diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 93dc398fb9f..a5ec7960006 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -39,7 +39,7 @@ body: attributes: label: What operating system(s) this bug have occurred on? description: Put in the release name of the OS (additionally with an extra version number and/or an architecture name) this problem have occurred on. - placeholder: "Ex. Windows 10 21H2, Ubuntu 21.04 etc." + placeholder: "Ex. Windows 10 21H2 64-bit, Ubuntu 21.04 etc." validations: required: true # This is confusing @@ -63,7 +63,7 @@ body: id: config attributes: label: Used configuration - description: Share the configuration (usually from the `dosbox-x.conf` or `dosbox.conf` file) that caused the bug to occur. Leave this area empty if you're using the default configuration. If you want to link to a upload of the file, please put the link into the "Additional information" box instead. + description: Share your options (e.g.`dosbox-x.conf`) that caused the bug to occur. Using command `config -wc filename.conf -mod -norem` will save a file with only the options you modified. You may upload and put the link of your config in the "Additional information" box instead. render: ini # Syntax highlighting validations: required: false @@ -71,7 +71,7 @@ body: id: log attributes: label: Output log - description: The relevant log DOSBox-X outputted when the problem occurred. If you want to link to a upload of the file, please put the link into the "Additional information" box instead. + description: The log may include hints to solve your problem. Enable logging in the dosbox-x.conf file or launch DOSBox-X by `dosbox-x -console` to get one. You may upload and put the link of your log in the "Additional information" box instead. render: text # Syntax highlighting validations: required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 7dff5c6c06f..2503a9bddb2 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -2,7 +2,7 @@ Add a summary of the change(s) brought by this PR here. ## What issue(s) does this PR address? -If there are any related issues, reference them here. Ex. #1234, Fixes #1234, Closes #1234, etc. +If there are any related issues, reference them here. Ex. #⁠1234, Fixes #⁠1234, Closes #⁠1234, etc. ## Does this PR introduce new feature(s)? diff --git a/.github/workflows/hxdos.yml b/.github/workflows/hxdos.yml index f93bb835724..4ab1d70522a 100644 --- a/.github/workflows/hxdos.yml +++ b/.github/workflows/hxdos.yml @@ -18,10 +18,10 @@ jobs: shell: pwsh steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Prepare HX-DOS shell: bash run: | @@ -46,6 +46,10 @@ jobs: echo "#define GIT_COMMIT_HASH \"${shortsha}\"" >> include/build_timestamp.h echo "#define COPYRIGHT_END_YEAR \"${copyrightyear}\"" >> include/build_timestamp.h cat include/build_timestamp.h + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION=$(echo "${GITHUB_REF##*/}" | sed -E 's/^dosbox-x-v([0-9]+\.[0-9]+\.[0-9]+)$/\1/' || echo "unknown") + echo "VERSION=$VERSION" >> $GITHUB_ENV + fi - name: Build HX-DOS shell: pwsh run: | @@ -79,37 +83,70 @@ jobs: mkdir -p $top/package/language cp $top/contrib/translations/*/*.lng $top/package/language/ cd $top/package/ - $top/vs/tool/zip.exe -r -9 $top/dosbox-x-mingw-hx-dos-${{ env.timestamp }}.zip * + TIMESTAMP="${{ env.timestamp }}" + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + ZIPNAME="dosbox-x-hx-dos-${VERSION}.zip" + $top/vs/tool/zip.exe -r -9 "$top/$ZIPNAME" * + else + ZIPNAME="dosbox-x-hx-dos-${TIMESTAMP}-nightly" + fi + echo "ZIPNAME=$ZIPNAME" >> $GITHUB_ENV cd $top - name: Wait for VS 32bit build to finish (Release only) if: startsWith(github.ref, 'refs/tags/') shell: bash run: | sleep 40m + - name: Get releases + run: | + curl -s https://api.github.com/repos/joncampbell123/dosbox-x/releases?per_page=100 > releases.json + - name: Find valid tag (no osfree) + id: decide + shell: bash + run: | + TAG=$(jq -r ' + .[] + | select(.draft == false and .prerelease == false) + | select([(.assets // [])[].name | contains("osfree")] | any | not) + | .tag_name + ' releases.json | head -n 1) + if [ -z "$TAG" ]; then + echo "No valid release found" + exit 1 + fi + echo "Selected tag: $TAG" + echo "tag=$TAG" >> $GITHUB_OUTPUT - name: Download Windows build - uses: robinraju/release-downloader@v1.11 + uses: robinraju/release-downloader@v1.13 with: repository: "joncampbell123/dosbox-x" - latest: true + tag: ${{ steps.decide.outputs.tag }} filename: "dosbox-x-vsbuild-win32-*.zip" + - name: Run in Windows build shell: bash run: | top=`pwd` - $top/vs/tool/unzip.exe -n "dosbox-x-vsbuild-win32-*.zip" "bin/Win32/Release/dosbox-x.*" + ZIP=$(ls dosbox-x-vsbuild-win32-*.zip | head -n 1) || exit 1 + $top/vs/tool/unzip.exe -n "$ZIP" "bin/Win32/Release/dosbox-x.*" + test -f "$top/bin/Win32/Release/dosbox-x.exe" || (echo "exe not found" && exit 1) cp $top/package/dosbox-x.ref $top/hxdos.cfg echo mount b ..>>$top/hxdos.cfg echo "echo success>b:\SUCCESS.TXT">>$top/hxdos.cfg - $top/bin/Win32/Release/dosbox-x.exe -silent -exit -set memsize=128 -c "mount c ." -c "c:" -c "cd package" -c "dosbox-x -silent -exit -conf ..\hxdos.cfg>..\OUTPUT.TXT" + $top/bin/Win32/Release/dosbox-x.exe -silent -exit -set memsize=128 \ + -c "mount c ." \ + -c "c:" \ + -c "cd package" \ + -c "dosbox-x -silent -exit -conf ..\hxdos.cfg>..\OUTPUT.TXT" cat $top/OUTPUT.TXT - test -f $top/SUCCESS.TXT || (echo The HX-DOS build did not run successfully && exit 1) + test -f $top/SUCCESS.TXT || (echo "HX-DOS build failed" && exit 1) - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: - name: dosbox-x-mingw-hx-dos-${{ env.timestamp }} + name: ${{ env.ZIPNAME }} path: ${{ github.workspace }}/package/ - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: - files: dosbox-x-mingw-hx-dos-${{ env.timestamp }}.zip + files: ${{ env.ZIPNAME }} diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index aeb9d164cbc..c1d2202beda 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -15,11 +15,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 with: node-version: '14' - name: Build minimal @@ -30,11 +30,12 @@ jobs: - name: Install libraries run: | sudo apt-get update -y - sudo apt-get install -y nasm fluidsynth libfluidsynth-dev libpcap-dev libslirp-dev libsdl-net1.2-dev libsdl2-net-dev libglu1-mesa-dev freeglut3-dev mesa-common-dev libpng-dev + sudo apt-get install -y nasm fluidsynth libfluidsynth-dev libpcap-dev libslirp-dev libsdl-net1.2-dev libsdl2-net-dev libglu1-mesa-dev freeglut3-dev mesa-common-dev libpng-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libavdevice-dev libavcodec-extra mkdir src/bin - name: Update build info shell: bash run: | + echo "timestamp=`git show -s --format=%at | xargs -I# date -d @# +%Y%m%d%H%M%S`" >> $GITHUB_ENV export shortsha=`echo ${GITHUB_SHA} | cut -c1-7` export copyrightyear=`git show -s --format=%at | xargs -I# date -d @# +'%Y'` export updatestr=`git show -s --format=%at | xargs -I# date -d @# +'%b %d, %Y %I:%M:%S%P'` @@ -46,13 +47,13 @@ jobs: - name: Build Linux SDL1 run: | top=`pwd` - ./build-debug + ./build-debug --enable-avcodec strip -s $top/src/dosbox-x cp $top/src/dosbox-x $top/src/bin/dosbox-x-sdl1 - name: Build Linux SDL2 run: | top=`pwd` - ./build-debug-sdl2 + ./build-debug-sdl2 --enable-avcodec strip -s $top/src/dosbox-x cp $top/src/dosbox-x $top/src/bin/dosbox-x-sdl2 - name: Unit testing @@ -78,7 +79,7 @@ jobs: cp $top/contrib/glshaders/* $top/src/bin/glshaders/ cp $top/contrib/translations/*/*.lng $top/src/bin/languages/ - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: name: dosbox-x-linux-x86_64-${{ env.timestamp }} path: ${{ github.workspace }}/src/bin/ @@ -86,15 +87,15 @@ jobs: permissions: actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows contents: read # for actions/checkout to fetch code - if: github.event_name == 'push' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' + if: false # github.event_name == 'push' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 with: node-version: '14' - name: Install libraries diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 875c97db4d7..a990c4c2291 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -12,16 +12,16 @@ jobs: actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows contents: write # for actions/checkout to fetch code and softprops/action-gh-release if: github.event_name == 'push' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' - runs-on: macos-13 + runs-on: macos-15-intel steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install libraries run: | - brew install autoconf automake nasm glfw glew coreutils sevenzip + brew install autoconf automake nasm glfw glew coreutils sevenzip libslirp fluid-synth pkg-config libtool mkdir -p package/dosbox-x mkdir -p package/dosbox-x-sdl2 # cd vs/sdlnet && ./build-dosbox.sh @@ -36,6 +36,10 @@ jobs: echo "#define GIT_COMMIT_HASH \"${shortsha}\"" >> include/build_timestamp.h echo "#define COPYRIGHT_END_YEAR \"${copyrightyear}\"" >> include/build_timestamp.h cat include/build_timestamp.h + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION=$(echo "${GITHUB_REF##*/}" | sed -E 's/^dosbox-x-v([0-9]+\.[0-9]+\.[0-9]+)$/\1/' || echo "unknown") + echo "VERSION=$VERSION" >> $GITHUB_ENV + fi - name: Build macOS SDL1 run: | top=`pwd` @@ -66,18 +70,26 @@ jobs: cp $top/COPYING $top/package/dosbox-x-sdl2/COPYING.txt cp $top/contrib/macos/readme.txt $top/package/dosbox-x-sdl2/README.txt cd $top/package/ - 7zz a $top/dosbox-x-macosx-x86_64-${{ env.timestamp }}.zip * + TIMESTAMP="${{ env.timestamp }}" + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + ZIPNAME="dosbox-x-macosx-x86_64-${VERSION}.zip" + else + ZIPNAME="dosbox-x-macosx-x86_64-${TIMESTAMP}-nightly.zip" + fi + echo "ZIPNAME=$ZIPNAME" >> $GITHUB_ENV + 7zz a "$top/$ZIPNAME" * cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: - name: dosbox-x-macosx-x86_64-${{ env.timestamp }} - path: ${{ github.workspace }}/dosbox-x-macosx-x86_64-${{ env.timestamp }}.zip + name: ${{ env.ZIPNAME }} + path: "${{ github.workspace }}/${{ env.ZIPNAME }}" - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: - files: dosbox-x-macosx-x86_64-${{ env.timestamp }}.zip + files: ${{ env.ZIPNAME }} + macOS_ARM_CI_build: permissions: actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows @@ -86,13 +98,13 @@ jobs: runs-on: macos-14 steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install libraries run: | - brew install autoconf automake nasm glfw glew coreutils sevenzip + brew install autoconf automake nasm glfw glew coreutils sevenzip libslirp fluid-synth pkg-config libtool mkdir -p package/dosbox-x mkdir -p package/dosbox-x-sdl2 # cd vs/sdlnet && ./build-dosbox.sh @@ -107,6 +119,10 @@ jobs: echo "#define GIT_COMMIT_HASH \"${shortsha}\"" >> include/build_timestamp.h echo "#define COPYRIGHT_END_YEAR \"${copyrightyear}\"" >> include/build_timestamp.h cat include/build_timestamp.h + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION=$(echo "${GITHUB_REF##*/}" | sed -E 's/^dosbox-x-v([0-9]+\.[0-9]+\.[0-9]+)$/\1/' || echo "unknown") + echo "VERSION=$VERSION" >> $GITHUB_ENV + fi - name: Build macOS SDL1 run: | top=`pwd` @@ -137,15 +153,23 @@ jobs: cp $top/COPYING $top/package/dosbox-x-sdl2/COPYING.txt cp $top/contrib/macos/readme.txt $top/package/dosbox-x-sdl2/README.txt cd $top/package/ - 7zz a $top/dosbox-x-macosx-arm64-${{ env.timestamp }}.zip * + TIMESTAMP="${{ env.timestamp }}" + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + ZIPNAME="dosbox-x-macosx-arm64-${VERSION}.zip" + else + ZIPNAME="dosbox-x-macosx-arm64-${TIMESTAMP}-nightly.zip" + fi + echo "ZIPNAME=$ZIPNAME" >> $GITHUB_ENV + 7zz a "$top/$ZIPNAME" * cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: - name: dosbox-x-macosx-arm64-${{ env.timestamp }} - path: ${{ github.workspace }}/dosbox-x-macosx-arm64-${{ env.timestamp }}.zip + name: ${{ env.ZIPNAME }} + path: "${{ github.workspace }}/${{ env.ZIPNAME }}" - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: - files: dosbox-x-macosx-arm64-${{ env.timestamp }}.zip + files: ${{ env.ZIPNAME }} + diff --git a/.github/workflows/mingw32.yml b/.github/workflows/mingw32.yml index 4eb2a10fef1..a93de5581a6 100644 --- a/.github/workflows/mingw32.yml +++ b/.github/workflows/mingw32.yml @@ -18,17 +18,16 @@ jobs: shell: msys2 {0} steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: msys2/setup-msys2@v2 with: msystem: MINGW32 update: true - install: git make base-devel mingw-w64-i686-toolchain mingw-w64-i686-libtool mingw-w64-i686-nasm autoconf automake mingw-w64-i686-ncurses mingw-w64-i686-binutils mingw-w64-i686-libslirp + install: git make base-devel mingw-w64-i686-toolchain mingw-w64-i686-libtool mingw-w64-i686-nasm autoconf automake mingw-w64-i686-ncurses mingw-w64-i686-binutils - name: Install libslirp - if: false run: | # Run this job when MinGW drops 32-bit library support (Other libraries can be built as well) top=`pwd` @@ -37,12 +36,9 @@ jobs: git clone https://github.com/msys2/MINGW-packages.git pwd cd MINGW-packages - #ls -lg cd mingw-w64-libslirp - #ls -lg sed -i -e "s/^mingw_arch=\(.*\)/mingw_arch=(\'mingw32\')/" PKGBUILD MINGW_ARCH=MINGW32 makepkg-mingw -sCLf --noconfirm - #ls -lg pacman --noconfirm -U mingw-w64-*-any.pkg.tar.zst - name: Update build info shell: bash @@ -56,6 +52,10 @@ jobs: echo "#define GIT_COMMIT_HASH \"${shortsha}\"" >> include/build_timestamp.h echo "#define COPYRIGHT_END_YEAR \"${copyrightyear}\"" >> include/build_timestamp.h cat include/build_timestamp.h + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION=$(echo "${GITHUB_REF##*/}" | sed -E 's/^dosbox-x-v([0-9]+\.[0-9]+\.[0-9]+)$/\1/' || echo "unknown") + echo "VERSION=$VERSION" >> $GITHUB_ENV + fi - name: Build MinGW32 SDL1 run: | top=`pwd` @@ -119,18 +119,26 @@ jobs: cp $top/contrib/translations/*/*.lng $top/package/mingw-build/mingw-sdl2/languages/ cp $top/COPYING $top/package/COPYING cd $top/package/ - $top/vs/tool/zip.exe -r -9 $top/dosbox-x-mingw-win32-${{ env.timestamp }}.zip * + TIMESTAMP="${{ env.timestamp }}" + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + ZIPNAME="dosbox-x-mingw32-${VERSION}-portable.zip" + $top/vs/tool/zip.exe -r -9 "$top/$ZIPNAME" * + else + ZIPNAME="dosbox-x-mingw32-${TIMESTAMP}-nightly" + fi + echo "ZIPNAME=$ZIPNAME" >> $GITHUB_ENV cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: - name: dosbox-x-mingw-win32-${{ env.timestamp }} + name: ${{ env.ZIPNAME }} path: ${{ github.workspace }}/package/ - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: - files: dosbox-x-mingw-win32-${{ env.timestamp }}.zip + files: ${{ env.ZIPNAME }} + MinGW32_CI_lowend_build: permissions: actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows @@ -142,15 +150,20 @@ jobs: shell: msys2 {0} steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: msys2/setup-msys2@v2 with: msystem: MINGW32 update: true install: git make mingw-w64-i686-libtool autoconf automake p7zip + - name: Export env parameters + run: | + echo "MSYS2_LOCATION=${{ steps.msys2.outputs.msys2-location }}" >> $GITHUB_ENV + echo "MSYSTEM_PREFIX=${{ steps.msys2.outputs.msys2-location }}/mingw32" >> $GITHUB_ENV + echo "mingw32 is installed at: $MSYSTEM_PREFIX" - name: Update build info shell: bash run: | @@ -165,25 +178,23 @@ jobs: cat include/build_timestamp.h sed -i -e "s/#define OS_PLATFORM \"MinGW\"/#define OS_PLATFORM \"MinGWLE\"/" include/version_string.h sed -i -e "s/#define OS_PLATFORM_LONG \"MinGW\"/#define OS_PLATFORM_LONG \"MinGW Low-end\"/" include/version_string.h + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION=$(echo "${GITHUB_REF##*/}" | sed -E 's/^dosbox-x-v([0-9]+\.[0-9]+\.[0-9]+)$/\1/' || echo "unknown") + echo "VERSION=$VERSION" >> $GITHUB_ENV + fi - name: setup lowend build environment run: | top=`pwd` echo "${top}" - export "MSYSTEM_PREFIX=/d/a/_temp/msys64/mingw32" echo "path=$PATH" cd ${MSYSTEM_PREFIX}/.. - rm -rf /d/a/_temp/msys64/mingw32 + rm -rf mingw32 mkdir mingw32 7z x $top/build-scripts/mingw/lowend-bin/i686-7.3.0-release-posix-dwarf-rt_v5-rev0+nasm.7z -o${MSYSTEM_PREFIX} - # cp $top/build-scripts/mingw/lowend-bin/make.exe ${MSYSTEM_PREFIX}/bin/make.exe - echo "MSYSTEM_PREFIX=${MSYSTEM_PREFIX}" - chmod +x ${MSYSTEM_PREFIX}/bin/*.* - chmod +x ${MSYSTEM_PREFIX}/i686-w64-mingw32/bin/*.* - chmod +x ${MSYSTEM_PREFIX}/opt/bin/*.* + find "${MSYSTEM_PREFIX}" -type f -iname "*.exe" -exec chmod +x {} \; - name: Build MinGW32 SDL1 run: | top=`pwd` - export "MSYSTEM_PREFIX=/d/a/_temp/msys64/mingw32" ./build-mingw strip -s $top/src/dosbox-x.exe - name: Package MinGW32 lowend SDL1 @@ -213,7 +224,6 @@ jobs: - name: Build MinGW32 lowend SDL2 run: | top=`pwd` - export "MSYSTEM_PREFIX=/d/a/_temp/msys64/mingw32" ./build-mingw-sdl2 strip -s $top/src/dosbox-x.exe - name: Package MinGW32 lowend SDL2 @@ -242,18 +252,26 @@ jobs: cp $top/contrib/translations/*/*.lng $top/package/mingw-build/mingw-sdl2/languages/ cp $top/COPYING $top/package/COPYING cd $top/package/ - $top/vs/tool/zip.exe -r -9 $top/dosbox-x-mingw-win32-lowend-${{ env.timestamp }}.zip * + TIMESTAMP="${{ env.timestamp }}" + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + ZIPNAME="dosbox-x-mingw32_lowend-${VERSION}-portable.zip" + $top/vs/tool/zip.exe -r -9 "$top/$ZIPNAME" * + else + ZIPNAME="dosbox-x-mingw32_lowend-${TIMESTAMP}-nightly" + fi + echo "ZIPNAME=$ZIPNAME" >> $GITHUB_ENV cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: - name: dosbox-x-mingw-win32-lowend-${{ env.timestamp }} + name: ${{ env.ZIPNAME }} path: ${{ github.workspace }}/package/ - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: - files: dosbox-x-mingw-win32-lowend-${{ env.timestamp }}.zip + files: ${{ env.ZIPNAME }} + MinGW32_CI_lowend9x_build: permissions: actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows @@ -265,15 +283,20 @@ jobs: shell: msys2 {0} steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: msys2/setup-msys2@v2 with: msystem: MINGW32 update: true install: git make mingw-w64-i686-libtool autoconf automake p7zip + - name: Export env parameters + run: | + echo "MSYS2_LOCATION=${{ steps.msys2.outputs.msys2-location }}" >> $GITHUB_ENV + echo "MSYSTEM_PREFIX=${{ steps.msys2.outputs.msys2-location }}/mingw32" >> $GITHUB_ENV + echo "mingw32 is installed at: $MSYSTEM_PREFIX" - name: Update build info shell: bash run: | @@ -288,23 +311,24 @@ jobs: cat include/build_timestamp.h sed -i -e "s/#define OS_PLATFORM \"MinGW\"/#define OS_PLATFORM \"MinGW9x\"/" include/version_string.h sed -i -e "s/#define OS_PLATFORM_LONG \"MinGW\"/#define OS_PLATFORM_LONG \"MinGW Low-end 9x\"/" include/version_string.h + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION=$(echo "${GITHUB_REF##*/}" | sed -E 's/^dosbox-x-v([0-9]+\.[0-9]+\.[0-9]+)$/\1/' || echo "unknown") + echo "VERSION=$VERSION" >> $GITHUB_ENV + fi - name: setup lowend9x build environment run: | top=`pwd` echo "${top}" - export "MSYSTEM_PREFIX=/d/a/_temp/msys64/mingw32" echo "path=$PATH" cd ${MSYSTEM_PREFIX}/.. - rm -rf /d/a/_temp/msys64/mingw32 + rm -rf mingw32 wget https://github.com/crazii/MINGW-toolchains-w9x/releases/download/v1.0.1-w95nt/mingw32.7z 7z x mingw32.7z -o./ echo "MSYSTEM_PREFIX=${MSYSTEM_PREFIX}" - chmod +x ${MSYSTEM_PREFIX}/bin/*.* - chmod +x ${MSYSTEM_PREFIX}/i686-w64-mingw32/bin/*.* + find "${MSYSTEM_PREFIX}" -type f -iname "*.exe" -exec chmod +x {} \; - name: Build MinGW32 lowend9x run: | top=`pwd` - export "MSYSTEM_PREFIX=/d/a/_temp/msys64/mingw32" ./build-mingw-lowend9x strip -s $top/src/dosbox-x.exe - name: Package MinGW32 lowend9x @@ -333,15 +357,22 @@ jobs: cp $top/contrib/translations/*/*.lng $top/package/mingw-build/mingw/languages/ cp $top/COPYING $top/package/COPYING cd $top/package/ - $top/vs/tool/zip.exe -r -9 $top/dosbox-x-mingw-win32-lowend9x-${{ env.timestamp }}.zip * + TIMESTAMP="${{ env.timestamp }}" + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + ZIPNAME="dosbox-x-mingw32_lowend9x-${VERSION}-portable.zip" + $top/vs/tool/zip.exe -r -9 "$top/$ZIPNAME" * + else + ZIPNAME="dosbox-x-mingw32_lowend9x-${TIMESTAMP}-nightly" + fi + echo "ZIPNAME=$ZIPNAME" >> $GITHUB_ENV cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: - name: dosbox-x-mingw-win32-lowend9x-${{ env.timestamp }} + name: ${{ env.ZIPNAME }} path: ${{ github.workspace }}/package/ - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: - files: dosbox-x-mingw-win32-lowend9x-${{ env.timestamp }}.zip + files: ${{ env.ZIPNAME }} \ No newline at end of file diff --git a/.github/workflows/mingw64.yml b/.github/workflows/mingw64.yml index b096a1d157b..cfce84308b7 100644 --- a/.github/workflows/mingw64.yml +++ b/.github/workflows/mingw64.yml @@ -18,10 +18,10 @@ jobs: shell: msys2 {0} steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: msys2/setup-msys2@v2 with: msystem: MINGW64 @@ -39,6 +39,10 @@ jobs: echo "#define GIT_COMMIT_HASH \"${shortsha}\"" >> include/build_timestamp.h echo "#define COPYRIGHT_END_YEAR \"${copyrightyear}\"" >> include/build_timestamp.h cat include/build_timestamp.h + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION=$(echo "${GITHUB_REF##*/}" | sed -E 's/^dosbox-x-v([0-9]+\.[0-9]+\.[0-9]+)$/\1/' || echo "unknown") + echo "VERSION=$VERSION" >> $GITHUB_ENV + fi - name: Build MinGW64 SDL1 run: | top=`pwd` @@ -99,18 +103,26 @@ jobs: cp $top/contrib/translations/*/*.lng $top/package/mingw-build/mingw-sdl2/languages/ cp $top/COPYING $top/package/COPYING cd $top/package/ - $top/vs/tool/zip.exe -r -9 $top/dosbox-x-mingw-win64-${{ env.timestamp }}.zip * + TIMESTAMP="${{ env.timestamp }}" + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + ZIPNAME="dosbox-x-mingw64-${VERSION}-portable.zip" + $top/vs/tool/zip.exe -r -9 "$top/$ZIPNAME" * + else + ZIPNAME="dosbox-x-mingw64-${TIMESTAMP}-nightly" + fi + echo "ZIPNAME=$ZIPNAME" >> $GITHUB_ENV cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: - name: dosbox-x-mingw-win64-${{ env.timestamp }} + name: ${{ env.ZIPNAME }} path: ${{ github.workspace }}/package/ - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: - files: dosbox-x-mingw-win64-${{ env.timestamp }}.zip + files: ${{ env.ZIPNAME }} + UCRT64_CI_build: permissions: actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows @@ -122,10 +134,10 @@ jobs: shell: msys2 {0} steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: msys2/setup-msys2@v2 with: msystem: UCRT64 @@ -206,12 +218,12 @@ jobs: $top/vs/tool/zip.exe -r -9 $top/dosbox-x-UCRT64-experimental-${{ env.timestamp }}.zip * cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: name: dosbox-x-UCRT64-experimental-${{ env.timestamp }} path: ${{ github.workspace }}/package/ - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: 0 with: files: dosbox-x-UCRT64-experimental-${{ env.timestamp }}.zip diff --git a/.github/workflows/vsbuild32.yml b/.github/workflows/vsbuild32.yml index cc6410da467..3b1e1c0f225 100644 --- a/.github/workflows/vsbuild32.yml +++ b/.github/workflows/vsbuild32.yml @@ -18,15 +18,14 @@ jobs: shell: pwsh steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 - - uses: microsoft/setup-msbuild@v2 + - uses: actions/checkout@v6 + - uses: microsoft/setup-msbuild@v3 - name: Prepare Visual Studio Win32 shell: bash run: | - #ls -1 vs/dosbox-x.vcxproj vs/freetype/builds/windows/vc2010/freetype.vcxproj vs/libpdcurses/libpdcurses.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/sdl/VisualC/SDL/SDL.vcxproj vs/sdl/VisualC/SDLmain/SDLmain.vcxproj vs/sdl2/VisualC/SDL/SDL.vcxproj vs/sdl2/VisualC/SDLmain/SDLmain.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/zlib/zlib/zlib.vcxproj | xargs sed -b -i 's/v142/v141/g;s/>10.010.0.22000.0> $GITHUB_ENV export shortsha=`echo ${GITHUB_SHA} | cut -c1-7` export copyrightyear=`git show -s --format=%at | xargs -I# date -d @# +'%Y'` @@ -36,6 +35,10 @@ jobs: echo "#define GIT_COMMIT_HASH \"${shortsha}\"" >> include/build_timestamp.h echo "#define COPYRIGHT_END_YEAR \"${copyrightyear}\"" >> include/build_timestamp.h cat include/build_timestamp.h + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION=$(echo "${GITHUB_REF##*/}" | sed -E 's/^dosbox-x-v([0-9]+\.[0-9]+\.[0-9]+)$/\1/' || echo "unknown") + echo "VERSION=$VERSION" >> $GITHUB_ENV + fi - name: Build Visual Studio Win32 SDL1 shell: pwsh run: | @@ -104,39 +107,45 @@ jobs: cp $top/contrib/translations/*/*.lng $top/package/bin/Win32/"Release SDL2"/languages/ cp $top/COPYING $top/package/COPYING cd $top/package/ - $top/vs/tool/zip.exe -r -9 $top/dosbox-x-vsbuild-win32-${{ env.timestamp }}.zip * + TIMESTAMP="${{ env.timestamp }}" + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + ZIPNAME="dosbox-x-vsbuild-win32-${VERSION}-portable.zip" + $top/vs/tool/zip.exe -r -9 "$top/$ZIPNAME" * + else + ZIPNAME="dosbox-x-vsbuild-win32-${TIMESTAMP}-nightly" + fi + echo "ZIPNAME=$ZIPNAME" >> $GITHUB_ENV cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: - name: dosbox-x-vsbuild-win32-${{ env.timestamp }} + name: ${{ env.ZIPNAME }} path: ${{ github.workspace }}/package/ - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: - files: dosbox-x-vsbuild-win32-${{ env.timestamp }}.zip + files: ${{ env.ZIPNAME }} MSBuild_ARM32_CI_build: permissions: actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows contents: write # for actions/checkout to fetch code and softprops/action-gh-release if: github.event_name == 'push' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' - runs-on: windows-latest + runs-on: windows-2022 defaults: run: shell: pwsh steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 - - uses: microsoft/setup-msbuild@v2 + - uses: actions/checkout@v6 + - uses: microsoft/setup-msbuild@v3 - name: Prepare Visual Studio ARM32 shell: bash run: | - ls -1 vs/dosbox-x.vcxproj vs/freetype/builds/windows/vc2010/freetype.vcxproj vs/libpdcurses/libpdcurses.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/sdl/VisualC/SDL/SDL.vcxproj vs/sdl/VisualC/SDLmain/SDLmain.vcxproj vs/sdl2/VisualC/SDL/SDL.vcxproj vs/sdl2/VisualC/SDLmain/SDLmain.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/zlib/zlib/zlib.vcxproj | xargs sed -b -i 's/>10.010.0.22621.0> $GITHUB_ENV export shortsha=`echo ${GITHUB_SHA} | cut -c1-7` export copyrightyear=`git show -s --format=%at | xargs -I# date -d @# +'%Y'` @@ -146,10 +155,14 @@ jobs: echo "#define GIT_COMMIT_HASH \"${shortsha}\"" >> include/build_timestamp.h echo "#define COPYRIGHT_END_YEAR \"${copyrightyear}\"" >> include/build_timestamp.h cat include/build_timestamp.h + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION=$(echo "${GITHUB_REF##*/}" | sed -E 's/^dosbox-x-v([0-9]+\.[0-9]+\.[0-9]+)$/\1/' || echo "unknown") + echo "VERSION=$VERSION" >> $GITHUB_ENV + fi - name: Build Visual Studio ARM32 SDL1 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=ARM -p:PostBuildEventUseInBuild=false + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=ARM -p:PostBuildEventUseInBuild=false -p:PlatformToolset=v143 -p:WindowsTargetPlatformVersion=10.0.22621.0 if (-not(Test-Path -Path bin\ARM\Release\dosbox-x.exe -PathType Leaf)) {exit 1} - name: Package Visual Studio ARM32 SDL1 shell: bash @@ -178,7 +191,7 @@ jobs: - name: Build Visual Studio ARM32 SDL2 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=ARM -p:PostBuildEventUseInBuild=false + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=ARM -p:PostBuildEventUseInBuild=false -p:PlatformToolset=v143 -p:WindowsTargetPlatformVersion=10.0.22621.0 if (-not(Test-Path -Path bin\ARM\"Release SDL2"\dosbox-x.exe -PathType Leaf)) {exit 1} - name: Package Visual Studio ARM32 SDL2 shell: bash @@ -206,15 +219,22 @@ jobs: cp $top/contrib/translations/*/*.lng $top/package/bin/ARM/"Release SDL2"/languages/ cp $top/COPYING $top/package/COPYING cd $top/package/ - $top/vs/tool/zip.exe -r -9 $top/dosbox-x-vsbuild-arm32-${{ env.timestamp }}.zip * + TIMESTAMP="${{ env.timestamp }}" + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + ZIPNAME="dosbox-x-vsbuild-arm32-${VERSION}-portable.zip" + $top/vs/tool/zip.exe -r -9 "$top/$ZIPNAME" * + else + ZIPNAME="dosbox-x-vsbuild-arm32-${TIMESTAMP}-nightly" + fi + echo "ZIPNAME=$ZIPNAME" >> $GITHUB_ENV cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: - name: dosbox-x-vsbuild-arm32-${{ env.timestamp }} + name: ${{ env.ZIPNAME }} path: ${{ github.workspace }}/package/ - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: - files: dosbox-x-vsbuild-arm32-${{ env.timestamp }}.zip + files: ${{ env.ZIPNAME }} diff --git a/.github/workflows/vsbuild64.yml b/.github/workflows/vsbuild64.yml index f4ac1b6e491..831275d3d18 100644 --- a/.github/workflows/vsbuild64.yml +++ b/.github/workflows/vsbuild64.yml @@ -18,15 +18,14 @@ jobs: shell: pwsh steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 - - uses: microsoft/setup-msbuild@v2 + - uses: actions/checkout@v6 + - uses: microsoft/setup-msbuild@v3 - name: Prepare Visual Studio Win64 shell: bash run: | - #ls -1 vs/dosbox-x.vcxproj vs/freetype/builds/windows/vc2010/freetype.vcxproj vs/libpdcurses/libpdcurses.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/sdl/VisualC/SDL/SDL.vcxproj vs/sdl/VisualC/SDLmain/SDLmain.vcxproj vs/sdl2/VisualC/SDL/SDL.vcxproj vs/sdl2/VisualC/SDLmain/SDLmain.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/zlib/zlib/zlib.vcxproj | xargs sed -b -i 's/v142/v141/g;s/>10.010.0.22000.0> $GITHUB_ENV export shortsha=`echo ${GITHUB_SHA} | cut -c1-7` export copyrightyear=`git show -s --format=%at | xargs -I# date -d @# +'%Y'` @@ -36,10 +35,14 @@ jobs: echo "#define GIT_COMMIT_HASH \"${shortsha}\"" >> include/build_timestamp.h echo "#define COPYRIGHT_END_YEAR \"${copyrightyear}\"" >> include/build_timestamp.h cat include/build_timestamp.h + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION=$(echo "${GITHUB_REF##*/}" | sed -E 's/^dosbox-x-v([0-9]+\.[0-9]+\.[0-9]+)$/\1/' || echo "unknown") + echo "VERSION=$VERSION" >> $GITHUB_ENV + fi - name: Build Visual Studio Win64 SDL1 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=x64 + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=x64 if (-not(Test-Path -Path bin\x64\Release\dosbox-x.exe -PathType Leaf)) {exit 1} contrib\windows\installer\PatchPE.exe bin\x64\Release\dosbox-x.exe - name: Package Visual Studio Win64 SDL1 @@ -104,18 +107,25 @@ jobs: cp $top/contrib/translations/*/*.lng $top/package/bin/x64/"Release SDL2"/languages/ cp $top/COPYING $top/package/COPYING cd $top/package/ - $top/vs/tool/zip.exe -r -9 $top/dosbox-x-vsbuild-win64-${{ env.timestamp }}.zip * + TIMESTAMP="${{ env.timestamp }}" + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + ZIPNAME="dosbox-x-vsbuild-win64-${VERSION}-portable.zip" + $top/vs/tool/zip.exe -r -9 "$top/$ZIPNAME" * + else + ZIPNAME="dosbox-x-vsbuild-win64-${TIMESTAMP}-nightly" + fi + echo "ZIPNAME=$ZIPNAME" >> $GITHUB_ENV cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: - name: dosbox-x-vsbuild-win64-${{ env.timestamp }} + name: ${{ env.ZIPNAME }} path: ${{ github.workspace }}/package/ - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: - files: dosbox-x-vsbuild-win64-${{ env.timestamp }}.zip + files: ${{ env.ZIPNAME }} MSBuild_ARM64_CI_build: permissions: @@ -128,11 +138,11 @@ jobs: shell: pwsh steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 - - uses: microsoft/setup-msbuild@v2 + - uses: actions/checkout@v6 + - uses: microsoft/setup-msbuild@v3 - name: Prepare Visual Studio ARM64 shell: bash run: | @@ -145,10 +155,14 @@ jobs: echo "#define GIT_COMMIT_HASH \"${shortsha}\"" >> include/build_timestamp.h echo "#define COPYRIGHT_END_YEAR \"${copyrightyear}\"" >> include/build_timestamp.h cat include/build_timestamp.h + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION=$(echo "${GITHUB_REF##*/}" | sed -E 's/^dosbox-x-v([0-9]+\.[0-9]+\.[0-9]+)$/\1/' || echo "unknown") + echo "VERSION=$VERSION" >> $GITHUB_ENV + fi - name: Build Visual Studio ARM64 SDL1 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=ARM64 -p:PostBuildEventUseInBuild=false + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=ARM64 -p:PostBuildEventUseInBuild=false -p:PlatformToolset=v143 if (-not(Test-Path -Path bin\ARM64\Release\dosbox-x.exe -PathType Leaf)) {exit 1} - name: Package Visual Studio ARM64 SDL1 shell: bash @@ -177,7 +191,7 @@ jobs: - name: Build Visual Studio ARM64 SDL2 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=ARM64 -p:PostBuildEventUseInBuild=false + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=ARM64 -p:PostBuildEventUseInBuild=false -p:PlatformToolset=v143 if (-not(Test-Path -Path bin\ARM64\"Release SDL2"\dosbox-x.exe -PathType Leaf)) {exit 1} - name: Package Visual Studio ARM64 SDL2 shell: bash @@ -205,18 +219,26 @@ jobs: cp $top/contrib/translations/*/*.lng $top/package/bin/ARM64/"Release SDL2"/languages/ cp $top/COPYING $top/package/COPYING cd $top/package/ - $top/vs/tool/zip.exe -r -9 $top/dosbox-x-vsbuild-arm64-${{ env.timestamp }}.zip * + TIMESTAMP="${{ env.timestamp }}" + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + ZIPNAME="dosbox-x-vsbuild-arm64-${VERSION}-portable.zip" + $top/vs/tool/zip.exe -r -9 "$top/$ZIPNAME" * + else + ZIPNAME="dosbox-x-vsbuild-arm64-${TIMESTAMP}-nightly" + fi + echo "ZIPNAME=$ZIPNAME" >> $GITHUB_ENV cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: - name: dosbox-x-vsbuild-arm64-${{ env.timestamp }} + name: ${{ env.ZIPNAME }} path: ${{ github.workspace }}/package/ - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: - files: dosbox-x-vsbuild-arm64-${{ env.timestamp }}.zip + files: ${{ env.ZIPNAME }} + MS2022Build64_CI_build: permissions: actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows @@ -228,16 +250,15 @@ jobs: shell: pwsh steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 - - uses: microsoft/setup-msbuild@v2 + - uses: actions/checkout@v6 + - uses: microsoft/setup-msbuild@v3 - name: Prepare Visual Studio 2022 build shell: bash run: | echo "timestamp=`git show -s --format=%at | xargs -I# date -d @# +%Y%m%d%H%M%S`" >> $GITHUB_ENV - ls -1 vs/dosbox-x.vcxproj vs/freetype/builds/windows/vc2010/freetype.vcxproj vs/libpdcurses/libpdcurses.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/sdl/VisualC/SDL/SDL.vcxproj vs/sdl/VisualC/SDLmain/SDLmain.vcxproj vs/sdl2/VisualC/SDL/SDL.vcxproj vs/sdl2/VisualC/SDLmain/SDLmain.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/zlib/zlib/zlib.vcxproj | xargs sed -b -i 's/v14[2-9]/v143/g' echo "timestamp=`git show -s --format=%at | xargs -I# date -d @# +%Y%m%d%H%M%S`" >> $GITHUB_ENV export shortsha=`echo ${GITHUB_SHA} | cut -c1-7` export copyrightyear=`git show -s --format=%at | xargs -I# date -d @# +'%Y'` @@ -250,22 +271,22 @@ jobs: - name: Build Visual Studio Win32 SDL1 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=Win32 + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=Win32 -p:PlatformToolset=v143 if (-not(Test-Path -Path bin\Win32\Release\dosbox-x.exe -PathType Leaf)) {exit 1} - name: Build Visual Studio Win32 SDL2 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=Win32 + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=Win32 -p:PlatformToolset=v143 if (-not(Test-Path -Path bin\Win32\"Release SDL2"\dosbox-x.exe -PathType Leaf)) {exit 1} - name: Build Visual Studio Win64 SDL1 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=x64 + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=x64 -p:PlatformToolset=v143 if (-not(Test-Path -Path bin\x64\Release\dosbox-x.exe -PathType Leaf)) {exit 1} - name: Build Visual Studio Win64 SDL2 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=x64 + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=x64 -p:PlatformToolset=v143 if (-not(Test-Path -Path bin\x64\"Release SDL2"\dosbox-x.exe -PathType Leaf)) {exit 1} - name: Package Visual Studio 2022 build shell: bash @@ -308,7 +329,102 @@ jobs: $top/vs/tool/zip.exe -r -9 $top/dosbox-x-vs2022build-${{ env.timestamp }}-experimental.zip * cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: name: dosbox-x-vs2022build-${{ env.timestamp }}-experimental + path: ${{ github.workspace }}/package/ + + MS2026Build64_CI_build: + permissions: + actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows + contents: write # for actions/checkout to fetch code and softprops/action-gh-release + if: github.event_name == 'push' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' + runs-on: windows-2025-vs2026 + defaults: + run: + shell: pwsh + steps: + - name: Cancel previous runs + uses: styfle/cancel-workflow-action@0.13.1 + with: + access_token: ${{ github.token }} + - uses: actions/checkout@v6 + - uses: microsoft/setup-msbuild@v3 + - name: Prepare Visual Studio 2022 build + shell: bash + run: | + echo "timestamp=`git show -s --format=%at | xargs -I# date -d @# +%Y%m%d%H%M%S`" >> $GITHUB_ENV + echo "timestamp=`git show -s --format=%at | xargs -I# date -d @# +%Y%m%d%H%M%S`" >> $GITHUB_ENV + export shortsha=`echo ${GITHUB_SHA} | cut -c1-7` + export copyrightyear=`git show -s --format=%at | xargs -I# date -d @# +'%Y'` + export updatestr=`git show -s --format=%at | xargs -I# date -d @# +'%b %d, %Y %I:%M:%S%P'` + echo '/* auto generated */' > include/build_timestamp.h + echo "#define UPDATED_STR \"${updatestr}\"" >> include/build_timestamp.h + echo "#define GIT_COMMIT_HASH \"${shortsha}\"" >> include/build_timestamp.h + echo "#define COPYRIGHT_END_YEAR \"${copyrightyear}\"" >> include/build_timestamp.h + cat include/build_timestamp.h + - name: Build Visual Studio Win32 SDL1 + shell: pwsh + run: | + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=Win32 -p:PlatformToolset=v145 + if (-not(Test-Path -Path bin\Win32\Release\dosbox-x.exe -PathType Leaf)) {exit 1} + - name: Build Visual Studio Win32 SDL2 + shell: pwsh + run: | + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=Win32 -p:PlatformToolset=v145 + if (-not(Test-Path -Path bin\Win32\"Release SDL2"\dosbox-x.exe -PathType Leaf)) {exit 1} + - name: Build Visual Studio Win64 SDL1 + shell: pwsh + run: | + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=x64 -p:PlatformToolset=v145 + if (-not(Test-Path -Path bin\x64\Release\dosbox-x.exe -PathType Leaf)) {exit 1} + - name: Build Visual Studio Win64 SDL2 + shell: pwsh + run: | + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=x64 -p:PlatformToolset=v145 + if (-not(Test-Path -Path bin\x64\"Release SDL2"\dosbox-x.exe -PathType Leaf)) {exit 1} + - name: Package Visual Studio 2022 build + shell: bash + run: | + top=`pwd` + #$top/bin/Win32/Release/dosbox-x.exe -tests -set waitonerror=false -set logfile=tests.log || (echo Unit test completed: failure && exit 1) + #cat tests.log + mkdir -p $top/package/drivez + mkdir -p $top/package/scripts + mkdir -p $top/package/shaders + mkdir -p $top/package/glshaders + mkdir -p $top/package/languages + mkdir -p $top/vs-bin + cp $top/bin/Win32/Release/dosbox-x.exe $top/package/dosbox-x_VS2026x86_SDL1.exe + cp $top/bin/Win32/"Release SDL2"/dosbox-x.exe $top/package/dosbox-x_VS2026x86_SDL2.exe + cp $top/bin/x64/Release/dosbox-x.exe $top/package/dosbox-x_VS2026x64_SDL1.exe + cp $top/bin/x64/"Release SDL2"/dosbox-x.exe $top/package/dosbox-x_VS2026x64_SDL2.exe + cp $top/bin/Win32/Release/dosbox-x.exe $top/vs-bin/dosbox-x_VS2026x86_SDL1.exe + cp $top/bin/Win32/"Release SDL2"/dosbox-x.exe $top/vs-bin/dosbox-x_VS2026x86_SDL2.exe + cp $top/bin/x64/Release/dosbox-x.exe $top/vs-bin/dosbox-x_VS2026x64_SDL1.exe + cp $top/bin/x64/"Release SDL2"/dosbox-x.exe $top/vs-bin/dosbox-x_VS2026x64_SDL2.exe + sed -e 's/^\(output[ ]*=[ ]*\)default$/\1ttf/;s/^\(windowposition[ ]*=\)[ ]*-/\1 /;s/^\(file access tries[ ]*=[ ]*\)0$/\13/;s/^\(printoutput[ ]*=[ ]*\)png$/\1printer/;s/\(drive data rate limit[ ]*=[ ]*\)-1$/\10/' $top/dosbox-x.reference.conf>$top/package/dosbox-x.conf + cp $top/CHANGELOG $top/package/CHANGELOG.txt + cp $top/dosbox-x.reference.conf $top/package/dosbox-x.reference.conf + cp $top/dosbox-x.reference.full.conf $top/package/dosbox-x.reference.full.conf + cp $top/contrib/windows/installer/readme.txt $top/package/README.txt + cp $top/contrib/windows/installer/inpout32.dll $top/package/inpout32.dll + cp $top/contrib/windows/installer/inpoutx64.dll $top/package/inpoutx64.dll + cp $top/contrib/fonts/FREECG98.BMP $top/package/FREECG98.BMP + cp $top/contrib/fonts/wqy_1?pt.bdf $top/package/ + cp $top/contrib/fonts/Nouveau_IBM.ttf $top/package/Nouveau_IBM.ttf + cp $top/contrib/fonts/SarasaGothicFixed.ttf $top/package/SarasaGothicFixed.ttf + cp $top/contrib/windows/installer/drivez_readme.txt $top/package/drivez/readme.txt + cp $top/contrib/windows/installer/windows_explorer_context_menu*.bat $top/package/scripts/ + cp $top/contrib/windows/shaders/* $top/package/shaders/ + cp $top/contrib/glshaders/* $top/package/glshaders/ + cp $top/contrib/translations/*/*.lng $top/package/languages/ + cp $top/COPYING $top/package/COPYING + cd $top/package/ + $top/vs/tool/zip.exe -r -9 $top/dosbox-x-vs2026build-${{ env.timestamp }}-experimental.zip * + cd $top + - name: Upload preview package + uses: actions/upload-artifact@v7.0.1 + with: + name: dosbox-x-vs2026build-${{ env.timestamp }}-experimental path: ${{ github.workspace }}/package/ \ No newline at end of file diff --git a/.github/workflows/vsbuild_xp.yml b/.github/workflows/vsbuild_xp.yml index 7f699118dbf..840ada980c2 100644 --- a/.github/workflows/vsbuild_xp.yml +++ b/.github/workflows/vsbuild_xp.yml @@ -12,17 +12,17 @@ jobs: actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows contents: write # for actions/checkout to fetch code and softprops/action-gh-release if: github.event_name == 'push' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' - runs-on: windows-latest + runs-on: windows-2022 defaults: run: shell: pwsh steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 - - uses: microsoft/setup-msbuild@v2 + - uses: actions/checkout@v6 + - uses: microsoft/setup-msbuild@v3 - name: Install v141 build tools run: | Set-Location "C:\Program Files (x86)\Microsoft Visual Studio\Installer\" @@ -41,7 +41,7 @@ jobs: shell: bash run: | echo "timestamp=`git show -s --format=%at | xargs -I# date -d @# +%Y%m%d%H%M%S`" >> $GITHUB_ENV - ls -1 vs/dosbox-x.vcxproj vs/freetype/builds/windows/vc2010/freetype.vcxproj vs/libpdcurses/libpdcurses.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/sdl/VisualC/SDL/SDL.vcxproj vs/sdl/VisualC/SDLmain/SDLmain.vcxproj vs/sdl2/VisualC/SDL/SDL.vcxproj vs/sdl2/VisualC/SDLmain/SDLmain.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/zlib/zlib/zlib.vcxproj | xargs sed -b -i 's/v14[2-9]/v141/g;s/>10.010.0.22000.010.010.0.22621.0> $GITHUB_ENV export shortsha=`echo ${GITHUB_SHA} | cut -c1-7` export copyrightyear=`git show -s --format=%at | xargs -I# date -d @# +'%Y'` @@ -51,6 +51,10 @@ jobs: echo "#define GIT_COMMIT_HASH \"${shortsha}\"" >> include/build_timestamp.h echo "#define COPYRIGHT_END_YEAR \"${copyrightyear}\"" >> include/build_timestamp.h cat include/build_timestamp.h + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + VERSION=$(echo "${GITHUB_REF##*/}" | sed -E 's/^dosbox-x-v([0-9]+\.[0-9]+\.[0-9]+)$/\1/' || echo "unknown") + echo "VERSION=$VERSION" >> $GITHUB_ENV + fi - name: Build Visual Studio Win32 SDL1 shell: pwsh run: | @@ -112,27 +116,34 @@ jobs: cp $top/contrib/translations/*/*.lng $top/package/languages/ cp $top/COPYING $top/package/COPYING cd $top/package/ - $top/vs/tool/zip.exe -r -9 $top/dosbox-x-vsbuild-XP-${{ env.timestamp }}.zip * + TIMESTAMP="${{ env.timestamp }}" + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + ZIPNAME="dosbox-x-winXP-${VERSION}-portable.zip" + $top/vs/tool/zip.exe -r -9 "$top/$ZIPNAME" * + else + ZIPNAME="dosbox-x-winXP-${TIMESTAMP}-nightly" + fi + echo "ZIPNAME=$ZIPNAME" >> $GITHUB_ENV cd $top - name: Upload preview package - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: - name: dosbox-x-vsbuild-XP-${{ env.timestamp }} + name: ${{ env.ZIPNAME }} path: ${{ github.workspace }}/package/ - name: Upload release package - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: - files: dosbox-x-vsbuild-XP-${{ env.timestamp }}.zip + files: ${{ env.ZIPNAME }} - name: Cache Visual Studio builds (nightly) if: ${{ !startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: ${{ github.workspace }}/vs-bin key: vs-xp-bin-${{ github.sha }} - name: Cache Visual Studio builds (release) if: ${{ startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: ${{ github.workspace }}/vs-bin key: vs-xp-bin-r-${{ github.sha }} @@ -146,12 +157,17 @@ jobs: run: shell: msys2 {0} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: msys2/setup-msys2@v2 with: msystem: MINGW32 update: true install: git make mingw-w64-i686-libtool autoconf automake p7zip + - name: Export env parameters + run: | + echo "MSYS2_LOCATION=${{ steps.msys2.outputs.msys2-location }}" >> $GITHUB_ENV + echo "MSYSTEM_PREFIX=${{ steps.msys2.outputs.msys2-location }}/mingw32" >> $GITHUB_ENV + echo "mingw32 is installed at: $MSYSTEM_PREFIX" - name: Update build info shell: bash run: | @@ -170,13 +186,11 @@ jobs: run: | top=`pwd` echo "${top}" - export "MSYSTEM_PREFIX=/d/a/_temp/msys64/mingw32" echo "path=$PATH" cd ${MSYSTEM_PREFIX}/.. - rm -rf /d/a/_temp/msys64/mingw32 + rm -rf mingw32 mkdir mingw32 7z x $top/build-scripts/mingw/lowend-bin/i686-7.3.0-release-posix-dwarf-rt_v5-rev0+nasm.7z -o${MSYSTEM_PREFIX} - # cp $top/build-scripts/mingw/lowend-bin/make.exe ${MSYSTEM_PREFIX}/bin/make.exe echo "MSYSTEM_PREFIX=${MSYSTEM_PREFIX}" chmod +x ${MSYSTEM_PREFIX}/bin/*.* chmod +x ${MSYSTEM_PREFIX}/i686-w64-mingw32/bin/*.* @@ -184,26 +198,24 @@ jobs: - name: Build MinGW32 lowend SDL2 run: | top=`pwd` - export "MSYSTEM_PREFIX=/d/a/_temp/msys64/mingw32" ./build-mingw-sdl2 strip -s src/dosbox-x.exe mkdir -p mingw-bin cp src/dosbox-x.exe mingw-bin/dosbox-x_mingw_lowend_SDL2.exe - name: Build MinGW32 lowend SDL1 run: | - export "MSYSTEM_PREFIX=/d/a/_temp/msys64/mingw32" ./build-mingw strip -s src/dosbox-x.exe cp src/dosbox-x.exe mingw-bin/dosbox-x_mingw_lowend_SDL1.exe - name: Cache MinGW32 lowend builds (nightly) if: ${{ !startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: ${{ github.workspace }}/mingw-bin key: mingw-xp-bin-${{ github.sha }} - name: Cache MinGW32 lowend builds (release) if: ${{ startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: ${{ github.workspace }}/mingw-bin key: mingw-xp-bin-r-${{ github.sha }} @@ -211,7 +223,7 @@ jobs: permissions: actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows contents: write # for actions/checkout to fetch code and softprops/action-gh-release - runs-on: windows-latest + runs-on: windows-2022 needs: [MSBuild_XP_CI_build, MinGW32_lowend_CI_build] env: GH_TOKEN: ${{ github.token }} @@ -219,28 +231,28 @@ jobs: run: shell: bash steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Restore Visual Studio builds (nightly) if: ${{ !startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ${{ github.workspace }}/vs-bin key: vs-xp-bin-${{ github.sha }} - name: Restore Visual Studio builds (release) if: ${{ startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ${{ github.workspace }}/vs-bin key: vs-xp-bin-r-${{ github.sha }} - name: Restore MinGW builds (nightly) if: ${{ !startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ${{ github.workspace }}/mingw-bin key: mingw-xp-bin-${{ github.sha }} - name: Restore MinGW builds (release) if: ${{ startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ${{ github.workspace }}/mingw-bin key: mingw-xp-bin-r-${{ github.sha }} @@ -264,12 +276,12 @@ jobs: cd contrib/windows/installer/ ./ISCC.exe ./DOSBox-X-setupXP.iss - name: Upload preview installer - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: name: dosbox-x-winXP-${{ env.timestamp }}-setup.exe path: contrib/windows/installer/dosbox-x-winXP-*.exe - name: Upload XP build installer release version - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: files: | diff --git a/.github/workflows/windows-installers.yml b/.github/workflows/windows-installers.yml index 8c0b35b0304..41b9e1269e3 100644 --- a/.github/workflows/windows-installers.yml +++ b/.github/workflows/windows-installers.yml @@ -12,21 +12,20 @@ jobs: permissions: actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows contents: write # for actions/checkout to fetch code and softprops/action-gh-release - runs-on: windows-latest + runs-on: windows-2022 defaults: run: shell: pwsh steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 - - uses: microsoft/setup-msbuild@v2 + - uses: actions/checkout@v6 + - uses: microsoft/setup-msbuild@v3 - name: Prepare Visual Studio builds shell: bash run: | - ls -1 vs/dosbox-x.vcxproj vs/freetype/builds/windows/vc2010/freetype.vcxproj vs/libpdcurses/libpdcurses.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/libpng/projects/vstudio/libpng/libpng.vcxproj vs/sdl/VisualC/SDL/SDL.vcxproj vs/sdl/VisualC/SDLmain/SDLmain.vcxproj vs/sdl2/VisualC/SDL/SDL.vcxproj vs/sdl2/VisualC/SDLmain/SDLmain.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/sdlnet/VisualC/SDL_net_VS2008.vcxproj vs/zlib/zlib/zlib.vcxproj | xargs sed -b -i 's/>10.010.0.22621.0> $GITHUB_ENV export shortsha=`git show --format='%h' --no-patch` export copyrightyear=`git show -s --format=%at | xargs -I# date -d @# +'%Y'` @@ -63,22 +62,22 @@ jobs: - name: Build Visual Studio ARM64 SDL1 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=ARM64 -p:PostBuildEventUseInBuild=false + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=ARM64 -p:PostBuildEventUseInBuild=false -p:PlatformToolset=v143 if (-not(Test-Path -Path bin\ARM64\Release\dosbox-x.exe -PathType Leaf)) {exit 1} - name: Build Visual Studio ARM64 SDL2 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=ARM64 -p:PostBuildEventUseInBuild=false + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=ARM64 -p:PostBuildEventUseInBuild=false -p:PlatformToolset=v143 if (-not(Test-Path -Path bin\ARM64\"Release SDL2"\dosbox-x.exe -PathType Leaf)) {exit 1} - name: Build Visual Studio ARM32 SDL1 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=ARM -p:PostBuildEventUseInBuild=false + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration=Release -p:Platform=ARM -p:PostBuildEventUseInBuild=false -p:PlatformToolset=v143 -p:WindowsTargetPlatformVersion=10.0.22621.0 if (-not(Test-Path -Path bin\ARM\Release\dosbox-x.exe -PathType Leaf)) {exit 1} - name: Build Visual Studio ARM32 SDL2 shell: pwsh run: | - msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=ARM -p:PostBuildEventUseInBuild=false + msbuild -m vs/dosbox-x.sln -t:dosbox-x:Rebuild -p:Configuration="Release SDL2" -p:Platform=ARM -p:PostBuildEventUseInBuild=false -p:PlatformToolset=v143 -p:WindowsTargetPlatformVersion=10.0.22621.0 if (-not(Test-Path -Path bin\ARM\"Release SDL2"\dosbox-x.exe -PathType Leaf)) {exit 1} - name: Package Visual Studio x86/x64 builds shell: bash @@ -124,7 +123,7 @@ jobs: cd $top ls -lg - name: Upload preview package(VS x86/x64) - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: name: dosbox-x-vsbuild-win-x86_x64-${{ env.timestamp }} path: ${{ github.workspace }}/package/ @@ -145,19 +144,19 @@ jobs: $top/vs/tool/zip.exe -r -9 "$top/dosbox-x-vsbuild-ARM32_64-${{ env.timestamp }}.zip" "*" cd $top - name: Upload preview package(ARM 32/64-bit) - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: name: dosbox-x-vsbuild-ARM32_64-${{ env.timestamp }} path: ${{ github.workspace }}/package/ - name: Cache Visual Studio builds (nightly) if: ${{ !startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: ${{ github.workspace }}/vs-bin key: vs-${{ github.sha }} - name: Cache Visual Studio builds (release) if: ${{ startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: ${{ github.workspace }}/vs-bin key: vs-r-${{ github.sha }} @@ -171,15 +170,15 @@ jobs: shell: msys2 {0} steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: msys2/setup-msys2@v2 with: msystem: MINGW32 update: true - install: git mingw-w64-i686-toolchain mingw-w64-i686-libtool mingw-w64-i686-nasm autoconf automake mingw-w64-i686-libslirp + install: git mingw-w64-i686-toolchain mingw-w64-i686-libtool mingw-w64-i686-nasm autoconf automake - name: Update build info shell: bash run: | @@ -192,6 +191,19 @@ jobs: echo "#define GIT_COMMIT_HASH \"${shortsha}\"" >> include/build_timestamp.h echo "#define COPYRIGHT_END_YEAR \"${copyrightyear}\"" >> include/build_timestamp.h cat include/build_timestamp.h + - name: Install libslirp + run: | + # Run this job when MinGW drops 32-bit library support (Other libraries can be built as well) + top=`pwd` + mkdir pkg + cd pkg + git clone https://github.com/msys2/MINGW-packages.git + pwd + cd MINGW-packages + cd mingw-w64-libslirp + sed -i -e "s/^mingw_arch=\(.*\)/mingw_arch=(\'mingw32\')/" PKGBUILD + MINGW_ARCH=MINGW32 makepkg-mingw -sCLf --noconfirm + pacman --noconfirm -U mingw-w64-*-any.pkg.tar.zst - name: Build MinGW32 SDL1 run: | top=`pwd` @@ -211,13 +223,13 @@ jobs: cp $top/src/dosbox-x.exe $top/mingw-x86-bin/dosbox-x_MinGWx86_SDL2.exe - name: Cache MinGW x86 builds (nightly) if: ${{ !startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: ${{ github.workspace }}/mingw-x86-bin key: mingw-x86-bin-${{ github.sha }} - name: Cache MinGW x86 builds (release) if: ${{ startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: ${{ github.workspace }}/mingw-x86-bin key: mingw-x86-bin-r-${{ github.sha }} @@ -231,10 +243,10 @@ jobs: shell: msys2 {0} steps: - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@0.13.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: msys2/setup-msys2@v2 with: msystem: MINGW64 @@ -270,13 +282,13 @@ jobs: cp $top/src/dosbox-x.exe $top/mingw-x64-bin/dosbox-x_MinGWx64_SDL2.exe - name: Cache MinGW x64 builds (nightly) if: ${{ !startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: ${{ github.workspace }}/mingw-x64-bin key: mingw-x64-bin-${{ github.sha }} - name: Cache MinGW x64 builds (release) if: ${{ startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: ${{ github.workspace }}/mingw-x64-bin key: mingw-x64-bin-r-${{ github.sha }} @@ -284,7 +296,7 @@ jobs: permissions: actions: write # for styfle/cancel-workflow-action to cancel/stop running workflows contents: write # for actions/checkout to fetch code and softprops/action-gh-release - runs-on: windows-latest + runs-on: windows-2022 needs: [MinGW32_CI_build, MinGW64_CI_build, Visual_Studio_CI_build] env: GH_TOKEN: ${{ github.token }} @@ -292,40 +304,40 @@ jobs: run: shell: bash steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Restore MinGW x86 builds (nightly) if: ${{ !startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ${{ github.workspace }}/mingw-x86-bin key: mingw-x86-bin-${{ github.sha }} - name: Restore MinGW x64 builds (nightly) if: ${{ !startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ${{ github.workspace }}/mingw-x64-bin key: mingw-x64-bin-${{ github.sha }} - name: Restore Visual Studio builds (nightly) if: ${{ !startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ${{ github.workspace }}/vs-bin key: vs-${{ github.sha }} - name: Restore MinGW x86 builds (release) if: ${{ startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ${{ github.workspace }}/mingw-x86-bin key: mingw-x86-bin-r-${{ github.sha }} - name: Restore MinGW x64 builds (release) if: ${{ startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ${{ github.workspace }}/mingw-x64-bin key: mingw-x64-bin-r-${{ github.sha }} - name: Restore Visual Studio builds (release) if: ${{ startsWith(github.ref, 'refs/tags/') }} - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ${{ github.workspace }}/vs-bin key: vs-r-${{ github.sha }} @@ -361,7 +373,7 @@ jobs: cd $top/package/ cd $top - name: Upload preview package (MinGW) - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: name: dosbox-x-mingw-x86_x64-${{ env.timestamp }} path: ${{ github.workspace }}/package/ @@ -387,12 +399,12 @@ jobs: cd contrib/windows/installer/ ISCC.exe ./DOSBox-X-installer.iss - name: Upload preview installer - uses: actions/upload-artifact@v4.6.0 + uses: actions/upload-artifact@v7.0.1 with: name: dosbox-x-windows-${{ env.timestamp }}-setup.exe path: contrib/windows/installer/dosbox-x-windows*.exe - name: Upload Windows build installer release version - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 if: startsWith(github.ref, 'refs/tags/') with: files: | diff --git a/.gitignore b/.gitignore index ff314885747..fd1f3f384a0 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ config.sub depcomp install-sh missing +config.log *~ dosbox-x.app/ @@ -131,6 +132,7 @@ vs/sdlnet/configure vs/sdlnet/compile vs/sdlnet/linux-build/ vs/sdlnet/linux-host/ +vs/sdlnet/autom4te.cache/* # Ignore autogenerated contrib/macos/dosbox-x.plist diff --git a/2xscale.sh b/2xscale.sh index af8ff456276..ca53611cac1 100755 --- a/2xscale.sh +++ b/2xscale.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh src="${1}" dst="${1}.2x.mp4" diff --git a/BUILD.md b/BUILD.md index f6defb6a27d..e6762a999fb 100644 --- a/BUILD.md +++ b/BUILD.md @@ -1,8 +1,8 @@ Building DOSBox-X ================= -The page is about manually building the DOSBox-X source code. Automated -development (preview) builds intended for testing purposes for various +The page is about manually building the DOSBox-X source code. +Automated development (preview) builds intended for testing purposes for various platforms are also available from the [DOSBox-X Development Builds](https://dosbox-x.com/devel-build.html) page. Released builds are available from the [Releases](https://github.com/joncampbell123/dosbox-x/releases) page. @@ -14,91 +14,90 @@ General information on source code compilation The four major operating systems and platforms of DOSBox-X are: -1. Windows 11, 10, 8, 7, Vista and XP for 32-bit and 64-bit x86/x64 and ARM +1. Windows 11, 10, 8, 7, Vista and XP, 9x/NT4 for 32-bit and 64-bit x86/x64 and ARM +- [Visual Studio (2017 and after)](#compiling-the-source-code-using-visual-studio-windows) for Vista and after +- [MinGW standard and lowend builds](#compiling-the-source-code-using-mingw-windows) 2. Linux (with X11) 64-bit x86/x64, and on a Raspberry Pi 3/4/5 +- [General procedures](#general-procedures-to-compile-the-source-code-cross-platform) +- [Ubuntu](#to-compile-dosbox-x-in-ubuntu-tested-with-2004-and-2010) +- [Fedora Workstation](#to-compile-dosbox-x-in-fedora-workstation) +- [Raspberry Pi](#to-compile-dosbox-x-in-raspberry-pi) -3. macOS (Mac OS X) recent version, 64-bit Intel, ARM-based, and Universal +3. macOS (Mac OS X) High Sierra and after, Intel, ARM-based, and Universal +- [macOS procedures](#compiling-the-source-code-in-macos-high-sierra-and-after) 4. DOS (MS-DOS 5.0+ or compatible) +- [HX-DOS](#to-compile-dosbox-x-for-dos-with-hx-dos-platform) -Straight Windows builds are expected to compile using the free community edition -of Visual Studio 2017 to Visual Studio 2022 and the DirectX 2010 SDK. +The code requires a C++ compiler that can support the C++11 standard. -Linux and MinGW Windows builds are expected to compile with the GNU autotools. +DOSBox-X supports both SDL ([Simple Directmedia Library](https://www.libsdl.org/)) versions 1.x and 2.x. -macOS builds are expected to compile on the terminal using GNU autotools and -the LLVM/Clang compiler provided by XCode. Universal macOS builds are only -possible when building on a host machine powered by an Apple Silicon CPU, due to -requiring parallel Homebrew installations running natively *and* under -Rosetta 2. +Note that SDL1 version requires the in-tree SDL 1.x library since it has been heavily modified from +the original SDL 1.x source code and is thus somewhat incompatible with the stock library. -In all cases, the code requires a C++ compiler that can support the C++11 -standard. - -Note that DOSBox-X supports both SDL 1.x and 2.x, and it is written to compile -against the in-tree copy of the SDL 1.x (Simple Directmedia Library), or against -the SDL 2.x library provided by your Linux distribution. - -For Visual Studio and MinGW compilation, the in-tree copy of SDL is always -used. Note that the in-tree SDL 1.x library has been heavily modified from -the original SDL 1.x source code and is thus somewhat incompatible with the -stock library. - -The modifications provide additional functions needed to improve DOSBox-X -and fix many issues with keyboard input, window management, and display -management that previously required terrible kludges within the DOSBox +Such modifications provide additional functions needed to improve DOSBox-X and fix many issues with keyboard input, +window management, and display management that previously required terrible kludges within the DOSBox and DOSBox-X source code. -In Windows, the modifications also permit the emulation to run independent -of the main window so that moving, resizing, or using menus does not cause -emulation to pause. +In Windows, the modifications also permit the emulation to run independent of the main window so that moving, +resizing, or using menus does not cause emulation to pause. + +In macOS, the modifications provide an interface to allow DOSBox-X to replace and manage the macOS menu bar. -In macOS, the modifications provide an interface to allow DOSBox-X to -replace and manage the macOS menu bar. +On the other hand, only a slight modification regarding IME support on Windows and macOS are added to the +in-tree SDL2 code, so Linux and macOS users may choose to use the original SDL2 library, +while on Windows in-tree SDL2 code is always used. Please look at the [README.source-code-description](README.source-code-description) file for more information and descriptions on the source code. -How to compile the source code (cross-platform) ------------------------------------------------ +Compiling the source code using Visual Studio (Windows) +------------------------------------------------------- -* General Linux or BSD compile (SDL1) -``` -./build-debug -sudo make install -``` +The source code can be built with Visual Studio 2017, 2019, and 2022. +The executables will work on 32-bit and 64-bit Windows Vista or higher. -* General Linux or BSD compile (SDL2) -``` -./build-debug-sdl2 -sudo make install -``` +Use the ```./vs/dosbox-x.sln``` "solution" file, select 32/64-bit, SDL1/2 and build the source code. +You will need the DirectX 2010 SDK for Direct3D9 support. -* macOS - * First install the required libraries needed. - ``` - brew install autoconf automake nasm glfw glew fluid-synth libslirp pkg-config - ``` - * Compile natively for the host architecture (SDL1 or SDL2) - ``` - ./build-macos - ``` - ``` - ./build-macos-sdl2 - ``` - * _(Optional)_ Add `universal` option to build an Universal Binary on an Apple Silicon CPU (will *not* work on Intel) - ``` - ./build-macos universal - ``` - ``` - ./build-macos-sdl2 universal - ```` - * You can build an App Bundle from the result of this build with - ``` - make dosbox-x.app - ``` -* MinGW compile for Windows 7 or later +By default the targeted platform is v142 (Visual Studio 2019). +Change it to v141 (VS2017) or v143 (VS2022) accordingly to your build environment. + +`WindowsTargetPlatformVersion` is set to `10.0` by default, which make VS pick the latest Windows SDK version installed, +but VS2017 requires you to explicitly set the version installed in your PC, for example `10.0.22000.0`. +_Note that ARM builds requires versions ``10.0.22621.0`` or before._ + +To build executables that will work on Windows XP, you have to change the target platform to v141 (Visual Studio 2017). +After the build is completed, you have to patch the PE header of the executable using a tool included in the source code. + +```./contrib/windows/installer/PatchPE.exe path-to-your-exe-file/dosbox-x.exe``` + +Libraries such as SDL, freetype, libpdcurses, libpng and zlib are already included, +and as of DOSBox-X 0.83.6 support for FluidSynth MIDI Synthesizer is also included +for Windows builds (set ``mididevice=fluidsynth`` in the [midi] section of DOSBox-X's +configuration file (dosbox-x.conf) along with required soundfont file [e.g. +``FluidR3_GM.sf2`` or ``GeneralUser_GS.sf2``] to use it). + +The slirp backend for the NE2000 network emulation is only supported by MinGW builds +but not Visual Studio builds. + +Build the source code for your platform (Win32, x64, ARM and ARM64 are supported). + +As of 2018/06/06, Visual Studio 2017 builds (32-bit and 64-bit) explicitly require +a processor that supports the SSE instruction set. As of version 2022.09.01, Visual +Studio ARM/ARM64 builds require a Windows SDK that includes the OpenGL library. + +Visual Studio Code is supported, too. + +Check the [README.development-in-Windows](README.development-in-Windows) file for more information about this platform. + +Compiling the source code using MinGW (Windows) +----------------------------------------------- +Depending on the target OS to run DOSBox-X, the build environment and procedures will vary. + +* For Windows 7 or later * First install the required libraries needed. Libraries for mingw32(32-bit) ``` @@ -108,6 +107,10 @@ sudo make install ``` pacman -S git make mingw-w64-x86_64-toolchain mingw-w64-x86_64-libslirp mingw-w64-x86_64-libtool mingw-w64-x86_64-nasm autoconf automake mingw-w64-x86_64-ncurses ``` + Libraries for UCRT64(64-bit) + ``` + pacman -S git make mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-libtool mingw-w64-ucrt-x86_64-nasm autoconf automake mingw-w64-ucrt-x86_64-libslirp + ``` * Compile (SDL1 or SDL2, Common for 32-bit/64-bit builds) ``` ./build-mingw @@ -115,21 +118,47 @@ sudo make install ``` ./build-mingw-sdl2 ``` -* MinGW compile (using MinGW32, not MinGW-w64: see NOTICE below) for lower-end systems including Windows XP or later (SDL1 or SDL2, 32-bit only) -``` -./build-mingw-lowend -``` +* For Windows XP or later (SDL1 or SDL2, 32-bit only) + * Start a 32-bit toolchain from the original (MinGW not the MinGW-w64 project). + Build environment for XP and later can be downloaded [here](https://github.com/joncampbell123/dosbox-x/blob/master/build-scripts/mingw/lowend-bin/i686-7.3.0-release-posix-dwarf-rt_v5-rev0%2Bnasm.7z). + + As an example, the official Release and Nightly builds are built by overwriting MinGW32 environment of MSYS2 with the above environment. + Refer to `MinGW32_CI_lowend_build` section in [mingw32.yml](https://github.com/joncampbell123/dosbox-x/blob/master/.github/workflows/mingw32.yml) for details. + * Compile (SDL1 or SDL2, Common for 32-bit/64-bit builds) + ``` + ./build-mingw-lowend + ``` + ``` + ./build-mingw-lowend-sdl2 + ``` + +* For Windows 9x/NT4 (SDL1, 32-bit only) + * Start a 32-bit toolchain from the original MinGW (not the MinGW-w64 project). + Build environment for 9x/NT4 build can be downloaded [here](https://github.com/crazii/MINGW-toolchains-w9x/releases/download/v1.0.1-w95nt/mingw32.7z). + + As an example, the official Release and Nightly builds are built by overwriting MinGW32 environment of MSYS2 with the above environment. + Refer to `MinGW32_CI_lowend9x_build` section in [mingw32.yml](https://github.com/joncampbell123/dosbox-x/blob/master/.github/workflows/mingw32.yml) for details. + * Compile + ``` + ./build-mingw-lowend9x + ``` + +NOTICE: Lowend builds should NOT be compiled with MinGW-w64 since they have extra dependencies which are not supported by Windows XP, Vista and 9x/NT4. + +## General procedures to compile the source code (cross-platform) +* First install the required tools and libraries, such as git, gcc, g++, make, Autotools, pkg-config, nasm, libxkbfile. + Depending on the [options](#libraries-used-by-dosbox-x) you want, some more may be required. +* Download the source code from the github repository ``` -./build-mingw-lowend-sdl2 +git clone https://github.com/joncampbell123/dosbox-x.git +cd dosbox-x ``` - -* MinGW compile (using MinGW32, not MinGW-w64: see NOTICE below) on Windows to target the DOS platform (MS-DOS or compatible with HX DOS Extender, SDL1 only) +* General Linux or BSD compile (SDL1) ``` -./build-mingw-hx-dos +./build-debug +sudo make install ``` - -NOTICE: Use the 32-bit toolchain from the original MinGW project for the lowend and HX-DOS builds, not the MinGW-w64 project. - Binaries compiled with MinGW-w64 have extra dependencies which are not supported by Windows XP or the HX DOS Extender. +Alternatively you can also compile the SDL2 version by running the ``./build-debug-sdl2`` script. ## To compile DOSBox-X in Ubuntu (tested with 20.04 and 20.10): @@ -191,49 +220,56 @@ cd dosbox-x ``` If you have audio problems, you may want to try the SDL2 build using `./build-debug-sdl2` script. -Compiling the source code using Visual Studio (Windows) -------------------------------------------------------- - -You can build the source code with Visual Studio 2017, 2019, and 2022. -(The code currently cannot be built with Visual Studio 2015) -The executables will work on 32-bit and 64-bit Windows Vista or higher. - -Use the ```./vs/dosbox-x.sln``` "solution" file and build the source code. -You will need the DirectX 2010 SDK for Direct3D9 support. - -By default the targeted platform is v142 (Visual Studio 2019). -To build the source code on Visual Studio 2017 or 2022, -you may change the platform toolset to v141 or v143 respectively. -For Visual Studio 2017, you have to set ``WindowsTargetPlatformVersion`` to whatever -Windows SDK version installed in your PC, for example ``10.0.22000.0``. -(Visual Studio 2019 and beyond will pick the latest Windows SDK version installed -if you set the value to `10.0`) - -To build executables that will work on Windows XP, -you have to change the target platform to v141 (Visual Studio 2017). -After the build is completed, you have to patch the PE header of the executable using -a tool included in the source code. - -```./contrib/windows/installer/PatchPE.exe path-to-your-exe-file/dosbox-x.exe``` - -Libraries such as SDL, freetype, libpdcurses, libpng and zlib are already included, -and as of DOSBox-X 0.83.6 support for FluidSynth MIDI Synthesizer is also included -for Windows builds (set ``mididevice=fluidsynth`` in the [midi] section of DOSBox-X's -configuration file (dosbox-x.conf) along with required soundfont file [e.g. -``FluidR3_GM.sf2`` or ``GeneralUser_GS.sf2``] to use it). - -The slirp backend for the NE2000 network emulation is only supported by MinGW builds -but not Visual Studio builds. - -Build the source code for your platform (Win32, x64, ARM and ARM64 are supported). - -As of 2018/06/06, Visual Studio 2017 builds (32-bit and 64-bit) explicitly require -a processor that supports the SSE instruction set. As of version 2022.09.01, Visual -Studio ARM/ARM64 builds require a Windows SDK that includes the OpenGL library. +Compiling the source code in macOS (High Sierra and after) +---------------------------------------------------------- +macOS builds are expected to compile on the terminal using GNU autotools and the LLVM/Clang compiler provided by XCode. +Universal macOS builds are only possible when building on a host machine powered by an Apple Silicon CPU, +due to requiring parallel Homebrew installations running natively *and* under Rosetta 2. + +* First install the required tools and libraries from [Homebrew](https://brew.sh/ja/) or [MacPorts](https://www.macports.org/). + To target older OS versions, MacPorts maybe recommended. + ``` + brew install autoconf automake nasm glfw glew fluid-synth libslirp libpcap pkg-config sdl2_net + ``` + ``` + sudo port install autoconf automake nasm glfw glew fluidsynth libslirp libpcap pkgconfig libsdl2_net + ``` +* Compile natively for the host architecture (SDL1 or SDL2) + ``` + ./build-macos + ``` + ``` + ./build-macos-sdl2 + ``` +* _(Optional)_ Add `universal` option to build an Universal Binary on an Apple Silicon CPU (will *not* work on Intel) + ``` + ./build-macos universal + ``` + ``` + ./build-macos-sdl2 universal + ```` +* You can build an App Bundle from the result of this build with + ``` + make dosbox-x.app + ``` +### _(Experimental)_ Building binaries for old macOS versions (10.12 Sierra and before) +*Old macOS versions may be built using MacPorts libraries with slightly different procedures. +``` + sudo port install autoconf automake nasm glfw glew fluidsynth libslirp libpcap pkgconfig libsdl2_net libpng zlib + ./build-macosold +``` +Use `./build-macosold-sdl2` for SDL2 builds. -Visual Studio Code is supported, too. +## To compile DOSBox-X for DOS with HX-DOS platform + * Start a 32-bit toolchain from the original MinGW (not the MinGW-w64 project). -Check the [README.development-in-Windows](README.development-in-Windows) file for more information about this platform. + Build environment for HX-DOS build can be downloaded [here](https://github.com/joncampbell123/dosbox-x/blob/master/build-scripts/mingw/lowend-bin/mingw-get-0.6.2-mingw32-beta-20131004-1-bin.zip). + As an example, the procedures of official Release and Nightly builds can be found in [hxdos.yml](https://github.com/joncampbell123/dosbox-x/blob/master/.github/workflows/hxdos.yml) as a reference. + * Compile (SDL1, 32-bit only) + ``` + ./build-mingw-hx-dos + ``` +NOTICE: HX-DOS builds should NOT be compiled with MinGW-w64 since they have extra dependencies which are not supported by the HX DOS Extender. Libraries used by DOSBox-X -------------------------- @@ -249,6 +285,7 @@ The following libraries are used by DOSBox-X: Note that only version 1.2.x (SDL1 version) and version 2.x (SDL2 version) are currently supported. + You may use SDL3 if combined with sdl2-compat library. License: LGPLv2+ diff --git a/CHANGELOG b/CHANGELOG index e173f04b2dc..01bf82ac2e7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,554 @@ -Next +Next version + - Added function to config to load MS-DOS device drivers. The command is + config -device -devparm . For example, + to load OAKCDROM.SYS into memory, you could type: + + config -device C:\DOS\OAKCDROM.SYS -devparm "/D:CD001" + + which is equivalent to the DEVICE line in CONFIG.SYS: + + DEVICE=C:\DOS\OAKCDROM.SYS /D:CD001 + + The goal is that DOSBox-X would fully support, through INT 21h and + other interfaces, real device drivers instead of hard coding specific + driver emulation. INT 21h would use the actual device chain instead + of a built-in list. Built-in device emulation could appear properly + in the device chain instead of fake entries. + + There seems to be interest on the DOSBox-X discussion and issue trackers + of getting DOSBox-X to provide or emulate the MS-DOS/Windows 95 IFS + driver to get Windows 95 to boot from a disk image in the native DOSBox-X + environment, perhaps this would help enable that. + + At this time (in development), only INIT is called. (joncampbell123) + - External DOS device driver read/write: Optimize I/O by using larger + read/write transfers (currently 16 based on how much memory is allocated + for device driver I/O request and data). Until this change, the code + used an extremely inefficient 1-byte read/write method to transfer + to or from the device driver. (joncampbell123) + - DOS execute bugfix: While ownership was properly listed in the MCB for + the PSP segment, the environment block associated with the program was + always listed in the MCB as belonging to the parent process. This has + been addressed (joncampbell123) + - Fix INT 21h AH=3Fh/40h READ/WRITE processing, when talking to an external + MS-DOS device driver, so that the bytes actually processed by the driver + are returned in AX to the DOS program, instead of giving the DOS program + the impression that all were processed when they may not have been. (joncampbell123) + - CD Audio: Fix track not advancing at end of playback (maron2000) + - Fix geometry detection of qcow2 images (maron2000) + - Fixed advanced scaler rendering artifacts when machine type is MDA, + Hercules, CGA, EGA, Tandy, or PCjr, or when SVGA 15/16bpp SVGA modes + are active. CGA/EGA with Advanced MAME 2x/3x and HQ2X scalers should + render correctly now. (joncampbell123) + - Added dosbox.conf [devices] section, which functions much like the + DEVICE= lines in CONFIG.SYS to load MS-DOS device drivers at startup. + Added support for RUN= lines to run commands like IMGMOUNT to help + set up drive mounts and CD-ROM devices, or any other diagnostic + purpose. While RUN= works just like the command shell, it is not + intended to be a general command shell for running DOS games or + applications that are unrelated to system startup. Added debugging + options like ECHO which echo the command about to be run, and + DEBUGBREAK which breaks into the debugger when starting the program + or device driver. (joncampbell123) + - Added code to device driver loading which will, where possible, + attempt to load the device driver as low as possible and pack it into + the DOS kernel below the start of the MCB chain to resemble how + device drivers are loaded in MS-DOS. (joncampbell123) + - Added debugger command "DOS DEVS" to list and enumerate the device + drivers in the DOS kernel. Added code to BOOT --boothax msdos to + track the location of the device driver list in the guest MS-DOS + kernel so "DOS DEVS" can work there as well. (joncampbell123) + - DOSBox-X shell will now free any memory it allocated and close files + that were opened on shutdown. This is important so that the CONFIG + shell (used for loading device drivers) does not leave behind + any memory it allocated when transferring control to the main + command shell. However, do NOT release memory and do NOT close files + on shell shutdown if the reason for the shutdown is the BOOT command. + By the time normal shutdown occurs, the BOOT command has already + overwritten low memory (and the MCB chain) with the guest OS's boot + code, therefore freeing shell memory in that cause would only cause + a complaint about a corrupted MCB chain and emulator E_Exit() shutdown. + (joncampbell123) + - Fixed VHD, qcow2 image geometry calculation (maron2000) + - Fix CONFIG vs DOS shell to ensure the welcome screen is printed first + before anything else on the console during startup. This is to help + keep any output from programs and device drivers on screen where + the user can see it (joncampbell123) + - Add basic support for MS-DOS block device drivers. If a block device + driver succeeds, set up a disk image object and attach it to the + FAT filesystem driver, and then a drive letter. At this time, this + is enough for Microsoft RAMDRIVE.SYS to load and appear as a working + drive letter in DOSBox-X (joncampbell123) + - CD-ROM device emulation is no longer strictly tied to MSCDEX emulation. + While devices are still initialized through MSCDEX emulation, it is now + possible for other parts of emulation to own a reference to it without + MSCDEX. This means it is now possible for CD-ROM emulation to work + after booting a guest OS without reaching back through MSCDEX emulation, + and MSCDEX emulation can now unload properly with the rest of the DOS + kernel. (joncampbell123) + - Fix bug where El Torito no emulation boot failed to notify the DOS + kernel that the MCB chain is no longer valid, causing MCB chain corruption + crashes. (joncampbell123) + - Added checks to sector I/O code to fix potential buffer overrun issues. + (orbisai0security) + - Fixed logging of 'Packed file is corrupt' message detection (maron2000) + - Fixed upper 32-bit of LBA was always cleared (maron2000) + +2026.05.02 + - DOSBox-X will now check both the current directory and the .config + directory in your home directory for DOSBox-X logo PNG files. + It is now possible to configure one set of PNG files as a default + for all uses of DOSBox-X from your user account. (joncampbell123). + - src/gui/render.cpp: Added missing ifdef conditional on C_METAL to enable + building on macOS platforms without Metal support. (herrnst) + - Fixed Metal support detection: add framework linker flags to configure + check (maron2000) + - Fixed window position not centered even when windowposition option is set + to do so. (maron2000) + - Fixed MSCDEX device name padding for short names (maron2000) + - When DOS games use the Adlib FM chip to do "digitized speech", DOSBox-X + does emulate that correctly, and it also correctly emulates how low + the volume is on the sound card output. However to make it more + audible, a new option "adlib pcm boost" has been added. If set, + and the Adlib emulation detects that the guest application is + playing PCM audio through it, the audio levels of the FM output + will be amplified to make the digitized speech much more audible. + (joncampbell123) + - Fixed mapping of TTF to match with guest codepage when launched with + output=ttf. (maron2000) + - Limit window size of TTF output to 2/3rd of the screen in both + dimensions so that the window is not TOO large on the user's screen. + (joncampbell123) + - Fix segfault in TTF output code caused by codepage mapping when the + TTF output is not active. (joncampbell123) + - Fixed clip_paste_bios option change was not reflected. Also, default is + changed to "true" for Windows due to some characters fails to paste when + set otherwise. (maron2000) + - Replaced some deprecated functions in dosbox.h. (maron2000) + - Fixed colors in the screenshot of macOS SDL1 build were wrong.(maron2000) + - Fix savestate restore crash in POD_Load_DOS_Files during live file slot + teardown (catbalony) + - Fixed mouse cursor display in DOS/V Japanese mode (nanshiki) + - INT 13h AH=48h: Fixed LBA detection (maron2000) + - Fixed read/write errors on last sectors of disk image (maron2000) + - Int 13h: Added option to enable/disable 48-bit LBA support (maron2000) + - Fix VHD file geometry detection (maron2000) + - Fixed crash when printing out multipages to printer (Windows) (maron2000) + - printer.cpp: Fix occasional missing page break after line wrap (maron2000) + +2026.03.29 + - Add dosbox.conf option to control the duration of the beep when + DOS CON and INT 10h are given the BEL character. (joncampbell123). + - DOS CON device BEL (beep) handling: For IBM PC modes, call on + INT 10h to make the beep, rather than duplicate code. Fix the + DOS CON device so that it can also properly beep in PC-98 mode. + (joncampbell123). + - Fix bug where the "zero memory on DOS allocation" option was + stuck on. Some games, like "Bad Cat" rely on memory contents + peristing across DOS EXEC and memory allocation. (joncampbell123). + - Fix Hercules palette selection related to herc blend. (joncampbell123). + - DOS kernel: When executing an EXE file, the loader can now detect + EXE files that were compressed using EXEPACK. Based on the new + exepack dosbox.conf setting, it can decompress the EXE by itself, + switch off the A20 gate, or do nothing. The purpose of this + setting is to avoid EXEPACK "Packed File is Corrupt" errors that + happen if the A20 gate is enabled and the EXE was loaded too low + in memory. (joncampbell123). + - Linux SDL1: Use XDG_SESSION_TYPE environment variable to detect + whether or not the user is running DOSBox-X under X11 or Wayland, + and if so, prevent the fbcon and svga drivers from initializing. + There seems to be a problem where, if run under Wayland and the + XWayland compatibility layer if not present, SDL1 uses the fbcon + driver to take over the screen using vtcon switching and the classic + fbdev driver interface. Don't do that! (joncampbell123). + - INT 21h AH=4Ah resize memory: If memory resize fails because there + is not enough room for the requested amount of memory, do not + set ownership of the block to the program. This fixes memory + allocation error in California Games II. The game at one point + seems to miscalculate and ask for an excessively large amount + of memory on resize, and then fail, which doesn't seem to affect + the game. HOWEVER, prior to the bugfix, the memory block that + was available was assigned ownership to the game anyway. Later + on after helicopter takeoff, the game would attempt to allocate + more memory, which would fail because of the erroneous assignment + of ownership to free memory. (joncampbell123). + - Add debug logging to not only indicate DOS kernel memory alloc, + free, and resize, but also log when the memory operation fails. + Perhaps someday I'll figure out what the memory management in + California Games II is doing wrong that makes the helicopter part + fail in DOSBox-X. (joncampbell123). + - Code development now occurs across two primary branches: master + for fully functional emulation, and main-osfree for versions of + DOSBox-X where built-in MS-DOS OS emulation is disabled. The osfree + branch can only boot a guest OS. main-osfree is for use in jurisdictions + that enforce or wish to enforce OS level age verification, and + therefore, may consider the MS-DOS emulation an OS that is subject + to those laws. (joncampbell123). + - El Torito CD-ROM floppy disk boot emulation is no longer as slow + as an actual floppy drive. Your bootable CDs will boot much faster + now. (joncampbell123). + - DOSBox-X shell: If a DOS error happened while trying to execute a + DOS program, read the error code and print an appropriate message + on the console. So far only "Access Denied" has any specific error + message there. (joncampbell123). + - Skip all keyboard code page and layout loading if running in PC-98 + mode. PC-98 systems store the entire font in ROM with only very + limited room for custom fonts, therefore, it makes no sense to load + code pages in PC-98 mode. (joncampbell123). + - Keyboard code page layout: Fix bug where an out of range start_pos + can cause DOSBox-X to segfault. Range check and print an error + message instead. (joncampbell123). + - Keyboard code page layout: The UPX unpacker checks the stack pointer + (like a COM program would) to determine if there is enough memory + to decompress. If there is not, it executes INT 20h to exit to DOS. + Problem is, the code page execution never makes a proper PSP segment + for that to work, so, during execution, intercept INT 20h and safely + redirect execution to exit properly when called. Set an error flag + so the code can know if that happened and say so. (joncampbell123). + - Keyboard code page layout: If executing the CPI/CPX file because UPX + decompression is detected, allocate memory based on the size of the + file plus reasonable stack space rather than assume about 128KB of + RAM following a DOS allocation of less, which for lower memsizes, + only causes a crash on startup. (joncampbell123). + - Debug print to log what code page file is being loaded at startup (joncampbell123). + - CPU Idle callback is now strictly limited to processing IRQs and one + CPU instruction, instead of however many CPU instructions can run + until the next scheduled emulator event. This fixes a bug where + system calls that use the Idle callback (INT 21h, etc) can sometimes + vary their delay time by emulator events, and if "scanline render on + demand is enabled", can cause the Idle call to take a full 1ms interval + of time. This fixes an issue where "scanline render on demand" caused + some DOS games like Xargon to take 5 to 10 times longer to transition + between title, main menu, gameplay, etc. (joncampbell123). + - Debugger LOGL command now includes the PIC_FullIndex() emulator time + in millseconds so that it can be used to determine time as well as + CPU state for debugging (joncampbell123). + - Add dosbox.conf option to control whether VBE emulation provides the + protected mode interface or not (joncampbell123). + - Add dosbox.conf option vbememsize and vbememsizekb to control how much + video memory is reported through the VESA BIOS, which can be less than + actual video memory (but must be at least 256KB). This option can help + with some DOS programs that have problems with "too much" video memory + in the system (joncampbell123). + - Add INT 10h mode flag _REQUIRE_LFB. When set, INT 10h calls to set + VESA BIOS modes will fail unless requesting to set the linear framebuffer + version of the mode (joncampbell123). + - S3 emulation will mark any more large enough to exceed bank switching + limits in S3 hardware as _REQUIRE_LFB (joncampbell123). + - I'm not sure why Adlib emulation defaults to 48KHz in most versions of + DOSBox, but the hardware rate is 49716 and that should be the default + (joncampbell123). + - Fixed crash on starting debugger on MinGW builds (maron2000) + - Adjusted the ChinaSea/Big5-2003 extended code point ranges for CP951 to + 0x9140–0xA3FE and 0xC6A1–0xFEFE (1abcd) + - Replaced deprecated symbols to enable launching on old macOSs (maron2000) + - Converted all bash-dependent shell files to POSIX-shell compliant + (pandasoli) + - Removed 7 duplicate Chinese character mappings from CP951 (Big5-UAO) (1abcd) + - Added SoundBlaster microphone input support (Windows WASAPI) + (meldro364-glitch) + - Fixed segfault on launch of macOS builds (maron2000) + - Added OS/2 support for tinyfiledialogs, browser and external programs and + some more fixes. (josch1710) + - Fixed savestate load "Memory size mismatch" error on MSVC build (rebb) + - Fixed savestate loading crash related to dynamically allocated TempLine in + VGA system (rebb) + - Added Direct3D11 and Metal support (Experimental, SDL2 only) (maron2000) + - When leaving fullscreen, only force rebuilding the window for OpenGL mode. + (rebb) + - Clear modifier keys before savestate gets saved. (rebb) + - Re-enabled WinMM joystick support (Windows SDL1) (maron2000) + - Fixed colors option fails at launch on TTF mode (maron2000) + - Optional switch to disable post exit delay in DX-CAPTURE (villesundell) + - Fixed Emscripten builds for Dosbox x v2026.01.02 (grootpot) + - Fixed long freeze during startup on linux (SmileTheory) + - Fixed windowposition option at launch (maron2000) + - Fixed detection of EXEPACK failures (maron2000) + - Added OS/2 dimension handling to UpdateWindowDimensions (josch1710) + - Fixed handling of volume label searches (Allofich) + - Microphone input: Make Hands-Free profile (HFP) optional (maron2000) + - macOS: Fixed build script typo that made loading freetype library fail + (maron2000) + - Fixed FPU FILD emulation (asemarafa) + - Removed range check in INT10_GetCursorPos causing text glitches (maron2000) + - Added experimental VS2026 CI builds. Can be downloaded as 64-bit Visual + Studio nightly builds. (maron2000) + - macOS: Fixed garbled message when opening image file(s) from dropdown menu. + (maron2000) + - Fixed XCOPY argument parsing to correctly handle switches appended directly + to file paths without whitespace. (maron2000) + - Fixed some Yes/No character was remained hardcoded as Y/N for some languages + specifiying other characters (e.g. German). (maron2000) + +2026.01.02 + - VESA BIOS will remove 8-bit bank switching limit if the video memory + is large enough to need more than 256 banks. Memory size will always + be limited to no more than 64 banks (128 if smaller than 64KB + granularity) only if S3 emulation is active. DOSBox Integrated Graphics + machine type is exempt from bank switching limit, so, if you are running + legacy code or Demoscene stuff against it that never clears the upper + 8 bits properly, it's not going to work unless you use smaller memsize + settings. (joncampbell123). + - Update BOOT command to support multiple disk images with swapping (maron2000). + - Render scaler system has been modified so that render and frame caches + are now dynamically allocated, instead of fixed buffers. Not only does + this reduce memory wasted by over-large buffers, it also removes + limitations on guest video mode resolution that previously capped the + video mode to 1920x1440 or lower, and the advanced scalers (HQ2X, + Advanced MAME, etc) to 800x600 or lower. (joncampbell123). + - VGA output will now automatically disable doublescan mode whenever an + advanced scaler, such as the "XBRZ" or the Advanced MAME scalers, are + selected, so that the scalers can do their job properly on the low + resolution graphics mode automatically. The user no longer has to + manaully turn off doublescan mode for those scalers to work. (joncampbell123). + - Added TV, Scanline, and RGB scaler variants appropriate for VGA + 200-line modes with doublescan enabled (renders to 400 lines). In fact + supporting those scalers with 400-line VGA is arguably more visually + accurate than applying them to 200 lines of graphics, because it + better reflects the actual 400-line raster as it would be displayed + on a VGA monitor. (joncampbell123). + - Apparently at random, VGA render will call RENDER_DrawLine too much, + causing buffer overruns at random, so, instead of directly assigning + the scaler line handler, assign a function that checks the rendered + line count and ensures that rendering stops at the correct line + count. This should fix some random crashes or corruptions, especially + on Linux with the OpenGL output which likes to allocate EXACTLY the + amount of memory required for the frame. (joncampbell123). + - A patch was submitted to DOSLIB DSXMENU to incorporate non-selectable + informational lines of text. Incorporate the updated DSXMENU binaries + into DOSBox-X (joncampbell123). + - Wrote IPS patching tools IPSMAKE and IPSPATCH in DOSLIB, then incorporated + them as builtin executables on drive Z: under Z:\PATCHING. You can + now use IPS patch files to "ROM hack" your MS-DOS games. (joncampbell123) + - Add map13/map14 CGA/HGC like interleaved rendering support for VGA + 256-color mode. There is a game engine in development that is willing to + use such oddball modes. (joncampbell123) + - Added SDL2_net to source tree (maron2000) + - Fixed regression of FIFA96 CD label detection (maron2000) + - Log OpenGL context version (rebb) + - Force SDL window regeneration when exiting fullscreen (rebb) + - Fixed file handle leak prevents save state file removal (srcdabada) + + +2025.12.01 + - Video debug overlay: For Tandy and PCjr emulation, add information on + the screen that shows the line mask, display and cpu memory banks and + the corresponding segment values, which may aid in debugging issues + with games and reveal any remapping or page flipping (joncampbell123). + - Tandy emulation: Add the string "Tandy" somewhere in the DOS kernel + at startup if machine=tandy. The game "The Train: Escape to Normandy" + scans from FFFF:0000 for the string "Tandy" which of course wraps + around to the first 64KB of memory where the DOS kernel resides. If + it does not see this string, it does not think it is running on a Tandy. + Such a detection routine will obviously break if you're on a 286 based + Tandy with HMA enabled, or you're running normal MS-DOS on a Tandy + system. This change allows the game to run (joncampbell123). + - Tseng ET4000 emulation: Mode 0x24 is unusual in that it is a 130x28 + text mode with a 13-pixel high character cell. The ET4000 VGA BIOS + apparently has a specific font for that mode, so, incorporate that + font into DOSBox-X and use it for mode 0x24 (joncampbell123). + - Tseng ET4000 emulation: Fix modes 0x22/0x23/0x24 to match how the + actual VGA BIOS programs them. This fixes problems where the 132x25 + mode was rendered only on the upper half of the screen (joncampbell123). + - Fix Tseng ET3000/ET4000 emulation bug where CGA graphics modes + were garbled. The main VGA emulation no longer uses M_CGA2/M_CGA4 + and the ET4000 emulation needs to behave the same to fix the + graphics modes. Apply fix to ET3000 emulation as well. (joncampbell123). + - Some extra code in shell processing was preventing drive change commands + if the last character was a backslash i.e. "a:\" instead of "a:". + Fixed. (joncampbell123). + - INT 21h AH=4Bh EXEC: Real MS-DOS returns a nonzero value like 0x3E01. + A buggy version of Magic Pockets fails to call INT 21 AH=4Dh to read + the INTRO.EXE exit code and expects AL to just be nonzero to continue + to the game. So to make it work properly (kind of), return a nonzero + value. (joncampbell123). + - Tandy machine type: Many registers are WRITE ONLY according to SX + documentation, yet "Troubadours" likes to read/modify/write those + registers in what appears to be hand-rolled manual modesetting code + to set up 320x200 16-color mode, so, add code to respond to reads + from those ports with zeros and print a debug message to the log + about how DOS games are not supposed to read those registers. Make + the hand-rolled modesetting work by returning 0x00, rather than 0xFF. + The code will not set up the mode correctly if 0xFF is returned, but + will if 0x00 is returned. A side effect of this is that, since one + of the registers controls the RAM address used as video memory, this + moves it down to 512KB from base memory as well, which of course + easily corrupts the very end of the MCB chain unless you enable more + than 640KB of RAM and ask DOSBox-X to emulate the full Tandy 768KB + of conventional memory. Though the game still crashes very easily, + and in the exact same manner in both DOSBox-X and DOSBox SVN, this + fix does solve the problem where the game was only able to draw + 2 out of 4 scanlines on the screen. (joncampbell123). + - Fix: Load GetDiskFreeSpaceExA at runtime to restore compatibility with + Win95RTM (emxd) + - Support for musl libc under Linux (repzilon) + - Utilize SDL2's keyboard capture logic to inhibit window manager shortcuts + (BenAckerley) + - Fix OpenGL resize / crash issue related to SDL and the internal GUI (rebb) + - Fix: missing floppy drive after harddisk boot (merubird) + - Fix crash on launch in MinGW and UCRT 64-bit builds (maron2000) + - Fix file open dialog encoding (maron2000) + - Allow controlling K-CG via BIOS interrupt (OPNA2608) + - Add debug feature memory find (Enmet) + - Fix turbo to allow burst mode and toggle mode (jez9999) + - Linters - fixup freedesktop metainfo and flatpak (rderooy) + +2025.10.07 + - INT 21h AH=4Ah resize memory: Compact free blocks only at or after the + segment being resized, as MS-DOS is documented to do (joncampbell123). + - INT 21h AH=4Ah resize memory: Fix bug where, if asked to resize a previously + freed memory block and the block is not the last block in the MCB chain, + and the next block in the MCB chain is also free, the MCB management code + would correctly compact free blocks but then allocate according to the + old size of the freed MCB block, causing truncation of the MCB chain. + Fix for MCB chain truncation caused by California Games II DOS memory + management when running in Tandy graphics mode. (joncampbell123). + - Add dosbox.conf option, disabled by default, where if the MCB memory + chain is corrupted anywhere past the running program's memory block, + and it does anything to cause allocation, a new free memory block is + created to satisfy allocations instead of halting emulation. Some DOS + programs are a bit sloppy in a way that can corrupt the MCB chain. + When enabled, this behavior matches apparent MS-DOS behavior (joncampbell123). + - Debugger: DOS MCBS command now also prints the segment immediately + following the last MCB block (joncampbell123). + - Tseng ET3000/ET4000: Update Status register 3DAh behavior when emulating + Tseng chipsets to reflect Tseng datasheet, and VGAKIT SVGA detection code + expectations. Bit 7 is expected, as documented by Tseng, to be the inverse + of bit 3 (vertical retrace). Extended Start Register CRTC 33h must not + allow setting the upper 4 bits because Tseng only documents the bottom + four, and because VGAKIT requires it for Tseng detection (joncampbell123). + - Fix bug that, for machine=hercules, prevented Hercules palette shortcut + from changing colors when in graphics mode (joncampbell123). + - Remove mixer and VGA capture test modes from integration device. Update + integration device version number. Convert hardcoded magic constants used + in IG into constants in iglib.h which is now shared explicitly with the + iglib.h in DOSLIB. Add integration device interface to allow the guest + to read and set the CPU cycle count of the emulator. (joncampbell123). + - Fix INT 10h AH=0Eh bug where printing BEL triggered screen scroll up if + cursor beyond the last line. Fix for the Elder Scrolls Arena installer. + (joncampbell123). + - FAT filesystem driver (for disk images): If Elder Scrolls Arena calls + INT 21h to find files named *.65 (such as STATES.65) with an attribute mask + of 0xA (VOLUME LABEL | HIDDEN), ignore the VOLUME LABEL bit and scan + normally. The 0xA value is leftover from a divide operation used to make + the file name and is technically a bug in the game, though that happens + to work on real MS-DOS and the DOSBox/DOSBox-X local folder support code + anyway. This fix allows Elder Scrolls Arena to run from a mounted disk + image. (joncampbell123). + - FAT filesystem driver (for disk images): If Elder Scrolls Arena calls + INT 21h to find SAVEGAME.00 (yes, a specific name for some reason) with + an attribute mask of 0x7C (which represents... um... what?), ignore the + VOLUME LABEL bit so that players can load their saved games from the + menu instead of being told that the saved game that is clearly there on + the screen does not exist. What other weird random values of CX attribute + mask does this game use? (joncampbell123). + - PCI bus improvements : Allow device to see full size access (smunaut) + - Fix build error of SDL1 version on ArchLinux (possibly gcc-15) (maron2000) + - Enable building DOSBox-X on older macOS versions and add instructions + (maron2000) + - Add code page 951 in dialog box (1abcd) + - Fix failure of create/opening a temporary file for piping (maron2000) + - Create/open a temporary file to device_TMP for piping on Z: drive. + (maron2000) + - Convert message to UTF16 before calling messagebox function (Windows) + (maron2000) + - Added some new members to the MMX_reg union for big-endian platforms. + (alarixnia) + - Create directory if not exist before writing conf file. (maron2000) + - Fixed language files were still locked after loading is completed. + (maron2000) + - Fixed freeze when codepage switched to 3846, 3848. (maron2000) + - Fixed build error when internal debugger is disabled (maron2000) + - Show loaded conf file in log in full path (maron2000) + - Print syntax error if pipe has no command to pass output (maron2000) + - Add permanent option for initial DOSBox-X shell (maron2000) + - Fix errors when initializing fluidsynth (maron2000) + - PC-98: Redraw the function keys after updating them (bobsayshilol) + - Do not carriage return with a single LF('\n') (maron2000) + - Fix mapper not rendering anything on SDL2/Windows (aybe) + - Scale mapper according display resolution (aybe) + - Added applicable changes from SVN. (Allofich) + r4485: Enable writing to all planes when drawing pixels in EGA modes. + r4487: Correct panning of VESA text modes. + r4488: Correct comment about odd/even bit. + r4490: Set MCB ownership when *blocks==total at end of DOS_ResizeMemory. + r4492: Don't clear message queues of MPU-401 and compatibles on reset. + r4493: Handle EOF character in batch files as actual end of file. + r4494: Use 4-byte partial page mapping data. + - Replaced deprecated functions to enable building with FFmpeg 8 (maron2000) + - Fixed screen blanked when restoring minimized window in TTF mode (Windows + SDL1) (maron2000) + - PC-98: Save Kanji CG access mode setting, restrict output accordingly + (OPNA2608) + - Added missing language options to Windows installers (maron2000) + - Debugger: IV must not truncate addresses to 16-bit (cmsautter) + - Debugger: Warn single-stepping may not work as expected with Dynamic core + (maron2000) + - MIDI: Show loaded Soundfont/ROM path only when required to. (maron2000) + - SDL2: Updated SDL2 library to version 2.32.10 (maron2000) + - Apply aspect/scaling/clipping when using OpenGL shaders in windowed-mode + (rebb) + - Fixed file locking problem on Linux port (loops) + - Fixed typo in Linux man page (-date-host-forced option) (maron2000) + - Mention OPL in MIDI/OPL configuration dialog menu (maron2000) + +2025.05.03 + - Show TURBO status in title bar. (maron2000) + - Fixed MinGW32 builds failed using gcc15, due to a conflict in __inline__ + macro. (lazka) + - Revise EGA/VGA emulation to treat the CRTC CGA/Hercules + CRTC bit remapping as bits to mask out, instead of defining + the upper limit of the memory mask. This makes the CGA mode + Engine page flipping test work. I initially had reservations + about whether or not real hardware did this, but, it would + make sense for hardware to do it that way. (joncampbell123) + - Updated libpng to version 1.6.47 (maron2000) + - Updated XCOPY to version 1.9a (maron2000) + - Updated SDL2 library to version 2.32.4 (maron2000) + - Fixed a build/install error due to using wildcards in Makefile.am, which is + not supported in GNU Automake. (maron2000) + - macOS: Install SDL2_net in CI workflow to enable internal modem support on + Release and Nightly SDL2 builds. (maron2000) + - Fixed buffer size to allocate missing byte for string terminator for + savestate filename to prevent buffer overflow (arifogel) + - Fixed settings of yellow color in COLOR command (maron2000) + - Fixed COLOR command to match behavior on Windows (maron2000) + - Fixed INT21h AH=0a cursor position moved by bell due to keyboard buffer full + (maron2000) + - Fixed INT21h AH=01 echo behavior (maron2000) + - Replaced SetPixel with DIB Section Direct Memory Access for faster printing + (DwayneSelsig) + - Fixed creation of overlay special files (zyebytevt) + - PC-98 mode: Add INT 18h function AH=10h to control cursor blink. + Emulate documented side effect in that this call also hides the + cursor. The PC-98 port of Lemmings will no longer show a blinking + black box in the lower left corner. (joncampbell123) + - Fixed Host key (F11, F12) handling in Codepage 932 (Japanese Shift-JIS). + (maron2000) + - Bumped ESFMu to ver 1.2.6 (maron2000) + - Fixed regression of adding a dot to CD labels when longer than 8 characters, + required for games such as Descent 2 CD installer (maron2000) + - Added Modeswitch toggle option (DieSkaarj) + - Fixed glitch of DBCS character at the end of a line (maron2000) + - Fixed dialog for showing error of loading language files (maron2000) + - Removed two and 226 duplicate Chinese character mappings from code + pages 950 and 951, respectively, ensuring more accurate Big5 and + Big5-UAO character mappings for Chinese IME users. (1abcd) + - Enabled changing drives mounted prior to switching to securemode (maron2000) + - Enabled some messages to be translated in the translation files (maron2000) + - Fixed fullscreen mode occasionally switched to windowed mode (maron2000) + - Updated French translation (FredBezies) + - Fixed blank screen when output=ttf on PC-98 mode (maron2000) + - Fixed crash when switching from fullscreen to window mode in TTF output + (maron2000) + - Fixed mounting zip files with white space in their names failed (maron2000) + - Fixed crash on reboot when output=ttf (maron2000) + - Fixed blank BIOS screen when output=ttf (maron2000) - Fixed direct input of half-width kana (maron2000) - Fixed PC-98 INT 1Fh, AH=90h source and destination address (drachen6jp) - Fixed unnecessary trailing backslash in path name (maron2000) + - Fixed SSE MOVSS, MOVHPS, UNPCKLPS, UNPCKHPS, and PSADBW as well as + MMX PMULLW, PSUBUSB, and PSUBUSW, instruction implementations (fuel-pcbox) 2025.02.01 - Added new experimental dosbox.conf option that turns off the diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 1d974c89b0e..940b23b586a 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -12,3 +12,9 @@ You are welcome to participate as long as it is about DOS/Windows emulation and The maintainer of this project reserves the right to remove posts and/or conversations from this project that are off-topic, and to ignore and/or ban users who are rude and/or disruptive to this project and it's users, developers, or contributors. +# Artificial Intelligence policy + +You may not contribute code to this project that was entirely or partially generated using Artificial Intelligence. No "vibe coding", please. + +You __may__ contribute code if you wrote it with the __assistance__ of Artifical Intelligence. You yourself still have to write the code that you contribute. + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0cffddb4796..e83c0ebad8b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,7 +22,7 @@ You do not necessarily need to be versed in coding; there are other ways to cont Information on building/compiling the DOSBox-X source code can be found in the [BUILD](BUILD.md) page. -DOSBox-X is still intended to support compilation as C++11. If you add new code please make sure it works as C++11. One way to do so is to run `./configure` with `--enable-force-cxx11` option added, and build the code. +DOSBox-X is intended to support compilation as C++14. If you add new code please make sure it works as C++14. For the code style, please refer to the .editorconfig file, your development environment probably supports it (see https://editorconfig.org/). diff --git a/INSTALL.md b/INSTALL.md index 1c6f17d9117..f8c9ee9d638 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -38,10 +38,11 @@ Apart from the Windows installers, you can also find portable zip files starting Regarding Joystick support, the *SDL1 builds requires XInput compatible devices*. If your joystick is not Xinput compatible, you may want to try the SDL2 builds or DirectInput to XInput wrappers such as [Xoutput](https://github.com/csutorasa/XOutput) or [Xbox 360 controller emulator](https://www.x360ce.com/). -* Windows 9x/NT4/2000 users should use the MinGW lowend 9x builds (32-bit SDL1 only). -* Windows XP users must use the XP compatible installer with "XP" in the file name, which includes Visual Studio XP builds and the 32-bit MinGW low-end builds. Note that not all features are available in the MinGW low-end builds, currently Slirp support is known to be missing. You also need to install the [DirectX runtime](https://www.microsoft.com/en-us/download/details.aspx?id=8109) or DOSBox-X will complain you're missing `XInput9_1_0.dll`. XP compatible builds works in ReactOS as well, but support is considered experimental. -* Windows Vista users can use the XP installer or standard (non-XP) Visual Studio builds, because standard (non-XP) installer doesn't work in Vista. MinGW dropped support for XP/Vista, so install the 32-bit low-end builds from the XP compatible installer if you prefer MinGW builds. * Modern Windows users (7 and after) should use the standard (non-XP, non-lowend) builds but may try the non-standard builds if you prefer, although officially not supported. +* Windows 9x/NT4/2000 users should use the MinGW lowend 9x builds (32-bit SDL1 only). +* Windows XP users must use the XP compatible installer with "XP" in the file name, which includes Visual Studio XP builds and the 32-bit MinGW low-end builds. Note that not all features are available in the MinGW low-end builds, currently Slirp support is known to be missing. You also need to install the [DirectX runtime](https://www.microsoft.com/en-us/download/details.aspx?id=8109) or DOSBox-X will complain you're missing `XInput9_1_0.dll`. XP compatible builds works in ReactOS as well, but support is considered experimental. +* Windows Vista users can use the XP installer or standard (non-XP) Visual Studio portable builds, because standard (non-XP) installer doesn't work in Vista. MinGW dropped support for XP/Vista, so install the 32-bit low-end builds from the XP compatible installer if you prefer MinGW builds. + ## Linux Packages (Flatpak and more) DOSBox-X is available packaged in the below formats. @@ -126,7 +127,8 @@ and that it only contains a small subset of the DOS programs provided in the Z: Portable packages for the macOS (64-bit) platform are also available from the [DOSBox-X homepage](https://dosbox-x.com/). -The macOS package requires recent 64-bit Intel or ARM-based macOS (Catalina (10.15) and later). +The official macOS package requires recent 64-bit Intel or ARM-based macOS 10.15 (Catalina) and later. +For SDL2 builds, there are a known issue that it cannot run on macOS 11 (Big Sur) and before, you can still try the [MacPorts](https://ports.macports.org/port/dosbox-x/details/) package or build the app on your own. Using the Finder app, go to the folder where the macOS zip package is downloaded, and click the zip package. Then the package will be unzipped and you will see a folder with the same name as the package. Both SDL1 and SDL2 binaries (in .app format) are provided in the folders named ```dosbox-x``` and ```dosbox-x-sdl2``` respectively inside the zip file. @@ -162,7 +164,7 @@ You should be able to solve the problem by running the following command once in 2. Run ``xattr -cr .`` ### macOS Packages (Homebrew) -Homebrew provides packages for macOS Ventura and after. +Homebrew provides [packages](https://formulae.brew.sh/formula/dosbox-x) for macOS Ventura and after. You can install the package by the following steps. 1. Install [Homebrew](https://brew.sh) 2. In macOS Terminal (Applications -> Utilities -> Terminal) run `brew install dosbox-x` @@ -171,7 +173,7 @@ You can install the package by the following steps. Please note that these packages are NOT built or updated by the DOSBox-X team. ### macOS Packages (MacPorts) -[MacPorts](https://www.macports.org/) provides packages for High Sierra (10.13) and after. +[MacPorts](https://www.macports.org/) provides [packages](https://ports.macports.org/port/dosbox-x/details/) for High Sierra (10.13) and after. You can install the package by the following steps. 1. [Install MacPorts](https://www.macports.org/install.php) 2. In macOS terminal (Applications -> Utilities -> Terminal) run `sudo port install dosbox-x` @@ -204,3 +206,4 @@ You could use either the released source code package or the latest source code ## Development nightly builds The development (preview) builds intended for testing purposes for the supported platforms can be found [here](https://dosbox-x.com/devel-build.html). + diff --git a/MICROPHONE_IMPLEMENTATION_NOTES.md b/MICROPHONE_IMPLEMENTATION_NOTES.md new file mode 100644 index 00000000000..97ca8941c7e --- /dev/null +++ b/MICROPHONE_IMPLEMENTATION_NOTES.md @@ -0,0 +1,155 @@ +# DOSBox-X SoundBlaster Microphone Implementation Notes + +## Build Environment + +### Visual Studio 2022 Build Command +```powershell +powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "& 'C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\Launch-VsDevShell.ps1' -Arch x86; Set-Location C:\temp\dosx\dosbox-x; msbuild vs\dosbox-x.sln /t:dosbox-x /p:Configuration=Debug /p:Platform=Win32 /p:PlatformToolset=v143 /m" +``` + +### Key Build Notes +- Use `/p:PlatformToolset=v143` for VS 2022 (v142 is VS 2019) +- Close DOSBox-X before rebuilding (executable gets locked) +- If `Microsoft.Cpp.Default.props` not found, install C++ Desktop workload via: + ``` + winget install Microsoft.VisualStudio.2022.BuildTools --override "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended" + ``` + +## Testing + +### Test Configuration (dosbox-x-clean.conf) +```ini +[sblaster] +sbtype=sb16 +sbbase=220 +irq=7 +dma=1 +hdma=5 +sbmixer=true +recording source=microphone +``` + +### Test Programs +1. **SBREC.COM** - DMA-based recording (DSP commands 0x24, 0x2C, etc.) + - Works well with MIC_GenerateInput() + +2. **Creative Parrot** - Direct ADC recording (DSP command 0x20) + - Polls DSP for individual samples + - Requires MIC_GetDirectADCSample() + - Location: `C:\temp\dosx\dos_test\SBPRO\PARROT\` + +## SoundBlaster Recording Modes + +### DMA Recording (High-level) +- DSP commands: 0x24, 0x2C, 0x98, 0x99, etc. +- Uses DMA transfers for bulk sample data +- Called via `gen_input()` in sblaster.cpp +- Sample rate specified by program + +### Direct ADC Recording (Low-level) +- DSP command: 0x20 +- Polls for one sample at a time +- Used by Creative Parrot and similar programs +- Polling rate varies: 2700-6400 Hz (average ~4500 Hz) + +## Key Technical Findings + +### Polling Rate Measurement +From debug logs, Creative Parrot polls at: +- Range: 2700 - 6400 Hz +- Average: ~4500 Hz +- Varies significantly during recording +- Drops to 71-878 Hz during playback + +### Sample Rate Selection +- **Wrong approach**: Match sample rate to polling rate dynamically + - Causes audio artifacts from constantly changing resample rate + +- **Wrong approach**: Fixed high rate (22050 Hz) with 1:1 poll mapping + - Causes slow motion (5x slower) and large delay + +- **Correct approach**: Time-based sample selection at average polling rate + - Use real elapsed time to determine sample position + - Generate at ~4500 Hz (measured average) + - Returns sample based on wall-clock time, not poll count + +### Time-Based Sample Generation +```cpp +// Calculate which sample corresponds to current real time +double elapsedSec = (now.QuadPart - startTime.QuadPart) / perfFreq.QuadPart; +size_t timeSample = (size_t)(elapsedSec * SAMPLE_RATE); +return buffer[timeSample % BUFFER_SIZE]; +``` + +Benefits: +- Correct playback speed regardless of polling variations +- If Parrot polls faster: some samples duplicated (minor) +- If Parrot polls slower: some samples skipped (minor) +- Overall timing preserved + +## Windows WASAPI Audio Capture + +### Key Components +- `IMMDeviceEnumerator` - Enumerate audio devices +- `IMMDevice` - Audio device handle +- `IAudioClient` - Audio stream configuration +- `IAudioCaptureClient` - Capture buffer access + +### Capture Format +- Windows typically provides: 48kHz, 32-bit float, stereo +- Must resample to DOS rates: 4-22 kHz +- Must convert to 8-bit unsigned or 16-bit signed + +### Threading Model +- Capture thread polls every 10ms +- Writes to circular buffer (256KB, ~1.3 sec at 48kHz) +- Main thread reads and resamples on demand + +### Common Issues +1. **NOMINMAX** - Define before windows.h to avoid min/max macro conflicts +2. **KSDATAFORMAT_SUBTYPE_IEEE_FLOAT** - May need local GUID definition +3. **COM initialization** - Call `CoInitializeEx()` in each thread + +## Files Modified + +### src/hardware/mic_input_win32.cpp +- WASAPI microphone capture implementation +- MIC_GenerateInput() for DMA recording +- MIC_GetDirectADCSample() for Direct ADC + +### src/hardware/mic_input_win32.h +- Class declarations and global function prototypes + +### src/hardware/sblaster.cpp +- Added REC_MICROPHONE enum value +- Modified gen_input() to call MIC_GenerateInput() +- Modified DSP command 0x20 handler for Direct ADC + +### src/dosbox.cpp +- Added "microphone" to sb_recording_sources array + +### vs/dosbox-x.vcxproj +- Added mic_input_win32.cpp/h to project + +## Debugging Tips + +### Add Logging +```cpp +#include "logging.h" +LOG_MSG("MIC: poll rate: %.1f Hz", measuredRate); +``` + +### Check Log File +``` +C:\temp\dosx\dosbox-x\bin\Win32\Debug\dosbox-x.log +``` + +### Monitor DSP Commands +Look for command 0x20 in logs to confirm Direct ADC is being used. + +## Performance Considerations + +- Pre-buffer 100ms of audio to minimize latency +- Generate samples ahead to prevent underruns +- Use 2048-4096 sample chunks for efficient resampling +- Ring buffer size: 32KB (~7 sec at 4500 Hz) diff --git a/NOTES/Intel DIV behavior/xzview.sh b/NOTES/Intel DIV behavior/xzview.sh index 93137f33159..1b6e43eff1f 100755 --- a/NOTES/Intel DIV behavior/xzview.sh +++ b/NOTES/Intel DIV behavior/xzview.sh @@ -1,3 +1,3 @@ -#!/usr/bin/env bash +#!/bin/sh xz -c -d "$1" | less - diff --git a/README.debugger b/README.debugger index 2ee3ce0db21..1b2054c77bd 100644 --- a/README.debugger +++ b/README.debugger @@ -7,7 +7,7 @@ In builds where it is enabled, DOSBox-X supports breaking into the debugger interface, which is shown on the console. A mapper shortcut is provided to break into the debugger on demand. Normally -this shortcut is set to Alt+Pause. +this shortcut is set to Alt+Pause (Mac: Alt+F12). In Windows, DOSBox-X can create a console and show the debugger interface on it. @@ -92,15 +92,28 @@ debugger. Debugger keyboard shortcuts --------------------------- -Tab Switch between windows +Tab/Shift+Tab Switch to the next/previous window +F3/F6 Previous command in history +F4/F7 Next command in history F5 Resume emulation +F8 Toggle printable characters display in data view F9 Set/clear breakpoint F10 Single step (over) F11 Single step (into) Up arrow Scroll up one line (if applicable) Down arrow Scroll down one line (if applicable) -Page Up Scroll up by window height (if applicable) -Page Down Scroll down by window height (if applicable) +Left arrow Move cursor left in command line +Right arrow Move cursor right in command line +Page Up/Fn+Up Scroll up by window height (if applicable) +Page Down/Fn+Down Scroll down by window height (if applicable) +Home/Fn+Left Scroll to top (in Output window) +End/Fn+Right Scroll to bottom (in Output window) +Insert Toggle insert/overwrite mode in command line +Alt+D Set data view to DS:SI +Alt+E Set data view to ES:DI +Alt+X Set data view to DS:DX +Alt+B Set data view to ES:BX +Alt+S Set data view to SS:SP Debugger commands ----------------- diff --git a/README.md b/README.md index ac5a8ba4624..3864ae4323b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ## Useful links - [DOSBox-X's website](https://dosbox-x.com) ([https://dosbox-x.com](https://dosbox-x.com) or [http://dosbox-x.software](http://dosbox-x.software)) - [DOSBox-X's Wiki page](https://dosbox-x.com/wiki) -- [Discord channel for the DOSBox-X project](https://discord.gg/5cnTmcsTpG) ([https://discord.gg/5cnTmcsTpG](https://discord.gg/5cnTmcsTpG)) +- The DOSBox-X project has a Discord server. Please ask in the discussion tab for a one-time invite link to join. - [Releases](https://github.com/joncampbell123/dosbox-x/releases) - [Development/Nightly builds](https://dosbox-x.com/devel-build.html) - [Install instructions](INSTALL.md) @@ -41,6 +41,9 @@ This project has a [Code of Conduct](CODE_OF_CONDUCT.md), please read it for gen Brought to you by: joncampbell123 (Jonathan Campbell) +## Legal notice + +If you reside in a jurisdiction that enforces OS level age verification, you are only permitted to use the main-osfree branch of this project (including builds), and are prohibited from using the main (master) branch of this project. ## Notable features in DOSBox-X @@ -95,7 +98,7 @@ DOSBox-X officially supports both SDL 1.2 and SDL 2.0; both 32-bit and 64-bit bu DOSBox-X is a cross-platform DOS emulator, so all major host operating systems are officially supported, including: -1. Windows (XP or higher), 32-bit and 64-bit +1. Windows (95/NT4 or higher), 32-bit and 64-bit 2. Linux (with X11), 32-bit and 64-bit @@ -386,37 +389,50 @@ See also the [CREDITS](CREDITS.md) page for crediting of the source code. ## Support for international language translations and keyboard layouts -# Translations +### Translations DOSBox-X displays English as the default language, and uses the U.S. code page (437) by default, just like DOSBox. All messages displayed by DOSBox-X are in English with the default setting. DOSBox-X does support the feature to change the display messages with the use of language files. The language files control all visible output of the -internal commands and the internal DOS, as well as the text in DOSBox-X's drop-down menus. If you are a speaker of -a non-English language, you are encouraged to create additional language files for use with DOSBox-X by translating -messages in DOSBox-X to your language. Other DOSBox-X users can also use these language files for DOSBox-X to display -messages in such languages. Language files can be found in the `languages` directory of your DOSBox-X installation. - -|Language name|Language file| -| --- | --- | -|Chinese (Simplified)|[contrib/translations/zh/zh_CN.lng](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/zh/zh_CN.lng)| -|Chinese (Traditional)|[contrib/translations/zh/zh_TW.lng](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/zh/zh_TW.lng)| -|French|[contrib/translations/fr/fr_FR.lng](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/fr/fr_FR.lng)| -|German|[contrib/translations/de/de_DE.lng](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/de/de_DE.lng)| -|Italian|[contrib/translations/it/it_IT.lng](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/it/it_IT.lng)| -|Japanese|[contrib/translations/ja/ja_JP.lng](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/ja/ja_JP.lng)| -|Korean|[contrib/translations/ko/ko_KR.lng](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/ko/ko_KR.lng)| -|Portuguese (Brazilian)|[contrib/translations/pt/pt_BR.lng](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/pt/pt_BR.lng)| -|Spanish|[contrib/translations/es/es_ES.lng](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/es/es_ES.lng)| -|Turkish|[contrib/translations/tr/tr_TR.lng](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/tr/tr_TR.lng)| - -# Keyboard layouts -The fact that DOSBox-X was developed around the U.S. keyboard layout is primarily due to limitations around the SDL1 -library which provides input handling. As such when using the SDL1 version and a non-US keyboard, DOSBox-X automatically -uses scancodes with the default setting to work around keyboard layout issues. Scancodes are not needed when using -non-US keyboard layouts in the SDL2 version. If you find that a keyboard layout is not yet supported by DOSBox-X, -in order to add additional layouts for use with DOSBox-X, please see file [README.keyboard-layout-handling](README.keyboard-layout-handling) +internal commands and the internal DOS, as well as the text in DOSBox-X's drop-down menus. +Language files can be found in the `languages` directory of your DOSBox-X installation or +https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/ . + +Language files currently available are: + +[Chinese (Simplified)](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/zh/zh_CN.lng), +[Chinese (Traditional)](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/zh/zh_TW.lng), +[Dutch](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/nl/nl_NL.lng), +[French](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/fr/fr_FR.lng), +[German](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/de/de_DE.lng), +[Hungarian](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/hu/hu_HU.lng), +[Italian](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/it/it_IT.lng), +[Japanese](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/ja/ja_JP.lng), +[Korean](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/ko/ko_KR.lng), +[Portuguese (Brazilian)](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/pt/pt_BR.lng), +[Russian](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/ru/ru_RU.lng), +[Spanish](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/es/es_ES.lng), +[Turkish](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/tr/tr_TR.lng) + +If you are a speaker of any language not included above, you are encouraged to create additional language files by translating the messages to your language using the +[English (Template)](https://github.com/joncampbell123/dosbox-x/blob/master/contrib/translations/en/en_US.lng) or generate one by `CONFIG -wl filename` command. + +### Keyboard layouts +DOSBox-X supports various keyboard layouts by `keyboardlayout` option in the .conf file or `KEYB` command. +On Windows, DOSBox-X will try to match the layout with your physical keyboard when `keyboardlayout=auto`. +On other platforms, the keyboard will work as US keyboard if not set otherwise. + +The SDL1 version additionally requires use of scancodes by enabling `usescancodes` option, when using non-US keyboards. +The default setting (`usescancodes=auto`) should work in most cases, and this setting is NOT required and ignored for SDL2 versions. + +If you find that a keyboard layout is not yet supported by DOSBox-X, in order to add additional layouts for use with DOSBox-X, please see file [README.keyboard-layout-handling](README.keyboard-layout-handling) on how to do so as a developer. +### Codepage settings +You need to switch to the appropriate codepage in order to display various characters for your language. +You can set the codepage by `KEYB` or `CHCP` command. Type `KEYB /?` or `CHCP /?` for details. + For further information on international support and regional settings of DOSBox-X, such as steps to create DOSBox-X language files or use external keyboard files in DOSBox-X, as well as support for the Euro symbol and country-specific date and time formats, please look at the guide [Regional settings in DOSBox-X](https://dosbox-x.com/wiki/Guide%3ARegional-settings-in-DOSBox%E2%80%90X) in the [DOSBox-X Wiki](https://dosbox-x.com/wiki). For more information on East Asian (Chinese/Japanese/Korean) language support, see the [East Asian language and system support](https://dosbox-x.com/wiki/Guide%3AEast-Asian-language-support-in-DOSBox%E2%80%90X) guide page. + diff --git a/README.video-debug-overlay.md b/README.video-debug-overlay.md new file mode 100644 index 00000000000..c5f2eeef59a --- /dev/null +++ b/README.video-debug-overlay.md @@ -0,0 +1,140 @@ + +**The video debug overlay: How to guide** + +## What is the Video Debug Overlay? +The video debug overlay is an extension to the video output of DOSBox-X that puts VGA state information on the bottom and right sides of the DOS screen. The information updates constantly so that state changes are immediately visible. + +## Why do the scalers and video mode affect it? +The video debug overlay is rendered as part of the DOS screen so that, when enabled, it appears in your screen captures and video recordings as well. This makes it easy to provide screenshots for video debugging purposes, and to analyze the information frame-by-frame in a video player or editor. + +## What is provided in the video debug overlay? +The exact information provided depends entirely on what video hardware is being emulated. Even when registers and state are common across hardware, exact state varies from video type to video type. + +## What is all the space on the right side of the overlay? +That information is used to show at least two things. First, the video palette on a scanline by scanline basis so it is easy to tell when per-scanline palette effects and/or "copper bars" are in effect during active display. The second purpose is to show tags per scanline of other state changes. When emulating EGA/VGA for example, tags indicating line compare (split screen) or changes to the offset register (old demoscene effect to make the screen "waver" for example) may be shown when the guest code uses them. + +## What are examples of per-scanline palette effects? +1. Lemmings: Uses 16-color EGA mode, but uses a color palette change between the game board above and the controls below. At the initial screen of a level, uses a palette change between the "visual" of the level at the top and the descriptive text below. +2. Tony and Friends in Kellogs Land: Mid-screen palette change to draw "water" level. + +## Common mode information (at the top) +Directly below the DOS screen, the video mode is shown. The first, in green where possible, is the display mode as an M_ constant used in the DOSBox/DOSBox-X source code. + +Then, the source video resolution following T (text) or G (graphics), and then ">" followed by the video resolution rasterized to the VGA output (active display area only). The height of the video resolution for depends on the video mode and hardware. VGA emulation will always rasterize video output to a height of 400 or 480 for standard VGA modes unless changed by the guest. + +Then, an at (@) sign followed by the video start address in hexadecimal. This reflects the Start Address register including the extended value beyond standard VGA registers in SVGA emulation. This is followed by "+" and then the Offset register, a value responsible for telling the video hardware how far to skip forward after every character row. The value usually represents character columns of video memory, not bytes. For example in text mode where character and attribute data is paired into 16-bit values, this value represents the number of text character cells, and therefore bytes * 2, per character row. + +For EGA/VGA emulation, the offset register value is followed by -B, -W, or -D to indicate whether the CRTC is in byte, word, or DWORD mode. This affects how how far each "step" through video memory goes per character column. For 256-color mode, an additional "ch4" is appended to indicate normal "chained" 256-color more, or "uch" to mean unchained 256-color mode as commonly used by DOS games (byte mode). Nothing is shown for any other case. See common documentation including FreeVGA for more details about CRTC byte/word/dword mode. EGA does not support dword mode. + +VGA emulation may show "SMZX" to indicate "Super MegaZeux" 256-color text mode. + +This format may change as needed for some machine types. + +For EGA emulation, the mode information will show "mono", "16c", or "64c" to indicate the mode of the EGA monitor. All EGA modes other than 640x350 use 16c, CGA-style RGBI compatible output, 640x350 uses 64c, which uses all 6 pins to tranmit R, G, and B as two-bit values (4 levels) to select 16 colors from a palette of 64 possible colors. + +# M_ video modes +| M_* | What | +| ----------------- | ----------------------------------------------------------------------------------------------------------------- | +| M_CGA2 | 640x200 2-color CGA graphics mode. EGA/VGA emulation will never show this value. | +| M_CGA4 | 320x200 4-color CGA graphics mode. EGA/VGA emulation will never show this value. | +| M_EGA | EGA/VGA 16-color planar graphics mode. Not SVGA modes. | +| M_EGA (CGA4) | EGA/VGA emulation of CGA 320x200 4-color graphics mode. | +| M_EGA (CGA2) | EGA/VGA emulation of CGA 640x200 2-color graphics mode. | +| M_VGA | VGA 256-color graphics mode. Not SVGA modes. | +| M_LIN4 | SVGA 16-color planar graphics mode. This usually means the 256K memory wraparound is disabled. | +| M_LIN8 | SVGA 256-color graphics mode. This usually means the 256K memory wraparound is disabled. | +| M_LIN15 | Highcolor 15bpp graphics mode. 16 bits per pixel, only the low 15 bits are used for 5-bit R/G/B. | +| M_LIN16 | Highcolor 16bpp graphics mode. 16 bits per pixel. 5-bit Red and Blue, 6-bit Green. | +| M_LIN24 | Truecolor 24bpp graphics mode. 24 bits per pixel. 8-bit R/G/B. Once used in the 1990s, no longer common since. | +| M_LIN32 | Truecolor 32bpp graphics mode. 32 bits per pixel. 8-bit R/G/B/X. X is ignored. Very common since the late 1990s. | +| M_TEXT | Alphanumeric text mode. | +| M_HERC_GFX | Hercules graphics mode. | +| M_HERC_TEXT | Hercules/MDA text mode. | +| M_CGA16 | CGA graphics mode with composite video emulation. | +| M_TANDY2 | Tandy/PCjr 2-color graphics mode, monochrome. | +| M_TANDY4 | Tandy/PCjr 4-color graphics mode. | +| M_TANDY16 | Tandy/PCjr 16-color graphics mode. | +| M_TANDY_TEXT | Tandy/PCjr text mode. | +| M_AMSTRAD | Amstrad-specific graphics mode. | +| M_PC98 | Video mode used by NEC PC-98 emulation. | +| M_FM_TOWNS | Placeholder mode (stub) for future development. | +| M_PACKED4 | SVGA packed 4bpp mode (not planar). Somewhat common in the mid 1990s on some SVGA chipsets, not seen since. | +| M_DCGA | Olivetti M24 DCGA. | + +# common descriptions for reference +| Mode | Description | +| ---------------------------------- | --------------------------------------------------------------------------------------------------- | +| VGA 80x25 text | M_TEXT T80x25>720x400 @00000+050-W | +| VGA 80x25 text (8-pixel) | M_TEXT T80x25>640x400 @00000+050-W | +| VGA 40x25 text | M_TEXT T40x25>360x400 @00000+028-W | +| CGA 320x200 4-color | M_EGA (CGA4) G320x200>320x400 @00000+028-B | +| CGA 640x200 2-color | M_EGA (CGA2) G640x200>640x400 @00000+050-B | +| EGA 320x200 16-color | M_EGA G320x200>320x400 @00000+028-B | +| EGA 640x200 16-color | M_EGA G640x200>640x400 @00000+050-B | +| EGA 640x350 monochrome | M_EGA G640x350>640x350 @00000+050-B (shows 8 colors only) | +| EGA 640x350 color | M_EGA G640x350>640x350 @00000+050-B | +| MCGA 640x480 2-color | M_EGA G640x480>640x480 @00000+050-B | +| VGA 640x480 16-color | M_EGA G640x480>640x480 @00000+050-B | +| VGA 320x200 256-color | M_VGA G320x200>320x400 @00000+050-Dch4 | +| SVGA 640x400 256-color | M_LIN8 G640x400>640x400 @00000+0A0-Dch4 | +| SVGA 640x480 256-color | M_LIN8 G640x480>640x480 @00000+0A0-Dch4 | +| SVGA 320x200 15bpp | M_LIN15 G320x200>320x400 @00000+0A0-D | +| SVGA 132x43 text | M_TEXT T132x43>1056x688 @00000+084-W | + +## VGA debug status +# Bottom of the screen: palette +RPAL shows the exact contents of the VGA hardware palette, as would be seen through I/O ports 3C7h-3C9h. + +EPAL shows the palette in effect for the display mode. The number of colors shown is 256 if 256-color mode. Otherwise it is 16 colors. In CGA/EGA/VGA graphics modes other than 256-color, less than 16 colors may be displayed according to the Color Plane Enable register. + +No palette is shown for highcolor/truecolor (15/16/24/32bpp) graphics modes. + +A 6 or 8 is shown after RPAL and EPAL to indicate DAC width, the number of bits used to represent the R/G/B values sent to the DAC and out the VGA connector when a color palette is involved. Standard VGA and early SVGA cards use a 6-bit DAC width. Later SVGA hardware allows switching between 6 and 8 bits per RGB. There is a VESA BIOS call to set DAC width, which DOSBox-X does emulate for S3 hardware. + +ACPAL shows the color palette according to the Attribute Controller. In modes other than 256-color mode, this is used to map pixels rendered from video memory to the VGA palette. In 256-color mode, but not SVGA, this has an effect on the pixels as if the 8-bit pixel were split into two 4-bit parts and remapped, except for Tseng ET4000 which remaps only partially due to a hardware bug. + +The original purpose of the Attribute Controller palette on EGA hardware was to determine how to convert 16-color data to the 6-bit TTL video output on the back of the card. VGA hardware retains this EGA behavior for backwards compatibility, but instead uses it as a 4-bit to 6-bit translation in the process of determining what to look up in the color palette. The BIOS default VGA palette is set up to produce the same colors on the monitor if running a DOS program written originally for the EGA. + +CSPAL shows the final palette mapping after other registers including Color Plane Enable, Color Select and DAC PEL mask are considered after the attribute controller palette. This determines the final color map sent to the display. + +# Bottom of the screen: VGA register state +CPE*x*: Color Plane Enable register. *x* is a hexadecimal digit of the 4-bit value that determines which bitplanes are "enabled" and sent to the display. Applies only to 16-color planar graphics modes. CGA and MCGA graphics modes on EGA/VGA are just variations of 16-color planar graphics with bitplanes disabled to reduce the color depth and other register changes for backwards compatibility. CGA modes use the Mode Control register to direct the CRTC to emulate the two-way interleave of the original hardware. No known effect on text, 256-color mode, and SVGA modes. + +HPL*x*: Horizontal PEL panning. *x* is a hexadecimal digit. This register allows for smooth horizontal panning in VGA modes including 256-color and SVGA modes. If a DOS program is horizontally panning this value will constantly change. + +YP*xx*: Y-panning, according to the Preset Row Scan Register. *xx* is two hexadecimal digits. In text modes, as well as graphics modes with a nonzero Maxmimum Scan Line Register, this allows smooth vertical panning when combined with changing the Start Address registers. If a DOS program is vertically panning this value may constantly change. + +PM*xx*: PEL mask, *xx* is two hexadecimal digits. Before the 8-bit color value is sent to the DAC, it is masked by this value. It is normally FF. + +MD*xx*: Attribute controller mode control register. *xx* is two hexadecimal digits. This register is responsible for controlling whether graphics or text mode is active, whether character clocks are 8 or 9 pixels, whether text mode bit 7 attribute bytes blink or not, whether line compare resets horizontal panning, and is part of the mechanism to enable 256-color mode. See online documentation like FreeVGA for more details. + +CS*xx*: Attribute controller color select. *xx* is two hexadecimal digits. Does not affect 256-color mode, except for Tseng ET4000 due to hardware bug. Can affect bits 4-5 of the color index out of the Attribute Controller, and can provide bits 6-7 for the color index after the 4-to-6 conversion through the Attribute Controller. Though not often used, it may be used for color palette changes and demo effects. + +# On the right: palette per scanline +The color palette rendered per scanline on the right is based on CSPAL in case of per-scanline changes to do palette tricks or demoscene tricks, such as showing more than 16 colors in a 16-color mode. + +## EGA debug status +# Bottom of the screen: palette +ACPAL shows the color palette according to the Attribute Controller. On EGA hardware this determines how to map the 16 colors to the 6-bit TTL video connector on the back. + +MDPAL shows the Attribute Controller color palette according to the Color Plane Enable register. If some bitplanes are hidden by the CPE register, this palette will differ from ACPAL. + +OVC shows the current overscan border register. YPN shows the Row Start register which is used for vertical panning. CPE shows the contents of the Color Plane Enable register. HPEL shows the horizontal PEL panning register. + +# On the right: palette per scanline +The color palette rendered per scanline on the right is based on MDPAL, rendered per scanline. Next to MDPAL is CPE, 4 pixels indicating visually, per scanline, which bitplanes are enabled on the display. Some demo effects may change MDPAL and CSPAL mid-frame. + +## On the right: Hardware change event tags +If a change or event that is notable occurs on a scanline, a tag will appear with the top right on that scanline noting that event. + +| event | tag | +| --------------------------------------------------------------------- | ----------------------- | +| EGA/VGA line compare match (split screen) | SPLIT LNCMP | +| Change of Maximum Scan Line register | MXS | +| Change of Offset register | OFS | +| Change of horizontal retrace | HRT | +| Change of color plane enable | CPE | +| Change of color select | CSL | +| Start of PC-98 display partition *n* (text) | TPART*n* | +| Start of PC-98 display partition *n* (graphics) | GPART*n* | + diff --git a/TODO b/TODO new file mode 100644 index 00000000000..fa7bb8f582b --- /dev/null +++ b/TODO @@ -0,0 +1,114 @@ +Render on Demand: +[DONE] +- XARGON: Causes extra long pause going from initial title screen to main menu. + Apparently for some reason, the Idle callback takes 100x as much emulator time + when Render On Demand is enabled. Sometimes the Idle callback takes a full + 1ms timer tick. Yikes. + +Render on Demand + Wait for Changes: +[DONE] +- XARGON: Wait for Changes often fails to update display when Xargon shows a popup message on the screen. + Xargon is using VGA unchained page flipping. The page flip to present the popup fails to render. + Perhaps the RenderComplete VGA function is rendering the entire frame in response BEFORE the + new start address takes effect. [FIXED] +- Commander Keen in Invasion of the Vorticons (keen1): + Commander Keen in Aliens Ate My Babysitter (keen6): + Cosmo's Cosmic Adventure (cosmo): + + Wait for Changes fails to update display when game uses only the attribute controller palette to "fade in" + and "fade out" the display. These games target the EGA where that is a more practical palette-based way + to do it. There is no VGA palette on EGA. +- Cosmo's Cosmic Adventure (cosmo): + Jill of the Jungle (jill/trilogy-1): + + Wait for Changes appears to affect Cosmo's rendering and page flipping. The normally regular (8fps?) frame + rate becomes somewhat irregular. + + NOTE: I still see from time to time, Cosmo's frame rate seem to skip a bit, but it's much better (2025/12/23). + NOTE: Apparently reducing the calls to render complete frame down to ONE call per frame solves the issue (2025/12/24). +- Cosmo's Cosmic Adventure (cosmo): + When your health goes to zero, Cosmo "dies" and goes to heaven, and the game does the + attribute controller "fade out", the Wait For Changes emulation fails to update the + screen after the last color is blanked. If you look at the Video Debug Overlay, despite + that all colors should be blanked, the last rendered frame still has color 15 set to + white. This does not happen if only Render On Demand is active. + +DOSBox Integrated Graphics: +[TODO] +[DONE] +- Windows 3.1 IG driver needs to be able to read back the bank switching (r/w) registers so the software cursor can save/restore them as part of drawing the cursor. +- Capabilities register, so the guest driver knows what we offer, AND as a way to detect whether the DOSBox IG is even enabled or not (whether machine=svga_dosbox or not). +- Add DOSBox Integrated Graphics control register to control bank switching window size and granularity. The Windows driver could change the granularity to something smaller than 64KB while maintaining a 64KB window so that it can draw without having to worry about bank switching mid-draw. It's pretty obvious why Cirrus SVGA chipsets chose to use 64KB windows and 4KB granularity, and that's likely why. Yes, the Windows 3.1 driver in 386 enhanced mode will just use the linear framebuffer anyway, but for 286 standard mode and real mode windows, it's easier for the driver to just use the A000h segment and bank switching. +- doublescan setting should become "true" "false" or "auto". "auto" is like true, but automatically becomes false when the user selects any render scaler other than the scale2x, etc. scalers. If the user wants to use the mame upscalers the doublescan setting shouldn't get in the way. [DONE, BUT IN A DIFFERENT WAY] +- HD (1920x1080) modes crash the emulator if the Video Debug Overlay is enabled. [FIXED: Now it just stops rendering] +- Why does VBETEST's line drawing glitch out for mode 0x10D (320x200 15bpp). It makes the test for that mode + either take way too long or never complete. ANSWER: Mode 0x10D is INT 10 mode 0x75, and 0x75 is a JEGA mode, which is M_CGA4, which confuses the VESA BIOS code. +- DOSBox IG should use vscale register for low res VESA BIOS modes to double the pixels as normal SVGA cards do. +- Video debug overlay fix info for DOSBox IG, the text is too long on one line and the EPAL palette can overlap it. +- Need to implement get/set scanline length, so VBETEST can do the full panning test +- Video debug overlay does not reflect Integrated Graphics width/height/bytesperscanline/hpel state when active, + still shows VGA state underneath. +- video debug overlay, when DOSBox IG is enabled, does not show hpel [FIXED] +- Add register to control pixel aspect ratio, so that it can fix the distorted frame when "fit to aspect ratio" is set. 1920x1080 has a 16:9 aspect ratio, not a 4:3 aspect ratio. +- 16:9 VESA BIOS modes, when "fit to aspect ratio", are squeezed as if 4:3. [FIXED] + +VGA rendering system: +[DONE] +- Add to VGA struct two integers indicating the maximum video resolution supported by the emulated card. [DONE] +- S3 emulation: Fill in VGA struct to indicate maximum video resolution is 2048x2048. [DONE] +- DOSBox IG: Fill in VGA struct to indicate maximum video resolution supported is 4096x4096. [DONE] +- DOSBox IG: Reject width/height specification from guest if the dimensions are larger than the maximum video resolution + reported in the VGA struct. [DONE] + +VESA BIOS: +[NOTED] +- VBETEST refuses to do the panning test on the initial screen per mode if the reported video memory size through the VESA BIOS is larger than 32MB. Why? +- VBETEST refuses to do get/set scanline panning test if the video memory size reported through the VESA BIOS is larger than 8MB. Why? +- VBETEST cannot handle more than 256 banks properly. It requires the VESA BIOS to ignore the upper 8 bits when calling the bank switching function, or else the test screens do not render properly. This is ironic considering VBETEST meticulously tests whether getting/setting the bank switching window works correctly even for banks 256 or higher if it thinks the card should support it. It seems to take the number of banks that SHOULD be there given the video memory (N), and then test up to N * 4. +[TODO] +- VBE protected mode "set display start" function should wait for vertical retrace if set by dosbox.conf or if BL == 0x80, same as the normal INT 10h call. Doing so should fix flickering in Duke Nukem 3D and Blood 800x600 VBE modes when used with dynamic core and cycles=max (any case where the game is able to render faster than the refresh rate). Then again perhaps the pmode interface was designed to quickly set the start address and may not have waited for vsync by default. Perhaps when Duke Nukem 3D coded their support the average machine was not capable in VBE modes of rendering more than 1/3 the refresh rate and the dev never noticed the issue. +- Add dosbox.conf option to control whether pmode option waits for vsync. A pmode analog of "vesa set display vsync". If -1 it does not vsync. +- INT 10h modelist: Add a field to the modelist struct that allows the modelist to specify a display aspect ratio. +- VESAMOED: Add parameters that allow the user to edit the VESA BIOS modelist and control the display aspect ratio. You want to make a custom mode with a wacky aspect ratio like 21:9? Go for it. Make sure the program indicates in the param list the aspect ratio settings only apply to machine=svga_dosbox. +[DONE] +- Video debug overlay reporting source -> display resolutions for CGA/MDA/HERC/etc. assumes that 2x/4x row height is interleaved graphics, but remember there's that 160x100 text mode "graphics" mode some games use. +- Add machine=vesa_vbe3 (S3 emulation), enable VBE 3.0 emulation if machine=vesa_vbe3. +- For machine=svga_dosbox (DOSBox Integrated Graphics) add boolean to enable VBE 3.0 extensions, and then implement them if set. machine=svga_dosbox should emulate VBE 3.0. machine=svga_dosbox_vbe2 should emulate VBE 2.0. +- S3: If there is enough video memory that more than 128 banks are possible, set the require-lfb flag on any mode for which more than 128 banks are required to interact with the visible page of the mode. Require the linear framebuffer to use it. +- INT 10h VBE modelist. Add special flag that if set, makes use of the LFB a requirement to use the mode (and disables all bank switching non-lfb support for the mode) +- When reading the vbe_window_granularity from dosbox.conf, instead of leaving it 0 if the user doesn't set it, set it to the SVGA card's default. Then go through the code and replace all the conditional (vbe_window_granularity != 0) tests with code to just trust that vbe_window_granularity is the window granularity. Cleanup the code. Add a variable to store the loaded value from dosbox.conf in a vbe_window_granularity_default variable because we're going to allow the DOSBox IG to change it at runtime. +- dosbox.conf option to enable/disable the VBE protected mode interface. +- Filter out video modes with width and/or height larger than the maximum video resolution indicated in the VGA struct. [DONE] +- Now that render scaler limits have been removed, start adding VESA BIOS modes higher than 1920x1440. For example, + 1920x1200, 2560x1600, 2880x2160, 3840x2160 (4K UHD!), 4096x2160. It is very important not to allow these UHD modes for + S3 emulation because the S3 chipset as emulated cannot output more than 2048 scan lines due to register limitations. [DONE] +- VESA SetCPUWindow(). The bank number is 16-bit. The code masks off the low 8 bits because of legacy code and Demoscene bugs. Add code to NOT mask off the low 8 bits if there is enough video memory that 256 or more banks are possible. Make it one less thing for VBETEST to possibly complain about. +- Add dosbox.conf option that if set, instructs the VESA BIOS emulation to limit the reported amount of video memory on the card. +- To complement vga.mem.memsize, add vga.mem.vbe_memsize. Normally they would be the same value, but it would make it possible to report a smaller size through the VESA BIOS to deal with troublesome programs that can't handle too many banks while bank switching, or too much video memory in general, or limitations in the S3 CRTC registers. Then replace GetReportedVideoMemorySize() with just a reference to vga.mem.vbe_memsize. The code to limit reported VBE memory for S3 to stay within the limits of the S3 CRTC registers could adjust THAT value instead of limiting video memory. +- S3 CRTC port 6Ah (bank switching) remove 8-bit hack for smaller vbe window granularity. Update code that limits reported VBE memory for S3 based on banks to always limit to 128, instead of 128 but 256 if smaller granularity. +- BUG: machine=svga_dosbox breaks Duke Nukem 3D SVGA graphics support. You get a "rolling image" effect. This only happens if the game uses the protected mode interface to set the display start. + +AVI capture: +- When capturing MPEG-TS with H.264, if FFMPEG provides it, try using the VAAPI version if possible. That means if your GPU has H.264 encoding support, the VAAPI version will use your GPU to encode to H.264, instead of using your CPU to do it. This at least would enable it under Linux. Not sure about Mac OS or Windows here. +- Add option for MPEG-TS to choose between H.264, H.265, or AV1. These are codecs commonly supported by GPUs today. +- Add option for AVI capture to choose between AVI, MPEG-TS, and fragmented MP4. The MP4 format might be easier to bring into video editing software. However you can't change video format on a whim in MP4, so, like AVI, every mode change means starting another capture file. + +Output drivers: +- Add Vulkan output driver. On Linux at least, allow the user to choose between surface, opengl, and vulkan. +- Add Metal output driver. It might be some good API practice if Mac OS builds could use that. +- DirectX 11 output driver? DirectX 12 output driver? Programming practice. + +Voodoo 3Dfx: +- Idea: Set up an OpenGL texture and direct 3Dfx emulation to render to texture, then present that texture to the DOSBox-X window. This would allow 3Dfx OpenGL output while allowing resizing and the menus to work. +- Make it possible, like other DOSBox forks do, and users seem to expect, for DOSBox-X to just OpenGL render 3Dfx at the resolution of the window, effectively upscaling the 3Dfx output. That does screw with the OpenGL matrix and OpenGL state, which is why DOSBox-X imposed the limit in the first place. + +DOSBox menus: +- Add menu item to control render on demand, and wait for changes. Selecting the menu will toggle between [auto], [off], and [on]. +- Add menu item to control AVI capture skip unchanged option. + +DOSBox scaler render system: +[DONE] +- Render scaler code crashes if the GFX display is larger than 1920x1080. Add code to bypass scalers entirely and draw directly to the SDL surface if the resolution is greater than 1920x1080. At that high resolution there is no need for scalers (you probably can't see the effects of the more elaborate ones anyway), and you probably have a GPU through which you can use the OpenGL output mode to scale up to your screen if for some reason you have an 8K monitor. [FIXED] +- Recent changes to the render system in DOSBox-X just BROKE the "fit aspect ratio" setting for output=surface! It no longer stretches the + frame properly! Fix! [UM, DOES NOT HAPPEN ANYMORE?] + diff --git a/acinclude.m4 b/acinclude.m4 index 171e275f598..20815c69329 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1,3 +1,35 @@ +dnl AM_PATH_SDL3([MINIMUM-VERSION]) +AC_DEFUN([AM_PATH_SDL3], +[ +AC_ARG_ENABLE(sdl3, [ --enable-sdl3 Enable SDL 2.x], + enable_sdl3enable=$enableval, enable_sdl3enable=no) + + AH_TEMPLATE(C_SDL3,[Set to 1 to enable SDL 2.x support]) + + SDL3_CONFIG=no + if test x$enable_sdl3enable = xyes ; then + # TODO: Same override logic as SDL2 when SDL3 is in-tree + manual_sdl3config=no + + AC_PATH_PROG(SDL3_CONFIG, sdl3-config, no) + AC_MSG_CHECKING(for SDL3) + + # SDL3 does not provide a sdl3-config, must use pkg-config to find it + if test x$manual_sdl3config = xno && \ + pkg-config --exists sdl3 ; then + SDL3_CFLAGS=`pkg-config sdl3 --cflags` + SDL3_LIBS=`pkg-config sdl3 --libs` + AC_DEFINE(C_SDL3,1) + AC_MSG_RESULT(found using pkg-config) + else + AC_MSG_RESULT(not found) + fi + fi + + AC_SUBST(SDL3_CFLAGS) + AC_SUBST(SDL3_LIBS) +]) + dnl AM_PATH_SDL2([MINIMUM-VERSION]) AC_DEFUN([AM_PATH_SDL2], [ diff --git a/autogen.sh b/autogen.sh index 2544f72fc5c..ab761416f9a 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,8 +1,8 @@ -#!/usr/bin/env bash +#!/bin/sh # If an error occurs, quit the script and inform the user. This ensures scripts # like ./build-macos and ./build-macos-sdl2 etc. Don't continue on if Autotools isn't installed. -function finish { +finish() { if [ "${success}" -eq 0 ]; then echo 'autogen.sh failed to complete: verify that GNU Autotools is installed on the system and try again' fi diff --git a/avi_zmbv_to_720p.sh b/avi_zmbv_to_720p.sh index 08603b3f3fd..b391ec91895 100755 --- a/avi_zmbv_to_720p.sh +++ b/avi_zmbv_to_720p.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh file="${1}" bitrate=15000000 aspect_ratio=4:3 diff --git a/build-debug-os2-sdl2.cmd b/build-debug-os2-sdl2.cmd new file mode 100644 index 00000000000..118d08e2365 --- /dev/null +++ b/build-debug-os2-sdl2.cmd @@ -0,0 +1,10 @@ +REM echo off +cd dosbox-x +bash autogen.sh +dash configure --enable-sdl2 --disable-gamelink --enable-debug +REM since cpu cores need a lot of memory, +REM we don't want to build parallel +cd src\cpu +make +cd ..\.. +make -j4 diff --git a/build-debug-sdl3 b/build-debug-sdl3 new file mode 100755 index 00000000000..06c5e0f4867 --- /dev/null +++ b/build-debug-sdl3 @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +# allow 32-bit on 64-bit (x86) builds +if [ "$1" == "32" ]; then + CC="$(which gcc) -m32" + CXX="$(which g++) -m32" + export CC CXX + no_host_sdl3=1 + shift + opt="--host=i686-pc-linux-gnu --target=i686-pc-linux-gnu" +fi + +# Jonathan C dev hack: refer to LNKDOS16 in /usr/src/doslib +doslib= +if [ -d /usr/src/doslib ]; then doslib="/usr/src/doslib"; fi + +if [ -n "${doslib}" ]; then + if [ -x "${doslib}/tool/linker/linux-host/lnkdos16" ]; then + export PATH="${doslib}/tool/linker/linux-host:${PATH}" + fi +fi + +# I'm sick and tired of all the churn the three versions of autoconf +# are causing in this repo. Stop committing the configure scripts +# and just autoregen. +./autogen.sh || exit 1 + +# fix +chmod +x vs/sdl/build-scripts/strip_fPIC.sh + +# prefer to compile against our own copy of SDLnet 1.x +#echo "Compiling our internal SDLnet 1.x" +#(cd vs/sdlnet && ./build-dosbox.sh) || exit 1 + +# now compile ourself +echo "Compiling DOSBox-X" +chmod +x configure +./configure --enable-debug=heavy --prefix=/usr --enable-sdl3 "${@}" "${opt}" || exit 1 +make -j3 || exit 1 + diff --git a/build-emscripten-sdl2 b/build-emscripten-sdl2 index 9edc0564581..e95c9e61e03 100755 --- a/build-emscripten-sdl2 +++ b/build-emscripten-sdl2 @@ -1,6 +1,14 @@ #!/usr/bin/env bash -# make sure you use ". ./emsdk_env.sh" +# This build script was tested on Ubunto 24.04 with Emscripten 3.1.28 + +REQUIRED_EMSDK=3.1.28 + +if [ -z "$EMSDK" ]; then + echo "Please set up Emscripten $REQUIRED_EMSDK" + echo "Run 'source EMSDK_HOME/emsdk_env.sh' before building." + exit 1 +fi # I'm sick and tired of all the churn the three versions of autoconf # are causing in this repo. Stop committing the configure scripts @@ -17,8 +25,8 @@ LD_CXX="em++" AR="emar" RANLIB="emranlib" CFLAGS="-DEMTERPRETER_SYNC" -CXXFLAGS="-DEMSCRIPTEN=1 -DEMTERPRETER_SYNC -s USE_ZLIB=1 -s USE_SDL=2" -LDFLAGS="-DEMSCRIPTEN=1 -DEMTERPRETER_SYNC -s USE_ZLIB=1 -s USE_SDL=2 -s FORCE_FILESYSTEM=1 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=100663296 -s ASYNCIFY -s ERROR_ON_UNDEFINED_SYMBOLS=0" +CXXFLAGS="-DEMSCRIPTEN=1 -DEMTERPRETER_SYNC -s USE_ZLIB=1 -s USE_LIBPNG=1 -s USE_SDL=2 -s USE_SDL_NET=2" +LDFLAGS="-DEMSCRIPTEN=1 -DEMTERPRETER_SYNC -s USE_ZLIB=1 -s USE_LIBPNG=1 -s USE_SDL=2 -s USE_SDL_NET=2 -s FORCE_FILESYSTEM=1 -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=100663296 -s ASYNCIFY -s ERROR_ON_UNDEFINED_SYMBOLS=0" export CC CXX LD LD_CXX AR RANLIB CFLAGS CXXFLAGS LDFLAGS # where are we? diff --git a/build-macos b/build-macos index 8d945f29ffa..400a66797f4 100755 --- a/build-macos +++ b/build-macos @@ -27,6 +27,7 @@ rm -f src/dosbox-x-arm64 src/dosbox-x-x86_64 do_cleanup() { rm -rf vs/sdl/linux-host vs/sdl/linux-build rm -rf vs/sdlnet/linux-host vs/sdlnet/linux-build + rm -rf vs/sdl2net/linux-host vs/sdl2net/linux-build rm -rf vs/zlib/linux-host vs/zlib/linux-build rm -rf vs/libpng/linux-host vs/libpng/linux-build rm -rf vs/freetype/linux-host vs/freetype/linux-build @@ -76,23 +77,19 @@ for arch in ${architectures}; do do_cleanup - arch_flags="-arch ${arch} -mmacosx-version-min=10.12 " + arch_flags="-arch ${arch} -mmacosx-version-min=10.13 " CFLAGS="${arch_flags}${orig_CFLAGS}" - LDFLAGS="${arch_flags}${orig_LDFLAGS}" - CPPFLAGS="${arch_flags}${orig_CPPFLAGS}" CXXFLAGS="${arch_flags}${orig_CXXFLAGS}" - export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + export CFLAGS CXXFLAGS # prefer to compile against our own copy of SDL 1.x echo "Compiling our internal SDL 1.x" (cd vs/sdl && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/sdl/linux-host/include " nld="-L${top}/vs/sdl/linux-host/lib " - CFLAGS="${CFLAGS}${new}" LDFLAGS="${LDFLAGS}${nld}" CPPFLAGS="${CPPFLAGS}${new}" - CXXFLAGS="${CXXFLAGS}${new}" - export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + export LDFLAGS CPPFLAGS # prefer to compile against our own copy of SDLnet 1.x echo "Compiling our internal SDLnet 1.x" @@ -103,32 +100,24 @@ for arch in ${architectures}; do (cd vs/zlib && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/zlib/linux-host/include " nld="-L${top}/vs/zlib/linux-host/lib " - CFLAGS="${CFLAGS}${new}" LDFLAGS="${LDFLAGS}${nld}" CPPFLAGS="${CPPFLAGS}${new}" - CXXFLAGS="${CXXFLAGS}${new}" - export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS # prefer to compile against our own libpng (comment this out to disable) echo "Compiling our internal libpng" (cd vs/libpng && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/libpng/linux-host/include " nld="-L${top}/vs/libpng/linux-host/lib " - CFLAGS="${CFLAGS}${new}" LDFLAGS="${LDFLAGS}${nld}" CPPFLAGS="${CPPFLAGS}${new}" - CXXFLAGS="${CXXFLAGS}${new}" - export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS # prefer to compile against our own freetype echo "Compiling our internal freetype" (cd vs/freetype && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/freetype/linux-host/include/freetype2 " nld="-L${top}/vs/freetype/linux-host/lib -lfreetype " - CFLAGS="${CFLAGS}${new}" LDFLAGS="${LDFLAGS}${nld}" CPPFLAGS="${CPPFLAGS}${new}" - CXXFLAGS="${CXXFLAGS}${new}" INTERNAL_FREETYPE=1 export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS INTERNAL_FREETYPE diff --git a/build-macos-sdl2 b/build-macos-sdl2 index b54b64a1447..10628b64775 100755 --- a/build-macos-sdl2 +++ b/build-macos-sdl2 @@ -17,6 +17,7 @@ orig_CFLAGS="${CFLAGS}" orig_LDFLAGS="${LDFLAGS}" orig_CPPFLAGS="${CPPFLAGS}" orig_CXXFLAGS="${CXXFLAGS}" +orig_LIBS="${LIBS}" # Remove our temporary copies of dosbox-x executable before rebuilding rm -f src/dosbox-x-arm64 src/dosbox-x-x86_64 @@ -26,6 +27,8 @@ do_cleanup() { rm -rf vs/zlib/linux-host vs/zlib/linux-build rm -rf vs/libpng/linux-host vs/libpng/linux-build rm -rf vs/freetype/linux-host vs/freetype/linux-build + rm -rf vs/sdlnet/linux-host vs/sdlnet/linux-build + rm -rf vs/sdl2net/linux-host vs/sdl2net/linux-build [ -e Makefile ] && make clean } @@ -72,59 +75,52 @@ for arch in ${architectures}; do do_cleanup - arch_flags="-arch ${arch} -mmacosx-version-min=10.12 " + arch_flags="-arch ${arch} -mmacosx-version-min=10.13 " CFLAGS="${arch_flags}${orig_CFLAGS}" - LDFLAGS="${arch_flags}${orig_LDFLAGS}" - CPPFLAGS="${arch_flags}${orig_CPPFLAGS}" CXXFLAGS="${arch_flags}${orig_CXXFLAGS}" - export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + export CFLAGS CXXFLAGS # prefer to compile against our own copy of SDL 2.x IF the system does not provide one echo "Compiling our internal SDL 2.x" (cd vs/sdl2 && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/sdl2/linux-host/include " nld="-L${top}/vs/sdl2/linux-host/lib " - CFLAGS="${CFLAGS}${new}" + CPPFLAGS="${orig_CPPFLAGS}${new}" + LDFLAGS="${orig_LDFLAGS}${nld}" + export LDFLAGS CPPFLAGS + + # prefer to compile against our own copy of SDLnet 2.x + echo "Compiling our internal SDLnet 2.x" + chmod +x vs/sdl2net/*.sh + (cd vs/sdl2net && ./build-dosbox.sh) || exit 1 + new="-I${top}/vs/sdl2net/linux-host/include " + nld="-L${top}/vs/sdl2net/linux-host/lib " LDFLAGS="${LDFLAGS}${nld}" CPPFLAGS="${CPPFLAGS}${new}" - CXXFLAGS="${CXXFLAGS}${new}" - export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS - - # prefer to compile against our own copy of SDLnet 1.x - echo "Compiling our internal SDLnet 1.x" - (cd vs/sdlnet && ./build-dosbox.sh) || exit 1 - + # prefer to compile against our own zlib echo "Compiling our internal zlib" (cd vs/zlib && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/zlib/linux-host/include " nld="-L${top}/vs/zlib/linux-host/lib " - CFLAGS="${CFLAGS}${new}" LDFLAGS="${LDFLAGS}${nld}" CPPFLAGS="${CPPFLAGS}${new}" - CXXFLAGS="${CXXFLAGS}${new}" - export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS # prefer to compile against our own libpng (comment this out to disable) echo "Compiling our internal libpng" (cd vs/libpng && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/libpng/linux-host/include " nld="-L${top}/vs/libpng/linux-host/lib " - CFLAGS="${CFLAGS}${new}" LDFLAGS="${LDFLAGS}${nld}" CPPFLAGS="${CPPFLAGS}${new}" - CXXFLAGS="${CXXFLAGS}${new}" - export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS # prefer to compile against our own freetype echo "Compiling our internal freetype" (cd vs/freetype && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/freetype/linux-host/include/freetype2 " - nld="-L${top}/vs/freetype/linux-host/lib -lfreetype " - CFLAGS="${CFLAGS}${new}" + nld="-L${top}/vs/freetype/linux-host/lib/ -lfreetype " LDFLAGS="${LDFLAGS}${nld}" CPPFLAGS="${CPPFLAGS}${new}" - CXXFLAGS="${CXXFLAGS}${new}" INTERNAL_FREETYPE=1 export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS INTERNAL_FREETYPE @@ -150,8 +146,9 @@ for arch in ${architectures}; do # now compile ourself echo "Compiling DOSBox-X" chmod +x configure + ./configure --enable-debug=heavy --prefix=/usr --enable-sdl2 "${opts}" "${@}" || exit 1 - make -j3 || exit 1 + make -j$(sysctl -n hw.ncpu) || exit 1 cp src/dosbox-x "src/dosbox-x-${arch}" -done +done \ No newline at end of file diff --git a/build-macosold b/build-macosold new file mode 100755 index 00000000000..3ed2df2601b --- /dev/null +++ b/build-macosold @@ -0,0 +1,172 @@ +#!/usr/bin/env bash + +# I'm sick and tired of all the churn the three versions of autoconf +# are causing in this repo. Stop committing the configure scripts +# and just autoregen. +./autogen.sh || exit 1 + +# where are we? +top=$(pwd) +if test -z "${top}" ; then exit 1; fi + +# fix +chmod +x vs/sdl/build-scripts/strip_fPIC.sh + +orig_CFLAGS="${CFLAGS}" +orig_LDFLAGS="${LDFLAGS}" +orig_CPPFLAGS="${CPPFLAGS}" +orig_CXXFLAGS="${CXXFLAGS}" + +# Ensure sdl2 isn't detected as we aren't going to use it, and the presence of +# this folder will cause the build to fail. +rm -rf vs/sdl2/linux-host vs/sdl2/linux-build + +# Remove our temporary copies of dosbox-x executable before rebuilding +rm -f src/dosbox-x-arm64 src/dosbox-x-x86_64 + +do_cleanup() { + rm -rf vs/sdl/linux-host vs/sdl/linux-build + rm -rf vs/sdlnet/linux-host vs/sdlnet/linux-build + rm -rf vs/zlib/linux-host vs/zlib/linux-build + rm -rf vs/libpng/linux-host vs/libpng/linux-build + rm -rf vs/freetype/linux-host vs/freetype/linux-build + [ -e Makefile ] && make clean +} + +universal=0 +architectures="$(uname -m)" +#if [ "${1}" = "universal" ]; then +# shift +# if [ "${architectures}" = "arm64" ]; then +# # We can only build universal binaries on an arm64 host because we +# # need homebrew functional under both architectures. +# universal=1 +# architectures="arm64 x86_64" +# fi +#fi + +arm64_brew_cmd="" +x86_64_brew_cmd="" +# arm64 native Homebrew +#if [ -x /opt/homebrew/bin/brew ]; then +# arm64_brew_cmd="/opt/homebrew/bin/brew" +#fi + +# x86_64 Homebrew +#if [ -x /usr/local/bin/brew ]; then +# # old homebrew +# x86_64_brew_cmd="/usr/local/bin/brew" +#elif [ -x /usr/local/Homebrew/bin/brew ]; then +# # new homebrew +# x86_64_brew_cmd="/usr/local/Homebrew/bin/brew" +#fi + +# x86_64 on arm64 for universal builds if x86_64 Homebrew is installed +#if [ -n "${x86_64_brew_cmd}" ] && [ "${universal}" -eq 1 ]; then +# x86_64_brew_cmd="/usr/bin/arch -x86_64 ${x86_64_brew_cmd}" +#fi + +for arch in ${architectures}; do + #declare brew_cmd="${arch}_brew_cmd" + #if [ -n "${!brew_cmd}" ]; then + # ${!brew_cmd} list fluid-synth &>/dev/null || ${!brew_cmd} install fluid-synth + # ${!brew_cmd} list libslirp &>/dev/null || ${!brew_cmd} install libslirp + # ${!brew_cmd} list pkg-config &>/dev/null || ${!brew_cmd} install pkg-config + #fi + + do_cleanup + + #arch_flags="-arch ${arch} -mmacosx-version-min=10.11 " + arch_flags="-arch ${arch} " + CFLAGS="${arch_flags}${orig_CFLAGS}" + LDFLAGS="${arch_flags}${orig_LDFLAGS}" + CPPFLAGS="${arch_flags}${orig_CPPFLAGS}" + CXXFLAGS="${arch_flags}${orig_CXXFLAGS}" + export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + + # prefer to compile against our own copy of SDL 1.x + echo "Compiling our internal SDL 1.x" + (cd vs/sdl && ./build-dosbox.sh) || exit 1 + new="-I${top}/vs/sdl/linux-host/include " + nld="-L${top}/vs/sdl/linux-host/lib " + CFLAGS="${CFLAGS}${new}" + LDFLAGS="${LDFLAGS}${nld}" + CPPFLAGS="${CPPFLAGS}${new}" + CXXFLAGS="${CXXFLAGS}${new}" + export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + + # prefer to compile against our own copy of SDLnet 1.x + echo "Compiling our internal SDLnet 1.x" + (cd vs/sdlnet && ./build-dosbox.sh) || exit 1 + + CPPFLAGS="${CPPFLAGS} $(pkg-config --cflags zlib) " + CFLAGS="${CFLAGS} $(pkg-config --cflags zlib) " + CXXFLAGS="${CXXFLAGS} $(pkg-config --cflags zlib) " + LDFLAGS="${LDFLAGS} $(pkg-config --libs zlib) " + + # prefer to compile against our own zlib + #echo "Compiling our internal zlib" + #(cd vs/zlib && ./build-dosbox.sh) || exit 1 + #new="-I${top}/vs/zlib/linux-host/include " + #nld="-L${top}/vs/zlib/linux-host/lib " + #CFLAGS="${CFLAGS}${new}" + #LDFLAGS="${LDFLAGS}${nld}" + #CPPFLAGS="${CPPFLAGS}${new}" + #CXXFLAGS="${CXXFLAGS}${new}" + export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + + CPPFLAGS="${CPPFLAGS} $(pkg-config --cflags libpng) " + CFLAGS="${CFLAGS} $(pkg-config --cflags libpng) " + CXXFLAGS="${CXXFLAGS} $(pkg-config --cflags libpng) " + LDFLAGS="${LDFLAGS} $(pkg-config --libs libpng) " + + # prefer to compile against our own libpng (comment this out to disable) + #echo "Compiling our internal libpng" + #(cd vs/libpng && ./build-dosbox.sh) || exit 1 + #new="-I${top}/vs/libpng/linux-host/include " + #nld="-L${top}/vs/libpng/linux-host/lib " + #CFLAGS="${CFLAGS}${new}" + #LDFLAGS="${LDFLAGS}${nld}" + #CPPFLAGS="${CPPFLAGS}${new}" + #CXXFLAGS="${CXXFLAGS}${new}" + export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + + # prefer to compile against our own freetype + echo "Compiling our internal freetype" + (cd vs/freetype && ./build-dosbox.sh) || exit 1 + new="-I${top}/vs/freetype/linux-host/include/freetype2 " + nld="-L${top}/vs/freetype/linux-host/lib -lfreetype " + CFLAGS="${CFLAGS}${new}" + LDFLAGS="${LDFLAGS}${nld}" + CPPFLAGS="${CPPFLAGS}${new}" + CXXFLAGS="${CXXFLAGS}${new}" + INTERNAL_FREETYPE=1 + export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS INTERNAL_FREETYPE + + opts= + + # if Brew has installed packages, try to use those too + #if [ -n "${!brew_cmd}" ]; then + # echo "Brew is installed, I'm going to use its libraries too" + # new="-I$(${!brew_cmd} --prefix)/include " + # nld="-L$(${!brew_cmd} --prefix)/lib " + # CFLAGS="${CFLAGS}${new}" + # LDFLAGS="${LDFLAGS}${nld}" + # CPPFLAGS="${CPPFLAGS}${new}" + # CXXFLAGS="${CXXFLAGS}${new}" + # PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:$(${!brew_cmd} --prefix)/lib/pkgconfig" + # export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS PKG_CONFIG_PATH + #fi + + #if [ "${universal}" = 1 ]; then + # opts="${opts} --enable-universal" + #fi + + # now compile ourself + echo "Compiling DOSBox-X" + chmod +x configure + ./configure --enable-debug=heavy --prefix=/usr "${opts}" "${@}" || exit 1 + make -j3 || exit 1 + + cp src/dosbox-x "src/dosbox-x-${arch}" +done diff --git a/build-macosold-sdl2 b/build-macosold-sdl2 new file mode 100755 index 00000000000..338c82733eb --- /dev/null +++ b/build-macosold-sdl2 @@ -0,0 +1,159 @@ +#!/usr/bin/env bash + +# I'm sick and tired of all the churn the three versions of autoconf +# are causing in this repo. Stop committing the configure scripts +# and just autoregen. +./autogen.sh || exit 1 + +# where are we? +top=$(pwd) +if test -z "${top}" ; then exit 1; fi + +# fix +chmod +x vs/sdl/build-scripts/strip_fPIC.sh +chmod +x vs/sdl2/build-dosbox.sh + +orig_CFLAGS="${CFLAGS}" +orig_LDFLAGS="${LDFLAGS}" +orig_CPPFLAGS="${CPPFLAGS}" +orig_CXXFLAGS="${CXXFLAGS}" + +# Remove our temporary copies of dosbox-x executable before rebuilding +rm -f src/dosbox-x-arm64 src/dosbox-x-x86_64 + +do_cleanup() { + rm -rf vs/sdl2/linux-host vs/sdl2/linux-build + rm -rf vs/zlib/linux-host vs/zlib/linux-build + rm -rf vs/libpng/linux-host vs/libpng/linux-build + rm -rf vs/freetype/linux-host vs/freetype/linux-build + [ -e Makefile ] && make clean +} + +universal=0 +architectures="$(uname -m)" +#if [ "${1}" = "universal" ]; then +# shift +# if [ "${architectures}" = "arm64" ]; then +# # We can only build universal binaries on an arm64 host because we +# # need homebrew functional under both architectures. +# universal=1 +# architectures="arm64 x86_64" +# fi +#fi + +arm64_brew_cmd="" +x86_64_brew_cmd="" +# arm64 native Homebrew +#if [ -x /opt/homebrew/bin/brew ]; then +# arm64_brew_cmd="/opt/homebrew/bin/brew" +#fi + +# x86_64 Homebrew +#if [ -x /usr/local/bin/brew ]; then +# # old homebrew +# x86_64_brew_cmd="/usr/local/bin/brew" +#elif [ -x /usr/local/Homebrew/bin/brew ]; then +# # new homebrew +# x86_64_brew_cmd="/usr/local/Homebrew/bin/brew" +#fi + +# x86_64 on arm64 for universal builds if x86_64 Homebrew is installed +#if [ -n "${x86_64_brew_cmd}" ] && [ "${universal}" -eq 1 ]; then +# x86_64_brew_cmd="/usr/bin/arch -x86_64 ${x86_64_brew_cmd}" +#fi + +for arch in ${architectures}; do +# declare brew_cmd="${arch}_brew_cmd" +# if [ -n "${!brew_cmd}" ]; then +# ${!brew_cmd} list fluid-synth &>/dev/null || ${!brew_cmd} install fluid-synth +# ${!brew_cmd} list libslirp &>/dev/null || ${!brew_cmd} install libslirp +# ${!brew_cmd} list pkg-config &>/dev/null || ${!brew_cmd} install pkg-config +# fi + + do_cleanup + + # arch_flags="-arch ${arch} -mmacosx-version-min=10.11 " + arch_flags="-arch ${arch} " + CFLAGS="${arch_flags}${orig_CFLAGS}" + LDFLAGS="${arch_flags}${orig_LDFLAGS}" + CPPFLAGS="${arch_flags}${orig_CPPFLAGS}" + CXXFLAGS="${arch_flags}${orig_CXXFLAGS}" + export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + + # prefer to compile against our own copy of SDL 2.x IF the system does not provide one + + #echo "Compiling our internal SDL 2.x" + #(cd vs/sdl2 && ./build-dosbox.sh) || exit 1 + #new="-I${top}/vs/sdl2/linux-host/include " + #nld="-L${top}/vs/sdl2/linux-host/lib " + #CFLAGS="${CFLAGS}${new}" + #LDFLAGS="${LDFLAGS}${nld}" + #CPPFLAGS="${CPPFLAGS}${new}" + CXXFLAGS="${CXXFLAGS}${new}" + export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + + # prefer to compile against our own copy of SDLnet 1.x + echo "Compiling our internal SDLnet 1.x" + (cd vs/sdlnet && ./build-dosbox.sh) || exit 1 + + # prefer to compile against our own zlib + #echo "Compiling our internal zlib" + #(cd vs/zlib && ./build-dosbox.sh) || exit 1 + #new="-I${top}/vs/zlib/linux-host/include " + #nld="-L${top}/vs/zlib/linux-host/lib " + #CFLAGS="${CFLAGS}${new}" + #LDFLAGS="${LDFLAGS}${nld}" + #CPPFLAGS="${CPPFLAGS}${new}" + #CXXFLAGS="${CXXFLAGS}${new}" + #export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + + # prefer to compile against our own libpng (comment this out to disable) + #echo "Compiling our internal libpng" + #(cd vs/libpng && ./build-dosbox.sh) || exit 1 + #new="-I${top}/vs/libpng/linux-host/include " + #nld="-L${top}/vs/libpng/linux-host/lib " + #CFLAGS="${CFLAGS}${new}" + #LDFLAGS="${LDFLAGS}${nld}" + #CPPFLAGS="${CPPFLAGS}${new}" + #CXXFLAGS="${CXXFLAGS}${new}" + #export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + + # prefer to compile against our own freetype + echo "Compiling our internal freetype" + (cd vs/freetype && ./build-dosbox.sh) || exit 1 + new="-I${top}/vs/freetype/linux-host/include/freetype2 " + nld="-L${top}/vs/freetype/linux-host/lib -lfreetype " + CFLAGS="${CFLAGS}${new}" + LDFLAGS="${LDFLAGS}${nld}" + CPPFLAGS="${CPPFLAGS}${new}" + CXXFLAGS="${CXXFLAGS}${new}" + INTERNAL_FREETYPE=1 + export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS INTERNAL_FREETYPE + + opts= + + # if Brew has installed packages, try to use those too +# if [ -n "${!brew_cmd}" ]; then +# echo "Brew is installed, I'm going to use its libraries too" +# new="-I$(${!brew_cmd} --prefix)/include " +# nld="-L$(${!brew_cmd} --prefix)/lib " +# CFLAGS="${CFLAGS}${new}" +# LDFLAGS="${LDFLAGS}${nld}" +# CPPFLAGS="${CPPFLAGS}${new}" +# CXXFLAGS="${CXXFLAGS}${new}" +# PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:$(${!brew_cmd} --prefix)/lib/pkgconfig" +# export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS PKG_CONFIG_PATH +# fi + +# if [ "${universal}" = 1 ]; then +# opts="${opts} --enable-universal" +# fi + + # now compile ourself + echo "Compiling DOSBox-X" + chmod +x configure + ./configure --enable-debug=heavy --prefix=/usr --enable-sdl2 "${opts}" "${@}" || exit 1 + make -j3 || exit 1 + + cp src/dosbox-x "src/dosbox-x-${arch}" +done diff --git a/build-mingw b/build-mingw index 275eba95502..88972c4733b 100755 --- a/build-mingw +++ b/build-mingw @@ -15,14 +15,13 @@ chmod +x vs/sdl/build-scripts/strip_fPIC.sh if [ -f ${MSYSTEM_PREFIX}/i686-7.3.0-release-posix-dwarf-rt_v5-rev0.txt ] ; then echo "set flags for lowend build" PATH="${MSYSTEM_PREFIX}/bin:${MSYSTEM_PREFIX}/i686-w64-mingw32/bin:${MSYSTEM_PREFIX}/opt/bin:${PATH}" - CXXFLAGS="-I${MSYSTEM_PREFIX}/include -I${MSYSTEM_PREFIX}/i686-w64-mingw32/include $CXXFLAGS -I${MSYSTEM_PREFIX}/opt/include " CPPFLAGS="-I${MSYSTEM_PREFIX}/include -I${MSYSTEM_PREFIX}/i686-w64-mingw32/include $CPPFLAGS -I${MSYSTEM_PREFIX}/opt/include " + CXXFLAGS="-I${MSYSTEM_PREFIX}/include -I${MSYSTEM_PREFIX}/i686-w64-mingw32/include $CXXFLAGS -I${MSYSTEM_PREFIX}/opt/include " CFLAGS="-I${MSYSTEM_PREFIX}/include -I${MSYSTEM_PREFIX}/i686-w64-mingw32/include $CFLAGS -I${MSYSTEM_PREFIX}/opt/include " LDFLAGS="-L${MSYSTEM_PREFIX}/lib -L${MSYSTEM_PREFIX}/i686-w64-mingw32/lib -L${MSYSTEM_PREFIX}/opt/lib $LDFLAGS " - export LDFLAGS PATH + export PATH CPPFLAGS CXXFLAGS CFLAGS LDFLAGS sed -i 's@\(^#if !defined(__MINGW32__)\)\(.*|| defined(__MINGW64_VERSION_MAJOR)\)@//\1\2 Fix for lowend build. Revert this for normal versions\n\1@g' src/hardware/serialport/misc_util.cpp fi -export CXXFLAGS CPPFLAGS CFLAGS echo "path=$PATH" sed -i 's/^#define ENABLE_IM_EVENT 1$/\/\/#define ENABLE_IM_EVENT 1/g' vs/sdl/include/SDL_platform.h @@ -45,11 +44,9 @@ if false; then (cd vs/zlib && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/zlib/linux-host/include " nld="-L${top}/vs/zlib/linux-host/lib " - CFLAGS="${new}${CFLAGS}" LDFLAGS="${nld}${LDFLAGS}" CPPFLAGS="${new}${CPPFLAGS}" - CXXFLAGS="${new}${CXXFLAGS}" - export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + export LDFLAGS CPPFLAGS fi # prefer to compile against our own libpng (comment this out to disable) @@ -57,29 +54,23 @@ echo "Compiling our internal libpng" (cd vs/libpng && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/libpng/linux-host/include " nld="-L${top}/vs/libpng/linux-host/lib " -CFLAGS="${new}${CFLAGS}" LDFLAGS="${nld}${LDFLAGS}" CPPFLAGS="${new}${CPPFLAGS}" -CXXFLAGS="${new}${CXXFLAGS}" -export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS +export LDFLAGS CPPFLAGS # prefer to compile against our own freetype echo "Compiling our internal freetype" (cd vs/freetype && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/freetype/linux-host/include/freetype2 " nld="-L${top}/vs/freetype/linux-host/lib -lfreetype " -CFLAGS="${new}${CFLAGS}" LDFLAGS="${nld}${LDFLAGS}" CPPFLAGS="${new}${CPPFLAGS}" -CXXFLAGS="${new}${CXXFLAGS}" INTERNAL_FREETYPE=1 -export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS INTERNAL_FREETYPE +export LDFLAGS CPPFLAGS INTERNAL_FREETYPE # pacman -S --needed --noconfirm mingw-w64-x86_64-libslirp &>/dev/null -CXXFLAGS="$CXXFLAGS -DNCURSES_STATIC " CPPFLAGS="$CPPFLAGS -DNCURSES_STATIC " -CFLAGS="$CFLAGS -DNCURSES_STATIC " -export CXXFLAGS CPPFLAGS CFLAGS +export CPPFLAGS # now compile ourself echo "Compiling DOSBox-X" diff --git a/build-mingw-sdl2 b/build-mingw-sdl2 index b5f89d41fbc..efb2363f492 100755 --- a/build-mingw-sdl2 +++ b/build-mingw-sdl2 @@ -15,14 +15,13 @@ chmod +x vs/sdl/build-scripts/strip_fPIC.sh if [ -f ${MSYSTEM_PREFIX}/i686-7.3.0-release-posix-dwarf-rt_v5-rev0.txt ] ; then echo "set flags for lowend build" PATH="${MSYSTEM_PREFIX}/bin:${MSYSTEM_PREFIX}/i686-w64-mingw32/bin:${MSYSTEM_PREFIX}/opt/bin:${PATH}" - CXXFLAGS="-I${MSYSTEM_PREFIX}/include -I${MSYSTEM_PREFIX}/i686-w64-mingw32/include $CXXFLAGS -I${MSYSTEM_PREFIX}/opt/include " CPPFLAGS="-I${MSYSTEM_PREFIX}/include -I${MSYSTEM_PREFIX}/i686-w64-mingw32/include $CPPFLAGS -I${MSYSTEM_PREFIX}/opt/include " + CXXFLAGS="-I${MSYSTEM_PREFIX}/include -I${MSYSTEM_PREFIX}/i686-w64-mingw32/include $CXXFLAGS -I${MSYSTEM_PREFIX}/opt/include " CFLAGS="-I${MSYSTEM_PREFIX}/include -I${MSYSTEM_PREFIX}/i686-w64-mingw32/include $CFLAGS -I${MSYSTEM_PREFIX}/opt/include " LDFLAGS="-L${MSYSTEM_PREFIX}/lib -L${MSYSTEM_PREFIX}/i686-w64-mingw32/lib -L${MSYSTEM_PREFIX}/opt/lib $LDFLAGS " - export LDFLAGS PATH + export PATH CPPFLAGS CXXFLAGS CFLAGS LDFLAGS sed -i 's@\(^#if !defined(__MINGW32__)\)\(.*|| defined(__MINGW64_VERSION_MAJOR)\)@//\1\2 Fix for lowend build. Revert this for normal versions\n\1@g' src/hardware/serialport/misc_util.cpp fi -export CXXFLAGS CPPFLAGS CFLAGS echo "path=$PATH" # prefer to compile against our own copy of SDL 2.x IF the system does not provide one @@ -30,11 +29,21 @@ x=$(which sdl2-config) if test -z "${x}" ; then echo "Compiling our internal SDL 2.x" (cd vs/sdl2 && ./build-dosbox.sh) || exit 1 + new="-I${top}/vs/sdl2/linux-host/include " + nld="-L${top}/vs/sdl2/linux-host/lib " + LDFLAGS="${nld}${LDFLAGS}" + CPPFLAGS="${new}${CPPFLAGS}" + export LDFLAGS CPPFLAGS fi -# prefer to compile against our own copy of SDLnet 1.x -echo "Compiling our internal SDLnet 1.x" -(cd vs/sdlnet && ./build-dosbox.sh) || exit 1 +# prefer to compile against our own copy of SDLnet 2.x +echo "Compiling our internal SDLnet 2.x" +(cd vs/sdl2net && ./build-dosbox.sh) || exit 1 +new="-I${top}/vs/sdl2net/linux-host/include " +nld="-L${top}/vs/sdl2net/linux-host/lib " +LDFLAGS="${nld}${LDFLAGS}" +CPPFLAGS="${new}${CPPFLAGS}" +export LDFLAGS CPPFLAGS # NTS: MinGW provides zlib for us if false; then @@ -43,11 +52,9 @@ if false; then (cd vs/zlib && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/zlib/linux-host/include " nld="-L${top}/vs/zlib/linux-host/lib " - CFLAGS="${new}${CFLAGS}" LDFLAGS="${nld}${LDFLAGS}" CPPFLAGS="${new}${CPPFLAGS}" - CXXFLAGS="${new}${CXXFLAGS}" - export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS + export LDFLAGS CPPFLAGS fi # prefer to compile against our own libpng (comment this out to disable) @@ -55,29 +62,23 @@ echo "Compiling our internal libpng" (cd vs/libpng && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/libpng/linux-host/include " nld="-L${top}/vs/libpng/linux-host/lib " -CFLAGS="${new}${CFLAGS}" LDFLAGS="${nld}${LDFLAGS}" CPPFLAGS="${new}${CPPFLAGS}" -CXXFLAGS="${new}${CXXFLAGS}" -export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS +export LDFLAGS CPPFLAGS # prefer to compile against our own freetype echo "Compiling our internal freetype" (cd vs/freetype && ./build-dosbox.sh) || exit 1 new="-I${top}/vs/freetype/linux-host/include/freetype2 " nld="-L${top}/vs/freetype/linux-host/lib -lfreetype " -CFLAGS="${new}${CFLAGS}" LDFLAGS="${nld}${LDFLAGS}" CPPFLAGS="${new}${CPPFLAGS}" -CXXFLAGS="${new}${CXXFLAGS}" INTERNAL_FREETYPE=1 -export CFLAGS LDFLAGS CPPFLAGS CXXFLAGS INTERNAL_FREETYPE +export LDFLAGS CPPFLAGS INTERNAL_FREETYPE # pacman -S --needed --noconfirm mingw-w64-x86_64-libslirp &>/dev/null -CXXFLAGS="$CXXFLAGS -DNCURSES_STATIC " CPPFLAGS="$CPPFLAGS -DNCURSES_STATIC " -CFLAGS="$CFLAGS -DNCURSES_STATIC " -export CXXFLAGS CPPFLAGS CFLAGS +export CPPFLAGS # now compile ourself echo "Compiling DOSBox-X" diff --git a/build-os2-sdl2.cmd b/build-os2-sdl2.cmd new file mode 100644 index 00000000000..93547cc34eb --- /dev/null +++ b/build-os2-sdl2.cmd @@ -0,0 +1,10 @@ +echo off +cd dosbox-x +bash autogen.sh +dash configure --enable-sdl2 --disable-gamelink +REM since cpu cores need a lot of memory, +REM we don't want to build parallel +cd src\cpu +make +cd ..\.. +make -j4 diff --git a/build-scripts/macosx/make-macosx-build.sh b/build-scripts/macosx/make-macosx-build.sh index bec1ebd295f..4664c805766 100755 --- a/build-scripts/macosx/make-macosx-build.sh +++ b/build-scripts/macosx/make-macosx-build.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # # Setup: # git clone https://github.com/joncampbell123/dosbox-x dosbox-x diff --git a/build-scripts/mingw/make-mingw-hx-dos.sh b/build-scripts/mingw/make-mingw-hx-dos.sh index d88db30f863..4e1cfb2df61 100755 --- a/build-scripts/mingw/make-mingw-hx-dos.sh +++ b/build-scripts/mingw/make-mingw-hx-dos.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # # Setup: # git clone https://github.com/joncampbell123/dosbox-x dosbox-x-mingw-hx-dos @@ -22,7 +22,7 @@ sleep 1 # # MinGW and MinGW32 will have MSYSTEM=MINGW32 # MinGW64 will have MSYSTEM=MINGW64. -if [[ x"${MSYSTEM}" != x"MINGW32" ]]; then +if [ x"${MSYSTEM}" != x"MINGW32" ]; then echo "MinGW (not MinGW 64-bit) shell environment required" exit 1 fi diff --git a/build-scripts/mingw/make-mingw.sh b/build-scripts/mingw/make-mingw.sh index 0c220df9691..40f623e0d3c 100755 --- a/build-scripts/mingw/make-mingw.sh +++ b/build-scripts/mingw/make-mingw.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # # Setup: # git clone https://github.com/joncampbell123/dosbox-x dosbox-x-mingw @@ -9,9 +9,9 @@ # # MinGW and MinGW32 will have MSYSTEM=MINGW32 # MinGW64 will have MSYSTEM=MINGW64. -if [[ "${MSYSTEM}" == "MINGW32" ]]; then +if [ "${MSYSTEM}" = "MINGW32" ]; then cputype=win32 -elif [[ "${MSYSTEM}" == "MINGW64" ]]; then +elif [ "${MSYSTEM}" = "MINGW64" ]; then cputype=win64 else echo "MinGW32/MINGW64 (not MinGW) shell environment required" @@ -59,7 +59,7 @@ cp src/dosbox-x.exe "$buildtarget/dosbox-x.exe" || exit 1 cp CHANGELOG "$buildtarget/CHANGELOG.txt" || exit 1 cp dosbox-x.reference.conf "$buildtarget/dosbox-x.reference.conf" || exit 1 cp dosbox-x.reference.full.conf "$buildtarget/dosbox-x.reference.full.conf" || exit 1 -if [[ "${MSYSTEM}" == "MINGW32" ]]; then +if [ "${MSYSTEM}" = "MINGW32" ]; then cp contrib/windows/installer/inpout32.dll "${buildtarget}/inpout32.dll" || exit 1 else cp contrib/windows/installer/inpoutx64.dll "${buildtarget}/inpoutx64.dll" || exit 1 diff --git a/configure.ac b/configure.ac index ae96cd6308a..3f7b8d49b43 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,7 @@ dnl Init. -AC_INIT(dosbox-x,2025.02.01,[https://github.com/joncampbell123/dosbox-x/issues],[],[https://dosbox-x.com]) +AC_INIT(dosbox-x,2026.05.02,[https://github.com/joncampbell123/dosbox-x/issues],[],[https://dosbox-x.com]) +COPYRIGHT_YEAR=`echo $PACKAGE_VERSION | cut -c1-4` +AC_SUBST([COPYRIGHT_YEAR]) AC_PREREQ(2.60) AC_CONFIG_SRCDIR(README.md) @@ -31,6 +33,29 @@ AC_CHECK_HEADER(d3dx9math.h, have_d3dx9math_h=yes , have_d3dx9math_h=no , ) dnl Utility function ============================ +# AC_CHECK_CFLAGS(ADDITIONAL-CFLAGS, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND) +# +# checks whether the $(CC) (C compiler) accepts the ADDITIONAL-CFLAGS +# if so, they are added to the CFLAGS +AC_DEFUN([AC_CHECK_CFLAGS], +[ + AC_MSG_CHECKING([whether $CC accepts "$1"]) +cat > conftest.c << EOF +int main(void){ + return 0; +} +EOF +if $CC $CPPFLAGS $CFLAGS -Werror -c -o conftest.o conftest.c [$1] > /dev/null 2>&1 +then + AC_MSG_RESULT([yes]) + CFLAGS="${CFLAGS} [$1]" + [$2] +else + AC_MSG_RESULT([no]) + [$3] +fi +])# AC_CHECK_CFLAGS + # AC_CHECK_CXXFLAGS(ADDITIONAL-CXXFLAGS, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND) # # checks whether the $(CXX) (c++) compiler accepts the ADDITIONAL-CXXFLAGS @@ -47,7 +72,8 @@ if $CXX $CPPFLAGS $CXXFLAGS -Werror -c -o conftest.o conftest.c++ [$1] > /dev/nu then AC_MSG_RESULT([yes]) CXXFLAGS="${CXXFLAGS} [$1]" - AC_CHECK_CPPFLAGS([$1]) + dnl AC_CHECK_CPPFLAGS([$1]) #CXXFLAGS should not be included in CPPFLAGS + AC_CHECK_CFLAGS([$1]) #add CFLAGS if accepts as well [$2] else AC_MSG_RESULT([no]) @@ -55,12 +81,75 @@ else fi ])# AC_CHECK_CXXFLAGS +dnl Detect Clang +AC_CACHE_CHECK([whether the compiler is clang], + [ac_cv_compiler_clang], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ +#ifndef __clang__ +#error not clang +#endif + ]], [])], + [ac_cv_compiler_clang=yes], + [ac_cv_compiler_clang=no])]) + +is_clang=$ac_cv_compiler_clang + dnl End Utility function ============================ + dnl Detect the canonical host and target build environment AC_CANONICAL_HOST AC_CANONICAL_BUILD +MACOSX_DEPLOYMENT_TARGET="10.15" +MACOSX_ARCH="ARM" + +case "$host_os" in + darwin*) + HOST_VERSION=`sw_vers -productVersion | cut -d. -f1,2` + major=`echo $HOST_VERSION | cut -d. -f1` + minor=`echo $HOST_VERSION | cut -d. -f2` + + version_num=`expr $major \* 100 + $minor` + + if test "$version_num" -lt 1015; then + MACOSX_DEPLOYMENT_TARGET="$HOST_VERSION" + else + MACOSX_DEPLOYMENT_TARGET="10.15" + fi + case "$host_cpu" in + x86_64) + MACOSX_ARCH="Intel" + ;; + arm64|aarch64) + MACOSX_ARCH="ARM" + ;; + *) + MACOSX_ARCH="Unknown" + ;; + esac + ;; + *) + echo "Not macOS, skipping version check" + ;; +esac + +AC_SUBST([MACOSX_DEPLOYMENT_TARGET]) +AC_SUBST([MACOSX_ARCH]) + +AC_MSG_CHECKING([for Git commit hash]) +COMMIT_HASH=`git rev-parse --short=7 HEAD 2>/dev/null || echo "unknown"` +AC_SUBST([COMMIT_HASH]) +AC_MSG_RESULT([$COMMIT_HASH]) + +GITBRANCH=`git rev-parse --abbrev-ref HEAD` +OSFREE=0 +AH_TEMPLATE(C_OSFREE,[Define to 1 to make an OSFREE version]) +if [[ x"$GITBRANCH" == x"main-osfree" ]]; then + AC_DEFINE(C_OSFREE,1,[Make an OSFREE build]) +fi + dnl Setup for automake AM_INIT_AUTOMAKE([foreign subdir-objects]) AC_CONFIG_HEADER(config.h) @@ -123,51 +212,24 @@ AC_CHECK_HEADERS([sys/socket.h netinet/in.h pwd.h], [], [], #endif ]) -dnl C++11 is deprecated in this codebase. -dnl C++14 is recommended at this time, will eventually become mandatory. +dnl C++14 is required. -dnl AC_CHECK_CXXFLAGS will prepend gnu++11 to CXXFLAGS if supported, for us. +dnl AC_CHECK_CXXFLAGS will prepend gnu++14 to CXXFLAGS if supported, for us. OLDCFLAGS="$CFLAGS" OLDCPPFLAGS="$CPPFLAGS" OLDCXXFLAGS="$CXXFLAGS" AC_MSG_CHECKING([checking for C++14 support]) -AC_CHECK_CXXFLAGS([ -std=gnu++14 ], [ ], [ - warn_cpp11=1 -]) +AC_CHECK_CXXFLAGS([ -std=gnu++14 ], [ ], + AC_MSG_ERROR([ Your compiler must support C++14 or better ]) +) CXXFLAGS="$OLDCXXFLAGS" CPPFLAGS="$OLDCPPFLAGS" CFLAGS="$OLDCFLAGS" -AC_MSG_CHECKING([checking for C++11 support]) -AC_CHECK_CXXFLAGS([ -std=gnu++11 ], [ ], [ - warn_cpp0x=1 -]) - -CXXFLAGS="$OLDCXXFLAGS" -CPPFLAGS="$OLDCPPFLAGS" -CFLAGS="$OLDCFLAGS" - -if test x$warn_cpp0x = x1; then - AC_MSG_ERROR([ Your compiler must support C++11 or better ]) -fi - -dnl Allow devs to force compile as C++11 as long as this code supports C++11 as a baseline -AC_ARG_ENABLE(force-cxx11,AC_HELP_STRING([--enable-force-cxx11],[Force compile as C++11]),force_cxx11=yes) - -if test x$warn_cpp11 = x1; then - AC_MSG_WARN([ Your compiler does not support C++14. Currently it is recommended. At some point in the future, it will be required ]) - CFLAGS="$CFLAGS -std=gnu11"; - CXXFLAGS="$CXXFLAGS -std=gnu++11"; -elif test x$force_cxx11 = xyes; then - CFLAGS="$CFLAGS -std=gnu11"; - CXXFLAGS="$CXXFLAGS -std=gnu++11"; -else - AC_MSG_WARN([ DOSBox-X is still intended to support compilation as C++11. If you add new code please make sure it works as C++11 by running ./configure with --enable-force-cxx11 ]) - CFLAGS="$CFLAGS -std=gnu11"; # no such "gnu14" - CXXFLAGS="$CXXFLAGS -std=gnu++14"; -fi +CFLAGS="$CFLAGS -std=gnu11"; # no such "gnu14" +CXXFLAGS="$CXXFLAGS -std=gnu++14"; dnl Allow the SDL drawn menu to be enabled on Windows or macOS instead of their native menu system. AH_TEMPLATE(C_FORCE_MENU_SDLDRAW,[Define to 1 to force SDL-drawn menus]) @@ -334,6 +396,15 @@ AC_CHECK_HEADER([sys/mman.h], [ AC_CHECK_FUNC([mmap],[AC_DEFINE(C_HAVE_MMAP,1)]) ]) +dnl Check for duktape +AH_TEMPLATE(C_HAVE_DUKTAPE,[Define to 1 if you have the DukTape ECMAScript library]) +AC_CHECK_HEADER([duktape.h], [ +AC_CHECK_LIB(duktape, duk_create_heap, [ +AC_DEFINE(C_HAVE_DUKTAPE,1) +HAVE_DUKTAPE=1 +]) +]) + dnl Check for realpath. Used on Linux AC_CHECK_FUNCS([realpath]) @@ -371,9 +442,11 @@ fi dnl Some needed libraries for OS2 dnl perhaps join this with the other target depended checks. move them upwards +AM_CONDITIONAL(OS2, test x$host = xi386-pc-os2-emx) if test x$host = xi386-pc-os2-emx ; then - CXXFLAGS="$CXXFLAGS -Zmt" - LDFLAGS="$LDFLAGS -Zomf -Zmt" + CXXFLAGS="$CXXFLAGS -DOS2 -march=pentium4 -idirafter /@unixroot/usr/include/os2tk45" + CFLAGS="$CFLAGS -DOS2 -march=pentium4 -idirafter /@unixroot/usr/include/os2tk45" + LDFLAGS="$LDFLAGS -Zomf -Zhigh-mem -lcx" fi dnl I would like to know of any concerns given by the C++ compiler. @@ -405,10 +478,12 @@ dnl other AC_CHECK_CXXFLAGS([ -Wno-missing-field-initializers ]) AC_CHECK_CXXFLAGS([ -Wno-format-zero-length ]) -dnl Clang/LLVM warning: don't care the address of a member may be unaligned, unless targeting ARM! -AC_CHECK_CXXFLAGS([ -Wno-address-of-packed-member ]) -dnl Clang/LLVM warning: don't care about int to void*, since void* is either same size or larger -AC_CHECK_CXXFLAGS([ -Wno-int-to-void-pointer-cast ]) +if test "x$is_clang" = xyes; then + dnl Clang/LLVM warning: don't care the address of a member may be unaligned, unless targeting ARM! + AC_CHECK_CXXFLAGS([ -Wno-address-of-packed-member ]) + dnl Clang/LLVM warning: don't care about int to void*, since void* is either same size or larger + AC_CHECK_CXXFLAGS([ -Wno-int-to-void-pointer-cast ]) +fi dnl Some stuff for the icon and other makefile platform stuff. dnl Slightly double with the above, but that deals more with compiled features. @@ -432,6 +507,22 @@ esac AM_CONDITIONAL(MACOSX, test "x$DBPLATFORM" = "xmac") AC_SUBST(WINDRES) +AC_ARG_ENABLE([sdl2], + [AS_HELP_STRING([--enable-sdl2],[Build DOSBox-X using SDL2])], + [enable_sdl2=yes], + [enable_sdl2=no] +) + +AC_ARG_ENABLE([sdl3], + [AS_HELP_STRING([--enable-sdl3],[Build DOSBox-X using SDL3])], + [enable_sdl3=yes], + [enable_sdl3=no] +) + +dnl LIBRARY TEST: SDL 3.x +SDL3_VERSION=3.5.0 +AM_PATH_SDL3($SDL3_VERSION) + dnl LIBRARY TEST: SDL 2.x SDL2_VERSION=2.0.5 AM_PATH_SDL2($SDL2_VERSION) @@ -441,35 +532,72 @@ SDL_VERSION=1.2.0 AM_PATH_SDL($SDL_VERSION) dnl LIBRARY USE: SDL selection -if test -n "$SDL2_LIBS"; then - LIBS="$LIBS $SDL2_LIBS" - CPPFLAGS="$CPPFLAGS $SDL2_CFLAGS" + +if test x"$enable_sdl3" = xyes; then + AC_MSG_NOTICE([--enable-sdl3 specified, trying SDL3]) + if test -n "$SDL3_LIBS"; then + SDL_STRING="SDL3" + LIBS="$LIBS $SDL3_LIBS" + CPPFLAGS="$CPPFLAGS $SDL3_CFLAGS" + AC_MSG_NOTICE([Building with SDL3]) + else + AC_MSG_ERROR([--enable-sdl3 was specified, but SDL3 was not found]) + fi +elif test x"$enable_sdl2" = xyes; then + AC_MSG_NOTICE([--enable-sdl2 specified, trying SDL2]) + if test -n "$SDL2_LIBS"; then + SDL_STRING="SDL2" + LIBS="$LIBS $SDL2_LIBS" + CPPFLAGS="$CPPFLAGS $SDL2_CFLAGS" + AC_MSG_NOTICE([Building with SDL2]) + else + AC_MSG_ERROR([--enable-sdl2 was specified, but SDL2 was not found]) + fi else - if test -n "$SDL_LIBS"; then - LIBS="$LIBS $SDL_LIBS" - CPPFLAGS="$CPPFLAGS $SDL_CFLAGS" - else - AC_MSG_ERROR([SDL 1.x or SDL 2.x is required to compile this program]) - fi + AC_MSG_CHECKING([for SDL1]) + + if test -n "$SDL_LIBS"; then + AC_MSG_RESULT([yes]) + SDL_STRING="SDL1" + LIBS="$LIBS $SDL_LIBS" + CPPFLAGS="$CPPFLAGS $SDL_CFLAGS" + + else + AC_MSG_RESULT([no]) + AC_MSG_NOTICE([SDL1 not found, falling back to SDL2]) + + AC_MSG_CHECKING([for SDL2]) + if test -n "$SDL2_LIBS"; then + AC_MSG_RESULT([yes]) + SDL_STRING="SDL2" + LIBS="$LIBS $SDL2_LIBS" + CPPFLAGS="$CPPFLAGS $SDL2_CFLAGS" + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([SDL 1.x or SDL 2.x is required to compile this program]) + fi + fi fi +AC_SUBST([SDL_STRING]) + AH_TEMPLATE(C_GAMELINK,[Define to 1 to enable game link headless mode]) AC_CHECK_LIB(rt, main, have_rt_lib=yes, have_rt_lib=no , ) AC_ARG_ENABLE(gamelink,AC_HELP_STRING([--disable-gamelink],[Disable headless game link output mode (only for SDL2)]),,enable_gamelink=yes) AC_MSG_CHECKING(whether gamelink is enabled) if test x$enable_gamelink = xyes; then - if test "x$SDL2_LIBS" = "x"; then - AC_MSG_RESULT(no (SDL2 missing)) - else + if test "x$SDL_STRING" = "xSDL2"; then AC_MSG_RESULT(yes) C_GAMELINK=1 AC_DEFINE(C_GAMELINK,1) + else + AC_MSG_RESULT(no (requires SDL2)) fi else AC_MSG_RESULT(no) fi -AM_CONDITIONAL([C_GAMELINK], [test "x$C_GAMELINK" = x1]) +AM_CONDITIONAL([C_GAMELINK], [test "x$C_GAMELINK" = x1]) dnl FEATURE: Whether to use OpenGL AH_TEMPLATE(C_OPENGL,[Define to 1 to use opengl display output support]) @@ -508,14 +636,54 @@ case "$host" in esac fi +dnl ========================================== +dnl Check for Metal support (macOS only) +dnl ========================================== + +AC_MSG_CHECKING([for Metal support]) + +have_metal=no + +case "$host_os" in + darwin*) + AC_LANG_PUSH([Objective C++]) + save_LIBS="$LIBS" + LIBS="$LIBS -framework Metal -framework QuartzCore" + + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[ + #import + ]], [[ + id device = MTLCreateSystemDefaultDevice(); + return (device == nil); + ]])], + [have_metal=yes], + [have_metal=no] + ) + + LIBS="$save_LIBS" + AC_LANG_POP + ;; +esac + +if test "x$have_metal" = "xyes"; then + AC_DEFINE([C_METAL], [1], [Define if Metal is available]) + METAL_LIBS="-framework Metal -framework QuartzCore" + AC_SUBST(METAL_LIBS) + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi +AM_CONDITIONAL([C_METAL], [test "x$have_metal" = "xyes"]) + # FIXME: Arrggh we need the WHOLE PATH pwd=`realpath $srcdir` if [[ -z "$pwd" ]]; then pwd=`pwd`; fi -CFLAGS="$CFLAGS -I$pwd -I$pwd/vs/sdlnet/linux-host/include -I$pwd/vs/sdlnet/linux-host/include/SDL" +#CFLAGS="$CFLAGS -I$pwd -I$pwd/vs/sdlnet/linux-host/include -I$pwd/vs/sdlnet/linux-host/include/SDL" LDFLAGS="$LDFLAGS -L$pwd/vs/sdlnet/linux-host/lib" CPPFLAGS="$CPPFLAGS -I$pwd -I$pwd/vs/sdlnet/linux-host/include -I$pwd/vs/sdlnet/linux-host/include/SDL" -CXXFLAGS="$CXXFLAGS -I$pwd -I$pwd/vs/sdlnet/linux-host/include -I$pwd/vs/sdlnet/linux-host/include/SDL" +#CXXFLAGS="$CXXFLAGS -I$pwd -I$pwd/vs/sdlnet/linux-host/include -I$pwd/vs/sdlnet/linux-host/include/SDL" if test x$enable_emscripten != xyes; then dnl Some target detection and actions for them @@ -534,13 +702,9 @@ case "$host" in dnl to do more to distinguish them. dnl For now I am lazy and do not add proper detection code. macosx=1 - if test x$warn_cpp11 = x1; then - OBJCXXFLAGS="$OBJCXXFLAGS -std=gnu++14"; - else - OBJCXXFLAGS="$OBJCXXFLAGS -std=gnu++11"; - fi + OBJCXXFLAGS="$OBJCXXFLAGS -std=gnu++14"; AC_DEFINE(MACOSX, 1, [Compiling on Mac OS X]) - LIBS="$LIBS -framework Carbon -framework CoreFoundation -framework CoreMIDI -framework AudioUnit -framework AudioToolbox -framework ApplicationServices -framework AppKit -framework IOKit" + LIBS="$LIBS -framework Carbon -framework CoreFoundation -framework CoreMIDI -framework AudioUnit -framework AudioToolbox -framework ApplicationServices -framework AppKit -framework IOKit " dnl FEATURE: Whether to support direct serial port pass-through AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) ;; @@ -575,6 +739,10 @@ case "$host" in AC_DEFINE(OS2, 1, [Compiling on OS/2 EMX]) dnl FEATURE: Whether to support direct serial port pass-through AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial pass-through support (Win32, Posix and OS/2).]) + dnl If we have SDL2, we need to link the multimedia extensions. + if test "x$SDL_STRING" = "xSDL2"; then + LIBS="$LIBS -lmmpm2" + fi ;; *-*-riscos*) AC_DEFINE(RISCOS, 1, [Compiling on RISC OS]) @@ -606,6 +774,7 @@ esac fi AM_CONDITIONAL(MACOSX, test x"$macosx" = x"1") +AM_CONDITIONAL(DUKTAPE, test x"$HAVE_DUKTAPE" = x"1") AM_CONDITIONAL(EMSCRIPTEN, test x"$enable_emscripten" = x"yes") dnl The target cpu checks for dynamic cores @@ -730,10 +899,43 @@ size_t iconv(iconv_t, const char **restrict, size_t *restrict, char **restrict, ])], AC_DEFINE(ICONV_CONST_CHAR, 1) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) AH_TEMPLATE(ICONV_CONST_CHAR,[Whether iconv uses const char**]) -dnl LIBRARY TEST: SDLnet -AC_CHECK_HEADER(SDL_net.h,have_sdl_net_h=yes,) -AC_CHECK_LIB(SDL2_net, SDLNet_Init, have_sdl2_net_lib=yes, , ) -AC_CHECK_LIB(SDL_net, SDLNet_Init, have_sdl_net_lib=yes, , ) +dnl Determine networking library +case "$host" in + *-*-cygwin* | *-*-mingw*) + SDLNETLIB="-lws2_32 -liphlpapi" + ;; + sparc*-*-solaris*) + SDLNETLIB="-lsocket -lnsl" + ;; + *-*-qnx*) + SDLNETLIB="-lsocket" + ;; + *-*-haiku*) + SDLNETLIB="-lnetwork" + ;; + *) + SDLNETLIB="" + ;; +esac + +have_sdl_net_h=no +have_sdl_net_lib=no + +AC_CHECK_HEADERS([SDL_net.h], [have_sdl_net_h=yes]) +AC_CHECK_LIB([SDL_net], [SDLNet_Init], [have_sdl_net_lib=yes],,[$SDLNETLIB]) + +dnl Check SDL2_net using headers + library first +have_sdl2_net_h=no +have_sdl2_net_lib=no + +if test "x$SDL_STRING" = "xSDL2"; then + AC_CHECK_HEADERS([SDL2/SDL_net.h], [have_sdl2_net_h=yes]) + AC_CHECK_LIB([SDL2_net], [SDLNet_Init], [have_sdl2_net_lib=yes], [have_sdl2_net_lib=no],[$SDLNETLIB]) +fi + +if test x$enable_hx = xyes; then + SDLNETLIB="" +fi AC_COMPILE_IFELSE([AC_LANG_SOURCE([ #include @@ -1047,47 +1249,26 @@ fi dnl FEATURE: Whether to support SDL net, and emulate modem and IPX connections AH_TEMPLATE(C_SDL_NET,[Indicate whether SDL_net is present]) +AH_TEMPLATE(C_SDL2_NET,[Indicate whether SDL2_net is present]) AH_TEMPLATE(C_MODEM,[Define to 1 to enable internal modem support, requires SDL_net]) AH_TEMPLATE(C_IPX,[Define to 1 to enable IPX over Internet networking, requires SDL_net]) -case "$host" in - *-*-cygwin* | *-*-mingw32*) - if test x$have_sdl_net_h = xyes; then - have_sdl_net_lib=yes - fi - ;; -esac -dnl enable SDL2 net if SDL2 -if test -n "$SDL2_LIBS"; then - if test x$disable_sdl_net = xyes ; then +if test x$disable_sdl_net = xyes ; then AC_MSG_WARN([SDL_net is disabled in parameters]) - elif test x$have_sdl2_net_lib = xyes -a x$have_sdl_net_h = xyes ; then - LIBS="$LIBS -lSDL2_net" - AC_DEFINE(C_SDL_NET,1) +elif test x$have_sdl2_net_lib = xyes ; then + AC_DEFINE(C_SDL2_NET,1) AC_DEFINE(C_MODEM,1) AC_DEFINE(C_IPX,1) - have_sdl_net=yes - elif test x$have_sdl_net_lib = xyes -a x$have_sdl_net_h = xyes ; then - LIBS="$LIBS -lSDL_net" + LIBS="$LIBS -lSDL2_net $SDLNETLIB" + AC_MSG_NOTICE([Using SDL2_net (SDL2): internal modem and IPX enabled]) +elif test x$have_sdl_net_lib = xyes ; then AC_DEFINE(C_SDL_NET,1) AC_DEFINE(C_MODEM,1) AC_DEFINE(C_IPX,1) - have_sdl_net=yes - else - AC_MSG_WARN([Can't find SDL_net, internal modem and ipx disabled]) - fi + LIBS="$LIBS -lSDL_net $SDLNETLIB" + AC_MSG_NOTICE([Using SDL_net (SDL1): internal modem and IPX enabled]) else - if test x$disable_sdl_net = xyes ; then - AC_MSG_WARN([SDL_net is disabled in parameters]) - elif test x$have_sdl_net_lib = xyes -a x$have_sdl_net_h = xyes ; then - LIBS="$LIBS -lSDL_net" - AC_DEFINE(C_SDL_NET,1) - AC_DEFINE(C_MODEM,1) - AC_DEFINE(C_IPX,1) - have_sdl_net=yes - else - AC_MSG_WARN([Can't find SDL_net, internal modem and ipx disabled]) - fi + AC_MSG_WARN([Can't find SDL_net or SDL2_net, internal modem and IPX disabled]) fi dnl FEATURE: Whether to support libz, and enable snapshots @@ -1271,6 +1452,34 @@ fi AM_CONDITIONAL(C_DIRECT3D, test x"$do_d3d" = x"1") +if test "x$SDL_STRING" = "xSDL2"; then +dnl FEATURE: Direct3D11 support on Windows +AC_MSG_CHECKING([for D3D11 support]) + +AC_LANG_PUSH([C++]) + +AC_CHECK_HEADERS([d3d11.h dxgi.h], [have_d3d11_h=yes], [have_d3d11_h=no]) +AC_CHECK_HEADERS([d3dcompiler.h], [have_d3dcompiler_h=yes], [have_d3dcompiler_h=no]) + +D3D11_LIBS="" + +if test "x$have_d3d11_h" = "xyes"; then + LIBS="$LIBS -ld3d11 -ldxgi" + AC_DEFINE([C_DIRECT3D], [1], [Define if D3D11 is available]) + AC_MSG_RESULT([D3D11 support detected]) +else + AC_MSG_RESULT([D3D11 support not found]) +fi + +if test "x$have_d3d11_h" = "xyes" -a "x$have_d3dcompiler_h" = "xyes"; then + LIBS="$LIBS -ld3dcompiler_47" +else + AC_MSG_RESULT([D3D compiler not found]) +fi + +AC_LANG_POP([C++]) +fi + AH_TEMPLATE(C_ICONV,[Define to 1 to use iconv]) if test x$have_iconv_h = xyes; then AC_DEFINE(C_ICONV,1) diff --git a/contrib/fonts/UnifontExMono-16.bdf b/contrib/fonts/UnifontExMono-16.bdf new file mode 100644 index 00000000000..bceb6aec9f8 --- /dev/null +++ b/contrib/fonts/UnifontExMono-16.bdf @@ -0,0 +1,1221679 @@ +STARTFONT 2.2 +FONT -FontForge-UnifontExMono-MediumMono-R-Normal--16-150-75-75-P-143-ISO10646-1 +SIZE 15 75 75 +FONTBOUNDINGBOX 32 16 -16 -2 +METRICSSET 2 +SWIDTH 1000 0 +DWIDTH 16 0 +SWIDTH1 1000 0 +DWIDTH1 16 0 +VVECTOR 8,14 +COMMENT "Generated by fontforge, http://fontforge.sourceforge.net" +COMMENT "Copyright (c) 1998-2023 Roman Czyborra, Paul Hardy, Qianqian Fang, Andrew Miller, Johnnie Weaver, David Corbett, Nils Moskopp, Rebecca Bettencourt, Minseo Lee, stgiga, et al." +STARTPROPERTIES 41 +FOUNDRY "FontForge" +FAMILY_NAME "UnifontExMono" +WEIGHT_NAME "MediumMono" +SLANT "R" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE 16 +POINT_SIZE 150 +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "M" +AVERAGE_WIDTH 143 +CHARSET_REGISTRY "ISO10646" +CHARSET_ENCODING "1" +FONTNAME_REGISTRY "" +CHARSET_COLLECTIONS "ASCII ISOLatin1Encoding ISO8859-2 ISO8859-5 ISO8859-7 ISO8859-9 ISO8859-8 ISO8859-6 ISO8859-4 ISO8859-11 JISX0208.1997 GB2312.1980 KSC5601.1992 BIG5 ISO10646-1" +FONT_NAME "UnifontExMono" +FACE_NAME "UnifontExMono" +COPYRIGHT "Copyright (c) 1998-2023 Roman Czyborra, Paul Hardy, Qianqian Fang, Andrew Miller, Johnnie Weaver, David Corbett, Nils Moskopp, Rebecca Bettencourt, Minseo Lee, stgiga, et al." +FONT_VERSION "15.0.06" +FONT_ASCENT 14 +FONT_DESCENT 2 +UNDERLINE_POSITION -2 +UNDERLINE_THICKNESS 1 +X_HEIGHT 7 +CAP_HEIGHT 9 +DEFAULT_CHAR 3 +RAW_ASCENT 875 +RAW_DESCENT 125 +NORM_SPACE 8 +RELATIVE_WEIGHT 50 +RELATIVE_SETWIDTH 50 +SUPERSCRIPT_X 0 +SUPERSCRIPT_Y 7 +SUPERSCRIPT_SIZE 11 +SUBSCRIPT_X 0 +SUBSCRIPT_Y 2 +SUBSCRIPT_SIZE 11 +FIGURE_WIDTH 8 +AVG_LOWERCASE_WIDTH 92 +AVG_UPPERCASE_WIDTH 97 +ENDPROPERTIES +CHARS 65439 +STARTCHAR uni0000 +ENCODING 0 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +4A51 +EA50 +5A51 +C99E +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0001 +ENCODING 1 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +3993 +C252 +325F +8A52 +7193 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0002 +ENCODING 2 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +3BA5 +C124 +3119 +8924 +7125 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0003 +ENCODING 3 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +7BA5 +C124 +7919 +C124 +7925 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0004 +ENCODING 4 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +79BF +C248 +7A49 +C248 +7989 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0005 +ENCODING 5 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +7A4D +C252 +7B53 +C2D6 +7A4F +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0006 +ENCODING 6 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +31A5 +CA28 +7A31 +CA28 +49A5 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0007 +ENCODING 7 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +73D1 +CA10 +73D1 +CA10 +73DF +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0008 +ENCODING 8 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +1E39 +9140 +1E31 +9108 +1E71 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0009 +ENCODING 9 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +22F9 +A220 +3E21 +A220 +2221 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni000A +ENCODING 10 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +20F9 +A080 +20F9 +A080 +3E81 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni000B +ENCODING 11 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +22F9 +A220 +2221 +9420 +0821 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni000C +ENCODING 12 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +3EF9 +A080 +3EF9 +A080 +2081 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni000D +ENCODING 13 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +1EF1 +A088 +20F1 +A090 +1E89 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni000E +ENCODING 14 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +1E71 +A088 +1C89 +8288 +3C71 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni000F +ENCODING 15 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +1EF9 +A020 +1C21 +8220 +3CF9 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0010 +ENCODING 16 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +391D +A510 +251D +A510 +39DD +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0011 +ENCODING 17 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +7189 +CA18 +4A09 +CA08 +719D +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0012 +ENCODING 18 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +7199 +CA04 +4A09 +CA10 +719D +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0013 +ENCODING 19 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +7199 +CA04 +4A19 +CA04 +7199 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0014 +ENCODING 20 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +7185 +CA0C +4A15 +CA1C +7185 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0015 +ENCODING 21 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +4993 +EA54 +6A59 +DBD4 +4A53 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0016 +ENCODING 22 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +3453 +C29A +3117 +8912 +7113 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0017 +ENCODING 23 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +7BB9 +C124 +7939 +C124 +7939 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0018 +ENCODING 24 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +3325 +C4B4 +47AD +C4A4 +34A5 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0019 +ENCODING 25 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +3E89 +A0D8 +3EA9 +A088 +3E89 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni001A +ENCODING 26 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +3A5D +C252 +325D +8A52 +719D +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni001B +ENCODING 27 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +79CF +C210 +7991 +C050 +7B8F +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni001C +ENCODING 28 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +1E71 +9080 +1E61 +9010 +10E1 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni001D +ENCODING 29 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0E71 +9080 +1661 +9210 +0EE1 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni001E +ENCODING 30 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +1C71 +9280 +1C61 +9410 +12E1 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni001F +ENCODING 31 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +1271 +9280 +1261 +9210 +0CE1 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0020 +ENCODING 32 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni0021 +ENCODING 33 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +00 +80 +80 +ENDCHAR +STARTCHAR uni0022 +ENCODING 34 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 2 8 +BITMAP +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni0023 +ENCODING 35 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +24 +24 +24 +FC +48 +48 +FC +90 +90 +90 +ENDCHAR +STARTCHAR uni0024 +ENCODING 36 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +7C +92 +90 +70 +1C +12 +92 +7C +10 +ENDCHAR +STARTCHAR uni0025 +ENCODING 37 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +62 +94 +94 +68 +10 +10 +2C +52 +52 +8C +ENDCHAR +STARTCHAR uni0026 +ENCODING 38 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +44 +28 +30 +52 +8A +84 +8C +72 +ENDCHAR +STARTCHAR uni0027 +ENCODING 39 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 4 4 8 +BITMAP +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0028 +ENCODING 40 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 3 -1 +BITMAP +20 +40 +40 +80 +80 +80 +80 +80 +80 +40 +40 +20 +ENDCHAR +STARTCHAR uni0029 +ENCODING 41 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 2 -1 +BITMAP +80 +40 +40 +20 +20 +20 +20 +20 +20 +40 +40 +80 +ENDCHAR +STARTCHAR uni002A +ENCODING 42 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +10 +92 +54 +38 +54 +92 +10 +ENDCHAR +STARTCHAR uni002B +ENCODING 43 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +10 +10 +10 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni002C +ENCODING 44 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 -2 +BITMAP +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uni002D +ENCODING 45 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 1 2 4 +BITMAP +F0 +ENDCHAR +STARTCHAR uni002E +ENCODING 46 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 0 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni002F +ENCODING 47 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +08 +10 +10 +20 +20 +40 +80 +80 +ENDCHAR +STARTCHAR uni0030 +ENCODING 48 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +8C +94 +A4 +C4 +84 +48 +30 +ENDCHAR +STARTCHAR uni0031 +ENCODING 49 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +60 +A0 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni0032 +ENCODING 50 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +18 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni0033 +ENCODING 51 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +38 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0034 +ENCODING 52 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +18 +28 +48 +88 +88 +FC +08 +08 +08 +ENDCHAR +STARTCHAR uni0035 +ENCODING 53 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni0036 +ENCODING 54 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +40 +80 +80 +F8 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0037 +ENCODING 55 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +08 +08 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0038 +ENCODING 56 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +78 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0039 +ENCODING 57 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +7C +04 +04 +04 +08 +70 +ENDCHAR +STARTCHAR uni003A +ENCODING 58 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 7 3 1 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni003B +ENCODING 59 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 9 3 -1 +BITMAP +C0 +C0 +00 +00 +00 +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uni003C +ENCODING 60 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +08 +10 +20 +40 +80 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni003D +ENCODING 61 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +FC +00 +00 +00 +FC +ENDCHAR +STARTCHAR uni003E +ENCODING 62 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +40 +20 +10 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni003F +ENCODING 63 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +08 +10 +10 +00 +10 +10 +ENDCHAR +STARTCHAR uni0040 +ENCODING 64 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +94 +AC +A4 +A4 +A4 +9C +40 +3C +ENDCHAR +STARTCHAR uni0041 +ENCODING 65 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0042 +ENCODING 66 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +84 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni0043 +ENCODING 67 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0044 +ENCODING 68 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +88 +84 +84 +84 +84 +84 +84 +88 +F0 +ENDCHAR +STARTCHAR uni0045 +ENCODING 69 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni0046 +ENCODING 70 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0047 +ENCODING 71 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +9C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0048 +ENCODING 72 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0049 +ENCODING 73 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni004A +ENCODING 74 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3E +08 +08 +08 +08 +08 +08 +88 +88 +70 +ENDCHAR +STARTCHAR uni004B +ENCODING 75 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni004C +ENCODING 76 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni004D +ENCODING 77 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +CC +CC +B4 +B4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni004E +ENCODING 78 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +ENDCHAR +STARTCHAR uni004F +ENCODING 79 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0050 +ENCODING 80 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0051 +ENCODING 81 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +78 +84 +84 +84 +84 +84 +84 +B4 +CC +78 +06 +ENDCHAR +STARTCHAR uni0052 +ENCODING 82 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +90 +88 +88 +84 +84 +ENDCHAR +STARTCHAR uni0053 +ENCODING 83 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0054 +ENCODING 84 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0055 +ENCODING 85 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0056 +ENCODING 86 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +44 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni0057 +ENCODING 87 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +B4 +B4 +CC +CC +84 +84 +ENDCHAR +STARTCHAR uni0058 +ENCODING 88 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +48 +48 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni0059 +ENCODING 89 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni005A +ENCODING 90 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni005B +ENCODING 91 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 4 -1 +BITMAP +E0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +E0 +ENDCHAR +STARTCHAR uni005C +ENCODING 92 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +40 +20 +20 +10 +10 +08 +04 +04 +ENDCHAR +STARTCHAR uni005D +ENCODING 93 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 1 -1 +BITMAP +E0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +E0 +ENDCHAR +STARTCHAR uni005E +ENCODING 94 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 9 +BITMAP +30 +48 +84 +ENDCHAR +STARTCHAR uni005F +ENCODING 95 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 1 1 -1 +BITMAP +FE +ENDCHAR +STARTCHAR uni0060 +ENCODING 96 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 10 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni0061 +ENCODING 97 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0062 +ENCODING 98 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +C4 +B8 +ENDCHAR +STARTCHAR uni0063 +ENCODING 99 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0064 +ENCODING 100 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +04 +04 +74 +8C +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0065 +ENCODING 101 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0066 +ENCODING 102 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +18 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0067 +ENCODING 103 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +04 +74 +88 +88 +88 +70 +40 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni0068 +ENCODING 104 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0069 +ENCODING 105 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +20 +20 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni006A +ENCODING 106 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 -2 +BITMAP +08 +08 +00 +18 +08 +08 +08 +08 +08 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni006B +ENCODING 107 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +80 +80 +88 +90 +A0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni006C +ENCODING 108 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +60 +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni006D +ENCODING 109 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +EC +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni006E +ENCODING 110 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni006F +ENCODING 111 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0070 +ENCODING 112 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni0071 +ENCODING 113 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +74 +8C +84 +84 +84 +84 +8C +74 +04 +04 +ENDCHAR +STARTCHAR uni0072 +ENCODING 114 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +B8 +C4 +84 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0073 +ENCODING 115 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uni0074 +ENCODING 116 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +F8 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni0075 +ENCODING 117 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0076 +ENCODING 118 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +48 +48 +48 +30 +30 +ENDCHAR +STARTCHAR uni0077 +ENCODING 119 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni0078 +ENCODING 120 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +48 +30 +30 +48 +84 +84 +ENDCHAR +STARTCHAR uni0079 +ENCODING 121 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uni007A +ENCODING 122 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +04 +08 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni007B +ENCODING 123 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 -2 +BITMAP +30 +40 +40 +20 +20 +40 +80 +40 +20 +20 +40 +40 +30 +ENDCHAR +STARTCHAR uni007C +ENCODING 124 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 14 4 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni007D +ENCODING 125 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 -2 +BITMAP +C0 +20 +20 +40 +40 +20 +10 +20 +40 +40 +20 +20 +C0 +ENDCHAR +STARTCHAR uni007E +ENCODING 126 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 8 +BITMAP +62 +92 +8C +ENDCHAR +STARTCHAR uni007F +ENCODING 127 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +73D1 +CA10 +4BD1 +CA10 +73DF +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0080 +ENCODING 128 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +719D +CA52 +73D3 +C252 +425D +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0081 +ENCODING 129 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +499D +CA52 +7A5D +CA50 +4991 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0082 +ENCODING 130 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +7393 +CA52 +739F +CA12 +7213 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0083 +ENCODING 131 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +4B93 +EA52 +5B9F +CA52 +4B93 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0084 +ENCODING 132 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +74B9 +A6A4 +25A5 +A4A4 +74B9 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0085 +ENCODING 133 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +4BD1 +EA10 +5BD1 +CA10 +4BDF +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0086 +ENCODING 134 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +39CD +C212 +319F +8852 +7393 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0087 +ENCODING 135 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +79CD +C212 +799F +C052 +7B93 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0088 +ENCODING 136 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +4B9D +C920 +7919 +C904 +4939 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0089 +ENCODING 137 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +25DD +A484 +3C85 +A484 +2499 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni008A +ENCODING 138 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +45CD +C490 +4489 +A884 +1099 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni008B +ENCODING 139 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +721D +CA12 +7213 +C212 +43DD +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni008C +ENCODING 140 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +7213 +CA12 +7213 +C212 +43CD +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni008D +ENCODING 141 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0E21 +8920 +0E21 +8A20 +0921 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni008E +ENCODING 142 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +39DD +C202 +318D +8850 +739F +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni008F +ENCODING 143 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +39DD +C202 +318D +8842 +739D +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0090 +ENCODING 144 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +71CF +CA10 +4A0D +CA02 +71DD +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0091 +ENCODING 145 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +7245 +CA4C +7245 +C244 +418F +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0092 +ENCODING 146 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +725D +CA42 +724D +C250 +419F +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0093 +ENCODING 147 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +3B9D +C120 +3119 +8904 +7139 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0094 +ENCODING 148 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +39D3 +C212 +421F +C212 +39D3 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0095 +ENCODING 149 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +2289 +B688 +2AA9 +A2D8 +2289 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0096 +ENCODING 150 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +3B8D +C252 +339F +8A12 +7213 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0097 +ENCODING 151 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +7B8D +C252 +7B9F +C212 +7A13 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0098 +ENCODING 152 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +398F +C250 +324D +8A42 +719D +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0099 +ENCODING 153 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +339B +C422 +25A3 +94A2 +639B +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni009A +ENCODING 154 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +39DD +C208 +3209 +8A08 +71DD +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni009B +ENCODING 155 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +39DD +C208 +4189 +C048 +3B9D +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni009C +ENCODING 156 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0EF9 +9020 +0C21 +8220 +1C21 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni009D +ENCODING 157 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +31CF +CA10 +4991 +C850 +338F +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni009E +ENCODING 158 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +1C89 +92D8 +1CA9 +9088 +1089 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni009F +ENCODING 159 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +338F +CA50 +7B91 +CA10 +4A0F +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni00A0 +ENCODING 160 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni00A1 +ENCODING 161 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +00 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni00A2 +ENCODING 162 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +7C +92 +90 +90 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni00A3 +ENCODING 163 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +1C +20 +20 +20 +F8 +20 +20 +20 +7C +C2 +ENDCHAR +STARTCHAR uni00A4 +ENCODING 164 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 1 +BITMAP +84 +78 +48 +84 +84 +48 +78 +84 +ENDCHAR +STARTCHAR uni00A5 +ENCODING 165 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +44 +28 +10 +FE +10 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni00A6 +ENCODING 166 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +80 +80 +00 +00 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni00A7 +ENCODING 167 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +80 +78 +84 +84 +78 +04 +84 +78 +ENDCHAR +STARTCHAR uni00A8 +ENCODING 168 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 12 +BITMAP +90 +90 +ENDCHAR +STARTCHAR uni00A9 +ENCODING 169 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3C +42 +99 +A5 +A1 +A1 +A5 +99 +42 +3C +ENDCHAR +STARTCHAR uni00AA +ENCODING 170 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 5 +BITMAP +70 +08 +78 +88 +78 +00 +F8 +ENDCHAR +STARTCHAR uni00AB +ENCODING 171 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +24 +24 +48 +48 +90 +48 +48 +24 +24 +ENDCHAR +STARTCHAR uni00AC +ENCODING 172 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 0 +BITMAP +FC +04 +04 +04 +ENDCHAR +STARTCHAR uni00AD +ENCODING 173 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +3A63 +C254 +33C9 +8A48 +7249 +8000 +0001 +8000 +03C1 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni00AE +ENCODING 174 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3C +42 +B9 +A5 +A5 +B9 +A9 +A5 +42 +3C +ENDCHAR +STARTCHAR uni00AF +ENCODING 175 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 1 1 11 +BITMAP +FC +ENDCHAR +STARTCHAR uni00B0 +ENCODING 176 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 6 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni00B1 +ENCODING 177 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 1 +BITMAP +10 +10 +10 +FE +10 +10 +10 +00 +FE +ENDCHAR +STARTCHAR uni00B2 +ENCODING 178 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +70 +88 +08 +30 +40 +80 +F8 +ENDCHAR +STARTCHAR uni00B3 +ENCODING 179 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +70 +88 +08 +70 +08 +88 +70 +ENDCHAR +STARTCHAR uni00B4 +ENCODING 180 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 3 10 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni00B5 +ENCODING 181 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +42 +42 +42 +42 +42 +42 +66 +59 +40 +80 +ENDCHAR +STARTCHAR uni00B6 +ENCODING 182 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +7E +F4 +F4 +F4 +74 +14 +14 +14 +14 +14 +14 +ENDCHAR +STARTCHAR uni00B7 +ENCODING 183 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 4 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni00B8 +ENCODING 184 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 2 2 -2 +BITMAP +20 +C0 +ENDCHAR +STARTCHAR uni00B9 +ENCODING 185 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +20 +60 +A0 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni00BA +ENCODING 186 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 5 +BITMAP +70 +88 +88 +88 +70 +00 +F8 +ENDCHAR +STARTCHAR uni00BB +ENCODING 187 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +90 +90 +48 +48 +24 +48 +48 +90 +90 +ENDCHAR +STARTCHAR uni00BC +ENCODING 188 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +44 +C4 +48 +50 +50 +24 +2C +54 +9C +84 +ENDCHAR +STARTCHAR uni00BD +ENCODING 189 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +44 +C4 +48 +50 +50 +28 +34 +44 +88 +9C +ENDCHAR +STARTCHAR uni00BE +ENCODING 190 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C4 +24 +48 +30 +D0 +24 +2C +54 +9C +84 +ENDCHAR +STARTCHAR uni00BF +ENCODING 191 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +20 +00 +20 +20 +40 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni00C0 +ENCODING 192 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +60 +18 +00 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni00C1 +ENCODING 193 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni00C2 +ENCODING 194 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +00 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni00C3 +ENCODING 195 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +00 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni00C4 +ENCODING 196 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni00C5 +ENCODING 197 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +30 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni00C6 +ENCODING 198 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3E +50 +90 +90 +FE +90 +90 +90 +90 +9E +ENDCHAR +STARTCHAR uni00C7 +ENCODING 199 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +10 +60 +ENDCHAR +STARTCHAR uni00C8 +ENCODING 200 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +60 +18 +00 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni00C9 +ENCODING 201 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni00CA +ENCODING 202 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +00 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni00CB +ENCODING 203 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni00CC +ENCODING 204 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +60 +18 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni00CD +ENCODING 205 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +30 +C0 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni00CE +ENCODING 206 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +60 +90 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni00CF +ENCODING 207 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +90 +90 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni00D0 +ENCODING 208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +78 +44 +42 +42 +F2 +42 +42 +42 +44 +78 +ENDCHAR +STARTCHAR uni00D1 +ENCODING 209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +00 +00 +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +ENDCHAR +STARTCHAR uni00D2 +ENCODING 210 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +60 +18 +00 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00D3 +ENCODING 211 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00D4 +ENCODING 212 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +00 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00D5 +ENCODING 213 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +00 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00D6 +ENCODING 214 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00D7 +ENCODING 215 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +84 +48 +30 +48 +84 +ENDCHAR +STARTCHAR uni00D8 +ENCODING 216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +04 +74 +88 +8C +94 +94 +A4 +A4 +C4 +44 +B8 +80 +ENDCHAR +STARTCHAR uni00D9 +ENCODING 217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +60 +18 +00 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00DA +ENCODING 218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00DB +ENCODING 219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +00 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00DC +ENCODING 220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00DD +ENCODING 221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +18 +60 +00 +00 +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni00DE +ENCODING 222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +80 +F0 +88 +84 +84 +88 +F0 +80 +80 +80 +ENDCHAR +STARTCHAR uni00DF +ENCODING 223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +88 +90 +B0 +88 +84 +84 +A4 +98 +ENDCHAR +STARTCHAR uni00E0 +ENCODING 224 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +60 +18 +00 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni00E1 +ENCODING 225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +18 +60 +00 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni00E2 +ENCODING 226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +48 +00 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni00E3 +ENCODING 227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +98 +00 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni00E4 +ENCODING 228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni00E5 +ENCODING 229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +30 +48 +30 +00 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni00E6 +ENCODING 230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +92 +12 +7E +90 +90 +92 +7C +ENDCHAR +STARTCHAR uni00E7 +ENCODING 231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +80 +80 +80 +80 +84 +78 +10 +60 +ENDCHAR +STARTCHAR uni00E8 +ENCODING 232 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +60 +18 +00 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni00E9 +ENCODING 233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +18 +60 +00 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni00EA +ENCODING 234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +48 +00 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni00EB +ENCODING 235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni00EC +ENCODING 236 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +C0 +30 +00 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni00ED +ENCODING 237 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +30 +C0 +00 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni00EE +ENCODING 238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +60 +90 +00 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni00EF +ENCODING 239 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +90 +90 +00 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni00F0 +ENCODING 240 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +18 +28 +44 +04 +7C +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00F1 +ENCODING 241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +98 +00 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni00F2 +ENCODING 242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +60 +18 +00 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00F3 +ENCODING 243 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +18 +60 +00 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00F4 +ENCODING 244 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +48 +00 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00F5 +ENCODING 245 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +98 +00 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00F6 +ENCODING 246 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni00F7 +ENCODING 247 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +30 +00 +00 +FC +00 +00 +30 +ENDCHAR +STARTCHAR uni00F8 +ENCODING 248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +04 +78 +8C +94 +94 +A4 +A4 +C4 +78 +80 +ENDCHAR +STARTCHAR uni00F9 +ENCODING 249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +60 +18 +00 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni00FA +ENCODING 250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +18 +60 +00 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni00FB +ENCODING 251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +48 +00 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni00FC +ENCODING 252 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni00FD +ENCODING 253 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +18 +60 +00 +00 +84 +84 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uni00FE +ENCODING 254 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni00FF +ENCODING 255 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +48 +48 +00 +00 +84 +84 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uni0100 +ENCODING 256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +78 +00 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0101 +ENCODING 257 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +78 +00 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0102 +ENCODING 258 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +84 +84 +78 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0103 +ENCODING 259 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +84 +84 +78 +00 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0104 +ENCODING 260 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +08 +06 +ENDCHAR +STARTCHAR uni0105 +ENCODING 261 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +78 +84 +04 +7C +84 +84 +8C +74 +08 +06 +ENDCHAR +STARTCHAR uni0106 +ENCODING 262 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +00 +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0107 +ENCODING 263 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +18 +60 +00 +00 +78 +84 +80 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0108 +ENCODING 264 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +00 +00 +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0109 +ENCODING 265 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +48 +00 +00 +78 +84 +80 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni010A +ENCODING 266 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +20 +20 +00 +00 +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni010B +ENCODING 267 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +20 +00 +00 +78 +84 +80 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni010C +ENCODING 268 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni010D +ENCODING 269 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +30 +00 +00 +78 +84 +80 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni010E +ENCODING 270 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +90 +60 +00 +00 +F0 +88 +84 +84 +84 +84 +84 +84 +88 +F0 +ENDCHAR +STARTCHAR uni010F +ENCODING 271 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +16 +12 +12 +54 +B0 +90 +90 +90 +90 +B0 +50 +ENDCHAR +STARTCHAR uni0110 +ENCODING 272 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +78 +44 +42 +42 +F2 +42 +42 +42 +44 +78 +ENDCHAR +STARTCHAR uni0111 +ENCODING 273 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +04 +1E +04 +74 +8C +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0112 +ENCODING 274 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +78 +00 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni0113 +ENCODING 275 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +78 +00 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0114 +ENCODING 276 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +84 +84 +78 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni0115 +ENCODING 277 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +84 +84 +78 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0116 +ENCODING 278 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +20 +20 +00 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni0117 +ENCODING 279 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +20 +00 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0118 +ENCODING 280 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +10 +0C +ENDCHAR +STARTCHAR uni0119 +ENCODING 281 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +FC +80 +80 +84 +78 +20 +18 +ENDCHAR +STARTCHAR uni011A +ENCODING 282 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni011B +ENCODING 283 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +30 +00 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni011C +ENCODING 284 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +00 +00 +78 +84 +84 +80 +80 +9C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni011D +ENCODING 285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +30 +48 +00 +04 +74 +88 +88 +88 +70 +40 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni011E +ENCODING 286 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +84 +84 +78 +00 +78 +84 +84 +80 +80 +9C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni011F +ENCODING 287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +84 +84 +78 +00 +04 +74 +88 +88 +88 +70 +40 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni0120 +ENCODING 288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +20 +20 +00 +00 +78 +84 +84 +80 +80 +9C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0121 +ENCODING 289 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +20 +20 +00 +04 +74 +88 +88 +88 +70 +40 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni0122 +ENCODING 290 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +80 +80 +9C +84 +84 +8C +74 +10 +60 +ENDCHAR +STARTCHAR uni0123 +ENCODING 291 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +40 +40 +30 +04 +74 +88 +88 +88 +70 +40 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni0124 +ENCODING 292 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +00 +00 +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0125 +ENCODING 293 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +60 +90 +00 +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0126 +ENCODING 294 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +42 +42 +FF +42 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni0127 +ENCODING 295 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +40 +F0 +40 +5C +62 +42 +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni0128 +ENCODING 296 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +00 +00 +7C +10 +10 +10 +10 +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni0129 +ENCODING 297 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +98 +00 +00 +30 +10 +10 +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni012A +ENCODING 298 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 0 +BITMAP +F0 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni012B +ENCODING 299 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +F0 +00 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni012C +ENCODING 300 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +84 +84 +78 +00 +7C +10 +10 +10 +10 +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni012D +ENCODING 301 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +84 +84 +78 +00 +30 +10 +10 +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni012E +ENCODING 302 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 -2 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +20 +18 +ENDCHAR +STARTCHAR uni012F +ENCODING 303 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 -2 +BITMAP +20 +20 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +20 +18 +ENDCHAR +STARTCHAR uni0130 +ENCODING 304 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +20 +20 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni0131 +ENCODING 305 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni0132 +ENCODING 306 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni0133 +ENCODING 307 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -2 +BITMAP +88 +88 +00 +00 +88 +88 +88 +88 +88 +88 +68 +08 +88 +70 +ENDCHAR +STARTCHAR uni0134 +ENCODING 308 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +18 +24 +00 +00 +3E +08 +08 +08 +08 +08 +08 +88 +88 +70 +ENDCHAR +STARTCHAR uni0135 +ENCODING 309 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +18 +24 +00 +00 +18 +08 +08 +08 +08 +08 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni0136 +ENCODING 310 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +42 +44 +48 +50 +60 +60 +50 +48 +44 +42 +20 +C0 +ENDCHAR +STARTCHAR uni0137 +ENCODING 311 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +40 +40 +40 +44 +48 +50 +60 +50 +48 +44 +42 +20 +C0 +ENDCHAR +STARTCHAR uni0138 +ENCODING 312 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +88 +90 +E0 +E0 +90 +88 +84 +ENDCHAR +STARTCHAR uni0139 +ENCODING 313 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +C0 +00 +00 +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni013A +ENCODING 314 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +30 +C0 +00 +60 +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni013B +ENCODING 315 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +10 +60 +ENDCHAR +STARTCHAR uni013C +ENCODING 316 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 -2 +BITMAP +60 +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +20 +C0 +ENDCHAR +STARTCHAR uni013D +ENCODING 317 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni013E +ENCODING 318 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +6C +24 +24 +28 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni013F +ENCODING 319 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +88 +88 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni0140 +ENCODING 320 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +60 +20 +20 +20 +20 +28 +28 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni0141 +ENCODING 321 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +40 +40 +48 +50 +60 +C0 +40 +40 +40 +7E +ENDCHAR +STARTCHAR uni0142 +ENCODING 322 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +60 +20 +20 +28 +30 +60 +A0 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni0143 +ENCODING 323 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +00 +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +ENDCHAR +STARTCHAR uni0144 +ENCODING 324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +18 +60 +00 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0145 +ENCODING 325 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +42 +62 +62 +52 +52 +4A +4A +46 +46 +42 +20 +C0 +ENDCHAR +STARTCHAR uni0146 +ENCODING 326 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +5C +62 +42 +42 +42 +42 +42 +42 +20 +C0 +ENDCHAR +STARTCHAR uni0147 +ENCODING 327 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +ENDCHAR +STARTCHAR uni0148 +ENCODING 328 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +30 +00 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0149 +ENCODING 329 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +C0 +40 +40 +80 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni014A +ENCODING 330 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +84 +98 +ENDCHAR +STARTCHAR uni014B +ENCODING 331 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +18 +ENDCHAR +STARTCHAR uni014C +ENCODING 332 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +78 +00 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni014D +ENCODING 333 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +78 +00 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni014E +ENCODING 334 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +84 +84 +78 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni014F +ENCODING 335 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +84 +84 +78 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0150 +ENCODING 336 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +66 +88 +00 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0151 +ENCODING 337 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +66 +88 +00 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0152 +ENCODING 338 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +6E +90 +90 +90 +9C +90 +90 +90 +90 +6E +ENDCHAR +STARTCHAR uni0153 +ENCODING 339 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +6C +92 +92 +9E +90 +90 +92 +6C +ENDCHAR +STARTCHAR uni0154 +ENCODING 340 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +00 +F8 +84 +84 +84 +F8 +90 +88 +88 +84 +84 +ENDCHAR +STARTCHAR uni0155 +ENCODING 341 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +18 +60 +00 +00 +B8 +C4 +84 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0156 +ENCODING 342 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +7C +42 +42 +42 +7C +48 +44 +44 +42 +42 +20 +C0 +ENDCHAR +STARTCHAR uni0157 +ENCODING 343 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +5C +62 +42 +40 +40 +40 +40 +40 +20 +C0 +ENDCHAR +STARTCHAR uni0158 +ENCODING 344 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +F8 +84 +84 +84 +F8 +90 +88 +88 +84 +84 +ENDCHAR +STARTCHAR uni0159 +ENCODING 345 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +30 +00 +00 +B8 +C4 +84 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni015A +ENCODING 346 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +00 +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni015B +ENCODING 347 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +18 +60 +00 +00 +78 +84 +80 +60 +18 +84 +84 +78 +ENDCHAR +STARTCHAR uni015C +ENCODING 348 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +00 +00 +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni015D +ENCODING 349 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +48 +00 +00 +78 +84 +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uni015E +ENCODING 350 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +10 +60 +ENDCHAR +STARTCHAR uni015F +ENCODING 351 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +80 +60 +18 +04 +84 +78 +10 +60 +ENDCHAR +STARTCHAR uni0160 +ENCODING 352 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0161 +ENCODING 353 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +30 +00 +00 +78 +84 +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uni0162 +ENCODING 354 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +60 +ENDCHAR +STARTCHAR uni0163 +ENCODING 355 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +20 +20 +20 +F8 +20 +20 +20 +20 +20 +18 +10 +60 +ENDCHAR +STARTCHAR uni0164 +ENCODING 356 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +48 +30 +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0165 +ENCODING 357 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +06 +02 +22 +24 +20 +F8 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni0166 +ENCODING 358 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +7C +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0167 +ENCODING 359 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +F8 +20 +20 +F8 +20 +20 +18 +ENDCHAR +STARTCHAR uni0168 +ENCODING 360 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +00 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0169 +ENCODING 361 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +98 +00 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni016A +ENCODING 362 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +78 +00 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni016B +ENCODING 363 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +78 +00 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni016C +ENCODING 364 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +84 +84 +78 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni016D +ENCODING 365 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +84 +84 +78 +00 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni016E +ENCODING 366 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +30 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni016F +ENCODING 367 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +48 +30 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0170 +ENCODING 368 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +66 +88 +00 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0171 +ENCODING 369 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +66 +88 +00 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0172 +ENCODING 370 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +20 +18 +ENDCHAR +STARTCHAR uni0173 +ENCODING 371 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +8C +74 +08 +06 +ENDCHAR +STARTCHAR uni0174 +ENCODING 372 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +00 +00 +84 +84 +84 +84 +B4 +B4 +CC +CC +84 +84 +ENDCHAR +STARTCHAR uni0175 +ENCODING 373 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +30 +48 +00 +00 +82 +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni0176 +ENCODING 374 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +30 +48 +00 +00 +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0177 +ENCODING 375 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +30 +48 +00 +00 +84 +84 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uni0178 +ENCODING 376 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +48 +48 +00 +00 +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0179 +ENCODING 377 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +00 +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni017A +ENCODING 378 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +18 +60 +00 +00 +FC +04 +08 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni017B +ENCODING 379 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +20 +20 +00 +00 +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni017C +ENCODING 380 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +20 +00 +00 +FC +04 +08 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni017D +ENCODING 381 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni017E +ENCODING 382 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +30 +00 +00 +FC +04 +08 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni017F +ENCODING 383 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +18 +20 +20 +20 +E0 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0180 +ENCODING 384 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +40 +F0 +40 +5C +62 +42 +42 +42 +42 +62 +5C +ENDCHAR +STARTCHAR uni0181 +ENCODING 385 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7C +A2 +A2 +22 +3C +22 +22 +22 +22 +3C +ENDCHAR +STARTCHAR uni0182 +ENCODING 386 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +84 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni0183 +ENCODING 387 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +F8 +80 +80 +B8 +C4 +84 +84 +84 +84 +C4 +B8 +ENDCHAR +STARTCHAR uni0184 +ENCODING 388 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C0 +40 +40 +40 +78 +44 +44 +44 +44 +78 +ENDCHAR +STARTCHAR uni0185 +ENCODING 389 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +C0 +40 +40 +40 +78 +44 +44 +78 +ENDCHAR +STARTCHAR uni0186 +ENCODING 390 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +04 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0187 +ENCODING 391 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +06 +08 +78 +88 +88 +80 +80 +80 +80 +88 +88 +70 +ENDCHAR +STARTCHAR uni0188 +ENCODING 392 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +06 +08 +78 +88 +80 +80 +80 +80 +88 +70 +ENDCHAR +STARTCHAR uni0189 +ENCODING 393 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +78 +44 +42 +42 +F2 +42 +42 +42 +44 +78 +ENDCHAR +STARTCHAR uni018A +ENCODING 394 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +78 +A4 +A2 +22 +22 +22 +22 +22 +24 +38 +ENDCHAR +STARTCHAR uni018B +ENCODING 395 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +7C +84 +84 +84 +84 +7C +ENDCHAR +STARTCHAR uni018C +ENCODING 396 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +7C +04 +04 +74 +8C +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni018D +ENCODING 397 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +84 +84 +48 +30 +08 +08 +70 +ENDCHAR +STARTCHAR uni018E +ENCODING 398 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +7C +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni018F +ENCODING 399 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +04 +04 +FC +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni0190 +ENCODING 400 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +70 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0191 +ENCODING 401 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +3E +20 +20 +20 +3C +20 +20 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uni0192 +ENCODING 402 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -1 +BITMAP +18 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uni0193 +ENCODING 403 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +06 +78 +88 +88 +80 +80 +B8 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni0194 +ENCODING 404 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +48 +48 +30 +30 +48 +48 +30 +ENDCHAR +STARTCHAR uni0195 +ENCODING 405 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +80 +80 +80 +E4 +94 +94 +94 +94 +94 +88 +ENDCHAR +STARTCHAR uni0196 +ENCODING 406 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +E0 +20 +20 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni0197 +ENCODING 407 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +20 +20 +20 +F8 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni0198 +ENCODING 408 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +8C +94 +A0 +A0 +C0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni0199 +ENCODING 409 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +60 +90 +80 +88 +90 +A0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni019A +ENCODING 410 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +60 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni019B +ENCODING 411 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +48 +50 +20 +60 +90 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni019C +ENCODING 412 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +92 +6E +ENDCHAR +STARTCHAR uni019D +ENCODING 413 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 -1 +BITMAP +22 +22 +32 +32 +2A +2A +26 +26 +22 +22 +C0 +ENDCHAR +STARTCHAR uni019E +ENCODING 414 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni019F +ENCODING 415 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +FC +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01A0 +ENCODING 416 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +74 +88 +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni01A1 +ENCODING 417 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +74 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni01A2 +ENCODING 418 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +6C +94 +94 +94 +94 +94 +94 +94 +94 +64 +04 +04 +ENDCHAR +STARTCHAR uni01A3 +ENCODING 419 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +6C +94 +94 +94 +94 +94 +94 +64 +04 +04 +ENDCHAR +STARTCHAR uni01A4 +ENCODING 420 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +A2 +A2 +22 +3C +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01A5 +ENCODING 421 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +06 +B8 +C8 +88 +88 +88 +88 +C8 +B0 +80 +80 +ENDCHAR +STARTCHAR uni01A6 +ENCODING 422 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +E0 +40 +78 +44 +44 +78 +50 +48 +44 +42 +ENDCHAR +STARTCHAR uni01A7 +ENCODING 423 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +18 +60 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni01A8 +ENCODING 424 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +18 +60 +80 +84 +78 +ENDCHAR +STARTCHAR uni01A9 +ENCODING 425 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +40 +20 +10 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni01AA +ENCODING 426 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -1 +BITMAP +40 +A0 +A0 +60 +20 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni01AB +ENCODING 427 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +20 +20 +20 +F8 +20 +20 +20 +20 +20 +18 +08 +30 +ENDCHAR +STARTCHAR uni01AC +ENCODING 428 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7E +90 +90 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01AD +ENCODING 429 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +18 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni01AE +ENCODING 430 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +0C +ENDCHAR +STARTCHAR uni01AF +ENCODING 431 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +02 +02 +8C +88 +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni01B0 +ENCODING 432 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +02 +02 +8C +88 +88 +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni01B1 +ENCODING 433 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +48 +48 +84 +84 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni01B2 +ENCODING 434 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +98 +84 +84 +84 +84 +84 +84 +88 +90 +60 +ENDCHAR +STARTCHAR uni01B3 +ENCODING 435 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +8C +8A +88 +50 +50 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01B4 +ENCODING 436 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +06 +88 +88 +88 +88 +88 +48 +38 +08 +08 +70 +ENDCHAR +STARTCHAR uni01B5 +ENCODING 437 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +08 +10 +78 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni01B6 +ENCODING 438 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +08 +10 +78 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni01B7 +ENCODING 439 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +08 +10 +20 +38 +04 +04 +04 +8C +78 +ENDCHAR +STARTCHAR uni01B8 +ENCODING 440 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +40 +20 +10 +70 +80 +80 +80 +C4 +78 +ENDCHAR +STARTCHAR uni01B9 +ENCODING 441 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +F8 +40 +20 +10 +70 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni01BA +ENCODING 442 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +7C +08 +10 +38 +04 +04 +78 +80 +84 +78 +ENDCHAR +STARTCHAR uni01BB +ENCODING 443 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +08 +10 +FC +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni01BC +ENCODING 444 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +40 +40 +40 +78 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni01BD +ENCODING 445 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +40 +40 +78 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni01BE +ENCODING 446 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +20 +F8 +20 +20 +30 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni01BF +ENCODING 447 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +88 +90 +A0 +C0 +80 +80 +ENDCHAR +STARTCHAR uni01C0 +ENCODING 448 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 11 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01C1 +ENCODING 449 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 0 +BITMAP +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni01C2 +ENCODING 450 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +20 +20 +20 +20 +F8 +20 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01C3 +ENCODING 451 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +00 +80 +80 +ENDCHAR +STARTCHAR uni01C4 +ENCODING 452 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +0A +04 +00 +00 +CE +A2 +A2 +A2 +A4 +A4 +A8 +A8 +A8 +CE +ENDCHAR +STARTCHAR uni01C5 +ENCODING 453 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +0A +04 +C0 +A0 +AE +A2 +A2 +A4 +A4 +A8 +A8 +CE +ENDCHAR +STARTCHAR uni01C6 +ENCODING 454 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +0A +24 +20 +20 +6E +A2 +A2 +A4 +A4 +A8 +A8 +6E +ENDCHAR +STARTCHAR uni01C7 +ENCODING 455 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +8E +82 +82 +82 +82 +82 +82 +92 +92 +EC +ENDCHAR +STARTCHAR uni01C8 +ENCODING 456 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +02 +82 +80 +86 +82 +82 +82 +82 +82 +82 +F2 +04 +18 +ENDCHAR +STARTCHAR uni01C9 +ENCODING 457 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +61 +21 +20 +23 +21 +21 +21 +21 +21 +21 +F9 +02 +0C +ENDCHAR +STARTCHAR uni01CA +ENCODING 458 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +96 +92 +92 +D2 +D2 +B2 +B2 +9A +9A +94 +ENDCHAR +STARTCHAR uni01CB +ENCODING 459 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +02 +92 +90 +D6 +D2 +D2 +B2 +B2 +B2 +92 +92 +24 +18 +ENDCHAR +STARTCHAR uni01CC +ENCODING 460 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +02 +02 +00 +A6 +D2 +92 +92 +92 +92 +92 +92 +24 +18 +ENDCHAR +STARTCHAR uni01CD +ENCODING 461 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01CE +ENCODING 462 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +30 +00 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01CF +ENCODING 463 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +90 +60 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D0 +ENCODING 464 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +90 +60 +00 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D1 +ENCODING 465 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D2 +ENCODING 466 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +30 +00 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D3 +ENCODING 467 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D4 +ENCODING 468 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +30 +00 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01D5 +ENCODING 469 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +78 +00 +48 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D6 +ENCODING 470 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +78 +00 +48 +48 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01D7 +ENCODING 471 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +48 +00 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D8 +ENCODING 472 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +48 +48 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01D9 +ENCODING 473 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +48 +00 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01DA +ENCODING 474 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +48 +48 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01DB +ENCODING 475 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +60 +18 +00 +48 +00 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01DC +ENCODING 476 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +60 +18 +00 +48 +48 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01DD +ENCODING 477 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +04 +FC +84 +84 +78 +ENDCHAR +STARTCHAR uni01DE +ENCODING 478 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +78 +00 +48 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01DF +ENCODING 479 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +78 +00 +48 +48 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01E0 +ENCODING 480 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +78 +00 +30 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01E1 +ENCODING 481 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +78 +00 +20 +20 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01E2 +ENCODING 482 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +78 +00 +00 +3E +50 +90 +90 +FE +90 +90 +90 +90 +9E +ENDCHAR +STARTCHAR uni01E3 +ENCODING 483 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +78 +00 +00 +7C +92 +12 +7E +90 +90 +92 +7C +ENDCHAR +STARTCHAR uni01E4 +ENCODING 484 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +78 +84 +84 +80 +80 +9C +84 +9E +84 +7C +ENDCHAR +STARTCHAR uni01E5 +ENCODING 485 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +04 +74 +88 +88 +88 +70 +40 +78 +9E +84 +78 +ENDCHAR +STARTCHAR uni01E6 +ENCODING 486 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +78 +84 +84 +80 +80 +9C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01E7 +ENCODING 487 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +48 +30 +00 +04 +74 +88 +88 +88 +70 +40 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni01E8 +ENCODING 488 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +84 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni01E9 +ENCODING 489 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +80 +80 +80 +88 +90 +A0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni01EA +ENCODING 490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +20 +18 +ENDCHAR +STARTCHAR uni01EB +ENCODING 491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +84 +84 +84 +84 +78 +20 +18 +ENDCHAR +STARTCHAR uni01EC +ENCODING 492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +78 +00 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +20 +18 +ENDCHAR +STARTCHAR uni01ED +ENCODING 493 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +78 +00 +00 +78 +84 +84 +84 +84 +84 +84 +78 +20 +18 +ENDCHAR +STARTCHAR uni01EE +ENCODING 494 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +30 +00 +00 +FC +08 +10 +20 +38 +04 +04 +04 +8C +78 +ENDCHAR +STARTCHAR uni01EF +ENCODING 495 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +48 +30 +00 +00 +7C +08 +10 +20 +38 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni01F0 +ENCODING 496 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +24 +18 +00 +00 +18 +08 +08 +08 +08 +08 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni01F1 +ENCODING 497 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +CE +A2 +A2 +A2 +A4 +A4 +A8 +A8 +A8 +CE +ENDCHAR +STARTCHAR uni01F2 +ENCODING 498 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C0 +A0 +AE +A2 +A2 +A4 +A4 +A8 +A8 +CE +ENDCHAR +STARTCHAR uni01F3 +ENCODING 499 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +20 +20 +20 +6E +A2 +A2 +A4 +A4 +A8 +A8 +6E +ENDCHAR +STARTCHAR uni01F4 +ENCODING 500 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +00 +78 +84 +84 +80 +80 +9C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01F5 +ENCODING 501 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +18 +60 +00 +04 +74 +88 +88 +88 +70 +40 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni01F6 +ENCODING 502 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +90 +90 +90 +94 +F4 +94 +94 +94 +94 +88 +ENDCHAR +STARTCHAR uni01F7 +ENCODING 503 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +B8 +C4 +84 +84 +88 +90 +A0 +C0 +80 +80 +80 +ENDCHAR +STARTCHAR uni01F8 +ENCODING 504 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +60 +18 +00 +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +ENDCHAR +STARTCHAR uni01F9 +ENCODING 505 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +60 +18 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01FA +ENCODING 506 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +30 +48 +30 +30 +48 +48 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01FB +ENCODING 507 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +30 +48 +30 +00 +78 +84 +04 +7C +84 +8C +74 +ENDCHAR +STARTCHAR uni01FC +ENCODING 508 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +0C +30 +00 +00 +3E +50 +90 +90 +FE +90 +90 +90 +90 +9E +ENDCHAR +STARTCHAR uni01FD +ENCODING 509 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +0C +30 +00 +00 +7C +92 +12 +7E +90 +90 +92 +7C +ENDCHAR +STARTCHAR uni01FE +ENCODING 510 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -1 +BITMAP +18 +60 +00 +04 +74 +88 +8C +94 +94 +A4 +A4 +C4 +44 +B8 +80 +ENDCHAR +STARTCHAR uni01FF +ENCODING 511 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +18 +60 +00 +04 +78 +8C +94 +94 +A4 +A4 +C4 +78 +80 +ENDCHAR +STARTCHAR uni0200 +ENCODING 512 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +CC +22 +00 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni0201 +ENCODING 513 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +CC +22 +00 +00 +3C +42 +02 +3E +42 +42 +46 +3A +ENDCHAR +STARTCHAR uni0202 +ENCODING 514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +78 +84 +84 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0203 +ENCODING 515 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +78 +84 +84 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0204 +ENCODING 516 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +CC +22 +00 +00 +7E +40 +40 +40 +7C +40 +40 +40 +40 +7E +ENDCHAR +STARTCHAR uni0205 +ENCODING 517 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +CC +22 +00 +00 +3C +42 +42 +7E +40 +40 +42 +3C +ENDCHAR +STARTCHAR uni0206 +ENCODING 518 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +78 +84 +84 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni0207 +ENCODING 519 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +78 +84 +84 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0208 +ENCODING 520 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +CC +22 +00 +00 +3E +08 +08 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni0209 +ENCODING 521 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +CC +22 +00 +00 +18 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni020A +ENCODING 522 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +78 +84 +84 +00 +7C +10 +10 +10 +10 +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni020B +ENCODING 523 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +78 +84 +84 +00 +30 +10 +10 +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni020C +ENCODING 524 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +CC +22 +00 +00 +3C +42 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni020D +ENCODING 525 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +CC +22 +00 +00 +3C +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni020E +ENCODING 526 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +78 +84 +84 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni020F +ENCODING 527 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +78 +84 +84 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0210 +ENCODING 528 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +CC +22 +00 +00 +7C +42 +42 +42 +7C +48 +44 +44 +42 +42 +ENDCHAR +STARTCHAR uni0211 +ENCODING 529 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +CC +22 +00 +00 +5C +62 +42 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni0212 +ENCODING 530 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +78 +84 +84 +00 +F8 +84 +84 +84 +F8 +90 +88 +88 +84 +84 +ENDCHAR +STARTCHAR uni0213 +ENCODING 531 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +78 +84 +84 +00 +B8 +C4 +84 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0214 +ENCODING 532 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +CC +22 +00 +00 +42 +42 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni0215 +ENCODING 533 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +CC +22 +00 +00 +42 +42 +42 +42 +42 +42 +46 +3A +ENDCHAR +STARTCHAR uni0216 +ENCODING 534 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +78 +84 +84 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0217 +ENCODING 535 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +78 +84 +84 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0218 +ENCODING 536 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +10 +20 +ENDCHAR +STARTCHAR uni0219 +ENCODING 537 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +80 +60 +18 +04 +84 +78 +10 +20 +ENDCHAR +STARTCHAR uni021A +ENCODING 538 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +04 +08 +ENDCHAR +STARTCHAR uni021B +ENCODING 539 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +20 +20 +20 +F8 +20 +20 +20 +20 +20 +18 +40 +80 +ENDCHAR +STARTCHAR uni021C +ENCODING 540 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +78 +84 +84 +04 +18 +68 +04 +04 +04 +18 +60 +ENDCHAR +STARTCHAR uni021D +ENCODING 541 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +04 +04 +18 +64 +04 +04 +18 +60 +ENDCHAR +STARTCHAR uni021E +ENCODING 542 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +48 +30 +00 +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni021F +ENCODING 543 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +48 +30 +00 +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0220 +ENCODING 544 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni0221 +ENCODING 545 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +04 +04 +04 +74 +8C +84 +84 +84 +84 +8E +76 +04 +08 +ENDCHAR +STARTCHAR uni0222 +ENCODING 546 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +48 +84 +84 +48 +78 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0223 +ENCODING 547 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +48 +88 +90 +60 +90 +88 +88 +70 +ENDCHAR +STARTCHAR uni0224 +ENCODING 548 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +04 +08 +ENDCHAR +STARTCHAR uni0225 +ENCODING 549 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +04 +08 +10 +20 +40 +80 +FC +04 +08 +ENDCHAR +STARTCHAR uni0226 +ENCODING 550 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +10 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0227 +ENCODING 551 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0228 +ENCODING 552 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +10 +60 +ENDCHAR +STARTCHAR uni0229 +ENCODING 553 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +FC +80 +80 +84 +78 +10 +60 +ENDCHAR +STARTCHAR uni022A +ENCODING 554 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +78 +00 +48 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni022B +ENCODING 555 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +78 +00 +48 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni022C +ENCODING 556 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +78 +00 +64 +98 +00 +78 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni022D +ENCODING 557 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +78 +00 +64 +98 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni022E +ENCODING 558 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +10 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni022F +ENCODING 559 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0230 +ENCODING 560 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +78 +00 +10 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0231 +ENCODING 561 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +78 +00 +10 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0232 +ENCODING 562 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +7C +00 +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0233 +ENCODING 563 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +00 +84 +84 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uni0234 +ENCODING 564 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 -2 +BITMAP +60 +20 +20 +20 +20 +20 +20 +20 +20 +30 +30 +40 +80 +ENDCHAR +STARTCHAR uni0235 +ENCODING 565 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +86 +86 +04 +08 +ENDCHAR +STARTCHAR uni0236 +ENCODING 566 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +20 +20 +20 +F8 +20 +20 +20 +20 +2C +1C +10 +20 +ENDCHAR +STARTCHAR uni0237 +ENCODING 567 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +18 +08 +08 +08 +08 +08 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni0238 +ENCODING 568 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +10 +10 +54 +BA +92 +92 +92 +92 +BA +54 +ENDCHAR +STARTCHAR uni0239 +ENCODING 569 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +54 +BA +92 +92 +92 +92 +BA +54 +10 +10 +ENDCHAR +STARTCHAR uni023A +ENCODING 570 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +02 +1A +24 +2C +4A +52 +7E +62 +42 +42 +C2 +ENDCHAR +STARTCHAR uni023B +ENCODING 571 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -1 +BITMAP +02 +3C +46 +4A +48 +50 +50 +60 +62 +42 +7C +80 +ENDCHAR +STARTCHAR uni023C +ENCODING 572 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 -1 +BITMAP +02 +04 +3C +4A +50 +50 +60 +60 +42 +7C +80 +ENDCHAR +STARTCHAR uni023D +ENCODING 573 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +40 +40 +40 +F0 +40 +40 +40 +40 +7C +ENDCHAR +STARTCHAR uni023E +ENCODING 574 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +02 +04 +FE +18 +18 +10 +10 +30 +30 +50 +50 +90 +ENDCHAR +STARTCHAR uni023F +ENCODING 575 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +78 +84 +80 +60 +18 +04 +84 +78 +12 +0C +ENDCHAR +STARTCHAR uni0240 +ENCODING 576 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +04 +08 +10 +20 +40 +80 +C0 +20 +1C +ENDCHAR +STARTCHAR uni0241 +ENCODING 577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +08 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0242 +ENCODING 578 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +04 +08 +10 +10 +10 +ENDCHAR +STARTCHAR uni0243 +ENCODING 579 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +44 +44 +44 +78 +44 +F4 +44 +44 +78 +ENDCHAR +STARTCHAR uni0244 +ENCODING 580 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +44 +44 +44 +44 +44 +FE +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni0245 +ENCODING 581 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +30 +30 +48 +48 +48 +48 +84 +84 +84 +ENDCHAR +STARTCHAR uni0246 +ENCODING 582 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +08 +08 +FC +90 +90 +A0 +F8 +A0 +A0 +C0 +C0 +FC +80 +80 +ENDCHAR +STARTCHAR uni0247 +ENCODING 583 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -1 +BITMAP +02 +3C +46 +4A +7E +50 +60 +42 +7C +80 +ENDCHAR +STARTCHAR uni0248 +ENCODING 584 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3E +08 +08 +08 +08 +3E +08 +88 +88 +70 +ENDCHAR +STARTCHAR uni0249 +ENCODING 585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +08 +08 +00 +18 +08 +08 +3E +08 +08 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni024A +ENCODING 586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +70 +88 +88 +88 +88 +88 +88 +88 +98 +68 +08 +06 +ENDCHAR +STARTCHAR uni024B +ENCODING 587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +68 +98 +88 +88 +88 +88 +98 +68 +08 +06 +ENDCHAR +STARTCHAR uni024C +ENCODING 588 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +44 +44 +44 +F8 +50 +48 +48 +44 +44 +ENDCHAR +STARTCHAR uni024D +ENCODING 589 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +58 +64 +44 +E0 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni024E +ENCODING 590 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +FE +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni024F +ENCODING 591 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +44 +44 +44 +FE +44 +24 +1C +04 +04 +38 +ENDCHAR +STARTCHAR uni0250 +ENCODING 592 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +B8 +C4 +84 +84 +F8 +80 +84 +78 +ENDCHAR +STARTCHAR uni0251 +ENCODING 593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +74 +8C +84 +84 +84 +8C +94 +64 +ENDCHAR +STARTCHAR uni0252 +ENCODING 594 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +98 +A4 +C4 +84 +84 +84 +C4 +B8 +ENDCHAR +STARTCHAR uni0253 +ENCODING 595 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +70 +80 +80 +B8 +C4 +84 +84 +84 +84 +C4 +B8 +ENDCHAR +STARTCHAR uni0254 +ENCODING 596 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni0255 +ENCODING 597 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +78 +84 +80 +80 +80 +98 +A4 +78 +80 +ENDCHAR +STARTCHAR uni0256 +ENCODING 598 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +08 +08 +08 +68 +98 +88 +88 +88 +88 +98 +68 +06 +ENDCHAR +STARTCHAR uni0257 +ENCODING 599 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +06 +08 +08 +68 +98 +88 +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni0258 +ENCODING 600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +FC +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni0259 +ENCODING 601 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +04 +FC +84 +84 +78 +ENDCHAR +STARTCHAR uni025A +ENCODING 602 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +68 +9A +34 +50 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni025B +ENCODING 603 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +78 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni025C +ENCODING 604 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +78 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni025D +ENCODING 605 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +68 +9A +14 +60 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni025E +ENCODING 606 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +B8 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni025F +ENCODING 607 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +18 +08 +08 +08 +3E +08 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni0260 +ENCODING 608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +06 +68 +98 +88 +88 +88 +98 +68 +08 +88 +70 +ENDCHAR +STARTCHAR uni0261 +ENCODING 609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +74 +8C +84 +84 +84 +8C +74 +04 +84 +78 +ENDCHAR +STARTCHAR uni0262 +ENCODING 610 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +80 +9C +84 +84 +7C +ENDCHAR +STARTCHAR uni0263 +ENCODING 611 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +84 +48 +48 +30 +30 +48 +48 +30 +ENDCHAR +STARTCHAR uni0264 +ENCODING 612 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +44 +AA +28 +10 +10 +28 +28 +10 +ENDCHAR +STARTCHAR uni0265 +ENCODING 613 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +8C +74 +04 +04 +04 +ENDCHAR +STARTCHAR uni0266 +ENCODING 614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +70 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0267 +ENCODING 615 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +70 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +18 +ENDCHAR +STARTCHAR uni0268 +ENCODING 616 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +20 +20 +00 +60 +20 +20 +F8 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni0269 +ENCODING 617 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +E0 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni026A +ENCODING 618 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni026B +ENCODING 619 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +30 +10 +10 +10 +74 +98 +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni026C +ENCODING 620 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +30 +10 +10 +70 +90 +7C +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni026D +ENCODING 621 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 3 -1 +BITMAP +C0 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni026E +ENCODING 622 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +60 +20 +20 +3E +22 +24 +28 +2C +22 +22 +FA +12 +0C +ENDCHAR +STARTCHAR uni026F +ENCODING 623 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +6E +ENDCHAR +STARTCHAR uni0270 +ENCODING 624 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +92 +92 +92 +92 +92 +92 +92 +6E +02 +02 +ENDCHAR +STARTCHAR uni0271 +ENCODING 625 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +EC +92 +92 +92 +92 +92 +92 +82 +0C +ENDCHAR +STARTCHAR uni0272 +ENCODING 626 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +2C +32 +22 +22 +22 +22 +22 +22 +C0 +ENDCHAR +STARTCHAR uni0273 +ENCODING 627 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +B0 +C8 +88 +88 +88 +88 +88 +88 +06 +ENDCHAR +STARTCHAR uni0274 +ENCODING 628 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +C4 +A4 +94 +8C +84 +84 +ENDCHAR +STARTCHAR uni0275 +ENCODING 629 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +FC +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0276 +ENCODING 630 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +6E +90 +90 +9C +90 +90 +90 +6E +ENDCHAR +STARTCHAR uni0277 +ENCODING 631 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni0278 +ENCODING 632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +10 +10 +10 +7C +92 +92 +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni0279 +ENCODING 633 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +04 +04 +04 +04 +04 +84 +8C +74 +ENDCHAR +STARTCHAR uni027A +ENCODING 634 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +04 +04 +84 +8C +74 +ENDCHAR +STARTCHAR uni027B +ENCODING 635 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +08 +08 +08 +08 +08 +88 +98 +68 +06 +ENDCHAR +STARTCHAR uni027C +ENCODING 636 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni027D +ENCODING 637 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +B8 +C4 +84 +80 +80 +80 +80 +80 +60 +ENDCHAR +STARTCHAR uni027E +ENCODING 638 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni027F +ENCODING 639 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni0280 +ENCODING 640 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +84 +84 +F8 +90 +88 +84 +84 +ENDCHAR +STARTCHAR uni0281 +ENCODING 641 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +88 +90 +F8 +84 +84 +F8 +ENDCHAR +STARTCHAR uni0282 +ENCODING 642 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +80 +60 +18 +04 +84 +F8 +80 +60 +ENDCHAR +STARTCHAR uni0283 +ENCODING 643 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -1 +BITMAP +18 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uni0284 +ENCODING 644 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -1 +BITMAP +18 +20 +20 +20 +20 +20 +20 +F8 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uni0285 +ENCODING 645 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 -1 +BITMAP +C0 +20 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni0286 +ENCODING 646 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +0C +10 +10 +10 +10 +10 +10 +10 +10 +70 +9C +60 +ENDCHAR +STARTCHAR uni0287 +ENCODING 647 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +C0 +20 +20 +20 +20 +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni0288 +ENCODING 648 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +20 +20 +20 +F8 +20 +20 +20 +20 +20 +20 +1C +ENDCHAR +STARTCHAR uni0289 +ENCODING 649 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +44 +44 +44 +FE +44 +44 +4C +34 +ENDCHAR +STARTCHAR uni028A +ENCODING 650 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +48 +84 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni028B +ENCODING 651 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +CC +42 +42 +42 +42 +44 +48 +30 +ENDCHAR +STARTCHAR uni028C +ENCODING 652 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +30 +30 +48 +48 +48 +84 +84 +84 +ENDCHAR +STARTCHAR uni028D +ENCODING 653 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +6C +92 +92 +92 +92 +92 +92 +82 +ENDCHAR +STARTCHAR uni028E +ENCODING 654 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +80 +80 +B0 +C8 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni028F +ENCODING 655 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +82 +44 +28 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0290 +ENCODING 656 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +F8 +10 +10 +20 +20 +40 +40 +F8 +08 +06 +ENDCHAR +STARTCHAR uni0291 +ENCODING 657 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +FC +04 +08 +10 +20 +4C +92 +FC +20 +ENDCHAR +STARTCHAR uni0292 +ENCODING 658 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +7C +08 +10 +20 +38 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni0293 +ENCODING 659 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +7C +08 +10 +20 +38 +04 +04 +64 +94 +78 +ENDCHAR +STARTCHAR uni0294 +ENCODING 660 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +08 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0295 +ENCODING 661 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +40 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0296 +ENCODING 662 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +10 +10 +10 +10 +08 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0297 +ENCODING 663 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +80 +80 +80 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0298 +ENCODING 664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +B4 +B4 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0299 +ENCODING 665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +84 +84 +F8 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni029A +ENCODING 666 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +74 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni029B +ENCODING 667 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +76 +88 +80 +80 +98 +88 +88 +78 +ENDCHAR +STARTCHAR uni029C +ENCODING 668 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +88 +88 +88 +F8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni029D +ENCODING 669 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +08 +08 +00 +18 +08 +08 +08 +08 +08 +08 +7C +90 +60 +ENDCHAR +STARTCHAR uni029E +ENCODING 670 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +84 +44 +24 +14 +0C +14 +24 +44 +04 +04 +04 +ENDCHAR +STARTCHAR uni029F +ENCODING 671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni02A0 +ENCODING 672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +06 +68 +98 +88 +88 +88 +88 +98 +68 +08 +08 +ENDCHAR +STARTCHAR uni02A1 +ENCODING 673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +08 +10 +10 +7C +10 +10 +ENDCHAR +STARTCHAR uni02A2 +ENCODING 674 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +40 +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni02A3 +ENCODING 675 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +20 +20 +20 +7E +A2 +A4 +A4 +A8 +A8 +B0 +7E +ENDCHAR +STARTCHAR uni02A4 +ENCODING 676 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +20 +20 +20 +7E +A2 +A4 +A8 +AC +A2 +A2 +62 +12 +0C +ENDCHAR +STARTCHAR uni02A5 +ENCODING 677 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +20 +20 +20 +7E +A2 +A4 +A8 +B0 +A4 +AA +7C +08 +ENDCHAR +STARTCHAR uni02A6 +ENCODING 678 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +40 +40 +46 +F9 +48 +44 +42 +41 +41 +3E +ENDCHAR +STARTCHAR uni02A7 +ENCODING 679 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +06 +48 +48 +48 +F8 +48 +48 +48 +48 +48 +38 +08 +30 +ENDCHAR +STARTCHAR uni02A8 +ENCODING 680 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -1 +BITMAP +40 +40 +46 +F9 +48 +48 +48 +4A +4D +3E +04 +ENDCHAR +STARTCHAR uni02A9 +ENCODING 681 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +60 +90 +80 +DC +A2 +A2 +A2 +A2 +A2 +A2 +04 +18 +ENDCHAR +STARTCHAR uni02AA +ENCODING 682 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +C0 +40 +40 +4C +52 +50 +48 +44 +42 +42 +FC +ENDCHAR +STARTCHAR uni02AB +ENCODING 683 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +C0 +40 +40 +7C +44 +48 +48 +50 +50 +60 +FC +ENDCHAR +STARTCHAR uni02AC +ENCODING 684 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +92 +92 +AA +6C +44 +00 +92 +92 +AA +6C +44 +ENDCHAR +STARTCHAR uni02AD +ENCODING 685 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +84 +84 +00 +00 +FC +84 +84 +84 +ENDCHAR +STARTCHAR uni02AE +ENCODING 686 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +C8 +48 +48 +48 +48 +48 +58 +28 +08 +08 +ENDCHAR +STARTCHAR uni02AF +ENCODING 687 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +C8 +48 +48 +48 +48 +48 +58 +28 +08 +06 +ENDCHAR +STARTCHAR uni02B0 +ENCODING 688 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +80 +80 +B0 +C8 +88 +88 +88 +ENDCHAR +STARTCHAR uni02B1 +ENCODING 689 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +70 +88 +80 +B0 +C8 +88 +88 +ENDCHAR +STARTCHAR uni02B2 +ENCODING 690 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 3 +BITMAP +10 +00 +10 +10 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni02B3 +ENCODING 691 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +B0 +C8 +88 +80 +80 +ENDCHAR +STARTCHAR uni02B4 +ENCODING 692 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +08 +08 +88 +98 +68 +ENDCHAR +STARTCHAR uni02B5 +ENCODING 693 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 3 +BITMAP +08 +08 +88 +98 +68 +06 +ENDCHAR +STARTCHAR uni02B6 +ENCODING 694 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +88 +90 +F0 +88 +F0 +ENDCHAR +STARTCHAR uni02B7 +ENCODING 695 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 4 +BITMAP +92 +92 +AA +6C +44 +ENDCHAR +STARTCHAR uni02B8 +ENCODING 696 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 3 +BITMAP +88 +88 +98 +68 +08 +70 +ENDCHAR +STARTCHAR uni02B9 +ENCODING 697 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 7 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni02BA +ENCODING 698 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 7 +BITMAP +24 +48 +90 +ENDCHAR +STARTCHAR uni02BB +ENCODING 699 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 6 +BITMAP +40 +80 +80 +C0 +ENDCHAR +STARTCHAR uni02BC +ENCODING 700 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 6 +BITMAP +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uni02BD +ENCODING 701 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 6 +BITMAP +C0 +80 +80 +40 +ENDCHAR +STARTCHAR uni02BE +ENCODING 702 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 5 +BITMAP +C0 +20 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni02BF +ENCODING 703 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 5 +BITMAP +30 +40 +80 +80 +40 +30 +ENDCHAR +STARTCHAR uni02C0 +ENCODING 704 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 5 +BITMAP +78 +84 +04 +38 +20 +20 +ENDCHAR +STARTCHAR uni02C1 +ENCODING 705 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 5 +BITMAP +78 +84 +80 +70 +10 +10 +ENDCHAR +STARTCHAR uni02C2 +ENCODING 706 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 4 +BITMAP +10 +20 +40 +80 +40 +20 +10 +ENDCHAR +STARTCHAR uni02C3 +ENCODING 707 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 4 +BITMAP +80 +40 +20 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni02C4 +ENCODING 708 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 6 +BITMAP +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni02C5 +ENCODING 709 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 6 +BITMAP +82 +44 +28 +10 +ENDCHAR +STARTCHAR uni02C6 +ENCODING 710 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 8 +BITMAP +60 +90 +ENDCHAR +STARTCHAR uni02C7 +ENCODING 711 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 8 +BITMAP +90 +60 +ENDCHAR +STARTCHAR uni02C8 +ENCODING 712 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 3 4 7 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni02C9 +ENCODING 713 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 1 2 9 +BITMAP +F0 +ENDCHAR +STARTCHAR uni02CA +ENCODING 714 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 8 +BITMAP +30 +C0 +ENDCHAR +STARTCHAR uni02CB +ENCODING 715 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 8 +BITMAP +C0 +30 +ENDCHAR +STARTCHAR uni02CC +ENCODING 716 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 4 4 0 +BITMAP +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni02CD +ENCODING 717 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 1 2 0 +BITMAP +F0 +ENDCHAR +STARTCHAR uni02CE +ENCODING 718 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 -1 +BITMAP +C0 +30 +ENDCHAR +STARTCHAR uni02CF +ENCODING 719 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 -1 +BITMAP +30 +C0 +ENDCHAR +STARTCHAR uni02D0 +ENCODING 720 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 2 1 +BITMAP +E0 +40 +00 +00 +40 +E0 +ENDCHAR +STARTCHAR uni02D1 +ENCODING 721 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 2 2 5 +BITMAP +E0 +40 +ENDCHAR +STARTCHAR uni02D2 +ENCODING 722 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 2 +BITMAP +C0 +20 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni02D3 +ENCODING 723 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 2 +BITMAP +30 +40 +80 +80 +40 +30 +ENDCHAR +STARTCHAR uni02D4 +ENCODING 724 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 2 +BITMAP +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni02D5 +ENCODING 725 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 2 +BITMAP +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni02D6 +ENCODING 726 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 2 +BITMAP +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni02D7 +ENCODING 727 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 1 1 4 +BITMAP +F8 +ENDCHAR +STARTCHAR uni02D8 +ENCODING 728 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 9 +BITMAP +84 +84 +78 +ENDCHAR +STARTCHAR uni02D9 +ENCODING 729 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 10 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni02DA +ENCODING 730 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 9 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni02DB +ENCODING 731 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 2 4 -2 +BITMAP +80 +60 +ENDCHAR +STARTCHAR uni02DC +ENCODING 732 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 10 +BITMAP +64 +98 +ENDCHAR +STARTCHAR uni02DD +ENCODING 733 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 1 10 +BITMAP +66 +88 +ENDCHAR +STARTCHAR uni02DE +ENCODING 734 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 3 +BITMAP +20 +60 +A2 +1C +ENDCHAR +STARTCHAR uni02DF +ENCODING 735 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 5 +BITMAP +84 +48 +30 +48 +84 +ENDCHAR +STARTCHAR uni02E0 +ENCODING 736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 2 +BITMAP +84 +84 +48 +30 +48 +48 +30 +ENDCHAR +STARTCHAR uni02E1 +ENCODING 737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 7 2 4 +BITMAP +C0 +40 +40 +40 +40 +40 +E0 +ENDCHAR +STARTCHAR uni02E2 +ENCODING 738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +78 +80 +70 +08 +F0 +ENDCHAR +STARTCHAR uni02E3 +ENCODING 739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 4 +BITMAP +84 +48 +30 +48 +84 +ENDCHAR +STARTCHAR uni02E4 +ENCODING 740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +78 +84 +80 +70 +10 +10 +10 +ENDCHAR +STARTCHAR uni02E5 +ENCODING 741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +F8 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni02E6 +ENCODING 742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +08 +08 +F8 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni02E7 +ENCODING 743 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +08 +08 +08 +08 +08 +F8 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni02E8 +ENCODING 744 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +F8 +08 +08 +ENDCHAR +STARTCHAR uni02E9 +ENCODING 745 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uni02EA +ENCODING 746 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 2 +BITMAP +80 +80 +80 +80 +98 +E0 +ENDCHAR +STARTCHAR uni02EB +ENCODING 747 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 2 +BITMAP +80 +80 +98 +E0 +80 +80 +80 +ENDCHAR +STARTCHAR uni02EC +ENCODING 748 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 0 +BITMAP +88 +50 +20 +ENDCHAR +STARTCHAR uni02ED +ENCODING 749 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 9 +BITMAP +FC +00 +FC +ENDCHAR +STARTCHAR uni02EE +ENCODING 750 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 6 +BITMAP +CC +44 +44 +88 +ENDCHAR +STARTCHAR uni02EF +ENCODING 751 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 -1 +BITMAP +88 +50 +20 +ENDCHAR +STARTCHAR uni02F0 +ENCODING 752 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 -1 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni02F1 +ENCODING 753 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 3 -1 +BITMAP +20 +40 +80 +40 +20 +ENDCHAR +STARTCHAR uni02F2 +ENCODING 754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 3 -1 +BITMAP +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uni02F3 +ENCODING 755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 -1 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni02F4 +ENCODING 756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 5 +BITMAP +C0 +30 +ENDCHAR +STARTCHAR uni02F5 +ENCODING 757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 0 5 +BITMAP +CC +22 +ENDCHAR +STARTCHAR uni02F6 +ENCODING 758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 1 5 +BITMAP +66 +88 +ENDCHAR +STARTCHAR uni02F7 +ENCODING 759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 -2 +BITMAP +64 +98 +ENDCHAR +STARTCHAR uni02F8 +ENCODING 760 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 7 3 4 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni02F9 +ENCODING 761 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 2 7 +BITMAP +E0 +80 +80 +80 +ENDCHAR +STARTCHAR uni02FA +ENCODING 762 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 2 7 +BITMAP +E0 +20 +20 +20 +ENDCHAR +STARTCHAR uni02FB +ENCODING 763 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 2 0 +BITMAP +80 +80 +80 +E0 +ENDCHAR +STARTCHAR uni02FC +ENCODING 764 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 2 0 +BITMAP +20 +20 +20 +E0 +ENDCHAR +STARTCHAR uni02FD +ENCODING 765 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 -2 +BITMAP +84 +84 +FC +ENDCHAR +STARTCHAR uni02FE +ENCODING 766 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 -2 +BITMAP +80 +80 +FC +ENDCHAR +STARTCHAR uni02FF +ENCODING 767 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 -2 +BITMAP +20 +40 +FC +40 +20 +ENDCHAR +STARTCHAR uni0300 +ENCODING 768 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 -6 12 +BITMAP +C0 +30 +ENDCHAR +STARTCHAR uni0301 +ENCODING 769 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 -6 12 +BITMAP +30 +C0 +ENDCHAR +STARTCHAR uni0302 +ENCODING 770 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 -6 12 +BITMAP +60 +90 +ENDCHAR +STARTCHAR uni0303 +ENCODING 771 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 11 +BITMAP +64 +98 +ENDCHAR +STARTCHAR uni0304 +ENCODING 772 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 1 -7 11 +BITMAP +FC +ENDCHAR +STARTCHAR uni0305 +ENCODING 773 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 -8 11 +BITMAP +FF +ENDCHAR +STARTCHAR uni0306 +ENCODING 774 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 10 +BITMAP +84 +84 +78 +ENDCHAR +STARTCHAR uni0307 +ENCODING 775 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -5 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0308 +ENCODING 776 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 11 +BITMAP +CC +CC +ENDCHAR +STARTCHAR uni0309 +ENCODING 777 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +60 +90 +10 +20 +20 +ENDCHAR +STARTCHAR uni030A +ENCODING 778 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 10 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni030B +ENCODING 779 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -7 12 +BITMAP +66 +88 +ENDCHAR +STARTCHAR uni030C +ENCODING 780 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 10 +BITMAP +84 +48 +30 +ENDCHAR +STARTCHAR uni030D +ENCODING 781 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -4 10 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni030E +ENCODING 782 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -6 10 +BITMAP +90 +90 +90 +ENDCHAR +STARTCHAR uni030F +ENCODING 783 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 12 +BITMAP +CC +22 +ENDCHAR +STARTCHAR uni0310 +ENCODING 784 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -7 10 +BITMAP +30 +B4 +84 +78 +ENDCHAR +STARTCHAR uni0311 +ENCODING 785 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 10 +BITMAP +78 +84 +84 +ENDCHAR +STARTCHAR uni0312 +ENCODING 786 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -5 10 +BITMAP +40 +80 +C0 +ENDCHAR +STARTCHAR uni0313 +ENCODING 787 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -5 10 +BITMAP +C0 +40 +80 +ENDCHAR +STARTCHAR uni0314 +ENCODING 788 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -5 10 +BITMAP +C0 +80 +40 +ENDCHAR +STARTCHAR uni0315 +ENCODING 789 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -2 10 +BITMAP +C0 +40 +80 +ENDCHAR +STARTCHAR uni0316 +ENCODING 790 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -5 -2 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni0317 +ENCODING 791 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 -2 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni0318 +ENCODING 792 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 -2 +BITMAP +20 +E0 +20 +ENDCHAR +STARTCHAR uni0319 +ENCODING 793 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -5 -2 +BITMAP +80 +E0 +80 +ENDCHAR +STARTCHAR uni031A +ENCODING 794 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -5 10 +BITMAP +F0 +10 +10 +ENDCHAR +STARTCHAR uni031B +ENCODING 795 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -4 7 +BITMAP +40 +A0 +20 +40 +80 +ENDCHAR +STARTCHAR uni031C +ENCODING 796 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 -2 +BITMAP +60 +80 +60 +ENDCHAR +STARTCHAR uni031D +ENCODING 797 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 -2 +BITMAP +40 +40 +E0 +ENDCHAR +STARTCHAR uni031E +ENCODING 798 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 -2 +BITMAP +E0 +40 +40 +ENDCHAR +STARTCHAR uni031F +ENCODING 799 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 -2 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni0320 +ENCODING 800 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -6 -2 +BITMAP +F0 +ENDCHAR +STARTCHAR uni0321 +ENCODING 801 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -5 -2 +BITMAP +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni0322 +ENCODING 802 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -4 -2 +BITMAP +80 +80 +90 +60 +ENDCHAR +STARTCHAR uni0323 +ENCODING 803 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -5 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0324 +ENCODING 804 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 -2 +BITMAP +CC +CC +ENDCHAR +STARTCHAR uni0325 +ENCODING 805 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -6 -2 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni0326 +ENCODING 806 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -5 -2 +BITMAP +C0 +40 +80 +ENDCHAR +STARTCHAR uni0327 +ENCODING 807 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 -2 +BITMAP +40 +60 +10 +E0 +ENDCHAR +STARTCHAR uni0328 +ENCODING 808 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -4 -2 +BITMAP +80 +80 +60 +ENDCHAR +STARTCHAR uni0329 +ENCODING 809 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -5 -2 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni032A +ENCODING 810 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 -2 +BITMAP +FC +84 +ENDCHAR +STARTCHAR uni032B +ENCODING 811 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 -2 +BITMAP +92 +92 +6C +ENDCHAR +STARTCHAR uni032C +ENCODING 812 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 -2 +BITMAP +84 +48 +30 +ENDCHAR +STARTCHAR uni032D +ENCODING 813 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 -2 +BITMAP +30 +48 +84 +ENDCHAR +STARTCHAR uni032E +ENCODING 814 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 -2 +BITMAP +84 +84 +78 +ENDCHAR +STARTCHAR uni032F +ENCODING 815 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 -2 +BITMAP +78 +84 +84 +ENDCHAR +STARTCHAR uni0330 +ENCODING 816 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 -2 +BITMAP +64 +98 +ENDCHAR +STARTCHAR uni0331 +ENCODING 817 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 1 -7 -2 +BITMAP +FC +ENDCHAR +STARTCHAR uni0332 +ENCODING 818 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 -8 -2 +BITMAP +FF +ENDCHAR +STARTCHAR uni0333 +ENCODING 819 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -8 -2 +BITMAP +FF +00 +FF +ENDCHAR +STARTCHAR uni0334 +ENCODING 820 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 4 +BITMAP +64 +98 +ENDCHAR +STARTCHAR uni0335 +ENCODING 821 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -6 5 +BITMAP +F0 +ENDCHAR +STARTCHAR uni0336 +ENCODING 822 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 -8 5 +BITMAP +FF +ENDCHAR +STARTCHAR uni0337 +ENCODING 823 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 3 +BITMAP +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni0338 +ENCODING 824 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -7 0 +BITMAP +04 +04 +08 +08 +10 +10 +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni0339 +ENCODING 825 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -5 -2 +BITMAP +C0 +20 +20 +C0 +ENDCHAR +STARTCHAR uni033A +ENCODING 826 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 -2 +BITMAP +84 +FC +ENDCHAR +STARTCHAR uni033B +ENCODING 827 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -6 -2 +BITMAP +F0 +90 +F0 +ENDCHAR +STARTCHAR uni033C +ENCODING 828 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 -2 +BITMAP +6C +92 +10 +ENDCHAR +STARTCHAR uni033D +ENCODING 829 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 11 +BITMAP +CC +30 +CC +ENDCHAR +STARTCHAR uni033E +ENCODING 830 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 5 -5 9 +BITMAP +40 +80 +80 +40 +80 +ENDCHAR +STARTCHAR uni033F +ENCODING 831 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -8 11 +BITMAP +FF +00 +FF +ENDCHAR +STARTCHAR uni0340 +ENCODING 832 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -7 10 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni0341 +ENCODING 833 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -4 10 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni0342 +ENCODING 834 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -7 11 +BITMAP +68 +90 +ENDCHAR +STARTCHAR uni0343 +ENCODING 835 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -5 10 +BITMAP +C0 +40 +80 +ENDCHAR +STARTCHAR uni0344 +ENCODING 836 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -7 10 +BITMAP +20 +20 +A8 +88 +ENDCHAR +STARTCHAR uni0345 +ENCODING 837 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -5 -2 +BITMAP +80 +80 +80 +60 +ENDCHAR +STARTCHAR uni0346 +ENCODING 838 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 11 +BITMAP +FC +84 +ENDCHAR +STARTCHAR uni0347 +ENCODING 839 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 -2 +BITMAP +FC +00 +FC +ENDCHAR +STARTCHAR uni0348 +ENCODING 840 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 -6 -2 +BITMAP +90 +90 +ENDCHAR +STARTCHAR uni0349 +ENCODING 841 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -5 -2 +BITMAP +C0 +40 +ENDCHAR +STARTCHAR uni034A +ENCODING 842 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -7 10 +BITMAP +10 +74 +B8 +20 +ENDCHAR +STARTCHAR uni034B +ENCODING 843 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -8 10 +BITMAP +04 +71 +8E +20 +ENDCHAR +STARTCHAR uni034C +ENCODING 844 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -7 10 +BITMAP +64 +98 +64 +98 +ENDCHAR +STARTCHAR uni034D +ENCODING 845 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -7 -2 +BITMAP +44 +FE +44 +ENDCHAR +STARTCHAR uni034E +ENCODING 846 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -5 -2 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni034F +ENCODING 847 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +B9C2 +4203 +C2E2 +422B +B9C4 +0001 +8240 +0001 +8420 +0001 +8240 +5555 +ENDCHAR +STARTCHAR uni0350 +ENCODING 848 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -4 9 +BITMAP +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uni0351 +ENCODING 849 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -6 10 +BITMAP +60 +80 +80 +60 +ENDCHAR +STARTCHAR uni0352 +ENCODING 850 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -7 10 +BITMAP +78 +84 +B4 +30 +ENDCHAR +STARTCHAR uni0353 +ENCODING 851 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -6 -2 +BITMAP +90 +60 +90 +ENDCHAR +STARTCHAR uni0354 +ENCODING 852 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -6 -2 +BITMAP +20 +40 +80 +40 +20 +ENDCHAR +STARTCHAR uni0355 +ENCODING 853 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -5 -2 +BITMAP +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uni0356 +ENCODING 854 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 -8 -2 +BITMAP +80 +40 +24 +4A +91 +ENDCHAR +STARTCHAR uni0357 +ENCODING 855 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -5 10 +BITMAP +C0 +20 +20 +C0 +ENDCHAR +STARTCHAR uni0358 +ENCODING 856 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -2 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0359 +ENCODING 857 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -7 -2 +BITMAP +A8 +70 +F8 +70 +ENDCHAR +STARTCHAR uni035A +ENCODING 858 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 -2 +BITMAP +6C +92 +6C +ENDCHAR +STARTCHAR uni035B +ENCODING 859 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -6 9 +BITMAP +20 +40 +F8 +10 +20 +ENDCHAR +STARTCHAR uni035C +ENCODING 860 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 3 -7 -2 +BITMAP +8004 +6018 +1FE0 +ENDCHAR +STARTCHAR uni035D +ENCODING 861 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 3 -7 10 +BITMAP +8004 +6018 +1FE0 +ENDCHAR +STARTCHAR uni035E +ENCODING 862 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 1 -5 11 +BITMAP +FFC0 +ENDCHAR +STARTCHAR uni035F +ENCODING 863 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 1 -5 -2 +BITMAP +FFC0 +ENDCHAR +STARTCHAR uni0360 +ENCODING 864 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 3 -7 10 +BITMAP +3C04 +4308 +80F0 +ENDCHAR +STARTCHAR uni0361 +ENCODING 865 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 3 -7 10 +BITMAP +1FE0 +6018 +8004 +ENDCHAR +STARTCHAR uni0362 +ENCODING 866 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 5 -7 -2 +BITMAP +0010 +0018 +FFFC +0018 +0010 +ENDCHAR +STARTCHAR uni0363 +ENCODING 867 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +78 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni0364 +ENCODING 868 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +70 +88 +F0 +80 +78 +ENDCHAR +STARTCHAR uni0365 +ENCODING 869 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -6 9 +BITMAP +40 +00 +C0 +40 +E0 +ENDCHAR +STARTCHAR uni0366 +ENCODING 870 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni0367 +ENCODING 871 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +88 +88 +88 +88 +78 +ENDCHAR +STARTCHAR uni0368 +ENCODING 872 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +70 +80 +80 +80 +70 +ENDCHAR +STARTCHAR uni0369 +ENCODING 873 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +10 +10 +70 +90 +70 +ENDCHAR +STARTCHAR uni036A +ENCODING 874 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +80 +80 +E0 +90 +90 +ENDCHAR +STARTCHAR uni036B +ENCODING 875 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 9 +BITMAP +EC +92 +92 +ENDCHAR +STARTCHAR uni036C +ENCODING 876 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 9 +BITMAP +E0 +90 +80 +80 +ENDCHAR +STARTCHAR uni036D +ENCODING 877 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -7 9 +BITMAP +40 +F0 +40 +40 +30 +ENDCHAR +STARTCHAR uni036E +ENCODING 878 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -7 9 +BITMAP +88 +88 +50 +20 +ENDCHAR +STARTCHAR uni036F +ENCODING 879 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni0370 +ENCODING 880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +80 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0371 +ENCODING 881 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +C0 +20 +20 +3C +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0372 +ENCODING 882 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +92 +92 +92 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0373 +ENCODING 883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +A8 +A8 +A8 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0374 +ENCODING 884 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 6 +BITMAP +30 +60 +40 +80 +ENDCHAR +STARTCHAR uni0375 +ENCODING 885 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 -2 +BITMAP +10 +20 +60 +C0 +ENDCHAR +STARTCHAR uni0376 +ENCODING 886 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +84 +ENDCHAR +STARTCHAR uni0377 +ENCODING 887 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +88 +98 +98 +A8 +A8 +C8 +C8 +88 +ENDCHAR +STARTCHAR uni037A +ENCODING 890 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 2 -2 +BITMAP +80 +80 +80 +60 +ENDCHAR +STARTCHAR uni037B +ENCODING 891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni037C +ENCODING 892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +B0 +B0 +80 +84 +78 +ENDCHAR +STARTCHAR uni037D +ENCODING 893 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +34 +34 +04 +84 +78 +ENDCHAR +STARTCHAR uni037E +ENCODING 894 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 9 3 -1 +BITMAP +C0 +C0 +00 +00 +00 +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uni037F +ENCODING 895 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3E +08 +08 +08 +08 +08 +08 +88 +88 +70 +ENDCHAR +STARTCHAR uni0384 +ENCODING 900 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 3 10 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni0385 +ENCODING 901 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 10 +BITMAP +08 +10 +A8 +88 +ENDCHAR +STARTCHAR uni0386 +ENCODING 902 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +20 +40 +98 +24 +24 +42 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni0387 +ENCODING 903 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 4 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0388 +ENCODING 904 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +20 +40 +BF +20 +20 +20 +3E +20 +20 +20 +20 +3F +ENDCHAR +STARTCHAR uni0389 +ENCODING 905 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +20 +40 +A1 +21 +21 +21 +3F +21 +21 +21 +21 +21 +ENDCHAR +STARTCHAR uni038A +ENCODING 906 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +20 +40 +BE +08 +08 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni038C +ENCODING 908 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +20 +40 +BC +42 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni038E +ENCODING 910 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +20 +40 +C1 +41 +22 +22 +14 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni038F +ENCODING 911 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +20 +40 +BE +41 +41 +41 +41 +41 +22 +14 +14 +77 +ENDCHAR +STARTCHAR uni0390 +ENCODING 912 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 0 +BITMAP +08 +10 +20 +88 +88 +00 +60 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni0391 +ENCODING 913 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0392 +ENCODING 914 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +84 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni0393 +ENCODING 915 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0394 +ENCODING 916 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +FE +ENDCHAR +STARTCHAR uni0395 +ENCODING 917 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni0396 +ENCODING 918 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni0397 +ENCODING 919 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0398 +ENCODING 920 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +B4 +B4 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0399 +ENCODING 921 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni039A +ENCODING 922 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni039B +ENCODING 923 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni039C +ENCODING 924 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +CC +CC +B4 +B4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni039D +ENCODING 925 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +ENDCHAR +STARTCHAR uni039E +ENCODING 926 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +00 +00 +00 +78 +00 +00 +00 +00 +FC +ENDCHAR +STARTCHAR uni039F +ENCODING 927 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni03A0 +ENCODING 928 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +44 +44 +44 +44 +44 +44 +44 +44 +44 +ENDCHAR +STARTCHAR uni03A1 +ENCODING 929 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni03A3 +ENCODING 931 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +40 +20 +10 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni03A4 +ENCODING 932 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni03A5 +ENCODING 933 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni03A6 +ENCODING 934 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +7C +92 +92 +92 +92 +7C +10 +FE +ENDCHAR +STARTCHAR uni03A7 +ENCODING 935 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +48 +48 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni03A8 +ENCODING 936 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +92 +92 +92 +7C +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni03A9 +ENCODING 937 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +82 +82 +82 +44 +28 +28 +EE +ENDCHAR +STARTCHAR uni03AA +ENCODING 938 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +90 +90 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni03AB +ENCODING 939 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +48 +48 +00 +00 +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni03AC +ENCODING 940 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +08 +10 +20 +00 +00 +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni03AD +ENCODING 941 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +08 +10 +20 +00 +00 +7C +80 +80 +78 +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni03AE +ENCODING 942 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +08 +10 +20 +00 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni03AF +ENCODING 943 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 0 +BITMAP +10 +20 +40 +00 +00 +C0 +40 +40 +40 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni03B0 +ENCODING 944 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +08 +10 +20 +88 +88 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni03B1 +ENCODING 945 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni03B2 +ENCODING 946 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +70 +88 +88 +88 +F8 +84 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni03B3 +ENCODING 947 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +44 +44 +28 +28 +28 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni03B4 +ENCODING 948 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +40 +40 +40 +30 +48 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni03B5 +ENCODING 949 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +78 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni03B6 +ENCODING 950 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +FE +0C +30 +40 +40 +80 +80 +80 +40 +38 +04 +38 +ENDCHAR +STARTCHAR uni03B7 +ENCODING 951 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni03B8 +ENCODING 952 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +84 +FC +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni03B9 +ENCODING 953 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +C0 +40 +40 +40 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni03BA +ENCODING 954 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +88 +90 +A0 +C0 +C0 +A0 +90 +88 +ENDCHAR +STARTCHAR uni03BB +ENCODING 955 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +40 +20 +20 +10 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni03BC +ENCODING 956 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +CC +B2 +80 +80 +ENDCHAR +STARTCHAR uni03BD +ENCODING 957 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +88 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni03BE +ENCODING 958 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +60 +80 +80 +70 +80 +80 +80 +40 +38 +04 +38 +ENDCHAR +STARTCHAR uni03BF +ENCODING 959 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni03C0 +ENCODING 960 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +48 +48 +48 +48 +48 +48 +48 +ENDCHAR +STARTCHAR uni03C1 +ENCODING 961 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +84 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni03C2 +ENCODING 962 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +3C +40 +80 +80 +80 +80 +40 +38 +04 +38 +ENDCHAR +STARTCHAR uni03C3 +ENCODING 963 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7E +90 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni03C4 +ENCODING 964 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni03C5 +ENCODING 965 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni03C6 +ENCODING 966 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +4C +92 +92 +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni03C7 +ENCODING 967 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +C1 +21 +12 +14 +18 +28 +48 +44 +84 +83 +ENDCHAR +STARTCHAR uni03C8 +ENCODING 968 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +92 +92 +92 +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni03C9 +ENCODING 969 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +44 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni03CA +ENCODING 970 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 0 +BITMAP +90 +90 +00 +00 +C0 +40 +40 +40 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni03CB +ENCODING 971 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni03CC +ENCODING 972 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +08 +10 +20 +00 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni03CD +ENCODING 973 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +08 +10 +20 +00 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni03CE +ENCODING 974 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +08 +10 +20 +00 +00 +44 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni03CF +ENCODING 975 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +84 +08 +10 +ENDCHAR +STARTCHAR uni03D0 +ENCODING 976 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +84 +88 +F0 +88 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni03D1 +ENCODING 977 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +18 +24 +24 +24 +1E +44 +C4 +44 +44 +38 +ENDCHAR +STARTCHAR uni03D2 +ENCODING 978 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +6C +AA +28 +28 +10 +10 +10 +10 +10 +38 +ENDCHAR +STARTCHAR uni03D3 +ENCODING 979 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +20 +40 +B6 +55 +14 +14 +08 +08 +08 +08 +08 +1C +ENDCHAR +STARTCHAR uni03D4 +ENCODING 980 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +6C +6C +00 +6C +AA +28 +28 +10 +10 +10 +10 +10 +38 +ENDCHAR +STARTCHAR uni03D5 +ENCODING 981 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +10 +10 +7C +92 +92 +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni03D6 +ENCODING 982 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +44 +82 +82 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni03D7 +ENCODING 983 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +82 +44 +2C +2C +34 +34 +22 +41 +02 +0C +ENDCHAR +STARTCHAR uni03D8 +ENCODING 984 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +30 +78 +ENDCHAR +STARTCHAR uni03D9 +ENCODING 985 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +84 +84 +84 +84 +78 +30 +30 +ENDCHAR +STARTCHAR uni03DA +ENCODING 986 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +38 +44 +82 +80 +80 +80 +80 +80 +40 +38 +04 +38 +ENDCHAR +STARTCHAR uni03DB +ENCODING 987 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +02 +04 +38 +40 +80 +80 +80 +80 +40 +38 +04 +38 +ENDCHAR +STARTCHAR uni03DC +ENCODING 988 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +80 +80 +F0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni03DD +ENCODING 989 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 -2 +BITMAP +F0 +88 +80 +80 +E0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni03DE +ENCODING 990 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C0 +40 +40 +40 +40 +7C +08 +08 +10 +10 +ENDCHAR +STARTCHAR uni03DF +ENCODING 991 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +40 +20 +20 +44 +78 +88 +10 +10 +10 +0C +ENDCHAR +STARTCHAR uni03E0 +ENCODING 992 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +78 +84 +0C +12 +22 +06 +0A +12 +02 +04 +ENDCHAR +STARTCHAR uni03E1 +ENCODING 993 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 -2 +BITMAP +C0 +20 +30 +50 +88 +18 +28 +48 +08 +10 +ENDCHAR +STARTCHAR uni03E2 +ENCODING 994 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +44 +92 +92 +92 +92 +92 +92 +92 +92 +6E +02 +1C +ENDCHAR +STARTCHAR uni03E3 +ENCODING 995 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +44 +92 +92 +92 +92 +92 +92 +6E +02 +1C +ENDCHAR +STARTCHAR uni03E4 +ENCODING 996 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +44 +84 +84 +84 +84 +8C +74 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni03E5 +ENCODING 997 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 -2 +BITMAP +48 +88 +88 +88 +88 +78 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni03E6 +ENCODING 998 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +80 +80 +80 +B8 +C4 +82 +82 +82 +82 +82 +04 +38 +ENDCHAR +STARTCHAR uni03E7 +ENCODING 999 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +80 +80 +80 +B8 +C4 +82 +82 +82 +04 +38 +ENDCHAR +STARTCHAR uni03E8 +ENCODING 1000 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +78 +84 +84 +04 +08 +10 +20 +40 +80 +80 +86 +78 +ENDCHAR +STARTCHAR uni03E9 +ENCODING 1001 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +78 +84 +84 +08 +10 +20 +40 +80 +86 +78 +ENDCHAR +STARTCHAR uni03EA +ENCODING 1002 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -1 +BITMAP +C3 +A5 +24 +18 +18 +24 +24 +42 +42 +7E +81 +ENDCHAR +STARTCHAR uni03EB +ENCODING 1003 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +48 +B4 +30 +30 +30 +48 +84 +FC +ENDCHAR +STARTCHAR uni03EC +ENCODING 1004 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +80 +B8 +C4 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni03ED +ENCODING 1005 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +82 +80 +B8 +C4 +84 +84 +78 +ENDCHAR +STARTCHAR uni03EE +ENCODING 1006 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +10 +10 +FE +92 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni03EF +ENCODING 1007 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +10 +10 +FE +92 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni03F0 +ENCODING 1008 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +82 +44 +2C +2C +34 +34 +22 +41 +ENDCHAR +STARTCHAR uni03F1 +ENCODING 1009 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +78 +84 +84 +84 +F8 +80 +80 +78 +04 +ENDCHAR +STARTCHAR uni03F2 +ENCODING 1010 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni03F3 +ENCODING 1011 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 -2 +BITMAP +08 +08 +00 +18 +08 +08 +08 +08 +08 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni03F4 +ENCODING 1012 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +FC +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni03F5 +ENCODING 1013 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +38 +40 +80 +F0 +80 +80 +40 +38 +ENDCHAR +STARTCHAR uni03F6 +ENCODING 1014 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +E0 +10 +08 +78 +08 +08 +10 +E0 +ENDCHAR +STARTCHAR uni03F7 +ENCODING 1015 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +80 +F0 +88 +84 +84 +84 +84 +84 +88 +F0 +80 +80 +ENDCHAR +STARTCHAR uni03F8 +ENCODING 1016 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +80 +80 +B8 +C4 +84 +84 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni03F9 +ENCODING 1017 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni03FA +ENCODING 1018 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +CC +CC +B4 +B4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni03FB +ENCODING 1019 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +88 +D8 +D8 +A8 +88 +88 +88 +86 +80 +80 +ENDCHAR +STARTCHAR uni03FC +ENCODING 1020 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +3C +42 +42 +42 +42 +62 +5C +40 +F8 +40 +ENDCHAR +STARTCHAR uni03FD +ENCODING 1021 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +04 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni03FE +ENCODING 1022 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +B0 +B0 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni03FF +ENCODING 1023 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +34 +34 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0400 +ENCODING 1024 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +60 +18 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni0401 +ENCODING 1025 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni0402 +ENCODING 1026 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +20 +20 +20 +3C +22 +22 +22 +22 +2C +ENDCHAR +STARTCHAR uni0403 +ENCODING 1027 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +00 +FC +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0404 +ENCODING 1028 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +80 +80 +F8 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni0405 +ENCODING 1029 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0406 +ENCODING 1030 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni0407 +ENCODING 1031 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +90 +90 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni0408 +ENCODING 1032 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +1C +08 +08 +08 +08 +08 +08 +88 +88 +70 +ENDCHAR +STARTCHAR uni0409 +ENCODING 1033 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +78 +48 +48 +48 +4E +49 +49 +49 +49 +8E +ENDCHAR +STARTCHAR uni040A +ENCODING 1034 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +90 +90 +90 +90 +FC +92 +92 +92 +92 +9C +ENDCHAR +STARTCHAR uni040B +ENCODING 1035 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +20 +20 +20 +3C +22 +22 +22 +22 +22 +ENDCHAR +STARTCHAR uni040C +ENCODING 1036 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +60 +00 +00 +8C +90 +90 +A0 +A0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni040D +ENCODING 1037 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +60 +18 +00 +84 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +84 +ENDCHAR +STARTCHAR uni040E +ENCODING 1038 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +84 +84 +78 +00 +82 +82 +44 +44 +28 +28 +10 +10 +20 +60 +ENDCHAR +STARTCHAR uni040F +ENCODING 1039 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +82 +82 +82 +82 +82 +82 +82 +82 +82 +FE +10 +10 +ENDCHAR +STARTCHAR uni0410 +ENCODING 1040 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0411 +ENCODING 1041 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +80 +80 +80 +F8 +84 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni0412 +ENCODING 1042 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +84 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni0413 +ENCODING 1043 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0414 +ENCODING 1044 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +0E +12 +12 +12 +22 +22 +22 +42 +42 +FF +81 +81 +ENDCHAR +STARTCHAR uni0415 +ENCODING 1045 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni0416 +ENCODING 1046 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +54 +54 +38 +38 +54 +54 +92 +92 +ENDCHAR +STARTCHAR uni0417 +ENCODING 1047 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +04 +78 +08 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni0418 +ENCODING 1048 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +84 +ENDCHAR +STARTCHAR uni0419 +ENCODING 1049 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +48 +30 +00 +84 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +84 +ENDCHAR +STARTCHAR uni041A +ENCODING 1050 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +8C +90 +90 +A0 +A0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni041B +ENCODING 1051 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +3C +24 +24 +24 +24 +24 +24 +44 +44 +84 +ENDCHAR +STARTCHAR uni041C +ENCODING 1052 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +CC +CC +B4 +B4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni041D +ENCODING 1053 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni041E +ENCODING 1054 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni041F +ENCODING 1055 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +84 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0420 +ENCODING 1056 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0421 +ENCODING 1057 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0422 +ENCODING 1058 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0423 +ENCODING 1059 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +44 +28 +28 +10 +10 +20 +60 +ENDCHAR +STARTCHAR uni0424 +ENCODING 1060 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +7C +92 +92 +92 +92 +92 +7C +10 +10 +10 +ENDCHAR +STARTCHAR uni0425 +ENCODING 1061 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +48 +48 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni0426 +ENCODING 1062 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +FE +02 +02 +ENDCHAR +STARTCHAR uni0427 +ENCODING 1063 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +8C +74 +04 +04 +04 +ENDCHAR +STARTCHAR uni0428 +ENCODING 1064 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni0429 +ENCODING 1065 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +92 +FF +01 +01 +ENDCHAR +STARTCHAR uni042A +ENCODING 1066 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +E0 +20 +20 +20 +3C +22 +22 +22 +22 +3C +ENDCHAR +STARTCHAR uni042B +ENCODING 1067 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +E4 +94 +94 +94 +94 +E4 +ENDCHAR +STARTCHAR uni042C +ENCODING 1068 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +F8 +84 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni042D +ENCODING 1069 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +04 +04 +7C +04 +04 +04 +88 +70 +ENDCHAR +STARTCHAR uni042E +ENCODING 1070 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +98 +A4 +A4 +A4 +E4 +A4 +A4 +A4 +A4 +98 +ENDCHAR +STARTCHAR uni042F +ENCODING 1071 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +7C +84 +84 +84 +7C +24 +44 +44 +84 +84 +ENDCHAR +STARTCHAR uni0430 +ENCODING 1072 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0431 +ENCODING 1073 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +04 +38 +40 +80 +F8 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0432 +ENCODING 1074 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +84 +84 +F8 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni0433 +ENCODING 1075 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0434 +ENCODING 1076 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +3C +24 +44 +44 +84 +84 +84 +FE +82 +ENDCHAR +STARTCHAR uni0435 +ENCODING 1077 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0436 +ENCODING 1078 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +92 +92 +54 +38 +38 +54 +92 +92 +ENDCHAR +STARTCHAR uni0437 +ENCODING 1079 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +78 +08 +04 +84 +78 +ENDCHAR +STARTCHAR uni0438 +ENCODING 1080 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +8C +8C +94 +94 +A4 +A4 +C4 +C4 +ENDCHAR +STARTCHAR uni0439 +ENCODING 1081 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +30 +00 +00 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +ENDCHAR +STARTCHAR uni043A +ENCODING 1082 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +8C +90 +A0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni043B +ENCODING 1083 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +3C +24 +24 +24 +24 +44 +44 +84 +ENDCHAR +STARTCHAR uni043C +ENCODING 1084 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +CC +CC +B4 +B4 +84 +84 +84 +ENDCHAR +STARTCHAR uni043D +ENCODING 1085 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni043E +ENCODING 1086 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni043F +ENCODING 1087 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0440 +ENCODING 1088 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni0441 +ENCODING 1089 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0442 +ENCODING 1090 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0443 +ENCODING 1091 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +48 +48 +30 +30 +20 +20 +40 +C0 +ENDCHAR +STARTCHAR uni0444 +ENCODING 1092 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +10 +10 +10 +7C +92 +92 +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni0445 +ENCODING 1093 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +48 +30 +30 +48 +84 +84 +ENDCHAR +STARTCHAR uni0446 +ENCODING 1094 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +84 +FE +02 +02 +ENDCHAR +STARTCHAR uni0447 +ENCODING 1095 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +8C +74 +04 +04 +ENDCHAR +STARTCHAR uni0448 +ENCODING 1096 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni0449 +ENCODING 1097 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +92 +92 +92 +92 +92 +92 +92 +FF +01 +01 +ENDCHAR +STARTCHAR uni044A +ENCODING 1098 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +E0 +20 +20 +3C +22 +22 +22 +3C +ENDCHAR +STARTCHAR uni044B +ENCODING 1099 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +E4 +94 +94 +94 +E4 +ENDCHAR +STARTCHAR uni044C +ENCODING 1100 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +80 +80 +F8 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni044D +ENCODING 1101 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +70 +88 +04 +7C +04 +04 +88 +70 +ENDCHAR +STARTCHAR uni044E +ENCODING 1102 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +98 +A4 +A4 +E4 +A4 +A4 +A4 +98 +ENDCHAR +STARTCHAR uni044F +ENCODING 1103 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +7C +84 +84 +84 +7C +24 +44 +84 +ENDCHAR +STARTCHAR uni0450 +ENCODING 1104 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +60 +18 +00 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0451 +ENCODING 1105 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0452 +ENCODING 1106 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +40 +F0 +40 +5C +62 +42 +42 +42 +42 +42 +42 +02 +0C +ENDCHAR +STARTCHAR uni0453 +ENCODING 1107 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +18 +60 +00 +00 +FC +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0454 +ENCODING 1108 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +38 +44 +80 +F8 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni0455 +ENCODING 1109 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uni0456 +ENCODING 1110 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +20 +20 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni0457 +ENCODING 1111 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +90 +90 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni0458 +ENCODING 1112 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 -2 +BITMAP +08 +08 +00 +18 +08 +08 +08 +08 +08 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni0459 +ENCODING 1113 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +78 +48 +48 +4E +49 +49 +49 +8E +ENDCHAR +STARTCHAR uni045A +ENCODING 1114 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +90 +90 +90 +FC +92 +92 +92 +9C +ENDCHAR +STARTCHAR uni045B +ENCODING 1115 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +40 +F0 +40 +5C +62 +42 +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni045C +ENCODING 1116 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +18 +60 +00 +00 +8C +90 +A0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni045D +ENCODING 1117 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +60 +18 +00 +00 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +ENDCHAR +STARTCHAR uni045E +ENCODING 1118 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +84 +84 +78 +00 +00 +84 +84 +48 +48 +30 +30 +20 +20 +40 +C0 +ENDCHAR +STARTCHAR uni045F +ENCODING 1119 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 -2 +BITMAP +88 +88 +88 +88 +88 +88 +88 +F8 +20 +20 +ENDCHAR +STARTCHAR uni0460 +ENCODING 1120 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +B4 +48 +ENDCHAR +STARTCHAR uni0461 +ENCODING 1121 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +92 +92 +92 +92 +92 +B4 +48 +ENDCHAR +STARTCHAR uni0462 +ENCODING 1122 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +20 +F8 +20 +20 +3C +22 +22 +22 +22 +3C +ENDCHAR +STARTCHAR uni0463 +ENCODING 1123 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +40 +F0 +40 +40 +78 +44 +44 +44 +78 +ENDCHAR +STARTCHAR uni0464 +ENCODING 1124 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +8C +92 +A0 +A0 +FC +A0 +A0 +A0 +92 +8C +ENDCHAR +STARTCHAR uni0465 +ENCODING 1125 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +8C +92 +A0 +FC +A0 +A0 +92 +8C +ENDCHAR +STARTCHAR uni0466 +ENCODING 1126 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +6C +54 +92 +92 +92 +ENDCHAR +STARTCHAR uni0467 +ENCODING 1127 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +10 +28 +28 +44 +6C +92 +92 +92 +ENDCHAR +STARTCHAR uni0468 +ENCODING 1128 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +90 +90 +A8 +A8 +A4 +EC +D4 +92 +92 +92 +ENDCHAR +STARTCHAR uni0469 +ENCODING 1129 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +90 +A8 +A8 +A4 +EC +92 +92 +92 +ENDCHAR +STARTCHAR uni046A +ENCODING 1130 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +44 +44 +28 +10 +38 +54 +92 +92 +92 +ENDCHAR +STARTCHAR uni046B +ENCODING 1131 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +44 +28 +10 +7C +92 +92 +92 +ENDCHAR +STARTCHAR uni046C +ENCODING 1132 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +BE +A2 +A2 +94 +E8 +9C +AA +AA +AA +AA +ENDCHAR +STARTCHAR uni046D +ENCODING 1133 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +BE +A2 +94 +E8 +9C +AA +AA +AA +ENDCHAR +STARTCHAR uni046E +ENCODING 1134 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +48 +30 +78 +84 +04 +04 +78 +08 +04 +04 +04 +78 +80 +80 +ENDCHAR +STARTCHAR uni046F +ENCODING 1135 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +48 +30 +00 +78 +84 +04 +78 +08 +04 +04 +78 +80 +80 +ENDCHAR +STARTCHAR uni0470 +ENCODING 1136 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +92 +92 +92 +7C +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0471 +ENCODING 1137 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +92 +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni0472 +ENCODING 1138 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +FC +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0473 +ENCODING 1139 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +FC +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0474 +ENCODING 1140 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +86 +88 +88 +88 +50 +50 +50 +20 +20 +20 +ENDCHAR +STARTCHAR uni0475 +ENCODING 1141 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +8C +90 +90 +50 +50 +50 +20 +20 +ENDCHAR +STARTCHAR uni0476 +ENCODING 1142 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +CC +22 +00 +00 +86 +88 +88 +88 +50 +50 +50 +20 +20 +20 +ENDCHAR +STARTCHAR uni0477 +ENCODING 1143 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +CC +22 +00 +00 +8C +90 +90 +50 +50 +50 +20 +20 +ENDCHAR +STARTCHAR uni0478 +ENCODING 1144 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +40 +A0 +B2 +B2 +B2 +AA +AC +A8 +A8 +48 +10 +10 +ENDCHAR +STARTCHAR uni0479 +ENCODING 1145 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +52 +B2 +B2 +AA +AC +A8 +A8 +48 +10 +10 +ENDCHAR +STARTCHAR uni047A +ENCODING 1146 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +10 +7C +92 +82 +82 +82 +82 +82 +82 +92 +7C +10 +ENDCHAR +STARTCHAR uni047B +ENCODING 1147 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +10 +7C +92 +82 +82 +82 +82 +92 +7C +10 +ENDCHAR +STARTCHAR uni047C +ENCODING 1148 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +78 +86 +30 +08 +10 +00 +6C +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni047D +ENCODING 1149 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +78 +86 +30 +08 +10 +00 +6C +82 +92 +92 +6C +ENDCHAR +STARTCHAR uni047E +ENCODING 1150 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +FE +10 +00 +92 +92 +92 +92 +92 +92 +92 +92 +B4 +48 +ENDCHAR +STARTCHAR uni047F +ENCODING 1151 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +00 +92 +92 +92 +92 +92 +B4 +48 +ENDCHAR +STARTCHAR uni0480 +ENCODING 1152 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +80 +80 +80 +80 +80 +78 +08 +08 +08 +ENDCHAR +STARTCHAR uni0481 +ENCODING 1153 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +80 +80 +80 +78 +08 +08 +08 +ENDCHAR +STARTCHAR uni0482 +ENCODING 1154 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +24 +18 +88 +54 +22 +30 +48 +ENDCHAR +STARTCHAR uni0483 +ENCODING 1155 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -7 10 +BITMAP +10 +F0 +80 +ENDCHAR +STARTCHAR uni0484 +ENCODING 1156 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -5 10 +BITMAP +10 +28 +48 +80 +ENDCHAR +STARTCHAR uni0485 +ENCODING 1157 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -7 10 +BITMAP +70 +80 +60 +ENDCHAR +STARTCHAR uni0486 +ENCODING 1158 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -6 10 +BITMAP +E0 +10 +60 +ENDCHAR +STARTCHAR uni0487 +ENCODING 1159 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -8 10 +BITMAP +30 +4C +83 +ENDCHAR +STARTCHAR uni0488 +ENCODING 1160 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 14 -12 -2 +BITMAP +0100 +0280 +1010 +2828 +0000 +0000 +4008 +A014 +0000 +0000 +0000 +1010 +2928 +0280 +ENDCHAR +STARTCHAR uni0489 +ENCODING 1161 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 14 -11 -2 +BITMAP +0100 +2108 +1310 +1860 +0000 +0000 +0010 +E01C +2000 +0000 +0000 +19B0 +1110 +2108 +ENDCHAR +STARTCHAR uni048A +ENCODING 1162 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -2 +BITMAP +48 +30 +00 +84 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +86 +04 +08 +ENDCHAR +STARTCHAR uni048B +ENCODING 1163 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +48 +30 +00 +00 +8C +8C +94 +94 +A4 +A4 +C4 +C6 +04 +08 +ENDCHAR +STARTCHAR uni048C +ENCODING 1164 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +E0 +40 +40 +40 +78 +44 +44 +4C +78 +ENDCHAR +STARTCHAR uni048D +ENCODING 1165 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +40 +E0 +40 +78 +44 +44 +78 +ENDCHAR +STARTCHAR uni048E +ENCODING 1166 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +94 +88 +F4 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni048F +ENCODING 1167 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +94 +C8 +B4 +80 +80 +ENDCHAR +STARTCHAR uni0490 +ENCODING 1168 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +04 +04 +FC +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0491 +ENCODING 1169 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +FC +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0492 +ENCODING 1170 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3E +20 +20 +20 +20 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0493 +ENCODING 1171 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +3E +20 +20 +20 +F8 +20 +20 +20 +ENDCHAR +STARTCHAR uni0494 +ENCODING 1172 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +FC +80 +80 +80 +80 +F8 +84 +84 +84 +84 +18 +ENDCHAR +STARTCHAR uni0495 +ENCODING 1173 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +FC +80 +80 +80 +F8 +84 +84 +84 +18 +ENDCHAR +STARTCHAR uni0496 +ENCODING 1174 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +92 +92 +54 +54 +38 +38 +54 +54 +92 +92 +02 +02 +ENDCHAR +STARTCHAR uni0497 +ENCODING 1175 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +92 +92 +54 +38 +38 +54 +92 +92 +02 +02 +ENDCHAR +STARTCHAR uni0498 +ENCODING 1176 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +04 +04 +78 +08 +04 +04 +84 +78 +10 +60 +ENDCHAR +STARTCHAR uni0499 +ENCODING 1177 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +04 +78 +08 +04 +84 +78 +10 +60 +ENDCHAR +STARTCHAR uni049A +ENCODING 1178 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +8C +90 +90 +A0 +A0 +C0 +A0 +90 +88 +84 +04 +04 +ENDCHAR +STARTCHAR uni049B +ENCODING 1179 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +8C +90 +A0 +C0 +A0 +90 +88 +84 +04 +04 +ENDCHAR +STARTCHAR uni049C +ENCODING 1180 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +86 +88 +A8 +A8 +F0 +A8 +A8 +A8 +84 +82 +ENDCHAR +STARTCHAR uni049D +ENCODING 1181 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +86 +A8 +A8 +F0 +A8 +A8 +84 +82 +ENDCHAR +STARTCHAR uni049E +ENCODING 1182 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +46 +E8 +48 +50 +50 +60 +50 +48 +44 +42 +ENDCHAR +STARTCHAR uni049F +ENCODING 1183 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +46 +E8 +50 +60 +50 +48 +44 +42 +ENDCHAR +STARTCHAR uni04A0 +ENCODING 1184 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +E3 +24 +24 +28 +28 +30 +28 +24 +22 +21 +ENDCHAR +STARTCHAR uni04A1 +ENCODING 1185 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +E3 +24 +28 +30 +28 +24 +22 +21 +ENDCHAR +STARTCHAR uni04A2 +ENCODING 1186 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +86 +02 +02 +ENDCHAR +STARTCHAR uni04A3 +ENCODING 1187 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +84 +84 +84 +FC +84 +84 +84 +86 +02 +02 +ENDCHAR +STARTCHAR uni04A4 +ENCODING 1188 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +8E +88 +88 +88 +F8 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni04A5 +ENCODING 1189 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +8E +88 +88 +F8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni04A6 +ENCODING 1190 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +F0 +90 +90 +90 +90 +9C +92 +92 +92 +92 +02 +0C +ENDCHAR +STARTCHAR uni04A7 +ENCODING 1191 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +F0 +90 +90 +90 +9C +92 +92 +92 +02 +0C +ENDCHAR +STARTCHAR uni04A8 +ENCODING 1192 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +40 +98 +A4 +A4 +A4 +A4 +A4 +A4 +A4 +58 +30 +0C +ENDCHAR +STARTCHAR uni04A9 +ENCODING 1193 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +40 +98 +A4 +A4 +A4 +A4 +58 +30 +0C +ENDCHAR +STARTCHAR uni04AA +ENCODING 1194 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +10 +60 +ENDCHAR +STARTCHAR uni04AB +ENCODING 1195 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +80 +80 +84 +84 +78 +10 +60 +ENDCHAR +STARTCHAR uni04AC +ENCODING 1196 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +18 +08 +08 +ENDCHAR +STARTCHAR uni04AD +ENCODING 1197 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +FE +10 +10 +10 +10 +10 +10 +18 +08 +08 +ENDCHAR +STARTCHAR uni04AE +ENCODING 1198 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni04AF +ENCODING 1199 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 -2 +BITMAP +88 +88 +88 +50 +50 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni04B0 +ENCODING 1200 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +44 +28 +10 +10 +7C +10 +10 +ENDCHAR +STARTCHAR uni04B1 +ENCODING 1201 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 -2 +BITMAP +88 +88 +88 +50 +50 +20 +F8 +20 +20 +20 +ENDCHAR +STARTCHAR uni04B2 +ENCODING 1202 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +84 +84 +48 +48 +30 +30 +48 +48 +84 +86 +02 +02 +ENDCHAR +STARTCHAR uni04B3 +ENCODING 1203 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +84 +84 +48 +30 +30 +48 +84 +86 +02 +02 +ENDCHAR +STARTCHAR uni04B4 +ENCODING 1204 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +FA +22 +22 +22 +22 +22 +22 +22 +22 +3F +01 +01 +ENDCHAR +STARTCHAR uni04B5 +ENCODING 1205 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +FA +22 +22 +22 +22 +22 +22 +3F +01 +01 +ENDCHAR +STARTCHAR uni04B6 +ENCODING 1206 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +84 +84 +84 +84 +84 +8C +74 +04 +04 +06 +02 +02 +ENDCHAR +STARTCHAR uni04B7 +ENCODING 1207 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +84 +84 +84 +84 +8C +74 +04 +06 +02 +02 +ENDCHAR +STARTCHAR uni04B8 +ENCODING 1208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +A4 +AC +74 +24 +24 +04 +ENDCHAR +STARTCHAR uni04B9 +ENCODING 1209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +A4 +AC +74 +24 +04 +ENDCHAR +STARTCHAR uni04BA +ENCODING 1210 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni04BB +ENCODING 1211 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +80 +B8 +C4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni04BC +ENCODING 1212 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +98 +A4 +A4 +A4 +7C +20 +20 +24 +24 +18 +ENDCHAR +STARTCHAR uni04BD +ENCODING 1213 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +98 +A4 +A4 +7C +20 +20 +24 +18 +ENDCHAR +STARTCHAR uni04BE +ENCODING 1214 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +98 +A4 +A4 +A4 +7C +20 +20 +24 +24 +18 +10 +10 +ENDCHAR +STARTCHAR uni04BF +ENCODING 1215 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +98 +A4 +A4 +7C +20 +20 +24 +18 +10 +10 +ENDCHAR +STARTCHAR uni04C0 +ENCODING 1216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni04C1 +ENCODING 1217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +82 +82 +7C +00 +92 +92 +54 +54 +38 +38 +54 +54 +92 +92 +ENDCHAR +STARTCHAR uni04C2 +ENCODING 1218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +44 +44 +38 +00 +00 +92 +92 +54 +38 +38 +54 +92 +92 +ENDCHAR +STARTCHAR uni04C3 +ENCODING 1219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +8C +90 +90 +A0 +C0 +F8 +84 +84 +84 +84 +04 +18 +ENDCHAR +STARTCHAR uni04C4 +ENCODING 1220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +8C +90 +A0 +C0 +F8 +84 +84 +84 +04 +18 +ENDCHAR +STARTCHAR uni04C5 +ENCODING 1221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +3C +24 +24 +24 +24 +24 +24 +44 +44 +86 +04 +08 +ENDCHAR +STARTCHAR uni04C6 +ENCODING 1222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +3C +24 +24 +24 +24 +44 +44 +86 +04 +08 +ENDCHAR +STARTCHAR uni04C7 +ENCODING 1223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +04 +18 +ENDCHAR +STARTCHAR uni04C8 +ENCODING 1224 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +84 +FC +84 +84 +84 +84 +04 +18 +ENDCHAR +STARTCHAR uni04C9 +ENCODING 1225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +86 +04 +08 +ENDCHAR +STARTCHAR uni04CA +ENCODING 1226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +84 +84 +84 +FC +84 +84 +84 +86 +04 +08 +ENDCHAR +STARTCHAR uni04CB +ENCODING 1227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +84 +84 +84 +8C +74 +04 +04 +0C +08 +08 +ENDCHAR +STARTCHAR uni04CC +ENCODING 1228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +84 +84 +8C +74 +04 +0C +08 +08 +ENDCHAR +STARTCHAR uni04CD +ENCODING 1229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +84 +84 +CC +CC +B4 +B4 +84 +84 +84 +86 +04 +08 +ENDCHAR +STARTCHAR uni04CE +ENCODING 1230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +84 +CC +CC +B4 +B4 +84 +84 +86 +04 +08 +ENDCHAR +STARTCHAR uni04CF +ENCODING 1231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 0 +BITMAP +E0 +40 +40 +40 +40 +40 +40 +40 +40 +E0 +ENDCHAR +STARTCHAR uni04D0 +ENCODING 1232 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +84 +84 +78 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni04D1 +ENCODING 1233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +84 +84 +78 +00 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni04D2 +ENCODING 1234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni04D3 +ENCODING 1235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni04D4 +ENCODING 1236 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3E +50 +90 +90 +FE +90 +90 +90 +90 +9E +ENDCHAR +STARTCHAR uni04D5 +ENCODING 1237 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +92 +12 +7E +90 +90 +92 +7C +ENDCHAR +STARTCHAR uni04D6 +ENCODING 1238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +84 +84 +78 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni04D7 +ENCODING 1239 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +84 +84 +78 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni04D8 +ENCODING 1240 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +04 +04 +FC +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni04D9 +ENCODING 1241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +04 +FC +84 +84 +78 +ENDCHAR +STARTCHAR uni04DA +ENCODING 1242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +30 +48 +84 +04 +04 +FC +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni04DB +ENCODING 1243 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +04 +04 +FC +84 +84 +78 +ENDCHAR +STARTCHAR uni04DC +ENCODING 1244 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +48 +48 +00 +00 +92 +92 +54 +54 +38 +38 +54 +54 +92 +92 +ENDCHAR +STARTCHAR uni04DD +ENCODING 1245 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +48 +48 +00 +00 +92 +92 +54 +38 +38 +54 +92 +92 +ENDCHAR +STARTCHAR uni04DE +ENCODING 1246 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +04 +04 +78 +08 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni04DF +ENCODING 1247 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +04 +78 +08 +04 +84 +78 +ENDCHAR +STARTCHAR uni04E0 +ENCODING 1248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +08 +10 +20 +38 +04 +04 +04 +8C +78 +ENDCHAR +STARTCHAR uni04E1 +ENCODING 1249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +7C +08 +10 +20 +38 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni04E2 +ENCODING 1250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +78 +00 +00 +84 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +84 +ENDCHAR +STARTCHAR uni04E3 +ENCODING 1251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +78 +00 +00 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +ENDCHAR +STARTCHAR uni04E4 +ENCODING 1252 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +84 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +84 +ENDCHAR +STARTCHAR uni04E5 +ENCODING 1253 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +ENDCHAR +STARTCHAR uni04E6 +ENCODING 1254 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni04E7 +ENCODING 1255 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni04E8 +ENCODING 1256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +FC +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni04E9 +ENCODING 1257 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +FC +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni04EA +ENCODING 1258 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +84 +84 +FC +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni04EB +ENCODING 1259 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +78 +84 +84 +FC +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni04EC +ENCODING 1260 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +00 +78 +84 +04 +04 +7C +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni04ED +ENCODING 1261 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +48 +00 +78 +84 +04 +3C +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni04EE +ENCODING 1262 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +7C +00 +00 +82 +82 +44 +44 +28 +28 +10 +10 +20 +60 +ENDCHAR +STARTCHAR uni04EF +ENCODING 1263 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +78 +00 +00 +84 +84 +48 +48 +30 +30 +20 +20 +40 +C0 +ENDCHAR +STARTCHAR uni04F0 +ENCODING 1264 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +48 +48 +00 +00 +82 +82 +44 +44 +28 +28 +10 +10 +20 +60 +ENDCHAR +STARTCHAR uni04F1 +ENCODING 1265 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +48 +48 +00 +00 +84 +84 +48 +48 +30 +30 +20 +20 +40 +C0 +ENDCHAR +STARTCHAR uni04F2 +ENCODING 1266 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +66 +88 +00 +00 +82 +82 +44 +44 +28 +28 +10 +10 +20 +60 +ENDCHAR +STARTCHAR uni04F3 +ENCODING 1267 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +66 +88 +00 +00 +84 +84 +48 +48 +30 +30 +20 +20 +40 +C0 +ENDCHAR +STARTCHAR uni04F4 +ENCODING 1268 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +84 +84 +84 +84 +84 +8C +74 +04 +04 +04 +ENDCHAR +STARTCHAR uni04F5 +ENCODING 1269 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +84 +84 +84 +84 +8C +74 +04 +04 +ENDCHAR +STARTCHAR uni04F6 +ENCODING 1270 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +80 +80 +80 +80 +80 +80 +80 +80 +C0 +40 +40 +ENDCHAR +STARTCHAR uni04F7 +ENCODING 1271 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +80 +80 +80 +80 +80 +80 +C0 +40 +40 +ENDCHAR +STARTCHAR uni04F8 +ENCODING 1272 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +48 +00 +00 +84 +84 +84 +84 +E4 +94 +94 +94 +94 +E4 +ENDCHAR +STARTCHAR uni04F9 +ENCODING 1273 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +48 +00 +00 +84 +84 +84 +E4 +94 +94 +94 +E4 +ENDCHAR +STARTCHAR uni04FA +ENCODING 1274 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +3E +20 +20 +20 +20 +F8 +20 +20 +20 +30 +10 +30 +ENDCHAR +STARTCHAR uni04FB +ENCODING 1275 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +3E +20 +20 +F8 +20 +20 +20 +30 +10 +30 +ENDCHAR +STARTCHAR uni04FC +ENCODING 1276 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +48 +48 +30 +30 +48 +48 +84 +84 +04 +08 +ENDCHAR +STARTCHAR uni04FD +ENCODING 1277 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +48 +30 +30 +48 +84 +84 +04 +08 +ENDCHAR +STARTCHAR uni04FE +ENCODING 1278 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +48 +48 +30 +FC +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni04FF +ENCODING 1279 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +48 +30 +FC +48 +84 +84 +ENDCHAR +STARTCHAR uni0500 +ENCODING 1280 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +04 +04 +7C +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0501 +ENCODING 1281 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +04 +04 +04 +74 +8C +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0502 +ENCODING 1282 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +08 +08 +08 +78 +88 +88 +8A +8A +8A +9A +6C +ENDCHAR +STARTCHAR uni0503 +ENCODING 1283 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +08 +08 +08 +08 +68 +98 +88 +88 +8A +9A +6C +ENDCHAR +STARTCHAR uni0504 +ENCODING 1284 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +88 +08 +30 +0A +0A +0A +0A +04 +ENDCHAR +STARTCHAR uni0505 +ENCODING 1285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +70 +88 +88 +08 +30 +0A +0A +04 +ENDCHAR +STARTCHAR uni0506 +ENCODING 1286 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +70 +88 +88 +08 +30 +08 +08 +08 +08 +06 +02 +02 +ENDCHAR +STARTCHAR uni0507 +ENCODING 1287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +70 +88 +88 +08 +30 +08 +08 +06 +02 +02 +ENDCHAR +STARTCHAR uni0508 +ENCODING 1288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3C +24 +24 +24 +24 +25 +25 +45 +45 +82 +ENDCHAR +STARTCHAR uni0509 +ENCODING 1289 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +3C +24 +24 +24 +24 +45 +45 +82 +ENDCHAR +STARTCHAR uni050A +ENCODING 1290 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +88 +88 +88 +88 +F8 +8A +8A +8A +8A +8C +ENDCHAR +STARTCHAR uni050B +ENCODING 1291 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +88 +88 +88 +F8 +88 +8A +8A +8C +ENDCHAR +STARTCHAR uni050C +ENCODING 1292 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +9C +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni050D +ENCODING 1293 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +80 +9C +84 +84 +78 +ENDCHAR +STARTCHAR uni050E +ENCODING 1294 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +12 +12 +12 +12 +1C +ENDCHAR +STARTCHAR uni050F +ENCODING 1295 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +10 +10 +10 +12 +12 +12 +1C +ENDCHAR +STARTCHAR uni0510 +ENCODING 1296 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +80 +80 +78 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0511 +ENCODING 1297 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +78 +40 +80 +84 +78 +ENDCHAR +STARTCHAR uni0512 +ENCODING 1298 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +3C +24 +24 +24 +24 +24 +24 +44 +44 +84 +14 +18 +ENDCHAR +STARTCHAR uni0513 +ENCODING 1299 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +3C +24 +24 +24 +24 +44 +44 +84 +14 +18 +ENDCHAR +STARTCHAR uni0514 +ENCODING 1300 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +71 +51 +4A +4A +44 +44 +4A +4A +51 +91 +ENDCHAR +STARTCHAR uni0515 +ENCODING 1301 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +71 +51 +4A +44 +44 +4A +51 +91 +ENDCHAR +STARTCHAR uni0516 +ENCODING 1302 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +E1 +92 +94 +98 +90 +F0 +88 +84 +82 +81 +ENDCHAR +STARTCHAR uni0517 +ENCODING 1303 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +01 +E2 +94 +98 +98 +94 +E2 +81 +80 +80 +ENDCHAR +STARTCHAR uni0518 +ENCODING 1304 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +7F +88 +88 +88 +7F +28 +48 +48 +88 +8F +ENDCHAR +STARTCHAR uni0519 +ENCODING 1305 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +7E +89 +89 +7F +28 +28 +49 +46 +ENDCHAR +STARTCHAR uni051A +ENCODING 1306 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +78 +84 +84 +84 +84 +84 +84 +B4 +CC +78 +06 +ENDCHAR +STARTCHAR uni051B +ENCODING 1307 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +74 +8C +84 +84 +84 +84 +8C +74 +04 +04 +ENDCHAR +STARTCHAR uni051C +ENCODING 1308 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +B4 +B4 +CC +CC +84 +84 +ENDCHAR +STARTCHAR uni051D +ENCODING 1309 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni051E +ENCODING 1310 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +94 +88 +94 +A0 +C0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni051F +ENCODING 1311 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +A8 +90 +A8 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni0520 +ENCODING 1312 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +70 +50 +50 +50 +5E +51 +51 +91 +91 +91 +05 +02 +ENDCHAR +STARTCHAR uni0521 +ENCODING 1313 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +70 +50 +50 +5E +51 +51 +91 +91 +05 +02 +ENDCHAR +STARTCHAR uni0522 +ENCODING 1314 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +90 +90 +90 +90 +FE +91 +91 +91 +91 +91 +05 +02 +ENDCHAR +STARTCHAR uni0523 +ENCODING 1315 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +90 +90 +90 +FE +91 +91 +91 +91 +05 +02 +ENDCHAR +STARTCHAR uni0524 +ENCODING 1316 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F8 +88 +88 +88 +88 +88 +88 +88 +88 +8C +04 +04 +ENDCHAR +STARTCHAR uni0525 +ENCODING 1317 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +F8 +88 +88 +88 +88 +88 +88 +8C +04 +04 +ENDCHAR +STARTCHAR uni0526 +ENCODING 1318 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +86 +02 +02 +ENDCHAR +STARTCHAR uni0527 +ENCODING 1319 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +80 +80 +B8 +C4 +84 +84 +84 +86 +02 +02 +ENDCHAR +STARTCHAR uni0528 +ENCODING 1320 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +22 +22 +22 +22 +3E +22 +22 +22 +22 +22 +A0 +40 +ENDCHAR +STARTCHAR uni0529 +ENCODING 1321 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +22 +22 +22 +3E +22 +22 +22 +22 +A0 +40 +ENDCHAR +STARTCHAR uni052A +ENCODING 1322 +BBX 15 12 0 -2 +BITMAP +0C46 +1448 +1448 +1450 +27E0 +2460 +2450 +4448 +4444 +FE42 +8200 +8200 +ENDCHAR +STARTCHAR uni052B +ENCODING 1323 +BBX 14 9 1 -1 +BITMAP +388C +2890 +48A0 +4FC0 +88A0 +8890 +8888 +FC84 +8400 +ENDCHAR +STARTCHAR uni052C +ENCODING 1324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +98 +98 +A8 +A8 +A8 +F8 +48 +48 +88 +FC +84 +84 +ENDCHAR +STARTCHAR uni052D +ENCODING 1325 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +98 +A8 +A8 +A8 +F8 +48 +48 +48 +FC +84 +ENDCHAR +STARTCHAR uni052E +ENCODING 1326 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +3C +24 +24 +24 +24 +24 +24 +44 +44 +86 +02 +02 +ENDCHAR +STARTCHAR uni052F +ENCODING 1327 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +3C +24 +24 +24 +24 +44 +44 +86 +02 +02 +ENDCHAR +STARTCHAR uni0531 +ENCODING 1329 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +88 +88 +88 +88 +88 +88 +88 +8E +8A +70 +ENDCHAR +STARTCHAR uni0532 +ENCODING 1330 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +F8 +84 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0533 +ENCODING 1331 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +88 +88 +88 +7C +0A +08 +08 +08 +ENDCHAR +STARTCHAR uni0534 +ENCODING 1332 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +88 +08 +08 +0C +0A +08 +08 +08 +ENDCHAR +STARTCHAR uni0535 +ENCODING 1333 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +F8 +84 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0536 +ENCODING 1334 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +38 +44 +44 +44 +44 +38 +08 +10 +20 +FC +04 +ENDCHAR +STARTCHAR uni0537 +ENCODING 1335 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +80 +80 +80 +F8 +84 +80 +80 +80 +80 +F8 +04 +ENDCHAR +STARTCHAR uni0538 +ENCODING 1336 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +78 +84 +84 +80 +80 +80 +80 +80 +80 +F8 +04 +ENDCHAR +STARTCHAR uni0539 +ENCODING 1337 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +88 +9E +A8 +A8 +90 +80 +80 +80 +ENDCHAR +STARTCHAR uni053A +ENCODING 1338 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +08 +08 +08 +08 +7E +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni053B +ENCODING 1339 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +B8 +C4 +84 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni053C +ENCODING 1340 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +04 +ENDCHAR +STARTCHAR uni053D +ENCODING 1341 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +80 +80 +80 +F2 +92 +92 +92 +92 +92 +8C +ENDCHAR +STARTCHAR uni053E +ENCODING 1342 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +30 +48 +84 +84 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni053F +ENCODING 1343 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +84 +84 +84 +84 +84 +7C +04 +04 +ENDCHAR +STARTCHAR uni0540 +ENCODING 1344 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +20 +20 +10 +20 +40 +80 +C0 +30 +0C +ENDCHAR +STARTCHAR uni0541 +ENCODING 1345 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +44 +44 +44 +38 +48 +B0 +90 +6C +ENDCHAR +STARTCHAR uni0542 +ENCODING 1346 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +70 +88 +88 +08 +08 +08 +08 +08 +08 +0E +02 +ENDCHAR +STARTCHAR uni0543 +ENCODING 1347 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +C8 +30 +48 +48 +84 +84 +84 +84 +FC +ENDCHAR +STARTCHAR uni0544 +ENCODING 1348 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +8E +8A +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni0545 +ENCODING 1349 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +04 +84 +F8 +84 +04 +04 +44 +38 +ENDCHAR +STARTCHAR uni0546 +ENCODING 1350 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +80 +60 +20 +20 +20 +20 +20 +20 +22 +22 +1C +ENDCHAR +STARTCHAR uni0547 +ENCODING 1351 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +78 +40 +80 +80 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0548 +ENCODING 1352 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0549 +ENCODING 1353 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +38 +44 +44 +44 +44 +38 +08 +10 +E0 +30 +0C +ENDCHAR +STARTCHAR uni054A +ENCODING 1354 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +92 +92 +92 +92 +12 +12 +02 +02 +02 +ENDCHAR +STARTCHAR uni054B +ENCODING 1355 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +38 +44 +44 +24 +14 +18 +18 +10 +20 +FC +04 +ENDCHAR +STARTCHAR uni054C +ENCODING 1356 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +88 +8E +8A +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni054D +ENCODING 1357 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni054E +ENCODING 1358 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +08 +08 +88 +88 +88 +88 +88 +78 +08 +0E +02 +ENDCHAR +STARTCHAR uni054F +ENCODING 1359 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0550 +ENCODING 1360 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0551 +ENCODING 1361 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +78 +84 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni0552 +ENCODING 1362 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +80 +80 +B0 +C8 +88 +88 +86 +80 +80 +80 +ENDCHAR +STARTCHAR uni0553 +ENCODING 1363 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +70 +A8 +A8 +A8 +A8 +A8 +A8 +70 +20 +ENDCHAR +STARTCHAR uni0554 +ENCODING 1364 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +18 +24 +24 +24 +38 +A0 +F8 +28 +20 +20 +ENDCHAR +STARTCHAR uni0555 +ENCODING 1365 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0556 +ENCODING 1366 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +90 +90 +70 +1C +12 +12 +12 +92 +7C +ENDCHAR +STARTCHAR uni0559 +ENCODING 1369 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 2 10 +BITMAP +40 +80 +80 +40 +ENDCHAR +STARTCHAR uni055A +ENCODING 1370 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 2 10 +BITMAP +80 +40 +40 +80 +ENDCHAR +STARTCHAR uni055B +ENCODING 1371 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 11 +BITMAP +20 +60 +C0 +ENDCHAR +STARTCHAR uni055C +ENCODING 1372 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 12 +BITMAP +30 +C0 +ENDCHAR +STARTCHAR uni055D +ENCODING 1373 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 11 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni055E +ENCODING 1374 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 10 +BITMAP +70 +88 +A8 +30 +ENDCHAR +STARTCHAR uni055F +ENCODING 1375 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 10 +BITMAP +60 +A0 +80 +78 +ENDCHAR +STARTCHAR uni0560 +ENCODING 1376 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +EC +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni0561 +ENCODING 1377 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +6E +ENDCHAR +STARTCHAR uni0562 +ENCODING 1378 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +38 +44 +84 +84 +80 +FC +80 +80 +80 +ENDCHAR +STARTCHAR uni0563 +ENCODING 1379 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +70 +88 +88 +88 +88 +88 +7E +08 +08 +08 +ENDCHAR +STARTCHAR uni0564 +ENCODING 1380 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +B0 +C8 +88 +88 +88 +88 +88 +8E +08 +08 +ENDCHAR +STARTCHAR uni0565 +ENCODING 1381 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +80 +80 +FC +80 +84 +84 +44 +38 +ENDCHAR +STARTCHAR uni0566 +ENCODING 1382 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +68 +98 +88 +88 +88 +88 +78 +08 +08 +0E +ENDCHAR +STARTCHAR uni0567 +ENCODING 1383 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 -1 +BITMAP +80 +80 +F8 +80 +80 +80 +80 +80 +80 +70 +08 +ENDCHAR +STARTCHAR uni0568 +ENCODING 1384 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +80 +FC +ENDCHAR +STARTCHAR uni0569 +ENCODING 1385 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +B0 +C8 +88 +9E +A8 +A8 +90 +80 +80 +80 +ENDCHAR +STARTCHAR uni056A +ENCODING 1386 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +08 +08 +08 +7E +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni056B +ENCODING 1387 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +84 +80 +80 +ENDCHAR +STARTCHAR uni056C +ENCODING 1388 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni056D +ENCODING 1389 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +80 +80 +80 +F2 +92 +92 +92 +92 +8C +80 +80 +80 +ENDCHAR +STARTCHAR uni056E +ENCODING 1390 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +E0 +10 +08 +7E +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni056F +ENCODING 1391 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 -2 +BITMAP +80 +80 +88 +88 +88 +88 +88 +88 +88 +78 +08 +08 +ENDCHAR +STARTCHAR uni0570 +ENCODING 1392 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0571 +ENCODING 1393 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +20 +10 +7C +84 +84 +84 +84 +84 +7C +ENDCHAR +STARTCHAR uni0572 +ENCODING 1394 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +B0 +C8 +88 +88 +88 +88 +88 +88 +08 +0E +ENDCHAR +STARTCHAR uni0573 +ENCODING 1395 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +1C +22 +20 +FE +22 +22 +22 +22 +26 +1A +ENDCHAR +STARTCHAR uni0574 +ENCODING 1396 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +04 +0A +08 +88 +88 +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni0575 +ENCODING 1397 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +18 +08 +08 +08 +08 +08 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni0576 +ENCODING 1398 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +80 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni0577 +ENCODING 1399 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +08 +10 +10 +20 +20 +40 +40 +7E +ENDCHAR +STARTCHAR uni0578 +ENCODING 1400 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0579 +ENCODING 1401 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 2 0 +BITMAP +40 +80 +40 +20 +20 +40 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni057A +ENCODING 1402 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +92 +92 +92 +92 +92 +92 +92 +6E +02 +02 +ENDCHAR +STARTCHAR uni057B +ENCODING 1403 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +88 +48 +28 +30 +30 +40 +40 +7E +ENDCHAR +STARTCHAR uni057C +ENCODING 1404 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +B0 +C8 +88 +88 +88 +88 +88 +8E +ENDCHAR +STARTCHAR uni057D +ENCODING 1405 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni057E +ENCODING 1406 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +08 +08 +08 +88 +88 +88 +88 +88 +98 +68 +08 +0E +ENDCHAR +STARTCHAR uni057F +ENCODING 1407 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +94 +9A +92 +92 +92 +92 +B2 +52 +ENDCHAR +STARTCHAR uni0580 +ENCODING 1408 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +80 +80 +ENDCHAR +STARTCHAR uni0581 +ENCODING 1409 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +74 +8C +84 +84 +84 +8C +74 +04 +84 +78 +ENDCHAR +STARTCHAR uni0582 +ENCODING 1410 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 3 0 +BITMAP +C0 +40 +40 +40 +40 +40 +40 +70 +ENDCHAR +STARTCHAR uni0583 +ENCODING 1411 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +10 +10 +94 +9A +92 +92 +92 +92 +B2 +52 +10 +10 +ENDCHAR +STARTCHAR uni0584 +ENCODING 1412 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 -2 +BITMAP +30 +48 +48 +48 +70 +40 +F0 +40 +40 +60 +ENDCHAR +STARTCHAR uni0585 +ENCODING 1413 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0586 +ENCODING 1414 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +70 +90 +90 +70 +1C +12 +12 +12 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni0587 +ENCODING 1415 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +80 +80 +80 +88 +88 +88 +88 +88 +88 +76 +ENDCHAR +STARTCHAR uni0588 +ENCODING 1416 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +18 +08 +08 +08 +08 +3C +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni0589 +ENCODING 1417 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 7 3 1 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni058A +ENCODING 1418 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 1 +BITMAP +C4 +78 +ENDCHAR +STARTCHAR uni058D +ENCODING 1421 +BBX 11 11 2 0 +BITMAP +3700 +48C0 +4920 +A620 +9EC0 +9F20 +6F20 +8CA0 +9240 +6240 +1D80 +ENDCHAR +STARTCHAR uni058E +ENCODING 1422 +BBX 11 11 2 0 +BITMAP +1D80 +6240 +9240 +8CA0 +6F20 +9F20 +9EC0 +A620 +4920 +48C0 +3700 +ENDCHAR +STARTCHAR uni058F +ENCODING 1423 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +88 +08 +3E +08 +3E +08 +08 +08 +ENDCHAR +STARTCHAR uni0591 +ENCODING 1425 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 0 -2 +BITMAP +20 +70 +88 +ENDCHAR +STARTCHAR uni0592 +ENCODING 1426 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 1 10 +BITMAP +30 +00 +CC +ENDCHAR +STARTCHAR uni0593 +ENCODING 1427 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 2 8 +BITMAP +30 +C0 +30 +C0 +30 +C0 +ENDCHAR +STARTCHAR uni0594 +ENCODING 1428 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 3 10 +BITMAP +C0 +00 +C0 +ENDCHAR +STARTCHAR uni0595 +ENCODING 1429 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 2 10 +BITMAP +B0 +80 +B0 +ENDCHAR +STARTCHAR uni0596 +ENCODING 1430 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 0 -2 +BITMAP +80 +80 +60 +ENDCHAR +STARTCHAR uni0597 +ENCODING 1431 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 2 9 +BITMAP +20 +70 +F8 +70 +20 +ENDCHAR +STARTCHAR uni0598 +ENCODING 1432 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 1 9 +BITMAP +48 +A4 +94 +48 +ENDCHAR +STARTCHAR uni0599 +ENCODING 1433 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 0 10 +BITMAP +C0 +20 +20 +ENDCHAR +STARTCHAR uni059A +ENCODING 1434 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 6 -2 +BITMAP +40 +80 +40 +ENDCHAR +STARTCHAR uni059B +ENCODING 1435 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 0 -2 +BITMAP +D0 +D0 +10 +E0 +ENDCHAR +STARTCHAR uni059C +ENCODING 1436 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 3 10 +BITMAP +60 +80 +80 +ENDCHAR +STARTCHAR uni059D +ENCODING 1437 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 5 10 +BITMAP +60 +80 +80 +ENDCHAR +STARTCHAR uni059E +ENCODING 1438 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 1 10 +BITMAP +6C +90 +90 +ENDCHAR +STARTCHAR uni059F +ENCODING 1439 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 0 9 +BITMAP +42 +A5 +42 +24 +ENDCHAR +STARTCHAR uni05A0 +ENCODING 1440 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 5 9 +BITMAP +40 +A0 +40 +80 +ENDCHAR +STARTCHAR uni05A1 +ENCODING 1441 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 0 10 +BITMAP +50 +60 +80 +ENDCHAR +STARTCHAR uni05A2 +ENCODING 1442 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 0 -2 +BITMAP +88 +70 +20 +ENDCHAR +STARTCHAR uni05A3 +ENCODING 1443 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 0 -2 +BITMAP +20 +20 +E0 +ENDCHAR +STARTCHAR uni05A4 +ENCODING 1444 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 0 -2 +BITMAP +40 +80 +40 +ENDCHAR +STARTCHAR uni05A5 +ENCODING 1445 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 0 -2 +BITMAP +20 +20 +C0 +ENDCHAR +STARTCHAR uni05A6 +ENCODING 1446 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 0 -2 +BITMAP +24 +24 +D8 +ENDCHAR +STARTCHAR uni05A7 +ENCODING 1447 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 0 -2 +BITMAP +60 +80 +60 +10 +60 +ENDCHAR +STARTCHAR uni05A8 +ENCODING 1448 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 0 10 +BITMAP +C0 +20 +20 +ENDCHAR +STARTCHAR uni05A9 +ENCODING 1449 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 0 9 +BITMAP +40 +A0 +40 +20 +ENDCHAR +STARTCHAR uni05AA +ENCODING 1450 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 0 -2 +BITMAP +90 +60 +ENDCHAR +STARTCHAR uni05AB +ENCODING 1451 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 2 10 +BITMAP +40 +80 +40 +ENDCHAR +STARTCHAR uni05AC +ENCODING 1452 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 3 10 +BITMAP +20 +20 +E0 +ENDCHAR +STARTCHAR uni05AD +ENCODING 1453 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 5 -2 +BITMAP +80 +80 +60 +ENDCHAR +STARTCHAR uni05AE +ENCODING 1454 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 0 9 +BITMAP +48 +A8 +A8 +90 +ENDCHAR +STARTCHAR uni05AF +ENCODING 1455 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 2 9 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni05B0 +ENCODING 1456 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 3 -2 +BITMAP +C0 +00 +C0 +ENDCHAR +STARTCHAR uni05B1 +ENCODING 1457 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 2 -2 +BITMAP +A8 +00 +48 +ENDCHAR +STARTCHAR uni05B2 +ENCODING 1458 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 2 -2 +BITMAP +E8 +00 +08 +ENDCHAR +STARTCHAR uni05B3 +ENCODING 1459 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 2 -2 +BITMAP +E8 +40 +48 +ENDCHAR +STARTCHAR uni05B4 +ENCODING 1460 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 3 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni05B5 +ENCODING 1461 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 1 -2 +BITMAP +CC +CC +ENDCHAR +STARTCHAR uni05B6 +ENCODING 1462 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 1 -2 +BITMAP +CC +00 +30 +ENDCHAR +STARTCHAR uni05B7 +ENCODING 1463 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 2 -1 +BITMAP +F0 +ENDCHAR +STARTCHAR uni05B8 +ENCODING 1464 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 2 -2 +BITMAP +F8 +20 +20 +ENDCHAR +STARTCHAR uni05B9 +ENCODING 1465 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 2 10 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni05BA +ENCODING 1466 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 3 10 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni05BB +ENCODING 1467 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 2 -2 +BITMAP +80 +20 +08 +ENDCHAR +STARTCHAR uni05BC +ENCODING 1468 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 1 3 5 +BITMAP +C0 +ENDCHAR +STARTCHAR uni05BD +ENCODING 1469 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 4 -2 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni05BE +ENCODING 1470 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 1 1 10 +BITMAP +FC +ENDCHAR +STARTCHAR uni05BF +ENCODING 1471 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 2 10 +BITMAP +F0 +ENDCHAR +STARTCHAR uni05C0 +ENCODING 1472 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 9 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni05C1 +ENCODING 1473 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 5 10 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni05C2 +ENCODING 1474 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 1 10 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni05C3 +ENCODING 1475 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 3 0 +BITMAP +40 +E0 +40 +00 +00 +40 +E0 +40 +ENDCHAR +STARTCHAR uni05C4 +ENCODING 1476 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 3 12 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni05C5 +ENCODING 1477 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 3 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni05C6 +ENCODING 1478 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +E0 +80 +80 +80 +80 +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uni05C7 +ENCODING 1479 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 2 -2 +BITMAP +F8 +20 +20 +ENDCHAR +STARTCHAR uni05D0 +ENCODING 1488 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +84 +84 +44 +24 +58 +90 +88 +84 +84 +ENDCHAR +STARTCHAR uni05D1 +ENCODING 1489 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +F8 +08 +08 +08 +08 +08 +08 +08 +FE +ENDCHAR +STARTCHAR uni05D2 +ENCODING 1490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +60 +10 +10 +10 +08 +18 +28 +44 +84 +ENDCHAR +STARTCHAR uni05D3 +ENCODING 1491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni05D4 +ENCODING 1492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +04 +04 +44 +44 +44 +44 +44 +44 +ENDCHAR +STARTCHAR uni05D5 +ENCODING 1493 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 0 +BITMAP +E0 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni05D6 +ENCODING 1494 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +C0 +30 +28 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni05D7 +ENCODING 1495 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +44 +44 +44 +44 +44 +44 +44 +44 +ENDCHAR +STARTCHAR uni05D8 +ENCODING 1496 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +8C +94 +84 +84 +84 +84 +84 +84 +FC +ENDCHAR +STARTCHAR uni05D9 +ENCODING 1497 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 2 5 +BITMAP +E0 +20 +20 +20 +ENDCHAR +STARTCHAR uni05DA +ENCODING 1498 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni05DB +ENCODING 1499 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni05DC +ENCODING 1500 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +80 +80 +F8 +08 +08 +08 +08 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni05DD +ENCODING 1501 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +22 +22 +22 +22 +22 +22 +22 +3E +ENDCHAR +STARTCHAR uni05DE +ENCODING 1502 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +9C +62 +42 +82 +82 +82 +82 +82 +8E +ENDCHAR +STARTCHAR uni05DF +ENCODING 1503 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 -2 +BITMAP +E0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni05E0 +ENCODING 1504 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +70 +10 +10 +10 +10 +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uni05E1 +ENCODING 1505 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +84 +84 +84 +84 +84 +84 +88 +F0 +ENDCHAR +STARTCHAR uni05E2 +ENCODING 1506 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +12 +12 +12 +12 +12 +12 +12 +12 +FE +ENDCHAR +STARTCHAR uni05E3 +ENCODING 1507 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +FC +84 +84 +84 +E4 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni05E4 +ENCODING 1508 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +84 +84 +84 +E4 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni05E5 +ENCODING 1509 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 -2 +BITMAP +88 +88 +90 +A0 +C0 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni05E6 +ENCODING 1510 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +84 +84 +48 +30 +10 +08 +04 +04 +FC +ENDCHAR +STARTCHAR uni05E7 +ENCODING 1511 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +FC +44 +44 +48 +48 +50 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni05E8 +ENCODING 1512 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni05E9 +ENCODING 1513 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni05EA +ENCODING 1514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +7C +44 +44 +44 +44 +44 +44 +44 +C4 +ENDCHAR +STARTCHAR uni05EF +ENCODING 1519 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 5 +BITMAP +70 +10 +10 +10 +EE +22 +22 +22 +ENDCHAR +STARTCHAR uni05F0 +ENCODING 1520 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +EE +22 +22 +22 +22 +22 +22 +22 +22 +ENDCHAR +STARTCHAR uni05F1 +ENCODING 1521 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +EE +22 +22 +22 +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni05F2 +ENCODING 1522 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 5 +BITMAP +EE +22 +22 +22 +ENDCHAR +STARTCHAR uni05F3 +ENCODING 1523 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 3 6 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni05F4 +ENCODING 1524 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 6 +BITMAP +24 +48 +90 +ENDCHAR +STARTCHAR uni0600 +ENCODING 1536 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8000 +0001 +8000 +0001 +8000 +0001 +8004 +0009 +8008 +3FFD +8000 +0001 +AAAA +ENDCHAR +STARTCHAR uni0601 +ENCODING 1537 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8000 +0001 +8000 +0001 +8000 +0001 +8004 +2A0D +AA0C +35F5 +8000 +0001 +AAAA +ENDCHAR +STARTCHAR uni0602 +ENCODING 1538 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8000 +0001 +8000 +0001 +8000 +0001 +8E00 +0E19 +87E0 +0001 +8000 +0001 +AAAA +ENDCHAR +STARTCHAR uni0603 +ENCODING 1539 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8000 +0001 +8000 +0019 +8024 +0045 +8144 +0149 +9EF0 +0001 +8000 +0001 +AAAA +ENDCHAR +STARTCHAR uni0604 +ENCODING 1540 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8000 +0001 +8000 +0001 +8000 +0001 +8000 +0195 +827C +0201 +BF00 +0001 +AAAA +ENDCHAR +STARTCHAR uni0605 +ENCODING 1541 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8804 +1619 +A1E0 +0001 +8000 +0001 +8000 +0001 +8000 +0001 +8000 +0001 +AAAA +ENDCHAR +STARTCHAR uni0606 +ENCODING 1542 +BBX 12 14 1 -1 +BITMAP +0150 +E150 +21A0 +1100 +1100 +0900 +0800 +04E0 +0480 +0280 +0300 +0300 +0200 +0200 +ENDCHAR +STARTCHAR uni0607 +ENCODING 1543 +BBX 11 15 1 -1 +BITMAP +0040 +0080 +E100 +2140 +1080 +1120 +08C0 +0800 +04E0 +0480 +0280 +0300 +0300 +0200 +0200 +ENDCHAR +STARTCHAR uni0608 +ENCODING 1544 +BBX 12 7 2 3 +BITMAP +0190 +3A60 +CAC0 +1140 +1040 +2080 +1F00 +ENDCHAR +STARTCHAR uni0609 +ENCODING 1545 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +08 +08 +50 +10 +20 +20 +40 +40 +88 +A0 +ENDCHAR +STARTCHAR uni060A +ENCODING 1546 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 1 +BITMAP +08 +08 +50 +10 +20 +20 +40 +42 +88 +A0 +ENDCHAR +STARTCHAR uni060B +ENCODING 1547 +BBX 10 10 3 2 +BITMAP +3000 +3000 +0600 +0900 +0700 +0100 +0E00 +F080 +0040 +0040 +ENDCHAR +STARTCHAR uni060C +ENCODING 1548 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 3 +BITMAP +40 +80 +C0 +C0 +ENDCHAR +STARTCHAR uni060D +ENCODING 1549 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 2 +BITMAP +18 +30 +40 +80 +ENDCHAR +STARTCHAR uni060E +ENCODING 1550 +BBX 12 4 3 1 +BITMAP +7000 +8800 +8830 +7FC0 +ENDCHAR +STARTCHAR uni060F +ENCODING 1551 +BBX 7 11 2 0 +BITMAP +18 +20 +20 +18 +20 +4C +52 +62 +24 +58 +80 +ENDCHAR +STARTCHAR uni0610 +ENCODING 1552 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 2 9 +BITMAP +18 +24 +E4 +58 +ENDCHAR +STARTCHAR uni0611 +ENCODING 1553 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 5 8 +BITMAP +0C +90 +FE +80 +80 +ENDCHAR +STARTCHAR uni0612 +ENCODING 1554 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 5 3 8 +BITMAP +FC40 +1040 +2080 +4700 +4000 +ENDCHAR +STARTCHAR uni0613 +ENCODING 1555 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 6 1 8 +BITMAP +2000 +0C20 +9220 +FC40 +A180 +8000 +ENDCHAR +STARTCHAR uni0614 +ENCODING 1556 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 4 3 8 +BITMAP +0040 +FE40 +0140 +0080 +ENDCHAR +STARTCHAR uni0615 +ENCODING 1557 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 4 9 +BITMAP +40 +5C +62 +FC +ENDCHAR +STARTCHAR uni0616 +ENCODING 1558 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 6 3 8 +BITMAP +28 +28 +28 +68 +80 +7F +ENDCHAR +STARTCHAR uni0617 +ENCODING 1559 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 6 8 +BITMAP +20 +00 +20 +20 +C0 +ENDCHAR +STARTCHAR uni0618 +ENCODING 1560 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 1 3 11 +BITMAP +C0 +ENDCHAR +STARTCHAR uni0619 +ENCODING 1561 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 2 10 +BITMAP +60 +70 +40 +80 +ENDCHAR +STARTCHAR uni061A +ENCODING 1562 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 1 3 -1 +BITMAP +C0 +ENDCHAR +STARTCHAR uni061B +ENCODING 1563 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 5 3 2 +BITMAP +40 +80 +C0 +00 +C0 +ENDCHAR +STARTCHAR uni061C +ENCODING 1564 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +B222 +4A37 +FA2A +4A23 +CBA2 +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni061D +ENCODING 1565 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +70 +88 +80 +40 +20 +2C +1C +ENDCHAR +STARTCHAR uni061E +ENCODING 1566 +BBX 3 3 7 0 +BITMAP +40 +00 +A0 +ENDCHAR +STARTCHAR uni061F +ENCODING 1567 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +7C +82 +80 +40 +20 +10 +10 +00 +10 +ENDCHAR +STARTCHAR uni0620 +ENCODING 1568 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +18 +A4 +90 +88 +70 +20 +50 +20 +ENDCHAR +STARTCHAR uni0621 +ENCODING 1569 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 2 +BITMAP +70 +80 +F0 +40 +80 +ENDCHAR +STARTCHAR uni0622 +ENCODING 1570 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 3 +BITMAP +02 +7C +80 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0623 +ENCODING 1571 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 3 +BITMAP +60 +80 +60 +80 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0624 +ENCODING 1572 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +18 +20 +18 +20 +00 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni0625 +ENCODING 1573 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 3 -2 +BITMAP +40 +40 +40 +40 +40 +40 +40 +00 +60 +80 +60 +80 +ENDCHAR +STARTCHAR uni0626 +ENCODING 1574 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +30 +40 +30 +40 +00 +8C +90 +90 +8C +84 +78 +ENDCHAR +STARTCHAR uni0627 +ENCODING 1575 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 8 4 3 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0628 +ENCODING 1576 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +08 +44 +84 +78 +00 +00 +10 +ENDCHAR +STARTCHAR uni0629 +ENCODING 1577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 3 +BITMAP +90 +00 +40 +60 +90 +90 +F0 +ENDCHAR +STARTCHAR uni062A +ENCODING 1578 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +28 +00 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uni062B +ENCODING 1579 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +20 +00 +50 +00 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uni062C +ENCODING 1580 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +20 +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uni062D +ENCODING 1581 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +20 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni062E +ENCODING 1582 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +20 +00 +00 +FC +20 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni062F +ENCODING 1583 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 3 +BITMAP +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uni0630 +ENCODING 1584 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +40 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uni0631 +ENCODING 1585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni0632 +ENCODING 1586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +20 +00 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni0633 +ENCODING 1587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 -1 +BITMAP +02 +2A +2A +BC +90 +90 +60 +ENDCHAR +STARTCHAR uni0634 +ENCODING 1588 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +10 +00 +24 +00 +00 +02 +2A +2A +BC +90 +90 +60 +ENDCHAR +STARTCHAR uni0635 +ENCODING 1589 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +0C +32 +9C +90 +90 +60 +ENDCHAR +STARTCHAR uni0636 +ENCODING 1590 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +08 +00 +00 +0C +32 +9C +90 +90 +60 +ENDCHAR +STARTCHAR uni0637 +ENCODING 1591 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +40 +40 +40 +40 +58 +64 +44 +F8 +ENDCHAR +STARTCHAR uni0638 +ENCODING 1592 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +40 +48 +40 +40 +58 +64 +44 +F8 +ENDCHAR +STARTCHAR uni0639 +ENCODING 1593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +30 +48 +40 +38 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni063A +ENCODING 1594 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +00 +00 +30 +48 +40 +38 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni063B +ENCODING 1595 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 3 +BITMAP +50 +04 +08 +10 +20 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uni063C +ENCODING 1596 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -1 +BITMAP +04 +08 +10 +20 +40 +3C +82 +7E +00 +28 +00 +10 +ENDCHAR +STARTCHAR uni063D +ENCODING 1597 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +20 +50 +88 +00 +08 +94 +90 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni063E +ENCODING 1598 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +A0 +00 +08 +94 +90 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni063F +ENCODING 1599 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +40 +00 +A0 +08 +94 +90 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni0640 +ENCODING 1600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 1 0 3 +BITMAP +FF +ENDCHAR +STARTCHAR uni0641 +ENCODING 1601 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +10 +00 +0C +14 +0C +84 +84 +78 +ENDCHAR +STARTCHAR uni0642 +ENCODING 1602 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +48 +00 +00 +38 +24 +14 +4C +84 +88 +70 +ENDCHAR +STARTCHAR uni0643 +ENCODING 1603 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +04 +14 +24 +14 +44 +84 +84 +78 +ENDCHAR +STARTCHAR uni0644 +ENCODING 1604 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +04 +04 +04 +04 +04 +44 +84 +84 +88 +78 +ENDCHAR +STARTCHAR uni0645 +ENCODING 1605 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 -2 +BITMAP +70 +18 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0646 +ENCODING 1606 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +20 +00 +00 +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni0647 +ENCODING 1607 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 3 +BITMAP +40 +60 +90 +90 +F0 +ENDCHAR +STARTCHAR uni0648 +ENCODING 1608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni0649 +ENCODING 1609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +08 +94 +90 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni064A +ENCODING 1610 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +08 +94 +90 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uni064B +ENCODING 1611 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 2 10 +BITMAP +30 +C0 +30 +C0 +ENDCHAR +STARTCHAR uni064C +ENCODING 1612 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 1 9 +BITMAP +18 +18 +C8 +50 +E0 +ENDCHAR +STARTCHAR uni064D +ENCODING 1613 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 2 0 +BITMAP +20 +C0 +30 +C0 +ENDCHAR +STARTCHAR uni064E +ENCODING 1614 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 2 10 +BITMAP +30 +C0 +ENDCHAR +STARTCHAR uni064F +ENCODING 1615 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 2 9 +BITMAP +30 +38 +20 +40 +80 +ENDCHAR +STARTCHAR uni0650 +ENCODING 1616 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 2 -2 +BITMAP +30 +C0 +ENDCHAR +STARTCHAR uni0651 +ENCODING 1617 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 1 7 +BITMAP +08 +28 +B0 +C0 +ENDCHAR +STARTCHAR uni0652 +ENCODING 1618 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 2 11 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni0653 +ENCODING 1619 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 1 10 +BITMAP +02 +7C +80 +ENDCHAR +STARTCHAR uni0654 +ENCODING 1620 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 2 10 +BITMAP +60 +80 +60 +80 +ENDCHAR +STARTCHAR uni0655 +ENCODING 1621 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 2 -2 +BITMAP +60 +80 +60 +80 +ENDCHAR +STARTCHAR uni0656 +ENCODING 1622 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 9 -2 +BITMAP +80 +40 +40 +ENDCHAR +STARTCHAR uni0657 +ENCODING 1623 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 1 9 +BITMAP +08 +10 +20 +E0 +60 +ENDCHAR +STARTCHAR uni0658 +ENCODING 1624 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 2 11 +BITMAP +90 +90 +60 +ENDCHAR +STARTCHAR uni0659 +ENCODING 1625 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 2 10 +BITMAP +F0 +ENDCHAR +STARTCHAR uni065A +ENCODING 1626 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 1 9 +BITMAP +88 +50 +20 +20 +ENDCHAR +STARTCHAR uni065B +ENCODING 1627 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 1 9 +BITMAP +20 +20 +50 +88 +ENDCHAR +STARTCHAR uni065C +ENCODING 1628 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 3 0 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni065D +ENCODING 1629 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 1 9 +BITMAP +60 +E0 +20 +10 +08 +ENDCHAR +STARTCHAR uni065E +ENCODING 1630 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 2 10 +BITMAP +90 +20 +40 +90 +ENDCHAR +STARTCHAR uni065F +ENCODING 1631 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 1 -2 +BITMAP +0C +10 +4C +B0 +ENDCHAR +STARTCHAR uni0660 +ENCODING 1632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 5 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni0661 +ENCODING 1633 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 2 +BITMAP +80 +80 +40 +40 +20 +20 +10 +10 +10 +ENDCHAR +STARTCHAR uni0662 +ENCODING 1634 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 2 +BITMAP +88 +90 +60 +40 +20 +20 +10 +10 +10 +ENDCHAR +STARTCHAR uni0663 +ENCODING 1635 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +92 +A4 +78 +40 +20 +20 +10 +10 +10 +ENDCHAR +STARTCHAR uni0664 +ENCODING 1636 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +08 +10 +20 +40 +30 +40 +80 +84 +78 +ENDCHAR +STARTCHAR uni0665 +ENCODING 1637 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +30 +48 +48 +84 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni0666 +ENCODING 1638 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +80 +78 +08 +08 +04 +04 +04 +02 +02 +ENDCHAR +STARTCHAR uni0667 +ENCODING 1639 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +82 +82 +44 +44 +28 +28 +10 +10 +10 +ENDCHAR +STARTCHAR uni0668 +ENCODING 1640 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +10 +10 +10 +28 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni0669 +ENCODING 1641 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +30 +48 +88 +98 +68 +04 +04 +02 +02 +ENDCHAR +STARTCHAR uni066A +ENCODING 1642 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 2 +BITMAP +08 +08 +90 +90 +20 +20 +48 +48 +80 +80 +ENDCHAR +STARTCHAR uni066B +ENCODING 1643 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 1 +BITMAP +10 +10 +10 +E0 +ENDCHAR +STARTCHAR uni066C +ENCODING 1644 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 7 +BITMAP +C0 +C0 +40 +80 +ENDCHAR +STARTCHAR uni066D +ENCODING 1645 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 3 +BITMAP +10 +10 +FE +38 +6C +44 +ENDCHAR +STARTCHAR uni066E +ENCODING 1646 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 3 +BITMAP +08 +44 +84 +78 +ENDCHAR +STARTCHAR uni066F +ENCODING 1647 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +38 +24 +14 +4C +84 +88 +70 +ENDCHAR +STARTCHAR uni0670 +ENCODING 1648 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 3 11 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni0671 +ENCODING 1649 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 3 +BITMAP +10 +28 +78 +80 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0672 +ENCODING 1650 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 3 +BITMAP +0C +10 +4C +B0 +00 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0673 +ENCODING 1651 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +00 +0C +10 +4C +B0 +ENDCHAR +STARTCHAR uni0674 +ENCODING 1652 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 6 +BITMAP +70 +80 +F0 +40 +80 +ENDCHAR +STARTCHAR uni0675 +ENCODING 1653 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +8C +90 +8C +90 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0676 +ENCODING 1654 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +06 +08 +06 +08 +20 +50 +50 +70 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni0677 +ENCODING 1655 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +60 +66 +28 +46 +88 +20 +50 +50 +70 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni0678 +ENCODING 1656 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +0C +10 +0C +10 +00 +10 +A8 +A0 +90 +88 +88 +70 +ENDCHAR +STARTCHAR uni0679 +ENCODING 1657 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +40 +40 +70 +70 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uni067A +ENCODING 1658 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +20 +00 +20 +00 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uni067B +ENCODING 1659 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +08 +44 +84 +78 +00 +10 +00 +10 +ENDCHAR +STARTCHAR uni067C +ENCODING 1660 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +28 +00 +00 +08 +44 +84 +78 +10 +28 +10 +ENDCHAR +STARTCHAR uni067D +ENCODING 1661 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +50 +00 +20 +00 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uni067E +ENCODING 1662 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +08 +44 +84 +78 +00 +28 +00 +10 +ENDCHAR +STARTCHAR uni067F +ENCODING 1663 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +50 +00 +50 +00 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uni0680 +ENCODING 1664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +08 +44 +84 +78 +00 +28 +00 +28 +ENDCHAR +STARTCHAR uni0681 +ENCODING 1665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +30 +40 +30 +40 +00 +FC +20 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni0682 +ENCODING 1666 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +20 +00 +20 +00 +00 +FC +20 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni0683 +ENCODING 1667 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +20 +40 +80 +A8 +80 +44 +38 +ENDCHAR +STARTCHAR uni0684 +ENCODING 1668 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +20 +40 +90 +80 +90 +44 +38 +ENDCHAR +STARTCHAR uni0685 +ENCODING 1669 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +20 +00 +48 +00 +00 +FC +20 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni0686 +ENCODING 1670 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +40 +80 +A8 +80 +90 +44 +38 +ENDCHAR +STARTCHAR uni0687 +ENCODING 1671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +40 +80 +A8 +80 +A8 +44 +38 +ENDCHAR +STARTCHAR uni0688 +ENCODING 1672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 3 +BITMAP +40 +40 +70 +70 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uni0689 +ENCODING 1673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +10 +08 +04 +84 +F8 +10 +28 +10 +ENDCHAR +STARTCHAR uni068A +ENCODING 1674 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +10 +08 +04 +84 +F8 +00 +10 +ENDCHAR +STARTCHAR uni068B +ENCODING 1675 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 1 +BITMAP +40 +40 +70 +70 +00 +10 +08 +04 +84 +F8 +00 +10 +ENDCHAR +STARTCHAR uni068C +ENCODING 1676 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +50 +00 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uni068D +ENCODING 1677 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +10 +08 +04 +84 +F8 +00 +50 +ENDCHAR +STARTCHAR uni068E +ENCODING 1678 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +20 +00 +50 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uni068F +ENCODING 1679 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +50 +00 +20 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uni0690 +ENCODING 1680 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +50 +00 +50 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uni0691 +ENCODING 1681 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +10 +10 +1C +1C +00 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni0692 +ENCODING 1682 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +88 +50 +20 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni0693 +ENCODING 1683 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +08 +04 +04 +04 +08 +98 +74 +08 +ENDCHAR +STARTCHAR uni0694 +ENCODING 1684 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +08 +04 +04 +04 +08 +90 +64 +ENDCHAR +STARTCHAR uni0695 +ENCODING 1685 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +10 +08 +08 +08 +10 +90 +6A +04 +ENDCHAR +STARTCHAR uni0696 +ENCODING 1686 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +08 +04 +04 +24 +08 +90 +64 +ENDCHAR +STARTCHAR uni0697 +ENCODING 1687 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +24 +00 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni0698 +ENCODING 1688 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +10 +00 +28 +00 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni0699 +ENCODING 1689 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +24 +00 +24 +00 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni069A +ENCODING 1690 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +08 +00 +00 +02 +2A +2A +BC +90 +94 +60 +ENDCHAR +STARTCHAR uni069B +ENCODING 1691 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -1 +BITMAP +02 +2A +2A +BC +A0 +AA +40 +04 +ENDCHAR +STARTCHAR uni069C +ENCODING 1692 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +10 +00 +24 +00 +00 +02 +2A +2A +BC +A0 +AA +40 +04 +ENDCHAR +STARTCHAR uni069D +ENCODING 1693 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +0C +32 +9C +A0 +AA +40 +ENDCHAR +STARTCHAR uni069E +ENCODING 1694 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +00 +24 +00 +00 +0C +32 +9C +90 +90 +60 +ENDCHAR +STARTCHAR uni069F +ENCODING 1695 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +48 +40 +54 +40 +58 +64 +44 +F8 +ENDCHAR +STARTCHAR uni06A0 +ENCODING 1696 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +20 +00 +48 +00 +00 +30 +48 +40 +38 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni06A1 +ENCODING 1697 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +0C +14 +0C +84 +84 +78 +ENDCHAR +STARTCHAR uni06A2 +ENCODING 1698 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 1 +BITMAP +0C +14 +0C +84 +84 +78 +00 +10 +ENDCHAR +STARTCHAR uni06A3 +ENCODING 1699 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 1 +BITMAP +08 +00 +00 +0C +14 +0C +84 +84 +78 +00 +10 +ENDCHAR +STARTCHAR uni06A4 +ENCODING 1700 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 3 +BITMAP +10 +00 +24 +00 +0C +14 +0C +84 +84 +78 +ENDCHAR +STARTCHAR uni06A5 +ENCODING 1701 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +0C +14 +0C +84 +84 +78 +00 +48 +00 +20 +ENDCHAR +STARTCHAR uni06A6 +ENCODING 1702 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 3 +BITMAP +14 +00 +14 +00 +0C +14 +0C +84 +84 +78 +ENDCHAR +STARTCHAR uni06A7 +ENCODING 1703 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +00 +00 +38 +24 +14 +4C +84 +88 +70 +ENDCHAR +STARTCHAR uni06A8 +ENCODING 1704 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +00 +48 +00 +00 +38 +24 +14 +4C +84 +88 +70 +ENDCHAR +STARTCHAR uni06A9 +ENCODING 1705 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +04 +08 +10 +20 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uni06AA +ENCODING 1706 +BBX 14 8 1 3 +BITMAP +0030 +00C0 +0300 +0C00 +1000 +0FF8 +8004 +7FF8 +ENDCHAR +STARTCHAR uni06AB +ENCODING 1707 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +04 +0C +1A +24 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uni06AC +ENCODING 1708 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 3 +BITMAP +10 +00 +04 +14 +24 +14 +44 +84 +84 +78 +ENDCHAR +STARTCHAR uni06AD +ENCODING 1709 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 3 +BITMAP +20 +00 +50 +04 +14 +24 +14 +44 +84 +84 +78 +ENDCHAR +STARTCHAR uni06AE +ENCODING 1710 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +04 +14 +24 +14 +44 +84 +84 +78 +00 +28 +00 +10 +ENDCHAR +STARTCHAR uni06AF +ENCODING 1711 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +08 +10 +24 +48 +10 +20 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uni06B0 +ENCODING 1712 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +08 +10 +24 +4C +1A +24 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uni06B1 +ENCODING 1713 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +50 +06 +18 +62 +0C +30 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uni06B2 +ENCODING 1714 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 1 +BITMAP +08 +10 +24 +48 +10 +20 +40 +3C +82 +7E +00 +28 +ENDCHAR +STARTCHAR uni06B3 +ENCODING 1715 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +08 +10 +24 +48 +10 +20 +40 +3C +82 +7E +00 +10 +00 +10 +ENDCHAR +STARTCHAR uni06B4 +ENCODING 1716 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 3 +BITMAP +40 +00 +A6 +18 +62 +0C +30 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uni06B5 +ENCODING 1717 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +22 +14 +08 +00 +04 +04 +04 +04 +44 +84 +84 +88 +78 +ENDCHAR +STARTCHAR uni06B6 +ENCODING 1718 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +04 +00 +04 +04 +04 +04 +04 +04 +44 +84 +84 +88 +78 +ENDCHAR +STARTCHAR uni06B7 +ENCODING 1719 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +08 +00 +12 +00 +04 +04 +04 +04 +04 +44 +84 +84 +88 +78 +ENDCHAR +STARTCHAR uni06B8 +ENCODING 1720 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +04 +04 +04 +04 +04 +04 +44 +84 +78 +00 +28 +00 +10 +ENDCHAR +STARTCHAR uni06B9 +ENCODING 1721 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +10 +00 +00 +08 +44 +84 +84 +88 +70 +00 +10 +ENDCHAR +STARTCHAR uni06BA +ENCODING 1722 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni06BB +ENCODING 1723 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +20 +38 +38 +00 +00 +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni06BC +ENCODING 1724 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +10 +00 +00 +08 +44 +84 +84 +88 +78 +14 +08 +ENDCHAR +STARTCHAR uni06BD +ENCODING 1725 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +20 +00 +48 +00 +00 +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni06BE +ENCODING 1726 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +20 +58 +54 +34 +48 +80 +ENDCHAR +STARTCHAR uni06BF +ENCODING 1727 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +20 +00 +00 +FC +40 +80 +A8 +80 +90 +44 +38 +ENDCHAR +STARTCHAR uni06C0 +ENCODING 1728 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 3 +BITMAP +60 +80 +60 +80 +00 +40 +60 +90 +90 +F0 +ENDCHAR +STARTCHAR uni06C1 +ENCODING 1729 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 2 +BITMAP +20 +5E +80 +ENDCHAR +STARTCHAR uni06C2 +ENCODING 1730 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 2 +BITMAP +30 +40 +30 +40 +00 +20 +5E +80 +ENDCHAR +STARTCHAR uni06C3 +ENCODING 1731 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 2 +BITMAP +50 +00 +00 +20 +5E +80 +ENDCHAR +STARTCHAR uni06C4 +ENCODING 1732 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +18 +24 +24 +1C +44 +A4 +48 +F0 +ENDCHAR +STARTCHAR uni06C5 +ENCODING 1733 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +18 +24 +24 +3C +04 +78 +90 +60 +ENDCHAR +STARTCHAR uni06C6 +ENCODING 1734 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +44 +28 +10 +00 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni06C7 +ENCODING 1735 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +30 +30 +10 +20 +40 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni06C8 +ENCODING 1736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +10 +08 +08 +00 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni06C9 +ENCODING 1737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +10 +28 +44 +00 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni06CA +ENCODING 1738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +28 +00 +00 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni06CB +ENCODING 1739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +10 +00 +24 +00 +00 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni06CC +ENCODING 1740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +08 +94 +90 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni06CD +ENCODING 1741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 -1 +BITMAP +04 +2A +68 +A4 +22 +22 +1C +ENDCHAR +STARTCHAR uni06CE +ENCODING 1742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +88 +50 +20 +00 +08 +94 +90 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni06CF +ENCODING 1743 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +10 +00 +00 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni06D0 +ENCODING 1744 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +18 +A4 +90 +88 +70 +00 +20 +00 +20 +ENDCHAR +STARTCHAR uni06D1 +ENCODING 1745 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +18 +A4 +90 +88 +70 +00 +50 +00 +20 +ENDCHAR +STARTCHAR uni06D2 +ENCODING 1746 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 -1 +BITMAP +10 +28 +20 +40 +80 +FE +ENDCHAR +STARTCHAR uni06D3 +ENCODING 1747 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +60 +80 +60 +80 +10 +28 +20 +40 +80 +FE +ENDCHAR +STARTCHAR uni06D4 +ENCODING 1748 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 1 2 3 +BITMAP +F0 +ENDCHAR +STARTCHAR uni06D5 +ENCODING 1749 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 3 +BITMAP +40 +60 +90 +90 +F0 +ENDCHAR +STARTCHAR uni06D6 +ENCODING 1750 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 5 3 9 +BITMAP +1040 +12E0 +7FE0 +8000 +FE00 +ENDCHAR +STARTCHAR uni06D7 +ENCODING 1751 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 5 3 9 +BITMAP +1240 +1100 +7F00 +8000 +FE00 +ENDCHAR +STARTCHAR uni06D8 +ENCODING 1752 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 5 9 +BITMAP +08 +14 +3C +C0 +ENDCHAR +STARTCHAR uni06D9 +ENCODING 1753 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 4 9 +BITMAP +88 +48 +30 +10 +30 +ENDCHAR +STARTCHAR uni06DA +ENCODING 1754 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 3 9 +BITMAP +FC +20 +48 +21 +1E +ENDCHAR +STARTCHAR uni06DB +ENCODING 1755 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 0 11 +BITMAP +40 +00 +A0 +ENDCHAR +STARTCHAR uni06DC +ENCODING 1756 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 4 9 +BITMAP +1280 +9F80 +9000 +6000 +ENDCHAR +STARTCHAR uni06DD +ENCODING 1757 +BBX 11 11 3 1 +BITMAP +0E00 +3180 +5F40 +60C0 +8020 +8020 +8020 +60C0 +5F40 +3180 +0E00 +ENDCHAR +STARTCHAR uni06DE +ENCODING 1758 +BBX 15 15 1 -2 +BITMAP +0100 +0280 +3FF8 +2828 +3018 +2388 +644C +A44A +644C +2388 +3018 +2828 +3FF8 +0280 +0100 +ENDCHAR +STARTCHAR uni06DF +ENCODING 1759 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 2 10 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni06E0 +ENCODING 1760 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 2 9 +BITMAP +60 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni06E1 +ENCODING 1761 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 1 11 +BITMAP +FC +18 +60 +ENDCHAR +STARTCHAR uni06E2 +ENCODING 1762 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 6 9 +BITMAP +60 +E0 +80 +80 +40 +ENDCHAR +STARTCHAR uni06E3 +ENCODING 1763 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 4 -2 +BITMAP +1280 +9F80 +9000 +6000 +ENDCHAR +STARTCHAR uni06E4 +ENCODING 1764 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 1 13 +BITMAP +F8 +ENDCHAR +STARTCHAR uni06E5 +ENCODING 1765 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 3 1 +BITMAP +20 +50 +70 +10 +E0 +ENDCHAR +STARTCHAR uni06E6 +ENCODING 1766 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 2 +BITMAP +20 +40 +80 +FE +ENDCHAR +STARTCHAR uni06E7 +ENCODING 1767 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 1 9 +BITMAP +20 +40 +80 +FE +ENDCHAR +STARTCHAR uni06E8 +ENCODING 1768 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 5 9 +BITMAP +10 +84 +84 +7C +ENDCHAR +STARTCHAR uni06E9 +ENCODING 1769 +BBX 15 15 1 -2 +BITMAP +0100 +0280 +0540 +0AA0 +1550 +2AA8 +5454 +2AA8 +2AA8 +2AA8 +2BA8 +2828 +2FE8 +600C +FFFE +ENDCHAR +STARTCHAR uni06EA +ENCODING 1770 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 5 9 +BITMAP +20 +50 +88 +50 +20 +ENDCHAR +STARTCHAR uni06EB +ENCODING 1771 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 5 -2 +BITMAP +20 +50 +88 +50 +20 +ENDCHAR +STARTCHAR uni06EC +ENCODING 1772 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 7 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni06ED +ENCODING 1773 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 4 7 -2 +BITMAP +C0 +80 +80 +40 +ENDCHAR +STARTCHAR uni06EE +ENCODING 1774 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +10 +28 +44 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uni06EF +ENCODING 1775 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +08 +14 +22 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni06F0 +ENCODING 1776 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 5 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni06F1 +ENCODING 1777 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 2 +BITMAP +80 +80 +40 +40 +20 +20 +10 +10 +10 +ENDCHAR +STARTCHAR uni06F2 +ENCODING 1778 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 2 +BITMAP +88 +90 +60 +40 +20 +20 +10 +10 +10 +ENDCHAR +STARTCHAR uni06F3 +ENCODING 1779 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +92 +A4 +78 +40 +20 +20 +10 +10 +10 +ENDCHAR +STARTCHAR uni06F4 +ENCODING 1780 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +30 +48 +C0 +E4 +58 +40 +20 +20 +20 +ENDCHAR +STARTCHAR uni06F5 +ENCODING 1781 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 1 +BITMAP +10 +10 +28 +28 +44 +44 +92 +AA +C6 +ENDCHAR +STARTCHAR uni06F6 +ENCODING 1782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +38 +44 +40 +40 +30 +0C +30 +C0 +ENDCHAR +STARTCHAR uni06F7 +ENCODING 1783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +82 +82 +44 +44 +28 +28 +10 +10 +10 +ENDCHAR +STARTCHAR uni06F8 +ENCODING 1784 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +10 +10 +10 +28 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni06F9 +ENCODING 1785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +30 +48 +88 +98 +68 +04 +04 +02 +02 +ENDCHAR +STARTCHAR uni06FA +ENCODING 1786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +10 +00 +24 +00 +00 +02 +2A +2A +BC +90 +94 +60 +ENDCHAR +STARTCHAR uni06FB +ENCODING 1787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +08 +00 +00 +0C +32 +9C +90 +94 +60 +ENDCHAR +STARTCHAR uni06FC +ENCODING 1788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +00 +00 +30 +48 +40 +38 +40 +90 +80 +84 +78 +ENDCHAR +STARTCHAR uni06FD +ENCODING 1789 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 -2 +BITMAP +70 +80 +F0 +40 +80 +00 +50 +50 +50 +50 +ENDCHAR +STARTCHAR uni06FE +ENCODING 1790 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +10 +28 +24 +5C +40 +94 +14 +14 +14 +ENDCHAR +STARTCHAR uni06FF +ENCODING 1791 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +20 +50 +88 +20 +58 +54 +34 +48 +80 +ENDCHAR +STARTCHAR uni0700 +ENCODING 1792 +BBX 9 9 3 1 +BITMAP +0800 +1C00 +0800 +4100 +E380 +4100 +0800 +1C00 +0800 +ENDCHAR +STARTCHAR uni0701 +ENCODING 1793 +BBX 2 2 3 9 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0702 +ENCODING 1794 +BBX 2 2 3 3 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0703 +ENCODING 1795 +BBX 2 8 3 3 +BITMAP +C0 +C0 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni0704 +ENCODING 1796 +BBX 2 8 3 -2 +BITMAP +C0 +C0 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni0705 +ENCODING 1797 +BBX 6 2 1 6 +BITMAP +CC +CC +ENDCHAR +STARTCHAR uni0706 +ENCODING 1798 +BBX 6 6 1 2 +BITMAP +C0 +C0 +00 +00 +0C +0C +ENDCHAR +STARTCHAR uni0707 +ENCODING 1799 +BBX 6 7 1 1 +BITMAP +0C +0C +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni0708 +ENCODING 1800 +BBX 6 6 1 6 +BITMAP +C0 +C0 +00 +00 +0C +0C +ENDCHAR +STARTCHAR uni0709 +ENCODING 1801 +BBX 6 6 1 -2 +BITMAP +C0 +C0 +00 +00 +0C +0C +ENDCHAR +STARTCHAR uni070A +ENCODING 1802 +BBX 6 15 1 -2 +BITMAP +48 +48 +FC +00 +00 +00 +00 +30 +30 +00 +00 +00 +00 +30 +30 +ENDCHAR +STARTCHAR uni070B +ENCODING 1803 +BBX 14 5 1 5 +BITMAP +FFFC +0000 +0000 +0300 +0300 +ENDCHAR +STARTCHAR uni070C +ENCODING 1804 +BBX 13 13 1 0 +BITMAP +8000 +4000 +2000 +1000 +0800 +0400 +0200 +0100 +0080 +0048 +0038 +0038 +0078 +ENDCHAR +STARTCHAR uni070D +ENCODING 1805 +BBX 14 14 1 -1 +BITMAP +0300 +0300 +3330 +3330 +0300 +0300 +FFFC +FFFC +0300 +0300 +3330 +3330 +0300 +0300 +ENDCHAR +STARTCHAR uni070F +ENCODING 1807 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +B18C +3FFD +B18C +0001 +8000 +0001 +B322 +44B7 +A7AA +14A3 +E4A2 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0710 +ENCODING 1808 +BBX 16 11 0 1 +BITMAP +0007 +0007 +000E +003C +7FF8 +FFC0 +C600 +C300 +C1C0 +C0F0 +4070 +ENDCHAR +STARTCHAR uni0711 +ENCODING 1809 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 1 9 +BITMAP +04 +18 +F0 +A0 +18 +ENDCHAR +STARTCHAR uni0712 +ENCODING 1810 +BBX 12 8 1 1 +BITMAP +1800 +1FE0 +0FF0 +0010 +C010 +C010 +FFF0 +7FE0 +ENDCHAR +STARTCHAR uni0713 +ENCODING 1811 +BBX 14 12 1 1 +BITMAP +0C00 +0E00 +0600 +0300 +0300 +E180 +F8C0 +1E60 +07E0 +01F0 +0038 +000C +ENDCHAR +STARTCHAR uni0714 +ENCODING 1812 +BBX 14 12 1 1 +BITMAP +0C00 +0E00 +0600 +0300 +0300 +E780 +FCC0 +1E60 +07E0 +01F0 +0038 +000C +ENDCHAR +STARTCHAR uni0715 +ENCODING 1813 +BBX 6 10 2 1 +BITMAP +FC +F8 +38 +18 +18 +18 +18 +98 +18 +08 +ENDCHAR +STARTCHAR uni0716 +ENCODING 1814 +BBX 6 10 2 1 +BITMAP +FC +F8 +38 +18 +18 +18 +18 +18 +18 +08 +ENDCHAR +STARTCHAR uni0717 +ENCODING 1815 +BBX 14 8 1 1 +BITMAP +3EF0 +7FF8 +C108 +8104 +8104 +8204 +C20C +6418 +ENDCHAR +STARTCHAR uni0718 +ENCODING 1816 +BBX 10 8 3 1 +BITMAP +3C00 +6600 +C300 +8100 +8180 +8080 +CCC0 +7CC0 +ENDCHAR +STARTCHAR uni0719 +ENCODING 1817 +BBX 3 10 4 1 +BITMAP +C0 +E0 +E0 +60 +60 +60 +60 +60 +60 +20 +ENDCHAR +STARTCHAR uni071A +ENCODING 1818 +BBX 14 9 1 0 +BITMAP +0618 +0618 +020C +0204 +0104 +8104 +C108 +7FF8 +3EF0 +ENDCHAR +STARTCHAR uni071B +ENCODING 1819 +BBX 14 14 1 -1 +BITMAP +1800 +1C00 +0C00 +0600 +0200 +0300 +C100 +FFF0 +7FF8 +0084 +0084 +0084 +0048 +0030 +ENDCHAR +STARTCHAR uni071C +ENCODING 1820 +BBX 14 14 1 -1 +BITMAP +1800 +1C00 +0C00 +0600 +0200 +0300 +C100 +FFF0 +7FF8 +0084 +00B4 +00B4 +0048 +0030 +ENDCHAR +STARTCHAR uni071D +ENCODING 1821 +BBX 4 7 2 -2 +BITMAP +C0 +60 +30 +30 +30 +60 +C0 +ENDCHAR +STARTCHAR uni071E +ENCODING 1822 +BBX 14 13 1 0 +BITMAP +0400 +0000 +0A00 +0000 +3B80 +7FC0 +C440 +8448 +8444 +8824 +C824 +4818 +0100 +ENDCHAR +STARTCHAR uni071F +ENCODING 1823 +BBX 13 12 3 -2 +BITMAP +C000 +C300 +C380 +E4C0 +24C0 +3C40 +1860 +0020 +0020 +0010 +0010 +0008 +ENDCHAR +STARTCHAR uni0720 +ENCODING 1824 +BBX 10 11 2 1 +BITMAP +3800 +3800 +1800 +0C00 +0600 +0300 +0180 +C0C0 +C0C0 +FFC0 +7FC0 +ENDCHAR +STARTCHAR uni0721 +ENCODING 1825 +BBX 13 12 1 -1 +BITMAP +E000 +FC00 +3FF0 +07F8 +0608 +0608 +0608 +07F8 +0DF0 +1800 +3000 +2000 +ENDCHAR +STARTCHAR uni0722 +ENCODING 1826 +BBX 13 8 2 -1 +BITMAP +7000 +F800 +FE00 +1F00 +03C0 +0060 +0010 +0008 +ENDCHAR +STARTCHAR uni0723 +ENCODING 1827 +BBX 13 8 1 1 +BITMAP +7800 +CCF0 +8798 +8308 +C308 +6310 +3FE0 +1FC0 +ENDCHAR +STARTCHAR uni0724 +ENCODING 1828 +BBX 13 10 1 -1 +BITMAP +7800 +CCF0 +8798 +8308 +C308 +6310 +3FE0 +1FC0 +0300 +0300 +ENDCHAR +STARTCHAR uni0725 +ENCODING 1829 +BBX 14 7 1 1 +BITMAP +0600 +0600 +0300 +C180 +C0C0 +FFFC +7FFC +ENDCHAR +STARTCHAR uni0726 +ENCODING 1830 +BBX 14 9 1 1 +BITMAP +03C0 +0460 +0420 +0430 +03D0 +C018 +C008 +FFFC +7FFC +ENDCHAR +STARTCHAR uni0727 +ENCODING 1831 +BBX 14 9 0 1 +BITMAP +0F00 +1880 +1080 +3080 +2F00 +600C +400C +FFFC +FFF8 +ENDCHAR +STARTCHAR uni0728 +ENCODING 1832 +BBX 14 11 0 -1 +BITMAP +0010 +0038 +0FFC +1FFC +1000 +0C00 +03C0 +0030 +0018 +0038 +FFF0 +ENDCHAR +STARTCHAR uni0729 +ENCODING 1833 +BBX 11 8 3 0 +BITMAP +0F80 +1FC0 +1040 +1020 +1020 +9FE0 +BFE0 +6000 +ENDCHAR +STARTCHAR uni072A +ENCODING 1834 +BBX 6 13 2 1 +BITMAP +08 +00 +00 +FC +F8 +38 +18 +18 +18 +18 +18 +18 +08 +ENDCHAR +STARTCHAR uni072B +ENCODING 1835 +BBX 14 8 1 1 +BITMAP +0CC0 +1FE0 +1FE0 +0FC0 +0780 +C30C +FFFC +7FFC +ENDCHAR +STARTCHAR uni072C +ENCODING 1836 +BBX 13 12 1 1 +BITMAP +C000 +E000 +6000 +1180 +0BC0 +0C20 +0C20 +1410 +2210 +4118 +7F18 +3E18 +ENDCHAR +STARTCHAR uni072D +ENCODING 1837 +BBX 14 11 1 1 +BITMAP +0040 +00C0 +0180 +0300 +07F8 +07FC +0004 +0004 +C004 +FFFC +7FF8 +ENDCHAR +STARTCHAR uni072E +ENCODING 1838 +BBX 14 14 1 -1 +BITMAP +0600 +0300 +3300 +3E00 +1800 +0400 +0200 +C100 +F880 +7FC0 +0FF0 +0038 +000C +0004 +ENDCHAR +STARTCHAR uni072F +ENCODING 1839 +BBX 7 10 1 1 +BITMAP +7E +7C +1C +0C +0C +0C +0C +8C +0C +24 +ENDCHAR +STARTCHAR uni0730 +ENCODING 1840 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 2 9 +BITMAP +F8 +90 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni0731 +ENCODING 1841 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 1 -2 +BITMAP +08 +18 +28 +48 +F8 +ENDCHAR +STARTCHAR uni0732 +ENCODING 1842 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 13 2 -1 +BITMAP +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +ENDCHAR +STARTCHAR uni0733 +ENCODING 1843 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 2 8 +BITMAP +60 +90 +90 +60 +40 +80 +ENDCHAR +STARTCHAR uni0734 +ENCODING 1844 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 2 -2 +BITMAP +10 +20 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0735 +ENCODING 1845 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 2 10 +BITMAP +20 +00 +80 +ENDCHAR +STARTCHAR uni0736 +ENCODING 1846 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 3 10 +BITMAP +C0 +20 +50 +90 +ENDCHAR +STARTCHAR uni0737 +ENCODING 1847 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 2 -2 +BITMAP +90 +A0 +40 +30 +ENDCHAR +STARTCHAR uni0738 +ENCODING 1848 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 2 -2 +BITMAP +90 +ENDCHAR +STARTCHAR uni0739 +ENCODING 1849 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 2 2 -2 +BITMAP +20 +80 +ENDCHAR +STARTCHAR uni073A +ENCODING 1850 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 1 11 +BITMAP +F8 +20 +F8 +ENDCHAR +STARTCHAR uni073B +ENCODING 1851 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 2 -2 +BITMAP +F8 +20 +F8 +ENDCHAR +STARTCHAR uni073C +ENCODING 1852 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 3 -2 +BITMAP +80 +ENDCHAR +STARTCHAR uni073D +ENCODING 1853 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 7 3 7 +BITMAP +0800 +1000 +2800 +4400 +9200 +2900 +1080 +ENDCHAR +STARTCHAR uni073E +ENCODING 1854 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 7 3 -2 +BITMAP +8400 +4A00 +2480 +1100 +0A00 +0400 +0800 +ENDCHAR +STARTCHAR uni073F +ENCODING 1855 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 4 10 +BITMAP +80 +ENDCHAR +STARTCHAR uni0740 +ENCODING 1856 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 2 10 +BITMAP +80 +ENDCHAR +STARTCHAR uni0741 +ENCODING 1857 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 3 10 +BITMAP +80 +ENDCHAR +STARTCHAR uni0742 +ENCODING 1858 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 3 -1 +BITMAP +80 +ENDCHAR +STARTCHAR uni0743 +ENCODING 1859 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 3 10 +BITMAP +80 +00 +80 +ENDCHAR +STARTCHAR uni0744 +ENCODING 1860 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 3 -2 +BITMAP +80 +00 +80 +ENDCHAR +STARTCHAR uni0745 +ENCODING 1861 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 2 10 +BITMAP +40 +00 +A0 +ENDCHAR +STARTCHAR uni0746 +ENCODING 1862 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 2 -2 +BITMAP +A0 +00 +40 +ENDCHAR +STARTCHAR uni0747 +ENCODING 1863 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 2 9 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni0748 +ENCODING 1864 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 2 -2 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni0749 +ENCODING 1865 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 8 7 6 +BITMAP +90 +68 +74 +BA +5D +2E +16 +09 +ENDCHAR +STARTCHAR uni074A +ENCODING 1866 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 1 9 +BITMAP +A8 +20 +F8 +20 +A8 +ENDCHAR +STARTCHAR uni074D +ENCODING 1869 +BBX 10 14 3 -1 +BITMAP +C0C0 +C0C0 +C0C0 +6180 +6180 +2100 +2300 +3300 +3300 +1600 +1600 +1E00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni074E +ENCODING 1870 +BBX 14 11 1 1 +BITMAP +0018 +000C +01CC +01F8 +0060 +0020 +0010 +0010 +C008 +FFFC +7FFC +ENDCHAR +STARTCHAR uni074F +ENCODING 1871 +BBX 14 12 1 1 +BITMAP +0300 +0300 +0180 +0058 +0064 +0024 +0038 +0010 +0010 +C008 +FFFC +7FFC +ENDCHAR +STARTCHAR uni0750 +ENCODING 1872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +08 +44 +84 +78 +00 +00 +54 +ENDCHAR +STARTCHAR uni0751 +ENCODING 1873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +20 +00 +50 +00 +08 +44 +84 +78 +00 +00 +10 +ENDCHAR +STARTCHAR uni0752 +ENCODING 1874 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +08 +44 +84 +78 +00 +10 +00 +28 +ENDCHAR +STARTCHAR uni0753 +ENCODING 1875 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +10 +40 +00 +08 +44 +84 +78 +00 +10 +00 +28 +ENDCHAR +STARTCHAR uni0754 +ENCODING 1876 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +20 +00 +08 +44 +84 +78 +00 +00 +28 +ENDCHAR +STARTCHAR uni0755 +ENCODING 1877 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +08 +44 +84 +78 +00 +10 +28 +44 +ENDCHAR +STARTCHAR uni0756 +ENCODING 1878 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +88 +50 +20 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uni0757 +ENCODING 1879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +50 +00 +FC +20 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni0758 +ENCODING 1880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +20 +48 +80 +94 +80 +44 +38 +ENDCHAR +STARTCHAR uni0759 +ENCODING 1881 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -1 +BITMAP +40 +40 +50 +68 +F0 +00 +10 +08 +04 +84 +F8 +00 +20 +00 +20 +ENDCHAR +STARTCHAR uni075A +ENCODING 1882 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +10 +08 +04 +84 +F8 +00 +10 +28 +44 +ENDCHAR +STARTCHAR uni075B +ENCODING 1883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 -1 +BITMAP +08 +04 +04 +3E +08 +90 +60 +ENDCHAR +STARTCHAR uni075C +ENCODING 1884 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +28 +00 +28 +02 +2A +2A +BC +90 +90 +60 +ENDCHAR +STARTCHAR uni075D +ENCODING 1885 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +50 +00 +30 +48 +40 +38 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni075E +ENCODING 1886 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +50 +00 +20 +00 +30 +48 +40 +38 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni075F +ENCODING 1887 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +20 +00 +20 +00 +30 +48 +40 +38 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni0760 +ENCODING 1888 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 1 +BITMAP +0C +14 +0C +84 +84 +78 +00 +14 +ENDCHAR +STARTCHAR uni0761 +ENCODING 1889 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +0C +14 +0C +84 +84 +78 +00 +08 +00 +14 +ENDCHAR +STARTCHAR uni0762 +ENCODING 1890 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +04 +88 +10 +20 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uni0763 +ENCODING 1891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +40 +00 +A4 +08 +10 +20 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uni0764 +ENCODING 1892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -1 +BITMAP +04 +08 +10 +20 +40 +3C +82 +7E +00 +08 +00 +14 +ENDCHAR +STARTCHAR uni0765 +ENCODING 1893 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 -2 +BITMAP +20 +00 +00 +70 +18 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0766 +ENCODING 1894 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 -2 +BITMAP +70 +18 +78 +80 +A0 +80 +80 +80 +ENDCHAR +STARTCHAR uni0767 +ENCODING 1895 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +40 +00 +08 +44 +84 +84 +88 +70 +00 +28 +ENDCHAR +STARTCHAR uni0768 +ENCODING 1896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +40 +40 +50 +68 +F0 +00 +40 +00 +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni0769 +ENCODING 1897 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +88 +50 +20 +00 +40 +00 +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni076A +ENCODING 1898 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +08 +08 +08 +08 +3C +08 +48 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni076B +ENCODING 1899 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +20 +00 +20 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni076C +ENCODING 1900 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +30 +40 +30 +40 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni076D +ENCODING 1901 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +08 +00 +08 +00 +02 +2A +2A +BC +90 +90 +60 +ENDCHAR +STARTCHAR uni076E +ENCODING 1902 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +20 +50 +98 +94 +B8 +44 +38 +ENDCHAR +STARTCHAR uni076F +ENCODING 1903 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +FC +20 +50 +98 +94 +B8 +80 +A8 +80 +44 +38 +ENDCHAR +STARTCHAR uni0770 +ENCODING 1904 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +40 +40 +50 +68 +F0 +00 +28 +02 +2A +2A +BC +90 +90 +60 +ENDCHAR +STARTCHAR uni0771 +ENCODING 1905 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -1 +BITMAP +40 +40 +50 +68 +F0 +00 +20 +80 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni0772 +ENCODING 1906 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +20 +20 +28 +34 +78 +00 +FC +20 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni0773 +ENCODING 1907 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 3 +BITMAP +A0 +A0 +C0 +80 +A0 +A0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0774 +ENCODING 1908 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 3 +BITMAP +A8 +A8 +D0 +80 +A0 +A0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0775 +ENCODING 1909 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +28 +28 +30 +20 +20 +20 +8C +90 +90 +8C +84 +78 +ENDCHAR +STARTCHAR uni0776 +ENCODING 1910 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +2A +2A +34 +20 +20 +20 +8C +90 +90 +8C +84 +78 +ENDCHAR +STARTCHAR uni0777 +ENCODING 1911 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +8C +90 +90 +8C +84 +78 +00 +10 +2C +20 +20 +20 +ENDCHAR +STARTCHAR uni0778 +ENCODING 1912 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +A0 +A0 +C0 +80 +80 +98 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni0779 +ENCODING 1913 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +A8 +A8 +D0 +80 +80 +98 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni077A +ENCODING 1914 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +A0 +A0 +C0 +80 +90 +A8 +20 +40 +80 +FE +ENDCHAR +STARTCHAR uni077B +ENCODING 1915 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +A8 +A8 +D0 +80 +90 +A8 +20 +40 +80 +FE +ENDCHAR +STARTCHAR uni077C +ENCODING 1916 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +FC +20 +48 +96 +90 +90 +44 +38 +ENDCHAR +STARTCHAR uni077D +ENCODING 1917 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +10 +2C +20 +20 +20 +02 +2A +2A +BC +90 +90 +60 +ENDCHAR +STARTCHAR uni077E +ENCODING 1918 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +10 +28 +44 +00 +02 +2A +2A +BC +90 +90 +60 +ENDCHAR +STARTCHAR uni077F +ENCODING 1919 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +50 +04 +14 +24 +14 +44 +84 +84 +78 +ENDCHAR +STARTCHAR uni0780 +ENCODING 1920 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 4 +BITMAP +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni0781 +ENCODING 1921 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 3 +BITMAP +12 +1C +10 +20 +C0 +ENDCHAR +STARTCHAR uni0782 +ENCODING 1922 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 3 +BITMAP +2A +34 +20 +40 +80 +ENDCHAR +STARTCHAR uni0783 +ENCODING 1923 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 0 3 +BITMAP +14 +08 +14 +20 +C0 +ENDCHAR +STARTCHAR uni0784 +ENCODING 1924 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 4 +BITMAP +50 +A8 +A8 +70 +ENDCHAR +STARTCHAR uni0785 +ENCODING 1925 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 0 2 +BITMAP +10 +24 +38 +10 +20 +C0 +ENDCHAR +STARTCHAR uni0786 +ENCODING 1926 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 4 +BITMAP +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni0787 +ENCODING 1927 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 3 +BITMAP +06 +0A +12 +22 +C2 +ENDCHAR +STARTCHAR uni0788 +ENCODING 1928 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 2 +BITMAP +10 +28 +28 +10 +20 +C0 +ENDCHAR +STARTCHAR uni0789 +ENCODING 1929 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 3 +BITMAP +38 +48 +10 +20 +C0 +ENDCHAR +STARTCHAR uni078A +ENCODING 1930 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 1 +BITMAP +08 +10 +08 +10 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni078B +ENCODING 1931 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 2 +BITMAP +02 +04 +02 +1C +20 +C0 +ENDCHAR +STARTCHAR uni078C +ENCODING 1932 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 2 +BITMAP +0C +12 +2C +40 +20 +C0 +ENDCHAR +STARTCHAR uni078D +ENCODING 1933 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 2 +BITMAP +10 +20 +78 +10 +20 +C0 +ENDCHAR +STARTCHAR uni078E +ENCODING 1934 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 2 +BITMAP +08 +10 +20 +10 +E0 +ENDCHAR +STARTCHAR uni078F +ENCODING 1935 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +54 +68 +40 +80 +80 +70 +ENDCHAR +STARTCHAR uni0790 +ENCODING 1936 +BBX 13 3 1 3 +BITMAP +6008 +7FF0 +8000 +ENDCHAR +STARTCHAR uni0791 +ENCODING 1937 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +30 +C0 +30 +C0 +30 +0C +ENDCHAR +STARTCHAR uni0792 +ENCODING 1938 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 1 2 +BITMAP +50 +20 +50 +80 +80 +70 +ENDCHAR +STARTCHAR uni0793 +ENCODING 1939 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 2 +BITMAP +50 +A8 +A8 +70 +80 +70 +ENDCHAR +STARTCHAR uni0794 +ENCODING 1940 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 3 +BITMAP +16 +1A +22 +C0 +ENDCHAR +STARTCHAR uni0795 +ENCODING 1941 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 1 +BITMAP +08 +10 +08 +10 +08 +10 +24 +C0 +ENDCHAR +STARTCHAR uni0796 +ENCODING 1942 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 2 +BITMAP +08 +10 +08 +70 +80 +70 +ENDCHAR +STARTCHAR uni0797 +ENCODING 1943 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 2 +BITMAP +01 +02 +04 +0C +12 +2C +40 +20 +C0 +ENDCHAR +STARTCHAR uni0798 +ENCODING 1944 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 1 +BITMAP +04 +11 +0C +12 +2C +40 +20 +C0 +ENDCHAR +STARTCHAR uni0799 +ENCODING 1945 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 4 +BITMAP +08 +10 +20 +C8 +ENDCHAR +STARTCHAR uni079A +ENCODING 1946 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +20 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni079B +ENCODING 1947 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 2 +BITMAP +08 +02 +04 +02 +1C +20 +C0 +ENDCHAR +STARTCHAR uni079C +ENCODING 1948 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 0 2 +BITMAP +08 +00 +14 +08 +14 +20 +C0 +ENDCHAR +STARTCHAR uni079D +ENCODING 1949 +BBX 13 5 1 3 +BITMAP +0100 +0440 +6008 +7FF0 +8000 +ENDCHAR +STARTCHAR uni079E +ENCODING 1950 +BBX 13 4 1 2 +BITMAP +6008 +7FF0 +8000 +0100 +ENDCHAR +STARTCHAR uni079F +ENCODING 1951 +BBX 13 4 1 3 +BITMAP +0100 +6008 +7FF0 +8000 +ENDCHAR +STARTCHAR uni07A0 +ENCODING 1952 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 2 +BITMAP +0C +12 +2C +40 +28 +C0 +ENDCHAR +STARTCHAR uni07A1 +ENCODING 1953 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 1 +BITMAP +04 +00 +0C +12 +2C +40 +20 +C0 +ENDCHAR +STARTCHAR uni07A2 +ENCODING 1954 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 2 +BITMAP +06 +0A +12 +22 +C2 +08 +ENDCHAR +STARTCHAR uni07A3 +ENCODING 1955 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 3 +BITMAP +04 +00 +06 +0A +32 +C2 +ENDCHAR +STARTCHAR uni07A4 +ENCODING 1956 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 2 +BITMAP +28 +00 +18 +20 +10 +E0 +ENDCHAR +STARTCHAR uni07A5 +ENCODING 1957 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 1 +BITMAP +10 +00 +10 +28 +28 +10 +20 +C0 +ENDCHAR +STARTCHAR uni07A6 +ENCODING 1958 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 2 10 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni07A7 +ENCODING 1959 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 1 10 +BITMAP +24 +48 +90 +ENDCHAR +STARTCHAR uni07A8 +ENCODING 1960 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 1 -2 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni07A9 +ENCODING 1961 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 1 -2 +BITMAP +24 +48 +90 +ENDCHAR +STARTCHAR uni07AA +ENCODING 1962 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 2 9 +BITMAP +C0 +20 +40 +80 +ENDCHAR +STARTCHAR uni07AB +ENCODING 1963 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 1 9 +BITMAP +CC +22 +44 +88 +ENDCHAR +STARTCHAR uni07AC +ENCODING 1964 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 2 9 +BITMAP +20 +40 +80 +60 +ENDCHAR +STARTCHAR uni07AD +ENCODING 1965 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 0 9 +BITMAP +22 +44 +88 +66 +ENDCHAR +STARTCHAR uni07AE +ENCODING 1966 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 1 9 +BITMAP +C4 +28 +50 +8C +ENDCHAR +STARTCHAR uni07AF +ENCODING 1967 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 1 9 +BITMAP +38 +48 +90 +80 +60 +ENDCHAR +STARTCHAR uni07B0 +ENCODING 1968 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 2 10 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni07B1 +ENCODING 1969 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 1 1 +BITMAP +20 +50 +50 +20 +40 +80 +70 +ENDCHAR +STARTCHAR uni07C0 +ENCODING 1984 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +48 +84 +84 +84 +84 +48 +48 +30 +ENDCHAR +STARTCHAR uni07C1 +ENCODING 1985 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +28 +24 +20 +20 +20 +20 +20 +20 +FC +ENDCHAR +STARTCHAR uni07C2 +ENCODING 1986 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +88 +88 +88 +F8 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni07C3 +ENCODING 1987 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +10 +10 +10 +10 +10 +10 +F0 +10 +10 +F0 +ENDCHAR +STARTCHAR uni07C4 +ENCODING 1988 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +10 +10 +10 +10 +10 +F0 +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uni07C5 +ENCODING 1989 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 2 0 +BITMAP +80 +80 +80 +80 +E0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni07C6 +ENCODING 1990 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +80 +F8 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni07C7 +ENCODING 1991 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +84 +88 +90 +A0 +C0 +C0 +ENDCHAR +STARTCHAR uni07C8 +ENCODING 1992 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +FC +88 +90 +A0 +C0 +C0 +ENDCHAR +STARTCHAR uni07C9 +ENCODING 1993 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +88 +88 +70 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni07CA +ENCODING 1994 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni07CB +ENCODING 1995 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +30 +48 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni07CC +ENCODING 1996 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +82 +44 +28 +28 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni07CD +ENCODING 1997 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni07CE +ENCODING 1998 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 0 +BITMAP +88 +88 +88 +88 +88 +F8 +ENDCHAR +STARTCHAR uni07CF +ENCODING 1999 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 0 +BITMAP +F8 +08 +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uni07D0 +ENCODING 2000 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +88 +88 +70 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni07D1 +ENCODING 2001 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +20 +40 +40 +30 +00 +00 +00 +00 +FC +ENDCHAR +STARTCHAR uni07D2 +ENCODING 2002 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +40 +A0 +A0 +78 +28 +48 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni07D3 +ENCODING 2003 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +F0 +80 +80 +F0 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni07D4 +ENCODING 2004 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +F0 +10 +10 +F0 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni07D5 +ENCODING 2005 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +80 +F0 +88 +88 +88 +88 +F0 +ENDCHAR +STARTCHAR uni07D6 +ENCODING 2006 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +80 +80 +40 +40 +20 +20 +10 +10 +10 +ENDCHAR +STARTCHAR uni07D7 +ENCODING 2007 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 1 0 +BITMAP +30 +50 +90 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni07D8 +ENCODING 2008 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +58 +A4 +A4 +A4 +A4 +FC +ENDCHAR +STARTCHAR uni07D9 +ENCODING 2009 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni07DA +ENCODING 2010 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +48 +48 +48 +48 +FC +48 +48 +48 +48 +78 +ENDCHAR +STARTCHAR uni07DB +ENCODING 2011 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +FC +84 +84 +84 +84 +FC +ENDCHAR +STARTCHAR uni07DC +ENCODING 2012 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 0 +BITMAP +F8 +88 +88 +50 +50 +20 +ENDCHAR +STARTCHAR uni07DD +ENCODING 2013 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +14 +14 +14 +18 +F0 +90 +90 +90 +F0 +ENDCHAR +STARTCHAR uni07DE +ENCODING 2014 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +10 +90 +90 +F0 +90 +90 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni07DF +ENCODING 2015 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +60 +90 +90 +90 +7C +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni07E0 +ENCODING 2016 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni07E1 +ENCODING 2017 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 0 +BITMAP +20 +50 +50 +88 +88 +F8 +ENDCHAR +STARTCHAR uni07E2 +ENCODING 2018 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +E0 +20 +20 +70 +88 +88 +70 +20 +20 +20 +ENDCHAR +STARTCHAR uni07E3 +ENCODING 2019 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +88 +88 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni07E4 +ENCODING 2020 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +80 +80 +F0 +90 +90 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni07E5 +ENCODING 2021 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +F0 +10 +10 +10 +F0 +90 +90 +90 +90 +F0 +ENDCHAR +STARTCHAR uni07E6 +ENCODING 2022 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +70 +88 +88 +70 +20 +20 +20 +ENDCHAR +STARTCHAR uni07E7 +ENCODING 2023 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +20 +20 +70 +88 +88 +70 +20 +20 +20 +ENDCHAR +STARTCHAR uni07E8 +ENCODING 2024 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 -2 +BITMAP +20 +E0 +24 +38 +ENDCHAR +STARTCHAR uni07E9 +ENCODING 2025 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 -2 +BITMAP +20 +E8 +34 +38 +ENDCHAR +STARTCHAR uni07EA +ENCODING 2026 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 -2 +BITMAP +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni07EB +ENCODING 2027 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 2 11 +BITMAP +F0 +ENDCHAR +STARTCHAR uni07EC +ENCODING 2028 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 1 11 +BITMAP +24 +58 +80 +ENDCHAR +STARTCHAR uni07ED +ENCODING 2029 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 3 12 +BITMAP +80 +ENDCHAR +STARTCHAR uni07EE +ENCODING 2030 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 1 11 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni07EF +ENCODING 2031 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 1 11 +BITMAP +10 +08 +FC +ENDCHAR +STARTCHAR uni07F0 +ENCODING 2032 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 1 11 +BITMAP +90 +68 +04 +ENDCHAR +STARTCHAR uni07F1 +ENCODING 2033 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 1 11 +BITMAP +20 +40 +FC +ENDCHAR +STARTCHAR uni07F2 +ENCODING 2034 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 3 -2 +BITMAP +80 +ENDCHAR +STARTCHAR uni07F3 +ENCODING 2035 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 2 11 +BITMAP +90 +ENDCHAR +STARTCHAR uni07F4 +ENCODING 2036 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 2 5 +BITMAP +C0 +20 +20 +40 +ENDCHAR +STARTCHAR uni07F5 +ENCODING 2037 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 2 5 +BITMAP +40 +80 +80 +60 +ENDCHAR +STARTCHAR uni07F6 +ENCODING 2038 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +70 +88 +88 +88 +78 +10 +20 +40 +80 +F8 +ENDCHAR +STARTCHAR uni07F7 +ENCODING 2039 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 1 +BITMAP +38 +44 +54 +44 +82 +AA +82 +54 +38 +ENDCHAR +STARTCHAR uni07F8 +ENCODING 2040 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +60 +60 +00 +00 +00 +00 +00 +F0 +ENDCHAR +STARTCHAR uni07F9 +ENCODING 2041 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +F0 +00 +00 +60 +60 +00 +60 +60 +ENDCHAR +STARTCHAR uni07FA +ENCODING 2042 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 1 0 0 +BITMAP +FF +ENDCHAR +STARTCHAR uni07FD +ENCODING 2045 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 1 -2 +BITMAP +FC +84 +ENDCHAR +STARTCHAR uni07FE +ENCODING 2046 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +58 +A4 +A4 +A4 +FC +20 +F8 +20 +ENDCHAR +STARTCHAR uni07FF +ENCODING 2047 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 0 0 +BITMAP +40 +F0 +40 +40 +78 +44 +44 +44 +44 +78 +ENDCHAR +STARTCHAR uni0800 +ENCODING 2048 +BBX 11 9 3 0 +BITMAP +0040 +0880 +1500 +2200 +4120 +4140 +8180 +8100 +6200 +ENDCHAR +STARTCHAR uni0801 +ENCODING 2049 +BBX 11 8 2 0 +BITMAP +0E00 +1100 +2080 +3F80 +0040 +0040 +0020 +FFE0 +ENDCHAR +STARTCHAR uni0802 +ENCODING 2050 +BBX 8 8 4 0 +BITMAP +03 +7C +44 +84 +02 +01 +02 +0C +ENDCHAR +STARTCHAR uni0803 +ENCODING 2051 +BBX 9 8 4 0 +BITMAP +3F80 +4200 +8100 +FF00 +0080 +0080 +0100 +0200 +ENDCHAR +STARTCHAR uni0804 +ENCODING 2052 +BBX 8 8 4 0 +BITMAP +03 +7C +4C +94 +26 +49 +52 +04 +ENDCHAR +STARTCHAR uni0805 +ENCODING 2053 +BBX 8 8 4 0 +BITMAP +04 +7A +49 +90 +30 +4E +01 +02 +ENDCHAR +STARTCHAR uni0806 +ENCODING 2054 +BBX 9 8 3 0 +BITMAP +1C00 +2200 +E300 +9C80 +8080 +8080 +8100 +E600 +ENDCHAR +STARTCHAR uni0807 +ENCODING 2055 +BBX 10 8 2 0 +BITMAP +0080 +1F00 +1300 +2500 +C980 +3240 +1440 +0880 +ENDCHAR +STARTCHAR uni0808 +ENCODING 2056 +BBX 9 9 3 0 +BITMAP +1000 +2000 +4F80 +8880 +4500 +2500 +1200 +0A00 +0400 +ENDCHAR +STARTCHAR uni0809 +ENCODING 2057 +BBX 8 7 4 0 +BITMAP +0F +39 +49 +49 +92 +92 +92 +ENDCHAR +STARTCHAR uni080A +ENCODING 2058 +BBX 10 9 3 0 +BITMAP +4040 +6040 +FF80 +0080 +0080 +0080 +1080 +3C80 +7F80 +ENDCHAR +STARTCHAR uni080B +ENCODING 2059 +BBX 9 9 3 0 +BITMAP +0400 +0400 +0400 +1800 +2000 +4000 +4080 +C180 +FF80 +ENDCHAR +STARTCHAR uni080C +ENCODING 2060 +BBX 11 8 2 0 +BITMAP +2220 +7760 +7FE0 +8020 +0020 +2040 +7840 +FFC0 +ENDCHAR +STARTCHAR uni080D +ENCODING 2061 +BBX 8 12 4 0 +BITMAP +40 +40 +40 +80 +80 +FF +01 +01 +01 +21 +79 +FF +ENDCHAR +STARTCHAR uni080E +ENCODING 2062 +BBX 10 11 3 -1 +BITMAP +3000 +4800 +5000 +CE00 +03C0 +0480 +4500 +FB00 +0800 +1000 +3C00 +ENDCHAR +STARTCHAR uni080F +ENCODING 2063 +BBX 8 6 3 1 +BITMAP +FF +42 +22 +14 +0C +04 +ENDCHAR +STARTCHAR uni0810 +ENCODING 2064 +BBX 8 7 4 0 +BITMAP +FF +01 +01 +01 +21 +79 +FF +ENDCHAR +STARTCHAR uni0811 +ENCODING 2065 +BBX 9 7 3 0 +BITMAP +1F80 +A480 +E480 +A480 +2900 +C900 +4900 +ENDCHAR +STARTCHAR uni0812 +ENCODING 2066 +BBX 8 9 4 -1 +BITMAP +80 +7E +61 +91 +0A +04 +18 +20 +18 +ENDCHAR +STARTCHAR uni0813 +ENCODING 2067 +BBX 9 8 4 0 +BITMAP +3C00 +4200 +8100 +FF00 +0080 +0080 +0100 +0200 +ENDCHAR +STARTCHAR uni0814 +ENCODING 2068 +BBX 12 4 2 4 +BITMAP +2220 +7760 +7FE0 +8010 +ENDCHAR +STARTCHAR uni0815 +ENCODING 2069 +BBX 11 8 3 0 +BITMAP +0800 +1400 +2200 +4120 +4140 +8180 +8100 +6200 +ENDCHAR +STARTCHAR uni0816 +ENCODING 2070 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 10 8 +BITMAP +40 +80 +A0 +48 +30 +ENDCHAR +STARTCHAR uni0817 +ENCODING 2071 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 11 7 +BITMAP +80 +80 +90 +A0 +B0 +60 +ENDCHAR +STARTCHAR uni0818 +ENCODING 2072 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 1 4 12 +BITMAP +FFC0 +ENDCHAR +STARTCHAR uni0819 +ENCODING 2073 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 8 9 +BITMAP +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uni081A +ENCODING 2074 +BBX 8 2 4 11 +BITMAP +71 +8E +ENDCHAR +STARTCHAR uni081B +ENCODING 2075 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 2 4 11 +BITMAP +71 +8E +ENDCHAR +STARTCHAR uni081C +ENCODING 2076 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 1 7 +BITMAP +88 +88 +50 +50 +20 +20 +ENDCHAR +STARTCHAR uni081D +ENCODING 2077 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 1 10 +BITMAP +88 +50 +20 +ENDCHAR +STARTCHAR uni081E +ENCODING 2078 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 8 3 5 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni081F +ENCODING 2079 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 5 3 8 +BITMAP +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0820 +ENCODING 2080 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 3 10 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni0821 +ENCODING 2081 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 1 12 +BITMAP +FF +ENDCHAR +STARTCHAR uni0822 +ENCODING 2082 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 3 12 +BITMAP +F8 +ENDCHAR +STARTCHAR uni0823 +ENCODING 2083 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 1 4 12 +BITMAP +E0 +ENDCHAR +STARTCHAR uni0824 +ENCODING 2084 +BBX 3 6 6 7 +BITMAP +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni0825 +ENCODING 2085 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 6 2 7 +BITMAP +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni0826 +ENCODING 2086 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 1 7 +BITMAP +20 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni0827 +ENCODING 2087 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 1 10 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni0828 +ENCODING 2088 +BBX 3 5 6 8 +BITMAP +20 +40 +80 +40 +20 +ENDCHAR +STARTCHAR uni0829 +ENCODING 2089 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 2 8 +BITMAP +0C +30 +C0 +30 +0C +ENDCHAR +STARTCHAR uni082A +ENCODING 2090 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 4 8 +BITMAP +20 +40 +80 +40 +20 +ENDCHAR +STARTCHAR uni082B +ENCODING 2091 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 1 7 +BITMAP +20 +20 +50 +50 +88 +F8 +ENDCHAR +STARTCHAR uni082C +ENCODING 2092 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 7 9 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni082D +ENCODING 2093 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 7 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0830 +ENCODING 2096 +BBX 2 2 7 6 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0831 +ENCODING 2097 +BBX 2 8 7 2 +BITMAP +C0 +C0 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni0832 +ENCODING 2098 +BBX 7 2 4 6 +BITMAP +C6 +C6 +ENDCHAR +STARTCHAR uni0833 +ENCODING 2099 +BBX 11 8 2 1 +BITMAP +FC60 +C060 +4000 +2000 +1000 +0800 +0800 +1000 +ENDCHAR +STARTCHAR uni0834 +ENCODING 2100 +BBX 11 8 2 1 +BITMAP +FC60 +C060 +4000 +2000 +1000 +0860 +0860 +1000 +ENDCHAR +STARTCHAR uni0835 +ENCODING 2101 +BBX 5 7 5 2 +BITMAP +48 +00 +78 +80 +80 +60 +18 +ENDCHAR +STARTCHAR uni0836 +ENCODING 2102 +BBX 7 11 5 1 +BITMAP +06 +06 +00 +10 +08 +08 +10 +20 +40 +C0 +FC +ENDCHAR +STARTCHAR uni0837 +ENCODING 2103 +BBX 14 8 1 1 +BITMAP +00FC +00C0 +0040 +FF20 +0010 +0008 +0008 +0010 +ENDCHAR +STARTCHAR uni0838 +ENCODING 2104 +BBX 14 2 1 5 +BITMAP +000C +FFCC +ENDCHAR +STARTCHAR uni0839 +ENCODING 2105 +BBX 14 7 1 2 +BITMAP +000C +000C +0000 +FFC0 +0000 +000C +000C +ENDCHAR +STARTCHAR uni083A +ENCODING 2106 +BBX 14 7 1 2 +BITMAP +000C +FFCC +0000 +0000 +0000 +000C +FFCC +ENDCHAR +STARTCHAR uni083B +ENCODING 2107 +BBX 6 7 5 2 +BITMAP +8C +8C +80 +80 +80 +8C +8C +ENDCHAR +STARTCHAR uni083C +ENCODING 2108 +BBX 10 10 2 1 +BITMAP +0040 +0080 +0100 +0200 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni083D +ENCODING 2109 +BBX 11 10 2 1 +BITMAP +0040 +0080 +0100 +0200 +0460 +0860 +1000 +2000 +4660 +8660 +ENDCHAR +STARTCHAR uni083E +ENCODING 2110 +BBX 4 4 6 4 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0840 +ENCODING 2112 +BBX 7 6 4 1 +BITMAP +38 +44 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni0841 +ENCODING 2113 +BBX 13 7 2 2 +BITMAP +0210 +0410 +0810 +0FE0 +0100 +0080 +FFF8 +ENDCHAR +STARTCHAR uni0842 +ENCODING 2114 +BBX 12 8 2 2 +BITMAP +0180 +0240 +0580 +0400 +0200 +0100 +00C0 +FFF0 +ENDCHAR +STARTCHAR uni0843 +ENCODING 2115 +BBX 12 7 2 2 +BITMAP +0050 +0090 +0110 +01F0 +0010 +0010 +FFE0 +ENDCHAR +STARTCHAR uni0844 +ENCODING 2116 +BBX 12 3 2 2 +BITMAP +0150 +0150 +FFE0 +ENDCHAR +STARTCHAR uni0845 +ENCODING 2117 +BBX 8 4 6 5 +BITMAP +04 +02 +01 +FF +ENDCHAR +STARTCHAR uni0846 +ENCODING 2118 +BBX 1 8 8 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0847 +ENCODING 2119 +BBX 9 4 5 2 +BITMAP +7C00 +8200 +8100 +7F80 +ENDCHAR +STARTCHAR uni0848 +ENCODING 2120 +BBX 10 6 2 5 +BITMAP +0380 +0480 +0500 +0500 +0280 +FFC0 +ENDCHAR +STARTCHAR uni0849 +ENCODING 2121 +BBX 6 4 6 5 +BITMAP +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni084A +ENCODING 2122 +BBX 8 10 3 0 +BITMAP +02 +84 +48 +48 +27 +21 +22 +24 +48 +70 +ENDCHAR +STARTCHAR uni084B +ENCODING 2123 +BBX 7 8 7 2 +BITMAP +02 +02 +02 +02 +02 +02 +02 +FC +ENDCHAR +STARTCHAR uni084C +ENCODING 2124 +BBX 12 7 2 2 +BITMAP +0210 +0410 +0810 +0FF0 +0110 +0090 +FF10 +ENDCHAR +STARTCHAR uni084D +ENCODING 2125 +BBX 8 9 3 0 +BITMAP +82 +41 +41 +21 +22 +22 +24 +48 +70 +ENDCHAR +STARTCHAR uni084E +ENCODING 2126 +BBX 12 4 2 2 +BITMAP +0060 +0210 +0110 +FFE0 +ENDCHAR +STARTCHAR uni084F +ENCODING 2127 +BBX 12 7 2 2 +BITMAP +0100 +0200 +0400 +07E0 +0010 +0010 +FFE0 +ENDCHAR +STARTCHAR uni0850 +ENCODING 2128 +BBX 8 10 3 0 +BITMAP +06 +89 +4B +45 +21 +22 +22 +24 +48 +70 +ENDCHAR +STARTCHAR uni0851 +ENCODING 2129 +BBX 12 10 3 0 +BITMAP +0150 +8150 +41F0 +4100 +2100 +2200 +2200 +2400 +4800 +7000 +ENDCHAR +STARTCHAR uni0852 +ENCODING 2130 +BBX 12 7 2 2 +BITMAP +0210 +0410 +0810 +0FF0 +0110 +0090 +FFE0 +ENDCHAR +STARTCHAR uni0853 +ENCODING 2131 +BBX 12 7 2 2 +BITMAP +0210 +0410 +0810 +0FF0 +0010 +0010 +FFE0 +ENDCHAR +STARTCHAR uni0854 +ENCODING 2132 +BBX 11 8 3 1 +BITMAP +60C0 +9120 +9120 +6AC0 +0A00 +0A00 +0400 +0400 +ENDCHAR +STARTCHAR uni0855 +ENCODING 2133 +BBX 10 5 4 4 +BITMAP +0840 +07C0 +0240 +0240 +FC40 +ENDCHAR +STARTCHAR uni0856 +ENCODING 2134 +BBX 8 4 4 5 +BITMAP +21 +42 +84 +FF +ENDCHAR +STARTCHAR uni0857 +ENCODING 2135 +BBX 12 10 2 0 +BITMAP +0020 +4440 +8280 +8280 +7E70 +0210 +0220 +0240 +0480 +0700 +ENDCHAR +STARTCHAR uni0858 +ENCODING 2136 +BBX 4 9 6 1 +BITMAP +20 +40 +80 +80 +70 +80 +80 +80 +70 +ENDCHAR +STARTCHAR uni0859 +ENCODING 2137 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 6 -1 +BITMAP +90 +90 +ENDCHAR +STARTCHAR uni085A +ENCODING 2138 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 6 0 +BITMAP +F8 +ENDCHAR +STARTCHAR uni085B +ENCODING 2139 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 2 8 -1 +BITMAP +80 +80 +ENDCHAR +STARTCHAR uni085E +ENCODING 2142 +BBX 10 10 3 1 +BITMAP +0C00 +3300 +4080 +4C80 +9240 +9240 +4C80 +4080 +3300 +0C00 +ENDCHAR +STARTCHAR uni0860 +ENCODING 2144 +BBX 10 10 2 0 +BITMAP +0F00 +1080 +2840 +1840 +0040 +0380 +0080 +8040 +4040 +3FC0 +ENDCHAR +STARTCHAR uni0861 +ENCODING 2145 +BBX 13 12 1 -2 +BITMAP +3DE0 +5210 +5210 +2010 +0010 +3E10 +4110 +80E0 +8000 +7FF0 +0048 +0030 +ENDCHAR +STARTCHAR uni0862 +ENCODING 2146 +BBX 13 10 2 0 +BITMAP +6000 +9800 +A610 +41A8 +0048 +06B0 +0900 +8680 +4040 +3FC0 +ENDCHAR +STARTCHAR uni0863 +ENCODING 2147 +BBX 14 10 1 0 +BITMAP +8000 +4000 +2000 +1000 +0800 +0400 +021C +0108 +0088 +0070 +ENDCHAR +STARTCHAR uni0864 +ENCODING 2148 +BBX 10 10 2 0 +BITMAP +0F00 +1080 +2840 +1840 +0340 +0480 +0380 +8040 +4040 +3FC0 +ENDCHAR +STARTCHAR uni0865 +ENCODING 2149 +BBX 10 10 2 0 +BITMAP +1F00 +2080 +2040 +1040 +0040 +0380 +0080 +8040 +4040 +3FC0 +ENDCHAR +STARTCHAR uni0866 +ENCODING 2150 +BBX 11 10 2 0 +BITMAP +1FC0 +6020 +8020 +0FC0 +1000 +1000 +0FC0 +0020 +2020 +1FC0 +ENDCHAR +STARTCHAR uni0867 +ENCODING 2151 +BBX 7 9 3 0 +BITMAP +08 +04 +02 +02 +02 +04 +08 +30 +C0 +ENDCHAR +STARTCHAR uni0868 +ENCODING 2152 +BBX 12 10 2 0 +BITMAP +3000 +4800 +8800 +9000 +A000 +C000 +8060 +8490 +8490 +7BE0 +ENDCHAR +STARTCHAR uni0869 +ENCODING 2153 +BBX 11 12 2 -2 +BITMAP +8000 +4000 +2000 +2000 +2000 +2000 +20C0 +2120 +2120 +3FE0 +0100 +0600 +ENDCHAR +STARTCHAR uni086A +ENCODING 2154 +BBX 10 10 3 0 +BITMAP +0180 +2240 +4240 +8280 +8100 +8280 +8480 +4840 +5040 +3F80 +ENDCHAR +STARTCHAR uni0870 +ENCODING 2160 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 3 +BITMAP +18 +E0 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0871 +ENCODING 2161 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 3 +BITMAP +30 +C0 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0872 +ENCODING 2162 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 3 +BITMAP +80 +80 +B0 +C0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0873 +ENCODING 2163 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 3 +BITMAP +10 +10 +10 +30 +D0 +10 +10 +10 +ENDCHAR +STARTCHAR uni0874 +ENCODING 2164 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +38 +C0 +ENDCHAR +STARTCHAR uni0875 +ENCODING 2165 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 3 +BITMAP +80 +80 +80 +80 +80 +80 +B0 +C0 +ENDCHAR +STARTCHAR uni0876 +ENCODING 2166 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 3 +BITMAP +E0 +E0 +40 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni0877 +ENCODING 2167 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 3 3 +BITMAP +80 +80 +80 +E0 +E0 +80 +80 +80 +ENDCHAR +STARTCHAR uni0878 +ENCODING 2168 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 2 3 +BITMAP +20 +20 +20 +E0 +E0 +20 +20 +20 +ENDCHAR +STARTCHAR uni0879 +ENCODING 2169 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 1 +BITMAP +40 +40 +40 +40 +40 +40 +40 +40 +E0 +E0 +ENDCHAR +STARTCHAR uni087A +ENCODING 2170 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 3 +BITMAP +80 +00 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni087B +ENCODING 2171 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 3 +BITMAP +80 +30 +C0 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni087C +ENCODING 2172 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 3 +BITMAP +80 +00 +80 +80 +B0 +C0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni087D +ENCODING 2173 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 3 +BITMAP +80 +00 +80 +80 +80 +80 +80 +80 +B0 +C0 +ENDCHAR +STARTCHAR uni087E +ENCODING 2174 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +0C +30 +20 +20 +60 +A0 +60 +20 +20 +ENDCHAR +STARTCHAR uni087F +ENCODING 2175 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +20 +20 +6C +B0 +60 +20 +20 +20 +ENDCHAR +STARTCHAR uni0880 +ENCODING 2176 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +20 +20 +60 +A0 +60 +20 +2C +30 +ENDCHAR +STARTCHAR uni0881 +ENCODING 2177 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 3 +BITMAP +80 +80 +B0 +C0 +F0 +C0 +80 +80 +ENDCHAR +STARTCHAR uni0882 +ENCODING 2178 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 3 +BITMAP +10 +10 +70 +90 +F0 +50 +90 +10 +ENDCHAR +STARTCHAR uni0883 +ENCODING 2179 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +1C +20 +3C +FF +20 +ENDCHAR +STARTCHAR uni0884 +ENCODING 2180 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -1 +BITMAP +0C +12 +12 +FF +02 +04 +48 +30 +ENDCHAR +STARTCHAR uni0885 +ENCODING 2181 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 1 +BITMAP +FF +00 +28 +ENDCHAR +STARTCHAR uni0886 +ENCODING 2182 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 1 +BITMAP +10 +08 +F0 +00 +50 +ENDCHAR +STARTCHAR uni0887 +ENCODING 2183 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 3 +BITMAP +60 +F0 +F0 +60 +ENDCHAR +STARTCHAR uni0888 +ENCODING 2184 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 6 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0889 +ENCODING 2185 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +50 +88 +00 +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni088A +ENCODING 2186 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +FC +20 +48 +94 +A2 +80 +44 +38 +ENDCHAR +STARTCHAR uni088B +ENCODING 2187 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +40 +40 +40 +40 +58 +64 +44 +F8 +00 +10 +ENDCHAR +STARTCHAR uni088C +ENCODING 2188 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +40 +40 +40 +40 +58 +64 +44 +F8 +00 +28 +00 +10 +ENDCHAR +STARTCHAR uni088D +ENCODING 2189 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -1 +BITMAP +04 +08 +10 +20 +40 +3C +82 +7E +00 +08 +00 +08 +ENDCHAR +STARTCHAR uni088E +ENCODING 2190 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 4 -1 +BITMAP +80 +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0890 +ENCODING 2192 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +00E1 +8098 +3FFD +8000 +0001 +8000 +0001 +8000 +0001 +8000 +0001 +8000 +0001 +AAAA +ENDCHAR +STARTCHAR uni0891 +ENCODING 2193 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0701 +9900 +3FFD +8000 +0001 +8000 +0001 +8000 +0001 +8000 +0001 +8000 +0001 +AAAA +ENDCHAR +STARTCHAR uni0897 +ENCODING 2199 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 1 11 +BITMAP +72 +9C +ENDCHAR +STARTCHAR uni0898 +ENCODING 2200 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 7 1 7 +BITMAP +0044 +0444 +30E4 +4414 +77E4 +8400 +3820 +ENDCHAR +STARTCHAR uni0899 +ENCODING 2201 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 5 1 -2 +BITMAP +0040 +68A4 +E804 +89F4 +8784 +ENDCHAR +STARTCHAR uni089A +ENCODING 2202 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 4 1 -2 +BITMAP +A504 +0524 +6554 +99B4 +ENDCHAR +STARTCHAR uni089B +ENCODING 2203 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 5 0 -2 +BITMAP +0006 +1000 +1F42 +90BE +6680 +ENDCHAR +STARTCHAR uni089C +ENCODING 2204 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 1 10 +BITMAP +02 +FC +40 +ENDCHAR +STARTCHAR uni089D +ENCODING 2205 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 0 11 +BITMAP +9C +A0 +C0 +ENDCHAR +STARTCHAR uni089E +ENCODING 2206 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 0 10 +BITMAP +7F +80 +3F +40 +ENDCHAR +STARTCHAR uni089F +ENCODING 2207 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 0 10 +BITMAP +78 +81 +3E +40 +ENDCHAR +STARTCHAR uni08A0 +ENCODING 2208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +08 +44 +84 +78 +00 +44 +28 +10 +ENDCHAR +STARTCHAR uni08A1 +ENCODING 2209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 1 +BITMAP +18 +20 +18 +20 +00 +08 +44 +84 +78 +00 +20 +ENDCHAR +STARTCHAR uni08A2 +ENCODING 2210 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +10 +40 +00 +FC +20 +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uni08A3 +ENCODING 2211 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +40 +44 +50 +40 +58 +64 +44 +F8 +ENDCHAR +STARTCHAR uni08A4 +ENCODING 2212 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 1 +BITMAP +20 +00 +50 +00 +0C +14 +0C +84 +84 +78 +00 +20 +ENDCHAR +STARTCHAR uni08A5 +ENCODING 2213 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +48 +00 +00 +38 +24 +14 +4C +84 +88 +70 +00 +20 +ENDCHAR +STARTCHAR uni08A6 +ENCODING 2214 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +08 +08 +3E +08 +3E +08 +48 +88 +88 +90 +70 +ENDCHAR +STARTCHAR uni08A7 +ENCODING 2215 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 -2 +BITMAP +20 +00 +50 +00 +70 +18 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni08A8 +ENCODING 2216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +30 +40 +30 +40 +08 +94 +90 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uni08A9 +ENCODING 2217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +20 +00 +08 +94 +90 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uni08AA +ENCODING 2218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +08 +04 +04 +04 +68 +90 +68 +04 +ENDCHAR +STARTCHAR uni08AB +ENCODING 2219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +18 +24 +24 +1C +44 +08 +90 +60 +ENDCHAR +STARTCHAR uni08AC +ENCODING 2220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +10 +28 +28 +DC +80 +94 +ENDCHAR +STARTCHAR uni08AD +ENCODING 2221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 5 4 -1 +BITMAP +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni08AE +ENCODING 2222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +10 +08 +04 +84 +F8 +00 +50 +00 +20 +ENDCHAR +STARTCHAR uni08AF +ENCODING 2223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +0C +32 +9C +90 +60 +08 +40 +10 +ENDCHAR +STARTCHAR uni08B0 +ENCODING 2224 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 3 +BITMAP +08 +10 +24 +48 +50 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uni08B1 +ENCODING 2225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 3 -1 +BITMAP +40 +A0 +A0 +F0 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni08B2 +ENCODING 2226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +20 +50 +88 +00 +20 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni08B3 +ENCODING 2227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +30 +48 +40 +38 +40 +A8 +80 +90 +84 +78 +ENDCHAR +STARTCHAR uni08B4 +ENCODING 2228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +14 +24 +14 +44 +84 +84 +78 +00 +00 +10 +ENDCHAR +STARTCHAR uni08B5 +ENCODING 2229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +38 +24 +14 +4C +84 +88 +70 +00 +20 +ENDCHAR +STARTCHAR uni08B6 +ENCODING 2230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +08 +38 +20 +20 +08 +44 +84 +78 +00 +00 +10 +ENDCHAR +STARTCHAR uni08B7 +ENCODING 2231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +30 +08 +38 +20 +20 +08 +44 +84 +78 +00 +48 +00 +10 +ENDCHAR +STARTCHAR uni08B8 +ENCODING 2232 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 3 +BITMAP +14 +00 +00 +22 +9D +41 +3E +ENDCHAR +STARTCHAR uni08B9 +ENCODING 2233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +40 +00 +10 +08 +88 +90 +60 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni08BA +ENCODING 2234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +40 +00 +10 +08 +88 +90 +60 +08 +94 +90 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uni08BB +ENCODING 2235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 4 +BITMAP +0C +14 +0C +84 +78 +ENDCHAR +STARTCHAR uni08BC +ENCODING 2236 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +0C +14 +0C +84 +84 +78 +ENDCHAR +STARTCHAR uni08BD +ENCODING 2237 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni08BE +ENCODING 2238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +88 +50 +20 +00 +08 +44 +84 +78 +00 +28 +00 +10 +ENDCHAR +STARTCHAR uni08BF +ENCODING 2239 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 3 +BITMAP +88 +50 +20 +00 +28 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uni08C0 +ENCODING 2240 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 3 +BITMAP +22 +14 +48 +40 +50 +68 +F0 +04 +22 +42 +3C +ENDCHAR +STARTCHAR uni08C1 +ENCODING 2241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +88 +50 +20 +00 +FC +40 +80 +A8 +80 +90 +44 +38 +ENDCHAR +STARTCHAR uni08C2 +ENCODING 2242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +88 +50 +24 +08 +10 +20 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uni08C3 +ENCODING 2243 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +20 +00 +48 +00 +10 +00 +30 +48 +40 +38 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni08C4 +ENCODING 2244 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +00 +48 +00 +00 +38 +24 +14 +4C +84 +88 +70 +ENDCHAR +STARTCHAR uni08C5 +ENCODING 2245 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +20 +00 +48 +00 +00 +FC +20 +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uni08C6 +ENCODING 2246 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +FC +40 +90 +80 +A8 +80 +90 +44 +38 +ENDCHAR +STARTCHAR uni08C7 +ENCODING 2247 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +40 +40 +50 +6A +F2 +02 +02 +02 +02 +22 +42 +42 +44 +3C +ENDCHAR +STARTCHAR uni08C8 +ENCODING 2248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 3 +BITMAP +20 +48 +30 +24 +48 +10 +20 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uni08C9 +ENCODING 2249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 1 +BITMAP +0C +90 +8C +84 +78 +ENDCHAR +STARTCHAR uni08CA +ENCODING 2250 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 1 9 +BITMAP +0C +90 +8C +84 +78 +ENDCHAR +STARTCHAR uni08CB +ENCODING 2251 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 1 8 +BITMAP +20 +40 +80 +FE +00 +50 +ENDCHAR +STARTCHAR uni08CC +ENCODING 2252 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 4 1 10 +BITMAP +0180 +2240 +5F80 +8000 +ENDCHAR +STARTCHAR uni08CD +ENCODING 2253 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 4 9 +BITMAP +08 +40 +5C +62 +FC +ENDCHAR +STARTCHAR uni08CE +ENCODING 2254 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 2 10 +BITMAP +60 +F0 +F0 +60 +ENDCHAR +STARTCHAR uni08CF +ENCODING 2255 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 2 -2 +BITMAP +60 +F0 +F0 +60 +ENDCHAR +STARTCHAR uni08D0 +ENCODING 2256 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 2 -1 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni08D1 +ENCODING 2257 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 2 -2 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni08D2 +ENCODING 2258 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 1 -2 +BITMAP +78 +B4 +B4 +78 +ENDCHAR +STARTCHAR uni08D3 +ENCODING 2259 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 3 -2 +BITMAP +20 +50 +70 +10 +E0 +ENDCHAR +STARTCHAR uni08D4 +ENCODING 2260 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 6 1 8 +BITMAP +E414 +A414 +7894 +82E4 +8080 +7300 +ENDCHAR +STARTCHAR uni08D5 +ENCODING 2261 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 1 5 +BITMAP +0C +32 +9C +A0 +40 +ENDCHAR +STARTCHAR uni08D6 +ENCODING 2262 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 1 6 +BITMAP +20 +50 +40 +30 +40 +88 +70 +ENDCHAR +STARTCHAR uni08D7 +ENCODING 2263 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 1 7 +BITMAP +48 +00 +18 +14 +8C +70 +ENDCHAR +STARTCHAR uni08D8 +ENCODING 2264 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 1 6 +BITMAP +40 +00 +10 +48 +90 +64 +08 +ENDCHAR +STARTCHAR uni08D9 +ENCODING 2265 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 1 -2 +BITMAP +40 +10 +48 +92 +64 +ENDCHAR +STARTCHAR uni08DA +ENCODING 2266 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 7 1 7 +BITMAP +0414 +1654 +DAD4 +0214 +2A94 +5D64 +8000 +ENDCHAR +STARTCHAR uni08DB +ENCODING 2267 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 6 0 8 +BITMAP +A805 +0805 +4A05 +A955 +5669 +0180 +ENDCHAR +STARTCHAR uni08DC +ENCODING 2268 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 5 0 9 +BITMAP +0005 +4815 +14C5 +8B55 +75E9 +ENDCHAR +STARTCHAR uni08DD +ENCODING 2269 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 7 0 7 +BITMAP +00C0 +0300 +9400 +4A00 +0102 +49AA +B6D4 +ENDCHAR +STARTCHAR uni08DE +ENCODING 2270 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 7 3 7 +BITMAP +0080 +0200 +0080 +1140 +04C0 +8A40 +7D80 +ENDCHAR +STARTCHAR uni08DF +ENCODING 2271 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 8 1 6 +BITMAP +0080 +0200 +5080 +8548 +0AD4 +444C +BB84 +0038 +ENDCHAR +STARTCHAR uni08E0 +ENCODING 2272 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 1 10 +BITMAP +40 +A4 +78 +ENDCHAR +STARTCHAR uni08E1 +ENCODING 2273 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 0 9 +BITMAP +02 +05 +15 +EE +ENDCHAR +STARTCHAR uni08E2 +ENCODING 2274 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 7 +BITMAP +10 +28 +44 +44 +82 +92 +6C +ENDCHAR +STARTCHAR uni08E3 +ENCODING 2275 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 1 -2 +BITMAP +06 +98 +60 +90 +60 +ENDCHAR +STARTCHAR uni08E4 +ENCODING 2276 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 3 8 +BITMAP +20 +10 +60 +80 +40 +ENDCHAR +STARTCHAR uni08E5 +ENCODING 2277 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 1 10 +BITMAP +18 +1C +90 +60 +ENDCHAR +STARTCHAR uni08E6 +ENCODING 2278 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 3 -2 +BITMAP +20 +10 +60 +80 +40 +ENDCHAR +STARTCHAR uni08E7 +ENCODING 2279 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 0 8 +BITMAP +22 +11 +66 +88 +44 +ENDCHAR +STARTCHAR uni08E8 +ENCODING 2280 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 1 7 +BITMAP +38 +44 +44 +AA +44 +44 +38 +ENDCHAR +STARTCHAR uni08E9 +ENCODING 2281 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 0 -2 +BITMAP +22 +11 +66 +88 +44 +ENDCHAR +STARTCHAR uni08EA +ENCODING 2282 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 3 11 +BITMAP +80 +ENDCHAR +STARTCHAR uni08EB +ENCODING 2283 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 2 10 +BITMAP +10 +80 +ENDCHAR +STARTCHAR uni08EC +ENCODING 2284 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 2 10 +BITMAP +68 +90 +68 +ENDCHAR +STARTCHAR uni08ED +ENCODING 2285 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 3 -2 +BITMAP +80 +ENDCHAR +STARTCHAR uni08EE +ENCODING 2286 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 2 1 -2 +BITMAP +20 +80 +ENDCHAR +STARTCHAR uni08EF +ENCODING 2287 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 1 -2 +BITMAP +68 +90 +68 +ENDCHAR +STARTCHAR uni08F0 +ENCODING 2288 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 1 9 +BITMAP +0C +30 +00 +30 +C0 +ENDCHAR +STARTCHAR uni08F1 +ENCODING 2289 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 0 9 +BITMAP +66 +77 +22 +44 +88 +ENDCHAR +STARTCHAR uni08F2 +ENCODING 2290 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 1 -2 +BITMAP +0C +30 +00 +30 +C0 +ENDCHAR +STARTCHAR uni08F3 +ENCODING 2291 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 3 8 +BITMAP +20 +50 +70 +10 +E0 +ENDCHAR +STARTCHAR uni08F4 +ENCODING 2292 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 1 8 +BITMAP +68 +90 +A8 +48 +B0 +ENDCHAR +STARTCHAR uni08F5 +ENCODING 2293 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 2 11 +BITMAP +80 +30 +C0 +ENDCHAR +STARTCHAR uni08F6 +ENCODING 2294 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 2 -2 +BITMAP +30 +C0 +10 +ENDCHAR +STARTCHAR uni08F7 +ENCODING 2295 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 1 11 +BITMAP +40 +80 +40 +ENDCHAR +STARTCHAR uni08F8 +ENCODING 2296 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 3 11 +BITMAP +80 +40 +80 +ENDCHAR +STARTCHAR uni08F9 +ENCODING 2297 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 2 -2 +BITMAP +40 +80 +40 +ENDCHAR +STARTCHAR uni08FA +ENCODING 2298 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 3 -2 +BITMAP +80 +40 +80 +ENDCHAR +STARTCHAR uni08FB +ENCODING 2299 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 1 11 +BITMAP +90 +48 +90 +ENDCHAR +STARTCHAR uni08FC +ENCODING 2300 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 0 11 +BITMAP +24 +92 +24 +ENDCHAR +STARTCHAR uni08FD +ENCODING 2301 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 2 11 +BITMAP +20 +90 +20 +ENDCHAR +STARTCHAR uni08FE +ENCODING 2302 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 2 9 +BITMAP +30 +B8 +20 +40 +80 +ENDCHAR +STARTCHAR uni08FF +ENCODING 2303 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 3 8 +BITMAP +E0 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni0900 +ENCODING 2304 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 11 +BITMAP +38 +44 +90 +ENDCHAR +STARTCHAR uni0901 +ENCODING 2305 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 11 +BITMAP +90 +44 +38 +ENDCHAR +STARTCHAR uni0902 +ENCODING 2306 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 12 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0903 +ENCODING 2307 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 7 -2 1 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni0904 +ENCODING 2308 +BBX 11 13 5 1 +BITMAP +2000 +1F80 +0040 +39E0 +4440 +0240 +0240 +0C40 +8240 +83C0 +4240 +4440 +3840 +ENDCHAR +STARTCHAR uni0905 +ENCODING 2309 +BBX 11 10 5 1 +BITMAP +39E0 +4440 +0240 +0240 +0C40 +8240 +83C0 +4240 +4440 +3840 +ENDCHAR +STARTCHAR uni0906 +ENCODING 2310 +BBX 14 10 2 1 +BITMAP +39FC +4450 +0250 +0250 +0C50 +8250 +83D0 +4250 +4450 +3850 +ENDCHAR +STARTCHAR uni0907 +ENCODING 2311 +BBX 14 13 2 -2 +BITMAP +FFFC +0100 +0F00 +1000 +1000 +0F00 +0080 +0040 +0640 +0780 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uni0908 +ENCODING 2312 +BBX 14 16 2 -2 +BITMAP +0380 +0440 +0200 +FFFC +0100 +0F00 +1000 +1000 +0F00 +0080 +0040 +0640 +0780 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uni0909 +ENCODING 2313 +BBX 13 10 3 1 +BITMAP +FFF8 +0080 +0040 +2040 +2180 +1040 +1040 +0840 +0880 +0700 +ENDCHAR +STARTCHAR uni090A +ENCODING 2314 +BBX 14 10 2 1 +BITMAP +FFFC +0100 +0080 +4080 +4330 +20C8 +2088 +1088 +1108 +0E10 +ENDCHAR +STARTCHAR uni090B +ENCODING 2315 +BBX 15 10 1 1 +BITMAP +FFFE +0100 +3D30 +43F0 +0D20 +3110 +0120 +0140 +0148 +0130 +ENDCHAR +STARTCHAR uni090C +ENCODING 2316 +BBX 16 10 0 1 +BITMAP +FFFF +0020 +0020 +1C70 +2288 +2108 +2010 +1020 +0820 +0018 +ENDCHAR +STARTCHAR uni090D +ENCODING 2317 +BBX 13 14 3 0 +BITMAP +0880 +0700 +0000 +FFF8 +1080 +1080 +1080 +1080 +1080 +0800 +0400 +0200 +0100 +0100 +ENDCHAR +STARTCHAR uni090E +ENCODING 2318 +BBX 13 14 3 0 +BITMAP +2000 +1F00 +0080 +FFF8 +1080 +1080 +1080 +1080 +1080 +0800 +0400 +0200 +0100 +0100 +ENDCHAR +STARTCHAR uni090F +ENCODING 2319 +BBX 13 11 3 0 +BITMAP +FFF8 +1080 +1080 +1080 +1080 +1080 +0800 +0400 +0200 +0100 +0100 +ENDCHAR +STARTCHAR uni0910 +ENCODING 2320 +BBX 13 14 3 0 +BITMAP +3E00 +0100 +0080 +FFF8 +1080 +1080 +1080 +1080 +1080 +0800 +0400 +0200 +0100 +0100 +ENDCHAR +STARTCHAR uni0911 +ENCODING 2321 +BBX 14 13 2 1 +BITMAP +0440 +0380 +0000 +39FC +4450 +0250 +0250 +0C50 +8250 +83D0 +4250 +4450 +3850 +ENDCHAR +STARTCHAR uni0912 +ENCODING 2322 +BBX 14 13 2 1 +BITMAP +2000 +1FE0 +0010 +39FC +4450 +0250 +0250 +0C50 +8250 +83D0 +4250 +4450 +3850 +ENDCHAR +STARTCHAR uni0913 +ENCODING 2323 +BBX 14 13 2 1 +BITMAP +1FC0 +0020 +0010 +39FC +4450 +0250 +0250 +0C50 +8250 +83D0 +4250 +4450 +3850 +ENDCHAR +STARTCHAR uni0914 +ENCODING 2324 +BBX 14 13 2 1 +BITMAP +07E0 +0010 +03F0 +38FC +4450 +0250 +0250 +0C50 +8250 +83D0 +4250 +4450 +3850 +ENDCHAR +STARTCHAR uni0915 +ENCODING 2325 +BBX 16 10 0 1 +BITMAP +FFFF +0080 +0080 +0EB0 +11C8 +1188 +0E88 +0090 +0080 +0080 +ENDCHAR +STARTCHAR uni0916 +ENCODING 2326 +BBX 16 10 0 1 +BITMAP +FFFF +0810 +0810 +09D0 +1A30 +1A30 +11D0 +0810 +0430 +03D0 +ENDCHAR +STARTCHAR uni0917 +ENCODING 2327 +BBX 16 10 0 1 +BITMAP +FFFF +0210 +0210 +0210 +0A10 +0610 +0210 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni0918 +ENCODING 2328 +BBX 16 10 0 1 +BITMAP +FFFF +0808 +0608 +0188 +0208 +0408 +0418 +03E8 +0008 +0008 +ENDCHAR +STARTCHAR uni0919 +ENCODING 2329 +BBX 16 10 0 1 +BITMAP +FFFF +0080 +0380 +0400 +0418 +1398 +1040 +0840 +0840 +0780 +ENDCHAR +STARTCHAR uni091A +ENCODING 2330 +BBX 16 10 0 1 +BITMAP +FFFF +0008 +0008 +0FF8 +0218 +0268 +0188 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uni091B +ENCODING 2331 +BBX 16 11 0 0 +BITMAP +FFFF +0040 +0660 +0890 +0850 +0620 +0830 +0848 +0448 +0388 +0010 +ENDCHAR +STARTCHAR uni091C +ENCODING 2332 +BBX 16 10 0 1 +BITMAP +FFFF +0008 +0008 +0878 +0848 +0448 +0388 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uni091D +ENCODING 2333 +BBX 16 12 0 -1 +BITMAP +FFFF +0108 +0708 +0808 +0808 +07F8 +0108 +0108 +0E08 +0C08 +0200 +0100 +ENDCHAR +STARTCHAR uni091E +ENCODING 2334 +BBX 16 10 0 1 +BITMAP +FFFF +0008 +0008 +03C8 +1328 +1028 +0838 +0828 +0448 +0388 +ENDCHAR +STARTCHAR uni091F +ENCODING 2335 +BBX 16 10 0 1 +BITMAP +FFFF +0080 +0080 +0380 +0400 +0800 +0800 +0808 +0410 +03E0 +ENDCHAR +STARTCHAR uni0920 +ENCODING 2336 +BBX 16 10 0 1 +BITMAP +FFFF +0080 +0080 +03E0 +0410 +0808 +0808 +0808 +0410 +03E0 +ENDCHAR +STARTCHAR uni0921 +ENCODING 2337 +BBX 16 10 0 1 +BITMAP +FFFF +0020 +00E0 +0100 +0100 +04E0 +0410 +0210 +0210 +01E0 +ENDCHAR +STARTCHAR uni0922 +ENCODING 2338 +BBX 16 10 0 1 +BITMAP +FFFF +0080 +0080 +0380 +0400 +0860 +0890 +0890 +0450 +03E0 +ENDCHAR +STARTCHAR uni0923 +ENCODING 2339 +BBX 16 10 0 1 +BITMAP +FFFF +0490 +0490 +0490 +0490 +0310 +0010 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni0924 +ENCODING 2340 +BBX 16 10 0 1 +BITMAP +FFFF +0010 +0010 +03F0 +0410 +0810 +0810 +0810 +0410 +0210 +ENDCHAR +STARTCHAR uni0925 +ENCODING 2341 +BBX 13 10 3 1 +BITMAP +61F8 +9040 +8840 +4840 +0840 +1040 +60C0 +4140 +2240 +1C40 +ENDCHAR +STARTCHAR uni0926 +ENCODING 2342 +BBX 16 12 0 -1 +BITMAP +FFFF +0080 +0080 +0380 +0400 +0800 +0800 +0830 +0430 +03E0 +0010 +0008 +ENDCHAR +STARTCHAR uni0927 +ENCODING 2343 +BBX 13 10 3 1 +BITMAP +67F8 +9040 +A040 +4040 +6040 +3840 +4040 +40C0 +3F40 +0040 +ENDCHAR +STARTCHAR uni0928 +ENCODING 2344 +BBX 16 10 0 1 +BITMAP +FFFF +0008 +0008 +03F8 +0608 +0608 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uni0929 +ENCODING 2345 +BBX 16 11 0 0 +BITMAP +FFFF +0008 +0008 +03F8 +0608 +0608 +0008 +0008 +0008 +00C8 +00C0 +ENDCHAR +STARTCHAR uni092A +ENCODING 2346 +BBX 16 10 0 1 +BITMAP +FFFF +0810 +0810 +0810 +0830 +0450 +0390 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni092B +ENCODING 2347 +BBX 16 10 0 1 +BITMAP +FFFF +1040 +1040 +1040 +1070 +08C8 +0748 +0048 +0048 +0050 +ENDCHAR +STARTCHAR uni092C +ENCODING 2348 +BBX 16 10 0 1 +BITMAP +FFFF +0010 +0010 +07D0 +0C30 +0A30 +0950 +0790 +0010 +0010 +ENDCHAR +STARTCHAR uni092D +ENCODING 2349 +BBX 13 10 3 1 +BITMAP +63F8 +9040 +7040 +1040 +1040 +3FC0 +3040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni092E +ENCODING 2350 +BBX 16 10 0 1 +BITMAP +FFFF +0410 +0410 +0410 +0410 +0FF0 +0C10 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni092F +ENCODING 2351 +BBX 16 10 0 1 +BITMAP +FFFF +0210 +0210 +0210 +0C10 +0810 +0830 +07D0 +0010 +0010 +ENDCHAR +STARTCHAR uni0930 +ENCODING 2352 +BBX 16 9 0 2 +BITMAP +FFFF +0200 +0200 +0200 +0600 +0600 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uni0931 +ENCODING 2353 +BBX 16 11 0 0 +BITMAP +FFFF +0200 +0200 +0200 +0600 +0600 +0100 +0080 +0040 +0600 +0600 +ENDCHAR +STARTCHAR uni0932 +ENCODING 2354 +BBX 16 10 0 1 +BITMAP +FFFF +0008 +0008 +0638 +0948 +0888 +0808 +0408 +0308 +0008 +ENDCHAR +STARTCHAR uni0933 +ENCODING 2355 +BBX 16 10 0 1 +BITMAP +FFFF +0020 +0020 +0C70 +1288 +1088 +1108 +1288 +1248 +0C30 +ENDCHAR +STARTCHAR uni0934 +ENCODING 2356 +BBX 16 12 0 -1 +BITMAP +FFFF +0020 +0020 +0C70 +1288 +1088 +1108 +1288 +1248 +0C30 +0180 +0180 +ENDCHAR +STARTCHAR uni0935 +ENCODING 2357 +BBX 16 10 0 1 +BITMAP +FFFF +0010 +0010 +07D0 +0830 +0830 +0850 +0790 +0010 +0010 +ENDCHAR +STARTCHAR uni0936 +ENCODING 2358 +BBX 16 10 0 1 +BITMAP +FFFF +0610 +0910 +0910 +0710 +0110 +0110 +0E10 +0D10 +0090 +ENDCHAR +STARTCHAR uni0937 +ENCODING 2359 +BBX 16 10 0 1 +BITMAP +FFFF +0C10 +0A10 +0910 +08B0 +0450 +0390 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni0938 +ENCODING 2360 +BBX 16 10 0 1 +BITMAP +FFFF +0410 +0410 +0410 +0410 +0FF0 +0C10 +0410 +0210 +0110 +ENDCHAR +STARTCHAR uni0939 +ENCODING 2361 +BBX 14 11 2 0 +BITMAP +FFFC +0100 +0F00 +1000 +1000 +0E00 +1100 +1100 +0800 +0400 +0200 +ENDCHAR +STARTCHAR uni093A +ENCODING 2362 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 2 -8 12 +BITMAP +80 +80 +ENDCHAR +STARTCHAR uni093B +ENCODING 2363 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 12 -4 1 +BITMAP +20 +20 +F0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni093C +ENCODING 2364 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni093D +ENCODING 2365 +BBX 9 10 3 1 +BITMAP +1F80 +2000 +2000 +1800 +0600 +0100 +0100 +8100 +6200 +1C00 +ENDCHAR +STARTCHAR uni093E +ENCODING 2366 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 10 -4 1 +BITMAP +F0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni093F +ENCODING 2367 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 13 -16 1 +BITMAP +3FC0 +4020 +4000 +F000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +ENDCHAR +STARTCHAR uni0940 +ENCODING 2368 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 13 -11 1 +BITMAP +7F80 +8040 +0040 +01E0 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni0941 +ENCODING 2369 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -11 -2 +BITMAP +82 +42 +3C +ENDCHAR +STARTCHAR uni0942 +ENCODING 2370 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -11 -2 +BITMAP +3C +42 +82 +ENDCHAR +STARTCHAR uni0943 +ENCODING 2371 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -8 -2 +BITMAP +70 +80 +70 +ENDCHAR +STARTCHAR uni0944 +ENCODING 2372 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -9 -2 +BITMAP +60 +80 +B8 +40 +3C +ENDCHAR +STARTCHAR uni0945 +ENCODING 2373 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 11 +BITMAP +80 +44 +38 +ENDCHAR +STARTCHAR uni0946 +ENCODING 2374 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -13 10 +BITMAP +80 +78 +04 +04 +ENDCHAR +STARTCHAR uni0947 +ENCODING 2375 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -13 11 +BITMAP +F0 +08 +04 +ENDCHAR +STARTCHAR uni0948 +ENCODING 2376 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -13 11 +BITMAP +3C +FA +06 +ENDCHAR +STARTCHAR uni0949 +ENCODING 2377 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 13 -5 1 +BITMAP +88 +48 +30 +78 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni094A +ENCODING 2378 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 13 -9 1 +BITMAP +8000 +7E00 +0100 +0780 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni094B +ENCODING 2379 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 13 -9 1 +BITMAP +FC00 +0200 +0100 +0780 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni094C +ENCODING 2380 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 13 -9 1 +BITMAP +3E00 +FD00 +0300 +0780 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni094D +ENCODING 2381 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -7 -2 +BITMAP +C0 +20 +10 +ENDCHAR +STARTCHAR uni094E +ENCODING 2382 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 10 -16 1 +BITMAP +F0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni094F +ENCODING 2383 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 13 -10 1 +BITMAP +9F00 +7E80 +0180 +03C0 +0080 +0080 +0080 +0080 +0080 +0080 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni0950 +ENCODING 2384 +BBX 14 12 1 1 +BITMAP +0030 +0030 +3884 +4478 +0200 +0200 +0C18 +8224 +8324 +42D8 +4400 +3800 +ENDCHAR +STARTCHAR uni0951 +ENCODING 2385 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -9 11 +BITMAP +C0 +C0 +40 +ENDCHAR +STARTCHAR uni0952 +ENCODING 2386 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 1 -11 -1 +BITMAP +FC +ENDCHAR +STARTCHAR uni0953 +ENCODING 2387 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -10 11 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni0954 +ENCODING 2388 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -9 11 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni0955 +ENCODING 2389 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -10 11 +BITMAP +90 +60 +F0 +ENDCHAR +STARTCHAR uni0956 +ENCODING 2390 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -12 -2 +BITMAP +81 +42 +3C +ENDCHAR +STARTCHAR uni0957 +ENCODING 2391 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 3 -13 -2 +BITMAP +9240 +4C80 +3F00 +ENDCHAR +STARTCHAR uni0958 +ENCODING 2392 +BBX 16 10 0 1 +BITMAP +FFFF +0080 +0080 +0EB0 +11C8 +1188 +0E88 +0090 +0C80 +0C80 +ENDCHAR +STARTCHAR uni0959 +ENCODING 2393 +BBX 16 13 0 -2 +BITMAP +FFFF +0810 +0810 +09D0 +1A30 +1A30 +11D0 +0810 +0430 +03D0 +0000 +0300 +0300 +ENDCHAR +STARTCHAR uni095A +ENCODING 2394 +BBX 16 11 0 0 +BITMAP +FFFF +0210 +0210 +0210 +0A10 +0610 +0210 +0010 +0010 +0190 +0180 +ENDCHAR +STARTCHAR uni095B +ENCODING 2395 +BBX 16 11 0 0 +BITMAP +FFFF +0008 +0008 +0878 +0848 +0448 +0388 +0008 +0008 +0188 +0180 +ENDCHAR +STARTCHAR uni095C +ENCODING 2396 +BBX 16 13 0 -2 +BITMAP +FFFF +0020 +00E0 +0100 +0100 +04E0 +0410 +0210 +0210 +01E0 +0000 +00C0 +00C0 +ENDCHAR +STARTCHAR uni095D +ENCODING 2397 +BBX 16 13 0 -2 +BITMAP +FFFF +0080 +0080 +0380 +0400 +0860 +0890 +0890 +0450 +03E0 +0000 +0180 +0180 +ENDCHAR +STARTCHAR uni095E +ENCODING 2398 +BBX 16 10 0 1 +BITMAP +FFFF +1040 +1040 +1040 +1070 +08C8 +0748 +0048 +0648 +0650 +ENDCHAR +STARTCHAR uni095F +ENCODING 2399 +BBX 16 11 0 0 +BITMAP +FFFF +0210 +0210 +0210 +0C10 +0810 +0830 +07D0 +0010 +0310 +0300 +ENDCHAR +STARTCHAR uni0960 +ENCODING 2400 +BBX 15 10 1 1 +BITMAP +FFFE +0100 +3D18 +43F8 +0D10 +3130 +0140 +0130 +0144 +0138 +ENDCHAR +STARTCHAR uni0961 +ENCODING 2401 +BBX 16 11 0 0 +BITMAP +FFFF +0020 +0020 +1C70 +2288 +2108 +2030 +1040 +0830 +0044 +0038 +ENDCHAR +STARTCHAR uni0962 +ENCODING 2402 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 3 -13 -2 +BITMAP +7700 +8900 +40C0 +ENDCHAR +STARTCHAR uni0963 +ENCODING 2403 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 5 -13 -2 +BITMAP +0040 +6380 +94A0 +88C0 +4070 +ENDCHAR +STARTCHAR uni0964 +ENCODING 2404 +BBX 1 9 8 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0965 +ENCODING 2405 +BBX 4 9 6 1 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni0966 +ENCODING 2406 +BBX 8 9 4 1 +BITMAP +3C +42 +81 +81 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni0967 +ENCODING 2407 +BBX 5 10 6 0 +BITMAP +70 +88 +88 +50 +20 +40 +80 +40 +20 +10 +ENDCHAR +STARTCHAR uni0968 +ENCODING 2408 +BBX 7 11 5 -1 +BITMAP +78 +84 +02 +02 +02 +64 +78 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni0969 +ENCODING 2409 +BBX 6 11 5 -1 +BITMAP +78 +84 +04 +04 +38 +04 +04 +C4 +F8 +20 +10 +ENDCHAR +STARTCHAR uni096A +ENCODING 2410 +BBX 9 9 3 1 +BITMAP +8080 +4100 +2200 +1400 +0800 +1400 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uni096B +ENCODING 2411 +BBX 8 11 4 -1 +BITMAP +80 +80 +8C +8C +78 +04 +04 +02 +02 +01 +01 +ENDCHAR +STARTCHAR uni096C +ENCODING 2412 +BBX 6 11 5 -1 +BITMAP +78 +84 +80 +80 +70 +80 +80 +8C +7C +10 +20 +ENDCHAR +STARTCHAR uni096D +ENCODING 2413 +BBX 8 9 4 1 +BITMAP +0E +11 +91 +93 +8D +41 +41 +22 +1C +ENDCHAR +STARTCHAR uni096E +ENCODING 2414 +BBX 8 9 4 1 +BITMAP +04 +08 +10 +20 +40 +80 +81 +42 +3C +ENDCHAR +STARTCHAR uni096F +ENCODING 2415 +BBX 6 9 6 1 +BITMAP +60 +90 +90 +E0 +40 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni0970 +ENCODING 2416 +BBX 5 4 6 6 +BITMAP +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni0971 +ENCODING 2417 +BBX 2 2 7 9 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0972 +ENCODING 2418 +BBX 11 13 5 1 +BITMAP +0840 +0440 +0380 +39E0 +4440 +0240 +0240 +0C40 +8240 +83C0 +4240 +4440 +3840 +ENDCHAR +STARTCHAR uni0973 +ENCODING 2419 +BBX 11 12 5 1 +BITMAP +0040 +0040 +39E0 +4440 +0240 +0240 +0C40 +8240 +83C0 +4240 +4440 +3840 +ENDCHAR +STARTCHAR uni0974 +ENCODING 2420 +BBX 13 12 3 1 +BITMAP +0010 +0010 +39F8 +4450 +0250 +0250 +0C50 +8250 +83D0 +4250 +4450 +3850 +ENDCHAR +STARTCHAR uni0975 +ENCODING 2421 +BBX 13 13 3 1 +BITMAP +0900 +04E0 +0390 +3878 +4450 +0250 +0250 +0C50 +8250 +83D0 +4250 +4450 +3850 +ENDCHAR +STARTCHAR uni0976 +ENCODING 2422 +BBX 11 13 5 -2 +BITMAP +39E0 +4440 +0240 +0240 +0C40 +8240 +83C0 +4240 +4440 +3840 +0000 +1080 +0F00 +ENDCHAR +STARTCHAR uni0977 +ENCODING 2423 +BBX 11 13 5 -2 +BITMAP +39E0 +4440 +0240 +0240 +0C40 +8240 +83C0 +4240 +4440 +3840 +1200 +4C80 +3F00 +ENDCHAR +STARTCHAR uni0978 +ENCODING 2424 +BBX 16 10 0 1 +BITMAP +FFFF +0400 +0400 +0400 +0FC0 +0C20 +0020 +0020 +0040 +0080 +ENDCHAR +STARTCHAR uni0979 +ENCODING 2425 +BBX 16 12 0 -1 +BITMAP +FFFF +0008 +0008 +0878 +0848 +0448 +0388 +0008 +1868 +1868 +0300 +0300 +ENDCHAR +STARTCHAR uni097A +ENCODING 2426 +BBX 16 10 0 1 +BITMAP +FFFF +0210 +0210 +0310 +0C90 +0850 +0830 +07D0 +0010 +0010 +ENDCHAR +STARTCHAR uni097B +ENCODING 2427 +BBX 16 10 0 1 +BITMAP +FFFF +0210 +0210 +0210 +0A10 +0610 +0210 +0010 +0010 +0FF0 +ENDCHAR +STARTCHAR uni097C +ENCODING 2428 +BBX 16 10 0 1 +BITMAP +FFFF +0008 +0008 +0878 +0848 +0448 +0388 +0008 +0008 +0FF8 +ENDCHAR +STARTCHAR uni097D +ENCODING 2429 +BBX 9 10 4 1 +BITMAP +3E00 +4100 +8080 +0080 +0080 +0100 +0E00 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni097E +ENCODING 2430 +BBX 16 10 0 1 +BITMAP +FFFF +0020 +00E0 +0100 +0100 +04E0 +0410 +0210 +01E0 +07F8 +ENDCHAR +STARTCHAR uni097F +ENCODING 2431 +BBX 16 10 0 1 +BITMAP +FFFF +0010 +0010 +07D0 +0C30 +0A30 +0950 +0790 +0010 +0FF0 +ENDCHAR +STARTCHAR uni0980 +ENCODING 2432 +BBX 10 12 4 -1 +BITMAP +3800 +4400 +8200 +9200 +6200 +0200 +0200 +0200 +0200 +0200 +0240 +0180 +ENDCHAR +STARTCHAR uni0981 +ENCODING 2433 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 11 +BITMAP +20 +88 +70 +ENDCHAR +STARTCHAR uni0982 +ENCODING 2434 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -3 0 +BITMAP +40 +A0 +A0 +40 +00 +80 +40 +20 +20 +ENDCHAR +STARTCHAR uni0983 +ENCODING 2435 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -3 0 +BITMAP +40 +A0 +A0 +40 +00 +40 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni0985 +ENCODING 2437 +BBX 14 10 2 1 +BITMAP +FFFC +0020 +4620 +4920 +48A0 +40A0 +20A0 +20A0 +1160 +0E20 +ENDCHAR +STARTCHAR uni0986 +ENCODING 2438 +BBX 14 10 2 1 +BITMAP +FFFC +0028 +4628 +4928 +48A8 +40A8 +20A8 +20A8 +1168 +0E28 +ENDCHAR +STARTCHAR uni0987 +ENCODING 2439 +BBX 14 14 2 0 +BITMAP +0800 +07C0 +0020 +FFFC +0000 +0F00 +1080 +1040 +0040 +0180 +1E00 +0C00 +0300 +00C0 +ENDCHAR +STARTCHAR uni0988 +ENCODING 2440 +BBX 14 13 2 1 +BITMAP +0800 +07C0 +0020 +FFFC +0000 +1860 +2480 +2380 +0500 +0900 +3100 +0080 +0060 +ENDCHAR +STARTCHAR uni0989 +ENCODING 2441 +BBX 14 13 2 1 +BITMAP +0800 +07C0 +0020 +FFFC +0100 +0100 +2160 +21A0 +2020 +1020 +1020 +0840 +0780 +ENDCHAR +STARTCHAR uni098A +ENCODING 2442 +BBX 14 13 2 1 +BITMAP +0800 +07C0 +0020 +FFFC +0100 +0100 +2960 +29A0 +2820 +2420 +1420 +13C0 +0F80 +ENDCHAR +STARTCHAR uni098B +ENCODING 2443 +BBX 14 10 2 1 +BITMAP +00BC +40A0 +90A0 +69A0 +06A0 +39A0 +C0E0 +38A0 +06A0 +01A0 +ENDCHAR +STARTCHAR uni098C +ENCODING 2444 +BBX 8 11 4 0 +BITMAP +30 +40 +20 +1C +02 +71 +89 +85 +45 +06 +08 +ENDCHAR +STARTCHAR uni098F +ENCODING 2447 +BBX 9 10 3 1 +BITMAP +0700 +0880 +1080 +9080 +8880 +8080 +8080 +8680 +4980 +3080 +ENDCHAR +STARTCHAR uni0990 +ENCODING 2448 +BBX 11 13 3 1 +BITMAP +1000 +0F80 +0040 +0720 +08A0 +10A0 +90C0 +8880 +8080 +8080 +8680 +4980 +3080 +ENDCHAR +STARTCHAR uni0993 +ENCODING 2451 +BBX 8 10 5 1 +BITMAP +0C +12 +81 +81 +86 +41 +41 +21 +22 +1C +ENDCHAR +STARTCHAR uni0994 +ENCODING 2452 +BBX 10 12 3 1 +BITMAP +0F00 +0080 +0C40 +1240 +8140 +8140 +8640 +4180 +4100 +2100 +2200 +1C00 +ENDCHAR +STARTCHAR uni0995 +ENCODING 2453 +BBX 16 10 0 1 +BITMAP +FFFF +00E0 +0150 +0248 +0C48 +1048 +0C50 +0240 +0140 +00C0 +ENDCHAR +STARTCHAR uni0996 +ENCODING 2454 +BBX 12 10 4 1 +BITMAP +88F0 +7480 +0480 +0480 +1880 +6080 +F080 +0C80 +0280 +0180 +ENDCHAR +STARTCHAR uni0997 +ENCODING 2455 +BBX 12 10 4 1 +BITMAP +3CF0 +4280 +8180 +F080 +0880 +0880 +1080 +6080 +0080 +0080 +ENDCHAR +STARTCHAR uni0998 +ENCODING 2456 +BBX 16 10 0 1 +BITMAP +FFFF +0408 +0808 +0808 +0608 +0108 +0608 +0C08 +03E8 +0018 +ENDCHAR +STARTCHAR uni0999 +ENCODING 2457 +BBX 10 10 3 1 +BITMAP +2300 +2480 +1480 +0F00 +8800 +8980 +4740 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni099A +ENCODING 2458 +BBX 16 10 0 1 +BITMAP +FFFF +0800 +0C00 +0C00 +0B00 +08E0 +0810 +0820 +08C0 +0F00 +ENDCHAR +STARTCHAR uni099B +ENCODING 2459 +BBX 16 11 0 0 +BITMAP +FFFF +0800 +0E00 +09C0 +0920 +0620 +0040 +0F80 +0600 +01C0 +0030 +ENDCHAR +STARTCHAR uni099C +ENCODING 2460 +BBX 16 10 0 1 +BITMAP +FFFF +0180 +1140 +1120 +1118 +08C8 +0850 +0850 +0450 +0388 +ENDCHAR +STARTCHAR uni099D +ENCODING 2461 +BBX 16 10 0 1 +BITMAP +FFEF +0068 +00A8 +0128 +0628 +1828 +0628 +0128 +00B8 +0068 +ENDCHAR +STARTCHAR uni099E +ENCODING 2462 +BBX 10 10 3 1 +BITMAP +1800 +2400 +4580 +4640 +2440 +0480 +8440 +8640 +4D80 +3400 +ENDCHAR +STARTCHAR uni099F +ENCODING 2463 +BBX 16 13 0 1 +BITMAP +0200 +01F0 +0008 +FFFF +0400 +0400 +0400 +0400 +0430 +0430 +0420 +04C0 +0700 +ENDCHAR +STARTCHAR uni09A0 +ENCODING 2464 +BBX 16 13 0 1 +BITMAP +0180 +0200 +0100 +FFFF +00C0 +00A0 +0110 +0910 +1610 +1010 +1010 +0820 +07C0 +ENDCHAR +STARTCHAR uni09A1 +ENCODING 2465 +BBX 16 10 0 1 +BITMAP +FFFF +0040 +0040 +0858 +0868 +0808 +0408 +0408 +0210 +01E0 +ENDCHAR +STARTCHAR uni09A2 +ENCODING 2466 +BBX 16 10 0 1 +BITMAP +FFFF +0400 +0400 +0400 +0400 +0430 +0430 +0420 +04C0 +0700 +ENDCHAR +STARTCHAR uni09A3 +ENCODING 2467 +BBX 12 10 4 1 +BITMAP +00F0 +3C80 +4280 +8180 +E080 +6080 +0080 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni09A4 +ENCODING 2468 +BBX 16 10 0 1 +BITMAP +FFFF +0000 +08E0 +0910 +0908 +0808 +0408 +0408 +0210 +01E0 +ENDCHAR +STARTCHAR uni09A5 +ENCODING 2469 +BBX 12 10 4 1 +BITMAP +78F0 +8480 +8480 +0480 +1880 +6080 +F080 +0C80 +0280 +0180 +ENDCHAR +STARTCHAR uni09A6 +ENCODING 2470 +BBX 16 10 0 1 +BITMAP +FFFF +0800 +0800 +0830 +08D0 +0B10 +0C20 +0020 +0020 +0010 +ENDCHAR +STARTCHAR uni09A7 +ENCODING 2471 +BBX 13 10 3 1 +BITMAP +1078 +20C0 +2340 +1C40 +3040 +C040 +3040 +0C40 +0340 +00C0 +ENDCHAR +STARTCHAR uni09A8 +ENCODING 2472 +BBX 16 10 0 1 +BITMAP +FFFF +0008 +0008 +0008 +03C8 +0428 +0818 +0E08 +0608 +0008 +ENDCHAR +STARTCHAR uni09AA +ENCODING 2474 +BBX 13 10 3 1 +BITMAP +3E78 +4140 +C0C0 +20C0 +1340 +3C40 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni09AB +ENCODING 2475 +BBX 16 10 0 1 +BITMAP +FFFF +0800 +0410 +0228 +0128 +0220 +0C20 +1820 +07A0 +0060 +ENDCHAR +STARTCHAR uni09AC +ENCODING 2476 +BBX 16 10 0 1 +BITMAP +FFFF +0018 +0068 +0188 +0608 +1808 +0608 +0188 +0068 +0018 +ENDCHAR +STARTCHAR uni09AD +ENCODING 2477 +BBX 16 10 0 1 +BITMAP +FFFF +0000 +0180 +0B90 +0A28 +09C8 +0408 +0408 +0210 +01E0 +ENDCHAR +STARTCHAR uni09AE +ENCODING 2478 +BBX 16 10 0 1 +BITMAP +FFFF +0008 +0C08 +0208 +0108 +0108 +0308 +0588 +0268 +0018 +ENDCHAR +STARTCHAR uni09AF +ENCODING 2479 +BBX 16 10 0 1 +BITMAP +FFFF +0808 +0408 +0208 +0108 +0208 +0C08 +0388 +0068 +0018 +ENDCHAR +STARTCHAR uni09B0 +ENCODING 2480 +BBX 16 11 0 0 +BITMAP +FFFF +0018 +0068 +0188 +0608 +1808 +0608 +0188 +0068 +0318 +0300 +ENDCHAR +STARTCHAR uni09B2 +ENCODING 2482 +BBX 16 10 0 1 +BITMAP +FFFF +0008 +0008 +0638 +0948 +0888 +0808 +0808 +0608 +0008 +ENDCHAR +STARTCHAR uni09B6 +ENCODING 2486 +BBX 16 10 0 1 +BITMAP +F06F +0A98 +0508 +0D88 +0D88 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uni09B7 +ENCODING 2487 +BBX 16 10 0 1 +BITMAP +FFFF +0808 +0408 +0208 +0188 +0268 +0C18 +0388 +0068 +0018 +ENDCHAR +STARTCHAR uni09B8 +ENCODING 2488 +BBX 16 10 0 1 +BITMAP +FFFF +0608 +0908 +0088 +00B8 +0048 +0888 +0708 +0008 +0008 +ENDCHAR +STARTCHAR uni09B9 +ENCODING 2489 +BBX 16 11 0 0 +BITMAP +FFFF +0000 +07C0 +0E20 +0610 +0010 +0060 +0780 +0300 +00C0 +0030 +ENDCHAR +STARTCHAR uni09BC +ENCODING 2492 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 -1 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni09BD +ENCODING 2493 +BBX 8 11 4 0 +BITMAP +C0 +3C +32 +31 +01 +01 +06 +78 +30 +0C +03 +ENDCHAR +STARTCHAR uni09BE +ENCODING 2494 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 10 -4 1 +BITMAP +B0 +60 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni09BF +ENCODING 2495 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 13 -16 1 +BITMAP +3FF0 +4008 +4000 +E000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +ENDCHAR +STARTCHAR uni09C0 +ENCODING 2496 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 13 -13 1 +BITMAP +7FE0 +8010 +7FD0 +0038 +0010 +0010 +0010 +0010 +0010 +0010 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni09C1 +ENCODING 2497 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -9 -2 +BITMAP +04 +74 +88 +74 +ENDCHAR +STARTCHAR uni09C2 +ENCODING 2498 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -8 -2 +BITMAP +60 +8C +73 +ENDCHAR +STARTCHAR uni09C3 +ENCODING 2499 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -5 -2 +BITMAP +20 +40 +80 +40 +ENDCHAR +STARTCHAR uni09C4 +ENCODING 2500 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 9 -5 -2 +BITMAP +08 +10 +20 +10 +08 +20 +40 +80 +40 +ENDCHAR +STARTCHAR uni09C7 +ENCODING 2503 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 10 -16 1 +BITMAP +F0 +20 +40 +40 +80 +80 +80 +80 +E0 +60 +ENDCHAR +STARTCHAR uni09C8 +ENCODING 2504 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 13 -16 1 +BITMAP +80 +60 +10 +F0 +20 +40 +40 +80 +80 +80 +80 +E0 +60 +ENDCHAR +STARTCHAR uni09CB +ENCODING 2507 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 10 -16 1 +BITMAP +F00B +2006 +4002 +4002 +8002 +8002 +8002 +8002 +E002 +6002 +ENDCHAR +STARTCHAR uni09CC +ENCODING 2508 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 13 -16 1 +BITMAP +0100 +00FC +0002 +F00B +2006 +4002 +4002 +8002 +8002 +8002 +8002 +E002 +6002 +ENDCHAR +STARTCHAR uni09CD +ENCODING 2509 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -7 -2 +BITMAP +C0 +20 +10 +ENDCHAR +STARTCHAR uni09CE +ENCODING 2510 +BBX 7 8 5 1 +BITMAP +70 +88 +B0 +80 +60 +1C +02 +02 +ENDCHAR +STARTCHAR uni09D7 +ENCODING 2519 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 13 -9 1 +BITMAP +8000 +7E00 +0100 +0580 +0300 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni09DC +ENCODING 2524 +BBX 16 13 0 -2 +BITMAP +FFFF +0040 +0040 +0858 +0868 +0808 +0408 +0408 +0210 +01E0 +0000 +00C0 +00C0 +ENDCHAR +STARTCHAR uni09DD +ENCODING 2525 +BBX 16 12 0 -1 +BITMAP +FFFF +0400 +0400 +0400 +0400 +0430 +0430 +0420 +04C0 +0700 +0060 +0060 +ENDCHAR +STARTCHAR uni09DF +ENCODING 2527 +BBX 16 11 0 0 +BITMAP +FFFF +0808 +0408 +0208 +0108 +0208 +0C08 +0388 +0068 +0318 +0300 +ENDCHAR +STARTCHAR uni09E0 +ENCODING 2528 +BBX 14 13 2 -2 +BITMAP +00BC +40A0 +90A0 +69A0 +06A0 +19A0 +60E0 +18A0 +06A0 +09A0 +1000 +0800 +0400 +ENDCHAR +STARTCHAR uni09E1 +ENCODING 2529 +BBX 9 13 4 -2 +BITMAP +3000 +4000 +2000 +1C00 +0200 +7100 +8900 +8500 +4600 +0900 +0080 +0680 +0980 +ENDCHAR +STARTCHAR uni09E2 +ENCODING 2530 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -7 -2 +BITMAP +10 +08 +68 +98 +ENDCHAR +STARTCHAR uni09E3 +ENCODING 2531 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 9 -7 -2 +BITMAP +0C +02 +06 +0A +00 +10 +08 +68 +98 +ENDCHAR +STARTCHAR uni09E6 +ENCODING 2534 +BBX 8 9 4 1 +BITMAP +3C +42 +81 +81 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni09E7 +ENCODING 2535 +BBX 9 9 4 1 +BITMAP +8000 +6000 +1800 +0600 +0100 +0080 +0080 +6700 +7800 +ENDCHAR +STARTCHAR uni09E8 +ENCODING 2536 +BBX 7 11 5 -1 +BITMAP +60 +18 +04 +02 +02 +0C +F0 +60 +18 +04 +02 +ENDCHAR +STARTCHAR uni09E9 +ENCODING 2537 +BBX 10 9 3 1 +BITMAP +0700 +8880 +9040 +9640 +8E40 +4040 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni09EA +ENCODING 2538 +BBX 8 10 4 0 +BITMAP +3C +42 +42 +42 +3C +42 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni09EB +ENCODING 2539 +BBX 8 9 4 1 +BITMAP +30 +48 +84 +88 +88 +88 +85 +42 +3C +ENDCHAR +STARTCHAR uni09EC +ENCODING 2540 +BBX 9 9 4 1 +BITMAP +0400 +0400 +8400 +8580 +8680 +4080 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uni09ED +ENCODING 2541 +BBX 7 9 4 1 +BITMAP +7C +82 +82 +86 +7A +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni09EE +ENCODING 2542 +BBX 8 9 4 1 +BITMAP +80 +80 +81 +BE +C8 +88 +88 +90 +60 +ENDCHAR +STARTCHAR uni09EF +ENCODING 2543 +BBX 8 10 4 1 +BITMAP +20 +40 +40 +20 +1C +02 +71 +89 +85 +46 +ENDCHAR +STARTCHAR uni09F0 +ENCODING 2544 +BBX 16 10 0 1 +BITMAP +FFFF +0018 +0068 +0188 +06C8 +1828 +0618 +0188 +0068 +0018 +ENDCHAR +STARTCHAR uni09F1 +ENCODING 2545 +BBX 16 11 0 0 +BITMAP +FFFF +0018 +0068 +0188 +0608 +1808 +0608 +0188 +0C68 +0218 +0100 +ENDCHAR +STARTCHAR uni09F2 +ENCODING 2546 +BBX 7 5 5 3 +BITMAP +C0 +30 +08 +04 +02 +ENDCHAR +STARTCHAR uni09F3 +ENCODING 2547 +BBX 8 10 4 1 +BITMAP +60 +90 +10 +3F +10 +16 +15 +11 +12 +0C +ENDCHAR +STARTCHAR uni09F4 +ENCODING 2548 +BBX 7 5 5 2 +BITMAP +02 +04 +08 +30 +C0 +ENDCHAR +STARTCHAR uni09F5 +ENCODING 2549 +BBX 9 5 4 1 +BITMAP +7080 +8900 +CA00 +1400 +3800 +ENDCHAR +STARTCHAR uni09F6 +ENCODING 2550 +BBX 9 10 4 1 +BITMAP +0080 +0080 +F080 +C880 +0900 +0900 +1100 +E200 +8400 +7800 +ENDCHAR +STARTCHAR uni09F7 +ENCODING 2551 +BBX 1 9 8 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni09F8 +ENCODING 2552 +BBX 9 12 4 -1 +BITMAP +8000 +8000 +8100 +8300 +8500 +8900 +9100 +A100 +C100 +8100 +0100 +0080 +ENDCHAR +STARTCHAR uni09F9 +ENCODING 2553 +BBX 7 7 5 1 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni09FA +ENCODING 2554 +BBX 9 7 4 2 +BITMAP +0080 +0080 +0080 +9900 +9900 +4200 +3C00 +ENDCHAR +STARTCHAR uni09FB +ENCODING 2555 +BBX 5 7 6 1 +BITMAP +60 +80 +80 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni09FC +ENCODING 2556 +BBX 9 9 4 -1 +BITMAP +0100 +1900 +1A00 +8200 +4400 +3800 +0200 +0100 +0080 +ENDCHAR +STARTCHAR uni09FD +ENCODING 2557 +BBX 4 4 6 4 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni09FE +ENCODING 2558 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -10 10 +BITMAP +C0 +20 +F0 +08 +ENDCHAR +STARTCHAR uni0A01 +ENCODING 2561 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 11 +BITMAP +A8 +88 +70 +ENDCHAR +STARTCHAR uni0A02 +ENCODING 2562 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 12 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0A03 +ENCODING 2563 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -3 1 +BITMAP +40 +A0 +40 +00 +40 +A0 +40 +ENDCHAR +STARTCHAR uni0A05 +ENCODING 2565 +BBX 16 9 0 1 +BITMAP +C007 +2004 +1304 +149C +3864 +30C4 +20C4 +0084 +0004 +ENDCHAR +STARTCHAR uni0A06 +ENCODING 2566 +BBX 16 9 0 1 +BITMAP +C03F +2024 +1024 +1664 +39A0 +3320 +2320 +0220 +0020 +ENDCHAR +STARTCHAR uni0A07 +ENCODING 2567 +BBX 16 13 0 1 +BITMAP +3C00 +4200 +4200 +4000 +FFFF +4404 +4404 +4204 +41FC +4200 +4400 +4204 +41F8 +ENDCHAR +STARTCHAR uni0A08 +ENCODING 2568 +BBX 15 13 0 1 +BITMAP +0078 +0084 +0084 +0004 +FFFE +4044 +4044 +2044 +1FC4 +2004 +4004 +2044 +1F84 +ENDCHAR +STARTCHAR uni0A09 +ENCODING 2569 +BBX 16 16 0 -2 +BITMAP +07C0 +0820 +1010 +2008 +FFFF +2008 +2008 +2010 +3FE0 +1010 +0810 +0420 +03C0 +0000 +0810 +07E0 +ENDCHAR +STARTCHAR uni0A0A +ENCODING 2570 +BBX 16 16 0 -2 +BITMAP +07C0 +0820 +1010 +2008 +FFFF +2008 +2010 +3FE0 +1010 +0810 +0420 +03C0 +0810 +07E0 +0810 +07E0 +ENDCHAR +STARTCHAR uni0A0F +ENCODING 2575 +BBX 16 13 0 1 +BITMAP +00C0 +0020 +0010 +0010 +FFFF +1010 +1010 +0810 +07F0 +0800 +1000 +0800 +07F0 +ENDCHAR +STARTCHAR uni0A10 +ENCODING 2576 +BBX 16 14 0 0 +BITMAP +00F0 +0008 +00F4 +000C +C01F +2004 +1304 +149C +3864 +30C4 +20C4 +0084 +0004 +0004 +ENDCHAR +STARTCHAR uni0A13 +ENCODING 2579 +BBX 16 13 0 1 +BITMAP +07F0 +0800 +1000 +2000 +FFFF +2008 +2008 +2010 +3FE0 +1010 +0810 +0420 +03C0 +ENDCHAR +STARTCHAR uni0A14 +ENCODING 2580 +BBX 16 14 0 0 +BITMAP +0200 +01F0 +0048 +0048 +C01F +2004 +1304 +149C +3864 +30C4 +20C4 +0084 +0004 +0004 +ENDCHAR +STARTCHAR uni0A15 +ENCODING 2581 +BBX 16 10 0 0 +BITMAP +FFFF +0010 +0010 +0F10 +10A0 +2060 +2060 +2090 +1110 +0E10 +ENDCHAR +STARTCHAR uni0A16 +ENCODING 2582 +BBX 16 10 0 0 +BITMAP +F01F +1010 +0810 +0FF0 +1010 +2010 +1030 +0FD0 +0010 +0010 +ENDCHAR +STARTCHAR uni0A17 +ENCODING 2583 +BBX 16 10 0 0 +BITMAP +FFFF +0090 +0090 +0090 +1F90 +2090 +2090 +1090 +0910 +0610 +ENDCHAR +STARTCHAR uni0A18 +ENCODING 2584 +BBX 16 9 0 1 +BITMAP +F11F +1110 +0910 +0910 +1110 +2110 +1130 +0ED0 +0010 +ENDCHAR +STARTCHAR uni0A19 +ENCODING 2585 +BBX 16 9 0 1 +BITMAP +FFFF +1000 +1000 +1FC0 +0020 +03A0 +0440 +04A0 +0310 +ENDCHAR +STARTCHAR uni0A1A +ENCODING 2586 +BBX 16 9 0 1 +BITMAP +FFFF +0020 +0020 +1820 +1FE0 +0820 +0820 +0420 +03C0 +ENDCHAR +STARTCHAR uni0A1B +ENCODING 2587 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +0010 +1FF0 +2000 +1FF0 +2108 +2108 +1FF0 +ENDCHAR +STARTCHAR uni0A1C +ENCODING 2588 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +0010 +1810 +1FF0 +0810 +0810 +0810 +0810 +ENDCHAR +STARTCHAR uni0A1D +ENCODING 2589 +BBX 16 10 0 0 +BITMAP +FFFF +0C30 +0240 +0FE0 +1010 +2608 +07F0 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uni0A1E +ENCODING 2590 +BBX 16 9 0 1 +BITMAP +FFFF +2010 +2010 +1FF0 +2000 +2000 +1FF0 +0400 +03F0 +ENDCHAR +STARTCHAR uni0A1F +ENCODING 2591 +BBX 16 9 0 1 +BITMAP +FFFF +0040 +0040 +01C0 +0200 +0400 +0800 +0410 +03E0 +ENDCHAR +STARTCHAR uni0A20 +ENCODING 2592 +BBX 16 10 0 0 +BITMAP +FFFF +0100 +0100 +0280 +0440 +0820 +1010 +1010 +0820 +07C0 +ENDCHAR +STARTCHAR uni0A21 +ENCODING 2593 +BBX 16 10 0 0 +BITMAP +FFFF +0008 +0008 +03F0 +0010 +0010 +1F08 +2088 +1070 +0FC0 +ENDCHAR +STARTCHAR uni0A22 +ENCODING 2594 +BBX 16 11 0 -1 +BITMAP +FFFF +0010 +0010 +1810 +1FF0 +0800 +0800 +09E0 +0A10 +0420 +03C0 +ENDCHAR +STARTCHAR uni0A23 +ENCODING 2595 +BBX 16 10 0 0 +BITMAP +FFFF +0100 +00C0 +0060 +0F50 +10C0 +2000 +1010 +0820 +07C0 +ENDCHAR +STARTCHAR uni0A24 +ENCODING 2596 +BBX 16 10 0 0 +BITMAP +FFFF +0010 +0010 +07A0 +07E0 +0030 +2010 +3010 +0C20 +03C0 +ENDCHAR +STARTCHAR uni0A25 +ENCODING 2597 +BBX 16 10 0 0 +BITMAP +FFFF +1010 +0810 +0FF0 +1010 +3010 +0C30 +03D0 +0010 +0010 +ENDCHAR +STARTCHAR uni0A26 +ENCODING 2598 +BBX 16 10 0 0 +BITMAP +FFFF +0020 +0020 +3020 +3FE0 +1000 +1000 +0800 +0410 +03E0 +ENDCHAR +STARTCHAR uni0A27 +ENCODING 2599 +BBX 16 10 0 0 +BITMAP +FFFF +0810 +0410 +0410 +0810 +1010 +0810 +0670 +0190 +0010 +ENDCHAR +STARTCHAR uni0A28 +ENCODING 2600 +BBX 16 9 0 1 +BITMAP +FFFF +0100 +0100 +0280 +0440 +0820 +1010 +1010 +0820 +ENDCHAR +STARTCHAR uni0A2A +ENCODING 2602 +BBX 16 10 0 0 +BITMAP +F81F +0810 +0410 +0410 +0810 +1010 +0810 +0670 +0190 +0010 +ENDCHAR +STARTCHAR uni0A2B +ENCODING 2603 +BBX 16 10 0 0 +BITMAP +FFFF +0010 +0010 +1FF0 +2000 +2000 +21E0 +1210 +0C20 +03C0 +ENDCHAR +STARTCHAR uni0A2C +ENCODING 2604 +BBX 16 10 0 0 +BITMAP +FFFF +0810 +0410 +07F0 +0810 +1010 +0810 +0670 +0190 +0010 +ENDCHAR +STARTCHAR uni0A2D +ENCODING 2605 +BBX 16 10 0 0 +BITMAP +FFFF +0010 +0010 +03D0 +0430 +03C8 +0008 +1010 +0820 +07C0 +ENDCHAR +STARTCHAR uni0A2E +ENCODING 2606 +BBX 16 10 0 0 +BITMAP +F01F +0810 +0810 +0810 +0FF0 +1810 +1810 +0010 +0190 +0190 +ENDCHAR +STARTCHAR uni0A2F +ENCODING 2607 +BBX 16 10 0 0 +BITMAP +FFFF +0810 +0410 +0410 +08F0 +1090 +0890 +0490 +0390 +0010 +ENDCHAR +STARTCHAR uni0A30 +ENCODING 2608 +BBX 16 10 0 0 +BITMAP +FFFF +0010 +0010 +07F0 +0810 +0810 +0810 +0410 +0210 +01E0 +ENDCHAR +STARTCHAR uni0A32 +ENCODING 2610 +BBX 16 9 0 1 +BITMAP +FFFF +0820 +0820 +0440 +0AA0 +1110 +1010 +0820 +0440 +ENDCHAR +STARTCHAR uni0A33 +ENCODING 2611 +BBX 16 10 0 0 +BITMAP +FFFF +0820 +0820 +0440 +0AA0 +1110 +1010 +0820 +044C +000C +ENDCHAR +STARTCHAR uni0A35 +ENCODING 2613 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +0010 +1FF0 +2000 +3000 +0FF0 +0400 +03E0 +ENDCHAR +STARTCHAR uni0A36 +ENCODING 2614 +BBX 16 10 0 0 +BITMAP +FFFF +0810 +0810 +0810 +0FF0 +1810 +1810 +0010 +0190 +0190 +ENDCHAR +STARTCHAR uni0A38 +ENCODING 2616 +BBX 16 10 0 0 +BITMAP +FFFF +0810 +0810 +0810 +0FF0 +1810 +1810 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni0A39 +ENCODING 2617 +BBX 16 10 0 0 +BITMAP +FFFF +0010 +0010 +0710 +0810 +0810 +0810 +0410 +0210 +01E0 +ENDCHAR +STARTCHAR uni0A3C +ENCODING 2620 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0A3E +ENCODING 2622 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 -5 4 +BITMAP +F8 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0A3F +ENCODING 2623 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 15 -16 -1 +BITMAP +78 +84 +84 +84 +E0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0A40 +ENCODING 2624 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 15 -8 -1 +BITMAP +78 +84 +84 +84 +1F +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni0A41 +ENCODING 2625 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -12 -1 +BITMAP +82 +7C +ENDCHAR +STARTCHAR uni0A42 +ENCODING 2626 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -12 -2 +BITMAP +82 +7C +82 +7C +ENDCHAR +STARTCHAR uni0A47 +ENCODING 2631 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -8 10 +BITMAP +E0 +10 +08 +ENDCHAR +STARTCHAR uni0A48 +ENCODING 2632 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -9 10 +BITMAP +F0 +08 +7C +04 +ENDCHAR +STARTCHAR uni0A4B +ENCODING 2635 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -10 10 +BITMAP +80 +7C +02 +02 +ENDCHAR +STARTCHAR uni0A4C +ENCODING 2636 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -10 10 +BITMAP +80 +7C +12 +12 +ENDCHAR +STARTCHAR uni0A4D +ENCODING 2637 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -5 -2 +BITMAP +C0 +20 +10 +ENDCHAR +STARTCHAR uni0A51 +ENCODING 2641 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -12 -2 +BITMAP +80 +60 +18 +ENDCHAR +STARTCHAR uni0A59 +ENCODING 2649 +BBX 16 11 0 -1 +BITMAP +F81F +0810 +0410 +07F0 +0810 +1010 +0810 +0670 +0190 +1810 +1800 +ENDCHAR +STARTCHAR uni0A5A +ENCODING 2650 +BBX 16 12 0 -2 +BITMAP +FFFF +0090 +0090 +0F90 +1090 +1090 +1090 +0890 +0490 +0310 +1800 +1800 +ENDCHAR +STARTCHAR uni0A5B +ENCODING 2651 +BBX 16 11 0 -1 +BITMAP +FFFF +0010 +0010 +1810 +1FF0 +0810 +0810 +0810 +0810 +0990 +0180 +ENDCHAR +STARTCHAR uni0A5C +ENCODING 2652 +BBX 16 12 0 -2 +BITMAP +FFFF +0020 +0020 +0020 +07E0 +0010 +0010 +1020 +0840 +07C0 +0420 +0210 +ENDCHAR +STARTCHAR uni0A5E +ENCODING 2654 +BBX 16 11 0 -1 +BITMAP +FFFF +0010 +0010 +1FF0 +2000 +2000 +21E0 +1210 +0C20 +63C0 +6000 +ENDCHAR +STARTCHAR uni0A66 +ENCODING 2662 +BBX 10 9 2 1 +BITMAP +1E00 +2100 +4080 +8040 +8040 +8040 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uni0A67 +ENCODING 2663 +BBX 8 10 4 0 +BITMAP +70 +88 +84 +8C +74 +04 +04 +04 +04 +03 +ENDCHAR +STARTCHAR uni0A68 +ENCODING 2664 +BBX 8 9 4 1 +BITMAP +7C +02 +01 +01 +02 +FC +04 +02 +01 +ENDCHAR +STARTCHAR uni0A69 +ENCODING 2665 +BBX 9 12 2 -2 +BITMAP +3E00 +0100 +0080 +0100 +7E00 +0100 +0080 +C100 +FE00 +2000 +1000 +0800 +ENDCHAR +STARTCHAR uni0A6A +ENCODING 2666 +BBX 7 10 4 0 +BITMAP +44 +82 +82 +44 +38 +44 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni0A6B +ENCODING 2667 +BBX 12 10 2 0 +BITMAP +40F0 +4080 +2080 +2080 +4080 +8080 +4080 +3380 +0C80 +0080 +ENDCHAR +STARTCHAR uni0A6C +ENCODING 2668 +BBX 9 13 4 1 +BITMAP +0E00 +1000 +1000 +0C00 +3F00 +4300 +8000 +4000 +3F00 +4000 +8000 +4080 +3F00 +ENDCHAR +STARTCHAR uni0A6D +ENCODING 2669 +BBX 8 10 4 0 +BITMAP +3C +42 +81 +81 +61 +02 +04 +08 +30 +40 +ENDCHAR +STARTCHAR uni0A6E +ENCODING 2670 +BBX 10 10 2 1 +BITMAP +C000 +FFC0 +4000 +4000 +4000 +4000 +4000 +2000 +1000 +0FC0 +ENDCHAR +STARTCHAR uni0A6F +ENCODING 2671 +BBX 10 13 2 1 +BITMAP +0180 +0200 +0200 +C180 +FFC0 +40C0 +4000 +4000 +4000 +4000 +2000 +1000 +0FC0 +ENDCHAR +STARTCHAR uni0A70 +ENCODING 2672 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 11 +BITMAP +78 +84 +48 +ENDCHAR +STARTCHAR uni0A71 +ENCODING 2673 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 11 +BITMAP +84 +84 +78 +ENDCHAR +STARTCHAR uni0A72 +ENCODING 2674 +BBX 16 10 0 0 +BITMAP +FFFF +1010 +1010 +0810 +07F0 +0800 +1000 +0810 +0420 +03C0 +ENDCHAR +STARTCHAR uni0A73 +ENCODING 2675 +BBX 16 13 0 1 +BITMAP +07E0 +0810 +1008 +2008 +FFFF +2008 +2008 +2010 +3FE0 +1010 +0810 +0420 +03C0 +ENDCHAR +STARTCHAR uni0A74 +ENCODING 2676 +BBX 13 12 2 0 +BITMAP +6010 +93E0 +9430 +7648 +2D08 +5208 +A030 +A008 +A008 +9010 +4820 +27C0 +ENDCHAR +STARTCHAR uni0A75 +ENCODING 2677 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -10 -2 +BITMAP +80 +80 +90 +60 +ENDCHAR +STARTCHAR uni0A76 +ENCODING 2678 +BBX 5 5 5 3 +BITMAP +20 +70 +F8 +70 +20 +ENDCHAR +STARTCHAR uni0A81 +ENCODING 2689 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 11 +BITMAP +A8 +88 +70 +ENDCHAR +STARTCHAR uni0A82 +ENCODING 2690 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 12 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0A83 +ENCODING 2691 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 6 -2 2 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni0A85 +ENCODING 2693 +BBX 14 8 1 2 +BITMAP +F010 +0810 +0910 +71F0 +2090 +1110 +0E14 +0008 +ENDCHAR +STARTCHAR uni0A86 +ENCODING 2694 +BBX 16 8 0 2 +BITMAP +F022 +0822 +0922 +71E2 +20A2 +1122 +0E2A +0011 +ENDCHAR +STARTCHAR uni0A87 +ENCODING 2695 +BBX 8 11 5 2 +BITMAP +03 +04 +04 +74 +84 +84 +84 +64 +84 +88 +70 +ENDCHAR +STARTCHAR uni0A88 +ENCODING 2696 +BBX 9 11 4 2 +BITMAP +0300 +0480 +0480 +7400 +8400 +8400 +8400 +6400 +8400 +8800 +7000 +ENDCHAR +STARTCHAR uni0A89 +ENCODING 2697 +BBX 8 11 4 2 +BITMAP +3C +42 +81 +9C +82 +82 +82 +8C +42 +22 +1C +ENDCHAR +STARTCHAR uni0A8A +ENCODING 2698 +BBX 12 11 2 2 +BITMAP +3C00 +4200 +8100 +9C80 +8240 +8240 +8240 +8C40 +4240 +2250 +1C20 +ENDCHAR +STARTCHAR uni0A8B +ENCODING 2699 +BBX 13 8 2 2 +BITMAP +E440 +14A0 +0CA0 +0460 +0F90 +1408 +2508 +4210 +ENDCHAR +STARTCHAR uni0A8C +ENCODING 2700 +BBX 12 8 2 2 +BITMAP +0080 +3DC0 +4220 +8210 +8060 +4080 +3080 +0070 +ENDCHAR +STARTCHAR uni0A8D +ENCODING 2701 +BBX 14 12 1 2 +BITMAP +0080 +0040 +0030 +0000 +F010 +0810 +0910 +71F0 +2090 +1110 +0E14 +0008 +ENDCHAR +STARTCHAR uni0A8F +ENCODING 2703 +BBX 14 11 1 2 +BITMAP +00C0 +0020 +0010 +F010 +0810 +0910 +71F0 +2090 +1110 +0E14 +0008 +ENDCHAR +STARTCHAR uni0A90 +ENCODING 2704 +BBX 14 12 1 2 +BITMAP +01C0 +0030 +01F0 +0010 +F010 +0810 +0910 +71F0 +2090 +1110 +0E14 +0008 +ENDCHAR +STARTCHAR uni0A91 +ENCODING 2705 +BBX 16 12 0 2 +BITMAP +0010 +0008 +0006 +0000 +F022 +0822 +0922 +71E2 +20A2 +1122 +0E2A +0011 +ENDCHAR +STARTCHAR uni0A93 +ENCODING 2707 +BBX 16 11 0 2 +BITMAP +0018 +0004 +0002 +F022 +0822 +0922 +71E2 +20A2 +1122 +0E2A +0011 +ENDCHAR +STARTCHAR uni0A94 +ENCODING 2708 +BBX 16 12 0 2 +BITMAP +0038 +0006 +003E +0002 +F022 +0822 +0922 +71E2 +20A2 +1122 +0E2A +0011 +ENDCHAR +STARTCHAR uni0A95 +ENCODING 2709 +BBX 6 8 4 2 +BITMAP +18 +20 +24 +18 +18 +24 +84 +78 +ENDCHAR +STARTCHAR uni0A96 +ENCODING 2710 +BBX 11 8 1 2 +BITMAP +4080 +A080 +2480 +2780 +1880 +0080 +00A0 +0040 +ENDCHAR +STARTCHAR uni0A97 +ENCODING 2711 +BBX 10 8 3 2 +BITMAP +6100 +9100 +0900 +0900 +9100 +6100 +0140 +0080 +ENDCHAR +STARTCHAR uni0A98 +ENCODING 2712 +BBX 9 8 5 2 +BITMAP +7200 +8200 +8200 +8200 +6200 +8600 +8A80 +7100 +ENDCHAR +STARTCHAR uni0A99 +ENCODING 2713 +BBX 9 8 2 2 +BITMAP +0400 +0400 +0980 +1180 +0800 +8400 +4400 +3800 +ENDCHAR +STARTCHAR uni0A9A +ENCODING 2714 +BBX 12 8 2 2 +BITMAP +F040 +0840 +0840 +7040 +20C0 +1140 +0E50 +0020 +ENDCHAR +STARTCHAR uni0A9B +ENCODING 2715 +BBX 9 8 2 2 +BITMAP +7300 +8480 +8480 +8480 +6280 +8100 +8200 +7C00 +ENDCHAR +STARTCHAR uni0A9C +ENCODING 2716 +BBX 11 8 1 2 +BITMAP +1C20 +2240 +5180 +9100 +9280 +6240 +0240 +0180 +ENDCHAR +STARTCHAR uni0A9D +ENCODING 2717 +BBX 9 8 3 2 +BITMAP +6200 +9200 +0A00 +0F00 +9080 +6080 +0080 +0300 +ENDCHAR +STARTCHAR uni0A9E +ENCODING 2718 +BBX 10 8 3 2 +BITMAP +6100 +9100 +0900 +0F00 +9100 +6100 +0140 +0080 +ENDCHAR +STARTCHAR uni0A9F +ENCODING 2719 +BBX 5 8 1 2 +BITMAP +70 +08 +08 +30 +40 +80 +88 +70 +ENDCHAR +STARTCHAR uni0AA0 +ENCODING 2720 +BBX 5 8 4 2 +BITMAP +18 +20 +20 +10 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni0AA1 +ENCODING 2721 +BBX 6 8 2 2 +BITMAP +04 +04 +08 +10 +08 +84 +44 +38 +ENDCHAR +STARTCHAR uni0AA2 +ENCODING 2722 +BBX 9 8 2 2 +BITMAP +7000 +0800 +3000 +4300 +8480 +8480 +4300 +3E00 +ENDCHAR +STARTCHAR uni0AA3 +ENCODING 2723 +BBX 11 12 1 -2 +BITMAP +9880 +A480 +8280 +8280 +A480 +9880 +80A0 +8040 +4000 +2000 +1000 +2000 +ENDCHAR +STARTCHAR uni0AA4 +ENCODING 2724 +BBX 8 8 4 2 +BITMAP +04 +04 +3C +44 +84 +84 +45 +22 +ENDCHAR +STARTCHAR uni0AA5 +ENCODING 2725 +BBX 9 8 3 2 +BITMAP +6200 +9200 +5200 +2200 +4600 +3A00 +0280 +0100 +ENDCHAR +STARTCHAR uni0AA6 +ENCODING 2726 +BBX 5 8 5 2 +BITMAP +70 +80 +80 +80 +60 +80 +88 +70 +ENDCHAR +STARTCHAR uni0AA7 +ENCODING 2727 +BBX 8 11 4 2 +BITMAP +60 +80 +80 +64 +84 +8C +74 +04 +04 +05 +02 +ENDCHAR +STARTCHAR uni0AA8 +ENCODING 2728 +BBX 8 8 3 2 +BITMAP +04 +04 +04 +FC +C4 +04 +05 +02 +ENDCHAR +STARTCHAR uni0AAA +ENCODING 2730 +BBX 10 8 2 2 +BITMAP +4100 +A100 +2100 +2300 +1D00 +0100 +0140 +0080 +ENDCHAR +STARTCHAR uni0AAB +ENCODING 2731 +BBX 7 11 3 -1 +BITMAP +0C +10 +12 +0C +0C +12 +C2 +FC +20 +10 +0C +ENDCHAR +STARTCHAR uni0AAC +ENCODING 2732 +BBX 13 8 2 2 +BITMAP +2020 +4020 +8220 +83E0 +4420 +3820 +0028 +0010 +ENDCHAR +STARTCHAR uni0AAD +ENCODING 2733 +BBX 12 8 3 2 +BITMAP +3840 +4440 +8440 +87C0 +8040 +4040 +2050 +0020 +ENDCHAR +STARTCHAR uni0AAE +ENCODING 2734 +BBX 9 8 4 2 +BITMAP +C200 +2200 +2200 +3E00 +0200 +0200 +0280 +0100 +ENDCHAR +STARTCHAR uni0AAF +ENCODING 2735 +BBX 9 8 4 2 +BITMAP +C200 +2200 +4200 +8200 +4600 +3A00 +0280 +0100 +ENDCHAR +STARTCHAR uni0AB0 +ENCODING 2736 +BBX 7 7 3 3 +BITMAP +F0 +08 +08 +70 +20 +10 +0E +ENDCHAR +STARTCHAR uni0AB2 +ENCODING 2738 +BBX 9 8 2 2 +BITMAP +3200 +4200 +8200 +9E00 +8200 +4200 +3280 +0100 +ENDCHAR +STARTCHAR uni0AB3 +ENCODING 2739 +BBX 10 8 2 1 +BITMAP +8600 +8900 +8900 +8900 +7100 +0100 +0140 +0080 +ENDCHAR +STARTCHAR uni0AB5 +ENCODING 2741 +BBX 8 8 4 1 +BITMAP +74 +8C +84 +8C +74 +04 +05 +02 +ENDCHAR +STARTCHAR uni0AB6 +ENCODING 2742 +BBX 10 8 3 2 +BITMAP +6100 +9100 +9100 +6100 +2100 +C100 +4140 +3880 +ENDCHAR +STARTCHAR uni0AB7 +ENCODING 2743 +BBX 8 8 4 2 +BITMAP +C4 +A4 +94 +8C +74 +04 +05 +02 +ENDCHAR +STARTCHAR uni0AB8 +ENCODING 2744 +BBX 11 8 2 2 +BITMAP +F080 +0880 +0F80 +7080 +2080 +1080 +0CA0 +0040 +ENDCHAR +STARTCHAR uni0AB9 +ENCODING 2745 +BBX 9 8 2 2 +BITMAP +8400 +8800 +8400 +8200 +9200 +8C80 +4080 +3F00 +ENDCHAR +STARTCHAR uni0ABC +ENCODING 2748 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0ABD +ENCODING 2749 +BBX 5 8 1 2 +BITMAP +70 +80 +80 +60 +10 +08 +88 +70 +ENDCHAR +STARTCHAR uni0ABE +ENCODING 2750 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 8 -3 2 +BITMAP +80 +80 +80 +80 +80 +80 +A0 +40 +ENDCHAR +STARTCHAR uni0ABF +ENCODING 2751 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 12 -16 2 +BITMAP +60 +90 +88 +80 +80 +80 +80 +80 +80 +80 +A0 +40 +ENDCHAR +STARTCHAR uni0AC0 +ENCODING 2752 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -6 2 +BITMAP +60 +90 +90 +10 +10 +10 +10 +10 +10 +10 +14 +08 +ENDCHAR +STARTCHAR uni0AC1 +ENCODING 2753 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -10 -2 +BITMAP +98 +44 +38 +ENDCHAR +STARTCHAR uni0AC2 +ENCODING 2754 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -10 -2 +BITMAP +70 +88 +64 +ENDCHAR +STARTCHAR uni0AC3 +ENCODING 2755 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -10 -2 +BITMAP +70 +80 +70 +ENDCHAR +STARTCHAR uni0AC4 +ENCODING 2756 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -10 -2 +BITMAP +60 +80 +60 +80 +70 +ENDCHAR +STARTCHAR uni0AC5 +ENCODING 2757 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -5 11 +BITMAP +80 +40 +30 +ENDCHAR +STARTCHAR uni0AC7 +ENCODING 2759 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -5 10 +BITMAP +C0 +20 +10 +ENDCHAR +STARTCHAR uni0AC8 +ENCODING 2760 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -6 10 +BITMAP +E0 +18 +F8 +08 +ENDCHAR +STARTCHAR uni0AC9 +ENCODING 2761 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -6 2 +BITMAP +80 +40 +30 +00 +10 +10 +10 +10 +10 +10 +14 +08 +ENDCHAR +STARTCHAR uni0ACB +ENCODING 2763 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -6 2 +BITMAP +C0 +20 +10 +10 +10 +10 +10 +10 +10 +10 +14 +08 +ENDCHAR +STARTCHAR uni0ACC +ENCODING 2764 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -6 2 +BITMAP +E0 +10 +D0 +30 +10 +10 +10 +10 +10 +10 +14 +08 +ENDCHAR +STARTCHAR uni0ACD +ENCODING 2765 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -9 -2 +BITMAP +E0 +10 +08 +ENDCHAR +STARTCHAR uni0AD0 +ENCODING 2768 +BBX 14 13 1 1 +BITMAP +0060 +0060 +0000 +0108 +78F0 +0400 +0418 +1824 +3064 +0898 +8700 +8400 +7800 +ENDCHAR +STARTCHAR uni0AE0 +ENCODING 2784 +BBX 14 8 1 2 +BITMAP +E440 +14A0 +0CA0 +0460 +0FB8 +1420 +2524 +4218 +ENDCHAR +STARTCHAR uni0AE1 +ENCODING 2785 +BBX 12 11 2 -1 +BITMAP +0080 +3DC0 +4220 +8210 +8060 +4080 +3080 +0070 +0080 +0080 +0070 +ENDCHAR +STARTCHAR uni0AE2 +ENCODING 2786 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -11 -2 +BITMAP +6C +92 +84 +03 +ENDCHAR +STARTCHAR uni0AE3 +ENCODING 2787 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 5 -11 -2 +BITMAP +6C00 +9200 +8480 +0340 +0180 +ENDCHAR +STARTCHAR uni0AE6 +ENCODING 2790 +BBX 10 9 2 1 +BITMAP +1E00 +2100 +4080 +8040 +8040 +8040 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uni0AE7 +ENCODING 2791 +BBX 8 10 4 0 +BITMAP +70 +88 +84 +8C +74 +04 +04 +04 +04 +03 +ENDCHAR +STARTCHAR uni0AE8 +ENCODING 2792 +BBX 8 9 4 1 +BITMAP +7C +02 +01 +01 +C2 +FC +20 +10 +0C +ENDCHAR +STARTCHAR uni0AE9 +ENCODING 2793 +BBX 9 9 3 1 +BITMAP +0E00 +0100 +0080 +0100 +1E00 +8100 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uni0AEA +ENCODING 2794 +BBX 10 10 3 0 +BITMAP +E040 +1080 +0900 +0600 +0600 +0900 +1100 +1100 +1100 +0E00 +ENDCHAR +STARTCHAR uni0AEB +ENCODING 2795 +BBX 10 8 2 2 +BITMAP +4100 +A100 +2100 +2300 +1D00 +0100 +0140 +0080 +ENDCHAR +STARTCHAR uni0AEC +ENCODING 2796 +BBX 10 12 3 -2 +BITMAP +3800 +4000 +8000 +4000 +3F00 +2000 +4000 +2000 +1F80 +0040 +0040 +0380 +ENDCHAR +STARTCHAR uni0AED +ENCODING 2797 +BBX 10 10 2 0 +BITMAP +0F00 +1180 +2240 +2440 +1840 +8040 +8040 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni0AEE +ENCODING 2798 +BBX 7 10 3 1 +BITMAP +04 +08 +10 +20 +40 +80 +80 +80 +42 +3C +ENDCHAR +STARTCHAR uni0AEF +ENCODING 2799 +BBX 8 8 2 2 +BITMAP +20 +41 +82 +84 +88 +80 +40 +3E +ENDCHAR +STARTCHAR uni0AF0 +ENCODING 2800 +BBX 4 4 2 2 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0AF1 +ENCODING 2801 +BBX 13 12 2 -2 +BITMAP +3000 +0800 +0400 +0800 +7070 +0888 +0488 +C888 +F070 +2000 +1000 +0C00 +ENDCHAR +STARTCHAR uni0AF9 +ENCODING 2809 +BBX 13 9 2 1 +BITMAP +7E08 +A110 +90A0 +90C0 +6140 +0240 +1440 +4480 +1300 +ENDCHAR +STARTCHAR uni0AFA +ENCODING 2810 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -8 10 +BITMAP +C0 +20 +20 +40 +ENDCHAR +STARTCHAR uni0AFB +ENCODING 2811 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 3 -12 11 +BITMAP +8880 +8880 +7700 +ENDCHAR +STARTCHAR uni0AFC +ENCODING 2812 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -11 10 +BITMAP +0180 +2600 +3800 +E000 +ENDCHAR +STARTCHAR uni0AFD +ENCODING 2813 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -12 10 +BITMAP +18 +18 +C3 +C3 +ENDCHAR +STARTCHAR uni0AFE +ENCODING 2814 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -10 10 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0AFF +ENCODING 2815 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -12 10 +BITMAP +6300 +9480 +9480 +6300 +ENDCHAR +STARTCHAR uni0B01 +ENCODING 2817 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 11 +BITMAP +A8 +88 +70 +ENDCHAR +STARTCHAR uni0B02 +ENCODING 2818 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -3 11 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni0B03 +ENCODING 2819 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -3 2 +BITMAP +40 +A0 +A0 +40 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni0B05 +ENCODING 2821 +BBX 11 8 1 2 +BITMAP +6C20 +9220 +9220 +4420 +0820 +1020 +1060 +0FA0 +ENDCHAR +STARTCHAR uni0B06 +ENCODING 2822 +BBX 13 8 1 2 +BITMAP +6C28 +9228 +9228 +4428 +0828 +0828 +0468 +03A8 +ENDCHAR +STARTCHAR uni0B07 +ENCODING 2823 +BBX 10 8 1 2 +BITMAP +1F00 +6080 +8040 +8040 +9440 +6A80 +2A80 +1440 +ENDCHAR +STARTCHAR uni0B08 +ENCODING 2824 +BBX 10 8 1 2 +BITMAP +0700 +0880 +7C40 +8040 +9440 +6A80 +2A80 +1440 +ENDCHAR +STARTCHAR uni0B09 +ENCODING 2825 +BBX 10 8 1 2 +BITMAP +1F00 +6080 +8040 +8240 +A440 +4C80 +4480 +3840 +ENDCHAR +STARTCHAR uni0B0A +ENCODING 2826 +BBX 11 8 1 2 +BITMAP +1F00 +6080 +8080 +8280 +A440 +4C20 +4440 +3820 +ENDCHAR +STARTCHAR uni0B0B +ENCODING 2827 +BBX 9 8 2 2 +BITMAP +1C00 +6200 +8200 +8200 +B100 +4880 +4900 +3080 +ENDCHAR +STARTCHAR uni0B0C +ENCODING 2828 +BBX 6 7 5 2 +BITMAP +70 +88 +30 +40 +98 +A4 +78 +ENDCHAR +STARTCHAR uni0B0F +ENCODING 2831 +BBX 6 8 1 2 +BITMAP +04 +0C +14 +84 +44 +24 +14 +0C +ENDCHAR +STARTCHAR uni0B10 +ENCODING 2832 +BBX 10 11 2 2 +BITMAP +0780 +0840 +0040 +0480 +0C80 +1480 +8780 +4480 +2480 +1480 +0C80 +ENDCHAR +STARTCHAR uni0B13 +ENCODING 2835 +BBX 7 8 4 2 +BITMAP +4C +92 +82 +82 +8C +42 +22 +1C +ENDCHAR +STARTCHAR uni0B14 +ENCODING 2836 +BBX 11 11 2 2 +BITMAP +03C0 +0420 +0020 +4C40 +9240 +8240 +83C0 +8C40 +4240 +2240 +1C40 +ENDCHAR +STARTCHAR uni0B15 +ENCODING 2837 +BBX 11 8 1 2 +BITMAP +1F80 +6040 +8020 +8020 +9300 +6C80 +2C80 +1480 +ENDCHAR +STARTCHAR uni0B16 +ENCODING 2838 +BBX 8 8 4 2 +BITMAP +39 +51 +93 +8D +81 +71 +49 +31 +ENDCHAR +STARTCHAR uni0B17 +ENCODING 2839 +BBX 8 8 4 2 +BITMAP +39 +45 +83 +81 +81 +71 +49 +31 +ENDCHAR +STARTCHAR uni0B18 +ENCODING 2840 +BBX 9 8 3 2 +BITMAP +1C80 +2280 +4180 +5080 +6080 +8880 +8980 +7680 +ENDCHAR +STARTCHAR uni0B19 +ENCODING 2841 +BBX 12 8 1 2 +BITMAP +1E00 +6100 +80E0 +8290 +A460 +4C00 +4400 +3800 +ENDCHAR +STARTCHAR uni0B1A +ENCODING 2842 +BBX 8 8 4 2 +BITMAP +3C +42 +81 +81 +81 +72 +48 +30 +ENDCHAR +STARTCHAR uni0B1B +ENCODING 2843 +BBX 9 8 3 2 +BITMAP +1E00 +2100 +4080 +5880 +2400 +B800 +5400 +2800 +ENDCHAR +STARTCHAR uni0B1C +ENCODING 2844 +BBX 8 8 4 2 +BITMAP +3C +42 +81 +80 +A6 +4A +4A +32 +ENDCHAR +STARTCHAR uni0B1D +ENCODING 2845 +BBX 9 8 3 2 +BITMAP +1D00 +2480 +4880 +8700 +B000 +4800 +4C00 +3200 +ENDCHAR +STARTCHAR uni0B1E +ENCODING 2846 +BBX 10 8 2 2 +BITMAP +4D80 +9240 +8040 +7F80 +4D80 +9240 +8040 +7F80 +ENDCHAR +STARTCHAR uni0B1F +ENCODING 2847 +BBX 8 8 4 2 +BITMAP +39 +45 +83 +81 +80 +70 +48 +30 +ENDCHAR +STARTCHAR uni0B20 +ENCODING 2848 +BBX 7 7 3 2 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni0B21 +ENCODING 2849 +BBX 9 8 3 2 +BITMAP +1E00 +6100 +8080 +8280 +A480 +4D00 +4400 +3800 +ENDCHAR +STARTCHAR uni0B22 +ENCODING 2850 +BBX 9 10 3 0 +BITMAP +1E00 +6100 +8080 +8080 +A080 +4900 +5400 +3800 +1000 +0800 +ENDCHAR +STARTCHAR uni0B23 +ENCODING 2851 +BBX 9 8 3 2 +BITMAP +1C80 +2280 +5180 +8880 +E080 +1080 +1080 +6080 +ENDCHAR +STARTCHAR uni0B24 +ENCODING 2852 +BBX 10 8 1 2 +BITMAP +1F00 +6080 +8040 +8040 +A680 +4600 +4600 +3800 +ENDCHAR +STARTCHAR uni0B25 +ENCODING 2853 +BBX 9 8 3 2 +BITMAP +3080 +4880 +0880 +7080 +8080 +8080 +4180 +3E80 +ENDCHAR +STARTCHAR uni0B26 +ENCODING 2854 +BBX 10 8 1 2 +BITMAP +1F00 +6080 +8040 +8240 +A600 +4600 +4600 +3A00 +ENDCHAR +STARTCHAR uni0B27 +ENCODING 2855 +BBX 7 8 5 2 +BITMAP +02 +82 +42 +62 +92 +82 +86 +7A +ENDCHAR +STARTCHAR uni0B28 +ENCODING 2856 +BBX 9 8 2 2 +BITMAP +3E00 +4100 +8080 +8080 +9C80 +6500 +3400 +3400 +ENDCHAR +STARTCHAR uni0B2A +ENCODING 2858 +BBX 9 8 3 2 +BITMAP +3C80 +4280 +8180 +9080 +6080 +4080 +4180 +3E80 +ENDCHAR +STARTCHAR uni0B2B +ENCODING 2859 +BBX 12 8 1 2 +BITMAP +3960 +4590 +8390 +9160 +6100 +4100 +4300 +3D00 +ENDCHAR +STARTCHAR uni0B2C +ENCODING 2860 +BBX 9 8 2 2 +BITMAP +1E00 +6100 +8080 +B880 +C480 +4400 +4600 +3A00 +ENDCHAR +STARTCHAR uni0B2D +ENCODING 2861 +BBX 10 8 1 2 +BITMAP +1F00 +6080 +8040 +8A40 +AA40 +4680 +4280 +3C40 +ENDCHAR +STARTCHAR uni0B2E +ENCODING 2862 +BBX 11 9 1 1 +BITMAP +0F20 +10A0 +2060 +2420 +1820 +2020 +C020 +C020 +0020 +ENDCHAR +STARTCHAR uni0B2F +ENCODING 2863 +BBX 11 8 1 2 +BITMAP +0F20 +10A0 +2060 +2420 +1820 +3020 +D060 +CFA0 +ENDCHAR +STARTCHAR uni0B30 +ENCODING 2864 +BBX 8 8 4 2 +BITMAP +3C +42 +81 +81 +81 +72 +4A +31 +ENDCHAR +STARTCHAR uni0B32 +ENCODING 2866 +BBX 11 8 1 2 +BITMAP +3F80 +4040 +8020 +8020 +B620 +4940 +4940 +4920 +ENDCHAR +STARTCHAR uni0B33 +ENCODING 2867 +BBX 11 8 1 2 +BITMAP +3F80 +4040 +8020 +8020 +B640 +4900 +4900 +4900 +ENDCHAR +STARTCHAR uni0B35 +ENCODING 2869 +BBX 9 8 2 2 +BITMAP +1E00 +6100 +8080 +B880 +C480 +5400 +4600 +3A00 +ENDCHAR +STARTCHAR uni0B36 +ENCODING 2870 +BBX 9 8 3 2 +BITMAP +3C80 +4280 +6180 +9080 +8080 +7080 +4880 +3080 +ENDCHAR +STARTCHAR uni0B37 +ENCODING 2871 +BBX 9 8 3 2 +BITMAP +3C80 +6280 +9180 +9880 +6480 +4280 +4180 +3E80 +ENDCHAR +STARTCHAR uni0B38 +ENCODING 2872 +BBX 10 8 2 2 +BITMAP +3E40 +4140 +80C0 +8440 +9840 +7840 +0640 +01C0 +ENDCHAR +STARTCHAR uni0B39 +ENCODING 2873 +BBX 10 11 1 -1 +BITMAP +1F00 +6080 +8040 +8240 +A600 +4600 +4600 +3A00 +1000 +0C00 +0300 +ENDCHAR +STARTCHAR uni0B3C +ENCODING 2876 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0B3D +ENCODING 2877 +BBX 5 9 1 1 +BITMAP +18 +60 +80 +60 +18 +60 +80 +60 +18 +ENDCHAR +STARTCHAR uni0B3E +ENCODING 2878 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 9 -4 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0B3F +ENCODING 2879 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 3 -12 11 +BITMAP +7F00 +8080 +8080 +ENDCHAR +STARTCHAR uni0B40 +ENCODING 2880 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -6 1 +BITMAP +20 +60 +A0 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0B41 +ENCODING 2881 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -12 -2 +BITMAP +02 +7A +8C +7B +ENDCHAR +STARTCHAR uni0B42 +ENCODING 2882 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -11 -2 +BITMAP +60 +80 +88 +76 +ENDCHAR +STARTCHAR uni0B43 +ENCODING 2883 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -11 -2 +BITMAP +48 +94 +84 +78 +ENDCHAR +STARTCHAR uni0B44 +ENCODING 2884 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -12 -2 +BITMAP +40 +84 +6A +82 +7C +ENDCHAR +STARTCHAR uni0B47 +ENCODING 2887 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 9 -16 1 +BITMAP +60 +80 +80 +80 +E0 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni0B48 +ENCODING 2888 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 13 -16 1 +BITMAP +0100 +00F8 +0004 +0004 +6000 +8000 +8000 +8000 +E000 +9000 +9000 +9000 +6000 +ENDCHAR +STARTCHAR uni0B4B +ENCODING 2891 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 9 -16 1 +BITMAP +6008 +8008 +8008 +8008 +E008 +9008 +9008 +9008 +6008 +ENDCHAR +STARTCHAR uni0B4C +ENCODING 2892 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 12 -16 1 +BITMAP +0078 +0084 +0004 +6008 +8008 +8008 +8008 +E008 +9008 +9008 +9008 +6008 +ENDCHAR +STARTCHAR uni0B4D +ENCODING 2893 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -8 -2 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni0B55 +ENCODING 2901 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 -12 12 +BITMAP +FF +ENDCHAR +STARTCHAR uni0B56 +ENCODING 2902 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -9 10 +BITMAP +80 +7C +02 +02 +ENDCHAR +STARTCHAR uni0B57 +ENCODING 2903 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -8 1 +BITMAP +78 +84 +04 +08 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni0B5C +ENCODING 2908 +BBX 9 11 3 -1 +BITMAP +1E00 +6100 +8080 +8280 +A480 +4D00 +4400 +3800 +0000 +1800 +1800 +ENDCHAR +STARTCHAR uni0B5D +ENCODING 2909 +BBX 9 12 3 -2 +BITMAP +1E00 +6100 +8080 +8080 +A080 +4900 +5400 +3800 +1000 +0800 +6000 +6000 +ENDCHAR +STARTCHAR uni0B5F +ENCODING 2911 +BBX 13 8 1 2 +BITMAP +0F20 +10A0 +2060 +2420 +1820 +3060 +D090 +CF38 +ENDCHAR +STARTCHAR uni0B60 +ENCODING 2912 +BBX 10 9 2 1 +BITMAP +1E00 +6100 +8300 +8080 +B300 +4880 +4B00 +3080 +0040 +ENDCHAR +STARTCHAR uni0B61 +ENCODING 2913 +BBX 6 10 5 -1 +BITMAP +70 +88 +30 +40 +98 +A4 +78 +10 +08 +04 +ENDCHAR +STARTCHAR uni0B62 +ENCODING 2914 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -9 -2 +BITMAP +40 +A0 +A0 +4C +92 +7C +ENDCHAR +STARTCHAR uni0B63 +ENCODING 2915 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -9 -2 +BITMAP +40 +A0 +AC +52 +9C +68 +ENDCHAR +STARTCHAR uni0B66 +ENCODING 2918 +BBX 9 7 3 1 +BITMAP +1C00 +2200 +8080 +8080 +8080 +2200 +1C00 +ENDCHAR +STARTCHAR uni0B67 +ENCODING 2919 +BBX 8 10 4 0 +BITMAP +3C +42 +A1 +A1 +9E +40 +20 +10 +0C +02 +ENDCHAR +STARTCHAR uni0B68 +ENCODING 2920 +BBX 8 10 4 0 +BITMAP +3C +42 +85 +85 +79 +02 +04 +08 +30 +40 +ENDCHAR +STARTCHAR uni0B69 +ENCODING 2921 +BBX 10 8 2 2 +BITMAP +3B80 +4440 +8440 +A440 +9440 +6440 +0440 +0440 +ENDCHAR +STARTCHAR uni0B6A +ENCODING 2922 +BBX 8 10 5 0 +BITMAP +81 +42 +24 +18 +18 +24 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni0B6B +ENCODING 2923 +BBX 10 9 3 1 +BITMAP +0E00 +9100 +5100 +3200 +0C00 +1300 +2280 +2240 +1C00 +ENDCHAR +STARTCHAR uni0B6C +ENCODING 2924 +BBX 8 10 4 0 +BITMAP +3C +42 +31 +09 +89 +72 +04 +08 +30 +40 +ENDCHAR +STARTCHAR uni0B6D +ENCODING 2925 +BBX 8 10 4 0 +BITMAP +3C +42 +91 +A9 +A9 +72 +04 +08 +30 +40 +ENDCHAR +STARTCHAR uni0B6E +ENCODING 2926 +BBX 7 10 4 1 +BITMAP +FE +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0B6F +ENCODING 2927 +BBX 7 8 4 2 +BITMAP +72 +8A +86 +80 +80 +80 +40 +30 +ENDCHAR +STARTCHAR uni0B70 +ENCODING 2928 +BBX 11 8 1 2 +BITMAP +0020 +0040 +1880 +1900 +8200 +4400 +2800 +1000 +ENDCHAR +STARTCHAR uni0B71 +ENCODING 2929 +BBX 9 8 3 2 +BITMAP +4F00 +9080 +8700 +4080 +3F80 +4080 +4180 +3E80 +ENDCHAR +STARTCHAR uni0B72 +ENCODING 2930 +BBX 1 8 8 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0B73 +ENCODING 2931 +BBX 5 8 4 2 +BITMAP +88 +88 +88 +98 +68 +08 +08 +08 +ENDCHAR +STARTCHAR uni0B74 +ENCODING 2932 +BBX 9 8 2 2 +BITMAP +8880 +8880 +8880 +9980 +6680 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni0B75 +ENCODING 2933 +BBX 8 8 3 2 +BITMAP +01 +02 +04 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni0B76 +ENCODING 2934 +BBX 9 8 2 2 +BITMAP +0080 +7100 +AA00 +AC00 +4800 +1000 +2000 +4000 +ENDCHAR +STARTCHAR uni0B77 +ENCODING 2935 +BBX 14 8 1 2 +BITMAP +0004 +0008 +0010 +0020 +6C40 +9280 +9300 +9200 +ENDCHAR +STARTCHAR uni0B82 +ENCODING 2946 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -10 11 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni0B83 +ENCODING 2947 +BBX 12 8 2 2 +BITMAP +0600 +0900 +0900 +0600 +6060 +9090 +9090 +6060 +ENDCHAR +STARTCHAR uni0B85 +ENCODING 2949 +BBX 10 8 2 2 +BITMAP +1840 +2440 +2640 +1A40 +0240 +7FC0 +8240 +7C40 +ENDCHAR +STARTCHAR uni0B86 +ENCODING 2950 +BBX 12 11 0 -1 +BITMAP +1840 +2440 +2640 +1A40 +0240 +7FE0 +8250 +7C50 +0150 +0210 +01E0 +ENDCHAR +STARTCHAR uni0B87 +ENCODING 2951 +BBX 10 10 2 2 +BITMAP +3E00 +4100 +8C80 +9240 +9240 +4D40 +2100 +7E00 +8900 +7600 +ENDCHAR +STARTCHAR uni0B88 +ENCODING 2952 +BBX 10 8 3 2 +BITMAP +FFC0 +8400 +8400 +B580 +B580 +8400 +8400 +8400 +ENDCHAR +STARTCHAR uni0B89 +ENCODING 2953 +BBX 11 8 1 2 +BITMAP +7800 +9400 +9200 +6200 +0400 +7800 +8000 +7FE0 +ENDCHAR +STARTCHAR uni0B8A +ENCODING 2954 +BBX 13 8 0 2 +BITMAP +7000 +9800 +99F8 +6AD0 +0950 +7050 +8000 +7FF8 +ENDCHAR +STARTCHAR uni0B8E +ENCODING 2958 +BBX 12 8 2 2 +BITMAP +1FF0 +2040 +4040 +7040 +8840 +8840 +8840 +7040 +ENDCHAR +STARTCHAR uni0B8F +ENCODING 2959 +BBX 12 11 2 -1 +BITMAP +1FF0 +2040 +4040 +7040 +8840 +8840 +8840 +7040 +0080 +0100 +0200 +ENDCHAR +STARTCHAR uni0B90 +ENCODING 2960 +BBX 11 12 1 -2 +BITMAP +7DC0 +E220 +9220 +9220 +6220 +0020 +7FC0 +8000 +8000 +8420 +8420 +7BC0 +ENDCHAR +STARTCHAR uni0B92 +ENCODING 2962 +BBX 11 12 1 -2 +BITMAP +3F80 +4040 +8020 +8020 +E3A0 +94A0 +9520 +64C0 +0400 +23C0 +2080 +1F00 +ENDCHAR +STARTCHAR uni0B93 +ENCODING 2963 +BBX 11 12 1 -2 +BITMAP +3F80 +4040 +8020 +8020 +E3A0 +94A0 +9520 +64C0 +0400 +63C0 +9080 +7F00 +ENDCHAR +STARTCHAR uni0B94 +ENCODING 2964 +BBX 14 12 0 -2 +BITMAP +3C00 +4200 +8100 +817C +CDA8 +B568 +B928 +5600 +1000 +8F00 +8200 +7C00 +ENDCHAR +STARTCHAR uni0B95 +ENCODING 2965 +BBX 11 8 1 2 +BITMAP +1FC0 +1100 +1100 +1100 +7FC0 +8120 +8120 +7E40 +ENDCHAR +STARTCHAR uni0B99 +ENCODING 2969 +BBX 11 8 1 2 +BITMAP +FC20 +9020 +9E20 +9120 +9120 +8220 +8420 +9FE0 +ENDCHAR +STARTCHAR uni0B9A +ENCODING 2970 +BBX 10 8 1 2 +BITMAP +1FC0 +1100 +1100 +1100 +7FC0 +8100 +8100 +7E00 +ENDCHAR +STARTCHAR uni0B9C +ENCODING 2972 +BBX 11 12 1 -2 +BITMAP +7DC0 +E220 +9220 +9220 +6220 +0020 +7FC0 +8000 +81C0 +8220 +8420 +78C0 +ENDCHAR +STARTCHAR uni0B9E +ENCODING 2974 +BBX 12 11 0 -1 +BITMAP +27E0 +4880 +9080 +9CA0 +A2D0 +A290 +A290 +9C90 +8010 +4020 +3FC0 +ENDCHAR +STARTCHAR uni0B9F +ENCODING 2975 +BBX 10 8 3 2 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8000 +FFC0 +ENDCHAR +STARTCHAR uni0BA3 +ENCODING 2979 +BBX 16 8 0 2 +BITMAP +3BBF +4448 +8AA8 +CAA8 +AAA8 +AAA8 +4448 +0008 +ENDCHAR +STARTCHAR uni0BA4 +ENCODING 2980 +BBX 11 12 1 -2 +BITMAP +1FC0 +1100 +1100 +1100 +7FC0 +8120 +8120 +7E20 +0020 +0040 +7F80 +8000 +ENDCHAR +STARTCHAR uni0BA8 +ENCODING 2984 +BBX 11 12 1 -2 +BITMAP +1FC0 +1100 +1100 +1100 +1100 +11C0 +1120 +1120 +0020 +0040 +7F80 +8000 +ENDCHAR +STARTCHAR uni0BA9 +ENCODING 2985 +BBX 13 8 1 2 +BITMAP +3DF8 +4220 +8520 +E520 +9520 +9520 +6220 +0020 +ENDCHAR +STARTCHAR uni0BAA +ENCODING 2986 +BBX 8 8 3 2 +BITMAP +81 +81 +81 +81 +81 +81 +81 +FF +ENDCHAR +STARTCHAR uni0BAE +ENCODING 2990 +BBX 9 8 2 2 +BITMAP +8700 +8880 +8880 +8880 +8880 +8880 +8880 +FF00 +ENDCHAR +STARTCHAR uni0BAF +ENCODING 2991 +BBX 9 8 3 2 +BITMAP +9080 +9080 +9080 +9080 +9080 +9080 +B080 +DF80 +ENDCHAR +STARTCHAR uni0BB0 +ENCODING 2992 +BBX 8 12 4 -2 +BITMAP +FF +84 +84 +84 +84 +84 +84 +84 +04 +08 +10 +20 +ENDCHAR +STARTCHAR uni0BB1 +ENCODING 2993 +BBX 10 12 3 -2 +BITMAP +3B80 +4440 +4440 +4440 +4440 +4440 +4440 +4440 +0080 +0080 +7F00 +8000 +ENDCHAR +STARTCHAR uni0BB2 +ENCODING 2994 +BBX 11 8 1 2 +BITMAP +3840 +4420 +8220 +8220 +E220 +9220 +9220 +61C0 +ENDCHAR +STARTCHAR uni0BB3 +ENCODING 2995 +BBX 13 8 1 2 +BITMAP +39F8 +4620 +8220 +8220 +E220 +9220 +9220 +6220 +ENDCHAR +STARTCHAR uni0BB4 +ENCODING 2996 +BBX 9 12 2 -2 +BITMAP +8700 +8880 +8880 +8880 +8880 +8880 +8880 +FF00 +0800 +8F00 +8200 +7C00 +ENDCHAR +STARTCHAR uni0BB5 +ENCODING 2997 +BBX 11 8 1 2 +BITMAP +3820 +4620 +8120 +8120 +E120 +9120 +9220 +67E0 +ENDCHAR +STARTCHAR uni0BB6 +ENCODING 2998 +BBX 13 8 1 2 +BITMAP +8FF8 +8888 +8888 +8888 +8888 +8888 +8888 +7070 +ENDCHAR +STARTCHAR uni0BB7 +ENCODING 2999 +BBX 12 10 1 0 +BITMAP +3820 +4450 +8250 +8250 +E220 +9250 +9490 +67E0 +0100 +0200 +ENDCHAR +STARTCHAR uni0BB8 +ENCODING 3000 +BBX 12 8 1 2 +BITMAP +3B20 +4490 +8490 +8490 +E490 +9490 +9490 +6460 +ENDCHAR +STARTCHAR uni0BB9 +ENCODING 3001 +BBX 15 12 0 -2 +BITMAP +386C +4492 +8292 +8292 +E292 +9292 +9492 +6792 +0004 +0004 +3FF8 +4000 +ENDCHAR +STARTCHAR uni0BBE +ENCODING 3006 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 8 -5 2 +BITMAP +F8 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni0BBF +ENCODING 3007 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 12 -6 2 +BITMAP +70 +88 +88 +48 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni0BC0 +ENCODING 3008 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -10 9 +BITMAP +70 +88 +B0 +40 +20 +ENDCHAR +STARTCHAR uni0BC1 +ENCODING 3009 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -5 7 +BITMAP +F0 +28 +10 +ENDCHAR +STARTCHAR uni0BC2 +ENCODING 3010 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -5 5 +BITMAP +30 +48 +E8 +58 +28 +08 +10 +ENDCHAR +STARTCHAR uni0BC6 +ENCODING 3014 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 8 -16 2 +BITMAP +30 +48 +84 +84 +E4 +94 +94 +64 +ENDCHAR +STARTCHAR uni0BC7 +ENCODING 3015 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 8 -16 2 +BITMAP +30 +48 +B0 +80 +80 +B0 +48 +30 +ENDCHAR +STARTCHAR uni0BC8 +ENCODING 3016 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 8 -16 2 +BITMAP +3D80 +4240 +8740 +8540 +E540 +9540 +9240 +6000 +ENDCHAR +STARTCHAR uni0BCA +ENCODING 3018 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 8 -16 2 +BITMAP +301F +4812 +8412 +8412 +E412 +9412 +9412 +6412 +ENDCHAR +STARTCHAR uni0BCB +ENCODING 3019 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 8 -16 2 +BITMAP +301F +4812 +B012 +8012 +8012 +B012 +4812 +3012 +ENDCHAR +STARTCHAR uni0BCC +ENCODING 3020 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 8 -16 2 +BITMAP +301F +482A +844A +84CA +E4AA +94AA +94AA +644A +ENDCHAR +STARTCHAR uni0BCD +ENCODING 3021 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -10 12 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0BD0 +ENCODING 3024 +BBX 16 13 0 -2 +BITMAP +0FF0 +300C +4002 +8001 +8001 +E01D +9025 +9429 +6126 +1AA0 +279E +2004 +1FF8 +ENDCHAR +STARTCHAR uni0BD7 +ENCODING 3031 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 8 -8 2 +BITMAP +1F +2A +4A +CA +AA +AA +AA +4A +ENDCHAR +STARTCHAR uni0BE6 +ENCODING 3046 +BBX 6 8 5 2 +BITMAP +30 +48 +84 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni0BE7 +ENCODING 3047 +BBX 11 8 1 2 +BITMAP +1FC0 +1100 +1100 +1100 +7FC0 +8120 +8120 +7E40 +ENDCHAR +STARTCHAR uni0BE8 +ENCODING 3048 +BBX 11 8 1 2 +BITMAP +3800 +4400 +8200 +8200 +4400 +7800 +8000 +7FE0 +ENDCHAR +STARTCHAR uni0BE9 +ENCODING 3049 +BBX 12 8 2 2 +BITMAP +FE00 +8800 +8800 +8B00 +8C80 +8880 +8100 +8FF0 +ENDCHAR +STARTCHAR uni0BEA +ENCODING 3050 +BBX 13 8 1 2 +BITMAP +1FC8 +1108 +1108 +1108 +7FF8 +8100 +8100 +7E00 +ENDCHAR +STARTCHAR uni0BEB +ENCODING 3051 +BBX 13 11 1 -1 +BITMAP +27F0 +4440 +8440 +8440 +8440 +8470 +8448 +8448 +8008 +4010 +3FE0 +ENDCHAR +STARTCHAR uni0BEC +ENCODING 3052 +BBX 14 8 1 2 +BITMAP +1FC0 +1100 +1100 +1100 +7FFC +8148 +8148 +7E48 +ENDCHAR +STARTCHAR uni0BED +ENCODING 3053 +BBX 12 8 2 2 +BITMAP +1FF0 +2040 +4040 +7040 +8840 +8840 +8840 +7040 +ENDCHAR +STARTCHAR uni0BEE +ENCODING 3054 +BBX 11 9 1 2 +BITMAP +1C00 +2220 +2120 +10A0 +0CA0 +7FE0 +80A0 +4120 +3E20 +ENDCHAR +STARTCHAR uni0BEF +ENCODING 3055 +BBX 14 8 1 2 +BITMAP +1F80 +1200 +1200 +1238 +7FC4 +8264 +8254 +7C24 +ENDCHAR +STARTCHAR uni0BF0 +ENCODING 3056 +BBX 9 11 2 2 +BITMAP +0E00 +0100 +0080 +8880 +8880 +8880 +8880 +8880 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uni0BF1 +ENCODING 3057 +BBX 11 8 2 2 +BITMAP +6FE0 +9880 +8880 +8880 +8880 +8880 +8880 +8880 +ENDCHAR +STARTCHAR uni0BF2 +ENCODING 3058 +BBX 13 12 1 -2 +BITMAP +1FC0 +1100 +1100 +1100 +7FF8 +8120 +8120 +7EF0 +00A8 +0068 +0008 +00F0 +ENDCHAR +STARTCHAR uni0BF3 +ENCODING 3059 +BBX 11 8 1 2 +BITMAP +3800 +4600 +8100 +8100 +E100 +9100 +9200 +67E0 +ENDCHAR +STARTCHAR uni0BF4 +ENCODING 3060 +BBX 13 12 2 2 +BITMAP +01C0 +0320 +02B8 +0300 +8700 +8880 +8880 +8880 +8880 +8880 +8880 +FF00 +ENDCHAR +STARTCHAR uni0BF5 +ENCODING 3061 +BBX 16 13 0 -1 +BITMAP +3FFC +4002 +9C3A +A252 +A154 +A155 +B152 +A958 +AA54 +93D4 +8004 +4008 +3FF0 +ENDCHAR +STARTCHAR uni0BF6 +ENCODING 3062 +BBX 11 12 3 -2 +BITMAP +8120 +8120 +8120 +8120 +8120 +8120 +8120 +FF20 +0120 +3FE0 +4100 +3E00 +ENDCHAR +STARTCHAR uni0BF7 +ENCODING 3063 +BBX 14 8 1 2 +BITMAP +1F00 +2400 +4400 +64C0 +9520 +9790 +9550 +649C +ENDCHAR +STARTCHAR uni0BF8 +ENCODING 3064 +BBX 16 10 0 0 +BITMAP +3E02 +4105 +8085 +83C5 +E4A2 +9495 +94A5 +633E +0008 +0010 +ENDCHAR +STARTCHAR uni0BF9 +ENCODING 3065 +BBX 12 15 1 -1 +BITMAP +1C00 +2200 +7900 +A5E0 +9800 +8FC0 +9080 +9080 +9080 +90E0 +9090 +9090 +8010 +4020 +3FC0 +ENDCHAR +STARTCHAR uni0BFA +ENCODING 3066 +BBX 14 16 2 -2 +BITMAP +00E0 +0110 +03C8 +052C +04C0 +3E00 +4400 +4400 +4400 +4700 +4480 +4480 +0080 +0100 +7E00 +8000 +ENDCHAR +STARTCHAR uni0C00 +ENCODING 3072 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -12 9 +BITMAP +18 +99 +42 +3C +ENDCHAR +STARTCHAR uni0C01 +ENCODING 3073 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -3 2 +BITMAP +20 +40 +80 +80 +80 +40 +20 +ENDCHAR +STARTCHAR uni0C02 +ENCODING 3074 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -4 4 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0C03 +ENCODING 3075 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -3 1 +BITMAP +40 +A0 +A0 +40 +00 +40 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni0C04 +ENCODING 3076 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -10 10 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni0C05 +ENCODING 3077 +BBX 11 8 2 2 +BITMAP +3180 +4A40 +C920 +B320 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni0C06 +ENCODING 3078 +BBX 11 8 2 2 +BITMAP +3040 +48A0 +C8A0 +B3C0 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni0C07 +ENCODING 3079 +BBX 9 10 1 0 +BITMAP +7700 +8880 +8880 +0080 +3D00 +4200 +3D00 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni0C08 +ENCODING 3080 +BBX 11 8 1 2 +BITMAP +8400 +4800 +30C0 +7920 +8440 +FFC0 +8520 +78C0 +ENDCHAR +STARTCHAR uni0C09 +ENCODING 3081 +BBX 12 10 1 2 +BITMAP +0200 +0200 +1FC0 +2020 +4000 +FFF0 +8000 +80C0 +4520 +3BC0 +ENDCHAR +STARTCHAR uni0C0A +ENCODING 3082 +BBX 14 10 0 2 +BITMAP +0500 +0500 +1F88 +2044 +4008 +FFF8 +8014 +8088 +4540 +3B80 +ENDCHAR +STARTCHAR uni0C0B +ENCODING 3083 +BBX 13 8 0 2 +BITMAP +6490 +9248 +1248 +2248 +4248 +8248 +9248 +6DB0 +ENDCHAR +STARTCHAR uni0C0C +ENCODING 3084 +BBX 10 8 2 2 +BITMAP +6C00 +9200 +9200 +0440 +0840 +0840 +0880 +0700 +ENDCHAR +STARTCHAR uni0C0E +ENCODING 3086 +BBX 10 8 3 2 +BITMAP +0100 +0080 +0040 +0040 +0040 +7040 +9880 +6700 +ENDCHAR +STARTCHAR uni0C0F +ENCODING 3087 +BBX 10 9 3 2 +BITMAP +1000 +2700 +4080 +4040 +0040 +0040 +7040 +9880 +6700 +ENDCHAR +STARTCHAR uni0C10 +ENCODING 3088 +BBX 10 8 3 2 +BITMAP +7700 +8880 +8840 +0040 +0040 +7040 +9880 +6700 +ENDCHAR +STARTCHAR uni0C12 +ENCODING 3090 +BBX 9 8 3 2 +BITMAP +6000 +9000 +9000 +2000 +4000 +8000 +8880 +7700 +ENDCHAR +STARTCHAR uni0C13 +ENCODING 3091 +BBX 9 11 3 2 +BITMAP +3000 +4800 +2000 +6000 +9000 +9000 +2000 +4000 +8000 +8880 +7700 +ENDCHAR +STARTCHAR uni0C14 +ENCODING 3092 +BBX 10 11 2 2 +BITMAP +FF80 +0540 +F880 +3000 +4800 +4800 +1000 +2000 +4000 +4440 +3B80 +ENDCHAR +STARTCHAR uni0C15 +ENCODING 3093 +BBX 7 11 4 2 +BITMAP +02 +24 +18 +18 +24 +20 +18 +04 +02 +82 +7C +ENDCHAR +STARTCHAR uni0C16 +ENCODING 3094 +BBX 10 9 1 1 +BITMAP +6000 +9000 +6900 +0880 +0840 +6840 +9880 +6F00 +0800 +ENDCHAR +STARTCHAR uni0C17 +ENCODING 3095 +BBX 5 8 4 2 +BITMAP +88 +50 +20 +50 +50 +88 +88 +88 +ENDCHAR +STARTCHAR uni0C18 +ENCODING 3096 +BBX 12 8 1 1 +BITMAP +0800 +9260 +6110 +0090 +6090 +9920 +6EC0 +0800 +ENDCHAR +STARTCHAR uni0C19 +ENCODING 3097 +BBX 9 8 3 2 +BITMAP +6200 +9200 +9F80 +2000 +4000 +8000 +8880 +7700 +ENDCHAR +STARTCHAR uni0C1A +ENCODING 3098 +BBX 12 10 1 2 +BITMAP +0020 +0040 +0380 +0340 +0020 +0010 +F010 +1210 +2720 +18C0 +ENDCHAR +STARTCHAR uni0C1B +ENCODING 3099 +BBX 12 11 1 1 +BITMAP +0020 +0040 +0380 +0340 +0020 +0010 +F010 +1210 +2720 +1AC0 +0200 +ENDCHAR +STARTCHAR uni0C1C +ENCODING 3100 +BBX 9 8 3 2 +BITMAP +6200 +9900 +9600 +2000 +4000 +8000 +8880 +7700 +ENDCHAR +STARTCHAR uni0C1D +ENCODING 3101 +BBX 11 12 2 1 +BITMAP +0200 +8400 +4800 +3240 +4920 +4920 +4920 +4920 +4920 +4BA0 +3540 +0100 +ENDCHAR +STARTCHAR uni0C1E +ENCODING 3102 +BBX 10 10 2 0 +BITMAP +6C00 +9200 +9280 +03C0 +0200 +7400 +8800 +7400 +0400 +0400 +ENDCHAR +STARTCHAR uni0C1F +ENCODING 3103 +BBX 11 10 1 2 +BITMAP +2000 +2000 +3180 +4840 +B040 +8020 +8020 +8020 +4420 +3BC0 +ENDCHAR +STARTCHAR uni0C20 +ENCODING 3104 +BBX 7 8 3 2 +BITMAP +82 +44 +38 +44 +82 +92 +82 +7C +ENDCHAR +STARTCHAR uni0C21 +ENCODING 3105 +BBX 11 11 1 2 +BITMAP +0040 +1080 +0900 +1E00 +2400 +4200 +8100 +8000 +80C0 +4520 +3BC0 +ENDCHAR +STARTCHAR uni0C22 +ENCODING 3106 +BBX 11 12 1 1 +BITMAP +0040 +1080 +0900 +1E00 +2400 +4200 +8100 +8000 +80C0 +4520 +3FC0 +0400 +ENDCHAR +STARTCHAR uni0C23 +ENCODING 3107 +BBX 11 8 2 2 +BITMAP +3180 +4A40 +8420 +8020 +6020 +80E0 +8920 +70C0 +ENDCHAR +STARTCHAR uni0C24 +ENCODING 3108 +BBX 11 12 2 2 +BITMAP +0020 +0440 +0280 +0100 +3180 +4A40 +B1A0 +8020 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni0C25 +ENCODING 3109 +BBX 7 9 3 1 +BITMAP +82 +44 +38 +44 +92 +82 +92 +7C +10 +ENDCHAR +STARTCHAR uni0C26 +ENCODING 3110 +BBX 7 8 3 2 +BITMAP +82 +44 +38 +44 +82 +82 +92 +6C +ENDCHAR +STARTCHAR uni0C27 +ENCODING 3111 +BBX 7 9 3 1 +BITMAP +82 +44 +38 +44 +82 +82 +92 +7C +10 +ENDCHAR +STARTCHAR uni0C28 +ENCODING 3112 +BBX 10 12 2 2 +BITMAP +0200 +0400 +6800 +7000 +0E00 +0100 +0080 +0040 +6040 +9040 +8880 +4700 +ENDCHAR +STARTCHAR uni0C2A +ENCODING 3114 +BBX 10 12 3 2 +BITMAP +0200 +0400 +4800 +3000 +0700 +0080 +0040 +0040 +0040 +7040 +9880 +6700 +ENDCHAR +STARTCHAR uni0C2B +ENCODING 3115 +BBX 10 13 3 1 +BITMAP +0200 +0400 +4800 +3000 +0700 +0080 +0040 +0040 +0040 +7040 +9880 +6F00 +0800 +ENDCHAR +STARTCHAR uni0C2C +ENCODING 3116 +BBX 12 8 1 2 +BITMAP +6180 +9040 +1020 +2010 +4010 +4210 +2520 +18C0 +ENDCHAR +STARTCHAR uni0C2D +ENCODING 3117 +BBX 13 12 1 1 +BITMAP +0008 +0010 +01A0 +61C0 +9040 +1020 +2010 +4010 +4210 +2520 +18C0 +0200 +ENDCHAR +STARTCHAR uni0C2E +ENCODING 3118 +BBX 12 12 1 2 +BITMAP +0080 +0100 +0200 +0C00 +0E60 +0110 +0090 +0090 +0090 +7090 +9990 +6660 +ENDCHAR +STARTCHAR uni0C2F +ENCODING 3119 +BBX 12 12 1 2 +BITMAP +0080 +0100 +1A00 +0400 +0260 +0110 +6090 +9090 +9090 +9090 +9990 +6660 +ENDCHAR +STARTCHAR uni0C30 +ENCODING 3120 +BBX 7 8 3 2 +BITMAP +82 +44 +38 +44 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni0C31 +ENCODING 3121 +BBX 11 8 2 2 +BITMAP +3180 +4A40 +CA20 +BF20 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni0C32 +ENCODING 3122 +BBX 11 8 1 2 +BITMAP +3180 +4840 +C820 +B020 +8020 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni0C33 +ENCODING 3123 +BBX 11 12 2 2 +BITMAP +0020 +0040 +0680 +0700 +0100 +6080 +9040 +B040 +4080 +3F00 +2400 +1800 +ENDCHAR +STARTCHAR uni0C34 +ENCODING 3124 +BBX 11 8 1 2 +BITMAP +3180 +4A40 +CA60 +B1A0 +8020 +8420 +4440 +3B80 +ENDCHAR +STARTCHAR uni0C35 +ENCODING 3125 +BBX 10 11 3 2 +BITMAP +0080 +0100 +0200 +0F00 +0C80 +0040 +0040 +0040 +7040 +9880 +6700 +ENDCHAR +STARTCHAR uni0C36 +ENCODING 3126 +BBX 8 11 3 2 +BITMAP +02 +04 +08 +3C +32 +01 +71 +8A +9C +24 +18 +ENDCHAR +STARTCHAR uni0C37 +ENCODING 3127 +BBX 11 15 3 -1 +BITMAP +0200 +0400 +4800 +3000 +0700 +0080 +0040 +0040 +0040 +7040 +9880 +6700 +0080 +0040 +0020 +ENDCHAR +STARTCHAR uni0C38 +ENCODING 3128 +BBX 10 12 3 2 +BITMAP +0200 +0400 +2800 +1000 +0700 +0080 +0040 +0040 +0040 +7040 +9880 +8700 +ENDCHAR +STARTCHAR uni0C39 +ENCODING 3129 +BBX 12 12 1 2 +BITMAP +0800 +1000 +A000 +4000 +0FF0 +0450 +0220 +0100 +0100 +7100 +9900 +6600 +ENDCHAR +STARTCHAR uni0C3C +ENCODING 3132 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -10 -2 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni0C3D +ENCODING 3133 +BBX 8 7 5 2 +BITMAP +E0 +10 +10 +60 +80 +80 +7F +ENDCHAR +STARTCHAR uni0C3E +ENCODING 3134 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -8 7 +BITMAP +FF +05 +02 +ENDCHAR +STARTCHAR uni0C3F +ENCODING 3135 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -11 10 +BITMAP +30 +48 +38 +F0 +ENDCHAR +STARTCHAR uni0C40 +ENCODING 3136 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -12 9 +BITMAP +40 +98 +64 +1C +78 +ENDCHAR +STARTCHAR uni0C41 +ENCODING 3137 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -4 2 +BITMAP +60 +10 +10 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni0C42 +ENCODING 3138 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 8 -8 2 +BITMAP +FF +25 +12 +08 +04 +02 +12 +0C +ENDCHAR +STARTCHAR uni0C43 +ENCODING 3139 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -4 2 +BITMAP +60 +10 +10 +10 +50 +B0 +60 +ENDCHAR +STARTCHAR uni0C44 +ENCODING 3140 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 8 -5 2 +BITMAP +F8 +88 +40 +20 +10 +50 +B0 +60 +ENDCHAR +STARTCHAR uni0C46 +ENCODING 3142 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -12 10 +BITMAP +FC +02 +02 +0C +ENDCHAR +STARTCHAR uni0C47 +ENCODING 3143 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -12 9 +BITMAP +06 +08 +FC +02 +0C +ENDCHAR +STARTCHAR uni0C48 +ENCODING 3144 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 16 -12 -2 +BITMAP +FC +02 +02 +0C +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +A0 +FF +ENDCHAR +STARTCHAR uni0C4A +ENCODING 3146 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 3 -14 10 +BITMAP +DF80 +2240 +0180 +ENDCHAR +STARTCHAR uni0C4B +ENCODING 3147 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 5 -15 9 +BITMAP +0060 +0090 +6FC0 +90A0 +0040 +ENDCHAR +STARTCHAR uni0C4C +ENCODING 3148 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 3 -14 10 +BITMAP +FF80 +1240 +E180 +ENDCHAR +STARTCHAR uni0C4D +ENCODING 3149 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -13 9 +BITMAP +78 +80 +60 +80 +60 +ENDCHAR +STARTCHAR uni0C55 +ENCODING 3157 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -8 11 +BITMAP +60 +90 +48 +ENDCHAR +STARTCHAR uni0C56 +ENCODING 3158 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -12 -2 +BITMAP +40 +A0 +FF +ENDCHAR +STARTCHAR uni0C58 +ENCODING 3160 +BBX 12 12 1 2 +BITMAP +0200 +0500 +FF20 +0040 +0380 +0340 +0020 +0010 +F010 +1210 +2720 +18C0 +ENDCHAR +STARTCHAR uni0C59 +ENCODING 3161 +BBX 9 12 3 2 +BITMAP +0200 +0500 +FF00 +0000 +6200 +9900 +9600 +2000 +4000 +8000 +8880 +7700 +ENDCHAR +STARTCHAR uni0C5A +ENCODING 3162 +BBX 9 9 3 2 +BITMAP +3E00 +4100 +8080 +8080 +FF80 +8880 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uni0C5D +ENCODING 3165 +BBX 11 10 2 1 +BITMAP +7FE0 +8000 +8000 +7E00 +8000 +8000 +7E00 +8000 +8000 +7E00 +ENDCHAR +STARTCHAR uni0C60 +ENCODING 3168 +BBX 16 8 0 2 +BITMAP +493E +A495 +2492 +2490 +4490 +8490 +A490 +5B60 +ENDCHAR +STARTCHAR uni0C61 +ENCODING 3169 +BBX 14 8 2 2 +BITMAP +6CF8 +9294 +9288 +0440 +0840 +0840 +0880 +0700 +ENDCHAR +STARTCHAR uni0C62 +ENCODING 3170 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -12 -2 +BITMAP +6C00 +9280 +0280 +0100 +ENDCHAR +STARTCHAR uni0C63 +ENCODING 3171 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 4 -14 -2 +BITMAP +6CE0 +92D0 +02A0 +0100 +ENDCHAR +STARTCHAR uni0C66 +ENCODING 3174 +BBX 6 8 5 2 +BITMAP +30 +48 +84 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni0C67 +ENCODING 3175 +BBX 8 8 4 2 +BITMAP +3C +42 +81 +81 +81 +81 +42 +24 +ENDCHAR +STARTCHAR uni0C68 +ENCODING 3176 +BBX 11 7 2 2 +BITMAP +0380 +0440 +0520 +0220 +0020 +0040 +FF80 +ENDCHAR +STARTCHAR uni0C69 +ENCODING 3177 +BBX 6 8 6 2 +BITMAP +78 +84 +84 +38 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0C6A +ENCODING 3178 +BBX 8 8 4 2 +BITMAP +42 +81 +81 +42 +3C +42 +42 +3C +ENDCHAR +STARTCHAR uni0C6B +ENCODING 3179 +BBX 9 8 5 2 +BITMAP +0080 +6080 +1900 +0600 +0600 +0900 +1100 +E200 +ENDCHAR +STARTCHAR uni0C6C +ENCODING 3180 +BBX 12 8 1 2 +BITMAP +7000 +8000 +8000 +7E00 +8000 +8000 +4000 +3FF0 +ENDCHAR +STARTCHAR uni0C6D +ENCODING 3181 +BBX 8 8 5 2 +BITMAP +38 +44 +84 +08 +71 +81 +82 +7C +ENDCHAR +STARTCHAR uni0C6E +ENCODING 3182 +BBX 13 8 1 2 +BITMAP +21F8 +4100 +8080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni0C6F +ENCODING 3183 +BBX 12 8 1 2 +BITMAP +3FF0 +4000 +8000 +8000 +7E00 +8000 +8000 +7000 +ENDCHAR +STARTCHAR uni0C77 +ENCODING 3191 +BBX 11 9 2 1 +BITMAP +0780 +0840 +9320 +94A0 +50A0 +4920 +2640 +1080 +0F00 +ENDCHAR +STARTCHAR uni0C78 +ENCODING 3192 +BBX 7 10 5 0 +BITMAP +78 +84 +84 +84 +84 +78 +04 +02 +0C +30 +ENDCHAR +STARTCHAR uni0C79 +ENCODING 3193 +BBX 1 8 8 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0C7A +ENCODING 3194 +BBX 5 8 6 2 +BITMAP +88 +88 +88 +88 +78 +08 +08 +08 +ENDCHAR +STARTCHAR uni0C7B +ENCODING 3195 +BBX 7 8 4 2 +BITMAP +92 +92 +92 +92 +6E +02 +02 +02 +ENDCHAR +STARTCHAR uni0C7C +ENCODING 3196 +BBX 10 1 3 2 +BITMAP +FFC0 +ENDCHAR +STARTCHAR uni0C7D +ENCODING 3197 +BBX 8 8 5 2 +BITMAP +F8 +04 +04 +38 +40 +80 +80 +7F +ENDCHAR +STARTCHAR uni0C7E +ENCODING 3198 +BBX 8 9 5 2 +BITMAP +E0 +10 +60 +80 +60 +10 +60 +80 +7F +ENDCHAR +STARTCHAR uni0C7F +ENCODING 3199 +BBX 10 8 3 2 +BITMAP +3000 +4800 +B040 +8040 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni0C80 +ENCODING 3200 +BBX 8 3 4 5 +BITMAP +99 +42 +3C +ENDCHAR +STARTCHAR uni0C81 +ENCODING 3201 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -12 11 +BITMAP +99 +42 +3C +ENDCHAR +STARTCHAR uni0C82 +ENCODING 3202 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -4 4 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0C83 +ENCODING 3203 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -3 1 +BITMAP +40 +A0 +A0 +40 +00 +40 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni0C84 +ENCODING 3204 +BBX 13 9 1 0 +BITMAP +07E0 +0810 +1190 +9248 +9048 +4888 +4710 +2020 +1FC0 +ENDCHAR +STARTCHAR uni0C85 +ENCODING 3205 +BBX 11 8 2 2 +BITMAP +3180 +4A40 +C920 +B3A0 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni0C86 +ENCODING 3206 +BBX 11 8 2 2 +BITMAP +30C0 +4920 +C8A0 +B3C0 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni0C87 +ENCODING 3207 +BBX 9 10 1 0 +BITMAP +7700 +8880 +8880 +0080 +3D00 +4200 +3D00 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni0C88 +ENCODING 3208 +BBX 12 8 0 2 +BITMAP +0200 +0200 +FE60 +3C90 +4260 +7FE0 +4220 +3C40 +ENDCHAR +STARTCHAR uni0C89 +ENCODING 3209 +BBX 12 8 0 2 +BITMAP +4620 +A910 +A910 +C910 +8910 +8910 +4920 +30C0 +ENDCHAR +STARTCHAR uni0C8A +ENCODING 3210 +BBX 15 8 0 2 +BITMAP +461C +A922 +A922 +C922 +8926 +892A +492A +30C4 +ENDCHAR +STARTCHAR uni0C8B +ENCODING 3211 +BBX 14 10 0 2 +BITMAP +0080 +0080 +6790 +9088 +6844 +0844 +0844 +6844 +94A4 +6318 +ENDCHAR +STARTCHAR uni0C8C +ENCODING 3212 +BBX 10 8 2 2 +BITMAP +6C00 +9200 +9200 +0200 +0400 +0440 +0440 +0380 +ENDCHAR +STARTCHAR uni0C8E +ENCODING 3214 +BBX 12 8 1 2 +BITMAP +7C00 +0300 +0080 +0040 +4020 +A210 +8510 +78E0 +ENDCHAR +STARTCHAR uni0C8F +ENCODING 3215 +BBX 12 9 1 2 +BITMAP +4000 +2000 +1300 +0C80 +0040 +4020 +A210 +8510 +78E0 +ENDCHAR +STARTCHAR uni0C90 +ENCODING 3216 +BBX 12 8 1 2 +BITMAP +38C0 +4520 +8210 +0010 +4010 +A210 +8510 +78E0 +ENDCHAR +STARTCHAR uni0C92 +ENCODING 3218 +BBX 12 8 1 2 +BITMAP +6000 +9000 +9000 +2040 +4020 +8210 +8510 +78E0 +ENDCHAR +STARTCHAR uni0C93 +ENCODING 3219 +BBX 12 10 1 2 +BITMAP +3000 +4000 +6000 +9000 +9000 +2040 +4020 +8210 +8510 +78E0 +ENDCHAR +STARTCHAR uni0C94 +ENCODING 3220 +BBX 12 12 1 2 +BITMAP +FFC0 +0420 +0420 +F920 +6240 +9180 +9000 +2040 +4020 +8210 +8510 +78E0 +ENDCHAR +STARTCHAR uni0C95 +ENCODING 3221 +BBX 8 10 3 2 +BITMAP +06 +01 +FE +10 +10 +FE +44 +82 +82 +7C +ENDCHAR +STARTCHAR uni0C96 +ENCODING 3222 +BBX 12 8 2 2 +BITMAP +3880 +4440 +8220 +8210 +0410 +3C10 +4A10 +31E0 +ENDCHAR +STARTCHAR uni0C97 +ENCODING 3223 +BBX 10 11 2 2 +BITMAP +0380 +0040 +0040 +FF80 +1100 +2080 +2080 +2080 +2080 +2080 +2080 +ENDCHAR +STARTCHAR uni0C98 +ENCODING 3224 +BBX 13 11 0 1 +BITMAP +0700 +0080 +FF20 +0010 +0208 +6028 +9030 +6220 +2720 +1AC0 +0200 +ENDCHAR +STARTCHAR uni0C99 +ENCODING 3225 +BBX 12 8 1 2 +BITMAP +67E0 +9810 +9060 +2200 +4020 +8210 +8510 +78E0 +ENDCHAR +STARTCHAR uni0C9A +ENCODING 3226 +BBX 13 10 0 2 +BITMAP +0030 +0008 +60F0 +9080 +9040 +20E0 +4040 +8440 +8A40 +7180 +ENDCHAR +STARTCHAR uni0C9B +ENCODING 3227 +BBX 13 11 0 1 +BITMAP +0030 +0008 +60F0 +9080 +9040 +E040 +8040 +8440 +8E40 +7580 +0400 +ENDCHAR +STARTCHAR uni0C9C +ENCODING 3228 +BBX 10 8 1 2 +BITMAP +6300 +9080 +9F00 +2000 +4080 +8440 +8A40 +7180 +ENDCHAR +STARTCHAR uni0C9D +ENCODING 3229 +BBX 11 12 2 1 +BITMAP +3800 +0400 +F800 +7240 +8920 +8920 +8920 +8920 +8920 +8BA0 +7540 +0100 +ENDCHAR +STARTCHAR uni0C9E +ENCODING 3230 +BBX 10 10 2 0 +BITMAP +6D80 +9240 +9240 +0200 +0200 +7400 +8800 +7400 +0400 +0400 +ENDCHAR +STARTCHAR uni0C9F +ENCODING 3231 +BBX 11 8 1 2 +BITMAP +2040 +3180 +4840 +B020 +8020 +8020 +4420 +3BC0 +ENDCHAR +STARTCHAR uni0CA0 +ENCODING 3232 +BBX 7 9 3 2 +BITMAP +1C +02 +FC +38 +44 +82 +92 +82 +7C +ENDCHAR +STARTCHAR uni0CA1 +ENCODING 3233 +BBX 11 9 1 2 +BITMAP +0700 +0080 +FF80 +4240 +81C0 +8020 +8420 +4A20 +31C0 +ENDCHAR +STARTCHAR uni0CA2 +ENCODING 3234 +BBX 11 10 1 1 +BITMAP +0700 +0080 +FF80 +4240 +81C0 +8020 +8420 +4E20 +35C0 +0400 +ENDCHAR +STARTCHAR uni0CA3 +ENCODING 3235 +BBX 12 8 1 2 +BITMAP +31C0 +4A20 +8410 +8010 +4110 +8290 +82A0 +61C0 +ENDCHAR +STARTCHAR uni0CA4 +ENCODING 3236 +BBX 9 10 3 2 +BITMAP +0E00 +0100 +7E00 +0100 +0080 +8680 +8900 +4680 +2080 +1F00 +ENDCHAR +STARTCHAR uni0CA5 +ENCODING 3237 +BBX 7 10 3 1 +BITMAP +1C +02 +FC +38 +44 +92 +82 +92 +7C +10 +ENDCHAR +STARTCHAR uni0CA6 +ENCODING 3238 +BBX 7 9 3 2 +BITMAP +1C +02 +FC +38 +44 +82 +82 +92 +6C +ENDCHAR +STARTCHAR uni0CA7 +ENCODING 3239 +BBX 7 10 3 1 +BITMAP +1C +02 +FC +38 +44 +82 +82 +92 +7C +10 +ENDCHAR +STARTCHAR uni0CA8 +ENCODING 3240 +BBX 10 10 2 2 +BITMAP +0380 +0040 +1F80 +0100 +0080 +0040 +6040 +9040 +8880 +4700 +ENDCHAR +STARTCHAR uni0CAA +ENCODING 3242 +BBX 12 10 1 2 +BITMAP +01C0 +0020 +3FC0 +0000 +4040 +A220 +A010 +C210 +8510 +78E0 +ENDCHAR +STARTCHAR uni0CAB +ENCODING 3243 +BBX 12 11 1 1 +BITMAP +01C0 +0020 +3FC0 +0000 +4040 +A220 +A010 +C210 +8510 +7AE0 +0200 +ENDCHAR +STARTCHAR uni0CAC +ENCODING 3244 +BBX 12 8 1 2 +BITMAP +6180 +9040 +1020 +2010 +4010 +4210 +2520 +18C0 +ENDCHAR +STARTCHAR uni0CAD +ENCODING 3245 +BBX 12 11 1 1 +BITMAP +00E0 +0010 +63E0 +9080 +1040 +2020 +4010 +4210 +2520 +1AC0 +0200 +ENDCHAR +STARTCHAR uni0CAE +ENCODING 3246 +BBX 13 10 0 2 +BITMAP +0380 +0040 +3F80 +0000 +4090 +A048 +A048 +C448 +8A48 +71B0 +ENDCHAR +STARTCHAR uni0CAF +ENCODING 3247 +BBX 13 9 0 2 +BITMAP +00C0 +0020 +33C0 +4890 +8448 +8448 +8448 +8A48 +71B0 +ENDCHAR +STARTCHAR uni0CB0 +ENCODING 3248 +BBX 7 9 3 2 +BITMAP +1C +02 +FC +38 +44 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni0CB1 +ENCODING 3249 +BBX 11 8 2 2 +BITMAP +3180 +4A40 +CA60 +FFE0 +8020 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uni0CB2 +ENCODING 3250 +BBX 10 8 1 2 +BITMAP +0200 +6100 +9080 +E040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni0CB3 +ENCODING 3251 +BBX 11 12 1 0 +BITMAP +00C0 +0020 +03C0 +6100 +9080 +E040 +8040 +8040 +4080 +3F00 +1200 +0C00 +ENDCHAR +STARTCHAR uni0CB5 +ENCODING 3253 +BBX 12 9 1 2 +BITMAP +0060 +0010 +07E0 +4040 +A020 +A010 +C210 +8510 +78E0 +ENDCHAR +STARTCHAR uni0CB6 +ENCODING 3254 +BBX 10 10 1 2 +BITMAP +0380 +0040 +FF80 +6100 +9080 +8840 +4840 +0840 +0880 +0700 +ENDCHAR +STARTCHAR uni0CB7 +ENCODING 3255 +BBX 13 10 1 2 +BITMAP +0180 +0040 +1F80 +0000 +4040 +A220 +A010 +C250 +8530 +78E8 +ENDCHAR +STARTCHAR uni0CB8 +ENCODING 3256 +BBX 10 10 2 2 +BITMAP +0600 +0100 +3E00 +0000 +1080 +0040 +3840 +4440 +8240 +8180 +ENDCHAR +STARTCHAR uni0CB9 +ENCODING 3257 +BBX 9 10 4 2 +BITMAP +0E00 +0100 +7E00 +0800 +2A00 +5D00 +8880 +8880 +4900 +3600 +ENDCHAR +STARTCHAR uni0CBC +ENCODING 3260 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -10 -1 +BITMAP +90 +ENDCHAR +STARTCHAR uni0CBD +ENCODING 3261 +BBX 6 8 3 2 +BITMAP +1C +20 +40 +20 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uni0CBE +ENCODING 3262 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 8 -5 3 +BITMAP +E0 +10 +08 +08 +28 +48 +48 +30 +ENDCHAR +STARTCHAR uni0CBF +ENCODING 3263 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +60 +90 +70 +20 +C0 +ENDCHAR +STARTCHAR uni0CC0 +ENCODING 3264 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 13 -6 1 +BITMAP +60 +90 +70 +20 +C8 +14 +14 +18 +10 +10 +10 +10 +08 +ENDCHAR +STARTCHAR uni0CC1 +ENCODING 3265 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -4 2 +BITMAP +40 +20 +10 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni0CC2 +ENCODING 3266 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 9 -6 0 +BITMAP +18 +24 +24 +2C +2C +2C +20 +20 +C0 +ENDCHAR +STARTCHAR uni0CC3 +ENCODING 3267 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -4 -2 +BITMAP +C0 +20 +10 +10 +D0 +D0 +60 +ENDCHAR +STARTCHAR uni0CC4 +ENCODING 3268 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 11 -7 -2 +BITMAP +FC +42 +2A +2C +20 +18 +04 +02 +1A +1A +0C +ENDCHAR +STARTCHAR uni0CC6 +ENCODING 3270 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 4 -12 10 +BITMAP +0180 +0240 +0040 +FF80 +ENDCHAR +STARTCHAR uni0CC7 +ENCODING 3271 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 13 -12 1 +BITMAP +0180 +0240 +0040 +FF80 +0020 +0050 +0050 +0060 +0040 +0040 +0040 +0040 +0020 +ENDCHAR +STARTCHAR uni0CC8 +ENCODING 3272 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 16 -12 -2 +BITMAP +0180 +0240 +0040 +FF80 +0000 +0000 +0000 +0000 +0040 +0020 +0040 +0020 +0010 +00D0 +00D0 +0060 +ENDCHAR +STARTCHAR uni0CCA +ENCODING 3274 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 14 -12 0 +BITMAP +0180 +0240 +0040 +FF80 +0000 +0060 +0090 +0090 +00B0 +00B0 +00B0 +0080 +0080 +0300 +ENDCHAR +STARTCHAR uni0CCB +ENCODING 3275 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 14 -12 0 +BITMAP +0630 +0930 +0120 +FE20 +0010 +0070 +0090 +0090 +00B0 +00B0 +00B0 +0080 +0080 +0300 +ENDCHAR +STARTCHAR uni0CCC +ENCODING 3276 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 11 -8 3 +BITMAP +FC +12 +E2 +01 +01 +01 +01 +05 +09 +09 +06 +ENDCHAR +STARTCHAR uni0CCD +ENCODING 3277 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 -8 8 +BITMAP +03 +04 +FE +05 +02 +ENDCHAR +STARTCHAR uni0CD5 +ENCODING 3285 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -3 1 +BITMAP +40 +A0 +A0 +C0 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uni0CD6 +ENCODING 3286 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 8 -4 -2 +BITMAP +40 +20 +40 +20 +10 +D0 +D0 +60 +ENDCHAR +STARTCHAR uni0CDD +ENCODING 3293 +BBX 11 10 2 1 +BITMAP +7FE0 +8000 +8000 +7E00 +8000 +8000 +7E00 +8000 +8000 +7E00 +ENDCHAR +STARTCHAR uni0CDE +ENCODING 3294 +BBX 11 8 2 2 +BITMAP +3180 +4A40 +CA60 +B1A0 +8020 +8020 +4440 +3B80 +ENDCHAR +STARTCHAR uni0CE0 +ENCODING 3296 +BBX 16 10 0 2 +BITMAP +0040 +0040 +0F80 +620E +9111 +7111 +1113 +7115 +9995 +6662 +ENDCHAR +STARTCHAR uni0CE1 +ENCODING 3297 +BBX 11 8 2 2 +BITMAP +6C00 +9200 +9200 +0400 +0500 +0220 +0240 +0180 +ENDCHAR +STARTCHAR uni0CE2 +ENCODING 3298 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -12 -2 +BITMAP +6C00 +9200 +8200 +4180 +ENDCHAR +STARTCHAR uni0CE3 +ENCODING 3299 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 4 -13 -2 +BITMAP +6C00 +9260 +8280 +41E0 +ENDCHAR +STARTCHAR uni0CE6 +ENCODING 3302 +BBX 6 8 5 2 +BITMAP +30 +48 +84 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni0CE7 +ENCODING 3303 +BBX 8 8 4 2 +BITMAP +3C +42 +81 +81 +81 +81 +42 +24 +ENDCHAR +STARTCHAR uni0CE8 +ENCODING 3304 +BBX 7 8 5 2 +BITMAP +1C +22 +26 +1A +02 +02 +02 +FC +ENDCHAR +STARTCHAR uni0CE9 +ENCODING 3305 +BBX 10 8 3 2 +BITMAP +7800 +9400 +9200 +6200 +7200 +8A40 +8480 +7B00 +ENDCHAR +STARTCHAR uni0CEA +ENCODING 3306 +BBX 8 8 4 2 +BITMAP +62 +91 +E1 +42 +3C +42 +42 +3C +ENDCHAR +STARTCHAR uni0CEB +ENCODING 3307 +BBX 12 8 2 2 +BITMAP +0060 +7090 +8C90 +43E0 +1F80 +6440 +8840 +7180 +ENDCHAR +STARTCHAR uni0CEC +ENCODING 3308 +BBX 12 9 1 2 +BITMAP +2000 +1000 +7C00 +9200 +9200 +8C00 +8000 +4000 +3FF0 +ENDCHAR +STARTCHAR uni0CED +ENCODING 3309 +BBX 8 8 4 2 +BITMAP +18 +24 +14 +08 +70 +80 +80 +7F +ENDCHAR +STARTCHAR uni0CEE +ENCODING 3310 +BBX 9 8 3 2 +BITMAP +3080 +4900 +8900 +F080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni0CEF +ENCODING 3311 +BBX 12 8 3 2 +BITMAP +3FF0 +4000 +8000 +8000 +7E00 +8000 +8000 +7000 +ENDCHAR +STARTCHAR uni0CF1 +ENCODING 3313 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +1FF1 +8820 +0441 +8280 +0101 +8280 +0441 +8820 +1FF1 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0CF2 +ENCODING 3314 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0001 +9C70 +2289 +A288 +2289 +9C70 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0CF3 +ENCODING 3315 +BBX 4 4 12 9 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0D00 +ENCODING 3328 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -10 10 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0D01 +ENCODING 3329 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -12 9 +BITMAP +18 +99 +42 +3C +ENDCHAR +STARTCHAR uni0D02 +ENCODING 3330 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -4 4 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0D03 +ENCODING 3331 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -3 1 +BITMAP +40 +A0 +A0 +40 +00 +40 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni0D04 +ENCODING 3332 +BBX 9 8 3 2 +BITMAP +0800 +4900 +8880 +8880 +8880 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni0D05 +ENCODING 3333 +BBX 14 8 0 2 +BITMAP +1E30 +2148 +7C84 +A284 +BC9C +A2A4 +A2A4 +1C98 +ENDCHAR +STARTCHAR uni0D06 +ENCODING 3334 +BBX 16 10 0 0 +BITMAP +1E32 +214D +7C8D +A295 +BCA5 +A2A5 +A2A5 +1C99 +0001 +003E +ENDCHAR +STARTCHAR uni0D07 +ENCODING 3335 +BBX 11 12 1 -2 +BITMAP +3180 +4A40 +8420 +8420 +E420 +9420 +9420 +6420 +0020 +7FC0 +8000 +7FC0 +ENDCHAR +STARTCHAR uni0D08 +ENCODING 3336 +BBX 13 12 0 -2 +BITMAP +7450 +8AA8 +8AA8 +8AA8 +CA08 +AA48 +AA30 +4200 +0200 +7C00 +8000 +7C00 +ENDCHAR +STARTCHAR uni0D09 +ENCODING 3337 +BBX 7 8 3 2 +BITMAP +78 +94 +92 +62 +02 +7C +80 +FE +ENDCHAR +STARTCHAR uni0D0A +ENCODING 3338 +BBX 11 8 2 2 +BITMAP +7140 +AAA0 +AAA0 +4AA0 +0820 +7120 +80C0 +F800 +ENDCHAR +STARTCHAR uni0D0B +ENCODING 3339 +BBX 9 8 3 2 +BITMAP +6300 +9480 +E380 +8080 +4100 +3E00 +4100 +3E00 +ENDCHAR +STARTCHAR uni0D0C +ENCODING 3340 +BBX 11 8 2 2 +BITMAP +3180 +4A40 +84A0 +8520 +E520 +9520 +9520 +64C0 +ENDCHAR +STARTCHAR uni0D0E +ENCODING 3342 +BBX 13 10 0 2 +BITMAP +00F0 +0108 +7128 +8928 +8928 +5FE8 +0128 +0128 +0128 +00C0 +ENDCHAR +STARTCHAR uni0D0F +ENCODING 3343 +BBX 13 10 0 2 +BITMAP +01E0 +0210 +7288 +8A88 +8A88 +5F90 +0288 +0288 +0288 +0130 +ENDCHAR +STARTCHAR uni0D10 +ENCODING 3344 +BBX 16 10 0 2 +BITMAP +000E +0011 +7395 +AC55 +AC55 +4AFD +0815 +0015 +0015 +0008 +ENDCHAR +STARTCHAR uni0D12 +ENCODING 3346 +BBX 10 8 2 2 +BITMAP +1E00 +2100 +4080 +8040 +8040 +F080 +8840 +7180 +ENDCHAR +STARTCHAR uni0D13 +ENCODING 3347 +BBX 12 8 2 2 +BITMAP +3860 +4490 +8410 +8210 +8210 +C410 +A290 +4C60 +ENDCHAR +STARTCHAR uni0D14 +ENCODING 3348 +BBX 13 8 1 2 +BITMAP +3850 +44A8 +84A8 +82A8 +8208 +C448 +A230 +4C00 +ENDCHAR +STARTCHAR uni0D15 +ENCODING 3349 +BBX 11 8 2 2 +BITMAP +0E00 +1100 +1100 +7FC0 +9120 +9120 +9120 +6E40 +ENDCHAR +STARTCHAR uni0D16 +ENCODING 3350 +BBX 13 8 1 2 +BITMAP +3C08 +4208 +8108 +8088 +E088 +9088 +9108 +63F8 +ENDCHAR +STARTCHAR uni0D17 +ENCODING 3351 +BBX 13 6 1 2 +BITMAP +30E0 +4110 +8208 +8208 +4410 +38E0 +ENDCHAR +STARTCHAR uni0D18 +ENCODING 3352 +BBX 14 8 1 2 +BITMAP +00E4 +0114 +7114 +8914 +8914 +5FF4 +0104 +01FC +ENDCHAR +STARTCHAR uni0D19 +ENCODING 3353 +BBX 12 8 1 2 +BITMAP +31C0 +4A20 +8410 +8410 +E4E0 +9410 +9410 +64E0 +ENDCHAR +STARTCHAR uni0D1A +ENCODING 3354 +BBX 11 8 2 2 +BITMAP +0020 +0020 +0020 +1820 +2420 +0420 +0820 +FFE0 +ENDCHAR +STARTCHAR uni0D1B +ENCODING 3355 +BBX 12 8 2 2 +BITMAP +00C0 +0120 +0210 +3210 +4A30 +0A50 +1150 +FF20 +ENDCHAR +STARTCHAR uni0D1C +ENCODING 3356 +BBX 12 8 1 2 +BITMAP +7DC0 +8220 +E220 +9220 +6040 +7FE0 +8190 +7E60 +ENDCHAR +STARTCHAR uni0D1D +ENCODING 3357 +BBX 15 8 0 2 +BITMAP +3C24 +5E22 +A522 +A522 +9922 +8122 +4124 +00D8 +ENDCHAR +STARTCHAR uni0D1E +ENCODING 3358 +BBX 13 8 1 2 +BITMAP +3180 +4A70 +84A8 +8528 +E528 +9528 +9528 +64C0 +ENDCHAR +STARTCHAR uni0D1F +ENCODING 3359 +BBX 7 7 4 2 +BITMAP +7C +80 +80 +7C +02 +02 +7C +ENDCHAR +STARTCHAR uni0D20 +ENCODING 3360 +BBX 9 8 3 2 +BITMAP +3E00 +4100 +8080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni0D21 +ENCODING 3361 +BBX 12 8 2 1 +BITMAP +3120 +4910 +8910 +8910 +8910 +4910 +0920 +06C0 +ENDCHAR +STARTCHAR uni0D22 +ENCODING 3362 +BBX 11 8 2 1 +BITMAP +6240 +92A0 +92A0 +92A0 +92A0 +1260 +1240 +0D80 +ENDCHAR +STARTCHAR uni0D23 +ENCODING 3363 +BBX 12 8 1 2 +BITMAP +3360 +4C90 +8490 +8490 +8490 +E490 +9490 +64A0 +ENDCHAR +STARTCHAR uni0D24 +ENCODING 3364 +BBX 12 8 2 2 +BITMAP +33C0 +4C20 +8A10 +9110 +9090 +9090 +8910 +4620 +ENDCHAR +STARTCHAR uni0D25 +ENCODING 3365 +BBX 12 8 1 2 +BITMAP +81E0 +8210 +8210 +8210 +8210 +8210 +8210 +FFF0 +ENDCHAR +STARTCHAR uni0D26 +ENCODING 3366 +BBX 8 8 3 2 +BITMAP +3E +41 +81 +8E +81 +81 +91 +4E +ENDCHAR +STARTCHAR uni0D27 +ENCODING 3367 +BBX 11 8 2 2 +BITMAP +2480 +4440 +8420 +8420 +8420 +8420 +4440 +3B80 +ENDCHAR +STARTCHAR uni0D28 +ENCODING 3368 +BBX 11 8 2 2 +BITMAP +3B80 +4440 +8420 +8420 +8420 +8420 +4440 +2480 +ENDCHAR +STARTCHAR uni0D29 +ENCODING 3369 +BBX 11 8 2 2 +BITMAP +3380 +4C40 +8420 +E420 +9420 +9420 +9440 +6480 +ENDCHAR +STARTCHAR uni0D2A +ENCODING 3370 +BBX 12 8 1 2 +BITMAP +0010 +0010 +0010 +0010 +7010 +8810 +8810 +5FF0 +ENDCHAR +STARTCHAR uni0D2B +ENCODING 3371 +BBX 12 8 1 2 +BITMAP +00E0 +0110 +0110 +0110 +7110 +8910 +8910 +5FF0 +ENDCHAR +STARTCHAR uni0D2C +ENCODING 3372 +BBX 12 8 1 2 +BITMAP +3310 +4C90 +8490 +8490 +8490 +E490 +9490 +64F0 +ENDCHAR +STARTCHAR uni0D2D +ENCODING 3373 +BBX 8 8 3 2 +BITMAP +3E +41 +81 +8E +90 +8E +81 +5E +ENDCHAR +STARTCHAR uni0D2E +ENCODING 3374 +BBX 10 8 3 2 +BITMAP +3F00 +4880 +8440 +8440 +8840 +9040 +E040 +FFC0 +ENDCHAR +STARTCHAR uni0D2F +ENCODING 3375 +BBX 12 8 2 2 +BITMAP +4620 +A910 +9090 +9090 +9110 +8A10 +4C20 +33C0 +ENDCHAR +STARTCHAR uni0D30 +ENCODING 3376 +BBX 11 8 2 2 +BITMAP +3C00 +4300 +8280 +8440 +8420 +8420 +8240 +4180 +ENDCHAR +STARTCHAR uni0D31 +ENCODING 3377 +BBX 9 8 3 2 +BITMAP +3E00 +4100 +8080 +8080 +8080 +8080 +8080 +4100 +ENDCHAR +STARTCHAR uni0D32 +ENCODING 3378 +BBX 11 8 2 2 +BITMAP +3020 +4820 +8420 +8420 +FC20 +8020 +8020 +FFE0 +ENDCHAR +STARTCHAR uni0D33 +ENCODING 3379 +BBX 10 10 2 0 +BITMAP +3F00 +4080 +8080 +E300 +9080 +6080 +0080 +3F00 +4000 +3FC0 +ENDCHAR +STARTCHAR uni0D34 +ENCODING 3380 +BBX 9 8 3 2 +BITMAP +8700 +8880 +8880 +4900 +3E00 +0800 +8800 +7000 +ENDCHAR +STARTCHAR uni0D35 +ENCODING 3381 +BBX 12 8 1 2 +BITMAP +3C10 +4210 +8110 +8110 +8110 +8110 +8210 +47F0 +ENDCHAR +STARTCHAR uni0D36 +ENCODING 3382 +BBX 12 8 2 2 +BITMAP +21C0 +4220 +8410 +8410 +8470 +8490 +4890 +3060 +ENDCHAR +STARTCHAR uni0D37 +ENCODING 3383 +BBX 12 8 1 2 +BITMAP +0630 +0950 +0990 +0710 +7110 +8910 +8910 +5FF0 +ENDCHAR +STARTCHAR uni0D38 +ENCODING 3384 +BBX 13 8 0 2 +BITMAP +3610 +4908 +8888 +8888 +8888 +8888 +8890 +48E0 +ENDCHAR +STARTCHAR uni0D39 +ENCODING 3385 +BBX 13 8 0 2 +BITMAP +00E0 +0110 +0208 +0208 +7208 +8A08 +8910 +5F20 +ENDCHAR +STARTCHAR uni0D3A +ENCODING 3386 +BBX 10 10 3 0 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8000 +FFC0 +0800 +0800 +ENDCHAR +STARTCHAR uni0D3B +ENCODING 3387 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 5 -8 9 +BITMAP +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0D3C +ENCODING 3388 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -5 10 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0D3D +ENCODING 3389 +BBX 7 13 6 0 +BITMAP +04 +0A +0A +10 +10 +10 +10 +10 +10 +10 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni0D3E +ENCODING 3390 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 8 -4 2 +BITMAP +60 +90 +10 +10 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni0D3F +ENCODING 3391 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 11 -4 2 +BITMAP +60 +90 +90 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0D40 +ENCODING 3392 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 12 -4 2 +BITMAP +60 +90 +70 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0D41 +ENCODING 3393 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 8 -4 1 +BITMAP +60 +90 +10 +20 +40 +40 +A0 +40 +ENDCHAR +STARTCHAR uni0D42 +ENCODING 3394 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 10 -5 -1 +BITMAP +30 +48 +08 +10 +20 +20 +50 +A8 +88 +70 +ENDCHAR +STARTCHAR uni0D43 +ENCODING 3395 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -6 -2 +BITMAP +04 +08 +10 +10 +10 +08 +04 +04 +04 +7C +84 +78 +ENDCHAR +STARTCHAR uni0D44 +ENCODING 3396 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 12 -9 -2 +BITMAP +0080 +0100 +0200 +0200 +0200 +0100 +0080 +0080 +0080 +6E80 +9280 +7F00 +ENDCHAR +STARTCHAR uni0D46 +ENCODING 3398 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 9 -16 1 +BITMAP +70 +88 +88 +88 +C8 +A8 +A8 +48 +10 +ENDCHAR +STARTCHAR uni0D47 +ENCODING 3399 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 8 -16 2 +BITMAP +60 +90 +E0 +80 +80 +E0 +90 +60 +ENDCHAR +STARTCHAR uni0D48 +ENCODING 3400 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 8 -16 2 +BITMAP +D8 +B4 +B4 +B4 +90 +90 +D8 +D8 +ENDCHAR +STARTCHAR uni0D4A +ENCODING 3402 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 9 -16 1 +BITMAP +7006 +8809 +8801 +8801 +C801 +A801 +A809 +4806 +1000 +ENDCHAR +STARTCHAR uni0D4B +ENCODING 3403 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 8 -16 2 +BITMAP +6006 +9009 +E001 +8001 +8001 +E001 +9009 +6006 +ENDCHAR +STARTCHAR uni0D4C +ENCODING 3404 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 9 -16 1 +BITMAP +700A +8815 +8815 +8801 +C802 +A804 +A800 +4800 +1000 +ENDCHAR +STARTCHAR uni0D4D +ENCODING 3405 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -6 10 +BITMAP +48 +84 +84 +78 +ENDCHAR +STARTCHAR uni0D4E +ENCODING 3406 +BBX 2 2 7 9 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0D4F +ENCODING 3407 +BBX 12 10 1 0 +BITMAP +4CC0 +9320 +A110 +B910 +A510 +A510 +A510 +9910 +4020 +3FC0 +ENDCHAR +STARTCHAR uni0D54 +ENCODING 3412 +BBX 10 9 3 2 +BITMAP +8000 +B000 +4800 +A400 +9400 +8800 +9600 +E180 +FFC0 +ENDCHAR +STARTCHAR uni0D55 +ENCODING 3413 +BBX 11 9 2 3 +BITMAP +0040 +44A0 +AA80 +9280 +9280 +9280 +8A80 +4C80 +3300 +ENDCHAR +STARTCHAR uni0D56 +ENCODING 3414 +BBX 11 10 1 2 +BITMAP +3000 +4800 +09C0 +8A20 +9220 +7240 +1F80 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uni0D57 +ENCODING 3415 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 -5 4 +BITMAP +50 +A8 +A8 +08 +10 +20 +ENDCHAR +STARTCHAR uni0D58 +ENCODING 3416 +BBX 11 10 2 2 +BITMAP +0380 +0040 +2920 +4920 +8920 +8920 +8920 +8920 +4940 +3680 +ENDCHAR +STARTCHAR uni0D59 +ENCODING 3417 +BBX 12 8 1 2 +BITMAP +3800 +4460 +8290 +8290 +8FE0 +9200 +9200 +4C00 +ENDCHAR +STARTCHAR uni0D5A +ENCODING 3418 +BBX 11 8 2 2 +BITMAP +37C0 +4920 +88A0 +88A0 +88A0 +88A0 +4920 +2BE0 +ENDCHAR +STARTCHAR uni0D5B +ENCODING 3419 +BBX 12 8 1 2 +BITMAP +FE20 +8410 +8810 +8810 +8810 +8810 +8420 +83C0 +ENDCHAR +STARTCHAR uni0D5C +ENCODING 3420 +BBX 9 10 2 1 +BITMAP +0100 +4480 +AA80 +AA80 +AA80 +AA80 +AA80 +AA80 +9100 +4000 +ENDCHAR +STARTCHAR uni0D5D +ENCODING 3421 +BBX 12 9 1 2 +BITMAP +0020 +0890 +5550 +5550 +5550 +5550 +5550 +5550 +A220 +ENDCHAR +STARTCHAR uni0D5E +ENCODING 3422 +BBX 12 9 1 1 +BITMAP +3000 +4980 +8550 +8550 +9E20 +A400 +A400 +9800 +4000 +ENDCHAR +STARTCHAR uni0D5F +ENCODING 3423 +BBX 15 8 0 2 +BITMAP +0300 +0480 +0940 +4A24 +AA2A +AA2A +4924 +04C0 +ENDCHAR +STARTCHAR uni0D60 +ENCODING 3424 +BBX 12 10 1 0 +BITMAP +30C0 +4920 +B0D0 +8010 +4020 +3FC0 +4020 +4920 +4020 +3FC0 +ENDCHAR +STARTCHAR uni0D61 +ENCODING 3425 +BBX 13 11 1 -1 +BITMAP +3180 +4A70 +84A8 +8528 +E528 +9528 +9528 +64C8 +0008 +0090 +0060 +ENDCHAR +STARTCHAR uni0D62 +ENCODING 3426 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 4 -14 -2 +BITMAP +7BC0 +E4E0 +9520 +64C0 +ENDCHAR +STARTCHAR uni0D63 +ENCODING 3427 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 5 -14 -2 +BITMAP +7BC0 +E4E0 +9520 +60E0 +03C0 +ENDCHAR +STARTCHAR uni0D66 +ENCODING 3430 +BBX 6 5 5 3 +BITMAP +78 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0D67 +ENCODING 3431 +BBX 11 10 2 0 +BITMAP +03C0 +0420 +0420 +0420 +0420 +0420 +0420 +7FE0 +8000 +7C00 +ENDCHAR +STARTCHAR uni0D68 +ENCODING 3432 +BBX 12 8 1 2 +BITMAP +3C00 +4200 +8100 +8100 +8100 +8100 +8200 +47F0 +ENDCHAR +STARTCHAR uni0D69 +ENCODING 3433 +BBX 13 8 1 2 +BITMAP +3600 +4900 +8880 +8880 +8880 +8880 +8880 +48F8 +ENDCHAR +STARTCHAR uni0D6A +ENCODING 3434 +BBX 8 8 3 2 +BITMAP +30 +08 +08 +3E +49 +89 +89 +86 +ENDCHAR +STARTCHAR uni0D6B +ENCODING 3435 +BBX 10 9 3 1 +BITMAP +3F00 +4080 +8C40 +9240 +9440 +9240 +9240 +4280 +3C00 +ENDCHAR +STARTCHAR uni0D6C +ENCODING 3436 +BBX 14 11 1 -1 +BITMAP +3630 +4948 +8884 +8884 +8884 +8884 +8884 +4884 +0008 +0010 +0020 +ENDCHAR +STARTCHAR uni0D6D +ENCODING 3437 +BBX 10 11 3 -1 +BITMAP +1E00 +2100 +4080 +8040 +8040 +F040 +8840 +7040 +0080 +0100 +0E00 +ENDCHAR +STARTCHAR uni0D6E +ENCODING 3438 +BBX 12 11 1 -1 +BITMAP +3C10 +4210 +8110 +8110 +8110 +8110 +8210 +47F0 +0010 +0010 +00E0 +ENDCHAR +STARTCHAR uni0D6F +ENCODING 3439 +BBX 11 8 1 2 +BITMAP +0700 +0100 +0100 +37C0 +4920 +8920 +8920 +48C0 +ENDCHAR +STARTCHAR uni0D70 +ENCODING 3440 +BBX 12 10 2 -1 +BITMAP +0920 +0910 +0910 +0910 +0910 +0910 +0920 +0EC0 +0800 +F000 +ENDCHAR +STARTCHAR uni0D71 +ENCODING 3441 +BBX 11 9 2 1 +BITMAP +3B80 +4440 +8420 +8420 +8420 +4420 +0040 +0880 +0700 +ENDCHAR +STARTCHAR uni0D72 +ENCODING 3442 +BBX 14 8 1 2 +BITMAP +3708 +4894 +8854 +89FC +8A40 +8A40 +8940 +4880 +ENDCHAR +STARTCHAR uni0D73 +ENCODING 3443 +BBX 10 5 3 2 +BITMAP +7FC0 +8000 +E000 +9000 +6000 +ENDCHAR +STARTCHAR uni0D74 +ENCODING 3444 +BBX 10 11 2 2 +BITMAP +0700 +0080 +0040 +3F40 +4080 +8140 +8240 +E240 +9240 +9240 +6180 +ENDCHAR +STARTCHAR uni0D75 +ENCODING 3445 +BBX 11 11 2 2 +BITMAP +0380 +0040 +0020 +31A0 +4A40 +84A0 +8520 +E520 +9520 +9520 +64C0 +ENDCHAR +STARTCHAR uni0D76 +ENCODING 3446 +BBX 13 8 0 2 +BITMAP +00F0 +0148 +0228 +0228 +7228 +8A48 +8B88 +5FF8 +ENDCHAR +STARTCHAR uni0D77 +ENCODING 3447 +BBX 15 9 0 1 +BITMAP +0330 +04CA +048A +049C +64A8 +94A8 +94A8 +9E90 +4000 +ENDCHAR +STARTCHAR uni0D78 +ENCODING 3448 +BBX 16 8 0 2 +BITMAP +08BE +5549 +5545 +5545 +5545 +5545 +5549 +A25F +ENDCHAR +STARTCHAR uni0D79 +ENCODING 3449 +BBX 14 8 1 2 +BITMAP +3700 +4880 +8840 +89FC +8A40 +8A40 +8940 +4880 +ENDCHAR +STARTCHAR uni0D7A +ENCODING 3450 +BBX 13 11 1 2 +BITMAP +0060 +0090 +0008 +36E8 +4910 +8930 +8950 +C950 +A950 +A950 +4920 +ENDCHAR +STARTCHAR uni0D7B +ENCODING 3451 +BBX 11 11 2 2 +BITMAP +0380 +0040 +0020 +31A0 +4A40 +84A0 +8520 +8520 +8520 +4520 +24C0 +ENDCHAR +STARTCHAR uni0D7C +ENCODING 3452 +BBX 9 11 3 2 +BITMAP +0600 +0100 +0080 +3E80 +4100 +8280 +8480 +8480 +8480 +4480 +2300 +ENDCHAR +STARTCHAR uni0D7D +ENCODING 3453 +BBX 12 11 1 2 +BITMAP +01C0 +0020 +0010 +39D0 +4620 +8A50 +9290 +9290 +9290 +9290 +4C60 +ENDCHAR +STARTCHAR uni0D7E +ENCODING 3454 +BBX 11 11 2 2 +BITMAP +0380 +0040 +0020 +01A0 +4240 +84A0 +8520 +8520 +8520 +4920 +30C0 +ENDCHAR +STARTCHAR uni0D7F +ENCODING 3455 +BBX 13 11 1 2 +BITMAP +0700 +0880 +0040 +0E40 +1140 +1140 +7FF0 +9148 +9148 +9130 +6E00 +ENDCHAR +STARTCHAR uni0D81 +ENCODING 3457 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -12 10 +BITMAP +99 +99 +42 +3C +ENDCHAR +STARTCHAR uni0D82 +ENCODING 3458 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -4 4 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0D83 +ENCODING 3459 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 9 -4 1 +BITMAP +60 +90 +90 +60 +00 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0D85 +ENCODING 3461 +BBX 10 12 3 -2 +BITMAP +18C0 +2540 +0340 +7F80 +8100 +8100 +4100 +3F00 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni0D86 +ENCODING 3462 +BBX 15 12 0 -2 +BITMAP +18D8 +2564 +0342 +7F82 +8102 +8102 +4124 +3F18 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni0D87 +ENCODING 3463 +BBX 15 12 1 -2 +BITMAP +1880 +2540 +037C +7F84 +8108 +8108 +4108 +3F08 +0108 +0108 +0108 +0106 +ENDCHAR +STARTCHAR uni0D88 +ENCODING 3464 +BBX 15 12 1 -2 +BITMAP +1880 +2540 +037C +7F88 +8110 +813C +4104 +3F08 +0108 +0108 +0108 +0106 +ENDCHAR +STARTCHAR uni0D89 +ENCODING 3465 +BBX 9 8 3 2 +BITMAP +3E00 +4100 +8880 +9480 +8880 +7300 +0080 +0700 +ENDCHAR +STARTCHAR uni0D8A +ENCODING 3466 +BBX 9 12 3 2 +BITMAP +4000 +A800 +4900 +1280 +2100 +3800 +4400 +8200 +8200 +8200 +4400 +3800 +ENDCHAR +STARTCHAR uni0D8B +ENCODING 3467 +BBX 9 8 3 2 +BITMAP +0C00 +1200 +0100 +7F00 +8000 +8080 +8100 +7E00 +ENDCHAR +STARTCHAR uni0D8C +ENCODING 3468 +BBX 14 8 1 2 +BITMAP +0C58 +1254 +0124 +7F04 +8024 +8098 +8100 +7E00 +ENDCHAR +STARTCHAR uni0D8D +ENCODING 3469 +BBX 16 9 0 1 +BITMAP +6180 +9240 +0A26 +7BE9 +8021 +8427 +8A49 +7186 +8001 +ENDCHAR +STARTCHAR uni0D8E +ENCODING 3470 +BBX 16 8 0 2 +BITMAP +4200 +A500 +1492 +77AD +8089 +889B +952D +6212 +ENDCHAR +STARTCHAR uni0D8F +ENCODING 3471 +BBX 14 9 1 1 +BITMAP +3870 +54A8 +8484 +9CE4 +A014 +9024 +4FC8 +2010 +1FE0 +ENDCHAR +STARTCHAR uni0D90 +ENCODING 3472 +BBX 16 9 0 1 +BITMAP +71C0 +AAA0 +8A36 +BBB5 +A0A9 +A0A1 +9F29 +4046 +3F80 +ENDCHAR +STARTCHAR uni0D91 +ENCODING 3473 +BBX 9 12 2 2 +BITMAP +0E00 +1200 +0E00 +0200 +3200 +0900 +F880 +4080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni0D92 +ENCODING 3474 +BBX 12 12 2 2 +BITMAP +0EE0 +1290 +0EE0 +0280 +3280 +0980 +F880 +4080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni0D93 +ENCODING 3475 +BBX 16 12 0 2 +BITMAP +001C +0024 +001C +0004 +0064 +7012 +89F1 +8481 +B301 +B901 +8882 +707C +ENDCHAR +STARTCHAR uni0D94 +ENCODING 3476 +BBX 13 9 1 2 +BITMAP +7FC0 +8020 +0390 +C348 +A048 +9F88 +8008 +4210 +3DE0 +ENDCHAR +STARTCHAR uni0D95 +ENCODING 3477 +BBX 13 11 1 2 +BITMAP +FF80 +4040 +7FE0 +8020 +0390 +C348 +A048 +9F88 +8008 +4210 +3DE0 +ENDCHAR +STARTCHAR uni0D96 +ENCODING 3478 +BBX 16 10 0 1 +BITMAP +7F00 +8080 +0E40 +0D6C +C16A +BE52 +8042 +8892 +770C +0007 +ENDCHAR +STARTCHAR uni0D9A +ENCODING 3482 +BBX 13 8 0 2 +BITMAP +6000 +93E0 +8C10 +0FC8 +1028 +2028 +4448 +BB90 +ENDCHAR +STARTCHAR uni0D9B +ENCODING 3483 +BBX 11 9 2 1 +BITMAP +7F80 +8040 +3C20 +4220 +8120 +8120 +B240 +7380 +0400 +ENDCHAR +STARTCHAR uni0D9C +ENCODING 3484 +BBX 11 6 0 2 +BITMAP +2780 +4840 +8E20 +8220 +4440 +3880 +ENDCHAR +STARTCHAR uni0D9D +ENCODING 3485 +BBX 10 8 1 2 +BITMAP +6100 +9280 +0A80 +FB00 +2080 +4040 +4E40 +3180 +ENDCHAR +STARTCHAR uni0D9E +ENCODING 3486 +BBX 11 10 1 2 +BITMAP +7F00 +8080 +3840 +3420 +0420 +7C20 +8020 +8020 +4440 +3B80 +ENDCHAR +STARTCHAR uni0D9F +ENCODING 3487 +BBX 14 8 1 2 +BITMAP +3870 +5488 +8484 +9CE4 +A024 +9044 +4F88 +3F10 +ENDCHAR +STARTCHAR uni0DA0 +ENCODING 3488 +BBX 9 10 2 2 +BITMAP +7C00 +8200 +3100 +0880 +F880 +4080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni0DA1 +ENCODING 3489 +BBX 13 11 2 2 +BITMAP +0080 +0100 +0200 +32C0 +0B20 +F9E0 +4130 +80C8 +8008 +4010 +3FE0 +ENDCHAR +STARTCHAR uni0DA2 +ENCODING 3490 +BBX 11 11 2 2 +BITMAP +0020 +0040 +0080 +3080 +09C0 +FAA0 +42A0 +81C0 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni0DA3 +ENCODING 3491 +BBX 15 9 0 2 +BITMAP +0070 +E088 +9004 +27C2 +7822 +8642 +8182 +C992 +B66C +ENDCHAR +STARTCHAR uni0DA4 +ENCODING 3492 +BBX 14 12 0 -2 +BITMAP +39F0 +5628 +8404 +987C +A680 +C180 +C944 +B638 +0008 +0010 +0010 +000C +ENDCHAR +STARTCHAR uni0DA5 +ENCODING 3493 +BBX 15 12 0 -2 +BITMAP +3838 +5454 +8482 +99BE +A1E0 +C240 +C44C +3834 +0004 +0008 +0008 +0006 +ENDCHAR +STARTCHAR uni0DA6 +ENCODING 3494 +BBX 13 11 1 2 +BITMAP +0008 +0010 +0020 +3B20 +5470 +84A8 +98A8 +A070 +C020 +C040 +3F80 +ENDCHAR +STARTCHAR uni0DA7 +ENCODING 3495 +BBX 9 8 2 2 +BITMAP +7E00 +8100 +0080 +7080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni0DA8 +ENCODING 3496 +BBX 11 12 1 2 +BITMAP +0380 +0480 +0380 +0080 +0080 +0040 +0020 +4020 +8020 +8020 +4440 +3B80 +ENDCHAR +STARTCHAR uni0DA9 +ENCODING 3497 +BBX 11 10 2 2 +BITMAP +7F00 +8080 +3040 +0820 +F820 +4020 +8020 +8020 +4440 +3B80 +ENDCHAR +STARTCHAR uni0DAA +ENCODING 3498 +BBX 11 12 1 2 +BITMAP +0380 +0480 +0380 +0080 +3080 +0840 +F820 +4020 +8020 +8020 +4440 +3B80 +ENDCHAR +STARTCHAR uni0DAB +ENCODING 3499 +BBX 15 10 0 2 +BITMAP +00F8 +0100 +1E00 +2600 +390C +3552 +39B2 +4152 +820C +FC00 +ENDCHAR +STARTCHAR uni0DAC +ENCODING 3500 +BBX 11 10 2 2 +BITMAP +7F00 +8080 +1C40 +2A20 +4220 +4C20 +5020 +6020 +4440 +3B80 +ENDCHAR +STARTCHAR uni0DAD +ENCODING 3501 +BBX 13 8 0 2 +BITMAP +6000 +93E0 +8C10 +0FC8 +1028 +2028 +4048 +BF90 +ENDCHAR +STARTCHAR uni0DAE +ENCODING 3502 +BBX 11 12 1 2 +BITMAP +0380 +0480 +0380 +0080 +2080 +4040 +8020 +8020 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni0DAF +ENCODING 3503 +BBX 8 11 5 -2 +BITMAP +18 +24 +04 +FC +80 +86 +7A +02 +04 +04 +03 +ENDCHAR +STARTCHAR uni0DB0 +ENCODING 3504 +BBX 11 10 2 2 +BITMAP +3F00 +4080 +8040 +0020 +3020 +4020 +8020 +8020 +4440 +3B80 +ENDCHAR +STARTCHAR uni0DB1 +ENCODING 3505 +BBX 14 9 0 2 +BITMAP +00E0 +6110 +9208 +8C04 +0F04 +1084 +2084 +4124 +BE18 +ENDCHAR +STARTCHAR uni0DB3 +ENCODING 3507 +BBX 7 12 4 -2 +BITMAP +38 +54 +82 +BE +C0 +C0 +22 +1C +04 +08 +08 +06 +ENDCHAR +STARTCHAR uni0DB4 +ENCODING 3508 +BBX 11 7 3 2 +BITMAP +3080 +0940 +1B40 +60C0 +8020 +60C0 +1F00 +ENDCHAR +STARTCHAR uni0DB5 +ENCODING 3509 +BBX 11 11 3 2 +BITMAP +0700 +0900 +0700 +0100 +3100 +0880 +1840 +6040 +8020 +60C0 +1F00 +ENDCHAR +STARTCHAR uni0DB6 +ENCODING 3510 +BBX 11 8 2 2 +BITMAP +7F80 +8040 +3C20 +4220 +8120 +8120 +B240 +7180 +ENDCHAR +STARTCHAR uni0DB7 +ENCODING 3511 +BBX 13 8 1 2 +BITMAP +60E0 +9110 +0A08 +FB88 +2088 +4108 +4210 +3C20 +ENDCHAR +STARTCHAR uni0DB8 +ENCODING 3512 +BBX 11 9 2 2 +BITMAP +7F80 +8040 +0720 +68A0 +6AA0 +58A0 +4F20 +2040 +1F80 +ENDCHAR +STARTCHAR uni0DB9 +ENCODING 3513 +BBX 11 9 2 2 +BITMAP +7F80 +8040 +0720 +6CA0 +6FA0 +5FA0 +4020 +2640 +1980 +ENDCHAR +STARTCHAR uni0DBA +ENCODING 3514 +BBX 9 7 2 2 +BITMAP +0200 +0500 +0700 +4100 +8080 +8880 +7700 +ENDCHAR +STARTCHAR uni0DBB +ENCODING 3515 +BBX 7 11 3 2 +BITMAP +08 +08 +10 +20 +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni0DBD +ENCODING 3517 +BBX 11 8 2 2 +BITMAP +3E00 +4100 +9C80 +8920 +8620 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni0DC0 +ENCODING 3520 +BBX 11 8 1 2 +BITMAP +3F80 +4040 +8C20 +8220 +1E20 +2020 +1040 +0F80 +ENDCHAR +STARTCHAR uni0DC1 +ENCODING 3521 +BBX 12 6 0 2 +BITMAP +27C0 +4820 +8E10 +8250 +44A0 +3840 +ENDCHAR +STARTCHAR uni0DC2 +ENCODING 3522 +BBX 10 9 2 2 +BITMAP +3100 +0A80 +3B80 +4080 +8D40 +9240 +8C40 +4080 +3F00 +ENDCHAR +STARTCHAR uni0DC3 +ENCODING 3523 +BBX 10 8 1 2 +BITMAP +6100 +9280 +0A80 +FB00 +2080 +4040 +4440 +3B80 +ENDCHAR +STARTCHAR uni0DC4 +ENCODING 3524 +BBX 13 8 1 2 +BITMAP +60E0 +9110 +0A08 +3B88 +2088 +4108 +4210 +3C20 +ENDCHAR +STARTCHAR uni0DC5 +ENCODING 3525 +BBX 12 8 3 2 +BITMAP +3600 +4900 +4100 +FF00 +C050 +BF90 +8020 +7FC0 +ENDCHAR +STARTCHAR uni0DC6 +ENCODING 3526 +BBX 11 6 2 2 +BITMAP +3B80 +4440 +8020 +8020 +4040 +3180 +ENDCHAR +STARTCHAR uni0DCA +ENCODING 3530 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -4 7 +BITMAP +E0 +90 +E0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0DCF +ENCODING 3535 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -4 2 +BITMAP +60 +90 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni0DD0 +ENCODING 3536 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 10 -6 0 +BITMAP +F8 +08 +10 +10 +10 +10 +10 +10 +10 +0C +ENDCHAR +STARTCHAR uni0DD1 +ENCODING 3537 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 8 -4 0 +BITMAP +E0 +20 +40 +20 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni0DD2 +ENCODING 3538 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -12 10 +BITMAP +7F00 +8080 +8080 +4100 +ENDCHAR +STARTCHAR uni0DD3 +ENCODING 3539 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -12 10 +BITMAP +7F00 +8480 +8480 +4300 +ENDCHAR +STARTCHAR uni0DD4 +ENCODING 3540 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 3 -13 -2 +BITMAP +6080 +8080 +7F80 +ENDCHAR +STARTCHAR uni0DD6 +ENCODING 3542 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 3 -13 -2 +BITMAP +6080 +8680 +7980 +ENDCHAR +STARTCHAR uni0DD8 +ENCODING 3544 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -4 1 +BITMAP +60 +90 +10 +70 +90 +60 +10 +ENDCHAR +STARTCHAR uni0DD9 +ENCODING 3545 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 8 -16 2 +BITMAP +40 +A0 +90 +90 +80 +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni0DDA +ENCODING 3546 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 12 -16 2 +BITMAP +000E +0009 +000E +0008 +4008 +A008 +9008 +9000 +8000 +E000 +E000 +E000 +ENDCHAR +STARTCHAR uni0DDB +ENCODING 3547 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 8 -16 2 +BITMAP +48 +B4 +90 +90 +90 +FC +FC +FC +ENDCHAR +STARTCHAR uni0DDC +ENCODING 3548 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 8 -16 2 +BITMAP +4000 +A000 +9006 +9009 +8001 +E001 +E009 +E006 +ENDCHAR +STARTCHAR uni0DDD +ENCODING 3549 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 12 -16 2 +BITMAP +000E +0009 +000E +0008 +4008 +A008 +900E +9009 +8001 +E001 +E009 +E006 +ENDCHAR +STARTCHAR uni0DDE +ENCODING 3550 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 8 -16 2 +BITMAP +4004 +A008 +900A +900D +8001 +E001 +E009 +E006 +ENDCHAR +STARTCHAR uni0DDF +ENCODING 3551 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 8 -4 2 +BITMAP +40 +80 +A0 +D0 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni0DE6 +ENCODING 3558 +BBX 9 14 3 -2 +BITMAP +3800 +4400 +8400 +8400 +7F00 +0480 +0480 +0F00 +0400 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni0DE7 +ENCODING 3559 +BBX 11 8 1 2 +BITMAP +3F80 +4040 +8F20 +92A0 +92A0 +8CA0 +4120 +3E20 +ENDCHAR +STARTCHAR uni0DE8 +ENCODING 3560 +BBX 14 8 1 2 +BITMAP +3F18 +40A4 +9E44 +A544 +A544 +9944 +4248 +3C50 +ENDCHAR +STARTCHAR uni0DE9 +ENCODING 3561 +BBX 15 8 0 2 +BITMAP +3E2C +4152 +9C92 +AA92 +AA92 +9292 +44A2 +38AC +ENDCHAR +STARTCHAR uni0DEA +ENCODING 3562 +BBX 11 12 2 2 +BITMAP +0020 +0040 +2080 +71C0 +AAA0 +CA60 +1100 +60C0 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni0DEB +ENCODING 3563 +BBX 7 13 5 0 +BITMAP +20 +70 +A8 +C8 +10 +60 +80 +82 +4C +30 +10 +10 +0E +ENDCHAR +STARTCHAR uni0DEC +ENCODING 3564 +BBX 13 6 2 2 +BITMAP +3B80 +4440 +B1F0 +8A28 +4A48 +3180 +ENDCHAR +STARTCHAR uni0DED +ENCODING 3565 +BBX 11 10 3 0 +BITMAP +7F00 +8100 +9200 +6200 +0200 +0400 +0400 +0420 +0420 +03C0 +ENDCHAR +STARTCHAR uni0DEE +ENCODING 3566 +BBX 9 11 3 2 +BITMAP +0200 +0400 +0800 +1000 +2600 +4900 +9080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni0DEF +ENCODING 3567 +BBX 14 12 1 2 +BITMAP +0FC0 +1120 +10C0 +0800 +3F18 +40A4 +9E44 +A544 +A544 +9944 +4248 +3C50 +ENDCHAR +STARTCHAR uni0DF2 +ENCODING 3570 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -6 2 +BITMAP +48 +B4 +24 +6C +B4 +48 +ENDCHAR +STARTCHAR uni0DF3 +ENCODING 3571 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 8 -4 2 +BITMAP +40 +80 +A0 +D0 +10 +50 +B0 +60 +ENDCHAR +STARTCHAR uni0DF4 +ENCODING 3572 +BBX 15 6 0 2 +BITMAP +0AA0 +4AA4 +5554 +2548 +5014 +C006 +ENDCHAR +STARTCHAR uni0E01 +ENCODING 3585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +C4 +44 +44 +44 +44 +44 +ENDCHAR +STARTCHAR uni0E02 +ENCODING 3586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +C8 +C8 +48 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni0E03 +ENCODING 3587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +A4 +E4 +24 +44 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni0E04 +ENCODING 3588 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +B4 +F4 +C4 +84 +84 +ENDCHAR +STARTCHAR uni0E05 +ENCODING 3589 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +68 +94 +84 +B4 +F4 +C4 +84 +84 +ENDCHAR +STARTCHAR uni0E06 +ENCODING 3590 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +A4 +E4 +24 +44 +44 +44 +E4 +D8 +ENDCHAR +STARTCHAR uni0E07 +ENCODING 3591 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +18 +18 +08 +08 +88 +48 +28 +18 +ENDCHAR +STARTCHAR uni0E08 +ENCODING 3592 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +34 +34 +14 +14 +18 +ENDCHAR +STARTCHAR uni0E09 +ENCODING 3593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +70 +88 +08 +C8 +C8 +48 +5C +6C +ENDCHAR +STARTCHAR uni0E0A +ENCODING 3594 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +08 +C8 +D0 +48 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni0E0B +ENCODING 3595 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +A4 +E8 +24 +44 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni0E0C +ENCODING 3596 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +72 +8A +4A +8A +8A +8A +DE +DA +ENDCHAR +STARTCHAR uni0E0D +ENCODING 3597 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +64 +94 +54 +94 +94 +94 +DC +C4 +1C +ENDCHAR +STARTCHAR uni0E0E +ENCODING 3598 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +78 +84 +C4 +44 +44 +44 +CC +F4 +2C +ENDCHAR +STARTCHAR uni0E0F +ENCODING 3599 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +78 +84 +C4 +44 +44 +44 +D4 +DC +34 +ENDCHAR +STARTCHAR uni0E10 +ENCODING 3600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 -2 +BITMAP +78 +80 +70 +08 +68 +68 +18 +08 +A8 +58 +ENDCHAR +STARTCHAR uni0E11 +ENCODING 3601 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +A8 +F4 +24 +44 +44 +44 +44 +44 +ENDCHAR +STARTCHAR uni0E12 +ENCODING 3602 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +52 +AA +8A +EA +EA +AA +DE +9A +ENDCHAR +STARTCHAR uni0E13 +ENCODING 3603 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +64 +94 +54 +94 +94 +94 +DE +D6 +ENDCHAR +STARTCHAR uni0E14 +ENCODING 3604 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +B4 +B4 +94 +E4 +84 +ENDCHAR +STARTCHAR uni0E15 +ENCODING 3605 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +68 +94 +84 +B4 +B4 +94 +E4 +84 +ENDCHAR +STARTCHAR uni0E16 +ENCODING 3606 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +C4 +44 +44 +44 +64 +64 +ENDCHAR +STARTCHAR uni0E17 +ENCODING 3607 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +C8 +D4 +64 +44 +44 +44 +44 +44 +ENDCHAR +STARTCHAR uni0E18 +ENCODING 3608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +78 +80 +F0 +48 +48 +48 +48 +30 +ENDCHAR +STARTCHAR uni0E19 +ENCODING 3609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +C8 +C8 +48 +88 +88 +88 +9C +6C +ENDCHAR +STARTCHAR uni0E1A +ENCODING 3610 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +C8 +C8 +48 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni0E1B +ENCODING 3611 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +08 +08 +C8 +C8 +48 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni0E1C +ENCODING 3612 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +D2 +D2 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni0E1D +ENCODING 3613 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +02 +02 +D2 +D2 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni0E1E +ENCODING 3614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +D2 +D2 +52 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni0E1F +ENCODING 3615 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +02 +02 +D2 +D2 +52 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni0E20 +ENCODING 3616 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +C4 +44 +44 +44 +C4 +C4 +ENDCHAR +STARTCHAR uni0E21 +ENCODING 3617 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +C4 +C4 +44 +44 +44 +44 +E4 +D8 +ENDCHAR +STARTCHAR uni0E22 +ENCODING 3618 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +C4 +C4 +84 +64 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0E23 +ENCODING 3619 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +78 +80 +F0 +08 +08 +08 +18 +18 +ENDCHAR +STARTCHAR uni0E24 +ENCODING 3620 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +78 +84 +C4 +44 +44 +44 +64 +64 +04 +ENDCHAR +STARTCHAR uni0E25 +ENCODING 3621 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +34 +4C +44 +64 +64 +ENDCHAR +STARTCHAR uni0E26 +ENCODING 3622 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +78 +84 +C4 +44 +44 +44 +C4 +C4 +04 +ENDCHAR +STARTCHAR uni0E27 +ENCODING 3623 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +70 +88 +08 +08 +08 +08 +18 +18 +ENDCHAR +STARTCHAR uni0E28 +ENCODING 3624 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +04 +78 +84 +B4 +F4 +C4 +84 +84 +ENDCHAR +STARTCHAR uni0E29 +ENCODING 3625 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +C4 +C4 +44 +54 +5E +44 +44 +38 +ENDCHAR +STARTCHAR uni0E2A +ENCODING 3626 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +06 +78 +84 +04 +34 +4C +44 +64 +64 +ENDCHAR +STARTCHAR uni0E2B +ENCODING 3627 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +CC +CC +48 +54 +64 +44 +44 +44 +ENDCHAR +STARTCHAR uni0E2C +ENCODING 3628 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +02 +02 +D4 +D2 +52 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni0E2D +ENCODING 3629 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +C4 +C4 +84 +84 +FC +ENDCHAR +STARTCHAR uni0E2E +ENCODING 3630 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +06 +78 +F4 +04 +C4 +C4 +84 +84 +FC +ENDCHAR +STARTCHAR uni0E2F +ENCODING 3631 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +D8 +E8 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni0E30 +ENCODING 3632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 2 +BITMAP +D0 +E0 +00 +D0 +E0 +ENDCHAR +STARTCHAR uni0E31 +ENCODING 3633 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -6 9 +BITMAP +C4 +F8 +ENDCHAR +STARTCHAR uni0E32 +ENCODING 3634 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +70 +88 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni0E33 +ENCODING 3635 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +C0 +C0 +00 +38 +44 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni0E34 +ENCODING 3636 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 9 +BITMAP +78 +84 +ENDCHAR +STARTCHAR uni0E35 +ENCODING 3637 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 9 +BITMAP +74 +8C +ENDCHAR +STARTCHAR uni0E36 +ENCODING 3638 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 9 +BITMAP +7C +8C +ENDCHAR +STARTCHAR uni0E37 +ENCODING 3639 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 9 +BITMAP +74 +9C +ENDCHAR +STARTCHAR uni0E38 +ENCODING 3640 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -3 -2 +BITMAP +C0 +40 +ENDCHAR +STARTCHAR uni0E39 +ENCODING 3641 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 -5 -2 +BITMAP +D0 +70 +ENDCHAR +STARTCHAR uni0E3A +ENCODING 3642 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -4 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0E3F +ENCODING 3647 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +10 +F8 +54 +54 +54 +78 +54 +54 +54 +F8 +10 +ENDCHAR +STARTCHAR uni0E40 +ENCODING 3648 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 8 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +C0 +C0 +ENDCHAR +STARTCHAR uni0E41 +ENCODING 3649 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +90 +90 +90 +90 +90 +90 +D8 +D8 +ENDCHAR +STARTCHAR uni0E42 +ENCODING 3650 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +7C +82 +F8 +08 +08 +08 +08 +08 +08 +0C +0C +ENDCHAR +STARTCHAR uni0E43 +ENCODING 3651 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +70 +88 +A8 +68 +08 +08 +08 +08 +08 +0C +0C +ENDCHAR +STARTCHAR uni0E44 +ENCODING 3652 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +D8 +28 +08 +08 +08 +08 +08 +08 +08 +0C +0C +ENDCHAR +STARTCHAR uni0E45 +ENCODING 3653 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +70 +88 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni0E46 +ENCODING 3654 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +D8 +E4 +04 +04 +04 +04 +04 +04 +08 +10 +ENDCHAR +STARTCHAR uni0E47 +ENCODING 3655 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 9 +BITMAP +04 +78 +80 +A8 +D8 +ENDCHAR +STARTCHAR uni0E48 +ENCODING 3656 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -3 11 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni0E49 +ENCODING 3657 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -5 11 +BITMAP +C0 +48 +F0 +ENDCHAR +STARTCHAR uni0E4A +ENCODING 3658 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -7 11 +BITMAP +50 +AA +CC +ENDCHAR +STARTCHAR uni0E4B +ENCODING 3659 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -4 11 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni0E4C +ENCODING 3660 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -4 11 +BITMAP +10 +E0 +C0 +ENDCHAR +STARTCHAR uni0E4D +ENCODING 3661 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -3 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0E4E +ENCODING 3662 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -4 9 +BITMAP +30 +40 +60 +80 +C0 +ENDCHAR +STARTCHAR uni0E4F +ENCODING 3663 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +78 +84 +B4 +B4 +84 +78 +ENDCHAR +STARTCHAR uni0E50 +ENCODING 3664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0E51 +ENCODING 3665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +78 +84 +84 +B4 +74 +04 +78 +ENDCHAR +STARTCHAR uni0E52 +ENCODING 3666 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +80 +94 +AC +A4 +B4 +B4 +84 +78 +ENDCHAR +STARTCHAR uni0E53 +ENCODING 3667 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +68 +94 +94 +94 +84 +E4 +E4 +ENDCHAR +STARTCHAR uni0E54 +ENCODING 3668 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +04 +78 +80 +80 +98 +98 +90 +7C +ENDCHAR +STARTCHAR uni0E55 +ENCODING 3669 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +34 +2C +78 +80 +80 +98 +98 +90 +7C +ENDCHAR +STARTCHAR uni0E56 +ENCODING 3670 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +58 +24 +04 +04 +64 +64 +78 +ENDCHAR +STARTCHAR uni0E57 +ENCODING 3671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +04 +54 +B4 +94 +94 +94 +D4 +D8 +ENDCHAR +STARTCHAR uni0E58 +ENCODING 3672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +06 +78 +80 +80 +8C +AC +A4 +DC +ENDCHAR +STARTCHAR uni0E59 +ENCODING 3673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +04 +34 +68 +A0 +90 +90 +C8 +C8 +ENDCHAR +STARTCHAR uni0E5A +ENCODING 3674 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +DA +EA +0A +0A +0A +0A +0A +0A +ENDCHAR +STARTCHAR uni0E5B +ENCODING 3675 +BBX 14 8 1 0 +BITMAP +3000 +4800 +8000 +8000 +8004 +8544 +4AA4 +3018 +ENDCHAR +STARTCHAR uni0E81 +ENCODING 3713 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +B8 +44 +44 +44 +44 +44 +44 +C4 +ENDCHAR +STARTCHAR uni0E82 +ENCODING 3714 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +08 +30 +40 +98 +A4 +44 +ENDCHAR +STARTCHAR uni0E84 +ENCODING 3716 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +64 +84 +84 +84 +64 +ENDCHAR +STARTCHAR uni0E86 +ENCODING 3718 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +52 +AA +8A +12 +22 +4A +4A +34 +ENDCHAR +STARTCHAR uni0E87 +ENCODING 3719 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 -2 +BITMAP +60 +B0 +50 +10 +10 +10 +10 +10 +10 +E0 +ENDCHAR +STARTCHAR uni0E88 +ENCODING 3720 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +34 +4C +04 +04 +04 +ENDCHAR +STARTCHAR uni0E89 +ENCODING 3721 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +C4 +44 +44 +44 +B8 +ENDCHAR +STARTCHAR uni0E8A +ENCODING 3722 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +C8 +10 +20 +40 +98 +E4 +04 +04 +ENDCHAR +STARTCHAR uni0E8C +ENCODING 3724 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +68 +94 +C4 +08 +30 +40 +98 +E4 +04 +04 +ENDCHAR +STARTCHAR uni0E8D +ENCODING 3725 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +64 +84 +84 +64 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0E8E +ENCODING 3726 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +62 +92 +92 +52 +92 +92 +92 +5C +ENDCHAR +STARTCHAR uni0E8F +ENCODING 3727 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +64 +84 +84 +64 +84 +84 +B4 +48 +ENDCHAR +STARTCHAR uni0E90 +ENCODING 3728 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +84 +84 +44 +A4 +44 +04 +04 +ENDCHAR +STARTCHAR uni0E91 +ENCODING 3729 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +A4 +EA +AA +2A +4A +4A +4A +32 +ENDCHAR +STARTCHAR uni0E92 +ENCODING 3730 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +52 +AA +AA +8A +8A +8A +8A +54 +ENDCHAR +STARTCHAR uni0E93 +ENCODING 3731 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +68 +94 +94 +94 +94 +94 +94 +54 +ENDCHAR +STARTCHAR uni0E94 +ENCODING 3732 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +A4 +44 +ENDCHAR +STARTCHAR uni0E95 +ENCODING 3733 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +48 +B4 +84 +84 +84 +84 +84 +44 +ENDCHAR +STARTCHAR uni0E96 +ENCODING 3734 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +44 +44 +44 +44 +44 +44 +64 +04 +04 +ENDCHAR +STARTCHAR uni0E97 +ENCODING 3735 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +8C +52 +52 +52 +52 +52 +52 +22 +ENDCHAR +STARTCHAR uni0E98 +ENCODING 3736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +7C +80 +F8 +04 +C4 +84 +B4 +48 +ENDCHAR +STARTCHAR uni0E99 +ENCODING 3737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +44 +A4 +44 +44 +44 +44 +44 +B8 +ENDCHAR +STARTCHAR uni0E9A +ENCODING 3738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +44 +A4 +44 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0E9B +ENCODING 3739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +04 +04 +04 +04 +44 +A4 +44 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0E9C +ENCODING 3740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +01 +66 +86 +82 +82 +82 +92 +92 +6C +ENDCHAR +STARTCHAR uni0E9D +ENCODING 3741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +02 +02 +02 +02 +62 +82 +82 +82 +82 +92 +92 +6C +ENDCHAR +STARTCHAR uni0E9E +ENCODING 3742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +42 +A2 +42 +82 +82 +92 +92 +6C +ENDCHAR +STARTCHAR uni0E9F +ENCODING 3743 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +02 +02 +02 +02 +42 +A2 +42 +82 +82 +92 +92 +6C +ENDCHAR +STARTCHAR uni0EA0 +ENCODING 3744 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +6C +92 +52 +12 +12 +12 +12 +32 +ENDCHAR +STARTCHAR uni0EA1 +ENCODING 3745 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +44 +44 +44 +44 +44 +44 +44 +B8 +ENDCHAR +STARTCHAR uni0EA2 +ENCODING 3746 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +04 +04 +04 +04 +64 +84 +84 +44 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0EA3 +ENCODING 3747 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +78 +04 +C4 +84 +78 +ENDCHAR +STARTCHAR uni0EA5 +ENCODING 3749 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +04 +04 +64 +94 +48 +ENDCHAR +STARTCHAR uni0EA7 +ENCODING 3751 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0EA8 +ENCODING 3752 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +70 +AA +BC +88 +68 +88 +88 +68 +ENDCHAR +STARTCHAR uni0EA9 +ENCODING 3753 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +48 +A8 +48 +88 +AA +BC +88 +70 +ENDCHAR +STARTCHAR uni0EAA +ENCODING 3754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +74 +88 +8C +F4 +04 +64 +94 +88 +ENDCHAR +STARTCHAR uni0EAB +ENCODING 3755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +96 +49 +49 +49 +49 +49 +49 +31 +ENDCHAR +STARTCHAR uni0EAC +ENCODING 3756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +64 +98 +80 +78 +84 +84 +A4 +68 +ENDCHAR +STARTCHAR uni0EAD +ENCODING 3757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +8C +74 +04 +88 +70 +ENDCHAR +STARTCHAR uni0EAE +ENCODING 3758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +64 +98 +80 +78 +04 +C4 +84 +78 +ENDCHAR +STARTCHAR uni0EAF +ENCODING 3759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 -2 +BITMAP +88 +98 +68 +08 +10 +10 +20 +20 +40 +40 +ENDCHAR +STARTCHAR uni0EB0 +ENCODING 3760 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +44 +A4 +78 +00 +44 +A4 +78 +ENDCHAR +STARTCHAR uni0EB1 +ENCODING 3761 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 9 +BITMAP +C4 +F8 +ENDCHAR +STARTCHAR uni0EB2 +ENCODING 3762 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +60 +90 +50 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0EB3 +ENCODING 3763 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +40 +A0 +40 +00 +0C +12 +0A +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni0EB4 +ENCODING 3764 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -7 9 +BITMAP +70 +88 +ENDCHAR +STARTCHAR uni0EB5 +ENCODING 3765 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 9 +BITMAP +78 +8C +ENDCHAR +STARTCHAR uni0EB6 +ENCODING 3766 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -7 9 +BITMAP +70 +A8 +ENDCHAR +STARTCHAR uni0EB7 +ENCODING 3767 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 9 +BITMAP +78 +AC +ENDCHAR +STARTCHAR uni0EB8 +ENCODING 3768 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -5 -2 +BITMAP +C0 +40 +ENDCHAR +STARTCHAR uni0EB9 +ENCODING 3769 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 -5 -2 +BITMAP +D0 +60 +ENDCHAR +STARTCHAR uni0EBA +ENCODING 3770 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -5 -2 +BITMAP +80 +ENDCHAR +STARTCHAR uni0EBB +ENCODING 3771 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 9 +BITMAP +F8 +C4 +ENDCHAR +STARTCHAR uni0EBC +ENCODING 3772 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 -2 +BITMAP +64 +98 +ENDCHAR +STARTCHAR uni0EBD +ENCODING 3773 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +74 +48 +30 +08 +08 +08 +08 +C8 +88 +70 +ENDCHAR +STARTCHAR uni0EC0 +ENCODING 3776 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 3 0 +BITMAP +60 +80 +80 +80 +80 +80 +C0 +C0 +ENDCHAR +STARTCHAR uni0EC1 +ENCODING 3777 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +66 +88 +88 +88 +88 +88 +CC +CC +ENDCHAR +STARTCHAR uni0EC2 +ENCODING 3778 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +60 +98 +44 +30 +08 +08 +08 +08 +08 +08 +0C +0C +ENDCHAR +STARTCHAR uni0EC3 +ENCODING 3779 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +70 +88 +A8 +68 +08 +08 +08 +08 +08 +08 +0C +0C +ENDCHAR +STARTCHAR uni0EC4 +ENCODING 3780 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +80 +4C +34 +04 +04 +04 +04 +04 +04 +04 +06 +06 +ENDCHAR +STARTCHAR uni0EC6 +ENCODING 3782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +D8 +A4 +A4 +44 +04 +04 +04 +04 +08 +10 +ENDCHAR +STARTCHAR uni0EC8 +ENCODING 3784 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -5 11 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni0EC9 +ENCODING 3785 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -6 11 +BITMAP +C8 +50 +E0 +ENDCHAR +STARTCHAR uni0ECA +ENCODING 3786 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -7 12 +BITMAP +52 +AC +ENDCHAR +STARTCHAR uni0ECB +ENCODING 3787 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -5 11 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni0ECC +ENCODING 3788 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -5 11 +BITMAP +10 +E0 +C0 +ENDCHAR +STARTCHAR uni0ECD +ENCODING 3789 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -5 9 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni0ECE +ENCODING 3790 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -5 11 +BITMAP +50 +A8 +ENDCHAR +STARTCHAR uni0ED0 +ENCODING 3792 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0ED1 +ENCODING 3793 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +B4 +74 +04 +08 +70 +ENDCHAR +STARTCHAR uni0ED2 +ENCODING 3794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +08 +08 +08 +10 +20 +40 +80 +80 +80 +8C +84 +78 +ENDCHAR +STARTCHAR uni0ED3 +ENCODING 3795 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +50 +28 +14 +88 +44 +44 +44 +44 +44 +44 +B8 +ENDCHAR +STARTCHAR uni0ED4 +ENCODING 3796 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +04 +04 +08 +10 +20 +40 +80 +80 +98 +98 +90 +7C +ENDCHAR +STARTCHAR uni0ED5 +ENCODING 3797 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +04 +14 +28 +10 +20 +40 +80 +80 +98 +98 +90 +7C +ENDCHAR +STARTCHAR uni0ED6 +ENCODING 3798 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +50 +28 +14 +48 +84 +84 +84 +A4 +A4 +A4 +58 +ENDCHAR +STARTCHAR uni0ED7 +ENCODING 3799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +44 +44 +44 +44 +44 +44 +C4 +04 +04 +ENDCHAR +STARTCHAR uni0ED8 +ENCODING 3800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +58 +A4 +A4 +84 +84 +4C +14 +28 +58 +60 +ENDCHAR +STARTCHAR uni0ED9 +ENCODING 3801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +64 +94 +94 +94 +94 +94 +94 +48 +ENDCHAR +STARTCHAR uni0EDC +ENCODING 3804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +99 +55 +55 +55 +55 +55 +55 +26 +ENDCHAR +STARTCHAR uni0EDD +ENCODING 3805 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +99 +55 +55 +55 +55 +55 +5D +2E +ENDCHAR +STARTCHAR uni0EDE +ENCODING 3806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +B8 +44 +44 +44 +55 +5E +44 +C4 +ENDCHAR +STARTCHAR uni0EDF +ENCODING 3807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +64 +84 +84 +64 +95 +9E +84 +78 +ENDCHAR +STARTCHAR uni0F00 +ENCODING 3840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 4 +BITMAP +30 +CE +38 +BA +92 +AA +A6 +96 +72 +02 +ENDCHAR +STARTCHAR uni0F01 +ENCODING 3841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +B8 +90 +A8 +A4 +94 +72 +02 +ENDCHAR +STARTCHAR uni0F02 +ENCODING 3842 +BBX 13 16 0 -2 +BITMAP +1000 +1000 +1800 +4430 +BA48 +7C48 +7830 +8400 +8830 +9C48 +2248 +0230 +0600 +6100 +1200 +0C00 +ENDCHAR +STARTCHAR uni0F03 +ENCODING 3843 +BBX 13 16 0 -2 +BITMAP +1000 +1000 +1800 +4430 +BA48 +7C48 +7830 +8400 +8878 +9C00 +2230 +0248 +0648 +6130 +1200 +0C00 +ENDCHAR +STARTCHAR uni0F04 +ENCODING 3844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 4 +BITMAP +06 +C1 +31 +4E +31 +0E +ENDCHAR +STARTCHAR uni0F05 +ENCODING 3845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 4 +BITMAP +18 +04 +C4 +38 +C4 +38 +ENDCHAR +STARTCHAR uni0F06 +ENCODING 3846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +06 +C1 +31 +4E +31 +0E +00 +0C +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni0F07 +ENCODING 3847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 6 +BITMAP +08 +15 +C4 +39 +ENDCHAR +STARTCHAR uni0F08 +ENCODING 3848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +98 +00 +D8 +20 +70 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0F09 +ENCODING 3849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 2 2 +BITMAP +78 +84 +04 +08 +38 +44 +38 +44 +04 +ENDCHAR +STARTCHAR uni0F0A +ENCODING 3850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +1E +60 +9C +A2 +82 +84 +9C +A2 +9C +A2 +80 +62 +1E +ENDCHAR +STARTCHAR uni0F0B +ENCODING 3851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 9 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0F0C +ENCODING 3852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 9 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0F0D +ENCODING 3853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 11 3 0 +BITMAP +C0 +C0 +40 +40 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni0F0E +ENCODING 3854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +48 +48 +48 +48 +48 +48 +48 +48 +48 +ENDCHAR +STARTCHAR uni0F0F +ENCODING 3855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 11 3 0 +BITMAP +C0 +C0 +00 +C0 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni0F10 +ENCODING 3856 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 11 3 0 +BITMAP +C0 +00 +C0 +00 +C0 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni0F11 +ENCODING 3857 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +CC +00 +30 +00 +30 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0F12 +ENCODING 3858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +10 +28 +92 +7C +00 +EE +00 +34 +58 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0F13 +ENCODING 3859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 2 +BITMAP +18 +00 +18 +A5 +A5 +18 +00 +18 +ENDCHAR +STARTCHAR uni0F14 +ENCODING 3860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +60 +90 +90 +60 +00 +F0 +00 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0F15 +ENCODING 3861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 15 0 -2 +BITMAP +FF +E7 +81 +A5 +81 +FF +B1 +8D +E3 +13 +09 +05 +03 +03 +01 +ENDCHAR +STARTCHAR uni0F16 +ENCODING 3862 +BBX 14 16 1 -2 +BITMAP +0004 +FF04 +FF04 +C004 +FFFC +FFFC +0304 +FF04 +FF04 +0004 +FFFC +0104 +FFFC +8004 +FFFC +0004 +ENDCHAR +STARTCHAR uni0F17 +ENCODING 3863 +BBX 15 15 1 -1 +BITMAP +0022 +0112 +0892 +4494 +24A4 +2528 +27F8 +AE28 +B028 +B048 +AF88 +A010 +6FE0 +3000 +2000 +ENDCHAR +STARTCHAR uni0F18 +ENCODING 3864 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 12 -12 -2 +BITMAP +0020 +0010 +0190 +0250 +0260 +0180 +1900 +2600 +2400 +1800 +9000 +6000 +ENDCHAR +STARTCHAR uni0F19 +ENCODING 3865 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 6 -13 -1 +BITMAP +C0 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni0F1A +ENCODING 3866 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 4 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0F1B +ENCODING 3867 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 4 +BITMAP +44 +AA +AA +44 +ENDCHAR +STARTCHAR uni0F1C +ENCODING 3868 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 2 +BITMAP +10 +28 +28 +10 +44 +AA +AA +44 +ENDCHAR +STARTCHAR uni0F1D +ENCODING 3869 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 3 4 +BITMAP +A0 +40 +A0 +ENDCHAR +STARTCHAR uni0F1E +ENCODING 3870 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 4 +BITMAP +AA +44 +AA +ENDCHAR +STARTCHAR uni0F1F +ENCODING 3871 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 4 +BITMAP +4A +A4 +4A +ENDCHAR +STARTCHAR uni0F20 +ENCODING 3872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 2 5 +BITMAP +38 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni0F21 +ENCODING 3873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 3 4 +BITMAP +30 +58 +88 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni0F22 +ENCODING 3874 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 2 4 +BITMAP +78 +84 +04 +08 +38 +44 +04 +ENDCHAR +STARTCHAR uni0F23 +ENCODING 3875 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 2 3 +BITMAP +78 +84 +08 +38 +04 +08 +78 +84 +ENDCHAR +STARTCHAR uni0F24 +ENCODING 3876 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 5 +BITMAP +24 +58 +80 +82 +FC +ENDCHAR +STARTCHAR uni0F25 +ENCODING 3877 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +44 +88 +88 +78 +08 +04 +02 +ENDCHAR +STARTCHAR uni0F26 +ENCODING 3878 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +80 +88 +50 +4E +22 +22 +1C +ENDCHAR +STARTCHAR uni0F27 +ENCODING 3879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 5 +BITMAP +02 +02 +62 +94 +24 +78 +ENDCHAR +STARTCHAR uni0F28 +ENCODING 3880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +10 +20 +40 +E0 +10 +08 +04 +02 +02 +ENDCHAR +STARTCHAR uni0F29 +ENCODING 3881 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +38 +44 +48 +92 +9C +80 +80 +ENDCHAR +STARTCHAR uni0F2A +ENCODING 3882 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +18 +2C +44 +1E +E8 +10 +20 +ENDCHAR +STARTCHAR uni0F2B +ENCODING 3883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +78 +84 +1E +E8 +38 +44 +04 +ENDCHAR +STARTCHAR uni0F2C +ENCODING 3884 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +78 +84 +08 +3E +E4 +08 +78 +84 +ENDCHAR +STARTCHAR uni0F2D +ENCODING 3885 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 3 +BITMAP +24 +58 +8C +92 +FC +40 +80 +ENDCHAR +STARTCHAR uni0F2E +ENCODING 3886 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +44 +9C +AA +78 +88 +04 +02 +ENDCHAR +STARTCHAR uni0F2F +ENCODING 3887 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +80 +8A +54 +4E +32 +22 +5C +80 +ENDCHAR +STARTCHAR uni0F30 +ENCODING 3888 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 5 +BITMAP +02 +02 +62 +9E +E4 +78 +ENDCHAR +STARTCHAR uni0F31 +ENCODING 3889 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +10 +20 +40 +E4 +1A +68 +84 +02 +02 +ENDCHAR +STARTCHAR uni0F32 +ENCODING 3890 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 4 +BITMAP +06 +3A +54 +68 +D2 +9C +80 +80 +ENDCHAR +STARTCHAR uni0F33 +ENCODING 3891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +3A +44 +8C +94 +A8 +70 +80 +ENDCHAR +STARTCHAR uni0F34 +ENCODING 3892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 3 1 +BITMAP +C0 +C0 +00 +80 +E0 +20 +80 +E0 +20 +ENDCHAR +STARTCHAR uni0F35 +ENCODING 3893 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -15 -2 +BITMAP +20 +AA +54 +38 +ENDCHAR +STARTCHAR uni0F36 +ENCODING 3894 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +30 +30 +00 +CC +CC +00 +30 +30 +ENDCHAR +STARTCHAR uni0F37 +ENCODING 3895 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -14 -2 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0F38 +ENCODING 3896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 10 +BITMAP +66 +94 +A4 +B8 +ENDCHAR +STARTCHAR uni0F39 +ENCODING 3897 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -11 11 +BITMAP +E0 +80 +40 +ENDCHAR +STARTCHAR uni0F3A +ENCODING 3898 +BBX 13 7 0 4 +BITMAP +0080 +0940 +1490 +C428 +3890 +0140 +0080 +ENDCHAR +STARTCHAR uni0F3B +ENCODING 3899 +BBX 13 7 2 4 +BITMAP +0800 +1480 +4940 +A118 +48E0 +1400 +0800 +ENDCHAR +STARTCHAR uni0F3C +ENCODING 3900 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +04 +04 +08 +10 +10 +30 +40 +40 +40 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni0F3D +ENCODING 3901 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 2 -1 +BITMAP +80 +80 +40 +20 +20 +30 +08 +08 +08 +08 +08 +08 +04 +ENDCHAR +STARTCHAR uni0F3E +ENCODING 3902 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 8 -12 -2 +BITMAP +C0 +20 +20 +20 +20 +20 +20 +10 +ENDCHAR +STARTCHAR uni0F3F +ENCODING 3903 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 8 -16 -2 +BITMAP +30 +40 +40 +40 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni0F40 +ENCODING 3904 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +7E +2A +CA +0A +02 +02 +02 +ENDCHAR +STARTCHAR uni0F41 +ENCODING 3905 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 5 +BITMAP +7E +92 +9A +96 +82 +82 +ENDCHAR +STARTCHAR uni0F42 +ENCODING 3906 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +7E +92 +D2 +B2 +12 +02 +02 +ENDCHAR +STARTCHAR uni0F43 +ENCODING 3907 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +7E +92 +D2 +B2 +12 +3E +40 +9C +62 +22 +02 +ENDCHAR +STARTCHAR uni0F44 +ENCODING 3908 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +3C +40 +80 +F0 +88 +04 +02 +ENDCHAR +STARTCHAR uni0F45 +ENCODING 3909 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +7C +10 +10 +9C +62 +22 +1C +ENDCHAR +STARTCHAR uni0F46 +ENCODING 3910 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +7C +10 +10 +7C +92 +92 +6C +ENDCHAR +STARTCHAR uni0F47 +ENCODING 3911 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +3C +40 +78 +80 +F8 +84 +02 +ENDCHAR +STARTCHAR uni0F49 +ENCODING 3913 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +70 +88 +9C +22 +22 +02 +02 +04 +ENDCHAR +STARTCHAR uni0F4A +ENCODING 3914 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +FE +02 +7A +86 +82 +80 +80 +ENDCHAR +STARTCHAR uni0F4B +ENCODING 3915 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 2 3 +BITMAP +FC +84 +E8 +B0 +88 +BC +C0 +80 +ENDCHAR +STARTCHAR uni0F4C +ENCODING 3916 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +78 +04 +02 +3E +42 +80 +80 +80 +ENDCHAR +STARTCHAR uni0F4D +ENCODING 3917 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +78 +04 +02 +3E +40 +BC +C0 +9C +62 +22 +02 +ENDCHAR +STARTCHAR uni0F4E +ENCODING 3918 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 2 3 +BITMAP +FC +20 +70 +48 +C8 +B0 +80 +80 +ENDCHAR +STARTCHAR uni0F4F +ENCODING 3919 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +FE +80 +BC +C2 +82 +02 +02 +ENDCHAR +STARTCHAR uni0F50 +ENCODING 3920 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 2 3 +BITMAP +FC +84 +5C +34 +44 +F4 +0C +04 +ENDCHAR +STARTCHAR uni0F51 +ENCODING 3921 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +3C +40 +80 +F8 +84 +02 +02 +02 +ENDCHAR +STARTCHAR uni0F52 +ENCODING 3922 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +3C +40 +80 +F8 +84 +3E +40 +9C +62 +22 +02 +ENDCHAR +STARTCHAR uni0F53 +ENCODING 3923 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 2 3 +BITMAP +FC +10 +38 +48 +4C +34 +04 +04 +ENDCHAR +STARTCHAR uni0F54 +ENCODING 3924 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +66 +42 +82 +FA +86 +02 +02 +ENDCHAR +STARTCHAR uni0F55 +ENCODING 3925 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +66 +46 +8A +FA +86 +02 +02 +ENDCHAR +STARTCHAR uni0F56 +ENCODING 3926 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +3E +42 +82 +FA +86 +02 +02 +ENDCHAR +STARTCHAR uni0F57 +ENCODING 3927 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +3E +42 +82 +FA +86 +3E +40 +9C +62 +22 +02 +ENDCHAR +STARTCHAR uni0F58 +ENCODING 3928 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +FA +12 +62 +9A +96 +62 +02 +ENDCHAR +STARTCHAR uni0F59 +ENCODING 3929 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 4 +BITMAP +02 +02 +7C +10 +10 +9C +62 +22 +1C +ENDCHAR +STARTCHAR uni0F5A +ENCODING 3930 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 4 +BITMAP +02 +02 +7C +10 +10 +7C +92 +92 +6C +ENDCHAR +STARTCHAR uni0F5B +ENCODING 3931 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 4 +BITMAP +02 +02 +3C +40 +70 +80 +F8 +84 +02 +ENDCHAR +STARTCHAR uni0F5C +ENCODING 3932 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +02 +02 +3C +40 +70 +80 +F8 +84 +3E +40 +9C +62 +22 +02 +ENDCHAR +STARTCHAR uni0F5D +ENCODING 3933 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +62 +92 +9E +12 +22 +3A +26 +02 +ENDCHAR +STARTCHAR uni0F5E +ENCODING 3934 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +38 +44 +98 +A4 +A6 +9A +42 +02 +ENDCHAR +STARTCHAR uni0F5F +ENCODING 3935 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 2 4 +BITMAP +FC +04 +7C +04 +F4 +0C +04 +ENDCHAR +STARTCHAR uni0F60 +ENCODING 3936 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +70 +88 +88 +90 +38 +04 +02 +ENDCHAR +STARTCHAR uni0F61 +ENCODING 3937 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +D6 +92 +92 +92 +6A +06 +02 +ENDCHAR +STARTCHAR uni0F62 +ENCODING 3938 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 2 5 +BITMAP +F8 +20 +70 +08 +04 +04 +ENDCHAR +STARTCHAR uni0F63 +ENCODING 3939 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 5 +BITMAP +72 +8A +92 +1A +06 +02 +ENDCHAR +STARTCHAR uni0F64 +ENCODING 3940 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +1E +22 +22 +9E +62 +22 +02 +02 +ENDCHAR +STARTCHAR uni0F65 +ENCODING 3941 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 2 3 +BITMAP +F0 +88 +88 +F4 +8C +88 +80 +80 +ENDCHAR +STARTCHAR uni0F66 +ENCODING 3942 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 5 +BITMAP +F6 +22 +52 +CA +06 +02 +ENDCHAR +STARTCHAR uni0F67 +ENCODING 3943 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +3C +40 +9C +62 +22 +02 +02 +ENDCHAR +STARTCHAR uni0F68 +ENCODING 3944 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +BA +92 +AA +A6 +96 +62 +02 +ENDCHAR +STARTCHAR uni0F69 +ENCODING 3945 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +7E +2A +CA +0A +02 +72 +4A +48 +7A +44 +48 +40 +ENDCHAR +STARTCHAR uni0F6A +ENCODING 3946 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +F8 +10 +70 +88 +04 +04 +04 +ENDCHAR +STARTCHAR uni0F6B +ENCODING 3947 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +FC +A8 +A6 +A0 +80 +80 +80 +ENDCHAR +STARTCHAR uni0F6C +ENCODING 3948 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 2 4 +BITMAP +7C +20 +38 +44 +80 +80 +80 +ENDCHAR +STARTCHAR uni0F71 +ENCODING 3953 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -14 1 +BITMAP +60 +A0 +10 +ENDCHAR +STARTCHAR uni0F72 +ENCODING 3954 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -15 11 +BITMAP +E0 +90 +08 +ENDCHAR +STARTCHAR uni0F73 +ENCODING 3955 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 16 -15 -2 +BITMAP +E0 +90 +08 +00 +00 +00 +00 +00 +00 +7E +84 +84 +08 +38 +44 +04 +ENDCHAR +STARTCHAR uni0F74 +ENCODING 3956 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -15 -2 +BITMAP +80 +48 +38 +ENDCHAR +STARTCHAR uni0F75 +ENCODING 3957 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 8 -15 -2 +BITMAP +7C +84 +84 +08 +18 +84 +44 +38 +ENDCHAR +STARTCHAR uni0F76 +ENCODING 3958 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 13 -15 1 +BITMAP +E0 +90 +08 +00 +00 +00 +00 +00 +00 +E4 +14 +0C +04 +ENDCHAR +STARTCHAR uni0F77 +ENCODING 3959 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 15 -15 -1 +BITMAP +E0 +90 +08 +00 +00 +00 +00 +04 +F4 +0C +7E +84 +08 +38 +44 +ENDCHAR +STARTCHAR uni0F78 +ENCODING 3960 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 16 -15 -2 +BITMAP +E0 +90 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +A4 +BC +04 +ENDCHAR +STARTCHAR uni0F79 +ENCODING 3961 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 15 -15 -1 +BITMAP +E0 +90 +08 +00 +00 +00 +00 +64 +BC +04 +7E +84 +08 +38 +44 +ENDCHAR +STARTCHAR uni0F7A +ENCODING 3962 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -16 11 +BITMAP +E0 +18 +04 +ENDCHAR +STARTCHAR uni0F7B +ENCODING 3963 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -16 12 +BITMAP +CC +22 +ENDCHAR +STARTCHAR uni0F7C +ENCODING 3964 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -16 11 +BITMAP +CF +28 +10 +ENDCHAR +STARTCHAR uni0F7D +ENCODING 3965 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -16 11 +BITMAP +45 +EE +10 +ENDCHAR +STARTCHAR uni0F7E +ENCODING 3966 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -14 11 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni0F7F +ENCODING 3967 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 9 -14 2 +BITMAP +60 +90 +90 +60 +00 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0F80 +ENCODING 3968 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -15 11 +BITMAP +38 +48 +80 +ENDCHAR +STARTCHAR uni0F81 +ENCODING 3969 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 16 -15 -2 +BITMAP +38 +48 +80 +00 +00 +00 +00 +00 +00 +7E +84 +84 +08 +38 +44 +04 +ENDCHAR +STARTCHAR uni0F82 +ENCODING 3970 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 8 +BITMAP +10 +10 +18 +44 +BA +7E +ENDCHAR +STARTCHAR uni0F83 +ENCODING 3971 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -15 10 +BITMAP +10 +28 +92 +7C +ENDCHAR +STARTCHAR uni0F84 +ENCODING 3972 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -11 -2 +BITMAP +80 +C0 +40 +60 +20 +20 +20 +ENDCHAR +STARTCHAR uni0F85 +ENCODING 3973 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +70 +88 +88 +10 +38 +24 +24 +14 +04 +04 +02 +ENDCHAR +STARTCHAR uni0F86 +ENCODING 3974 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -14 9 +BITMAP +40 +40 +40 +90 +60 +ENDCHAR +STARTCHAR uni0F87 +ENCODING 3975 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 6 -13 8 +BITMAP +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0F88 +ENCODING 3976 +BBX 7 5 2 8 +BITMAP +FE +28 +10 +28 +FE +ENDCHAR +STARTCHAR uni0F89 +ENCODING 3977 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 1 11 +BITMAP +6C +92 +ENDCHAR +STARTCHAR uni0F8A +ENCODING 3978 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 1 +BITMAP +EE +AA +AA +AA +BA +ENDCHAR +STARTCHAR uni0F8B +ENCODING 3979 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +02 +04 +74 +94 +94 +5C +ENDCHAR +STARTCHAR uni0F8C +ENCODING 3980 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 1 11 +BITMAP +92 +6C +ENDCHAR +STARTCHAR uni0F8D +ENCODING 3981 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -15 -2 +BITMAP +FE +44 +28 +10 +28 +44 +FE +ENDCHAR +STARTCHAR uni0F8E +ENCODING 3982 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -15 -1 +BITMAP +6C +92 +ENDCHAR +STARTCHAR uni0F8F +ENCODING 3983 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -15 -1 +BITMAP +92 +6C +ENDCHAR +STARTCHAR uni0F90 +ENCODING 3984 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -14 3 +BITMAP +FC +54 +94 +04 +ENDCHAR +STARTCHAR uni0F91 +ENCODING 3985 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -15 1 +BITMAP +7E +92 +9A +96 +82 +ENDCHAR +STARTCHAR uni0F92 +ENCODING 3986 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -15 3 +BITMAP +7E +92 +F2 +12 +ENDCHAR +STARTCHAR uni0F93 +ENCODING 3987 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 9 -15 -2 +BITMAP +7E +92 +F2 +02 +3C +40 +9C +62 +22 +ENDCHAR +STARTCHAR uni0F94 +ENCODING 3988 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -15 1 +BITMAP +3C +40 +F8 +84 +02 +ENDCHAR +STARTCHAR uni0F95 +ENCODING 3989 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -15 1 +BITMAP +7C +10 +9C +62 +1C +ENDCHAR +STARTCHAR uni0F96 +ENCODING 3990 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -15 1 +BITMAP +7C +10 +7C +92 +6C +ENDCHAR +STARTCHAR uni0F97 +ENCODING 3991 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 0 +BITMAP +3C +40 +70 +80 +FC +82 +ENDCHAR +STARTCHAR uni0F99 +ENCODING 3993 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 0 +BITMAP +70 +88 +1C +22 +02 +04 +ENDCHAR +STARTCHAR uni0F9A +ENCODING 3994 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 0 +BITMAP +FE +02 +7A +86 +82 +80 +ENDCHAR +STARTCHAR uni0F9B +ENCODING 3995 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -15 0 +BITMAP +FC +88 +F0 +88 +FC +80 +ENDCHAR +STARTCHAR uni0F9C +ENCODING 3996 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 0 +BITMAP +78 +04 +3E +42 +80 +80 +ENDCHAR +STARTCHAR uni0F9D +ENCODING 3997 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -15 -1 +BITMAP +78 +04 +3E +40 +FC +A2 +02 +ENDCHAR +STARTCHAR uni0F9E +ENCODING 3998 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -15 2 +BITMAP +3C +10 +38 +64 +98 +80 +ENDCHAR +STARTCHAR uni0F9F +ENCODING 3999 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 0 +BITMAP +FE +80 +BC +C2 +82 +02 +ENDCHAR +STARTCHAR uni0FA0 +ENCODING 4000 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -14 0 +BITMAP +FC +44 +3C +44 +FC +04 +ENDCHAR +STARTCHAR uni0FA1 +ENCODING 4001 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 0 +BITMAP +3C +40 +F8 +84 +02 +02 +ENDCHAR +STARTCHAR uni0FA2 +ENCODING 4002 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 8 -15 -2 +BITMAP +3C +40 +F8 +84 +3E +40 +9C +62 +ENDCHAR +STARTCHAR uni0FA3 +ENCODING 4003 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -14 2 +BITMAP +F0 +20 +70 +98 +64 +04 +ENDCHAR +STARTCHAR uni0FA4 +ENCODING 4004 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -15 2 +BITMAP +66 +42 +FA +06 +02 +ENDCHAR +STARTCHAR uni0FA5 +ENCODING 4005 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -15 2 +BITMAP +4E +92 +FA +06 +02 +ENDCHAR +STARTCHAR uni0FA6 +ENCODING 4006 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -15 2 +BITMAP +3E +42 +FA +06 +02 +ENDCHAR +STARTCHAR uni0FA7 +ENCODING 4007 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 9 -15 -2 +BITMAP +3E +42 +FA +06 +3E +40 +9C +62 +22 +ENDCHAR +STARTCHAR uni0FA8 +ENCODING 4008 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -15 2 +BITMAP +F2 +62 +9A +66 +02 +ENDCHAR +STARTCHAR uni0FA9 +ENCODING 4009 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -15 2 +BITMAP +78 +14 +12 +98 +64 +24 +18 +ENDCHAR +STARTCHAR uni0FAA +ENCODING 4010 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 0 +BITMAP +7C +12 +7C +92 +92 +6C +ENDCHAR +STARTCHAR uni0FAB +ENCODING 4011 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 3 +BITMAP +38 +44 +72 +82 +F8 +84 +ENDCHAR +STARTCHAR uni0FAC +ENCODING 4012 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 11 -15 -2 +BITMAP +38 +44 +72 +82 +F8 +84 +3C +40 +9C +62 +22 +ENDCHAR +STARTCHAR uni0FAD +ENCODING 4013 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -11 -2 +BITMAP +20 +60 +A0 +60 +ENDCHAR +STARTCHAR uni0FAE +ENCODING 4014 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -15 -1 +BITMAP +38 +44 +98 +A6 +9A +42 +02 +ENDCHAR +STARTCHAR uni0FAF +ENCODING 4015 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -14 0 +BITMAP +FC +04 +7C +04 +FC +04 +ENDCHAR +STARTCHAR uni0FB0 +ENCODING 4016 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 0 +BITMAP +70 +88 +90 +38 +04 +02 +ENDCHAR +STARTCHAR uni0FB1 +ENCODING 4017 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -13 -1 +BITMAP +08 +08 +08 +90 +E0 +48 +30 +ENDCHAR +STARTCHAR uni0FB2 +ENCODING 4018 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -15 -1 +BITMAP +02 +02 +02 +72 +8A +06 +02 +ENDCHAR +STARTCHAR uni0FB3 +ENCODING 4019 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 0 +BITMAP +72 +8A +92 +3A +06 +02 +ENDCHAR +STARTCHAR uni0FB4 +ENCODING 4020 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 -14 -1 +BITMAP +1C +24 +BC +44 +24 +04 +04 +ENDCHAR +STARTCHAR uni0FB5 +ENCODING 4021 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 -14 -1 +BITMAP +E0 +90 +F4 +88 +90 +80 +80 +ENDCHAR +STARTCHAR uni0FB6 +ENCODING 4022 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -15 1 +BITMAP +F6 +52 +8A +C6 +02 +ENDCHAR +STARTCHAR uni0FB7 +ENCODING 4023 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 0 +BITMAP +3C +40 +9C +62 +22 +02 +ENDCHAR +STARTCHAR uni0FB8 +ENCODING 4024 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 0 +BITMAP +BA +92 +AA +A6 +62 +02 +ENDCHAR +STARTCHAR uni0FB9 +ENCODING 4025 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 9 -15 -2 +BITMAP +7E +2A +CA +0A +72 +48 +7A +44 +40 +ENDCHAR +STARTCHAR uni0FBA +ENCODING 4026 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -15 -1 +BITMAP +62 +92 +9E +12 +3A +06 +02 +ENDCHAR +STARTCHAR uni0FBB +ENCODING 4027 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -15 0 +BITMAP +D6 +92 +92 +6A +06 +02 +ENDCHAR +STARTCHAR uni0FBC +ENCODING 4028 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -14 0 +BITMAP +F8 +20 +70 +08 +04 +04 +ENDCHAR +STARTCHAR uni0FBE +ENCODING 4030 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni0FBF +ENCODING 4031 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +92 +44 +28 +92 +28 +44 +92 +ENDCHAR +STARTCHAR uni0FC0 +ENCODING 4032 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 3 +BITMAP +38 +44 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni0FC1 +ENCODING 4033 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 2 3 +BITMAP +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni0FC2 +ENCODING 4034 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +38 +04 +34 +48 +48 +B0 +80 +70 +ENDCHAR +STARTCHAR uni0FC3 +ENCODING 4035 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 3 +BITMAP +38 +44 +92 +AA +92 +54 +38 +ENDCHAR +STARTCHAR uni0FC4 +ENCODING 4036 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 1 +BITMAP +D6 +28 +10 +38 +44 +44 +44 +7C +82 +FE +ENDCHAR +STARTCHAR uni0FC5 +ENCODING 4037 +BBX 11 16 2 -2 +BITMAP +3580 +0A00 +0400 +0E00 +3180 +64C0 +5140 +8A20 +8420 +5540 +4440 +3580 +0E00 +0400 +0A00 +3580 +ENDCHAR +STARTCHAR uni0FC6 +ENCODING 4038 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 7 -15 -2 +BITMAP +8A88 +5550 +5550 +2520 +1FC0 +2AA0 +4A90 +ENDCHAR +STARTCHAR uni0FC7 +ENCODING 4039 +BBX 15 16 0 -2 +BITMAP +0D60 +0280 +0100 +0380 +8C62 +9932 +5454 +A28A +A10A +5554 +9112 +8D62 +0380 +0100 +0280 +0D60 +ENDCHAR +STARTCHAR uni0FC8 +ENCODING 4040 +BBX 11 14 2 -1 +BITMAP +3580 +0A00 +0400 +FFE0 +9120 +4A40 +4A40 +2480 +2480 +1100 +1100 +0A00 +0A00 +0400 +ENDCHAR +STARTCHAR uni0FC9 +ENCODING 4041 +BBX 11 12 2 0 +BITMAP +0E00 +1100 +2480 +5140 +4E40 +A0A0 +9F20 +8020 +8020 +4040 +60C0 +1F00 +ENDCHAR +STARTCHAR uni0FCA +ENCODING 4042 +BBX 15 15 0 -2 +BITMAP +07C0 +0820 +3018 +2008 +4004 +9E06 +A126 +C106 +C90A +C0F2 +4004 +2008 +3018 +0820 +07C0 +ENDCHAR +STARTCHAR uni0FCB +ENCODING 4043 +BBX 15 15 0 -2 +BITMAP +07C0 +0820 +3018 +3C0C +424C +810A +9112 +81E2 +8102 +8202 +4244 +2208 +3218 +0920 +07C0 +ENDCHAR +STARTCHAR uni0FCC +ENCODING 4044 +BBX 15 15 0 -2 +BITMAP +07C0 +0820 +3038 +2128 +7C24 +8242 +8182 +8922 +8302 +8482 +487C +2908 +3818 +0820 +07C0 +ENDCHAR +STARTCHAR uni0FCE +ENCODING 4046 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 4 +BITMAP +A4 +4A +A4 +ENDCHAR +STARTCHAR uni0FCF +ENCODING 4047 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +28 +10 +28 +00 +AA +44 +AA +ENDCHAR +STARTCHAR uni0FD0 +ENCODING 4048 +BBX 13 9 1 3 +BITMAP +3E00 +4100 +8088 +1E70 +2100 +0100 +0200 +0E00 +1100 +ENDCHAR +STARTCHAR uni0FD1 +ENCODING 4049 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +78 +84 +04 +08 +38 +44 +38 +44 +30 +48 +08 +10 +08 +04 +ENDCHAR +STARTCHAR uni0FD2 +ENCODING 4050 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 1 +BITMAP +F8 +70 +20 +00 +00 +00 +F8 +70 +20 +ENDCHAR +STARTCHAR uni0FD3 +ENCODING 4051 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 6 +BITMAP +06 +C1 +31 +0E +ENDCHAR +STARTCHAR uni0FD4 +ENCODING 4052 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 6 +BITMAP +18 +04 +C4 +38 +ENDCHAR +STARTCHAR uni0FD5 +ENCODING 4053 +BBX 13 13 1 -1 +BITMAP +83F8 +8200 +8200 +8200 +8200 +8200 +FFF8 +0208 +0208 +0208 +0208 +0208 +FE08 +ENDCHAR +STARTCHAR uni0FD6 +ENCODING 4054 +BBX 13 13 1 -1 +BITMAP +FE08 +0208 +0208 +0208 +0208 +0208 +FFF8 +8200 +8200 +8200 +8200 +8200 +83F8 +ENDCHAR +STARTCHAR uni0FD7 +ENCODING 4055 +BBX 13 13 1 -1 +BITMAP +83F8 +8200 +8200 +9240 +8200 +8200 +FFF8 +0208 +0208 +1248 +0208 +0208 +FE08 +ENDCHAR +STARTCHAR uni0FD8 +ENCODING 4056 +BBX 13 13 1 -1 +BITMAP +FE08 +0208 +0208 +1248 +0208 +0208 +FFF8 +8200 +8200 +9240 +8200 +8200 +83F8 +ENDCHAR +STARTCHAR uni0FD9 +ENCODING 4057 +BBX 14 10 1 1 +BITMAP +8000 +C000 +8000 +0000 +2004 +300C +2004 +0000 +0420 +0E70 +ENDCHAR +STARTCHAR uni0FDA +ENCODING 4058 +BBX 14 10 1 1 +BITMAP +0004 +000C +0004 +0000 +8010 +C030 +8010 +0000 +1080 +39C0 +ENDCHAR +STARTCHAR uni1000 +ENCODING 4096 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +8420 +8420 +4840 +0180 +ENDCHAR +STARTCHAR uni1001 +ENCODING 4097 +BBX 8 7 7 2 +BITMAP +3C +42 +01 +F9 +85 +42 +3C +ENDCHAR +STARTCHAR uni1002 +ENCODING 4098 +BBX 8 7 7 2 +BITMAP +3C +42 +81 +81 +81 +42 +24 +ENDCHAR +STARTCHAR uni1003 +ENCODING 4099 +BBX 11 7 5 2 +BITMAP +C180 +2840 +4420 +8420 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uni1004 +ENCODING 4100 +BBX 7 7 7 2 +BITMAP +3C +42 +80 +80 +80 +42 +3C +ENDCHAR +STARTCHAR uni1005 +ENCODING 4101 +BBX 8 7 7 2 +BITMAP +3C +42 +A1 +A1 +A1 +42 +3C +ENDCHAR +STARTCHAR uni1006 +ENCODING 4102 +BBX 10 7 6 2 +BITMAP +6300 +9480 +0840 +0840 +E840 +9480 +6300 +ENDCHAR +STARTCHAR uni1007 +ENCODING 4103 +BBX 9 7 6 2 +BITMAP +3C00 +4200 +8500 +8280 +8000 +4200 +3C00 +ENDCHAR +STARTCHAR uni1008 +ENCODING 4104 +BBX 9 11 7 -2 +BITMAP +3880 +4480 +A280 +A280 +A280 +4480 +3C80 +0480 +0480 +0280 +0100 +ENDCHAR +STARTCHAR uni1009 +ENCODING 4105 +BBX 9 11 7 -2 +BITMAP +7000 +8800 +0400 +0400 +0400 +8800 +F000 +8000 +8080 +8080 +7F00 +ENDCHAR +STARTCHAR uni100A +ENCODING 4106 +BBX 10 11 6 -2 +BITMAP +6300 +9080 +0840 +0840 +0840 +9480 +E300 +8000 +8040 +8040 +7F80 +ENDCHAR +STARTCHAR uni100B +ENCODING 4107 +BBX 8 11 7 -2 +BITMAP +3C +42 +80 +80 +42 +3E +02 +7C +40 +3C +07 +ENDCHAR +STARTCHAR uni100C +ENCODING 4108 +BBX 7 11 7 -2 +BITMAP +3C +42 +80 +80 +80 +42 +3E +02 +62 +82 +7C +ENDCHAR +STARTCHAR uni100D +ENCODING 4109 +BBX 7 11 8 -2 +BITMAP +78 +84 +02 +02 +84 +F8 +80 +7C +04 +04 +06 +ENDCHAR +STARTCHAR uni100E +ENCODING 4110 +BBX 8 7 7 2 +BITMAP +C4 +22 +41 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni100F +ENCODING 4111 +BBX 11 7 5 2 +BITMAP +6EC0 +9120 +8A20 +8A20 +8A20 +5140 +1F00 +ENDCHAR +STARTCHAR uni1010 +ENCODING 4112 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +8420 +8420 +4840 +3180 +ENDCHAR +STARTCHAR uni1011 +ENCODING 4113 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +8420 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uni1012 +ENCODING 4114 +BBX 6 7 7 2 +BITMAP +78 +84 +04 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uni1013 +ENCODING 4115 +BBX 8 7 7 2 +BITMAP +3C +42 +81 +81 +BD +42 +3C +ENDCHAR +STARTCHAR uni1014 +ENCODING 4116 +BBX 8 9 7 0 +BITMAP +0E +10 +10 +0E +61 +91 +7E +10 +10 +ENDCHAR +STARTCHAR uni1015 +ENCODING 4117 +BBX 8 7 7 2 +BITMAP +24 +42 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni1016 +ENCODING 4118 +BBX 8 7 7 2 +BITMAP +2C +4A +89 +89 +85 +42 +3C +ENDCHAR +STARTCHAR uni1017 +ENCODING 4119 +BBX 8 6 7 2 +BITMAP +42 +BD +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni1018 +ENCODING 4120 +BBX 10 7 6 2 +BITMAP +6300 +9480 +0840 +0840 +0840 +9080 +6300 +ENDCHAR +STARTCHAR uni1019 +ENCODING 4121 +BBX 8 7 7 2 +BITMAP +24 +42 +81 +81 +BD +42 +3C +ENDCHAR +STARTCHAR uni101A +ENCODING 4122 +BBX 11 7 5 2 +BITMAP +0180 +4840 +8420 +8420 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uni101B +ENCODING 4123 +BBX 10 11 6 -2 +BITMAP +3C00 +4200 +8100 +F100 +8900 +4500 +3D00 +0100 +0100 +0100 +01C0 +ENDCHAR +STARTCHAR uni101C +ENCODING 4124 +BBX 11 7 5 2 +BITMAP +3180 +4840 +8420 +8420 +8420 +4240 +3180 +ENDCHAR +STARTCHAR uni101D +ENCODING 4125 +BBX 8 7 7 2 +BITMAP +3C +42 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni101E +ENCODING 4126 +BBX 10 7 6 2 +BITMAP +6300 +9080 +0840 +0840 +0840 +9480 +6300 +ENDCHAR +STARTCHAR uni101F +ENCODING 4127 +BBX 11 7 5 2 +BITMAP +0180 +4A40 +8420 +8420 +8420 +4840 +3180 +ENDCHAR +STARTCHAR uni1020 +ENCODING 4128 +BBX 7 11 7 -2 +BITMAP +3C +42 +80 +80 +42 +3E +02 +7C +40 +42 +3C +ENDCHAR +STARTCHAR uni1021 +ENCODING 4129 +BBX 10 7 6 2 +BITMAP +6700 +9880 +10C0 +2140 +1240 +9280 +6300 +ENDCHAR +STARTCHAR uni1022 +ENCODING 4130 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +8420 +4420 +2840 +C180 +ENDCHAR +STARTCHAR uni1023 +ENCODING 4131 +BBX 11 11 5 -2 +BITMAP +3180 +4A40 +8420 +8420 +8420 +4040 +0000 +3B80 +4440 +4480 +20E0 +ENDCHAR +STARTCHAR uni1024 +ENCODING 4132 +BBX 12 16 4 -2 +BITMAP +0060 +0090 +0080 +0040 +0020 +1990 +2650 +4250 +4250 +4250 +2450 +0050 +0050 +7E50 +8050 +7F90 +ENDCHAR +STARTCHAR uni1025 +ENCODING 4133 +BBX 7 11 7 -2 +BITMAP +78 +84 +02 +02 +02 +84 +F8 +80 +80 +82 +7C +ENDCHAR +STARTCHAR uni1026 +ENCODING 4134 +BBX 7 16 7 -2 +BITMAP +38 +44 +54 +6C +38 +00 +7C +84 +02 +02 +84 +F8 +80 +80 +82 +7C +ENDCHAR +STARTCHAR uni1027 +ENCODING 4135 +BBX 7 7 7 2 +BITMAP +3C +42 +BC +80 +BC +42 +3C +ENDCHAR +STARTCHAR uni1028 +ENCODING 4136 +BBX 8 12 7 -2 +BITMAP +3C +42 +99 +A5 +85 +89 +86 +80 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni1029 +ENCODING 4137 +BBX 15 16 1 -2 +BITMAP +7FFC +8002 +8002 +8000 +8000 +8E38 +9104 +8082 +8082 +8082 +9146 +8E3A +8002 +8002 +8002 +7FFC +ENDCHAR +STARTCHAR uni102A +ENCODING 4138 +BBX 16 16 0 -2 +BITMAP +07C6 +0829 +0828 +0804 +0800 +0B36 +2889 +4889 +8889 +B889 +D89A +6B68 +0808 +0808 +0808 +07F0 +ENDCHAR +STARTCHAR uni102B +ENCODING 4139 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -13 2 +BITMAP +78 +84 +84 +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni102C +ENCODING 4140 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 7 -11 2 +BITMAP +7C +82 +01 +01 +01 +02 +3C +ENDCHAR +STARTCHAR uni102D +ENCODING 4141 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -7 10 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni102E +ENCODING 4142 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -8 9 +BITMAP +70 +88 +A8 +88 +70 +ENDCHAR +STARTCHAR uni102F +ENCODING 4143 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 11 -10 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +E0 +ENDCHAR +STARTCHAR uni1030 +ENCODING 4144 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 11 -11 -2 +BITMAP +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +B8 +ENDCHAR +STARTCHAR uni1031 +ENCODING 4145 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 6 -15 2 +BITMAP +60 +80 +80 +E0 +A0 +60 +ENDCHAR +STARTCHAR uni1032 +ENCODING 4146 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -9 10 +BITMAP +80 +40 +20 +10 +ENDCHAR +STARTCHAR uni1033 +ENCODING 4147 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -8 9 +BITMAP +70 +A8 +D8 +A8 +70 +ENDCHAR +STARTCHAR uni1034 +ENCODING 4148 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -7 10 +BITMAP +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni1035 +ENCODING 4149 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -8 9 +BITMAP +70 +80 +B8 +C8 +70 +ENDCHAR +STARTCHAR uni1036 +ENCODING 4150 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -3 10 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni1037 +ENCODING 4151 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 -2 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni1038 +ENCODING 4152 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -10 2 +BITMAP +40 +A0 +40 +00 +40 +A0 +40 +ENDCHAR +STARTCHAR uni1039 +ENCODING 4153 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -7 -2 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni103A +ENCODING 4154 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -5 10 +BITMAP +60 +90 +80 +40 +ENDCHAR +STARTCHAR uni103B +ENCODING 4155 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 11 -16 -2 +BITMAP +04 +04 +04 +04 +04 +04 +84 +84 +84 +64 +1C +ENDCHAR +STARTCHAR uni103C +ENCODING 4156 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 16 -12 -2 +BITMAP +7FC0 +8020 +8020 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8040 +7F80 +ENDCHAR +STARTCHAR uni103D +ENCODING 4157 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -6 -2 +BITMAP +20 +50 +88 +70 +ENDCHAR +STARTCHAR uni103E +ENCODING 4158 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 4 -7 -1 +BITMAP +40 +40 +40 +C0 +ENDCHAR +STARTCHAR uni103F +ENCODING 4159 +BBX 10 7 6 2 +BITMAP +4900 +A480 +1240 +1240 +1240 +B680 +4900 +ENDCHAR +STARTCHAR uni1040 +ENCODING 4160 +BBX 9 7 4 2 +BITMAP +3600 +4100 +8080 +8080 +8080 +4100 +3600 +ENDCHAR +STARTCHAR uni1041 +ENCODING 4161 +BBX 7 7 5 2 +BITMAP +78 +84 +02 +02 +02 +84 +78 +ENDCHAR +STARTCHAR uni1042 +ENCODING 4162 +BBX 7 11 4 -2 +BITMAP +02 +02 +02 +02 +02 +02 +02 +02 +02 +84 +78 +ENDCHAR +STARTCHAR uni1043 +ENCODING 4163 +BBX 7 11 5 -2 +BITMAP +78 +84 +02 +02 +02 +84 +78 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni1044 +ENCODING 4164 +BBX 7 11 4 -2 +BITMAP +3C +42 +80 +80 +80 +42 +3C +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni1045 +ENCODING 4165 +BBX 8 11 4 -2 +BITMAP +7C +A2 +A1 +41 +01 +01 +01 +01 +01 +42 +3C +ENDCHAR +STARTCHAR uni1046 +ENCODING 4166 +BBX 7 11 5 2 +BITMAP +3C +42 +80 +80 +8C +90 +90 +8E +82 +42 +3C +ENDCHAR +STARTCHAR uni1047 +ENCODING 4167 +BBX 7 11 4 -2 +BITMAP +78 +84 +02 +02 +02 +04 +08 +10 +20 +20 +18 +ENDCHAR +STARTCHAR uni1048 +ENCODING 4168 +BBX 8 7 4 2 +BITMAP +3C +42 +A1 +91 +91 +52 +30 +ENDCHAR +STARTCHAR uni1049 +ENCODING 4169 +BBX 7 11 5 -2 +BITMAP +3C +42 +82 +8E +90 +90 +8C +80 +80 +42 +3C +ENDCHAR +STARTCHAR uni104A +ENCODING 4170 +BBX 1 7 8 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni104B +ENCODING 4171 +BBX 4 7 6 2 +BITMAP +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni104C +ENCODING 4172 +BBX 7 16 5 -2 +BITMAP +30 +48 +40 +20 +00 +78 +84 +02 +02 +84 +F8 +80 +7C +04 +84 +78 +ENDCHAR +STARTCHAR uni104D +ENCODING 4173 +BBX 11 15 3 -2 +BITMAP +00C0 +0120 +0100 +0080 +3C40 +4240 +8140 +F140 +8940 +4540 +3D40 +0140 +3140 +4040 +3F80 +ENDCHAR +STARTCHAR uni104E +ENCODING 4174 +BBX 7 11 7 -2 +BITMAP +3C +42 +80 +80 +80 +42 +3E +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni104F +ENCODING 4175 +BBX 12 12 2 2 +BITMAP +0060 +0090 +0080 +0040 +0020 +3D90 +4250 +BC50 +8050 +BC50 +4250 +3C50 +ENDCHAR +STARTCHAR uni1050 +ENCODING 4176 +BBX 8 7 7 2 +BITMAP +3C +42 +81 +99 +81 +42 +24 +ENDCHAR +STARTCHAR uni1051 +ENCODING 4177 +BBX 8 7 7 2 +BITMAP +24 +42 +81 +99 +81 +42 +3C +ENDCHAR +STARTCHAR uni1052 +ENCODING 4178 +BBX 8 7 7 2 +BITMAP +03 +44 +82 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni1053 +ENCODING 4179 +BBX 8 7 7 2 +BITMAP +C3 +24 +42 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni1054 +ENCODING 4180 +BBX 8 7 7 2 +BITMAP +3C +42 +A1 +9F +80 +42 +3C +ENDCHAR +STARTCHAR uni1055 +ENCODING 4181 +BBX 8 7 7 2 +BITMAP +3C +42 +A1 +9F +80 +49 +36 +ENDCHAR +STARTCHAR uni1056 +ENCODING 4182 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -12 2 +BITMAP +06 +08 +04 +02 +02 +84 +78 +ENDCHAR +STARTCHAR uni1057 +ENCODING 4183 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 7 -12 2 +BITMAP +03 +04 +02 +01 +01 +92 +6C +ENDCHAR +STARTCHAR uni1058 +ENCODING 4184 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -7 -2 +BITMAP +60 +A0 +C8 +70 +ENDCHAR +STARTCHAR uni1059 +ENCODING 4185 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -8 -2 +BITMAP +60 +A0 +CA +74 +ENDCHAR +STARTCHAR uni105A +ENCODING 4186 +BBX 7 11 7 -2 +BITMAP +3C +42 +80 +80 +42 +3C +10 +28 +08 +10 +08 +ENDCHAR +STARTCHAR uni105B +ENCODING 4187 +BBX 9 11 6 -2 +BITMAP +3880 +4480 +8A80 +8580 +8080 +4480 +3C80 +0480 +0480 +0280 +0100 +ENDCHAR +STARTCHAR uni105C +ENCODING 4188 +BBX 8 7 7 2 +BITMAP +3C +42 +99 +A5 +99 +42 +3C +ENDCHAR +STARTCHAR uni105D +ENCODING 4189 +BBX 8 11 7 -2 +BITMAP +24 +42 +81 +81 +BD +43 +3D +01 +61 +81 +7E +ENDCHAR +STARTCHAR uni105E +ENCODING 4190 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -7 -2 +BITMAP +20 +70 +A8 +60 +ENDCHAR +STARTCHAR uni105F +ENCODING 4191 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -7 -2 +BITMAP +20 +60 +88 +70 +ENDCHAR +STARTCHAR uni1060 +ENCODING 4192 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -7 -2 +BITMAP +20 +40 +80 +F0 +ENDCHAR +STARTCHAR uni1061 +ENCODING 4193 +BBX 8 11 7 -2 +BITMAP +3C +42 +81 +F1 +89 +45 +3D +01 +05 +05 +0D +ENDCHAR +STARTCHAR uni1062 +ENCODING 4194 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -10 2 +BITMAP +E0 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni1063 +ENCODING 4195 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 11 -11 -2 +BITMAP +70 +88 +04 +04 +04 +88 +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1064 +ENCODING 4196 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -11 2 +BITMAP +E0 +20 +20 +20 +20 +20 +38 +ENDCHAR +STARTCHAR uni1065 +ENCODING 4197 +BBX 7 7 8 2 +BITMAP +78 +84 +02 +02 +02 +84 +78 +ENDCHAR +STARTCHAR uni1066 +ENCODING 4198 +BBX 8 11 7 -2 +BITMAP +24 +42 +81 +81 +81 +42 +3C +00 +08 +08 +18 +ENDCHAR +STARTCHAR uni1067 +ENCODING 4199 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -10 2 +BITMAP +20 +20 +20 +60 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni1068 +ENCODING 4200 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 11 -10 2 +BITMAP +40 +A0 +40 +00 +20 +20 +20 +20 +20 +20 +E0 +ENDCHAR +STARTCHAR uni1069 +ENCODING 4201 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -10 2 +BITMAP +60 +90 +10 +60 +80 +90 +60 +ENDCHAR +STARTCHAR uni106A +ENCODING 4202 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -10 2 +BITMAP +20 +20 +20 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni106B +ENCODING 4203 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -10 2 +BITMAP +40 +A0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni106C +ENCODING 4204 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -9 2 +BITMAP +80 +80 +80 +80 +80 +A0 +40 +ENDCHAR +STARTCHAR uni106D +ENCODING 4205 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -10 2 +BITMAP +60 +90 +80 +60 +10 +90 +60 +ENDCHAR +STARTCHAR uni106E +ENCODING 4206 +BBX 10 6 6 3 +BITMAP +6D80 +9240 +8A40 +8A40 +9240 +5480 +ENDCHAR +STARTCHAR uni106F +ENCODING 4207 +BBX 11 11 5 -2 +BITMAP +0180 +4A40 +8420 +8420 +8420 +4840 +3180 +0000 +0100 +0100 +0300 +ENDCHAR +STARTCHAR uni1070 +ENCODING 4208 +BBX 11 11 5 -2 +BITMAP +C180 +2840 +4420 +8420 +8420 +4A40 +3180 +0000 +0100 +0100 +0300 +ENDCHAR +STARTCHAR uni1071 +ENCODING 4209 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -9 10 +BITMAP +44 +AA +44 +ENDCHAR +STARTCHAR uni1072 +ENCODING 4210 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -7 10 +BITMAP +60 +90 +80 +60 +ENDCHAR +STARTCHAR uni1073 +ENCODING 4211 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -9 10 +BITMAP +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni1074 +ENCODING 4212 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -7 10 +BITMAP +90 +90 +60 +ENDCHAR +STARTCHAR uni1075 +ENCODING 4213 +BBX 8 7 7 2 +BITMAP +3C +42 +81 +81 +41 +22 +C4 +ENDCHAR +STARTCHAR uni1076 +ENCODING 4214 +BBX 8 7 7 2 +BITMAP +9C +A2 +41 +01 +7D +42 +3C +ENDCHAR +STARTCHAR uni1077 +ENCODING 4215 +BBX 8 7 7 2 +BITMAP +3C +42 +85 +85 +45 +22 +C0 +ENDCHAR +STARTCHAR uni1078 +ENCODING 4216 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +8420 +8420 +4240 +3180 +ENDCHAR +STARTCHAR uni1079 +ENCODING 4217 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +C420 +A420 +9420 +5240 +3180 +ENDCHAR +STARTCHAR uni107A +ENCODING 4218 +BBX 11 11 5 -2 +BITMAP +3180 +4840 +8420 +8420 +8420 +4640 +3580 +0400 +0400 +0400 +0700 +ENDCHAR +STARTCHAR uni107B +ENCODING 4219 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8460 +84A0 +8520 +4940 +3180 +ENDCHAR +STARTCHAR uni107C +ENCODING 4220 +BBX 9 7 6 2 +BITMAP +6300 +9480 +0800 +0800 +7F00 +9480 +6300 +ENDCHAR +STARTCHAR uni107D +ENCODING 4221 +BBX 10 7 5 2 +BITMAP +C180 +2A40 +4400 +8400 +85C0 +4A40 +3180 +ENDCHAR +STARTCHAR uni107E +ENCODING 4222 +BBX 10 11 5 -2 +BITMAP +C180 +2A40 +4400 +8400 +85C0 +4A40 +3180 +0000 +0100 +0100 +0300 +ENDCHAR +STARTCHAR uni107F +ENCODING 4223 +BBX 8 7 7 2 +BITMAP +34 +52 +91 +91 +A1 +42 +3C +ENDCHAR +STARTCHAR uni1080 +ENCODING 4224 +BBX 10 7 6 2 +BITMAP +6300 +9080 +0840 +0840 +E840 +9480 +6300 +ENDCHAR +STARTCHAR uni1081 +ENCODING 4225 +BBX 8 11 7 -2 +BITMAP +3C +42 +81 +81 +91 +52 +30 +10 +10 +10 +70 +ENDCHAR +STARTCHAR uni1082 +ENCODING 4226 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -7 -2 +BITMAP +40 +80 +90 +60 +ENDCHAR +STARTCHAR uni1083 +ENCODING 4227 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 11 -11 -2 +BITMAP +E0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +38 +ENDCHAR +STARTCHAR uni1084 +ENCODING 4228 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -7 2 +BITMAP +60 +90 +80 +60 +80 +90 +60 +ENDCHAR +STARTCHAR uni1085 +ENCODING 4229 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -8 9 +BITMAP +70 +88 +40 +88 +70 +ENDCHAR +STARTCHAR uni1086 +ENCODING 4230 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -7 9 +BITMAP +40 +A0 +60 +20 +40 +ENDCHAR +STARTCHAR uni1087 +ENCODING 4231 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -10 0 +BITMAP +40 +A0 +60 +20 +40 +ENDCHAR +STARTCHAR uni1088 +ENCODING 4232 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -10 0 +BITMAP +40 +A0 +40 +00 +40 +A0 +60 +20 +40 +ENDCHAR +STARTCHAR uni1089 +ENCODING 4233 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -10 2 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni108A +ENCODING 4234 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -11 2 +BITMAP +40 +A8 +70 +00 +40 +A8 +70 +ENDCHAR +STARTCHAR uni108B +ENCODING 4235 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -10 4 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni108C +ENCODING 4236 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -11 4 +BITMAP +44 +AA +44 +ENDCHAR +STARTCHAR uni108D +ENCODING 4237 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 -9 0 +BITMAP +FF +ENDCHAR +STARTCHAR uni108E +ENCODING 4238 +BBX 8 7 7 2 +BITMAP +3C +42 +BD +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni108F +ENCODING 4239 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -10 0 +BITMAP +40 +A0 +40 +00 +40 +A0 +C0 +80 +40 +ENDCHAR +STARTCHAR uni1090 +ENCODING 4240 +BBX 6 7 5 2 +BITMAP +78 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1091 +ENCODING 4241 +BBX 5 7 5 2 +BITMAP +60 +A0 +20 +20 +20 +28 +30 +ENDCHAR +STARTCHAR uni1092 +ENCODING 4242 +BBX 6 7 5 2 +BITMAP +B8 +C4 +04 +08 +10 +20 +20 +ENDCHAR +STARTCHAR uni1093 +ENCODING 4243 +BBX 5 8 5 2 +BITMAP +10 +10 +20 +20 +40 +70 +88 +88 +ENDCHAR +STARTCHAR uni1094 +ENCODING 4244 +BBX 6 8 5 2 +BITMAP +10 +10 +30 +30 +50 +50 +94 +98 +ENDCHAR +STARTCHAR uni1095 +ENCODING 4245 +BBX 7 7 4 2 +BITMAP +04 +04 +04 +7E +84 +84 +78 +ENDCHAR +STARTCHAR uni1096 +ENCODING 4246 +BBX 7 7 4 2 +BITMAP +78 +84 +84 +7E +04 +04 +04 +ENDCHAR +STARTCHAR uni1097 +ENCODING 4247 +BBX 5 7 5 2 +BITMAP +F8 +08 +10 +20 +40 +80 +F8 +ENDCHAR +STARTCHAR uni1098 +ENCODING 4248 +BBX 6 7 5 2 +BITMAP +84 +84 +48 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni1099 +ENCODING 4249 +BBX 6 7 5 2 +BITMAP +78 +84 +84 +78 +48 +84 +84 +ENDCHAR +STARTCHAR uni109A +ENCODING 4250 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -10 6 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni109B +ENCODING 4251 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -10 8 +BITMAP +40 +A0 +60 +20 +40 +ENDCHAR +STARTCHAR uni109C +ENCODING 4252 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -11 2 +BITMAP +70 +A8 +40 +00 +70 +A8 +40 +ENDCHAR +STARTCHAR uni109D +ENCODING 4253 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -6 8 +BITMAP +70 +88 +08 +08 +08 +ENDCHAR +STARTCHAR uni109E +ENCODING 4254 +BBX 5 15 5 -2 +BITMAP +20 +50 +20 +00 +E0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +38 +ENDCHAR +STARTCHAR uni109F +ENCODING 4255 +BBX 12 16 2 -2 +BITMAP +0060 +0090 +0080 +0040 +0020 +3C10 +4210 +8110 +8110 +8110 +4110 +0110 +0110 +0110 +0110 +00E0 +ENDCHAR +STARTCHAR uni10A0 +ENCODING 4256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +80 +FE +22 +40 +80 +80 +80 +80 +82 +46 +3A +ENDCHAR +STARTCHAR uni10A1 +ENCODING 4257 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 -1 +BITMAP +68 +88 +88 +88 +98 +68 +08 +08 +08 +0E +02 +ENDCHAR +STARTCHAR uni10A2 +ENCODING 4258 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 -1 +BITMAP +F8 +88 +88 +08 +08 +08 +08 +08 +08 +0E +02 +ENDCHAR +STARTCHAR uni10A3 +ENCODING 4259 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +80 +FE +12 +10 +38 +44 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni10A4 +ENCODING 4260 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +88 +88 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni10A5 +ENCODING 4261 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +F8 +88 +88 +08 +0E +0A +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni10A6 +ENCODING 4262 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 -1 +BITMAP +80 +E0 +20 +20 +20 +2C +32 +22 +22 +22 +1C +ENDCHAR +STARTCHAR uni10A7 +ENCODING 4263 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +30 +50 +90 +90 +9E +92 +90 +90 +50 +30 +ENDCHAR +STARTCHAR uni10A8 +ENCODING 4264 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +80 +F8 +08 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni10A9 +ENCODING 4265 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +B0 +C8 +88 +88 +98 +68 +08 +08 +ENDCHAR +STARTCHAR uni10AA +ENCODING 4266 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -1 +BITMAP +E0 +A0 +20 +20 +2C +32 +22 +22 +22 +1C +ENDCHAR +STARTCHAR uni10AB +ENCODING 4267 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +80 +F8 +08 +08 +08 +7E +8A +8A +88 +88 +70 +ENDCHAR +STARTCHAR uni10AC +ENCODING 4268 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +08 +F8 +80 +80 +80 +F8 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni10AD +ENCODING 4269 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +70 +88 +88 +88 +88 +88 +88 +8A +8A +74 +ENDCHAR +STARTCHAR uni10AE +ENCODING 4270 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +80 +E2 +22 +22 +22 +22 +22 +22 +22 +22 +1C +ENDCHAR +STARTCHAR uni10AF +ENCODING 4271 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +F4 +24 +44 +44 +4C +34 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni10B0 +ENCODING 4272 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +14 +1A +12 +92 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni10B1 +ENCODING 4273 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +80 +90 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni10B2 +ENCODING 4274 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +FC +04 +ENDCHAR +STARTCHAR uni10B3 +ENCODING 4275 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +70 +88 +88 +88 +88 +88 +88 +8C +8A +72 +ENDCHAR +STARTCHAR uni10B4 +ENCODING 4276 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7C +92 +92 +92 +7C +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni10B5 +ENCODING 4277 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +A0 +F8 +28 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni10B6 +ENCODING 4278 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni10B7 +ENCODING 4279 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +48 +88 +88 +88 +88 +88 +98 +68 +08 +08 +ENDCHAR +STARTCHAR uni10B8 +ENCODING 4280 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +68 +88 +88 +88 +98 +68 +08 +88 +88 +70 +ENDCHAR +STARTCHAR uni10B9 +ENCODING 4281 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +80 +F8 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni10BA +ENCODING 4282 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +38 +44 +84 +80 +80 +80 +80 +84 +44 +38 +08 +10 +ENDCHAR +STARTCHAR uni10BB +ENCODING 4283 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +10 +10 +10 +7C +94 +94 +90 +90 +60 +ENDCHAR +STARTCHAR uni10BC +ENCODING 4284 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F8 +84 +84 +84 +F8 +80 +80 +F0 +88 +90 +80 +80 +ENDCHAR +STARTCHAR uni10BD +ENCODING 4285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +70 +88 +88 +40 +20 +10 +08 +84 +84 +78 +ENDCHAR +STARTCHAR uni10BE +ENCODING 4286 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 -1 +BITMAP +88 +88 +88 +88 +88 +F8 +80 +80 +80 +F8 +08 +ENDCHAR +STARTCHAR uni10BF +ENCODING 4287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +80 +FE +22 +22 +14 +14 +08 +14 +14 +22 +22 +40 +80 +ENDCHAR +STARTCHAR uni10C0 +ENCODING 4288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +F0 +90 +90 +10 +10 +10 +12 +12 +12 +0C +ENDCHAR +STARTCHAR uni10C1 +ENCODING 4289 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +F0 +88 +8C +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni10C2 +ENCODING 4290 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +F0 +88 +04 +04 +04 +04 +04 +84 +88 +70 +ENDCHAR +STARTCHAR uni10C3 +ENCODING 4291 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +68 +88 +88 +88 +98 +68 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni10C4 +ENCODING 4292 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +82 +82 +82 +82 +44 +28 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni10C5 +ENCODING 4293 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +1C +12 +12 +1C +10 +7C +94 +96 +90 +60 +ENDCHAR +STARTCHAR uni10C7 +ENCODING 4295 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +38 +44 +44 +08 +10 +20 +40 +84 +84 +78 +ENDCHAR +STARTCHAR uni10CD +ENCODING 4301 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +08 +08 +10 +20 +20 +40 +40 +80 +F8 +ENDCHAR +STARTCHAR uni10D0 +ENCODING 4304 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +20 +20 +18 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni10D1 +ENCODING 4305 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +60 +20 +20 +78 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni10D2 +ENCODING 4306 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +60 +90 +90 +10 +10 +78 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni10D3 +ENCODING 4307 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +58 +A4 +A4 +A4 +A4 +98 +40 +38 +04 +ENDCHAR +STARTCHAR uni10D4 +ENCODING 4308 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +04 +04 +04 +04 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni10D5 +ENCODING 4309 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +04 +38 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni10D6 +ENCODING 4310 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +A0 +A0 +A8 +70 +38 +24 +24 +24 +18 +ENDCHAR +STARTCHAR uni10D7 +ENCODING 4311 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +68 +94 +94 +94 +94 +94 +64 +ENDCHAR +STARTCHAR uni10D8 +ENCODING 4312 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +48 +ENDCHAR +STARTCHAR uni10D9 +ENCODING 4313 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +18 +04 +04 +04 +38 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni10DA +ENCODING 4314 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -2 +BITMAP +54 +AA +AA +AA +82 +84 +80 +7C +02 +ENDCHAR +STARTCHAR uni10DB +ENCODING 4315 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +04 +7C +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni10DC +ENCODING 4316 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +78 +80 +80 +80 +F8 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni10DD +ENCODING 4317 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +50 +A8 +A8 +A8 +A8 +88 +48 +ENDCHAR +STARTCHAR uni10DE +ENCODING 4318 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +30 +08 +04 +04 +38 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni10DF +ENCODING 4319 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +0C +14 +A4 +A4 +44 +04 +44 +44 +38 +ENDCHAR +STARTCHAR uni10E0 +ENCODING 4320 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +70 +80 +D0 +A8 +A8 +A8 +A8 +88 +48 +ENDCHAR +STARTCHAR uni10E1 +ENCODING 4321 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +90 +A0 +90 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni10E2 +ENCODING 4322 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +30 +48 +48 +78 +CC +CC +B4 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni10E3 +ENCODING 4323 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +D8 +24 +24 +04 +04 +04 +44 +44 +38 +ENDCHAR +STARTCHAR uni10E4 +ENCODING 4324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +68 +94 +94 +94 +94 +68 +04 +04 +38 +ENDCHAR +STARTCHAR uni10E5 +ENCODING 4325 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +08 +18 +08 +08 +08 +38 +48 +08 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni10E6 +ENCODING 4326 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 -2 +BITMAP +50 +A8 +A8 +A8 +88 +90 +80 +70 +08 +ENDCHAR +STARTCHAR uni10E7 +ENCODING 4327 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +44 +84 +84 +84 +4C +34 +84 +84 +78 +ENDCHAR +STARTCHAR uni10E8 +ENCODING 4328 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +50 +A8 +A8 +08 +08 +38 +48 +48 +48 +30 +ENDCHAR +STARTCHAR uni10E9 +ENCODING 4329 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +F0 +80 +B8 +C4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni10EA +ENCODING 4330 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +98 +84 +84 +84 +B8 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni10EB +ENCODING 4331 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +04 +04 +04 +04 +7C +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni10EC +ENCODING 4332 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +50 +A8 +A8 +80 +80 +F8 +88 +88 +50 +50 +20 +20 +ENDCHAR +STARTCHAR uni10ED +ENCODING 4333 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +10 +30 +50 +10 +10 +32 +4C +3A +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni10EE +ENCODING 4334 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +90 +A0 +F0 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni10EF +ENCODING 4335 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +84 +48 +30 +30 +48 +84 +40 +80 +ENDCHAR +STARTCHAR uni10F0 +ENCODING 4336 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +18 +04 +24 +18 +04 +24 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni10F1 +ENCODING 4337 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +A0 +98 +84 +A4 +98 +84 +A4 +98 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni10F2 +ENCODING 4338 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +48 +30 +FC +ENDCHAR +STARTCHAR uni10F3 +ENCODING 4339 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +7C +04 +08 +10 +38 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni10F4 +ENCODING 4340 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +20 +18 +04 +04 +04 +38 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni10F5 +ENCODING 4341 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +70 +88 +88 +7C +08 +7C +88 +88 +70 +ENDCHAR +STARTCHAR uni10F6 +ENCODING 4342 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +40 +20 +20 +20 +70 +A8 +A8 +70 +20 +20 +20 +10 +ENDCHAR +STARTCHAR uni10F7 +ENCODING 4343 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +08 +10 +20 +40 +84 +84 +78 +ENDCHAR +STARTCHAR uni10F8 +ENCODING 4344 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +88 +84 +84 +84 +C8 +B0 +84 +84 +78 +ENDCHAR +STARTCHAR uni10F9 +ENCODING 4345 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +78 +84 +84 +84 +84 +78 +20 +20 +24 +24 +18 +ENDCHAR +STARTCHAR uni10FA +ENCODING 4346 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +60 +18 +38 +44 +80 +ENDCHAR +STARTCHAR uni10FB +ENCODING 4347 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +C0 +C0 +00 +0C +0C +00 +C0 +C0 +ENDCHAR +STARTCHAR uni10FC +ENCODING 4348 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 4 +BITMAP +08 +70 +80 +80 +F0 +88 +88 +70 +ENDCHAR +STARTCHAR uni10FD +ENCODING 4349 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +40 +20 +10 +08 +84 +84 +78 +ENDCHAR +STARTCHAR uni10FE +ENCODING 4350 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +C0 +22 +1C +22 +22 +22 +1C +ENDCHAR +STARTCHAR uni10FF +ENCODING 4351 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 0 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1100 +ENCODING 4352 +BBX 8 11 1 1 +BITMAP +FF +01 +01 +01 +01 +02 +02 +04 +08 +30 +C0 +ENDCHAR +STARTCHAR uni1101 +ENCODING 4353 +BBX 8 10 1 1 +BITMAP +F7 +11 +11 +11 +11 +22 +22 +44 +88 +10 +ENDCHAR +STARTCHAR uni1102 +ENCODING 4354 +BBX 7 5 2 8 +BITMAP +80 +80 +80 +80 +FE +ENDCHAR +STARTCHAR uni1103 +ENCODING 4355 +BBX 7 5 2 8 +BITMAP +FE +80 +80 +80 +FE +ENDCHAR +STARTCHAR uni1104 +ENCODING 4356 +BBX 7 5 2 8 +BITMAP +EE +88 +88 +88 +EE +ENDCHAR +STARTCHAR uni1105 +ENCODING 4357 +BBX 7 5 2 7 +BITMAP +FE +02 +FE +80 +FE +ENDCHAR +STARTCHAR uni1106 +ENCODING 4358 +BBX 7 5 2 8 +BITMAP +FE +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni1107 +ENCODING 4359 +BBX 7 5 2 8 +BITMAP +82 +82 +FE +82 +FE +ENDCHAR +STARTCHAR uni1108 +ENCODING 4360 +BBX 7 5 2 8 +BITMAP +AA +AA +EE +AA +EE +ENDCHAR +STARTCHAR uni1109 +ENCODING 4361 +BBX 5 5 3 8 +BITMAP +20 +20 +20 +50 +88 +ENDCHAR +STARTCHAR uni110A +ENCODING 4362 +BBX 9 5 1 8 +BITMAP +2200 +2200 +2200 +5500 +8880 +ENDCHAR +STARTCHAR uni110B +ENCODING 4363 +BBX 5 5 3 8 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni110C +ENCODING 4364 +BBX 7 5 2 8 +BITMAP +FE +04 +08 +34 +C2 +ENDCHAR +STARTCHAR uni110D +ENCODING 4365 +BBX 8 5 2 7 +BITMAP +EF +22 +54 +8A +11 +ENDCHAR +STARTCHAR uni110E +ENCODING 4366 +BBX 7 6 2 8 +BITMAP +38 +00 +FE +08 +34 +C2 +ENDCHAR +STARTCHAR uni110F +ENCODING 4367 +BBX 7 5 2 8 +BITMAP +FE +02 +FE +02 +02 +ENDCHAR +STARTCHAR uni1110 +ENCODING 4368 +BBX 7 5 2 8 +BITMAP +FE +80 +FE +80 +FE +ENDCHAR +STARTCHAR uni1111 +ENCODING 4369 +BBX 8 5 1 8 +BITMAP +FF +24 +24 +24 +FF +ENDCHAR +STARTCHAR uni1112 +ENCODING 4370 +BBX 7 9 2 4 +BITMAP +38 +00 +FE +00 +7C +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni1113 +ENCODING 4371 +BBX 12 5 2 8 +BITMAP +87F0 +8010 +8010 +8010 +FE10 +ENDCHAR +STARTCHAR uni1114 +ENCODING 4372 +BBX 12 5 2 8 +BITMAP +8100 +8100 +8100 +8100 +F9F0 +ENDCHAR +STARTCHAR uni1115 +ENCODING 4373 +BBX 12 5 2 8 +BITMAP +81F0 +8100 +8100 +8100 +F9F0 +ENDCHAR +STARTCHAR uni1116 +ENCODING 4374 +BBX 12 5 2 8 +BITMAP +8110 +8110 +81F0 +8110 +F9F0 +ENDCHAR +STARTCHAR uni1117 +ENCODING 4375 +BBX 12 5 2 8 +BITMAP +F9F0 +8010 +8010 +8010 +F810 +ENDCHAR +STARTCHAR uni1118 +ENCODING 4376 +BBX 12 5 2 7 +BITMAP +F900 +0900 +F900 +8100 +F9F0 +ENDCHAR +STARTCHAR uni1119 +ENCODING 4377 +BBX 12 5 2 7 +BITMAP +F9F0 +0810 +F9F0 +8100 +F9F0 +ENDCHAR +STARTCHAR uni111A +ENCODING 4378 +BBX 12 5 2 7 +BITMAP +F8C0 +0BF0 +F8C0 +8120 +F8C0 +ENDCHAR +STARTCHAR uni111B +ENCODING 4379 +BBX 10 9 3 3 +BITMAP +FFC0 +0040 +FFC0 +8000 +FFC0 +1E00 +2100 +2100 +1E00 +ENDCHAR +STARTCHAR uni111C +ENCODING 4380 +BBX 12 5 2 8 +BITMAP +F910 +8910 +89F0 +8910 +F9F0 +ENDCHAR +STARTCHAR uni111D +ENCODING 4381 +BBX 11 13 3 0 +BITMAP +FFE0 +8020 +8020 +8020 +FFE0 +0000 +0000 +0000 +1F00 +2080 +2080 +2080 +1F00 +ENDCHAR +STARTCHAR uni111E +ENCODING 4382 +BBX 12 5 2 8 +BITMAP +89F0 +8810 +F810 +8810 +F810 +ENDCHAR +STARTCHAR uni111F +ENCODING 4383 +BBX 12 5 2 8 +BITMAP +8900 +8900 +F900 +8900 +F9F0 +ENDCHAR +STARTCHAR uni1120 +ENCODING 4384 +BBX 12 5 2 8 +BITMAP +89F0 +8900 +F900 +8900 +F9F0 +ENDCHAR +STARTCHAR uni1121 +ENCODING 4385 +BBX 12 5 2 8 +BITMAP +8840 +8840 +F840 +88A0 +F910 +ENDCHAR +STARTCHAR uni1122 +ENCODING 4386 +BBX 14 5 1 8 +BITMAP +913C +9104 +F104 +9284 +F444 +ENDCHAR +STARTCHAR uni1123 +ENCODING 4387 +BBX 14 5 1 8 +BITMAP +911C +9110 +F110 +9290 +F45C +ENDCHAR +STARTCHAR uni1124 +ENCODING 4388 +BBX 13 5 1 8 +BITMAP +9248 +9248 +F278 +9548 +F8F8 +ENDCHAR +STARTCHAR uni1125 +ENCODING 4389 +BBX 14 5 1 8 +BITMAP +9110 +9110 +F110 +92A8 +F444 +ENDCHAR +STARTCHAR uni1126 +ENCODING 4390 +BBX 14 5 1 8 +BITMAP +927C +9208 +F210 +9528 +F8C4 +ENDCHAR +STARTCHAR uni1127 +ENCODING 4391 +BBX 12 5 2 8 +BITMAP +89F0 +8820 +F840 +88A0 +F910 +ENDCHAR +STARTCHAR uni1128 +ENCODING 4392 +BBX 12 6 2 8 +BITMAP +00E0 +8800 +89F0 +F840 +88A0 +F910 +ENDCHAR +STARTCHAR uni1129 +ENCODING 4393 +BBX 12 5 2 8 +BITMAP +89F0 +8900 +F9F0 +8900 +F9F0 +ENDCHAR +STARTCHAR uni112A +ENCODING 4394 +BBX 12 5 2 8 +BITMAP +89F0 +88A0 +F8A0 +88A0 +F9F0 +ENDCHAR +STARTCHAR uni112B +ENCODING 4395 +BBX 9 7 4 6 +BITMAP +8080 +FF80 +8080 +FF80 +1C00 +2200 +1C00 +ENDCHAR +STARTCHAR uni112C +ENCODING 4396 +BBX 12 7 2 6 +BITMAP +8910 +F9F0 +8910 +F9F0 +0F00 +1080 +0F00 +ENDCHAR +STARTCHAR uni112D +ENCODING 4397 +BBX 11 5 3 8 +BITMAP +23E0 +2020 +2020 +5020 +8820 +ENDCHAR +STARTCHAR uni112E +ENCODING 4398 +BBX 11 5 3 8 +BITMAP +2200 +2200 +2200 +5200 +8BE0 +ENDCHAR +STARTCHAR uni112F +ENCODING 4399 +BBX 11 5 3 8 +BITMAP +23E0 +2200 +2200 +5200 +8BE0 +ENDCHAR +STARTCHAR uni1130 +ENCODING 4400 +BBX 11 5 3 8 +BITMAP +23E0 +2020 +23E0 +5200 +8BE0 +ENDCHAR +STARTCHAR uni1131 +ENCODING 4401 +BBX 11 5 3 8 +BITMAP +23E0 +2220 +2220 +5220 +8BE0 +ENDCHAR +STARTCHAR uni1132 +ENCODING 4402 +BBX 11 5 3 8 +BITMAP +2220 +2220 +23E0 +5220 +8BE0 +ENDCHAR +STARTCHAR uni1133 +ENCODING 4403 +BBX 14 5 1 8 +BITMAP +225C +2244 +23C4 +5244 +8BC4 +ENDCHAR +STARTCHAR uni1134 +ENCODING 4404 +BBX 13 5 2 8 +BITMAP +2220 +2220 +2220 +5550 +8888 +ENDCHAR +STARTCHAR uni1135 +ENCODING 4405 +BBX 11 5 3 8 +BITMAP +21C0 +2220 +2220 +5220 +89C0 +ENDCHAR +STARTCHAR uni1136 +ENCODING 4406 +BBX 11 5 3 8 +BITMAP +23E0 +2040 +2080 +5140 +8A20 +ENDCHAR +STARTCHAR uni1137 +ENCODING 4407 +BBX 11 6 3 8 +BITMAP +01C0 +2000 +23E0 +2080 +5140 +8A20 +ENDCHAR +STARTCHAR uni1138 +ENCODING 4408 +BBX 11 5 3 8 +BITMAP +23E0 +2020 +23E0 +5020 +8820 +ENDCHAR +STARTCHAR uni1139 +ENCODING 4409 +BBX 11 5 3 8 +BITMAP +23E0 +2200 +23E0 +5200 +8BE0 +ENDCHAR +STARTCHAR uni113A +ENCODING 4410 +BBX 11 5 3 8 +BITMAP +23E0 +2140 +2140 +5140 +8BE0 +ENDCHAR +STARTCHAR uni113B +ENCODING 4411 +BBX 11 5 3 8 +BITMAP +2180 +27E0 +2180 +5240 +8980 +ENDCHAR +STARTCHAR uni113C +ENCODING 4412 +BBX 7 5 3 8 +BITMAP +02 +02 +0C +34 +C2 +ENDCHAR +STARTCHAR uni113D +ENCODING 4413 +BBX 10 5 3 8 +BITMAP +0900 +0900 +1500 +2280 +CC40 +ENDCHAR +STARTCHAR uni113E +ENCODING 4414 +BBX 7 5 3 8 +BITMAP +04 +04 +08 +34 +C2 +ENDCHAR +STARTCHAR uni113F +ENCODING 4415 +BBX 11 5 3 8 +BITMAP +2400 +2400 +2A00 +5180 +8C60 +ENDCHAR +STARTCHAR uni1140 +ENCODING 4416 +BBX 9 5 2 8 +BITMAP +0800 +1400 +2200 +4100 +FF80 +ENDCHAR +STARTCHAR uni1141 +ENCODING 4417 +BBX 11 5 3 8 +BITMAP +73E0 +8820 +8820 +8820 +7020 +ENDCHAR +STARTCHAR uni1142 +ENCODING 4418 +BBX 11 5 3 8 +BITMAP +71E0 +8900 +8900 +8900 +71E0 +ENDCHAR +STARTCHAR uni1143 +ENCODING 4419 +BBX 12 5 3 8 +BITMAP +71F0 +8910 +8910 +8910 +71F0 +ENDCHAR +STARTCHAR uni1144 +ENCODING 4420 +BBX 11 5 3 8 +BITMAP +7120 +8920 +89E0 +8920 +71E0 +ENDCHAR +STARTCHAR uni1145 +ENCODING 4421 +BBX 12 5 3 8 +BITMAP +7040 +8840 +8840 +88A0 +7110 +ENDCHAR +STARTCHAR uni1146 +ENCODING 4422 +BBX 13 5 1 8 +BITMAP +7040 +88A0 +8910 +8A08 +73F8 +ENDCHAR +STARTCHAR uni1147 +ENCODING 4423 +BBX 11 5 3 8 +BITMAP +71C0 +8A20 +8A20 +8A20 +71C0 +ENDCHAR +STARTCHAR uni1148 +ENCODING 4424 +BBX 11 5 3 8 +BITMAP +73E0 +8840 +8880 +8940 +7220 +ENDCHAR +STARTCHAR uni1149 +ENCODING 4425 +BBX 11 6 3 8 +BITMAP +01C0 +7000 +8BE0 +8880 +8940 +7220 +ENDCHAR +STARTCHAR uni114A +ENCODING 4426 +BBX 11 5 3 8 +BITMAP +71E0 +8900 +89E0 +8900 +71E0 +ENDCHAR +STARTCHAR uni114B +ENCODING 4427 +BBX 11 5 3 8 +BITMAP +73E0 +8940 +8940 +8940 +73E0 +ENDCHAR +STARTCHAR uni114C +ENCODING 4428 +BBX 5 5 3 8 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni114D +ENCODING 4429 +BBX 12 5 2 8 +BITMAP +F8E0 +1110 +2110 +5110 +88E0 +ENDCHAR +STARTCHAR uni114E +ENCODING 4430 +BBX 9 5 2 8 +BITMAP +FF80 +0300 +0E00 +3100 +C080 +ENDCHAR +STARTCHAR uni114F +ENCODING 4431 +BBX 11 5 2 7 +BITMAP +7FC0 +0480 +0A80 +3140 +C620 +ENDCHAR +STARTCHAR uni1150 +ENCODING 4432 +BBX 9 5 3 8 +BITMAP +FF80 +0300 +0E00 +3100 +C080 +ENDCHAR +STARTCHAR uni1151 +ENCODING 4433 +BBX 12 5 2 7 +BITMAP +FF80 +2100 +5280 +8C40 +0630 +ENDCHAR +STARTCHAR uni1152 +ENCODING 4434 +BBX 12 6 2 8 +BITMAP +7000 +01F0 +F810 +21F0 +5010 +8810 +ENDCHAR +STARTCHAR uni1153 +ENCODING 4435 +BBX 12 6 2 8 +BITMAP +6000 +00C0 +FBF0 +20C0 +5120 +88C0 +ENDCHAR +STARTCHAR uni1154 +ENCODING 4436 +BBX 9 6 2 8 +BITMAP +1E00 +0000 +7F00 +0600 +1900 +E080 +ENDCHAR +STARTCHAR uni1155 +ENCODING 4437 +BBX 10 6 2 8 +BITMAP +3800 +0000 +FC00 +0800 +3600 +C1C0 +ENDCHAR +STARTCHAR uni1156 +ENCODING 4438 +BBX 12 5 2 8 +BITMAP +F910 +5110 +51F0 +5110 +F9F0 +ENDCHAR +STARTCHAR uni1157 +ENCODING 4439 +BBX 10 6 3 7 +BITMAP +FFC0 +2100 +FFC0 +1E00 +2100 +1E00 +ENDCHAR +STARTCHAR uni1158 +ENCODING 4440 +BBX 13 6 1 7 +BITMAP +3060 +FDF8 +38E0 +4510 +4510 +38E0 +ENDCHAR +STARTCHAR uni1159 +ENCODING 4441 +BBX 9 6 3 8 +BITMAP +FF80 +0800 +3E00 +4100 +4100 +3E00 +ENDCHAR +STARTCHAR uni115A +ENCODING 4442 +BBX 12 5 2 8 +BITMAP +F9F0 +0900 +0900 +0900 +09F0 +ENDCHAR +STARTCHAR uni115B +ENCODING 4443 +BBX 11 5 3 8 +BITMAP +8080 +8080 +8080 +8140 +FA20 +ENDCHAR +STARTCHAR uni115C +ENCODING 4444 +BBX 11 5 3 8 +BITMAP +83E0 +8040 +8080 +8140 +FA20 +ENDCHAR +STARTCHAR uni115D +ENCODING 4445 +BBX 11 5 3 8 +BITMAP +8380 +8FE0 +8380 +8440 +F380 +ENDCHAR +STARTCHAR uni115E +ENCODING 4446 +BBX 12 5 2 7 +BITMAP +F9F0 +8010 +81F0 +8100 +F9F0 +ENDCHAR +STARTCHAR uni115F +ENCODING 4447 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +2239 +A240 +3E41 +A240 +2239 +8000 +03E1 +8200 +0381 +8200 +0201 +8000 +5555 +ENDCHAR +STARTCHAR uni1160 +ENCODING 4448 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +2279 +A210 +3E11 +A250 +2221 +8000 +03E1 +8200 +0381 +8200 +0201 +8000 +5555 +ENDCHAR +STARTCHAR uni1161 +ENCODING 4449 +BBX 4 7 11 6 +BITMAP +80 +80 +80 +F0 +80 +80 +80 +ENDCHAR +STARTCHAR uni1162 +ENCODING 4450 +BBX 4 7 11 6 +BITMAP +90 +90 +90 +F0 +90 +90 +90 +ENDCHAR +STARTCHAR uni1163 +ENCODING 4451 +BBX 4 7 11 6 +BITMAP +80 +80 +80 +F0 +80 +F0 +80 +ENDCHAR +STARTCHAR uni1164 +ENCODING 4452 +BBX 4 7 11 6 +BITMAP +90 +90 +90 +F0 +90 +F0 +90 +ENDCHAR +STARTCHAR uni1165 +ENCODING 4453 +BBX 3 7 9 6 +BITMAP +20 +20 +20 +E0 +20 +20 +20 +ENDCHAR +STARTCHAR uni1166 +ENCODING 4454 +BBX 6 7 9 6 +BITMAP +24 +24 +24 +E4 +24 +24 +24 +ENDCHAR +STARTCHAR uni1167 +ENCODING 4455 +BBX 3 7 9 6 +BITMAP +20 +20 +20 +E0 +20 +E0 +20 +ENDCHAR +STARTCHAR uni1168 +ENCODING 4456 +BBX 6 7 9 6 +BITMAP +24 +24 +24 +E4 +24 +E4 +24 +ENDCHAR +STARTCHAR uni1169 +ENCODING 4457 +BBX 13 3 2 2 +BITMAP +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni116A +ENCODING 4458 +BBX 13 7 2 6 +BITMAP +0040 +0040 +0040 +0078 +1040 +1040 +FFC0 +ENDCHAR +STARTCHAR uni116B +ENCODING 4459 +BBX 13 7 2 6 +BITMAP +0048 +0048 +0048 +0078 +1048 +1048 +FFC8 +ENDCHAR +STARTCHAR uni116C +ENCODING 4460 +BBX 10 7 2 6 +BITMAP +0040 +0040 +0040 +0040 +1040 +1040 +FFC0 +ENDCHAR +STARTCHAR uni116D +ENCODING 4461 +BBX 13 3 2 6 +BITMAP +0900 +0900 +FFF8 +ENDCHAR +STARTCHAR uni116E +ENCODING 4462 +BBX 13 3 2 4 +BITMAP +FFF8 +0200 +0200 +ENDCHAR +STARTCHAR uni116F +ENCODING 4463 +BBX 10 10 2 3 +BITMAP +0040 +0040 +0040 +0040 +0040 +0040 +FE40 +1040 +13C0 +1040 +ENDCHAR +STARTCHAR uni1170 +ENCODING 4464 +BBX 13 10 2 3 +BITMAP +0048 +0048 +0048 +0048 +0048 +0048 +FE48 +1048 +13C8 +1048 +ENDCHAR +STARTCHAR uni1171 +ENCODING 4465 +BBX 10 10 2 3 +BITMAP +0040 +0040 +0040 +0040 +0040 +0040 +FFC0 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni1172 +ENCODING 4466 +BBX 13 3 2 4 +BITMAP +FFF8 +0880 +0880 +ENDCHAR +STARTCHAR uni1173 +ENCODING 4467 +BBX 13 1 2 6 +BITMAP +FFF8 +ENDCHAR +STARTCHAR uni1174 +ENCODING 4468 +BBX 10 13 2 0 +BITMAP +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +FFC0 +0040 +0040 +ENDCHAR +STARTCHAR uni1175 +ENCODING 4469 +BBX 1 7 11 6 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1176 +ENCODING 4470 +BBX 11 7 2 2 +BITMAP +0080 +0080 +0080 +00E0 +0280 +0280 +FFE0 +ENDCHAR +STARTCHAR uni1177 +ENCODING 4471 +BBX 13 9 2 4 +BITMAP +0040 +0040 +0040 +0070 +0040 +0040 +FFF8 +0200 +0200 +ENDCHAR +STARTCHAR uni1178 +ENCODING 4472 +BBX 13 8 2 2 +BITMAP +0020 +0020 +0038 +0020 +0038 +0220 +0220 +FFF8 +ENDCHAR +STARTCHAR uni1179 +ENCODING 4473 +BBX 13 8 2 6 +BITMAP +0020 +0020 +0038 +0020 +0038 +0920 +0920 +FFF8 +ENDCHAR +STARTCHAR uni117A +ENCODING 4474 +BBX 13 9 2 2 +BITMAP +0020 +0020 +0020 +00E0 +0020 +0020 +0220 +0220 +FFF8 +ENDCHAR +STARTCHAR uni117B +ENCODING 4475 +BBX 13 10 2 2 +BITMAP +0010 +0010 +0010 +0070 +0010 +0010 +0010 +FFF8 +0200 +0200 +ENDCHAR +STARTCHAR uni117C +ENCODING 4476 +BBX 10 9 2 5 +BITMAP +0080 +0080 +0080 +0380 +0080 +0080 +0080 +0080 +FFC0 +ENDCHAR +STARTCHAR uni117D +ENCODING 4477 +BBX 13 8 2 2 +BITMAP +0020 +0020 +00E0 +0020 +00E0 +0220 +0220 +FFF8 +ENDCHAR +STARTCHAR uni117E +ENCODING 4478 +BBX 13 10 2 4 +BITMAP +0020 +0020 +0020 +00E0 +0020 +00E0 +0020 +FFF8 +0200 +0200 +ENDCHAR +STARTCHAR uni117F +ENCODING 4479 +BBX 13 9 2 3 +BITMAP +0008 +0008 +0008 +0008 +0008 +FFF8 +0208 +0238 +0008 +ENDCHAR +STARTCHAR uni1180 +ENCODING 4480 +BBX 13 10 2 1 +BITMAP +0048 +0048 +0048 +01C8 +0048 +0048 +0448 +0448 +FFC8 +0048 +ENDCHAR +STARTCHAR uni1181 +ENCODING 4481 +BBX 13 10 2 1 +BITMAP +0048 +0048 +0048 +01C8 +0048 +0048 +05C8 +0448 +FFC8 +0048 +ENDCHAR +STARTCHAR uni1182 +ENCODING 4482 +BBX 13 4 2 3 +BITMAP +0200 +FFF8 +0200 +FFF8 +ENDCHAR +STARTCHAR uni1183 +ENCODING 4483 +BBX 13 7 2 1 +BITMAP +0200 +0200 +FFF8 +0000 +FFF8 +0200 +0200 +ENDCHAR +STARTCHAR uni1184 +ENCODING 4484 +BBX 13 7 2 5 +BITMAP +0040 +0040 +0078 +2440 +2440 +FFF8 +0040 +ENDCHAR +STARTCHAR uni1185 +ENCODING 4485 +BBX 12 7 2 6 +BITMAP +0290 +0290 +0290 +12F0 +1290 +13F0 +FE90 +ENDCHAR +STARTCHAR uni1186 +ENCODING 4486 +BBX 13 9 2 5 +BITMAP +0008 +0008 +0038 +0008 +0038 +1208 +1208 +FFF8 +0008 +ENDCHAR +STARTCHAR uni1187 +ENCODING 4487 +BBX 13 4 2 5 +BITMAP +0880 +FFF8 +0200 +FFF8 +ENDCHAR +STARTCHAR uni1188 +ENCODING 4488 +BBX 13 7 2 5 +BITMAP +0008 +0008 +0008 +0908 +0908 +FFF8 +0008 +ENDCHAR +STARTCHAR uni1189 +ENCODING 4489 +BBX 13 7 2 3 +BITMAP +0020 +0020 +0020 +FFF8 +0820 +0820 +0020 +ENDCHAR +STARTCHAR uni118A +ENCODING 4490 +BBX 13 7 2 3 +BITMAP +0048 +0048 +0048 +FFF8 +0848 +0848 +0048 +ENDCHAR +STARTCHAR uni118B +ENCODING 4491 +BBX 13 9 2 4 +BITMAP +0020 +0020 +0020 +0020 +7F20 +0820 +09E0 +0820 +FFF8 +ENDCHAR +STARTCHAR uni118C +ENCODING 4492 +BBX 13 12 2 1 +BITMAP +0028 +0028 +0028 +0028 +0028 +0028 +FFA8 +0828 +08E8 +0028 +00E8 +0028 +ENDCHAR +STARTCHAR uni118D +ENCODING 4493 +BBX 13 4 2 3 +BITMAP +FFF8 +0200 +FFF8 +0200 +ENDCHAR +STARTCHAR uni118E +ENCODING 4494 +BBX 13 10 2 3 +BITMAP +0020 +0020 +0020 +0020 +0020 +0020 +FFF8 +0920 +0920 +0020 +ENDCHAR +STARTCHAR uni118F +ENCODING 4495 +BBX 14 10 2 3 +BITMAP +0004 +0004 +0004 +0004 +0004 +0004 +FFFC +0884 +08BC +0004 +ENDCHAR +STARTCHAR uni1190 +ENCODING 4496 +BBX 13 9 2 3 +BITMAP +0028 +0028 +0028 +0028 +0028 +FFE8 +1228 +12E8 +0028 +ENDCHAR +STARTCHAR uni1191 +ENCODING 4497 +BBX 13 11 2 1 +BITMAP +0008 +0008 +0008 +0008 +0008 +FFF8 +0908 +0938 +0008 +0038 +0008 +ENDCHAR +STARTCHAR uni1192 +ENCODING 4498 +BBX 13 11 2 1 +BITMAP +0028 +0028 +0028 +0028 +0028 +FFE8 +1228 +12E8 +0028 +00E8 +0028 +ENDCHAR +STARTCHAR uni1193 +ENCODING 4499 +BBX 13 4 2 3 +BITMAP +FFF8 +0880 +FFF8 +0200 +ENDCHAR +STARTCHAR uni1194 +ENCODING 4500 +BBX 14 9 2 3 +BITMAP +0004 +0004 +0004 +0004 +0004 +FFFC +0884 +0884 +0004 +ENDCHAR +STARTCHAR uni1195 +ENCODING 4501 +BBX 13 4 2 3 +BITMAP +FFF8 +0000 +FFF8 +0200 +ENDCHAR +STARTCHAR uni1196 +ENCODING 4502 +BBX 13 3 2 4 +BITMAP +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni1197 +ENCODING 4503 +BBX 13 11 2 3 +BITMAP +0010 +0010 +0010 +0010 +0010 +0010 +0010 +3FF0 +0010 +FFF8 +0200 +ENDCHAR +STARTCHAR uni1198 +ENCODING 4504 +BBX 6 7 9 6 +BITMAP +90 +90 +90 +9C +90 +90 +90 +ENDCHAR +STARTCHAR uni1199 +ENCODING 4505 +BBX 6 7 9 6 +BITMAP +90 +90 +9C +90 +9C +90 +90 +ENDCHAR +STARTCHAR uni119A +ENCODING 4506 +BBX 13 9 2 2 +BITMAP +0010 +0010 +0010 +0010 +0010 +0010 +0210 +0210 +FFF8 +ENDCHAR +STARTCHAR uni119B +ENCODING 4507 +BBX 13 10 2 4 +BITMAP +0010 +0010 +0010 +0010 +0010 +0010 +0010 +FFF8 +0200 +0200 +ENDCHAR +STARTCHAR uni119C +ENCODING 4508 +BBX 13 7 2 6 +BITMAP +0010 +0010 +0010 +0010 +0010 +0010 +FFF8 +ENDCHAR +STARTCHAR uni119D +ENCODING 4509 +BBX 4 11 8 2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +00 +C0 +20 +10 +ENDCHAR +STARTCHAR uni119E +ENCODING 4510 +BBX 4 3 8 2 +BITMAP +C0 +20 +10 +ENDCHAR +STARTCHAR uni119F +ENCODING 4511 +BBX 8 7 4 6 +BITMAP +01 +01 +01 +07 +C1 +21 +11 +ENDCHAR +STARTCHAR uni11A0 +ENCODING 4512 +BBX 13 6 2 3 +BITMAP +0180 +0040 +0020 +FFF8 +0200 +0200 +ENDCHAR +STARTCHAR uni11A1 +ENCODING 4513 +BBX 9 7 3 6 +BITMAP +0080 +0080 +0080 +0080 +C080 +2080 +1080 +ENDCHAR +STARTCHAR uni11A2 +ENCODING 4514 +BBX 10 3 3 6 +BITMAP +C300 +2080 +1040 +ENDCHAR +STARTCHAR uni11A3 +ENCODING 4515 +BBX 11 7 2 2 +BITMAP +0080 +0080 +0080 +00E0 +0080 +0080 +FFE0 +ENDCHAR +STARTCHAR uni11A4 +ENCODING 4516 +BBX 13 10 2 0 +BITMAP +0020 +0020 +0038 +0020 +0038 +0020 +0020 +FFF8 +0200 +0200 +ENDCHAR +STARTCHAR uni11A5 +ENCODING 4517 +BBX 7 9 8 1 +BITMAP +28 +28 +2E +E8 +28 +EE +28 +28 +28 +ENDCHAR +STARTCHAR uni11A6 +ENCODING 4518 +BBX 13 7 2 5 +BITMAP +0040 +0040 +0078 +0440 +0440 +FFF8 +0040 +ENDCHAR +STARTCHAR uni11A7 +ENCODING 4519 +BBX 12 7 2 6 +BITMAP +0090 +0090 +0090 +00F0 +1090 +13F0 +FC90 +ENDCHAR +STARTCHAR uni11A8 +ENCODING 4520 +BBX 7 5 5 0 +BITMAP +FE +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni11A9 +ENCODING 4521 +BBX 9 5 4 0 +BITMAP +F780 +1080 +1080 +1080 +1080 +ENDCHAR +STARTCHAR uni11AA +ENCODING 4522 +BBX 10 5 4 0 +BITMAP +F100 +1100 +1100 +1280 +1440 +ENDCHAR +STARTCHAR uni11AB +ENCODING 4523 +BBX 7 5 5 0 +BITMAP +80 +80 +80 +80 +FE +ENDCHAR +STARTCHAR uni11AC +ENCODING 4524 +BBX 9 5 4 0 +BITMAP +8F80 +8200 +8200 +8500 +F880 +ENDCHAR +STARTCHAR uni11AD +ENCODING 4525 +BBX 10 5 4 0 +BITMAP +8300 +8FC0 +8300 +8480 +F300 +ENDCHAR +STARTCHAR uni11AE +ENCODING 4526 +BBX 7 5 5 0 +BITMAP +FE +80 +80 +80 +FE +ENDCHAR +STARTCHAR uni11AF +ENCODING 4527 +BBX 7 5 5 0 +BITMAP +FE +02 +FE +80 +FE +ENDCHAR +STARTCHAR uni11B0 +ENCODING 4528 +BBX 9 5 4 0 +BITMAP +F780 +1080 +F080 +8080 +F080 +ENDCHAR +STARTCHAR uni11B1 +ENCODING 4529 +BBX 9 5 3 0 +BITMAP +F780 +1480 +F480 +8480 +F780 +ENDCHAR +STARTCHAR uni11B2 +ENCODING 4530 +BBX 9 5 3 0 +BITMAP +F480 +1480 +F780 +8480 +F780 +ENDCHAR +STARTCHAR uni11B3 +ENCODING 4531 +BBX 10 5 3 0 +BITMAP +F100 +1100 +F100 +8280 +F440 +ENDCHAR +STARTCHAR uni11B4 +ENCODING 4532 +BBX 9 5 3 0 +BITMAP +F780 +1400 +F780 +8400 +F780 +ENDCHAR +STARTCHAR uni11B5 +ENCODING 4533 +BBX 10 5 3 0 +BITMAP +F7C0 +1280 +F280 +8280 +F7C0 +ENDCHAR +STARTCHAR uni11B6 +ENCODING 4534 +BBX 10 5 3 0 +BITMAP +F300 +1FC0 +F300 +8480 +F300 +ENDCHAR +STARTCHAR uni11B7 +ENCODING 4535 +BBX 7 5 5 0 +BITMAP +FE +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni11B8 +ENCODING 4536 +BBX 7 5 5 0 +BITMAP +82 +82 +FE +82 +FE +ENDCHAR +STARTCHAR uni11B9 +ENCODING 4537 +BBX 10 5 3 0 +BITMAP +9100 +9100 +F100 +9280 +F440 +ENDCHAR +STARTCHAR uni11BA +ENCODING 4538 +BBX 9 5 3 0 +BITMAP +0200 +0200 +0600 +1900 +E080 +ENDCHAR +STARTCHAR uni11BB +ENCODING 4539 +BBX 11 5 2 0 +BITMAP +0480 +0480 +0E80 +3140 +C620 +ENDCHAR +STARTCHAR uni11BC +ENCODING 4540 +BBX 5 5 6 0 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni11BD +ENCODING 4541 +BBX 7 5 5 0 +BITMAP +FE +10 +10 +28 +44 +ENDCHAR +STARTCHAR uni11BE +ENCODING 4542 +BBX 9 6 4 -1 +BITMAP +1E00 +0000 +7F80 +0400 +3A00 +C180 +ENDCHAR +STARTCHAR uni11BF +ENCODING 4543 +BBX 7 5 5 0 +BITMAP +FE +02 +FE +02 +02 +ENDCHAR +STARTCHAR uni11C0 +ENCODING 4544 +BBX 7 5 5 0 +BITMAP +FE +80 +FE +80 +FE +ENDCHAR +STARTCHAR uni11C1 +ENCODING 4545 +BBX 8 5 4 0 +BITMAP +FF +24 +24 +24 +FF +ENDCHAR +STARTCHAR uni11C2 +ENCODING 4546 +BBX 7 7 5 0 +BITMAP +38 +00 +FE +00 +38 +44 +38 +ENDCHAR +STARTCHAR uni11C3 +ENCODING 4547 +BBX 13 5 1 0 +BITMAP +FCF8 +0408 +04F8 +0480 +04F8 +ENDCHAR +STARTCHAR uni11C4 +ENCODING 4548 +BBX 14 5 1 1 +BITMAP +F13C +1104 +1104 +1284 +1444 +ENDCHAR +STARTCHAR uni11C5 +ENCODING 4549 +BBX 12 5 2 0 +BITMAP +87F0 +8010 +8010 +8010 +FE10 +ENDCHAR +STARTCHAR uni11C6 +ENCODING 4550 +BBX 12 5 2 0 +BITMAP +81F0 +8100 +8100 +8100 +F9F0 +ENDCHAR +STARTCHAR uni11C7 +ENCODING 4551 +BBX 11 5 2 0 +BITMAP +8080 +8080 +8080 +8140 +FA20 +ENDCHAR +STARTCHAR uni11C8 +ENCODING 4552 +BBX 14 5 1 0 +BITMAP +8020 +8050 +8088 +8104 +F9FC +ENDCHAR +STARTCHAR uni11C9 +ENCODING 4553 +BBX 12 5 2 0 +BITMAP +81F0 +8100 +81F0 +8100 +F9F0 +ENDCHAR +STARTCHAR uni11CA +ENCODING 4554 +BBX 12 5 2 0 +BITMAP +F9F0 +8010 +8010 +8010 +F810 +ENDCHAR +STARTCHAR uni11CB +ENCODING 4555 +BBX 12 5 2 0 +BITMAP +F9F0 +8010 +81F0 +8100 +F9F0 +ENDCHAR +STARTCHAR uni11CC +ENCODING 4556 +BBX 15 5 1 0 +BITMAP +F788 +1088 +F088 +8094 +F0A2 +ENDCHAR +STARTCHAR uni11CD +ENCODING 4557 +BBX 12 5 2 0 +BITMAP +F900 +0900 +F900 +8100 +F9F0 +ENDCHAR +STARTCHAR uni11CE +ENCODING 4558 +BBX 12 5 2 0 +BITMAP +F9F0 +0900 +F900 +8100 +F9F0 +ENDCHAR +STARTCHAR uni11CF +ENCODING 4559 +BBX 16 5 0 0 +BITMAP +F78C +143F +F40C +8412 +F78C +ENDCHAR +STARTCHAR uni11D0 +ENCODING 4560 +BBX 12 5 2 0 +BITMAP +F9F0 +0810 +F9F0 +8100 +F9F0 +ENDCHAR +STARTCHAR uni11D1 +ENCODING 4561 +BBX 14 5 1 0 +BITMAP +F7BC +1484 +F484 +8484 +F784 +ENDCHAR +STARTCHAR uni11D2 +ENCODING 4562 +BBX 15 5 1 0 +BITMAP +F788 +1488 +F488 +8494 +F7A2 +ENDCHAR +STARTCHAR uni11D3 +ENCODING 4563 +BBX 15 5 1 0 +BITMAP +F488 +1488 +F788 +8494 +F7A2 +ENDCHAR +STARTCHAR uni11D4 +ENCODING 4564 +BBX 16 5 0 0 +BITMAP +F48C +14BF +F78C +8492 +F78C +ENDCHAR +STARTCHAR uni11D5 +ENCODING 4565 +BBX 11 7 2 0 +BITMAP +0120 +01E0 +F920 +09E0 +F8C0 +8120 +F8C0 +ENDCHAR +STARTCHAR uni11D6 +ENCODING 4566 +BBX 14 5 1 0 +BITMAP +F110 +1110 +F110 +82A8 +F444 +ENDCHAR +STARTCHAR uni11D7 +ENCODING 4567 +BBX 12 5 2 0 +BITMAP +F080 +1140 +F220 +8410 +F7F0 +ENDCHAR +STARTCHAR uni11D8 +ENCODING 4568 +BBX 12 5 2 0 +BITMAP +F9F0 +0810 +F9F0 +8010 +F810 +ENDCHAR +STARTCHAR uni11D9 +ENCODING 4569 +BBX 13 5 2 0 +BITMAP +F8E0 +0BF8 +F8E0 +8110 +F8E0 +ENDCHAR +STARTCHAR uni11DA +ENCODING 4570 +BBX 12 5 2 0 +BITMAP +F9F0 +8810 +8810 +8810 +F810 +ENDCHAR +STARTCHAR uni11DB +ENCODING 4571 +BBX 12 5 2 0 +BITMAP +F9F0 +8810 +89F0 +8900 +F9F0 +ENDCHAR +STARTCHAR uni11DC +ENCODING 4572 +BBX 12 5 2 0 +BITMAP +F910 +8910 +89F0 +8910 +F9F0 +ENDCHAR +STARTCHAR uni11DD +ENCODING 4573 +BBX 11 5 3 0 +BITMAP +F880 +8880 +8880 +8940 +FA20 +ENDCHAR +STARTCHAR uni11DE +ENCODING 4574 +BBX 15 5 1 0 +BITMAP +F888 +8888 +8888 +8954 +FA22 +ENDCHAR +STARTCHAR uni11DF +ENCODING 4575 +BBX 13 5 2 0 +BITMAP +F840 +88A0 +8910 +8A08 +FBF8 +ENDCHAR +STARTCHAR uni11E0 +ENCODING 4576 +BBX 13 6 2 0 +BITMAP +00E0 +F800 +8BF8 +8820 +88D0 +FB08 +ENDCHAR +STARTCHAR uni11E1 +ENCODING 4577 +BBX 13 5 2 0 +BITMAP +F8E0 +8BF8 +88E0 +8910 +F8E0 +ENDCHAR +STARTCHAR uni11E2 +ENCODING 4578 +BBX 7 7 4 0 +BITMAP +FE +82 +FE +00 +38 +44 +38 +ENDCHAR +STARTCHAR uni11E3 +ENCODING 4579 +BBX 12 5 2 0 +BITMAP +89F0 +8810 +F9F0 +8900 +F9F0 +ENDCHAR +STARTCHAR uni11E4 +ENCODING 4580 +BBX 12 5 2 0 +BITMAP +89F0 +88A0 +F8A0 +88A0 +F9F0 +ENDCHAR +STARTCHAR uni11E5 +ENCODING 4581 +BBX 13 5 2 0 +BITMAP +88E0 +8BF8 +F8E0 +8910 +F8E0 +ENDCHAR +STARTCHAR uni11E6 +ENCODING 4582 +BBX 7 7 5 0 +BITMAP +82 +FE +82 +FE +38 +44 +38 +ENDCHAR +STARTCHAR uni11E7 +ENCODING 4583 +BBX 10 5 3 0 +BITMAP +27C0 +2040 +2040 +5040 +8840 +ENDCHAR +STARTCHAR uni11E8 +ENCODING 4584 +BBX 11 5 3 0 +BITMAP +23E0 +2200 +2200 +5200 +8BE0 +ENDCHAR +STARTCHAR uni11E9 +ENCODING 4585 +BBX 11 5 2 0 +BITMAP +23E0 +2020 +23E0 +5200 +8BE0 +ENDCHAR +STARTCHAR uni11EA +ENCODING 4586 +BBX 11 5 3 0 +BITMAP +2220 +2220 +23E0 +5220 +8BE0 +ENDCHAR +STARTCHAR uni11EB +ENCODING 4587 +BBX 9 5 3 0 +BITMAP +0800 +1400 +2200 +4100 +FF80 +ENDCHAR +STARTCHAR uni11EC +ENCODING 4588 +BBX 11 5 3 0 +BITMAP +73E0 +8820 +8820 +8820 +7020 +ENDCHAR +STARTCHAR uni11ED +ENCODING 4589 +BBX 13 5 1 0 +BITMAP +73B8 +8888 +8888 +8888 +7088 +ENDCHAR +STARTCHAR uni11EE +ENCODING 4590 +BBX 12 5 2 0 +BITMAP +70E0 +8910 +8910 +8910 +70E0 +ENDCHAR +STARTCHAR uni11EF +ENCODING 4591 +BBX 12 5 2 0 +BITMAP +71F0 +8810 +89F0 +8810 +7010 +ENDCHAR +STARTCHAR uni11F0 +ENCODING 4592 +BBX 5 7 5 0 +BITMAP +20 +20 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni11F1 +ENCODING 4593 +BBX 11 5 2 0 +BITMAP +7080 +8880 +8880 +8940 +7220 +ENDCHAR +STARTCHAR uni11F2 +ENCODING 4594 +BBX 13 5 1 0 +BITMAP +7040 +88A0 +8910 +8A08 +73F8 +ENDCHAR +STARTCHAR uni11F3 +ENCODING 4595 +BBX 12 5 2 0 +BITMAP +F910 +5110 +51F0 +5110 +F9F0 +ENDCHAR +STARTCHAR uni11F4 +ENCODING 4596 +BBX 8 6 4 0 +BITMAP +FF +24 +FF +3C +42 +3C +ENDCHAR +STARTCHAR uni11F5 +ENCODING 4597 +BBX 13 5 1 0 +BITMAP +3880 +FE80 +3880 +4480 +38F8 +ENDCHAR +STARTCHAR uni11F6 +ENCODING 4598 +BBX 13 5 1 0 +BITMAP +38F8 +FE08 +38F8 +4480 +38F8 +ENDCHAR +STARTCHAR uni11F7 +ENCODING 4599 +BBX 13 5 1 0 +BITMAP +38F8 +FE88 +3888 +4488 +38F8 +ENDCHAR +STARTCHAR uni11F8 +ENCODING 4600 +BBX 13 5 1 0 +BITMAP +3888 +FE88 +38F8 +4488 +38F8 +ENDCHAR +STARTCHAR uni11F9 +ENCODING 4601 +BBX 7 5 4 0 +BITMAP +38 +FE +38 +44 +38 +ENDCHAR +STARTCHAR uni11FA +ENCODING 4602 +BBX 12 5 2 0 +BITMAP +F900 +0900 +0900 +0900 +09F0 +ENDCHAR +STARTCHAR uni11FB +ENCODING 4603 +BBX 12 5 2 0 +BITMAP +F910 +0910 +09F0 +0910 +09F0 +ENDCHAR +STARTCHAR uni11FC +ENCODING 4604 +BBX 13 6 2 0 +BITMAP +00E0 +F800 +0BF8 +0820 +08D0 +0B08 +ENDCHAR +STARTCHAR uni11FD +ENCODING 4605 +BBX 12 5 2 0 +BITMAP +F9F0 +0810 +09F0 +0810 +0810 +ENDCHAR +STARTCHAR uni11FE +ENCODING 4606 +BBX 13 5 2 0 +BITMAP +F8E0 +0BF8 +08E0 +0910 +08E0 +ENDCHAR +STARTCHAR uni11FF +ENCODING 4607 +BBX 12 5 2 0 +BITMAP +8100 +8100 +8100 +8100 +F9F0 +ENDCHAR +STARTCHAR uni1200 +ENCODING 4608 +BBX 8 11 2 0 +BITMAP +07 +C3 +C3 +C3 +C3 +C3 +C3 +C6 +C6 +7C +38 +ENDCHAR +STARTCHAR uni1201 +ENCODING 4609 +BBX 12 11 2 0 +BITMAP +0700 +C300 +C300 +C300 +C3F0 +C330 +C300 +C600 +C600 +7C00 +3800 +ENDCHAR +STARTCHAR uni1202 +ENCODING 4610 +BBX 8 12 4 0 +BITMAP +66 +C6 +C6 +C6 +C6 +7C +3C +0C +18 +30 +33 +3F +ENDCHAR +STARTCHAR uni1203 +ENCODING 4611 +BBX 7 12 4 0 +BITMAP +66 +C6 +C6 +C6 +C6 +7C +3C +0C +18 +30 +30 +30 +ENDCHAR +STARTCHAR uni1204 +ENCODING 4612 +BBX 7 12 4 0 +BITMAP +66 +C6 +C6 +C6 +C6 +7C +3C +0C +1C +34 +32 +3E +ENDCHAR +STARTCHAR uni1205 +ENCODING 4613 +BBX 9 11 3 0 +BITMAP +C380 +C180 +E180 +7180 +3180 +6180 +6180 +6180 +6300 +3F00 +1E00 +ENDCHAR +STARTCHAR uni1206 +ENCODING 4614 +BBX 11 11 2 0 +BITMAP +03C0 +C320 +C360 +C380 +C300 +C300 +C300 +C600 +C600 +7C00 +3800 +ENDCHAR +STARTCHAR uni1207 +ENCODING 4615 +BBX 14 11 1 0 +BITMAP +0078 +1864 +186C +1870 +D860 +F860 +D860 +18C0 +18C0 +0F80 +0700 +ENDCHAR +STARTCHAR uni1208 +ENCODING 4616 +BBX 7 12 4 0 +BITMAP +30 +30 +30 +78 +7C +CE +C6 +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni1209 +ENCODING 4617 +BBX 11 12 2 0 +BITMAP +3000 +3000 +3000 +7800 +7C00 +CE00 +C600 +C600 +C7E0 +C660 +C600 +C600 +ENDCHAR +STARTCHAR uni120A +ENCODING 4618 +BBX 11 12 2 0 +BITMAP +3000 +3000 +3000 +7800 +7C00 +CE00 +C600 +C600 +C600 +C600 +C660 +C7E0 +ENDCHAR +STARTCHAR uni120B +ENCODING 4619 +BBX 7 12 4 0 +BITMAP +30 +30 +30 +78 +7C +CE +C6 +C6 +C6 +06 +06 +06 +ENDCHAR +STARTCHAR uni120C +ENCODING 4620 +BBX 11 12 2 0 +BITMAP +3000 +3000 +3000 +7800 +7C00 +CE00 +C600 +C600 +C600 +C7C0 +C660 +C7C0 +ENDCHAR +STARTCHAR uni120D +ENCODING 4621 +BBX 8 12 3 0 +BITMAP +18 +18 +18 +3C +3E +67 +63 +C3 +C3 +F3 +DB +F3 +ENDCHAR +STARTCHAR uni120E +ENCODING 4622 +BBX 12 12 2 0 +BITMAP +3000 +3000 +3000 +7800 +7C00 +CE00 +C600 +C7E0 +C6B0 +C6E0 +C600 +C600 +ENDCHAR +STARTCHAR uni120F +ENCODING 4623 +BBX 11 14 4 -2 +BITMAP +3000 +3000 +3000 +7800 +7C00 +CE00 +C600 +C600 +C600 +0600 +0600 +0600 +3FC0 +70E0 +ENDCHAR +STARTCHAR uni1210 +ENCODING 4624 +BBX 10 12 3 0 +BITMAP +0C00 +0C00 +0C00 +0C00 +0C00 +3F00 +6D80 +6D80 +CCC0 +CCC0 +CCC0 +CCC0 +ENDCHAR +STARTCHAR uni1211 +ENCODING 4625 +BBX 14 12 1 0 +BITMAP +0C00 +0C00 +0C00 +0C00 +0C00 +3F00 +6D80 +6D80 +CCFC +CCCC +CCC0 +CCC0 +ENDCHAR +STARTCHAR uni1212 +ENCODING 4626 +BBX 14 12 1 0 +BITMAP +0C00 +0C00 +0C00 +0C00 +0C00 +3F00 +6D80 +6D80 +CCC0 +CCC0 +CCCC +CCFC +ENDCHAR +STARTCHAR uni1213 +ENCODING 4627 +BBX 10 12 3 0 +BITMAP +0C00 +0C00 +0C00 +0C00 +0C00 +3F00 +6D80 +6D80 +CCC0 +00C0 +00C0 +00C0 +ENDCHAR +STARTCHAR uni1214 +ENCODING 4628 +BBX 13 12 1 0 +BITMAP +0C00 +0C00 +0C00 +0C00 +0C00 +3F00 +6D80 +6D80 +CC80 +CCF0 +CC98 +CCF0 +ENDCHAR +STARTCHAR uni1215 +ENCODING 4629 +BBX 10 12 3 0 +BITMAP +3000 +3000 +3000 +3C00 +0C00 +3F00 +6D80 +6D80 +CCC0 +CCC0 +CCC0 +CCC0 +ENDCHAR +STARTCHAR uni1216 +ENCODING 4630 +BBX 10 12 3 0 +BITMAP +0C00 +0C00 +0C00 +0C00 +0C00 +3F00 +6D80 +6D80 +CCC0 +C000 +C000 +C000 +ENDCHAR +STARTCHAR uni1217 +ENCODING 4631 +BBX 14 14 2 -1 +BITMAP +0C00 +0C00 +0C00 +0C00 +0C00 +3F00 +6D80 +6D80 +CCC0 +00C0 +00C0 +00C0 +07F8 +0E1C +ENDCHAR +STARTCHAR uni1218 +ENCODING 4632 +BBX 12 8 2 1 +BITMAP +3FF0 +7FF0 +4490 +C590 +8D10 +9930 +F1E0 +F1C0 +ENDCHAR +STARTCHAR uni1219 +ENCODING 4633 +BBX 15 8 0 1 +BITMAP +3FF0 +7FF0 +4490 +C59E +8D12 +9932 +F1E0 +F1C0 +ENDCHAR +STARTCHAR uni121A +ENCODING 4634 +BBX 14 12 1 0 +BITMAP +3FF0 +7FF0 +C510 +8510 +8A10 +FBF0 +71F0 +0020 +0020 +0040 +004C +007C +ENDCHAR +STARTCHAR uni121B +ENCODING 4635 +BBX 12 12 2 0 +BITMAP +3FF0 +7FF0 +C510 +8510 +8A10 +FBF0 +71F0 +0020 +0020 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni121C +ENCODING 4636 +BBX 14 12 1 0 +BITMAP +3FF0 +7FF0 +C510 +8510 +8A10 +FBF0 +71F0 +0020 +0020 +0078 +004C +0078 +ENDCHAR +STARTCHAR uni121D +ENCODING 4637 +BBX 11 12 2 0 +BITMAP +7FC0 +7FE0 +CA20 +8A20 +8A20 +8BE0 +F9C0 +7800 +0800 +1800 +3000 +6000 +ENDCHAR +STARTCHAR uni121E +ENCODING 4638 +BBX 11 12 2 0 +BITMAP +7FC0 +7FE0 +CA20 +8A20 +8A20 +8BE0 +F9C0 +7800 +0800 +0800 +0800 +0C00 +ENDCHAR +STARTCHAR uni121F +ENCODING 4639 +BBX 13 14 1 -2 +BITMAP +3FF0 +7FF0 +C510 +8510 +8A10 +FBF0 +71F0 +0020 +0020 +0060 +0040 +0040 +03F0 +0618 +ENDCHAR +STARTCHAR uni1220 +ENCODING 4640 +BBX 10 9 3 1 +BITMAP +4CC0 +CCC0 +CCC0 +CCC0 +CCC0 +CD80 +CF80 +6C00 +3C00 +ENDCHAR +STARTCHAR uni1221 +ENCODING 4641 +BBX 13 9 1 1 +BITMAP +4D80 +CD80 +CDF8 +CD98 +CD80 +CD80 +CF80 +6C00 +3C00 +ENDCHAR +STARTCHAR uni1222 +ENCODING 4642 +BBX 14 12 1 0 +BITMAP +CC80 +CCC0 +CCC0 +CCC0 +CCC0 +EDC0 +7FC0 +00C0 +00C0 +00C0 +00CC +00FC +ENDCHAR +STARTCHAR uni1223 +ENCODING 4643 +BBX 10 12 3 0 +BITMAP +CC80 +CCC0 +CCC0 +CCC0 +CCC0 +EDC0 +7FC0 +00C0 +00C0 +00C0 +00C0 +00C0 +ENDCHAR +STARTCHAR uni1224 +ENCODING 4644 +BBX 12 12 2 0 +BITMAP +CC80 +CCC0 +CCC0 +CCC0 +CCC0 +EDC0 +7FC0 +00C0 +00C0 +00E0 +0190 +01E0 +ENDCHAR +STARTCHAR uni1225 +ENCODING 4645 +BBX 10 12 3 0 +BITMAP +CC80 +CCC0 +CCC0 +CCC0 +CCC0 +EDC0 +FF80 +E000 +C000 +C000 +C000 +C000 +ENDCHAR +STARTCHAR uni1226 +ENCODING 4646 +BBX 10 12 3 0 +BITMAP +CCC0 +CCC0 +CCC0 +CCC0 +CCC0 +EDC0 +7F80 +1C00 +1800 +3800 +7000 +6000 +ENDCHAR +STARTCHAR uni1227 +ENCODING 4647 +BBX 14 14 1 -1 +BITMAP +CC80 +CCC0 +CCC0 +CCC0 +CCC0 +EDC0 +7FC0 +00C0 +00C0 +00C0 +00C0 +00C0 +07F8 +0E1C +ENDCHAR +STARTCHAR uni1228 +ENCODING 4648 +BBX 8 12 3 0 +BITMAP +0C +0C +0C +18 +38 +70 +E0 +C0 +C0 +E3 +7F +3F +ENDCHAR +STARTCHAR uni1229 +ENCODING 4649 +BBX 10 12 2 0 +BITMAP +0C00 +0C00 +1C00 +3800 +7000 +6000 +C000 +E000 +7FC0 +3FC0 +0600 +0600 +ENDCHAR +STARTCHAR uni122A +ENCODING 4650 +BBX 9 12 3 0 +BITMAP +0C00 +0C00 +0C00 +1800 +3800 +7000 +E000 +C300 +C380 +E180 +7F00 +3E00 +ENDCHAR +STARTCHAR uni122B +ENCODING 4651 +BBX 11 12 2 0 +BITMAP +0C00 +0C00 +0C00 +1800 +3800 +7000 +E000 +C1E0 +C3E0 +E660 +7E00 +3C00 +ENDCHAR +STARTCHAR uni122C +ENCODING 4652 +BBX 10 12 3 0 +BITMAP +0C00 +0C00 +0C00 +1800 +3800 +7000 +E000 +C000 +C000 +E780 +7CC0 +3F80 +ENDCHAR +STARTCHAR uni122D +ENCODING 4653 +BBX 8 11 3 0 +BITMAP +3F +7F +C3 +C0 +C0 +C0 +C0 +C0 +C3 +FF +7E +ENDCHAR +STARTCHAR uni122E +ENCODING 4654 +BBX 10 11 3 0 +BITMAP +3F80 +7CC0 +C780 +C000 +C000 +C000 +C000 +C000 +C300 +FF00 +7E00 +ENDCHAR +STARTCHAR uni122F +ENCODING 4655 +BBX 11 13 2 -1 +BITMAP +C0C0 +7380 +0C00 +0C00 +1800 +3800 +7000 +E000 +C1E0 +C3E0 +E660 +7E00 +3C00 +ENDCHAR +STARTCHAR uni1230 +ENCODING 4656 +BBX 7 12 4 0 +BITMAP +10 +10 +38 +7C +C6 +C6 +C6 +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni1231 +ENCODING 4657 +BBX 11 12 2 0 +BITMAP +1000 +1000 +3800 +7C00 +C600 +C600 +C600 +C7E0 +C660 +C600 +C600 +C600 +ENDCHAR +STARTCHAR uni1232 +ENCODING 4658 +BBX 11 12 2 0 +BITMAP +1000 +1000 +3800 +7C00 +C600 +C600 +C600 +C600 +C600 +C600 +C660 +C7E0 +ENDCHAR +STARTCHAR uni1233 +ENCODING 4659 +BBX 7 12 4 0 +BITMAP +10 +10 +38 +7C +C6 +C6 +C6 +C6 +C6 +06 +06 +06 +ENDCHAR +STARTCHAR uni1234 +ENCODING 4660 +BBX 10 12 3 0 +BITMAP +1000 +1000 +3800 +7C00 +C600 +C600 +C600 +C600 +C700 +C680 +C640 +C7C0 +ENDCHAR +STARTCHAR uni1235 +ENCODING 4661 +BBX 7 11 5 0 +BITMAP +60 +30 +38 +7C +C6 +C6 +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni1236 +ENCODING 4662 +BBX 7 12 4 0 +BITMAP +10 +10 +38 +7C +C6 +C6 +C6 +C6 +C6 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni1237 +ENCODING 4663 +BBX 10 14 4 -2 +BITMAP +1000 +1000 +3800 +7C00 +C600 +C600 +C600 +C600 +C600 +0600 +0600 +0600 +1F80 +30C0 +ENDCHAR +STARTCHAR uni1238 +ENCODING 4664 +BBX 9 12 2 0 +BITMAP +C180 +7F00 +0800 +1C00 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +ENDCHAR +STARTCHAR uni1239 +ENCODING 4665 +BBX 12 12 2 0 +BITMAP +C180 +7F00 +0800 +1C00 +3E00 +6300 +6300 +63F0 +6330 +6330 +6300 +6300 +ENDCHAR +STARTCHAR uni123A +ENCODING 4666 +BBX 12 12 2 0 +BITMAP +C180 +7F00 +0800 +1C00 +3E00 +6300 +6300 +6300 +6300 +6300 +6330 +63F0 +ENDCHAR +STARTCHAR uni123B +ENCODING 4667 +BBX 9 12 3 0 +BITMAP +C180 +7F00 +0800 +1C00 +3E00 +6300 +6300 +6300 +6300 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni123C +ENCODING 4668 +BBX 12 12 2 0 +BITMAP +C180 +7F00 +0800 +1C00 +3E00 +6300 +6300 +6300 +6300 +63E0 +6330 +63E0 +ENDCHAR +STARTCHAR uni123D +ENCODING 4669 +BBX 9 12 3 0 +BITMAP +C300 +7E00 +0C00 +0E00 +1F00 +1980 +3180 +3180 +3180 +3180 +3180 +3180 +ENDCHAR +STARTCHAR uni123E +ENCODING 4670 +BBX 9 12 3 0 +BITMAP +C180 +7F00 +0800 +1C00 +3E00 +6300 +6300 +6300 +6300 +6000 +6000 +6000 +ENDCHAR +STARTCHAR uni123F +ENCODING 4671 +BBX 11 14 2 -2 +BITMAP +C180 +7F00 +0800 +1C00 +3E00 +6300 +6300 +6300 +6300 +6300 +0300 +0300 +0FC0 +1860 +ENDCHAR +STARTCHAR uni1240 +ENCODING 4672 +BBX 10 12 3 0 +BITMAP +0C00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1241 +ENCODING 4673 +BBX 10 12 2 0 +BITMAP +0C00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0FC0 +0CC0 +0C00 +ENDCHAR +STARTCHAR uni1242 +ENCODING 4674 +BBX 10 12 2 0 +BITMAP +0C00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0C00 +0CC0 +0FC0 +ENDCHAR +STARTCHAR uni1243 +ENCODING 4675 +BBX 10 12 3 0 +BITMAP +0C00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +1800 +3000 +6000 +ENDCHAR +STARTCHAR uni1244 +ENCODING 4676 +BBX 10 12 2 0 +BITMAP +0C00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0F80 +0CC0 +0F80 +ENDCHAR +STARTCHAR uni1245 +ENCODING 4677 +BBX 10 12 3 0 +BITMAP +3000 +3000 +3C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1246 +ENCODING 4678 +BBX 10 12 2 0 +BITMAP +0700 +0980 +0B00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1247 +ENCODING 4679 +BBX 10 13 2 -1 +BITMAP +0700 +0980 +0B00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +CC00 +FC00 +C000 +ENDCHAR +STARTCHAR uni1248 +ENCODING 4680 +BBX 11 12 3 0 +BITMAP +0C00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0FC0 +0D60 +0DC0 +0C00 +ENDCHAR +STARTCHAR uni124A +ENCODING 4682 +BBX 15 12 1 0 +BITMAP +0C00 +0C00 +0C00 +1F80 +6CD8 +CCD8 +CDF8 +7E0E +0C06 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni124B +ENCODING 4683 +BBX 10 14 3 -2 +BITMAP +0C00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0C00 +0C00 +0C00 +3F00 +6180 +ENDCHAR +STARTCHAR uni124C +ENCODING 4684 +BBX 10 14 3 -2 +BITMAP +0C00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0C00 +0F80 +0CC0 +3F80 +6000 +ENDCHAR +STARTCHAR uni124D +ENCODING 4685 +BBX 14 12 1 0 +BITMAP +0C00 +0C30 +0C30 +1FFC +6CCC +CCC0 +CD80 +7E00 +0C00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1250 +ENCODING 4688 +BBX 10 12 3 0 +BITMAP +6180 +3F00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1251 +ENCODING 4689 +BBX 10 12 2 0 +BITMAP +6180 +3F00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0FC0 +0CC0 +ENDCHAR +STARTCHAR uni1252 +ENCODING 4690 +BBX 10 12 2 0 +BITMAP +6180 +3F00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0CC0 +0FC0 +ENDCHAR +STARTCHAR uni1253 +ENCODING 4691 +BBX 10 12 3 0 +BITMAP +6180 +3F00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +1800 +3000 +ENDCHAR +STARTCHAR uni1254 +ENCODING 4692 +BBX 10 12 2 0 +BITMAP +6180 +3F00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0F80 +0CC0 +0F80 +ENDCHAR +STARTCHAR uni1255 +ENCODING 4693 +BBX 11 12 2 0 +BITMAP +C300 +7E00 +1800 +1E00 +0600 +0FC0 +3660 +6660 +66C0 +3F00 +0600 +0600 +ENDCHAR +STARTCHAR uni1256 +ENCODING 4694 +BBX 10 12 3 0 +BITMAP +60C0 +3F80 +0900 +0B00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1258 +ENCODING 4696 +BBX 11 12 2 0 +BITMAP +6180 +3F00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0FC0 +0D60 +0DC0 +0C00 +ENDCHAR +STARTCHAR uni125A +ENCODING 4698 +BBX 15 12 1 0 +BITMAP +6180 +3F00 +0C00 +0C00 +1F80 +6CD8 +CCD8 +CDF8 +7E0E +0C06 +0C00 +0C00 +ENDCHAR +STARTCHAR uni125B +ENCODING 4699 +BBX 10 14 3 -2 +BITMAP +6180 +3F00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0C00 +0C00 +3F00 +6180 +ENDCHAR +STARTCHAR uni125C +ENCODING 4700 +BBX 10 14 3 -2 +BITMAP +6180 +3F00 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0F80 +0CC0 +3F80 +6000 +ENDCHAR +STARTCHAR uni125D +ENCODING 4701 +BBX 14 12 1 0 +BITMAP +6180 +3F00 +0C30 +0C30 +1FFC +6CCC +CCC0 +CD80 +7E00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1260 +ENCODING 4704 +BBX 7 11 4 0 +BITMAP +38 +7C +C6 +C6 +C6 +C6 +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni1261 +ENCODING 4705 +BBX 11 11 2 0 +BITMAP +3800 +7C00 +C600 +C600 +C600 +C7E0 +C660 +C660 +C600 +C600 +C600 +ENDCHAR +STARTCHAR uni1262 +ENCODING 4706 +BBX 11 11 2 0 +BITMAP +3800 +7C00 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +C660 +C7E0 +ENDCHAR +STARTCHAR uni1263 +ENCODING 4707 +BBX 7 11 4 0 +BITMAP +38 +7C +C6 +C6 +C6 +C6 +C6 +06 +06 +06 +06 +ENDCHAR +STARTCHAR uni1264 +ENCODING 4708 +BBX 11 11 3 0 +BITMAP +3800 +7C00 +C600 +C600 +C600 +C600 +C600 +C600 +C7C0 +C660 +C7C0 +ENDCHAR +STARTCHAR uni1265 +ENCODING 4709 +BBX 11 11 2 0 +BITMAP +0380 +07C0 +0C60 +0C60 +0C60 +FC60 +CC60 +CC60 +0C60 +0C60 +0C60 +ENDCHAR +STARTCHAR uni1266 +ENCODING 4710 +BBX 7 11 4 0 +BITMAP +38 +7C +C6 +C6 +C6 +C6 +C6 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni1267 +ENCODING 4711 +BBX 10 13 4 -2 +BITMAP +3800 +7C00 +C600 +C600 +C600 +C600 +C600 +0600 +0600 +0600 +0600 +1F80 +30C0 +ENDCHAR +STARTCHAR uni1268 +ENCODING 4712 +BBX 9 12 2 0 +BITMAP +C180 +7F00 +0000 +1C00 +3E00 +6300 +6300 +6300 +6300 +6300 +6300 +6300 +ENDCHAR +STARTCHAR uni1269 +ENCODING 4713 +BBX 12 12 2 0 +BITMAP +C180 +7F00 +0000 +1C00 +3E00 +6300 +6300 +63F0 +6330 +6330 +6300 +6300 +ENDCHAR +STARTCHAR uni126A +ENCODING 4714 +BBX 12 12 2 0 +BITMAP +C180 +7F00 +0000 +1C00 +3E00 +6300 +6300 +6300 +6300 +6300 +6330 +63F0 +ENDCHAR +STARTCHAR uni126B +ENCODING 4715 +BBX 9 12 2 0 +BITMAP +C180 +7F00 +0000 +1C00 +3E00 +6300 +6300 +6300 +6300 +6300 +0300 +0300 +ENDCHAR +STARTCHAR uni126C +ENCODING 4716 +BBX 12 12 1 0 +BITMAP +C180 +7F00 +0000 +1C00 +3E00 +6300 +6300 +6300 +6300 +63E0 +6330 +63E0 +ENDCHAR +STARTCHAR uni126D +ENCODING 4717 +BBX 12 12 1 0 +BITMAP +1830 +0FE0 +0000 +0380 +07C0 +0C60 +0C60 +FC60 +CC60 +CC60 +0C60 +0C60 +ENDCHAR +STARTCHAR uni126E +ENCODING 4718 +BBX 9 12 2 0 +BITMAP +C180 +7F00 +0000 +1C00 +3E00 +6300 +6300 +6300 +6300 +6300 +6000 +6000 +ENDCHAR +STARTCHAR uni126F +ENCODING 4719 +BBX 11 14 2 -2 +BITMAP +C180 +7F00 +0000 +1C00 +3E00 +6300 +6300 +6300 +6300 +6300 +0300 +0300 +0FC0 +1860 +ENDCHAR +STARTCHAR uni1270 +ENCODING 4720 +BBX 12 12 1 0 +BITMAP +0E00 +0600 +0600 +0600 +7FE0 +FFF0 +C630 +0600 +0600 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni1271 +ENCODING 4721 +BBX 12 12 1 0 +BITMAP +0E00 +0600 +0600 +0600 +7FE0 +FFF0 +C630 +0600 +07E0 +0660 +0600 +0600 +ENDCHAR +STARTCHAR uni1272 +ENCODING 4722 +BBX 12 12 1 0 +BITMAP +0E00 +0600 +0600 +0600 +7FE0 +FFF0 +C630 +0600 +0600 +0600 +0660 +07E0 +ENDCHAR +STARTCHAR uni1273 +ENCODING 4723 +BBX 12 12 1 0 +BITMAP +0E00 +0600 +0600 +0600 +7FE0 +FFF0 +C630 +0600 +0600 +0E00 +1C00 +3800 +ENDCHAR +STARTCHAR uni1274 +ENCODING 4724 +BBX 12 12 1 0 +BITMAP +0E00 +0600 +0600 +0600 +7FE0 +FFF0 +C630 +0600 +0600 +07C0 +0660 +07C0 +ENDCHAR +STARTCHAR uni1275 +ENCODING 4725 +BBX 12 12 2 0 +BITMAP +1800 +1C00 +0E00 +0600 +0600 +7FE0 +FFF0 +C630 +0600 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni1276 +ENCODING 4726 +BBX 12 12 2 0 +BITMAP +0F80 +0C80 +0580 +0600 +7FE0 +FFF0 +C630 +0600 +0600 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni1277 +ENCODING 4727 +BBX 12 14 2 -2 +BITMAP +0E00 +0600 +0600 +0600 +7FE0 +FFF0 +C630 +0600 +0600 +0600 +0600 +0600 +1F80 +30C0 +ENDCHAR +STARTCHAR uni1278 +ENCODING 4728 +BBX 12 12 2 0 +BITMAP +6060 +7FE0 +FFF0 +C630 +0600 +7FE0 +FFF0 +C630 +0600 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni1279 +ENCODING 4729 +BBX 12 12 2 0 +BITMAP +6060 +7FE0 +FFF0 +C630 +0600 +7FE0 +FFF0 +C630 +0600 +07E0 +0660 +0600 +ENDCHAR +STARTCHAR uni127A +ENCODING 4730 +BBX 12 12 2 0 +BITMAP +6060 +7FE0 +FFF0 +C630 +0600 +7FE0 +FFF0 +C630 +0600 +0600 +0660 +07E0 +ENDCHAR +STARTCHAR uni127B +ENCODING 4731 +BBX 12 12 1 0 +BITMAP +6060 +7FE0 +FFF0 +C630 +0600 +7FE0 +FFF0 +C630 +0600 +0E00 +1C00 +3800 +ENDCHAR +STARTCHAR uni127C +ENCODING 4732 +BBX 12 12 1 0 +BITMAP +6060 +7FE0 +FFF0 +C630 +0600 +7FE0 +FFF0 +C630 +0600 +07C0 +0660 +07C0 +ENDCHAR +STARTCHAR uni127D +ENCODING 4733 +BBX 13 12 1 0 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0E00 +0300 +3FF0 +7FF8 +6318 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni127E +ENCODING 4734 +BBX 12 12 2 0 +BITMAP +30C0 +7FE0 +6960 +0900 +0600 +7FE0 +FFF0 +C630 +0600 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni127F +ENCODING 4735 +BBX 12 14 2 -2 +BITMAP +6060 +7FE0 +FFF0 +C630 +0600 +7FE0 +FFF0 +C630 +0600 +0600 +0600 +0600 +1F80 +30C0 +ENDCHAR +STARTCHAR uni1280 +ENCODING 4736 +BBX 8 12 3 0 +BITMAP +0C +0C +0C +FC +CF +03 +03 +03 +03 +03 +03 +03 +ENDCHAR +STARTCHAR uni1281 +ENCODING 4737 +BBX 12 12 2 0 +BITMAP +0C00 +0C00 +0C00 +FC00 +CF00 +0300 +0300 +03F0 +0330 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni1282 +ENCODING 4738 +BBX 12 12 2 0 +BITMAP +0C00 +0C00 +0C00 +FC00 +CF00 +0300 +0300 +0300 +0300 +0300 +0330 +03F0 +ENDCHAR +STARTCHAR uni1283 +ENCODING 4739 +BBX 8 12 4 0 +BITMAP +0C +0C +0C +FC +CF +03 +03 +03 +0E +18 +30 +30 +ENDCHAR +STARTCHAR uni1284 +ENCODING 4740 +BBX 12 12 2 0 +BITMAP +0C00 +0C00 +0C00 +FC00 +CF00 +0300 +0300 +0300 +0300 +03E0 +0330 +03E0 +ENDCHAR +STARTCHAR uni1285 +ENCODING 4741 +BBX 8 12 4 0 +BITMAP +0C +0C +0C +3C +6F +C3 +C3 +03 +03 +03 +03 +03 +ENDCHAR +STARTCHAR uni1286 +ENCODING 4742 +BBX 12 12 2 0 +BITMAP +07E0 +0F90 +18E0 +F800 +D800 +1800 +1F80 +0F80 +0180 +0180 +0180 +0180 +ENDCHAR +STARTCHAR uni1287 +ENCODING 4743 +BBX 12 13 2 -1 +BITMAP +07E0 +0F90 +18E0 +F800 +D800 +1800 +1F80 +0F80 +0180 +0180 +1980 +1F80 +1800 +ENDCHAR +STARTCHAR uni1288 +ENCODING 4744 +BBX 13 12 1 0 +BITMAP +0C00 +0C00 +0C00 +FC00 +CF00 +0300 +03F0 +0358 +0370 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni128A +ENCODING 4746 +BBX 14 12 1 0 +BITMAP +0C00 +0C00 +0C00 +FC00 +CF00 +0330 +0330 +03F0 +031C +030C +0300 +0300 +ENDCHAR +STARTCHAR uni128B +ENCODING 4747 +BBX 11 14 3 -2 +BITMAP +0C00 +0C00 +0C00 +FC00 +CF00 +0300 +0300 +0300 +0300 +0300 +0300 +0300 +0FC0 +1860 +ENDCHAR +STARTCHAR uni128C +ENCODING 4748 +BBX 12 14 2 -2 +BITMAP +0C00 +0C00 +0C00 +FC00 +CF00 +0300 +0300 +0300 +0300 +0300 +03E0 +0330 +0FE0 +1800 +ENDCHAR +STARTCHAR uni128D +ENCODING 4749 +BBX 13 12 1 0 +BITMAP +0C00 +0C00 +0C00 +FC60 +CF60 +03F8 +0318 +0300 +0300 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni1290 +ENCODING 4752 +BBX 5 12 5 0 +BITMAP +C0 +C0 +C0 +F0 +38 +30 +30 +30 +60 +60 +60 +60 +ENDCHAR +STARTCHAR uni1291 +ENCODING 4753 +BBX 7 12 5 0 +BITMAP +C0 +C0 +C0 +F0 +38 +30 +30 +3E +66 +60 +60 +60 +ENDCHAR +STARTCHAR uni1292 +ENCODING 4754 +BBX 7 12 4 0 +BITMAP +C0 +C0 +C0 +F0 +38 +30 +30 +30 +60 +60 +66 +7E +ENDCHAR +STARTCHAR uni1293 +ENCODING 4755 +BBX 9 12 2 0 +BITMAP +1F00 +3F80 +6180 +C000 +E000 +7C00 +0E00 +0600 +0400 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1294 +ENCODING 4756 +BBX 6 12 5 0 +BITMAP +C0 +C0 +C0 +F0 +38 +30 +30 +30 +78 +64 +6C +78 +ENDCHAR +STARTCHAR uni1295 +ENCODING 4757 +BBX 8 12 2 0 +BITMAP +FF +FE +C6 +0C +1F +03 +06 +0C +0C +18 +18 +30 +ENDCHAR +STARTCHAR uni1296 +ENCODING 4758 +BBX 11 12 2 0 +BITMAP +1FC0 +3F20 +6160 +C0C0 +E000 +7C00 +0E00 +0600 +0400 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1297 +ENCODING 4759 +BBX 9 13 2 -2 +BITMAP +1F00 +3F80 +6180 +C000 +E000 +7C00 +0E00 +0600 +0400 +0C00 +0C00 +3F00 +6180 +ENDCHAR +STARTCHAR uni1298 +ENCODING 4760 +BBX 10 12 3 0 +BITMAP +6180 +FFC0 +8C40 +0C00 +0F00 +0380 +0300 +0300 +0600 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni1299 +ENCODING 4761 +BBX 11 12 2 0 +BITMAP +6180 +FFC0 +8C40 +0C00 +0F00 +0380 +0300 +03E0 +0660 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni129A +ENCODING 4762 +BBX 11 12 2 0 +BITMAP +6180 +FFC0 +8C40 +0C00 +0F00 +0380 +0300 +0300 +0600 +0600 +0660 +07E0 +ENDCHAR +STARTCHAR uni129B +ENCODING 4763 +BBX 11 13 2 0 +BITMAP +30C0 +7FE0 +4620 +1F00 +3F80 +6180 +C000 +E000 +7C00 +0E00 +0600 +0C00 +0C00 +ENDCHAR +STARTCHAR uni129C +ENCODING 4764 +BBX 10 12 2 0 +BITMAP +6180 +FFC0 +8C40 +0C00 +0F00 +0380 +0300 +0300 +0780 +0640 +06C0 +0780 +ENDCHAR +STARTCHAR uni129D +ENCODING 4765 +BBX 10 13 1 0 +BITMAP +6180 +FFC0 +8C40 +3F80 +7F00 +6300 +0600 +0F80 +0180 +0300 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni129E +ENCODING 4766 +BBX 11 13 2 0 +BITMAP +3180 +7FC0 +4440 +1FC0 +3F20 +6160 +C0C0 +E000 +7C00 +0E00 +0600 +0C00 +0C00 +ENDCHAR +STARTCHAR uni129F +ENCODING 4767 +BBX 11 15 2 -2 +BITMAP +30C0 +7FE0 +4620 +1F00 +3F80 +6180 +C000 +E000 +7C00 +0E00 +0600 +0C00 +0C00 +3F00 +6180 +ENDCHAR +STARTCHAR uni12A0 +ENCODING 4768 +BBX 7 12 4 0 +BITMAP +60 +60 +60 +78 +18 +38 +3C +6E +E6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni12A1 +ENCODING 4769 +BBX 11 12 2 0 +BITMAP +6000 +6000 +6000 +7800 +1800 +3800 +3C00 +6E00 +E7E0 +C660 +C600 +C600 +ENDCHAR +STARTCHAR uni12A2 +ENCODING 4770 +BBX 11 12 2 0 +BITMAP +6000 +6000 +6000 +7800 +1800 +3800 +3C00 +6E00 +E600 +C600 +C660 +C7E0 +ENDCHAR +STARTCHAR uni12A3 +ENCODING 4771 +BBX 7 12 4 0 +BITMAP +60 +60 +60 +78 +18 +3C +6E +C6 +C6 +C6 +06 +06 +ENDCHAR +STARTCHAR uni12A4 +ENCODING 4772 +BBX 11 12 2 0 +BITMAP +6000 +6000 +6000 +7800 +1800 +3800 +3C00 +6E00 +E600 +C7C0 +C660 +C7C0 +ENDCHAR +STARTCHAR uni12A5 +ENCODING 4773 +BBX 7 12 4 0 +BITMAP +C0 +C0 +E0 +60 +30 +38 +7C +EE +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni12A6 +ENCODING 4774 +BBX 7 12 4 0 +BITMAP +60 +60 +60 +78 +18 +3C +6E +C6 +C6 +C6 +C0 +C0 +ENDCHAR +STARTCHAR uni12A7 +ENCODING 4775 +BBX 9 13 2 0 +BITMAP +6300 +7F00 +D980 +1800 +1E00 +0600 +0E00 +0F00 +1B80 +3980 +3180 +3180 +3180 +ENDCHAR +STARTCHAR uni12A8 +ENCODING 4776 +BBX 9 11 3 0 +BITMAP +C000 +CE00 +FF00 +F180 +3180 +3180 +3180 +3180 +3180 +3180 +3180 +ENDCHAR +STARTCHAR uni12A9 +ENCODING 4777 +BBX 13 11 1 0 +BITMAP +C000 +CE00 +FF00 +F180 +3180 +3180 +31F8 +3198 +3180 +3180 +3180 +ENDCHAR +STARTCHAR uni12AA +ENCODING 4778 +BBX 13 11 1 0 +BITMAP +C000 +CE00 +FF00 +F180 +3180 +3180 +3180 +3180 +3180 +3198 +31F8 +ENDCHAR +STARTCHAR uni12AB +ENCODING 4779 +BBX 9 11 3 0 +BITMAP +C000 +CE00 +FF00 +F180 +3180 +3180 +3180 +3180 +0180 +0180 +0180 +ENDCHAR +STARTCHAR uni12AC +ENCODING 4780 +BBX 13 11 1 0 +BITMAP +C000 +CE00 +FF00 +F180 +3180 +3180 +3180 +3180 +31F0 +3198 +31F0 +ENDCHAR +STARTCHAR uni12AD +ENCODING 4781 +BBX 9 11 3 0 +BITMAP +C000 +CE00 +DF00 +F180 +6180 +7180 +3180 +3180 +3180 +3180 +3180 +ENDCHAR +STARTCHAR uni12AE +ENCODING 4782 +BBX 9 11 3 0 +BITMAP +C000 +CE00 +FF00 +F180 +3180 +3180 +3180 +3180 +3000 +3000 +3000 +ENDCHAR +STARTCHAR uni12AF +ENCODING 4783 +BBX 11 11 2 0 +BITMAP +3000 +3380 +3FC0 +3C60 +0C60 +CC60 +FC60 +CC60 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni12B0 +ENCODING 4784 +BBX 13 11 1 0 +BITMAP +C000 +CC00 +FE00 +F300 +3300 +33F0 +3358 +3370 +3300 +3300 +3300 +ENDCHAR +STARTCHAR uni12B2 +ENCODING 4786 +BBX 14 11 1 0 +BITMAP +C000 +CC00 +FE00 +F300 +3330 +3330 +33F0 +331C +330C +3300 +3300 +ENDCHAR +STARTCHAR uni12B3 +ENCODING 4787 +BBX 12 13 3 -2 +BITMAP +C000 +CE00 +FF00 +F180 +3180 +3180 +3180 +3180 +0180 +0180 +0180 +07E0 +0C30 +ENDCHAR +STARTCHAR uni12B4 +ENCODING 4788 +BBX 13 13 1 -2 +BITMAP +C000 +CE00 +FF00 +F180 +3180 +3180 +3180 +3180 +0180 +01F0 +0198 +07F0 +0C00 +ENDCHAR +STARTCHAR uni12B5 +ENCODING 4789 +BBX 13 11 1 0 +BITMAP +C000 +CC60 +FE60 +F3F8 +3318 +3300 +3300 +3300 +3300 +3300 +3300 +ENDCHAR +STARTCHAR uni12B8 +ENCODING 4792 +BBX 11 12 1 0 +BITMAP +C300 +7E00 +1800 +1B80 +1FC0 +0C60 +0C60 +0C60 +0C60 +0C60 +0C60 +0C60 +ENDCHAR +STARTCHAR uni12B9 +ENCODING 4793 +BBX 15 12 0 0 +BITMAP +C300 +7E00 +1800 +1B80 +1FC0 +0C60 +0C60 +0C7E +0C66 +0C60 +0C60 +0C60 +ENDCHAR +STARTCHAR uni12BA +ENCODING 4794 +BBX 15 12 0 0 +BITMAP +C300 +7E00 +1800 +1B80 +1FC0 +0C60 +0C60 +0C60 +0C60 +0C60 +0C66 +0C7E +ENDCHAR +STARTCHAR uni12BB +ENCODING 4795 +BBX 11 12 1 0 +BITMAP +C300 +7E00 +1800 +1B80 +1FC0 +0C60 +0C60 +0C60 +0C60 +0060 +0060 +0060 +ENDCHAR +STARTCHAR uni12BC +ENCODING 4796 +BBX 15 12 1 0 +BITMAP +C300 +7E00 +1800 +1B80 +1FC0 +0C60 +0C60 +0C60 +0C60 +0C7C +0C66 +0C7C +ENDCHAR +STARTCHAR uni12BD +ENCODING 4797 +BBX 12 12 1 0 +BITMAP +C300 +7E00 +1800 +1DC0 +1FE0 +0630 +0730 +0330 +0330 +0330 +0330 +0330 +ENDCHAR +STARTCHAR uni12BE +ENCODING 4798 +BBX 11 12 1 0 +BITMAP +C300 +7E00 +1800 +1B80 +1FC0 +0C60 +0C60 +0C60 +0C60 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni12C0 +ENCODING 4800 +BBX 16 12 0 0 +BITMAP +C300 +7E00 +1800 +1B80 +1FC0 +0C60 +0C7E +0C6B +0C6E +0C60 +0C60 +0C60 +ENDCHAR +STARTCHAR uni12C2 +ENCODING 4802 +BBX 16 12 0 0 +BITMAP +C300 +7E00 +1800 +1B00 +1F80 +0CCC +0CCC +0CFC +0CC7 +0CC3 +0CC0 +0CC0 +ENDCHAR +STARTCHAR uni12C3 +ENCODING 4803 +BBX 14 14 1 -2 +BITMAP +C300 +7E00 +1800 +1B80 +1FC0 +0CE0 +0C60 +0C60 +0C60 +0060 +0060 +0060 +01F8 +030C +ENDCHAR +STARTCHAR uni12C4 +ENCODING 4804 +BBX 15 14 1 -2 +BITMAP +C300 +7E00 +1800 +1B80 +1FC0 +0CE0 +0C60 +0C60 +0C60 +0060 +007C +0066 +01FC +0300 +ENDCHAR +STARTCHAR uni12C5 +ENCODING 4805 +BBX 16 12 0 0 +BITMAP +C300 +7E00 +180C +1B8C +1FFF +0C63 +0C60 +0C60 +0C60 +0C60 +0C60 +0C60 +ENDCHAR +STARTCHAR uni12C8 +ENCODING 4808 +BBX 11 8 2 1 +BITMAP +3FC0 +76E0 +C660 +C660 +CC60 +CCC0 +EDC0 +7F00 +ENDCHAR +STARTCHAR uni12C9 +ENCODING 4809 +BBX 15 9 0 0 +BITMAP +3FC0 +76E0 +C660 +C660 +CC60 +CCE0 +EDC6 +7FFC +000C +ENDCHAR +STARTCHAR uni12CA +ENCODING 4810 +BBX 11 12 2 0 +BITMAP +3FC0 +76E0 +C660 +C660 +CC60 +EEC0 +7F80 +0C00 +0C00 +1C00 +1980 +1F80 +ENDCHAR +STARTCHAR uni12CB +ENCODING 4811 +BBX 11 12 2 0 +BITMAP +3FC0 +76E0 +C660 +C660 +CC60 +EEC0 +7F80 +0C00 +0C00 +0C00 +0C00 +1C00 +ENDCHAR +STARTCHAR uni12CC +ENCODING 4812 +BBX 11 12 2 0 +BITMAP +3FC0 +76E0 +C660 +C660 +CC60 +EEC0 +7F80 +0C00 +0C00 +1E00 +1980 +1F00 +ENDCHAR +STARTCHAR uni12CD +ENCODING 4813 +BBX 15 8 0 1 +BITMAP +3FC0 +76E0 +C660 +C67E +CC66 +CCC2 +EDC0 +7F00 +ENDCHAR +STARTCHAR uni12CE +ENCODING 4814 +BBX 11 12 2 0 +BITMAP +3FC0 +76E0 +C660 +C660 +CC60 +EEC0 +7F80 +0C00 +1800 +3000 +6000 +6000 +ENDCHAR +STARTCHAR uni12CF +ENCODING 4815 +BBX 14 12 1 0 +BITMAP +07F8 +0EDC +D8CC +F8CC +D98C +1DD8 +0FF0 +0180 +0300 +0600 +0C00 +0C00 +ENDCHAR +STARTCHAR uni12D0 +ENCODING 4816 +BBX 8 11 4 0 +BITMAP +1E +63 +C3 +C3 +C3 +C3 +C3 +C3 +C3 +7F +60 +ENDCHAR +STARTCHAR uni12D1 +ENCODING 4817 +BBX 12 11 2 0 +BITMAP +1E00 +6300 +C300 +C300 +C300 +C300 +C3F0 +C330 +C300 +7F00 +6000 +ENDCHAR +STARTCHAR uni12D2 +ENCODING 4818 +BBX 12 11 1 0 +BITMAP +3E00 +6300 +C300 +C300 +C300 +7F80 +0180 +0180 +0300 +0330 +03F0 +ENDCHAR +STARTCHAR uni12D3 +ENCODING 4819 +BBX 9 11 3 0 +BITMAP +3E00 +6300 +C300 +C300 +C300 +7F80 +0180 +0180 +0180 +0300 +0300 +ENDCHAR +STARTCHAR uni12D4 +ENCODING 4820 +BBX 12 11 1 0 +BITMAP +3E00 +6300 +C300 +C300 +C300 +7F80 +0180 +0180 +03E0 +0330 +03E0 +ENDCHAR +STARTCHAR uni12D5 +ENCODING 4821 +BBX 8 13 4 0 +BITMAP +18 +18 +18 +7E +E3 +C3 +C3 +C3 +C3 +C3 +C3 +7F +60 +ENDCHAR +STARTCHAR uni12D6 +ENCODING 4822 +BBX 8 12 4 0 +BITMAP +3C +66 +C3 +C3 +C3 +E7 +7E +3C +70 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni12D8 +ENCODING 4824 +BBX 7 12 4 0 +BITMAP +C6 +C6 +C6 +C6 +C6 +FE +FE +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni12D9 +ENCODING 4825 +BBX 11 12 2 0 +BITMAP +C600 +C600 +C600 +C600 +C600 +FE00 +FE00 +C7E0 +C660 +C660 +C600 +C600 +ENDCHAR +STARTCHAR uni12DA +ENCODING 4826 +BBX 11 12 2 0 +BITMAP +C600 +C600 +C600 +C600 +C600 +FE00 +FE00 +C600 +C600 +C600 +C660 +C7E0 +ENDCHAR +STARTCHAR uni12DB +ENCODING 4827 +BBX 7 12 4 0 +BITMAP +C6 +C6 +C6 +C6 +FE +FE +C6 +C6 +C6 +06 +06 +06 +ENDCHAR +STARTCHAR uni12DC +ENCODING 4828 +BBX 11 12 3 0 +BITMAP +C600 +C600 +C600 +C600 +C600 +FE00 +FE00 +C600 +C600 +C7C0 +C660 +C7C0 +ENDCHAR +STARTCHAR uni12DD +ENCODING 4829 +BBX 10 12 2 0 +BITMAP +70C0 +D8C0 +D8C0 +18C0 +18C0 +1FC0 +1FC0 +18C0 +18C0 +18C0 +18C0 +18C0 +ENDCHAR +STARTCHAR uni12DE +ENCODING 4830 +BBX 7 12 4 0 +BITMAP +C6 +C6 +C6 +C6 +FE +FE +C6 +C6 +C6 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni12DF +ENCODING 4831 +BBX 10 14 4 -2 +BITMAP +C600 +C600 +C600 +C600 +FE00 +FE00 +C600 +C600 +C600 +0600 +0600 +0600 +1F80 +30C0 +ENDCHAR +STARTCHAR uni12E0 +ENCODING 4832 +BBX 12 12 2 0 +BITMAP +70E0 +D9B0 +D9B0 +1980 +1980 +1F80 +1F80 +1980 +1980 +1980 +1980 +1980 +ENDCHAR +STARTCHAR uni12E1 +ENCODING 4833 +BBX 13 12 1 0 +BITMAP +70E0 +D9B0 +D9B0 +1980 +1980 +1F80 +1F80 +19F8 +1998 +1998 +1980 +1980 +ENDCHAR +STARTCHAR uni12E2 +ENCODING 4834 +BBX 13 12 1 0 +BITMAP +70E0 +D9B0 +D9B0 +1980 +1980 +1F80 +1F80 +1980 +1980 +1980 +1998 +19F8 +ENDCHAR +STARTCHAR uni12E3 +ENCODING 4835 +BBX 12 12 2 0 +BITMAP +70E0 +D9B0 +D9B0 +1980 +1F80 +1F80 +1980 +1980 +1980 +0180 +0180 +0180 +ENDCHAR +STARTCHAR uni12E4 +ENCODING 4836 +BBX 13 12 1 0 +BITMAP +70E0 +D9B0 +D9B0 +1980 +1980 +1F80 +1F80 +1980 +1980 +19F0 +1998 +19F0 +ENDCHAR +STARTCHAR uni12E5 +ENCODING 4837 +BBX 13 13 1 0 +BITMAP +C300 +7E00 +1800 +3870 +6CD8 +6CD8 +0CC0 +0FC0 +0FC0 +0CC0 +0CC0 +0CC0 +0CC0 +ENDCHAR +STARTCHAR uni12E6 +ENCODING 4838 +BBX 12 12 2 0 +BITMAP +70E0 +D9B0 +D9B0 +1980 +1F80 +1F80 +1980 +1980 +1980 +1800 +1800 +1800 +ENDCHAR +STARTCHAR uni12E7 +ENCODING 4839 +BBX 12 14 2 -2 +BITMAP +70E0 +D9B0 +D9B0 +1980 +1F80 +1F80 +1980 +1980 +1980 +0180 +0180 +0180 +07E0 +0C30 +ENDCHAR +STARTCHAR uni12E8 +ENCODING 4840 +BBX 7 12 4 0 +BITMAP +38 +6C +C6 +C6 +C6 +C6 +EC +78 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni12E9 +ENCODING 4841 +BBX 8 12 4 0 +BITMAP +38 +6C +C6 +C6 +C6 +C6 +EC +78 +30 +3F +33 +30 +ENDCHAR +STARTCHAR uni12EA +ENCODING 4842 +BBX 10 12 3 0 +BITMAP +3800 +6C00 +C600 +C600 +C600 +C600 +EC00 +7800 +3300 +3FC0 +30C0 +3000 +ENDCHAR +STARTCHAR uni12EB +ENCODING 4843 +BBX 7 12 5 0 +BITMAP +38 +6C +C6 +C6 +C6 +CC +F8 +70 +38 +0C +38 +70 +ENDCHAR +STARTCHAR uni12EC +ENCODING 4844 +BBX 10 12 3 0 +BITMAP +3800 +6C00 +C600 +C600 +C600 +C600 +EC00 +7800 +3780 +3CC0 +3780 +3000 +ENDCHAR +STARTCHAR uni12ED +ENCODING 4845 +BBX 11 12 1 -1 +BITMAP +0F00 +1980 +3180 +3180 +3180 +1B00 +1E60 +0E60 +07C0 +7C00 +E000 +C000 +ENDCHAR +STARTCHAR uni12EE +ENCODING 4846 +BBX 11 12 2 0 +BITMAP +3800 +6C00 +C600 +C7E0 +C660 +C600 +EC00 +7800 +3000 +3000 +3000 +3000 +ENDCHAR +STARTCHAR uni12EF +ENCODING 4847 +BBX 14 12 1 0 +BITMAP +0700 +0D80 +18C0 +18FC +18CC +18C0 +DD80 +FF00 +C600 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni12F0 +ENCODING 4848 +BBX 10 12 3 0 +BITMAP +1C00 +3E00 +6200 +6200 +6600 +7C00 +3000 +1800 +1800 +0C00 +FFC0 +C0C0 +ENDCHAR +STARTCHAR uni12F1 +ENCODING 4849 +BBX 12 12 2 0 +BITMAP +1C00 +3E00 +6200 +6600 +7C00 +3000 +1800 +7F00 +C300 +C3F0 +0630 +0600 +ENDCHAR +STARTCHAR uni12F2 +ENCODING 4850 +BBX 11 12 2 0 +BITMAP +1C00 +3E00 +6200 +6600 +7C00 +3000 +1800 +7F00 +C300 +C300 +0660 +07E0 +ENDCHAR +STARTCHAR uni12F3 +ENCODING 4851 +BBX 8 12 4 0 +BITMAP +1C +3E +62 +66 +7C +30 +18 +FF +C3 +C3 +03 +03 +ENDCHAR +STARTCHAR uni12F4 +ENCODING 4852 +BBX 11 12 2 0 +BITMAP +1C00 +3E00 +6200 +6200 +6600 +7C00 +3000 +1800 +1800 +0FC0 +FE60 +C3C0 +ENDCHAR +STARTCHAR uni12F5 +ENCODING 4853 +BBX 11 12 2 0 +BITMAP +1C00 +3E00 +63E0 +6260 +6600 +7C00 +3000 +1800 +1800 +0C00 +FFC0 +C0C0 +ENDCHAR +STARTCHAR uni12F6 +ENCODING 4854 +BBX 9 12 3 0 +BITMAP +0E00 +1F00 +3100 +3300 +3E00 +1C00 +3F80 +6180 +C000 +C000 +C000 +C000 +ENDCHAR +STARTCHAR uni12F7 +ENCODING 4855 +BBX 11 14 4 -2 +BITMAP +1C00 +3E00 +6200 +6600 +7C00 +3000 +1800 +FF00 +C300 +C300 +0300 +0300 +0FC0 +1860 +ENDCHAR +STARTCHAR uni12F8 +ENCODING 4856 +BBX 8 12 4 0 +BITMAP +10 +10 +38 +7C +C4 +CC +F8 +60 +30 +18 +FF +C3 +ENDCHAR +STARTCHAR uni12F9 +ENCODING 4857 +BBX 12 12 2 0 +BITMAP +0800 +0800 +1C00 +3E00 +6200 +6600 +7C00 +3000 +7F00 +C3F0 +C630 +0600 +ENDCHAR +STARTCHAR uni12FA +ENCODING 4858 +BBX 11 12 2 0 +BITMAP +0800 +0800 +1C00 +3E00 +6200 +6600 +7C00 +3000 +7F00 +C300 +C660 +07E0 +ENDCHAR +STARTCHAR uni12FB +ENCODING 4859 +BBX 8 12 3 0 +BITMAP +08 +08 +1C +3E +62 +66 +7C +30 +FF +C3 +03 +03 +ENDCHAR +STARTCHAR uni12FC +ENCODING 4860 +BBX 11 12 2 0 +BITMAP +1000 +1000 +3800 +7C00 +C400 +CC00 +F800 +6000 +3000 +1BC0 +FE60 +C3C0 +ENDCHAR +STARTCHAR uni12FD +ENCODING 4861 +BBX 10 12 3 0 +BITMAP +1000 +1000 +3800 +7C00 +C7C0 +CCC0 +F800 +6000 +3000 +1800 +FF00 +C300 +ENDCHAR +STARTCHAR uni12FE +ENCODING 4862 +BBX 9 12 3 0 +BITMAP +0800 +0800 +1C00 +3E00 +6200 +6600 +7C00 +3F80 +6180 +C000 +C000 +C000 +ENDCHAR +STARTCHAR uni12FF +ENCODING 4863 +BBX 11 16 4 -2 +BITMAP +0800 +0800 +1C00 +3E00 +6200 +6600 +7C00 +3000 +1800 +FF00 +C300 +C300 +0300 +0300 +0FC0 +1860 +ENDCHAR +STARTCHAR uni1300 +ENCODING 4864 +BBX 10 13 2 0 +BITMAP +C0C0 +7F80 +0C00 +1E00 +3300 +3100 +3300 +1E00 +1800 +1C00 +0C00 +7F80 +6180 +ENDCHAR +STARTCHAR uni1301 +ENCODING 4865 +BBX 13 13 1 0 +BITMAP +C0C0 +7F80 +0C00 +1E00 +3300 +3300 +1E00 +0C00 +3F80 +6180 +61F8 +0318 +0300 +ENDCHAR +STARTCHAR uni1302 +ENCODING 4866 +BBX 12 13 1 0 +BITMAP +C0C0 +7F80 +0C00 +1E00 +3300 +3300 +1E00 +0C00 +3F80 +6180 +6180 +0330 +03F0 +ENDCHAR +STARTCHAR uni1303 +ENCODING 4867 +BBX 10 13 2 0 +BITMAP +C0C0 +7F80 +0C00 +1E00 +3300 +3300 +1E00 +0C00 +7F80 +6180 +6180 +0180 +0180 +ENDCHAR +STARTCHAR uni1304 +ENCODING 4868 +BBX 12 13 1 0 +BITMAP +C0C0 +7F80 +0C00 +1E00 +3300 +3100 +3300 +1E00 +1800 +1C00 +0FE0 +7F30 +61E0 +ENDCHAR +STARTCHAR uni1305 +ENCODING 4869 +BBX 12 13 2 0 +BITMAP +C0C0 +7F80 +0C00 +1E00 +3300 +31F0 +3330 +1E00 +1800 +1C00 +0C00 +7F80 +6180 +ENDCHAR +STARTCHAR uni1306 +ENCODING 4870 +BBX 10 13 2 0 +BITMAP +C0C0 +7F80 +0C00 +1E00 +3300 +3300 +1E00 +1FC0 +30C0 +6000 +6000 +6000 +6000 +ENDCHAR +STARTCHAR uni1307 +ENCODING 4871 +BBX 13 15 2 -2 +BITMAP +C0C0 +7F80 +0C00 +1E00 +3300 +3300 +1E00 +0C00 +7F80 +6180 +6180 +0180 +0180 +0FF0 +1C38 +ENDCHAR +STARTCHAR uni1308 +ENCODING 4872 +BBX 7 11 3 0 +BITMAP +7C +C6 +C6 +06 +06 +06 +0C +0C +0C +0C +0C +ENDCHAR +STARTCHAR uni1309 +ENCODING 4873 +BBX 11 11 2 0 +BITMAP +7C00 +C600 +C600 +0600 +0600 +0600 +0FE0 +0C60 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni130A +ENCODING 4874 +BBX 10 11 3 0 +BITMAP +7C00 +C600 +C600 +0600 +0600 +0600 +0C00 +0C00 +0C00 +0CC0 +0FC0 +ENDCHAR +STARTCHAR uni130B +ENCODING 4875 +BBX 7 11 4 0 +BITMAP +78 +FE +C6 +06 +06 +06 +0C +1C +78 +E0 +C0 +ENDCHAR +STARTCHAR uni130C +ENCODING 4876 +BBX 10 11 3 0 +BITMAP +7C00 +C600 +C600 +0600 +0600 +0600 +0C00 +0C00 +0F80 +0CC0 +0F80 +ENDCHAR +STARTCHAR uni130D +ENCODING 4877 +BBX 9 11 3 0 +BITMAP +7F00 +CD80 +7980 +0180 +0180 +0300 +0300 +0300 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni130E +ENCODING 4878 +BBX 7 12 4 0 +BITMAP +10 +10 +10 +7C +C6 +C6 +06 +04 +0C +0C +0C +0C +ENDCHAR +STARTCHAR uni130F +ENCODING 4879 +BBX 7 13 4 -1 +BITMAP +10 +10 +10 +7C +C6 +C6 +06 +04 +0C +0C +CC +FC +C0 +ENDCHAR +STARTCHAR uni1310 +ENCODING 4880 +BBX 12 11 2 0 +BITMAP +7C00 +C600 +C600 +0600 +0600 +07E0 +0EB0 +0CE0 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1312 +ENCODING 4882 +BBX 12 11 2 0 +BITMAP +7C00 +C600 +C600 +0600 +06C0 +06C0 +0FC0 +0C70 +0C30 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1313 +ENCODING 4883 +BBX 7 11 4 0 +BITMAP +78 +CC +CC +0C +7E +66 +06 +06 +06 +06 +06 +ENDCHAR +STARTCHAR uni1314 +ENCODING 4884 +BBX 10 13 3 -2 +BITMAP +7C00 +C600 +C600 +0600 +0600 +0600 +0C00 +0C00 +0C00 +0F80 +0CC0 +3F80 +6000 +ENDCHAR +STARTCHAR uni1315 +ENCODING 4885 +BBX 12 11 2 0 +BITMAP +7C00 +C6C0 +C6C0 +07F0 +0630 +0600 +0E00 +0C00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1318 +ENCODING 4888 +BBX 8 12 4 0 +BITMAP +C3 +7E +00 +7C +C6 +C6 +06 +04 +0C +0C +0C +0C +ENDCHAR +STARTCHAR uni1319 +ENCODING 4889 +BBX 11 12 2 0 +BITMAP +C300 +7E00 +0000 +7C00 +C600 +C600 +0600 +0600 +0FE0 +0C60 +0C00 +0C00 +ENDCHAR +STARTCHAR uni131A +ENCODING 4890 +BBX 10 12 3 0 +BITMAP +C300 +7E00 +0000 +7C00 +C600 +C600 +0600 +0400 +0C00 +0C00 +0CC0 +0FC0 +ENDCHAR +STARTCHAR uni131B +ENCODING 4891 +BBX 8 12 4 0 +BITMAP +C3 +7E +00 +3C +7F +43 +03 +03 +0E +3C +70 +E0 +ENDCHAR +STARTCHAR uni131C +ENCODING 4892 +BBX 10 12 3 0 +BITMAP +C300 +7E00 +0000 +7C00 +C600 +C600 +0600 +0400 +0C00 +0F80 +0CC0 +0F80 +ENDCHAR +STARTCHAR uni131D +ENCODING 4893 +BBX 9 12 3 0 +BITMAP +C300 +7E00 +0000 +7F00 +CD80 +7980 +0180 +0100 +0300 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni131E +ENCODING 4894 +BBX 7 12 4 0 +BITMAP +C6 +7C +10 +7C +C6 +C6 +06 +04 +0C +0C +0C +0C +ENDCHAR +STARTCHAR uni131F +ENCODING 4895 +BBX 9 13 3 -1 +BITMAP +C300 +7E00 +1000 +7C00 +C600 +C600 +0600 +0400 +0C00 +0C00 +0C00 +7F80 +6180 +ENDCHAR +STARTCHAR uni1320 +ENCODING 4896 +BBX 9 10 3 0 +BITMAP +3E00 +6B00 +6B00 +C980 +C980 +C980 +C980 +C980 +C980 +C980 +ENDCHAR +STARTCHAR uni1321 +ENCODING 4897 +BBX 13 10 1 0 +BITMAP +3E00 +6B00 +6B00 +C980 +C980 +C9F8 +C998 +C980 +C980 +C980 +ENDCHAR +STARTCHAR uni1322 +ENCODING 4898 +BBX 13 10 1 0 +BITMAP +3E00 +6B00 +6B00 +C980 +C980 +C980 +C980 +C980 +C998 +C9F8 +ENDCHAR +STARTCHAR uni1323 +ENCODING 4899 +BBX 9 11 3 0 +BITMAP +3E00 +6B00 +6B00 +C980 +C980 +C980 +C980 +0180 +0180 +0180 +0180 +ENDCHAR +STARTCHAR uni1324 +ENCODING 4900 +BBX 13 11 1 0 +BITMAP +3E00 +6B00 +6B00 +C980 +C980 +C980 +C980 +C980 +C9F0 +C998 +C9F0 +ENDCHAR +STARTCHAR uni1325 +ENCODING 4901 +BBX 11 11 2 0 +BITMAP +3F80 +7FC0 +4CC0 +CC60 +CE60 +C660 +0600 +0600 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni1326 +ENCODING 4902 +BBX 9 11 3 0 +BITMAP +3E00 +6B00 +6B00 +C980 +C980 +C980 +C980 +C000 +C000 +C000 +C000 +ENDCHAR +STARTCHAR uni1327 +ENCODING 4903 +BBX 12 13 3 -2 +BITMAP +3E00 +6B00 +6B00 +C980 +C980 +C980 +C980 +0180 +0180 +0180 +0180 +07E0 +0C30 +ENDCHAR +STARTCHAR uni1328 +ENCODING 4904 +BBX 15 10 0 0 +BITMAP +1F80 +3FC0 +6260 +C230 +C230 +C230 +F338 +DAB6 +CAB2 +FBBE +ENDCHAR +STARTCHAR uni1329 +ENCODING 4905 +BBX 16 10 0 0 +BITMAP +1F80 +3FC0 +6260 +C230 +C23F +C233 +F338 +DAB4 +CAB2 +FBBE +ENDCHAR +STARTCHAR uni132A +ENCODING 4906 +BBX 16 10 0 0 +BITMAP +1F80 +3FC0 +6260 +C230 +C230 +C230 +F330 +DAB0 +CAB3 +FBBF +ENDCHAR +STARTCHAR uni132B +ENCODING 4907 +BBX 14 12 1 0 +BITMAP +1FC0 +3FE0 +6230 +C230 +E330 +D2B0 +CAB0 +FBB0 +0030 +0068 +0064 +007C +ENDCHAR +STARTCHAR uni132C +ENCODING 4908 +BBX 16 10 0 0 +BITMAP +1F80 +3FC0 +6260 +C23F +C239 +C237 +F330 +DABC +CAB2 +FBBE +ENDCHAR +STARTCHAR uni132D +ENCODING 4909 +BBX 14 11 0 0 +BITMAP +1FC0 +7FE0 +C630 +E638 +9724 +F33C +0300 +0380 +0340 +0320 +03E0 +ENDCHAR +STARTCHAR uni132E +ENCODING 4910 +BBX 14 12 1 0 +BITMAP +1FC0 +3FE0 +3430 +6430 +4630 +C528 +C4A4 +C738 +E000 +D000 +C800 +F800 +ENDCHAR +STARTCHAR uni132F +ENCODING 4911 +BBX 14 13 1 -2 +BITMAP +1FC0 +3FE0 +6230 +C230 +E330 +D2B0 +CAB0 +FBB0 +0030 +0060 +0060 +01F8 +030C +ENDCHAR +STARTCHAR uni1330 +ENCODING 4912 +BBX 8 12 4 0 +BITMAP +18 +18 +18 +3C +66 +66 +3C +7E +E7 +C3 +C3 +C3 +ENDCHAR +STARTCHAR uni1331 +ENCODING 4913 +BBX 12 12 2 0 +BITMAP +1800 +1800 +1800 +3C00 +6600 +6600 +3C00 +7E00 +E700 +C3F0 +C330 +C300 +ENDCHAR +STARTCHAR uni1332 +ENCODING 4914 +BBX 12 12 2 0 +BITMAP +1800 +1800 +1800 +3C00 +6600 +6600 +3C00 +7E00 +E700 +C300 +C330 +C3F0 +ENDCHAR +STARTCHAR uni1333 +ENCODING 4915 +BBX 8 12 4 0 +BITMAP +18 +18 +18 +3C +66 +3C +7E +E7 +C7 +C3 +03 +03 +ENDCHAR +STARTCHAR uni1334 +ENCODING 4916 +BBX 12 12 2 0 +BITMAP +1800 +1800 +1800 +3C00 +6600 +6600 +3C00 +7E00 +E700 +C3E0 +C330 +C3E0 +ENDCHAR +STARTCHAR uni1335 +ENCODING 4917 +BBX 11 12 2 0 +BITMAP +1800 +1800 +1800 +3C00 +67E0 +6660 +3C00 +7E00 +E700 +C300 +C300 +C300 +ENDCHAR +STARTCHAR uni1336 +ENCODING 4918 +BBX 8 12 4 0 +BITMAP +18 +18 +18 +3C +66 +3C +7E +E7 +C3 +C3 +C0 +C0 +ENDCHAR +STARTCHAR uni1337 +ENCODING 4919 +BBX 11 14 3 -2 +BITMAP +1800 +1800 +1800 +3C00 +6600 +3C00 +7E00 +E600 +C700 +C300 +0300 +0300 +0FC0 +1860 +ENDCHAR +STARTCHAR uni1338 +ENCODING 4920 +BBX 8 10 4 0 +BITMAP +18 +3C +66 +66 +3C +7E +E7 +C3 +C3 +C3 +ENDCHAR +STARTCHAR uni1339 +ENCODING 4921 +BBX 12 10 2 0 +BITMAP +1800 +3C00 +6600 +6600 +3C00 +7E00 +E700 +C3F0 +C330 +C300 +ENDCHAR +STARTCHAR uni133A +ENCODING 4922 +BBX 12 10 2 0 +BITMAP +1800 +3C00 +6600 +6600 +3C00 +7E00 +E700 +C300 +C330 +C3F0 +ENDCHAR +STARTCHAR uni133B +ENCODING 4923 +BBX 8 11 3 0 +BITMAP +18 +3C +66 +66 +3C +7E +E6 +C7 +C3 +03 +03 +ENDCHAR +STARTCHAR uni133C +ENCODING 4924 +BBX 11 10 2 0 +BITMAP +1800 +3C00 +6600 +6600 +3C00 +7E00 +E700 +C3C0 +C360 +C3C0 +ENDCHAR +STARTCHAR uni133D +ENCODING 4925 +BBX 11 10 2 0 +BITMAP +1800 +3C00 +67E0 +6660 +3C00 +7E00 +E700 +C300 +C300 +C300 +ENDCHAR +STARTCHAR uni133E +ENCODING 4926 +BBX 8 11 3 0 +BITMAP +18 +3C +66 +66 +3C +7E +E7 +C3 +C3 +C0 +C0 +ENDCHAR +STARTCHAR uni133F +ENCODING 4927 +BBX 11 13 3 -2 +BITMAP +1800 +3C00 +6600 +6600 +3C00 +7E00 +E600 +C700 +C300 +0300 +0300 +0FC0 +1860 +ENDCHAR +STARTCHAR uni1340 +ENCODING 4928 +BBX 8 11 4 0 +BITMAP +1E +63 +C3 +C3 +C3 +FF +C3 +C3 +C3 +7F +60 +ENDCHAR +STARTCHAR uni1341 +ENCODING 4929 +BBX 12 11 2 0 +BITMAP +1E00 +6300 +C300 +C300 +C300 +FF00 +C3F0 +C330 +C300 +7F00 +6000 +ENDCHAR +STARTCHAR uni1342 +ENCODING 4930 +BBX 12 12 0 0 +BITMAP +7E00 +C300 +C300 +FF00 +C300 +C300 +7F00 +0300 +0300 +0300 +0330 +03F0 +ENDCHAR +STARTCHAR uni1343 +ENCODING 4931 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +7E +C3 +C3 +FF +C3 +C3 +7F +03 +03 +03 +03 +03 +ENDCHAR +STARTCHAR uni1344 +ENCODING 4932 +BBX 12 12 0 0 +BITMAP +7E00 +C300 +C300 +FF00 +C300 +C300 +7F00 +0300 +0300 +03E0 +0330 +03E0 +ENDCHAR +STARTCHAR uni1345 +ENCODING 4933 +BBX 8 13 4 0 +BITMAP +18 +18 +18 +7E +E3 +C3 +C3 +FF +C3 +C3 +C3 +7F +60 +ENDCHAR +STARTCHAR uni1346 +ENCODING 4934 +BBX 8 12 4 0 +BITMAP +3C +66 +C3 +FF +C3 +E7 +7E +3C +70 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni1347 +ENCODING 4935 +BBX 11 12 2 0 +BITMAP +0780 +0CC0 +D860 +FFE0 +D860 +1CE0 +0FC0 +0780 +0E00 +1800 +1800 +1800 +ENDCHAR +STARTCHAR uni1348 +ENCODING 4936 +BBX 10 11 3 0 +BITMAP +0600 +0200 +0600 +0C00 +1800 +3000 +7800 +CC00 +C440 +7FC0 +1F40 +ENDCHAR +STARTCHAR uni1349 +ENCODING 4937 +BBX 9 12 3 -2 +BITMAP +0400 +0C00 +1800 +3000 +6000 +F800 +C880 +CF80 +FE00 +1800 +3000 +3000 +ENDCHAR +STARTCHAR uni134A +ENCODING 4938 +BBX 10 11 2 0 +BITMAP +0600 +0200 +0600 +0C00 +1800 +3000 +78C0 +CC40 +C4C0 +7F80 +3E00 +ENDCHAR +STARTCHAR uni134B +ENCODING 4939 +BBX 10 12 2 -2 +BITMAP +0800 +0C00 +1800 +1000 +3000 +7000 +D800 +CC80 +7FC0 +0C40 +0C00 +0C00 +ENDCHAR +STARTCHAR uni134C +ENCODING 4940 +BBX 11 12 2 0 +BITMAP +0600 +0200 +0600 +0C00 +1800 +3000 +7800 +CC00 +C4C0 +7FA0 +1F20 +01C0 +ENDCHAR +STARTCHAR uni134D +ENCODING 4941 +BBX 8 12 2 -2 +BITMAP +3E +67 +43 +C0 +C0 +F8 +CF +DD +6C +0C +0C +0C +ENDCHAR +STARTCHAR uni134E +ENCODING 4942 +BBX 10 11 2 0 +BITMAP +1F80 +3E40 +63C0 +C000 +C000 +C000 +F000 +E800 +C4C0 +6D80 +3F80 +ENDCHAR +STARTCHAR uni134F +ENCODING 4943 +BBX 10 13 2 -2 +BITMAP +0800 +0C00 +1800 +1000 +3000 +7000 +D800 +CC80 +7FC0 +0C40 +0C00 +3F00 +6180 +ENDCHAR +STARTCHAR uni1350 +ENCODING 4944 +BBX 10 12 3 0 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1351 +ENCODING 4945 +BBX 10 12 3 0 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0C00 +0C00 +0C00 +0FC0 +0CC0 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni1352 +ENCODING 4946 +BBX 10 12 3 0 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0CC0 +0FC0 +ENDCHAR +STARTCHAR uni1353 +ENCODING 4947 +BBX 10 12 3 0 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0C00 +0C00 +0C00 +0C00 +1800 +3000 +6000 +4000 +ENDCHAR +STARTCHAR uni1354 +ENCODING 4948 +BBX 10 12 3 0 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0C00 +0C00 +0C00 +0C00 +0C00 +0F80 +0CC0 +0F80 +ENDCHAR +STARTCHAR uni1355 +ENCODING 4949 +BBX 10 12 3 0 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0C00 +0F00 +0300 +0300 +0300 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni1356 +ENCODING 4950 +BBX 10 12 3 0 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0C00 +0C00 +1800 +1800 +3000 +3000 +3000 +3000 +ENDCHAR +STARTCHAR uni1357 +ENCODING 4951 +BBX 10 14 3 -2 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +7F80 +E1C0 +ENDCHAR +STARTCHAR uni1358 +ENCODING 4952 +BBX 10 14 3 -1 +BITMAP +C0C0 +7F80 +0C00 +0C00 +0C00 +1800 +3800 +7000 +E000 +C300 +C380 +E180 +7F00 +3E00 +ENDCHAR +STARTCHAR uni1359 +ENCODING 4953 +BBX 12 15 2 -1 +BITMAP +7070 +1FC0 +0700 +3FF0 +7FF0 +C510 +8510 +8A10 +FBF0 +71F0 +0020 +0020 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni135A +ENCODING 4954 +BBX 11 13 2 0 +BITMAP +6060 +3FC0 +0600 +0200 +0600 +0C00 +1800 +3000 +78C0 +CC40 +C4C0 +7F80 +3E00 +ENDCHAR +STARTCHAR uni135D +ENCODING 4957 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 2 -13 12 +BITMAP +CCC0 +CCC0 +ENDCHAR +STARTCHAR uni135E +ENCODING 4958 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 12 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni135F +ENCODING 4959 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 2 -12 12 +BITMAP +C3 +C3 +ENDCHAR +STARTCHAR uni1360 +ENCODING 4960 +BBX 10 10 3 1 +BITMAP +0C00 +4C80 +2100 +1200 +CCC0 +CCC0 +1200 +2100 +4C80 +0C00 +ENDCHAR +STARTCHAR uni1361 +ENCODING 4961 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 6 6 3 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni1362 +ENCODING 4962 +BBX 6 6 5 3 +BITMAP +CC +CC +00 +00 +CC +CC +ENDCHAR +STARTCHAR uni1363 +ENCODING 4963 +BBX 6 7 5 3 +BITMAP +FC +00 +30 +30 +00 +30 +30 +ENDCHAR +STARTCHAR uni1364 +ENCODING 4964 +BBX 6 9 5 1 +BITMAP +FC +00 +30 +30 +00 +30 +30 +00 +FC +ENDCHAR +STARTCHAR uni1365 +ENCODING 4965 +BBX 6 7 3 3 +BITMAP +30 +30 +00 +FC +00 +30 +30 +ENDCHAR +STARTCHAR uni1366 +ENCODING 4966 +BBX 5 7 5 3 +BITMAP +C0 +C0 +00 +78 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni1367 +ENCODING 4967 +BBX 2 10 7 1 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni1368 +ENCODING 4968 +BBX 8 10 4 1 +BITMAP +18 +18 +C3 +C3 +18 +18 +C3 +C3 +18 +18 +ENDCHAR +STARTCHAR uni1369 +ENCODING 4969 +BBX 9 13 3 -1 +BITMAP +C180 +7F00 +0000 +0C00 +0C00 +1800 +3E00 +6300 +6300 +3E00 +0000 +7F00 +C180 +ENDCHAR +STARTCHAR uni136A +ENCODING 4970 +BBX 9 13 4 -1 +BITMAP +C180 +7F00 +0000 +1C00 +3600 +6600 +7C00 +6000 +7C00 +3600 +1C00 +7F00 +C180 +ENDCHAR +STARTCHAR uni136B +ENCODING 4971 +BBX 8 12 4 -1 +BITMAP +C3 +7E +00 +7E +66 +60 +60 +60 +60 +00 +7E +C3 +ENDCHAR +STARTCHAR uni136C +ENCODING 4972 +BBX 8 12 4 -1 +BITMAP +C3 +7E +00 +3C +66 +66 +66 +66 +3C +00 +7E +C3 +ENDCHAR +STARTCHAR uni136D +ENCODING 4973 +BBX 9 13 3 -1 +BITMAP +C180 +7F00 +0000 +1800 +1800 +3F00 +7300 +6000 +6300 +3F00 +0000 +7F00 +C180 +ENDCHAR +STARTCHAR uni136E +ENCODING 4974 +BBX 9 14 3 -1 +BITMAP +C180 +7F00 +0000 +3C00 +7E00 +6600 +0600 +0C00 +0E00 +1B00 +1E00 +0000 +7F00 +C180 +ENDCHAR +STARTCHAR uni136F +ENCODING 4975 +BBX 9 14 3 -1 +BITMAP +C180 +7F00 +0000 +3C00 +7E00 +6600 +0600 +0C00 +0800 +1900 +1F00 +0000 +7F00 +C180 +ENDCHAR +STARTCHAR uni1370 +ENCODING 4976 +BBX 10 13 3 -1 +BITMAP +C0C0 +7F80 +0000 +7F80 +6D80 +0C00 +0C00 +0C00 +7F80 +6180 +0000 +7F80 +C0C0 +ENDCHAR +STARTCHAR uni1371 +ENCODING 4977 +BBX 8 13 4 -1 +BITMAP +C3 +7E +00 +00 +66 +66 +7E +66 +64 +38 +00 +7E +C3 +ENDCHAR +STARTCHAR uni1372 +ENCODING 4978 +BBX 8 12 4 -1 +BITMAP +C3 +7E +00 +18 +18 +18 +18 +18 +18 +00 +7E +C3 +ENDCHAR +STARTCHAR uni1373 +ENCODING 4979 +BBX 10 12 3 -1 +BITMAP +C0C0 +7F80 +0000 +3F00 +2D00 +0C00 +1E00 +3300 +3300 +0000 +7F80 +C0C0 +ENDCHAR +STARTCHAR uni1374 +ENCODING 4980 +BBX 10 12 3 -1 +BITMAP +C0C0 +7F80 +0000 +2F00 +6D80 +6D80 +6D80 +6D80 +3980 +0000 +7F80 +C0C0 +ENDCHAR +STARTCHAR uni1375 +ENCODING 4981 +BBX 10 13 3 -1 +BITMAP +C0C0 +7F80 +0000 +6D80 +6D80 +6D80 +3F80 +0180 +0180 +0180 +0000 +7F80 +C0C0 +ENDCHAR +STARTCHAR uni1376 +ENCODING 4982 +BBX 8 13 4 -1 +BITMAP +C3 +7E +00 +3E +66 +3E +06 +0C +0C +0C +00 +7E +C3 +ENDCHAR +STARTCHAR uni1377 +ENCODING 4983 +BBX 10 13 3 -1 +BITMAP +C0C0 +7F80 +0000 +7F80 +6D80 +0C00 +0E00 +0600 +7F80 +6180 +0000 +7F80 +C0C0 +ENDCHAR +STARTCHAR uni1378 +ENCODING 4984 +BBX 8 12 4 -1 +BITMAP +C3 +7E +00 +3E +6B +6E +60 +66 +3E +00 +7E +C3 +ENDCHAR +STARTCHAR uni1379 +ENCODING 4985 +BBX 11 12 2 -1 +BITMAP +C060 +7FC0 +0000 +7FC0 +5B40 +1B00 +1B00 +1B00 +1B00 +0000 +7FC0 +C060 +ENDCHAR +STARTCHAR uni137A +ENCODING 4986 +BBX 9 14 3 -1 +BITMAP +C180 +7F00 +0000 +3E00 +3600 +0C00 +0E00 +0600 +0C00 +0C00 +0C00 +0000 +7F00 +C180 +ENDCHAR +STARTCHAR uni137B +ENCODING 4987 +BBX 8 13 4 -1 +BITMAP +C3 +7E +00 +3C +66 +7C +60 +30 +30 +30 +00 +7E +C3 +ENDCHAR +STARTCHAR uni137C +ENCODING 4988 +BBX 12 13 2 -1 +BITMAP +C030 +7FE0 +0000 +79E0 +CF30 +FBE0 +C300 +6180 +6180 +6180 +0000 +7FE0 +C030 +ENDCHAR +STARTCHAR uni1380 +ENCODING 4992 +BBX 16 8 0 1 +BITMAP +3FF0 +7FF0 +4490 +C59F +8D15 +9937 +F1E0 +F1C0 +ENDCHAR +STARTCHAR uni1381 +ENCODING 4993 +BBX 16 12 0 0 +BITMAP +3FE0 +7FE0 +C52C +853C +8A2F +FBE3 +71E0 +0040 +0040 +0080 +0098 +00F8 +ENDCHAR +STARTCHAR uni1382 +ENCODING 4994 +BBX 13 13 1 -1 +BITMAP +3FF0 +7FF0 +C510 +8510 +8A10 +FBF0 +71F0 +0020 +0020 +0078 +0048 +07F8 +0600 +ENDCHAR +STARTCHAR uni1383 +ENCODING 4995 +BBX 15 12 0 0 +BITMAP +3FE0 +7FE0 +C53E +852A +8A2E +FBE0 +71E0 +1000 +1000 +3000 +2000 +2000 +ENDCHAR +STARTCHAR uni1384 +ENCODING 4996 +BBX 11 10 2 0 +BITMAP +3800 +7C00 +C600 +C600 +C7E0 +C6A0 +C6E0 +C600 +C600 +C600 +ENDCHAR +STARTCHAR uni1385 +ENCODING 4997 +BBX 12 10 2 0 +BITMAP +3800 +7C00 +C6C0 +C6C0 +C7F0 +C630 +C600 +C600 +C600 +C600 +ENDCHAR +STARTCHAR uni1386 +ENCODING 4998 +BBX 9 12 2 -2 +BITMAP +3800 +7C00 +C600 +C600 +C600 +C600 +C600 +C780 +C680 +C780 +1800 +1800 +ENDCHAR +STARTCHAR uni1387 +ENCODING 4999 +BBX 14 10 1 0 +BITMAP +0700 +0F80 +18C0 +18C0 +F8FC +D8D4 +18DC +18C0 +18C0 +18C0 +ENDCHAR +STARTCHAR uni1388 +ENCODING 5000 +BBX 11 10 3 1 +BITMAP +0600 +0200 +07E0 +0CA0 +18E0 +3000 +7800 +CD80 +C780 +7980 +ENDCHAR +STARTCHAR uni1389 +ENCODING 5001 +BBX 12 10 2 1 +BITMAP +0600 +02C0 +07C0 +0CF0 +1830 +3000 +7800 +CD80 +C780 +7980 +ENDCHAR +STARTCHAR uni138A +ENCODING 5002 +BBX 10 13 3 -2 +BITMAP +1800 +0800 +1800 +3000 +6000 +F000 +8FC0 +9D40 +79C0 +3000 +6000 +4000 +6000 +ENDCHAR +STARTCHAR uni138B +ENCODING 5003 +BBX 10 12 2 -2 +BITMAP +3E00 +6700 +4300 +C000 +DFC0 +CD40 +CDC0 +CC00 +7F80 +0D80 +0C00 +0C00 +ENDCHAR +STARTCHAR uni138C +ENCODING 5004 +BBX 11 12 3 0 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0C00 +0C00 +0FC0 +0D60 +0DC0 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni138D +ENCODING 5005 +BBX 11 12 2 0 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0C00 +0C00 +0D80 +0F80 +0C60 +0C60 +0C00 +0C00 +ENDCHAR +STARTCHAR uni138E +ENCODING 5006 +BBX 10 14 3 -2 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0C00 +0C00 +0C00 +0C00 +0C00 +0F80 +0CC0 +7F80 +6000 +6000 +ENDCHAR +STARTCHAR uni138F +ENCODING 5007 +BBX 12 12 2 0 +BITMAP +6180 +7F80 +FFC0 +CCC0 +0C00 +0C00 +07E0 +06B0 +06E0 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni1390 +ENCODING 5008 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 0 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni1391 +ENCODING 5009 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 0 +BITMAP +90 +90 +F0 +ENDCHAR +STARTCHAR uni1392 +ENCODING 5010 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 12 3 0 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni1393 +ENCODING 5011 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 7 3 0 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni1394 +ENCODING 5012 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 0 +BITMAP +F0 +90 +90 +ENDCHAR +STARTCHAR uni1395 +ENCODING 5013 +BBX 12 6 1 0 +BITMAP +0030 +0030 +0030 +0070 +0FE0 +F000 +ENDCHAR +STARTCHAR uni1396 +ENCODING 5014 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +0C +0C +0C +1C +38 +C0 +ENDCHAR +STARTCHAR uni1397 +ENCODING 5015 +BBX 14 1 1 0 +BITMAP +FFFC +ENDCHAR +STARTCHAR uni1398 +ENCODING 5016 +BBX 14 3 1 0 +BITMAP +9000 +9000 +FFFC +ENDCHAR +STARTCHAR uni1399 +ENCODING 5017 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +C0 +C0 +C0 +CC +FC +CC +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni13A0 +ENCODING 5024 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +88 +84 +84 +84 +84 +84 +84 +88 +F0 +ENDCHAR +STARTCHAR uni13A1 +ENCODING 5025 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +F0 +88 +84 +84 +88 +F0 +A0 +90 +88 +86 +ENDCHAR +STARTCHAR uni13A2 +ENCODING 5026 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni13A3 +ENCODING 5027 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +10 +28 +24 +42 +A2 +A2 +A2 +AA +4C +ENDCHAR +STARTCHAR uni13A4 +ENCODING 5028 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +60 +90 +90 +96 +92 +9C +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni13A5 +ENCODING 5029 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +00 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni13A6 +ENCODING 5030 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +78 +84 +84 +80 +40 +FE +08 +84 +84 +78 +ENDCHAR +STARTCHAR uni13A7 +ENCODING 5031 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +04 +44 +A4 +A4 +A4 +C4 +84 +84 +78 +ENDCHAR +STARTCHAR uni13A8 +ENCODING 5032 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +98 +A8 +EC +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni13A9 +ENCODING 5033 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uni13AA +ENCODING 5034 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni13AB +ENCODING 5035 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +08 +08 +08 +08 +08 +08 +88 +88 +70 +ENDCHAR +STARTCHAR uni13AC +ENCODING 5036 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni13AD +ENCODING 5037 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +08 +08 +08 +48 +A8 +BB +49 +0A +0A +0C +ENDCHAR +STARTCHAR uni13AE +ENCODING 5038 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +04 +84 +F8 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni13AF +ENCODING 5039 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +1C +22 +22 +22 +22 +3E +22 +22 +AA +CC +ENDCHAR +STARTCHAR uni13B0 +ENCODING 5040 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +80 +80 +80 +80 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni13B1 +ENCODING 5041 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni13B2 +ENCODING 5042 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +30 +48 +48 +48 +48 +30 +B7 +B2 +B4 +48 +ENDCHAR +STARTCHAR uni13B3 +ENCODING 5043 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +B4 +B4 +CC +CC +84 +84 +ENDCHAR +STARTCHAR uni13B4 +ENCODING 5044 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +0C +12 +12 +10 +70 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni13B5 +ENCODING 5045 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +A4 +98 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni13B6 +ENCODING 5046 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +3C +40 +80 +80 +90 +98 +94 +84 +88 +70 +ENDCHAR +STARTCHAR uni13B7 +ENCODING 5047 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +CC +CC +B4 +B4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni13B8 +ENCODING 5048 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +04 +04 +04 +E4 +3C +04 +04 +04 +ENDCHAR +STARTCHAR uni13B9 +ENCODING 5049 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +30 +14 +2A +40 +78 +A4 +A4 +24 +24 +18 +ENDCHAR +STARTCHAR uni13BA +ENCODING 5050 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +64 +94 +94 +94 +9C +94 +94 +94 +94 +64 +ENDCHAR +STARTCHAR uni13BB +ENCODING 5051 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni13BC +ENCODING 5052 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +20 +70 +88 +04 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni13BD +ENCODING 5053 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -1 +BITMAP +47 +42 +42 +42 +42 +26 +1A +02 +E2 +44 +38 +ENDCHAR +STARTCHAR uni13BE +ENCODING 5054 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +FC +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni13BF +ENCODING 5055 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +40 +40 +F0 +40 +40 +40 +40 +4E +44 +3C +04 +18 +ENDCHAR +STARTCHAR uni13C0 +ENCODING 5056 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +78 +84 +84 +80 +80 +9E +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni13C1 +ENCODING 5057 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +0C +12 +12 +12 +12 +22 +22 +A2 +A2 +42 +ENDCHAR +STARTCHAR uni13C2 +ENCODING 5058 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni13C3 +ENCODING 5059 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni13C4 +ENCODING 5060 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 0 0 +BITMAP +38 +44 +E4 +04 +E4 +44 +3C +04 +04 +04 +ENDCHAR +STARTCHAR uni13C5 +ENCODING 5061 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +60 +90 +90 +90 +94 +9A +92 +90 +90 +60 +ENDCHAR +STARTCHAR uni13C6 +ENCODING 5062 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni13C7 +ENCODING 5063 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +18 +24 +04 +84 +94 +94 +94 +94 +94 +68 +ENDCHAR +STARTCHAR uni13C8 +ENCODING 5064 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +CC +32 +32 +52 +54 +90 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni13C9 +ENCODING 5065 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +A3 +A5 +66 +24 +24 +14 +14 +14 +08 +08 +ENDCHAR +STARTCHAR uni13CA +ENCODING 5066 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +1C +22 +22 +02 +9A +A2 +A2 +A2 +A2 +5C +ENDCHAR +STARTCHAR uni13CB +ENCODING 5067 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +80 +80 +78 +80 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni13CC +ENCODING 5068 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +FC +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni13CD +ENCODING 5069 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +1C +22 +22 +22 +02 +02 +1A +D2 +B2 +6C +ENDCHAR +STARTCHAR uni13CE +ENCODING 5070 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +18 +28 +48 +88 +88 +FC +08 +08 +08 +ENDCHAR +STARTCHAR uni13CF +ENCODING 5071 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +F8 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni13D0 +ENCODING 5072 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +16 +BA +D0 +10 +10 +10 +ENDCHAR +STARTCHAR uni13D1 +ENCODING 5073 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +64 +9A +E2 +44 +80 +98 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni13D2 +ENCODING 5074 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +88 +84 +84 +88 +B0 +90 +88 +84 +84 +ENDCHAR +STARTCHAR uni13D3 +ENCODING 5075 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +88 +88 +70 +ENDCHAR +STARTCHAR uni13D4 +ENCODING 5076 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +AA +AA +AA +92 +B2 +B2 +CA +CA +86 +82 +ENDCHAR +STARTCHAR uni13D5 +ENCODING 5077 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +78 +84 +8E +80 +40 +3E +08 +84 +84 +78 +ENDCHAR +STARTCHAR uni13D6 +ENCODING 5078 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +F0 +90 +10 +10 +10 +10 +12 +11 +11 +0E +ENDCHAR +STARTCHAR uni13D7 +ENCODING 5079 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +0C +14 +24 +44 +84 +ENDCHAR +STARTCHAR uni13D8 +ENCODING 5080 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +0C +14 +24 +44 +84 +ENDCHAR +STARTCHAR uni13D9 +ENCODING 5081 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +82 +82 +82 +44 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni13DA +ENCODING 5082 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni13DB +ENCODING 5083 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +6C +92 +84 +C0 +A0 +90 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni13DC +ENCODING 5084 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +30 +48 +48 +30 +48 +44 +AA +AA +AA +44 +ENDCHAR +STARTCHAR uni13DD +ENCODING 5085 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +84 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni13DE +ENCODING 5086 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni13DF +ENCODING 5087 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni13E0 +ENCODING 5088 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +04 +44 +A4 +A4 +7E +24 +24 +24 +24 +18 +ENDCHAR +STARTCHAR uni13E1 +ENCODING 5089 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +66 +99 +99 +9A +28 +44 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni13E2 +ENCODING 5090 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni13E3 +ENCODING 5091 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +78 +84 +8E +80 +80 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni13E4 +ENCODING 5092 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +F1 +91 +12 +12 +14 +14 +14 +18 +18 +10 +ENDCHAR +STARTCHAR uni13E5 +ENCODING 5093 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +80 +80 +80 +80 +86 +9A +E8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni13E6 +ENCODING 5094 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni13E7 +ENCODING 5095 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +3C +44 +84 +84 +44 +38 +ENDCHAR +STARTCHAR uni13E8 +ENCODING 5096 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +60 +90 +94 +8A +80 +80 +8A +94 +90 +60 +ENDCHAR +STARTCHAR uni13E9 +ENCODING 5097 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +88 +88 +80 +80 +9C +88 +88 +76 +ENDCHAR +STARTCHAR uni13EA +ENCODING 5098 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +22 +55 +55 +53 +51 +31 +19 +99 +95 +62 +ENDCHAR +STARTCHAR uni13EB +ENCODING 5099 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +E4 +A4 +BC +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni13EC +ENCODING 5100 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +64 +92 +92 +92 +E2 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni13ED +ENCODING 5101 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +18 +24 +24 +24 +14 +0C +04 +84 +88 +70 +ENDCHAR +STARTCHAR uni13EE +ENCODING 5102 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +80 +80 +80 +F8 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni13EF +ENCODING 5103 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3C +42 +02 +02 +02 +BA +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni13F0 +ENCODING 5104 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +38 +44 +44 +44 +78 +44 +44 +C4 +64 +58 +80 +ENDCHAR +STARTCHAR uni13F1 +ENCODING 5105 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +0E +04 +0E +11 +11 +21 +21 +29 +A9 +66 +ENDCHAR +STARTCHAR uni13F2 +ENCODING 5106 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +B8 +C4 +84 +84 +84 +ENDCHAR +STARTCHAR uni13F3 +ENCODING 5107 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +60 +90 +94 +8A +80 +80 +9C +88 +88 +78 +ENDCHAR +STARTCHAR uni13F4 +ENCODING 5108 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +84 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni13F5 +ENCODING 5109 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +20 +20 +40 +40 +80 +9C +88 +88 +70 +ENDCHAR +STARTCHAR uni13F8 +ENCODING 5112 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +38 +44 +44 +78 +44 +C4 +64 +58 +80 +ENDCHAR +STARTCHAR uni13F9 +ENCODING 5113 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +0E +04 +0E +11 +11 +21 +A9 +66 +ENDCHAR +STARTCHAR uni13FA +ENCODING 5114 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +80 +B8 +C4 +84 +84 +ENDCHAR +STARTCHAR uni13FB +ENCODING 5115 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +60 +94 +8A +80 +80 +9C +88 +78 +ENDCHAR +STARTCHAR uni13FC +ENCODING 5116 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +84 +84 +F8 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni13FD +ENCODING 5117 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +20 +40 +40 +80 +9C +88 +88 +70 +ENDCHAR +STARTCHAR uni1400 +ENCODING 5120 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +FC +00 +00 +00 +FC +ENDCHAR +STARTCHAR uni1401 +ENCODING 5121 +BBX 14 8 1 0 +BITMAP +FFFC +8004 +4008 +2010 +1020 +0840 +0480 +0300 +ENDCHAR +STARTCHAR uni1402 +ENCODING 5122 +BBX 14 13 1 0 +BITMAP +0300 +0480 +0480 +0300 +0000 +0300 +0480 +0840 +1020 +2010 +4008 +8004 +FFFC +ENDCHAR +STARTCHAR uni1403 +ENCODING 5123 +BBX 14 8 1 0 +BITMAP +0300 +0480 +0840 +1020 +2010 +4008 +8004 +FFFC +ENDCHAR +STARTCHAR uni1404 +ENCODING 5124 +BBX 14 11 1 0 +BITMAP +0300 +0300 +0000 +0300 +0480 +0840 +1020 +2010 +4008 +8004 +FFFC +ENDCHAR +STARTCHAR uni1405 +ENCODING 5125 +BBX 7 12 4 -1 +BITMAP +C0 +A0 +90 +88 +84 +82 +82 +84 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni1406 +ENCODING 5126 +BBX 7 15 4 -1 +BITMAP +C0 +C0 +00 +C0 +A0 +90 +88 +84 +82 +82 +84 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni1407 +ENCODING 5127 +BBX 7 15 4 -1 +BITMAP +CC +CC +00 +C0 +A0 +90 +88 +84 +82 +82 +84 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni1408 +ENCODING 5128 +BBX 7 12 4 -1 +BITMAP +C0 +A0 +90 +88 +A4 +A2 +A2 +A4 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni1409 +ENCODING 5129 +BBX 7 12 4 -1 +BITMAP +C0 +A0 +90 +88 +84 +B2 +B2 +84 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni140A +ENCODING 5130 +BBX 7 12 4 -1 +BITMAP +06 +0A +12 +22 +42 +82 +82 +42 +22 +12 +0A +06 +ENDCHAR +STARTCHAR uni140B +ENCODING 5131 +BBX 7 15 4 -1 +BITMAP +06 +06 +00 +06 +0A +12 +22 +42 +82 +82 +42 +22 +12 +0A +06 +ENDCHAR +STARTCHAR uni140C +ENCODING 5132 +BBX 14 8 1 0 +BITMAP +FFFC +8004 +4008 +2010 +1020 +C840 +C480 +0300 +ENDCHAR +STARTCHAR uni140D +ENCODING 5133 +BBX 14 8 1 0 +BITMAP +FFFC +8004 +4008 +2010 +1020 +084C +048C +0300 +ENDCHAR +STARTCHAR uni140E +ENCODING 5134 +BBX 14 8 1 0 +BITMAP +0300 +C480 +C840 +1020 +2010 +4008 +8004 +FFFC +ENDCHAR +STARTCHAR uni140F +ENCODING 5135 +BBX 14 8 1 0 +BITMAP +0300 +048C +084C +1020 +2010 +4008 +8004 +FFFC +ENDCHAR +STARTCHAR uni1410 +ENCODING 5136 +BBX 14 11 1 0 +BITMAP +0300 +0300 +0000 +0300 +C480 +C840 +1020 +2010 +4008 +8004 +FFFC +ENDCHAR +STARTCHAR uni1411 +ENCODING 5137 +BBX 14 11 1 0 +BITMAP +0300 +0300 +0000 +0300 +048C +084C +1020 +2010 +4008 +8004 +FFFC +ENDCHAR +STARTCHAR uni1412 +ENCODING 5138 +BBX 10 12 1 -1 +BITMAP +1800 +1400 +1200 +1100 +1080 +D040 +D040 +1080 +1100 +1200 +1400 +1800 +ENDCHAR +STARTCHAR uni1413 +ENCODING 5139 +BBX 10 12 4 -1 +BITMAP +C000 +A000 +9000 +8800 +8400 +82C0 +82C0 +8400 +8800 +9000 +A000 +C000 +ENDCHAR +STARTCHAR uni1414 +ENCODING 5140 +BBX 10 15 1 -1 +BITMAP +1800 +1800 +0000 +1800 +1400 +1200 +1100 +1080 +D040 +D040 +1080 +1100 +1200 +1400 +1800 +ENDCHAR +STARTCHAR uni1415 +ENCODING 5141 +BBX 10 15 4 -1 +BITMAP +C000 +C000 +0000 +C000 +A000 +9000 +8800 +8400 +82C0 +82C0 +8400 +8800 +9000 +A000 +C000 +ENDCHAR +STARTCHAR uni1416 +ENCODING 5142 +BBX 8 14 4 -1 +BITMAP +18 +18 +C0 +A3 +93 +88 +84 +82 +82 +84 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni1417 +ENCODING 5143 +BBX 10 12 1 -1 +BITMAP +00C0 +0140 +0240 +0440 +0840 +D040 +D040 +0840 +0440 +0240 +0140 +00C0 +ENDCHAR +STARTCHAR uni1418 +ENCODING 5144 +BBX 10 12 4 -1 +BITMAP +0600 +0A00 +1200 +2200 +4200 +82C0 +82C0 +4200 +2200 +1200 +0A00 +0600 +ENDCHAR +STARTCHAR uni1419 +ENCODING 5145 +BBX 10 15 1 -1 +BITMAP +00C0 +00C0 +0000 +00C0 +0140 +0240 +0440 +0840 +D040 +D040 +0840 +0440 +0240 +0140 +00C0 +ENDCHAR +STARTCHAR uni141A +ENCODING 5146 +BBX 10 15 4 -1 +BITMAP +0600 +0600 +0000 +0600 +0A00 +1200 +2200 +4200 +82C0 +82C0 +4200 +2200 +1200 +0A00 +0600 +ENDCHAR +STARTCHAR uni141B +ENCODING 5147 +BBX 8 14 3 -1 +BITMAP +18 +18 +03 +C5 +C9 +11 +21 +41 +41 +21 +11 +09 +05 +03 +ENDCHAR +STARTCHAR uni141C +ENCODING 5148 +BBX 9 5 3 5 +BITMAP +8880 +8880 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uni141D +ENCODING 5149 +BBX 9 8 4 5 +BITMAP +0300 +0480 +0480 +0300 +6000 +9000 +9000 +6000 +ENDCHAR +STARTCHAR uni141E +ENCODING 5150 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 5 +BITMAP +20 +20 +50 +50 +88 +F8 +ENDCHAR +STARTCHAR uni141F +ENCODING 5151 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni1420 +ENCODING 5152 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +80 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni1421 +ENCODING 5153 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1422 +ENCODING 5154 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +70 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni1423 +ENCODING 5155 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +F0 +08 +08 +08 +F0 +ENDCHAR +STARTCHAR uni1424 +ENCODING 5156 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1425 +ENCODING 5157 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 5 +BITMAP +09 +12 +24 +48 +90 +ENDCHAR +STARTCHAR uni1426 +ENCODING 5158 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 5 +BITMAP +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni1427 +ENCODING 5159 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 4 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni1428 +ENCODING 5160 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 1 1 7 +BITMAP +F8 +ENDCHAR +STARTCHAR uni1429 +ENCODING 5161 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni142A +ENCODING 5162 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni142B +ENCODING 5163 +BBX 15 10 0 0 +BITMAP +0008 +0008 +0004 +FFF4 +8012 +4022 +2040 +1080 +0900 +0600 +ENDCHAR +STARTCHAR uni142C +ENCODING 5164 +BBX 13 10 1 0 +BITMAP +0020 +0020 +0010 +0610 +0908 +1088 +2040 +4020 +8010 +FFF0 +ENDCHAR +STARTCHAR uni142D +ENCODING 5165 +BBX 10 12 3 -1 +BITMAP +C100 +A100 +9080 +8880 +8440 +8240 +8200 +8400 +8800 +9000 +A000 +C000 +ENDCHAR +STARTCHAR uni142E +ENCODING 5166 +BBX 11 12 2 -1 +BITMAP +0680 +0A80 +1240 +2240 +4220 +8220 +8200 +4200 +2200 +1200 +0A00 +0600 +ENDCHAR +STARTCHAR uni142F +ENCODING 5167 +BBX 14 7 1 0 +BITMAP +8004 +4008 +2010 +1020 +0840 +0480 +0300 +ENDCHAR +STARTCHAR uni1430 +ENCODING 5168 +BBX 14 12 1 1 +BITMAP +0300 +0480 +0480 +0300 +0000 +0300 +0480 +0840 +1020 +2010 +4008 +8004 +ENDCHAR +STARTCHAR uni1431 +ENCODING 5169 +BBX 14 7 1 1 +BITMAP +0300 +0480 +0840 +1020 +2010 +4008 +8004 +ENDCHAR +STARTCHAR uni1432 +ENCODING 5170 +BBX 14 10 1 1 +BITMAP +0300 +0300 +0000 +0300 +0480 +0840 +1020 +2010 +4008 +8004 +ENDCHAR +STARTCHAR uni1433 +ENCODING 5171 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +80 +40 +20 +10 +08 +04 +04 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni1434 +ENCODING 5172 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -1 +BITMAP +C0 +C0 +00 +80 +40 +20 +10 +08 +04 +04 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni1435 +ENCODING 5173 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -1 +BITMAP +CC +CC +00 +80 +40 +20 +10 +08 +04 +04 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni1436 +ENCODING 5174 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +80 +40 +20 +10 +48 +44 +44 +48 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni1437 +ENCODING 5175 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +80 +40 +20 +10 +08 +64 +64 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni1438 +ENCODING 5176 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +04 +08 +10 +20 +40 +80 +80 +40 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni1439 +ENCODING 5177 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -1 +BITMAP +0C +0C +00 +04 +08 +10 +20 +40 +80 +80 +40 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni143A +ENCODING 5178 +BBX 14 7 1 0 +BITMAP +8004 +4008 +2010 +1020 +C840 +C480 +0300 +ENDCHAR +STARTCHAR uni143B +ENCODING 5179 +BBX 14 7 1 0 +BITMAP +8004 +4008 +2010 +1020 +084C +048C +0300 +ENDCHAR +STARTCHAR uni143C +ENCODING 5180 +BBX 14 7 1 0 +BITMAP +0300 +C480 +C840 +1020 +2010 +4008 +8004 +ENDCHAR +STARTCHAR uni143D +ENCODING 5181 +BBX 14 7 1 0 +BITMAP +0300 +048C +084C +1020 +2010 +4008 +8004 +ENDCHAR +STARTCHAR uni143E +ENCODING 5182 +BBX 14 10 1 0 +BITMAP +0300 +0300 +0000 +0300 +C480 +C840 +1020 +2010 +4008 +8004 +ENDCHAR +STARTCHAR uni143F +ENCODING 5183 +BBX 14 10 1 0 +BITMAP +0300 +0300 +0000 +0300 +048C +084C +1020 +2010 +4008 +8004 +ENDCHAR +STARTCHAR uni1440 +ENCODING 5184 +BBX 9 12 4 -1 +BITMAP +1000 +0800 +0400 +0200 +0100 +C080 +C080 +0100 +0200 +0400 +0800 +1000 +ENDCHAR +STARTCHAR uni1441 +ENCODING 5185 +BBX 9 12 5 -1 +BITMAP +8000 +4000 +2000 +1000 +0800 +0580 +0580 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni1442 +ENCODING 5186 +BBX 9 15 4 -1 +BITMAP +1800 +1800 +0000 +1000 +0800 +0400 +0200 +0100 +C080 +C080 +0100 +0200 +0400 +0800 +1000 +ENDCHAR +STARTCHAR uni1443 +ENCODING 5187 +BBX 9 15 5 -1 +BITMAP +C000 +C000 +0000 +8000 +4000 +2000 +1000 +0800 +0580 +0580 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni1444 +ENCODING 5188 +BBX 9 12 3 -1 +BITMAP +0080 +0100 +0200 +0400 +0800 +D000 +D000 +0800 +0400 +0200 +0100 +0080 +ENDCHAR +STARTCHAR uni1445 +ENCODING 5189 +BBX 9 12 5 -1 +BITMAP +0400 +0800 +1000 +2000 +4000 +8180 +8180 +4000 +2000 +1000 +0800 +0400 +ENDCHAR +STARTCHAR uni1446 +ENCODING 5190 +BBX 9 15 3 -1 +BITMAP +0180 +0180 +0000 +0080 +0100 +0200 +0400 +0800 +D000 +D000 +0800 +0400 +0200 +0100 +0080 +ENDCHAR +STARTCHAR uni1447 +ENCODING 5191 +BBX 9 15 5 -1 +BITMAP +0C00 +0C00 +0000 +0400 +0800 +1000 +2000 +4000 +8180 +8180 +4000 +2000 +1000 +0800 +0400 +ENDCHAR +STARTCHAR uni1448 +ENCODING 5192 +BBX 7 14 4 -1 +BITMAP +18 +18 +02 +C4 +C8 +10 +20 +40 +40 +20 +10 +08 +04 +02 +ENDCHAR +STARTCHAR uni1449 +ENCODING 5193 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 3 +BITMAP +10 +20 +40 +80 +40 +20 +10 +ENDCHAR +STARTCHAR uni144A +ENCODING 5194 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 5 3 5 +BITMAP +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni144B +ENCODING 5195 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 3 +BITMAP +80 +80 +E0 +90 +90 +ENDCHAR +STARTCHAR uni144C +ENCODING 5196 +BBX 10 9 3 0 +BITMAP +8040 +8040 +8040 +8040 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni144D +ENCODING 5197 +BBX 10 14 3 0 +BITMAP +0C00 +1200 +1200 +0C00 +0000 +3F00 +4080 +8040 +8040 +8040 +8040 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni144E +ENCODING 5198 +BBX 10 9 3 0 +BITMAP +3F00 +4080 +8040 +8040 +8040 +8040 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni144F +ENCODING 5199 +BBX 10 12 3 0 +BITMAP +0C00 +0C00 +0000 +3F00 +4080 +8040 +8040 +8040 +8040 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni1450 +ENCODING 5200 +BBX 9 10 4 0 +BITMAP +FE00 +0100 +0080 +0080 +0080 +0080 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni1451 +ENCODING 5201 +BBX 9 13 4 0 +BITMAP +3000 +3000 +0000 +FE00 +0100 +0080 +0080 +0080 +0080 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni1452 +ENCODING 5202 +BBX 9 13 4 0 +BITMAP +CC00 +CC00 +0000 +FE00 +0100 +0080 +0080 +0080 +0080 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni1453 +ENCODING 5203 +BBX 9 10 4 0 +BITMAP +FE00 +0100 +0080 +0880 +0880 +0880 +0880 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni1454 +ENCODING 5204 +BBX 9 10 4 0 +BITMAP +FE00 +0100 +0080 +0080 +1880 +1880 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni1455 +ENCODING 5205 +BBX 9 10 4 0 +BITMAP +3F80 +4000 +8000 +8000 +8000 +8000 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni1456 +ENCODING 5206 +BBX 9 13 4 0 +BITMAP +0600 +0600 +0000 +3F80 +4000 +8000 +8000 +8000 +8000 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni1457 +ENCODING 5207 +BBX 13 9 1 0 +BITMAP +1008 +1008 +1008 +D008 +D008 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uni1458 +ENCODING 5208 +BBX 13 9 1 0 +BITMAP +8040 +8040 +8040 +8058 +8058 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni1459 +ENCODING 5209 +BBX 13 9 1 0 +BITMAP +07E0 +0810 +1008 +1008 +D008 +D008 +1008 +1008 +1008 +ENDCHAR +STARTCHAR uni145A +ENCODING 5210 +BBX 13 9 1 0 +BITMAP +3F00 +4080 +8040 +8040 +8058 +8058 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni145B +ENCODING 5211 +BBX 13 12 1 0 +BITMAP +0180 +0180 +0000 +07E0 +0810 +1008 +1008 +D008 +D008 +1008 +1008 +1008 +ENDCHAR +STARTCHAR uni145C +ENCODING 5212 +BBX 13 12 1 0 +BITMAP +0C00 +0C00 +0000 +3F00 +4080 +8040 +8040 +8058 +8058 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni145D +ENCODING 5213 +BBX 13 10 1 -1 +BITMAP +0FE0 +0010 +0008 +0008 +C008 +C008 +0008 +0008 +0010 +0FE0 +ENDCHAR +STARTCHAR uni145E +ENCODING 5214 +BBX 12 10 2 -1 +BITMAP +FE00 +0100 +0080 +0080 +00B0 +00B0 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni145F +ENCODING 5215 +BBX 12 13 2 -1 +BITMAP +0600 +0600 +0000 +1FC0 +0020 +0010 +0010 +C010 +C010 +0010 +0010 +0020 +1FC0 +ENDCHAR +STARTCHAR uni1460 +ENCODING 5216 +BBX 12 13 2 -1 +BITMAP +3000 +3000 +0000 +FE00 +0100 +0080 +0080 +00B0 +00B0 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni1461 +ENCODING 5217 +BBX 12 10 2 -1 +BITMAP +07F0 +0800 +1000 +1000 +D000 +D000 +1000 +1000 +0800 +07F0 +ENDCHAR +STARTCHAR uni1462 +ENCODING 5218 +BBX 11 10 2 -1 +BITMAP +3F80 +4000 +8000 +8000 +8060 +8060 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni1463 +ENCODING 5219 +BBX 12 13 1 -1 +BITMAP +00C0 +00C0 +0000 +07F0 +0800 +1000 +1000 +D000 +D000 +1000 +1000 +0800 +07F0 +ENDCHAR +STARTCHAR uni1464 +ENCODING 5220 +BBX 12 13 1 -1 +BITMAP +0600 +0600 +0000 +3F80 +4000 +8000 +8000 +8030 +8030 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni1465 +ENCODING 5221 +BBX 12 10 1 -1 +BITMAP +07F0 +0800 +D000 +D000 +1000 +1000 +D000 +D000 +0800 +07F0 +ENDCHAR +STARTCHAR uni1466 +ENCODING 5222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +78 +80 +80 +80 +78 +ENDCHAR +STARTCHAR uni1467 +ENCODING 5223 +BBX 12 9 2 0 +BITMAP +8050 +8050 +8050 +8050 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni1468 +ENCODING 5224 +BBX 12 9 2 0 +BITMAP +3F10 +4090 +8050 +8050 +8040 +8040 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni1469 +ENCODING 5225 +BBX 11 10 2 0 +BITMAP +FE20 +0120 +00A0 +00A0 +0080 +0080 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni146A +ENCODING 5226 +BBX 11 10 2 0 +BITMAP +3FA0 +4020 +8020 +8020 +8000 +8000 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni146B +ENCODING 5227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +70 +88 +88 +88 +78 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni146C +ENCODING 5228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 0 +BITMAP +30 +48 +48 +30 +00 +70 +88 +88 +88 +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni146D +ENCODING 5229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +70 +88 +88 +88 +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni146E +ENCODING 5230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +60 +60 +00 +70 +88 +88 +88 +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni146F +ENCODING 5231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +08 +08 +08 +08 +78 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1470 +ENCODING 5232 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +18 +18 +00 +08 +08 +08 +08 +78 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1471 +ENCODING 5233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +6C +6C +00 +08 +08 +08 +08 +78 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1472 +ENCODING 5234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +80 +80 +80 +F0 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1473 +ENCODING 5235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +C0 +C0 +00 +80 +80 +80 +80 +F0 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1474 +ENCODING 5236 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +38 +44 +44 +44 +3C +04 +C4 +C4 +04 +ENDCHAR +STARTCHAR uni1475 +ENCODING 5237 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +70 +88 +88 +88 +78 +0B +0B +08 +08 +ENDCHAR +STARTCHAR uni1476 +ENCODING 5238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +0E +11 +11 +11 +1E +D0 +D0 +10 +10 +ENDCHAR +STARTCHAR uni1477 +ENCODING 5239 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +70 +88 +88 +88 +F0 +86 +86 +80 +80 +ENDCHAR +STARTCHAR uni1478 +ENCODING 5240 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +0C +0C +00 +0E +11 +11 +11 +1E +D0 +D0 +10 +10 +ENDCHAR +STARTCHAR uni1479 +ENCODING 5241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +60 +60 +00 +70 +88 +88 +88 +F0 +86 +86 +80 +80 +ENDCHAR +STARTCHAR uni147A +ENCODING 5242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +02 +02 +C2 +C2 +1E +22 +22 +22 +1C +ENDCHAR +STARTCHAR uni147B +ENCODING 5243 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +08 +08 +0B +0B +78 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni147C +ENCODING 5244 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +06 +06 +00 +02 +02 +C2 +C2 +1E +22 +22 +22 +1C +ENDCHAR +STARTCHAR uni147D +ENCODING 5245 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +18 +18 +00 +08 +08 +0B +0B +78 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni147E +ENCODING 5246 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +10 +10 +10 +D0 +DE +11 +11 +11 +0E +ENDCHAR +STARTCHAR uni147F +ENCODING 5247 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +80 +80 +86 +86 +F0 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1480 +ENCODING 5248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +18 +18 +00 +10 +10 +10 +D0 +DE +11 +11 +11 +0E +ENDCHAR +STARTCHAR uni1481 +ENCODING 5249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +C0 +C0 +00 +80 +80 +86 +86 +F0 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1482 +ENCODING 5250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +10 +10 +D0 +D0 +1E +D1 +D1 +11 +0E +ENDCHAR +STARTCHAR uni1483 +ENCODING 5251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 3 +BITMAP +80 +80 +80 +E0 +90 +90 +60 +ENDCHAR +STARTCHAR uni1484 +ENCODING 5252 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 3 +BITMAP +10 +10 +10 +70 +90 +90 +60 +ENDCHAR +STARTCHAR uni1485 +ENCODING 5253 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +72 +8A +8A +8A +78 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1486 +ENCODING 5254 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +72 +8A +8A +8A +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1487 +ENCODING 5255 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +0A +0A +0A +0A +78 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1488 +ENCODING 5256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +84 +84 +84 +84 +F0 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1489 +ENCODING 5257 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +70 +88 +88 +88 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni148A +ENCODING 5258 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 0 +BITMAP +60 +90 +90 +60 +00 +70 +88 +88 +88 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni148B +ENCODING 5259 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +70 +88 +88 +88 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni148C +ENCODING 5260 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +60 +60 +00 +70 +88 +88 +88 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni148D +ENCODING 5261 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +08 +08 +08 +08 +08 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni148E +ENCODING 5262 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +18 +18 +00 +08 +08 +08 +08 +08 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni148F +ENCODING 5263 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +6C +6C +00 +08 +08 +08 +08 +08 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1490 +ENCODING 5264 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +80 +80 +80 +80 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1491 +ENCODING 5265 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +C0 +C0 +00 +80 +80 +80 +80 +80 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1492 +ENCODING 5266 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +1C +22 +22 +22 +02 +C2 +C2 +02 +02 +ENDCHAR +STARTCHAR uni1493 +ENCODING 5267 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +70 +88 +88 +8B +0B +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1494 +ENCODING 5268 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +0E +11 +11 +D1 +D0 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1495 +ENCODING 5269 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +70 +88 +88 +88 +80 +8C +8C +80 +80 +ENDCHAR +STARTCHAR uni1496 +ENCODING 5270 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +0C +0C +00 +0E +11 +11 +D1 +D0 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1497 +ENCODING 5271 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +60 +60 +00 +70 +88 +88 +88 +80 +8C +8C +80 +80 +ENDCHAR +STARTCHAR uni1498 +ENCODING 5272 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +02 +02 +C2 +C2 +02 +22 +22 +22 +1C +ENDCHAR +STARTCHAR uni1499 +ENCODING 5273 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +08 +08 +08 +0B +0B +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni149A +ENCODING 5274 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +06 +06 +00 +02 +02 +C2 +C2 +02 +22 +22 +22 +1C +ENDCHAR +STARTCHAR uni149B +ENCODING 5275 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +18 +18 +00 +08 +08 +0B +0B +08 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni149C +ENCODING 5276 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +10 +10 +10 +D0 +D0 +11 +11 +11 +0E +ENDCHAR +STARTCHAR uni149D +ENCODING 5277 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +80 +80 +80 +80 +86 +86 +80 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni149E +ENCODING 5278 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +18 +18 +00 +10 +10 +10 +D0 +D0 +11 +11 +11 +0E +ENDCHAR +STARTCHAR uni149F +ENCODING 5279 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +C0 +C0 +00 +80 +80 +86 +86 +80 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni14A0 +ENCODING 5280 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +10 +10 +10 +D0 +D0 +11 +D1 +D1 +0E +ENDCHAR +STARTCHAR uni14A1 +ENCODING 5281 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 3 +BITMAP +80 +80 +80 +80 +90 +90 +60 +ENDCHAR +STARTCHAR uni14A2 +ENCODING 5282 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 3 +BITMAP +10 +10 +10 +10 +90 +90 +60 +ENDCHAR +STARTCHAR uni14A3 +ENCODING 5283 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni14A4 +ENCODING 5284 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 0 +BITMAP +60 +90 +90 +60 +00 +F8 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni14A5 +ENCODING 5285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni14A6 +ENCODING 5286 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +60 +60 +00 +F8 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni14A7 +ENCODING 5287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uni14A8 +ENCODING 5288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +18 +18 +00 +08 +08 +08 +08 +08 +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uni14A9 +ENCODING 5289 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +6C +6C +00 +08 +08 +08 +08 +08 +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uni14AA +ENCODING 5290 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni14AB +ENCODING 5291 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +C0 +C0 +00 +80 +80 +80 +80 +80 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni14AC +ENCODING 5292 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +3E +02 +02 +C2 +C2 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni14AD +ENCODING 5293 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +F8 +08 +08 +0B +0B +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni14AE +ENCODING 5294 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +1F +10 +10 +D0 +D0 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni14AF +ENCODING 5295 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +F8 +80 +80 +86 +86 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni14B0 +ENCODING 5296 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +0C +0C +00 +1F +10 +10 +D0 +D0 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni14B1 +ENCODING 5297 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +60 +60 +00 +F8 +80 +80 +8C +8C +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni14B2 +ENCODING 5298 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +02 +02 +02 +C2 +C2 +02 +02 +02 +3E +ENDCHAR +STARTCHAR uni14B3 +ENCODING 5299 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +08 +08 +08 +0B +0B +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uni14B4 +ENCODING 5300 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +06 +06 +00 +02 +02 +02 +C2 +C2 +02 +02 +02 +3E +ENDCHAR +STARTCHAR uni14B5 +ENCODING 5301 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +18 +18 +00 +08 +08 +08 +0B +0B +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uni14B6 +ENCODING 5302 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +10 +10 +10 +D0 +D0 +10 +10 +10 +1F +ENDCHAR +STARTCHAR uni14B7 +ENCODING 5303 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +80 +80 +80 +86 +86 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni14B8 +ENCODING 5304 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +18 +18 +00 +10 +10 +10 +D0 +D0 +10 +10 +10 +1F +ENDCHAR +STARTCHAR uni14B9 +ENCODING 5305 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +C0 +C0 +00 +80 +80 +80 +8C +8C +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni14BA +ENCODING 5306 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +10 +10 +D0 +D0 +10 +D0 +D0 +10 +1F +ENDCHAR +STARTCHAR uni14BB +ENCODING 5307 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 4 +BITMAP +80 +80 +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uni14BC +ENCODING 5308 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 6 +BITMAP +70 +80 +80 +70 +ENDCHAR +STARTCHAR uni14BD +ENCODING 5309 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 4 +BITMAP +10 +10 +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uni14BE +ENCODING 5310 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 5 +BITMAP +60 +90 +20 +40 +F0 +ENDCHAR +STARTCHAR uni14BF +ENCODING 5311 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +04 +08 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni14C0 +ENCODING 5312 +BBX 9 5 3 0 +BITMAP +FF00 +0880 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uni14C1 +ENCODING 5313 +BBX 9 10 3 0 +BITMAP +1800 +2400 +2400 +1800 +0000 +7F80 +8800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni14C2 +ENCODING 5314 +BBX 9 5 3 0 +BITMAP +7F80 +8800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni14C3 +ENCODING 5315 +BBX 9 8 3 0 +BITMAP +1800 +1800 +0000 +7F80 +8800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni14C4 +ENCODING 5316 +BBX 9 5 3 0 +BITMAP +0700 +0880 +0880 +0880 +FF00 +ENDCHAR +STARTCHAR uni14C5 +ENCODING 5317 +BBX 9 8 3 0 +BITMAP +0600 +0600 +0000 +0700 +0880 +0880 +0880 +FF00 +ENDCHAR +STARTCHAR uni14C6 +ENCODING 5318 +BBX 9 8 3 0 +BITMAP +3300 +3300 +0000 +0700 +0880 +0880 +0880 +FF00 +ENDCHAR +STARTCHAR uni14C7 +ENCODING 5319 +BBX 9 5 3 0 +BITMAP +7000 +8800 +8800 +8800 +7F80 +ENDCHAR +STARTCHAR uni14C8 +ENCODING 5320 +BBX 9 8 4 0 +BITMAP +3000 +3000 +0000 +7000 +8800 +8800 +8800 +7F80 +ENDCHAR +STARTCHAR uni14C9 +ENCODING 5321 +BBX 12 5 2 0 +BITMAP +1FE0 +C110 +C110 +0110 +00E0 +ENDCHAR +STARTCHAR uni14CA +ENCODING 5322 +BBX 12 5 2 0 +BITMAP +FF00 +08B0 +08B0 +0880 +0700 +ENDCHAR +STARTCHAR uni14CB +ENCODING 5323 +BBX 12 5 2 0 +BITMAP +0E00 +1100 +D100 +D100 +0FF0 +ENDCHAR +STARTCHAR uni14CC +ENCODING 5324 +BBX 9 5 3 0 +BITMAP +7180 +8980 +8800 +8800 +7F80 +ENDCHAR +STARTCHAR uni14CD +ENCODING 5325 +BBX 12 8 2 0 +BITMAP +0C00 +0C00 +0000 +0E00 +1100 +D100 +D100 +0FF0 +ENDCHAR +STARTCHAR uni14CE +ENCODING 5326 +BBX 9 8 3 0 +BITMAP +6000 +6000 +0000 +7180 +8980 +8800 +8800 +7F80 +ENDCHAR +STARTCHAR uni14CF +ENCODING 5327 +BBX 9 8 3 0 +BITMAP +CC00 +CC00 +0000 +7000 +8800 +8800 +8800 +7F80 +ENDCHAR +STARTCHAR uni14D0 +ENCODING 5328 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 6 +BITMAP +60 +90 +90 +7E +ENDCHAR +STARTCHAR uni14D1 +ENCODING 5329 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 3 +BITMAP +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni14D2 +ENCODING 5330 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 6 +BITMAP +0C +12 +12 +FC +ENDCHAR +STARTCHAR uni14D3 +ENCODING 5331 +BBX 9 5 3 0 +BITMAP +FF00 +0080 +0080 +0080 +0700 +ENDCHAR +STARTCHAR uni14D4 +ENCODING 5332 +BBX 9 10 3 0 +BITMAP +3000 +4800 +4800 +3000 +0000 +7F80 +8000 +8000 +8000 +7000 +ENDCHAR +STARTCHAR uni14D5 +ENCODING 5333 +BBX 9 5 3 0 +BITMAP +7F80 +8000 +8000 +8000 +7000 +ENDCHAR +STARTCHAR uni14D6 +ENCODING 5334 +BBX 9 8 3 0 +BITMAP +3000 +3000 +0000 +7F80 +8000 +8000 +8000 +7000 +ENDCHAR +STARTCHAR uni14D7 +ENCODING 5335 +BBX 9 5 3 0 +BITMAP +0700 +0080 +0080 +0080 +FF00 +ENDCHAR +STARTCHAR uni14D8 +ENCODING 5336 +BBX 9 8 3 0 +BITMAP +0600 +0600 +0000 +0700 +0080 +0080 +0080 +FF00 +ENDCHAR +STARTCHAR uni14D9 +ENCODING 5337 +BBX 9 8 3 0 +BITMAP +1980 +1980 +0000 +0700 +0080 +0080 +0080 +FF00 +ENDCHAR +STARTCHAR uni14DA +ENCODING 5338 +BBX 9 5 3 0 +BITMAP +7000 +8000 +8000 +8000 +7F80 +ENDCHAR +STARTCHAR uni14DB +ENCODING 5339 +BBX 9 8 4 0 +BITMAP +3000 +3000 +0000 +7000 +8000 +8000 +8000 +7F80 +ENDCHAR +STARTCHAR uni14DC +ENCODING 5340 +BBX 12 5 2 0 +BITMAP +1FE0 +C010 +C010 +0010 +00E0 +ENDCHAR +STARTCHAR uni14DD +ENCODING 5341 +BBX 12 5 2 0 +BITMAP +FF00 +00B0 +00B0 +0080 +0700 +ENDCHAR +STARTCHAR uni14DE +ENCODING 5342 +BBX 12 5 2 0 +BITMAP +0FF0 +D000 +D000 +1000 +0E00 +ENDCHAR +STARTCHAR uni14DF +ENCODING 5343 +BBX 12 5 2 0 +BITMAP +7F80 +8030 +8030 +8000 +7000 +ENDCHAR +STARTCHAR uni14E0 +ENCODING 5344 +BBX 12 8 2 0 +BITMAP +0600 +0600 +0000 +0FF0 +D000 +D000 +1000 +0E00 +ENDCHAR +STARTCHAR uni14E1 +ENCODING 5345 +BBX 12 8 2 0 +BITMAP +3000 +3000 +0000 +7F80 +8030 +8030 +8000 +7000 +ENDCHAR +STARTCHAR uni14E2 +ENCODING 5346 +BBX 9 5 3 0 +BITMAP +C700 +C080 +0080 +0080 +FF00 +ENDCHAR +STARTCHAR uni14E3 +ENCODING 5347 +BBX 12 5 2 0 +BITMAP +0700 +00B0 +00B0 +0080 +FF00 +ENDCHAR +STARTCHAR uni14E4 +ENCODING 5348 +BBX 9 8 3 0 +BITMAP +0300 +0300 +0000 +C700 +C080 +0080 +0080 +FF00 +ENDCHAR +STARTCHAR uni14E5 +ENCODING 5349 +BBX 12 8 2 0 +BITMAP +0300 +0300 +0000 +0700 +00B0 +00B0 +0080 +FF00 +ENDCHAR +STARTCHAR uni14E6 +ENCODING 5350 +BBX 12 5 2 0 +BITMAP +0E00 +D000 +D000 +1000 +0FF0 +ENDCHAR +STARTCHAR uni14E7 +ENCODING 5351 +BBX 9 5 4 0 +BITMAP +7180 +8180 +8000 +8000 +7F80 +ENDCHAR +STARTCHAR uni14E8 +ENCODING 5352 +BBX 12 8 2 0 +BITMAP +0C00 +0C00 +0000 +0E00 +D000 +D000 +1000 +0FF0 +ENDCHAR +STARTCHAR uni14E9 +ENCODING 5353 +BBX 9 8 3 0 +BITMAP +6000 +6000 +0000 +7180 +8180 +8000 +8000 +7F80 +ENDCHAR +STARTCHAR uni14EA +ENCODING 5354 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 6 +BITMAP +60 +80 +80 +7E +ENDCHAR +STARTCHAR uni14EB +ENCODING 5355 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 5 +BITMAP +30 +C0 +30 +C0 +30 +ENDCHAR +STARTCHAR uni14EC +ENCODING 5356 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +0C +30 +C0 +60 +18 +04 +18 +60 +C0 +30 +0C +ENDCHAR +STARTCHAR uni14ED +ENCODING 5357 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +80 +40 +38 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni14EE +ENCODING 5358 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +18 +24 +24 +18 +00 +08 +08 +08 +10 +E0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni14EF +ENCODING 5359 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +08 +08 +08 +10 +E0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni14F0 +ENCODING 5360 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 0 +BITMAP +18 +18 +00 +08 +08 +08 +08 +08 +10 +E0 +80 +80 +80 +ENDCHAR +STARTCHAR uni14F1 +ENCODING 5361 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +08 +08 +38 +40 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni14F2 +ENCODING 5362 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 0 +BITMAP +18 +18 +00 +08 +08 +08 +38 +40 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni14F3 +ENCODING 5363 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +CC +CC +00 +08 +08 +08 +38 +40 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni14F4 +ENCODING 5364 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +E0 +10 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni14F5 +ENCODING 5365 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 0 +BITMAP +C0 +C0 +00 +80 +80 +80 +E0 +10 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni14F6 +ENCODING 5366 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +20 +20 +20 +20 +20 +10 +CE +C2 +02 +02 +ENDCHAR +STARTCHAR uni14F7 +ENCODING 5367 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +80 +80 +80 +86 +86 +40 +38 +08 +08 +08 +ENDCHAR +STARTCHAR uni14F8 +ENCODING 5368 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +02 +02 +02 +C2 +C2 +04 +38 +20 +20 +20 +ENDCHAR +STARTCHAR uni14F9 +ENCODING 5369 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +08 +08 +08 +08 +08 +10 +E6 +86 +80 +80 +ENDCHAR +STARTCHAR uni14FA +ENCODING 5370 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +06 +06 +00 +02 +02 +02 +C2 +C2 +04 +38 +20 +20 +20 +ENDCHAR +STARTCHAR uni14FB +ENCODING 5371 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +18 +18 +00 +08 +08 +08 +08 +08 +10 +E6 +86 +80 +80 +ENDCHAR +STARTCHAR uni14FC +ENCODING 5372 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +C4 +C4 +1C +20 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni14FD +ENCODING 5373 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +08 +08 +38 +40 +8C +8C +80 +80 +80 +ENDCHAR +STARTCHAR uni14FE +ENCODING 5374 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +0C +0C +00 +04 +C4 +C4 +1C +20 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni14FF +ENCODING 5375 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +18 +18 +00 +08 +08 +08 +38 +40 +8C +8C +80 +80 +80 +ENDCHAR +STARTCHAR uni1500 +ENCODING 5376 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 0 0 +BITMAP +40 +40 +40 +70 +08 +C4 +C4 +04 +04 +04 +ENDCHAR +STARTCHAR uni1501 +ENCODING 5377 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +80 +80 +86 +E6 +10 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1502 +ENCODING 5378 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 0 0 +BITMAP +60 +60 +00 +40 +40 +40 +70 +08 +C4 +C4 +04 +04 +04 +ENDCHAR +STARTCHAR uni1503 +ENCODING 5379 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +C0 +C0 +00 +80 +80 +86 +E6 +10 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1504 +ENCODING 5380 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +10 +D0 +D0 +1C +02 +C1 +C1 +01 +01 +01 +ENDCHAR +STARTCHAR uni1505 +ENCODING 5381 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 2 4 +BITMAP +80 +80 +C0 +20 +20 +20 +ENDCHAR +STARTCHAR uni1506 +ENCODING 5382 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 3 +BITMAP +60 +80 +40 +20 +C0 +ENDCHAR +STARTCHAR uni1507 +ENCODING 5383 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 2 4 +BITMAP +20 +20 +60 +80 +80 +80 +ENDCHAR +STARTCHAR uni1508 +ENCODING 5384 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 6 +BITMAP +80 +80 +80 +70 +ENDCHAR +STARTCHAR uni1509 +ENCODING 5385 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 3 +BITMAP +80 +80 +E0 +10 +70 +90 +60 +ENDCHAR +STARTCHAR uni150A +ENCODING 5386 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 3 +BITMAP +10 +10 +70 +80 +E0 +90 +60 +ENDCHAR +STARTCHAR uni150B +ENCODING 5387 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 2 1 +BITMAP +C0 +C0 +00 +80 +80 +C0 +20 +20 +20 +00 +60 +60 +ENDCHAR +STARTCHAR uni150C +ENCODING 5388 +BBX 11 14 3 -1 +BITMAP +C000 +C000 +0020 +8040 +8080 +C100 +2200 +2400 +2400 +0200 +6100 +6080 +0040 +0020 +ENDCHAR +STARTCHAR uni150D +ENCODING 5389 +BBX 14 13 1 0 +BITMAP +C000 +C000 +0000 +81FC +8200 +C400 +2400 +2400 +2400 +0400 +6400 +6200 +01FC +ENDCHAR +STARTCHAR uni150E +ENCODING 5390 +BBX 10 12 3 0 +BITMAP +C000 +C000 +0000 +8400 +8400 +C400 +2400 +2780 +2440 +0440 +6440 +6380 +ENDCHAR +STARTCHAR uni150F +ENCODING 5391 +BBX 10 12 3 0 +BITMAP +C000 +C000 +0000 +8400 +8400 +C400 +2400 +2400 +2440 +0440 +6440 +6380 +ENDCHAR +STARTCHAR uni1510 +ENCODING 5392 +BBX 9 9 3 0 +BITMAP +7000 +8800 +8800 +8800 +0800 +0880 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uni1511 +ENCODING 5393 +BBX 9 9 3 0 +BITMAP +0700 +0880 +0880 +0880 +0800 +8800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni1512 +ENCODING 5394 +BBX 9 12 3 0 +BITMAP +0600 +0600 +0000 +0700 +0880 +0880 +0880 +0800 +8800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni1513 +ENCODING 5395 +BBX 9 5 3 0 +BITMAP +6300 +9080 +8880 +8480 +6300 +ENDCHAR +STARTCHAR uni1514 +ENCODING 5396 +BBX 9 9 3 0 +BITMAP +0C00 +0C00 +0000 +0000 +6300 +9080 +8880 +8480 +6300 +ENDCHAR +STARTCHAR uni1515 +ENCODING 5397 +BBX 9 5 3 0 +BITMAP +6300 +8480 +8880 +9080 +6300 +ENDCHAR +STARTCHAR uni1516 +ENCODING 5398 +BBX 9 9 3 0 +BITMAP +0C00 +0C00 +0000 +0000 +6300 +8480 +8880 +9080 +6300 +ENDCHAR +STARTCHAR uni1517 +ENCODING 5399 +BBX 11 9 2 0 +BITMAP +1C00 +2200 +2200 +2200 +0200 +C220 +C220 +0220 +01C0 +ENDCHAR +STARTCHAR uni1518 +ENCODING 5400 +BBX 11 9 2 0 +BITMAP +7000 +8800 +8860 +8860 +0800 +0880 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uni1519 +ENCODING 5401 +BBX 11 9 2 0 +BITMAP +01C0 +0220 +C220 +C220 +0200 +2200 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uni151A +ENCODING 5402 +BBX 11 9 2 0 +BITMAP +0700 +0880 +0880 +0880 +0800 +8860 +8860 +8800 +7000 +ENDCHAR +STARTCHAR uni151B +ENCODING 5403 +BBX 11 12 2 0 +BITMAP +0180 +0180 +0000 +01C0 +0220 +C220 +C220 +0200 +2200 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uni151C +ENCODING 5404 +BBX 11 12 2 0 +BITMAP +0600 +0600 +0000 +0700 +0880 +0880 +0880 +0800 +8860 +8860 +8800 +7000 +ENDCHAR +STARTCHAR uni151D +ENCODING 5405 +BBX 12 5 2 0 +BITMAP +CC60 +D210 +1110 +1090 +0C60 +ENDCHAR +STARTCHAR uni151E +ENCODING 5406 +BBX 12 5 2 0 +BITMAP +6330 +90B0 +8880 +8480 +6300 +ENDCHAR +STARTCHAR uni151F +ENCODING 5407 +BBX 12 9 2 0 +BITMAP +0300 +0300 +0000 +0000 +CC60 +D210 +1110 +1090 +0C60 +ENDCHAR +STARTCHAR uni1520 +ENCODING 5408 +BBX 12 9 2 0 +BITMAP +0C00 +0C00 +0000 +0000 +6330 +90B0 +8880 +8480 +6300 +ENDCHAR +STARTCHAR uni1521 +ENCODING 5409 +BBX 12 5 2 0 +BITMAP +CC60 +D210 +1110 +1090 +0C60 +ENDCHAR +STARTCHAR uni1522 +ENCODING 5410 +BBX 12 5 2 0 +BITMAP +6330 +84B0 +8880 +9080 +6300 +ENDCHAR +STARTCHAR uni1523 +ENCODING 5411 +BBX 12 9 2 0 +BITMAP +0300 +0300 +0000 +0000 +CC60 +D090 +1110 +1210 +0C60 +ENDCHAR +STARTCHAR uni1524 +ENCODING 5412 +BBX 12 9 3 0 +BITMAP +1800 +1800 +0000 +0000 +6330 +84B0 +8880 +9080 +6300 +ENDCHAR +STARTCHAR uni1525 +ENCODING 5413 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 7 +BITMAP +90 +A8 +48 +ENDCHAR +STARTCHAR uni1526 +ENCODING 5414 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +10 +20 +40 +F8 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1527 +ENCODING 5415 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 0 +BITMAP +30 +48 +48 +30 +80 +40 +20 +10 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1528 +ENCODING 5416 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +40 +20 +10 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1529 +ENCODING 5417 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 0 +BITMAP +C0 +C0 +00 +80 +40 +20 +10 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni152A +ENCODING 5418 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +08 +08 +08 +08 +F8 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni152B +ENCODING 5419 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 0 +BITMAP +18 +18 +00 +08 +08 +08 +08 +08 +F8 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni152C +ENCODING 5420 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +CC +CC +00 +08 +08 +08 +08 +08 +F8 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni152D +ENCODING 5421 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +80 +80 +F8 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni152E +ENCODING 5422 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 0 +BITMAP +C0 +C0 +00 +80 +80 +80 +80 +80 +F8 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni152F +ENCODING 5423 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +02 +04 +C8 +D0 +3E +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni1530 +ENCODING 5424 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +08 +10 +23 +43 +F8 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1531 +ENCODING 5425 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +10 +08 +04 +C2 +DF +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1532 +ENCODING 5426 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +80 +40 +26 +16 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1533 +ENCODING 5427 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 0 +BITMAP +18 +18 +00 +10 +08 +04 +C2 +DF +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1534 +ENCODING 5428 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +C0 +C0 +00 +80 +40 +26 +16 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1535 +ENCODING 5429 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +02 +02 +02 +02 +02 +3E +D0 +C8 +04 +02 +ENDCHAR +STARTCHAR uni1536 +ENCODING 5430 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +08 +08 +08 +08 +08 +FB +43 +20 +10 +08 +ENDCHAR +STARTCHAR uni1537 +ENCODING 5431 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +06 +06 +00 +02 +02 +02 +02 +02 +3E +D0 +C8 +04 +02 +ENDCHAR +STARTCHAR uni1538 +ENCODING 5432 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 0 +BITMAP +18 +18 +00 +08 +08 +08 +08 +08 +FB +43 +20 +10 +08 +ENDCHAR +STARTCHAR uni1539 +ENCODING 5433 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +10 +10 +10 +10 +10 +DF +C2 +04 +08 +10 +ENDCHAR +STARTCHAR uni153A +ENCODING 5434 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +80 +80 +80 +80 +80 +F8 +16 +26 +40 +80 +ENDCHAR +STARTCHAR uni153B +ENCODING 5435 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 0 +BITMAP +18 +18 +00 +10 +10 +10 +10 +10 +DF +C2 +04 +08 +10 +ENDCHAR +STARTCHAR uni153C +ENCODING 5436 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +C0 +C0 +00 +80 +80 +80 +80 +80 +F8 +16 +26 +40 +80 +ENDCHAR +STARTCHAR uni153D +ENCODING 5437 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +10 +10 +D0 +D0 +10 +1F +C2 +C4 +08 +10 +ENDCHAR +STARTCHAR uni153E +ENCODING 5438 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 4 +BITMAP +80 +80 +F0 +20 +40 +80 +ENDCHAR +STARTCHAR uni153F +ENCODING 5439 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 6 +BITMAP +50 +50 +A8 +A8 +ENDCHAR +STARTCHAR uni1540 +ENCODING 5440 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 3 +BITMAP +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni1541 +ENCODING 5441 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 3 +BITMAP +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni1542 +ENCODING 5442 +BBX 9 6 3 0 +BITMAP +8780 +8400 +8400 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni1543 +ENCODING 5443 +BBX 9 6 3 0 +BITMAP +F080 +1080 +1080 +1080 +1080 +0F00 +ENDCHAR +STARTCHAR uni1544 +ENCODING 5444 +BBX 9 6 3 0 +BITMAP +0F00 +1080 +1080 +1080 +1080 +F080 +ENDCHAR +STARTCHAR uni1545 +ENCODING 5445 +BBX 9 11 3 0 +BITMAP +3000 +4800 +4800 +3000 +0000 +7800 +8400 +8400 +8400 +8400 +8780 +ENDCHAR +STARTCHAR uni1546 +ENCODING 5446 +BBX 9 6 3 0 +BITMAP +7800 +8400 +8400 +8400 +8400 +8780 +ENDCHAR +STARTCHAR uni1547 +ENCODING 5447 +BBX 9 9 3 0 +BITMAP +3000 +3000 +0000 +7800 +8400 +8400 +8400 +8400 +8780 +ENDCHAR +STARTCHAR uni1548 +ENCODING 5448 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +F8 +04 +04 +04 +04 +F8 +80 +80 +80 +ENDCHAR +STARTCHAR uni1549 +ENCODING 5449 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +60 +60 +00 +F8 +04 +04 +04 +04 +F8 +80 +80 +80 +ENDCHAR +STARTCHAR uni154A +ENCODING 5450 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +80 +80 +F8 +04 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni154B +ENCODING 5451 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +7C +80 +80 +80 +80 +7C +04 +04 +04 +ENDCHAR +STARTCHAR uni154C +ENCODING 5452 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +30 +00 +7C +80 +80 +80 +80 +7C +04 +04 +04 +ENDCHAR +STARTCHAR uni154D +ENCODING 5453 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +04 +04 +7C +80 +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni154E +ENCODING 5454 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +0C +0C +00 +1F +20 +20 +20 +20 +1F +C1 +C1 +01 +ENDCHAR +STARTCHAR uni154F +ENCODING 5455 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +30 +30 +00 +7C +80 +80 +83 +83 +7C +04 +04 +04 +ENDCHAR +STARTCHAR uni1550 +ENCODING 5456 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 2 4 +BITMAP +60 +80 +80 +60 +20 +20 +ENDCHAR +STARTCHAR uni1551 +ENCODING 5457 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 5 +BITMAP +C0 +30 +C0 +30 +C0 +ENDCHAR +STARTCHAR uni1552 +ENCODING 5458 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +C0 +30 +0C +18 +60 +80 +60 +18 +0C +30 +C0 +ENDCHAR +STARTCHAR uni1553 +ENCODING 5459 +BBX 13 8 2 0 +BITMAP +6000 +9008 +9010 +6020 +2040 +1080 +0900 +0600 +ENDCHAR +STARTCHAR uni1554 +ENCODING 5460 +BBX 13 13 2 -1 +BITMAP +0600 +0900 +0900 +0600 +0000 +0600 +0900 +1080 +2040 +6020 +9010 +9008 +6000 +ENDCHAR +STARTCHAR uni1555 +ENCODING 5461 +BBX 13 8 2 -1 +BITMAP +0600 +0900 +1080 +2040 +6020 +9010 +9008 +6000 +ENDCHAR +STARTCHAR uni1556 +ENCODING 5462 +BBX 13 11 2 -1 +BITMAP +0600 +0600 +0000 +0600 +0900 +1080 +2040 +6020 +9010 +9008 +6000 +ENDCHAR +STARTCHAR uni1557 +ENCODING 5463 +BBX 8 12 4 -2 +BITMAP +60 +90 +98 +64 +02 +01 +01 +02 +04 +08 +10 +20 +ENDCHAR +STARTCHAR uni1558 +ENCODING 5464 +BBX 8 15 4 -2 +BITMAP +60 +60 +00 +60 +90 +98 +64 +02 +01 +01 +02 +04 +08 +10 +20 +ENDCHAR +STARTCHAR uni1559 +ENCODING 5465 +BBX 8 12 4 -2 +BITMAP +06 +09 +19 +26 +40 +80 +80 +40 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni155A +ENCODING 5466 +BBX 8 15 4 -2 +BITMAP +06 +06 +00 +06 +09 +19 +26 +40 +80 +80 +40 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni155B +ENCODING 5467 +BBX 12 15 2 -2 +BITMAP +0060 +0060 +0000 +0060 +0090 +0190 +0260 +0400 +C800 +C800 +0400 +0200 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uni155C +ENCODING 5468 +BBX 11 15 2 -2 +BITMAP +0600 +0600 +0000 +0600 +0900 +1900 +2600 +4000 +8060 +8060 +4000 +2000 +1000 +0800 +0400 +ENDCHAR +STARTCHAR uni155D +ENCODING 5469 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +18 +24 +58 +80 +40 +20 +10 +ENDCHAR +STARTCHAR uni155E +ENCODING 5470 +BBX 10 9 3 0 +BITMAP +6040 +9040 +9040 +E040 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni155F +ENCODING 5471 +BBX 10 9 3 0 +BITMAP +8180 +8240 +8240 +81C0 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni1560 +ENCODING 5472 +BBX 10 9 3 0 +BITMAP +3F00 +4080 +8040 +8040 +8040 +E040 +9040 +9040 +6040 +ENDCHAR +STARTCHAR uni1561 +ENCODING 5473 +BBX 10 9 3 0 +BITMAP +3F00 +4080 +8040 +8040 +8040 +81C0 +8240 +8240 +8180 +ENDCHAR +STARTCHAR uni1562 +ENCODING 5474 +BBX 10 12 3 0 +BITMAP +0C00 +0C00 +0000 +3F00 +4080 +8040 +8040 +8040 +E040 +9040 +9040 +6040 +ENDCHAR +STARTCHAR uni1563 +ENCODING 5475 +BBX 10 12 3 0 +BITMAP +0C00 +0C00 +0000 +3F00 +4080 +8040 +8040 +8040 +81C0 +8240 +8240 +8180 +ENDCHAR +STARTCHAR uni1564 +ENCODING 5476 +BBX 9 10 4 0 +BITMAP +7E00 +9100 +9080 +6080 +0080 +0080 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni1565 +ENCODING 5477 +BBX 9 13 4 0 +BITMAP +1800 +1800 +0000 +7E00 +9100 +9080 +6080 +0080 +0080 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni1566 +ENCODING 5478 +BBX 9 10 4 0 +BITMAP +3F00 +4480 +8480 +8300 +8000 +8000 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni1567 +ENCODING 5479 +BBX 9 13 4 0 +BITMAP +0C00 +0C00 +0000 +3F00 +4480 +8480 +8300 +8000 +8000 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni1568 +ENCODING 5480 +BBX 12 13 2 0 +BITMAP +0180 +0180 +0000 +07E0 +0890 +1090 +1060 +D000 +D000 +1000 +1000 +0800 +07F0 +ENDCHAR +STARTCHAR uni1569 +ENCODING 5481 +BBX 12 13 2 0 +BITMAP +0C00 +0C00 +0000 +3F00 +4480 +8480 +8300 +8030 +8030 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni156A +ENCODING 5482 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 4 +BITMAP +70 +A8 +A8 +90 +80 +78 +ENDCHAR +STARTCHAR uni156B +ENCODING 5483 +BBX 9 9 3 0 +BITMAP +8880 +8880 +8880 +8880 +8880 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni156C +ENCODING 5484 +BBX 9 9 3 0 +BITMAP +3E00 +4100 +8080 +8080 +8880 +8880 +8880 +8880 +8880 +ENDCHAR +STARTCHAR uni156D +ENCODING 5485 +BBX 9 9 3 0 +BITMAP +FE00 +0100 +0080 +0080 +F880 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni156E +ENCODING 5486 +BBX 9 9 4 0 +BITMAP +3F80 +4000 +8000 +8000 +8F80 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni156F +ENCODING 5487 +BBX 12 7 2 3 +BITMAP +2040 +A950 +70E0 +2040 +70E0 +A950 +2040 +ENDCHAR +STARTCHAR uni1570 +ENCODING 5488 +BBX 9 9 3 0 +BITMAP +A280 +A280 +A280 +A280 +9C80 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni1571 +ENCODING 5489 +BBX 9 9 3 0 +BITMAP +3E00 +4100 +8080 +8080 +9C80 +A280 +A280 +A280 +A280 +ENDCHAR +STARTCHAR uni1572 +ENCODING 5490 +BBX 9 9 3 0 +BITMAP +FE00 +0100 +F080 +0880 +0880 +0880 +F080 +0100 +FE00 +ENDCHAR +STARTCHAR uni1573 +ENCODING 5491 +BBX 9 9 4 0 +BITMAP +3F80 +4000 +8780 +8800 +8800 +8800 +8780 +4000 +3F80 +ENDCHAR +STARTCHAR uni1574 +ENCODING 5492 +BBX 8 9 3 0 +BITMAP +70 +88 +88 +88 +78 +09 +0A +0C +08 +ENDCHAR +STARTCHAR uni1575 +ENCODING 5493 +BBX 8 9 3 0 +BITMAP +0E +11 +11 +11 +1E +90 +50 +30 +10 +ENDCHAR +STARTCHAR uni1576 +ENCODING 5494 +BBX 8 12 3 0 +BITMAP +0C +0C +00 +0E +11 +11 +11 +1E +90 +50 +30 +10 +ENDCHAR +STARTCHAR uni1577 +ENCODING 5495 +BBX 8 9 3 0 +BITMAP +08 +0C +0A +09 +78 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1578 +ENCODING 5496 +BBX 8 12 3 0 +BITMAP +18 +18 +00 +08 +0C +0A +09 +78 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1579 +ENCODING 5497 +BBX 8 9 3 0 +BITMAP +10 +30 +50 +90 +1E +11 +11 +11 +0E +ENDCHAR +STARTCHAR uni157A +ENCODING 5498 +BBX 8 12 3 0 +BITMAP +18 +18 +00 +10 +30 +50 +90 +1E +11 +11 +11 +0E +ENDCHAR +STARTCHAR uni157B +ENCODING 5499 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +20 +60 +A0 +38 +24 +24 +18 +ENDCHAR +STARTCHAR uni157C +ENCODING 5500 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni157D +ENCODING 5501 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni157E +ENCODING 5502 +BBX 11 14 2 0 +BITMAP +00C0 +0120 +0120 +00C0 +0000 +71C0 +8220 +8220 +7220 +13C0 +1200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni157F +ENCODING 5503 +BBX 11 9 2 0 +BITMAP +71C0 +8220 +8220 +7220 +13C0 +1200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni1580 +ENCODING 5504 +BBX 11 12 2 0 +BITMAP +0180 +0180 +0000 +71C0 +8220 +8220 +7220 +13C0 +1200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni1581 +ENCODING 5505 +BBX 11 9 2 0 +BITMAP +7020 +8020 +8020 +7020 +11E0 +1220 +0220 +0220 +01C0 +ENDCHAR +STARTCHAR uni1582 +ENCODING 5506 +BBX 11 12 2 0 +BITMAP +0060 +0060 +0000 +7020 +8020 +8020 +7020 +11E0 +1220 +0220 +0220 +01C0 +ENDCHAR +STARTCHAR uni1583 +ENCODING 5507 +BBX 11 9 2 0 +BITMAP +7200 +8200 +8200 +7200 +13C0 +1220 +0220 +0220 +01C0 +ENDCHAR +STARTCHAR uni1584 +ENCODING 5508 +BBX 11 12 2 0 +BITMAP +0300 +0300 +0000 +7200 +8200 +8200 +7200 +13C0 +1220 +0220 +0220 +01C0 +ENDCHAR +STARTCHAR uni1585 +ENCODING 5509 +BBX 9 6 4 3 +BITMAP +6400 +8400 +8700 +6480 +2480 +2300 +ENDCHAR +STARTCHAR uni1586 +ENCODING 5510 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 3 0 +BITMAP +70 +88 +88 +88 +78 +28 +28 +48 +48 +ENDCHAR +STARTCHAR uni1587 +ENCODING 5511 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 3 0 +BITMAP +70 +88 +88 +88 +F0 +A0 +A0 +90 +90 +ENDCHAR +STARTCHAR uni1588 +ENCODING 5512 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 3 0 +BITMAP +48 +48 +28 +28 +78 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1589 +ENCODING 5513 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 3 0 +BITMAP +90 +90 +A0 +A0 +F0 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni158A +ENCODING 5514 +BBX 8 9 3 0 +BITMAP +70 +88 +88 +88 +08 +09 +0A +0C +08 +ENDCHAR +STARTCHAR uni158B +ENCODING 5515 +BBX 8 9 3 0 +BITMAP +0E +11 +11 +11 +10 +90 +50 +30 +10 +ENDCHAR +STARTCHAR uni158C +ENCODING 5516 +BBX 8 9 3 0 +BITMAP +08 +0C +0A +09 +08 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni158D +ENCODING 5517 +BBX 8 9 3 0 +BITMAP +10 +30 +50 +90 +10 +11 +11 +11 +0E +ENDCHAR +STARTCHAR uni158E +ENCODING 5518 +BBX 14 14 1 0 +BITMAP +0018 +0024 +0024 +0018 +0000 +6038 +9044 +9044 +7844 +0940 +0940 +0640 +0040 +0040 +ENDCHAR +STARTCHAR uni158F +ENCODING 5519 +BBX 14 9 1 0 +BITMAP +6038 +9044 +9044 +7844 +0940 +0940 +0640 +0040 +0040 +ENDCHAR +STARTCHAR uni1590 +ENCODING 5520 +BBX 14 12 1 0 +BITMAP +0030 +0030 +0000 +6038 +9044 +9044 +7844 +0940 +0940 +0640 +0040 +0040 +ENDCHAR +STARTCHAR uni1591 +ENCODING 5521 +BBX 14 9 1 0 +BITMAP +6004 +9004 +9004 +7804 +0904 +0944 +0644 +0044 +0038 +ENDCHAR +STARTCHAR uni1592 +ENCODING 5522 +BBX 14 12 1 0 +BITMAP +000C +000C +0000 +6004 +9004 +9004 +7804 +0904 +0944 +0644 +0044 +0038 +ENDCHAR +STARTCHAR uni1593 +ENCODING 5523 +BBX 14 9 1 0 +BITMAP +6040 +9040 +9040 +7840 +0940 +0944 +0644 +0044 +0038 +ENDCHAR +STARTCHAR uni1594 +ENCODING 5524 +BBX 14 12 1 0 +BITMAP +0060 +0060 +0000 +6040 +9040 +9040 +7840 +0940 +0944 +0644 +0044 +0038 +ENDCHAR +STARTCHAR uni1595 +ENCODING 5525 +BBX 8 7 4 2 +BITMAP +60 +90 +90 +78 +09 +09 +06 +ENDCHAR +STARTCHAR uni1596 +ENCODING 5526 +BBX 13 7 1 2 +BITMAP +6300 +9480 +9480 +7FC0 +0048 +0048 +0030 +ENDCHAR +STARTCHAR uni1597 +ENCODING 5527 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +78 +84 +94 +94 +64 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni1598 +ENCODING 5528 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +78 +84 +A4 +A4 +98 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1599 +ENCODING 5529 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +04 +04 +04 +64 +94 +94 +84 +78 +ENDCHAR +STARTCHAR uni159A +ENCODING 5530 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +80 +80 +80 +98 +A4 +A4 +84 +78 +ENDCHAR +STARTCHAR uni159B +ENCODING 5531 +BBX 9 7 3 0 +BITMAP +FF00 +0000 +FF00 +0880 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uni159C +ENCODING 5532 +BBX 9 7 3 0 +BITMAP +7F80 +0000 +7F80 +8800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni159D +ENCODING 5533 +BBX 9 7 3 0 +BITMAP +FF00 +0000 +0700 +0880 +0880 +0880 +FF00 +ENDCHAR +STARTCHAR uni159E +ENCODING 5534 +BBX 9 7 3 0 +BITMAP +FF00 +0000 +7000 +8800 +8800 +8800 +7F80 +ENDCHAR +STARTCHAR uni159F +ENCODING 5535 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 5 +BITMAP +7E +00 +60 +90 +90 +7E +ENDCHAR +STARTCHAR uni15A0 +ENCODING 5536 +BBX 9 8 3 0 +BITMAP +0400 +0200 +0100 +7F80 +8000 +8000 +8000 +7000 +ENDCHAR +STARTCHAR uni15A1 +ENCODING 5537 +BBX 9 11 3 0 +BITMAP +0C00 +0C00 +0000 +0400 +0200 +0100 +7F80 +8000 +8000 +8000 +7000 +ENDCHAR +STARTCHAR uni15A2 +ENCODING 5538 +BBX 9 8 3 0 +BITMAP +0700 +0080 +0080 +0080 +FF00 +4000 +2000 +1000 +ENDCHAR +STARTCHAR uni15A3 +ENCODING 5539 +BBX 9 11 3 0 +BITMAP +0600 +0600 +0000 +0700 +0080 +0080 +0080 +FF00 +4000 +2000 +1000 +ENDCHAR +STARTCHAR uni15A4 +ENCODING 5540 +BBX 9 8 3 0 +BITMAP +7000 +8000 +8000 +8000 +7F80 +0100 +0200 +0400 +ENDCHAR +STARTCHAR uni15A5 +ENCODING 5541 +BBX 9 11 3 0 +BITMAP +3000 +3000 +0000 +7000 +8000 +8000 +8000 +7F80 +0100 +0200 +0400 +ENDCHAR +STARTCHAR uni15A6 +ENCODING 5542 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 4 +BITMAP +60 +80 +80 +78 +10 +20 +ENDCHAR +STARTCHAR uni15A7 +ENCODING 5543 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +10 +20 +40 +F8 +08 +7C +08 +08 +08 +ENDCHAR +STARTCHAR uni15A8 +ENCODING 5544 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +20 +10 +08 +7C +40 +F8 +40 +40 +40 +ENDCHAR +STARTCHAR uni15A9 +ENCODING 5545 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +C0 +C0 +00 +40 +20 +10 +08 +7C +40 +F8 +40 +40 +40 +ENDCHAR +STARTCHAR uni15AA +ENCODING 5546 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +08 +08 +7C +08 +F8 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni15AB +ENCODING 5547 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +18 +18 +00 +08 +08 +08 +7C +08 +F8 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni15AC +ENCODING 5548 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +40 +40 +F8 +40 +7C +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni15AD +ENCODING 5549 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +60 +60 +00 +40 +40 +40 +F8 +40 +7C +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni15AE +ENCODING 5550 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 3 +BITMAP +40 +F0 +40 +78 +10 +20 +40 +ENDCHAR +STARTCHAR uni15AF +ENCODING 5551 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +80 +80 +80 +BC +C2 +82 +82 +C2 +BC +ENDCHAR +STARTCHAR uni15B0 +ENCODING 5552 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +BC +FE +FE +FE +FE +BC +80 +80 +80 +ENDCHAR +STARTCHAR uni15B1 +ENCODING 5553 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +02 +02 +02 +7A +FE +FE +FE +FE +7A +ENDCHAR +STARTCHAR uni15B2 +ENCODING 5554 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +80 +80 +80 +BC +FE +FE +FE +FE +BC +ENDCHAR +STARTCHAR uni15B3 +ENCODING 5555 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +7A +FE +FE +FE +FE +7A +02 +02 +02 +ENDCHAR +STARTCHAR uni15B4 +ENCODING 5556 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +80 +80 +80 +F8 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni15B5 +ENCODING 5557 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +08 +08 +08 +08 +F8 +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uni15B6 +ENCODING 5558 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +80 +80 +80 +F8 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni15B7 +ENCODING 5559 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +08 +08 +08 +F8 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni15B8 +ENCODING 5560 +BBX 8 9 4 0 +BITMAP +E1 +A1 +A1 +9E +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni15B9 +ENCODING 5561 +BBX 8 9 4 0 +BITMAP +01 +01 +01 +01 +01 +79 +85 +85 +87 +ENDCHAR +STARTCHAR uni15BA +ENCODING 5562 +BBX 8 9 4 0 +BITMAP +80 +80 +80 +80 +80 +9E +A1 +A1 +E1 +ENDCHAR +STARTCHAR uni15BB +ENCODING 5563 +BBX 8 9 4 0 +BITMAP +87 +85 +85 +79 +01 +01 +01 +01 +01 +ENDCHAR +STARTCHAR uni15BC +ENCODING 5564 +BBX 8 9 4 0 +BITMAP +C1 +A2 +94 +88 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni15BD +ENCODING 5565 +BBX 8 9 4 0 +BITMAP +01 +01 +01 +01 +01 +11 +29 +45 +83 +ENDCHAR +STARTCHAR uni15BE +ENCODING 5566 +BBX 8 9 4 0 +BITMAP +80 +80 +80 +80 +80 +88 +94 +A2 +C1 +ENDCHAR +STARTCHAR uni15BF +ENCODING 5567 +BBX 8 9 4 0 +BITMAP +83 +45 +29 +11 +01 +01 +01 +01 +01 +ENDCHAR +STARTCHAR uni15C0 +ENCODING 5568 +BBX 9 9 3 0 +BITMAP +7080 +8880 +8880 +8480 +0480 +0280 +0280 +0280 +0180 +ENDCHAR +STARTCHAR uni15C1 +ENCODING 5569 +BBX 9 9 3 0 +BITMAP +8700 +8880 +8880 +9080 +9000 +A000 +A000 +A000 +C000 +ENDCHAR +STARTCHAR uni15C2 +ENCODING 5570 +BBX 9 9 3 0 +BITMAP +0180 +0280 +0280 +0280 +0480 +8480 +8880 +8880 +7080 +ENDCHAR +STARTCHAR uni15C3 +ENCODING 5571 +BBX 9 9 3 0 +BITMAP +C000 +A000 +A000 +A000 +9000 +9080 +8880 +8880 +8700 +ENDCHAR +STARTCHAR uni15C4 +ENCODING 5572 +BBX 14 7 1 0 +BITMAP +8004 +4008 +2010 +1FE0 +0840 +0480 +0300 +ENDCHAR +STARTCHAR uni15C5 +ENCODING 5573 +BBX 14 7 1 0 +BITMAP +0300 +0480 +0840 +1FE0 +2010 +4008 +8004 +ENDCHAR +STARTCHAR uni15C6 +ENCODING 5574 +BBX 7 14 4 -2 +BITMAP +80 +40 +20 +10 +18 +14 +12 +12 +14 +18 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni15C7 +ENCODING 5575 +BBX 7 14 4 -2 +BITMAP +80 +40 +20 +10 +18 +54 +52 +52 +54 +18 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni15C8 +ENCODING 5576 +BBX 7 14 4 -2 +BITMAP +80 +40 +20 +10 +18 +14 +D2 +D2 +14 +18 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni15C9 +ENCODING 5577 +BBX 7 14 3 -2 +BITMAP +02 +04 +08 +10 +30 +50 +90 +90 +50 +30 +10 +08 +04 +02 +ENDCHAR +STARTCHAR uni15CA +ENCODING 5578 +BBX 14 7 1 0 +BITMAP +8004 +7FF8 +2010 +1020 +0840 +0480 +0300 +ENDCHAR +STARTCHAR uni15CB +ENCODING 5579 +BBX 14 7 1 0 +BITMAP +0300 +0480 +0840 +1020 +2010 +7FF8 +8004 +ENDCHAR +STARTCHAR uni15CC +ENCODING 5580 +BBX 7 14 4 -2 +BITMAP +80 +40 +60 +50 +48 +44 +42 +42 +44 +48 +50 +60 +40 +80 +ENDCHAR +STARTCHAR uni15CD +ENCODING 5581 +BBX 7 14 4 -2 +BITMAP +80 +40 +60 +50 +48 +54 +52 +52 +54 +48 +50 +60 +40 +80 +ENDCHAR +STARTCHAR uni15CE +ENCODING 5582 +BBX 7 14 4 -2 +BITMAP +80 +40 +60 +50 +48 +44 +5A +5A +44 +48 +50 +60 +40 +80 +ENDCHAR +STARTCHAR uni15CF +ENCODING 5583 +BBX 7 14 3 -2 +BITMAP +02 +04 +0C +14 +24 +44 +84 +84 +44 +24 +14 +0C +04 +02 +ENDCHAR +STARTCHAR uni15D0 +ENCODING 5584 +BBX 13 7 1 0 +BITMAP +8208 +4210 +2220 +1240 +0A80 +0700 +0200 +ENDCHAR +STARTCHAR uni15D1 +ENCODING 5585 +BBX 13 7 1 0 +BITMAP +0200 +0700 +0A80 +1240 +2220 +4210 +8208 +ENDCHAR +STARTCHAR uni15D2 +ENCODING 5586 +BBX 7 13 5 -1 +BITMAP +80 +40 +20 +10 +08 +04 +FE +04 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni15D3 +ENCODING 5587 +BBX 8 13 4 -1 +BITMAP +40 +20 +10 +08 +44 +42 +FF +42 +44 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni15D4 +ENCODING 5588 +BBX 8 13 4 -1 +BITMAP +40 +20 +10 +08 +04 +62 +FF +62 +04 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni15D5 +ENCODING 5589 +BBX 7 13 4 -1 +BITMAP +02 +04 +08 +10 +20 +40 +FE +40 +20 +10 +08 +04 +02 +ENDCHAR +STARTCHAR uni15D6 +ENCODING 5590 +BBX 13 7 1 0 +BITMAP +8208 +4210 +3FE0 +1240 +0A80 +0700 +0200 +ENDCHAR +STARTCHAR uni15D7 +ENCODING 5591 +BBX 13 7 1 0 +BITMAP +0200 +0700 +0A80 +1240 +3FE0 +4210 +8208 +ENDCHAR +STARTCHAR uni15D8 +ENCODING 5592 +BBX 7 13 5 -1 +BITMAP +80 +40 +20 +30 +28 +24 +FE +24 +28 +30 +20 +40 +80 +ENDCHAR +STARTCHAR uni15D9 +ENCODING 5593 +BBX 8 13 4 -1 +BITMAP +40 +20 +10 +18 +54 +52 +FF +52 +54 +18 +10 +20 +40 +ENDCHAR +STARTCHAR uni15DA +ENCODING 5594 +BBX 9 13 3 -1 +BITMAP +2000 +1000 +0800 +0C00 +0A00 +6900 +FF80 +6900 +0A00 +0C00 +0800 +1000 +2000 +ENDCHAR +STARTCHAR uni15DB +ENCODING 5595 +BBX 7 13 5 -1 +BITMAP +02 +04 +08 +18 +28 +48 +FE +48 +28 +18 +08 +04 +02 +ENDCHAR +STARTCHAR uni15DC +ENCODING 5596 +BBX 10 9 3 0 +BITMAP +FFC0 +8040 +8040 +8040 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni15DD +ENCODING 5597 +BBX 10 9 3 0 +BITMAP +3F00 +4080 +8040 +8040 +8040 +8040 +8040 +8040 +FFC0 +ENDCHAR +STARTCHAR uni15DE +ENCODING 5598 +BBX 9 10 3 0 +BITMAP +FE00 +8100 +8080 +8080 +8080 +8080 +8080 +8080 +8100 +FE00 +ENDCHAR +STARTCHAR uni15DF +ENCODING 5599 +BBX 9 10 3 0 +BITMAP +FE00 +8100 +8080 +8880 +8880 +8880 +8880 +8080 +8100 +FE00 +ENDCHAR +STARTCHAR uni15E0 +ENCODING 5600 +BBX 9 10 3 0 +BITMAP +FE00 +8100 +8080 +8080 +9880 +9880 +8080 +8080 +8100 +FE00 +ENDCHAR +STARTCHAR uni15E1 +ENCODING 5601 +BBX 9 10 3 0 +BITMAP +3F80 +4080 +8080 +8080 +8080 +8080 +8080 +8080 +4080 +3F80 +ENDCHAR +STARTCHAR uni15E2 +ENCODING 5602 +BBX 10 9 3 0 +BITMAP +C0C0 +A140 +9240 +8C40 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni15E3 +ENCODING 5603 +BBX 10 9 3 0 +BITMAP +3F00 +4080 +8040 +8040 +8040 +8C40 +9240 +A140 +C0C0 +ENDCHAR +STARTCHAR uni15E4 +ENCODING 5604 +BBX 10 10 3 0 +BITMAP +FF00 +8080 +4040 +2040 +1040 +1040 +2040 +4040 +8080 +FF00 +ENDCHAR +STARTCHAR uni15E5 +ENCODING 5605 +BBX 10 10 3 0 +BITMAP +FF00 +8080 +4040 +2240 +1240 +1240 +2240 +4040 +8080 +FF00 +ENDCHAR +STARTCHAR uni15E6 +ENCODING 5606 +BBX 10 10 3 0 +BITMAP +FF00 +8080 +4040 +2040 +1640 +1640 +2040 +4040 +8080 +FF00 +ENDCHAR +STARTCHAR uni15E7 +ENCODING 5607 +BBX 10 10 3 0 +BITMAP +3FC0 +4040 +8080 +8100 +8200 +8200 +8100 +8080 +4040 +3FC0 +ENDCHAR +STARTCHAR uni15E8 +ENCODING 5608 +BBX 10 9 3 0 +BITMAP +8040 +8040 +8040 +8040 +FFC0 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni15E9 +ENCODING 5609 +BBX 10 9 3 0 +BITMAP +3F00 +4080 +8040 +8040 +FFC0 +8040 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni15EA +ENCODING 5610 +BBX 9 10 3 0 +BITMAP +FE00 +2100 +2080 +2080 +2080 +2080 +2080 +2080 +2100 +FE00 +ENDCHAR +STARTCHAR uni15EB +ENCODING 5611 +BBX 9 10 3 0 +BITMAP +FE00 +2100 +2080 +2480 +2480 +2480 +2480 +2080 +2100 +FE00 +ENDCHAR +STARTCHAR uni15EC +ENCODING 5612 +BBX 9 10 3 0 +BITMAP +FE00 +2100 +2080 +2080 +2C80 +2C80 +2080 +2080 +2100 +FE00 +ENDCHAR +STARTCHAR uni15ED +ENCODING 5613 +BBX 9 10 3 0 +BITMAP +3F80 +4200 +8200 +8200 +8200 +8200 +8200 +8200 +4200 +3F80 +ENDCHAR +STARTCHAR uni15EE +ENCODING 5614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 3 +BITMAP +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni15EF +ENCODING 5615 +BBX 13 9 1 0 +BITMAP +8208 +8208 +8208 +8208 +8208 +8208 +8208 +4510 +38E0 +ENDCHAR +STARTCHAR uni15F0 +ENCODING 5616 +BBX 13 9 1 0 +BITMAP +38E0 +4510 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +ENDCHAR +STARTCHAR uni15F1 +ENCODING 5617 +BBX 8 9 4 0 +BITMAP +FE +01 +01 +01 +FE +01 +01 +01 +FE +ENDCHAR +STARTCHAR uni15F2 +ENCODING 5618 +BBX 8 9 4 0 +BITMAP +FE +01 +01 +21 +FE +21 +01 +01 +FE +ENDCHAR +STARTCHAR uni15F3 +ENCODING 5619 +BBX 8 9 4 0 +BITMAP +FE +01 +01 +61 +FE +61 +01 +01 +FE +ENDCHAR +STARTCHAR uni15F4 +ENCODING 5620 +BBX 8 9 4 0 +BITMAP +7F +80 +80 +80 +7F +80 +80 +80 +7F +ENDCHAR +STARTCHAR uni15F5 +ENCODING 5621 +BBX 13 9 1 0 +BITMAP +FFF8 +8208 +8208 +8208 +8208 +8208 +8208 +4510 +38E0 +ENDCHAR +STARTCHAR uni15F6 +ENCODING 5622 +BBX 13 9 1 0 +BITMAP +38E0 +4510 +8208 +8208 +8208 +8208 +8208 +8208 +FFF8 +ENDCHAR +STARTCHAR uni15F7 +ENCODING 5623 +BBX 8 9 4 0 +BITMAP +FE +81 +81 +81 +FE +81 +81 +81 +FE +ENDCHAR +STARTCHAR uni15F8 +ENCODING 5624 +BBX 8 9 4 0 +BITMAP +FE +81 +81 +89 +FE +89 +81 +81 +FE +ENDCHAR +STARTCHAR uni15F9 +ENCODING 5625 +BBX 8 9 4 0 +BITMAP +FE +81 +81 +99 +FE +99 +81 +81 +FE +ENDCHAR +STARTCHAR uni15FA +ENCODING 5626 +BBX 8 9 4 0 +BITMAP +7F +81 +81 +81 +7F +81 +81 +81 +7F +ENDCHAR +STARTCHAR uni15FB +ENCODING 5627 +BBX 13 9 1 0 +BITMAP +C218 +B268 +8F88 +8208 +8208 +8208 +8208 +4510 +38E0 +ENDCHAR +STARTCHAR uni15FC +ENCODING 5628 +BBX 13 9 1 0 +BITMAP +38E0 +4510 +8208 +8208 +8208 +8208 +8F88 +B268 +C218 +ENDCHAR +STARTCHAR uni15FD +ENCODING 5629 +BBX 8 9 4 0 +BITMAP +FE +81 +41 +21 +FE +21 +41 +81 +FE +ENDCHAR +STARTCHAR uni15FE +ENCODING 5630 +BBX 8 9 4 0 +BITMAP +FE +81 +41 +25 +FE +25 +41 +81 +FE +ENDCHAR +STARTCHAR uni15FF +ENCODING 5631 +BBX 8 9 4 0 +BITMAP +FE +81 +41 +2D +FE +2D +41 +81 +FE +ENDCHAR +STARTCHAR uni1600 +ENCODING 5632 +BBX 8 9 4 0 +BITMAP +7F +81 +82 +84 +7F +84 +82 +81 +7F +ENDCHAR +STARTCHAR uni1601 +ENCODING 5633 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 4 +BITMAP +88 +50 +20 +ENDCHAR +STARTCHAR uni1602 +ENCODING 5634 +BBX 10 9 3 0 +BITMAP +8000 +8000 +8000 +8000 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni1603 +ENCODING 5635 +BBX 10 9 3 0 +BITMAP +3F00 +4080 +8040 +8040 +8040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni1604 +ENCODING 5636 +BBX 9 10 3 0 +BITMAP +FE00 +0100 +0080 +0080 +0080 +0080 +0080 +0080 +0100 +0E00 +ENDCHAR +STARTCHAR uni1605 +ENCODING 5637 +BBX 9 10 3 0 +BITMAP +FE00 +0100 +0080 +0880 +0880 +0880 +0880 +0080 +0100 +0E00 +ENDCHAR +STARTCHAR uni1606 +ENCODING 5638 +BBX 9 10 3 0 +BITMAP +FE00 +0100 +0080 +0080 +1880 +1880 +0080 +0080 +0100 +0E00 +ENDCHAR +STARTCHAR uni1607 +ENCODING 5639 +BBX 9 10 3 0 +BITMAP +3800 +4000 +8000 +8000 +8000 +8000 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni1608 +ENCODING 5640 +BBX 13 9 1 0 +BITMAP +8000 +8000 +8000 +8000 +8208 +8208 +8208 +4510 +38E0 +ENDCHAR +STARTCHAR uni1609 +ENCODING 5641 +BBX 13 9 1 0 +BITMAP +38E0 +4510 +8208 +8208 +8208 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uni160A +ENCODING 5642 +BBX 9 9 3 0 +BITMAP +FF00 +0080 +0080 +0080 +0F00 +0080 +0080 +0080 +0F00 +ENDCHAR +STARTCHAR uni160B +ENCODING 5643 +BBX 9 9 3 0 +BITMAP +FF00 +0080 +0880 +0880 +0F00 +0880 +0880 +0080 +0F00 +ENDCHAR +STARTCHAR uni160C +ENCODING 5644 +BBX 9 9 3 0 +BITMAP +FF00 +0080 +0080 +1880 +3F00 +1880 +0080 +0080 +0F00 +ENDCHAR +STARTCHAR uni160D +ENCODING 5645 +BBX 9 9 3 0 +BITMAP +7800 +8000 +8000 +8000 +7800 +8000 +8000 +8000 +7F80 +ENDCHAR +STARTCHAR uni160E +ENCODING 5646 +BBX 10 9 3 0 +BITMAP +8780 +8840 +8840 +8840 +8640 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni160F +ENCODING 5647 +BBX 10 9 3 0 +BITMAP +3F00 +4080 +8040 +8040 +9840 +8440 +8440 +8440 +7840 +ENDCHAR +STARTCHAR uni1610 +ENCODING 5648 +BBX 9 10 3 0 +BITMAP +FE00 +0100 +0080 +0080 +7080 +8880 +8080 +8080 +8100 +7E00 +ENDCHAR +STARTCHAR uni1611 +ENCODING 5649 +BBX 9 10 3 0 +BITMAP +FE00 +0100 +0080 +0880 +7880 +8880 +8880 +8080 +8100 +7E00 +ENDCHAR +STARTCHAR uni1612 +ENCODING 5650 +BBX 9 10 3 0 +BITMAP +FE00 +0100 +0080 +1880 +7C80 +9880 +8080 +8080 +8100 +7E00 +ENDCHAR +STARTCHAR uni1613 +ENCODING 5651 +BBX 9 10 3 0 +BITMAP +3F00 +4080 +8080 +8080 +8880 +8700 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni1614 +ENCODING 5652 +BBX 9 10 3 0 +BITMAP +FF80 +1800 +2000 +4000 +4700 +8880 +8080 +8080 +4080 +3F00 +ENDCHAR +STARTCHAR uni1615 +ENCODING 5653 +BBX 9 10 3 0 +BITMAP +FF80 +0C00 +0200 +0100 +7100 +8880 +8080 +8080 +8100 +7E00 +ENDCHAR +STARTCHAR uni1616 +ENCODING 5654 +BBX 9 10 3 0 +BITMAP +7E00 +8100 +8080 +8080 +8880 +7100 +0100 +0200 +0C00 +FF80 +ENDCHAR +STARTCHAR uni1617 +ENCODING 5655 +BBX 10 9 3 0 +BITMAP +8700 +9880 +A040 +C040 +C640 +8840 +8840 +8840 +8780 +ENDCHAR +STARTCHAR uni1618 +ENCODING 5656 +BBX 10 9 3 0 +BITMAP +8700 +9880 +A040 +C240 +C640 +8A40 +8A40 +8840 +8780 +ENDCHAR +STARTCHAR uni1619 +ENCODING 5657 +BBX 10 9 3 0 +BITMAP +8700 +9880 +A040 +C640 +CF40 +9640 +9040 +9040 +8F80 +ENDCHAR +STARTCHAR uni161A +ENCODING 5658 +BBX 10 9 3 0 +BITMAP +8780 +8840 +8840 +8840 +C640 +C040 +A040 +9880 +8700 +ENDCHAR +STARTCHAR uni161B +ENCODING 5659 +BBX 10 9 3 0 +BITMAP +7840 +8440 +8440 +8440 +98C0 +80C0 +8140 +4640 +3840 +ENDCHAR +STARTCHAR uni161C +ENCODING 5660 +BBX 9 10 3 0 +BITMAP +8780 +5800 +2000 +4000 +4700 +8880 +8880 +8080 +4080 +3F00 +ENDCHAR +STARTCHAR uni161D +ENCODING 5661 +BBX 9 10 3 0 +BITMAP +7E00 +8100 +8080 +8880 +8880 +7100 +0100 +0200 +0D00 +F080 +ENDCHAR +STARTCHAR uni161E +ENCODING 5662 +BBX 10 9 3 0 +BITMAP +8700 +5880 +2040 +4040 +4640 +8840 +8840 +8840 +8780 +ENDCHAR +STARTCHAR uni161F +ENCODING 5663 +BBX 10 9 3 0 +BITMAP +8700 +5880 +2040 +4240 +4640 +8A40 +8A40 +8840 +8780 +ENDCHAR +STARTCHAR uni1620 +ENCODING 5664 +BBX 10 9 3 0 +BITMAP +8700 +5880 +2040 +4640 +4F40 +9640 +9040 +9040 +8F80 +ENDCHAR +STARTCHAR uni1621 +ENCODING 5665 +BBX 10 9 3 0 +BITMAP +7840 +8440 +8440 +8440 +9880 +8080 +8100 +4680 +3840 +ENDCHAR +STARTCHAR uni1622 +ENCODING 5666 +BBX 10 9 3 0 +BITMAP +F040 +2040 +4040 +8040 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni1623 +ENCODING 5667 +BBX 10 9 3 0 +BITMAP +3F00 +4080 +8040 +8040 +8040 +8040 +8080 +8100 +83C0 +ENDCHAR +STARTCHAR uni1624 +ENCODING 5668 +BBX 9 10 3 0 +BITMAP +9E00 +A100 +C080 +8080 +0080 +0080 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni1625 +ENCODING 5669 +BBX 9 10 3 0 +BITMAP +9E00 +A100 +C080 +8880 +0880 +0880 +0880 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni1626 +ENCODING 5670 +BBX 9 10 3 0 +BITMAP +9E00 +A100 +C080 +8080 +1880 +1880 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni1627 +ENCODING 5671 +BBX 9 10 3 0 +BITMAP +3C80 +4280 +8180 +8080 +8000 +8000 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni1628 +ENCODING 5672 +BBX 10 10 3 0 +BITMAP +0040 +83C0 +8240 +8100 +8080 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni1629 +ENCODING 5673 +BBX 10 10 3 -1 +BITMAP +3F00 +4080 +8040 +8040 +8040 +8080 +8100 +8240 +83C0 +0040 +ENDCHAR +STARTCHAR uni162A +ENCODING 5674 +BBX 10 10 3 0 +BITMAP +E700 +4880 +5040 +6040 +0040 +0040 +0040 +0040 +0080 +7F00 +ENDCHAR +STARTCHAR uni162B +ENCODING 5675 +BBX 10 10 3 0 +BITMAP +E700 +4880 +5040 +6440 +0440 +0440 +0440 +0040 +0080 +7F00 +ENDCHAR +STARTCHAR uni162C +ENCODING 5676 +BBX 10 10 3 0 +BITMAP +E700 +4880 +5040 +6040 +0C40 +0C40 +0040 +0040 +0080 +7F00 +ENDCHAR +STARTCHAR uni162D +ENCODING 5677 +BBX 10 10 3 0 +BITMAP +39C0 +4480 +8280 +8180 +8000 +8000 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni162E +ENCODING 5678 +BBX 10 9 3 0 +BITMAP +F3C0 +2100 +4080 +8040 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni162F +ENCODING 5679 +BBX 10 9 3 0 +BITMAP +3F00 +4080 +8040 +8040 +8040 +8040 +4080 +2100 +F3C0 +ENDCHAR +STARTCHAR uni1630 +ENCODING 5680 +BBX 9 10 3 0 +BITMAP +9E00 +A100 +C080 +8080 +0080 +0080 +8080 +C080 +A100 +9E00 +ENDCHAR +STARTCHAR uni1631 +ENCODING 5681 +BBX 9 10 3 0 +BITMAP +9E00 +A100 +C080 +8880 +0880 +0880 +8880 +C080 +A100 +9E00 +ENDCHAR +STARTCHAR uni1632 +ENCODING 5682 +BBX 9 10 3 0 +BITMAP +9E00 +A100 +C080 +8080 +1880 +1880 +8080 +C080 +A100 +9E00 +ENDCHAR +STARTCHAR uni1633 +ENCODING 5683 +BBX 9 10 3 0 +BITMAP +3C80 +4280 +8180 +8080 +8000 +8000 +8080 +8180 +4280 +3C80 +ENDCHAR +STARTCHAR uni1634 +ENCODING 5684 +BBX 10 10 3 0 +BITMAP +0040 +F3C0 +1240 +2100 +4080 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni1635 +ENCODING 5685 +BBX 10 10 3 -1 +BITMAP +3F00 +4080 +8040 +8040 +8040 +4080 +2100 +9200 +F3C0 +8000 +ENDCHAR +STARTCHAR uni1636 +ENCODING 5686 +BBX 10 10 2 0 +BITMAP +E700 +4880 +5040 +6040 +0040 +0040 +6040 +5040 +4880 +4700 +ENDCHAR +STARTCHAR uni1637 +ENCODING 5687 +BBX 10 10 2 0 +BITMAP +E700 +4880 +5040 +6240 +0240 +0240 +6240 +5040 +4880 +4700 +ENDCHAR +STARTCHAR uni1638 +ENCODING 5688 +BBX 10 10 2 0 +BITMAP +E700 +4880 +5040 +6040 +0640 +0640 +6040 +5040 +4880 +4700 +ENDCHAR +STARTCHAR uni1639 +ENCODING 5689 +BBX 10 10 3 0 +BITMAP +39C0 +4480 +8280 +8180 +8000 +8000 +8180 +8280 +4480 +3880 +ENDCHAR +STARTCHAR uni163A +ENCODING 5690 +BBX 10 10 3 0 +BITMAP +0040 +E3C0 +2240 +4100 +8080 +8080 +8880 +8880 +4900 +3600 +ENDCHAR +STARTCHAR uni163B +ENCODING 5691 +BBX 10 10 3 -1 +BITMAP +3600 +4900 +8880 +8880 +8080 +8080 +4100 +2240 +E3C0 +0040 +ENDCHAR +STARTCHAR uni163C +ENCODING 5692 +BBX 10 10 2 0 +BITMAP +E000 +4F00 +5080 +6040 +0040 +0380 +0040 +6040 +5080 +4F00 +ENDCHAR +STARTCHAR uni163D +ENCODING 5693 +BBX 10 10 2 0 +BITMAP +E000 +4F00 +5080 +6040 +0840 +0B80 +0840 +6040 +5080 +4F00 +ENDCHAR +STARTCHAR uni163E +ENCODING 5694 +BBX 10 10 2 0 +BITMAP +E000 +4F00 +5080 +6040 +0840 +1D80 +0840 +6040 +5080 +4F00 +ENDCHAR +STARTCHAR uni163F +ENCODING 5695 +BBX 10 10 3 0 +BITMAP +01C0 +3C80 +4280 +8180 +8000 +7000 +8000 +8180 +4280 +3C80 +ENDCHAR +STARTCHAR uni1640 +ENCODING 5696 +BBX 10 9 3 0 +BITMAP +C0C0 +2100 +2100 +4080 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni1641 +ENCODING 5697 +BBX 10 9 3 0 +BITMAP +3F00 +4080 +8040 +8040 +8040 +4080 +2100 +2100 +C0C0 +ENDCHAR +STARTCHAR uni1642 +ENCODING 5698 +BBX 11 10 2 0 +BITMAP +8F80 +9040 +6020 +0020 +0020 +0020 +0020 +6020 +9040 +8F80 +ENDCHAR +STARTCHAR uni1643 +ENCODING 5699 +BBX 11 10 2 0 +BITMAP +8F80 +9040 +6020 +0220 +0220 +0220 +0220 +6020 +9040 +8F80 +ENDCHAR +STARTCHAR uni1644 +ENCODING 5700 +BBX 11 10 2 0 +BITMAP +8F80 +9040 +6020 +0020 +0620 +0620 +0020 +6020 +9040 +8F80 +ENDCHAR +STARTCHAR uni1645 +ENCODING 5701 +BBX 11 10 2 0 +BITMAP +3E20 +4120 +80C0 +8000 +8000 +8000 +8000 +80C0 +4120 +3E20 +ENDCHAR +STARTCHAR uni1646 +ENCODING 5702 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +F8 +10 +20 +40 +F8 +ENDCHAR +STARTCHAR uni1647 +ENCODING 5703 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 3 +BITMAP +20 +20 +F8 +10 +20 +40 +F8 +20 +20 +ENDCHAR +STARTCHAR uni1648 +ENCODING 5704 +BBX 11 9 2 0 +BITMAP +CE60 +2480 +2480 +4040 +8020 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni1649 +ENCODING 5705 +BBX 11 9 2 0 +BITMAP +3F80 +4040 +8020 +8020 +8020 +4040 +2480 +2480 +CE60 +ENDCHAR +STARTCHAR uni164A +ENCODING 5706 +BBX 11 11 2 0 +BITMAP +8F80 +9040 +6020 +0020 +8020 +E020 +8020 +0020 +6020 +9040 +8F80 +ENDCHAR +STARTCHAR uni164B +ENCODING 5707 +BBX 11 11 2 0 +BITMAP +8F80 +9040 +6020 +0220 +8220 +E220 +8220 +0220 +6020 +9040 +8F80 +ENDCHAR +STARTCHAR uni164C +ENCODING 5708 +BBX 11 11 2 0 +BITMAP +8F80 +9040 +6020 +0020 +8320 +E7A0 +8320 +0020 +6020 +9040 +8F80 +ENDCHAR +STARTCHAR uni164D +ENCODING 5709 +BBX 11 11 2 0 +BITMAP +3E20 +4120 +80C0 +8000 +8020 +80E0 +8020 +8000 +80C0 +4120 +3E20 +ENDCHAR +STARTCHAR uni164E +ENCODING 5710 +BBX 11 9 2 0 +BITMAP +C460 +2480 +2480 +4440 +8420 +8420 +8420 +8420 +7BC0 +ENDCHAR +STARTCHAR uni164F +ENCODING 5711 +BBX 11 9 2 0 +BITMAP +7BC0 +8420 +8420 +8420 +8420 +4460 +2480 +2480 +C460 +ENDCHAR +STARTCHAR uni1650 +ENCODING 5712 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +0080 +0080 +FF00 +0080 +0080 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni1651 +ENCODING 5713 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +0480 +0480 +FF00 +0480 +0480 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni1652 +ENCODING 5714 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +0080 +0C80 +FF00 +0C80 +0080 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni1653 +ENCODING 5715 +BBX 9 11 3 0 +BITMAP +7880 +8480 +8300 +8000 +8000 +7F80 +8000 +8000 +8300 +8480 +7880 +ENDCHAR +STARTCHAR uni1654 +ENCODING 5716 +BBX 11 9 2 0 +BITMAP +C460 +2480 +3F80 +4440 +8420 +8420 +8420 +8420 +7BC0 +ENDCHAR +STARTCHAR uni1655 +ENCODING 5717 +BBX 11 9 2 0 +BITMAP +7BC0 +8420 +8420 +8420 +8420 +4460 +3F80 +2480 +C460 +ENDCHAR +STARTCHAR uni1656 +ENCODING 5718 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +2080 +2080 +FF00 +2080 +2080 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni1657 +ENCODING 5719 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +2480 +2480 +FF00 +2480 +2480 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni1658 +ENCODING 5720 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +2080 +2C80 +FF00 +2C80 +2080 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni1659 +ENCODING 5721 +BBX 9 11 3 0 +BITMAP +7880 +8480 +8300 +8200 +8200 +7F80 +8200 +8200 +8300 +8480 +7880 +ENDCHAR +STARTCHAR uni165A +ENCODING 5722 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 1 +BITMAP +20 +20 +78 +A0 +70 +28 +F0 +20 +20 +ENDCHAR +STARTCHAR uni165B +ENCODING 5723 +BBX 11 9 2 0 +BITMAP +CE60 +2480 +3F80 +4440 +8420 +8420 +8420 +8420 +7BC0 +ENDCHAR +STARTCHAR uni165C +ENCODING 5724 +BBX 11 9 2 0 +BITMAP +7BC0 +8420 +8420 +8420 +8420 +4460 +3F80 +2480 +CE60 +ENDCHAR +STARTCHAR uni165D +ENCODING 5725 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +2080 +A080 +FF00 +A080 +2080 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni165E +ENCODING 5726 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +2480 +A480 +FF00 +A480 +2480 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni165F +ENCODING 5727 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +2080 +AC80 +FF00 +AC80 +2080 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni1660 +ENCODING 5728 +BBX 9 11 3 0 +BITMAP +7880 +8480 +8300 +8200 +8280 +7F80 +8280 +8200 +8300 +8480 +7880 +ENDCHAR +STARTCHAR uni1661 +ENCODING 5729 +BBX 11 9 2 0 +BITMAP +CE60 +2480 +2480 +4440 +8420 +8420 +8420 +8420 +7BC0 +ENDCHAR +STARTCHAR uni1662 +ENCODING 5730 +BBX 11 9 2 0 +BITMAP +7BC0 +8420 +8420 +8420 +8420 +4460 +2480 +2480 +CE60 +ENDCHAR +STARTCHAR uni1663 +ENCODING 5731 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +0080 +8080 +FF00 +8080 +0080 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni1664 +ENCODING 5732 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +0480 +8480 +FF00 +8480 +0480 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni1665 +ENCODING 5733 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +0080 +8C80 +FF00 +8C80 +0080 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni1666 +ENCODING 5734 +BBX 9 11 3 0 +BITMAP +7880 +8480 +8300 +8000 +8080 +7F80 +8080 +8000 +8300 +8480 +7880 +ENDCHAR +STARTCHAR uni1667 +ENCODING 5735 +BBX 11 9 2 0 +BITMAP +CE60 +2480 +2480 +5540 +8E20 +8420 +8420 +8420 +7BC0 +ENDCHAR +STARTCHAR uni1668 +ENCODING 5736 +BBX 11 9 2 0 +BITMAP +7BC0 +8420 +8420 +8420 +8E20 +5560 +2480 +2480 +CE60 +ENDCHAR +STARTCHAR uni1669 +ENCODING 5737 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +1080 +8880 +FF00 +8880 +1080 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni166A +ENCODING 5738 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +1280 +8A80 +FF00 +8A80 +1280 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni166B +ENCODING 5739 +BBX 9 11 3 0 +BITMAP +8F00 +9080 +6080 +2080 +9680 +FF00 +9680 +3080 +6080 +9080 +8F00 +ENDCHAR +STARTCHAR uni166C +ENCODING 5740 +BBX 9 11 3 0 +BITMAP +7880 +8480 +8300 +8400 +8880 +7F80 +8880 +8400 +8300 +8480 +7880 +ENDCHAR +STARTCHAR uni166D +ENCODING 5741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +48 +48 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni166E +ENCODING 5742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni166F +ENCODING 5743 +BBX 11 9 2 0 +BITMAP +71C0 +8220 +8220 +7220 +11E0 +1020 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni1670 +ENCODING 5744 +BBX 14 9 1 0 +BITMAP +6038 +9044 +9044 +7844 +0904 +0904 +0604 +0004 +0004 +ENDCHAR +STARTCHAR uni1671 +ENCODING 5745 +BBX 14 9 1 0 +BITMAP +5038 +A844 +A844 +7C44 +0540 +0540 +0240 +0040 +0040 +ENDCHAR +STARTCHAR uni1672 +ENCODING 5746 +BBX 14 12 1 0 +BITMAP +0030 +0030 +0000 +5038 +A844 +A844 +7C44 +0540 +0540 +0240 +0040 +0040 +ENDCHAR +STARTCHAR uni1673 +ENCODING 5747 +BBX 14 9 1 0 +BITMAP +5004 +A804 +A804 +7C04 +0504 +0544 +0244 +0044 +0038 +ENDCHAR +STARTCHAR uni1674 +ENCODING 5748 +BBX 14 12 1 0 +BITMAP +000C +000C +0000 +5004 +A804 +A804 +7C04 +0504 +0544 +0244 +0044 +0038 +ENDCHAR +STARTCHAR uni1675 +ENCODING 5749 +BBX 14 9 1 0 +BITMAP +5040 +A840 +A840 +7C40 +0540 +0544 +0244 +0044 +0038 +ENDCHAR +STARTCHAR uni1676 +ENCODING 5750 +BBX 14 12 1 0 +BITMAP +0060 +0060 +0000 +5040 +A840 +A840 +7C40 +0540 +0544 +0244 +0044 +0038 +ENDCHAR +STARTCHAR uni1677 +ENCODING 5751 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +08 +10 +26 +46 +F8 +08 +7C +08 +08 +08 +ENDCHAR +STARTCHAR uni1678 +ENCODING 5752 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +40 +23 +13 +08 +7C +40 +F8 +40 +40 +40 +ENDCHAR +STARTCHAR uni1679 +ENCODING 5753 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 0 +BITMAP +60 +60 +00 +40 +23 +13 +08 +7C +40 +F8 +40 +40 +40 +ENDCHAR +STARTCHAR uni167A +ENCODING 5754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +08 +08 +08 +7C +08 +F8 +46 +26 +10 +08 +ENDCHAR +STARTCHAR uni167B +ENCODING 5755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +18 +18 +00 +08 +08 +08 +7C +08 +F8 +46 +26 +10 +08 +ENDCHAR +STARTCHAR uni167C +ENCODING 5756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +40 +40 +40 +F8 +40 +7C +0B +13 +20 +40 +ENDCHAR +STARTCHAR uni167D +ENCODING 5757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 0 +BITMAP +60 +60 +00 +40 +40 +40 +F8 +40 +7C +0B +13 +20 +40 +ENDCHAR +STARTCHAR uni167E +ENCODING 5758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 6 +BITMAP +20 +F8 +20 +F8 +20 +ENDCHAR +STARTCHAR uni167F +ENCODING 5759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 7 +BITMAP +F8 +00 +F8 +ENDCHAR +STARTCHAR uni1680 +ENCODING 5760 +BBX 16 1 0 6 +BITMAP +FFFF +ENDCHAR +STARTCHAR uni1681 +ENCODING 5761 +BBX 16 7 0 0 +BITMAP +FFFF +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni1682 +ENCODING 5762 +BBX 16 7 0 0 +BITMAP +FFFF +0280 +0280 +0280 +0280 +0280 +0280 +ENDCHAR +STARTCHAR uni1683 +ENCODING 5763 +BBX 16 7 0 0 +BITMAP +FFFF +0540 +0540 +0540 +0540 +0540 +0540 +ENDCHAR +STARTCHAR uni1684 +ENCODING 5764 +BBX 16 7 0 0 +BITMAP +FFFF +0AA0 +0AA0 +0AA0 +0AA0 +0AA0 +0AA0 +ENDCHAR +STARTCHAR uni1685 +ENCODING 5765 +BBX 16 7 0 0 +BITMAP +FFFF +1550 +1550 +1550 +1550 +1550 +1550 +ENDCHAR +STARTCHAR uni1686 +ENCODING 5766 +BBX 16 7 0 6 +BITMAP +0100 +0100 +0100 +0100 +0100 +0100 +FFFF +ENDCHAR +STARTCHAR uni1687 +ENCODING 5767 +BBX 16 7 0 6 +BITMAP +0280 +0280 +0280 +0280 +0280 +0280 +FFFF +ENDCHAR +STARTCHAR uni1688 +ENCODING 5768 +BBX 16 7 0 6 +BITMAP +0540 +0540 +0540 +0540 +0540 +0540 +FFFF +ENDCHAR +STARTCHAR uni1689 +ENCODING 5769 +BBX 16 7 0 6 +BITMAP +0AA0 +0AA0 +0AA0 +0AA0 +0AA0 +0AA0 +FFFF +ENDCHAR +STARTCHAR uni168A +ENCODING 5770 +BBX 16 7 0 6 +BITMAP +1550 +1550 +1550 +1550 +1550 +1550 +FFFF +ENDCHAR +STARTCHAR uni168B +ENCODING 5771 +BBX 16 11 0 1 +BITMAP +0040 +0040 +0080 +0080 +0100 +FFFF +0100 +0200 +0200 +0400 +0400 +ENDCHAR +STARTCHAR uni168C +ENCODING 5772 +BBX 16 11 0 1 +BITMAP +00A0 +00A0 +0140 +0140 +0280 +FFFF +0280 +0500 +0500 +0A00 +0A00 +ENDCHAR +STARTCHAR uni168D +ENCODING 5773 +BBX 16 11 0 1 +BITMAP +0150 +0150 +02A0 +02A0 +0540 +FFFF +0540 +0A80 +0A80 +1500 +1500 +ENDCHAR +STARTCHAR uni168E +ENCODING 5774 +BBX 16 11 0 1 +BITMAP +02A8 +02A8 +0550 +0550 +0AA0 +FFFF +0AA0 +1540 +1540 +2A80 +2A80 +ENDCHAR +STARTCHAR uni168F +ENCODING 5775 +BBX 16 11 0 1 +BITMAP +0554 +0554 +0AA8 +0AA8 +1550 +FFFF +1550 +2AA0 +2AA0 +5540 +5540 +ENDCHAR +STARTCHAR uni1690 +ENCODING 5776 +BBX 16 5 0 4 +BITMAP +0100 +0100 +FFFF +0100 +0100 +ENDCHAR +STARTCHAR uni1691 +ENCODING 5777 +BBX 16 5 0 4 +BITMAP +0280 +0280 +FFFF +0280 +0280 +ENDCHAR +STARTCHAR uni1692 +ENCODING 5778 +BBX 16 5 0 4 +BITMAP +0540 +0540 +FFFF +0540 +0540 +ENDCHAR +STARTCHAR uni1693 +ENCODING 5779 +BBX 16 5 0 4 +BITMAP +0AA0 +0AA0 +FFFF +0AA0 +0AA0 +ENDCHAR +STARTCHAR uni1694 +ENCODING 5780 +BBX 16 5 0 4 +BITMAP +1550 +1550 +FFFF +1550 +1550 +ENDCHAR +STARTCHAR uni1695 +ENCODING 5781 +BBX 16 11 0 1 +BITMAP +0440 +0440 +0280 +0280 +0100 +FFFF +0100 +0280 +0280 +0440 +0440 +ENDCHAR +STARTCHAR uni1696 +ENCODING 5782 +BBX 16 13 0 0 +BITMAP +0100 +0100 +0280 +0280 +0440 +0440 +FFFF +0440 +0440 +0280 +0280 +0100 +0100 +ENDCHAR +STARTCHAR uni1697 +ENCODING 5783 +BBX 16 7 0 0 +BITMAP +FFFF +0800 +0800 +09C0 +0840 +0840 +0FC0 +ENDCHAR +STARTCHAR uni1698 +ENCODING 5784 +BBX 16 8 0 -1 +BITMAP +FFFF +1290 +0920 +06C0 +06C0 +0920 +1290 +2448 +ENDCHAR +STARTCHAR uni1699 +ENCODING 5785 +BBX 16 8 0 6 +BITMAP +0550 +0FF8 +0550 +0FF8 +0550 +0FF8 +0550 +FFFF +ENDCHAR +STARTCHAR uni169A +ENCODING 5786 +BBX 16 3 0 4 +BITMAP +FFFF +0000 +0FF0 +ENDCHAR +STARTCHAR uni169B +ENCODING 5787 +BBX 14 11 2 1 +BITMAP +8000 +4000 +2000 +1000 +0800 +07FC +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni169C +ENCODING 5788 +BBX 14 11 0 1 +BITMAP +0004 +0008 +0010 +0020 +0040 +FF80 +0040 +0020 +0010 +0008 +0004 +ENDCHAR +STARTCHAR uni16A0 +ENCODING 5792 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +92 +A4 +C8 +90 +A0 +C0 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16A1 +ENCODING 5793 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +AA +94 +A8 +D0 +A0 +C0 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16A2 +ENCODING 5794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +80 +C0 +A0 +90 +88 +84 +84 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni16A3 +ENCODING 5795 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +80 +C0 +A0 +90 +88 +84 +82 +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni16A4 +ENCODING 5796 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +80 +C0 +A0 +90 +88 +84 +84 +B4 +B4 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni16A5 +ENCODING 5797 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +80 +C0 +A0 +90 +88 +84 +C2 +A2 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni16A6 +ENCODING 5798 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -1 +BITMAP +80 +80 +80 +C0 +A0 +90 +88 +88 +90 +A0 +C0 +80 +80 +80 +ENDCHAR +STARTCHAR uni16A7 +ENCODING 5799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -1 +BITMAP +80 +80 +80 +C0 +A0 +90 +A8 +A8 +90 +A0 +C0 +80 +80 +80 +ENDCHAR +STARTCHAR uni16A8 +ENCODING 5800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 14 2 -1 +BITMAP +80 +C0 +A0 +90 +C0 +A0 +90 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16A9 +ENCODING 5801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +80 +C2 +A4 +98 +C2 +A4 +98 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16AA +ENCODING 5802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +80 +C2 +A4 +98 +C0 +A0 +90 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16AB +ENCODING 5803 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -1 +BITMAP +80 +C0 +A0 +90 +C8 +A0 +90 +88 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16AC +ENCODING 5804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +90 +50 +30 +90 +58 +34 +12 +18 +14 +12 +10 +10 +ENDCHAR +STARTCHAR uni16AD +ENCODING 5805 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 14 2 -1 +BITMAP +80 +80 +80 +80 +80 +C0 +A0 +90 +C0 +A0 +90 +80 +80 +80 +ENDCHAR +STARTCHAR uni16AE +ENCODING 5806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 14 1 -1 +BITMAP +10 +10 +10 +10 +10 +30 +50 +90 +30 +50 +90 +10 +10 +10 +ENDCHAR +STARTCHAR uni16AF +ENCODING 5807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +12 +14 +18 +12 +34 +58 +90 +30 +50 +90 +10 +10 +ENDCHAR +STARTCHAR uni16B0 +ENCODING 5808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +12 +14 +18 +10 +30 +50 +90 +30 +50 +90 +10 +10 +ENDCHAR +STARTCHAR uni16B1 +ENCODING 5809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +80 +C0 +A0 +90 +88 +84 +88 +90 +A0 +A0 +90 +88 +84 +82 +ENDCHAR +STARTCHAR uni16B2 +ENCODING 5810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 2 +BITMAP +08 +10 +20 +40 +80 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni16B3 +ENCODING 5811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +C0 +A0 +90 +88 +84 +82 +ENDCHAR +STARTCHAR uni16B4 +ENCODING 5812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +82 +84 +88 +90 +A0 +C0 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16B5 +ENCODING 5813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +B2 +B4 +88 +90 +A0 +C0 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16B6 +ENCODING 5814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +42 +44 +48 +50 +E0 +E0 +E0 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni16B7 +ENCODING 5815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +82 +82 +44 +44 +28 +28 +10 +10 +28 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni16B8 +ENCODING 5816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +82 +82 +44 +44 +28 +28 +54 +54 +28 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni16B9 +ENCODING 5817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -1 +BITMAP +80 +C0 +A0 +90 +88 +90 +A0 +C0 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16BA +ENCODING 5818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +82 +82 +82 +82 +82 +E2 +92 +8E +82 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni16BB +ENCODING 5819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +82 +82 +82 +82 +E2 +92 +8E +E2 +92 +8E +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni16BC +ENCODING 5820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +10 +92 +54 +38 +10 +38 +54 +92 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni16BD +ENCODING 5821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 14 2 -1 +BITMAP +40 +40 +40 +40 +40 +E0 +E0 +E0 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni16BE +ENCODING 5822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +10 +90 +50 +30 +10 +18 +14 +12 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni16BF +ENCODING 5823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +80 +80 +80 +80 +80 +C0 +A0 +90 +88 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16C0 +ENCODING 5824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +10 +90 +50 +38 +38 +38 +14 +12 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni16C1 +ENCODING 5825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 14 3 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16C2 +ENCODING 5826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 14 2 -1 +BITMAP +40 +40 +40 +40 +40 +E0 +E0 +E0 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni16C3 +ENCODING 5827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 2 +BITMAP +10 +20 +40 +88 +44 +22 +04 +08 +10 +ENDCHAR +STARTCHAR uni16C4 +ENCODING 5828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +10 +10 +38 +54 +92 +92 +54 +38 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni16C5 +ENCODING 5829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +10 +12 +14 +18 +10 +30 +50 +90 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni16C6 +ENCODING 5830 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 0 -1 +BITMAP +08 +08 +08 +08 +08 +08 +18 +28 +48 +88 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni16C7 +ENCODING 5831 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +18 +14 +12 +10 +10 +10 +10 +10 +10 +90 +50 +30 +10 +ENDCHAR +STARTCHAR uni16C8 +ENCODING 5832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +82 +C4 +A8 +90 +80 +80 +80 +80 +80 +80 +90 +A8 +C4 +82 +ENDCHAR +STARTCHAR uni16C9 +ENCODING 5833 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +92 +92 +54 +54 +38 +38 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni16CA +ENCODING 5834 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 1 0 +BITMAP +10 +20 +40 +80 +40 +20 +10 +20 +40 +80 +40 +20 +10 +ENDCHAR +STARTCHAR uni16CB +ENCODING 5835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -1 +BITMAP +80 +80 +80 +80 +88 +98 +A8 +C8 +88 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni16CC +ENCODING 5836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 7 3 6 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16CD +ENCODING 5837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 2 5 +BITMAP +40 +40 +40 +40 +40 +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni16CE +ENCODING 5838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 5 +BITMAP +10 +10 +10 +10 +92 +54 +38 +10 +ENDCHAR +STARTCHAR uni16CF +ENCODING 5839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni16D0 +ENCODING 5840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 0 -1 +BITMAP +08 +18 +28 +48 +88 +08 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni16D1 +ENCODING 5841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 0 -1 +BITMAP +08 +18 +28 +48 +88 +08 +1C +1C +1C +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni16D2 +ENCODING 5842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -1 +BITMAP +C0 +A0 +90 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni16D3 +ENCODING 5843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -1 +BITMAP +80 +80 +88 +90 +A0 +C8 +90 +A0 +C0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16D4 +ENCODING 5844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -1 +BITMAP +C0 +A0 +90 +A8 +90 +A0 +C0 +C0 +A0 +90 +A8 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni16D5 +ENCODING 5845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +82 +84 +88 +90 +A0 +C0 +80 +80 +C0 +A0 +90 +88 +84 +82 +ENDCHAR +STARTCHAR uni16D6 +ENCODING 5846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +82 +C6 +C6 +AA +AA +92 +92 +82 +82 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni16D7 +ENCODING 5847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +82 +C6 +AA +92 +AA +C6 +82 +82 +82 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni16D8 +ENCODING 5848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +92 +92 +54 +54 +38 +38 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni16D9 +ENCODING 5849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 14 2 -1 +BITMAP +E0 +E0 +E0 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni16DA +ENCODING 5850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +80 +C0 +A0 +90 +88 +84 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16DB +ENCODING 5851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +40 +60 +50 +48 +44 +42 +E0 +E0 +E0 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni16DC +ENCODING 5852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 2 +BITMAP +10 +28 +44 +82 +82 +44 +28 +10 +ENDCHAR +STARTCHAR uni16DD +ENCODING 5853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +82 +44 +28 +10 +28 +44 +82 +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni16DE +ENCODING 5854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +82 +C6 +C6 +AA +AA +92 +92 +92 +92 +AA +AA +C6 +C6 +82 +ENDCHAR +STARTCHAR uni16DF +ENCODING 5855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 1 +BITMAP +10 +28 +44 +82 +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni16E0 +ENCODING 5856 +BBX 13 14 1 -1 +BITMAP +8208 +4710 +2AA0 +1240 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni16E1 +ENCODING 5857 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +10 +92 +54 +38 +10 +38 +54 +92 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni16E2 +ENCODING 5858 +BBX 13 14 1 -1 +BITMAP +0208 +0310 +02A0 +0240 +0200 +0200 +0200 +0200 +0200 +0200 +1200 +2A00 +4600 +8200 +ENDCHAR +STARTCHAR uni16E3 +ENCODING 5859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +38 +38 +54 +54 +92 +92 +ENDCHAR +STARTCHAR uni16E4 +ENCODING 5860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +92 +92 +54 +54 +38 +38 +54 +54 +38 +38 +54 +54 +92 +92 +ENDCHAR +STARTCHAR uni16E5 +ENCODING 5861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +82 +C6 +AA +92 +AA +C6 +82 +82 +C6 +AA +92 +AA +C6 +82 +ENDCHAR +STARTCHAR uni16E6 +ENCODING 5862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +38 +38 +54 +54 +92 +92 +ENDCHAR +STARTCHAR uni16E7 +ENCODING 5863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 7 3 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16E8 +ENCODING 5864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +10 +92 +54 +38 +10 +ENDCHAR +STARTCHAR uni16E9 +ENCODING 5865 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -1 +BITMAP +08 +18 +28 +48 +88 +48 +28 +18 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni16EA +ENCODING 5866 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +40 +40 +E0 +40 +44 +4C +54 +64 +44 +04 +0E +04 +04 +04 +ENDCHAR +STARTCHAR uni16EB +ENCODING 5867 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 5 +BITMAP +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni16EC +ENCODING 5868 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 1 +BITMAP +E0 +E0 +E0 +00 +00 +00 +00 +00 +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni16ED +ENCODING 5869 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 2 +BITMAP +38 +38 +10 +D6 +FE +D6 +10 +38 +38 +ENDCHAR +STARTCHAR uni16EE +ENCODING 5870 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +18 +14 +12 +10 +10 +30 +50 +90 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni16EF +ENCODING 5871 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +92 +54 +54 +38 +38 +10 +10 +10 +10 +38 +38 +54 +54 +92 +ENDCHAR +STARTCHAR uni16F0 +ENCODING 5872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +10 +38 +54 +92 +92 +92 +92 +92 +54 +38 +10 +10 +ENDCHAR +STARTCHAR uni16F1 +ENCODING 5873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +90 +A8 +C8 +88 +84 +84 +84 +ENDCHAR +STARTCHAR uni16F2 +ENCODING 5874 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -1 +BITMAP +08 +08 +08 +08 +88 +C8 +A8 +98 +88 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni16F3 +ENCODING 5875 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +10 +38 +54 +92 +92 +54 +38 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni16F4 +ENCODING 5876 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +40 +40 +40 +44 +46 +4C +54 +64 +C4 +44 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni16F5 +ENCODING 5877 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 13 2 0 +BITMAP +20 +40 +80 +40 +20 +40 +80 +40 +20 +40 +80 +40 +20 +ENDCHAR +STARTCHAR uni16F6 +ENCODING 5878 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +80 +80 +40 +40 +22 +24 +18 +10 +28 +48 +84 +04 +02 +02 +ENDCHAR +STARTCHAR uni16F7 +ENCODING 5879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +80 +80 +80 +80 +E0 +90 +88 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni16F8 +ENCODING 5880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni1700 +ENCODING 5888 +BBX 14 9 1 1 +BITMAP +C008 +2014 +F010 +1020 +1020 +1040 +1080 +1100 +0E00 +ENDCHAR +STARTCHAR uni1701 +ENCODING 5889 +BBX 14 8 1 2 +BITMAP +8000 +6000 +1FF8 +0804 +1500 +E680 +0444 +0038 +ENDCHAR +STARTCHAR uni1702 +ENCODING 5890 +BBX 8 9 4 1 +BITMAP +3E +41 +01 +02 +05 +01 +01 +82 +7C +ENDCHAR +STARTCHAR uni1703 +ENCODING 5891 +BBX 14 9 1 1 +BITMAP +8000 +4004 +3FF8 +0200 +0200 +87F8 +7804 +0004 +0008 +ENDCHAR +STARTCHAR uni1704 +ENCODING 5892 +BBX 12 9 2 1 +BITMAP +7D80 +8240 +0240 +0440 +0A40 +0240 +0240 +0440 +F830 +ENDCHAR +STARTCHAR uni1705 +ENCODING 5893 +BBX 14 10 1 0 +BITMAP +4000 +8000 +9C00 +6218 +0224 +03C4 +0204 +0418 +7800 +8000 +ENDCHAR +STARTCHAR uni1706 +ENCODING 5894 +BBX 14 8 1 2 +BITMAP +8038 +8044 +8084 +4100 +3E00 +1000 +2000 +2000 +ENDCHAR +STARTCHAR uni1707 +ENCODING 5895 +BBX 13 6 1 2 +BITMAP +81F0 +7E08 +2000 +4000 +41F0 +3E08 +ENDCHAR +STARTCHAR uni1708 +ENCODING 5896 +BBX 9 9 3 1 +BITMAP +3E00 +4900 +8880 +9080 +0800 +0400 +0800 +1000 +0800 +ENDCHAR +STARTCHAR uni1709 +ENCODING 5897 +BBX 14 9 1 1 +BITMAP +F018 +1024 +1024 +2020 +2030 +4048 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uni170A +ENCODING 5898 +BBX 12 9 1 1 +BITMAP +1F80 +2040 +4020 +8010 +8010 +8010 +8210 +4520 +38C0 +ENDCHAR +STARTCHAR uni170B +ENCODING 5899 +BBX 14 9 1 1 +BITMAP +000C +0010 +E010 +17A0 +1860 +1040 +1080 +1100 +0E00 +ENDCHAR +STARTCHAR uni170C +ENCODING 5900 +BBX 14 9 1 1 +BITMAP +0008 +0014 +6014 +9038 +1020 +1040 +1080 +1100 +0E00 +ENDCHAR +STARTCHAR uni170D +ENCODING 5901 +BBX 13 7 1 1 +BITMAP +81F0 +7E08 +2000 +4000 +41F0 +3E48 +0020 +ENDCHAR +STARTCHAR uni170E +ENCODING 5902 +BBX 14 9 1 1 +BITMAP +80F8 +8704 +7904 +0200 +0100 +0200 +0200 +0100 +0600 +ENDCHAR +STARTCHAR uni170F +ENCODING 5903 +BBX 9 9 4 1 +BITMAP +1C00 +2200 +4100 +0080 +0080 +1080 +3080 +C900 +0600 +ENDCHAR +STARTCHAR uni1710 +ENCODING 5904 +BBX 13 9 2 1 +BITMAP +0030 +0048 +E088 +2090 +2128 +1108 +1208 +0A10 +0C60 +ENDCHAR +STARTCHAR uni1711 +ENCODING 5905 +BBX 13 5 2 5 +BITMAP +0070 +4188 +8608 +9808 +6030 +ENDCHAR +STARTCHAR uni1712 +ENCODING 5906 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -4 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni1713 +ENCODING 5907 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -5 -1 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni1714 +ENCODING 5908 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -10 -2 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni1715 +ENCODING 5909 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 10 -9 -2 +BITMAP +01 +01 +01 +01 +01 +01 +01 +02 +04 +F8 +ENDCHAR +STARTCHAR uni171F +ENCODING 5919 +BBX 11 10 1 1 +BITMAP +03C0 +0420 +0420 +08C0 +0820 +0840 +1180 +9040 +6080 +0F00 +ENDCHAR +STARTCHAR uni1720 +ENCODING 5920 +BBX 13 9 1 1 +BITMAP +0008 +0010 +3020 +D040 +1080 +1100 +1200 +1400 +1800 +ENDCHAR +STARTCHAR uni1721 +ENCODING 5921 +BBX 13 9 1 1 +BITMAP +0008 +0010 +3020 +D040 +1090 +1120 +1240 +1400 +1800 +ENDCHAR +STARTCHAR uni1722 +ENCODING 5922 +BBX 7 9 5 1 +BITMAP +FC +08 +10 +20 +FE +04 +08 +10 +20 +ENDCHAR +STARTCHAR uni1723 +ENCODING 5923 +BBX 9 8 3 2 +BITMAP +8700 +8880 +5080 +3100 +2E00 +4000 +4000 +4000 +ENDCHAR +STARTCHAR uni1724 +ENCODING 5924 +BBX 9 9 3 1 +BITMAP +8080 +8180 +8280 +8480 +8880 +9080 +A080 +C080 +8080 +ENDCHAR +STARTCHAR uni1725 +ENCODING 5925 +BBX 9 9 3 1 +BITMAP +8080 +8100 +8200 +8400 +8A00 +9100 +A000 +C000 +8000 +ENDCHAR +STARTCHAR uni1726 +ENCODING 5926 +BBX 10 9 3 1 +BITMAP +8400 +8C40 +8C40 +9480 +9480 +A500 +A500 +C600 +8400 +ENDCHAR +STARTCHAR uni1727 +ENCODING 5927 +BBX 11 9 2 1 +BITMAP +2020 +2040 +2080 +0100 +E200 +2400 +2800 +3000 +2000 +ENDCHAR +STARTCHAR uni1728 +ENCODING 5928 +BBX 12 9 1 1 +BITMAP +8E30 +75D0 +0410 +0410 +0410 +0410 +0410 +0410 +0410 +ENDCHAR +STARTCHAR uni1729 +ENCODING 5929 +BBX 13 9 1 1 +BITMAP +0008 +F010 +1010 +1020 +1030 +1048 +1080 +1100 +0E00 +ENDCHAR +STARTCHAR uni172A +ENCODING 5930 +BBX 8 9 2 1 +BITMAP +FF +01 +02 +02 +04 +04 +08 +08 +08 +ENDCHAR +STARTCHAR uni172B +ENCODING 5931 +BBX 12 9 2 1 +BITMAP +3010 +D820 +1420 +2240 +2140 +2080 +2140 +2220 +3C00 +ENDCHAR +STARTCHAR uni172C +ENCODING 5932 +BBX 12 9 1 1 +BITMAP +2010 +5030 +9050 +1090 +1110 +1210 +1410 +1810 +1010 +ENDCHAR +STARTCHAR uni172D +ENCODING 5933 +BBX 10 1 3 5 +BITMAP +FFC0 +ENDCHAR +STARTCHAR uni172E +ENCODING 5934 +BBX 10 9 2 1 +BITMAP +8400 +8C00 +8C00 +9400 +9400 +A580 +A640 +C440 +8080 +ENDCHAR +STARTCHAR uni172F +ENCODING 5935 +BBX 14 9 1 1 +BITMAP +6080 +9184 +1148 +1230 +2200 +2400 +2400 +2800 +3000 +ENDCHAR +STARTCHAR uni1730 +ENCODING 5936 +BBX 14 9 1 1 +BITMAP +0040 +00C0 +30C0 +D140 +1140 +1248 +1298 +14E8 +1804 +ENDCHAR +STARTCHAR uni1731 +ENCODING 5937 +BBX 10 9 3 1 +BITMAP +8040 +4080 +4100 +4200 +4400 +4800 +9000 +A000 +C000 +ENDCHAR +STARTCHAR uni1732 +ENCODING 5938 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -6 11 +BITMAP +F0 +ENDCHAR +STARTCHAR uni1733 +ENCODING 5939 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -7 -1 +BITMAP +F0 +ENDCHAR +STARTCHAR uni1734 +ENCODING 5940 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 14 -13 -2 +BITMAP +0010 +0010 +0010 +0010 +0010 +0010 +0010 +0010 +0010 +0020 +0020 +0040 +0180 +FE00 +ENDCHAR +STARTCHAR uni1735 +ENCODING 5941 +BBX 5 9 5 1 +BITMAP +08 +10 +10 +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni1736 +ENCODING 5942 +BBX 10 9 3 1 +BITMAP +0840 +1080 +1080 +2100 +2100 +4200 +4200 +8400 +8400 +ENDCHAR +STARTCHAR uni1740 +ENCODING 5952 +BBX 11 9 2 4 +BITMAP +0020 +0020 +0040 +E040 +E080 +2080 +2100 +3F00 +3E00 +ENDCHAR +STARTCHAR uni1741 +ENCODING 5953 +BBX 11 12 2 1 +BITMAP +0020 +0020 +0040 +E040 +E080 +2080 +2100 +3F00 +3E00 +0000 +7C00 +7C00 +ENDCHAR +STARTCHAR uni1742 +ENCODING 5954 +BBX 8 9 4 1 +BITMAP +F8 +F8 +08 +0F +1E +04 +04 +08 +08 +ENDCHAR +STARTCHAR uni1743 +ENCODING 5955 +BBX 9 9 3 1 +BITMAP +1F80 +1F80 +0000 +0000 +0000 +0000 +0000 +FC00 +FC00 +ENDCHAR +STARTCHAR uni1744 +ENCODING 5956 +BBX 7 9 5 1 +BITMAP +40 +40 +80 +FE +FE +02 +04 +04 +08 +ENDCHAR +STARTCHAR uni1745 +ENCODING 5957 +BBX 11 9 3 1 +BITMAP +3F80 +3F80 +0100 +0100 +03E0 +03E0 +0400 +FC00 +FC00 +ENDCHAR +STARTCHAR uni1746 +ENCODING 5958 +BBX 14 9 1 1 +BITMAP +23C4 +23C4 +2244 +4488 +4488 +4488 +8910 +F9F0 +F9F0 +ENDCHAR +STARTCHAR uni1747 +ENCODING 5959 +BBX 11 9 2 1 +BITMAP +0420 +0420 +0420 +F840 +F840 +0840 +1080 +1F80 +1F80 +ENDCHAR +STARTCHAR uni1748 +ENCODING 5960 +BBX 8 9 5 1 +BITMAP +FF +FF +08 +10 +10 +10 +20 +20 +20 +ENDCHAR +STARTCHAR uni1749 +ENCODING 5961 +BBX 12 9 2 1 +BITMAP +F0F0 +F0F0 +1080 +2100 +2100 +2100 +4200 +7E00 +7E00 +ENDCHAR +STARTCHAR uni174A +ENCODING 5962 +BBX 7 8 4 1 +BITMAP +FE +FE +02 +02 +04 +04 +FC +FC +ENDCHAR +STARTCHAR uni174B +ENCODING 5963 +BBX 10 11 3 1 +BITMAP +0040 +0040 +0080 +2080 +3F80 +3F80 +4100 +4100 +4100 +FF00 +FE00 +ENDCHAR +STARTCHAR uni174C +ENCODING 5964 +BBX 12 9 2 1 +BITMAP +F9F0 +F9F0 +0910 +1220 +1220 +1220 +2440 +3C40 +3C40 +ENDCHAR +STARTCHAR uni174D +ENCODING 5965 +BBX 10 2 3 5 +BITMAP +FFC0 +FFC0 +ENDCHAR +STARTCHAR uni174E +ENCODING 5966 +BBX 10 11 2 -1 +BITMAP +07C0 +07C0 +0440 +8840 +8880 +FF80 +FF80 +1000 +1000 +2000 +2000 +ENDCHAR +STARTCHAR uni174F +ENCODING 5967 +BBX 10 9 3 3 +BITMAP +2000 +2000 +47C0 +47C0 +4440 +8840 +8080 +FF80 +FF80 +ENDCHAR +STARTCHAR uni1750 +ENCODING 5968 +BBX 11 14 2 -2 +BITMAP +F800 +F800 +0800 +1000 +1F00 +1F00 +0100 +0200 +03E0 +03E0 +0020 +0040 +0040 +0080 +ENDCHAR +STARTCHAR uni1751 +ENCODING 5969 +BBX 7 9 4 1 +BITMAP +20 +20 +20 +40 +40 +40 +80 +FE +FE +ENDCHAR +STARTCHAR uni1752 +ENCODING 5970 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -7 11 +BITMAP +F8 +F8 +ENDCHAR +STARTCHAR uni1753 +ENCODING 5971 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -8 -1 +BITMAP +F8 +F8 +ENDCHAR +STARTCHAR uni1760 +ENCODING 5984 +BBX 14 12 1 -2 +BITMAP +0008 +0014 +6010 +9020 +1020 +1040 +1080 +1100 +2E00 +4000 +4000 +2000 +ENDCHAR +STARTCHAR uni1761 +ENCODING 5985 +BBX 14 10 1 1 +BITMAP +0020 +004C +0090 +6010 +9020 +1020 +1040 +1080 +1100 +0E00 +ENDCHAR +STARTCHAR uni1762 +ENCODING 5986 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 -1 +BITMAP +40 +20 +40 +80 +40 +20 +40 +80 +40 +20 +40 +ENDCHAR +STARTCHAR uni1763 +ENCODING 5987 +BBX 11 9 2 1 +BITMAP +C060 +2080 +1100 +0A00 +0400 +0A00 +1100 +2080 +4060 +ENDCHAR +STARTCHAR uni1764 +ENCODING 5988 +BBX 13 12 1 -1 +BITMAP +1FC0 +6230 +8108 +0200 +0400 +0200 +0100 +0200 +0400 +0200 +0100 +0200 +ENDCHAR +STARTCHAR uni1765 +ENCODING 5989 +BBX 14 5 1 3 +BITMAP +8038 +4044 +3F84 +4008 +8000 +ENDCHAR +STARTCHAR uni1766 +ENCODING 5990 +BBX 14 11 0 -1 +BITMAP +4000 +2000 +4000 +8038 +4044 +3F84 +4008 +8000 +4000 +2000 +4000 +ENDCHAR +STARTCHAR uni1767 +ENCODING 5991 +BBX 14 11 1 1 +BITMAP +01C0 +0200 +040C +0810 +6810 +9020 +1020 +1040 +1080 +1100 +0E00 +ENDCHAR +STARTCHAR uni1768 +ENCODING 5992 +BBX 13 12 1 -1 +BITMAP +1FC0 +6230 +8208 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni1769 +ENCODING 5993 +BBX 14 9 1 1 +BITMAP +000C +0010 +6010 +9020 +1020 +1050 +1088 +1104 +0E00 +ENDCHAR +STARTCHAR uni176A +ENCODING 5994 +BBX 12 10 2 1 +BITMAP +1FC0 +2020 +4010 +8010 +8010 +8010 +8010 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni176B +ENCODING 5995 +BBX 14 9 1 1 +BITMAP +000C +0010 +6790 +9860 +1020 +1040 +1080 +1100 +0E00 +ENDCHAR +STARTCHAR uni176C +ENCODING 5996 +BBX 14 9 1 1 +BITMAP +0018 +0024 +6024 +9048 +1040 +1080 +1080 +1100 +0E00 +ENDCHAR +STARTCHAR uni176E +ENCODING 5998 +BBX 14 10 1 0 +BITMAP +001C +0020 +6020 +9040 +1040 +10A8 +10B4 +1158 +0E2C +0010 +ENDCHAR +STARTCHAR uni176F +ENCODING 5999 +BBX 14 9 1 1 +BITMAP +0780 +1840 +2040 +4000 +8000 +8000 +83F8 +8C04 +7004 +ENDCHAR +STARTCHAR uni1770 +ENCODING 6000 +BBX 13 9 1 1 +BITMAP +0040 +00A0 +60A0 +9120 +1140 +1230 +1220 +1218 +0C10 +ENDCHAR +STARTCHAR uni1772 +ENCODING 6002 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -4 10 +BITMAP +80 +40 +80 +ENDCHAR +STARTCHAR uni1773 +ENCODING 6003 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -5 -1 +BITMAP +80 +40 +80 +ENDCHAR +STARTCHAR uni1780 +ENCODING 6016 +BBX 8 9 4 1 +BITMAP +76 +89 +40 +FF +81 +81 +81 +81 +81 +ENDCHAR +STARTCHAR uni1781 +ENCODING 6017 +BBX 6 9 5 1 +BITMAP +70 +88 +84 +44 +08 +70 +84 +88 +70 +ENDCHAR +STARTCHAR uni1782 +ENCODING 6018 +BBX 8 9 4 1 +BITMAP +76 +89 +40 +FF +81 +81 +99 +A9 +C1 +ENDCHAR +STARTCHAR uni1783 +ENCODING 6019 +BBX 11 9 2 1 +BITMAP +6660 +A880 +ACC0 +2440 +2440 +2440 +2440 +2440 +1B80 +ENDCHAR +STARTCHAR uni1784 +ENCODING 6020 +BBX 7 11 4 1 +BITMAP +40 +20 +28 +34 +18 +04 +62 +A2 +AA +36 +22 +ENDCHAR +STARTCHAR uni1785 +ENCODING 6021 +BBX 9 9 3 1 +BITMAP +7600 +8900 +8000 +C180 +4280 +4280 +4180 +4080 +7F80 +ENDCHAR +STARTCHAR uni1786 +ENCODING 6022 +BBX 10 9 2 1 +BITMAP +1D80 +2240 +4000 +21C0 +2240 +79C0 +A440 +A440 +4380 +ENDCHAR +STARTCHAR uni1787 +ENCODING 6023 +BBX 8 10 4 1 +BITMAP +02 +31 +49 +86 +C0 +44 +44 +54 +6C +44 +ENDCHAR +STARTCHAR uni1788 +ENCODING 6024 +BBX 13 9 2 1 +BITMAP +7198 +8A20 +8B30 +8910 +8910 +C910 +A910 +A910 +C6E0 +ENDCHAR +STARTCHAR uni1789 +ENCODING 6025 +BBX 11 12 3 -2 +BITMAP +6DC0 +9220 +8220 +8220 +8220 +C220 +A220 +A220 +C220 +0080 +3840 +4780 +ENDCHAR +STARTCHAR uni178A +ENCODING 6026 +BBX 6 11 5 1 +BITMAP +70 +08 +64 +84 +78 +00 +44 +44 +54 +6C +44 +ENDCHAR +STARTCHAR uni178B +ENCODING 6027 +BBX 10 12 3 1 +BITMAP +0080 +0140 +0040 +60C0 +A100 +A180 +2080 +2080 +2080 +2080 +2080 +1F00 +ENDCHAR +STARTCHAR uni178C +ENCODING 6028 +BBX 9 9 3 1 +BITMAP +7700 +8880 +8080 +4100 +0600 +1880 +6180 +8180 +7E80 +ENDCHAR +STARTCHAR uni178D +ENCODING 6029 +BBX 13 9 2 1 +BITMAP +6C18 +9220 +8230 +8210 +8210 +C710 +AA90 +AA90 +C660 +ENDCHAR +STARTCHAR uni178E +ENCODING 6030 +BBX 12 9 2 1 +BITMAP +70E0 +8910 +8990 +8890 +8890 +C890 +AA90 +AD90 +C890 +ENDCHAR +STARTCHAR uni178F +ENCODING 6031 +BBX 8 9 4 1 +BITMAP +76 +89 +40 +FE +82 +C2 +A2 +A2 +C2 +ENDCHAR +STARTCHAR uni1790 +ENCODING 6032 +BBX 8 11 4 1 +BITMAP +02 +01 +31 +4E +80 +C6 +4A +4A +46 +42 +7E +ENDCHAR +STARTCHAR uni1791 +ENCODING 6033 +BBX 10 9 4 1 +BITMAP +3F80 +4040 +8080 +8600 +4900 +3E00 +0800 +8800 +F800 +ENDCHAR +STARTCHAR uni1792 +ENCODING 6034 +BBX 9 9 3 1 +BITMAP +7600 +8900 +8000 +C180 +4280 +4280 +4980 +5480 +6380 +ENDCHAR +STARTCHAR uni1793 +ENCODING 6035 +BBX 6 9 5 1 +BITMAP +38 +44 +88 +80 +78 +08 +A8 +D8 +88 +ENDCHAR +STARTCHAR uni1794 +ENCODING 6036 +BBX 9 9 4 1 +BITMAP +6180 +8200 +C300 +4100 +4100 +4100 +4100 +4100 +3E00 +ENDCHAR +STARTCHAR uni1795 +ENCODING 6037 +BBX 8 11 4 1 +BITMAP +02 +31 +49 +86 +80 +83 +85 +85 +93 +A9 +C7 +ENDCHAR +STARTCHAR uni1796 +ENCODING 6038 +BBX 9 9 4 1 +BITMAP +7700 +8880 +8080 +8080 +8080 +C080 +A080 +A080 +C080 +ENDCHAR +STARTCHAR uni1797 +ENCODING 6039 +BBX 9 9 3 1 +BITMAP +3B00 +4480 +2000 +0000 +1F80 +1080 +5080 +9080 +7080 +ENDCHAR +STARTCHAR uni1798 +ENCODING 6040 +BBX 9 9 3 1 +BITMAP +6180 +8200 +C300 +4100 +4100 +7F00 +4100 +4100 +3E00 +ENDCHAR +STARTCHAR uni1799 +ENCODING 6041 +BBX 11 9 3 1 +BITMAP +4660 +A880 +ACC0 +C440 +8440 +8440 +8440 +8440 +FB80 +ENDCHAR +STARTCHAR uni179A +ENCODING 6042 +BBX 5 9 5 1 +BITMAP +18 +20 +30 +10 +10 +10 +50 +90 +60 +ENDCHAR +STARTCHAR uni179B +ENCODING 6043 +BBX 11 9 3 1 +BITMAP +7860 +8480 +84C0 +8440 +8440 +C440 +A440 +A440 +C380 +ENDCHAR +STARTCHAR uni179C +ENCODING 6044 +BBX 6 12 5 1 +BITMAP +08 +14 +04 +1C +24 +30 +10 +10 +10 +50 +90 +60 +ENDCHAR +STARTCHAR uni179D +ENCODING 6045 +BBX 9 9 4 1 +BITMAP +7600 +8900 +4000 +FE00 +8200 +8A80 +A700 +D200 +C200 +ENDCHAR +STARTCHAR uni179E +ENCODING 6046 +BBX 10 9 3 1 +BITMAP +6180 +8200 +C300 +4100 +4540 +4380 +4100 +4100 +3E00 +ENDCHAR +STARTCHAR uni179F +ENCODING 6047 +BBX 10 9 3 1 +BITMAP +60C0 +8100 +C180 +7880 +8880 +C880 +A880 +A880 +C700 +ENDCHAR +STARTCHAR uni17A0 +ENCODING 6048 +BBX 11 9 3 1 +BITMAP +63C0 +8420 +C620 +4220 +4220 +4220 +4220 +4220 +3C20 +ENDCHAR +STARTCHAR uni17A1 +ENCODING 6049 +BBX 14 12 1 -2 +BITMAP +3F8C +4050 +8098 +8608 +4908 +3E08 +8808 +F808 +0388 +04A8 +02D8 +0088 +ENDCHAR +STARTCHAR uni17A2 +ENCODING 6050 +BBX 11 9 2 1 +BITMAP +1860 +2080 +30C0 +1040 +1FC0 +1040 +5140 +9240 +71C0 +ENDCHAR +STARTCHAR uni17A3 +ENCODING 6051 +BBX 11 9 2 1 +BITMAP +1860 +2080 +30C0 +1040 +1FC0 +1040 +5140 +9240 +71C0 +ENDCHAR +STARTCHAR uni17A4 +ENCODING 6052 +BBX 13 9 1 1 +BITMAP +18F0 +2108 +3188 +1088 +1F88 +1088 +5288 +9488 +7388 +ENDCHAR +STARTCHAR uni17A5 +ENCODING 6053 +BBX 7 11 5 1 +BITMAP +04 +62 +92 +4C +00 +FE +82 +C2 +A2 +A2 +C2 +ENDCHAR +STARTCHAR uni17A6 +ENCODING 6054 +BBX 12 15 3 -2 +BITMAP +0020 +0050 +0010 +0070 +0090 +FCC0 +8440 +E440 +9440 +E440 +0040 +FC40 +C440 +A440 +C7C0 +ENDCHAR +STARTCHAR uni17A7 +ENCODING 6055 +BBX 7 9 5 1 +BITMAP +70 +88 +84 +44 +08 +72 +86 +8A +72 +ENDCHAR +STARTCHAR uni17A8 +ENCODING 6056 +BBX 8 9 4 1 +BITMAP +76 +89 +40 +3C +42 +04 +39 +43 +3D +ENDCHAR +STARTCHAR uni17A9 +ENCODING 6057 +BBX 9 9 3 1 +BITMAP +7000 +8800 +8400 +4480 +0880 +7280 +8680 +8A80 +7280 +ENDCHAR +STARTCHAR uni17AA +ENCODING 6058 +BBX 8 13 4 1 +BITMAP +10 +08 +04 +74 +8C +64 +10 +3C +42 +04 +39 +43 +3D +ENDCHAR +STARTCHAR uni17AB +ENCODING 6059 +BBX 9 12 4 -2 +BITMAP +6180 +8200 +C300 +4100 +4100 +4100 +4100 +4100 +3E00 +0300 +7080 +8F00 +ENDCHAR +STARTCHAR uni17AC +ENCODING 6060 +BBX 11 12 4 -2 +BITMAP +6180 +8200 +C300 +4100 +4100 +4100 +4100 +4100 +3E00 +0300 +7080 +8F60 +ENDCHAR +STARTCHAR uni17AD +ENCODING 6061 +BBX 9 12 4 -2 +BITMAP +7700 +8880 +8080 +8080 +8080 +C080 +A080 +A080 +C080 +0600 +7100 +8E00 +ENDCHAR +STARTCHAR uni17AE +ENCODING 6062 +BBX 10 12 4 -2 +BITMAP +7700 +8880 +8080 +8080 +8080 +C080 +A080 +A080 +C080 +0600 +7100 +8EC0 +ENDCHAR +STARTCHAR uni17AF +ENCODING 6063 +BBX 8 9 4 1 +BITMAP +30 +10 +17 +19 +01 +71 +95 +5B +11 +ENDCHAR +STARTCHAR uni17B0 +ENCODING 6064 +BBX 9 12 4 -2 +BITMAP +7700 +8880 +8080 +8080 +C080 +A080 +A080 +C080 +0000 +3F80 +4900 +3600 +ENDCHAR +STARTCHAR uni17B1 +ENCODING 6065 +BBX 7 10 5 1 +BITMAP +70 +88 +C4 +20 +78 +84 +08 +72 +86 +7A +ENDCHAR +STARTCHAR uni17B2 +ENCODING 6066 +BBX 8 10 4 1 +BITMAP +01 +7E +80 +8E +91 +91 +82 +81 +81 +7E +ENDCHAR +STARTCHAR uni17B3 +ENCODING 6067 +BBX 8 10 5 1 +BITMAP +71 +8A +C4 +20 +78 +84 +08 +72 +86 +7A +ENDCHAR +STARTCHAR uni17B4 +ENCODING 6068 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +A544 +2945 +B128 +2929 +A510 +0001 +8000 +0871 +9488 +22A9 +BE98 +2279 +8004 +5555 +ENDCHAR +STARTCHAR uni17B5 +ENCODING 6069 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +A544 +2945 +B128 +2929 +A510 +0001 +8000 +0811 +9428 +2245 +BE7C +2245 +8000 +5555 +ENDCHAR +STARTCHAR uni17B6 +ENCODING 6070 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 10 -6 1 +BITMAP +78 +88 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni17B7 +ENCODING 6071 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -11 10 +BITMAP +70 +88 +7F +ENDCHAR +STARTCHAR uni17B8 +ENCODING 6072 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -11 10 +BITMAP +72 +8A +7E +ENDCHAR +STARTCHAR uni17B9 +ENCODING 6073 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -11 10 +BITMAP +72 +8D +7F +ENDCHAR +STARTCHAR uni17BA +ENCODING 6074 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -11 10 +BITMAP +0A +7A +8E +7F +ENDCHAR +STARTCHAR uni17BB +ENCODING 6075 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -1 -2 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni17BC +ENCODING 6076 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -10 -2 +BITMAP +90 +90 +F0 +ENDCHAR +STARTCHAR uni17BD +ENCODING 6077 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 -2 +BITMAP +88 +A8 +D8 +ENDCHAR +STARTCHAR uni17BE +ENCODING 6078 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 12 -16 1 +BITMAP +0390 +0450 +03F0 +C000 +A000 +8000 +8000 +8000 +C000 +A000 +A000 +C000 +ENDCHAR +STARTCHAR uni17BF +ENCODING 6079 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 16 -16 -2 +BITMAP +0050 +03D0 +0470 +03FE +C001 +A001 +8001 +8001 +8001 +C001 +A001 +A001 +C001 +1007 +0801 +07FE +ENDCHAR +STARTCHAR uni17C0 +ENCODING 6080 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 16 -16 -2 +BITMAP +0018 +0008 +0010 +003E +C001 +A001 +8001 +8001 +8001 +C001 +A001 +A001 +C001 +1007 +0801 +07FE +ENDCHAR +STARTCHAR uni17C1 +ENCODING 6081 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -8 1 +BITMAP +C0 +A0 +80 +80 +80 +C0 +A0 +A0 +C0 +ENDCHAR +STARTCHAR uni17C2 +ENCODING 6082 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 13 -8 1 +BITMAP +18 +88 +70 +00 +C0 +A0 +80 +80 +80 +C0 +A0 +A0 +C0 +ENDCHAR +STARTCHAR uni17C3 +ENCODING 6083 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 13 -8 1 +BITMAP +98 +64 +44 +18 +C0 +A0 +80 +80 +80 +C0 +A0 +A0 +C0 +ENDCHAR +STARTCHAR uni17C4 +ENCODING 6084 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 10 -16 1 +BITMAP +001E +C022 +A002 +8002 +8002 +8002 +C002 +A002 +A002 +C002 +ENDCHAR +STARTCHAR uni17C5 +ENCODING 6085 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 13 -16 1 +BITMAP +0004 +0002 +0002 +001E +C022 +A002 +8002 +8002 +8002 +C002 +A002 +A002 +C002 +ENDCHAR +STARTCHAR uni17C6 +ENCODING 6086 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -10 11 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni17C7 +ENCODING 6087 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -3 1 +BITMAP +40 +A0 +A0 +40 +00 +40 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni17C8 +ENCODING 6088 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -2 4 +BITMAP +80 +00 +80 +ENDCHAR +STARTCHAR uni17C9 +ENCODING 6089 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -9 10 +BITMAP +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni17CA +ENCODING 6090 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -12 11 +BITMAP +76 +89 +40 +ENDCHAR +STARTCHAR uni17CB +ENCODING 6091 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -1 10 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni17CC +ENCODING 6092 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -11 10 +BITMAP +71 +8A +44 +80 +ENDCHAR +STARTCHAR uni17CD +ENCODING 6093 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -11 10 +BITMAP +71 +8A +44 +34 +ENDCHAR +STARTCHAR uni17CE +ENCODING 6094 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -10 10 +BITMAP +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni17CF +ENCODING 6095 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -10 10 +BITMAP +7980 +8700 +A800 +D800 +ENDCHAR +STARTCHAR uni17D0 +ENCODING 6096 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -7 11 +BITMAP +18 +88 +70 +ENDCHAR +STARTCHAR uni17D1 +ENCODING 6097 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 -12 12 +BITMAP +FF +ENDCHAR +STARTCHAR uni17D2 +ENCODING 6098 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -10 -1 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni17D3 +ENCODING 6099 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -11 11 +BITMAP +70 +88 +70 +ENDCHAR +STARTCHAR uni17D4 +ENCODING 6100 +BBX 6 9 3 1 +BITMAP +0C +4C +94 +64 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni17D5 +ENCODING 6101 +BBX 8 9 1 1 +BITMAP +0D +4D +95 +65 +05 +05 +05 +05 +05 +ENDCHAR +STARTCHAR uni17D6 +ENCODING 6102 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 1 1 +BITMAP +60 +90 +60 +00 +F0 +00 +60 +90 +60 +ENDCHAR +STARTCHAR uni17D7 +ENCODING 6103 +BBX 11 10 2 0 +BITMAP +7BC0 +8420 +E020 +9020 +E020 +0020 +0020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni17D8 +ENCODING 6104 +BBX 16 9 0 1 +BITMAP +331B +B4AB +54A5 +1491 +1491 +1651 +1551 +1551 +1631 +ENDCHAR +STARTCHAR uni17D9 +ENCODING 6105 +BBX 7 9 4 1 +BITMAP +38 +44 +92 +AA +AA +AA +92 +44 +38 +ENDCHAR +STARTCHAR uni17DA +ENCODING 6106 +BBX 16 6 0 2 +BITMAP +7100 +8A88 +AA95 +9252 +4450 +3820 +ENDCHAR +STARTCHAR uni17DB +ENCODING 6107 +BBX 6 9 5 1 +BITMAP +18 +20 +30 +10 +7C +10 +50 +90 +60 +ENDCHAR +STARTCHAR uni17DC +ENCODING 6108 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 1 +BITMAP +70 +88 +80 +70 +08 +48 +90 +60 +ENDCHAR +STARTCHAR uni17DD +ENCODING 6109 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -12 10 +BITMAP +3C +42 +81 +ENDCHAR +STARTCHAR uni17E0 +ENCODING 6112 +BBX 7 9 4 1 +BITMAP +7C +82 +82 +82 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni17E1 +ENCODING 6113 +BBX 9 9 3 1 +BITMAP +3E00 +4100 +4880 +3080 +0080 +0080 +0080 +7080 +8F00 +ENDCHAR +STARTCHAR uni17E2 +ENCODING 6114 +BBX 11 12 2 1 +BITMAP +8000 +8000 +8000 +9DC0 +A220 +B020 +A820 +A820 +B020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni17E3 +ENCODING 6115 +BBX 11 9 2 1 +BITMAP +7BC0 +8420 +8420 +8420 +8420 +C420 +A420 +A420 +C420 +ENDCHAR +STARTCHAR uni17E4 +ENCODING 6116 +BBX 10 10 4 1 +BITMAP +0040 +0080 +3E80 +4180 +8C00 +9200 +8800 +8400 +8200 +7E00 +ENDCHAR +STARTCHAR uni17E5 +ENCODING 6117 +BBX 8 12 4 1 +BITMAP +60 +91 +92 +A2 +7E +40 +8C +92 +88 +84 +82 +7E +ENDCHAR +STARTCHAR uni17E6 +ENCODING 6118 +BBX 9 9 3 1 +BITMAP +C000 +4000 +5F00 +6080 +0080 +3080 +4880 +4100 +3E00 +ENDCHAR +STARTCHAR uni17E7 +ENCODING 6119 +BBX 13 12 2 1 +BITMAP +0008 +0010 +0010 +7710 +8890 +8090 +8090 +8090 +C090 +A090 +A090 +C060 +ENDCHAR +STARTCHAR uni17E8 +ENCODING 6120 +BBX 10 12 3 1 +BITMAP +0040 +0080 +3E80 +4180 +8000 +8180 +8280 +8480 +8280 +8080 +9E80 +6180 +ENDCHAR +STARTCHAR uni17E9 +ENCODING 6121 +BBX 11 9 2 1 +BITMAP +0020 +3C40 +4340 +40C0 +2000 +7C00 +8200 +9100 +60C0 +ENDCHAR +STARTCHAR uni17F0 +ENCODING 6128 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 1 1 +BITMAP +60 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni17F1 +ENCODING 6129 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 1 +BITMAP +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni17F2 +ENCODING 6130 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 5 2 1 +BITMAP +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni17F3 +ENCODING 6131 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 1 +BITMAP +24 +5A +89 +ENDCHAR +STARTCHAR uni17F4 +ENCODING 6132 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 1 +BITMAP +88 +88 +50 +50 +20 +ENDCHAR +STARTCHAR uni17F5 +ENCODING 6133 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 1 +BITMAP +88 +50 +20 +50 +50 +20 +ENDCHAR +STARTCHAR uni17F6 +ENCODING 6134 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 1 +BITMAP +80 +40 +40 +20 +20 +ENDCHAR +STARTCHAR uni17F7 +ENCODING 6135 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 0 1 +BITMAP +22 +54 +88 +ENDCHAR +STARTCHAR uni17F8 +ENCODING 6136 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 1 +BITMAP +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni17F9 +ENCODING 6137 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 1 +BITMAP +30 +40 +80 +F0 +08 +30 +ENDCHAR +STARTCHAR uni1800 +ENCODING 6144 +BBX 6 13 5 -1 +BITMAP +70 +88 +84 +84 +84 +64 +04 +08 +10 +20 +40 +40 +40 +ENDCHAR +STARTCHAR uni1801 +ENCODING 6145 +BBX 14 2 1 5 +BITMAP +CCCC +CCCC +ENDCHAR +STARTCHAR uni1802 +ENCODING 6146 +BBX 5 7 6 2 +BITMAP +20 +20 +70 +F8 +70 +20 +20 +ENDCHAR +STARTCHAR uni1803 +ENCODING 6147 +BBX 12 7 2 2 +BITMAP +2040 +2040 +70E0 +F9F0 +70E0 +2040 +2040 +ENDCHAR +STARTCHAR uni1804 +ENCODING 6148 +BBX 2 8 7 2 +BITMAP +C0 +C0 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni1805 +ENCODING 6149 +BBX 14 15 1 -2 +BITMAP +0100 +0100 +0380 +07C0 +2390 +2110 +7138 +F87C +7138 +2110 +2390 +07C0 +0380 +0100 +0100 +ENDCHAR +STARTCHAR uni1806 +ENCODING 6150 +BBX 6 2 5 5 +BITMAP +FC +FC +ENDCHAR +STARTCHAR uni1807 +ENCODING 6151 +BBX 6 5 5 2 +BITMAP +FC +FC +30 +30 +10 +ENDCHAR +STARTCHAR uni1808 +ENCODING 6152 +BBX 4 10 5 1 +BITMAP +80 +40 +20 +30 +30 +30 +30 +20 +40 +80 +ENDCHAR +STARTCHAR uni1809 +ENCODING 6153 +BBX 10 10 3 1 +BITMAP +8200 +4100 +2080 +30C0 +30C0 +30C0 +30C0 +2080 +4100 +8200 +ENDCHAR +STARTCHAR uni180A +ENCODING 6154 +BBX 3 2 6 5 +BITMAP +E0 +E0 +ENDCHAR +STARTCHAR uni180B +ENCODING 6155 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +BC44 +2045 +B828 +2029 +A010 +0001 +8000 +1C11 +A030 +1811 +8410 +387D +8000 +5555 +ENDCHAR +STARTCHAR uni180C +ENCODING 6156 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +BC44 +2045 +B828 +2029 +A010 +0001 +8000 +1C79 +A004 +1839 +8440 +387D +8000 +5555 +ENDCHAR +STARTCHAR uni180D +ENCODING 6157 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +BC44 +2045 +B828 +2029 +A010 +0001 +8000 +1C79 +A004 +1839 +8404 +3879 +8000 +5555 +ENDCHAR +STARTCHAR uni180E +ENCODING 6158 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +A244 +3645 +AA28 +2229 +A210 +0001 +8000 +01E1 +8200 +01C1 +8020 +03C1 +8000 +5555 +ENDCHAR +STARTCHAR uni180F +ENCODING 6159 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +BC44 +2045 +B828 +2029 +A010 +0001 +8000 +1C45 +A044 +187D +8404 +3805 +8000 +5555 +ENDCHAR +STARTCHAR uni1810 +ENCODING 6160 +BBX 8 12 4 0 +BITMAP +3C +42 +42 +81 +81 +81 +81 +81 +81 +42 +42 +3C +ENDCHAR +STARTCHAR uni1811 +ENCODING 6161 +BBX 8 12 4 0 +BITMAP +3C +42 +42 +81 +81 +81 +41 +41 +01 +82 +42 +3C +ENDCHAR +STARTCHAR uni1812 +ENCODING 6162 +BBX 11 12 4 0 +BITMAP +3C00 +4200 +4200 +8100 +8100 +8100 +8100 +8120 +8120 +4240 +4380 +2000 +ENDCHAR +STARTCHAR uni1813 +ENCODING 6163 +BBX 11 12 4 0 +BITMAP +3400 +4A00 +4A00 +8900 +8900 +8900 +8900 +8120 +8120 +4240 +4380 +2000 +ENDCHAR +STARTCHAR uni1814 +ENCODING 6164 +BBX 8 12 4 0 +BITMAP +3C +42 +02 +21 +41 +41 +81 +81 +81 +42 +42 +3C +ENDCHAR +STARTCHAR uni1815 +ENCODING 6165 +BBX 11 11 4 0 +BITMAP +0200 +0200 +0500 +0500 +0480 +8480 +8440 +8440 +4420 +4820 +3000 +ENDCHAR +STARTCHAR uni1816 +ENCODING 6166 +BBX 8 12 4 0 +BITMAP +3C +40 +40 +88 +88 +8E +89 +89 +81 +42 +42 +3C +ENDCHAR +STARTCHAR uni1817 +ENCODING 6167 +BBX 9 12 4 0 +BITMAP +7E00 +8100 +3100 +4880 +4880 +8880 +8880 +8880 +8880 +4900 +4900 +0600 +ENDCHAR +STARTCHAR uni1818 +ENCODING 6168 +BBX 7 11 5 0 +BITMAP +08 +08 +10 +10 +20 +20 +42 +42 +84 +84 +F8 +ENDCHAR +STARTCHAR uni1819 +ENCODING 6169 +BBX 7 12 4 0 +BITMAP +3C +42 +42 +82 +84 +84 +86 +80 +80 +42 +42 +3C +ENDCHAR +STARTCHAR uni1820 +ENCODING 6176 +BBX 11 10 1 1 +BITMAP +6040 +A020 +2020 +2020 +3C40 +3C40 +2440 +2480 +2280 +0180 +ENDCHAR +STARTCHAR uni1821 +ENCODING 6177 +BBX 9 12 1 -1 +BITMAP +6000 +A000 +2000 +2000 +3F00 +3F80 +2080 +2080 +2080 +0080 +0300 +0200 +ENDCHAR +STARTCHAR uni1822 +ENCODING 6178 +BBX 10 11 1 0 +BITMAP +6380 +A440 +2440 +2440 +3C00 +3C00 +2400 +2400 +2200 +0100 +0080 +ENDCHAR +STARTCHAR uni1823 +ENCODING 6179 +BBX 10 10 1 1 +BITMAP +6000 +A000 +2000 +2000 +3FC0 +3FC0 +2240 +2240 +2240 +0180 +ENDCHAR +STARTCHAR uni1824 +ENCODING 6180 +BBX 12 10 1 1 +BITMAP +6000 +A000 +2000 +2000 +3FF0 +3FF0 +2240 +2240 +2240 +0180 +ENDCHAR +STARTCHAR uni1825 +ENCODING 6181 +BBX 14 10 1 1 +BITMAP +6000 +A000 +2000 +2000 +3FF8 +3FFC +224C +2244 +2244 +0180 +ENDCHAR +STARTCHAR uni1826 +ENCODING 6182 +BBX 14 10 1 1 +BITMAP +6000 +A000 +2000 +2000 +3FFC +3FFC +2250 +2248 +2244 +0180 +ENDCHAR +STARTCHAR uni1827 +ENCODING 6183 +BBX 14 10 1 1 +BITMAP +6000 +A000 +2000 +2000 +3FF8 +3FFC +220C +2204 +2244 +0180 +ENDCHAR +STARTCHAR uni1828 +ENCODING 6184 +BBX 5 12 1 -1 +BITMAP +60 +A0 +20 +20 +38 +38 +20 +20 +20 +00 +20 +20 +ENDCHAR +STARTCHAR uni1829 +ENCODING 6185 +BBX 10 11 3 1 +BITMAP +0380 +0440 +0840 +0840 +0840 +F800 +F800 +C800 +8800 +8400 +0200 +ENDCHAR +STARTCHAR uni182A +ENCODING 6186 +BBX 7 10 3 1 +BITMAP +7C +82 +82 +82 +F2 +F2 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni182B +ENCODING 6187 +BBX 7 11 3 0 +BITMAP +7C +82 +82 +82 +F2 +F2 +12 +10 +10 +F0 +E0 +ENDCHAR +STARTCHAR uni182C +ENCODING 6188 +BBX 9 10 3 1 +BITMAP +1C00 +2200 +2200 +2200 +FF80 +FF80 +2200 +1200 +3200 +0200 +ENDCHAR +STARTCHAR uni182D +ENCODING 6189 +BBX 9 13 3 -2 +BITMAP +1C00 +2200 +2200 +2200 +FF80 +FF80 +2200 +1200 +3200 +0200 +3000 +0000 +3000 +ENDCHAR +STARTCHAR uni182E +ENCODING 6190 +BBX 5 11 1 2 +BITMAP +08 +08 +30 +20 +60 +A0 +38 +38 +20 +20 +20 +ENDCHAR +STARTCHAR uni182F +ENCODING 6191 +BBX 5 11 1 2 +BITMAP +80 +80 +60 +20 +60 +A0 +38 +38 +20 +20 +20 +ENDCHAR +STARTCHAR uni1830 +ENCODING 6192 +BBX 7 9 1 2 +BITMAP +18 +28 +28 +A8 +4E +0E +08 +08 +08 +ENDCHAR +STARTCHAR uni1831 +ENCODING 6193 +BBX 7 11 1 2 +BITMAP +36 +36 +00 +18 +28 +28 +AE +4E +08 +08 +08 +ENDCHAR +STARTCHAR uni1832 +ENCODING 6194 +BBX 9 8 0 2 +BITMAP +1000 +2800 +4400 +8780 +4780 +2E00 +1400 +0400 +ENDCHAR +STARTCHAR uni1833 +ENCODING 6195 +BBX 7 10 3 0 +BITMAP +80 +80 +80 +FE +FE +80 +90 +A8 +48 +30 +ENDCHAR +STARTCHAR uni1834 +ENCODING 6196 +BBX 9 7 3 0 +BITMAP +FF80 +FF80 +0200 +0200 +1E00 +3E00 +2000 +ENDCHAR +STARTCHAR uni1835 +ENCODING 6197 +BBX 5 8 3 -1 +BITMAP +F8 +F8 +80 +80 +40 +40 +20 +20 +ENDCHAR +STARTCHAR uni1836 +ENCODING 6198 +BBX 5 7 3 0 +BITMAP +F8 +F8 +80 +80 +40 +20 +40 +ENDCHAR +STARTCHAR uni1837 +ENCODING 6199 +BBX 6 8 2 -1 +BITMAP +7C +7C +40 +40 +20 +20 +50 +90 +ENDCHAR +STARTCHAR uni1838 +ENCODING 6200 +BBX 5 6 3 1 +BITMAP +F8 +F8 +80 +80 +90 +60 +ENDCHAR +STARTCHAR uni1839 +ENCODING 6201 +BBX 7 12 3 -1 +BITMAP +7C +82 +82 +82 +F2 +F2 +90 +90 +90 +60 +80 +80 +ENDCHAR +STARTCHAR uni183A +ENCODING 6202 +BBX 6 11 3 0 +BITMAP +78 +84 +84 +84 +84 +84 +80 +80 +C0 +A0 +A0 +ENDCHAR +STARTCHAR uni183B +ENCODING 6203 +BBX 6 11 3 0 +BITMAP +78 +84 +84 +84 +E4 +E4 +80 +80 +C0 +A0 +A0 +ENDCHAR +STARTCHAR uni183C +ENCODING 6204 +BBX 9 7 3 0 +BITMAP +FF80 +FF80 +0800 +0800 +0E00 +3900 +7600 +ENDCHAR +STARTCHAR uni183D +ENCODING 6205 +BBX 9 7 3 0 +BITMAP +FF80 +FF80 +0800 +0800 +0800 +3900 +7600 +ENDCHAR +STARTCHAR uni183E +ENCODING 6206 +BBX 12 11 1 0 +BITMAP +6000 +A000 +2000 +2000 +3CF0 +3CF0 +2480 +2480 +2440 +0280 +0100 +ENDCHAR +STARTCHAR uni183F +ENCODING 6207 +BBX 7 12 1 0 +BITMAP +30 +48 +88 +98 +A8 +8E +8E +88 +88 +A0 +90 +60 +ENDCHAR +STARTCHAR uni1840 +ENCODING 6208 +BBX 12 12 1 0 +BITMAP +8000 +6000 +2000 +6000 +A000 +3CF0 +3CF0 +2480 +2480 +2440 +0280 +0100 +ENDCHAR +STARTCHAR uni1841 +ENCODING 6209 +BBX 7 7 3 0 +BITMAP +9E +9E +90 +90 +88 +50 +20 +ENDCHAR +STARTCHAR uni1842 +ENCODING 6210 +BBX 11 6 3 1 +BITMAP +FFE0 +FFE0 +9480 +9480 +9480 +6300 +ENDCHAR +STARTCHAR uni1843 +ENCODING 6211 +BBX 3 5 3 5 +BITMAP +80 +80 +80 +E0 +E0 +ENDCHAR +STARTCHAR uni1844 +ENCODING 6212 +BBX 9 10 1 1 +BITMAP +6000 +A000 +2000 +2000 +3F80 +3F80 +2400 +2400 +2400 +2300 +ENDCHAR +STARTCHAR uni1845 +ENCODING 6213 +BBX 10 10 1 2 +BITMAP +0600 +6500 +A480 +2480 +2440 +3C40 +3C40 +2440 +2480 +2480 +ENDCHAR +STARTCHAR uni1846 +ENCODING 6214 +BBX 9 10 1 1 +BITMAP +6000 +A000 +2000 +2000 +3F80 +3F80 +2480 +2480 +2480 +2380 +ENDCHAR +STARTCHAR uni1847 +ENCODING 6215 +BBX 12 12 1 -1 +BITMAP +63C0 +A420 +2410 +2410 +3F90 +3F90 +2480 +2480 +2480 +2300 +0100 +00C0 +ENDCHAR +STARTCHAR uni1848 +ENCODING 6216 +BBX 9 10 1 1 +BITMAP +6000 +A200 +2100 +2100 +3F80 +3F80 +2480 +2480 +2480 +2380 +ENDCHAR +STARTCHAR uni1849 +ENCODING 6217 +BBX 12 10 1 1 +BITMAP +63C0 +A420 +2410 +2410 +3F90 +3F90 +2480 +2480 +2480 +2300 +ENDCHAR +STARTCHAR uni184A +ENCODING 6218 +BBX 11 8 3 -1 +BITMAP +FFC0 +FFE0 +D020 +9020 +9020 +0C40 +0180 +0100 +ENDCHAR +STARTCHAR uni184B +ENCODING 6219 +BBX 8 8 3 -1 +BITMAP +FE +FF +91 +91 +91 +62 +0C +08 +ENDCHAR +STARTCHAR uni184C +ENCODING 6220 +BBX 10 10 1 1 +BITMAP +2300 +2480 +2840 +2840 +F840 +F840 +2800 +2800 +2400 +3C00 +ENDCHAR +STARTCHAR uni184D +ENCODING 6221 +BBX 9 12 1 -1 +BITMAP +6000 +A000 +2000 +2000 +3F80 +3F80 +3600 +2400 +2400 +0000 +2400 +2400 +ENDCHAR +STARTCHAR uni184E +ENCODING 6222 +BBX 9 12 1 -1 +BITMAP +6000 +A000 +2000 +2000 +3F80 +3F80 +3600 +2400 +0000 +1800 +2400 +1800 +ENDCHAR +STARTCHAR uni184F +ENCODING 6223 +BBX 7 10 2 2 +BITMAP +06 +22 +52 +4C +44 +C4 +C4 +24 +14 +0C +ENDCHAR +STARTCHAR uni1850 +ENCODING 6224 +BBX 6 8 3 2 +BITMAP +60 +90 +90 +9C +9C +90 +50 +30 +ENDCHAR +STARTCHAR uni1851 +ENCODING 6225 +BBX 5 6 3 1 +BITMAP +F8 +F8 +A0 +90 +50 +60 +ENDCHAR +STARTCHAR uni1852 +ENCODING 6226 +BBX 7 8 3 -1 +BITMAP +FE +FE +08 +08 +08 +70 +90 +60 +ENDCHAR +STARTCHAR uni1853 +ENCODING 6227 +BBX 7 8 3 -1 +BITMAP +FE +FE +08 +08 +08 +30 +40 +38 +ENDCHAR +STARTCHAR uni1854 +ENCODING 6228 +BBX 7 7 3 0 +BITMAP +FE +FE +08 +08 +08 +30 +40 +ENDCHAR +STARTCHAR uni1855 +ENCODING 6229 +BBX 4 6 3 1 +BITMAP +F0 +F0 +80 +80 +40 +40 +ENDCHAR +STARTCHAR uni1856 +ENCODING 6230 +BBX 6 7 3 0 +BITMAP +FC +FC +80 +80 +70 +48 +30 +ENDCHAR +STARTCHAR uni1857 +ENCODING 6231 +BBX 6 12 4 1 +BITMAP +70 +88 +84 +84 +84 +80 +80 +80 +80 +40 +20 +60 +ENDCHAR +STARTCHAR uni1858 +ENCODING 6232 +BBX 7 11 3 2 +BITMAP +38 +44 +42 +42 +42 +40 +C0 +C0 +40 +20 +50 +ENDCHAR +STARTCHAR uni1859 +ENCODING 6233 +BBX 11 7 3 0 +BITMAP +F3C0 +F3E0 +D260 +9220 +9120 +0A00 +0400 +ENDCHAR +STARTCHAR uni185A +ENCODING 6234 +BBX 9 13 3 -1 +BITMAP +3800 +4400 +8200 +8200 +8200 +F380 +F380 +9200 +9200 +9200 +6400 +0800 +1E00 +ENDCHAR +STARTCHAR uni185B +ENCODING 6235 +BBX 6 11 3 0 +BITMAP +10 +F0 +90 +90 +FC +FC +80 +80 +80 +90 +60 +ENDCHAR +STARTCHAR uni185C +ENCODING 6236 +BBX 7 8 3 -1 +BITMAP +FE +FE +08 +78 +78 +48 +18 +20 +ENDCHAR +STARTCHAR uni185D +ENCODING 6237 +BBX 7 13 3 0 +BITMAP +04 +02 +84 +88 +08 +10 +90 +90 +90 +90 +50 +50 +30 +ENDCHAR +STARTCHAR uni185E +ENCODING 6238 +BBX 7 7 3 0 +BITMAP +FE +FE +D0 +90 +88 +08 +04 +ENDCHAR +STARTCHAR uni185F +ENCODING 6239 +BBX 7 8 2 2 +BITMAP +88 +50 +20 +FE +FE +60 +40 +40 +ENDCHAR +STARTCHAR uni1860 +ENCODING 6240 +BBX 9 11 1 1 +BITMAP +0100 +6200 +A200 +2000 +2000 +3F80 +3F80 +2480 +2480 +2480 +2300 +ENDCHAR +STARTCHAR uni1861 +ENCODING 6241 +BBX 9 6 3 1 +BITMAP +FF80 +FF80 +9400 +9200 +9100 +6000 +ENDCHAR +STARTCHAR uni1862 +ENCODING 6242 +BBX 9 8 3 -1 +BITMAP +FF80 +FF80 +D880 +9080 +9080 +0100 +0200 +0200 +ENDCHAR +STARTCHAR uni1863 +ENCODING 6243 +BBX 7 14 3 -1 +BITMAP +08 +04 +08 +08 +10 +10 +90 +90 +90 +92 +54 +30 +02 +04 +ENDCHAR +STARTCHAR uni1864 +ENCODING 6244 +BBX 10 11 2 1 +BITMAP +0C40 +1280 +1200 +2100 +2100 +E1C0 +E1C0 +2100 +2100 +1200 +7200 +ENDCHAR +STARTCHAR uni1865 +ENCODING 6245 +BBX 11 12 2 1 +BITMAP +0180 +0E40 +1380 +1200 +2100 +2100 +E1E0 +E1E0 +2100 +2100 +1200 +7200 +ENDCHAR +STARTCHAR uni1866 +ENCODING 6246 +BBX 7 10 3 1 +BITMAP +6C +92 +92 +82 +F2 +F2 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni1867 +ENCODING 6247 +BBX 7 10 3 1 +BITMAP +18 +28 +A8 +48 +0E +0E +08 +88 +48 +28 +ENDCHAR +STARTCHAR uni1868 +ENCODING 6248 +BBX 9 10 4 2 +BITMAP +1C00 +2200 +4200 +2200 +1200 +FF80 +FF80 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni1869 +ENCODING 6249 +BBX 9 9 0 2 +BITMAP +0100 +1200 +2800 +4400 +8780 +4780 +2E00 +1400 +0400 +ENDCHAR +STARTCHAR uni186A +ENCODING 6250 +BBX 6 8 2 -1 +BITMAP +FC +FC +40 +20 +10 +10 +10 +60 +ENDCHAR +STARTCHAR uni186B +ENCODING 6251 +BBX 10 12 3 0 +BITMAP +6000 +9000 +1000 +0800 +0800 +0FC0 +0FC0 +0800 +0800 +0400 +0480 +0300 +ENDCHAR +STARTCHAR uni186C +ENCODING 6252 +BBX 6 12 3 1 +BITMAP +08 +10 +00 +70 +88 +84 +84 +84 +80 +C0 +A0 +A0 +ENDCHAR +STARTCHAR uni186D +ENCODING 6253 +BBX 6 12 3 1 +BITMAP +30 +48 +30 +00 +70 +88 +84 +84 +80 +C0 +A0 +A0 +ENDCHAR +STARTCHAR uni186E +ENCODING 6254 +BBX 8 11 1 2 +BITMAP +08 +08 +3E +08 +18 +28 +2F +AF +48 +08 +08 +ENDCHAR +STARTCHAR uni186F +ENCODING 6255 +BBX 8 10 1 2 +BITMAP +3E +08 +08 +18 +28 +2F +AF +48 +08 +08 +ENDCHAR +STARTCHAR uni1870 +ENCODING 6256 +BBX 3 10 3 1 +BITMAP +80 +80 +80 +80 +E0 +E0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1871 +ENCODING 6257 +BBX 7 11 3 0 +BITMAP +30 +48 +30 +00 +FE +FE +08 +08 +08 +30 +40 +ENDCHAR +STARTCHAR uni1872 +ENCODING 6258 +BBX 6 12 2 -1 +BITMAP +30 +48 +30 +00 +FC +FC +40 +20 +10 +10 +10 +60 +ENDCHAR +STARTCHAR uni1873 +ENCODING 6259 +BBX 8 8 3 -1 +BITMAP +FF +FF +88 +88 +44 +44 +22 +22 +ENDCHAR +STARTCHAR uni1874 +ENCODING 6260 +BBX 11 15 3 -2 +BITMAP +0040 +0020 +0040 +0080 +0080 +0100 +F900 +F900 +C900 +8900 +8500 +0500 +0300 +0840 +1080 +ENDCHAR +STARTCHAR uni1875 +ENCODING 6261 +BBX 6 7 3 0 +BITMAP +F8 +FC +8C +84 +44 +A0 +A0 +ENDCHAR +STARTCHAR uni1876 +ENCODING 6262 +BBX 11 12 2 0 +BITMAP +3000 +4800 +0800 +0400 +0400 +FFE0 +FFE0 +0400 +0400 +0200 +0240 +0180 +ENDCHAR +STARTCHAR uni1877 +ENCODING 6263 +BBX 6 10 3 1 +BITMAP +30 +48 +30 +00 +FC +FC +80 +80 +40 +40 +ENDCHAR +STARTCHAR uni1878 +ENCODING 6264 +BBX 7 11 3 0 +BITMAP +6C +6C +00 +00 +FE +FE +08 +08 +08 +30 +40 +ENDCHAR +STARTCHAR uni1880 +ENCODING 6272 +BBX 7 10 3 1 +BITMAP +10 +08 +64 +96 +96 +96 +96 +64 +08 +10 +ENDCHAR +STARTCHAR uni1881 +ENCODING 6273 +BBX 8 4 3 4 +BITMAP +66 +99 +99 +66 +ENDCHAR +STARTCHAR uni1882 +ENCODING 6274 +BBX 7 8 3 2 +BITMAP +82 +C6 +AA +92 +92 +AA +C6 +82 +ENDCHAR +STARTCHAR uni1883 +ENCODING 6275 +BBX 5 11 3 0 +BITMAP +70 +88 +08 +08 +10 +E0 +10 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni1884 +ENCODING 6276 +BBX 5 11 3 0 +BITMAP +70 +88 +80 +80 +40 +38 +40 +80 +80 +88 +70 +ENDCHAR +STARTCHAR uni1885 +ENCODING 6277 +BBX 13 6 2 3 +BITMAP +3188 +4A50 +8420 +8420 +94A0 +6320 +ENDCHAR +STARTCHAR uni1886 +ENCODING 6278 +BBX 11 15 3 -2 +BITMAP +0020 +7740 +8880 +AA80 +4480 +0020 +7740 +8880 +AA80 +4480 +0020 +7740 +8880 +AA80 +4480 +ENDCHAR +STARTCHAR uni1887 +ENCODING 6279 +BBX 13 10 1 1 +BITMAP +6000 +A000 +2000 +2000 +3FF0 +3FF8 +2008 +2010 +2020 +2000 +ENDCHAR +STARTCHAR uni1888 +ENCODING 6280 +BBX 10 11 1 1 +BITMAP +0180 +6240 +A440 +2800 +2800 +3800 +3800 +2800 +2800 +2480 +2300 +ENDCHAR +STARTCHAR uni1889 +ENCODING 6281 +BBX 9 12 3 0 +BITMAP +3000 +4800 +4400 +8400 +8400 +8780 +8780 +8000 +8000 +4000 +4000 +2000 +ENDCHAR +STARTCHAR uni188A +ENCODING 6282 +BBX 10 12 1 -1 +BITMAP +6000 +A300 +2480 +2440 +3C40 +3C00 +2400 +2400 +2400 +0200 +2000 +4000 +ENDCHAR +STARTCHAR uni188B +ENCODING 6283 +BBX 9 8 3 -1 +BITMAP +FF80 +FF80 +0800 +0800 +3E00 +4100 +4100 +0600 +ENDCHAR +STARTCHAR uni188C +ENCODING 6284 +BBX 6 7 2 0 +BITMAP +FC +FC +20 +10 +48 +28 +18 +ENDCHAR +STARTCHAR uni188D +ENCODING 6285 +BBX 11 6 3 1 +BITMAP +FFE0 +FFE0 +9880 +9500 +9200 +6000 +ENDCHAR +STARTCHAR uni188E +ENCODING 6286 +BBX 9 7 3 0 +BITMAP +FF80 +FF80 +8000 +8C00 +4A00 +4A00 +3000 +ENDCHAR +STARTCHAR uni188F +ENCODING 6287 +BBX 9 7 3 0 +BITMAP +FF80 +FF80 +8000 +8000 +4000 +7000 +3000 +ENDCHAR +STARTCHAR uni1890 +ENCODING 6288 +BBX 7 7 3 0 +BITMAP +FE +FE +A0 +90 +48 +48 +30 +ENDCHAR +STARTCHAR uni1891 +ENCODING 6289 +BBX 6 7 3 0 +BITMAP +FC +FC +80 +90 +48 +50 +20 +ENDCHAR +STARTCHAR uni1892 +ENCODING 6290 +BBX 7 11 3 1 +BITMAP +30 +48 +44 +82 +82 +FA +F8 +08 +08 +48 +30 +ENDCHAR +STARTCHAR uni1893 +ENCODING 6291 +BBX 7 13 3 -1 +BITMAP +30 +48 +44 +82 +82 +FA +F8 +08 +08 +70 +80 +90 +60 +ENDCHAR +STARTCHAR uni1894 +ENCODING 6292 +BBX 9 14 3 -1 +BITMAP +3800 +4400 +4200 +4200 +4200 +8200 +8380 +8380 +8200 +8200 +4000 +0000 +1400 +1400 +ENDCHAR +STARTCHAR uni1895 +ENCODING 6293 +BBX 8 13 4 0 +BITMAP +70 +88 +84 +84 +84 +84 +87 +87 +84 +84 +80 +88 +70 +ENDCHAR +STARTCHAR uni1896 +ENCODING 6294 +BBX 5 7 5 0 +BITMAP +F8 +F8 +08 +08 +70 +08 +30 +ENDCHAR +STARTCHAR uni1897 +ENCODING 6295 +BBX 6 10 4 1 +BITMAP +70 +88 +84 +84 +84 +80 +80 +88 +88 +70 +ENDCHAR +STARTCHAR uni1898 +ENCODING 6296 +BBX 7 6 3 1 +BITMAP +FE +FE +A0 +90 +5C +60 +ENDCHAR +STARTCHAR uni1899 +ENCODING 6297 +BBX 8 10 3 0 +BITMAP +78 +84 +84 +9F +BF +A4 +A4 +98 +40 +3C +ENDCHAR +STARTCHAR uni189A +ENCODING 6298 +BBX 14 12 1 1 +BITMAP +0090 +00A8 +0C90 +1200 +1100 +1100 +F1FC +F1FC +1100 +1100 +1000 +7000 +ENDCHAR +STARTCHAR uni189B +ENCODING 6299 +BBX 9 10 1 1 +BITMAP +6000 +A000 +2000 +2000 +3F80 +3F80 +2000 +2600 +2900 +2600 +ENDCHAR +STARTCHAR uni189C +ENCODING 6300 +BBX 8 11 1 2 +BITMAP +1C +22 +1C +3E +18 +18 +2F +2F +A8 +48 +08 +ENDCHAR +STARTCHAR uni189D +ENCODING 6301 +BBX 12 9 1 2 +BITMAP +00C0 +3D20 +18C0 +1800 +2FF0 +2FF0 +A800 +4800 +0800 +ENDCHAR +STARTCHAR uni189E +ENCODING 6302 +BBX 10 12 3 0 +BITMAP +8000 +8C00 +5200 +4C00 +2000 +3FC0 +3FC0 +2000 +1000 +1000 +0800 +0800 +ENDCHAR +STARTCHAR uni189F +ENCODING 6303 +BBX 10 11 3 0 +BITMAP +2200 +5500 +2200 +0000 +FFC0 +FFC0 +8000 +4000 +4000 +2000 +2000 +ENDCHAR +STARTCHAR uni18A0 +ENCODING 6304 +BBX 6 11 3 0 +BITMAP +08 +10 +10 +00 +FC +FC +A0 +90 +48 +50 +20 +ENDCHAR +STARTCHAR uni18A1 +ENCODING 6305 +BBX 12 10 0 2 +BITMAP +0240 +02A0 +1240 +2800 +4400 +87F0 +47F0 +2E00 +1400 +0400 +ENDCHAR +STARTCHAR uni18A2 +ENCODING 6306 +BBX 7 12 3 -1 +BITMAP +18 +28 +A8 +48 +0E +0E +08 +08 +00 +00 +28 +28 +ENDCHAR +STARTCHAR uni18A3 +ENCODING 6307 +BBX 10 12 3 0 +BITMAP +8000 +8000 +4000 +4000 +2000 +3FC0 +3FC0 +2000 +1000 +1000 +0800 +0800 +ENDCHAR +STARTCHAR uni18A4 +ENCODING 6308 +BBX 7 12 3 1 +BITMAP +18 +24 +18 +00 +18 +28 +AE +4E +08 +88 +48 +28 +ENDCHAR +STARTCHAR uni18A5 +ENCODING 6309 +BBX 7 12 3 1 +BITMAP +18 +24 +18 +00 +18 +28 +AE +4E +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni18A6 +ENCODING 6310 +BBX 5 5 3 2 +BITMAP +F8 +F8 +88 +50 +20 +ENDCHAR +STARTCHAR uni18A7 +ENCODING 6311 +BBX 6 8 3 -1 +BITMAP +BC +BC +90 +50 +48 +28 +28 +70 +ENDCHAR +STARTCHAR uni18A8 +ENCODING 6312 +BBX 11 11 3 1 +BITMAP +0180 +7240 +8980 +8400 +8400 +F7E0 +F7E0 +9000 +9000 +9000 +6000 +ENDCHAR +STARTCHAR uni18A9 +ENCODING 6313 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -15 -2 +BITMAP +C0 +20 +10 +ENDCHAR +STARTCHAR uni18AA +ENCODING 6314 +BBX 9 12 1 1 +BITMAP +8000 +8000 +6600 +2900 +6600 +A000 +3F80 +3F80 +2000 +2000 +2000 +2000 +ENDCHAR +STARTCHAR uni18B0 +ENCODING 6320 +BBX 7 15 3 -1 +BITMAP +18 +24 +24 +D8 +A0 +90 +88 +84 +82 +82 +84 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni18B1 +ENCODING 6321 +BBX 7 15 3 -1 +BITMAP +30 +48 +48 +36 +0A +12 +22 +42 +82 +82 +42 +22 +12 +0A +06 +ENDCHAR +STARTCHAR uni18B2 +ENCODING 6322 +BBX 8 15 2 -1 +BITMAP +63 +93 +90 +63 +05 +09 +11 +21 +41 +41 +21 +11 +09 +05 +03 +ENDCHAR +STARTCHAR uni18B3 +ENCODING 6323 +BBX 11 15 1 -1 +BITMAP +0300 +0480 +0480 +0360 +00A0 +0120 +0220 +0420 +C820 +C820 +0420 +0220 +0120 +00A0 +0060 +ENDCHAR +STARTCHAR uni18B4 +ENCODING 6324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -1 +BITMAP +30 +48 +48 +B0 +40 +20 +10 +08 +04 +04 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni18B5 +ENCODING 6325 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -1 +BITMAP +30 +48 +48 +34 +08 +10 +20 +40 +80 +80 +40 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni18B6 +ENCODING 6326 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -1 +BITMAP +30 +48 +48 +B0 +40 +20 +10 +08 +C4 +C4 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni18B7 +ENCODING 6327 +BBX 9 14 3 0 +BITMAP +1200 +1200 +0C00 +0000 +3F80 +4000 +8000 +8000 +8000 +8000 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni18B8 +ENCODING 6328 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 0 +BITMAP +60 +90 +90 +60 +00 +80 +80 +80 +80 +F0 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni18B9 +ENCODING 6329 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +0C +12 +12 +0C +00 +10 +10 +10 +D0 +DE +11 +11 +11 +0E +ENDCHAR +STARTCHAR uni18BA +ENCODING 6330 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 0 +BITMAP +60 +90 +90 +60 +00 +80 +80 +80 +80 +80 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni18BB +ENCODING 6331 +BBX 9 10 3 0 +BITMAP +0600 +0900 +0900 +0600 +0000 +0700 +0880 +0880 +0880 +FF00 +ENDCHAR +STARTCHAR uni18BC +ENCODING 6332 +BBX 9 10 3 0 +BITMAP +3000 +4800 +4800 +3000 +0000 +7000 +8800 +8800 +8800 +7F80 +ENDCHAR +STARTCHAR uni18BD +ENCODING 6333 +BBX 9 10 3 0 +BITMAP +3000 +4800 +4800 +3000 +0000 +7000 +8000 +8000 +8000 +7F80 +ENDCHAR +STARTCHAR uni18BE +ENCODING 6334 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 0 +BITMAP +30 +48 +48 +30 +00 +08 +08 +08 +38 +40 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni18BF +ENCODING 6335 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 0 +BITMAP +60 +90 +90 +60 +00 +80 +80 +80 +E0 +10 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni18C0 +ENCODING 6336 +BBX 9 11 3 0 +BITMAP +0C00 +1200 +1200 +0C00 +0000 +0000 +6300 +9080 +8880 +8480 +6300 +ENDCHAR +STARTCHAR uni18C1 +ENCODING 6337 +BBX 9 11 3 0 +BITMAP +0C00 +1200 +1200 +0C00 +0000 +0000 +6300 +8480 +8880 +9080 +6300 +ENDCHAR +STARTCHAR uni18C2 +ENCODING 6338 +BBX 12 11 2 0 +BITMAP +0180 +0240 +0240 +0180 +0000 +0000 +0C60 +D210 +D110 +1090 +0C60 +ENDCHAR +STARTCHAR uni18C3 +ENCODING 6339 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 0 0 +BITMAP +18 +24 +24 +18 +00 +08 +08 +08 +08 +F8 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni18C4 +ENCODING 6340 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 0 0 +BITMAP +60 +90 +90 +60 +00 +40 +40 +40 +40 +7C +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni18C5 +ENCODING 6341 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +48 +30 +00 +7C +80 +80 +80 +80 +7C +04 +04 +04 +ENDCHAR +STARTCHAR uni18C6 +ENCODING 6342 +BBX 12 5 2 0 +BITMAP +0FF0 +D100 +D100 +1100 +0E00 +ENDCHAR +STARTCHAR uni18C7 +ENCODING 6343 +BBX 12 5 2 0 +BITMAP +7F80 +8830 +8830 +8800 +7000 +ENDCHAR +STARTCHAR uni18C8 +ENCODING 6344 +BBX 12 8 2 0 +BITMAP +0600 +0600 +0000 +0FF0 +D100 +D100 +1100 +0E00 +ENDCHAR +STARTCHAR uni18C9 +ENCODING 6345 +BBX 12 8 2 0 +BITMAP +3000 +3000 +0000 +7F80 +8830 +8830 +8800 +7000 +ENDCHAR +STARTCHAR uni18CA +ENCODING 6346 +BBX 12 5 2 0 +BITMAP +00E0 +C110 +C110 +0110 +1FE0 +ENDCHAR +STARTCHAR uni18CB +ENCODING 6347 +BBX 12 5 2 0 +BITMAP +0700 +08B0 +08B0 +0880 +FF00 +ENDCHAR +STARTCHAR uni18CC +ENCODING 6348 +BBX 12 8 2 0 +BITMAP +00C0 +00C0 +0000 +00E0 +C110 +C110 +0110 +1FE0 +ENDCHAR +STARTCHAR uni18CD +ENCODING 6349 +BBX 12 8 2 0 +BITMAP +0600 +0600 +0000 +0700 +08B0 +08B0 +0880 +FF00 +ENDCHAR +STARTCHAR uni18CE +ENCODING 6350 +BBX 13 6 1 0 +BITMAP +3C08 +0408 +C408 +C408 +0210 +01E0 +ENDCHAR +STARTCHAR uni18CF +ENCODING 6351 +BBX 14 6 1 0 +BITMAP +0780 +0840 +D020 +D020 +1020 +103C +ENDCHAR +STARTCHAR uni18D0 +ENCODING 6352 +BBX 14 9 1 0 +BITMAP +0300 +0300 +0000 +0780 +0840 +D020 +D020 +1020 +103C +ENDCHAR +STARTCHAR uni18D1 +ENCODING 6353 +BBX 9 10 3 0 +BITMAP +1E00 +0100 +0080 +0080 +C080 +C100 +1E00 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uni18D2 +ENCODING 6354 +BBX 9 13 3 0 +BITMAP +0C00 +0C00 +0000 +1E00 +0100 +0080 +0080 +C080 +C100 +1E00 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uni18D3 +ENCODING 6355 +BBX 9 10 3 0 +BITMAP +0780 +0800 +1000 +1000 +D000 +C800 +0780 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni18D4 +ENCODING 6356 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 5 +BITMAP +20 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni18D5 +ENCODING 6357 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +70 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni18D6 +ENCODING 6358 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 1 4 +BITMAP +60 +90 +90 +E0 +80 +80 +ENDCHAR +STARTCHAR uni18D7 +ENCODING 6359 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 1 4 +BITMAP +60 +90 +90 +80 +80 +80 +ENDCHAR +STARTCHAR uni18D8 +ENCODING 6360 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 1 4 +BITMAP +F0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni18D9 +ENCODING 6361 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 6 +BITMAP +7C +90 +90 +60 +ENDCHAR +STARTCHAR uni18DA +ENCODING 6362 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 1 3 +BITMAP +10 +10 +10 +20 +C0 +80 +80 +ENDCHAR +STARTCHAR uni18DB +ENCODING 6363 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +10 +28 +20 +A0 +40 +ENDCHAR +STARTCHAR uni18DC +ENCODING 6364 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 5 +BITMAP +08 +C8 +D4 +14 +22 +3E +ENDCHAR +STARTCHAR uni18DD +ENCODING 6365 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 5 +BITMAP +20 +26 +56 +50 +88 +F8 +ENDCHAR +STARTCHAR uni18DE +ENCODING 6366 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 10 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni18DF +ENCODING 6367 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni18E0 +ENCODING 6368 +BBX 14 6 1 0 +BITMAP +F02C +102C +1020 +1020 +0840 +0780 +ENDCHAR +STARTCHAR uni18E1 +ENCODING 6369 +BBX 6 13 5 0 +BITMAP +C0 +C0 +00 +80 +80 +80 +F0 +08 +04 +04 +04 +08 +F0 +ENDCHAR +STARTCHAR uni18E2 +ENCODING 6370 +BBX 6 13 5 0 +BITMAP +0C +0C +00 +04 +04 +04 +3C +40 +80 +80 +80 +40 +3C +ENDCHAR +STARTCHAR uni18E3 +ENCODING 6371 +BBX 11 9 3 0 +BITMAP +7100 +8900 +8960 +8960 +9100 +8100 +8100 +4200 +3C00 +ENDCHAR +STARTCHAR uni18E4 +ENCODING 6372 +BBX 12 8 2 0 +BITMAP +3F00 +4080 +80B0 +88B0 +8700 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni18E5 +ENCODING 6373 +BBX 12 9 2 0 +BITMAP +8880 +8880 +88B0 +88B0 +8880 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni18E6 +ENCODING 6374 +BBX 9 12 3 0 +BITMAP +3000 +3000 +0000 +FE00 +0100 +0080 +0080 +F880 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni18E7 +ENCODING 6375 +BBX 9 12 3 0 +BITMAP +0600 +0600 +0000 +3F80 +4000 +8000 +8000 +8F80 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni18E8 +ENCODING 6376 +BBX 9 9 3 0 +BITMAP +7000 +8800 +8800 +8800 +7980 +2980 +2800 +4800 +4800 +ENDCHAR +STARTCHAR uni18E9 +ENCODING 6377 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 3 0 +BITMAP +30 +30 +00 +48 +48 +28 +28 +78 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni18EA +ENCODING 6378 +BBX 10 9 3 0 +BITMAP +7800 +8400 +9400 +9400 +64C0 +04C0 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni18EB +ENCODING 6379 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +0C +0C +00 +04 +04 +04 +04 +64 +94 +94 +84 +78 +ENDCHAR +STARTCHAR uni18EC +ENCODING 6380 +BBX 9 12 3 0 +BITMAP +0180 +0180 +0000 +0180 +0280 +0280 +0280 +0480 +8480 +8880 +8880 +7080 +ENDCHAR +STARTCHAR uni18ED +ENCODING 6381 +BBX 14 8 1 0 +BITMAP +8420 +8420 +842C +842C +8420 +8420 +8420 +7BC0 +ENDCHAR +STARTCHAR uni18EE +ENCODING 6382 +BBX 8 12 4 0 +BITMAP +30 +30 +00 +FE +01 +01 +01 +FE +01 +01 +01 +FE +ENDCHAR +STARTCHAR uni18EF +ENCODING 6383 +BBX 8 12 4 0 +BITMAP +0C +0C +00 +7F +80 +80 +80 +7F +80 +80 +80 +7F +ENDCHAR +STARTCHAR uni18F0 +ENCODING 6384 +BBX 12 9 2 0 +BITMAP +7F00 +8000 +8000 +8030 +7F30 +8000 +8000 +8000 +7F00 +ENDCHAR +STARTCHAR uni18F1 +ENCODING 6385 +BBX 9 13 3 0 +BITMAP +1800 +1800 +0000 +FF80 +0C00 +0200 +0100 +7100 +8880 +8080 +8080 +8100 +7E00 +ENDCHAR +STARTCHAR uni18F2 +ENCODING 6386 +BBX 13 9 1 0 +BITMAP +7840 +8440 +8440 +8440 +98D8 +80D8 +8140 +4640 +3840 +ENDCHAR +STARTCHAR uni18F3 +ENCODING 6387 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 2 5 +BITMAP +C0 +40 +40 +40 +40 +E0 +ENDCHAR +STARTCHAR uni18F4 +ENCODING 6388 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +B0 +C8 +80 +80 +80 +ENDCHAR +STARTCHAR uni18F5 +ENCODING 6389 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 3 +BITMAP +78 +80 +70 +08 +F0 +ENDCHAR +STARTCHAR uni1900 +ENCODING 6400 +BBX 9 10 0 1 +BITMAP +FF80 +1080 +2080 +4080 +7C80 +0880 +1080 +2080 +4E80 +7180 +ENDCHAR +STARTCHAR uni1901 +ENCODING 6401 +BBX 6 10 2 1 +BITMAP +F8 +08 +08 +10 +10 +20 +20 +40 +40 +7C +ENDCHAR +STARTCHAR uni1902 +ENCODING 6402 +BBX 10 10 0 1 +BITMAP +3F80 +4200 +8400 +8400 +8400 +8400 +8400 +8400 +4A40 +3180 +ENDCHAR +STARTCHAR uni1903 +ENCODING 6403 +BBX 8 10 1 1 +BITMAP +F1 +12 +24 +48 +F0 +28 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni1904 +ENCODING 6404 +BBX 9 10 0 1 +BITMAP +FF80 +2080 +2080 +2080 +2080 +1180 +0E80 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni1905 +ENCODING 6405 +BBX 9 10 1 1 +BITMAP +BC00 +8900 +9280 +A100 +B800 +8400 +8200 +4200 +4400 +3800 +ENDCHAR +STARTCHAR uni1906 +ENCODING 6406 +BBX 8 10 1 1 +BITMAP +E1 +11 +09 +05 +05 +05 +45 +A5 +A9 +71 +ENDCHAR +STARTCHAR uni1907 +ENCODING 6407 +BBX 8 10 1 1 +BITMAP +FF +10 +20 +40 +F0 +9C +80 +81 +42 +3C +ENDCHAR +STARTCHAR uni1908 +ENCODING 6408 +BBX 8 10 1 1 +BITMAP +FF +01 +F1 +09 +09 +F1 +01 +01 +01 +01 +ENDCHAR +STARTCHAR uni1909 +ENCODING 6409 +BBX 6 13 2 -2 +BITMAP +7C +80 +80 +80 +7C +80 +80 +80 +80 +7C +08 +10 +20 +ENDCHAR +STARTCHAR uni190A +ENCODING 6410 +BBX 9 10 1 1 +BITMAP +FF00 +0800 +0800 +6800 +9800 +8C00 +9280 +6100 +0280 +0480 +ENDCHAR +STARTCHAR uni190B +ENCODING 6411 +BBX 8 10 1 1 +BITMAP +3E +41 +81 +02 +0C +02 +01 +81 +41 +3E +ENDCHAR +STARTCHAR uni190C +ENCODING 6412 +BBX 9 10 1 1 +BITMAP +F800 +0800 +0800 +0800 +0800 +7F00 +8880 +8880 +8880 +7100 +ENDCHAR +STARTCHAR uni190D +ENCODING 6413 +BBX 9 10 1 1 +BITMAP +C180 +3E00 +0800 +0800 +0E00 +0100 +0080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni190E +ENCODING 6414 +BBX 8 10 1 1 +BITMAP +F9 +31 +41 +41 +31 +41 +41 +41 +22 +1C +ENDCHAR +STARTCHAR uni190F +ENCODING 6415 +BBX 6 10 1 1 +BITMAP +F8 +08 +08 +10 +10 +3C +20 +40 +40 +7C +ENDCHAR +STARTCHAR uni1910 +ENCODING 6416 +BBX 9 10 0 1 +BITMAP +2200 +4100 +4100 +8080 +8080 +8080 +8080 +4900 +4900 +3600 +ENDCHAR +STARTCHAR uni1911 +ENCODING 6417 +BBX 9 9 0 1 +BITMAP +7700 +8880 +0880 +0880 +0880 +0880 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uni1912 +ENCODING 6418 +BBX 9 10 1 1 +BITMAP +C180 +3E00 +0800 +0800 +3800 +4000 +8300 +8480 +4500 +3E00 +ENDCHAR +STARTCHAR uni1913 +ENCODING 6419 +BBX 8 10 1 1 +BITMAP +71 +89 +89 +91 +A1 +A3 +5D +01 +01 +01 +ENDCHAR +STARTCHAR uni1914 +ENCODING 6420 +BBX 8 10 1 1 +BITMAP +FF +11 +11 +21 +21 +41 +81 +F1 +0D +03 +ENDCHAR +STARTCHAR uni1915 +ENCODING 6421 +BBX 6 9 1 2 +BITMAP +FC +08 +10 +38 +04 +64 +94 +78 +10 +ENDCHAR +STARTCHAR uni1916 +ENCODING 6422 +BBX 7 10 1 1 +BITMAP +F8 +08 +08 +10 +10 +30 +30 +48 +44 +82 +ENDCHAR +STARTCHAR uni1917 +ENCODING 6423 +BBX 7 10 2 1 +BITMAP +C6 +BA +82 +42 +3A +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni1918 +ENCODING 6424 +BBX 9 10 0 1 +BITMAP +1080 +3080 +5080 +9080 +1080 +0980 +0680 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni1919 +ENCODING 6425 +BBX 9 10 1 1 +BITMAP +8780 +8400 +8400 +8400 +8400 +8400 +8400 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni191A +ENCODING 6426 +BBX 6 10 2 1 +BITMAP +74 +8C +84 +84 +84 +84 +8C +74 +04 +04 +ENDCHAR +STARTCHAR uni191B +ENCODING 6427 +BBX 8 10 1 1 +BITMAP +7F +89 +89 +89 +89 +89 +71 +01 +01 +01 +ENDCHAR +STARTCHAR uni191C +ENCODING 6428 +BBX 8 10 1 1 +BITMAP +3E +42 +84 +88 +9E +81 +80 +40 +21 +1E +ENDCHAR +STARTCHAR uni191D +ENCODING 6429 +BBX 8 10 1 1 +BITMAP +FF +20 +20 +3C +22 +22 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni191E +ENCODING 6430 +BBX 8 11 1 0 +BITMAP +FF +20 +20 +3E +02 +02 +22 +52 +4A +3C +02 +ENDCHAR +STARTCHAR uni1920 +ENCODING 6432 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -15 11 +BITMAP +60 +90 +7F +ENDCHAR +STARTCHAR uni1921 +ENCODING 6433 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -7 9 +BITMAP +78 +84 +08 +0E +ENDCHAR +STARTCHAR uni1922 +ENCODING 6434 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -15 -2 +BITMAP +61 +96 +78 +ENDCHAR +STARTCHAR uni1923 +ENCODING 6435 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 10 -5 1 +BITMAP +40 +A0 +A0 +60 +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni1924 +ENCODING 6436 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 10 -6 1 +BITMAP +48 +B4 +B4 +6C +24 +24 +48 +48 +90 +90 +ENDCHAR +STARTCHAR uni1925 +ENCODING 6437 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 13 -15 1 +BITMAP +6000 +9000 +7F00 +0010 +0028 +0028 +0018 +0008 +0008 +0010 +0010 +0020 +0020 +ENDCHAR +STARTCHAR uni1926 +ENCODING 6438 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 13 -15 1 +BITMAP +6000 +9000 +7F00 +0024 +005A +005A +0036 +0012 +0012 +0024 +0024 +0048 +0048 +ENDCHAR +STARTCHAR uni1927 +ENCODING 6439 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -15 11 +BITMAP +C0 +30 +0C +ENDCHAR +STARTCHAR uni1928 +ENCODING 6440 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -14 10 +BITMAP +02 +C4 +28 +10 +ENDCHAR +STARTCHAR uni1929 +ENCODING 6441 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -7 0 +BITMAP +02 +44 +A4 +18 +ENDCHAR +STARTCHAR uni192A +ENCODING 6442 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -9 -2 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni192B +ENCODING 6443 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -7 1 +BITMAP +E4 +14 +64 +8C +74 +04 +ENDCHAR +STARTCHAR uni1930 +ENCODING 6448 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -6 6 +BITMAP +F8 +40 +80 +88 +70 +ENDCHAR +STARTCHAR uni1931 +ENCODING 6449 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -5 1 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni1932 +ENCODING 6450 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -13 -2 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni1933 +ENCODING 6451 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -7 -1 +BITMAP +70 +88 +ENDCHAR +STARTCHAR uni1934 +ENCODING 6452 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -8 4 +BITMAP +80 +40 +40 +44 +2A +2A +1C +ENDCHAR +STARTCHAR uni1935 +ENCODING 6453 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -7 5 +BITMAP +84 +44 +44 +4C +34 +04 +ENDCHAR +STARTCHAR uni1936 +ENCODING 6454 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 10 -7 1 +BITMAP +88 +54 +54 +38 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1937 +ENCODING 6455 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 -1 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni1938 +ENCODING 6456 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 7 +BITMAP +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni1939 +ENCODING 6457 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -7 -1 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni193A +ENCODING 6458 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 1 -10 13 +BITMAP +A0 +ENDCHAR +STARTCHAR uni193B +ENCODING 6459 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 -15 -1 +BITMAP +FF +ENDCHAR +STARTCHAR uni1940 +ENCODING 6464 +BBX 9 10 4 1 +BITMAP +2000 +4000 +8000 +8000 +8300 +8480 +8480 +4280 +2100 +1E00 +ENDCHAR +STARTCHAR uni1944 +ENCODING 6468 +BBX 4 10 6 1 +BITMAP +60 +90 +90 +50 +10 +10 +10 +10 +00 +10 +ENDCHAR +STARTCHAR uni1945 +ENCODING 6469 +BBX 7 10 5 1 +BITMAP +8C +52 +24 +20 +20 +20 +20 +20 +00 +20 +ENDCHAR +STARTCHAR uni1946 +ENCODING 6470 +BBX 7 10 4 1 +BITMAP +38 +44 +82 +82 +82 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni1947 +ENCODING 6471 +BBX 8 10 4 1 +BITMAP +80 +80 +80 +80 +86 +89 +89 +85 +42 +3C +ENDCHAR +STARTCHAR uni1948 +ENCODING 6472 +BBX 9 10 3 1 +BITMAP +0800 +1400 +1400 +2200 +2200 +4100 +4100 +8080 +8080 +8080 +ENDCHAR +STARTCHAR uni1949 +ENCODING 6473 +BBX 7 10 4 1 +BITMAP +78 +84 +80 +40 +38 +04 +02 +02 +42 +3C +ENDCHAR +STARTCHAR uni194A +ENCODING 6474 +BBX 11 10 2 1 +BITMAP +60C0 +1100 +0A00 +0A00 +0400 +0A00 +0A00 +1100 +2080 +C060 +ENDCHAR +STARTCHAR uni194B +ENCODING 6475 +BBX 7 10 4 1 +BITMAP +3C +4A +8A +84 +80 +80 +84 +8A +4A +3C +ENDCHAR +STARTCHAR uni194C +ENCODING 6476 +BBX 7 13 4 -2 +BITMAP +38 +44 +82 +80 +80 +80 +84 +8A +4A +3C +08 +04 +02 +ENDCHAR +STARTCHAR uni194D +ENCODING 6477 +BBX 8 10 3 1 +BITMAP +62 +85 +88 +48 +30 +18 +24 +22 +22 +1C +ENDCHAR +STARTCHAR uni194E +ENCODING 6478 +BBX 9 10 3 1 +BITMAP +8080 +8080 +8080 +4100 +4100 +2200 +2200 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uni194F +ENCODING 6479 +BBX 8 10 3 1 +BITMAP +FF +91 +51 +32 +12 +04 +04 +08 +10 +20 +ENDCHAR +STARTCHAR uni1950 +ENCODING 6480 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +90 +A8 +48 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1951 +ENCODING 6481 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +90 +A8 +48 +08 +38 +48 +38 +ENDCHAR +STARTCHAR uni1952 +ENCODING 6482 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +B0 +C8 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni1953 +ENCODING 6483 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +A0 +56 +1A +12 +12 +16 +1A +ENDCHAR +STARTCHAR uni1954 +ENCODING 6484 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +A0 +52 +12 +12 +12 +16 +1A +ENDCHAR +STARTCHAR uni1955 +ENCODING 6485 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +84 +84 +84 +84 +84 +AC +54 +ENDCHAR +STARTCHAR uni1956 +ENCODING 6486 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +B6 +DA +92 +92 +92 +B2 +D2 +ENDCHAR +STARTCHAR uni1957 +ENCODING 6487 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +B6 +DA +92 +92 +92 +B6 +DA +ENDCHAR +STARTCHAR uni1958 +ENCODING 6488 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +04 +04 +04 +04 +84 +AC +54 +ENDCHAR +STARTCHAR uni1959 +ENCODING 6489 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +88 +88 +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni195A +ENCODING 6490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +96 +9A +92 +92 +92 +B6 +DA +ENDCHAR +STARTCHAR uni195B +ENCODING 6491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +88 +88 +F8 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni195C +ENCODING 6492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +96 +9A +92 +92 +92 +B6 +DA +02 +04 +08 +ENDCHAR +STARTCHAR uni195D +ENCODING 6493 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +B0 +C8 +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni195E +ENCODING 6494 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +B6 +DA +92 +92 +92 +B2 +D2 +10 +20 +40 +ENDCHAR +STARTCHAR uni195F +ENCODING 6495 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +B6 +5A +12 +12 +12 +12 +12 +10 +20 +40 +ENDCHAR +STARTCHAR uni1960 +ENCODING 6496 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +90 +A8 +48 +08 +38 +48 +38 +08 +10 +20 +ENDCHAR +STARTCHAR uni1961 +ENCODING 6497 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +A0 +52 +12 +12 +12 +16 +1A +02 +04 +08 +ENDCHAR +STARTCHAR uni1962 +ENCODING 6498 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +8C +94 +94 +A4 +A4 +C4 +84 +ENDCHAR +STARTCHAR uni1963 +ENCODING 6499 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 3 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1964 +ENCODING 6500 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 1 +BITMAP +F0 +90 +90 +90 +F0 +90 +90 +90 +D0 +B0 +ENDCHAR +STARTCHAR uni1965 +ENCODING 6501 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 1 +BITMAP +F0 +90 +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni1966 +ENCODING 6502 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 -2 +BITMAP +F0 +90 +90 +90 +90 +90 +90 +90 +90 +90 +10 +10 +70 +ENDCHAR +STARTCHAR uni1967 +ENCODING 6503 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +F0 +00 +F0 +ENDCHAR +STARTCHAR uni1968 +ENCODING 6504 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uni1969 +ENCODING 6505 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 1 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +90 +F0 +ENDCHAR +STARTCHAR uni196A +ENCODING 6506 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 -2 +BITMAP +F0 +90 +90 +90 +F0 +90 +90 +90 +D0 +B0 +80 +80 +E0 +ENDCHAR +STARTCHAR uni196B +ENCODING 6507 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 -2 +BITMAP +F0 +90 +90 +90 +90 +90 +90 +90 +90 +90 +80 +80 +E0 +ENDCHAR +STARTCHAR uni196C +ENCODING 6508 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 1 +BITMAP +F0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni196D +ENCODING 6509 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +A0 +52 +12 +12 +12 +16 +1A +10 +20 +40 +ENDCHAR +STARTCHAR uni1970 +ENCODING 6512 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +F8 +48 +48 +48 +48 +4A +84 +ENDCHAR +STARTCHAR uni1971 +ENCODING 6513 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +30 +48 +88 +F8 +80 +88 +70 +ENDCHAR +STARTCHAR uni1972 +ENCODING 6514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +38 +48 +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni1973 +ENCODING 6515 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +80 +48 +54 +54 +4C +44 +38 +ENDCHAR +STARTCHAR uni1974 +ENCODING 6516 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +30 +48 +80 +80 +80 +88 +70 +ENDCHAR +STARTCHAR uni1980 +ENCODING 6528 +BBX 12 11 2 -1 +BITMAP +71C0 +8A20 +0410 +0410 +0410 +8820 +70C0 +0020 +0010 +0210 +01E0 +ENDCHAR +STARTCHAR uni1981 +ENCODING 6529 +BBX 12 14 2 -1 +BITMAP +0600 +0900 +0000 +71C0 +8A20 +0410 +0410 +0410 +8820 +70C0 +0020 +0010 +0210 +01E0 +ENDCHAR +STARTCHAR uni1982 +ENCODING 6530 +BBX 13 7 2 3 +BITMAP +38E0 +4510 +8208 +8008 +8008 +4010 +38E0 +ENDCHAR +STARTCHAR uni1983 +ENCODING 6531 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +70 +88 +04 +04 +34 +48 +34 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni1984 +ENCODING 6532 +BBX 13 12 2 -2 +BITMAP +38E0 +4110 +8208 +8208 +4410 +38E0 +0000 +03E0 +0410 +0390 +0850 +07E0 +ENDCHAR +STARTCHAR uni1985 +ENCODING 6533 +BBX 8 7 4 3 +BITMAP +3C +42 +81 +81 +81 +42 +24 +ENDCHAR +STARTCHAR uni1986 +ENCODING 6534 +BBX 8 11 4 3 +BITMAP +3C +42 +81 +80 +BC +C2 +81 +81 +81 +42 +24 +ENDCHAR +STARTCHAR uni1987 +ENCODING 6535 +BBX 8 11 4 -1 +BITMAP +3C +42 +81 +81 +81 +B1 +C9 +01 +01 +42 +3C +ENDCHAR +STARTCHAR uni1988 +ENCODING 6536 +BBX 8 7 4 3 +BITMAP +7C +82 +81 +61 +81 +82 +7C +ENDCHAR +STARTCHAR uni1989 +ENCODING 6537 +BBX 12 7 2 3 +BITMAP +71C0 +8820 +0410 +0410 +0410 +8A20 +71C0 +ENDCHAR +STARTCHAR uni198A +ENCODING 6538 +BBX 10 11 3 3 +BITMAP +0180 +0240 +0200 +0200 +7200 +8A00 +8200 +6200 +8200 +8400 +7800 +ENDCHAR +STARTCHAR uni198B +ENCODING 6539 +BBX 8 11 4 -1 +BITMAP +3C +42 +81 +81 +81 +42 +24 +02 +01 +41 +3E +ENDCHAR +STARTCHAR uni198C +ENCODING 6540 +BBX 8 15 4 -1 +BITMAP +3C +42 +81 +80 +BC +C2 +81 +81 +81 +42 +24 +02 +01 +41 +3E +ENDCHAR +STARTCHAR uni198D +ENCODING 6541 +BBX 13 7 2 3 +BITMAP +38E0 +4010 +8008 +8008 +8208 +4510 +38E0 +ENDCHAR +STARTCHAR uni198E +ENCODING 6542 +BBX 13 7 2 3 +BITMAP +38E0 +4510 +8208 +8208 +8208 +4410 +38E0 +ENDCHAR +STARTCHAR uni198F +ENCODING 6543 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +78 +84 +82 +62 +82 +8A +72 +02 +02 +44 +38 +ENDCHAR +STARTCHAR uni1990 +ENCODING 6544 +BBX 13 12 2 -2 +BITMAP +38E0 +4110 +8208 +8208 +8208 +4410 +38E0 +0080 +00C0 +0820 +0420 +03C0 +ENDCHAR +STARTCHAR uni1991 +ENCODING 6545 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 3 +BITMAP +3C +42 +80 +80 +9C +A2 +82 +8C +82 +42 +3C +ENDCHAR +STARTCHAR uni1992 +ENCODING 6546 +BBX 11 7 3 3 +BITMAP +3F80 +4040 +8020 +8020 +8420 +4440 +3B80 +ENDCHAR +STARTCHAR uni1993 +ENCODING 6547 +BBX 8 11 4 -1 +BITMAP +7C +82 +80 +80 +80 +80 +7C +02 +01 +82 +7C +ENDCHAR +STARTCHAR uni1994 +ENCODING 6548 +BBX 11 11 3 3 +BITMAP +00C0 +0120 +0100 +0100 +3100 +4100 +8100 +8100 +8100 +4200 +3C00 +ENDCHAR +STARTCHAR uni1995 +ENCODING 6549 +BBX 13 7 2 3 +BITMAP +71C0 +8A20 +8220 +6140 +8080 +8148 +7E30 +ENDCHAR +STARTCHAR uni1996 +ENCODING 6550 +BBX 13 12 2 -2 +BITMAP +38E0 +4110 +8208 +8208 +8208 +4410 +38E0 +0080 +0780 +0810 +0820 +07C0 +ENDCHAR +STARTCHAR uni1997 +ENCODING 6551 +BBX 13 12 2 -2 +BITMAP +38E0 +4510 +8208 +8008 +4018 +38E8 +0008 +0F88 +1048 +1788 +1010 +0FE0 +ENDCHAR +STARTCHAR uni1998 +ENCODING 6552 +BBX 12 7 2 3 +BITMAP +71C0 +8A20 +0410 +0410 +0410 +8820 +71C0 +ENDCHAR +STARTCHAR uni1999 +ENCODING 6553 +BBX 8 11 4 -1 +BITMAP +24 +42 +81 +81 +BD +42 +3D +01 +01 +41 +3E +ENDCHAR +STARTCHAR uni199A +ENCODING 6554 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 3 +BITMAP +7C +80 +7E +02 +72 +8A +82 +62 +82 +84 +78 +ENDCHAR +STARTCHAR uni199B +ENCODING 6555 +BBX 13 12 2 -2 +BITMAP +38E0 +4110 +8208 +8208 +8208 +4410 +38E0 +0000 +0F80 +1040 +1040 +0F80 +ENDCHAR +STARTCHAR uni199C +ENCODING 6556 +BBX 13 12 2 -2 +BITMAP +38E0 +4110 +8208 +8208 +8208 +4410 +38E0 +0020 +0C20 +1220 +1120 +08C0 +ENDCHAR +STARTCHAR uni199D +ENCODING 6557 +BBX 13 11 2 3 +BITMAP +3C00 +4200 +8100 +8000 +B8E0 +C510 +8208 +8008 +8008 +4010 +38E0 +ENDCHAR +STARTCHAR uni199E +ENCODING 6558 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 3 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni199F +ENCODING 6559 +BBX 13 7 2 3 +BITMAP +38E0 +4410 +8208 +8208 +8208 +4110 +38E0 +ENDCHAR +STARTCHAR uni19A0 +ENCODING 6560 +BBX 13 7 2 3 +BITMAP +38E0 +4110 +8208 +8208 +8208 +4410 +38E0 +ENDCHAR +STARTCHAR uni19A1 +ENCODING 6561 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +70 +88 +04 +04 +04 +08 +30 +08 +04 +84 +78 +ENDCHAR +STARTCHAR uni19A2 +ENCODING 6562 +BBX 8 7 4 3 +BITMAP +24 +42 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni19A3 +ENCODING 6563 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +84 +44 +22 +A2 +42 +04 +04 +08 +ENDCHAR +STARTCHAR uni19A4 +ENCODING 6564 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +30 +48 +00 +70 +88 +04 +04 +04 +08 +30 +08 +04 +84 +78 +ENDCHAR +STARTCHAR uni19A5 +ENCODING 6565 +BBX 8 10 4 3 +BITMAP +18 +24 +00 +24 +42 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni19A6 +ENCODING 6566 +BBX 13 12 2 -2 +BITMAP +38E0 +4510 +8208 +8008 +8008 +4010 +38E0 +0000 +0F80 +1040 +1040 +0F80 +ENDCHAR +STARTCHAR uni19A7 +ENCODING 6567 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +70 +88 +04 +04 +74 +88 +74 +00 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni19A8 +ENCODING 6568 +BBX 8 12 4 -2 +BITMAP +3C +42 +81 +81 +81 +42 +24 +00 +3C +42 +42 +3C +ENDCHAR +STARTCHAR uni19A9 +ENCODING 6569 +BBX 8 16 4 -2 +BITMAP +3C +42 +81 +80 +BC +C2 +81 +81 +81 +42 +24 +00 +3C +42 +42 +3C +ENDCHAR +STARTCHAR uni19AA +ENCODING 6570 +BBX 12 12 2 -2 +BITMAP +71C0 +8820 +0410 +0410 +0410 +8A20 +71C0 +0000 +1F00 +2080 +2080 +1F00 +ENDCHAR +STARTCHAR uni19AB +ENCODING 6571 +BBX 8 16 4 -2 +BITMAP +3C +42 +81 +80 +BC +C2 +81 +81 +81 +42 +24 +02 +39 +46 +44 +38 +ENDCHAR +STARTCHAR uni19B0 +ENCODING 6576 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 3 +BITMAP +60 +92 +4C +00 +60 +92 +4C +ENDCHAR +STARTCHAR uni19B1 +ENCODING 6577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +70 +88 +04 +04 +04 +88 +70 +ENDCHAR +STARTCHAR uni19B2 +ENCODING 6578 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 3 +BITMAP +38 +44 +82 +82 +82 +BA +C6 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni19B3 +ENCODING 6579 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +70 +88 +04 +04 +04 +88 +F0 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni19B4 +ENCODING 6580 +BBX 10 11 3 -1 +BITMAP +8200 +8200 +8200 +8200 +8200 +4600 +3A00 +0200 +0200 +0240 +0180 +ENDCHAR +STARTCHAR uni19B5 +ENCODING 6581 +BBX 8 7 4 3 +BITMAP +3C +42 +81 +81 +81 +42 +23 +ENDCHAR +STARTCHAR uni19B6 +ENCODING 6582 +BBX 15 7 1 3 +BITMAP +3838 +4444 +8282 +8282 +8282 +4444 +2626 +ENDCHAR +STARTCHAR uni19B7 +ENCODING 6583 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 3 +BITMAP +70 +88 +80 +40 +30 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni19B8 +ENCODING 6584 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 3 +BITMAP +38 +44 +44 +28 +10 +28 +C6 +ENDCHAR +STARTCHAR uni19B9 +ENCODING 6585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 3 +BITMAP +38 +54 +92 +92 +92 +BA +C6 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni19BA +ENCODING 6586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 3 +BITMAP +78 +84 +04 +04 +3C +44 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni19BB +ENCODING 6587 +BBX 10 11 3 -1 +BITMAP +7840 +8440 +0240 +0240 +0240 +8640 +7A40 +0240 +0240 +0240 +0180 +ENDCHAR +STARTCHAR uni19BC +ENCODING 6588 +BBX 10 15 3 -1 +BITMAP +3800 +4400 +8200 +8200 +8240 +BA40 +C640 +8240 +8240 +4640 +3A40 +0240 +0240 +0240 +0180 +ENDCHAR +STARTCHAR uni19BD +ENCODING 6589 +BBX 11 11 3 -1 +BITMAP +3C20 +4220 +8120 +8120 +8120 +4320 +3D20 +0120 +0120 +0120 +00C0 +ENDCHAR +STARTCHAR uni19BE +ENCODING 6590 +BBX 13 11 1 3 +BITMAP +0030 +0048 +0040 +0040 +3840 +4440 +4440 +2840 +1040 +2880 +C700 +ENDCHAR +STARTCHAR uni19BF +ENCODING 6591 +BBX 10 15 3 -1 +BITMAP +3800 +5400 +9200 +9200 +9240 +BA40 +C640 +8240 +8240 +4640 +3A40 +0240 +0240 +0240 +0180 +ENDCHAR +STARTCHAR uni19C0 +ENCODING 6592 +BBX 10 15 3 -1 +BITMAP +3800 +4400 +8200 +8200 +8240 +BA40 +C640 +8240 +8240 +4640 +3A40 +0240 +0240 +0240 +0180 +ENDCHAR +STARTCHAR uni19C1 +ENCODING 6593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +38 +44 +82 +82 +82 +46 +3A +02 +1A +24 +18 +ENDCHAR +STARTCHAR uni19C2 +ENCODING 6594 +BBX 8 11 4 -1 +BITMAP +3C +42 +81 +81 +81 +B1 +C9 +01 +0D +12 +0C +ENDCHAR +STARTCHAR uni19C3 +ENCODING 6595 +BBX 8 11 4 -1 +BITMAP +7C +82 +80 +80 +80 +80 +7C +02 +61 +92 +7C +ENDCHAR +STARTCHAR uni19C4 +ENCODING 6596 +BBX 8 11 4 -1 +BITMAP +24 +42 +81 +81 +BD +42 +3D +01 +31 +49 +3E +ENDCHAR +STARTCHAR uni19C5 +ENCODING 6597 +BBX 13 11 2 -1 +BITMAP +38E0 +4510 +8208 +8008 +8008 +4018 +38E8 +0008 +0068 +0090 +0060 +ENDCHAR +STARTCHAR uni19C6 +ENCODING 6598 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +70 +88 +04 +04 +04 +08 +30 +08 +64 +94 +78 +ENDCHAR +STARTCHAR uni19C7 +ENCODING 6599 +BBX 8 11 4 -1 +BITMAP +24 +42 +81 +81 +81 +43 +3D +01 +0D +12 +0C +ENDCHAR +STARTCHAR uni19C8 +ENCODING 6600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +38 +40 +80 +B8 +C4 +44 +38 +ENDCHAR +STARTCHAR uni19C9 +ENCODING 6601 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +38 +44 +C4 +B8 +80 +40 +38 +ENDCHAR +STARTCHAR uni19D0 +ENCODING 6608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 3 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni19D1 +ENCODING 6609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +70 +88 +04 +04 +04 +88 +70 +ENDCHAR +STARTCHAR uni19D2 +ENCODING 6610 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +1C +04 +04 +04 +04 +04 +04 +04 +04 +88 +70 +ENDCHAR +STARTCHAR uni19D3 +ENCODING 6611 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +78 +84 +02 +02 +02 +84 +78 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni19D4 +ENCODING 6612 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +3C +42 +80 +80 +80 +42 +3C +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni19D5 +ENCODING 6613 +BBX 12 11 2 -1 +BITMAP +38E0 +4510 +8210 +8010 +8010 +4010 +3010 +0010 +0090 +0090 +0060 +ENDCHAR +STARTCHAR uni19D6 +ENCODING 6614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 3 +BITMAP +78 +84 +80 +88 +94 +90 +88 +84 +44 +38 +ENDCHAR +STARTCHAR uni19D7 +ENCODING 6615 +BBX 15 11 1 -1 +BITMAP +38E0 +4510 +8210 +8010 +8010 +4010 +3010 +0010 +0012 +0012 +000C +ENDCHAR +STARTCHAR uni19D8 +ENCODING 6616 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 3 +BITMAP +18 +24 +24 +24 +42 +42 +81 +ENDCHAR +STARTCHAR uni19D9 +ENCODING 6617 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +38 +44 +82 +82 +92 +8C +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni19DA +ENCODING 6618 +BBX 9 9 4 3 +BITMAP +0080 +0080 +3D00 +4200 +8000 +8000 +8000 +4200 +3C00 +ENDCHAR +STARTCHAR uni19DE +ENCODING 6622 +BBX 13 10 2 3 +BITMAP +0030 +0048 +0040 +3040 +4840 +8440 +8440 +8440 +4240 +3180 +ENDCHAR +STARTCHAR uni19DF +ENCODING 6623 +BBX 13 15 2 -2 +BITMAP +0030 +0048 +0040 +3040 +4840 +8440 +8440 +8440 +4240 +3180 +0000 +1F00 +2080 +2080 +1F00 +ENDCHAR +STARTCHAR uni19E0 +ENCODING 6624 +BBX 9 14 4 -2 +BITMAP +1C00 +2200 +2200 +2200 +2200 +1C00 +0080 +3F80 +4000 +8E00 +9200 +8A00 +A200 +DE00 +ENDCHAR +STARTCHAR uni19E1 +ENCODING 6625 +BBX 5 14 5 -1 +BITMAP +70 +88 +A8 +48 +08 +88 +70 +00 +48 +98 +68 +08 +08 +08 +ENDCHAR +STARTCHAR uni19E2 +ENCODING 6626 +BBX 9 14 3 -1 +BITMAP +8000 +9B00 +A480 +A080 +9880 +8080 +7F00 +0000 +1200 +2600 +1A00 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni19E3 +ENCODING 6627 +BBX 9 13 3 -1 +BITMAP +7700 +8880 +8880 +C880 +A880 +C880 +0000 +1200 +2600 +1A00 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni19E4 +ENCODING 6628 +BBX 6 14 4 -1 +BITMAP +20 +40 +90 +A8 +A0 +90 +78 +00 +24 +4C +34 +04 +04 +04 +ENDCHAR +STARTCHAR uni19E5 +ENCODING 6629 +BBX 6 15 4 -1 +BITMAP +48 +B8 +40 +90 +A8 +A0 +90 +78 +00 +24 +4C +34 +04 +04 +04 +ENDCHAR +STARTCHAR uni19E6 +ENCODING 6630 +BBX 5 15 5 -1 +BITMAP +80 +B0 +C8 +08 +48 +A8 +88 +70 +00 +48 +98 +68 +08 +08 +08 +ENDCHAR +STARTCHAR uni19E7 +ENCODING 6631 +BBX 9 14 4 -1 +BITMAP +0100 +6C80 +9280 +8280 +C280 +A280 +C100 +0000 +2400 +4C00 +3400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni19E8 +ENCODING 6632 +BBX 7 15 4 -1 +BITMAP +02 +3E +40 +8E +92 +8A +A2 +DC +00 +24 +4C +34 +04 +04 +04 +ENDCHAR +STARTCHAR uni19E9 +ENCODING 6633 +BBX 5 14 5 -1 +BITMAP +08 +08 +78 +80 +60 +88 +70 +00 +48 +98 +68 +08 +08 +08 +ENDCHAR +STARTCHAR uni19EA +ENCODING 6634 +BBX 12 14 2 -1 +BITMAP +70E0 +8910 +A910 +4910 +0910 +8910 +70E0 +0000 +0900 +1300 +0D00 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni19EB +ENCODING 6635 +BBX 12 14 2 -1 +BITMAP +70E0 +8910 +A950 +4890 +0810 +8910 +70E0 +0000 +0900 +1300 +0D00 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni19EC +ENCODING 6636 +BBX 14 14 1 -1 +BITMAP +7200 +8A58 +AAA4 +4A84 +0A44 +8A04 +71F8 +0000 +0480 +0980 +0680 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni19ED +ENCODING 6637 +BBX 14 14 1 -1 +BITMAP +71D8 +8A24 +AA24 +4A24 +0B24 +8AA4 +7324 +0000 +0480 +0980 +0680 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni19EE +ENCODING 6638 +BBX 12 14 2 -1 +BITMAP +7040 +8880 +A920 +4950 +0940 +8920 +70F0 +0000 +0900 +1300 +0D00 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni19EF +ENCODING 6639 +BBX 12 15 2 -1 +BITMAP +0090 +7170 +8880 +A920 +4950 +0940 +8920 +70F0 +0000 +0900 +1300 +0D00 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni19F0 +ENCODING 6640 +BBX 7 16 4 -2 +BITMAP +02 +3E +40 +8E +92 +8A +A2 +DC +02 +3E +40 +8E +92 +8A +A2 +DC +ENDCHAR +STARTCHAR uni19F1 +ENCODING 6641 +BBX 6 14 4 -1 +BITMAP +48 +98 +68 +08 +08 +08 +00 +38 +44 +54 +24 +04 +44 +38 +ENDCHAR +STARTCHAR uni19F2 +ENCODING 6642 +BBX 9 14 3 -1 +BITMAP +2400 +4C00 +3400 +0400 +0400 +0400 +0000 +8000 +9B00 +A480 +A080 +9880 +8080 +7F00 +ENDCHAR +STARTCHAR uni19F3 +ENCODING 6643 +BBX 9 14 3 -1 +BITMAP +2400 +4C00 +3400 +0400 +0400 +0400 +0000 +0000 +7700 +8880 +8880 +C880 +A880 +C880 +ENDCHAR +STARTCHAR uni19F4 +ENCODING 6644 +BBX 5 14 4 -1 +BITMAP +48 +98 +68 +08 +08 +08 +00 +20 +40 +90 +A8 +A0 +90 +78 +ENDCHAR +STARTCHAR uni19F5 +ENCODING 6645 +BBX 7 14 4 -1 +BITMAP +48 +98 +68 +08 +08 +08 +42 +BE +40 +90 +A8 +A0 +90 +78 +ENDCHAR +STARTCHAR uni19F6 +ENCODING 6646 +BBX 6 14 4 -1 +BITMAP +48 +98 +68 +08 +08 +08 +40 +58 +64 +04 +24 +54 +44 +38 +ENDCHAR +STARTCHAR uni19F7 +ENCODING 6647 +BBX 9 14 4 -1 +BITMAP +4800 +9800 +6800 +0800 +0800 +0800 +0000 +0100 +6C80 +9280 +8280 +C280 +A280 +C100 +ENDCHAR +STARTCHAR uni19F8 +ENCODING 6648 +BBX 7 14 4 -1 +BITMAP +48 +98 +68 +08 +08 +08 +02 +3E +40 +8E +92 +8A +A2 +DC +ENDCHAR +STARTCHAR uni19F9 +ENCODING 6649 +BBX 6 14 4 -1 +BITMAP +48 +98 +68 +08 +08 +08 +00 +04 +04 +3C +40 +30 +44 +38 +ENDCHAR +STARTCHAR uni19FA +ENCODING 6650 +BBX 12 14 2 -1 +BITMAP +1200 +2600 +1A00 +0200 +0200 +0200 +0000 +70E0 +8910 +A910 +4910 +0910 +8910 +70E0 +ENDCHAR +STARTCHAR uni19FB +ENCODING 6651 +BBX 12 14 2 -1 +BITMAP +1200 +2600 +1A00 +0200 +0200 +0200 +0000 +70E0 +8910 +A950 +4890 +0810 +8910 +70E0 +ENDCHAR +STARTCHAR uni19FC +ENCODING 6652 +BBX 14 14 1 -1 +BITMAP +0900 +1300 +0D00 +0100 +0100 +0100 +0000 +7200 +8A58 +AAA4 +4A84 +0A44 +8A04 +71F8 +ENDCHAR +STARTCHAR uni19FD +ENCODING 6653 +BBX 14 14 1 -1 +BITMAP +0900 +1300 +0D00 +0100 +0100 +0100 +0000 +71D8 +8A24 +AA24 +4A24 +0B24 +8AA4 +7324 +ENDCHAR +STARTCHAR uni19FE +ENCODING 6654 +BBX 12 14 2 -1 +BITMAP +1200 +2600 +1A00 +0200 +0200 +0200 +0000 +7040 +8880 +A920 +4950 +0940 +8920 +70F0 +ENDCHAR +STARTCHAR uni19FF +ENCODING 6655 +BBX 12 14 2 -1 +BITMAP +1200 +2600 +1A00 +0200 +0200 +0200 +0090 +7170 +8880 +A920 +4950 +0940 +8920 +70F0 +ENDCHAR +STARTCHAR uni1A00 +ENCODING 6656 +BBX 8 6 4 0 +BITMAP +08 +11 +22 +44 +88 +10 +ENDCHAR +STARTCHAR uni1A01 +ENCODING 6657 +BBX 7 6 5 0 +BITMAP +24 +24 +52 +52 +8C +AC +ENDCHAR +STARTCHAR uni1A02 +ENCODING 6658 +BBX 6 6 6 0 +BITMAP +80 +40 +20 +30 +48 +84 +ENDCHAR +STARTCHAR uni1A03 +ENCODING 6659 +BBX 9 6 4 0 +BITMAP +0400 +0A00 +1100 +2880 +4400 +8200 +ENDCHAR +STARTCHAR uni1A04 +ENCODING 6660 +BBX 7 6 5 0 +BITMAP +24 +24 +52 +52 +8C +8C +ENDCHAR +STARTCHAR uni1A05 +ENCODING 6661 +BBX 6 8 5 0 +BITMAP +20 +50 +88 +44 +20 +30 +48 +84 +ENDCHAR +STARTCHAR uni1A06 +ENCODING 6662 +BBX 5 6 5 0 +BITMAP +88 +88 +50 +50 +20 +20 +ENDCHAR +STARTCHAR uni1A07 +ENCODING 6663 +BBX 8 6 4 0 +BITMAP +84 +42 +21 +31 +4A +84 +ENDCHAR +STARTCHAR uni1A08 +ENCODING 6664 +BBX 5 6 6 0 +BITMAP +20 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni1A09 +ENCODING 6665 +BBX 5 6 5 0 +BITMAP +A8 +88 +50 +50 +20 +20 +ENDCHAR +STARTCHAR uni1A0A +ENCODING 6666 +BBX 5 6 6 0 +BITMAP +20 +20 +50 +50 +88 +A8 +ENDCHAR +STARTCHAR uni1A0B +ENCODING 6667 +BBX 9 8 4 -1 +BITMAP +0200 +1100 +2900 +2880 +4480 +4500 +9200 +2800 +ENDCHAR +STARTCHAR uni1A0C +ENCODING 6668 +BBX 7 6 5 0 +BITMAP +24 +24 +52 +42 +94 +88 +ENDCHAR +STARTCHAR uni1A0D +ENCODING 6669 +BBX 8 6 4 0 +BITMAP +04 +0A +11 +31 +4A +84 +ENDCHAR +STARTCHAR uni1A0E +ENCODING 6670 +BBX 9 7 4 -1 +BITMAP +2200 +2200 +5500 +4900 +8080 +9480 +0800 +ENDCHAR +STARTCHAR uni1A0F +ENCODING 6671 +BBX 9 6 4 0 +BITMAP +2200 +2200 +5500 +4900 +9480 +9480 +ENDCHAR +STARTCHAR uni1A10 +ENCODING 6672 +BBX 10 6 3 0 +BITMAP +2100 +2100 +5280 +5280 +8C40 +AD40 +ENDCHAR +STARTCHAR uni1A11 +ENCODING 6673 +BBX 6 6 5 0 +BITMAP +30 +48 +84 +30 +48 +84 +ENDCHAR +STARTCHAR uni1A12 +ENCODING 6674 +BBX 10 6 3 0 +BITMAP +2100 +2100 +5280 +5080 +8A40 +8C40 +ENDCHAR +STARTCHAR uni1A13 +ENCODING 6675 +BBX 10 6 3 0 +BITMAP +2100 +2100 +5280 +5280 +8C40 +8C40 +ENDCHAR +STARTCHAR uni1A14 +ENCODING 6676 +BBX 9 6 4 0 +BITMAP +1800 +6600 +8100 +4080 +3300 +0C00 +ENDCHAR +STARTCHAR uni1A15 +ENCODING 6677 +BBX 10 6 3 0 +BITMAP +2100 +2100 +5280 +5280 +8C40 +8D40 +ENDCHAR +STARTCHAR uni1A16 +ENCODING 6678 +BBX 10 6 3 0 +BITMAP +2100 +5280 +8C40 +8C40 +5280 +2100 +ENDCHAR +STARTCHAR uni1A17 +ENCODING 6679 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -12 8 +BITMAP +80 +ENDCHAR +STARTCHAR uni1A18 +ENCODING 6680 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -5 -2 +BITMAP +80 +ENDCHAR +STARTCHAR uni1A19 +ENCODING 6681 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -16 0 +BITMAP +40 +80 +80 +40 +20 +ENDCHAR +STARTCHAR uni1A1A +ENCODING 6682 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -3 0 +BITMAP +C0 +40 +40 +20 +20 +ENDCHAR +STARTCHAR uni1A1B +ENCODING 6683 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -13 8 +BITMAP +80 +40 +20 +40 +ENDCHAR +STARTCHAR uni1A1E +ENCODING 6686 +BBX 12 10 2 -1 +BITMAP +C000 +C000 +0000 +0000 +0600 +0600 +0000 +0000 +0030 +0030 +ENDCHAR +STARTCHAR uni1A1F +ENCODING 6687 +BBX 5 9 1 -2 +BITMAP +20 +20 +70 +88 +00 +88 +70 +20 +20 +ENDCHAR +STARTCHAR uni1A20 +ENCODING 6688 +BBX 10 7 4 2 +BITMAP +3700 +4880 +8440 +8440 +8440 +4880 +0300 +ENDCHAR +STARTCHAR uni1A21 +ENCODING 6689 +BBX 8 7 5 2 +BITMAP +78 +84 +02 +7A +86 +86 +79 +ENDCHAR +STARTCHAR uni1A22 +ENCODING 6690 +BBX 8 12 5 2 +BITMAP +7C +80 +80 +80 +80 +B8 +C4 +02 +7A +86 +86 +79 +ENDCHAR +STARTCHAR uni1A23 +ENCODING 6691 +BBX 8 7 5 2 +BITMAP +3C +42 +81 +81 +81 +42 +24 +ENDCHAR +STARTCHAR uni1A24 +ENCODING 6692 +BBX 8 12 5 2 +BITMAP +78 +80 +80 +80 +80 +BC +C2 +81 +81 +81 +42 +24 +ENDCHAR +STARTCHAR uni1A25 +ENCODING 6693 +BBX 10 7 4 2 +BITMAP +5000 +AA80 +0A40 +1240 +2240 +2A40 +1580 +ENDCHAR +STARTCHAR uni1A26 +ENCODING 6694 +BBX 8 7 5 2 +BITMAP +3C +42 +81 +41 +81 +99 +65 +ENDCHAR +STARTCHAR uni1A27 +ENCODING 6695 +BBX 6 7 6 2 +BITMAP +70 +88 +44 +24 +44 +88 +70 +ENDCHAR +STARTCHAR uni1A28 +ENCODING 6696 +BBX 9 10 5 2 +BITMAP +1000 +1000 +0800 +6600 +9100 +0880 +0880 +0880 +9100 +6E00 +ENDCHAR +STARTCHAR uni1A29 +ENCODING 6697 +BBX 7 7 6 2 +BITMAP +3C +42 +82 +84 +82 +42 +32 +ENDCHAR +STARTCHAR uni1A2A +ENCODING 6698 +BBX 7 12 5 2 +BITMAP +7C +80 +80 +80 +80 +BC +C2 +82 +84 +82 +42 +32 +ENDCHAR +STARTCHAR uni1A2B +ENCODING 6699 +BBX 9 10 5 2 +BITMAP +1000 +1000 +0800 +6600 +9100 +8880 +4880 +8880 +9100 +6E00 +ENDCHAR +STARTCHAR uni1A2C +ENCODING 6700 +BBX 9 11 5 -2 +BITMAP +6600 +9100 +0880 +0880 +0880 +9100 +EE00 +8000 +8080 +8080 +7F00 +ENDCHAR +STARTCHAR uni1A2D +ENCODING 6701 +BBX 8 7 5 2 +BITMAP +44 +A2 +81 +41 +81 +92 +6C +ENDCHAR +STARTCHAR uni1A2E +ENCODING 6702 +BBX 8 11 5 -2 +BITMAP +44 +A2 +81 +41 +81 +83 +7D +01 +79 +82 +7C +ENDCHAR +STARTCHAR uni1A2F +ENCODING 6703 +BBX 7 8 6 1 +BITMAP +70 +88 +04 +04 +08 +30 +4C +02 +ENDCHAR +STARTCHAR uni1A30 +ENCODING 6704 +BBX 8 7 5 2 +BITMAP +50 +AA +09 +11 +21 +2A +14 +ENDCHAR +STARTCHAR uni1A31 +ENCODING 6705 +BBX 9 7 5 2 +BITMAP +2200 +5500 +9480 +9480 +9480 +4900 +2200 +ENDCHAR +STARTCHAR uni1A32 +ENCODING 6706 +BBX 10 7 4 2 +BITMAP +3700 +4880 +8440 +8440 +8440 +4880 +3300 +ENDCHAR +STARTCHAR uni1A33 +ENCODING 6707 +BBX 8 7 5 2 +BITMAP +7C +82 +41 +29 +45 +95 +69 +ENDCHAR +STARTCHAR uni1A34 +ENCODING 6708 +BBX 8 7 5 2 +BITMAP +4E +91 +82 +84 +82 +41 +3E +ENDCHAR +STARTCHAR uni1A35 +ENCODING 6709 +BBX 8 7 5 2 +BITMAP +3C +42 +81 +81 +81 +5A +24 +ENDCHAR +STARTCHAR uni1A36 +ENCODING 6710 +BBX 8 8 5 1 +BITMAP +38 +44 +80 +80 +80 +5C +22 +01 +ENDCHAR +STARTCHAR uni1A37 +ENCODING 6711 +BBX 8 7 5 2 +BITMAP +24 +42 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni1A38 +ENCODING 6712 +BBX 10 11 5 2 +BITMAP +00C0 +0100 +0200 +0200 +0200 +4200 +8200 +8200 +8200 +4400 +3800 +ENDCHAR +STARTCHAR uni1A39 +ENCODING 6713 +BBX 8 7 5 2 +BITMAP +42 +A5 +85 +45 +85 +92 +6D +ENDCHAR +STARTCHAR uni1A3A +ENCODING 6714 +BBX 8 12 5 2 +BITMAP +7E +81 +80 +80 +7F +01 +41 +81 +41 +81 +52 +2C +ENDCHAR +STARTCHAR uni1A3B +ENCODING 6715 +BBX 8 7 5 2 +BITMAP +24 +5A +81 +81 +81 +42 +24 +ENDCHAR +STARTCHAR uni1A3C +ENCODING 6716 +BBX 8 12 5 2 +BITMAP +7C +80 +80 +80 +80 +A4 +DA +81 +81 +81 +42 +24 +ENDCHAR +STARTCHAR uni1A3D +ENCODING 6717 +BBX 9 7 5 2 +BITMAP +6E00 +9100 +0880 +0880 +0880 +9100 +6600 +ENDCHAR +STARTCHAR uni1A3E +ENCODING 6718 +BBX 9 8 5 1 +BITMAP +2400 +4200 +8100 +8100 +9D00 +4200 +3D00 +0080 +ENDCHAR +STARTCHAR uni1A3F +ENCODING 6719 +BBX 10 7 4 2 +BITMAP +0300 +4880 +8440 +8440 +8440 +4880 +3700 +ENDCHAR +STARTCHAR uni1A40 +ENCODING 6720 +BBX 10 12 5 2 +BITMAP +00C0 +0100 +0100 +0100 +0100 +7100 +8100 +8100 +6100 +8100 +8200 +7C00 +ENDCHAR +STARTCHAR uni1A41 +ENCODING 6721 +BBX 8 7 5 2 +BITMAP +70 +88 +44 +22 +92 +89 +71 +ENDCHAR +STARTCHAR uni1A42 +ENCODING 6722 +BBX 9 11 5 -2 +BITMAP +4400 +AA00 +9100 +4100 +0100 +0100 +7D00 +8300 +9100 +7E80 +0400 +ENDCHAR +STARTCHAR uni1A43 +ENCODING 6723 +BBX 10 7 4 2 +BITMAP +3300 +4880 +8840 +8840 +8440 +4480 +3300 +ENDCHAR +STARTCHAR uni1A44 +ENCODING 6724 +BBX 8 11 5 -2 +BITMAP +78 +84 +02 +02 +7C +02 +7A +86 +92 +7D +04 +ENDCHAR +STARTCHAR uni1A45 +ENCODING 6725 +BBX 8 7 5 2 +BITMAP +3C +42 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni1A46 +ENCODING 6726 +BBX 9 8 5 2 +BITMAP +0080 +3D00 +4200 +9D00 +8100 +8100 +4200 +2400 +ENDCHAR +STARTCHAR uni1A47 +ENCODING 6727 +BBX 9 7 5 2 +BITMAP +6600 +9100 +0880 +0880 +0A80 +9100 +6E80 +ENDCHAR +STARTCHAR uni1A48 +ENCODING 6728 +BBX 9 7 5 2 +BITMAP +6600 +9100 +0880 +0880 +0880 +9100 +6E00 +ENDCHAR +STARTCHAR uni1A49 +ENCODING 6729 +BBX 10 7 4 2 +BITMAP +3300 +4480 +8440 +8840 +8840 +4880 +3300 +ENDCHAR +STARTCHAR uni1A4A +ENCODING 6730 +BBX 8 11 5 -2 +BITMAP +3C +42 +81 +41 +81 +99 +65 +40 +4E +41 +3E +ENDCHAR +STARTCHAR uni1A4B +ENCODING 6731 +BBX 9 9 5 0 +BITMAP +6E00 +9100 +0880 +0880 +0880 +9100 +6600 +0100 +0080 +ENDCHAR +STARTCHAR uni1A4C +ENCODING 6732 +BBX 10 11 4 -2 +BITMAP +3300 +4480 +8440 +8840 +8840 +4880 +3300 +0100 +1900 +2100 +1E00 +ENDCHAR +STARTCHAR uni1A4D +ENCODING 6733 +BBX 8 11 5 -2 +BITMAP +66 +99 +81 +81 +42 +00 +7C +82 +99 +A9 +41 +ENDCHAR +STARTCHAR uni1A4E +ENCODING 6734 +BBX 10 16 5 -2 +BITMAP +1F80 +2040 +2000 +1FC0 +0040 +6640 +9940 +8140 +8140 +4240 +0040 +7C40 +8240 +9940 +A940 +4180 +ENDCHAR +STARTCHAR uni1A4F +ENCODING 6735 +BBX 8 11 5 -2 +BITMAP +3C +42 +01 +01 +81 +C2 +BC +80 +80 +42 +3C +ENDCHAR +STARTCHAR uni1A50 +ENCODING 6736 +BBX 8 16 5 -2 +BITMAP +78 +80 +80 +80 +80 +BC +C2 +01 +01 +81 +C2 +BC +80 +80 +42 +3C +ENDCHAR +STARTCHAR uni1A51 +ENCODING 6737 +BBX 8 11 5 -2 +BITMAP +3C +42 +81 +81 +81 +82 +9C +80 +80 +42 +3C +ENDCHAR +STARTCHAR uni1A52 +ENCODING 6738 +BBX 11 16 3 -2 +BITMAP +4000 +8000 +8000 +8000 +8000 +9B80 +A440 +8220 +8220 +8220 +A440 +9980 +8040 +8020 +8000 +4000 +ENDCHAR +STARTCHAR uni1A53 +ENCODING 6739 +BBX 11 12 4 2 +BITMAP +0060 +0080 +0080 +0080 +0080 +3080 +4880 +8880 +8880 +8480 +4480 +3300 +ENDCHAR +STARTCHAR uni1A54 +ENCODING 6740 +BBX 10 7 5 2 +BITMAP +4900 +A480 +1240 +1240 +1240 +B680 +4900 +ENDCHAR +STARTCHAR uni1A55 +ENCODING 6741 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 16 -13 -2 +BITMAP +40 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uni1A56 +ENCODING 6742 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -13 -2 +BITMAP +64 +92 +4C +ENDCHAR +STARTCHAR uni1A57 +ENCODING 6743 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 13 -8 -2 +BITMAP +06 +01 +01 +01 +01 +01 +01 +01 +01 +01 +65 +92 +4D +ENDCHAR +STARTCHAR uni1A58 +ENCODING 6744 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -5 9 +BITMAP +60 +80 +60 +80 +60 +ENDCHAR +STARTCHAR uni1A59 +ENCODING 6745 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -10 10 +BITMAP +78 +84 +B4 +54 +ENDCHAR +STARTCHAR uni1A5A +ENCODING 6746 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -9 10 +BITMAP +50 +A8 +88 +50 +ENDCHAR +STARTCHAR uni1A5B +ENCODING 6747 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -13 -2 +BITMAP +02 +7A +82 +7C +ENDCHAR +STARTCHAR uni1A5C +ENCODING 6748 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -12 -2 +BITMAP +94 +8C +7A +ENDCHAR +STARTCHAR uni1A5D +ENCODING 6749 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -12 -2 +BITMAP +84 +84 +78 +ENDCHAR +STARTCHAR uni1A5E +ENCODING 6750 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -12 -2 +BITMAP +C8 +24 +D8 +ENDCHAR +STARTCHAR uni1A60 +ENCODING 6752 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -5 -2 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni1A61 +ENCODING 6753 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 5 -2 3 +BITMAP +C0 +00 +00 +00 +C0 +ENDCHAR +STARTCHAR uni1A62 +ENCODING 6754 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -7 10 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni1A63 +ENCODING 6755 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 7 -2 2 +BITMAP +80 +40 +40 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni1A64 +ENCODING 6756 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 10 -5 2 +BITMAP +70 +88 +88 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1A65 +ENCODING 6757 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -10 10 +BITMAP +78 +84 +84 +48 +ENDCHAR +STARTCHAR uni1A66 +ENCODING 6758 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -10 10 +BITMAP +78 +84 +88 +44 +ENDCHAR +STARTCHAR uni1A67 +ENCODING 6759 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -10 10 +BITMAP +7C +82 +92 +44 +ENDCHAR +STARTCHAR uni1A68 +ENCODING 6760 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -11 10 +BITMAP +76 +89 +89 +52 +ENDCHAR +STARTCHAR uni1A69 +ENCODING 6761 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -5 -1 +BITMAP +80 +80 +C0 +ENDCHAR +STARTCHAR uni1A6A +ENCODING 6762 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -6 -1 +BITMAP +A0 +A0 +B0 +ENDCHAR +STARTCHAR uni1A6B +ENCODING 6763 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 9 +BITMAP +F0 +C8 +04 +ENDCHAR +STARTCHAR uni1A6C +ENCODING 6764 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 -2 +BITMAP +40 +90 +6C +ENDCHAR +STARTCHAR uni1A6D +ENCODING 6765 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 15 -4 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +50 +90 +90 +60 +ENDCHAR +STARTCHAR uni1A6E +ENCODING 6766 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 7 -16 2 +BITMAP +40 +80 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uni1A6F +ENCODING 6767 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -16 2 +BITMAP +50 +A0 +A0 +A0 +A0 +A0 +50 +ENDCHAR +STARTCHAR uni1A70 +ENCODING 6768 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 11 -16 2 +BITMAP +40 +80 +80 +80 +40 +80 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uni1A71 +ENCODING 6769 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 10 -16 2 +BITMAP +80 +40 +20 +60 +80 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uni1A72 +ENCODING 6770 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 11 -16 2 +BITMAP +40 +A0 +20 +20 +60 +80 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uni1A73 +ENCODING 6771 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -10 10 +BITMAP +10 +10 +28 +C6 +ENDCHAR +STARTCHAR uni1A74 +ENCODING 6772 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -11 11 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni1A75 +ENCODING 6773 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -12 10 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni1A76 +ENCODING 6774 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -13 10 +BITMAP +10 +A0 +40 +ENDCHAR +STARTCHAR uni1A77 +ENCODING 6775 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -7 10 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni1A78 +ENCODING 6776 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -5 9 +BITMAP +10 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni1A79 +ENCODING 6777 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -5 9 +BITMAP +C0 +20 +C0 +80 +60 +ENDCHAR +STARTCHAR uni1A7A +ENCODING 6778 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -9 10 +BITMAP +38 +24 +92 +72 +ENDCHAR +STARTCHAR uni1A7B +ENCODING 6779 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -5 10 +BITMAP +60 +B0 +A0 +A0 +ENDCHAR +STARTCHAR uni1A7C +ENCODING 6780 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -9 10 +BITMAP +1A +24 +90 +60 +ENDCHAR +STARTCHAR uni1A7F +ENCODING 6783 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -12 -2 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni1A80 +ENCODING 6784 +BBX 7 7 5 2 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni1A81 +ENCODING 6785 +BBX 6 7 5 2 +BITMAP +70 +88 +04 +04 +04 +88 +70 +ENDCHAR +STARTCHAR uni1A82 +ENCODING 6786 +BBX 7 11 5 -2 +BITMAP +02 +02 +02 +02 +02 +02 +02 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni1A83 +ENCODING 6787 +BBX 6 12 5 -2 +BITMAP +70 +88 +04 +04 +04 +88 +70 +40 +20 +20 +10 +08 +ENDCHAR +STARTCHAR uni1A84 +ENCODING 6788 +BBX 6 12 5 -2 +BITMAP +38 +44 +80 +80 +80 +44 +38 +08 +10 +10 +20 +40 +ENDCHAR +STARTCHAR uni1A85 +ENCODING 6789 +BBX 7 11 5 -2 +BITMAP +38 +44 +82 +E2 +92 +62 +02 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni1A86 +ENCODING 6790 +BBX 7 12 5 2 +BITMAP +38 +44 +82 +80 +8C +92 +9C +90 +8E +82 +44 +38 +ENDCHAR +STARTCHAR uni1A87 +ENCODING 6791 +BBX 7 11 5 -2 +BITMAP +70 +88 +88 +88 +88 +88 +48 +08 +08 +08 +06 +ENDCHAR +STARTCHAR uni1A88 +ENCODING 6792 +BBX 7 7 5 2 +BITMAP +38 +44 +82 +82 +A2 +52 +24 +ENDCHAR +STARTCHAR uni1A89 +ENCODING 6793 +BBX 7 12 5 -2 +BITMAP +38 +44 +82 +8E +90 +9C +92 +8C +80 +82 +44 +38 +ENDCHAR +STARTCHAR uni1A90 +ENCODING 6800 +BBX 7 7 5 2 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni1A91 +ENCODING 6801 +BBX 6 8 5 2 +BITMAP +04 +34 +4C +80 +80 +A0 +50 +20 +ENDCHAR +STARTCHAR uni1A92 +ENCODING 6802 +BBX 7 12 5 2 +BITMAP +38 +44 +82 +82 +82 +80 +80 +80 +80 +C0 +A0 +40 +ENDCHAR +STARTCHAR uni1A93 +ENCODING 6803 +BBX 12 10 2 2 +BITMAP +0400 +0400 +0200 +71C0 +8820 +0410 +0410 +0410 +8A20 +71C0 +ENDCHAR +STARTCHAR uni1A94 +ENCODING 6804 +BBX 7 11 5 -2 +BITMAP +4C +92 +84 +88 +84 +42 +7C +40 +5C +42 +3C +ENDCHAR +STARTCHAR uni1A95 +ENCODING 6805 +BBX 7 12 5 2 +BITMAP +04 +04 +08 +30 +40 +8C +92 +84 +88 +84 +42 +7C +ENDCHAR +STARTCHAR uni1A96 +ENCODING 6806 +BBX 7 12 5 2 +BITMAP +02 +04 +04 +04 +04 +44 +A4 +84 +44 +84 +A4 +58 +ENDCHAR +STARTCHAR uni1A97 +ENCODING 6807 +BBX 7 7 5 2 +BITMAP +48 +A4 +82 +42 +82 +A4 +58 +ENDCHAR +STARTCHAR uni1A98 +ENCODING 6808 +BBX 15 11 1 -2 +BITMAP +3180 +4A40 +8420 +8020 +40C0 +0080 +07F0 +0888 +13E4 +1492 +0862 +ENDCHAR +STARTCHAR uni1A99 +ENCODING 6809 +BBX 13 7 2 2 +BITMAP +3860 +4410 +8208 +8208 +A208 +5110 +20E0 +ENDCHAR +STARTCHAR uni1AA0 +ENCODING 6816 +BBX 11 11 3 1 +BITMAP +1F00 +2480 +4440 +8420 +8420 +FFE0 +8420 +8420 +4440 +2480 +1F00 +ENDCHAR +STARTCHAR uni1AA1 +ENCODING 6817 +BBX 11 11 3 1 +BITMAP +1C00 +2400 +4400 +8400 +8400 +FFE0 +8420 +8420 +4440 +2480 +1F00 +ENDCHAR +STARTCHAR uni1AA2 +ENCODING 6818 +BBX 13 12 2 2 +BITMAP +0048 +0130 +00E0 +0340 +0080 +7300 +8880 +0440 +0440 +0440 +8880 +7700 +ENDCHAR +STARTCHAR uni1AA3 +ENCODING 6819 +BBX 11 11 3 1 +BITMAP +0400 +0A00 +0E00 +1100 +64C0 +AAA0 +64C0 +1100 +0E00 +0A00 +0400 +ENDCHAR +STARTCHAR uni1AA4 +ENCODING 6820 +BBX 12 9 2 2 +BITMAP +3F80 +4040 +9F20 +A0A0 +A720 +A040 +9F80 +4030 +3FC0 +ENDCHAR +STARTCHAR uni1AA5 +ENCODING 6821 +BBX 15 15 1 -2 +BITMAP +07C0 +0440 +1290 +2AA8 +1550 +CAA6 +B45A +8822 +B45A +CAA6 +1550 +2AA8 +1290 +0440 +07C0 +ENDCHAR +STARTCHAR uni1AA6 +ENCODING 6822 +BBX 7 13 5 0 +BITMAP +38 +44 +82 +82 +32 +4C +40 +4C +32 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni1AA7 +ENCODING 6823 +BBX 9 12 4 -2 +BITMAP +3B00 +4480 +A480 +4080 +0080 +0100 +0600 +1800 +2000 +4000 +4000 +4000 +ENDCHAR +STARTCHAR uni1AA8 +ENCODING 6824 +BBX 1 7 6 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1AA9 +ENCODING 6825 +BBX 4 7 4 2 +BITMAP +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni1AAA +ENCODING 6826 +BBX 4 7 4 2 +BITMAP +40 +80 +90 +70 +10 +10 +10 +ENDCHAR +STARTCHAR uni1AAB +ENCODING 6827 +BBX 6 7 3 2 +BITMAP +44 +84 +94 +74 +14 +14 +14 +ENDCHAR +STARTCHAR uni1AAC +ENCODING 6828 +BBX 11 11 3 2 +BITMAP +01C0 +0020 +0020 +0E20 +1140 +0180 +7100 +8A00 +0C00 +8800 +7000 +ENDCHAR +STARTCHAR uni1AAD +ENCODING 6829 +BBX 7 11 5 -2 +BITMAP +20 +50 +A0 +88 +44 +82 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni1AB0 +ENCODING 6832 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -7 10 +BITMAP +28 +54 +92 +ENDCHAR +STARTCHAR uni1AB1 +ENCODING 6833 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -7 9 +BITMAP +10 +28 +AA +10 +ENDCHAR +STARTCHAR uni1AB2 +ENCODING 6834 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -7 10 +BITMAP +6C +92 +6C +ENDCHAR +STARTCHAR uni1AB3 +ENCODING 6835 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -6 9 +BITMAP +20 +A8 +70 +20 +ENDCHAR +STARTCHAR uni1AB4 +ENCODING 6836 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -6 10 +BITMAP +20 +88 +ENDCHAR +STARTCHAR uni1AB5 +ENCODING 6837 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -7 -2 +BITMAP +AA +44 +AA +ENDCHAR +STARTCHAR uni1AB6 +ENCODING 6838 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -7 -2 +BITMAP +54 +AA +ENDCHAR +STARTCHAR uni1AB7 +ENCODING 6839 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -4 -2 +BITMAP +80 +80 +40 +ENDCHAR +STARTCHAR uni1AB8 +ENCODING 6840 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -6 -2 +BITMAP +90 +90 +48 +ENDCHAR +STARTCHAR uni1AB9 +ENCODING 6841 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -8 -2 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni1ABA +ENCODING 6842 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -8 -2 +BITMAP +20 +C0 +C0 +ENDCHAR +STARTCHAR uni1ABB +ENCODING 6843 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -8 8 +BITMAP +42 +81 +81 +42 +ENDCHAR +STARTCHAR uni1ABC +ENCODING 6844 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 6 -8 7 +BITMAP +24 +C3 +C3 +C3 +C3 +24 +ENDCHAR +STARTCHAR uni1ABD +ENCODING 6845 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -8 -2 +BITMAP +42 +81 +81 +42 +ENDCHAR +STARTCHAR uni1ABE +ENCODING 6846 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -8 0 +BITMAP +42 +81 +81 +42 +ENDCHAR +STARTCHAR uni1ABF +ENCODING 6847 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -7 -2 +BITMAP +A8 +50 +ENDCHAR +STARTCHAR uni1AC0 +ENCODING 6848 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -7 -2 +BITMAP +50 +A8 +ENDCHAR +STARTCHAR uni1AC1 +ENCODING 6849 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 4 -8 10 +BITMAP +40 +80 +80 +40 +ENDCHAR +STARTCHAR uni1AC2 +ENCODING 6850 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 4 -2 10 +BITMAP +80 +40 +40 +80 +ENDCHAR +STARTCHAR uni1AC3 +ENCODING 6851 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 4 -8 -2 +BITMAP +40 +80 +80 +40 +ENDCHAR +STARTCHAR uni1AC4 +ENCODING 6852 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 4 -2 -2 +BITMAP +80 +40 +40 +80 +ENDCHAR +STARTCHAR uni1AC5 +ENCODING 6853 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -8 10 +BITMAP +C3 +81 +81 +C3 +ENDCHAR +STARTCHAR uni1AC6 +ENCODING 6854 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 -8 9 +BITMAP +24 +FF +24 +FF +24 +ENDCHAR +STARTCHAR uni1AC7 +ENCODING 6855 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 11 +BITMAP +92 +92 +6C +ENDCHAR +STARTCHAR uni1AC8 +ENCODING 6856 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 11 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni1AC9 +ENCODING 6857 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 11 +BITMAP +44 +EE +44 +ENDCHAR +STARTCHAR uni1ACA +ENCODING 6858 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 -2 +BITMAP +44 +EE +44 +ENDCHAR +STARTCHAR uni1ACB +ENCODING 6859 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 2 -8 12 +BITMAP +49 +92 +ENDCHAR +STARTCHAR uni1ACC +ENCODING 6860 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 9 +BITMAP +FC +40 +38 +84 +78 +ENDCHAR +STARTCHAR uni1ACD +ENCODING 6861 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -8 9 +BITMAP +58 +64 +44 +40 +80 +ENDCHAR +STARTCHAR uni1ACE +ENCODING 6862 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -7 10 +BITMAP +F8 +40 +88 +70 +ENDCHAR +STARTCHAR uni1B00 +ENCODING 6912 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -13 10 +BITMAP +7F00 +8880 +9480 +4900 +ENDCHAR +STARTCHAR uni1B01 +ENCODING 6913 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -12 10 +BITMAP +10 +AA +AA +7C +ENDCHAR +STARTCHAR uni1B02 +ENCODING 6914 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -10 10 +BITMAP +40 +A0 +10 +08 +ENDCHAR +STARTCHAR uni1B03 +ENCODING 6915 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -10 10 +BITMAP +80 +40 +3C +ENDCHAR +STARTCHAR uni1B04 +ENCODING 6916 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -3 1 +BITMAP +40 +A0 +20 +40 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni1B05 +ENCODING 6917 +BBX 12 8 2 1 +BITMAP +39C0 +44A0 +9290 +A890 +8BF0 +9290 +4890 +3310 +ENDCHAR +STARTCHAR uni1B06 +ENCODING 6918 +BBX 15 8 0 1 +BITMAP +3800 +4438 +9244 +A882 +8882 +9282 +4944 +3628 +ENDCHAR +STARTCHAR uni1B07 +ENCODING 6919 +BBX 11 9 2 1 +BITMAP +46C0 +A920 +2820 +2820 +1320 +0400 +0300 +0880 +0700 +ENDCHAR +STARTCHAR uni1B08 +ENCODING 6920 +BBX 16 9 0 1 +BITMAP +46CC +A922 +2821 +2821 +1326 +0400 +0300 +0880 +0700 +ENDCHAR +STARTCHAR uni1B09 +ENCODING 6921 +BBX 8 9 4 1 +BITMAP +B8 +44 +04 +08 +30 +40 +9C +A2 +41 +ENDCHAR +STARTCHAR uni1B0A +ENCODING 6922 +BBX 11 9 3 1 +BITMAP +B980 +4440 +0420 +0820 +30C0 +4000 +9C00 +A200 +4100 +ENDCHAR +STARTCHAR uni1B0B +ENCODING 6923 +BBX 10 9 3 1 +BITMAP +4080 +A140 +2140 +1E40 +0C00 +1000 +0C00 +2200 +1C00 +ENDCHAR +STARTCHAR uni1B0C +ENCODING 6924 +BBX 15 9 0 1 +BITMAP +4098 +A144 +2142 +1E42 +0C0C +1000 +0C00 +2200 +1C00 +ENDCHAR +STARTCHAR uni1B0D +ENCODING 6925 +BBX 13 9 2 1 +BITMAP +46C0 +A920 +2828 +29F0 +1220 +0440 +0240 +0180 +0100 +ENDCHAR +STARTCHAR uni1B0E +ENCODING 6926 +BBX 16 9 0 1 +BITMAP +46C0 +A920 +282E +29F1 +1221 +0442 +0249 +0189 +0106 +ENDCHAR +STARTCHAR uni1B0F +ENCODING 6927 +BBX 8 6 3 4 +BITMAP +1C +60 +80 +9C +A2 +61 +ENDCHAR +STARTCHAR uni1B10 +ENCODING 6928 +BBX 16 9 0 1 +BITMAP +46C5 +A92B +282E +2822 +1042 +0782 +0802 +10C2 +0F3C +ENDCHAR +STARTCHAR uni1B11 +ENCODING 6929 +BBX 11 9 0 1 +BITMAP +46C0 +A920 +2820 +2820 +1040 +0780 +0800 +11C0 +0E20 +ENDCHAR +STARTCHAR uni1B12 +ENCODING 6930 +BBX 16 9 0 1 +BITMAP +46CC +A922 +2821 +2821 +1046 +0780 +0800 +11C0 +0E20 +ENDCHAR +STARTCHAR uni1B13 +ENCODING 6931 +BBX 14 6 1 4 +BITMAP +4798 +A854 +2854 +7E54 +A954 +4624 +ENDCHAR +STARTCHAR uni1B14 +ENCODING 6932 +BBX 14 7 1 3 +BITMAP +4780 +A840 +2840 +7E40 +A940 +4638 +0004 +ENDCHAR +STARTCHAR uni1B15 +ENCODING 6933 +BBX 13 6 1 4 +BITMAP +4730 +A8A8 +28A8 +28A8 +2528 +1DC8 +ENDCHAR +STARTCHAR uni1B16 +ENCODING 6934 +BBX 13 6 1 4 +BITMAP +4670 +AA28 +2A28 +2A28 +2AA8 +1148 +ENDCHAR +STARTCHAR uni1B17 +ENCODING 6935 +BBX 11 6 1 4 +BITMAP +46C0 +A920 +2820 +2820 +2820 +1820 +ENDCHAR +STARTCHAR uni1B18 +ENCODING 6936 +BBX 10 6 3 4 +BITMAP +4380 +A240 +2140 +7140 +A940 +4640 +ENDCHAR +STARTCHAR uni1B19 +ENCODING 6937 +BBX 12 6 1 4 +BITMAP +7860 +8450 +8450 +9450 +9450 +6390 +ENDCHAR +STARTCHAR uni1B1A +ENCODING 6938 +BBX 11 7 2 3 +BITMAP +4780 +A840 +2840 +2980 +2840 +1820 +0020 +ENDCHAR +STARTCHAR uni1B1B +ENCODING 6939 +BBX 16 12 0 1 +BITMAP +000C +0012 +000F +46C2 +A922 +2822 +2822 +1042 +0782 +0802 +10C2 +0F3C +ENDCHAR +STARTCHAR uni1B1C +ENCODING 6940 +BBX 16 6 0 4 +BITMAP +46C6 +A929 +2829 +2829 +2829 +1832 +ENDCHAR +STARTCHAR uni1B1D +ENCODING 6941 +BBX 11 9 1 1 +BITMAP +46C0 +A920 +2020 +7020 +A820 +9000 +4200 +4400 +3800 +ENDCHAR +STARTCHAR uni1B1E +ENCODING 6942 +BBX 11 6 1 4 +BITMAP +46C0 +A920 +2020 +2220 +2220 +1C00 +ENDCHAR +STARTCHAR uni1B1F +ENCODING 6943 +BBX 12 6 1 4 +BITMAP +4060 +A050 +2050 +2050 +2650 +1990 +ENDCHAR +STARTCHAR uni1B20 +ENCODING 6944 +BBX 10 6 2 4 +BITMAP +4040 +A040 +2040 +2040 +2640 +1980 +ENDCHAR +STARTCHAR uni1B21 +ENCODING 6945 +BBX 16 6 0 4 +BITMAP +9CE2 +A315 +4015 +0015 +0015 +0019 +ENDCHAR +STARTCHAR uni1B22 +ENCODING 6946 +BBX 14 6 1 4 +BITMAP +4798 +A854 +2E54 +2154 +2154 +1E24 +ENDCHAR +STARTCHAR uni1B23 +ENCODING 6947 +BBX 10 7 2 3 +BITMAP +4780 +A240 +2140 +2940 +2540 +1E40 +0400 +ENDCHAR +STARTCHAR uni1B24 +ENCODING 6948 +BBX 10 6 3 4 +BITMAP +4380 +A440 +2440 +4E40 +9540 +6240 +ENDCHAR +STARTCHAR uni1B25 +ENCODING 6949 +BBX 12 6 2 4 +BITMAP +41E0 +A090 +2050 +2050 +2650 +1990 +ENDCHAR +STARTCHAR uni1B26 +ENCODING 6950 +BBX 10 6 3 4 +BITMAP +4780 +A840 +2840 +7E40 +A940 +4640 +ENDCHAR +STARTCHAR uni1B27 +ENCODING 6951 +BBX 10 6 2 4 +BITMAP +4180 +A140 +2140 +2140 +2140 +1E40 +ENDCHAR +STARTCHAR uni1B28 +ENCODING 6952 +BBX 11 6 2 4 +BITMAP +4220 +A540 +2380 +2100 +2100 +1E00 +ENDCHAR +STARTCHAR uni1B29 +ENCODING 6953 +BBX 15 6 0 4 +BITMAP +46CC +A92A +282A +282A +282A +1832 +ENDCHAR +STARTCHAR uni1B2A +ENCODING 6954 +BBX 12 6 1 4 +BITMAP +41E0 +A210 +1210 +0790 +2A50 +1190 +ENDCHAR +STARTCHAR uni1B2B +ENCODING 6955 +BBX 11 7 2 3 +BITMAP +7EC0 +90A0 +90A0 +0CA0 +10A0 +1120 +0E20 +ENDCHAR +STARTCHAR uni1B2C +ENCODING 6956 +BBX 13 6 1 4 +BITMAP +4010 +A028 +2228 +2228 +2528 +18C8 +ENDCHAR +STARTCHAR uni1B2D +ENCODING 6957 +BBX 10 6 2 4 +BITMAP +4380 +A440 +1440 +1440 +1440 +1840 +ENDCHAR +STARTCHAR uni1B2E +ENCODING 6958 +BBX 15 6 0 4 +BITMAP +460C +A90A +290A +290A +290A +10F2 +ENDCHAR +STARTCHAR uni1B2F +ENCODING 6959 +BBX 10 6 3 4 +BITMAP +4780 +A240 +2140 +2140 +2140 +1E40 +ENDCHAR +STARTCHAR uni1B30 +ENCODING 6960 +BBX 16 6 0 4 +BITMAP +47E6 +A915 +2A95 +2895 +24A5 +1C39 +ENDCHAR +STARTCHAR uni1B31 +ENCODING 6961 +BBX 11 7 1 3 +BITMAP +40C0 +A0A0 +24A0 +2AA0 +22A0 +1FA0 +0200 +ENDCHAR +STARTCHAR uni1B32 +ENCODING 6962 +BBX 10 6 2 4 +BITMAP +4180 +A140 +2140 +7140 +A940 +4640 +ENDCHAR +STARTCHAR uni1B33 +ENCODING 6963 +BBX 15 6 0 4 +BITMAP +40CC +A12A +212A +212A +212A +1E12 +ENDCHAR +STARTCHAR uni1B34 +ENCODING 6964 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -11 10 +BITMAP +20 +00 +88 +ENDCHAR +STARTCHAR uni1B35 +ENCODING 6965 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -4 4 +BITMAP +C0 +20 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni1B36 +ENCODING 6966 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -13 10 +BITMAP +1E +A1 +61 +12 +ENDCHAR +STARTCHAR uni1B37 +ENCODING 6967 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -13 10 +BITMAP +1E +A9 +75 +23 +ENDCHAR +STARTCHAR uni1B38 +ENCODING 6968 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 9 -5 -2 +BITMAP +08 +18 +18 +18 +28 +48 +88 +90 +60 +ENDCHAR +STARTCHAR uni1B39 +ENCODING 6969 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -3 -2 +BITMAP +20 +40 +80 +80 +40 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni1B3A +ENCODING 6970 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 7 -12 -2 +BITMAP +02 +01 +41 +99 +8A +7C +08 +ENDCHAR +STARTCHAR uni1B3B +ENCODING 6971 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 12 -12 -2 +BITMAP +00C0 +0020 +0010 +0010 +0090 +0260 +0100 +4100 +9900 +8A00 +7C00 +0800 +ENDCHAR +STARTCHAR uni1B3C +ENCODING 6972 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 16 -15 -2 +BITMAP +01C0 +0240 +2480 +1500 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +4610 +A910 +2910 +10E0 +ENDCHAR +STARTCHAR uni1B3D +ENCODING 6973 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 16 -15 -2 +BITMAP +01C0 +0240 +2480 +1500 +0018 +0004 +0002 +0002 +0012 +000C +0000 +0000 +4610 +A910 +2910 +10E0 +ENDCHAR +STARTCHAR uni1B3E +ENCODING 6974 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 9 -15 1 +BITMAP +60 +90 +10 +20 +20 +40 +40 +40 +20 +ENDCHAR +STARTCHAR uni1B3F +ENCODING 6975 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 13 -16 1 +BITMAP +38 +40 +30 +08 +30 +B0 +C8 +90 +10 +20 +20 +20 +10 +ENDCHAR +STARTCHAR uni1B40 +ENCODING 6976 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 9 -15 1 +BITMAP +6018 +9004 +1002 +2002 +2012 +400C +4000 +4000 +2000 +ENDCHAR +STARTCHAR uni1B41 +ENCODING 6977 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 13 -16 1 +BITMAP +3800 +4000 +3000 +0800 +300C +B002 +C801 +9001 +1009 +2006 +2000 +2000 +1000 +ENDCHAR +STARTCHAR uni1B42 +ENCODING 6978 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -13 10 +BITMAP +07 +09 +92 +54 +ENDCHAR +STARTCHAR uni1B43 +ENCODING 6979 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 10 -13 4 +BITMAP +0700 +0900 +9200 +5400 +0060 +0010 +0008 +0008 +0048 +0030 +ENDCHAR +STARTCHAR uni1B44 +ENCODING 6980 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 13 -5 1 +BITMAP +70 +88 +88 +08 +10 +10 +10 +10 +10 +10 +10 +08 +08 +ENDCHAR +STARTCHAR uni1B45 +ENCODING 6981 +BBX 14 9 1 1 +BITMAP +4798 +A854 +3854 +7E54 +B954 +5624 +1000 +1100 +0E00 +ENDCHAR +STARTCHAR uni1B46 +ENCODING 6982 +BBX 16 6 0 4 +BITMAP +4716 +A8AD +28AD +7CAD +AAAD +4444 +ENDCHAR +STARTCHAR uni1B47 +ENCODING 6983 +BBX 14 9 1 1 +BITMAP +4798 +A854 +2E54 +2154 +2954 +1E24 +0800 +0880 +0700 +ENDCHAR +STARTCHAR uni1B48 +ENCODING 6984 +BBX 10 9 3 1 +BITMAP +4180 +A140 +2140 +2940 +2940 +1E40 +0800 +0880 +0700 +ENDCHAR +STARTCHAR uni1B49 +ENCODING 6985 +BBX 10 9 3 1 +BITMAP +4780 +A240 +2140 +2940 +2940 +1E40 +0800 +0880 +0700 +ENDCHAR +STARTCHAR uni1B4A +ENCODING 6986 +BBX 10 9 2 1 +BITMAP +4180 +A140 +2140 +7540 +AD40 +4640 +0400 +0440 +0380 +ENDCHAR +STARTCHAR uni1B4B +ENCODING 6987 +BBX 16 7 0 3 +BITMAP +4302 +A2A5 +22A5 +72B5 +AAB5 +44B5 +004D +ENDCHAR +STARTCHAR uni1B4C +ENCODING 6988 +BBX 14 12 1 -2 +BITMAP +61F8 +9204 +9404 +94E4 +1418 +1408 +1204 +0E64 +0080 +0070 +0208 +01F0 +ENDCHAR +STARTCHAR uni1B4E +ENCODING 6990 +BBX 5 9 5 1 +BITMAP +80 +40 +20 +10 +10 +08 +08 +28 +10 +ENDCHAR +STARTCHAR uni1B4F +ENCODING 6991 +BBX 11 9 2 1 +BITMAP +8200 +4100 +2080 +1040 +1040 +0820 +0820 +28A0 +1040 +ENDCHAR +STARTCHAR uni1B50 +ENCODING 6992 +BBX 4 4 6 6 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni1B51 +ENCODING 6993 +BBX 15 9 1 4 +BITMAP +0008 +0014 +000E +46C4 +A924 +2824 +2824 +2828 +1870 +ENDCHAR +STARTCHAR uni1B52 +ENCODING 6994 +BBX 13 9 2 1 +BITMAP +46C0 +A920 +2828 +29F0 +1220 +0440 +0240 +0180 +0100 +ENDCHAR +STARTCHAR uni1B53 +ENCODING 6995 +BBX 11 9 0 1 +BITMAP +46C0 +A920 +2820 +2820 +1040 +0780 +0800 +11C0 +0E20 +ENDCHAR +STARTCHAR uni1B54 +ENCODING 6996 +BBX 5 6 4 2 +BITMAP +B0 +88 +90 +88 +48 +30 +ENDCHAR +STARTCHAR uni1B55 +ENCODING 6997 +BBX 8 11 4 -1 +BITMAP +78 +84 +B2 +8A +92 +8A +4A +32 +02 +02 +01 +ENDCHAR +STARTCHAR uni1B56 +ENCODING 6998 +BBX 8 6 3 4 +BITMAP +1C +60 +80 +9C +A2 +61 +ENDCHAR +STARTCHAR uni1B57 +ENCODING 6999 +BBX 15 6 0 4 +BITMAP +4622 +A954 +2938 +2910 +2910 +18E0 +ENDCHAR +STARTCHAR uni1B58 +ENCODING 7000 +BBX 11 6 2 4 +BITMAP +4220 +A540 +2380 +2100 +2100 +1E00 +ENDCHAR +STARTCHAR uni1B59 +ENCODING 7001 +BBX 14 6 1 4 +BITMAP +4044 +A0A8 +2270 +2220 +2520 +18C0 +ENDCHAR +STARTCHAR uni1B5A +ENCODING 7002 +BBX 16 8 0 2 +BITMAP +0C30 +1248 +1248 +9248 +9248 +6189 +0009 +0006 +ENDCHAR +STARTCHAR uni1B5B +ENCODING 7003 +BBX 16 12 0 -2 +BITMAP +46CC +A92A +282A +282A +282A +180A +023F +124A +118A +100A +118A +0E72 +ENDCHAR +STARTCHAR uni1B5C +ENCODING 7004 +BBX 4 4 6 6 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni1B5D +ENCODING 7005 +BBX 7 7 5 3 +BITMAP +62 +94 +78 +00 +62 +94 +78 +ENDCHAR +STARTCHAR uni1B5E +ENCODING 7006 +BBX 6 9 5 1 +BITMAP +40 +A0 +10 +10 +08 +08 +04 +04 +04 +ENDCHAR +STARTCHAR uni1B5F +ENCODING 7007 +BBX 12 9 2 1 +BITMAP +4100 +A280 +1040 +1040 +0820 +0820 +0410 +0410 +0410 +ENDCHAR +STARTCHAR uni1B60 +ENCODING 7008 +BBX 5 5 5 5 +BITMAP +30 +08 +30 +88 +70 +ENDCHAR +STARTCHAR uni1B61 +ENCODING 7009 +BBX 4 6 12 4 +BITMAP +C0 +20 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni1B62 +ENCODING 7010 +BBX 5 9 5 1 +BITMAP +B0 +C8 +88 +10 +10 +20 +20 +20 +10 +ENDCHAR +STARTCHAR uni1B63 +ENCODING 7011 +BBX 5 9 5 1 +BITMAP +08 +18 +18 +18 +28 +48 +88 +90 +60 +ENDCHAR +STARTCHAR uni1B64 +ENCODING 7012 +BBX 5 6 5 3 +BITMAP +40 +A0 +10 +10 +08 +08 +ENDCHAR +STARTCHAR uni1B65 +ENCODING 7013 +BBX 6 4 6 4 +BITMAP +80 +80 +40 +3C +ENDCHAR +STARTCHAR uni1B66 +ENCODING 7014 +BBX 8 4 3 4 +BITMAP +1E +A1 +61 +12 +ENDCHAR +STARTCHAR uni1B67 +ENCODING 7015 +BBX 8 4 4 4 +BITMAP +07 +09 +92 +54 +ENDCHAR +STARTCHAR uni1B68 +ENCODING 7016 +BBX 3 9 2 1 +BITMAP +20 +40 +80 +80 +40 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni1B69 +ENCODING 7017 +BBX 15 9 0 1 +BITMAP +46CC +A92A +282A +282A +104A +078A +080A +118A +0E72 +ENDCHAR +STARTCHAR uni1B6A +ENCODING 7018 +BBX 3 12 3 -2 +BITMAP +40 +A0 +20 +40 +20 +20 +20 +40 +40 +40 +20 +20 +ENDCHAR +STARTCHAR uni1B6B +ENCODING 7019 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -9 11 +BITMAP +40 +80 +40 +ENDCHAR +STARTCHAR uni1B6C +ENCODING 7020 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -9 -2 +BITMAP +40 +80 +40 +ENDCHAR +STARTCHAR uni1B6D +ENCODING 7021 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -11 9 +BITMAP +60 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni1B6E +ENCODING 7022 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -10 12 +BITMAP +F0 +ENDCHAR +STARTCHAR uni1B6F +ENCODING 7023 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -11 11 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni1B70 +ENCODING 7024 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -12 9 +BITMAP +70 +10 +FE +38 +54 +ENDCHAR +STARTCHAR uni1B71 +ENCODING 7025 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -11 10 +BITMAP +FE +28 +44 +82 +ENDCHAR +STARTCHAR uni1B72 +ENCODING 7026 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -11 11 +BITMAP +88 +50 +20 +ENDCHAR +STARTCHAR uni1B73 +ENCODING 7027 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -11 9 +BITMAP +70 +88 +A8 +88 +70 +ENDCHAR +STARTCHAR uni1B74 +ENCODING 7028 +BBX 5 5 1 4 +BITMAP +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni1B75 +ENCODING 7029 +BBX 4 5 1 4 +BITMAP +60 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni1B76 +ENCODING 7030 +BBX 6 5 0 4 +BITMAP +90 +68 +28 +54 +44 +ENDCHAR +STARTCHAR uni1B77 +ENCODING 7031 +BBX 6 5 0 4 +BITMAP +B8 +44 +64 +54 +38 +ENDCHAR +STARTCHAR uni1B78 +ENCODING 7032 +BBX 4 1 1 5 +BITMAP +F0 +ENDCHAR +STARTCHAR uni1B79 +ENCODING 7033 +BBX 4 6 1 3 +BITMAP +20 +20 +40 +40 +80 +F0 +ENDCHAR +STARTCHAR uni1B7A +ENCODING 7034 +BBX 4 5 1 3 +BITMAP +80 +40 +F0 +20 +10 +ENDCHAR +STARTCHAR uni1B7B +ENCODING 7035 +BBX 6 6 0 3 +BITMAP +90 +50 +20 +30 +48 +7C +ENDCHAR +STARTCHAR uni1B7C +ENCODING 7036 +BBX 2 2 2 5 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni1B7D +ENCODING 7037 +BBX 15 7 0 3 +BITMAP +1000 +2910 +2AAA +2AAA +AAA4 +A440 +4000 +ENDCHAR +STARTCHAR uni1B7E +ENCODING 7038 +BBX 16 9 0 1 +BITMAP +4500 +AAC8 +28D5 +28D5 +2552 +4F50 +B0A0 +4480 +3B00 +ENDCHAR +STARTCHAR uni1B7F +ENCODING 7039 +BBX 7 6 4 4 +BITMAP +0C +12 +12 +90 +90 +60 +ENDCHAR +STARTCHAR uni1B80 +ENCODING 7040 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -7 11 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni1B81 +ENCODING 7041 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 11 +BITMAP +44 +A8 +10 +ENDCHAR +STARTCHAR uni1B82 +ENCODING 7042 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -5 2 +BITMAP +20 +90 +50 +40 +ENDCHAR +STARTCHAR uni1B83 +ENCODING 7043 +BBX 8 7 4 3 +BITMAP +5F +82 +84 +8E +81 +42 +3C +ENDCHAR +STARTCHAR uni1B84 +ENCODING 7044 +BBX 6 7 5 3 +BITMAP +18 +20 +20 +40 +40 +84 +FC +ENDCHAR +STARTCHAR uni1B85 +ENCODING 7045 +BBX 7 7 5 3 +BITMAP +E0 +20 +20 +46 +48 +84 +FC +ENDCHAR +STARTCHAR uni1B86 +ENCODING 7046 +BBX 10 7 3 3 +BITMAP +5F00 +8200 +8780 +8E40 +8100 +4200 +3C00 +ENDCHAR +STARTCHAR uni1B87 +ENCODING 7047 +BBX 7 7 5 3 +BITMAP +E0 +A0 +60 +40 +44 +8A +FA +ENDCHAR +STARTCHAR uni1B88 +ENCODING 7048 +BBX 8 7 4 3 +BITMAP +0F +10 +10 +8F +81 +42 +3C +ENDCHAR +STARTCHAR uni1B89 +ENCODING 7049 +BBX 8 8 4 3 +BITMAP +05 +42 +80 +8F +82 +87 +41 +3E +ENDCHAR +STARTCHAR uni1B8A +ENCODING 7050 +BBX 7 7 5 3 +BITMAP +EE +22 +22 +44 +44 +88 +88 +ENDCHAR +STARTCHAR uni1B8B +ENCODING 7051 +BBX 9 7 4 3 +BITMAP +1F80 +2480 +2480 +4900 +4900 +9200 +9200 +ENDCHAR +STARTCHAR uni1B8C +ENCODING 7052 +BBX 7 7 5 3 +BITMAP +E0 +20 +20 +4E +42 +84 +FC +ENDCHAR +STARTCHAR uni1B8D +ENCODING 7053 +BBX 7 7 5 3 +BITMAP +E0 +20 +20 +48 +44 +82 +FE +ENDCHAR +STARTCHAR uni1B8E +ENCODING 7054 +BBX 10 7 4 3 +BITMAP +7040 +1080 +1080 +2100 +6100 +B200 +4E00 +ENDCHAR +STARTCHAR uni1B8F +ENCODING 7055 +BBX 9 7 4 3 +BITMAP +1800 +2000 +2000 +4000 +5200 +9900 +F480 +ENDCHAR +STARTCHAR uni1B90 +ENCODING 7056 +BBX 6 7 5 3 +BITMAP +E0 +20 +20 +40 +48 +94 +F4 +ENDCHAR +STARTCHAR uni1B91 +ENCODING 7057 +BBX 11 7 4 3 +BITMAP +E3E0 +2420 +2020 +4C40 +4A40 +9280 +F180 +ENDCHAR +STARTCHAR uni1B92 +ENCODING 7058 +BBX 8 7 4 3 +BITMAP +02 +04 +C7 +49 +49 +92 +F2 +ENDCHAR +STARTCHAR uni1B93 +ENCODING 7059 +BBX 9 7 4 3 +BITMAP +1C00 +2000 +2000 +4400 +4A00 +8900 +F880 +ENDCHAR +STARTCHAR uni1B94 +ENCODING 7060 +BBX 7 7 4 3 +BITMAP +F0 +10 +10 +20 +20 +40 +7E +ENDCHAR +STARTCHAR uni1B95 +ENCODING 7061 +BBX 7 7 5 3 +BITMAP +EE +22 +22 +44 +44 +88 +F8 +ENDCHAR +STARTCHAR uni1B96 +ENCODING 7062 +BBX 8 7 5 3 +BITMAP +E1 +22 +22 +44 +44 +88 +F8 +ENDCHAR +STARTCHAR uni1B97 +ENCODING 7063 +BBX 8 7 5 3 +BITMAP +11 +22 +22 +44 +44 +88 +F8 +ENDCHAR +STARTCHAR uni1B98 +ENCODING 7064 +BBX 12 7 4 3 +BITMAP +19F0 +2210 +2010 +4620 +4520 +8940 +F8C0 +ENDCHAR +STARTCHAR uni1B99 +ENCODING 7065 +BBX 8 7 4 3 +BITMAP +7F +01 +E1 +22 +22 +44 +7C +ENDCHAR +STARTCHAR uni1B9A +ENCODING 7066 +BBX 10 7 4 3 +BITMAP +0200 +0400 +C440 +4A40 +4A80 +9280 +F100 +ENDCHAR +STARTCHAR uni1B9B +ENCODING 7067 +BBX 6 7 5 3 +BITMAP +7C +00 +F8 +08 +7C +10 +10 +ENDCHAR +STARTCHAR uni1B9C +ENCODING 7068 +BBX 11 7 4 3 +BITMAP +1C20 +2440 +2440 +4880 +4880 +9100 +9F00 +ENDCHAR +STARTCHAR uni1B9D +ENCODING 7069 +BBX 8 7 4 3 +BITMAP +18 +20 +20 +47 +41 +82 +FE +ENDCHAR +STARTCHAR uni1B9E +ENCODING 7070 +BBX 10 7 4 3 +BITMAP +F780 +1080 +1080 +7BC0 +2100 +4200 +4200 +ENDCHAR +STARTCHAR uni1B9F +ENCODING 7071 +BBX 7 7 5 3 +BITMAP +FE +22 +22 +FC +44 +88 +88 +ENDCHAR +STARTCHAR uni1BA0 +ENCODING 7072 +BBX 10 7 4 3 +BITMAP +03C0 +0240 +E240 +2480 +2480 +4900 +7900 +ENDCHAR +STARTCHAR uni1BA1 +ENCODING 7073 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 8 -11 -2 +BITMAP +00E0 +00A0 +0100 +0100 +0200 +0200 +8200 +FC00 +ENDCHAR +STARTCHAR uni1BA2 +ENCODING 7074 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 3 -12 -2 +BITMAP +4100 +A080 +1F00 +ENDCHAR +STARTCHAR uni1BA3 +ENCODING 7075 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -13 -1 +BITMAP +60 +A0 +B0 +ENDCHAR +STARTCHAR uni1BA4 +ENCODING 7076 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -11 11 +BITMAP +E0 +20 +C0 +ENDCHAR +STARTCHAR uni1BA5 +ENCODING 7077 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -9 -1 +BITMAP +E0 +20 +40 +ENDCHAR +STARTCHAR uni1BA6 +ENCODING 7078 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -16 3 +BITMAP +E0 +20 +70 +80 +E0 +ENDCHAR +STARTCHAR uni1BA7 +ENCODING 7079 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -5 2 +BITMAP +38 +08 +10 +E0 +38 +ENDCHAR +STARTCHAR uni1BA8 +ENCODING 7080 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -13 11 +BITMAP +88 +50 +20 +ENDCHAR +STARTCHAR uni1BA9 +ENCODING 7081 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -14 11 +BITMAP +A4 +68 +10 +ENDCHAR +STARTCHAR uni1BAA +ENCODING 7082 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 11 -5 -2 +BITMAP +F8 +08 +10 +20 +38 +08 +10 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1BAB +ENCODING 7083 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -10 -1 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni1BAC +ENCODING 7084 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -14 -1 +BITMAP +68 +88 +70 +ENDCHAR +STARTCHAR uni1BAD +ENCODING 7085 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -13 -1 +BITMAP +D8 +48 +6C +ENDCHAR +STARTCHAR uni1BAE +ENCODING 7086 +BBX 12 7 4 3 +BITMAP +FDF0 +2510 +2510 +4920 +4920 +9140 +9F40 +ENDCHAR +STARTCHAR uni1BAF +ENCODING 7087 +BBX 12 7 4 3 +BITMAP +FC80 +2480 +2490 +FC90 +4D50 +9550 +9720 +ENDCHAR +STARTCHAR uni1BB0 +ENCODING 7088 +BBX 8 7 4 3 +BITMAP +3C +42 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni1BB1 +ENCODING 7089 +BBX 8 7 4 3 +BITMAP +7E +91 +10 +27 +21 +42 +7E +ENDCHAR +STARTCHAR uni1BB2 +ENCODING 7090 +BBX 8 7 4 3 +BITMAP +70 +90 +10 +20 +39 +42 +7E +ENDCHAR +STARTCHAR uni1BB3 +ENCODING 7091 +BBX 8 7 4 3 +BITMAP +70 +90 +10 +23 +24 +42 +7E +ENDCHAR +STARTCHAR uni1BB4 +ENCODING 7092 +BBX 7 7 5 3 +BITMAP +38 +48 +0A +7C +90 +20 +20 +ENDCHAR +STARTCHAR uni1BB5 +ENCODING 7093 +BBX 7 7 4 3 +BITMAP +6C +AA +28 +44 +44 +82 +FE +ENDCHAR +STARTCHAR uni1BB6 +ENCODING 7094 +BBX 7 7 5 3 +BITMAP +18 +24 +20 +46 +48 +84 +FC +ENDCHAR +STARTCHAR uni1BB7 +ENCODING 7095 +BBX 12 7 2 3 +BITMAP +0E30 +1240 +1240 +2480 +2480 +4900 +CF00 +ENDCHAR +STARTCHAR uni1BB8 +ENCODING 7096 +BBX 12 7 2 3 +BITMAP +7060 +9090 +1080 +2100 +6100 +B200 +4E00 +ENDCHAR +STARTCHAR uni1BB9 +ENCODING 7097 +BBX 7 7 5 3 +BITMAP +78 +A4 +20 +46 +48 +84 +FC +ENDCHAR +STARTCHAR uni1BBA +ENCODING 7098 +BBX 6 11 5 -2 +BITMAP +FC +04 +04 +F8 +08 +10 +10 +20 +20 +40 +40 +ENDCHAR +STARTCHAR uni1BBB +ENCODING 7099 +BBX 7 9 5 1 +BITMAP +EE +22 +22 +44 +44 +88 +F8 +00 +F8 +ENDCHAR +STARTCHAR uni1BBC +ENCODING 7100 +BBX 15 11 1 -1 +BITMAP +181C +2004 +2004 +4608 +4508 +8910 +F892 +0022 +00E4 +0124 +00D8 +ENDCHAR +STARTCHAR uni1BBD +ENCODING 7101 +BBX 12 7 3 3 +BITMAP +79F0 +8910 +C930 +1200 +1200 +1200 +7FC0 +ENDCHAR +STARTCHAR uni1BBE +ENCODING 7102 +BBX 11 7 3 3 +BITMAP +FBE0 +0820 +CB20 +5140 +9240 +2080 +FFE0 +ENDCHAR +STARTCHAR uni1BBF +ENCODING 7103 +BBX 7 7 4 3 +BITMAP +FE +02 +F2 +04 +E4 +08 +C8 +ENDCHAR +STARTCHAR uni1BC0 +ENCODING 7104 +BBX 10 4 1 3 +BITMAP +0380 +8440 +4840 +31C0 +ENDCHAR +STARTCHAR uni1BC1 +ENCODING 7105 +BBX 10 4 1 3 +BITMAP +0380 +8440 +4800 +31C0 +ENDCHAR +STARTCHAR uni1BC2 +ENCODING 7106 +BBX 9 5 1 3 +BITMAP +7700 +8880 +1080 +2100 +4200 +ENDCHAR +STARTCHAR uni1BC3 +ENCODING 7107 +BBX 9 6 1 3 +BITMAP +1C00 +6300 +8080 +0000 +0000 +1980 +ENDCHAR +STARTCHAR uni1BC4 +ENCODING 7108 +BBX 9 6 1 3 +BITMAP +1C00 +6300 +8080 +1100 +2200 +4400 +ENDCHAR +STARTCHAR uni1BC5 +ENCODING 7109 +BBX 9 6 1 3 +BITMAP +1C00 +6300 +8080 +8880 +9480 +6300 +ENDCHAR +STARTCHAR uni1BC6 +ENCODING 7110 +BBX 10 6 1 3 +BITMAP +3F00 +4080 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni1BC7 +ENCODING 7111 +BBX 9 1 1 5 +BITMAP +FF80 +ENDCHAR +STARTCHAR uni1BC8 +ENCODING 7112 +BBX 9 3 1 4 +BITMAP +0700 +8880 +7000 +ENDCHAR +STARTCHAR uni1BC9 +ENCODING 7113 +BBX 11 7 1 3 +BITMAP +FC00 +0000 +0F80 +1040 +2020 +1040 +0F80 +ENDCHAR +STARTCHAR uni1BCA +ENCODING 7114 +BBX 10 7 1 3 +BITMAP +FC00 +0000 +39C0 +0600 +0900 +1080 +0F00 +ENDCHAR +STARTCHAR uni1BCB +ENCODING 7115 +BBX 9 5 1 3 +BITMAP +1C00 +6300 +8080 +8080 +E380 +ENDCHAR +STARTCHAR uni1BCC +ENCODING 7116 +BBX 9 5 1 3 +BITMAP +1C00 +6300 +8080 +0000 +E380 +ENDCHAR +STARTCHAR uni1BCD +ENCODING 7117 +BBX 6 6 3 2 +BITMAP +F8 +80 +80 +78 +04 +04 +ENDCHAR +STARTCHAR uni1BCE +ENCODING 7118 +BBX 9 5 1 3 +BITMAP +1C00 +6300 +8080 +0100 +0200 +ENDCHAR +STARTCHAR uni1BCF +ENCODING 7119 +BBX 9 5 1 3 +BITMAP +1C00 +6300 +8080 +0000 +0380 +ENDCHAR +STARTCHAR uni1BD0 +ENCODING 7120 +BBX 10 6 1 2 +BITMAP +0300 +0C00 +3000 +C1C0 +1800 +0600 +ENDCHAR +STARTCHAR uni1BD1 +ENCODING 7121 +BBX 8 6 1 2 +BITMAP +03 +0C +30 +C0 +18 +06 +ENDCHAR +STARTCHAR uni1BD2 +ENCODING 7122 +BBX 9 7 1 2 +BITMAP +1C00 +6300 +8080 +3E00 +4100 +8080 +0100 +ENDCHAR +STARTCHAR uni1BD3 +ENCODING 7123 +BBX 9 5 1 3 +BITMAP +F800 +0000 +FF80 +0000 +0380 +ENDCHAR +STARTCHAR uni1BD4 +ENCODING 7124 +BBX 10 5 1 3 +BITMAP +F9C0 +2200 +2400 +2600 +1980 +ENDCHAR +STARTCHAR uni1BD5 +ENCODING 7125 +BBX 9 7 1 2 +BITMAP +7000 +8980 +0600 +1800 +6000 +0C00 +0300 +ENDCHAR +STARTCHAR uni1BD6 +ENCODING 7126 +BBX 8 6 2 3 +BITMAP +FF +42 +24 +18 +24 +C3 +ENDCHAR +STARTCHAR uni1BD7 +ENCODING 7127 +BBX 9 4 1 3 +BITMAP +E300 +4480 +4880 +3380 +ENDCHAR +STARTCHAR uni1BD8 +ENCODING 7128 +BBX 10 5 1 3 +BITMAP +7780 +8840 +1000 +1800 +0600 +ENDCHAR +STARTCHAR uni1BD9 +ENCODING 7129 +BBX 9 5 1 3 +BITMAP +1C00 +6300 +8080 +0000 +1C00 +ENDCHAR +STARTCHAR uni1BDA +ENCODING 7130 +BBX 9 5 1 3 +BITMAP +1C00 +6300 +9080 +0800 +0400 +ENDCHAR +STARTCHAR uni1BDB +ENCODING 7131 +BBX 9 4 1 3 +BITMAP +E300 +4480 +4880 +3000 +ENDCHAR +STARTCHAR uni1BDC +ENCODING 7132 +BBX 10 5 1 3 +BITMAP +7000 +8980 +2240 +2440 +1800 +ENDCHAR +STARTCHAR uni1BDD +ENCODING 7133 +BBX 8 7 1 2 +BITMAP +03 +0C +30 +C0 +30 +0C +03 +ENDCHAR +STARTCHAR uni1BDE +ENCODING 7134 +BBX 9 5 2 3 +BITMAP +1C00 +6300 +8080 +4000 +2000 +ENDCHAR +STARTCHAR uni1BDF +ENCODING 7135 +BBX 9 5 1 3 +BITMAP +1C00 +6300 +8080 +0000 +E000 +ENDCHAR +STARTCHAR uni1BE0 +ENCODING 7136 +BBX 9 6 1 3 +BITMAP +0F00 +3080 +4000 +9800 +C600 +3000 +ENDCHAR +STARTCHAR uni1BE1 +ENCODING 7137 +BBX 10 5 1 3 +BITMAP +6000 +9400 +9A40 +9180 +6000 +ENDCHAR +STARTCHAR uni1BE2 +ENCODING 7138 +BBX 8 6 2 2 +BITMAP +C0 +30 +0C +03 +18 +60 +ENDCHAR +STARTCHAR uni1BE3 +ENCODING 7139 +BBX 10 6 1 3 +BITMAP +3F00 +4080 +8C40 +8C40 +4080 +3F00 +ENDCHAR +STARTCHAR uni1BE4 +ENCODING 7140 +BBX 9 7 1 2 +BITMAP +1C00 +6300 +8080 +1C00 +2200 +0000 +1C00 +ENDCHAR +STARTCHAR uni1BE5 +ENCODING 7141 +BBX 9 7 1 2 +BITMAP +1C00 +0000 +2200 +1C00 +8080 +6300 +1C00 +ENDCHAR +STARTCHAR uni1BE6 +ENCODING 7142 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -11 11 +BITMAP +E0 +00 +E0 +ENDCHAR +STARTCHAR uni1BE7 +ENCODING 7143 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -4 3 +BITMAP +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uni1BE8 +ENCODING 7144 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -7 9 +BITMAP +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uni1BE9 +ENCODING 7145 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 1 -15 11 +BITMAP +E0 +ENDCHAR +STARTCHAR uni1BEA +ENCODING 7146 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -5 3 +BITMAP +60 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni1BEB +ENCODING 7147 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -4 3 +BITMAP +C0 +00 +C0 +ENDCHAR +STARTCHAR uni1BEC +ENCODING 7148 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -5 3 +BITMAP +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni1BED +ENCODING 7149 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -11 9 +BITMAP +08 +04 +E2 +04 +08 +ENDCHAR +STARTCHAR uni1BEE +ENCODING 7150 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -6 -1 +BITMAP +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uni1BEF +ENCODING 7151 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -12 9 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni1BF0 +ENCODING 7152 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 1 -3 11 +BITMAP +E0 +ENDCHAR +STARTCHAR uni1BF1 +ENCODING 7153 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -3 11 +BITMAP +E0 +00 +E0 +ENDCHAR +STARTCHAR uni1BF2 +ENCODING 7154 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -4 3 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni1BF3 +ENCODING 7155 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 1 -4 5 +BITMAP +E0 +ENDCHAR +STARTCHAR uni1BFC +ENCODING 7164 +BBX 11 15 2 -2 +BITMAP +4040 +8020 +8E20 +5140 +2080 +5140 +8A20 +8420 +8A20 +5140 +2080 +5140 +8E20 +8020 +4040 +ENDCHAR +STARTCHAR uni1BFD +ENCODING 7165 +BBX 11 11 2 0 +BITMAP +0400 +0A00 +0A00 +1100 +6AC0 +8420 +6AC0 +1100 +0A00 +0A00 +0400 +ENDCHAR +STARTCHAR uni1BFE +ENCODING 7166 +BBX 11 9 2 1 +BITMAP +4440 +8880 +8880 +8880 +4440 +2220 +2220 +2220 +4440 +ENDCHAR +STARTCHAR uni1BFF +ENCODING 7167 +BBX 5 9 4 1 +BITMAP +E0 +10 +08 +08 +08 +08 +08 +10 +E0 +ENDCHAR +STARTCHAR uni1C00 +ENCODING 7168 +BBX 7 7 4 1 +BITMAP +3E +40 +40 +FE +40 +40 +7C +ENDCHAR +STARTCHAR uni1C01 +ENCODING 7169 +BBX 6 7 4 1 +BITMAP +FC +40 +58 +64 +84 +08 +10 +ENDCHAR +STARTCHAR uni1C02 +ENCODING 7170 +BBX 7 7 4 1 +BITMAP +26 +48 +88 +84 +82 +42 +3C +ENDCHAR +STARTCHAR uni1C03 +ENCODING 7171 +BBX 8 7 3 1 +BITMAP +20 +42 +92 +91 +89 +5A +24 +ENDCHAR +STARTCHAR uni1C04 +ENCODING 7172 +BBX 10 7 2 1 +BITMAP +1000 +2100 +4900 +FFC0 +4480 +2D00 +1200 +ENDCHAR +STARTCHAR uni1C05 +ENCODING 7173 +BBX 6 7 4 1 +BITMAP +80 +7C +08 +08 +10 +10 +10 +ENDCHAR +STARTCHAR uni1C06 +ENCODING 7174 +BBX 8 7 3 1 +BITMAP +0C +12 +12 +E1 +12 +12 +0C +ENDCHAR +STARTCHAR uni1C07 +ENCODING 7175 +BBX 7 7 4 1 +BITMAP +06 +08 +78 +98 +24 +42 +FE +ENDCHAR +STARTCHAR uni1C08 +ENCODING 7176 +BBX 7 7 4 1 +BITMAP +36 +48 +94 +94 +88 +40 +20 +ENDCHAR +STARTCHAR uni1C09 +ENCODING 7177 +BBX 7 7 4 1 +BITMAP +82 +7C +20 +52 +8C +40 +20 +ENDCHAR +STARTCHAR uni1C0A +ENCODING 7178 +BBX 6 7 4 1 +BITMAP +20 +10 +48 +A4 +98 +40 +20 +ENDCHAR +STARTCHAR uni1C0B +ENCODING 7179 +BBX 7 7 4 1 +BITMAP +80 +80 +5C +22 +5C +80 +80 +ENDCHAR +STARTCHAR uni1C0C +ENCODING 7180 +BBX 7 7 3 1 +BITMAP +08 +92 +7C +10 +7C +92 +08 +ENDCHAR +STARTCHAR uni1C0D +ENCODING 7181 +BBX 7 7 4 1 +BITMAP +18 +24 +44 +82 +92 +92 +8C +ENDCHAR +STARTCHAR uni1C0E +ENCODING 7182 +BBX 7 7 3 1 +BITMAP +7E +04 +04 +02 +02 +62 +9C +ENDCHAR +STARTCHAR uni1C0F +ENCODING 7183 +BBX 7 5 4 3 +BITMAP +62 +9C +80 +40 +FE +ENDCHAR +STARTCHAR uni1C10 +ENCODING 7184 +BBX 8 7 3 1 +BITMAP +FF +42 +82 +81 +41 +71 +8E +ENDCHAR +STARTCHAR uni1C11 +ENCODING 7185 +BBX 7 7 3 1 +BITMAP +7E +80 +80 +FE +84 +62 +9C +ENDCHAR +STARTCHAR uni1C12 +ENCODING 7186 +BBX 9 7 3 1 +BITMAP +2100 +5280 +9280 +8980 +8880 +4500 +2600 +ENDCHAR +STARTCHAR uni1C13 +ENCODING 7187 +BBX 7 7 4 1 +BITMAP +30 +48 +84 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni1C14 +ENCODING 7188 +BBX 8 7 4 1 +BITMAP +24 +5A +89 +81 +81 +42 +24 +ENDCHAR +STARTCHAR uni1C15 +ENCODING 7189 +BBX 7 7 3 1 +BITMAP +FE +0C +10 +7C +92 +12 +0C +ENDCHAR +STARTCHAR uni1C16 +ENCODING 7190 +BBX 7 7 4 1 +BITMAP +FE +10 +08 +7E +88 +90 +60 +ENDCHAR +STARTCHAR uni1C17 +ENCODING 7191 +BBX 8 7 4 1 +BITMAP +FF +42 +84 +84 +82 +42 +3C +ENDCHAR +STARTCHAR uni1C18 +ENCODING 7192 +BBX 8 7 3 1 +BITMAP +20 +44 +8A +AA +A4 +9B +60 +ENDCHAR +STARTCHAR uni1C19 +ENCODING 7193 +BBX 8 7 3 1 +BITMAP +12 +24 +27 +3C +E4 +12 +09 +ENDCHAR +STARTCHAR uni1C1A +ENCODING 7194 +BBX 6 7 4 1 +BITMAP +30 +40 +88 +70 +84 +88 +70 +ENDCHAR +STARTCHAR uni1C1B +ENCODING 7195 +BBX 7 7 3 1 +BITMAP +82 +7C +40 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni1C1C +ENCODING 7196 +BBX 9 7 3 1 +BITMAP +2200 +5100 +9080 +8880 +8880 +4500 +2600 +ENDCHAR +STARTCHAR uni1C1D +ENCODING 7197 +BBX 8 7 4 1 +BITMAP +03 +84 +44 +FE +44 +44 +38 +ENDCHAR +STARTCHAR uni1C1E +ENCODING 7198 +BBX 7 7 3 1 +BITMAP +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni1C1F +ENCODING 7199 +BBX 7 7 4 1 +BITMAP +30 +48 +84 +FE +82 +44 +38 +ENDCHAR +STARTCHAR uni1C20 +ENCODING 7200 +BBX 7 7 3 1 +BITMAP +20 +42 +8A +AA +A4 +98 +60 +ENDCHAR +STARTCHAR uni1C21 +ENCODING 7201 +BBX 7 7 4 1 +BITMAP +40 +80 +94 +94 +A8 +42 +3C +ENDCHAR +STARTCHAR uni1C22 +ENCODING 7202 +BBX 9 7 3 1 +BITMAP +6E80 +9100 +AA80 +AA80 +9100 +4000 +2000 +ENDCHAR +STARTCHAR uni1C23 +ENCODING 7203 +BBX 7 7 4 1 +BITMAP +7C +92 +14 +38 +4A +44 +3A +ENDCHAR +STARTCHAR uni1C24 +ENCODING 7204 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -4 1 +BITMAP +20 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni1C25 +ENCODING 7205 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 7 -5 1 +BITMAP +80 +40 +40 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni1C26 +ENCODING 7206 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 7 -2 1 +BITMAP +40 +80 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uni1C27 +ENCODING 7207 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 12 -16 0 +BITMAP +40 +A0 +80 +40 +40 +40 +40 +40 +40 +40 +40 +C0 +ENDCHAR +STARTCHAR uni1C28 +ENCODING 7208 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 7 -15 1 +BITMAP +40 +80 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uni1C29 +ENCODING 7209 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 9 -15 1 +BITMAP +7F80 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +4000 +ENDCHAR +STARTCHAR uni1C2A +ENCODING 7210 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 10 -5 -2 +BITMAP +10 +08 +08 +08 +08 +08 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni1C2B +ENCODING 7211 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 11 -5 -2 +BITMAP +30 +08 +10 +08 +08 +08 +08 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni1C2C +ENCODING 7212 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -12 -2 +BITMAP +20 +40 +F0 +ENDCHAR +STARTCHAR uni1C2D +ENCODING 7213 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -10 10 +BITMAP +40 +80 +C0 +ENDCHAR +STARTCHAR uni1C2E +ENCODING 7214 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 1 -10 11 +BITMAP +A0 +ENDCHAR +STARTCHAR uni1C2F +ENCODING 7215 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -11 11 +BITMAP +20 +88 +ENDCHAR +STARTCHAR uni1C30 +ENCODING 7216 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 10 +BITMAP +78 +84 +18 +ENDCHAR +STARTCHAR uni1C31 +ENCODING 7217 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -10 10 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni1C32 +ENCODING 7218 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -11 11 +BITMAP +64 +98 +ENDCHAR +STARTCHAR uni1C33 +ENCODING 7219 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 -11 11 +BITMAP +F8 +ENDCHAR +STARTCHAR uni1C34 +ENCODING 7220 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -16 1 +BITMAP +80 +40 +A0 +A0 +A0 +40 +80 +ENDCHAR +STARTCHAR uni1C35 +ENCODING 7221 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 4 -16 2 +BITMAP +40 +80 +80 +40 +ENDCHAR +STARTCHAR uni1C36 +ENCODING 7222 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 2 -13 12 +BITMAP +7F +80 +ENDCHAR +STARTCHAR uni1C37 +ENCODING 7223 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -7 -1 +BITMAP +80 +ENDCHAR +STARTCHAR uni1C3B +ENCODING 7227 +BBX 1 6 8 1 +BITMAP +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1C3C +ENCODING 7228 +BBX 4 6 6 1 +BITMAP +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni1C3D +ENCODING 7229 +BBX 5 5 6 1 +BITMAP +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni1C3E +ENCODING 7230 +BBX 7 5 5 1 +BITMAP +44 +28 +92 +28 +44 +ENDCHAR +STARTCHAR uni1C3F +ENCODING 7231 +BBX 10 7 3 1 +BITMAP +8440 +4880 +2500 +2100 +2500 +4880 +8440 +ENDCHAR +STARTCHAR uni1C40 +ENCODING 7232 +BBX 5 5 5 2 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1C41 +ENCODING 7233 +BBX 4 7 6 1 +BITMAP +40 +A0 +B0 +50 +10 +20 +40 +ENDCHAR +STARTCHAR uni1C42 +ENCODING 7234 +BBX 7 7 4 1 +BITMAP +7C +82 +0C +30 +40 +30 +0C +ENDCHAR +STARTCHAR uni1C43 +ENCODING 7235 +BBX 9 7 3 1 +BITMAP +7C00 +8200 +3F00 +4080 +0100 +3E00 +0100 +ENDCHAR +STARTCHAR uni1C44 +ENCODING 7236 +BBX 8 6 4 2 +BITMAP +22 +5C +40 +80 +83 +7C +ENDCHAR +STARTCHAR uni1C45 +ENCODING 7237 +BBX 8 7 4 1 +BITMAP +81 +42 +46 +4A +52 +62 +81 +ENDCHAR +STARTCHAR uni1C46 +ENCODING 7238 +BBX 8 7 4 1 +BITMAP +02 +05 +08 +04 +82 +61 +1E +ENDCHAR +STARTCHAR uni1C47 +ENCODING 7239 +BBX 5 7 5 1 +BITMAP +10 +88 +48 +48 +28 +30 +40 +ENDCHAR +STARTCHAR uni1C48 +ENCODING 7240 +BBX 6 7 5 1 +BITMAP +30 +48 +40 +80 +80 +70 +0C +ENDCHAR +STARTCHAR uni1C49 +ENCODING 7241 +BBX 5 7 6 1 +BITMAP +60 +90 +A0 +98 +80 +80 +40 +ENDCHAR +STARTCHAR uni1C4D +ENCODING 7245 +BBX 8 7 3 1 +BITMAP +FC +04 +1F +04 +04 +04 +08 +ENDCHAR +STARTCHAR uni1C4E +ENCODING 7246 +BBX 8 7 3 1 +BITMAP +FC +04 +1F +04 +1F +04 +08 +ENDCHAR +STARTCHAR uni1C4F +ENCODING 7247 +BBX 8 7 3 1 +BITMAP +69 +9F +09 +09 +09 +79 +82 +ENDCHAR +STARTCHAR uni1C50 +ENCODING 7248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +70 +88 +88 +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1C51 +ENCODING 7249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +C4 +A4 +94 +8C +80 +80 +80 +80 +40 +20 +1C +ENDCHAR +STARTCHAR uni1C52 +ENCODING 7250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +30 +48 +48 +28 +10 +20 +40 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni1C53 +ENCODING 7251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +64 +94 +94 +7C +20 +40 +40 +80 +80 +60 +18 +ENDCHAR +STARTCHAR uni1C54 +ENCODING 7252 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +3C +40 +80 +80 +80 +C0 +A4 +9C +84 +48 +30 +ENDCHAR +STARTCHAR uni1C55 +ENCODING 7253 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +20 +40 +8C +90 +A0 +A0 +90 +8C +84 +48 +30 +ENDCHAR +STARTCHAR uni1C56 +ENCODING 7254 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +B8 +44 +A4 +98 +80 +80 +80 +80 +40 +20 +18 +ENDCHAR +STARTCHAR uni1C57 +ENCODING 7255 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +18 +A4 +64 +08 +10 +20 +40 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni1C58 +ENCODING 7256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +68 +94 +B4 +C8 +80 +80 +80 +80 +84 +48 +30 +ENDCHAR +STARTCHAR uni1C59 +ENCODING 7257 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +38 +40 +80 +80 +80 +98 +A4 +A4 +94 +48 +30 +ENDCHAR +STARTCHAR uni1C5A +ENCODING 7258 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +38 +44 +CC +14 +24 +44 +84 +84 +84 +44 +38 +ENDCHAR +STARTCHAR uni1C5B +ENCODING 7259 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1C5C +ENCODING 7260 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +38 +44 +80 +80 +9C +A0 +A0 +9C +84 +48 +30 +ENDCHAR +STARTCHAR uni1C5D +ENCODING 7261 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +38 +44 +88 +90 +20 +4C +20 +90 +88 +44 +38 +ENDCHAR +STARTCHAR uni1C5E +ENCODING 7262 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +90 +A8 +C4 +84 +84 +84 +84 +C4 +A8 +90 +80 +ENDCHAR +STARTCHAR uni1C5F +ENCODING 7263 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +24 +5A +DA +12 +32 +52 +52 +92 +A2 +A4 +48 +ENDCHAR +STARTCHAR uni1C60 +ENCODING 7264 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +90 +A8 +C4 +84 +84 +84 +84 +44 +28 +10 +ENDCHAR +STARTCHAR uni1C61 +ENCODING 7265 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +90 +88 +84 +84 +84 +84 +84 +84 +C4 +A8 +90 +ENDCHAR +STARTCHAR uni1C62 +ENCODING 7266 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +24 +44 +84 +84 +84 +84 +84 +84 +8C +54 +24 +ENDCHAR +STARTCHAR uni1C63 +ENCODING 7267 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +64 +92 +8A +0A +0A +12 +E2 +82 +42 +24 +18 +ENDCHAR +STARTCHAR uni1C64 +ENCODING 7268 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +70 +88 +0C +14 +14 +24 +24 +44 +44 +84 +84 +ENDCHAR +STARTCHAR uni1C65 +ENCODING 7269 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +84 +84 +88 +88 +90 +90 +A0 +A0 +C0 +44 +38 +ENDCHAR +STARTCHAR uni1C66 +ENCODING 7270 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +44 +44 +82 +82 +82 +82 +82 +82 +92 +AA +44 +ENDCHAR +STARTCHAR uni1C67 +ENCODING 7271 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +20 +50 +88 +84 +84 +84 +84 +8C +54 +24 +04 +ENDCHAR +STARTCHAR uni1C68 +ENCODING 7272 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +78 +04 +02 +42 +22 +12 +0A +06 +22 +52 +8C +ENDCHAR +STARTCHAR uni1C69 +ENCODING 7273 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +90 +A8 +C4 +84 +04 +04 +84 +44 +28 +10 +ENDCHAR +STARTCHAR uni1C6A +ENCODING 7274 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +38 +44 +44 +44 +44 +44 +44 +44 +BA +82 +7C +ENDCHAR +STARTCHAR uni1C6B +ENCODING 7275 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +28 +44 +82 +92 +54 +10 +70 +40 +44 +38 +ENDCHAR +STARTCHAR uni1C6C +ENCODING 7276 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +44 +AA +92 +82 +82 +82 +82 +82 +82 +44 +44 +ENDCHAR +STARTCHAR uni1C6D +ENCODING 7277 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +30 +48 +84 +84 +8C +90 +A0 +A0 +A2 +92 +4C +ENDCHAR +STARTCHAR uni1C6E +ENCODING 7278 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +70 +88 +08 +10 +10 +20 +20 +40 +40 +84 +78 +ENDCHAR +STARTCHAR uni1C6F +ENCODING 7279 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +3C +62 +A4 +A4 +24 +24 +24 +25 +25 +46 +3C +ENDCHAR +STARTCHAR uni1C70 +ENCODING 7280 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +58 +94 +92 +92 +92 +92 +92 +92 +92 +52 +34 +ENDCHAR +STARTCHAR uni1C71 +ENCODING 7281 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +3C +C6 +44 +44 +48 +48 +50 +50 +60 +22 +1C +ENDCHAR +STARTCHAR uni1C72 +ENCODING 7282 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +38 +44 +06 +0A +0A +12 +12 +22 +22 +C3 +7E +ENDCHAR +STARTCHAR uni1C73 +ENCODING 7283 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +30 +48 +84 +1C +24 +24 +24 +1C +84 +48 +30 +ENDCHAR +STARTCHAR uni1C74 +ENCODING 7284 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +90 +A8 +C4 +84 +84 +84 +84 +84 +84 +88 +90 +ENDCHAR +STARTCHAR uni1C75 +ENCODING 7285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +34 +52 +92 +92 +92 +92 +92 +92 +92 +94 +58 +ENDCHAR +STARTCHAR uni1C76 +ENCODING 7286 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +62 +92 +88 +08 +0A +12 +E2 +82 +42 +24 +18 +ENDCHAR +STARTCHAR uni1C77 +ENCODING 7287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +18 +24 +22 +12 +4E +82 +82 +82 +92 +AA +44 +ENDCHAR +STARTCHAR uni1C78 +ENCODING 7288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 8 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni1C79 +ENCODING 7289 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 1 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni1C7A +ENCODING 7290 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 9 3 1 +BITMAP +C0 +C0 +00 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni1C7B +ENCODING 7291 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 0 5 +BITMAP +60 +92 +0C +ENDCHAR +STARTCHAR uni1C7C +ENCODING 7292 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 1 2 6 +BITMAP +E0 +ENDCHAR +STARTCHAR uni1C7D +ENCODING 7293 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +60 +90 +88 +48 +38 +08 +08 +08 +88 +50 +20 +ENDCHAR +STARTCHAR uni1C7E +ENCODING 7294 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 7 3 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1C7F +ENCODING 7295 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 2 +BITMAP +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni1C80 +ENCODING 7296 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +38 +54 +94 +88 +80 +88 +94 +54 +38 +ENDCHAR +STARTCHAR uni1C81 +ENCODING 7297 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +3C +24 +44 +44 +44 +44 +44 +FE +82 +82 +ENDCHAR +STARTCHAR uni1C82 +ENCODING 7298 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +70 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1C83 +ENCODING 7299 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +38 +44 +80 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni1C84 +ENCODING 7300 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +64 +9C +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni1C85 +ENCODING 7301 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni1C86 +ENCODING 7302 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E0 +20 +20 +20 +20 +20 +38 +24 +24 +38 +ENDCHAR +STARTCHAR uni1C87 +ENCODING 7303 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +40 +40 +F0 +40 +40 +40 +40 +78 +44 +44 +44 +78 +ENDCHAR +STARTCHAR uni1C88 +ENCODING 7304 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +88 +94 +54 +50 +20 +70 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1C89 +ENCODING 7305 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +20 +20 +20 +20 +20 +38 +24 +24 +38 +ENDCHAR +STARTCHAR uni1C8A +ENCODING 7306 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +20 +20 +20 +38 +24 +24 +38 +ENDCHAR +STARTCHAR uni1C90 +ENCODING 7312 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +40 +20 +20 +10 +08 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni1C91 +ENCODING 7313 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +70 +10 +10 +68 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1C92 +ENCODING 7314 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +60 +90 +90 +10 +10 +68 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1C93 +ENCODING 7315 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +58 +A4 +A4 +A4 +A4 +98 +80 +40 +38 +C4 +ENDCHAR +STARTCHAR uni1C94 +ENCODING 7316 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +04 +04 +44 +84 +84 +78 +ENDCHAR +STARTCHAR uni1C95 +ENCODING 7317 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +38 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni1C96 +ENCODING 7318 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +A0 +A0 +A8 +70 +38 +24 +24 +24 +18 +ENDCHAR +STARTCHAR uni1C97 +ENCODING 7319 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +68 +94 +94 +94 +94 +94 +94 +94 +94 +64 +ENDCHAR +STARTCHAR uni1C98 +ENCODING 7320 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +48 +ENDCHAR +STARTCHAR uni1C99 +ENCODING 7321 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +18 +04 +04 +04 +38 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni1C9A +ENCODING 7322 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +54 +AA +AA +AA +82 +82 +84 +40 +3C +C2 +ENDCHAR +STARTCHAR uni1C9B +ENCODING 7323 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +04 +7C +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1C9C +ENCODING 7324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +78 +80 +80 +80 +F8 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1C9D +ENCODING 7325 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +50 +A8 +A8 +A8 +A8 +88 +88 +88 +88 +48 +ENDCHAR +STARTCHAR uni1C9E +ENCODING 7326 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +30 +08 +04 +04 +38 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni1C9F +ENCODING 7327 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +0C +14 +A4 +A4 +44 +04 +24 +44 +44 +38 +ENDCHAR +STARTCHAR uni1CA0 +ENCODING 7328 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +70 +80 +D0 +A8 +A8 +A8 +A8 +88 +48 +ENDCHAR +STARTCHAR uni1CA1 +ENCODING 7329 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +90 +A0 +90 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1CA2 +ENCODING 7330 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +48 +78 +CC +CC +B4 +84 +84 +78 +ENDCHAR +STARTCHAR uni1CA3 +ENCODING 7331 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +D8 +24 +24 +04 +04 +04 +04 +44 +44 +38 +ENDCHAR +STARTCHAR uni1CA4 +ENCODING 7332 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +68 +94 +94 +94 +94 +68 +04 +24 +44 +38 +ENDCHAR +STARTCHAR uni1CA5 +ENCODING 7333 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +18 +08 +08 +38 +48 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni1CA6 +ENCODING 7334 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +58 +A4 +A4 +A4 +84 +88 +80 +40 +38 +C4 +ENDCHAR +STARTCHAR uni1CA7 +ENCODING 7335 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +44 +84 +84 +4C +34 +04 +44 +84 +84 +78 +ENDCHAR +STARTCHAR uni1CA8 +ENCODING 7336 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +50 +A8 +A8 +08 +08 +38 +48 +48 +48 +30 +ENDCHAR +STARTCHAR uni1CA9 +ENCODING 7337 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +F0 +80 +B8 +C4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni1CAA +ENCODING 7338 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +98 +84 +84 +84 +B8 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1CAB +ENCODING 7339 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +04 +04 +04 +04 +7C +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1CAC +ENCODING 7340 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +50 +A8 +A8 +A8 +80 +F8 +88 +50 +50 +20 +ENDCHAR +STARTCHAR uni1CAD +ENCODING 7341 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +30 +50 +10 +32 +4C +3A +08 +88 +70 +ENDCHAR +STARTCHAR uni1CAE +ENCODING 7342 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +90 +A0 +F0 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1CAF +ENCODING 7343 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +CC +A2 +A2 +24 +14 +18 +30 +4A +2A +C4 +ENDCHAR +STARTCHAR uni1CB0 +ENCODING 7344 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +18 +04 +24 +18 +04 +24 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni1CB1 +ENCODING 7345 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +C8 +A6 +A1 +A9 +A6 +C1 +92 +8C +44 +38 +ENDCHAR +STARTCHAR uni1CB2 +ENCODING 7346 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +48 +48 +30 +48 +84 +ENDCHAR +STARTCHAR uni1CB3 +ENCODING 7347 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +7C +04 +08 +10 +38 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni1CB4 +ENCODING 7348 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +20 +18 +04 +04 +38 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni1CB5 +ENCODING 7349 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +88 +7C +08 +7C +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1CB6 +ENCODING 7350 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +70 +A8 +A8 +70 +20 +20 +20 +ENDCHAR +STARTCHAR uni1CB7 +ENCODING 7351 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +08 +10 +20 +40 +84 +84 +78 +ENDCHAR +STARTCHAR uni1CB8 +ENCODING 7352 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +88 +84 +84 +84 +C8 +B0 +80 +88 +84 +78 +ENDCHAR +STARTCHAR uni1CB9 +ENCODING 7353 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +78 +20 +24 +24 +18 +ENDCHAR +STARTCHAR uni1CBA +ENCODING 7354 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +60 +18 +38 +44 +80 +ENDCHAR +STARTCHAR uni1CBD +ENCODING 7357 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +40 +20 +10 +08 +84 +84 +78 +ENDCHAR +STARTCHAR uni1CBE +ENCODING 7358 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +48 +30 +48 +48 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1CBF +ENCODING 7359 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1CC0 +ENCODING 7360 +BBX 11 11 2 1 +BITMAP +0A00 +0400 +0E00 +1100 +A4A0 +6AC0 +A4A0 +1100 +0E00 +0400 +0A00 +ENDCHAR +STARTCHAR uni1CC1 +ENCODING 7361 +BBX 7 7 5 3 +BITMAP +38 +44 +AA +92 +AA +44 +38 +ENDCHAR +STARTCHAR uni1CC2 +ENCODING 7362 +BBX 7 7 5 3 +BITMAP +38 +44 +BA +82 +BA +44 +38 +ENDCHAR +STARTCHAR uni1CC3 +ENCODING 7363 +BBX 7 7 5 3 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni1CC4 +ENCODING 7364 +BBX 16 11 0 -1 +BITMAP +1BBB +2008 +23CB +4810 +5596 +9420 +F2AC +0020 +01C8 +0248 +01B0 +ENDCHAR +STARTCHAR uni1CC5 +ENCODING 7365 +BBX 10 7 3 3 +BITMAP +E7C0 +2000 +2780 +4000 +4F00 +8000 +9E00 +ENDCHAR +STARTCHAR uni1CC6 +ENCODING 7366 +BBX 15 7 1 3 +BITMAP +1DFE +2000 +21FC +4400 +4A78 +8900 +F8B0 +ENDCHAR +STARTCHAR uni1CC7 +ENCODING 7367 +BBX 16 7 0 3 +BITMAP +667D +0884 +C805 +1188 +914B +2250 +BE36 +ENDCHAR +STARTCHAR uni1CD0 +ENCODING 7376 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 11 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni1CD1 +ENCODING 7377 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 11 +BITMAP +20 +70 +A8 +ENDCHAR +STARTCHAR uni1CD2 +ENCODING 7378 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 -10 12 +BITMAP +F8 +ENDCHAR +STARTCHAR uni1CD3 +ENCODING 7379 +BBX 6 3 5 10 +BITMAP +24 +48 +90 +ENDCHAR +STARTCHAR uni1CD4 +ENCODING 7380 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 1 -6 6 +BITMAP +E0 +ENDCHAR +STARTCHAR uni1CD5 +ENCODING 7381 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -12 -2 +BITMAP +89 +49 +36 +ENDCHAR +STARTCHAR uni1CD6 +ENCODING 7382 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -11 -2 +BITMAP +80 +FC +ENDCHAR +STARTCHAR uni1CD7 +ENCODING 7383 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 -2 +BITMAP +60 +80 +7C +ENDCHAR +STARTCHAR uni1CD8 +ENCODING 7384 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 -2 +BITMAP +84 +44 +38 +ENDCHAR +STARTCHAR uni1CD9 +ENCODING 7385 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 -2 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni1CDA +ENCODING 7386 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -9 11 +BITMAP +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni1CDB +ENCODING 7387 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 11 +BITMAP +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni1CDC +ENCODING 7388 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -8 -2 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni1CDD +ENCODING 7389 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -8 -1 +BITMAP +80 +ENDCHAR +STARTCHAR uni1CDE +ENCODING 7390 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -9 -1 +BITMAP +90 +ENDCHAR +STARTCHAR uni1CDF +ENCODING 7391 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 1 -11 -1 +BITMAP +92 +ENDCHAR +STARTCHAR uni1CE0 +ENCODING 7392 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -8 11 +BITMAP +7C +80 +60 +ENDCHAR +STARTCHAR uni1CE1 +ENCODING 7393 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 16 -8 -2 +BITMAP +0C +12 +11 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uni1CE2 +ENCODING 7394 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -11 3 +BITMAP +48 +00 +FC +00 +48 +ENDCHAR +STARTCHAR uni1CE3 +ENCODING 7395 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -7 5 +BITMAP +40 +20 +10 +10 +E0 +ENDCHAR +STARTCHAR uni1CE4 +ENCODING 7396 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -13 5 +BITMAP +20 +40 +80 +80 +70 +ENDCHAR +STARTCHAR uni1CE5 +ENCODING 7397 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -13 1 +BITMAP +70 +80 +80 +40 +20 +ENDCHAR +STARTCHAR uni1CE6 +ENCODING 7398 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -7 1 +BITMAP +E0 +10 +10 +20 +40 +ENDCHAR +STARTCHAR uni1CE7 +ENCODING 7399 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -7 5 +BITMAP +30 +48 +40 +20 +10 +10 +E0 +ENDCHAR +STARTCHAR uni1CE8 +ENCODING 7400 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -14 -1 +BITMAP +38 +40 +40 +20 +10 +90 +60 +ENDCHAR +STARTCHAR uni1CE9 +ENCODING 7401 +BBX 11 9 2 1 +BITMAP +3180 +4A40 +B1A0 +8020 +8020 +8020 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni1CEA +ENCODING 7402 +BBX 9 10 3 1 +BITMAP +2200 +5500 +5500 +2200 +4100 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni1CEB +ENCODING 7403 +BBX 9 10 3 1 +BITMAP +2300 +5480 +5380 +2080 +4080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni1CEC +ENCODING 7404 +BBX 11 10 3 1 +BITMAP +2000 +5100 +5280 +2280 +4180 +80C0 +80A0 +8120 +4240 +3C00 +ENDCHAR +STARTCHAR uni1CED +ENCODING 7405 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -9 -2 +BITMAP +80 +40 +20 +10 +ENDCHAR +STARTCHAR uni1CEE +ENCODING 7406 +BBX 7 9 4 2 +BITMAP +78 +80 +80 +80 +72 +40 +40 +44 +38 +ENDCHAR +STARTCHAR uni1CEF +ENCODING 7407 +BBX 6 9 4 2 +BITMAP +78 +84 +90 +40 +3C +40 +50 +48 +30 +ENDCHAR +STARTCHAR uni1CF0 +ENCODING 7408 +BBX 7 11 5 2 +BITMAP +30 +48 +40 +22 +30 +48 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni1CF1 +ENCODING 7409 +BBX 8 9 4 1 +BITMAP +20 +40 +84 +80 +7E +01 +21 +02 +04 +ENDCHAR +STARTCHAR uni1CF2 +ENCODING 7410 +BBX 8 8 4 2 +BITMAP +81 +42 +3C +00 +00 +3C +42 +81 +ENDCHAR +STARTCHAR uni1CF3 +ENCODING 7411 +BBX 8 8 4 2 +BITMAP +81 +42 +24 +24 +24 +24 +42 +81 +ENDCHAR +STARTCHAR uni1CF4 +ENCODING 7412 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -13 10 +BITMAP +84 +44 +38 +ENDCHAR +STARTCHAR uni1CF5 +ENCODING 7413 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +9010 +0821 +8440 +0281 +8100 +0281 +8440 +0821 +9010 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni1CF6 +ENCODING 7414 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0001 +8000 +1111 +9110 +0EE1 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni1CF7 +ENCODING 7415 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 15 -5 -1 +BITMAP +18 +20 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +80 +80 +80 +ENDCHAR +STARTCHAR uni1CF8 +ENCODING 7416 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -11 9 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni1CF9 +ENCODING 7417 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 4 -14 9 +BITMAP +60C0 +9120 +9120 +60C0 +ENDCHAR +STARTCHAR uni1CFA +ENCODING 7418 +BBX 9 9 3 1 +BITMAP +6300 +9480 +E380 +7F00 +0000 +6300 +9480 +E380 +7F00 +ENDCHAR +STARTCHAR uni1D00 +ENCODING 7424 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +20 +50 +88 +88 +F8 +88 +88 +88 +ENDCHAR +STARTCHAR uni1D01 +ENCODING 7425 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +3C +50 +90 +FC +90 +90 +90 +9C +ENDCHAR +STARTCHAR uni1D02 +ENCODING 7426 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +92 +12 +12 +FC +90 +92 +7C +ENDCHAR +STARTCHAR uni1D03 +ENCODING 7427 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +78 +44 +48 +FE +48 +44 +44 +78 +ENDCHAR +STARTCHAR uni1D04 +ENCODING 7428 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1D05 +ENCODING 7429 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +F0 +88 +88 +88 +88 +88 +88 +F0 +ENDCHAR +STARTCHAR uni1D06 +ENCODING 7430 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 0 +BITMAP +78 +44 +44 +E4 +44 +44 +44 +78 +ENDCHAR +STARTCHAR uni1D07 +ENCODING 7431 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +F8 +80 +80 +F0 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni1D08 +ENCODING 7432 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +04 +38 +04 +84 +78 +ENDCHAR +STARTCHAR uni1D09 +ENCODING 7433 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +F8 +20 +20 +20 +20 +20 +30 +00 +20 +20 +ENDCHAR +STARTCHAR uni1D0A +ENCODING 7434 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +3E +08 +08 +08 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni1D0B +ENCODING 7435 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +88 +90 +A0 +C0 +C0 +A0 +90 +88 +ENDCHAR +STARTCHAR uni1D0C +ENCODING 7436 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +40 +40 +50 +60 +40 +C0 +40 +7C +ENDCHAR +STARTCHAR uni1D0D +ENCODING 7437 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +88 +88 +D8 +D8 +A8 +A8 +88 +88 +ENDCHAR +STARTCHAR uni1D0E +ENCODING 7438 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +88 +98 +98 +A8 +A8 +C8 +C8 +88 +ENDCHAR +STARTCHAR uni1D0F +ENCODING 7439 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1D10 +ENCODING 7440 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni1D11 +ENCODING 7441 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +7C +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni1D12 +ENCODING 7442 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +7C +82 +82 +82 +82 +44 +ENDCHAR +STARTCHAR uni1D13 +ENCODING 7443 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -1 +BITMAP +40 +7C +A2 +92 +92 +8A +7C +04 +ENDCHAR +STARTCHAR uni1D14 +ENCODING 7444 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +6C +92 +12 +12 +F2 +92 +92 +6C +ENDCHAR +STARTCHAR uni1D15 +ENCODING 7445 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +88 +88 +88 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1D16 +ENCODING 7446 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 4 +BITMAP +78 +84 +84 +84 +ENDCHAR +STARTCHAR uni1D17 +ENCODING 7447 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 0 +BITMAP +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1D18 +ENCODING 7448 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +84 +84 +F8 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1D19 +ENCODING 7449 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +7C +84 +84 +7C +24 +44 +84 +84 +ENDCHAR +STARTCHAR uni1D1A +ENCODING 7450 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +44 +24 +7C +84 +84 +7C +ENDCHAR +STARTCHAR uni1D1B +ENCODING 7451 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1D1C +ENCODING 7452 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1D1D +ENCODING 7453 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +FE +04 +02 +02 +02 +FC +ENDCHAR +STARTCHAR uni1D1E +ENCODING 7454 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +3E +84 +02 +02 +82 +3C +ENDCHAR +STARTCHAR uni1D1F +ENCODING 7455 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +FE +02 +02 +FC +02 +02 +FC +ENDCHAR +STARTCHAR uni1D20 +ENCODING 7456 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +82 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni1D21 +ENCODING 7457 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +B4 +B4 +CC +CC +84 +84 +ENDCHAR +STARTCHAR uni1D22 +ENCODING 7458 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +04 +08 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni1D23 +ENCODING 7459 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +08 +10 +38 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni1D24 +ENCODING 7460 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +38 +70 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1D25 +ENCODING 7461 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +38 +7C +FE +FE +7C +38 +10 +92 +6C +ENDCHAR +STARTCHAR uni1D26 +ENCODING 7462 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1D27 +ENCODING 7463 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni1D28 +ENCODING 7464 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +44 +44 +44 +44 +44 +44 +44 +ENDCHAR +STARTCHAR uni1D29 +ENCODING 7465 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +84 +84 +F8 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1D2A +ENCODING 7466 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +92 +92 +92 +92 +7C +10 +10 +10 +ENDCHAR +STARTCHAR uni1D2B +ENCODING 7467 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +3C +24 +24 +24 +24 +24 +44 +C4 +ENDCHAR +STARTCHAR uni1D2C +ENCODING 7468 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +20 +50 +88 +88 +F8 +88 +88 +ENDCHAR +STARTCHAR uni1D2D +ENCODING 7469 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +3C +50 +90 +FC +90 +90 +9C +ENDCHAR +STARTCHAR uni1D2E +ENCODING 7470 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +F0 +88 +88 +F0 +88 +88 +F0 +ENDCHAR +STARTCHAR uni1D2F +ENCODING 7471 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 4 +BITMAP +78 +44 +48 +FE +48 +44 +78 +ENDCHAR +STARTCHAR uni1D30 +ENCODING 7472 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +F0 +88 +88 +88 +88 +88 +F0 +ENDCHAR +STARTCHAR uni1D31 +ENCODING 7473 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +F8 +80 +80 +F0 +80 +80 +F8 +ENDCHAR +STARTCHAR uni1D32 +ENCODING 7474 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +F8 +08 +08 +78 +08 +08 +F8 +ENDCHAR +STARTCHAR uni1D33 +ENCODING 7475 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +78 +80 +80 +9C +84 +8C +74 +ENDCHAR +STARTCHAR uni1D34 +ENCODING 7476 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +84 +84 +84 +FC +84 +84 +84 +ENDCHAR +STARTCHAR uni1D35 +ENCODING 7477 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +F8 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni1D36 +ENCODING 7478 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +3E +08 +08 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni1D37 +ENCODING 7479 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +88 +90 +A0 +C0 +A0 +90 +88 +ENDCHAR +STARTCHAR uni1D38 +ENCODING 7480 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +80 +80 +80 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni1D39 +ENCODING 7481 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +88 +D8 +D8 +A8 +88 +88 +88 +ENDCHAR +STARTCHAR uni1D3A +ENCODING 7482 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +88 +C8 +C8 +A8 +98 +98 +88 +ENDCHAR +STARTCHAR uni1D3B +ENCODING 7483 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +88 +98 +98 +A8 +C8 +C8 +88 +ENDCHAR +STARTCHAR uni1D3C +ENCODING 7484 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +78 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1D3D +ENCODING 7485 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +88 +88 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1D3E +ENCODING 7486 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +F8 +84 +84 +F8 +80 +80 +80 +ENDCHAR +STARTCHAR uni1D3F +ENCODING 7487 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +F0 +88 +88 +F0 +90 +88 +88 +ENDCHAR +STARTCHAR uni1D40 +ENCODING 7488 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +FE +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1D41 +ENCODING 7489 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1D42 +ENCODING 7490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +88 +88 +88 +A8 +D8 +D8 +88 +ENDCHAR +STARTCHAR uni1D43 +ENCODING 7491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +70 +08 +78 +88 +78 +ENDCHAR +STARTCHAR uni1D44 +ENCODING 7492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +F0 +88 +F0 +80 +70 +ENDCHAR +STARTCHAR uni1D45 +ENCODING 7493 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 4 +BITMAP +74 +8C +84 +8C +74 +ENDCHAR +STARTCHAR uni1D46 +ENCODING 7494 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 4 +BITMAP +7C +12 +FC +90 +7C +ENDCHAR +STARTCHAR uni1D47 +ENCODING 7495 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +80 +80 +80 +F0 +88 +88 +F0 +ENDCHAR +STARTCHAR uni1D48 +ENCODING 7496 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +08 +08 +08 +78 +88 +88 +78 +ENDCHAR +STARTCHAR uni1D49 +ENCODING 7497 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +70 +88 +F8 +80 +70 +ENDCHAR +STARTCHAR uni1D4A +ENCODING 7498 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +70 +08 +F8 +88 +70 +ENDCHAR +STARTCHAR uni1D4B +ENCODING 7499 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +78 +80 +70 +80 +78 +ENDCHAR +STARTCHAR uni1D4C +ENCODING 7500 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +F0 +08 +70 +08 +F0 +ENDCHAR +STARTCHAR uni1D4D +ENCODING 7501 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +74 +88 +88 +78 +08 +70 +ENDCHAR +STARTCHAR uni1D4E +ENCODING 7502 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 2 +BITMAP +F8 +20 +20 +20 +30 +00 +20 +ENDCHAR +STARTCHAR uni1D4F +ENCODING 7503 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 1 4 +BITMAP +80 +80 +90 +A0 +C0 +A0 +90 +ENDCHAR +STARTCHAR uni1D50 +ENCODING 7504 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 4 +BITMAP +EC +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni1D51 +ENCODING 7505 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 2 +BITMAP +B0 +C8 +88 +88 +88 +08 +30 +ENDCHAR +STARTCHAR uni1D52 +ENCODING 7506 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1D53 +ENCODING 7507 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +70 +88 +08 +88 +70 +ENDCHAR +STARTCHAR uni1D54 +ENCODING 7508 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 6 +BITMAP +70 +88 +88 +ENDCHAR +STARTCHAR uni1D55 +ENCODING 7509 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 4 +BITMAP +88 +88 +70 +ENDCHAR +STARTCHAR uni1D56 +ENCODING 7510 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 2 +BITMAP +F0 +88 +88 +88 +F0 +80 +80 +ENDCHAR +STARTCHAR uni1D57 +ENCODING 7511 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +20 +20 +F8 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1D58 +ENCODING 7512 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni1D59 +ENCODING 7513 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +F8 +10 +08 +08 +F0 +ENDCHAR +STARTCHAR uni1D5A +ENCODING 7514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 4 +BITMAP +92 +92 +92 +92 +6E +ENDCHAR +STARTCHAR uni1D5B +ENCODING 7515 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +88 +88 +50 +50 +20 +ENDCHAR +STARTCHAR uni1D5C +ENCODING 7516 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 4 +BITMAP +38 +7C +7C +38 +92 +6C +ENDCHAR +STARTCHAR uni1D5D +ENCODING 7517 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 2 +BITMAP +60 +90 +90 +F0 +88 +C8 +B0 +80 +80 +ENDCHAR +STARTCHAR uni1D5E +ENCODING 7518 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +44 +A4 +28 +10 +20 +40 +ENDCHAR +STARTCHAR uni1D5F +ENCODING 7519 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +70 +80 +80 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni1D60 +ENCODING 7520 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +4C +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni1D61 +ENCODING 7521 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 2 +BITMAP +C4 +24 +28 +30 +60 +90 +8C +ENDCHAR +STARTCHAR uni1D62 +ENCODING 7522 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +20 +00 +60 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni1D63 +ENCODING 7523 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -1 +BITMAP +B0 +C8 +80 +80 +80 +ENDCHAR +STARTCHAR uni1D64 +ENCODING 7524 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -1 +BITMAP +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni1D65 +ENCODING 7525 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -1 +BITMAP +88 +88 +50 +50 +20 +ENDCHAR +STARTCHAR uni1D66 +ENCODING 7526 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +70 +88 +88 +F8 +84 +C4 +B8 +80 +ENDCHAR +STARTCHAR uni1D67 +ENCODING 7527 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 -2 +BITMAP +44 +A4 +18 +20 +40 +40 +ENDCHAR +STARTCHAR uni1D68 +ENCODING 7528 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 -2 +BITMAP +70 +88 +F0 +80 +60 +10 +ENDCHAR +STARTCHAR uni1D69 +ENCODING 7529 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 -2 +BITMAP +4C +92 +92 +92 +7C +10 +ENDCHAR +STARTCHAR uni1D6A +ENCODING 7530 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 -2 +BITMAP +C2 +24 +28 +30 +60 +90 +ENDCHAR +STARTCHAR uni1D6B +ENCODING 7531 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +8E +89 +89 +8F +88 +88 +99 +6E +ENDCHAR +STARTCHAR uni1D6C +ENCODING 7532 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +20 +28 +70 +AC +32 +22 +22 +22 +22 +32 +2C +ENDCHAR +STARTCHAR uni1D6D +ENCODING 7533 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +0A +1C +28 +68 +98 +88 +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni1D6E +ENCODING 7534 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +18 +20 +20 +20 +F8 +20 +20 +28 +70 +A0 +20 +ENDCHAR +STARTCHAR uni1D6F +ENCODING 7535 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +7C +4A +4A +4A +7B +CE +4A +4A +ENDCHAR +STARTCHAR uni1D70 +ENCODING 7536 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +58 +64 +44 +44 +66 +DC +44 +44 +ENDCHAR +STARTCHAR uni1D71 +ENCODING 7537 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +58 +64 +44 +66 +DC +44 +64 +58 +40 +40 +ENDCHAR +STARTCHAR uni1D72 +ENCODING 7538 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +2C +32 +20 +20 +39 +66 +A0 +20 +ENDCHAR +STARTCHAR uni1D73 +ENCODING 7539 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +1C +22 +22 +20 +72 +AC +20 +20 +ENDCHAR +STARTCHAR uni1D74 +ENCODING 7540 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +3C +42 +40 +33 +CC +02 +42 +3C +ENDCHAR +STARTCHAR uni1D75 +ENCODING 7541 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +20 +F8 +20 +20 +64 +B8 +20 +20 +18 +ENDCHAR +STARTCHAR uni1D76 +ENCODING 7542 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +7E +04 +08 +6A +9C +10 +20 +7E +ENDCHAR +STARTCHAR uni1D77 +ENCODING 7543 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +78 +84 +84 +78 +08 +38 +44 +44 +44 +B8 +80 +ENDCHAR +STARTCHAR uni1D78 +ENCODING 7544 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +88 +88 +F8 +88 +88 +ENDCHAR +STARTCHAR uni1D79 +ENCODING 7545 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +08 +10 +20 +20 +10 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni1D7A +ENCODING 7546 +BBX 14 11 1 0 +BITMAP +0090 +20A0 +20C0 +20B8 +F9C4 +2284 +2484 +2884 +3084 +2084 +5884 +ENDCHAR +STARTCHAR uni1D7B +ENCODING 7547 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +F8 +20 +20 +F8 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni1D7C +ENCODING 7548 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +E0 +20 +20 +F8 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1D7D +ENCODING 7549 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +58 +64 +44 +44 +FE +44 +64 +58 +40 +40 +ENDCHAR +STARTCHAR uni1D7E +ENCODING 7550 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +44 +44 +44 +FE +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni1D7F +ENCODING 7551 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +42 +24 +FF +42 +42 +42 +24 +18 +ENDCHAR +STARTCHAR uni1D80 +ENCODING 7552 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +C6 +BA +02 +0C +ENDCHAR +STARTCHAR uni1D81 +ENCODING 7553 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +04 +04 +04 +74 +8C +84 +84 +84 +84 +8C +76 +02 +0C +ENDCHAR +STARTCHAR uni1D82 +ENCODING 7554 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 -2 +BITMAP +18 +20 +20 +20 +F8 +20 +20 +20 +20 +30 +30 +10 +60 +ENDCHAR +STARTCHAR uni1D83 +ENCODING 7555 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +3A +44 +44 +44 +44 +47 +3D +05 +85 +7A +ENDCHAR +STARTCHAR uni1D84 +ENCODING 7556 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +88 +90 +A0 +C0 +A0 +90 +8C +84 +04 +18 +ENDCHAR +STARTCHAR uni1D85 +ENCODING 7557 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 -2 +BITMAP +60 +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +08 +30 +ENDCHAR +STARTCHAR uni1D86 +ENCODING 7558 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +E8 +94 +94 +94 +94 +94 +96 +96 +02 +0C +ENDCHAR +STARTCHAR uni1D87 +ENCODING 7559 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +86 +86 +02 +0C +ENDCHAR +STARTCHAR uni1D88 +ENCODING 7560 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B0 +C8 +88 +88 +88 +88 +CC +B4 +84 +98 +ENDCHAR +STARTCHAR uni1D89 +ENCODING 7561 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +58 +64 +44 +40 +40 +40 +60 +60 +20 +C0 +ENDCHAR +STARTCHAR uni1D8A +ENCODING 7562 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +78 +84 +80 +60 +18 +04 +86 +7A +02 +0C +ENDCHAR +STARTCHAR uni1D8B +ENCODING 7563 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +18 +20 +20 +20 +20 +20 +20 +20 +3C +24 +24 +C4 +18 +ENDCHAR +STARTCHAR uni1D8C +ENCODING 7564 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +84 +48 +48 +4C +34 +34 +04 +18 +ENDCHAR +STARTCHAR uni1D8D +ENCODING 7565 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +88 +88 +50 +20 +20 +50 +8C +8C +04 +18 +ENDCHAR +STARTCHAR uni1D8E +ENCODING 7566 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +04 +08 +10 +20 +40 +80 +FC +04 +18 +ENDCHAR +STARTCHAR uni1D8F +ENCODING 7567 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +70 +88 +08 +78 +88 +88 +9C +64 +04 +06 +ENDCHAR +STARTCHAR uni1D90 +ENCODING 7568 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +68 +98 +88 +88 +88 +88 +98 +6C +04 +06 +ENDCHAR +STARTCHAR uni1D91 +ENCODING 7569 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +06 +08 +08 +08 +68 +98 +88 +88 +88 +88 +88 +78 +08 +06 +ENDCHAR +STARTCHAR uni1D92 +ENCODING 7570 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +78 +84 +84 +FC +80 +80 +84 +78 +08 +06 +ENDCHAR +STARTCHAR uni1D93 +ENCODING 7571 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +78 +84 +80 +78 +80 +80 +84 +78 +08 +06 +ENDCHAR +STARTCHAR uni1D94 +ENCODING 7572 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +04 +78 +04 +04 +84 +F8 +80 +60 +ENDCHAR +STARTCHAR uni1D95 +ENCODING 7573 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +70 +88 +08 +08 +FE +8A +8A +72 +02 +03 +ENDCHAR +STARTCHAR uni1D96 +ENCODING 7574 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 2 -2 +BITMAP +20 +20 +00 +60 +20 +20 +20 +20 +20 +20 +F0 +10 +0C +ENDCHAR +STARTCHAR uni1D97 +ENCODING 7575 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +04 +04 +04 +04 +84 +F8 +80 +60 +ENDCHAR +STARTCHAR uni1D98 +ENCODING 7576 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 -2 +BITMAP +18 +20 +20 +20 +20 +20 +20 +20 +20 +20 +C0 +80 +60 +ENDCHAR +STARTCHAR uni1D99 +ENCODING 7577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +88 +88 +88 +88 +88 +88 +98 +6C +04 +06 +ENDCHAR +STARTCHAR uni1D9A +ENCODING 7578 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +08 +10 +20 +38 +04 +04 +78 +40 +30 +ENDCHAR +STARTCHAR uni1D9B +ENCODING 7579 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 4 +BITMAP +B8 +C4 +84 +C4 +B8 +ENDCHAR +STARTCHAR uni1D9C +ENCODING 7580 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 1 4 +BITMAP +70 +80 +80 +80 +70 +ENDCHAR +STARTCHAR uni1D9D +ENCODING 7581 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 3 +BITMAP +70 +80 +B0 +C8 +70 +80 +ENDCHAR +STARTCHAR uni1D9E +ENCODING 7582 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 4 +BITMAP +C8 +30 +50 +08 +78 +88 +88 +70 +ENDCHAR +STARTCHAR uni1D9F +ENCODING 7583 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +F0 +08 +70 +08 +F0 +ENDCHAR +STARTCHAR uni1DA0 +ENCODING 7584 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +18 +20 +20 +F8 +20 +20 +20 +ENDCHAR +STARTCHAR uni1DA1 +ENCODING 7585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +10 +10 +10 +10 +7C +10 +90 +60 +ENDCHAR +STARTCHAR uni1DA2 +ENCODING 7586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 2 +BITMAP +74 +8C +84 +8C +74 +04 +78 +ENDCHAR +STARTCHAR uni1DA3 +ENCODING 7587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +88 +88 +88 +98 +68 +08 +08 +ENDCHAR +STARTCHAR uni1DA4 +ENCODING 7588 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +20 +00 +60 +20 +70 +20 +F8 +ENDCHAR +STARTCHAR uni1DA5 +ENCODING 7589 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 4 +BITMAP +C0 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni1DA6 +ENCODING 7590 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +F8 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni1DA7 +ENCODING 7591 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +F8 +20 +F8 +20 +F8 +ENDCHAR +STARTCHAR uni1DA8 +ENCODING 7592 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +10 +00 +30 +10 +10 +10 +70 +98 +64 +ENDCHAR +STARTCHAR uni1DA9 +ENCODING 7593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 2 +BITMAP +E0 +20 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1DAA +ENCODING 7594 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 1 2 +BITMAP +E0 +20 +20 +20 +20 +30 +30 +10 +60 +ENDCHAR +STARTCHAR uni1DAB +ENCODING 7595 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 4 +BITMAP +80 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni1DAC +ENCODING 7596 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +EC +92 +92 +92 +92 +02 +0C +ENDCHAR +STARTCHAR uni1DAD +ENCODING 7597 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +92 +92 +92 +92 +6E +02 +02 +ENDCHAR +STARTCHAR uni1DAE +ENCODING 7598 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 2 +BITMAP +58 +64 +44 +44 +44 +40 +80 +ENDCHAR +STARTCHAR uni1DAF +ENCODING 7599 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 2 +BITMAP +B0 +C8 +88 +88 +88 +08 +04 +ENDCHAR +STARTCHAR uni1DB0 +ENCODING 7600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +88 +C8 +C8 +A8 +98 +98 +88 +ENDCHAR +STARTCHAR uni1DB1 +ENCODING 7601 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +70 +88 +F8 +88 +70 +ENDCHAR +STARTCHAR uni1DB2 +ENCODING 7602 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 3 +BITMAP +20 +70 +A8 +A8 +A8 +70 +20 +ENDCHAR +STARTCHAR uni1DB3 +ENCODING 7603 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 2 +BITMAP +78 +80 +70 +08 +F0 +80 +60 +ENDCHAR +STARTCHAR uni1DB4 +ENCODING 7604 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 3 +BITMAP +18 +20 +20 +20 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uni1DB5 +ENCODING 7605 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +20 +20 +F8 +20 +20 +20 +1C +04 +18 +ENDCHAR +STARTCHAR uni1DB6 +ENCODING 7606 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 4 +BITMAP +44 +44 +FE +4C +34 +ENDCHAR +STARTCHAR uni1DB7 +ENCODING 7607 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +84 +48 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni1DB8 +ENCODING 7608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1DB9 +ENCODING 7609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 0 4 +BITMAP +CC +44 +44 +48 +30 +ENDCHAR +STARTCHAR uni1DBA +ENCODING 7610 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +20 +50 +50 +50 +88 +88 +88 +ENDCHAR +STARTCHAR uni1DBB +ENCODING 7611 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +F8 +10 +20 +40 +F8 +ENDCHAR +STARTCHAR uni1DBC +ENCODING 7612 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +F8 +10 +20 +40 +F8 +08 +06 +ENDCHAR +STARTCHAR uni1DBD +ENCODING 7613 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 3 +BITMAP +F8 +10 +24 +4A +FC +08 +ENDCHAR +STARTCHAR uni1DBE +ENCODING 7614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 2 +BITMAP +FC +08 +10 +38 +04 +84 +78 +ENDCHAR +STARTCHAR uni1DBF +ENCODING 7615 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +30 +48 +84 +FC +84 +48 +30 +ENDCHAR +STARTCHAR uni1DC0 +ENCODING 7616 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 10 +BITMAP +90 +40 +20 +90 +ENDCHAR +STARTCHAR uni1DC1 +ENCODING 7617 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 10 +BITMAP +90 +20 +40 +90 +ENDCHAR +STARTCHAR uni1DC2 +ENCODING 7618 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -7 -2 +BITMAP +E0 +70 +38 +1C +ENDCHAR +STARTCHAR uni1DC3 +ENCODING 7619 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -6 10 +BITMAP +08 +90 +60 +ENDCHAR +STARTCHAR uni1DC4 +ENCODING 7620 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 10 +BITMAP +04 +08 +F0 +ENDCHAR +STARTCHAR uni1DC5 +ENCODING 7621 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 10 +BITMAP +80 +40 +3C +ENDCHAR +STARTCHAR uni1DC6 +ENCODING 7622 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 10 +BITMAP +F0 +08 +04 +ENDCHAR +STARTCHAR uni1DC7 +ENCODING 7623 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -8 10 +BITMAP +3C +40 +80 +ENDCHAR +STARTCHAR uni1DC8 +ENCODING 7624 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +88 +54 +22 +ENDCHAR +STARTCHAR uni1DC9 +ENCODING 7625 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +22 +54 +88 +ENDCHAR +STARTCHAR uni1DCA +ENCODING 7626 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 -2 +BITMAP +B0 +C0 +80 +80 +ENDCHAR +STARTCHAR uni1DCB +ENCODING 7627 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 11 +BITMAP +8E +70 +ENDCHAR +STARTCHAR uni1DCC +ENCODING 7628 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 11 +BITMAP +E2 +1C +ENDCHAR +STARTCHAR uni1DCD +ENCODING 7629 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -4 10 +BITMAP +18 +66 +81 +ENDCHAR +STARTCHAR uni1DCE +ENCODING 7630 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -6 9 +BITMAP +C0 +20 +20 +40 +ENDCHAR +STARTCHAR uni1DCF +ENCODING 7631 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -6 -2 +BITMAP +40 +80 +E0 +20 +40 +ENDCHAR +STARTCHAR uni1DD0 +ENCODING 7632 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -6 -2 +BITMAP +44 +FC +ENDCHAR +STARTCHAR uni1DD1 +ENCODING 7633 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +64 +92 +4C +ENDCHAR +STARTCHAR uni1DD2 +ENCODING 7634 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -6 7 +BITMAP +60 +90 +50 +10 +20 +40 +ENDCHAR +STARTCHAR uni1DD3 +ENCODING 7635 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 11 +BITMAP +92 +6C +ENDCHAR +STARTCHAR uni1DD4 +ENCODING 7636 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -8 9 +BITMAP +EC +12 +7E +90 +6E +ENDCHAR +STARTCHAR uni1DD5 +ENCODING 7637 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -8 9 +BITMAP +EC +12 +72 +92 +6C +ENDCHAR +STARTCHAR uni1DD6 +ENCODING 7638 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 -8 9 +BITMAP +E1 +11 +7A +9A +64 +ENDCHAR +STARTCHAR uni1DD7 +ENCODING 7639 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -6 7 +BITMAP +70 +80 +80 +80 +70 +20 +40 +ENDCHAR +STARTCHAR uni1DD8 +ENCODING 7640 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +C0 +20 +70 +90 +60 +ENDCHAR +STARTCHAR uni1DD9 +ENCODING 7641 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -6 8 +BITMAP +A0 +40 +A0 +70 +90 +60 +ENDCHAR +STARTCHAR uni1DDA +ENCODING 7642 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +70 +90 +70 +10 +E0 +ENDCHAR +STARTCHAR uni1DDB +ENCODING 7643 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +70 +80 +B0 +90 +60 +ENDCHAR +STARTCHAR uni1DDC +ENCODING 7644 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +80 +90 +A0 +D0 +90 +ENDCHAR +STARTCHAR uni1DDD +ENCODING 7645 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -5 9 +BITMAP +C0 +40 +40 +40 +E0 +ENDCHAR +STARTCHAR uni1DDE +ENCODING 7646 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +80 +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uni1DDF +ENCODING 7647 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +88 +D8 +A8 +88 +88 +ENDCHAR +STARTCHAR uni1DE0 +ENCODING 7648 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -7 10 +BITMAP +B0 +C8 +88 +88 +ENDCHAR +STARTCHAR uni1DE1 +ENCODING 7649 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +88 +C8 +A8 +98 +88 +ENDCHAR +STARTCHAR uni1DE2 +ENCODING 7650 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +E0 +90 +E0 +A0 +90 +ENDCHAR +STARTCHAR uni1DE3 +ENCODING 7651 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 -6 8 +BITMAP +60 +90 +10 +20 +10 +08 +ENDCHAR +STARTCHAR uni1DE4 +ENCODING 7652 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +70 +80 +60 +10 +E0 +ENDCHAR +STARTCHAR uni1DE5 +ENCODING 7653 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 -7 8 +BITMAP +30 +48 +40 +C0 +40 +40 +ENDCHAR +STARTCHAR uni1DE6 +ENCODING 7654 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +F0 +10 +60 +80 +F0 +ENDCHAR +STARTCHAR uni1DE7 +ENCODING 7655 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -6 9 +BITMAP +68 +90 +90 +68 +ENDCHAR +STARTCHAR uni1DE8 +ENCODING 7656 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -5 10 +BITMAP +80 +E0 +90 +E0 +ENDCHAR +STARTCHAR uni1DE9 +ENCODING 7657 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +60 +90 +A0 +90 +E0 +ENDCHAR +STARTCHAR uni1DEA +ENCODING 7658 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +E0 +10 +F0 +90 +60 +ENDCHAR +STARTCHAR uni1DEB +ENCODING 7659 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +30 +40 +E0 +40 +40 +ENDCHAR +STARTCHAR uni1DEC +ENCODING 7660 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -6 9 +BITMAP +40 +E0 +40 +E0 +40 +ENDCHAR +STARTCHAR uni1DED +ENCODING 7661 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -8 8 +BITMAP +18 +24 +24 +58 +80 +ENDCHAR +STARTCHAR uni1DEE +ENCODING 7662 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 10 +BITMAP +E0 +90 +E0 +80 +ENDCHAR +STARTCHAR uni1DEF +ENCODING 7663 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +18 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uni1DF0 +ENCODING 7664 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -8 9 +BITMAP +24 +24 +5C +80 +ENDCHAR +STARTCHAR uni1DF1 +ENCODING 7665 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +92 +54 +28 +ENDCHAR +STARTCHAR uni1DF2 +ENCODING 7666 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +50 +00 +70 +90 +70 +ENDCHAR +STARTCHAR uni1DF3 +ENCODING 7667 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +A0 +00 +60 +90 +60 +ENDCHAR +STARTCHAR uni1DF4 +ENCODING 7668 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -6 9 +BITMAP +A0 +00 +A0 +A0 +E0 +ENDCHAR +STARTCHAR uni1DF5 +ENCODING 7669 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -7 10 +BITMAP +20 +20 +F8 +ENDCHAR +STARTCHAR uni1DF6 +ENCODING 7670 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -5 10 +BITMAP +90 +90 +60 +ENDCHAR +STARTCHAR uni1DF7 +ENCODING 7671 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -7 10 +BITMAP +90 +90 +60 +ENDCHAR +STARTCHAR uni1DF8 +ENCODING 7672 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -6 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni1DF9 +ENCODING 7673 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 -2 +BITMAP +82 +7C +ENDCHAR +STARTCHAR uni1DFA +ENCODING 7674 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -8 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni1DFB +ENCODING 7675 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -8 10 +BITMAP +49 +49 +92 +92 +ENDCHAR +STARTCHAR uni1DFC +ENCODING 7676 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 3 -6 -2 +BITMAP +1F80 +6060 +8010 +ENDCHAR +STARTCHAR uni1DFD +ENCODING 7677 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 -2 +BITMAP +64 +98 +00 +64 +98 +ENDCHAR +STARTCHAR uni1DFE +ENCODING 7678 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -6 9 +BITMAP +20 +40 +80 +40 +20 +ENDCHAR +STARTCHAR uni1DFF +ENCODING 7679 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 -2 +BITMAP +94 +48 +80 +ENDCHAR +STARTCHAR uni1E00 +ENCODING 7680 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +30 +48 +48 +84 +84 +FC +84 +84 +84 +30 +48 +30 +ENDCHAR +STARTCHAR uni1E01 +ENCODING 7681 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +04 +7C +84 +8C +74 +30 +48 +30 +ENDCHAR +STARTCHAR uni1E02 +ENCODING 7682 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +20 +00 +00 +F8 +84 +84 +84 +F8 +84 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni1E03 +ENCODING 7683 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +90 +80 +80 +B8 +C4 +84 +84 +84 +84 +C4 +B8 +ENDCHAR +STARTCHAR uni1E04 +ENCODING 7684 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F8 +84 +84 +84 +F8 +84 +84 +84 +84 +F8 +00 +20 +ENDCHAR +STARTCHAR uni1E05 +ENCODING 7685 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +C4 +B8 +00 +10 +ENDCHAR +STARTCHAR uni1E06 +ENCODING 7686 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F8 +84 +84 +84 +F8 +84 +84 +84 +84 +F8 +00 +78 +ENDCHAR +STARTCHAR uni1E07 +ENCODING 7687 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +C4 +B8 +00 +78 +ENDCHAR +STARTCHAR uni1E08 +ENCODING 7688 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 16 1 -2 +BITMAP +10 +20 +40 +00 +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +10 +60 +ENDCHAR +STARTCHAR uni1E09 +ENCODING 7689 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +10 +20 +40 +00 +78 +84 +80 +80 +80 +80 +84 +78 +10 +60 +ENDCHAR +STARTCHAR uni1E0A +ENCODING 7690 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +20 +00 +00 +F0 +88 +84 +84 +84 +84 +84 +84 +88 +F0 +ENDCHAR +STARTCHAR uni1E0B +ENCODING 7691 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +24 +04 +04 +74 +8C +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1E0C +ENCODING 7692 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F0 +88 +84 +84 +84 +84 +84 +84 +88 +F0 +00 +20 +ENDCHAR +STARTCHAR uni1E0D +ENCODING 7693 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +04 +04 +04 +74 +8C +84 +84 +84 +84 +8C +74 +00 +20 +ENDCHAR +STARTCHAR uni1E0E +ENCODING 7694 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F0 +88 +84 +84 +84 +84 +84 +84 +88 +F0 +00 +78 +ENDCHAR +STARTCHAR uni1E0F +ENCODING 7695 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +04 +04 +04 +74 +8C +84 +84 +84 +84 +8C +74 +00 +78 +ENDCHAR +STARTCHAR uni1E10 +ENCODING 7696 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F0 +88 +84 +84 +84 +84 +84 +84 +88 +F0 +20 +40 +ENDCHAR +STARTCHAR uni1E11 +ENCODING 7697 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +04 +04 +04 +74 +8C +84 +84 +84 +84 +8C +74 +10 +20 +ENDCHAR +STARTCHAR uni1E12 +ENCODING 7698 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F0 +88 +84 +84 +84 +84 +84 +84 +88 +F0 +60 +90 +ENDCHAR +STARTCHAR uni1E13 +ENCODING 7699 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +04 +04 +04 +74 +8C +84 +84 +84 +84 +8C +74 +30 +48 +ENDCHAR +STARTCHAR uni1E14 +ENCODING 7700 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +20 +10 +78 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni1E15 +ENCODING 7701 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +40 +20 +10 +00 +78 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1E16 +ENCODING 7702 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +10 +20 +78 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni1E17 +ENCODING 7703 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +10 +20 +40 +00 +78 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1E18 +ENCODING 7704 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +30 +48 +ENDCHAR +STARTCHAR uni1E19 +ENCODING 7705 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +FC +80 +80 +84 +78 +30 +48 +ENDCHAR +STARTCHAR uni1E1A +ENCODING 7706 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +64 +98 +ENDCHAR +STARTCHAR uni1E1B +ENCODING 7707 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +FC +80 +80 +84 +78 +64 +98 +ENDCHAR +STARTCHAR uni1E1C +ENCODING 7708 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +44 +38 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +08 +30 +ENDCHAR +STARTCHAR uni1E1D +ENCODING 7709 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +44 +38 +00 +00 +78 +84 +84 +FC +80 +80 +84 +78 +10 +60 +ENDCHAR +STARTCHAR uni1E1E +ENCODING 7710 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +20 +00 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1E1F +ENCODING 7711 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 0 +BITMAP +10 +00 +00 +18 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni1E20 +ENCODING 7712 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +78 +00 +78 +84 +84 +80 +80 +9C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1E21 +ENCODING 7713 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F0 +04 +74 +88 +88 +88 +70 +40 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E22 +ENCODING 7714 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +20 +00 +88 +88 +88 +88 +F8 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni1E23 +ENCODING 7715 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +90 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni1E24 +ENCODING 7716 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +88 +88 +88 +88 +F8 +88 +88 +88 +88 +88 +00 +20 +ENDCHAR +STARTCHAR uni1E25 +ENCODING 7717 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +84 +00 +10 +ENDCHAR +STARTCHAR uni1E26 +ENCODING 7718 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +48 +00 +00 +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni1E27 +ENCODING 7719 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +00 +00 +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni1E28 +ENCODING 7720 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +C4 +C4 +20 +C0 +ENDCHAR +STARTCHAR uni1E29 +ENCODING 7721 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +C4 +C4 +20 +C0 +ENDCHAR +STARTCHAR uni1E2A +ENCODING 7722 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +82 +82 +82 +82 +FE +82 +82 +82 +82 +82 +28 +38 +ENDCHAR +STARTCHAR uni1E2B +ENCODING 7723 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +80 +80 +80 +9C +A2 +C2 +82 +82 +82 +82 +82 +28 +38 +ENDCHAR +STARTCHAR uni1E2C +ENCODING 7724 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +7C +10 +10 +10 +10 +10 +10 +10 +10 +7C +64 +98 +ENDCHAR +STARTCHAR uni1E2D +ENCODING 7725 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +10 +10 +00 +30 +10 +10 +10 +10 +10 +10 +7C +64 +98 +ENDCHAR +STARTCHAR uni1E2E +ENCODING 7726 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +10 +20 +A8 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni1E2F +ENCODING 7727 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 0 +BITMAP +08 +10 +20 +88 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni1E30 +ENCODING 7728 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +08 +10 +20 +84 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni1E31 +ENCODING 7729 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +04 +08 +90 +80 +80 +88 +90 +A0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni1E32 +ENCODING 7730 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +84 +00 +20 +ENDCHAR +STARTCHAR uni1E33 +ENCODING 7731 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +88 +90 +A0 +C0 +A0 +90 +88 +84 +00 +20 +ENDCHAR +STARTCHAR uni1E34 +ENCODING 7732 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +84 +00 +78 +ENDCHAR +STARTCHAR uni1E35 +ENCODING 7733 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +88 +90 +A0 +C0 +A0 +90 +88 +84 +00 +78 +ENDCHAR +STARTCHAR uni1E36 +ENCODING 7734 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +00 +20 +ENDCHAR +STARTCHAR uni1E37 +ENCODING 7735 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 -2 +BITMAP +60 +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +00 +20 +ENDCHAR +STARTCHAR uni1E38 +ENCODING 7736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +78 +00 +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +00 +20 +ENDCHAR +STARTCHAR uni1E39 +ENCODING 7737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 15 2 -2 +BITMAP +F0 +00 +60 +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +00 +20 +ENDCHAR +STARTCHAR uni1E3A +ENCODING 7738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +00 +78 +ENDCHAR +STARTCHAR uni1E3B +ENCODING 7739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 -2 +BITMAP +60 +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +00 +70 +ENDCHAR +STARTCHAR uni1E3C +ENCODING 7740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +30 +48 +ENDCHAR +STARTCHAR uni1E3D +ENCODING 7741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 -2 +BITMAP +60 +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +60 +90 +ENDCHAR +STARTCHAR uni1E3E +ENCODING 7742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +08 +10 +20 +84 +84 +CC +CC +B4 +B4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni1E3F +ENCODING 7743 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +08 +10 +20 +00 +EC +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni1E40 +ENCODING 7744 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +00 +84 +84 +CC +CC +B4 +B4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni1E41 +ENCODING 7745 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +00 +00 +EC +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni1E42 +ENCODING 7746 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +CC +CC +B4 +B4 +84 +84 +84 +84 +00 +10 +ENDCHAR +STARTCHAR uni1E43 +ENCODING 7747 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +EC +92 +92 +92 +92 +92 +92 +92 +00 +10 +ENDCHAR +STARTCHAR uni1E44 +ENCODING 7748 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +10 +00 +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +ENDCHAR +STARTCHAR uni1E45 +ENCODING 7749 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +10 +00 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni1E46 +ENCODING 7750 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +00 +10 +ENDCHAR +STARTCHAR uni1E47 +ENCODING 7751 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +00 +10 +ENDCHAR +STARTCHAR uni1E48 +ENCODING 7752 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +00 +78 +ENDCHAR +STARTCHAR uni1E49 +ENCODING 7753 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +00 +78 +ENDCHAR +STARTCHAR uni1E4A +ENCODING 7754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +30 +48 +ENDCHAR +STARTCHAR uni1E4B +ENCODING 7755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +30 +48 +ENDCHAR +STARTCHAR uni1E4C +ENCODING 7756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +08 +10 +64 +98 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E4D +ENCODING 7757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +04 +08 +10 +64 +98 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E4E +ENCODING 7758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +00 +64 +98 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E4F +ENCODING 7759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +48 +00 +64 +98 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E50 +ENCODING 7760 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +20 +10 +78 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E51 +ENCODING 7761 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +40 +20 +10 +00 +78 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E52 +ENCODING 7762 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +10 +20 +78 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E53 +ENCODING 7763 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +10 +20 +40 +00 +78 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E54 +ENCODING 7764 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +08 +10 +20 +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1E55 +ENCODING 7765 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +08 +10 +20 +00 +B8 +C4 +84 +84 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni1E56 +ENCODING 7766 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +20 +00 +00 +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1E57 +ENCODING 7767 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +10 +00 +00 +B8 +C4 +84 +84 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni1E58 +ENCODING 7768 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +20 +00 +00 +F8 +84 +84 +84 +F8 +90 +88 +88 +84 +84 +ENDCHAR +STARTCHAR uni1E59 +ENCODING 7769 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +20 +00 +00 +B8 +C4 +84 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni1E5A +ENCODING 7770 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F8 +84 +84 +84 +F8 +90 +88 +88 +84 +84 +00 +10 +ENDCHAR +STARTCHAR uni1E5B +ENCODING 7771 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +B8 +C4 +84 +80 +80 +80 +80 +80 +10 +ENDCHAR +STARTCHAR uni1E5C +ENCODING 7772 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +78 +00 +F8 +84 +84 +84 +F8 +90 +88 +88 +84 +84 +00 +10 +ENDCHAR +STARTCHAR uni1E5D +ENCODING 7773 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +78 +00 +B8 +C4 +84 +80 +80 +80 +80 +80 +10 +ENDCHAR +STARTCHAR uni1E5E +ENCODING 7774 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F8 +84 +84 +84 +F8 +90 +88 +88 +84 +84 +00 +78 +ENDCHAR +STARTCHAR uni1E5F +ENCODING 7775 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +80 +80 +80 +80 +80 +00 +78 +ENDCHAR +STARTCHAR uni1E60 +ENCODING 7776 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +20 +00 +00 +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E61 +ENCODING 7777 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +20 +00 +00 +78 +84 +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uni1E62 +ENCODING 7778 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +00 +10 +ENDCHAR +STARTCHAR uni1E63 +ENCODING 7779 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +80 +60 +18 +04 +84 +78 +00 +10 +ENDCHAR +STARTCHAR uni1E64 +ENCODING 7780 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +10 +20 +00 +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E65 +ENCODING 7781 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +40 +10 +20 +40 +00 +78 +84 +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uni1E66 +ENCODING 7782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +10 +44 +28 +10 +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E67 +ENCODING 7783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +10 +00 +44 +28 +10 +78 +84 +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uni1E68 +ENCODING 7784 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +10 +00 +00 +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +00 +10 +ENDCHAR +STARTCHAR uni1E69 +ENCODING 7785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +10 +00 +00 +78 +84 +80 +60 +18 +04 +84 +78 +00 +10 +ENDCHAR +STARTCHAR uni1E6A +ENCODING 7786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +10 +00 +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1E6B +ENCODING 7787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 0 +BITMAP +20 +00 +00 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1E6C +ENCODING 7788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +00 +10 +ENDCHAR +STARTCHAR uni1E6D +ENCODING 7789 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +20 +20 +20 +F8 +20 +20 +20 +20 +20 +18 +00 +20 +ENDCHAR +STARTCHAR uni1E6E +ENCODING 7790 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +00 +7C +ENDCHAR +STARTCHAR uni1E6F +ENCODING 7791 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +20 +20 +20 +F8 +20 +20 +20 +20 +20 +18 +00 +78 +ENDCHAR +STARTCHAR uni1E70 +ENCODING 7792 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +00 +10 +28 +44 +ENDCHAR +STARTCHAR uni1E71 +ENCODING 7793 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +20 +20 +20 +F8 +20 +20 +20 +20 +24 +18 +28 +44 +ENDCHAR +STARTCHAR uni1E72 +ENCODING 7794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +00 +48 +ENDCHAR +STARTCHAR uni1E73 +ENCODING 7795 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +8C +74 +00 +50 +ENDCHAR +STARTCHAR uni1E74 +ENCODING 7796 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +64 +98 +ENDCHAR +STARTCHAR uni1E75 +ENCODING 7797 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +8C +74 +64 +98 +ENDCHAR +STARTCHAR uni1E76 +ENCODING 7798 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +28 +44 +ENDCHAR +STARTCHAR uni1E77 +ENCODING 7799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +8C +74 +28 +44 +ENDCHAR +STARTCHAR uni1E78 +ENCODING 7800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +08 +10 +64 +98 +00 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E79 +ENCODING 7801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +04 +08 +10 +64 +98 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1E7A +ENCODING 7802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +48 +00 +78 +00 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1E7B +ENCODING 7803 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +48 +00 +78 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1E7C +ENCODING 7804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +64 +98 +00 +82 +82 +44 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni1E7D +ENCODING 7805 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +98 +00 +00 +84 +84 +84 +48 +48 +48 +30 +30 +ENDCHAR +STARTCHAR uni1E7E +ENCODING 7806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +82 +82 +82 +44 +44 +44 +28 +28 +10 +10 +00 +10 +ENDCHAR +STARTCHAR uni1E7F +ENCODING 7807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +88 +88 +88 +50 +50 +50 +20 +20 +00 +20 +ENDCHAR +STARTCHAR uni1E80 +ENCODING 7808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +40 +20 +10 +84 +84 +84 +84 +B4 +B4 +CC +CC +84 +84 +ENDCHAR +STARTCHAR uni1E81 +ENCODING 7809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +20 +10 +08 +00 +82 +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1E82 +ENCODING 7810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +08 +10 +20 +84 +84 +84 +84 +B4 +B4 +CC +CC +84 +84 +ENDCHAR +STARTCHAR uni1E83 +ENCODING 7811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +08 +10 +20 +00 +82 +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1E84 +ENCODING 7812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +48 +00 +00 +84 +84 +84 +84 +B4 +B4 +CC +CC +84 +84 +ENDCHAR +STARTCHAR uni1E85 +ENCODING 7813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +44 +00 +00 +82 +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1E86 +ENCODING 7814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 0 +BITMAP +20 +00 +00 +88 +88 +88 +88 +A8 +A8 +D8 +D8 +88 +88 +ENDCHAR +STARTCHAR uni1E87 +ENCODING 7815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +00 +00 +82 +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1E88 +ENCODING 7816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +88 +88 +88 +88 +A8 +A8 +D8 +D8 +88 +88 +00 +20 +ENDCHAR +STARTCHAR uni1E89 +ENCODING 7817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +82 +92 +92 +92 +92 +92 +92 +6C +00 +10 +ENDCHAR +STARTCHAR uni1E8A +ENCODING 7818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 0 +BITMAP +20 +00 +00 +88 +88 +50 +50 +20 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni1E8B +ENCODING 7819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +20 +00 +00 +88 +88 +50 +20 +20 +50 +88 +88 +ENDCHAR +STARTCHAR uni1E8C +ENCODING 7820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +48 +00 +00 +84 +84 +48 +48 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni1E8D +ENCODING 7821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +48 +00 +00 +84 +84 +48 +30 +30 +48 +84 +84 +ENDCHAR +STARTCHAR uni1E8E +ENCODING 7822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +10 +00 +00 +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1E8F +ENCODING 7823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +10 +00 +00 +84 +84 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uni1E90 +ENCODING 7824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +00 +00 +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni1E91 +ENCODING 7825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +48 +00 +00 +FC +04 +08 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni1E92 +ENCODING 7826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +00 +10 +ENDCHAR +STARTCHAR uni1E93 +ENCODING 7827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +04 +08 +10 +20 +40 +80 +FC +00 +10 +ENDCHAR +STARTCHAR uni1E94 +ENCODING 7828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +00 +78 +ENDCHAR +STARTCHAR uni1E95 +ENCODING 7829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +04 +08 +10 +20 +40 +80 +FC +00 +78 +ENDCHAR +STARTCHAR uni1E96 +ENCODING 7830 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +84 +00 +78 +ENDCHAR +STARTCHAR uni1E97 +ENCODING 7831 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +88 +00 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1E98 +ENCODING 7832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +10 +28 +10 +00 +00 +82 +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1E99 +ENCODING 7833 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +10 +28 +10 +00 +00 +84 +84 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uni1E9A +ENCODING 7834 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +04 +02 +02 +04 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1E9B +ENCODING 7835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 0 +BITMAP +40 +00 +30 +40 +40 +40 +C0 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni1E9C +ENCODING 7836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +18 +20 +20 +20 +68 +30 +60 +A0 +20 +20 +20 +ENDCHAR +STARTCHAR uni1E9D +ENCODING 7837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +18 +20 +F8 +20 +60 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni1E9E +ENCODING 7838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +7C +84 +88 +88 +90 +98 +84 +84 +84 +A4 +98 +ENDCHAR +STARTCHAR uni1E9F +ENCODING 7839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +40 +40 +40 +30 +48 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1EA0 +ENCODING 7840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +20 +50 +50 +88 +88 +F8 +88 +88 +88 +88 +00 +20 +ENDCHAR +STARTCHAR uni1EA1 +ENCODING 7841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +04 +7C +84 +84 +8C +74 +00 +20 +ENDCHAR +STARTCHAR uni1EA2 +ENCODING 7842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +80 +40 +40 +80 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni1EA3 +ENCODING 7843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +10 +08 +08 +10 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1EA4 +ENCODING 7844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +04 +28 +50 +88 +20 +50 +50 +88 +88 +F8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni1EA5 +ENCODING 7845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +04 +28 +50 +88 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1EA6 +ENCODING 7846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +80 +50 +28 +44 +10 +28 +28 +44 +44 +7C +44 +44 +44 +44 +ENDCHAR +STARTCHAR uni1EA7 +ENCODING 7847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +80 +50 +28 +44 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1EA8 +ENCODING 7848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +08 +04 +28 +50 +A8 +50 +50 +88 +88 +F8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni1EA9 +ENCODING 7849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +04 +02 +14 +28 +44 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1EAA +ENCODING 7850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 2 0 +BITMAP +64 +98 +20 +50 +88 +20 +50 +50 +88 +88 +F8 +88 +88 +88 +ENDCHAR +STARTCHAR uni1EAB +ENCODING 7851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +32 +4C +10 +28 +44 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1EAC +ENCODING 7852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 15 2 -2 +BITMAP +20 +50 +88 +20 +50 +50 +88 +88 +F8 +88 +88 +88 +88 +00 +20 +ENDCHAR +STARTCHAR uni1EAD +ENCODING 7853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +30 +48 +00 +00 +78 +84 +04 +7C +84 +84 +8C +74 +00 +10 +ENDCHAR +STARTCHAR uni1EAE +ENCODING 7854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 0 +BITMAP +10 +20 +88 +70 +20 +50 +50 +88 +88 +F8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni1EAF +ENCODING 7855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +08 +10 +20 +88 +70 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1EB0 +ENCODING 7856 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 0 +BITMAP +40 +20 +88 +70 +20 +50 +50 +88 +88 +F8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni1EB1 +ENCODING 7857 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +40 +20 +10 +44 +38 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1EB2 +ENCODING 7858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +10 +08 +B2 +7C +10 +28 +28 +44 +44 +7C +44 +44 +44 +44 +ENDCHAR +STARTCHAR uni1EB3 +ENCODING 7859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +10 +10 +20 +88 +70 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1EB4 +ENCODING 7860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +32 +4C +82 +7C +10 +28 +28 +44 +44 +7C +44 +44 +44 +44 +ENDCHAR +STARTCHAR uni1EB5 +ENCODING 7861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +00 +84 +78 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1EB6 +ENCODING 7862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -2 +BITMAP +88 +70 +20 +50 +50 +88 +88 +F8 +88 +88 +88 +88 +00 +20 +ENDCHAR +STARTCHAR uni1EB7 +ENCODING 7863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +48 +30 +00 +78 +84 +04 +7C +84 +84 +8C +74 +00 +20 +ENDCHAR +STARTCHAR uni1EB8 +ENCODING 7864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +00 +20 +ENDCHAR +STARTCHAR uni1EB9 +ENCODING 7865 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +FC +80 +80 +84 +78 +00 +20 +ENDCHAR +STARTCHAR uni1EBA +ENCODING 7866 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +20 +10 +10 +20 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni1EBB +ENCODING 7867 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +20 +10 +10 +20 +00 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1EBC +ENCODING 7868 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +64 +98 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni1EBD +ENCODING 7869 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +64 +98 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1EBE +ENCODING 7870 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +04 +28 +50 +88 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni1EBF +ENCODING 7871 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +04 +28 +50 +88 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1EC0 +ENCODING 7872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +80 +50 +28 +44 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni1EC1 +ENCODING 7873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +80 +50 +28 +44 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1EC2 +ENCODING 7874 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +08 +24 +54 +88 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni1EC3 +ENCODING 7875 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +08 +04 +24 +58 +88 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1EC4 +ENCODING 7876 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +20 +50 +88 +FC +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni1EC5 +ENCODING 7877 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +20 +50 +88 +00 +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1EC6 +ENCODING 7878 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +30 +48 +00 +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +00 +10 +ENDCHAR +STARTCHAR uni1EC7 +ENCODING 7879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +30 +48 +00 +00 +78 +84 +84 +FC +80 +80 +84 +78 +00 +10 +ENDCHAR +STARTCHAR uni1EC8 +ENCODING 7880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +20 +10 +10 +20 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni1EC9 +ENCODING 7881 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 0 +BITMAP +40 +20 +20 +40 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni1ECA +ENCODING 7882 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 -2 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +00 +20 +ENDCHAR +STARTCHAR uni1ECB +ENCODING 7883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 -2 +BITMAP +20 +20 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +00 +20 +ENDCHAR +STARTCHAR uni1ECC +ENCODING 7884 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +00 +10 +ENDCHAR +STARTCHAR uni1ECD +ENCODING 7885 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +84 +84 +84 +84 +78 +00 +10 +ENDCHAR +STARTCHAR uni1ECE +ENCODING 7886 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +20 +10 +10 +20 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1ECF +ENCODING 7887 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +20 +10 +10 +20 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1ED0 +ENCODING 7888 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +04 +28 +50 +88 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1ED1 +ENCODING 7889 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +04 +28 +50 +88 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1ED2 +ENCODING 7890 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +80 +50 +28 +44 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1ED3 +ENCODING 7891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +80 +50 +28 +44 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1ED4 +ENCODING 7892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +08 +24 +54 +88 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1ED5 +ENCODING 7893 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +08 +04 +24 +58 +88 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1ED6 +ENCODING 7894 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +20 +50 +88 +78 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1ED7 +ENCODING 7895 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +20 +50 +88 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1ED8 +ENCODING 7896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +30 +48 +00 +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +00 +10 +ENDCHAR +STARTCHAR uni1ED9 +ENCODING 7897 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +30 +48 +00 +00 +78 +84 +84 +84 +84 +84 +84 +78 +00 +10 +ENDCHAR +STARTCHAR uni1EDA +ENCODING 7898 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +10 +20 +44 +02 +72 +8C +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EDB +ENCODING 7899 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +10 +20 +44 +02 +72 +8C +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EDC +ENCODING 7900 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +40 +20 +14 +02 +72 +8C +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EDD +ENCODING 7901 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +40 +20 +14 +02 +72 +8C +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EDE +ENCODING 7902 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +20 +10 +14 +22 +72 +8C +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EDF +ENCODING 7903 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +20 +10 +10 +24 +02 +72 +8C +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EE0 +ENCODING 7904 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +64 +98 +04 +72 +8A +8C +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EE1 +ENCODING 7905 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +64 +98 +00 +04 +02 +72 +8C +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EE2 +ENCODING 7906 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +04 +02 +72 +8C +88 +88 +88 +88 +88 +88 +88 +70 +00 +20 +ENDCHAR +STARTCHAR uni1EE3 +ENCODING 7907 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +04 +02 +72 +8C +88 +88 +88 +88 +88 +70 +00 +20 +ENDCHAR +STARTCHAR uni1EE4 +ENCODING 7908 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +00 +10 +ENDCHAR +STARTCHAR uni1EE5 +ENCODING 7909 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +8C +74 +00 +10 +ENDCHAR +STARTCHAR uni1EE6 +ENCODING 7910 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +20 +10 +10 +20 +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1EE7 +ENCODING 7911 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +20 +10 +10 +20 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni1EE8 +ENCODING 7912 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +08 +10 +24 +02 +8A +8C +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EE9 +ENCODING 7913 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +08 +10 +24 +02 +8A +8C +88 +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni1EEA +ENCODING 7914 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +80 +40 +24 +02 +8A +8C +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EEB +ENCODING 7915 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +80 +40 +24 +02 +8A +8C +88 +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni1EEC +ENCODING 7916 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +20 +10 +14 +22 +8A +8C +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EED +ENCODING 7917 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +20 +10 +10 +24 +02 +8A +8C +88 +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni1EEE +ENCODING 7918 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +64 +98 +04 +02 +8A +8C +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EEF +ENCODING 7919 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +64 +98 +00 +04 +02 +8A +8C +88 +88 +88 +88 +98 +68 +ENDCHAR +STARTCHAR uni1EF0 +ENCODING 7920 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +04 +02 +8A +8C +88 +88 +88 +88 +88 +88 +88 +70 +00 +20 +ENDCHAR +STARTCHAR uni1EF1 +ENCODING 7921 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +04 +02 +8A +8C +88 +88 +88 +88 +98 +68 +00 +20 +ENDCHAR +STARTCHAR uni1EF2 +ENCODING 7922 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +40 +20 +10 +00 +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1EF3 +ENCODING 7923 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +40 +20 +10 +00 +00 +84 +84 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uni1EF4 +ENCODING 7924 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +00 +10 +ENDCHAR +STARTCHAR uni1EF5 +ENCODING 7925 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +84 +84 +84 +4C +34 +04 +78 +10 +ENDCHAR +STARTCHAR uni1EF6 +ENCODING 7926 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +10 +08 +08 +10 +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1EF7 +ENCODING 7927 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +20 +10 +10 +20 +00 +84 +84 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uni1EF8 +ENCODING 7928 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +64 +98 +00 +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1EF9 +ENCODING 7929 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +64 +98 +00 +00 +84 +84 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uni1EFA +ENCODING 7930 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +F0 +50 +50 +50 +50 +50 +50 +50 +50 +50 +FE +ENDCHAR +STARTCHAR uni1EFB +ENCODING 7931 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +6C +24 +24 +24 +7E +24 +24 +24 +24 +24 +FF +ENDCHAR +STARTCHAR uni1EFC +ENCODING 7932 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +10 +20 +20 +40 +48 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1EFD +ENCODING 7933 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +10 +20 +40 +40 +90 +88 +88 +70 +ENDCHAR +STARTCHAR uni1EFE +ENCODING 7934 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +44 +28 +28 +10 +10 +10 +10 +70 +90 +60 +ENDCHAR +STARTCHAR uni1EFF +ENCODING 7935 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +44 +28 +28 +10 +10 +70 +90 +60 +ENDCHAR +STARTCHAR uni1F00 +ENCODING 7936 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +60 +20 +40 +00 +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni1F01 +ENCODING 7937 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +60 +40 +20 +00 +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni1F02 +ENCODING 7938 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +D0 +50 +88 +00 +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni1F03 +ENCODING 7939 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +D0 +90 +48 +00 +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni1F04 +ENCODING 7940 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +C8 +50 +90 +00 +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni1F05 +ENCODING 7941 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +C8 +90 +50 +00 +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni1F06 +ENCODING 7942 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +64 +98 +00 +30 +10 +20 +00 +32 +4A +44 +44 +44 +4A +32 +ENDCHAR +STARTCHAR uni1F07 +ENCODING 7943 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +64 +98 +00 +30 +20 +10 +00 +32 +4A +44 +44 +44 +4A +32 +ENDCHAR +STARTCHAR uni1F08 +ENCODING 7944 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C0 +40 +80 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F09 +ENCODING 7945 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C0 +80 +40 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F0A +ENCODING 7946 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +D0 +50 +88 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F0B +ENCODING 7947 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +D0 +90 +48 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F0C +ENCODING 7948 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C8 +50 +90 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F0D +ENCODING 7949 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C8 +90 +50 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F0E +ENCODING 7950 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +64 +98 +60 +20 +40 +18 +24 +24 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F0F +ENCODING 7951 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +64 +98 +60 +40 +20 +18 +24 +24 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F10 +ENCODING 7952 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +10 +20 +00 +78 +84 +80 +78 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1F11 +ENCODING 7953 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +20 +10 +00 +78 +84 +80 +78 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1F12 +ENCODING 7954 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +68 +28 +44 +00 +78 +84 +80 +78 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1F13 +ENCODING 7955 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +68 +48 +24 +00 +78 +84 +80 +78 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1F14 +ENCODING 7956 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +28 +48 +00 +78 +84 +80 +78 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1F15 +ENCODING 7957 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +48 +28 +00 +78 +84 +80 +78 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1F18 +ENCODING 7960 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C0 +40 +80 +00 +7E +40 +40 +40 +7C +40 +40 +40 +40 +7E +ENDCHAR +STARTCHAR uni1F19 +ENCODING 7961 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C0 +80 +40 +00 +7E +40 +40 +40 +7C +40 +40 +40 +40 +7E +ENDCHAR +STARTCHAR uni1F1A +ENCODING 7962 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +D0 +50 +88 +00 +7E +40 +40 +40 +7C +40 +40 +40 +40 +7E +ENDCHAR +STARTCHAR uni1F1B +ENCODING 7963 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +D0 +90 +48 +00 +7E +40 +40 +40 +7C +40 +40 +40 +40 +7E +ENDCHAR +STARTCHAR uni1F1C +ENCODING 7964 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C8 +50 +90 +00 +7E +40 +40 +40 +7C +40 +40 +40 +40 +7E +ENDCHAR +STARTCHAR uni1F1D +ENCODING 7965 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C8 +90 +50 +00 +7E +40 +40 +40 +7C +40 +40 +40 +40 +7E +ENDCHAR +STARTCHAR uni1F20 +ENCODING 7968 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +30 +10 +20 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni1F21 +ENCODING 7969 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +30 +20 +10 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni1F22 +ENCODING 7970 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +68 +28 +44 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni1F23 +ENCODING 7971 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +68 +48 +24 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni1F24 +ENCODING 7972 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +64 +28 +48 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni1F25 +ENCODING 7973 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +64 +48 +28 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni1F26 +ENCODING 7974 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 16 1 -2 +BITMAP +64 +98 +00 +30 +10 +20 +00 +B8 +C4 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni1F27 +ENCODING 7975 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 16 1 -2 +BITMAP +64 +98 +00 +30 +20 +10 +00 +B8 +C4 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni1F28 +ENCODING 7976 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C0 +40 +80 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F29 +ENCODING 7977 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C0 +80 +40 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F2A +ENCODING 7978 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +D0 +50 +88 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F2B +ENCODING 7979 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +D0 +90 +48 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F2C +ENCODING 7980 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C8 +50 +90 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F2D +ENCODING 7981 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C8 +90 +50 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F2E +ENCODING 7982 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +64 +98 +60 +20 +40 +42 +42 +42 +7E +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F2F +ENCODING 7983 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +64 +98 +60 +40 +20 +42 +42 +42 +7E +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1F30 +ENCODING 7984 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 0 +BITMAP +60 +20 +40 +00 +C0 +40 +40 +40 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni1F31 +ENCODING 7985 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 0 +BITMAP +60 +40 +20 +00 +C0 +40 +40 +40 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni1F32 +ENCODING 7986 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +D0 +50 +88 +00 +60 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1F33 +ENCODING 7987 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +D0 +90 +48 +00 +60 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1F34 +ENCODING 7988 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +C8 +50 +90 +00 +60 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1F35 +ENCODING 7989 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +C8 +90 +50 +00 +60 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1F36 +ENCODING 7990 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +00 +30 +10 +20 +00 +60 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1F37 +ENCODING 7991 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +00 +30 +20 +10 +00 +60 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1F38 +ENCODING 7992 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C0 +40 +80 +00 +3E +08 +08 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni1F39 +ENCODING 7993 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C0 +80 +60 +00 +3E +08 +08 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni1F3A +ENCODING 7994 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +D0 +50 +88 +00 +3E +08 +08 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni1F3B +ENCODING 7995 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +D0 +90 +48 +00 +3E +08 +08 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni1F3C +ENCODING 7996 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C8 +50 +90 +00 +3E +08 +08 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni1F3D +ENCODING 7997 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C8 +90 +50 +00 +3E +08 +08 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni1F3E +ENCODING 7998 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +64 +98 +60 +20 +40 +3E +08 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni1F3F +ENCODING 7999 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +64 +98 +60 +40 +20 +3E +08 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni1F40 +ENCODING 8000 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +10 +20 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F41 +ENCODING 8001 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +20 +10 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F42 +ENCODING 8002 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +68 +28 +44 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F43 +ENCODING 8003 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +68 +48 +24 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F44 +ENCODING 8004 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +28 +48 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F45 +ENCODING 8005 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +48 +28 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F48 +ENCODING 8008 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C0 +40 +80 +00 +3C +42 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni1F49 +ENCODING 8009 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C0 +80 +40 +00 +3C +42 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni1F4A +ENCODING 8010 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +D0 +50 +88 +00 +3C +42 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni1F4B +ENCODING 8011 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +D0 +90 +48 +00 +3C +42 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni1F4C +ENCODING 8012 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C8 +50 +90 +00 +3C +42 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni1F4D +ENCODING 8013 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C8 +90 +50 +00 +3C +42 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni1F50 +ENCODING 8016 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +10 +20 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F51 +ENCODING 8017 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +20 +10 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F52 +ENCODING 8018 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +68 +28 +44 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F53 +ENCODING 8019 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +68 +48 +24 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F54 +ENCODING 8020 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +28 +48 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F55 +ENCODING 8021 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +64 +48 +28 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F56 +ENCODING 8022 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +00 +30 +10 +20 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F57 +ENCODING 8023 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +64 +98 +00 +30 +20 +10 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F59 +ENCODING 8025 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +C0 +80 +40 +00 +41 +41 +22 +22 +14 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1F5B +ENCODING 8027 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +D0 +90 +48 +00 +41 +41 +22 +22 +14 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1F5D +ENCODING 8029 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +C8 +90 +50 +00 +41 +41 +22 +22 +14 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1F5F +ENCODING 8031 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +64 +98 +60 +40 +20 +41 +22 +22 +14 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1F60 +ENCODING 8032 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +18 +08 +10 +00 +44 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1F61 +ENCODING 8033 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +18 +10 +08 +00 +44 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1F62 +ENCODING 8034 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +68 +28 +44 +00 +44 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1F63 +ENCODING 8035 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +68 +48 +24 +00 +44 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1F64 +ENCODING 8036 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +64 +28 +48 +00 +44 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1F65 +ENCODING 8037 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +64 +48 +28 +00 +44 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1F66 +ENCODING 8038 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +64 +98 +00 +30 +10 +20 +00 +44 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1F67 +ENCODING 8039 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +64 +98 +00 +30 +20 +10 +00 +44 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1F68 +ENCODING 8040 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +C0 +40 +80 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +ENDCHAR +STARTCHAR uni1F69 +ENCODING 8041 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +C0 +80 +40 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +ENDCHAR +STARTCHAR uni1F6A +ENCODING 8042 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +D0 +50 +88 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +ENDCHAR +STARTCHAR uni1F6B +ENCODING 8043 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +D0 +90 +48 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +ENDCHAR +STARTCHAR uni1F6C +ENCODING 8044 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +C8 +50 +90 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +ENDCHAR +STARTCHAR uni1F6D +ENCODING 8045 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +C8 +90 +50 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +ENDCHAR +STARTCHAR uni1F6E +ENCODING 8046 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +64 +98 +30 +10 +20 +38 +44 +82 +82 +82 +44 +28 +28 +EE +ENDCHAR +STARTCHAR uni1F6F +ENCODING 8047 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +64 +98 +30 +20 +10 +38 +46 +82 +82 +82 +44 +28 +28 +EE +ENDCHAR +STARTCHAR uni1F70 +ENCODING 8048 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +40 +40 +20 +00 +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni1F71 +ENCODING 8049 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +40 +40 +00 +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni1F72 +ENCODING 8050 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +20 +10 +00 +78 +84 +80 +78 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1F73 +ENCODING 8051 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +10 +20 +20 +00 +78 +84 +80 +78 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni1F74 +ENCODING 8052 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +20 +20 +10 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni1F75 +ENCODING 8053 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +10 +20 +20 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni1F76 +ENCODING 8054 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 0 +BITMAP +40 +40 +20 +00 +C0 +40 +40 +40 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni1F77 +ENCODING 8055 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 0 +BITMAP +20 +40 +40 +00 +C0 +40 +40 +40 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni1F78 +ENCODING 8056 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +20 +10 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F79 +ENCODING 8057 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +10 +20 +20 +00 +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F7A +ENCODING 8058 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +20 +10 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F7B +ENCODING 8059 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +10 +20 +20 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1F7C +ENCODING 8060 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +20 +20 +10 +00 +44 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1F7D +ENCODING 8061 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +08 +10 +10 +00 +44 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1F80 +ENCODING 8064 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +60 +20 +40 +00 +64 +94 +88 +88 +88 +88 +94 +64 +40 +60 +ENDCHAR +STARTCHAR uni1F81 +ENCODING 8065 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +60 +40 +20 +00 +64 +94 +88 +88 +88 +88 +94 +64 +40 +60 +ENDCHAR +STARTCHAR uni1F82 +ENCODING 8066 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +D0 +50 +88 +00 +64 +94 +88 +88 +88 +88 +94 +64 +40 +60 +ENDCHAR +STARTCHAR uni1F83 +ENCODING 8067 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +D0 +90 +48 +00 +64 +94 +88 +88 +88 +88 +94 +64 +40 +60 +ENDCHAR +STARTCHAR uni1F84 +ENCODING 8068 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +C8 +50 +90 +00 +64 +94 +88 +88 +88 +88 +94 +64 +40 +60 +ENDCHAR +STARTCHAR uni1F85 +ENCODING 8069 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +C8 +90 +50 +00 +64 +94 +88 +88 +88 +88 +94 +64 +40 +60 +ENDCHAR +STARTCHAR uni1F86 +ENCODING 8070 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 16 1 -2 +BITMAP +64 +98 +00 +60 +20 +40 +00 +64 +94 +88 +88 +88 +94 +64 +40 +60 +ENDCHAR +STARTCHAR uni1F87 +ENCODING 8071 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 16 1 -2 +BITMAP +64 +98 +00 +60 +40 +20 +00 +64 +94 +88 +88 +88 +94 +64 +40 +60 +ENDCHAR +STARTCHAR uni1F88 +ENCODING 8072 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +C0 +40 +80 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +10 +0C +ENDCHAR +STARTCHAR uni1F89 +ENCODING 8073 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +C0 +80 +40 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +10 +0C +ENDCHAR +STARTCHAR uni1F8A +ENCODING 8074 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +D0 +50 +88 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +10 +0C +ENDCHAR +STARTCHAR uni1F8B +ENCODING 8075 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +D0 +90 +48 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +10 +0C +ENDCHAR +STARTCHAR uni1F8C +ENCODING 8076 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +C8 +50 +90 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +10 +0C +ENDCHAR +STARTCHAR uni1F8D +ENCODING 8077 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +C8 +90 +50 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +10 +0C +ENDCHAR +STARTCHAR uni1F8E +ENCODING 8078 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +64 +98 +60 +20 +40 +18 +24 +24 +42 +7E +42 +42 +42 +42 +10 +0C +ENDCHAR +STARTCHAR uni1F8F +ENCODING 8079 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +64 +98 +60 +40 +20 +18 +24 +24 +42 +7E +42 +42 +42 +42 +10 +0C +ENDCHAR +STARTCHAR uni1F90 +ENCODING 8080 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +30 +10 +20 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +44 +64 +ENDCHAR +STARTCHAR uni1F91 +ENCODING 8081 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +30 +20 +10 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +44 +64 +ENDCHAR +STARTCHAR uni1F92 +ENCODING 8082 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +68 +28 +44 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +44 +64 +ENDCHAR +STARTCHAR uni1F93 +ENCODING 8083 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +68 +48 +24 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +44 +64 +ENDCHAR +STARTCHAR uni1F94 +ENCODING 8084 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +64 +28 +48 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +44 +64 +ENDCHAR +STARTCHAR uni1F95 +ENCODING 8085 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +64 +48 +28 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +44 +64 +ENDCHAR +STARTCHAR uni1F96 +ENCODING 8086 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 16 1 -2 +BITMAP +64 +98 +00 +30 +10 +20 +00 +B8 +C4 +84 +84 +84 +84 +84 +44 +64 +ENDCHAR +STARTCHAR uni1F97 +ENCODING 8087 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 16 1 -2 +BITMAP +64 +98 +00 +30 +20 +10 +00 +B8 +C4 +84 +84 +84 +84 +84 +44 +64 +ENDCHAR +STARTCHAR uni1F98 +ENCODING 8088 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +C0 +40 +80 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +20 +18 +ENDCHAR +STARTCHAR uni1F99 +ENCODING 8089 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +C0 +80 +40 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +20 +18 +ENDCHAR +STARTCHAR uni1F9A +ENCODING 8090 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +D0 +50 +88 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +20 +18 +ENDCHAR +STARTCHAR uni1F9B +ENCODING 8091 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +D0 +90 +48 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +20 +18 +ENDCHAR +STARTCHAR uni1F9C +ENCODING 8092 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +C8 +50 +90 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +20 +18 +ENDCHAR +STARTCHAR uni1F9D +ENCODING 8093 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +C8 +90 +50 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +20 +18 +ENDCHAR +STARTCHAR uni1F9E +ENCODING 8094 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +64 +98 +60 +20 +40 +42 +42 +42 +7E +42 +42 +42 +42 +42 +20 +18 +ENDCHAR +STARTCHAR uni1F9F +ENCODING 8095 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +64 +98 +60 +40 +20 +42 +42 +42 +7E +42 +42 +42 +42 +42 +20 +18 +ENDCHAR +STARTCHAR uni1FA0 +ENCODING 8096 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +30 +10 +20 +00 +44 +82 +82 +92 +92 +92 +92 +6C +10 +18 +ENDCHAR +STARTCHAR uni1FA1 +ENCODING 8097 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +30 +20 +10 +00 +44 +82 +82 +92 +92 +92 +92 +6C +10 +18 +ENDCHAR +STARTCHAR uni1FA2 +ENCODING 8098 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +68 +28 +44 +00 +44 +82 +82 +92 +92 +92 +92 +6C +10 +18 +ENDCHAR +STARTCHAR uni1FA3 +ENCODING 8099 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +68 +48 +24 +00 +44 +82 +82 +92 +92 +92 +92 +6C +10 +18 +ENDCHAR +STARTCHAR uni1FA4 +ENCODING 8100 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +64 +28 +48 +00 +44 +82 +82 +92 +92 +92 +92 +6C +10 +18 +ENDCHAR +STARTCHAR uni1FA5 +ENCODING 8101 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +64 +48 +28 +00 +44 +82 +82 +92 +92 +92 +92 +6C +10 +18 +ENDCHAR +STARTCHAR uni1FA6 +ENCODING 8102 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 1 -2 +BITMAP +64 +98 +00 +30 +10 +20 +00 +44 +82 +92 +92 +92 +92 +6C +10 +18 +ENDCHAR +STARTCHAR uni1FA7 +ENCODING 8103 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 1 -2 +BITMAP +64 +98 +00 +30 +20 +10 +00 +44 +82 +92 +92 +92 +92 +6C +10 +18 +ENDCHAR +STARTCHAR uni1FA8 +ENCODING 8104 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +C0 +40 +80 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +08 +06 +ENDCHAR +STARTCHAR uni1FA9 +ENCODING 8105 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +C0 +80 +40 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +08 +06 +ENDCHAR +STARTCHAR uni1FAA +ENCODING 8106 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +D0 +50 +88 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +08 +06 +ENDCHAR +STARTCHAR uni1FAB +ENCODING 8107 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +D0 +90 +48 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +08 +06 +ENDCHAR +STARTCHAR uni1FAC +ENCODING 8108 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +C8 +50 +90 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +08 +06 +ENDCHAR +STARTCHAR uni1FAD +ENCODING 8109 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +C8 +90 +50 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +08 +06 +ENDCHAR +STARTCHAR uni1FAE +ENCODING 8110 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +64 +98 +60 +20 +40 +1C +22 +41 +41 +41 +22 +14 +14 +77 +08 +06 +ENDCHAR +STARTCHAR uni1FAF +ENCODING 8111 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +64 +98 +60 +40 +20 +1C +22 +41 +41 +41 +22 +14 +14 +77 +08 +06 +ENDCHAR +STARTCHAR uni1FB0 +ENCODING 8112 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +88 +88 +70 +00 +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni1FB1 +ENCODING 8113 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +00 +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni1FB2 +ENCODING 8114 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +40 +40 +20 +00 +64 +94 +88 +88 +88 +88 +94 +64 +40 +60 +ENDCHAR +STARTCHAR uni1FB3 +ENCODING 8115 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +64 +94 +88 +88 +88 +88 +94 +64 +40 +60 +ENDCHAR +STARTCHAR uni1FB4 +ENCODING 8116 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +20 +40 +40 +00 +64 +94 +88 +88 +88 +88 +94 +64 +40 +60 +ENDCHAR +STARTCHAR uni1FB6 +ENCODING 8118 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +64 +98 +00 +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni1FB7 +ENCODING 8119 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +64 +98 +00 +64 +94 +88 +88 +88 +88 +94 +64 +40 +60 +ENDCHAR +STARTCHAR uni1FB8 +ENCODING 8120 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +84 +84 +78 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni1FB9 +ENCODING 8121 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +78 +00 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni1FBA +ENCODING 8122 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +80 +80 +40 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1FBB +ENCODING 8123 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +40 +80 +80 +00 +18 +24 +24 +42 +42 +7E +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1FBC +ENCODING 8124 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +20 +18 +ENDCHAR +STARTCHAR uni1FBD +ENCODING 8125 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 3 3 7 +BITMAP +C0 +40 +80 +ENDCHAR +STARTCHAR uni1FBE +ENCODING 8126 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 2 0 +BITMAP +80 +80 +80 +60 +ENDCHAR +STARTCHAR uni1FBF +ENCODING 8127 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 3 3 11 +BITMAP +C0 +40 +80 +ENDCHAR +STARTCHAR uni1FC0 +ENCODING 8128 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 12 +BITMAP +64 +98 +ENDCHAR +STARTCHAR uni1FC1 +ENCODING 8129 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 10 +BITMAP +64 +98 +00 +CC +ENDCHAR +STARTCHAR uni1FC2 +ENCODING 8130 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +20 +20 +10 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +44 +64 +ENDCHAR +STARTCHAR uni1FC3 +ENCODING 8131 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +44 +64 +ENDCHAR +STARTCHAR uni1FC4 +ENCODING 8132 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +10 +20 +20 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +44 +64 +ENDCHAR +STARTCHAR uni1FC6 +ENCODING 8134 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +64 +98 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +04 +04 +ENDCHAR +STARTCHAR uni1FC7 +ENCODING 8135 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +64 +98 +00 +B8 +C4 +84 +84 +84 +84 +84 +84 +44 +64 +ENDCHAR +STARTCHAR uni1FC8 +ENCODING 8136 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +80 +80 +40 +00 +7E +40 +40 +40 +7C +40 +40 +40 +40 +7E +ENDCHAR +STARTCHAR uni1FC9 +ENCODING 8137 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +40 +80 +80 +00 +7E +40 +40 +40 +7C +40 +40 +40 +40 +7E +ENDCHAR +STARTCHAR uni1FCA +ENCODING 8138 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +80 +80 +40 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1FCB +ENCODING 8139 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +40 +80 +80 +00 +42 +42 +42 +42 +7E +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni1FCC +ENCODING 8140 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +20 +18 +ENDCHAR +STARTCHAR uni1FCD +ENCODING 8141 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 11 +BITMAP +D0 +50 +88 +ENDCHAR +STARTCHAR uni1FCE +ENCODING 8142 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 11 +BITMAP +C8 +50 +90 +ENDCHAR +STARTCHAR uni1FCF +ENCODING 8143 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 8 +BITMAP +64 +98 +00 +30 +10 +20 +ENDCHAR +STARTCHAR uni1FD0 +ENCODING 8144 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +88 +88 +70 +00 +60 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1FD1 +ENCODING 8145 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +F0 +00 +C0 +40 +40 +40 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni1FD2 +ENCODING 8146 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +20 +20 +10 +00 +CC +00 +60 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1FD3 +ENCODING 8147 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +10 +20 +20 +00 +CC +00 +60 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1FD6 +ENCODING 8150 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +64 +98 +00 +60 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1FD7 +ENCODING 8151 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +64 +98 +00 +CC +00 +60 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni1FD8 +ENCODING 8152 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +88 +88 +70 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni1FD9 +ENCODING 8153 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 0 +BITMAP +F8 +00 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni1FDA +ENCODING 8154 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +80 +80 +40 +00 +3E +08 +08 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni1FDB +ENCODING 8155 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +40 +80 +80 +00 +3E +08 +08 +08 +08 +08 +08 +08 +08 +3E +ENDCHAR +STARTCHAR uni1FDD +ENCODING 8157 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 11 +BITMAP +D0 +90 +48 +ENDCHAR +STARTCHAR uni1FDE +ENCODING 8158 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 11 +BITMAP +C8 +90 +50 +ENDCHAR +STARTCHAR uni1FDF +ENCODING 8159 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 8 +BITMAP +64 +98 +00 +30 +20 +10 +ENDCHAR +STARTCHAR uni1FE0 +ENCODING 8160 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +84 +84 +78 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1FE1 +ENCODING 8161 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +78 +00 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1FE2 +ENCODING 8162 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +20 +20 +10 +00 +CC +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1FE3 +ENCODING 8163 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +10 +20 +20 +00 +CC +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1FE4 +ENCODING 8164 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +30 +10 +20 +00 +78 +84 +84 +84 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni1FE5 +ENCODING 8165 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +30 +20 +10 +00 +78 +84 +84 +84 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni1FE6 +ENCODING 8166 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +64 +98 +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1FE7 +ENCODING 8167 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +64 +98 +00 +CC +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni1FE8 +ENCODING 8168 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +44 +44 +38 +00 +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1FE9 +ENCODING 8169 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +7C +00 +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni1FEA +ENCODING 8170 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +80 +80 +40 +00 +41 +41 +22 +22 +14 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1FEB +ENCODING 8171 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +40 +80 +80 +00 +41 +41 +22 +22 +14 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni1FEC +ENCODING 8172 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +C0 +80 +40 +00 +7C +42 +42 +42 +7C +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni1FED +ENCODING 8173 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 9 +BITMAP +20 +20 +10 +00 +CC +ENDCHAR +STARTCHAR uni1FEE +ENCODING 8174 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 9 +BITMAP +10 +20 +20 +00 +CC +ENDCHAR +STARTCHAR uni1FEF +ENCODING 8175 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 3 3 11 +BITMAP +80 +80 +40 +ENDCHAR +STARTCHAR uni1FF2 +ENCODING 8178 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +20 +20 +10 +00 +44 +82 +82 +92 +92 +92 +92 +6C +10 +18 +ENDCHAR +STARTCHAR uni1FF3 +ENCODING 8179 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +44 +82 +82 +92 +92 +92 +92 +6C +10 +18 +ENDCHAR +STARTCHAR uni1FF4 +ENCODING 8180 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +08 +10 +10 +00 +44 +82 +82 +92 +92 +92 +92 +6C +10 +18 +ENDCHAR +STARTCHAR uni1FF6 +ENCODING 8182 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +64 +98 +00 +44 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni1FF7 +ENCODING 8183 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +64 +98 +00 +44 +82 +82 +92 +92 +92 +92 +6C +10 +18 +ENDCHAR +STARTCHAR uni1FF8 +ENCODING 8184 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +80 +80 +40 +00 +3C +42 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni1FF9 +ENCODING 8185 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +40 +80 +80 +00 +3C +42 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni1FFA +ENCODING 8186 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +80 +80 +40 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +ENDCHAR +STARTCHAR uni1FFB +ENCODING 8187 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 0 +BITMAP +40 +80 +80 +00 +3E +41 +41 +41 +41 +41 +22 +14 +14 +77 +ENDCHAR +STARTCHAR uni1FFC +ENCODING 8188 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +7C +82 +82 +82 +82 +82 +44 +28 +28 +EE +10 +0C +ENDCHAR +STARTCHAR uni1FFD +ENCODING 8189 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 3 3 11 +BITMAP +40 +80 +80 +ENDCHAR +STARTCHAR uni1FFE +ENCODING 8190 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 3 3 11 +BITMAP +C0 +80 +40 +ENDCHAR +STARTCHAR uni2000 +ENCODING 8192 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni2001 +ENCODING 8193 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni2002 +ENCODING 8194 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni2003 +ENCODING 8195 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni2004 +ENCODING 8196 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni2005 +ENCODING 8197 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni2006 +ENCODING 8198 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni2007 +ENCODING 8199 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni2008 +ENCODING 8200 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni2009 +ENCODING 8201 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni200A +ENCODING 8202 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni200B +ENCODING 8203 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +9E44 +0245 +8454 +0855 +906C +1E45 +8000 +0E39 +9024 +0C39 +8220 +1C21 +8000 +5555 +ENDCHAR +STARTCHAR uni200C +ENCODING 8204 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +9E44 +0245 +8454 +0855 +906C +1E45 +8000 +1209 +9A08 +1649 +9248 +1231 +8000 +5555 +ENDCHAR +STARTCHAR uni200D +ENCODING 8205 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +9E44 +0245 +8454 +0855 +906C +1E45 +8000 +0041 +8040 +0241 +8240 +0181 +8000 +5555 +ENDCHAR +STARTCHAR uni200E +ENCODING 8206 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +C722 +44B7 +C72A +4523 +F4A2 +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni200F +ENCODING 8207 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +F222 +4A37 +F22A +5223 +CBA2 +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni2010 +ENCODING 8208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 1 2 4 +BITMAP +F0 +ENDCHAR +STARTCHAR uni2011 +ENCODING 8209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 1 2 4 +BITMAP +F0 +ENDCHAR +STARTCHAR uni2012 +ENCODING 8210 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 1 1 4 +BITMAP +FC +ENDCHAR +STARTCHAR uni2013 +ENCODING 8211 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 1 1 4 +BITMAP +FC +ENDCHAR +STARTCHAR uni2014 +ENCODING 8212 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 1 0 4 +BITMAP +FF +ENDCHAR +STARTCHAR uni2015 +ENCODING 8213 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 1 0 4 +BITMAP +FF +ENDCHAR +STARTCHAR uni2016 +ENCODING 8214 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 3 -1 +BITMAP +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni2017 +ENCODING 8215 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 -2 +BITMAP +FF +00 +FF +ENDCHAR +STARTCHAR uni2018 +ENCODING 8216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 8 +BITMAP +40 +80 +80 +C0 +ENDCHAR +STARTCHAR uni2019 +ENCODING 8217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 8 +BITMAP +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uni201A +ENCODING 8218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 -2 +BITMAP +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uni201B +ENCODING 8219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 8 +BITMAP +C0 +80 +80 +40 +ENDCHAR +STARTCHAR uni201C +ENCODING 8220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 8 +BITMAP +44 +88 +88 +CC +ENDCHAR +STARTCHAR uni201D +ENCODING 8221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 8 +BITMAP +CC +44 +44 +88 +ENDCHAR +STARTCHAR uni201E +ENCODING 8222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 -2 +BITMAP +CC +44 +44 +88 +ENDCHAR +STARTCHAR uni201F +ENCODING 8223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 8 +BITMAP +CC +88 +88 +44 +ENDCHAR +STARTCHAR uni2020 +ENCODING 8224 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +10 +38 +10 +54 +FE +54 +10 +38 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2021 +ENCODING 8225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +10 +38 +10 +54 +FE +54 +10 +10 +54 +FE +54 +10 +38 +10 +ENDCHAR +STARTCHAR uni2022 +ENCODING 8226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 2 +BITMAP +70 +F8 +F8 +F8 +70 +ENDCHAR +STARTCHAR uni2023 +ENCODING 8227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 1 +BITMAP +80 +C0 +E0 +F0 +E0 +C0 +80 +ENDCHAR +STARTCHAR uni2024 +ENCODING 8228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 0 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni2025 +ENCODING 8229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 2 2 0 +BITMAP +D8 +D8 +ENDCHAR +STARTCHAR uni2026 +ENCODING 8230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 1 0 +BITMAP +92 +92 +ENDCHAR +STARTCHAR uni2027 +ENCODING 8231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 3 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni2028 +ENCODING 8232 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0201 +8200 +0201 +8200 +03C1 +8000 +3BDD +C212 +33DD +8A10 +73D1 +8000 +5555 +ENDCHAR +STARTCHAR uni2029 +ENCODING 8233 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0381 +8240 +0381 +8200 +0201 +8000 +3BDD +C212 +33DD +8A10 +73D1 +8000 +5555 +ENDCHAR +STARTCHAR uni202A +ENCODING 8234 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +C39E +4251 +C39E +4291 +FA5E +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni202B +ENCODING 8235 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +F21E +4A11 +F21E +5211 +CBDE +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni202C +ENCODING 8236 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +F39E +4A51 +F25E +4251 +C390 +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni202D +ENCODING 8237 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +C38C +4253 +C392 +4293 +FA4C +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni202E +ENCODING 8238 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +F20C +4A13 +F212 +5213 +CBCC +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni202F +ENCODING 8239 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni2030 +ENCODING 8240 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +42 +A4 +A4 +48 +10 +10 +2A +55 +55 +8A +ENDCHAR +STARTCHAR uni2031 +ENCODING 8241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +40 +A0 +A0 +4C +30 +C0 +2A +55 +55 +2A +ENDCHAR +STARTCHAR uni2032 +ENCODING 8242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 6 +BITMAP +30 +60 +40 +80 +ENDCHAR +STARTCHAR uni2033 +ENCODING 8243 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 6 +BITMAP +33 +66 +44 +88 +ENDCHAR +STARTCHAR uni2034 +ENCODING 8244 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 6 +BITMAP +3F +7E +54 +A8 +ENDCHAR +STARTCHAR uni2035 +ENCODING 8245 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 6 +BITMAP +C0 +60 +20 +10 +ENDCHAR +STARTCHAR uni2036 +ENCODING 8246 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 6 +BITMAP +CC +66 +22 +11 +ENDCHAR +STARTCHAR uni2037 +ENCODING 8247 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 6 +BITMAP +FC +7E +2A +15 +ENDCHAR +STARTCHAR uni2038 +ENCODING 8248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 -2 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni2039 +ENCODING 8249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 3 0 +BITMAP +20 +20 +40 +40 +80 +40 +40 +20 +20 +ENDCHAR +STARTCHAR uni203A +ENCODING 8250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 0 +BITMAP +80 +80 +40 +40 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni203B +ENCODING 8251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +92 +44 +28 +92 +28 +44 +92 +ENDCHAR +STARTCHAR uni203C +ENCODING 8252 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +90 +90 +90 +90 +90 +90 +90 +00 +90 +90 +ENDCHAR +STARTCHAR uni203D +ENCODING 8253 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +94 +94 +14 +18 +10 +10 +00 +10 +10 +ENDCHAR +STARTCHAR uni203E +ENCODING 8254 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 1 1 13 +BITMAP +FC +ENDCHAR +STARTCHAR uni203F +ENCODING 8255 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 -2 +BITMAP +84 +78 +ENDCHAR +STARTCHAR uni2040 +ENCODING 8256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 12 +BITMAP +78 +84 +ENDCHAR +STARTCHAR uni2041 +ENCODING 8257 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 -2 +BITMAP +04 +08 +10 +20 +50 +88 +ENDCHAR +STARTCHAR uni2042 +ENCODING 8258 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +10 +38 +10 +00 +44 +EE +44 +ENDCHAR +STARTCHAR uni2043 +ENCODING 8259 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 4 +BITMAP +F0 +F0 +ENDCHAR +STARTCHAR uni2044 +ENCODING 8260 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +08 +10 +10 +20 +20 +40 +80 +80 +ENDCHAR +STARTCHAR uni2045 +ENCODING 8261 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 4 -1 +BITMAP +E0 +80 +80 +80 +80 +E0 +80 +80 +80 +80 +80 +E0 +ENDCHAR +STARTCHAR uni2046 +ENCODING 8262 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 1 -1 +BITMAP +E0 +20 +20 +20 +20 +E0 +20 +20 +20 +20 +20 +E0 +ENDCHAR +STARTCHAR uni2047 +ENCODING 8263 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +EE +11 +11 +22 +CC +88 +88 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni2048 +ENCODING 8264 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +E4 +14 +14 +24 +C4 +84 +84 +84 +00 +00 +84 +ENDCHAR +STARTCHAR uni2049 +ENCODING 8265 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +B8 +84 +84 +88 +B0 +A0 +A0 +A0 +00 +00 +A0 +ENDCHAR +STARTCHAR uni204A +ENCODING 8266 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +04 +04 +04 +04 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni204B +ENCODING 8267 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 -1 +BITMAP +FC +5E +5E +5E +5C +50 +50 +50 +50 +50 +50 +ENDCHAR +STARTCHAR uni204C +ENCODING 8268 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 5 +BITMAP +78 +E8 +E8 +E8 +78 +ENDCHAR +STARTCHAR uni204D +ENCODING 8269 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +F0 +B8 +B8 +B8 +F0 +ENDCHAR +STARTCHAR uni204E +ENCODING 8270 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +10 +92 +54 +38 +54 +92 +10 +ENDCHAR +STARTCHAR uni204F +ENCODING 8271 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 9 3 -1 +BITMAP +C0 +C0 +00 +00 +00 +C0 +80 +80 +40 +ENDCHAR +STARTCHAR uni2050 +ENCODING 8272 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +78 +84 +84 +00 +00 +00 +84 +84 +78 +ENDCHAR +STARTCHAR uni2051 +ENCODING 8273 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -2 +BITMAP +10 +92 +54 +38 +54 +92 +10 +00 +10 +92 +54 +38 +54 +92 +10 +ENDCHAR +STARTCHAR uni2052 +ENCODING 8274 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C4 +C4 +08 +10 +10 +20 +20 +40 +8C +8C +ENDCHAR +STARTCHAR uni2053 +ENCODING 8275 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 2 0 3 +BITMAP +71 +8E +ENDCHAR +STARTCHAR uni2054 +ENCODING 8276 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 -2 +BITMAP +78 +84 +ENDCHAR +STARTCHAR uni2055 +ENCODING 8277 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 3 +BITMAP +92 +54 +38 +FE +38 +54 +92 +ENDCHAR +STARTCHAR uni2056 +ENCODING 8278 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +0C +0C +00 +C0 +C0 +00 +0C +0C +ENDCHAR +STARTCHAR uni2057 +ENCODING 8279 +BBX 16 4 0 6 +BITMAP +3333 +6666 +4444 +8888 +ENDCHAR +STARTCHAR uni2058 +ENCODING 8280 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +30 +30 +00 +CC +CC +00 +30 +30 +ENDCHAR +STARTCHAR uni2059 +ENCODING 8281 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +CC +CC +00 +30 +30 +00 +CC +CC +ENDCHAR +STARTCHAR uni205A +ENCODING 8282 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 10 3 0 +BITMAP +C0 +C0 +00 +00 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni205B +ENCODING 8283 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +30 +30 +00 +00 +00 +CC +CC +00 +00 +00 +30 +30 +ENDCHAR +STARTCHAR uni205C +ENCODING 8284 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 3 +BITMAP +A8 +20 +F8 +20 +A8 +ENDCHAR +STARTCHAR uni205D +ENCODING 8285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 10 3 0 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni205E +ENCODING 8286 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 3 0 +BITMAP +80 +00 +00 +80 +00 +00 +80 +00 +00 +80 +ENDCHAR +STARTCHAR uni205F +ENCODING 8287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni2060 +ENCODING 8288 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0001 +A208 +2209 +AA08 +3689 +A270 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni2061 +ENCODING 8289 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8C00 +1001 +9088 +1089 +9104 +1105 +9104 +7D05 +9104 +1105 +9088 +6089 +8000 +5555 +ENDCHAR +STARTCHAR uni2062 +ENCODING 8290 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0001 +8000 +0421 +8240 +0181 +8240 +0421 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni2063 +ENCODING 8291 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0001 +8000 +0001 +8000 +0001 +8000 +1801 +8800 +0801 +9000 +5555 +ENDCHAR +STARTCHAR uni2064 +ENCODING 8292 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0101 +8100 +0101 +8FE0 +0101 +8100 +0101 +8100 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni2066 +ENCODING 8294 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +A39C +2249 +A388 +2289 +BA5C +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni2067 +ENCODING 8295 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +B91C +2509 +B908 +2909 +A5DC +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni2068 +ENCODING 8296 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +B9DC +2209 +B988 +2049 +A39C +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni2069 +ENCODING 8297 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +F39C +4A49 +F248 +4249 +C39C +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni206A +ENCODING 8298 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +07C1 +8100 +0101 +8100 +07C1 +8000 +1E79 +A080 +1C71 +8208 +3CF1 +8000 +5555 +ENDCHAR +STARTCHAR uni206B +ENCODING 8299 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0381 +8440 +07C1 +8440 +0441 +8000 +1E79 +A080 +1C71 +8208 +3CF1 +8000 +5555 +ENDCHAR +STARTCHAR uni206C +ENCODING 8300 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +03E1 +8080 +0081 +8080 +03E1 +8000 +39F6 +C508 +7DE7 +C501 +450F +8000 +5555 +ENDCHAR +STARTCHAR uni206D +ENCODING 8301 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +01C1 +8220 +03E1 +8220 +0221 +8000 +39F6 +C508 +7DE7 +C501 +450F +8000 +5555 +ENDCHAR +STARTCHAR uni206E +ENCODING 8302 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +2271 +B288 +2AF9 +A688 +2289 +8000 +3C79 +A280 +2271 +A208 +3CF1 +8000 +5555 +ENDCHAR +STARTCHAR uni206F +ENCODING 8303 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +2271 +B288 +2A89 +A688 +2271 +8000 +3C79 +A280 +2271 +A208 +3CF1 +8000 +5555 +ENDCHAR +STARTCHAR uni2070 +ENCODING 8304 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +30 +48 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni2071 +ENCODING 8305 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +20 +00 +60 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni2074 +ENCODING 8308 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +18 +28 +48 +88 +FC +08 +08 +ENDCHAR +STARTCHAR uni2075 +ENCODING 8309 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +F8 +80 +80 +F0 +08 +08 +F0 +ENDCHAR +STARTCHAR uni2076 +ENCODING 8310 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +30 +40 +80 +F0 +88 +88 +70 +ENDCHAR +STARTCHAR uni2077 +ENCODING 8311 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +F8 +08 +10 +10 +20 +20 +20 +ENDCHAR +STARTCHAR uni2078 +ENCODING 8312 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +70 +88 +88 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni2079 +ENCODING 8313 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 4 +BITMAP +70 +88 +88 +78 +08 +10 +60 +ENDCHAR +STARTCHAR uni207A +ENCODING 8314 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 5 +BITMAP +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni207B +ENCODING 8315 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 1 1 7 +BITMAP +F8 +ENDCHAR +STARTCHAR uni207C +ENCODING 8316 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 5 +BITMAP +F8 +00 +00 +F8 +ENDCHAR +STARTCHAR uni207D +ENCODING 8317 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 3 3 +BITMAP +20 +40 +80 +80 +80 +80 +80 +40 +20 +ENDCHAR +STARTCHAR uni207E +ENCODING 8318 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 3 +BITMAP +80 +40 +20 +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni207F +ENCODING 8319 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +B0 +C8 +88 +88 +88 +ENDCHAR +STARTCHAR uni2080 +ENCODING 8320 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +30 +48 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni2081 +ENCODING 8321 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +20 +60 +A0 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni2082 +ENCODING 8322 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +70 +88 +08 +30 +40 +80 +F8 +ENDCHAR +STARTCHAR uni2083 +ENCODING 8323 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +70 +88 +08 +70 +08 +88 +70 +ENDCHAR +STARTCHAR uni2084 +ENCODING 8324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +18 +28 +48 +88 +FC +08 +08 +ENDCHAR +STARTCHAR uni2085 +ENCODING 8325 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +F8 +80 +80 +F0 +08 +08 +F0 +ENDCHAR +STARTCHAR uni2086 +ENCODING 8326 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +30 +40 +80 +F0 +88 +88 +70 +ENDCHAR +STARTCHAR uni2087 +ENCODING 8327 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +F8 +08 +10 +10 +20 +20 +20 +ENDCHAR +STARTCHAR uni2088 +ENCODING 8328 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +70 +88 +88 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni2089 +ENCODING 8329 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +70 +88 +88 +78 +08 +10 +60 +ENDCHAR +STARTCHAR uni208A +ENCODING 8330 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -1 +BITMAP +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni208B +ENCODING 8331 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 1 1 1 +BITMAP +F8 +ENDCHAR +STARTCHAR uni208C +ENCODING 8332 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 -1 +BITMAP +F8 +00 +00 +F8 +ENDCHAR +STARTCHAR uni208D +ENCODING 8333 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 3 -2 +BITMAP +20 +40 +80 +80 +80 +80 +80 +40 +20 +ENDCHAR +STARTCHAR uni208E +ENCODING 8334 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 -2 +BITMAP +80 +40 +20 +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni2090 +ENCODING 8336 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -1 +BITMAP +70 +08 +78 +88 +78 +ENDCHAR +STARTCHAR uni2091 +ENCODING 8337 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -1 +BITMAP +70 +88 +F8 +80 +78 +ENDCHAR +STARTCHAR uni2092 +ENCODING 8338 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -1 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni2093 +ENCODING 8339 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -1 +BITMAP +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni2094 +ENCODING 8340 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -1 +BITMAP +F0 +08 +F8 +88 +70 +ENDCHAR +STARTCHAR uni2095 +ENCODING 8341 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +80 +80 +B0 +C8 +88 +88 +88 +ENDCHAR +STARTCHAR uni2096 +ENCODING 8342 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 -1 +BITMAP +80 +80 +90 +A0 +C0 +A0 +90 +ENDCHAR +STARTCHAR uni2097 +ENCODING 8343 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +60 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni2098 +ENCODING 8344 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 -1 +BITMAP +EC +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni2099 +ENCODING 8345 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -1 +BITMAP +B0 +C8 +88 +88 +88 +ENDCHAR +STARTCHAR uni209A +ENCODING 8346 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 -2 +BITMAP +B0 +C8 +C8 +B0 +80 +80 +ENDCHAR +STARTCHAR uni209B +ENCODING 8347 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -1 +BITMAP +78 +80 +70 +08 +F0 +ENDCHAR +STARTCHAR uni209C +ENCODING 8348 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +20 +20 +F8 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni20A0 +ENCODING 8352 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +80 +80 +BC +A0 +A0 +78 +20 +20 +3C +ENDCHAR +STARTCHAR uni20A1 +ENCODING 8353 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +14 +7C +94 +A8 +A8 +D0 +D0 +E4 +B8 +20 +ENDCHAR +STARTCHAR uni20A2 +ENCODING 8354 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +84 +80 +AC +B0 +A0 +A0 +64 +38 +ENDCHAR +STARTCHAR uni20A3 +ENCODING 8355 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3F +20 +20 +20 +3E +20 +20 +FC +20 +20 +ENDCHAR +STARTCHAR uni20A4 +ENCODING 8356 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +1C +20 +20 +FC +20 +FC +20 +20 +7C +C2 +ENDCHAR +STARTCHAR uni20A5 +ENCODING 8357 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +02 +02 +EC +9A +9A +92 +92 +B2 +D2 +D2 +ENDCHAR +STARTCHAR uni20A6 +ENCODING 8358 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +44 +44 +64 +FE +54 +FE +4C +4C +44 +44 +ENDCHAR +STARTCHAR uni20A7 +ENCODING 8359 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +D0 +B0 +BE +B8 +D8 +94 +92 +92 +92 +9C +ENDCHAR +STARTCHAR uni20A8 +ENCODING 8360 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +E0 +90 +96 +98 +E8 +A8 +A4 +92 +92 +9C +ENDCHAR +STARTCHAR uni20A9 +ENCODING 8361 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +44 +44 +44 +FE +54 +FE +6C +6C +44 +44 +ENDCHAR +STARTCHAR uni20AA +ENCODING 8362 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +F2 +8A +AA +AA +AA +AA +A2 +BC +ENDCHAR +STARTCHAR uni20AB +ENCODING 8363 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +04 +1E +04 +74 +8C +84 +84 +84 +84 +8C +74 +00 +FC +ENDCHAR +STARTCHAR uni20AC +ENCODING 8364 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +18 +24 +40 +F8 +40 +F8 +40 +40 +24 +18 +ENDCHAR +STARTCHAR uni20AD +ENCODING 8365 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +42 +44 +48 +50 +60 +FE +50 +48 +44 +42 +ENDCHAR +STARTCHAR uni20AE +ENCODING 8366 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +1C +70 +1C +70 +10 +10 +10 +ENDCHAR +STARTCHAR uni20AF +ENCODING 8367 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +E0 +90 +90 +90 +90 +9C +9A +9A +9C +E8 +08 +08 +ENDCHAR +STARTCHAR uni20B0 +ENCODING 8368 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +70 +88 +88 +88 +50 +30 +A8 +C8 +C4 +84 +08 +10 +ENDCHAR +STARTCHAR uni20B1 +ENCODING 8369 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +7C +42 +FF +42 +FF +42 +7C +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni20B2 +ENCODING 8370 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +20 +20 +78 +A4 +A4 +A0 +A0 +AC +A4 +A4 +AC +74 +20 +20 +ENDCHAR +STARTCHAR uni20B3 +ENCODING 8371 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +18 +24 +24 +FF +42 +FF +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni20B4 +ENCODING 8372 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3C +42 +02 +02 +FF +30 +FF +40 +42 +3C +ENDCHAR +STARTCHAR uni20B5 +ENCODING 8373 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +20 +20 +78 +A4 +A4 +A0 +A0 +A0 +A0 +A4 +A4 +78 +20 +20 +ENDCHAR +STARTCHAR uni20B6 +ENCODING 8374 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +50 +50 +50 +FC +50 +50 +50 +50 +52 +4C +ENDCHAR +STARTCHAR uni20B7 +ENCODING 8375 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +3C +42 +42 +20 +18 +04 +52 +AA +AA +FC +A8 +A8 +ENDCHAR +STARTCHAR uni20B8 +ENCODING 8376 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +00 +FE +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni20B9 +ENCODING 8377 +BBX 8 12 4 -1 +BITMAP +FF +18 +04 +FF +04 +08 +F0 +40 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni20BA +ENCODING 8378 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +20 +20 +28 +30 +60 +A8 +30 +62 +A2 +24 +38 +ENDCHAR +STARTCHAR uni20BB +ENCODING 8379 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +40 +A0 +FC +22 +42 +54 +E8 +40 +44 +38 +ENDCHAR +STARTCHAR uni20BC +ENCODING 8380 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +20 +20 +70 +A8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni20BD +ENCODING 8381 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +44 +44 +44 +F8 +40 +F8 +40 +40 +40 +ENDCHAR +STARTCHAR uni20BE +ENCODING 8382 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +28 +7C +AA +AA +AA +80 +80 +80 +80 +40 +20 +FE +ENDCHAR +STARTCHAR uni20BF +ENCODING 8383 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -2 +BITMAP +28 +28 +FC +42 +42 +42 +7C +42 +42 +42 +42 +FC +28 +28 +ENDCHAR +STARTCHAR uni20C0 +ENCODING 8384 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +84 +84 +78 +00 +FC +ENDCHAR +STARTCHAR uni20D0 +ENCODING 8400 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 10 +BITMAP +20 +40 +FC +ENDCHAR +STARTCHAR uni20D1 +ENCODING 8401 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 10 +BITMAP +10 +08 +FC +ENDCHAR +STARTCHAR uni20D2 +ENCODING 8402 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 10 -5 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni20D3 +ENCODING 8403 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 7 -5 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni20D4 +ENCODING 8404 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -7 9 +BITMAP +98 +A4 +C0 +F0 +ENDCHAR +STARTCHAR uni20D5 +ENCODING 8405 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -7 9 +BITMAP +64 +94 +0C +3C +ENDCHAR +STARTCHAR uni20D6 +ENCODING 8406 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 9 +BITMAP +20 +40 +FC +40 +20 +ENDCHAR +STARTCHAR uni20D7 +ENCODING 8407 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 9 +BITMAP +10 +08 +FC +08 +10 +ENDCHAR +STARTCHAR uni20D8 +ENCODING 8408 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 3 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni20D9 +ENCODING 8409 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 3 +BITMAP +E0 +D0 +90 +60 +ENDCHAR +STARTCHAR uni20DA +ENCODING 8410 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 3 +BITMAP +70 +B0 +90 +60 +ENDCHAR +STARTCHAR uni20DB +ENCODING 8411 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -6 10 +BITMAP +A8 +A8 +ENDCHAR +STARTCHAR uni20DC +ENCODING 8412 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -7 10 +BITMAP +AA +AA +ENDCHAR +STARTCHAR uni20DD +ENCODING 8413 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 15 -12 -2 +BITMAP +0380 +0C60 +3018 +2008 +4004 +4004 +8002 +8002 +8002 +4004 +4004 +2008 +3018 +0C60 +0380 +ENDCHAR +STARTCHAR uni20DE +ENCODING 8414 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 14 -11 -1 +BITMAP +FFFC +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni20DF +ENCODING 8415 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 15 -12 -2 +BITMAP +0100 +0280 +0440 +0820 +1010 +2008 +4004 +8002 +4004 +2008 +1010 +0820 +0440 +0280 +0100 +ENDCHAR +STARTCHAR uni20E0 +ENCODING 8416 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 15 -12 -2 +BITMAP +0380 +0C60 +3018 +3008 +5804 +4C04 +8602 +8302 +8182 +40C4 +4064 +2038 +3018 +0C60 +0380 +ENDCHAR +STARTCHAR uni20E1 +ENCODING 8417 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 -8 9 +BITMAP +24 +42 +FF +42 +24 +ENDCHAR +STARTCHAR uni20E2 +ENCODING 8418 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 12 -11 -1 +BITMAP +7FF8 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +7FF8 +FFFC +ENDCHAR +STARTCHAR uni20E3 +ENCODING 8419 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 14 -11 -1 +BITMAP +7FF8 +C00C +BFF4 +A014 +A014 +A014 +A014 +A014 +A014 +A014 +A014 +BFF4 +C00C +7FF8 +ENDCHAR +STARTCHAR uni20E4 +ENCODING 8420 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 15 -10 -1 +BITMAP +0200 +0700 +0500 +0D80 +0880 +1040 +1040 +2020 +2020 +6030 +4010 +4010 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni20E5 +ENCODING 8421 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 12 -6 0 +BITMAP +80 +80 +80 +40 +40 +40 +40 +40 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni20E6 +ENCODING 8422 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 12 -6 0 +BITMAP +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni20E7 +ENCODING 8423 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 14 -13 -1 +BITMAP +FFF8 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uni20E8 +ENCODING 8424 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 -7 -2 +BITMAP +A8 +ENDCHAR +STARTCHAR uni20E9 +ENCODING 8425 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 2 -8 11 +BITMAP +FF +81 +ENDCHAR +STARTCHAR uni20EA +ENCODING 8426 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 5 -13 3 +BITMAP +2000 +4000 +FFE0 +4000 +2000 +ENDCHAR +STARTCHAR uni20EB +ENCODING 8427 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 12 -6 0 +BITMAP +28 +28 +28 +50 +50 +50 +50 +50 +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni20EC +ENCODING 8428 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 -2 +BITMAP +FC +08 +10 +ENDCHAR +STARTCHAR uni20ED +ENCODING 8429 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 -2 +BITMAP +FC +40 +20 +ENDCHAR +STARTCHAR uni20EE +ENCODING 8430 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 -2 +BITMAP +20 +40 +FC +40 +20 +ENDCHAR +STARTCHAR uni20EF +ENCODING 8431 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 -2 +BITMAP +10 +08 +FC +08 +10 +ENDCHAR +STARTCHAR uni20F0 +ENCODING 8432 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 9 +BITMAP +48 +30 +FC +30 +48 +ENDCHAR +STARTCHAR uni2100 +ENCODING 8448 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +60 +A2 +A4 +68 +10 +26 +48 +88 +06 +ENDCHAR +STARTCHAR uni2101 +ENCODING 8449 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +60 +A2 +A4 +68 +16 +28 +44 +82 +0C +ENDCHAR +STARTCHAR uni2102 +ENCODING 8450 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3C +62 +A0 +A0 +A0 +A0 +A0 +A0 +62 +3C +ENDCHAR +STARTCHAR uni2103 +ENCODING 8451 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +40 +A0 +A0 +40 +3C +42 +42 +40 +40 +40 +40 +42 +42 +3C +ENDCHAR +STARTCHAR uni2104 +ENCODING 8452 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +20 +78 +A0 +A0 +A0 +A0 +78 +20 +3C +ENDCHAR +STARTCHAR uni2105 +ENCODING 8453 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +60 +82 +84 +68 +10 +2C +52 +92 +0C +ENDCHAR +STARTCHAR uni2106 +ENCODING 8454 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +60 +82 +84 +68 +10 +20 +52 +92 +0C +ENDCHAR +STARTCHAR uni2107 +ENCODING 8455 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +7C +84 +80 +80 +70 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni2108 +ENCODING 8456 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +04 +24 +3C +24 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni2109 +ENCODING 8457 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +40 +A0 +A0 +40 +7E +40 +40 +40 +7C +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni210A +ENCODING 8458 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +74 +8C +84 +84 +7C +04 +7E +84 +78 +ENDCHAR +STARTCHAR uni210B +ENCODING 8459 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +12 +75 +96 +14 +1C +34 +54 +94 +94 +63 +ENDCHAR +STARTCHAR uni210C +ENCODING 8460 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -2 +BITMAP +18 +B6 +60 +68 +74 +36 +66 +66 +66 +66 +E6 +06 +34 +08 +ENDCHAR +STARTCHAR uni210D +ENCODING 8461 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +E2 +A2 +A2 +A2 +BE +A2 +A2 +A2 +A2 +E2 +ENDCHAR +STARTCHAR uni210E +ENCODING 8462 +BBX 8 11 5 0 +BITMAP +08 +10 +10 +1E +31 +21 +21 +42 +42 +42 +84 +ENDCHAR +STARTCHAR uni210F +ENCODING 8463 +BBX 8 11 5 0 +BITMAP +0A +1C +70 +9E +31 +21 +21 +42 +42 +42 +84 +ENDCHAR +STARTCHAR uni2110 +ENCODING 8464 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 -1 +BITMAP +30 +50 +90 +10 +10 +18 +30 +50 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni2111 +ENCODING 8465 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +39 +7F +C6 +80 +66 +08 +6C +A6 +66 +3C +ENDCHAR +STARTCHAR uni2112 +ENCODING 8466 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +0C +12 +12 +3C +10 +10 +10 +10 +70 +99 +66 +ENDCHAR +STARTCHAR uni2113 +ENCODING 8467 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +30 +48 +48 +48 +50 +60 +C0 +40 +40 +44 +38 +ENDCHAR +STARTCHAR uni2114 +ENCODING 8468 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +48 +48 +FE +48 +4A +4D +49 +49 +49 +36 +ENDCHAR +STARTCHAR uni2115 +ENCODING 8469 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +E2 +A2 +B2 +B2 +AA +AA +A6 +A6 +A2 +E2 +ENDCHAR +STARTCHAR uni2116 +ENCODING 8470 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +92 +95 +95 +D2 +D0 +B7 +B0 +90 +90 +90 +ENDCHAR +STARTCHAR uni2117 +ENCODING 8471 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3C +42 +B9 +A5 +A5 +B9 +A1 +A1 +42 +3C +ENDCHAR +STARTCHAR uni2118 +ENCODING 8472 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +40 +98 +A4 +44 +44 +54 +A8 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni2119 +ENCODING 8473 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +A4 +A4 +A4 +A4 +B8 +A0 +A0 +A0 +E0 +ENDCHAR +STARTCHAR uni211A +ENCODING 8474 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +38 +64 +A2 +A2 +A2 +A2 +A2 +A2 +6C +3C +02 +ENDCHAR +STARTCHAR uni211B +ENCODING 8475 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +80 +5C +22 +62 +A2 +A2 +BC +A8 +A4 +A4 +42 +ENDCHAR +STARTCHAR uni211C +ENCODING 8476 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +44 +6E +B2 +33 +36 +3C +36 +36 +A2 +C3 +ENDCHAR +STARTCHAR uni211D +ENCODING 8477 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +A2 +A2 +A2 +A2 +BC +B0 +A8 +A4 +E2 +ENDCHAR +STARTCHAR uni211E +ENCODING 8478 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +A0 +94 +88 +94 +A0 +ENDCHAR +STARTCHAR uni211F +ENCODING 8479 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +70 +10 +F8 +94 +94 +94 +F8 +D0 +B0 +90 +98 +94 +10 +ENDCHAR +STARTCHAR uni2120 +ENCODING 8480 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 5 +BITMAP +71 +9B +55 +31 +D1 +ENDCHAR +STARTCHAR uni2121 +ENCODING 8481 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 5 +BITMAP +FE +52 +5A +52 +5F +ENDCHAR +STARTCHAR uni2122 +ENCODING 8482 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 5 +BITMAP +F1 +5B +55 +51 +51 +ENDCHAR +STARTCHAR uni2123 +ENCODING 8483 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +30 +0C +85 +89 +4A +52 +54 +24 +28 +78 +50 +80 +ENDCHAR +STARTCHAR uni2124 +ENCODING 8484 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +14 +14 +24 +28 +48 +50 +90 +A0 +FC +ENDCHAR +STARTCHAR uni2125 +ENCODING 8485 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +78 +10 +20 +7C +08 +10 +30 +08 +04 +84 +78 +ENDCHAR +STARTCHAR uni2126 +ENCODING 8486 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +82 +82 +82 +44 +28 +28 +EE +ENDCHAR +STARTCHAR uni2127 +ENCODING 8487 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +EE +28 +28 +44 +82 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni2128 +ENCODING 8488 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +3C +46 +46 +06 +08 +1E +02 +06 +66 +A6 +66 +3C +ENDCHAR +STARTCHAR uni2129 +ENCODING 8489 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +C0 +20 +20 +20 +20 +20 +20 +30 +ENDCHAR +STARTCHAR uni212A +ENCODING 8490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni212B +ENCODING 8491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +30 +00 +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni212C +ENCODING 8492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +5C +A2 +A2 +A2 +BC +A2 +A2 +A2 +A2 +5C +ENDCHAR +STARTCHAR uni212D +ENCODING 8493 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +2C +48 +D0 +D0 +CC +CC +C8 +D0 +44 +38 +ENDCHAR +STARTCHAR uni212E +ENCODING 8494 +BBX 10 9 3 0 +BITMAP +3F00 +4080 +C0C0 +C0C0 +FFC0 +C000 +C000 +4080 +3F00 +ENDCHAR +STARTCHAR uni212F +ENCODING 8495 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +30 +48 +90 +E0 +80 +88 +70 +ENDCHAR +STARTCHAR uni2130 +ENCODING 8496 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +1C +24 +40 +40 +38 +40 +80 +88 +84 +78 +ENDCHAR +STARTCHAR uni2131 +ENCODING 8497 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +08 +08 +10 +7C +20 +40 +40 +ENDCHAR +STARTCHAR uni2132 +ENCODING 8498 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +7C +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni2133 +ENCODING 8499 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +63 +36 +2A +2A +2A +2A +2A +6A +AA +49 +ENDCHAR +STARTCHAR uni2134 +ENCODING 8500 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +30 +48 +A6 +9C +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni2135 +ENCODING 8501 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +88 +8C +44 +28 +50 +C8 +E4 +C4 +ENDCHAR +STARTCHAR uni2136 +ENCODING 8502 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +20 +7C +04 +04 +04 +04 +04 +7E +FC +ENDCHAR +STARTCHAR uni2137 +ENCODING 8503 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +78 +3C +04 +04 +04 +1C +64 +64 +ENDCHAR +STARTCHAR uni2138 +ENCODING 8504 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +80 +7C +3E +04 +04 +04 +04 +06 +04 +ENDCHAR +STARTCHAR uni2139 +ENCODING 8505 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +30 +30 +00 +70 +30 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni213A +ENCODING 8506 +BBX 11 7 2 0 +BITMAP +0020 +7FA0 +80C0 +8140 +8140 +80C0 +7F80 +ENDCHAR +STARTCHAR uni213B +ENCODING 8507 +BBX 14 10 1 0 +BITMAP +F800 +8000 +8000 +8000 +E444 +8A28 +9110 +9F10 +9128 +9144 +ENDCHAR +STARTCHAR uni213C +ENCODING 8508 +BBX 11 8 3 0 +BITMAP +FFC0 +5280 +5280 +5280 +5280 +5240 +5120 +70E0 +ENDCHAR +STARTCHAR uni213D +ENCODING 8509 +BBX 11 10 3 -2 +BITMAP +6020 +5040 +4880 +2500 +1200 +1200 +2400 +4800 +9000 +E000 +ENDCHAR +STARTCHAR uni213E +ENCODING 8510 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +AA +A6 +A2 +A0 +A0 +A0 +A0 +A0 +E0 +ENDCHAR +STARTCHAR uni213F +ENCODING 8511 +BBX 11 10 2 0 +BITMAP +FFE0 +5140 +5140 +5140 +5140 +5140 +5140 +5140 +5140 +71C0 +ENDCHAR +STARTCHAR uni2140 +ENCODING 8512 +BBX 10 11 3 -1 +BITMAP +FFC0 +9140 +48C0 +2440 +1200 +1200 +2400 +4840 +90C0 +A140 +FFC0 +ENDCHAR +STARTCHAR uni2141 +ENCODING 8513 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +B8 +C4 +84 +84 +E4 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni2142 +ENCODING 8514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni2143 +ENCODING 8515 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni2144 +ENCODING 8516 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +10 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni2145 +ENCODING 8517 +BBX 10 10 3 0 +BITMAP +3F00 +2980 +2940 +4940 +5140 +5240 +9280 +A280 +A300 +FE00 +ENDCHAR +STARTCHAR uni2146 +ENCODING 8518 +BBX 10 10 3 0 +BITMAP +01C0 +0140 +0140 +0240 +3E80 +5280 +9480 +A500 +A500 +7F00 +ENDCHAR +STARTCHAR uni2147 +ENCODING 8519 +BBX 9 8 3 0 +BITMAP +1F00 +2880 +4880 +9F80 +A000 +A000 +A100 +7E00 +ENDCHAR +STARTCHAR uni2148 +ENCODING 8520 +BBX 7 11 4 0 +BITMAP +02 +04 +00 +0E +14 +14 +14 +28 +28 +28 +FE +ENDCHAR +STARTCHAR uni2149 +ENCODING 8521 +BBX 9 13 4 -2 +BITMAP +0080 +0100 +0000 +0380 +0500 +0500 +0500 +0A00 +0A00 +0A00 +0A00 +8C00 +7000 +ENDCHAR +STARTCHAR uni214A +ENCODING 8522 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +20 +F8 +A4 +A4 +A4 +A4 +B8 +20 +20 +20 +3C +ENDCHAR +STARTCHAR uni214B +ENCODING 8523 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +9C +62 +42 +A2 +94 +18 +28 +44 +44 +38 +ENDCHAR +STARTCHAR uni214C +ENCODING 8524 +BBX 13 10 1 0 +BITMAP +6980 +9A40 +4A40 +0A40 +3FF0 +4A48 +3F88 +0A10 +0A00 +0400 +ENDCHAR +STARTCHAR uni214D +ENCODING 8525 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +42 +A2 +E4 +A8 +08 +13 +14 +22 +41 +46 +ENDCHAR +STARTCHAR uni214E +ENCODING 8526 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +08 +08 +08 +78 +08 +08 +F8 +ENDCHAR +STARTCHAR uni214F +ENCODING 8527 +BBX 13 6 1 0 +BITMAP +2220 +5550 +5550 +5550 +2220 +DDD8 +ENDCHAR +STARTCHAR uni2150 +ENCODING 8528 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +44 +C4 +48 +50 +50 +3C +24 +44 +88 +88 +08 +ENDCHAR +STARTCHAR uni2151 +ENCODING 8529 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +44 +C4 +48 +50 +50 +3C +34 +5C +84 +98 +ENDCHAR +STARTCHAR uni2152 +ENCODING 8530 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +42 +C2 +44 +48 +50 +22 +55 +B5 +95 +12 +ENDCHAR +STARTCHAR uni2153 +ENCODING 8531 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +44 +C4 +48 +50 +50 +38 +24 +48 +84 +98 +ENDCHAR +STARTCHAR uni2154 +ENCODING 8532 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C4 +24 +48 +90 +F0 +38 +24 +48 +84 +98 +ENDCHAR +STARTCHAR uni2155 +ENCODING 8533 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +44 +C4 +48 +50 +50 +3C +30 +58 +84 +98 +ENDCHAR +STARTCHAR uni2156 +ENCODING 8534 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C4 +24 +48 +90 +F0 +3C +30 +58 +84 +98 +ENDCHAR +STARTCHAR uni2157 +ENCODING 8535 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C4 +24 +48 +30 +D0 +3C +30 +58 +84 +98 +ENDCHAR +STARTCHAR uni2158 +ENCODING 8536 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +22 +62 +F4 +28 +28 +1E +18 +2C +42 +4C +ENDCHAR +STARTCHAR uni2159 +ENCODING 8537 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +44 +C4 +48 +50 +50 +2C +30 +5C +94 +9C +ENDCHAR +STARTCHAR uni215A +ENCODING 8538 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E4 +84 +C8 +30 +D0 +2C +30 +5C +94 +9C +ENDCHAR +STARTCHAR uni215B +ENCODING 8539 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +44 +C4 +48 +50 +50 +28 +34 +48 +94 +9C +ENDCHAR +STARTCHAR uni215C +ENCODING 8540 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C4 +24 +48 +30 +D0 +28 +34 +48 +94 +9C +ENDCHAR +STARTCHAR uni215D +ENCODING 8541 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E4 +84 +C8 +30 +D0 +28 +34 +48 +94 +9C +ENDCHAR +STARTCHAR uni215E +ENCODING 8542 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E4 +24 +48 +90 +90 +28 +34 +48 +94 +9C +ENDCHAR +STARTCHAR uni215F +ENCODING 8543 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +44 +C4 +48 +50 +50 +20 +20 +40 +80 +80 +ENDCHAR +STARTCHAR uni2160 +ENCODING 8544 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 0 +BITMAP +E0 +40 +40 +40 +40 +40 +40 +40 +40 +E0 +ENDCHAR +STARTCHAR uni2161 +ENCODING 8545 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +48 +48 +48 +48 +48 +48 +48 +48 +FC +ENDCHAR +STARTCHAR uni2162 +ENCODING 8546 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +54 +54 +54 +54 +54 +54 +54 +54 +FE +ENDCHAR +STARTCHAR uni2163 +ENCODING 8547 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +52 +52 +52 +52 +52 +4C +4C +4C +FE +ENDCHAR +STARTCHAR uni2164 +ENCODING 8548 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +44 +44 +44 +28 +28 +28 +10 +10 +7C +ENDCHAR +STARTCHAR uni2165 +ENCODING 8549 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +4A +4A +4A +4A +4A +32 +32 +32 +7F +ENDCHAR +STARTCHAR uni2166 +ENCODING 8550 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +55 +55 +55 +55 +25 +25 +25 +25 +7F +ENDCHAR +STARTCHAR uni2167 +ENCODING 8551 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +B5 +B5 +B5 +B5 +55 +55 +55 +55 +FF +ENDCHAR +STARTCHAR uni2168 +ENCODING 8552 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +54 +54 +54 +48 +48 +54 +54 +54 +FE +ENDCHAR +STARTCHAR uni2169 +ENCODING 8553 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +44 +44 +28 +10 +10 +28 +44 +44 +FE +ENDCHAR +STARTCHAR uni216A +ENCODING 8554 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +54 +54 +54 +24 +24 +54 +54 +54 +FE +ENDCHAR +STARTCHAR uni216B +ENCODING 8555 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +AA +AA +AA +4A +4A +AA +AA +AA +FE +ENDCHAR +STARTCHAR uni216C +ENCODING 8556 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E0 +40 +40 +40 +40 +40 +40 +40 +44 +FC +ENDCHAR +STARTCHAR uni216D +ENCODING 8557 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +34 +4C +80 +80 +80 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni216E +ENCODING 8558 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +48 +44 +44 +44 +44 +44 +44 +48 +F0 +ENDCHAR +STARTCHAR uni216F +ENCODING 8559 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +44 +6C +6C +6C +54 +54 +54 +54 +FE +ENDCHAR +STARTCHAR uni2170 +ENCODING 8560 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 0 +BITMAP +40 +40 +00 +40 +C0 +40 +40 +40 +40 +E0 +ENDCHAR +STARTCHAR uni2171 +ENCODING 8561 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +48 +48 +00 +48 +D8 +48 +48 +48 +48 +FC +ENDCHAR +STARTCHAR uni2172 +ENCODING 8562 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +54 +54 +00 +54 +FC +54 +54 +54 +54 +FE +ENDCHAR +STARTCHAR uni2173 +ENCODING 8563 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +40 +40 +00 +76 +D2 +52 +52 +4C +4C +FE +ENDCHAR +STARTCHAR uni2174 +ENCODING 8564 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +EE +44 +44 +44 +28 +10 +7C +ENDCHAR +STARTCHAR uni2175 +ENCODING 8565 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +04 +04 +00 +B4 +9C +94 +94 +64 +64 +FE +ENDCHAR +STARTCHAR uni2176 +ENCODING 8566 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +0A +0A +00 +AA +BE +AA +AA +4A +4A +FE +ENDCHAR +STARTCHAR uni2177 +ENCODING 8567 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +15 +15 +00 +B5 +BF +B5 +55 +55 +55 +FF +ENDCHAR +STARTCHAR uni2178 +ENCODING 8568 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +40 +40 +00 +54 +D4 +48 +48 +54 +54 +FE +ENDCHAR +STARTCHAR uni2179 +ENCODING 8569 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +EE +44 +28 +10 +28 +44 +EE +ENDCHAR +STARTCHAR uni217A +ENCODING 8570 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +04 +04 +00 +54 +5C +24 +24 +54 +54 +FE +ENDCHAR +STARTCHAR uni217B +ENCODING 8571 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +0A +0A +00 +AA +BE +4A +4A +AA +AA +FE +ENDCHAR +STARTCHAR uni217C +ENCODING 8572 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 0 +BITMAP +40 +C0 +40 +40 +40 +40 +40 +40 +40 +E0 +ENDCHAR +STARTCHAR uni217D +ENCODING 8573 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +34 +4C +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni217E +ENCODING 8574 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +04 +0C +04 +34 +4C +84 +84 +84 +4C +36 +ENDCHAR +STARTCHAR uni217F +ENCODING 8575 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +E8 +54 +54 +54 +54 +54 +54 +FE +ENDCHAR +STARTCHAR uni2180 +ENCODING 8576 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +92 +92 +92 +92 +92 +92 +92 +92 +7C +ENDCHAR +STARTCHAR uni2181 +ENCODING 8577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +48 +64 +54 +54 +54 +54 +64 +48 +F0 +ENDCHAR +STARTCHAR uni2182 +ENCODING 8578 +BBX 9 10 3 0 +BITMAP +3E00 +4900 +9C80 +AA80 +AA80 +AA80 +AA80 +9C80 +4900 +3E00 +ENDCHAR +STARTCHAR uni2183 +ENCODING 8579 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +04 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni2184 +ENCODING 8580 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni2185 +ENCODING 8581 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +3A +46 +80 +80 +80 +80 +80 +80 +46 +3A +02 +02 +ENDCHAR +STARTCHAR uni2186 +ENCODING 8582 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +10 +10 +10 +10 +92 +54 +38 +10 +ENDCHAR +STARTCHAR uni2187 +ENCODING 8583 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +F8 +46 +71 +49 +65 +55 +65 +49 +71 +46 +F8 +ENDCHAR +STARTCHAR uni2188 +ENCODING 8584 +BBX 13 11 1 0 +BITMAP +1FC0 +6230 +8F88 +9248 +A728 +AAA8 +A728 +9248 +8F88 +6230 +1FC0 +ENDCHAR +STARTCHAR uni2189 +ENCODING 8585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +44 +A4 +A8 +B0 +50 +38 +24 +48 +84 +98 +ENDCHAR +STARTCHAR uni218A +ENCODING 8586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +10 +60 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni218B +ENCODING 8587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +70 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni2190 +ENCODING 8592 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +20 +40 +FE +40 +20 +ENDCHAR +STARTCHAR uni2191 +ENCODING 8593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -2 +BITMAP +20 +70 +A8 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2192 +ENCODING 8594 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 2 +BITMAP +08 +04 +FE +04 +08 +ENDCHAR +STARTCHAR uni2193 +ENCODING 8595 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +A8 +70 +20 +ENDCHAR +STARTCHAR uni2194 +ENCODING 8596 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +24 +42 +FF +42 +24 +ENDCHAR +STARTCHAR uni2195 +ENCODING 8597 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +20 +70 +A8 +20 +20 +20 +20 +20 +20 +A8 +70 +20 +ENDCHAR +STARTCHAR uni2196 +ENCODING 8598 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +F0 +C0 +A0 +90 +08 +04 +ENDCHAR +STARTCHAR uni2197 +ENCODING 8599 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +3C +0C +14 +24 +40 +80 +ENDCHAR +STARTCHAR uni2198 +ENCODING 8600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +80 +40 +24 +14 +0C +3C +ENDCHAR +STARTCHAR uni2199 +ENCODING 8601 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +04 +08 +90 +A0 +C0 +F0 +ENDCHAR +STARTCHAR uni219A +ENCODING 8602 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +08 +08 +28 +48 +FE +48 +28 +08 +08 +ENDCHAR +STARTCHAR uni219B +ENCODING 8603 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +20 +20 +28 +24 +FE +24 +28 +20 +20 +ENDCHAR +STARTCHAR uni219C +ENCODING 8604 +BBX 14 5 2 3 +BITMAP +E000 +C070 +A088 +1104 +0E00 +ENDCHAR +STARTCHAR uni219D +ENCODING 8605 +BBX 14 5 0 3 +BITMAP +001C +380C +4414 +8220 +01C0 +ENDCHAR +STARTCHAR uni219E +ENCODING 8606 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +24 +48 +FF +48 +24 +ENDCHAR +STARTCHAR uni219F +ENCODING 8607 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -2 +BITMAP +20 +70 +A8 +20 +70 +A8 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni21A0 +ENCODING 8608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +24 +12 +FF +12 +24 +ENDCHAR +STARTCHAR uni21A1 +ENCODING 8609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 15 2 -1 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +A8 +70 +20 +A8 +70 +20 +ENDCHAR +STARTCHAR uni21A2 +ENCODING 8610 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +22 +44 +F8 +44 +22 +ENDCHAR +STARTCHAR uni21A3 +ENCODING 8611 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 2 +BITMAP +88 +44 +3E +44 +88 +ENDCHAR +STARTCHAR uni21A4 +ENCODING 8612 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +24 +44 +FC +44 +24 +ENDCHAR +STARTCHAR uni21A5 +ENCODING 8613 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +20 +70 +A8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni21A6 +ENCODING 8614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +90 +88 +FC +88 +90 +ENDCHAR +STARTCHAR uni21A7 +ENCODING 8615 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +A8 +70 +20 +ENDCHAR +STARTCHAR uni21A8 +ENCODING 8616 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +20 +70 +A8 +20 +20 +20 +20 +20 +A8 +70 +20 +F8 +ENDCHAR +STARTCHAR uni21A9 +ENCODING 8617 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 2 +BITMAP +04 +22 +42 +FC +40 +20 +ENDCHAR +STARTCHAR uni21AA +ENCODING 8618 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 2 +BITMAP +40 +88 +84 +7E +04 +08 +ENDCHAR +STARTCHAR uni21AB +ENCODING 8619 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 2 +BITMAP +04 +2A +4A +FC +48 +28 +ENDCHAR +STARTCHAR uni21AC +ENCODING 8620 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 2 +BITMAP +40 +A8 +A4 +7E +24 +28 +ENDCHAR +STARTCHAR uni21AD +ENCODING 8621 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +24 +5A +E7 +42 +24 +ENDCHAR +STARTCHAR uni21AE +ENCODING 8622 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +08 +08 +2C +4A +FF +4A +2C +08 +08 +ENDCHAR +STARTCHAR uni21AF +ENCODING 8623 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +80 +80 +80 +90 +B0 +D0 +90 +10 +10 +54 +38 +10 +ENDCHAR +STARTCHAR uni21B0 +ENCODING 8624 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 -2 +BITMAP +20 +40 +F0 +48 +28 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni21B1 +ENCODING 8625 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 -2 +BITMAP +20 +10 +78 +90 +A0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni21B2 +ENCODING 8626 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +28 +48 +F0 +40 +20 +ENDCHAR +STARTCHAR uni21B3 +ENCODING 8627 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +A0 +90 +78 +10 +20 +ENDCHAR +STARTCHAR uni21B4 +ENCODING 8628 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 0 +BITMAP +FC +04 +15 +0E +04 +ENDCHAR +STARTCHAR uni21B5 +ENCODING 8629 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +28 +48 +F8 +40 +20 +ENDCHAR +STARTCHAR uni21B6 +ENCODING 8630 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 3 +BITMAP +1E +21 +A9 +71 +20 +ENDCHAR +STARTCHAR uni21B7 +ENCODING 8631 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 3 +BITMAP +78 +84 +95 +8E +04 +ENDCHAR +STARTCHAR uni21B8 +ENCODING 8632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +FC +00 +F0 +C0 +A0 +90 +08 +04 +ENDCHAR +STARTCHAR uni21B9 +ENCODING 8633 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +A0 +C0 +FC +C0 +A0 +00 +14 +0C +FC +0C +14 +ENDCHAR +STARTCHAR uni21BA +ENCODING 8634 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +5C +98 +94 +84 +84 +78 +ENDCHAR +STARTCHAR uni21BB +ENCODING 8635 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +E8 +64 +A4 +84 +84 +78 +ENDCHAR +STARTCHAR uni21BC +ENCODING 8636 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 4 +BITMAP +20 +40 +FE +ENDCHAR +STARTCHAR uni21BD +ENCODING 8637 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 2 +BITMAP +FE +40 +20 +ENDCHAR +STARTCHAR uni21BE +ENCODING 8638 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 14 4 -2 +BITMAP +80 +C0 +A0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni21BF +ENCODING 8639 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 14 2 -2 +BITMAP +20 +60 +A0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni21C0 +ENCODING 8640 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 0 4 +BITMAP +08 +04 +FE +ENDCHAR +STARTCHAR uni21C1 +ENCODING 8641 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 0 2 +BITMAP +FE +04 +08 +ENDCHAR +STARTCHAR uni21C2 +ENCODING 8642 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 14 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni21C3 +ENCODING 8643 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 14 2 0 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +A0 +60 +20 +ENDCHAR +STARTCHAR uni21C4 +ENCODING 8644 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +10 +08 +FC +08 +10 +00 +20 +40 +FC +40 +20 +ENDCHAR +STARTCHAR uni21C5 +ENCODING 8645 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +24 +74 +AC +24 +24 +24 +24 +24 +24 +35 +2E +24 +ENDCHAR +STARTCHAR uni21C6 +ENCODING 8646 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +20 +40 +FC +40 +20 +00 +10 +08 +FC +08 +10 +ENDCHAR +STARTCHAR uni21C7 +ENCODING 8647 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +20 +40 +FC +40 +20 +00 +20 +40 +FC +40 +20 +ENDCHAR +STARTCHAR uni21C8 +ENCODING 8648 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +24 +7E +A5 +24 +24 +24 +24 +24 +24 +24 +24 +24 +ENDCHAR +STARTCHAR uni21C9 +ENCODING 8649 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +10 +08 +FC +08 +10 +00 +10 +08 +FC +08 +10 +ENDCHAR +STARTCHAR uni21CA +ENCODING 8650 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +24 +24 +24 +24 +24 +24 +24 +24 +24 +A5 +7E +24 +ENDCHAR +STARTCHAR uni21CB +ENCODING 8651 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +20 +40 +FC +00 +FC +08 +10 +ENDCHAR +STARTCHAR uni21CC +ENCODING 8652 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +10 +08 +FC +00 +FC +40 +20 +ENDCHAR +STARTCHAR uni21CD +ENCODING 8653 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +08 +08 +28 +7E +88 +7E +28 +08 +08 +ENDCHAR +STARTCHAR uni21CE +ENCODING 8654 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +08 +08 +2C +7E +89 +7E +2C +08 +08 +ENDCHAR +STARTCHAR uni21CF +ENCODING 8655 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +20 +20 +28 +FC +22 +FC +28 +20 +20 +ENDCHAR +STARTCHAR uni21D0 +ENCODING 8656 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +20 +7C +80 +7C +20 +ENDCHAR +STARTCHAR uni21D1 +ENCODING 8657 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +20 +50 +D8 +50 +50 +50 +50 +50 +50 +50 +50 +50 +ENDCHAR +STARTCHAR uni21D2 +ENCODING 8658 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +10 +F8 +04 +F8 +10 +ENDCHAR +STARTCHAR uni21D3 +ENCODING 8659 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +50 +50 +50 +50 +50 +50 +50 +50 +50 +D8 +50 +20 +ENDCHAR +STARTCHAR uni21D4 +ENCODING 8660 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +24 +7E +81 +7E +24 +ENDCHAR +STARTCHAR uni21D5 +ENCODING 8661 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +20 +50 +D8 +50 +50 +50 +50 +50 +50 +D8 +50 +20 +ENDCHAR +STARTCHAR uni21D6 +ENCODING 8662 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +F0 +A0 +D0 +A8 +14 +08 +ENDCHAR +STARTCHAR uni21D7 +ENCODING 8663 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +3C +14 +2C +54 +A0 +40 +ENDCHAR +STARTCHAR uni21D8 +ENCODING 8664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +40 +A0 +54 +2C +14 +3C +ENDCHAR +STARTCHAR uni21D9 +ENCODING 8665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +08 +14 +A8 +D0 +A0 +F0 +ENDCHAR +STARTCHAR uni21DA +ENCODING 8666 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +10 +3E +40 +FE +40 +3E +10 +ENDCHAR +STARTCHAR uni21DB +ENCODING 8667 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +10 +F8 +04 +FE +04 +F8 +10 +ENDCHAR +STARTCHAR uni21DC +ENCODING 8668 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +20 +42 +F5 +48 +20 +ENDCHAR +STARTCHAR uni21DD +ENCODING 8669 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +04 +42 +AF +12 +04 +ENDCHAR +STARTCHAR uni21DE +ENCODING 8670 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -2 +BITMAP +20 +70 +A8 +20 +20 +20 +F8 +20 +F8 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni21DF +ENCODING 8671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +20 +20 +20 +20 +20 +F8 +20 +F8 +20 +20 +20 +A8 +70 +20 +ENDCHAR +STARTCHAR uni21E0 +ENCODING 8672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +20 +40 +EE +40 +20 +ENDCHAR +STARTCHAR uni21E1 +ENCODING 8673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -2 +BITMAP +20 +70 +A8 +20 +20 +00 +20 +20 +20 +20 +00 +20 +20 +20 +ENDCHAR +STARTCHAR uni21E2 +ENCODING 8674 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +04 +02 +EF +02 +04 +ENDCHAR +STARTCHAR uni21E3 +ENCODING 8675 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +20 +20 +20 +00 +20 +20 +20 +20 +00 +20 +20 +A8 +70 +20 +ENDCHAR +STARTCHAR uni21E4 +ENCODING 8676 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +A0 +C0 +FE +C0 +A0 +ENDCHAR +STARTCHAR uni21E5 +ENCODING 8677 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 2 +BITMAP +0A +06 +FE +06 +0A +ENDCHAR +STARTCHAR uni21E6 +ENCODING 8678 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 1 +BITMAP +10 +30 +5F +81 +5F +30 +10 +ENDCHAR +STARTCHAR uni21E7 +ENCODING 8679 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +10 +28 +44 +EE +28 +28 +28 +28 +28 +28 +28 +38 +ENDCHAR +STARTCHAR uni21E8 +ENCODING 8680 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 1 +BITMAP +08 +0C +FA +81 +FA +0C +08 +ENDCHAR +STARTCHAR uni21E9 +ENCODING 8681 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +38 +28 +28 +28 +28 +28 +28 +28 +EE +44 +28 +10 +ENDCHAR +STARTCHAR uni21EA +ENCODING 8682 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +10 +28 +44 +EE +28 +28 +28 +38 +00 +38 +28 +38 +ENDCHAR +STARTCHAR uni21EB +ENCODING 8683 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +10 +28 +44 +C6 +44 +44 +44 +44 +44 +C6 +82 +FE +ENDCHAR +STARTCHAR uni21EC +ENCODING 8684 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +10 +28 +7C +C6 +44 +44 +44 +44 +44 +C6 +82 +FE +ENDCHAR +STARTCHAR uni21ED +ENCODING 8685 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +10 +38 +54 +D6 +54 +54 +54 +54 +54 +D6 +92 +FE +ENDCHAR +STARTCHAR uni21EE +ENCODING 8686 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +10 +28 +54 +EE +44 +C6 +44 +44 +44 +44 +44 +44 +7C +ENDCHAR +STARTCHAR uni21EF +ENCODING 8687 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +10 +28 +54 +EE +44 +C6 +44 +44 +44 +44 +C6 +82 +FE +ENDCHAR +STARTCHAR uni21F0 +ENCODING 8688 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +10 +D8 +F4 +82 +F4 +D8 +10 +ENDCHAR +STARTCHAR uni21F1 +ENCODING 8689 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +FE +80 +B8 +B0 +A8 +84 +82 +80 +80 +ENDCHAR +STARTCHAR uni21F2 +ENCODING 8690 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +02 +02 +82 +42 +2A +1A +3A +02 +FE +ENDCHAR +STARTCHAR uni21F3 +ENCODING 8691 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +20 +50 +D8 +50 +50 +50 +50 +50 +50 +D8 +50 +20 +ENDCHAR +STARTCHAR uni21F4 +ENCODING 8692 +BBX 15 5 0 2 +BITMAP +0708 +0884 +FFFE +0884 +0708 +ENDCHAR +STARTCHAR uni21F5 +ENCODING 8693 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +24 +2E +35 +24 +24 +24 +24 +24 +24 +AC +74 +24 +ENDCHAR +STARTCHAR uni21F6 +ENCODING 8694 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +04 +02 +FF +02 +04 +02 +FF +02 +04 +02 +FF +02 +04 +ENDCHAR +STARTCHAR uni21F7 +ENCODING 8695 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +24 +44 +FF +44 +24 +ENDCHAR +STARTCHAR uni21F8 +ENCODING 8696 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +24 +22 +FF +22 +24 +ENDCHAR +STARTCHAR uni21F9 +ENCODING 8697 +BBX 11 5 2 2 +BITMAP +2480 +4440 +FFE0 +4440 +2480 +ENDCHAR +STARTCHAR uni21FA +ENCODING 8698 +BBX 15 5 1 2 +BITMAP +2280 +4280 +FFFE +4280 +2280 +ENDCHAR +STARTCHAR uni21FB +ENCODING 8699 +BBX 15 5 0 2 +BITMAP +0288 +0284 +FFFE +0284 +0288 +ENDCHAR +STARTCHAR uni21FC +ENCODING 8700 +BBX 13 5 1 2 +BITMAP +2520 +4510 +FFF8 +4510 +2520 +ENDCHAR +STARTCHAR uni21FD +ENCODING 8701 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +20 +60 +BF +60 +20 +ENDCHAR +STARTCHAR uni21FE +ENCODING 8702 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +04 +06 +FD +06 +04 +ENDCHAR +STARTCHAR uni21FF +ENCODING 8703 +BBX 12 5 2 2 +BITMAP +2040 +6060 +BFD0 +6060 +2040 +ENDCHAR +STARTCHAR uni2200 +ENCODING 8704 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +7C +44 +44 +28 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni2201 +ENCODING 8705 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +60 +90 +90 +80 +80 +80 +80 +90 +90 +60 +ENDCHAR +STARTCHAR uni2202 +ENCODING 8706 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +04 +04 +3C +44 +84 +88 +88 +70 +ENDCHAR +STARTCHAR uni2203 +ENCODING 8707 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +FC +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni2204 +ENCODING 8708 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +08 +08 +FC +14 +14 +24 +FC +24 +44 +44 +44 +FC +80 +80 +ENDCHAR +STARTCHAR uni2205 +ENCODING 8709 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +3A +44 +8A +92 +A2 +44 +B8 +ENDCHAR +STARTCHAR uni2206 +ENCODING 8710 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +28 +44 +44 +44 +82 +FE +ENDCHAR +STARTCHAR uni2207 +ENCODING 8711 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +44 +44 +44 +28 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni2208 +ENCODING 8712 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +7C +80 +80 +FC +80 +80 +7C +ENDCHAR +STARTCHAR uni2209 +ENCODING 8713 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +08 +08 +7C +90 +90 +FC +A0 +A0 +7C +40 +40 +ENDCHAR +STARTCHAR uni220A +ENCODING 8714 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +7C +80 +FC +80 +7C +ENDCHAR +STARTCHAR uni220B +ENCODING 8715 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +F8 +04 +04 +FC +04 +04 +F8 +ENDCHAR +STARTCHAR uni220C +ENCODING 8716 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +08 +08 +F8 +14 +14 +FC +24 +24 +F8 +40 +40 +ENDCHAR +STARTCHAR uni220D +ENCODING 8717 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +F8 +04 +FC +04 +F8 +ENDCHAR +STARTCHAR uni220E +ENCODING 8718 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR uni220F +ENCODING 8719 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +FE +44 +44 +44 +44 +44 +44 +44 +44 +44 +EE +ENDCHAR +STARTCHAR uni2210 +ENCODING 8720 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +EE +44 +44 +44 +44 +44 +44 +44 +44 +44 +FE +ENDCHAR +STARTCHAR uni2211 +ENCODING 8721 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +FC +84 +40 +20 +10 +08 +10 +20 +40 +84 +FC +ENDCHAR +STARTCHAR uni2212 +ENCODING 8722 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 1 1 4 +BITMAP +FC +ENDCHAR +STARTCHAR uni2213 +ENCODING 8723 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 1 +BITMAP +FE +00 +10 +10 +10 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni2214 +ENCODING 8724 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 1 +BITMAP +10 +38 +10 +00 +10 +10 +10 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni2215 +ENCODING 8725 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +08 +08 +10 +10 +20 +20 +40 +40 +80 +ENDCHAR +STARTCHAR uni2216 +ENCODING 8726 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +40 +40 +20 +20 +10 +10 +08 +08 +04 +ENDCHAR +STARTCHAR uni2217 +ENCODING 8727 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 1 +BITMAP +20 +A8 +70 +20 +70 +A8 +20 +ENDCHAR +STARTCHAR uni2218 +ENCODING 8728 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 2 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni2219 +ENCODING 8729 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 2 +BITMAP +60 +F0 +F0 +60 +ENDCHAR +STARTCHAR uni221A +ENCODING 8730 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +0E +08 +08 +08 +08 +08 +E8 +28 +28 +18 +18 +08 +08 +ENDCHAR +STARTCHAR uni221B +ENCODING 8731 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +CE +28 +C8 +28 +C8 +08 +E8 +28 +28 +18 +18 +08 +08 +ENDCHAR +STARTCHAR uni221C +ENCODING 8732 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +AE +A8 +E8 +28 +28 +08 +E8 +28 +28 +18 +18 +08 +08 +ENDCHAR +STARTCHAR uni221D +ENCODING 8733 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 3 +BITMAP +6C +90 +90 +6C +ENDCHAR +STARTCHAR uni221E +ENCODING 8734 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 3 +BITMAP +6C +92 +92 +6C +ENDCHAR +STARTCHAR uni221F +ENCODING 8735 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni2220 +ENCODING 8736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +04 +08 +10 +20 +40 +FC +ENDCHAR +STARTCHAR uni2221 +ENCODING 8737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +04 +28 +10 +28 +48 +FC +08 +ENDCHAR +STARTCHAR uni2222 +ENCODING 8738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +14 +18 +28 +C8 +28 +18 +14 +ENDCHAR +STARTCHAR uni2223 +ENCODING 8739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 10 3 0 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni2224 +ENCODING 8740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +30 +34 +38 +30 +30 +70 +B0 +30 +30 +ENDCHAR +STARTCHAR uni2225 +ENCODING 8741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni2226 +ENCODING 8742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +48 +48 +4C +48 +58 +68 +48 +C8 +48 +48 +ENDCHAR +STARTCHAR uni2227 +ENCODING 8743 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni2228 +ENCODING 8744 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +82 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni2229 +ENCODING 8745 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni222A +ENCODING 8746 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni222B +ENCODING 8747 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni222C +ENCODING 8748 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +14 +2A +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +A8 +D0 +ENDCHAR +STARTCHAR uni222D +ENCODING 8749 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -1 +BITMAP +15 +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +AA +D4 +ENDCHAR +STARTCHAR uni222E +ENCODING 8750 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +70 +A8 +A8 +70 +20 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni222F +ENCODING 8751 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +14 +2A +28 +28 +28 +7C +AA +AA +7C +28 +28 +28 +A8 +D0 +ENDCHAR +STARTCHAR uni2230 +ENCODING 8752 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -1 +BITMAP +15 +2A +2A +2A +7E +AB +AB +AB +7E +2A +2A +2A +AA +D4 +ENDCHAR +STARTCHAR uni2231 +ENCODING 8753 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +74 +AC +BC +20 +20 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2232 +ENCODING 8754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +74 +AC +BC +A8 +70 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2233 +ENCODING 8755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +0C +14 +10 +10 +10 +B8 +D4 +F4 +54 +38 +10 +10 +50 +60 +ENDCHAR +STARTCHAR uni2234 +ENCODING 8756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +30 +30 +00 +00 +00 +CC +CC +ENDCHAR +STARTCHAR uni2235 +ENCODING 8757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +CC +CC +00 +00 +00 +30 +30 +ENDCHAR +STARTCHAR uni2236 +ENCODING 8758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 7 3 1 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2237 +ENCODING 8759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +CC +CC +00 +00 +00 +CC +CC +ENDCHAR +STARTCHAR uni2238 +ENCODING 8760 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 4 +BITMAP +30 +30 +00 +FC +ENDCHAR +STARTCHAR uni2239 +ENCODING 8761 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +0C +0C +00 +F0 +00 +0C +0C +ENDCHAR +STARTCHAR uni223A +ENCODING 8762 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +CC +CC +00 +FC +00 +CC +CC +ENDCHAR +STARTCHAR uni223B +ENCODING 8763 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 1 +BITMAP +30 +30 +00 +64 +98 +00 +30 +30 +ENDCHAR +STARTCHAR uni223C +ENCODING 8764 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 4 +BITMAP +64 +98 +ENDCHAR +STARTCHAR uni223D +ENCODING 8765 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 4 +BITMAP +98 +64 +ENDCHAR +STARTCHAR uni223E +ENCODING 8766 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 3 +BITMAP +64 +92 +4C +ENDCHAR +STARTCHAR uni223F +ENCODING 8767 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +60 +90 +92 +12 +0C +ENDCHAR +STARTCHAR uni2240 +ENCODING 8768 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 8 3 1 +BITMAP +80 +40 +40 +40 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uni2241 +ENCODING 8769 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +08 +08 +10 +74 +A8 +20 +40 +40 +ENDCHAR +STARTCHAR uni2242 +ENCODING 8770 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 1 +BITMAP +FC +00 +00 +64 +98 +ENDCHAR +STARTCHAR uni2243 +ENCODING 8771 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +64 +98 +00 +00 +FC +ENDCHAR +STARTCHAR uni2244 +ENCODING 8772 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +08 +08 +10 +10 +74 +A8 +20 +20 +FC +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni2245 +ENCODING 8773 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +64 +98 +00 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni2246 +ENCODING 8774 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +64 +98 +04 +08 +FC +10 +20 +FC +40 +80 +ENDCHAR +STARTCHAR uni2247 +ENCODING 8775 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +08 +08 +74 +98 +10 +20 +FC +20 +40 +FC +40 +80 +80 +ENDCHAR +STARTCHAR uni2248 +ENCODING 8776 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +64 +98 +00 +64 +98 +ENDCHAR +STARTCHAR uni2249 +ENCODING 8777 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +08 +08 +74 +98 +20 +74 +A8 +40 +40 +ENDCHAR +STARTCHAR uni224A +ENCODING 8778 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 2 +BITMAP +64 +98 +00 +64 +98 +00 +FC +ENDCHAR +STARTCHAR uni224B +ENCODING 8779 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 1 +BITMAP +64 +98 +00 +64 +98 +00 +64 +98 +ENDCHAR +STARTCHAR uni224C +ENCODING 8780 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +98 +64 +00 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni224D +ENCODING 8781 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +84 +78 +00 +00 +78 +84 +ENDCHAR +STARTCHAR uni224E +ENCODING 8782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +30 +CC +00 +00 +CC +30 +ENDCHAR +STARTCHAR uni224F +ENCODING 8783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +30 +CC +00 +00 +FC +ENDCHAR +STARTCHAR uni2250 +ENCODING 8784 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +30 +30 +00 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni2251 +ENCODING 8785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +30 +30 +00 +FC +00 +00 +FC +00 +30 +30 +ENDCHAR +STARTCHAR uni2252 +ENCODING 8786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +C0 +C0 +00 +FC +00 +00 +FC +00 +0C +0C +ENDCHAR +STARTCHAR uni2253 +ENCODING 8787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +0C +0C +00 +FC +00 +00 +FC +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2254 +ENCODING 8788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 3 +BITMAP +BC +00 +00 +BC +ENDCHAR +STARTCHAR uni2255 +ENCODING 8789 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 3 +BITMAP +F4 +00 +00 +F4 +ENDCHAR +STARTCHAR uni2256 +ENCODING 8790 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 3 +BITMAP +FC +48 +48 +FC +ENDCHAR +STARTCHAR uni2257 +ENCODING 8791 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +30 +48 +48 +30 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni2258 +ENCODING 8792 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +78 +84 +00 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni2259 +ENCODING 8793 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +30 +48 +84 +00 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni225A +ENCODING 8794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +84 +48 +30 +00 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni225B +ENCODING 8795 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 2 +BITMAP +10 +7C +38 +28 +00 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni225C +ENCODING 8796 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 2 +BITMAP +10 +28 +44 +7C +00 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni225D +ENCODING 8797 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 1 +BITMAP +24 +28 +EC +A8 +E8 +00 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni225E +ENCODING 8798 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +D0 +A8 +A8 +A8 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni225F +ENCODING 8799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 1 +BITMAP +60 +90 +10 +20 +20 +00 +20 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni2260 +ENCODING 8800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +04 +08 +FC +10 +20 +FC +40 +80 +ENDCHAR +STARTCHAR uni2261 +ENCODING 8801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +FC +00 +FC +00 +FC +ENDCHAR +STARTCHAR uni2262 +ENCODING 8802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +08 +FC +10 +FC +20 +FC +40 +80 +ENDCHAR +STARTCHAR uni2263 +ENCODING 8803 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +FC +00 +FC +00 +FC +00 +FC +ENDCHAR +STARTCHAR uni2264 +ENCODING 8804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +0C +30 +C0 +30 +0C +00 +FC +ENDCHAR +STARTCHAR uni2265 +ENCODING 8805 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +C0 +30 +0C +30 +C0 +00 +FC +ENDCHAR +STARTCHAR uni2266 +ENCODING 8806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +0C +30 +C0 +30 +0C +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni2267 +ENCODING 8807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +C0 +30 +0C +30 +C0 +00 +FC +00 +00 +FC +ENDCHAR +STARTCHAR uni2268 +ENCODING 8808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +0C +30 +C0 +30 +0C +08 +FC +10 +20 +FC +40 +80 +ENDCHAR +STARTCHAR uni2269 +ENCODING 8809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +C0 +30 +0C +30 +C4 +08 +FC +10 +20 +FC +40 +80 +ENDCHAR +STARTCHAR uni226A +ENCODING 8810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +09 +12 +24 +48 +90 +48 +24 +12 +09 +ENDCHAR +STARTCHAR uni226B +ENCODING 8811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +90 +48 +24 +12 +09 +12 +24 +48 +90 +ENDCHAR +STARTCHAR uni226C +ENCODING 8812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +90 +60 +60 +90 +90 +90 +90 +60 +60 +90 +ENDCHAR +STARTCHAR uni226D +ENCODING 8813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -1 +BITMAP +02 +02 +04 +85 +7E +08 +10 +7E +A1 +20 +40 +40 +ENDCHAR +STARTCHAR uni226E +ENCODING 8814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -1 +BITMAP +10 +10 +18 +30 +20 +60 +A0 +60 +60 +30 +48 +40 +ENDCHAR +STARTCHAR uni226F +ENCODING 8815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +10 +90 +50 +20 +30 +28 +30 +20 +40 +C0 +40 +40 +ENDCHAR +STARTCHAR uni2270 +ENCODING 8816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +04 +04 +1C +28 +D0 +30 +3C +20 +FC +40 +40 +ENDCHAR +STARTCHAR uni2271 +ENCODING 8817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +10 +10 +E0 +30 +2C +50 +E0 +40 +FC +80 +80 +ENDCHAR +STARTCHAR uni2272 +ENCODING 8818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +0C +30 +C0 +30 +0C +00 +64 +98 +ENDCHAR +STARTCHAR uni2273 +ENCODING 8819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +C0 +30 +0C +30 +C0 +00 +64 +98 +ENDCHAR +STARTCHAR uni2274 +ENCODING 8820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +08 +08 +1C +30 +D0 +30 +3C +20 +74 +C8 +40 +40 +ENDCHAR +STARTCHAR uni2275 +ENCODING 8821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +10 +F0 +30 +2C +30 +E0 +20 +64 +D8 +40 +40 +ENDCHAR +STARTCHAR uni2276 +ENCODING 8822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +0C +30 +C0 +30 +0C +C0 +30 +0C +30 +C0 +ENDCHAR +STARTCHAR uni2277 +ENCODING 8823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C0 +30 +0C +30 +C0 +0C +30 +C0 +30 +0C +ENDCHAR +STARTCHAR uni2278 +ENCODING 8824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -2 +BITMAP +02 +02 +0E +14 +68 +18 +1E +70 +28 +2E +50 +60 +80 +80 +ENDCHAR +STARTCHAR uni2279 +ENCODING 8825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +08 +08 +D0 +30 +2C +30 +E0 +2C +70 +C0 +70 +4C +80 +80 +ENDCHAR +STARTCHAR uni227A +ENCODING 8826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +04 +08 +30 +C0 +30 +08 +04 +04 +ENDCHAR +STARTCHAR uni227B +ENCODING 8827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +80 +40 +30 +0C +30 +40 +80 +80 +ENDCHAR +STARTCHAR uni227C +ENCODING 8828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +04 +04 +08 +30 +C0 +30 +C8 +34 +08 +04 +ENDCHAR +STARTCHAR uni227D +ENCODING 8829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +80 +80 +40 +30 +0C +30 +4C +B0 +40 +80 +ENDCHAR +STARTCHAR uni227E +ENCODING 8830 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +02 +02 +04 +18 +60 +18 +04 +66 +9A +ENDCHAR +STARTCHAR uni227F +ENCODING 8831 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +80 +80 +40 +30 +0C +30 +40 +B2 +CC +ENDCHAR +STARTCHAR uni2280 +ENCODING 8832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +0C +14 +18 +10 +E0 +30 +28 +44 +44 +ENDCHAR +STARTCHAR uni2281 +ENCODING 8833 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +08 +88 +90 +50 +30 +1C +30 +60 +A0 +C0 +40 +ENDCHAR +STARTCHAR uni2282 +ENCODING 8834 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +7C +80 +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni2283 +ENCODING 8835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +F8 +04 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni2284 +ENCODING 8836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +08 +7C +90 +A0 +A0 +C0 +7C +80 +80 +ENDCHAR +STARTCHAR uni2285 +ENCODING 8837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +F8 +14 +14 +24 +24 +F8 +40 +40 +ENDCHAR +STARTCHAR uni2286 +ENCODING 8838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +7C +80 +80 +80 +80 +7C +00 +FC +ENDCHAR +STARTCHAR uni2287 +ENCODING 8839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +04 +04 +04 +04 +F8 +00 +FC +ENDCHAR +STARTCHAR uni2288 +ENCODING 8840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +08 +08 +7C +90 +90 +A0 +A0 +7C +40 +FC +80 +ENDCHAR +STARTCHAR uni2289 +ENCODING 8841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +04 +04 +F8 +14 +14 +24 +24 +F8 +40 +FC +80 +ENDCHAR +STARTCHAR uni228A +ENCODING 8842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +7C +80 +80 +80 +80 +7C +08 +FC +20 +ENDCHAR +STARTCHAR uni228B +ENCODING 8843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +F8 +04 +04 +04 +04 +F8 +10 +FC +40 +ENDCHAR +STARTCHAR uni228C +ENCODING 8844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +94 +A4 +FC +A4 +94 +84 +78 +ENDCHAR +STARTCHAR uni228D +ENCODING 8845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +B4 +B4 +84 +84 +78 +ENDCHAR +STARTCHAR uni228E +ENCODING 8846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +A4 +A4 +F4 +A4 +A4 +84 +78 +ENDCHAR +STARTCHAR uni228F +ENCODING 8847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +FC +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni2290 +ENCODING 8848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +FC +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni2291 +ENCODING 8849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +80 +80 +80 +80 +FC +00 +FC +ENDCHAR +STARTCHAR uni2292 +ENCODING 8850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +04 +04 +04 +04 +FC +00 +FC +ENDCHAR +STARTCHAR uni2293 +ENCODING 8851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni2294 +ENCODING 8852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +84 +84 +84 +84 +84 +FC +ENDCHAR +STARTCHAR uni2295 +ENCODING 8853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +38 +54 +92 +FE +92 +54 +38 +ENDCHAR +STARTCHAR uni2296 +ENCODING 8854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +38 +44 +82 +FE +82 +44 +38 +ENDCHAR +STARTCHAR uni2297 +ENCODING 8855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +38 +44 +AA +92 +AA +44 +38 +ENDCHAR +STARTCHAR uni2298 +ENCODING 8856 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +38 +44 +8A +92 +A2 +44 +38 +ENDCHAR +STARTCHAR uni2299 +ENCODING 8857 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +38 +44 +82 +92 +82 +44 +38 +ENDCHAR +STARTCHAR uni229A +ENCODING 8858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +38 +44 +92 +AA +92 +44 +38 +ENDCHAR +STARTCHAR uni229B +ENCODING 8859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +38 +44 +92 +BA +92 +44 +38 +ENDCHAR +STARTCHAR uni229C +ENCODING 8860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +38 +44 +BA +82 +BA +44 +38 +ENDCHAR +STARTCHAR uni229D +ENCODING 8861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +38 +44 +82 +BA +82 +44 +38 +ENDCHAR +STARTCHAR uni229E +ENCODING 8862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +92 +92 +FE +92 +92 +FE +ENDCHAR +STARTCHAR uni229F +ENCODING 8863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +82 +82 +FE +82 +82 +FE +ENDCHAR +STARTCHAR uni22A0 +ENCODING 8864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +C6 +AA +92 +AA +C6 +FE +ENDCHAR +STARTCHAR uni22A1 +ENCODING 8865 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +82 +82 +92 +82 +82 +FE +ENDCHAR +STARTCHAR uni22A2 +ENCODING 8866 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +80 +80 +80 +FC +80 +80 +80 +ENDCHAR +STARTCHAR uni22A3 +ENCODING 8867 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +04 +04 +04 +FC +04 +04 +04 +ENDCHAR +STARTCHAR uni22A4 +ENCODING 8868 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni22A5 +ENCODING 8869 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni22A6 +ENCODING 8870 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +80 +80 +80 +80 +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni22A7 +ENCODING 8871 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +80 +80 +80 +F0 +80 +F0 +80 +80 +80 +ENDCHAR +STARTCHAR uni22A8 +ENCODING 8872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +80 +80 +FC +80 +FC +80 +80 +80 +ENDCHAR +STARTCHAR uni22A9 +ENCODING 8873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +A0 +A0 +A0 +A0 +BC +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni22AA +ENCODING 8874 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +A8 +A8 +A8 +A8 +AE +A8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni22AB +ENCODING 8875 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +A0 +A0 +A0 +BC +A0 +BC +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni22AC +ENCODING 8876 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +80 +90 +90 +FC +90 +90 +80 +80 +ENDCHAR +STARTCHAR uni22AD +ENCODING 8877 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +90 +90 +FC +90 +FC +90 +90 +80 +ENDCHAR +STARTCHAR uni22AE +ENCODING 8878 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +A0 +A0 +A8 +A8 +BC +A8 +A8 +A0 +A0 +ENDCHAR +STARTCHAR uni22AF +ENCODING 8879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +A0 +A8 +A8 +BC +A8 +BC +A8 +A8 +A0 +ENDCHAR +STARTCHAR uni22B0 +ENCODING 8880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +18 +04 +08 +30 +C0 +30 +08 +04 +18 +ENDCHAR +STARTCHAR uni22B1 +ENCODING 8881 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +60 +80 +40 +30 +0C +30 +40 +80 +60 +ENDCHAR +STARTCHAR uni22B2 +ENCODING 8882 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +0C +34 +C4 +34 +0C +ENDCHAR +STARTCHAR uni22B3 +ENCODING 8883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +C0 +B0 +8C +B0 +C0 +ENDCHAR +STARTCHAR uni22B4 +ENCODING 8884 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +0C +34 +C4 +34 +0C +00 +FC +ENDCHAR +STARTCHAR uni22B5 +ENCODING 8885 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +C0 +B0 +8C +B0 +C0 +00 +FC +ENDCHAR +STARTCHAR uni22B6 +ENCODING 8886 +BBX 14 5 1 2 +BITMAP +6018 +903C +9FFC +903C +6018 +ENDCHAR +STARTCHAR uni22B7 +ENCODING 8887 +BBX 14 5 1 2 +BITMAP +6018 +F024 +FFE4 +F024 +6018 +ENDCHAR +STARTCHAR uni22B8 +ENCODING 8888 +BBX 12 5 2 2 +BITMAP +00E0 +0110 +FF10 +0110 +00E0 +ENDCHAR +STARTCHAR uni22B9 +ENCODING 8889 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +10 +10 +00 +C6 +00 +10 +10 +ENDCHAR +STARTCHAR uni22BA +ENCODING 8890 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni22BB +ENCODING 8891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +88 +88 +50 +50 +20 +00 +F8 +ENDCHAR +STARTCHAR uni22BC +ENCODING 8892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 1 +BITMAP +F8 +00 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni22BD +ENCODING 8893 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 1 +BITMAP +F8 +00 +88 +88 +50 +50 +20 +ENDCHAR +STARTCHAR uni22BE +ENCODING 8894 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +80 +80 +80 +F0 +90 +90 +FC +ENDCHAR +STARTCHAR uni22BF +ENCODING 8895 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +04 +0C +14 +24 +44 +FC +ENDCHAR +STARTCHAR uni22C0 +ENCODING 8896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +28 +28 +28 +44 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni22C1 +ENCODING 8897 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +44 +44 +44 +28 +28 +28 +10 +ENDCHAR +STARTCHAR uni22C2 +ENCODING 8898 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni22C3 +ENCODING 8899 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni22C4 +ENCODING 8900 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 2 +BITMAP +20 +50 +88 +50 +20 +ENDCHAR +STARTCHAR uni22C5 +ENCODING 8901 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 4 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni22C6 +ENCODING 8902 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 2 3 +BITMAP +20 +F8 +70 +50 +ENDCHAR +STARTCHAR uni22C7 +ENCODING 8903 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +30 +84 +48 +FC +48 +84 +30 +ENDCHAR +STARTCHAR uni22C8 +ENCODING 8904 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +82 +C6 +AA +92 +AA +C6 +82 +ENDCHAR +STARTCHAR uni22C9 +ENCODING 8905 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +82 +C4 +A8 +90 +A8 +C4 +82 +ENDCHAR +STARTCHAR uni22CA +ENCODING 8906 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +82 +46 +2A +12 +2A +46 +82 +ENDCHAR +STARTCHAR uni22CB +ENCODING 8907 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 2 +BITMAP +80 +40 +20 +50 +88 +ENDCHAR +STARTCHAR uni22CC +ENCODING 8908 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 2 +BITMAP +08 +10 +20 +50 +88 +ENDCHAR +STARTCHAR uni22CD +ENCODING 8909 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 1 +BITMAP +98 +64 +00 +00 +FC +ENDCHAR +STARTCHAR uni22CE +ENCODING 8910 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +82 +44 +44 +28 +28 +28 +10 +ENDCHAR +STARTCHAR uni22CF +ENCODING 8911 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +10 +28 +28 +28 +44 +44 +82 +ENDCHAR +STARTCHAR uni22D0 +ENCODING 8912 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +7C +80 +9C +A0 +A0 +9C +80 +7C +ENDCHAR +STARTCHAR uni22D1 +ENCODING 8913 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +04 +E4 +14 +14 +E4 +04 +F8 +ENDCHAR +STARTCHAR uni22D2 +ENCODING 8914 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +82 +92 +AA +AA +AA +AA +AA +ENDCHAR +STARTCHAR uni22D3 +ENCODING 8915 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +AA +AA +AA +AA +AA +92 +82 +7C +ENDCHAR +STARTCHAR uni22D4 +ENCODING 8916 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +20 +20 +70 +A8 +A8 +A8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni22D5 +ENCODING 8917 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +48 +48 +48 +48 +FC +48 +48 +FC +48 +48 +ENDCHAR +STARTCHAR uni22D6 +ENCODING 8918 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +08 +10 +20 +40 +88 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni22D7 +ENCODING 8919 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +40 +20 +10 +88 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni22D8 +ENCODING 8920 +BBX 13 9 2 0 +BITMAP +0888 +1110 +2220 +4440 +8880 +4440 +2220 +1110 +0888 +ENDCHAR +STARTCHAR uni22D9 +ENCODING 8921 +BBX 13 9 1 0 +BITMAP +8880 +4440 +2220 +1110 +0888 +1110 +2220 +4440 +8880 +ENDCHAR +STARTCHAR uni22DA +ENCODING 8922 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +0C +30 +C0 +30 +0C +00 +FC +00 +C0 +30 +0C +30 +C0 +ENDCHAR +STARTCHAR uni22DB +ENCODING 8923 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +C0 +30 +0C +30 +C0 +00 +FC +00 +0C +30 +C0 +30 +0C +ENDCHAR +STARTCHAR uni22DC +ENCODING 8924 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +FC +00 +0C +30 +C0 +30 +0C +ENDCHAR +STARTCHAR uni22DD +ENCODING 8925 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +FC +00 +C0 +30 +0C +30 +C0 +ENDCHAR +STARTCHAR uni22DE +ENCODING 8926 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +08 +34 +C8 +30 +C0 +30 +08 +04 +04 +ENDCHAR +STARTCHAR uni22DF +ENCODING 8927 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +40 +B0 +4C +30 +0C +30 +40 +80 +80 +ENDCHAR +STARTCHAR uni22E0 +ENCODING 8928 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +04 +14 +16 +2A +CC +18 +68 +18 +14 +12 +22 +20 +20 +ENDCHAR +STARTCHAR uni22E1 +ENCODING 8929 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +04 +14 +94 +88 +56 +30 +2C +30 +60 +C0 +C0 +40 +40 +ENDCHAR +STARTCHAR uni22E2 +ENCODING 8930 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +04 +04 +08 +FC +90 +90 +A0 +A0 +FC +40 +FC +80 +ENDCHAR +STARTCHAR uni22E3 +ENCODING 8931 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +04 +04 +08 +FC +14 +14 +24 +24 +FC +40 +FC +80 +ENDCHAR +STARTCHAR uni22E4 +ENCODING 8932 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +FC +80 +80 +80 +80 +FC +10 +FC +40 +ENDCHAR +STARTCHAR uni22E5 +ENCODING 8933 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +FC +04 +04 +04 +04 +FC +10 +FC +40 +ENDCHAR +STARTCHAR uni22E6 +ENCODING 8934 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +0C +30 +C0 +30 +0C +08 +74 +B8 +40 +80 +ENDCHAR +STARTCHAR uni22E7 +ENCODING 8935 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +C0 +30 +0C +30 +C4 +08 +74 +B8 +40 +80 +ENDCHAR +STARTCHAR uni22E8 +ENCODING 8936 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +04 +04 +08 +30 +C0 +30 +08 +0C +74 +B8 +40 +80 +ENDCHAR +STARTCHAR uni22E9 +ENCODING 8937 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +80 +80 +40 +30 +0C +30 +40 +84 +88 +74 +B8 +40 +80 +ENDCHAR +STARTCHAR uni22EA +ENCODING 8938 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +04 +04 +1C +2C +D4 +34 +3C +20 +40 +40 +ENDCHAR +STARTCHAR uni22EB +ENCODING 8939 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +08 +08 +D0 +B8 +AC +D0 +E0 +40 +80 +80 +ENDCHAR +STARTCHAR uni22EC +ENCODING 8940 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +04 +04 +1C +2C +D4 +34 +3C +20 +FC +40 +ENDCHAR +STARTCHAR uni22ED +ENCODING 8941 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +08 +08 +D0 +B8 +AC +D0 +E0 +40 +FC +80 +ENDCHAR +STARTCHAR uni22EE +ENCODING 8942 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 10 3 0 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni22EF +ENCODING 8943 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 2 0 4 +BITMAP +DB +DB +ENDCHAR +STARTCHAR uni22F0 +ENCODING 8944 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +03 +03 +00 +00 +18 +18 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni22F1 +ENCODING 8945 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +C0 +C0 +00 +00 +18 +18 +00 +00 +03 +03 +ENDCHAR +STARTCHAR uni22F2 +ENCODING 8946 +BBX 11 9 1 0 +BITMAP +0FE0 +1000 +2000 +2000 +FFE0 +2000 +2000 +1000 +0FE0 +ENDCHAR +STARTCHAR uni22F3 +ENCODING 8947 +BBX 9 9 3 0 +BITMAP +3F80 +4000 +8000 +8080 +FF80 +8080 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni22F4 +ENCODING 8948 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +7C +80 +84 +FC +84 +80 +7C +ENDCHAR +STARTCHAR uni22F5 +ENCODING 8949 +BBX 9 12 3 0 +BITMAP +0C00 +0C00 +0000 +3F80 +4000 +8000 +8000 +FF80 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni22F6 +ENCODING 8950 +BBX 9 11 3 0 +BITMAP +FF80 +0000 +3F80 +4000 +8000 +8000 +FF80 +8000 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni22F7 +ENCODING 8951 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +FC +00 +7C +80 +80 +FC +80 +80 +7C +ENDCHAR +STARTCHAR uni22F8 +ENCODING 8952 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +7C +80 +80 +FC +80 +80 +7C +00 +FC +ENDCHAR +STARTCHAR uni22F9 +ENCODING 8953 +BBX 9 9 1 0 +BITMAP +3F80 +4000 +8000 +FF80 +8000 +FF80 +8000 +4000 +3F80 +ENDCHAR +STARTCHAR uni22FA +ENCODING 8954 +BBX 11 9 2 0 +BITMAP +FE00 +0100 +0080 +0080 +FFE0 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni22FB +ENCODING 8955 +BBX 9 9 2 0 +BITMAP +FE00 +0100 +0080 +8080 +FF80 +8080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni22FC +ENCODING 8956 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +F8 +04 +84 +FC +84 +04 +F8 +ENDCHAR +STARTCHAR uni22FD +ENCODING 8957 +BBX 9 11 2 0 +BITMAP +FF80 +0000 +FE00 +0100 +0080 +0080 +FF80 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni22FE +ENCODING 8958 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +FC +00 +F8 +04 +04 +FC +04 +04 +F8 +ENDCHAR +STARTCHAR uni22FF +ENCODING 8959 +BBX 10 9 3 0 +BITMAP +FFC0 +8000 +8000 +8000 +FFC0 +8000 +8000 +8000 +FFC0 +ENDCHAR +STARTCHAR uni2300 +ENCODING 8960 +BBX 11 11 2 -1 +BITMAP +0020 +1F40 +2080 +4140 +4240 +4440 +4840 +5040 +2080 +5F00 +8000 +ENDCHAR +STARTCHAR uni2301 +ENCODING 8961 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 2 +BITMAP +90 +58 +34 +12 +ENDCHAR +STARTCHAR uni2302 +ENCODING 8962 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +30 +48 +84 +84 +84 +84 +84 +FC +ENDCHAR +STARTCHAR uni2303 +ENCODING 8963 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 2 7 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni2304 +ENCODING 8964 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 2 0 +BITMAP +88 +50 +20 +ENDCHAR +STARTCHAR uni2305 +ENCODING 8965 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 5 +BITMAP +F8 +00 +20 +50 +88 +ENDCHAR +STARTCHAR uni2306 +ENCODING 8966 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 3 +BITMAP +F8 +00 +F8 +00 +20 +50 +88 +ENDCHAR +STARTCHAR uni2307 +ENCODING 8967 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 3 0 +BITMAP +80 +40 +20 +40 +80 +40 +20 +40 +80 +40 +20 +ENDCHAR +STARTCHAR uni2308 +ENCODING 8968 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 3 0 +BITMAP +F0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2309 +ENCODING 8969 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 1 0 +BITMAP +F0 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni230A +ENCODING 8970 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uni230B +ENCODING 8971 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uni230C +ENCODING 8972 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 4 1 +BITMAP +70 +80 +80 +80 +ENDCHAR +STARTCHAR uni230D +ENCODING 8973 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 1 +BITMAP +E0 +10 +10 +10 +ENDCHAR +STARTCHAR uni230E +ENCODING 8974 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 4 4 +BITMAP +80 +80 +80 +70 +ENDCHAR +STARTCHAR uni230F +ENCODING 8975 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 4 +BITMAP +10 +10 +10 +E0 +ENDCHAR +STARTCHAR uni2310 +ENCODING 8976 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 0 +BITMAP +FC +80 +80 +80 +ENDCHAR +STARTCHAR uni2311 +ENCODING 8977 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +82 +7C +44 +44 +44 +7C +82 +ENDCHAR +STARTCHAR uni2312 +ENCODING 8978 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 0 +BITMAP +38 +44 +82 +82 +ENDCHAR +STARTCHAR uni2313 +ENCODING 8979 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 0 +BITMAP +38 +44 +82 +FE +ENDCHAR +STARTCHAR uni2314 +ENCODING 8980 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +38 +44 +82 +44 +28 +10 +ENDCHAR +STARTCHAR uni2315 +ENCODING 8981 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -1 +BITMAP +1C +22 +41 +41 +41 +22 +5C +80 +ENDCHAR +STARTCHAR uni2316 +ENCODING 8982 +BBX 15 15 1 -2 +BITMAP +0100 +0100 +07C0 +0920 +1110 +2108 +2008 +FC7E +2008 +2108 +1110 +0920 +07C0 +0100 +0100 +ENDCHAR +STARTCHAR uni2317 +ENCODING 8983 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 1 +BITMAP +24 +24 +FF +24 +24 +FF +24 +24 +ENDCHAR +STARTCHAR uni2318 +ENCODING 8984 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +44 +AA +7C +28 +7C +AA +44 +ENDCHAR +STARTCHAR uni2319 +ENCODING 8985 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 4 +BITMAP +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni231A +ENCODING 8986 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -2 +BITMAP +28 +28 +28 +28 +38 +54 +92 +9B +82 +44 +38 +28 +28 +28 +ENDCHAR +STARTCHAR uni231B +ENCODING 8987 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +48 +48 +48 +30 +30 +48 +48 +78 +FC +ENDCHAR +STARTCHAR uni231C +ENCODING 8988 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 9 +BITMAP +F0 +80 +80 +80 +ENDCHAR +STARTCHAR uni231D +ENCODING 8989 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 3 9 +BITMAP +F0 +10 +10 +10 +ENDCHAR +STARTCHAR uni231E +ENCODING 8990 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 -1 +BITMAP +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uni231F +ENCODING 8991 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 3 -1 +BITMAP +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uni2320 +ENCODING 8992 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 4 -2 +BITMAP +60 +A0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2321 +ENCODING 8993 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 2 2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2322 +ENCODING 8994 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 3 +BITMAP +78 +84 +ENDCHAR +STARTCHAR uni2323 +ENCODING 8995 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 4 +BITMAP +84 +78 +ENDCHAR +STARTCHAR uni2324 +ENCODING 8996 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 2 +BITMAP +EE +10 +28 +44 +ENDCHAR +STARTCHAR uni2325 +ENCODING 8997 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 2 +BITMAP +CE +20 +10 +0E +ENDCHAR +STARTCHAR uni2326 +ENCODING 8998 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +FC +AA +91 +AA +FC +ENDCHAR +STARTCHAR uni2327 +ENCODING 8999 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +FE +AA +92 +AA +FE +ENDCHAR +STARTCHAR uni2328 +ENCODING 9000 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +FC +FC +FC +00 +78 +ENDCHAR +STARTCHAR uni2329 +ENCODING 9001 +BBX 5 15 8 -2 +BITMAP +08 +08 +10 +10 +20 +20 +40 +80 +40 +20 +20 +10 +10 +08 +08 +ENDCHAR +STARTCHAR uni232A +ENCODING 9002 +BBX 5 15 2 -2 +BITMAP +80 +80 +40 +40 +20 +20 +10 +08 +10 +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni232B +ENCODING 9003 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +3F +55 +89 +55 +3F +ENDCHAR +STARTCHAR uni232C +ENCODING 9004 +BBX 9 13 4 -1 +BITMAP +0800 +1400 +2200 +4900 +8480 +A280 +A080 +A280 +8480 +4900 +2200 +1400 +0800 +ENDCHAR +STARTCHAR uni232D +ENCODING 9005 +BBX 15 11 1 -1 +BITMAP +0102 +0204 +0388 +0448 +0830 +0820 +1820 +2440 +2380 +4080 +8100 +ENDCHAR +STARTCHAR uni232E +ENCODING 9006 +BBX 13 12 2 -2 +BITMAP +0F00 +1080 +2040 +4020 +43F8 +4420 +4820 +2840 +1080 +AF00 +C000 +E000 +ENDCHAR +STARTCHAR uni232F +ENCODING 9007 +BBX 14 7 1 1 +BITMAP +1FE0 +0000 +0000 +FFFC +0000 +0000 +1FE0 +ENDCHAR +STARTCHAR uni2330 +ENCODING 9008 +BBX 16 13 0 0 +BITMAP +0402 +0C06 +1E0F +0804 +1008 +1008 +2010 +2010 +4020 +4020 +8040 +8040 +FFC0 +ENDCHAR +STARTCHAR uni2331 +ENCODING 9009 +BBX 16 11 0 0 +BITMAP +1F00 +2480 +4440 +8420 +8424 +87FF +8424 +8420 +4440 +2480 +1F00 +ENDCHAR +STARTCHAR uni2332 +ENCODING 9010 +BBX 14 9 1 0 +BITMAP +7800 +4700 +40E0 +4018 +FFFC +4018 +40E0 +4700 +7800 +ENDCHAR +STARTCHAR uni2333 +ENCODING 9011 +BBX 14 6 1 0 +BITMAP +C000 +B800 +8700 +80E0 +8018 +FFFC +ENDCHAR +STARTCHAR uni2334 +ENCODING 9012 +BBX 14 8 1 0 +BITMAP +8004 +8004 +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni2335 +ENCODING 9013 +BBX 15 8 1 0 +BITMAP +8002 +4004 +2008 +1010 +0820 +0440 +0280 +0100 +ENDCHAR +STARTCHAR uni2336 +ENCODING 9014 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni2337 +ENCODING 9015 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +88 +88 +88 +88 +88 +88 +88 +88 +F8 +ENDCHAR +STARTCHAR uni2338 +ENCODING 9016 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +82 +82 +FE +82 +82 +FE +82 +82 +FE +ENDCHAR +STARTCHAR uni2339 +ENCODING 9017 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +92 +92 +82 +FE +82 +92 +92 +82 +FE +ENDCHAR +STARTCHAR uni233A +ENCODING 9018 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +92 +AA +C6 +82 +C6 +AA +92 +82 +FE +ENDCHAR +STARTCHAR uni233B +ENCODING 9019 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +82 +82 +92 +AA +AA +92 +82 +82 +FE +ENDCHAR +STARTCHAR uni233C +ENCODING 9020 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +82 +BA +C6 +82 +82 +C6 +BA +82 +FE +ENDCHAR +STARTCHAR uni233D +ENCODING 9021 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +10 +38 +54 +92 +92 +92 +54 +38 +10 +10 +ENDCHAR +STARTCHAR uni233E +ENCODING 9022 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +44 +92 +AA +92 +44 +38 +ENDCHAR +STARTCHAR uni233F +ENCODING 9023 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +02 +04 +04 +08 +08 +FF +10 +20 +20 +40 +ENDCHAR +STARTCHAR uni2340 +ENCODING 9024 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +40 +20 +20 +10 +10 +FF +08 +04 +04 +02 +ENDCHAR +STARTCHAR uni2341 +ENCODING 9025 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +86 +8A +8A +92 +A2 +A2 +C2 +82 +FE +ENDCHAR +STARTCHAR uni2342 +ENCODING 9026 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +C2 +A2 +A2 +92 +8A +8A +86 +82 +FE +ENDCHAR +STARTCHAR uni2343 +ENCODING 9027 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +82 +8E +B2 +C2 +B2 +8E +82 +82 +FE +ENDCHAR +STARTCHAR uni2344 +ENCODING 9028 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +82 +E2 +9A +86 +9A +E2 +82 +82 +FE +ENDCHAR +STARTCHAR uni2345 +ENCODING 9029 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +10 +10 +10 +50 +FE +50 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2346 +ENCODING 9030 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +10 +10 +10 +14 +FE +14 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2347 +ENCODING 9031 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +82 +92 +A2 +FE +A2 +92 +82 +82 +FE +ENDCHAR +STARTCHAR uni2348 +ENCODING 9032 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +82 +92 +8A +FE +8A +92 +82 +82 +FE +ENDCHAR +STARTCHAR uni2349 +ENCODING 9033 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +B8 +44 +A2 +92 +8A +44 +3A +ENDCHAR +STARTCHAR uni234A +ENCODING 9034 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +FE +00 +FE +ENDCHAR +STARTCHAR uni234B +ENCODING 9035 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +20 +20 +70 +70 +A8 +A8 +F8 +20 +20 +ENDCHAR +STARTCHAR uni234C +ENCODING 9036 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +FE +82 +82 +82 +82 +C6 +C6 +AA +AA +92 +82 +FE +ENDCHAR +STARTCHAR uni234D +ENCODING 9037 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +FE +82 +82 +92 +92 +AA +AA +C6 +C6 +FE +82 +FE +ENDCHAR +STARTCHAR uni234E +ENCODING 9038 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +38 +54 +54 +38 +10 +10 +FE +ENDCHAR +STARTCHAR uni234F +ENCODING 9039 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +38 +54 +10 +FE +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2350 +ENCODING 9040 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +FE +92 +BA +D6 +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni2351 +ENCODING 9041 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +00 +F8 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2352 +ENCODING 9042 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +20 +F8 +A8 +A8 +70 +70 +20 +20 +20 +ENDCHAR +STARTCHAR uni2353 +ENCODING 9043 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +FE +82 +92 +AA +AA +C6 +C6 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni2354 +ENCODING 9044 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +FE +82 +82 +FE +C6 +C6 +AA +AA +92 +92 +82 +FE +ENDCHAR +STARTCHAR uni2355 +ENCODING 9045 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +38 +54 +54 +38 +10 +10 +10 +ENDCHAR +STARTCHAR uni2356 +ENCODING 9046 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +FE +10 +54 +38 +10 +ENDCHAR +STARTCHAR uni2357 +ENCODING 9047 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +FE +92 +92 +92 +92 +92 +92 +92 +D6 +BA +92 +FE +ENDCHAR +STARTCHAR uni2358 +ENCODING 9048 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +20 +20 +00 +00 +00 +00 +00 +00 +F8 +ENDCHAR +STARTCHAR uni2359 +ENCODING 9049 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +20 +20 +50 +50 +88 +88 +F8 +00 +F8 +ENDCHAR +STARTCHAR uni235A +ENCODING 9050 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +10 +28 +44 +82 +44 +28 +10 +00 +7C +ENDCHAR +STARTCHAR uni235B +ENCODING 9051 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +60 +90 +90 +60 +00 +00 +F8 +ENDCHAR +STARTCHAR uni235C +ENCODING 9052 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +38 +44 +82 +82 +82 +44 +38 +00 +FE +ENDCHAR +STARTCHAR uni235D +ENCODING 9053 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +92 +AA +92 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni235E +ENCODING 9054 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +FE +82 +92 +92 +92 +82 +82 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni235F +ENCODING 9055 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 2 +BITMAP +38 +44 +92 +FE +BA +AA +44 +38 +ENDCHAR +STARTCHAR uni2360 +ENCODING 9056 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +FE +82 +82 +92 +92 +82 +82 +92 +92 +82 +82 +FE +ENDCHAR +STARTCHAR uni2361 +ENCODING 9057 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +48 +48 +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2362 +ENCODING 9058 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 2 +BITMAP +90 +90 +00 +00 +F8 +88 +88 +50 +50 +20 +20 +ENDCHAR +STARTCHAR uni2363 +ENCODING 9059 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 5 +BITMAP +90 +90 +00 +00 +20 +F8 +70 +50 +ENDCHAR +STARTCHAR uni2364 +ENCODING 9060 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 3 +BITMAP +90 +90 +00 +00 +00 +00 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni2365 +ENCODING 9061 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +48 +48 +00 +00 +00 +00 +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni2366 +ENCODING 9062 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +54 +38 +10 +ENDCHAR +STARTCHAR uni2367 +ENCODING 9063 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +10 +3E +50 +90 +90 +90 +50 +3E +10 +10 +ENDCHAR +STARTCHAR uni2368 +ENCODING 9064 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 5 +BITMAP +48 +48 +00 +00 +00 +00 +64 +98 +ENDCHAR +STARTCHAR uni2369 +ENCODING 9065 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +48 +48 +00 +80 +40 +20 +10 +08 +04 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni236A +ENCODING 9066 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 3 +BITMAP +F0 +00 +00 +60 +20 +20 +40 +ENDCHAR +STARTCHAR uni236B +ENCODING 9067 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +7C +44 +44 +28 +28 +72 +9C +ENDCHAR +STARTCHAR uni236C +ENCODING 9068 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +44 +44 +66 +DC +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni236D +ENCODING 9069 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +10 +10 +10 +10 +74 +98 +10 +10 +10 +ENDCHAR +STARTCHAR uni236E +ENCODING 9070 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +60 +60 +00 +00 +60 +20 +20 +40 +00 +F8 +ENDCHAR +STARTCHAR uni236F +ENCODING 9071 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +FE +82 +86 +8A +FE +92 +FE +A2 +C2 +82 +82 +FE +ENDCHAR +STARTCHAR uni2370 +ENCODING 9072 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +FE +82 +92 +AA +AA +8A +92 +92 +82 +92 +82 +FE +ENDCHAR +STARTCHAR uni2371 +ENCODING 9073 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +64 +98 +00 +44 +44 +28 +28 +10 +ENDCHAR +STARTCHAR uni2372 +ENCODING 9074 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 1 +BITMAP +64 +98 +00 +10 +28 +28 +44 +44 +ENDCHAR +STARTCHAR uni2373 +ENCODING 9075 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 3 0 +BITMAP +C0 +40 +40 +40 +40 +40 +30 +ENDCHAR +STARTCHAR uni2374 +ENCODING 9076 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +84 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni2375 +ENCODING 9077 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +28 +44 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni2376 +ENCODING 9078 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +64 +94 +88 +88 +88 +94 +64 +00 +FC +ENDCHAR +STARTCHAR uni2377 +ENCODING 9079 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +7C +80 +80 +F8 +80 +80 +7C +00 +FC +ENDCHAR +STARTCHAR uni2378 +ENCODING 9080 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 3 0 +BITMAP +C0 +40 +40 +40 +40 +40 +30 +00 +F0 +ENDCHAR +STARTCHAR uni2379 +ENCODING 9081 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +44 +82 +92 +92 +92 +92 +6C +00 +FE +ENDCHAR +STARTCHAR uni237A +ENCODING 9082 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +64 +94 +88 +88 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni237B +ENCODING 9083 +BBX 14 11 1 0 +BITMAP +0004 +0008 +0010 +0020 +03F8 +0080 +0100 +8200 +4400 +2800 +1000 +ENDCHAR +STARTCHAR uni237C +ENCODING 9084 +BBX 14 14 1 -2 +BITMAP +1400 +1800 +1000 +3000 +5000 +3000 +1000 +1800 +1400 +1800 +9FFC +A000 +C000 +F000 +ENDCHAR +STARTCHAR uni237D +ENCODING 9085 +BBX 13 4 1 0 +BITMAP +F078 +1040 +1040 +1FC0 +ENDCHAR +STARTCHAR uni237E +ENCODING 9086 +BBX 10 10 3 0 +BITMAP +1E00 +2100 +4080 +8040 +8040 +FFC0 +2100 +2100 +2100 +E1C0 +ENDCHAR +STARTCHAR uni237F +ENCODING 9087 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +20 +20 +20 +20 +20 +70 +F8 +70 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2380 +ENCODING 9088 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +38 +04 +3C +44 +44 +3A +00 +82 +44 +28 +10 +ENDCHAR +STARTCHAR uni2381 +ENCODING 9089 +BBX 13 8 1 0 +BITMAP +7000 +0800 +7800 +8800 +8800 +74A8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni2382 +ENCODING 9090 +BBX 13 8 1 0 +BITMAP +70E0 +0810 +78F0 +8910 +8910 +74E8 +0000 +FDF8 +ENDCHAR +STARTCHAR uni2383 +ENCODING 9091 +BBX 13 9 1 1 +BITMAP +8008 +4010 +2720 +0080 +E7B8 +0880 +28A0 +4750 +8008 +ENDCHAR +STARTCHAR uni2384 +ENCODING 9092 +BBX 12 8 2 0 +BITMAP +FFC0 +8420 +8810 +8810 +8810 +8810 +8420 +FFC0 +ENDCHAR +STARTCHAR uni2385 +ENCODING 9093 +BBX 9 12 3 -2 +BITMAP +0800 +0800 +EB80 +8880 +8880 +8880 +8880 +8880 +8880 +EB80 +0800 +0800 +ENDCHAR +STARTCHAR uni2386 +ENCODING 9094 +BBX 14 15 1 -2 +BITMAP +0200 +0500 +0880 +1040 +2420 +0610 +FD08 +8084 +FD08 +0610 +2420 +1040 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni2387 +ENCODING 9095 +BBX 14 7 1 0 +BITMAP +0040 +0060 +01D0 +0260 +0440 +0800 +F1FC +ENDCHAR +STARTCHAR uni2388 +ENCODING 9096 +BBX 11 14 2 -1 +BITMAP +0400 +0400 +8E20 +75C0 +64C0 +5540 +8E20 +8E20 +5540 +64C0 +75C0 +8E20 +0400 +0400 +ENDCHAR +STARTCHAR uni2389 +ENCODING 9097 +BBX 13 13 0 -1 +BITMAP +0F80 +3060 +4010 +4010 +8008 +8008 +F078 +8888 +8888 +4510 +4510 +3260 +0F80 +ENDCHAR +STARTCHAR uni238A +ENCODING 9098 +BBX 13 13 0 -1 +BITMAP +0F80 +3060 +4010 +7FF0 +A028 +9048 +9048 +8888 +8888 +4510 +4510 +3260 +0F80 +ENDCHAR +STARTCHAR uni238B +ENCODING 9099 +BBX 13 13 0 -1 +BITMAP +0180 +7C60 +4810 +5010 +6808 +4408 +0208 +8108 +8088 +4050 +4010 +3060 +0F80 +ENDCHAR +STARTCHAR uni238C +ENCODING 9100 +BBX 14 10 1 0 +BITMAP +0FC0 +1020 +2010 +F810 +5010 +2010 +7038 +8844 +8844 +7038 +ENDCHAR +STARTCHAR uni238D +ENCODING 9101 +BBX 12 10 2 0 +BITMAP +1F80 +1080 +1080 +1080 +1080 +1080 +1080 +1080 +1080 +F0F0 +ENDCHAR +STARTCHAR uni238E +ENCODING 9102 +BBX 12 10 2 0 +BITMAP +07F0 +0840 +1080 +1080 +1080 +1080 +1080 +1080 +2100 +FE00 +ENDCHAR +STARTCHAR uni238F +ENCODING 9103 +BBX 9 9 3 0 +BITMAP +FF80 +1400 +2200 +4100 +8080 +4100 +2200 +1400 +0800 +ENDCHAR +STARTCHAR uni2390 +ENCODING 9104 +BBX 9 9 3 0 +BITMAP +0800 +1400 +2200 +4100 +8080 +4100 +2200 +1400 +FF80 +ENDCHAR +STARTCHAR uni2391 +ENCODING 9105 +BBX 9 9 3 0 +BITMAP +FF80 +1400 +2200 +4100 +FF80 +4100 +2200 +1400 +0800 +ENDCHAR +STARTCHAR uni2392 +ENCODING 9106 +BBX 9 9 3 0 +BITMAP +0800 +1400 +2200 +4100 +FF80 +4100 +2200 +1400 +FF80 +ENDCHAR +STARTCHAR uni2393 +ENCODING 9107 +BBX 13 3 1 3 +BITMAP +FFF8 +0000 +E738 +ENDCHAR +STARTCHAR uni2394 +ENCODING 9108 +BBX 14 9 1 0 +BITMAP +0FC0 +1020 +2010 +4008 +8004 +4008 +2010 +1020 +0FC0 +ENDCHAR +STARTCHAR uni2395 +ENCODING 9109 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +FE +82 +82 +82 +82 +82 +82 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni2396 +ENCODING 9110 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 -1 +BITMAP +F8 +F8 +F0 +F0 +E0 +E0 +C0 +C0 +80 +ENDCHAR +STARTCHAR uni2397 +ENCODING 9111 +BBX 13 13 1 0 +BITMAP +DB60 +8020 +9FF8 +9008 +9408 +9C08 +97C8 +A048 +97C8 +9C08 +F408 +1008 +1FF8 +ENDCHAR +STARTCHAR uni2398 +ENCODING 9112 +BBX 13 13 1 0 +BITMAP +FFE0 +8020 +9DB8 +9008 +9208 +9308 +BE80 +A048 +BE88 +9300 +F208 +1008 +19B8 +ENDCHAR +STARTCHAR uni2399 +ENCODING 9113 +BBX 15 13 0 0 +BITMAP +01E0 +0320 +0520 +0F20 +0820 +3838 +4824 +8822 +8822 +8FE2 +8002 +4004 +3FF8 +ENDCHAR +STARTCHAR uni239A +ENCODING 9114 +BBX 13 9 1 0 +BITMAP +3FE0 +4050 +8488 +8928 +9248 +A488 +8908 +5010 +3FE0 +ENDCHAR +STARTCHAR uni239B +ENCODING 9115 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 15 2 -2 +BITMAP +38 +60 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni239C +ENCODING 9116 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 16 2 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni239D +ENCODING 9117 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 2 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +60 +38 +ENDCHAR +STARTCHAR uni239E +ENCODING 9118 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 15 1 -2 +BITMAP +E0 +30 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni239F +ENCODING 9119 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 16 4 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni23A0 +ENCODING 9120 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 1 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +30 +E0 +ENDCHAR +STARTCHAR uni23A1 +ENCODING 9121 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 15 2 -2 +BITMAP +F8 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni23A2 +ENCODING 9122 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 16 2 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni23A3 +ENCODING 9123 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 2 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +F8 +ENDCHAR +STARTCHAR uni23A4 +ENCODING 9124 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 15 1 -2 +BITMAP +F8 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni23A5 +ENCODING 9125 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 16 4 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni23A6 +ENCODING 9126 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 1 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +F8 +ENDCHAR +STARTCHAR uni23A7 +ENCODING 9127 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 15 3 -2 +BITMAP +30 +60 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni23A8 +ENCODING 9128 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 16 1 -2 +BITMAP +30 +30 +30 +30 +30 +30 +20 +40 +80 +40 +20 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni23A9 +ENCODING 9129 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 16 3 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +60 +30 +ENDCHAR +STARTCHAR uni23AA +ENCODING 9130 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 16 3 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni23AB +ENCODING 9131 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 15 1 -2 +BITMAP +C0 +60 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni23AC +ENCODING 9132 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 16 3 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +40 +20 +10 +20 +40 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni23AD +ENCODING 9133 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 16 1 -2 +BITMAP +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +60 +C0 +ENDCHAR +STARTCHAR uni23AE +ENCODING 9134 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 16 4 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni23AF +ENCODING 9135 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 1 0 4 +BITMAP +FF +ENDCHAR +STARTCHAR uni23B0 +ENCODING 9136 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 16 1 -2 +BITMAP +0C +18 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +60 +C0 +ENDCHAR +STARTCHAR uni23B1 +ENCODING 9137 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 16 1 -2 +BITMAP +C0 +60 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +18 +0C +ENDCHAR +STARTCHAR uni23B2 +ENCODING 9138 +BBX 14 12 1 -2 +BITMAP +FFFC +601C +600C +3004 +3000 +1800 +1800 +0C00 +0C00 +0600 +0600 +0300 +ENDCHAR +STARTCHAR uni23B3 +ENCODING 9139 +BBX 14 12 1 2 +BITMAP +0300 +0600 +0600 +0C00 +0C00 +1800 +1800 +3000 +3004 +600C +601C +FFFC +ENDCHAR +STARTCHAR uni23B4 +ENCODING 9140 +BBX 14 3 1 7 +BITMAP +FFFC +8004 +8004 +ENDCHAR +STARTCHAR uni23B5 +ENCODING 9141 +BBX 14 3 1 -2 +BITMAP +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni23B6 +ENCODING 9142 +BBX 14 7 1 1 +BITMAP +8004 +8004 +FFFC +0000 +FFFC +8004 +8004 +ENDCHAR +STARTCHAR uni23B7 +ENCODING 9143 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 15 1 -1 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +D0 +50 +50 +30 +30 +10 +10 +ENDCHAR +STARTCHAR uni23B8 +ENCODING 9144 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 16 0 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni23B9 +ENCODING 9145 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 16 7 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni23BA +ENCODING 9146 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 1 0 13 +BITMAP +FF +ENDCHAR +STARTCHAR uni23BB +ENCODING 9147 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 1 0 9 +BITMAP +FF +ENDCHAR +STARTCHAR uni23BC +ENCODING 9148 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 1 0 2 +BITMAP +FF +ENDCHAR +STARTCHAR uni23BD +ENCODING 9149 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 1 0 -2 +BITMAP +FF +ENDCHAR +STARTCHAR uni23BE +ENCODING 9150 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 2 -1 +BITMAP +FC +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni23BF +ENCODING 9151 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 2 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni23C0 +ENCODING 9152 +BBX 11 14 2 -1 +BITMAP +0400 +0400 +0E00 +3580 +4440 +4440 +8420 +8420 +4440 +4440 +3580 +0E00 +0400 +0400 +ENDCHAR +STARTCHAR uni23C1 +ENCODING 9153 +BBX 16 14 0 -1 +BITMAP +FFFF +0100 +0380 +0D60 +1110 +1110 +2108 +2108 +1110 +1110 +0D60 +0380 +0100 +0100 +ENDCHAR +STARTCHAR uni23C2 +ENCODING 9154 +BBX 16 14 0 -1 +BITMAP +0100 +0100 +0380 +0D60 +1110 +1110 +2108 +2108 +1110 +1110 +0D60 +0380 +0100 +FFFF +ENDCHAR +STARTCHAR uni23C3 +ENCODING 9155 +BBX 11 14 2 -1 +BITMAP +0400 +0400 +0E00 +0E00 +1500 +1500 +2480 +2480 +4440 +4440 +8420 +FFE0 +0400 +0400 +ENDCHAR +STARTCHAR uni23C4 +ENCODING 9156 +BBX 16 14 0 -1 +BITMAP +FFFF +0100 +0380 +0380 +0540 +0540 +0920 +0920 +1110 +1110 +2108 +3FF8 +0100 +0100 +ENDCHAR +STARTCHAR uni23C5 +ENCODING 9157 +BBX 16 14 0 -1 +BITMAP +0100 +0100 +0380 +0380 +0540 +0540 +0920 +0920 +1110 +1110 +2108 +3FF8 +0100 +FFFF +ENDCHAR +STARTCHAR uni23C6 +ENCODING 9158 +BBX 11 14 2 -1 +BITMAP +0400 +0400 +0400 +0400 +0400 +7400 +8C00 +0620 +05C0 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni23C7 +ENCODING 9159 +BBX 16 14 0 -1 +BITMAP +FFFF +0100 +0100 +0100 +0100 +1D00 +2300 +0188 +0170 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni23C8 +ENCODING 9160 +BBX 16 14 0 -1 +BITMAP +0100 +0100 +0100 +0100 +0100 +1D00 +2300 +0188 +0170 +0100 +0100 +0100 +0100 +FFFF +ENDCHAR +STARTCHAR uni23C9 +ENCODING 9161 +BBX 16 14 0 -1 +BITMAP +FFFF +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni23CA +ENCODING 9162 +BBX 16 14 0 -1 +BITMAP +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +FFFF +ENDCHAR +STARTCHAR uni23CB +ENCODING 9163 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 0 -1 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni23CC +ENCODING 9164 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 0 -1 +BITMAP +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni23CD +ENCODING 9165 +BBX 13 13 1 0 +BITMAP +0100 +F278 +8408 +8808 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni23CE +ENCODING 9166 +BBX 14 13 1 -1 +BITMAP +007C +0044 +0044 +0044 +0844 +1884 +2F04 +4004 +8008 +4010 +2FE0 +1800 +0800 +ENDCHAR +STARTCHAR uni23CF +ENCODING 9167 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +10 +38 +7C +FE +00 +FE +FE +FE +ENDCHAR +STARTCHAR uni23D0 +ENCODING 9168 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 16 4 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni23D1 +ENCODING 9169 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 0 3 +BITMAP +82 +44 +38 +ENDCHAR +STARTCHAR uni23D2 +ENCODING 9170 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 3 +BITMAP +FE +00 +82 +44 +38 +ENDCHAR +STARTCHAR uni23D3 +ENCODING 9171 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 1 +BITMAP +82 +44 +38 +00 +FE +ENDCHAR +STARTCHAR uni23D4 +ENCODING 9172 +BBX 15 5 0 3 +BITMAP +FFFE +0000 +8282 +4444 +3838 +ENDCHAR +STARTCHAR uni23D5 +ENCODING 9173 +BBX 15 5 0 1 +BITMAP +8282 +4444 +3838 +0000 +FFFE +ENDCHAR +STARTCHAR uni23D6 +ENCODING 9174 +BBX 14 3 1 3 +BITMAP +8304 +4488 +3870 +ENDCHAR +STARTCHAR uni23D7 +ENCODING 9175 +BBX 14 6 1 4 +BITMAP +0004 +0004 +0004 +0004 +0004 +FFFC +ENDCHAR +STARTCHAR uni23D8 +ENCODING 9176 +BBX 14 6 1 4 +BITMAP +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni23D9 +ENCODING 9177 +BBX 14 6 1 4 +BITMAP +8204 +8204 +8204 +8204 +8204 +FFFC +ENDCHAR +STARTCHAR uni23DA +ENCODING 9178 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 1 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +FE +00 +38 +00 +10 +ENDCHAR +STARTCHAR uni23DB +ENCODING 9179 +BBX 16 7 0 1 +BITMAP +1FF8 +1008 +1008 +FFFF +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni23DC +ENCODING 9180 +BBX 16 4 0 0 +BITMAP +07E0 +381C +4002 +8001 +ENDCHAR +STARTCHAR uni23DD +ENCODING 9181 +BBX 16 4 0 8 +BITMAP +8001 +4002 +381C +07E0 +ENDCHAR +STARTCHAR uni23DE +ENCODING 9182 +BBX 15 5 0 0 +BITMAP +0100 +0280 +3C78 +4004 +8002 +ENDCHAR +STARTCHAR uni23DF +ENCODING 9183 +BBX 15 5 0 7 +BITMAP +8002 +4004 +3C78 +0280 +0100 +ENDCHAR +STARTCHAR uni23E0 +ENCODING 9184 +BBX 14 4 1 0 +BITMAP +1FE0 +2010 +4008 +8004 +ENDCHAR +STARTCHAR uni23E1 +ENCODING 9185 +BBX 14 4 1 8 +BITMAP +8004 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni23E2 +ENCODING 9186 +BBX 13 9 1 0 +BITMAP +FF80 +8040 +8040 +8020 +8020 +8010 +8010 +8008 +FFF8 +ENDCHAR +STARTCHAR uni23E3 +ENCODING 9187 +BBX 9 13 4 -1 +BITMAP +0800 +1400 +2200 +4100 +9C80 +A280 +A280 +A280 +9C80 +4100 +2200 +1400 +0800 +ENDCHAR +STARTCHAR uni23E4 +ENCODING 9188 +BBX 14 1 1 4 +BITMAP +FFFC +ENDCHAR +STARTCHAR uni23E5 +ENCODING 9189 +BBX 13 6 1 0 +BITMAP +1FF8 +2010 +2010 +4020 +4020 +FFC0 +ENDCHAR +STARTCHAR uni23E6 +ENCODING 9190 +BBX 13 7 1 1 +BITMAP +3000 +4800 +8400 +FFF8 +0108 +0090 +0060 +ENDCHAR +STARTCHAR uni23E7 +ENCODING 9191 +BBX 15 13 0 -1 +BITMAP +2400 +2400 +2200 +2206 +A918 +71A0 +21C0 +03E0 +01C0 +02A0 +0410 +0808 +1004 +ENDCHAR +STARTCHAR uni23E8 +ENCODING 9192 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +48 +D4 +54 +54 +54 +48 +ENDCHAR +STARTCHAR uni23E9 +ENCODING 9193 +BBX 11 9 2 0 +BITMAP +8200 +C300 +E380 +F3C0 +FBE0 +F3C0 +E380 +C300 +8200 +ENDCHAR +STARTCHAR uni23EA +ENCODING 9194 +BBX 11 9 2 0 +BITMAP +0820 +1860 +38E0 +79E0 +FBE0 +79E0 +38E0 +1860 +0820 +ENDCHAR +STARTCHAR uni23EB +ENCODING 9195 +BBX 9 11 3 -1 +BITMAP +0800 +1C00 +3E00 +7F00 +FF80 +0000 +0800 +1C00 +3E00 +7F00 +FF80 +ENDCHAR +STARTCHAR uni23EC +ENCODING 9196 +BBX 9 11 3 -1 +BITMAP +FF80 +7F00 +3E00 +1C00 +0800 +0000 +FF80 +7F00 +3E00 +1C00 +0800 +ENDCHAR +STARTCHAR uni23ED +ENCODING 9197 +BBX 13 9 1 0 +BITMAP +8208 +C308 +E388 +F3C8 +FBE8 +F3C8 +E388 +C308 +8208 +ENDCHAR +STARTCHAR uni23EE +ENCODING 9198 +BBX 13 9 1 0 +BITMAP +8208 +8618 +8E38 +9E78 +BEF8 +9E78 +8E38 +8618 +8208 +ENDCHAR +STARTCHAR uni23EF +ENCODING 9199 +BBX 10 9 3 0 +BITMAP +8240 +C240 +E240 +F240 +FA40 +F240 +E240 +C240 +8240 +ENDCHAR +STARTCHAR uni23F0 +ENCODING 9200 +BBX 11 14 2 -1 +BITMAP +0400 +64C0 +DF60 +A0A0 +4440 +8420 +8420 +8420 +8820 +9020 +4040 +2080 +3F80 +71C0 +ENDCHAR +STARTCHAR uni23F1 +ENCODING 9201 +BBX 11 13 2 0 +BITMAP +0C00 +0C00 +1F60 +20E0 +4440 +8420 +8420 +8420 +8020 +8020 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni23F2 +ENCODING 9202 +BBX 11 11 2 0 +BITMAP +1F00 +2080 +4040 +9020 +8820 +8420 +8020 +8020 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni23F3 +ENCODING 9203 +BBX 13 13 1 -1 +BITMAP +FFF8 +2020 +2020 +2520 +1AC0 +0D80 +0500 +0D80 +1040 +2220 +3560 +2AA0 +FFF8 +ENDCHAR +STARTCHAR uni23F4 +ENCODING 9204 +BBX 6 11 4 -1 +BITMAP +04 +0C +1C +3C +7C +FC +7C +3C +1C +0C +04 +ENDCHAR +STARTCHAR uni23F5 +ENCODING 9205 +BBX 6 11 4 -1 +BITMAP +80 +C0 +E0 +F0 +F8 +FC +F8 +F0 +E0 +C0 +80 +ENDCHAR +STARTCHAR uni23F6 +ENCODING 9206 +BBX 11 6 2 2 +BITMAP +0400 +0E00 +1F00 +3F80 +7FC0 +FFE0 +ENDCHAR +STARTCHAR uni23F7 +ENCODING 9207 +BBX 11 6 2 2 +BITMAP +FFE0 +7FC0 +3F80 +1F00 +0E00 +0400 +ENDCHAR +STARTCHAR uni23F8 +ENCODING 9208 +BBX 6 11 5 0 +BITMAP +CC +CC +CC +CC +CC +CC +CC +CC +CC +CC +CC +ENDCHAR +STARTCHAR uni23F9 +ENCODING 9209 +BBX 10 10 3 0 +BITMAP +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +ENDCHAR +STARTCHAR uni23FA +ENCODING 9210 +BBX 10 10 3 0 +BITMAP +3F00 +7F80 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +7F80 +3F00 +ENDCHAR +STARTCHAR uni23FB +ENCODING 9211 +BBX 14 16 1 -2 +BITMAP +0300 +0300 +0300 +0300 +3330 +7338 +6318 +E31C +C30C +C30C +E01C +6018 +7038 +3FF0 +1FE0 +0780 +ENDCHAR +STARTCHAR uni23FC +ENCODING 9212 +BBX 14 15 1 -2 +BITMAP +0FC0 +3FF0 +7878 +F03C +E31C +C30C +C30C +C30C +C30C +C30C +E31C +7038 +3FF0 +1FE0 +0780 +ENDCHAR +STARTCHAR uni23FD +ENCODING 9213 +BBX 4 16 6 -2 +BITMAP +60 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +60 +ENDCHAR +STARTCHAR uni23FE +ENCODING 9214 +BBX 11 16 1 -2 +BITMAP +0800 +1000 +3000 +7000 +7000 +F000 +F000 +F000 +F000 +F800 +7800 +7C00 +3E00 +1F00 +0FC0 +03E0 +ENDCHAR +STARTCHAR uni23FF +ENCODING 9215 +BBX 14 11 1 0 +BITMAP +0038 +00F0 +0328 +0C48 +3044 +C044 +3044 +0C48 +0328 +00F0 +0038 +ENDCHAR +STARTCHAR uni2400 +ENCODING 9216 +BBX 14 4 1 5 +BITMAP +94A0 +D4A0 +B4A0 +933C +ENDCHAR +STARTCHAR uni2401 +ENCODING 9217 +BBX 14 5 1 4 +BITMAP +7324 +84A4 +64BC +14A4 +E324 +ENDCHAR +STARTCHAR uni2402 +ENCODING 9218 +BBX 13 5 1 4 +BITMAP +7748 +8248 +6230 +1248 +E248 +ENDCHAR +STARTCHAR uni2403 +ENCODING 9219 +BBX 13 5 1 4 +BITMAP +F748 +8248 +F230 +8248 +F248 +ENDCHAR +STARTCHAR uni2404 +ENCODING 9220 +BBX 14 5 1 4 +BITMAP +F37C +8490 +F490 +8490 +F310 +ENDCHAR +STARTCHAR uni2405 +ENCODING 9221 +BBX 14 5 1 4 +BITMAP +F498 +84A4 +F6A4 +85AC +F49C +ENDCHAR +STARTCHAR uni2406 +ENCODING 9222 +BBX 13 5 1 4 +BITMAP +6348 +9450 +F460 +9450 +9348 +ENDCHAR +STARTCHAR uni2407 +ENCODING 9223 +BBX 14 5 1 4 +BITMAP +E7A0 +9420 +E7A0 +9420 +E7BC +ENDCHAR +STARTCHAR uni2408 +ENCODING 9224 +BBX 10 5 3 4 +BITMAP +F1C0 +8A00 +F180 +8840 +F380 +ENDCHAR +STARTCHAR uni2409 +ENCODING 9225 +BBX 11 5 2 4 +BITMAP +8BE0 +8880 +F880 +8880 +8880 +ENDCHAR +STARTCHAR uni240A +ENCODING 9226 +BBX 11 5 2 4 +BITMAP +83E0 +8200 +83E0 +8200 +FA00 +ENDCHAR +STARTCHAR uni240B +ENCODING 9227 +BBX 11 5 2 4 +BITMAP +8BE0 +8880 +8880 +5080 +2080 +ENDCHAR +STARTCHAR uni240C +ENCODING 9228 +BBX 11 5 2 4 +BITMAP +FBE0 +8200 +FBE0 +8200 +8200 +ENDCHAR +STARTCHAR uni240D +ENCODING 9229 +BBX 11 5 2 4 +BITMAP +7BC0 +8220 +83C0 +8240 +7A20 +ENDCHAR +STARTCHAR uni240E +ENCODING 9230 +BBX 11 5 2 4 +BITMAP +79C0 +8220 +7220 +0A20 +F1C0 +ENDCHAR +STARTCHAR uni240F +ENCODING 9231 +BBX 11 5 2 4 +BITMAP +7BE0 +8080 +7080 +0880 +F3E0 +ENDCHAR +STARTCHAR uni2410 +ENCODING 9232 +BBX 12 5 2 4 +BITMAP +E470 +9440 +9470 +9440 +E770 +ENDCHAR +STARTCHAR uni2411 +ENCODING 9233 +BBX 13 5 1 4 +BITMAP +E310 +9430 +9410 +9410 +E338 +ENDCHAR +STARTCHAR uni2412 +ENCODING 9234 +BBX 13 5 1 4 +BITMAP +E330 +9408 +9410 +9420 +E338 +ENDCHAR +STARTCHAR uni2413 +ENCODING 9235 +BBX 13 5 1 4 +BITMAP +E330 +9408 +9430 +9408 +E330 +ENDCHAR +STARTCHAR uni2414 +ENCODING 9236 +BBX 13 5 1 4 +BITMAP +E308 +9418 +9428 +9438 +E308 +ENDCHAR +STARTCHAR uni2415 +ENCODING 9237 +BBX 14 5 1 4 +BITMAP +9324 +D4A8 +D4B0 +B7A8 +94A4 +ENDCHAR +STARTCHAR uni2416 +ENCODING 9238 +BBX 14 5 1 4 +BITMAP +68A4 +8534 +622C +1224 +E224 +ENDCHAR +STARTCHAR uni2417 +ENCODING 9239 +BBX 13 5 1 4 +BITMAP +F770 +8248 +F270 +8248 +F270 +ENDCHAR +STARTCHAR uni2418 +ENCODING 9240 +BBX 13 5 1 4 +BITMAP +6648 +8968 +8F58 +8948 +6948 +ENDCHAR +STARTCHAR uni2419 +ENCODING 9241 +BBX 11 5 2 4 +BITMAP +FA20 +8360 +FAA0 +8220 +FA20 +ENDCHAR +STARTCHAR uni241A +ENCODING 9242 +BBX 14 5 1 4 +BITMAP +74B8 +84A4 +64B8 +14A4 +E338 +ENDCHAR +STARTCHAR uni241B +ENCODING 9243 +BBX 14 5 1 4 +BITMAP +F39C +8420 +F320 +80A0 +F71C +ENDCHAR +STARTCHAR uni241C +ENCODING 9244 +BBX 9 5 3 4 +BITMAP +F380 +8400 +F300 +8080 +8700 +ENDCHAR +STARTCHAR uni241D +ENCODING 9245 +BBX 9 5 3 4 +BITMAP +7380 +8400 +B300 +9080 +7700 +ENDCHAR +STARTCHAR uni241E +ENCODING 9246 +BBX 9 5 3 4 +BITMAP +E380 +9400 +E300 +A080 +9700 +ENDCHAR +STARTCHAR uni241F +ENCODING 9247 +BBX 9 5 3 4 +BITMAP +9380 +9400 +9300 +9080 +6700 +ENDCHAR +STARTCHAR uni2420 +ENCODING 9248 +BBX 9 5 1 4 +BITMAP +7700 +8480 +6700 +1400 +E400 +ENDCHAR +STARTCHAR uni2421 +ENCODING 9249 +BBX 14 5 1 4 +BITMAP +E7A0 +9420 +97A0 +9420 +E7BC +ENDCHAR +STARTCHAR uni2422 +ENCODING 9250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +28 +30 +20 +60 +B8 +24 +24 +24 +24 +38 +ENDCHAR +STARTCHAR uni2423 +ENCODING 9251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 0 +BITMAP +84 +FC +ENDCHAR +STARTCHAR uni2424 +ENCODING 9252 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +90 +D0 +B0 +90 +00 +20 +20 +20 +3C +ENDCHAR +STARTCHAR uni2425 +ENCODING 9253 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +02 +14 +2A +54 +A8 +50 +80 +ENDCHAR +STARTCHAR uni2426 +ENCODING 9254 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +40 +20 +20 +00 +20 +20 +ENDCHAR +STARTCHAR uni2427 +ENCODING 9255 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +AA +54 +AA +54 +AA +54 +AA +ENDCHAR +STARTCHAR uni2428 +ENCODING 9256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +54 +AA +54 +AA +54 +AA +54 +AA +54 +AA +54 +ENDCHAR +STARTCHAR uni2429 +ENCODING 9257 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +CC +CC +33 +33 +CC +CC +33 +33 +CC +CC +33 +33 +CC +CC +33 +33 +ENDCHAR +STARTCHAR uni2440 +ENCODING 9280 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +38 +28 +28 +28 +20 +20 +A0 +A0 +A0 +E0 +ENDCHAR +STARTCHAR uni2441 +ENCODING 9281 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +08 +08 +08 +08 +08 +F8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni2442 +ENCODING 9282 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +88 +88 +88 +88 +88 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2443 +ENCODING 9283 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +20 +20 +20 +20 +F8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni2444 +ENCODING 9284 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +A8 +A8 +A8 +20 +20 +A8 +A8 +A8 +F8 +ENDCHAR +STARTCHAR uni2445 +ENCODING 9285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 5 +BITMAP +88 +D8 +A8 +D8 +88 +ENDCHAR +STARTCHAR uni2446 +ENCODING 9286 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 1 +BITMAP +1C +DC +DC +C0 +C0 +DC +DC +1C +ENDCHAR +STARTCHAR uni2447 +ENCODING 9287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +03 +03 +03 +1B +18 +18 +D8 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni2448 +ENCODING 9288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +0E +AE +AE +A0 +A0 +A0 +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni2449 +ENCODING 9289 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +DA +DA +DA +DA +DA +DA +DA +DA +DA +ENDCHAR +STARTCHAR uni244A +ENCODING 9290 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +A0 +A0 +50 +28 +28 +14 +14 +0A +05 +05 +ENDCHAR +STARTCHAR uni2460 +ENCODING 9312 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4104 +4304 +8502 +8102 +8102 +8102 +8102 +4104 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2461 +ENCODING 9313 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4384 +4444 +8442 +8042 +8082 +8102 +8202 +4404 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2462 +ENCODING 9314 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4384 +4444 +8442 +8042 +8182 +8042 +8442 +4444 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2463 +ENCODING 9315 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4084 +4184 +8282 +8482 +8882 +8FC2 +8082 +4084 +4084 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2464 +ENCODING 9316 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +47C4 +4404 +8402 +8402 +8782 +8042 +8042 +4444 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2465 +ENCODING 9317 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4184 +4204 +8402 +8402 +8782 +8442 +8442 +4444 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2466 +ENCODING 9318 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +47C4 +4044 +8042 +8082 +8082 +8082 +8102 +4104 +4104 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2467 +ENCODING 9319 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4384 +4444 +8442 +8442 +8382 +8442 +8442 +4444 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2468 +ENCODING 9320 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4384 +4444 +8442 +8442 +83C2 +8042 +8042 +4084 +4304 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2469 +ENCODING 9321 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4464 +8C92 +9492 +8492 +8492 +8492 +5F64 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni246A +ENCODING 9322 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4444 +8CC2 +9542 +8442 +8442 +8442 +5FF4 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni246B +ENCODING 9323 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4464 +8C92 +9412 +8422 +8442 +8482 +5FF4 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni246C +ENCODING 9324 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4464 +8C92 +9412 +8422 +8412 +8492 +5F64 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni246D +ENCODING 9325 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4414 +8C32 +9452 +8492 +84FA +8412 +5F14 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni246E +ENCODING 9326 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +44F4 +8C82 +9482 +84E2 +8412 +8492 +5F64 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni246F +ENCODING 9327 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4474 +8C82 +9482 +84E2 +8492 +8492 +5F64 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2470 +ENCODING 9328 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +44F4 +8C12 +9412 +8422 +8422 +8442 +5F44 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2471 +ENCODING 9329 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4464 +8C92 +9492 +8462 +8492 +8492 +5F64 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2472 +ENCODING 9330 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4464 +8C92 +9492 +8472 +8412 +8412 +5F64 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2473 +ENCODING 9331 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +9292 +8292 +8492 +8892 +9092 +5E64 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2474 +ENCODING 9332 +BBX 14 12 1 0 +BITMAP +2010 +4108 +4308 +8504 +8104 +8104 +8104 +8104 +8104 +4108 +47C8 +2010 +ENDCHAR +STARTCHAR uni2475 +ENCODING 9333 +BBX 14 12 1 0 +BITMAP +2010 +4788 +4848 +8844 +8044 +8184 +8204 +8404 +8804 +4808 +4FC8 +2010 +ENDCHAR +STARTCHAR uni2476 +ENCODING 9334 +BBX 14 12 1 0 +BITMAP +2010 +4788 +4848 +8844 +8044 +8384 +8044 +8044 +8844 +4848 +4788 +2010 +ENDCHAR +STARTCHAR uni2477 +ENCODING 9335 +BBX 14 12 1 0 +BITMAP +2010 +4088 +4188 +8284 +8484 +8884 +8884 +8FC4 +8084 +4088 +4088 +2010 +ENDCHAR +STARTCHAR uni2478 +ENCODING 9336 +BBX 14 12 1 0 +BITMAP +2010 +4FC8 +4808 +8804 +8804 +8F84 +8044 +8044 +8044 +4848 +4788 +2010 +ENDCHAR +STARTCHAR uni2479 +ENCODING 9337 +BBX 14 12 1 0 +BITMAP +2010 +4388 +4408 +8804 +8804 +8F84 +8844 +8844 +8844 +4848 +4788 +2010 +ENDCHAR +STARTCHAR uni247A +ENCODING 9338 +BBX 14 12 1 0 +BITMAP +2010 +4FC8 +4048 +8044 +8084 +8084 +8084 +8104 +8104 +4108 +4108 +2010 +ENDCHAR +STARTCHAR uni247B +ENCODING 9339 +BBX 14 12 1 0 +BITMAP +2010 +4788 +4848 +8844 +8844 +8784 +8844 +8844 +8844 +4848 +4788 +2010 +ENDCHAR +STARTCHAR uni247C +ENCODING 9340 +BBX 14 12 1 0 +BITMAP +2010 +4788 +4848 +8844 +8844 +87C4 +8044 +8044 +8044 +4088 +4708 +2010 +ENDCHAR +STARTCHAR uni247D +ENCODING 9341 +BBX 16 12 0 0 +BITMAP +4002 +8831 +9849 +A885 +8885 +8885 +8885 +8885 +8885 +8849 +BE31 +4002 +ENDCHAR +STARTCHAR uni247E +ENCODING 9342 +BBX 16 12 0 0 +BITMAP +4002 +8811 +9831 +A851 +8811 +8811 +8811 +8811 +8811 +8811 +BE7D +4002 +ENDCHAR +STARTCHAR uni247F +ENCODING 9343 +BBX 16 12 0 0 +BITMAP +4002 +8879 +9885 +A885 +8805 +8819 +8821 +8841 +8881 +8881 +BEFD +4002 +ENDCHAR +STARTCHAR uni2480 +ENCODING 9344 +BBX 16 12 0 0 +BITMAP +4002 +8879 +9885 +A885 +8805 +8839 +8805 +8805 +8885 +8885 +BE79 +4002 +ENDCHAR +STARTCHAR uni2481 +ENCODING 9345 +BBX 16 12 0 0 +BITMAP +4002 +8809 +9819 +A829 +8849 +8889 +8889 +88FD +8809 +8809 +BE09 +4002 +ENDCHAR +STARTCHAR uni2482 +ENCODING 9346 +BBX 16 12 0 0 +BITMAP +4002 +88FD +9881 +A881 +8881 +88F9 +8805 +8805 +8805 +8885 +BE79 +4002 +ENDCHAR +STARTCHAR uni2483 +ENCODING 9347 +BBX 16 12 0 0 +BITMAP +4002 +8839 +9841 +A881 +8881 +88F9 +8885 +8885 +8885 +8885 +BE79 +4002 +ENDCHAR +STARTCHAR uni2484 +ENCODING 9348 +BBX 16 12 0 0 +BITMAP +4002 +89F9 +9809 +A809 +8811 +8811 +8811 +8821 +8821 +8821 +BE21 +4002 +ENDCHAR +STARTCHAR uni2485 +ENCODING 9349 +BBX 16 12 0 0 +BITMAP +4002 +8879 +9885 +A885 +8885 +8879 +8885 +8885 +8885 +8885 +BE79 +4002 +ENDCHAR +STARTCHAR uni2486 +ENCODING 9350 +BBX 16 12 0 0 +BITMAP +4002 +8879 +9885 +A885 +8885 +887D +8805 +8805 +8805 +8809 +BE71 +4002 +ENDCHAR +STARTCHAR uni2487 +ENCODING 9351 +BBX 16 12 0 0 +BITMAP +4002 +9C31 +A249 +A285 +8285 +8485 +8885 +9085 +A085 +A049 +BE31 +4002 +ENDCHAR +STARTCHAR uni2488 +ENCODING 9352 +BBX 7 10 5 0 +BITMAP +20 +60 +A0 +20 +20 +20 +20 +20 +20 +FA +ENDCHAR +STARTCHAR uni2489 +ENCODING 9353 +BBX 8 10 4 0 +BITMAP +78 +84 +84 +04 +18 +20 +40 +80 +80 +FD +ENDCHAR +STARTCHAR uni248A +ENCODING 9354 +BBX 8 10 4 0 +BITMAP +78 +84 +84 +04 +38 +04 +04 +84 +84 +79 +ENDCHAR +STARTCHAR uni248B +ENCODING 9355 +BBX 8 10 4 0 +BITMAP +08 +18 +28 +48 +88 +88 +FC +08 +08 +09 +ENDCHAR +STARTCHAR uni248C +ENCODING 9356 +BBX 8 10 4 0 +BITMAP +FC +80 +80 +80 +F8 +04 +04 +04 +84 +79 +ENDCHAR +STARTCHAR uni248D +ENCODING 9357 +BBX 8 10 4 0 +BITMAP +38 +40 +80 +80 +F8 +84 +84 +84 +84 +79 +ENDCHAR +STARTCHAR uni248E +ENCODING 9358 +BBX 8 10 4 0 +BITMAP +FC +04 +04 +08 +08 +08 +10 +10 +10 +11 +ENDCHAR +STARTCHAR uni248F +ENCODING 9359 +BBX 8 10 4 0 +BITMAP +78 +84 +84 +84 +78 +84 +84 +84 +84 +79 +ENDCHAR +STARTCHAR uni2490 +ENCODING 9360 +BBX 8 10 4 0 +BITMAP +78 +84 +84 +84 +7C +04 +04 +04 +08 +71 +ENDCHAR +STARTCHAR uni2491 +ENCODING 9361 +BBX 14 10 1 0 +BITMAP +20C0 +6120 +A210 +2210 +2210 +2210 +2210 +2210 +2120 +F8C4 +ENDCHAR +STARTCHAR uni2492 +ENCODING 9362 +BBX 14 10 1 0 +BITMAP +2040 +60C0 +A140 +2040 +2040 +2040 +2040 +2040 +2040 +F9F4 +ENDCHAR +STARTCHAR uni2493 +ENCODING 9363 +BBX 14 10 1 0 +BITMAP +21E0 +6210 +A210 +2010 +2060 +2080 +2100 +2200 +2200 +FBF4 +ENDCHAR +STARTCHAR uni2494 +ENCODING 9364 +BBX 14 10 1 0 +BITMAP +21E0 +6210 +A210 +2010 +20E0 +2010 +2010 +2210 +2210 +F9E4 +ENDCHAR +STARTCHAR uni2495 +ENCODING 9365 +BBX 14 10 1 0 +BITMAP +2020 +6060 +A0A0 +2120 +2220 +2220 +23F0 +2020 +2020 +F824 +ENDCHAR +STARTCHAR uni2496 +ENCODING 9366 +BBX 14 10 1 0 +BITMAP +23F0 +6200 +A200 +2200 +23E0 +2010 +2010 +2010 +2210 +F9E4 +ENDCHAR +STARTCHAR uni2497 +ENCODING 9367 +BBX 14 10 1 0 +BITMAP +20E0 +6100 +A200 +2200 +23E0 +2210 +2210 +2210 +2210 +F9E4 +ENDCHAR +STARTCHAR uni2498 +ENCODING 9368 +BBX 14 10 1 0 +BITMAP +23F0 +6010 +A010 +2020 +2020 +2020 +2040 +2040 +2040 +F844 +ENDCHAR +STARTCHAR uni2499 +ENCODING 9369 +BBX 14 10 1 0 +BITMAP +21E0 +6210 +A210 +2210 +21E0 +2210 +2210 +2210 +2210 +F9E4 +ENDCHAR +STARTCHAR uni249A +ENCODING 9370 +BBX 14 10 1 0 +BITMAP +21E0 +6210 +A210 +2210 +21F0 +2010 +2010 +2010 +2020 +F9C4 +ENDCHAR +STARTCHAR uni249B +ENCODING 9371 +BBX 15 10 1 0 +BITMAP +7860 +8490 +8508 +0508 +1908 +2108 +4108 +8108 +8090 +FC62 +ENDCHAR +STARTCHAR uni249C +ENCODING 9372 +BBX 14 12 1 -1 +BITMAP +2010 +4008 +4008 +8784 +8844 +8044 +87C4 +8844 +8844 +48C8 +4748 +2010 +ENDCHAR +STARTCHAR uni249D +ENCODING 9373 +BBX 14 12 1 -1 +BITMAP +2810 +4808 +4808 +8B84 +8C44 +8844 +8844 +8844 +8844 +4C48 +4B88 +2010 +ENDCHAR +STARTCHAR uni249E +ENCODING 9374 +BBX 14 12 1 -1 +BITMAP +2010 +4008 +4008 +8784 +8844 +8804 +8804 +8804 +8804 +4848 +4788 +2010 +ENDCHAR +STARTCHAR uni249F +ENCODING 9375 +BBX 14 12 1 -1 +BITMAP +2050 +4048 +4048 +8744 +88C4 +8844 +8844 +8844 +8844 +48C8 +4748 +2010 +ENDCHAR +STARTCHAR uni24A0 +ENCODING 9376 +BBX 14 12 1 -1 +BITMAP +2010 +4008 +4008 +8784 +8844 +8844 +8FC4 +8804 +8804 +4848 +4788 +2010 +ENDCHAR +STARTCHAR uni24A1 +ENCODING 9377 +BBX 14 12 1 -1 +BITMAP +2190 +4208 +4208 +8204 +8F84 +8204 +8204 +8204 +8204 +4208 +4208 +2010 +ENDCHAR +STARTCHAR uni24A2 +ENCODING 9378 +BBX 14 13 1 -2 +BITMAP +2010 +4008 +4048 +8744 +8884 +8884 +8884 +8704 +8404 +4788 +4848 +2850 +0780 +ENDCHAR +STARTCHAR uni24A3 +ENCODING 9379 +BBX 14 12 1 -1 +BITMAP +2810 +4808 +4808 +8B84 +8C44 +8844 +8844 +8844 +8844 +4848 +4848 +2010 +ENDCHAR +STARTCHAR uni24A4 +ENCODING 9380 +BBX 13 12 1 -1 +BITMAP +2220 +4210 +4010 +8608 +8208 +8208 +8208 +8208 +8208 +4210 +4F90 +2020 +ENDCHAR +STARTCHAR uni24A5 +ENCODING 9381 +BBX 13 13 1 -2 +BITMAP +20A0 +4090 +4010 +8188 +8088 +8088 +8088 +8088 +8088 +4090 +4090 +2920 +0600 +ENDCHAR +STARTCHAR uni24A6 +ENCODING 9382 +BBX 14 12 1 -1 +BITMAP +2810 +4808 +4808 +8884 +8904 +8A04 +8C04 +8A04 +8904 +4888 +4848 +2010 +ENDCHAR +STARTCHAR uni24A7 +ENCODING 9383 +BBX 13 12 1 -1 +BITMAP +2620 +4210 +4210 +8208 +8208 +8208 +8208 +8208 +8208 +4210 +4F90 +2020 +ENDCHAR +STARTCHAR uni24A8 +ENCODING 9384 +BBX 15 12 1 -1 +BITMAP +2008 +4004 +4004 +8EC2 +8922 +8922 +8922 +8922 +8922 +4924 +4924 +2008 +ENDCHAR +STARTCHAR uni24A9 +ENCODING 9385 +BBX 14 12 1 -1 +BITMAP +2010 +4008 +4008 +8B84 +8C44 +8844 +8844 +8844 +8844 +4848 +4848 +2010 +ENDCHAR +STARTCHAR uni24AA +ENCODING 9386 +BBX 14 12 1 -1 +BITMAP +2010 +4008 +4008 +8784 +8844 +8844 +8844 +8844 +8844 +4848 +4788 +2010 +ENDCHAR +STARTCHAR uni24AB +ENCODING 9387 +BBX 14 13 1 -2 +BITMAP +2010 +4008 +4008 +8B84 +8C44 +8844 +8844 +8844 +8844 +4C48 +4B88 +2810 +0800 +ENDCHAR +STARTCHAR uni24AC +ENCODING 9388 +BBX 14 13 1 -2 +BITMAP +2010 +4008 +4008 +8744 +88C4 +8844 +8844 +8844 +8844 +48C8 +4748 +2050 +0040 +ENDCHAR +STARTCHAR uni24AD +ENCODING 9389 +BBX 14 12 1 -1 +BITMAP +2010 +4008 +4008 +8B84 +8C44 +8844 +8804 +8804 +8804 +4808 +4808 +2010 +ENDCHAR +STARTCHAR uni24AE +ENCODING 9390 +BBX 14 12 1 -1 +BITMAP +2010 +4008 +4008 +8784 +8844 +8804 +8604 +8184 +8044 +4848 +4788 +2010 +ENDCHAR +STARTCHAR uni24AF +ENCODING 9391 +BBX 14 12 1 -1 +BITMAP +2010 +4208 +4208 +8F84 +8204 +8204 +8204 +8204 +8204 +4208 +4188 +2010 +ENDCHAR +STARTCHAR uni24B0 +ENCODING 9392 +BBX 14 12 1 -1 +BITMAP +2010 +4008 +4008 +8844 +8844 +8844 +8844 +8844 +8844 +48C8 +4748 +2010 +ENDCHAR +STARTCHAR uni24B1 +ENCODING 9393 +BBX 14 12 1 -1 +BITMAP +2010 +4008 +4008 +8844 +8844 +8844 +8484 +8484 +8484 +4308 +4308 +2010 +ENDCHAR +STARTCHAR uni24B2 +ENCODING 9394 +BBX 15 12 1 -1 +BITMAP +2008 +4004 +4004 +8822 +8922 +8922 +8922 +8922 +8922 +4924 +46C4 +2008 +ENDCHAR +STARTCHAR uni24B3 +ENCODING 9395 +BBX 14 12 1 -1 +BITMAP +2010 +4008 +4008 +8844 +8844 +8484 +8304 +8304 +8484 +4848 +4848 +2010 +ENDCHAR +STARTCHAR uni24B4 +ENCODING 9396 +BBX 14 13 1 -2 +BITMAP +2010 +4008 +4008 +8844 +8844 +8844 +8844 +8844 +84C4 +4348 +4048 +2050 +0780 +ENDCHAR +STARTCHAR uni24B5 +ENCODING 9397 +BBX 14 12 1 -1 +BITMAP +2010 +4008 +4008 +8FC4 +8044 +8084 +8104 +8204 +8404 +4808 +4FC8 +2010 +ENDCHAR +STARTCHAR uni24B6 +ENCODING 9398 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4104 +4284 +8282 +8442 +8442 +87C2 +8442 +4444 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24B7 +ENCODING 9399 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4784 +4444 +8442 +8442 +8782 +8442 +8442 +4444 +4784 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24B8 +ENCODING 9400 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4384 +4444 +8442 +8402 +8402 +8402 +8442 +4444 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24B9 +ENCODING 9401 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4704 +4484 +8442 +8442 +8442 +8442 +8442 +4484 +4704 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24BA +ENCODING 9402 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +47C4 +4404 +8402 +8402 +8782 +8402 +8402 +4404 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24BB +ENCODING 9403 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +47C4 +4404 +8402 +8402 +8782 +8402 +8402 +4404 +4404 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24BC +ENCODING 9404 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4384 +4444 +8442 +8402 +85C2 +8442 +8442 +44C4 +4344 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24BD +ENCODING 9405 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4444 +4444 +8442 +8442 +87C2 +8442 +8442 +4444 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24BE +ENCODING 9406 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +47C4 +4104 +8102 +8102 +8102 +8102 +8102 +4104 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24BF +ENCODING 9407 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +43E4 +4084 +8082 +8082 +8082 +8082 +8482 +4484 +4304 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24C0 +ENCODING 9408 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4444 +4444 +8482 +8502 +8602 +8502 +8482 +4444 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24C1 +ENCODING 9409 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4404 +4404 +8402 +8402 +8402 +8402 +8402 +4404 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24C2 +ENCODING 9410 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4444 +4444 +86C2 +86C2 +8542 +8542 +8442 +4444 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24C3 +ENCODING 9411 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4444 +8642 +8642 +8542 +8542 +84C2 +44C4 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24C4 +ENCODING 9412 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4384 +4444 +8442 +8442 +8442 +8442 +8442 +4444 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24C5 +ENCODING 9413 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4784 +4444 +8442 +8442 +8782 +8402 +8402 +4404 +4404 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24C6 +ENCODING 9414 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4384 +4444 +8442 +8442 +8442 +8442 +8542 +46C4 +4384 +2068 +1830 +07C0 +ENDCHAR +STARTCHAR uni24C7 +ENCODING 9415 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4784 +4444 +8442 +8442 +8782 +8502 +8482 +4484 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24C8 +ENCODING 9416 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4384 +4444 +8442 +8402 +8382 +8042 +8442 +4444 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24C9 +ENCODING 9417 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4FE4 +4104 +8102 +8102 +8102 +8102 +8102 +4104 +4104 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24CA +ENCODING 9418 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4444 +4444 +8442 +8442 +8442 +8442 +8442 +4444 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24CB +ENCODING 9419 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4824 +4824 +8442 +8442 +8442 +8282 +8282 +4104 +4104 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24CC +ENCODING 9420 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4444 +4444 +8442 +8542 +8542 +86C2 +86C2 +4444 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24CD +ENCODING 9421 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4444 +4444 +8282 +8282 +8102 +8282 +8282 +4444 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24CE +ENCODING 9422 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4824 +4824 +8442 +8442 +8282 +8102 +8102 +4104 +4104 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24CF +ENCODING 9423 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +47C4 +4044 +8042 +8082 +8102 +8202 +8402 +4404 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24D0 +ENCODING 9424 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4384 +8442 +8042 +83C2 +8442 +84C2 +4344 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24D1 +ENCODING 9425 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2408 +4404 +4404 +8582 +8642 +8442 +8442 +8442 +4644 +4584 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24D2 +ENCODING 9426 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4384 +8442 +8402 +8402 +8402 +8442 +4384 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24D3 +ENCODING 9427 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2048 +4044 +4044 +8342 +84C2 +8442 +8442 +8442 +44C4 +4344 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24D4 +ENCODING 9428 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4384 +8442 +8442 +87C2 +8402 +8442 +4384 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24D5 +ENCODING 9429 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +40C4 +4104 +8102 +8102 +87C2 +8102 +8102 +4104 +4104 +2108 +1830 +07C0 +ENDCHAR +STARTCHAR uni24D6 +ENCODING 9430 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4044 +4344 +8482 +8482 +8302 +8202 +8382 +4444 +4444 +2388 +1830 +07C0 +ENDCHAR +STARTCHAR uni24D7 +ENCODING 9431 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2408 +4404 +4404 +8582 +8642 +8442 +8442 +8442 +4444 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24D8 +ENCODING 9432 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2108 +4104 +4004 +8302 +8102 +8102 +8102 +8102 +4104 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24D9 +ENCODING 9433 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2048 +4044 +4004 +80C2 +8042 +8042 +8042 +8042 +4044 +4484 +2308 +1830 +07C0 +ENDCHAR +STARTCHAR uni24DA +ENCODING 9434 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4404 +4404 +8482 +8502 +8602 +8602 +8502 +4484 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24DB +ENCODING 9435 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4304 +4104 +8102 +8102 +8102 +8102 +8102 +4104 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24DC +ENCODING 9436 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4EC4 +8922 +8922 +8922 +8922 +8922 +4924 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24DD +ENCODING 9437 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4584 +8642 +8442 +8442 +8442 +8442 +4444 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24DE +ENCODING 9438 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4384 +8442 +8442 +8442 +8442 +8442 +4384 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24DF +ENCODING 9439 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4584 +8642 +8442 +8442 +8442 +8642 +4584 +4404 +2408 +1830 +07C0 +ENDCHAR +STARTCHAR uni24E0 +ENCODING 9440 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4344 +84C2 +8442 +8442 +8442 +8442 +44C4 +4344 +2048 +1830 +07C0 +ENDCHAR +STARTCHAR uni24E1 +ENCODING 9441 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4584 +8642 +8442 +8402 +8402 +8402 +4404 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24E2 +ENCODING 9442 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4384 +8442 +8402 +8382 +8042 +8442 +4384 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24E3 +ENCODING 9443 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4104 +4104 +87C2 +8102 +8102 +8102 +8102 +4104 +40C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24E4 +ENCODING 9444 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4444 +8442 +8442 +8442 +8442 +84C2 +4344 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24E5 +ENCODING 9445 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4444 +8442 +8282 +8282 +8282 +8102 +4104 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24E6 +ENCODING 9446 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4824 +8922 +8922 +8922 +8922 +8922 +46C4 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24E7 +ENCODING 9447 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4444 +8442 +8282 +8102 +8282 +8442 +4444 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24E8 +ENCODING 9448 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4444 +8442 +8442 +8442 +82C2 +8142 +4044 +4044 +2388 +1830 +07C0 +ENDCHAR +STARTCHAR uni24E9 +ENCODING 9449 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +47C4 +8042 +8082 +8102 +8202 +8402 +47C4 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24EA +ENCODING 9450 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4104 +4284 +8442 +8442 +8442 +8442 +8442 +4284 +4104 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni24EB +ENCODING 9451 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7FFC +7BBC +F33E +EABE +FBBE +FBBE +FBBE +600C +7FFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni24EC +ENCODING 9452 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7FFC +7B9C +F36E +EBEE +FBDE +FBBE +FB7E +600C +7FFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni24ED +ENCODING 9453 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7FFC +7B9C +F36E +EBEE +FBDE +FBEE +FB6E +609C +7FFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni24EE +ENCODING 9454 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7FFC +7BEC +F3CE +EBAE +FB6E +FB06 +FBEE +60EC +7FFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni24EF +ENCODING 9455 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7FFC +7B0C +F37E +EB7E +FB1E +FBEE +FB6E +609C +7FFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni24F0 +ENCODING 9456 +BBX 13 13 1 0 +BITMAP +0F80 +3FE0 +7FF0 +7710 +E6F8 +D6F8 +F638 +F6D8 +F6D8 +4130 +7FF0 +3FE0 +0F80 +ENDCHAR +STARTCHAR uni24F1 +ENCODING 9457 +BBX 13 13 1 0 +BITMAP +0F80 +3FE0 +7FF0 +7610 +E7D8 +D7D8 +F7B8 +F7B8 +F778 +4170 +7FF0 +3FE0 +0F80 +ENDCHAR +STARTCHAR uni24F2 +ENCODING 9458 +BBX 13 13 1 0 +BITMAP +0F80 +3FE0 +7FF0 +7730 +E6D8 +D6D8 +F738 +F6D8 +F6D8 +4130 +7FF0 +3FE0 +0F80 +ENDCHAR +STARTCHAR uni24F3 +ENCODING 9459 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7FFC +7B9C +F36E +EB6E +FB8E +FBEE +FBEE +609C +7FFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni24F4 +ENCODING 9460 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7FFC +739C +ED6E +FD6E +FB6E +F76E +EF6E +619C +7FFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni24F5 +ENCODING 9461 +BBX 16 15 0 -1 +BITMAP +07E0 +1818 +23C4 +4C32 +500A +9089 +A185 +A085 +A085 +91C9 +500A +4C32 +23C4 +1818 +07E0 +ENDCHAR +STARTCHAR uni24F6 +ENCODING 9462 +BBX 16 15 0 -1 +BITMAP +07E0 +1818 +23C4 +4C32 +500A +9189 +A045 +A085 +A105 +91C9 +500A +4C32 +23C4 +1818 +07E0 +ENDCHAR +STARTCHAR uni24F7 +ENCODING 9463 +BBX 16 15 0 -1 +BITMAP +07E0 +1818 +23C4 +4C32 +500A +9189 +A045 +A185 +A045 +9189 +500A +4C32 +23C4 +1818 +07E0 +ENDCHAR +STARTCHAR uni24F8 +ENCODING 9464 +BBX 16 15 0 -1 +BITMAP +07E0 +1818 +23C4 +4C32 +500A +9289 +A285 +A3C5 +A085 +9089 +500A +4C32 +23C4 +1818 +07E0 +ENDCHAR +STARTCHAR uni24F9 +ENCODING 9465 +BBX 16 15 0 -1 +BITMAP +07E0 +1818 +23C4 +4C32 +500A +91C9 +A105 +A185 +A045 +9189 +500A +4C32 +23C4 +1818 +07E0 +ENDCHAR +STARTCHAR uni24FA +ENCODING 9466 +BBX 16 15 0 -1 +BITMAP +07E0 +1818 +23C4 +4C32 +500A +9189 +A205 +A385 +A245 +9189 +500A +4C32 +23C4 +1818 +07E0 +ENDCHAR +STARTCHAR uni24FB +ENCODING 9467 +BBX 16 15 0 -1 +BITMAP +07E0 +1818 +23C4 +4C32 +500A +91C9 +A045 +A045 +A085 +9089 +500A +4C32 +23C4 +1818 +07E0 +ENDCHAR +STARTCHAR uni24FC +ENCODING 9468 +BBX 16 15 0 -1 +BITMAP +07E0 +1818 +23C4 +4C32 +500A +9189 +A245 +A185 +A245 +9189 +500A +4C32 +23C4 +1818 +07E0 +ENDCHAR +STARTCHAR uni24FD +ENCODING 9469 +BBX 16 15 0 -1 +BITMAP +07E0 +1818 +23C4 +4C32 +500A +9189 +A245 +A1C5 +A045 +9189 +500A +4C32 +23C4 +1818 +07E0 +ENDCHAR +STARTCHAR uni24FE +ENCODING 9470 +BBX 16 15 0 -1 +BITMAP +07E0 +1818 +23C4 +4C32 +500A +9269 +A695 +A295 +A295 +9769 +500A +4C32 +23C4 +1818 +07E0 +ENDCHAR +STARTCHAR uni24FF +ENCODING 9471 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7EFC +7D7C +FBBE +FBBE +FBBE +FBBE +FBBE +7D7C +7EFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni2500 +ENCODING 9472 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 1 0 6 +BITMAP +FF +ENDCHAR +STARTCHAR uni2501 +ENCODING 9473 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 2 0 5 +BITMAP +FF +FF +ENDCHAR +STARTCHAR uni2502 +ENCODING 9474 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 16 4 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2503 +ENCODING 9475 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 16 3 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni2504 +ENCODING 9476 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 1 0 6 +BITMAP +DB +ENDCHAR +STARTCHAR uni2505 +ENCODING 9477 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 2 0 5 +BITMAP +DB +DB +ENDCHAR +STARTCHAR uni2506 +ENCODING 9478 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 16 4 -2 +BITMAP +80 +80 +80 +80 +00 +00 +80 +80 +80 +80 +00 +00 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2507 +ENCODING 9479 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 16 3 -2 +BITMAP +C0 +C0 +C0 +C0 +00 +00 +C0 +C0 +C0 +C0 +00 +00 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni2508 +ENCODING 9480 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 1 0 6 +BITMAP +AA +ENDCHAR +STARTCHAR uni2509 +ENCODING 9481 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 0 5 +BITMAP +AA +AA +ENDCHAR +STARTCHAR uni250A +ENCODING 9482 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 15 4 -1 +BITMAP +80 +80 +80 +00 +80 +80 +80 +00 +80 +80 +80 +00 +80 +80 +80 +ENDCHAR +STARTCHAR uni250B +ENCODING 9483 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 15 3 -1 +BITMAP +C0 +C0 +C0 +00 +C0 +C0 +C0 +00 +C0 +C0 +C0 +00 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni250C +ENCODING 9484 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 4 -2 +BITMAP +F0 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni250D +ENCODING 9485 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 4 -2 +BITMAP +F0 +F0 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni250E +ENCODING 9486 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 3 -2 +BITMAP +F8 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni250F +ENCODING 9487 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 3 -2 +BITMAP +F8 +F8 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni2510 +ENCODING 9488 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 0 -2 +BITMAP +F8 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2511 +ENCODING 9489 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 0 -2 +BITMAP +F8 +F8 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2512 +ENCODING 9490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 0 -2 +BITMAP +F8 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2513 +ENCODING 9491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 0 -2 +BITMAP +F8 +F8 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2514 +ENCODING 9492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 4 6 +BITMAP +80 +80 +80 +80 +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uni2515 +ENCODING 9493 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 4 5 +BITMAP +80 +80 +80 +80 +80 +80 +80 +F0 +F0 +ENDCHAR +STARTCHAR uni2516 +ENCODING 9494 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 3 6 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +F8 +ENDCHAR +STARTCHAR uni2517 +ENCODING 9495 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 3 5 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +F8 +F8 +ENDCHAR +STARTCHAR uni2518 +ENCODING 9496 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 0 6 +BITMAP +08 +08 +08 +08 +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uni2519 +ENCODING 9497 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 0 5 +BITMAP +08 +08 +08 +08 +08 +08 +08 +F8 +F8 +ENDCHAR +STARTCHAR uni251A +ENCODING 9498 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 0 6 +BITMAP +18 +18 +18 +18 +18 +18 +18 +F8 +ENDCHAR +STARTCHAR uni251B +ENCODING 9499 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 0 5 +BITMAP +18 +18 +18 +18 +18 +18 +18 +F8 +F8 +ENDCHAR +STARTCHAR uni251C +ENCODING 9500 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 16 4 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +F0 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni251D +ENCODING 9501 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 16 4 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +F0 +F0 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni251E +ENCODING 9502 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 3 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +F8 +40 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni251F +ENCODING 9503 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 3 -2 +BITMAP +40 +40 +40 +40 +40 +40 +40 +F8 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni2520 +ENCODING 9504 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 3 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +F8 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni2521 +ENCODING 9505 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 3 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +F8 +F8 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni2522 +ENCODING 9506 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 3 -2 +BITMAP +40 +40 +40 +40 +40 +40 +40 +F8 +F8 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni2523 +ENCODING 9507 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 3 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +F8 +F8 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni2524 +ENCODING 9508 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +F8 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2525 +ENCODING 9509 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +F8 +F8 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2526 +ENCODING 9510 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +F8 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2527 +ENCODING 9511 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +F8 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2528 +ENCODING 9512 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +F8 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2529 +ENCODING 9513 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +F8 +F8 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni252A +ENCODING 9514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +F8 +F8 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni252B +ENCODING 9515 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +F8 +F8 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni252C +ENCODING 9516 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -2 +BITMAP +FF +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni252D +ENCODING 9517 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -2 +BITMAP +FF +F8 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni252E +ENCODING 9518 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -2 +BITMAP +FF +0F +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni252F +ENCODING 9519 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -2 +BITMAP +FF +FF +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2530 +ENCODING 9520 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -2 +BITMAP +FF +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2531 +ENCODING 9521 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -2 +BITMAP +FF +F8 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2532 +ENCODING 9522 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -2 +BITMAP +FF +1F +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2533 +ENCODING 9523 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -2 +BITMAP +FF +FF +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2534 +ENCODING 9524 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 6 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FF +ENDCHAR +STARTCHAR uni2535 +ENCODING 9525 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 5 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FF +F8 +ENDCHAR +STARTCHAR uni2536 +ENCODING 9526 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 5 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FF +0F +ENDCHAR +STARTCHAR uni2537 +ENCODING 9527 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 5 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FF +FF +ENDCHAR +STARTCHAR uni2538 +ENCODING 9528 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 6 +BITMAP +18 +18 +18 +18 +18 +18 +18 +FF +ENDCHAR +STARTCHAR uni2539 +ENCODING 9529 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 5 +BITMAP +18 +18 +18 +18 +18 +18 +18 +FF +F8 +ENDCHAR +STARTCHAR uni253A +ENCODING 9530 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 5 +BITMAP +18 +18 +18 +18 +18 +18 +18 +FF +1F +ENDCHAR +STARTCHAR uni253B +ENCODING 9531 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 5 +BITMAP +18 +18 +18 +18 +18 +18 +18 +FF +FF +ENDCHAR +STARTCHAR uni253C +ENCODING 9532 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FF +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni253D +ENCODING 9533 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FF +F8 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni253E +ENCODING 9534 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FF +0F +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni253F +ENCODING 9535 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FF +FF +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2540 +ENCODING 9536 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +FF +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2541 +ENCODING 9537 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FF +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2542 +ENCODING 9538 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +FF +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2543 +ENCODING 9539 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +FF +F8 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2544 +ENCODING 9540 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +FF +1F +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2545 +ENCODING 9541 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FF +F8 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2546 +ENCODING 9542 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FF +1F +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2547 +ENCODING 9543 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +FF +FF +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2548 +ENCODING 9544 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FF +FF +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni2549 +ENCODING 9545 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +FF +F8 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni254A +ENCODING 9546 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +FF +1F +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni254B +ENCODING 9547 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +18 +18 +18 +18 +18 +18 +18 +FF +FF +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni254C +ENCODING 9548 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 1 0 6 +BITMAP +EE +ENDCHAR +STARTCHAR uni254D +ENCODING 9549 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 0 5 +BITMAP +EE +EE +ENDCHAR +STARTCHAR uni254E +ENCODING 9550 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 14 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +00 +00 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni254F +ENCODING 9551 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 14 3 0 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +00 +00 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni2550 +ENCODING 9552 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 5 +BITMAP +FF +00 +FF +ENDCHAR +STARTCHAR uni2551 +ENCODING 9553 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 16 3 -2 +BITMAP +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni2552 +ENCODING 9554 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 4 -2 +BITMAP +F0 +80 +F0 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2553 +ENCODING 9555 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 3 -2 +BITMAP +F8 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni2554 +ENCODING 9556 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 3 -2 +BITMAP +F8 +80 +B8 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni2555 +ENCODING 9557 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 0 -2 +BITMAP +F8 +08 +F8 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2556 +ENCODING 9558 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 -2 +BITMAP +FC +14 +14 +14 +14 +14 +14 +14 +14 +ENDCHAR +STARTCHAR uni2557 +ENCODING 9559 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 0 -2 +BITMAP +FC +04 +F4 +14 +14 +14 +14 +14 +14 +14 +ENDCHAR +STARTCHAR uni2558 +ENCODING 9560 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 4 5 +BITMAP +80 +80 +80 +80 +80 +80 +F0 +80 +F0 +ENDCHAR +STARTCHAR uni2559 +ENCODING 9561 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 3 6 +BITMAP +A0 +A0 +A0 +A0 +A0 +A0 +A0 +F8 +ENDCHAR +STARTCHAR uni255A +ENCODING 9562 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 3 5 +BITMAP +A0 +A0 +A0 +A0 +A0 +A0 +B8 +80 +F8 +ENDCHAR +STARTCHAR uni255B +ENCODING 9563 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 0 5 +BITMAP +08 +08 +08 +08 +08 +08 +F8 +08 +F8 +ENDCHAR +STARTCHAR uni255C +ENCODING 9564 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 6 +BITMAP +14 +14 +14 +14 +14 +14 +14 +FC +ENDCHAR +STARTCHAR uni255D +ENCODING 9565 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 5 +BITMAP +14 +14 +14 +14 +14 +14 +F4 +04 +FC +ENDCHAR +STARTCHAR uni255E +ENCODING 9566 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 16 4 -2 +BITMAP +80 +80 +80 +80 +80 +80 +F0 +80 +F0 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni255F +ENCODING 9567 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 3 -2 +BITMAP +A0 +A0 +A0 +A0 +A0 +A0 +A0 +B8 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni2560 +ENCODING 9568 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 3 -2 +BITMAP +A0 +A0 +A0 +A0 +A0 +A0 +B8 +80 +B8 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni2561 +ENCODING 9569 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +F8 +08 +F8 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2562 +ENCODING 9570 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 16 0 -2 +BITMAP +14 +14 +14 +14 +14 +14 +14 +F4 +14 +14 +14 +14 +14 +14 +14 +14 +ENDCHAR +STARTCHAR uni2563 +ENCODING 9571 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 16 0 -2 +BITMAP +14 +14 +14 +14 +14 +14 +F4 +04 +F4 +14 +14 +14 +14 +14 +14 +14 +ENDCHAR +STARTCHAR uni2564 +ENCODING 9572 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +FF +00 +FF +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2565 +ENCODING 9573 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -2 +BITMAP +FF +14 +14 +14 +14 +14 +14 +14 +14 +ENDCHAR +STARTCHAR uni2566 +ENCODING 9574 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +FF +00 +F7 +14 +14 +14 +14 +14 +14 +14 +ENDCHAR +STARTCHAR uni2567 +ENCODING 9575 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 5 +BITMAP +08 +08 +08 +08 +08 +08 +FF +00 +FF +ENDCHAR +STARTCHAR uni2568 +ENCODING 9576 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 6 +BITMAP +14 +14 +14 +14 +14 +14 +14 +FF +ENDCHAR +STARTCHAR uni2569 +ENCODING 9577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 5 +BITMAP +14 +14 +14 +14 +14 +14 +F7 +00 +FF +ENDCHAR +STARTCHAR uni256A +ENCODING 9578 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +08 +08 +08 +08 +08 +08 +FF +08 +FF +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni256B +ENCODING 9579 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +14 +14 +14 +14 +14 +14 +14 +FF +14 +14 +14 +14 +14 +14 +14 +14 +ENDCHAR +STARTCHAR uni256C +ENCODING 9580 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +14 +14 +14 +14 +14 +14 +F7 +00 +F7 +14 +14 +14 +14 +14 +14 +14 +ENDCHAR +STARTCHAR uni256D +ENCODING 9581 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 4 -2 +BITMAP +30 +40 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni256E +ENCODING 9582 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 0 -2 +BITMAP +E0 +10 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni256F +ENCODING 9583 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 0 6 +BITMAP +08 +08 +08 +08 +08 +08 +10 +E0 +ENDCHAR +STARTCHAR uni2570 +ENCODING 9584 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 4 6 +BITMAP +80 +80 +80 +80 +80 +80 +40 +30 +ENDCHAR +STARTCHAR uni2571 +ENCODING 9585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +01 +01 +02 +02 +04 +04 +08 +08 +10 +10 +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni2572 +ENCODING 9586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +80 +80 +40 +40 +20 +20 +10 +10 +08 +08 +04 +04 +02 +02 +01 +01 +ENDCHAR +STARTCHAR uni2573 +ENCODING 9587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +81 +81 +42 +42 +24 +24 +18 +18 +18 +18 +24 +24 +42 +42 +81 +81 +ENDCHAR +STARTCHAR uni2574 +ENCODING 9588 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 1 0 6 +BITMAP +F0 +ENDCHAR +STARTCHAR uni2575 +ENCODING 9589 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 8 4 6 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2576 +ENCODING 9590 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 1 4 6 +BITMAP +F0 +ENDCHAR +STARTCHAR uni2577 +ENCODING 9591 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 8 4 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2578 +ENCODING 9592 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 0 5 +BITMAP +F0 +F0 +ENDCHAR +STARTCHAR uni2579 +ENCODING 9593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 8 3 6 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni257A +ENCODING 9594 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 4 5 +BITMAP +F0 +F0 +ENDCHAR +STARTCHAR uni257B +ENCODING 9595 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 8 3 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni257C +ENCODING 9596 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 2 0 5 +BITMAP +FF +0F +ENDCHAR +STARTCHAR uni257D +ENCODING 9597 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 16 3 -2 +BITMAP +40 +40 +40 +40 +40 +40 +40 +40 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni257E +ENCODING 9598 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 2 0 5 +BITMAP +FF +F0 +ENDCHAR +STARTCHAR uni257F +ENCODING 9599 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 16 3 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +40 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni2580 +ENCODING 9600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 6 +BITMAP +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni2581 +ENCODING 9601 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 2 0 -2 +BITMAP +FF +FF +ENDCHAR +STARTCHAR uni2582 +ENCODING 9602 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 -2 +BITMAP +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni2583 +ENCODING 9603 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni2584 +ENCODING 9604 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni2585 +ENCODING 9605 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni2586 +ENCODING 9606 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni2587 +ENCODING 9607 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni2588 +ENCODING 9608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni2589 +ENCODING 9609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +ENDCHAR +STARTCHAR uni258A +ENCODING 9610 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 16 0 -2 +BITMAP +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR uni258B +ENCODING 9611 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 16 0 -2 +BITMAP +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +F8 +ENDCHAR +STARTCHAR uni258C +ENCODING 9612 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 16 0 -2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni258D +ENCODING 9613 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 16 0 -2 +BITMAP +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni258E +ENCODING 9614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 16 0 -2 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni258F +ENCODING 9615 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 16 0 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2590 +ENCODING 9616 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 16 4 -2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni2591 +ENCODING 9617 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +88 +22 +88 +22 +88 +22 +88 +22 +88 +22 +88 +22 +88 +22 +88 +22 +ENDCHAR +STARTCHAR uni2592 +ENCODING 9618 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +AA +55 +AA +55 +AA +55 +AA +55 +AA +55 +AA +55 +AA +55 +AA +55 +ENDCHAR +STARTCHAR uni2593 +ENCODING 9619 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +EE +BB +EE +BB +EE +BB +EE +BB +EE +BB +EE +BB +EE +BB +EE +BB +ENDCHAR +STARTCHAR uni2594 +ENCODING 9620 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 2 0 12 +BITMAP +FF +FF +ENDCHAR +STARTCHAR uni2595 +ENCODING 9621 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 16 7 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2596 +ENCODING 9622 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 0 -2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni2597 +ENCODING 9623 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 4 -2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni2598 +ENCODING 9624 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 0 6 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni2599 +ENCODING 9625 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni259A +ENCODING 9626 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +0F +0F +0F +0F +0F +0F +0F +0F +ENDCHAR +STARTCHAR uni259B +ENCODING 9627 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +FF +FF +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni259C +ENCODING 9628 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +FF +FF +0F +0F +0F +0F +0F +0F +0F +0F +ENDCHAR +STARTCHAR uni259D +ENCODING 9629 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 4 6 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni259E +ENCODING 9630 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +0F +0F +0F +0F +0F +0F +0F +0F +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni259F +ENCODING 9631 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +0F +0F +0F +0F +0F +0F +0F +0F +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni25A0 +ENCODING 9632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +FE +FE +FE +FE +FE +FE +FE +ENDCHAR +STARTCHAR uni25A1 +ENCODING 9633 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +82 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni25A2 +ENCODING 9634 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +7C +82 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni25A3 +ENCODING 9635 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +82 +BA +BA +BA +82 +FE +ENDCHAR +STARTCHAR uni25A4 +ENCODING 9636 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +82 +FE +82 +FE +82 +FE +ENDCHAR +STARTCHAR uni25A5 +ENCODING 9637 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +AA +AA +AA +AA +AA +FE +ENDCHAR +STARTCHAR uni25A6 +ENCODING 9638 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +AA +FE +AA +FE +AA +FE +ENDCHAR +STARTCHAR uni25A7 +ENCODING 9639 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +A6 +92 +CA +A6 +92 +FE +ENDCHAR +STARTCHAR uni25A8 +ENCODING 9640 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +CA +92 +A6 +CA +92 +FE +ENDCHAR +STARTCHAR uni25A9 +ENCODING 9641 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +FE +AA +D6 +AA +D6 +AA +FE +ENDCHAR +STARTCHAR uni25AA +ENCODING 9642 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 2 +BITMAP +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni25AB +ENCODING 9643 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 4 +BITMAP +F0 +90 +90 +F0 +ENDCHAR +STARTCHAR uni25AC +ENCODING 9644 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 4 +BITMAP +FE +FE +FE +FE +ENDCHAR +STARTCHAR uni25AD +ENCODING 9645 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 4 +BITMAP +FE +82 +82 +FE +ENDCHAR +STARTCHAR uni25AE +ENCODING 9646 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 2 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni25AF +ENCODING 9647 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 2 +BITMAP +F0 +90 +90 +90 +90 +90 +F0 +ENDCHAR +STARTCHAR uni25B0 +ENCODING 9648 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 4 +BITMAP +3F +7E +FC +ENDCHAR +STARTCHAR uni25B1 +ENCODING 9649 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 4 +BITMAP +3F +42 +FC +ENDCHAR +STARTCHAR uni25B2 +ENCODING 9650 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +30 +30 +78 +78 +FC +FC +ENDCHAR +STARTCHAR uni25B3 +ENCODING 9651 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +30 +30 +48 +48 +84 +FC +ENDCHAR +STARTCHAR uni25B4 +ENCODING 9652 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 3 +BITMAP +30 +78 +FC +ENDCHAR +STARTCHAR uni25B5 +ENCODING 9653 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 3 +BITMAP +30 +48 +FC +ENDCHAR +STARTCHAR uni25B6 +ENCODING 9654 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +C0 +F0 +FC +FC +F0 +C0 +ENDCHAR +STARTCHAR uni25B7 +ENCODING 9655 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +C0 +B0 +8C +8C +B0 +C0 +ENDCHAR +STARTCHAR uni25B8 +ENCODING 9656 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 3 +BITMAP +C0 +F0 +F0 +C0 +ENDCHAR +STARTCHAR uni25B9 +ENCODING 9657 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 3 +BITMAP +C0 +B0 +B0 +C0 +ENDCHAR +STARTCHAR uni25BA +ENCODING 9658 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +C0 +F0 +FC +F0 +C0 +ENDCHAR +STARTCHAR uni25BB +ENCODING 9659 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +C0 +B0 +8C +B0 +C0 +ENDCHAR +STARTCHAR uni25BC +ENCODING 9660 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +FC +FC +78 +78 +30 +30 +ENDCHAR +STARTCHAR uni25BD +ENCODING 9661 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +FC +84 +48 +48 +30 +30 +ENDCHAR +STARTCHAR uni25BE +ENCODING 9662 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 3 +BITMAP +FC +78 +30 +ENDCHAR +STARTCHAR uni25BF +ENCODING 9663 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 3 +BITMAP +FC +48 +30 +ENDCHAR +STARTCHAR uni25C0 +ENCODING 9664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +0C +3C +FC +FC +3C +0C +ENDCHAR +STARTCHAR uni25C1 +ENCODING 9665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +0C +34 +C4 +C4 +34 +0C +ENDCHAR +STARTCHAR uni25C2 +ENCODING 9666 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 3 +BITMAP +30 +F0 +F0 +30 +ENDCHAR +STARTCHAR uni25C3 +ENCODING 9667 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 3 +BITMAP +30 +D0 +D0 +30 +ENDCHAR +STARTCHAR uni25C4 +ENCODING 9668 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +0C +3C +FC +3C +0C +ENDCHAR +STARTCHAR uni25C5 +ENCODING 9669 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +0C +34 +C4 +34 +0C +ENDCHAR +STARTCHAR uni25C6 +ENCODING 9670 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +10 +38 +7C +FE +7C +38 +10 +ENDCHAR +STARTCHAR uni25C7 +ENCODING 9671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +10 +28 +44 +82 +44 +28 +10 +ENDCHAR +STARTCHAR uni25C8 +ENCODING 9672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +10 +28 +54 +BA +54 +28 +10 +ENDCHAR +STARTCHAR uni25C9 +ENCODING 9673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +44 +B2 +BA +9A +44 +38 +ENDCHAR +STARTCHAR uni25CA +ENCODING 9674 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +30 +30 +48 +48 +84 +84 +48 +48 +30 +30 +ENDCHAR +STARTCHAR uni25CB +ENCODING 9675 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni25CC +ENCODING 9676 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +28 +00 +82 +00 +82 +00 +28 +ENDCHAR +STARTCHAR uni25CD +ENCODING 9677 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +6C +AA +AA +AA +6C +38 +ENDCHAR +STARTCHAR uni25CE +ENCODING 9678 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +44 +92 +AA +92 +44 +38 +ENDCHAR +STARTCHAR uni25CF +ENCODING 9679 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +7C +FE +FE +FE +7C +38 +ENDCHAR +STARTCHAR uni25D0 +ENCODING 9680 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +64 +E2 +E2 +E2 +64 +38 +ENDCHAR +STARTCHAR uni25D1 +ENCODING 9681 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +4C +8E +8E +8E +4C +38 +ENDCHAR +STARTCHAR uni25D2 +ENCODING 9682 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +44 +82 +82 +FE +7C +38 +ENDCHAR +STARTCHAR uni25D3 +ENCODING 9683 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +7C +FE +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni25D4 +ENCODING 9684 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +5C +9E +9E +82 +44 +38 +ENDCHAR +STARTCHAR uni25D5 +ENCODING 9685 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +4C +8E +8E +FE +7C +38 +ENDCHAR +STARTCHAR uni25D6 +ENCODING 9686 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 1 2 +BITMAP +30 +70 +F0 +F0 +F0 +70 +30 +ENDCHAR +STARTCHAR uni25D7 +ENCODING 9687 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 4 2 +BITMAP +C0 +E0 +F0 +F0 +F0 +E0 +C0 +ENDCHAR +STARTCHAR uni25D8 +ENCODING 9688 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +FF +FF +FF +FF +FF +FF +E7 +C3 +C3 +E7 +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni25D9 +ENCODING 9689 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +FF +FF +FF +FF +FF +E7 +DB +BD +BD +DB +E7 +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni25DA +ENCODING 9690 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 6 +BITMAP +FF +FF +FF +FF +FF +E7 +DB +BD +ENDCHAR +STARTCHAR uni25DB +ENCODING 9691 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +BD +DB +E7 +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni25DC +ENCODING 9692 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 5 +BITMAP +30 +40 +80 +80 +ENDCHAR +STARTCHAR uni25DD +ENCODING 9693 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 4 5 +BITMAP +C0 +20 +10 +10 +ENDCHAR +STARTCHAR uni25DE +ENCODING 9694 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 4 2 +BITMAP +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni25DF +ENCODING 9695 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 2 +BITMAP +80 +80 +40 +30 +ENDCHAR +STARTCHAR uni25E0 +ENCODING 9696 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 5 +BITMAP +38 +44 +82 +82 +ENDCHAR +STARTCHAR uni25E1 +ENCODING 9697 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 2 +BITMAP +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni25E2 +ENCODING 9698 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +01 +01 +01 +03 +03 +07 +07 +0F +0F +1F +1F +3F +3F +7F +7F +FF +ENDCHAR +STARTCHAR uni25E3 +ENCODING 9699 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +80 +80 +80 +C0 +C0 +E0 +E0 +F0 +F0 +F8 +F8 +FC +FC +FE +FE +FF +ENDCHAR +STARTCHAR uni25E4 +ENCODING 9700 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +FF +FE +FE +FC +FC +F8 +F8 +F0 +F0 +E0 +E0 +C0 +C0 +80 +80 +80 +ENDCHAR +STARTCHAR uni25E5 +ENCODING 9701 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +FF +7F +7F +3F +3F +1F +1F +0F +0F +07 +07 +03 +03 +01 +01 +01 +ENDCHAR +STARTCHAR uni25E6 +ENCODING 9702 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 2 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni25E7 +ENCODING 9703 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +FC +E4 +E4 +E4 +E4 +FC +ENDCHAR +STARTCHAR uni25E8 +ENCODING 9704 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +FC +9C +9C +9C +9C +FC +ENDCHAR +STARTCHAR uni25E9 +ENCODING 9705 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +FC +F4 +E4 +C4 +84 +FC +ENDCHAR +STARTCHAR uni25EA +ENCODING 9706 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +FC +84 +8C +9C +BC +FC +ENDCHAR +STARTCHAR uni25EB +ENCODING 9707 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 3 +BITMAP +FE +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni25EC +ENCODING 9708 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +10 +28 +28 +44 +54 +82 +FE +ENDCHAR +STARTCHAR uni25ED +ENCODING 9709 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +30 +30 +68 +68 +E4 +FC +ENDCHAR +STARTCHAR uni25EE +ENCODING 9710 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 2 +BITMAP +30 +30 +58 +58 +9C +9C +FC +ENDCHAR +STARTCHAR uni25EF +ENCODING 9711 +BBX 13 13 2 -1 +BITMAP +0700 +18C0 +2020 +4010 +4010 +8008 +8008 +8008 +4010 +4010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni25F0 +ENCODING 9712 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +FC +A4 +E4 +84 +84 +FC +ENDCHAR +STARTCHAR uni25F1 +ENCODING 9713 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +FC +84 +84 +E4 +A4 +FC +ENDCHAR +STARTCHAR uni25F2 +ENCODING 9714 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +FC +84 +84 +9C +94 +FC +ENDCHAR +STARTCHAR uni25F3 +ENCODING 9715 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +FC +94 +9C +84 +84 +FC +ENDCHAR +STARTCHAR uni25F4 +ENCODING 9716 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +3C +52 +91 +F1 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni25F5 +ENCODING 9717 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +3C +42 +81 +81 +F1 +91 +52 +3C +ENDCHAR +STARTCHAR uni25F6 +ENCODING 9718 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +3C +42 +81 +81 +8F +89 +4A +3C +ENDCHAR +STARTCHAR uni25F7 +ENCODING 9719 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +3C +4A +89 +8F +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni25F8 +ENCODING 9720 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +FF +81 +81 +82 +82 +84 +84 +88 +88 +90 +90 +A0 +A0 +C0 +C0 +80 +ENDCHAR +STARTCHAR uni25F9 +ENCODING 9721 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +FF +81 +81 +41 +41 +21 +21 +11 +11 +09 +09 +05 +05 +03 +03 +01 +ENDCHAR +STARTCHAR uni25FA +ENCODING 9722 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +80 +C0 +C0 +A0 +A0 +90 +90 +88 +88 +84 +84 +82 +82 +81 +81 +FF +ENDCHAR +STARTCHAR uni25FB +ENCODING 9723 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 -1 +BITMAP +FC +84 +84 +84 +84 +FC +ENDCHAR +STARTCHAR uni25FC +ENCODING 9724 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR uni25FD +ENCODING 9725 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 0 +BITMAP +F0 +90 +90 +F0 +ENDCHAR +STARTCHAR uni25FE +ENCODING 9726 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 1 +BITMAP +F8 +F8 +F8 +F8 +F8 +ENDCHAR +STARTCHAR uni25FF +ENCODING 9727 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +01 +03 +03 +05 +05 +09 +09 +11 +11 +21 +21 +41 +41 +81 +81 +FF +ENDCHAR +STARTCHAR uni2600 +ENCODING 9728 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +10 +92 +44 +00 +38 +7C +7C +38 +00 +44 +92 +10 +ENDCHAR +STARTCHAR uni2601 +ENCODING 9729 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 6 +BITMAP +20 +76 +FF +7E +ENDCHAR +STARTCHAR uni2602 +ENCODING 9730 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 2 +BITMAP +38 +7C +FE +10 +10 +10 +10 +20 +ENDCHAR +STARTCHAR uni2603 +ENCODING 9731 +BBX 16 16 0 -2 +BITMAP +8BC8 +03C0 +2FF1 +0424 +8A50 +2812 +0A50 +4994 +0421 +47E0 +0810 +1088 +781E +1088 +0810 +07E0 +ENDCHAR +STARTCHAR uni2604 +ENCODING 9732 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +44 +44 +48 +48 +50 +52 +04 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni2605 +ENCODING 9733 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 3 +BITMAP +10 +10 +FE +38 +6C +44 +ENDCHAR +STARTCHAR uni2606 +ENCODING 9734 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 3 +BITMAP +10 +10 +EE +44 +54 +6C +44 +ENDCHAR +STARTCHAR uni2607 +ENCODING 9735 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +08 +10 +20 +40 +80 +40 +28 +18 +38 +ENDCHAR +STARTCHAR uni2608 +ENCODING 9736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +84 +88 +90 +A0 +94 +8C +9C +ENDCHAR +STARTCHAR uni2609 +ENCODING 9737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +3C +42 +81 +99 +99 +81 +42 +3C +ENDCHAR +STARTCHAR uni260A +ENCODING 9738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 2 +BITMAP +18 +24 +24 +66 +A5 +42 +ENDCHAR +STARTCHAR uni260B +ENCODING 9739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 2 +BITMAP +42 +A5 +66 +24 +24 +18 +ENDCHAR +STARTCHAR uni260C +ENCODING 9740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 2 +BITMAP +08 +10 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni260D +ENCODING 9741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +0C +12 +12 +0C +10 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni260E +ENCODING 9742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 1 +BITMAP +7C +C6 +00 +54 +C6 +FE +ENDCHAR +STARTCHAR uni260F +ENCODING 9743 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +7C +82 +BA +7C +92 +82 +FE +ENDCHAR +STARTCHAR uni2610 +ENCODING 9744 +BBX 11 12 2 0 +BITMAP +FFE0 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +FFE0 +ENDCHAR +STARTCHAR uni2611 +ENCODING 9745 +BBX 11 12 2 0 +BITMAP +FFE0 +8020 +8020 +80E0 +A1A0 +A320 +A620 +AC20 +B820 +B020 +8020 +FFE0 +ENDCHAR +STARTCHAR uni2612 +ENCODING 9746 +BBX 12 12 2 0 +BITMAP +FFF0 +8010 +8010 +B0D0 +9990 +8F10 +8610 +8F10 +9990 +B0D0 +8010 +FFF0 +ENDCHAR +STARTCHAR uni2613 +ENCODING 9747 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +88 +88 +50 +50 +20 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni2614 +ENCODING 9748 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 2 +BITMAP +0A +A0 +08 +82 +38 +7C +FE +10 +10 +10 +10 +20 +ENDCHAR +STARTCHAR uni2615 +ENCODING 9749 +BBX 12 13 2 0 +BITMAP +2480 +4900 +4900 +2480 +2480 +4900 +0000 +7F20 +FFD0 +BF50 +8050 +80E0 +7F00 +ENDCHAR +STARTCHAR uni2616 +ENCODING 9750 +BBX 11 13 2 0 +BITMAP +0400 +0A00 +1100 +2080 +4040 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +FFE0 +ENDCHAR +STARTCHAR uni2617 +ENCODING 9751 +BBX 11 13 2 0 +BITMAP +0400 +0E00 +1F00 +3F80 +7FC0 +FFE0 +FFE0 +FFE0 +FFE0 +FFE0 +FFE0 +FFE0 +FFE0 +ENDCHAR +STARTCHAR uni2618 +ENCODING 9752 +BBX 13 13 1 -1 +BITMAP +0500 +0F80 +0F80 +6730 +F278 +7FF0 +F278 +6230 +0400 +0400 +0400 +0800 +1000 +ENDCHAR +STARTCHAR uni2619 +ENCODING 9753 +BBX 13 12 1 0 +BITMAP +0008 +0390 +47D0 +8FD0 +9FD0 +FFB0 +7FB8 +1FC8 +0FC8 +07C8 +0388 +0010 +ENDCHAR +STARTCHAR uni261A +ENCODING 9754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 2 +BITMAP +FC +3E +3E +1C +ENDCHAR +STARTCHAR uni261B +ENCODING 9755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 2 +BITMAP +7E +F8 +F8 +70 +ENDCHAR +STARTCHAR uni261C +ENCODING 9756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 2 +BITMAP +FC +22 +32 +1C +ENDCHAR +STARTCHAR uni261D +ENCODING 9757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 2 +BITMAP +10 +10 +70 +D0 +90 +90 +60 +ENDCHAR +STARTCHAR uni261E +ENCODING 9758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 2 +BITMAP +7E +88 +98 +70 +ENDCHAR +STARTCHAR uni261F +ENCODING 9759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +60 +90 +90 +D0 +70 +10 +10 +ENDCHAR +STARTCHAR uni2620 +ENCODING 9760 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +E7 +A5 +7E +81 +A5 +A5 +81 +5A +5A +42 +BD +E7 +ENDCHAR +STARTCHAR uni2621 +ENCODING 9761 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +E0 +10 +10 +20 +20 +40 +40 +80 +80 +70 +ENDCHAR +STARTCHAR uni2622 +ENCODING 9762 +BBX 16 16 0 -2 +BITMAP +07E0 +1818 +2424 +5C3A +5C3A +BE7D +BE7D +BE7D +8181 +8181 +83C1 +43C2 +47E2 +23C4 +1818 +07E0 +ENDCHAR +STARTCHAR uni2623 +ENCODING 9763 +BBX 15 13 0 -1 +BITMAP +0440 +0820 +1010 +1010 +1390 +0C60 +3EF8 +4444 +8542 +8382 +0280 +0440 +1830 +ENDCHAR +STARTCHAR uni2624 +ENCODING 9764 +BBX 13 15 1 -2 +BITMAP +0600 +0200 +FFF8 +4710 +3FE0 +0200 +1AC0 +2220 +1FC0 +1240 +0F80 +0A80 +0700 +0A80 +0200 +ENDCHAR +STARTCHAR uni2625 +ENCODING 9765 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +70 +88 +50 +20 +F8 +20 +20 +20 +ENDCHAR +STARTCHAR uni2626 +ENCODING 9766 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +38 +10 +FE +10 +10 +70 +1C +10 +ENDCHAR +STARTCHAR uni2627 +ENCODING 9767 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +24 +24 +38 +20 +A8 +70 +20 +70 +A8 +ENDCHAR +STARTCHAR uni2628 +ENCODING 9768 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +38 +10 +FE +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2629 +ENCODING 9769 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +38 +10 +92 +FE +92 +10 +38 +ENDCHAR +STARTCHAR uni262A +ENCODING 9770 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +1E +21 +40 +C2 +C7 +C2 +40 +21 +1E +ENDCHAR +STARTCHAR uni262B +ENCODING 9771 +BBX 11 11 2 0 +BITMAP +1500 +1B00 +0000 +5540 +A4A0 +A4A0 +A4A0 +9520 +4E40 +1F00 +0400 +ENDCHAR +STARTCHAR uni262C +ENCODING 9772 +BBX 11 12 3 -1 +BITMAP +0400 +1500 +2480 +4E40 +D560 +D560 +CE60 +E4E0 +DF60 +8E20 +1500 +0400 +ENDCHAR +STARTCHAR uni262D +ENCODING 9773 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +0C +02 +39 +79 +0D +3E +63 +C1 +ENDCHAR +STARTCHAR uni262E +ENCODING 9774 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +92 +92 +92 +BA +D6 +92 +7C +ENDCHAR +STARTCHAR uni262F +ENCODING 9775 +BBX 16 16 0 -2 +BITMAP +07E0 +1818 +2004 +4002 +4002 +9C31 +BE31 +FF03 +E783 +E7C7 +FFFF +7FFE +7FFE +3FFC +1FF8 +07E0 +ENDCHAR +STARTCHAR uni2630 +ENCODING 9776 +BBX 13 10 1 0 +BITMAP +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni2631 +ENCODING 9777 +BBX 13 10 1 0 +BITMAP +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni2632 +ENCODING 9778 +BBX 13 10 1 0 +BITMAP +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni2633 +ENCODING 9779 +BBX 13 10 1 0 +BITMAP +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni2634 +ENCODING 9780 +BBX 13 10 1 0 +BITMAP +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni2635 +ENCODING 9781 +BBX 13 10 1 0 +BITMAP +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni2636 +ENCODING 9782 +BBX 13 10 1 0 +BITMAP +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni2637 +ENCODING 9783 +BBX 13 10 1 0 +BITMAP +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni2638 +ENCODING 9784 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +92 +7C +7C +EE +7C +7C +92 +ENDCHAR +STARTCHAR uni2639 +ENCODING 9785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 1 +BITMAP +3C +42 +81 +A5 +81 +99 +A5 +81 +42 +3C +ENDCHAR +STARTCHAR uni263A +ENCODING 9786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +3C +42 +81 +A5 +81 +A5 +99 +42 +3C +ENDCHAR +STARTCHAR uni263B +ENCODING 9787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +3C +7E +FF +DB +FF +DB +E7 +7E +3C +ENDCHAR +STARTCHAR uni263C +ENCODING 9788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +92 +54 +38 +EE +38 +54 +92 +ENDCHAR +STARTCHAR uni263D +ENCODING 9789 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 2 0 +BITMAP +E0 +30 +18 +14 +14 +14 +14 +18 +30 +E0 +ENDCHAR +STARTCHAR uni263E +ENCODING 9790 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +1C +30 +60 +A0 +A0 +A0 +A0 +60 +30 +1C +ENDCHAR +STARTCHAR uni263F +ENCODING 9791 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +88 +70 +88 +88 +88 +70 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni2640 +ENCODING 9792 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +70 +88 +88 +88 +70 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni2641 +ENCODING 9793 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +20 +20 +F8 +20 +20 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni2642 +ENCODING 9794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 1 +BITMAP +0E +06 +0A +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni2643 +ENCODING 9795 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +74 +8C +0C +14 +FC +04 +04 +ENDCHAR +STARTCHAR uni2644 +ENCODING 9796 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +40 +E0 +40 +58 +64 +44 +48 +48 +48 +ENDCHAR +STARTCHAR uni2645 +ENCODING 9797 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +D6 +54 +7C +54 +D6 +10 +38 +28 +38 +ENDCHAR +STARTCHAR uni2646 +ENCODING 9798 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -1 +BITMAP +08 +59 +CB +49 +49 +49 +3E +08 +3E +08 +08 +ENDCHAR +STARTCHAR uni2647 +ENCODING 9799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni2648 +ENCODING 9800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +44 +AA +28 +28 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2649 +ENCODING 9801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +82 +44 +38 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni264A +ENCODING 9802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +7C +28 +28 +28 +28 +28 +28 +7C +82 +ENDCHAR +STARTCHAR uni264B +ENCODING 9803 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +92 +90 +60 +0C +12 +92 +7C +ENDCHAR +STARTCHAR uni264C +ENCODING 9804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +1C +22 +22 +12 +74 +94 +94 +65 +02 +ENDCHAR +STARTCHAR uni264D +ENCODING 9805 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +A8 +F8 +AA +AE +AA +AA +AA +AA +0C +F8 +ENDCHAR +STARTCHAR uni264E +ENCODING 9806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 1 +BITMAP +38 +44 +44 +EE +00 +FE +ENDCHAR +STARTCHAR uni264F +ENCODING 9807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +A8 +F8 +A8 +A8 +A8 +A8 +A8 +A8 +AA +06 +ENDCHAR +STARTCHAR uni2650 +ENCODING 9808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +1E +06 +8A +52 +20 +50 +88 +ENDCHAR +STARTCHAR uni2651 +ENCODING 9809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +31 +4E +84 +08 +10 +3C +62 +A2 +A2 +1C +ENDCHAR +STARTCHAR uni2652 +ENCODING 9810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +54 +A8 +00 +00 +54 +A8 +ENDCHAR +STARTCHAR uni2653 +ENCODING 9811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +84 +84 +48 +48 +FC +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni2654 +ENCODING 9812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +38 +10 +EE +BA +92 +92 +54 +FE +82 +FE +ENDCHAR +STARTCHAR uni2655 +ENCODING 9813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +92 +54 +54 +BA +54 +7C +44 +7C +ENDCHAR +STARTCHAR uni2656 +ENCODING 9814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +AA +FE +82 +82 +44 +44 +82 +82 +FE +ENDCHAR +STARTCHAR uni2657 +ENCODING 9815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +28 +44 +44 +44 +44 +28 +EE +82 +FE +ENDCHAR +STARTCHAR uni2658 +ENCODING 9816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +3C +44 +84 +84 +74 +24 +44 +84 +84 +FC +ENDCHAR +STARTCHAR uni2659 +ENCODING 9817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +30 +48 +48 +30 +48 +48 +84 +FC +ENDCHAR +STARTCHAR uni265A +ENCODING 9818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +38 +10 +EE +BA +92 +92 +54 +FE +FE +FE +ENDCHAR +STARTCHAR uni265B +ENCODING 9819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +92 +54 +54 +BA +54 +7C +7C +7C +ENDCHAR +STARTCHAR uni265C +ENCODING 9820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +AA +FE +FE +FE +7C +7C +FE +FE +FE +ENDCHAR +STARTCHAR uni265D +ENCODING 9821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +38 +6C +44 +6C +7C +38 +FE +FE +FE +ENDCHAR +STARTCHAR uni265E +ENCODING 9822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +3C +6C +FC +FC +7C +3C +7C +FC +FC +FC +ENDCHAR +STARTCHAR uni265F +ENCODING 9823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +30 +78 +78 +30 +78 +78 +FC +FC +ENDCHAR +STARTCHAR uni2660 +ENCODING 9824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +38 +7C +FE +FE +FE +7C +10 +38 +ENDCHAR +STARTCHAR uni2661 +ENCODING 9825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +6C +92 +82 +82 +82 +44 +28 +10 +10 +ENDCHAR +STARTCHAR uni2662 +ENCODING 9826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +20 +50 +50 +88 +88 +50 +50 +20 +20 +ENDCHAR +STARTCHAR uni2663 +ENCODING 9827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +38 +38 +10 +FE +FE +D6 +10 +10 +38 +ENDCHAR +STARTCHAR uni2664 +ENCODING 9828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +44 +82 +82 +82 +7C +10 +38 +ENDCHAR +STARTCHAR uni2665 +ENCODING 9829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +6C +FE +FE +FE +FE +7C +38 +10 +10 +ENDCHAR +STARTCHAR uni2666 +ENCODING 9830 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +20 +70 +70 +F8 +F8 +70 +70 +20 +20 +ENDCHAR +STARTCHAR uni2667 +ENCODING 9831 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +28 +38 +10 +EE +BA +D6 +10 +10 +38 +ENDCHAR +STARTCHAR uni2668 +ENCODING 9832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +08 +51 +92 +92 +92 +49 +49 +49 +52 +81 +7E +ENDCHAR +STARTCHAR uni2669 +ENCODING 9833 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +70 +F0 +E0 +ENDCHAR +STARTCHAR uni266A +ENCODING 9834 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +18 +14 +14 +10 +10 +10 +70 +F0 +E0 +ENDCHAR +STARTCHAR uni266B +ENCODING 9835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +1C +17 +11 +11 +11 +11 +71 +F1 +E7 +0F +0E +ENDCHAR +STARTCHAR uni266C +ENCODING 9836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +1C +17 +11 +1D +17 +11 +71 +F1 +E7 +0F +0E +ENDCHAR +STARTCHAR uni266D +ENCODING 9837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +80 +80 +80 +80 +80 +B8 +CC +8C +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni266E +ENCODING 9838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +80 +9C +FC +E4 +84 +9C +FC +E4 +04 +04 +ENDCHAR +STARTCHAR uni266F +ENCODING 9839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +08 +48 +4C +7C +F8 +C8 +48 +4C +7C +F8 +C8 +48 +40 +ENDCHAR +STARTCHAR uni2670 +ENCODING 9840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +28 +10 +10 +92 +7C +92 +10 +10 +10 +28 +ENDCHAR +STARTCHAR uni2671 +ENCODING 9841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +28 +10 +D6 +BA +D6 +10 +10 +28 +10 +ENDCHAR +STARTCHAR uni2672 +ENCODING 9842 +BBX 16 16 0 -2 +BITMAP +03C0 +0520 +0A98 +1248 +0AD0 +0430 +3004 +480A +8C11 +5009 +A005 +AE26 +5258 +5286 +1E5C +0020 +ENDCHAR +STARTCHAR uni2673 +ENCODING 9843 +BBX 15 16 0 -2 +BITMAP +0380 +0440 +0440 +0820 +0028 +3918 +1B38 +2900 +2108 +4384 +4004 +8022 +8042 +7EFC +0040 +0020 +ENDCHAR +STARTCHAR uni2674 +ENCODING 9844 +BBX 15 16 0 -2 +BITMAP +0380 +0440 +0440 +0820 +0028 +3B18 +18B8 +2900 +2208 +4384 +4004 +8022 +8042 +7EFC +0040 +0020 +ENDCHAR +STARTCHAR uni2675 +ENCODING 9845 +BBX 15 16 0 -2 +BITMAP +0380 +0440 +0440 +0820 +0028 +3B18 +18B8 +2B00 +2088 +4304 +4004 +8022 +8042 +7EFC +0040 +0020 +ENDCHAR +STARTCHAR uni2676 +ENCODING 9846 +BBX 15 16 0 -2 +BITMAP +0380 +0440 +0440 +0820 +0028 +3A98 +1AB8 +2B80 +2088 +4084 +4004 +8022 +8042 +7EFC +0040 +0020 +ENDCHAR +STARTCHAR uni2677 +ENCODING 9847 +BBX 15 16 0 -2 +BITMAP +0380 +0440 +0440 +0820 +0028 +3B98 +1A38 +2B00 +2088 +4304 +4004 +8022 +8042 +7EFC +0040 +0020 +ENDCHAR +STARTCHAR uni2678 +ENCODING 9848 +BBX 15 16 0 -2 +BITMAP +0380 +0440 +0440 +0820 +0028 +3998 +1A38 +2B80 +2248 +4184 +4004 +8022 +8042 +7EFC +0040 +0020 +ENDCHAR +STARTCHAR uni2679 +ENCODING 9849 +BBX 15 16 0 -2 +BITMAP +0380 +0440 +0440 +0820 +0028 +3B98 +18B8 +2900 +2108 +4104 +4004 +8022 +8042 +7EFC +0040 +0020 +ENDCHAR +STARTCHAR uni267A +ENCODING 9850 +BBX 15 16 0 -2 +BITMAP +0380 +0440 +0440 +0820 +0028 +3818 +1838 +2800 +2008 +4004 +4004 +8022 +8042 +7EFC +0040 +0020 +ENDCHAR +STARTCHAR uni267B +ENCODING 9851 +BBX 16 16 0 -2 +BITMAP +03C0 +05E0 +0EF8 +1E78 +0EF0 +0430 +3004 +780E +FC1F +700F +E007 +EE26 +5E78 +5EFE +1E7C +0020 +ENDCHAR +STARTCHAR uni267C +ENCODING 9852 +BBX 16 16 0 -2 +BITMAP +07E0 +1FF8 +3E7C +7DBE +7BDE +FF8F +F7DF +E7FF +F3EF +F7EF +EFF7 +6FB6 +710E +3FBC +1FF8 +07E0 +ENDCHAR +STARTCHAR uni267D +ENCODING 9853 +BBX 16 16 0 -2 +BITMAP +07E0 +1818 +2184 +4242 +4422 +8071 +8821 +9801 +8C11 +8811 +9009 +504A +4EF2 +2044 +1818 +07E0 +ENDCHAR +STARTCHAR uni267E +ENCODING 9854 +BBX 13 12 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +4D90 +9248 +9248 +4D90 +4010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni267F +ENCODING 9855 +BBX 12 11 2 0 +BITMAP +1800 +1800 +1000 +1E00 +1000 +5F80 +8080 +8040 +8140 +4230 +3C00 +ENDCHAR +STARTCHAR uni2680 +ENCODING 9856 +BBX 9 9 3 1 +BITMAP +FF80 +8080 +8080 +8080 +8880 +8080 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uni2681 +ENCODING 9857 +BBX 9 9 3 1 +BITMAP +FF80 +8080 +8080 +A080 +8080 +8280 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uni2682 +ENCODING 9858 +BBX 9 9 3 1 +BITMAP +FF80 +8080 +A080 +8080 +8880 +8080 +8280 +8080 +FF80 +ENDCHAR +STARTCHAR uni2683 +ENCODING 9859 +BBX 9 9 3 1 +BITMAP +FF80 +8080 +A280 +8080 +8080 +8080 +A280 +8080 +FF80 +ENDCHAR +STARTCHAR uni2684 +ENCODING 9860 +BBX 9 9 3 1 +BITMAP +FF80 +8080 +A280 +8080 +8880 +8080 +A280 +8080 +FF80 +ENDCHAR +STARTCHAR uni2685 +ENCODING 9861 +BBX 9 9 3 1 +BITMAP +FF80 +8080 +A280 +8080 +A280 +8080 +A280 +8080 +FF80 +ENDCHAR +STARTCHAR uni2686 +ENCODING 9862 +BBX 12 12 2 -1 +BITMAP +0F00 +1080 +2040 +4020 +8010 +8190 +8190 +8010 +4020 +2040 +1080 +0F00 +ENDCHAR +STARTCHAR uni2687 +ENCODING 9863 +BBX 12 12 2 -1 +BITMAP +0F00 +1080 +2040 +4020 +8010 +9990 +9990 +8010 +4020 +2040 +1080 +0F00 +ENDCHAR +STARTCHAR uni2688 +ENCODING 9864 +BBX 12 12 2 -1 +BITMAP +0F00 +1F80 +3FC0 +7FE0 +FFF0 +FE70 +FE70 +FFF0 +7FE0 +3FC0 +1F80 +0F00 +ENDCHAR +STARTCHAR uni2689 +ENCODING 9865 +BBX 12 12 2 -1 +BITMAP +0F00 +1F80 +3FC0 +7FE0 +FFF0 +E670 +E670 +FFF0 +7FE0 +3FC0 +1F80 +0F00 +ENDCHAR +STARTCHAR uni268A +ENCODING 9866 +BBX 13 2 1 4 +BITMAP +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni268B +ENCODING 9867 +BBX 13 2 1 4 +BITMAP +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni268C +ENCODING 9868 +BBX 13 6 1 2 +BITMAP +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni268D +ENCODING 9869 +BBX 13 6 1 2 +BITMAP +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni268E +ENCODING 9870 +BBX 13 6 1 2 +BITMAP +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni268F +ENCODING 9871 +BBX 13 6 1 2 +BITMAP +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni2690 +ENCODING 9872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +E0 +9C +84 +84 +E4 +9C +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2691 +ENCODING 9873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +E0 +FC +FC +FC +FC +9C +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2692 +ENCODING 9874 +BBX 16 14 0 -1 +BITMAP +0832 +5C7C +3E7E +7C1F +F827 +7443 +2281 +0100 +0280 +0440 +0820 +1010 +2008 +4004 +ENDCHAR +STARTCHAR uni2693 +ENCODING 9875 +BBX 13 12 1 0 +BITMAP +0700 +0880 +0880 +0700 +0200 +0F80 +0200 +4210 +E238 +4210 +2220 +1FC0 +ENDCHAR +STARTCHAR uni2694 +ENCODING 9876 +BBX 13 13 1 0 +BITMAP +8008 +4010 +2020 +1040 +0880 +0500 +0200 +0500 +0880 +5050 +2020 +5050 +8008 +ENDCHAR +STARTCHAR uni2695 +ENCODING 9877 +BBX 9 14 3 -1 +BITMAP +0800 +0800 +7F80 +8980 +8800 +7E00 +0900 +0900 +3E00 +4800 +3C00 +0A00 +1C00 +0800 +ENDCHAR +STARTCHAR uni2696 +ENCODING 9878 +BBX 15 11 0 0 +BITMAP +0100 +1110 +7FFC +3938 +5454 +5454 +9292 +9292 +FEFE +7C7C +3838 +ENDCHAR +STARTCHAR uni2697 +ENCODING 9879 +BBX 11 10 3 0 +BITMAP +1F00 +3F80 +5FC0 +5FC0 +8F80 +8700 +8000 +0F80 +1240 +2220 +ENDCHAR +STARTCHAR uni2698 +ENCODING 9880 +BBX 11 13 2 -1 +BITMAP +0E00 +1100 +1100 +1100 +0E00 +0400 +E4E0 +F5E0 +75C0 +3580 +0E00 +0400 +0400 +ENDCHAR +STARTCHAR uni2699 +ENCODING 9881 +BBX 13 13 1 -1 +BITMAP +0200 +4210 +2FA0 +1040 +2020 +2020 +E238 +2020 +2020 +1040 +2FA0 +4210 +0200 +ENDCHAR +STARTCHAR uni269A +ENCODING 9882 +BBX 15 13 0 0 +BITMAP +0100 +0280 +3938 +7FFC +FD7E +0540 +0380 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni269B +ENCODING 9883 +BBX 16 16 0 -2 +BITMAP +0180 +0240 +0240 +742E +8E71 +85A1 +4E72 +35AC +35AC +4E72 +85A1 +8E71 +742E +0240 +0240 +0180 +ENDCHAR +STARTCHAR uni269C +ENCODING 9884 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0440 +3458 +4C64 +8442 +B29A +CAA6 +1AB0 +1010 +1BB0 +0AA0 +3AB8 +26C8 +1930 +0100 +ENDCHAR +STARTCHAR uni269D +ENCODING 9885 +BBX 15 15 0 -1 +BITMAP +0100 +0280 +0440 +0440 +0800 +6BFC +8802 +8822 +6024 +1810 +0650 +0088 +2108 +2648 +1830 +ENDCHAR +STARTCHAR uni269E +ENCODING 9886 +BBX 12 15 2 -1 +BITMAP +C000 +3000 +0C00 +0300 +00C0 +0030 +0000 +FFF0 +0000 +0030 +00C0 +0300 +0C00 +3000 +C000 +ENDCHAR +STARTCHAR uni269F +ENCODING 9887 +BBX 12 15 2 -1 +BITMAP +0030 +00C0 +0300 +0C00 +3000 +C000 +0000 +FFF0 +0000 +C000 +3000 +0C00 +0300 +00C0 +0030 +ENDCHAR +STARTCHAR uni26A0 +ENCODING 9888 +BBX 13 14 1 -1 +BITMAP +0200 +0500 +0500 +0880 +0880 +1240 +1240 +2220 +2220 +4210 +4010 +8208 +8008 +FFF8 +ENDCHAR +STARTCHAR uni26A1 +ENCODING 9889 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +04 +08 +10 +20 +40 +FC +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni26A2 +ENCODING 9890 +BBX 11 9 2 0 +BITMAP +3B80 +4440 +8A20 +8A20 +4440 +3B80 +1100 +3B80 +1100 +ENDCHAR +STARTCHAR uni26A3 +ENCODING 9891 +BBX 11 11 2 0 +BITMAP +0700 +0300 +0500 +38E0 +4460 +8EA0 +9500 +6880 +3080 +1100 +0E00 +ENDCHAR +STARTCHAR uni26A4 +ENCODING 9892 +BBX 10 14 3 -1 +BITMAP +01C0 +00C0 +0140 +0E00 +1100 +3880 +5480 +8B00 +8600 +4400 +3800 +1000 +3800 +1000 +ENDCHAR +STARTCHAR uni26A5 +ENCODING 9893 +BBX 8 12 4 -2 +BITMAP +07 +03 +05 +38 +44 +82 +82 +44 +38 +10 +38 +10 +ENDCHAR +STARTCHAR uni26A6 +ENCODING 9894 +BBX 11 10 2 0 +BITMAP +00E0 +0060 +02A0 +0100 +3A80 +4400 +8200 +8200 +4400 +3800 +ENDCHAR +STARTCHAR uni26A7 +ENCODING 9895 +BBX 15 13 0 -2 +BITMAP +E00E +C006 +A80A +1010 +2BA0 +0440 +0820 +0820 +0440 +0380 +0100 +0380 +0100 +ENDCHAR +STARTCHAR uni26A8 +ENCODING 9896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +10 +38 +54 +10 +38 +10 +38 +44 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni26A9 +ENCODING 9897 +BBX 14 7 1 -1 +BITMAP +3800 +4410 +8288 +83FC +8288 +4410 +3800 +ENDCHAR +STARTCHAR uni26AA +ENCODING 9898 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 -1 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni26AB +ENCODING 9899 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 -1 +BITMAP +38 +7C +FE +FE +FE +7C +38 +ENDCHAR +STARTCHAR uni26AC +ENCODING 9900 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 0 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni26AD +ENCODING 9901 +BBX 11 6 2 0 +BITMAP +3B80 +4440 +8A20 +8A20 +4440 +3B80 +ENDCHAR +STARTCHAR uni26AE +ENCODING 9902 +BBX 11 7 3 -1 +BITMAP +0400 +75C0 +8E20 +8E20 +8E20 +75C0 +0400 +ENDCHAR +STARTCHAR uni26AF +ENCODING 9903 +BBX 13 5 1 0 +BITMAP +7070 +8888 +8F88 +8888 +7070 +ENDCHAR +STARTCHAR uni26B0 +ENCODING 9904 +BBX 14 12 1 0 +BITMAP +1800 +2780 +407C +8004 +8004 +8004 +8004 +C07C +A784 +5C7C +3780 +1800 +ENDCHAR +STARTCHAR uni26B1 +ENCODING 9905 +BBX 11 13 2 0 +BITMAP +1F00 +0A00 +3F80 +4040 +8020 +8020 +4040 +4040 +4040 +2080 +2080 +2080 +1F00 +ENDCHAR +STARTCHAR uni26B2 +ENCODING 9906 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +70 +88 +88 +88 +70 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni26B3 +ENCODING 9907 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +70 +88 +04 +04 +08 +30 +20 +F8 +20 +ENDCHAR +STARTCHAR uni26B4 +ENCODING 9908 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +28 +44 +82 +44 +28 +10 +10 +7C +10 +ENDCHAR +STARTCHAR uni26B5 +ENCODING 9909 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +54 +38 +FE +38 +54 +92 +10 +7C +10 +ENDCHAR +STARTCHAR uni26B6 +ENCODING 9910 +BBX 13 11 1 0 +BITMAP +0200 +0200 +0200 +0200 +7270 +0880 +0500 +F278 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni26B7 +ENCODING 9911 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +24 +28 +30 +28 +24 +20 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni26B8 +ENCODING 9912 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +70 +E0 +E0 +E0 +70 +38 +10 +7C +10 +ENDCHAR +STARTCHAR uni26B9 +ENCODING 9913 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 1 +BITMAP +42 +24 +18 +FF +18 +24 +42 +ENDCHAR +STARTCHAR uni26BA +ENCODING 9914 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +44 +44 +44 +28 +28 +28 +10 +FE +ENDCHAR +STARTCHAR uni26BB +ENCODING 9915 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +10 +28 +28 +28 +44 +44 +44 +ENDCHAR +STARTCHAR uni26BC +ENCODING 9916 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +84 +84 +84 +94 +FC +40 +FC +ENDCHAR +STARTCHAR uni26BD +ENCODING 9917 +BBX 13 13 2 -1 +BITMAP +0700 +1CC0 +3CE0 +5CF0 +4010 +8708 +8F88 +E738 +7070 +6030 +2720 +1FC0 +0700 +ENDCHAR +STARTCHAR uni26BE +ENCODING 9918 +BBX 13 13 2 -1 +BITMAP +0700 +18C0 +3060 +4890 +4010 +8508 +8008 +8508 +4010 +4890 +3060 +18C0 +0700 +ENDCHAR +STARTCHAR uni26BF +ENCODING 9919 +BBX 13 13 1 -1 +BITMAP +FFF8 +8008 +8708 +8888 +8888 +8708 +8208 +8208 +8208 +8388 +8208 +8008 +FFF8 +ENDCHAR +STARTCHAR uni26C0 +ENCODING 9920 +BBX 12 9 2 0 +BITMAP +1F80 +6060 +8610 +8610 +E070 +BFD0 +A950 +6960 +1F80 +ENDCHAR +STARTCHAR uni26C1 +ENCODING 9921 +BBX 12 12 2 0 +BITMAP +1F80 +6060 +8610 +8610 +E070 +BFD0 +A950 +E970 +BFD0 +A950 +6960 +1F80 +ENDCHAR +STARTCHAR uni26C2 +ENCODING 9922 +BBX 14 11 1 -1 +BITMAP +1FE0 +7038 +CFCC +BCF4 +BCF4 +8FC4 +A014 +AB54 +CB4C +7038 +1FE0 +ENDCHAR +STARTCHAR uni26C3 +ENCODING 9923 +BBX 14 14 1 -1 +BITMAP +1FE0 +7038 +CFCC +BCF4 +BCF4 +8FC4 +A014 +AB54 +8B44 +A014 +AB54 +CB4C +7038 +1FE0 +ENDCHAR +STARTCHAR uni26C4 +ENCODING 9924 +BBX 14 16 1 -2 +BITMAP +0780 +0780 +1FE0 +0840 +14A0 +1020 +14A0 +1320 +0840 +0FC0 +1020 +2110 +F03C +2110 +1020 +0FC0 +ENDCHAR +STARTCHAR uni26C5 +ENCODING 9925 +BBX 12 11 2 0 +BITMAP +0480 +0520 +0040 +0300 +1CB0 +2680 +4180 +8040 +8040 +4180 +3E00 +ENDCHAR +STARTCHAR uni26C6 +ENCODING 9926 +BBX 14 14 1 -1 +BITMAP +4444 +8888 +0110 +2000 +4444 +8888 +0110 +2000 +4444 +8888 +0100 +2024 +4448 +8890 +ENDCHAR +STARTCHAR uni26C7 +ENCODING 9927 +BBX 16 16 0 -2 +BITMAP +8BC8 +03C0 +2FF1 +07E4 +8DB0 +2FF2 +0DB0 +4E74 +07E1 +47E0 +0FF0 +1F78 +7FFE +1F78 +0FF0 +07E0 +ENDCHAR +STARTCHAR uni26C8 +ENCODING 9928 +BBX 14 14 1 -1 +BITMAP +0E40 +1198 +2164 +4204 +4104 +2208 +1430 +0FC0 +4000 +8880 +0100 +2020 +4440 +8880 +ENDCHAR +STARTCHAR uni26C9 +ENCODING 9929 +BBX 11 13 2 0 +BITMAP +FFE0 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +4040 +2080 +1100 +0A00 +0400 +ENDCHAR +STARTCHAR uni26CA +ENCODING 9930 +BBX 11 13 2 0 +BITMAP +FFE0 +FFE0 +FFE0 +FFE0 +FFE0 +FFE0 +FFE0 +FFE0 +7FC0 +3F80 +1F00 +0E00 +0400 +ENDCHAR +STARTCHAR uni26CB +ENCODING 9931 +BBX 11 11 1 0 +BITMAP +FFE0 +8A20 +9120 +A0A0 +C060 +8020 +C060 +A0A0 +9120 +8A20 +FFE0 +ENDCHAR +STARTCHAR uni26CC +ENCODING 9932 +BBX 9 9 2 1 +BITMAP +8080 +4100 +2200 +1000 +0800 +0400 +2200 +4100 +8080 +ENDCHAR +STARTCHAR uni26CD +ENCODING 9933 +BBX 15 15 0 -2 +BITMAP +3C00 +4200 +4200 +8100 +FF00 +FF00 +FF00 +4200 +4200 +0040 +00A0 +0110 +0208 +0404 +0FFE +ENDCHAR +STARTCHAR uni26CE +ENCODING 9934 +BBX 11 9 2 0 +BITMAP +1100 +1100 +1140 +7920 +9520 +93C0 +5100 +1100 +1980 +ENDCHAR +STARTCHAR uni26CF +ENCODING 9935 +BBX 14 13 1 0 +BITMAP +8180 +4E00 +3800 +3800 +7C00 +6600 +4300 +8180 +80C0 +0060 +0030 +0018 +000C +ENDCHAR +STARTCHAR uni26D0 +ENCODING 9936 +BBX 11 13 2 0 +BITMAP +0380 +0C40 +1720 +0FE0 +13A0 +00C0 +0100 +7000 +8600 +8800 +6B00 +0880 +F080 +ENDCHAR +STARTCHAR uni26D1 +ENCODING 9937 +BBX 13 12 0 0 +BITMAP +0700 +1DC0 +38E0 +7DF0 +FFF8 +4010 +4010 +4010 +2020 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni26D2 +ENCODING 9938 +BBX 13 13 0 -1 +BITMAP +0700 +18C0 +2020 +5050 +4890 +8108 +8208 +8408 +4890 +5050 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni26D3 +ENCODING 9939 +BBX 12 15 2 -2 +BITMAP +8840 +A8E0 +7150 +2110 +7110 +A950 +88E0 +8840 +A8E0 +7150 +2110 +7110 +A950 +88E0 +0040 +ENDCHAR +STARTCHAR uni26D4 +ENCODING 9940 +BBX 13 12 0 -1 +BITMAP +0700 +1FC0 +3FE0 +7FF0 +7FF0 +C018 +C018 +7FF0 +7FF0 +3FE0 +1FC0 +0700 +ENDCHAR +STARTCHAR uni26D5 +ENCODING 9941 +BBX 12 13 2 -1 +BITMAP +30C0 +78C0 +B4C0 +30C0 +2380 +2F00 +2800 +2F00 +2380 +30C0 +32D0 +31E0 +30C0 +ENDCHAR +STARTCHAR uni26D6 +ENCODING 9942 +BBX 14 13 1 -1 +BITMAP +0300 +0780 +0FC0 +17A0 +23B0 +55B8 +F7BC +76A8 +3710 +1FA0 +0FC0 +0780 +0300 +ENDCHAR +STARTCHAR uni26D7 +ENCODING 9943 +BBX 16 15 0 -2 +BITMAP +0180 +0240 +0420 +0810 +1428 +2E24 +5522 +8421 +44AA +2474 +1028 +0810 +0420 +0240 +0180 +ENDCHAR +STARTCHAR uni26D8 +ENCODING 9944 +BBX 12 12 2 0 +BITMAP +1FF0 +1FF0 +1FF0 +3FF0 +7FF0 +FFF0 +FFF0 +FFF0 +FFF0 +FFF0 +FFF0 +FFF0 +ENDCHAR +STARTCHAR uni26D9 +ENCODING 9945 +BBX 15 12 0 0 +BITMAP +1806 +1906 +1906 +1906 +3006 +6106 +C106 +C106 +C006 +C106 +C106 +C106 +ENDCHAR +STARTCHAR uni26DA +ENCODING 9946 +BBX 14 12 1 0 +BITMAP +F03C +F03C +E01C +C00C +0000 +0000 +0000 +0000 +C00C +E01C +F03C +F03C +ENDCHAR +STARTCHAR uni26DB +ENCODING 9947 +BBX 9 10 3 0 +BITMAP +FF80 +C180 +6300 +6300 +3600 +3E00 +1C00 +1C00 +0800 +0800 +ENDCHAR +STARTCHAR uni26DC +ENCODING 9948 +BBX 16 12 0 0 +BITMAP +1803 +1843 +1843 +1843 +3003 +6043 +C043 +C043 +C403 +C443 +C443 +C443 +ENDCHAR +STARTCHAR uni26DD +ENCODING 9949 +BBX 11 11 2 0 +BITMAP +FFE0 +C060 +A0A0 +9120 +8A20 +8420 +8A20 +9120 +A0A0 +C060 +FFE0 +ENDCHAR +STARTCHAR uni26DE +ENCODING 9950 +BBX 13 13 0 -1 +BITMAP +FDF8 +F8F8 +E038 +D018 +C818 +8408 +0200 +8108 +C098 +C058 +E038 +F8F8 +FDF8 +ENDCHAR +STARTCHAR uni26DF +ENCODING 9951 +BBX 14 12 1 0 +BITMAP +FFE0 +FFE0 +FFF8 +FFE4 +FFE4 +FFFC +FFFC +FFFC +DFEC +AFD4 +7038 +2010 +ENDCHAR +STARTCHAR uni26E0 +ENCODING 9952 +BBX 14 14 1 -1 +BITMAP +FFFC +7C04 +3884 +1084 +0004 +0084 +0084 +0004 +0084 +0084 +0004 +0084 +0084 +0004 +ENDCHAR +STARTCHAR uni26E1 +ENCODING 9953 +BBX 14 14 1 -1 +BITMAP +8000 +C000 +E000 +F000 +E000 +C000 +8000 +8100 +8080 +8440 +8C20 +9C10 +BC08 +FFFC +ENDCHAR +STARTCHAR uni26E2 +ENCODING 9954 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +38 +7C +10 +10 +7C +82 +BA +BA +82 +7C +ENDCHAR +STARTCHAR uni26E3 +ENCODING 9955 +BBX 9 14 3 -1 +BITMAP +0800 +C980 +C980 +0800 +0800 +1C00 +6300 +4100 +8080 +8080 +8080 +4100 +6300 +1C00 +ENDCHAR +STARTCHAR uni26E4 +ENCODING 9956 +BBX 13 14 1 -1 +BITMAP +0200 +0200 +0500 +0500 +0500 +FFF8 +4890 +28A0 +18C0 +1540 +1240 +2DA0 +3060 +4010 +ENDCHAR +STARTCHAR uni26E5 +ENCODING 9957 +BBX 13 14 1 -1 +BITMAP +0200 +0200 +0500 +0500 +0100 +FEB8 +4090 +2820 +10C0 +1400 +1240 +29A0 +3060 +4010 +ENDCHAR +STARTCHAR uni26E6 +ENCODING 9958 +BBX 13 14 1 -1 +BITMAP +0200 +0200 +0500 +0500 +0400 +EBF8 +4810 +20A0 +1840 +0140 +1240 +2CA0 +3060 +4010 +ENDCHAR +STARTCHAR uni26E7 +ENCODING 9959 +BBX 13 14 1 -1 +BITMAP +4010 +3060 +2DA0 +1240 +1540 +18C0 +28A0 +4890 +FFF8 +0500 +0500 +0500 +0200 +0200 +ENDCHAR +STARTCHAR uni26E8 +ENCODING 9960 +BBX 10 12 2 -1 +BITMAP +FFC0 +8040 +8C40 +8C40 +BF40 +BF40 +8C40 +8C40 +8040 +C0C0 +3300 +0C00 +ENDCHAR +STARTCHAR uni26E9 +ENCODING 9961 +BBX 15 12 0 0 +BITMAP +FFFE +1010 +1010 +1010 +1FF0 +1010 +1010 +1010 +1010 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni26EA +ENCODING 9962 +BBX 13 14 1 0 +BITMAP +0200 +0200 +0F80 +0200 +0200 +0700 +0F80 +3FE0 +F8F8 +7070 +6730 +6FB0 +6FB0 +6FB0 +ENDCHAR +STARTCHAR uni26EB +ENCODING 9963 +BBX 11 11 1 0 +BITMAP +1F00 +1100 +F1E0 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +ENDCHAR +STARTCHAR uni26EC +ENCODING 9964 +BBX 8 8 4 1 +BITMAP +18 +18 +00 +00 +00 +00 +C3 +C3 +ENDCHAR +STARTCHAR uni26ED +ENCODING 9965 +BBX 11 11 2 0 +BITMAP +0400 +4440 +2E80 +1100 +2080 +E0E0 +2080 +1100 +2E80 +4440 +0400 +ENDCHAR +STARTCHAR uni26EE +ENCODING 9966 +BBX 13 11 1 0 +BITMAP +0200 +2220 +1740 +0888 +1048 +F078 +9040 +8880 +1740 +2220 +0200 +ENDCHAR +STARTCHAR uni26EF +ENCODING 9967 +BBX 11 11 2 0 +BITMAP +0400 +4440 +2E80 +1100 +2E80 +EEE0 +2E80 +1100 +2E80 +4440 +0400 +ENDCHAR +STARTCHAR uni26F0 +ENCODING 9968 +BBX 14 10 1 0 +BITMAP +0200 +0500 +08C0 +0820 +1030 +27F0 +7FF8 +7FF8 +FFFC +FFFC +ENDCHAR +STARTCHAR uni26F1 +ENCODING 9969 +BBX 14 14 1 -1 +BITMAP +0FC0 +3030 +5048 +8FC4 +F23C +8204 +0400 +0400 +0400 +0800 +0800 +0800 +FFFC +FFFC +ENDCHAR +STARTCHAR uni26F2 +ENCODING 9970 +BBX 13 14 1 -1 +BITMAP +28A0 +4510 +8508 +8008 +8708 +8F88 +0F80 +0000 +FFF8 +7FF0 +1FC0 +1FC0 +3FE0 +7FF0 +ENDCHAR +STARTCHAR uni26F3 +ENCODING 9971 +BBX 15 14 0 -1 +BITMAP +0180 +01E0 +01F8 +0100 +0100 +0100 +0100 +0100 +3D78 +7D7C +FC7E +7EFC +3FF8 +07C0 +ENDCHAR +STARTCHAR uni26F4 +ENCODING 9972 +BBX 14 11 0 1 +BITMAP +0300 +0300 +0300 +07E0 +0A50 +1248 +2248 +FFFC +3FF8 +1FF8 +0FF0 +ENDCHAR +STARTCHAR uni26F5 +ENCODING 9973 +BBX 14 14 0 -1 +BITMAP +0100 +0180 +0140 +0540 +0D20 +1520 +2510 +4510 +FDF8 +0100 +FFFC +3FF8 +1FF8 +0FF0 +ENDCHAR +STARTCHAR uni26F6 +ENCODING 9974 +BBX 14 14 1 -1 +BITMAP +7038 +8004 +8004 +8004 +0000 +0000 +0000 +0000 +0000 +0000 +8004 +8004 +8004 +7038 +ENDCHAR +STARTCHAR uni26F7 +ENCODING 9975 +BBX 13 12 1 0 +BITMAP +7000 +7000 +7000 +0C00 +1C40 +FFE0 +3840 +3818 +1C60 +1F80 +0600 +3800 +ENDCHAR +STARTCHAR uni26F8 +ENCODING 9976 +BBX 11 9 2 0 +BITMAP +03C0 +03C0 +03C0 +03C0 +7FC0 +FFC0 +FF80 +2100 +FFE0 +ENDCHAR +STARTCHAR uni26F9 +ENCODING 9977 +BBX 13 15 1 -2 +BITMAP +0700 +0700 +0700 +0000 +07F8 +0F00 +1700 +2718 +4718 +0700 +0D80 +0D80 +18C0 +18C0 +F078 +ENDCHAR +STARTCHAR uni26FA +ENCODING 9978 +BBX 14 14 1 -1 +BITMAP +0C00 +0A00 +1D00 +1C80 +1C40 +3E20 +3E10 +3E08 +7F04 +7F08 +6310 +E390 +E3A0 +E3C0 +ENDCHAR +STARTCHAR uni26FB +ENCODING 9979 +BBX 11 13 2 -1 +BITMAP +1F00 +60C0 +8020 +C060 +2080 +1100 +1100 +1100 +2080 +C060 +8020 +60C0 +1F00 +ENDCHAR +STARTCHAR uni26FC +ENCODING 9980 +BBX 13 12 1 0 +BITMAP +0200 +0200 +0200 +0200 +0F80 +0000 +0000 +2020 +2020 +2020 +2020 +F8F8 +ENDCHAR +STARTCHAR uni26FD +ENCODING 9981 +BBX 14 12 1 0 +BITMAP +1F00 +3FB0 +2088 +2084 +3FE4 +3F94 +3F94 +3F94 +3F94 +3F88 +3F80 +FFE0 +ENDCHAR +STARTCHAR uni26FE +ENCODING 9982 +BBX 14 14 1 -1 +BITMAP +FFFC +FFFC +E00C +E034 +E034 +E034 +E00C +F01C +F83C +9FE4 +8FC4 +C00C +F03C +FFFC +ENDCHAR +STARTCHAR uni26FF +ENCODING 9983 +BBX 13 13 1 -1 +BITMAP +FFF8 +8008 +8008 +FFF8 +FFF8 +8008 +8008 +FFF8 +8000 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni2700 +ENCODING 9984 +BBX 14 11 1 1 +BITMAP +7008 +F83C +D878 +FEF0 +7FE0 +07C0 +7FE0 +FEF0 +D878 +F83C +7008 +ENDCHAR +STARTCHAR uni2701 +ENCODING 9985 +BBX 15 11 0 2 +BITMAP +3800 +7C00 +6C00 +7C00 +3C00 +0E00 +7FFC +FFFE +D9C0 +F8E0 +7000 +ENDCHAR +STARTCHAR uni2702 +ENCODING 9986 +BBX 14 11 1 1 +BITMAP +700C +F838 +D870 +FEE0 +7FC0 +0780 +7FC0 +FEE0 +D870 +F838 +700C +ENDCHAR +STARTCHAR uni2703 +ENCODING 9987 +BBX 15 11 0 -1 +BITMAP +7000 +F8E0 +D9C0 +FFFE +7FFC +0E00 +3C00 +7C00 +6C00 +7C00 +3800 +ENDCHAR +STARTCHAR uni2704 +ENCODING 9988 +BBX 15 11 0 1 +BITMAP +700C +8832 +AE44 +8188 +7910 +0620 +7850 +8188 +AE44 +8832 +700C +ENDCHAR +STARTCHAR uni2705 +ENCODING 9989 +BBX 14 11 1 -1 +BITMAP +0008 +0014 +0024 +0048 +4090 +A120 +A240 +5480 +4900 +2200 +1C00 +ENDCHAR +STARTCHAR uni2706 +ENCODING 9990 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +41C4 +47E4 +8FF2 +8F72 +9E62 +9C02 +9F02 +4F04 +4604 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2707 +ENCODING 9991 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2388 +4384 +4104 +8382 +87C2 +87C2 +87C2 +8BA2 +5C74 +5834 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2708 +ENCODING 9992 +BBX 15 14 0 -1 +BITMAP +0800 +0F00 +0600 +07C0 +C380 +E3C0 +7FFE +7FFE +E3C0 +C380 +07C0 +0600 +0F00 +0800 +ENDCHAR +STARTCHAR uni2709 +ENCODING 9993 +BBX 14 10 1 0 +BITMAP +FFFC +C00C +A014 +9324 +8FC4 +8FC4 +9324 +A014 +C00C +FFFC +ENDCHAR +STARTCHAR uni270A +ENCODING 9994 +BBX 13 11 1 -1 +BITMAP +06C0 +1920 +2920 +6BF0 +AA08 +A9C8 +A988 +6E08 +5010 +2020 +1FC0 +ENDCHAR +STARTCHAR uni270B +ENCODING 9995 +BBX 14 13 1 0 +BITMAP +1500 +2A80 +2A80 +6A80 +AA80 +AA98 +AAA4 +8044 +8008 +8010 +4020 +2020 +1FC0 +ENDCHAR +STARTCHAR uni270C +ENCODING 9996 +BBX 15 15 0 -1 +BITMAP +1830 +2448 +2288 +1290 +1110 +0920 +0820 +7CFC +9282 +9272 +9222 +9242 +7C04 +2008 +1FF0 +ENDCHAR +STARTCHAR uni270D +ENCODING 9997 +BBX 15 13 1 0 +BITMAP +0010 +0038 +0070 +07EE +19EA +239A +470A +8E0A +DFCA +240A +5FFA +E00A +C00E +ENDCHAR +STARTCHAR uni270E +ENCODING 9998 +BBX 12 12 1 0 +BITMAP +3000 +4C00 +AA00 +9500 +E280 +5140 +28A0 +1450 +0A50 +0590 +0230 +01F0 +ENDCHAR +STARTCHAR uni270F +ENCODING 9999 +BBX 15 7 0 3 +BITMAP +3FF0 +5028 +8FF4 +A816 +8FF4 +5028 +3FF0 +ENDCHAR +STARTCHAR uni2710 +ENCODING 10000 +BBX 12 12 1 0 +BITMAP +01F0 +0230 +0590 +0A50 +1450 +28A0 +5140 +E280 +9500 +AA00 +4C00 +3000 +ENDCHAR +STARTCHAR uni2711 +ENCODING 10001 +BBX 15 7 0 3 +BITMAP +00F0 +7908 +866C +80FE +866C +7908 +00F0 +ENDCHAR +STARTCHAR uni2712 +ENCODING 10002 +BBX 15 7 0 3 +BITMAP +00E0 +79F0 +FF38 +FF0E +FF38 +79F0 +00E0 +ENDCHAR +STARTCHAR uni2713 +ENCODING 10003 +BBX 13 10 1 -1 +BITMAP +0008 +0010 +0020 +8040 +8080 +4100 +4200 +2400 +2800 +1000 +ENDCHAR +STARTCHAR uni2714 +ENCODING 10004 +BBX 15 11 0 -1 +BITMAP +0004 +000E +401C +E038 +E070 +70E0 +71C0 +3B80 +3F00 +1E00 +0C00 +ENDCHAR +STARTCHAR uni2715 +ENCODING 10005 +BBX 11 11 2 1 +BITMAP +4040 +E0E0 +71C0 +3B80 +1F00 +0E00 +1F00 +3B80 +71C0 +E0E0 +4040 +ENDCHAR +STARTCHAR uni2716 +ENCODING 10006 +BBX 15 15 0 -1 +BITMAP +1010 +3838 +7C7C +FEFE +7FFC +3FF8 +1FF0 +0FE0 +1FF0 +3FF8 +7FFC +FEFE +7C7C +3838 +1010 +ENDCHAR +STARTCHAR uni2717 +ENCODING 10007 +BBX 12 13 1 0 +BITMAP +C030 +60C0 +6380 +3600 +1C00 +1C00 +3600 +3300 +6180 +60C0 +C060 +C030 +4000 +ENDCHAR +STARTCHAR uni2718 +ENCODING 10008 +BBX 12 14 1 -1 +BITMAP +C030 +E0E0 +63C0 +7700 +3E00 +1C00 +3E00 +3700 +7380 +61C0 +E0E0 +C070 +C020 +4000 +ENDCHAR +STARTCHAR uni2719 +ENCODING 10009 +BBX 15 15 0 -1 +BITMAP +07C0 +0440 +0540 +0540 +0540 +FD7E +8102 +BFFA +8102 +FD7E +0540 +0540 +0540 +0440 +07C0 +ENDCHAR +STARTCHAR uni271A +ENCODING 10010 +BBX 15 15 0 -1 +BITMAP +07C0 +07C0 +07C0 +07C0 +07C0 +FFFE +FFFE +FFFE +FFFE +FFFE +07C0 +07C0 +07C0 +07C0 +07C0 +ENDCHAR +STARTCHAR uni271B +ENCODING 10011 +BBX 15 15 0 -1 +BITMAP +0380 +0380 +0380 +0380 +0380 +0380 +FC7E +FC7E +FC7E +0380 +0380 +0380 +0380 +0380 +0380 +ENDCHAR +STARTCHAR uni271C +ENCODING 10012 +BBX 15 15 0 -1 +BITMAP +07C0 +07C0 +07C0 +07C0 +07C0 +F83E +F83E +F83E +F83E +F83E +07C0 +07C0 +07C0 +07C0 +07C0 +ENDCHAR +STARTCHAR uni271D +ENCODING 10013 +BBX 9 11 3 1 +BITMAP +1C00 +1C00 +1C00 +FF80 +FF80 +FF80 +1C00 +1C00 +1C00 +1C00 +1C00 +ENDCHAR +STARTCHAR uni271E +ENCODING 10014 +BBX 13 15 1 -1 +BITMAP +0F00 +0980 +0980 +0980 +F9F0 +8018 +8018 +F9F8 +79F8 +0980 +0980 +0980 +0980 +0F80 +0780 +ENDCHAR +STARTCHAR uni271F +ENCODING 10015 +BBX 13 14 1 -1 +BITMAP +1FC0 +1040 +F778 +8708 +BFE8 +BFE8 +BFE8 +8708 +F778 +1740 +1740 +1740 +1040 +1FC0 +ENDCHAR +STARTCHAR uni2720 +ENCODING 10016 +BBX 13 13 2 0 +BITMAP +3FE0 +0F80 +8708 +8708 +C718 +FFF8 +FFF8 +FFF8 +C718 +8708 +8708 +0F80 +3FE0 +ENDCHAR +STARTCHAR uni2721 +ENCODING 10017 +BBX 13 13 1 -1 +BITMAP +0200 +0500 +0880 +FFF8 +4890 +3060 +1040 +3060 +4890 +FFF8 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni2722 +ENCODING 10018 +BBX 15 15 0 -1 +BITMAP +0380 +07C0 +07C0 +0380 +0380 +610C +F93E +FFFE +F93E +610C +0380 +0380 +07C0 +07C0 +0380 +ENDCHAR +STARTCHAR uni2723 +ENCODING 10019 +BBX 15 15 0 -1 +BITMAP +0380 +07C0 +07C0 +07C0 +0380 +711C +F93E +FFFE +F93E +711C +0380 +07C0 +07C0 +07C0 +0380 +ENDCHAR +STARTCHAR uni2724 +ENCODING 10020 +BBX 15 15 0 -1 +BITMAP +07C0 +0FE0 +0FE0 +07C0 +638C +F39E +FFFE +FFFE +FFFE +F39E +638C +07C0 +0FE0 +0FE0 +07C0 +ENDCHAR +STARTCHAR uni2725 +ENCODING 10021 +BBX 16 15 0 -1 +BITMAP +0100 +0380 +07C0 +07C0 +0100 +310C +710E +FFFF +710E +310C +0100 +07C0 +07C0 +0380 +0100 +ENDCHAR +STARTCHAR uni2726 +ENCODING 10022 +BBX 15 15 0 -1 +BITMAP +0100 +0380 +0380 +07C0 +07C0 +1FF0 +7FFC +FFFE +7FFC +1FF0 +07C0 +07C0 +0380 +0380 +0100 +ENDCHAR +STARTCHAR uni2727 +ENCODING 10023 +BBX 15 15 0 -1 +BITMAP +0100 +0280 +0280 +0440 +0440 +1830 +600C +8002 +600C +1830 +0440 +0440 +0280 +0280 +0100 +ENDCHAR +STARTCHAR uni2728 +ENCODING 10024 +BBX 14 14 1 -1 +BITMAP +0800 +0800 +1400 +2200 +C180 +2220 +1420 +0850 +098C +0050 +0020 +0220 +0500 +0200 +ENDCHAR +STARTCHAR uni2729 +ENCODING 10025 +BBX 15 12 0 1 +BITMAP +0100 +0280 +0280 +FC7E +4004 +3838 +0820 +1010 +1110 +26C8 +2828 +3018 +ENDCHAR +STARTCHAR uni272A +ENCODING 10026 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3EF8 +7EFC +7C7C +C006 +F01E +F83E +F01E +F11E +67CC +6FEC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni272B +ENCODING 10027 +BBX 15 12 0 1 +BITMAP +0100 +0380 +0380 +FFFE +7C7C +3838 +0820 +1C70 +1FF0 +3EF8 +3838 +3018 +ENDCHAR +STARTCHAR uni272C +ENCODING 10028 +BBX 15 12 0 1 +BITMAP +0100 +0280 +0280 +FC7E +4384 +27C8 +17D0 +1390 +1010 +27C8 +2828 +3018 +ENDCHAR +STARTCHAR uni272D +ENCODING 10029 +BBX 15 12 0 1 +BITMAP +0100 +0280 +1C70 +E10E +4FE4 +2388 +17D0 +1450 +1110 +2288 +2C68 +3018 +ENDCHAR +STARTCHAR uni272E +ENCODING 10030 +BBX 15 12 0 1 +BITMAP +0100 +0280 +1D70 +E38E +5FF4 +2FE8 +17D0 +16D0 +1550 +2288 +2C68 +3018 +ENDCHAR +STARTCHAR uni272F +ENCODING 10031 +BBX 15 13 0 0 +BITMAP +0100 +0380 +05C0 +F9FE +5D8C +27B8 +13F0 +0FD0 +1D90 +19D0 +32E8 +2C78 +3018 +ENDCHAR +STARTCHAR uni2730 +ENCODING 10032 +BBX 16 13 0 0 +BITMAP +0100 +0280 +02C0 +FC7E +4007 +383E +083C +1010 +1118 +27C8 +2F2C +3C1C +180C +ENDCHAR +STARTCHAR uni2731 +ENCODING 10033 +BBX 15 13 0 0 +BITMAP +0380 +0380 +0380 +4384 +F39E +3FFC +0FF0 +3FFC +F39E +4384 +0380 +0380 +0380 +ENDCHAR +STARTCHAR uni2732 +ENCODING 10034 +BBX 15 13 0 0 +BITMAP +0380 +0380 +0380 +4384 +F39E +3C7C +0830 +3C7C +F39E +4384 +0380 +0380 +0380 +ENDCHAR +STARTCHAR uni2733 +ENCODING 10035 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +2108 +1110 +0D60 +0FE0 +07C0 +FFFE +07C0 +0FE0 +0D60 +1110 +2108 +0100 +0100 +ENDCHAR +STARTCHAR uni2734 +ENCODING 10036 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +2108 +1BB0 +1FF0 +0FE0 +1FE0 +FFFE +1FF0 +0FE0 +1FF0 +1BB0 +2108 +0100 +0100 +ENDCHAR +STARTCHAR uni2735 +ENCODING 10037 +BBX 15 15 0 -1 +BITMAP +0100 +0280 +3CF8 +2CC8 +2698 +32B8 +7D4C +8386 +4D7C +3A98 +32C8 +2668 +3E78 +0280 +0100 +ENDCHAR +STARTCHAR uni2736 +ENCODING 10038 +BBX 13 13 1 0 +BITMAP +0200 +0200 +0200 +8708 +7770 +3FE0 +1FC0 +3FE0 +7770 +8708 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni2737 +ENCODING 10039 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +0C60 +06C0 +E6CE +3BB8 +1FF0 +07C0 +1FF0 +3BB8 +E6CE +06C0 +0C60 +0820 +0820 +ENDCHAR +STARTCHAR uni2738 +ENCODING 10040 +BBX 15 15 0 -1 +BITMAP +0820 +0C60 +0EE0 +0FE0 +FFFE +7FFC +3FF8 +1FF0 +3FF8 +7FFC +FFFE +0FE0 +0EE0 +0C60 +0820 +ENDCHAR +STARTCHAR uni2739 +ENCODING 10041 +BBX 15 15 0 -1 +BITMAP +0100 +1930 +0FE0 +4FE4 +7FFC +3FF8 +3FF8 +FFFE +3FF8 +3FF8 +7FFC +4FE4 +0FE0 +1930 +0100 +ENDCHAR +STARTCHAR uni273A +ENCODING 10042 +BBX 15 15 0 -1 +BITMAP +0920 +4924 +2548 +1550 +CBA6 +37D8 +0FE0 +FFFE +0FE0 +37D8 +CBA6 +1550 +2548 +4924 +0920 +ENDCHAR +STARTCHAR uni273B +ENCODING 10043 +BBX 15 15 0 -1 +BITMAP +0100 +0380 +0380 +0380 +E10E +711C +0D60 +0380 +0D60 +711C +E10E +0380 +0380 +0380 +0100 +ENDCHAR +STARTCHAR uni273C +ENCODING 10044 +BBX 15 15 0 -1 +BITMAP +0380 +07C0 +07C0 +638C +F11E +F39E +3C78 +0820 +3C78 +F39E +F11E +638C +07C0 +07C0 +0380 +ENDCHAR +STARTCHAR uni273D +ENCODING 10045 +BBX 15 15 0 -1 +BITMAP +0380 +07C0 +07C0 +638C +F39E +F11E +3D78 +07C0 +3D78 +F11E +F39E +638C +07C0 +07C0 +0380 +ENDCHAR +STARTCHAR uni273E +ENCODING 10046 +BBX 15 15 0 -1 +BITMAP +0380 +0440 +0440 +745C +FC7E +FEFE +7FFC +2108 +4384 +87C2 +8FE2 +77DC +07C0 +07C0 +0380 +ENDCHAR +STARTCHAR uni273F +ENCODING 10047 +BBX 15 14 0 0 +BITMAP +0380 +07C0 +0FE0 +77DC +FFFE +FC7E +F01E +701C +1830 +3EF8 +7FFC +7EFC +7EFC +3C78 +ENDCHAR +STARTCHAR uni2740 +ENCODING 10048 +BBX 15 14 0 0 +BITMAP +0380 +0440 +0920 +793C +8542 +B39A +8FE2 +6FEC +17D0 +27C8 +4924 +5294 +4284 +3C78 +ENDCHAR +STARTCHAR uni2741 +ENCODING 10049 +BBX 15 15 0 -1 +BITMAP +0380 +3C78 +4544 +5114 +4D64 +6FEC +86C2 +BC7A +86C2 +6FEC +4D64 +5114 +4544 +3C78 +0380 +ENDCHAR +STARTCHAR uni2742 +ENCODING 10050 +BBX 15 15 0 -1 +BITMAP +07C0 +1EF0 +3EF8 +5C74 +67CC +FC7E +E82E +8822 +E82E +FC7E +67CC +5C74 +3EF8 +1EF0 +07C0 +ENDCHAR +STARTCHAR uni2743 +ENCODING 10051 +BBX 15 15 0 -1 +BITMAP +0380 +04C0 +04C0 +74DC +BCE6 +9F9E +4F3C +3FF8 +7264 +E672 +CE7A +765C +0640 +0640 +0380 +ENDCHAR +STARTCHAR uni2744 +ENCODING 10052 +BBX 15 13 0 0 +BITMAP +0100 +0540 +0380 +C926 +3118 +4D64 +0380 +4D64 +3118 +C926 +0380 +0540 +0100 +ENDCHAR +STARTCHAR uni2745 +ENCODING 10053 +BBX 15 13 0 0 +BITMAP +0100 +0540 +0BA0 +C926 +3118 +4D64 +8382 +4D64 +3118 +C926 +0BA0 +0540 +0100 +ENDCHAR +STARTCHAR uni2746 +ENCODING 10054 +BBX 15 15 0 -1 +BITMAP +0920 +0D60 +07C0 +1390 +C926 +3118 +ED6E +0380 +ED6E +3118 +C926 +1110 +07C0 +0D60 +0920 +ENDCHAR +STARTCHAR uni2747 +ENCODING 10055 +BBX 14 14 1 -1 +BITMAP +0780 +4788 +2790 +1320 +0B40 +E01C +FB7C +FB7C +E01C +0B40 +1320 +2790 +4788 +0780 +ENDCHAR +STARTCHAR uni2748 +ENCODING 10056 +BBX 15 15 0 -1 +BITMAP +07C0 +47C4 +27C8 +1390 +0BA0 +E00E +FBBE +FBBE +FBBE +E00E +0BA0 +1390 +27C8 +47C4 +07C0 +ENDCHAR +STARTCHAR uni2749 +ENCODING 10057 +BBX 15 15 0 -1 +BITMAP +0380 +07C0 +07C0 +77DC +FBBE +F93E +7D7C +07C0 +7D7C +F93E +FBBE +77DC +07C0 +07C0 +0380 +ENDCHAR +STARTCHAR uni274A +ENCODING 10058 +BBX 15 15 0 -1 +BITMAP +0100 +0380 +3398 +3118 +0920 +0540 +638C +FFFE +638C +0540 +0920 +3118 +3398 +0380 +0100 +ENDCHAR +STARTCHAR uni274B +ENCODING 10059 +BBX 15 15 0 -1 +BITMAP +0100 +0380 +3398 +3BB8 +1930 +07C0 +77DC +FFFE +77DC +07C0 +1930 +3BB8 +3398 +0380 +0100 +ENDCHAR +STARTCHAR uni274C +ENCODING 10060 +BBX 11 11 2 1 +BITMAP +60C0 +F1E0 +7BC0 +3F80 +1F00 +1F00 +3F80 +7BC0 +F1E0 +E0E0 +4040 +ENDCHAR +STARTCHAR uni274D +ENCODING 10061 +BBX 13 13 2 -1 +BITMAP +0F00 +30C0 +4020 +4030 +8010 +8018 +8018 +8018 +4038 +4030 +30F0 +0FE0 +0780 +ENDCHAR +STARTCHAR uni274E +ENCODING 10062 +BBX 13 13 1 0 +BITMAP +FFF8 +DFD8 +8F88 +C718 +E238 +F078 +F8F8 +F078 +E238 +C718 +8F88 +DFD8 +FFF8 +ENDCHAR +STARTCHAR uni274F +ENCODING 10063 +BBX 12 12 3 1 +BITMAP +FFC0 +8040 +8070 +8070 +8070 +8070 +8070 +8070 +8070 +FFF0 +3FF0 +3FF0 +ENDCHAR +STARTCHAR uni2750 +ENCODING 10064 +BBX 12 12 3 1 +BITMAP +3FF0 +3FF0 +FFF0 +8070 +8070 +8070 +8070 +8070 +8070 +8070 +8040 +FFC0 +ENDCHAR +STARTCHAR uni2751 +ENCODING 10065 +BBX 12 12 3 1 +BITMAP +FFC0 +8060 +8070 +8070 +8070 +8070 +8070 +8070 +8070 +FFF0 +7FF0 +3FF0 +ENDCHAR +STARTCHAR uni2752 +ENCODING 10066 +BBX 12 12 3 1 +BITMAP +3FF0 +7FF0 +FFF0 +8070 +8070 +8070 +8070 +8070 +8070 +8070 +8060 +FFC0 +ENDCHAR +STARTCHAR uni2753 +ENCODING 10067 +BBX 9 15 3 -2 +BITMAP +1C00 +7F00 +F380 +C180 +C780 +0F00 +1C00 +1800 +1800 +1800 +0000 +1800 +3C00 +3C00 +1800 +ENDCHAR +STARTCHAR uni2754 +ENCODING 10068 +BBX 9 16 3 -2 +BITMAP +3E00 +4100 +9C80 +A280 +4280 +0480 +0900 +1200 +1400 +1400 +1C00 +0000 +1C00 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uni2755 +ENCODING 10069 +BBX 7 15 4 -1 +BITMAP +38 +6C +C6 +82 +C6 +44 +6C +28 +28 +38 +00 +38 +44 +44 +38 +ENDCHAR +STARTCHAR uni2756 +ENCODING 10070 +BBX 13 13 1 0 +BITMAP +0200 +0700 +0F80 +0700 +2220 +7070 +F8F8 +7070 +2220 +0700 +0F80 +0700 +0200 +ENDCHAR +STARTCHAR uni2757 +ENCODING 10071 +BBX 4 14 6 0 +BITMAP +60 +F0 +F0 +F0 +F0 +F0 +F0 +60 +60 +60 +60 +00 +60 +60 +ENDCHAR +STARTCHAR uni2758 +ENCODING 10072 +BBX 2 15 7 -1 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni2759 +ENCODING 10073 +BBX 4 15 6 -1 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni275A +ENCODING 10074 +BBX 8 15 4 -1 +BITMAP +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +FF +ENDCHAR +STARTCHAR uni275B +ENCODING 10075 +BBX 7 10 4 4 +BITMAP +1C +70 +C0 +F8 +FC +FE +FE +FE +7C +38 +ENDCHAR +STARTCHAR uni275C +ENCODING 10076 +BBX 7 10 4 4 +BITMAP +38 +7C +FE +FE +FE +7E +3E +06 +1C +70 +ENDCHAR +STARTCHAR uni275D +ENCODING 10077 +BBX 15 10 0 4 +BITMAP +1C1C +7070 +C0C0 +F8F8 +FCFC +FEFE +FEFE +FEFE +7C7C +3838 +ENDCHAR +STARTCHAR uni275E +ENCODING 10078 +BBX 15 10 0 4 +BITMAP +3838 +7C7C +FEFE +FEFE +FEFE +7E7E +3E3E +0606 +1C1C +7070 +ENDCHAR +STARTCHAR uni275F +ENCODING 10079 +BBX 7 10 3 0 +BITMAP +38 +7C +FE +FE +FE +7E +3E +06 +1C +70 +ENDCHAR +STARTCHAR uni2760 +ENCODING 10080 +BBX 15 10 0 0 +BITMAP +3838 +7C7C +FEFE +FEFE +FEFE +7E7E +3E3E +0606 +1C1C +7070 +ENDCHAR +STARTCHAR uni2761 +ENCODING 10081 +BBX 14 14 1 -1 +BITMAP +0020 +0020 +1FFC +7FF0 +FC20 +FC20 +7E20 +1FE0 +0020 +6060 +F040 +F0C0 +6380 +3E00 +ENDCHAR +STARTCHAR uni2762 +ENCODING 10082 +BBX 9 15 3 -1 +BITMAP +1C00 +7F00 +FF80 +FF80 +FF80 +7F00 +1C00 +0800 +0800 +0000 +1C00 +3E00 +3E00 +3E00 +1C00 +ENDCHAR +STARTCHAR uni2763 +ENCODING 10083 +BBX 9 13 3 0 +BITMAP +7700 +FF80 +FF80 +FF80 +7F00 +1C00 +0800 +0000 +1C00 +3E00 +3E00 +3E00 +1C00 +ENDCHAR +STARTCHAR uni2764 +ENCODING 10084 +BBX 15 13 0 -1 +BITMAP +3C78 +7EFC +FFFE +FFFE +FFFE +7FFC +7FFC +3FF8 +1FF0 +0FE0 +07C0 +0380 +0100 +ENDCHAR +STARTCHAR uni2765 +ENCODING 10085 +BBX 13 15 1 -1 +BITMAP +3800 +7E00 +FF00 +FF80 +FFC0 +FFE0 +7FF0 +3FF8 +7FF0 +FFE0 +FFC0 +FF80 +FF00 +7E00 +3800 +ENDCHAR +STARTCHAR uni2766 +ENCODING 10086 +BBX 12 13 2 -1 +BITMAP +7C10 +87E0 +0600 +39C0 +7FE0 +7FE0 +7FE0 +3FC0 +1F80 +0F00 +0600 +0640 +0380 +ENDCHAR +STARTCHAR uni2767 +ENCODING 10087 +BBX 13 12 2 0 +BITMAP +8000 +4E00 +5F10 +5F88 +5FC8 +6FF8 +EFF0 +9FC0 +9F80 +9F00 +8E00 +4000 +ENDCHAR +STARTCHAR uni2768 +ENCODING 10088 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 3 -1 +BITMAP +10 +20 +60 +C0 +C0 +C0 +C0 +C0 +C0 +60 +20 +10 +ENDCHAR +STARTCHAR uni2769 +ENCODING 10089 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -1 +BITMAP +80 +40 +60 +30 +30 +30 +30 +30 +30 +60 +40 +80 +ENDCHAR +STARTCHAR uni276A +ENCODING 10090 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 -1 +BITMAP +18 +30 +70 +E0 +E0 +E0 +E0 +E0 +E0 +70 +30 +18 +ENDCHAR +STARTCHAR uni276B +ENCODING 10091 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 -1 +BITMAP +C0 +60 +70 +38 +38 +38 +38 +38 +38 +70 +60 +C0 +ENDCHAR +STARTCHAR uni276C +ENCODING 10092 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 -1 +BITMAP +18 +30 +30 +60 +60 +C0 +C0 +60 +60 +30 +30 +18 +ENDCHAR +STARTCHAR uni276D +ENCODING 10093 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 -1 +BITMAP +C0 +60 +60 +30 +30 +18 +18 +30 +30 +60 +60 +C0 +ENDCHAR +STARTCHAR uni276E +ENCODING 10094 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 2 -1 +BITMAP +1C +38 +38 +70 +70 +E0 +E0 +70 +70 +38 +38 +1C +ENDCHAR +STARTCHAR uni276F +ENCODING 10095 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +E0 +70 +70 +38 +38 +1C +1C +38 +38 +70 +70 +E0 +ENDCHAR +STARTCHAR uni2770 +ENCODING 10096 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +1E +3C +3C +78 +78 +F0 +F0 +78 +78 +3C +3C +1E +ENDCHAR +STARTCHAR uni2771 +ENCODING 10097 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -1 +BITMAP +F0 +78 +78 +3C +3C +1E +1E +3C +3C +78 +78 +F0 +ENDCHAR +STARTCHAR uni2772 +ENCODING 10098 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 3 -1 +BITMAP +20 +40 +80 +80 +80 +80 +80 +80 +80 +80 +40 +20 +ENDCHAR +STARTCHAR uni2773 +ENCODING 10099 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 2 -1 +BITMAP +80 +40 +20 +20 +20 +20 +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni2774 +ENCODING 10100 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +3C +70 +60 +60 +30 +30 +E0 +30 +30 +60 +60 +70 +3C +ENDCHAR +STARTCHAR uni2775 +ENCODING 10101 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +F0 +38 +18 +18 +30 +30 +1C +30 +30 +18 +18 +38 +F0 +ENDCHAR +STARTCHAR uni2776 +ENCODING 10102 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7EFC +7CFC +FAFE +FEFE +FEFE +FEFE +FEFE +7EFC +783C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni2777 +ENCODING 10103 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7C7C +7BBC +FBBE +FFBE +FF7E +FEFE +FDFE +7BFC +783C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni2778 +ENCODING 10104 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7C7C +7BBC +FBBE +FFBE +FE7E +FFBE +FBBE +7BBC +7C7C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni2779 +ENCODING 10105 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7F7C +7E7C +FD7E +FB7E +F77E +F03E +FF7E +7F7C +7F7C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni277A +ENCODING 10106 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +783C +7BFC +FBFE +FBFE +F87E +FFBE +FFBE +7BBC +7C7C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni277B +ENCODING 10107 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7E7C +7DFC +FBFE +FBFE +F87E +FBBE +FBBE +7BBC +7C7C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni277C +ENCODING 10108 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +783C +7FBC +FFBE +FF7E +FF7E +FF7E +FEFE +7EFC +7EFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni277D +ENCODING 10109 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7C7C +7BBC +FBBE +FBBE +FC7E +FBBE +FBBE +7BBC +7C7C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni277E +ENCODING 10110 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7C7C +7BBC +FBBE +FBBE +FC3E +FFBE +FFBE +7F7C +7CFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni277F +ENCODING 10111 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7FFC +7B9C +F36E +EB6E +FB6E +FB6E +FB6E +609C +7FFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni2780 +ENCODING 10112 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4084 +4184 +8382 +8182 +8182 +8182 +8182 +4184 +4184 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2781 +ENCODING 10113 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +47C4 +4FE4 +8C62 +8062 +81C2 +8702 +8C02 +4FE4 +4FE4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2782 +ENCODING 10114 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +47C4 +4FE4 +8C62 +8062 +81C2 +8062 +8C62 +4FE4 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2783 +ENCODING 10115 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +40E4 +41E4 +8362 +8662 +8C62 +9FF2 +9FF2 +4064 +4064 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2784 +ENCODING 10116 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4FE4 +4FE4 +8C02 +8FC2 +8FE2 +8062 +8C62 +4FE4 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2785 +ENCODING 10117 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +47C4 +4FE4 +8C02 +8FC2 +8FE2 +8C62 +8C62 +4FE4 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2786 +ENCODING 10118 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4FE4 +4FE4 +8062 +8062 +80C2 +8382 +8602 +4604 +4604 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2787 +ENCODING 10119 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +47C4 +4FE4 +8C62 +8C62 +87C2 +8C62 +8C62 +4FE4 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2788 +ENCODING 10120 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +47C4 +4FE4 +8C62 +8C62 +8FE2 +87E2 +8062 +4FE4 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni2789 +ENCODING 10121 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +44E4 +4DF4 +9DB2 +8DB2 +8DB2 +8DB2 +8DB2 +4DF4 +4CE4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni278A +ENCODING 10122 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7F7C +7E7C +FC7E +FE7E +FE7E +FE7E +FE7E +7E7C +7E7C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni278B +ENCODING 10123 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +783C +701C +F39E +FF9E +FE3E +F8FE +F3FE +701C +701C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni278C +ENCODING 10124 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +783C +701C +F39E +FF9E +FE3E +FF9E +F39E +701C +783C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni278D +ENCODING 10125 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7F1C +7E1C +FC9E +F99E +F39E +E00E +E00E +7F9C +7F9C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni278E +ENCODING 10126 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +701C +701C +F3FE +F03E +F01E +FF9E +F39E +701C +783C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni278F +ENCODING 10127 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +783C +701C +F3FE +F03E +F01E +F39E +F39E +701C +783C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni2790 +ENCODING 10128 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +701C +701C +FF9E +FF9E +FF3E +FC7E +F9FE +79FC +79FC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni2791 +ENCODING 10129 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +783C +701C +F39E +F39E +F83E +F39E +F39E +701C +783C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni2792 +ENCODING 10130 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +783C +701C +F39E +F39E +F01E +F81E +FF9E +701C +783C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni2793 +ENCODING 10131 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7B1C +720C +E24E +F24E +F24E +F24E +F24E +720C +731C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni2794 +ENCODING 10132 +BBX 15 13 0 0 +BITMAP +1F80 +0FC0 +07E0 +03F0 +FFF8 +FFFC +FFFE +FFFC +FFF8 +03F0 +07E0 +0FC0 +1F80 +ENDCHAR +STARTCHAR uni2795 +ENCODING 10133 +BBX 11 11 2 1 +BITMAP +0E00 +0E00 +0E00 +0E00 +FFE0 +FFE0 +FFE0 +0E00 +0E00 +0E00 +0E00 +ENDCHAR +STARTCHAR uni2796 +ENCODING 10134 +BBX 13 3 1 5 +BITMAP +FFF8 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni2797 +ENCODING 10135 +BBX 13 11 1 1 +BITMAP +0700 +0700 +0700 +0000 +FFF8 +FFF8 +FFF8 +0000 +0700 +0700 +0700 +ENDCHAR +STARTCHAR uni2798 +ENCODING 10136 +BBX 11 11 2 1 +BITMAP +2000 +7000 +F800 +7800 +3C80 +0C80 +0380 +03C0 +0FC0 +01C0 +0020 +ENDCHAR +STARTCHAR uni2799 +ENCODING 10137 +BBX 15 9 0 2 +BITMAP +0100 +0180 +E0C0 +FCF0 +FFFE +FCF0 +E0C0 +0180 +0100 +ENDCHAR +STARTCHAR uni279A +ENCODING 10138 +BBX 11 11 2 0 +BITMAP +0020 +01C0 +0FC0 +03C0 +0380 +0C80 +3C80 +7800 +F800 +7000 +2000 +ENDCHAR +STARTCHAR uni279B +ENCODING 10139 +BBX 15 9 0 2 +BITMAP +0200 +0100 +01C0 +00F0 +FFFE +00F0 +01C0 +0100 +0200 +ENDCHAR +STARTCHAR uni279C +ENCODING 10140 +BBX 15 13 0 0 +BITMAP +00C0 +01E0 +01F0 +00F8 +7FFC +FFFE +FFFE +FFFE +7FFC +00F8 +01F0 +01E0 +00C0 +ENDCHAR +STARTCHAR uni279D +ENCODING 10141 +BBX 15 11 0 1 +BITMAP +0010 +0010 +0018 +0018 +FFFC +FFFE +FFFC +0018 +0018 +0010 +0010 +ENDCHAR +STARTCHAR uni279E +ENCODING 10142 +BBX 15 13 0 0 +BITMAP +0010 +0010 +0018 +0018 +FFFC +FFFC +FFFE +FFFC +FFFC +0018 +0018 +0010 +0010 +ENDCHAR +STARTCHAR uni279F +ENCODING 10143 +BBX 15 9 0 2 +BITMAP +0020 +0030 +0038 +AAFC +AAFE +AAFC +0038 +0030 +0020 +ENDCHAR +STARTCHAR uni27A0 +ENCODING 10144 +BBX 15 9 0 2 +BITMAP +0020 +0030 +AAF8 +AAFC +AAFE +AAFC +AAF8 +0030 +0020 +ENDCHAR +STARTCHAR uni27A1 +ENCODING 10145 +BBX 15 9 0 2 +BITMAP +0020 +0030 +0038 +FFFC +FFFE +FFFC +0038 +0030 +0020 +ENDCHAR +STARTCHAR uni27A2 +ENCODING 10146 +BBX 14 15 1 -1 +BITMAP +8000 +E000 +5800 +4600 +2180 +2060 +1018 +0FFC +1FF8 +3FE0 +3F80 +7E00 +7800 +E000 +8000 +ENDCHAR +STARTCHAR uni27A3 +ENCODING 10147 +BBX 14 15 1 -1 +BITMAP +8000 +E000 +7800 +7E00 +3F80 +3FE0 +1FF8 +0FFC +1018 +2060 +2180 +4600 +5800 +E000 +8000 +ENDCHAR +STARTCHAR uni27A4 +ENCODING 10148 +BBX 14 15 1 -1 +BITMAP +8000 +E000 +7800 +7E00 +3F80 +3FE0 +1FF8 +0FFC +1FF8 +3FE0 +3F80 +7E00 +7800 +E000 +8000 +ENDCHAR +STARTCHAR uni27A5 +ENCODING 10149 +BBX 15 8 0 3 +BITMAP +8000 +8010 +C018 +7FFC +7FFE +3FFC +0018 +0010 +ENDCHAR +STARTCHAR uni27A6 +ENCODING 10150 +BBX 15 8 0 2 +BITMAP +0010 +0018 +3FFC +7FFE +7FFC +C018 +8010 +8000 +ENDCHAR +STARTCHAR uni27A7 +ENCODING 10151 +BBX 7 13 5 0 +BITMAP +10 +10 +18 +F8 +FC +FC +FE +FC +FC +F8 +18 +10 +10 +ENDCHAR +STARTCHAR uni27A8 +ENCODING 10152 +BBX 15 9 0 2 +BITMAP +0040 +0040 +FFE0 +FFF0 +FFFE +FFF0 +FFE0 +0040 +0040 +ENDCHAR +STARTCHAR uni27A9 +ENCODING 10153 +BBX 14 9 1 2 +BITMAP +00C0 +00E0 +FFB0 +8018 +800C +8018 +FFB0 +00E0 +00C0 +ENDCHAR +STARTCHAR uni27AA +ENCODING 10154 +BBX 14 9 1 2 +BITMAP +00C0 +00E0 +FFD0 +C008 +C004 +C008 +FFD0 +00E0 +00C0 +ENDCHAR +STARTCHAR uni27AB +ENCODING 10155 +BBX 15 13 0 -1 +BITMAP +0008 +0018 +0024 +0044 +3F82 +4002 +8006 +FF1E +FE7C +05F0 +0FC0 +0F00 +0C00 +ENDCHAR +STARTCHAR uni27AC +ENCODING 10156 +BBX 15 13 0 0 +BITMAP +0C00 +0F00 +0FC0 +05F0 +FE7C +FF1E +8006 +4002 +3F82 +0044 +0024 +0018 +0008 +ENDCHAR +STARTCHAR uni27AD +ENCODING 10157 +BBX 15 12 0 0 +BITMAP +0080 +00C0 +FFA0 +8010 +8008 +8004 +800E +801C +FFB8 +7FF0 +00E0 +0040 +ENDCHAR +STARTCHAR uni27AE +ENCODING 10158 +BBX 15 12 0 1 +BITMAP +0040 +00E0 +7FF0 +FFB8 +801C +800E +8004 +8008 +8010 +FFA0 +00C0 +0080 +ENDCHAR +STARTCHAR uni27AF +ENCODING 10159 +BBX 16 12 0 0 +BITMAP +0040 +0060 +0050 +FFC8 +4004 +4002 +4007 +FFCE +7FDC +0078 +0070 +0020 +ENDCHAR +STARTCHAR uni27B0 +ENCODING 10160 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 3 +BITMAP +C6 +38 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni27B1 +ENCODING 10161 +BBX 16 12 0 1 +BITMAP +0020 +0070 +0078 +7FDC +FFCE +4007 +4002 +4004 +FFC8 +0050 +0060 +0040 +ENDCHAR +STARTCHAR uni27B2 +ENCODING 10162 +BBX 14 15 1 -1 +BITMAP +0F80 +3FE0 +7EF0 +FE78 +FE38 +001C +000C +0004 +000C +001C +FE38 +FE78 +7EF0 +3FE0 +0F80 +ENDCHAR +STARTCHAR uni27B3 +ENCODING 10163 +BBX 15 7 0 3 +BITMAP +FE00 +4908 +248C +1FFE +248C +4908 +FE00 +ENDCHAR +STARTCHAR uni27B4 +ENCODING 10164 +BBX 11 11 2 1 +BITMAP +1000 +1800 +1C00 +FC00 +7C00 +3C20 +0220 +0160 +00E0 +01E0 +07E0 +ENDCHAR +STARTCHAR uni27B5 +ENCODING 10165 +BBX 14 5 1 4 +BITMAP +F810 +7C18 +3FFC +7C18 +F810 +ENDCHAR +STARTCHAR uni27B6 +ENCODING 10166 +BBX 11 11 2 0 +BITMAP +07E0 +01E0 +00E0 +0160 +0220 +3C20 +7C00 +FC00 +1C00 +1800 +1000 +ENDCHAR +STARTCHAR uni27B7 +ENCODING 10167 +BBX 11 11 2 1 +BITMAP +0800 +0C00 +0E00 +0E00 +FE20 +7E20 +3F60 +03E0 +01E0 +03E0 +0FE0 +ENDCHAR +STARTCHAR uni27B8 +ENCODING 10168 +BBX 15 9 0 2 +BITMAP +0020 +FC10 +7E18 +3FFC +1FFE +3FFC +7E18 +FC10 +0020 +ENDCHAR +STARTCHAR uni27B9 +ENCODING 10169 +BBX 11 11 2 0 +BITMAP +0FE0 +03E0 +01E0 +03E0 +3F60 +7E20 +FE20 +0E00 +0E00 +0C00 +0800 +ENDCHAR +STARTCHAR uni27BA +ENCODING 10170 +BBX 15 11 0 1 +BITMAP +0060 +00F0 +00F0 +7838 +FF0C +FFFE +FF0C +7838 +00F0 +00F0 +0060 +ENDCHAR +STARTCHAR uni27BB +ENCODING 10171 +BBX 15 9 0 2 +BITMAP +0040 +60E0 +78F0 +FC78 +FFFE +FC78 +78F0 +60E0 +0040 +ENDCHAR +STARTCHAR uni27BC +ENCODING 10172 +BBX 15 7 0 3 +BITMAP +F810 +7C18 +3E1C +1FFE +3E1C +7C18 +F810 +ENDCHAR +STARTCHAR uni27BD +ENCODING 10173 +BBX 15 9 0 2 +BITMAP +F860 +FC70 +7E78 +7FFC +3FFE +7FFC +7E78 +FC70 +F860 +ENDCHAR +STARTCHAR uni27BE +ENCODING 10174 +BBX 15 9 0 2 +BITMAP +0220 +0110 +0088 +FFC4 +0002 +FFC4 +0088 +0110 +0220 +ENDCHAR +STARTCHAR uni27BF +ENCODING 10175 +BBX 16 6 0 3 +BITMAP +E3C7 +1C38 +2244 +2244 +2244 +1C38 +ENDCHAR +STARTCHAR uni27C0 +ENCODING 10176 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +80 +88 +90 +A0 +C0 +FC +ENDCHAR +STARTCHAR uni27C1 +ENCODING 10177 +BBX 11 12 2 0 +BITMAP +0400 +0A00 +0A00 +1100 +1100 +2480 +2A80 +4A40 +5140 +9F20 +8020 +FFE0 +ENDCHAR +STARTCHAR uni27C2 +ENCODING 10178 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 0 +BITMAP +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni27C3 +ENCODING 10179 +BBX 10 8 3 1 +BITMAP +3FC0 +4000 +8180 +8240 +8240 +8180 +4000 +3FC0 +ENDCHAR +STARTCHAR uni27C4 +ENCODING 10180 +BBX 10 8 3 1 +BITMAP +FF00 +0080 +6040 +9040 +9040 +6040 +0080 +FF00 +ENDCHAR +STARTCHAR uni27C5 +ENCODING 10181 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +70 +88 +88 +10 +10 +20 +20 +40 +40 +38 +ENDCHAR +STARTCHAR uni27C6 +ENCODING 10182 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +70 +88 +88 +40 +40 +20 +20 +10 +10 +E0 +ENDCHAR +STARTCHAR uni27C7 +ENCODING 10183 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +82 +54 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni27C8 +ENCODING 10184 +BBX 14 8 1 1 +BITMAP +81FC +8200 +4400 +4400 +2400 +2400 +1200 +11FC +ENDCHAR +STARTCHAR uni27C9 +ENCODING 10185 +BBX 14 8 1 1 +BITMAP +FE04 +0104 +0088 +0088 +0090 +0090 +0120 +FE20 +ENDCHAR +STARTCHAR uni27CA +ENCODING 10186 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 2 0 +BITMAP +40 +40 +40 +40 +E0 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni27CB +ENCODING 10187 +BBX 8 8 4 1 +BITMAP +01 +02 +04 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni27CC +ENCODING 10188 +BBX 12 14 2 -2 +BITMAP +FFF0 +8000 +4000 +4000 +2000 +2000 +2000 +2000 +2000 +2000 +4000 +4000 +8000 +8000 +ENDCHAR +STARTCHAR uni27CD +ENCODING 10189 +BBX 8 8 4 1 +BITMAP +80 +40 +20 +10 +08 +04 +02 +01 +ENDCHAR +STARTCHAR uni27CE +ENCODING 10190 +BBX 11 11 3 0 +BITMAP +FFE0 +8020 +8420 +8420 +8A20 +8A20 +9120 +9120 +A0A0 +A0A0 +FFE0 +ENDCHAR +STARTCHAR uni27CF +ENCODING 10191 +BBX 11 11 3 0 +BITMAP +FFE0 +A0A0 +A0A0 +9120 +9120 +8A20 +8A20 +8420 +8420 +8020 +FFE0 +ENDCHAR +STARTCHAR uni27D0 +ENCODING 10192 +BBX 9 9 4 0 +BITMAP +0800 +1400 +2200 +4100 +8880 +4100 +2200 +1400 +0800 +ENDCHAR +STARTCHAR uni27D1 +ENCODING 10193 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +10 +10 +28 +28 +44 +54 +82 +82 +ENDCHAR +STARTCHAR uni27D2 +ENCODING 10194 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +8880 +8880 +8880 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uni27D3 +ENCODING 10195 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +04 +04 +24 +04 +04 +FC +ENDCHAR +STARTCHAR uni27D4 +ENCODING 10196 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +FC +80 +80 +90 +80 +80 +ENDCHAR +STARTCHAR uni27D5 +ENCODING 10197 +BBX 12 10 2 0 +BITMAP +E010 +3030 +2850 +2490 +2310 +2310 +2490 +2850 +3030 +E010 +ENDCHAR +STARTCHAR uni27D6 +ENCODING 10198 +BBX 12 10 2 0 +BITMAP +8070 +C0C0 +A140 +9240 +8C40 +8C40 +9240 +A140 +C0C0 +8070 +ENDCHAR +STARTCHAR uni27D7 +ENCODING 10199 +BBX 14 10 1 0 +BITMAP +E01C +3030 +2850 +2490 +2310 +2310 +2490 +2850 +3030 +E01C +ENDCHAR +STARTCHAR uni27D8 +ENCODING 10200 +BBX 9 12 3 0 +BITMAP +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +FF80 +ENDCHAR +STARTCHAR uni27D9 +ENCODING 10201 +BBX 9 12 3 0 +BITMAP +FF80 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni27DA +ENCODING 10202 +BBX 13 7 1 2 +BITMAP +0500 +0500 +FDF8 +0500 +FDF8 +0500 +0500 +ENDCHAR +STARTCHAR uni27DB +ENCODING 10203 +BBX 13 7 1 2 +BITMAP +0500 +0500 +0500 +FDF8 +0500 +0500 +0500 +ENDCHAR +STARTCHAR uni27DC +ENCODING 10204 +BBX 12 5 2 2 +BITMAP +7000 +8800 +8FF0 +8800 +7000 +ENDCHAR +STARTCHAR uni27DD +ENCODING 10205 +BBX 14 7 1 1 +BITMAP +8000 +8000 +8000 +FFFC +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni27DE +ENCODING 10206 +BBX 14 7 1 1 +BITMAP +0004 +0004 +0004 +FFFC +0004 +0004 +0004 +ENDCHAR +STARTCHAR uni27DF +ENCODING 10207 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +88 +70 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni27E0 +ENCODING 10208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +28 +28 +44 +44 +FE +44 +44 +28 +28 +10 +ENDCHAR +STARTCHAR uni27E1 +ENCODING 10209 +BBX 13 13 1 0 +BITMAP +0200 +0500 +0500 +0880 +1040 +6030 +8008 +6030 +1040 +0880 +0500 +0500 +0200 +ENDCHAR +STARTCHAR uni27E2 +ENCODING 10210 +BBX 15 13 0 0 +BITMAP +0080 +0140 +0140 +0220 +0410 +180C +E002 +180C +0410 +0220 +0140 +0140 +0080 +ENDCHAR +STARTCHAR uni27E3 +ENCODING 10211 +BBX 15 13 1 0 +BITMAP +0200 +0500 +0500 +0880 +1040 +6030 +800E +6030 +1040 +0880 +0500 +0500 +0200 +ENDCHAR +STARTCHAR uni27E4 +ENCODING 10212 +BBX 15 13 0 0 +BITMAP +1FFE +1002 +1002 +1002 +1002 +1002 +F002 +1002 +1002 +1002 +1002 +1002 +1FFE +ENDCHAR +STARTCHAR uni27E5 +ENCODING 10213 +BBX 15 13 1 0 +BITMAP +FFF0 +8010 +8010 +8010 +8010 +8010 +801E +8010 +8010 +8010 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni27E6 +ENCODING 10214 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 0 +BITMAP +F8 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +F8 +ENDCHAR +STARTCHAR uni27E7 +ENCODING 10215 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 0 +BITMAP +F8 +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +F8 +ENDCHAR +STARTCHAR uni27E8 +ENCODING 10216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 0 +BITMAP +10 +20 +20 +40 +40 +80 +80 +40 +40 +20 +20 +10 +ENDCHAR +STARTCHAR uni27E9 +ENCODING 10217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 0 +BITMAP +80 +40 +40 +20 +20 +10 +10 +20 +20 +40 +40 +80 +ENDCHAR +STARTCHAR uni27EA +ENCODING 10218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +14 +28 +28 +50 +50 +A0 +A0 +50 +50 +28 +28 +14 +ENDCHAR +STARTCHAR uni27EB +ENCODING 10219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +A0 +50 +50 +28 +28 +14 +14 +28 +28 +50 +50 +A0 +ENDCHAR +STARTCHAR uni27EC +ENCODING 10220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 3 -1 +BITMAP +10 +20 +60 +A0 +A0 +A0 +A0 +A0 +A0 +60 +20 +10 +ENDCHAR +STARTCHAR uni27ED +ENCODING 10221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 1 -1 +BITMAP +80 +40 +60 +50 +50 +50 +50 +50 +50 +60 +40 +80 +ENDCHAR +STARTCHAR uni27EE +ENCODING 10222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 4 -1 +BITMAP +20 +40 +80 +80 +80 +80 +80 +80 +80 +80 +40 +20 +ENDCHAR +STARTCHAR uni27EF +ENCODING 10223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 1 -1 +BITMAP +80 +40 +20 +20 +20 +20 +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni27F0 +ENCODING 10224 +BBX 11 12 2 0 +BITMAP +0400 +0A00 +1B00 +2A80 +6AC0 +AAA0 +2A80 +2A80 +2A80 +2A80 +2A80 +2A80 +ENDCHAR +STARTCHAR uni27F1 +ENCODING 10225 +BBX 11 12 2 0 +BITMAP +2A80 +2A80 +2A80 +2A80 +2A80 +2A80 +AAA0 +6AC0 +2A80 +1B00 +0A00 +0400 +ENDCHAR +STARTCHAR uni27F2 +ENCODING 10226 +BBX 12 10 2 0 +BITMAP +0780 +0840 +1020 +2010 +A810 +7010 +2010 +0020 +0840 +0780 +ENDCHAR +STARTCHAR uni27F3 +ENCODING 10227 +BBX 12 10 2 0 +BITMAP +1E00 +2100 +4080 +8040 +8150 +80E0 +8040 +4000 +2100 +1E00 +ENDCHAR +STARTCHAR uni27F4 +ENCODING 10228 +BBX 15 7 0 3 +BITMAP +0380 +0548 +0924 +FFFE +0924 +0548 +0380 +ENDCHAR +STARTCHAR uni27F5 +ENCODING 10229 +BBX 15 5 1 4 +BITMAP +2000 +4000 +FFFE +4000 +2000 +ENDCHAR +STARTCHAR uni27F6 +ENCODING 10230 +BBX 15 5 0 4 +BITMAP +0008 +0004 +FFFE +0004 +0008 +ENDCHAR +STARTCHAR uni27F7 +ENCODING 10231 +BBX 14 5 1 4 +BITMAP +2010 +4008 +FFFC +4008 +2010 +ENDCHAR +STARTCHAR uni27F8 +ENCODING 10232 +BBX 15 7 0 3 +BITMAP +1000 +2000 +7FFE +8000 +7FFE +2000 +1000 +ENDCHAR +STARTCHAR uni27F9 +ENCODING 10233 +BBX 15 7 0 3 +BITMAP +0010 +0008 +FFFC +0002 +FFFC +0008 +0010 +ENDCHAR +STARTCHAR uni27FA +ENCODING 10234 +BBX 14 7 1 3 +BITMAP +1020 +2010 +7FF8 +8004 +7FF8 +2010 +1020 +ENDCHAR +STARTCHAR uni27FB +ENCODING 10235 +BBX 14 5 1 4 +BITMAP +2004 +4004 +FFFC +4004 +2004 +ENDCHAR +STARTCHAR uni27FC +ENCODING 10236 +BBX 14 5 1 4 +BITMAP +8010 +8008 +FFFC +8008 +8010 +ENDCHAR +STARTCHAR uni27FD +ENCODING 10237 +BBX 14 7 1 3 +BITMAP +1004 +2004 +7FFC +8004 +7FFC +2004 +1004 +ENDCHAR +STARTCHAR uni27FE +ENCODING 10238 +BBX 14 7 1 3 +BITMAP +8020 +8010 +FFF8 +8004 +FFF8 +8010 +8020 +ENDCHAR +STARTCHAR uni27FF +ENCODING 10239 +BBX 15 5 0 4 +BITMAP +0008 +2224 +D55E +0884 +0008 +ENDCHAR +STARTCHAR uni2800 +ENCODING 10240 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +88 +00 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni2801 +ENCODING 10241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +88 +00 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni2802 +ENCODING 10242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +C8 +C0 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni2803 +ENCODING 10243 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni2804 +ENCODING 10244 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +88 +00 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni2805 +ENCODING 10245 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +88 +00 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni2806 +ENCODING 10246 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +C8 +C0 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni2807 +ENCODING 10247 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni2808 +ENCODING 10248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +88 +00 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni2809 +ENCODING 10249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +88 +00 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni280A +ENCODING 10250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +C8 +C0 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni280B +ENCODING 10251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni280C +ENCODING 10252 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +88 +00 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni280D +ENCODING 10253 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +88 +00 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni280E +ENCODING 10254 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +C8 +C0 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni280F +ENCODING 10255 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni2810 +ENCODING 10256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +98 +18 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni2811 +ENCODING 10257 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +98 +18 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni2812 +ENCODING 10258 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +D8 +D8 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni2813 +ENCODING 10259 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni2814 +ENCODING 10260 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +98 +18 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni2815 +ENCODING 10261 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +98 +18 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni2816 +ENCODING 10262 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +D8 +D8 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni2817 +ENCODING 10263 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni2818 +ENCODING 10264 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +98 +18 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni2819 +ENCODING 10265 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +98 +18 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni281A +ENCODING 10266 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +D8 +D8 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni281B +ENCODING 10267 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +88 +00 +00 +88 +ENDCHAR +STARTCHAR uni281C +ENCODING 10268 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +98 +18 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni281D +ENCODING 10269 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +98 +18 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni281E +ENCODING 10270 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +D8 +D8 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni281F +ENCODING 10271 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +C8 +C0 +00 +88 +ENDCHAR +STARTCHAR uni2820 +ENCODING 10272 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +88 +00 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni2821 +ENCODING 10273 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +88 +00 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni2822 +ENCODING 10274 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +C8 +C0 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni2823 +ENCODING 10275 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni2824 +ENCODING 10276 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +88 +00 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni2825 +ENCODING 10277 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +88 +00 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni2826 +ENCODING 10278 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +C8 +C0 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni2827 +ENCODING 10279 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni2828 +ENCODING 10280 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +88 +00 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni2829 +ENCODING 10281 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +88 +00 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni282A +ENCODING 10282 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +C8 +C0 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni282B +ENCODING 10283 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni282C +ENCODING 10284 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +88 +00 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni282D +ENCODING 10285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +88 +00 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni282E +ENCODING 10286 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +C8 +C0 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni282F +ENCODING 10287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni2830 +ENCODING 10288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +98 +18 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni2831 +ENCODING 10289 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +98 +18 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni2832 +ENCODING 10290 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +D8 +D8 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni2833 +ENCODING 10291 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni2834 +ENCODING 10292 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +98 +18 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni2835 +ENCODING 10293 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +98 +18 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni2836 +ENCODING 10294 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +00 +00 +D8 +D8 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni2837 +ENCODING 10295 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni2838 +ENCODING 10296 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +98 +18 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni2839 +ENCODING 10297 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +98 +18 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni283A +ENCODING 10298 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +D8 +D8 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni283B +ENCODING 10299 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +98 +18 +00 +88 +ENDCHAR +STARTCHAR uni283C +ENCODING 10300 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +98 +18 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni283D +ENCODING 10301 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +98 +18 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni283E +ENCODING 10302 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +98 +18 +00 +D8 +D8 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni283F +ENCODING 10303 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +00 +88 +ENDCHAR +STARTCHAR uni2840 +ENCODING 10304 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +88 +00 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2841 +ENCODING 10305 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +88 +00 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2842 +ENCODING 10306 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +C8 +C0 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2843 +ENCODING 10307 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2844 +ENCODING 10308 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +88 +00 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2845 +ENCODING 10309 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +88 +00 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2846 +ENCODING 10310 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +C8 +C0 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2847 +ENCODING 10311 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2848 +ENCODING 10312 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +88 +00 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2849 +ENCODING 10313 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +88 +00 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni284A +ENCODING 10314 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +C8 +C0 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni284B +ENCODING 10315 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni284C +ENCODING 10316 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +88 +00 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni284D +ENCODING 10317 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +88 +00 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni284E +ENCODING 10318 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +C8 +C0 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni284F +ENCODING 10319 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2850 +ENCODING 10320 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +98 +18 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2851 +ENCODING 10321 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +98 +18 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2852 +ENCODING 10322 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +D8 +D8 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2853 +ENCODING 10323 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2854 +ENCODING 10324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +98 +18 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2855 +ENCODING 10325 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +98 +18 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2856 +ENCODING 10326 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +D8 +D8 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2857 +ENCODING 10327 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2858 +ENCODING 10328 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +98 +18 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2859 +ENCODING 10329 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +98 +18 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni285A +ENCODING 10330 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +D8 +D8 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni285B +ENCODING 10331 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +88 +00 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni285C +ENCODING 10332 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +98 +18 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni285D +ENCODING 10333 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +98 +18 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni285E +ENCODING 10334 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +D8 +D8 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni285F +ENCODING 10335 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +C8 +C0 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2860 +ENCODING 10336 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +88 +00 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2861 +ENCODING 10337 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +88 +00 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2862 +ENCODING 10338 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +C8 +C0 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2863 +ENCODING 10339 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2864 +ENCODING 10340 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +88 +00 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2865 +ENCODING 10341 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +88 +00 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2866 +ENCODING 10342 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +C8 +C0 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2867 +ENCODING 10343 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2868 +ENCODING 10344 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +88 +00 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2869 +ENCODING 10345 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +88 +00 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni286A +ENCODING 10346 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +C8 +C0 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni286B +ENCODING 10347 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni286C +ENCODING 10348 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +88 +00 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni286D +ENCODING 10349 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +88 +00 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni286E +ENCODING 10350 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +C8 +C0 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni286F +ENCODING 10351 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2870 +ENCODING 10352 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +98 +18 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2871 +ENCODING 10353 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +98 +18 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2872 +ENCODING 10354 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +D8 +D8 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2873 +ENCODING 10355 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2874 +ENCODING 10356 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +98 +18 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2875 +ENCODING 10357 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +98 +18 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2876 +ENCODING 10358 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +D8 +D8 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2877 +ENCODING 10359 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2878 +ENCODING 10360 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +98 +18 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2879 +ENCODING 10361 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +98 +18 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni287A +ENCODING 10362 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +D8 +D8 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni287B +ENCODING 10363 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +98 +18 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni287C +ENCODING 10364 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +98 +18 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni287D +ENCODING 10365 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +98 +18 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni287E +ENCODING 10366 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +D8 +D8 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni287F +ENCODING 10367 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +00 +C8 +C0 +ENDCHAR +STARTCHAR uni2880 +ENCODING 10368 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +88 +00 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni2881 +ENCODING 10369 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +88 +00 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni2882 +ENCODING 10370 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +C8 +C0 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni2883 +ENCODING 10371 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni2884 +ENCODING 10372 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +88 +00 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni2885 +ENCODING 10373 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +88 +00 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni2886 +ENCODING 10374 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +C8 +C0 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni2887 +ENCODING 10375 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni2888 +ENCODING 10376 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +88 +00 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni2889 +ENCODING 10377 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +88 +00 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni288A +ENCODING 10378 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +C8 +C0 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni288B +ENCODING 10379 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni288C +ENCODING 10380 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +88 +00 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni288D +ENCODING 10381 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +88 +00 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni288E +ENCODING 10382 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +C8 +C0 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni288F +ENCODING 10383 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni2890 +ENCODING 10384 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +98 +18 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni2891 +ENCODING 10385 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +98 +18 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni2892 +ENCODING 10386 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +D8 +D8 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni2893 +ENCODING 10387 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni2894 +ENCODING 10388 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +98 +18 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni2895 +ENCODING 10389 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +98 +18 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni2896 +ENCODING 10390 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +D8 +D8 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni2897 +ENCODING 10391 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni2898 +ENCODING 10392 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +98 +18 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni2899 +ENCODING 10393 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +98 +18 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni289A +ENCODING 10394 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +D8 +D8 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni289B +ENCODING 10395 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +88 +00 +00 +98 +18 +ENDCHAR +STARTCHAR uni289C +ENCODING 10396 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +98 +18 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni289D +ENCODING 10397 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +98 +18 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni289E +ENCODING 10398 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +D8 +D8 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni289F +ENCODING 10399 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +C8 +C0 +00 +98 +18 +ENDCHAR +STARTCHAR uni28A0 +ENCODING 10400 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +88 +00 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28A1 +ENCODING 10401 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +88 +00 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28A2 +ENCODING 10402 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +C8 +C0 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28A3 +ENCODING 10403 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28A4 +ENCODING 10404 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +88 +00 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28A5 +ENCODING 10405 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +88 +00 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28A6 +ENCODING 10406 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +C8 +C0 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28A7 +ENCODING 10407 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28A8 +ENCODING 10408 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +88 +00 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28A9 +ENCODING 10409 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +88 +00 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28AA +ENCODING 10410 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +C8 +C0 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28AB +ENCODING 10411 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28AC +ENCODING 10412 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +88 +00 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28AD +ENCODING 10413 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +88 +00 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28AE +ENCODING 10414 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +C8 +C0 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28AF +ENCODING 10415 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28B0 +ENCODING 10416 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +98 +18 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28B1 +ENCODING 10417 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +98 +18 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28B2 +ENCODING 10418 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +D8 +D8 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28B3 +ENCODING 10419 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28B4 +ENCODING 10420 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +98 +18 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28B5 +ENCODING 10421 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +98 +18 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28B6 +ENCODING 10422 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +D8 +D8 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28B7 +ENCODING 10423 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28B8 +ENCODING 10424 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +98 +18 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28B9 +ENCODING 10425 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +98 +18 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28BA +ENCODING 10426 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +D8 +D8 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28BB +ENCODING 10427 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +98 +18 +00 +98 +18 +ENDCHAR +STARTCHAR uni28BC +ENCODING 10428 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +98 +18 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28BD +ENCODING 10429 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +98 +18 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28BE +ENCODING 10430 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +D8 +D8 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28BF +ENCODING 10431 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +00 +98 +18 +ENDCHAR +STARTCHAR uni28C0 +ENCODING 10432 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +88 +00 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C1 +ENCODING 10433 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +88 +00 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C2 +ENCODING 10434 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +C8 +C0 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C3 +ENCODING 10435 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C4 +ENCODING 10436 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +88 +00 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C5 +ENCODING 10437 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +88 +00 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C6 +ENCODING 10438 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +C8 +C0 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C7 +ENCODING 10439 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C8 +ENCODING 10440 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +88 +00 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28C9 +ENCODING 10441 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +88 +00 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28CA +ENCODING 10442 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +C8 +C0 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28CB +ENCODING 10443 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28CC +ENCODING 10444 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +88 +00 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28CD +ENCODING 10445 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +88 +00 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28CE +ENCODING 10446 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +C8 +C0 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28CF +ENCODING 10447 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D0 +ENCODING 10448 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +98 +18 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D1 +ENCODING 10449 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +98 +18 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D2 +ENCODING 10450 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +D8 +D8 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D3 +ENCODING 10451 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D4 +ENCODING 10452 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +98 +18 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D5 +ENCODING 10453 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +98 +18 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D6 +ENCODING 10454 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +D8 +D8 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D7 +ENCODING 10455 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D8 +ENCODING 10456 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +98 +18 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28D9 +ENCODING 10457 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +98 +18 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28DA +ENCODING 10458 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +D8 +D8 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28DB +ENCODING 10459 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +88 +00 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28DC +ENCODING 10460 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +98 +18 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28DD +ENCODING 10461 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +98 +18 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28DE +ENCODING 10462 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +D8 +D8 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28DF +ENCODING 10463 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +C8 +C0 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E0 +ENCODING 10464 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +88 +00 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E1 +ENCODING 10465 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +88 +00 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E2 +ENCODING 10466 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +C8 +C0 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E3 +ENCODING 10467 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E4 +ENCODING 10468 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +88 +00 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E5 +ENCODING 10469 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +88 +00 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E6 +ENCODING 10470 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +C8 +C0 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E7 +ENCODING 10471 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +C8 +C0 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E8 +ENCODING 10472 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +88 +00 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28E9 +ENCODING 10473 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +88 +00 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28EA +ENCODING 10474 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +C8 +C0 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28EB +ENCODING 10475 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28EC +ENCODING 10476 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +88 +00 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28ED +ENCODING 10477 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +88 +00 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28EE +ENCODING 10478 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +C8 +C0 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28EF +ENCODING 10479 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +C8 +C0 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F0 +ENCODING 10480 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +98 +18 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F1 +ENCODING 10481 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +98 +18 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F2 +ENCODING 10482 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +D8 +D8 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F3 +ENCODING 10483 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F4 +ENCODING 10484 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +98 +18 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F5 +ENCODING 10485 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +98 +18 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F6 +ENCODING 10486 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +88 +00 +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F7 +ENCODING 10487 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C8 +C0 +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F8 +ENCODING 10488 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +98 +18 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28F9 +ENCODING 10489 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +98 +18 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28FA +ENCODING 10490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +D8 +D8 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28FB +ENCODING 10491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +98 +18 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28FC +ENCODING 10492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +98 +18 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28FD +ENCODING 10493 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +98 +18 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28FE +ENCODING 10494 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +98 +18 +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni28FF +ENCODING 10495 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni2900 +ENCODING 10496 +BBX 15 5 0 4 +BITMAP +0228 +0214 +FFFE +0214 +0228 +ENDCHAR +STARTCHAR uni2901 +ENCODING 10497 +BBX 15 5 0 4 +BITMAP +0528 +0514 +FFFE +0514 +0528 +ENDCHAR +STARTCHAR uni2902 +ENCODING 10498 +BBX 15 7 1 3 +BITMAP +1100 +2100 +7FFE +8100 +7FFE +2100 +1100 +ENDCHAR +STARTCHAR uni2903 +ENCODING 10499 +BBX 15 7 0 3 +BITMAP +0110 +0108 +FFFC +0102 +FFFC +0108 +0110 +ENDCHAR +STARTCHAR uni2904 +ENCODING 10500 +BBX 13 7 2 3 +BITMAP +1240 +2220 +7FF0 +8208 +7FF0 +2220 +1240 +ENDCHAR +STARTCHAR uni2905 +ENCODING 10501 +BBX 14 5 1 4 +BITMAP +8050 +8028 +FFFC +8028 +8050 +ENDCHAR +STARTCHAR uni2906 +ENCODING 10502 +BBX 14 7 1 3 +BITMAP +1000 +2004 +7FFC +8004 +7FFC +2004 +1000 +ENDCHAR +STARTCHAR uni2907 +ENCODING 10503 +BBX 14 7 1 3 +BITMAP +0020 +8010 +FFF8 +8004 +FFF8 +8010 +0020 +ENDCHAR +STARTCHAR uni2908 +ENCODING 10504 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 0 +BITMAP +20 +20 +20 +20 +20 +20 +20 +F8 +20 +20 +20 +A8 +70 +20 +ENDCHAR +STARTCHAR uni2909 +ENCODING 10505 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -2 +BITMAP +20 +70 +A8 +20 +20 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni290A +ENCODING 10506 +BBX 9 12 3 0 +BITMAP +0800 +1C00 +2A00 +6B00 +AA80 +2A00 +2A00 +2A00 +2A00 +2A00 +2A00 +2A00 +ENDCHAR +STARTCHAR uni290B +ENCODING 10507 +BBX 9 12 3 0 +BITMAP +2A00 +2A00 +2A00 +2A00 +2A00 +2A00 +2A00 +AA80 +6B00 +2A00 +1C00 +0800 +ENDCHAR +STARTCHAR uni290C +ENCODING 10508 +BBX 15 5 1 4 +BITMAP +2000 +4000 +FEFE +4000 +2000 +ENDCHAR +STARTCHAR uni290D +ENCODING 10509 +BBX 15 5 0 4 +BITMAP +0008 +0004 +FEFE +0004 +0008 +ENDCHAR +STARTCHAR uni290E +ENCODING 10510 +BBX 15 5 1 4 +BITMAP +2000 +4000 +FBDE +4000 +2000 +ENDCHAR +STARTCHAR uni290F +ENCODING 10511 +BBX 15 5 0 4 +BITMAP +0008 +0004 +F7BE +0004 +0008 +ENDCHAR +STARTCHAR uni2910 +ENCODING 10512 +BBX 14 5 1 4 +BITMAP +8050 +4028 +36FC +4028 +8050 +ENDCHAR +STARTCHAR uni2911 +ENCODING 10513 +BBX 15 5 0 4 +BITMAP +0008 +0004 +AAAE +0004 +0008 +ENDCHAR +STARTCHAR uni2912 +ENCODING 10514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +FE +38 +54 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2913 +ENCODING 10515 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +54 +38 +FE +ENDCHAR +STARTCHAR uni2914 +ENCODING 10516 +BBX 14 5 1 4 +BITMAP +8210 +4208 +3FFC +4208 +8210 +ENDCHAR +STARTCHAR uni2915 +ENCODING 10517 +BBX 14 5 1 4 +BITMAP +8510 +4508 +3FFC +4508 +8510 +ENDCHAR +STARTCHAR uni2916 +ENCODING 10518 +BBX 14 5 1 4 +BITMAP +8050 +4028 +3FFC +4028 +8050 +ENDCHAR +STARTCHAR uni2917 +ENCODING 10519 +BBX 14 5 1 4 +BITMAP +8250 +4228 +3FFC +4228 +8250 +ENDCHAR +STARTCHAR uni2918 +ENCODING 10520 +BBX 14 5 1 4 +BITMAP +8A50 +4A28 +3FFC +4A28 +8A50 +ENDCHAR +STARTCHAR uni2919 +ENCODING 10521 +BBX 14 5 1 4 +BITMAP +0004 +0008 +FFF0 +0008 +0004 +ENDCHAR +STARTCHAR uni291A +ENCODING 10522 +BBX 14 5 1 4 +BITMAP +8000 +4000 +3FFC +4000 +8000 +ENDCHAR +STARTCHAR uni291B +ENCODING 10523 +BBX 14 5 1 4 +BITMAP +0024 +0048 +FFF0 +0048 +0024 +ENDCHAR +STARTCHAR uni291C +ENCODING 10524 +BBX 14 5 1 4 +BITMAP +9000 +4800 +3FFC +4800 +9000 +ENDCHAR +STARTCHAR uni291D +ENCODING 10525 +BBX 15 5 1 4 +BITMAP +2200 +7400 +FFFE +7400 +2200 +ENDCHAR +STARTCHAR uni291E +ENCODING 10526 +BBX 15 5 1 4 +BITMAP +0088 +005C +FFFE +005C +0088 +ENDCHAR +STARTCHAR uni291F +ENCODING 10527 +BBX 14 5 1 4 +BITMAP +2204 +7404 +FFFC +7404 +2204 +ENDCHAR +STARTCHAR uni2920 +ENCODING 10528 +BBX 14 5 1 4 +BITMAP +8110 +80B8 +FFFC +80B8 +8110 +ENDCHAR +STARTCHAR uni2921 +ENCODING 10529 +BBX 13 13 2 0 +BITMAP +F000 +C000 +A000 +9000 +0800 +0400 +0200 +0100 +0080 +0048 +0028 +0018 +0078 +ENDCHAR +STARTCHAR uni2922 +ENCODING 10530 +BBX 13 13 2 0 +BITMAP +0078 +0018 +0028 +0048 +0080 +0100 +0200 +0400 +0800 +9000 +A000 +C000 +F000 +ENDCHAR +STARTCHAR uni2923 +ENCODING 10531 +BBX 12 13 2 0 +BITMAP +F000 +C000 +A000 +9000 +0800 +0400 +0200 +0100 +0080 +0040 +0020 +0090 +0060 +ENDCHAR +STARTCHAR uni2924 +ENCODING 10532 +BBX 12 13 1 0 +BITMAP +00F0 +0030 +0050 +0090 +0100 +0200 +0400 +0800 +1000 +2000 +4000 +9000 +6000 +ENDCHAR +STARTCHAR uni2925 +ENCODING 10533 +BBX 12 13 1 0 +BITMAP +6000 +9000 +4000 +2000 +1000 +0800 +0400 +0200 +0100 +0090 +0050 +0030 +00F0 +ENDCHAR +STARTCHAR uni2926 +ENCODING 10534 +BBX 12 13 1 0 +BITMAP +0060 +0090 +0020 +0040 +0080 +0100 +0200 +0400 +0800 +9000 +A000 +C000 +F000 +ENDCHAR +STARTCHAR uni2927 +ENCODING 10535 +BBX 14 13 1 0 +BITMAP +F03C +C00C +A014 +9024 +0840 +0480 +0300 +0300 +0480 +0840 +1020 +2010 +4008 +ENDCHAR +STARTCHAR uni2928 +ENCODING 10536 +BBX 13 14 2 -1 +BITMAP +0078 +8018 +4028 +2048 +1080 +0900 +0600 +0600 +0900 +1080 +2048 +4028 +8018 +0078 +ENDCHAR +STARTCHAR uni2929 +ENCODING 10537 +BBX 14 13 1 0 +BITMAP +4008 +2010 +1020 +0840 +0480 +0300 +0300 +0480 +0840 +9024 +A014 +C00C +F03C +ENDCHAR +STARTCHAR uni292A +ENCODING 10538 +BBX 13 14 1 -1 +BITMAP +F000 +C008 +A010 +9020 +0840 +0480 +0300 +0300 +0480 +0840 +9020 +A010 +C008 +F000 +ENDCHAR +STARTCHAR uni292B +ENCODING 10539 +BBX 12 12 2 0 +BITMAP +8010 +4020 +2040 +1080 +0100 +0200 +0400 +0800 +1080 +2040 +4020 +8010 +ENDCHAR +STARTCHAR uni292C +ENCODING 10540 +BBX 12 12 2 0 +BITMAP +8010 +4020 +2040 +1080 +0800 +0400 +0200 +0100 +1080 +2040 +4020 +8010 +ENDCHAR +STARTCHAR uni292D +ENCODING 10541 +BBX 13 14 2 -1 +BITMAP +0078 +8018 +4028 +2048 +1080 +0800 +0400 +0200 +0100 +1080 +2048 +4028 +8018 +0078 +ENDCHAR +STARTCHAR uni292E +ENCODING 10542 +BBX 13 14 2 -1 +BITMAP +0078 +8018 +4028 +2048 +1080 +0100 +0200 +0400 +0800 +1080 +2048 +4028 +8018 +0078 +ENDCHAR +STARTCHAR uni292F +ENCODING 10543 +BBX 13 13 2 0 +BITMAP +0078 +8018 +4028 +2048 +1080 +0800 +0400 +0200 +0100 +1080 +2040 +4020 +8010 +ENDCHAR +STARTCHAR uni2930 +ENCODING 10544 +BBX 13 13 2 0 +BITMAP +8010 +4020 +2040 +1080 +0100 +0200 +0400 +0800 +1080 +2048 +4028 +8018 +0078 +ENDCHAR +STARTCHAR uni2931 +ENCODING 10545 +BBX 14 13 1 0 +BITMAP +F03C +C00C +A014 +9024 +0840 +0080 +0100 +0200 +0400 +0840 +1020 +2010 +4008 +ENDCHAR +STARTCHAR uni2932 +ENCODING 10546 +BBX 14 13 1 0 +BITMAP +F03C +C00C +A014 +9024 +0840 +0400 +0200 +0100 +0080 +0840 +1020 +2010 +4008 +ENDCHAR +STARTCHAR uni2933 +ENCODING 10547 +BBX 15 5 0 4 +BITMAP +3C08 +4204 +81FE +0004 +0008 +ENDCHAR +STARTCHAR uni2934 +ENCODING 10548 +BBX 14 7 0 6 +BITMAP +0010 +0038 +0054 +0010 +0010 +0020 +FFC0 +ENDCHAR +STARTCHAR uni2935 +ENCODING 10549 +BBX 14 8 0 4 +BITMAP +FFC0 +0020 +0010 +0010 +0010 +0054 +0038 +0010 +ENDCHAR +STARTCHAR uni2936 +ENCODING 10550 +BBX 10 10 3 4 +BITMAP +0040 +0040 +0040 +0040 +0040 +2040 +4080 +FF00 +4000 +2000 +ENDCHAR +STARTCHAR uni2937 +ENCODING 10551 +BBX 10 10 3 4 +BITMAP +8000 +8000 +8000 +8000 +8000 +8100 +4080 +3FC0 +0080 +0100 +ENDCHAR +STARTCHAR uni2938 +ENCODING 10552 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 0 +BITMAP +80 +40 +20 +20 +10 +10 +10 +10 +A0 +A0 +C0 +F0 +ENDCHAR +STARTCHAR uni2939 +ENCODING 10553 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 0 +BITMAP +10 +20 +40 +40 +80 +80 +80 +80 +50 +50 +30 +F0 +ENDCHAR +STARTCHAR uni293A +ENCODING 10554 +BBX 12 4 2 4 +BITMAP +8F00 +B0C0 +C020 +F010 +ENDCHAR +STARTCHAR uni293B +ENCODING 10555 +BBX 12 4 2 4 +BITMAP +80F0 +4030 +30D0 +0F10 +ENDCHAR +STARTCHAR uni293C +ENCODING 10556 +BBX 12 5 2 3 +BITMAP +0F10 +30D0 +4030 +80F0 +1C00 +ENDCHAR +STARTCHAR uni293D +ENCODING 10557 +BBX 12 6 2 2 +BITMAP +8F00 +B0C0 +C020 +F110 +0380 +0100 +ENDCHAR +STARTCHAR uni293E +ENCODING 10558 +BBX 12 8 2 3 +BITMAP +0040 +0020 +0010 +0010 +F010 +C020 +B0C0 +8F00 +ENDCHAR +STARTCHAR uni293F +ENCODING 10559 +BBX 12 8 2 3 +BITMAP +2000 +4000 +8000 +8000 +80F0 +4030 +30D0 +0F10 +ENDCHAR +STARTCHAR uni2940 +ENCODING 10560 +BBX 11 12 2 0 +BITMAP +0200 +0400 +0E00 +3580 +4240 +4040 +8020 +8020 +4040 +4040 +3180 +0E00 +ENDCHAR +STARTCHAR uni2941 +ENCODING 10561 +BBX 11 12 2 0 +BITMAP +0800 +0400 +0E00 +3580 +4840 +4040 +8020 +8020 +4040 +4040 +3180 +0E00 +ENDCHAR +STARTCHAR uni2942 +ENCODING 10562 +BBX 14 10 1 1 +BITMAP +0010 +0008 +FFFC +0008 +0010 +2000 +4000 +FC00 +4000 +2000 +ENDCHAR +STARTCHAR uni2943 +ENCODING 10563 +BBX 14 10 1 1 +BITMAP +2000 +4000 +FFFC +4000 +2000 +0010 +0008 +00FC +0008 +0010 +ENDCHAR +STARTCHAR uni2944 +ENCODING 10564 +BBX 14 10 1 1 +BITMAP +0010 +0008 +00FC +0008 +0010 +2000 +4000 +FFFC +4000 +2000 +ENDCHAR +STARTCHAR uni2945 +ENCODING 10565 +BBX 15 10 0 -1 +BITMAP +0008 +0004 +FFFE +0004 +0008 +0800 +0800 +3E00 +0800 +0800 +ENDCHAR +STARTCHAR uni2946 +ENCODING 10566 +BBX 16 10 0 -1 +BITMAP +2000 +4000 +FFFF +4000 +2000 +0020 +0020 +00F8 +0020 +0020 +ENDCHAR +STARTCHAR uni2947 +ENCODING 10567 +BBX 15 7 0 3 +BITMAP +0010 +1108 +0A04 +FFFE +0A04 +1108 +0010 +ENDCHAR +STARTCHAR uni2948 +ENCODING 10568 +BBX 15 7 0 3 +BITMAP +1010 +2388 +4444 +FFFE +4444 +2388 +1010 +ENDCHAR +STARTCHAR uni2949 +ENCODING 10569 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +20 +70 +A8 +70 +A8 +20 +20 +20 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni294A +ENCODING 10570 +BBX 14 5 1 4 +BITMAP +2000 +4000 +FFFC +0008 +0010 +ENDCHAR +STARTCHAR uni294B +ENCODING 10571 +BBX 14 5 1 4 +BITMAP +0010 +0008 +FFFC +4000 +2000 +ENDCHAR +STARTCHAR uni294C +ENCODING 10572 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +20 +30 +28 +20 +20 +20 +20 +20 +20 +A0 +60 +20 +ENDCHAR +STARTCHAR uni294D +ENCODING 10573 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +20 +60 +A0 +20 +20 +20 +20 +20 +20 +28 +30 +20 +ENDCHAR +STARTCHAR uni294E +ENCODING 10574 +BBX 14 3 1 6 +BITMAP +2010 +4008 +FFFC +ENDCHAR +STARTCHAR uni294F +ENCODING 10575 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 2 0 +BITMAP +80 +C0 +A0 +80 +80 +80 +80 +80 +80 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni2950 +ENCODING 10576 +BBX 14 3 1 4 +BITMAP +FFFC +4008 +2010 +ENDCHAR +STARTCHAR uni2951 +ENCODING 10577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 2 0 +BITMAP +20 +60 +A0 +20 +20 +20 +20 +20 +20 +A0 +60 +20 +ENDCHAR +STARTCHAR uni2952 +ENCODING 10578 +BBX 15 5 1 4 +BITMAP +9000 +A000 +FFFE +8000 +8000 +ENDCHAR +STARTCHAR uni2953 +ENCODING 10579 +BBX 15 5 0 4 +BITMAP +0012 +000A +FFFE +0002 +0002 +ENDCHAR +STARTCHAR uni2954 +ENCODING 10580 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -2 +BITMAP +F8 +20 +30 +28 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2955 +ENCODING 10581 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +28 +30 +20 +F8 +ENDCHAR +STARTCHAR uni2956 +ENCODING 10582 +BBX 15 5 1 4 +BITMAP +8000 +8000 +FFFE +A000 +9000 +ENDCHAR +STARTCHAR uni2957 +ENCODING 10583 +BBX 15 5 0 4 +BITMAP +0002 +0002 +FFFE +000A +0012 +ENDCHAR +STARTCHAR uni2958 +ENCODING 10584 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -2 +BITMAP +F8 +20 +60 +A0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2959 +ENCODING 10585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +A0 +60 +20 +F8 +ENDCHAR +STARTCHAR uni295A +ENCODING 10586 +BBX 13 5 2 4 +BITMAP +2008 +4008 +FFF8 +0008 +0008 +ENDCHAR +STARTCHAR uni295B +ENCODING 10587 +BBX 13 5 1 4 +BITMAP +8020 +8010 +FFF8 +8000 +8000 +ENDCHAR +STARTCHAR uni295C +ENCODING 10588 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +20 +30 +28 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni295D +ENCODING 10589 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +28 +30 +20 +ENDCHAR +STARTCHAR uni295E +ENCODING 10590 +BBX 13 5 2 4 +BITMAP +0008 +0008 +FFF8 +4008 +2008 +ENDCHAR +STARTCHAR uni295F +ENCODING 10591 +BBX 13 5 1 4 +BITMAP +8000 +8000 +FFF8 +8010 +8020 +ENDCHAR +STARTCHAR uni2960 +ENCODING 10592 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +20 +60 +A0 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni2961 +ENCODING 10593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +A0 +60 +20 +ENDCHAR +STARTCHAR uni2962 +ENCODING 10594 +BBX 14 9 1 2 +BITMAP +2000 +4000 +FFFC +0000 +0000 +0000 +FFFC +4000 +2000 +ENDCHAR +STARTCHAR uni2963 +ENCODING 10595 +BBX 9 12 4 0 +BITMAP +2200 +6300 +A280 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +ENDCHAR +STARTCHAR uni2964 +ENCODING 10596 +BBX 14 9 1 2 +BITMAP +0010 +0008 +FFFC +0000 +0000 +0000 +FFFC +0008 +0010 +ENDCHAR +STARTCHAR uni2965 +ENCODING 10597 +BBX 9 12 4 0 +BITMAP +2200 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +A280 +6300 +2200 +ENDCHAR +STARTCHAR uni2966 +ENCODING 10598 +BBX 14 7 1 4 +BITMAP +2000 +4000 +FFFC +0000 +0010 +0008 +FFFC +ENDCHAR +STARTCHAR uni2967 +ENCODING 10599 +BBX 14 7 1 2 +BITMAP +FFFC +4000 +2000 +0000 +FFFC +0008 +0010 +ENDCHAR +STARTCHAR uni2968 +ENCODING 10600 +BBX 14 7 1 4 +BITMAP +0010 +0008 +FFFC +0000 +2000 +4000 +FFFC +ENDCHAR +STARTCHAR uni2969 +ENCODING 10601 +BBX 14 7 1 2 +BITMAP +FFFC +0008 +0010 +0000 +FFFC +4000 +2000 +ENDCHAR +STARTCHAR uni296A +ENCODING 10602 +BBX 14 5 1 5 +BITMAP +2000 +4000 +FFFC +0000 +FFFC +ENDCHAR +STARTCHAR uni296B +ENCODING 10603 +BBX 14 5 1 3 +BITMAP +FFFC +0000 +FFFC +4000 +2000 +ENDCHAR +STARTCHAR uni296C +ENCODING 10604 +BBX 14 5 1 5 +BITMAP +0010 +0008 +FFFC +0000 +FFFC +ENDCHAR +STARTCHAR uni296D +ENCODING 10605 +BBX 14 5 1 3 +BITMAP +FFFC +0000 +FFFC +0008 +0010 +ENDCHAR +STARTCHAR uni296E +ENCODING 10606 +BBX 9 12 4 0 +BITMAP +2200 +6200 +A200 +2200 +2200 +2200 +2200 +2200 +2200 +2280 +2300 +2200 +ENDCHAR +STARTCHAR uni296F +ENCODING 10607 +BBX 9 12 4 0 +BITMAP +2200 +2300 +2280 +2200 +2200 +2200 +2200 +2200 +2200 +A200 +6200 +2200 +ENDCHAR +STARTCHAR uni2970 +ENCODING 10608 +BBX 14 4 1 5 +BITMAP +FFF8 +0004 +0004 +FFF8 +ENDCHAR +STARTCHAR uni2971 +ENCODING 10609 +BBX 15 7 0 4 +BITMAP +1F80 +0000 +1F88 +0004 +FFFE +0004 +0008 +ENDCHAR +STARTCHAR uni2972 +ENCODING 10610 +BBX 15 7 0 4 +BITMAP +3800 +4440 +0388 +0004 +FFFE +0004 +0008 +ENDCHAR +STARTCHAR uni2973 +ENCODING 10611 +BBX 15 7 1 2 +BITMAP +2000 +4000 +FFFE +4000 +2380 +0444 +0038 +ENDCHAR +STARTCHAR uni2974 +ENCODING 10612 +BBX 15 7 0 2 +BITMAP +0008 +0004 +FFFE +0004 +3808 +4440 +0380 +ENDCHAR +STARTCHAR uni2975 +ENCODING 10613 +BBX 15 9 0 0 +BITMAP +0008 +0004 +FFFE +3804 +4448 +0380 +3800 +4440 +0380 +ENDCHAR +STARTCHAR uni2976 +ENCODING 10614 +BBX 9 13 4 -1 +BITMAP +0180 +0600 +1800 +6000 +8000 +6000 +1800 +0600 +2180 +4000 +FF80 +4000 +2000 +ENDCHAR +STARTCHAR uni2977 +ENCODING 10615 +BBX 14 9 1 2 +BITMAP +000C +0030 +20C0 +4300 +FFE0 +4300 +20C0 +0030 +000C +ENDCHAR +STARTCHAR uni2978 +ENCODING 10616 +BBX 9 13 4 -1 +BITMAP +C000 +3000 +0C00 +0300 +0080 +0300 +0C00 +3000 +C200 +0100 +FF80 +0100 +0200 +ENDCHAR +STARTCHAR uni2979 +ENCODING 10617 +BBX 9 13 4 -1 +BITMAP +3F80 +4000 +8000 +8000 +8000 +4000 +3F80 +0000 +0200 +0100 +FF80 +0100 +0200 +ENDCHAR +STARTCHAR uni297A +ENCODING 10618 +BBX 14 7 1 1 +BITMAP +03FC +2400 +4800 +FFFC +4800 +2400 +03FC +ENDCHAR +STARTCHAR uni297B +ENCODING 10619 +BBX 9 13 4 -1 +BITMAP +FE00 +0100 +0080 +0080 +0080 +0100 +FE00 +0000 +2000 +4000 +FF80 +4000 +2000 +ENDCHAR +STARTCHAR uni297C +ENCODING 10620 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +40 +80 +80 +40 +3E +40 +80 +80 +40 +ENDCHAR +STARTCHAR uni297D +ENCODING 10621 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +04 +02 +02 +04 +F8 +04 +02 +02 +04 +ENDCHAR +STARTCHAR uni297E +ENCODING 10622 +BBX 9 8 3 1 +BITMAP +6300 +9480 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni297F +ENCODING 10623 +BBX 9 8 3 0 +BITMAP +0800 +0800 +0800 +0800 +0800 +0800 +9480 +6300 +ENDCHAR +STARTCHAR uni2980 +ENCODING 10624 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 -1 +BITMAP +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni2981 +ENCODING 10625 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +30 +78 +FC +FC +78 +30 +ENDCHAR +STARTCHAR uni2982 +ENCODING 10626 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +60 +90 +90 +60 +00 +00 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni2983 +ENCODING 10627 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +3C +48 +48 +28 +28 +48 +88 +48 +28 +28 +48 +48 +3C +ENDCHAR +STARTCHAR uni2984 +ENCODING 10628 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +F0 +48 +48 +50 +50 +48 +44 +48 +50 +50 +48 +48 +F0 +ENDCHAR +STARTCHAR uni2985 +ENCODING 10629 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -1 +BITMAP +30 +60 +60 +A0 +A0 +A0 +A0 +A0 +A0 +60 +60 +30 +ENDCHAR +STARTCHAR uni2986 +ENCODING 10630 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -1 +BITMAP +C0 +60 +60 +50 +50 +50 +50 +50 +50 +60 +60 +C0 +ENDCHAR +STARTCHAR uni2987 +ENCODING 10631 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -1 +BITMAP +30 +50 +50 +90 +90 +90 +90 +90 +90 +50 +50 +30 +ENDCHAR +STARTCHAR uni2988 +ENCODING 10632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -1 +BITMAP +C0 +A0 +A0 +90 +90 +90 +90 +90 +90 +A0 +A0 +C0 +ENDCHAR +STARTCHAR uni2989 +ENCODING 10633 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -1 +BITMAP +10 +30 +30 +50 +50 +90 +90 +50 +50 +30 +30 +10 +ENDCHAR +STARTCHAR uni298A +ENCODING 10634 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -1 +BITMAP +80 +C0 +C0 +A0 +A0 +90 +90 +A0 +A0 +C0 +C0 +80 +ENDCHAR +STARTCHAR uni298B +ENCODING 10635 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 13 4 -2 +BITMAP +E0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +E0 +00 +E0 +ENDCHAR +STARTCHAR uni298C +ENCODING 10636 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 13 1 -2 +BITMAP +E0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +E0 +00 +E0 +ENDCHAR +STARTCHAR uni298D +ENCODING 10637 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 3 -1 +BITMAP +F0 +C0 +A0 +90 +80 +80 +80 +80 +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uni298E +ENCODING 10638 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 1 -1 +BITMAP +F0 +10 +10 +10 +10 +10 +10 +10 +90 +50 +30 +F0 +ENDCHAR +STARTCHAR uni298F +ENCODING 10639 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 3 -1 +BITMAP +F0 +80 +80 +80 +80 +80 +80 +80 +90 +A0 +C0 +F0 +ENDCHAR +STARTCHAR uni2990 +ENCODING 10640 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 1 -1 +BITMAP +F0 +30 +50 +90 +10 +10 +10 +10 +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uni2991 +ENCODING 10641 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 -1 +BITMAP +10 +20 +20 +40 +40 +98 +98 +40 +40 +20 +20 +10 +ENDCHAR +STARTCHAR uni2992 +ENCODING 10642 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -1 +BITMAP +40 +20 +20 +10 +10 +C8 +C8 +10 +10 +20 +20 +40 +ENDCHAR +STARTCHAR uni2993 +ENCODING 10643 +BBX 11 13 3 -2 +BITMAP +0200 +0460 +0780 +0C00 +1800 +6800 +8800 +6800 +1800 +0C00 +0780 +0460 +0200 +ENDCHAR +STARTCHAR uni2994 +ENCODING 10644 +BBX 11 13 3 -2 +BITMAP +0800 +C400 +3C00 +0600 +0300 +02C0 +0220 +02C0 +0300 +0600 +3C00 +C400 +0800 +ENDCHAR +STARTCHAR uni2995 +ENCODING 10645 +BBX 11 12 3 -1 +BITMAP +0500 +CA00 +3A00 +1C00 +1700 +14C0 +1420 +14C0 +1300 +0E00 +3A00 +C500 +ENDCHAR +STARTCHAR uni2996 +ENCODING 10646 +BBX 11 12 3 -1 +BITMAP +1400 +0A60 +0B80 +0700 +1D00 +6500 +8500 +6500 +1900 +0E00 +0B80 +1460 +ENDCHAR +STARTCHAR uni2997 +ENCODING 10647 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -1 +BITMAP +30 +60 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +60 +30 +ENDCHAR +STARTCHAR uni2998 +ENCODING 10648 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -1 +BITMAP +C0 +60 +70 +70 +70 +70 +70 +70 +70 +70 +60 +C0 +ENDCHAR +STARTCHAR uni2999 +ENCODING 10649 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +00 +00 +80 +00 +00 +80 +00 +00 +80 +ENDCHAR +STARTCHAR uni299A +ENCODING 10650 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 15 2 -2 +BITMAP +80 +40 +20 +40 +80 +40 +20 +40 +80 +40 +20 +40 +80 +40 +20 +ENDCHAR +STARTCHAR uni299B +ENCODING 10651 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +80 +50 +20 +50 +48 +FC +40 +ENDCHAR +STARTCHAR uni299C +ENCODING 10652 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +80 +80 +80 +80 +E0 +A0 +FC +ENDCHAR +STARTCHAR uni299D +ENCODING 10653 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +80 +80 +80 +F0 +88 +A8 +88 +FE +ENDCHAR +STARTCHAR uni299E +ENCODING 10654 +BBX 13 10 2 0 +BITMAP +0040 +0080 +0100 +0270 +0480 +0860 +1010 +20E0 +4000 +FFF8 +ENDCHAR +STARTCHAR uni299F +ENCODING 10655 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 0 +BITMAP +0C +30 +40 +FC +ENDCHAR +STARTCHAR uni29A0 +ENCODING 10656 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +A0 +60 +50 +4C +50 +60 +A0 +ENDCHAR +STARTCHAR uni29A1 +ENCODING 10657 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +82 +7C +C6 +28 +10 +10 +ENDCHAR +STARTCHAR uni29A2 +ENCODING 10658 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +FC +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni29A3 +ENCODING 10659 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +80 +40 +20 +10 +08 +FC +ENDCHAR +STARTCHAR uni29A4 +ENCODING 10660 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +04 +08 +10 +20 +40 +FC +00 +FC +ENDCHAR +STARTCHAR uni29A5 +ENCODING 10661 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +80 +40 +20 +10 +08 +FC +00 +FC +ENDCHAR +STARTCHAR uni29A6 +ENCODING 10662 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 0 +BITMAP +80 +40 +3C +ENDCHAR +STARTCHAR uni29A7 +ENCODING 10663 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 0 +BITMAP +3C +40 +80 +ENDCHAR +STARTCHAR uni29A8 +ENCODING 10664 +BBX 13 12 2 -1 +BITMAP +01E0 +0060 +04A0 +0320 +0300 +0480 +0880 +1040 +2040 +4040 +FFF8 +0040 +ENDCHAR +STARTCHAR uni29A9 +ENCODING 10665 +BBX 13 12 2 -1 +BITMAP +3C00 +3000 +2900 +2600 +0600 +0900 +0880 +1040 +1020 +1010 +FFF8 +1000 +ENDCHAR +STARTCHAR uni29AA +ENCODING 10666 +BBX 13 12 2 -1 +BITMAP +0040 +FFF8 +4040 +2040 +1040 +0880 +0480 +0300 +0320 +04A0 +0060 +01E0 +ENDCHAR +STARTCHAR uni29AB +ENCODING 10667 +BBX 13 12 2 -1 +BITMAP +1000 +FFF8 +1010 +1020 +1040 +0880 +0900 +0600 +2600 +2900 +3000 +3C00 +ENDCHAR +STARTCHAR uni29AC +ENCODING 10668 +BBX 12 13 2 -2 +BITMAP +4000 +4000 +40F0 +F830 +4650 +4190 +4180 +4240 +4400 +4800 +5000 +6000 +4000 +ENDCHAR +STARTCHAR uni29AD +ENCODING 10669 +BBX 12 13 2 -2 +BITMAP +0020 +0020 +F020 +C1F0 +A620 +9820 +1820 +2420 +0220 +0120 +00A0 +0060 +0020 +ENDCHAR +STARTCHAR uni29AE +ENCODING 10670 +BBX 12 13 2 -2 +BITMAP +4000 +6000 +5000 +4800 +4400 +4240 +4180 +4190 +4650 +F830 +40F0 +4000 +4000 +ENDCHAR +STARTCHAR uni29AF +ENCODING 10671 +BBX 12 13 2 -2 +BITMAP +0020 +0060 +00A0 +0120 +0220 +2420 +1820 +9820 +A620 +C1F0 +F020 +0020 +0020 +ENDCHAR +STARTCHAR uni29B0 +ENCODING 10672 +BBX 9 9 3 0 +BITMAP +BE00 +4100 +A080 +9080 +8880 +8480 +8280 +4100 +3E80 +ENDCHAR +STARTCHAR uni29B1 +ENCODING 10673 +BBX 9 11 3 0 +BITMAP +3E00 +0000 +3E80 +4100 +8280 +8480 +8880 +9080 +A080 +4100 +BE00 +ENDCHAR +STARTCHAR uni29B2 +ENCODING 10674 +BBX 9 13 3 0 +BITMAP +0800 +1400 +0800 +0000 +3E80 +4100 +8280 +8480 +8880 +9080 +A080 +4100 +BE00 +ENDCHAR +STARTCHAR uni29B3 +ENCODING 10675 +BBX 9 14 3 0 +BITMAP +0800 +0400 +7E00 +0400 +0800 +3E80 +4100 +8280 +8480 +8880 +9080 +A080 +4100 +BE00 +ENDCHAR +STARTCHAR uni29B4 +ENCODING 10676 +BBX 9 14 3 0 +BITMAP +1000 +2000 +7E00 +2000 +1000 +3E80 +4100 +8280 +8480 +8880 +9080 +A080 +4100 +BE00 +ENDCHAR +STARTCHAR uni29B5 +ENCODING 10677 +BBX 11 9 2 0 +BITMAP +1F00 +2080 +4040 +4040 +FFE0 +4040 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni29B6 +ENCODING 10678 +BBX 9 9 3 0 +BITMAP +3E00 +4900 +8880 +8880 +8880 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uni29B7 +ENCODING 10679 +BBX 9 9 3 0 +BITMAP +3E00 +4100 +9480 +9480 +9480 +9480 +9480 +4100 +3E00 +ENDCHAR +STARTCHAR uni29B8 +ENCODING 10680 +BBX 9 9 3 0 +BITMAP +3E00 +4100 +A080 +9080 +8880 +8480 +8280 +4100 +3E00 +ENDCHAR +STARTCHAR uni29B9 +ENCODING 10681 +BBX 9 9 3 0 +BITMAP +3E00 +4100 +8880 +8880 +8880 +8880 +BE80 +4100 +3E00 +ENDCHAR +STARTCHAR uni29BA +ENCODING 10682 +BBX 9 9 3 0 +BITMAP +3E00 +4900 +8880 +8880 +FF80 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni29BB +ENCODING 10683 +BBX 9 9 3 0 +BITMAP +BE80 +4100 +A280 +9480 +8880 +9480 +A280 +4100 +BE80 +ENDCHAR +STARTCHAR uni29BC +ENCODING 10684 +BBX 11 11 3 0 +BITMAP +1F00 +2080 +4040 +9120 +8220 +8420 +8820 +9120 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni29BD +ENCODING 10685 +BBX 9 14 3 -1 +BITMAP +0800 +1C00 +2A00 +0800 +3E00 +4900 +8880 +8880 +8880 +8880 +8880 +4900 +3E00 +0800 +ENDCHAR +STARTCHAR uni29BE +ENCODING 10686 +BBX 11 11 3 0 +BITMAP +1F00 +2080 +4E40 +9120 +A0A0 +A0A0 +A0A0 +9120 +4E40 +2080 +1F00 +ENDCHAR +STARTCHAR uni29BF +ENCODING 10687 +BBX 11 11 3 0 +BITMAP +1F00 +2080 +4E40 +9F20 +BFA0 +BFA0 +BFA0 +9F20 +4E40 +2080 +1F00 +ENDCHAR +STARTCHAR uni29C0 +ENCODING 10688 +BBX 11 11 3 0 +BITMAP +1F00 +2080 +4040 +8620 +9820 +A020 +9820 +8620 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni29C1 +ENCODING 10689 +BBX 11 11 3 0 +BITMAP +1F00 +2080 +4040 +8C20 +8320 +80A0 +8320 +8C20 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni29C2 +ENCODING 10690 +BBX 13 9 1 0 +BITMAP +3E00 +4100 +8080 +8090 +80A8 +8090 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni29C3 +ENCODING 10691 +BBX 12 9 2 0 +BITMAP +3E00 +4100 +8080 +80F0 +8080 +80F0 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni29C4 +ENCODING 10692 +BBX 11 11 3 0 +BITMAP +FFE0 +8060 +80A0 +8120 +8220 +8420 +8820 +9020 +A020 +C020 +FFE0 +ENDCHAR +STARTCHAR uni29C5 +ENCODING 10693 +BBX 11 11 3 0 +BITMAP +FFE0 +C020 +A020 +9020 +8820 +8420 +8220 +8120 +80A0 +8060 +FFE0 +ENDCHAR +STARTCHAR uni29C6 +ENCODING 10694 +BBX 11 11 3 0 +BITMAP +FFE0 +8020 +8420 +A4A0 +9520 +8E20 +9520 +A4A0 +8420 +8020 +FFE0 +ENDCHAR +STARTCHAR uni29C7 +ENCODING 10695 +BBX 11 11 3 0 +BITMAP +FFE0 +8020 +8020 +8E20 +9120 +9120 +9120 +8E20 +8020 +8020 +FFE0 +ENDCHAR +STARTCHAR uni29C8 +ENCODING 10696 +BBX 11 11 3 0 +BITMAP +FFE0 +8020 +8020 +9F20 +9120 +9120 +9120 +9F20 +8020 +8020 +FFE0 +ENDCHAR +STARTCHAR uni29C9 +ENCODING 10697 +BBX 12 12 2 0 +BITMAP +FF00 +8100 +8100 +8100 +8FF0 +8910 +8910 +FF10 +0810 +0810 +0810 +0FF0 +ENDCHAR +STARTCHAR uni29CA +ENCODING 10698 +BBX 13 14 1 -1 +BITMAP +0200 +0000 +0200 +0500 +0500 +0880 +0880 +1040 +1040 +2020 +2020 +4010 +4010 +FFF8 +ENDCHAR +STARTCHAR uni29CB +ENCODING 10699 +BBX 13 14 1 -2 +BITMAP +0200 +0500 +0500 +0880 +0880 +1040 +1040 +2020 +2020 +4010 +4010 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni29CC +ENCODING 10700 +BBX 15 14 1 -1 +BITMAP +0100 +0280 +0280 +0440 +0440 +0820 +0820 +1390 +1410 +2308 +2088 +4704 +4004 +FFFE +ENDCHAR +STARTCHAR uni29CD +ENCODING 10701 +BBX 15 12 0 0 +BITMAP +0100 +0280 +0280 +0440 +0440 +0820 +0820 +1010 +1010 +2008 +2008 +FFFE +ENDCHAR +STARTCHAR uni29CE +ENCODING 10702 +BBX 9 16 3 -2 +BITMAP +C000 +B000 +8C00 +8300 +8080 +8300 +8C00 +B180 +C680 +1880 +6080 +8080 +6080 +1880 +0680 +0180 +ENDCHAR +STARTCHAR uni29CF +ENCODING 10703 +BBX 11 9 2 0 +BITMAP +01A0 +06A0 +18A0 +60A0 +80A0 +60A0 +18A0 +06A0 +01A0 +ENDCHAR +STARTCHAR uni29D0 +ENCODING 10704 +BBX 11 9 2 0 +BITMAP +B000 +AC00 +A300 +A0C0 +A020 +A0C0 +A300 +AC00 +B000 +ENDCHAR +STARTCHAR uni29D1 +ENCODING 10705 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +82 +C6 +EA +F2 +EA +C6 +82 +ENDCHAR +STARTCHAR uni29D2 +ENCODING 10706 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +82 +C6 +AE +9E +AE +C6 +82 +ENDCHAR +STARTCHAR uni29D3 +ENCODING 10707 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +82 +C6 +EE +FE +EE +C6 +82 +ENDCHAR +STARTCHAR uni29D4 +ENCODING 10708 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +82 +C4 +E8 +F0 +E8 +C4 +82 +ENDCHAR +STARTCHAR uni29D5 +ENCODING 10709 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +82 +46 +2E +1E +2E +46 +82 +ENDCHAR +STARTCHAR uni29D6 +ENCODING 10710 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +FE +44 +28 +10 +28 +44 +FE +ENDCHAR +STARTCHAR uni29D7 +ENCODING 10711 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +FE +7C +38 +10 +38 +7C +FE +ENDCHAR +STARTCHAR uni29D8 +ENCODING 10712 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 13 2 -1 +BITMAP +80 +40 +20 +40 +80 +40 +20 +40 +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uni29D9 +ENCODING 10713 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 13 2 -1 +BITMAP +20 +40 +80 +40 +20 +40 +80 +40 +20 +40 +80 +40 +20 +ENDCHAR +STARTCHAR uni29DA +ENCODING 10714 +BBX 7 13 5 -1 +BITMAP +88 +44 +22 +44 +88 +44 +22 +44 +88 +44 +22 +44 +88 +ENDCHAR +STARTCHAR uni29DB +ENCODING 10715 +BBX 7 13 5 -1 +BITMAP +22 +44 +88 +44 +22 +44 +88 +44 +22 +44 +88 +44 +22 +ENDCHAR +STARTCHAR uni29DC +ENCODING 10716 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 3 +BITMAP +60 +92 +92 +6C +ENDCHAR +STARTCHAR uni29DD +ENCODING 10717 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 3 +BITMAP +38 +44 +6C +92 +92 +6C +ENDCHAR +STARTCHAR uni29DE +ENCODING 10718 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 2 +BITMAP +10 +54 +BA +BA +54 +10 +ENDCHAR +STARTCHAR uni29DF +ENCODING 10719 +BBX 14 5 1 2 +BITMAP +6018 +9024 +9FE4 +9024 +6018 +ENDCHAR +STARTCHAR uni29E0 +ENCODING 10720 +BBX 12 12 2 0 +BITMAP +FFE0 +FFF0 +C010 +C010 +C010 +C010 +C010 +C010 +C010 +C010 +C010 +FFF0 +ENDCHAR +STARTCHAR uni29E1 +ENCODING 10721 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +0C +34 +C4 +FC +00 +FC +ENDCHAR +STARTCHAR uni29E2 +ENCODING 10722 +BBX 11 6 2 0 +BITMAP +8420 +8420 +8420 +8420 +8420 +FFE0 +ENDCHAR +STARTCHAR uni29E3 +ENCODING 10723 +BBX 14 11 1 0 +BITMAP +0024 +0048 +0090 +0120 +FFFC +0480 +FFFC +1200 +2400 +4800 +9000 +ENDCHAR +STARTCHAR uni29E4 +ENCODING 10724 +BBX 14 12 1 0 +BITMAP +0C80 +1324 +0048 +0090 +0120 +FFFC +0480 +FFFC +1200 +2400 +4800 +9000 +ENDCHAR +STARTCHAR uni29E5 +ENCODING 10725 +BBX 14 11 1 -1 +BITMAP +0024 +0048 +0090 +FFFC +0240 +FFFC +0900 +FFFC +2400 +4800 +9000 +ENDCHAR +STARTCHAR uni29E6 +ENCODING 10726 +BBX 14 8 1 2 +BITMAP +8004 +8004 +FFFC +8004 +8004 +FFFC +8004 +8004 +ENDCHAR +STARTCHAR uni29E7 +ENCODING 10727 +BBX 9 8 3 2 +BITMAP +0800 +0800 +FF80 +0800 +0800 +FF80 +0800 +0800 +ENDCHAR +STARTCHAR uni29E8 +ENCODING 10728 +BBX 13 12 1 -1 +BITMAP +FFF8 +7E10 +7E10 +3E20 +3E20 +1E40 +1E40 +0E80 +0E80 +0700 +0700 +0200 +ENDCHAR +STARTCHAR uni29E9 +ENCODING 10729 +BBX 13 12 1 -1 +BITMAP +FFF8 +43F0 +43F0 +23E0 +23E0 +13C0 +13C0 +0B80 +0B80 +0700 +0700 +0200 +ENDCHAR +STARTCHAR uni29EA +ENCODING 10730 +BBX 9 12 3 -1 +BITMAP +0800 +1C00 +3E00 +7F00 +FF80 +7F00 +3E00 +1C00 +0800 +2A00 +1C00 +0800 +ENDCHAR +STARTCHAR uni29EB +ENCODING 10731 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 1 +BITMAP +10 +38 +38 +7C +7C +FE +7C +7C +38 +38 +10 +ENDCHAR +STARTCHAR uni29EC +ENCODING 10732 +BBX 7 11 5 -1 +BITMAP +38 +44 +82 +82 +82 +44 +38 +10 +54 +38 +10 +ENDCHAR +STARTCHAR uni29ED +ENCODING 10733 +BBX 7 11 5 -1 +BITMAP +38 +7C +FE +FE +FE +7C +38 +10 +54 +38 +10 +ENDCHAR +STARTCHAR uni29EE +ENCODING 10734 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +7C +10 +FE +82 +82 +82 +82 +82 +FE +10 +7C +ENDCHAR +STARTCHAR uni29EF +ENCODING 10735 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +7C +10 +FE +FE +FE +FE +FE +FE +FE +10 +7C +ENDCHAR +STARTCHAR uni29F0 +ENCODING 10736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +7C +10 +10 +28 +44 +82 +44 +28 +10 +10 +7C +ENDCHAR +STARTCHAR uni29F1 +ENCODING 10737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +7C +10 +10 +38 +7C +FE +7C +38 +10 +10 +7C +ENDCHAR +STARTCHAR uni29F2 +ENCODING 10738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +7C +10 +38 +44 +82 +82 +82 +44 +38 +10 +7C +ENDCHAR +STARTCHAR uni29F3 +ENCODING 10739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +7C +10 +38 +7C +FE +FE +FE +7C +38 +10 +7C +ENDCHAR +STARTCHAR uni29F4 +ENCODING 10740 +BBX 14 5 1 4 +BITMAP +8010 +0008 +3FFC +0008 +8010 +ENDCHAR +STARTCHAR uni29F5 +ENCODING 10741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +40 +40 +20 +20 +10 +10 +08 +08 +ENDCHAR +STARTCHAR uni29F6 +ENCODING 10742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +F0 +00 +08 +08 +10 +10 +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni29F7 +ENCODING 10743 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +80 +80 +40 +40 +F8 +20 +10 +10 +08 +08 +ENDCHAR +STARTCHAR uni29F8 +ENCODING 10744 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 0 +BITMAP +02 +02 +04 +04 +08 +08 +10 +10 +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni29F9 +ENCODING 10745 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +80 +80 +40 +40 +20 +20 +10 +10 +08 +08 +04 +04 +02 +02 +ENDCHAR +STARTCHAR uni29FA +ENCODING 10746 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 4 +BITMAP +28 +28 +FE +28 +28 +ENDCHAR +STARTCHAR uni29FB +ENCODING 10747 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 4 +BITMAP +54 +54 +FE +54 +54 +ENDCHAR +STARTCHAR uni29FC +ENCODING 10748 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 1 +BITMAP +02 +02 +04 +18 +60 +80 +60 +18 +04 +02 +02 +ENDCHAR +STARTCHAR uni29FD +ENCODING 10749 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 1 +BITMAP +80 +80 +40 +30 +0C +02 +0C +30 +40 +80 +80 +ENDCHAR +STARTCHAR uni29FE +ENCODING 10750 +BBX 13 12 1 -1 +BITMAP +0F80 +0F80 +0700 +C218 +F278 +FFF8 +F278 +C218 +0700 +0700 +0F80 +0F80 +ENDCHAR +STARTCHAR uni29FF +ENCODING 10751 +BBX 13 5 1 4 +BITMAP +C018 +F078 +FFF8 +F078 +C018 +ENDCHAR +STARTCHAR uni2A00 +ENCODING 10752 +BBX 11 11 3 0 +BITMAP +1F00 +2080 +4040 +8020 +8020 +8420 +8020 +8020 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni2A01 +ENCODING 10753 +BBX 11 11 3 0 +BITMAP +1F00 +2480 +4440 +8420 +8420 +FFE0 +8420 +8420 +4440 +2480 +1F00 +ENDCHAR +STARTCHAR uni2A02 +ENCODING 10754 +BBX 11 11 3 0 +BITMAP +1F00 +2080 +60C0 +9120 +8A20 +8420 +8A20 +9120 +60C0 +2080 +1F00 +ENDCHAR +STARTCHAR uni2A03 +ENCODING 10755 +BBX 8 11 3 0 +BITMAP +81 +81 +81 +81 +81 +99 +99 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni2A04 +ENCODING 10756 +BBX 9 11 3 0 +BITMAP +8080 +8080 +8080 +8080 +8880 +8880 +BE80 +8880 +8880 +4100 +3E00 +ENDCHAR +STARTCHAR uni2A05 +ENCODING 10757 +BBX 9 11 3 0 +BITMAP +FF80 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +ENDCHAR +STARTCHAR uni2A06 +ENCODING 10758 +BBX 9 11 3 0 +BITMAP +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uni2A07 +ENCODING 10759 +BBX 14 11 1 0 +BITMAP +0480 +0B40 +0B40 +1320 +1320 +2490 +2490 +4848 +4848 +9024 +9024 +ENDCHAR +STARTCHAR uni2A08 +ENCODING 10760 +BBX 14 11 1 0 +BITMAP +9024 +9024 +4848 +4848 +2490 +2490 +1320 +1320 +0B40 +0B40 +0480 +ENDCHAR +STARTCHAR uni2A09 +ENCODING 10761 +BBX 11 11 2 0 +BITMAP +8020 +4040 +2080 +1100 +0A00 +0400 +0A00 +1100 +2080 +4040 +8020 +ENDCHAR +STARTCHAR uni2A0A +ENCODING 10762 +BBX 9 10 3 0 +BITMAP +FF80 +8080 +5800 +2400 +5200 +5200 +2400 +5800 +8080 +FF80 +ENDCHAR +STARTCHAR uni2A0B +ENCODING 10763 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +0C +14 +10 +FC +94 +50 +30 +10 +30 +50 +94 +FC +10 +50 +60 +ENDCHAR +STARTCHAR uni2A0C +ENCODING 10764 +BBX 14 14 1 -1 +BITMAP +1248 +2DB4 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +B6D0 +4920 +ENDCHAR +STARTCHAR uni2A0D +ENCODING 10765 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +20 +20 +F8 +20 +20 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A0E +ENCODING 10766 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +20 +F8 +20 +F8 +20 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A0F +ENCODING 10767 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +28 +30 +20 +60 +A0 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A10 +ENCODING 10768 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +70 +A8 +A0 +70 +20 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A11 +ENCODING 10769 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +20 +20 +BC +AC +74 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A12 +ENCODING 10770 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +38 +08 +28 +08 +38 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A13 +ENCODING 10771 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +30 +08 +28 +08 +30 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A14 +ENCODING 10772 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +18 +28 +20 +20 +20 +3C +22 +0A +22 +3C +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A15 +ENCODING 10773 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +70 +88 +A8 +88 +70 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A16 +ENCODING 10774 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +F8 +A8 +A8 +A8 +F8 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A17 +ENCODING 10775 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -1 +BITMAP +06 +0A +08 +08 +28 +48 +FE +49 +2A +08 +08 +08 +28 +30 +ENDCHAR +STARTCHAR uni2A18 +ENCODING 10776 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +0C +14 +10 +10 +92 +54 +38 +10 +38 +54 +92 +10 +50 +60 +ENDCHAR +STARTCHAR uni2A19 +ENCODING 10777 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +70 +A8 +A8 +A8 +A8 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A1A +ENCODING 10778 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +18 +28 +20 +20 +20 +A8 +A8 +A8 +A8 +70 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A1B +ENCODING 10779 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 15 2 -2 +BITMAP +18 +28 +20 +20 +20 +20 +20 +20 +20 +20 +20 +A0 +C0 +00 +F8 +ENDCHAR +STARTCHAR uni2A1C +ENCODING 10780 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 15 2 -1 +BITMAP +F8 +00 +18 +28 +20 +20 +20 +20 +20 +20 +20 +20 +20 +A0 +C0 +ENDCHAR +STARTCHAR uni2A1D +ENCODING 10781 +BBX 10 10 3 0 +BITMAP +8040 +C0C0 +A140 +9240 +8C40 +8C40 +9240 +A140 +C0C0 +8040 +ENDCHAR +STARTCHAR uni2A1E +ENCODING 10782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +08 +18 +28 +48 +88 +88 +48 +28 +18 +08 +ENDCHAR +STARTCHAR uni2A1F +ENCODING 10783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 -2 +BITMAP +60 +90 +90 +60 +00 +60 +90 +90 +70 +10 +60 +ENDCHAR +STARTCHAR uni2A20 +ENCODING 10784 +BBX 10 11 3 0 +BITMAP +8800 +4400 +2200 +1100 +0880 +0440 +0880 +1100 +2200 +4400 +8800 +ENDCHAR +STARTCHAR uni2A21 +ENCODING 10785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 14 2 0 +BITMAP +80 +C0 +A0 +90 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2A22 +ENCODING 10786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 1 +BITMAP +10 +28 +10 +00 +10 +10 +10 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni2A23 +ENCODING 10787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 1 +BITMAP +10 +28 +44 +00 +10 +10 +10 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni2A24 +ENCODING 10788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 1 +BITMAP +64 +98 +00 +10 +10 +10 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni2A25 +ENCODING 10789 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +10 +10 +10 +FE +10 +10 +10 +00 +10 +ENDCHAR +STARTCHAR uni2A26 +ENCODING 10790 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +10 +10 +10 +FE +10 +10 +10 +00 +64 +98 +ENDCHAR +STARTCHAR uni2A27 +ENCODING 10791 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +10 +10 +10 +FE +10 +16 +11 +02 +04 +07 +ENDCHAR +STARTCHAR uni2A28 +ENCODING 10792 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +10 +10 +10 +FE +10 +38 +7C +10 +ENDCHAR +STARTCHAR uni2A29 +ENCODING 10793 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 4 +BITMAP +30 +10 +10 +20 +00 +FC +ENDCHAR +STARTCHAR uni2A2A +ENCODING 10794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 2 +BITMAP +FC +00 +10 +ENDCHAR +STARTCHAR uni2A2B +ENCODING 10795 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +80 +00 +FC +00 +04 +ENDCHAR +STARTCHAR uni2A2C +ENCODING 10796 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +04 +00 +FC +00 +80 +ENDCHAR +STARTCHAR uni2A2D +ENCODING 10797 +BBX 9 11 3 -1 +BITMAP +0C00 +3000 +4400 +4400 +8400 +BF80 +8400 +4400 +4400 +3000 +0C00 +ENDCHAR +STARTCHAR uni2A2E +ENCODING 10798 +BBX 9 11 4 -1 +BITMAP +1800 +0600 +1100 +1100 +1080 +FE80 +1080 +1100 +1100 +0600 +1800 +ENDCHAR +STARTCHAR uni2A2F +ENCODING 10799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 2 +BITMAP +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni2A30 +ENCODING 10800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +30 +30 +00 +84 +48 +30 +48 +84 +ENDCHAR +STARTCHAR uni2A31 +ENCODING 10801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +84 +48 +30 +48 +84 +00 +FC +ENDCHAR +STARTCHAR uni2A32 +ENCODING 10802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +84 +48 +30 +48 +84 +FC +ENDCHAR +STARTCHAR uni2A33 +ENCODING 10803 +BBX 9 9 4 0 +BITMAP +2200 +1400 +8880 +5500 +2200 +5500 +8880 +1400 +2200 +ENDCHAR +STARTCHAR uni2A34 +ENCODING 10804 +BBX 9 11 3 -1 +BITMAP +0C00 +3000 +4000 +5080 +8900 +8600 +8900 +5080 +4000 +3000 +0C00 +ENDCHAR +STARTCHAR uni2A35 +ENCODING 10805 +BBX 9 11 4 -1 +BITMAP +1800 +0600 +0100 +8500 +4880 +3080 +4880 +8500 +0100 +0600 +1800 +ENDCHAR +STARTCHAR uni2A36 +ENCODING 10806 +BBX 12 14 2 -1 +BITMAP +0600 +0900 +0000 +0F00 +30C0 +4020 +50A0 +8910 +8610 +8910 +50A0 +4020 +30C0 +0F00 +ENDCHAR +STARTCHAR uni2A37 +ENCODING 10807 +BBX 16 15 0 -2 +BITMAP +07E0 +1818 +23C4 +4C32 +500A +9429 +A245 +A185 +A245 +9429 +500A +4C32 +23C4 +1818 +07E0 +ENDCHAR +STARTCHAR uni2A38 +ENCODING 10808 +BBX 9 9 4 0 +BITMAP +3E00 +4100 +8880 +8080 +BE80 +8080 +8880 +4100 +3E00 +ENDCHAR +STARTCHAR uni2A39 +ENCODING 10809 +BBX 13 13 1 0 +BITMAP +0200 +0500 +0500 +0880 +0880 +1040 +1240 +2220 +2FA0 +4210 +4210 +8008 +FFF8 +ENDCHAR +STARTCHAR uni2A3A +ENCODING 10810 +BBX 13 13 1 0 +BITMAP +0200 +0500 +0500 +0880 +0880 +1040 +1040 +2020 +2FA0 +4010 +4010 +8008 +FFF8 +ENDCHAR +STARTCHAR uni2A3B +ENCODING 10811 +BBX 13 13 1 0 +BITMAP +0200 +0500 +0500 +0880 +0880 +1040 +18C0 +2520 +2220 +4510 +4890 +8008 +FFF8 +ENDCHAR +STARTCHAR uni2A3C +ENCODING 10812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 3 +BITMAP +04 +04 +FC +ENDCHAR +STARTCHAR uni2A3D +ENCODING 10813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 3 +BITMAP +80 +80 +FC +ENDCHAR +STARTCHAR uni2A3E +ENCODING 10814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 3 -2 +BITMAP +40 +A0 +A0 +40 +00 +40 +A0 +A0 +60 +20 +C0 +ENDCHAR +STARTCHAR uni2A3F +ENCODING 10815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +44 +44 +44 +44 +44 +44 +44 +44 +44 +FE +ENDCHAR +STARTCHAR uni2A40 +ENCODING 10816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +B4 +B4 +84 +84 +84 +ENDCHAR +STARTCHAR uni2A41 +ENCODING 10817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +82 +82 +BA +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni2A42 +ENCODING 10818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +00 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni2A43 +ENCODING 10819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +00 +78 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni2A44 +ENCODING 10820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +82 +82 +82 +82 +92 +AA +AA +ENDCHAR +STARTCHAR uni2A45 +ENCODING 10821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +AA +AA +92 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni2A46 +ENCODING 10822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +90 +90 +90 +60 +00 +60 +90 +90 +90 +ENDCHAR +STARTCHAR uni2A47 +ENCODING 10823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +60 +90 +90 +90 +00 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni2A48 +ENCODING 10824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +90 +90 +90 +60 +00 +F0 +00 +60 +90 +90 +90 +ENDCHAR +STARTCHAR uni2A49 +ENCODING 10825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +60 +90 +90 +90 +00 +F0 +00 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni2A4A +ENCODING 10826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 0 +BITMAP +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni2A4B +ENCODING 10827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 0 +BITMAP +6C +92 +92 +92 +ENDCHAR +STARTCHAR uni2A4C +ENCODING 10828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +FF +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni2A4D +ENCODING 10829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +3C +42 +42 +42 +42 +42 +42 +FF +ENDCHAR +STARTCHAR uni2A4E +ENCODING 10830 +BBX 9 11 3 0 +BITMAP +FF80 +8080 +BE80 +A280 +A280 +A280 +A280 +A280 +A280 +A280 +A280 +ENDCHAR +STARTCHAR uni2A4F +ENCODING 10831 +BBX 9 11 3 0 +BITMAP +A280 +A280 +A280 +A280 +A280 +A280 +A280 +A280 +BE80 +8080 +FF80 +ENDCHAR +STARTCHAR uni2A50 +ENCODING 10832 +BBX 13 11 2 -1 +BITMAP +FFF8 +4010 +4010 +4510 +4210 +5550 +4890 +5550 +4230 +2520 +1FC0 +ENDCHAR +STARTCHAR uni2A51 +ENCODING 10833 +BBX 9 11 3 0 +BITMAP +0800 +0000 +0800 +1400 +1400 +2200 +2200 +4100 +4100 +8080 +8080 +ENDCHAR +STARTCHAR uni2A52 +ENCODING 10834 +BBX 9 11 3 0 +BITMAP +0800 +0000 +8080 +8080 +4100 +4100 +2200 +2200 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uni2A53 +ENCODING 10835 +BBX 11 11 2 0 +BITMAP +0400 +0A00 +0A00 +1100 +1100 +2080 +2480 +4A40 +4A40 +9120 +9120 +ENDCHAR +STARTCHAR uni2A54 +ENCODING 10836 +BBX 11 11 2 0 +BITMAP +9120 +9120 +4A40 +4A40 +2480 +2080 +1100 +1100 +0A00 +0A00 +0400 +ENDCHAR +STARTCHAR uni2A55 +ENCODING 10837 +BBX 12 9 2 0 +BITMAP +0900 +1680 +1680 +2640 +2640 +4920 +4920 +9090 +9090 +ENDCHAR +STARTCHAR uni2A56 +ENCODING 10838 +BBX 12 9 2 0 +BITMAP +9090 +9090 +4920 +4920 +2640 +2640 +1680 +1680 +0900 +ENDCHAR +STARTCHAR uni2A57 +ENCODING 10839 +BBX 10 10 3 0 +BITMAP +8040 +8080 +8100 +8200 +8400 +8800 +9000 +A000 +C000 +8000 +ENDCHAR +STARTCHAR uni2A58 +ENCODING 10840 +BBX 10 10 4 0 +BITMAP +0040 +00C0 +0140 +0240 +0440 +0840 +1040 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni2A59 +ENCODING 10841 +BBX 13 9 1 0 +BITMAP +8008 +4010 +2220 +1540 +0880 +1540 +2220 +4010 +8008 +ENDCHAR +STARTCHAR uni2A5A +ENCODING 10842 +BBX 11 11 2 0 +BITMAP +0400 +0E00 +0E00 +1500 +1500 +2480 +2480 +4440 +4440 +8420 +8420 +ENDCHAR +STARTCHAR uni2A5B +ENCODING 10843 +BBX 11 11 2 0 +BITMAP +8420 +8420 +4440 +4440 +2480 +2480 +1500 +1500 +0E00 +0E00 +0400 +ENDCHAR +STARTCHAR uni2A5C +ENCODING 10844 +BBX 11 11 2 0 +BITMAP +0400 +0A00 +0A00 +1100 +1100 +FFE0 +2080 +4040 +4040 +8020 +8020 +ENDCHAR +STARTCHAR uni2A5D +ENCODING 10845 +BBX 11 11 2 0 +BITMAP +8020 +8020 +4040 +4040 +2080 +FFE0 +1100 +1100 +0A00 +0A00 +0400 +ENDCHAR +STARTCHAR uni2A5E +ENCODING 10846 +BBX 9 13 3 0 +BITMAP +FF80 +0000 +FF80 +0000 +0800 +1400 +1400 +2200 +2200 +4100 +4100 +8080 +8080 +ENDCHAR +STARTCHAR uni2A5F +ENCODING 10847 +BBX 9 11 3 0 +BITMAP +0800 +1400 +1400 +2200 +2200 +4100 +4100 +8080 +8080 +0000 +FF80 +ENDCHAR +STARTCHAR uni2A60 +ENCODING 10848 +BBX 9 13 3 -2 +BITMAP +0800 +1400 +1400 +2200 +2200 +4100 +4100 +8080 +8080 +0000 +FF80 +0000 +FF80 +ENDCHAR +STARTCHAR uni2A61 +ENCODING 10849 +BBX 9 5 3 0 +BITMAP +2200 +1400 +0800 +0000 +FF80 +ENDCHAR +STARTCHAR uni2A62 +ENCODING 10850 +BBX 9 13 3 -2 +BITMAP +FF80 +0000 +FF80 +0000 +8080 +8080 +4100 +4100 +2200 +2200 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uni2A63 +ENCODING 10851 +BBX 9 13 3 -2 +BITMAP +8080 +8080 +4100 +4100 +2200 +2200 +1400 +1400 +0800 +0000 +FF80 +0000 +FF80 +ENDCHAR +STARTCHAR uni2A64 +ENCODING 10852 +BBX 11 11 2 0 +BITMAP +0060 +01A0 +0620 +1820 +6020 +FFE0 +6020 +1820 +0620 +01A0 +0060 +ENDCHAR +STARTCHAR uni2A65 +ENCODING 10853 +BBX 11 11 2 0 +BITMAP +C000 +B000 +8C00 +8300 +80C0 +FFE0 +80C0 +8300 +8C00 +B000 +C000 +ENDCHAR +STARTCHAR uni2A66 +ENCODING 10854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +FE +00 +FE +00 +10 +ENDCHAR +STARTCHAR uni2A67 +ENCODING 10855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +10 +00 +FE +00 +FE +00 +FE +ENDCHAR +STARTCHAR uni2A68 +ENCODING 10856 +BBX 11 8 2 1 +BITMAP +0A00 +0A00 +FFE0 +0A00 +FFE0 +0A00 +FFE0 +0A00 +ENDCHAR +STARTCHAR uni2A69 +ENCODING 10857 +BBX 11 8 2 1 +BITMAP +1500 +1500 +FFE0 +1500 +FFE0 +1500 +FFE0 +1500 +ENDCHAR +STARTCHAR uni2A6A +ENCODING 10858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 0 4 +BITMAP +20 +00 +64 +98 +ENDCHAR +STARTCHAR uni2A6B +ENCODING 10859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 0 2 +BITMAP +08 +00 +64 +98 +00 +40 +ENDCHAR +STARTCHAR uni2A6C +ENCODING 10860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 0 0 +BITMAP +64 +98 +00 +FC +00 +64 +98 +ENDCHAR +STARTCHAR uni2A6D +ENCODING 10861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +20 +00 +64 +98 +00 +FC +00 +FC +ENDCHAR +STARTCHAR uni2A6E +ENCODING 10862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 1 +BITMAP +54 +38 +10 +38 +54 +00 +FE +00 +FE +ENDCHAR +STARTCHAR uni2A6F +ENCODING 10863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 2 +BITMAP +30 +48 +84 +00 +64 +98 +00 +64 +98 +ENDCHAR +STARTCHAR uni2A70 +ENCODING 10864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 1 +BITMAP +64 +98 +00 +64 +98 +00 +FC +00 +FC +ENDCHAR +STARTCHAR uni2A71 +ENCODING 10865 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +00 +F8 +00 +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni2A72 +ENCODING 10866 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +20 +F8 +20 +20 +00 +F8 +00 +F8 +ENDCHAR +STARTCHAR uni2A73 +ENCODING 10867 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +FC +00 +FC +00 +64 +98 +ENDCHAR +STARTCHAR uni2A74 +ENCODING 10868 +BBX 11 4 2 3 +BITMAP +AFE0 +0000 +0000 +AFE0 +ENDCHAR +STARTCHAR uni2A75 +ENCODING 10869 +BBX 14 5 1 2 +BITMAP +FCFC +0000 +0000 +0000 +FCFC +ENDCHAR +STARTCHAR uni2A76 +ENCODING 10870 +BBX 14 4 1 3 +BITMAP +F7BC +0000 +0000 +F7BC +ENDCHAR +STARTCHAR uni2A77 +ENCODING 10871 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +48 +00 +FC +00 +00 +FC +00 +48 +ENDCHAR +STARTCHAR uni2A78 +ENCODING 10872 +BBX 12 7 2 2 +BITMAP +4920 +0000 +FFF0 +0000 +FFF0 +0000 +FFF0 +ENDCHAR +STARTCHAR uni2A79 +ENCODING 10873 +BBX 9 9 3 1 +BITMAP +0180 +0600 +1800 +6200 +8500 +6200 +1800 +0600 +0180 +ENDCHAR +STARTCHAR uni2A7A +ENCODING 10874 +BBX 9 9 3 1 +BITMAP +C000 +3000 +0C00 +2300 +5080 +2300 +0C00 +3000 +C000 +ENDCHAR +STARTCHAR uni2A7B +ENCODING 10875 +BBX 10 13 2 1 +BITMAP +6000 +9000 +2000 +2000 +00C0 +2300 +0C00 +3000 +4000 +3000 +0C00 +0300 +00C0 +ENDCHAR +STARTCHAR uni2A7C +ENCODING 10876 +BBX 10 13 3 1 +BITMAP +0180 +0240 +0080 +0080 +C000 +3080 +0C00 +0300 +0080 +0300 +0C00 +3000 +C000 +ENDCHAR +STARTCHAR uni2A7D +ENCODING 10877 +BBX 7 10 4 -1 +BITMAP +06 +18 +60 +80 +60 +18 +86 +60 +18 +06 +ENDCHAR +STARTCHAR uni2A7E +ENCODING 10878 +BBX 7 10 4 -1 +BITMAP +C0 +30 +0C +02 +0C +30 +C2 +0C +30 +C0 +ENDCHAR +STARTCHAR uni2A7F +ENCODING 10879 +BBX 7 10 4 -1 +BITMAP +06 +18 +60 +84 +60 +18 +86 +60 +18 +06 +ENDCHAR +STARTCHAR uni2A80 +ENCODING 10880 +BBX 7 10 4 -1 +BITMAP +C0 +30 +0C +82 +0C +30 +C2 +0C +30 +C0 +ENDCHAR +STARTCHAR uni2A81 +ENCODING 10881 +BBX 7 11 4 -1 +BITMAP +40 +06 +18 +60 +80 +60 +18 +86 +60 +18 +06 +ENDCHAR +STARTCHAR uni2A82 +ENCODING 10882 +BBX 7 11 4 -1 +BITMAP +04 +C0 +30 +0C +02 +0C +30 +C2 +0C +30 +C0 +ENDCHAR +STARTCHAR uni2A83 +ENCODING 10883 +BBX 7 12 4 -1 +BITMAP +02 +00 +06 +18 +60 +80 +60 +18 +86 +60 +18 +06 +ENDCHAR +STARTCHAR uni2A84 +ENCODING 10884 +BBX 7 12 4 -1 +BITMAP +80 +00 +C0 +30 +0C +02 +0C +30 +C2 +0C +30 +C0 +ENDCHAR +STARTCHAR uni2A85 +ENCODING 10885 +BBX 8 13 4 -2 +BITMAP +06 +18 +60 +80 +60 +18 +06 +00 +00 +71 +8E +71 +8E +ENDCHAR +STARTCHAR uni2A86 +ENCODING 10886 +BBX 8 13 3 -2 +BITMAP +60 +18 +06 +01 +06 +18 +60 +00 +00 +71 +8E +71 +8E +ENDCHAR +STARTCHAR uni2A87 +ENCODING 10887 +BBX 7 12 4 -2 +BITMAP +06 +18 +60 +80 +60 +18 +06 +04 +08 +FE +20 +40 +ENDCHAR +STARTCHAR uni2A88 +ENCODING 10888 +BBX 7 12 4 -2 +BITMAP +C0 +30 +0C +02 +0C +30 +C0 +04 +08 +FE +20 +40 +ENDCHAR +STARTCHAR uni2A89 +ENCODING 10889 +BBX 8 15 4 -2 +BITMAP +06 +18 +60 +80 +60 +18 +06 +01 +02 +75 +8E +71 +AE +40 +80 +ENDCHAR +STARTCHAR uni2A8A +ENCODING 10890 +BBX 8 15 3 -2 +BITMAP +60 +18 +06 +01 +06 +18 +60 +01 +02 +75 +8E +71 +AE +40 +80 +ENDCHAR +STARTCHAR uni2A8B +ENCODING 10891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 0 -2 +BITMAP +18 +60 +80 +60 +18 +00 +FC +00 +FC +00 +60 +18 +04 +18 +60 +ENDCHAR +STARTCHAR uni2A8C +ENCODING 10892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 0 -2 +BITMAP +60 +18 +04 +18 +60 +00 +FC +00 +FC +00 +18 +60 +80 +60 +18 +ENDCHAR +STARTCHAR uni2A8D +ENCODING 10893 +BBX 8 13 4 -2 +BITMAP +06 +18 +60 +80 +60 +18 +06 +00 +00 +71 +8E +00 +FF +ENDCHAR +STARTCHAR uni2A8E +ENCODING 10894 +BBX 8 13 3 -2 +BITMAP +60 +18 +06 +01 +06 +18 +60 +00 +00 +71 +8E +00 +FF +ENDCHAR +STARTCHAR uni2A8F +ENCODING 10895 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +0C +30 +40 +30 +0C +00 +64 +98 +00 +C0 +30 +08 +30 +C0 +ENDCHAR +STARTCHAR uni2A90 +ENCODING 10896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +C0 +30 +08 +30 +C0 +00 +64 +98 +00 +0C +30 +40 +30 +0C +ENDCHAR +STARTCHAR uni2A91 +ENCODING 10897 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -1 +BITMAP +18 +60 +80 +60 +18 +C0 +30 +08 +30 +C0 +00 +F8 +00 +F8 +ENDCHAR +STARTCHAR uni2A92 +ENCODING 10898 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -1 +BITMAP +C0 +30 +08 +30 +C0 +18 +60 +80 +60 +18 +00 +F8 +00 +F8 +ENDCHAR +STARTCHAR uni2A93 +ENCODING 10899 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +18 +60 +80 +60 +18 +80 +60 +18 +C0 +30 +08 +30 +C4 +18 +60 +ENDCHAR +STARTCHAR uni2A94 +ENCODING 10900 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +60 +18 +04 +18 +60 +04 +18 +60 +0C +30 +40 +30 +8C +60 +18 +ENDCHAR +STARTCHAR uni2A95 +ENCODING 10901 +BBX 7 10 4 -1 +BITMAP +06 +18 +60 +86 +18 +60 +80 +60 +18 +06 +ENDCHAR +STARTCHAR uni2A96 +ENCODING 10902 +BBX 7 10 4 -1 +BITMAP +C0 +30 +0C +C2 +30 +0C +02 +0C +30 +C0 +ENDCHAR +STARTCHAR uni2A97 +ENCODING 10903 +BBX 7 10 4 -1 +BITMAP +06 +18 +60 +86 +18 +60 +84 +60 +18 +06 +ENDCHAR +STARTCHAR uni2A98 +ENCODING 10904 +BBX 7 10 4 -1 +BITMAP +C0 +30 +0C +C2 +30 +0C +42 +0C +30 +C0 +ENDCHAR +STARTCHAR uni2A99 +ENCODING 10905 +BBX 7 11 4 -1 +BITMAP +FE +00 +FE +00 +06 +18 +60 +80 +60 +18 +06 +ENDCHAR +STARTCHAR uni2A9A +ENCODING 10906 +BBX 7 11 4 -1 +BITMAP +FE +00 +FE +00 +C0 +30 +0C +02 +0C +30 +C0 +ENDCHAR +STARTCHAR uni2A9B +ENCODING 10907 +BBX 7 13 4 -1 +BITMAP +06 +18 +60 +86 +18 +60 +86 +18 +60 +80 +60 +18 +06 +ENDCHAR +STARTCHAR uni2A9C +ENCODING 10908 +BBX 7 13 4 -1 +BITMAP +C0 +30 +0C +C2 +30 +0C +C2 +30 +0C +02 +0C +30 +C0 +ENDCHAR +STARTCHAR uni2A9D +ENCODING 10909 +BBX 8 10 4 -1 +BITMAP +71 +8E +00 +03 +0C +30 +40 +30 +0C +03 +ENDCHAR +STARTCHAR uni2A9E +ENCODING 10910 +BBX 8 11 4 -1 +BITMAP +71 +8E +00 +00 +C0 +30 +0C +02 +0C +30 +C0 +ENDCHAR +STARTCHAR uni2A9F +ENCODING 10911 +BBX 8 14 4 -2 +BITMAP +71 +8E +00 +03 +0C +30 +40 +30 +0C +03 +00 +FF +00 +FF +ENDCHAR +STARTCHAR uni2AA0 +ENCODING 10912 +BBX 8 14 4 -2 +BITMAP +8E +71 +00 +C0 +30 +0C +02 +0C +30 +C0 +00 +FF +00 +FF +ENDCHAR +STARTCHAR uni2AA1 +ENCODING 10913 +BBX 9 9 3 0 +BITMAP +0180 +0600 +1980 +6600 +8800 +6600 +1980 +0600 +0180 +ENDCHAR +STARTCHAR uni2AA2 +ENCODING 10914 +BBX 9 9 3 0 +BITMAP +C000 +3000 +CC00 +3300 +0880 +3300 +CC00 +3000 +C000 +ENDCHAR +STARTCHAR uni2AA3 +ENCODING 10915 +BBX 12 9 2 1 +BITMAP +0630 +18C0 +6300 +8400 +6300 +18C0 +0630 +0000 +FFF0 +ENDCHAR +STARTCHAR uni2AA4 +ENCODING 10916 +BBX 9 7 5 3 +BITMAP +C180 +3600 +1C00 +2200 +1C00 +3600 +C180 +ENDCHAR +STARTCHAR uni2AA5 +ENCODING 10917 +BBX 13 7 1 3 +BITMAP +8008 +6030 +18C0 +0500 +18C0 +6030 +8008 +ENDCHAR +STARTCHAR uni2AA6 +ENCODING 10918 +BBX 9 7 3 0 +BITMAP +0600 +1900 +6080 +8080 +6080 +1900 +0600 +ENDCHAR +STARTCHAR uni2AA7 +ENCODING 10919 +BBX 9 7 3 0 +BITMAP +3000 +4C00 +8300 +8080 +8300 +4C00 +3000 +ENDCHAR +STARTCHAR uni2AA8 +ENCODING 10920 +BBX 9 10 3 -1 +BITMAP +0600 +1900 +6080 +8080 +6080 +1900 +8600 +6000 +1800 +0600 +ENDCHAR +STARTCHAR uni2AA9 +ENCODING 10921 +BBX 9 10 3 -1 +BITMAP +3000 +4C00 +8300 +8080 +8300 +4C00 +3080 +0300 +0C00 +3000 +ENDCHAR +STARTCHAR uni2AAA +ENCODING 10922 +BBX 9 9 3 0 +BITMAP +0180 +0600 +1800 +6000 +FF80 +6000 +1800 +0600 +0180 +ENDCHAR +STARTCHAR uni2AAB +ENCODING 10923 +BBX 9 9 3 0 +BITMAP +C000 +3000 +0C00 +0300 +FF80 +0300 +0C00 +3000 +C000 +ENDCHAR +STARTCHAR uni2AAC +ENCODING 10924 +BBX 9 11 3 0 +BITMAP +0180 +0600 +1800 +6000 +FF80 +6000 +1800 +0600 +0180 +0000 +FF80 +ENDCHAR +STARTCHAR uni2AAD +ENCODING 10925 +BBX 9 11 3 0 +BITMAP +C000 +3000 +0C00 +0300 +FF80 +0300 +0C00 +3000 +C000 +0000 +FF80 +ENDCHAR +STARTCHAR uni2AAE +ENCODING 10926 +BBX 11 7 2 1 +BITMAP +0E00 +1100 +F1E0 +0000 +FFE0 +0000 +FFE0 +ENDCHAR +STARTCHAR uni2AAF +ENCODING 10927 +BBX 9 11 3 0 +BITMAP +0080 +0100 +0600 +1800 +E000 +1800 +0600 +0100 +0080 +0000 +FF80 +ENDCHAR +STARTCHAR uni2AB0 +ENCODING 10928 +BBX 9 11 4 0 +BITMAP +8000 +4000 +3000 +0C00 +0380 +0C00 +3000 +4000 +8000 +0000 +FF80 +ENDCHAR +STARTCHAR uni2AB1 +ENCODING 10929 +BBX 9 13 3 -2 +BITMAP +0080 +0100 +0600 +1800 +E000 +1800 +0600 +0100 +0280 +0400 +FF80 +1000 +2000 +ENDCHAR +STARTCHAR uni2AB2 +ENCODING 10930 +BBX 9 13 3 -2 +BITMAP +8000 +4000 +3000 +0C00 +0380 +0C00 +3000 +4000 +8400 +0800 +FF80 +2000 +4000 +ENDCHAR +STARTCHAR uni2AB3 +ENCODING 10931 +BBX 9 13 3 0 +BITMAP +0080 +0100 +0600 +1800 +E000 +1800 +0600 +0100 +0080 +0000 +FF80 +0000 +FF80 +ENDCHAR +STARTCHAR uni2AB4 +ENCODING 10932 +BBX 9 13 3 0 +BITMAP +8000 +4000 +3000 +0C00 +0380 +0C00 +3000 +4000 +8000 +0000 +FF80 +0000 +FF80 +ENDCHAR +STARTCHAR uni2AB5 +ENCODING 10933 +BBX 9 15 3 -2 +BITMAP +0080 +0100 +0600 +1800 +E000 +1800 +0600 +0100 +0180 +0200 +FF80 +0800 +FF80 +2000 +4000 +ENDCHAR +STARTCHAR uni2AB6 +ENCODING 10934 +BBX 9 15 3 -2 +BITMAP +8000 +4000 +3000 +0C00 +0380 +0C00 +3000 +4000 +8200 +0400 +FF80 +1000 +FF80 +4000 +8000 +ENDCHAR +STARTCHAR uni2AB7 +ENCODING 10935 +BBX 9 14 3 0 +BITMAP +0080 +0100 +0600 +1800 +E000 +1800 +0600 +0100 +0080 +0000 +3C80 +4300 +3880 +4700 +ENDCHAR +STARTCHAR uni2AB8 +ENCODING 10936 +BBX 9 14 3 0 +BITMAP +8000 +4000 +3000 +0C00 +0380 +0C00 +3000 +4000 +8000 +0000 +7100 +8E00 +7100 +8E00 +ENDCHAR +STARTCHAR uni2AB9 +ENCODING 10937 +BBX 9 16 3 -2 +BITMAP +0080 +0100 +0600 +1800 +E000 +1800 +0600 +0100 +0280 +0200 +3C80 +4700 +3880 +4F00 +1000 +1000 +ENDCHAR +STARTCHAR uni2ABA +ENCODING 10938 +BBX 9 16 3 -2 +BITMAP +8000 +4000 +3000 +0C00 +0380 +0C00 +3000 +4000 +8400 +0400 +7900 +8E00 +7100 +9E00 +2000 +2000 +ENDCHAR +STARTCHAR uni2ABB +ENCODING 10939 +BBX 14 9 1 2 +BITMAP +0084 +0108 +0630 +18C0 +E700 +18C0 +0630 +0108 +0084 +ENDCHAR +STARTCHAR uni2ABC +ENCODING 10940 +BBX 14 9 1 2 +BITMAP +8400 +4200 +3180 +0C60 +039C +0C60 +3180 +4200 +8400 +ENDCHAR +STARTCHAR uni2ABD +ENCODING 10941 +BBX 11 8 2 0 +BITMAP +3FE0 +4000 +8000 +9800 +9800 +8000 +4000 +3FE0 +ENDCHAR +STARTCHAR uni2ABE +ENCODING 10942 +BBX 11 8 2 0 +BITMAP +FF80 +0040 +0020 +0320 +0320 +0020 +0040 +FF80 +ENDCHAR +STARTCHAR uni2ABF +ENCODING 10943 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +7C +80 +80 +80 +7C +00 +10 +10 +7C +10 +10 +ENDCHAR +STARTCHAR uni2AC0 +ENCODING 10944 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +F8 +04 +04 +04 +F8 +00 +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni2AC1 +ENCODING 10945 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +7C +80 +80 +80 +7C +00 +44 +28 +10 +28 +44 +ENDCHAR +STARTCHAR uni2AC2 +ENCODING 10946 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +F8 +04 +04 +04 +F8 +00 +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni2AC3 +ENCODING 10947 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +30 +00 +7C +80 +80 +80 +7C +00 +FC +ENDCHAR +STARTCHAR uni2AC4 +ENCODING 10948 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +60 +60 +00 +F8 +04 +04 +04 +F8 +00 +FC +ENDCHAR +STARTCHAR uni2AC5 +ENCODING 10949 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +7C +80 +80 +80 +7C +00 +FC +00 +FC +ENDCHAR +STARTCHAR uni2AC6 +ENCODING 10950 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +F8 +04 +04 +04 +F8 +00 +FC +00 +FC +ENDCHAR +STARTCHAR uni2AC7 +ENCODING 10951 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +7C +80 +80 +80 +80 +7C +00 +64 +98 +ENDCHAR +STARTCHAR uni2AC8 +ENCODING 10952 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +F8 +04 +04 +04 +04 +F8 +00 +64 +98 +ENDCHAR +STARTCHAR uni2AC9 +ENCODING 10953 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +7C +80 +80 +80 +7C +00 +64 +98 +64 +98 +ENDCHAR +STARTCHAR uni2ACA +ENCODING 10954 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +F8 +04 +04 +04 +F8 +00 +64 +98 +64 +98 +ENDCHAR +STARTCHAR uni2ACB +ENCODING 10955 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +7C +80 +80 +80 +7C +00 +08 +FC +10 +FC +20 +ENDCHAR +STARTCHAR uni2ACC +ENCODING 10956 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +F8 +04 +04 +04 +F8 +00 +08 +FC +10 +FC +20 +ENDCHAR +STARTCHAR uni2ACD +ENCODING 10957 +BBX 14 10 1 0 +BITMAP +FFFC +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +FE00 +ENDCHAR +STARTCHAR uni2ACE +ENCODING 10958 +BBX 14 10 1 0 +BITMAP +FFFC +0004 +0004 +0004 +0004 +0004 +0004 +0004 +0004 +01FC +ENDCHAR +STARTCHAR uni2ACF +ENCODING 10959 +BBX 9 8 3 0 +BITMAP +3F80 +4080 +8080 +8080 +8080 +8080 +4080 +3F80 +ENDCHAR +STARTCHAR uni2AD0 +ENCODING 10960 +BBX 9 8 3 0 +BITMAP +FE00 +8100 +8080 +8080 +8080 +8080 +8100 +FE00 +ENDCHAR +STARTCHAR uni2AD1 +ENCODING 10961 +BBX 9 10 3 0 +BITMAP +3F80 +4080 +8080 +8080 +8080 +8080 +4080 +3F80 +0000 +FF80 +ENDCHAR +STARTCHAR uni2AD2 +ENCODING 10962 +BBX 9 10 3 0 +BITMAP +FE00 +8100 +8080 +8080 +8080 +8080 +8100 +FE00 +0000 +FF80 +ENDCHAR +STARTCHAR uni2AD3 +ENCODING 10963 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +7C +80 +80 +80 +7C +00 +F8 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni2AD4 +ENCODING 10964 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +F8 +04 +04 +04 +F8 +00 +7C +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni2AD5 +ENCODING 10965 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +7C +80 +80 +80 +7C +00 +7C +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni2AD6 +ENCODING 10966 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +F8 +04 +04 +04 +F8 +00 +F8 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni2AD7 +ENCODING 10967 +BBX 13 5 2 2 +BITMAP +F8F8 +0500 +0500 +0500 +F8F8 +ENDCHAR +STARTCHAR uni2AD8 +ENCODING 10968 +BBX 13 5 2 2 +BITMAP +F8F8 +0500 +1FC0 +0500 +F8F8 +ENDCHAR +STARTCHAR uni2AD9 +ENCODING 10969 +BBX 9 10 3 0 +BITMAP +3E00 +4900 +8880 +8880 +8880 +8880 +8880 +8880 +8880 +8880 +ENDCHAR +STARTCHAR uni2ADA +ENCODING 10970 +BBX 9 12 3 0 +BITMAP +7F00 +0800 +3E00 +4900 +8880 +8880 +8880 +8880 +8880 +8880 +8880 +8880 +ENDCHAR +STARTCHAR uni2ADB +ENCODING 10971 +BBX 9 14 3 -2 +BITMAP +0800 +0800 +3E00 +4900 +8880 +8880 +8880 +8880 +8880 +8880 +8880 +8880 +0800 +0800 +ENDCHAR +STARTCHAR uni2ADC +ENCODING 10972 +BBX 9 10 3 0 +BITMAP +0800 +0880 +0900 +0A00 +0C00 +8880 +9880 +A880 +4900 +BE00 +ENDCHAR +STARTCHAR uni2ADD +ENCODING 10973 +BBX 9 10 3 0 +BITMAP +0800 +0800 +0800 +0800 +0800 +8880 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uni2ADE +ENCODING 10974 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +10 +10 +10 +10 +F0 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2ADF +ENCODING 10975 +BBX 9 4 3 2 +BITMAP +FF80 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni2AE0 +ENCODING 10976 +BBX 9 4 3 2 +BITMAP +0800 +0800 +0800 +FF80 +ENDCHAR +STARTCHAR uni2AE1 +ENCODING 10977 +BBX 11 9 2 2 +BITMAP +0400 +0400 +04E0 +0500 +04C0 +0420 +05C0 +0400 +FFE0 +ENDCHAR +STARTCHAR uni2AE2 +ENCODING 10978 +BBX 10 9 2 0 +BITMAP +8000 +8000 +FFC0 +8000 +FFC0 +8000 +FFC0 +8000 +8000 +ENDCHAR +STARTCHAR uni2AE3 +ENCODING 10979 +BBX 12 9 2 0 +BITMAP +0050 +0050 +0050 +0050 +FFD0 +0050 +0050 +0050 +0050 +ENDCHAR +STARTCHAR uni2AE4 +ENCODING 10980 +BBX 10 9 3 0 +BITMAP +0040 +0040 +0040 +FFC0 +0040 +FFC0 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni2AE5 +ENCODING 10981 +BBX 12 9 2 0 +BITMAP +0050 +0050 +0050 +FFD0 +0050 +FFD0 +0050 +0050 +0050 +ENDCHAR +STARTCHAR uni2AE6 +ENCODING 10982 +BBX 12 9 2 0 +BITMAP +A000 +A000 +A000 +A000 +FFF0 +A000 +A000 +A000 +A000 +ENDCHAR +STARTCHAR uni2AE7 +ENCODING 10983 +BBX 9 6 3 2 +BITMAP +FF80 +0000 +FF80 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni2AE8 +ENCODING 10984 +BBX 9 6 3 2 +BITMAP +0800 +0800 +0800 +FF80 +0000 +FF80 +ENDCHAR +STARTCHAR uni2AE9 +ENCODING 10985 +BBX 9 9 3 2 +BITMAP +0800 +0800 +0800 +FF80 +0000 +FF80 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni2AEA +ENCODING 10986 +BBX 9 10 3 0 +BITMAP +FF80 +1400 +1400 +1400 +1400 +1400 +1400 +1400 +1400 +1400 +ENDCHAR +STARTCHAR uni2AEB +ENCODING 10987 +BBX 9 10 3 0 +BITMAP +1400 +1400 +1400 +1400 +1400 +1400 +1400 +1400 +1400 +FF80 +ENDCHAR +STARTCHAR uni2AEC +ENCODING 10988 +BBX 10 5 3 1 +BITMAP +FFC0 +0040 +FFC0 +0040 +0040 +ENDCHAR +STARTCHAR uni2AED +ENCODING 10989 +BBX 10 5 3 1 +BITMAP +FFC0 +8000 +FFC0 +8000 +8000 +ENDCHAR +STARTCHAR uni2AEE +ENCODING 10990 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +30 +B0 +70 +30 +30 +38 +34 +30 +30 +ENDCHAR +STARTCHAR uni2AEF +ENCODING 10991 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +88 +70 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2AF0 +ENCODING 10992 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +20 +20 +20 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni2AF1 +ENCODING 10993 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +20 +20 +20 +20 +20 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni2AF2 +ENCODING 10994 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +28 +28 +28 +28 +28 +FE +28 +28 +28 +28 +ENDCHAR +STARTCHAR uni2AF3 +ENCODING 10995 +BBX 8 10 4 0 +BITMAP +24 +24 +24 +24 +24 +75 +AE +24 +24 +24 +ENDCHAR +STARTCHAR uni2AF4 +ENCODING 10996 +BBX 7 10 4 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni2AF5 +ENCODING 10997 +BBX 11 10 2 0 +BITMAP +2480 +2480 +2480 +2480 +2480 +FFE0 +2480 +2480 +2480 +2480 +ENDCHAR +STARTCHAR uni2AF6 +ENCODING 10998 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 10 3 0 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2AF7 +ENCODING 10999 +BBX 11 11 2 0 +BITMAP +0060 +0180 +0660 +1980 +6660 +8880 +6660 +1980 +0660 +0180 +0060 +ENDCHAR +STARTCHAR uni2AF8 +ENCODING 11000 +BBX 11 11 2 0 +BITMAP +C000 +3000 +CC00 +3300 +CCC0 +2220 +CCC0 +3300 +CC00 +3000 +C000 +ENDCHAR +STARTCHAR uni2AF9 +ENCODING 11001 +BBX 7 13 4 -1 +BITMAP +06 +18 +60 +80 +60 +18 +86 +60 +18 +86 +60 +18 +06 +ENDCHAR +STARTCHAR uni2AFA +ENCODING 11002 +BBX 7 13 4 -1 +BITMAP +C0 +30 +0C +02 +0C +30 +C2 +0C +30 +C2 +0C +30 +C0 +ENDCHAR +STARTCHAR uni2AFB +ENCODING 11003 +BBX 11 10 2 0 +BITMAP +0920 +0920 +1240 +1240 +2480 +2480 +4900 +4900 +9200 +9200 +ENDCHAR +STARTCHAR uni2AFC +ENCODING 11004 +BBX 7 11 4 -1 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni2AFD +ENCODING 11005 +BBX 8 10 4 0 +BITMAP +09 +09 +12 +12 +24 +24 +48 +48 +90 +90 +ENDCHAR +STARTCHAR uni2AFE +ENCODING 11006 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 0 +BITMAP +E0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +E0 +ENDCHAR +STARTCHAR uni2AFF +ENCODING 11007 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 -1 +BITMAP +E0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +E0 +ENDCHAR +STARTCHAR uni2B00 +ENCODING 11008 +BBX 11 11 2 0 +BITMAP +07E0 +0420 +0220 +0420 +08A0 +1160 +2200 +4400 +8800 +5000 +2000 +ENDCHAR +STARTCHAR uni2B01 +ENCODING 11009 +BBX 11 11 2 0 +BITMAP +FC00 +8400 +8800 +8400 +A200 +D100 +0880 +0440 +0220 +0140 +0080 +ENDCHAR +STARTCHAR uni2B02 +ENCODING 11010 +BBX 11 11 2 0 +BITMAP +2000 +5000 +8800 +4400 +2200 +1160 +08A0 +0420 +0220 +0420 +07E0 +ENDCHAR +STARTCHAR uni2B03 +ENCODING 11011 +BBX 11 11 2 0 +BITMAP +0080 +0140 +0220 +0440 +0880 +D100 +A200 +8400 +8800 +8400 +FC00 +ENDCHAR +STARTCHAR uni2B04 +ENCODING 11012 +BBX 14 7 1 3 +BITMAP +1020 +3030 +5FE8 +8004 +5FE8 +3030 +1020 +ENDCHAR +STARTCHAR uni2B05 +ENCODING 11013 +BBX 13 7 1 3 +BITMAP +1000 +3000 +7FF8 +FFF8 +7FF8 +3000 +1000 +ENDCHAR +STARTCHAR uni2B06 +ENCODING 11014 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +10 +38 +7C +FE +38 +38 +38 +38 +38 +38 +38 +38 +ENDCHAR +STARTCHAR uni2B07 +ENCODING 11015 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +38 +38 +38 +38 +38 +38 +38 +38 +FE +7C +38 +10 +ENDCHAR +STARTCHAR uni2B08 +ENCODING 11016 +BBX 11 11 2 0 +BITMAP +07E0 +07E0 +03E0 +07E0 +0FE0 +1F60 +3E00 +7C00 +F800 +7000 +2000 +ENDCHAR +STARTCHAR uni2B09 +ENCODING 11017 +BBX 11 11 2 0 +BITMAP +FC00 +FC00 +F800 +FC00 +FE00 +DF00 +0F80 +07C0 +03E0 +01C0 +0080 +ENDCHAR +STARTCHAR uni2B0A +ENCODING 11018 +BBX 11 11 2 0 +BITMAP +2000 +7000 +F800 +7C00 +3E00 +1F60 +0FE0 +07E0 +03E0 +07E0 +07E0 +ENDCHAR +STARTCHAR uni2B0B +ENCODING 11019 +BBX 11 11 2 0 +BITMAP +0080 +01C0 +03E0 +07C0 +0F80 +DF00 +FE00 +FC00 +F800 +FC00 +FC00 +ENDCHAR +STARTCHAR uni2B0C +ENCODING 11020 +BBX 14 7 1 3 +BITMAP +1020 +3030 +7FF8 +FFFC +7FF8 +3030 +1020 +ENDCHAR +STARTCHAR uni2B0D +ENCODING 11021 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +10 +38 +7C +FE +38 +38 +38 +38 +FE +7C +38 +10 +ENDCHAR +STARTCHAR uni2B0E +ENCODING 11022 +BBX 15 5 0 2 +BITMAP +FFF8 +0008 +002A +001C +0008 +ENDCHAR +STARTCHAR uni2B0F +ENCODING 11023 +BBX 15 5 0 6 +BITMAP +0008 +001C +002A +0008 +FFF8 +ENDCHAR +STARTCHAR uni2B10 +ENCODING 11024 +BBX 15 5 1 2 +BITMAP +3FFE +2000 +A800 +7000 +2000 +ENDCHAR +STARTCHAR uni2B11 +ENCODING 11025 +BBX 15 5 1 6 +BITMAP +2000 +7000 +A800 +2000 +3FFE +ENDCHAR +STARTCHAR uni2B12 +ENCODING 11026 +BBX 10 10 3 -1 +BITMAP +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +8040 +8040 +8040 +8040 +FFC0 +ENDCHAR +STARTCHAR uni2B13 +ENCODING 11027 +BBX 10 10 3 -1 +BITMAP +FFC0 +8040 +8040 +8040 +8040 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +ENDCHAR +STARTCHAR uni2B14 +ENCODING 11028 +BBX 10 10 3 -1 +BITMAP +FFC0 +FFC0 +BFC0 +9FC0 +8FC0 +87C0 +83C0 +81C0 +80C0 +FFC0 +ENDCHAR +STARTCHAR uni2B15 +ENCODING 11029 +BBX 10 10 3 -1 +BITMAP +FFC0 +C040 +E040 +F040 +F840 +FC40 +FE40 +FF40 +FFC0 +FFC0 +ENDCHAR +STARTCHAR uni2B16 +ENCODING 11030 +BBX 10 10 3 -1 +BITMAP +0C00 +1A00 +3900 +7880 +F840 +F840 +7880 +3900 +1A00 +0C00 +ENDCHAR +STARTCHAR uni2B17 +ENCODING 11031 +BBX 10 10 3 -1 +BITMAP +0C00 +1600 +2700 +4780 +87C0 +87C0 +4780 +2700 +1600 +0C00 +ENDCHAR +STARTCHAR uni2B18 +ENCODING 11032 +BBX 10 10 3 -1 +BITMAP +0C00 +1E00 +3F00 +7F80 +FFC0 +8040 +4080 +2100 +1200 +0C00 +ENDCHAR +STARTCHAR uni2B19 +ENCODING 11033 +BBX 10 10 3 -1 +BITMAP +0C00 +1200 +2100 +4080 +8040 +FFC0 +7F80 +3F00 +1E00 +0C00 +ENDCHAR +STARTCHAR uni2B1A +ENCODING 11034 +BBX 11 11 2 0 +BITMAP +AAA0 +0000 +8020 +0000 +8020 +0000 +8020 +0000 +8020 +0000 +AAA0 +ENDCHAR +STARTCHAR uni2B1B +ENCODING 11035 +BBX 14 14 1 -1 +BITMAP +FFFC +FFFC +FFFC +FFFC +FFFC +FFFC +FFFC +FFFC +FFFC +FFFC +FFFC +FFFC +FFFC +FFFC +ENDCHAR +STARTCHAR uni2B1C +ENCODING 11036 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni2B1D +ENCODING 11037 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 2 +BITMAP +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni2B1E +ENCODING 11038 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 2 +BITMAP +F0 +90 +90 +F0 +ENDCHAR +STARTCHAR uni2B1F +ENCODING 11039 +BBX 12 11 2 0 +BITMAP +0600 +0F00 +1F80 +3FC0 +7FE0 +FFF0 +7FE0 +7FE0 +3FC0 +3FC0 +1F80 +ENDCHAR +STARTCHAR uni2B20 +ENCODING 11040 +BBX 12 11 2 0 +BITMAP +0600 +0900 +1080 +2040 +4020 +8010 +4020 +4020 +2040 +2040 +1F80 +ENDCHAR +STARTCHAR uni2B21 +ENCODING 11041 +BBX 11 11 2 -1 +BITMAP +0400 +1B00 +60C0 +8020 +8020 +8020 +8020 +8020 +60C0 +1B00 +0400 +ENDCHAR +STARTCHAR uni2B22 +ENCODING 11042 +BBX 11 11 2 -1 +BITMAP +0400 +1F00 +7FC0 +FFE0 +FFE0 +FFE0 +FFE0 +FFE0 +7FC0 +1F00 +0400 +ENDCHAR +STARTCHAR uni2B23 +ENCODING 11043 +BBX 14 10 1 0 +BITMAP +0FC0 +1FE0 +3FF0 +7FF8 +FFFC +FFFC +7FF8 +3FF0 +1FE0 +0FC0 +ENDCHAR +STARTCHAR uni2B24 +ENCODING 11044 +BBX 13 13 2 -1 +BITMAP +0700 +1FC0 +3FE0 +7FF0 +7FF0 +FFF8 +FFF8 +FFF8 +7FF0 +7FF0 +3FE0 +1FC0 +0700 +ENDCHAR +STARTCHAR uni2B25 +ENCODING 11045 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +10 +38 +7C +FE +7C +38 +10 +ENDCHAR +STARTCHAR uni2B26 +ENCODING 11046 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +10 +28 +44 +82 +44 +28 +10 +ENDCHAR +STARTCHAR uni2B27 +ENCODING 11047 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +38 +38 +7C +7C +FE +7C +7C +38 +38 +10 +ENDCHAR +STARTCHAR uni2B28 +ENCODING 11048 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +28 +28 +44 +44 +82 +44 +44 +28 +28 +10 +ENDCHAR +STARTCHAR uni2B29 +ENCODING 11049 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 3 +BITMAP +20 +70 +F8 +70 +20 +ENDCHAR +STARTCHAR uni2B2A +ENCODING 11050 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +20 +70 +70 +F8 +70 +70 +20 +ENDCHAR +STARTCHAR uni2B2B +ENCODING 11051 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +20 +50 +50 +88 +50 +50 +20 +ENDCHAR +STARTCHAR uni2B2C +ENCODING 11052 +BBX 15 6 0 0 +BITMAP +0FE0 +7FFC +FFFE +FFFE +7FFC +0FE0 +ENDCHAR +STARTCHAR uni2B2D +ENCODING 11053 +BBX 15 6 0 0 +BITMAP +0FE0 +701C +8002 +8002 +701C +0FE0 +ENDCHAR +STARTCHAR uni2B2E +ENCODING 11054 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +30 +78 +78 +78 +FC +FC +FC +FC +FC +78 +78 +78 +30 +ENDCHAR +STARTCHAR uni2B2F +ENCODING 11055 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +30 +48 +48 +48 +84 +84 +84 +84 +84 +48 +48 +48 +30 +ENDCHAR +STARTCHAR uni2B30 +ENCODING 11056 +BBX 15 5 1 4 +BITMAP +21C0 +4220 +FFFE +4220 +21C0 +ENDCHAR +STARTCHAR uni2B31 +ENCODING 11057 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 15 0 -1 +BITMAP +20 +40 +FF +40 +20 +20 +40 +FF +40 +20 +20 +40 +FF +40 +20 +ENDCHAR +STARTCHAR uni2B32 +ENCODING 11058 +BBX 15 7 1 3 +BITMAP +0380 +2540 +4920 +FFFE +4920 +2540 +0380 +ENDCHAR +STARTCHAR uni2B33 +ENCODING 11059 +BBX 15 5 1 4 +BITMAP +2000 +4888 +F556 +4220 +2000 +ENDCHAR +STARTCHAR uni2B34 +ENCODING 11060 +BBX 15 5 1 4 +BITMAP +2840 +5040 +FFFE +5040 +2840 +ENDCHAR +STARTCHAR uni2B35 +ENCODING 11061 +BBX 15 5 1 4 +BITMAP +28A0 +50A0 +FFFE +50A0 +28A0 +ENDCHAR +STARTCHAR uni2B36 +ENCODING 11062 +BBX 14 5 1 4 +BITMAP +2804 +5004 +FFFC +5004 +2804 +ENDCHAR +STARTCHAR uni2B37 +ENCODING 11063 +BBX 14 5 1 4 +BITMAP +2804 +5008 +FDB0 +5008 +2804 +ENDCHAR +STARTCHAR uni2B38 +ENCODING 11064 +BBX 15 5 1 4 +BITMAP +2000 +4000 +EAAA +4000 +2000 +ENDCHAR +STARTCHAR uni2B39 +ENCODING 11065 +BBX 14 5 1 4 +BITMAP +2084 +4088 +FFF0 +4088 +2084 +ENDCHAR +STARTCHAR uni2B3A +ENCODING 11066 +BBX 14 5 1 4 +BITMAP +2144 +4148 +FFF0 +4148 +2144 +ENDCHAR +STARTCHAR uni2B3B +ENCODING 11067 +BBX 14 5 1 4 +BITMAP +2804 +5008 +FFF0 +5008 +2804 +ENDCHAR +STARTCHAR uni2B3C +ENCODING 11068 +BBX 14 5 1 4 +BITMAP +2884 +5088 +FFF0 +5088 +2884 +ENDCHAR +STARTCHAR uni2B3D +ENCODING 11069 +BBX 14 5 1 4 +BITMAP +2944 +5148 +FFF0 +5148 +2944 +ENDCHAR +STARTCHAR uni2B3E +ENCODING 11070 +BBX 15 7 1 3 +BITMAP +1000 +2110 +40A0 +FFFE +40A0 +2110 +1000 +ENDCHAR +STARTCHAR uni2B3F +ENCODING 11071 +BBX 15 5 1 4 +BITMAP +2078 +4084 +FF02 +4000 +2000 +ENDCHAR +STARTCHAR uni2B40 +ENCODING 11072 +BBX 15 7 1 4 +BITMAP +03F0 +0000 +23F0 +4000 +FFFE +4000 +2000 +ENDCHAR +STARTCHAR uni2B41 +ENCODING 11073 +BBX 15 7 1 4 +BITMAP +0038 +0444 +2380 +4000 +FFFE +4000 +2000 +ENDCHAR +STARTCHAR uni2B42 +ENCODING 11074 +BBX 15 9 1 0 +BITMAP +2000 +4000 +FFFE +4038 +2444 +0380 +0038 +0444 +0380 +ENDCHAR +STARTCHAR uni2B43 +ENCODING 11075 +BBX 14 9 1 2 +BITMAP +C000 +3000 +0C10 +0308 +1FFC +0308 +0C10 +3000 +C000 +ENDCHAR +STARTCHAR uni2B44 +ENCODING 11076 +BBX 14 7 1 2 +BITMAP +FF00 +0090 +0048 +FFFC +0048 +0090 +FF00 +ENDCHAR +STARTCHAR uni2B45 +ENCODING 11077 +BBX 15 11 1 1 +BITMAP +0400 +0800 +1FFE +2000 +7FFE +8000 +7FFE +2000 +1FFE +0800 +0400 +ENDCHAR +STARTCHAR uni2B46 +ENCODING 11078 +BBX 15 11 0 1 +BITMAP +0040 +0020 +FFF0 +0008 +FFFC +0002 +FFFC +0008 +FFF0 +0020 +0040 +ENDCHAR +STARTCHAR uni2B47 +ENCODING 11079 +BBX 15 7 0 4 +BITMAP +0380 +4440 +3808 +0004 +FFFE +0004 +0008 +ENDCHAR +STARTCHAR uni2B48 +ENCODING 11080 +BBX 15 9 0 0 +BITMAP +0008 +0004 +FFFE +0384 +4448 +3800 +0380 +4440 +3800 +ENDCHAR +STARTCHAR uni2B49 +ENCODING 11081 +BBX 15 7 1 4 +BITMAP +0380 +0444 +2038 +4000 +FFFE +4000 +2000 +ENDCHAR +STARTCHAR uni2B4A +ENCODING 11082 +BBX 15 9 1 0 +BITMAP +2000 +4000 +FFFE +4380 +2444 +0038 +0380 +0444 +0038 +ENDCHAR +STARTCHAR uni2B4B +ENCODING 11083 +BBX 15 7 1 2 +BITMAP +2000 +4000 +FFFE +4000 +2038 +0444 +0380 +ENDCHAR +STARTCHAR uni2B4C +ENCODING 11084 +BBX 15 7 0 2 +BITMAP +0008 +0004 +FFFE +0004 +0388 +4440 +3800 +ENDCHAR +STARTCHAR uni2B4D +ENCODING 11085 +BBX 10 12 3 0 +BITMAP +0400 +0800 +1000 +2000 +4000 +FFC0 +0080 +0100 +0200 +1400 +1800 +1C00 +ENDCHAR +STARTCHAR uni2B4E +ENCODING 11086 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 1 +BITMAP +70 +30 +50 +40 +80 +80 +ENDCHAR +STARTCHAR uni2B4F +ENCODING 11087 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 1 +BITMAP +80 +80 +40 +50 +30 +70 +ENDCHAR +STARTCHAR uni2B50 +ENCODING 11088 +BBX 13 13 1 0 +BITMAP +0200 +0200 +0500 +0500 +F8F8 +4010 +2020 +1040 +0880 +1040 +2220 +4D90 +7070 +ENDCHAR +STARTCHAR uni2B51 +ENCODING 11089 +BBX 11 10 2 1 +BITMAP +0400 +0E00 +0E00 +FFE0 +7FC0 +3F80 +3F80 +7BC0 +F1E0 +C060 +ENDCHAR +STARTCHAR uni2B52 +ENCODING 11090 +BBX 11 10 2 1 +BITMAP +0400 +0A00 +0A00 +F1E0 +4040 +2080 +2480 +4A40 +B1A0 +C060 +ENDCHAR +STARTCHAR uni2B53 +ENCODING 11091 +BBX 11 12 3 0 +BITMAP +0400 +1E00 +7F00 +FF80 +FFC0 +FFE0 +FFE0 +FFC0 +FF80 +7F00 +1E00 +0400 +ENDCHAR +STARTCHAR uni2B54 +ENCODING 11092 +BBX 11 12 3 0 +BITMAP +0400 +1A00 +6100 +8080 +8040 +8020 +8020 +8040 +8080 +6100 +1A00 +0400 +ENDCHAR +STARTCHAR uni2B55 +ENCODING 11093 +BBX 13 13 1 0 +BITMAP +0F80 +1FC0 +3060 +6030 +C018 +C018 +C018 +C018 +C018 +6030 +3060 +1FC0 +0F80 +ENDCHAR +STARTCHAR uni2B56 +ENCODING 11094 +BBX 13 10 1 1 +BITMAP +1FC0 +3FE0 +6030 +CF98 +D058 +D058 +CF98 +6030 +3FE0 +1FC0 +ENDCHAR +STARTCHAR uni2B57 +ENCODING 11095 +BBX 13 13 1 0 +BITMAP +0F80 +1FC0 +3060 +6030 +C718 +C898 +C898 +C898 +C718 +6030 +3060 +1FC0 +0F80 +ENDCHAR +STARTCHAR uni2B58 +ENCODING 11096 +BBX 9 9 3 1 +BITMAP +1C00 +7F00 +6300 +C180 +C180 +C180 +6300 +7F00 +1C00 +ENDCHAR +STARTCHAR uni2B59 +ENCODING 11097 +BBX 13 13 1 0 +BITMAP +0F80 +1FC0 +3060 +7070 +C898 +C518 +C218 +C518 +C898 +7070 +3060 +1FC0 +0F80 +ENDCHAR +STARTCHAR uni2B5A +ENCODING 11098 +BBX 10 11 2 0 +BITMAP +0F00 +1080 +1080 +2100 +2540 +2380 +4100 +4000 +4000 +8000 +8000 +ENDCHAR +STARTCHAR uni2B5B +ENCODING 11099 +BBX 11 11 3 0 +BITMAP +7800 +8400 +8400 +4200 +4200 +0100 +0100 +0080 +02A0 +01C0 +0080 +ENDCHAR +STARTCHAR uni2B5C +ENCODING 11100 +BBX 9 11 4 0 +BITMAP +0200 +0700 +0A80 +0200 +0400 +0400 +0400 +0400 +0800 +0800 +F800 +ENDCHAR +STARTCHAR uni2B5D +ENCODING 11101 +BBX 9 11 4 0 +BITMAP +F800 +0800 +0800 +0400 +0400 +0400 +0400 +0200 +0A80 +0700 +0200 +ENDCHAR +STARTCHAR uni2B5E +ENCODING 11102 +BBX 8 11 5 0 +BITMAP +20 +20 +20 +20 +40 +40 +44 +42 +8F +B2 +C4 +ENDCHAR +STARTCHAR uni2B5F +ENCODING 11103 +BBX 8 7 5 0 +BITMAP +40 +40 +44 +82 +8F +B2 +C4 +ENDCHAR +STARTCHAR uni2B60 +ENCODING 11104 +BBX 14 5 1 4 +BITMAP +2000 +6000 +FFFC +6000 +2000 +ENDCHAR +STARTCHAR uni2B61 +ENCODING 11105 +BBX 5 14 5 -2 +BITMAP +20 +70 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2B62 +ENCODING 11106 +BBX 14 5 1 4 +BITMAP +0010 +0018 +FFFC +0018 +0010 +ENDCHAR +STARTCHAR uni2B63 +ENCODING 11107 +BBX 5 14 5 -2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +70 +20 +ENDCHAR +STARTCHAR uni2B64 +ENCODING 11108 +BBX 15 5 0 4 +BITMAP +2008 +600C +FFFE +600C +2008 +ENDCHAR +STARTCHAR uni2B65 +ENCODING 11109 +BBX 5 14 5 -2 +BITMAP +20 +70 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +70 +20 +ENDCHAR +STARTCHAR uni2B66 +ENCODING 11110 +BBX 10 10 3 0 +BITMAP +F000 +E000 +E000 +9000 +0800 +0400 +0200 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uni2B67 +ENCODING 11111 +BBX 10 10 3 0 +BITMAP +03C0 +01C0 +01C0 +0240 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni2B68 +ENCODING 11112 +BBX 10 10 3 0 +BITMAP +8000 +4000 +2000 +1000 +0800 +0400 +0240 +01C0 +01C0 +03C0 +ENDCHAR +STARTCHAR uni2B69 +ENCODING 11113 +BBX 10 10 3 0 +BITMAP +0040 +0080 +0100 +0200 +0400 +0800 +9000 +E000 +E000 +F000 +ENDCHAR +STARTCHAR uni2B6A +ENCODING 11114 +BBX 14 5 1 4 +BITMAP +2000 +6000 +FB6C +6000 +2000 +ENDCHAR +STARTCHAR uni2B6B +ENCODING 11115 +BBX 5 14 5 -2 +BITMAP +20 +70 +F8 +20 +20 +00 +20 +20 +00 +20 +20 +00 +20 +20 +ENDCHAR +STARTCHAR uni2B6C +ENCODING 11116 +BBX 14 5 1 4 +BITMAP +0010 +0018 +DB7C +0018 +0010 +ENDCHAR +STARTCHAR uni2B6D +ENCODING 11117 +BBX 5 14 5 -2 +BITMAP +20 +20 +00 +20 +20 +00 +20 +20 +00 +20 +20 +F8 +70 +20 +ENDCHAR +STARTCHAR uni2B6E +ENCODING 11118 +BBX 12 11 2 -1 +BITMAP +7000 +3040 +5020 +8010 +8010 +8010 +8010 +8010 +4020 +2040 +1F80 +ENDCHAR +STARTCHAR uni2B6F +ENCODING 11119 +BBX 12 11 2 -1 +BITMAP +00E0 +20C0 +40A0 +8010 +8010 +8010 +8010 +8010 +4020 +2040 +1F80 +ENDCHAR +STARTCHAR uni2B70 +ENCODING 11120 +BBX 14 5 1 4 +BITMAP +8800 +9800 +BFFC +9800 +8800 +ENDCHAR +STARTCHAR uni2B71 +ENCODING 11121 +BBX 5 14 5 -2 +BITMAP +F8 +00 +20 +70 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2B72 +ENCODING 11122 +BBX 14 5 1 4 +BITMAP +0044 +0064 +FFF4 +0064 +0044 +ENDCHAR +STARTCHAR uni2B73 +ENCODING 11123 +BBX 5 14 5 -2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +70 +20 +00 +F8 +ENDCHAR +STARTCHAR uni2B76 +ENCODING 11126 +BBX 9 10 4 0 +BITMAP +FC00 +0000 +7800 +7000 +7000 +4800 +0400 +0200 +0100 +0080 +ENDCHAR +STARTCHAR uni2B77 +ENCODING 11127 +BBX 9 10 4 0 +BITMAP +1F80 +0000 +0F00 +0700 +0700 +0900 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni2B78 +ENCODING 11128 +BBX 9 10 4 0 +BITMAP +8000 +4000 +2000 +1000 +0900 +0700 +0700 +0F00 +0000 +1F80 +ENDCHAR +STARTCHAR uni2B79 +ENCODING 11129 +BBX 9 10 4 0 +BITMAP +0080 +0100 +0200 +0400 +4800 +7000 +7000 +7800 +0000 +FC00 +ENDCHAR +STARTCHAR uni2B7A +ENCODING 11130 +BBX 14 7 1 3 +BITMAP +0280 +2280 +6280 +FFFC +6280 +2280 +0280 +ENDCHAR +STARTCHAR uni2B7B +ENCODING 11131 +BBX 7 14 4 -2 +BITMAP +10 +38 +7C +10 +10 +10 +10 +FE +10 +FE +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2B7C +ENCODING 11132 +BBX 14 7 1 3 +BITMAP +0500 +0510 +0518 +FFFC +0518 +0510 +0500 +ENDCHAR +STARTCHAR uni2B7D +ENCODING 11133 +BBX 7 14 4 -2 +BITMAP +10 +10 +10 +10 +FE +10 +FE +10 +10 +10 +10 +7C +38 +10 +ENDCHAR +STARTCHAR uni2B7E +ENCODING 11134 +BBX 14 10 1 0 +BITMAP +8800 +9800 +BFFC +9800 +8800 +0044 +0064 +FFF4 +0064 +0044 +ENDCHAR +STARTCHAR uni2B7F +ENCODING 11135 +BBX 10 14 3 -2 +BITMAP +27C0 +2000 +2100 +2380 +27C0 +2100 +2100 +2100 +2100 +F900 +7100 +2100 +0100 +F900 +ENDCHAR +STARTCHAR uni2B80 +ENCODING 11136 +BBX 14 10 1 1 +BITMAP +2000 +6000 +FFFC +6000 +2000 +0010 +0018 +FFFC +0018 +0010 +ENDCHAR +STARTCHAR uni2B81 +ENCODING 11137 +BBX 10 14 3 -2 +BITMAP +2100 +7100 +F900 +2100 +2100 +2100 +2100 +2100 +2100 +2100 +2100 +27C0 +2380 +2100 +ENDCHAR +STARTCHAR uni2B82 +ENCODING 11138 +BBX 14 10 1 1 +BITMAP +0010 +0018 +FFFC +0018 +0010 +2000 +6000 +FFFC +6000 +2000 +ENDCHAR +STARTCHAR uni2B83 +ENCODING 11139 +BBX 10 14 3 -2 +BITMAP +2100 +2380 +27C0 +2100 +2100 +2100 +2100 +2100 +2100 +2100 +2100 +F900 +7100 +2100 +ENDCHAR +STARTCHAR uni2B84 +ENCODING 11140 +BBX 14 11 1 1 +BITMAP +2000 +6000 +FFFC +6000 +2000 +0000 +2000 +6000 +FFFC +6000 +2000 +ENDCHAR +STARTCHAR uni2B85 +ENCODING 11141 +BBX 11 14 2 -2 +BITMAP +2080 +71C0 +FBE0 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +ENDCHAR +STARTCHAR uni2B86 +ENCODING 11142 +BBX 14 11 1 1 +BITMAP +0010 +0018 +FFFC +0018 +0010 +0000 +0010 +0018 +FFFC +0018 +0010 +ENDCHAR +STARTCHAR uni2B87 +ENCODING 11143 +BBX 11 14 2 -2 +BITMAP +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +FBE0 +71C0 +2080 +ENDCHAR +STARTCHAR uni2B88 +ENCODING 11144 +BBX 12 13 2 0 +BITMAP +0F80 +1FC0 +3BE0 +73F0 +E3F0 +C000 +8000 +C000 +E3F0 +73F0 +3BE0 +1FC0 +0F80 +ENDCHAR +STARTCHAR uni2B89 +ENCODING 11145 +BBX 13 12 2 0 +BITMAP +0F80 +1DC0 +38E0 +7070 +E038 +C018 +F8F8 +F8F8 +F8F8 +78F0 +38E0 +18C0 +ENDCHAR +STARTCHAR uni2B8A +ENCODING 11146 +BBX 12 13 2 0 +BITMAP +1F00 +3F80 +7DC0 +FCE0 +FC70 +0030 +0010 +0030 +FC70 +FCE0 +7DC0 +3F80 +1F00 +ENDCHAR +STARTCHAR uni2B8B +ENCODING 11147 +BBX 13 12 2 0 +BITMAP +18C0 +38E0 +78F0 +F8F8 +F8F8 +F8F8 +C018 +E038 +7070 +38E0 +1DC0 +0F80 +ENDCHAR +STARTCHAR uni2B8C +ENCODING 11148 +BBX 13 12 2 0 +BITMAP +2000 +6000 +FFC0 +6020 +2010 +0008 +0008 +0008 +0008 +0010 +0020 +3FC0 +ENDCHAR +STARTCHAR uni2B8D +ENCODING 11149 +BBX 12 12 3 -1 +BITMAP +0040 +00E0 +81F0 +8040 +8040 +8040 +8040 +8040 +8040 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uni2B8E +ENCODING 11150 +BBX 13 12 2 0 +BITMAP +1FE0 +2000 +4000 +8000 +8000 +8000 +8000 +4020 +2030 +1FF8 +0030 +0020 +ENDCHAR +STARTCHAR uni2B8F +ENCODING 11151 +BBX 12 12 3 -1 +BITMAP +0780 +0840 +1020 +2010 +2010 +2010 +2010 +2010 +2010 +F810 +7000 +2000 +ENDCHAR +STARTCHAR uni2B90 +ENCODING 11152 +BBX 14 8 1 1 +BITMAP +003C +0004 +0008 +2008 +6010 +FFF0 +6000 +2000 +ENDCHAR +STARTCHAR uni2B91 +ENCODING 11153 +BBX 14 8 1 1 +BITMAP +F000 +8000 +4000 +4010 +2018 +3FFC +0018 +0010 +ENDCHAR +STARTCHAR uni2B92 +ENCODING 11154 +BBX 14 8 1 1 +BITMAP +FEFC +0004 +0004 +0404 +0C04 +DFFC +0C00 +0400 +ENDCHAR +STARTCHAR uni2B93 +ENCODING 11155 +BBX 14 8 1 1 +BITMAP +FDFC +8000 +8000 +8080 +80C0 +FFEC +00C0 +0080 +ENDCHAR +STARTCHAR uni2B94 +ENCODING 11156 +BBX 16 14 0 -2 +BITMAP +0020 +0040 +3EFC +2044 +2024 +A800 +7004 +200E +0015 +2404 +2204 +3F7C +0200 +0400 +ENDCHAR +STARTCHAR uni2B95 +ENCODING 11157 +BBX 13 7 1 3 +BITMAP +0040 +0060 +FFF0 +FFF8 +FFF0 +0060 +0040 +ENDCHAR +STARTCHAR uni2B97 +ENCODING 11159 +BBX 13 13 1 -1 +BITMAP +FFF8 +8008 +9FC8 +4010 +5FD0 +2220 +2220 +1240 +1240 +0A80 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni2B98 +ENCODING 11160 +BBX 13 13 1 0 +BITMAP +0008 +0070 +0190 +0620 +1820 +6040 +8080 +7FC0 +1FE0 +07E0 +01F0 +0070 +0008 +ENDCHAR +STARTCHAR uni2B99 +ENCODING 11161 +BBX 13 13 1 -1 +BITMAP +0200 +0500 +0500 +0C80 +0C80 +1C40 +1C40 +3C20 +3E20 +7D10 +78D0 +6030 +8008 +ENDCHAR +STARTCHAR uni2B9A +ENCODING 11162 +BBX 13 13 1 0 +BITMAP +8000 +7000 +4C00 +2300 +20C0 +1030 +0808 +1FF0 +3FC0 +3F00 +7C00 +7000 +8000 +ENDCHAR +STARTCHAR uni2B9B +ENCODING 11163 +BBX 13 13 1 -1 +BITMAP +8008 +6030 +58F0 +45F0 +23E0 +21E0 +11C0 +11C0 +0980 +0980 +0500 +0500 +0200 +ENDCHAR +STARTCHAR uni2B9C +ENCODING 11164 +BBX 13 13 1 0 +BITMAP +0008 +0070 +01F0 +07E0 +1FE0 +7FC0 +FF80 +7FC0 +1FE0 +07E0 +01F0 +0070 +0008 +ENDCHAR +STARTCHAR uni2B9D +ENCODING 11165 +BBX 13 13 1 -1 +BITMAP +0200 +0700 +0700 +0F80 +0F80 +1FC0 +1FC0 +3FE0 +3FE0 +7DF0 +78F0 +6030 +8008 +ENDCHAR +STARTCHAR uni2B9E +ENCODING 11166 +BBX 13 13 1 0 +BITMAP +8000 +7000 +7C00 +3F00 +3FC0 +1FF0 +0FF8 +1FF0 +3FC0 +3F00 +7C00 +7000 +8000 +ENDCHAR +STARTCHAR uni2B9F +ENCODING 11167 +BBX 13 13 1 -1 +BITMAP +8008 +6030 +78F0 +7DF0 +3FE0 +3FE0 +1FC0 +1FC0 +0F80 +0F80 +0700 +0700 +0200 +ENDCHAR +STARTCHAR uni2BA0 +ENCODING 11168 +BBX 14 9 1 4 +BITMAP +0004 +0004 +0004 +0004 +2004 +6004 +FFFC +6000 +2000 +ENDCHAR +STARTCHAR uni2BA1 +ENCODING 11169 +BBX 14 9 1 4 +BITMAP +8000 +8000 +8000 +8000 +8010 +8018 +FFFC +0018 +0010 +ENDCHAR +STARTCHAR uni2BA2 +ENCODING 11170 +BBX 14 9 1 0 +BITMAP +2000 +6000 +FFFC +6004 +2004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uni2BA3 +ENCODING 11171 +BBX 14 9 1 0 +BITMAP +0010 +0018 +FFFC +8018 +8010 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni2BA4 +ENCODING 11172 +BBX 9 13 3 -1 +BITMAP +2000 +7000 +F800 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +3F80 +ENDCHAR +STARTCHAR uni2BA5 +ENCODING 11173 +BBX 9 13 3 -1 +BITMAP +0200 +0700 +0F80 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +FE00 +ENDCHAR +STARTCHAR uni2BA6 +ENCODING 11174 +BBX 9 13 3 -1 +BITMAP +3F80 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +F800 +7000 +2000 +ENDCHAR +STARTCHAR uni2BA7 +ENCODING 11175 +BBX 9 13 3 -1 +BITMAP +FE00 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0F80 +0700 +0200 +ENDCHAR +STARTCHAR uni2BA8 +ENCODING 11176 +BBX 15 8 0 3 +BITMAP +0002 +1002 +3006 +7FFC +FFFC +7FF8 +3000 +1000 +ENDCHAR +STARTCHAR uni2BA9 +ENCODING 11177 +BBX 15 8 0 3 +BITMAP +8000 +8010 +C018 +7FFC +7FFE +3FFC +0018 +0010 +ENDCHAR +STARTCHAR uni2BAA +ENCODING 11178 +BBX 15 8 0 2 +BITMAP +1000 +3000 +7FF8 +FFFC +7FFC +3006 +1002 +0002 +ENDCHAR +STARTCHAR uni2BAB +ENCODING 11179 +BBX 15 8 0 2 +BITMAP +0010 +0018 +3FFC +7FFE +7FFC +C018 +8010 +8000 +ENDCHAR +STARTCHAR uni2BAC +ENCODING 11180 +BBX 8 12 3 -1 +BITMAP +10 +38 +7C +FE +38 +38 +38 +38 +38 +38 +1C +07 +ENDCHAR +STARTCHAR uni2BAD +ENCODING 11181 +BBX 8 12 3 -1 +BITMAP +08 +1C +3E +7F +1C +1C +1C +1C +1C +1C +38 +E0 +ENDCHAR +STARTCHAR uni2BAE +ENCODING 11182 +BBX 8 12 3 -1 +BITMAP +07 +1C +38 +38 +38 +38 +38 +38 +FE +7C +38 +10 +ENDCHAR +STARTCHAR uni2BAF +ENCODING 11183 +BBX 8 12 3 -1 +BITMAP +E0 +38 +1C +1C +1C +1C +1C +1C +7F +3E +1C +08 +ENDCHAR +STARTCHAR uni2BB0 +ENCODING 11184 +BBX 14 14 1 -1 +BITMAP +0044 +006C +0054 +0044 +0044 +0844 +1444 +27F8 +4008 +8010 +4020 +27C0 +1400 +0800 +ENDCHAR +STARTCHAR uni2BB1 +ENCODING 11185 +BBX 14 14 1 -1 +BITMAP +8800 +D800 +A800 +8800 +8800 +8840 +88A0 +7F90 +4008 +2004 +1008 +0F90 +00A0 +0040 +ENDCHAR +STARTCHAR uni2BB2 +ENCODING 11186 +BBX 14 14 1 -1 +BITMAP +0800 +1400 +27C0 +4020 +8010 +4008 +27F8 +1444 +0844 +0044 +0044 +0054 +006C +0044 +ENDCHAR +STARTCHAR uni2BB3 +ENCODING 11187 +BBX 14 14 1 -1 +BITMAP +0040 +00A0 +0F90 +1008 +2004 +4008 +7F90 +88A0 +8840 +8800 +8800 +A800 +D800 +8800 +ENDCHAR +STARTCHAR uni2BB4 +ENCODING 11188 +BBX 14 14 1 -1 +BITMAP +0800 +1400 +2200 +4100 +8080 +6300 +2200 +2200 +2200 +23FC +1208 +0A10 +0608 +01FC +ENDCHAR +STARTCHAR uni2BB5 +ENCODING 11189 +BBX 14 14 1 -1 +BITMAP +0040 +00A0 +0110 +0208 +0404 +0318 +0110 +0110 +0110 +FF10 +4120 +2140 +4180 +FE00 +ENDCHAR +STARTCHAR uni2BB6 +ENCODING 11190 +BBX 14 14 1 -1 +BITMAP +01FC +0608 +0A10 +1208 +23FC +2200 +2200 +2200 +6300 +8080 +4100 +2200 +1400 +0800 +ENDCHAR +STARTCHAR uni2BB7 +ENCODING 11191 +BBX 14 14 1 -1 +BITMAP +FE00 +4180 +2140 +4120 +FF10 +0110 +0110 +0110 +0318 +0404 +0208 +0110 +00A0 +0040 +ENDCHAR +STARTCHAR uni2BB8 +ENCODING 11192 +BBX 9 13 3 0 +BITMAP +0800 +1400 +2200 +7F00 +8080 +6300 +2200 +2200 +3E00 +0000 +3E00 +2200 +3E00 +ENDCHAR +STARTCHAR uni2BB9 +ENCODING 11193 +BBX 13 11 1 0 +BITMAP +FFF8 +8008 +8208 +8508 +8888 +9048 +A028 +8008 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni2BBA +ENCODING 11194 +BBX 12 12 2 0 +BITMAP +0FF0 +0810 +0810 +0810 +FF10 +8910 +8910 +8FF0 +8100 +8100 +8100 +FF00 +ENDCHAR +STARTCHAR uni2BBB +ENCODING 11195 +BBX 12 12 2 0 +BITMAP +0FF0 +0FF0 +0FF0 +0FF0 +FFF0 +8FF0 +8FF0 +8FF0 +8100 +8100 +8100 +FF00 +ENDCHAR +STARTCHAR uni2BBC +ENCODING 11196 +BBX 12 12 2 0 +BITMAP +0FF0 +0FF0 +0FF0 +0FF0 +FFF0 +FFF0 +FFF0 +FFF0 +FF00 +FF00 +FF00 +FF00 +ENDCHAR +STARTCHAR uni2BBD +ENCODING 11197 +BBX 12 12 2 0 +BITMAP +FFF0 +8010 +8010 +9050 +8890 +8510 +8210 +8510 +8890 +9050 +8010 +FFF0 +ENDCHAR +STARTCHAR uni2BBE +ENCODING 11198 +BBX 13 13 1 -1 +BITMAP +0F80 +1040 +2020 +4010 +4890 +8508 +8208 +8508 +4890 +4010 +2020 +1040 +0F80 +ENDCHAR +STARTCHAR uni2BBF +ENCODING 11199 +BBX 13 13 1 -1 +BITMAP +0F80 +3FE0 +7070 +6030 +C898 +C518 +C218 +C518 +C898 +6030 +7070 +3FE0 +0F80 +ENDCHAR +STARTCHAR uni2BC0 +ENCODING 11200 +BBX 13 11 1 0 +BITMAP +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni2BC1 +ENCODING 11201 +BBX 11 11 2 0 +BITMAP +0400 +0E00 +1F00 +3F80 +7FC0 +FFE0 +7FC0 +3F80 +1F00 +0E00 +0400 +ENDCHAR +STARTCHAR uni2BC2 +ENCODING 11202 +BBX 12 12 2 -1 +BITMAP +1F80 +3FC0 +3FC0 +7FE0 +7FE0 +FFF0 +FFF0 +7FE0 +3FC0 +1F80 +0F00 +0600 +ENDCHAR +STARTCHAR uni2BC3 +ENCODING 11203 +BBX 13 13 1 -1 +BITMAP +0F80 +1FC0 +3FE0 +7FF0 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +7FF0 +3FE0 +1FC0 +0F80 +ENDCHAR +STARTCHAR uni2BC4 +ENCODING 11204 +BBX 15 15 0 -2 +BITMAP +0380 +07C0 +3FF8 +3FF8 +3FF8 +7FFC +FFFE +FFFE +FFFE +7FFC +3FF8 +3FF8 +3FF8 +07C0 +0380 +ENDCHAR +STARTCHAR uni2BC5 +ENCODING 11205 +BBX 13 12 1 0 +BITMAP +0200 +0700 +0700 +0F80 +0F80 +1FC0 +1FC0 +3FE0 +3FE0 +7FF0 +7FF0 +FFF8 +ENDCHAR +STARTCHAR uni2BC6 +ENCODING 11206 +BBX 13 12 1 -1 +BITMAP +FFF8 +7FF0 +7FF0 +3FE0 +3FE0 +1FC0 +1FC0 +0F80 +0F80 +0700 +0700 +0200 +ENDCHAR +STARTCHAR uni2BC7 +ENCODING 11207 +BBX 12 13 1 0 +BITMAP +0010 +0070 +01F0 +07F0 +1FF0 +7FF0 +FFF0 +7FF0 +1FF0 +07F0 +01F0 +0070 +0010 +ENDCHAR +STARTCHAR uni2BC8 +ENCODING 11208 +BBX 12 13 1 0 +BITMAP +8000 +E000 +F800 +FE00 +FF80 +FFE0 +FFF0 +FFE0 +FF80 +FE00 +F800 +E000 +8000 +ENDCHAR +STARTCHAR uni2BC9 +ENCODING 11209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +80 +94 +98 +B0 +F0 +FC +10 +38 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni2BCA +ENCODING 11210 +BBX 13 7 1 5 +BITMAP +0F80 +1FC0 +3FE0 +7FF0 +7FF0 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni2BCB +ENCODING 11211 +BBX 13 7 1 -1 +BITMAP +FFF8 +FFF8 +7FF0 +7FF0 +3FE0 +1FC0 +0F80 +ENDCHAR +STARTCHAR uni2BCC +ENCODING 11212 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0380 +0380 +07C0 +0FE0 +3FF8 +FFFE +3FF8 +0FE0 +07C0 +0380 +0380 +0100 +0100 +ENDCHAR +STARTCHAR uni2BCD +ENCODING 11213 +BBX 11 11 2 0 +BITMAP +8020 +4040 +3180 +3F80 +1F00 +1F00 +1F00 +3F80 +3180 +4040 +8020 +ENDCHAR +STARTCHAR uni2BCE +ENCODING 11214 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0380 +0280 +0440 +0820 +3018 +E00E +3018 +0820 +0440 +0280 +0380 +0100 +0100 +ENDCHAR +STARTCHAR uni2BCF +ENCODING 11215 +BBX 11 11 2 0 +BITMAP +8020 +4040 +3180 +2E80 +1100 +1100 +1100 +2E80 +3180 +4040 +8020 +ENDCHAR +STARTCHAR uni2BD0 +ENCODING 11216 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +3FE0 +2220 +2220 +2020 +F8F8 +2020 +2220 +2220 +3FE0 +0200 +0200 +ENDCHAR +STARTCHAR uni2BD1 +ENCODING 11217 +BBX 13 13 1 -1 +BITMAP +0200 +0500 +0880 +1740 +28A0 +4090 +8308 +4210 +2020 +1240 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni2BD2 +ENCODING 11218 +BBX 7 12 4 -1 +BITMAP +10 +10 +FE +10 +10 +FE +10 +10 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni2BD3 +ENCODING 11219 +BBX 11 12 2 -2 +BITMAP +0E00 +1100 +2080 +A0A0 +A0A0 +9120 +4E40 +2080 +1F00 +0400 +1F00 +0400 +ENDCHAR +STARTCHAR uni2BD4 +ENCODING 11220 +BBX 11 12 2 0 +BITMAP +71C0 +8A20 +8420 +1F00 +0400 +0E00 +1100 +2080 +2080 +2080 +1100 +0E00 +ENDCHAR +STARTCHAR uni2BD5 +ENCODING 11221 +BBX 13 13 1 -1 +BITMAP +0700 +0880 +1040 +1040 +1040 +8888 +C718 +A028 +98C8 +4710 +2020 +1040 +0F80 +ENDCHAR +STARTCHAR uni2BD6 +ENCODING 11222 +BBX 11 11 2 0 +BITMAP +1F00 +2280 +4140 +8120 +80A0 +80A0 +80A0 +8120 +4140 +2280 +1F00 +ENDCHAR +STARTCHAR uni2BD7 +ENCODING 11223 +BBX 7 11 4 0 +BITMAP +10 +38 +7C +10 +38 +44 +BA +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni2BD8 +ENCODING 11224 +BBX 12 10 2 0 +BITMAP +F0F0 +1080 +1080 +1080 +1680 +1680 +1080 +1080 +1080 +F0F0 +ENDCHAR +STARTCHAR uni2BD9 +ENCODING 11225 +BBX 10 12 3 -1 +BITMAP +0C00 +1200 +13C0 +0E00 +0200 +0400 +0400 +0800 +0C00 +1200 +F200 +0C00 +ENDCHAR +STARTCHAR uni2BDA +ENCODING 11226 +BBX 11 12 2 0 +BITMAP +4440 +8420 +8420 +8420 +64C0 +1F00 +2480 +4440 +2480 +1F00 +2480 +1F00 +ENDCHAR +STARTCHAR uni2BDB +ENCODING 11227 +BBX 7 10 4 0 +BITMAP +1C +12 +12 +1C +10 +10 +7C +82 +82 +7C +ENDCHAR +STARTCHAR uni2BDC +ENCODING 11228 +BBX 7 10 4 0 +BITMAP +12 +1A +16 +12 +10 +10 +7C +82 +82 +7C +ENDCHAR +STARTCHAR uni2BDD +ENCODING 11229 +BBX 6 13 5 -2 +BITMAP +E0 +50 +28 +24 +14 +14 +24 +28 +50 +E0 +20 +F8 +20 +ENDCHAR +STARTCHAR uni2BDE +ENCODING 11230 +BBX 9 13 3 -2 +BITMAP +0800 +1C00 +3E00 +7F00 +FF80 +7F00 +3E00 +1C00 +0800 +0800 +3E00 +0800 +0800 +ENDCHAR +STARTCHAR uni2BDF +ENCODING 11231 +BBX 11 9 2 -2 +BITMAP +8020 +C060 +B1A0 +4E40 +2080 +1F00 +0400 +1F00 +0400 +ENDCHAR +STARTCHAR uni2BE0 +ENCODING 11232 +BBX 11 13 2 -2 +BITMAP +E000 +1000 +09C0 +0A20 +0A20 +0A20 +11C0 +2080 +FFE0 +0080 +03E0 +0080 +0080 +ENDCHAR +STARTCHAR uni2BE1 +ENCODING 11233 +BBX 10 13 2 -2 +BITMAP +1F00 +2080 +4040 +8400 +8400 +9F00 +8400 +8400 +4440 +2480 +1F00 +0400 +0400 +ENDCHAR +STARTCHAR uni2BE2 +ENCODING 11234 +BBX 9 11 3 0 +BITMAP +0800 +1C00 +3E00 +0800 +0800 +0800 +C980 +3E00 +0800 +3600 +C180 +ENDCHAR +STARTCHAR uni2BE3 +ENCODING 11235 +BBX 11 13 2 -2 +BITMAP +1F00 +2080 +4040 +8420 +8420 +9F20 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni2BE4 +ENCODING 11236 +BBX 11 13 2 -2 +BITMAP +E000 +1000 +0800 +0800 +0940 +0940 +1140 +2140 +FFE0 +0140 +0140 +0140 +0140 +ENDCHAR +STARTCHAR uni2BE5 +ENCODING 11237 +BBX 5 12 5 -2 +BITMAP +88 +88 +70 +A8 +F8 +A8 +70 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2BE6 +ENCODING 11238 +BBX 11 13 2 -2 +BITMAP +0400 +0E00 +1F00 +0400 +0400 +0400 +0400 +0400 +0A00 +1100 +2080 +4040 +FFE0 +ENDCHAR +STARTCHAR uni2BE7 +ENCODING 11239 +BBX 11 12 2 -2 +BITMAP +8020 +8020 +4440 +2480 +1F00 +0400 +0400 +1F00 +2480 +4440 +8020 +8020 +ENDCHAR +STARTCHAR uni2BE8 +ENCODING 11240 +BBX 7 14 3 -1 +BITMAP +02 +02 +06 +06 +0E +FE +7E +3E +1E +0E +1E +3C +30 +40 +ENDCHAR +STARTCHAR uni2BE9 +ENCODING 11241 +BBX 7 14 5 -1 +BITMAP +80 +80 +C0 +C0 +E0 +FE +FC +F8 +F0 +E0 +F0 +78 +18 +04 +ENDCHAR +STARTCHAR uni2BEA +ENCODING 11242 +BBX 13 14 1 -1 +BITMAP +0200 +0200 +0700 +0700 +0E80 +FE78 +7E10 +3E20 +1EC0 +0E80 +1E40 +3DA0 +3060 +4010 +ENDCHAR +STARTCHAR uni2BEB +ENCODING 11243 +BBX 13 14 1 -1 +BITMAP +0200 +0200 +0700 +0700 +0B80 +F3F8 +43F0 +23E0 +1BC0 +0B80 +13C0 +2DE0 +3060 +4010 +ENDCHAR +STARTCHAR uni2BEC +ENCODING 11244 +BBX 14 11 1 1 +BITMAP +0410 +0C30 +1C70 +3CF0 +7DF0 +FFFC +7DF0 +3CF0 +1C70 +0C30 +0410 +ENDCHAR +STARTCHAR uni2BED +ENCODING 11245 +BBX 11 14 2 -1 +BITMAP +0400 +0E00 +1F00 +3F80 +7FC0 +FFE0 +0400 +0E00 +1F00 +3F80 +7FC0 +FFE0 +0400 +0400 +ENDCHAR +STARTCHAR uni2BEE +ENCODING 11246 +BBX 14 11 1 1 +BITMAP +2080 +30C0 +38E0 +3CF0 +3EF8 +FFFC +3EF8 +3CF0 +38E0 +30C0 +2080 +ENDCHAR +STARTCHAR uni2BEF +ENCODING 11247 +BBX 11 14 3 -1 +BITMAP +0400 +0400 +FFE0 +7FC0 +3F80 +1F00 +0E00 +0400 +FFE0 +7FC0 +3F80 +1F00 +0E00 +0400 +ENDCHAR +STARTCHAR uni2BF0 +ENCODING 11248 +BBX 11 11 2 0 +BITMAP +E4E0 +1500 +0E00 +0E00 +0400 +0400 +0400 +0E00 +0E00 +1500 +E4E0 +ENDCHAR +STARTCHAR uni2BF1 +ENCODING 11249 +BBX 7 11 4 0 +BITMAP +38 +44 +82 +82 +82 +44 +38 +10 +7C +38 +10 +ENDCHAR +STARTCHAR uni2BF2 +ENCODING 11250 +BBX 9 10 2 0 +BITMAP +6400 +9400 +9400 +7F00 +0400 +0600 +0100 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni2BF3 +ENCODING 11251 +BBX 11 10 2 0 +BITMAP +FFE0 +8020 +8020 +8020 +8020 +8020 +FFE0 +0400 +1B00 +60C0 +ENDCHAR +STARTCHAR uni2BF4 +ENCODING 11252 +BBX 13 10 1 0 +BITMAP +FFF8 +8208 +4510 +28A0 +1040 +1040 +28A0 +4510 +8208 +FFF8 +ENDCHAR +STARTCHAR uni2BF5 +ENCODING 11253 +BBX 13 10 1 0 +BITMAP +8208 +8208 +4510 +28A0 +1040 +1040 +28A0 +4510 +8208 +8208 +ENDCHAR +STARTCHAR uni2BF6 +ENCODING 11254 +BBX 11 10 2 0 +BITMAP +FFE0 +8020 +8020 +8020 +8020 +8020 +FFE0 +0400 +0400 +7FC0 +ENDCHAR +STARTCHAR uni2BF7 +ENCODING 11255 +BBX 11 10 2 0 +BITMAP +4040 +2080 +1100 +0A00 +0400 +0A00 +1100 +2080 +4040 +FFE0 +ENDCHAR +STARTCHAR uni2BF8 +ENCODING 11256 +BBX 11 10 2 0 +BITMAP +0400 +0400 +0400 +0400 +FFE0 +0E00 +1500 +2480 +4440 +8420 +ENDCHAR +STARTCHAR uni2BF9 +ENCODING 11257 +BBX 11 9 2 0 +BITMAP +FFE0 +0000 +FFE0 +0000 +71C0 +8A20 +8420 +8A20 +71C0 +ENDCHAR +STARTCHAR uni2BFA +ENCODING 11258 +BBX 11 5 2 2 +BITMAP +71C0 +8A20 +8A20 +8A20 +71C0 +ENDCHAR +STARTCHAR uni2BFB +ENCODING 11259 +BBX 15 5 0 2 +BITMAP +701C +8822 +8AA2 +8822 +701C +ENDCHAR +STARTCHAR uni2BFC +ENCODING 11260 +BBX 5 11 5 0 +BITMAP +70 +88 +88 +88 +70 +00 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni2BFD +ENCODING 11261 +BBX 5 11 5 0 +BITMAP +20 +70 +F8 +20 +20 +20 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni2BFE +ENCODING 11262 +BBX 7 7 4 0 +BITMAP +02 +02 +02 +02 +02 +02 +FE +ENDCHAR +STARTCHAR uni2BFF +ENCODING 11263 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +F8 +20 +20 +38 +38 +20 +20 +F8 +F8 +ENDCHAR +STARTCHAR uni2C00 +ENCODING 11264 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +20 +F8 +A8 +A8 +20 +20 +20 +ENDCHAR +STARTCHAR uni2C01 +ENCODING 11265 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +92 +92 +92 +FE +80 +80 +80 +80 +FE +ENDCHAR +STARTCHAR uni2C02 +ENCODING 11266 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +44 +AA +6C +28 +44 +44 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni2C03 +ENCODING 11267 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +60 +90 +90 +70 +20 +20 +4C +52 +92 +8C +ENDCHAR +STARTCHAR uni2C04 +ENCODING 11268 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +44 +44 +44 +44 +44 +28 +6C +AA +44 +ENDCHAR +STARTCHAR uni2C05 +ENCODING 11269 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +08 +38 +08 +38 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni2C06 +ENCODING 11270 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +82 +44 +28 +28 +6C +92 +92 +6C +ENDCHAR +STARTCHAR uni2C07 +ENCODING 11271 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +44 +82 +44 +38 +FE +92 +64 +28 +10 +ENDCHAR +STARTCHAR uni2C08 +ENCODING 11272 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +20 +50 +88 +88 +FF +8D +8D +55 +22 +ENDCHAR +STARTCHAR uni2C09 +ENCODING 11273 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7C +6C +92 +92 +7C +10 +10 +10 +10 +38 +ENDCHAR +STARTCHAR uni2C0A +ENCODING 11274 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7C +6C +92 +92 +6C +28 +44 +44 +82 +FE +ENDCHAR +STARTCHAR uni2C0B +ENCODING 11275 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FE +82 +44 +28 +54 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni2C0C +ENCODING 11276 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +62 +65 +65 +66 +96 +96 +96 +99 +91 +ENDCHAR +STARTCHAR uni2C0D +ENCODING 11277 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +80 +80 +80 +F0 +10 +10 +F0 +80 +80 +80 +ENDCHAR +STARTCHAR uni2C0E +ENCODING 11278 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +44 +44 +44 +44 +7C +AA +AA +AA +44 +ENDCHAR +STARTCHAR uni2C0F +ENCODING 11279 +BBX 11 10 3 0 +BITMAP +7FC0 +9520 +9520 +64C0 +0400 +1F00 +3B80 +4A40 +4A40 +3180 +ENDCHAR +STARTCHAR uni2C10 +ENCODING 11280 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +3C +22 +22 +22 +FC +A0 +A0 +20 +20 +20 +ENDCHAR +STARTCHAR uni2C11 +ENCODING 11281 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +70 +88 +78 +08 +08 +08 +08 +78 +88 +70 +ENDCHAR +STARTCHAR uni2C12 +ENCODING 11282 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +3E +2A +2A +2A +E4 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2C13 +ENCODING 11283 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +F8 +84 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni2C14 +ENCODING 11284 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +44 +82 +82 +82 +54 +28 +44 +82 +FE +ENDCHAR +STARTCHAR uni2C15 +ENCODING 11285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FE +AA +AA +AA +AA +AA +AA +AA +AA +44 +ENDCHAR +STARTCHAR uni2C16 +ENCODING 11286 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +48 +B4 +6C +24 +27 +24 +24 +6C +B4 +48 +ENDCHAR +STARTCHAR uni2C17 +ENCODING 11287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +10 +10 +38 +54 +92 +92 +92 +92 +54 +38 +10 +10 +ENDCHAR +STARTCHAR uni2C18 +ENCODING 11288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +20 +20 +20 +20 +20 +20 +2C +32 +52 +8C +ENDCHAR +STARTCHAR uni2C19 +ENCODING 11289 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7C +AA +AA +92 +82 +82 +92 +AA +AA +7C +ENDCHAR +STARTCHAR uni2C1A +ENCODING 11290 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +1E +12 +12 +12 +72 +92 +92 +92 +92 +72 +ENDCHAR +STARTCHAR uni2C1B +ENCODING 11291 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +92 +92 +92 +FE +44 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni2C1C +ENCODING 11292 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +71 +91 +91 +6A +0A +0A +0A +04 +04 +04 +ENDCHAR +STARTCHAR uni2C1D +ENCODING 11293 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +44 +44 +7C +92 +FE +44 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni2C1E +ENCODING 11294 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni2C1F +ENCODING 11295 +BBX 10 10 3 0 +BITMAP +1FC0 +0880 +0500 +0700 +F880 +A880 +4700 +0500 +0880 +1FC0 +ENDCHAR +STARTCHAR uni2C20 +ENCODING 11296 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7E +42 +24 +18 +F8 +98 +A4 +24 +42 +7E +ENDCHAR +STARTCHAR uni2C21 +ENCODING 11297 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +28 +28 +44 +44 +7C +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni2C22 +ENCODING 11298 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -2 +BITMAP +20 +90 +78 +6C +44 +82 +82 +82 +82 +44 +6C +3C +12 +08 +ENDCHAR +STARTCHAR uni2C23 +ENCODING 11299 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +94 +94 +94 +98 +A0 +A0 +C0 +C0 +80 +ENDCHAR +STARTCHAR uni2C24 +ENCODING 11300 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +1C +22 +20 +60 +B8 +60 +20 +20 +22 +1C +ENDCHAR +STARTCHAR uni2C25 +ENCODING 11301 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +0C +12 +10 +30 +DC +B0 +10 +10 +12 +0C +ENDCHAR +STARTCHAR uni2C26 +ENCODING 11302 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +28 +4C +92 +FE +44 +44 +44 +44 +7C +ENDCHAR +STARTCHAR uni2C27 +ENCODING 11303 +BBX 12 10 2 0 +BITMAP +70E0 +8910 +0900 +3B00 +0DC0 +3B00 +0900 +0900 +8910 +70E0 +ENDCHAR +STARTCHAR uni2C28 +ENCODING 11304 +BBX 12 10 1 0 +BITMAP +70E0 +8910 +7900 +0B00 +0DC0 +0B00 +0900 +7900 +8910 +70E0 +ENDCHAR +STARTCHAR uni2C29 +ENCODING 11305 +BBX 14 10 0 0 +BITMAP +1038 +2844 +4C40 +92C0 +FF70 +38C0 +4440 +8240 +4444 +3838 +ENDCHAR +STARTCHAR uni2C2A +ENCODING 11306 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +18 +24 +24 +24 +FF +A5 +24 +24 +24 +18 +ENDCHAR +STARTCHAR uni2C2B +ENCODING 11307 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +F8 +88 +50 +70 +8E +8A +70 +50 +88 +F8 +ENDCHAR +STARTCHAR uni2C2C +ENCODING 11308 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 0 +BITMAP +E0 +20 +20 +20 +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni2C2D +ENCODING 11309 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +82 +C2 +B2 +8A +FE +8A +B2 +C2 +82 +02 +ENDCHAR +STARTCHAR uni2C2E +ENCODING 11310 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +48 +A8 +AC +A4 +A4 +A4 +AC +B4 +A4 +A4 +ENDCHAR +STARTCHAR uni2C2F +ENCODING 11311 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +88 +88 +88 +88 +88 +88 +88 +88 +88 +F8 +3C +30 +ENDCHAR +STARTCHAR uni2C30 +ENCODING 11312 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +20 +20 +20 +F8 +A8 +A8 +20 +20 +ENDCHAR +STARTCHAR uni2C31 +ENCODING 11313 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +A8 +A8 +A8 +F8 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni2C32 +ENCODING 11314 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +44 +AA +6C +28 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni2C33 +ENCODING 11315 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +60 +90 +90 +70 +2C +52 +92 +8C +ENDCHAR +STARTCHAR uni2C34 +ENCODING 11316 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +38 +44 +44 +44 +28 +6C +AA +44 +ENDCHAR +STARTCHAR uni2C35 +ENCODING 11317 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +70 +88 +38 +08 +38 +08 +88 +70 +ENDCHAR +STARTCHAR uni2C36 +ENCODING 11318 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 0 +BITMAP +C6 +28 +6C +92 +92 +6C +ENDCHAR +STARTCHAR uni2C37 +ENCODING 11319 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +38 +44 +38 +FE +92 +64 +28 +10 +ENDCHAR +STARTCHAR uni2C38 +ENCODING 11320 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 0 +BITMAP +20 +50 +88 +FF +8D +55 +22 +ENDCHAR +STARTCHAR uni2C39 +ENCODING 11321 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +7C +6C +92 +92 +7C +10 +10 +38 +ENDCHAR +STARTCHAR uni2C3A +ENCODING 11322 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +7C +6C +92 +92 +6C +44 +82 +FE +ENDCHAR +STARTCHAR uni2C3B +ENCODING 11323 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +82 +44 +28 +54 +44 +44 +38 +ENDCHAR +STARTCHAR uni2C3C +ENCODING 11324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +44 +4A +4A +AC +AC +B2 +A2 +ENDCHAR +STARTCHAR uni2C3D +ENCODING 11325 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +80 +80 +F0 +10 +10 +F0 +80 +80 +ENDCHAR +STARTCHAR uni2C3E +ENCODING 11326 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +30 +48 +48 +48 +78 +B4 +B4 +48 +ENDCHAR +STARTCHAR uni2C3F +ENCODING 11327 +BBX 11 8 2 0 +BITMAP +7FC0 +9520 +64C0 +0400 +1F00 +3B80 +4A40 +3180 +ENDCHAR +STARTCHAR uni2C40 +ENCODING 11328 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +38 +24 +24 +F8 +A0 +A0 +20 +20 +ENDCHAR +STARTCHAR uni2C41 +ENCODING 11329 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +70 +88 +78 +08 +08 +78 +88 +70 +ENDCHAR +STARTCHAR uni2C42 +ENCODING 11330 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +7C +54 +54 +54 +C8 +40 +40 +40 +ENDCHAR +STARTCHAR uni2C43 +ENCODING 11331 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +80 +80 +80 +F0 +88 +88 +88 +F0 +ENDCHAR +STARTCHAR uni2C44 +ENCODING 11332 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +38 +44 +44 +54 +28 +44 +82 +FE +ENDCHAR +STARTCHAR uni2C45 +ENCODING 11333 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +AA +AA +AA +AA +AA +AA +44 +ENDCHAR +STARTCHAR uni2C46 +ENCODING 11334 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +48 +B4 +6C +26 +24 +6C +B4 +48 +ENDCHAR +STARTCHAR uni2C47 +ENCODING 11335 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +10 +10 +38 +54 +92 +92 +54 +38 +10 +10 +ENDCHAR +STARTCHAR uni2C48 +ENCODING 11336 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +20 +20 +20 +20 +2C +32 +52 +8C +ENDCHAR +STARTCHAR uni2C49 +ENCODING 11337 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +7C +AA +92 +82 +82 +92 +AA +7C +ENDCHAR +STARTCHAR uni2C4A +ENCODING 11338 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +1C +14 +14 +74 +94 +94 +94 +74 +ENDCHAR +STARTCHAR uni2C4B +ENCODING 11339 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +A8 +A8 +A8 +F8 +50 +88 +88 +70 +ENDCHAR +STARTCHAR uni2C4C +ENCODING 11340 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +62 +A2 +A2 +74 +14 +14 +08 +08 +ENDCHAR +STARTCHAR uni2C4D +ENCODING 11341 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +44 +7C +92 +FE +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni2C4E +ENCODING 11342 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +A8 +A8 +A8 +A8 +A8 +A8 +A8 +F8 +ENDCHAR +STARTCHAR uni2C4F +ENCODING 11343 +BBX 10 8 3 0 +BITMAP +1FC0 +0880 +0700 +F880 +A880 +4700 +0880 +1FC0 +ENDCHAR +STARTCHAR uni2C50 +ENCODING 11344 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +7C +44 +28 +F0 +90 +A8 +44 +7C +ENDCHAR +STARTCHAR uni2C51 +ENCODING 11345 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +10 +28 +44 +7C +92 +92 +FE +ENDCHAR +STARTCHAR uni2C52 +ENCODING 11346 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +20 +90 +78 +6C +44 +82 +82 +44 +6C +3C +12 +08 +ENDCHAR +STARTCHAR uni2C53 +ENCODING 11347 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +F0 +A8 +A8 +B0 +A0 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni2C54 +ENCODING 11348 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +18 +24 +60 +B8 +60 +20 +24 +18 +ENDCHAR +STARTCHAR uni2C55 +ENCODING 11349 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +08 +14 +30 +DC +B0 +10 +14 +08 +ENDCHAR +STARTCHAR uni2C56 +ENCODING 11350 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +10 +28 +4C +92 +FE +44 +44 +7C +ENDCHAR +STARTCHAR uni2C57 +ENCODING 11351 +BBX 12 8 2 0 +BITMAP +70E0 +8910 +3B00 +0DC0 +3B00 +0900 +8910 +70E0 +ENDCHAR +STARTCHAR uni2C58 +ENCODING 11352 +BBX 12 8 2 0 +BITMAP +70E0 +8910 +7B00 +0DC0 +0B00 +7900 +8910 +70E0 +ENDCHAR +STARTCHAR uni2C59 +ENCODING 11353 +BBX 14 8 1 0 +BITMAP +1038 +2844 +4CC0 +9370 +FEC0 +3840 +4444 +3838 +ENDCHAR +STARTCHAR uni2C5A +ENCODING 11354 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +10 +28 +28 +FE +AA +28 +28 +10 +ENDCHAR +STARTCHAR uni2C5B +ENCODING 11355 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F0 +90 +60 +9C +94 +60 +90 +F0 +ENDCHAR +STARTCHAR uni2C5C +ENCODING 11356 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 3 0 +BITMAP +E0 +20 +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni2C5D +ENCODING 11357 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +04 +C4 +A4 +94 +FC +94 +A4 +C4 +ENDCHAR +STARTCHAR uni2C5E +ENCODING 11358 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +48 +A8 +AC +A4 +AC +B4 +A4 +A4 +ENDCHAR +STARTCHAR uni2C5F +ENCODING 11359 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +88 +88 +88 +88 +88 +88 +88 +F8 +3C +30 +ENDCHAR +STARTCHAR uni2C60 +ENCODING 11360 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +40 +40 +E0 +40 +E0 +40 +40 +40 +7C +ENDCHAR +STARTCHAR uni2C61 +ENCODING 11361 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +60 +20 +20 +20 +70 +20 +70 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni2C62 +ENCODING 11362 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +20 +20 +20 +20 +68 +B0 +20 +20 +20 +3E +ENDCHAR +STARTCHAR uni2C63 +ENCODING 11363 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +44 +E4 +44 +78 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni2C64 +ENCODING 11364 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F8 +84 +84 +84 +F8 +90 +88 +88 +84 +84 +A0 +40 +ENDCHAR +STARTCHAR uni2C65 +ENCODING 11365 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +39 +46 +04 +3C +54 +64 +4C +B4 +ENDCHAR +STARTCHAR uni2C66 +ENCODING 11366 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +10 +10 +11 +7E +14 +18 +10 +30 +50 +8C +ENDCHAR +STARTCHAR uni2C67 +ENCODING 11367 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +88 +88 +88 +88 +F8 +88 +88 +88 +88 +8C +04 +04 +ENDCHAR +STARTCHAR uni2C68 +ENCODING 11368 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +B0 +C8 +88 +88 +88 +88 +88 +8C +04 +04 +ENDCHAR +STARTCHAR uni2C69 +ENCODING 11369 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +84 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +86 +02 +02 +ENDCHAR +STARTCHAR uni2C6A +ENCODING 11370 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +80 +80 +80 +88 +90 +A0 +C0 +A0 +90 +88 +86 +02 +02 +ENDCHAR +STARTCHAR uni2C6B +ENCODING 11371 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +04 +04 +ENDCHAR +STARTCHAR uni2C6C +ENCODING 11372 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +04 +08 +10 +20 +40 +80 +FC +04 +04 +ENDCHAR +STARTCHAR uni2C6D +ENCODING 11373 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +34 +4C +84 +84 +84 +84 +84 +84 +4C +34 +ENDCHAR +STARTCHAR uni2C6E +ENCODING 11374 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +CC +CC +B4 +B4 +84 +84 +84 +84 +14 +08 +ENDCHAR +STARTCHAR uni2C6F +ENCODING 11375 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +48 +48 +30 +ENDCHAR +STARTCHAR uni2C70 +ENCODING 11376 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +98 +A4 +C4 +84 +84 +84 +84 +84 +C4 +B8 +ENDCHAR +STARTCHAR uni2C71 +ENCODING 11377 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +82 +85 +85 +48 +48 +48 +30 +30 +ENDCHAR +STARTCHAR uni2C72 +ENCODING 11378 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +84 +8A +8A +88 +A8 +A8 +D8 +D8 +88 +88 +ENDCHAR +STARTCHAR uni2C73 +ENCODING 11379 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +84 +AA +AA +A8 +A8 +A8 +A8 +50 +ENDCHAR +STARTCHAR uni2C74 +ENCODING 11380 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +20 +50 +52 +62 +C2 +24 +24 +24 +18 +18 +ENDCHAR +STARTCHAR uni2C75 +ENCODING 11381 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +80 +80 +80 +80 +F0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2C76 +ENCODING 11382 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +80 +80 +80 +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2C77 +ENCODING 11383 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +4C +92 +92 +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni2C78 +ENCODING 11384 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +70 +88 +88 +F8 +80 +8A +8A +74 +ENDCHAR +STARTCHAR uni2C79 +ENCODING 11385 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +18 +04 +04 +04 +04 +04 +04 +84 +8C +74 +ENDCHAR +STARTCHAR uni2C7A +ENCODING 11386 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +82 +82 +82 +92 +AA +AA +7C +ENDCHAR +STARTCHAR uni2C7B +ENCODING 11387 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +F8 +08 +08 +08 +78 +08 +08 +F8 +ENDCHAR +STARTCHAR uni2C7C +ENCODING 11388 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 3 -2 +BITMAP +20 +00 +60 +20 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni2C7D +ENCODING 11389 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +82 +82 +44 +44 +28 +28 +10 +ENDCHAR +STARTCHAR uni2C7E +ENCODING 11390 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +78 +84 +80 +80 +60 +18 +04 +04 +84 +78 +12 +0C +ENDCHAR +STARTCHAR uni2C7F +ENCODING 11391 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +04 +08 +08 +10 +20 +40 +40 +80 +C0 +20 +1C +ENDCHAR +STARTCHAR uni2C80 +ENCODING 11392 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +C0 +20 +10 +10 +38 +48 +44 +44 +4A +31 +ENDCHAR +STARTCHAR uni2C81 +ENCODING 11393 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +C0 +20 +10 +38 +44 +44 +4A +31 +ENDCHAR +STARTCHAR uni2C82 +ENCODING 11394 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +88 +88 +90 +F0 +88 +88 +84 +84 +F8 +ENDCHAR +STARTCHAR uni2C83 +ENCODING 11395 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +E0 +90 +A0 +E0 +90 +88 +88 +F0 +ENDCHAR +STARTCHAR uni2C84 +ENCODING 11396 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2C85 +ENCODING 11397 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +F8 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2C86 +ENCODING 11398 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +10 +08 +0C +0C +14 +12 +12 +12 +A1 +FF +ENDCHAR +STARTCHAR uni2C87 +ENCODING 11399 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +20 +10 +18 +18 +14 +14 +A2 +FE +ENDCHAR +STARTCHAR uni2C88 +ENCODING 11400 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +3C +66 +42 +80 +FE +80 +80 +42 +66 +3C +ENDCHAR +STARTCHAR uni2C89 +ENCODING 11401 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +3C +42 +80 +FE +80 +80 +42 +3C +ENDCHAR +STARTCHAR uni2C8A +ENCODING 11402 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +74 +88 +80 +80 +80 +40 +20 +10 +08 +08 +10 +ENDCHAR +STARTCHAR uni2C8B +ENCODING 11403 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +74 +88 +80 +80 +40 +30 +08 +08 +10 +ENDCHAR +STARTCHAR uni2C8C +ENCODING 11404 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -1 +BITMAP +80 +FE +02 +02 +04 +08 +10 +20 +40 +40 +FE +02 +ENDCHAR +STARTCHAR uni2C8D +ENCODING 11405 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -1 +BITMAP +80 +FE +02 +04 +08 +10 +20 +40 +FE +02 +ENDCHAR +STARTCHAR uni2C8E +ENCODING 11406 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni2C8F +ENCODING 11407 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni2C90 +ENCODING 11408 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +18 +24 +24 +A4 +FF +25 +24 +24 +24 +18 +ENDCHAR +STARTCHAR uni2C91 +ENCODING 11409 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +18 +24 +A4 +FF +25 +24 +24 +18 +ENDCHAR +STARTCHAR uni2C92 +ENCODING 11410 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 2 0 +BITMAP +C0 +40 +40 +40 +40 +40 +40 +40 +40 +20 +ENDCHAR +STARTCHAR uni2C93 +ENCODING 11411 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 2 0 +BITMAP +C0 +40 +40 +40 +40 +40 +40 +20 +ENDCHAR +STARTCHAR uni2C94 +ENCODING 11412 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +98 +88 +90 +A0 +E0 +90 +88 +84 +84 +84 +ENDCHAR +STARTCHAR uni2C95 +ENCODING 11413 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +98 +88 +90 +A0 +E0 +90 +88 +84 +ENDCHAR +STARTCHAR uni2C96 +ENCODING 11414 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +60 +10 +18 +08 +08 +0C +14 +24 +42 +83 +ENDCHAR +STARTCHAR uni2C97 +ENCODING 11415 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +C0 +20 +10 +10 +18 +28 +44 +86 +ENDCHAR +STARTCHAR uni2C98 +ENCODING 11416 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +82 +82 +C6 +AA +92 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni2C99 +ENCODING 11417 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +88 +D8 +A8 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni2C9A +ENCODING 11418 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +82 +82 +C2 +A2 +92 +92 +8A +86 +82 +82 +ENDCHAR +STARTCHAR uni2C9B +ENCODING 11419 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +88 +C8 +C8 +A8 +A8 +98 +98 +88 +ENDCHAR +STARTCHAR uni2C9C +ENCODING 11420 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -1 +BITMAP +80 +FF +02 +0C +30 +F8 +04 +02 +02 +0C +7F +01 +ENDCHAR +STARTCHAR uni2C9D +ENCODING 11421 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -1 +BITMAP +80 +FC +04 +18 +60 +F0 +08 +18 +7E +02 +ENDCHAR +STARTCHAR uni2C9E +ENCODING 11422 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +6C +44 +82 +82 +82 +82 +44 +6C +38 +ENDCHAR +STARTCHAR uni2C9F +ENCODING 11423 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +38 +6C +44 +82 +82 +44 +6C +38 +ENDCHAR +STARTCHAR uni2CA0 +ENCODING 11424 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +42 +42 +42 +42 +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni2CA1 +ENCODING 11425 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +48 +48 +48 +48 +48 +48 +48 +ENDCHAR +STARTCHAR uni2CA2 +ENCODING 11426 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2CA3 +ENCODING 11427 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2CA4 +ENCODING 11428 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +6C +44 +80 +80 +80 +80 +44 +6C +38 +ENDCHAR +STARTCHAR uni2CA5 +ENCODING 11429 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +38 +6C +44 +80 +80 +44 +6C +38 +ENDCHAR +STARTCHAR uni2CA6 +ENCODING 11430 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2CA7 +ENCODING 11431 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2CA8 +ENCODING 11432 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +83 +82 +44 +28 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2CA9 +ENCODING 11433 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +83 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2CAA +ENCODING 11434 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -2 +BITMAP +10 +10 +38 +7C +54 +92 +92 +92 +92 +54 +7C +38 +10 +10 +ENDCHAR +STARTCHAR uni2CAB +ENCODING 11435 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +10 +10 +38 +7C +54 +92 +92 +54 +7C +38 +10 +10 +ENDCHAR +STARTCHAR uni2CAC +ENCODING 11436 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +86 +84 +48 +30 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni2CAD +ENCODING 11437 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +86 +48 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni2CAE +ENCODING 11438 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 -1 +BITMAP +10 +10 +93 +92 +54 +38 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2CAF +ENCODING 11439 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -1 +BITMAP +10 +10 +93 +54 +38 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2CB0 +ENCODING 11440 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +44 +92 +92 +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni2CB1 +ENCODING 11441 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +44 +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni2CB2 +ENCODING 11442 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 5 +BITMAP +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni2CB3 +ENCODING 11443 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 3 +BITMAP +20 +20 +F8 +ENDCHAR +STARTCHAR uni2CB4 +ENCODING 11444 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +08 +10 +20 +40 +8C +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni2CB5 +ENCODING 11445 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +10 +20 +40 +88 +40 +20 +10 +ENDCHAR +STARTCHAR uni2CB6 +ENCODING 11446 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +02 +FE +00 +00 +02 +FE +00 +00 +02 +FE +ENDCHAR +STARTCHAR uni2CB7 +ENCODING 11447 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +04 +FC +00 +04 +FC +00 +04 +FC +ENDCHAR +STARTCHAR uni2CB8 +ENCODING 11448 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +80 +80 +40 +20 +10 +08 +10 +20 +40 +F8 +ENDCHAR +STARTCHAR uni2CB9 +ENCODING 11449 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +80 +80 +40 +20 +10 +20 +40 +F0 +ENDCHAR +STARTCHAR uni2CBA +ENCODING 11450 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 0 4 +BITMAP +02 +FE +ENDCHAR +STARTCHAR uni2CBB +ENCODING 11451 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 3 +BITMAP +04 +FC +ENDCHAR +STARTCHAR uni2CBC +ENCODING 11452 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni2CBD +ENCODING 11453 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni2CBE +ENCODING 11454 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +92 +92 +92 +92 +FF +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni2CBF +ENCODING 11455 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +92 +92 +92 +FF +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni2CC0 +ENCODING 11456 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +3C +22 +22 +22 +3C +20 +FE +A0 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2CC1 +ENCODING 11457 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +3C +22 +22 +22 +3C +20 +FE +A0 +20 +20 +ENDCHAR +STARTCHAR uni2CC2 +ENCODING 11458 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 0 -2 +BITMAP +54 +10 +7C +10 +44 +92 +92 +92 +92 +92 +92 +92 +6E +02 +7C +80 +ENDCHAR +STARTCHAR uni2CC3 +ENCODING 11459 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -2 +BITMAP +54 +10 +7C +10 +44 +92 +92 +92 +92 +92 +6E +02 +7C +80 +ENDCHAR +STARTCHAR uni2CC4 +ENCODING 11460 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +80 +FC +04 +18 +60 +F0 +08 +04 +04 +04 +08 +F0 +ENDCHAR +STARTCHAR uni2CC5 +ENCODING 11461 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +80 +F8 +08 +10 +20 +78 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni2CC6 +ENCODING 11462 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -2 +BITMAP +10 +10 +10 +20 +20 +20 +20 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni2CC7 +ENCODING 11463 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 -2 +BITMAP +10 +10 +20 +20 +20 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni2CC8 +ENCODING 11464 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +08 +FC +20 +40 +84 +78 +ENDCHAR +STARTCHAR uni2CC9 +ENCODING 11465 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +08 +FC +60 +84 +78 +ENDCHAR +STARTCHAR uni2CCA +ENCODING 11466 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +94 +64 +04 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni2CCB +ENCODING 11467 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +94 +64 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni2CCC +ENCODING 11468 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +78 +C4 +C2 +02 +04 +7C +02 +02 +02 +02 +82 +7C +ENDCHAR +STARTCHAR uni2CCD +ENCODING 11469 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +78 +C4 +C2 +02 +3C +04 +02 +02 +82 +7C +ENDCHAR +STARTCHAR uni2CCE +ENCODING 11470 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +1E +11 +11 +21 +22 +20 +20 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni2CCF +ENCODING 11471 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +1E +11 +21 +21 +22 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni2CD0 +ENCODING 11472 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +84 +FC +ENDCHAR +STARTCHAR uni2CD1 +ENCODING 11473 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +88 +F8 +ENDCHAR +STARTCHAR uni2CD2 +ENCODING 11474 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +08 +10 +20 +40 +80 +98 +A4 +84 +78 +ENDCHAR +STARTCHAR uni2CD3 +ENCODING 11475 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +08 +10 +20 +40 +98 +A4 +84 +78 +ENDCHAR +STARTCHAR uni2CD4 +ENCODING 11476 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 0 +BITMAP +30 +40 +80 +60 +20 +20 +20 +20 +20 +20 +20 +20 +60 +ENDCHAR +STARTCHAR uni2CD5 +ENCODING 11477 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +30 +40 +80 +60 +20 +20 +20 +20 +20 +20 +60 +ENDCHAR +STARTCHAR uni2CD6 +ENCODING 11478 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +22 +7E +A0 +40 +ENDCHAR +STARTCHAR uni2CD7 +ENCODING 11479 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +20 +20 +20 +20 +20 +20 +24 +7C +A0 +40 +ENDCHAR +STARTCHAR uni2CD8 +ENCODING 11480 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +42 +42 +42 +42 +42 +42 +42 +42 +42 +FF +ENDCHAR +STARTCHAR uni2CD9 +ENCODING 11481 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +48 +48 +48 +48 +48 +48 +48 +FC +ENDCHAR +STARTCHAR uni2CDA +ENCODING 11482 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +10 +08 +0C +0C +54 +32 +1A +16 +A3 +FF +ENDCHAR +STARTCHAR uni2CDB +ENCODING 11483 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +20 +10 +18 +58 +34 +1C +A6 +FE +ENDCHAR +STARTCHAR uni2CDC +ENCODING 11484 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +3C +40 +40 +38 +6C +44 +82 +82 +82 +82 +44 +6C +38 +ENDCHAR +STARTCHAR uni2CDD +ENCODING 11485 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +3C +40 +40 +38 +6C +44 +82 +82 +44 +6C +38 +ENDCHAR +STARTCHAR uni2CDE +ENCODING 11486 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +44 +40 +40 +40 +40 +40 +40 +44 +7C +ENDCHAR +STARTCHAR uni2CDF +ENCODING 11487 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +44 +40 +40 +40 +40 +48 +78 +ENDCHAR +STARTCHAR uni2CE0 +ENCODING 11488 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +10 +26 +49 +51 +62 +24 +58 +40 +80 +80 +ENDCHAR +STARTCHAR uni2CE1 +ENCODING 11489 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +10 +26 +49 +72 +24 +58 +80 +80 +ENDCHAR +STARTCHAR uni2CE2 +ENCODING 11490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +FC +20 +3C +22 +22 +22 +3C +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2CE3 +ENCODING 11491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +FC +20 +3C +22 +22 +22 +3C +20 +20 +20 +ENDCHAR +STARTCHAR uni2CE4 +ENCODING 11492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +98 +88 +90 +A0 +E0 +90 +88 +84 +04 +38 +ENDCHAR +STARTCHAR uni2CE5 +ENCODING 11493 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -2 +BITMAP +1E +11 +11 +1E +10 +92 +D6 +BA +92 +92 +92 +92 +10 +10 +ENDCHAR +STARTCHAR uni2CE6 +ENCODING 11494 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 15 0 -2 +BITMAP +1E +11 +11 +1E +10 +FE +54 +54 +54 +54 +54 +54 +54 +10 +10 +ENDCHAR +STARTCHAR uni2CE7 +ENCODING 11495 +BBX 15 16 0 -2 +BITMAP +01E0 +0110 +0110 +01E0 +0100 +7FFE +391C +6D36 +4522 +8140 +8140 +4522 +6D36 +391C +0100 +0100 +ENDCHAR +STARTCHAR uni2CE8 +ENCODING 11496 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -2 +BITMAP +3C +22 +22 +3C +20 +FC +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2CE9 +ENCODING 11497 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 1 -2 +BITMAP +3C +22 +22 +3C +20 +20 +AC +A8 +A8 +70 +70 +70 +A8 +A8 +20 +20 +ENDCHAR +STARTCHAR uni2CEA +ENCODING 11498 +BBX 14 8 1 0 +BITMAP +3FF8 +6C6C +4444 +8280 +8280 +4444 +6C6C +3838 +ENDCHAR +STARTCHAR uni2CEB +ENCODING 11499 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 3 +BITMAP +6C +92 +92 +92 +6C +00 +FE +ENDCHAR +STARTCHAR uni2CEC +ENCODING 11500 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 2 +BITMAP +6C +92 +92 +6C +00 +FE +ENDCHAR +STARTCHAR uni2CED +ENCODING 11501 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +CC +B4 +B4 +CC +84 +84 +84 +ENDCHAR +STARTCHAR uni2CEE +ENCODING 11502 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +CC +B4 +B4 +CC +84 +84 +ENDCHAR +STARTCHAR uni2CEF +ENCODING 11503 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 3 -4 9 +BITMAP +C000 +FFC0 +00C0 +ENDCHAR +STARTCHAR uni2CF0 +ENCODING 11504 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 11 +BITMAP +C0 +7C +C0 +ENDCHAR +STARTCHAR uni2CF1 +ENCODING 11505 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 11 +BITMAP +0C +F8 +0C +ENDCHAR +STARTCHAR uni2CF2 +ENCODING 11506 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +08 +10 +20 +3C +82 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni2CF3 +ENCODING 11507 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +08 +10 +20 +3C +82 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni2CF9 +ENCODING 11513 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +D8 +D8 +48 +24 +24 +24 +24 +12 +12 +12 +ENDCHAR +STARTCHAR uni2CFA +ENCODING 11514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +30 +30 +20 +40 +40 +40 +40 +80 +98 +98 +ENDCHAR +STARTCHAR uni2CFB +ENCODING 11515 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +60 +60 +20 +10 +10 +10 +10 +08 +C8 +C8 +ENDCHAR +STARTCHAR uni2CFC +ENCODING 11516 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +36 +36 +24 +48 +48 +48 +48 +90 +90 +90 +ENDCHAR +STARTCHAR uni2CFD +ENCODING 11517 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +10 +20 +40 +40 +20 +10 +E0 +ENDCHAR +STARTCHAR uni2CFE +ENCODING 11518 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +18 +10 +10 +D6 +10 +10 +30 +ENDCHAR +STARTCHAR uni2CFF +ENCODING 11519 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 10 +BITMAP +C0 +20 +10 +ENDCHAR +STARTCHAR uni2D00 +ENCODING 11520 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +FC +44 +40 +40 +40 +7C +04 +ENDCHAR +STARTCHAR uni2D01 +ENCODING 11521 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 -2 +BITMAP +C4 +44 +44 +7C +04 +02 +42 +3C +ENDCHAR +STARTCHAR uni2D02 +ENCODING 11522 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 -2 +BITMAP +FC +44 +44 +44 +44 +42 +02 +3C +ENDCHAR +STARTCHAR uni2D03 +ENCODING 11523 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +F8 +28 +20 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni2D04 +ENCODING 11524 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 -2 +BITMAP +FC +44 +44 +44 +44 +46 +02 +02 +ENDCHAR +STARTCHAR uni2D05 +ENCODING 11525 +BBX 10 8 2 -2 +BITMAP +FFC0 +4440 +4440 +4440 +4440 +4440 +0400 +0200 +ENDCHAR +STARTCHAR uni2D06 +ENCODING 11526 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +E0 +20 +20 +20 +38 +24 +24 +24 +24 +38 +ENDCHAR +STARTCHAR uni2D07 +ENCODING 11527 +BBX 10 6 3 0 +BITMAP +FFC0 +4440 +4440 +4440 +4440 +7C40 +ENDCHAR +STARTCHAR uni2D08 +ENCODING 11528 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +FC +64 +44 +04 +04 +04 +ENDCHAR +STARTCHAR uni2D09 +ENCODING 11529 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -2 +BITMAP +80 +80 +80 +E0 +90 +90 +90 +90 +70 +10 +10 +10 +ENDCHAR +STARTCHAR uni2D0A +ENCODING 11530 +BBX 10 6 3 0 +BITMAP +FFC0 +4440 +4440 +4440 +4440 +47C0 +ENDCHAR +STARTCHAR uni2D0B +ENCODING 11531 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +80 +F0 +10 +10 +10 +78 +90 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni2D0C +ENCODING 11532 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +88 +80 +80 +F8 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni2D0D +ENCODING 11533 +BBX 11 6 2 0 +BITMAP +C440 +4440 +4440 +4440 +4440 +7FE0 +ENDCHAR +STARTCHAR uni2D0E +ENCODING 11534 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 0 +BITMAP +B2 +D2 +12 +12 +12 +1F +ENDCHAR +STARTCHAR uni2D0F +ENCODING 11535 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -2 +BITMAP +B2 +D2 +12 +12 +12 +1F +02 +02 +ENDCHAR +STARTCHAR uni2D10 +ENCODING 11536 +BBX 9 10 3 0 +BITMAP +0800 +0800 +0800 +0800 +8F80 +8880 +8880 +8880 +8880 +F880 +ENDCHAR +STARTCHAR uni2D11 +ENCODING 11537 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 -1 +BITMAP +80 +80 +80 +80 +90 +90 +90 +90 +90 +F8 +08 +ENDCHAR +STARTCHAR uni2D12 +ENCODING 11538 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 -2 +BITMAP +FC +44 +44 +7C +40 +40 +40 +3C +ENDCHAR +STARTCHAR uni2D13 +ENCODING 11539 +BBX 10 12 3 -2 +BITMAP +0040 +0040 +0040 +0040 +C440 +4440 +4440 +4440 +4440 +7FC0 +0040 +0040 +ENDCHAR +STARTCHAR uni2D14 +ENCODING 11540 +BBX 10 8 3 -2 +BITMAP +FFC0 +4440 +4440 +4440 +4440 +7FC0 +0400 +0400 +ENDCHAR +STARTCHAR uni2D15 +ENCODING 11541 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +10 +16 +BA +D0 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2D16 +ENCODING 11542 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 0 +BITMAP +FC +44 +44 +44 +44 +46 +ENDCHAR +STARTCHAR uni2D17 +ENCODING 11543 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +C4 +44 +44 +44 +7C +04 +04 +04 +ENDCHAR +STARTCHAR uni2D18 +ENCODING 11544 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +C4 +44 +44 +44 +7C +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni2D19 +ENCODING 11545 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -2 +BITMAP +80 +80 +80 +F0 +90 +90 +90 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2D1A +ENCODING 11546 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 -2 +BITMAP +FC +44 +44 +44 +44 +44 +40 +38 +ENDCHAR +STARTCHAR uni2D1B +ENCODING 11547 +BBX 9 10 3 0 +BITMAP +0800 +0800 +0800 +0800 +FF80 +8880 +8880 +8880 +8880 +F880 +ENDCHAR +STARTCHAR uni2D1C +ENCODING 11548 +BBX 10 8 3 -2 +BITMAP +FFC0 +4440 +4440 +4440 +4440 +44C0 +4000 +4000 +ENDCHAR +STARTCHAR uni2D1D +ENCODING 11549 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 -2 +BITMAP +F8 +48 +40 +70 +08 +48 +48 +30 +ENDCHAR +STARTCHAR uni2D1E +ENCODING 11550 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +CC +44 +44 +44 +44 +7C +40 +40 +ENDCHAR +STARTCHAR uni2D1F +ENCODING 11551 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -2 +BITMAP +C0 +FE +22 +14 +0C +12 +21 +40 +80 +ENDCHAR +STARTCHAR uni2D20 +ENCODING 11552 +BBX 11 6 2 0 +BITMAP +FC40 +4440 +4440 +4440 +4440 +47E0 +ENDCHAR +STARTCHAR uni2D21 +ENCODING 11553 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +F0 +98 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2D22 +ENCODING 11554 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 0 +BITMAP +80 +F0 +08 +08 +08 +F0 +ENDCHAR +STARTCHAR uni2D23 +ENCODING 11555 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +08 +08 +08 +08 +C8 +48 +48 +78 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2D24 +ENCODING 11556 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 -2 +BITMAP +C4 +44 +44 +7C +10 +10 +ENDCHAR +STARTCHAR uni2D25 +ENCODING 11557 +BBX 9 10 3 0 +BITMAP +0780 +0880 +0800 +0800 +FF80 +8880 +8880 +8880 +8880 +F880 +ENDCHAR +STARTCHAR uni2D27 +ENCODING 11559 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 -2 +BITMAP +30 +48 +08 +10 +60 +80 +88 +70 +ENDCHAR +STARTCHAR uni2D2D +ENCODING 11565 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 0 +BITMAP +F0 +10 +20 +40 +80 +F0 +ENDCHAR +STARTCHAR uni2D30 +ENCODING 11568 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 0 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni2D31 +ENCODING 11569 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +44 +82 +FE +82 +44 +38 +ENDCHAR +STARTCHAR uni2D32 +ENCODING 11570 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +54 +92 +FE +92 +54 +38 +ENDCHAR +STARTCHAR uni2D33 +ENCODING 11571 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +44 +28 +10 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni2D34 +ENCODING 11572 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +82 +44 +28 +10 +10 +28 +44 +FE +ENDCHAR +STARTCHAR uni2D35 +ENCODING 11573 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +44 +28 +10 +10 +28 +44 +FE +ENDCHAR +STARTCHAR uni2D36 +ENCODING 11574 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +D6 +D6 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2D37 +ENCODING 11575 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +20 +50 +50 +50 +50 +88 +88 +88 +ENDCHAR +STARTCHAR uni2D38 +ENCODING 11576 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +88 +88 +88 +50 +50 +50 +50 +20 +ENDCHAR +STARTCHAR uni2D39 +ENCODING 11577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +80 +80 +80 +F0 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni2D3A +ENCODING 11578 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +04 +04 +04 +FC +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni2D3B +ENCODING 11579 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +30 +48 +48 +30 +00 +FC +00 +30 +48 +48 +30 +ENDCHAR +STARTCHAR uni2D3C +ENCODING 11580 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 -1 +BITMAP +EE +28 +28 +28 +38 +28 +28 +28 +EE +ENDCHAR +STARTCHAR uni2D3D +ENCODING 11581 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +84 +88 +90 +90 +A8 +C4 +82 +ENDCHAR +STARTCHAR uni2D3E +ENCODING 11582 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -1 +BITMAP +C0 +C0 +00 +00 +18 +18 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2D3F +ENCODING 11583 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +82 +C4 +A8 +90 +90 +88 +84 +FE +ENDCHAR +STARTCHAR uni2D40 +ENCODING 11584 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +54 +92 +92 +92 +54 +38 +ENDCHAR +STARTCHAR uni2D41 +ENCODING 11585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +3A +44 +8A +92 +A2 +44 +B8 +ENDCHAR +STARTCHAR uni2D42 +ENCODING 11586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 14 3 -2 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +00 +00 +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2D43 +ENCODING 11587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +01 +02 +04 +08 +18 +24 +42 +81 +ENDCHAR +STARTCHAR uni2D44 +ENCODING 11588 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +20 +20 +20 +F8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni2D45 +ENCODING 11589 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +92 +54 +38 +10 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni2D46 +ENCODING 11590 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +CC +CC +00 +00 +CC +CC +ENDCHAR +STARTCHAR uni2D47 +ENCODING 11591 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +84 +88 +90 +90 +A0 +C0 +FE +ENDCHAR +STARTCHAR uni2D48 +ENCODING 11592 +BBX 10 2 3 3 +BITMAP +CCC0 +CCC0 +ENDCHAR +STARTCHAR uni2D49 +ENCODING 11593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 0 +BITMAP +20 +40 +80 +40 +20 +40 +80 +40 +20 +ENDCHAR +STARTCHAR uni2D4A +ENCODING 11594 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni2D4B +ENCODING 11595 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +C6 +28 +10 +10 +10 +28 +C6 +ENDCHAR +STARTCHAR uni2D4C +ENCODING 11596 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 -1 +BITMAP +28 +28 +28 +FE +28 +FE +28 +28 +28 +ENDCHAR +STARTCHAR uni2D4D +ENCODING 11597 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 -1 +BITMAP +90 +90 +90 +B0 +D0 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni2D4E +ENCODING 11598 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni2D4F +ENCODING 11599 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 9 3 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2D50 +ENCODING 11600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 -1 +BITMAP +10 +10 +10 +FE +10 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni2D51 +ENCODING 11601 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 12 3 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +00 +80 +80 +ENDCHAR +STARTCHAR uni2D52 +ENCODING 11602 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +F0 +10 +20 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni2D53 +ENCODING 11603 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +60 +90 +90 +60 +00 +00 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni2D54 +ENCODING 11604 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni2D55 +ENCODING 11605 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +44 +82 +92 +8A +44 +3A +ENDCHAR +STARTCHAR uni2D56 +ENCODING 11606 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +88 +88 +88 +88 +F8 +20 +20 +20 +ENDCHAR +STARTCHAR uni2D57 +ENCODING 11607 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 10 3 0 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2D58 +ENCODING 11608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -1 +BITMAP +C3 +C3 +00 +00 +18 +18 +00 +00 +C3 +C3 +ENDCHAR +STARTCHAR uni2D59 +ENCODING 11609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +44 +BA +BA +BA +44 +38 +ENDCHAR +STARTCHAR uni2D5A +ENCODING 11610 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +3A +44 +8A +92 +82 +44 +38 +ENDCHAR +STARTCHAR uni2D5B +ENCODING 11611 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +3C +52 +8C +80 +80 +80 +8C +52 +3C +ENDCHAR +STARTCHAR uni2D5C +ENCODING 11612 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 -1 +BITMAP +20 +20 +20 +20 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2D5D +ENCODING 11613 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +82 +44 +28 +10 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni2D5E +ENCODING 11614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +3C +52 +8C +A0 +F0 +A0 +8C +52 +3C +ENDCHAR +STARTCHAR uni2D5F +ENCODING 11615 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +80 +90 +90 +F8 +90 +90 +80 +FC +ENDCHAR +STARTCHAR uni2D60 +ENCODING 11616 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +20 +50 +50 +50 +50 +88 +88 +F8 +ENDCHAR +STARTCHAR uni2D61 +ENCODING 11617 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +88 +88 +88 +88 +88 +88 +88 +F8 +ENDCHAR +STARTCHAR uni2D62 +ENCODING 11618 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 7 2 0 +BITMAP +20 +40 +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uni2D63 +ENCODING 11619 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +92 +92 +54 +38 +10 +10 +10 +38 +54 +92 +92 +ENDCHAR +STARTCHAR uni2D64 +ENCODING 11620 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +C0 +A0 +90 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2D65 +ENCODING 11621 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +92 +92 +54 +38 +10 +FE +10 +38 +54 +92 +92 +ENDCHAR +STARTCHAR uni2D66 +ENCODING 11622 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +08 +10 +20 +40 +80 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni2D67 +ENCODING 11623 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 1 0 4 +BITMAP +EE +ENDCHAR +STARTCHAR uni2D6F +ENCODING 11631 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 9 +BITMAP +90 +90 +90 +F0 +ENDCHAR +STARTCHAR uni2D70 +ENCODING 11632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +04 +04 +04 +04 +08 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni2D7F +ENCODING 11647 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -5 -2 +BITMAP +20 +F8 +20 +ENDCHAR +STARTCHAR uni2D80 +ENCODING 11648 +BBX 15 12 0 0 +BITMAP +0600 +0600 +0600 +0F00 +0F80 +19C0 +D8C0 +F8FC +D8D6 +18DC +18C0 +18C0 +ENDCHAR +STARTCHAR uni2D81 +ENCODING 11649 +BBX 13 12 2 0 +BITMAP +1FF0 +3FF0 +6298 +4298 +4518 +7DF0 +38F0 +0800 +0800 +D800 +F000 +D000 +ENDCHAR +STARTCHAR uni2D82 +ENCODING 11650 +BBX 13 12 1 -1 +BITMAP +03F0 +07C8 +0C78 +D800 +F800 +D800 +1800 +1800 +1800 +0860 +07E0 +0060 +ENDCHAR +STARTCHAR uni2D83 +ENCODING 11651 +BBX 10 12 0 0 +BITMAP +0600 +0600 +0600 +0F00 +0F80 +19C0 +D8C0 +F800 +D800 +1800 +1800 +1800 +ENDCHAR +STARTCHAR uni2D84 +ENCODING 11652 +BBX 11 12 0 0 +BITMAP +6060 +7FE0 +0600 +0F00 +0F80 +19C0 +D8C0 +F800 +D800 +1800 +1800 +1800 +ENDCHAR +STARTCHAR uni2D85 +ENCODING 11653 +BBX 10 9 0 0 +BITMAP +0F00 +0F80 +19C0 +D8C0 +F800 +D800 +1800 +1800 +1800 +ENDCHAR +STARTCHAR uni2D86 +ENCODING 11654 +BBX 10 13 2 -1 +BITMAP +0E00 +1B00 +3180 +3180 +3180 +3180 +3B00 +1E00 +FFC0 +CCC0 +0C00 +FC00 +C000 +ENDCHAR +STARTCHAR uni2D87 +ENCODING 11655 +BBX 10 14 2 -1 +BITMAP +60C0 +7FC0 +1B00 +3180 +3180 +3180 +3180 +3B00 +1E00 +FFC0 +CCC0 +0C00 +FC00 +C000 +ENDCHAR +STARTCHAR uni2D88 +ENCODING 11656 +BBX 11 12 3 0 +BITMAP +3FC0 +7E60 +C3C0 +C000 +E000 +6000 +3E00 +0600 +0600 +6600 +7E00 +6000 +ENDCHAR +STARTCHAR uni2D89 +ENCODING 11657 +BBX 11 14 3 0 +BITMAP +C0C0 +FFC0 +0C00 +3FC0 +7E60 +C3C0 +C000 +6000 +3E00 +0600 +0600 +6600 +7E00 +6000 +ENDCHAR +STARTCHAR uni2D8A +ENCODING 11658 +BBX 10 12 2 0 +BITMAP +0C00 +0C00 +0C00 +0F00 +0300 +0700 +C780 +FDC0 +DCC0 +18C0 +18C0 +1800 +ENDCHAR +STARTCHAR uni2D8B +ENCODING 11659 +BBX 9 10 0 0 +BITMAP +0180 +3180 +B180 +FF80 +B180 +3180 +3000 +3000 +3000 +3000 +ENDCHAR +STARTCHAR uni2D8C +ENCODING 11660 +BBX 11 11 2 1 +BITMAP +0700 +0F80 +D880 +F880 +D900 +1FE0 +0660 +0C00 +0C00 +1800 +3800 +ENDCHAR +STARTCHAR uni2D8D +ENCODING 11661 +BBX 11 13 2 1 +BITMAP +0600 +0600 +0700 +0F80 +D880 +F880 +D900 +1FE0 +0660 +0C00 +0C00 +1800 +3800 +ENDCHAR +STARTCHAR uni2D8E +ENCODING 11662 +BBX 11 13 2 1 +BITMAP +30C0 +3FC0 +0600 +0700 +CF80 +F880 +D900 +1FE0 +0660 +0C00 +0C00 +1800 +3800 +ENDCHAR +STARTCHAR uni2D8F +ENCODING 11663 +BBX 12 11 2 0 +BITMAP +07C0 +0D60 +0D60 +D930 +F930 +D930 +1930 +1800 +1800 +1800 +1800 +ENDCHAR +STARTCHAR uni2D90 +ENCODING 11664 +BBX 14 11 1 0 +BITMAP +03F8 +0798 +0D98 +1954 +19DC +D800 +FE00 +DD00 +1880 +0D80 +0700 +ENDCHAR +STARTCHAR uni2D91 +ENCODING 11665 +BBX 12 12 1 0 +BITMAP +0380 +07C0 +0460 +0660 +03E0 +00C0 +0180 +0FE0 +0C30 +FC30 +C600 +0600 +ENDCHAR +STARTCHAR uni2D92 +ENCODING 11666 +BBX 11 12 2 0 +BITMAP +30C0 +3FC0 +7FE0 +6660 +0600 +0600 +C600 +FE00 +CC00 +1800 +3000 +2000 +ENDCHAR +STARTCHAR uni2D93 +ENCODING 11667 +BBX 13 16 1 -2 +BITMAP +0380 +C780 +FC00 +1800 +3800 +6600 +C700 +C380 +C180 +01F8 +01A8 +01B8 +0180 +0180 +0FF0 +1C38 +ENDCHAR +STARTCHAR uni2D94 +ENCODING 11668 +BBX 14 12 0 0 +BITMAP +C0C0 +FFC0 +0C00 +1E00 +3E00 +7300 +6360 +03E0 +037C +030C +0300 +0300 +ENDCHAR +STARTCHAR uni2D95 +ENCODING 11669 +BBX 11 13 1 -1 +BITMAP +C0C0 +FFC0 +0C00 +1E00 +3E00 +7300 +6300 +0300 +0300 +03E0 +0320 +1FE0 +1800 +ENDCHAR +STARTCHAR uni2D96 +ENCODING 11670 +BBX 14 16 1 -2 +BITMAP +0380 +C780 +FC00 +1800 +3800 +6600 +C700 +C3B0 +C1B0 +01FC +018C +0180 +0180 +0180 +0FF0 +1C38 +ENDCHAR +STARTCHAR uni2DA0 +ENCODING 11680 +BBX 11 12 2 0 +BITMAP +7FE0 +6660 +0600 +0F00 +0F80 +19C0 +D8C0 +F8C0 +D8C0 +18C0 +18C0 +18C0 +ENDCHAR +STARTCHAR uni2DA1 +ENCODING 11681 +BBX 13 12 1 0 +BITMAP +7FE0 +6660 +0600 +0F00 +0F80 +19C0 +D8D8 +F8F8 +D8D8 +18C0 +18C0 +18C0 +ENDCHAR +STARTCHAR uni2DA2 +ENCODING 11682 +BBX 13 13 1 -1 +BITMAP +7FE0 +6660 +0600 +0F00 +0F80 +19C0 +D8C0 +F8C0 +D8C0 +18C0 +18D8 +18F8 +0018 +ENDCHAR +STARTCHAR uni2DA3 +ENCODING 11683 +BBX 11 12 2 0 +BITMAP +7FE0 +6660 +0600 +0F00 +0F80 +19C0 +D8C0 +F8C0 +D8C0 +00C0 +00C0 +00C0 +ENDCHAR +STARTCHAR uni2DA4 +ENCODING 11684 +BBX 13 12 1 0 +BITMAP +7FE0 +6660 +0600 +0F00 +0F80 +19C0 +D8C0 +F8C0 +D8C0 +18F8 +18C8 +18F8 +ENDCHAR +STARTCHAR uni2DA5 +ENCODING 11685 +BBX 10 12 1 0 +BITMAP +FFC0 +CCC0 +0600 +0F00 +0F80 +19C0 +D8C0 +F8C0 +D8C0 +18C0 +18C0 +18C0 +ENDCHAR +STARTCHAR uni2DA6 +ENCODING 11686 +BBX 12 12 2 0 +BITMAP +3FF0 +3330 +0300 +0780 +0F80 +1CC0 +D8C0 +F8C0 +D8C0 +1800 +1800 +1800 +ENDCHAR +STARTCHAR uni2DA8 +ENCODING 11688 +BBX 10 12 3 1 +BITMAP +C0C0 +FFC0 +CCC0 +0C00 +0C00 +FFC0 +CCC0 +0C00 +0C00 +FC00 +CC00 +0C00 +ENDCHAR +STARTCHAR uni2DA9 +ENCODING 11689 +BBX 10 12 3 1 +BITMAP +C0C0 +FFC0 +CCC0 +0C00 +0C00 +FFC0 +CCC0 +0C00 +0CC0 +FFC0 +CCC0 +0C00 +ENDCHAR +STARTCHAR uni2DAA +ENCODING 11690 +BBX 10 13 3 0 +BITMAP +C0C0 +FFC0 +CCC0 +0C00 +0C00 +FFC0 +CCC0 +0C00 +0C00 +FC00 +CCC0 +0FC0 +00C0 +ENDCHAR +STARTCHAR uni2DAB +ENCODING 11691 +BBX 10 15 3 -2 +BITMAP +C0C0 +FFC0 +CCC0 +0C00 +0C00 +FFC0 +CCC0 +0C00 +0C00 +FC00 +CC00 +1C00 +3800 +C000 +C000 +ENDCHAR +STARTCHAR uni2DAC +ENCODING 11692 +BBX 10 12 3 1 +BITMAP +C0C0 +FFC0 +CCC0 +0C00 +0C00 +FFC0 +CCC0 +0C00 +0C00 +FF80 +CC80 +0F80 +ENDCHAR +STARTCHAR uni2DAD +ENCODING 11693 +BBX 11 12 2 1 +BITMAP +C0C0 +FFC0 +CCC0 +0600 +0600 +7FE0 +6660 +0600 +0600 +7E00 +6600 +0600 +ENDCHAR +STARTCHAR uni2DAE +ENCODING 11694 +BBX 12 15 1 -1 +BITMAP +6030 +6030 +7740 +0D80 +18C0 +18C0 +18C0 +18C0 +1D80 +FFF0 +C630 +0600 +7E00 +6600 +0600 +ENDCHAR +STARTCHAR uni2DB0 +ENCODING 11696 +BBX 14 8 1 1 +BITMAP +F87C +CCCC +0CC0 +FFC0 +CCC0 +0CC0 +0CC0 +0CC0 +ENDCHAR +STARTCHAR uni2DB1 +ENCODING 11697 +BBX 14 8 1 1 +BITMAP +F87C +CCCC +0CC0 +FFFC +CCCC +0CC0 +0CC0 +0CC0 +ENDCHAR +STARTCHAR uni2DB2 +ENCODING 11698 +BBX 14 9 1 0 +BITMAP +F87C +CCCC +0CC0 +FFC0 +CCC0 +0CC0 +0CCC +0CFC +000C +ENDCHAR +STARTCHAR uni2DB3 +ENCODING 11699 +BBX 14 8 1 1 +BITMAP +F87C +CCCC +0CC0 +FFC0 +CCC0 +0CC0 +00C0 +00C0 +ENDCHAR +STARTCHAR uni2DB4 +ENCODING 11700 +BBX 14 8 1 1 +BITMAP +F87C +CCCC +0CC0 +FFC0 +CCC0 +0CF8 +0CC8 +0CF8 +ENDCHAR +STARTCHAR uni2DB5 +ENCODING 11701 +BBX 14 13 1 1 +BITMAP +C300 +FF00 +1800 +1800 +F87C +CCCC +0CC0 +FFC0 +CCC0 +0CC0 +0CC0 +0CC0 +0CC0 +ENDCHAR +STARTCHAR uni2DB6 +ENCODING 11702 +BBX 14 8 1 1 +BITMAP +F87C +CCCC +0CC0 +FFC0 +CCC0 +0CC0 +0C00 +0C00 +ENDCHAR +STARTCHAR uni2DB8 +ENCODING 11704 +BBX 16 10 0 0 +BITMAP +03E0 +07F0 +0C98 +188C +F88C +C88C +1CCE +1AAD +1AAD +1EEF +ENDCHAR +STARTCHAR uni2DB9 +ENCODING 11705 +BBX 16 10 0 0 +BITMAP +03E0 +07F0 +0C98 +188F +F88B +C888 +1CCC +1AAA +1AAA +1EEE +ENDCHAR +STARTCHAR uni2DBA +ENCODING 11706 +BBX 16 11 0 -1 +BITMAP +03E0 +07F0 +0C98 +188C +F88C +C88C +1CCC +1AAC +1AAC +1EEF +0003 +ENDCHAR +STARTCHAR uni2DBB +ENCODING 11707 +BBX 15 11 0 -1 +BITMAP +03E0 +07F0 +0C98 +1CCC +FAAC +DAAC +1EEC +0018 +001C +0032 +003E +ENDCHAR +STARTCHAR uni2DBC +ENCODING 11708 +BBX 16 10 0 0 +BITMAP +03F0 +07F8 +0C9B +188E +F88B +C888 +1CCC +1AAA +1AAA +1EEE +ENDCHAR +STARTCHAR uni2DBD +ENCODING 11709 +BBX 15 10 0 0 +BITMAP +03F0 +07F8 +0CD8 +1CCC +FAEA +DA6A +1E6E +0050 +0050 +0070 +ENDCHAR +STARTCHAR uni2DBE +ENCODING 11710 +BBX 15 10 0 0 +BITMAP +03F0 +07F8 +0C98 +18CC +F8AA +C8AA +1CEE +1A00 +1A00 +1E00 +ENDCHAR +STARTCHAR uni2DC0 +ENCODING 11712 +BBX 10 13 3 0 +BITMAP +6180 +7380 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni2DC1 +ENCODING 11713 +BBX 10 13 3 0 +BITMAP +6180 +7380 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0CC0 +0FC0 +0CC0 +0C00 +ENDCHAR +STARTCHAR uni2DC2 +ENCODING 11714 +BBX 10 14 3 -1 +BITMAP +6180 +7380 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0C00 +0CC0 +0FC0 +00C0 +ENDCHAR +STARTCHAR uni2DC3 +ENCODING 11715 +BBX 10 15 2 -2 +BITMAP +6180 +7380 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +1800 +3000 +E000 +E000 +E000 +ENDCHAR +STARTCHAR uni2DC4 +ENCODING 11716 +BBX 10 13 3 0 +BITMAP +6180 +7380 +0C00 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0F80 +0C80 +0F80 +ENDCHAR +STARTCHAR uni2DC5 +ENCODING 11717 +BBX 11 13 2 0 +BITMAP +C300 +E700 +1800 +0600 +0FC0 +3660 +6660 +66C0 +3F00 +0600 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni2DC6 +ENCODING 11718 +BBX 10 13 3 0 +BITMAP +6180 +7380 +0C00 +1200 +1200 +0C00 +1F80 +6CC0 +CCC0 +CD80 +7E00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni2DC8 +ENCODING 11720 +BBX 9 11 4 0 +BITMAP +D980 +DD80 +FF00 +E600 +6600 +6600 +6600 +6600 +6600 +6600 +6600 +ENDCHAR +STARTCHAR uni2DC9 +ENCODING 11721 +BBX 10 11 3 0 +BITMAP +D980 +DD80 +FF00 +E600 +6600 +67C0 +66C0 +6600 +6600 +6600 +6600 +ENDCHAR +STARTCHAR uni2DCA +ENCODING 11722 +BBX 10 12 3 -1 +BITMAP +D980 +DD80 +FF00 +E600 +6600 +6600 +6600 +6600 +6600 +6600 +67C0 +00C0 +ENDCHAR +STARTCHAR uni2DCB +ENCODING 11723 +BBX 9 11 4 0 +BITMAP +D980 +DD80 +FF00 +E600 +6600 +6600 +0600 +0600 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni2DCC +ENCODING 11724 +BBX 10 11 3 0 +BITMAP +D980 +DD80 +FF00 +E600 +6600 +6600 +6600 +6600 +67C0 +6640 +67C0 +ENDCHAR +STARTCHAR uni2DCD +ENCODING 11725 +BBX 10 11 3 0 +BITMAP +CCC0 +CEC0 +FF80 +C300 +3300 +3300 +3300 +3300 +3300 +3300 +3300 +ENDCHAR +STARTCHAR uni2DCE +ENCODING 11726 +BBX 9 11 4 0 +BITMAP +D980 +DD80 +FF00 +E600 +6600 +6600 +6600 +6000 +6000 +6000 +6000 +ENDCHAR +STARTCHAR uni2DD0 +ENCODING 11728 +BBX 12 14 0 0 +BITMAP +30C0 +39C0 +C630 +FFF0 +C630 +01C0 +03E0 +0670 +0630 +0630 +0630 +0630 +0630 +0630 +ENDCHAR +STARTCHAR uni2DD1 +ENCODING 11729 +BBX 15 14 0 0 +BITMAP +30C0 +39C0 +C630 +FFF0 +C630 +01C0 +03E0 +0670 +0636 +063E +0636 +0630 +0630 +0630 +ENDCHAR +STARTCHAR uni2DD2 +ENCODING 11730 +BBX 15 15 0 -1 +BITMAP +30C0 +39C0 +C630 +FFF0 +C630 +01C0 +03E0 +0670 +3630 +3E30 +3630 +0630 +0636 +063E +0006 +ENDCHAR +STARTCHAR uni2DD3 +ENCODING 11731 +BBX 12 14 0 0 +BITMAP +30C0 +39C0 +C630 +FFF0 +C630 +01C0 +03E0 +0670 +0630 +0630 +0030 +0030 +0030 +0030 +ENDCHAR +STARTCHAR uni2DD4 +ENCODING 11732 +BBX 15 14 0 0 +BITMAP +30C0 +39C0 +C630 +FFF0 +C630 +01C0 +03E0 +0670 +0630 +0630 +0630 +063E +0632 +063E +ENDCHAR +STARTCHAR uni2DD5 +ENCODING 11733 +BBX 12 14 0 0 +BITMAP +30C0 +39C0 +C630 +FFF0 +C630 +03C0 +0FE0 +1870 +0630 +0630 +0630 +0630 +0630 +0630 +ENDCHAR +STARTCHAR uni2DD6 +ENCODING 11734 +BBX 12 14 0 0 +BITMAP +30C0 +39C0 +C630 +FFF0 +C630 +01C0 +03E0 +0670 +0630 +0630 +0600 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni2DD8 +ENCODING 11736 +BBX 9 12 2 0 +BITMAP +6180 +7380 +3F00 +1E00 +FE00 +C300 +0300 +0300 +0300 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni2DD9 +ENCODING 11737 +BBX 11 12 1 0 +BITMAP +6180 +7380 +3F00 +1E00 +FE00 +C300 +03E0 +0360 +0300 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni2DDA +ENCODING 11738 +BBX 11 13 1 -1 +BITMAP +6180 +7380 +3F00 +1E00 +FE00 +C300 +0300 +0300 +0300 +0300 +0300 +03E0 +0060 +ENDCHAR +STARTCHAR uni2DDB +ENCODING 11739 +BBX 9 13 1 -1 +BITMAP +6180 +7380 +3F00 +1E00 +FE00 +C300 +0300 +0300 +0300 +0700 +0E00 +F800 +C000 +ENDCHAR +STARTCHAR uni2DDC +ENCODING 11740 +BBX 11 12 1 0 +BITMAP +6180 +7380 +3F00 +1E00 +FE00 +C300 +0300 +0300 +0300 +03E0 +0320 +03E0 +ENDCHAR +STARTCHAR uni2DDD +ENCODING 11741 +BBX 8 12 2 0 +BITMAP +C3 +E7 +7E +3C +FC +96 +F6 +06 +06 +06 +06 +06 +ENDCHAR +STARTCHAR uni2DDE +ENCODING 11742 +BBX 9 14 1 0 +BITMAP +6180 +7380 +3F00 +0C00 +0C00 +1E00 +FE00 +C300 +0300 +0300 +0300 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni2DE0 +ENCODING 11744 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -6 8 +BITMAP +10 +60 +80 +E0 +90 +60 +ENDCHAR +STARTCHAR uni2DE1 +ENCODING 11745 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +E0 +90 +E0 +90 +E0 +ENDCHAR +STARTCHAR uni2DE2 +ENCODING 11746 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -6 9 +BITMAP +E0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2DE3 +ENCODING 11747 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -7 8 +BITMAP +38 +28 +28 +48 +7C +84 +ENDCHAR +STARTCHAR uni2DE4 +ENCODING 11748 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +A8 +A8 +70 +A8 +A8 +ENDCHAR +STARTCHAR uni2DE5 +ENCODING 11749 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +60 +90 +20 +90 +60 +ENDCHAR +STARTCHAR uni2DE6 +ENCODING 11750 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +90 +A0 +C0 +A0 +90 +ENDCHAR +STARTCHAR uni2DE7 +ENCODING 11751 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 9 +BITMAP +3C +24 +24 +A4 +44 +ENDCHAR +STARTCHAR uni2DE8 +ENCODING 11752 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +88 +D8 +A8 +88 +88 +ENDCHAR +STARTCHAR uni2DE9 +ENCODING 11753 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +90 +90 +F0 +90 +90 +ENDCHAR +STARTCHAR uni2DEA +ENCODING 11754 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 10 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni2DEB +ENCODING 11755 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +F0 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni2DEC +ENCODING 11756 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +E0 +90 +E0 +80 +80 +ENDCHAR +STARTCHAR uni2DED +ENCODING 11757 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -6 10 +BITMAP +60 +80 +80 +60 +ENDCHAR +STARTCHAR uni2DEE +ENCODING 11758 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2DEF +ENCODING 11759 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni2DF0 +ENCODING 11760 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 -6 8 +BITMAP +90 +90 +90 +90 +F8 +08 +ENDCHAR +STARTCHAR uni2DF1 +ENCODING 11761 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +90 +90 +70 +10 +10 +ENDCHAR +STARTCHAR uni2DF2 +ENCODING 11762 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +A8 +A8 +A8 +A8 +F8 +ENDCHAR +STARTCHAR uni2DF3 +ENCODING 11763 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -7 8 +BITMAP +A8 +A8 +A8 +A8 +FC +04 +ENDCHAR +STARTCHAR uni2DF4 +ENCODING 11764 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +60 +90 +F0 +90 +60 +ENDCHAR +STARTCHAR uni2DF5 +ENCODING 11765 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -7 10 +BITMAP +7E +88 +88 +68 +ENDCHAR +STARTCHAR uni2DF6 +ENCODING 11766 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +60 +10 +70 +90 +70 +ENDCHAR +STARTCHAR uni2DF7 +ENCODING 11767 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 9 +BITMAP +60 +90 +F0 +80 +70 +ENDCHAR +STARTCHAR uni2DF8 +ENCODING 11768 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 -6 8 +BITMAP +20 +70 +20 +70 +88 +88 +ENDCHAR +STARTCHAR uni2DF9 +ENCODING 11769 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -6 8 +BITMAP +10 +A0 +40 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni2DFA +ENCODING 11770 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -7 8 +BITMAP +20 +F8 +20 +38 +24 +38 +ENDCHAR +STARTCHAR uni2DFB +ENCODING 11771 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 9 +BITMAP +98 +A4 +E4 +A4 +98 +ENDCHAR +STARTCHAR uni2DFC +ENCODING 11772 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 9 +BITMAP +98 +84 +FC +A4 +9C +ENDCHAR +STARTCHAR uni2DFD +ENCODING 11773 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 9 +BITMAP +20 +50 +70 +A8 +A8 +ENDCHAR +STARTCHAR uni2DFE +ENCODING 11774 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 -7 8 +BITMAP +F8 +88 +50 +70 +A8 +A8 +ENDCHAR +STARTCHAR uni2DFF +ENCODING 11775 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 8 +BITMAP +BE +A2 +94 +FC +AA +AA +ENDCHAR +STARTCHAR uni2E00 +ENCODING 11776 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 5 +BITMAP +F0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2E01 +ENCODING 11777 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 5 +BITMAP +F0 +80 +90 +80 +80 +80 +ENDCHAR +STARTCHAR uni2E02 +ENCODING 11778 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 4 +BITMAP +10 +20 +40 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2E03 +ENCODING 11779 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 4 +BITMAP +80 +40 +20 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2E04 +ENCODING 11780 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 4 +BITMAP +10 +20 +40 +80 +90 +80 +80 +ENDCHAR +STARTCHAR uni2E05 +ENCODING 11781 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 4 +BITMAP +80 +40 +20 +10 +90 +10 +10 +ENDCHAR +STARTCHAR uni2E06 +ENCODING 11782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 5 +BITMAP +F8 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2E07 +ENCODING 11783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 5 +BITMAP +F8 +20 +28 +20 +20 +20 +ENDCHAR +STARTCHAR uni2E08 +ENCODING 11784 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 3 +BITMAP +38 +44 +40 +24 +10 +88 +48 +30 +ENDCHAR +STARTCHAR uni2E09 +ENCODING 11785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 3 +BITMAP +38 +44 +40 +20 +10 +88 +48 +30 +ENDCHAR +STARTCHAR uni2E0A +ENCODING 11786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 3 +BITMAP +70 +88 +08 +10 +20 +44 +48 +30 +ENDCHAR +STARTCHAR uni2E0B +ENCODING 11787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 6 +BITMAP +F8 +88 +88 +88 +F8 +ENDCHAR +STARTCHAR uni2E0C +ENCODING 11788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 6 +BITMAP +80 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni2E0D +ENCODING 11789 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 6 +BITMAP +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni2E0E +ENCODING 11790 +BBX 13 15 1 -2 +BITMAP +0100 +0200 +0700 +0000 +1FC0 +0200 +0500 +FFF8 +0500 +0200 +1FC0 +0000 +0700 +0200 +0400 +ENDCHAR +STARTCHAR uni2E0F +ENCODING 11791 +BBX 14 1 1 -2 +BITMAP +FFFC +ENDCHAR +STARTCHAR uni2E10 +ENCODING 11792 +BBX 14 4 1 -2 +BITMAP +FFFC +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni2E11 +ENCODING 11793 +BBX 15 4 1 -2 +BITMAP +FFFE +0010 +0008 +0004 +ENDCHAR +STARTCHAR uni2E12 +ENCODING 11794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 3 3 -2 +BITMAP +80 +40 +80 +ENDCHAR +STARTCHAR uni2E13 +ENCODING 11795 +BBX 11 11 2 0 +BITMAP +0020 +0040 +0080 +1100 +0200 +0400 +0800 +1100 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni2E14 +ENCODING 11796 +BBX 11 11 2 0 +BITMAP +0020 +0040 +0080 +0100 +0200 +0400 +8800 +9000 +A000 +4000 +3800 +ENDCHAR +STARTCHAR uni2E15 +ENCODING 11797 +BBX 11 11 2 0 +BITMAP +0380 +0040 +00A0 +0120 +0220 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni2E16 +ENCODING 11798 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +20 +80 +40 +20 +10 +20 +40 +80 +20 +ENDCHAR +STARTCHAR uni2E17 +ENCODING 11799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +0C +30 +C0 +0C +30 +C0 +ENDCHAR +STARTCHAR uni2E18 +ENCODING 11800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +20 +00 +20 +20 +60 +A0 +A4 +A4 +78 +ENDCHAR +STARTCHAR uni2E19 +ENCODING 11801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +0A +2B +AC +AF +B0 +7E +E0 +DC +ENDCHAR +STARTCHAR uni2E1A +ENCODING 11802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 4 +BITMAP +48 +00 +00 +00 +FC +ENDCHAR +STARTCHAR uni2E1B +ENCODING 11803 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 4 +BITMAP +30 +48 +48 +30 +00 +62 +92 +8C +ENDCHAR +STARTCHAR uni2E1C +ENCODING 11804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -2 +BITMAP +80 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni2E1D +ENCODING 11805 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -2 +BITMAP +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni2E1E +ENCODING 11806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +30 +30 +00 +00 +62 +92 +8C +ENDCHAR +STARTCHAR uni2E1F +ENCODING 11807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +62 +92 +8C +00 +00 +18 +18 +ENDCHAR +STARTCHAR uni2E20 +ENCODING 11808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 3 0 +BITMAP +80 +80 +80 +80 +80 +E0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2E21 +ENCODING 11809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 0 +BITMAP +20 +20 +20 +20 +20 +E0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2E22 +ENCODING 11810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 4 5 +BITMAP +E0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2E23 +ENCODING 11811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 1 5 +BITMAP +E0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2E24 +ENCODING 11812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 4 -1 +BITMAP +80 +80 +80 +80 +80 +E0 +ENDCHAR +STARTCHAR uni2E25 +ENCODING 11813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 1 -1 +BITMAP +20 +20 +20 +20 +20 +E0 +ENDCHAR +STARTCHAR uni2E26 +ENCODING 11814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +7C +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni2E27 +ENCODING 11815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +F8 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni2E28 +ENCODING 11816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +24 +48 +48 +90 +90 +90 +90 +90 +90 +48 +48 +24 +ENDCHAR +STARTCHAR uni2E29 +ENCODING 11817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 0 -1 +BITMAP +90 +48 +48 +24 +24 +24 +24 +24 +24 +48 +48 +90 +ENDCHAR +STARTCHAR uni2E2A +ENCODING 11818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +CC +CC +00 +00 +00 +30 +30 +ENDCHAR +STARTCHAR uni2E2B +ENCODING 11819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +30 +30 +00 +00 +00 +CC +CC +ENDCHAR +STARTCHAR uni2E2C +ENCODING 11820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +CC +CC +00 +00 +00 +CC +CC +ENDCHAR +STARTCHAR uni2E2D +ENCODING 11821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +18 +18 +00 +DB +DB +00 +18 +18 +ENDCHAR +STARTCHAR uni2E2E +ENCODING 11822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +40 +20 +20 +00 +20 +20 +ENDCHAR +STARTCHAR uni2E2F +ENCODING 11823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 6 3 8 +BITMAP +40 +80 +80 +40 +40 +80 +ENDCHAR +STARTCHAR uni2E30 +ENCODING 11824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 3 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni2E31 +ENCODING 11825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 3 +BITMAP +60 +F0 +F0 +60 +ENDCHAR +STARTCHAR uni2E32 +ENCODING 11826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 0 +BITMAP +40 +80 +80 +C0 +ENDCHAR +STARTCHAR uni2E33 +ENCODING 11827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni2E34 +ENCODING 11828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 0 +BITMAP +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uni2E35 +ENCODING 11829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 9 3 1 +BITMAP +40 +80 +80 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2E36 +ENCODING 11830 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 1 0 +BITMAP +10 +30 +10 +50 +F0 +50 +10 +30 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2E37 +ENCODING 11831 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 4 0 +BITMAP +80 +C0 +80 +A0 +F0 +A0 +80 +C0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2E38 +ENCODING 11832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +10 +10 +10 +10 +38 +10 +54 +FE +54 +10 +38 +10 +ENDCHAR +STARTCHAR uni2E39 +ENCODING 11833 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +78 +84 +80 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni2E3A +ENCODING 11834 +BBX 12 1 2 4 +BITMAP +FFF0 +ENDCHAR +STARTCHAR uni2E3B +ENCODING 11835 +BBX 15 1 1 4 +BITMAP +FFFE +ENDCHAR +STARTCHAR uni2E3C +ENCODING 11836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 3 0 +BITMAP +A0 +40 +A0 +ENDCHAR +STARTCHAR uni2E3D +ENCODING 11837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 11 4 0 +BITMAP +80 +00 +80 +00 +80 +00 +80 +00 +80 +00 +80 +ENDCHAR +STARTCHAR uni2E3E +ENCODING 11838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 13 3 0 +BITMAP +60 +80 +40 +20 +40 +80 +40 +20 +40 +80 +40 +20 +C0 +ENDCHAR +STARTCHAR uni2E3F +ENCODING 11839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 0 +BITMAP +0A +7F +8A +8A +FF +8A +7F +0A +0A +0A +0A +0A +0A +ENDCHAR +STARTCHAR uni2E40 +ENCODING 11840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 2 +BITMAP +F0 +00 +F0 +ENDCHAR +STARTCHAR uni2E41 +ENCODING 11841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 -2 +BITMAP +C0 +80 +80 +40 +ENDCHAR +STARTCHAR uni2E42 +ENCODING 11842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 -2 +BITMAP +CC +88 +88 +44 +ENDCHAR +STARTCHAR uni2E43 +ENCODING 11843 +BBX 12 3 3 4 +BITMAP +C000 +C000 +FFF0 +ENDCHAR +STARTCHAR uni2E44 +ENCODING 11844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 13 2 -2 +BITMAP +20 +40 +80 +00 +00 +00 +00 +00 +00 +00 +20 +40 +80 +ENDCHAR +STARTCHAR uni2E45 +ENCODING 11845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 3 +BITMAP +60 +90 +90 +ENDCHAR +STARTCHAR uni2E46 +ENCODING 11846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 3 +BITMAP +90 +90 +60 +00 +60 +90 +90 +ENDCHAR +STARTCHAR uni2E47 +ENCODING 11847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 3 +BITMAP +90 +90 +60 +ENDCHAR +STARTCHAR uni2E48 +ENCODING 11848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 3 +BITMAP +A8 +88 +70 +ENDCHAR +STARTCHAR uni2E49 +ENCODING 11849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 9 3 -1 +BITMAP +C0 +40 +40 +80 +00 +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uni2E4A +ENCODING 11850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +08 +30 +78 +78 +30 +40 +80 +80 +ENDCHAR +STARTCHAR uni2E4B +ENCODING 11851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -2 +BITMAP +10 +54 +FE +54 +10 +10 +54 +FE +54 +10 +10 +54 +FE +54 +10 +ENDCHAR +STARTCHAR uni2E4C +ENCODING 11852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 1 0 +BITMAP +C0 +20 +20 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2E4D +ENCODING 11853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +88 +90 +A0 +C0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2E4E +ENCODING 11854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +08 +D0 +E0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2E4F +ENCODING 11855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +C4 +C8 +10 +24 +48 +10 +20 +4C +0C +ENDCHAR +STARTCHAR uni2E50 +ENCODING 11856 +BBX 11 13 2 0 +BITMAP +FF80 +3E00 +1C20 +1C20 +1C60 +1FE0 +1FE0 +1FE0 +1C60 +1C20 +1C20 +3E00 +FF80 +ENDCHAR +STARTCHAR uni2E51 +ENCODING 11857 +BBX 11 13 2 0 +BITMAP +3FE0 +0F80 +8700 +8700 +C700 +FF00 +FF00 +FF00 +C700 +8700 +8700 +0F80 +3FE0 +ENDCHAR +STARTCHAR uni2E52 +ENCODING 11858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +44 +38 +ENDCHAR +STARTCHAR uni2E53 +ENCODING 11859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +01 +02 +04 +00 +30 +30 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2E54 +ENCODING 11860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +02 +02 +3C +40 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni2E55 +ENCODING 11861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +3C +20 +20 +20 +20 +20 +FC +20 +20 +20 +20 +20 +3C +ENDCHAR +STARTCHAR uni2E56 +ENCODING 11862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +F0 +10 +10 +10 +10 +10 +FC +10 +10 +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uni2E57 +ENCODING 11863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +3C +20 +20 +20 +20 +FC +20 +FC +20 +20 +20 +20 +3C +ENDCHAR +STARTCHAR uni2E58 +ENCODING 11864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +F0 +10 +10 +10 +10 +FC +10 +FC +10 +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uni2E59 +ENCODING 11865 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 3 5 +BITMAP +20 +40 +40 +80 +80 +80 +ENDCHAR +STARTCHAR uni2E5A +ENCODING 11866 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 2 5 +BITMAP +80 +40 +40 +20 +20 +20 +ENDCHAR +STARTCHAR uni2E5B +ENCODING 11867 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 3 -1 +BITMAP +80 +80 +80 +40 +40 +20 +ENDCHAR +STARTCHAR uni2E5C +ENCODING 11868 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 2 -1 +BITMAP +20 +20 +20 +40 +40 +80 +ENDCHAR +STARTCHAR uni2E5D +ENCODING 11869 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 3 +BITMAP +0C +30 +C0 +ENDCHAR +STARTCHAR uni2E80 +ENCODING 11904 +BBX 9 8 3 2 +BITMAP +7000 +0C00 +0300 +0080 +E000 +1800 +0600 +0100 +ENDCHAR +STARTCHAR uni2E81 +ENCODING 11905 +BBX 14 15 0 -2 +BITMAP +007C +1F80 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +2000 +2000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni2E82 +ENCODING 11906 +BBX 11 7 2 2 +BITMAP +FFE0 +0020 +0020 +0040 +0040 +0080 +0080 +ENDCHAR +STARTCHAR uni2E83 +ENCODING 11907 +BBX 9 15 3 -2 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8080 +8080 +8080 +7F80 +ENDCHAR +STARTCHAR uni2E84 +ENCODING 11908 +BBX 15 14 0 -2 +BITMAP +FFE0 +0020 +0020 +0020 +0020 +0020 +0020 +0020 +0020 +0010 +0012 +000A +0006 +0002 +ENDCHAR +STARTCHAR uni2E85 +ENCODING 11909 +BBX 6 16 4 -2 +BITMAP +04 +04 +08 +10 +10 +30 +50 +90 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2E86 +ENCODING 11910 +BBX 11 15 1 -2 +BITMAP +1FE0 +1020 +1020 +1020 +1020 +1020 +1020 +1020 +1020 +1020 +2020 +2020 +2020 +40A0 +8040 +ENDCHAR +STARTCHAR uni2E87 +ENCODING 11911 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1010 +1010 +1010 +1010 +1010 +1010 +1010 +1010 +2008 +200A +200A +4006 +8002 +ENDCHAR +STARTCHAR uni2E88 +ENCODING 11912 +BBX 10 7 2 7 +BITMAP +1000 +1000 +1FC0 +2080 +2100 +4000 +8000 +ENDCHAR +STARTCHAR uni2E89 +ENCODING 11913 +BBX 5 16 9 -2 +BITMAP +08 +08 +08 +88 +88 +88 +88 +88 +88 +88 +88 +88 +08 +08 +28 +10 +ENDCHAR +STARTCHAR uni2E8A +ENCODING 11914 +BBX 7 16 5 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +FE +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2E8B +ENCODING 11915 +BBX 12 9 2 -2 +BITMAP +FFC0 +8040 +8040 +8040 +8140 +8080 +8010 +8010 +7FF0 +ENDCHAR +STARTCHAR uni2E8C +ENCODING 11916 +BBX 9 4 3 10 +BITMAP +0800 +8880 +4900 +0800 +ENDCHAR +STARTCHAR uni2E8D +ENCODING 11917 +BBX 11 4 2 10 +BITMAP +0820 +8420 +4240 +2080 +ENDCHAR +STARTCHAR uni2E8E +ENCODING 11918 +BBX 15 13 0 -2 +BITMAP +FFFE +0440 +0440 +0440 +0440 +0440 +0840 +0840 +1042 +1042 +2042 +403E +8000 +ENDCHAR +STARTCHAR uni2E8F +ENCODING 11919 +BBX 14 16 1 -2 +BITMAP +0440 +0420 +0810 +1008 +2004 +C844 +0840 +0840 +0840 +0840 +0840 +0840 +1044 +1044 +2044 +C03C +ENDCHAR +STARTCHAR uni2E90 +ENCODING 11920 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +0100 +0100 +FFFE +0240 +0240 +0240 +0440 +0440 +0840 +0842 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni2E91 +ENCODING 11921 +BBX 14 16 1 -2 +BITMAP +0440 +0420 +0810 +1008 +2004 +CFC4 +0840 +0840 +0840 +0840 +0840 +0840 +1044 +1044 +2044 +C03C +ENDCHAR +STARTCHAR uni2E92 +ENCODING 11922 +BBX 12 13 2 -1 +BITMAP +FFC0 +8040 +8040 +8040 +8040 +FFC0 +8000 +8000 +8000 +8010 +8010 +8010 +7FF0 +ENDCHAR +STARTCHAR uni2E93 +ENCODING 11923 +BBX 12 15 2 -2 +BITMAP +0400 +0400 +0840 +1040 +2080 +4100 +7E00 +0400 +0800 +1080 +2040 +4020 +FFF0 +0010 +0010 +ENDCHAR +STARTCHAR uni2E94 +ENCODING 11924 +BBX 13 14 1 -1 +BITMAP +0800 +0800 +0800 +0FE0 +0840 +1040 +1040 +1040 +1080 +3F80 +0080 +0080 +0080 +FFF8 +ENDCHAR +STARTCHAR uni2E95 +ENCODING 11925 +BBX 11 9 2 1 +BITMAP +FFE0 +0020 +0020 +FFE0 +0020 +0020 +0020 +FFE0 +0020 +ENDCHAR +STARTCHAR uni2E96 +ENCODING 11926 +BBX 7 16 0 -2 +BITMAP +08 +08 +08 +08 +0C +4A +4A +88 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2E97 +ENCODING 11927 +BBX 13 11 1 -2 +BITMAP +0400 +0400 +0440 +0520 +2490 +2448 +4428 +4420 +8400 +1400 +0800 +ENDCHAR +STARTCHAR uni2E98 +ENCODING 11928 +BBX 7 16 3 -2 +BITMAP +08 +08 +08 +FE +08 +08 +08 +0E +38 +C8 +08 +08 +08 +08 +28 +10 +ENDCHAR +STARTCHAR uni2E99 +ENCODING 11929 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0800 +0FFC +1810 +2410 +4420 +8220 +0140 +0080 +0180 +0240 +0420 +0810 +1008 +E006 +ENDCHAR +STARTCHAR uni2E9B +ENCODING 11931 +BBX 14 15 0 -1 +BITMAP +3FF0 +0200 +0200 +4200 +4200 +7FFC +0480 +0480 +0480 +0880 +0880 +1084 +2084 +407C +8000 +ENDCHAR +STARTCHAR uni2E9C +ENCODING 11932 +BBX 11 5 2 9 +BITMAP +FFE0 +8020 +BFA0 +8020 +BFA0 +ENDCHAR +STARTCHAR uni2E9D +ENCODING 11933 +BBX 9 15 3 -2 +BITMAP +FF80 +8080 +8080 +8080 +FF80 +8080 +8080 +8080 +FF80 +8080 +8080 +8080 +8080 +8280 +8100 +ENDCHAR +STARTCHAR uni2E9E +ENCODING 11934 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +01FC +1100 +1100 +1FF0 +2010 +2820 +4420 +8240 +0280 +0100 +0200 +0400 +1800 +E000 +ENDCHAR +STARTCHAR uni2E9F +ENCODING 11935 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1210 +1110 +1110 +FFFE +2010 +2210 +2110 +2110 +3FFC +0010 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni2EA0 +ENCODING 11936 +BBX 13 15 2 -2 +BITMAP +0040 +FFE0 +8020 +8020 +8020 +FFE0 +8000 +8220 +FFF0 +8200 +8100 +8080 +8040 +E038 +C010 +ENDCHAR +STARTCHAR uni2EA1 +ENCODING 11937 +BBX 5 14 0 0 +BITMAP +20 +10 +10 +80 +40 +48 +08 +10 +10 +E0 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni2EA2 +ENCODING 11938 +BBX 14 16 0 -2 +BITMAP +0100 +0100 +0100 +2108 +1110 +0920 +0100 +0140 +0520 +0910 +1108 +E104 +4104 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni2EA3 +ENCODING 11939 +BBX 14 4 0 0 +BITMAP +2488 +2244 +4244 +8004 +ENDCHAR +STARTCHAR uni2EA4 +ENCODING 11940 +BBX 14 7 0 7 +BITMAP +0010 +007C +0780 +F808 +2108 +1890 +0890 +ENDCHAR +STARTCHAR uni2EA5 +ENCODING 11941 +BBX 14 7 1 7 +BITMAP +00F8 +3F20 +2220 +2220 +4210 +4208 +8004 +ENDCHAR +STARTCHAR uni2EA6 +ENCODING 11942 +BBX 6 16 1 -2 +BITMAP +04 +04 +04 +44 +24 +14 +04 +04 +0C +14 +24 +C4 +44 +04 +04 +04 +ENDCHAR +STARTCHAR uni2EA7 +ENCODING 11943 +BBX 15 6 0 8 +BITMAP +0100 +1100 +1FF8 +2100 +0100 +FFFE +ENDCHAR +STARTCHAR uni2EA8 +ENCODING 11944 +BBX 6 15 0 -1 +BITMAP +44 +28 +10 +28 +48 +88 +08 +18 +28 +48 +88 +08 +08 +50 +20 +ENDCHAR +STARTCHAR uni2EA9 +ENCODING 11945 +BBX 7 14 0 0 +BITMAP +FE +10 +10 +10 +10 +10 +FE +10 +10 +10 +10 +16 +38 +C0 +ENDCHAR +STARTCHAR uni2EAA +ENCODING 11946 +BBX 6 13 0 -1 +BITMAP +FC +08 +10 +10 +10 +5C +50 +50 +50 +50 +5C +F0 +40 +ENDCHAR +STARTCHAR uni2EAB +ENCODING 11947 +BBX 11 5 2 9 +BITMAP +FFE0 +9120 +9120 +9120 +FFE0 +ENDCHAR +STARTCHAR uni2EAC +ENCODING 11948 +BBX 7 15 0 -2 +BITMAP +7E +00 +00 +FE +10 +10 +54 +52 +52 +90 +10 +10 +10 +50 +20 +ENDCHAR +STARTCHAR uni2EAD +ENCODING 11949 +BBX 6 16 0 -2 +BITMAP +20 +10 +10 +F8 +08 +10 +10 +38 +54 +94 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2EAE +ENCODING 11950 +BBX 15 7 0 6 +BITMAP +1040 +1040 +1040 +3EFE +2890 +4910 +8A10 +ENDCHAR +STARTCHAR uni2EAF +ENCODING 11951 +BBX 8 15 0 -1 +BITMAP +08 +08 +10 +12 +22 +7C +08 +10 +24 +7E +02 +00 +52 +49 +89 +ENDCHAR +STARTCHAR uni2EB0 +ENCODING 11952 +BBX 6 15 0 -1 +BITMAP +10 +10 +20 +24 +44 +F8 +10 +20 +40 +FC +40 +00 +1C +E0 +40 +ENDCHAR +STARTCHAR uni2EB1 +ENCODING 11953 +BBX 11 8 2 6 +BITMAP +FFE0 +8020 +9120 +8A20 +8420 +8A20 +9120 +8020 +ENDCHAR +STARTCHAR uni2EB2 +ENCODING 11954 +BBX 11 5 2 9 +BITMAP +FFE0 +9120 +9120 +9120 +FFE0 +ENDCHAR +STARTCHAR uni2EB3 +ENCODING 11955 +BBX 13 6 1 7 +BITMAP +7FF8 +4008 +8010 +0880 +1040 +2020 +ENDCHAR +STARTCHAR uni2EB4 +ENCODING 11956 +BBX 15 15 0 -2 +BITMAP +7FFE +4444 +8448 +0440 +0440 +0440 +0440 +0440 +0440 +0840 +0842 +1042 +1042 +2042 +403E +ENDCHAR +STARTCHAR uni2EB5 +ENCODING 11957 +BBX 12 11 2 0 +BITMAP +FFF0 +8910 +8910 +8910 +8910 +8910 +8910 +8910 +8910 +8910 +8010 +ENDCHAR +STARTCHAR uni2EB6 +ENCODING 11958 +BBX 15 12 0 2 +BITMAP +1010 +0820 +3FF8 +0100 +1FF0 +0100 +0200 +FFFE +0400 +0800 +1000 +E000 +ENDCHAR +STARTCHAR uni2EB7 +ENCODING 11959 +BBX 15 7 0 7 +BITMAP +0820 +0440 +7FFC +0100 +1FF0 +0100 +FFFE +ENDCHAR +STARTCHAR uni2EB8 +ENCODING 11960 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +0440 +7C7C +0440 +0440 +0000 +FFFE +0100 +0100 +3FF8 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni2EB9 +ENCODING 11961 +BBX 15 12 0 2 +BITMAP +0200 +0208 +3FC8 +0210 +0220 +FFFE +0080 +0100 +0200 +0C00 +3000 +C000 +ENDCHAR +STARTCHAR uni2EBA +ENCODING 11962 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0108 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni2EBB +ENCODING 11963 +BBX 15 9 0 5 +BITMAP +0100 +0100 +1FF8 +0108 +FFFE +0108 +1FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni2EBC +ENCODING 11964 +BBX 12 16 1 -2 +BITMAP +0FF0 +0810 +0A10 +0910 +0890 +08D0 +0810 +0830 +0850 +0890 +0B10 +1110 +1010 +2010 +4050 +8020 +ENDCHAR +STARTCHAR uni2EBD +ENCODING 11965 +BBX 13 16 1 -2 +BITMAP +0400 +1800 +E0F8 +8008 +8008 +8008 +8008 +8008 +F9F8 +8008 +8008 +8008 +8008 +8008 +F9F8 +8008 +ENDCHAR +STARTCHAR uni2EBE +ENCODING 11966 +BBX 15 5 0 9 +BITMAP +0820 +0820 +FFFE +0820 +0820 +ENDCHAR +STARTCHAR uni2EBF +ENCODING 11967 +BBX 15 5 0 9 +BITMAP +0820 +0820 +FEFE +0820 +0820 +ENDCHAR +STARTCHAR uni2EC0 +ENCODING 11968 +BBX 15 14 0 -1 +BITMAP +0820 +0820 +0820 +0820 +0820 +0820 +F83E +0820 +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uni2EC1 +ENCODING 11969 +BBX 14 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFC +2104 +2160 +2F88 +2108 +20F8 +2000 +23E0 +2220 +2220 +4424 +4824 +901C +ENDCHAR +STARTCHAR uni2EC2 +ENCODING 11970 +BBX 6 16 0 -2 +BITMAP +20 +10 +00 +FC +08 +10 +10 +34 +58 +94 +14 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni2EC3 +ENCODING 11971 +BBX 13 7 1 7 +BITMAP +FFF8 +0880 +0880 +7FF0 +4890 +4890 +7FF0 +ENDCHAR +STARTCHAR uni2EC4 +ENCODING 11972 +BBX 15 14 0 -2 +BITMAP +FFFE +0480 +0480 +0480 +7FFC +4484 +4484 +4484 +4484 +4894 +48F4 +5004 +4004 +7FFC +ENDCHAR +STARTCHAR uni2EC5 +ENCODING 11973 +BBX 15 15 0 -1 +BITMAP +1FF0 +1010 +1010 +1110 +1110 +1110 +1110 +1110 +1290 +1290 +0480 +0480 +0882 +3082 +C07E +ENDCHAR +STARTCHAR uni2EC6 +ENCODING 11974 +BBX 13 16 0 -2 +BITMAP +0800 +0800 +1FE0 +2020 +4040 +BFF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +2108 +4108 +4128 +8010 +ENDCHAR +STARTCHAR uni2EC7 +ENCODING 11975 +BBX 12 16 1 -2 +BITMAP +0800 +0800 +0FE0 +1040 +2080 +7FF0 +A210 +2310 +2490 +2A50 +3310 +2490 +2850 +3010 +2050 +2020 +ENDCHAR +STARTCHAR uni2EC8 +ENCODING 11976 +BBX 6 14 0 0 +BITMAP +20 +10 +10 +00 +00 +F0 +10 +10 +10 +10 +10 +14 +18 +10 +ENDCHAR +STARTCHAR uni2EC9 +ENCODING 11977 +BBX 11 15 2 -1 +BITMAP +7FC0 +4040 +4040 +4040 +4440 +4440 +4440 +4440 +4440 +4840 +0A00 +1100 +2080 +4040 +8020 +ENDCHAR +STARTCHAR uni2ECA +ENCODING 11978 +BBX 8 15 0 -2 +BITMAP +7F +41 +41 +41 +7F +49 +08 +08 +4F +48 +48 +48 +4F +F0 +40 +ENDCHAR +STARTCHAR uni2ECB +ENCODING 11979 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +0200 +7FFC +0400 +0900 +1100 +2100 +3FF8 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni2ECC +ENCODING 11980 +BBX 15 14 0 0 +BITMAP +2000 +1000 +1000 +0000 +0000 +F000 +1000 +1000 +1000 +1000 +1000 +1000 +2800 +47FE +ENDCHAR +STARTCHAR uni2ECD +ENCODING 11981 +BBX 15 16 0 -2 +BITMAP +2000 +1000 +0800 +4000 +2000 +1000 +0000 +F000 +1000 +1000 +1000 +1000 +1000 +2800 +4400 +83FE +ENDCHAR +STARTCHAR uni2ECE +ENCODING 11982 +BBX 15 15 0 -2 +BITMAP +2000 +1000 +0000 +0000 +F800 +0800 +1000 +2000 +7800 +0800 +0800 +1000 +1000 +2800 +C7FE +ENDCHAR +STARTCHAR uni2ECF +ENCODING 11983 +BBX 4 15 10 -2 +BITMAP +F0 +90 +A0 +A0 +C0 +A0 +90 +90 +90 +D0 +A0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2ED0 +ENCODING 11984 +BBX 7 15 0 -1 +BITMAP +10 +10 +1E +20 +20 +7C +90 +10 +FE +10 +10 +12 +14 +18 +10 +ENDCHAR +STARTCHAR uni2ED1 +ENCODING 11985 +BBX 15 15 0 -1 +BITMAP +0FF8 +0800 +0FF0 +0800 +0FF0 +0800 +FFFE +1200 +1110 +10A0 +1040 +1220 +1418 +1806 +1000 +ENDCHAR +STARTCHAR uni2ED2 +ENCODING 11986 +BBX 15 15 0 -1 +BITMAP +0FF8 +0800 +0800 +0FF0 +0800 +0800 +0FF0 +0800 +0800 +FFFE +0400 +0820 +1010 +3FF8 +1008 +ENDCHAR +STARTCHAR uni2ED3 +ENCODING 11987 +BBX 15 16 0 -2 +BITMAP +0800 +0810 +0820 +0840 +0880 +0900 +0800 +FFFE +0A00 +0900 +0880 +0840 +0920 +0A18 +0C06 +0800 +ENDCHAR +STARTCHAR uni2ED4 +ENCODING 11988 +BBX 13 16 1 -2 +BITMAP +4000 +27F8 +2008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni2ED5 +ENCODING 11989 +BBX 10 16 3 -2 +BITMAP +1000 +2000 +FF80 +8080 +8080 +FF80 +8000 +FFC0 +8040 +8040 +FFC0 +8000 +FFC0 +8040 +8040 +FFC0 +ENDCHAR +STARTCHAR uni2ED6 +ENCODING 11990 +BBX 5 16 0 -2 +BITMAP +F8 +88 +90 +90 +A0 +90 +90 +88 +88 +88 +88 +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2ED7 +ENCODING 11991 +BBX 15 8 0 6 +BITMAP +7FFC +0100 +FFFE +9112 +8D62 +0100 +1D70 +610C +ENDCHAR +STARTCHAR uni2ED8 +ENCODING 11992 +BBX 14 16 0 -2 +BITMAP +0200 +0200 +7FF8 +0200 +3FF0 +0200 +FFFC +0000 +1FE0 +1020 +1FE0 +1020 +1FE0 +1020 +1020 +10C0 +ENDCHAR +STARTCHAR uni2ED9 +ENCODING 11993 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0104 +FFFE +0100 +0110 +3FF8 +0100 +0104 +7FFE +0104 +0104 +0104 +0128 +0110 +0100 +ENDCHAR +STARTCHAR uni2EDA +ENCODING 11994 +BBX 13 15 1 -1 +BITMAP +FFF8 +0400 +0800 +3FE0 +2020 +2220 +2220 +2220 +2220 +2220 +2520 +0480 +0840 +3020 +C010 +ENDCHAR +STARTCHAR uni2EDB +ENCODING 11995 +BBX 15 15 0 -1 +BITMAP +3FF0 +2010 +2010 +2850 +2450 +2290 +2290 +2110 +2110 +2290 +2292 +244A +484A +4006 +8002 +ENDCHAR +STARTCHAR uni2EDC +ENCODING 11996 +BBX 15 15 0 -1 +BITMAP +FFC0 +0040 +0044 +0048 +0050 +0060 +0050 +0048 +0044 +0020 +0020 +0012 +000A +0006 +0002 +ENDCHAR +STARTCHAR uni2EDD +ENCODING 11997 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0440 +0A20 +3118 +DFF6 +1010 +1FF0 +1010 +1FF0 +1008 +1190 +1060 +1210 +1408 +1804 +ENDCHAR +STARTCHAR uni2EDE +ENCODING 11998 +BBX 8 16 0 -2 +BITMAP +08 +08 +14 +12 +29 +7E +A2 +3E +22 +3E +20 +3E +20 +20 +3E +20 +ENDCHAR +STARTCHAR uni2EDF +ENCODING 11999 +BBX 8 16 0 -2 +BITMAP +08 +08 +14 +12 +29 +7E +A2 +3E +22 +3E +20 +28 +24 +2A +32 +20 +ENDCHAR +STARTCHAR uni2EE0 +ENCODING 12000 +BBX 7 15 0 -1 +BITMAP +20 +20 +20 +3E +44 +48 +80 +10 +10 +10 +10 +12 +14 +18 +10 +ENDCHAR +STARTCHAR uni2EE1 +ENCODING 12001 +BBX 15 16 0 -2 +BITMAP +0888 +0888 +1110 +2220 +1110 +0888 +FFFE +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni2EE2 +ENCODING 12002 +BBX 14 15 0 -1 +BITMAP +7FE0 +0020 +0020 +1020 +1020 +1020 +1FFC +0004 +0004 +0004 +FFE4 +0004 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni2EE3 +ENCODING 12003 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1F90 +1090 +1090 +7FFE +4002 +9FF4 +1010 +1FF0 +1010 +1FF0 +1010 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni2EE4 +ENCODING 12004 +BBX 15 16 0 -2 +BITMAP +0200 +0400 +3FF8 +2108 +2108 +3FF8 +2208 +2208 +3FF8 +0510 +0920 +0948 +117C +2102 +4102 +80FE +ENDCHAR +STARTCHAR uni2EE5 +ENCODING 12005 +BBX 15 15 0 -1 +BITMAP +0400 +0400 +0FE0 +1020 +2040 +7FF8 +A108 +2108 +3FF8 +2108 +2108 +3FF8 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uni2EE6 +ENCODING 12006 +BBX 13 16 1 -2 +BITMAP +0200 +0400 +3FE0 +2020 +2420 +2220 +22A0 +2040 +2000 +3FF8 +0008 +0008 +FFC8 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni2EE7 +ENCODING 12007 +BBX 13 16 2 -2 +BITMAP +0400 +0400 +07F8 +0400 +0400 +FFE0 +8020 +A0A0 +9120 +8A20 +8420 +8A20 +9120 +A0A0 +FFE0 +8020 +ENDCHAR +STARTCHAR uni2EE8 +ENCODING 12008 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +0800 +1FF0 +2820 +4440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni2EE9 +ENCODING 12009 +BBX 15 16 0 -2 +BITMAP +0440 +3FF8 +0440 +0440 +FFFE +0100 +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +0440 +0820 +1010 +ENDCHAR +STARTCHAR uni2EEA +ENCODING 12010 +BBX 13 16 2 -2 +BITMAP +7FC0 +4040 +4040 +7FC0 +0400 +FFE0 +8420 +8420 +FFE0 +8420 +8420 +FFE0 +8428 +0408 +0408 +03F8 +ENDCHAR +STARTCHAR uni2EEB +ENCODING 12011 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +0820 +0440 +0380 +1C70 +F01E +1010 +1FF0 +1010 +1010 +1FF0 +1010 +2010 +4010 +ENDCHAR +STARTCHAR uni2EEC +ENCODING 12012 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +0820 +0440 +0380 +0C60 +3018 +C826 +0820 +0820 +0820 +0820 +1020 +1020 +2020 +ENDCHAR +STARTCHAR uni2EED +ENCODING 12013 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +11F8 +1100 +1100 +FFFE +0000 +2928 +2548 +2388 +3FF8 +2388 +2548 +2928 +2108 +3FF8 +ENDCHAR +STARTCHAR uni2EEE +ENCODING 12014 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +11F8 +1100 +1100 +1100 +FFFE +0000 +2108 +2108 +2288 +2448 +2828 +2008 +3FF8 +0008 +ENDCHAR +STARTCHAR uni2EEF +ENCODING 12015 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +1010 +0820 +FFFE +0100 +1FF0 +1110 +1FF0 +1110 +1110 +1FF0 +1112 +0102 +00FE +ENDCHAR +STARTCHAR uni2EF0 +ENCODING 12016 +BBX 15 16 0 -2 +BITMAP +0420 +0410 +0410 +0400 +FFFE +0480 +0488 +0488 +0490 +08A0 +08C0 +1082 +1182 +2282 +447E +8000 +ENDCHAR +STARTCHAR uni2EF1 +ENCODING 12017 +BBX 15 16 0 -2 +BITMAP +0400 +3FF8 +2008 +3EF8 +0280 +7A80 +0AFC +FE94 +0AD4 +7AA4 +02A4 +7AD4 +0A94 +FEFC +0A82 +79FE +ENDCHAR +STARTCHAR uni2EF2 +ENCODING 12018 +BBX 15 16 0 -2 +BITMAP +0400 +0FC0 +1080 +3FF0 +D110 +1FF0 +1110 +1FF0 +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0102 +00FE +ENDCHAR +STARTCHAR uni2EF3 +ENCODING 12019 +BBX 15 16 0 -2 +BITMAP +0400 +0400 +0FE0 +1020 +2040 +7FF8 +A108 +2108 +3FF8 +2108 +2108 +3FF8 +2108 +0102 +0102 +00FE +ENDCHAR +STARTCHAR uni2F00 +ENCODING 12032 +BBX 14 2 1 8 +BITMAP +0008 +FFFC +ENDCHAR +STARTCHAR uni2F01 +ENCODING 12033 +BBX 2 15 7 -1 +BITMAP +80 +C0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2F02 +ENCODING 12034 +BBX 5 6 5 6 +BITMAP +80 +40 +20 +10 +08 +08 +ENDCHAR +STARTCHAR uni2F03 +ENCODING 12035 +BBX 5 15 2 -1 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +10 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni2F04 +ENCODING 12036 +BBX 13 13 2 1 +BITMAP +0100 +FF80 +0100 +0200 +0400 +0800 +1000 +2000 +4000 +8010 +8010 +8018 +7FF0 +ENDCHAR +STARTCHAR uni2F05 +ENCODING 12037 +BBX 4 14 6 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +F0 +10 +ENDCHAR +STARTCHAR uni2F06 +ENCODING 12038 +BBX 14 12 1 2 +BITMAP +0020 +3FF0 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0008 +FFFC +ENDCHAR +STARTCHAR uni2F07 +ENCODING 12039 +BBX 14 4 1 8 +BITMAP +0200 +0100 +0108 +FFFC +ENDCHAR +STARTCHAR uni2F08 +ENCODING 12040 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0500 +0880 +1040 +2020 +401C +8008 +ENDCHAR +STARTCHAR uni2F09 +ENCODING 12041 +BBX 15 15 0 -1 +BITMAP +0840 +0C60 +0840 +0840 +0840 +0840 +0840 +0840 +0840 +0840 +1040 +1044 +2044 +4046 +803C +ENDCHAR +STARTCHAR uni2F0A +ENCODING 12042 +BBX 15 14 0 0 +BITMAP +1E00 +0100 +0100 +0100 +0100 +0280 +0280 +0440 +0440 +0820 +1010 +200C +4006 +8002 +ENDCHAR +STARTCHAR uni2F0B +ENCODING 12043 +BBX 15 15 0 -1 +BITMAP +00C0 +0040 +0040 +0640 +0440 +0440 +0420 +0820 +0820 +0810 +1010 +1008 +2004 +4006 +8002 +ENDCHAR +STARTCHAR uni2F0C +ENCODING 12044 +BBX 13 15 2 -1 +BITMAP +8010 +FFF8 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +8090 +8070 +8020 +ENDCHAR +STARTCHAR uni2F0D +ENCODING 12045 +BBX 14 4 1 7 +BITMAP +4004 +7FFC +4008 +8010 +ENDCHAR +STARTCHAR uni2F0E +ENCODING 12046 +BBX 5 14 5 0 +BITMAP +80 +60 +20 +00 +08 +10 +10 +20 +20 +C0 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni2F0F +ENCODING 12047 +BBX 14 15 1 -1 +BITMAP +0040 +1FE0 +1040 +1040 +1040 +1040 +1040 +1040 +1040 +1040 +1040 +1044 +2044 +4044 +803C +ENDCHAR +STARTCHAR uni2F10 +ENCODING 12048 +BBX 13 14 2 0 +BITMAP +8010 +C018 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +FFF0 +8010 +ENDCHAR +STARTCHAR uni2F11 +ENCODING 12049 +BBX 14 15 1 -1 +BITMAP +0008 +7FFC +0208 +0208 +0208 +0208 +0208 +0208 +0408 +0408 +0808 +0808 +1088 +2070 +C020 +ENDCHAR +STARTCHAR uni2F12 +ENCODING 12050 +BBX 13 15 1 -1 +BITMAP +0200 +0200 +0200 +0210 +7FF8 +0210 +0210 +0210 +0210 +0410 +0410 +0810 +1110 +20E0 +C040 +ENDCHAR +STARTCHAR uni2F13 +ENCODING 12051 +BBX 14 15 1 -1 +BITMAP +2000 +2000 +2008 +3FFC +2008 +4008 +8008 +0008 +0008 +0008 +0008 +0008 +0088 +0070 +0020 +ENDCHAR +STARTCHAR uni2F14 +ENCODING 12052 +BBX 15 15 0 -1 +BITMAP +0800 +0C00 +0800 +0810 +0820 +0840 +0980 +0A00 +0C00 +3800 +C800 +0804 +0804 +0806 +07FC +ENDCHAR +STARTCHAR uni2F15 +ENCODING 12053 +BBX 12 14 2 0 +BITMAP +8020 +FFF0 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8020 +FFF0 +8000 +ENDCHAR +STARTCHAR uni2F16 +ENCODING 12054 +BBX 13 13 1 1 +BITMAP +FFF8 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4010 +7FF8 +ENDCHAR +STARTCHAR uni2F17 +ENCODING 12055 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0200 +0200 +0200 +0208 +FFFC +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni2F18 +ENCODING 12056 +BBX 7 15 6 -1 +BITMAP +80 +80 +80 +80 +80 +E0 +90 +8C +86 +82 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2F19 +ENCODING 12057 +BBX 7 15 5 -1 +BITMAP +84 +FE +84 +84 +84 +84 +84 +84 +84 +9C +88 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni2F1A +ENCODING 12058 +BBX 15 15 0 -1 +BITMAP +2004 +3FFE +2000 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni2F1B +ENCODING 12059 +BBX 14 13 0 1 +BITMAP +0180 +0100 +0100 +0200 +0200 +0400 +0400 +0820 +0810 +1008 +11FC +FE04 +4004 +ENDCHAR +STARTCHAR uni2F1C +ENCODING 12060 +BBX 14 14 1 0 +BITMAP +0020 +7FF0 +1020 +1020 +0840 +0840 +0480 +0480 +0300 +0300 +0480 +0840 +303C +C008 +ENDCHAR +STARTCHAR uni2F1D +ENCODING 12061 +BBX 11 13 3 1 +BITMAP +8040 +FFE0 +8040 +8040 +8040 +8040 +8040 +8040 +8040 +8040 +8040 +FFC0 +8040 +ENDCHAR +STARTCHAR uni2F1E +ENCODING 12062 +BBX 13 14 2 0 +BITMAP +8010 +FFF8 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +FFF0 +8010 +ENDCHAR +STARTCHAR uni2F1F +ENCODING 12063 +BBX 14 15 1 -1 +BITMAP +0200 +0300 +0200 +0200 +0200 +0210 +7FF8 +0200 +0200 +0200 +0200 +0200 +0200 +0208 +FFFC +ENDCHAR +STARTCHAR uni2F20 +ENCODING 12064 +BBX 14 15 1 -1 +BITMAP +0200 +0300 +0200 +0200 +0200 +0208 +FFFC +0200 +0200 +0200 +0200 +0200 +0200 +0210 +7FF8 +ENDCHAR +STARTCHAR uni2F21 +ENCODING 12065 +BBX 14 9 1 5 +BITMAP +0800 +0820 +0FF0 +1820 +2440 +4280 +0300 +1CE0 +E01C +ENDCHAR +STARTCHAR uni2F22 +ENCODING 12066 +BBX 15 15 0 -1 +BITMAP +0200 +0200 +1210 +0BF8 +0410 +0410 +0A20 +0A20 +1140 +2140 +4080 +0140 +0620 +1818 +E006 +ENDCHAR +STARTCHAR uni2F23 +ENCODING 12067 +BBX 13 15 1 -1 +BITMAP +0400 +0400 +0410 +07F8 +0810 +0810 +1820 +2420 +4240 +8240 +0080 +0100 +0200 +0C00 +7000 +ENDCHAR +STARTCHAR uni2F24 +ENCODING 12068 +BBX 14 15 1 -1 +BITMAP +0200 +0300 +0200 +0200 +0208 +FFFC +0200 +0200 +0200 +0500 +0880 +1040 +2020 +401C +8008 +ENDCHAR +STARTCHAR uni2F25 +ENCODING 12069 +BBX 14 15 1 -1 +BITMAP +0400 +0600 +0400 +0400 +0408 +FFFC +0840 +0840 +1040 +1040 +2080 +1D00 +0300 +0CE0 +F01C +ENDCHAR +STARTCHAR uni2F26 +ENCODING 12070 +BBX 14 15 1 -1 +BITMAP +0010 +7FF8 +0020 +0040 +0180 +0100 +0108 +FFFC +0100 +0100 +0100 +0100 +0900 +0700 +0200 +ENDCHAR +STARTCHAR uni2F27 +ENCODING 12071 +BBX 14 6 1 7 +BITMAP +0200 +0100 +4108 +7FFC +4008 +8010 +ENDCHAR +STARTCHAR uni2F28 +ENCODING 12072 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +0040 +0048 +FFFC +0040 +0040 +1040 +0840 +0840 +0840 +0040 +0240 +01C0 +0080 +ENDCHAR +STARTCHAR uni2F29 +ENCODING 12073 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +0100 +0100 +0100 +1920 +1110 +2108 +210C +4104 +8104 +0100 +0900 +0700 +0200 +ENDCHAR +STARTCHAR uni2F2A +ENCODING 12074 +BBX 15 15 0 -1 +BITMAP +0200 +0200 +0200 +0208 +FFFC +0200 +0200 +0280 +0280 +0480 +0484 +0884 +1084 +2086 +C07C +ENDCHAR +STARTCHAR uni2F2B +ENCODING 12075 +BBX 14 15 0 -1 +BITMAP +1008 +1FFC +1008 +1008 +1008 +1FF8 +1008 +1000 +1000 +1000 +1000 +2000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni2F2C +ENCODING 12076 +BBX 13 15 1 -1 +BITMAP +0200 +0200 +0200 +4208 +4208 +4208 +4208 +4208 +7FF8 +4208 +0200 +0200 +0400 +1800 +E000 +ENDCHAR +STARTCHAR uni2F2D +ENCODING 12077 +BBX 13 15 1 -1 +BITMAP +0200 +0200 +0200 +0200 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +FFF8 +8008 +ENDCHAR +STARTCHAR uni2F2E +ENCODING 12078 +BBX 13 15 1 -1 +BITMAP +0888 +0888 +1110 +1110 +2220 +2220 +4440 +8880 +4440 +2220 +1110 +1110 +0888 +0888 +0888 +ENDCHAR +STARTCHAR uni2F2F +ENCODING 12079 +BBX 14 13 1 1 +BITMAP +0010 +7FF8 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0208 +FFFC +ENDCHAR +STARTCHAR uni2F30 +ENCODING 12080 +BBX 14 15 1 -1 +BITMAP +0020 +FFF0 +0020 +0020 +0020 +0020 +7FE0 +4020 +4000 +4000 +4000 +4008 +4008 +400C +3FF8 +ENDCHAR +STARTCHAR uni2F31 +ENCODING 12081 +BBX 12 15 3 -1 +BITMAP +0400 +0400 +0400 +8420 +FFF0 +8420 +8420 +8420 +8420 +8420 +8420 +85E0 +8440 +0400 +0400 +ENDCHAR +STARTCHAR uni2F32 +ENCODING 12082 +BBX 14 15 1 -1 +BITMAP +0010 +7FF8 +0200 +0200 +0200 +0200 +0208 +FFFC +0200 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni2F33 +ENCODING 12083 +BBX 13 14 1 0 +BITMAP +0600 +0400 +0800 +0860 +1040 +2080 +FF00 +4200 +0400 +0840 +1020 +27D0 +F818 +4008 +ENDCHAR +STARTCHAR uni2F34 +ENCODING 12084 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +0084 +1FFE +1000 +1000 +1000 +1000 +1000 +1000 +1000 +2000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni2F35 +ENCODING 12085 +BBX 15 15 0 -1 +BITMAP +0800 +7C00 +0800 +0800 +1000 +2400 +3E00 +0400 +8400 +4400 +2800 +1000 +2800 +C406 +83FC +ENDCHAR +STARTCHAR uni2F36 +ENCODING 12086 +BBX 14 15 1 -1 +BITMAP +0820 +0820 +0820 +0820 +0820 +0820 +FFFC +0820 +0820 +0820 +0820 +1020 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni2F37 +ENCODING 12087 +BBX 14 15 1 -1 +BITMAP +0240 +0230 +0210 +0200 +023C +03C0 +FE00 +6100 +0100 +0100 +0080 +0084 +0044 +0024 +001C +ENDCHAR +STARTCHAR uni2F38 +ENCODING 12088 +BBX 12 15 2 -1 +BITMAP +0040 +FFE0 +0040 +0040 +0040 +7FC0 +4000 +4020 +FFF0 +0020 +0020 +0020 +0420 +03C0 +0080 +ENDCHAR +STARTCHAR uni2F39 +ENCODING 12089 +BBX 12 15 2 -1 +BITMAP +0020 +FFF0 +0020 +0020 +0020 +0020 +0020 +7FE0 +0020 +0020 +0020 +0020 +0020 +FFE0 +0020 +ENDCHAR +STARTCHAR uni2F3A +ENCODING 12090 +BBX 6 15 5 -1 +BITMAP +18 +10 +20 +40 +80 +18 +10 +20 +40 +8C +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni2F3B +ENCODING 12091 +BBX 7 15 3 -1 +BITMAP +06 +04 +08 +10 +26 +44 +08 +18 +28 +48 +88 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni2F3C +ENCODING 12092 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +00C0 +0040 +0400 +0400 +2408 +2404 +2406 +2402 +4400 +8410 +0410 +0418 +03F0 +ENDCHAR +STARTCHAR uni2F3D +ENCODING 12093 +BBX 14 15 1 -1 +BITMAP +0400 +0480 +0440 +0400 +0438 +05C0 +FE00 +0430 +0420 +0440 +0280 +0304 +0488 +1848 +E03C +ENDCHAR +STARTCHAR uni2F3E +ENCODING 12094 +BBX 14 15 0 -1 +BITMAP +0010 +1038 +1FC0 +1008 +1FFC +1008 +1008 +1008 +1FF8 +1008 +1000 +2000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni2F3F +ENCODING 12095 +BBX 14 15 1 -1 +BITMAP +0020 +00F0 +FF00 +0200 +0220 +7FF0 +0200 +0208 +FFFC +0200 +0200 +0200 +1200 +0E00 +0400 +ENDCHAR +STARTCHAR uni2F40 +ENCODING 12096 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +0108 +FFFC +0100 +0120 +3FF0 +0820 +0820 +0440 +0280 +0100 +0280 +0C60 +701C +ENDCHAR +STARTCHAR uni2F41 +ENCODING 12097 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0208 +03FC +0200 +0220 +7FF0 +1020 +0840 +0840 +0480 +0300 +0300 +1CE0 +E01C +ENDCHAR +STARTCHAR uni2F42 +ENCODING 12098 +BBX 14 15 1 -1 +BITMAP +0200 +0100 +0108 +FFFC +1040 +1040 +1040 +0880 +0880 +0480 +0500 +0300 +0CC0 +3030 +C00C +ENDCHAR +STARTCHAR uni2F43 +ENCODING 12099 +BBX 14 15 1 -1 +BITMAP +0040 +1040 +0840 +0440 +0440 +1040 +0840 +0440 +0448 +007C +07C0 +F840 +4040 +0040 +0040 +ENDCHAR +STARTCHAR uni2F44 +ENCODING 12100 +BBX 15 15 0 -1 +BITMAP +0020 +1070 +1F80 +1000 +1000 +1004 +1FFE +1040 +1040 +1040 +1040 +2040 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni2F45 +ENCODING 12101 +BBX 14 15 1 -1 +BITMAP +0200 +0100 +0108 +FFFC +0400 +0400 +0410 +07F8 +0410 +0410 +0410 +0810 +1110 +20E0 +C040 +ENDCHAR +STARTCHAR uni2F46 +ENCODING 12102 +BBX 14 15 1 -1 +BITMAP +0010 +3FF8 +0200 +0200 +0200 +0208 +FFFC +0480 +0480 +0480 +0480 +0884 +1084 +2084 +C07C +ENDCHAR +STARTCHAR uni2F47 +ENCODING 12103 +BBX 10 15 3 -1 +BITMAP +8080 +FFC0 +8080 +8080 +8080 +8080 +8080 +FF80 +8080 +8080 +8080 +8080 +8080 +FF80 +8080 +ENDCHAR +STARTCHAR uni2F48 +ENCODING 12104 +BBX 12 13 2 1 +BITMAP +8020 +FFF0 +8020 +8020 +8020 +8020 +FFE0 +8020 +8020 +8020 +8020 +FFE0 +8020 +ENDCHAR +STARTCHAR uni2F49 +ENCODING 12105 +BBX 12 15 1 -1 +BITMAP +1020 +1FF0 +1020 +1020 +1020 +1FE0 +1020 +1020 +1020 +1FE0 +1020 +1020 +2120 +40E0 +8040 +ENDCHAR +STARTCHAR uni2F4A +ENCODING 12106 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +0100 +0108 +FFFC +0100 +0500 +0540 +0940 +0920 +1120 +1110 +210C +C108 +0100 +ENDCHAR +STARTCHAR uni2F4B +ENCODING 12107 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +1008 +1FFC +2010 +4220 +8200 +0200 +0200 +0200 +0300 +0480 +0840 +3030 +C00C +ENDCHAR +STARTCHAR uni2F4C +ENCODING 12108 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +0100 +0100 +0100 +1110 +11F8 +1100 +1100 +1100 +1100 +1100 +1100 +1108 +FFFC +ENDCHAR +STARTCHAR uni2F4D +ENCODING 12109 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0400 +0400 +0420 +07F0 +0820 +1820 +2440 +4240 +8280 +0100 +0200 +0C00 +F000 +ENDCHAR +STARTCHAR uni2F4E +ENCODING 12110 +BBX 13 15 1 -1 +BITMAP +0840 +0FE0 +0840 +0840 +0840 +1040 +2038 +4000 +3FF0 +1020 +0840 +0480 +0300 +1CE0 +E018 +ENDCHAR +STARTCHAR uni2F4F +ENCODING 12111 +BBX 14 15 1 -1 +BITMAP +0010 +3FF8 +2110 +2110 +2110 +2110 +FFFC +2210 +2210 +4210 +4410 +FFFC +0820 +13E0 +6040 +ENDCHAR +STARTCHAR uni2F50 +ENCODING 12112 +BBX 13 15 2 -1 +BITMAP +0100 +4100 +4100 +4100 +4130 +4920 +7D40 +4180 +4100 +4100 +4100 +4110 +4D10 +F118 +40F0 +ENDCHAR +STARTCHAR uni2F51 +ENCODING 12113 +BBX 14 15 1 -1 +BITMAP +0020 +0070 +7F80 +0200 +0200 +0238 +7FC0 +0200 +021C +03E0 +FE00 +0204 +0204 +0204 +01FC +ENDCHAR +STARTCHAR uni2F52 +ENCODING 12114 +BBX 14 15 1 -1 +BITMAP +0020 +2070 +3F80 +2100 +2100 +2110 +3FF8 +2100 +2100 +2100 +2100 +2484 +2844 +F024 +401C +ENDCHAR +STARTCHAR uni2F53 +ENCODING 12115 +BBX 15 15 0 -1 +BITMAP +0800 +0808 +0FFC +1000 +2FF0 +4000 +BFF0 +0010 +0010 +0010 +0010 +0012 +000A +0006 +0002 +ENDCHAR +STARTCHAR uni2F54 +ENCODING 12116 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0100 +0118 +0110 +7D20 +0540 +0580 +0940 +0920 +1110 +210C +4906 +8702 +0200 +ENDCHAR +STARTCHAR uni2F55 +ENCODING 12117 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +0100 +0100 +1118 +1110 +1120 +2140 +4180 +0100 +0300 +0480 +0840 +3030 +C00C +ENDCHAR +STARTCHAR uni2F56 +ENCODING 12118 +BBX 15 15 0 -1 +BITMAP +0010 +1038 +1FE0 +1120 +1120 +1120 +1120 +1120 +1110 +1110 +1110 +2108 +2108 +4106 +8102 +ENDCHAR +STARTCHAR uni2F57 +ENCODING 12119 +BBX 14 15 1 -1 +BITMAP +0880 +0840 +1020 +2018 +4008 +8040 +0840 +0880 +0480 +0500 +0300 +0300 +0480 +1860 +601C +ENDCHAR +STARTCHAR uni2F58 +ENCODING 12120 +BBX 13 15 2 -1 +BITMAP +0060 +6040 +1880 +0700 +08C0 +3030 +C090 +1080 +1100 +0900 +0A00 +0600 +0B00 +30C0 +C038 +ENDCHAR +STARTCHAR uni2F59 +ENCODING 12121 +BBX 10 15 2 -1 +BITMAP +0040 +1040 +1040 +1040 +1040 +1FC0 +0040 +0040 +FFC0 +1040 +1040 +1040 +1040 +2040 +C040 +ENDCHAR +STARTCHAR uni2F5A +ENCODING 12122 +BBX 14 15 1 -1 +BITMAP +2080 +2080 +2080 +2080 +2088 +3FFC +2000 +2040 +3FE0 +2040 +2040 +2040 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni2F5B +ENCODING 12123 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0080 +1080 +1080 +2088 +7FFC +0280 +0480 +0880 +1080 +2080 +4480 +8380 +0100 +ENDCHAR +STARTCHAR uni2F5C +ENCODING 12124 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +2100 +2110 +3FF8 +2100 +4100 +8100 +0108 +FFFC +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni2F5D +ENCODING 12125 +BBX 14 15 1 -1 +BITMAP +0200 +0340 +0220 +0220 +0208 +FFFC +0200 +0200 +0200 +0500 +0880 +1040 +2020 +401C +8008 +ENDCHAR +STARTCHAR uni2F5E +ENCODING 12126 +BBX 14 15 1 -1 +BITMAP +0200 +0100 +0108 +FFFC +0200 +0200 +0460 +0BC0 +3C80 +1100 +0200 +0420 +0BF0 +3C18 +1008 +ENDCHAR +STARTCHAR uni2F5F +ENCODING 12127 +BBX 14 14 1 0 +BITMAP +0010 +7FF8 +0200 +0200 +0200 +0220 +3FF0 +0200 +0240 +0220 +0220 +0200 +0208 +FFFC +ENDCHAR +STARTCHAR uni2F60 +ENCODING 12128 +BBX 15 15 0 -1 +BITMAP +0008 +103C +1FE0 +1120 +1120 +1120 +1120 +1120 +1110 +1110 +1150 +1148 +2148 +43A6 +8122 +ENDCHAR +STARTCHAR uni2F61 +ENCODING 12129 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0800 +0800 +0840 +0FE0 +1040 +1440 +1240 +1240 +2040 +2044 +2644 +F844 +403C +ENDCHAR +STARTCHAR uni2F62 +ENCODING 12130 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +1028 +FFFC +1020 +1020 +1020 +1020 +1FE0 +1020 +1020 +1020 +1020 +1FE0 +1020 +ENDCHAR +STARTCHAR uni2F63 +ENCODING 12131 +BBX 14 15 1 -1 +BITMAP +0100 +2100 +2100 +2110 +3FF8 +2100 +4100 +8100 +0120 +3FF0 +0100 +0100 +0100 +0108 +FFFC +ENDCHAR +STARTCHAR uni2F64 +ENCODING 12132 +BBX 15 15 0 -1 +BITMAP +1004 +1FFE +1084 +1084 +1084 +1FFC +1084 +1084 +1084 +1FFC +1084 +2084 +20A4 +409C +8088 +ENDCHAR +STARTCHAR uni2F65 +ENCODING 12133 +BBX 13 14 2 0 +BITMAP +8010 +FFF8 +8210 +8210 +8210 +8210 +FFF0 +8210 +8210 +8210 +8210 +8210 +FFF0 +8010 +ENDCHAR +STARTCHAR uni2F66 +ENCODING 12134 +BBX 15 15 0 -1 +BITMAP +0004 +7FFE +0084 +0088 +0080 +1080 +1088 +10FC +1080 +1080 +1880 +1480 +2280 +C180 +80FE +ENDCHAR +STARTCHAR uni2F67 +ENCODING 12135 +BBX 14 15 1 -1 +BITMAP +0100 +1088 +1FFC +9000 +5000 +5000 +1000 +3000 +D000 +9000 +1000 +2000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni2F68 +ENCODING 12136 +BBX 14 9 1 5 +BITMAP +0010 +FE20 +0544 +4488 +2850 +1020 +2010 +4008 +8004 +ENDCHAR +STARTCHAR uni2F69 +ENCODING 12137 +BBX 11 15 3 -1 +BITMAP +0800 +0800 +9040 +FFE0 +8040 +8040 +8040 +8040 +FFC0 +8040 +8040 +8040 +8040 +FFC0 +8040 +ENDCHAR +STARTCHAR uni2F6A +ENCODING 12138 +BBX 15 15 0 -1 +BITMAP +0080 +0080 +1084 +1FFE +1084 +1088 +1080 +1FF8 +1210 +1210 +1120 +20C0 +20C0 +4330 +9C0E +ENDCHAR +STARTCHAR uni2F6B +ENCODING 12139 +BBX 14 13 1 1 +BITMAP +2010 +3FF8 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +FFFC +ENDCHAR +STARTCHAR uni2F6C +ENCODING 12140 +BBX 10 15 3 -1 +BITMAP +8080 +FFC0 +8080 +8080 +8080 +FF80 +8080 +8080 +8080 +FF80 +8080 +8080 +8080 +FF80 +8080 +ENDCHAR +STARTCHAR uni2F6D +ENCODING 12141 +BBX 14 15 1 -1 +BITMAP +0020 +3FF0 +0040 +0680 +0100 +0108 +FFFC +0310 +0520 +0900 +1100 +2100 +4900 +8700 +0200 +ENDCHAR +STARTCHAR uni2F6E +ENCODING 12142 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +1010 +1FF8 +2100 +4100 +0100 +0108 +FFFC +0100 +0280 +0440 +0820 +301C +C008 +ENDCHAR +STARTCHAR uni2F6F +ENCODING 12143 +BBX 14 14 1 0 +BITMAP +0008 +FFFC +0200 +0200 +0400 +0810 +1FF8 +2810 +4810 +8810 +0810 +0810 +0FF0 +0810 +ENDCHAR +STARTCHAR uni2F70 +ENCODING 12144 +BBX 14 15 1 -1 +BITMAP +0020 +3FF0 +0000 +0000 +0000 +0008 +FFFC +0100 +1940 +1120 +2110 +4108 +8908 +0700 +0200 +ENDCHAR +STARTCHAR uni2F71 +ENCODING 12145 +BBX 13 15 2 -1 +BITMAP +0400 +0400 +8410 +FFF8 +8410 +8810 +8910 +8890 +93D0 +FC50 +A050 +8010 +8010 +80F0 +8020 +ENDCHAR +STARTCHAR uni2F72 +ENCODING 12146 +BBX 14 15 1 -1 +BITMAP +0010 +0078 +3F80 +0100 +0100 +0108 +FFFC +0100 +0380 +0540 +0920 +1110 +210C +C104 +0100 +ENDCHAR +STARTCHAR uni2F73 +ENCODING 12147 +BBX 14 15 1 -1 +BITMAP +0200 +0100 +4104 +7FFC +4008 +8010 +0880 +0880 +0880 +0840 +1040 +1020 +2010 +4018 +800C +ENDCHAR +STARTCHAR uni2F74 +ENCODING 12148 +BBX 14 14 1 0 +BITMAP +0400 +0200 +0100 +0110 +7FF8 +0000 +1020 +1020 +0840 +0840 +0480 +0480 +0108 +FFFC +ENDCHAR +STARTCHAR uni2F75 +ENCODING 12149 +BBX 15 15 0 -1 +BITMAP +1000 +1060 +1040 +1244 +1F7E +2890 +4910 +8A10 +0810 +0810 +0810 +0810 +0890 +0870 +0820 +ENDCHAR +STARTCHAR uni2F76 +ENCODING 12150 +BBX 14 15 1 -1 +BITMAP +0100 +2118 +1110 +1920 +0940 +0188 +FFFC +0500 +0580 +0940 +1120 +2110 +410C +8104 +0100 +ENDCHAR +STARTCHAR uni2F77 +ENCODING 12151 +BBX 13 15 2 -1 +BITMAP +0600 +0400 +08C0 +1080 +7F00 +2200 +0480 +0840 +FFF0 +4210 +0200 +3240 +2220 +4218 +8208 +ENDCHAR +STARTCHAR uni2F78 +ENCODING 12152 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +1010 +1FF8 +2100 +4100 +0108 +FFFC +0100 +2108 +2108 +2108 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni2F79 +ENCODING 12153 +BBX 13 15 2 -1 +BITMAP +8010 +FFF8 +8010 +8450 +8450 +AA50 +9190 +8890 +9490 +A550 +C250 +8410 +8090 +8070 +8020 +ENDCHAR +STARTCHAR uni2F7A +ENCODING 12154 +BBX 14 15 1 -1 +BITMAP +1060 +0840 +0488 +FFFC +0200 +0200 +0220 +3FF0 +0200 +0208 +FFFC +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni2F7B +ENCODING 12155 +BBX 14 15 1 -1 +BITMAP +0408 +FFFC +0408 +4488 +2448 +2448 +0408 +0C18 +3468 +C588 +0408 +0408 +2448 +1C38 +0810 +ENDCHAR +STARTCHAR uni2F7C +ENCODING 12156 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0218 +7FD0 +0220 +0248 +FFFC +0100 +0200 +0C60 +1980 +2E08 +C808 +080C +07F8 +ENDCHAR +STARTCHAR uni2F7D +ENCODING 12157 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0100 +0100 +4208 +7FFC +4488 +4488 +4488 +4488 +4488 +4488 +4488 +44B8 +4010 +ENDCHAR +STARTCHAR uni2F7E +ENCODING 12158 +BBX 15 15 0 -1 +BITMAP +0100 +0104 +FFFE +0100 +0110 +3FF8 +0100 +0104 +FFFE +0540 +0520 +0910 +110C +2106 +C102 +ENDCHAR +STARTCHAR uni2F7F +ENCODING 12159 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +1040 +1040 +1FC0 +1040 +1040 +1040 +1FC0 +1048 +107C +1FC0 +F040 +0040 +0040 +ENDCHAR +STARTCHAR uni2F80 +ENCODING 12160 +BBX 14 15 1 -1 +BITMAP +0200 +0210 +3FF8 +0210 +FFFC +0210 +3FF0 +0210 +0200 +7FF0 +0208 +FFFC +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni2F81 +ENCODING 12161 +BBX 13 15 2 -1 +BITMAP +0400 +0400 +8410 +FFF8 +8410 +8610 +8910 +90D0 +A450 +8410 +8610 +8910 +9090 +A070 +8020 +ENDCHAR +STARTCHAR uni2F82 +ENCODING 12162 +BBX 13 15 2 -1 +BITMAP +8020 +FFF0 +8400 +8400 +8420 +FFF0 +8020 +8020 +8020 +FFE0 +8420 +8400 +8410 +FFF8 +8000 +ENDCHAR +STARTCHAR uni2F83 +ENCODING 12163 +BBX 11 15 3 -1 +BITMAP +0C00 +0800 +1040 +FFE0 +8040 +8040 +FFC0 +8040 +8040 +8040 +FFC0 +8040 +8040 +FFC0 +8040 +ENDCHAR +STARTCHAR uni2F84 +ENCODING 12164 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0200 +0400 +0840 +1020 +FFF0 +4208 +0200 +0210 +7FF8 +0200 +0200 +0208 +FFFC +ENDCHAR +STARTCHAR uni2F85 +ENCODING 12165 +BBX 13 15 2 -1 +BITMAP +0800 +9C10 +E1F8 +8010 +8010 +8010 +8010 +F9F0 +8010 +8010 +8010 +8010 +8010 +FFF0 +8010 +ENDCHAR +STARTCHAR uni2F86 +ENCODING 12166 +BBX 14 15 1 -1 +BITMAP +0020 +00F0 +7F00 +0100 +0108 +FFFC +0100 +0100 +1110 +1FF8 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni2F87 +ENCODING 12167 +BBX 14 15 1 -1 +BITMAP +2020 +2020 +2020 +2428 +3EFC +2420 +44A0 +A4A0 +1520 +15FC +0820 +1020 +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni2F88 +ENCODING 12168 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +1420 +1FF0 +1220 +1120 +1120 +1028 +FFFC +1220 +1120 +1120 +1020 +21E0 +4040 +ENDCHAR +STARTCHAR uni2F89 +ENCODING 12169 +BBX 14 15 1 -1 +BITMAP +2020 +3FF0 +2020 +2020 +3FE0 +2020 +2020 +3FE0 +2400 +2218 +2260 +2180 +2CC0 +F030 +400C +ENDCHAR +STARTCHAR uni2F8A +ENCODING 12170 +BBX 14 15 1 -1 +BITMAP +0800 +0840 +0FE0 +1080 +2110 +7FF8 +A210 +2210 +2210 +3FF0 +2010 +2004 +2004 +2004 +1FFC +ENDCHAR +STARTCHAR uni2F8B +ENCODING 12171 +BBX 13 15 1 -1 +BITMAP +1020 +1020 +1020 +54A8 +54A8 +54A8 +54A8 +54A8 +54A8 +7CF8 +54A8 +1020 +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni2F8C +ENCODING 12172 +BBX 15 15 0 -1 +BITMAP +0100 +01FC +0100 +0100 +3FFE +2002 +2104 +2110 +2138 +21C0 +2F00 +2102 +2102 +4102 +80FE +ENDCHAR +STARTCHAR uni2F8D +ENCODING 12173 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +0100 +2110 +3FF8 +2110 +2110 +2110 +3FF0 +2110 +0100 +0110 +0108 +FFFC +6004 +ENDCHAR +STARTCHAR uni2F8E +ENCODING 12174 +BBX 14 14 1 0 +BITMAP +0180 +0100 +0200 +2410 +3FF8 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +FFFC +ENDCHAR +STARTCHAR uni2F8F +ENCODING 12175 +BBX 15 15 0 -1 +BITMAP +1808 +11FC +2000 +4000 +0C04 +0BFE +1010 +3010 +5010 +9010 +1010 +1010 +1090 +1070 +1020 +ENDCHAR +STARTCHAR uni2F90 +ENCODING 12176 +BBX 14 15 1 -1 +BITMAP +0200 +0100 +0108 +FFFC +0300 +0518 +0910 +18A0 +28C0 +4880 +8840 +0920 +0A10 +1C0C +0804 +ENDCHAR +STARTCHAR uni2F91 +ENCODING 12177 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0440 +0440 +4448 +7FFC +4448 +4448 +4448 +4448 +47C8 +4448 +4008 +4008 +4008 +ENDCHAR +STARTCHAR uni2F92 +ENCODING 12178 +BBX 15 15 0 -1 +BITMAP +0020 +1FF0 +1020 +1020 +1FE0 +1020 +1020 +1FE0 +1020 +1020 +1FE0 +14A4 +0884 +3086 +C07C +ENDCHAR +STARTCHAR uni2F93 +ENCODING 12179 +BBX 14 15 1 -1 +BITMAP +0840 +0FE0 +0840 +1088 +3FFC +5108 +9108 +1FF8 +1108 +1108 +1FF8 +2108 +2108 +4138 +8110 +ENDCHAR +STARTCHAR uni2F94 +ENCODING 12180 +BBX 15 15 0 -1 +BITMAP +0200 +0104 +FFFE +0000 +0000 +1FF0 +0000 +1FF0 +0000 +1010 +1FF8 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni2F95 +ENCODING 12181 +BBX 14 15 1 -1 +BITMAP +0880 +0840 +1020 +2018 +4308 +0480 +0840 +3030 +C00C +1FE0 +1020 +1020 +1020 +1FE0 +1020 +ENDCHAR +STARTCHAR uni2F96 +ENCODING 12182 +BBX 14 15 1 -1 +BITMAP +0010 +7FF8 +0000 +1020 +1FF0 +1020 +1020 +1020 +1FE0 +1020 +08C0 +0880 +0480 +0508 +FFFC +ENDCHAR +STARTCHAR uni2F97 +ENCODING 12183 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0200 +0400 +0818 +3410 +C620 +0940 +3380 +C540 +0920 +311C +C108 +0900 +0600 +ENDCHAR +STARTCHAR uni2F98 +ENCODING 12184 +BBX 11 15 3 -1 +BITMAP +0300 +0600 +0C40 +32E0 +D100 +0E00 +1900 +6300 +8480 +1980 +E280 +0480 +1880 +E900 +0600 +ENDCHAR +STARTCHAR uni2F99 +ENCODING 12185 +BBX 13 15 2 -1 +BITMAP +2020 +3FF0 +2020 +2020 +3FE0 +2020 +2020 +3FE0 +2020 +2020 +3FE0 +2020 +0D80 +3060 +C018 +ENDCHAR +STARTCHAR uni2F9A +ENCODING 12186 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +0110 +3FF8 +0100 +0108 +FFFC +0480 +2490 +2488 +4488 +4884 +8884 +1380 +6100 +ENDCHAR +STARTCHAR uni2F9B +ENCODING 12187 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0220 +3FF0 +0200 +0208 +FFFC +0200 +1200 +1210 +13F8 +1200 +2A00 +4600 +81FC +ENDCHAR +STARTCHAR uni2F9C +ENCODING 12188 +BBX 14 15 1 -1 +BITMAP +1020 +1FF0 +1020 +1020 +1020 +1FE0 +1120 +0100 +1110 +11F8 +1100 +2900 +2500 +430C +81F8 +ENDCHAR +STARTCHAR uni2F9D +ENCODING 12189 +BBX 14 15 1 -1 +BITMAP +0100 +1220 +1FF0 +1020 +1FE0 +1020 +102C +1FE8 +1030 +FFE0 +00A0 +0320 +0C20 +31E0 +C040 +ENDCHAR +STARTCHAR uni2F9E +ENCODING 12190 +BBX 14 15 1 -1 +BITMAP +0200 +0208 +FFFC +0200 +2210 +3FF8 +2210 +3FF0 +2210 +3FF0 +2210 +0208 +FFFC +0200 +0200 +ENDCHAR +STARTCHAR uni2F9F +ENCODING 12191 +BBX 14 15 1 -1 +BITMAP +0200 +0110 +7FF8 +1040 +0840 +0480 +0488 +FFFC +0200 +0210 +7FF8 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni2FA0 +ENCODING 12192 +BBX 15 15 0 -1 +BITMAP +1004 +1FFE +1000 +1010 +17F8 +1000 +1004 +1FFE +1240 +1248 +1250 +2220 +2290 +4F08 +8406 +ENDCHAR +STARTCHAR uni2FA1 +ENCODING 12193 +BBX 15 15 0 -1 +BITMAP +0060 +0180 +1E38 +00C0 +1F18 +0060 +1F80 +0080 +1080 +1088 +18FC +1480 +2280 +4180 +807E +ENDCHAR +STARTCHAR uni2FA2 +ENCODING 12194 +BBX 13 15 2 -1 +BITMAP +7FC0 +4040 +4040 +7FC0 +4040 +0000 +FFE0 +8420 +8420 +FFE0 +8020 +8010 +8010 +8018 +7FF0 +ENDCHAR +STARTCHAR uni2FA3 +ENCODING 12195 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0480 +2488 +3FFC +2488 +2488 +2488 +2878 +3008 +2008 +3FF8 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni2FA4 +ENCODING 12196 +BBX 14 15 1 -1 +BITMAP +0060 +01F0 +7E00 +0220 +2220 +1240 +1288 +FFFC +0700 +0A80 +1240 +2220 +421C +8208 +0200 +ENDCHAR +STARTCHAR uni2FA5 +ENCODING 12197 +BBX 14 15 1 -1 +BITMAP +2010 +3FF8 +2210 +2210 +3FF0 +2210 +2210 +3FF0 +2210 +0200 +0210 +7FF8 +0200 +0208 +FFFC +ENDCHAR +STARTCHAR uni2FA6 +ENCODING 12198 +BBX 14 15 1 -1 +BITMAP +0100 +0300 +0480 +0840 +1020 +2010 +DFEC +0200 +0210 +7FF8 +0200 +2230 +1220 +1248 +FFFC +ENDCHAR +STARTCHAR uni2FA7 +ENCODING 12199 +BBX 14 15 1 -1 +BITMAP +1020 +1FF0 +1000 +1FE0 +1000 +1FE0 +1000 +1008 +FFFC +1110 +10A0 +1040 +1320 +1C1C +7008 +ENDCHAR +STARTCHAR uni2FA8 +ENCODING 12200 +BBX 13 15 1 -1 +BITMAP +FDF8 +8508 +8508 +FDF8 +8508 +8508 +FDF8 +8008 +8008 +8008 +8008 +8008 +8048 +8038 +8010 +ENDCHAR +STARTCHAR uni2FA9 +ENCODING 12201 +BBX 14 15 1 -1 +BITMAP +0200 +2420 +3FF0 +2020 +3FE0 +2000 +3FF0 +2010 +3FF0 +2110 +0108 +FFFC +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni2FAA +ENCODING 12202 +BBX 14 15 1 -1 +BITMAP +0200 +0220 +7FF0 +0220 +FFFC +0220 +7FE0 +0220 +6310 +1320 +0EC0 +1240 +E230 +4E0C +0400 +ENDCHAR +STARTCHAR uni2FAB +ENCODING 12203 +BBX 14 15 1 -1 +BITMAP +0900 +0880 +0888 +1FFC +1080 +3080 +5090 +9FF8 +1080 +1090 +1FF8 +1080 +1088 +1FFC +1000 +ENDCHAR +STARTCHAR uni2FAC +ENCODING 12204 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0200 +4208 +7FFC +4208 +5288 +4A48 +4A48 +4208 +5288 +4A48 +4A48 +4238 +4210 +ENDCHAR +STARTCHAR uni2FAD +ENCODING 12205 +BBX 15 15 0 -1 +BITMAP +0104 +FFFE +0100 +3FF8 +0104 +FFFE +0000 +3FF8 +2108 +2108 +2108 +3FF8 +2008 +2078 +2010 +ENDCHAR +STARTCHAR uni2FAE +ENCODING 12206 +BBX 14 15 1 -1 +BITMAP +0480 +0480 +0488 +FCFC +0480 +0480 +0490 +7CF8 +0480 +0480 +0488 +FCFC +0480 +0480 +0480 +ENDCHAR +STARTCHAR uni2FAF +ENCODING 12207 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0100 +4208 +7FFC +4488 +4488 +4788 +4488 +4488 +4788 +4488 +4488 +7FF8 +4008 +ENDCHAR +STARTCHAR uni2FB0 +ENCODING 12208 +BBX 15 15 0 -1 +BITMAP +0820 +0824 +FFFE +0820 +0FE0 +0100 +3FF8 +2108 +3FF8 +2108 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni2FB1 +ENCODING 12209 +BBX 14 15 1 -1 +BITMAP +0400 +0440 +3FE0 +0848 +FFFC +0000 +1FE0 +1020 +1FE0 +0100 +7FF8 +2100 +7FF8 +0100 +0100 +ENDCHAR +STARTCHAR uni2FB2 +ENCODING 12210 +BBX 14 15 1 -1 +BITMAP +0480 +0480 +0480 +0488 +FCFC +0480 +0480 +7CF8 +0480 +0488 +FCFC +0480 +0480 +0488 +FFFC +ENDCHAR +STARTCHAR uni2FB3 +ENCODING 12211 +BBX 15 15 0 -1 +BITMAP +0300 +0108 +7FFC +1020 +0820 +0440 +FFFE +0000 +1010 +1FF8 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni2FB4 +ENCODING 12212 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0100 +2210 +3FF8 +2010 +3FF0 +2010 +3FF0 +2010 +3FF0 +2010 +06C0 +1830 +600C +ENDCHAR +STARTCHAR uni2FB5 +ENCODING 12213 +BBX 15 15 0 -1 +BITMAP +2008 +3FFC +2048 +21E8 +2F08 +2108 +2FE8 +2928 +2928 +2FE8 +2928 +214A +21EA +4F26 +8402 +ENDCHAR +STARTCHAR uni2FB6 +ENCODING 12214 +BBX 14 15 1 -1 +BITMAP +7FC0 +0048 +0050 +1A60 +7258 +1244 +1224 +FFDC +1248 +1250 +1260 +2258 +2224 +4214 +820C +ENDCHAR +STARTCHAR uni2FB7 +ENCODING 12215 +BBX 14 15 1 -1 +BITMAP +0100 +0300 +0480 +0A40 +3130 +DFEC +1020 +1FE0 +1020 +1FE0 +1010 +1320 +14C0 +7830 +200C +ENDCHAR +STARTCHAR uni2FB8 +ENCODING 12216 +BBX 14 15 1 -1 +BITMAP +1060 +0840 +FFFC +0100 +2220 +3FF0 +2020 +2020 +3FE0 +2020 +3FE0 +2020 +2020 +3FE0 +2020 +ENDCHAR +STARTCHAR uni2FB9 +ENCODING 12217 +BBX 15 15 0 -1 +BITMAP +0020 +0070 +3F80 +0104 +7FFE +0540 +0920 +3118 +C816 +0FF8 +0810 +0FF0 +0810 +0FF0 +0810 +ENDCHAR +STARTCHAR uni2FBA +ENCODING 12218 +BBX 14 15 1 -1 +BITMAP +2010 +3FF8 +2200 +2220 +3FF0 +2200 +3FF0 +2200 +2208 +3FFC +0048 +1228 +4928 +4908 +8070 +ENDCHAR +STARTCHAR uni2FBB +ENCODING 12219 +BBX 14 15 1 -1 +BITMAP +1020 +1FF0 +1020 +13E0 +5224 +7FFC +4008 +9FE8 +1020 +1FE0 +1020 +1FE0 +1020 +10E0 +1040 +ENDCHAR +STARTCHAR uni2FBC +ENCODING 12220 +BBX 14 15 1 -1 +BITMAP +0200 +0108 +FFFC +0000 +1FE0 +1020 +1FE0 +4008 +7FFC +4008 +4FC8 +4848 +4FC8 +4878 +4010 +ENDCHAR +STARTCHAR uni2FBD +ENCODING 12221 +BBX 15 15 0 -1 +BITMAP +2200 +3F0C +2008 +2010 +3F26 +2044 +3F88 +2010 +7F26 +1044 +1008 +2210 +FF20 +4140 +0180 +ENDCHAR +STARTCHAR uni2FBE +ENCODING 12222 +BBX 15 15 0 -1 +BITMAP +8002 +BEFA +8822 +BEFA +8822 +BEFA +8002 +8002 +8002 +8002 +8002 +8002 +8012 +800E +8004 +ENDCHAR +STARTCHAR uni2FBF +ENCODING 12223 +BBX 12 15 2 -1 +BITMAP +0840 +A490 +9110 +CA90 +A650 +8910 +9290 +FFF0 +8010 +40C0 +4300 +5C00 +6010 +4010 +3FF0 +ENDCHAR +STARTCHAR uni2FC0 +ENCODING 12224 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0000 +1FE0 +1020 +1FE0 +0000 +7FF8 +4008 +4888 +4508 +5FE8 +4208 +4238 +4210 +ENDCHAR +STARTCHAR uni2FC1 +ENCODING 12225 +BBX 14 15 1 -1 +BITMAP +0200 +2410 +3FF8 +2210 +2210 +3FF0 +2210 +2210 +3FF0 +2110 +0320 +0550 +09FC +3104 +C0FC +ENDCHAR +STARTCHAR uni2FC2 +ENCODING 12226 +BBX 14 15 1 -1 +BITMAP +0840 +0FE0 +0840 +1080 +3FF0 +5110 +9110 +1FF0 +1110 +1110 +1FF0 +1010 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni2FC3 +ENCODING 12227 +BBX 13 15 1 -1 +BITMAP +0200 +1420 +1FF0 +1020 +1FE0 +1020 +1FE0 +1010 +1FF8 +1000 +1FF8 +5248 +4928 +8928 +0030 +ENDCHAR +STARTCHAR uni2FC4 +ENCODING 12228 +BBX 13 15 2 -1 +BITMAP +0400 +0410 +07F8 +0400 +FFF0 +8850 +A490 +9110 +CA90 +A650 +8910 +9490 +A250 +FFF0 +8010 +ENDCHAR +STARTCHAR uni2FC5 +ENCODING 12229 +BBX 15 15 0 -1 +BITMAP +0100 +2084 +3FFE +2220 +2224 +3FFE +2224 +3FFC +2804 +2820 +2FA4 +2838 +29A2 +5E22 +883E +ENDCHAR +STARTCHAR uni2FC6 +ENCODING 12230 +BBX 14 15 1 -1 +BITMAP +0100 +0108 +FFFC +1110 +1110 +2928 +47C4 +0920 +3210 +C7EC +0840 +1680 +6180 +0240 +3C20 +ENDCHAR +STARTCHAR uni2FC7 +ENCODING 12231 +BBX 15 15 0 -1 +BITMAP +0100 +4084 +7FFE +4410 +4410 +7F7E +4410 +5554 +5554 +5554 +5554 +5554 +6494 +A496 +8410 +ENDCHAR +STARTCHAR uni2FC8 +ENCODING 12232 +BBX 14 15 1 -1 +BITMAP +0848 +FFFC +0840 +0FC0 +0008 +FFFC +0200 +3FF0 +2210 +3FF0 +2210 +3FF0 +2010 +1860 +E01C +ENDCHAR +STARTCHAR uni2FC9 +ENCODING 12233 +BBX 14 15 1 -1 +BITMAP +00E0 +3F00 +0210 +FFFC +0200 +0FC0 +3230 +C50C +1AC0 +E23C +1AC8 +0700 +0AC0 +3230 +C60C +ENDCHAR +STARTCHAR uni2FCA +ENCODING 12234 +BBX 14 15 1 -1 +BITMAP +2010 +3FF8 +2210 +3250 +2A90 +3FF0 +2210 +0200 +7FF0 +0200 +0200 +FFFC +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni2FCB +ENCODING 12235 +BBX 14 15 1 -1 +BITMAP +2490 +2490 +14A0 +14A0 +FFFC +2110 +4108 +BFFC +2108 +2308 +2588 +2948 +3128 +2138 +2110 +ENDCHAR +STARTCHAR uni2FCC +ENCODING 12236 +BBX 13 15 2 -1 +BITMAP +FFF0 +8910 +8910 +F9F0 +8910 +0900 +F9F0 +8910 +F9F0 +8910 +F9F0 +8910 +0908 +0908 +07F8 +ENDCHAR +STARTCHAR uni2FCD +ENCODING 12237 +BBX 14 15 1 -1 +BITMAP +0FC0 +0840 +4FC8 +4848 +4FC8 +4848 +4FC8 +4848 +7CF8 +0480 +FCFC +2490 +2490 +4490 +8490 +ENDCHAR +STARTCHAR uni2FCE +ENCODING 12238 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FF24 +08FE +7E20 +0024 +7FFE +4244 +4244 +7E48 +4228 +2410 +1E30 +704E +2184 +ENDCHAR +STARTCHAR uni2FCF +ENCODING 12239 +BBX 14 15 1 -1 +BITMAP +0C10 +71F8 +4010 +7DF0 +4010 +7FF0 +4010 +1280 +4A50 +4210 +5290 +4A54 +4214 +528C +E704 +ENDCHAR +STARTCHAR uni2FD0 +ENCODING 12240 +BBX 14 15 1 -1 +BITMAP +0200 +1FE0 +1020 +1FE0 +1020 +1FE0 +1020 +3FF0 +2210 +3FF0 +2210 +FFFC +0840 +0840 +7040 +ENDCHAR +STARTCHAR uni2FD1 +ENCODING 12241 +BBX 14 15 1 -1 +BITMAP +0400 +0208 +FFFC +0490 +7D60 +2A50 +2A50 +4A68 +B244 +1020 +1FE0 +1020 +1FE0 +2020 +C020 +ENDCHAR +STARTCHAR uni2FD2 +ENCODING 12242 +BBX 15 15 0 -1 +BITMAP +0080 +0890 +08F8 +0880 +FFFE +0440 +4444 +4AA4 +5114 +7FFC +4444 +4AA4 +5114 +7FFC +4004 +ENDCHAR +STARTCHAR uni2FD3 +ENCODING 12243 +BBX 14 15 1 -1 +BITMAP +2080 +1088 +FEFC +4480 +28F8 +FE08 +00F8 +7C80 +44F8 +7C80 +44F8 +7C80 +44FC +5C84 +487C +ENDCHAR +STARTCHAR uni2FD4 +ENCODING 12244 +BBX 14 15 1 -1 +BITMAP +1080 +1FC0 +1080 +2100 +FFF8 +2288 +FEF8 +0A88 +FED8 +0AA8 +FAD8 +0A88 +FEFC +0A04 +F9F8 +ENDCHAR +STARTCHAR uni2FD5 +ENCODING 12245 +BBX 14 15 1 -1 +BITMAP +0300 +0CC0 +3030 +C78C +0000 +F7BC +94A4 +F7BC +0000 +7FF8 +4488 +7FF8 +4488 +44B8 +4490 +ENDCHAR +STARTCHAR uni2FF0 +ENCODING 12272 +BBX 15 16 0 -2 +BITMAP +EDB6 +0000 +8102 +8102 +0000 +8102 +8102 +0000 +8102 +8102 +0000 +8102 +8102 +0100 +8002 +B6DA +ENDCHAR +STARTCHAR uni2FF1 +ENCODING 12273 +BBX 15 16 0 -2 +BITMAP +EDB6 +0000 +8002 +8002 +8002 +0000 +8002 +8002 +36D8 +8002 +8002 +0000 +8002 +8002 +0000 +EDB6 +ENDCHAR +STARTCHAR uni2FF2 +ENCODING 12274 +BBX 15 16 0 -2 +BITMAP +EDB6 +0000 +8442 +8442 +8002 +0440 +8442 +8002 +0440 +8442 +8002 +0440 +8442 +8442 +0000 +EDB6 +ENDCHAR +STARTCHAR uni2FF3 +ENCODING 12275 +BBX 15 16 0 -2 +BITMAP +EDB6 +0000 +8002 +8002 +8002 +0000 +B6DA +8002 +0000 +8002 +B6DA +0000 +8002 +8002 +0000 +EDB6 +ENDCHAR +STARTCHAR uni2FF4 +ENCODING 12276 +BBX 15 16 0 -2 +BITMAP +AAAA +0000 +8002 +1550 +8002 +1010 +8002 +1010 +8002 +1010 +9012 +0000 +9552 +8002 +0000 +AAAA +ENDCHAR +STARTCHAR uni2FF5 +ENCODING 12277 +BBX 15 16 0 -2 +BITMAP +DBB6 +0000 +8002 +8002 +0D60 +8822 +8002 +0820 +8002 +8822 +8822 +0000 +8822 +8822 +0000 +DBB6 +ENDCHAR +STARTCHAR uni2FF6 +ENCODING 12278 +BBX 15 16 0 -2 +BITMAP +DBB6 +0000 +8822 +8822 +0000 +8822 +8822 +0000 +8822 +8002 +8822 +0D60 +8002 +8002 +0000 +DBB6 +ENDCHAR +STARTCHAR uni2FF7 +ENCODING 12279 +BBX 16 16 0 -2 +BITMAP +DB6D +0001 +8000 +8001 +056D +8400 +8001 +0401 +8000 +8401 +056D +8000 +8001 +0001 +8000 +B6DB +ENDCHAR +STARTCHAR uni2FF8 +ENCODING 12280 +BBX 16 16 0 -2 +BITMAP +DB6D +0001 +8000 +8001 +0B6D +8800 +8001 +0801 +8800 +8001 +0801 +8800 +8001 +0801 +8800 +B6DB +ENDCHAR +STARTCHAR uni2FF9 +ENCODING 12281 +BBX 16 16 0 -2 +BITMAP +DB6D +0001 +8000 +8001 +36D1 +8010 +8001 +0011 +8010 +8001 +0011 +8010 +8001 +0011 +8010 +B6DB +ENDCHAR +STARTCHAR uni2FFA +ENCODING 12282 +BBX 16 16 0 -2 +BITMAP +DB6D +0801 +8800 +8001 +0801 +8800 +8001 +0801 +8800 +8001 +0801 +8B6C +8001 +0001 +8000 +B6DB +ENDCHAR +STARTCHAR uni2FFB +ENCODING 12283 +BBX 14 14 0 -1 +BITMAP +DB60 +8020 +0000 +9B6C +9024 +0000 +9024 +9024 +0000 +9024 +DB64 +0000 +1004 +1B6C +ENDCHAR +STARTCHAR uni2FFC +ENCODING 12284 +BBX 15 16 0 -2 +BITMAP +DBB6 +0000 +8002 +8002 +2AA0 +8022 +8002 +0020 +8002 +8022 +8002 +2AA0 +8002 +8002 +0000 +DBB6 +ENDCHAR +STARTCHAR uni2FFD +ENCODING 12285 +BBX 15 16 0 -2 +BITMAP +DBB6 +0020 +8002 +8022 +0000 +8022 +8002 +0020 +8002 +8022 +8002 +2AA0 +8002 +8002 +0000 +DBB6 +ENDCHAR +STARTCHAR uni2FFE +ENCODING 12286 +BBX 15 16 0 -2 +BITMAP +DBB6 +0000 +8002 +8002 +0000 +8822 +9012 +2AA8 +9012 +8822 +8002 +0000 +8002 +8002 +0000 +DBB6 +ENDCHAR +STARTCHAR uni2FFF +ENCODING 12287 +BBX 15 16 0 -2 +BITMAP +DBB6 +1400 +8102 +8042 +0000 +8022 +8002 +0020 +8002 +8022 +8802 +1080 +AA02 +9002 +0800 +DBB6 +ENDCHAR +STARTCHAR uni3000 +ENCODING 12288 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uni3001 +ENCODING 12289 +BBX 4 4 3 0 +BITMAP +80 +60 +30 +10 +ENDCHAR +STARTCHAR uni3002 +ENCODING 12290 +BBX 4 4 3 0 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni3003 +ENCODING 12291 +BBX 6 7 4 4 +BITMAP +24 +24 +24 +48 +48 +90 +90 +ENDCHAR +STARTCHAR uni3004 +ENCODING 12292 +BBX 14 13 0 0 +BITMAP +0600 +1820 +2030 +4128 +41A8 +8144 +8D04 +9304 +4908 +4408 +2410 +1860 +0180 +ENDCHAR +STARTCHAR uni3005 +ENCODING 12293 +BBX 11 11 2 1 +BITMAP +0800 +0400 +0400 +08C0 +0F20 +1040 +2080 +4900 +8600 +0200 +0100 +ENDCHAR +STARTCHAR uni3006 +ENCODING 12294 +BBX 11 12 2 0 +BITMAP +0040 +0020 +0040 +1880 +2500 +2200 +2500 +4880 +5040 +6000 +C000 +8000 +ENDCHAR +STARTCHAR uni3007 +ENCODING 12295 +BBX 14 14 0 -1 +BITMAP +0780 +1860 +2010 +4008 +4008 +8004 +8004 +8004 +8004 +4008 +4008 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uni3008 +ENCODING 12296 +BBX 5 15 8 -1 +BITMAP +08 +08 +10 +10 +20 +20 +40 +80 +40 +20 +20 +10 +10 +08 +08 +ENDCHAR +STARTCHAR uni3009 +ENCODING 12297 +BBX 5 15 3 -1 +BITMAP +80 +80 +40 +40 +20 +20 +10 +08 +10 +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni300A +ENCODING 12298 +BBX 8 15 5 -1 +BITMAP +09 +09 +12 +12 +24 +24 +48 +90 +48 +24 +24 +12 +12 +09 +09 +ENDCHAR +STARTCHAR uni300B +ENCODING 12299 +BBX 8 15 3 -1 +BITMAP +90 +90 +48 +48 +24 +24 +12 +09 +12 +24 +24 +48 +48 +90 +90 +ENDCHAR +STARTCHAR uni300C +ENCODING 12300 +BBX 5 11 8 3 +BITMAP +F8 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni300D +ENCODING 12301 +BBX 5 11 3 -1 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uni300E +ENCODING 12302 +BBX 6 11 7 3 +BITMAP +FC +84 +BC +A0 +A0 +A0 +A0 +A0 +A0 +A0 +E0 +ENDCHAR +STARTCHAR uni300F +ENCODING 12303 +BBX 6 11 3 -1 +BITMAP +1C +14 +14 +14 +14 +14 +14 +14 +F4 +84 +FC +ENDCHAR +STARTCHAR uni3010 +ENCODING 12304 +BBX 5 15 8 -1 +BITMAP +F8 +F0 +E0 +E0 +E0 +C0 +C0 +C0 +C0 +C0 +C0 +E0 +E0 +F0 +F8 +ENDCHAR +STARTCHAR uni3011 +ENCODING 12305 +BBX 5 15 3 -1 +BITMAP +F8 +78 +38 +38 +18 +18 +18 +18 +18 +18 +18 +38 +38 +78 +F8 +ENDCHAR +STARTCHAR uni3012 +ENCODING 12306 +BBX 14 13 1 0 +BITMAP +FFFC +0000 +0000 +FFFC +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni3013 +ENCODING 12307 +BBX 13 13 2 1 +BITMAP +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +0000 +0000 +0000 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni3014 +ENCODING 12308 +BBX 4 15 9 -1 +BITMAP +10 +20 +40 +80 +80 +80 +80 +80 +80 +80 +80 +80 +40 +20 +10 +ENDCHAR +STARTCHAR uni3015 +ENCODING 12309 +BBX 4 15 3 -1 +BITMAP +80 +40 +20 +10 +10 +10 +10 +10 +10 +10 +10 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni3016 +ENCODING 12310 +BBX 7 15 6 -1 +BITMAP +FE +84 +88 +90 +90 +A0 +A0 +A0 +A0 +A0 +90 +90 +88 +84 +FE +ENDCHAR +STARTCHAR uni3017 +ENCODING 12311 +BBX 7 15 3 -1 +BITMAP +FE +42 +22 +12 +12 +0A +0A +0A +0A +0A +12 +12 +22 +42 +FE +ENDCHAR +STARTCHAR uni3018 +ENCODING 12312 +BBX 4 15 9 -1 +BITMAP +10 +60 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +60 +10 +ENDCHAR +STARTCHAR uni3019 +ENCODING 12313 +BBX 4 15 3 -1 +BITMAP +80 +60 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +60 +80 +ENDCHAR +STARTCHAR uni301A +ENCODING 12314 +BBX 5 15 8 -1 +BITMAP +F8 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +F8 +ENDCHAR +STARTCHAR uni301B +ENCODING 12315 +BBX 5 15 3 -1 +BITMAP +F8 +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +28 +F8 +ENDCHAR +STARTCHAR uni301C +ENCODING 12316 +BBX 14 3 1 5 +BITMAP +7C00 +8304 +00F8 +ENDCHAR +STARTCHAR uni301D +ENCODING 12317 +BBX 6 3 8 11 +BITMAP +90 +48 +24 +ENDCHAR +STARTCHAR uni301E +ENCODING 12318 +BBX 6 3 2 11 +BITMAP +24 +48 +90 +ENDCHAR +STARTCHAR uni301F +ENCODING 12319 +BBX 6 3 2 -1 +BITMAP +24 +48 +90 +ENDCHAR +STARTCHAR uni3020 +ENCODING 12320 +BBX 16 15 0 -2 +BITMAP +3FFC +3FFC +0000 +3FFC +3FFC +5596 +D9B9 +A5A5 +A5A5 +599A +4182 +2424 +13C8 +0810 +07E0 +ENDCHAR +STARTCHAR uni3021 +ENCODING 12321 +BBX 2 14 7 0 +BITMAP +C0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni3022 +ENCODING 12322 +BBX 7 14 4 0 +BITMAP +06 +04 +C4 +84 +84 +84 +84 +84 +84 +84 +84 +04 +04 +04 +ENDCHAR +STARTCHAR uni3023 +ENCODING 12323 +BBX 11 14 2 0 +BITMAP +0020 +8020 +8420 +8420 +8420 +8420 +8420 +8420 +8420 +8420 +8420 +8020 +8020 +0020 +ENDCHAR +STARTCHAR uni3024 +ENCODING 12324 +BBX 11 13 2 1 +BITMAP +0040 +0040 +4080 +2080 +1100 +0900 +0600 +0300 +0480 +0840 +1020 +2020 +C000 +ENDCHAR +STARTCHAR uni3025 +ENCODING 12325 +BBX 9 14 3 -1 +BITMAP +2100 +2180 +4100 +E600 +1800 +2400 +4200 +4100 +8100 +8100 +8100 +8200 +4200 +3C00 +ENDCHAR +STARTCHAR uni3026 +ENCODING 12326 +BBX 14 4 1 9 +BITMAP +0200 +0100 +0108 +FFFC +ENDCHAR +STARTCHAR uni3027 +ENCODING 12327 +BBX 12 9 2 4 +BITMAP +0400 +0400 +0400 +0400 +FFF0 +0000 +0000 +0000 +FFF0 +ENDCHAR +STARTCHAR uni3028 +ENCODING 12328 +BBX 14 13 1 1 +BITMAP +0200 +0200 +0200 +FFFC +0000 +0000 +0000 +7FF8 +0000 +0000 +0000 +0000 +FFFC +ENDCHAR +STARTCHAR uni3029 +ENCODING 12329 +BBX 12 15 2 -1 +BITMAP +2000 +2000 +2000 +3FF0 +4040 +A040 +1080 +0880 +0500 +0200 +0300 +0480 +0840 +3040 +C000 +ENDCHAR +STARTCHAR uni302A +ENCODING 12330 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -16 -2 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni302B +ENCODING 12331 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -16 9 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni302C +ENCODING 12332 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -4 9 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni302D +ENCODING 12333 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -4 -2 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni302E +ENCODING 12334 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -16 4 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni302F +ENCODING 12335 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 5 -16 3 +BITMAP +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni3030 +ENCODING 12336 +BBX 16 3 0 5 +BITMAP +6186 +9249 +0C30 +ENDCHAR +STARTCHAR uni3031 +ENCODING 12337 +BBX 6 16 3 -2 +BITMAP +08 +0C +08 +10 +10 +20 +40 +80 +80 +40 +20 +10 +08 +08 +04 +04 +ENDCHAR +STARTCHAR uni3032 +ENCODING 12338 +BBX 10 16 3 -2 +BITMAP +0800 +0C00 +0880 +1040 +1240 +2100 +4100 +8000 +8000 +4000 +2000 +1000 +0800 +0800 +0400 +0400 +ENDCHAR +STARTCHAR uni3033 +ENCODING 12339 +BBX 7 16 0 -2 +BITMAP +04 +06 +04 +08 +08 +08 +10 +10 +10 +20 +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni3034 +ENCODING 12340 +BBX 11 16 0 -2 +BITMAP +0400 +0600 +0440 +0820 +0880 +0840 +1040 +1000 +1000 +2000 +2000 +2000 +4000 +4000 +8000 +8000 +ENDCHAR +STARTCHAR uni3035 +ENCODING 12341 +BBX 8 15 0 -1 +BITMAP +80 +80 +40 +20 +20 +10 +10 +08 +08 +04 +04 +02 +02 +01 +01 +ENDCHAR +STARTCHAR uni3036 +ENCODING 12342 +BBX 15 16 0 -2 +BITMAP +07C0 +1830 +2008 +5FF4 +5FF4 +8002 +9FF2 +9FF2 +8102 +8102 +8102 +4104 +4104 +2108 +1830 +07C0 +ENDCHAR +STARTCHAR uni3037 +ENCODING 12343 +BBX 15 16 0 -2 +BITMAP +8282 +8282 +8282 +4444 +4444 +2828 +2828 +1010 +1010 +2828 +2828 +4444 +4444 +8282 +8282 +8282 +ENDCHAR +STARTCHAR uni3038 +ENCODING 12344 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0100 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni3039 +ENCODING 12345 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +0820 +0820 +0820 +0820 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uni303A +ENCODING 12346 +BBX 15 15 0 -1 +BITMAP +1088 +1088 +1088 +1088 +1088 +FFFE +1088 +1088 +1088 +1088 +1088 +2088 +2088 +4088 +8008 +ENDCHAR +STARTCHAR uni303B +ENCODING 12347 +BBX 5 9 6 3 +BITMAP +80 +40 +20 +10 +20 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni303C +ENCODING 12348 +BBX 11 11 2 0 +BITMAP +FFE0 +8060 +80A0 +8120 +8220 +8420 +8820 +9020 +A020 +C020 +FFE0 +ENDCHAR +STARTCHAR uni303D +ENCODING 12349 +BBX 13 13 1 -1 +BITMAP +2000 +50C0 +8920 +0620 +0020 +0020 +0020 +0020 +0020 +0020 +0010 +0010 +0008 +ENDCHAR +STARTCHAR uni303E +ENCODING 12350 +BBX 16 16 0 -2 +BITMAP +DB6D +8001 +0E00 +9189 +8071 +0000 +8011 +8021 +1FF8 +8081 +8101 +1FF8 +8401 +8800 +0001 +DB6D +ENDCHAR +STARTCHAR uni303F +ENCODING 12351 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +FE +82 +C6 +C6 +AA +AA +92 +AA +AA +C6 +C6 +82 +FE +ENDCHAR +STARTCHAR uni3041 +ENCODING 12353 +BBX 10 11 3 -2 +BITMAP +0800 +0B00 +7C00 +1000 +1F00 +3280 +5240 +8C40 +8840 +7080 +0300 +ENDCHAR +STARTCHAR uni3042 +ENCODING 12354 +BBX 13 14 2 -1 +BITMAP +0400 +0400 +0580 +7E00 +0800 +0880 +0FE0 +1890 +2908 +4A08 +8408 +8810 +7020 +00C0 +ENDCHAR +STARTCHAR uni3043 +ENCODING 12355 +BBX 10 8 3 -1 +BITMAP +8000 +8100 +8080 +8080 +8040 +4040 +5000 +2000 +ENDCHAR +STARTCHAR uni3044 +ENCODING 12356 +BBX 11 11 3 0 +BITMAP +8000 +8000 +8080 +8040 +8040 +8020 +8020 +8020 +4800 +5000 +2000 +ENDCHAR +STARTCHAR uni3045 +ENCODING 12357 +BBX 6 11 6 -2 +BITMAP +60 +18 +00 +38 +C4 +04 +04 +08 +08 +10 +20 +ENDCHAR +STARTCHAR uni3046 +ENCODING 12358 +BBX 8 14 4 -1 +BITMAP +30 +0E +00 +00 +1E +E1 +01 +01 +01 +02 +02 +04 +08 +10 +ENDCHAR +STARTCHAR uni3047 +ENCODING 12359 +BBX 8 10 4 -2 +BITMAP +30 +0C +00 +1C +64 +08 +18 +24 +44 +83 +ENDCHAR +STARTCHAR uni3048 +ENCODING 12360 +BBX 12 13 2 0 +BITMAP +0C00 +0380 +0000 +0380 +3C80 +0100 +0200 +0400 +0E00 +1100 +2100 +4100 +80F0 +ENDCHAR +STARTCHAR uni3049 +ENCODING 12361 +BBX 10 10 4 -2 +BITMAP +2000 +3900 +E080 +2040 +2E00 +3100 +6080 +A080 +A100 +6600 +ENDCHAR +STARTCHAR uni304A +ENCODING 12362 +BBX 14 13 2 0 +BITMAP +1000 +1000 +1E10 +F008 +1004 +1000 +13C0 +1C20 +3010 +5010 +9010 +9020 +60C0 +ENDCHAR +STARTCHAR uni304B +ENCODING 12363 +BBX 14 13 2 0 +BITMAP +0800 +0800 +0820 +0F10 +F888 +0884 +1084 +1080 +2080 +2080 +4100 +8900 +0600 +ENDCHAR +STARTCHAR uni304C +ENCODING 12364 +BBX 14 14 2 0 +BITMAP +0008 +0814 +0808 +0820 +0F10 +F888 +0884 +1084 +1080 +2080 +2080 +4100 +8900 +0600 +ENDCHAR +STARTCHAR uni304D +ENCODING 12365 +BBX 10 15 3 -1 +BITMAP +0800 +0800 +0B00 +7C00 +0400 +05C0 +7E00 +0200 +0100 +3E80 +4180 +8000 +8000 +6000 +1E00 +ENDCHAR +STARTCHAR uni304E +ENCODING 12366 +BBX 12 15 3 -1 +BITMAP +0800 +0820 +0B50 +7C20 +0400 +05C0 +7E00 +0200 +0100 +3E80 +4180 +8000 +8000 +6000 +1E00 +ENDCHAR +STARTCHAR uni304F +ENCODING 12367 +BBX 5 14 5 -1 +BITMAP +08 +08 +10 +10 +20 +40 +80 +40 +20 +10 +10 +08 +08 +08 +ENDCHAR +STARTCHAR uni3050 +ENCODING 12368 +BBX 9 14 5 -1 +BITMAP +0800 +0800 +1100 +1280 +2100 +4000 +8000 +4000 +2000 +1000 +1000 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni3051 +ENCODING 12369 +BBX 13 14 2 -1 +BITMAP +0040 +4040 +4040 +8078 +8FC0 +8040 +8040 +8040 +8040 +8040 +A080 +4080 +4100 +0200 +ENDCHAR +STARTCHAR uni3052 +ENCODING 12370 +BBX 14 15 2 -1 +BITMAP +0008 +0054 +4048 +4040 +8078 +8FC0 +8040 +8040 +8040 +8040 +8040 +A080 +4080 +4100 +0200 +ENDCHAR +STARTCHAR uni3053 +ENCODING 12371 +BBX 10 12 3 0 +BITMAP +3800 +0780 +0200 +0400 +0000 +0000 +0000 +4000 +8000 +8000 +4000 +3FC0 +ENDCHAR +STARTCHAR uni3054 +ENCODING 12372 +BBX 13 13 3 0 +BITMAP +0010 +3828 +0790 +0200 +0400 +0000 +0000 +0000 +4000 +8000 +8000 +4000 +3FC0 +ENDCHAR +STARTCHAR uni3055 +ENCODING 12373 +BBX 10 14 3 -1 +BITMAP +0800 +0800 +05C0 +FE00 +0200 +0100 +0100 +3E80 +4180 +8000 +8000 +8000 +6000 +1E00 +ENDCHAR +STARTCHAR uni3056 +ENCODING 12374 +BBX 11 15 3 -1 +BITMAP +0040 +08A0 +0840 +0580 +FE00 +0200 +0100 +0100 +3E80 +4180 +8000 +8000 +8000 +6000 +1E00 +ENDCHAR +STARTCHAR uni3057 +ENCODING 12375 +BBX 9 13 5 0 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8080 +8100 +4600 +3800 +ENDCHAR +STARTCHAR uni3058 +ENCODING 12376 +BBX 9 13 5 0 +BITMAP +8000 +8400 +8A00 +8400 +8000 +8000 +8000 +8000 +8000 +8080 +8100 +4600 +3800 +ENDCHAR +STARTCHAR uni3059 +ENCODING 12377 +BBX 12 14 2 -1 +BITMAP +0100 +0100 +FFF0 +0100 +0100 +0F00 +1100 +1100 +1300 +0D00 +0100 +0200 +0400 +1800 +ENDCHAR +STARTCHAR uni305A +ENCODING 12378 +BBX 14 15 2 -1 +BITMAP +0008 +0114 +0108 +FFF0 +0100 +0100 +0F00 +1100 +1100 +1300 +0D00 +0100 +0200 +0400 +1800 +ENDCHAR +STARTCHAR uni305B +ENCODING 12379 +BBX 14 13 1 0 +BITMAP +0040 +1040 +1040 +1040 +13FC +FC40 +1040 +1040 +1180 +1000 +1000 +0800 +07E0 +ENDCHAR +STARTCHAR uni305C +ENCODING 12380 +BBX 15 13 1 0 +BITMAP +0044 +104A +1044 +1040 +13FC +FC40 +1040 +1040 +1180 +1000 +1000 +0800 +07E0 +ENDCHAR +STARTCHAR uni305D +ENCODING 12381 +BBX 13 13 2 -1 +BITMAP +1F80 +0100 +0200 +0400 +08F8 +1F00 +E200 +0400 +0800 +0800 +0800 +0400 +03C0 +ENDCHAR +STARTCHAR uni305E +ENCODING 12382 +BBX 13 13 2 -1 +BITMAP +1F90 +0128 +0210 +0400 +08F8 +1F00 +E200 +0400 +0800 +0800 +0800 +0400 +03C0 +ENDCHAR +STARTCHAR uni305F +ENCODING 12383 +BBX 13 13 2 0 +BITMAP +1000 +1000 +1E00 +F000 +1000 +11F0 +2020 +2000 +2000 +4400 +4400 +8200 +81F8 +ENDCHAR +STARTCHAR uni3060 +ENCODING 12384 +BBX 13 13 2 0 +BITMAP +1010 +1028 +1E10 +F000 +1000 +11F0 +2020 +2000 +2000 +4400 +4400 +8200 +81F8 +ENDCHAR +STARTCHAR uni3061 +ENCODING 12385 +BBX 11 14 3 -1 +BITMAP +0800 +0800 +0980 +FE00 +1000 +1000 +2000 +2780 +5840 +6020 +0020 +0040 +0180 +0E00 +ENDCHAR +STARTCHAR uni3062 +ENCODING 12386 +BBX 13 14 3 -1 +BITMAP +0810 +0828 +0990 +FE00 +1000 +1000 +2000 +2780 +5840 +6020 +0020 +0040 +0180 +0E00 +ENDCHAR +STARTCHAR uni3063 +ENCODING 12387 +BBX 10 8 3 -1 +BITMAP +0F00 +F080 +0040 +0040 +0040 +0080 +0300 +0C00 +ENDCHAR +STARTCHAR uni3064 +ENCODING 12388 +BBX 14 10 1 0 +BITMAP +03E0 +FC10 +0008 +0004 +0004 +0004 +0008 +0010 +0060 +0180 +ENDCHAR +STARTCHAR uni3065 +ENCODING 12389 +BBX 15 13 1 0 +BITMAP +0004 +000A +0004 +03E0 +FC10 +0008 +0004 +0004 +0004 +0008 +0010 +0060 +0180 +ENDCHAR +STARTCHAR uni3066 +ENCODING 12390 +BBX 12 12 2 0 +BITMAP +00F0 +FF00 +0200 +0400 +0400 +0800 +0800 +0800 +0800 +0400 +0200 +01C0 +ENDCHAR +STARTCHAR uni3067 +ENCODING 12391 +BBX 12 12 2 0 +BITMAP +00F0 +FF00 +0220 +0450 +0420 +0800 +0800 +0800 +0800 +0400 +0200 +01C0 +ENDCHAR +STARTCHAR uni3068 +ENCODING 12392 +BBX 8 13 4 0 +BITMAP +20 +20 +20 +20 +21 +16 +18 +20 +40 +80 +80 +40 +3F +ENDCHAR +STARTCHAR uni3069 +ENCODING 12393 +BBX 11 13 4 0 +BITMAP +2000 +2040 +20A0 +2040 +2100 +1600 +1800 +2000 +4000 +8000 +8000 +4000 +3F00 +ENDCHAR +STARTCHAR uni306A +ENCODING 12394 +BBX 13 14 2 -1 +BITMAP +1000 +1000 +1E20 +F010 +1008 +2080 +2080 +4080 +8080 +0080 +0780 +08E0 +0890 +0700 +ENDCHAR +STARTCHAR uni306B +ENCODING 12395 +BBX 11 12 3 0 +BITMAP +4000 +47C0 +8080 +8000 +8000 +8000 +8000 +8000 +8400 +A400 +43E0 +4000 +ENDCHAR +STARTCHAR uni306C +ENCODING 12396 +BBX 14 13 1 0 +BITMAP +0200 +2200 +2200 +27E0 +3A10 +2208 +5208 +5408 +8C08 +8408 +88E8 +7118 +00E4 +ENDCHAR +STARTCHAR uni306D +ENCODING 12397 +BBX 14 14 1 -1 +BITMAP +1000 +1000 +1000 +10E0 +F310 +1408 +1808 +3008 +5008 +9008 +10F0 +1118 +10E4 +1000 +ENDCHAR +STARTCHAR uni306E +ENCODING 12398 +BBX 13 11 2 0 +BITMAP +0780 +1A60 +2210 +4210 +4208 +8408 +8408 +8810 +4810 +3060 +0180 +ENDCHAR +STARTCHAR uni306F +ENCODING 12399 +BBX 13 14 2 -1 +BITMAP +4040 +4040 +4040 +87F8 +8040 +8040 +8040 +8040 +8040 +8040 +83C0 +A470 +4448 +4380 +ENDCHAR +STARTCHAR uni3070 +ENCODING 12400 +BBX 14 15 2 -1 +BITMAP +0008 +4054 +4048 +4040 +87F8 +8040 +8040 +8040 +8040 +8040 +8040 +83C0 +A470 +4448 +4380 +ENDCHAR +STARTCHAR uni3071 +ENCODING 12401 +BBX 15 15 1 -1 +BITMAP +000C +4052 +4052 +404C +87F0 +8040 +8040 +8040 +8040 +8040 +8040 +83C0 +A470 +4448 +4380 +ENDCHAR +STARTCHAR uni3072 +ENCODING 12402 +BBX 13 13 2 -1 +BITMAP +1C00 +E840 +1060 +1050 +2048 +2040 +4040 +4040 +4040 +4080 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uni3073 +ENCODING 12403 +BBX 14 15 2 -1 +BITMAP +0008 +0014 +1C08 +E840 +1060 +1050 +2048 +2040 +4040 +4040 +4040 +4080 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uni3074 +ENCODING 12404 +BBX 14 15 2 -1 +BITMAP +0018 +0024 +1C24 +E858 +1060 +1050 +2048 +2040 +4040 +4040 +4040 +4080 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uni3075 +ENCODING 12405 +BBX 15 13 1 0 +BITMAP +0200 +0100 +0080 +0080 +0100 +0200 +0200 +0100 +0090 +1048 +2044 +4882 +8702 +ENDCHAR +STARTCHAR uni3076 +ENCODING 12406 +BBX 15 13 1 0 +BITMAP +0200 +0100 +0080 +0090 +0128 +0210 +0200 +0100 +0090 +1048 +2044 +4882 +8702 +ENDCHAR +STARTCHAR uni3077 +ENCODING 12407 +BBX 15 13 1 0 +BITMAP +0200 +0100 +0098 +00A4 +0124 +0218 +0200 +0100 +0090 +1048 +2044 +4882 +8702 +ENDCHAR +STARTCHAR uni3078 +ENCODING 12408 +BBX 14 7 1 2 +BITMAP +0C00 +1200 +2100 +C080 +0040 +0030 +000C +ENDCHAR +STARTCHAR uni3079 +ENCODING 12409 +BBX 14 9 1 2 +BITMAP +0020 +0050 +0C20 +1200 +2100 +C080 +0040 +0030 +000C +ENDCHAR +STARTCHAR uni307A +ENCODING 12410 +BBX 14 9 1 2 +BITMAP +0060 +0090 +0C90 +1260 +2100 +C080 +0040 +0030 +000C +ENDCHAR +STARTCHAR uni307B +ENCODING 12411 +BBX 13 14 2 -1 +BITMAP +4000 +47F0 +4040 +8040 +8040 +87F0 +8040 +8040 +8040 +8040 +83C0 +A470 +4448 +4380 +ENDCHAR +STARTCHAR uni307C +ENCODING 12412 +BBX 14 15 2 -1 +BITMAP +0008 +4014 +47E8 +4040 +8040 +8040 +87F0 +8040 +8040 +8040 +8040 +83C0 +A470 +4448 +4380 +ENDCHAR +STARTCHAR uni307D +ENCODING 12413 +BBX 14 15 2 -1 +BITMAP +0018 +4024 +47E4 +4058 +8040 +8040 +87F0 +8040 +8040 +8040 +8040 +83C0 +A470 +4448 +4380 +ENDCHAR +STARTCHAR uni307E +ENCODING 12414 +BBX 10 14 3 -1 +BITMAP +0400 +0400 +FFC0 +0400 +0400 +0400 +7F80 +0400 +0400 +0400 +7E00 +8580 +8440 +7800 +ENDCHAR +STARTCHAR uni307F +ENCODING 12415 +BBX 14 13 2 -1 +BITMAP +3E00 +0200 +0200 +0220 +0420 +0420 +1FE0 +6838 +8844 +9040 +6080 +0100 +0200 +ENDCHAR +STARTCHAR uni3080 +ENCODING 12416 +BBX 13 14 2 -1 +BITMAP +0800 +0800 +0F20 +F810 +0808 +0800 +3800 +4800 +4800 +5000 +3010 +1010 +1010 +0FE0 +ENDCHAR +STARTCHAR uni3081 +ENCODING 12417 +BBX 14 14 1 -1 +BITMAP +0080 +1080 +1080 +17C0 +18B0 +1108 +3108 +4A04 +4A04 +8404 +8408 +4A08 +3030 +00C0 +ENDCHAR +STARTCHAR uni3082 +ENCODING 12418 +BBX 10 14 3 -1 +BITMAP +1000 +1000 +1000 +FC00 +1000 +1000 +1080 +FC40 +2040 +2040 +2040 +2040 +1080 +0F00 +ENDCHAR +STARTCHAR uni3083 +ENCODING 12419 +BBX 10 10 3 -2 +BITMAP +0800 +4780 +2C40 +3040 +D040 +1380 +0800 +0800 +0400 +0400 +ENDCHAR +STARTCHAR uni3084 +ENCODING 12420 +BBX 14 14 1 -1 +BITMAP +0200 +0100 +2080 +20F0 +1308 +0C04 +3804 +C408 +0430 +0200 +0200 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni3085 +ENCODING 12421 +BBX 10 11 3 -2 +BITMAP +0400 +0200 +4F00 +5280 +A240 +A240 +4280 +4F00 +0400 +0400 +0800 +ENDCHAR +STARTCHAR uni3086 +ENCODING 12422 +BBX 13 14 2 -1 +BITMAP +0200 +0100 +4100 +43E0 +8D10 +9108 +A108 +C108 +8908 +4510 +43E0 +0100 +0200 +0400 +ENDCHAR +STARTCHAR uni3087 +ENCODING 12423 +BBX 8 10 4 -1 +BITMAP +08 +08 +0F +08 +08 +08 +78 +8E +89 +70 +ENDCHAR +STARTCHAR uni3088 +ENCODING 12424 +BBX 10 14 3 -1 +BITMAP +0400 +0400 +0400 +07C0 +0400 +0400 +0400 +0400 +0400 +0400 +7E00 +8580 +8440 +7800 +ENDCHAR +STARTCHAR uni3089 +ENCODING 12425 +BBX 10 14 4 -1 +BITMAP +1800 +0600 +0000 +4000 +4000 +4000 +4000 +9F00 +E080 +8040 +0040 +0080 +0300 +3C00 +ENDCHAR +STARTCHAR uni308A +ENCODING 12426 +BBX 8 14 4 -1 +BITMAP +01 +81 +81 +81 +81 +81 +A1 +C1 +41 +01 +02 +02 +04 +18 +ENDCHAR +STARTCHAR uni308B +ENCODING 12427 +BBX 11 13 3 -1 +BITMAP +3F80 +0100 +0200 +0400 +0800 +1780 +3840 +4020 +8020 +0C20 +1240 +1180 +0F00 +ENDCHAR +STARTCHAR uni308C +ENCODING 12428 +BBX 14 14 1 -1 +BITMAP +1000 +1000 +1000 +11C0 +FA20 +1420 +1820 +3020 +3020 +5020 +9020 +1024 +1018 +1000 +ENDCHAR +STARTCHAR uni308D +ENCODING 12429 +BBX 11 13 3 -1 +BITMAP +3F80 +0100 +0200 +0400 +0800 +1780 +3840 +4020 +8020 +0020 +0040 +0180 +0E00 +ENDCHAR +STARTCHAR uni308E +ENCODING 12430 +BBX 11 10 3 -2 +BITMAP +1000 +1000 +F380 +1440 +1820 +1020 +3020 +5020 +9040 +1080 +ENDCHAR +STARTCHAR uni308F +ENCODING 12431 +BBX 13 14 2 -1 +BITMAP +1000 +1000 +1000 +F800 +13E0 +1410 +1808 +1008 +3008 +5008 +9010 +1020 +10C0 +1000 +ENDCHAR +STARTCHAR uni3090 +ENCODING 12432 +BBX 12 13 2 0 +BITMAP +0E00 +3200 +0200 +0400 +0400 +0F80 +3860 +4810 +8810 +9010 +9320 +94A0 +63C0 +ENDCHAR +STARTCHAR uni3091 +ENCODING 12433 +BBX 15 13 1 0 +BITMAP +0FC0 +0080 +0100 +03C0 +0C20 +1010 +0710 +08A0 +07C0 +1808 +2404 +4242 +8182 +ENDCHAR +STARTCHAR uni3092 +ENCODING 12434 +BBX 11 14 3 0 +BITMAP +0800 +0800 +0B00 +FC00 +1000 +1000 +3C00 +4260 +8380 +0E00 +1200 +2000 +2000 +1F80 +ENDCHAR +STARTCHAR uni3093 +ENCODING 12435 +BBX 12 13 3 0 +BITMAP +0800 +0800 +0800 +1000 +1000 +1000 +2000 +2C00 +3200 +4200 +4210 +8220 +81C0 +ENDCHAR +STARTCHAR uni3094 +ENCODING 12436 +BBX 11 14 4 -1 +BITMAP +3040 +0EA0 +0040 +0000 +3E00 +C100 +0100 +0100 +0100 +0200 +0200 +0400 +0800 +1000 +ENDCHAR +STARTCHAR uni3095 +ENCODING 12437 +BBX 11 11 3 -2 +BITMAP +1000 +1000 +1000 +1C80 +F240 +1220 +2220 +2200 +4200 +8400 +1800 +ENDCHAR +STARTCHAR uni3096 +ENCODING 12438 +BBX 10 11 4 -2 +BITMAP +0100 +4100 +4100 +8FC0 +8100 +8100 +8100 +8100 +A100 +4200 +0C00 +ENDCHAR +STARTCHAR uni3099 +ENCODING 12441 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 2 -4 11 +BITMAP +A0 +A0 +ENDCHAR +STARTCHAR uni309A +ENCODING 12442 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -5 9 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni309B +ENCODING 12443 +BBX 3 2 1 11 +BITMAP +A0 +A0 +ENDCHAR +STARTCHAR uni309C +ENCODING 12444 +BBX 4 4 1 9 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni309D +ENCODING 12445 +BBX 8 7 4 2 +BITMAP +C0 +30 +0C +02 +01 +02 +0C +ENDCHAR +STARTCHAR uni309E +ENCODING 12446 +BBX 8 9 4 2 +BITMAP +02 +05 +C2 +30 +0C +02 +01 +02 +0C +ENDCHAR +STARTCHAR uni309F +ENCODING 12447 +BBX 8 14 4 -1 +BITMAP +80 +80 +80 +FE +80 +80 +9E +A1 +C1 +41 +02 +02 +04 +18 +ENDCHAR +STARTCHAR uni30A0 +ENCODING 12448 +BBX 6 5 5 4 +BITMAP +FC +00 +00 +00 +FC +ENDCHAR +STARTCHAR uni30A1 +ENCODING 12449 +BBX 7 8 4 -2 +BITMAP +FE +02 +14 +10 +10 +10 +20 +40 +ENDCHAR +STARTCHAR uni30A2 +ENCODING 12450 +BBX 11 11 3 0 +BITMAP +FFE0 +0020 +0440 +0480 +0400 +0400 +0400 +0800 +0800 +1000 +2000 +ENDCHAR +STARTCHAR uni30A3 +ENCODING 12451 +BBX 7 10 4 -2 +BITMAP +02 +02 +04 +18 +E8 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni30A4 +ENCODING 12452 +BBX 9 13 3 -1 +BITMAP +0080 +0080 +0100 +0200 +0400 +0C00 +3400 +C400 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni30A5 +ENCODING 12453 +BBX 9 11 4 -1 +BITMAP +0800 +0800 +0800 +FF80 +8080 +8080 +0080 +0100 +0100 +0600 +1800 +ENDCHAR +STARTCHAR uni30A6 +ENCODING 12454 +BBX 11 13 3 0 +BITMAP +0400 +0400 +0400 +FFE0 +8020 +8020 +8020 +0020 +0040 +0040 +0080 +0300 +0C00 +ENDCHAR +STARTCHAR uni30A7 +ENCODING 12455 +BBX 9 6 4 -1 +BITMAP +7F00 +0800 +0800 +0800 +0800 +FF80 +ENDCHAR +STARTCHAR uni30A8 +ENCODING 12456 +BBX 13 9 2 1 +BITMAP +3FE0 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni30A9 +ENCODING 12457 +BBX 8 10 5 -2 +BITMAP +04 +04 +FF +04 +0C +14 +24 +C4 +04 +0C +ENDCHAR +STARTCHAR uni30AA +ENCODING 12458 +BBX 13 13 2 0 +BITMAP +0080 +0080 +0080 +FFF8 +0080 +0180 +0280 +0480 +0880 +3080 +C080 +0080 +0380 +ENDCHAR +STARTCHAR uni30AB +ENCODING 12459 +BBX 12 14 2 0 +BITMAP +0400 +0400 +0400 +0400 +FFF0 +0410 +0410 +0810 +0810 +1010 +1010 +2020 +4020 +81C0 +ENDCHAR +STARTCHAR uni30AC +ENCODING 12460 +BBX 14 14 2 0 +BITMAP +0408 +0414 +0408 +0400 +FFF0 +0410 +0410 +0810 +0810 +1010 +1010 +2020 +4020 +81C0 +ENDCHAR +STARTCHAR uni30AD +ENCODING 12461 +BBX 13 14 2 -1 +BITMAP +0400 +0400 +0400 +03E0 +7E00 +0200 +0200 +03F8 +FE00 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni30AE +ENCODING 12462 +BBX 13 14 2 -1 +BITMAP +0410 +0428 +0410 +03E0 +7E00 +0200 +0200 +03F8 +FE00 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni30AF +ENCODING 12463 +BBX 9 13 4 0 +BITMAP +1000 +1000 +1F80 +2080 +2080 +4100 +8100 +0200 +0200 +0400 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni30B0 +ENCODING 12464 +BBX 12 14 4 0 +BITMAP +0020 +1050 +1020 +1F80 +2080 +2080 +4100 +8100 +0200 +0200 +0400 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni30B1 +ENCODING 12465 +BBX 13 13 2 0 +BITMAP +0800 +0800 +0800 +1000 +1FF8 +2040 +4040 +8040 +0080 +0080 +0100 +0200 +0C00 +ENDCHAR +STARTCHAR uni30B2 +ENCODING 12466 +BBX 14 13 2 0 +BITMAP +0808 +0814 +0808 +1000 +1FF8 +2040 +4040 +8040 +0080 +0080 +0100 +0200 +0C00 +ENDCHAR +STARTCHAR uni30B3 +ENCODING 12467 +BBX 10 10 3 0 +BITMAP +FFC0 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +FFC0 +0040 +ENDCHAR +STARTCHAR uni30B4 +ENCODING 12468 +BBX 13 13 3 0 +BITMAP +0010 +0028 +0010 +FFC0 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +FFC0 +0040 +ENDCHAR +STARTCHAR uni30B5 +ENCODING 12469 +BBX 13 14 2 -1 +BITMAP +0040 +1040 +1040 +1040 +FFF8 +1040 +1040 +1040 +1040 +0040 +0080 +0080 +0100 +0600 +ENDCHAR +STARTCHAR uni30B6 +ENCODING 12470 +BBX 14 15 2 -1 +BITMAP +0008 +0054 +1048 +1040 +1040 +FFF8 +1040 +1040 +1040 +1040 +0040 +0080 +0080 +0100 +0600 +ENDCHAR +STARTCHAR uni30B7 +ENCODING 12471 +BBX 11 12 3 0 +BITMAP +4000 +3000 +0000 +0000 +8000 +6020 +0040 +0080 +0100 +0200 +0C00 +7000 +ENDCHAR +STARTCHAR uni30B8 +ENCODING 12472 +BBX 11 13 3 0 +BITMAP +0040 +60A0 +1040 +0000 +0000 +C000 +2020 +0040 +0080 +0100 +0200 +0C00 +7000 +ENDCHAR +STARTCHAR uni30B9 +ENCODING 12473 +BBX 11 11 3 0 +BITMAP +7F80 +0080 +0080 +0100 +0100 +0200 +0500 +0880 +1040 +2020 +C020 +ENDCHAR +STARTCHAR uni30BA +ENCODING 12474 +BBX 13 13 3 0 +BITMAP +0010 +0028 +7F90 +0080 +0080 +0100 +0100 +0200 +0500 +0880 +1040 +2020 +C020 +ENDCHAR +STARTCHAR uni30BB +ENCODING 12475 +BBX 12 12 2 1 +BITMAP +1000 +1000 +1000 +11E0 +1E30 +F040 +1080 +1100 +1000 +1000 +1000 +0FC0 +ENDCHAR +STARTCHAR uni30BC +ENCODING 12476 +BBX 14 12 2 1 +BITMAP +1008 +1014 +1008 +11E0 +1E30 +F040 +1080 +1100 +1000 +1000 +1000 +0FC0 +ENDCHAR +STARTCHAR uni30BD +ENCODING 12477 +BBX 10 12 3 0 +BITMAP +8040 +8040 +4040 +4040 +2080 +0080 +0100 +0100 +0200 +0400 +0800 +1000 +ENDCHAR +STARTCHAR uni30BE +ENCODING 12478 +BBX 13 14 3 0 +BITMAP +0010 +0028 +8010 +8040 +4040 +4040 +2080 +0080 +0100 +0100 +0200 +0400 +0800 +1000 +ENDCHAR +STARTCHAR uni30BF +ENCODING 12479 +BBX 9 13 4 0 +BITMAP +1000 +1000 +1F80 +2080 +2080 +4100 +B100 +0E00 +0200 +0500 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni30C0 +ENCODING 12480 +BBX 12 14 4 0 +BITMAP +0020 +1050 +1020 +1F80 +2080 +2080 +4100 +B100 +0E00 +0200 +0500 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni30C1 +ENCODING 12481 +BBX 14 14 1 -1 +BITMAP +0020 +01C0 +3E00 +0100 +0100 +0100 +FFFC +0100 +0100 +0100 +0200 +0200 +0400 +0800 +ENDCHAR +STARTCHAR uni30C2 +ENCODING 12482 +BBX 14 14 1 -1 +BITMAP +0020 +01C8 +3E14 +0108 +0100 +0100 +FFFC +0100 +0100 +0100 +0200 +0200 +0400 +0800 +ENDCHAR +STARTCHAR uni30C3 +ENCODING 12483 +BBX 9 8 4 -2 +BITMAP +1000 +8880 +4880 +4100 +0100 +0200 +0400 +0800 +ENDCHAR +STARTCHAR uni30C4 +ENCODING 12484 +BBX 12 13 2 -1 +BITMAP +0800 +0800 +8410 +4410 +4020 +0020 +0040 +0040 +0080 +0100 +0200 +0400 +0800 +ENDCHAR +STARTCHAR uni30C5 +ENCODING 12485 +BBX 14 15 2 -1 +BITMAP +0008 +0014 +0808 +0800 +8410 +4410 +4020 +0020 +0040 +0040 +0080 +0100 +0200 +0400 +0800 +ENDCHAR +STARTCHAR uni30C6 +ENCODING 12486 +BBX 13 12 2 0 +BITMAP +3FE0 +0000 +0000 +0000 +FFF8 +0100 +0100 +0100 +0200 +0200 +0400 +1800 +ENDCHAR +STARTCHAR uni30C7 +ENCODING 12487 +BBX 14 14 2 0 +BITMAP +0008 +0014 +3FC8 +0000 +0000 +0000 +FFF8 +0100 +0100 +0100 +0200 +0200 +0400 +1800 +ENDCHAR +STARTCHAR uni30C8 +ENCODING 12488 +BBX 7 14 6 -1 +BITMAP +80 +80 +80 +80 +80 +F0 +8C +82 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni30C9 +ENCODING 12489 +BBX 8 14 6 -1 +BITMAP +80 +82 +85 +82 +80 +F0 +8C +82 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni30CA +ENCODING 12490 +BBX 12 14 2 -1 +BITMAP +0200 +0200 +0200 +0200 +FFF0 +0200 +0200 +0200 +0200 +0400 +0400 +0800 +1000 +2000 +ENDCHAR +STARTCHAR uni30CB +ENCODING 12491 +BBX 13 8 2 2 +BITMAP +3FE0 +0000 +0000 +0000 +0000 +0000 +0000 +FFF8 +ENDCHAR +STARTCHAR uni30CC +ENCODING 12492 +BBX 10 11 3 0 +BITMAP +7F80 +0080 +0080 +0100 +1100 +0A00 +0400 +0A00 +1100 +2080 +C040 +ENDCHAR +STARTCHAR uni30CD +ENCODING 12493 +BBX 13 14 2 -1 +BITMAP +0200 +0200 +0200 +3FC0 +0040 +0180 +0200 +0E60 +3210 +C208 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni30CE +ENCODING 12494 +BBX 9 12 3 0 +BITMAP +0080 +0080 +0080 +0080 +0100 +0100 +0200 +0200 +0400 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni30CF +ENCODING 12495 +BBX 14 9 1 1 +BITMAP +0800 +0880 +0840 +1020 +1010 +2008 +2008 +4004 +8004 +ENDCHAR +STARTCHAR uni30D0 +ENCODING 12496 +BBX 14 11 1 1 +BITMAP +0008 +0014 +0808 +0880 +0840 +1020 +1010 +2008 +2008 +4004 +8004 +ENDCHAR +STARTCHAR uni30D1 +ENCODING 12497 +BBX 14 11 1 1 +BITMAP +0018 +0024 +0824 +0898 +0840 +1020 +1010 +2008 +2008 +4004 +8004 +ENDCHAR +STARTCHAR uni30D2 +ENCODING 12498 +BBX 9 12 4 0 +BITMAP +8000 +8000 +8080 +8300 +8C00 +F000 +8000 +8000 +8000 +8000 +8000 +7F80 +ENDCHAR +STARTCHAR uni30D3 +ENCODING 12499 +BBX 10 13 4 0 +BITMAP +0080 +8140 +8080 +8000 +8100 +8E00 +F000 +8000 +8000 +8000 +8000 +8000 +7F00 +ENDCHAR +STARTCHAR uni30D4 +ENCODING 12500 +BBX 10 13 4 0 +BITMAP +0180 +8240 +8240 +8180 +8100 +8E00 +F000 +8000 +8000 +8000 +8000 +8000 +7F00 +ENDCHAR +STARTCHAR uni30D5 +ENCODING 12501 +BBX 11 11 3 0 +BITMAP +FFE0 +0020 +0020 +0020 +0040 +0040 +0080 +0100 +0200 +0C00 +3000 +ENDCHAR +STARTCHAR uni30D6 +ENCODING 12502 +BBX 13 14 3 0 +BITMAP +0010 +0028 +0010 +FFE0 +0020 +0020 +0020 +0040 +0040 +0080 +0100 +0200 +0C00 +3000 +ENDCHAR +STARTCHAR uni30D7 +ENCODING 12503 +BBX 13 14 3 0 +BITMAP +0030 +0048 +0048 +FFF0 +0020 +0020 +0020 +0040 +0040 +0080 +0100 +0200 +0C00 +3000 +ENDCHAR +STARTCHAR uni30D8 +ENCODING 12504 +BBX 14 7 1 2 +BITMAP +0C00 +1200 +2100 +4080 +8040 +0030 +000C +ENDCHAR +STARTCHAR uni30D9 +ENCODING 12505 +BBX 14 8 1 2 +BITMAP +0020 +0C50 +1220 +2100 +4080 +8040 +0030 +000C +ENDCHAR +STARTCHAR uni30DA +ENCODING 12506 +BBX 14 9 1 2 +BITMAP +0060 +0090 +0C90 +1260 +2100 +4080 +8040 +0030 +000C +ENDCHAR +STARTCHAR uni30DB +ENCODING 12507 +BBX 13 13 2 0 +BITMAP +0200 +0200 +0200 +7FF0 +0200 +0200 +0200 +2220 +2210 +4208 +8208 +0200 +0E00 +ENDCHAR +STARTCHAR uni30DC +ENCODING 12508 +BBX 14 13 2 0 +BITMAP +0208 +0214 +0208 +7FF0 +0200 +0200 +0200 +2220 +2210 +4208 +8208 +0200 +0E00 +ENDCHAR +STARTCHAR uni30DD +ENCODING 12509 +BBX 14 14 2 0 +BITMAP +0018 +0224 +0224 +0218 +7FE0 +0200 +0200 +0200 +2220 +2210 +4208 +8208 +0200 +0E00 +ENDCHAR +STARTCHAR uni30DE +ENCODING 12510 +BBX 12 10 2 1 +BITMAP +FFF0 +0010 +0020 +0020 +0040 +3080 +0D00 +0200 +0100 +0080 +ENDCHAR +STARTCHAR uni30DF +ENCODING 12511 +BBX 8 13 4 -1 +BITMAP +38 +06 +01 +00 +30 +0C +02 +00 +00 +E0 +18 +06 +01 +ENDCHAR +STARTCHAR uni30E0 +ENCODING 12512 +BBX 12 12 2 0 +BITMAP +0800 +0800 +0800 +0800 +0800 +0800 +1080 +1040 +1020 +20E0 +2710 +F810 +ENDCHAR +STARTCHAR uni30E1 +ENCODING 12513 +BBX 10 12 3 0 +BITMAP +0040 +0040 +0040 +0080 +1880 +0500 +0300 +0280 +0440 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni30E2 +ENCODING 12514 +BBX 12 11 2 0 +BITMAP +7FC0 +0800 +0800 +0800 +FFF0 +0800 +0800 +0800 +0800 +0800 +07C0 +ENDCHAR +STARTCHAR uni30E3 +ENCODING 12515 +BBX 10 11 3 -2 +BITMAP +2000 +2000 +11C0 +1E40 +F080 +0900 +0800 +0800 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni30E4 +ENCODING 12516 +BBX 13 13 2 -1 +BITMAP +2000 +2000 +1070 +1388 +1C10 +E820 +0840 +0400 +0400 +0400 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni30E5 +ENCODING 12517 +BBX 10 7 3 -1 +BITMAP +3E00 +0200 +0200 +0200 +0400 +0400 +FFC0 +ENDCHAR +STARTCHAR uni30E6 +ENCODING 12518 +BBX 13 9 2 1 +BITMAP +3FC0 +0040 +0040 +0040 +0040 +0080 +0080 +0080 +FFF8 +ENDCHAR +STARTCHAR uni30E7 +ENCODING 12519 +BBX 6 9 5 -2 +BITMAP +FC +04 +04 +FC +04 +04 +04 +FC +04 +ENDCHAR +STARTCHAR uni30E8 +ENCODING 12520 +BBX 9 12 3 0 +BITMAP +FF80 +0080 +0080 +0080 +0080 +7F80 +0080 +0080 +0080 +0080 +FF80 +0080 +ENDCHAR +STARTCHAR uni30E9 +ENCODING 12521 +BBX 11 12 3 0 +BITMAP +3F80 +0000 +0000 +0000 +FFE0 +0020 +0040 +0040 +0080 +0100 +0600 +1800 +ENDCHAR +STARTCHAR uni30EA +ENCODING 12522 +BBX 8 14 4 -1 +BITMAP +01 +81 +81 +81 +81 +81 +81 +81 +01 +01 +02 +02 +04 +18 +ENDCHAR +STARTCHAR uni30EB +ENCODING 12523 +BBX 15 12 1 0 +BITMAP +0080 +0080 +0880 +0880 +0880 +0880 +0880 +1080 +1082 +2084 +4098 +80E0 +ENDCHAR +STARTCHAR uni30EC +ENCODING 12524 +BBX 8 12 5 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +81 +82 +84 +98 +E0 +ENDCHAR +STARTCHAR uni30ED +ENCODING 12525 +BBX 10 10 3 0 +BITMAP +FFC0 +8040 +8040 +8040 +8040 +8040 +8040 +8040 +FFC0 +8040 +ENDCHAR +STARTCHAR uni30EE +ENCODING 12526 +BBX 8 9 4 -2 +BITMAP +FF +81 +81 +81 +01 +02 +02 +04 +18 +ENDCHAR +STARTCHAR uni30EF +ENCODING 12527 +BBX 11 12 3 -1 +BITMAP +FFE0 +8020 +8020 +8020 +8020 +0020 +0020 +0040 +0040 +0080 +0300 +0C00 +ENDCHAR +STARTCHAR uni30F0 +ENCODING 12528 +BBX 13 14 2 -1 +BITMAP +0080 +0080 +0080 +3FF0 +1080 +1080 +1080 +1080 +FFF8 +0080 +0080 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni30F1 +ENCODING 12529 +BBX 13 9 2 1 +BITMAP +3FE0 +0020 +0040 +0280 +0200 +0200 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni30F2 +ENCODING 12530 +BBX 10 11 3 0 +BITMAP +7FC0 +0040 +0040 +FFC0 +0040 +0080 +0080 +0100 +0200 +0C00 +3000 +ENDCHAR +STARTCHAR uni30F3 +ENCODING 12531 +BBX 11 11 3 0 +BITMAP +C000 +2000 +1020 +0020 +0040 +0040 +0080 +0100 +0200 +0C00 +7000 +ENDCHAR +STARTCHAR uni30F4 +ENCODING 12532 +BBX 13 14 3 0 +BITMAP +0010 +0428 +0410 +0400 +FFE0 +8020 +8020 +8020 +0020 +0040 +0040 +0080 +0300 +0C00 +ENDCHAR +STARTCHAR uni30F5 +ENCODING 12533 +BBX 9 11 4 -2 +BITMAP +0800 +0800 +0800 +FF80 +0880 +1080 +1080 +2080 +4100 +8100 +0600 +ENDCHAR +STARTCHAR uni30F6 +ENCODING 12534 +BBX 10 11 4 -2 +BITMAP +2000 +2000 +2000 +7FC0 +4200 +8200 +0200 +0400 +0400 +0800 +3000 +ENDCHAR +STARTCHAR uni30F7 +ENCODING 12535 +BBX 13 15 3 -1 +BITMAP +0010 +0028 +0010 +FFE0 +8020 +8020 +8020 +8020 +0020 +0020 +0040 +0040 +0080 +0300 +0C00 +ENDCHAR +STARTCHAR uni30F8 +ENCODING 12536 +BBX 14 14 2 -1 +BITMAP +0088 +0094 +0088 +3FF0 +1080 +1080 +1080 +1080 +FFF8 +0080 +0080 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni30F9 +ENCODING 12537 +BBX 14 12 2 1 +BITMAP +0008 +0014 +0008 +3FE0 +0020 +0040 +0280 +0200 +0200 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni30FA +ENCODING 12538 +BBX 13 14 3 0 +BITMAP +0010 +0028 +0010 +7FC0 +0040 +0040 +FFC0 +0040 +0080 +0080 +0100 +0200 +0C00 +3000 +ENDCHAR +STARTCHAR uni30FB +ENCODING 12539 +BBX 2 2 7 5 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni30FC +ENCODING 12540 +BBX 13 2 2 5 +BITMAP +8000 +7FF8 +ENDCHAR +STARTCHAR uni30FD +ENCODING 12541 +BBX 7 6 5 3 +BITMAP +C0 +30 +08 +04 +02 +02 +ENDCHAR +STARTCHAR uni30FE +ENCODING 12542 +BBX 8 8 5 3 +BITMAP +02 +05 +C2 +30 +08 +04 +02 +02 +ENDCHAR +STARTCHAR uni30FF +ENCODING 12543 +BBX 10 13 3 -1 +BITMAP +FFC0 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni3105 +ENCODING 12549 +BBX 9 12 3 0 +BITMAP +1000 +1000 +2000 +4000 +FF80 +0080 +0080 +0100 +0200 +0200 +1400 +0800 +ENDCHAR +STARTCHAR uni3106 +ENCODING 12550 +BBX 10 12 2 0 +BITMAP +0400 +0400 +0800 +1FC0 +0040 +0040 +0880 +0500 +0200 +0500 +1880 +E000 +ENDCHAR +STARTCHAR uni3107 +ENCODING 12551 +BBX 11 11 2 1 +BITMAP +FFE0 +4020 +4020 +4020 +4020 +4020 +4020 +4020 +4020 +4020 +0020 +ENDCHAR +STARTCHAR uni3108 +ENCODING 12552 +BBX 11 9 3 3 +BITMAP +FFC0 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +7FE0 +ENDCHAR +STARTCHAR uni3109 +ENCODING 12553 +BBX 10 13 3 0 +BITMAP +1000 +1000 +2000 +4000 +FFC0 +0840 +0840 +1040 +2040 +4080 +8080 +0900 +0600 +ENDCHAR +STARTCHAR uni310A +ENCODING 12554 +BBX 14 12 1 0 +BITMAP +0080 +0080 +0100 +0100 +FFFC +0200 +0200 +0440 +0420 +0FE0 +0010 +0010 +ENDCHAR +STARTCHAR uni310B +ENCODING 12555 +BBX 9 12 4 0 +BITMAP +FE00 +0200 +0400 +0800 +1F80 +0080 +0100 +0100 +0200 +2200 +1400 +0800 +ENDCHAR +STARTCHAR uni310C +ENCODING 12556 +BBX 10 13 3 0 +BITMAP +0400 +0400 +2400 +2400 +4400 +7FC0 +0440 +0840 +1080 +1080 +2080 +4500 +8200 +ENDCHAR +STARTCHAR uni310D +ENCODING 12557 +BBX 11 13 2 0 +BITMAP +0820 +0820 +1040 +1040 +2080 +4100 +8200 +4100 +2080 +1040 +1040 +0820 +0820 +ENDCHAR +STARTCHAR uni310E +ENCODING 12558 +BBX 13 12 2 0 +BITMAP +FFF8 +0400 +0800 +1000 +1FE0 +0020 +0020 +0040 +0040 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni310F +ENCODING 12559 +BBX 13 11 2 1 +BITMAP +3FF8 +1000 +1000 +1000 +1000 +2000 +2000 +2000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni3110 +ENCODING 12560 +BBX 7 12 4 0 +BITMAP +02 +82 +82 +82 +82 +8E +F2 +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni3111 +ENCODING 12561 +BBX 10 12 4 0 +BITMAP +0100 +0200 +0400 +0800 +3000 +C000 +2000 +1800 +0400 +0300 +0080 +0040 +ENDCHAR +STARTCHAR uni3112 +ENCODING 12562 +BBX 13 11 2 1 +BITMAP +FFF8 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni3113 +ENCODING 12563 +BBX 13 13 1 0 +BITMAP +0200 +0200 +4210 +4210 +4210 +4210 +4210 +4210 +7FF0 +0200 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni3114 +ENCODING 12564 +BBX 10 14 3 -1 +BITMAP +0080 +0300 +0400 +0840 +3080 +0100 +0600 +1A00 +2200 +C200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni3115 +ENCODING 12565 +BBX 11 11 3 1 +BITMAP +7FE0 +0020 +0020 +2020 +3FE0 +2000 +2000 +2000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni3116 +ENCODING 12566 +BBX 11 11 2 0 +BITMAP +FFE0 +8020 +8020 +8820 +8420 +8420 +8220 +8220 +8020 +FFE0 +0020 +ENDCHAR +STARTCHAR uni3117 +ENCODING 12567 +BBX 11 11 3 1 +BITMAP +FFE0 +0820 +0820 +0820 +0840 +0840 +0940 +0880 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni3118 +ENCODING 12568 +BBX 13 14 2 -1 +BITMAP +0400 +0400 +0400 +0400 +FFF8 +0400 +0400 +0400 +07E0 +0020 +0040 +0080 +0080 +0100 +ENDCHAR +STARTCHAR uni3119 +ENCODING 12569 +BBX 12 11 2 1 +BITMAP +0400 +0400 +0400 +0800 +0800 +1000 +2080 +4040 +8020 +FFF0 +0010 +ENDCHAR +STARTCHAR uni311A +ENCODING 12570 +BBX 10 11 2 1 +BITMAP +8040 +4080 +2100 +1200 +0C00 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni311B +ENCODING 12571 +BBX 13 11 2 1 +BITMAP +FFF8 +0100 +0100 +0100 +1F00 +2000 +4000 +4000 +4020 +2040 +1F80 +ENDCHAR +STARTCHAR uni311C +ENCODING 12572 +BBX 12 13 2 0 +BITMAP +0200 +0200 +0200 +FFF0 +0200 +0200 +1E00 +2000 +4000 +4000 +4020 +2040 +1F80 +ENDCHAR +STARTCHAR uni311D +ENCODING 12573 +BBX 14 11 1 1 +BITMAP +0820 +0820 +0820 +0820 +FFFC +0820 +0840 +0840 +0880 +0800 +07E0 +ENDCHAR +STARTCHAR uni311E +ENCODING 12574 +BBX 11 12 3 0 +BITMAP +FFE0 +0400 +4400 +8800 +FFC0 +0840 +1040 +1080 +2080 +4100 +8100 +0200 +ENDCHAR +STARTCHAR uni311F +ENCODING 12575 +BBX 12 11 2 1 +BITMAP +0600 +1A00 +E200 +0200 +0200 +0100 +0100 +0080 +0040 +0040 +0030 +ENDCHAR +STARTCHAR uni3120 +ENCODING 12576 +BBX 12 12 2 0 +BITMAP +0200 +0400 +0800 +1040 +2080 +7F00 +0200 +0400 +1840 +6060 +FF90 +0010 +ENDCHAR +STARTCHAR uni3121 +ENCODING 12577 +BBX 12 12 2 0 +BITMAP +3FE0 +0020 +0040 +1080 +0900 +0700 +0300 +04C0 +0820 +1010 +6010 +8000 +ENDCHAR +STARTCHAR uni3122 +ENCODING 12578 +BBX 11 12 2 0 +BITMAP +7FC0 +1040 +1080 +2080 +2100 +4200 +FFE0 +0020 +0040 +0080 +0100 +0200 +ENDCHAR +STARTCHAR uni3123 +ENCODING 12579 +BBX 11 12 3 1 +BITMAP +8000 +8000 +8000 +8000 +8000 +FFE0 +0020 +0040 +0040 +0080 +0080 +0100 +ENDCHAR +STARTCHAR uni3124 +ENCODING 12580 +BBX 13 12 2 0 +BITMAP +0200 +0200 +0200 +0400 +7FE0 +0A00 +0A00 +1200 +1200 +2200 +4200 +81F8 +ENDCHAR +STARTCHAR uni3125 +ENCODING 12581 +BBX 13 11 1 1 +BITMAP +0080 +0080 +0100 +0200 +0200 +0400 +0800 +0800 +1000 +2000 +FFF8 +ENDCHAR +STARTCHAR uni3126 +ENCODING 12582 +BBX 13 11 2 1 +BITMAP +0100 +1100 +1100 +1100 +1100 +1100 +2100 +2100 +2100 +4100 +80F8 +ENDCHAR +STARTCHAR uni3127 +ENCODING 12583 +BBX 12 1 2 6 +BITMAP +FFF0 +ENDCHAR +STARTCHAR uni3128 +ENCODING 12584 +BBX 11 12 3 1 +BITMAP +0040 +0040 +2080 +1100 +0900 +0600 +0600 +0900 +1080 +2040 +4020 +8020 +ENDCHAR +STARTCHAR uni3129 +ENCODING 12585 +BBX 10 11 3 1 +BITMAP +8040 +8040 +8040 +8040 +8040 +8040 +8040 +8040 +8040 +FFC0 +0040 +ENDCHAR +STARTCHAR uni312A +ENCODING 12586 +BBX 14 13 1 -1 +BITMAP +FFFC +0400 +0400 +0400 +0400 +07E0 +0820 +0820 +0820 +1020 +1020 +2140 +4080 +ENDCHAR +STARTCHAR uni312B +ENCODING 12587 +BBX 13 13 1 -1 +BITMAP +FFF8 +0880 +0880 +0880 +0880 +0880 +1080 +1080 +1080 +2080 +2080 +4080 +8078 +ENDCHAR +STARTCHAR uni312C +ENCODING 12588 +BBX 14 14 1 -1 +BITMAP +0200 +0100 +0000 +3FFC +2000 +2000 +2000 +2000 +2000 +2000 +2000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni312D +ENCODING 12589 +BBX 13 13 1 -1 +BITMAP +FFF8 +0200 +0200 +0200 +7FF0 +4210 +4210 +4210 +4210 +4210 +4210 +0200 +0200 +ENDCHAR +STARTCHAR uni312E +ENCODING 12590 +BBX 12 13 2 0 +BITMAP +0600 +0600 +0000 +FFF0 +0200 +0200 +1E00 +2000 +4000 +4000 +4020 +2040 +1F80 +ENDCHAR +STARTCHAR uni312F +ENCODING 12591 +BBX 10 12 3 0 +BITMAP +FF00 +0200 +0400 +0800 +1000 +3FC0 +0840 +0840 +0840 +0840 +0A80 +0900 +ENDCHAR +STARTCHAR uni3131 +ENCODING 12593 +BBX 11 10 2 1 +BITMAP +FFE0 +0020 +0020 +0020 +0020 +0020 +0020 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni3132 +ENCODING 12594 +BBX 13 10 1 1 +BITMAP +FDF8 +0408 +0408 +0408 +0408 +0408 +0408 +0408 +0408 +0408 +ENDCHAR +STARTCHAR uni3133 +ENCODING 12595 +BBX 14 10 1 1 +BITMAP +FC20 +0420 +0420 +0420 +0420 +0450 +0450 +0488 +0488 +0504 +ENDCHAR +STARTCHAR uni3134 +ENCODING 12596 +BBX 11 10 2 1 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +FFE0 +ENDCHAR +STARTCHAR uni3135 +ENCODING 12597 +BBX 14 10 1 1 +BITMAP +81FC +8020 +8020 +8020 +8020 +8050 +8050 +8088 +8088 +FD04 +ENDCHAR +STARTCHAR uni3136 +ENCODING 12598 +BBX 14 10 1 1 +BITMAP +80F0 +8000 +83FC +8000 +80F0 +8108 +8108 +8108 +8108 +FCF0 +ENDCHAR +STARTCHAR uni3137 +ENCODING 12599 +BBX 11 10 2 1 +BITMAP +FFE0 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +FFE0 +ENDCHAR +STARTCHAR uni3138 +ENCODING 12600 +BBX 13 10 1 1 +BITMAP +FDF8 +8100 +8100 +8100 +8100 +8100 +8100 +8100 +8100 +FDF8 +ENDCHAR +STARTCHAR uni3139 +ENCODING 12601 +BBX 11 10 2 1 +BITMAP +FFE0 +0020 +0020 +0020 +FFE0 +8000 +8000 +8000 +8000 +FFE0 +ENDCHAR +STARTCHAR uni313A +ENCODING 12602 +BBX 13 10 1 1 +BITMAP +FDF8 +0408 +0408 +0408 +FC08 +8008 +8008 +8008 +8008 +FC08 +ENDCHAR +STARTCHAR uni313B +ENCODING 12603 +BBX 13 10 1 1 +BITMAP +FDF8 +0508 +0508 +0508 +FD08 +8108 +8108 +8108 +8108 +FDF8 +ENDCHAR +STARTCHAR uni313C +ENCODING 12604 +BBX 13 10 1 1 +BITMAP +FD08 +0508 +0508 +0508 +FDF8 +8108 +8108 +8108 +8108 +FDF8 +ENDCHAR +STARTCHAR uni313D +ENCODING 12605 +BBX 14 10 1 1 +BITMAP +FC20 +0420 +0420 +0420 +FC20 +8050 +8050 +8088 +8088 +FD04 +ENDCHAR +STARTCHAR uni313E +ENCODING 12606 +BBX 13 10 1 1 +BITMAP +FDF8 +0500 +0500 +0500 +FDF8 +8100 +8100 +8100 +8100 +FDF8 +ENDCHAR +STARTCHAR uni313F +ENCODING 12607 +BBX 14 10 1 1 +BITMAP +FDFC +0488 +0488 +0488 +FC88 +8088 +8088 +8088 +8088 +FDFC +ENDCHAR +STARTCHAR uni3140 +ENCODING 12608 +BBX 14 10 1 1 +BITMAP +FCF0 +0400 +07FC +0400 +FCF0 +8108 +8108 +8108 +8108 +FCF0 +ENDCHAR +STARTCHAR uni3141 +ENCODING 12609 +BBX 11 10 2 1 +BITMAP +FFE0 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +FFE0 +ENDCHAR +STARTCHAR uni3142 +ENCODING 12610 +BBX 11 10 2 1 +BITMAP +8020 +8020 +8020 +8020 +FFE0 +8020 +8020 +8020 +8020 +FFE0 +ENDCHAR +STARTCHAR uni3143 +ENCODING 12611 +BBX 13 10 1 1 +BITMAP +8508 +8508 +8508 +8508 +FDF8 +8508 +8508 +8508 +8508 +FDF8 +ENDCHAR +STARTCHAR uni3144 +ENCODING 12612 +BBX 14 10 1 1 +BITMAP +8420 +8420 +8420 +8420 +FC20 +8450 +8450 +8488 +8488 +FD04 +ENDCHAR +STARTCHAR uni3145 +ENCODING 12613 +BBX 11 10 2 1 +BITMAP +0400 +0400 +0400 +0400 +0A00 +0A00 +1100 +2080 +4040 +8020 +ENDCHAR +STARTCHAR uni3146 +ENCODING 12614 +BBX 13 10 1 1 +BITMAP +1040 +1040 +1040 +1040 +1040 +28A0 +28A0 +4510 +4510 +8208 +ENDCHAR +STARTCHAR uni3147 +ENCODING 12615 +BBX 11 10 2 1 +BITMAP +1F00 +2080 +4040 +8020 +8020 +8020 +8020 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni3148 +ENCODING 12616 +BBX 11 10 2 1 +BITMAP +FFE0 +0400 +0400 +0400 +0A00 +0A00 +1100 +2080 +4040 +8020 +ENDCHAR +STARTCHAR uni3149 +ENCODING 12617 +BBX 13 10 1 1 +BITMAP +FFF8 +1040 +1040 +1040 +1040 +28A0 +28A0 +4510 +4510 +8208 +ENDCHAR +STARTCHAR uni314A +ENCODING 12618 +BBX 11 10 2 1 +BITMAP +3F80 +0000 +0000 +FFE0 +0400 +0400 +0A00 +1100 +2080 +C060 +ENDCHAR +STARTCHAR uni314B +ENCODING 12619 +BBX 11 10 2 1 +BITMAP +FFE0 +0020 +0020 +0020 +0020 +FFE0 +0020 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni314C +ENCODING 12620 +BBX 11 10 2 1 +BITMAP +FFE0 +8000 +8000 +8000 +FFE0 +8000 +8000 +8000 +8000 +FFE0 +ENDCHAR +STARTCHAR uni314D +ENCODING 12621 +BBX 11 10 2 1 +BITMAP +FFE0 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +FFE0 +ENDCHAR +STARTCHAR uni314E +ENCODING 12622 +BBX 11 10 2 1 +BITMAP +3F80 +0000 +FFE0 +0000 +1F00 +2080 +4040 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni314F +ENCODING 12623 +BBX 5 16 6 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +F8 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni3150 +ENCODING 12624 +BBX 5 16 5 -2 +BITMAP +88 +88 +88 +88 +88 +88 +88 +F8 +88 +88 +88 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni3151 +ENCODING 12625 +BBX 5 16 6 -2 +BITMAP +80 +80 +80 +80 +80 +F8 +80 +80 +80 +80 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni3152 +ENCODING 12626 +BBX 5 16 5 -2 +BITMAP +88 +88 +88 +88 +88 +F8 +88 +88 +88 +88 +F8 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni3153 +ENCODING 12627 +BBX 5 16 5 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +F8 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni3154 +ENCODING 12628 +BBX 7 16 4 -2 +BITMAP +12 +12 +12 +12 +12 +12 +12 +F2 +12 +12 +12 +12 +12 +12 +12 +12 +ENDCHAR +STARTCHAR uni3155 +ENCODING 12629 +BBX 5 16 5 -2 +BITMAP +08 +08 +08 +08 +08 +F8 +08 +08 +08 +08 +F8 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni3156 +ENCODING 12630 +BBX 7 16 4 -2 +BITMAP +12 +12 +12 +12 +12 +F2 +12 +12 +12 +12 +F2 +12 +12 +12 +12 +12 +ENDCHAR +STARTCHAR uni3157 +ENCODING 12631 +BBX 15 5 0 0 +BITMAP +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni3158 +ENCODING 12632 +BBX 15 16 0 -2 +BITMAP +0008 +0008 +0008 +0008 +0008 +0008 +0008 +000E +0008 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uni3159 +ENCODING 12633 +BBX 14 16 0 -2 +BITMAP +0024 +0024 +0024 +0024 +0024 +0024 +0024 +003C +0024 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uni315A +ENCODING 12634 +BBX 13 16 0 -2 +BITMAP +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uni315B +ENCODING 12635 +BBX 15 5 0 0 +BITMAP +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uni315C +ENCODING 12636 +BBX 15 7 0 -2 +BITMAP +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni315D +ENCODING 12637 +BBX 13 16 0 -2 +BITMAP +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uni315E +ENCODING 12638 +BBX 14 16 0 -2 +BITMAP +0024 +0024 +0024 +0024 +0024 +0024 +0024 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uni315F +ENCODING 12639 +BBX 13 16 0 -2 +BITMAP +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uni3160 +ENCODING 12640 +BBX 15 7 0 -2 +BITMAP +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uni3161 +ENCODING 12641 +BBX 15 1 0 0 +BITMAP +FFFE +ENDCHAR +STARTCHAR uni3162 +ENCODING 12642 +BBX 13 16 0 -2 +BITMAP +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uni3163 +ENCODING 12643 +BBX 1 16 8 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni3164 +ENCODING 12644 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0001 +913C +1121 +9F38 +1121 +9120 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni3165 +ENCODING 12645 +BBX 13 10 1 1 +BITMAP +8100 +8100 +8100 +8100 +8100 +8100 +8100 +8100 +8100 +FDF8 +ENDCHAR +STARTCHAR uni3166 +ENCODING 12646 +BBX 13 10 1 1 +BITMAP +81F8 +8100 +8100 +8100 +8100 +8100 +8100 +8100 +8100 +FDF8 +ENDCHAR +STARTCHAR uni3167 +ENCODING 12647 +BBX 14 10 1 1 +BITMAP +8020 +8020 +8020 +8020 +8020 +8050 +8050 +8088 +8088 +FD04 +ENDCHAR +STARTCHAR uni3168 +ENCODING 12648 +BBX 14 10 1 1 +BITMAP +8020 +8020 +8050 +8050 +8050 +8088 +8088 +8088 +8104 +FDFC +ENDCHAR +STARTCHAR uni3169 +ENCODING 12649 +BBX 14 10 1 1 +BITMAP +F790 +1090 +1090 +1090 +F0A8 +80A8 +80A8 +80C4 +80C4 +F0C4 +ENDCHAR +STARTCHAR uni316A +ENCODING 12650 +BBX 13 10 1 1 +BITMAP +FDF8 +0500 +0500 +0500 +FD00 +8100 +8100 +8100 +8100 +FDF8 +ENDCHAR +STARTCHAR uni316B +ENCODING 12651 +BBX 14 10 1 1 +BITMAP +F490 +1490 +1490 +1490 +F7A8 +84A8 +84A8 +84C4 +84C4 +F7C4 +ENDCHAR +STARTCHAR uni316C +ENCODING 12652 +BBX 14 10 1 1 +BITMAP +FC20 +0420 +0450 +0450 +FC50 +8088 +8088 +8088 +8104 +FDFC +ENDCHAR +STARTCHAR uni316D +ENCODING 12653 +BBX 14 10 1 1 +BITMAP +FC00 +07FC +0400 +04F0 +FD08 +8108 +8108 +8108 +8108 +FCF0 +ENDCHAR +STARTCHAR uni316E +ENCODING 12654 +BBX 13 10 1 1 +BITMAP +FD08 +8508 +8508 +8508 +85F8 +8508 +8508 +8508 +8508 +FDF8 +ENDCHAR +STARTCHAR uni316F +ENCODING 12655 +BBX 14 10 1 1 +BITMAP +FC20 +8420 +8420 +8420 +8420 +8450 +8450 +8488 +8488 +FD04 +ENDCHAR +STARTCHAR uni3170 +ENCODING 12656 +BBX 14 10 1 1 +BITMAP +FC20 +8420 +8450 +8450 +8450 +8488 +8488 +8488 +8504 +FDFC +ENDCHAR +STARTCHAR uni3171 +ENCODING 12657 +BBX 11 14 2 -1 +BITMAP +FFE0 +8020 +8020 +8020 +8020 +FFE0 +0000 +3F80 +4040 +8020 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni3172 +ENCODING 12658 +BBX 13 10 1 1 +BITMAP +85F8 +8408 +8408 +8408 +FC08 +8408 +8408 +8408 +8408 +FC08 +ENDCHAR +STARTCHAR uni3173 +ENCODING 12659 +BBX 13 10 1 1 +BITMAP +85F8 +8500 +8500 +8500 +FD00 +8500 +8500 +8500 +8500 +FDF8 +ENDCHAR +STARTCHAR uni3174 +ENCODING 12660 +BBX 13 10 1 1 +BITMAP +8978 +8908 +8908 +8908 +FA88 +8A88 +8A88 +8C48 +8C48 +FC48 +ENDCHAR +STARTCHAR uni3175 +ENCODING 12661 +BBX 13 10 1 1 +BITMAP +9278 +9240 +9240 +9240 +F540 +9540 +9540 +98C0 +98C0 +F8F8 +ENDCHAR +STARTCHAR uni3176 +ENCODING 12662 +BBX 14 10 1 1 +BITMAP +85FC +8420 +8420 +8420 +FC20 +8450 +8450 +8488 +8488 +FD04 +ENDCHAR +STARTCHAR uni3177 +ENCODING 12663 +BBX 13 10 1 1 +BITMAP +85F8 +8500 +8500 +8500 +FDF8 +8500 +8500 +8500 +8500 +FDF8 +ENDCHAR +STARTCHAR uni3178 +ENCODING 12664 +BBX 11 14 2 -1 +BITMAP +8020 +8020 +FFE0 +8020 +8020 +8020 +FFE0 +0000 +3F80 +4040 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni3179 +ENCODING 12665 +BBX 11 14 2 -1 +BITMAP +8A20 +8A20 +FBE0 +8A20 +8A20 +8A20 +FBE0 +0000 +3F80 +4040 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni317A +ENCODING 12666 +BBX 12 10 1 1 +BITMAP +13F0 +1010 +1010 +1010 +1010 +2810 +2810 +4410 +4410 +8210 +ENDCHAR +STARTCHAR uni317B +ENCODING 12667 +BBX 14 10 0 1 +BITMAP +1080 +1080 +1080 +1080 +1080 +2880 +2880 +4480 +4480 +82FC +ENDCHAR +STARTCHAR uni317C +ENCODING 12668 +BBX 14 10 0 1 +BITMAP +10FC +1080 +1080 +1080 +1080 +2880 +2880 +4480 +4480 +82FC +ENDCHAR +STARTCHAR uni317D +ENCODING 12669 +BBX 14 10 0 1 +BITMAP +1084 +1084 +1084 +1084 +10FC +2884 +2884 +4484 +4484 +82FC +ENDCHAR +STARTCHAR uni317E +ENCODING 12670 +BBX 15 10 0 1 +BITMAP +10FE +1010 +1010 +1010 +1010 +2828 +2828 +4444 +4444 +8282 +ENDCHAR +STARTCHAR uni317F +ENCODING 12671 +BBX 11 10 2 1 +BITMAP +0400 +0400 +0A00 +0A00 +1100 +1100 +2080 +2080 +4040 +FFE0 +ENDCHAR +STARTCHAR uni3180 +ENCODING 12672 +BBX 13 11 1 1 +BITMAP +1020 +1020 +1020 +78F0 +8508 +8508 +8508 +8508 +8508 +8508 +78F0 +ENDCHAR +STARTCHAR uni3181 +ENCODING 12673 +BBX 11 11 2 1 +BITMAP +0400 +0400 +0400 +3F80 +4040 +8020 +8020 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni3182 +ENCODING 12674 +BBX 14 10 1 2 +BITMAP +1000 +11FC +1020 +7820 +8420 +8450 +8450 +8488 +8488 +7904 +ENDCHAR +STARTCHAR uni3183 +ENCODING 12675 +BBX 14 11 1 1 +BITMAP +1000 +1020 +1020 +7850 +8450 +8450 +8488 +8488 +8488 +8504 +79FC +ENDCHAR +STARTCHAR uni3184 +ENCODING 12676 +BBX 11 14 2 -1 +BITMAP +FFE0 +2080 +2080 +2080 +2080 +2080 +FFE0 +0000 +3F80 +4040 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni3185 +ENCODING 12677 +BBX 15 10 0 1 +BITMAP +3C78 +0000 +FFFE +0000 +3C78 +4284 +4284 +4284 +4284 +3C78 +ENDCHAR +STARTCHAR uni3186 +ENCODING 12678 +BBX 11 9 2 1 +BITMAP +FFE0 +0000 +1F00 +2080 +4040 +4040 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni3187 +ENCODING 12679 +BBX 15 16 0 -2 +BITMAP +0008 +0008 +0008 +0008 +0008 +000E +0008 +0008 +0008 +1208 +120E +1208 +1208 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uni3188 +ENCODING 12680 +BBX 14 16 0 -2 +BITMAP +0024 +0024 +0024 +0024 +0024 +003C +0024 +0024 +0024 +2424 +243C +2424 +2424 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uni3189 +ENCODING 12681 +BBX 13 16 0 -2 +BITMAP +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +1208 +1208 +1208 +1208 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uni318A +ENCODING 12682 +BBX 13 16 0 -2 +BITMAP +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +FFC8 +1208 +1208 +1208 +1208 +1208 +1208 +ENDCHAR +STARTCHAR uni318B +ENCODING 12683 +BBX 14 16 0 -2 +BITMAP +0024 +0024 +0024 +0024 +0024 +0024 +0024 +0024 +0024 +FFA4 +2424 +25E4 +2424 +25E4 +2424 +2424 +ENDCHAR +STARTCHAR uni318C +ENCODING 12684 +BBX 13 16 0 -2 +BITMAP +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +FFC8 +1208 +1208 +1208 +1208 +1208 +1208 +ENDCHAR +STARTCHAR uni318D +ENCODING 12685 +BBX 2 2 7 0 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni318E +ENCODING 12686 +BBX 8 16 5 -2 +BITMAP +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +C1 +C1 +01 +01 +ENDCHAR +STARTCHAR uni3190 +ENCODING 12688 +BBX 1 7 8 5 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni3191 +ENCODING 12689 +BBX 5 7 6 5 +BITMAP +80 +80 +80 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni3192 +ENCODING 12690 +BBX 8 1 2 8 +BITMAP +FF +ENDCHAR +STARTCHAR uni3193 +ENCODING 12691 +BBX 8 5 2 6 +BITMAP +7E +00 +00 +00 +FF +ENDCHAR +STARTCHAR uni3194 +ENCODING 12692 +BBX 10 6 2 6 +BITMAP +7F80 +0000 +3F00 +0000 +0000 +FFC0 +ENDCHAR +STARTCHAR uni3195 +ENCODING 12693 +BBX 9 6 2 6 +BITMAP +FF80 +9480 +9480 +A380 +8080 +FF80 +ENDCHAR +STARTCHAR uni3196 +ENCODING 12694 +BBX 8 7 2 5 +BITMAP +10 +10 +1E +10 +10 +10 +FF +ENDCHAR +STARTCHAR uni3197 +ENCODING 12695 +BBX 8 9 2 4 +BITMAP +10 +10 +FF +91 +91 +FF +10 +10 +10 +ENDCHAR +STARTCHAR uni3198 +ENCODING 12696 +BBX 8 7 2 5 +BITMAP +FF +10 +18 +14 +10 +10 +10 +ENDCHAR +STARTCHAR uni3199 +ENCODING 12697 +BBX 8 8 2 4 +BITMAP +FF +89 +FF +89 +FF +89 +08 +08 +ENDCHAR +STARTCHAR uni319A +ENCODING 12698 +BBX 8 7 2 5 +BITMAP +FE +0C +10 +20 +41 +81 +7F +ENDCHAR +STARTCHAR uni319B +ENCODING 12699 +BBX 9 7 2 5 +BITMAP +FF80 +0800 +FF80 +8880 +8C80 +9280 +A180 +ENDCHAR +STARTCHAR uni319C +ENCODING 12700 +BBX 9 8 2 4 +BITMAP +FF80 +0800 +0800 +0800 +0800 +0800 +2800 +1000 +ENDCHAR +STARTCHAR uni319D +ENCODING 12701 +BBX 9 8 2 4 +BITMAP +7F00 +0800 +0800 +FF80 +0800 +1400 +2380 +4100 +ENDCHAR +STARTCHAR uni319E +ENCODING 12702 +BBX 11 8 2 5 +BITMAP +2100 +2540 +F7C0 +2D40 +2540 +24A0 +3420 +C3E0 +ENDCHAR +STARTCHAR uni319F +ENCODING 12703 +BBX 8 8 2 5 +BITMAP +10 +10 +10 +10 +28 +24 +42 +81 +ENDCHAR +STARTCHAR uni31A0 +ENCODING 12704 +BBX 11 14 2 -1 +BITMAP +2000 +2000 +4000 +FFE0 +0020 +0020 +0020 +0020 +0020 +0020 +03C0 +0440 +0480 +0300 +ENDCHAR +STARTCHAR uni31A1 +ENCODING 12705 +BBX 11 13 2 -1 +BITMAP +7FE0 +0820 +0820 +0820 +0820 +0840 +0A40 +0980 +0800 +7800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni31A2 +ENCODING 12706 +BBX 7 14 4 -1 +BITMAP +02 +42 +42 +42 +42 +42 +86 +9A +E2 +02 +1E +22 +22 +1C +ENDCHAR +STARTCHAR uni31A3 +ENCODING 12707 +BBX 12 13 2 -1 +BITMAP +1100 +1100 +2200 +2200 +4400 +4400 +8800 +4400 +4400 +22E0 +2310 +1110 +10E0 +ENDCHAR +STARTCHAR uni31A4 +ENCODING 12708 +BBX 13 12 1 0 +BITMAP +1000 +1000 +1000 +FFF8 +1008 +1010 +1020 +1000 +1000 +1000 +1000 +0FF0 +ENDCHAR +STARTCHAR uni31A5 +ENCODING 12709 +BBX 13 13 1 -1 +BITMAP +1000 +1000 +1000 +FFF8 +1008 +1010 +1020 +1000 +1030 +1048 +1048 +0FF0 +0010 +ENDCHAR +STARTCHAR uni31A6 +ENCODING 12710 +BBX 13 12 1 0 +BITMAP +FFF8 +0400 +0400 +0800 +1000 +2000 +4000 +4040 +2080 +1100 +0A00 +0400 +ENDCHAR +STARTCHAR uni31A7 +ENCODING 12711 +BBX 13 12 1 0 +BITMAP +FFF8 +0400 +0400 +0800 +1000 +2000 +4180 +4240 +2280 +1100 +0AC0 +0400 +ENDCHAR +STARTCHAR uni31A8 +ENCODING 12712 +BBX 13 12 1 0 +BITMAP +2020 +1040 +1040 +0880 +0880 +0500 +0500 +03F8 +0500 +0880 +3060 +C018 +ENDCHAR +STARTCHAR uni31A9 +ENCODING 12713 +BBX 10 13 2 -1 +BITMAP +8040 +4080 +2100 +1200 +0C00 +0800 +0800 +0800 +3E00 +4800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni31AA +ENCODING 12714 +BBX 13 7 1 4 +BITMAP +0030 +0048 +0088 +0088 +FFF0 +0080 +0080 +ENDCHAR +STARTCHAR uni31AB +ENCODING 12715 +BBX 14 13 1 -1 +BITMAP +2020 +1040 +1040 +0880 +0880 +0500 +0500 +0200 +0518 +08A4 +3044 +C0B8 +0080 +ENDCHAR +STARTCHAR uni31AC +ENCODING 12716 +BBX 11 11 2 1 +BITMAP +8000 +FFE0 +8420 +8420 +8420 +8420 +8420 +8420 +8420 +8420 +8420 +ENDCHAR +STARTCHAR uni31AD +ENCODING 12717 +BBX 14 12 1 0 +BITMAP +FFF8 +1240 +1240 +1240 +1240 +1240 +1240 +1240 +1240 +1240 +2240 +C23C +ENDCHAR +STARTCHAR uni31AE +ENCODING 12718 +BBX 13 13 1 -1 +BITMAP +FFF8 +0200 +2200 +2200 +4200 +7FF0 +0210 +0210 +0410 +6410 +9820 +9420 +6440 +ENDCHAR +STARTCHAR uni31AF +ENCODING 12719 +BBX 12 13 2 -1 +BITMAP +0200 +0400 +0800 +1040 +2080 +7F00 +0200 +0460 +1890 +6090 +FFE0 +0040 +0030 +ENDCHAR +STARTCHAR uni31B0 +ENCODING 12720 +BBX 13 14 1 -1 +BITMAP +3060 +0880 +0500 +FFF8 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +ENDCHAR +STARTCHAR uni31B1 +ENCODING 12721 +BBX 13 13 1 -1 +BITMAP +FFF8 +0200 +FFF8 +8208 +8E08 +9008 +A008 +A088 +9108 +8A08 +8408 +8008 +8008 +ENDCHAR +STARTCHAR uni31B2 +ENCODING 12722 +BBX 13 13 1 -1 +BITMAP +FFF8 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni31B3 +ENCODING 12723 +BBX 7 14 4 -1 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +08 +3E +48 +88 +88 +70 +ENDCHAR +STARTCHAR uni31B4 +ENCODING 12724 +BBX 6 8 5 0 +BITMAP +20 +40 +FC +04 +04 +04 +28 +10 +ENDCHAR +STARTCHAR uni31B5 +ENCODING 12725 +BBX 7 8 4 0 +BITMAP +10 +20 +7E +12 +22 +42 +94 +08 +ENDCHAR +STARTCHAR uni31B6 +ENCODING 12726 +BBX 6 8 5 0 +BITMAP +FC +20 +40 +F8 +08 +08 +28 +10 +ENDCHAR +STARTCHAR uni31B7 +ENCODING 12727 +BBX 7 7 4 0 +BITMAP +7E +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni31B8 +ENCODING 12728 +BBX 11 11 2 1 +BITMAP +FFE0 +0040 +0080 +0100 +0200 +0400 +0800 +1000 +2000 +4000 +FFE0 +ENDCHAR +STARTCHAR uni31B9 +ENCODING 12729 +BBX 11 7 2 4 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +FFE0 +ENDCHAR +STARTCHAR uni31BA +ENCODING 12730 +BBX 13 9 1 2 +BITMAP +0200 +0200 +0200 +0200 +FFF8 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni31BB +ENCODING 12731 +BBX 7 9 3 0 +BITMAP +22 +22 +44 +44 +88 +44 +44 +22 +22 +ENDCHAR +STARTCHAR uni31BC +ENCODING 12732 +BBX 11 12 2 0 +BITMAP +0800 +10C0 +20C0 +3100 +0B00 +0600 +0600 +0900 +1180 +20C0 +4060 +8060 +ENDCHAR +STARTCHAR uni31BD +ENCODING 12733 +BBX 11 13 2 0 +BITMAP +FFE0 +0800 +10C0 +20C0 +3100 +0B00 +0600 +0600 +0900 +1180 +20C0 +4060 +8060 +ENDCHAR +STARTCHAR uni31BE +ENCODING 12734 +BBX 11 13 2 -1 +BITMAP +4040 +4040 +2080 +2080 +2080 +1100 +FFE0 +1100 +0900 +0A00 +0A00 +0600 +0400 +ENDCHAR +STARTCHAR uni31BF +ENCODING 12735 +BBX 11 11 2 0 +BITMAP +1100 +1100 +1080 +1080 +1040 +1040 +2040 +2020 +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni31C0 +ENCODING 12736 +BBX 8 5 3 5 +BITMAP +01 +06 +18 +E0 +40 +ENDCHAR +STARTCHAR uni31C1 +ENCODING 12737 +BBX 3 16 5 -2 +BITMAP +80 +40 +40 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni31C2 +ENCODING 12738 +BBX 9 15 3 -1 +BITMAP +8000 +8000 +8000 +8000 +4000 +4000 +4000 +2000 +2000 +1000 +1000 +0800 +0480 +0280 +0100 +ENDCHAR +STARTCHAR uni31C3 +ENCODING 12739 +BBX 15 6 0 3 +BITMAP +8000 +4000 +2000 +1804 +0602 +01FC +ENDCHAR +STARTCHAR uni31C4 +ENCODING 12740 +BBX 8 13 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +FF +ENDCHAR +STARTCHAR uni31C5 +ENCODING 12741 +BBX 10 12 2 0 +BITMAP +FC00 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +07C0 +ENDCHAR +STARTCHAR uni31C6 +ENCODING 12742 +BBX 10 12 2 -1 +BITMAP +FFC0 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni31C7 +ENCODING 12743 +BBX 10 14 3 -2 +BITMAP +FFC0 +0040 +0040 +0040 +0040 +0080 +0080 +0100 +0100 +0200 +0200 +0400 +0800 +1000 +ENDCHAR +STARTCHAR uni31C8 +ENCODING 12744 +BBX 14 14 1 -2 +BITMAP +FF00 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0104 +0104 +0104 +00F8 +ENDCHAR +STARTCHAR uni31C9 +ENCODING 12745 +BBX 11 15 2 -2 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +FFE0 +0020 +0020 +0020 +0020 +0040 +0040 +0280 +0100 +ENDCHAR +STARTCHAR uni31CA +ENCODING 12746 +BBX 8 11 4 1 +BITMAP +F8 +08 +08 +08 +08 +08 +08 +09 +0A +0C +08 +ENDCHAR +STARTCHAR uni31CB +ENCODING 12747 +BBX 12 14 2 -2 +BITMAP +FFF0 +0020 +0040 +0080 +01F0 +0010 +0010 +0010 +0020 +0020 +0040 +0080 +0100 +0200 +ENDCHAR +STARTCHAR uni31CC +ENCODING 12748 +BBX 5 13 6 0 +BITMAP +F8 +08 +10 +20 +20 +10 +10 +08 +08 +08 +08 +50 +20 +ENDCHAR +STARTCHAR uni31CD +ENCODING 12749 +BBX 14 9 1 2 +BITMAP +FF00 +0100 +0100 +0100 +0100 +0100 +0100 +0080 +007C +ENDCHAR +STARTCHAR uni31CE +ENCODING 12750 +BBX 10 13 2 -1 +BITMAP +FE00 +0200 +0200 +0200 +0200 +03C0 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni31CF +ENCODING 12751 +BBX 10 15 4 -2 +BITMAP +8000 +8000 +8000 +8000 +4000 +4000 +2000 +2000 +1000 +1000 +0800 +0400 +0200 +0140 +0080 +ENDCHAR +STARTCHAR uni31D0 +ENCODING 12752 +BBX 14 1 1 6 +BITMAP +FFFC +ENDCHAR +STARTCHAR uni31D1 +ENCODING 12753 +BBX 1 14 7 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni31D2 +ENCODING 12754 +BBX 6 8 5 4 +BITMAP +04 +04 +08 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni31D3 +ENCODING 12755 +BBX 6 14 4 -1 +BITMAP +04 +04 +04 +04 +04 +04 +04 +08 +08 +10 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni31D4 +ENCODING 12756 +BBX 5 6 5 4 +BITMAP +80 +40 +20 +10 +08 +08 +ENDCHAR +STARTCHAR uni31D5 +ENCODING 12757 +BBX 10 11 3 0 +BITMAP +FFC0 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni31D6 +ENCODING 12758 +BBX 13 3 1 8 +BITMAP +FFF8 +0010 +0020 +ENDCHAR +STARTCHAR uni31D7 +ENCODING 12759 +BBX 11 12 3 0 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +FFE0 +ENDCHAR +STARTCHAR uni31D8 +ENCODING 12760 +BBX 10 13 2 0 +BITMAP +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +FFC0 +0040 +ENDCHAR +STARTCHAR uni31D9 +ENCODING 12761 +BBX 6 13 5 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +84 +88 +90 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni31DA +ENCODING 12762 +BBX 3 14 6 -1 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni31DB +ENCODING 12763 +BBX 6 12 5 1 +BITMAP +08 +08 +10 +10 +20 +40 +80 +40 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni31DC +ENCODING 12764 +BBX 10 10 3 3 +BITMAP +0200 +0200 +0400 +0400 +0800 +0800 +1000 +2000 +4000 +FFC0 +ENDCHAR +STARTCHAR uni31DD +ENCODING 12765 +BBX 13 14 2 -1 +BITMAP +2000 +2000 +5000 +9000 +0800 +0800 +0400 +0400 +0200 +0100 +0080 +0040 +0028 +0010 +ENDCHAR +STARTCHAR uni31DE +ENCODING 12766 +BBX 11 14 2 -1 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +FFE0 +0020 +0020 +0020 +0020 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni31DF +ENCODING 12767 +BBX 9 14 4 -1 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8080 +8080 +8080 +7F80 +ENDCHAR +STARTCHAR uni31E0 +ENCODING 12768 +BBX 14 14 1 -1 +BITMAP +FFE0 +0040 +0080 +0100 +0200 +0400 +0800 +1000 +2000 +4000 +8008 +8008 +800C +7FF8 +ENDCHAR +STARTCHAR uni31E1 +ENCODING 12769 +BBX 12 13 2 -1 +BITMAP +FFE0 +0040 +0040 +0080 +01F0 +0010 +0010 +0010 +0010 +0010 +0020 +00A0 +0040 +ENDCHAR +STARTCHAR uni31E2 +ENCODING 12770 +BBX 10 13 2 -1 +BITMAP +0040 +0040 +0080 +0080 +0100 +0100 +0200 +0200 +0400 +0400 +8800 +9000 +E000 +ENDCHAR +STARTCHAR uni31E3 +ENCODING 12771 +BBX 13 9 1 2 +BITMAP +3FE0 +4010 +8008 +8008 +8008 +8008 +8008 +4010 +3FE0 +ENDCHAR +STARTCHAR uni31E4 +ENCODING 12772 +BBX 13 13 1 -1 +BITMAP +FF00 +0100 +0100 +0100 +0100 +0100 +0100 +0080 +0080 +0048 +0028 +0018 +0008 +ENDCHAR +STARTCHAR uni31E5 +ENCODING 12773 +BBX 9 14 4 -1 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8000 +FF80 +0080 +0080 +0100 +0200 +0C00 +7000 +ENDCHAR +STARTCHAR uni31EF +ENCODING 12783 +BBX 15 16 0 -2 +BITMAP +DBB6 +0000 +8002 +9552 +0010 +9002 +8012 +1000 +8552 +9002 +8012 +1000 +9552 +8002 +0000 +DBB6 +ENDCHAR +STARTCHAR uni31F0 +ENCODING 12784 +BBX 6 9 1 -1 +BITMAP +80 +5C +64 +48 +88 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni31F1 +ENCODING 12785 +BBX 7 8 1 -1 +BITMAP +C0 +20 +00 +C2 +24 +08 +90 +60 +ENDCHAR +STARTCHAR uni31F2 +ENCODING 12786 +BBX 7 8 0 -1 +BITMAP +8E +72 +04 +04 +08 +14 +22 +C2 +ENDCHAR +STARTCHAR uni31F3 +ENCODING 12787 +BBX 4 9 2 -1 +BITMAP +80 +80 +80 +C0 +A0 +90 +80 +80 +80 +ENDCHAR +STARTCHAR uni31F4 +ENCODING 12788 +BBX 7 8 0 -1 +BITMAP +8E +72 +04 +34 +08 +14 +22 +C2 +ENDCHAR +STARTCHAR uni31F5 +ENCODING 12789 +BBX 9 6 3 1 +BITMAP +2400 +1200 +1100 +2100 +4080 +8080 +ENDCHAR +STARTCHAR uni31F6 +ENCODING 12790 +BBX 6 9 1 -1 +BITMAP +80 +80 +80 +9C +E0 +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni31F7 +ENCODING 12791 +BBX 7 8 0 -1 +BITMAP +8E +72 +04 +04 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni31F8 +ENCODING 12792 +BBX 8 4 4 1 +BITMAP +20 +50 +8C +03 +ENDCHAR +STARTCHAR uni31F9 +ENCODING 12793 +BBX 7 10 0 -1 +BITMAP +20 +10 +1E +F0 +10 +54 +92 +10 +50 +30 +ENDCHAR +STARTCHAR uni31FA +ENCODING 12794 +BBX 10 9 3 -1 +BITMAP +1000 +0800 +0800 +0800 +0800 +1000 +1100 +A680 +7840 +ENDCHAR +STARTCHAR uni31FB +ENCODING 12795 +BBX 7 9 0 -1 +BITMAP +8C +70 +00 +8E +72 +02 +04 +08 +70 +ENDCHAR +STARTCHAR uni31FC +ENCODING 12796 +BBX 6 8 0 -1 +BITMAP +88 +44 +44 +44 +04 +04 +08 +30 +ENDCHAR +STARTCHAR uni31FD +ENCODING 12797 +BBX 10 9 4 -1 +BITMAP +2400 +1200 +1200 +1200 +1200 +1240 +2240 +4280 +8300 +ENDCHAR +STARTCHAR uni31FE +ENCODING 12798 +BBX 6 8 0 -1 +BITMAP +80 +40 +40 +40 +44 +48 +50 +60 +ENDCHAR +STARTCHAR uni31FF +ENCODING 12799 +BBX 9 8 3 0 +BITMAP +0780 +F880 +8080 +8080 +8100 +8100 +8F80 +F000 +ENDCHAR +STARTCHAR uni3200 +ENCODING 12800 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8004 +9FE4 +8024 +8024 +8024 +8024 +8024 +8024 +8024 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni3201 +ENCODING 12801 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8004 +9004 +9004 +9004 +9004 +9004 +9004 +9004 +9FE4 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni3202 +ENCODING 12802 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8004 +9FE4 +9004 +9004 +9004 +9004 +9004 +9004 +9FE4 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni3203 +ENCODING 12803 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8004 +9FE4 +8024 +8024 +9FE4 +9004 +9004 +9004 +9FE4 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni3204 +ENCODING 12804 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8004 +9FE4 +9024 +9024 +9024 +9024 +9024 +9024 +9FE4 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni3205 +ENCODING 12805 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8004 +9024 +9024 +9024 +9FE4 +9024 +9024 +9024 +9FE4 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni3206 +ENCODING 12806 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8104 +8104 +8104 +8104 +8284 +8284 +8444 +8824 +9014 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni3207 +ENCODING 12807 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8004 +8784 +8844 +9024 +9024 +9024 +9024 +8844 +8784 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni3208 +ENCODING 12808 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8004 +9FF4 +8104 +8104 +8284 +8284 +8444 +8824 +9014 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni3209 +ENCODING 12809 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +87C4 +8004 +9FF4 +8104 +8104 +8284 +8444 +8824 +9014 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni320A +ENCODING 12810 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8004 +9FE4 +8024 +8024 +8024 +9FE4 +8024 +8024 +8024 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni320B +ENCODING 12811 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8004 +9FE4 +9004 +9004 +9FE4 +9004 +9004 +9004 +9FE4 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni320C +ENCODING 12812 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8004 +9FE4 +8484 +8484 +8484 +8484 +8484 +8484 +9FE4 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni320D +ENCODING 12813 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8784 +8004 +9FE4 +8004 +8784 +8844 +8844 +8844 +8784 +8004 +4008 +3030 +ENDCHAR +STARTCHAR uni320E +ENCODING 12814 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8044 +9E44 +8244 +8244 +8474 +8444 +8844 +9044 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni320F +ENCODING 12815 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8044 +9044 +9044 +9044 +9074 +9044 +9044 +9F44 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni3210 +ENCODING 12816 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8044 +9E44 +9044 +9044 +9074 +9044 +9044 +9E44 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni3211 +ENCODING 12817 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8044 +9E44 +8244 +8244 +9E74 +9044 +9044 +9E44 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni3212 +ENCODING 12818 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8044 +9E44 +9244 +9244 +9274 +9244 +9244 +9E44 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni3213 +ENCODING 12819 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8044 +9244 +9244 +9E44 +9274 +9244 +9244 +9E44 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni3214 +ENCODING 12820 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8044 +8444 +8444 +8444 +8A74 +8A44 +9144 +9144 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni3215 +ENCODING 12821 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8044 +8C44 +9244 +9244 +9274 +9244 +9244 +8C44 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni3216 +ENCODING 12822 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8044 +9F44 +8444 +8444 +8A74 +8A44 +9144 +9144 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni3217 +ENCODING 12823 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8E44 +8044 +9F44 +8444 +8474 +8A44 +8A44 +9144 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni3218 +ENCODING 12824 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8044 +9E44 +8244 +8244 +9C74 +8444 +8844 +9044 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni3219 +ENCODING 12825 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8044 +9E44 +9044 +9044 +9E74 +9044 +9044 +9E44 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni321A +ENCODING 12826 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8044 +BF44 +9244 +9244 +9274 +9244 +9244 +BF44 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni321B +ENCODING 12827 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8E44 +8044 +9F44 +8044 +8E74 +9144 +9144 +8E44 +8044 +8044 +4008 +3030 +ENDCHAR +STARTCHAR uni321C +ENCODING 12828 +BBX 14 14 1 -1 +BITMAP +3030 +4008 +8FE4 +8104 +8284 +8444 +8824 +8004 +9FF4 +8104 +8104 +810C +4108 +3030 +ENDCHAR +STARTCHAR uni321D +ENCODING 12829 +BBX 15 14 0 -1 +BITMAP +3018 +4004 +99EA +A44A +A45A +A4AA +992A +800A +888A +8882 +BE82 +80FA +4004 +3018 +ENDCHAR +STARTCHAR uni321E +ENCODING 12830 +BBX 15 15 0 -1 +BITMAP +3018 +4004 +8062 +99FA +A462 +A492 +A492 +9862 +8002 +89FA +8822 +BE22 +8022 +4004 +3018 +ENDCHAR +STARTCHAR uni3220 +ENCODING 12832 +BBX 15 14 0 -1 +BITMAP +2008 +4004 +8002 +8002 +8002 +8012 +BFFA +8002 +8002 +8002 +8002 +8002 +4004 +2008 +ENDCHAR +STARTCHAR uni3221 +ENCODING 12833 +BBX 15 14 0 -1 +BITMAP +2008 +4004 +8022 +9FF2 +8002 +8002 +8002 +8002 +8012 +BFFA +8002 +8002 +4004 +2008 +ENDCHAR +STARTCHAR uni3222 +ENCODING 12834 +BBX 15 14 0 -1 +BITMAP +2008 +4024 +9FF2 +8002 +8002 +8042 +8FE2 +8002 +8002 +8012 +BFFA +8002 +4004 +2008 +ENDCHAR +STARTCHAR uni3223 +ENCODING 12835 +BBX 15 14 0 -1 +BITMAP +2008 +4004 +8002 +BFFA +A44A +A44A +A44A +A44A +A44A +BFFA +8002 +8002 +4004 +2008 +ENDCHAR +STARTCHAR uni3224 +ENCODING 12836 +BBX 15 14 0 -1 +BITMAP +2008 +4024 +9FF2 +8202 +8202 +8222 +9FF2 +8422 +8422 +8422 +8422 +BFFA +4004 +2008 +ENDCHAR +STARTCHAR uni3225 +ENCODING 12837 +BBX 15 14 0 -1 +BITMAP +2008 +4004 +8202 +8102 +8012 +BFFA +8002 +8002 +8442 +8422 +8812 +9012 +4004 +2008 +ENDCHAR +STARTCHAR uni3226 +ENCODING 12838 +BBX 15 14 0 -1 +BITMAP +2008 +4204 +8202 +8202 +8212 +827A +8382 +BE02 +8202 +8202 +8222 +8222 +41E4 +2008 +ENDCHAR +STARTCHAR uni3227 +ENCODING 12839 +BBX 15 14 0 -1 +BITMAP +2008 +4084 +8482 +8482 +8482 +8482 +8482 +8842 +8822 +901A +A012 +8002 +4004 +2008 +ENDCHAR +STARTCHAR uni3228 +ENCODING 12840 +BBX 15 14 0 -1 +BITMAP +2008 +4204 +8202 +8242 +9FE2 +8242 +8242 +8242 +8442 +844A +884A +903A +4004 +2008 +ENDCHAR +STARTCHAR uni3229 +ENCODING 12841 +BBX 15 14 0 -1 +BITMAP +2008 +4104 +8102 +8102 +8112 +BFFA +8102 +8102 +8102 +8102 +8102 +8102 +4004 +2008 +ENDCHAR +STARTCHAR uni322A +ENCODING 12842 +BBX 15 14 0 -1 +BITMAP +3018 +47F4 +8412 +8412 +87F2 +8412 +8412 +87F2 +8412 +8412 +8852 +9022 +4004 +3018 +ENDCHAR +STARTCHAR uni322B +ENCODING 12843 +BBX 15 14 0 -1 +BITMAP +3018 +4104 +8102 +8912 +8922 +8942 +9102 +8282 +8282 +8442 +8822 +B01A +4004 +3018 +ENDCHAR +STARTCHAR uni322C +ENCODING 12844 +BBX 15 14 0 -1 +BITMAP +3018 +4104 +8102 +8112 +BDA2 +8542 +8542 +8922 +8922 +9112 +A50A +8202 +4004 +3018 +ENDCHAR +STARTCHAR uni322D +ENCODING 12845 +BBX 15 14 0 -1 +BITMAP +3018 +4104 +8102 +8102 +BFFA +8102 +8382 +8542 +8922 +B11A +8112 +8102 +4004 +3018 +ENDCHAR +STARTCHAR uni322E +ENCODING 12846 +BBX 15 14 0 -1 +BITMAP +3018 +4104 +8282 +8442 +8822 +B7DA +8102 +9FF2 +8102 +8922 +8542 +BFFA +4004 +3018 +ENDCHAR +STARTCHAR uni322F +ENCODING 12847 +BBX 15 14 0 -1 +BITMAP +3018 +4104 +8102 +8102 +8102 +9FF2 +8102 +8102 +8102 +8102 +8102 +BFFA +4004 +3018 +ENDCHAR +STARTCHAR uni3230 +ENCODING 12848 +BBX 15 14 0 -1 +BITMAP +3018 +4004 +8FE2 +8822 +8822 +8822 +8FE2 +8822 +8822 +8822 +8FE2 +8822 +4004 +3018 +ENDCHAR +STARTCHAR uni3231 +ENCODING 12849 +BBX 15 14 0 -1 +BITMAP +3018 +4844 +8942 +BDF2 +8A42 +9C42 +9BFA +A842 +A8E2 +8952 +8A4A +8842 +4004 +3018 +ENDCHAR +STARTCHAR uni3232 +ENCODING 12850 +BBX 15 14 0 -1 +BITMAP +3018 +4204 +BFFA +8402 +87E2 +8C22 +97E2 +A422 +87E2 +8422 +8422 +8462 +4004 +3018 +ENDCHAR +STARTCHAR uni3233 +ENCODING 12851 +BBX 15 14 0 -1 +BITMAP +3018 +5044 +8842 +BE42 +8442 +89F2 +8C42 +9A42 +A842 +8842 +8842 +8BFA +4004 +3018 +ENDCHAR +STARTCHAR uni3234 +ENCODING 12852 +BBX 15 14 0 -1 +BITMAP +3018 +4404 +87F2 +8422 +8A42 +9182 +8102 +87F2 +BC12 +8412 +8412 +87F2 +4004 +3018 +ENDCHAR +STARTCHAR uni3235 +ENCODING 12853 +BBX 15 14 0 -1 +BITMAP +3018 +4844 +A9F2 +BC42 +A842 +ABFA +8C22 +9BFA +A922 +88A2 +8822 +88E2 +4004 +3018 +ENDCHAR +STARTCHAR uni3236 +ENCODING 12854 +BBX 15 14 0 -1 +BITMAP +3018 +4014 +9E12 +93FA +9E12 +9232 +9E52 +9292 +9F12 +8012 +9252 +A122 +4004 +3018 +ENDCHAR +STARTCHAR uni3237 +ENCODING 12855 +BBX 15 14 0 -1 +BITMAP +3018 +51F4 +8912 +BF12 +8312 +85F2 +8CA2 +9AA2 +AAA2 +88AA +892A +8A1A +4004 +3018 +ENDCHAR +STARTCHAR uni3238 +ENCODING 12856 +BBX 15 14 0 -1 +BITMAP +3018 +5214 +8912 +8922 +9FFA +910A +A102 +9FF2 +8112 +8212 +8412 +9862 +4004 +3018 +ENDCHAR +STARTCHAR uni3239 +ENCODING 12857 +BBX 15 14 0 -1 +BITMAP +3018 +44A4 +8492 +8882 +88FA +9B82 +A882 +8882 +8842 +884A +882A +881A +4004 +3018 +ENDCHAR +STARTCHAR uni323A +ENCODING 12858 +BBX 15 14 0 -1 +BITMAP +3018 +4034 +BBC2 +A84A +AA4A +A952 +AFFA +B842 +A842 +8042 +8042 +81C2 +4004 +3018 +ENDCHAR +STARTCHAR uni323B +ENCODING 12859 +BBX 15 14 0 -1 +BITMAP +3018 +4914 +84A2 +9FFA +900A +87E2 +8042 +8082 +9FFA +8082 +8082 +8382 +4004 +3018 +ENDCHAR +STARTCHAR uni323C +ENCODING 12860 +BBX 15 14 0 -1 +BITMAP +3018 +5F24 +9422 +9F3A +9142 +9F52 +940A +9F82 +8002 +9FF2 +9292 +BFFA +4004 +3018 +ENDCHAR +STARTCHAR uni323D +ENCODING 12861 +BBX 15 14 0 -1 +BITMAP +3018 +4104 +8182 +8242 +8422 +889A +B082 +84E2 +8482 +8482 +8482 +9FFA +4004 +3018 +ENDCHAR +STARTCHAR uni323E +ENCODING 12862 +BBX 15 14 0 -1 +BITMAP +3018 +5104 +8BFA +844A +9FE2 +8C3A +87E2 +8422 +87E2 +8422 +87E2 +9C3A +4004 +3018 +ENDCHAR +STARTCHAR uni323F +ENCODING 12863 +BBX 15 14 0 -1 +BITMAP +3018 +4884 +89F2 +8892 +BE92 +8922 +8922 +8FFA +8AAA +8AAA +8CCA +8912 +4004 +3018 +ENDCHAR +STARTCHAR uni3240 +ENCODING 12864 +BBX 15 14 0 -1 +BITMAP +3018 +48FC +8F92 +92A2 +AA42 +9422 +8BD2 +900A +AFF2 +84A2 +8A92 +B10A +4004 +3018 +ENDCHAR +STARTCHAR uni3241 +ENCODING 12865 +BBX 15 14 0 -1 +BITMAP +3018 +4444 +8442 +8842 +8FFA +9842 +A8E2 +88E2 +8952 +8A4A +8C42 +8842 +4004 +3018 +ENDCHAR +STARTCHAR uni3242 +ENCODING 12866 +BBX 15 14 0 -1 +BITMAP +3018 +4204 +8402 +8FE2 +8822 +8822 +8FE2 +8822 +8FE2 +8822 +8822 +8FE2 +4004 +3018 +ENDCHAR +STARTCHAR uni3243 +ENCODING 12867 +BBX 15 14 0 -1 +BITMAP +3018 +5FF4 +8202 +8442 +8822 +9FF2 +8102 +8102 +8FE2 +8102 +8102 +BFF2 +4004 +3018 +ENDCHAR +STARTCHAR uni3244 +ENCODING 12868 +BBX 15 15 0 -2 +BITMAP +3FF8 +4004 +BEFA +A28A +BEFA +A28A +BEFA +A00A +A7CA +A44A +A44A +A7CA +A01A +4004 +3FF8 +ENDCHAR +STARTCHAR uni3245 +ENCODING 12869 +BBX 15 15 0 -2 +BITMAP +3FF8 +4004 +8442 +8442 +8842 +93FA +BE4A +844A +884A +924A +BD4A +90AA +8112 +4004 +3FF8 +ENDCHAR +STARTCHAR uni3246 +ENCODING 12870 +BBX 15 15 0 -2 +BITMAP +3FF8 +4004 +8202 +8102 +BFFA +8442 +8442 +8442 +8282 +8282 +8102 +86C2 +B83A +4004 +3FF8 +ENDCHAR +STARTCHAR uni3247 +ENCODING 12871 +BBX 15 15 0 -2 +BITMAP +3FF8 +4004 +9EF2 +A522 +9FE2 +8942 +9FE2 +8122 +BFFA +8122 +9FE2 +8102 +8302 +4004 +3FF8 +ENDCHAR +STARTCHAR uni3248 +ENCODING 12872 +BBX 15 14 0 -1 +BITMAP +FC7E +E00E +C006 +8872 +988A +0888 +0888 +0888 +888A +888A +BE72 +C006 +E00E +FC7E +ENDCHAR +STARTCHAR uni3249 +ENCODING 12873 +BBX 15 14 0 -1 +BITMAP +FC7E +E00E +C006 +9C72 +A28A +0288 +0288 +1C88 +A08A +A08A +BE72 +C006 +E00E +FC7E +ENDCHAR +STARTCHAR uni324A +ENCODING 12874 +BBX 15 14 0 -1 +BITMAP +FC7E +E00E +C006 +9C72 +A28A +0288 +0C88 +0288 +828A +A28A +9C72 +C006 +E00E +FC7E +ENDCHAR +STARTCHAR uni324B +ENCODING 12875 +BBX 15 14 0 -1 +BITMAP +FC7E +E00E +C006 +A472 +A48A +2488 +3E88 +0488 +848A +848A +8472 +C006 +E00E +FC7E +ENDCHAR +STARTCHAR uni324C +ENCODING 12876 +BBX 15 14 0 -1 +BITMAP +FC7E +E00E +C006 +BE72 +A08A +2088 +1C88 +0288 +828A +A28A +9C72 +C006 +E00E +FC7E +ENDCHAR +STARTCHAR uni324D +ENCODING 12877 +BBX 15 14 0 -1 +BITMAP +FC7E +E00E +C006 +9C72 +A28A +2088 +3C88 +2288 +A28A +A28A +9C72 +C006 +E00E +FC7E +ENDCHAR +STARTCHAR uni324E +ENCODING 12878 +BBX 15 14 0 -1 +BITMAP +FC7E +E00E +C006 +BE72 +A28A +0288 +0488 +0488 +888A +888A +8872 +C006 +E00E +FC7E +ENDCHAR +STARTCHAR uni324F +ENCODING 12879 +BBX 15 14 0 -1 +BITMAP +FC7E +E00E +C006 +9C72 +A28A +2288 +1C88 +2288 +A28A +A28A +9C72 +C006 +E00E +FC7E +ENDCHAR +STARTCHAR uni3250 +ENCODING 12880 +BBX 14 10 1 0 +BITMAP +EFBC +9220 +9220 +9220 +E23C +8220 +8220 +8220 +8220 +823C +ENDCHAR +STARTCHAR uni3251 +ENCODING 12881 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C22 +A262 +8222 +8222 +9C22 +A022 +A022 +BEFA +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3252 +ENCODING 12882 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C72 +A28A +820A +820A +9C72 +A082 +A082 +BEFA +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3253 +ENCODING 12883 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C72 +A28A +820A +8232 +9C0A +A00A +A08A +BE72 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3254 +ENCODING 12884 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C92 +A292 +8292 +82FA +9C12 +A012 +A012 +BE12 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3255 +ENCODING 12885 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9CFA +A282 +8282 +8272 +9C0A +A00A +A08A +BE72 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3256 +ENCODING 12886 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C72 +A28A +8282 +82F2 +9C8A +A08A +A08A +BE72 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3257 +ENCODING 12887 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9CFA +A28A +820A +8212 +9C12 +A022 +A022 +BE22 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3258 +ENCODING 12888 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C72 +A28A +828A +8272 +9C8A +A08A +A08A +BE72 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3259 +ENCODING 12889 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C72 +A28A +828A +828A +9C7A +A00A +A08A +BE72 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni325A +ENCODING 12890 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C72 +A28A +828A +8C8A +828A +828A +A28A +9C72 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni325B +ENCODING 12891 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C22 +A262 +8222 +8C22 +8222 +8222 +A222 +9CFA +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni325C +ENCODING 12892 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C72 +A28A +820A +8C0A +8272 +8282 +A282 +9CFA +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni325D +ENCODING 12893 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C72 +A28A +820A +8C32 +820A +820A +A28A +9C72 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni325E +ENCODING 12894 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C92 +A292 +8292 +8CFA +8212 +8212 +A212 +9C12 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni325F +ENCODING 12895 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9CFA +A282 +8282 +8C72 +820A +820A +A28A +9C72 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3260 +ENCODING 12896 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +9FE4 +8024 +8024 +8024 +8024 +8024 +8024 +8024 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3261 +ENCODING 12897 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +9004 +9004 +9004 +9004 +9004 +9004 +9004 +9FE4 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3262 +ENCODING 12898 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +9FE4 +9004 +9004 +9004 +9004 +9004 +9004 +9FE4 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3263 +ENCODING 12899 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +9FE4 +8024 +8024 +9FE4 +9004 +9004 +9004 +9FE4 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3264 +ENCODING 12900 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +9FE4 +9024 +9024 +9024 +9024 +9024 +9024 +9FE4 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3265 +ENCODING 12901 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +9024 +9024 +9024 +9FE4 +9024 +9024 +9024 +9FE4 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3266 +ENCODING 12902 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4108 +8104 +8104 +8104 +8284 +8284 +8444 +8824 +9014 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3267 +ENCODING 12903 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +8784 +8844 +9024 +9024 +9024 +9024 +8844 +8784 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3268 +ENCODING 12904 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +9FF4 +8104 +8104 +8284 +8284 +8444 +8824 +9014 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3269 +ENCODING 12905 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +87C4 +8004 +9FF4 +8104 +8284 +8444 +8824 +9014 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni326A +ENCODING 12906 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +9FE4 +8024 +8024 +9FE4 +8024 +8024 +8024 +8024 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni326B +ENCODING 12907 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +9FE4 +9004 +9004 +9FE4 +9004 +9004 +9004 +9FE4 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni326C +ENCODING 12908 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +9FE4 +8484 +8484 +8484 +8484 +8484 +8484 +9FE4 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni326D +ENCODING 12909 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +8784 +8004 +9FE4 +8004 +8784 +8844 +8844 +8784 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni326E +ENCODING 12910 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4048 +9E44 +8244 +8244 +8474 +8444 +8844 +9044 +8044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni326F +ENCODING 12911 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4048 +9044 +9044 +9044 +9074 +9044 +9044 +9F44 +8044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3270 +ENCODING 12912 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4048 +9E44 +9044 +9044 +9074 +9044 +9044 +9E44 +8044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3271 +ENCODING 12913 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4048 +9E44 +8244 +8244 +9E74 +9044 +9044 +9E44 +8044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3272 +ENCODING 12914 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4048 +9E44 +9244 +9244 +9274 +9244 +9244 +9E44 +8044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3273 +ENCODING 12915 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4048 +9244 +9244 +9E44 +9274 +9244 +9244 +9E44 +8044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3274 +ENCODING 12916 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4048 +8444 +8444 +8444 +8A74 +8A44 +9144 +9144 +8044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3275 +ENCODING 12917 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4048 +8C44 +9244 +9244 +9274 +9244 +9244 +8C44 +8044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3276 +ENCODING 12918 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4048 +9F44 +8444 +8444 +8A74 +8A44 +9144 +9144 +8044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3277 +ENCODING 12919 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4E48 +8044 +9F44 +8444 +8474 +8A44 +8A44 +9144 +8044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3278 +ENCODING 12920 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4048 +9E44 +8244 +8244 +9C74 +8444 +8844 +9044 +C044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3279 +ENCODING 12921 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4048 +9E44 +9044 +9044 +9E74 +9044 +9044 +9E44 +C044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni327A +ENCODING 12922 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4048 +BF44 +9244 +9244 +9274 +9244 +9244 +BF44 +8044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni327B +ENCODING 12923 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4E48 +8044 +9F44 +8044 +8E74 +9144 +9144 +8E44 +8044 +4048 +2010 +1FE0 +ENDCHAR +STARTCHAR uni327C +ENCODING 12924 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +92F4 +BB14 +9214 +AA14 +8054 +9E44 +9244 +9EF4 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni327D +ENCODING 12925 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +BE94 +8954 +9554 +A294 +8014 +BE14 +89D4 +8814 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni327E +ENCODING 12926 +BBX 13 14 1 -1 +BITMAP +1FC0 +2020 +4F90 +9048 +9048 +8F88 +8008 +BFE8 +8208 +8208 +8208 +4210 +2020 +1FC0 +ENDCHAR +STARTCHAR uni327F +ENCODING 12927 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4008 +8004 +8884 +8904 +EA00 +0E3C +8904 +8884 +8004 +4008 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3280 +ENCODING 12928 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +8002 +8002 +8012 +BFFA +8002 +8002 +8002 +8002 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3281 +ENCODING 12929 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4024 +9FF2 +8002 +8002 +8002 +8002 +8012 +BFFA +8002 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3282 +ENCODING 12930 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4024 +9FF2 +8002 +8042 +8FE2 +8002 +8012 +BFFA +8002 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3283 +ENCODING 12931 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +5FF4 +9292 +9292 +9292 +9292 +94F2 +9812 +9012 +9FF2 +5014 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3284 +ENCODING 12932 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9FF2 +8102 +8102 +8FE2 +8222 +8222 +8222 +8222 +7FFC +2008 +1FF0 +ENDCHAR +STARTCHAR uni3285 +ENCODING 12933 +BBX 15 14 0 -1 +BITMAP +1FF0 +2208 +4104 +8002 +BFFA +8002 +8442 +8422 +8812 +900A +A00A +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3286 +ENCODING 12934 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +4408 +8404 +8464 +8784 +BC04 +8404 +8404 +8424 +8424 +43E8 +2010 +1FE0 +ENDCHAR +STARTCHAR uni3287 +ENCODING 12935 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4084 +8482 +8482 +8442 +8442 +8822 +8822 +9012 +A00A +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3288 +ENCODING 12936 +BBX 15 14 0 -1 +BITMAP +1FF0 +2208 +4204 +8202 +9FC2 +8242 +8242 +8242 +8442 +844A +884A +503C +2008 +1FF0 +ENDCHAR +STARTCHAR uni3289 +ENCODING 12937 +BBX 13 14 1 -1 +BITMAP +1FC0 +2020 +4210 +8208 +8208 +BFE8 +8208 +8208 +8208 +8208 +8208 +4010 +2020 +1FC0 +ENDCHAR +STARTCHAR uni328A +ENCODING 12938 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +47F4 +8412 +8412 +87F2 +8412 +8412 +87F2 +8412 +8412 +4854 +3028 +1FF0 +ENDCHAR +STARTCHAR uni328B +ENCODING 12939 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4104 +8912 +8922 +8942 +9102 +8282 +8282 +8442 +8822 +701C +2008 +1FF0 +ENDCHAR +STARTCHAR uni328C +ENCODING 12940 +BBX 15 14 0 -1 +BITMAP +1FF0 +2108 +4104 +8112 +BDA2 +8542 +8542 +8922 +8922 +9112 +A50A +4204 +2008 +1FF0 +ENDCHAR +STARTCHAR uni328D +ENCODING 12941 +BBX 15 14 0 -1 +BITMAP +1FF0 +2108 +4104 +8102 +BFFA +8102 +8382 +8542 +8922 +B11A +8112 +4104 +2008 +1FF0 +ENDCHAR +STARTCHAR uni328E +ENCODING 12942 +BBX 15 14 0 -1 +BITMAP +1FF0 +2108 +4284 +8442 +8822 +B7DA +8102 +9FF2 +8102 +8922 +8542 +7FFC +2008 +1FF0 +ENDCHAR +STARTCHAR uni328F +ENCODING 12943 +BBX 15 14 0 -1 +BITMAP +1FF0 +2108 +4104 +8102 +8102 +9FF2 +8102 +8102 +8102 +8102 +8102 +7FFC +2008 +1FF0 +ENDCHAR +STARTCHAR uni3290 +ENCODING 12944 +BBX 13 14 2 -1 +BITMAP +1FC0 +2020 +5FD0 +9048 +9048 +9048 +9FC8 +9048 +9048 +9048 +9FC8 +5050 +2020 +1FC0 +ENDCHAR +STARTCHAR uni3291 +ENCODING 12945 +BBX 15 14 0 -1 +BITMAP +1FF0 +2848 +4944 +BDF2 +8A42 +9C42 +9BFA +A842 +A8E2 +8952 +8A4A +4844 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3292 +ENCODING 12946 +BBX 15 14 0 -1 +BITMAP +1FF0 +2208 +7FFC +8402 +87E2 +8C22 +97E2 +A422 +87E2 +8422 +8422 +4464 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3293 +ENCODING 12947 +BBX 15 14 0 -1 +BITMAP +1FF0 +3048 +4844 +BE42 +8442 +89F2 +8C42 +9A42 +A842 +8842 +8842 +4BFC +2008 +1FF0 +ENDCHAR +STARTCHAR uni3294 +ENCODING 12948 +BBX 15 14 0 -1 +BITMAP +1FF0 +2408 +47F4 +8422 +8A42 +9182 +8102 +87F2 +BC12 +8412 +8412 +47F4 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3295 +ENCODING 12949 +BBX 15 14 0 -1 +BITMAP +1FF0 +2848 +69F4 +BC42 +A842 +ABFA +8C22 +9BFA +A922 +88A2 +8822 +48E4 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3296 +ENCODING 12950 +BBX 15 14 0 -1 +BITMAP +1FF0 +2018 +5E14 +93FA +9E12 +9232 +9E52 +9292 +9F12 +8012 +9252 +6124 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3297 +ENCODING 12951 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +51F4 +8912 +BF12 +8312 +85F2 +8CA2 +9AA2 +AAAA +892A +4A1C +2008 +1FF0 +ENDCHAR +STARTCHAR uni3298 +ENCODING 12952 +BBX 15 14 0 -1 +BITMAP +1FF0 +3218 +4914 +8922 +9FFA +910A +A102 +9FF2 +8112 +8212 +8412 +5864 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3299 +ENCODING 12953 +BBX 15 14 0 -1 +BITMAP +1FF0 +2488 +7854 +8892 +BE92 +88A2 +8DA2 +9AAA +AACA +8892 +8992 +4E74 +2008 +1FF0 +ENDCHAR +STARTCHAR uni329A +ENCODING 12954 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +7FF8 +9224 +9FE4 +9224 +9FE4 +8204 +BFF4 +8214 +8414 +4898 +3070 +1FE0 +ENDCHAR +STARTCHAR uni329B +ENCODING 12955 +BBX 15 14 0 -1 +BITMAP +1FF0 +2208 +4204 +8202 +BFFA +8442 +8442 +8842 +8E82 +8182 +8262 +5C14 +2008 +1FF0 +ENDCHAR +STARTCHAR uni329C +ENCODING 12956 +BBX 15 14 0 -1 +BITMAP +1FF0 +3048 +4BFC +88A2 +83FA +BA4A +8BFA +8AAA +8AEA +8A1A +9402 +63FC +2008 +1FF0 +ENDCHAR +STARTCHAR uni329D +ENCODING 12957 +BBX 15 14 0 -1 +BITMAP +1FF0 +2BF8 +4914 +89F2 +8912 +9BFA +AC8A +8B52 +8DEA +8922 +88C2 +4F3C +2008 +1FF0 +ENDCHAR +STARTCHAR uni329E +ENCODING 12958 +BBX 14 14 1 -1 +BITMAP +1FE0 +2410 +79F8 +A114 +A114 +BD14 +A114 +A114 +A514 +B964 +A104 +4108 +2010 +1FE0 +ENDCHAR +STARTCHAR uni329F +ENCODING 12959 +BBX 15 14 0 -1 +BITMAP +1FF0 +3088 +4844 +A3FA +9442 +8442 +8842 +89F2 +B042 +9042 +9042 +53FC +2008 +1FF0 +ENDCHAR +STARTCHAR uni32A0 +ENCODING 12960 +BBX 16 14 0 -1 +BITMAP +1FF8 +2004 +41FA +BE41 +89F9 +8909 +89F9 +8909 +8FF9 +B109 +81F9 +4092 +230C +1FF8 +ENDCHAR +STARTCHAR uni32A1 +ENCODING 12961 +BBX 15 14 0 -1 +BITMAP +1FF0 +2448 +4444 +8842 +8FFA +9842 +A8E2 +88E2 +8952 +8A4A +8C42 +4844 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32A2 +ENCODING 12962 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +5FFC +900A +A412 +87E2 +8402 +87F2 +8012 +9FD2 +8012 +40A4 +2048 +1FF0 +ENDCHAR +STARTCHAR uni32A3 +ENCODING 12963 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +8002 +9FF2 +8102 +8102 +89E2 +8902 +8902 +9FF2 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32A4 +ENCODING 12964 +BBX 15 14 0 -1 +BITMAP +1FF0 +2108 +4104 +8102 +8102 +81F2 +8102 +8102 +8102 +8102 +8102 +7FFC +2008 +1FF0 +ENDCHAR +STARTCHAR uni32A5 +ENCODING 12965 +BBX 13 14 2 -1 +BITMAP +1FC0 +2220 +4210 +BFE8 +A228 +A228 +A228 +BFE8 +A228 +8208 +8208 +4210 +2020 +1FC0 +ENDCHAR +STARTCHAR uni32A6 +ENCODING 12966 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +7FFC +8102 +8102 +8182 +8142 +8122 +8122 +8102 +8102 +4104 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32A7 +ENCODING 12967 +BBX 15 14 0 -1 +BITMAP +1FF0 +2208 +4204 +BFFA +8202 +8402 +87F2 +8882 +8882 +9082 +A082 +4FFC +2008 +1FF0 +ENDCHAR +STARTCHAR uni32A8 +ENCODING 12968 +BBX 15 14 0 -1 +BITMAP +1FF0 +2108 +4104 +BFFA +8202 +8402 +87E2 +8C22 +9422 +A422 +87E2 +4424 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32A9 +ENCODING 12969 +BBX 14 14 1 -1 +BITMAP +1FE0 +2010 +7FF8 +A404 +A7E4 +A904 +BFF4 +A104 +A284 +A444 +A824 +7FF8 +2010 +1FE0 +ENDCHAR +STARTCHAR uni32AA +ENCODING 12970 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4084 +9FFA +900A +A7E2 +8002 +9FFA +8082 +88A2 +8892 +5294 +2108 +1FF0 +ENDCHAR +STARTCHAR uni32AB +ENCODING 12971 +BBX 14 14 1 -1 +BITMAP +1FE0 +3230 +4948 +BFF4 +A014 +8FC4 +8084 +8104 +BFF4 +8104 +8104 +4708 +2010 +1FE0 +ENDCHAR +STARTCHAR uni32AC +ENCODING 12972 +BBX 15 14 0 -1 +BITMAP +1FF0 +3E48 +6844 +BE7A +A282 +BEA2 +A812 +BF02 +8002 +9FF2 +9292 +7FFC +2008 +1FF0 +ENDCHAR +STARTCHAR uni32AD +ENCODING 12973 +BBX 15 14 0 -1 +BITMAP +1FF0 +2108 +4184 +8242 +8422 +889A +B082 +84E2 +8482 +8482 +8482 +5FFC +2008 +1FF0 +ENDCHAR +STARTCHAR uni32AE +ENCODING 12974 +BBX 14 14 1 -1 +BITMAP +1FE0 +2210 +57F8 +8894 +BFC4 +9874 +8FC4 +8844 +8FC4 +8844 +8FC4 +7878 +2010 +1FE0 +ENDCHAR +STARTCHAR uni32AF +ENCODING 12975 +BBX 14 14 1 -1 +BITMAP +1FE0 +3110 +53E8 +9124 +FD24 +9244 +9244 +9FF4 +9554 +9554 +9994 +5228 +2010 +1FE0 +ENDCHAR +STARTCHAR uni32B0 +ENCODING 12976 +BBX 15 14 0 -1 +BITMAP +1FF0 +2108 +7FFC +8482 +84F2 +8992 +9A52 +AD22 +88A2 +8842 +88A2 +4B1C +2008 +1FF0 +ENDCHAR +STARTCHAR uni32B1 +ENCODING 12977 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C72 +A28A +8282 +8CF2 +828A +828A +A28A +9C72 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32B2 +ENCODING 12978 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9CFA +A28A +820A +8C12 +8212 +8222 +A222 +9C22 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32B3 +ENCODING 12979 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C72 +A28A +828A +8C72 +828A +828A +A28A +9C72 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32B4 +ENCODING 12980 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +9C72 +A28A +828A +8C8A +827A +820A +A28A +9C72 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32B5 +ENCODING 12981 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +A472 +A48A +A48A +BE8A +848A +848A +848A +8472 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32B6 +ENCODING 12982 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +A422 +A462 +A422 +BE22 +8422 +8422 +8422 +84FA +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32B7 +ENCODING 12983 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +A472 +A48A +A40A +BE0A +8472 +8482 +8482 +84FA +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32B8 +ENCODING 12984 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +A472 +A48A +A40A +BE32 +840A +840A +848A +8472 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32B9 +ENCODING 12985 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +A492 +A492 +A492 +BEFA +8412 +8412 +8412 +8412 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32BA +ENCODING 12986 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +A4FA +A482 +A482 +BE72 +840A +840A +848A +8472 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32BB +ENCODING 12987 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +A472 +A48A +A482 +BEF2 +848A +848A +848A +8472 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32BC +ENCODING 12988 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +A4FA +A48A +A40A +BE12 +8412 +8422 +8422 +8422 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32BD +ENCODING 12989 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +A472 +A48A +A48A +BE72 +848A +848A +848A +8472 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32BE +ENCODING 12990 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +A472 +A48A +A48A +BE8A +847A +840A +848A +8472 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32BF +ENCODING 12991 +BBX 15 14 0 -1 +BITMAP +1FF0 +2008 +4004 +BE72 +A08A +A08A +9C8A +828A +828A +A28A +9C72 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni32C0 +ENCODING 12992 +BBX 13 15 1 -2 +BITMAP +20F8 +6088 +2088 +2088 +20F8 +2088 +2088 +2088 +20F8 +2088 +2088 +2088 +2088 +2128 +F910 +ENDCHAR +STARTCHAR uni32C1 +ENCODING 12993 +BBX 12 15 2 -2 +BITMAP +01F0 +6110 +9110 +9110 +11F0 +1110 +2110 +2110 +21F0 +4110 +4110 +4110 +8110 +8250 +F220 +ENDCHAR +STARTCHAR uni32C2 +ENCODING 12994 +BBX 12 15 2 -2 +BITMAP +01F0 +6110 +9110 +9110 +11F0 +1110 +1110 +6110 +11F0 +1110 +1110 +1110 +9110 +9250 +6220 +ENDCHAR +STARTCHAR uni32C3 +ENCODING 12995 +BBX 12 15 2 -2 +BITMAP +01F0 +9110 +9110 +9110 +91F0 +9110 +9110 +F110 +11F0 +1110 +1110 +1110 +1110 +1250 +1220 +ENDCHAR +STARTCHAR uni32C4 +ENCODING 12996 +BBX 12 15 2 -2 +BITMAP +01F0 +F110 +8110 +8110 +81F0 +8110 +8110 +E110 +11F0 +1110 +1110 +1110 +9110 +9250 +6220 +ENDCHAR +STARTCHAR uni32C5 +ENCODING 12997 +BBX 12 15 2 -2 +BITMAP +01F0 +6110 +9110 +9110 +81F0 +8110 +8110 +E110 +91F0 +9110 +9110 +9110 +9110 +9250 +6220 +ENDCHAR +STARTCHAR uni32C6 +ENCODING 12998 +BBX 12 15 2 -2 +BITMAP +01F0 +F110 +1110 +1110 +11F0 +2110 +2110 +2110 +41F0 +4110 +4110 +4110 +4110 +4250 +4220 +ENDCHAR +STARTCHAR uni32C7 +ENCODING 12999 +BBX 12 15 2 -2 +BITMAP +01F0 +6110 +9110 +9110 +91F0 +9110 +9110 +6110 +91F0 +9110 +9110 +9110 +9110 +9250 +6220 +ENDCHAR +STARTCHAR uni32C8 +ENCODING 13000 +BBX 12 15 2 -2 +BITMAP +01F0 +6110 +9110 +9110 +91F0 +9110 +9110 +6110 +11F0 +1110 +1110 +1110 +9110 +9250 +6220 +ENDCHAR +STARTCHAR uni32C9 +ENCODING 13001 +BBX 14 15 1 -2 +BITMAP +007C +4644 +C944 +4944 +497C +4944 +4944 +4944 +497C +4944 +4944 +4944 +4944 +4994 +E688 +ENDCHAR +STARTCHAR uni32CA +ENCODING 13002 +BBX 14 15 1 -2 +BITMAP +007C +4444 +CC44 +4444 +447C +4444 +4444 +4444 +447C +4444 +4444 +4444 +4444 +4494 +EE88 +ENDCHAR +STARTCHAR uni32CB +ENCODING 13003 +BBX 14 15 1 -2 +BITMAP +007C +4644 +C944 +4944 +417C +4144 +4244 +4244 +427C +4444 +4444 +4444 +4844 +4894 +EF88 +ENDCHAR +STARTCHAR uni32CC +ENCODING 13004 +BBX 13 12 1 -2 +BITMAP +8400 +8408 +84E8 +8510 +FD10 +8510 +84E0 +8480 +84F0 +8508 +0108 +00F0 +ENDCHAR +STARTCHAR uni32CD +ENCODING 13005 +BBX 15 11 0 -2 +BITMAP +0002 +651A +96A4 +94A4 +F424 +8418 +8410 +941C +6422 +0022 +001C +ENDCHAR +STARTCHAR uni32CE +ENCODING 13006 +BBX 14 10 1 0 +BITMAP +0104 +0104 +7904 +8488 +8488 +FC88 +8050 +8050 +8420 +7820 +ENDCHAR +STARTCHAR uni32CF +ENCODING 13007 +BBX 14 10 1 0 +BITMAP +9F70 +8448 +8444 +8444 +8444 +8444 +8444 +8444 +8448 +F470 +ENDCHAR +STARTCHAR uni32D0 +ENCODING 13008 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +5FD0 +8048 +8288 +8308 +8208 +4410 +4810 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32D1 +ENCODING 13009 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4090 +4110 +8208 +8608 +8A08 +9208 +4210 +4210 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32D2 +ENCODING 13010 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2220 +4210 +5FD0 +9048 +9048 +8048 +8088 +4090 +4110 +2220 +18C0 +0700 +ENDCHAR +STARTCHAR uni32D3 +ENCODING 13011 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +4010 +8F88 +8208 +8208 +8208 +5FD0 +4010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32D4 +ENCODING 13012 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4110 +5FD0 +8308 +8508 +8908 +9108 +4510 +4310 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32D5 +ENCODING 13013 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2220 +4210 +5FD0 +8248 +8448 +8888 +9088 +4510 +4210 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32D6 +ENCODING 13014 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4410 +4790 +9E08 +8208 +83E8 +9F88 +4090 +4090 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32D7 +ENCODING 13015 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4410 +47D0 +8448 +8848 +9088 +8088 +4110 +4610 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32D8 +ENCODING 13016 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4810 +4FD0 +8908 +9108 +A108 +8108 +4210 +4C10 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32D9 +ENCODING 13017 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +5FD0 +8048 +8048 +8088 +8088 +5FD0 +4010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32DA +ENCODING 13018 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4490 +4490 +9FE8 +8488 +8488 +8488 +4110 +4610 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32DB +ENCODING 13019 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4C10 +4210 +9808 +8448 +8088 +8108 +5210 +4C10 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32DC +ENCODING 13020 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +5F90 +8088 +8088 +8108 +8308 +4490 +4890 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32DD +ENCODING 13021 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4410 +5FD0 +8448 +8488 +8508 +8408 +4410 +43D0 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32DE +ENCODING 13022 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +5050 +8848 +8848 +8088 +8108 +4210 +4C10 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32DF +ENCODING 13023 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4410 +47D0 +8448 +8C48 +8A88 +9188 +4150 +4610 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32E0 +ENCODING 13024 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +41D0 +5F10 +81E8 +BF08 +8108 +8108 +4210 +4C10 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32E1 +ENCODING 13025 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4410 +5250 +8A48 +8848 +8088 +8108 +4210 +4C10 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32E2 +ENCODING 13026 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4F90 +4010 +9FC8 +8108 +8108 +8108 +4210 +4C10 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32E3 +ENCODING 13027 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4410 +4410 +8408 +8608 +8508 +8488 +4410 +4410 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32E4 +ENCODING 13028 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2220 +4110 +5FD0 +8108 +8108 +8108 +8108 +4210 +4C10 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32E5 +ENCODING 13029 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +43D0 +9C08 +8008 +81E8 +9E08 +4010 +4010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32E6 +ENCODING 13030 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +5F90 +8088 +8C88 +8308 +8308 +4490 +4890 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32E7 +ENCODING 13031 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +5F90 +8088 +8108 +8208 +8688 +4A50 +4210 +2220 +18C0 +0700 +ENDCHAR +STARTCHAR uni32E8 +ENCODING 13032 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +4050 +8048 +8048 +8088 +8108 +4210 +4C10 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32E9 +ENCODING 13033 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +4510 +8488 +8848 +B048 +8008 +4010 +4010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32EA +ENCODING 13034 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +5010 +9308 +9C08 +9008 +9008 +5010 +4F90 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32EB +ENCODING 13035 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +5FD0 +8048 +8048 +8048 +8088 +4090 +4110 +2220 +18C0 +0700 +ENDCHAR +STARTCHAR uni32EC +ENCODING 13036 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +4410 +8A08 +9108 +8088 +8048 +4010 +4010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32ED +ENCODING 13037 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2220 +4210 +5FD0 +8208 +8A88 +9248 +8248 +4A10 +4610 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32EE +ENCODING 13038 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +5FD0 +8048 +8688 +8108 +8088 +4090 +4010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32EF +ENCODING 13039 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4610 +4190 +8C08 +8308 +8008 +8C08 +4390 +4030 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32F0 +ENCODING 13040 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2220 +4210 +4210 +8408 +8408 +8888 +8848 +4FD0 +5050 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32F1 +ENCODING 13041 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +4050 +8048 +8448 +8288 +8188 +4150 +4610 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32F2 +ENCODING 13042 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +5F90 +4410 +8788 +BC08 +8408 +8408 +4410 +43D0 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32F3 +ENCODING 13043 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2420 +4410 +5FD0 +8448 +8288 +8208 +8208 +4110 +4110 +2120 +18C0 +0700 +ENDCHAR +STARTCHAR uni32F4 +ENCODING 13044 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +4010 +8FC8 +8048 +8088 +8108 +5FD0 +4010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32F5 +ENCODING 13045 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +4FD0 +8048 +8FC8 +8048 +8048 +4FD0 +4010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32F6 +ENCODING 13046 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4F90 +4010 +9FC8 +8048 +8048 +8088 +4090 +4110 +2620 +18C0 +0700 +ENDCHAR +STARTCHAR uni32F7 +ENCODING 13047 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4490 +4490 +8488 +8488 +8488 +8088 +4110 +4610 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32F8 +ENCODING 13048 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4210 +4A10 +8A08 +8A28 +8A48 +8A88 +4B10 +5210 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32F9 +ENCODING 13049 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4810 +4810 +8808 +8848 +8888 +8908 +4A10 +4C10 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32FA +ENCODING 13050 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +51D0 +9E48 +9048 +9088 +93C8 +5C10 +5010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32FB +ENCODING 13051 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +5FD0 +9048 +9048 +8048 +8088 +4090 +4110 +2220 +18C0 +0700 +ENDCHAR +STARTCHAR uni32FC +ENCODING 13052 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2120 +4110 +5FD0 +8908 +8908 +BFC8 +8108 +4110 +4110 +2120 +18C0 +0700 +ENDCHAR +STARTCHAR uni32FD +ENCODING 13053 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +5FD0 +8048 +8688 +8108 +8088 +7FF0 +4010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32FE +ENCODING 13054 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +4010 +5FD0 +8048 +8FC8 +8048 +8088 +4110 +4610 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni32FF +ENCODING 13055 +BBX 15 15 0 -2 +BITMAP +2030 +50C0 +484E +844A +BBFA +004A +FCCA +24EA +255A +254A +244A +2C4E +204A +2048 +2040 +ENDCHAR +STARTCHAR uni3300 +ENCODING 13056 +BBX 14 15 1 -1 +BITMAP +F808 +0814 +2A94 +3248 +2240 +2440 +4000 +0000 +0080 +0080 +0080 +F8C0 +00A0 +0080 +0080 +ENDCHAR +STARTCHAR uni3301 +ENCODING 13057 +BBX 12 15 2 -1 +BITMAP +F800 +0840 +2940 +3140 +2150 +2150 +4160 +0000 +0000 +F800 +09F0 +0810 +0860 +1040 +6080 +ENDCHAR +STARTCHAR uni3302 +ENCODING 13058 +BBX 14 15 1 -1 +BITMAP +7C00 +0480 +1440 +1808 +1030 +10C0 +2000 +0000 +027C +4504 +A514 +1218 +0810 +0010 +0020 +ENDCHAR +STARTCHAR uni3303 +ENCODING 13059 +BBX 14 14 1 -1 +BITMAP +FE00 +0200 +1400 +10FC +1000 +2000 +2000 +0000 +0400 +2400 +2400 +2480 +4500 +8600 +ENDCHAR +STARTCHAR uni3304 +ENCODING 13060 +BBX 16 15 0 -1 +BITMAP +0200 +0438 +0800 +1800 +2800 +087C +0800 +0000 +0102 +81E9 +4124 +0A20 +3020 +C040 +0180 +ENDCHAR +STARTCHAR uni3305 +ENCODING 13061 +BBX 12 15 2 -1 +BITMAP +0800 +1100 +2080 +6010 +A060 +2180 +2000 +0000 +1000 +E000 +2000 +F800 +2000 +2000 +4000 +ENDCHAR +STARTCHAR uni3306 +ENCODING 13062 +BBX 12 14 2 0 +BITMAP +2000 +F800 +8820 +89F0 +0860 +10A0 +2120 +0000 +0000 +8000 +4000 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni3307 +ENCODING 13063 +BBX 16 14 0 -1 +BITMAP +7CF8 +1008 +1010 +1020 +1050 +7C88 +0000 +4022 +7829 +4824 +8BB0 +0828 +1020 +6020 +ENDCHAR +STARTCHAR uni3308 +ENCODING 13064 +BBX 12 14 2 -1 +BITMAP +F800 +2000 +21F0 +2000 +2000 +F800 +0000 +4000 +F800 +4800 +49F0 +4800 +4800 +9000 +ENDCHAR +STARTCHAR uni3309 +ENCODING 13065 +BBX 12 15 2 -1 +BITMAP +1000 +F900 +1080 +3010 +5060 +9180 +3000 +0000 +0000 +F800 +0800 +1000 +2000 +5000 +8800 +ENDCHAR +STARTCHAR uni330A +ENCODING 13066 +BBX 12 15 2 -1 +BITMAP +1000 +F800 +1000 +31F0 +5000 +9000 +3000 +0000 +2000 +2000 +4000 +8000 +8800 +F800 +0800 +ENDCHAR +STARTCHAR uni330B +ENCODING 13067 +BBX 12 15 2 -1 +BITMAP +4010 +F820 +4840 +48C0 +4940 +4840 +9040 +0000 +9000 +9000 +9000 +9000 +1000 +2000 +C000 +ENDCHAR +STARTCHAR uni330C +ENCODING 13068 +BBX 12 15 2 -1 +BITMAP +40E0 +F800 +49F0 +4810 +4810 +4820 +90C0 +0000 +0080 +0080 +A880 +A8C0 +08A0 +1080 +6080 +ENDCHAR +STARTCHAR uni330D +ENCODING 13069 +BBX 14 15 1 -1 +BITMAP +2000 +2000 +FCFC +2484 +2484 +2484 +4484 +8CFC +0000 +4400 +4400 +44FC +0400 +0800 +3000 +ENDCHAR +STARTCHAR uni330E +ENCODING 13070 +BBX 15 14 0 0 +BITMAP +4100 +FCBE +4A22 +4822 +4822 +483E +9000 +0000 +0000 +4000 +2000 +0400 +1800 +6000 +ENDCHAR +STARTCHAR uni330F +ENCODING 13071 +BBX 15 15 0 -1 +BITMAP +4080 +FA50 +4908 +4802 +480C +4830 +9000 +0000 +0000 +7C00 +0400 +0400 +2800 +1000 +0800 +ENDCHAR +STARTCHAR uni3310 +ENCODING 13072 +BBX 14 15 1 -1 +BITMAP +4080 +FA40 +2100 +F800 +2000 +1000 +1000 +0000 +0408 +0FA4 +0490 +0480 +0480 +0480 +0900 +ENDCHAR +STARTCHAR uni3311 +ENCODING 13073 +BBX 15 12 0 2 +BITMAP +4080 +FA5C +2100 +F800 +2000 +103E +1000 +0000 +0000 +0000 +0000 +7C00 +ENDCHAR +STARTCHAR uni3312 +ENCODING 13074 +BBX 12 15 2 -1 +BITMAP +4000 +F800 +2000 +F8E0 +2020 +11F0 +1000 +0000 +9000 +9000 +9000 +91F0 +1000 +2000 +C000 +ENDCHAR +STARTCHAR uni3313 +ENCODING 13075 +BBX 16 15 0 -1 +BITMAP +4080 +FA44 +2114 +F814 +2015 +1015 +1016 +0000 +4080 +7A40 +4900 +A83E +1800 +1000 +6000 +ENDCHAR +STARTCHAR uni3314 +ENCODING 13076 +BBX 14 14 1 -1 +BITMAP +1000 +1000 +1E00 +F000 +0800 +0F00 +7800 +04FC +0484 +0484 +0084 +0084 +00FC +0084 +ENDCHAR +STARTCHAR uni3315 +ENCODING 13077 +BBX 16 15 0 -1 +BITMAP +2000 +7CF8 +1088 +7C88 +1088 +08F8 +0800 +0000 +4132 +7482 +5274 +9014 +1015 +2027 +4041 +ENDCHAR +STARTCHAR uni3316 +ENCODING 13078 +BBX 15 15 0 -1 +BITMAP +4002 +FBC2 +2242 +FA54 +2248 +13D4 +1020 +0000 +0200 +0208 +0228 +FB28 +02AA +022A +022C +ENDCHAR +STARTCHAR uni3317 +ENCODING 13079 +BBX 15 15 0 -1 +BITMAP +1000 +3E3E +0822 +3E22 +0822 +043E +0400 +0000 +0008 +F808 +8AA8 +8AAC +082A +1048 +6188 +ENDCHAR +STARTCHAR uni3318 +ENCODING 13080 +BBX 13 15 2 -1 +BITMAP +0A00 +4570 +7800 +48F8 +8808 +0808 +1010 +6060 +0000 +2000 +2000 +2800 +2400 +4E00 +F200 +ENDCHAR +STARTCHAR uni3319 +ENCODING 13081 +BBX 15 15 0 -1 +BITMAP +408C +7A40 +491E +8802 +0802 +1004 +6008 +0000 +2200 +2210 +4208 +8302 +8A8C +FA30 +0A00 +ENDCHAR +STARTCHAR uni331A +ENCODING 13082 +BBX 16 15 0 -1 +BITMAP +2000 +3C20 +24A0 +44A0 +04A8 +08A8 +30B0 +0000 +4110 +FCAF +4A49 +50C9 +4149 +4049 +384F +ENDCHAR +STARTCHAR uni331B +ENCODING 13083 +BBX 12 15 2 -1 +BITMAP +4000 +79F0 +4910 +8910 +0910 +11F0 +6000 +0000 +0040 +01F0 +0020 +F840 +00E0 +0150 +0040 +ENDCHAR +STARTCHAR uni331C +ENCODING 13084 +BBX 12 15 2 -1 +BITMAP +4000 +7800 +9000 +11F0 +1000 +1000 +2000 +0000 +0000 +F800 +0800 +1000 +2000 +5000 +8800 +ENDCHAR +STARTCHAR uni331D +ENCODING 13085 +BBX 12 14 2 -1 +BITMAP +F840 +0940 +0940 +0950 +0950 +F960 +0000 +2000 +2000 +F800 +2000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni331E +ENCODING 13086 +BBX 12 14 2 -1 +BITMAP +F800 +0800 +09F0 +0800 +0800 +F800 +0000 +2100 +FA80 +2280 +A900 +A800 +2000 +6000 +ENDCHAR +STARTCHAR uni331F +ENCODING 13087 +BBX 12 15 2 -1 +BITMAP +5010 +F820 +5040 +50C0 +1140 +2040 +4040 +0000 +4000 +7840 +4940 +8940 +0950 +1150 +6160 +ENDCHAR +STARTCHAR uni3320 +ENCODING 13088 +BBX 15 15 0 -1 +BITMAP +1400 +3E40 +1420 +1404 +0418 +0860 +1000 +0000 +1008 +E008 +2010 +FBA0 +2022 +203E +4002 +ENDCHAR +STARTCHAR uni3321 +ENCODING 13089 +BBX 16 15 0 -1 +BITMAP +2090 +1490 +4490 +2490 +0810 +7020 +00C0 +0000 +0102 +81E9 +4124 +0A20 +3020 +C040 +0180 +ENDCHAR +STARTCHAR uni3322 +ENCODING 13090 +BBX 14 15 1 -1 +BITMAP +2000 +2040 +3E20 +E204 +2408 +2010 +1E60 +0000 +0600 +1C00 +0400 +7F80 +0400 +0400 +0800 +ENDCHAR +STARTCHAR uni3323 +ENCODING 13091 +BBX 15 15 1 -1 +BITMAP +2000 +20C0 +3E22 +E404 +2008 +2010 +1E60 +2000 +2000 +2000 +3800 +2400 +2000 +2000 +2000 +ENDCHAR +STARTCHAR uni3324 +ENCODING 13092 +BBX 15 15 0 -1 +BITMAP +4080 +7A40 +4900 +A83E +1800 +1000 +6000 +0000 +0000 +7C00 +0400 +0800 +1000 +2800 +4400 +ENDCHAR +STARTCHAR uni3325 +ENCODING 13093 +BBX 12 14 2 0 +BITMAP +7080 +0240 +F900 +2000 +2000 +2000 +4000 +0000 +0080 +0050 +0110 +0090 +0020 +01C0 +ENDCHAR +STARTCHAR uni3326 +ENCODING 13094 +BBX 12 14 3 0 +BITMAP +0800 +9400 +8800 +8000 +E000 +9000 +8000 +8000 +8480 +0480 +0480 +0490 +08A0 +10C0 +ENDCHAR +STARTCHAR uni3327 +ENCODING 13095 +BBX 12 14 3 -1 +BITMAP +8000 +8000 +8000 +E000 +9000 +8000 +8000 +8200 +0100 +0010 +0020 +0040 +0080 +0300 +ENDCHAR +STARTCHAR uni3328 +ENCODING 13096 +BBX 11 15 2 -1 +BITMAP +2000 +2000 +F800 +2000 +2000 +4000 +8000 +0000 +0000 +0020 +0020 +0020 +0020 +0040 +0080 +ENDCHAR +STARTCHAR uni3329 +ENCODING 13097 +BBX 11 15 3 -1 +BITMAP +2000 +2000 +22A0 +22A0 +2020 +4040 +8180 +0000 +4000 +4000 +4000 +6000 +5000 +4000 +4000 +ENDCHAR +STARTCHAR uni332A +ENCODING 13098 +BBX 12 15 2 -1 +BITMAP +0010 +0020 +5040 +48C0 +4940 +8840 +0040 +0000 +0000 +A800 +A800 +0800 +0800 +1000 +6000 +ENDCHAR +STARTCHAR uni332B +ENCODING 13099 +BBX 15 15 1 -1 +BITMAP +0180 +0240 +2A40 +2580 +447E +4200 +8200 +0000 +4008 +5A08 +E90C +482A +5048 +4088 +3B08 +ENDCHAR +STARTCHAR uni332C +ENCODING 13100 +BBX 15 15 0 -1 +BITMAP +0100 +0280 +5280 +493E +4800 +8800 +0000 +0000 +0000 +5400 +5400 +0400 +0400 +0800 +3000 +ENDCHAR +STARTCHAR uni332D +ENCODING 13101 +BBX 15 15 0 -1 +BITMAP +0100 +0480 +5200 +483E +4800 +8800 +0000 +0000 +0000 +4020 +40A0 +44A0 +48A8 +50A8 +60B0 +ENDCHAR +STARTCHAR uni332E +ENCODING 13102 +BBX 15 15 0 -1 +BITMAP +813E +9A82 +E28A +810C +8008 +8008 +7810 +0000 +0200 +FA08 +0A28 +1328 +22AA +522A +8A2C +ENDCHAR +STARTCHAR uni332F +ENCODING 13103 +BBX 15 15 0 -1 +BITMAP +8110 +9A9E +E292 +8122 +8002 +8004 +7818 +0000 +0000 +1000 +5000 +5000 +5400 +5400 +5800 +ENDCHAR +STARTCHAR uni3330 +ENCODING 13104 +BBX 12 15 2 -1 +BITMAP +8100 +9A80 +E280 +8100 +8000 +8000 +7800 +0000 +0000 +01F0 +0010 +0010 +0010 +0010 +01F0 +ENDCHAR +STARTCHAR uni3331 +ENCODING 13105 +BBX 13 15 1 -1 +BITMAP +8080 +9A40 +E100 +8000 +8000 +8000 +7800 +0000 +0000 +0020 +00A0 +00A0 +00A8 +00A8 +00B0 +ENDCHAR +STARTCHAR uni3332 +ENCODING 13106 +BBX 16 14 0 -1 +BITMAP +7C00 +04F8 +0408 +0430 +0820 +3040 +0000 +E022 +0029 +EAA4 +2AB0 +20A8 +4120 +8620 +ENDCHAR +STARTCHAR uni3333 +ENCODING 13107 +BBX 11 14 2 -1 +BITMAP +F800 +0820 +0840 +08C0 +1140 +6040 +0000 +0080 +0080 +0080 +F8C0 +00A0 +0080 +0080 +ENDCHAR +STARTCHAR uni3334 +ENCODING 13108 +BBX 16 15 0 -1 +BITMAP +0100 +F480 +122A +102A +1002 +2004 +C018 +0000 +4000 +2804 +8814 +4FD4 +1115 +E115 +07D6 +ENDCHAR +STARTCHAR uni3335 +ENCODING 13109 +BBX 12 14 2 0 +BITMAP +00E0 +F800 +09F0 +0810 +0810 +1020 +60C0 +0000 +0000 +8000 +4000 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni3336 +ENCODING 13110 +BBX 15 15 1 -1 +BITMAP +0020 +203C +5024 +8844 +0604 +0008 +0030 +4000 +7808 +4828 +C828 +2BA8 +102A +204C +C048 +ENDCHAR +STARTCHAR uni3337 +ENCODING 13111 +BBX 13 15 1 -1 +BITMAP +0200 +4500 +A500 +1200 +0800 +0000 +0000 +0000 +0000 +0048 +0028 +0028 +0008 +0010 +0060 +ENDCHAR +STARTCHAR uni3338 +ENCODING 13112 +BBX 14 15 1 -1 +BITMAP +0200 +4538 +A500 +1200 +0800 +007C +0000 +0000 +4000 +4C00 +7000 +4000 +4000 +4000 +3C00 +ENDCHAR +STARTCHAR uni3339 +ENCODING 13113 +BBX 12 14 2 -1 +BITMAP +4040 +A140 +1140 +0950 +0150 +0160 +0000 +0000 +A800 +A800 +0800 +0800 +1000 +6000 +ENDCHAR +STARTCHAR uni333A +ENCODING 13114 +BBX 14 15 1 -1 +BITMAP +0200 +4540 +A520 +1204 +0818 +0060 +0000 +0000 +0000 +7C00 +0400 +0800 +1000 +2800 +4400 +ENDCHAR +STARTCHAR uni333B +ENCODING 13115 +BBX 14 15 1 -1 +BITMAP +0300 +0480 +3480 +4B00 +847C +0200 +0000 +0100 +2280 +1100 +4000 +2200 +0400 +0800 +3000 +ENDCHAR +STARTCHAR uni333C +ENCODING 13116 +BBX 14 15 1 -1 +BITMAP +0200 +4900 +A400 +107C +0800 +0000 +0000 +0000 +2000 +3C00 +2400 +5400 +0C00 +0800 +3000 +ENDCHAR +STARTCHAR uni333D +ENCODING 13117 +BBX 14 15 1 -1 +BITMAP +2104 +FA88 +2290 +A930 +A850 +2010 +6010 +0000 +0040 +4040 +2040 +0460 +1850 +6040 +0040 +ENDCHAR +STARTCHAR uni333E +ENCODING 13118 +BBX 15 15 1 -1 +BITMAP +2080 +FA48 +2128 +A828 +A82A +202A +602C +0000 +2000 +2000 +2000 +3000 +2800 +2000 +2000 +ENDCHAR +STARTCHAR uni333F +ENCODING 13119 +BBX 12 14 2 0 +BITMAP +2000 +F800 +2000 +A800 +A800 +2000 +6000 +0000 +0000 +0100 +0080 +0010 +0060 +0180 +ENDCHAR +STARTCHAR uni3340 +ENCODING 13120 +BBX 14 15 1 -1 +BITMAP +2100 +FAA0 +2290 +A904 +A818 +2060 +6000 +0000 +2100 +2480 +2200 +3000 +2800 +2000 +2000 +ENDCHAR +STARTCHAR uni3341 +ENCODING 13121 +BBX 12 15 2 -1 +BITMAP +2000 +F800 +2000 +A9F0 +A800 +2000 +6000 +0000 +0000 +2000 +A000 +A000 +A800 +A800 +B000 +ENDCHAR +STARTCHAR uni3342 +ENCODING 13122 +BBX 12 14 2 0 +BITMAP +2000 +F800 +2000 +A9F0 +A800 +2000 +6000 +0000 +0000 +8000 +4000 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni3343 +ENCODING 13123 +BBX 12 15 2 -1 +BITMAP +0010 +F820 +0840 +08C0 +5140 +2040 +1040 +0000 +4000 +79F0 +4910 +0910 +0910 +11F0 +6000 +ENDCHAR +STARTCHAR uni3344 +ENCODING 13124 +BBX 12 15 2 -1 +BITMAP +0010 +F820 +0840 +08C0 +5140 +2040 +1040 +0000 +0000 +2000 +A000 +A000 +A800 +A800 +B000 +ENDCHAR +STARTCHAR uni3345 +ENCODING 13125 +BBX 12 13 2 0 +BITMAP +F800 +0950 +0950 +5010 +2020 +10C0 +0000 +0000 +0000 +5000 +4800 +4800 +8800 +ENDCHAR +STARTCHAR uni3346 +ENCODING 13126 +BBX 12 14 2 -1 +BITMAP +F840 +0940 +0940 +5150 +2150 +1160 +0000 +4000 +7800 +4800 +8800 +0800 +1000 +6000 +ENDCHAR +STARTCHAR uni3347 +ENCODING 13127 +BBX 15 14 0 -1 +BITMAP +7C80 +0440 +0408 +2830 +10C0 +0800 +0000 +0000 +4020 +2B90 +8882 +4B8C +10B0 +E380 +ENDCHAR +STARTCHAR uni3348 +ENCODING 13128 +BBX 12 14 2 0 +BITMAP +6080 +10F0 +C090 +2110 +0010 +C020 +30C0 +0000 +0000 +F900 +8880 +8810 +8860 +F980 +ENDCHAR +STARTCHAR uni3349 +ENCODING 13129 +BBX 13 14 2 -1 +BITMAP +6000 +1800 +0400 +6000 +1800 +0488 +E088 +1888 +0488 +0088 +0008 +0008 +0010 +0060 +ENDCHAR +STARTCHAR uni334A +ENCODING 13130 +BBX 15 15 1 -1 +BITMAP +7044 +0C44 +3044 +0844 +0004 +7008 +0C30 +0800 +1408 +4828 +5028 +53A8 +882A +884C +8048 +ENDCHAR +STARTCHAR uni334B +ENCODING 13131 +BBX 14 15 1 -1 +BITMAP +0800 +0800 +0800 +5000 +2000 +5000 +8000 +0000 +0408 +0FA4 +0490 +0480 +0480 +0480 +0900 +ENDCHAR +STARTCHAR uni334C +ENCODING 13132 +BBX 16 15 0 -1 +BITMAP +0902 +0BE9 +0924 +5120 +2120 +5120 +8240 +0000 +2000 +2080 +2040 +3008 +2830 +20C0 +2000 +ENDCHAR +STARTCHAR uni334D +ENCODING 13133 +BBX 13 14 2 -1 +BITMAP +0400 +4400 +2800 +11F8 +2800 +C400 +0000 +4040 +4140 +6140 +5140 +4148 +4250 +4460 +ENDCHAR +STARTCHAR uni334E +ENCODING 13134 +BBX 12 15 2 -1 +BITMAP +4000 +4000 +F800 +49F0 +5000 +4000 +4000 +0000 +8400 +9200 +8800 +C000 +A000 +8000 +8000 +ENDCHAR +STARTCHAR uni334F +ENCODING 13135 +BBX 12 15 2 -1 +BITMAP +4000 +4000 +F800 +49F0 +5000 +4000 +4000 +0000 +0000 +2000 +A000 +A000 +A800 +A800 +B000 +ENDCHAR +STARTCHAR uni3350 +ENCODING 13136 +BBX 12 14 2 0 +BITMAP +01F0 +7010 +1050 +1060 +1040 +F840 +0080 +0000 +0000 +8000 +4000 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni3351 +ENCODING 13137 +BBX 13 14 2 -1 +BITMAP +8800 +8900 +8A90 +8910 +0820 +1040 +6080 +4000 +4140 +7140 +4940 +4148 +4250 +4460 +ENDCHAR +STARTCHAR uni3352 +ENCODING 13138 +BBX 12 15 2 -1 +BITMAP +9000 +9000 +9000 +9000 +1000 +2000 +C000 +0000 +00E0 +0000 +01F0 +0010 +0010 +0020 +00C0 +ENDCHAR +STARTCHAR uni3353 +ENCODING 13139 +BBX 15 12 1 2 +BITMAP +2204 +A26A +A38A +A204 +AA00 +AA00 +B1E0 +0000 +0000 +0000 +0000 +F800 +ENDCHAR +STARTCHAR uni3354 +ENCODING 13140 +BBX 16 14 0 -1 +BITMAP +0800 +2800 +287C +2A00 +2A00 +2C00 +0000 +0080 +FA44 +0914 +0814 +0815 +1015 +6016 +ENDCHAR +STARTCHAR uni3355 +ENCODING 13141 +BBX 12 14 2 -1 +BITMAP +8000 +8000 +8800 +9000 +A000 +C000 +0000 +0040 +0040 +0080 +0100 +0110 +01F0 +0010 +ENDCHAR +STARTCHAR uni3356 +ENCODING 13142 +BBX 16 14 0 -1 +BITMAP +4080 +4040 +4408 +4830 +50C0 +6000 +0000 +8820 +8E94 +9442 +C400 +A401 +8406 +8818 +ENDCHAR +STARTCHAR uni3357 +ENCODING 13143 +BBX 13 14 2 -1 +BITMAP +FC00 +8480 +8548 +0488 +0810 +1020 +4040 +4000 +4000 +7000 +4800 +4000 +4000 +4000 +ENDCHAR +STARTCHAR uni3358 +ENCODING 13144 +BBX 13 16 2 -2 +BITMAP +0040 +6040 +9040 +9078 +9040 +9040 +91F0 +9110 +9110 +9110 +91F0 +9110 +9000 +9150 +62A8 +02A8 +ENDCHAR +STARTCHAR uni3359 +ENCODING 13145 +BBX 14 16 1 -2 +BITMAP +0020 +2020 +6020 +203C +2020 +2020 +20F8 +2088 +2088 +2088 +20F8 +2088 +2000 +20A8 +F954 +0154 +ENDCHAR +STARTCHAR uni335A +ENCODING 13146 +BBX 13 16 2 -2 +BITMAP +0040 +6040 +9040 +9078 +1040 +1040 +21F0 +2110 +2110 +4110 +41F0 +4110 +8000 +8150 +F2A8 +02A8 +ENDCHAR +STARTCHAR uni335B +ENCODING 13147 +BBX 13 16 2 -2 +BITMAP +0040 +6040 +9040 +9078 +1040 +1040 +11F0 +6110 +1110 +1110 +11F0 +1110 +9000 +9150 +62A8 +02A8 +ENDCHAR +STARTCHAR uni335C +ENCODING 13148 +BBX 13 16 2 -2 +BITMAP +0040 +9040 +9040 +9078 +9040 +9040 +91F0 +F110 +1110 +1110 +11F0 +1110 +1000 +1150 +12A8 +02A8 +ENDCHAR +STARTCHAR uni335D +ENCODING 13149 +BBX 13 16 2 -2 +BITMAP +0040 +F040 +8040 +8078 +8040 +8040 +81F0 +E110 +1110 +1110 +11F0 +1110 +9000 +9150 +62A8 +02A8 +ENDCHAR +STARTCHAR uni335E +ENCODING 13150 +BBX 13 16 2 -2 +BITMAP +0040 +6040 +9040 +9078 +8040 +8040 +81F0 +E110 +9110 +9110 +91F0 +9110 +9000 +9150 +62A8 +02A8 +ENDCHAR +STARTCHAR uni335F +ENCODING 13151 +BBX 13 16 2 -2 +BITMAP +0040 +F040 +1040 +1078 +1040 +2040 +21F0 +2110 +4110 +4110 +41F0 +4110 +4000 +4150 +42A8 +02A8 +ENDCHAR +STARTCHAR uni3360 +ENCODING 13152 +BBX 13 16 2 -2 +BITMAP +0040 +6040 +9040 +9078 +9040 +9040 +91F0 +6110 +9110 +9110 +91F0 +9110 +9000 +9150 +62A8 +02A8 +ENDCHAR +STARTCHAR uni3361 +ENCODING 13153 +BBX 13 16 2 -2 +BITMAP +0040 +6040 +9040 +9078 +9040 +9040 +91F0 +6110 +1110 +1110 +11F0 +1110 +9000 +9150 +62A8 +02A8 +ENDCHAR +STARTCHAR uni3362 +ENCODING 13154 +BBX 14 16 1 -2 +BITMAP +0020 +4C20 +D220 +523C +5220 +5220 +52F8 +5288 +5288 +5288 +52F8 +5288 +5200 +52A8 +ED54 +0154 +ENDCHAR +STARTCHAR uni3363 +ENCODING 13155 +BBX 14 16 1 -2 +BITMAP +0020 +4420 +CC20 +443C +4420 +4420 +44F8 +4488 +4488 +4488 +44F8 +4488 +4400 +44A8 +EF54 +0154 +ENDCHAR +STARTCHAR uni3364 +ENCODING 13156 +BBX 14 16 1 -2 +BITMAP +0020 +4C20 +D220 +523C +4220 +4220 +44F8 +4488 +4488 +4888 +48F8 +4888 +5000 +50A8 +FF54 +0154 +ENDCHAR +STARTCHAR uni3365 +ENCODING 13157 +BBX 14 16 1 -2 +BITMAP +0020 +4C20 +D220 +523C +4220 +4220 +42F8 +4C88 +4288 +4288 +42F8 +4288 +5200 +52A8 +ED54 +0154 +ENDCHAR +STARTCHAR uni3366 +ENCODING 13158 +BBX 14 16 1 -2 +BITMAP +0020 +5220 +D220 +523C +5220 +5220 +52F8 +5E88 +4288 +4288 +42F8 +4288 +4200 +42A8 +E354 +0154 +ENDCHAR +STARTCHAR uni3367 +ENCODING 13159 +BBX 14 16 1 -2 +BITMAP +0020 +5E20 +D020 +503C +5020 +5020 +50F8 +5C88 +4288 +4288 +42F8 +4288 +5200 +52A8 +ED54 +0154 +ENDCHAR +STARTCHAR uni3368 +ENCODING 13160 +BBX 14 16 1 -2 +BITMAP +0020 +4C20 +D220 +523C +5020 +5020 +50F8 +5C88 +5288 +5288 +52F8 +5288 +5200 +52A8 +ED54 +0154 +ENDCHAR +STARTCHAR uni3369 +ENCODING 13161 +BBX 14 16 1 -2 +BITMAP +0020 +5E20 +C220 +423C +4220 +4420 +44F8 +4488 +4888 +4888 +48F8 +4888 +4800 +48A8 +E954 +0154 +ENDCHAR +STARTCHAR uni336A +ENCODING 13162 +BBX 14 16 1 -2 +BITMAP +0020 +4C20 +D220 +523C +5220 +5220 +52F8 +4C88 +5288 +5288 +52F8 +5288 +5200 +52A8 +ED54 +0154 +ENDCHAR +STARTCHAR uni336B +ENCODING 13163 +BBX 14 16 1 -2 +BITMAP +0020 +4C20 +D220 +523C +5220 +5220 +52F8 +4C88 +4288 +4288 +42F8 +4288 +5200 +52A8 +ED54 +0154 +ENDCHAR +STARTCHAR uni336C +ENCODING 13164 +BBX 16 16 0 -2 +BITMAP +0008 +6308 +9488 +948F +1488 +1488 +24BE +24A2 +24A2 +44A2 +44BE +44A2 +8480 +84AA +F355 +0055 +ENDCHAR +STARTCHAR uni336D +ENCODING 13165 +BBX 16 16 0 -2 +BITMAP +0008 +6208 +9608 +920F +1208 +1208 +223E +2222 +2222 +4222 +423E +4222 +8200 +822A +F755 +0055 +ENDCHAR +STARTCHAR uni336E +ENCODING 13166 +BBX 16 16 0 -2 +BITMAP +0008 +6308 +9488 +948F +1088 +1088 +213E +2122 +2122 +4222 +423E +4222 +8400 +842A +F7D5 +0055 +ENDCHAR +STARTCHAR uni336F +ENCODING 13167 +BBX 16 16 0 -2 +BITMAP +0008 +6308 +9488 +948F +1088 +1088 +20BE +2322 +20A2 +40A2 +40BE +40A2 +8480 +84AA +F355 +0055 +ENDCHAR +STARTCHAR uni3370 +ENCODING 13168 +BBX 16 16 0 -2 +BITMAP +0008 +6488 +9488 +948F +1488 +1488 +24BE +27A2 +20A2 +40A2 +40BE +40A2 +8080 +80AA +F0D5 +0055 +ENDCHAR +STARTCHAR uni3371 +ENCODING 13169 +BBX 14 12 1 0 +BITMAP +8780 +8440 +8440 +8440 +A798 +D424 +9404 +941C +9424 +9424 +942C +9414 +ENDCHAR +STARTCHAR uni3372 +ENCODING 13170 +BBX 14 12 1 0 +BITMAP +0400 +0400 +0400 +0400 +7478 +8C84 +8404 +847C +8484 +8484 +8C8C +7474 +ENDCHAR +STARTCHAR uni3373 +ENCODING 13171 +BBX 14 12 1 0 +BITMAP +1084 +2884 +2884 +2884 +4484 +4484 +7C84 +4484 +8284 +8284 +8284 +8278 +ENDCHAR +STARTCHAR uni3374 +ENCODING 13172 +BBX 14 12 1 0 +BITMAP +8000 +8000 +8000 +8000 +E328 +94B4 +90A4 +93A0 +94A0 +94A0 +95A0 +E2A0 +ENDCHAR +STARTCHAR uni3375 +ENCODING 13173 +BBX 15 12 0 0 +BITMAP +0082 +0082 +0082 +0082 +7882 +8444 +8444 +8444 +8428 +8428 +8410 +7810 +ENDCHAR +STARTCHAR uni3376 +ENCODING 13174 +BBX 14 10 1 -2 +BITMAP +B878 +C484 +8480 +8480 +8480 +8480 +C484 +B878 +8000 +8000 +ENDCHAR +STARTCHAR uni3377 +ENCODING 13175 +BBX 13 12 1 0 +BITMAP +0200 +0200 +0200 +0200 +3AD0 +46A8 +82A8 +82A8 +82A8 +82A8 +46A8 +3AA8 +ENDCHAR +STARTCHAR uni3378 +ENCODING 13176 +BBX 15 14 0 0 +BITMAP +001E +0002 +021E +0210 +021E +0200 +3AD0 +46A8 +82A8 +82A8 +82A8 +82A8 +46A8 +3AA8 +ENDCHAR +STARTCHAR uni3379 +ENCODING 13177 +BBX 15 14 0 0 +BITMAP +001E +0002 +020E +0202 +021E +0200 +3AD0 +46A8 +82A8 +82A8 +82A8 +82A8 +46A8 +3AA8 +ENDCHAR +STARTCHAR uni337A +ENCODING 13178 +BBX 13 12 1 0 +BITMAP +F908 +2108 +2108 +2108 +2108 +2108 +2108 +2108 +2108 +2108 +2108 +F8F0 +ENDCHAR +STARTCHAR uni337B +ENCODING 13179 +BBX 15 15 1 -1 +BITMAP +0018 +7E14 +1010 +55FE +5510 +5512 +3512 +11D2 +FF52 +1154 +1154 +1148 +124A +1294 +1464 +ENDCHAR +STARTCHAR uni337C +ENCODING 13180 +BBX 15 15 1 -1 +BITMAP +0020 +1F4E +E5CA +A54A +A54A +A9FA +A94A +F16A +A35A +A0CA +AF4A +A94A +E94A +094E +0F40 +ENDCHAR +STARTCHAR uni337D +ENCODING 13181 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1010 +1010 +FE10 +1090 +1090 +109C +1090 +2890 +2890 +2890 +4490 +4490 +87FE +ENDCHAR +STARTCHAR uni337E +ENCODING 13182 +BBX 15 15 1 -1 +BITMAP +0090 +0E50 +EA10 +AA14 +AB24 +AEAE +EA72 +AA02 +AA00 +AE7E +AA62 +EAA2 +12A2 +12A2 +273E +ENDCHAR +STARTCHAR uni337F +ENCODING 13183 +BBX 16 16 0 -2 +BITMAP +2A05 +7F84 +2A3F +7702 +A23A +2712 +2AB9 +0000 +1044 +28F4 +441E +BA24 +00D4 +FE44 +2444 +7A5F +ENDCHAR +STARTCHAR uni3380 +ENCODING 13184 +BBX 14 14 1 -2 +BITMAP +0020 +0050 +0050 +0050 +B888 +C488 +84F8 +8488 +8504 +C504 +B904 +8104 +8000 +8000 +ENDCHAR +STARTCHAR uni3381 +ENCODING 13185 +BBX 14 12 1 0 +BITMAP +0020 +0050 +0050 +0050 +B088 +C888 +88F8 +8888 +8904 +8904 +8904 +8904 +ENDCHAR +STARTCHAR uni3382 +ENCODING 13186 +BBX 14 14 1 -2 +BITMAP +0020 +0050 +0050 +0050 +2288 +2288 +22F8 +2488 +4504 +4504 +4504 +7B04 +8000 +8000 +ENDCHAR +STARTCHAR uni3383 +ENCODING 13187 +BBX 14 12 1 0 +BITMAP +0020 +0050 +0050 +0050 +D088 +A888 +A8F8 +A888 +A904 +A904 +A904 +A904 +ENDCHAR +STARTCHAR uni3384 +ENCODING 13188 +BBX 15 12 0 0 +BITMAP +8010 +8028 +8028 +8028 +8444 +8844 +907C +A044 +D082 +8882 +8482 +8282 +ENDCHAR +STARTCHAR uni3385 +ENCODING 13189 +BBX 14 12 1 0 +BITMAP +80F8 +8084 +8084 +8084 +8484 +88F8 +9084 +A084 +D084 +8884 +8484 +82F8 +ENDCHAR +STARTCHAR uni3386 +ENCODING 13190 +BBX 14 12 1 0 +BITMAP +82F8 +8284 +C684 +C684 +AA84 +AAF8 +9284 +9284 +8284 +8284 +8284 +82F8 +ENDCHAR +STARTCHAR uni3387 +ENCODING 13191 +BBX 14 12 1 0 +BITMAP +78F8 +8484 +8484 +8084 +8084 +9CF8 +8484 +8484 +8484 +8484 +8C84 +74F8 +ENDCHAR +STARTCHAR uni3388 +ENCODING 13192 +BBX 15 12 0 0 +BITMAP +000C +0004 +0004 +0004 +71E4 +8A14 +8014 +81F4 +8214 +8214 +8A34 +71DE +ENDCHAR +STARTCHAR uni3389 +ENCODING 13193 +BBX 15 12 0 0 +BITMAP +800C +8004 +8004 +8004 +9364 +9494 +A414 +C474 +A494 +9494 +8CB4 +8F5E +ENDCHAR +STARTCHAR uni338A +ENCODING 13194 +BBX 14 14 1 -2 +BITMAP +01FC +0100 +0100 +0100 +B900 +C5F0 +8500 +8500 +8500 +C500 +B900 +8100 +8000 +8000 +ENDCHAR +STARTCHAR uni338B +ENCODING 13195 +BBX 14 12 1 0 +BITMAP +01FC +0100 +0100 +0100 +B1F0 +C900 +8900 +8900 +8900 +8900 +8900 +8900 +ENDCHAR +STARTCHAR uni338C +ENCODING 13196 +BBX 15 14 0 -2 +BITMAP +007E +0040 +0040 +0040 +227C +2240 +2240 +2240 +4440 +4440 +4440 +7B40 +8000 +8000 +ENDCHAR +STARTCHAR uni338D +ENCODING 13197 +BBX 13 11 1 -2 +BITMAP +0008 +2268 +2290 +2290 +2290 +4460 +4440 +4470 +7B88 +8088 +8070 +ENDCHAR +STARTCHAR uni338E +ENCODING 13198 +BBX 15 10 1 -2 +BITMAP +B43A +DA46 +9282 +9282 +9282 +9246 +923A +9282 +0044 +0038 +ENDCHAR +STARTCHAR uni338F +ENCODING 13199 +BBX 14 16 2 -2 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8474 +888C +9104 +E104 +9104 +888C +8474 +8504 +0088 +0070 +ENDCHAR +STARTCHAR uni3390 +ENCODING 13200 +BBX 14 13 1 0 +BITMAP +8200 +8200 +8200 +8200 +8200 +827C +FE04 +8208 +8210 +8220 +8240 +8280 +82FC +ENDCHAR +STARTCHAR uni3391 +ENCODING 13201 +BBX 15 13 0 0 +BITMAP +8440 +8440 +8440 +8440 +8440 +945E +97C2 +A444 +C448 +A448 +9450 +8C60 +8C7E +ENDCHAR +STARTCHAR uni3392 +ENCODING 13202 +BBX 15 13 0 0 +BITMAP +8A40 +8A40 +DA40 +DA40 +AA40 +AA5E +8BC2 +8A44 +8A44 +8A48 +8A48 +8A50 +8A5E +ENDCHAR +STARTCHAR uni3393 +ENCODING 13203 +BBX 15 12 0 0 +BITMAP +7240 +8A40 +8A40 +8240 +825E +83C2 +9E44 +8A44 +8A48 +8A48 +8A50 +7A5E +ENDCHAR +STARTCHAR uni3394 +ENCODING 13204 +BBX 15 12 0 0 +BITMAP +FC80 +2480 +2480 +2480 +24BE +2782 +2484 +2488 +2488 +2490 +24A0 +24BE +ENDCHAR +STARTCHAR uni3395 +ENCODING 13205 +BBX 14 14 1 -2 +BITMAP +0010 +0028 +0028 +0048 +2250 +2290 +2290 +44A0 +44A4 +44C4 +44C8 +BBB0 +8000 +8000 +ENDCHAR +STARTCHAR uni3396 +ENCODING 13206 +BBX 14 12 1 0 +BITMAP +0010 +0028 +0028 +0048 +EC50 +9290 +9290 +92A0 +92A4 +92C4 +92C8 +91B0 +ENDCHAR +STARTCHAR uni3397 +ENCODING 13207 +BBX 14 12 1 0 +BITMAP +0410 +0428 +0428 +0448 +7450 +8C90 +8490 +84A0 +84A4 +84C4 +8CC8 +77B0 +ENDCHAR +STARTCHAR uni3398 +ENCODING 13208 +BBX 14 12 1 0 +BITMAP +8010 +8028 +8028 +8048 +8450 +8890 +9090 +A0A0 +D0A4 +88C4 +84C8 +83B0 +ENDCHAR +STARTCHAR uni3399 +ENCODING 13209 +BBX 13 12 1 0 +BITMAP +3800 +4400 +4000 +4000 +F190 +4268 +4248 +4248 +4248 +4248 +4248 +4248 +ENDCHAR +STARTCHAR uni339A +ENCODING 13210 +BBX 13 8 1 0 +BITMAP +B3B0 +CA48 +8A48 +8A48 +8A48 +8A48 +8A48 +8A48 +ENDCHAR +STARTCHAR uni339B +ENCODING 13211 +BBX 15 10 0 -2 +BITMAP +22A4 +22DA +2292 +4292 +4492 +4492 +4492 +7B92 +8000 +8000 +ENDCHAR +STARTCHAR uni339C +ENCODING 13212 +BBX 15 8 1 0 +BITMAP +B4B4 +DADA +9292 +9292 +9292 +9292 +9292 +9292 +ENDCHAR +STARTCHAR uni339D +ENCODING 13213 +BBX 14 8 1 0 +BITMAP +3968 +45B4 +8124 +8124 +8124 +8124 +4524 +3924 +ENDCHAR +STARTCHAR uni339E +ENCODING 13214 +BBX 14 13 1 0 +BITMAP +8000 +8000 +8000 +8000 +8000 +8568 +89B4 +9124 +E124 +9124 +8924 +8524 +8524 +ENDCHAR +STARTCHAR uni339F +ENCODING 13215 +BBX 14 14 1 0 +BITMAP +003C +0004 +003C +0020 +003C +0000 +D1A0 +A950 +A950 +A950 +A950 +A950 +A950 +A950 +ENDCHAR +STARTCHAR uni33A0 +ENCODING 13216 +BBX 15 14 0 0 +BITMAP +001E +0002 +001E +0010 +001E +0000 +38D0 +44A8 +80A8 +80A8 +80A8 +80A8 +44A8 +38A8 +ENDCHAR +STARTCHAR uni33A1 +ENCODING 13217 +BBX 13 14 3 0 +BITMAP +0030 +0048 +0010 +0020 +0078 +0000 +B9C0 +C620 +8420 +8420 +8420 +8420 +8420 +8420 +ENDCHAR +STARTCHAR uni33A2 +ENCODING 13218 +BBX 15 14 0 0 +BITMAP +001E +0002 +801E +8010 +801E +8000 +84D0 +88A8 +90A8 +A0A8 +D0A8 +88A8 +84A8 +82A8 +ENDCHAR +STARTCHAR uni33A3 +ENCODING 13219 +BBX 14 14 1 0 +BITMAP +003C +0004 +001C +0004 +003C +0000 +D1A0 +A950 +A950 +A950 +A950 +A950 +A950 +A950 +ENDCHAR +STARTCHAR uni33A4 +ENCODING 13220 +BBX 15 14 0 0 +BITMAP +001E +0002 +000E +0002 +001E +0000 +38D0 +44A8 +80A8 +80A8 +80A8 +80A8 +44A8 +38A8 +ENDCHAR +STARTCHAR uni33A5 +ENCODING 13221 +BBX 12 14 2 0 +BITMAP +00F0 +0010 +0070 +0010 +00F0 +0000 +B300 +CC80 +8880 +8880 +8880 +8880 +8880 +8880 +ENDCHAR +STARTCHAR uni33A6 +ENCODING 13222 +BBX 15 14 0 0 +BITMAP +001E +0002 +800E +8002 +801E +8000 +84D0 +88A8 +90A8 +A0A8 +D0A8 +88A8 +84A8 +82A8 +ENDCHAR +STARTCHAR uni33A7 +ENCODING 13223 +BBX 15 16 0 -2 +BITMAP +0002 +D004 +A808 +A810 +A820 +A840 +A880 +A978 +AA84 +0280 +0478 +0804 +1084 +2078 +4000 +8000 +ENDCHAR +STARTCHAR uni33A8 +ENCODING 13224 +BBX 15 16 0 -2 +BITMAP +0010 +D02E +A822 +A84E +A888 +A88E +A900 +AA78 +AC84 +0480 +0878 +1004 +1084 +2078 +4000 +8000 +ENDCHAR +STARTCHAR uni33A9 +ENCODING 13225 +BBX 12 12 2 0 +BITMAP +F800 +8400 +8400 +8400 +85E0 +FA10 +8010 +81F0 +8210 +8210 +8230 +81D0 +ENDCHAR +STARTCHAR uni33AA +ENCODING 13226 +BBX 15 12 0 0 +BITMAP +81C0 +8120 +8120 +8120 +853C +89C2 +9102 +A11E +D122 +8922 +8526 +831A +ENDCHAR +STARTCHAR uni33AB +ENCODING 13227 +BBX 15 12 0 0 +BITMAP +89C0 +8920 +D920 +D920 +A93C +A9C2 +8902 +891E +8922 +8922 +8926 +891A +ENDCHAR +STARTCHAR uni33AC +ENCODING 13228 +BBX 15 12 0 0 +BITMAP +71C0 +8920 +8920 +8120 +813C +81C2 +9D02 +891E +8922 +8922 +8926 +791A +ENDCHAR +STARTCHAR uni33AD +ENCODING 13229 +BBX 14 12 1 0 +BITMAP +0004 +0004 +0004 +0004 +B634 +C94C +8144 +8F44 +9144 +9144 +934C +8DB4 +ENDCHAR +STARTCHAR uni33AE +ENCODING 13230 +BBX 15 16 0 -2 +BITMAP +0082 +0084 +0084 +B188 +CA88 +9A90 +AA90 +AAA0 +AAAC +9DD2 +0090 +010C +0102 +0212 +040C +0800 +ENDCHAR +STARTCHAR uni33AF +ENCODING 13231 +BBX 15 16 0 -2 +BITMAP +0090 +009E +0092 +B1AE +CAA8 +9AAE +AAC0 +AAC0 +AA98 +9DA4 +00A0 +0118 +0104 +0224 +0218 +0400 +ENDCHAR +STARTCHAR uni33B0 +ENCODING 13232 +BBX 13 10 1 -2 +BITMAP +B8F0 +C508 +8500 +84E0 +8410 +8408 +C508 +B8F0 +8000 +8000 +ENDCHAR +STARTCHAR uni33B1 +ENCODING 13233 +BBX 13 8 1 0 +BITMAP +B0F0 +C908 +8900 +88E0 +8810 +8808 +8908 +88F0 +ENDCHAR +STARTCHAR uni33B2 +ENCODING 13234 +BBX 14 10 1 -2 +BITMAP +2278 +2284 +2280 +2270 +4408 +4404 +4484 +7B78 +8000 +8000 +ENDCHAR +STARTCHAR uni33B3 +ENCODING 13235 +BBX 13 8 1 0 +BITMAP +D0F0 +A908 +A900 +A8E0 +A810 +A808 +A908 +A8F0 +ENDCHAR +STARTCHAR uni33B4 +ENCODING 13236 +BBX 14 14 1 -2 +BITMAP +0104 +0104 +0104 +0104 +B904 +C488 +8488 +8488 +8450 +C450 +B820 +8020 +8000 +8000 +ENDCHAR +STARTCHAR uni33B5 +ENCODING 13237 +BBX 13 12 1 0 +BITMAP +0208 +0208 +0208 +0208 +B110 +C910 +8910 +88A0 +88A0 +8840 +8840 +8840 +ENDCHAR +STARTCHAR uni33B6 +ENCODING 13238 +BBX 15 14 0 -2 +BITMAP +0082 +0082 +0082 +0082 +2282 +2244 +2244 +2244 +4428 +4428 +4410 +7B10 +8000 +8000 +ENDCHAR +STARTCHAR uni33B7 +ENCODING 13239 +BBX 13 12 2 0 +BITMAP +0208 +0208 +0208 +0208 +D208 +A910 +A910 +A910 +A8A0 +A8A0 +A840 +A840 +ENDCHAR +STARTCHAR uni33B8 +ENCODING 13240 +BBX 14 12 0 0 +BITMAP +8104 +8104 +8104 +8104 +8504 +8888 +9088 +A088 +D050 +8850 +8420 +8220 +ENDCHAR +STARTCHAR uni33B9 +ENCODING 13241 +BBX 15 12 0 0 +BITMAP +8282 +8282 +C682 +C682 +AA82 +AA44 +9244 +9244 +8228 +8228 +8210 +8210 +ENDCHAR +STARTCHAR uni33BA +ENCODING 13242 +BBX 14 14 1 -2 +BITMAP +0444 +0444 +0444 +0244 +B228 +CA28 +8928 +8928 +8968 +C990 +B090 +8090 +8000 +8000 +ENDCHAR +STARTCHAR uni33BB +ENCODING 13243 +BBX 14 12 1 0 +BITMAP +0444 +0444 +0444 +0244 +B228 +CA28 +8928 +8928 +8968 +8990 +8890 +8890 +ENDCHAR +STARTCHAR uni33BC +ENCODING 13244 +BBX 15 14 0 -2 +BITMAP +0222 +0222 +0222 +0122 +2514 +2514 +2494 +2494 +48B4 +48C8 +4848 +7648 +8000 +8000 +ENDCHAR +STARTCHAR uni33BD +ENCODING 13245 +BBX 14 12 1 0 +BITMAP +0444 +0444 +0444 +0244 +D228 +AA28 +A928 +A928 +A968 +A990 +A890 +A890 +ENDCHAR +STARTCHAR uni33BE +ENCODING 13246 +BBX 15 12 0 0 +BITMAP +8222 +8222 +8222 +8122 +8514 +8914 +9094 +A094 +D0B4 +88C8 +8448 +8348 +ENDCHAR +STARTCHAR uni33BF +ENCODING 13247 +BBX 15 12 0 0 +BITMAP +8322 +8322 +C722 +C722 +AA94 +AA94 +9294 +9294 +82B4 +8248 +8248 +8248 +ENDCHAR +STARTCHAR uni33C0 +ENCODING 13248 +BBX 14 12 1 0 +BITMAP +80E0 +8110 +8208 +8208 +9208 +9208 +A208 +C208 +A208 +9110 +8910 +8FBC +ENDCHAR +STARTCHAR uni33C1 +ENCODING 13249 +BBX 15 12 1 0 +BITMAP +8870 +8888 +D904 +D904 +A904 +A904 +8904 +8904 +8904 +8888 +8888 +8BDE +ENDCHAR +STARTCHAR uni33C2 +ENCODING 13250 +BBX 14 8 1 0 +BITMAP +61A0 +9150 +1150 +7150 +9150 +9150 +B150 +5554 +ENDCHAR +STARTCHAR uni33C3 +ENCODING 13251 +BBX 12 14 2 -2 +BITMAP +F000 +8800 +8800 +8800 +88D0 +F130 +8910 +8510 +8510 +8530 +88D0 +F010 +0010 +0010 +ENDCHAR +STARTCHAR uni33C4 +ENCODING 13252 +BBX 15 8 1 0 +BITMAP +3C3C +4242 +8080 +8080 +8080 +8080 +4242 +3C3C +ENDCHAR +STARTCHAR uni33C5 +ENCODING 13253 +BBX 13 13 1 0 +BITMAP +0008 +0008 +0008 +0008 +0008 +78E8 +8518 +8108 +8108 +8108 +8108 +8518 +78E8 +ENDCHAR +STARTCHAR uni33C6 +ENCODING 13254 +BBX 16 16 0 -2 +BITMAP +0010 +7020 +8840 +8080 +8100 +8A00 +7601 +0A4D +1252 +2292 +4312 +828C +0248 +024E +0011 +000E +ENDCHAR +STARTCHAR uni33C7 +ENCODING 13255 +BBX 15 12 0 0 +BITMAP +3C00 +4200 +8100 +8000 +8070 +8088 +8088 +8088 +8088 +8188 +4288 +3C72 +ENDCHAR +STARTCHAR uni33C8 +ENCODING 13256 +BBX 15 12 0 0 +BITMAP +04F8 +0484 +0484 +0484 +7484 +8CF8 +8484 +8482 +8482 +8482 +8C84 +74F8 +ENDCHAR +STARTCHAR uni33C9 +ENCODING 13257 +BBX 14 14 1 -2 +BITMAP +3C00 +4200 +8200 +8000 +8084 +8084 +8044 +8748 +8228 +8230 +4610 +3A20 +0020 +00C0 +ENDCHAR +STARTCHAR uni33CA +ENCODING 13258 +BBX 12 12 2 0 +BITMAP +8000 +8000 +8000 +8000 +B1E0 +CA10 +8810 +89F0 +8A10 +8A10 +8A30 +89D0 +ENDCHAR +STARTCHAR uni33CB +ENCODING 13259 +BBX 13 13 2 0 +BITMAP +83E0 +8210 +8208 +8208 +8208 +8210 +FFE0 +8200 +8200 +8200 +8200 +8200 +8200 +ENDCHAR +STARTCHAR uni33CC +ENCODING 13260 +BBX 13 11 1 0 +BITMAP +2000 +2000 +0000 +6170 +2188 +2108 +2108 +2108 +2108 +2108 +F908 +ENDCHAR +STARTCHAR uni33CD +ENCODING 13261 +BBX 15 13 1 0 +BITMAP +8888 +8888 +9090 +9090 +A0A0 +A0A0 +E0E0 +A0A0 +A0A0 +9090 +9090 +9292 +8A8A +ENDCHAR +STARTCHAR uni33CE +ENCODING 13262 +BBX 13 12 1 0 +BITMAP +8A08 +8A08 +8B18 +9318 +A2A8 +C2A8 +A248 +9248 +8A08 +8A08 +8A08 +8A08 +ENDCHAR +STARTCHAR uni33CF +ENCODING 13263 +BBX 13 12 1 0 +BITMAP +8000 +8040 +8040 +8040 +84F0 +8840 +9040 +A040 +D040 +8848 +8448 +8230 +ENDCHAR +STARTCHAR uni33D0 +ENCODING 13264 +BBX 14 12 1 0 +BITMAP +6000 +2000 +2000 +2000 +2000 +21D8 +2124 +2124 +2124 +2124 +2124 +F924 +ENDCHAR +STARTCHAR uni33D1 +ENCODING 13265 +BBX 14 12 1 0 +BITMAP +6000 +2000 +2000 +2000 +2000 +2178 +2184 +2104 +2104 +2104 +2104 +F904 +ENDCHAR +STARTCHAR uni33D2 +ENCODING 13266 +BBX 15 14 0 -2 +BITMAP +6000 +2000 +2000 +2002 +271A +28A4 +28A4 +28A4 +2898 +2890 +289C +F722 +0022 +001C +ENDCHAR +STARTCHAR uni33D3 +ENCODING 13267 +BBX 14 12 1 0 +BITMAP +6000 +2000 +2000 +2000 +2204 +2108 +2090 +2060 +2060 +2090 +2108 +FA04 +ENDCHAR +STARTCHAR uni33D4 +ENCODING 13268 +BBX 12 12 2 0 +BITMAP +0200 +0200 +0200 +0200 +D2E0 +AB10 +AA10 +AA10 +AA10 +AA10 +AB10 +AAE0 +ENDCHAR +STARTCHAR uni33D5 +ENCODING 13269 +BBX 14 12 1 0 +BITMAP +0030 +0110 +0110 +0010 +D310 +A910 +A910 +A910 +A910 +A910 +A910 +AFFC +ENDCHAR +STARTCHAR uni33D6 +ENCODING 13270 +BBX 16 12 0 0 +BITMAP +000C +0004 +0004 +0004 +D1C4 +AA24 +AA24 +AA24 +AA24 +AA24 +AA24 +A9DF +ENDCHAR +STARTCHAR uni33D7 +ENCODING 13271 +BBX 14 12 1 0 +BITMAP +F884 +8484 +8484 +8484 +8484 +F8FC +8084 +8084 +8084 +8084 +8084 +8084 +ENDCHAR +STARTCHAR uni33D8 +ENCODING 13272 +BBX 14 10 1 -2 +BITMAP +B1A0 +C950 +8950 +8950 +8950 +F150 +8150 +8954 +8000 +8000 +ENDCHAR +STARTCHAR uni33D9 +ENCODING 13273 +BBX 15 12 0 0 +BITMAP +E722 +94A2 +94B6 +94B6 +94AA +E72A +8422 +8422 +8422 +8422 +8422 +8422 +ENDCHAR +STARTCHAR uni33DA +ENCODING 13274 +BBX 14 12 1 0 +BITMAP +F8F8 +8484 +8484 +8484 +8484 +F8F8 +8090 +8090 +8088 +8088 +8084 +8084 +ENDCHAR +STARTCHAR uni33DB +ENCODING 13275 +BBX 14 8 1 0 +BITMAP +7858 +8464 +8040 +7040 +0840 +0440 +8440 +7840 +ENDCHAR +STARTCHAR uni33DC +ENCODING 13276 +BBX 14 12 1 0 +BITMAP +3C00 +4200 +8000 +8000 +6104 +1904 +0688 +0188 +0150 +8150 +4220 +3C20 +ENDCHAR +STARTCHAR uni33DD +ENCODING 13277 +BBX 15 12 0 0 +BITMAP +88A0 +88A0 +88A0 +88A0 +44BC +4522 +4D22 +4D22 +5522 +2222 +2222 +223C +ENDCHAR +STARTCHAR uni33DE +ENCODING 13278 +BBX 14 14 1 -1 +BITMAP +0004 +4408 +4410 +4420 +4440 +2880 +2968 +1254 +1454 +0854 +1054 +2054 +4054 +8000 +ENDCHAR +STARTCHAR uni33DF +ENCODING 13279 +BBX 14 14 1 -1 +BITMAP +1004 +2808 +4410 +7C20 +4440 +4480 +4568 +0254 +0454 +0854 +1054 +2054 +4054 +8000 +ENDCHAR +STARTCHAR uni33E0 +ENCODING 13280 +BBX 13 15 1 -2 +BITMAP +20F8 +6088 +2088 +2088 +2088 +2088 +20F8 +2088 +2088 +2088 +2088 +2088 +20F8 +F888 +0088 +ENDCHAR +STARTCHAR uni33E1 +ENCODING 13281 +BBX 12 15 2 -2 +BITMAP +61F0 +9110 +9110 +1110 +1110 +2110 +21F0 +2110 +4110 +4110 +4110 +8110 +81F0 +F110 +0110 +ENDCHAR +STARTCHAR uni33E2 +ENCODING 13282 +BBX 12 15 2 -2 +BITMAP +61F0 +9110 +9110 +1110 +1110 +1110 +61F0 +1110 +1110 +1110 +1110 +9110 +91F0 +6110 +0110 +ENDCHAR +STARTCHAR uni33E3 +ENCODING 13283 +BBX 12 15 2 -2 +BITMAP +91F0 +9110 +9110 +9110 +9110 +9110 +F1F0 +1110 +1110 +1110 +1110 +1110 +11F0 +1110 +0110 +ENDCHAR +STARTCHAR uni33E4 +ENCODING 13284 +BBX 12 15 2 -2 +BITMAP +F1F0 +8110 +8110 +8110 +8110 +8110 +E1F0 +1110 +1110 +1110 +1110 +9110 +91F0 +6110 +0110 +ENDCHAR +STARTCHAR uni33E5 +ENCODING 13285 +BBX 12 15 2 -2 +BITMAP +61F0 +9110 +9110 +8110 +8110 +8110 +E1F0 +9110 +9110 +9110 +9110 +9110 +91F0 +6110 +0110 +ENDCHAR +STARTCHAR uni33E6 +ENCODING 13286 +BBX 12 15 2 -2 +BITMAP +F1F0 +1110 +1110 +1110 +2110 +2110 +21F0 +4110 +4110 +4110 +4110 +4110 +41F0 +4110 +0110 +ENDCHAR +STARTCHAR uni33E7 +ENCODING 13287 +BBX 12 15 2 -2 +BITMAP +61F0 +9110 +9110 +9110 +9110 +9110 +61F0 +9110 +9110 +9110 +9110 +9110 +91F0 +6110 +0110 +ENDCHAR +STARTCHAR uni33E8 +ENCODING 13288 +BBX 12 15 2 -2 +BITMAP +61F0 +9110 +9110 +9110 +9110 +9110 +61F0 +1110 +1110 +1110 +1110 +9110 +91F0 +6110 +0110 +ENDCHAR +STARTCHAR uni33E9 +ENCODING 13289 +BBX 13 15 1 -2 +BITMAP +4CF8 +D288 +5288 +5288 +5288 +5288 +52F8 +5288 +5288 +5288 +5288 +5288 +52F8 +EC88 +0088 +ENDCHAR +STARTCHAR uni33EA +ENCODING 13290 +BBX 13 15 1 -2 +BITMAP +44F8 +CC88 +4488 +4488 +4488 +4488 +44F8 +4488 +4488 +4488 +4488 +4488 +44F8 +EE88 +0088 +ENDCHAR +STARTCHAR uni33EB +ENCODING 13291 +BBX 13 15 1 -2 +BITMAP +4CF8 +D288 +5288 +4288 +4288 +4488 +44F8 +4488 +4888 +4888 +4888 +5088 +50F8 +FE88 +0088 +ENDCHAR +STARTCHAR uni33EC +ENCODING 13292 +BBX 13 15 1 -2 +BITMAP +4CF8 +D288 +5288 +4288 +4288 +4288 +4CF8 +4288 +4288 +4288 +4288 +5288 +52F8 +EC88 +0088 +ENDCHAR +STARTCHAR uni33ED +ENCODING 13293 +BBX 13 15 1 -2 +BITMAP +52F8 +D288 +5288 +5288 +5288 +5288 +5EF8 +4288 +4288 +4288 +4288 +4288 +42F8 +E288 +0088 +ENDCHAR +STARTCHAR uni33EE +ENCODING 13294 +BBX 13 15 1 -2 +BITMAP +5EF8 +D088 +5088 +5088 +5088 +5088 +5CF8 +4288 +4288 +4288 +4288 +5288 +52F8 +EC88 +0088 +ENDCHAR +STARTCHAR uni33EF +ENCODING 13295 +BBX 13 15 1 -2 +BITMAP +4CF8 +D288 +5288 +5088 +5088 +5088 +5CF8 +5288 +5288 +5288 +5288 +5288 +52F8 +EC88 +0088 +ENDCHAR +STARTCHAR uni33F0 +ENCODING 13296 +BBX 13 15 1 -2 +BITMAP +5EF8 +C288 +4288 +4288 +4488 +4488 +44F8 +4888 +4888 +4888 +4888 +4888 +48F8 +E888 +0088 +ENDCHAR +STARTCHAR uni33F1 +ENCODING 13297 +BBX 13 15 1 -2 +BITMAP +4CF8 +D288 +5288 +5288 +5288 +5288 +4CF8 +5288 +5288 +5288 +5288 +5288 +52F8 +EC88 +0088 +ENDCHAR +STARTCHAR uni33F2 +ENCODING 13298 +BBX 13 15 1 -2 +BITMAP +4CF8 +D288 +5288 +5288 +5288 +5288 +4CF8 +4288 +4288 +4288 +4288 +5288 +52F8 +EC88 +0088 +ENDCHAR +STARTCHAR uni33F3 +ENCODING 13299 +BBX 14 15 1 -2 +BITMAP +633C +94A4 +94A4 +14A4 +14A4 +24A4 +24BC +24A4 +44A4 +44A4 +44A4 +84A4 +84BC +F324 +0024 +ENDCHAR +STARTCHAR uni33F4 +ENCODING 13300 +BBX 14 15 1 -2 +BITMAP +623C +9624 +9224 +1224 +1224 +2224 +223C +2224 +4224 +4224 +4224 +8224 +823C +F724 +0024 +ENDCHAR +STARTCHAR uni33F5 +ENCODING 13301 +BBX 14 15 1 -2 +BITMAP +633C +94A4 +94A4 +10A4 +10A4 +2124 +213C +2124 +4224 +4224 +4224 +8424 +843C +F7A4 +0024 +ENDCHAR +STARTCHAR uni33F6 +ENCODING 13302 +BBX 14 15 1 -2 +BITMAP +633C +94A4 +94A4 +10A4 +10A4 +20A4 +233C +20A4 +40A4 +40A4 +40A4 +84A4 +84BC +F324 +0024 +ENDCHAR +STARTCHAR uni33F7 +ENCODING 13303 +BBX 14 15 1 -2 +BITMAP +64BC +94A4 +94A4 +14A4 +14A4 +24A4 +27BC +20A4 +40A4 +40A4 +40A4 +80A4 +80BC +F0A4 +0024 +ENDCHAR +STARTCHAR uni33F8 +ENCODING 13304 +BBX 14 15 1 -2 +BITMAP +67BC +9424 +9424 +1424 +1424 +2424 +273C +20A4 +40A4 +40A4 +40A4 +84A4 +84BC +F324 +0024 +ENDCHAR +STARTCHAR uni33F9 +ENCODING 13305 +BBX 14 15 1 -2 +BITMAP +633C +94A4 +94A4 +1424 +1424 +2424 +273C +24A4 +44A4 +44A4 +44A4 +84A4 +84BC +F324 +0024 +ENDCHAR +STARTCHAR uni33FA +ENCODING 13306 +BBX 14 15 1 -2 +BITMAP +67BC +90A4 +90A4 +10A4 +1124 +2124 +213C +2224 +4224 +4224 +4224 +8224 +823C +F224 +0024 +ENDCHAR +STARTCHAR uni33FB +ENCODING 13307 +BBX 14 15 1 -2 +BITMAP +633C +94A4 +94A4 +14A4 +14A4 +24A4 +233C +24A4 +44A4 +44A4 +44A4 +84A4 +84BC +F324 +0024 +ENDCHAR +STARTCHAR uni33FC +ENCODING 13308 +BBX 14 15 1 -2 +BITMAP +633C +94A4 +94A4 +14A4 +14A4 +24A4 +233C +20A4 +40A4 +40A4 +40A4 +84A4 +84BC +F324 +0024 +ENDCHAR +STARTCHAR uni33FD +ENCODING 13309 +BBX 14 15 1 -2 +BITMAP +633C +94A4 +94A4 +14A4 +14A4 +14A4 +64BC +14A4 +14A4 +14A4 +14A4 +94A4 +94BC +6324 +0024 +ENDCHAR +STARTCHAR uni33FE +ENCODING 13310 +BBX 14 15 1 -2 +BITMAP +623C +9624 +9224 +1224 +1224 +1224 +623C +1224 +1224 +1224 +1224 +9224 +923C +6724 +0024 +ENDCHAR +STARTCHAR uni33FF +ENCODING 13311 +BBX 15 14 1 -2 +BITMAP +000C +0004 +0004 +0804 +69C4 +9224 +9024 +91E4 +6224 +4224 +7264 +89AE +8800 +7000 +ENDCHAR +STARTCHAR uni3400 +ENCODING 13312 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +0440 +0440 +0440 +0440 +7C7C +0440 +0440 +0440 +0440 +0440 +0440 +0440 +FFFE +ENDCHAR +STARTCHAR uni3401 +ENCODING 13313 +BBX 15 15 0 -2 +BITMAP +FFFE +0100 +0100 +3FF8 +2108 +2108 +2108 +2288 +2248 +2428 +2828 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni3402 +ENCODING 13314 +BBX 15 15 1 -1 +BITMAP +0800 +087C +FF80 +0800 +0804 +07FC +0000 +2040 +2346 +2C58 +F1E0 +2040 +2142 +2142 +1F3E +ENDCHAR +STARTCHAR uni3403 +ENCODING 13315 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0440 +0820 +1010 +2008 +4004 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni3404 +ENCODING 13316 +BBX 14 16 1 -2 +BITMAP +0200 +0200 +0200 +0200 +7FF0 +0200 +4200 +4200 +8200 +FFFC +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni3405 +ENCODING 13317 +BBX 12 14 1 -1 +BITMAP +0020 +0020 +4040 +2040 +1080 +0880 +0500 +0200 +0500 +0880 +1040 +2020 +4010 +8000 +ENDCHAR +STARTCHAR uni3406 +ENCODING 13318 +BBX 11 15 2 -1 +BITMAP +00E0 +1F00 +1000 +1FE0 +1020 +1FE0 +1020 +1FE0 +1000 +1FE0 +1020 +2020 +2020 +4020 +80C0 +ENDCHAR +STARTCHAR uni3407 +ENCODING 13319 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +3FE0 +0420 +0420 +0822 +3022 +C01E +0000 +7FF0 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni3408 +ENCODING 13320 +BBX 15 15 0 -1 +BITMAP +0600 +0100 +0280 +0440 +0820 +3018 +C006 +3FF8 +0010 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni3409 +ENCODING 13321 +BBX 13 15 1 -2 +BITMAP +FFF8 +0200 +0200 +0200 +0200 +0200 +0A00 +0400 +FFE0 +00C0 +0300 +0C00 +3008 +4008 +3FF8 +ENDCHAR +STARTCHAR uni340A +ENCODING 13322 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +FFFE +0100 +0100 +3FF8 +0000 +0000 +7FF0 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni340B +ENCODING 13323 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +3FF8 +0100 +0100 +FFFE +0000 +0000 +7FF0 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni340C +ENCODING 13324 +BBX 15 15 0 -1 +BITMAP +0800 +0800 +1FFC +2000 +4100 +8100 +1170 +1390 +1D10 +F110 +1150 +1122 +1102 +1002 +0FFE +ENDCHAR +STARTCHAR uni340D +ENCODING 13325 +BBX 13 15 1 -1 +BITMAP +01F8 +FE00 +0410 +4210 +2220 +2040 +0000 +7FF0 +0020 +00C0 +0300 +0C00 +3008 +4008 +3FF8 +ENDCHAR +STARTCHAR uni340E +ENCODING 13326 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +0820 +0440 +0380 +1C70 +E00E +0000 +3FF8 +0010 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni340F +ENCODING 13327 +BBX 14 15 1 -2 +BITMAP +7FF8 +0200 +0200 +3FE0 +0420 +0820 +FFFC +0000 +FFE0 +00C0 +0300 +0C00 +3008 +4008 +3FF8 +ENDCHAR +STARTCHAR uni3410 +ENCODING 13328 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +FEFC +2284 +4488 +2850 +1020 +2858 +C586 +0000 +7FF0 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni3411 +ENCODING 13329 +BBX 15 16 0 -2 +BITMAP +0800 +1FF0 +2820 +07C0 +1830 +E18E +0C40 +0300 +0080 +7FF0 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni3412 +ENCODING 13330 +BBX 14 15 0 -2 +BITMAP +7FF8 +0408 +0850 +3020 +DFF8 +1008 +1008 +1FF8 +0000 +7FF0 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni3413 +ENCODING 13331 +BBX 15 15 0 -2 +BITMAP +FFFE +0010 +1F90 +1090 +1090 +1F90 +0050 +0020 +7FF0 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni3414 +ENCODING 13332 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +0000 +7FF0 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni3415 +ENCODING 13333 +BBX 13 16 1 -2 +BITMAP +0200 +0200 +7FF0 +4210 +4210 +7FF0 +4210 +4210 +7FF0 +0000 +FFE0 +00C0 +0700 +3808 +4008 +3FF8 +ENDCHAR +STARTCHAR uni3416 +ENCODING 13334 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +0820 +FFA0 +0820 +0820 +7F20 +0020 +0020 +7F20 +4120 +4122 +4122 +7F22 +411E +ENDCHAR +STARTCHAR uni3417 +ENCODING 13335 +BBX 15 16 0 -2 +BITMAP +0208 +3FD0 +0220 +FFFE +0200 +0C70 +3F84 +C804 +07FC +0000 +7FF0 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni3418 +ENCODING 13336 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +FFFE +0540 +0920 +3118 +C106 +0000 +7FF0 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni3419 +ENCODING 13337 +BBX 15 15 0 -2 +BITMAP +7FFC +0000 +1FF0 +1010 +1FF0 +0820 +0440 +FFFE +0000 +7FF0 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni341A +ENCODING 13338 +BBX 15 16 0 -2 +BITMAP +7FFC +0200 +3FF0 +0410 +FFFE +0000 +1FF0 +1010 +1FF0 +0000 +7FF0 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni341B +ENCODING 13339 +BBX 14 16 0 -2 +BITMAP +0840 +0840 +17FC +3080 +5100 +93F8 +1508 +1108 +11F8 +0000 +7FF0 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni341C +ENCODING 13340 +BBX 15 16 0 -2 +BITMAP +1040 +1440 +1240 +1040 +FEF8 +1048 +1048 +9248 +5448 +1048 +3848 +548A +928A +110A +5206 +2400 +ENDCHAR +STARTCHAR uni341D +ENCODING 13341 +BBX 14 16 0 -2 +BITMAP +1100 +1100 +F9F8 +1208 +19E8 +3128 +D1E8 +1008 +5050 +2020 +7FF0 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni341E +ENCODING 13342 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7FFC +0820 +0FE0 +0820 +0FE0 +0820 +FFFE +1010 +2FE8 +4044 +8382 +0C08 +1008 +0FF8 +ENDCHAR +STARTCHAR uni341F +ENCODING 13343 +BBX 13 16 1 -2 +BITMAP +0880 +0880 +F8F8 +0880 +78F0 +0880 +F8F8 +0880 +0880 +FFE0 +00C0 +0300 +0C00 +3008 +4008 +3FF8 +ENDCHAR +STARTCHAR uni3420 +ENCODING 13344 +BBX 15 16 0 -2 +BITMAP +07A0 +F820 +48A0 +2520 +7F20 +0220 +07A2 +FC22 +4422 +0C1E +0000 +3FF0 +01C0 +1E04 +2004 +1FFC +ENDCHAR +STARTCHAR uni3421 +ENCODING 13345 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2040 +23F8 +FAA8 +2AA8 +2AA8 +2A18 +2840 +2FFC +28A0 +2912 +2A0A +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni3422 +ENCODING 13346 +BBX 15 16 0 -2 +BITMAP +203C +17C0 +8244 +4928 +13F8 +E010 +27FE +2020 +20A0 +0040 +7FF0 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni3423 +ENCODING 13347 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2080 +2FF8 +2080 +27F0 +2490 +27F0 +2490 +3FFC +2080 +2FF8 +4060 +4380 +8404 +03FC +ENDCHAR +STARTCHAR uni3424 +ENCODING 13348 +BBX 15 16 0 -2 +BITMAP +2040 +23F8 +2040 +21F0 +F910 +29F0 +2910 +29F0 +2910 +29F0 +2910 +2BFA +28A2 +4912 +47FE +8000 +ENDCHAR +STARTCHAR uni3425 +ENCODING 13349 +BBX 15 16 0 -2 +BITMAP +1008 +29C8 +455E +B94A +11CA +7D4A +11CA +5552 +3D6A +E384 +0000 +3FF0 +01C0 +1E04 +2004 +1FFC +ENDCHAR +STARTCHAR uni3426 +ENCODING 13350 +BBX 15 16 0 -2 +BITMAP +3BB8 +2208 +3BB8 +2488 +FFFE +1050 +2788 +C106 +1FF0 +0100 +0300 +3FF0 +01C0 +1E04 +2004 +1FFC +ENDCHAR +STARTCHAR uni3427 +ENCODING 13351 +BBX 14 16 0 -2 +BITMAP +0080 +1080 +0880 +0480 +0480 +0080 +7FFC +0184 +0288 +0490 +0880 +3080 +C080 +0080 +0280 +0100 +ENDCHAR +STARTCHAR uni3428 +ENCODING 13352 +BBX 15 15 0 -2 +BITMAP +7CFC +0404 +2828 +1010 +0808 +FEFE +1212 +1414 +1010 +1010 +1010 +1010 +1010 +5050 +2020 +ENDCHAR +STARTCHAR uni3429 +ENCODING 13353 +BBX 15 16 0 -2 +BITMAP +2424 +2424 +2424 +2424 +7E7E +2424 +2424 +2424 +FEFE +2424 +2424 +2424 +2424 +4444 +4444 +8484 +ENDCHAR +STARTCHAR uni342A +ENCODING 13354 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +0100 +FFFE +0000 +0100 +2108 +2108 +2108 +2108 +3FF8 +0288 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni342B +ENCODING 13355 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +0100 +FFFE +0000 +0820 +0440 +2288 +2108 +2288 +2448 +2828 +2008 +2008 +3FF8 +0008 +ENDCHAR +STARTCHAR uni342C +ENCODING 13356 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +FFFE +0440 +0420 +09D0 +7E08 +0000 +1110 +1110 +1110 +1110 +1112 +2112 +C10E +ENDCHAR +STARTCHAR uni342D +ENCODING 13357 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0000 +0000 +3FF8 +2008 +2008 +27C8 +2448 +2448 +27C8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni342E +ENCODING 13358 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0820 +3018 +C446 +3FF8 +0440 +3FF8 +0440 +FFFE +0484 +F868 +0F18 +7806 +ENDCHAR +STARTCHAR uni342F +ENCODING 13359 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0820 +1FF0 +1010 +1FF0 +0000 +1FE0 +0100 +7FFC +0920 +3FF8 +C826 +0FE0 +0820 +0FE0 +ENDCHAR +STARTCHAR uni3430 +ENCODING 13360 +BBX 14 16 0 -2 +BITMAP +0800 +09FC +0904 +1104 +1104 +3104 +3104 +5104 +9104 +1104 +1104 +1104 +1104 +11FC +1104 +1000 +ENDCHAR +STARTCHAR uni3431 +ENCODING 13361 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0280 +0440 +0820 +1050 +2188 +C606 +3820 +00C0 +0700 +3818 +0060 +0380 +7C00 +ENDCHAR +STARTCHAR uni3432 +ENCODING 13362 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +1040 +1040 +37FE +3040 +5040 +9040 +10A0 +10A0 +1090 +1110 +1108 +1204 +1402 +ENDCHAR +STARTCHAR uni3433 +ENCODING 13363 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0BFC +1090 +1090 +3090 +3090 +5090 +9090 +1090 +1090 +1092 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni3434 +ENCODING 13364 +BBX 14 16 0 -2 +BITMAP +0880 +0880 +0880 +10FC +1104 +3104 +3284 +5448 +9028 +1010 +1010 +1020 +1040 +1080 +1100 +1600 +ENDCHAR +STARTCHAR uni3435 +ENCODING 13365 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0840 +1040 +1040 +3040 +3FFE +5040 +9040 +1040 +1040 +1040 +1040 +1040 +1140 +1080 +ENDCHAR +STARTCHAR uni3436 +ENCODING 13366 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0BFC +1204 +1204 +3204 +3204 +53FC +9204 +1200 +1200 +1202 +1202 +1202 +11FE +1000 +ENDCHAR +STARTCHAR uni3437 +ENCODING 13367 +BBX 14 16 0 -2 +BITMAP +0800 +0FF0 +0810 +1010 +1210 +3210 +3210 +53FC +9004 +1004 +1004 +17F4 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni3438 +ENCODING 13368 +BBX 15 16 0 -2 +BITMAP +0880 +0880 +0880 +10FC +1104 +3108 +3240 +5440 +9040 +10A0 +10A0 +1090 +1110 +1108 +1204 +1402 +ENDCHAR +STARTCHAR uni3439 +ENCODING 13369 +BBX 15 16 0 -2 +BITMAP +0900 +0900 +09FC +1200 +1400 +31F8 +3000 +5000 +93F8 +1008 +1008 +1008 +100A +100A +1006 +1002 +ENDCHAR +STARTCHAR uni343A +ENCODING 13370 +BBX 15 16 0 -2 +BITMAP +1120 +1120 +1120 +2220 +2220 +6620 +6620 +AA20 +2220 +2250 +2250 +2250 +2248 +2288 +2284 +2302 +ENDCHAR +STARTCHAR uni343B +ENCODING 13371 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +1020 +13FE +3222 +3222 +5222 +9252 +124A +128A +1302 +1202 +1202 +120A +1204 +ENDCHAR +STARTCHAR uni343C +ENCODING 13372 +BBX 15 16 0 -2 +BITMAP +0808 +0868 +0B88 +1088 +1088 +3088 +3088 +53FE +9088 +1088 +1088 +1088 +1108 +1108 +1208 +1408 +ENDCHAR +STARTCHAR uni343D +ENCODING 13373 +BBX 15 16 0 -2 +BITMAP +0800 +0BF8 +0A08 +1208 +1328 +32A8 +32A8 +5248 +9248 +12A8 +12A8 +132A +140A +140A +1806 +1002 +ENDCHAR +STARTCHAR uni343E +ENCODING 13374 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0BF8 +1000 +1000 +3000 +37FC +5120 +9120 +1120 +1120 +1120 +1222 +1222 +141E +1800 +ENDCHAR +STARTCHAR uni343F +ENCODING 13375 +BBX 15 16 0 -2 +BITMAP +0810 +0878 +0BC0 +1040 +1040 +33F8 +3040 +5040 +9040 +17FE +1040 +1040 +1040 +1040 +1140 +1080 +ENDCHAR +STARTCHAR uni3440 +ENCODING 13376 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +1040 +17FE +3040 +3040 +50A0 +90A0 +10A0 +1110 +1110 +1288 +1248 +1444 +1802 +ENDCHAR +STARTCHAR uni3441 +ENCODING 13377 +BBX 14 16 0 -2 +BITMAP +0840 +0840 +0A48 +1248 +1248 +3248 +33F8 +5048 +9040 +1040 +1444 +1444 +1444 +1444 +17FC +1004 +ENDCHAR +STARTCHAR uni3442 +ENCODING 13378 +BBX 14 16 0 -2 +BITMAP +1000 +17FC +1040 +2040 +2040 +67FC +6444 +A444 +24A4 +2494 +2514 +2604 +2404 +2404 +2414 +2408 +ENDCHAR +STARTCHAR uni3443 +ENCODING 13379 +BBX 14 16 0 -2 +BITMAP +1220 +1220 +1220 +2420 +257C +6924 +6E24 +A224 +2424 +2424 +2924 +2F24 +2144 +2044 +2094 +2108 +ENDCHAR +STARTCHAR uni3444 +ENCODING 13380 +BBX 15 16 0 -2 +BITMAP +0800 +09F8 +0908 +1148 +1128 +3128 +37FE +5208 +9248 +1228 +1228 +13FE +1008 +1008 +1050 +1020 +ENDCHAR +STARTCHAR uni3445 +ENCODING 13381 +BBX 15 16 0 -2 +BITMAP +0900 +0900 +0900 +11FE +1240 +3240 +3440 +5040 +907C +1040 +1040 +1040 +1040 +1040 +17FE +1000 +ENDCHAR +STARTCHAR uni3446 +ENCODING 13382 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0A04 +1204 +1204 +3204 +33FC +5090 +9090 +1090 +1090 +1112 +1112 +1212 +140E +1800 +ENDCHAR +STARTCHAR uni3447 +ENCODING 13383 +BBX 14 16 0 -2 +BITMAP +0880 +0880 +08F8 +1108 +1210 +3420 +33FC +5004 +9004 +1004 +11FC +1004 +1004 +1004 +13FC +1004 +ENDCHAR +STARTCHAR uni3448 +ENCODING 13384 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +17FE +1080 +3120 +3120 +5220 +93FC +1020 +1128 +1124 +1222 +1422 +10A0 +1040 +ENDCHAR +STARTCHAR uni3449 +ENCODING 13385 +BBX 15 16 0 -2 +BITMAP +1000 +17F8 +1408 +2408 +27F8 +6488 +6488 +A4E8 +2528 +2528 +26A8 +244A +244A +288A +2906 +3202 +ENDCHAR +STARTCHAR uni344A +ENCODING 13386 +BBX 15 16 0 -2 +BITMAP +0840 +0820 +0820 +17FE +1090 +3090 +3090 +5294 +9292 +1292 +1492 +1090 +1110 +1110 +1250 +1420 +ENDCHAR +STARTCHAR uni344B +ENCODING 13387 +BBX 14 16 0 -2 +BITMAP +10A0 +10A0 +10A0 +20A0 +27FC +64A4 +64A4 +A4A4 +24A4 +27FC +24A4 +24A4 +24A4 +24A4 +27FC +2404 +ENDCHAR +STARTCHAR uni344C +ENCODING 13388 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +0A00 +1200 +13FC +3220 +3220 +52F8 +9220 +1220 +1220 +13FC +1200 +1200 +13FE +1000 +ENDCHAR +STARTCHAR uni344D +ENCODING 13389 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FC +2040 +2040 +63F8 +6040 +A040 +27FE +20E0 +2150 +2150 +2248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni344E +ENCODING 13390 +BBX 14 16 0 -2 +BITMAP +1000 +1248 +1248 +2490 +2490 +6248 +6248 +A000 +2040 +2444 +2444 +2444 +2444 +2444 +27FC +2004 +ENDCHAR +STARTCHAR uni344F +ENCODING 13391 +BBX 15 16 0 -2 +BITMAP +0840 +0820 +0BFE +1202 +1414 +3010 +3010 +53FE +9010 +1110 +1090 +1090 +1010 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni3450 +ENCODING 13392 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +107C +1040 +3040 +37FE +5000 +9040 +1040 +1250 +1248 +1444 +1844 +1140 +1080 +ENDCHAR +STARTCHAR uni3451 +ENCODING 13393 +BBX 14 16 0 -2 +BITMAP +0840 +0840 +0880 +13FC +1204 +3204 +3204 +53FC +9204 +1204 +13FC +1204 +1204 +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni3452 +ENCODING 13394 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0440 +0820 +3018 +CFE6 +0100 +0100 +1FF0 +1110 +1110 +1FF0 +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3453 +ENCODING 13395 +BBX 15 16 0 -2 +BITMAP +0820 +0840 +0888 +1104 +13FE +3042 +3040 +57FE +9080 +10FC +1144 +1144 +1228 +1210 +1468 +1186 +ENDCHAR +STARTCHAR uni3454 +ENCODING 13396 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +0820 +1040 +11FC +3104 +3104 +5124 +9124 +1124 +1124 +1144 +1050 +1088 +1104 +1204 +ENDCHAR +STARTCHAR uni3455 +ENCODING 13397 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0A22 +1222 +1222 +33FE +3040 +5040 +90FC +1104 +1284 +1448 +1050 +1020 +10C0 +1700 +ENDCHAR +STARTCHAR uni3456 +ENCODING 13398 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +1110 +2210 +22FE +6692 +6692 +AA92 +2292 +22FE +2292 +2210 +2210 +2210 +2210 +2210 +ENDCHAR +STARTCHAR uni3457 +ENCODING 13399 +BBX 15 16 0 -2 +BITMAP +0880 +0900 +0BF8 +1208 +13F8 +3208 +33FA +520A +920C +17F8 +1018 +1028 +1048 +1188 +1E28 +1010 +ENDCHAR +STARTCHAR uni3458 +ENCODING 13400 +BBX 15 16 0 -2 +BITMAP +1014 +1012 +1010 +2FFE +2010 +6290 +6292 +A292 +2FD2 +2294 +2294 +2288 +228A +249A +2426 +2842 +ENDCHAR +STARTCHAR uni3459 +ENCODING 13401 +BBX 15 16 0 -2 +BITMAP +1000 +1FFE +1480 +2490 +2490 +6790 +6490 +A490 +2490 +2790 +2490 +2492 +24D2 +2F92 +208E +2080 +ENDCHAR +STARTCHAR uni345A +ENCODING 13402 +BBX 15 16 0 -2 +BITMAP +1000 +17DE +1252 +2252 +2254 +67D4 +6258 +A254 +2252 +2FD2 +2252 +225A +2254 +2450 +2550 +2890 +ENDCHAR +STARTCHAR uni345B +ENCODING 13403 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0FFE +1040 +1040 +37FC +3444 +5444 +97FC +1040 +10E0 +1150 +1248 +1C46 +1040 +1040 +ENDCHAR +STARTCHAR uni345C +ENCODING 13404 +BBX 15 16 0 -2 +BITMAP +1208 +121C +1260 +2240 +2FC0 +6240 +627E +A2C8 +2348 +2E48 +2248 +2248 +2248 +2248 +2A88 +2508 +ENDCHAR +STARTCHAR uni345D +ENCODING 13405 +BBX 15 16 0 -2 +BITMAP +1000 +17FC +1040 +2040 +23F8 +6040 +6040 +A7FC +2110 +2110 +2FFE +2110 +2110 +2210 +2210 +2410 +ENDCHAR +STARTCHAR uni345E +ENCODING 13406 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1244 +2244 +24A8 +6110 +6208 +AC06 +2110 +2110 +2FFE +2110 +2110 +2210 +2210 +2410 +ENDCHAR +STARTCHAR uni345F +ENCODING 13407 +BBX 15 16 0 -2 +BITMAP +0808 +081C +09E0 +1100 +1100 +31FE +3110 +5110 +9110 +1110 +17FE +1000 +1090 +1108 +1204 +1402 +ENDCHAR +STARTCHAR uni3460 +ENCODING 13408 +BBX 15 16 0 -2 +BITMAP +0880 +0AFC +0AA4 +12A4 +12A8 +3290 +32A8 +50C6 +9020 +1020 +11FC +1020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni3461 +ENCODING 13409 +BBX 14 16 0 -2 +BITMAP +1000 +17BC +14A4 +24A4 +24A4 +67A4 +64A4 +A4A4 +24A4 +27A4 +2434 +2528 +24A0 +2560 +2620 +2020 +ENDCHAR +STARTCHAR uni3462 +ENCODING 13410 +BBX 15 16 0 -2 +BITMAP +0900 +0900 +091E +1392 +1112 +3112 +3112 +57D2 +9112 +1112 +121A +1294 +17D0 +1250 +1010 +1010 +ENDCHAR +STARTCHAR uni3463 +ENCODING 13411 +BBX 15 16 0 -2 +BITMAP +0910 +0910 +0910 +1110 +17BC +3110 +3110 +5338 +93B8 +1554 +1554 +1992 +1110 +1110 +1110 +1110 +ENDCHAR +STARTCHAR uni3464 +ENCODING 13412 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +1FFE +2110 +2110 +6000 +67FC +A444 +2444 +2444 +27FC +2444 +2444 +2444 +27FC +2404 +ENDCHAR +STARTCHAR uni3465 +ENCODING 13413 +BBX 14 16 0 -2 +BITMAP +0800 +0BF8 +0A08 +13F8 +1208 +33F8 +3100 +5100 +93FC +1494 +1894 +1124 +1244 +1484 +1128 +1210 +ENDCHAR +STARTCHAR uni3466 +ENCODING 13414 +BBX 15 16 0 -2 +BITMAP +0840 +0820 +0BFC +1204 +1204 +33FC +3200 +5228 +9224 +13FE +1220 +1250 +1250 +1488 +1504 +1A02 +ENDCHAR +STARTCHAR uni3467 +ENCODING 13415 +BBX 15 16 0 -2 +BITMAP +1038 +13C0 +1040 +27FC +20E0 +6150 +6248 +AC46 +23F0 +2020 +2040 +27FC +2040 +2040 +2140 +2080 +ENDCHAR +STARTCHAR uni3468 +ENCODING 13416 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1208 +2208 +2208 +63F8 +A100 +23FC +2C40 +2040 +2FFE +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni3469 +ENCODING 13417 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +0A52 +1252 +1252 +33FE +3020 +5040 +90FC +1104 +1288 +1050 +1020 +1040 +1180 +1600 +ENDCHAR +STARTCHAR uni346A +ENCODING 13418 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2208 +2110 +60E0 +A318 +2E0E +23F8 +2208 +2208 +23F8 +2208 +2408 +2808 +ENDCHAR +STARTCHAR uni346B +ENCODING 13419 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +08A0 +1110 +1288 +3446 +33F0 +5010 +90A0 +1040 +1148 +1504 +1514 +1514 +18F0 +1000 +ENDCHAR +STARTCHAR uni346C +ENCODING 13420 +BBX 15 16 0 -2 +BITMAP +1210 +1210 +1210 +2210 +2F7E +6510 +6510 +A510 +257C +2944 +2544 +2244 +2244 +2544 +257C +2844 +ENDCHAR +STARTCHAR uni346D +ENCODING 13421 +BBX 15 16 0 -2 +BITMAP +1000 +17FC +1444 +2444 +27FC +6444 +6444 +A7FC +2000 +2000 +2FFE +2208 +2208 +2208 +2408 +2808 +ENDCHAR +STARTCHAR uni346E +ENCODING 13422 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +0A22 +1020 +13FE +3020 +31FC +5124 +91FC +1124 +11FC +1020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni346F +ENCODING 13423 +BBX 15 16 0 -2 +BITMAP +0800 +0FFE +0840 +1080 +13FC +3204 +3204 +53FC +9204 +13FC +1204 +1204 +13FC +1000 +1108 +1204 +ENDCHAR +STARTCHAR uni3470 +ENCODING 13424 +BBX 15 16 0 -2 +BITMAP +0900 +09F8 +0A08 +13F0 +1010 +37FE +3080 +5144 +9668 +10B0 +1128 +1668 +10A4 +1122 +16A0 +1040 +ENDCHAR +STARTCHAR uni3471 +ENCODING 13425 +BBX 15 16 0 -2 +BITMAP +0800 +0BF8 +0890 +1060 +17FC +30A4 +3128 +5220 +9460 +1040 +17FC +10E0 +1150 +1248 +1C46 +1040 +ENDCHAR +STARTCHAR uni3472 +ENCODING 13426 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1FFE +2040 +2040 +67FC +6514 +A4A4 +25F4 +2444 +2444 +25F4 +2444 +2444 +2454 +2408 +ENDCHAR +STARTCHAR uni3473 +ENCODING 13427 +BBX 15 16 0 -2 +BITMAP +0900 +0900 +0BFE +1442 +1252 +33F2 +3082 +5114 +9608 +13FE +1442 +1A52 +13F2 +1082 +1114 +1608 +ENDCHAR +STARTCHAR uni3474 +ENCODING 13428 +BBX 15 16 0 -2 +BITMAP +0BF8 +0808 +09F8 +1008 +13F8 +3000 +37FC +5444 +93F8 +1248 +1258 +1040 +13F8 +1110 +10E0 +171E +ENDCHAR +STARTCHAR uni3475 +ENCODING 13429 +BBX 15 16 0 -2 +BITMAP +0820 +0810 +09FE +1100 +1120 +3520 +333C +5150 +9190 +1310 +15FE +1110 +1128 +1228 +1244 +1482 +ENDCHAR +STARTCHAR uni3476 +ENCODING 13430 +BBX 15 16 0 -2 +BITMAP +0900 +0900 +09FC +1200 +15F8 +3000 +33F8 +5088 +92A8 +11C8 +17F8 +108A +11CA +16AA +1086 +1082 +ENDCHAR +STARTCHAR uni3477 +ENCODING 13431 +BBX 15 16 0 -2 +BITMAP +1110 +1212 +1454 +27D8 +2010 +6012 +67D2 +A44E +2440 +27D2 +2454 +2458 +27D0 +2452 +2552 +248E +ENDCHAR +STARTCHAR uni3478 +ENCODING 13432 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0FFC +1040 +13F8 +3208 +33F8 +5000 +9FFE +1008 +13E8 +1228 +13E8 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni3479 +ENCODING 13433 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0440 +0FE0 +3118 +DFF6 +1110 +1FF0 +1110 +1FF0 +0000 +0FE0 +0820 +0FE0 +0820 +0FE0 +ENDCHAR +STARTCHAR uni347A +ENCODING 13434 +BBX 15 16 0 -2 +BITMAP +08A0 +0890 +09FE +1320 +15FC +3120 +31FC +5120 +91FE +1100 +13FC +1088 +109E +1102 +120A +1404 +ENDCHAR +STARTCHAR uni347B +ENCODING 13435 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +17FE +2402 +2894 +6050 +6524 +A54A +28FA +2300 +2040 +2444 +2444 +2444 +27FC +2004 +ENDCHAR +STARTCHAR uni347C +ENCODING 13436 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +103C +2FA4 +2AC4 +6AA8 +6A90 +AFA8 +2AC6 +2A80 +2ABC +2AA4 +2FA4 +28A4 +203C +2024 +ENDCHAR +STARTCHAR uni347D +ENCODING 13437 +BBX 15 16 0 -2 +BITMAP +1040 +1444 +1248 +2FFE +2802 +63F8 +6208 +A208 +23F8 +2040 +2040 +27FC +2040 +2040 +2FFE +2000 +ENDCHAR +STARTCHAR uni347E +ENCODING 13438 +BBX 15 16 0 -2 +BITMAP +0840 +08FC +0908 +1650 +1120 +30C0 +3320 +5FFE +9000 +13FC +1000 +13FC +1000 +13FC +1204 +13FC +ENDCHAR +STARTCHAR uni347F +ENCODING 13439 +BBX 15 16 0 -2 +BITMAP +1248 +1490 +1248 +2000 +23F8 +6248 +63F8 +A248 +23F8 +2040 +27FC +20E0 +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni3480 +ENCODING 13440 +BBX 14 16 0 -2 +BITMAP +1080 +1040 +17FC +2110 +20A0 +67FC +6444 +A5F4 +2444 +25F4 +2514 +2514 +25F4 +2404 +2414 +2408 +ENDCHAR +STARTCHAR uni3481 +ENCODING 13441 +BBX 14 16 0 -2 +BITMAP +1000 +17FC +1444 +2444 +25F4 +6444 +67FC +A514 +24A4 +25F4 +2444 +27FC +2444 +2444 +27FC +2404 +ENDCHAR +STARTCHAR uni3482 +ENCODING 13442 +BBX 15 16 0 -2 +BITMAP +0908 +0908 +0FFE +1108 +1044 +33F4 +3048 +5050 +97FE +1080 +11FC +1304 +15FC +1904 +11FC +1104 +ENDCHAR +STARTCHAR uni3483 +ENCODING 13443 +BBX 15 16 0 -2 +BITMAP +0814 +0BFE +0810 +13D0 +1010 +33D0 +3010 +53D0 +9250 +13D0 +1250 +13C8 +124A +13CA +1186 +1242 +ENDCHAR +STARTCHAR uni3484 +ENCODING 13444 +BBX 15 16 0 -2 +BITMAP +0910 +0914 +09D2 +1250 +127E +3550 +3090 +52A8 +9128 +1144 +1244 +1482 +1008 +12A4 +1252 +1452 +ENDCHAR +STARTCHAR uni3485 +ENCODING 13445 +BBX 15 16 0 -2 +BITMAP +0820 +0BFE +0840 +10F8 +1348 +3030 +33D0 +503C +91C4 +1048 +1030 +13C4 +10A8 +1190 +16A8 +10C6 +ENDCHAR +STARTCHAR uni3486 +ENCODING 13446 +BBX 15 16 0 -2 +BITMAP +0840 +08A0 +0918 +16E6 +1000 +33F8 +3208 +53F8 +9000 +17BC +1084 +14A4 +1294 +14A4 +1294 +1108 +ENDCHAR +STARTCHAR uni3487 +ENCODING 13447 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +13FC +26A8 +2AA8 +62A8 +67FC +A2A8 +22A8 +22A8 +2FFE +2000 +22A8 +2254 +2454 +2000 +ENDCHAR +STARTCHAR uni3488 +ENCODING 13448 +BBX 15 16 0 -2 +BITMAP +1008 +1788 +1088 +2110 +2FDE +6494 +64A4 +A794 +2494 +2794 +2494 +24C8 +2788 +2C94 +20A4 +20C2 +ENDCHAR +STARTCHAR uni3489 +ENCODING 13449 +BBX 15 16 0 -2 +BITMAP +0840 +0A48 +0950 +17FC +1404 +31F0 +3110 +5110 +91F0 +1040 +17FC +10E0 +1150 +1248 +1446 +1040 +ENDCHAR +STARTCHAR uni348A +ENCODING 13450 +BBX 15 16 0 -2 +BITMAP +1000 +17BC +1294 +26B4 +2AD4 +64A4 +65AC +A840 +2108 +2108 +25A8 +252C +2528 +25A8 +2E7E +2000 +ENDCHAR +STARTCHAR uni348B +ENCODING 13451 +BBX 15 16 0 -2 +BITMAP +1480 +1482 +149C +2FD0 +2490 +6790 +649E +A794 +2494 +2494 +2FD4 +2014 +2514 +28A4 +3024 +2044 +ENDCHAR +STARTCHAR uni348C +ENCODING 13452 +BBX 15 16 0 -2 +BITMAP +1110 +1554 +15B8 +2910 +22A8 +6444 +6000 +A7FC +2404 +29E8 +2120 +2120 +2120 +2222 +2422 +281E +ENDCHAR +STARTCHAR uni348D +ENCODING 13453 +BBX 14 16 0 -2 +BITMAP +0880 +0910 +0BF8 +1210 +14A4 +37BC +3080 +5110 +93E0 +1040 +1088 +17FC +1044 +1248 +1544 +1080 +ENDCHAR +STARTCHAR uni348E +ENCODING 13454 +BBX 15 16 0 -2 +BITMAP +0800 +0BF8 +0880 +17FC +1110 +3208 +3CA6 +50A0 +97BC +10A0 +13B8 +10A0 +17BC +10A0 +10A0 +10A0 +ENDCHAR +STARTCHAR uni348F +ENCODING 13455 +BBX 15 16 0 -2 +BITMAP +0840 +0820 +0FFE +1492 +13FC +3090 +33FC +5090 +97FE +1108 +1204 +1462 +1010 +1180 +1060 +1010 +ENDCHAR +STARTCHAR uni3490 +ENCODING 13456 +BBX 15 16 0 -2 +BITMAP +0910 +0910 +09DE +12A8 +1444 +3100 +31FC +5204 +95F4 +1114 +11F4 +1114 +11F4 +1114 +1028 +1010 +ENDCHAR +STARTCHAR uni3491 +ENCODING 13457 +BBX 15 16 0 -2 +BITMAP +1000 +17FE +1428 +2624 +257E +6448 +64C8 +A47E +2648 +257E +2448 +2448 +257E +2640 +27FE +2000 +ENDCHAR +STARTCHAR uni3492 +ENCODING 13458 +BBX 15 15 1 -1 +BITMAP +10A0 +14A4 +12A8 +2FFE +2208 +6110 +A7FC +2040 +23F8 +2040 +2FFE +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni3493 +ENCODING 13459 +BBX 15 16 0 -2 +BITMAP +1010 +1410 +127C +2010 +20FE +6044 +6628 +A2FE +2210 +227C +2210 +22FE +2210 +2210 +25FE +2800 +ENDCHAR +STARTCHAR uni3494 +ENCODING 13460 +BBX 15 16 0 -2 +BITMAP +1000 +17FC +14A4 +24A4 +27FC +6200 +63FE +A442 +2BFA +224A +23FA +2052 +207A +278A +2214 +2008 +ENDCHAR +STARTCHAR uni3495 +ENCODING 13461 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +17FE +2028 +2224 +627E +64C8 +A748 +217E +2248 +24C8 +2F7E +2148 +2248 +247E +2840 +ENDCHAR +STARTCHAR uni3496 +ENCODING 13462 +BBX 14 16 0 -2 +BITMAP +1110 +1110 +17FC +2110 +23F8 +6248 +63F8 +A248 +23F8 +2040 +27FC +2444 +2454 +25F4 +2414 +240C +ENDCHAR +STARTCHAR uni3497 +ENCODING 13463 +BBX 15 16 0 -2 +BITMAP +1110 +17FC +1110 +21F0 +2110 +61F0 +6110 +A7FE +2402 +2BFC +2110 +23F8 +2040 +23F8 +2040 +27FC +ENDCHAR +STARTCHAR uni3498 +ENCODING 13464 +BBX 15 16 0 -2 +BITMAP +1000 +17BC +1514 +2794 +2488 +6788 +6514 +A7A2 +2080 +2040 +27FC +2000 +2208 +2110 +2FFE +2000 +ENDCHAR +STARTCHAR uni3499 +ENCODING 13465 +BBX 15 16 0 -2 +BITMAP +1108 +1110 +123E +22A2 +24BE +6F22 +613E +A208 +24BE +2FAA +20AA +202A +2AAA +2AAE +2808 +2008 +ENDCHAR +STARTCHAR uni349A +ENCODING 13466 +BBX 15 16 0 -2 +BITMAP +103E +17C0 +1244 +2128 +23F8 +6040 +67FC +A000 +23F8 +2008 +23F8 +2008 +23F8 +2544 +252A +28FA +ENDCHAR +STARTCHAR uni349B +ENCODING 13467 +BBX 15 16 0 -2 +BITMAP +1000 +17BC +1084 +24A4 +2294 +64A4 +6120 +A210 +27FC +2A20 +23FC +2220 +23FC +2220 +23FE +2200 +ENDCHAR +STARTCHAR uni349C +ENCODING 13468 +BBX 15 16 0 -2 +BITMAP +0940 +0A4C +0A64 +1244 +134C +3264 +32A4 +53AC +92A4 +12A4 +17FE +1000 +1110 +1108 +1204 +1404 +ENDCHAR +STARTCHAR uni349D +ENCODING 13469 +BBX 15 16 0 -2 +BITMAP +0908 +0FFE +0908 +1000 +13FC +3294 +3294 +53FC +9028 +13FE +1220 +1324 +12A8 +1292 +142A +18C6 +ENDCHAR +STARTCHAR uni349E +ENCODING 13470 +BBX 15 16 0 -2 +BITMAP +0820 +0A22 +0BFE +1090 +11FE +3310 +35FE +5110 +91FE +1110 +11FE +1100 +13DE +1252 +1272 +1206 +ENDCHAR +STARTCHAR uni349F +ENCODING 13471 +BBX 15 16 0 -2 +BITMAP +1040 +17FE +1000 +23FC +2240 +63F8 +6240 +A3F8 +2240 +23FC +2004 +2554 +20A8 +2310 +2D48 +2186 +ENDCHAR +STARTCHAR uni34A0 +ENCODING 13472 +BBX 15 16 0 -2 +BITMAP +1100 +11BC +1524 +27A8 +2490 +6AA8 +6146 +A2A0 +27BC +20A0 +23B8 +20A0 +27BC +20A0 +2FFE +2000 +ENDCHAR +STARTCHAR uni34A1 +ENCODING 13473 +BBX 15 16 0 -2 +BITMAP +1182 +1E3C +1088 +2A90 +2522 +643C +6788 +AA12 +223E +2F88 +2208 +2AAC +2AAA +2BCA +2EA8 +2090 +ENDCHAR +STARTCHAR uni34A2 +ENCODING 13474 +BBX 15 16 0 -2 +BITMAP +1040 +10A0 +1110 +2208 +2DF6 +6000 +6EEE +AAAA +2EEE +2000 +2FFE +2922 +2FFE +2922 +292A +2804 +ENDCHAR +STARTCHAR uni34A3 +ENCODING 13475 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +17FE +24A8 +24FE +6550 +677C +A550 +257C +2550 +257E +2540 +28A4 +2A8A +328A +2478 +ENDCHAR +STARTCHAR uni34A4 +ENCODING 13476 +BBX 15 16 0 -2 +BITMAP +0BFC +0908 +09F8 +1108 +11F8 +310E +37F8 +5008 +97FE +1294 +139C +1294 +139C +12D6 +17BC +1084 +ENDCHAR +STARTCHAR uni34A5 +ENCODING 13477 +BBX 15 16 0 -2 +BITMAP +1150 +13F8 +1554 +27FC +2554 +67FC +6554 +A7FC +2000 +27FC +2000 +23F8 +2208 +23F8 +2110 +2FFE +ENDCHAR +STARTCHAR uni34A6 +ENCODING 13478 +BBX 15 16 0 -2 +BITMAP +17FC +1444 +17FC +2444 +27FC +6000 +6FBE +AAAA +2FBE +2AAA +2FBE +2040 +2040 +27FC +2040 +2FFE +ENDCHAR +STARTCHAR uni34A7 +ENCODING 13479 +BBX 15 16 0 -2 +BITMAP +1418 +1214 +1F90 +253E +2AA8 +6DE8 +68BE +AFA8 +2228 +2FBE +2AA8 +2AA8 +2BA8 +28BE +2AA0 +2920 +ENDCHAR +STARTCHAR uni34A8 +ENCODING 13480 +BBX 15 16 0 -2 +BITMAP +1040 +15F6 +1912 +29B2 +2D56 +69B2 +6912 +ADF6 +2080 +2FFE +2208 +25F4 +2912 +21F0 +2104 +20FC +ENDCHAR +STARTCHAR uni34A9 +ENCODING 13481 +BBX 15 16 0 -2 +BITMAP +11F0 +1210 +13E0 +2020 +27FC +6188 +6650 +A1A8 +2664 +21A0 +2248 +2FBE +2AAA +2FBE +228A +2FBE +ENDCHAR +STARTCHAR uni34AA +ENCODING 13482 +BBX 15 16 0 -2 +BITMAP +0380 +0C60 +3EF8 +E8A6 +3EF8 +2288 +3EF8 +28A0 +3EF8 +1000 +11FC +5CA0 +5154 +50B8 +5D54 +E0B2 +ENDCHAR +STARTCHAR uni34AB +ENCODING 13483 +BBX 15 15 0 -2 +BITMAP +0FF8 +0800 +0800 +0FF0 +0800 +0800 +FFFE +0440 +0440 +0440 +0440 +0844 +0844 +1044 +603C +ENDCHAR +STARTCHAR uni34AC +ENCODING 13484 +BBX 15 15 0 -2 +BITMAP +7DFC +0020 +0020 +0020 +FCF8 +2820 +2820 +2820 +2820 +29FC +2800 +2800 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni34AD +ENCODING 13485 +BBX 15 15 0 -2 +BITMAP +3E7C +2244 +2244 +2244 +2244 +3E7C +1428 +1428 +1428 +1428 +144A +254A +268A +4486 +8100 +ENDCHAR +STARTCHAR uni34AE +ENCODING 13486 +BBX 15 15 0 -2 +BITMAP +01FE +7820 +0040 +00A2 +0334 +FC58 +2894 +2B34 +2852 +2892 +2B50 +2822 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni34AF +ENCODING 13487 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +9088 +5400 +59FC +10A8 +FCA8 +2BFE +28A8 +28A8 +29FC +2820 +2BFE +4C20 +4820 +8020 +ENDCHAR +STARTCHAR uni34B0 +ENCODING 13488 +BBX 15 15 0 -1 +BITMAP +0600 +0100 +0280 +0440 +0820 +3018 +C006 +0000 +1FF0 +0100 +0100 +0100 +0100 +0100 +7FFC +ENDCHAR +STARTCHAR uni34B1 +ENCODING 13489 +BBX 15 16 0 -2 +BITMAP +0600 +0100 +0280 +0440 +0820 +3218 +C206 +07F0 +0810 +1410 +2220 +0140 +0080 +0300 +1C00 +E000 +ENDCHAR +STARTCHAR uni34B2 +ENCODING 13490 +BBX 15 16 0 -2 +BITMAP +0600 +0100 +0280 +0440 +0820 +3018 +DFF6 +1010 +1010 +1010 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni34B3 +ENCODING 13491 +BBX 13 15 1 -2 +BITMAP +FFF8 +8208 +8208 +8208 +A288 +9248 +9248 +AAA8 +C718 +8208 +8208 +8208 +8208 +8228 +8210 +ENDCHAR +STARTCHAR uni34B4 +ENCODING 13492 +BBX 15 16 0 -2 +BITMAP +0600 +0100 +0280 +0440 +0820 +3118 +D116 +1110 +1110 +1FF0 +0100 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni34B5 +ENCODING 13493 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0400 +3FF0 +2010 +2010 +3FF0 +2010 +2010 +2010 +3FF0 +0400 +0840 +3030 +C00C +ENDCHAR +STARTCHAR uni34B6 +ENCODING 13494 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +0820 +1010 +2108 +C206 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni34B7 +ENCODING 13495 +BBX 13 15 1 -2 +BITMAP +3FE0 +2020 +2220 +2220 +2220 +2520 +28A0 +2020 +2020 +FFF8 +0000 +0880 +1040 +2020 +4010 +ENDCHAR +STARTCHAR uni34B8 +ENCODING 13496 +BBX 15 16 0 -2 +BITMAP +0820 +0420 +0440 +7FFC +0200 +0600 +1908 +6290 +04A0 +18C0 +61A0 +0298 +0C86 +3080 +C280 +0100 +ENDCHAR +STARTCHAR uni34B9 +ENCODING 13497 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +FEFE +1010 +7C7C +4444 +7C7C +4444 +7C7C +4444 +7C7C +4444 +FEFE +2828 +4444 +8282 +ENDCHAR +STARTCHAR uni34BA +ENCODING 13498 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +9048 +8888 +BFE8 +8008 +9108 +9108 +9288 +9448 +9008 +9FE8 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni34BB +ENCODING 13499 +BBX 15 16 0 -2 +BITMAP +7FFC +4004 +5FF4 +4004 +5FF4 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0442 +1842 +E03E +ENDCHAR +STARTCHAR uni34BC +ENCODING 13500 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0FE0 +0100 +7FFC +4104 +5964 +4924 +4924 +5554 +618C +4104 +411C +ENDCHAR +STARTCHAR uni34BD +ENCODING 13501 +BBX 15 16 0 -2 +BITMAP +3FF8 +2008 +2FE8 +2008 +2FE8 +1110 +0920 +7FFC +0400 +FFFE +1010 +2FE8 +C826 +08A0 +0848 +07F8 +ENDCHAR +STARTCHAR uni34BE +ENCODING 13502 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2FE8 +2008 +2FE8 +2040 +1040 +FEFE +2120 +3CAC +24F4 +27A4 +44AC +54A2 +887E +ENDCHAR +STARTCHAR uni34BF +ENCODING 13503 +BBX 14 16 1 -2 +BITMAP +7FF0 +4010 +5FD0 +4010 +5FD0 +1000 +FE50 +2848 +92FC +AB90 +FEFC +1090 +FEFC +AA90 +BAFC +8680 +ENDCHAR +STARTCHAR uni34C0 +ENCODING 13504 +BBX 15 15 0 -2 +BITMAP +7FFE +4002 +8004 +0200 +0200 +0200 +0200 +0280 +0240 +0220 +0210 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni34C1 +ENCODING 13505 +BBX 14 8 2 2 +BITMAP +FFF8 +8888 +8888 +0880 +1080 +1084 +2084 +C07C +ENDCHAR +STARTCHAR uni34C2 +ENCODING 13506 +BBX 15 15 0 -2 +BITMAP +7FFE +4002 +8024 +3E20 +01FE +0044 +7E44 +14C8 +1428 +1410 +146A +2586 +2402 +43FE +8000 +ENDCHAR +STARTCHAR uni34C3 +ENCODING 13507 +BBX 15 15 0 -2 +BITMAP +7FFE +4002 +9004 +0800 +7F1C +00E0 +3E20 +0020 +3E3E +01E0 +3E22 +2222 +2222 +3E1E +2200 +ENDCHAR +STARTCHAR uni34C4 +ENCODING 13508 +BBX 15 16 0 -2 +BITMAP +1010 +2210 +7F10 +4210 +94FE +F792 +0892 +3610 +C928 +30A8 +C428 +1928 +6248 +0C4A +308A +C106 +ENDCHAR +STARTCHAR uni34C5 +ENCODING 13509 +BBX 15 15 0 -2 +BITMAP +4000 +23FE +2020 +0020 +0820 +0820 +1020 +1020 +E020 +2020 +2020 +2020 +2020 +20A0 +0040 +ENDCHAR +STARTCHAR uni34C6 +ENCODING 13510 +BBX 15 15 0 -1 +BITMAP +0040 +4040 +20A0 +20A0 +0110 +0A08 +0C06 +1110 +1120 +E140 +2180 +2100 +2104 +2104 +20FC +ENDCHAR +STARTCHAR uni34C7 +ENCODING 13511 +BBX 15 15 1 -1 +BITMAP +0038 +43C0 +2040 +1040 +0040 +0FFE +0040 +0040 +10A0 +10A0 +20A0 +2110 +4110 +4208 +8C06 +ENDCHAR +STARTCHAR uni34C8 +ENCODING 13512 +BBX 15 15 0 -2 +BITMAP +4000 +27FE +2040 +0040 +0880 +0880 +11F8 +1308 +E508 +2908 +2108 +2108 +2108 +21F8 +0108 +ENDCHAR +STARTCHAR uni34C9 +ENCODING 13513 +BBX 15 16 0 -2 +BITMAP +0010 +4078 +23C0 +2040 +0040 +07FE +1040 +1040 +2040 +E3F8 +2208 +2208 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni34CA +ENCODING 13514 +BBX 14 15 0 -2 +BITMAP +47FC +2404 +2404 +05F4 +0404 +1404 +15F4 +2514 +E514 +2514 +25F4 +2404 +2404 +2414 +0408 +ENDCHAR +STARTCHAR uni34CB +ENCODING 13515 +BBX 15 16 0 -2 +BITMAP +0110 +4110 +2110 +2110 +07FC +0110 +1110 +1110 +2110 +EFFE +2000 +2110 +2108 +2208 +2404 +0804 +ENDCHAR +STARTCHAR uni34CC +ENCODING 13516 +BBX 15 15 0 -1 +BITMAP +0040 +4040 +20A0 +2110 +0208 +0406 +13F8 +1040 +2040 +E040 +23F8 +2040 +2040 +2040 +27FE +ENDCHAR +STARTCHAR uni34CD +ENCODING 13517 +BBX 15 16 0 -2 +BITMAP +0080 +4040 +2040 +27FE +0080 +0110 +1208 +17FC +2124 +E120 +2120 +2120 +2222 +2222 +241E +0800 +ENDCHAR +STARTCHAR uni34CE +ENCODING 13518 +BBX 15 15 0 -2 +BITMAP +43F8 +2008 +21F8 +0008 +0BF8 +0800 +17FC +1404 +E3F0 +2110 +2110 +20A0 +2040 +21B0 +060E +ENDCHAR +STARTCHAR uni34CF +ENCODING 13519 +BBX 14 15 0 -2 +BITMAP +47FC +2404 +24A4 +0514 +060C +1404 +15F4 +2514 +E514 +2514 +25F4 +2514 +2404 +2414 +0408 +ENDCHAR +STARTCHAR uni34D0 +ENCODING 13520 +BBX 14 15 0 -1 +BITMAP +0040 +4040 +23F8 +2040 +0040 +07FC +1110 +1208 +2444 +E040 +23F8 +2040 +2040 +2040 +27FC +ENDCHAR +STARTCHAR uni34D1 +ENCODING 13521 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +27FC +2040 +0040 +0FFE +1110 +10A0 +27FC +E040 +2040 +2FFE +2040 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni34D2 +ENCODING 13522 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +0478 +0BC4 +7044 +103C +1100 +1280 +0C60 +3118 +C106 +0990 +1148 +2148 +0500 +0200 +ENDCHAR +STARTCHAR uni34D3 +ENCODING 13523 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +2FFE +2040 +0040 +07FC +1514 +14A4 +25F4 +E444 +2444 +25F4 +2444 +2444 +2454 +0408 +ENDCHAR +STARTCHAR uni34D4 +ENCODING 13524 +BBX 15 16 0 -2 +BITMAP +0108 +4208 +2788 +2488 +07BE +0488 +1788 +14C8 +24A8 +EFA8 +2188 +2288 +2488 +2888 +22A8 +0110 +ENDCHAR +STARTCHAR uni34D5 +ENCODING 13525 +BBX 15 16 0 -2 +BITMAP +0014 +4012 +2010 +27FE +0410 +0410 +17F2 +1492 +2492 +E5B4 +26D4 +2488 +254A +293A +2A26 +1042 +ENDCHAR +STARTCHAR uni34D6 +ENCODING 13526 +BBX 15 15 0 -2 +BITMAP +47FC +2444 +27FC +0444 +07FC +1248 +1248 +2FFE +E248 +2248 +27FC +2040 +2FFE +2040 +0040 +ENDCHAR +STARTCHAR uni34D7 +ENCODING 13527 +BBX 14 16 0 -2 +BITMAP +0100 +47BC +2114 +2394 +0114 +07A4 +114C +1080 +2110 +E3E0 +2048 +27FC +2044 +2248 +2544 +0080 +ENDCHAR +STARTCHAR uni34D8 +ENCODING 13528 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2FE8 +2108 +23C8 +2448 +2A88 +2108 +2608 +3BE8 +210A +2FEA +414A +4126 +9FF2 +ENDCHAR +STARTCHAR uni34D9 +ENCODING 13529 +BBX 13 16 1 -2 +BITMAP +0400 +0200 +0200 +3FE0 +8088 +9088 +8908 +8508 +8208 +8508 +8888 +9048 +A048 +8008 +FFF8 +0008 +ENDCHAR +STARTCHAR uni34DA +ENCODING 13530 +BBX 14 16 0 -2 +BITMAP +0004 +0004 +7F04 +0824 +0824 +0824 +0824 +0824 +0824 +0824 +0824 +0F24 +F004 +4004 +0014 +0008 +ENDCHAR +STARTCHAR uni34DB +ENCODING 13531 +BBX 14 14 1 -1 +BITMAP +07FC +0084 +F884 +2084 +2084 +2084 +2104 +2104 +2104 +3A04 +C204 +0408 +0808 +1070 +ENDCHAR +STARTCHAR uni34DC +ENCODING 13532 +BBX 14 16 0 -2 +BITMAP +0800 +0800 +10FC +1024 +2224 +4224 +FC24 +0424 +0824 +1024 +2424 +4224 +FE44 +4244 +0094 +0108 +ENDCHAR +STARTCHAR uni34DD +ENCODING 13533 +BBX 14 16 0 -2 +BITMAP +2204 +2204 +2204 +2224 +7F24 +2224 +2224 +2224 +FFA4 +2224 +2224 +2224 +2204 +4204 +4214 +8208 +ENDCHAR +STARTCHAR uni34DE +ENCODING 13534 +BBX 14 16 0 -2 +BITMAP +0800 +0800 +08FC +7F24 +0824 +0824 +0824 +7F24 +0824 +0824 +0824 +FFA4 +0844 +0844 +0894 +0908 +ENDCHAR +STARTCHAR uni34DF +ENCODING 13535 +BBX 14 16 0 -2 +BITMAP +0404 +0404 +0404 +3FA4 +24A4 +2524 +2424 +3FA4 +20A4 +2924 +2524 +2224 +2504 +4884 +9094 +0008 +ENDCHAR +STARTCHAR uni34E0 +ENCODING 13536 +BBX 13 16 1 -2 +BITMAP +1008 +1008 +1008 +1048 +1F48 +1048 +1048 +1048 +FE48 +8248 +8248 +8248 +8208 +8208 +FE28 +8210 +ENDCHAR +STARTCHAR uni34E1 +ENCODING 13537 +BBX 14 16 0 -2 +BITMAP +2004 +2004 +3F04 +4824 +8824 +0824 +FF24 +0824 +0824 +4924 +4924 +4904 +4F04 +7904 +0114 +0008 +ENDCHAR +STARTCHAR uni34E2 +ENCODING 13538 +BBX 14 16 0 -2 +BITMAP +1004 +1004 +1F04 +2124 +6124 +9224 +0C24 +1224 +2124 +C0A4 +3F24 +2124 +2104 +2104 +3F14 +2108 +ENDCHAR +STARTCHAR uni34E3 +ENCODING 13539 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +1404 +2224 +4124 +BEA4 +0024 +0024 +3E24 +2224 +2224 +2224 +2204 +3E04 +2214 +0008 +ENDCHAR +STARTCHAR uni34E4 +ENCODING 13540 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +0804 +FFA4 +0824 +0824 +7F24 +0024 +0024 +7F24 +4124 +4124 +4104 +7F04 +4114 +0008 +ENDCHAR +STARTCHAR uni34E5 +ENCODING 13541 +BBX 14 16 0 -2 +BITMAP +0804 +4904 +2904 +2924 +2A24 +0824 +FF24 +0124 +0124 +0124 +7F24 +0124 +0104 +0104 +FF14 +0108 +ENDCHAR +STARTCHAR uni34E6 +ENCODING 13542 +BBX 14 16 0 -2 +BITMAP +0004 +FFC4 +0804 +0824 +1024 +7F24 +4124 +4124 +4124 +7F24 +4124 +4124 +4104 +4104 +7F14 +4108 +ENDCHAR +STARTCHAR uni34E7 +ENCODING 13543 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +1404 +2224 +5124 +88A4 +7E24 +0224 +0424 +0824 +7F24 +4124 +4104 +4104 +7F14 +4108 +ENDCHAR +STARTCHAR uni34E8 +ENCODING 13544 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +0804 +FFA4 +0824 +2A24 +2A24 +2A24 +5D24 +88A4 +0824 +1424 +1204 +2104 +4114 +8008 +ENDCHAR +STARTCHAR uni34E9 +ENCODING 13545 +BBX 14 16 0 -2 +BITMAP +1004 +1004 +1F04 +2124 +4224 +BFA4 +24A4 +24A4 +3FA4 +24A4 +24A4 +3FA4 +2484 +4484 +4294 +8108 +ENDCHAR +STARTCHAR uni34EA +ENCODING 13546 +BBX 13 16 1 -2 +BITMAP +2000 +1000 +FDF8 +8448 +8448 +FC48 +8448 +8448 +FC48 +8048 +9048 +8848 +9488 +A488 +C128 +8210 +ENDCHAR +STARTCHAR uni34EB +ENCODING 13547 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +FFC4 +1224 +2124 +40A4 +BF24 +1224 +1224 +1224 +7FA4 +1224 +1204 +2204 +2214 +4208 +ENDCHAR +STARTCHAR uni34EC +ENCODING 13548 +BBX 14 16 0 -2 +BITMAP +0804 +4904 +2A04 +7F24 +0824 +1024 +FFA4 +2224 +4124 +80A4 +7F24 +1124 +1104 +2104 +4A14 +8408 +ENDCHAR +STARTCHAR uni34ED +ENCODING 13549 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +4104 +7F24 +4124 +7F24 +2024 +7FA4 +88A4 +48A4 +54A4 +40A4 +7E84 +0084 +0514 +0208 +ENDCHAR +STARTCHAR uni34EE +ENCODING 13550 +BBX 14 16 0 -2 +BITMAP +0004 +3F84 +2484 +24A4 +2EA4 +24A4 +3FA4 +20A4 +2EA4 +2AA4 +2AA4 +2EA4 +2084 +4084 +4294 +8108 +ENDCHAR +STARTCHAR uni34EF +ENCODING 13551 +BBX 14 16 0 -2 +BITMAP +2484 +2484 +4904 +9224 +4924 +24A4 +24A4 +0024 +7FA4 +48A4 +48A4 +7FA4 +4884 +4884 +7F94 +4088 +ENDCHAR +STARTCHAR uni34F0 +ENCODING 13552 +BBX 14 16 0 -2 +BITMAP +0004 +FF84 +0804 +0824 +3E24 +AAA4 +AAA4 +BEA4 +AAA4 +AAA4 +AAA4 +BEA4 +8084 +8F84 +F094 +0008 +ENDCHAR +STARTCHAR uni34F1 +ENCODING 13553 +BBX 14 16 0 -2 +BITMAP +0804 +1404 +2204 +4124 +BEA4 +0024 +78A4 +4AA4 +4AA4 +7AA4 +4AA4 +4AA4 +7A84 +4884 +4A94 +5908 +ENDCHAR +STARTCHAR uni34F2 +ENCODING 13554 +BBX 15 16 0 -2 +BITMAP +0802 +0402 +3FC2 +2042 +2052 +3FD2 +2012 +2012 +3FD2 +3552 +3552 +5FD2 +5542 +5542 +944A +10C4 +ENDCHAR +STARTCHAR uni34F3 +ENCODING 13555 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +2248 +3E48 +2248 +3E48 +0048 +FF48 +0848 +0848 +2F08 +2828 +2810 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni34F4 +ENCODING 13556 +BBX 14 16 0 -2 +BITMAP +0004 +FF84 +0804 +1024 +7F24 +5524 +5524 +5524 +5524 +4B24 +0824 +FFA4 +1404 +2204 +4114 +8088 +ENDCHAR +STARTCHAR uni34F5 +ENCODING 13557 +BBX 14 16 0 -2 +BITMAP +0004 +F784 +9484 +94A4 +F7A4 +0024 +7F24 +0024 +FFA4 +2024 +4024 +7F24 +0104 +0104 +0A14 +0408 +ENDCHAR +STARTCHAR uni34F6 +ENCODING 13558 +BBX 14 16 0 -2 +BITMAP +2004 +2F04 +F504 +2524 +7524 +2524 +F524 +2924 +2324 +0824 +0824 +FFA4 +1404 +2204 +4114 +8088 +ENDCHAR +STARTCHAR uni34F7 +ENCODING 13559 +BBX 14 16 0 -2 +BITMAP +0804 +1004 +7F04 +4124 +7F24 +4124 +7F24 +4124 +7F24 +0824 +FFA4 +1C24 +2A04 +4904 +8814 +0808 +ENDCHAR +STARTCHAR uni34F8 +ENCODING 13560 +BBX 14 16 0 -2 +BITMAP +0004 +7704 +5504 +5524 +7724 +1424 +1424 +7724 +4124 +4124 +7724 +1424 +1404 +1F04 +F014 +4008 +ENDCHAR +STARTCHAR uni34F9 +ENCODING 13561 +BBX 14 16 0 -2 +BITMAP +0004 +7FC4 +4404 +54A4 +6524 +4424 +4A24 +5124 +60A4 +4424 +54A4 +6524 +4404 +4A04 +9114 +2088 +ENDCHAR +STARTCHAR uni34FA +ENCODING 13562 +BBX 14 16 0 -2 +BITMAP +0804 +0F84 +0804 +7FA4 +48A4 +4F24 +78A4 +47A4 +4824 +4424 +7FA4 +4124 +5A04 +4404 +8A14 +3108 +ENDCHAR +STARTCHAR uni34FB +ENCODING 13563 +BBX 14 16 0 -2 +BITMAP +0004 +FF84 +9484 +94A4 +FFA4 +0024 +0024 +FFA4 +0824 +0824 +4F24 +4824 +4804 +4F84 +F814 +0008 +ENDCHAR +STARTCHAR uni34FC +ENCODING 13564 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +FF84 +1C24 +2B24 +C8A4 +1424 +2224 +4924 +88A4 +4924 +2A24 +4904 +8884 +2814 +1008 +ENDCHAR +STARTCHAR uni34FD +ENCODING 13565 +BBX 14 16 0 -2 +BITMAP +0804 +4904 +4904 +7F24 +1024 +0824 +FFA4 +80A4 +3F24 +0024 +FFA4 +0824 +2A04 +4904 +A894 +1008 +ENDCHAR +STARTCHAR uni34FE +ENCODING 13566 +BBX 15 16 0 -2 +BITMAP +0002 +7FC2 +4042 +7FC2 +4212 +4A92 +4712 +4A92 +5052 +4A12 +4FD2 +5212 +4202 +BFE2 +820A +0204 +ENDCHAR +STARTCHAR uni34FF +ENCODING 13567 +BBX 14 16 0 -2 +BITMAP +0704 +7804 +0804 +FFA4 +2A24 +4924 +94A4 +2224 +4924 +88A4 +4924 +2A24 +4904 +8884 +2814 +1008 +ENDCHAR +STARTCHAR uni3500 +ENCODING 13568 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +4104 +7F24 +4124 +7F24 +0824 +FFA4 +0024 +7F24 +4124 +7F24 +0804 +4904 +8894 +1808 +ENDCHAR +STARTCHAR uni3501 +ENCODING 13569 +BBX 14 16 0 -2 +BITMAP +0504 +7204 +1284 +5124 +2124 +5EA4 +80A4 +3F24 +2124 +2124 +3F24 +2124 +1204 +0784 +7814 +2008 +ENDCHAR +STARTCHAR uni3502 +ENCODING 13570 +BBX 14 16 0 -2 +BITMAP +0404 +2484 +1504 +7FD4 +1514 +2494 +4454 +2094 +2094 +3BF4 +4894 +AA84 +13E4 +2084 +4094 +8088 +ENDCHAR +STARTCHAR uni3503 +ENCODING 13571 +BBX 15 16 0 -2 +BITMAP +1080 +10F8 +2510 +7BFC +1124 +2524 +7DFC +0102 +5502 +94FE +0000 +7FF8 +0408 +0808 +1050 +6020 +ENDCHAR +STARTCHAR uni3504 +ENCODING 13572 +BBX 15 16 0 -2 +BITMAP +0002 +7FC2 +0A02 +7FC2 +4A52 +4A52 +7FD2 +0412 +2492 +1512 +FFD2 +0E12 +1502 +2482 +444A +0404 +ENDCHAR +STARTCHAR uni3505 +ENCODING 13573 +BBX 15 16 0 -2 +BITMAP +0402 +3F82 +0482 +7FC2 +0492 +3F92 +0412 +5552 +75D2 +4452 +7FD2 +4452 +75C2 +5542 +554A +8444 +ENDCHAR +STARTCHAR uni3506 +ENCODING 13574 +BBX 14 16 0 -2 +BITMAP +0004 +F784 +2104 +A524 +F7A4 +6324 +B5A4 +2124 +7FA4 +40A4 +40A4 +7FA4 +4084 +4084 +7F94 +4088 +ENDCHAR +STARTCHAR uni3507 +ENCODING 13575 +BBX 14 16 0 -2 +BITMAP +0904 +F644 +1284 +A124 +40A4 +F764 +1524 +1524 +79A4 +4024 +8F24 +F124 +1504 +1204 +5514 +2908 +ENDCHAR +STARTCHAR uni3508 +ENCODING 13576 +BBX 14 16 0 -2 +BITMAP +2204 +2204 +FF84 +2224 +1424 +1424 +F7A4 +1424 +1424 +7724 +1424 +1424 +F784 +1404 +1414 +1408 +ENDCHAR +STARTCHAR uni3509 +ENCODING 13577 +BBX 15 16 0 -2 +BITMAP +0002 +7FC2 +4042 +7FCA +400A +5FCA +420A +5FCA +524A +5FCA +420A +7FEA +62A2 +6FA2 +A0AA +2064 +ENDCHAR +STARTCHAR uni350A +ENCODING 13578 +BBX 15 16 0 -2 +BITMAP +0402 +FFE2 +0002 +7FC2 +4052 +5F52 +5152 +7FD2 +0012 +3F92 +2092 +3F92 +2082 +3F82 +000A +FFE4 +ENDCHAR +STARTCHAR uni350B +ENCODING 13579 +BBX 14 16 0 -2 +BITMAP +0004 +7A04 +5204 +7BA4 +4A24 +7B24 +54A4 +78A4 +0024 +7F24 +5524 +5524 +5504 +5784 +FC14 +0008 +ENDCHAR +STARTCHAR uni350C +ENCODING 13580 +BBX 14 16 0 -2 +BITMAP +FC04 +4B84 +7884 +4AA4 +7924 +4D24 +FAA4 +0CA4 +07A4 +F824 +28A4 +4D24 +1A04 +2904 +C894 +0808 +ENDCHAR +STARTCHAR uni350D +ENCODING 13581 +BBX 14 16 0 -2 +BITMAP +4204 +7BC4 +A504 +10A4 +7FA4 +40A4 +7FA4 +40A4 +7FA4 +40A4 +7FA4 +2124 +FFC4 +2104 +4114 +8108 +ENDCHAR +STARTCHAR uni350E +ENCODING 13582 +BBX 15 16 0 -2 +BITMAP +5210 +7EFE +2844 +7E28 +A2FE +3E10 +2010 +3E7C +2210 +3E10 +0000 +7FF8 +0408 +0808 +1050 +6020 +ENDCHAR +STARTCHAR uni350F +ENCODING 13583 +BBX 15 16 0 -2 +BITMAP +0002 +7FC2 +1002 +3F8A +508A +108A +1F8A +000A +FBEA +208A +79EA +492A +CB22 +4922 +79EA +4924 +ENDCHAR +STARTCHAR uni3510 +ENCODING 13584 +BBX 15 16 0 -2 +BITMAP +2102 +2102 +3DE2 +5282 +8852 +7FD2 +0A12 +7BD2 +0A12 +3B92 +0A12 +7BD2 +0A02 +0FC2 +F80A +4004 +ENDCHAR +STARTCHAR uni3511 +ENCODING 13585 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +2820 +7DFC +4488 +7C50 +41FE +7C20 +45FC +7C20 +0000 +7FF8 +0408 +0808 +1050 +6020 +ENDCHAR +STARTCHAR uni3512 +ENCODING 13586 +BBX 15 16 0 -2 +BITMAP +4442 +7FC2 +1202 +3FC2 +6212 +BFD2 +2212 +3FD2 +2212 +3FD2 +2012 +7FD2 +5142 +6EC2 +4A4A +4EC4 +ENDCHAR +STARTCHAR uni3513 +ENCODING 13587 +BBX 14 16 0 -2 +BITMAP +0420 +0E20 +7820 +0820 +08FC +0824 +0824 +FF24 +0824 +0824 +0824 +0844 +0844 +0884 +0928 +0A10 +ENDCHAR +STARTCHAR uni3514 +ENCODING 13588 +BBX 14 15 0 -1 +BITMAP +1000 +1000 +7E7C +1244 +1244 +1244 +2244 +227C +4A44 +8400 +1FF0 +2008 +2008 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3515 +ENCODING 13589 +BBX 14 16 0 -2 +BITMAP +2020 +2020 +3F20 +4020 +80FC +7E24 +0024 +0024 +7C24 +0424 +0524 +0524 +0344 +0144 +00A8 +0110 +ENDCHAR +STARTCHAR uni3516 +ENCODING 13590 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +7E7C +1244 +1244 +1244 +2244 +227C +4A44 +8400 +0000 +3FF0 +0010 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni3517 +ENCODING 13591 +BBX 15 16 0 -2 +BITMAP +1210 +1210 +1210 +7F90 +12FE +1292 +7F92 +5212 +5212 +7FD2 +1252 +1252 +2352 +22A2 +422A +8244 +ENDCHAR +STARTCHAR uni3518 +ENCODING 13592 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +9220 +9220 +92FC +9224 +FE24 +1024 +1024 +9224 +9224 +9244 +9E44 +F284 +0128 +0210 +ENDCHAR +STARTCHAR uni3519 +ENCODING 13593 +BBX 14 16 0 -2 +BITMAP +4220 +2420 +0020 +7E20 +24FC +2424 +2424 +2424 +FF24 +2424 +2424 +2424 +2444 +4444 +44A8 +8510 +ENDCHAR +STARTCHAR uni351A +ENCODING 13594 +BBX 14 16 0 -2 +BITMAP +0420 +0E20 +3820 +0820 +08FC +FF24 +0824 +0824 +3E24 +2224 +2224 +2224 +2244 +3E44 +22A8 +0110 +ENDCHAR +STARTCHAR uni351B +ENCODING 13595 +BBX 13 16 1 -2 +BITMAP +0200 +0200 +FFF8 +0200 +3FE0 +0000 +3FE0 +2020 +2020 +3FE0 +0400 +FFF0 +0810 +1010 +20A0 +C040 +ENDCHAR +STARTCHAR uni351C +ENCODING 13596 +BBX 14 16 0 -2 +BITMAP +0220 +0F20 +F020 +0120 +91FC +4A24 +0024 +FE24 +0424 +0824 +0F24 +F844 +4844 +0884 +2928 +1210 +ENDCHAR +STARTCHAR uni351D +ENCODING 13597 +BBX 15 16 0 -2 +BITMAP +0010 +FF90 +0810 +0810 +FF90 +88FE +8892 +CC92 +AA92 +AA92 +DD92 +9992 +8892 +88A2 +8AAA +8144 +ENDCHAR +STARTCHAR uni351E +ENCODING 13598 +BBX 14 16 0 -2 +BITMAP +0220 +0F20 +7820 +0820 +FF7C +0824 +2A24 +2A24 +EBA4 +2A24 +2AA4 +6B24 +AA44 +0844 +0894 +0908 +ENDCHAR +STARTCHAR uni351F +ENCODING 13599 +BBX 15 15 1 -1 +BITMAP +5040 +5040 +7DF8 +9048 +BD48 +10C8 +108A +1ECA +E146 +0200 +7FFC +0204 +0404 +1804 +E038 +ENDCHAR +STARTCHAR uni3520 +ENCODING 13600 +BBX 14 16 0 -2 +BITMAP +0020 +7E20 +4220 +7E20 +42FC +7E24 +2024 +7F24 +8924 +4924 +5524 +4124 +7D44 +0144 +0AA8 +0510 +ENDCHAR +STARTCHAR uni3521 +ENCODING 13601 +BBX 13 16 1 -2 +BITMAP +1040 +2040 +FE40 +AA40 +93F8 +AA48 +8248 +FE48 +0048 +8848 +EE48 +8848 +AA88 +CC88 +8950 +0220 +ENDCHAR +STARTCHAR uni3522 +ENCODING 13602 +BBX 15 16 0 -2 +BITMAP +1080 +10F8 +2510 +7BFC +1124 +2524 +7DFC +0102 +5502 +94FE +0200 +7FF8 +0408 +0808 +1050 +6020 +ENDCHAR +STARTCHAR uni3523 +ENCODING 13603 +BBX 15 16 0 -2 +BITMAP +0008 +3F88 +2488 +3F88 +24BE +3F8A +000A +FBEA +AAAA +AAAA +FBEA +AAAA +AAB2 +FBF2 +002A +0044 +ENDCHAR +STARTCHAR uni3524 +ENCODING 13604 +BBX 14 16 0 -2 +BITMAP +1020 +0820 +7F20 +4120 +86FC +7824 +4924 +2A24 +FF24 +2A24 +4124 +BE24 +2A44 +3E44 +2AA8 +3F10 +ENDCHAR +STARTCHAR uni3525 +ENCODING 13605 +BBX 15 16 0 -2 +BITMAP +0010 +FF10 +A510 +A510 +FF7E +4412 +9492 +F712 +0492 +F392 +9012 +F492 +9712 +F422 +94AA +B3C4 +ENDCHAR +STARTCHAR uni3526 +ENCODING 13606 +BBX 15 16 0 -2 +BITMAP +2210 +FF90 +0810 +7F10 +107E +FF92 +2212 +4912 +BE92 +2212 +3E12 +2212 +3E92 +2522 +2A2A +3144 +ENDCHAR +STARTCHAR uni3527 +ENCODING 13607 +BBX 15 16 0 -2 +BITMAP +0810 +0F90 +0810 +7F90 +48FE +7E12 +4892 +5F92 +5512 +5F12 +5512 +5F12 +4012 +BFA2 +2AAA +7FC4 +ENDCHAR +STARTCHAR uni3528 +ENCODING 13608 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +3FFC +4524 +BDC4 +0514 +1CF4 +6404 +1FC4 +1044 +1FC4 +1044 +1FC4 +1044 +1154 +1088 +ENDCHAR +STARTCHAR uni3529 +ENCODING 13609 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +3FFC +2204 +5FC4 +8204 +3FE4 +0404 +0884 +1FC4 +0004 +1FC4 +1544 +1544 +3FE8 +0010 +ENDCHAR +STARTCHAR uni352A +ENCODING 13610 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +3FFC +2204 +4204 +83F4 +0204 +3FE4 +2AA4 +2524 +3264 +2524 +2AA4 +3FE4 +2028 +0010 +ENDCHAR +STARTCHAR uni352B +ENCODING 13611 +BBX 15 16 0 -2 +BITMAP +0400 +0400 +0400 +0400 +FFFE +0480 +0480 +0484 +0488 +0890 +08E0 +1082 +1082 +2082 +407E +8000 +ENDCHAR +STARTCHAR uni352C +ENCODING 13612 +BBX 15 16 0 -2 +BITMAP +2030 +21C0 +3E08 +2008 +1FF8 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni352D +ENCODING 13613 +BBX 14 15 1 -2 +BITMAP +87F0 +8410 +8410 +87F0 +F410 +8410 +87F0 +8000 +8FFC +8080 +9480 +A4F0 +C480 +8A80 +11FC +ENDCHAR +STARTCHAR uni352E +ENCODING 13614 +BBX 15 16 0 -2 +BITMAP +5110 +5112 +FA54 +53D8 +7010 +2012 +FBD2 +AA4E +FA40 +23D2 +FA54 +2258 +FBD0 +2252 +5252 +8ACE +ENDCHAR +STARTCHAR uni352F +ENCODING 13615 +BBX 14 14 1 -1 +BITMAP +FFF8 +8000 +8FE0 +8820 +8820 +9018 +A000 +8FE0 +8820 +8820 +8820 +8FE0 +8000 +FFFC +ENDCHAR +STARTCHAR uni3530 +ENCODING 13616 +BBX 14 14 1 -1 +BITMAP +FFF8 +8440 +8440 +8740 +8960 +8950 +8948 +9548 +A240 +8240 +8440 +8840 +9040 +FFFC +ENDCHAR +STARTCHAR uni3531 +ENCODING 13617 +BBX 14 14 1 -1 +BITMAP +FFF8 +8000 +8500 +9970 +9110 +9D70 +9110 +9FF0 +8280 +8440 +8820 +B010 +8000 +FFFC +ENDCHAR +STARTCHAR uni3532 +ENCODING 13618 +BBX 14 14 1 -1 +BITMAP +FFF8 +8440 +8A40 +9540 +BEF0 +D250 +9E50 +9250 +9E50 +9054 +9454 +9A8C +9100 +FFFC +ENDCHAR +STARTCHAR uni3533 +ENCODING 13619 +BBX 14 14 1 -1 +BITMAP +FFF8 +8400 +8A70 +9550 +BED0 +D250 +9E50 +9250 +9E54 +9054 +9494 +9A8C +9100 +FFFC +ENDCHAR +STARTCHAR uni3534 +ENCODING 13620 +BBX 14 14 1 -1 +BITMAP +FFF8 +8000 +9FF0 +9110 +9FF0 +9110 +9FF0 +8440 +9FF0 +8440 +BFF8 +8820 +9010 +FFFC +ENDCHAR +STARTCHAR uni3535 +ENCODING 13621 +BBX 14 16 1 -2 +BITMAP +FFFC +8000 +BCF0 +A490 +BCF0 +A288 +9E78 +8440 +9FF0 +8440 +8440 +BFF8 +8440 +8820 +9010 +FFFC +ENDCHAR +STARTCHAR uni3536 +ENCODING 13622 +BBX 14 16 1 -2 +BITMAP +FFFC +8840 +FF78 +94C8 +FF30 +80CC +BEF8 +A220 +BFFC +A288 +BEF8 +8888 +FFF8 +8850 +8888 +FFFC +ENDCHAR +STARTCHAR uni3537 +ENCODING 13623 +BBX 14 14 1 -1 +BITMAP +FFF8 +8000 +9FF0 +8100 +8100 +9FF0 +9110 +9290 +9450 +9850 +9010 +9050 +9020 +FFFC +ENDCHAR +STARTCHAR uni3538 +ENCODING 13624 +BBX 14 16 1 -2 +BITMAP +FFFC +8000 +807C +9F80 +90F8 +9080 +97FC +9484 +94F0 +9588 +9478 +A400 +A9E0 +C928 +9218 +FFFC +ENDCHAR +STARTCHAR uni3539 +ENCODING 13625 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1040 +1040 +11FC +1044 +FE44 +1044 +1044 +1084 +1084 +1084 +1104 +1104 +1228 +1410 +ENDCHAR +STARTCHAR uni353A +ENCODING 13626 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0100 +7FFC +0100 +1100 +1120 +1020 +FFFE +1020 +1020 +1022 +1002 +1002 +0FFE +ENDCHAR +STARTCHAR uni353B +ENCODING 13627 +BBX 15 15 0 -2 +BITMAP +7FFC +0100 +0300 +0560 +1918 +6104 +0100 +0000 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni353C +ENCODING 13628 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +FDFE +1320 +1DFC +3120 +D1FC +1120 +51FE +2100 +0000 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni353D +ENCODING 13629 +BBX 13 16 2 -2 +BITMAP +0400 +0400 +07F8 +0400 +0400 +FFE0 +8020 +8020 +9F20 +9120 +9120 +9F20 +8020 +8020 +FFE0 +8020 +ENDCHAR +STARTCHAR uni353E +ENCODING 13630 +BBX 12 14 2 -1 +BITMAP +FF80 +8080 +8080 +8080 +8080 +8080 +8080 +8500 +8200 +8000 +8010 +8010 +8010 +7FF0 +ENDCHAR +STARTCHAR uni353F +ENCODING 13631 +BBX 15 15 0 -2 +BITMAP +FFFE +1010 +1010 +1010 +1010 +1010 +1010 +1010 +1070 +1190 +1610 +1810 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni3540 +ENCODING 13632 +BBX 13 15 2 -1 +BITMAP +0400 +0400 +FFE0 +8420 +FFE0 +8420 +FFE0 +0000 +7FC0 +4040 +4040 +4148 +4088 +4008 +3FF8 +ENDCHAR +STARTCHAR uni3541 +ENCODING 13633 +BBX 14 16 0 -2 +BITMAP +0100 +3200 +0C7C +1244 +6944 +0844 +FFC4 +1044 +2444 +2444 +4844 +8A54 +1148 +3F40 +1140 +0040 +ENDCHAR +STARTCHAR uni3542 +ENCODING 13634 +BBX 15 15 0 -2 +BITMAP +3FFE +2080 +2080 +2140 +2220 +2410 +2908 +3086 +2080 +2FF0 +2010 +2020 +4020 +4040 +8080 +ENDCHAR +STARTCHAR uni3543 +ENCODING 13635 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2000 +27FC +2110 +2110 +2110 +2110 +2FFE +2110 +2110 +2210 +4210 +4410 +8810 +ENDCHAR +STARTCHAR uni3544 +ENCODING 13636 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2000 +2FFC +2080 +2100 +2210 +2420 +2FC0 +2080 +2100 +2210 +4408 +4FFC +8404 +ENDCHAR +STARTCHAR uni3545 +ENCODING 13637 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2000 +27FC +2444 +2444 +27FC +2444 +2444 +27FC +2444 +2040 +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni3546 +ENCODING 13638 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2040 +2040 +2FFE +2040 +2040 +2040 +27FC +2404 +2404 +2404 +4404 +47FC +8404 +ENDCHAR +STARTCHAR uni3547 +ENCODING 13639 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2080 +2040 +2040 +2FFC +2000 +2408 +2208 +2210 +2110 +2120 +4000 +5FFE +8000 +ENDCHAR +STARTCHAR uni3548 +ENCODING 13640 +BBX 15 15 0 -2 +BITMAP +3FFE +2080 +2040 +2000 +3FFE +2080 +2100 +2284 +2688 +2A50 +3220 +2210 +4288 +4306 +8200 +ENDCHAR +STARTCHAR uni3549 +ENCODING 13641 +BBX 15 15 0 -2 +BITMAP +3FFE +2080 +2080 +2140 +2220 +2410 +2BE8 +3006 +2000 +27F0 +2410 +2410 +4410 +47F0 +8410 +ENDCHAR +STARTCHAR uni354A +ENCODING 13642 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2048 +2044 +2FFE +2040 +27FC +2444 +27FC +2444 +27FC +2444 +4444 +4454 +8408 +ENDCHAR +STARTCHAR uni354B +ENCODING 13643 +BBX 15 15 0 -2 +BITMAP +3FFE +2080 +2140 +2220 +2410 +2808 +37F6 +2080 +2080 +2FF8 +2080 +2490 +42A0 +5FFE +8000 +ENDCHAR +STARTCHAR uni354C +ENCODING 13644 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +27F8 +2408 +27F8 +2408 +27F8 +2000 +2FFC +2010 +3FFE +2410 +4210 +4250 +8020 +ENDCHAR +STARTCHAR uni354D +ENCODING 13645 +BBX 15 15 0 -2 +BITMAP +3FFE +2280 +2240 +2240 +27FC +2440 +2C40 +37F8 +2440 +2440 +27F8 +2440 +4440 +47FC +8400 +ENDCHAR +STARTCHAR uni354E +ENCODING 13646 +BBX 15 15 0 -2 +BITMAP +3FFE +2080 +2080 +2FFC +2080 +3FFE +2200 +2408 +2FFC +2000 +2FFC +2924 +4924 +7FFE +8000 +ENDCHAR +STARTCHAR uni354F +ENCODING 13647 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +3F88 +2048 +2F28 +2908 +2948 +2928 +2F0E +2078 +2908 +2608 +4388 +5C08 +8808 +ENDCHAR +STARTCHAR uni3550 +ENCODING 13648 +BBX 15 15 0 -2 +BITMAP +3FFE +2100 +2638 +2408 +2738 +2408 +27F8 +2200 +27FC +2804 +2554 +2554 +4804 +4028 +8010 +ENDCHAR +STARTCHAR uni3551 +ENCODING 13649 +BBX 15 15 0 -2 +BITMAP +3FFE +2204 +2204 +3FC4 +2204 +2FBE +2004 +2FA4 +2894 +2F94 +2884 +2504 +4384 +5C14 +8808 +ENDCHAR +STARTCHAR uni3552 +ENCODING 13650 +BBX 15 16 0 -2 +BITMAP +3FFE +2408 +2210 +3FFE +2080 +2FFC +2080 +3FFE +20A0 +2F28 +2224 +3FFE +4228 +5F12 +822A +06C6 +ENDCHAR +STARTCHAR uni3553 +ENCODING 13651 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +27FC +2554 +24E4 +27FC +2040 +27FC +2040 +2FFE +24A4 +2852 +47FC +4040 +8FFE +ENDCHAR +STARTCHAR uni3554 +ENCODING 13652 +BBX 15 16 0 -2 +BITMAP +3FFE +2010 +3F10 +2AFE +2E10 +2AFE +2EAA +2AAA +3EFE +2200 +3EFE +2A20 +5E14 +4AA2 +BF28 +0218 +ENDCHAR +STARTCHAR uni3555 +ENCODING 13653 +BBX 12 16 2 -2 +BITMAP +0400 +0400 +0800 +1080 +2040 +4020 +FFF0 +4010 +0400 +0400 +0800 +1080 +2040 +4020 +FFF0 +4010 +ENDCHAR +STARTCHAR uni3556 +ENCODING 13654 +BBX 15 16 0 -2 +BITMAP +0400 +0820 +1010 +3FF8 +0810 +1020 +2448 +7EFC +0204 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni3557 +ENCODING 13655 +BBX 15 16 0 -2 +BITMAP +4100 +2210 +FF90 +0810 +7F20 +0820 +FFA0 +1040 +1048 +3E84 +42FC +8404 +0800 +1400 +23FE +C000 +ENDCHAR +STARTCHAR uni3558 +ENCODING 13656 +BBX 15 16 0 -2 +BITMAP +0400 +0820 +1010 +3FF8 +0810 +1020 +2448 +7EFC +0100 +06C0 +1830 +E10E +0920 +1110 +2508 +0200 +ENDCHAR +STARTCHAR uni3559 +ENCODING 13657 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +20F0 +4510 +FE20 +29FC +4524 +A324 +3D24 +45FC +4450 +A858 +1094 +2892 +4512 +820E +ENDCHAR +STARTCHAR uni355A +ENCODING 13658 +BBX 15 15 0 -2 +BITMAP +3FF0 +1010 +1210 +1120 +0920 +0820 +4440 +2440 +2280 +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni355B +ENCODING 13659 +BBX 15 15 0 -2 +BITMAP +3FF0 +0020 +1E40 +0180 +0660 +1818 +E004 +3FF0 +1010 +0820 +0440 +0380 +0C60 +3018 +C006 +ENDCHAR +STARTCHAR uni355C +ENCODING 13660 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +3FF8 +2108 +2108 +3FF8 +0100 +0100 +3FF0 +1010 +0820 +0440 +0380 +0C60 +3018 +C006 +ENDCHAR +STARTCHAR uni355D +ENCODING 13661 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +1FF0 +1010 +1010 +1FF0 +0000 +3FF8 +0810 +0420 +03C0 +1C70 +E00E +ENDCHAR +STARTCHAR uni355E +ENCODING 13662 +BBX 15 14 1 -1 +BITMAP +7FFC +4144 +4144 +7F44 +4444 +4444 +5F28 +5528 +5510 +5510 +5528 +9728 +8444 +0482 +ENDCHAR +STARTCHAR uni355F +ENCODING 13663 +BBX 14 16 1 -2 +BITMAP +1000 +1000 +1E00 +11F8 +1088 +FE88 +AA88 +AA88 +AA50 +FE50 +AA20 +AA20 +AA50 +A250 +8A88 +8504 +ENDCHAR +STARTCHAR uni3560 +ENCODING 13664 +BBX 15 16 0 -2 +BITMAP +4140 +2120 +03FE +0A20 +17FC +EA20 +23FC +2220 +23FE +0200 +3FF0 +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni3561 +ENCODING 13665 +BBX 15 16 0 -2 +BITMAP +0800 +0F00 +087C +FFA4 +80A4 +7F24 +1424 +2228 +4928 +1628 +2110 +FE10 +2228 +2228 +3E44 +2282 +ENDCHAR +STARTCHAR uni3562 +ENCODING 13666 +BBX 15 16 0 -2 +BITMAP +1000 +1E00 +107C +FF44 +8144 +7E44 +0044 +7E28 +4228 +7E28 +4210 +7E10 +4228 +7E28 +2444 +4282 +ENDCHAR +STARTCHAR uni3563 +ENCODING 13667 +BBX 15 15 1 -1 +BITMAP +03C0 +0840 +0840 +0820 +1020 +2010 +4008 +8006 +3FF0 +2010 +2010 +2010 +2010 +2010 +3FF0 +ENDCHAR +STARTCHAR uni3564 +ENCODING 13668 +BBX 14 16 1 -2 +BITMAP +0200 +0200 +F200 +9200 +97E0 +9220 +9220 +9220 +9220 +9220 +F220 +9424 +0424 +0824 +101C +2000 +ENDCHAR +STARTCHAR uni3565 +ENCODING 13669 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F880 +8880 +8880 +8880 +8880 +8880 +8940 +8940 +F940 +8A20 +0220 +0410 +0808 +1004 +ENDCHAR +STARTCHAR uni3566 +ENCODING 13670 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1010 +1010 +1FF0 +0100 +0100 +0100 +FFFE +0280 +0440 +0820 +1010 +2008 +C006 +ENDCHAR +STARTCHAR uni3567 +ENCODING 13671 +BBX 13 15 1 -2 +BITMAP +03F8 +F208 +9208 +9208 +9208 +93F8 +9208 +9200 +9200 +F200 +9200 +0400 +0400 +0800 +1000 +ENDCHAR +STARTCHAR uni3568 +ENCODING 13672 +BBX 14 15 1 -2 +BITMAP +03E0 +F220 +9220 +9220 +9220 +9320 +92A0 +92A0 +9220 +F220 +9224 +0424 +0424 +081C +1000 +ENDCHAR +STARTCHAR uni3569 +ENCODING 13673 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F040 +97FC +9040 +9040 +9040 +93F8 +9040 +9040 +F040 +97FC +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni356A +ENCODING 13674 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +97F8 +9488 +9890 +9080 +9080 +9140 +9140 +F140 +9240 +0244 +0444 +083C +1000 +ENDCHAR +STARTCHAR uni356B +ENCODING 13675 +BBX 14 16 1 -2 +BITMAP +0100 +0080 +F080 +9FFC +9200 +9200 +9200 +93F0 +9210 +9210 +F210 +9210 +0410 +0410 +08A0 +1040 +ENDCHAR +STARTCHAR uni356C +ENCODING 13676 +BBX 14 15 1 -1 +BITMAP +0040 +0240 +F240 +9220 +9220 +9490 +9490 +9888 +9104 +9100 +F220 +9210 +0410 +0FF8 +0408 +ENDCHAR +STARTCHAR uni356D +ENCODING 13677 +BBX 14 16 1 -2 +BITMAP +0020 +00F0 +F780 +9080 +9080 +9080 +9080 +9FFC +9080 +9140 +F140 +9120 +0220 +0210 +0408 +0804 +ENDCHAR +STARTCHAR uni356E +ENCODING 13678 +BBX 15 15 1 -1 +BITMAP +0120 +0120 +F210 +9408 +9A16 +9210 +9210 +9120 +9120 +90C0 +9080 +F140 +0220 +0418 +0806 +ENDCHAR +STARTCHAR uni356F +ENCODING 13679 +BBX 13 16 1 -2 +BITMAP +0200 +0200 +0200 +FFF8 +8208 +8508 +8888 +9048 +AFA8 +8888 +8888 +8888 +8F88 +8888 +8028 +8010 +ENDCHAR +STARTCHAR uni3570 +ENCODING 13680 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F3C0 +9040 +9040 +9078 +93C0 +9040 +9040 +907C +F7C0 +9040 +0044 +0044 +0044 +003C +ENDCHAR +STARTCHAR uni3571 +ENCODING 13681 +BBX 14 16 1 -2 +BITMAP +0120 +0110 +F110 +9100 +9FFC +9140 +9140 +9140 +9140 +9140 +F240 +9244 +0244 +0444 +043C +0800 +ENDCHAR +STARTCHAR uni3572 +ENCODING 13682 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F040 +9040 +97FE +9040 +90E0 +90E0 +9150 +9150 +F248 +9444 +0842 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni3573 +ENCODING 13683 +BBX 14 14 1 -1 +BITMAP +0010 +F210 +9110 +94A4 +94A4 +9444 +9444 +94A4 +9524 +F614 +9414 +0404 +07FC +0004 +ENDCHAR +STARTCHAR uni3574 +ENCODING 13684 +BBX 14 14 1 -2 +BITMAP +F7FC +9404 +9808 +9000 +93E0 +9220 +9220 +9220 +F220 +9224 +0424 +0424 +081C +1000 +ENDCHAR +STARTCHAR uni3575 +ENCODING 13685 +BBX 14 14 1 -1 +BITMAP +07FC +F040 +9040 +9040 +9040 +9040 +93F8 +9040 +9040 +9040 +F040 +9040 +0040 +0FFC +ENDCHAR +STARTCHAR uni3576 +ENCODING 13686 +BBX 14 14 1 -1 +BITMAP +07F8 +F080 +9080 +9080 +9080 +97F0 +9110 +9110 +9110 +F110 +9210 +0210 +0210 +0FFC +ENDCHAR +STARTCHAR uni3577 +ENCODING 13687 +BBX 13 16 1 -2 +BITMAP +0040 +0040 +F080 +93F8 +9208 +9208 +9208 +9208 +93F8 +9208 +9208 +F208 +9208 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni3578 +ENCODING 13688 +BBX 14 15 1 -1 +BITMAP +0100 +0080 +F080 +9000 +9FF8 +9000 +9010 +9410 +9410 +9220 +F220 +9220 +0240 +0040 +1FFC +ENDCHAR +STARTCHAR uni3579 +ENCODING 13689 +BBX 14 16 1 -2 +BITMAP +0080 +0090 +F088 +9080 +97FC +9100 +9100 +91F8 +9288 +9288 +F290 +94A0 +0440 +08A0 +1110 +060C +ENDCHAR +STARTCHAR uni357A +ENCODING 13690 +BBX 15 15 0 -2 +BITMAP +7CF8 +4488 +4488 +4488 +7CF8 +0000 +0000 +FFFE +0800 +1000 +1FF0 +0010 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni357B +ENCODING 13691 +BBX 14 16 0 -2 +BITMAP +0200 +0100 +0000 +7FFC +0100 +0300 +0D60 +3118 +C104 +0100 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni357C +ENCODING 13692 +BBX 14 16 1 -2 +BITMAP +0200 +0200 +F3FC +9404 +9404 +9914 +90A4 +9444 +94A4 +9514 +F404 +97FC +0004 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni357D +ENCODING 13693 +BBX 14 16 1 -2 +BITMAP +0010 +0110 +F090 +9450 +9450 +9410 +9410 +9410 +9410 +9410 +9420 +F530 +9648 +0448 +0084 +0104 +ENDCHAR +STARTCHAR uni357E +ENCODING 13694 +BBX 14 16 1 -2 +BITMAP +0200 +0200 +1240 +1220 +2210 +4208 +8208 +0000 +0080 +7C88 +4490 +44E0 +4480 +4484 +7C84 +447C +ENDCHAR +STARTCHAR uni357F +ENCODING 13695 +BBX 15 16 0 -2 +BITMAP +0070 +1F80 +0100 +0100 +FFFE +0540 +0920 +3118 +C006 +1FF0 +1010 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3580 +ENCODING 13696 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F7F0 +9090 +9FFC +9090 +97F0 +9080 +9080 +97F0 +F080 +9080 +0FF8 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni3581 +ENCODING 13697 +BBX 14 16 1 -2 +BITMAP +0010 +0320 +F0C0 +9130 +9608 +9080 +9080 +9FFC +9100 +9120 +F220 +9240 +0490 +0908 +13F8 +0108 +ENDCHAR +STARTCHAR uni3582 +ENCODING 13698 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F7F0 +9490 +9490 +97F0 +9490 +9490 +97F0 +9080 +F090 +9060 +00C8 +0328 +0C18 +0008 +ENDCHAR +STARTCHAR uni3583 +ENCODING 13699 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F780 +9400 +9400 +97FC +9400 +9400 +9400 +95F8 +F508 +9508 +0908 +0908 +11F8 +0108 +ENDCHAR +STARTCHAR uni3584 +ENCODING 13700 +BBX 13 16 1 -2 +BITMAP +0208 +0248 +F248 +9248 +9248 +9248 +9768 +96D8 +9A48 +9248 +F248 +9248 +0248 +0448 +0408 +0808 +ENDCHAR +STARTCHAR uni3585 +ENCODING 13701 +BBX 14 16 1 -2 +BITMAP +0050 +0048 +F048 +9040 +97FC +9440 +9448 +9448 +9448 +9750 +F450 +9420 +0424 +0854 +088C +1104 +ENDCHAR +STARTCHAR uni3586 +ENCODING 13702 +BBX 14 16 1 -2 +BITMAP +00A0 +00A0 +F0A0 +90A0 +97FC +94A4 +94A4 +94A4 +94A4 +97FC +F4A4 +94A4 +04A4 +04A4 +07FC +0404 +ENDCHAR +STARTCHAR uni3587 +ENCODING 13703 +BBX 14 15 1 -2 +BITMAP +07FC +F040 +9040 +9080 +97FC +94A4 +94A4 +94A4 +94A4 +F4A4 +94A4 +04A4 +0484 +0414 +0408 +ENDCHAR +STARTCHAR uni3588 +ENCODING 13704 +BBX 15 16 0 -2 +BITMAP +0208 +3FD0 +0220 +FFFE +0200 +0C70 +3F84 +C804 +07FC +0000 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3589 +ENCODING 13705 +BBX 14 14 1 0 +BITMAP +0040 +0040 +F0A0 +9110 +9248 +9444 +9840 +9240 +9278 +9240 +F240 +9240 +0240 +0FFC +ENDCHAR +STARTCHAR uni358A +ENCODING 13706 +BBX 14 15 1 -2 +BITMAP +07F8 +F008 +9008 +93F8 +9008 +9008 +97F8 +9010 +9010 +9FFC +F210 +9110 +0110 +0050 +0020 +ENDCHAR +STARTCHAR uni358B +ENCODING 13707 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0440 +1830 +E44E +0440 +0440 +0440 +0840 +1040 +0000 +7C88 +44B0 +44C4 +7C84 +447C +ENDCHAR +STARTCHAR uni358C +ENCODING 13708 +BBX 15 16 0 -2 +BITMAP +0880 +0880 +13F0 +3090 +5090 +9092 +1112 +120E +1400 +0000 +3E44 +2258 +2260 +2242 +3E42 +223E +ENDCHAR +STARTCHAR uni358D +ENCODING 13709 +BBX 14 16 1 -2 +BITMAP +0080 +0880 +0480 +2480 +1080 +13F8 +FC80 +0080 +0080 +0000 +7C88 +44B0 +44C0 +4484 +7C84 +447C +ENDCHAR +STARTCHAR uni358E +ENCODING 13710 +BBX 15 16 0 -2 +BITMAP +0080 +7C88 +44B0 +44C4 +4484 +7C7C +0100 +0280 +0440 +1830 +E44E +0440 +0440 +0440 +0840 +1040 +ENDCHAR +STARTCHAR uni358F +ENCODING 13711 +BBX 14 14 1 -1 +BITMAP +03F8 +F208 +9208 +93F8 +9208 +9208 +93F8 +9040 +9040 +F3F8 +9040 +0040 +0040 +07FC +ENDCHAR +STARTCHAR uni3590 +ENCODING 13712 +BBX 15 16 0 -2 +BITMAP +7CF8 +4488 +4488 +7CF8 +0000 +3FF0 +0210 +0210 +FFFE +0210 +0410 +3FF0 +0810 +1000 +2000 +C000 +ENDCHAR +STARTCHAR uni3591 +ENCODING 13713 +BBX 14 16 1 -2 +BITMAP +0028 +0024 +F020 +9FFC +9020 +9520 +9524 +9524 +9FA4 +9528 +F528 +9510 +0514 +0934 +084C +1084 +ENDCHAR +STARTCHAR uni3592 +ENCODING 13714 +BBX 14 16 1 -2 +BITMAP +0210 +0110 +F120 +97F8 +9048 +9048 +97F8 +9440 +9440 +97FC +F0C4 +9144 +0254 +0448 +0840 +0040 +ENDCHAR +STARTCHAR uni3593 +ENCODING 13715 +BBX 14 16 1 -2 +BITMAP +0200 +03F0 +F610 +9920 +90C0 +9330 +9C8C +9080 +97F0 +9080 +F7F0 +9080 +0FF8 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni3594 +ENCODING 13716 +BBX 14 15 1 -2 +BITMAP +03F8 +F040 +9040 +9040 +97FC +90A0 +9110 +9208 +95F4 +F910 +9110 +0110 +0110 +01F0 +0110 +ENDCHAR +STARTCHAR uni3595 +ENCODING 13717 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F3F8 +9000 +9110 +90A0 +97FC +9040 +9040 +9040 +F3F8 +9040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni3596 +ENCODING 13718 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +3FF8 +0820 +0440 +FFFE +0100 +0100 +3FF8 +0100 +0100 +3FF8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni3597 +ENCODING 13719 +BBX 14 16 1 -2 +BITMAP +0080 +0490 +F490 +9490 +97F0 +9080 +9140 +9220 +9510 +988C +F080 +97E0 +0020 +0040 +0040 +0080 +ENDCHAR +STARTCHAR uni3598 +ENCODING 13720 +BBX 14 15 1 -2 +BITMAP +07F8 +F400 +9400 +95F0 +9400 +9400 +97F8 +9540 +9548 +F550 +9520 +0520 +0910 +0948 +1184 +ENDCHAR +STARTCHAR uni3599 +ENCODING 13721 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +7E7C +1244 +1244 +1244 +227C +4A44 +8400 +0000 +3E44 +2258 +2260 +2242 +3E42 +223E +ENDCHAR +STARTCHAR uni359A +ENCODING 13722 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +17FE +3010 +5210 +9110 +1110 +1050 +1020 +0000 +3E44 +2258 +2260 +2242 +3E42 +223E +ENDCHAR +STARTCHAR uni359B +ENCODING 13723 +BBX 14 16 1 -2 +BITMAP +0200 +0200 +FFF8 +0200 +0200 +3FE0 +2020 +2020 +3FE0 +0000 +7C88 +44B0 +44C0 +4484 +7C84 +447C +ENDCHAR +STARTCHAR uni359C +ENCODING 13724 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +0000 +0000 +3E44 +2258 +2260 +2242 +3E42 +223E +ENDCHAR +STARTCHAR uni359D +ENCODING 13725 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +3FF8 +0100 +0100 +FFFE +0920 +3118 +C106 +0000 +3E44 +2258 +2260 +2242 +3E42 +223E +ENDCHAR +STARTCHAR uni359E +ENCODING 13726 +BBX 14 15 1 -2 +BITMAP +03F8 +F208 +9208 +9208 +93F8 +9040 +9040 +97FC +9444 +F4A4 +9514 +0614 +0404 +0414 +0408 +ENDCHAR +STARTCHAR uni359F +ENCODING 13727 +BBX 15 16 0 -2 +BITMAP +001C +03E0 +F084 +9244 +9148 +9110 +97FE +9402 +9000 +93F8 +F108 +9110 +00A0 +0040 +01B0 +060E +ENDCHAR +STARTCHAR uni35A0 +ENCODING 13728 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +90A0 +9110 +9208 +95F4 +9000 +9000 +97FC +F040 +9248 +0244 +0444 +0140 +0080 +ENDCHAR +STARTCHAR uni35A1 +ENCODING 13729 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +F7FE +9120 +9120 +923C +9244 +9664 +9294 +9348 +F248 +9230 +0220 +0250 +0288 +0306 +ENDCHAR +STARTCHAR uni35A2 +ENCODING 13730 +BBX 15 15 0 -1 +BITMAP +0080 +0040 +EFFE +A800 +A890 +A890 +AA90 +AA92 +AADC +AA90 +EA90 +AA92 +1292 +12D2 +270E +ENDCHAR +STARTCHAR uni35A3 +ENCODING 13731 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F3F8 +9000 +9210 +9120 +9000 +97FC +9000 +9000 +F3F8 +9208 +0208 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni35A4 +ENCODING 13732 +BBX 14 15 1 -2 +BITMAP +03F8 +F010 +9020 +9444 +9554 +94E4 +9444 +94E4 +9554 +F64C +9544 +0484 +0404 +07FC +0004 +ENDCHAR +STARTCHAR uni35A5 +ENCODING 13733 +BBX 14 15 0 -2 +BITMAP +07FC +F404 +9434 +95C4 +9444 +9444 +97FC +9444 +94E4 +F554 +964C +0444 +0444 +07FC +0404 +ENDCHAR +STARTCHAR uni35A6 +ENCODING 13734 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFE +9040 +97FC +9444 +97FC +9444 +9444 +97FC +9150 +F248 +0444 +0842 +0040 +ENDCHAR +STARTCHAR uni35A7 +ENCODING 13735 +BBX 14 16 1 -2 +BITMAP +0038 +07C0 +F440 +97FC +9440 +9524 +9614 +940C +93F8 +9208 +F208 +93F8 +0208 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni35A8 +ENCODING 13736 +BBX 15 15 1 -1 +BITMAP +0100 +01F8 +F108 +9210 +93F0 +9010 +9FFE +9040 +9244 +9168 +90E0 +F150 +0248 +0C46 +01C0 +ENDCHAR +STARTCHAR uni35A9 +ENCODING 13737 +BBX 15 15 0 -2 +BITMAP +0FC0 +F4BC +94A4 +94A4 +97A4 +94A4 +94A8 +97A8 +94A8 +F490 +95D0 +0EA8 +00A8 +00C4 +0082 +ENDCHAR +STARTCHAR uni35AA +ENCODING 13738 +BBX 14 16 1 -2 +BITMAP +0028 +0024 +F020 +9FFC +9020 +9020 +97A4 +94A4 +94A4 +94A8 +F7A8 +9010 +01D4 +0E34 +044C +0084 +ENDCHAR +STARTCHAR uni35AB +ENCODING 13739 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F3F8 +9040 +9040 +97FC +9110 +9288 +9484 +91F0 +F310 +94A0 +0040 +00A0 +0310 +0C0C +ENDCHAR +STARTCHAR uni35AC +ENCODING 13740 +BBX 14 16 1 -2 +BITMAP +0100 +0638 +F408 +9408 +9738 +9408 +9408 +97F8 +9000 +9000 +F7F0 +9210 +0120 +00C0 +0330 +0C0C +ENDCHAR +STARTCHAR uni35AD +ENCODING 13741 +BBX 15 15 0 -2 +BITMAP +03FC +F040 +9040 +97FE +90A0 +9110 +9208 +9446 +9040 +F048 +9264 +0252 +0452 +0140 +0080 +ENDCHAR +STARTCHAR uni35AE +ENCODING 13742 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F0A0 +9110 +9208 +9DF6 +9000 +97FC +94A4 +94A4 +F7FC +94A4 +04A4 +04A4 +0414 +0408 +ENDCHAR +STARTCHAR uni35AF +ENCODING 13743 +BBX 13 16 2 -2 +BITMAP +FFE0 +8020 +BFA0 +8020 +9F20 +9120 +9F20 +80A0 +8040 +0000 +F910 +8960 +8980 +8908 +F908 +88F8 +ENDCHAR +STARTCHAR uni35B0 +ENCODING 13744 +BBX 13 16 1 -2 +BITMAP +0100 +F910 +8960 +8988 +8908 +F8F8 +0000 +7FF0 +4010 +5FD0 +4010 +4F90 +4890 +4F90 +4050 +4020 +ENDCHAR +STARTCHAR uni35B1 +ENCODING 13745 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0880 +10F8 +3148 +D328 +1490 +1060 +1198 +1606 +0000 +3FF8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni35B2 +ENCODING 13746 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +FE7C +2244 +4444 +3444 +0844 +147C +2244 +C000 +3E44 +2258 +2260 +2242 +3E42 +223E +ENDCHAR +STARTCHAR uni35B3 +ENCODING 13747 +BBX 14 16 1 -2 +BITMAP +2100 +1100 +8FF8 +4220 +1420 +2340 +E0C0 +2120 +2610 +0000 +7C88 +44B0 +44C0 +4484 +7C84 +447C +ENDCHAR +STARTCHAR uni35B4 +ENCODING 13748 +BBX 14 16 1 -2 +BITMAP +0220 +0220 +F7FC +9220 +9100 +9100 +93F8 +92A8 +94A8 +9928 +F148 +9248 +0488 +0108 +0250 +0420 +ENDCHAR +STARTCHAR uni35B5 +ENCODING 13749 +BBX 14 15 1 -2 +BITMAP +03F0 +F210 +9210 +93F0 +9210 +93F0 +9210 +93F0 +9210 +F210 +9FFC +0000 +0220 +0410 +0808 +ENDCHAR +STARTCHAR uni35B6 +ENCODING 13750 +BBX 15 14 0 -1 +BITMAP +07FC +F0A0 +90A0 +97FC +94A4 +94A4 +94A4 +97FC +9040 +F040 +97FC +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni35B7 +ENCODING 13751 +BBX 14 15 1 -2 +BITMAP +03F8 +F208 +9208 +93F8 +9208 +9208 +93F8 +9000 +97FC +F040 +9240 +0278 +0240 +0540 +08FC +ENDCHAR +STARTCHAR uni35B8 +ENCODING 13752 +BBX 14 16 1 -2 +BITMAP +0080 +00F8 +F080 +97FC +9484 +94F0 +9780 +9488 +9478 +9400 +F5F8 +9500 +07FC +0900 +0900 +11F8 +ENDCHAR +STARTCHAR uni35B9 +ENCODING 13753 +BBX 14 15 1 -1 +BITMAP +0020 +0220 +F210 +9408 +9BF4 +9110 +9210 +9450 +9820 +97F0 +F550 +9550 +0550 +0550 +1FFC +ENDCHAR +STARTCHAR uni35BA +ENCODING 13754 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9080 +97FC +9110 +9208 +95F6 +F110 +9110 +01F0 +0110 +0110 +01F0 +ENDCHAR +STARTCHAR uni35BB +ENCODING 13755 +BBX 15 15 0 -2 +BITMAP +03F8 +F090 +9060 +97FC +90A4 +9128 +9220 +9460 +9040 +F7FC +90E0 +0150 +0248 +0C46 +0040 +ENDCHAR +STARTCHAR uni35BC +ENCODING 13756 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9110 +91F0 +9110 +9110 +91F0 +9040 +F7FC +90E0 +0150 +0248 +0444 +0040 +ENDCHAR +STARTCHAR uni35BD +ENCODING 13757 +BBX 14 15 1 -2 +BITMAP +07FC +F040 +9080 +93F8 +9208 +9208 +93F8 +9208 +93F8 +F208 +9208 +03F8 +0000 +0110 +0208 +ENDCHAR +STARTCHAR uni35BE +ENCODING 13758 +BBX 15 15 0 -2 +BITMAP +7EFC +4284 +4284 +7EFC +1010 +0820 +FFFE +0100 +2108 +2108 +3FF8 +0408 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni35BF +ENCODING 13759 +BBX 15 15 0 -2 +BITMAP +0FDE +F492 +9492 +9494 +9794 +9498 +9494 +9792 +9492 +F492 +95DA +0E94 +0090 +0090 +0090 +ENDCHAR +STARTCHAR uni35C0 +ENCODING 13760 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +E148 +A148 +A94A +AA52 +AAD6 +AB5A +A94A +AA52 +ED6A +AF7A +094A +0842 +0FFE +0002 +ENDCHAR +STARTCHAR uni35C1 +ENCODING 13761 +BBX 14 15 1 -2 +BITMAP +07BC +F4A4 +94A4 +97BC +9000 +93F8 +9000 +97FC +9100 +F200 +93F8 +0008 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni35C2 +ENCODING 13762 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F248 +9244 +9454 +9060 +9180 +9E00 +93F8 +9208 +F3F8 +9208 +03F8 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni35C3 +ENCODING 13763 +BBX 14 15 1 -2 +BITMAP +07F8 +F408 +97F8 +9440 +97FC +9420 +9514 +960C +9000 +F7F8 +9408 +07F8 +0408 +07F8 +0408 +ENDCHAR +STARTCHAR uni35C4 +ENCODING 13764 +BBX 14 15 1 -2 +BITMAP +07F8 +F528 +9528 +9528 +97F8 +9100 +9080 +9FFC +9100 +F1F0 +9110 +0210 +0210 +0450 +0820 +ENDCHAR +STARTCHAR uni35C5 +ENCODING 13765 +BBX 15 15 1 -1 +BITMAP +0200 +023E +F222 +9222 +9FE2 +923E +9222 +9222 +97A2 +94BE +94A2 +F4A2 +04A2 +07C2 +008E +ENDCHAR +STARTCHAR uni35C6 +ENCODING 13766 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +91F0 +9040 +93F8 +9248 +9248 +93F8 +F040 +97FC +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni35C7 +ENCODING 13767 +BBX 14 15 1 -2 +BITMAP +07BC +F484 +9484 +9484 +97BC +9400 +947C +97A4 +9424 +F428 +97A8 +0410 +0428 +0448 +0484 +ENDCHAR +STARTCHAR uni35C8 +ENCODING 13768 +BBX 14 15 1 -2 +BITMAP +07F8 +F110 +90A0 +97FC +9444 +97FC +9444 +97FC +9444 +F080 +97FC +0084 +0104 +0228 +0410 +ENDCHAR +STARTCHAR uni35C9 +ENCODING 13769 +BBX 15 16 0 -2 +BITMAP +0800 +7F7C +0824 +3E24 +0844 +7F54 +0888 +0400 +0FE0 +1440 +0380 +1C70 +EFEE +0820 +0FE0 +0820 +ENDCHAR +STARTCHAR uni35CA +ENCODING 13770 +BBX 13 15 1 -2 +BITMAP +7DF0 +4510 +4510 +4510 +4510 +7DF0 +0000 +0000 +FDF8 +8508 +8508 +8508 +8508 +FDF8 +8508 +ENDCHAR +STARTCHAR uni35CB +ENCODING 13771 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F3F8 +9408 +9810 +97FC +9400 +9500 +95F8 +9640 +F440 +97FC +0840 +08A0 +1110 +260C +ENDCHAR +STARTCHAR uni35CC +ENCODING 13772 +BBX 14 15 1 -1 +BITMAP +0080 +0040 +F3FC +9204 +9408 +93F8 +9080 +9110 +93F8 +9048 +F040 +93F8 +0040 +0040 +07FC +ENDCHAR +STARTCHAR uni35CD +ENCODING 13773 +BBX 15 16 0 -2 +BITMAP +0038 +03C0 +F040 +9040 +97FC +9150 +9248 +9446 +93F8 +9208 +F208 +93F8 +0208 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni35CE +ENCODING 13774 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +F7BC +92A4 +92A4 +94A4 +95BC +9840 +9040 +97FC +F0E0 +9150 +0248 +0444 +0842 +0040 +ENDCHAR +STARTCHAR uni35CF +ENCODING 13775 +BBX 14 15 1 -2 +BITMAP +07FC +F020 +9040 +90D0 +9148 +9644 +9040 +9000 +97FC +F040 +9240 +0278 +0240 +0240 +0FFC +ENDCHAR +STARTCHAR uni35D0 +ENCODING 13776 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +F7F8 +9080 +9140 +9220 +9510 +988C +9000 +97F0 +F550 +9550 +0550 +0550 +1FFC +ENDCHAR +STARTCHAR uni35D1 +ENCODING 13777 +BBX 15 16 0 -2 +BITMAP +0100 +03BC +EE10 +A210 +A23C +AF90 +A210 +A23C +A210 +AF90 +E27E +A210 +0210 +0210 +0410 +0810 +ENDCHAR +STARTCHAR uni35D2 +ENCODING 13778 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +F7FE +9000 +93F8 +9208 +9208 +9208 +93F8 +90A4 +F128 +9310 +0510 +0948 +0186 +0100 +ENDCHAR +STARTCHAR uni35D3 +ENCODING 13779 +BBX 15 15 0 -1 +BITMAP +0010 +0420 +F2F8 +9288 +9088 +90F8 +9E80 +9280 +92FC +9284 +F284 +92FC +0284 +0500 +08FE +ENDCHAR +STARTCHAR uni35D4 +ENCODING 13780 +BBX 14 16 1 -2 +BITMAP +0080 +00F8 +F080 +97FC +9484 +94F0 +9788 +9478 +9480 +9440 +F7FC +9510 +04A0 +0840 +08B0 +130C +ENDCHAR +STARTCHAR uni35D5 +ENCODING 13781 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +93F8 +9110 +97FC +9040 +93F8 +9248 +F3F8 +9248 +07FC +0208 +0228 +0210 +ENDCHAR +STARTCHAR uni35D6 +ENCODING 13782 +BBX 13 16 1 -2 +BITMAP +0078 +0780 +F088 +9448 +9250 +9200 +9080 +9738 +9408 +9408 +F738 +9408 +0408 +0408 +07F8 +0408 +ENDCHAR +STARTCHAR uni35D7 +ENCODING 13783 +BBX 15 16 0 -2 +BITMAP +0040 +7C80 +45FC +4524 +4524 +7DFC +2124 +2144 +7DFC +2490 +2510 +27FE +4410 +4410 +9410 +0810 +ENDCHAR +STARTCHAR uni35D8 +ENCODING 13784 +BBX 14 16 1 -2 +BITMAP +0050 +0048 +F7FC +9040 +93F8 +9248 +93F8 +9248 +93F8 +9248 +F010 +97FC +0110 +0090 +0090 +0030 +ENDCHAR +STARTCHAR uni35D9 +ENCODING 13785 +BBX 13 16 1 -2 +BITMAP +0100 +0100 +F3F8 +9488 +92A8 +93E8 +9108 +9250 +9520 +93F8 +F488 +9AA8 +03E8 +0108 +0250 +0420 +ENDCHAR +STARTCHAR uni35DA +ENCODING 13786 +BBX 15 14 1 -1 +BITMAP +0FFE +F120 +9120 +97FC +9524 +9524 +97FC +9040 +9FFE +9150 +F248 +0444 +0842 +0040 +ENDCHAR +STARTCHAR uni35DB +ENCODING 13787 +BBX 15 16 0 -2 +BITMAP +0210 +0210 +F3DE +9528 +9884 +9038 +93C0 +9040 +9040 +97FC +F040 +90A0 +00A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni35DC +ENCODING 13788 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +F7FC +9080 +9108 +93F0 +9060 +9184 +97FE +9002 +F7FC +9444 +07FC +0444 +07FC +0404 +ENDCHAR +STARTCHAR uni35DD +ENCODING 13789 +BBX 14 15 1 -1 +BITMAP +0208 +0108 +F110 +9000 +97FC +9040 +9040 +93F8 +9040 +9040 +F7FC +9000 +0548 +04A4 +08A4 +ENDCHAR +STARTCHAR uni35DE +ENCODING 13790 +BBX 14 16 1 -2 +BITMAP +0010 +0010 +EF10 +A4FC +A494 +A894 +AE90 +BAF8 +AAA8 +AAA8 +EAA8 +AEA8 +0A90 +0110 +0228 +0044 +ENDCHAR +STARTCHAR uni35DF +ENCODING 13791 +BBX 14 16 0 -2 +BITMAP +2080 +1040 +87FC +4040 +1040 +23F8 +E040 +2040 +27FC +2000 +0000 +7C88 +44B0 +44C4 +7C84 +447C +ENDCHAR +STARTCHAR uni35E0 +ENCODING 13792 +BBX 14 16 1 -2 +BITMAP +1080 +1080 +FD08 +27FC +4404 +29F8 +1108 +2908 +C5F8 +0000 +7C88 +44B0 +44C0 +4484 +7C84 +447C +ENDCHAR +STARTCHAR uni35E1 +ENCODING 13793 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1000 +27F8 +6110 +A13C +2104 +2214 +2408 +0000 +7C88 +44B0 +44C4 +7C84 +447C +ENDCHAR +STARTCHAR uni35E2 +ENCODING 13794 +BBX 14 16 1 -2 +BITMAP +0390 +0E10 +E210 +BFD0 +A23C +AF94 +AA94 +AF94 +AA94 +AF94 +E214 +AF94 +0224 +03A4 +1C54 +0888 +ENDCHAR +STARTCHAR uni35E3 +ENCODING 13795 +BBX 14 16 1 -2 +BITMAP +0550 +0550 +EFF8 +A550 +A554 +A9CC +B000 +AFF8 +A888 +A080 +E7F0 +A490 +0490 +0490 +04B0 +0080 +ENDCHAR +STARTCHAR uni35E4 +ENCODING 13796 +BBX 15 16 0 -2 +BITMAP +0028 +0024 +3FFE +2220 +2324 +2224 +2FA8 +2218 +2A92 +522A +4646 +8082 +0FF8 +0808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni35E5 +ENCODING 13797 +BBX 14 16 1 -2 +BITMAP +0400 +023C +EFA4 +A024 +AFA8 +A8A8 +AFB0 +A028 +AFA4 +A124 +E224 +A3B4 +0E28 +0220 +0A20 +0420 +ENDCHAR +STARTCHAR uni35E6 +ENCODING 13798 +BBX 15 16 0 -2 +BITMAP +0010 +1F20 +EACE +AAAA +AEAA +AAAA +AAAA +AEAA +AAAA +AAAA +EBEA +AEAC +1A28 +0248 +0248 +0288 +ENDCHAR +STARTCHAR uni35E7 +ENCODING 13799 +BBX 14 15 1 -1 +BITMAP +0080 +0040 +F7FC +9514 +9208 +97FC +9080 +9110 +93F8 +9048 +F040 +93F8 +0040 +0040 +07FC +ENDCHAR +STARTCHAR uni35E8 +ENCODING 13800 +BBX 13 15 1 -2 +BITMAP +FEF0 +9090 +BE98 +C900 +BEF0 +8890 +9490 +A260 +FE98 +0000 +7FF0 +4010 +4010 +7FF0 +4010 +ENDCHAR +STARTCHAR uni35E9 +ENCODING 13801 +BBX 14 15 1 -2 +BITMAP +07BC +F084 +94A4 +9294 +94A4 +9084 +9040 +93F8 +9208 +F208 +93F8 +0208 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni35EA +ENCODING 13802 +BBX 14 16 1 -2 +BITMAP +0120 +0124 +F5A8 +9534 +95A4 +9E9C +9110 +93E0 +9040 +9088 +F7FC +9044 +0250 +0448 +0944 +0080 +ENDCHAR +STARTCHAR uni35EB +ENCODING 13803 +BBX 14 16 1 -2 +BITMAP +0200 +0220 +F7B8 +94A8 +9AA8 +9510 +9210 +95E8 +9804 +9000 +F7F8 +9080 +02A0 +0490 +0A88 +0100 +ENDCHAR +STARTCHAR uni35EC +ENCODING 13804 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +7FFE +4002 +9FF4 +1010 +1FF0 +0200 +0FE0 +34C0 +0700 +3880 +03F8 +1D30 +01C0 +3E00 +ENDCHAR +STARTCHAR uni35ED +ENCODING 13805 +BBX 14 16 1 -2 +BITMAP +0038 +03C0 +F040 +9248 +9150 +97FC +90E0 +9150 +9248 +9444 +F080 +9048 +0544 +0514 +0910 +00F0 +ENDCHAR +STARTCHAR uni35EE +ENCODING 13806 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +3DFE +4510 +457C +A914 +1914 +117E +2114 +7D14 +A57C +2510 +2528 +3E28 +0244 +0482 +ENDCHAR +STARTCHAR uni35EF +ENCODING 13807 +BBX 14 16 0 -2 +BITMAP +0108 +1FD0 +0120 +7FFC +0200 +0FF0 +3810 +CFF0 +0810 +0FF0 +0000 +7C88 +44B0 +44C4 +7C84 +447C +ENDCHAR +STARTCHAR uni35F0 +ENCODING 13808 +BBX 14 16 1 -2 +BITMAP +0248 +0248 +E448 +A848 +B2A8 +A294 +A524 +AC20 +B420 +A4A0 +E4B8 +A4A0 +04A0 +0560 +053C +0600 +ENDCHAR +STARTCHAR uni35F1 +ENCODING 13809 +BBX 14 16 1 -2 +BITMAP +0280 +0240 +F7FC +9C40 +97F8 +9440 +97F8 +9440 +97FC +9480 +F080 +9FFC +02A0 +0490 +188C +0080 +ENDCHAR +STARTCHAR uni35F2 +ENCODING 13810 +BBX 14 16 1 -2 +BITMAP +0080 +07F0 +F090 +9FFC +9090 +97F0 +9080 +9FFC +9000 +97F0 +F490 +97F0 +0490 +07F0 +0000 +0FFC +ENDCHAR +STARTCHAR uni35F3 +ENCODING 13811 +BBX 14 16 1 -2 +BITMAP +0420 +0420 +F7BC +9450 +9A88 +9140 +9220 +9410 +9BEC +9000 +F000 +97F0 +0410 +0410 +07F0 +0410 +ENDCHAR +STARTCHAR uni35F4 +ENCODING 13812 +BBX 15 14 1 -1 +BITMAP +07BE +F4A2 +97BE +94A2 +97BE +9402 +94F2 +9492 +9492 +94F2 +F492 +0492 +04F2 +0406 +ENDCHAR +STARTCHAR uni35F5 +ENCODING 13813 +BBX 15 16 0 -2 +BITMAP +0210 +0290 +EA90 +AB3E +B222 +A544 +A890 +B210 +A290 +AB10 +EA28 +B228 +0528 +08C4 +1044 +0082 +ENDCHAR +STARTCHAR uni35F6 +ENCODING 13814 +BBX 14 16 1 -2 +BITMAP +0048 +0750 +F124 +9A28 +9410 +9808 +9774 +9150 +918C +9700 +F478 +9708 +0150 +0120 +0550 +0288 +ENDCHAR +STARTCHAR uni35F7 +ENCODING 13815 +BBX 14 16 1 -2 +BITMAP +0040 +07FC +F4A4 +93F8 +90A0 +93F8 +90A0 +97FC +9000 +93F8 +F208 +9248 +0248 +00B0 +0108 +0604 +ENDCHAR +STARTCHAR uni35F8 +ENCODING 13816 +BBX 15 16 0 -2 +BITMAP +0280 +048E +E8E0 +B140 +A040 +A24E +A5F4 +AC44 +B444 +A554 +E554 +A574 +0594 +0404 +0414 +0408 +ENDCHAR +STARTCHAR uni35F9 +ENCODING 13817 +BBX 14 15 1 -1 +BITMAP +0280 +0240 +E7FC +AC40 +B7F8 +A440 +A7F8 +A440 +A440 +A7FC +E480 +A048 +0A44 +0A14 +11F0 +ENDCHAR +STARTCHAR uni35FA +ENCODING 13818 +BBX 14 15 1 -2 +BITMAP +07F0 +E100 +AFF8 +A220 +A410 +B94C +A140 +AF78 +A140 +E770 +A140 +0F78 +0140 +0140 +0140 +ENDCHAR +STARTCHAR uni35FB +ENCODING 13819 +BBX 14 15 1 -2 +BITMAP +09F0 +E510 +A5D0 +A150 +A150 +BBF8 +AA08 +AAE8 +AAA8 +EAE8 +AA08 +0A28 +0A10 +1400 +23FC +ENDCHAR +STARTCHAR uni35FC +ENCODING 13820 +BBX 15 16 0 -2 +BITMAP +00A0 +04A4 +F2A8 +90A0 +97FC +9110 +90A0 +97FC +9040 +93F8 +F040 +97FC +0150 +0248 +0C46 +0040 +ENDCHAR +STARTCHAR uni35FD +ENCODING 13821 +BBX 15 16 0 -2 +BITMAP +1100 +2BDE +4A52 +73D4 +2A52 +4BD2 +7A1A +1294 +2350 +C240 +0000 +3FF8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni35FE +ENCODING 13822 +BBX 15 16 0 -2 +BITMAP +0510 +0518 +EFA8 +A528 +A76A +A2AA +AFAA +AAAC +AAAC +AFA8 +E238 +AFAA +022A +022A +0226 +0220 +ENDCHAR +STARTCHAR uni35FF +ENCODING 13823 +BBX 14 15 1 -2 +BITMAP +0F3C +E924 +AF3C +A924 +AF3C +A804 +ABF4 +A824 +ABA4 +EAA4 +ABA4 +0824 +08A4 +0854 +0808 +ENDCHAR +STARTCHAR uni3600 +ENCODING 13824 +BBX 14 16 1 -2 +BITMAP +0100 +0670 +F410 +9770 +9410 +9410 +97F0 +9080 +9490 +92A0 +9FFC +F1C0 +92A0 +0490 +188C +0080 +ENDCHAR +STARTCHAR uni3601 +ENCODING 13825 +BBX 15 15 0 -2 +BITMAP +07FC +F4A4 +97FC +9040 +93F8 +9040 +97FC +9110 +90A0 +F3F8 +9040 +0FFE +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni3602 +ENCODING 13826 +BBX 14 15 1 -1 +BITMAP +0210 +0120 +F7FC +9210 +9210 +94A4 +9738 +9210 +94A4 +97BC +F080 +9148 +0554 +0514 +08F0 +ENDCHAR +STARTCHAR uni3603 +ENCODING 13827 +BBX 14 16 1 -2 +BITMAP +0110 +07FC +F110 +9040 +97FC +9080 +91F0 +9310 +9510 +91F0 +F080 +9048 +0544 +0514 +0910 +00F0 +ENDCHAR +STARTCHAR uni3604 +ENCODING 13828 +BBX 15 16 0 -2 +BITMAP +0200 +02FE +E2AA +A2AA +AFAA +A2FE +A620 +A710 +AAFE +AA20 +F220 +A23C +0224 +0244 +0254 +0288 +ENDCHAR +STARTCHAR uni3605 +ENCODING 13829 +BBX 15 15 1 -1 +BITMAP +0480 +049E +E940 +B140 +A620 +A5DE +A884 +B884 +ABF4 +A884 +AA94 +EA94 +09A4 +08F4 +0B0C +ENDCHAR +STARTCHAR uni3606 +ENCODING 13830 +BBX 15 16 0 -2 +BITMAP +0040 +0FFE +E040 +A7FC +A000 +A3F8 +A208 +AFFE +A802 +A7FC +E110 +A3F8 +0040 +07FC +0040 +0FFE +ENDCHAR +STARTCHAR uni3607 +ENCODING 13831 +BBX 15 16 0 -2 +BITMAP +0110 +0554 +F5B8 +9910 +92A8 +9444 +9000 +97FC +9444 +9040 +F7FC +90E0 +0150 +0248 +0C46 +0040 +ENDCHAR +STARTCHAR uni3608 +ENCODING 13832 +BBX 15 16 0 -2 +BITMAP +0400 +057C +F604 +94A8 +9390 +907C +9414 +9794 +9A50 +9250 +9FDC +F250 +9550 +04B0 +089E +0100 +ENDCHAR +STARTCHAR uni3609 +ENCODING 13833 +BBX 15 16 0 -2 +BITMAP +0210 +0210 +F3DE +9528 +9084 +9000 +97BC +94A4 +97A4 +94A4 +F7A4 +9434 +0528 +06A0 +0420 +0020 +ENDCHAR +STARTCHAR uni360A +ENCODING 13834 +BBX 15 16 0 -2 +BITMAP +07FC +0040 +EFFE +A842 +A358 +A040 +A358 +A080 +A040 +AFFE +E000 +A7FC +0000 +07FC +0404 +07FC +ENDCHAR +STARTCHAR uni360B +ENCODING 13835 +BBX 14 16 1 -2 +BITMAP +0FBC +0A24 +EFA4 +A8A8 +AF90 +AA28 +AFC4 +A000 +A7F8 +A408 +E7F8 +A408 +07F8 +0408 +07F8 +0210 +ENDCHAR +STARTCHAR uni360C +ENCODING 13836 +BBX 15 16 0 -2 +BITMAP +0202 +03C2 +E202 +AFEA +AA2A +AB8A +AE4A +A9CA +A80A +AFEA +EA0A +AD4A +0A82 +0DC2 +12AA +2584 +ENDCHAR +STARTCHAR uni360D +ENCODING 13837 +BBX 15 16 0 -2 +BITMAP +0108 +014C +E52A +A548 +A88E +A138 +A288 +A7EA +BC8A +A7EC +E48C +A7E8 +048A +07FA +0426 +0442 +ENDCHAR +STARTCHAR uni360E +ENCODING 13838 +BBX 15 16 0 -2 +BITMAP +0400 +02FE +E202 +A802 +AB92 +A892 +AFDE +AAAA +ABCA +AAAA +EB92 +AAD2 +0FAA +08C6 +0882 +0806 +ENDCHAR +STARTCHAR uni360F +ENCODING 13839 +BBX 15 16 0 -2 +BITMAP +2110 +17FE +1080 +03F8 +F208 +13F8 +1208 +13F8 +1208 +13F8 +2800 +47FE +0090 +3EE4 +2284 +3E7C +ENDCHAR +STARTCHAR uni3610 +ENCODING 13840 +BBX 14 16 1 -2 +BITMAP +0020 +0F90 +EA7C +AF80 +AA28 +AFA4 +AA44 +AA00 +AFA8 +A0A8 +EAA8 +AA90 +0A90 +08A8 +00A8 +0344 +ENDCHAR +STARTCHAR uni3611 +ENCODING 13841 +BBX 15 16 0 -2 +BITMAP +0410 +0410 +1F7C +E414 +A414 +AEFE +A014 +AE14 +A07C +BF10 +E454 +0438 +1654 +2512 +1450 +0820 +ENDCHAR +STARTCHAR uni3612 +ENCODING 13842 +BBX 15 16 0 -2 +BITMAP +0C38 +71E0 +1020 +13FE +FD24 +31FC +3924 +55FC +5020 +93FE +1000 +7C88 +44B0 +44C4 +7C84 +447C +ENDCHAR +STARTCHAR uni3613 +ENCODING 13843 +BBX 14 16 0 -2 +BITMAP +07BC +04A4 +F7BC +94A4 +97BC +9444 +95F4 +9444 +95F4 +9554 +F5F4 +9554 +05F4 +04E4 +0554 +044C +ENDCHAR +STARTCHAR uni3614 +ENCODING 13844 +BBX 14 16 1 -2 +BITMAP +0080 +0FFC +E924 +A7F8 +A120 +A7F8 +A120 +AFFC +A210 +A7F8 +EA14 +A3F0 +0210 +03F0 +0120 +0210 +ENDCHAR +STARTCHAR uni3615 +ENCODING 13845 +BBX 14 15 1 -1 +BITMAP +0120 +0FFC +F120 +97D0 +9510 +979C +94A0 +97A8 +9544 +97C4 +F000 +97F8 +0528 +0528 +0FFC +ENDCHAR +STARTCHAR uni3616 +ENCODING 13846 +BBX 15 16 0 -2 +BITMAP +0200 +011E +EFC4 +A448 +A29E +AFD2 +A912 +AA1E +AC92 +A91E +EA12 +AC52 +089E +0900 +120C +0412 +ENDCHAR +STARTCHAR uni3617 +ENCODING 13847 +BBX 15 16 0 -2 +BITMAP +07BC +04A4 +F7BC +94A4 +97BC +94A4 +97BC +9120 +93FE +9220 +F7FC +9A20 +03FC +0220 +03FE +0200 +ENDCHAR +STARTCHAR uni3618 +ENCODING 13848 +BBX 15 16 0 -2 +BITMAP +2104 +47C8 +8812 +F3BC +2008 +4B92 +F83E +0380 +AAAA +ABAA +0000 +3FF8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni3619 +ENCODING 13849 +BBX 14 16 1 -2 +BITMAP +0F78 +0948 +EF78 +A000 +AFFC +A800 +AB20 +A93C +AFA8 +AAC8 +EBA8 +AAA8 +0BA8 +0AD0 +1790 +20A8 +ENDCHAR +STARTCHAR uni361A +ENCODING 13850 +BBX 15 16 0 -2 +BITMAP +0FBE +08A2 +EFBE +A8A2 +AFBE +A802 +AB92 +A892 +AFDE +AAAA +EBCA +AAAA +0B92 +0AD2 +0FAA +08C4 +ENDCHAR +STARTCHAR uni361B +ENCODING 13851 +BBX 14 16 1 -2 +BITMAP +0080 +0140 +E630 +BBEC +A000 +A7F0 +A410 +A7F0 +A220 +AFB8 +E508 +9FF8 +08A0 +0FB8 +08A4 +099C +ENDCHAR +STARTCHAR uni361C +ENCODING 13852 +BBX 15 16 0 -2 +BITMAP +5118 +4B94 +7C3E +D3A8 +7C7E +53A8 +7C3E +53A8 +7EBE +43A0 +0000 +3FF8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni361D +ENCODING 13853 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8008 +9F88 +8088 +9088 +8908 +8508 +8208 +8508 +8888 +9088 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni361E +ENCODING 13854 +BBX 13 15 1 -2 +BITMAP +FFF8 +8408 +8408 +8408 +BFC8 +8448 +8448 +8448 +8848 +8848 +9048 +9288 +A108 +FFF8 +8008 +ENDCHAR +STARTCHAR uni361F +ENCODING 13855 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8888 +8888 +8888 +BFE8 +8888 +8888 +8888 +9088 +9088 +A088 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni3620 +ENCODING 13856 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8408 +8288 +8288 +8908 +A948 +AA28 +CCA8 +8888 +9788 +A008 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni3621 +ENCODING 13857 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8008 +BFE8 +A228 +A228 +BFE8 +A228 +A228 +BFE8 +A228 +8208 +8208 +FFF8 +8008 +ENDCHAR +STARTCHAR uni3622 +ENCODING 13858 +BBX 13 15 1 -2 +BITMAP +FFF8 +8208 +9248 +8A48 +8A88 +BFE8 +8508 +8508 +8508 +8928 +9128 +A0E8 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni3623 +ENCODING 13859 +BBX 13 16 1 -2 +BITMAP +FFF8 +8008 +8F88 +8888 +8F88 +8008 +9FC8 +9048 +9FC8 +9048 +9FC8 +9048 +9148 +9088 +FFF8 +8008 +ENDCHAR +STARTCHAR uni3624 +ENCODING 13860 +BBX 13 15 1 -2 +BITMAP +FFF8 +8288 +CAA8 +AAA8 +8EE8 +C828 +AFE8 +8828 +AEE8 +CAA8 +8AA8 +92A8 +A028 +FFF8 +8008 +ENDCHAR +STARTCHAR uni3625 +ENCODING 13861 +BBX 15 16 0 -2 +BITMAP +FFFE +8002 +861A +F8E2 +AA42 +9492 +90E2 +BE4A +C8FA +BE22 +88AA +AB26 +BE62 +8002 +FFFE +8002 +ENDCHAR +STARTCHAR uni3626 +ENCODING 13862 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1040 +1040 +11FC +FE44 +1044 +1044 +1044 +1084 +1684 +1884 +E104 +4104 +0228 +0410 +ENDCHAR +STARTCHAR uni3627 +ENCODING 13863 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1008 +1050 +1020 +FC10 +13FE +1022 +1024 +1020 +1020 +1C20 +E020 +4020 +00A0 +0040 +ENDCHAR +STARTCHAR uni3628 +ENCODING 13864 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2020 +2020 +23FE +FA22 +2222 +2222 +2252 +224A +228A +3B02 +E202 +4202 +020A +0204 +ENDCHAR +STARTCHAR uni3629 +ENCODING 13865 +BBX 15 15 0 -1 +BITMAP +1010 +1110 +1110 +1112 +1112 +FD14 +11D8 +1110 +1110 +1110 +1110 +1D12 +E152 +4192 +010E +ENDCHAR +STARTCHAR uni362A +ENCODING 13866 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +1020 +FC3C +11E0 +1020 +1020 +103E +13E0 +1C20 +E022 +4022 +0022 +001E +ENDCHAR +STARTCHAR uni362B +ENCODING 13867 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +1088 +11FC +FC88 +1088 +1088 +13FE +1088 +1088 +1C88 +E088 +4108 +0108 +0208 +ENDCHAR +STARTCHAR uni362C +ENCODING 13868 +BBX 14 16 0 -2 +BITMAP +2100 +2100 +2100 +21FC +FA04 +2484 +2084 +2104 +2144 +2224 +27F4 +3A14 +E004 +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni362D +ENCODING 13869 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +213E +2102 +2242 +FA42 +27C2 +2082 +2082 +2102 +2142 +3A22 +E7E2 +4222 +000A +0004 +ENDCHAR +STARTCHAR uni362E +ENCODING 13870 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +1104 +FD04 +11FC +1124 +1120 +1120 +1110 +1D10 +E208 +4208 +0404 +0802 +ENDCHAR +STARTCHAR uni362F +ENCODING 13871 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +1100 +11FE +1200 +FC40 +1040 +13FC +1044 +1044 +1084 +1C84 +E104 +4104 +0228 +0410 +ENDCHAR +STARTCHAR uni3630 +ENCODING 13872 +BBX 15 16 0 -2 +BITMAP +1010 +1110 +1090 +1090 +1010 +FD10 +1090 +1090 +1010 +101E +13F0 +1C10 +E010 +4010 +0010 +0010 +ENDCHAR +STARTCHAR uni3631 +ENCODING 13873 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +1124 +FD24 +11FC +1124 +1124 +1124 +13FE +1D04 +E104 +4104 +0114 +0108 +ENDCHAR +STARTCHAR uni3632 +ENCODING 13874 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2204 +2204 +23FC +FA40 +2240 +2240 +23F8 +2248 +2248 +3A48 +E488 +448A +090A +0206 +ENDCHAR +STARTCHAR uni3633 +ENCODING 13875 +BBX 15 15 0 -1 +BITMAP +0440 +0444 +7C48 +0470 +0440 +0C42 +3442 +C43E +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni3634 +ENCODING 13876 +BBX 15 15 0 -1 +BITMAP +0100 +0110 +7910 +4910 +4910 +4928 +4924 +7944 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni3635 +ENCODING 13877 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +17FE +1080 +FCA0 +1120 +11FC +1324 +1524 +1124 +1D24 +E134 +4128 +0020 +0020 +ENDCHAR +STARTCHAR uni3636 +ENCODING 13878 +BBX 15 15 0 -1 +BITMAP +0810 +0810 +1EFC +2210 +5290 +0C90 +08FE +1010 +2010 +4110 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni3637 +ENCODING 13879 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +13FC +1110 +1110 +FC00 +1208 +1208 +1110 +1110 +10A0 +1C40 +E0A0 +4110 +0208 +0C06 +ENDCHAR +STARTCHAR uni3638 +ENCODING 13880 +BBX 15 14 0 -1 +BITMAP +FFFE +1040 +1044 +3E48 +4270 +A440 +1842 +1042 +213E +C100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni3639 +ENCODING 13881 +BBX 15 15 0 -1 +BITMAP +0880 +0888 +2890 +2EA0 +28C0 +2884 +2E84 +F07C +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni363A +ENCODING 13882 +BBX 15 16 0 -2 +BITMAP +2120 +2128 +2124 +2224 +FA20 +263E +2BE0 +2224 +2224 +2228 +2228 +3A10 +E212 +422A +0246 +0282 +ENDCHAR +STARTCHAR uni363B +ENCODING 13883 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +2222 +2222 +FA22 +23FE +2222 +2222 +2252 +224A +3A8A +E302 +4202 +03FE +0202 +ENDCHAR +STARTCHAR uni363C +ENCODING 13884 +BBX 15 16 0 -2 +BITMAP +1040 +1044 +11F4 +1048 +1050 +FDFE +1040 +1080 +11FE +1240 +1480 +1CFC +E004 +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni363D +ENCODING 13885 +BBX 15 16 0 -2 +BITMAP +0840 +0848 +7F44 +0844 +0840 +FFFE +0040 +0844 +0844 +7F44 +0828 +082A +0F12 +F02A +4046 +0082 +ENDCHAR +STARTCHAR uni363E +ENCODING 13886 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2202 +2404 +F800 +21FC +2020 +2020 +2020 +23FE +3820 +E020 +4020 +00A0 +0040 +ENDCHAR +STARTCHAR uni363F +ENCODING 13887 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +1104 +1104 +11FC +FD04 +1104 +11FC +1020 +1020 +11FC +1C20 +E020 +4020 +03FE +ENDCHAR +STARTCHAR uni3640 +ENCODING 13888 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +2404 +2110 +FA08 +2484 +2080 +23F0 +2090 +2090 +3910 +E112 +4212 +040E +0800 +ENDCHAR +STARTCHAR uni3641 +ENCODING 13889 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FE +1100 +12FC +FC84 +10A4 +1094 +13FE +1084 +1124 +1D14 +E1FE +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni3642 +ENCODING 13890 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +1010 +11FC +FD04 +1104 +1104 +11FC +1050 +1050 +1C90 +E092 +4112 +020E +0400 +ENDCHAR +STARTCHAR uni3643 +ENCODING 13891 +BBX 15 16 0 -2 +BITMAP +1010 +1038 +11C0 +1100 +1100 +FDFC +1110 +1110 +1110 +1110 +13FE +1C00 +E090 +4108 +0204 +0402 +ENDCHAR +STARTCHAR uni3644 +ENCODING 13892 +BBX 15 15 0 -1 +BITMAP +1110 +1112 +1114 +11D8 +1110 +FD12 +1152 +118E +1120 +1020 +11FC +1C20 +E020 +4020 +03FE +ENDCHAR +STARTCHAR uni3645 +ENCODING 13893 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2208 +2208 +2208 +FBF8 +2040 +2040 +27FC +20E0 +2150 +3A48 +E444 +4842 +0040 +0040 +ENDCHAR +STARTCHAR uni3646 +ENCODING 13894 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2202 +2444 +F840 +23FE +2040 +2090 +2090 +2110 +3920 +E224 +4242 +04FE +0842 +ENDCHAR +STARTCHAR uni3647 +ENCODING 13895 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1040 +1080 +1144 +FE24 +1068 +12B0 +1130 +12A8 +1068 +1CA4 +E122 +4220 +00A0 +0040 +ENDCHAR +STARTCHAR uni3648 +ENCODING 13896 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +207C +2040 +23FC +FA44 +2270 +23C0 +2244 +223C +2200 +3AF0 +E490 +4492 +0912 +120E +ENDCHAR +STARTCHAR uni3649 +ENCODING 13897 +BBX 15 16 0 -2 +BITMAP +1050 +1050 +1050 +11FC +1154 +FD54 +1154 +11FC +1154 +1154 +1D54 +E3FE +4000 +0088 +0104 +0202 +ENDCHAR +STARTCHAR uni364A +ENCODING 13898 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2200 +23F8 +FA00 +23F8 +2200 +2200 +2FFE +2244 +3A44 +C228 +0210 +03C8 +0E06 +ENDCHAR +STARTCHAR uni364B +ENCODING 13899 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +1088 +FCF8 +1088 +1088 +10F8 +1088 +1C88 +E3FE +4000 +0088 +0104 +0202 +ENDCHAR +STARTCHAR uni364C +ENCODING 13900 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1024 +13FE +FC24 +11FC +1020 +1124 +1124 +1174 +1DAC +E124 +4124 +0224 +0424 +ENDCHAR +STARTCHAR uni364D +ENCODING 13901 +BBX 15 16 0 -2 +BITMAP +2000 +27BC +2084 +2294 +2108 +FA94 +24A4 +2840 +2000 +27BC +20A4 +3AA4 +E128 +4290 +04A8 +0846 +ENDCHAR +STARTCHAR uni364E +ENCODING 13902 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +27FE +2410 +F410 +27F0 +2492 +2492 +27D2 +2554 +3554 +E488 +454A +0A1A +0826 +1042 +ENDCHAR +STARTCHAR uni364F +ENCODING 13903 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +11FE +1200 +15FC +FD04 +11FC +1104 +11FC +1080 +10FC +1D08 +E290 +4060 +0198 +0606 +ENDCHAR +STARTCHAR uni3650 +ENCODING 13904 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +11FC +FC00 +13FE +1020 +1040 +11FC +1154 +1D54 +E154 +4154 +0154 +010C +ENDCHAR +STARTCHAR uni3651 +ENCODING 13905 +BBX 15 16 0 -2 +BITMAP +00F0 +3F00 +0100 +1FF0 +1110 +1FF0 +0100 +7FFC +4124 +41F4 +5E14 +4008 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni3652 +ENCODING 13906 +BBX 15 15 0 -1 +BITMAP +00F8 +7E08 +4A50 +4A20 +7EFC +4A24 +4A28 +7E20 +00A0 +0140 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni3653 +ENCODING 13907 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +3FF8 +0100 +FFFE +0820 +3EF8 +0820 +0E20 +78FC +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni3654 +ENCODING 13908 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +11FC +1084 +13FE +FC00 +11FC +1104 +11FC +1020 +13FE +1C20 +E220 +43FE +0020 +0020 +ENDCHAR +STARTCHAR uni3655 +ENCODING 13909 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2222 +23FE +2222 +FBFE +2000 +21FC +2104 +21FC +2104 +39FC +E104 +4104 +0114 +0108 +ENDCHAR +STARTCHAR uni3656 +ENCODING 13910 +BBX 15 16 0 -2 +BITMAP +1004 +101E +13E0 +1020 +11FC +FD24 +1124 +11FC +1020 +13FE +1222 +1E2A +E2FA +4202 +020A +0204 +ENDCHAR +STARTCHAR uni3657 +ENCODING 13911 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2248 +2248 +23F8 +FA48 +2248 +23F8 +2000 +27FE +2240 +3A44 +E228 +4290 +0308 +0206 +ENDCHAR +STARTCHAR uni3658 +ENCODING 13912 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2050 +2050 +23FE +FA52 +2252 +23FE +2000 +2040 +27FE +3888 +E190 +4060 +00D8 +0304 +ENDCHAR +STARTCHAR uni3659 +ENCODING 13913 +BBX 15 16 0 -2 +BITMAP +2120 +1110 +97FE +4128 +4934 +0928 +1132 +E124 +223A +2262 +259E +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni365A +ENCODING 13914 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +13FE +1020 +11FC +FC20 +13FE +1000 +10A0 +10FC +1120 +1C20 +E3FE +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni365B +ENCODING 13915 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +13FE +1020 +11FC +FD24 +11FC +1124 +11FC +1124 +1C08 +E3FE +4088 +0048 +0048 +0018 +ENDCHAR +STARTCHAR uni365C +ENCODING 13916 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0000 +1FF0 +1010 +1FF0 +0000 +7FFC +4004 +4FE4 +4824 +4FEC +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni365D +ENCODING 13917 +BBX 15 16 0 -2 +BITMAP +2040 +21FC +2044 +2094 +2108 +FBDE +214A +214A +2294 +21FC +2104 +39FC +E104 +41FC +0104 +010C +ENDCHAR +STARTCHAR uni365E +ENCODING 13918 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1104 +11FC +FD04 +11FC +1104 +11FC +1020 +13FE +1C70 +E0A8 +4124 +0222 +0020 +ENDCHAR +STARTCHAR uni365F +ENCODING 13919 +BBX 15 16 0 -2 +BITMAP +2100 +209E +23D2 +2252 +2252 +FBDE +2252 +2252 +23D2 +221E +2292 +3A52 +E2D2 +4352 +022A +0044 +ENDCHAR +STARTCHAR uni3660 +ENCODING 13920 +BBX 15 15 0 -1 +BITMAP +7F78 +4848 +5F4C +6480 +5F78 +4448 +4A48 +5130 +7F4C +0000 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni3661 +ENCODING 13921 +BBX 15 16 0 -2 +BITMAP +2124 +2124 +2224 +2424 +2954 +F94A +2292 +2610 +2A10 +2250 +225C +3A50 +E250 +42B0 +029E +0300 +ENDCHAR +STARTCHAR uni3662 +ENCODING 13922 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +23FE +2088 +2088 +F8F8 +2020 +23FE +2222 +2332 +22AA +3B76 +E222 +4222 +022A +0224 +ENDCHAR +STARTCHAR uni3663 +ENCODING 13923 +BBX 15 16 0 -2 +BITMAP +2000 +2F3E +2120 +213C +F120 +2F3C +2820 +28FE +2850 +2F52 +3154 +E148 +4148 +0144 +0A62 +0440 +ENDCHAR +STARTCHAR uni3664 +ENCODING 13924 +BBX 15 16 0 -2 +BITMAP +2040 +207C +2040 +23FE +2242 +FA78 +23C4 +223C +2208 +22F0 +2324 +3AA8 +E5FE +4420 +08A0 +0040 +ENDCHAR +STARTCHAR uni3665 +ENCODING 13925 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +2110 +FA48 +2484 +2120 +23F0 +2010 +2088 +2150 +3B20 +E510 +4948 +0186 +0100 +ENDCHAR +STARTCHAR uni3666 +ENCODING 13926 +BBX 15 15 0 -1 +BITMAP +0808 +1448 +2228 +5C88 +8848 +7F0E +08F8 +2A08 +4908 +1808 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni3667 +ENCODING 13927 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2050 +23DE +2252 +FA52 +23DE +2050 +23FE +2222 +2222 +3BFE +E222 +4222 +03FE +0202 +ENDCHAR +STARTCHAR uni3668 +ENCODING 13928 +BBX 15 16 0 -2 +BITMAP +2248 +2248 +2554 +275C +2248 +FD54 +275C +2248 +2FFE +2220 +2228 +3A28 +E514 +4494 +042C +0844 +ENDCHAR +STARTCHAR uni3669 +ENCODING 13929 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +20A0 +2514 +FA08 +27FC +2A0A +23F8 +2208 +23F8 +3840 +E248 +4444 +0944 +0080 +ENDCHAR +STARTCHAR uni366A +ENCODING 13930 +BBX 15 15 0 -1 +BITMAP +2020 +23FE +2020 +21FC +2000 +FBFE +2202 +21FC +2000 +21FC +2104 +39FC +E104 +4088 +03FE +ENDCHAR +STARTCHAR uni366B +ENCODING 13931 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +11FE +1320 +11FC +FD20 +11FC +1120 +11FE +1100 +1C20 +E3FE +4070 +00A8 +0326 +0020 +ENDCHAR +STARTCHAR uni366C +ENCODING 13932 +BBX 15 15 0 -1 +BITMAP +0814 +0812 +7F10 +2AFE +2A10 +5D10 +1C28 +2A28 +4944 +8882 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni366D +ENCODING 13933 +BBX 15 16 0 -2 +BITMAP +2000 +2FFE +2800 +2A28 +F948 +2BEE +2892 +2884 +2AA0 +2AA8 +3BE8 +E888 +4894 +0914 +0924 +1242 +ENDCHAR +STARTCHAR uni366E +ENCODING 13934 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +23DE +2228 +2544 +F8A0 +2110 +2208 +25F6 +2000 +2000 +3BF8 +E208 +4208 +03F8 +0208 +ENDCHAR +STARTCHAR uni366F +ENCODING 13935 +BBX 15 16 0 -2 +BITMAP +0820 +3E20 +08F8 +7F28 +2228 +496A +3E2A +0856 +7E82 +0000 +3FF8 +0000 +FFFE +0820 +1010 +3FF8 +ENDCHAR +STARTCHAR uni3670 +ENCODING 13936 +BBX 15 16 0 -2 +BITMAP +1000 +1EFC +2224 +7F44 +A99C +3F50 +297C +3F90 +29FE +2910 +4510 +8210 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni3671 +ENCODING 13937 +BBX 15 16 0 -2 +BITMAP +0020 +7C3C +4420 +7DFE +0122 +FD38 +41E4 +7D1C +0570 +2A54 +148C +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni3672 +ENCODING 13938 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2028 +2224 +F27E +24C8 +2748 +217E +2248 +24C8 +377E +E148 +4248 +047E +0840 +ENDCHAR +STARTCHAR uni3673 +ENCODING 13939 +BBX 15 15 0 -1 +BITMAP +2014 +2012 +27FE +2410 +F5D0 +2414 +25D4 +2558 +25CA +2416 +3442 +E824 +42A2 +028A +0478 +ENDCHAR +STARTCHAR uni3674 +ENCODING 13940 +BBX 15 16 0 -2 +BITMAP +2100 +21F8 +2208 +27FE +2288 +FB24 +23FE +2200 +22FC +2200 +22FC +3A00 +E2FC +4484 +04FC +0884 +ENDCHAR +STARTCHAR uni3675 +ENCODING 13941 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1000 +10F8 +1088 +FCF8 +1000 +13FE +1202 +12FA +128A +1EFA +E226 +41F8 +0020 +03FE +ENDCHAR +STARTCHAR uni3676 +ENCODING 13942 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +1010 +1FF0 +0000 +1110 +0920 +7FFE +4002 +9FF4 +1010 +1FF0 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni3677 +ENCODING 13943 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +23FE +2202 +FBFE +2108 +2252 +239C +2108 +2252 +3BDE +E000 +42A4 +0252 +0452 +ENDCHAR +STARTCHAR uni3678 +ENCODING 13944 +BBX 15 16 0 -2 +BITMAP +2128 +21AA +216C +2228 +FAFE +2644 +2628 +2AFE +2210 +227C +2210 +3AFE +E210 +4228 +0244 +0282 +ENDCHAR +STARTCHAR uni3679 +ENCODING 13945 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +23FE +2088 +23FE +FA52 +23FE +2000 +23FE +2242 +20F8 +3908 +E290 +4060 +00C0 +0700 +ENDCHAR +STARTCHAR uni367A +ENCODING 13946 +BBX 15 16 0 -2 +BITMAP +27FE +2420 +25FC +2524 +25FC +FC20 +27FE +2504 +25FC +2504 +25FC +3D04 +E5FC +4488 +0504 +07FE +ENDCHAR +STARTCHAR uni367B +ENCODING 13947 +BBX 15 16 0 -2 +BITMAP +2020 +27FE +2400 +25FC +2524 +F5FC +2524 +25FC +2420 +25FC +2420 +37FE +E524 +4AFA +0820 +13FE +ENDCHAR +STARTCHAR uni367C +ENCODING 13948 +BBX 15 16 0 -2 +BITMAP +23F8 +2248 +2248 +23F8 +2248 +FA48 +23F8 +2000 +2FBE +2AAA +2AAA +3FBE +EAAA +4AAA +0FBE +08A2 +ENDCHAR +STARTCHAR uni367D +ENCODING 13949 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +27FE +2020 +23AE +F924 +23AE +22AA +23AE +22AA +23AE +3850 +E050 +4088 +0104 +0602 +ENDCHAR +STARTCHAR uni367E +ENCODING 13950 +BBX 15 16 0 -2 +BITMAP +22A0 +244C +24A4 +260C +F4A4 +264C +24A4 +2FFE +2802 +23F0 +3020 +E040 +47FC +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni367F +ENCODING 13951 +BBX 15 16 0 -2 +BITMAP +2110 +27FC +2040 +23F8 +2040 +F7FC +2000 +23D4 +2112 +27FE +2350 +3534 +E78C +42CA +0456 +08C2 +ENDCHAR +STARTCHAR uni3680 +ENCODING 13952 +BBX 15 16 0 -2 +BITMAP +2108 +21EC +210A +27E8 +F528 +25DE +2728 +24EA +240A +27EA +340C +E7EC +4A2A +0BEA +1156 +07E2 +ENDCHAR +STARTCHAR uni3681 +ENCODING 13953 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +7C7C +1010 +FEFE +4444 +EEEE +4444 +6464 +DEDE +0000 +FEFE +2828 +2A28 +4C4A +8886 +ENDCHAR +STARTCHAR uni3682 +ENCODING 13954 +BBX 15 16 0 -2 +BITMAP +2040 +27FC +2248 +23F8 +F040 +2FFE +2AAA +23B8 +2110 +27FC +3110 +EFFE +4128 +0310 +0D48 +0186 +ENDCHAR +STARTCHAR uni3683 +ENCODING 13955 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +1FF0 +0000 +7FFE +4002 +8444 +2388 +2448 +2008 +3FF8 +0820 +0440 +7FFC +ENDCHAR +STARTCHAR uni3684 +ENCODING 13956 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0100 +1FF0 +0000 +7FFE +5112 +9FF4 +1110 +1FF0 +0000 +7FFC +0104 +11F0 +2900 +47FE +ENDCHAR +STARTCHAR uni3685 +ENCODING 13957 +BBX 15 15 0 -1 +BITMAP +0200 +07E0 +0820 +1440 +0380 +1C70 +E00E +1FF0 +0100 +1100 +1FF8 +2100 +5FF0 +0100 +FFFE +ENDCHAR +STARTCHAR uni3686 +ENCODING 13958 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0800 +0FF0 +1420 +2240 +4180 +0E60 +701C +ENDCHAR +STARTCHAR uni3687 +ENCODING 13959 +BBX 15 16 0 -2 +BITMAP +0440 +2288 +2108 +2288 +2448 +3FF8 +1210 +2208 +47E4 +0820 +1440 +2280 +0100 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni3688 +ENCODING 13960 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +1010 +1E10 +1210 +2210 +22FE +5210 +8A10 +0410 +0410 +0810 +0810 +1010 +2010 +4010 +ENDCHAR +STARTCHAR uni3689 +ENCODING 13961 +BBX 13 15 1 -2 +BITMAP +7FE0 +1020 +1040 +1078 +2408 +2FC8 +70A8 +8B10 +0D00 +73F0 +0C20 +3240 +0180 +0600 +7800 +ENDCHAR +STARTCHAR uni368A +ENCODING 13962 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +3C10 +45FE +4820 +A824 +1044 +28F8 +4E12 +1222 +2444 +5588 +0810 +1028 +2044 +C182 +ENDCHAR +STARTCHAR uni368B +ENCODING 13963 +BBX 14 16 0 -2 +BITMAP +2000 +21FC +3D24 +4524 +4974 +A924 +11FC +2904 +4F74 +1354 +2554 +5574 +0904 +1204 +2214 +C408 +ENDCHAR +STARTCHAR uni368C +ENCODING 13964 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +3D24 +4524 +49FC +A924 +1124 +29FC +4E20 +13FE +2470 +54A8 +0924 +1222 +2020 +C020 +ENDCHAR +STARTCHAR uni368D +ENCODING 13965 +BBX 15 16 0 -2 +BITMAP +2020 +21FC +3D24 +45FC +4820 +ABFE +1000 +29FC +4F04 +13FC +2504 +55FC +0904 +11FC +2088 +C104 +ENDCHAR +STARTCHAR uni368E +ENCODING 13966 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0820 +3018 +C006 +0000 +2008 +2008 +2008 +2008 +2008 +3FF8 +0008 +ENDCHAR +STARTCHAR uni368F +ENCODING 13967 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0820 +3018 +C006 +0820 +0820 +7FFC +0820 +0820 +1020 +1020 +2020 +ENDCHAR +STARTCHAR uni3690 +ENCODING 13968 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +02C0 +0420 +1810 +6008 +0100 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3691 +ENCODING 13969 +BBX 15 14 1 -1 +BITMAP +3FF8 +0008 +FFFE +0008 +0008 +3FF8 +0100 +0100 +FFFE +0100 +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3692 +ENCODING 13970 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +7FFC +0100 +2120 +1110 +1110 +2928 +4544 +0280 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3693 +ENCODING 13971 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0820 +3110 +0100 +7FFC +0380 +0540 +0920 +3118 +C106 +0100 +0100 +ENDCHAR +STARTCHAR uni3694 +ENCODING 13972 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3018 +C826 +0440 +3FF8 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni3695 +ENCODING 13973 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3458 +C446 +7FF8 +0448 +3FF8 +2440 +3FFC +0844 +1054 +2048 +4040 +ENDCHAR +STARTCHAR uni3696 +ENCODING 13974 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3697 +ENCODING 13975 +BBX 15 15 0 -1 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3018 +DFF6 +1010 +1010 +1FF0 +1010 +1FF0 +1010 +1010 +FFFE +ENDCHAR +STARTCHAR uni3698 +ENCODING 13976 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +7DFC +1020 +1020 +1020 +FDFE +1020 +1050 +1050 +2888 +2488 +4504 +8202 +ENDCHAR +STARTCHAR uni3699 +ENCODING 13977 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +FE7C +1244 +2244 +2244 +4244 +8E7C +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni369A +ENCODING 13978 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3218 +C7E6 +0820 +3440 +0280 +0300 +1FF0 +E810 +0810 +0FF0 +0810 +ENDCHAR +STARTCHAR uni369B +ENCODING 13979 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +38D8 +CF06 +0810 +07F0 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni369C +ENCODING 13980 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3098 +C0A6 +3FF8 +0080 +3E80 +2248 +3E50 +0024 +0E54 +718C +0604 +ENDCHAR +STARTCHAR uni369D +ENCODING 13981 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3018 +C806 +0840 +13F8 +3040 +57FC +9040 +13F8 +1040 +17FC +1000 +ENDCHAR +STARTCHAR uni369E +ENCODING 13982 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3018 +C826 +0820 +7EFC +0820 +1C70 +2A68 +48A4 +8922 +0820 +0820 +ENDCHAR +STARTCHAR uni369F +ENCODING 13983 +BBX 15 16 0 -2 +BITMAP +0800 +1FC0 +2080 +7FF0 +A010 +3FF0 +2088 +3CF4 +2084 +3D7C +0100 +7FFC +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni36A0 +ENCODING 13984 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3458 +C286 +3FF8 +0100 +1FF0 +0100 +7FFC +0000 +2488 +2244 +4244 +ENDCHAR +STARTCHAR uni36A1 +ENCODING 13985 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +FEFE +1010 +2828 +4444 +FEFE +0404 +7474 +5454 +5454 +7474 +5454 +0404 +1414 +0808 +ENDCHAR +STARTCHAR uni36A2 +ENCODING 13986 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +1080 +2080 +2FFE +6108 +6108 +A208 +2210 +2610 +21A0 +2040 +20A0 +2110 +2208 +2C04 +ENDCHAR +STARTCHAR uni36A3 +ENCODING 13987 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +FFFE +0840 +1C80 +0380 +0470 +1808 +6200 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni36A4 +ENCODING 13988 +BBX 15 16 0 -2 +BITMAP +1048 +1044 +1044 +1040 +FE4E +23F0 +2240 +2240 +4240 +2440 +1420 +0822 +1412 +220A +4206 +8002 +ENDCHAR +STARTCHAR uni36A5 +ENCODING 13989 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +1020 +FC20 +2420 +2420 +27FE +2420 +4820 +2820 +1020 +2820 +4420 +84A0 +0040 +ENDCHAR +STARTCHAR uni36A6 +ENCODING 13990 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1048 +1048 +FC48 +2448 +2448 +2448 +2448 +4848 +2848 +1048 +2888 +4488 +8508 +0208 +ENDCHAR +STARTCHAR uni36A7 +ENCODING 13991 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1010 +10FE +FC80 +2480 +2480 +2480 +2480 +4880 +2880 +1080 +2880 +4500 +8500 +0200 +ENDCHAR +STARTCHAR uni36A8 +ENCODING 13992 +BBX 15 16 0 -2 +BITMAP +1000 +13F0 +1090 +1090 +FC90 +2490 +2490 +27F0 +2490 +4890 +2890 +1092 +288A +448A +8486 +0082 +ENDCHAR +STARTCHAR uni36A9 +ENCODING 13993 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +1084 +FC84 +25FE +2484 +2484 +2484 +49FE +2884 +1084 +2884 +4484 +8494 +0088 +ENDCHAR +STARTCHAR uni36AA +ENCODING 13994 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FC20 +243C +25E0 +2420 +2420 +483E +2BE0 +1020 +2822 +4422 +8422 +001E +ENDCHAR +STARTCHAR uni36AB +ENCODING 13995 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2084 +2088 +F888 +4890 +489C +4884 +8944 +4944 +3128 +1128 +2A10 +4A28 +8444 +0182 +ENDCHAR +STARTCHAR uni36AC +ENCODING 13996 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1080 +10FC +FD04 +2604 +2484 +2444 +2444 +4814 +2824 +1044 +2984 +4404 +8428 +0010 +ENDCHAR +STARTCHAR uni36AD +ENCODING 13997 +BBX 15 16 0 -2 +BITMAP +1040 +1050 +1048 +1048 +FC40 +25FE +2450 +2450 +2450 +4850 +2890 +1090 +2892 +4512 +850E +0200 +ENDCHAR +STARTCHAR uni36AE +ENCODING 13998 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FE +1102 +FD02 +2400 +2478 +2448 +2448 +4848 +2848 +104A +284A +448A +8486 +0100 +ENDCHAR +STARTCHAR uni36AF +ENCODING 13999 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2208 +2208 +FB28 +4AA8 +4AA8 +4A48 +8A48 +4AA8 +32A8 +132A +2C0A +440A +8806 +1002 +ENDCHAR +STARTCHAR uni36B0 +ENCODING 14000 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +1010 +1010 +FC20 +2420 +2468 +24A4 +2522 +4A22 +2820 +1020 +2820 +4400 +83FE +ENDCHAR +STARTCHAR uni36B1 +ENCODING 14001 +BBX 15 15 0 -1 +BITMAP +1008 +101C +10E0 +1080 +FC80 +2480 +2480 +24FE +2488 +4888 +2888 +1088 +2888 +4488 +85FE +ENDCHAR +STARTCHAR uni36B2 +ENCODING 14002 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +FC3E +2420 +2420 +2420 +25FC +4904 +2904 +1104 +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni36B3 +ENCODING 14003 +BBX 14 16 0 -2 +BITMAP +2100 +2100 +2100 +211C +FBD4 +4954 +4954 +4954 +8954 +4954 +3154 +1154 +2954 +4A5C +8354 +0480 +ENDCHAR +STARTCHAR uni36B4 +ENCODING 14004 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +2040 +23FE +F880 +48A0 +4920 +49FC +8B24 +4D24 +3124 +1124 +2934 +4928 +8020 +0020 +ENDCHAR +STARTCHAR uni36B5 +ENCODING 14005 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +107C +1084 +FD88 +2650 +2420 +2450 +2488 +4B06 +2860 +1010 +2808 +44C0 +8420 +0010 +ENDCHAR +STARTCHAR uni36B6 +ENCODING 14006 +BBX 14 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +FD08 +2508 +25F8 +2500 +2500 +49FC +2904 +1104 +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni36B7 +ENCODING 14007 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2050 +2050 +F888 +4904 +4A22 +4820 +48A8 +90A4 +5124 +2122 +3222 +4820 +48A0 +8040 +ENDCHAR +STARTCHAR uni36B8 +ENCODING 14008 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1004 +1004 +FDF4 +2404 +2404 +25F4 +2514 +4914 +29F4 +1114 +2804 +4404 +8428 +0010 +ENDCHAR +STARTCHAR uni36B9 +ENCODING 14009 +BBX 15 16 0 -2 +BITMAP +2000 +2080 +231E +2252 +FA52 +4A52 +4A52 +4A52 +4A52 +92D2 +535A +2254 +3090 +4890 +4910 +8210 +ENDCHAR +STARTCHAR uni36BA +ENCODING 14010 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1044 +1048 +FC8E +2482 +257A +2614 +2420 +4820 +2BFE +1020 +2820 +4420 +84A0 +0040 +ENDCHAR +STARTCHAR uni36BB +ENCODING 14011 +BBX 15 15 0 -2 +BITMAP +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0400 +0400 +FFFE +0820 +1C40 +0380 +0C70 +3008 +ENDCHAR +STARTCHAR uni36BC +ENCODING 14012 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +11FC +1124 +FD24 +2524 +2524 +2524 +25FC +4924 +2924 +1124 +2924 +4524 +85FC +0104 +ENDCHAR +STARTCHAR uni36BD +ENCODING 14013 +BBX 15 15 0 -2 +BITMAP +7DFE +1040 +1080 +11FC +1004 +1E04 +E004 +4228 +0210 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni36BE +ENCODING 14014 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FD04 +2504 +25FC +2450 +2450 +4850 +2850 +1092 +2892 +4512 +820E +0400 +ENDCHAR +STARTCHAR uni36BF +ENCODING 14015 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +10FC +1084 +FD04 +26F4 +2494 +2494 +24F4 +4884 +2894 +1088 +2882 +4482 +847E +ENDCHAR +STARTCHAR uni36C0 +ENCODING 14016 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +10F8 +1108 +FE10 +2420 +25FC +2404 +2404 +4804 +29FC +1004 +2804 +4404 +85FC +0004 +ENDCHAR +STARTCHAR uni36C1 +ENCODING 14017 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +1020 +FD24 +24A4 +24A8 +2420 +27FE +4820 +2820 +1020 +2820 +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni36C2 +ENCODING 14018 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11E0 +1100 +FD00 +257C +2554 +2554 +2554 +4954 +297C +1140 +2940 +4642 +8242 +043E +ENDCHAR +STARTCHAR uni36C3 +ENCODING 14019 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +7F7C +0824 +3E24 +0824 +7F44 +0854 +0A88 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni36C4 +ENCODING 14020 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +11FE +FC40 +2440 +24A0 +24A2 +25A4 +4A98 +2C90 +1088 +2888 +44A4 +84C2 +0080 +ENDCHAR +STARTCHAR uni36C5 +ENCODING 14021 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1088 +1088 +FCF8 +2488 +2488 +24F8 +2488 +4888 +288E +13F8 +2808 +4408 +8408 +0008 +ENDCHAR +STARTCHAR uni36C6 +ENCODING 14022 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1044 +1048 +FC5E +2482 +248A +2524 +2420 +4BFE +2820 +1070 +28A8 +4524 +8222 +0020 +ENDCHAR +STARTCHAR uni36C7 +ENCODING 14023 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1010 +11FE +FD00 +2510 +2510 +2510 +257C +4910 +2910 +1110 +2910 +4610 +82FE +0400 +ENDCHAR +STARTCHAR uni36C8 +ENCODING 14024 +BBX 15 16 0 -2 +BITMAP +1040 +1044 +11F4 +1048 +FC50 +25FE +2440 +2480 +25FE +4A40 +2C80 +10FC +2804 +4404 +8428 +0010 +ENDCHAR +STARTCHAR uni36C9 +ENCODING 14025 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +1050 +FDFC +2554 +2554 +2554 +2554 +4954 +298C +1104 +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni36CA +ENCODING 14026 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1088 +1088 +FC88 +2488 +2526 +2620 +25FE +4820 +2870 +10A8 +2924 +4622 +8420 +0020 +ENDCHAR +STARTCHAR uni36CB +ENCODING 14027 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +20A0 +20A0 +F910 +4A48 +4C46 +4840 +4944 +9152 +524A +244A +3048 +4840 +4940 +8080 +ENDCHAR +STARTCHAR uni36CC +ENCODING 14028 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +2090 +2108 +FBFC +4824 +4920 +4920 +49FC +9220 +5020 +27FE +3020 +4820 +4820 +8020 +ENDCHAR +STARTCHAR uni36CD +ENCODING 14029 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +FC20 +2420 +2524 +2524 +2524 +4AAA +2820 +1050 +2850 +4488 +8104 +0202 +ENDCHAR +STARTCHAR uni36CE +ENCODING 14030 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +1084 +FC84 +2484 +24FC +2400 +2400 +49FE +2902 +1102 +2902 +4502 +85FE +0102 +ENDCHAR +STARTCHAR uni36CF +ENCODING 14031 +BBX 15 15 1 -1 +BITMAP +1028 +1024 +1024 +FDFE +2420 +2524 +24A4 +44A8 +4820 +4870 +F0B0 +1928 +2224 +4022 +80E0 +ENDCHAR +STARTCHAR uni36D0 +ENCODING 14032 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1020 +FDFC +2524 +2524 +25FC +2524 +4924 +29FC +1120 +28A0 +4440 +80B0 +030E +ENDCHAR +STARTCHAR uni36D1 +ENCODING 14033 +BBX 15 16 0 -2 +BITMAP +0800 +0F7C +2844 +3F44 +6128 +9210 +0C68 +3186 +C000 +0400 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni36D2 +ENCODING 14034 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +1000 +1000 +FCFC +2484 +2484 +2484 +24FC +4800 +2884 +1044 +2848 +4400 +85FE +ENDCHAR +STARTCHAR uni36D3 +ENCODING 14035 +BBX 15 16 0 -2 +BITMAP +2184 +2068 +2030 +20C8 +FB04 +4840 +4BFE +48A0 +4920 +93FC +5524 +2124 +3134 +4928 +4820 +8020 +ENDCHAR +STARTCHAR uni36D4 +ENCODING 14036 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10FC +1088 +FD50 +2420 +24D8 +2726 +24F8 +4820 +28F8 +1020 +2BFE +4420 +8020 +0020 +ENDCHAR +STARTCHAR uni36D5 +ENCODING 14037 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1088 +1088 +FCF8 +2400 +25FC +2524 +2524 +4924 +29FC +1100 +2900 +4502 +8502 +00FE +ENDCHAR +STARTCHAR uni36D6 +ENCODING 14038 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +2088 +2104 +FBFE +4802 +4888 +4944 +8A42 +48F8 +3188 +1250 +2820 +4850 +8188 +0606 +ENDCHAR +STARTCHAR uni36D7 +ENCODING 14039 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +10A8 +10A8 +FCA8 +2574 +2622 +2420 +2420 +49FC +2820 +1020 +2820 +4420 +83FE +ENDCHAR +STARTCHAR uni36D8 +ENCODING 14040 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +23FE +2020 +F820 +4BFE +4A02 +4C04 +49F8 +9010 +5020 +23FE +3020 +4820 +48A0 +8040 +ENDCHAR +STARTCHAR uni36D9 +ENCODING 14041 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +1000 +FC88 +2450 +27FE +2420 +2420 +4820 +29FC +1020 +2820 +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni36DA +ENCODING 14042 +BBX 14 16 0 -2 +BITMAP +1000 +11F8 +1008 +10D0 +FC20 +25FC +2524 +2524 +25FC +4924 +2924 +11FC +2924 +4524 +8524 +010C +ENDCHAR +STARTCHAR uni36DB +ENCODING 14043 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11F8 +1108 +FDF8 +2508 +25FA +250A +250C +4BF8 +2818 +1028 +2848 +4588 +8628 +0010 +ENDCHAR +STARTCHAR uni36DC +ENCODING 14044 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +24FE +6488 +A548 +2450 +2420 +2450 +228C +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni36DD +ENCODING 14045 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FDFC +2504 +2504 +25FC +2504 +4904 +29FC +1000 +2888 +4484 +8102 +0202 +ENDCHAR +STARTCHAR uni36DE +ENCODING 14046 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1020 +FDFC +2420 +2420 +27FE +2488 +4888 +2BFE +1088 +2888 +4508 +8108 +0208 +ENDCHAR +STARTCHAR uni36DF +ENCODING 14047 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10F8 +1108 +FE10 +25FC +2524 +2524 +2524 +4924 +2BFE +1050 +2850 +4488 +8104 +0602 +ENDCHAR +STARTCHAR uni36E0 +ENCODING 14048 +BBX 15 16 0 -2 +BITMAP +2100 +20BE +2282 +2202 +FA02 +4AFA +4A8A +4A8A +4AFA +928A +528A +22FA +3202 +4A02 +4A0A +8204 +ENDCHAR +STARTCHAR uni36E1 +ENCODING 14049 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC04 +25F8 +2400 +2400 +27FE +4890 +2890 +1090 +2912 +4512 +820E +0400 +ENDCHAR +STARTCHAR uni36E2 +ENCODING 14050 +BBX 15 16 0 -2 +BITMAP +201C +21E0 +2020 +2020 +FBFE +48A8 +4924 +4A22 +89F8 +4888 +3090 +10BE +2902 +4902 +8214 +0408 +ENDCHAR +STARTCHAR uni36E3 +ENCODING 14051 +BBX 14 16 0 -2 +BITMAP +1000 +10F8 +1088 +1088 +FCF8 +2400 +25FC +2504 +2524 +4924 +2924 +1124 +2850 +4448 +8084 +0304 +ENDCHAR +STARTCHAR uni36E4 +ENCODING 14052 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2000 +2000 +FBDE +4A52 +4A52 +4A52 +4B5A +92D6 +5252 +2252 +3252 +4A52 +4A52 +82D6 +ENDCHAR +STARTCHAR uni36E5 +ENCODING 14053 +BBX 15 16 0 -2 +BITMAP +1020 +1022 +13B4 +10A8 +FCA8 +2524 +26A2 +2440 +25FC +4904 +2904 +11FC +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni36E6 +ENCODING 14054 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +2110 +2110 +F7BC +5110 +5110 +5338 +53B8 +9554 +5554 +2992 +2110 +5110 +5110 +8110 +ENDCHAR +STARTCHAR uni36E7 +ENCODING 14055 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +FDFC +2400 +2400 +27FE +2440 +4880 +28FC +1184 +2A84 +4484 +84FC +0084 +ENDCHAR +STARTCHAR uni36E8 +ENCODING 14056 +BBX 15 16 0 -2 +BITMAP +2108 +2088 +2090 +23FC +F840 +4840 +4BF8 +4840 +8840 +4FFE +30A0 +10A0 +2920 +4922 +8222 +041E +ENDCHAR +STARTCHAR uni36E9 +ENCODING 14057 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1080 +FD04 +27FE +2402 +25FC +2504 +49FC +2904 +11FC +2904 +4504 +8514 +0108 +ENDCHAR +STARTCHAR uni36EA +ENCODING 14058 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +13FE +1050 +FC88 +2524 +2622 +25FC +2524 +49FC +2924 +11FC +2822 +4422 +841E +ENDCHAR +STARTCHAR uni36EB +ENCODING 14059 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +1084 +FCFC +2484 +2484 +24FC +2440 +48FE +292A +124A +2892 +4522 +844A +0084 +ENDCHAR +STARTCHAR uni36EC +ENCODING 14060 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +21FC +2020 +F820 +4BFE +4888 +4904 +4A22 +9020 +51FC +2020 +3020 +4820 +4BFE +8000 +ENDCHAR +STARTCHAR uni36ED +ENCODING 14061 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +13FE +FC88 +2488 +27FE +2400 +25FC +4904 +2904 +11FC +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni36EE +ENCODING 14062 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1222 +FCA4 +2528 +2450 +2488 +2504 +48F8 +2888 +1088 +2850 +4420 +80D8 +0306 +ENDCHAR +STARTCHAR uni36EF +ENCODING 14063 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +2390 +24BC +F914 +57D4 +5554 +5554 +5554 +97D4 +52A4 +22AC +22C2 +5482 +547E +8800 +ENDCHAR +STARTCHAR uni36F0 +ENCODING 14064 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +11FC +FD10 +25FE +2510 +254A +2586 +4800 +29FC +1104 +29FC +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni36F1 +ENCODING 14065 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +FDFC +2524 +2524 +25FC +2400 +4BFE +2920 +1122 +2914 +4548 +8584 +0102 +ENDCHAR +STARTCHAR uni36F2 +ENCODING 14066 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1040 +FDFC +2504 +2504 +25FC +2504 +49FC +2904 +1104 +29FC +4400 +8488 +0104 +ENDCHAR +STARTCHAR uni36F3 +ENCODING 14067 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0820 +0440 +7FFC +4104 +1FF0 +1110 +1150 +1120 +0200 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni36F4 +ENCODING 14068 +BBX 15 16 0 -2 +BITMAP +2092 +2124 +2248 +2124 +F892 +4840 +4880 +4BFE +4A02 +928A +5252 +2222 +3252 +4A8A +4BFE +8202 +ENDCHAR +STARTCHAR uni36F5 +ENCODING 14069 +BBX 15 16 0 -2 +BITMAP +101E +13E0 +1044 +1124 +FC88 +2420 +25FC +2524 +2524 +49FC +2924 +1124 +2BFE +4504 +8514 +0108 +ENDCHAR +STARTCHAR uni36F6 +ENCODING 14070 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +FDFC +2480 +2480 +27FE +2490 +4910 +2952 +1254 +2AA8 +4428 +8844 +0082 +ENDCHAR +STARTCHAR uni36F7 +ENCODING 14071 +BBX 15 16 0 -2 +BITMAP +0C48 +7044 +13FE +FC50 +3050 +5892 +9492 +110E +1200 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni36F8 +ENCODING 14072 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FC20 +25FC +2400 +2400 +25FC +4904 +2904 +11FC +2800 +4488 +8450 +03FE +ENDCHAR +STARTCHAR uni36F9 +ENCODING 14073 +BBX 15 16 0 -2 +BITMAP +2100 +21FE +2110 +2210 +FAFE +4A92 +4E92 +4AFE +4A92 +9292 +52FE +2290 +3250 +4A20 +4A58 +8286 +ENDCHAR +STARTCHAR uni36FA +ENCODING 14074 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +FD04 +2488 +27FE +2400 +25FC +4904 +2904 +11FC +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni36FB +ENCODING 14075 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +23FE +2050 +F888 +4B26 +49FC +4820 +4820 +93FE +5000 +2020 +31FC +4820 +4820 +83FE +ENDCHAR +STARTCHAR uni36FC +ENCODING 14076 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FC20 +27FE +2420 +24A0 +252C +4924 +2924 +11AC +2924 +4524 +85FC +0104 +ENDCHAR +STARTCHAR uni36FD +ENCODING 14077 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2202 +F820 +4924 +48A8 +4820 +4BFE +9070 +50A8 +20A8 +3124 +4A22 +4820 +8020 +ENDCHAR +STARTCHAR uni36FE +ENCODING 14078 +BBX 15 16 0 -2 +BITMAP +2008 +200C +200A +23FE +FA08 +4A08 +4AE8 +4A0A +4A0A +92EC +52AC +22A8 +32EA +4A1A +4A26 +8442 +ENDCHAR +STARTCHAR uni36FF +ENCODING 14079 +BBX 15 16 0 -2 +BITMAP +20A8 +20A8 +23FE +20A8 +F8A8 +4800 +4BFE +4A22 +8820 +49FC +3124 +1124 +2934 +4928 +8020 +0020 +ENDCHAR +STARTCHAR uni3700 +ENCODING 14080 +BBX 14 16 0 -2 +BITMAP +2100 +2100 +213C +2124 +FBA4 +4924 +493C +4BA4 +4B64 +9524 +593C +2124 +3124 +4924 +493C +8124 +ENDCHAR +STARTCHAR uni3701 +ENCODING 14081 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +13FE +1070 +FCA8 +2524 +2622 +25FC +2504 +49FC +2904 +11FC +2904 +4400 +83FE +ENDCHAR +STARTCHAR uni3702 +ENCODING 14082 +BBX 15 16 0 -2 +BITMAP +0808 +7E08 +08FE +FE08 +0848 +7E28 +0808 +0F28 +F010 +0400 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni3703 +ENCODING 14083 +BBX 15 16 0 -2 +BITMAP +2090 +2088 +20FE +2100 +F900 +4B3C +4D00 +4900 +493C +9100 +5100 +213C +3124 +4924 +493C +8124 +ENDCHAR +STARTCHAR uni3704 +ENCODING 14084 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2404 +2434 +F5C4 +5444 +55F4 +5554 +5554 +95F4 +5444 +2454 +25F4 +5494 +5806 +9002 +ENDCHAR +STARTCHAR uni3705 +ENCODING 14085 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1040 +FC88 +25F0 +2420 +2444 +25FE +4802 +29FC +1124 +29FC +4524 +85FC +0104 +ENDCHAR +STARTCHAR uni3706 +ENCODING 14086 +BBX 15 15 0 -1 +BITMAP +2010 +2092 +2452 +2254 +FA10 +48FE +4810 +4E38 +8A54 +4A92 +3310 +1210 +2A10 +4500 +88FE +ENDCHAR +STARTCHAR uni3707 +ENCODING 14087 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +21FC +2020 +FBFE +4820 +49FC +4820 +8BFE +4800 +3040 +1024 +2AA2 +4A8A +8488 +0078 +ENDCHAR +STARTCHAR uni3708 +ENCODING 14088 +BBX 15 16 0 -2 +BITMAP +0020 +7E7C +14C4 +0838 +FEC6 +2A20 +48FC +A844 +128C +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni3709 +ENCODING 14089 +BBX 15 16 0 -2 +BITMAP +2124 +2248 +2248 +2124 +FBF8 +4A08 +4BF8 +4800 +4BF8 +9248 +5248 +23F8 +3202 +4A02 +49FE +8000 +ENDCHAR +STARTCHAR uni370A +ENCODING 14090 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2204 +2204 +FBFC +4A48 +4A48 +4AFC +8A48 +4A48 +33FE +12A4 +2AA8 +4490 +84C8 +0886 +ENDCHAR +STARTCHAR uni370B +ENCODING 14091 +BBX 15 15 0 -1 +BITMAP +2104 +2084 +2088 +2000 +FBFE +4800 +4888 +4904 +8A02 +49FC +3154 +1154 +2954 +4954 +87FE +ENDCHAR +STARTCHAR uni370C +ENCODING 14092 +BBX 15 16 0 -2 +BITMAP +1000 +1078 +FE48 +1048 +7C48 +0086 +FE00 +82FC +7C44 +1044 +FC28 +2428 +6810 +3028 +4844 +8582 +ENDCHAR +STARTCHAR uni370D +ENCODING 14093 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +1110 +FD7C +2514 +25FE +2514 +257C +4910 +297C +1144 +2944 +4644 +827C +0444 +ENDCHAR +STARTCHAR uni370E +ENCODING 14094 +BBX 15 16 0 -2 +BITMAP +101E +13E0 +1122 +1094 +FC40 +2488 +25F0 +2420 +24C4 +49FE +2822 +1020 +2BFE +4450 +8488 +0306 +ENDCHAR +STARTCHAR uni370F +ENCODING 14095 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +1084 +FCFC +2400 +25FE +2502 +25FE +4902 +29FE +1102 +29FE +4448 +8484 +0102 +ENDCHAR +STARTCHAR uni3710 +ENCODING 14096 +BBX 15 15 0 -1 +BITMAP +1020 +1124 +1124 +1124 +FDFC +2400 +27FE +2400 +25FC +4904 +2904 +11FC +2888 +4450 +83FE +ENDCHAR +STARTCHAR uni3711 +ENCODING 14097 +BBX 15 16 0 -2 +BITMAP +4048 +2FFE +0040 +87FC +5444 +17FC +E444 +27FC +2444 +2000 +0200 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni3712 +ENCODING 14098 +BBX 15 16 0 -2 +BITMAP +1040 +119C +1104 +1104 +FDDC +2504 +2504 +25FC +2488 +4888 +2BFE +1088 +2888 +4488 +8508 +0208 +ENDCHAR +STARTCHAR uni3713 +ENCODING 14099 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC20 +2450 +2488 +2504 +26FA +4800 +2800 +11FC +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni3714 +ENCODING 14100 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +13FC +1108 +FC90 +27FE +2400 +25F8 +2508 +4908 +29F8 +1090 +2890 +4512 +8212 +040E +ENDCHAR +STARTCHAR uni3715 +ENCODING 14101 +BBX 15 15 0 -1 +BITMAP +2010 +2010 +22FE +2110 +F97C +4854 +487C +4B54 +897C +4910 +31FE +1110 +2910 +4A90 +847E +ENDCHAR +STARTCHAR uni3716 +ENCODING 14102 +BBX 15 16 0 -2 +BITMAP +2090 +2090 +27FE +2090 +FBFC +4A94 +4BFC +4A94 +4BFC +9000 +51F8 +2108 +31F8 +4908 +49F8 +8108 +ENDCHAR +STARTCHAR uni3717 +ENCODING 14103 +BBX 15 16 0 -2 +BITMAP +2040 +2088 +21FC +2108 +FA52 +4BFE +4850 +4988 +4E26 +90C0 +5310 +2064 +3388 +4830 +48C0 +8700 +ENDCHAR +STARTCHAR uni3718 +ENCODING 14104 +BBX 15 16 0 -2 +BITMAP +1020 +103C +1020 +11FE +FD22 +2538 +25E4 +251C +2500 +497C +2944 +117C +2944 +457C +8544 +02FE +ENDCHAR +STARTCHAR uni3719 +ENCODING 14105 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2250 +FA50 +4BFE +4A52 +4A52 +8BFE +4A00 +3292 +12D4 +2A98 +4492 +84D2 +088E +ENDCHAR +STARTCHAR uni371A +ENCODING 14106 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2402 +F900 +49FE +4A10 +4E20 +4A7C +9244 +5244 +227C +3244 +4A44 +4A7C +8244 +ENDCHAR +STARTCHAR uni371B +ENCODING 14107 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +2108 +27C8 +F11E +57D2 +5564 +57C0 +5548 +97C8 +5108 +27C8 +2114 +5114 +5124 +8142 +ENDCHAR +STARTCHAR uni371C +ENCODING 14108 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +2108 +27D0 +F11E +5794 +5124 +5FD4 +5214 +93D4 +5254 +2248 +2248 +54D4 +5424 +8842 +ENDCHAR +STARTCHAR uni371D +ENCODING 14109 +BBX 15 16 0 -2 +BITMAP +2020 +2050 +2088 +2124 +FAFA +4810 +4820 +4BFE +4850 +91FC +5154 +218C +3104 +49FC +4904 +81FC +ENDCHAR +STARTCHAR uni371E +ENCODING 14110 +BBX 15 16 0 -2 +BITMAP +0804 +7F78 +0840 +7F40 +497E +7F48 +4948 +7F48 +0848 +7F48 +0A88 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni371F +ENCODING 14111 +BBX 15 16 0 -2 +BITMAP +2008 +2388 +2088 +2110 +F7DE +5294 +52A4 +5394 +5294 +9394 +5294 +22C8 +2388 +5694 +50A4 +80C2 +ENDCHAR +STARTCHAR uni3720 +ENCODING 14112 +BBX 15 16 0 -2 +BITMAP +1020 +1222 +13FE +1090 +FC88 +25FE +2710 +2510 +25FE +4910 +2910 +11FE +2910 +4510 +85FE +0100 +ENDCHAR +STARTCHAR uni3721 +ENCODING 14113 +BBX 15 16 0 -2 +BITMAP +2124 +2124 +2224 +2424 +F954 +494A +4A92 +4E10 +4A10 +9250 +525C +2250 +3250 +4AB0 +4A9E +8300 +ENDCHAR +STARTCHAR uni3722 +ENCODING 14114 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1124 +13FE +FD24 +25FC +2420 +25FC +2524 +49FC +2840 +13FE +2888 +45D0 +8470 +038C +ENDCHAR +STARTCHAR uni3723 +ENCODING 14115 +BBX 15 16 0 -2 +BITMAP +2110 +2114 +21D2 +2250 +FA7E +4D50 +4890 +4AA8 +4928 +9144 +5244 +2482 +3008 +4AA4 +4A52 +8452 +ENDCHAR +STARTCHAR uni3724 +ENCODING 14116 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2050 +23FE +FA52 +4BFE +4800 +49FC +4904 +91FC +5104 +21FC +3020 +4BFE +4820 +8020 +ENDCHAR +STARTCHAR uni3725 +ENCODING 14117 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2252 +2252 +FBFE +4800 +49FC +4904 +49FC +9104 +51FC +2104 +31FC +4888 +4904 +8202 +ENDCHAR +STARTCHAR uni3726 +ENCODING 14118 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2004 +23FC +F804 +4BFC +4800 +4BBC +4924 +97BC +5008 +23FE +3108 +4888 +48A8 +8010 +ENDCHAR +STARTCHAR uni3727 +ENCODING 14119 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2400 +2628 +F548 +57EE +5492 +5484 +56A0 +96A8 +57E8 +2488 +2494 +5514 +5924 +9242 +ENDCHAR +STARTCHAR uni3728 +ENCODING 14120 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +23FE +FA10 +4A54 +4A38 +4A54 +8A82 +4A50 +327C +1290 +2A10 +45FE +8410 +0810 +ENDCHAR +STARTCHAR uni3729 +ENCODING 14121 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +23FE +2222 +FAAA +4A22 +4BFE +4A72 +4AAA +9202 +5020 +23FE +3020 +4850 +4888 +8306 +ENDCHAR +STARTCHAR uni372A +ENCODING 14122 +BBX 15 16 0 -2 +BITMAP +0804 +7F78 +2240 +FF40 +087E +7F48 +2A48 +4948 +A888 +1400 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni372B +ENCODING 14123 +BBX 15 16 0 -2 +BITMAP +2288 +22A8 +26A8 +2BF0 +F01E +5224 +55D4 +5C14 +5414 +95D4 +5554 +2548 +2568 +5554 +5614 +8422 +ENDCHAR +STARTCHAR uni372C +ENCODING 14124 +BBX 15 16 0 -2 +BITMAP +2100 +21F8 +2208 +27FE +FA88 +4B24 +4BFE +4A00 +8AFC +4A00 +32FC +1200 +2AFC +4484 +84FC +0884 +ENDCHAR +STARTCHAR uni372D +ENCODING 14125 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +10A8 +13FE +FE02 +24F8 +2488 +2488 +24F8 +4800 +29FC +1124 +29FC +4524 +85FC +0104 +ENDCHAR +STARTCHAR uni372E +ENCODING 14126 +BBX 15 15 0 -1 +BITMAP +2008 +23E8 +2288 +23EE +FA28 +4BF4 +4A82 +4BE2 +8800 +49FC +3154 +1154 +2954 +4954 +87FE +ENDCHAR +STARTCHAR uni372F +ENCODING 14127 +BBX 15 16 0 -2 +BITMAP +2000 +27DE +2492 +2492 +F5D2 +555E +5550 +55D0 +5492 +9492 +57CE +2000 +2000 +5524 +5492 +8892 +ENDCHAR +STARTCHAR uni3730 +ENCODING 14128 +BBX 15 16 0 -2 +BITMAP +2124 +2174 +2258 +22DA +FBFE +4954 +4ADA +4BFE +88A2 +4820 +33FE +1070 +28A8 +4924 +8222 +0020 +ENDCHAR +STARTCHAR uni3731 +ENCODING 14129 +BBX 15 16 0 -2 +BITMAP +2042 +239C +2210 +23DE +FA94 +4A94 +4C20 +4BFC +4A04 +93FC +5204 +23FC +3204 +4BFC +4908 +8204 +ENDCHAR +STARTCHAR uni3732 +ENCODING 14130 +BBX 15 16 0 -2 +BITMAP +2040 +2FFE +2400 +27FC +F000 +57FC +5404 +57FC +5080 +9C9C +57D4 +3D54 +355C +5C96 +5556 +AE22 +ENDCHAR +STARTCHAR uni3733 +ENCODING 14131 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +2000 +FBF8 +4AA8 +4BF8 +4840 +4A44 +9118 +5244 +20A8 +3190 +4A88 +4CA6 +80C0 +ENDCHAR +STARTCHAR uni3734 +ENCODING 14132 +BBX 15 16 0 -2 +BITMAP +2108 +27FE +2108 +23FC +FA94 +4BFC +4800 +4FFE +4C02 +91F8 +5108 +21F8 +3108 +49F8 +4908 +81F8 +ENDCHAR +STARTCHAR uni3735 +ENCODING 14133 +BBX 15 16 0 -2 +BITMAP +2040 +27FE +2000 +23FC +FA40 +4BF8 +4A40 +4BF8 +4A40 +93FC +5004 +2554 +30A8 +4B10 +4D48 +8186 +ENDCHAR +STARTCHAR uni3736 +ENCODING 14134 +BBX 15 16 0 -2 +BITMAP +21F0 +2210 +27FC +2204 +FBFC +4A24 +4BB8 +4A22 +49FE +9210 +57FC +2244 +33FC +48D0 +494A +863E +ENDCHAR +STARTCHAR uni3737 +ENCODING 14135 +BBX 15 16 0 -2 +BITMAP +F7FC +1248 +17FC +FC46 +86EC +F554 +16EC +1554 +56EC +2444 +0200 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni3738 +ENCODING 14136 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +2820 +7DFC +4488 +7C50 +41FE +7C20 +45FC +7C20 +0200 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni3739 +ENCODING 14137 +BBX 15 16 0 -2 +BITMAP +23DE +2252 +23DE +2252 +FBDE +4A52 +4BDE +4890 +49FE +9110 +53FE +2510 +31FE +4910 +49FE +8100 +ENDCHAR +STARTCHAR uni373A +ENCODING 14138 +BBX 15 16 0 -2 +BITMAP +2528 +27BE +2948 +27BE +FB18 +4DAA +4946 +4BFC +4A04 +93FC +5204 +23FC +3204 +4BFC +4908 +8204 +ENDCHAR +STARTCHAR uni373B +ENCODING 14139 +BBX 15 16 0 -2 +BITMAP +2444 +24E4 +2A0A +2EEE +F404 +5AEA +5E0E +50E0 +5AAA +9AEA +5040 +2024 +2522 +550A +5908 +80F8 +ENDCHAR +STARTCHAR uni373C +ENCODING 14140 +BBX 15 16 0 -2 +BITMAP +21FC +2124 +21FC +2124 +FBFE +4AAA +4BFE +4AAA +4BFE +9000 +53FE +228A +30F8 +4888 +4888 +83FE +ENDCHAR +STARTCHAR uni373D +ENCODING 14141 +BBX 15 16 0 -2 +BITMAP +0888 +1110 +2220 +1110 +0888 +0000 +1FE0 +0040 +0080 +0100 +FFFE +0100 +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni373E +ENCODING 14142 +BBX 15 16 0 -2 +BITMAP +0020 +FC20 +0450 +0850 +1088 +1104 +1602 +1888 +3088 +D088 +1088 +1088 +1088 +1108 +5108 +2208 +ENDCHAR +STARTCHAR uni373F +ENCODING 14143 +BBX 15 15 0 -2 +BITMAP +FDF8 +0408 +0850 +1020 +1010 +15FE +1822 +3024 +D020 +1020 +1020 +1020 +1020 +50A0 +2040 +ENDCHAR +STARTCHAR uni3740 +ENCODING 14144 +BBX 15 15 0 -2 +BITMAP +3E7C +2204 +2A08 +2608 +2210 +2210 +FF7E +4210 +5210 +4A10 +4210 +7F90 +0210 +1450 +0820 +ENDCHAR +STARTCHAR uni3741 +ENCODING 14145 +BBX 15 16 0 -2 +BITMAP +1000 +1FF8 +2008 +5FC8 +9048 +1FC8 +1048 +1FE8 +0010 +3FE0 +0080 +0100 +FFFE +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni3742 +ENCODING 14146 +BBX 15 16 0 -2 +BITMAP +0104 +FD0E +0530 +0920 +17E0 +1120 +153E +1964 +31A4 +D724 +1124 +1124 +1124 +1124 +5544 +2284 +ENDCHAR +STARTCHAR uni3743 +ENCODING 14147 +BBX 15 16 0 -2 +BITMAP +0080 +FC80 +04F8 +0908 +1210 +11FC +1524 +1924 +3124 +D1FC +1050 +1050 +1090 +1092 +5112 +220E +ENDCHAR +STARTCHAR uni3744 +ENCODING 14148 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +FE20 +01FC +7C20 +44A8 +7CA8 +00A8 +7CA8 +04A8 +08F8 +1E22 +F022 +1022 +501E +2000 +ENDCHAR +STARTCHAR uni3745 +ENCODING 14149 +BBX 15 16 0 -2 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FE86 +8200 +7CFC +0044 +7C44 +0828 +1E28 +F010 +1028 +5044 +2182 +ENDCHAR +STARTCHAR uni3746 +ENCODING 14150 +BBX 15 16 0 -2 +BITMAP +0020 +FDFE +0420 +09FC +1000 +11FC +1504 +19FC +3088 +D3FE +1000 +11FC +1104 +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni3747 +ENCODING 14151 +BBX 15 16 0 -2 +BITMAP +2020 +1010 +FEFE +0000 +7C7C +4444 +7C7C +0000 +7C7C +0808 +1010 +1EFE +F010 +1010 +5050 +2020 +ENDCHAR +STARTCHAR uni3748 +ENCODING 14152 +BBX 15 16 0 -2 +BITMAP +2104 +47C8 +8812 +F3BC +2008 +4B92 +F83E +0380 +AAAA +ABAA +0000 +7C7C +0808 +FEFE +1010 +3030 +ENDCHAR +STARTCHAR uni3749 +ENCODING 14153 +BBX 15 13 0 1 +BITMAP +0200 +0100 +0100 +7FFE +4002 +8004 +0000 +0000 +0000 +0000 +0000 +0000 +7FFC +ENDCHAR +STARTCHAR uni374A +ENCODING 14154 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +0100 +7FFE +4002 +8004 +0000 +3FF0 +1010 +0820 +0440 +0280 +0100 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni374B +ENCODING 14155 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +0100 +7FFE +4002 +8004 +1FE0 +0040 +0080 +0100 +0100 +0100 +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni374C +ENCODING 14156 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +0100 +7FFE +4202 +8204 +07E0 +0420 +0840 +1040 +0080 +0180 +0240 +0420 +1810 +600C +ENDCHAR +STARTCHAR uni374D +ENCODING 14157 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +5002 +9004 +1FF8 +1000 +2000 +3FF8 +0008 +0008 +FFC8 +0008 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni374E +ENCODING 14158 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +7FFE +4002 +8204 +0100 +0100 +7FF8 +0030 +00C0 +0300 +0C00 +3000 +4800 +87FE +ENDCHAR +STARTCHAR uni374F +ENCODING 14159 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8104 +0280 +0440 +0820 +3458 +C446 +0440 +0440 +0840 +0840 +1040 +2040 +ENDCHAR +STARTCHAR uni3750 +ENCODING 14160 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +0100 +7FFE +4082 +8484 +0440 +0840 +1020 +2210 +4208 +8406 +0840 +1020 +3FF0 +1010 +ENDCHAR +STARTCHAR uni3751 +ENCODING 14161 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8204 +0100 +7FFC +0400 +0400 +07F0 +0410 +0810 +0810 +1010 +20A0 +4040 +ENDCHAR +STARTCHAR uni3752 +ENCODING 14162 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +0100 +7FFE +4002 +8104 +0100 +7FFC +0100 +0100 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3753 +ENCODING 14163 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8104 +0280 +0C60 +3018 +CFE6 +0000 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3754 +ENCODING 14164 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8204 +0100 +7FFC +0820 +1010 +2448 +4444 +0280 +0100 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni3755 +ENCODING 14165 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4202 +8104 +0900 +2828 +2824 +47E4 +0000 +3FF0 +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni3756 +ENCODING 14166 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4202 +87E4 +1840 +6480 +0320 +0C40 +71F8 +0608 +1A10 +0120 +00C0 +0700 +7800 +ENDCHAR +STARTCHAR uni3757 +ENCODING 14167 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4202 +8104 +1FF0 +1010 +1FF0 +1010 +1FF0 +1104 +1088 +1050 +1220 +1418 +1806 +ENDCHAR +STARTCHAR uni3758 +ENCODING 14168 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4202 +8104 +3FF8 +0000 +1FF0 +0000 +1FF0 +0000 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3759 +ENCODING 14169 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8004 +3FF8 +0100 +1FF0 +0100 +7FFC +0000 +FFFE +0000 +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni375A +ENCODING 14170 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +801C +7BE0 +0840 +1040 +2278 +7A40 +0A40 +2BFC +1000 +2800 +47FE +8000 +ENDCHAR +STARTCHAR uni375B +ENCODING 14171 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8804 +0FFC +1040 +3040 +53F8 +9248 +1248 +12A8 +1318 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni375C +ENCODING 14172 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4442 +8444 +3FF8 +0440 +0440 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni375D +ENCODING 14173 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8824 +0820 +0820 +7EFC +0820 +1C30 +1A70 +2A68 +48A4 +8922 +0820 +0820 +ENDCHAR +STARTCHAR uni375E +ENCODING 14174 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +7FFE +4002 +8004 +7FFC +0440 +0440 +3C78 +2008 +2008 +3C78 +0440 +0440 +FFFE +ENDCHAR +STARTCHAR uni375F +ENCODING 14175 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +BFFC +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0442 +1842 +E03E +ENDCHAR +STARTCHAR uni3760 +ENCODING 14176 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +9FF4 +1010 +1FF0 +1010 +1FF0 +1210 +0100 +FFFE +0000 +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni3761 +ENCODING 14177 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +0000 +7F00 +227C +3E04 +2244 +3E44 +2228 +2210 +3E28 +E2C6 +0200 +ENDCHAR +STARTCHAR uni3762 +ENCODING 14178 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +BFE8 +0200 +3FE0 +2220 +3FE0 +0200 +7FF0 +4290 +43D0 +5E50 +4030 +ENDCHAR +STARTCHAR uni3763 +ENCODING 14179 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8804 +7F7C +0824 +3E24 +0844 +7F54 +0888 +0200 +FFFE +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3764 +ENCODING 14180 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +BFFC +0820 +3FF8 +0820 +FFFE +0100 +3FF8 +2108 +3FF8 +2108 +FFFE +2008 +2018 +ENDCHAR +STARTCHAR uni3765 +ENCODING 14181 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8424 +2420 +2524 +24A8 +3C20 +07FE +0470 +FCA8 +2524 +2622 +2420 +4420 +ENDCHAR +STARTCHAR uni3766 +ENCODING 14182 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4902 +9FFC +3100 +5FF0 +9100 +1FF0 +1100 +1FF8 +1000 +3FE0 +0840 +08F8 +1008 +6030 +ENDCHAR +STARTCHAR uni3767 +ENCODING 14183 +BBX 15 15 0 -1 +BITMAP +0100 +7FFE +4402 +BFFC +0820 +07C0 +7838 +1110 +1110 +2928 +4544 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni3768 +ENCODING 14184 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4102 +9FF4 +0100 +7FFC +0000 +1FF0 +1010 +1FF0 +0488 +0850 +3820 +CB18 +0C06 +ENDCHAR +STARTCHAR uni3769 +ENCODING 14185 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4002 +8104 +3FF8 +2080 +2FF8 +2088 +3FFE +2088 +2FF8 +24C4 +22A8 +4498 +5886 +8180 +ENDCHAR +STARTCHAR uni376A +ENCODING 14186 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +9044 +1040 +7C40 +11F8 +FE48 +4448 +28C8 +7C48 +10AA +FEAA +1106 +1202 +ENDCHAR +STARTCHAR uni376B +ENCODING 14187 +BBX 14 15 2 -1 +BITMAP +0200 +FFF8 +8008 +0100 +F1F8 +9720 +90C0 +A330 +ADEC +9240 +93F0 +9440 +A3F0 +8040 +87F8 +ENDCHAR +STARTCHAR uni376C +ENCODING 14188 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FE20 +83FC +9220 +7C20 +1020 +7C20 +13FE +FC20 +1050 +7C50 +4488 +4504 +7E02 +ENDCHAR +STARTCHAR uni376D +ENCODING 14189 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4002 +9004 +13F8 +1208 +5BF8 +5608 +53F8 +9140 +13F8 +1440 +11F0 +1040 +17FC +1000 +ENDCHAR +STARTCHAR uni376E +ENCODING 14190 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4002 +8804 +2A00 +3E7C +4944 +7F44 +0044 +3E28 +0028 +7F10 +0810 +2A28 +4944 +1882 +ENDCHAR +STARTCHAR uni376F +ENCODING 14191 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8074 +1F80 +0200 +FFFE +0820 +37D8 +C446 +3FF8 +2008 +27C8 +2448 +27D8 +ENDCHAR +STARTCHAR uni3770 +ENCODING 14192 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4202 +9FF4 +1490 +1250 +1130 +1FF0 +0100 +FFFE +9212 +2FE8 +4404 +07E0 +0820 +3060 +ENDCHAR +STARTCHAR uni3771 +ENCODING 14193 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +408A +8BFC +4888 +49FC +4954 +79FC +0800 +0BFE +FA42 +4878 +4888 +4950 +8860 +0980 +ENDCHAR +STARTCHAR uni3772 +ENCODING 14194 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4112 +97FC +5110 +53F8 +52A8 +77FC +1414 +11F0 +F010 +57FC +5444 +53F8 +9248 +1258 +ENDCHAR +STARTCHAR uni3773 +ENCODING 14195 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +0200 +0200 +FFFC +0200 +0200 +1290 +1248 +1224 +2224 +2212 +4212 +8200 +0A00 +0400 +ENDCHAR +STARTCHAR uni3774 +ENCODING 14196 +BBX 15 16 0 -2 +BITMAP +0008 +7C08 +0008 +01FE +0008 +FE08 +2488 +2448 +2448 +2408 +2408 +2428 +2412 +4402 +43FE +8000 +ENDCHAR +STARTCHAR uni3775 +ENCODING 14197 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0000 +7FFC +0020 +FFFE +0420 +0220 +0220 +00E0 +ENDCHAR +STARTCHAR uni3776 +ENCODING 14198 +BBX 15 16 0 -2 +BITMAP +3FF8 +2448 +2448 +3FF8 +0000 +0440 +0442 +0842 +303E +C000 +0020 +FFFE +0820 +0420 +04A0 +0040 +ENDCHAR +STARTCHAR uni3777 +ENCODING 14199 +BBX 15 16 0 -2 +BITMAP +3FF0 +0010 +1FF0 +0010 +3FF0 +0040 +7DF0 +1150 +1C94 +E14C +0020 +FFFE +0820 +0420 +04A0 +0040 +ENDCHAR +STARTCHAR uni3778 +ENCODING 14200 +BBX 14 16 1 -2 +BITMAP +0200 +2220 +4210 +8A08 +1000 +7FF0 +4010 +4010 +7FF0 +4010 +4010 +7FF0 +0880 +1084 +2084 +C07C +ENDCHAR +STARTCHAR uni3779 +ENCODING 14201 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +2168 +4384 +1C00 +E800 +1FE0 +2020 +4040 +BFF8 +2108 +2108 +3FF8 +0492 +188A +E07E +ENDCHAR +STARTCHAR uni377A +ENCODING 14202 +BBX 15 16 0 -2 +BITMAP +2210 +1410 +FF90 +1410 +1414 +7F52 +1552 +FF92 +1510 +7F14 +1404 +3608 +5510 +94A0 +1440 +1580 +ENDCHAR +STARTCHAR uni377B +ENCODING 14203 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +FF90 +2210 +3E54 +0852 +7F52 +4990 +7F10 +0814 +7F04 +0808 +7F08 +0810 +0F20 +F0C0 +ENDCHAR +STARTCHAR uni377C +ENCODING 14204 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2020 +2020 +FC20 +2820 +2BFE +2820 +2820 +2820 +2820 +28A0 +2842 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni377D +ENCODING 14205 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2020 +2024 +FDA8 +28B0 +28B0 +2928 +2924 +2A24 +28A0 +2840 +2802 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni377E +ENCODING 14206 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +2040 +23FC +FC80 +2880 +28F8 +2920 +2920 +2A20 +2820 +29FC +2802 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni377F +ENCODING 14207 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +21FC +2124 +FD28 +2920 +29F8 +2908 +2950 +2920 +2A50 +2A88 +2D0A +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni3780 +ENCODING 14208 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +2040 +23FE +FC80 +2890 +2912 +2954 +2A90 +2C28 +2824 +2844 +2982 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni3781 +ENCODING 14209 +BBX 15 16 0 -2 +BITMAP +2000 +21F8 +2108 +21F8 +FD08 +29F8 +2800 +2918 +29E0 +2904 +2904 +28FC +2802 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni3782 +ENCODING 14210 +BBX 15 16 0 -2 +BITMAP +201C +21E0 +2044 +2124 +FC88 +2820 +2820 +2BFE +2848 +28C8 +2830 +2868 +2986 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni3783 +ENCODING 14211 +BBX 15 16 0 -2 +BITMAP +2840 +2448 +4244 +9244 +1040 +29FE +4450 +8250 +7C50 +4450 +4450 +4452 +4452 +7C92 +448E +0100 +ENDCHAR +STARTCHAR uni3784 +ENCODING 14212 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +23FC +20A0 +FD10 +2A48 +2DF4 +2950 +29F0 +2950 +29F4 +2844 +283E +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni3785 +ENCODING 14213 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2124 +21FC +FD24 +29FC +2820 +29FE +2870 +28A8 +2924 +2A20 +2822 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni3786 +ENCODING 14214 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +21FC +2050 +FC88 +2BFE +2808 +29E8 +2928 +2928 +29E8 +2928 +2808 +481A +4802 +87FE +ENDCHAR +STARTCHAR uni3787 +ENCODING 14215 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2124 +21FC +FD24 +29FC +2800 +2BFE +2922 +2914 +2948 +2984 +2902 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni3788 +ENCODING 14216 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +21FC +2104 +FD04 +29FC +2900 +29FC +2B54 +2B54 +2DFC +2954 +2954 +490E +4802 +87FE +ENDCHAR +STARTCHAR uni3789 +ENCODING 14217 +BBX 15 16 0 -2 +BITMAP +2088 +2050 +23FE +2020 +FDFC +2840 +2BFE +2880 +29FC +2A20 +2C20 +2BFE +2802 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni378A +ENCODING 14218 +BBX 15 16 0 -2 +BITMAP +1040 +5440 +5440 +7C40 +92FC +9250 +FE50 +0050 +7C50 +0050 +FE50 +1052 +5492 +9292 +510E +2200 +ENDCHAR +STARTCHAR uni378B +ENCODING 14219 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2000 +2000 +2FF8 +2408 +2410 +2220 +2140 +2080 +4140 +4630 +980E +ENDCHAR +STARTCHAR uni378C +ENCODING 14220 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2000 +27F8 +2010 +2020 +2040 +2FFE +2040 +2040 +4040 +4140 +8080 +ENDCHAR +STARTCHAR uni378D +ENCODING 14221 +BBX 14 14 1 -1 +BITMAP +7FF8 +4008 +4008 +7FF8 +4200 +4200 +5FE0 +4220 +4220 +5220 +4C20 +8624 +8924 +301C +ENDCHAR +STARTCHAR uni378E +ENCODING 14222 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2000 +2FF8 +2888 +2888 +2888 +2FF8 +2800 +2802 +4802 +4802 +87FE +ENDCHAR +STARTCHAR uni378F +ENCODING 14223 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2000 +2078 +2780 +2080 +2040 +2FF8 +2010 +2060 +4180 +4600 +99FE +ENDCHAR +STARTCHAR uni3790 +ENCODING 14224 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2000 +2080 +2040 +2FFC +2000 +2408 +2210 +2120 +4000 +5FFE +8000 +ENDCHAR +STARTCHAR uni3791 +ENCODING 14225 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2000 +2888 +2490 +22A0 +2080 +22A0 +2492 +288A +4082 +407E +8000 +ENDCHAR +STARTCHAR uni3792 +ENCODING 14226 +BBX 14 15 0 -2 +BITMAP +3FFC +2004 +3FFC +2100 +2200 +2FF8 +2808 +2808 +2FF8 +2808 +2808 +4FF8 +4808 +8808 +0FF8 +ENDCHAR +STARTCHAR uni3793 +ENCODING 14227 +BBX 14 15 0 -2 +BITMAP +3FFC +2004 +3FFC +2000 +2860 +2F88 +2808 +27F8 +2000 +2FF8 +2808 +4FF8 +4808 +8FF8 +0808 +ENDCHAR +STARTCHAR uni3794 +ENCODING 14228 +BBX 14 15 0 -2 +BITMAP +3FFC +2004 +3FFC +2100 +23F0 +2C20 +2240 +2180 +2240 +2CF8 +2108 +4690 +4060 +8180 +0E00 +ENDCHAR +STARTCHAR uni3795 +ENCODING 14229 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +3FFC +2220 +2410 +2808 +37F6 +2410 +27F0 +2410 +27F0 +4410 +4410 +8450 +0420 +ENDCHAR +STARTCHAR uni3796 +ENCODING 14230 +BBX 14 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2080 +3FFC +2080 +2FF8 +2888 +28A8 +29D0 +22A0 +4490 +588C +8080 +ENDCHAR +STARTCHAR uni3797 +ENCODING 14231 +BBX 14 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2090 +2088 +2FFC +2080 +2888 +25D0 +22A0 +2490 +488C +4280 +8100 +ENDCHAR +STARTCHAR uni3798 +ENCODING 14232 +BBX 14 16 0 -2 +BITMAP +3FFC +2004 +3FFC +2000 +2FFC +2100 +2308 +2488 +2D50 +2260 +25E0 +2950 +4250 +4448 +9944 +0080 +ENDCHAR +STARTCHAR uni3799 +ENCODING 14233 +BBX 15 16 0 -2 +BITMAP +3FFC +2004 +3FFC +2000 +20F0 +3F00 +21E0 +2F00 +21F4 +3F04 +20FC +2088 +4ED0 +42A0 +8498 +1986 +ENDCHAR +STARTCHAR uni379A +ENCODING 14234 +BBX 15 16 0 -2 +BITMAP +3FFC +2004 +3FFC +2000 +2038 +27C0 +2040 +2FFE +2040 +2140 +265C +2444 +475C +4444 +87FC +0404 +ENDCHAR +STARTCHAR uni379B +ENCODING 14235 +BBX 14 15 0 -2 +BITMAP +3FFC +2004 +3FFC +2288 +2490 +28E4 +3284 +247C +2C00 +34FC +2484 +44FC +4484 +84FC +0484 +ENDCHAR +STARTCHAR uni379C +ENCODING 14236 +BBX 15 16 0 -2 +BITMAP +3FFC +2004 +3FFC +220C +2470 +2810 +30FE +2238 +2454 +2C92 +3420 +25FE +4444 +44C8 +8438 +05C6 +ENDCHAR +STARTCHAR uni379D +ENCODING 14237 +BBX 15 16 0 -2 +BITMAP +0024 +3FFE +2220 +23A4 +2224 +3FA8 +2B10 +529A +4626 +8042 +1FF8 +1008 +1FF8 +1000 +2000 +4000 +ENDCHAR +STARTCHAR uni379E +ENCODING 14238 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +3FFC +2448 +2848 +3054 +22A4 +2500 +2C10 +3490 +249C +4490 +4550 +863E +0400 +ENDCHAR +STARTCHAR uni379F +ENCODING 14239 +BBX 14 16 0 -2 +BITMAP +3FFC +2004 +3FFC +2220 +2FF8 +2140 +2FF8 +2A28 +2DD8 +2808 +2FF8 +2080 +5FFC +4140 +8630 +180C +ENDCHAR +STARTCHAR uni37A0 +ENCODING 14240 +BBX 14 16 0 -2 +BITMAP +3FFC +2004 +3FFC +2080 +2FF8 +2140 +2A28 +27F0 +2C18 +37F4 +2410 +27F0 +4080 +4888 +9284 +0100 +ENDCHAR +STARTCHAR uni37A1 +ENCODING 14241 +BBX 15 16 0 -2 +BITMAP +3FFC +2004 +3FFC +2000 +2738 +2210 +2F7C +2000 +2738 +2210 +23BC +2EC8 +4130 +4310 +8D48 +0186 +ENDCHAR +STARTCHAR uni37A2 +ENCODING 14242 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +2108 +2108 +2108 +2108 +2108 +2108 +3FF8 +0100 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni37A3 +ENCODING 14243 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0100 +0540 +0820 +3018 +DFF6 +0210 +0210 +0210 +0410 +08A0 +1040 +ENDCHAR +STARTCHAR uni37A4 +ENCODING 14244 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +2108 +2108 +2108 +3FF8 +0000 +0100 +0100 +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni37A5 +ENCODING 14245 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0000 +0600 +0100 +0100 +0280 +0280 +0440 +0820 +1010 +2008 +C006 +ENDCHAR +STARTCHAR uni37A6 +ENCODING 14246 +BBX 14 16 1 -2 +BITMAP +2000 +21E0 +2120 +2120 +A920 +A920 +A920 +A920 +A920 +A920 +A920 +B924 +C924 +0224 +021C +0400 +ENDCHAR +STARTCHAR uni37A7 +ENCODING 14247 +BBX 14 16 0 -2 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0000 +0000 +3FF0 +0410 +0420 +087C +0804 +1004 +2004 +4028 +8010 +ENDCHAR +STARTCHAR uni37A8 +ENCODING 14248 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2008 +2010 +A820 +A840 +A840 +AFFC +A840 +A840 +A840 +B840 +C840 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni37A9 +ENCODING 14249 +BBX 14 16 1 -2 +BITMAP +0200 +4210 +4210 +7FF0 +0000 +0000 +1FC0 +1040 +1040 +1440 +1240 +1244 +2044 +2044 +403C +8000 +ENDCHAR +STARTCHAR uni37AA +ENCODING 14250 +BBX 15 15 0 -2 +BITMAP +3FF0 +0010 +0010 +1FF0 +0010 +0010 +FFFE +0100 +0100 +2108 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni37AB +ENCODING 14251 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0200 +0100 +0100 +7FF8 +0030 +00C0 +0300 +0C00 +3000 +4800 +87FE +ENDCHAR +STARTCHAR uni37AC +ENCODING 14252 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +2108 +2108 +2108 +3FF8 +0000 +0000 +3FF8 +0100 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni37AD +ENCODING 14253 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +0280 +0440 +0820 +3018 +C106 +0100 +2108 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni37AE +ENCODING 14254 +BBX 12 16 1 -2 +BITMAP +0200 +4210 +4210 +4210 +7FF0 +1000 +1000 +3FF0 +2010 +4020 +8040 +0080 +1900 +0600 +0100 +0080 +ENDCHAR +STARTCHAR uni37AF +ENCODING 14255 +BBX 12 15 2 -2 +BITMAP +FFC0 +0040 +0040 +FFC0 +8000 +8010 +8010 +7FF0 +0400 +0400 +8420 +8420 +8420 +FFE0 +0020 +ENDCHAR +STARTCHAR uni37B0 +ENCODING 14256 +BBX 14 16 1 -2 +BITMAP +2100 +2100 +2100 +23F8 +AA40 +AC40 +A840 +A840 +AFFC +A840 +A840 +B840 +C840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni37B1 +ENCODING 14257 +BBX 11 16 2 -2 +BITMAP +0400 +8420 +8420 +FFE0 +0000 +0000 +FFE0 +8020 +8020 +8020 +FFE0 +8020 +8020 +8020 +FFE0 +8020 +ENDCHAR +STARTCHAR uni37B2 +ENCODING 14258 +BBX 13 16 1 -2 +BITMAP +2040 +2040 +2040 +2040 +ABF8 +AA48 +AA48 +AA48 +AA48 +ABF8 +AA48 +B840 +C840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni37B3 +ENCODING 14259 +BBX 14 16 1 -2 +BITMAP +2010 +2110 +2090 +2090 +A810 +A910 +A890 +A890 +A810 +A81C +ABF0 +B810 +C810 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni37B4 +ENCODING 14260 +BBX 14 16 1 -2 +BITMAP +2008 +203C +23E0 +2220 +AA20 +AA20 +AA20 +ABFC +AA20 +AA20 +AA20 +BA10 +CA14 +0294 +030C +0204 +ENDCHAR +STARTCHAR uni37B5 +ENCODING 14261 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0200 +0100 +7FFC +0820 +0820 +0440 +0280 +0100 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni37B6 +ENCODING 14262 +BBX 14 16 1 -2 +BITMAP +2080 +2040 +2040 +27FC +A910 +A910 +A910 +A910 +A910 +A8A0 +A8A0 +B840 +C8A0 +0110 +0208 +0C04 +ENDCHAR +STARTCHAR uni37B7 +ENCODING 14263 +BBX 15 15 0 -1 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0100 +0100 +0000 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni37B8 +ENCODING 14264 +BBX 14 16 0 -2 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0000 +0000 +7FFC +0100 +0300 +0560 +0910 +3108 +C104 +0100 +0100 +ENDCHAR +STARTCHAR uni37B9 +ENCODING 14265 +BBX 14 16 1 -2 +BITMAP +2000 +2000 +27FC +2010 +A810 +ABD0 +AA50 +AA50 +AA50 +AA50 +ABD0 +BA50 +C810 +0010 +0050 +0020 +ENDCHAR +STARTCHAR uni37BA +ENCODING 14266 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0800 +0800 +1FF0 +2100 +0100 +7FFC +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni37BB +ENCODING 14267 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +1FF0 +1010 +1FF0 +0000 +FFFE +1000 +1FF0 +0010 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni37BC +ENCODING 14268 +BBX 15 15 0 -2 +BITMAP +3FF0 +0020 +00C0 +7D04 +0588 +0950 +1120 +2118 +C506 +0200 +0100 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni37BD +ENCODING 14269 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +2024 +2020 +ABFE +AA20 +AA24 +AA24 +AA24 +AA28 +AA28 +BA90 +CB12 +022A +0046 +0082 +ENDCHAR +STARTCHAR uni37BE +ENCODING 14270 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2208 +2208 +AA08 +ABF8 +AA00 +AA80 +AA88 +AA90 +AAE0 +BA80 +CA84 +0484 +047C +0800 +ENDCHAR +STARTCHAR uni37BF +ENCODING 14271 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +0100 +3FF8 +0100 +0100 +FFFE +1010 +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni37C0 +ENCODING 14272 +BBX 15 16 0 -2 +BITMAP +0070 +1F80 +0100 +0100 +FFFE +0540 +0920 +3118 +C006 +0100 +0100 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni37C1 +ENCODING 14273 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2200 +2200 +AAFC +AA20 +AA20 +AA20 +ABFE +AA20 +AA20 +FC20 +0420 +0820 +0020 +ENDCHAR +STARTCHAR uni37C2 +ENCODING 14274 +BBX 14 16 1 -2 +BITMAP +2000 +21F8 +2108 +2148 +A928 +A908 +A908 +AFFC +AA08 +AA88 +AA48 +BA08 +CBFC +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni37C3 +ENCODING 14275 +BBX 13 16 1 -2 +BITMAP +2000 +23F8 +2008 +2008 +ABE8 +A808 +A808 +ABE8 +AA28 +AA28 +ABE8 +BA28 +C808 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni37C4 +ENCODING 14276 +BBX 14 16 1 -2 +BITMAP +2108 +2088 +2090 +2000 +ABFC +A840 +A840 +A9F8 +A840 +A840 +ABFC +B840 +C840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni37C5 +ENCODING 14277 +BBX 14 16 1 -2 +BITMAP +2000 +2110 +20A0 +2248 +AAA8 +AB18 +AA08 +ABF8 +A800 +A920 +A920 +B920 +CA20 +0224 +0424 +081C +ENDCHAR +STARTCHAR uni37C6 +ENCODING 14278 +BBX 15 16 0 -2 +BITMAP +2090 +2094 +2114 +2118 +AB10 +AD32 +A952 +A90E +A920 +A820 +ABFE +B820 +C820 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni37C7 +ENCODING 14279 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +2248 +2248 +AA48 +AA48 +AD54 +A8E4 +A840 +A840 +ABF8 +B840 +C840 +0040 +07FC +ENDCHAR +STARTCHAR uni37C8 +ENCODING 14280 +BBX 14 16 1 -2 +BITMAP +2050 +2048 +2048 +2040 +ABFC +A840 +AA40 +A964 +A968 +A8D0 +A950 +BA48 +C444 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni37C9 +ENCODING 14281 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2202 +AC24 +A920 +A9FC +A920 +AA20 +A820 +ABFE +B820 +C820 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni37CA +ENCODING 14282 +BBX 14 16 1 -2 +BITMAP +2010 +2078 +2380 +2008 +AA88 +A950 +A800 +ABF0 +A820 +A840 +AFFC +B840 +C840 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni37CB +ENCODING 14283 +BBX 14 16 1 -2 +BITMAP +2208 +2108 +2110 +2020 +ABF8 +AA08 +AA08 +AA08 +ABF8 +A8A0 +A8A0 +B920 +C924 +0224 +041C +0800 +ENDCHAR +STARTCHAR uni37CC +ENCODING 14284 +BBX 14 16 1 -2 +BITMAP +2120 +2110 +2100 +27FC +A940 +A950 +A960 +A948 +A950 +A960 +AA48 +BA54 +CA64 +0444 +05BC +0800 +ENDCHAR +STARTCHAR uni37CD +ENCODING 14285 +BBX 14 16 1 -2 +BITMAP +2080 +2040 +23F8 +2208 +AA08 +ABF8 +AA08 +AA08 +ABF8 +AA40 +AA44 +BA28 +CA10 +0288 +0304 +0200 +ENDCHAR +STARTCHAR uni37CE +ENCODING 14286 +BBX 15 16 0 -2 +BITMAP +2008 +203C +23C0 +2044 +AA24 +A928 +A900 +A840 +ABFE +A888 +A908 +BB90 +C860 +0050 +0188 +0604 +ENDCHAR +STARTCHAR uni37CF +ENCODING 14287 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +20A0 +2110 +AA88 +AC44 +A9F0 +A810 +A820 +A840 +ABF8 +BA08 +CA08 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni37D0 +ENCODING 14288 +BBX 14 15 1 -1 +BITMAP +2090 +2090 +23FC +2090 +A890 +A840 +A820 +ABFC +A900 +A900 +A900 +B900 +C900 +0100 +01F8 +ENDCHAR +STARTCHAR uni37D1 +ENCODING 14289 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +23FE +2020 +A820 +ABFE +AA02 +AC04 +A9F8 +A810 +A820 +BBFE +C820 +0020 +00A0 +0040 +ENDCHAR +STARTCHAR uni37D2 +ENCODING 14290 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +3FF8 +0408 +FFFE +0408 +3FF8 +0800 +1FF8 +2808 +4808 +8FF8 +0808 +ENDCHAR +STARTCHAR uni37D3 +ENCODING 14291 +BBX 15 16 0 -2 +BITMAP +2184 +2068 +2030 +20C8 +AB04 +A840 +ABFE +A8A0 +A920 +ABFC +AD24 +B924 +C934 +0128 +0020 +0020 +ENDCHAR +STARTCHAR uni37D4 +ENCODING 14292 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0100 +0280 +0C60 +3118 +CFE6 +0040 +0080 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni37D5 +ENCODING 14293 +BBX 13 16 1 -2 +BITMAP +0200 +4210 +4210 +7FF0 +0000 +0040 +F240 +9140 +9440 +9240 +9078 +97C0 +F040 +9040 +0040 +0040 +ENDCHAR +STARTCHAR uni37D6 +ENCODING 14294 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +3FF8 +0100 +1FF0 +0100 +7FFC +0000 +0820 +FFFE +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni37D7 +ENCODING 14295 +BBX 13 16 1 -2 +BITMAP +0200 +0200 +8208 +A288 +AAA8 +C718 +8208 +FBE8 +AAA8 +AAA8 +AAA8 +CB28 +9A68 +8208 +FFF8 +0008 +ENDCHAR +STARTCHAR uni37D8 +ENCODING 14296 +BBX 13 16 1 -2 +BITMAP +2000 +23F8 +2248 +2248 +AAE8 +AA48 +ABF8 +AA08 +AAE8 +AAA8 +AAA8 +BAE8 +CA08 +0408 +0428 +0810 +ENDCHAR +STARTCHAR uni37D9 +ENCODING 14297 +BBX 14 16 1 -2 +BITMAP +2110 +2110 +2110 +27FC +A910 +A910 +AFFC +A800 +ABF8 +AA08 +AA08 +BBF8 +CA08 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni37DA +ENCODING 14298 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +FDFC +1020 +3020 +39F8 +5488 +9050 +1020 +1050 +118C +0100 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni37DB +ENCODING 14299 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +1088 +1088 +FBFE +1088 +1088 +1CF8 +F088 +1088 +1088 +50F8 +2088 +ENDCHAR +STARTCHAR uni37DC +ENCODING 14300 +BBX 13 16 1 -2 +BITMAP +0200 +4210 +4210 +7FF0 +0080 +F880 +09F8 +0908 +FA50 +8040 +8150 +F948 +0948 +0A48 +5140 +2080 +ENDCHAR +STARTCHAR uni37DD +ENCODING 14301 +BBX 14 16 1 -2 +BITMAP +2080 +2040 +23F8 +2000 +AA10 +A920 +A800 +AFFC +A800 +A800 +ABF8 +BA08 +CA08 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni37DE +ENCODING 14302 +BBX 14 16 1 -2 +BITMAP +2090 +2088 +20BC +23C0 +A850 +A824 +A8D4 +AB2C +A890 +A8BC +ABC0 +B848 +C850 +0024 +00D4 +030C +ENDCHAR +STARTCHAR uni37DF +ENCODING 14303 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +0820 +7FFC +0820 +FFFE +1010 +2FC8 +4844 +8FC2 +0810 +0810 +07F0 +ENDCHAR +STARTCHAR uni37E0 +ENCODING 14304 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +228A +AA52 +ABFE +AA22 +AA22 +AAAA +AAAA +AAAA +BAFA +CA02 +0202 +020A +0204 +ENDCHAR +STARTCHAR uni37E1 +ENCODING 14305 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +1110 +0920 +7FFC +0400 +FFFE +1010 +2FE8 +C826 +08A0 +0848 +07F8 +ENDCHAR +STARTCHAR uni37E2 +ENCODING 14306 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0100 +7FFC +0440 +1830 +FFFE +0008 +1F88 +1088 +1088 +1F88 +0038 +ENDCHAR +STARTCHAR uni37E3 +ENCODING 14307 +BBX 15 16 0 -2 +BITMAP +2104 +2114 +2114 +2114 +ABD2 +A922 +A92A +AB48 +AB88 +AD50 +AD10 +B914 +C922 +017E +0122 +0100 +ENDCHAR +STARTCHAR uni37E4 +ENCODING 14308 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +3FF0 +0010 +1FF0 +0010 +FFFE +1110 +09A0 +0540 +1930 +E50E +0200 +ENDCHAR +STARTCHAR uni37E5 +ENCODING 14309 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0400 +0820 +1FF0 +0210 +FFFE +08A0 +3318 +CC46 +0380 +1C30 +01C0 +3E00 +ENDCHAR +STARTCHAR uni37E6 +ENCODING 14310 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0000 +7FFC +4104 +3FF8 +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni37E7 +ENCODING 14311 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0000 +3EF8 +2288 +3EF8 +0000 +3FF8 +0000 +FFFE +0800 +0FF0 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni37E8 +ENCODING 14312 +BBX 15 15 1 -1 +BITMAP +2020 +2222 +2222 +23FE +A800 +ABFE +A820 +A840 +ABFE +AA92 +AA92 +FA92 +0292 +0292 +0296 +ENDCHAR +STARTCHAR uni37E9 +ENCODING 14313 +BBX 14 16 1 -2 +BITMAP +0040 +FE40 +827C +FE88 +9148 +FE48 +9050 +8A20 +A650 +C28C +0000 +0200 +4210 +4210 +7FF0 +0010 +ENDCHAR +STARTCHAR uni37EA +ENCODING 14314 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2248 +2248 +ABF8 +AA48 +AA48 +ABF8 +A800 +AFFC +AA40 +BA44 +CA28 +0290 +0308 +0204 +ENDCHAR +STARTCHAR uni37EB +ENCODING 14315 +BBX 14 16 1 -2 +BITMAP +2080 +2100 +23F8 +2208 +ABF8 +AA08 +ABF8 +A840 +A864 +AF68 +A950 +BA50 +CA48 +0448 +0944 +0080 +ENDCHAR +STARTCHAR uni37EC +ENCODING 14316 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0500 +3978 +2108 +3D78 +2108 +3FF8 +0100 +3FF0 +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni37ED +ENCODING 14317 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2208 +23F8 +AA20 +ABFC +AA20 +AA94 +AB0C +A800 +ABF8 +BA08 +CBF8 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni37EE +ENCODING 14318 +BBX 14 16 1 -2 +BITMAP +2080 +2040 +27FC +2404 +A910 +AA08 +AC44 +A850 +A848 +AFFC +A840 +B8A0 +C8A0 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni37EF +ENCODING 14319 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0200 +0100 +7FFE +4802 +9FF4 +2820 +07C0 +1830 +E00E +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni37F0 +ENCODING 14320 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +2000 +A9FC +A904 +A9FC +A904 +A9FC +A840 +A820 +BBFE +C800 +0088 +0104 +0202 +ENDCHAR +STARTCHAR uni37F1 +ENCODING 14321 +BBX 15 15 0 -1 +BITMAP +2104 +2084 +2088 +2000 +ABFE +A820 +A820 +A9FC +A820 +A820 +ABFE +B800 +CAA4 +0252 +0452 +ENDCHAR +STARTCHAR uni37F2 +ENCODING 14322 +BBX 14 16 1 -2 +BITMAP +2000 +23FC +2220 +2240 +AAF8 +AA88 +AAF8 +AA88 +AAF8 +AA20 +AA20 +BAA8 +CAA4 +0524 +04A0 +0840 +ENDCHAR +STARTCHAR uni37F3 +ENCODING 14323 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2050 +2050 +ABFE +AA52 +AA52 +ABFE +A820 +A820 +ABFE +B870 +C8A8 +0124 +0622 +0020 +ENDCHAR +STARTCHAR uni37F4 +ENCODING 14324 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23FC +2244 +AA44 +ABFC +AA44 +AA44 +ABFC +A8A8 +A8AA +F93E +0120 +0222 +041E +ENDCHAR +STARTCHAR uni37F5 +ENCODING 14325 +BBX 15 15 0 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +3FF8 +2448 +3FF8 +0000 +7FFC +0100 +11F8 +1100 +1100 +FFFE +ENDCHAR +STARTCHAR uni37F6 +ENCODING 14326 +BBX 14 16 0 -2 +BITMAP +0100 +4104 +7FFC +0000 +3FFC +2080 +2100 +27F0 +2410 +27F0 +2410 +27F0 +4080 +4490 +8A88 +1104 +ENDCHAR +STARTCHAR uni37F7 +ENCODING 14327 +BBX 14 16 1 -2 +BITMAP +2110 +2110 +27FC +2110 +A840 +A8A0 +A910 +AA08 +ADF4 +A800 +A800 +BBF8 +CA08 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni37F8 +ENCODING 14328 +BBX 15 16 0 -2 +BITMAP +2020 +2040 +21FC +2104 +A9FC +A904 +A9FC +A840 +ABFE +A888 +A924 +BA22 +CDFC +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni37F9 +ENCODING 14329 +BBX 15 16 0 -2 +BITMAP +2010 +3F20 +2ACE +2AAA +AEAA +AAAA +AAAA +AEAA +AAAA +AAAA +ABEA +BEAC +DA28 +0248 +0248 +0288 +ENDCHAR +STARTCHAR uni37FA +ENCODING 14330 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0100 +3FF8 +2108 +FFFE +2108 +3FF8 +1110 +1FF0 +0400 +FFFE +0820 +07C0 +7838 +ENDCHAR +STARTCHAR uni37FB +ENCODING 14331 +BBX 14 16 1 -2 +BITMAP +1008 +FEF0 +1080 +FE80 +92FC +FE90 +9290 +FE90 +1090 +FE90 +1110 +0200 +4210 +4210 +7FF0 +0010 +ENDCHAR +STARTCHAR uni37FC +ENCODING 14332 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0820 +0820 +7F3E +0844 +3EA4 +0824 +FF28 +1028 +1E10 +2228 +4A44 +8482 +ENDCHAR +STARTCHAR uni37FD +ENCODING 14333 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2090 +23FC +AA94 +AA94 +ABFC +A800 +ABFC +A800 +AFFE +F820 +0128 +0626 +0060 +ENDCHAR +STARTCHAR uni37FE +ENCODING 14334 +BBX 14 16 1 -2 +BITMAP +2020 +23FC +2220 +22F8 +AA28 +ABFC +AA28 +AAF8 +AA20 +AAF8 +AAA8 +BAF8 +CAA8 +04F8 +04A8 +0898 +ENDCHAR +STARTCHAR uni37FF +ENCODING 14335 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +23FE +2088 +A824 +ABFE +A850 +A888 +A904 +AA8A +A888 +BBFE +C888 +0088 +0108 +0208 +ENDCHAR +STARTCHAR uni3800 +ENCODING 14336 +BBX 15 15 1 -1 +BITMAP +0400 +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFE +1000 +1FFC +4924 +849C +0100 +4104 +7FFC +ENDCHAR +STARTCHAR uni3801 +ENCODING 14337 +BBX 15 16 0 -2 +BITMAP +2040 +2088 +21FC +2108 +AA52 +ABFE +A850 +A988 +AE26 +A8C0 +AB10 +B864 +CB88 +0030 +00C0 +0700 +ENDCHAR +STARTCHAR uni3802 +ENCODING 14338 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +2108 +27D0 +A91E +AF94 +A924 +AFD4 +AA14 +ABD4 +AA54 +BA48 +CA48 +04D4 +0424 +0842 +ENDCHAR +STARTCHAR uni3803 +ENCODING 14339 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2088 +A850 +ABFE +AA22 +AAFA +AA22 +AAFA +AA8A +BA8A +CAFA +0202 +020A +0204 +ENDCHAR +STARTCHAR uni3804 +ENCODING 14340 +BBX 13 16 1 -2 +BITMAP +0200 +4210 +4210 +7FF0 +0000 +FDF8 +4488 +3468 +C588 +0800 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +ENDCHAR +STARTCHAR uni3805 +ENCODING 14341 +BBX 14 16 0 -2 +BITMAP +0100 +4104 +7FFC +0200 +13FC +2400 +43F8 +8A08 +13F8 +3208 +53F8 +9100 +13F8 +1510 +10E0 +171C +ENDCHAR +STARTCHAR uni3806 +ENCODING 14342 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2252 +2252 +ABDE +A800 +A9FC +A924 +A9FC +A924 +A9FC +B820 +CBFE +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni3807 +ENCODING 14343 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +2050 +1048 +FE48 +01FE +7C50 +4450 +7C50 +1050 +5450 +5292 +9292 +310E +ENDCHAR +STARTCHAR uni3808 +ENCODING 14344 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2252 +23DE +AA52 +ABDE +AA02 +AAFA +AA22 +AA72 +AA22 +BA22 +CAFA +0202 +020A +0204 +ENDCHAR +STARTCHAR uni3809 +ENCODING 14345 +BBX 14 15 1 -1 +BITMAP +2040 +23F8 +2110 +20A0 +ABFC +A800 +ABF8 +AA48 +ABF8 +AA48 +ABF8 +B840 +CBF8 +0040 +07FC +ENDCHAR +STARTCHAR uni380A +ENCODING 14346 +BBX 15 15 0 -1 +BITMAP +2040 +207C +2040 +23FE +AA42 +AA78 +ABC4 +AA3C +AA00 +AA50 +AA54 +BB54 +C4D8 +0450 +09FE +ENDCHAR +STARTCHAR uni380B +ENCODING 14347 +BBX 15 16 0 -2 +BITMAP +2108 +3FF8 +0000 +1FF0 +1010 +7FFC +4444 +7C7C +0000 +3FF8 +0000 +FFFE +1000 +1FF8 +0008 +0070 +ENDCHAR +STARTCHAR uni380C +ENCODING 14348 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0020 +2220 +FFBE +2242 +3E94 +2210 +3E10 +2210 +FFA8 +2428 +4244 +8282 +ENDCHAR +STARTCHAR uni380D +ENCODING 14349 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0880 +1FFC +3080 +5FF8 +9080 +1FF8 +1080 +1FFC +1100 +7FFC +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni380E +ENCODING 14350 +BBX 15 16 0 -2 +BITMAP +20A0 +2090 +21FE +2320 +A9FC +A920 +A9FC +A920 +A9FE +A900 +A820 +BBFE +C870 +00A8 +0326 +0020 +ENDCHAR +STARTCHAR uni380F +ENCODING 14351 +BBX 14 16 1 -2 +BITMAP +2110 +27FC +2110 +2000 +ABF8 +A950 +A950 +AFFC +A950 +A950 +ABF8 +B840 +C7FC +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni3810 +ENCODING 14352 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0000 +0070 +1F80 +0200 +FFFE +0820 +37D8 +C446 +3FF8 +2008 +27C8 +2448 +27D8 +ENDCHAR +STARTCHAR uni3811 +ENCODING 14353 +BBX 13 16 1 -2 +BITMAP +0200 +4210 +4210 +7FF0 +0000 +7FF0 +4890 +7FF0 +0500 +FDF8 +0500 +7DF0 +0500 +FDF8 +0500 +0500 +ENDCHAR +STARTCHAR uni3812 +ENCODING 14354 +BBX 15 16 0 -2 +BITMAP +2002 +2FE2 +2282 +2FEA +AAAA +AAAA +AFEA +A80A +ABCA +A80A +AFEA +B90A +C542 +0522 +092A +0304 +ENDCHAR +STARTCHAR uni3813 +ENCODING 14355 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +2088 +23FE +AA02 +A9FC +A800 +ABFE +A840 +A8A2 +AB54 +B8B8 +CB54 +0092 +0350 +0020 +ENDCHAR +STARTCHAR uni3814 +ENCODING 14356 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0040 +3E20 +22FC +2288 +3E50 +21FE +2020 +3E20 +52FC +5220 +9E20 +1220 +ENDCHAR +STARTCHAR uni3815 +ENCODING 14357 +BBX 14 16 1 -2 +BITMAP +0200 +8208 +FFF8 +0080 +F100 +97F0 +A490 +C7F0 +A490 +97F0 +9090 +D168 +A178 +8244 +8444 +883C +ENDCHAR +STARTCHAR uni3816 +ENCODING 14358 +BBX 15 16 0 -2 +BITMAP +4104 +7FFC +0820 +7FFC +0100 +3FF8 +0100 +FFFE +0240 +3C50 +0848 +FFFE +0850 +7E24 +0854 +198C +ENDCHAR +STARTCHAR uni3817 +ENCODING 14359 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +23FE +2222 +AAAA +AA22 +ABFE +AA72 +AAAA +AA02 +A820 +BBFE +C850 +0088 +0104 +0602 +ENDCHAR +STARTCHAR uni3818 +ENCODING 14360 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0A00 +33B8 +2208 +3A38 +2388 +2088 +3AB8 +2288 +FFFE +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni3819 +ENCODING 14361 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +2000 +21FC +A904 +A9FC +A800 +ABFE +AA02 +A9FC +A840 +BBA4 +C8D8 +0334 +00D2 +0330 +ENDCHAR +STARTCHAR uni381A +ENCODING 14362 +BBX 15 16 0 -2 +BITMAP +2144 +2144 +2554 +2364 +A94E +ABE4 +A804 +AA2C +A944 +ABE4 +A884 +BBE4 +C884 +00E4 +0714 +0008 +ENDCHAR +STARTCHAR uni381B +ENCODING 14363 +BBX 14 16 1 -2 +BITMAP +2110 +27FC +2150 +2120 +ABFC +AE40 +ABF8 +AA40 +ABF8 +AA40 +ABFC +BA00 +C7F8 +0110 +00E0 +071C +ENDCHAR +STARTCHAR uni381C +ENCODING 14364 +BBX 15 16 0 -2 +BITMAP +2200 +22BE +2302 +2254 +A9C8 +A83E +AA0A +ABCA +AD28 +A928 +AFEE +B928 +CAA8 +0258 +044E +0080 +ENDCHAR +STARTCHAR uni381D +ENCODING 14365 +BBX 14 16 1 -2 +BITMAP +2110 +23B8 +2110 +27BC +A910 +AAA8 +AC44 +ABF8 +AA08 +ABF8 +AA08 +BBF8 +CA08 +03F8 +0110 +0208 +ENDCHAR +STARTCHAR uni381E +ENCODING 14366 +BBX 15 16 0 -2 +BITMAP +2220 +4AA0 +8ABE +1FC4 +20A4 +6F24 +A028 +2FA8 +2210 +2728 +2244 +2F82 +0100 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni381F +ENCODING 14367 +BBX 14 16 1 -2 +BITMAP +20A0 +2320 +213C +27D4 +A914 +ABA4 +AD14 +A948 +A8A0 +A910 +AE4C +B950 +C8E0 +0150 +0248 +00C0 +ENDCHAR +STARTCHAR uni3820 +ENCODING 14368 +BBX 15 16 0 -2 +BITMAP +2040 +207C +2040 +23FC +AA44 +ABF0 +AA44 +AAFC +AAA8 +AAF8 +AAA8 +BAF8 +CA00 +05FC +0554 +0BFE +ENDCHAR +STARTCHAR uni3821 +ENCODING 14369 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +2000 +23FC +AA20 +ABF8 +AA20 +ABF8 +AA20 +ABFE +A802 +BAAA +C854 +0188 +06A4 +00C2 +ENDCHAR +STARTCHAR uni3822 +ENCODING 14370 +BBX 15 16 0 -2 +BITMAP +2108 +3FF8 +0200 +1FF0 +1110 +1FF0 +1210 +1FF0 +04A8 +08BA +3082 +C27E +0100 +7FFC +0C48 +763E +ENDCHAR +STARTCHAR uni3823 +ENCODING 14371 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2222 +22CC +AA44 +ABEE +AA44 +AAEE +AB54 +AA44 +AA10 +BA90 +CA9E +0490 +0490 +0BFE +ENDCHAR +STARTCHAR uni3824 +ENCODING 14372 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +2000 +21DC +A954 +A9DC +A888 +ABFE +A888 +ABFE +A888 +BBFE +C894 +0188 +02A4 +00C2 +ENDCHAR +STARTCHAR uni3825 +ENCODING 14373 +BBX 15 16 0 -2 +BITMAP +27FC +2444 +27FC +2444 +AFFC +A800 +AFBE +AAAA +AFBE +AAAA +AFBE +B840 +C840 +07FC +0040 +0FFE +ENDCHAR +STARTCHAR uni3826 +ENCODING 14374 +BBX 15 16 0 -2 +BITMAP +20A8 +21FC +22AA +23FE +AAAA +ABFE +AAAA +ABFE +A800 +ABFE +A800 +B9FC +C904 +01FC +0088 +03FE +ENDCHAR +STARTCHAR uni3827 +ENCODING 14375 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +2248 +23FE +AA48 +AAEC +AB5A +AA48 +AA50 +ABDE +AA50 +BBDC +CA50 +05DE +0450 +0850 +ENDCHAR +STARTCHAR uni3828 +ENCODING 14376 +BBX 15 16 0 -2 +BITMAP +2154 +2124 +23DE +2154 +ABAE +AD54 +AFFE +AC92 +AFFE +AA44 +ABDE +BA44 +CBD4 +020C +0284 +034C +ENDCHAR +STARTCHAR uni3829 +ENCODING 14377 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +2140 +2220 +2410 +2000 +3FFC +0000 +0920 +0920 +0920 +1120 +1122 +2122 +411E +8000 +ENDCHAR +STARTCHAR uni382A +ENCODING 14378 +BBX 15 14 0 -1 +BITMAP +7FFC +0100 +0100 +0100 +0100 +0100 +01F8 +0100 +0100 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni382B +ENCODING 14379 +BBX 15 15 0 -2 +BITMAP +7DF0 +1110 +1190 +1152 +1D12 +E20E +4400 +0100 +3FF8 +0100 +FFFE +0280 +0440 +1830 +600C +ENDCHAR +STARTCHAR uni382C +ENCODING 14380 +BBX 15 15 0 -2 +BITMAP +7CF8 +1088 +1088 +1088 +1CF8 +E000 +4100 +3FF8 +0100 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni382D +ENCODING 14381 +BBX 15 15 0 -2 +BITMAP +7C7C +1010 +1010 +1010 +1010 +FEFE +0000 +0000 +7C7C +1010 +1010 +1010 +1E10 +F0FE +4000 +ENDCHAR +STARTCHAR uni382E +ENCODING 14382 +BBX 15 16 0 -2 +BITMAP +2200 +1400 +7F7C +1410 +5510 +3610 +FF90 +0010 +3E10 +2210 +2210 +3E10 +2210 +2210 +3EFE +2200 +ENDCHAR +STARTCHAR uni382F +ENCODING 14383 +BBX 11 14 3 -1 +BITMAP +FFC0 +8040 +8040 +8040 +8040 +FFC0 +8000 +8000 +FFE0 +8020 +8020 +8020 +8020 +FFE0 +ENDCHAR +STARTCHAR uni3830 +ENCODING 14384 +BBX 14 16 0 -2 +BITMAP +1000 +7E7C +1244 +1244 +1244 +227C +4A44 +8400 +1FF0 +0010 +0010 +1FF0 +1000 +1004 +1004 +0FFC +ENDCHAR +STARTCHAR uni3831 +ENCODING 14385 +BBX 15 16 0 -2 +BITMAP +3FF0 +0010 +3FF0 +2004 +1FFC +0820 +7FFC +0820 +0FE0 +0820 +0FE0 +0820 +FFFE +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni3832 +ENCODING 14386 +BBX 14 16 1 -2 +BITMAP +1080 +1080 +1080 +FE84 +9288 +9290 +92A0 +92C0 +9280 +9280 +9280 +9684 +1084 +1084 +107C +1000 +ENDCHAR +STARTCHAR uni3833 +ENCODING 14387 +BBX 15 16 0 -2 +BITMAP +0600 +0100 +0280 +0440 +0820 +3118 +C106 +0100 +1FF0 +1110 +1110 +1110 +1150 +1120 +0100 +0100 +ENDCHAR +STARTCHAR uni3834 +ENCODING 14388 +BBX 13 16 1 -2 +BITMAP +2000 +2000 +23F8 +F848 +A848 +A948 +A948 +A948 +AA48 +A848 +A848 +B888 +2088 +2108 +2228 +2410 +ENDCHAR +STARTCHAR uni3835 +ENCODING 14389 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +1000 +1000 +1000 +1FF8 +0100 +0100 +3FF8 +2108 +2108 +2128 +2110 +0100 +0100 +ENDCHAR +STARTCHAR uni3836 +ENCODING 14390 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2040 +F9F8 +A908 +A908 +A908 +A908 +A908 +A908 +B908 +2108 +220A +220A +2406 +ENDCHAR +STARTCHAR uni3837 +ENCODING 14391 +BBX 14 16 1 -2 +BITMAP +2000 +27F8 +2108 +F910 +A910 +A920 +A938 +A908 +AA88 +AA88 +AA50 +BA50 +2420 +2450 +2888 +2304 +ENDCHAR +STARTCHAR uni3838 +ENCODING 14392 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +2040 +F840 +ABF8 +A840 +A840 +A840 +AFFC +A840 +A8A0 +B8A0 +2110 +2110 +2208 +2404 +ENDCHAR +STARTCHAR uni3839 +ENCODING 14393 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +20A0 +F8A0 +A910 +AA08 +AC04 +A910 +A910 +A910 +A910 +B910 +2110 +2210 +2210 +2410 +ENDCHAR +STARTCHAR uni383A +ENCODING 14394 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +2040 +F950 +A948 +A944 +AA44 +AA40 +AC48 +A848 +A850 +B810 +2020 +2040 +2180 +2600 +ENDCHAR +STARTCHAR uni383B +ENCODING 14395 +BBX 15 16 0 -2 +BITMAP +0200 +0208 +3FD0 +0220 +0240 +FFFE +0100 +0280 +0C80 +1FF8 +2888 +4888 +88A8 +0890 +0080 +0080 +ENDCHAR +STARTCHAR uni383C +ENCODING 14396 +BBX 14 16 1 -2 +BITMAP +2008 +201C +21E0 +F900 +A900 +A900 +A9FC +A910 +A910 +A910 +A910 +B910 +2110 +2210 +2210 +2410 +ENDCHAR +STARTCHAR uni383D +ENCODING 14397 +BBX 14 16 1 -2 +BITMAP +2080 +2080 +20F8 +F908 +AB10 +ACA0 +A840 +A8A0 +A910 +AE0C +A8C0 +B820 +2010 +2180 +2040 +2020 +ENDCHAR +STARTCHAR uni383E +ENCODING 14398 +BBX 15 16 0 -2 +BITMAP +1000 +1EF8 +2288 +62A8 +9492 +0882 +307E +C100 +0100 +3FF8 +2108 +2108 +2128 +2110 +0100 +0100 +ENDCHAR +STARTCHAR uni383F +ENCODING 14399 +BBX 14 16 0 -2 +BITMAP +0880 +0888 +2890 +2EA0 +28C0 +2884 +2E84 +F17C +0100 +3FF8 +2108 +2108 +2128 +2110 +0100 +0100 +ENDCHAR +STARTCHAR uni3840 +ENCODING 14400 +BBX 14 15 2 -1 +BITMAP +0200 +1240 +2230 +C20C +0200 +7FF8 +4208 +4A88 +4A88 +5248 +5248 +6228 +4208 +4208 +4038 +ENDCHAR +STARTCHAR uni3841 +ENCODING 14401 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +27FC +F8A0 +A910 +AA08 +ADF4 +A800 +AFFC +A880 +A900 +BBF8 +2008 +2008 +2050 +2020 +ENDCHAR +STARTCHAR uni3842 +ENCODING 14402 +BBX 14 16 0 -2 +BITMAP +0004 +7FA4 +1024 +3F24 +5124 +0A04 +0C04 +3114 +C108 +3FF8 +2108 +2108 +2128 +2110 +0100 +0100 +ENDCHAR +STARTCHAR uni3843 +ENCODING 14403 +BBX 14 16 1 -2 +BITMAP +2020 +2220 +2220 +FA50 +AA88 +AA00 +ABFC +A800 +A950 +A950 +A950 +B950 +2150 +2154 +2254 +240C +ENDCHAR +STARTCHAR uni3844 +ENCODING 14404 +BBX 14 16 1 -2 +BITMAP +2080 +2080 +2100 +F9FC +AA04 +AC04 +ABE4 +AA24 +AA24 +ABE4 +AA24 +BA24 +23E4 +2004 +2028 +2010 +ENDCHAR +STARTCHAR uni3845 +ENCODING 14405 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +20F8 +F908 +AA90 +A860 +A840 +A890 +AB20 +A87C +A884 +BB48 +2030 +2020 +20C0 +2300 +ENDCHAR +STARTCHAR uni3846 +ENCODING 14406 +BBX 14 16 1 -2 +BITMAP +2100 +2080 +27F8 +FA00 +AA00 +AA00 +ABF0 +A800 +AAA0 +AAA0 +AAA0 +BAA0 +24A0 +24A4 +28A4 +301C +ENDCHAR +STARTCHAR uni3847 +ENCODING 14407 +BBX 14 16 1 -2 +BITMAP +2000 +27FC +2240 +FA50 +AA50 +ABD0 +AA50 +AA50 +AA50 +ABD0 +AA50 +BA54 +2274 +27D4 +204C +2040 +ENDCHAR +STARTCHAR uni3848 +ENCODING 14408 +BBX 14 16 1 -2 +BITMAP +2100 +2100 +21F0 +FA10 +AC20 +ABF8 +AA48 +AA48 +AA48 +ABF8 +A8A0 +B8A0 +2120 +2124 +2224 +241C +ENDCHAR +STARTCHAR uni3849 +ENCODING 14409 +BBX 15 16 0 -2 +BITMAP +2010 +2388 +2088 +F8FE +A890 +AB90 +AA24 +AA24 +AA38 +AB88 +A890 +B890 +20A4 +20BE +2282 +2100 +ENDCHAR +STARTCHAR uni384A +ENCODING 14410 +BBX 14 16 1 -2 +BITMAP +2080 +2080 +20F8 +F908 +AA10 +AC00 +A840 +AB9C +AA04 +AA04 +AB9C +BA04 +2204 +2204 +23FC +2204 +ENDCHAR +STARTCHAR uni384B +ENCODING 14411 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +27FC +F8A0 +A910 +AA48 +AC44 +ABF8 +AA48 +ABF8 +AA48 +BBF8 +2044 +2044 +203C +2000 +ENDCHAR +STARTCHAR uni384C +ENCODING 14412 +BBX 14 16 1 -2 +BITMAP +2000 +23FC +2204 +FAF4 +AA04 +AAF4 +A800 +A9F8 +A908 +A9F8 +A908 +B9F8 +2108 +2108 +2128 +2110 +ENDCHAR +STARTCHAR uni384D +ENCODING 14413 +BBX 15 16 0 -2 +BITMAP +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +FFFE +0820 +3118 +DFF6 +1110 +1150 +1120 +0100 +0100 +ENDCHAR +STARTCHAR uni384E +ENCODING 14414 +BBX 14 16 1 -2 +BITMAP +2080 +2090 +2108 +FBFC +A840 +AFFC +A910 +AA48 +AC84 +AB10 +A820 +B8C4 +2308 +2030 +20C0 +2700 +ENDCHAR +STARTCHAR uni384F +ENCODING 14415 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2110 +FA08 +ADF6 +A800 +ABC4 +AA54 +AA54 +ABD4 +AA54 +BA54 +23D4 +2244 +2254 +22C8 +ENDCHAR +STARTCHAR uni3850 +ENCODING 14416 +BBX 15 16 0 -2 +BITMAP +2108 +2088 +2090 +FBFE +A800 +ABC4 +AA54 +AA54 +ABD4 +AA54 +AA54 +BBD4 +2254 +2244 +2254 +22C8 +ENDCHAR +STARTCHAR uni3851 +ENCODING 14417 +BBX 14 16 1 -2 +BITMAP +0C20 +7020 +10A4 +FCA8 +1120 +3850 +5450 +9088 +1104 +0200 +7FF0 +4210 +4210 +4250 +4220 +0200 +ENDCHAR +STARTCHAR uni3852 +ENCODING 14418 +BBX 14 16 1 -2 +BITMAP +2010 +2038 +23E0 +FA20 +AA20 +ABFC +AA20 +AAF8 +AA88 +AAF8 +AA88 +BAF8 +2288 +2488 +24F8 +2888 +ENDCHAR +STARTCHAR uni3853 +ENCODING 14419 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2222 +F820 +ABFE +A820 +A9FC +A924 +A9FC +A924 +A9FC +B820 +23FE +2020 +2020 +2020 +ENDCHAR +STARTCHAR uni3854 +ENCODING 14420 +BBX 15 16 0 -2 +BITMAP +0040 +7F40 +127E +0C88 +FF48 +1948 +2A50 +4820 +A850 +118C +0100 +3FF8 +2108 +2128 +2110 +0100 +ENDCHAR +STARTCHAR uni3855 +ENCODING 14421 +BBX 14 16 1 -2 +BITMAP +2110 +2110 +27FC +F910 +A950 +A840 +ABF8 +AA48 +AA48 +AA48 +AFFC +B840 +20A0 +2110 +2208 +2404 +ENDCHAR +STARTCHAR uni3856 +ENCODING 14422 +BBX 14 16 1 -2 +BITMAP +2010 +2078 +23C0 +F840 +AFFC +A840 +ABF8 +AA48 +ABF8 +AA48 +ABF8 +B840 +23F8 +2040 +27FC +2000 +ENDCHAR +STARTCHAR uni3857 +ENCODING 14423 +BBX 15 16 0 -2 +BITMAP +2004 +201E +23F0 +FA1E +AA10 +AAFE +AA92 +AA98 +AAF2 +AA8E +AA80 +BAB8 +22A8 +24AA +254A +2A86 +ENDCHAR +STARTCHAR uni3858 +ENCODING 14424 +BBX 14 16 1 -2 +BITMAP +2110 +20A0 +2000 +FBFC +A8A0 +ABF8 +A8A8 +AFFC +A8A8 +ABF8 +A8A0 +B9B0 +22A8 +24A4 +20A0 +20A0 +ENDCHAR +STARTCHAR uni3859 +ENCODING 14425 +BBX 14 16 1 -2 +BITMAP +2040 +2080 +23F8 +FA08 +AAA8 +AA48 +AAA8 +AA08 +ABF8 +A800 +AA24 +BBA8 +2230 +22A4 +2324 +221C +ENDCHAR +STARTCHAR uni385A +ENCODING 14426 +BBX 14 16 1 -2 +BITMAP +2110 +2110 +27FC +F910 +ABF8 +A910 +AFFC +A840 +ABF8 +AA48 +ABF8 +BA48 +27FC +2208 +2228 +2210 +ENDCHAR +STARTCHAR uni385B +ENCODING 14427 +BBX 14 16 1 -2 +BITMAP +2110 +2110 +27FC +F950 +A820 +AFFC +A900 +A900 +A9F8 +A800 +A950 +B950 +2150 +2154 +2254 +240C +ENDCHAR +STARTCHAR uni385C +ENCODING 14428 +BBX 15 15 1 -1 +BITMAP +2200 +23BC +2644 +FD4C +AAA8 +A910 +ABF8 +AC06 +A800 +AFFC +B840 +2248 +2444 +2842 +20C0 +ENDCHAR +STARTCHAR uni385D +ENCODING 14429 +BBX 15 16 0 -2 +BITMAP +2020 +247C +2284 +F948 +A830 +A8CE +AE10 +AA7C +AA10 +AA7C +AA10 +BAFE +2210 +2210 +25FE +2800 +ENDCHAR +STARTCHAR uni385E +ENCODING 14430 +BBX 15 16 0 -2 +BITMAP +2020 +21FC +2124 +FBFE +A924 +A9FC +A820 +A9FC +A924 +A9FC +A840 +BBFE +2088 +21D0 +2070 +238C +ENDCHAR +STARTCHAR uni385F +ENCODING 14431 +BBX 15 16 0 -2 +BITMAP +2090 +2090 +27FE +F890 +ABFC +AA94 +ABFC +AA94 +ABFC +A800 +A9F8 +B908 +21F8 +2108 +21F8 +2108 +ENDCHAR +STARTCHAR uni3860 +ENCODING 14432 +BBX 15 16 0 -2 +BITMAP +2020 +27A4 +20A8 +FA92 +A914 +AA08 +ADF4 +A802 +ABF8 +AA08 +AA08 +BBF8 +2208 +2110 +2FFE +2000 +ENDCHAR +STARTCHAR uni3861 +ENCODING 14433 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2800 +FBC4 +A804 +ABDE +AA44 +AA54 +ABD4 +A814 +BA54 +2A44 +2944 +31E4 +270C +ENDCHAR +STARTCHAR uni3862 +ENCODING 14434 +BBX 15 16 0 -2 +BITMAP +21FC +2104 +21FC +F904 +A9FC +A800 +ABFE +AA52 +ABFE +A800 +ABFE +B880 +20FC +2084 +2114 +2208 +ENDCHAR +STARTCHAR uni3863 +ENCODING 14435 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +7F3E +0020 +223E +1402 +FFBE +88A0 +093E +7F20 +493E +4920 +4D3E +4A20 +0822 +081E +ENDCHAR +STARTCHAR uni3864 +ENCODING 14436 +BBX 15 16 0 -2 +BITMAP +2050 +2252 +2154 +F850 +ABFE +A888 +A850 +ABFE +A820 +A9FC +A820 +BBFE +20A8 +2124 +2622 +2020 +ENDCHAR +STARTCHAR uni3865 +ENCODING 14437 +BBX 15 16 0 -2 +BITMAP +203E +27C0 +2244 +F928 +ABF8 +A840 +AFFC +A800 +ABF8 +A808 +ABF8 +B808 +23F8 +2544 +252A +28FA +ENDCHAR +STARTCHAR uni3866 +ENCODING 14438 +BBX 14 16 1 -2 +BITMAP +2040 +2020 +23FC +FA04 +A9F8 +A950 +AA60 +A9F8 +AB08 +A9F8 +A908 +B9F8 +2108 +21F8 +2090 +2108 +ENDCHAR +STARTCHAR uni3867 +ENCODING 14439 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +FA8A +A904 +A812 +ABD4 +A848 +AA8A +A974 +AA02 +B9FC +2104 +21FC +2088 +23FE +ENDCHAR +STARTCHAR uni3868 +ENCODING 14440 +BBX 15 16 0 -2 +BITMAP +2148 +214C +22AA +F808 +AFFE +A948 +AB68 +A94A +AB6A +A94C +AB6C +B948 +216A +239A +2026 +2042 +ENDCHAR +STARTCHAR uni3869 +ENCODING 14441 +BBX 15 16 0 -2 +BITMAP +2104 +47C8 +8812 +F3BC +2008 +4B92 +F83E +0380 +AAAA +ABAA +0100 +3FF8 +2108 +2128 +2110 +0100 +ENDCHAR +STARTCHAR uni386A +ENCODING 14442 +BBX 15 16 0 -2 +BITMAP +203E +27C4 +2128 +FBFE +AA02 +ABFE +AAA0 +AAEE +AAAA +AAEE +ABA8 +BA46 +22F8 +2548 +2430 +29CE +ENDCHAR +STARTCHAR uni386B +ENCODING 14443 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2104 +21FC +4504 +45FC +F880 +09FE +1222 +1122 +2952 +4502 +FDFA +4402 +0014 +0008 +ENDCHAR +STARTCHAR uni386C +ENCODING 14444 +BBX 15 16 0 -2 +BITMAP +1110 +2120 +4544 +7978 +1110 +2524 +7D7C +0524 +0110 +FFFE +2080 +3E88 +2252 +2222 +4A5A +8586 +ENDCHAR +STARTCHAR uni386D +ENCODING 14445 +BBX 14 16 1 -2 +BITMAP +8820 +9248 +BCF0 +8820 +9450 +BEF8 +8000 +FFFC +8820 +9248 +BCF0 +8820 +9450 +BEF8 +8000 +FFFC +ENDCHAR +STARTCHAR uni386E +ENCODING 14446 +BBX 15 16 0 -2 +BITMAP +4920 +4920 +AABE +EBA0 +4940 +AABC +EB80 +2900 +FFB8 +2408 +2508 +2508 +228A +528A +4586 +8882 +ENDCHAR +STARTCHAR uni386F +ENCODING 14447 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2010 +20F8 +2780 +2080 +2080 +20FE +3F80 +2080 +4082 +4082 +8082 +007E +ENDCHAR +STARTCHAR uni3870 +ENCODING 14448 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2000 +27F8 +2080 +2080 +2080 +3FFE +2080 +2080 +4080 +4080 +8280 +0100 +ENDCHAR +STARTCHAR uni3871 +ENCODING 14449 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2100 +2100 +2100 +23F0 +2210 +2420 +2820 +2040 +20C0 +4120 +4210 +8C08 +3006 +ENDCHAR +STARTCHAR uni3872 +ENCODING 14450 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2090 +2088 +20FE +2F80 +2080 +2088 +2090 +2060 +2042 +41A2 +4E1A +8006 +ENDCHAR +STARTCHAR uni3873 +ENCODING 14451 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +203C +27C0 +2440 +2440 +2440 +27FE +2420 +2420 +2412 +450A +4606 +8402 +ENDCHAR +STARTCHAR uni3874 +ENCODING 14452 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +3FFE +2080 +2040 +2040 +2FFC +2000 +2408 +2208 +2210 +2110 +4120 +4000 +9FFE +ENDCHAR +STARTCHAR uni3875 +ENCODING 14453 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2140 +2220 +2490 +2848 +3046 +27F0 +2010 +2020 +4340 +4080 +8040 +0020 +ENDCHAR +STARTCHAR uni3876 +ENCODING 14454 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2000 +27F8 +2408 +2408 +2408 +2408 +27F8 +2408 +4120 +4210 +8408 +0804 +ENDCHAR +STARTCHAR uni3877 +ENCODING 14455 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2080 +2080 +2FFC +21C0 +22A0 +22A0 +2490 +2888 +57F4 +4080 +8080 +0080 +ENDCHAR +STARTCHAR uni3878 +ENCODING 14456 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2200 +2200 +23FE +2500 +2900 +31F8 +2100 +2100 +21FC +4100 +4100 +8100 +0100 +ENDCHAR +STARTCHAR uni3879 +ENCODING 14457 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +3FFE +2000 +2000 +23F8 +2208 +2208 +23F8 +2208 +2208 +23F8 +4208 +4208 +8FFE +ENDCHAR +STARTCHAR uni387A +ENCODING 14458 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +3FFE +2000 +2000 +27F8 +2408 +2408 +27F8 +2408 +2408 +27F8 +4000 +4000 +9FFE +ENDCHAR +STARTCHAR uni387B +ENCODING 14459 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2180 +263C +24A4 +24A4 +24A4 +24A4 +25A4 +26B4 +2528 +4120 +4220 +8420 +ENDCHAR +STARTCHAR uni387C +ENCODING 14460 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2080 +2FF8 +2888 +2FF8 +2888 +2FF8 +2084 +2048 +2030 +41D4 +5E0C +8004 +ENDCHAR +STARTCHAR uni387D +ENCODING 14461 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2040 +27F8 +2048 +3FFE +2048 +27F8 +2040 +27FC +4040 +5FFE +8040 +0040 +ENDCHAR +STARTCHAR uni387E +ENCODING 14462 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +27F8 +2408 +27F8 +2408 +27F8 +2484 +2488 +2450 +2420 +4518 +4606 +8400 +ENDCHAR +STARTCHAR uni387F +ENCODING 14463 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2208 +2108 +2110 +2FFE +2040 +2444 +2444 +2444 +27FC +2084 +4100 +4600 +9800 +ENDCHAR +STARTCHAR uni3880 +ENCODING 14464 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +2040 +2FFE +2040 +27FC +2444 +2454 +24E8 +2150 +4248 +4C46 +8040 +0040 +ENDCHAR +STARTCHAR uni3881 +ENCODING 14465 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +21F0 +2210 +2D20 +20D0 +2320 +2C7C +2184 +2688 +4050 +4060 +8180 +0E00 +ENDCHAR +STARTCHAR uni3882 +ENCODING 14466 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +2080 +27F8 +2408 +2408 +27F8 +2400 +2400 +27FC +4404 +4404 +87FC +0404 +ENDCHAR +STARTCHAR uni3883 +ENCODING 14467 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2100 +2080 +27F8 +2408 +27F8 +2408 +27F8 +2482 +2444 +2428 +4510 +4608 +8406 +ENDCHAR +STARTCHAR uni3884 +ENCODING 14468 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2000 +2FFC +2000 +23F8 +2208 +2208 +2208 +23F8 +2000 +4208 +4110 +9FFE +ENDCHAR +STARTCHAR uni3885 +ENCODING 14469 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +27FC +2040 +23F8 +2040 +2FFE +2110 +2110 +2FFE +2110 +4210 +4210 +8410 +ENDCHAR +STARTCHAR uni3886 +ENCODING 14470 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +27FC +2444 +2444 +27FC +2444 +2444 +27FC +2040 +27FC +4040 +4040 +8FFE +ENDCHAR +STARTCHAR uni3887 +ENCODING 14471 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2100 +2080 +2FFC +2000 +27F8 +2000 +27F8 +2000 +27F8 +2408 +4408 +47F8 +8408 +ENDCHAR +STARTCHAR uni3888 +ENCODING 14472 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2280 +2240 +27FE +2440 +2C40 +37FC +2440 +2440 +27FC +4440 +4440 +87FE +0400 +ENDCHAR +STARTCHAR uni3889 +ENCODING 14473 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +218C +2E70 +2210 +2210 +3F90 +261E +2770 +2A90 +2A12 +5212 +4212 +820E +ENDCHAR +STARTCHAR uni388A +ENCODING 14474 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2FF8 +2140 +2220 +2410 +3FFE +2010 +27D0 +2450 +47D0 +4010 +8050 +0020 +ENDCHAR +STARTCHAR uni388B +ENCODING 14475 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2220 +2278 +2488 +2550 +2C24 +3448 +259E +2422 +2464 +2598 +4410 +4460 +8580 +ENDCHAR +STARTCHAR uni388C +ENCODING 14476 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2EFC +2A08 +2AE8 +2CA8 +2AA8 +2AA8 +2AA8 +2AE8 +4EA8 +4808 +8828 +0810 +ENDCHAR +STARTCHAR uni388D +ENCODING 14477 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2110 +2FFE +2110 +2040 +23F8 +2248 +2248 +2FFE +20A0 +4110 +4608 +9806 +ENDCHAR +STARTCHAR uni388E +ENCODING 14478 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2038 +27C0 +2040 +2FFE +2040 +2140 +265C +2444 +275C +4444 +47FC +8404 +ENDCHAR +STARTCHAR uni388F +ENCODING 14479 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +20A0 +2318 +2DF6 +2000 +2784 +24A4 +27A4 +24A4 +27A4 +4484 +4494 +8588 +ENDCHAR +STARTCHAR uni3890 +ENCODING 14480 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +23F0 +2210 +23D0 +2250 +2250 +2FFC +2804 +29E4 +2924 +49E4 +4814 +8808 +ENDCHAR +STARTCHAR uni3891 +ENCODING 14481 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2280 +2240 +27FC +2440 +2FF8 +3440 +27F8 +2440 +27FC +2480 +4080 +5FFE +8080 +0080 +ENDCHAR +STARTCHAR uni3892 +ENCODING 14482 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2040 +207E +2040 +2FFE +2842 +2BF8 +2842 +29FE +2904 +29FC +4904 +51FC +9104 +27FE +ENDCHAR +STARTCHAR uni3893 +ENCODING 14483 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2040 +27FC +2110 +2FFE +2000 +23F8 +2208 +23F8 +2208 +23F8 +4040 +4FFE +8040 +0040 +ENDCHAR +STARTCHAR uni3894 +ENCODING 14484 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2200 +2448 +2848 +3054 +22A4 +2500 +2C10 +3490 +249C +4490 +4550 +863E +0400 +ENDCHAR +STARTCHAR uni3895 +ENCODING 14485 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2228 +2224 +257E +2948 +2E48 +22FE +2548 +2948 +2F7E +4248 +4448 +887E +1040 +ENDCHAR +STARTCHAR uni3896 +ENCODING 14486 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2078 +2F80 +2490 +22A0 +3FFE +2490 +2808 +37F6 +4490 +47F0 +8490 +07F0 +ENDCHAR +STARTCHAR uni3897 +ENCODING 14487 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2038 +27C0 +2080 +2FFC +2110 +27F8 +3916 +21F0 +2000 +2FFE +4802 +49F2 +8912 +09F6 +ENDCHAR +STARTCHAR uni3898 +ENCODING 14488 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2210 +2120 +2FFC +2120 +2FF8 +2128 +3FFE +2128 +2FF8 +2000 +4A48 +4924 +9124 +ENDCHAR +STARTCHAR uni3899 +ENCODING 14489 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2510 +2510 +3FD0 +253C +2714 +2214 +2F94 +2A94 +2F94 +2214 +4FA4 +4224 +8354 +1C88 +ENDCHAR +STARTCHAR uni389A +ENCODING 14490 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2080 +20F8 +2080 +2FFC +2884 +2BF0 +2888 +2BF8 +2A48 +2BF8 +4A48 +57FC +9084 +230C +ENDCHAR +STARTCHAR uni389B +ENCODING 14491 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2040 +20A0 +2110 +2208 +2DF6 +2000 +27BC +24A4 +24A4 +27BC +4110 +42A8 +8444 +0882 +ENDCHAR +STARTCHAR uni389C +ENCODING 14492 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2208 +3FFE +2208 +23F8 +2000 +27FC +2444 +27FC +2444 +27FC +4040 +4524 +850A +08FA +ENDCHAR +STARTCHAR uni389D +ENCODING 14493 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2400 +2706 +2938 +3208 +2F88 +2ABE +2F88 +2A9C +2FAA +4008 +5548 +9548 +2008 +ENDCHAR +STARTCHAR uni389E +ENCODING 14494 +BBX 15 16 0 -2 +BITMAP +0080 +7FFE +4000 +7E7C +5224 +4A14 +5224 +4FF8 +4888 +4FF8 +4888 +4FF8 +4220 +5FFC +4410 +8808 +ENDCHAR +STARTCHAR uni389F +ENCODING 14495 +BBX 15 15 0 -2 +BITMAP +0020 +F820 +0820 +1020 +113C +2120 +7920 +0920 +0920 +4920 +31FC +1000 +2C00 +43FE +8000 +ENDCHAR +STARTCHAR uni38A0 +ENCODING 14496 +BBX 15 15 0 -2 +BITMAP +03FC +FA04 +0A04 +12F4 +1294 +2294 +7A94 +0AF4 +0A94 +4A04 +3214 +1208 +2C00 +43FE +8000 +ENDCHAR +STARTCHAR uni38A1 +ENCODING 14497 +BBX 15 16 0 -2 +BITMAP +0440 +247C +24A8 +3D50 +0428 +7DFE +2488 +4448 +8418 +0820 +0820 +FFFE +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni38A2 +ENCODING 14498 +BBX 15 16 0 -2 +BITMAP +0820 +4920 +2A3E +7F48 +41A8 +5D28 +5510 +5D28 +4246 +0820 +0820 +FFFE +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni38A3 +ENCODING 14499 +BBX 15 16 0 -2 +BITMAP +2420 +FF20 +247E +7EC4 +8228 +7A10 +4A28 +7AC6 +0400 +0820 +0820 +FFFE +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni38A4 +ENCODING 14500 +BBX 15 16 0 -2 +BITMAP +0840 +0848 +7F44 +0844 +0840 +FFFE +1040 +1040 +1F40 +1140 +1120 +2122 +2112 +410A +4A06 +8402 +ENDCHAR +STARTCHAR uni38A5 +ENCODING 14501 +BBX 14 16 1 -2 +BITMAP +0040 +FE50 +8248 +8248 +BA40 +827C +83C0 +BA40 +AA40 +AA40 +AA40 +BA48 +8228 +8228 +8A18 +8408 +ENDCHAR +STARTCHAR uni38A6 +ENCODING 14502 +BBX 15 16 0 -2 +BITMAP +0020 +FF28 +0224 +7A24 +4A20 +7A2E +00F0 +FF20 +0220 +7A20 +4A20 +4A10 +7A12 +020A +0A06 +0402 +ENDCHAR +STARTCHAR uni38A7 +ENCODING 14503 +BBX 13 15 0 -2 +BITMAP +7FF0 +0010 +0010 +3FF0 +2000 +2000 +3FF8 +0008 +0008 +FFE8 +0008 +0008 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni38A8 +ENCODING 14504 +BBX 14 15 1 -2 +BITMAP +FBF8 +0840 +0840 +0840 +F840 +8040 +87FC +8040 +F840 +0840 +0840 +0840 +0840 +5040 +2040 +ENDCHAR +STARTCHAR uni38A9 +ENCODING 14505 +BBX 13 16 1 -2 +BITMAP +0080 +F880 +0900 +09F8 +0A08 +FC08 +8008 +8208 +8108 +F888 +0888 +0808 +0808 +0808 +5050 +2020 +ENDCHAR +STARTCHAR uni38AA +ENCODING 14506 +BBX 15 15 0 -2 +BITMAP +F9FC +0800 +0800 +0800 +7BFE +4080 +4080 +4100 +79FC +0804 +0804 +0804 +0804 +5028 +2010 +ENDCHAR +STARTCHAR uni38AB +ENCODING 14507 +BBX 14 16 0 -2 +BITMAP +0020 +F820 +0820 +0820 +0924 +7924 +4124 +4124 +4124 +7924 +0924 +0924 +0924 +09FC +5004 +2000 +ENDCHAR +STARTCHAR uni38AC +ENCODING 14508 +BBX 15 16 0 -2 +BITMAP +0040 +F840 +0840 +0840 +0BFE +7840 +4080 +4090 +4090 +7920 +0920 +0A48 +0A44 +0C84 +51FE +2082 +ENDCHAR +STARTCHAR uni38AD +ENCODING 14509 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +0840 +087C +0840 +F840 +8040 +83F8 +8108 +F910 +0890 +08A0 +0840 +08A0 +5310 +2C0C +ENDCHAR +STARTCHAR uni38AE +ENCODING 14510 +BBX 15 16 0 -2 +BITMAP +0080 +F880 +08FE +0900 +0A20 +7920 +412C +4174 +43A4 +7924 +0934 +0928 +0922 +0902 +50FE +2000 +ENDCHAR +STARTCHAR uni38AF +ENCODING 14511 +BBX 15 15 0 -2 +BITMAP +FBFC +0A04 +0A04 +0A04 +7BFC +4220 +4220 +43FE +7A20 +0A20 +0A10 +0A12 +0A8A +5306 +2202 +ENDCHAR +STARTCHAR uni38B0 +ENCODING 14512 +BBX 15 16 0 -2 +BITMAP +0010 +F810 +0810 +09FE +0912 +7914 +4110 +41FC +4144 +7944 +0928 +0928 +0910 +0A28 +5244 +2482 +ENDCHAR +STARTCHAR uni38B1 +ENCODING 14513 +BBX 15 16 0 -2 +BITMAP +0020 +F840 +0888 +0904 +0BFE +7802 +4020 +4020 +4128 +7924 +0A24 +0A22 +0C22 +0820 +50A0 +2040 +ENDCHAR +STARTCHAR uni38B2 +ENCODING 14514 +BBX 15 15 0 -2 +BITMAP +7CF8 +0408 +7CF8 +4080 +7CF8 +0408 +0408 +2850 +1020 +0000 +FFFE +0000 +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni38B3 +ENCODING 14515 +BBX 14 16 1 -2 +BITMAP +0100 +F900 +09FC +0A00 +0C00 +F838 +83C0 +8240 +8244 +FA48 +0A50 +0A20 +0A20 +0A90 +5308 +2204 +ENDCHAR +STARTCHAR uni38B4 +ENCODING 14516 +BBX 12 15 2 -2 +BITMAP +FFE0 +0020 +0020 +FFE0 +8000 +8000 +FFF0 +0010 +FF90 +AA90 +9290 +AC90 +9290 +FFA0 +0040 +ENDCHAR +STARTCHAR uni38B5 +ENCODING 14517 +BBX 15 16 0 -2 +BITMAP +0020 +F820 +0850 +0888 +0904 +7A02 +41FC +4000 +4000 +79FC +0904 +0904 +0904 +0904 +51FC +2104 +ENDCHAR +STARTCHAR uni38B6 +ENCODING 14518 +BBX 15 15 0 -2 +BITMAP +FBFE +0820 +0820 +0840 +79FC +4104 +4104 +4104 +79FC +0904 +0904 +0904 +0904 +51FC +2104 +ENDCHAR +STARTCHAR uni38B7 +ENCODING 14519 +BBX 14 16 1 -2 +BITMAP +0020 +F924 +0924 +0924 +09FC +F840 +8040 +80FC +8104 +FA84 +0848 +0850 +0820 +0840 +5080 +2300 +ENDCHAR +STARTCHAR uni38B8 +ENCODING 14520 +BBX 15 16 0 -2 +BITMAP +0020 +F720 +1120 +113E +1144 +F744 +8444 +84A4 +8428 +F728 +1110 +1110 +1128 +1148 +AA84 +4502 +ENDCHAR +STARTCHAR uni38B9 +ENCODING 14521 +BBX 14 16 1 -2 +BITMAP +0080 +F840 +0BF8 +0800 +0910 +F8A0 +87FC +8040 +8040 +F840 +0BF8 +0840 +0840 +0840 +5040 +2040 +ENDCHAR +STARTCHAR uni38BA +ENCODING 14522 +BBX 15 16 0 -2 +BITMAP +0040 +F820 +09FC +0800 +0888 +7850 +43FE +4040 +4040 +7BFE +0888 +0988 +0850 +0830 +50C8 +2304 +ENDCHAR +STARTCHAR uni38BB +ENCODING 14523 +BBX 15 16 0 -2 +BITMAP +001C +F9E0 +0820 +0820 +0BFE +78A8 +4124 +4242 +4040 +7BFE +0888 +0908 +08D0 +0830 +5048 +2184 +ENDCHAR +STARTCHAR uni38BC +ENCODING 14524 +BBX 13 16 1 -2 +BITMAP +0040 +FA48 +0948 +0950 +0840 +FBF8 +8248 +8248 +82E8 +FB58 +0A48 +0A48 +0A48 +0A08 +5228 +2210 +ENDCHAR +STARTCHAR uni38BD +ENCODING 14525 +BBX 15 15 0 -2 +BITMAP +F7EE +1242 +1242 +1242 +F3CE +8248 +8248 +83C8 +F24E +1242 +12E2 +1742 +1042 +A054 +4048 +ENDCHAR +STARTCHAR uni38BE +ENCODING 14526 +BBX 15 15 0 -2 +BITMAP +FBFE +0850 +0850 +09FC +7954 +4154 +4154 +41FC +7820 +0820 +09FC +0820 +0820 +53FE +2000 +ENDCHAR +STARTCHAR uni38BF +ENCODING 14527 +BBX 15 16 0 -2 +BITMAP +0080 +F8BC +0884 +0908 +09FE +7B20 +4520 +417C +4190 +7910 +09FE +0910 +0928 +0928 +5144 +2182 +ENDCHAR +STARTCHAR uni38C0 +ENCODING 14528 +BBX 15 16 0 -2 +BITMAP +0020 +F820 +0BFE +0820 +09FC +7904 +41FC +4104 +41FC +7904 +09FC +0904 +0BFE +0888 +5104 +2202 +ENDCHAR +STARTCHAR uni38C1 +ENCODING 14529 +BBX 15 16 0 -2 +BITMAP +0088 +F888 +0BFE +0888 +0888 +7BFE +4080 +41FC +4324 +7DFC +0924 +09FC +0924 +0924 +5124 +210C +ENDCHAR +STARTCHAR uni38C2 +ENCODING 14530 +BBX 15 15 0 -2 +BITMAP +FBFE +0800 +09FC +0904 +7904 +41FC +4000 +43FE +7A8A +0A52 +0BFE +0A22 +0A22 +522A +2204 +ENDCHAR +STARTCHAR uni38C3 +ENCODING 14531 +BBX 15 16 0 -2 +BITMAP +0200 +F11E +17C2 +1202 +1482 +F7DE +8050 +8790 +8490 +F79E +1482 +1782 +1482 +1482 +A494 +4588 +ENDCHAR +STARTCHAR uni38C4 +ENCODING 14532 +BBX 15 16 0 -2 +BITMAP +0200 +F97E +0840 +0C7C +0A44 +78FC +4140 +467E +4220 +7820 +0BFE +0870 +08A8 +0924 +5222 +2020 +ENDCHAR +STARTCHAR uni38C5 +ENCODING 14533 +BBX 15 15 0 -2 +BITMAP +FBDE +0888 +0AA8 +0BFE +7988 +42DA +44A6 +41F8 +7908 +0908 +09F8 +0908 +0908 +51F8 +2108 +ENDCHAR +STARTCHAR uni38C6 +ENCODING 14534 +BBX 15 16 0 -2 +BITMAP +07FC +F248 +17FC +1C46 +16EC +F554 +86EC +8554 +86EC +F454 +1408 +17FC +1040 +13F8 +A040 +4FFE +ENDCHAR +STARTCHAR uni38C7 +ENCODING 14535 +BBX 14 16 0 -2 +BITMAP +0800 +0FE0 +1020 +1FC0 +0040 +7FFC +0900 +3200 +CC80 +3080 +CFF8 +0888 +0888 +08A8 +0890 +0080 +ENDCHAR +STARTCHAR uni38C8 +ENCODING 14536 +BBX 15 16 0 -2 +BITMAP +2020 +3C3C +4444 +7878 +0808 +FEFE +5050 +A8A8 +4848 +BEBE +2A2A +2A2A +2A2A +2E2E +0808 +0808 +ENDCHAR +STARTCHAR uni38C9 +ENCODING 14537 +BBX 15 16 0 -2 +BITMAP +0004 +0004 +7F08 +0810 +0820 +0844 +0804 +0808 +0810 +0822 +0842 +0F04 +F008 +4010 +0060 +0180 +ENDCHAR +STARTCHAR uni38CA +ENCODING 14538 +BBX 15 16 0 -2 +BITMAP +0400 +0800 +1FF0 +2820 +4440 +0380 +1C70 +E10E +0600 +3840 +0188 +0610 +3820 +00C0 +0700 +7800 +ENDCHAR +STARTCHAR uni38CB +ENCODING 14539 +BBX 15 16 0 -2 +BITMAP +1100 +1104 +1104 +1108 +7FD0 +1122 +1902 +1504 +1108 +FFD0 +1122 +1102 +1104 +2108 +2110 +4160 +ENDCHAR +STARTCHAR uni38CC +ENCODING 14540 +BBX 14 16 1 -2 +BITMAP +1000 +1008 +1008 +1010 +1F20 +1044 +1004 +1008 +FE10 +8220 +8244 +8204 +8208 +8210 +FE20 +82C0 +ENDCHAR +STARTCHAR uni38CD +ENCODING 14541 +BBX 15 16 0 -2 +BITMAP +0800 +0804 +1004 +2208 +4110 +FFA2 +0082 +0004 +7F08 +4110 +4122 +4102 +4104 +4108 +7F10 +4160 +ENDCHAR +STARTCHAR uni38CE +ENCODING 14542 +BBX 13 16 1 -2 +BITMAP +0200 +0400 +3FE0 +2020 +3FE0 +2020 +3FE0 +0200 +22A0 +4310 +8C88 +3320 +0C40 +3180 +0E00 +7000 +ENDCHAR +STARTCHAR uni38CF +ENCODING 14543 +BBX 15 16 0 -2 +BITMAP +0800 +0804 +FF84 +1408 +2210 +4122 +BE82 +2204 +3E08 +2210 +3E22 +0802 +FF84 +0808 +0810 +0860 +ENDCHAR +STARTCHAR uni38D0 +ENCODING 14544 +BBX 15 16 0 -2 +BITMAP +0800 +1004 +7F04 +4108 +7F10 +4122 +7F02 +0804 +0808 +E890 +2D22 +2A02 +4904 +8888 +2810 +1060 +ENDCHAR +STARTCHAR uni38D1 +ENCODING 14545 +BBX 15 16 0 -2 +BITMAP +0202 +3FC2 +2204 +2F88 +2290 +3FC2 +2282 +2F84 +2208 +2F90 +2A82 +2F82 +4A84 +4F88 +8A90 +09A0 +ENDCHAR +STARTCHAR uni38D2 +ENCODING 14546 +BBX 15 16 0 -2 +BITMAP +4100 +2204 +0004 +FF88 +8890 +AAA2 +9C82 +8884 +FF88 +0010 +7F22 +4102 +7F04 +4108 +7F10 +4160 +ENDCHAR +STARTCHAR uni38D3 +ENCODING 14547 +BBX 15 16 0 -2 +BITMAP +0802 +0DC2 +2844 +3D48 +4490 +A942 +3242 +C404 +2488 +1510 +7FC2 +0E02 +1504 +2488 +C450 +0420 +ENDCHAR +STARTCHAR uni38D4 +ENCODING 14548 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +13FE +2020 +4820 +0820 +1020 +3020 +5020 +9020 +1020 +1020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni38D5 +ENCODING 14549 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +1040 +2040 +4840 +0FFE +1040 +3040 +5040 +90A0 +10A0 +1090 +1110 +1108 +1204 +1402 +ENDCHAR +STARTCHAR uni38D6 +ENCODING 14550 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +1040 +2040 +4BFE +0840 +1040 +30A0 +50A0 +90A0 +1110 +1110 +1288 +1248 +1444 +1802 +ENDCHAR +STARTCHAR uni38D7 +ENCODING 14551 +BBX 14 16 0 -2 +BITMAP +0840 +0820 +1020 +21FC +4904 +0904 +1104 +31FC +5104 +9100 +1100 +1100 +1100 +1200 +1200 +1400 +ENDCHAR +STARTCHAR uni38D8 +ENCODING 14552 +BBX 14 16 0 -2 +BITMAP +0880 +0880 +1100 +21FC +4A04 +0C04 +11E4 +3124 +5124 +9124 +11E4 +1124 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni38D9 +ENCODING 14553 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +2040 +4040 +97FC +1444 +2444 +6444 +A444 +27FC +2444 +2444 +2444 +2444 +27FC +2404 +ENDCHAR +STARTCHAR uni38DA +ENCODING 14554 +BBX 14 16 0 -2 +BITMAP +0800 +0BFC +1204 +2204 +4AF4 +0A04 +1204 +32F4 +5294 +9294 +1294 +12F4 +1204 +1204 +1214 +1208 +ENDCHAR +STARTCHAR uni38DB +ENCODING 14555 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +10A0 +2110 +4A08 +0C06 +13F8 +3000 +5000 +93F8 +1208 +1208 +1208 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni38DC +ENCODING 14556 +BBX 15 16 0 -2 +BITMAP +1002 +17E2 +2242 +424A +924A +124A +224A +67EA +A24A +224A +224A +224A +2242 +2442 +244A +2844 +ENDCHAR +STARTCHAR uni38DD +ENCODING 14557 +BBX 15 16 0 -2 +BITMAP +0828 +0824 +1024 +2020 +4BFE +0820 +1124 +3124 +5124 +93A8 +1128 +1110 +1212 +122A +1446 +1082 +ENDCHAR +STARTCHAR uni38DE +ENCODING 14558 +BBX 15 16 0 -2 +BITMAP +0890 +0890 +1108 +2148 +4A44 +0C92 +1108 +33FC +5094 +9090 +1090 +1090 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni38DF +ENCODING 14559 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1020 +23FE +4820 +0820 +11FC +3000 +5000 +91FC +1104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni38E0 +ENCODING 14560 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +207C +4084 +9588 +1650 +2420 +6450 +A488 +2706 +2460 +2410 +2408 +20C0 +2020 +2010 +ENDCHAR +STARTCHAR uni38E1 +ENCODING 14561 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +2110 +4210 +92FE +1692 +2692 +6A92 +A292 +22FE +2292 +2210 +2210 +2210 +2210 +2210 +ENDCHAR +STARTCHAR uni38E2 +ENCODING 14562 +BBX 15 16 0 -2 +BITMAP +0908 +0888 +1090 +23FC +4824 +0824 +13FC +3220 +5220 +93FE +1062 +10A2 +112A +1224 +1420 +1020 +ENDCHAR +STARTCHAR uni38E3 +ENCODING 14563 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2040 +47FE +9040 +1450 +2248 +6248 +A554 +28A2 +20A0 +2110 +2110 +2208 +2404 +2802 +ENDCHAR +STARTCHAR uni38E4 +ENCODING 14564 +BBX 15 16 0 -2 +BITMAP +0850 +0848 +105E +23E4 +4828 +0832 +10CA +3706 +5050 +9048 +105E +13E4 +1028 +1032 +10CA +1706 +ENDCHAR +STARTCHAR uni38E5 +ENCODING 14565 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +2110 +427C +9210 +1610 +2AFE +6208 +A208 +22FE +2208 +2248 +2228 +2208 +2228 +2210 +ENDCHAR +STARTCHAR uni38E6 +ENCODING 14566 +BBX 15 16 0 -2 +BITMAP +0838 +0BC0 +1040 +2040 +4FFC +0950 +1248 +3486 +5080 +97FC +1110 +1210 +11A0 +1060 +1090 +1308 +ENDCHAR +STARTCHAR uni38E7 +ENCODING 14567 +BBX 15 16 0 -2 +BITMAP +1100 +1208 +2448 +4788 +9108 +1248 +27C8 +6008 +A7C8 +2448 +27C8 +2448 +27CA +244A +244A +24C6 +ENDCHAR +STARTCHAR uni38E8 +ENCODING 14568 +BBX 15 16 0 -2 +BITMAP +1210 +1210 +2210 +4210 +9F7E +1510 +2510 +6510 +A57C +2944 +2544 +2244 +2244 +2544 +257C +2844 +ENDCHAR +STARTCHAR uni38E9 +ENCODING 14569 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +2110 +4110 +97BC +1110 +2110 +6338 +A3B8 +2554 +2554 +2992 +2110 +2110 +2110 +2110 +ENDCHAR +STARTCHAR uni38EA +ENCODING 14570 +BBX 15 16 0 -2 +BITMAP +083C +0FC0 +1244 +2128 +4800 +0BFC +1080 +3080 +57FE +9100 +11F8 +1288 +1250 +1420 +18D8 +1306 +ENDCHAR +STARTCHAR uni38EB +ENCODING 14571 +BBX 15 16 0 -2 +BITMAP +0808 +083C +11E0 +2020 +4BFE +0820 +11FC +3124 +51FC +9124 +11FC +1020 +11FC +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni38EC +ENCODING 14572 +BBX 15 16 0 -2 +BITMAP +0800 +09F8 +1108 +2108 +49F8 +0800 +17FE +3108 +51F8 +9108 +11F8 +1108 +113E +17C8 +1008 +1008 +ENDCHAR +STARTCHAR uni38ED +ENCODING 14573 +BBX 15 16 0 -2 +BITMAP +0800 +0888 +1252 +2222 +4A52 +0A8A +1202 +33FE +5088 +9144 +127A +1088 +1150 +1020 +10D8 +1706 +ENDCHAR +STARTCHAR uni38EE +ENCODING 14574 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +13FE +2020 +4820 +0BFE +128A +3252 +52FA +9222 +1222 +12FA +1222 +1222 +122A +1204 +ENDCHAR +STARTCHAR uni38EF +ENCODING 14575 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +1202 +2202 +4BFE +0A10 +1292 +3254 +52FE +9282 +12FE +1282 +12FE +1482 +148A +1884 +ENDCHAR +STARTCHAR uni38F0 +ENCODING 14576 +BBX 15 16 0 -2 +BITMAP +081C +09E0 +1020 +2124 +48A8 +0BFE +1070 +30A8 +5124 +9222 +1040 +1024 +12A2 +128A +1488 +1078 +ENDCHAR +STARTCHAR uni38F1 +ENCODING 14577 +BBX 15 16 0 -2 +BITMAP +0820 +0BFE +1020 +21FC +4820 +0BFE +1000 +31FC +5104 +91FC +1104 +11FC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni38F2 +ENCODING 14578 +BBX 15 16 0 -2 +BITMAP +1210 +1210 +2A90 +4A90 +9FBE +1024 +2054 +6F94 +A014 +2014 +2F94 +2888 +2888 +2F94 +2894 +2022 +ENDCHAR +STARTCHAR uni38F3 +ENCODING 14579 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +23FC +46A8 +9AA8 +12A8 +27FC +62A8 +A2A8 +22A8 +2FFE +2000 +22A8 +2254 +2454 +2000 +ENDCHAR +STARTCHAR uni38F4 +ENCODING 14580 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +27FC +4110 +9110 +1FFE +2040 +67FC +A444 +27FC +2444 +27FC +2000 +2110 +2208 +2404 +ENDCHAR +STARTCHAR uni38F5 +ENCODING 14581 +BBX 15 16 0 -2 +BITMAP +1010 +1410 +227C +4010 +90FE +1044 +2628 +62FE +A210 +227C +2210 +22FE +2210 +2210 +25FE +2800 +ENDCHAR +STARTCHAR uni38F6 +ENCODING 14582 +BBX 15 16 0 -2 +BITMAP +1040 +1FFE +2000 +47FC +9404 +15F4 +2514 +67FC +A000 +23F8 +2208 +23F8 +2208 +23F8 +2000 +2FFE +ENDCHAR +STARTCHAR uni38F7 +ENCODING 14583 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +27FC +4444 +92A8 +1294 +2474 +6000 +A3F8 +22A8 +2FFE +2000 +27FC +2040 +2140 +2080 +ENDCHAR +STARTCHAR uni38F8 +ENCODING 14584 +BBX 15 16 0 -2 +BITMAP +1508 +1548 +2DA8 +453E +9FA8 +1248 +2448 +6ABE +A308 +2588 +2988 +237E +2540 +2920 +251E +2200 +ENDCHAR +STARTCHAR uni38F9 +ENCODING 14585 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +27FE +44A8 +94FE +1550 +277C +6550 +A57C +2550 +257E +2540 +28A4 +2A8A +328A +2478 +ENDCHAR +STARTCHAR uni38FA +ENCODING 14586 +BBX 15 12 1 0 +BITMAP +0200 +0200 +0200 +0210 +2208 +2284 +2242 +4222 +4210 +8200 +0200 +0E00 +ENDCHAR +STARTCHAR uni38FB +ENCODING 14587 +BBX 15 15 0 -1 +BITMAP +1010 +0820 +0440 +0280 +0100 +0280 +0C60 +3018 +C006 +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni38FC +ENCODING 14588 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +11FC +1044 +1844 +5544 +5144 +5144 +9144 +1244 +1044 +1084 +1084 +1104 +1228 +1410 +ENDCHAR +STARTCHAR uni38FD +ENCODING 14589 +BBX 15 15 0 -1 +BITMAP +0200 +0200 +FFFE +0420 +0820 +1C40 +0380 +0C70 +7008 +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni38FE +ENCODING 14590 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1104 +1144 +1924 +54A8 +5088 +5088 +9050 +1050 +1020 +1020 +1050 +1088 +1104 +1602 +ENDCHAR +STARTCHAR uni38FF +ENCODING 14591 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1080 +18FC +5504 +5204 +5004 +9104 +1084 +1044 +1044 +1004 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni3900 +ENCODING 14592 +BBX 15 15 0 -1 +BITMAP +0300 +0080 +2140 +2220 +2410 +2808 +3006 +2000 +3FFC +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni3901 +ENCODING 14593 +BBX 15 14 0 -1 +BITMAP +3FF8 +0100 +0100 +FFFE +0280 +0440 +0820 +3018 +C106 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni3902 +ENCODING 14594 +BBX 15 15 0 -2 +BITMAP +3FE0 +0820 +0840 +0C78 +0A08 +1210 +1120 +20C0 +4330 +8C0E +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni3903 +ENCODING 14595 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +1880 +5480 +5080 +50FC +9084 +1084 +1084 +1084 +1104 +1104 +1228 +1410 +ENDCHAR +STARTCHAR uni3904 +ENCODING 14596 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +1820 +5420 +51FC +5124 +9124 +1124 +1124 +1134 +1128 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni3905 +ENCODING 14597 +BBX 15 15 0 -1 +BITMAP +7FF8 +0200 +4200 +4200 +7FFC +0480 +0880 +1084 +2084 +C07C +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni3906 +ENCODING 14598 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11E0 +1100 +1900 +55FC +5144 +5144 +9144 +1128 +1128 +1110 +1110 +1228 +1244 +1482 +ENDCHAR +STARTCHAR uni3907 +ENCODING 14599 +BBX 15 16 0 -2 +BITMAP +1010 +1078 +13C0 +1040 +1840 +5440 +5040 +57FE +9040 +10A0 +10A0 +1090 +1110 +1108 +1204 +1402 +ENDCHAR +STARTCHAR uni3908 +ENCODING 14600 +BBX 15 16 0 -2 +BITMAP +1000 +1040 +1020 +1010 +1890 +5480 +5080 +5284 +9282 +1282 +1282 +1488 +1088 +1088 +1078 +1000 +ENDCHAR +STARTCHAR uni3909 +ENCODING 14601 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1010 +1910 +5510 +5110 +5210 +93FE +1030 +1050 +1090 +1110 +1210 +1410 +1050 +1020 +ENDCHAR +STARTCHAR uni390A +ENCODING 14602 +BBX 15 16 0 -2 +BITMAP +1004 +1308 +10D0 +1020 +1850 +5488 +5104 +5000 +9004 +1104 +1088 +1050 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni390B +ENCODING 14603 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +1090 +1888 +5508 +5104 +5204 +95FA +1088 +1088 +1088 +1088 +1108 +1108 +1228 +1410 +ENDCHAR +STARTCHAR uni390C +ENCODING 14604 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +1088 +1BFE +5488 +5088 +5088 +9088 +10F8 +1088 +1088 +1088 +1088 +10F8 +1088 +ENDCHAR +STARTCHAR uni390D +ENCODING 14605 +BBX 15 14 0 -1 +BITMAP +7DFE +1040 +1080 +11FC +1004 +1E04 +E004 +4028 +0110 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni390E +ENCODING 14606 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +7E7C +1244 +1244 +1244 +2244 +227C +4A44 +8400 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni390F +ENCODING 14607 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10F8 +1108 +1B10 +54A0 +5040 +50A0 +9318 +1C06 +10C0 +1020 +1010 +1180 +1060 +1010 +ENDCHAR +STARTCHAR uni3910 +ENCODING 14608 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +01FE +0100 +0100 +3FF8 +2008 +2008 +3FF8 +2008 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni3911 +ENCODING 14609 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +1BFE +5440 +5040 +5080 +90FC +1184 +1284 +1084 +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni3912 +ENCODING 14610 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +1850 +5450 +5088 +5124 +9222 +1020 +11FC +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni3913 +ENCODING 14611 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +1040 +1BFC +5440 +50E0 +50E0 +9150 +1150 +1248 +15F4 +1842 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni3914 +ENCODING 14612 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +1908 +557E +5308 +5508 +9148 +1128 +1128 +1108 +1108 +1108 +1108 +1128 +1110 +ENDCHAR +STARTCHAR uni3915 +ENCODING 14613 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1124 +1124 +1924 +5524 +51FC +5020 +9020 +1124 +1124 +1124 +1124 +1124 +11FC +1004 +ENDCHAR +STARTCHAR uni3916 +ENCODING 14614 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +1A02 +5404 +5000 +5000 +93FE +1020 +1020 +1020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni3917 +ENCODING 14615 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0280 +FFFE +0820 +3118 +C106 +1108 +1144 +2122 +4110 +0700 +ENDCHAR +STARTCHAR uni3918 +ENCODING 14616 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +10F8 +1108 +1A10 +5420 +53FC +5004 +9004 +1004 +11FC +1004 +1004 +1004 +13FC +1004 +ENDCHAR +STARTCHAR uni3919 +ENCODING 14617 +BBX 15 15 0 -1 +BITMAP +3FF8 +2008 +2008 +3FC8 +2048 +2048 +3FC8 +2008 +2008 +3FF8 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni391A +ENCODING 14618 +BBX 15 15 1 -1 +BITMAP +2100 +213C +2200 +2200 +A400 +B500 +A97E +A208 +A208 +2608 +2208 +2208 +2208 +2208 +2238 +ENDCHAR +STARTCHAR uni391B +ENCODING 14619 +BBX 15 16 0 -2 +BITMAP +1080 +1088 +109C +1970 +5510 +5310 +5510 +9110 +11FE +1110 +1110 +1110 +1110 +1110 +117C +1100 +ENDCHAR +STARTCHAR uni391C +ENCODING 14620 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +2024 +2020 +33FE +AA20 +A224 +A224 +A324 +22A8 +2228 +2210 +2212 +242A +2446 +2882 +ENDCHAR +STARTCHAR uni391D +ENCODING 14621 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +1840 +5488 +5104 +53FE +9092 +1090 +1090 +1090 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni391E +ENCODING 14622 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1A02 +5400 +5038 +53C0 +9040 +1040 +107C +17C0 +1040 +1042 +1042 +103E +1000 +ENDCHAR +STARTCHAR uni391F +ENCODING 14623 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +3FF8 +2448 +2448 +3FF8 +2448 +2448 +3FF8 +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni3920 +ENCODING 14624 +BBX 15 15 0 -1 +BITMAP +7F84 +0824 +1024 +3F24 +5124 +0A24 +0404 +0804 +3014 +C008 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni3921 +ENCODING 14625 +BBX 14 16 0 -2 +BITMAP +2004 +2004 +2FC4 +2214 +3214 +ABD4 +A254 +A454 +A654 +2554 +2894 +2094 +2104 +2204 +2414 +2808 +ENDCHAR +STARTCHAR uni3922 +ENCODING 14626 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FE +1080 +1900 +55FC +5304 +5504 +99FC +1104 +1104 +11FC +1104 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni3923 +ENCODING 14627 +BBX 15 15 0 -1 +BITMAP +1010 +0820 +7FFC +0820 +0820 +FFFE +0820 +1020 +2020 +4120 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni3924 +ENCODING 14628 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1222 +1A22 +57FE +5222 +5222 +93FE +1020 +1120 +10A0 +1040 +10A0 +1118 +1606 +ENDCHAR +STARTCHAR uni3925 +ENCODING 14629 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +17FE +1840 +5484 +5108 +53F0 +9022 +1044 +1188 +1610 +1020 +1050 +1188 +1604 +ENDCHAR +STARTCHAR uni3926 +ENCODING 14630 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +2FFE +3040 +A840 +A7FC +A444 +A444 +27FC +2040 +2240 +2140 +2080 +2140 +2230 +2C0E +ENDCHAR +STARTCHAR uni3927 +ENCODING 14631 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11E0 +1100 +1900 +55FE +5100 +5100 +917C +1144 +1144 +1144 +1144 +127C +1244 +1400 +ENDCHAR +STARTCHAR uni3928 +ENCODING 14632 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +1088 +1BFE +5488 +5088 +5088 +9088 +17FE +1000 +1088 +1084 +1104 +1202 +1402 +ENDCHAR +STARTCHAR uni3929 +ENCODING 14633 +BBX 15 16 0 -2 +BITMAP +0800 +0FF0 +1020 +2C40 +0380 +1C70 +E00E +1FF0 +1010 +1010 +1FF0 +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni392A +ENCODING 14634 +BBX 15 14 0 -1 +BITMAP +FFFE +1000 +10F8 +3E88 +4288 +A4A8 +1894 +1084 +207C +C100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni392B +ENCODING 14635 +BBX 15 16 0 -2 +BITMAP +0400 +0400 +7FFC +0800 +1FF0 +2810 +4FF0 +8810 +0FF0 +0810 +0850 +0A20 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni392C +ENCODING 14636 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1820 +5420 +5020 +53FE +9000 +1020 +1020 +11FC +1020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni392D +ENCODING 14637 +BBX 15 16 0 -2 +BITMAP +1010 +1078 +13C0 +1040 +1840 +57FE +50A0 +5110 +9208 +1516 +1110 +1110 +1110 +1210 +1210 +1410 +ENDCHAR +STARTCHAR uni392E +ENCODING 14638 +BBX 15 15 0 -1 +BITMAP +2200 +1400 +19FC +2420 +4C20 +14F8 +2420 +4420 +05FC +2800 +1100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni392F +ENCODING 14639 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1252 +1A8A +5706 +5202 +52FA +928A +128A +128A +12FA +128A +1202 +120A +1204 +ENDCHAR +STARTCHAR uni3930 +ENCODING 14640 +BBX 15 16 0 -2 +BITMAP +0900 +0900 +11FE +1280 +3480 +50FC +9080 +1080 +10FC +1080 +1080 +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni3931 +ENCODING 14641 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1000 +1000 +19F8 +5508 +5108 +5108 +91F8 +1000 +1108 +1088 +1090 +1000 +17FE +1000 +ENDCHAR +STARTCHAR uni3932 +ENCODING 14642 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +1110 +1110 +2928 +4544 +0280 +0440 +0820 +3018 +C106 +0888 +28A4 +2824 +47E0 +ENDCHAR +STARTCHAR uni3933 +ENCODING 14643 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1010 +1820 +5468 +50A4 +5322 +9020 +1000 +11FC +1104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni3934 +ENCODING 14644 +BBX 15 16 0 -2 +BITMAP +2000 +2FFE +2480 +2490 +3490 +AF90 +A490 +A490 +A490 +2790 +2490 +2492 +24D2 +2F92 +208E +2080 +ENDCHAR +STARTCHAR uni3935 +ENCODING 14645 +BBX 15 16 0 -2 +BITMAP +0040 +7E40 +047E +0888 +0E88 +1948 +E850 +0820 +0850 +2888 +1306 +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni3936 +ENCODING 14646 +BBX 15 16 0 -2 +BITMAP +1090 +1088 +1080 +13FE +18A0 +54A8 +50B0 +50A4 +90A8 +10B0 +1124 +112A +1132 +1222 +12DE +1400 +ENDCHAR +STARTCHAR uni3937 +ENCODING 14647 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +1110 +1A88 +5446 +51F0 +5010 +9020 +1040 +13F8 +1208 +1208 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni3938 +ENCODING 14648 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +13FC +1840 +5440 +5040 +57FE +9090 +1294 +1292 +1492 +1912 +1110 +1210 +1450 +1820 +ENDCHAR +STARTCHAR uni3939 +ENCODING 14649 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +1048 +1840 +57FE +5040 +5244 +9164 +1168 +10D0 +1150 +1248 +1444 +1042 +1140 +1080 +ENDCHAR +STARTCHAR uni393A +ENCODING 14650 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +2FFE +2200 +3200 +AA00 +A3F8 +A000 +A248 +2248 +2248 +2248 +2248 +244A +244A +2806 +ENDCHAR +STARTCHAR uni393B +ENCODING 14651 +BBX 15 15 0 -1 +BITMAP +0600 +387C +2244 +3264 +2A54 +2244 +2A54 +3248 +0440 +1840 +6100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni393C +ENCODING 14652 +BBX 14 16 0 -2 +BITMAP +1110 +1110 +1110 +1390 +193C +5514 +5114 +57D4 +9114 +1114 +1214 +1294 +17D4 +1224 +1054 +1088 +ENDCHAR +STARTCHAR uni393D +ENCODING 14653 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1820 +55FC +5040 +53FE +9048 +1088 +10FE +1108 +1148 +1228 +1408 +1028 +1010 +ENDCHAR +STARTCHAR uni393E +ENCODING 14654 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1252 +1888 +5504 +5020 +5020 +93FE +1020 +1070 +10A8 +1124 +1622 +1020 +1020 +ENDCHAR +STARTCHAR uni393F +ENCODING 14655 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +17FE +1110 +1A48 +5446 +53F8 +5248 +9248 +13F8 +1248 +1248 +13F8 +1042 +1042 +103E +ENDCHAR +STARTCHAR uni3940 +ENCODING 14656 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +13FC +1040 +1840 +55F8 +5108 +51F8 +9108 +11F8 +1108 +11F8 +1108 +1108 +17FE +1000 +ENDCHAR +STARTCHAR uni3941 +ENCODING 14657 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +1FF0 +1290 +1290 +5290 +5FF0 +4000 +7FFC +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni3942 +ENCODING 14658 +BBX 15 16 0 -2 +BITMAP +1000 +13F8 +1208 +13F8 +1A08 +57F8 +5000 +53FC +9010 +17FE +1010 +1210 +1110 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni3943 +ENCODING 14659 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +1252 +1BDE +5652 +5252 +53DE +9202 +1202 +1202 +1202 +1202 +1202 +120A +1204 +ENDCHAR +STARTCHAR uni3944 +ENCODING 14660 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1820 +5420 +53FE +5088 +9144 +1242 +10F8 +1188 +1250 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni3945 +ENCODING 14661 +BBX 15 16 0 -2 +BITMAP +101C +13E0 +1084 +1A44 +5548 +5110 +57FE +9402 +1000 +13F8 +1108 +1110 +10A0 +1040 +11B0 +160E +ENDCHAR +STARTCHAR uni3946 +ENCODING 14662 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +13F8 +1848 +5448 +57FE +5048 +9048 +13F8 +1444 +12E8 +1150 +1248 +1446 +1140 +1080 +ENDCHAR +STARTCHAR uni3947 +ENCODING 14663 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +105E +13E4 +1828 +5432 +50CA +5706 +9050 +1048 +105E +13E4 +1028 +1032 +10CA +1706 +ENDCHAR +STARTCHAR uni3948 +ENCODING 14664 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +FE3E +9220 +9220 +92FC +9A84 +9484 +10FC +1100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni3949 +ENCODING 14665 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +1000 +1908 +5490 +5000 +53FE +9000 +1000 +11FC +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni394A +ENCODING 14666 +BBX 14 16 0 -2 +BITMAP +2000 +27BC +24A4 +24A4 +34A4 +AFBC +A4A4 +A4A4 +A4A4 +27BC +24A4 +24A4 +24A4 +24A4 +2AA4 +314C +ENDCHAR +STARTCHAR uni394B +ENCODING 14667 +BBX 15 15 0 -1 +BITMAP +0840 +0820 +17FE +1040 +30A4 +51A8 +9290 +1488 +10C4 +1082 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni394C +ENCODING 14668 +BBX 14 16 0 -2 +BITMAP +1100 +1100 +11FC +1A04 +5484 +5494 +52A4 +9084 +17FC +1084 +11C4 +12A4 +1494 +1084 +10A8 +1010 +ENDCHAR +STARTCHAR uni394D +ENCODING 14669 +BBX 15 16 0 -2 +BITMAP +1108 +1108 +17FE +1108 +1908 +55F8 +5108 +5108 +91F8 +1108 +1108 +17FE +1000 +1090 +1108 +1204 +ENDCHAR +STARTCHAR uni394E +ENCODING 14670 +BBX 15 15 0 -1 +BITMAP +0C80 +7080 +11FC +FD24 +3224 +3844 +5444 +5084 +9104 +1228 +1110 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni394F +ENCODING 14671 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1090 +13FC +1A94 +5694 +5294 +53FC +9294 +1294 +1294 +17FE +1000 +1090 +1108 +1204 +ENDCHAR +STARTCHAR uni3950 +ENCODING 14672 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0C60 +3018 +C7C6 +0000 +3EF8 +2288 +2288 +3EA8 +0090 +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni3951 +ENCODING 14673 +BBX 15 14 0 -1 +BITMAP +7FFC +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +7FFE +4102 +8884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni3952 +ENCODING 14674 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13C0 +1044 +1A24 +5528 +5100 +5020 +93FE +1070 +10A8 +10A8 +1124 +1222 +1420 +1020 +ENDCHAR +STARTCHAR uni3953 +ENCODING 14675 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +13FC +18A0 +5510 +5208 +57FE +9008 +13C8 +1248 +1248 +1248 +13C8 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni3954 +ENCODING 14676 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1880 +5504 +53FE +5002 +91FC +1104 +11FC +1104 +11FC +1104 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni3955 +ENCODING 14677 +BBX 15 16 0 -2 +BITMAP +0100 +0910 +0920 +12C0 +0430 +1908 +6914 +0910 +12A0 +0440 +1830 +600C +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni3956 +ENCODING 14678 +BBX 15 16 0 -2 +BITMAP +0090 +7890 +4908 +4908 +6A44 +5C52 +4888 +FDF8 +4808 +4840 +4824 +4AA2 +4A8A +4C88 +8878 +1800 +ENDCHAR +STARTCHAR uni3957 +ENCODING 14679 +BBX 15 16 0 -2 +BITMAP +11FC +1104 +1104 +11FC +1904 +5504 +51FC +5040 +9020 +13FE +1088 +1088 +1050 +1020 +10D8 +1706 +ENDCHAR +STARTCHAR uni3958 +ENCODING 14680 +BBX 15 16 0 -2 +BITMAP +2200 +2200 +227E +2712 +3212 +AA52 +A252 +AFD2 +A252 +2292 +2412 +2512 +2FA2 +24A2 +204A +2084 +ENDCHAR +STARTCHAR uni3959 +ENCODING 14681 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1124 +1924 +5524 +51FC +5020 +9040 +1020 +10A4 +1282 +128A +128A +1478 +1000 +ENDCHAR +STARTCHAR uni395A +ENCODING 14682 +BBX 15 16 0 -2 +BITMAP +2040 +2140 +265C +3444 +AC44 +A75C +A444 +A444 +27FC +2444 +20A0 +20A0 +2110 +2208 +2404 +2802 +ENDCHAR +STARTCHAR uni395B +ENCODING 14683 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1008 +1810 +5420 +53AE +52A2 +92AA +12A4 +12A4 +13AA +1032 +10A0 +1040 +17FE +1000 +ENDCHAR +STARTCHAR uni395C +ENCODING 14684 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1222 +1BFE +5622 +53FE +5000 +91FC +1104 +11FC +1104 +11FC +1104 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni395D +ENCODING 14685 +BBX 15 16 0 -2 +BITMAP +2000 +277E +2124 +3124 +A93C +A724 +A424 +A43C +2424 +2724 +2126 +217C +2104 +2104 +2A04 +2404 +ENDCHAR +STARTCHAR uni395E +ENCODING 14686 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +1000 +13FE +1840 +54C2 +5122 +5254 +9098 +1138 +1254 +1094 +1112 +1610 +1050 +1020 +ENDCHAR +STARTCHAR uni395F +ENCODING 14687 +BBX 15 16 0 -2 +BITMAP +1100 +11F8 +1208 +13F0 +1810 +57FE +5080 +5144 +9668 +10B0 +1128 +1668 +10A4 +1122 +16A0 +1040 +ENDCHAR +STARTCHAR uni3960 +ENCODING 14688 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1022 +1920 +553C +5120 +52FE +9400 +11FC +1104 +11FC +1104 +11FC +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni3961 +ENCODING 14689 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1204 +13FC +1A00 +5698 +52E0 +5284 +927C +1220 +13FE +1270 +14A8 +1524 +1A22 +1020 +ENDCHAR +STARTCHAR uni3962 +ENCODING 14690 +BBX 15 16 0 -2 +BITMAP +1108 +1088 +1090 +17FE +1890 +5490 +53FC +5294 +9294 +130C +1204 +13FC +1204 +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni3963 +ENCODING 14691 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0920 +37D8 +C106 +1FF0 +0100 +0FE0 +0100 +3FF8 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni3964 +ENCODING 14692 +BBX 15 15 0 -1 +BITMAP +0020 +7E20 +1450 +0888 +7F44 +2A22 +49F8 +8808 +2810 +1020 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni3965 +ENCODING 14693 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +1124 +11FC +1924 +5524 +51FC +5020 +9020 +13FE +1222 +122A +12FA +120A +1202 +1206 +ENDCHAR +STARTCHAR uni3966 +ENCODING 14694 +BBX 15 16 0 -2 +BITMAP +3FFC +2080 +2FF8 +2080 +2490 +2490 +2AA8 +3144 +2220 +2410 +3FFE +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni3967 +ENCODING 14695 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1040 +19FC +5504 +5104 +51FC +9104 +11FC +1104 +1104 +11FC +1000 +1088 +1104 +ENDCHAR +STARTCHAR uni3968 +ENCODING 14696 +BBX 15 16 0 -2 +BITMAP +1020 +10F8 +FC20 +2420 +25FC +4800 +2820 +10F8 +2820 +4420 +81FC +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni3969 +ENCODING 14697 +BBX 15 16 0 -2 +BITMAP +1040 +1044 +13F4 +1848 +5450 +57FE +5040 +9080 +11F8 +1308 +1508 +11F8 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni396A +ENCODING 14698 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +10A8 +1020 +1BFE +54A8 +5124 +5202 +9040 +17FE +1088 +1108 +1190 +1060 +1198 +1604 +ENDCHAR +STARTCHAR uni396B +ENCODING 14699 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +17FE +1000 +19F8 +5508 +51F8 +5000 +93FC +1204 +1204 +13FC +1204 +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni396C +ENCODING 14700 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +3208 +A910 +A7FE +A402 +A884 +2040 +27FC +2100 +21F8 +2108 +2208 +2228 +2410 +ENDCHAR +STARTCHAR uni396D +ENCODING 14701 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +19FC +5440 +53FE +5088 +9124 +1222 +1124 +10A8 +1124 +1222 +10A0 +1040 +ENDCHAR +STARTCHAR uni396E +ENCODING 14702 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +11FC +1244 +1954 +55F4 +5084 +5128 +9290 +11FC +1244 +1554 +11F4 +1084 +1128 +1210 +ENDCHAR +STARTCHAR uni396F +ENCODING 14703 +BBX 15 15 1 -1 +BITMAP +0018 +1FE0 +1110 +2208 +5FE8 +0080 +7FFC +0008 +FFFE +0008 +3FF8 +0100 +2888 +4814 +87F2 +ENDCHAR +STARTCHAR uni3970 +ENCODING 14704 +BBX 15 16 0 -2 +BITMAP +10A0 +132E +1222 +1222 +1BAE +5622 +5222 +53FE +9020 +13FE +1104 +1088 +1050 +1020 +10D8 +1306 +ENDCHAR +STARTCHAR uni3971 +ENCODING 14705 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1228 +1228 +1AEE +5628 +5228 +52EE +9228 +1228 +12EE +1228 +1228 +1228 +13FE +1000 +ENDCHAR +STARTCHAR uni3972 +ENCODING 14706 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +FFFE +1010 +2008 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni3973 +ENCODING 14707 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2420 +2440 +35FC +AD04 +A5FC +A504 +A5FC +2524 +2420 +24A8 +2924 +2A22 +30A0 +2040 +ENDCHAR +STARTCHAR uni3974 +ENCODING 14708 +BBX 15 16 0 -2 +BITMAP +2004 +203E +27E0 +343E +AC20 +A5FE +A522 +A538 +25E2 +251E +2500 +2978 +2A48 +324A +248A +2906 +ENDCHAR +STARTCHAR uni3975 +ENCODING 14709 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2402 +25FA +3442 +ACC2 +A52A +A46A +A4B2 +252A +246A +24AA +2522 +2442 +27FE +2402 +ENDCHAR +STARTCHAR uni3976 +ENCODING 14710 +BBX 15 15 0 -1 +BITMAP +0100 +7FFE +4442 +9FF4 +0440 +3FF8 +0440 +FFFE +0820 +1210 +2108 +C906 +2828 +2824 +47E4 +ENDCHAR +STARTCHAR uni3977 +ENCODING 14711 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +2FFE +2248 +2248 +2554 +28A2 +2318 +2C06 +2080 +4A44 +4A4A +920A +01F8 +ENDCHAR +STARTCHAR uni3978 +ENCODING 14712 +BBX 15 15 0 -2 +BITMAP +FDFC +8524 +8524 +FDFC +9124 +9124 +91FC +FD04 +9000 +9020 +9014 +9552 +B542 +CE48 +8438 +ENDCHAR +STARTCHAR uni3979 +ENCODING 14713 +BBX 15 15 0 -1 +BITMAP +1010 +5450 +3888 +1104 +FEFA +1048 +3848 +5488 +9128 +1210 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni397A +ENCODING 14714 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1820 +5420 +53FE +5080 +9104 +13FE +1002 +13FC +1294 +1294 +1294 +17FE +1000 +ENDCHAR +STARTCHAR uni397B +ENCODING 14715 +BBX 15 16 0 -2 +BITMAP +0028 +0024 +3FFE +20A0 +2F24 +2224 +2FA8 +2218 +2B12 +52AA +4A46 +8482 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni397C +ENCODING 14716 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2040 +3278 +AA40 +AFFE +A100 +A1FC +2200 +23FC +2004 +2554 +2554 +2804 +2028 +2010 +ENDCHAR +STARTCHAR uni397D +ENCODING 14717 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1020 +19FC +5420 +53FE +5000 +91FC +1104 +11FC +1104 +11FC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni397E +ENCODING 14718 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1248 +1248 +1BFE +5648 +5220 +53FE +9240 +12FC +1344 +1244 +127C +1200 +13FE +1000 +ENDCHAR +STARTCHAR uni397F +ENCODING 14719 +BBX 15 15 0 -1 +BITMAP +0820 +7F20 +087E +7E44 +08A4 +FF28 +1010 +1E28 +2244 +4682 +8100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni3980 +ENCODING 14720 +BBX 15 16 0 -2 +BITMAP +2020 +247C +2284 +3148 +A830 +A0CE +A610 +A27C +2210 +227C +2210 +22FE +2210 +2210 +25FE +2800 +ENDCHAR +STARTCHAR uni3981 +ENCODING 14721 +BBX 15 16 0 -2 +BITMAP +0040 +27FC +1040 +13F8 +0248 +73F8 +1248 +13F8 +1040 +17FC +2840 +47FE +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni3982 +ENCODING 14722 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +3FFC +2004 +4FE8 +0820 +0FE0 +0100 +3FF8 +2108 +2118 +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni3983 +ENCODING 14723 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FC +1800 +5508 +5090 +53FE +9220 +12A0 +12FC +1320 +1220 +12FC +1420 +1420 +19FE +ENDCHAR +STARTCHAR uni3984 +ENCODING 14724 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +3FFE +2220 +2220 +2F7C +2220 +2770 +2AA8 +3224 +2080 +2048 +4A44 +4A14 +91F0 +ENDCHAR +STARTCHAR uni3985 +ENCODING 14725 +BBX 15 16 0 -2 +BITMAP +22A8 +22A8 +27FC +32A8 +AAAA +A4E6 +A800 +A7FC +2444 +2040 +23F8 +2248 +2248 +2248 +2258 +2040 +ENDCHAR +STARTCHAR uni3986 +ENCODING 14726 +BBX 15 16 0 -2 +BITMAP +1040 +107C +1040 +1BFE +5642 +5278 +53C4 +923C +1208 +12F0 +1324 +12A8 +15FE +1420 +18A0 +1040 +ENDCHAR +STARTCHAR uni3987 +ENCODING 14727 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1250 +1A50 +57FE +5252 +5252 +93FE +1200 +1292 +12D4 +1298 +1492 +14D2 +188E +ENDCHAR +STARTCHAR uni3988 +ENCODING 14728 +BBX 15 16 0 -2 +BITMAP +2208 +2110 +2000 +27FC +3040 +ABF8 +A040 +A7FC +A000 +23F8 +22A8 +22A8 +22A8 +22A8 +2FFE +2000 +ENDCHAR +STARTCHAR uni3989 +ENCODING 14729 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1020 +19FC +5400 +53FE +5202 +91FC +1000 +11FC +1104 +11FC +1104 +1088 +13FE +1000 +ENDCHAR +STARTCHAR uni398A +ENCODING 14730 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +1000 +19FC +54A8 +50A8 +53FE +90A8 +10A8 +11FC +1020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni398B +ENCODING 14731 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +3110 +AA48 +A446 +A3F8 +A050 +27FC +2080 +23F8 +2D08 +21F8 +2108 +21F8 +2108 +ENDCHAR +STARTCHAR uni398C +ENCODING 14732 +BBX 15 16 0 -2 +BITMAP +01F0 +3E00 +03F0 +3E00 +03FA +7E02 +01FE +0C20 +703C +1DE2 +F022 +1C1E +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni398D +ENCODING 14733 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +1252 +1BDE +5488 +5050 +53FE +9020 +1124 +1124 +11FC +1024 +1040 +1080 +1100 +ENDCHAR +STARTCHAR uni398E +ENCODING 14734 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1024 +13FE +1824 +55FC +5020 +53FE +9000 +11FC +1124 +11FC +1124 +11FC +1000 +13FE +ENDCHAR +STARTCHAR uni398F +ENCODING 14735 +BBX 15 16 0 -2 +BITMAP +2000 +27BC +24A4 +27BC +3420 +ACA4 +A39C +A000 +A110 +27FC +2110 +2110 +2FFE +2110 +2208 +2404 +ENDCHAR +STARTCHAR uni3990 +ENCODING 14736 +BBX 15 16 0 -2 +BITMAP +1014 +17FE +1010 +1BD0 +5410 +53D0 +5010 +93D0 +1250 +13D0 +1250 +13C8 +124A +13CA +1186 +1242 +ENDCHAR +STARTCHAR uni3991 +ENCODING 14737 +BBX 15 16 0 -2 +BITMAP +2008 +2788 +2088 +3110 +AFDE +A494 +A4A4 +A794 +2494 +2794 +2494 +24C8 +2788 +2C94 +20A4 +20C2 +ENDCHAR +STARTCHAR uni3992 +ENCODING 14738 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1252 +1252 +1BFE +5420 +53FE +5000 +91FC +1000 +11FC +1000 +11FC +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni3993 +ENCODING 14739 +BBX 15 16 0 -2 +BITMAP +1110 +1114 +11D2 +1250 +1A7E +5550 +5090 +52A8 +9128 +1144 +1244 +1482 +1008 +12A4 +1252 +1452 +ENDCHAR +STARTCHAR uni3994 +ENCODING 14740 +BBX 15 16 0 -2 +BITMAP +3E10 +2214 +3E12 +2210 +3EFE +0010 +3E28 +2228 +3E28 +2244 +3E44 +2282 +2700 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni3995 +ENCODING 14741 +BBX 15 16 0 -2 +BITMAP +2020 +2720 +253C +2544 +35A8 +AE10 +A528 +A546 +A538 +2510 +2550 +267E +2490 +247C +2410 +24FE +ENDCHAR +STARTCHAR uni3996 +ENCODING 14742 +BBX 15 16 0 -2 +BITMAP +2000 +279E +2492 +279E +3492 +AF9E +A442 +A422 +A40A +2546 +2542 +2552 +2632 +2402 +240A +2404 +ENDCHAR +STARTCHAR uni3997 +ENCODING 14743 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27BC +3110 +ABB8 +A554 +A912 +A000 +23F8 +2000 +27FC +2040 +2248 +2444 +2942 +2080 +ENDCHAR +STARTCHAR uni3998 +ENCODING 14744 +BBX 15 16 0 -2 +BITMAP +1020 +7E20 +423E +7E44 +42A4 +7E24 +1028 +FF28 +2010 +3E28 +4244 +8682 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni3999 +ENCODING 14745 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +11FC +1924 +55FC +5020 +53FE +922A +12FA +120A +1246 +1020 +10A4 +128A +128A +1478 +ENDCHAR +STARTCHAR uni399A +ENCODING 14746 +BBX 15 16 0 -2 +BITMAP +4010 +2008 +2108 +F8BE +0080 +5014 +2208 +FA3E +2208 +2A48 +7A3C +2AA8 +2AA8 +5288 +4188 +8008 +ENDCHAR +STARTCHAR uni399B +ENCODING 14747 +BBX 15 15 0 -1 +BITMAP +0A00 +33B8 +2208 +3BB8 +2088 +3AB8 +2288 +FFFE +0820 +1210 +2108 +C906 +2828 +2824 +47E4 +ENDCHAR +STARTCHAR uni399C +ENCODING 14748 +BBX 15 16 0 -2 +BITMAP +2108 +27FE +2148 +2220 +37FE +AA20 +A3FC +A220 +A3FC +2220 +23FE +2200 +27F8 +2110 +20E0 +2F1E +ENDCHAR +STARTCHAR uni399D +ENCODING 14749 +BBX 15 16 0 -2 +BITMAP +3C20 +D040 +4DFC +3104 +C9FC +1504 +25FC +CC50 +1450 +2492 +D50E +0A00 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni399E +ENCODING 14750 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0100 +3FF8 +0000 +FFFE +0002 +3FF0 +0100 +FFFE +0010 +7DFC +4490 +7D30 +4894 +87F2 +ENDCHAR +STARTCHAR uni399F +ENCODING 14751 +BBX 15 16 0 -2 +BITMAP +31FC +CB24 +2D24 +31FC +C924 +1524 +25FC +CC20 +15FC +2420 +D420 +0BFE +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni39A0 +ENCODING 14752 +BBX 15 16 0 -2 +BITMAP +2284 +2284 +2AA4 +26C4 +329E +AFE4 +A004 +A454 +A28C +2FE4 +2104 +27C4 +2104 +21C4 +2E14 +2008 +ENDCHAR +STARTCHAR uni39A1 +ENCODING 14753 +BBX 15 16 0 -2 +BITMAP +2444 +24E4 +28A8 +3AAA +AEEE +A4A4 +AAAA +AEEE +2242 +2040 +2FFE +20E0 +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni39A2 +ENCODING 14754 +BBX 15 16 0 -2 +BITMAP +1108 +1108 +11EE +1294 +1842 +5400 +53DE +5252 +93D2 +1252 +13D2 +121A +1294 +1350 +1210 +1010 +ENDCHAR +STARTCHAR uni39A3 +ENCODING 14755 +BBX 15 16 0 -2 +BITMAP +2100 +479C +8280 +17C0 +203E +6788 +A488 +2788 +2108 +27C8 +2908 +2FE8 +2110 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni39A4 +ENCODING 14756 +BBX 15 16 0 -2 +BITMAP +1040 +FE40 +107C +7C84 +0028 +FE20 +8220 +7C50 +0088 +7D26 +4410 +7C54 +4542 +2F4A +F238 +4000 +ENDCHAR +STARTCHAR uni39A5 +ENCODING 14757 +BBX 15 16 0 -2 +BITMAP +2040 +2FFE +2842 +27FC +3040 +ABF8 +A040 +A7FC +A040 +27FC +24A4 +27FC +2040 +2524 +252A +28FA +ENDCHAR +STARTCHAR uni39A6 +ENCODING 14758 +BBX 15 16 0 -2 +BITMAP +2000 +279E +2492 +379E +AC92 +A79E +A482 +A532 +2512 +25B2 +2512 +25F2 +24A2 +252A +261A +2404 +ENDCHAR +STARTCHAR uni39A7 +ENCODING 14759 +BBX 15 16 0 -2 +BITMAP +2108 +2528 +27BE +2948 +37BE +AB18 +A5AA +A946 +A3F8 +2208 +2208 +23F8 +2208 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni39A8 +ENCODING 14760 +BBX 14 16 0 -2 +BITMAP +27BC +24A4 +27BC +24A4 +37BC +AC44 +A5F4 +A444 +A5F4 +2554 +25F4 +2554 +25F4 +24E4 +2554 +244C +ENDCHAR +STARTCHAR uni39A9 +ENCODING 14761 +BBX 15 16 0 -2 +BITMAP +201C +2EE0 +2A54 +2A28 +3A7C +AC10 +AAFE +AA00 +AAFC +2A04 +2A7C +2C04 +28FC +2814 +294A +2A38 +ENDCHAR +STARTCHAR uni39AA +ENCODING 14762 +BBX 15 16 0 -2 +BITMAP +2248 +22E8 +2308 +36EA +AA1C +A2E8 +A208 +A2E8 +25B4 +28E2 +2000 +23F8 +2110 +20E0 +2318 +2C06 +ENDCHAR +STARTCHAR uni39AB +ENCODING 14763 +BBX 15 16 0 -2 +BITMAP +2528 +27BE +2948 +37BE +AB18 +A5AA +A946 +A3FC +2204 +23FC +2204 +23FC +2204 +23FC +2108 +2204 +ENDCHAR +STARTCHAR uni39AC +ENCODING 14764 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +24A4 +24A4 +37FC +AA10 +A2A8 +A4BE +AF68 +223C +24A8 +2FBC +2028 +2AA8 +2ABE +2020 +ENDCHAR +STARTCHAR uni39AD +ENCODING 14765 +BBX 15 16 0 -2 +BITMAP +27FC +2040 +2FFE +2842 +3358 +A840 +A358 +A000 +AEEE +2AAA +2EEE +2000 +2FFE +2248 +2554 +2FFE +ENDCHAR +STARTCHAR uni39AE +ENCODING 14766 +BBX 13 16 1 -2 +BITMAP +0480 +0440 +07F0 +FC00 +0400 +07F0 +7C00 +0400 +05F8 +FE20 +0240 +0280 +0308 +1C88 +E068 +0018 +ENDCHAR +STARTCHAR uni39AF +ENCODING 14767 +BBX 15 16 0 -2 +BITMAP +0048 +0044 +0040 +FFFE +0040 +0840 +0844 +1044 +2244 +7F28 +0128 +0012 +0F32 +F04A +4086 +0302 +ENDCHAR +STARTCHAR uni39B0 +ENCODING 14768 +BBX 15 16 0 -2 +BITMAP +2250 +2248 +2248 +5540 +88C0 +0040 +FFFE +0040 +0040 +0024 +0028 +0012 +0032 +00CA +0306 +0002 +ENDCHAR +STARTCHAR uni39B1 +ENCODING 14769 +BBX 15 16 0 -2 +BITMAP +0040 +0048 +7F44 +0044 +0040 +FFFE +0040 +0844 +0844 +7F44 +0828 +082A +0F12 +F02A +4046 +0082 +ENDCHAR +STARTCHAR uni39B2 +ENCODING 14770 +BBX 15 16 0 -2 +BITMAP +0840 +0848 +7F44 +0844 +0840 +FFFE +1040 +1044 +1F44 +1144 +1128 +112A +2112 +252A +4246 +8082 +ENDCHAR +STARTCHAR uni39B3 +ENCODING 14771 +BBX 15 16 0 -2 +BITMAP +0840 +0848 +7F44 +0844 +0840 +FFFE +0040 +0844 +0844 +7F44 +0828 +082A +0F12 +F02A +4046 +0082 +ENDCHAR +STARTCHAR uni39B4 +ENCODING 14772 +BBX 15 16 0 -2 +BITMAP +0048 +0044 +0040 +FFFE +2040 +3E40 +4244 +B444 +0C44 +3228 +C128 +7E12 +4232 +424A +7E86 +4302 +ENDCHAR +STARTCHAR uni39B5 +ENCODING 14773 +BBX 15 16 0 -2 +BITMAP +0828 +4824 +4824 +7F20 +482E +88F0 +0820 +FFA4 +1824 +1C28 +2A28 +2910 +4912 +882A +0846 +0882 +ENDCHAR +STARTCHAR uni39B6 +ENCODING 14774 +BBX 15 16 0 -2 +BITMAP +0048 +0044 +0040 +FFFE +0040 +7F40 +1044 +2244 +7F44 +0928 +3E28 +0812 +0F32 +F04A +0086 +0302 +ENDCHAR +STARTCHAR uni39B7 +ENCODING 14775 +BBX 15 16 0 -2 +BITMAP +0028 +FC24 +0424 +6820 +102E +FEF0 +9220 +9224 +FE24 +9228 +9228 +FE10 +9212 +922A +9246 +8682 +ENDCHAR +STARTCHAR uni39B8 +ENCODING 14776 +BBX 15 16 0 -2 +BITMAP +0828 +0824 +0FA4 +0820 +7F2E +41F0 +7F20 +4124 +7F24 +4928 +0828 +FF90 +0812 +082A +0846 +0882 +ENDCHAR +STARTCHAR uni39B9 +ENCODING 14777 +BBX 15 16 0 -2 +BITMAP +0020 +7C28 +4424 +7C24 +4420 +7C3E +01E0 +FE24 +4024 +7E28 +AA28 +2A10 +4A32 +924A +2A86 +4502 +ENDCHAR +STARTCHAR uni39BA +ENCODING 14778 +BBX 15 16 0 -2 +BITMAP +0028 +7FA4 +4024 +5F20 +402E +7FF0 +5520 +5224 +5924 +50A8 +4228 +7F90 +5212 +4A2A +8246 +0682 +ENDCHAR +STARTCHAR uni39BB +ENCODING 14779 +BBX 15 16 0 -2 +BITMAP +0028 +EF24 +2124 +A920 +652E +A9F0 +2120 +1024 +7E24 +4228 +4228 +7E10 +4212 +422A +7E46 +4282 +ENDCHAR +STARTCHAR uni39BC +ENCODING 14780 +BBX 15 16 0 -2 +BITMAP +0828 +0824 +7F24 +1020 +3E2E +1070 +FFA0 +2224 +4124 +90A8 +2628 +2210 +3612 +222A +3E46 +2282 +ENDCHAR +STARTCHAR uni39BD +ENCODING 14781 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +FC10 +23FE +4010 +7BD0 +4A50 +CBD2 +7812 +4BD2 +4814 +7AAC +4D4A +4AAA +4816 +5822 +ENDCHAR +STARTCHAR uni39BE +ENCODING 14782 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +3FFC +2004 +2004 +3FFC +2080 +2480 +24F0 +2790 +3C90 +2492 +44B2 +4402 +83FE +ENDCHAR +STARTCHAR uni39BF +ENCODING 14783 +BBX 14 16 0 -2 +BITMAP +0200 +0100 +3FFC +2004 +2004 +3FFC +2080 +2080 +2FF8 +21C0 +22A0 +22A0 +4490 +4888 +9084 +0080 +ENDCHAR +STARTCHAR uni39C0 +ENCODING 14784 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +3FFC +2004 +2004 +3FFC +2000 +2FF0 +2210 +2220 +2338 +2288 +4450 +4420 +88D8 +1306 +ENDCHAR +STARTCHAR uni39C1 +ENCODING 14785 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFC +2004 +3FFC +2080 +2080 +2FFC +2080 +2080 +3FFE +2100 +4210 +4408 +8FFC +0404 +ENDCHAR +STARTCHAR uni39C2 +ENCODING 14786 +BBX 14 16 0 -2 +BITMAP +0200 +0100 +3FFC +2004 +2004 +3FFC +2000 +2000 +2FFC +2884 +2884 +2FFC +4884 +4884 +8FFC +0804 +ENDCHAR +STARTCHAR uni39C3 +ENCODING 14787 +BBX 14 16 0 -2 +BITMAP +1004 +1004 +1084 +1084 +FE84 +1084 +1084 +1284 +1C8C +30B4 +D0C4 +1084 +1004 +1004 +5004 +2004 +ENDCHAR +STARTCHAR uni39C4 +ENCODING 14788 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +1104 +1104 +FD04 +1104 +1104 +1504 +1904 +3104 +D104 +1104 +1104 +11FC +5004 +2000 +ENDCHAR +STARTCHAR uni39C5 +ENCODING 14789 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +11FC +1044 +FE44 +1044 +1044 +1244 +1C44 +3044 +D044 +1084 +1084 +1104 +5228 +2410 +ENDCHAR +STARTCHAR uni39C6 +ENCODING 14790 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +FDFC +1124 +1124 +1524 +1924 +3124 +D124 +1134 +1128 +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni39C7 +ENCODING 14791 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +11FC +1104 +FD04 +1104 +1104 +1504 +1974 +3104 +D104 +1104 +1104 +1104 +5114 +2108 +ENDCHAR +STARTCHAR uni39C8 +ENCODING 14792 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1004 +1004 +FC04 +10FC +1080 +1480 +1900 +31FC +D004 +1004 +1004 +1004 +5028 +2010 +ENDCHAR +STARTCHAR uni39C9 +ENCODING 14793 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +11FC +1200 +FC00 +11F8 +1000 +1400 +1BF8 +3008 +D008 +1008 +100A +100A +5006 +2002 +ENDCHAR +STARTCHAR uni39CA +ENCODING 14794 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +FC20 +1020 +11FC +1524 +1924 +3124 +D124 +1134 +1128 +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni39CB +ENCODING 14795 +BBX 15 16 0 -2 +BITMAP +1040 +1048 +1044 +1044 +FC40 +13FE +1040 +1440 +1840 +30A0 +D0A0 +1090 +1110 +1108 +5204 +2402 +ENDCHAR +STARTCHAR uni39CC +ENCODING 14796 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FC20 +103C +11E0 +1420 +1820 +303E +D3E0 +1020 +1022 +1022 +5022 +201E +ENDCHAR +STARTCHAR uni39CD +ENCODING 14797 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +FC80 +1080 +1080 +14FC +1884 +3084 +D084 +1084 +1104 +1104 +5228 +2410 +ENDCHAR +STARTCHAR uni39CE +ENCODING 14798 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1008 +1088 +FC88 +1088 +1108 +15FE +1818 +3028 +D048 +1088 +1108 +1208 +5028 +2010 +ENDCHAR +STARTCHAR uni39CF +ENCODING 14799 +BBX 14 16 0 -2 +BITMAP +2000 +23FC +2204 +2204 +FA94 +2254 +2224 +2A24 +3254 +E254 +2294 +2304 +2204 +2204 +A214 +4208 +ENDCHAR +STARTCHAR uni39D0 +ENCODING 14800 +BBX 15 16 0 -2 +BITMAP +2000 +2000 +27BC +20A4 +F8A4 +24A4 +22A4 +2AA8 +3128 +E128 +2290 +2290 +24A8 +2828 +A044 +4082 +ENDCHAR +STARTCHAR uni39D1 +ENCODING 14801 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +10A0 +10A0 +FC20 +13FE +1022 +1422 +1842 +3052 +D04A +108A +1082 +1102 +5214 +2408 +ENDCHAR +STARTCHAR uni39D2 +ENCODING 14802 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +2020 +23FE +FA02 +2404 +2000 +2890 +3090 +E090 +2088 +2108 +2108 +2104 +A204 +4402 +ENDCHAR +STARTCHAR uni39D3 +ENCODING 14803 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13D0 +1290 +FE90 +1290 +1290 +1690 +1A90 +3288 +D288 +12C8 +12A4 +14D4 +5492 +2800 +ENDCHAR +STARTCHAR uni39D4 +ENCODING 14804 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +2024 +2020 +FBFE +2220 +2224 +2A24 +3224 +E228 +2228 +2210 +2212 +242A +A446 +4882 +ENDCHAR +STARTCHAR uni39D5 +ENCODING 14805 +BBX 15 16 0 -2 +BITMAP +2000 +2080 +231E +2252 +FA52 +2252 +2252 +2A52 +3252 +E2D2 +235A +2254 +2090 +2090 +A110 +4210 +ENDCHAR +STARTCHAR uni39D6 +ENCODING 14806 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +1104 +FD04 +11FC +1100 +1500 +197C +3108 +D110 +1120 +1142 +1282 +527E +2400 +ENDCHAR +STARTCHAR uni39D7 +ENCODING 14807 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1090 +1290 +FE92 +12D4 +1298 +1690 +1A90 +3290 +D290 +1292 +12D2 +1712 +520E +2000 +ENDCHAR +STARTCHAR uni39D8 +ENCODING 14808 +BBX 14 16 0 -2 +BITMAP +0880 +0888 +2E90 +28E4 +2884 +2E7C +F000 +00E0 +1F00 +0100 +3FF8 +0100 +7FFC +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni39D9 +ENCODING 14809 +BBX 15 16 0 -2 +BITMAP +1000 +1040 +1020 +1028 +FC08 +1088 +1490 +1A94 +32A2 +D2A2 +14C2 +1088 +1188 +1288 +5478 +2000 +ENDCHAR +STARTCHAR uni39DA +ENCODING 14810 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FC +1100 +FD00 +11F0 +1110 +1510 +1990 +3250 +D250 +1210 +1212 +1292 +5312 +220E +ENDCHAR +STARTCHAR uni39DB +ENCODING 14811 +BBX 13 16 1 -2 +BITMAP +0880 +4880 +48F8 +4900 +4920 +4A10 +0810 +01C0 +3E00 +0200 +7FF0 +0200 +FFF8 +0200 +0A00 +0400 +ENDCHAR +STARTCHAR uni39DC +ENCODING 14812 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1210 +1210 +FE10 +12FE +1292 +1692 +1A92 +3292 +D29A +1294 +1210 +1210 +53FE +2000 +ENDCHAR +STARTCHAR uni39DD +ENCODING 14813 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +7E7C +1244 +2244 +2A7C +4400 +80E0 +1F00 +0100 +3FF8 +0100 +7FFC +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni39DE +ENCODING 14814 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FC20 +11FE +1040 +1440 +187C +30A4 +D0A8 +1128 +1110 +1228 +5444 +2082 +ENDCHAR +STARTCHAR uni39DF +ENCODING 14815 +BBX 15 16 0 -2 +BITMAP +2200 +217E +2140 +2440 +FA40 +2240 +2040 +2940 +3140 +E240 +2640 +2240 +2240 +2240 +A27E +4000 +ENDCHAR +STARTCHAR uni39E0 +ENCODING 14816 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +1088 +1104 +FBFE +1002 +1420 +1820 +3128 +D124 +1224 +1222 +1422 +1020 +50A0 +2040 +ENDCHAR +STARTCHAR uni39E1 +ENCODING 14817 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1010 +13FE +FC20 +1042 +1084 +15F8 +1810 +3022 +D0C4 +1308 +1010 +1028 +50C4 +2302 +ENDCHAR +STARTCHAR uni39E2 +ENCODING 14818 +BBX 14 16 0 -2 +BITMAP +2000 +27FC +2404 +2444 +FC44 +2444 +27FC +2C44 +3444 +E4A4 +2494 +2514 +2604 +2404 +A7FC +4404 +ENDCHAR +STARTCHAR uni39E3 +ENCODING 14819 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +1120 +11FC +FD20 +1220 +1020 +13FE +1870 +30A8 +D0A8 +1124 +1124 +1222 +5020 +2020 +ENDCHAR +STARTCHAR uni39E4 +ENCODING 14820 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +FC40 +1088 +1504 +1BFE +3092 +D090 +1090 +1090 +1112 +1112 +520E +2400 +ENDCHAR +STARTCHAR uni39E5 +ENCODING 14821 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +1120 +11FC +FD20 +1220 +1020 +13FE +1890 +3090 +D090 +1090 +1112 +1112 +5212 +240E +ENDCHAR +STARTCHAR uni39E6 +ENCODING 14822 +BBX 14 16 0 -2 +BITMAP +2080 +2080 +2100 +21FC +FA04 +2404 +23E4 +2A24 +3224 +E3E4 +2224 +2224 +23E4 +2004 +A028 +4010 +ENDCHAR +STARTCHAR uni39E7 +ENCODING 14823 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FC +1040 +FC90 +1108 +13FC +1004 +1950 +3150 +D150 +1150 +1250 +1252 +5452 +280E +ENDCHAR +STARTCHAR uni39E8 +ENCODING 14824 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11E0 +1100 +FD00 +11FE +1100 +1500 +197C +3144 +D144 +1144 +1144 +127C +5244 +2400 +ENDCHAR +STARTCHAR uni39E9 +ENCODING 14825 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2404 +2404 +F5F4 +2444 +2444 +25F4 +3554 +E554 +2554 +2554 +2574 +2446 +A446 +4842 +ENDCHAR +STARTCHAR uni39EA +ENCODING 14826 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10FC +1104 +FA08 +11FE +1500 +197C +3144 +D144 +1154 +1148 +1142 +1242 +523E +2400 +ENDCHAR +STARTCHAR uni39EB +ENCODING 14827 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1020 +FC40 +11FC +1154 +1554 +1954 +3154 +D154 +1154 +1154 +1144 +5114 +2108 +ENDCHAR +STARTCHAR uni39EC +ENCODING 14828 +BBX 15 15 0 -2 +BITMAP +7DF0 +1110 +1190 +1D52 +F20E +4400 +00E0 +1F00 +0100 +3FF8 +0100 +7FFC +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni39ED +ENCODING 14829 +BBX 14 16 0 -2 +BITMAP +7CFC +1088 +1090 +1088 +1E84 +F094 +4088 +00E0 +1F00 +0100 +3FF8 +0100 +7FFC +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni39EE +ENCODING 14830 +BBX 14 16 0 -2 +BITMAP +1000 +1040 +119C +1104 +FD04 +1104 +1104 +15DC +1904 +3104 +D104 +1104 +1104 +11FC +5104 +2000 +ENDCHAR +STARTCHAR uni39EF +ENCODING 14831 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1044 +11F4 +FC48 +1050 +13FE +1040 +1880 +3184 +D298 +14E0 +1082 +1082 +507E +2000 +ENDCHAR +STARTCHAR uni39F0 +ENCODING 14832 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13C0 +1200 +FE20 +1220 +1220 +13FE +1820 +3020 +D128 +1124 +1222 +1422 +50A0 +2040 +ENDCHAR +STARTCHAR uni39F1 +ENCODING 14833 +BBX 15 16 0 -2 +BITMAP +0808 +081C +1470 +2210 +4110 +BEFC +0010 +0010 +3E10 +22FE +2210 +2210 +2210 +3E10 +2250 +0020 +ENDCHAR +STARTCHAR uni39F2 +ENCODING 14834 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +2404 +F848 +2040 +2040 +2BFC +30E0 +E150 +2150 +2248 +2444 +2842 +A040 +4040 +ENDCHAR +STARTCHAR uni39F3 +ENCODING 14835 +BBX 15 16 0 -2 +BITMAP +1088 +FD04 +12FA +1C48 +F088 +1128 +3210 +00E0 +1F00 +0100 +3FF8 +0100 +7FFC +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni39F4 +ENCODING 14836 +BBX 15 16 0 -2 +BITMAP +1010 +10D8 +1394 +1094 +FC90 +13FE +1090 +1494 +1894 +30D8 +D398 +1090 +10AA +10CA +5286 +2102 +ENDCHAR +STARTCHAR uni39F5 +ENCODING 14837 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1010 +1020 +FC68 +10A4 +1322 +1020 +1800 +31FC +D104 +1104 +1104 +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni39F6 +ENCODING 14838 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11F8 +1108 +FDF8 +1108 +11FA +150A +190C +33F8 +D018 +1028 +1048 +1188 +5628 +2010 +ENDCHAR +STARTCHAR uni39F7 +ENCODING 14839 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +1020 +FC20 +13FE +1050 +1488 +1904 +32FA +D488 +1088 +1088 +1088 +50F8 +2088 +ENDCHAR +STARTCHAR uni39F8 +ENCODING 14840 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +FDF8 +1108 +1108 +15F8 +1800 +33FC +D008 +1030 +1020 +1020 +50A0 +2040 +ENDCHAR +STARTCHAR uni39F9 +ENCODING 14841 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +11FC +FD04 +11FC +1000 +15FE +1808 +33FE +D008 +1108 +1088 +1008 +5028 +2010 +ENDCHAR +STARTCHAR uni39FA +ENCODING 14842 +BBX 15 16 0 -2 +BITMAP +1020 +1022 +13B4 +10A8 +FCA8 +1124 +12A2 +1040 +19FC +3104 +D104 +11FC +1104 +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni39FB +ENCODING 14843 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1040 +1080 +FD44 +1224 +1068 +12B0 +1930 +32A8 +D068 +10A4 +1122 +1220 +50A0 +2040 +ENDCHAR +STARTCHAR uni39FC +ENCODING 14844 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FC20 +11FC +1020 +1420 +1BFE +3040 +D0A4 +11A8 +1290 +1488 +50C6 +2080 +ENDCHAR +STARTCHAR uni39FD +ENCODING 14845 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1104 +1124 +FD24 +11FC +1124 +1524 +1974 +3154 +D154 +1174 +1104 +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni39FE +ENCODING 14846 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FC +1154 +FA54 +10A4 +1524 +1A44 +3094 +D108 +1040 +10A4 +12AA +128A +5478 +2000 +ENDCHAR +STARTCHAR uni39FF +ENCODING 14847 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +1088 +FD54 +1222 +1442 +1020 +1820 +3120 +D13C +1120 +12A0 +1260 +543E +2800 +ENDCHAR +STARTCHAR uni3A00 +ENCODING 14848 +BBX 15 16 0 -2 +BITMAP +103C +11E0 +1020 +13FE +FC20 +11FC +1424 +1BFE +3024 +D1FC +1070 +10A8 +1124 +1622 +5020 +2020 +ENDCHAR +STARTCHAR uni3A01 +ENCODING 14849 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +13FC +1040 +FC40 +11F8 +1108 +15F8 +1908 +31F8 +D108 +11F8 +1108 +1108 +57FE +2000 +ENDCHAR +STARTCHAR uni3A02 +ENCODING 14850 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1124 +11FC +1524 +19FC +3020 +D070 +10A8 +1124 +1622 +5020 +2020 +ENDCHAR +STARTCHAR uni3A03 +ENCODING 14851 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +FDFC +1104 +11FC +1400 +19FC +3008 +D010 +13FE +1020 +1020 +50A0 +2040 +ENDCHAR +STARTCHAR uni3A04 +ENCODING 14852 +BBX 14 16 0 -2 +BITMAP +2000 +27FC +2444 +2444 +FDF4 +2444 +2444 +2FFC +3404 +E5F4 +2514 +2514 +25F4 +2404 +A414 +4808 +ENDCHAR +STARTCHAR uni3A05 +ENCODING 14853 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FCA8 +1020 +11FC +1524 +1924 +3154 +D14C +1184 +1104 +1104 +5114 +2108 +ENDCHAR +STARTCHAR uni3A06 +ENCODING 14854 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +2110 +2110 +F7BC +2110 +2110 +2338 +33B8 +E554 +2554 +2992 +2110 +2110 +A110 +4110 +ENDCHAR +STARTCHAR uni3A07 +ENCODING 14855 +BBX 13 16 1 -2 +BITMAP +2040 +93F8 +4248 +13F0 +E290 +2460 +2898 +01C0 +3E00 +0200 +7FF0 +0200 +FFF8 +0200 +0A00 +0400 +ENDCHAR +STARTCHAR uni3A08 +ENCODING 14856 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +17FE +1108 +F890 +1060 +1198 +1E06 +3108 +D1F8 +1108 +11F8 +1108 +1108 +5208 +2408 +ENDCHAR +STARTCHAR uni3A09 +ENCODING 14857 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1204 +13FC +FE20 +13FE +1210 +128A +1B06 +3000 +D3FC +1204 +13FC +1204 +53FC +2204 +ENDCHAR +STARTCHAR uni3A0A +ENCODING 14858 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +13FE +1080 +FDFC +1220 +15FE +1000 +19FC +3104 +D1FC +1104 +11FC +1104 +5114 +2108 +ENDCHAR +STARTCHAR uni3A0B +ENCODING 14859 +BBX 15 16 0 -2 +BITMAP +1040 +1044 +13F4 +1048 +F850 +17FE +1040 +1880 +31F8 +D308 +1508 +11F8 +1108 +1108 +51F8 +2108 +ENDCHAR +STARTCHAR uni3A0C +ENCODING 14860 +BBX 15 16 0 -2 +BITMAP +0800 +7F78 +0848 +3E48 +0048 +7F86 +4100 +82FC +3C44 +0844 +7E28 +0828 +7F10 +0828 +2844 +1182 +ENDCHAR +STARTCHAR uni3A0D +ENCODING 14861 +BBX 14 16 1 -2 +BITMAP +1010 +7DFC +1010 +FE90 +1050 +7C10 +1050 +FE20 +0040 +3F80 +0200 +7FF0 +0200 +FFF8 +0200 +0600 +ENDCHAR +STARTCHAR uni3A0E +ENCODING 14862 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1040 +FDFC +1154 +1154 +1554 +1954 +312C +D020 +13FE +1050 +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni3A0F +ENCODING 14863 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +FDFC +1080 +1480 +1BFE +3090 +D110 +1152 +1254 +12A8 +1428 +5844 +2082 +ENDCHAR +STARTCHAR uni3A10 +ENCODING 14864 +BBX 15 16 0 -2 +BITMAP +2100 +217C +2144 +2244 +F244 +267C +2A10 +2210 +32FE +E238 +2254 +2254 +2294 +2312 +A210 +4210 +ENDCHAR +STARTCHAR uni3A11 +ENCODING 14865 +BBX 15 16 0 -2 +BITMAP +1000 +1088 +1252 +1222 +FE52 +128A +1202 +17FE +1888 +3144 +D27A +1088 +1150 +1020 +50D8 +2706 +ENDCHAR +STARTCHAR uni3A12 +ENCODING 14866 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1050 +FC88 +1326 +11FC +1420 +1820 +33FE +D000 +1020 +11FC +1020 +5020 +23FE +ENDCHAR +STARTCHAR uni3A13 +ENCODING 14867 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC88 +1104 +1222 +1120 +19FC +3220 +D020 +17FE +1020 +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni3A14 +ENCODING 14868 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +2010 +27FE +F410 +2410 +25D0 +2412 +3412 +E5D4 +2554 +2548 +25DA +242A +A846 +5082 +ENDCHAR +STARTCHAR uni3A15 +ENCODING 14869 +BBX 15 16 0 -2 +BITMAP +1000 +13F8 +1108 +1110 +F91C +12E4 +12A4 +1A54 +34A8 +D100 +13FC +1294 +1294 +1294 +57FE +2000 +ENDCHAR +STARTCHAR uni3A16 +ENCODING 14870 +BBX 15 16 0 -2 +BITMAP +2008 +2008 +27C8 +2210 +FA1E +24A4 +27D4 +2914 +3114 +E7D4 +2114 +2108 +21C8 +2E14 +A414 +4022 +ENDCHAR +STARTCHAR uni3A17 +ENCODING 14871 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +107E +1040 +FBFC +1004 +15FC +1804 +33FC +D040 +1240 +127C +1240 +1540 +54FE +2800 +ENDCHAR +STARTCHAR uni3A18 +ENCODING 14872 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +10A4 +10A2 +FD2A +1010 +1460 +1980 +36FC +D084 +10FC +1084 +10FC +1084 +50FC +2084 +ENDCHAR +STARTCHAR uni3A19 +ENCODING 14873 +BBX 15 16 0 -2 +BITMAP +101E +13E0 +1122 +1094 +FC40 +1088 +11F0 +1420 +18C4 +31FE +D022 +1020 +13FE +1050 +5088 +2306 +ENDCHAR +STARTCHAR uni3A1A +ENCODING 14874 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +13FE +1090 +FD00 +11FC +1204 +11E4 +1924 +31E4 +D124 +11E4 +1124 +1004 +5028 +2010 +ENDCHAR +STARTCHAR uni3A1B +ENCODING 14875 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +13DE +FA52 +13DE +1202 +1A22 +3222 +D222 +1252 +124A +128A +1202 +520A +2204 +ENDCHAR +STARTCHAR uni3A1C +ENCODING 14876 +BBX 15 16 0 -2 +BITMAP +1040 +107C +1040 +13FE +FA42 +1278 +13C4 +1A3C +3240 +D220 +13FE +1288 +1250 +1420 +5458 +2986 +ENDCHAR +STARTCHAR uni3A1D +ENCODING 14877 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1202 +FBFE +1210 +1292 +1A54 +32FE +D282 +12FE +1282 +12FE +1482 +548A +2884 +ENDCHAR +STARTCHAR uni3A1E +ENCODING 14878 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1020 +13FE +1440 +1888 +31F0 +D024 +13FE +1022 +1124 +52A2 +2040 +ENDCHAR +STARTCHAR uni3A1F +ENCODING 14879 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +FDFC +1000 +13FE +1400 +19FC +3104 +D104 +11FC +1088 +1050 +53FE +2000 +ENDCHAR +STARTCHAR uni3A20 +ENCODING 14880 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1000 +FDFC +1104 +11FC +1504 +19FC +3040 +D020 +13FE +1000 +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni3A21 +ENCODING 14881 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2402 +25FA +FC42 +24C2 +252A +2C6A +34B2 +E52A +246A +24AA +2522 +2442 +A7FE +4402 +ENDCHAR +STARTCHAR uni3A22 +ENCODING 14882 +BBX 15 16 0 -2 +BITMAP +2110 +2212 +2454 +27D8 +F810 +2012 +27D2 +2C4E +3440 +E7D2 +2454 +2458 +27D0 +2452 +A552 +448E +ENDCHAR +STARTCHAR uni3A23 +ENCODING 14883 +BBX 15 16 0 -2 +BITMAP +2120 +2110 +2208 +2486 +F910 +23F8 +2008 +2800 +37BC +E084 +24A4 +2294 +24A4 +2084 +A294 +4108 +ENDCHAR +STARTCHAR uni3A24 +ENCODING 14884 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2450 +2488 +FDFE +2690 +24FC +2C90 +34FC +E490 +2490 +24FE +2480 +2400 +A7FE +4000 +ENDCHAR +STARTCHAR uni3A25 +ENCODING 14885 +BBX 15 16 0 -2 +BITMAP +2008 +2108 +2108 +2208 +F2BE +24AA +2F2A +212A +322A +E4AA +2FB6 +20A2 +2022 +2AA2 +AAAA +4824 +ENDCHAR +STARTCHAR uni3A26 +ENCODING 14886 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +11FE +1320 +FDFC +1120 +11FC +1520 +19FE +3100 +D3F8 +1108 +1090 +1060 +5198 +2606 +ENDCHAR +STARTCHAR uni3A27 +ENCODING 14887 +BBX 15 16 0 -2 +BITMAP +1040 +1048 +1084 +11FE +FC20 +13FE +1088 +1504 +1BFE +3524 +D124 +11FC +1124 +1124 +51FC +2104 +ENDCHAR +STARTCHAR uni3A28 +ENCODING 14888 +BBX 15 16 0 -2 +BITMAP +1040 +13BE +1212 +1292 +FE52 +12AA +1324 +1040 +1BFE +3222 +D222 +13FE +1222 +1222 +53FE +2202 +ENDCHAR +STARTCHAR uni3A29 +ENCODING 14889 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FAEC +1224 +1244 +1A44 +32EE +D224 +12A4 +12A4 +124E +1460 +549E +2900 +ENDCHAR +STARTCHAR uni3A2A +ENCODING 14890 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +11FC +FD04 +11FC +1020 +1524 +18A8 +3020 +D3FE +1090 +1090 +1112 +5212 +240E +ENDCHAR +STARTCHAR uni3A2B +ENCODING 14891 +BBX 15 16 0 -2 +BITMAP +2090 +2290 +229C +22A0 +FAD0 +2288 +2288 +2880 +3000 +E3F8 +22A8 +22A8 +22A8 +22A8 +AFFE +4000 +ENDCHAR +STARTCHAR uni3A2C +ENCODING 14892 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +23F8 +2040 +F7FE +2000 +23F8 +2208 +3208 +E3F8 +20A4 +2128 +2310 +2D48 +A186 +4100 +ENDCHAR +STARTCHAR uni3A2D +ENCODING 14893 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FC +1204 +FBFC +1200 +12F8 +1A88 +32F8 +D200 +13FC +1324 +15FC +1502 +5902 +20FE +ENDCHAR +STARTCHAR uni3A2E +ENCODING 14894 +BBX 15 16 0 -2 +BITMAP +2020 +2240 +24EC +24A4 +F4A4 +24E4 +24A4 +24A4 +36E4 +E40C +2110 +2110 +2110 +2112 +A212 +440E +ENDCHAR +STARTCHAR uni3A2F +ENCODING 14895 +BBX 15 16 0 -2 +BITMAP +2200 +211E +27D2 +2012 +F7D4 +2454 +27D8 +2014 +37D2 +E092 +2112 +21DA +2714 +2110 +A510 +4210 +ENDCHAR +STARTCHAR uni3A30 +ENCODING 14896 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1088 +FD24 +1242 +1090 +15F8 +1808 +3044 +D0A8 +1190 +1288 +14A4 +50C2 +2080 +ENDCHAR +STARTCHAR uni3A31 +ENCODING 14897 +BBX 15 16 0 -2 +BITMAP +2040 +20FC +2108 +2650 +F920 +20C0 +2320 +2FFE +3000 +E3FC +2000 +23FC +2000 +23FC +A204 +43FC +ENDCHAR +STARTCHAR uni3A32 +ENCODING 14898 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27FC +2110 +F840 +2020 +27FC +2C04 +3444 +E040 +27FC +20E0 +2150 +2248 +AC46 +4040 +ENDCHAR +STARTCHAR uni3A33 +ENCODING 14899 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC20 +11FC +1050 +1488 +1BFE +3008 +D1E8 +1128 +11E8 +1008 +5028 +2010 +ENDCHAR +STARTCHAR uni3A34 +ENCODING 14900 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +2110 +2FDE +F120 +27C0 +245C +27C4 +3448 +E7C8 +2110 +2FD0 +2122 +2122 +A11E +4100 +ENDCHAR +STARTCHAR uni3A35 +ENCODING 14901 +BBX 15 16 0 -2 +BITMAP +1108 +1090 +17FE +1000 +FBC4 +1254 +13D4 +1A54 +33D4 +D244 +12CC +1000 +13FC +1084 +5114 +2608 +ENDCHAR +STARTCHAR uni3A36 +ENCODING 14902 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +1104 +FDFC +1104 +11FC +1500 +19FE +3100 +D1FE +1002 +12AA +12AA +5202 +200C +ENDCHAR +STARTCHAR uni3A37 +ENCODING 14903 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FCF8 +1020 +11FC +1524 +19FC +3020 +D3FE +1020 +11FC +1020 +53FE +2000 +ENDCHAR +STARTCHAR uni3A38 +ENCODING 14904 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1242 +FC28 +1294 +12AA +14CA +18F8 +3300 +D020 +1124 +1124 +1124 +51FC +2004 +ENDCHAR +STARTCHAR uni3A39 +ENCODING 14905 +BBX 15 16 0 -2 +BITMAP +1088 +13DE +1088 +11DC +FC88 +13DE +1088 +1400 +1BFC +3004 +D004 +11FC +1004 +1004 +53FC +2004 +ENDCHAR +STARTCHAR uni3A3A +ENCODING 14906 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC88 +10F8 +1420 +1BFE +3222 +D332 +12AA +1376 +1222 +1222 +522A +2224 +ENDCHAR +STARTCHAR uni3A3B +ENCODING 14907 +BBX 15 16 0 -2 +BITMAP +0804 +7F78 +0840 +3E40 +2A7E +3E48 +2A48 +FF48 +08A8 +1FC0 +0100 +3FF8 +0100 +7FFC +0100 +0300 +ENDCHAR +STARTCHAR uni3A3C +ENCODING 14908 +BBX 14 16 1 -2 +BITMAP +0080 +F9F0 +AA90 +A860 +FB9C +A9F0 +A910 +F9F0 +0040 +3F80 +0200 +7FF0 +0200 +FFF8 +0200 +0600 +ENDCHAR +STARTCHAR uni3A3D +ENCODING 14909 +BBX 14 16 0 -2 +BITMAP +2004 +27C4 +2004 +2394 +FA94 +2394 +2014 +2FD4 +3554 +E554 +27D4 +2554 +2544 +27C4 +A454 +4008 +ENDCHAR +STARTCHAR uni3A3E +ENCODING 14910 +BBX 15 16 0 -2 +BITMAP +2208 +2110 +27FC +2040 +FBF8 +2040 +27FC +2840 +3020 +E1C0 +2044 +2768 +2150 +2248 +AD46 +4080 +ENDCHAR +STARTCHAR uni3A3F +ENCODING 14911 +BBX 15 16 0 -2 +BITMAP +2040 +207C +2040 +27FE +F442 +2478 +25C2 +243E +3500 +E538 +25A8 +26AA +2AA6 +2940 +B2FE +4400 +ENDCHAR +STARTCHAR uni3A40 +ENCODING 14912 +BBX 15 16 0 -2 +BITMAP +2040 +207C +2040 +27FE +F442 +2478 +25C2 +24BE +3480 +E5FC +2554 +26D4 +24B4 +292E +AA24 +504C +ENDCHAR +STARTCHAR uni3A41 +ENCODING 14913 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FCA0 +1090 +11FE +1520 +1B20 +31FC +D120 +11FC +1120 +1120 +51FE +2100 +ENDCHAR +STARTCHAR uni3A42 +ENCODING 14914 +BBX 15 16 0 -2 +BITMAP +2204 +2204 +2784 +F494 +290C +27C4 +2564 +3554 +E7C4 +2546 +257C +27C4 +2544 +2544 +A444 +48C4 +ENDCHAR +STARTCHAR uni3A43 +ENCODING 14915 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2492 +FBFC +2090 +23FC +2890 +37FE +E108 +2204 +2462 +2010 +2180 +A060 +4010 +ENDCHAR +STARTCHAR uni3A44 +ENCODING 14916 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +11FC +FC00 +11FC +1124 +15FC +1924 +31FC +D040 +1024 +12A2 +128A +5478 +2000 +ENDCHAR +STARTCHAR uni3A45 +ENCODING 14917 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +13DE +FE52 +1252 +13DE +1050 +1BFE +3222 +D222 +13FE +1222 +1222 +53FE +2202 +ENDCHAR +STARTCHAR uni3A46 +ENCODING 14918 +BBX 15 16 0 -2 +BITMAP +2214 +2112 +2FD2 +2010 +F07E +2790 +2490 +2490 +3790 +E128 +25A8 +2568 +2928 +214A +A54A +4286 +ENDCHAR +STARTCHAR uni3A47 +ENCODING 14919 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1024 +13FE +FC24 +11FC +1420 +1BFE +3000 +D1FC +1124 +11FC +1124 +11FC +5000 +23FE +ENDCHAR +STARTCHAR uni3A48 +ENCODING 14920 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +128A +FD04 +11FC +1444 +1BFE +3044 +D1FC +1080 +11FC +1284 +1484 +50FC +2084 +ENDCHAR +STARTCHAR uni3A49 +ENCODING 14921 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2118 +26E6 +F800 +23F8 +2208 +2BF8 +3000 +E7BC +2084 +24A4 +2294 +24A4 +A294 +4108 +ENDCHAR +STARTCHAR uni3A4A +ENCODING 14922 +BBX 15 16 0 -2 +BITMAP +101C +13E0 +1044 +1124 +FC88 +11FC +1154 +1554 +19FC +3008 +D7FE +1108 +1088 +1088 +5028 +2010 +ENDCHAR +STARTCHAR uni3A4B +ENCODING 14923 +BBX 15 16 0 -2 +BITMAP +2040 +23F8 +2048 +27FE +F048 +23F8 +2040 +2554 +375C +E444 +27FC +2444 +275C +2554 +A554 +4844 +ENDCHAR +STARTCHAR uni3A4C +ENCODING 14924 +BBX 15 16 0 -2 +BITMAP +1090 +17FC +1094 +13FC +FA90 +13FE +1112 +1BFA +350E +D1F8 +1108 +11F8 +1108 +11F8 +5090 +2108 +ENDCHAR +STARTCHAR uni3A4D +ENCODING 14925 +BBX 15 16 0 -2 +BITMAP +1210 +1210 +13DE +1528 +FCA4 +1020 +13FE +1020 +1BFE +3222 +D22A +1274 +10A8 +1124 +5622 +2020 +ENDCHAR +STARTCHAR uni3A4E +ENCODING 14926 +BBX 15 16 0 -2 +BITMAP +2008 +2788 +248C +278A +F488 +27BE +2008 +2788 +3488 +E788 +2494 +2794 +2494 +2494 +A494 +45A2 +ENDCHAR +STARTCHAR uni3A4F +ENCODING 14927 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +11AC +FD74 +1124 +11FC +1420 +19FC +3020 +D3FE +1000 +12A4 +1252 +5452 +2000 +ENDCHAR +STARTCHAR uni3A50 +ENCODING 14928 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +23DE +2528 +F8C4 +2040 +23FC +2840 +37FC +E010 +2FFE +2010 +2210 +2110 +A050 +4020 +ENDCHAR +STARTCHAR uni3A51 +ENCODING 14929 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2080 +27FC +F110 +2208 +2CA6 +20A0 +37BC +E0A0 +23B8 +20A0 +27BC +20A0 +A0A0 +40A0 +ENDCHAR +STARTCHAR uni3A52 +ENCODING 14930 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27BC +2110 +FBB8 +2554 +2912 +2800 +33F8 +E000 +27FC +2040 +2248 +2444 +A942 +4080 +ENDCHAR +STARTCHAR uni3A53 +ENCODING 14931 +BBX 15 16 0 -2 +BITMAP +2C78 +4448 +6C48 +4486 +7D78 +0048 +7C30 +1048 +FCA4 +1FC0 +0100 +3FF8 +0100 +7FFC +0100 +0300 +ENDCHAR +STARTCHAR uni3A54 +ENCODING 14932 +BBX 15 16 0 -2 +BITMAP +4000 +4FDC +4854 +4854 +EFD4 +4A94 +4AA6 +4FC0 +6A9C +CA94 +4FD4 +4814 +5288 +5248 +6454 +C822 +ENDCHAR +STARTCHAR uni3A55 +ENCODING 14933 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +13FE +FA22 +11AC +1420 +19AC +3050 +D0C8 +1326 +10F8 +1008 +10D0 +5020 +2010 +ENDCHAR +STARTCHAR uni3A56 +ENCODING 14934 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1000 +11FC +FD24 +11FC +1524 +1BFE +3000 +D1FC +1124 +11FC +1124 +11FC +5000 +23FE +ENDCHAR +STARTCHAR uni3A57 +ENCODING 14935 +BBX 15 16 0 -2 +BITMAP +2444 +27FC +2120 +23FE +F620 +2BFC +2220 +23FC +3220 +E3FE +2200 +27FC +2108 +211E +A202 +4C1C +ENDCHAR +STARTCHAR uni3A58 +ENCODING 14936 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +13FE +1020 +FDFC +1020 +13FE +1454 +1992 +3090 +D3FE +1090 +10D4 +138A +5096 +21A2 +ENDCHAR +STARTCHAR uni3A59 +ENCODING 14937 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FE +2512 +FBFC +2110 +27FC +2910 +37FE +E110 +2248 +25F4 +2842 +2040 +A7FC +4000 +ENDCHAR +STARTCHAR uni3A5A +ENCODING 14938 +BBX 15 16 0 -2 +BITMAP +2110 +27FC +2110 +27FC +F404 +23F8 +2000 +27FC +3080 +E144 +26A8 +2170 +26A8 +2126 +A6A0 +4040 +ENDCHAR +STARTCHAR uni3A5B +ENCODING 14939 +BBX 14 16 0 -2 +BITMAP +27FC +2444 +27FC +F444 +25F4 +2554 +25F4 +3554 +E5F4 +244C +27FC +2414 +27FC +2514 +A4B4 +47FC +ENDCHAR +STARTCHAR uni3A5C +ENCODING 14940 +BBX 15 16 0 -2 +BITMAP +2010 +27D0 +2510 +27DE +F450 +27E8 +2504 +27C4 +3000 +E3F8 +22A8 +22A8 +22A8 +22A8 +AFFE +4000 +ENDCHAR +STARTCHAR uni3A5D +ENCODING 14941 +BBX 15 16 0 -2 +BITMAP +2040 +27FE +2000 +21F8 +F908 +21F8 +2000 +2FFE +3402 +E3F8 +2180 +2644 +21B8 +2668 +A1A6 +4E60 +ENDCHAR +STARTCHAR uni3A5E +ENCODING 14942 +BBX 15 16 0 -2 +BITMAP +2110 +2554 +25B8 +2910 +F2A8 +2444 +2000 +27FC +3444 +E040 +27FC +20E0 +2150 +2248 +AC46 +4040 +ENDCHAR +STARTCHAR uni3A5F +ENCODING 14943 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1252 +FDFC +1050 +11FC +1450 +1BFE +3088 +D124 +12FA +1020 +1124 +52A2 +2040 +ENDCHAR +STARTCHAR uni3A60 +ENCODING 14944 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +24A0 +F7FC +24A4 +27FC +2400 +3524 +E5A8 +2530 +25A4 +251C +2800 +AAA4 +5452 +ENDCHAR +STARTCHAR uni3A61 +ENCODING 14945 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2100 +F3F8 +2508 +2108 +21F8 +3000 +EFBE +2208 +279E +2492 +2CB2 +2492 +A79E +4492 +ENDCHAR +STARTCHAR uni3A62 +ENCODING 14946 +BBX 15 16 0 -2 +BITMAP +2108 +27FE +2108 +2000 +FBFC +2294 +2294 +2BFC +3028 +E3FE +2220 +2324 +22A8 +2292 +A42A +48C6 +ENDCHAR +STARTCHAR uni3A63 +ENCODING 14947 +BBX 15 16 0 -2 +BITMAP +27BC +24A4 +2294 +F4A4 +2FFE +2842 +27FC +3040 +E3F8 +2248 +23F8 +2248 +23F8 +2040 +A7FC +4040 +ENDCHAR +STARTCHAR uni3A64 +ENCODING 14948 +BBX 15 16 0 -2 +BITMAP +2148 +27C8 +2108 +27D0 +F55E +27E4 +2554 +27D4 +3554 +E114 +27D4 +2208 +23C8 +2254 +A554 +48A2 +ENDCHAR +STARTCHAR uni3A65 +ENCODING 14949 +BBX 15 16 0 -2 +BITMAP +2114 +2112 +27D2 +2110 +F110 +2FFE +2290 +26D2 +3292 +E6D2 +2294 +26D4 +228A +22CA +AF16 +4022 +ENDCHAR +STARTCHAR uni3A66 +ENCODING 14950 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +11FE +1320 +FDFC +1120 +11FC +1520 +19FE +3100 +D3FE +1252 +128A +1376 +5252 +2276 +ENDCHAR +STARTCHAR uni3A67 +ENCODING 14951 +BBX 15 16 0 -2 +BITMAP +11FC +1104 +11FC +1104 +FDFC +1088 +11FC +1488 +1BFE +3088 +D124 +12AA +1070 +10A8 +5124 +2060 +ENDCHAR +STARTCHAR uni3A68 +ENCODING 14952 +BBX 15 16 0 -2 +BITMAP +1088 +13DE +1088 +11DC +FC88 +13DE +1088 +17FC +1804 +31FC +D004 +13FC +1040 +12A4 +528A +247A +ENDCHAR +STARTCHAR uni3A69 +ENCODING 14953 +BBX 15 16 0 -2 +BITMAP +2400 +249E +2504 +2608 +F45E +2452 +23D2 +211E +3112 +ED5E +2552 +2592 +295E +2920 +B52C +4212 +ENDCHAR +STARTCHAR uni3A6A +ENCODING 14954 +BBX 15 16 0 -2 +BITMAP +2100 +213E +2208 +2290 +F4BE +2F22 +2122 +223E +34A2 +EFBE +20A2 +2022 +2ABE +2A80 +A814 +4022 +ENDCHAR +STARTCHAR uni3A6B +ENCODING 14955 +BBX 15 16 0 -2 +BITMAP +2042 +239C +2210 +23DE +FA94 +2294 +2420 +2BFC +3204 +E3FC +2204 +23FC +2204 +23FC +A108 +4204 +ENDCHAR +STARTCHAR uni3A6C +ENCODING 14956 +BBX 15 16 0 -2 +BITMAP +2108 +21CC +210A +27E8 +F52E +25D8 +2748 +24CA +340A +E54C +276C +2548 +254A +297A +A7A6 +4042 +ENDCHAR +STARTCHAR uni3A6D +ENCODING 14957 +BBX 15 16 0 -2 +BITMAP +22A0 +244C +24A4 +260C +F4A4 +264C +24A4 +2FFE +3802 +E3F0 +2020 +2040 +27FC +2040 +A140 +4080 +ENDCHAR +STARTCHAR uni3A6E +ENCODING 14958 +BBX 15 15 1 -1 +BITMAP +2140 +266C +2444 +266C +F4A4 +24A4 +2FFE +2208 +35F4 +E842 +23F8 +2040 +27FC +2040 +61C0 +ENDCHAR +STARTCHAR uni3A6F +ENCODING 14959 +BBX 15 16 0 -2 +BITMAP +2210 +23D0 +241E +2FE4 +F554 +2FF4 +2548 +27D4 +31B2 +E220 +27C0 +2088 +27FC +2044 +A350 +4488 +ENDCHAR +STARTCHAR uni3A70 +ENCODING 14960 +BBX 15 16 0 -2 +BITMAP +2110 +27FE +2110 +23F8 +FA08 +23F8 +2000 +2FBC +34A4 +E7BC +2040 +2FFE +2150 +2248 +AC46 +4040 +ENDCHAR +STARTCHAR uni3A71 +ENCODING 14961 +BBX 15 16 0 -2 +BITMAP +101E +13E0 +1122 +1094 +FBFE +1252 +17FE +1804 +33C4 +D27E +13C4 +1254 +13CC +1284 +52D4 +2348 +ENDCHAR +STARTCHAR uni3A72 +ENCODING 14962 +BBX 15 16 0 -2 +BITMAP +2110 +2FFE +2110 +27BC +FCA4 +27BC +2140 +2920 +33FE +E220 +27FC +2A20 +23FC +2220 +A3FE +4200 +ENDCHAR +STARTCHAR uni3A73 +ENCODING 14963 +BBX 15 15 1 -1 +BITMAP +24A4 +2528 +27BE +2D68 +F7BC +2528 +27BC +2528 +37BE +E000 +27FC +2208 +21F0 +21B0 +6E0E +ENDCHAR +STARTCHAR uni3A74 +ENCODING 14964 +BBX 15 16 0 -2 +BITMAP +27BC +24A4 +27BC +24A4 +F7BC +24A4 +27BC +2120 +33FE +E220 +27FC +2A20 +23FC +2220 +A3FE +4200 +ENDCHAR +STARTCHAR uni3A75 +ENCODING 14965 +BBX 15 16 0 -2 +BITMAP +2108 +21EC +210A +2FEA +F928 +2BC8 +293E +2FE8 +3948 +EBE8 +2A28 +2B68 +2AA8 +2BF4 +AAB4 +52A2 +ENDCHAR +STARTCHAR uni3A76 +ENCODING 14966 +BBX 15 16 0 -2 +BITMAP +2210 +23DE +2528 +2084 +F7FE +2248 +27FC +2C46 +36EC +E554 +26EC +2554 +26EC +2444 +A454 +4408 +ENDCHAR +STARTCHAR uni3A77 +ENCODING 14967 +BBX 15 16 0 -2 +BITMAP +2040 +27FE +2492 +23FC +F890 +23FC +2090 +2FFE +3108 +E3FC +2522 +21F8 +2120 +21FE +A002 +4556 +ENDCHAR +STARTCHAR uni3A78 +ENCODING 14968 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +11FC +1124 +FBFE +12AA +17FE +1AAA +33FE +D020 +13FE +1242 +10F8 +1150 +5020 +23FE +ENDCHAR +STARTCHAR uni3A79 +ENCODING 14969 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +11FC +1124 +FBFE +12AA +17FE +1AAA +33FE +D000 +13FE +128A +10F8 +1088 +5088 +23FE +ENDCHAR +STARTCHAR uni3A7A +ENCODING 14970 +BBX 14 16 1 -2 +BITMAP +0020 +0820 +8820 +89FC +8820 +8820 +89F8 +EE88 +8888 +8888 +8850 +8850 +AA20 +CC50 +8888 +0304 +ENDCHAR +STARTCHAR uni3A7B +ENCODING 14971 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7E10 +42FE +8410 +7F10 +40FC +5E44 +5244 +5244 +5A28 +5428 +5010 +9428 +9844 +1182 +ENDCHAR +STARTCHAR uni3A7C +ENCODING 14972 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +3E10 +42FE +A410 +1810 +10FC +2444 +C844 +1F44 +2128 +D228 +0C10 +0828 +3044 +C182 +ENDCHAR +STARTCHAR uni3A7D +ENCODING 14973 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +FE10 +10FE +1010 +FE10 +92FC +9244 +FE44 +1044 +3828 +5428 +9210 +1028 +1044 +1182 +ENDCHAR +STARTCHAR uni3A7E +ENCODING 14974 +BBX 15 16 0 -2 +BITMAP +0210 +0F10 +7810 +08FE +FF10 +2A10 +2AFC +FF44 +2A44 +2A44 +FF28 +0828 +0810 +0E28 +7044 +2182 +ENDCHAR +STARTCHAR uni3A7F +ENCODING 14975 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +3F3E +4044 +8044 +3E44 +02A4 +0428 +0828 +1010 +2010 +2128 +2128 +1F44 +0082 +ENDCHAR +STARTCHAR uni3A80 +ENCODING 14976 +BBX 15 16 0 -2 +BITMAP +0040 +7C40 +1040 +1080 +10FE +1108 +1288 +FC88 +1088 +1050 +1050 +1020 +1050 +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni3A81 +ENCODING 14977 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +1410 +141E +2210 +5210 +88FC +0844 +0044 +7E44 +0228 +0428 +0410 +0828 +0844 +0082 +ENDCHAR +STARTCHAR uni3A82 +ENCODING 14978 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7F10 +801E +0010 +7E10 +00FC +0044 +FC44 +0444 +0428 +0528 +0510 +0328 +0144 +0082 +ENDCHAR +STARTCHAR uni3A83 +ENCODING 14979 +BBX 15 16 0 -2 +BITMAP +0010 +0010 +FF90 +021E +0210 +7A10 +4AFC +4A44 +4A44 +4A44 +7A28 +4A28 +0210 +0228 +0A44 +0482 +ENDCHAR +STARTCHAR uni3A84 +ENCODING 14980 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +2820 +FE3E +2A44 +2A44 +FE44 +A8A4 +A828 +FF28 +2910 +2910 +2D28 +4A48 +4884 +8902 +ENDCHAR +STARTCHAR uni3A85 +ENCODING 14981 +BBX 15 16 0 -2 +BITMAP +7FFC +0100 +3FF8 +2108 +2288 +2448 +2118 +0100 +01FC +0100 +3FF0 +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni3A86 +ENCODING 14982 +BBX 14 16 1 -2 +BITMAP +0420 +0E20 +F020 +903C +9020 +9020 +FDF8 +9088 +9088 +9088 +9050 +8850 +8A20 +C650 +9288 +0904 +ENDCHAR +STARTCHAR uni3A87 +ENCODING 14983 +BBX 15 16 0 -2 +BITMAP +0820 +2820 +2820 +3E3E +4844 +0844 +0844 +7FA4 +1428 +1428 +1410 +1410 +2528 +2648 +4484 +8102 +ENDCHAR +STARTCHAR uni3A88 +ENCODING 14984 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +081E +7F10 +0810 +08FC +FF44 +0044 +0844 +0828 +7F28 +0810 +0810 +0F28 +F044 +4082 +ENDCHAR +STARTCHAR uni3A89 +ENCODING 14985 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1420 +223E +4144 +BEC4 +0044 +00A4 +3E28 +2228 +2210 +2210 +2228 +3E48 +2284 +0102 +ENDCHAR +STARTCHAR uni3A8A +ENCODING 14986 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +1210 +121E +FF10 +1210 +12FC +7E44 +2044 +2044 +7E28 +6228 +A210 +2228 +3E44 +2282 +ENDCHAR +STARTCHAR uni3A8B +ENCODING 14987 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +4110 +7F1E +4110 +7F10 +00FC +0044 +7F44 +0844 +0828 +FFA8 +0810 +0828 +0844 +0882 +ENDCHAR +STARTCHAR uni3A8C +ENCODING 14988 +BBX 15 16 0 -2 +BITMAP +0010 +FC10 +0410 +681E +1010 +FE10 +92FC +9244 +FE44 +9244 +9228 +FE28 +9210 +9228 +9244 +8682 +ENDCHAR +STARTCHAR uni3A8D +ENCODING 14989 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7F20 +083E +0844 +7F44 +4144 +82A4 +3C28 +0428 +0810 +0F10 +7828 +0828 +2844 +1082 +ENDCHAR +STARTCHAR uni3A8E +ENCODING 14990 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0810 +FF9E +0810 +2A10 +2AFC +2A44 +5D44 +88C4 +0828 +1428 +1210 +2128 +4144 +8082 +ENDCHAR +STARTCHAR uni3A8F +ENCODING 14991 +BBX 15 16 0 -2 +BITMAP +1010 +2010 +7F10 +491E +4910 +7F10 +49FC +5144 +7F44 +2444 +4428 +FFA8 +0410 +0428 +0444 +0482 +ENDCHAR +STARTCHAR uni3A90 +ENCODING 14992 +BBX 15 16 0 -2 +BITMAP +0810 +0410 +3F10 +211E +2110 +3F10 +24FC +2644 +2544 +3F44 +2428 +2428 +4A10 +4928 +9144 +2082 +ENDCHAR +STARTCHAR uni3A91 +ENCODING 14993 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +FF90 +141E +2210 +4910 +88FC +7F44 +4944 +7F44 +4928 +7F28 +0810 +0A28 +0C44 +0882 +ENDCHAR +STARTCHAR uni3A92 +ENCODING 14994 +BBX 15 16 0 -2 +BITMAP +1010 +6710 +4110 +411E +7710 +4110 +41FC +7F44 +1444 +1444 +1428 +1428 +2510 +2628 +4444 +8082 +ENDCHAR +STARTCHAR uni3A93 +ENCODING 14995 +BBX 15 16 0 -2 +BITMAP +0210 +0F10 +7810 +081E +FF90 +0810 +2AFC +2A44 +EBC4 +2A44 +2AA8 +6B28 +AA10 +0828 +0844 +0882 +ENDCHAR +STARTCHAR uni3A94 +ENCODING 14996 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +2210 +221E +F790 +2210 +22FC +6644 +7744 +AAC4 +AA28 +3228 +2210 +2228 +2244 +2282 +ENDCHAR +STARTCHAR uni3A95 +ENCODING 14997 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0F9E +0810 +7F10 +41FC +7F44 +4144 +7F44 +4928 +0828 +FF90 +0810 +0828 +0844 +0882 +ENDCHAR +STARTCHAR uni3A96 +ENCODING 14998 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +0210 +3E1E +0210 +FF90 +08FC +0944 +4944 +2A44 +1C28 +2A28 +C910 +0928 +2844 +1082 +ENDCHAR +STARTCHAR uni3A97 +ENCODING 14999 +BBX 15 16 0 -2 +BITMAP +1010 +0810 +7F1E +0010 +2210 +14FC +FF44 +0044 +0044 +3E28 +2228 +2210 +2210 +3E28 +2244 +0082 +ENDCHAR +STARTCHAR uni3A98 +ENCODING 15000 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1420 +223E +4144 +BEC4 +0844 +08A4 +7F28 +4928 +4910 +7F10 +0828 +1448 +2284 +4102 +ENDCHAR +STARTCHAR uni3A99 +ENCODING 15001 +BBX 15 16 0 -2 +BITMAP +0020 +7F20 +4920 +493E +7F44 +4944 +4944 +7FA4 +0828 +FF28 +1C10 +2A10 +4928 +8848 +0884 +0902 +ENDCHAR +STARTCHAR uni3A9A +ENCODING 15002 +BBX 15 16 0 -2 +BITMAP +2420 +2420 +7E20 +243E +2444 +FF44 +0044 +7EA4 +4228 +4228 +7E10 +4210 +4228 +7E48 +4284 +0102 +ENDCHAR +STARTCHAR uni3A9B +ENCODING 15003 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +FF10 +221E +3E10 +2210 +3EFC +2244 +2244 +FF44 +4028 +5428 +6210 +4028 +7E44 +0082 +ENDCHAR +STARTCHAR uni3A9C +ENCODING 15004 +BBX 15 16 0 -2 +BITMAP +1010 +9210 +9210 +921E +FE10 +0010 +FEFC +1044 +2044 +FE44 +AA28 +AA28 +AA10 +AA28 +AA44 +8682 +ENDCHAR +STARTCHAR uni3A9D +ENCODING 15005 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +FF90 +081E +7F10 +4910 +6BFC +5D44 +4944 +7F44 +0828 +1C28 +2A10 +4928 +8844 +0882 +ENDCHAR +STARTCHAR uni3A9E +ENCODING 15006 +BBX 15 16 0 -2 +BITMAP +0010 +FF10 +8110 +BD1E +8110 +BD10 +81FC +0044 +7E44 +4244 +7E28 +4228 +7E10 +4228 +7E44 +4282 +ENDCHAR +STARTCHAR uni3A9F +ENCODING 15007 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +FF20 +003E +3E44 +2244 +3E44 +00A4 +7F28 +4128 +4110 +7F10 +4128 +4148 +7F84 +4102 +ENDCHAR +STARTCHAR uni3AA0 +ENCODING 15008 +BBX 15 16 0 -2 +BITMAP +4410 +2810 +0010 +FF1E +2810 +FE10 +2AFC +FF44 +2A44 +FE44 +2828 +6C28 +AA10 +2928 +2844 +2882 +ENDCHAR +STARTCHAR uni3AA1 +ENCODING 15009 +BBX 14 16 1 -2 +BITMAP +2020 +1020 +FE20 +823C +1020 +7C20 +11F8 +7C88 +1088 +FE88 +1050 +7C50 +4420 +4450 +7C88 +4504 +ENDCHAR +STARTCHAR uni3AA2 +ENCODING 15010 +BBX 14 16 1 -2 +BITMAP +5020 +9620 +9220 +923C +D620 +9220 +93F8 +FE88 +1088 +FE88 +0250 +6450 +1820 +2450 +C288 +0104 +ENDCHAR +STARTCHAR uni3AA3 +ENCODING 15011 +BBX 14 16 1 -2 +BITMAP +2040 +1040 +FE40 +007C +7C88 +4488 +7C88 +0148 +FE50 +8250 +BA20 +AA20 +BA50 +8250 +8A88 +8504 +ENDCHAR +STARTCHAR uni3AA4 +ENCODING 15012 +BBX 15 16 0 -2 +BITMAP +0020 +7F20 +4920 +7F3E +4944 +7F44 +2A44 +2AA4 +FFA8 +2A28 +2A10 +7F10 +0828 +FFA8 +0844 +0882 +ENDCHAR +STARTCHAR uni3AA5 +ENCODING 15013 +BBX 15 16 0 -2 +BITMAP +1010 +1E10 +1010 +7F1E +5110 +5C10 +72FC +4E44 +4044 +5F44 +5128 +5F28 +5110 +5F28 +5144 +BF82 +ENDCHAR +STARTCHAR uni3AA6 +ENCODING 15014 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +FF20 +813E +0044 +7E44 +0844 +7EA4 +4A28 +7E28 +4A10 +7E10 +0028 +2448 +4284 +8102 +ENDCHAR +STARTCHAR uni3AA7 +ENCODING 15015 +BBX 15 16 0 -2 +BITMAP +0810 +1410 +2210 +5D1E +8090 +3E10 +22FC +3E44 +0044 +7744 +1128 +5528 +3310 +5528 +1144 +3382 +ENDCHAR +STARTCHAR uni3AA8 +ENCODING 15016 +BBX 15 16 0 -2 +BITMAP +2210 +1410 +FF9E +0810 +7F10 +08FC +FFC4 +4944 +2A44 +FFA8 +0028 +7F10 +4110 +4128 +7F44 +4182 +ENDCHAR +STARTCHAR uni3AA9 +ENCODING 15017 +BBX 15 16 0 -2 +BITMAP +0408 +3F88 +0488 +7FEE +0488 +3F88 +043C +5554 +75D4 +4454 +7FD4 +4448 +75C8 +5554 +5554 +8462 +ENDCHAR +STARTCHAR uni3AAA +ENCODING 15018 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +1010 +FF9E +2210 +4110 +94FC +1444 +F7C4 +1444 +7728 +1428 +F790 +1428 +1444 +1482 +ENDCHAR +STARTCHAR uni3AAB +ENCODING 15019 +BBX 15 16 0 -2 +BITMAP +1010 +1F10 +1010 +FF9E +8090 +7F10 +2AFC +5544 +A244 +7F44 +A2A8 +3E28 +2210 +3E28 +2244 +3E82 +ENDCHAR +STARTCHAR uni3AAC +ENCODING 15020 +BBX 15 16 0 -2 +BITMAP +0010 +EE10 +2210 +AA1E +6610 +AA10 +00FC +2444 +7F44 +C844 +7E28 +4828 +7E10 +4828 +7F44 +4082 +ENDCHAR +STARTCHAR uni3AAD +ENCODING 15021 +BBX 15 16 0 -2 +BITMAP +1010 +1F10 +101E +FF10 +9110 +FCFC +9144 +BF44 +AA44 +BE28 +AA28 +BE10 +8010 +7F28 +5544 +FF82 +ENDCHAR +STARTCHAR uni3AAE +ENCODING 15022 +BBX 15 16 0 -2 +BITMAP +0008 +7FC8 +0408 +FFEE +8428 +3588 +041C +3594 +0014 +0014 +EEF4 +AAA8 +AAA8 +AAB4 +EEF4 +AAA2 +ENDCHAR +STARTCHAR uni3AAF +ENCODING 15023 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +0820 +0440 +0380 +1C70 +E10E +0100 +1FF8 +0100 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni3AB0 +ENCODING 15024 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +0820 +0440 +0380 +1C70 +E10E +1110 +0920 +0540 +7FFC +0540 +0920 +3118 +C106 +ENDCHAR +STARTCHAR uni3AB1 +ENCODING 15025 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +10F8 +0108 +FE10 +09FC +0924 +4924 +2924 +1124 +13FE +2850 +2850 +4888 +8104 +0202 +ENDCHAR +STARTCHAR uni3AB2 +ENCODING 15026 +BBX 13 16 1 -2 +BITMAP +0080 +0880 +0480 +2480 +1080 +1080 +03F8 +FC80 +0080 +0080 +0080 +FFF0 +0010 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni3AB3 +ENCODING 15027 +BBX 13 15 1 -1 +BITMAP +0080 +0880 +0480 +2480 +1080 +13F8 +FC80 +0080 +0080 +0000 +3FE0 +4010 +4010 +4010 +3FE0 +ENDCHAR +STARTCHAR uni3AB4 +ENCODING 15028 +BBX 15 16 0 -2 +BITMAP +0010 +7C10 +0090 +0050 +0010 +FE90 +2850 +2810 +281E +29F0 +2810 +2A10 +4C10 +4810 +8010 +0010 +ENDCHAR +STARTCHAR uni3AB5 +ENCODING 15029 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +9490 +5850 +1010 +7C90 +1050 +1010 +FE1E +11F0 +1010 +1010 +2010 +2010 +4010 +8010 +ENDCHAR +STARTCHAR uni3AB6 +ENCODING 15030 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +1090 +1050 +2010 +7C90 +4450 +4410 +441E +7DF0 +4410 +4410 +4410 +7C10 +4410 +0010 +ENDCHAR +STARTCHAR uni3AB7 +ENCODING 15031 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +0090 +0050 +7C10 +4490 +4450 +4410 +7C1E +01F0 +4410 +2410 +2810 +0E10 +F010 +4010 +ENDCHAR +STARTCHAR uni3AB8 +ENCODING 15032 +BBX 15 16 0 -2 +BITMAP +2208 +2248 +FFA8 +2228 +2208 +3E48 +2228 +2228 +3E0E +2278 +2208 +FF08 +0008 +1408 +2208 +4108 +ENDCHAR +STARTCHAR uni3AB9 +ENCODING 15033 +BBX 15 16 0 -2 +BITMAP +0808 +7F48 +4928 +FFA8 +4908 +7F48 +0828 +7F28 +490E +7F78 +1008 +FF08 +2108 +7208 +0C08 +F308 +ENDCHAR +STARTCHAR uni3ABA +ENCODING 15034 +BBX 15 16 0 -2 +BITMAP +0808 +0848 +FFA8 +0828 +EB88 +AAC8 +EBA8 +AAA8 +EB8E +AAF8 +EB88 +1408 +1208 +2208 +4108 +8108 +ENDCHAR +STARTCHAR uni3ABB +ENCODING 15035 +BBX 15 16 0 -2 +BITMAP +2104 +47C8 +8812 +F3BC +2008 +4B92 +F83E +0380 +AAAA +ABAA +0440 +1240 +087E +FFC0 +0040 +0040 +ENDCHAR +STARTCHAR uni3ABC +ENCODING 15036 +BBX 15 15 0 -2 +BITMAP +0004 +FF78 +0440 +0440 +7440 +547E +5448 +5448 +5448 +7448 +5448 +0448 +0488 +1488 +0908 +ENDCHAR +STARTCHAR uni3ABD +ENCODING 15037 +BBX 15 15 0 -2 +BITMAP +FFFE +0000 +000C +7CF0 +4480 +4480 +4480 +7CFE +4488 +4488 +4488 +7C88 +4508 +0108 +0208 +ENDCHAR +STARTCHAR uni3ABE +ENCODING 15038 +BBX 15 16 0 -2 +BITMAP +1000 +1004 +1E78 +2240 +6240 +9440 +087E +1448 +2248 +4148 +BE48 +2248 +2248 +2288 +3E88 +2308 +ENDCHAR +STARTCHAR uni3ABF +ENCODING 15039 +BBX 15 16 0 -2 +BITMAP +0800 +4904 +4978 +4940 +7F40 +1040 +207E +4848 +8848 +4948 +4948 +7F48 +0848 +1088 +2088 +4108 +ENDCHAR +STARTCHAR uni3AC0 +ENCODING 15040 +BBX 15 15 0 -2 +BITMAP +7C04 +4478 +7C40 +4440 +7C40 +007E +FE48 +8248 +8248 +FE48 +8248 +8248 +FE88 +8288 +0108 +ENDCHAR +STARTCHAR uni3AC1 +ENCODING 15041 +BBX 15 16 0 -2 +BITMAP +1100 +9102 +AABC +BBA0 +9120 +AAA0 +BBBE +8024 +FFA4 +9224 +9224 +A1A4 +8024 +FFC4 +0044 +0084 +ENDCHAR +STARTCHAR uni3AC2 +ENCODING 15042 +BBX 15 16 0 -2 +BITMAP +1000 +0804 +7F78 +4040 +5240 +5240 +7F7E +5248 +5248 +5E48 +4048 +5548 +5548 +5588 +8088 +0108 +ENDCHAR +STARTCHAR uni3AC3 +ENCODING 15043 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +FF20 +2020 +2020 +3E20 +2220 +2250 +2250 +2250 +2250 +4288 +4A88 +8504 +0202 +ENDCHAR +STARTCHAR uni3AC4 +ENCODING 15044 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +1000 +1000 +3FF8 +4808 +8408 +7FE8 +1008 +1F88 +1088 +2088 +2088 +42A8 +8110 +ENDCHAR +STARTCHAR uni3AC5 +ENCODING 15045 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1050 +0088 +FD04 +2202 +20F8 +3C00 +2400 +27FE +2488 +2488 +2488 +4488 +5508 +8A08 +ENDCHAR +STARTCHAR uni3AC6 +ENCODING 15046 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0050 +FE50 +2088 +2104 +3E22 +2420 +24A8 +24A4 +2524 +2522 +4622 +5420 +88A0 +0040 +ENDCHAR +STARTCHAR uni3AC7 +ENCODING 15047 +BBX 15 16 0 -2 +BITMAP +1010 +0810 +FF28 +2044 +3E82 +2210 +2208 +4220 +4A10 +8408 +0000 +3FF8 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uni3AC8 +ENCODING 15048 +BBX 15 15 0 -1 +BITMAP +1010 +0810 +FF28 +2044 +3E82 +2210 +2208 +4220 +4A10 +8408 +1FF0 +2008 +2008 +2008 +1FF0 +ENDCHAR +STARTCHAR uni3AC9 +ENCODING 15049 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +10FC +0104 +FE08 +21FE +2100 +3D7C +2544 +2544 +2554 +2548 +2542 +4542 +553E +8A00 +ENDCHAR +STARTCHAR uni3ACA +ENCODING 15050 +BBX 15 16 0 -2 +BITMAP +2100 +1100 +11FE +0200 +FC00 +21FE +2008 +3C08 +25E8 +2528 +2528 +2528 +25E8 +4408 +5428 +8810 +ENDCHAR +STARTCHAR uni3ACB +ENCODING 15051 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +10FE +0120 +FE20 +21FC +2124 +3D24 +25FC +2524 +2524 +27FE +2504 +4504 +5514 +8908 +ENDCHAR +STARTCHAR uni3ACC +ENCODING 15052 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +10FE +0100 +FE00 +2000 +21FE +3C10 +2410 +2490 +249C +2490 +2490 +4490 +55FE +8800 +ENDCHAR +STARTCHAR uni3ACD +ENCODING 15053 +BBX 15 16 0 -2 +BITMAP +2100 +1100 +11FE +0200 +FC90 +2090 +215E +3D64 +2754 +2554 +2554 +2548 +2548 +4554 +5514 +8922 +ENDCHAR +STARTCHAR uni3ACE +ENCODING 15054 +BBX 15 16 0 -2 +BITMAP +2100 +1100 +13FE +FC00 +23FE +2222 +39FC +2820 +29FC +2924 +29FC +2924 +29FC +4820 +5BFE +8020 +ENDCHAR +STARTCHAR uni3ACF +ENCODING 15055 +BBX 15 16 0 -2 +BITMAP +2100 +1100 +11FE +0200 +FDFC +2050 +21FC +3D54 +2554 +25FC +2440 +27FE +2488 +4590 +5470 +8B8C +ENDCHAR +STARTCHAR uni3AD0 +ENCODING 15056 +BBX 12 14 2 -1 +BITMAP +7FC0 +4040 +4040 +7FC0 +4040 +4040 +7FC0 +0000 +80E0 +8F00 +F010 +8010 +8010 +7FF0 +ENDCHAR +STARTCHAR uni3AD1 +ENCODING 15057 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F880 +8880 +8BF8 +8888 +8888 +F888 +8888 +8908 +8908 +8908 +FA08 +8A08 +0450 +0820 +ENDCHAR +STARTCHAR uni3AD2 +ENCODING 15058 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0820 +0820 +FFFE +0820 +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni3AD3 +ENCODING 15059 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +F900 +89FC +8A00 +8C00 +89F8 +F810 +8820 +8840 +8880 +8900 +FA04 +8A04 +01FC +ENDCHAR +STARTCHAR uni3AD4 +ENCODING 15060 +BBX 15 14 0 -1 +BITMAP +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0200 +0200 +03F8 +0200 +0200 +0200 +FFFE +ENDCHAR +STARTCHAR uni3AD5 +ENCODING 15061 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0000 +7FFC +0440 +0440 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni3AD6 +ENCODING 15062 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +01F8 +0100 +0100 +0100 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni3AD7 +ENCODING 15063 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +0000 +3FF8 +0060 +0180 +FFFE +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni3AD8 +ENCODING 15064 +BBX 15 15 0 -2 +BITMAP +7FFC +0100 +0300 +0570 +190C +E102 +0100 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3AD9 +ENCODING 15065 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F840 +8840 +8BF8 +8840 +8840 +F840 +8FFC +8840 +88A0 +88A0 +F910 +8910 +0208 +0404 +ENDCHAR +STARTCHAR uni3ADA +ENCODING 15066 +BBX 12 16 1 -2 +BITMAP +1000 +3FF0 +4490 +8890 +1110 +2210 +4450 +0820 +3FE0 +2020 +2020 +3FA0 +2020 +2020 +3FE0 +2020 +ENDCHAR +STARTCHAR uni3ADB +ENCODING 15067 +BBX 14 15 1 -2 +BITMAP +03F8 +FA08 +8A08 +8A08 +8A08 +8BF8 +F8A0 +88A0 +88A0 +88A0 +8924 +F924 +8A24 +041C +0800 +ENDCHAR +STARTCHAR uni3ADC +ENCODING 15068 +BBX 14 14 1 -1 +BITMAP +03F0 +F210 +9210 +9210 +9210 +F3F0 +9210 +9210 +9210 +9210 +F3F0 +9000 +0000 +0FFC +ENDCHAR +STARTCHAR uni3ADD +ENCODING 15069 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F7C0 +9440 +9440 +9440 +9440 +F7FC +9440 +9420 +9420 +9424 +F414 +9514 +064C +0424 +ENDCHAR +STARTCHAR uni3ADE +ENCODING 15070 +BBX 14 16 1 -2 +BITMAP +0040 +0248 +F248 +9248 +93F8 +9040 +9040 +F7F8 +9208 +9110 +9110 +90A0 +F040 +90A0 +0310 +0C0C +ENDCHAR +STARTCHAR uni3ADF +ENCODING 15071 +BBX 14 15 1 -2 +BITMAP +01F0 +F910 +8910 +8910 +8910 +8A0C +FC00 +8800 +89F8 +8908 +8908 +F908 +8908 +01F8 +0108 +ENDCHAR +STARTCHAR uni3AE0 +ENCODING 15072 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +FA48 +8948 +8950 +8840 +8BF8 +F840 +8840 +8840 +8FFC +8840 +F840 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni3AE1 +ENCODING 15073 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0800 +1FF0 +2820 +4440 +0380 +1C70 +E30E +00C0 +0E00 +0180 +0040 +ENDCHAR +STARTCHAR uni3AE2 +ENCODING 15074 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +F040 +93F8 +9040 +9040 +9040 +F7FC +9040 +9080 +9080 +9110 +F208 +97FC +0204 +ENDCHAR +STARTCHAR uni3AE3 +ENCODING 15075 +BBX 13 16 2 -2 +BITMAP +7FC0 +4040 +7FC0 +4040 +7FC0 +0400 +FFE0 +8420 +8420 +FFE0 +8420 +8420 +FFE8 +0408 +0408 +03F8 +ENDCHAR +STARTCHAR uni3AE4 +ENCODING 15076 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +0080 +1F00 +0104 +7D88 +0950 +1120 +2118 +C506 +0200 +ENDCHAR +STARTCHAR uni3AE5 +ENCODING 15077 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F9F8 +8A08 +8D10 +88A0 +8840 +F880 +8900 +8BF8 +8D08 +8908 +F908 +8908 +01F8 +0108 +ENDCHAR +STARTCHAR uni3AE6 +ENCODING 15078 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +10FC +1088 +3550 +5420 +94D8 +1706 +14F8 +1488 +1488 +14F8 +1488 +1088 +10F8 +1088 +ENDCHAR +STARTCHAR uni3AE7 +ENCODING 15079 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +1110 +0920 +0100 +FFFE +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni3AE8 +ENCODING 15080 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F040 +97FC +9404 +9888 +F080 +97FC +9110 +9110 +9210 +F1A0 +9040 +00A0 +0110 +0608 +ENDCHAR +STARTCHAR uni3AE9 +ENCODING 15081 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +0820 +FFFE +0820 +0820 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3AEA +ENCODING 15082 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0280 +FFFE +0440 +0820 +39F8 +C90E +09F8 +0908 +0908 +09F8 +ENDCHAR +STARTCHAR uni3AEB +ENCODING 15083 +BBX 15 14 0 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +7FFC +0440 +0440 +2448 +1448 +1450 +0440 +FFFE +ENDCHAR +STARTCHAR uni3AEC +ENCODING 15084 +BBX 13 16 1 -2 +BITMAP +0100 +0100 +F200 +93F8 +9408 +9808 +F7C8 +9448 +9448 +97C8 +9448 +F448 +97C8 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni3AED +ENCODING 15085 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +3FF8 +0100 +FFFE +0040 +7FFC +0840 +0440 +0140 +0080 +ENDCHAR +STARTCHAR uni3AEE +ENCODING 15086 +BBX 14 16 0 -2 +BITMAP +0880 +0888 +2E90 +28E0 +2884 +2E84 +F07C +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3AEF +ENCODING 15087 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +3FF8 +2008 +3FF8 +2008 +3FF8 +0000 +7FFC +0440 +1842 +E03E +ENDCHAR +STARTCHAR uni3AF0 +ENCODING 15088 +BBX 14 16 1 -2 +BITMAP +0100 +0080 +F7F0 +9410 +9410 +97F0 +9410 +F410 +97F0 +9480 +9488 +9450 +F420 +9510 +060C +0400 +ENDCHAR +STARTCHAR uni3AF1 +ENCODING 15089 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +3FF8 +0100 +FFFE +0440 +2448 +4444 +8842 +1140 +2080 +ENDCHAR +STARTCHAR uni3AF2 +ENCODING 15090 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +9040 +9040 +97FC +F404 +9808 +93F0 +9020 +9040 +F7FC +9040 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni3AF3 +ENCODING 15091 +BBX 15 15 0 -2 +BITMAP +3FFC +2000 +2FF8 +2000 +3FFC +2448 +2530 +260E +2000 +2FF8 +2808 +4FF8 +4808 +8FF8 +0808 +ENDCHAR +STARTCHAR uni3AF4 +ENCODING 15092 +BBX 14 16 1 -2 +BITMAP +0080 +0088 +F7E8 +9090 +9090 +9FFC +F040 +9080 +97F0 +9220 +9440 +FBFC +9040 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni3AF5 +ENCODING 15093 +BBX 14 16 1 -2 +BITMAP +0120 +0120 +F120 +9F3C +9120 +9120 +9120 +F738 +9120 +9120 +9120 +9F3C +F120 +9120 +0120 +0120 +ENDCHAR +STARTCHAR uni3AF6 +ENCODING 15094 +BBX 14 15 1 -2 +BITMAP +03F8 +F008 +91F8 +9008 +93F8 +F000 +97FC +9444 +9040 +93F8 +F248 +9248 +0268 +0250 +0040 +ENDCHAR +STARTCHAR uni3AF7 +ENCODING 15095 +BBX 15 16 0 -2 +BITMAP +0820 +7FFC +0820 +0FE0 +0820 +0FE0 +0820 +FFFE +1010 +2008 +DFF6 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3AF8 +ENCODING 15096 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F7FE +9040 +93F8 +9048 +97FE +F048 +93F8 +9040 +9240 +927C +F240 +9540 +04FE +0800 +ENDCHAR +STARTCHAR uni3AF9 +ENCODING 15097 +BBX 14 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +0618 +38E0 +2080 +3E80 +22FC +3E90 +2090 +2090 +4090 +8110 +ENDCHAR +STARTCHAR uni3AFA +ENCODING 15098 +BBX 14 16 1 -2 +BITMAP +1040 +1040 +1040 +28A0 +4510 +9248 +1040 +28A0 +4510 +820C +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +ENDCHAR +STARTCHAR uni3AFB +ENCODING 15099 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F0A0 +9110 +9208 +9DF6 +9000 +F7FC +94A4 +94A4 +97FC +94A4 +F4A4 +94A4 +0414 +0408 +ENDCHAR +STARTCHAR uni3AFC +ENCODING 15100 +BBX 14 16 1 -2 +BITMAP +0104 +0104 +F504 +97D4 +9914 +9114 +9FF4 +F114 +97D4 +9554 +9554 +9554 +F544 +95C4 +0114 +0108 +ENDCHAR +STARTCHAR uni3AFD +ENCODING 15101 +BBX 14 15 1 -2 +BITMAP +03F0 +F010 +9010 +93F0 +9010 +9010 +F7FC +9040 +9444 +92E8 +9150 +F248 +9444 +0140 +0080 +ENDCHAR +STARTCHAR uni3AFE +ENCODING 15102 +BBX 14 16 1 -2 +BITMAP +0040 +0248 +F148 +9150 +9040 +97FC +9404 +F404 +95F4 +9514 +9514 +9514 +F5F4 +9404 +0414 +0408 +ENDCHAR +STARTCHAR uni3AFF +ENCODING 15103 +BBX 14 16 1 -2 +BITMAP +0140 +0120 +F100 +93FC +9220 +9620 +9BF8 +F220 +9220 +93F8 +9220 +9220 +F220 +93FC +0200 +0200 +ENDCHAR +STARTCHAR uni3B00 +ENCODING 15104 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9000 +93F8 +9208 +F3F8 +9000 +93F8 +9010 +9020 +F7FC +9040 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni3B01 +ENCODING 15105 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +2040 +10A0 +8110 +42E8 +1406 +23F8 +E208 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni3B02 +ENCODING 15106 +BBX 14 16 1 -2 +BITMAP +03F8 +0248 +F248 +93F8 +9248 +9248 +F3F8 +9040 +9040 +97FC +9444 +F454 +95F4 +0414 +0404 +040C +ENDCHAR +STARTCHAR uni3B03 +ENCODING 15107 +BBX 15 16 0 -2 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +1000 +2008 +7FFC +0004 +3FF8 +2008 +3FF8 +1108 +2290 +0C60 +F01E +ENDCHAR +STARTCHAR uni3B04 +ENCODING 15108 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +3FFC +2080 +2FF8 +2080 +3FFC +2220 +4A28 +5424 +A4A2 +0840 +ENDCHAR +STARTCHAR uni3B05 +ENCODING 15109 +BBX 15 16 0 -2 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +0000 +7FFC +4444 +7FFC +0000 +FFFE +0800 +0FF8 +1008 +2028 +C010 +ENDCHAR +STARTCHAR uni3B06 +ENCODING 15110 +BBX 14 15 1 -2 +BITMAP +07F8 +F408 +97F8 +9440 +97FC +9420 +F514 +960C +9000 +97F8 +9408 +F7F8 +9408 +07F8 +0408 +ENDCHAR +STARTCHAR uni3B07 +ENCODING 15111 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F1F0 +9210 +9420 +9BF8 +F248 +9248 +9248 +9248 +97FC +F0A0 +90A0 +0110 +0208 +0C04 +ENDCHAR +STARTCHAR uni3B08 +ENCODING 15112 +BBX 14 14 1 -1 +BITMAP +03F0 +F210 +9210 +93F0 +9210 +F210 +93F0 +9000 +97F8 +9528 +F528 +9528 +0528 +0FFC +ENDCHAR +STARTCHAR uni3B09 +ENCODING 15113 +BBX 14 15 1 -2 +BITMAP +07FC +F040 +9080 +93F8 +92A8 +F2A8 +92A8 +92A8 +9258 +9040 +F7FC +90A0 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni3B0A +ENCODING 15114 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +00FC +7F08 +1110 +3FF8 +0200 +FFFE +0800 +17F0 +2220 +C1C0 +0E3C +ENDCHAR +STARTCHAR uni3B0B +ENCODING 15115 +BBX 14 16 1 -2 +BITMAP +0100 +0178 +F108 +9210 +93FC +9640 +9A40 +F2F8 +9320 +9220 +93FC +9220 +F250 +9250 +0288 +0304 +ENDCHAR +STARTCHAR uni3B0C +ENCODING 15116 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0920 +1110 +2308 +ENDCHAR +STARTCHAR uni3B0D +ENCODING 15117 +BBX 14 16 1 -2 +BITMAP +0050 +0048 +F7FC +9040 +93F8 +9248 +F3F8 +9248 +93F8 +9248 +9010 +F7FC +9110 +0090 +0090 +0030 +ENDCHAR +STARTCHAR uni3B0E +ENCODING 15118 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +1020 +2244 +1428 +0810 +162C +79F2 +2008 +4444 +8222 +ENDCHAR +STARTCHAR uni3B0F +ENCODING 15119 +BBX 14 15 1 -2 +BITMAP +07FC +F000 +93F8 +9208 +9208 +F3F8 +9000 +97FC +9514 +94A4 +F7FC +9444 +0444 +0454 +0408 +ENDCHAR +STARTCHAR uni3B10 +ENCODING 15120 +BBX 14 15 1 -2 +BITMAP +07F8 +F120 +9528 +9330 +9120 +9FFC +F000 +93F0 +9210 +9210 +93F0 +F210 +9210 +03F0 +0210 +ENDCHAR +STARTCHAR uni3B11 +ENCODING 15121 +BBX 15 16 0 -2 +BITMAP +0200 +011E +F7D2 +9012 +97D4 +9454 +97D8 +F014 +97D2 +9092 +9112 +91DA +F714 +9110 +0510 +0210 +ENDCHAR +STARTCHAR uni3B12 +ENCODING 15122 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9048 +97FC +F0A0 +9110 +9208 +9514 +9110 +F7FC +9110 +0110 +0210 +0410 +ENDCHAR +STARTCHAR uni3B13 +ENCODING 15123 +BBX 14 15 1 -2 +BITMAP +07FC +F0A0 +93F8 +92A8 +92A8 +93F8 +F000 +93F8 +9000 +97FC +9040 +F150 +9248 +0544 +0080 +ENDCHAR +STARTCHAR uni3B14 +ENCODING 15124 +BBX 15 15 0 -2 +BITMAP +07BC +F084 +94A4 +9294 +94A4 +9050 +F188 +9626 +90C0 +9310 +9064 +F388 +9030 +00C0 +0700 +ENDCHAR +STARTCHAR uni3B15 +ENCODING 15125 +BBX 14 16 1 -2 +BITMAP +0444 +0224 +F228 +907C +9F10 +9110 +9210 +F27C +9710 +9A90 +9210 +927C +F210 +9210 +0210 +0210 +ENDCHAR +STARTCHAR uni3B16 +ENCODING 15126 +BBX 15 16 0 -2 +BITMAP +0210 +0110 +F79E +94A4 +94D4 +9794 +9408 +F414 +9462 +9800 +93F8 +9208 +F208 +9208 +03F8 +0208 +ENDCHAR +STARTCHAR uni3B17 +ENCODING 15127 +BBX 14 16 1 -2 +BITMAP +0220 +0228 +F3A4 +94A0 +94FC +9AA0 +9120 +F550 +9250 +9288 +9488 +9904 +F010 +9548 +04A4 +08A4 +ENDCHAR +STARTCHAR uni3B18 +ENCODING 15128 +BBX 14 16 1 -2 +BITMAP +0040 +03F8 +F048 +97FC +9048 +93F8 +9040 +F554 +975C +9444 +97FC +9444 +F75C +9554 +0554 +0844 +ENDCHAR +STARTCHAR uni3B19 +ENCODING 15129 +BBX 14 16 1 -2 +BITMAP +001C +07E0 +F088 +9448 +9210 +97F0 +F410 +97F8 +9408 +97FC +9404 +F554 +9554 +0A04 +0828 +1010 +ENDCHAR +STARTCHAR uni3B1A +ENCODING 15130 +BBX 15 15 1 -1 +BITMAP +0210 +0210 +FFD0 +921E +94B4 +9F64 +9054 +F794 +9494 +9788 +9488 +9788 +F494 +0494 +05A2 +ENDCHAR +STARTCHAR uni3B1B +ENCODING 15131 +BBX 15 16 0 -2 +BITMAP +0040 +00A0 +F118 +96E6 +9000 +93F8 +9208 +F3F8 +9000 +97BC +9084 +94A4 +F294 +94A4 +0294 +0108 +ENDCHAR +STARTCHAR uni3B1C +ENCODING 15132 +BBX 15 14 1 -1 +BITMAP +FEFE +1010 +2424 +FAFA +1212 +7C7C +1010 +FEFE +0000 +1FF8 +1008 +1FF8 +1008 +1FF8 +ENDCHAR +STARTCHAR uni3B1D +ENCODING 15133 +BBX 14 16 1 -2 +BITMAP +0208 +0110 +F000 +97FC +9444 +9554 +94E4 +F444 +97FC +9000 +93F8 +9208 +F3F8 +9208 +03F8 +0208 +ENDCHAR +STARTCHAR uni3B1E +ENCODING 15134 +BBX 14 16 1 -2 +BITMAP +0040 +0444 +F7FC +9000 +93F8 +9208 +93F8 +F208 +93F8 +9100 +93FC +9444 +FAA4 +9204 +03F4 +000C +ENDCHAR +STARTCHAR uni3B1F +ENCODING 15135 +BBX 15 16 0 -2 +BITMAP +4044 +4024 +4028 +7EFE +AA92 +2AD6 +2ABA +4A92 +4AFE +9200 +127C +2244 +227C +4244 +947C +0844 +ENDCHAR +STARTCHAR uni3B20 +ENCODING 15136 +BBX 15 16 0 -2 +BITMAP +0210 +0210 +F3D0 +945E +98A4 +93D4 +9054 +F054 +93C8 +9048 +9054 +97E2 +F000 +92A4 +0252 +0452 +ENDCHAR +STARTCHAR uni3B21 +ENCODING 15137 +BBX 14 15 1 -2 +BITMAP +03F8 +F040 +97FC +9444 +9358 +F040 +9358 +90A0 +9190 +964C +F1F0 +9010 +01A0 +0040 +0020 +ENDCHAR +STARTCHAR uni3B22 +ENCODING 15138 +BBX 15 15 1 -1 +BITMAP +0110 +00A0 +F7FC +9040 +93F8 +9040 +9FFE +F008 +9744 +9240 +9FFE +9224 +F728 +0A92 +026E +ENDCHAR +STARTCHAR uni3B23 +ENCODING 15139 +BBX 15 16 0 -2 +BITMAP +0284 +0284 +FAA4 +96C4 +929E +97C4 +9004 +F454 +928C +97C4 +9104 +97C4 +F104 +91C4 +0E14 +0008 +ENDCHAR +STARTCHAR uni3B24 +ENCODING 15140 +BBX 14 15 1 -2 +BITMAP +07FC +F404 +97FC +9404 +97FC +F210 +94A4 +9738 +9210 +94A4 +F7BC +9000 +0548 +04A4 +08A4 +ENDCHAR +STARTCHAR uni3B25 +ENCODING 15141 +BBX 15 16 0 -2 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +1110 +1FF0 +4104 +7FFC +0200 +FFFE +0920 +3558 +DFF6 +0540 +0920 +ENDCHAR +STARTCHAR uni3B26 +ENCODING 15142 +BBX 14 16 1 -2 +BITMAP +0110 +07FC +F150 +9120 +93FC +9640 +F3F8 +9240 +93F8 +9240 +93FC +F200 +97F8 +0110 +00E0 +071C +ENDCHAR +STARTCHAR uni3B27 +ENCODING 15143 +BBX 15 16 0 -2 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +1110 +1FF0 +0100 +FFFE +0A20 +3458 +CF86 +0120 +1FF0 +0950 +1320 +ENDCHAR +STARTCHAR uni3B28 +ENCODING 15144 +BBX 15 16 0 -2 +BITMAP +0110 +0110 +F110 +97BC +9110 +9110 +9FFE +F2A8 +92A8 +96EC +9AAA +92AA +F2A8 +95A8 +0448 +0898 +ENDCHAR +STARTCHAR uni3B29 +ENCODING 15145 +BBX 14 16 1 -2 +BITMAP +0110 +07BC +F110 +93B8 +9110 +97BC +9110 +F7F8 +9008 +93F8 +9008 +97F8 +F080 +9548 +0514 +08F4 +ENDCHAR +STARTCHAR uni3B2A +ENCODING 15146 +BBX 15 16 0 -2 +BITMAP +0FE0 +0820 +0FE0 +0820 +0FE0 +7C7C +4444 +7C7C +4544 +FFFE +8802 +0FF0 +1010 +1FE0 +0020 +FFFE +ENDCHAR +STARTCHAR uni3B2B +ENCODING 15147 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +17D2 +F01C +17D0 +3452 +D7CE +0000 +4444 +8222 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni3B2C +ENCODING 15148 +BBX 15 16 0 -2 +BITMAP +07BC +04A4 +F7BC +94A4 +97BC +94A4 +97BC +F120 +93FE +9220 +97FC +9A20 +F3FC +9220 +03FE +0200 +ENDCHAR +STARTCHAR uni3B2D +ENCODING 15149 +BBX 14 16 1 -2 +BITMAP +003C +07C0 +F244 +9128 +97FC +94A4 +F7FC +9008 +9788 +94FC +9788 +F4A8 +9798 +0508 +05A8 +0690 +ENDCHAR +STARTCHAR uni3B2E +ENCODING 15150 +BBX 15 16 0 -2 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +4450 +FE48 +44FE +7D90 +10FC +FE90 +92FC +FE90 +1090 +FEFE +2880 +ENDCHAR +STARTCHAR uni3B2F +ENCODING 15151 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +0800 +EFF8 +A000 +AFF8 +A808 +EFF8 +A220 +BD5C +B7F4 +BC94 +F5DC +1C96 +17F6 +2CA2 +ENDCHAR +STARTCHAR uni3B30 +ENCODING 15152 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3B31 +ENCODING 15153 +BBX 15 16 0 -2 +BITMAP +2850 +3E7C +4890 +FEFE +1428 +1528 +264A +4486 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3B32 +ENCODING 15154 +BBX 15 16 0 -2 +BITMAP +0088 +7C50 +1000 +11FC +7C50 +5488 +5504 +7DFC +5554 +5554 +7D54 +93FE +6000 +2000 +5FFE +8000 +ENDCHAR +STARTCHAR uni3B33 +ENCODING 15155 +BBX 15 16 0 -2 +BITMAP +0080 +3C80 +2480 +25FC +2520 +3E20 +2420 +2420 +27FE +3C20 +2420 +2420 +2420 +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni3B34 +ENCODING 15156 +BBX 15 16 0 -2 +BITMAP +0090 +7890 +4890 +4890 +4BFC +7890 +4890 +4890 +4890 +7BFE +4800 +4890 +4888 +4908 +4904 +9A04 +ENDCHAR +STARTCHAR uni3B35 +ENCODING 15157 +BBX 15 16 0 -2 +BITMAP +0040 +3C20 +2420 +25FE +2400 +3C88 +2504 +2602 +2488 +3C88 +2450 +2450 +2420 +4450 +5488 +8B06 +ENDCHAR +STARTCHAR uni3B36 +ENCODING 15158 +BBX 15 16 0 -2 +BITMAP +0020 +7920 +4920 +49FC +4920 +7A20 +4820 +4BFE +4800 +7800 +49FC +4904 +4904 +4904 +49FC +9904 +ENDCHAR +STARTCHAR uni3B37 +ENCODING 15159 +BBX 15 15 0 -2 +BITMAP +7BFE +4A22 +4A22 +4A22 +7BFE +4A22 +4A62 +4A72 +7AAA +4B22 +4A22 +4A22 +4A02 +4BFE +9A02 +ENDCHAR +STARTCHAR uni3B38 +ENCODING 15160 +BBX 15 16 0 -2 +BITMAP +0088 +3C88 +25FE +2488 +2488 +3C50 +2450 +2494 +2594 +3E98 +2490 +24B2 +24D2 +4492 +548E +8880 +ENDCHAR +STARTCHAR uni3B39 +ENCODING 15161 +BBX 15 16 0 -2 +BITMAP +0080 +3C80 +24F8 +2508 +2610 +3DFC +2424 +2424 +25FE +3C24 +2424 +25FC +2424 +4420 +54A0 +8840 +ENDCHAR +STARTCHAR uni3B3A +ENCODING 15162 +BBX 15 16 0 -2 +BITMAP +0020 +7924 +48A8 +49FC +4840 +7BFE +4908 +4A24 +4C22 +79FC +4924 +4924 +4934 +4928 +4820 +9820 +ENDCHAR +STARTCHAR uni3B3B +ENCODING 15163 +BBX 15 16 0 -2 +BITMAP +0088 +7888 +4BFE +48A8 +4810 +7BFE +4880 +4880 +48FC +7800 +48A8 +48A8 +48A8 +48AA +492A +9A06 +ENDCHAR +STARTCHAR uni3B3C +ENCODING 15164 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +7EFE +1080 +21FC +3E84 +24FC +6484 +BCFC +2440 +247C +3CC4 +2528 +2410 +2468 +2D86 +ENDCHAR +STARTCHAR uni3B3D +ENCODING 15165 +BBX 15 15 0 -2 +BITMAP +3CF8 +2488 +24F8 +2400 +3DDC +2554 +25DC +2400 +3DFE +2480 +24FC +2404 +4404 +5428 +8810 +ENDCHAR +STARTCHAR uni3B3E +ENCODING 15166 +BBX 13 16 1 -2 +BITMAP +FEF0 +9090 +BE98 +C900 +BEF0 +9490 +A260 +FE98 +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +20E0 +ENDCHAR +STARTCHAR uni3B3F +ENCODING 15167 +BBX 15 16 0 -2 +BITMAP +0108 +7888 +4BC8 +4810 +4BDE +7A64 +4BD4 +4814 +4BD4 +7854 +4894 +48E8 +4B88 +4894 +4A94 +9922 +ENDCHAR +STARTCHAR uni3B40 +ENCODING 15168 +BBX 15 16 0 -2 +BITMAP +0110 +7910 +49DE +4AA8 +4C44 +7800 +4BFC +4820 +4928 +7928 +4928 +4AB4 +4C62 +4820 +4BFE +9800 +ENDCHAR +STARTCHAR uni3B41 +ENCODING 15169 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +13F8 +1088 +FC90 +1090 +30A0 +38BC +5484 +5484 +9104 +1104 +1104 +1204 +1228 +1410 +ENDCHAR +STARTCHAR uni3B42 +ENCODING 15170 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +FC20 +10A8 +30A4 +38A4 +5522 +5122 +9222 +1020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni3B43 +ENCODING 15171 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1040 +1040 +FC84 +1084 +3108 +3BF8 +5510 +5410 +9020 +1040 +1088 +1104 +13FE +1102 +ENDCHAR +STARTCHAR uni3B44 +ENCODING 15172 +BBX 15 16 0 -2 +BITMAP +1000 +13F0 +1090 +1090 +FC90 +1090 +3090 +3BF0 +5490 +5490 +9090 +1092 +108A +108A +1086 +1082 +ENDCHAR +STARTCHAR uni3B45 +ENCODING 15173 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FC +1000 +FC00 +1000 +3000 +39F8 +5400 +5400 +9000 +1000 +1000 +17FE +1000 +1000 +ENDCHAR +STARTCHAR uni3B46 +ENCODING 15174 +BBX 15 15 0 -2 +BITMAP +3FE0 +0420 +047C +0804 +3014 +C108 +0100 +7FFC +0100 +3FF8 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni3B47 +ENCODING 15175 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1080 +1088 +FD04 +13FE +3002 +3890 +5490 +5490 +9090 +1090 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni3B48 +ENCODING 15176 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +13F8 +FC48 +1048 +3048 +3848 +57FE +5440 +90A0 +10A0 +1110 +1110 +1208 +1406 +ENDCHAR +STARTCHAR uni3B49 +ENCODING 15177 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +0100 +7FFC +0380 +0540 +0920 +1110 +2108 +C106 +0100 +0100 +ENDCHAR +STARTCHAR uni3B4A +ENCODING 15178 +BBX 15 16 0 -2 +BITMAP +1010 +1110 +1110 +1110 +FD10 +11FE +3100 +3900 +5500 +55F8 +9108 +1108 +1108 +1208 +1208 +1408 +ENDCHAR +STARTCHAR uni3B4B +ENCODING 15179 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +FC20 +1020 +3020 +39FC +5420 +5420 +9020 +13FE +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni3B4C +ENCODING 15180 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1120 +1120 +FDFC +1120 +3220 +3820 +5420 +53FE +9020 +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni3B4D +ENCODING 15181 +BBX 15 16 0 -2 +BITMAP +4080 +2080 +089C +17E0 +E080 +2084 +2084 +207C +0100 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni3B4E +ENCODING 15182 +BBX 14 16 0 -2 +BITMAP +1000 +13FC +1204 +1204 +FE94 +1254 +3224 +3A24 +5654 +5254 +9294 +1304 +1204 +1204 +1214 +1208 +ENDCHAR +STARTCHAR uni3B4F +ENCODING 15183 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FE +FC20 +1020 +30FC +3820 +5420 +55FE +9022 +1022 +102A +1024 +1020 +1020 +ENDCHAR +STARTCHAR uni3B50 +ENCODING 15184 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3018 +C106 +0100 +7FFC +0100 +3FF8 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni3B51 +ENCODING 15185 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FC20 +1020 +3020 +3BFE +5470 +54A8 +90A8 +1124 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni3B52 +ENCODING 15186 +BBX 14 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +FD08 +1108 +31F8 +3900 +5500 +55FC +9104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni3B53 +ENCODING 15187 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1040 +1088 +FD04 +13FE +3002 +3888 +5488 +53FE +9088 +1088 +1108 +1108 +1208 +1408 +ENDCHAR +STARTCHAR uni3B54 +ENCODING 15188 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13E0 +1020 +FD24 +10A4 +30A8 +3820 +57FE +5420 +9020 +1020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni3B55 +ENCODING 15189 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FC20 +1020 +3020 +3BFE +5420 +5440 +9040 +1088 +1104 +13FE +1102 +1000 +ENDCHAR +STARTCHAR uni3B56 +ENCODING 15190 +BBX 15 16 0 -2 +BITMAP +10A0 +10A8 +10A4 +1124 +FD20 +133E +3BE0 +3520 +5120 +5120 +9120 +1120 +1114 +1114 +110C +1104 +ENDCHAR +STARTCHAR uni3B57 +ENCODING 15191 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +7FFC +0380 +0540 +0920 +3118 +C106 +0000 +3FF8 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni3B58 +ENCODING 15192 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1088 +FD04 +1202 +31FC +3800 +5400 +55FC +9104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni3B59 +ENCODING 15193 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FC20 +1020 +33FE +3808 +5408 +55FE +9008 +1088 +1048 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni3B5A +ENCODING 15194 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FE +1100 +FE00 +101C +31E0 +3920 +5522 +5524 +9128 +1110 +1110 +1148 +1184 +1102 +ENDCHAR +STARTCHAR uni3B5B +ENCODING 15195 +BBX 15 16 0 -2 +BITMAP +1004 +101E +11E0 +1100 +FD06 +1178 +3150 +3950 +5552 +5554 +9148 +1148 +1144 +1254 +1262 +1440 +ENDCHAR +STARTCHAR uni3B5C +ENCODING 15196 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +1024 +1020 +FBFE +1020 +3124 +3924 +5524 +53A8 +9128 +1110 +1212 +122A +1446 +1082 +ENDCHAR +STARTCHAR uni3B5D +ENCODING 15197 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7EFC +0820 +1C70 +2AA8 +C826 +0200 +0200 +1FE0 +0420 +0420 +0822 +1022 +201E +4000 +ENDCHAR +STARTCHAR uni3B5E +ENCODING 15198 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1124 +1122 +FA2A +1010 +3060 +3B80 +5440 +5040 +93FC +1044 +1084 +1084 +1114 +1208 +ENDCHAR +STARTCHAR uni3B5F +ENCODING 15199 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +3FF8 +0440 +0440 +0440 +FFFE +0820 +3118 +C106 +1FF0 +0300 +05C0 +1930 +6108 +0100 +ENDCHAR +STARTCHAR uni3B60 +ENCODING 15200 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +1120 +11FC +FD20 +1220 +3020 +3BFE +5490 +5490 +9090 +1090 +1112 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni3B61 +ENCODING 15201 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1040 +11FC +FD04 +1104 +3194 +3954 +5524 +5524 +9154 +1194 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni3B62 +ENCODING 15202 +BBX 14 16 0 -2 +BITMAP +2004 +27C4 +2284 +2294 +FA94 +2294 +2294 +77D4 +6A94 +A294 +A294 +2294 +2284 +2484 +2494 +2888 +ENDCHAR +STARTCHAR uni3B63 +ENCODING 15203 +BBX 14 16 0 -2 +BITMAP +1100 +1080 +10BC +1204 +FE04 +12F4 +3294 +3A94 +5694 +5294 +92F4 +1294 +1204 +1204 +1214 +1208 +ENDCHAR +STARTCHAR uni3B64 +ENCODING 15204 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1104 +FD44 +1124 +3124 +390C +5500 +55FE +9002 +1002 +13FA +1002 +1014 +1008 +ENDCHAR +STARTCHAR uni3B65 +ENCODING 15205 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10F8 +1088 +FD10 +13FC +3104 +3924 +5524 +5124 +9124 +1124 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni3B66 +ENCODING 15206 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC00 +1038 +33C0 +3840 +5440 +507C +93C0 +1040 +1042 +1042 +103E +1000 +ENDCHAR +STARTCHAR uni3B67 +ENCODING 15207 +BBX 15 16 0 -2 +BITMAP +0200 +0400 +1FF0 +1110 +1090 +FFFE +1010 +1210 +2150 +4020 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni3B68 +ENCODING 15208 +BBX 15 16 0 -2 +BITMAP +2000 +27DE +2092 +2492 +FC94 +2494 +27D8 +7094 +6992 +A192 +A292 +229A +2494 +2890 +2290 +2110 +ENDCHAR +STARTCHAR uni3B69 +ENCODING 15209 +BBX 15 16 0 -2 +BITMAP +1004 +101E +11E0 +1022 +FD12 +1094 +3080 +3808 +55FE +5408 +9088 +1048 +1048 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni3B6A +ENCODING 15210 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +13FE +1020 +FC20 +11FC +3124 +3924 +55FC +5524 +9124 +11FC +1124 +1124 +1124 +110C +ENDCHAR +STARTCHAR uni3B6B +ENCODING 15211 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +10A8 +10A8 +FCA8 +1174 +3222 +3820 +5420 +55FC +9020 +1020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni3B6C +ENCODING 15212 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1040 +1080 +FD44 +1224 +3068 +38B0 +5530 +5228 +9068 +10A4 +1122 +1220 +10A0 +1040 +ENDCHAR +STARTCHAR uni3B6D +ENCODING 15213 +BBX 15 15 1 -1 +BITMAP +2002 +27C2 +2452 +FC52 +2452 +27D2 +7212 +6A12 +6BD2 +A252 +A252 +2242 +2442 +2442 +298E +ENDCHAR +STARTCHAR uni3B6E +ENCODING 15214 +BBX 15 16 0 -2 +BITMAP +2124 +2124 +2248 +2248 +F924 +2124 +2000 +77FE +6880 +A1FC +A104 +2288 +2450 +2020 +20C0 +2700 +ENDCHAR +STARTCHAR uni3B6F +ENCODING 15215 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1120 +1128 +FD28 +11E8 +3128 +3928 +5528 +55E8 +9128 +112A +113A +13EA +1026 +1020 +ENDCHAR +STARTCHAR uni3B70 +ENCODING 15216 +BBX 15 16 0 -2 +BITMAP +0880 +2888 +2EF0 +2884 +2E84 +F17C +0100 +FFFE +0100 +3FF8 +2108 +2388 +2558 +0920 +1110 +610C +ENDCHAR +STARTCHAR uni3B71 +ENCODING 15217 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1100 +117C +FD54 +1154 +317C +3954 +5554 +557C +9110 +1110 +1110 +1100 +11FE +1000 +ENDCHAR +STARTCHAR uni3B72 +ENCODING 15218 +BBX 15 16 0 -2 +BITMAP +1000 +1050 +1048 +1084 +FD24 +1020 +3050 +3888 +5506 +52F8 +9088 +1088 +1088 +1088 +10F8 +1088 +ENDCHAR +STARTCHAR uni3B73 +ENCODING 15219 +BBX 15 16 0 -2 +BITMAP +1020 +1022 +11FA +1024 +FC24 +13FE +3010 +3820 +55FC +5488 +9110 +12FE +1410 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni3B74 +ENCODING 15220 +BBX 15 16 0 -2 +BITMAP +1080 +12FC +12A4 +12A4 +FEA8 +1290 +32A8 +38C6 +5420 +5420 +91FC +1020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni3B75 +ENCODING 15221 +BBX 14 16 0 -2 +BITMAP +1100 +1100 +11FC +1204 +FA04 +15F4 +3154 +3954 +55F4 +5154 +9154 +11F4 +1114 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni3B76 +ENCODING 15222 +BBX 15 16 0 -2 +BITMAP +1104 +1104 +17FE +1104 +FD44 +1020 +37FE +3880 +5480 +54FC +9084 +1084 +1104 +1104 +1214 +1408 +ENDCHAR +STARTCHAR uni3B77 +ENCODING 15223 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1124 +FD24 +11FC +1124 +3924 +35FC +3020 +53FE +5042 +9042 +1082 +1102 +121C +ENDCHAR +STARTCHAR uni3B78 +ENCODING 15224 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10F8 +1108 +FA10 +11FC +3124 +3924 +5524 +51FC +9050 +1058 +1094 +1092 +1112 +120E +ENDCHAR +STARTCHAR uni3B79 +ENCODING 15225 +BBX 15 16 0 -2 +BITMAP +1010 +1388 +1088 +10FE +FC90 +1390 +3224 +3A24 +5638 +5388 +9090 +1090 +10A4 +10BE +1282 +1100 +ENDCHAR +STARTCHAR uni3B7A +ENCODING 15226 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1050 +FC88 +1124 +3222 +39FC +5524 +55FC +9124 +11FC +1022 +1022 +101E +1000 +ENDCHAR +STARTCHAR uni3B7B +ENCODING 15227 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +10A4 +10A8 +FC20 +13FE +3202 +3A02 +56FA +528A +928A +128A +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni3B7C +ENCODING 15228 +BBX 15 16 0 -2 +BITMAP +1020 +1022 +13B4 +10A8 +FCA8 +1124 +32A2 +3840 +55FC +5504 +9104 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni3B7D +ENCODING 15229 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1200 +FE1C +12F0 +3290 +3A90 +56FE +5290 +9290 +1290 +12AA +12CA +14A6 +1812 +ENDCHAR +STARTCHAR uni3B7E +ENCODING 15230 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1202 +FBFE +1210 +3292 +3A92 +5692 +52FE +9210 +1292 +1292 +1492 +14FE +1802 +ENDCHAR +STARTCHAR uni3B7F +ENCODING 15231 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2204 +23FC +FA04 +23FC +2000 +7180 +6E3E +A422 +A422 +2422 +25A2 +262A +2424 +2020 +ENDCHAR +STARTCHAR uni3B80 +ENCODING 15232 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1008 +1010 +FA22 +12AA +3272 +3A22 +5672 +52AA +9326 +12A2 +1242 +1202 +13FE +1002 +ENDCHAR +STARTCHAR uni3B81 +ENCODING 15233 +BBX 15 16 0 -2 +BITMAP +1184 +1068 +1030 +10C8 +FB24 +1020 +33FE +3840 +54FC +5184 +92FC +1084 +10FC +1084 +1094 +1088 +ENDCHAR +STARTCHAR uni3B82 +ENCODING 15234 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +FFFE +0820 +3118 +C106 +1FF0 +0540 +0920 +1110 +ENDCHAR +STARTCHAR uni3B83 +ENCODING 15235 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +1020 +1020 +FBFE +10A8 +3124 +3A42 +5440 +53FE +9088 +1108 +10D0 +1030 +1048 +1184 +ENDCHAR +STARTCHAR uni3B84 +ENCODING 15236 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1080 +FC80 +11FE +3142 +3A22 +55FA +5082 +90F2 +1092 +1112 +1152 +122A +1004 +ENDCHAR +STARTCHAR uni3B85 +ENCODING 15237 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0540 +0920 +3118 +C906 +0880 +1FFC +3080 +5FF8 +9080 +1FF8 +1080 +1FFC +1000 +ENDCHAR +STARTCHAR uni3B86 +ENCODING 15238 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1088 +FD04 +128A +3050 +39FC +5420 +54F8 +9020 +13FE +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni3B87 +ENCODING 15239 +BBX 15 15 1 -1 +BITMAP +2038 +23C0 +2040 +F840 +27FE +2090 +6108 +7204 +6C42 +A040 +A254 +2252 +244A +2448 +20C0 +ENDCHAR +STARTCHAR uni3B88 +ENCODING 15240 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F8A0 +2110 +2208 +65F4 +7000 +6800 +AFFC +A040 +2250 +2448 +3846 +21C0 +ENDCHAR +STARTCHAR uni3B89 +ENCODING 15241 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +2110 +227C +FA10 +2692 +3654 +6A10 +62FE +A210 +A228 +2228 +2228 +2244 +2244 +2282 +ENDCHAR +STARTCHAR uni3B8A +ENCODING 15242 +BBX 15 16 0 -2 +BITMAP +2008 +27C8 +2048 +2288 +F93E +2088 +27D8 +715C +692C +A12A +A148 +2108 +2108 +2108 +2508 +2208 +ENDCHAR +STARTCHAR uni3B8B +ENCODING 15243 +BBX 15 16 0 -2 +BITMAP +2100 +211E +27F2 +2112 +FA14 +23D4 +2258 +7654 +6BD2 +A252 +A252 +23DA +2254 +2250 +2250 +22D0 +ENDCHAR +STARTCHAR uni3B8C +ENCODING 15244 +BBX 15 16 0 -2 +BITMAP +1000 +17FE +1040 +1080 +FBFC +1294 +3294 +3AF4 +5694 +5294 +92F4 +1294 +1294 +1294 +13FC +1204 +ENDCHAR +STARTCHAR uni3B8D +ENCODING 15245 +BBX 15 15 1 -1 +BITMAP +0420 +FFFE +0000 +3E48 +3248 +2E48 +3248 +2E08 +2218 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni3B8E +ENCODING 15246 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1010 +1020 +FC68 +10A4 +3322 +3820 +5400 +51FC +9154 +1154 +1154 +1154 +17FE +1000 +ENDCHAR +STARTCHAR uni3B8F +ENCODING 15247 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +20E0 +F950 +2248 +2C46 +73F8 +6800 +A000 +A7FC +2040 +2248 +2444 +2942 +2080 +ENDCHAR +STARTCHAR uni3B90 +ENCODING 15248 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +10A4 +10A2 +FD2A +1010 +3860 +3580 +56FC +5084 +90FC +1084 +10FC +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni3B91 +ENCODING 15249 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FC20 +13FE +3020 +38A0 +552C +5524 +9124 +11AC +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni3B92 +ENCODING 15250 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +1050 +FDFC +1154 +3154 +3954 +55FC +5420 +9020 +11FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni3B93 +ENCODING 15251 +BBX 15 16 0 -2 +BITMAP +1100 +117E +1110 +1110 +FD90 +115E +3B22 +352A +5126 +5142 +9152 +110C +1104 +1104 +117E +1100 +ENDCHAR +STARTCHAR uni3B94 +ENCODING 15252 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FBFE +1020 +31FC +3924 +55FC +5124 +91FC +1020 +11FC +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni3B95 +ENCODING 15253 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1040 +FDFC +1154 +3154 +3954 +5554 +552C +9020 +13FE +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni3B96 +ENCODING 15254 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FCF8 +1020 +31FC +3924 +5524 +55FC +9020 +13FE +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni3B97 +ENCODING 15255 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +1450 +0888 +7F44 +2A22 +49F8 +8808 +2810 +1020 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni3B98 +ENCODING 15256 +BBX 15 16 0 -2 +BITMAP +2008 +2788 +2088 +2290 +F91E +2114 +27E4 +7154 +6B14 +A314 +A514 +2508 +2908 +2114 +2524 +2242 +ENDCHAR +STARTCHAR uni3B99 +ENCODING 15257 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +1252 +FBDE +1000 +31FC +3800 +57FE +5080 +9100 +11FC +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni3B9A +ENCODING 15258 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FF8 +2108 +22C8 +2D28 +2288 +2448 +3FF8 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni3B9B +ENCODING 15259 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FDFC +1104 +3104 +39FC +5400 +53FE +9020 +1120 +113C +1120 +12A0 +147E +ENDCHAR +STARTCHAR uni3B9C +ENCODING 15260 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1200 +1224 +FAA4 +12A4 +32E4 +3A3E +57E4 +52A4 +92A4 +12A4 +132E +1200 +13FE +1000 +ENDCHAR +STARTCHAR uni3B9D +ENCODING 15261 +BBX 15 16 0 -2 +BITMAP +2000 +229E +2252 +2252 +F552 +2112 +2292 +7252 +6C32 +A3D2 +A25A +2254 +2250 +2250 +23D0 +2250 +ENDCHAR +STARTCHAR uni3B9E +ENCODING 15262 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +10BE +1042 +FC84 +1310 +3110 +3928 +5544 +5482 +90FC +1084 +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni3B9F +ENCODING 15263 +BBX 15 16 0 -2 +BITMAP +2008 +2008 +27E8 +2108 +F93E +2208 +23D8 +765C +6A6C +A26A +A248 +2248 +23C8 +2248 +2008 +2008 +ENDCHAR +STARTCHAR uni3BA0 +ENCODING 15264 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC00 +13FE +3A02 +3424 +5020 +53FE +9070 +10A8 +10A8 +1124 +1222 +1020 +ENDCHAR +STARTCHAR uni3BA1 +ENCODING 15265 +BBX 15 16 0 -2 +BITMAP +0800 +08FC +2A80 +2CF8 +4888 +08F8 +1480 +22FC +4000 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni3BA2 +ENCODING 15266 +BBX 15 16 0 -2 +BITMAP +1080 +10BC +1084 +1108 +FDFE +1320 +3520 +397C +5590 +5110 +91FE +1110 +1128 +1128 +1144 +1182 +ENDCHAR +STARTCHAR uni3BA3 +ENCODING 15267 +BBX 15 15 0 -2 +BITMAP +7DFC +4420 +7D20 +45FE +7C50 +4852 +5492 +650E +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni3BA4 +ENCODING 15268 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4824 +3118 +06C0 +1830 +EFEE +0820 +0FE0 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni3BA5 +ENCODING 15269 +BBX 15 16 0 -2 +BITMAP +1040 +1048 +1084 +11FE +FC20 +13FE +3888 +3504 +53FE +5524 +9124 +11FC +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni3BA6 +ENCODING 15270 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FBFE +1242 +348C +39F0 +5420 +5044 +93FE +1022 +1128 +1224 +14A4 +1040 +ENDCHAR +STARTCHAR uni3BA7 +ENCODING 15271 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +1104 +FD04 +11FC +3100 +39FE +5500 +55FE +9002 +12AA +12AA +1402 +1014 +1008 +ENDCHAR +STARTCHAR uni3BA8 +ENCODING 15272 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +11FC +FD24 +11FC +3888 +3544 +5242 +50F8 +9188 +1250 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni3BA9 +ENCODING 15273 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1104 +FDFC +1104 +31FC +3904 +55FC +5440 +9020 +10A4 +128A +128A +1478 +1000 +ENDCHAR +STARTCHAR uni3BAA +ENCODING 15274 +BBX 15 16 0 -2 +BITMAP +1000 +13B8 +1128 +1128 +FD3A +11AA +3726 +3A40 +5420 +5020 +93FE +1070 +10A8 +1124 +1222 +1020 +ENDCHAR +STARTCHAR uni3BAB +ENCODING 15275 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC24 +11FC +3820 +35FC +5020 +53FE +9020 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni3BAC +ENCODING 15276 +BBX 15 16 0 -2 +BITMAP +1090 +1088 +1104 +1242 +FC88 +11FC +3804 +3400 +53DE +5042 +9252 +114A +1252 +1042 +114A +1084 +ENDCHAR +STARTCHAR uni3BAD +ENCODING 15277 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1008 +10D0 +FC20 +13FE +328A +3A52 +56FA +5222 +9222 +13FE +1222 +1222 +13FE +1202 +ENDCHAR +STARTCHAR uni3BAE +ENCODING 15278 +BBX 15 16 0 -2 +BITMAP +1080 +13DE +108A +11CA +FC8A +13D2 +30A6 +3808 +54F0 +5420 +91FC +1020 +13FE +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni3BAF +ENCODING 15279 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2402 +25FA +FC42 +24C2 +252A +746A +6CB2 +A52A +A46A +24AA +2522 +2442 +27FE +2402 +ENDCHAR +STARTCHAR uni3BB0 +ENCODING 15280 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1104 +FD54 +1124 +3154 +3904 +55FC +5400 +9112 +11D4 +1118 +1152 +1192 +110E +ENDCHAR +STARTCHAR uni3BB1 +ENCODING 15281 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC20 +10A0 +38FC +3520 +5020 +53FE +9050 +1050 +1090 +1092 +1112 +120E +ENDCHAR +STARTCHAR uni3BB2 +ENCODING 15282 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +11FC +1244 +FD54 +11F4 +3884 +3528 +5290 +51FC +9244 +1554 +11F4 +1084 +1128 +1210 +ENDCHAR +STARTCHAR uni3BB3 +ENCODING 15283 +BBX 15 16 0 -2 +BITMAP +2044 +2724 +2528 +2500 +FD7C +2710 +2510 +7510 +6DFE +A710 +A510 +2528 +2528 +2544 +2B44 +2082 +ENDCHAR +STARTCHAR uni3BB4 +ENCODING 15284 +BBX 15 16 0 -2 +BITMAP +10A0 +112C +1124 +1124 +FDAC +1124 +3124 +39FC +5420 +55FC +9088 +1050 +1020 +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni3BB5 +ENCODING 15285 +BBX 15 16 0 -2 +BITMAP +2220 +2120 +213E +27A0 +FA40 +223C +23A4 +72B4 +6AAC +A2A4 +A2FE +22A4 +24A4 +24A4 +29A4 +304C +ENDCHAR +STARTCHAR uni3BB6 +ENCODING 15286 +BBX 15 15 1 -1 +BITMAP +2440 +225E +2292 +FFF2 +2112 +211E +7552 +6D52 +6552 +A55E +A7D2 +2112 +2112 +2212 +2426 +ENDCHAR +STARTCHAR uni3BB7 +ENCODING 15287 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +13FC +10A0 +FD22 +121E +3110 +39E0 +5504 +54FC +9000 +11FC +1104 +11FC +1104 +11FC +ENDCHAR +STARTCHAR uni3BB8 +ENCODING 15288 +BBX 15 16 0 -2 +BITMAP +1044 +1024 +1228 +1100 +FD7C +1010 +3010 +3B7E +5510 +5110 +9128 +1124 +1144 +1280 +147E +1000 +ENDCHAR +STARTCHAR uni3BB9 +ENCODING 15289 +BBX 15 16 0 -2 +BITMAP +2008 +2008 +27C8 +2210 +FA1E +24A4 +27D4 +7114 +6914 +A7D4 +A114 +2108 +21C8 +2E14 +2414 +2022 +ENDCHAR +STARTCHAR uni3BBA +ENCODING 15290 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0380 +0540 +0920 +37D8 +C106 +0000 +7BBC +4AA4 +4AA4 +4AA4 +4AA4 +7BBC +4AA4 +ENDCHAR +STARTCHAR uni3BBB +ENCODING 15291 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +10A4 +1088 +FC50 +1020 +30D8 +3B26 +5420 +51FC +9124 +1124 +11FC +1022 +13FE +1002 +ENDCHAR +STARTCHAR uni3BBC +ENCODING 15292 +BBX 14 16 0 -2 +BITMAP +1040 +1020 +13FC +1204 +FA04 +13FC +3200 +3BDC +5644 +5354 +92CC +1244 +12CC +1554 +1444 +18CC +ENDCHAR +STARTCHAR uni3BBD +ENCODING 15293 +BBX 15 16 0 -2 +BITMAP +2100 +223C +27A4 +24A4 +F6A4 +25A4 +24C2 +7F80 +6CBC +A4A4 +A6A4 +25A4 +2494 +2488 +2494 +29A2 +ENDCHAR +STARTCHAR uni3BBE +ENCODING 15294 +BBX 15 16 0 -2 +BITMAP +1000 +7E7C +4244 +7E7C +4244 +7E7C +4844 +4444 +5A94 +6108 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni3BBF +ENCODING 15295 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +11FC +FD24 +11FC +30A8 +38A8 +57FE +54A8 +90A8 +11FC +1020 +13FE +1020 +1020 +ENDCHAR +STARTCHAR uni3BC0 +ENCODING 15296 +BBX 15 16 0 -2 +BITMAP +2210 +2110 +2110 +27BE +FA40 +2200 +23BE +728A +6A88 +A2A8 +A2AE +22A8 +24A8 +25A8 +285E +3080 +ENDCHAR +STARTCHAR uni3BC1 +ENCODING 15297 +BBX 15 16 0 -2 +BITMAP +2020 +2710 +257C +2500 +FD44 +2628 +2500 +75FE +6D00 +A500 +A57C +2644 +2444 +2444 +247C +2444 +ENDCHAR +STARTCHAR uni3BC2 +ENCODING 15298 +BBX 15 16 0 -2 +BITMAP +22A8 +22A8 +27FC +22A8 +FAAA +24E6 +2800 +77FC +6C44 +A040 +A3F8 +2248 +2248 +2248 +2258 +2040 +ENDCHAR +STARTCHAR uni3BC3 +ENCODING 15299 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +F150 +2248 +2C46 +60A0 +7318 +6C46 +A248 +A150 +20E0 +2358 +2C46 +20C0 +ENDCHAR +STARTCHAR uni3BC4 +ENCODING 15300 +BBX 15 16 0 -2 +BITMAP +0820 +7EFC +0870 +1CA8 +2B26 +C820 +087C +3F80 +2000 +3FFC +2000 +2FF8 +2888 +4FF8 +4802 +87FE +ENDCHAR +STARTCHAR uni3BC5 +ENCODING 15301 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2420 +FC40 +25FC +2524 +75FC +6D44 +A5FC +A450 +2490 +2BFE +2810 +3010 +2010 +ENDCHAR +STARTCHAR uni3BC6 +ENCODING 15302 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FC +1000 +FD08 +1090 +33FE +3A20 +56A0 +52FC +9320 +1220 +12FC +1420 +1420 +19FE +ENDCHAR +STARTCHAR uni3BC7 +ENCODING 15303 +BBX 15 16 0 -2 +BITMAP +1050 +1050 +13DE +1050 +FDDC +1050 +33DE +3850 +5450 +5420 +9020 +11FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni3BC8 +ENCODING 15304 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +24FE +2210 +FA10 +20FE +2092 +7692 +6AFE +A210 +A238 +2254 +2292 +2210 +2510 +28FE +ENDCHAR +STARTCHAR uni3BC9 +ENCODING 15305 +BBX 15 16 0 -2 +BITMAP +1020 +103E +1020 +11FE +FD20 +113C +31E2 +391E +5504 +5578 +9192 +1154 +12FE +1210 +1450 +1020 +ENDCHAR +STARTCHAR uni3BCA +ENCODING 15306 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2040 +2278 +F240 +2FFE +2100 +71FC +6A00 +A3FC +A004 +2554 +2554 +2804 +2028 +2010 +ENDCHAR +STARTCHAR uni3BCB +ENCODING 15307 +BBX 15 16 0 -2 +BITMAP +4000 +4CFE +7010 +4220 +42FC +3E84 +1084 +10FC +FE84 +30FC +3884 +5484 +52FC +9048 +1084 +1102 +ENDCHAR +STARTCHAR uni3BCC +ENCODING 15308 +BBX 15 16 0 -2 +BITMAP +2000 +227E +2110 +2130 +F84A +209A +262C +724C +6A9A +A22A +A24A +2288 +2228 +2510 +28FE +2000 +ENDCHAR +STARTCHAR uni3BCD +ENCODING 15309 +BBX 15 15 1 -1 +BITMAP +2120 +253E +2562 +FDD2 +252C +2718 +61E4 +7104 +6F7E +A504 +A524 +2514 +2514 +2904 +290C +ENDCHAR +STARTCHAR uni3BCE +ENCODING 15310 +BBX 15 16 0 -2 +BITMAP +2208 +2108 +2108 +27C8 +F83E +2788 +2018 +779C +682C +A7AA +A4C8 +2488 +2488 +2788 +2488 +2008 +ENDCHAR +STARTCHAR uni3BCF +ENCODING 15311 +BBX 15 16 0 -2 +BITMAP +0800 +7F78 +0848 +3E48 +0086 +3E78 +2A48 +3E30 +4048 +8084 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni3BD0 +ENCODING 15312 +BBX 15 16 0 -2 +BITMAP +0040 +7BFC +4880 +49F8 +5220 +4DFC +4888 +68F8 +5088 +40F8 +4088 +0100 +7FFC +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni3BD1 +ENCODING 15313 +BBX 15 16 0 -2 +BITMAP +2000 +2F3E +2120 +213C +F120 +2F3C +2820 +78FE +6850 +AF52 +A154 +2148 +2148 +2144 +2A62 +2440 +ENDCHAR +STARTCHAR uni3BD2 +ENCODING 15314 +BBX 15 16 0 -2 +BITMAP +200E +27F0 +2044 +2224 +F908 +23FC +2204 +73FC +6A04 +A3FC +A204 +23FC +2090 +2110 +2212 +2C0E +ENDCHAR +STARTCHAR uni3BD3 +ENCODING 15315 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2118 +26E6 +F800 +23F8 +2208 +73F8 +6800 +A7BC +A084 +24A4 +2294 +24A4 +2294 +2108 +ENDCHAR +STARTCHAR uni3BD4 +ENCODING 15316 +BBX 15 16 0 -2 +BITMAP +01F0 +3E00 +03F0 +3E00 +03FA +7E02 +01FE +0C20 +703C +1DE2 +F022 +1C1E +0100 +FFFE +0920 +711C +ENDCHAR +STARTCHAR uni3BD5 +ENCODING 15317 +BBX 15 16 0 -2 +BITMAP +2240 +2242 +225C +27F0 +FA50 +23D0 +225E +73D4 +6A54 +A254 +A7F4 +2014 +2294 +2464 +2824 +2044 +ENDCHAR +STARTCHAR uni3BD6 +ENCODING 15318 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1154 +3154 +39FC +5400 +53FE +9040 +1024 +12A2 +128A +1488 +1078 +ENDCHAR +STARTCHAR uni3BD7 +ENCODING 15319 +BBX 14 16 0 -2 +BITMAP +2000 +27BC +24A4 +27BC +FCA4 +27BC +2444 +7444 +6DF4 +A444 +A4E4 +2554 +264C +2444 +2454 +2408 +ENDCHAR +STARTCHAR uni3BD8 +ENCODING 15320 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +27C8 +2108 +F91E +2392 +2024 +7380 +6808 +A7C8 +A108 +2108 +2594 +2954 +2524 +2242 +ENDCHAR +STARTCHAR uni3BD9 +ENCODING 15321 +BBX 15 16 0 -2 +BITMAP +2208 +2108 +27C8 +2210 +F49E +2FD4 +2064 +7794 +6C94 +A794 +A494 +2788 +2488 +2494 +24A4 +25C2 +ENDCHAR +STARTCHAR uni3BDA +ENCODING 15322 +BBX 15 16 0 -2 +BITMAP +1210 +1210 +13DE +1228 +FD44 +10A0 +3110 +3A08 +55F6 +5000 +9000 +13F8 +1208 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni3BDB +ENCODING 15323 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1000 +33FE +3A52 +5450 +51DC +9104 +11DC +1050 +1050 +13FE +1000 +ENDCHAR +STARTCHAR uni3BDC +ENCODING 15324 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC20 +13FE +3088 +3888 +5554 +5222 +9020 +17FE +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni3BDD +ENCODING 15325 +BBX 15 16 0 -2 +BITMAP +2010 +2790 +24BC +24A4 +F4C4 +27A8 +2110 +7128 +6946 +A5C0 +A53C +2524 +2524 +25A4 +2E3C +2024 +ENDCHAR +STARTCHAR uni3BDE +ENCODING 15326 +BBX 15 16 0 -2 +BITMAP +2080 +209E +2112 +2152 +FA5E +2780 +209E +7112 +6A52 +A7DE +A052 +201E +2552 +2552 +2412 +2016 +ENDCHAR +STARTCHAR uni3BDF +ENCODING 15327 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +FEFE +3838 +5454 +9282 +3FF0 +0010 +1FF0 +0010 +FFFE +1110 +09A0 +0540 +1930 +E30E +ENDCHAR +STARTCHAR uni3BE0 +ENCODING 15328 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1048 +10F0 +FC20 +13FE +3242 +3890 +55F8 +5028 +9120 +11FC +1220 +17FE +1020 +1020 +ENDCHAR +STARTCHAR uni3BE1 +ENCODING 15329 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +FEFC +3884 +5504 +92F4 +2894 +4494 +92F4 +1084 +5494 +3888 +5482 +9282 +507E +2000 +ENDCHAR +STARTCHAR uni3BE2 +ENCODING 15330 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +13DE +FE10 +1252 +31CE +3800 +5488 +53FE +9088 +1088 +13FE +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni3BE3 +ENCODING 15331 +BBX 15 16 0 -2 +BITMAP +2108 +2FFE +2108 +2090 +F108 +23FC +2C8A +7128 +6A50 +A040 +A7FC +20E0 +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni3BE4 +ENCODING 15332 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +1010 +FEFE +1010 +5454 +5454 +5454 +BABA +1010 +3838 +5454 +9292 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni3BE5 +ENCODING 15333 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +FEFE +1010 +7C7C +5454 +7C7C +5454 +7C7C +1010 +3838 +5454 +9292 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni3BE6 +ENCODING 15334 +BBX 15 16 0 -2 +BITMAP +2110 +27FC +2110 +21F0 +F910 +21F0 +2110 +77FC +6910 +A248 +A446 +23F8 +20E0 +2158 +2644 +2040 +ENDCHAR +STARTCHAR uni3BE7 +ENCODING 15335 +BBX 15 16 0 -2 +BITMAP +2100 +213C +2114 +27D4 +F914 +2124 +2FCC +7100 +693C +A524 +A5E4 +253C +2724 +2500 +24FE +2800 +ENDCHAR +STARTCHAR uni3BE8 +ENCODING 15336 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +1050 +FBFE +1252 +3252 +3BFE +5524 +50A8 +93FE +1070 +10A8 +1124 +1622 +1020 +ENDCHAR +STARTCHAR uni3BE9 +ENCODING 15337 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +22FE +1C10 +227C +7714 +557C +2250 +557E +0812 +7F12 +1C16 +2A28 +4928 +8844 +0882 +ENDCHAR +STARTCHAR uni3BEA +ENCODING 15338 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +13FE +FA22 +11AC +3020 +39AC +5450 +50C8 +9326 +10F8 +1008 +10D0 +1020 +1010 +ENDCHAR +STARTCHAR uni3BEB +ENCODING 15339 +BBX 15 16 0 -2 +BITMAP +1040 +107C +1040 +13FE +FA42 +1278 +33C4 +3A3C +5600 +53FE +9240 +13A4 +1258 +15B4 +1452 +19B0 +ENDCHAR +STARTCHAR uni3BEC +ENCODING 15340 +BBX 15 16 0 -2 +BITMAP +1010 +FEFE +5454 +9292 +0040 +7BF8 +0848 +17FE +2048 +7BF8 +0840 +0BF8 +5040 +27FC +5840 +87FE +ENDCHAR +STARTCHAR uni3BED +ENCODING 15341 +BBX 15 16 0 -2 +BITMAP +1040 +107C +1040 +13FE +FA42 +13F8 +3244 +3AFC +56A8 +52F8 +92A8 +12F8 +1220 +15FC +1444 +198C +ENDCHAR +STARTCHAR uni3BEE +ENCODING 15342 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1154 +1154 +FDFC +1080 +31FE +3A42 +55F2 +5152 +9152 +11F2 +104A +13FA +100A +1004 +ENDCHAR +STARTCHAR uni3BEF +ENCODING 15343 +BBX 15 16 0 -2 +BITMAP +1080 +11FC +1288 +1070 +FBAE +10F8 +3120 +39FC +5420 +51FC +9104 +11FC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni3BF0 +ENCODING 15344 +BBX 15 15 1 -1 +BITMAP +23FC +22A4 +23FC +F840 +27FE +2040 +71FC +6904 +6DFC +A504 +A5FC +2504 +25FC +2400 +27FE +ENDCHAR +STARTCHAR uni3BF1 +ENCODING 15345 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +1110 +1FF0 +0100 +FFFE +9002 +1FF8 +2100 +7FFC +1110 +1FF0 +0100 +FFFE +0920 +711C +ENDCHAR +STARTCHAR uni3BF2 +ENCODING 15346 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27BC +2110 +FBB8 +2554 +2912 +7000 +6BF8 +A000 +A7FC +2040 +2248 +2444 +2942 +2080 +ENDCHAR +STARTCHAR uni3BF3 +ENCODING 15347 +BBX 15 16 0 -2 +BITMAP +2288 +2288 +27E8 +FA90 +241E +27E4 +7454 +6854 +AF54 +A554 +2554 +2748 +2548 +2054 +2294 +2122 +ENDCHAR +STARTCHAR uni3BF4 +ENCODING 15348 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC20 +13FE +3202 +3888 +5524 +5450 +9088 +11FC +128A +1088 +10F8 +1088 +ENDCHAR +STARTCHAR uni3BF5 +ENCODING 15349 +BBX 15 16 0 -2 +BITMAP +2110 +27FE +2110 +23F8 +F840 +27FC +2040 +73F8 +6A48 +A3F8 +A248 +23F8 +2040 +27FC +2040 +2FFE +ENDCHAR +STARTCHAR uni3BF6 +ENCODING 15350 +BBX 15 16 0 -2 +BITMAP +1020 +1088 +1252 +1326 +FE52 +128A +3222 +3BFE +5488 +5144 +927A +1088 +1150 +1020 +10D8 +1706 +ENDCHAR +STARTCHAR uni3BF7 +ENCODING 15351 +BBX 15 16 0 -2 +BITMAP +2128 +21AA +216C +2228 +FAFE +2644 +3628 +6AFE +6210 +A27C +A210 +22FE +2210 +2228 +2244 +2282 +ENDCHAR +STARTCHAR uni3BF8 +ENCODING 15352 +BBX 15 16 0 -2 +BITMAP +2040 +23F8 +2048 +27FE +F848 +23F8 +2040 +77FE +6800 +A2A4 +A452 +23F8 +22A8 +22A8 +2FFE +2000 +ENDCHAR +STARTCHAR uni3BF9 +ENCODING 15353 +BBX 15 16 0 -2 +BITMAP +2004 +2FE4 +2284 +2FE4 +FABE +2AA4 +2FE4 +7004 +6FD4 +A00C +AFEC +2104 +2544 +2524 +2924 +230C +ENDCHAR +STARTCHAR uni3BFA +ENCODING 15354 +BBX 15 16 0 -2 +BITMAP +0040 +7E40 +487E +7EA0 +4310 +7EFE +48AA +48AA +7EFE +0000 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni3BFB +ENCODING 15355 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +1110 +1FF0 +0100 +FFFE +8212 +0D20 +32C0 +0DA0 +3290 +0D88 +3100 +FFFE +0920 +711C +ENDCHAR +STARTCHAR uni3BFC +ENCODING 15356 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +1020 +FDFC +1020 +33FE +3840 +5488 +55FC +9000 +11FC +1154 +1154 +17FE +1000 +ENDCHAR +STARTCHAR uni3BFD +ENCODING 15357 +BBX 15 16 0 -2 +BITMAP +1020 +17FE +1402 +13FC +FE24 +13FC +3200 +3AFC +5684 +52FC +9284 +12FC +1284 +14FC +1448 +1884 +ENDCHAR +STARTCHAR uni3BFE +ENCODING 15358 +BBX 15 16 0 -2 +BITMAP +2028 +24FE +2228 +22FE +F8AA +20FE +2EAA +72FE +6A00 +A27C +A244 +227C +2244 +227C +2500 +28FE +ENDCHAR +STARTCHAR uni3BFF +ENCODING 15359 +BBX 15 16 0 -2 +BITMAP +1124 +1248 +1124 +1000 +FBFC +1294 +3264 +3A94 +57FC +5248 +9368 +1248 +136A +124A +1246 +1362 +ENDCHAR +STARTCHAR uni3C00 +ENCODING 15360 +BBX 15 16 0 -2 +BITMAP +1050 +1190 +109E +13EA +FC8A +11D2 +328A +38A4 +5450 +5088 +9326 +10A8 +1070 +10A8 +1124 +1060 +ENDCHAR +STARTCHAR uni3C01 +ENCODING 15361 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2100 +FBF8 +2508 +2108 +71F8 +6800 +AFBE +A208 +279E +2492 +2CB2 +2492 +279E +2492 +ENDCHAR +STARTCHAR uni3C02 +ENCODING 15362 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +2202 +241C +FBE0 +2124 +20A8 +73FE +6924 +A202 +A5FC +2124 +21FC +2124 +21FC +2104 +ENDCHAR +STARTCHAR uni3C03 +ENCODING 15363 +BBX 15 16 0 -2 +BITMAP +2206 +2438 +2F88 +2892 +FFA4 +28BC +2F88 +7214 +6FBE +AA8A +AA88 +2AAC +2AAA +2BCA +2228 +2210 +ENDCHAR +STARTCHAR uni3C04 +ENCODING 15364 +BBX 15 16 0 -2 +BITMAP +2014 +2792 +249E +24F0 +F794 +248A +2496 +77E2 +6C94 +A492 +A79E +2070 +2514 +248A +2896 +2062 +ENDCHAR +STARTCHAR uni3C05 +ENCODING 15365 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +24FE +2244 +FA28 +20FE +2092 +76FE +6A92 +A2BA +A2AA +22BA +2286 +2500 +28FE +2000 +ENDCHAR +STARTCHAR uni3C06 +ENCODING 15366 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +1110 +1FF0 +0100 +FFFE +8282 +3EF8 +0280 +7EFC +0280 +0100 +7FFC +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni3C07 +ENCODING 15367 +BBX 15 16 0 -2 +BITMAP +2114 +2112 +27D2 +2110 +F110 +2FFE +2290 +76D2 +6A92 +A6D2 +A294 +26D4 +228A +22CA +2F16 +2022 +ENDCHAR +STARTCHAR uni3C08 +ENCODING 15368 +BBX 15 16 0 -2 +BITMAP +1010 +FEFE +5454 +9292 +0040 +27FC +1040 +13F8 +0248 +73F8 +1248 +13F8 +1040 +17FC +2840 +47FE +ENDCHAR +STARTCHAR uni3C09 +ENCODING 15369 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +2F7E +2410 +F43C +2910 +2F7E +7224 +6A4A +AF30 +A210 +227E +2338 +2E54 +2492 +2010 +ENDCHAR +STARTCHAR uni3C0A +ENCODING 15370 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +27AA +212C +F108 +2FD4 +2012 +74A2 +6948 +A108 +A7AA +212C +2108 +2194 +2E24 +2442 +ENDCHAR +STARTCHAR uni3C0B +ENCODING 15371 +BBX 15 16 0 -2 +BITMAP +2100 +213E +2508 +25D0 +F53E +2522 +2FE2 +703E +6922 +A57E +A562 +25A2 +28BE +2100 +2214 +2C22 +ENDCHAR +STARTCHAR uni3C0C +ENCODING 15372 +BBX 15 16 0 -2 +BITMAP +11FC +1020 +13FE +1222 +FDAC +1020 +31AC +3890 +55FE +5320 +95FC +1120 +11FC +1120 +11FE +1100 +ENDCHAR +STARTCHAR uni3C0D +ENCODING 15373 +BBX 15 16 0 -2 +BITMAP +0840 +7F7C +1440 +FF7C +2204 +3E7C +2240 +3E7C +2242 +263E +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni3C0E +ENCODING 15374 +BBX 15 16 0 -2 +BITMAP +1020 +1222 +13FE +1090 +FDFE +1310 +35FE +3910 +55FE +5510 +91FE +1100 +13DE +1252 +1272 +1206 +ENDCHAR +STARTCHAR uni3C0F +ENCODING 15375 +BBX 15 15 1 -1 +BITMAP +2210 +23DE +24A8 +F844 +27FC +2000 +71F0 +6910 +69F0 +A000 +A7FC +2404 +25F4 +2514 +25FC +ENDCHAR +STARTCHAR uni3C10 +ENCODING 15376 +BBX 15 16 0 -2 +BITMAP +2008 +273E +2590 +255E +FD64 +265E +2500 +75DE +6D52 +A55E +A552 +265E +2452 +2456 +24A0 +251E +ENDCHAR +STARTCHAR uni3C11 +ENCODING 15377 +BBX 15 16 0 -2 +BITMAP +2020 +2294 +228A +247A +F800 +228A +3144 +6A28 +6AAA +A186 +A040 +2FFE +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni3C12 +ENCODING 15378 +BBX 15 16 0 -2 +BITMAP +22A0 +244C +24A4 +260C +FCA4 +264C +34A4 +6FFE +6802 +A3F0 +A020 +2040 +27FC +2040 +2140 +2080 +ENDCHAR +STARTCHAR uni3C13 +ENCODING 15379 +BBX 15 16 0 -2 +BITMAP +27D0 +2510 +27DE +2450 +F7E8 +2504 +27C4 +73F8 +6A08 +A3F8 +A208 +23F8 +2208 +23F8 +2110 +2208 +ENDCHAR +STARTCHAR uni3C14 +ENCODING 15380 +BBX 15 16 0 -2 +BITMAP +2248 +22E8 +2308 +26EA +FA1C +22E8 +3208 +6AE8 +65B4 +A8E2 +A000 +23F8 +2110 +20E0 +2318 +2C06 +ENDCHAR +STARTCHAR uni3C15 +ENCODING 15381 +BBX 15 16 0 -2 +BITMAP +2110 +27FC +2040 +23F8 +F840 +27FC +2000 +73D4 +6912 +A7FE +A350 +2534 +238C +208A +2296 +2102 +ENDCHAR +STARTCHAR uni3C16 +ENCODING 15382 +BBX 15 16 0 -2 +BITMAP +13D0 +1290 +13DE +1268 +FBC4 +1284 +33F8 +3908 +55F8 +5108 +91F8 +1108 +11F8 +1090 +1112 +160E +ENDCHAR +STARTCHAR uni3C17 +ENCODING 15383 +BBX 15 16 0 -2 +BITMAP +2014 +27FE +2490 +24D4 +FC94 +27FA +35AA +6A96 +61A2 +A3F8 +A208 +23F8 +2040 +227C +2540 +28FE +ENDCHAR +STARTCHAR uni3C18 +ENCODING 15384 +BBX 15 16 0 -2 +BITMAP +2080 +20F8 +2108 +21F0 +F810 +27FE +2554 +73BC +6FCA +A13E +A388 +256A +2088 +27FE +2088 +2108 +ENDCHAR +STARTCHAR uni3C19 +ENCODING 15385 +BBX 15 16 0 -2 +BITMAP +2518 +2514 +2F90 +253E +F728 +2268 +2FBE +7AA8 +6FA8 +A23E +AFA8 +2228 +3FE8 +253E +28A0 +3060 +ENDCHAR +STARTCHAR uni3C1A +ENCODING 15386 +BBX 15 16 0 -2 +BITMAP +220C +210A +27C8 +229E +F554 +26F4 +245E +77D4 +6914 +A7DE +A554 +2554 +25D4 +245E +2550 +2490 +ENDCHAR +STARTCHAR uni3C1B +ENCODING 15387 +BBX 15 16 0 -2 +BITMAP +2110 +2FFE +2554 +24E4 +F8A8 +2AAA +2EEE +74A4 +6AAA +AEEE +A242 +2FFE +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni3C1C +ENCODING 15388 +BBX 15 16 0 -2 +BITMAP +2200 +221E +2FC4 +2208 +F79E +2492 +2792 +749E +6F92 +A49E +A792 +2492 +2FDE +2500 +248C +2892 +ENDCHAR +STARTCHAR uni3C1D +ENCODING 15389 +BBX 13 16 2 -2 +BITMAP +0100 +F900 +8900 +89F0 +8A10 +8A20 +8C80 +F880 +8080 +8140 +8140 +8940 +B220 +C220 +8410 +0808 +ENDCHAR +STARTCHAR uni3C1E +ENCODING 15390 +BBX 14 16 1 -2 +BITMAP +1040 +1040 +1040 +10FC +9284 +9308 +9220 +9220 +9220 +9220 +9250 +9E50 +F290 +0088 +0108 +0204 +ENDCHAR +STARTCHAR uni3C1F +ENCODING 15391 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7F20 +807E +0042 +7E84 +0010 +0010 +FC10 +0410 +0428 +0528 +0528 +0344 +0144 +0082 +ENDCHAR +STARTCHAR uni3C20 +ENCODING 15392 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +0820 +FF7E +0042 +0084 +3C10 +2410 +2410 +2410 +2428 +2528 +4648 +4444 +8084 +0102 +ENDCHAR +STARTCHAR uni3C21 +ENCODING 15393 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1420 +127E +2142 +4084 +9210 +1210 +1210 +1210 +1228 +1228 +2228 +2244 +4244 +8282 +ENDCHAR +STARTCHAR uni3C22 +ENCODING 15394 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +2420 +247E +2442 +2484 +2410 +FF10 +2410 +2410 +2428 +2428 +2448 +2444 +4484 +8502 +ENDCHAR +STARTCHAR uni3C23 +ENCODING 15395 +BBX 15 16 0 -2 +BITMAP +1420 +1420 +1420 +547E +5542 +5E84 +5410 +5410 +5410 +5410 +5428 +5428 +5D48 +7644 +C484 +0102 +ENDCHAR +STARTCHAR uni3C24 +ENCODING 15396 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FFA0 +027E +0242 +7A84 +4A10 +4A10 +4A10 +4A10 +7A28 +4A28 +0248 +0244 +0A84 +0502 +ENDCHAR +STARTCHAR uni3C25 +ENCODING 15397 +BBX 15 16 0 -2 +BITMAP +1220 +5220 +5220 +527E +5242 +FF84 +5210 +5210 +5210 +5E10 +4028 +4028 +4048 +7FC4 +0084 +0102 +ENDCHAR +STARTCHAR uni3C26 +ENCODING 15398 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +0820 +7F7E +0842 +0892 +0814 +FF10 +1010 +1010 +1410 +1228 +2228 +3D44 +E082 +ENDCHAR +STARTCHAR uni3C27 +ENCODING 15399 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2040 +287C +4484 +FE88 +4320 +0020 +7C20 +4450 +4450 +4450 +4488 +7C88 +4504 +0202 +ENDCHAR +STARTCHAR uni3C28 +ENCODING 15400 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +7E20 +427E +4242 +4284 +4210 +7E10 +4210 +0010 +2428 +2228 +4248 +4244 +8084 +0102 +ENDCHAR +STARTCHAR uni3C29 +ENCODING 15401 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +7F7E +4942 +4984 +4910 +4910 +7F10 +4810 +0828 +0A28 +0F48 +F144 +4084 +0102 +ENDCHAR +STARTCHAR uni3C2A +ENCODING 15402 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +7F7E +0842 +0884 +FF10 +0010 +0810 +0810 +7F28 +0828 +0848 +0F44 +F084 +4102 +ENDCHAR +STARTCHAR uni3C2B +ENCODING 15403 +BBX 15 16 0 -2 +BITMAP +0820 +2820 +2820 +3E7E +4842 +0884 +0810 +7F10 +1410 +1410 +1428 +1428 +2548 +2644 +4484 +8102 +ENDCHAR +STARTCHAR uni3C2C +ENCODING 15404 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2020 +7F7E +4142 +8184 +7910 +4910 +4910 +7910 +4928 +4928 +7928 +0144 +0A44 +0482 +ENDCHAR +STARTCHAR uni3C2D +ENCODING 15405 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +FE40 +287C +4484 +8288 +7D20 +0020 +FE20 +2050 +4050 +7C50 +0488 +0488 +2904 +1202 +ENDCHAR +STARTCHAR uni3C2E +ENCODING 15406 +BBX 15 16 0 -2 +BITMAP +0020 +7F20 +4020 +407E +5E42 +4084 +4010 +7F10 +5010 +5110 +5A28 +5428 +5228 +9144 +9844 +1082 +ENDCHAR +STARTCHAR uni3C2F +ENCODING 15407 +BBX 15 16 0 -2 +BITMAP +0020 +FF20 +0020 +007E +7E42 +4284 +4210 +4210 +7E10 +0010 +4228 +2228 +2428 +0F44 +F044 +4082 +ENDCHAR +STARTCHAR uni3C30 +ENCODING 15408 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7F20 +087E +0842 +2A84 +2A10 +2A10 +5D10 +8890 +0828 +1428 +1428 +2244 +4244 +8082 +ENDCHAR +STARTCHAR uni3C31 +ENCODING 15409 +BBX 14 16 1 -2 +BITMAP +0E40 +F040 +1040 +10FC +FE84 +1108 +FE20 +9220 +9220 +FE20 +9250 +9250 +FE50 +1088 +1088 +1104 +ENDCHAR +STARTCHAR uni3C32 +ENCODING 15410 +BBX 15 16 0 -2 +BITMAP +0420 +0520 +04A0 +FFBE +0422 +0444 +7550 +5590 +5510 +7310 +0290 +32A8 +C5A8 +08C4 +1044 +0082 +ENDCHAR +STARTCHAR uni3C33 +ENCODING 15411 +BBX 15 16 0 -2 +BITMAP +0040 +FE40 +2840 +287C +2884 +EE88 +8320 +8220 +8220 +EE50 +2850 +2850 +2E88 +F088 +4104 +0202 +ENDCHAR +STARTCHAR uni3C34 +ENCODING 15412 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +7F20 +007E +2242 +1484 +FF10 +0010 +0010 +3E10 +2228 +2228 +2248 +3E44 +2284 +0102 +ENDCHAR +STARTCHAR uni3C35 +ENCODING 15413 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +0020 +7F7E +0042 +2284 +2210 +5510 +8890 +0810 +FF28 +0828 +0848 +0844 +0884 +0902 +ENDCHAR +STARTCHAR uni3C36 +ENCODING 15414 +BBX 15 16 0 -2 +BITMAP +2220 +2220 +3A20 +4B3E +4AA2 +AA44 +1250 +2890 +4790 +8010 +3F10 +2128 +2128 +2144 +3F44 +2182 +ENDCHAR +STARTCHAR uni3C37 +ENCODING 15415 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FFA0 +227E +2242 +3A84 +4A10 +4B90 +4A10 +AA10 +1228 +1228 +22A8 +2344 +4244 +8082 +ENDCHAR +STARTCHAR uni3C38 +ENCODING 15416 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1420 +227E +4142 +BE84 +0810 +0810 +7F10 +4910 +4928 +7F28 +0848 +1444 +2284 +4102 +ENDCHAR +STARTCHAR uni3C39 +ENCODING 15417 +BBX 15 16 0 -2 +BITMAP +0110 +0190 +0150 +7F9E +4112 +4122 +5D08 +4148 +4148 +5D48 +5588 +5594 +5D54 +4154 +42D4 +8462 +ENDCHAR +STARTCHAR uni3C3A +ENCODING 15418 +BBX 14 16 1 -2 +BITMAP +0040 +EE40 +A240 +A27C +A244 +EE88 +80A0 +8120 +EE20 +8220 +9220 +EA50 +8450 +8488 +8A88 +9304 +ENDCHAR +STARTCHAR uni3C3B +ENCODING 15419 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FF20 +083E +0822 +7E44 +0050 +7E90 +4210 +4210 +7E10 +4228 +2428 +0F44 +F044 +4082 +ENDCHAR +STARTCHAR uni3C3C +ENCODING 15420 +BBX 15 16 0 -2 +BITMAP +0020 +FF20 +8820 +887E +FE42 +8884 +AA10 +AA10 +DD10 +8810 +9428 +9228 +A128 +C044 +FF44 +0082 +ENDCHAR +STARTCHAR uni3C3D +ENCODING 15421 +BBX 15 16 0 -2 +BITMAP +0020 +FFA0 +8020 +BF7E +A142 +BF84 +A110 +BF10 +8810 +FF90 +9228 +B228 +8C28 +9244 +A144 +FF82 +ENDCHAR +STARTCHAR uni3C3E +ENCODING 15422 +BBX 15 16 0 -2 +BITMAP +0820 +1020 +7E20 +427E +7E42 +4284 +7E10 +1010 +0810 +FF10 +2028 +3E28 +2248 +4244 +4A84 +8502 +ENDCHAR +STARTCHAR uni3C3F +ENCODING 15423 +BBX 15 16 0 -2 +BITMAP +0E40 +F040 +2240 +927C +4484 +2088 +4520 +F820 +1020 +2450 +FE50 +1050 +FE88 +2888 +4504 +8202 +ENDCHAR +STARTCHAR uni3C40 +ENCODING 15424 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7F20 +917E +5542 +7D84 +2110 +4A10 +A410 +7F10 +9128 +5528 +7D28 +2144 +4A44 +8482 +ENDCHAR +STARTCHAR uni3C41 +ENCODING 15425 +BBX 14 16 1 -2 +BITMAP +1040 +5440 +5440 +7CFC +9284 +9308 +FE20 +0020 +7C20 +0020 +FE50 +1050 +5490 +9288 +5108 +2204 +ENDCHAR +STARTCHAR uni3C42 +ENCODING 15426 +BBX 15 16 0 -2 +BITMAP +0410 +0210 +3FD0 +221E +2F92 +22A4 +3FC8 +2288 +2F88 +2208 +3248 +2A94 +2714 +4A94 +5254 +8622 +ENDCHAR +STARTCHAR uni3C43 +ENCODING 15427 +BBX 15 16 0 -2 +BITMAP +0820 +1420 +2220 +497E +BEC2 +0484 +0810 +FF90 +1410 +7F10 +5528 +6328 +4148 +7F44 +4184 +7F02 +ENDCHAR +STARTCHAR uni3C44 +ENCODING 15428 +BBX 15 16 0 -2 +BITMAP +0020 +7F20 +4920 +6B7E +5D42 +4984 +7F10 +0810 +7F10 +0810 +0F28 +F028 +0128 +5544 +5444 +4082 +ENDCHAR +STARTCHAR uni3C45 +ENCODING 15429 +BBX 15 16 0 -2 +BITMAP +0820 +FFA0 +0820 +7F7E +0042 +FF84 +8090 +7F10 +0010 +7F10 +4128 +7F28 +4128 +2244 +0FC4 +F082 +ENDCHAR +STARTCHAR uni3C46 +ENCODING 15430 +BBX 15 16 0 -2 +BITMAP +0820 +0F20 +0820 +7F7E +4942 +4C84 +7910 +4710 +4010 +5F10 +4028 +5F28 +5128 +5F44 +8A44 +3F82 +ENDCHAR +STARTCHAR uni3C47 +ENCODING 15431 +BBX 15 16 0 -2 +BITMAP +0820 +7F20 +2A20 +2A3E +5D22 +0844 +FF50 +0090 +7F10 +4110 +5D10 +5528 +5D28 +4144 +7F44 +4182 +ENDCHAR +STARTCHAR uni3C48 +ENCODING 15432 +BBX 15 16 0 -2 +BITMAP +2220 +2220 +F7A0 +227E +7742 +AA84 +2250 +0010 +7F10 +0010 +FFA8 +0828 +4928 +88C4 +2844 +1082 +ENDCHAR +STARTCHAR uni3C49 +ENCODING 15433 +BBX 15 16 0 -2 +BITMAP +1420 +5520 +3620 +147E +FF42 +2284 +1410 +7F10 +0810 +7F10 +0828 +FF28 +1C28 +2A44 +4944 +0882 +ENDCHAR +STARTCHAR uni3C4A +ENCODING 15434 +BBX 15 16 0 -2 +BITMAP +FF20 +1020 +7E20 +427E +7E42 +4284 +FF10 +9110 +4A10 +A510 +1C28 +2028 +7E28 +A244 +1C44 +E282 +ENDCHAR +STARTCHAR uni3C4B +ENCODING 15435 +BBX 15 16 0 -2 +BITMAP +3F90 +0410 +7FD0 +445E +B592 +0424 +3588 +1208 +3FC8 +6408 +BF88 +2414 +3F94 +2414 +3FD4 +2022 +ENDCHAR +STARTCHAR uni3C4C +ENCODING 15436 +BBX 15 16 0 -2 +BITMAP +7F88 +2108 +3F08 +2108 +3F1E +21D2 +FF24 +0100 +FFC8 +5288 +7388 +5288 +7394 +5AD4 +F7A4 +10C2 +ENDCHAR +STARTCHAR uni3C4D +ENCODING 15437 +BBX 15 16 0 -2 +BITMAP +4848 +4448 +4048 +5E4E +A0AA +AEB2 +C0C4 +4E44 +4044 +8E84 +AAA4 +EAEA +0A0A +AEAA +AAAA +0010 +ENDCHAR +STARTCHAR uni3C4E +ENCODING 15438 +BBX 15 16 0 -2 +BITMAP +7F20 +5520 +7F20 +2A7E +4942 +2A84 +6110 +3E10 +4410 +FF10 +4928 +7F28 +4928 +7F44 +0044 +AA82 +ENDCHAR +STARTCHAR uni3C4F +ENCODING 15439 +BBX 15 14 0 -1 +BITMAP +1FF0 +0000 +0000 +0000 +7FFC +0100 +0100 +1100 +11F8 +1100 +1100 +1100 +1100 +FFFE +ENDCHAR +STARTCHAR uni3C50 +ENCODING 15440 +BBX 15 15 0 -2 +BITMAP +0010 +3F08 +0008 +0000 +FFFE +0000 +0400 +0400 +2700 +2400 +2400 +2400 +2780 +F800 +4000 +ENDCHAR +STARTCHAR uni3C51 +ENCODING 15441 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +11F8 +1100 +1100 +FFFE +0200 +0400 +0FF0 +1010 +6820 +0440 +0280 +0300 +1C00 +E000 +ENDCHAR +STARTCHAR uni3C52 +ENCODING 15442 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +11F8 +1100 +1100 +FFFE +0000 +FFFE +0010 +1F90 +1090 +1090 +1F90 +0010 +0050 +0020 +ENDCHAR +STARTCHAR uni3C53 +ENCODING 15443 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0850 +4850 +4E88 +4924 +4A12 +4810 +49FC +4804 +4808 +4888 +4E50 +F020 +0010 +0010 +ENDCHAR +STARTCHAR uni3C54 +ENCODING 15444 +BBX 14 16 1 -2 +BITMAP +0880 +0888 +2E90 +28E0 +2884 +2E84 +F07C +0400 +0FE0 +1020 +6840 +0480 +0100 +0600 +1800 +E000 +ENDCHAR +STARTCHAR uni3C55 +ENCODING 15445 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1004 +10FC +5004 +5DFC +5000 +53FE +5222 +5020 +51FC +5D24 +7124 +C134 +0128 +0020 +ENDCHAR +STARTCHAR uni3C56 +ENCODING 15446 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +5088 +5C88 +5154 +5222 +5000 +5020 +53FE +5C20 +7020 +C020 +0020 +0020 +ENDCHAR +STARTCHAR uni3C57 +ENCODING 15447 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1104 +51FC +5D04 +51FC +5104 +51FC +5028 +5024 +5DFE +7050 +C088 +0104 +0202 +ENDCHAR +STARTCHAR uni3C58 +ENCODING 15448 +BBX 15 16 0 -2 +BITMAP +3FFE +2914 +2F12 +2910 +2F7E +2010 +2F28 +2928 +2F28 +2944 +2F44 +2982 +4B40 +447C +8440 +1FFE +ENDCHAR +STARTCHAR uni3C59 +ENCODING 15449 +BBX 15 15 0 -2 +BITMAP +03FE +FC40 +2040 +2080 +3C80 +4500 +45FC +6404 +9404 +0804 +0804 +1004 +2004 +4028 +8010 +ENDCHAR +STARTCHAR uni3C5A +ENCODING 15450 +BBX 14 15 0 -2 +BITMAP +00FC +FC84 +2084 +2084 +3CFC +4484 +4484 +6484 +94FC +0884 +0884 +1104 +2104 +4214 +8408 +ENDCHAR +STARTCHAR uni3C5B +ENCODING 15451 +BBX 15 14 0 -2 +BITMAP +FDFE +2020 +2020 +3C7C +4444 +4484 +6484 +9548 +0A28 +0810 +1010 +2020 +4040 +8080 +ENDCHAR +STARTCHAR uni3C5C +ENCODING 15452 +BBX 15 15 0 -2 +BITMAP +0020 +FC20 +2020 +2020 +3C20 +4520 +453C +6520 +9520 +0920 +0920 +12A0 +2260 +443E +8800 +ENDCHAR +STARTCHAR uni3C5D +ENCODING 15453 +BBX 15 16 0 -2 +BITMAP +0010 +0010 +FF90 +2210 +227E +3A12 +4A12 +4B92 +4A12 +AA12 +1212 +1212 +2292 +2322 +422A +8044 +ENDCHAR +STARTCHAR uni3C5E +ENCODING 15454 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +FC40 +2000 +23FC +3C00 +4408 +4508 +6508 +9490 +0890 +0890 +10A0 +2020 +47FE +8000 +ENDCHAR +STARTCHAR uni3C5F +ENCODING 15455 +BBX 15 16 0 -2 +BITMAP +0010 +0010 +FC10 +21FE +2112 +3D14 +4510 +45FC +6544 +9544 +0928 +0928 +1110 +2228 +4244 +8482 +ENDCHAR +STARTCHAR uni3C60 +ENCODING 15456 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC20 +2020 +23FE +3C20 +4420 +4420 +65FC +9504 +0904 +0904 +1104 +2104 +41FC +8104 +ENDCHAR +STARTCHAR uni3C61 +ENCODING 15457 +BBX 15 16 0 -2 +BITMAP +0020 +0120 +FD20 +21FC +2120 +3E20 +4420 +47FE +6490 +9490 +0890 +0890 +1112 +2112 +4212 +840E +ENDCHAR +STARTCHAR uni3C62 +ENCODING 15458 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FDFC +2104 +2104 +3DFC +4504 +4504 +65FC +9520 +0922 +0914 +1108 +2144 +4182 +8100 +ENDCHAR +STARTCHAR uni3C63 +ENCODING 15459 +BBX 15 16 0 -2 +BITMAP +0004 +001E +FDE0 +2022 +2112 +3C94 +4480 +4420 +65FE +9444 +0884 +09C8 +1030 +2028 +40C4 +8302 +ENDCHAR +STARTCHAR uni3C64 +ENCODING 15460 +BBX 15 16 0 -2 +BITMAP +0080 +0086 +F898 +2090 +23D0 +3890 +489E +4994 +69D4 +9AB4 +0A94 +1494 +1094 +2094 +4094 +80A4 +ENDCHAR +STARTCHAR uni3C65 +ENCODING 15461 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +F9FC +2020 +2020 +3BFE +4888 +4944 +6A42 +98F8 +0988 +1250 +1020 +2050 +4188 +8606 +ENDCHAR +STARTCHAR uni3C66 +ENCODING 15462 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FDFC +2050 +2088 +3D04 +47FE +4408 +65E8 +9528 +0928 +09E8 +1128 +2008 +4028 +8010 +ENDCHAR +STARTCHAR uni3C67 +ENCODING 15463 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2504 +3900 +49DE +4A52 +6A52 +9B52 +0C9A +1094 +1110 +2112 +4212 +840E +ENDCHAR +STARTCHAR uni3C68 +ENCODING 15464 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2404 +3800 +4BFE +4820 +6820 +9920 +093C +1120 +12A0 +2260 +443E +8800 +ENDCHAR +STARTCHAR uni3C69 +ENCODING 15465 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +F9FC +2020 +2020 +3BFE +4802 +4894 +6850 +9910 +0890 +13FE +1028 +2044 +4082 +8302 +ENDCHAR +STARTCHAR uni3C6A +ENCODING 15466 +BBX 15 15 0 -2 +BITMAP +01FC +FD04 +21FC +2110 +3DFE +4510 +454A +6586 +9400 +09FC +0904 +11FC +2104 +41FC +8104 +ENDCHAR +STARTCHAR uni3C6B +ENCODING 15467 +BBX 15 16 0 -2 +BITMAP +0020 +FC20 +23FE +2020 +21FC +3D24 +45AC +4574 +6524 +95FC +0820 +0870 +10A8 +2124 +4222 +8020 +ENDCHAR +STARTCHAR uni3C6C +ENCODING 15468 +BBX 15 15 0 -2 +BITMAP +03F8 +FA48 +2248 +23F8 +3A48 +4A48 +4BF8 +6800 +9FFE +0A40 +1244 +1228 +2290 +4308 +8206 +ENDCHAR +STARTCHAR uni3C6D +ENCODING 15469 +BBX 15 16 0 -2 +BITMAP +0080 +0338 +FA28 +2228 +23A8 +3A46 +4A00 +4A7C +6BA4 +9A24 +0A28 +13A8 +1610 +2228 +4244 +8282 +ENDCHAR +STARTCHAR uni3C6E +ENCODING 15470 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FDFC +2124 +21FC +3C20 +47FE +4400 +65FC +9504 +0924 +0924 +1124 +2050 +4088 +8304 +ENDCHAR +STARTCHAR uni3C6F +ENCODING 15471 +BBX 15 16 0 -2 +BITMAP +0020 +0124 +FD24 +2124 +21FC +3C00 +47FE +4400 +65FC +9504 +0904 +09FC +1088 +2050 +43FE +8000 +ENDCHAR +STARTCHAR uni3C70 +ENCODING 15472 +BBX 15 16 0 -2 +BITMAP +0040 +FC20 +23FE +2242 +2020 +3DFC +4488 +4450 +67FE +9420 +0820 +09FC +1020 +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni3C71 +ENCODING 15473 +BBX 15 16 0 -2 +BITMAP +0020 +0040 +FBFC +2224 +2224 +3BFC +4A24 +4A44 +6BFC +9840 +08A8 +10B4 +113C +2122 +4222 +841E +ENDCHAR +STARTCHAR uni3C72 +ENCODING 15474 +BBX 15 16 0 -2 +BITMAP +0208 +0108 +F910 +2000 +27FC +3800 +4910 +4A08 +6C04 +9BF8 +0AA8 +12A8 +12A8 +22A8 +4FFE +8000 +ENDCHAR +STARTCHAR uni3C73 +ENCODING 15475 +BBX 15 16 0 -2 +BITMAP +0440 +7FFC +0440 +1FF0 +1010 +1FF0 +1010 +1FF0 +0400 +FFFE +1010 +2FE8 +C206 +0FE0 +0440 +3F80 +ENDCHAR +STARTCHAR uni3C74 +ENCODING 15476 +BBX 15 16 0 -2 +BITMAP +0020 +03FE +F820 +21FC +2020 +3BFE +4800 +49FC +6904 +99FC +0904 +11FC +1104 +21FC +4088 +8104 +ENDCHAR +STARTCHAR uni3C75 +ENCODING 15477 +BBX 15 16 0 -2 +BITMAP +0020 +01FC +FC20 +2088 +23FE +3C88 +45FC +4504 +65FC +9504 +09FC +0904 +11FC +2088 +4104 +8202 +ENDCHAR +STARTCHAR uni3C76 +ENCODING 15478 +BBX 15 16 0 -2 +BITMAP +0082 +0082 +FBF4 +2088 +2080 +3BE2 +4802 +4BE4 +6A28 +9A20 +0BE0 +1222 +1142 +2074 +4788 +8210 +ENDCHAR +STARTCHAR uni3C77 +ENCODING 15479 +BBX 15 16 0 -2 +BITMAP +00A0 +0090 +FDFE +2320 +21FC +3D20 +45FC +4520 +65FE +9500 +0820 +0BFE +1070 +20A8 +4326 +8020 +ENDCHAR +STARTCHAR uni3C78 +ENCODING 15480 +BBX 15 16 0 -2 +BITMAP +0010 +03C8 +FA7E +2240 +2262 +3BD4 +4A00 +4A3E +6BC8 +9A48 +0E7E +1248 +1248 +23C8 +4248 +8008 +ENDCHAR +STARTCHAR uni3C79 +ENCODING 15481 +BBX 15 15 0 -2 +BITMAP +03FE +FA22 +22CC +2244 +3BEE +4A44 +4AEE +6B54 +9A44 +0A10 +1290 +129E +2490 +4490 +8BFE +ENDCHAR +STARTCHAR uni3C7A +ENCODING 15482 +BBX 15 16 0 -2 +BITMAP +0040 +007C +F840 +23FC +2244 +3BF0 +4A44 +4AFC +6AA8 +9AF8 +0AA8 +12F8 +1200 +25FC +4554 +8BFE +ENDCHAR +STARTCHAR uni3C7B +ENCODING 15483 +BBX 15 16 0 -2 +BITMAP +0040 +1FFE +E400 +47FC +4000 +77FC +5404 +97FC +5110 +2EAE +2BFA +2E4A +4AEE +4E4A +8BFA +1650 +ENDCHAR +STARTCHAR uni3C7C +ENCODING 15484 +BBX 13 15 2 -2 +BITMAP +F9E0 +8920 +8920 +8920 +8A18 +8800 +FBF0 +8110 +8110 +80A0 +88A0 +B040 +C0A0 +8110 +0608 +ENDCHAR +STARTCHAR uni3C7D +ENCODING 15485 +BBX 15 16 0 -2 +BITMAP +0800 +0878 +0848 +7F48 +4948 +0886 +0800 +14FC +1444 +1444 +1428 +2528 +2610 +4428 +8044 +0182 +ENDCHAR +STARTCHAR uni3C7E +ENCODING 15486 +BBX 15 16 0 -2 +BITMAP +1000 +0878 +0848 +FF48 +0848 +1086 +2200 +7CFC +0944 +1244 +2428 +C828 +1410 +2228 +C044 +0182 +ENDCHAR +STARTCHAR uni3C7F +ENCODING 15487 +BBX 15 16 0 -2 +BITMAP +1000 +1078 +FE48 +1048 +1048 +7C86 +0000 +00FC +FE44 +8244 +8228 +BA28 +8210 +8228 +8A44 +8582 +ENDCHAR +STARTCHAR uni3C80 +ENCODING 15488 +BBX 15 15 0 -2 +BITMAP +7F78 +4048 +4048 +5E48 +4086 +4000 +7EFC +5044 +5144 +5A28 +5428 +5210 +5128 +9844 +1182 +ENDCHAR +STARTCHAR uni3C81 +ENCODING 15489 +BBX 15 16 0 -2 +BITMAP +2000 +1078 +FE48 +8248 +2848 +4486 +8200 +00FC +7C44 +1044 +1028 +1028 +1E10 +F028 +4044 +0182 +ENDCHAR +STARTCHAR uni3C82 +ENCODING 15490 +BBX 15 16 0 -2 +BITMAP +1000 +9278 +5248 +5448 +1048 +FE86 +8200 +82FC +BA44 +AA44 +AA28 +AA28 +BA10 +8228 +8A44 +8582 +ENDCHAR +STARTCHAR uni3C83 +ENCODING 15491 +BBX 14 16 1 -2 +BITMAP +2000 +20F0 +3C90 +2090 +FC90 +850C +FC00 +85F8 +FC88 +0088 +4050 +7C50 +4020 +4450 +5888 +6304 +ENDCHAR +STARTCHAR uni3C84 +ENCODING 15492 +BBX 15 16 0 -2 +BITMAP +1000 +1078 +FE48 +1048 +7C48 +0086 +FE00 +82FC +0044 +7C44 +1028 +7C28 +1010 +1E28 +F044 +4182 +ENDCHAR +STARTCHAR uni3C85 +ENCODING 15493 +BBX 15 16 0 -2 +BITMAP +2000 +1078 +FE48 +8248 +1048 +7C86 +1000 +7CFC +1044 +FE44 +1028 +7C28 +4410 +4428 +7C44 +4582 +ENDCHAR +STARTCHAR uni3C86 +ENCODING 15494 +BBX 15 16 0 -2 +BITMAP +0800 +7F78 +0848 +3E48 +0086 +3E78 +2A48 +3E30 +4148 +8284 +0C60 +3118 +CFE6 +0040 +0680 +0180 +ENDCHAR +STARTCHAR uni3C87 +ENCODING 15495 +BBX 15 16 0 -2 +BITMAP +0800 +7F78 +0848 +3E48 +0086 +3E78 +2A48 +3E30 +4848 +9FF4 +2820 +07C0 +1830 +E18E +0C40 +0300 +ENDCHAR +STARTCHAR uni3C88 +ENCODING 15496 +BBX 15 16 0 -2 +BITMAP +0800 +7F78 +0848 +3E48 +0086 +3E78 +2A48 +3E30 +4048 +8086 +7FF8 +0808 +1030 +3FF8 +D008 +1FF8 +ENDCHAR +STARTCHAR uni3C89 +ENCODING 15497 +BBX 15 16 0 -2 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FE86 +8200 +7CFC +2044 +CE44 +AA28 +EE28 +AA10 +EE28 +2844 +4982 +ENDCHAR +STARTCHAR uni3C8A +ENCODING 15498 +BBX 15 16 0 -2 +BITMAP +1000 +1F38 +1028 +FFA8 +80A8 +7F46 +2A00 +557C +A224 +7F24 +A2A8 +3E28 +2210 +3E28 +2244 +3E82 +ENDCHAR +STARTCHAR uni3C8B +ENCODING 15499 +BBX 14 16 0 -2 +BITMAP +0800 +0800 +1FE0 +2020 +4040 +BFF8 +2008 +2008 +3FF8 +0000 +2084 +3E98 +20E0 +2084 +2684 +387C +ENDCHAR +STARTCHAR uni3C8C +ENCODING 15500 +BBX 15 15 0 -1 +BITMAP +0800 +1DF8 +7048 +1048 +1050 +1C5C +7084 +1084 +1084 +1D04 +F128 +1212 +1002 +1002 +0FFE +ENDCHAR +STARTCHAR uni3C8D +ENCODING 15501 +BBX 15 16 0 -2 +BITMAP +1010 +1038 +11C0 +FE40 +1078 +11C0 +FC40 +447C +47C0 +2844 +2844 +1044 +183C +2400 +43FE +8000 +ENDCHAR +STARTCHAR uni3C8E +ENCODING 15502 +BBX 15 15 0 -1 +BITMAP +0408 +0E1C +70E0 +1020 +1020 +1C3C +70E0 +1020 +1020 +1E3C +F0E0 +1022 +1422 +1822 +101E +ENDCHAR +STARTCHAR uni3C8F +ENCODING 15503 +BBX 15 16 0 -2 +BITMAP +0408 +243C +25E0 +2420 +2420 +3E3C +21E0 +2020 +3C20 +243E +27E0 +2420 +2422 +4422 +4422 +841E +ENDCHAR +STARTCHAR uni3C90 +ENCODING 15504 +BBX 15 15 0 -1 +BITMAP +0820 +1C20 +7050 +1050 +1088 +1D44 +7222 +10F8 +1008 +1C10 +F010 +1022 +1022 +1002 +0FFE +ENDCHAR +STARTCHAR uni3C91 +ENCODING 15505 +BBX 15 15 0 -1 +BITMAP +0820 +1C20 +7020 +1024 +11A8 +1CB0 +70B0 +1128 +1128 +1D24 +F224 +10A0 +1040 +1002 +0FFE +ENDCHAR +STARTCHAR uni3C92 +ENCODING 15506 +BBX 15 16 0 -2 +BITMAP +2008 +201C +40E0 +7E20 +8220 +023C +7AE0 +4A20 +4A20 +4A3C +7AE0 +4A22 +0222 +0222 +141E +0800 +ENDCHAR +STARTCHAR uni3C93 +ENCODING 15507 +BBX 15 15 0 -1 +BITMAP +0828 +1C24 +7024 +11FE +1120 +1D28 +71A8 +1150 +1114 +1D34 +F14C +1104 +1200 +1002 +0FFE +ENDCHAR +STARTCHAR uni3C94 +ENCODING 15508 +BBX 15 16 0 -2 +BITMAP +1004 +080E +7F70 +0010 +2210 +141C +FF70 +0810 +0810 +081E +7F70 +0810 +0812 +0812 +0812 +080E +ENDCHAR +STARTCHAR uni3C95 +ENCODING 15509 +BBX 15 16 0 -2 +BITMAP +0408 +1E1C +E0E0 +2220 +9220 +543C +40E0 +0420 +FF20 +043C +44E0 +2422 +2422 +0422 +141E +0800 +ENDCHAR +STARTCHAR uni3C96 +ENCODING 15510 +BBX 14 16 1 -2 +BITMAP +1008 +921C +52E0 +5420 +1020 +FE38 +82E0 +8220 +FE20 +823C +82E0 +FE20 +8224 +8224 +8A24 +841C +ENDCHAR +STARTCHAR uni3C97 +ENCODING 15511 +BBX 15 16 0 -2 +BITMAP +0408 +1E1C +E0E0 +0220 +9220 +4C3C +00E0 +FE20 +0420 +083C +0EE0 +F822 +4822 +0822 +281E +1000 +ENDCHAR +STARTCHAR uni3C98 +ENCODING 15512 +BBX 15 16 0 -2 +BITMAP +0008 +7E1C +42E0 +4220 +7E20 +423C +42E0 +7E20 +4220 +423C +7EE0 +0022 +2422 +2222 +411E +8100 +ENDCHAR +STARTCHAR uni3C99 +ENCODING 15513 +BBX 15 15 0 -1 +BITMAP +0840 +1C20 +71FE +1040 +1088 +1DFC +7004 +10A8 +10A8 +1CA8 +F12A +1226 +1000 +1002 +0FFE +ENDCHAR +STARTCHAR uni3C9A +ENCODING 15514 +BBX 14 16 1 -2 +BITMAP +2040 +1040 +8150 +4948 +1254 +E460 +2180 +2E00 +01E0 +7E00 +03E0 +7E00 +03F0 +FE04 +0204 +01FC +ENDCHAR +STARTCHAR uni3C9B +ENCODING 15515 +BBX 15 16 0 -2 +BITMAP +2000 +3E7C +4844 +0844 +FF44 +1444 +227C +4000 +00F0 +3F00 +01F0 +3F00 +01F8 +7F02 +0102 +00FE +ENDCHAR +STARTCHAR uni3C9C +ENCODING 15516 +BBX 15 16 0 -2 +BITMAP +1008 +521C +54E0 +9020 +2820 +443C +82E0 +1020 +1020 +523C +54E0 +9022 +2822 +2422 +421E +8000 +ENDCHAR +STARTCHAR uni3C9D +ENCODING 15517 +BBX 15 15 0 -1 +BITMAP +0850 +1C48 +70FE +1190 +1290 +1CFE +7090 +1090 +10FE +1C90 +F090 +10FE +1080 +1002 +0FFE +ENDCHAR +STARTCHAR uni3C9E +ENCODING 15518 +BBX 15 16 0 -2 +BITMAP +1004 +080E +0070 +7F10 +0010 +221C +2270 +5510 +8890 +081E +FF70 +0810 +0812 +0812 +0812 +080E +ENDCHAR +STARTCHAR uni3C9F +ENCODING 15519 +BBX 15 16 0 -2 +BITMAP +2204 +220E +7F70 +2210 +2A10 +081C +3E70 +2A10 +2A10 +2A1E +FF70 +0810 +1412 +1212 +2212 +400E +ENDCHAR +STARTCHAR uni3CA0 +ENCODING 15520 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7E7E +08C4 +FF28 +1C10 +2A28 +48C6 +00F0 +3F00 +01F0 +3F00 +01F8 +7F02 +0102 +00FE +ENDCHAR +STARTCHAR uni3CA1 +ENCODING 15521 +BBX 15 16 0 -2 +BITMAP +0804 +080E +7F70 +1C10 +2A10 +491C +0070 +7E10 +0010 +FF1E +0870 +4A10 +4912 +8912 +2812 +100E +ENDCHAR +STARTCHAR uni3CA2 +ENCODING 15522 +BBX 15 16 0 -2 +BITMAP +1004 +080E +7E70 +4210 +4210 +7E1C +4270 +4010 +7F10 +551E +5570 +7F10 +D512 +5512 +5512 +430E +ENDCHAR +STARTCHAR uni3CA3 +ENCODING 15523 +BBX 15 15 0 -1 +BITMAP +5008 +961C +92E0 +9220 +D620 +923C +92E0 +FE20 +1020 +FE3C +02E0 +6422 +1822 +2422 +C21E +ENDCHAR +STARTCHAR uni3CA4 +ENCODING 15524 +BBX 15 16 0 -2 +BITMAP +1004 +080E +7F70 +0010 +3E10 +221C +FF70 +2210 +3E10 +189E +3570 +5210 +9112 +1492 +1812 +100E +ENDCHAR +STARTCHAR uni3CA5 +ENCODING 15525 +BBX 15 16 0 -2 +BITMAP +1004 +080E +7F70 +4810 +5E10 +4A1C +7F70 +4A10 +5E10 +481E +5E70 +5210 +5212 +5212 +5E12 +920E +ENDCHAR +STARTCHAR uni3CA6 +ENCODING 15526 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +FE88 +1106 +7C18 +44E0 +7C20 +4438 +7CE0 +1020 +FE3C +11E0 +1022 +1022 +101E +ENDCHAR +STARTCHAR uni3CA7 +ENCODING 15527 +BBX 15 16 0 -2 +BITMAP +1000 +3BF0 +E150 +2110 +20A0 +3840 +E1B0 +264E +21F0 +3950 +E1F0 +2048 +23FA +200A +2002 +1FFE +ENDCHAR +STARTCHAR uni3CA8 +ENCODING 15528 +BBX 15 16 0 -2 +BITMAP +2408 +241C +FEE0 +2420 +0020 +FE3C +24E0 +3C20 +2420 +3C3C +24E0 +2E22 +F422 +0422 +041E +0400 +ENDCHAR +STARTCHAR uni3CA9 +ENCODING 15529 +BBX 15 16 0 -2 +BITMAP +1000 +3BF8 +E208 +23F8 +2208 +3BF8 +E000 +27BC +2084 +3CA4 +E294 +24A4 +2296 +210A +2002 +1FFE +ENDCHAR +STARTCHAR uni3CAA +ENCODING 15530 +BBX 15 16 0 -2 +BITMAP +0A04 +740E +1570 +5210 +2210 +211C +5D70 +8010 +7E10 +421E +4270 +7E10 +4212 +2412 +0F12 +F00E +ENDCHAR +STARTCHAR uni3CAB +ENCODING 15531 +BBX 15 16 0 -2 +BITMAP +2808 +AA1C +6CE0 +2820 +FE20 +443C +28E0 +FE20 +1020 +7C3C +10E0 +FE22 +1022 +2822 +441E +8200 +ENDCHAR +STARTCHAR uni3CAC +ENCODING 15532 +BBX 15 15 0 -1 +BITMAP +2808 +241C +7EE0 +C820 +4820 +7E3C +48E0 +4820 +7E20 +483C +48E0 +7E22 +4022 +AA22 +AA1E +ENDCHAR +STARTCHAR uni3CAD +ENCODING 15533 +BBX 15 16 0 -2 +BITMAP +0804 +290E +2970 +4A10 +1410 +221C +4170 +0010 +2210 +2A9E +B770 +6210 +2212 +5212 +4512 +888E +ENDCHAR +STARTCHAR uni3CAE +ENCODING 15534 +BBX 15 16 0 -2 +BITMAP +1210 +3A10 +E3DE +2528 +2084 +3840 +E0A0 +2110 +22E8 +3C04 +E1F0 +2110 +2112 +21F2 +2002 +1FFE +ENDCHAR +STARTCHAR uni3CAF +ENCODING 15535 +BBX 15 16 0 -2 +BITMAP +0004 +7A0E +5270 +7B90 +4A10 +7B1C +54F0 +7890 +0010 +7F1E +5570 +5510 +5512 +5792 +FC12 +000E +ENDCHAR +STARTCHAR uni3CB0 +ENCODING 15536 +BBX 15 16 0 -2 +BITMAP +0804 +FF0E +9170 +4A10 +A510 +1C1C +0070 +7F10 +5510 +FF9E +0070 +7F10 +0812 +0812 +2812 +100E +ENDCHAR +STARTCHAR uni3CB1 +ENCODING 15537 +BBX 15 16 0 -2 +BITMAP +1124 +3A48 +E124 +23FC +2294 +3A64 +E294 +23FC +2248 +3B68 +E248 +236A +2246 +2362 +2002 +1FFE +ENDCHAR +STARTCHAR uni3CB2 +ENCODING 15538 +BBX 15 16 0 -2 +BITMAP +7F04 +490E +7F70 +4910 +FF90 +AA9C +FFF0 +AA90 +FF90 +001E +FFF0 +A290 +3E12 +2212 +2792 +F80E +ENDCHAR +STARTCHAR uni3CB3 +ENCODING 15539 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F120 +9120 +91FC +9120 +FE20 +9020 +93FE +9020 +9050 +8A50 +A688 +D288 +0904 +0202 +ENDCHAR +STARTCHAR uni3CB4 +ENCODING 15540 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0410 +0410 +7FD0 +4450 +4450 +7FD2 +444A +040A +0406 +0402 +ENDCHAR +STARTCHAR uni3CB5 +ENCODING 15541 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +2490 +1510 +7FD0 +4050 +7FD0 +4052 +7FCA +404A +4146 +4082 +ENDCHAR +STARTCHAR uni3CB6 +ENCODING 15542 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0410 +07F0 +0410 +7FD0 +5550 +4A52 +64CA +4A4A +5546 +7FC2 +ENDCHAR +STARTCHAR uni3CB7 +ENCODING 15543 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +2A90 +3B90 +0010 +3F90 +2490 +3F92 +248A +FFEA +0406 +0402 +ENDCHAR +STARTCHAR uni3CB8 +ENCODING 15544 +BBX 15 14 0 -1 +BITMAP +2000 +13FC +1008 +8010 +4020 +4840 +0880 +1080 +1100 +E100 +2202 +2202 +2202 +21FE +ENDCHAR +STARTCHAR uni3CB9 +ENCODING 15545 +BBX 15 15 0 -2 +BITMAP +21F0 +1110 +1110 +8110 +4110 +4910 +0910 +1110 +1110 +E210 +2212 +2212 +2412 +240E +0800 +ENDCHAR +STARTCHAR uni3CBA +ENCODING 15546 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +1040 +1040 +8040 +404E +4870 +0FC0 +1040 +1040 +E040 +2042 +2042 +2042 +203E +ENDCHAR +STARTCHAR uni3CBB +ENCODING 15547 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +1044 +1768 +3170 +3160 +5150 +9150 +1248 +1248 +1444 +1842 +1040 +1140 +1080 +ENDCHAR +STARTCHAR uni3CBC +ENCODING 15548 +BBX 15 15 0 -2 +BITMAP +2008 +1208 +1208 +8208 +4110 +4910 +0910 +10A0 +10A0 +E040 +2040 +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni3CBD +ENCODING 15549 +BBX 14 15 0 -2 +BITMAP +23FC +1084 +1084 +8084 +4284 +4A84 +0A84 +1484 +1084 +E084 +2084 +2104 +2104 +2228 +0410 +ENDCHAR +STARTCHAR uni3CBE +ENCODING 15550 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8104 +0100 +0100 +3D84 +0588 +0950 +0920 +1110 +2108 +C106 +0500 +0200 +ENDCHAR +STARTCHAR uni3CBF +ENCODING 15551 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +1020 +13FE +8200 +4200 +4A00 +0A00 +1200 +1200 +E200 +2200 +2200 +2400 +2400 +0800 +ENDCHAR +STARTCHAR uni3CC0 +ENCODING 15552 +BBX 15 16 0 -2 +BITMAP +0090 +2088 +1088 +1080 +80BE +47C0 +4080 +1044 +1044 +2048 +E030 +2022 +2052 +218A +2606 +0002 +ENDCHAR +STARTCHAR uni3CC1 +ENCODING 15553 +BBX 15 15 0 -2 +BITMAP +23FE +1200 +1220 +8220 +4220 +4A20 +0A20 +1220 +1250 +E250 +2250 +2488 +2488 +2904 +1202 +ENDCHAR +STARTCHAR uni3CC2 +ENCODING 15554 +BBX 15 15 0 -1 +BITMAP +0020 +2120 +1120 +1110 +8110 +4248 +4248 +1444 +1882 +2080 +E110 +2108 +2208 +27FC +2204 +ENDCHAR +STARTCHAR uni3CC3 +ENCODING 15555 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +17F0 +0090 +8110 +4112 +2212 +0C0E +0040 +1040 +17FC +2040 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni3CC4 +ENCODING 15556 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +1080 +10FC +8104 +4108 +4240 +1440 +1040 +20A0 +E0A0 +2110 +2110 +2208 +2404 +0802 +ENDCHAR +STARTCHAR uni3CC5 +ENCODING 15557 +BBX 15 15 0 -2 +BITMAP +2000 +17FE +1020 +8020 +4040 +4840 +08D0 +1148 +1244 +E442 +2040 +2040 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni3CC6 +ENCODING 15558 +BBX 15 16 0 -2 +BITMAP +0010 +2110 +1090 +1090 +8010 +4210 +4910 +0910 +101E +17F0 +E010 +2010 +2010 +2010 +2010 +0010 +ENDCHAR +STARTCHAR uni3CC7 +ENCODING 15559 +BBX 15 16 0 -2 +BITMAP +0020 +2110 +1108 +1204 +8204 +4410 +4110 +1110 +10A0 +20A0 +E040 +20A0 +2110 +2208 +2404 +0802 +ENDCHAR +STARTCHAR uni3CC8 +ENCODING 15560 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +1040 +87FC +4040 +4950 +0950 +1150 +1150 +E152 +2252 +224E +2440 +2040 +0040 +ENDCHAR +STARTCHAR uni3CC9 +ENCODING 15561 +BBX 14 15 0 -2 +BITMAP +21FC +1104 +1104 +8104 +41FC +4904 +0904 +1104 +11FC +E104 +2104 +2204 +2204 +2414 +0808 +ENDCHAR +STARTCHAR uni3CCA +ENCODING 15562 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +1100 +11FE +8210 +4210 +4510 +1110 +1110 +20A0 +E0A0 +2040 +20A0 +2110 +2208 +0406 +ENDCHAR +STARTCHAR uni3CCB +ENCODING 15563 +BBX 15 15 0 -1 +BITMAP +0008 +203C +13C0 +1200 +8200 +4200 +4A00 +0BFC +1220 +1220 +E220 +2220 +2220 +2220 +2FFE +ENDCHAR +STARTCHAR uni3CCC +ENCODING 15564 +BBX 14 15 0 -2 +BITMAP +27FC +1444 +1444 +8444 +47FC +4444 +1444 +1444 +27FC +E444 +2040 +2040 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni3CCD +ENCODING 15565 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +17FE +8080 +40A0 +4920 +09FC +1324 +1524 +E124 +2124 +2134 +2128 +2020 +0020 +ENDCHAR +STARTCHAR uni3CCE +ENCODING 15566 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1080 +1110 +8208 +47FC +4004 +1110 +1110 +27FE +E110 +2110 +2210 +2210 +2410 +0810 +ENDCHAR +STARTCHAR uni3CCF +ENCODING 15567 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +17FC +8444 +4444 +4444 +1444 +17FC +2040 +E240 +2140 +2080 +2140 +2230 +0C0E +ENDCHAR +STARTCHAR uni3CD0 +ENCODING 15568 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +1110 +1110 +87D0 +4110 +4310 +1390 +1550 +2510 +E910 +2112 +2112 +2112 +210E +0100 +ENDCHAR +STARTCHAR uni3CD1 +ENCODING 15569 +BBX 15 14 0 -1 +BITMAP +2000 +13F8 +12A8 +82A8 +42A8 +4AA8 +0AA8 +12A8 +12A8 +E2A8 +22A8 +22A8 +2FFE +2000 +ENDCHAR +STARTCHAR uni3CD2 +ENCODING 15570 +BBX 14 15 1 -1 +BITMAP +4080 +2080 +1080 +0FFC +8120 +4120 +2210 +0288 +0484 +1080 +1080 +2110 +2110 +4268 +8F84 +ENDCHAR +STARTCHAR uni3CD3 +ENCODING 15571 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +1040 +87FE +4080 +4880 +0900 +13FC +1504 +E904 +2104 +2104 +2104 +21FC +0104 +ENDCHAR +STARTCHAR uni3CD4 +ENCODING 15572 +BBX 15 16 0 -2 +BITMAP +0004 +2004 +1784 +1084 +80BE +4484 +4284 +12A4 +1114 +2114 +E284 +2284 +2484 +2804 +2014 +0008 +ENDCHAR +STARTCHAR uni3CD5 +ENCODING 15573 +BBX 15 14 0 -1 +BITMAP +2108 +1088 +1090 +8000 +43FE +4800 +0800 +1000 +11FC +E000 +2000 +2000 +2000 +23FE +ENDCHAR +STARTCHAR uni3CD6 +ENCODING 15574 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +1040 +17FE +8080 +4080 +4940 +0944 +1348 +1530 +E920 +2110 +2108 +2144 +2182 +0100 +ENDCHAR +STARTCHAR uni3CD7 +ENCODING 15575 +BBX 15 14 0 -1 +BITMAP +23F8 +1108 +1150 +80A0 +4040 +41B0 +160E +1040 +2040 +E3F8 +2040 +2040 +2040 +27FC +ENDCHAR +STARTCHAR uni3CD8 +ENCODING 15576 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +1040 +17FE +8080 +4110 +4208 +17FC +1124 +2120 +E120 +2120 +2222 +2222 +241E +0800 +ENDCHAR +STARTCHAR uni3CD9 +ENCODING 15577 +BBX 15 16 0 -2 +BITMAP +0040 +2080 +1108 +1204 +87FE +4002 +4800 +0BFC +1204 +13FC +E204 +23FC +2204 +2204 +2214 +0208 +ENDCHAR +STARTCHAR uni3CDA +ENCODING 15578 +BBX 15 16 0 -2 +BITMAP +0028 +2024 +1024 +1020 +83FE +4220 +4A24 +0A24 +1324 +12A8 +E228 +2210 +2212 +242A +2446 +0882 +ENDCHAR +STARTCHAR uni3CDB +ENCODING 15579 +BBX 15 16 0 -2 +BITMAP +0040 +2140 +165C +1444 +8444 +475C +4444 +1444 +17FC +2444 +E0A0 +20A0 +2110 +2208 +2404 +0802 +ENDCHAR +STARTCHAR uni3CDC +ENCODING 15580 +BBX 15 16 0 -2 +BITMAP +0090 +2090 +1090 +1110 +81FE +4310 +4D10 +0938 +1138 +1154 +E154 +2192 +2110 +2110 +2110 +0110 +ENDCHAR +STARTCHAR uni3CDD +ENCODING 15581 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +111C +1270 +8210 +4610 +4A10 +1210 +12FE +2210 +E210 +2210 +2210 +2210 +227C +0200 +ENDCHAR +STARTCHAR uni3CDE +ENCODING 15582 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +1110 +1210 +82FE +4692 +5692 +1A92 +1292 +22FE +E292 +2210 +2210 +2210 +2210 +0210 +ENDCHAR +STARTCHAR uni3CDF +ENCODING 15583 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +3FF8 +0440 +0440 +FFFE +0820 +1110 +2928 +C546 +0380 +0540 +0920 +3110 +0500 +0200 +ENDCHAR +STARTCHAR uni3CE0 +ENCODING 15584 +BBX 15 15 0 -1 +BITMAP +0010 +2410 +1210 +1210 +80FE +4010 +4610 +1228 +1224 +2244 +E242 +2282 +2200 +2500 +28FE +ENDCHAR +STARTCHAR uni3CE1 +ENCODING 15585 +BBX 15 15 0 -1 +BITMAP +0408 +4208 +2208 +2008 +00FE +8E08 +4248 +5228 +1228 +2208 +E208 +2228 +2210 +2500 +28FE +ENDCHAR +STARTCHAR uni3CE2 +ENCODING 15586 +BBX 15 16 0 -2 +BITMAP +0010 +2078 +13C0 +1040 +8040 +47FE +48A0 +0910 +1208 +1516 +E110 +2110 +2110 +2210 +2210 +0410 +ENDCHAR +STARTCHAR uni3CE3 +ENCODING 15587 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +1044 +13F4 +8048 +4050 +47FE +1040 +1080 +2184 +E298 +24E0 +2882 +2082 +207E +ENDCHAR +STARTCHAR uni3CE4 +ENCODING 15588 +BBX 15 16 0 -2 +BITMAP +0110 +4910 +2510 +2510 +0110 +8FFE +4110 +5110 +1598 +2554 +E954 +2210 +2210 +2410 +2810 +1010 +ENDCHAR +STARTCHAR uni3CE5 +ENCODING 15589 +BBX 15 15 0 -2 +BITMAP +27FC +1040 +1040 +83F8 +4040 +4040 +17FC +1110 +2110 +EFFE +2110 +2110 +2210 +2210 +0410 +ENDCHAR +STARTCHAR uni3CE6 +ENCODING 15590 +BBX 15 16 0 -2 +BITMAP +0014 +4012 +2010 +2FFE +0010 +8290 +4292 +5292 +1FD2 +2294 +E294 +2288 +228A +249A +2426 +0842 +ENDCHAR +STARTCHAR uni3CE7 +ENCODING 15591 +BBX 15 15 0 -2 +BITMAP +2FFE +1480 +1490 +8490 +4790 +4490 +1490 +1490 +2790 +E490 +2492 +24D2 +2F92 +208E +0080 +ENDCHAR +STARTCHAR uni3CE8 +ENCODING 15592 +BBX 15 16 0 -2 +BITMAP +0124 +2124 +1248 +1248 +8124 +4124 +4000 +17FE +1080 +21FC +E104 +2288 +2450 +2020 +20C0 +0700 +ENDCHAR +STARTCHAR uni3CE9 +ENCODING 15593 +BBX 15 15 0 -2 +BITMAP +407C +2044 +2E44 +0464 +8454 +4454 +5444 +15FE +2444 +E744 +3C44 +2044 +2084 +2094 +0108 +ENDCHAR +STARTCHAR uni3CEA +ENCODING 15594 +BBX 14 15 0 -2 +BITMAP +27FC +1020 +1040 +80D0 +4148 +5244 +1444 +1040 +2000 +E3F8 +2208 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni3CEB +ENCODING 15595 +BBX 15 16 0 -2 +BITMAP +0100 +0108 +7D10 +05A0 +0960 +3118 +C506 +0200 +0C00 +3078 +2008 +3C78 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni3CEC +ENCODING 15596 +BBX 15 16 0 -2 +BITMAP +0100 +2100 +11FE +1200 +8400 +41FE +4822 +0824 +1120 +113C +E120 +2120 +2120 +22A0 +247E +0800 +ENDCHAR +STARTCHAR uni3CED +ENCODING 15597 +BBX 15 15 0 -2 +BITMAP +23F8 +1208 +1208 +8208 +43F8 +4040 +1040 +17FC +20E0 +E150 +2248 +2444 +2842 +2040 +0040 +ENDCHAR +STARTCHAR uni3CEE +ENCODING 15598 +BBX 15 15 0 -2 +BITMAP +23FC +1204 +1204 +83FC +4200 +4A20 +0A22 +13B2 +12B4 +E2A8 +22A8 +2524 +2524 +2AA2 +0040 +ENDCHAR +STARTCHAR uni3CEF +ENCODING 15599 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +1000 +8110 +40A0 +4FFE +1040 +1040 +2040 +E7FC +2040 +2040 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni3CF0 +ENCODING 15600 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +13FC +1040 +8090 +4108 +4BFC +0804 +1110 +1110 +E7FE +2110 +2110 +2110 +2210 +0410 +ENDCHAR +STARTCHAR uni3CF1 +ENCODING 15601 +BBX 14 15 0 -2 +BITMAP +2780 +14BC +1524 +8524 +4624 +4524 +14BC +14A4 +24A4 +E6A4 +2524 +243C +2424 +2400 +0400 +ENDCHAR +STARTCHAR uni3CF2 +ENCODING 15602 +BBX 15 16 0 -2 +BITMAP +0020 +4820 +2420 +2020 +0820 +85FE +4420 +5020 +1220 +2450 +EC50 +2450 +2488 +24C8 +2524 +0202 +ENDCHAR +STARTCHAR uni3CF3 +ENCODING 15603 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +17FC +8040 +4040 +4BF8 +0A08 +1208 +13F8 +E0A0 +20A0 +2122 +2122 +221E +0400 +ENDCHAR +STARTCHAR uni3CF4 +ENCODING 15604 +BBX 15 15 0 -1 +BITMAP +0040 +2028 +1088 +1290 +82A4 +42C2 +448A +1188 +1678 +2000 +E040 +27FC +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni3CF5 +ENCODING 15605 +BBX 15 16 0 -2 +BITMAP +0038 +23C0 +1040 +17FC +80E0 +4150 +5248 +1C46 +13F0 +2020 +E040 +27FC +2040 +2040 +2140 +0080 +ENDCHAR +STARTCHAR uni3CF6 +ENCODING 15606 +BBX 15 16 0 -2 +BITMAP +00E8 +4F08 +2228 +2928 +0548 +8008 +47C8 +5088 +1108 +2108 +E1E8 +2F08 +210A +210A +250A +0206 +ENDCHAR +STARTCHAR uni3CF7 +ENCODING 15607 +BBX 14 16 0 -2 +BITMAP +0100 +2100 +11FC +12A4 +84A4 +4124 +4A44 +0894 +1108 +1000 +E3FC +2204 +23FC +2204 +23FC +0204 +ENDCHAR +STARTCHAR uni3CF8 +ENCODING 15608 +BBX 15 16 0 -2 +BITMAP +0108 +2108 +17FE +1108 +8108 +4000 +4890 +0892 +1114 +1318 +E510 +2132 +2152 +2112 +210E +0100 +ENDCHAR +STARTCHAR uni3CF9 +ENCODING 15609 +BBX 15 16 0 -2 +BITMAP +0200 +4200 +22FE +2210 +0F90 +8210 +4610 +577C +1690 +2A90 +EA10 +3210 +2210 +22FE +2200 +0200 +ENDCHAR +STARTCHAR uni3CFA +ENCODING 15610 +BBX 15 16 0 -2 +BITMAP +0240 +4240 +227E +2280 +0F00 +8278 +4208 +5308 +1210 +26FE +EA10 +2210 +2210 +2210 +2A50 +0420 +ENDCHAR +STARTCHAR uni3CFB +ENCODING 15611 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +1110 +17FC +8110 +4110 +4FFE +1000 +13F8 +2208 +E208 +23F8 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni3CFC +ENCODING 15612 +BBX 15 16 0 -2 +BITMAP +0050 +0048 +FFFE +0040 +3E40 +2224 +3E28 +0012 +0E2A +70C6 +030A +7D90 +0960 +1120 +2518 +C206 +ENDCHAR +STARTCHAR uni3CFD +ENCODING 15613 +BBX 15 16 0 -2 +BITMAP +0020 +2720 +1120 +113E +8140 +4740 +4490 +1410 +1410 +2754 +E152 +2152 +2192 +2110 +2550 +0220 +ENDCHAR +STARTCHAR uni3CFE +ENCODING 15614 +BBX 15 16 0 -2 +BITMAP +0208 +2108 +1110 +17FC +8040 +4040 +43F8 +1040 +1080 +2FFE +E120 +2120 +2220 +2222 +2422 +081E +ENDCHAR +STARTCHAR uni3CFF +ENCODING 15615 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +13FC +1040 +8090 +4108 +4BFC +0844 +1040 +17FC +E0E0 +2150 +2248 +2C46 +2040 +0040 +ENDCHAR +STARTCHAR uni3D00 +ENCODING 15616 +BBX 15 16 0 -2 +BITMAP +0108 +2108 +17FE +1108 +8000 +403C +4BC0 +0820 +1010 +13FC +E008 +2010 +2060 +2180 +2240 +043E +ENDCHAR +STARTCHAR uni3D01 +ENCODING 15617 +BBX 15 15 0 -2 +BITMAP +23F8 +1040 +1040 +8FFE +4110 +4208 +1516 +13F8 +2110 +E110 +27FC +2110 +2110 +2210 +0410 +ENDCHAR +STARTCHAR uni3D02 +ENCODING 15618 +BBX 15 16 0 -2 +BITMAP +0020 +4020 +2020 +2EF8 +04A8 +84A8 +44F8 +54A8 +14A8 +24A8 +E5FE +2688 +3888 +2088 +20A8 +0090 +ENDCHAR +STARTCHAR uni3D03 +ENCODING 15619 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +13FE +1202 +8202 +43FE +4220 +1220 +13B2 +22B4 +E2A8 +24A8 +2524 +2924 +32A2 +0040 +ENDCHAR +STARTCHAR uni3D04 +ENCODING 15620 +BBX 15 15 0 -2 +BITMAP +27FE +1402 +1492 +848A +450A +4402 +1402 +14F2 +2492 +E492 +2492 +2492 +2492 +27FE +0402 +ENDCHAR +STARTCHAR uni3D05 +ENCODING 15621 +BBX 15 16 0 -2 +BITMAP +0100 +0108 +7D10 +05A0 +0960 +3118 +C506 +0200 +3FF8 +2448 +2828 +37D8 +2448 +27C8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni3D06 +ENCODING 15622 +BBX 15 15 0 -2 +BITMAP +23F8 +1008 +11F8 +8008 +43F8 +4000 +17FE +1442 +2844 +E3F8 +2248 +2248 +2248 +2258 +0040 +ENDCHAR +STARTCHAR uni3D07 +ENCODING 15623 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +1088 +D6EA +52AC +52A8 +5AA8 +56EC +52AA +52AA +94C8 +1088 +1088 +52A8 +2110 +ENDCHAR +STARTCHAR uni3D08 +ENCODING 15624 +BBX 15 16 0 -2 +BITMAP +0010 +2038 +13C0 +1200 +83FC +4220 +4220 +1220 +1FFE +2000 +E040 +2444 +2444 +2444 +27FC +0004 +ENDCHAR +STARTCHAR uni3D09 +ENCODING 15625 +BBX 15 15 0 -1 +BITMAP +0040 +2090 +1108 +13FC +8108 +4210 +44A4 +17BE +1082 +2000 +E3FC +2000 +2000 +2000 +27FE +ENDCHAR +STARTCHAR uni3D0A +ENCODING 15626 +BBX 14 16 0 -2 +BITMAP +0444 +2244 +1284 +1014 +87D4 +4114 +4554 +1554 +1554 +27D4 +E154 +2114 +2204 +2204 +2414 +0808 +ENDCHAR +STARTCHAR uni3D0B +ENCODING 15627 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +13F8 +1048 +87FE +4048 +4BF8 +0840 +1248 +1248 +E2E8 +2358 +2248 +2248 +2448 +0848 +ENDCHAR +STARTCHAR uni3D0C +ENCODING 15628 +BBX 15 16 0 -2 +BITMAP +0210 +4210 +2210 +2210 +0F7E +8510 +4510 +5510 +157C +2944 +E544 +2244 +2244 +2544 +257C +0844 +ENDCHAR +STARTCHAR uni3D0D +ENCODING 15629 +BBX 15 16 0 -2 +BITMAP +03F0 +4010 +2020 +2044 +0E58 +83F0 +4250 +5248 +15E8 +2448 +E444 +2BF4 +3042 +2040 +2140 +0080 +ENDCHAR +STARTCHAR uni3D0E +ENCODING 15630 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +10A0 +8110 +4208 +45F6 +1000 +1000 +27FC +E040 +2248 +2244 +2444 +2140 +0080 +ENDCHAR +STARTCHAR uni3D0F +ENCODING 15631 +BBX 14 15 0 -1 +BITMAP +0080 +2040 +17FC +1404 +8110 +4208 +4404 +13F8 +1040 +2040 +E3F8 +2040 +2040 +2040 +27FC +ENDCHAR +STARTCHAR uni3D10 +ENCODING 15632 +BBX 15 15 0 -2 +BITMAP +40FE +2F10 +2910 +0950 +895E +4F52 +4952 +1952 +2F7E +E902 +2902 +2902 +2F02 +2914 +0008 +ENDCHAR +STARTCHAR uni3D11 +ENCODING 15633 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0904 +8884 +4888 +2FFE +0820 +0924 +1924 +1924 +29FC +2820 +5040 +8180 +ENDCHAR +STARTCHAR uni3D12 +ENCODING 15634 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FE +1090 +8298 +4494 +4114 +1230 +1400 +2110 +E110 +2FFE +2110 +2110 +2210 +0410 +ENDCHAR +STARTCHAR uni3D13 +ENCODING 15635 +BBX 15 14 0 -1 +BITMAP +23FC +1244 +1244 +83FC +4244 +4A44 +0BFC +1000 +1040 +E024 +2522 +250A +2908 +20F8 +ENDCHAR +STARTCHAR uni3D14 +ENCODING 15636 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +11F8 +1208 +8410 +43FC +4804 +09FC +1004 +13FC +E004 +2040 +2124 +252A +250A +08F8 +ENDCHAR +STARTCHAR uni3D15 +ENCODING 15637 +BBX 15 16 0 -2 +BITMAP +0108 +2108 +17FE +1108 +8000 +4038 +4BC0 +0840 +1040 +17FC +E0E0 +2150 +2248 +2444 +2842 +0040 +ENDCHAR +STARTCHAR uni3D16 +ENCODING 15638 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +17FC +1110 +81F0 +4040 +43F8 +1248 +1248 +23F8 +E040 +2FFE +2040 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni3D17 +ENCODING 15639 +BBX 15 15 0 -2 +BITMAP +23FE +1050 +1050 +83FE +4252 +4A52 +0BFE +1000 +1040 +E7FE +2088 +2190 +2060 +20D8 +0304 +ENDCHAR +STARTCHAR uni3D18 +ENCODING 15640 +BBX 15 15 0 -2 +BITMAP +27FE +1402 +15FA +8402 +45FA +4402 +1000 +13FC +2204 +E3FC +2204 +23FC +2204 +23FC +0204 +ENDCHAR +STARTCHAR uni3D19 +ENCODING 15641 +BBX 15 16 0 -2 +BITMAP +0008 +203C +17C0 +1040 +8040 +4FFE +4040 +1140 +165C +2444 +E444 +275C +2444 +2444 +27FC +0404 +ENDCHAR +STARTCHAR uni3D1A +ENCODING 15642 +BBX 15 16 0 -2 +BITMAP +0208 +2110 +1000 +17FE +8080 +4184 +4244 +14A8 +1130 +2270 +E4A8 +2128 +2224 +2C22 +20A0 +0040 +ENDCHAR +STARTCHAR uni3D1B +ENCODING 15643 +BBX 15 16 0 -2 +BITMAP +0008 +2008 +17C8 +1210 +821E +44A4 +47D4 +1114 +1114 +27D4 +E114 +2108 +21C8 +2E14 +2414 +0022 +ENDCHAR +STARTCHAR uni3D1C +ENCODING 15644 +BBX 14 16 0 -2 +BITMAP +0080 +2040 +17FC +1404 +8404 +47FC +4400 +1400 +17FC +26A4 +EAA4 +2BFC +2AA4 +2AA4 +32A4 +020C +ENDCHAR +STARTCHAR uni3D1D +ENCODING 15645 +BBX 15 16 0 -2 +BITMAP +0604 +7844 +0844 +FF44 +1C44 +2A44 +C914 +0A88 +0C60 +3118 +C926 +0540 +0920 +1110 +2508 +0200 +ENDCHAR +STARTCHAR uni3D1E +ENCODING 15646 +BBX 14 15 1 -1 +BITMAP +4038 +27C0 +1000 +0484 +8244 +4248 +2000 +04FC +0484 +1484 +14FC +2484 +2484 +4484 +84FC +ENDCHAR +STARTCHAR uni3D1F +ENCODING 15647 +BBX 15 15 0 -2 +BITMAP +23FE +1200 +12FC +8284 +42FC +4A84 +0AFC +1200 +12FC +E208 +2210 +23FE +2410 +2450 +0820 +ENDCHAR +STARTCHAR uni3D20 +ENCODING 15648 +BBX 15 15 0 -2 +BITMAP +8FF8 +4010 +0020 +8040 +577A +554A +156A +3552 +5552 +D76A +504A +5142 +5082 +5FFE +0002 +ENDCHAR +STARTCHAR uni3D21 +ENCODING 15649 +BBX 15 16 0 -2 +BITMAP +0038 +23C0 +1040 +1040 +87FC +4150 +5248 +1446 +13F8 +2208 +E208 +23F8 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni3D22 +ENCODING 15650 +BBX 14 16 0 -2 +BITMAP +0090 +9090 +4890 +0190 +917C +4954 +4954 +0354 +2554 +497C +D954 +4910 +4910 +4910 +4910 +0110 +ENDCHAR +STARTCHAR uni3D23 +ENCODING 15651 +BBX 15 16 0 -2 +BITMAP +0020 +9020 +4BFE +0020 +91FC +4824 +49FC +0120 +25FE +4822 +D82A +4854 +4850 +4888 +4904 +0202 +ENDCHAR +STARTCHAR uni3D24 +ENCODING 15652 +BBX 15 16 0 -2 +BITMAP +0210 +4208 +2200 +227E +0F90 +8210 +4210 +5710 +16FC +2A10 +EA10 +2210 +2210 +22FE +2200 +0200 +ENDCHAR +STARTCHAR uni3D25 +ENCODING 15653 +BBX 14 16 0 -2 +BITMAP +0410 +8410 +4454 +0438 +9510 +557C +5544 +1544 +357C +5544 +D544 +577C +5944 +4044 +4054 +0048 +ENDCHAR +STARTCHAR uni3D26 +ENCODING 15654 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +17FE +1402 +8000 +41F8 +4908 +0908 +11F8 +1000 +E3FC +2204 +2204 +2204 +23FC +0204 +ENDCHAR +STARTCHAR uni3D27 +ENCODING 15655 +BBX 15 15 0 -1 +BITMAP +0040 +2080 +13FC +1204 +83FC +4204 +43FC +1204 +13FC +2000 +E040 +2024 +2522 +250A +28F8 +ENDCHAR +STARTCHAR uni3D28 +ENCODING 15656 +BBX 15 16 0 -2 +BITMAP +0044 +2724 +1528 +1500 +857C +4710 +4510 +1510 +15FE +2710 +E510 +2528 +2528 +2544 +2B44 +0082 +ENDCHAR +STARTCHAR uni3D29 +ENCODING 15657 +BBX 15 15 0 -1 +BITMAP +0124 +2248 +1248 +1124 +83F8 +4208 +4BF8 +0800 +13F8 +1248 +E248 +23F8 +2202 +2202 +21FE +ENDCHAR +STARTCHAR uni3D2A +ENCODING 15658 +BBX 15 16 0 -2 +BITMAP +0040 +2080 +13F8 +1208 +83F8 +4208 +4BF8 +0A08 +13F8 +1040 +E7FE +20E0 +2150 +2248 +2446 +0040 +ENDCHAR +STARTCHAR uni3D2B +ENCODING 15659 +BBX 15 16 0 -2 +BITMAP +4000 +2FDE +2252 +8252 +5FF4 +4254 +0258 +2FD4 +2412 +47D2 +CC52 +4C5A +5454 +67D0 +4450 +0010 +ENDCHAR +STARTCHAR uni3D2C +ENCODING 15660 +BBX 15 16 0 -2 +BITMAP +0108 +2208 +1788 +1488 +87BE +4488 +4788 +14C8 +14A8 +2FA8 +E188 +2288 +2488 +2888 +22A8 +0110 +ENDCHAR +STARTCHAR uni3D2D +ENCODING 15661 +BBX 14 16 0 -2 +BITMAP +0080 +2040 +17FC +1404 +80A0 +4110 +4A08 +0800 +13F8 +1208 +E3F8 +2208 +23F8 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni3D2E +ENCODING 15662 +BBX 14 15 0 -2 +BITMAP +27FC +1404 +1404 +87FC +4420 +4524 +14A8 +15FC +2504 +E5FC +2504 +25FC +2904 +2914 +1108 +ENDCHAR +STARTCHAR uni3D2F +ENCODING 15663 +BBX 15 16 0 -2 +BITMAP +0020 +27A4 +14A8 +14B0 +84A2 +47A2 +449E +1480 +14BE +27A2 +E4A2 +24BE +24A2 +28A2 +2ABE +1122 +ENDCHAR +STARTCHAR uni3D30 +ENCODING 15664 +BBX 15 16 0 -2 +BITMAP +0110 +2212 +1454 +17D8 +8010 +4012 +47D2 +144E +1440 +27D2 +E454 +2458 +27D0 +2452 +2552 +048E +ENDCHAR +STARTCHAR uni3D31 +ENCODING 15665 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +1404 +80A0 +4110 +4248 +1040 +17FC +2040 +E444 +22A8 +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni3D32 +ENCODING 15666 +BBX 15 16 0 -2 +BITMAP +0004 +203E +17E0 +143E +8420 +45FE +4522 +1538 +15E2 +251E +E500 +2978 +2A48 +324A +248A +0906 +ENDCHAR +STARTCHAR uni3D33 +ENCODING 15667 +BBX 15 16 0 -2 +BITMAP +0448 +4444 +2440 +24FE +0450 +9F54 +4458 +5452 +1454 +2458 +E452 +2754 +3C9A +2092 +212E +0240 +ENDCHAR +STARTCHAR uni3D34 +ENCODING 15668 +BBX 15 15 0 -1 +BITMAP +0020 +24A4 +14A8 +1520 +8450 +4488 +4504 +17FE +1420 +24A4 +E528 +2450 +2488 +2504 +27FE +ENDCHAR +STARTCHAR uni3D35 +ENCODING 15669 +BBX 15 15 0 -1 +BITMAP +0040 +2028 +1090 +12A4 +82C2 +448A +4188 +1678 +1000 +23FC +E294 +2294 +2294 +2294 +2FFE +ENDCHAR +STARTCHAR uni3D36 +ENCODING 15670 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +17FE +1522 +8110 +43FC +5620 +1A20 +13FC +2220 +E220 +23FC +2220 +2220 +23FE +0200 +ENDCHAR +STARTCHAR uni3D37 +ENCODING 15671 +BBX 15 16 0 -2 +BITMAP +0010 +4F90 +2510 +2510 +077C +8554 +4754 +5510 +1510 +25A8 +E728 +2D28 +214A +214A +2186 +0100 +ENDCHAR +STARTCHAR uni3D38 +ENCODING 15672 +BBX 14 15 0 -2 +BITMAP +27BC +14A4 +17BC +84A4 +47BC +4404 +1444 +1444 +2444 +E4A4 +2494 +2514 +2404 +2414 +0408 +ENDCHAR +STARTCHAR uni3D39 +ENCODING 15673 +BBX 15 15 0 -1 +BITMAP +0010 +2092 +1452 +1254 +8210 +40FE +4010 +1638 +1254 +2292 +E310 +2210 +2210 +2500 +28FE +ENDCHAR +STARTCHAR uni3D3A +ENCODING 15674 +BBX 15 16 0 -2 +BITMAP +0020 +8820 +4420 +05FC +9020 +48A8 +48A8 +04A8 +2574 +4A22 +D850 +4850 +4888 +4888 +4904 +0202 +ENDCHAR +STARTCHAR uni3D3B +ENCODING 15675 +BBX 15 16 0 -2 +BITMAP +0004 +4FC4 +2004 +2004 +07BE +8484 +4484 +54A4 +1794 +2014 +E884 +2484 +2504 +21C4 +2E14 +0008 +ENDCHAR +STARTCHAR uni3D3C +ENCODING 15676 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +17FE +1402 +8100 +41FE +4210 +1620 +1A7C +2244 +E244 +227C +2244 +2244 +227C +0244 +ENDCHAR +STARTCHAR uni3D3D +ENCODING 15677 +BBX 15 15 0 -1 +BITMAP +0008 +403C +27C0 +2040 +0248 +8150 +4FFE +5150 +1248 +2C46 +E080 +2044 +2A42 +2A12 +31F0 +ENDCHAR +STARTCHAR uni3D3E +ENCODING 15678 +BBX 15 16 0 -2 +BITMAP +0108 +4108 +2FC8 +2110 +011E +8FD4 +4864 +4014 +1794 +2094 +E114 +21C8 +2F08 +2114 +2524 +0242 +ENDCHAR +STARTCHAR uni3D3F +ENCODING 15679 +BBX 15 15 0 -2 +BITMAP +407E +2F90 +2220 +027C +8244 +4244 +527C +1244 +227C +E244 +2244 +227C +2A00 +2428 +0044 +ENDCHAR +STARTCHAR uni3D40 +ENCODING 15680 +BBX 15 16 0 -2 +BITMAP +0420 +4220 +223E +2F40 +04A0 +8420 +473C +5550 +1510 +2510 +E5FE +2510 +2528 +2928 +2B44 +1082 +ENDCHAR +STARTCHAR uni3D41 +ENCODING 15681 +BBX 15 16 0 -2 +BITMAP +0108 +2108 +17FE +1148 +8020 +47FE +4880 +0908 +13FC +1004 +E150 +2150 +2150 +2252 +2252 +044E +ENDCHAR +STARTCHAR uni3D42 +ENCODING 15682 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +13FE +1200 +8248 +4248 +4BFE +0A48 +1248 +1248 +E278 +2200 +2554 +252A +2A2A +1000 +ENDCHAR +STARTCHAR uni3D43 +ENCODING 15683 +BBX 15 15 0 -1 +BITMAP +0410 +8408 +4408 +1F7E +9542 +5542 +5520 +1524 +3F28 +4430 +C420 +4522 +47A2 +5CA2 +481E +ENDCHAR +STARTCHAR uni3D44 +ENCODING 15684 +BBX 15 16 0 -2 +BITMAP +0014 +2012 +1012 +17FE +8010 +43D0 +4A50 +0BD4 +1014 +17D4 +E114 +27F8 +210A +228A +2456 +0822 +ENDCHAR +STARTCHAR uni3D45 +ENCODING 15685 +BBX 15 16 0 -2 +BITMAP +0040 +20A0 +1110 +1248 +8DF6 +4020 +4840 +0BF8 +1208 +13F8 +E208 +23F8 +2208 +23F8 +2110 +0208 +ENDCHAR +STARTCHAR uni3D46 +ENCODING 15686 +BBX 15 16 0 -2 +BITMAP +0008 +4028 +2F28 +293E +0928 +8948 +4908 +4F7E +1900 +2900 +E93E +2922 +2F22 +2922 +203E +0022 +ENDCHAR +STARTCHAR uni3D47 +ENCODING 15687 +BBX 15 16 0 -2 +BITMAP +01A4 +4E24 +2224 +2224 +027E +8FA4 +4224 +5224 +1224 +2FBC +E8A4 +28A4 +28A4 +2FA4 +28BC +0024 +ENDCHAR +STARTCHAR uni3D48 +ENCODING 15688 +BBX 15 16 0 -2 +BITMAP +0088 +9088 +4888 +0088 +93DE +4948 +4948 +0148 +255E +4A52 +D952 +4892 +4892 +495E +4952 +0200 +ENDCHAR +STARTCHAR uni3D49 +ENCODING 15689 +BBX 15 16 0 -2 +BITMAP +0088 +9088 +4888 +0088 +93DE +4888 +4888 +019C +25DC +4AAA +DAAA +4CC8 +4888 +4888 +4888 +0088 +ENDCHAR +STARTCHAR uni3D4A +ENCODING 15690 +BBX 15 15 0 -2 +BITMAP +23F8 +1208 +13F8 +8208 +43F8 +5000 +1FFE +1480 +27BC +E494 +2794 +24D4 +2F88 +2094 +00A2 +ENDCHAR +STARTCHAR uni3D4B +ENCODING 15691 +BBX 14 15 0 -2 +BITMAP +27FC +14A4 +14A4 +87FC +4000 +4BF8 +0A08 +13F8 +1208 +E3F8 +2208 +23F8 +2110 +2208 +0404 +ENDCHAR +STARTCHAR uni3D4C +ENCODING 15692 +BBX 15 16 0 -2 +BITMAP +0408 +841C +49F0 +1110 +A510 +45FE +4910 +197C +2944 +497C +C944 +497C +4944 +4A44 +4A7C +0C44 +ENDCHAR +STARTCHAR uni3D4D +ENCODING 15693 +BBX 15 15 0 -2 +BITMAP +279E +1492 +179E +8492 +479E +4442 +1422 +140A +2546 +E542 +2552 +2632 +2402 +240A +0404 +ENDCHAR +STARTCHAR uni3D4E +ENCODING 15694 +BBX 15 16 0 -2 +BITMAP +079E +2492 +179E +1492 +879E +4402 +44F2 +1492 +14F2 +2492 +E4F2 +2492 +2492 +2532 +2402 +0406 +ENDCHAR +STARTCHAR uni3D4F +ENCODING 15695 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +17FC +1110 +8040 +47FC +4110 +1110 +12A8 +2444 +E040 +2FFE +2040 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni3D50 +ENCODING 15696 +BBX 15 16 0 -2 +BITMAP +4000 +2FFE +2800 +8A28 +4948 +4BEE +0892 +2884 +2AA0 +4AA8 +CBE8 +4888 +4894 +4914 +4924 +1242 +ENDCHAR +STARTCHAR uni3D51 +ENCODING 15697 +BBX 14 16 0 -2 +BITMAP +0200 +4200 +27BC +22A4 +04A4 +85BC +4800 +53F8 +1208 +23F8 +E208 +23F8 +2208 +23F8 +2110 +0208 +ENDCHAR +STARTCHAR uni3D52 +ENCODING 15698 +BBX 15 16 0 -2 +BITMAP +0090 +27FC +1094 +13FC +8290 +43FE +4912 +0BFA +150E +11F8 +E108 +21F8 +2108 +21F8 +2090 +0108 +ENDCHAR +STARTCHAR uni3D53 +ENCODING 15699 +BBX 15 16 0 -2 +BITMAP +0080 +4040 +2FFE +2802 +03F8 +8208 +43F8 +5208 +13F8 +2000 +EFFC +2240 +227C +2540 +24FE +0800 +ENDCHAR +STARTCHAR uni3D54 +ENCODING 15700 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +1110 +8248 +4446 +43F8 +1050 +17FC +2080 +E3F8 +2D08 +21F8 +2108 +21F8 +0108 +ENDCHAR +STARTCHAR uni3D55 +ENCODING 15701 +BBX 15 16 0 -2 +BITMAP +0080 +2110 +13F8 +1210 +84A4 +47BC +4040 +10A0 +1358 +2C46 +E048 +2264 +2252 +2452 +2140 +0080 +ENDCHAR +STARTCHAR uni3D56 +ENCODING 15702 +BBX 15 16 0 -2 +BITMAP +0100 +2100 +17DE +1252 +8692 +4112 +429E +14C0 +1110 +23E0 +E048 +27FC +2254 +2448 +2944 +0080 +ENDCHAR +STARTCHAR uni3D57 +ENCODING 15703 +BBX 15 16 0 -2 +BITMAP +43FC +2240 +0BF8 +0A40 +13F8 +2240 +E3FC +2004 +2554 +2008 +0108 +7D90 +0960 +1120 +2518 +C206 +ENDCHAR +STARTCHAR uni3D58 +ENCODING 15704 +BBX 15 16 0 -2 +BITMAP +0810 +0A14 +6AD4 +2C58 +2A54 +4A94 +A950 +1020 +0810 +0A14 +6AD4 +2C58 +2A54 +4A94 +A952 +1020 +ENDCHAR +STARTCHAR uni3D59 +ENCODING 15705 +BBX 15 16 0 -2 +BITMAP +0040 +27FC +1040 +13F8 +8000 +43F8 +4208 +13F8 +1110 +2FFE +E000 +23F8 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni3D5A +ENCODING 15706 +BBX 15 15 0 -1 +BITMAP +0110 +2208 +1414 +11A0 +8060 +4198 +4644 +10A0 +1318 +2DF6 +E040 +27FC +2248 +2150 +2FFE +ENDCHAR +STARTCHAR uni3D5B +ENCODING 15707 +BBX 15 16 0 -2 +BITMAP +0110 +20A0 +17FC +1040 +83F8 +4040 +47FC +1248 +1150 +2FFE +E000 +23F8 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni3D5C +ENCODING 15708 +BBX 15 16 0 -2 +BITMAP +0010 +2410 +12FE +1210 +8010 +48FE +4482 +14AA +1192 +22BA +EE92 +22FE +2292 +2292 +228A +0084 +ENDCHAR +STARTCHAR uni3D5D +ENCODING 15709 +BBX 15 16 0 -2 +BITMAP +0080 +8040 +5FFE +0148 +8230 +4690 +5B08 +0206 +27FC +4524 +C614 +45EC +4524 +45E4 +4414 +0408 +ENDCHAR +STARTCHAR uni3D5E +ENCODING 15710 +BBX 15 16 0 -2 +BITMAP +00C8 +4708 +212A +212C +0FC8 +8108 +4388 +5554 +1914 +2122 +E040 +2024 +2522 +250A +2908 +00F8 +ENDCHAR +STARTCHAR uni3D5F +ENCODING 15711 +BBX 15 16 0 -2 +BITMAP +0288 +42A8 +26A8 +2BF0 +001E +8224 +45D4 +5C14 +1414 +25D4 +E554 +2548 +2568 +2554 +2614 +0422 +ENDCHAR +STARTCHAR uni3D60 +ENCODING 15712 +BBX 15 16 0 -2 +BITMAP +0040 +47FE +2402 +2914 +0208 +87FC +4404 +57FC +1420 +2524 +E524 +25FC +2420 +2924 +2924 +11FC +ENDCHAR +STARTCHAR uni3D61 +ENCODING 15713 +BBX 15 16 0 -2 +BITMAP +03F8 +2040 +17FC +1444 +8358 +4040 +4358 +1200 +13F8 +2408 +EBC8 +2248 +23E8 +2212 +2202 +01FE +ENDCHAR +STARTCHAR uni3D62 +ENCODING 15714 +BBX 15 15 0 -2 +BITMAP +47FC +2040 +2FFE +0842 +8358 +4040 +5358 +1000 +27FC +E444 +2444 +27FC +2444 +2444 +07FC +ENDCHAR +STARTCHAR uni3D63 +ENCODING 15715 +BBX 15 16 0 -2 +BITMAP +0010 +9F10 +5110 +1F3E +9122 +5F44 +4810 +1F90 +2490 +5490 +DAA8 +50A8 +5EA8 +40C4 +4544 +0282 +ENDCHAR +STARTCHAR uni3D64 +ENCODING 15716 +BBX 15 15 1 -1 +BITMAP +4000 +2FBE +128A +0DB6 +828A +4CB2 +2040 +07FC +0248 +1248 +1554 +28A2 +2110 +4208 +8C06 +ENDCHAR +STARTCHAR uni3D65 +ENCODING 15717 +BBX 15 15 0 -1 +BITMAP +0080 +2040 +17FC +1484 +8050 +4528 +5554 +1994 +16F0 +2000 +E3F8 +22A8 +22A8 +22A8 +2FFE +ENDCHAR +STARTCHAR uni3D66 +ENCODING 15718 +BBX 15 16 0 -2 +BITMAP +0020 +21FE +1440 +12FC +8110 +42FE +4000 +16FC +1284 +22FC +E284 +22FC +2284 +228C +2500 +08FE +ENDCHAR +STARTCHAR uni3D67 +ENCODING 15719 +BBX 15 16 0 -2 +BITMAP +0110 +27FE +1110 +13F8 +8208 +43F8 +4A08 +0BF8 +1100 +13FC +E444 +2AA4 +2204 +23F4 +2014 +0008 +ENDCHAR +STARTCHAR uni3D68 +ENCODING 15720 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FC +4488 +7C50 +43FE +7C20 +A5FC +2420 +3C20 +0108 +7D90 +0960 +1120 +2518 +C206 +ENDCHAR +STARTCHAR uni3D69 +ENCODING 15721 +BBX 15 16 0 -2 +BITMAP +0108 +27FE +1108 +1000 +8488 +4FFE +4488 +14F8 +1400 +27FC +E040 +2FFE +2150 +2248 +2C46 +0040 +ENDCHAR +STARTCHAR uni3D6A +ENCODING 15722 +BBX 15 16 0 -2 +BITMAP +0208 +2110 +17FC +1040 +83F8 +4040 +47FC +1000 +1440 +227C +E084 +2228 +2C20 +2450 +2488 +0106 +ENDCHAR +STARTCHAR uni3D6B +ENCODING 15723 +BBX 15 16 0 -2 +BITMAP +01F8 +2010 +17FE +10A0 +8040 +47BC +4084 +11CE +1738 +2108 +E318 +27FC +2404 +27FC +2404 +07FC +ENDCHAR +STARTCHAR uni3D6C +ENCODING 15724 +BBX 15 15 0 -2 +BITMAP +9DF8 +5488 +1490 +14FC +1D54 +9524 +5554 +1688 +1C00 +15FC +5554 +9554 +2554 +27FE +4C00 +ENDCHAR +STARTCHAR uni3D6D +ENCODING 15725 +BBX 15 15 0 -1 +BITMAP +0040 +2044 +13F8 +1050 +87FE +4040 +51FC +1704 +11FC +2104 +E1FC +2000 +2524 +2492 +2892 +ENDCHAR +STARTCHAR uni3D6E +ENCODING 15726 +BBX 15 16 0 -2 +BITMAP +0040 +27FC +10A0 +1318 +8D16 +43F8 +4110 +11F0 +1040 +23F8 +E248 +23F8 +2040 +27FC +2040 +0040 +ENDCHAR +STARTCHAR uni3D6F +ENCODING 15727 +BBX 15 16 0 -2 +BITMAP +4000 +2FF8 +2808 +8BE8 +4908 +4BE8 +0A28 +2BE8 +2A28 +4BE8 +CA08 +4BFA +4A0A +53FA +5556 +2032 +ENDCHAR +STARTCHAR uni3D70 +ENCODING 15728 +BBX 15 16 0 -2 +BITMAP +0140 +224C +1264 +1244 +834C +4264 +4AA4 +0BAC +12A4 +12A4 +E7FE +2000 +2110 +2108 +2204 +0404 +ENDCHAR +STARTCHAR uni3D71 +ENCODING 15729 +BBX 15 16 0 -2 +BITMAP +0004 +4FE4 +2284 +2FE4 +0ABE +8AA4 +4FE4 +5004 +17D4 +200C +EFEC +2104 +2544 +2524 +2924 +030C +ENDCHAR +STARTCHAR uni3D72 +ENCODING 15730 +BBX 15 16 0 -2 +BITMAP +0100 +4200 +27FC +2AA8 +02A8 +8FFE +42A8 +52A8 +1FFE +2208 +E3BE +2488 +2AA8 +213E +2208 +0C08 +ENDCHAR +STARTCHAR uni3D73 +ENCODING 15731 +BBX 15 16 0 -2 +BITMAP +0040 +4FFE +2802 +27BC +04A4 +8294 +44E4 +50A0 +1318 +2C46 +E090 +2320 +20C8 +2310 +2060 +0380 +ENDCHAR +STARTCHAR uni3D74 +ENCODING 15732 +BBX 15 16 0 -2 +BITMAP +000C +800A +57FE +1408 +95E8 +5D48 +454A +05EA +3D2A +552C +D5EC +554C +654A +49EA +4816 +1022 +ENDCHAR +STARTCHAR uni3D75 +ENCODING 15733 +BBX 15 16 0 -2 +BITMAP +07E0 +225C +13C4 +1254 +83C8 +4268 +47D4 +1064 +103C +27C0 +E144 +2268 +20D0 +2148 +2646 +0040 +ENDCHAR +STARTCHAR uni3D76 +ENCODING 15734 +BBX 15 16 0 -2 +BITMAP +0110 +4114 +27D2 +2110 +0FFE +8290 +4450 +5FF4 +1494 +27F4 +E494 +27E8 +248A +27FA +2426 +0042 +ENDCHAR +STARTCHAR uni3D77 +ENCODING 15735 +BBX 15 16 0 -2 +BITMAP +2010 +1108 +1088 +7CBE +0200 +2914 +1108 +FC3E +1088 +1088 +7D1C +1308 +1108 +2108 +2108 +4008 +ENDCHAR +STARTCHAR uni3D78 +ENCODING 15736 +BBX 15 16 0 -2 +BITMAP +0040 +20A0 +1110 +1208 +85F4 +4802 +43B8 +12A8 +13B8 +2000 +E7FC +24A4 +27FC +24A4 +24A4 +040C +ENDCHAR +STARTCHAR uni3D79 +ENCODING 15737 +BBX 15 16 0 -2 +BITMAP +0428 +8428 +44FE +0428 +9500 +557C +5544 +157C +3544 +557C +D510 +577E +5910 +4028 +4044 +0082 +ENDCHAR +STARTCHAR uni3D7A +ENCODING 15738 +BBX 15 16 0 -2 +BITMAP +0210 +2210 +17DE +1528 +88C4 +4080 +4BFC +0A24 +13FC +1244 +E3FC +2120 +2220 +27FE +2020 +0020 +ENDCHAR +STARTCHAR uni3D7B +ENCODING 15739 +BBX 15 16 0 -2 +BITMAP +4050 +2E96 +2A92 +8A92 +4AD6 +4E92 +0A92 +2AFE +2A10 +4EFC +CA44 +4A44 +4A28 +5210 +5228 +26C6 +ENDCHAR +STARTCHAR uni3D7C +ENCODING 15740 +BBX 14 15 0 -2 +BITMAP +27FC +1404 +1080 +8338 +4208 +43B8 +1208 +13F8 +2200 +E7FC +2804 +2554 +2554 +2828 +0010 +ENDCHAR +STARTCHAR uni3D7D +ENCODING 15741 +BBX 15 16 0 -2 +BITMAP +03F8 +2248 +1248 +13F8 +8248 +4248 +43F8 +1000 +1FBE +2AAA +EAAA +2FBE +2AAA +2AAA +2FBE +08A2 +ENDCHAR +STARTCHAR uni3D7E +ENCODING 15742 +BBX 15 16 0 -2 +BITMAP +0200 +823C +5FA4 +0224 +8FBC +4224 +5FE4 +003C +2FA4 +48A4 +CFBC +4890 +4F98 +48A8 +48AA +09C6 +ENDCHAR +STARTCHAR uni3D7F +ENCODING 15743 +BBX 15 16 0 -2 +BITMAP +0080 +2100 +13F8 +1208 +83F8 +4208 +43F8 +1208 +1410 +2FBE +E8A2 +28A2 +2FBE +28A2 +28A2 +0FBE +ENDCHAR +STARTCHAR uni3D80 +ENCODING 15744 +BBX 15 15 0 -2 +BITMAP +4EEE +2A22 +2AAA +0A66 +8EAA +4A10 +4A28 +1A44 +2F92 +EA20 +2AC8 +2A32 +2AC4 +2A18 +16E0 +ENDCHAR +STARTCHAR uni3D81 +ENCODING 15745 +BBX 15 16 0 -2 +BITMAP +0390 +9C10 +411E +1510 +8A7E +4852 +425C +0270 +3F52 +424E +D240 +4A5C +4254 +4A54 +4496 +0122 +ENDCHAR +STARTCHAR uni3D82 +ENCODING 15746 +BBX 15 16 0 -2 +BITMAP +0088 +9088 +49FC +0088 +9088 +4BFE +4820 +01FC +2524 +49FC +D924 +49FC +4800 +4888 +4904 +0202 +ENDCHAR +STARTCHAR uni3D83 +ENCODING 15747 +BBX 15 15 0 -1 +BITMAP +0080 +9080 +49FE +0354 +9154 +4954 +4BFE +0154 +2554 +4954 +DBFE +4800 +4954 +492A +4A2A +ENDCHAR +STARTCHAR uni3D84 +ENCODING 15748 +BBX 14 16 0 -2 +BITMAP +07BC +24A4 +17BC +14A4 +87BC +4484 +44F4 +1514 +1624 +25B4 +E514 +25B4 +2514 +25F4 +2414 +0408 +ENDCHAR +STARTCHAR uni3D85 +ENCODING 15749 +BBX 15 16 0 -2 +BITMAP +42A0 +244C +24A4 +860C +44A4 +464C +04A4 +2FFE +2802 +43F0 +C020 +4040 +47FC +4040 +4140 +0080 +ENDCHAR +STARTCHAR uni3D86 +ENCODING 15750 +BBX 15 16 0 -2 +BITMAP +0410 +4210 +227A +2F12 +0014 +8F7E +4008 +4F10 +103C +2F64 +E9A4 +293C +2924 +2F24 +293C +0024 +ENDCHAR +STARTCHAR uni3D87 +ENCODING 15751 +BBX 15 16 0 -2 +BITMAP +4228 +2228 +227C +8228 +4F28 +42FE +0610 +277C +2AD4 +4A7C +D254 +427C +4200 +4228 +4244 +0282 +ENDCHAR +STARTCHAR uni3D88 +ENCODING 15752 +BBX 15 16 0 -2 +BITMAP +0110 +4554 +25B8 +2910 +02A8 +8444 +4FFE +4842 +1040 +23F8 +E248 +2248 +23F8 +2044 +27FC +0004 +ENDCHAR +STARTCHAR uni3D89 +ENCODING 15753 +BBX 15 16 0 -2 +BITMAP +0308 +BC10 +44BE +1122 +8432 +492A +5E22 +0426 +2920 +5F3E +C402 +5F02 +447A +4A02 +510A +2084 +ENDCHAR +STARTCHAR uni3D8A +ENCODING 15754 +BBX 15 15 0 -2 +BITMAP +4FBE +2A08 +2A10 +0A3E +8FA2 +48A2 +48BE +18A2 +2FBE +EA22 +2A22 +2A3E +2A00 +2F94 +0022 +ENDCHAR +STARTCHAR uni3D8B +ENCODING 15755 +BBX 15 16 0 -2 +BITMAP +0508 +5548 +2DA8 +253E +0FA8 +8248 +4448 +4ABE +1308 +2588 +E988 +237E +2540 +2920 +251E +0200 +ENDCHAR +STARTCHAR uni3D8C +ENCODING 15756 +BBX 15 16 0 -2 +BITMAP +0044 +9F44 +4AAA +0AEE +8E44 +4AAA +4AEE +0E00 +2A28 +4AAA +CBAA +4EEE +5A28 +4228 +4248 +0288 +ENDCHAR +STARTCHAR uni3D8D +ENCODING 15757 +BBX 15 16 0 -2 +BITMAP +0200 +4222 +2792 +2494 +093E +87C8 +4548 +555E +17C8 +2548 +E57E +27C8 +2008 +2AA8 +2AA8 +0008 +ENDCHAR +STARTCHAR uni3D8E +ENCODING 15758 +BBX 15 15 0 -1 +BITMAP +01FC +4954 +25FC +2400 +01FE +8000 +5CFC +4484 +14FC +2452 +E4CC +2548 +2464 +2B00 +30FE +ENDCHAR +STARTCHAR uni3D8F +ENCODING 15759 +BBX 15 16 0 -2 +BITMAP +001C +4EE0 +2A54 +2A28 +0A7C +8C10 +4AFE +4A00 +1AFC +2A04 +EA7C +2C04 +28FC +2814 +294A +0A38 +ENDCHAR +STARTCHAR uni3D90 +ENCODING 15760 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +17FE +14A8 +84FE +4550 +477C +1550 +157C +2550 +E57E +2540 +28A4 +2A8A +328A +0478 +ENDCHAR +STARTCHAR uni3D91 +ENCODING 15761 +BBX 15 16 0 -2 +BITMAP +0210 +8210 +4510 +089E +9052 +6FA2 +4008 +0008 +3DC8 +5548 +D548 +5DD4 +4894 +4894 +5554 +2222 +ENDCHAR +STARTCHAR uni3D92 +ENCODING 15762 +BBX 15 16 0 -2 +BITMAP +1F3E +9122 +5F3E +1122 +9F3E +5002 +57FA +1482 +37F2 +5482 +D7F2 +5482 +57FA +500A +5AAA +1014 +ENDCHAR +STARTCHAR uni3D93 +ENCODING 15763 +BBX 15 16 0 -2 +BITMAP +0210 +9FFE +4214 +000A +07FE +1408 +95E8 +5D48 +05EA +3D2A +15EC +554C +A54A +09EA +0816 +1022 +ENDCHAR +STARTCHAR uni3D94 +ENCODING 15764 +BBX 15 15 0 -2 +BITMAP +43F8 +22A8 +22A8 +03F8 +8000 +4FBE +4AAA +1AAA +2FBE +E040 +2FFE +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni3D95 +ENCODING 15765 +BBX 15 16 0 -2 +BITMAP +0210 +43DE +2528 +2884 +07BC +84A4 +47BC +54A4 +17BC +2404 +E5F4 +2514 +25F4 +2514 +25F4 +040C +ENDCHAR +STARTCHAR uni3D96 +ENCODING 15766 +BBX 15 16 0 -2 +BITMAP +0880 +89F8 +4A88 +1070 +138E +3400 +B5FC +55AC +1574 +15FC +1420 +55FC +9420 +13FE +1154 +122A +ENDCHAR +STARTCHAR uni3D97 +ENCODING 15767 +BBX 15 16 0 -2 +BITMAP +2028 +7F78 +AA14 +7F7C +2A54 +3FB2 +0600 +1FF0 +1010 +1FF0 +1010 +1FF0 +0184 +3D48 +0930 +730E +ENDCHAR +STARTCHAR uni3D98 +ENCODING 15768 +BBX 15 16 0 -2 +BITMAP +0210 +43DE +2528 +2884 +07FC +80A0 +47FC +54A4 +17FC +2208 +E3F8 +2208 +23F8 +2040 +2FFE +0040 +ENDCHAR +STARTCHAR uni3D99 +ENCODING 15769 +BBX 15 16 0 -2 +BITMAP +0284 +AAA4 +56D4 +029E +A7D4 +5124 +5224 +055E +2984 +52C4 +F4C4 +51BE +52A0 +5490 +528E +0100 +ENDCHAR +STARTCHAR uni3D9A +ENCODING 15770 +BBX 15 15 1 -1 +BITMAP +4000 +3FFE +0220 +1FFC +9224 +5FFC +0500 +1FBC +0524 +2FBC +2AA4 +4FBC +4224 +9FA4 +824C +ENDCHAR +STARTCHAR uni3D9B +ENCODING 15771 +BBX 15 16 0 -2 +BITMAP +1080 +8880 +49FE +3D00 +12A0 +112C +9D34 +55AC +1534 +1554 +15DC +5554 +A7FE +2488 +4D04 +8202 +ENDCHAR +STARTCHAR uni3D9C +ENCODING 15772 +BBX 15 16 0 -2 +BITMAP +0002 +BEFA +628A +3EFA +2082 +31C6 +AAAA +6082 +3FFE +2AAA +2AAA +7FFE +AAAA +2AAA +32CA +4104 +ENDCHAR +STARTCHAR uni3D9D +ENCODING 15773 +BBX 15 16 0 -2 +BITMAP +0040 +9020 +4BFE +02A4 +92BE +4BE8 +4ABE +02A8 +26BE +4AA8 +DABE +4AA0 +4A14 +4B52 +4D4A +0A38 +ENDCHAR +STARTCHAR uni3D9E +ENCODING 15774 +BBX 15 16 0 -2 +BITMAP +03F8 +2208 +13F8 +1208 +83F8 +4040 +4FFE +14A4 +17BC +2110 +E7FC +2110 +2FFE +2124 +2318 +0D86 +ENDCHAR +STARTCHAR uni3D9F +ENCODING 15775 +BBX 15 16 0 -2 +BITMAP +47FC +2444 +27FC +8444 +4FFE +4AAA +0FBE +2AAA +2FBE +4220 +C7C0 +4084 +4FFE +4042 +4548 +0884 +ENDCHAR +STARTCHAR uni3DA0 +ENCODING 15776 +BBX 15 15 0 -2 +BITMAP +9EFE +54AA +1EAA +94FE +5E10 +547C +1410 +3FFE +4128 +D57C +5510 +55FE +5110 +4110 +0610 +ENDCHAR +STARTCHAR uni3DA1 +ENCODING 15777 +BBX 15 15 0 -2 +BITMAP +3FF8 +2108 +2108 +2108 +2928 +2928 +2948 +3108 +2288 +2248 +244A +242A +482A +5006 +8002 +ENDCHAR +STARTCHAR uni3DA2 +ENCODING 15778 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C206 +0200 +3FE0 +0220 +0420 +0420 +0822 +3022 +C01E +ENDCHAR +STARTCHAR uni3DA3 +ENCODING 15779 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0100 +FFFE +0100 +0100 +0000 +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3DA4 +ENCODING 15780 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +1080 +10FC +5504 +5904 +5284 +9448 +1028 +1010 +1010 +2820 +2440 +4480 +4100 +8600 +ENDCHAR +STARTCHAR uni3DA5 +ENCODING 15781 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +1020 +5420 +5820 +5020 +93FE +1020 +1020 +1020 +2820 +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni3DA6 +ENCODING 15782 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1008 +1050 +5420 +5810 +53FE +9022 +1024 +1020 +1020 +2820 +2420 +4420 +40A0 +8040 +ENDCHAR +STARTCHAR uni3DA7 +ENCODING 15783 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FE +5522 +5922 +5122 +9122 +1152 +114A +118A +2902 +2502 +4502 +410A +8104 +ENDCHAR +STARTCHAR uni3DA8 +ENCODING 15784 +BBX 15 15 0 -2 +BITMAP +7FFC +0080 +0100 +0300 +0560 +0918 +3104 +C102 +0100 +0100 +0000 +2488 +2244 +4244 +8004 +ENDCHAR +STARTCHAR uni3DA9 +ENCODING 15785 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FE +5522 +5A24 +5020 +9020 +1050 +1050 +1050 +2850 +2490 +4492 +4112 +820E +ENDCHAR +STARTCHAR uni3DAA +ENCODING 15786 +BBX 15 15 0 -2 +BITMAP +7FFC +0100 +0300 +0560 +1918 +6104 +0000 +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3DAB +ENCODING 15787 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +2104 +12C8 +0C30 +F00C +0102 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3DAC +ENCODING 15788 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +15FE +5820 +5020 +5020 +91FC +1070 +10A8 +10A8 +2924 +2524 +4222 +4020 +8020 +ENDCHAR +STARTCHAR uni3DAD +ENCODING 15789 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +1090 +1110 +557E +5A52 +5392 +9092 +1112 +1112 +1252 +2BD2 +2462 +4422 +404A +8084 +ENDCHAR +STARTCHAR uni3DAE +ENCODING 15790 +BBX 15 15 0 -2 +BITMAP +7FFC +0100 +0100 +3FF8 +2108 +2288 +2448 +2008 +2018 +0100 +1110 +22A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3DAF +ENCODING 15791 +BBX 15 16 0 -2 +BITMAP +1000 +1080 +131E +1252 +5652 +5A52 +5252 +9252 +1252 +12D2 +135A +2A54 +2490 +4490 +4110 +8210 +ENDCHAR +STARTCHAR uni3DB0 +ENCODING 15792 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +1488 +5BFE +5088 +5088 +9088 +1088 +10F8 +1088 +2888 +2488 +4488 +40F8 +8088 +ENDCHAR +STARTCHAR uni3DB1 +ENCODING 15793 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +55FE +5820 +5070 +9070 +10A8 +10A8 +1124 +2AFA +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni3DB2 +ENCODING 15794 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +5524 +59FC +5124 +9124 +1124 +11FC +1124 +2924 +2524 +4524 +4104 +820C +ENDCHAR +STARTCHAR uni3DB3 +ENCODING 15795 +BBX 15 16 0 -2 +BITMAP +0100 +3FF0 +0110 +FFFE +0110 +3FF0 +0100 +3FF8 +0100 +FFFE +0000 +0100 +1110 +22A0 +0C60 +701C +ENDCHAR +STARTCHAR uni3DB4 +ENCODING 15796 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +107C +1084 +5548 +5830 +5020 +9048 +1190 +103E +1042 +29A4 +2418 +4410 +4060 +8180 +ENDCHAR +STARTCHAR uni3DB5 +ENCODING 15797 +BBX 15 16 0 -2 +BITMAP +0810 +0878 +13C0 +3040 +5040 +9FFE +1040 +1040 +1040 +17FC +1000 +0000 +2488 +2244 +4244 +8004 +ENDCHAR +STARTCHAR uni3DB6 +ENCODING 15798 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +17FE +5A42 +5444 +50A0 +90A2 +11A4 +1298 +1490 +2888 +2484 +44A2 +40C0 +8080 +ENDCHAR +STARTCHAR uni3DB7 +ENCODING 15799 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +11FC +1504 +5A04 +51E4 +5124 +9124 +11E4 +1124 +1124 +29E4 +2504 +4404 +4028 +8010 +ENDCHAR +STARTCHAR uni3DB8 +ENCODING 15800 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +11FC +1444 +5884 +5084 +5128 +9210 +1108 +13DE +114A +294A +254A +4252 +435A +84A4 +ENDCHAR +STARTCHAR uni3DB9 +ENCODING 15801 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +1420 +5BFE +5000 +5020 +9022 +13B2 +10B4 +10A8 +2928 +2524 +4224 +44A2 +8040 +ENDCHAR +STARTCHAR uni3DBA +ENCODING 15802 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +1020 +5420 +5BFE +5050 +9088 +1104 +12FA +1488 +2888 +2488 +4488 +40F8 +8088 +ENDCHAR +STARTCHAR uni3DBB +ENCODING 15803 +BBX 15 16 0 -2 +BITMAP +0800 +1FF0 +2820 +07C0 +1830 +E10E +1FF0 +0100 +1FF0 +0100 +7FFC +0100 +0100 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni3DBC +ENCODING 15804 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +1088 +1504 +5BFE +5082 +5080 +91FC +1220 +1020 +13FE +2820 +2450 +4488 +4104 +8602 +ENDCHAR +STARTCHAR uni3DBD +ENCODING 15805 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1504 +5904 +51FC +5020 +9020 +13FE +1222 +1252 +2A8A +270A +4202 +420A +8204 +ENDCHAR +STARTCHAR uni3DBE +ENCODING 15806 +BBX 15 15 0 -2 +BITMAP +7FFC +0440 +3FF8 +2448 +2448 +3FF8 +0000 +7FFC +0100 +1110 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3DBF +ENCODING 15807 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +5420 +5BFE +5202 +9404 +11F8 +1010 +1020 +2BFE +2420 +4420 +40A0 +8040 +ENDCHAR +STARTCHAR uni3DC0 +ENCODING 15808 +BBX 15 15 1 -1 +BITMAP +1020 +52A4 +54A8 +1020 +2850 +4488 +0000 +FFE0 +0020 +0820 +0820 +7F90 +0812 +080A +0804 +ENDCHAR +STARTCHAR uni3DC1 +ENCODING 15809 +BBX 14 16 0 -2 +BITMAP +1000 +11F8 +1008 +10D0 +5420 +59FC +5124 +9124 +11FC +1124 +1124 +29FC +2524 +4524 +4124 +810C +ENDCHAR +STARTCHAR uni3DC2 +ENCODING 15810 +BBX 15 15 0 -2 +BITMAP +7E7C +4804 +7E44 +4228 +7E10 +4828 +7EC4 +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3DC3 +ENCODING 15811 +BBX 15 16 0 -2 +BITMAP +0100 +1108 +1108 +2290 +0440 +1830 +EFEE +0800 +0FE0 +0800 +0FE0 +0800 +FFFE +1110 +14E0 +181C +ENDCHAR +STARTCHAR uni3DC4 +ENCODING 15812 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1524 +59FC +5124 +5124 +91FC +1020 +13FE +1070 +28A8 +2524 +4222 +4020 +8020 +ENDCHAR +STARTCHAR uni3DC5 +ENCODING 15813 +BBX 15 16 0 -2 +BITMAP +7F00 +227C +3E04 +2228 +3E10 +23A8 +FE44 +0200 +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3DC6 +ENCODING 15814 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1104 +55FC +5900 +51FC +9104 +11FC +1020 +1020 +2BFE +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni3DC7 +ENCODING 15815 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +3C40 +45FE +A840 +1090 +2090 +C892 +1152 +3D54 +4690 +8428 +2828 +1044 +2084 +C102 +ENDCHAR +STARTCHAR uni3DC8 +ENCODING 15816 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1050 +5488 +5924 +5222 +91FC +1124 +11FC +1124 +29FC +2422 +4422 +401E +8000 +ENDCHAR +STARTCHAR uni3DC9 +ENCODING 15817 +BBX 15 16 0 -2 +BITMAP +0004 +3F84 +2084 +2084 +3FBE +2004 +2F84 +2024 +3FD4 +2214 +2A44 +2A84 +5204 +4504 +8894 +1048 +ENDCHAR +STARTCHAR uni3DCA +ENCODING 15818 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +7EFC +0820 +1C30 +1A70 +2A68 +48A4 +8922 +0820 +0820 +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni3DCB +ENCODING 15819 +BBX 15 16 0 -2 +BITMAP +1020 +10A2 +10A2 +1124 +5450 +5888 +5304 +9022 +1020 +10A4 +10A4 +2928 +2450 +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni3DCC +ENCODING 15820 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1004 +14FC +5804 +51FC +5000 +93FE +1222 +1020 +11FC +2924 +2524 +4534 +4128 +8020 +ENDCHAR +STARTCHAR uni3DCD +ENCODING 15821 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1488 +5904 +52FA +5000 +91FC +1154 +1154 +11FC +2954 +2554 +4554 +4104 +810C +ENDCHAR +STARTCHAR uni3DCE +ENCODING 15822 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +11FC +5504 +59FC +5080 +91FE +1222 +1122 +1152 +2902 +25FA +4402 +4014 +8008 +ENDCHAR +STARTCHAR uni3DCF +ENCODING 15823 +BBX 15 16 0 -2 +BITMAP +0640 +387C +0890 +7E10 +08FE +1C10 +2A10 +4810 +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3DD0 +ENCODING 15824 +BBX 15 16 0 -2 +BITMAP +1040 +119C +1104 +1104 +55DC +5904 +5104 +91FC +1020 +1020 +11FC +2820 +2420 +4420 +43FE +8000 +ENDCHAR +STARTCHAR uni3DD1 +ENCODING 15825 +BBX 15 16 0 -2 +BITMAP +0100 +1108 +1108 +2290 +0440 +1830 +E00E +3FF8 +0440 +3FF8 +2448 +3FF8 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni3DD2 +ENCODING 15826 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +1124 +15FC +5924 +5124 +51FC +9020 +1020 +13FE +1222 +2A2A +26FA +420A +4202 +8206 +ENDCHAR +STARTCHAR uni3DD3 +ENCODING 15827 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FC +1554 +5AD4 +50B4 +512C +9244 +1094 +1108 +1040 +28A4 +26AA +428A +4478 +8000 +ENDCHAR +STARTCHAR uni3DD4 +ENCODING 15828 +BBX 14 15 1 -1 +BITMAP +1038 +13C0 +1000 +1644 +5524 +5528 +9000 +927C +1244 +1244 +2A7C +2A44 +4644 +4244 +827C +ENDCHAR +STARTCHAR uni3DD5 +ENCODING 15829 +BBX 15 16 0 -2 +BITMAP +2210 +1210 +1410 +FF92 +1452 +1454 +7F58 +5590 +5510 +6328 +4128 +7F28 +4148 +4144 +7F84 +4102 +ENDCHAR +STARTCHAR uni3DD6 +ENCODING 15830 +BBX 14 15 0 -2 +BITMAP +7DFC +4444 +4444 +7C44 +4444 +4494 +7C88 +1100 +14FC +5884 +5084 +9084 +2884 +44FC +8084 +ENDCHAR +STARTCHAR uni3DD7 +ENCODING 15831 +BBX 15 15 0 -2 +BITMAP +2FBC +28A4 +2FA4 +283C +2FA2 +28A2 +4F9E +8100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3DD8 +ENCODING 15832 +BBX 15 16 0 -2 +BITMAP +1040 +1088 +1104 +13FE +5402 +59FC +5104 +9104 +11FC +1020 +13FE +2870 +24A8 +4524 +4222 +8020 +ENDCHAR +STARTCHAR uni3DD9 +ENCODING 15833 +BBX 15 16 0 -2 +BITMAP +1108 +1088 +1090 +17FE +5800 +53C4 +5254 +9254 +13D4 +1254 +1254 +2BD4 +2654 +4244 +4254 +82C8 +ENDCHAR +STARTCHAR uni3DDA +ENCODING 15834 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +55FC +5904 +51FC +9000 +13FE +1202 +11FC +2820 +2420 +4420 +40A0 +8040 +ENDCHAR +STARTCHAR uni3DDB +ENCODING 15835 +BBX 15 16 0 -2 +BITMAP +0800 +0BF8 +1208 +3208 +53F8 +9040 +17FE +10E0 +1150 +1248 +1C46 +1040 +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni3DDC +ENCODING 15836 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FE +2090 +AA98 +B494 +A114 +A230 +2440 +2040 +27FE +2040 +50A0 +4910 +4208 +8C06 +ENDCHAR +STARTCHAR uni3DDD +ENCODING 15837 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +5488 +5904 +5222 +9028 +1024 +13FE +1020 +2850 +2450 +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni3DDE +ENCODING 15838 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2200 +22FC +AA84 +B2FC +A284 +A2FC +2200 +22FC +2208 +2210 +53FE +4C10 +4450 +8820 +ENDCHAR +STARTCHAR uni3DDF +ENCODING 15839 +BBX 15 16 0 -2 +BITMAP +1008 +1210 +117C +1544 +5844 +507C +5740 +9140 +117E +1142 +1142 +297E +2542 +4280 +447E +8000 +ENDCHAR +STARTCHAR uni3DE0 +ENCODING 15840 +BBX 15 16 0 -2 +BITMAP +0110 +0920 +12E0 +0C18 +7104 +0910 +12A0 +0C60 +701C +1010 +3EFC +4210 +1490 +08FE +3010 +C010 +ENDCHAR +STARTCHAR uni3DE1 +ENCODING 15841 +BBX 15 15 0 -2 +BITMAP +7EFE +4280 +7EFC +4284 +7EFC +4280 +7EFE +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3DE2 +ENCODING 15842 +BBX 15 16 0 -2 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0200 +FFFE +0800 +37F0 +C080 +1FFC +0100 +1110 +22A0 +0C60 +701C +ENDCHAR +STARTCHAR uni3DE3 +ENCODING 15843 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +13FE +1020 +55FC +5820 +53FE +9000 +10A0 +10FC +1120 +2820 +27FE +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni3DE4 +ENCODING 15844 +BBX 15 16 0 -2 +BITMAP +1000 +1078 +FE48 +1048 +7C48 +0086 +FE00 +82FC +7C44 +1044 +1228 +5428 +A810 +2428 +4444 +8182 +ENDCHAR +STARTCHAR uni3DE5 +ENCODING 15845 +BBX 15 15 0 -1 +BITMAP +1000 +15F8 +5410 +5820 +9024 +29A8 +44B0 +90A8 +1528 +5924 +5222 +90A0 +2840 +4400 +81FC +ENDCHAR +STARTCHAR uni3DE6 +ENCODING 15846 +BBX 15 16 0 -2 +BITMAP +0020 +FF20 +24A4 +3CA4 +24A8 +3D20 +2420 +2450 +2F50 +F488 +0504 +0602 +0400 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni3DE7 +ENCODING 15847 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1110 +1520 +597C +5144 +517C +9144 +117C +1110 +1110 +2954 +2552 +4292 +4250 +8420 +ENDCHAR +STARTCHAR uni3DE8 +ENCODING 15848 +BBX 15 16 0 -2 +BITMAP +1020 +1222 +13FE +1480 +59F8 +5288 +5070 +938E +1020 +11FC +1020 +29FC +2420 +43FE +4020 +8020 +ENDCHAR +STARTCHAR uni3DE9 +ENCODING 15849 +BBX 15 15 0 -2 +BITMAP +27DC +2504 +2784 +249C +2790 +2512 +47CE +0000 +0100 +1110 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3DEA +ENCODING 15850 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +11FE +1320 +55FC +5920 +51FC +9120 +11FE +1100 +13FC +2888 +249E +4502 +420A +8404 +ENDCHAR +STARTCHAR uni3DEB +ENCODING 15851 +BBX 15 16 0 -2 +BITMAP +0800 +7F78 +0848 +3E48 +0086 +3E78 +2A48 +3E30 +4048 +8084 +0100 +1110 +22A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3DEC +ENCODING 15852 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +5400 +59FC +5104 +91FC +1104 +11FC +1020 +2BFE +2450 +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni3DED +ENCODING 15853 +BBX 15 16 0 -2 +BITMAP +2100 +13F0 +1510 +00E0 +775C +11F0 +1040 +13FC +2840 +47FE +0100 +1110 +22A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3DEE +ENCODING 15854 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +17FE +1090 +57FC +5A94 +53FC +9294 +13FC +1000 +11F8 +2908 +25F8 +4508 +41F8 +8108 +ENDCHAR +STARTCHAR uni3DEF +ENCODING 15855 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +55FC +5840 +90F8 +1040 +2BFE +4488 +9124 +1222 +7CF8 +1020 +11FC +1E20 +F020 +4020 +ENDCHAR +STARTCHAR uni3DF0 +ENCODING 15856 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1400 +5954 +5124 +5154 +91FC +1020 +13FE +1242 +2A92 +26FA +420A +4202 +8206 +ENDCHAR +STARTCHAR uni3DF1 +ENCODING 15857 +BBX 14 16 1 -2 +BITMAP +2020 +2020 +4420 +FEF8 +0220 +7C20 +4420 +7DFC +4420 +7C40 +4488 +55FC +4884 +0000 +4910 +8488 +ENDCHAR +STARTCHAR uni3DF2 +ENCODING 15858 +BBX 15 16 0 -2 +BITMAP +21C8 +2708 +2108 +2FE8 +A91E +B7CA +A54A +A7CA +254A +27CA +210A +27CA +5112 +49D2 +4E2A +8444 +ENDCHAR +STARTCHAR uni3DF3 +ENCODING 15859 +BBX 15 16 0 -2 +BITMAP +3FFE +2248 +24FE +2D90 +36FC +2490 +24FC +2490 +24FE +2480 +2040 +2248 +4450 +40A0 +8318 +0C06 +ENDCHAR +STARTCHAR uni3DF4 +ENCODING 15860 +BBX 15 16 0 -2 +BITMAP +3FFE +2104 +2E38 +2210 +2FBC +2718 +2AB4 +3252 +2000 +2080 +2488 +2890 +2140 +4220 +4C18 +B006 +ENDCHAR +STARTCHAR uni3DF5 +ENCODING 15861 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +15AC +5974 +5124 +51FC +9020 +11FC +1020 +13FE +2800 +26A4 +4252 +4452 +8000 +ENDCHAR +STARTCHAR uni3DF6 +ENCODING 15862 +BBX 15 16 0 -2 +BITMAP +1110 +17FC +2110 +2FFE +6100 +A3F8 +2648 +2BF8 +2248 +23F8 +2248 +2258 +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni3DF7 +ENCODING 15863 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +17DE +5A10 +5252 +51CE +9000 +1088 +13FE +1088 +2888 +27FE +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni3DF8 +ENCODING 15864 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +15FC +5904 +51FC +5000 +91FC +10A8 +13FE +10A8 +29FC +2420 +43FE +4020 +8020 +ENDCHAR +STARTCHAR uni3DF9 +ENCODING 15865 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +1020 +543E +5820 +51FC +9104 +11FC +1104 +11FC +2820 +27FE +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni3DFA +ENCODING 15866 +BBX 15 16 0 -2 +BITMAP +2020 +3E20 +443E +A844 +4684 +4228 +7610 +4228 +7E44 +0102 +1110 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3DFB +ENCODING 15867 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +11FE +1354 +5554 +5954 +53FE +9154 +1154 +1154 +17FE +2800 +2554 +452A +422A +8000 +ENDCHAR +STARTCHAR uni3DFC +ENCODING 15868 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0440 +17D0 +1012 +F7DC +1450 +3452 +D7D2 +100E +0100 +1110 +22A0 +0C60 +701C +ENDCHAR +STARTCHAR uni3DFD +ENCODING 15869 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +13FE +1020 +55FC +5820 +53FE +9124 +10A8 +13FE +1000 +29FC +2504 +4504 +41FC +8104 +ENDCHAR +STARTCHAR uni3DFE +ENCODING 15870 +BBX 15 16 0 -2 +BITMAP +2040 +207C +2040 +23FE +AA42 +B278 +A3C4 +A23C +2200 +23FE +2240 +23A4 +5258 +4DB4 +4452 +89B0 +ENDCHAR +STARTCHAR uni3DFF +ENCODING 15871 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1488 +5904 +52FA +5000 +9000 +11DC +1154 +1154 +29DC +2488 +4488 +4154 +8222 +ENDCHAR +STARTCHAR uni3E00 +ENCODING 15872 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1000 +14F8 +5888 +50F8 +5000 +93FE +1202 +12FA +128A +2AFA +2626 +41F8 +4020 +83FE +ENDCHAR +STARTCHAR uni3E01 +ENCODING 15873 +BBX 15 16 0 -2 +BITMAP +1050 +1252 +1154 +1450 +5BFE +5088 +5050 +93FE +1020 +11FC +1020 +2BFE +24A8 +4124 +4622 +8020 +ENDCHAR +STARTCHAR uni3E02 +ENCODING 15874 +BBX 15 16 0 -2 +BITMAP +0110 +27FC +1080 +0348 +70B0 +1368 +10A4 +1320 +1040 +2FFE +4100 +1110 +22A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3E03 +ENCODING 15875 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +4910 +6B1E +5D10 +4910 +7F7C +0844 +7F44 +0844 +0F7C +F044 +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni3E04 +ENCODING 15876 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2088 +A852 +B7AC +A2AA +A2A8 +25AC +2000 +2104 +21FC +5104 +49FC +4104 +8204 +ENDCHAR +STARTCHAR uni3E05 +ENCODING 15877 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +23DE +2AA8 +AC44 +A900 +A7DE +A452 +27D2 +2452 +37D2 +2C12 +4F92 +4456 +83D0 +ENDCHAR +STARTCHAR uni3E06 +ENCODING 15878 +BBX 15 16 0 -2 +BITMAP +1120 +11FC +1220 +17FE +5800 +51FC +5104 +91FC +1050 +13DE +1050 +29DC +2450 +43DE +4050 +8050 +ENDCHAR +STARTCHAR uni3E07 +ENCODING 15879 +BBX 15 16 0 -2 +BITMAP +1088 +11DC +1088 +13DE +5488 +5954 +5222 +91FC +1104 +11FC +1104 +29FC +2504 +45FC +4088 +8104 +ENDCHAR +STARTCHAR uni3E08 +ENCODING 15880 +BBX 15 16 0 -2 +BITMAP +0810 +2448 +3F7E +64C8 +BF7E +2448 +3F7E +2448 +3F7E +2040 +0100 +1110 +22A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3E09 +ENCODING 15881 +BBX 15 16 0 -2 +BITMAP +2108 +27C8 +AAAA +B12C +AFE8 +2108 +57D4 +4912 +8922 +0000 +0100 +1110 +22A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni3E0A +ENCODING 15882 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +27CE +2112 +A924 +B7DE +A552 +A55E +27D2 +211E +2392 +255E +5940 +4914 +4112 +8122 +ENDCHAR +STARTCHAR uni3E0B +ENCODING 15883 +BBX 15 16 0 -2 +BITMAP +203C +21E0 +3D24 +44A8 +A9FE +50A8 +2124 +4202 +91FC +5524 +5524 +59FC +9124 +2924 +25FC +4504 +ENDCHAR +STARTCHAR uni3E0C +ENCODING 15884 +BBX 15 16 0 -2 +BITMAP +11FC +1020 +13FE +1222 +55AC +5820 +51AC +9090 +11FE +1320 +15FC +2920 +25FC +4520 +41FE +8100 +ENDCHAR +STARTCHAR uni3E0D +ENCODING 15885 +BBX 15 16 0 -2 +BITMAP +2108 +21EC +210A +27E8 +AD28 +B5DE +A728 +A4EA +240A +27EA +240C +27EC +5A2A +4BEA +5156 +87E2 +ENDCHAR +STARTCHAR uni3E0E +ENCODING 15886 +BBX 15 16 0 -2 +BITMAP +13FC +1108 +11F8 +1508 +59F8 +510E +57F8 +9008 +17FE +1294 +139C +2A94 +279C +42D6 +47BC +8084 +ENDCHAR +STARTCHAR uni3E0F +ENCODING 15887 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2410 +3F7C +2638 +2D54 +3532 +2F3C +2120 +2738 +2120 +2F3C +2488 +4950 +4630 +B80E +ENDCHAR +STARTCHAR uni3E10 +ENCODING 15888 +BBX 15 16 0 -2 +BITMAP +2850 +FE48 +28FE +3990 +1290 +7CFE +5490 +7C90 +10FE +7C90 +1090 +FEFE +2880 +4400 +2488 +4244 +ENDCHAR +STARTCHAR uni3E11 +ENCODING 15889 +BBX 15 16 0 -2 +BITMAP +2FEC +4824 +6BAC +4824 +6BAC +4AA4 +FFFE +8822 +7EFC +2C68 +4AA4 +0100 +1110 +22A0 +0C60 +701C +ENDCHAR +STARTCHAR uni3E12 +ENCODING 15890 +BBX 15 15 0 -1 +BITMAP +00FC +7F00 +0208 +2108 +1110 +1020 +00F8 +3F00 +0100 +0100 +FFFE +0100 +0100 +0100 +3FF8 +ENDCHAR +STARTCHAR uni3E13 +ENCODING 15891 +BBX 13 16 1 -2 +BITMAP +01F8 +FE00 +0410 +4210 +2220 +2040 +7FF0 +4010 +4010 +4010 +7FF0 +4010 +4010 +4010 +7FF0 +4010 +ENDCHAR +STARTCHAR uni3E14 +ENCODING 15892 +BBX 15 16 0 -2 +BITMAP +00F8 +7F00 +2110 +1110 +1220 +FFFE +0400 +0800 +1FF0 +2810 +4FF0 +8810 +0FF0 +0810 +0FF0 +0810 +ENDCHAR +STARTCHAR uni3E15 +ENCODING 15893 +BBX 15 16 0 -2 +BITMAP +0228 +077E +3848 +2AFE +2A48 +2A7E +2A48 +2A7E +2A40 +297E +2922 +289C +2862 +4830 +480E +8800 +ENDCHAR +STARTCHAR uni3E16 +ENCODING 15894 +BBX 15 14 0 -1 +BITMAP +28F8 +2488 +4288 +4088 +84F8 +0488 +4888 +2888 +10F8 +1888 +2488 +2488 +4088 +83FE +ENDCHAR +STARTCHAR uni3E17 +ENCODING 15895 +BBX 15 16 0 -2 +BITMAP +0840 +1020 +2850 +4488 +0300 +1CE0 +E01E +3FF8 +2008 +2FE8 +2008 +27C8 +2448 +27C8 +2028 +2010 +ENDCHAR +STARTCHAR uni3E18 +ENCODING 15896 +BBX 15 16 0 -2 +BITMAP +0840 +1020 +2850 +4488 +0300 +1CE0 +E01E +1FF0 +1290 +1FF0 +0000 +7FFC +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni3E19 +ENCODING 15897 +BBX 15 16 0 -2 +BITMAP +0840 +1020 +2850 +4488 +0300 +1CE0 +E21E +1FD0 +0220 +FFFE +0300 +0FF0 +3810 +CFF0 +0810 +0FF0 +ENDCHAR +STARTCHAR uni3E1A +ENCODING 15898 +BBX 15 16 0 -2 +BITMAP +0008 +8488 +4450 +2820 +1050 +2888 +4500 +8408 +0088 +0488 +4450 +2850 +1020 +2850 +4488 +8506 +ENDCHAR +STARTCHAR uni3E1B +ENCODING 15899 +BBX 14 16 0 -2 +BITMAP +0400 +25FC +2444 +2444 +2444 +3C44 +0494 +0488 +FD00 +24FC +2484 +2484 +2484 +4484 +44FC +8484 +ENDCHAR +STARTCHAR uni3E1C +ENCODING 15900 +BBX 15 16 0 -2 +BITMAP +0420 +2410 +2410 +25FE +2502 +3E54 +0488 +0504 +FC00 +24FC +2420 +2420 +2420 +4420 +45FE +8400 +ENDCHAR +STARTCHAR uni3E1D +ENCODING 15901 +BBX 15 16 0 -2 +BITMAP +0440 +2440 +2440 +247C +2444 +3E88 +20A0 +2120 +3C20 +2450 +2450 +2448 +2488 +4484 +4504 +8602 +ENDCHAR +STARTCHAR uni3E1E +ENCODING 15902 +BBX 15 16 0 -2 +BITMAP +0410 +2490 +2490 +2490 +2490 +3EFE +2080 +2080 +3C80 +24F8 +2488 +2488 +2488 +4488 +4488 +8508 +ENDCHAR +STARTCHAR uni3E1F +ENCODING 15903 +BBX 15 16 0 -2 +BITMAP +0480 +2484 +2498 +24E0 +2482 +3E82 +207E +2000 +3CFC +2484 +2484 +24FC +2484 +4484 +44FC +8484 +ENDCHAR +STARTCHAR uni3E20 +ENCODING 15904 +BBX 15 16 0 -2 +BITMAP +0890 +4890 +4890 +4A92 +4994 +7C98 +4090 +4198 +7A94 +4C92 +4890 +4890 +4912 +4912 +4A12 +8C0E +ENDCHAR +STARTCHAR uni3E21 +ENCODING 15905 +BBX 15 16 0 -2 +BITMAP +0820 +4920 +4920 +49FC +4920 +7E20 +4020 +43FE +7870 +48A8 +48A8 +4924 +4924 +4A22 +4820 +8820 +ENDCHAR +STARTCHAR uni3E22 +ENCODING 15906 +BBX 15 16 0 -2 +BITMAP +0844 +4844 +49FE +4844 +4844 +7DFE +4040 +40FE +7992 +4AFE +4892 +48FE +4892 +4892 +4892 +8886 +ENDCHAR +STARTCHAR uni3E23 +ENCODING 15907 +BBX 15 16 0 -2 +BITMAP +0850 +4A52 +4954 +4850 +4BFE +7C88 +4050 +43FE +7820 +49FC +4820 +4BFE +48A8 +4924 +4E22 +8820 +ENDCHAR +STARTCHAR uni3E24 +ENCODING 15908 +BBX 15 16 0 -2 +BITMAP +4090 +2288 +2288 +FABE +0280 +53D4 +2208 +FA3E +2388 +2288 +729C +2288 +2288 +4488 +4488 +8888 +ENDCHAR +STARTCHAR uni3E25 +ENCODING 15909 +BBX 15 16 0 -2 +BITMAP +09F0 +4A10 +4FFC +4A04 +4BFC +7E24 +43B8 +4222 +79FE +4A10 +4FFC +4A44 +4BFC +48D0 +494A +8E3E +ENDCHAR +STARTCHAR uni3E26 +ENCODING 15910 +BBX 13 15 2 -2 +BITMAP +FFE0 +0200 +4200 +4200 +8200 +FFF0 +0200 +4200 +2200 +1A00 +0600 +03C0 +0238 +0A00 +0400 +ENDCHAR +STARTCHAR uni3E27 +ENCODING 15911 +BBX 15 15 0 -2 +BITMAP +7EFC +0484 +2484 +24FC +2484 +4484 +7EFC +0C92 +1492 +1494 +2488 +4488 +84A4 +14C2 +0880 +ENDCHAR +STARTCHAR uni3E28 +ENCODING 15912 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +4884 +4884 +7E84 +4884 +8884 +0884 +0E8C +F894 +48E4 +0884 +0804 +0804 +0804 +0804 +ENDCHAR +STARTCHAR uni3E29 +ENCODING 15913 +BBX 15 16 0 -2 +BITMAP +0800 +08FC +4820 +4820 +7E20 +4820 +8820 +09FE +0E20 +F820 +4820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uni3E2A +ENCODING 15914 +BBX 14 16 0 -2 +BITMAP +1104 +1124 +5124 +5124 +7D24 +5124 +9124 +1124 +1D24 +F124 +5124 +1124 +1124 +1224 +1204 +1404 +ENDCHAR +STARTCHAR uni3E2B +ENCODING 15915 +BBX 15 16 0 -2 +BITMAP +0804 +080E +48F0 +4880 +7E80 +4880 +88FE +0888 +0E88 +F888 +4888 +0888 +0888 +0908 +0908 +0A08 +ENDCHAR +STARTCHAR uni3E2C +ENCODING 15916 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +5020 +53FE +7C20 +5020 +91FC +1124 +1D24 +F124 +5124 +1134 +1128 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni3E2D +ENCODING 15917 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +51FC +5124 +7D24 +5124 +9124 +1124 +1DFC +F100 +5100 +1100 +1102 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni3E2E +ENCODING 15918 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +5090 +5088 +7D08 +5104 +9204 +15FA +1C88 +F088 +5088 +1088 +1108 +1108 +1228 +1410 +ENDCHAR +STARTCHAR uni3E2F +ENCODING 15919 +BBX 15 16 0 -2 +BITMAP +0808 +0888 +4848 +4848 +7E08 +4888 +8848 +0848 +0E08 +F80E +49F8 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uni3E30 +ENCODING 15920 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +5010 +51FE +7D02 +5204 +9080 +1088 +1C90 +F0A0 +50C0 +1082 +1082 +1082 +107E +1000 +ENDCHAR +STARTCHAR uni3E31 +ENCODING 15921 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +50FE +5100 +7A20 +5120 +912C +1174 +1BA4 +3124 +D134 +1128 +1122 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni3E32 +ENCODING 15922 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +4840 +487E +7EA0 +48A0 +8920 +083C +0E20 +F820 +4820 +083E +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uni3E33 +ENCODING 15923 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +5050 +5050 +7C88 +5124 +9212 +1010 +1DFC +F004 +5008 +1088 +1050 +1020 +1010 +1010 +ENDCHAR +STARTCHAR uni3E34 +ENCODING 15924 +BBX 15 15 0 -2 +BITMAP +FFFE +0400 +0800 +1FF0 +2810 +C810 +0FF0 +0100 +1100 +1FF8 +2100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni3E35 +ENCODING 15925 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +5020 +53FE +7C20 +5020 +91FC +1000 +1C00 +F1FC +5104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni3E36 +ENCODING 15926 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +5104 +5124 +7D24 +5124 +91FC +1124 +1D24 +F154 +514C +118C +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni3E37 +ENCODING 15927 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +7F7C +0824 +3E24 +0844 +7F54 +0888 +0900 +1100 +1FF8 +2100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni3E38 +ENCODING 15928 +BBX 15 16 0 -2 +BITMAP +1008 +101C +51E0 +5100 +7D00 +51FE +9100 +1100 +1D7C +F144 +5144 +1144 +1144 +127C +1244 +1400 +ENDCHAR +STARTCHAR uni3E39 +ENCODING 15929 +BBX 15 16 0 -2 +BITMAP +1004 +101E +51E0 +5022 +7D12 +5094 +9080 +1008 +1DFE +F008 +5088 +1048 +1048 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni3E3A +ENCODING 15930 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +40A8 +24A4 +092A +7230 +10C0 +1700 +0100 +1100 +1FF8 +2100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni3E3B +ENCODING 15931 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +5088 +5104 +7DFE +5002 +9080 +10FC +1D20 +F020 +53FE +1020 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni3E3C +ENCODING 15932 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +50FC +5088 +7D50 +5020 +90D8 +1326 +1CF8 +F020 +50F8 +1020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni3E3D +ENCODING 15933 +BBX 15 16 0 -2 +BITMAP +0800 +08FC +4884 +4884 +7EFC +4884 +8884 +08FC +0E84 +F884 +48FC +0800 +0848 +0844 +0882 +0902 +ENDCHAR +STARTCHAR uni3E3E +ENCODING 15934 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +5044 +5144 +7944 +5284 +9094 +1108 +1A40 +3020 +D0A4 +1282 +128A +128A +1478 +1000 +ENDCHAR +STARTCHAR uni3E3F +ENCODING 15935 +BBX 15 15 1 -1 +BITMAP +1020 +5020 +53FE +5020 +F820 +91FC +1000 +13FE +1A02 +3292 +D090 +1090 +1092 +1112 +120E +ENDCHAR +STARTCHAR uni3E40 +ENCODING 15936 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +53FE +5020 +7820 +53FE +9202 +1404 +19F8 +3010 +D020 +13FE +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni3E41 +ENCODING 15937 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +53FE +5000 +7C00 +51FC +9104 +1104 +1DFC +F020 +5128 +1124 +1222 +1422 +10A0 +1040 +ENDCHAR +STARTCHAR uni3E42 +ENCODING 15938 +BBX 15 15 0 -2 +BITMAP +7EFC +4844 +7E44 +4228 +7E10 +4828 +7EC6 +0100 +1100 +1FF8 +2100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni3E43 +ENCODING 15939 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +7C7C +0440 +3C78 +0440 +7C7C +0440 +0540 +1100 +1FF8 +2100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni3E44 +ENCODING 15940 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +5124 +51FC +7D24 +51FC +9088 +1144 +1E42 +F0F8 +5188 +1250 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni3E45 +ENCODING 15941 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +50FC +5154 +7AD4 +50B4 +912C +1244 +1894 +3108 +D040 +10A4 +12AA +128A +1478 +1000 +ENDCHAR +STARTCHAR uni3E46 +ENCODING 15942 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +5222 +5020 +7DFE +5020 +91FC +1124 +1DFC +F124 +51FC +1020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni3E47 +ENCODING 15943 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +5104 +51FC +7D04 +51FC +9080 +11FE +1E22 +F122 +5152 +1102 +11FA +1002 +1014 +1008 +ENDCHAR +STARTCHAR uni3E48 +ENCODING 15944 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7E7E +08C4 +FF28 +1C10 +2A28 +48C6 +0100 +1100 +1FF8 +2100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni3E49 +ENCODING 15945 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +5110 +5120 +7D7C +5144 +917C +1144 +1D7C +F110 +5110 +1154 +1152 +1292 +1250 +1420 +ENDCHAR +STARTCHAR uni3E4A +ENCODING 15946 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +53FE +52A2 +7C90 +51FE +9120 +1320 +1DFC +F120 +5120 +11FC +1120 +1120 +11FE +1100 +ENDCHAR +STARTCHAR uni3E4B +ENCODING 15947 +BBX 15 16 0 -2 +BITMAP +1120 +113C +5144 +52A8 +7A10 +56A8 +9AC6 +1280 +1A88 +32B0 +D284 +1288 +1232 +1204 +1218 +1260 +ENDCHAR +STARTCHAR uni3E4C +ENCODING 15948 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +53FC +5000 +7D08 +5090 +93FE +1220 +1EA0 +F2FC +5320 +1220 +12FC +1420 +1420 +19FE +ENDCHAR +STARTCHAR uni3E4D +ENCODING 15949 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +53FE +5088 +7C50 +53FE +9222 +12FA +1E22 +F2FA +528A +128A +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni3E4E +ENCODING 15950 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +5124 +51FC +7D24 +51FC +9040 +1088 +1DF0 +F020 +5044 +13FE +1022 +1124 +1222 +1060 +ENDCHAR +STARTCHAR uni3E4F +ENCODING 15951 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +53FE +5088 +7CF8 +5020 +91FC +1124 +1DFC +F020 +53FE +1020 +11FC +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni3E50 +ENCODING 15952 +BBX 15 16 0 -2 +BITMAP +1110 +2110 +CAA8 +1444 +3240 +D27C +1540 +14FE +0900 +1100 +1FF8 +2100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni3E51 +ENCODING 15953 +BBX 15 16 0 -2 +BITMAP +1014 +17FE +5010 +53D0 +7810 +53D0 +9010 +13D0 +1A50 +33D0 +D250 +13C8 +124A +13CA +1186 +1242 +ENDCHAR +STARTCHAR uni3E52 +ENCODING 15954 +BBX 15 16 0 -2 +BITMAP +1050 +1252 +5154 +5050 +7BFE +5088 +9050 +13FE +1820 +31FC +D020 +13FE +1050 +1088 +1104 +1602 +ENDCHAR +STARTCHAR uni3E53 +ENCODING 15955 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +51FC +5020 +7BFE +5108 +939C +1108 +1988 +363E +D000 +13FE +1090 +1090 +1112 +120E +ENDCHAR +STARTCHAR uni3E54 +ENCODING 15956 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +5000 +51FC +7D24 +51FC +9124 +13FE +1C00 +F1FC +5124 +11FC +1124 +11FC +1000 +13FE +ENDCHAR +STARTCHAR uni3E55 +ENCODING 15957 +BBX 15 16 0 -2 +BITMAP +7DFE +0020 +00FC +FE84 +28FC +2884 +28FC +4A84 +4CFC +8848 +1184 +1FF8 +2100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni3E56 +ENCODING 15958 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +50A8 +51FC +7840 +53FE +9088 +1104 +1AFA +3040 +D1A4 +1058 +11B4 +1052 +1390 +1030 +ENDCHAR +STARTCHAR uni3E57 +ENCODING 15959 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +5020 +51FC +7C00 +53FE +9002 +11FC +1C20 +F3FE +5000 +13FE +1004 +13BE +12A4 +138C +ENDCHAR +STARTCHAR uni3E58 +ENCODING 15960 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +5020 +53FE +7E22 +51AC +9020 +11AC +1C00 +F3FE +5020 +11FC +1154 +1154 +1154 +110C +ENDCHAR +STARTCHAR uni3E59 +ENCODING 15961 +BBX 15 16 0 -2 +BITMAP +1088 +12AA +52DC +5488 +7954 +5222 +93FE +1202 +1DFC +3104 +D1FC +1104 +11FC +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni3E5A +ENCODING 15962 +BBX 15 16 0 -2 +BITMAP +1088 +12AA +52DC +5488 +7954 +5222 +93FE +1202 +18F8 +3088 +D0F8 +1000 +11FC +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni3E5B +ENCODING 15963 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +A040 +A2EE +FAAA +ABEA +AAAE +2AE8 +3BAA +ECE6 +2288 +25F4 +2290 +2060 +2198 +2606 +ENDCHAR +STARTCHAR uni3E5C +ENCODING 15964 +BBX 15 16 0 -2 +BITMAP +0820 +0A28 +0924 +0924 +0820 +7EFE +0820 +0820 +0850 +1450 +1250 +1288 +2088 +2104 +4204 +8402 +ENDCHAR +STARTCHAR uni3E5D +ENCODING 15965 +BBX 15 16 0 -2 +BITMAP +0004 +441E +29F0 +1110 +2910 +4910 +8910 +09FE +1910 +2910 +4910 +8908 +090A +094A +5186 +2102 +ENDCHAR +STARTCHAR uni3E5E +ENCODING 15966 +BBX 15 16 0 -2 +BITMAP +0008 +441C +29E0 +1100 +2900 +4900 +89FE +0910 +1910 +2910 +4910 +8910 +0910 +0A10 +5210 +2410 +ENDCHAR +STARTCHAR uni3E5F +ENCODING 15967 +BBX 15 16 0 -2 +BITMAP +0040 +4440 +2840 +13F8 +2848 +4848 +8848 +0848 +1FFE +2840 +48A0 +88A0 +0910 +0910 +5208 +2406 +ENDCHAR +STARTCHAR uni3E60 +ENCODING 15968 +BBX 15 15 1 -1 +BITMAP +0840 +8848 +5070 +27C0 +2040 +5248 +9248 +1248 +3248 +5248 +93F8 +1040 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni3E61 +ENCODING 15969 +BBX 15 16 0 -2 +BITMAP +0040 +4420 +2820 +13FE +2840 +4840 +8888 +0908 +1BF0 +2820 +4840 +8888 +0904 +0BFC +5104 +2000 +ENDCHAR +STARTCHAR uni3E62 +ENCODING 15970 +BBX 15 16 0 -2 +BITMAP +0200 +8A00 +5200 +221E +57D2 +9252 +1252 +1252 +3252 +5252 +9252 +1252 +1452 +145E +A952 +5080 +ENDCHAR +STARTCHAR uni3E63 +ENCODING 15971 +BBX 15 16 0 -2 +BITMAP +0080 +8880 +50F8 +2108 +5310 +94A0 +1040 +10A0 +3318 +5C06 +90C0 +1020 +1010 +1180 +A060 +4010 +ENDCHAR +STARTCHAR uni3E64 +ENCODING 15972 +BBX 15 16 0 -2 +BITMAP +0020 +4420 +2820 +11FC +2820 +4820 +8820 +0BFE +1820 +2840 +4840 +8888 +0904 +0BFE +5102 +2000 +ENDCHAR +STARTCHAR uni3E65 +ENCODING 15973 +BBX 15 16 0 -2 +BITMAP +0040 +4420 +2800 +13FE +2820 +4820 +8820 +0820 +19FC +2820 +4820 +8820 +0820 +0820 +53FE +2000 +ENDCHAR +STARTCHAR uni3E66 +ENCODING 15974 +BBX 14 15 1 -1 +BITMAP +0800 +8BFC +5084 +2084 +2084 +5104 +9104 +1218 +3000 +51FC +9104 +1104 +1104 +2104 +C1FC +ENDCHAR +STARTCHAR uni3E67 +ENCODING 15975 +BBX 15 16 0 -2 +BITMAP +0020 +4420 +2820 +11FC +2924 +4924 +8924 +0924 +1924 +2BFE +4820 +8850 +0850 +0888 +5104 +2202 +ENDCHAR +STARTCHAR uni3E68 +ENCODING 15976 +BBX 14 15 1 -1 +BITMAP +0840 +8840 +5040 +2040 +27FC +5444 +9444 +1444 +3444 +57FC +9444 +1444 +1444 +2444 +C7FC +ENDCHAR +STARTCHAR uni3E69 +ENCODING 15977 +BBX 15 15 0 -2 +BITMAP +45FC +2884 +1088 +2850 +4820 +8850 +0888 +1B26 +2820 +49FC +8820 +0820 +0820 +53FE +2000 +ENDCHAR +STARTCHAR uni3E6A +ENCODING 15978 +BBX 15 15 0 -2 +BITMAP +97BC +54A4 +24A4 +54A4 +94A4 +14A4 +1FFE +34A4 +54A4 +94A4 +14A4 +14A4 +15A4 +A854 +5088 +ENDCHAR +STARTCHAR uni3E6B +ENCODING 15979 +BBX 15 16 0 -2 +BITMAP +0020 +4420 +2BFE +1020 +29FC +4824 +89FC +0920 +19FE +2822 +482A +8854 +0850 +0888 +5104 +2202 +ENDCHAR +STARTCHAR uni3E6C +ENCODING 15980 +BBX 15 16 0 -2 +BITMAP +0040 +8840 +5FFE +2040 +5040 +97FC +1444 +1444 +37FC +5040 +9240 +1140 +1080 +1140 +A230 +4C0E +ENDCHAR +STARTCHAR uni3E6D +ENCODING 15981 +BBX 15 16 0 -2 +BITMAP +0020 +4420 +29FC +1124 +2924 +49FC +8924 +0924 +19FC +2820 +4824 +8818 +0832 +08CA +5306 +2002 +ENDCHAR +STARTCHAR uni3E6E +ENCODING 15982 +BBX 15 15 0 -2 +BITMAP +45FE +2820 +1020 +2840 +49FC +8904 +0904 +1904 +29FC +4904 +8904 +0904 +0904 +51FC +2104 +ENDCHAR +STARTCHAR uni3E6F +ENCODING 15983 +BBX 15 16 0 -2 +BITMAP +0090 +4490 +2890 +1110 +29FE +4B10 +8D10 +0938 +1938 +2954 +4954 +8992 +0910 +0910 +5110 +2110 +ENDCHAR +STARTCHAR uni3E70 +ENCODING 15984 +BBX 15 16 0 -2 +BITMAP +0040 +4444 +2A44 +1148 +2950 +4840 +8FFE +0890 +1890 +2890 +4890 +8892 +0912 +0912 +520E +2400 +ENDCHAR +STARTCHAR uni3E71 +ENCODING 15985 +BBX 15 15 0 -2 +BITMAP +45FC +2904 +1104 +2904 +49FC +8820 +0820 +1920 +293C +4920 +8920 +0AA0 +0A60 +543E +2800 +ENDCHAR +STARTCHAR uni3E72 +ENCODING 15986 +BBX 15 16 0 -2 +BITMAP +0020 +4422 +29FA +1024 +2824 +4BFE +8810 +0820 +19FC +2888 +4910 +8AFE +0C10 +0810 +5050 +2020 +ENDCHAR +STARTCHAR uni3E73 +ENCODING 15987 +BBX 15 15 0 -2 +BITMAP +47FE +2840 +1040 +29FC +4884 +8884 +0BFE +1800 +2800 +49FC +8904 +0904 +0904 +51FC +2104 +ENDCHAR +STARTCHAR uni3E74 +ENCODING 15988 +BBX 15 15 0 -2 +BITMAP +45FE +2820 +1020 +29FC +4924 +8924 +09FC +1924 +2924 +49FC +8920 +08A0 +0840 +50B0 +230E +ENDCHAR +STARTCHAR uni3E75 +ENCODING 15989 +BBX 15 15 0 -2 +BITMAP +45FE +2800 +1092 +2924 +4A48 +8924 +0892 +1800 +29FE +4820 +8820 +0820 +0820 +53FE +2000 +ENDCHAR +STARTCHAR uni3E76 +ENCODING 15990 +BBX 15 15 0 -2 +BITMAP +8806 +53B8 +2088 +5088 +9108 +113E +1388 +3088 +5288 +9288 +113E +1100 +1280 +A47E +4800 +ENDCHAR +STARTCHAR uni3E77 +ENCODING 15991 +BBX 15 16 0 -2 +BITMAP +4210 +2414 +1812 +2412 +5210 +10FE +FF10 +2010 +2810 +7E28 +AA28 +2A28 +2A44 +2E44 +0884 +0902 +ENDCHAR +STARTCHAR uni3E78 +ENCODING 15992 +BBX 15 16 0 -2 +BITMAP +0020 +4440 +29FC +1104 +2904 +49FC +8904 +0904 +19FC +2850 +4850 +8850 +0892 +0892 +510E +2200 +ENDCHAR +STARTCHAR uni3E79 +ENCODING 15993 +BBX 15 16 0 -2 +BITMAP +0040 +8820 +53FE +2220 +52FC +9224 +1224 +13FE +3224 +5224 +92FC +1220 +1250 +1450 +A488 +4906 +ENDCHAR +STARTCHAR uni3E7A +ENCODING 15994 +BBX 15 16 0 -2 +BITMAP +0020 +4422 +2BB4 +10A8 +28A8 +4924 +8AA2 +0840 +19FC +2904 +4904 +89FC +0904 +0904 +51FC +2104 +ENDCHAR +STARTCHAR uni3E7B +ENCODING 15995 +BBX 15 16 0 -2 +BITMAP +001C +45E0 +2820 +1020 +2BFE +48A8 +8924 +0A42 +1840 +2BFE +4888 +8908 +08D0 +0830 +5048 +2184 +ENDCHAR +STARTCHAR uni3E7C +ENCODING 15996 +BBX 15 16 0 -2 +BITMAP +0080 +4480 +28FE +1102 +2A42 +4A4A +8952 +0842 +1BFE +2842 +48E2 +8952 +0A4A +0842 +5054 +2008 +ENDCHAR +STARTCHAR uni3E7D +ENCODING 15997 +BBX 15 16 0 -2 +BITMAP +0050 +4448 +285E +13E4 +2828 +4832 +88CA +0F06 +1850 +2848 +485E +8BE4 +0828 +0832 +50CA +2706 +ENDCHAR +STARTCHAR uni3E7E +ENCODING 15998 +BBX 15 16 0 -2 +BITMAP +0110 +8910 +53D8 +2254 +5452 +9A90 +1110 +12FE +3C00 +5000 +93F8 +1208 +1208 +1208 +A3F8 +4208 +ENDCHAR +STARTCHAR uni3E7F +ENCODING 15999 +BBX 15 16 0 -2 +BITMAP +0020 +4420 +283E +1020 +29FC +4904 +89FC +0904 +19FC +2924 +4820 +8BFE +0820 +0820 +5020 +2020 +ENDCHAR +STARTCHAR uni3E80 +ENCODING 16000 +BBX 15 16 0 -2 +BITMAP +0080 +4480 +28FC +1154 +2A54 +48A4 +8924 +0A44 +1894 +2908 +4840 +88A4 +0AAA +0A8A +5478 +2000 +ENDCHAR +STARTCHAR uni3E81 +ENCODING 16001 +BBX 15 16 0 -2 +BITMAP +0092 +4524 +2A48 +1124 +2892 +4840 +8880 +0BFE +1A02 +2A8A +4A52 +8A22 +0A52 +0A8A +53FE +2202 +ENDCHAR +STARTCHAR uni3E82 +ENCODING 16002 +BBX 15 16 0 -2 +BITMAP +0014 +8812 +5010 +27FE +5410 +9410 +15D0 +1412 +3412 +55D4 +9554 +1548 +15DA +142A +A846 +5082 +ENDCHAR +STARTCHAR uni3E83 +ENCODING 16003 +BBX 15 15 1 -1 +BITMAP +0910 +8910 +57FE +2110 +2110 +5200 +93FC +1404 +35E4 +5924 +9124 +1124 +11E4 +2004 +C038 +ENDCHAR +STARTCHAR uni3E84 +ENCODING 16004 +BBX 15 16 0 -2 +BITMAP +0040 +44A0 +2910 +1208 +2DF6 +4800 +8BC4 +0A54 +1A54 +2BD4 +4A54 +8A54 +0BD4 +0A44 +5254 +22C8 +ENDCHAR +STARTCHAR uni3E85 +ENCODING 16005 +BBX 15 16 0 -2 +BITMAP +0080 +8880 +51FC +2204 +5408 +9BFE +1200 +1280 +32FC +5320 +9220 +13FE +1420 +1450 +A888 +5306 +ENDCHAR +STARTCHAR uni3E86 +ENCODING 16006 +BBX 15 16 0 -2 +BITMAP +0210 +4510 +287E +1310 +2928 +49A8 +8944 +0800 +19FC +2904 +4924 +8924 +0924 +0850 +5088 +2304 +ENDCHAR +STARTCHAR uni3E87 +ENCODING 16007 +BBX 15 16 0 -2 +BITMAP +0010 +9014 +5FD2 +2912 +6910 +A97E +2B90 +2A90 +6A90 +AB98 +2928 +2928 +2924 +2FC4 +A044 +4082 +ENDCHAR +STARTCHAR uni3E88 +ENCODING 16008 +BBX 15 16 0 -2 +BITMAP +0020 +4524 +2924 +11FC +2820 +4BFE +8800 +0820 +19FC +2924 +4924 +89FC +0820 +0824 +53FE +2102 +ENDCHAR +STARTCHAR uni3E89 +ENCODING 16009 +BBX 15 16 0 -2 +BITMAP +1000 +1078 +FE48 +1048 +7C48 +0086 +FE00 +82FC +7C44 +0044 +1428 +FE28 +1010 +2828 +4444 +8182 +ENDCHAR +STARTCHAR uni3E8A +ENCODING 16010 +BBX 15 16 0 -2 +BITMAP +0104 +4488 +2800 +13FE +2820 +4820 +89FC +0820 +1820 +2BFE +4840 +8824 +0AA2 +0A8A +5488 +2078 +ENDCHAR +STARTCHAR uni3E8B +ENCODING 16011 +BBX 15 16 0 -2 +BITMAP +0120 +8910 +5208 +2486 +5910 +93F8 +1008 +1000 +37BC +5084 +94A4 +1294 +14A4 +1084 +A294 +4108 +ENDCHAR +STARTCHAR uni3E8C +ENCODING 16012 +BBX 15 16 0 -2 +BITMAP +0110 +88A0 +5000 +27FE +50A0 +93F8 +10A8 +17FE +30A8 +53F8 +90A0 +11B0 +12A8 +14A6 +A0A0 +40A0 +ENDCHAR +STARTCHAR uni3E8D +ENCODING 16013 +BBX 15 16 0 -2 +BITMAP +0040 +8820 +53FE +2202 +5414 +91E0 +1100 +1100 +31FC +5110 +9110 +17FE +1000 +1090 +A108 +4204 +ENDCHAR +STARTCHAR uni3E8E +ENCODING 16014 +BBX 15 16 0 -2 +BITMAP +0020 +97FE +5420 +25FC +5424 +97FE +1424 +15FC +3420 +55FC +9524 +15FC +1524 +19FC +A924 +512C +ENDCHAR +STARTCHAR uni3E8F +ENCODING 16015 +BBX 15 16 0 -2 +BITMAP +0020 +45FC +2924 +13FE +2924 +49FC +8820 +09FC +1924 +29FC +4840 +8BFE +0888 +09D0 +5070 +238C +ENDCHAR +STARTCHAR uni3E90 +ENCODING 16016 +BBX 15 16 0 -2 +BITMAP +0124 +4648 +2924 +1000 +29FC +4924 +89FC +0924 +19FC +2820 +4BFE +8870 +08A8 +0924 +5622 +2020 +ENDCHAR +STARTCHAR uni3E91 +ENCODING 16017 +BBX 15 16 0 -2 +BITMAP +0040 +4488 +29FC +1108 +2A52 +4BFE +8850 +0988 +1E26 +28C0 +4B10 +8864 +0B88 +0830 +50C0 +2700 +ENDCHAR +STARTCHAR uni3E92 +ENCODING 16018 +BBX 15 15 0 -2 +BITMAP +97BC +5084 +24A4 +5294 +94A4 +1050 +1188 +3626 +50C0 +9310 +1064 +1388 +1030 +A0C0 +4700 +ENDCHAR +STARTCHAR uni3E93 +ENCODING 16019 +BBX 15 16 0 -2 +BITMAP +0020 +47FE +2820 +11FC +2820 +4BFE +8800 +09FC +1904 +29FC +4904 +89FC +0904 +09FC +5088 +2104 +ENDCHAR +STARTCHAR uni3E94 +ENCODING 16020 +BBX 15 15 1 -1 +BITMAP +0830 +8BC8 +5244 +2424 +23F8 +5208 +93FC +1204 +3204 +53FE +9402 +142A +1A96 +2242 +C40C +ENDCHAR +STARTCHAR uni3E95 +ENCODING 16021 +BBX 15 16 0 -2 +BITMAP +0078 +97C0 +5248 +2150 +57FC +9150 +1248 +1406 +33F8 +5248 +9248 +13F8 +1248 +1248 +A3F8 +4208 +ENDCHAR +STARTCHAR uni3E96 +ENCODING 16022 +BBX 15 16 0 -2 +BITMAP +0008 +9788 +5088 +2110 +6FDE +A494 +24A4 +2794 +6494 +A794 +2494 +24C8 +2788 +2C94 +A0A4 +40C2 +ENDCHAR +STARTCHAR uni3E97 +ENCODING 16023 +BBX 15 15 0 -2 +BITMAP +47DE +2A52 +1252 +2BDE +4800 +89FC +0924 +19FC +2924 +49FC +8820 +0BFE +0820 +5020 +2020 +ENDCHAR +STARTCHAR uni3E98 +ENCODING 16024 +BBX 15 16 0 -2 +BITMAP +0090 +4488 +29FE +1110 +2B10 +4DFE +8910 +0910 +19FE +2910 +4910 +89FE +0900 +0AA4 +5252 +2452 +ENDCHAR +STARTCHAR uni3E99 +ENCODING 16025 +BBX 15 16 0 -2 +BITMAP +0080 +8840 +57FE +2402 +51F8 +9148 +17FE +1228 +33FC +5010 +93F8 +1248 +1248 +12A8 +A110 +4608 +ENDCHAR +STARTCHAR uni3E9A +ENCODING 16026 +BBX 15 16 0 -2 +BITMAP +0010 +9410 +527C +2010 +50FE +9044 +1628 +12FE +3210 +527C +9210 +12FE +1210 +1210 +A5FE +4800 +ENDCHAR +STARTCHAR uni3E9B +ENCODING 16027 +BBX 15 16 0 -2 +BITMAP +03FC +8A40 +53F8 +2240 +53F8 +9240 +13FC +1004 +3554 +5008 +9110 +1FFE +1110 +1110 +A210 +4410 +ENDCHAR +STARTCHAR uni3E9C +ENCODING 16028 +BBX 15 16 0 -2 +BITMAP +0090 +8BFC +5294 +23FC +5294 +93FC +1000 +13FC +3200 +52F8 +9200 +13FE +1520 +1514 +A548 +4986 +ENDCHAR +STARTCHAR uni3E9D +ENCODING 16029 +BBX 15 16 0 -2 +BITMAP +0010 +97D0 +5510 +27DE +5450 +97E8 +1504 +17C4 +3000 +53F8 +92A8 +12A8 +12A8 +12A8 +AFFE +4000 +ENDCHAR +STARTCHAR uni3E9E +ENCODING 16030 +BBX 15 16 0 -2 +BITMAP +0140 +8A4C +5264 +2244 +534C +9264 +12A4 +13AC +32A4 +52A4 +97FE +1000 +1110 +1108 +A204 +4404 +ENDCHAR +STARTCHAR uni3E9F +ENCODING 16031 +BBX 15 15 0 -2 +BITMAP +97BC +5084 +24A4 +5294 +94A4 +1120 +1210 +37FC +5A20 +93FC +1220 +13FC +1220 +A3FE +4200 +ENDCHAR +STARTCHAR uni3EA0 +ENCODING 16032 +BBX 15 16 0 -2 +BITMAP +0080 +9040 +5FFE +2912 +6208 +A584 +2E0E +2A74 +6A54 +AB54 +2AD4 +2A54 +2A52 +2D54 +B75C +4084 +ENDCHAR +STARTCHAR uni3EA1 +ENCODING 16033 +BBX 15 15 0 -2 +BITMAP +97FE +5444 +2598 +6488 +A7DE +2488 +25DC +66AA +A488 +2420 +2520 +253C +2920 +A920 +57FE +ENDCHAR +STARTCHAR uni3EA2 +ENCODING 16034 +BBX 15 16 0 -2 +BITMAP +07FC +9040 +57FE +2442 +5B5C +9040 +175C +1120 +33FC +5620 +9BFC +1220 +13FC +1220 +A3FE +4200 +ENDCHAR +STARTCHAR uni3EA3 +ENCODING 16035 +BBX 15 16 0 -2 +BITMAP +0108 +91EC +510A +27E8 +6528 +A5DE +2728 +24EA +640A +A7EA +240C +27EC +2A2A +2BEA +B156 +47E2 +ENDCHAR +STARTCHAR uni3EA4 +ENCODING 16036 +BBX 15 16 0 -2 +BITMAP +0148 +894C +52AA +2008 +57FE +9148 +1368 +114A +336A +514C +936C +1148 +116A +139A +A026 +4042 +ENDCHAR +STARTCHAR uni3EA5 +ENCODING 16037 +BBX 15 16 0 -2 +BITMAP +01F0 +8A10 +57FC +2204 +53FC +9224 +13B8 +1222 +31FE +5210 +97FC +1244 +13FC +10D0 +A14A +463E +ENDCHAR +STARTCHAR uni3EA6 +ENCODING 16038 +BBX 15 16 0 -2 +BITMAP +0044 +9F44 +5AAA +2AEE +6E44 +AAAA +2AEE +2E00 +6A28 +AAAA +2BAA +2EEE +3A28 +2228 +A248 +4288 +ENDCHAR +STARTCHAR uni3EA7 +ENCODING 16039 +BBX 14 16 0 -2 +BITMAP +07BC +94A4 +57BC +2000 +57FC +9080 +13F8 +1208 +33F8 +5208 +93F8 +1110 +1208 +17BC +A4A4 +47BC +ENDCHAR +STARTCHAR uni3EA8 +ENCODING 16040 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FC20 +1020 +1020 +1040 +7C40 +1040 +1080 +1088 +1084 +1D04 +E3FE +4102 +0002 +ENDCHAR +STARTCHAR uni3EA9 +ENCODING 16041 +BBX 14 16 0 -2 +BITMAP +0004 +0004 +FE84 +1084 +1084 +1084 +7C84 +1084 +108C +1094 +10E4 +1E84 +F004 +4004 +0004 +0004 +ENDCHAR +STARTCHAR uni3EAA +ENCODING 16042 +BBX 14 16 0 -2 +BITMAP +0040 +0040 +FE40 +1040 +1040 +1050 +7C48 +1044 +1044 +1040 +1040 +1E40 +F040 +4040 +0040 +0040 +ENDCHAR +STARTCHAR uni3EAB +ENCODING 16043 +BBX 13 16 0 -2 +BITMAP +0008 +0008 +FE08 +1088 +1088 +1088 +7C88 +1088 +1088 +1088 +1088 +1E08 +F008 +4008 +0028 +0010 +ENDCHAR +STARTCHAR uni3EAC +ENCODING 16044 +BBX 15 15 0 -2 +BITMAP +01F0 +FD10 +1110 +1110 +1110 +7D90 +1150 +1150 +1110 +1110 +1D12 +E212 +4212 +040E +0800 +ENDCHAR +STARTCHAR uni3EAD +ENCODING 16045 +BBX 15 15 0 -2 +BITMAP +01FC +FC04 +1008 +1010 +1020 +7C20 +13FE +1020 +1020 +1020 +1C20 +E020 +4020 +00A0 +0040 +ENDCHAR +STARTCHAR uni3EAE +ENCODING 16046 +BBX 15 15 0 -2 +BITMAP +01FC +FC00 +1000 +1000 +13FE +1040 +7C40 +1080 +10FC +1004 +1004 +1C04 +E004 +4028 +0010 +ENDCHAR +STARTCHAR uni3EAF +ENCODING 16047 +BBX 15 15 0 -2 +BITMAP +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +0000 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3EB0 +ENCODING 16048 +BBX 15 15 0 -2 +BITMAP +03FE +FC20 +1020 +1020 +11FC +7D24 +1124 +1124 +1124 +1124 +1D34 +E128 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni3EB1 +ENCODING 16049 +BBX 15 15 0 -1 +BITMAP +1000 +17F8 +2110 +613C +A104 +2204 +2414 +2808 +2000 +7FFC +0100 +3FF8 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni3EB2 +ENCODING 16050 +BBX 15 14 0 -1 +BITMAP +01F8 +FC48 +1048 +1048 +1048 +7C48 +11F8 +1088 +1088 +1088 +1C88 +E088 +4088 +03FE +ENDCHAR +STARTCHAR uni3EB3 +ENCODING 16051 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FE20 +103E +1020 +1020 +7C20 +11FC +1084 +1088 +1048 +1E50 +F020 +4050 +0188 +0606 +ENDCHAR +STARTCHAR uni3EB4 +ENCODING 16052 +BBX 15 16 0 -2 +BITMAP +0020 +0028 +FE24 +1024 +1020 +11FE +7C20 +1020 +1020 +1050 +1050 +1E50 +F088 +4088 +0104 +0202 +ENDCHAR +STARTCHAR uni3EB5 +ENCODING 16053 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +FC80 +10FC +1104 +1108 +1240 +7C40 +1040 +10A0 +10A0 +1110 +1D10 +E208 +4404 +0802 +ENDCHAR +STARTCHAR uni3EB6 +ENCODING 16054 +BBX 15 16 0 -2 +BITMAP +0008 +0088 +FE48 +1048 +1008 +1088 +7C48 +1048 +1008 +100E +11F8 +1E08 +F008 +4008 +0008 +0008 +ENDCHAR +STARTCHAR uni3EB7 +ENCODING 16055 +BBX 15 16 0 -2 +BITMAP +0020 +0028 +FC24 +1020 +11FC +1020 +7C70 +1070 +10A8 +10A8 +1124 +1D24 +E222 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni3EB8 +ENCODING 16056 +BBX 15 15 0 -1 +BITMAP +0800 +09F0 +1110 +3190 +5150 +9152 +1112 +120E +0400 +7FFC +0100 +3FF8 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni3EB9 +ENCODING 16057 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC40 +1088 +1104 +13FE +7C02 +1088 +1088 +13FE +1088 +1C88 +E108 +4108 +0208 +0408 +ENDCHAR +STARTCHAR uni3EBA +ENCODING 16058 +BBX 14 15 0 -2 +BITMAP +01FC +FD04 +1104 +1104 +11FC +1104 +7D04 +1104 +11FC +1104 +1104 +1D04 +E104 +41FC +0104 +ENDCHAR +STARTCHAR uni3EBB +ENCODING 16059 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC20 +13FE +1020 +1020 +7DFC +1124 +1124 +1124 +1124 +1D34 +E128 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni3EBC +ENCODING 16060 +BBX 15 15 0 -2 +BITMAP +03FE +FC22 +1024 +1020 +1020 +7D20 +113C +1120 +1120 +1120 +1D20 +E2A0 +4260 +043E +0800 +ENDCHAR +STARTCHAR uni3EBD +ENCODING 16061 +BBX 15 14 0 -1 +BITMAP +01FE +FC10 +1010 +1020 +1020 +7C68 +10A4 +1122 +1222 +1020 +1C20 +E020 +4000 +03FE +ENDCHAR +STARTCHAR uni3EBE +ENCODING 16062 +BBX 14 15 0 -2 +BITMAP +03FC +FA04 +2204 +2204 +22F4 +FA94 +2294 +2294 +2294 +22F4 +3A94 +E204 +4204 +0214 +0208 +ENDCHAR +STARTCHAR uni3EBF +ENCODING 16063 +BBX 15 14 0 -1 +BITMAP +01FE +FD10 +1110 +1110 +117C +1144 +7D44 +1144 +1144 +117C +1110 +1D10 +E110 +41FE +ENDCHAR +STARTCHAR uni3EC0 +ENCODING 16064 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FBFE +2222 +2222 +23FE +2222 +FA22 +23FE +2020 +2120 +38A0 +E040 +40A0 +0118 +0606 +ENDCHAR +STARTCHAR uni3EC1 +ENCODING 16065 +BBX 14 13 0 -1 +BITMAP +FDFC +1104 +1104 +1174 +7D54 +1154 +1154 +1154 +1174 +1D04 +E104 +41FC +0104 +ENDCHAR +STARTCHAR uni3EC2 +ENCODING 16066 +BBX 15 16 0 -2 +BITMAP +0104 +0084 +FC88 +1000 +13FE +1088 +7C88 +1088 +1088 +17FE +1088 +1C88 +E108 +4108 +0208 +0408 +ENDCHAR +STARTCHAR uni3EC3 +ENCODING 16067 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +3FF8 +2448 +3FF8 +2448 +3FF8 +0000 +7FFC +0100 +0100 +3FF8 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni3EC4 +ENCODING 16068 +BBX 15 16 0 -2 +BITMAP +0008 +003C +FDC0 +1000 +1000 +13FE +7C20 +1020 +1120 +113C +1120 +1D20 +E2A0 +4260 +043E +0800 +ENDCHAR +STARTCHAR uni3EC5 +ENCODING 16069 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1088 +1104 +1202 +10F8 +7C00 +1000 +13FE +1020 +1040 +1C88 +E104 +43FE +0102 +ENDCHAR +STARTCHAR uni3EC6 +ENCODING 16070 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +F908 +2204 +27FE +2002 +2000 +FBFC +2204 +23FC +2204 +23FC +3A04 +E204 +0214 +0208 +ENDCHAR +STARTCHAR uni3EC7 +ENCODING 16071 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FC50 +1088 +1104 +1202 +7DFC +1020 +1020 +1020 +11FC +1C20 +E020 +4020 +03FE +ENDCHAR +STARTCHAR uni3EC8 +ENCODING 16072 +BBX 15 16 0 -2 +BITMAP +0008 +001C +FDE0 +1100 +1100 +11FE +7D00 +1100 +117C +1144 +1144 +1D44 +E144 +427C +0244 +0400 +ENDCHAR +STARTCHAR uni3EC9 +ENCODING 16073 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +F920 +213C +2120 +2120 +27FE +F800 +2020 +2124 +2124 +3A28 +E410 +4020 +00C0 +0700 +ENDCHAR +STARTCHAR uni3ECA +ENCODING 16074 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +FCF8 +1108 +1210 +11FC +1124 +7D24 +1124 +11FC +1050 +1050 +1C90 +E092 +4112 +020E +ENDCHAR +STARTCHAR uni3ECB +ENCODING 16075 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FDFE +1020 +1020 +11FC +7D24 +1124 +11FC +1020 +1070 +1CA8 +E124 +4222 +0020 +0020 +ENDCHAR +STARTCHAR uni3ECC +ENCODING 16076 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1088 +1104 +12FA +7C20 +1020 +13FE +1020 +1128 +1D24 +E222 +4422 +00A0 +0040 +ENDCHAR +STARTCHAR uni3ECD +ENCODING 16077 +BBX 15 15 0 -2 +BITMAP +01FC +FD04 +1104 +11FC +1000 +7C00 +11FC +1020 +1020 +13FE +1C20 +E050 +4088 +0104 +0202 +ENDCHAR +STARTCHAR uni3ECE +ENCODING 16078 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +FD7C +1110 +1110 +7D7C +1110 +1D10 +E2FE +4280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni3ECF +ENCODING 16079 +BBX 15 15 0 -2 +BITMAP +01FC +FC04 +1004 +10FC +1004 +7C04 +11FC +1020 +10A4 +10A4 +1D28 +E050 +4088 +0104 +0202 +ENDCHAR +STARTCHAR uni3ED0 +ENCODING 16080 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FC88 +1104 +13FE +1002 +1088 +7D44 +1242 +10F8 +1188 +1250 +1C20 +E050 +4188 +0606 +ENDCHAR +STARTCHAR uni3ED1 +ENCODING 16081 +BBX 15 16 0 -2 +BITMAP +001C +00E0 +FC20 +11FE +1070 +10A8 +7D24 +1222 +10F8 +1010 +1020 +1DFE +E020 +4020 +00A0 +0040 +ENDCHAR +STARTCHAR uni3ED2 +ENCODING 16082 +BBX 15 15 0 -2 +BITMAP +03FE +FA02 +221A +22E2 +2222 +2222 +FBFE +2222 +2272 +22AA +3B26 +E222 +4222 +03FE +0202 +ENDCHAR +STARTCHAR uni3ED3 +ENCODING 16083 +BBX 15 15 0 -2 +BITMAP +07E0 +FA5E +2252 +2252 +23D2 +2252 +FA54 +23D4 +2254 +2248 +3AE8 +E754 +4054 +0062 +0040 +ENDCHAR +STARTCHAR uni3ED4 +ENCODING 16084 +BBX 15 15 0 -1 +BITMAP +0008 +003C +FDE0 +1020 +13FE +10A8 +10A8 +7CA8 +13FE +10A8 +10A8 +13FE +1C20 +E020 +41FC +ENDCHAR +STARTCHAR uni3ED5 +ENCODING 16085 +BBX 15 15 0 -2 +BITMAP +03FE +FA02 +2202 +23FE +2210 +2292 +FA92 +2292 +22FE +2210 +3A92 +E292 +4492 +04FE +0802 +ENDCHAR +STARTCHAR uni3ED6 +ENCODING 16086 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FBF8 +2048 +2048 +27FE +2048 +F848 +23F8 +2444 +22E8 +3950 +E248 +4446 +0140 +0080 +ENDCHAR +STARTCHAR uni3ED7 +ENCODING 16087 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +7C7C +0440 +3C78 +0440 +7C7C +0440 +0440 +7FFC +0100 +3FF8 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni3ED8 +ENCODING 16088 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2222 +2020 +21FC +2124 +F924 +21FC +2124 +2124 +39FC +E124 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni3ED9 +ENCODING 16089 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2080 +2104 +23FE +F802 +21FC +2104 +21FC +2104 +39FC +E104 +4104 +0114 +0108 +ENDCHAR +STARTCHAR uni3EDA +ENCODING 16090 +BBX 15 15 0 -2 +BITMAP +03DE +FA52 +2252 +2252 +23DE +2252 +FA52 +2252 +23DE +2252 +3A52 +E252 +4252 +0552 +08A6 +ENDCHAR +STARTCHAR uni3EDB +ENCODING 16091 +BBX 14 15 0 -2 +BITMAP +01F8 +FD08 +1108 +11F8 +1108 +7D08 +11F8 +1080 +11FC +1254 +1C94 +E124 +4244 +0094 +0108 +ENDCHAR +STARTCHAR uni3EDC +ENCODING 16092 +BBX 15 16 0 -2 +BITMAP +0088 +0088 +F888 +2088 +2154 +2222 +2442 +F820 +2020 +2120 +213C +3920 +E2A0 +4260 +043E +0800 +ENDCHAR +STARTCHAR uni3EDD +ENCODING 16093 +BBX 15 16 0 -2 +BITMAP +0082 +0082 +FBE2 +2082 +208A +23EA +22AA +FAAA +23EA +208A +21CA +3AAA +E4A2 +4082 +008A +0084 +ENDCHAR +STARTCHAR uni3EDE +ENCODING 16094 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2202 +23FE +2200 +FA00 +23FE +2352 +2552 +3DFE +E552 +4552 +0952 +0106 +ENDCHAR +STARTCHAR uni3EDF +ENCODING 16095 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FBFE +2080 +21FC +2220 +25FE +F800 +21FC +2104 +21FC +2104 +39FC +E104 +0114 +0108 +ENDCHAR +STARTCHAR uni3EE0 +ENCODING 16096 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2088 +2104 +FA22 +2028 +2024 +23FE +2020 +3850 +E050 +4088 +0104 +0202 +ENDCHAR +STARTCHAR uni3EE1 +ENCODING 16097 +BBX 15 16 0 -2 +BITMAP +0048 +0148 +FD48 +13FE +1148 +1148 +7D78 +1100 +11FE +1020 +13FE +1C70 +E0A8 +4124 +0622 +0020 +ENDCHAR +STARTCHAR uni3EE2 +ENCODING 16098 +BBX 15 16 0 -2 +BITMAP +0210 +0110 +F910 +27BE +2228 +2248 +23AA +FAAE +22BA +22EA +22AE +3AA8 +E4AA +44A2 +09A2 +101E +ENDCHAR +STARTCHAR uni3EE3 +ENCODING 16099 +BBX 15 15 0 -1 +BITMAP +0088 +0088 +FBFE +2088 +20F8 +2088 +20F8 +F888 +2088 +23FE +2100 +3948 +E184 +4100 +01FE +ENDCHAR +STARTCHAR uni3EE4 +ENCODING 16100 +BBX 15 16 0 -2 +BITMAP +0088 +0088 +FBFE +2088 +2100 +21FC +2104 +FA04 +21F4 +2114 +2114 +39F4 +E114 +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni3EE5 +ENCODING 16101 +BBX 15 16 0 -2 +BITMAP +0088 +0048 +FC50 +13FE +1050 +1050 +7DFC +1154 +1154 +118C +1104 +1DFC +E104 +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni3EE6 +ENCODING 16102 +BBX 15 16 0 -2 +BITMAP +01FC +0124 +FD24 +11FC +1124 +1124 +7DFC +1020 +1020 +13FE +1222 +1E2A +E2FA +420A +0202 +0206 +ENDCHAR +STARTCHAR uni3EE7 +ENCODING 16103 +BBX 15 16 0 -2 +BITMAP +0104 +0104 +F9DE +2244 +2554 +209E +2104 +FA24 +2424 +23FE +2070 +38A8 +E124 +4622 +0020 +0020 +ENDCHAR +STARTCHAR uni3EE8 +ENCODING 16104 +BBX 15 14 0 -1 +BITMAP +7EFC +4844 +7E54 +4328 +7E90 +4828 +7EC6 +0000 +7FFC +0100 +3FF8 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni3EE9 +ENCODING 16105 +BBX 15 16 0 -2 +BITMAP +0110 +00A0 +F800 +27FE +20A0 +23F8 +F8A8 +27FE +20A8 +23F8 +20A0 +39B0 +E2A8 +4CA6 +00A0 +00A0 +ENDCHAR +STARTCHAR uni3EEA +ENCODING 16106 +BBX 15 16 0 -2 +BITMAP +00A0 +0090 +FDFE +1320 +15FC +1120 +7DFC +1120 +11FE +1100 +13FC +1C88 +E09E +4102 +020A +0404 +ENDCHAR +STARTCHAR uni3EEB +ENCODING 16107 +BBX 15 15 0 -2 +BITMAP +01FC +FD24 +11FC +1124 +11FC +7CA8 +10A8 +13FE +10A8 +10A8 +1DFC +E020 +43FE +0020 +0020 +ENDCHAR +STARTCHAR uni3EEC +ENCODING 16108 +BBX 15 16 0 -2 +BITMAP +01FC +0020 +FBFE +2222 +21AC +2020 +F9AC +2000 +21FC +2000 +23FE +3880 +E0FC +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni3EED +ENCODING 16109 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2020 +2048 +22F2 +F924 +2252 +20F8 +2008 +2020 +3BFE +E020 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni3EEE +ENCODING 16110 +BBX 15 16 0 -2 +BITMAP +0100 +0110 +FBDC +2254 +2554 +2288 +F908 +22F4 +2402 +2000 +23FC +3840 +E150 +4248 +0544 +0080 +ENDCHAR +STARTCHAR uni3EEF +ENCODING 16111 +BBX 15 16 0 -2 +BITMAP +0040 +007C +F840 +23FE +2242 +2278 +FBC4 +223C +2208 +22F0 +2324 +3AA8 +E5FE +4420 +08A0 +0040 +ENDCHAR +STARTCHAR uni3EF0 +ENCODING 16112 +BBX 15 16 0 -2 +BITMAP +0088 +03DE +FC88 +11DC +1088 +13DE +7C88 +1000 +13FC +1004 +1004 +1DFC +E004 +4004 +03FC +0004 +ENDCHAR +STARTCHAR uni3EF1 +ENCODING 16113 +BBX 15 16 0 -2 +BITMAP +0020 +047C +FA84 +2148 +2030 +20CE +2610 +FA7C +2210 +227C +2210 +3AFE +E210 +4210 +05FE +0800 +ENDCHAR +STARTCHAR uni3EF2 +ENCODING 16114 +BBX 15 16 0 -2 +BITMAP +0020 +01FC +FD24 +13FE +1124 +11FC +7C20 +11FC +1124 +11FC +1040 +1DFE +E088 +41D0 +0070 +038C +ENDCHAR +STARTCHAR uni3EF3 +ENCODING 16115 +BBX 15 16 0 -2 +BITMAP +0088 +0088 +FBFE +2088 +2042 +20E2 +FB82 +208A +208A +27EA +218A +39CA +E2AA +4482 +008A +0084 +ENDCHAR +STARTCHAR uni3EF4 +ENCODING 16116 +BBX 15 15 0 -2 +BITMAP +01F8 +FD08 +11F8 +1108 +11F8 +7C00 +13FC +1294 +13FC +1000 +1DF8 +E090 +4060 +0198 +0606 +ENDCHAR +STARTCHAR uni3EF5 +ENCODING 16117 +BBX 15 16 0 -2 +BITMAP +03FE +0202 +FBFE +2200 +22FC +2208 +23FE +FA10 +2230 +23CE +2242 +3A84 +E4EE +4784 +0884 +018C +ENDCHAR +STARTCHAR uni3EF6 +ENCODING 16118 +BBX 15 16 0 -2 +BITMAP +0108 +01EE +FA94 +2042 +2020 +21FC +2024 +FBFE +2024 +21FC +2020 +39FE +E020 +43FE +0020 +0020 +ENDCHAR +STARTCHAR uni3EF7 +ENCODING 16119 +BBX 15 16 0 -2 +BITMAP +0208 +0208 +EFBE +4208 +4208 +4FBE +4AAA +EAAA +4AAA +4BAE +4208 +671C +CAAA +1248 +0208 +0208 +ENDCHAR +STARTCHAR uni3EF8 +ENCODING 16120 +BBX 15 15 0 -2 +BITMAP +07BC +F908 +2528 +27BC +2318 +25AA +F946 +2000 +23F8 +2208 +3A08 +E3F8 +4208 +0208 +03F8 +ENDCHAR +STARTCHAR uni3EF9 +ENCODING 16121 +BBX 15 15 0 -1 +BITMAP +FDFC +1040 +21A2 +7C54 +A5B8 +2454 +3D92 +2460 +0000 +7FFC +0100 +3FF8 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni3EFA +ENCODING 16122 +BBX 15 16 0 -2 +BITMAP +3FFE +2104 +2E38 +2210 +2FBC +2718 +2AB4 +3252 +2000 +2FFC +2080 +27F8 +20A0 +4090 +5FFE +8000 +ENDCHAR +STARTCHAR uni3EFB +ENCODING 16123 +BBX 15 16 0 -2 +BITMAP +0108 +0088 +FBC8 +2010 +23DE +2264 +23D4 +F814 +23D4 +2054 +2094 +38E8 +E388 +4094 +0294 +0122 +ENDCHAR +STARTCHAR uni3EFC +ENCODING 16124 +BBX 15 15 0 -2 +BITMAP +03FE +FC50 +13FE +1252 +13FE +7C00 +11FC +1104 +11FC +1104 +1DFC +E020 +43FE +0020 +0020 +ENDCHAR +STARTCHAR uni3EFD +ENCODING 16125 +BBX 15 16 0 -2 +BITMAP +00A0 +0090 +FDFE +1320 +11FC +1120 +7DFC +1120 +11FE +1100 +13DE +1E52 +E252 +4272 +0202 +0206 +ENDCHAR +STARTCHAR uni3EFE +ENCODING 16126 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +1048 +24FE +7990 +10FC +2290 +7CFC +0890 +30FE +C080 +7FFC +0100 +3FF8 +0120 +FFFE +ENDCHAR +STARTCHAR uni3EFF +ENCODING 16127 +BBX 14 15 0 -2 +BITMAP +03F8 +FAA8 +22A8 +23F8 +2100 +FBFC +2484 +23E4 +22A4 +22A4 +3BE4 +E094 +47F4 +0014 +0008 +ENDCHAR +STARTCHAR uni3F00 +ENCODING 16128 +BBX 15 16 0 -2 +BITMAP +0010 +0410 +FA7C +2010 +20FE +2044 +2628 +FAFE +2210 +227C +2210 +3AFE +E210 +4210 +05FE +0800 +ENDCHAR +STARTCHAR uni3F01 +ENCODING 16129 +BBX 15 16 0 -2 +BITMAP +0104 +0088 +FBFE +2020 +21FC +2020 +FBFE +2054 +2192 +2090 +23FE +3890 +E0D4 +438A +0096 +01A2 +ENDCHAR +STARTCHAR uni3F02 +ENCODING 16130 +BBX 15 15 0 -1 +BITMAP +0A00 +33B8 +2208 +3BB8 +2088 +3AB8 +2288 +FFFE +8002 +7FFC +0100 +3FF8 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni3F03 +ENCODING 16131 +BBX 15 16 0 -2 +BITMAP +0124 +0248 +F924 +2000 +23FC +2294 +2264 +FA94 +23FC +2248 +2368 +3A48 +E36A +424A +0246 +0362 +ENDCHAR +STARTCHAR uni3F04 +ENCODING 16132 +BBX 15 16 0 -2 +BITMAP +0124 +0124 +FAAA +23AE +2124 +22AA +FBAE +2024 +27FE +2010 +27D4 +3D54 +E7CA +454A +07D6 +0022 +ENDCHAR +STARTCHAR uni3F05 +ENCODING 16133 +BBX 15 16 0 -2 +BITMAP +0020 +0010 +FBFE +2244 +22FE +2244 +23FE +FA10 +22FE +2292 +22FE +3A92 +E2FE +4200 +0244 +0482 +ENDCHAR +STARTCHAR uni3F06 +ENCODING 16134 +BBX 15 15 0 -1 +BITMAP +0088 +02AA +FADC +2488 +2154 +2222 +27FE +FC02 +21F8 +2040 +2040 +39F8 +E050 +4048 +03FE +ENDCHAR +STARTCHAR uni3F07 +ENCODING 16135 +BBX 15 16 0 -2 +BITMAP +0020 +0222 +FBFE +2090 +21FE +2310 +25FE +F910 +21FE +2110 +21FE +2100 +3BDE +E252 +0272 +0206 +ENDCHAR +STARTCHAR uni3F08 +ENCODING 16136 +BBX 15 15 0 -2 +BITMAP +07FC +F4A4 +24A4 +27FC +2210 +22A8 +F4BE +2F68 +223C +24A8 +2FBC +3028 +CAA8 +0ABE +0020 +ENDCHAR +STARTCHAR uni3F09 +ENCODING 16137 +BBX 15 16 0 -2 +BITMAP +0210 +0710 +3810 +2A7C +2A54 +2A54 +2A10 +2A28 +2A28 +2948 +294A +2886 +2840 +4A30 +4D0E +8900 +ENDCHAR +STARTCHAR uni3F0A +ENCODING 16138 +BBX 15 16 0 -2 +BITMAP +1008 +101C +10E8 +FEA8 +10A8 +54A8 +54A8 +54A8 +54A8 +7CA4 +10A4 +10A4 +14A2 +1928 +1134 +0224 +ENDCHAR +STARTCHAR uni3F0B +ENCODING 16139 +BBX 15 16 0 -2 +BITMAP +1008 +101C +10E8 +10A8 +FEA8 +10A8 +10A8 +10A8 +7CA8 +44A4 +44A4 +44A4 +44A2 +7D28 +4534 +0224 +ENDCHAR +STARTCHAR uni3F0C +ENCODING 16140 +BBX 15 16 0 -2 +BITMAP +0808 +1C1C +70E8 +50A8 +50A8 +50A8 +58A8 +54A8 +54A8 +54A4 +50A4 +50A4 +58A2 +5528 +9D34 +0624 +ENDCHAR +STARTCHAR uni3F0D +ENCODING 16141 +BBX 15 16 0 -2 +BITMAP +1008 +101C +10E8 +FEA8 +10A8 +7CA8 +10A8 +FEA8 +30A8 +38A4 +54A4 +54A4 +90A2 +1128 +1134 +1224 +ENDCHAR +STARTCHAR uni3F0E +ENCODING 16142 +BBX 15 16 0 -2 +BITMAP +0220 +0710 +3810 +2AFE +2A00 +2A44 +2A82 +2A28 +2A10 +2928 +2944 +2884 +2840 +4A30 +4D0E +8900 +ENDCHAR +STARTCHAR uni3F0F +ENCODING 16143 +BBX 15 16 0 -2 +BITMAP +0408 +1E1C +E0E8 +22A8 +92A8 +54A8 +48A8 +10A8 +FCA8 +24A4 +44A4 +28A4 +10A2 +2928 +4534 +8224 +ENDCHAR +STARTCHAR uni3F10 +ENCODING 16144 +BBX 15 16 0 -2 +BITMAP +0804 +040E +7F74 +4154 +4154 +7F54 +4054 +7F54 +5554 +5552 +7F52 +5552 +5550 +5594 +819A +0312 +ENDCHAR +STARTCHAR uni3F11 +ENCODING 16145 +BBX 15 16 0 -2 +BITMAP +1008 +101C +FEE8 +10A8 +FEA8 +92A8 +D6A8 +BAA8 +92A8 +FEA4 +10A4 +38A4 +54A2 +9328 +1134 +1224 +ENDCHAR +STARTCHAR uni3F12 +ENCODING 16146 +BBX 15 16 0 -2 +BITMAP +027C +0744 +387C +2A44 +2A7C +2A00 +2AFE +2A40 +2A7E +29AA +2952 +28AA +2844 +4A30 +4D0E +8900 +ENDCHAR +STARTCHAR uni3F13 +ENCODING 16147 +BBX 15 16 0 -2 +BITMAP +0888 +1C50 +7000 +53FE +5050 +51FC +5854 +57FE +5454 +55FC +5050 +50D8 +5954 +5652 +9C50 +0450 +ENDCHAR +STARTCHAR uni3F14 +ENCODING 16148 +BBX 15 16 0 -2 +BITMAP +0008 +001C +7CE8 +44A8 +7CA8 +44A8 +7CA8 +00A8 +7CA8 +54A4 +54A4 +54A4 +56A2 +F928 +0134 +0224 +ENDCHAR +STARTCHAR uni3F15 +ENCODING 16149 +BBX 15 16 0 -2 +BITMAP +1008 +921C +54E8 +FEA8 +82A8 +7CA8 +44A8 +7CA8 +00A8 +7CA4 +54A4 +7CA4 +54A2 +5528 +7D34 +4624 +ENDCHAR +STARTCHAR uni3F16 +ENCODING 16150 +BBX 15 16 0 -2 +BITMAP +11F0 +3A10 +E3E0 +A020 +A7FC +A188 +B650 +A9A8 +AE64 +A9A0 +A248 +AFBE +BAAA +AFBE +3A8A +0FBE +ENDCHAR +STARTCHAR uni3F17 +ENCODING 16151 +BBX 15 15 0 -2 +BITMAP +01FC +FE80 +1080 +1080 +10F8 +1088 +1088 +1148 +1128 +1128 +1108 +1108 +114A +518A +2106 +ENDCHAR +STARTCHAR uni3F18 +ENCODING 16152 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2100 +2100 +A900 +A9F0 +A910 +A910 +AA90 +AA50 +AA50 +BA10 +CA10 +0294 +0314 +020C +ENDCHAR +STARTCHAR uni3F19 +ENCODING 16153 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1040 +FE40 +9240 +9278 +9248 +9248 +92A8 +9298 +9A88 +9488 +10AA +10CA +108A +1006 +ENDCHAR +STARTCHAR uni3F1A +ENCODING 16154 +BBX 15 16 0 -2 +BITMAP +1000 +08FC +0840 +FF40 +0040 +0078 +3C48 +2448 +24A8 +2498 +2488 +2588 +46AA +44CA +808A +0006 +ENDCHAR +STARTCHAR uni3F1B +ENCODING 16155 +BBX 15 15 0 -2 +BITMAP +7EFC +2440 +2440 +2440 +2478 +2448 +FF48 +24A8 +2498 +2488 +2488 +24AA +24CA +448A +8406 +ENDCHAR +STARTCHAR uni3F1C +ENCODING 16156 +BBX 15 16 0 -2 +BITMAP +0100 +1FF0 +1110 +1110 +FFFE +0280 +1C70 +E00E +0000 +7FFC +0800 +0FE0 +0920 +10A4 +1624 +181C +ENDCHAR +STARTCHAR uni3F1D +ENCODING 16157 +BBX 15 16 0 -2 +BITMAP +1000 +1EF8 +2288 +62A8 +9492 +0882 +307E +C000 +0000 +7FFC +0800 +0FE0 +0920 +10A4 +1624 +181C +ENDCHAR +STARTCHAR uni3F1E +ENCODING 16158 +BBX 15 15 0 -2 +BITMAP +7EFC +0840 +0840 +4A40 +2A78 +2C48 +0848 +FFA8 +0898 +0888 +0888 +08AA +08CA +088A +0806 +ENDCHAR +STARTCHAR uni3F1F +ENCODING 16159 +BBX 14 16 1 -2 +BITMAP +2000 +21F8 +4080 +FC80 +8480 +84F0 +8490 +8490 +FD50 +8530 +8510 +8510 +8554 +FD94 +8514 +000C +ENDCHAR +STARTCHAR uni3F20 +ENCODING 16160 +BBX 15 16 0 -2 +BITMAP +1000 +08FC +0840 +7F40 +4140 +8278 +2048 +2048 +3EA8 +2098 +2088 +2088 +26AA +38CA +208A +0006 +ENDCHAR +STARTCHAR uni3F21 +ENCODING 16161 +BBX 15 16 0 -2 +BITMAP +0800 +28FC +2840 +3E40 +4840 +8878 +0848 +7F48 +18A8 +1C98 +2A88 +2A88 +48AA +88CA +088A +0806 +ENDCHAR +STARTCHAR uni3F22 +ENCODING 16162 +BBX 15 15 0 -2 +BITMAP +FEFC +9040 +9040 +9040 +BC78 +A448 +A448 +A4A8 +A498 +BC88 +9088 +90AA +90CA +FE8A +0006 +ENDCHAR +STARTCHAR uni3F23 +ENCODING 16163 +BBX 15 15 0 -2 +BITMAP +FEFC +1040 +1040 +2040 +7C78 +4448 +4448 +44A8 +7C98 +4488 +4488 +44AA +7CCA +448A +0006 +ENDCHAR +STARTCHAR uni3F24 +ENCODING 16164 +BBX 13 16 1 -2 +BITMAP +1000 +1000 +FEF8 +1048 +7C48 +1088 +FEA8 +1110 +0000 +FFF8 +1000 +1FC0 +1240 +2148 +2C48 +3038 +ENDCHAR +STARTCHAR uni3F25 +ENCODING 16165 +BBX 15 16 0 -2 +BITMAP +1000 +12FC +7A40 +1440 +1440 +FF78 +1048 +2048 +7EA8 +9098 +2088 +3C88 +04AA +04CA +148A +0806 +ENDCHAR +STARTCHAR uni3F26 +ENCODING 16166 +BBX 15 15 0 -2 +BITMAP +7DF0 +1110 +1190 +1152 +1D12 +E20E +4400 +0000 +7FFC +0800 +0FE0 +0920 +10A4 +1624 +181C +ENDCHAR +STARTCHAR uni3F27 +ENCODING 16167 +BBX 15 15 0 -2 +BITMAP +FCFC +0440 +6840 +1040 +FE78 +9248 +9248 +FEA8 +9298 +9288 +FE88 +92AA +92CA +928A +8606 +ENDCHAR +STARTCHAR uni3F28 +ENCODING 16168 +BBX 15 16 0 -2 +BITMAP +0800 +08FC +1440 +2240 +5140 +8878 +7E48 +0248 +04A8 +0898 +7E88 +4288 +42AA +7ECA +428A +0006 +ENDCHAR +STARTCHAR uni3F29 +ENCODING 16169 +BBX 15 16 0 -2 +BITMAP +0400 +057C +04A0 +7F20 +4420 +4438 +7428 +5528 +5558 +5648 +5648 +5448 +655A +4D6A +934A +0106 +ENDCHAR +STARTCHAR uni3F2A +ENCODING 16170 +BBX 15 16 0 -2 +BITMAP +0800 +08FC +7F40 +0840 +0840 +2A78 +2A48 +2A48 +5DA8 +8898 +0888 +1488 +14AA +22CA +428A +8006 +ENDCHAR +STARTCHAR uni3F2B +ENCODING 16171 +BBX 15 15 0 -2 +BITMAP +7EFC +4A40 +4A40 +7E40 +4A78 +4A48 +7E48 +08A8 +FF98 +1888 +2C88 +2AAA +4ACA +888A +0806 +ENDCHAR +STARTCHAR uni3F2C +ENCODING 16172 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +7C40 +1040 +1040 +FE78 +4448 +2848 +7CA8 +1098 +1088 +FE88 +10AA +10CA +108A +1006 +ENDCHAR +STARTCHAR uni3F2D +ENCODING 16173 +BBX 15 16 0 -2 +BITMAP +1020 +103E +7C20 +11FC +1104 +1D04 +E1FC +0104 +0000 +7FFC +0800 +0FE0 +0920 +10A4 +1624 +181C +ENDCHAR +STARTCHAR uni3F2E +ENCODING 16174 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +FE40 +1040 +7C40 +1478 +FE48 +1448 +7CA8 +1098 +FC88 +2488 +44AA +28CA +308A +C806 +ENDCHAR +STARTCHAR uni3F2F +ENCODING 16175 +BBX 15 16 0 -2 +BITMAP +0800 +087C +FFA0 +0820 +0820 +7F38 +4928 +7F28 +4958 +7F48 +0848 +1C48 +2A5A +496A +884A +0806 +ENDCHAR +STARTCHAR uni3F30 +ENCODING 16176 +BBX 15 16 0 -2 +BITMAP +0800 +107C +7F20 +4920 +4920 +7F38 +4928 +4928 +7F58 +1448 +2448 +FF48 +045A +046A +044A +0406 +ENDCHAR +STARTCHAR uni3F31 +ENCODING 16177 +BBX 15 16 0 -2 +BITMAP +0444 +7C58 +0462 +1C42 +E43E +0000 +7FFC +4824 +1010 +7FFC +0800 +0FE0 +0920 +10A4 +1624 +181C +ENDCHAR +STARTCHAR uni3F32 +ENCODING 16178 +BBX 15 15 0 -2 +BITMAP +FEFC +1040 +2040 +FE40 +AA78 +AA48 +AA48 +A2A8 +9698 +1088 +FE88 +10AA +28CA +448A +8206 +ENDCHAR +STARTCHAR uni3F33 +ENCODING 16179 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +5240 +5140 +9540 +0878 +3048 +C048 +7EA8 +4298 +7E88 +4288 +7EAA +42CA +7E8A +4206 +ENDCHAR +STARTCHAR uni3F34 +ENCODING 16180 +BBX 15 15 0 -2 +BITMAP +7CFC +5440 +5440 +7C40 +5478 +5448 +7C48 +10A8 +FE98 +9288 +9688 +BEAA +82CA +8A8A +8406 +ENDCHAR +STARTCHAR uni3F35 +ENCODING 16181 +BBX 15 15 0 -2 +BITMAP +3EFC +2220 +3E20 +2238 +3E28 +0048 +FF68 +0858 +084A +2F4A +286A +2846 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni3F36 +ENCODING 16182 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2840 +4440 +8240 +7C78 +0048 +E248 +AAA8 +AA98 +EA88 +AA88 +AAAA +E2CA +AA8A +A406 +ENDCHAR +STARTCHAR uni3F37 +ENCODING 16183 +BBX 15 16 0 -2 +BITMAP +1000 +92FC +9240 +9240 +FE40 +0078 +FE48 +1048 +20A8 +FE98 +AA88 +AA88 +AAAA +AACA +AA8A +8606 +ENDCHAR +STARTCHAR uni3F38 +ENCODING 16184 +BBX 15 16 0 -2 +BITMAP +1000 +087C +FFA0 +80A0 +1420 +2238 +4928 +1428 +2258 +4148 +BEC8 +2248 +225A +226A +3E4A +2206 +ENDCHAR +STARTCHAR uni3F39 +ENCODING 16185 +BBX 15 16 0 -2 +BITMAP +4400 +44FC +FF40 +5440 +0840 +FF78 +4048 +4048 +7EA8 +0098 +5488 +5488 +55AA +56CA +948A +0006 +ENDCHAR +STARTCHAR uni3F3A +ENCODING 16186 +BBX 15 16 0 -2 +BITMAP +1000 +08FC +7F40 +4840 +5E40 +4A78 +7F48 +4A48 +5EA8 +4898 +5E88 +5288 +52AA +52CA +5E8A +9206 +ENDCHAR +STARTCHAR uni3F3B +ENCODING 16187 +BBX 15 16 0 -2 +BITMAP +1110 +2110 +CAA8 +1444 +3240 +D27C +1540 +14FE +0800 +7FFC +0800 +0FE0 +0920 +10A4 +1624 +181C +ENDCHAR +STARTCHAR uni3F3C +ENCODING 16188 +BBX 15 15 0 -2 +BITMAP +FEFC +2840 +FE40 +AA40 +AA78 +FE48 +0048 +7CA8 +0098 +FE88 +1088 +54AA +92CA +508A +2006 +ENDCHAR +STARTCHAR uni3F3D +ENCODING 16189 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +FE40 +1040 +BA40 +5478 +BA48 +1048 +BAA8 +5498 +BA88 +1088 +28AA +24CA +428A +8006 +ENDCHAR +STARTCHAR uni3F3E +ENCODING 16190 +BBX 15 16 0 -2 +BITMAP +0800 +047C +7FA0 +5220 +5220 +7FB8 +52A8 +52A8 +7FD8 +5248 +5248 +5BC8 +525A +52EA +9B4A +1206 +ENDCHAR +STARTCHAR uni3F3F +ENCODING 16191 +BBX 15 16 0 -2 +BITMAP +1000 +087C +7F20 +2220 +FF20 +0038 +7F28 +4928 +7F58 +4948 +7F48 +0848 +7F5A +086A +0F4A +F006 +ENDCHAR +STARTCHAR uni3F40 +ENCODING 16192 +BBX 15 16 0 -2 +BITMAP +2200 +147C +FF20 +1420 +7F20 +5538 +6328 +5D28 +4158 +7F48 +0848 +FF48 +145A +226A +414A +8006 +ENDCHAR +STARTCHAR uni3F41 +ENCODING 16193 +BBX 15 16 0 -2 +BITMAP +3FFE +2104 +2E38 +2210 +2FBC +2718 +2AB4 +3252 +2000 +3FFE +2400 +27F0 +2490 +4852 +4B12 +8C0E +ENDCHAR +STARTCHAR uni3F42 +ENCODING 16194 +BBX 15 16 0 -2 +BITMAP +0800 +147C +2220 +5D20 +80A0 +3E38 +2228 +3E28 +0058 +7748 +1148 +5548 +335A +556A +114A +3306 +ENDCHAR +STARTCHAR uni3F43 +ENCODING 16195 +BBX 15 16 0 -2 +BITMAP +0E00 +F0FC +9240 +5440 +FE40 +3878 +5448 +8248 +7CA8 +5498 +5488 +7C88 +54AA +54CA +7C8A +4406 +ENDCHAR +STARTCHAR uni3F44 +ENCODING 16196 +BBX 15 16 0 -2 +BITMAP +240C +FF70 +2440 +3C40 +247E +3C48 +2448 +FF48 +2448 +4288 +0000 +7FFC +0800 +0FE0 +1124 +1C9C +ENDCHAR +STARTCHAR uni3F45 +ENCODING 16197 +BBX 15 16 0 -2 +BITMAP +0A00 +74FC +1540 +5240 +2240 +2178 +5D48 +8048 +7EA8 +4298 +4288 +7E88 +42AA +24CA +0F8A +F006 +ENDCHAR +STARTCHAR uni3F46 +ENCODING 16198 +BBX 15 16 0 -2 +BITMAP +1000 +92FC +5440 +FE40 +8240 +7C78 +4448 +7C48 +00A8 +7C98 +5488 +7C88 +54AA +54CA +7C8A +4406 +ENDCHAR +STARTCHAR uni3F47 +ENCODING 16199 +BBX 15 16 0 -2 +BITMAP +0A80 +3138 +2288 +3838 +2288 +3938 +2288 +7FFE +4002 +BFF4 +0800 +0FE0 +0920 +10A4 +1624 +181C +ENDCHAR +STARTCHAR uni3F48 +ENCODING 16200 +BBX 15 16 0 -2 +BITMAP +48F8 +7050 +4420 +3DFC +2024 +7CB8 +90A0 +7D7E +2A00 +7FFC +0800 +0FE0 +0920 +10A4 +1624 +181C +ENDCHAR +STARTCHAR uni3F49 +ENCODING 16201 +BBX 14 15 1 -2 +BITMAP +FC80 +90FC +FD20 +8610 +FDFC +9154 +FDFC +0000 +FFF8 +1000 +1FC0 +1240 +2148 +2C48 +3038 +ENDCHAR +STARTCHAR uni3F4A +ENCODING 16202 +BBX 15 16 0 -2 +BITMAP +4900 +5D7C +6120 +DDA0 +4320 +5D38 +4128 +5D28 +B6D8 +9C48 +0048 +7F48 +025A +346A +1C4A +6306 +ENDCHAR +STARTCHAR uni3F4B +ENCODING 16203 +BBX 15 16 0 -2 +BITMAP +2104 +47C8 +8812 +F3BC +2008 +4B92 +F83E +0380 +AAAA +ABAA +0000 +7FFC +0800 +0FE0 +1124 +1C9C +ENDCHAR +STARTCHAR uni3F4C +ENCODING 16204 +BBX 15 16 0 -2 +BITMAP +7F00 +087C +FFA0 +88A0 +6B20 +1038 +6F28 +4528 +5558 +6B48 +1048 +7F48 +495A +7F6A +494A +7F06 +ENDCHAR +STARTCHAR uni3F4D +ENCODING 16205 +BBX 15 16 0 -2 +BITMAP +2200 +22FC +2240 +2240 +FF40 +2278 +2248 +2248 +3EA8 +2298 +2288 +2288 +22AA +3ECA +228A +0006 +ENDCHAR +STARTCHAR uni3F4E +ENCODING 16206 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +FF10 +2210 +3EFE +2292 +3E92 +2210 +2228 +FF28 +4028 +5428 +6248 +404A +7E8A +0106 +ENDCHAR +STARTCHAR uni3F4F +ENCODING 16207 +BBX 15 16 0 -2 +BITMAP +2040 +10A0 +8318 +4DF6 +1000 +E3F8 +2208 +23F8 +0000 +1010 +FFFE +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3F50 +ENCODING 16208 +BBX 15 16 0 -2 +BITMAP +4888 +4850 +4800 +49FE +FC50 +49FC +4854 +4BFE +4854 +79FC +4850 +48D8 +4954 +7A52 +4850 +0050 +ENDCHAR +STARTCHAR uni3F51 +ENCODING 16209 +BBX 15 16 0 -2 +BITMAP +4BFE +4850 +4BFE +4A52 +FE52 +4BFE +4800 +49FC +7904 +49FC +4904 +49FC +4820 +7BFE +4820 +0020 +ENDCHAR +STARTCHAR uni3F52 +ENCODING 16210 +BBX 15 16 0 -2 +BITMAP +0010 +7C10 +5490 +5490 +7CFC +5490 +5510 +7C10 +1010 +FEFC +1210 +1210 +2210 +2210 +4AFE +8400 +ENDCHAR +STARTCHAR uni3F53 +ENCODING 16211 +BBX 15 16 0 -2 +BITMAP +0100 +1100 +1FF8 +2100 +5FF0 +0100 +FFFE +0810 +4850 +7E7C +4890 +8810 +7E7C +0810 +0F10 +F0FE +ENDCHAR +STARTCHAR uni3F54 +ENCODING 16212 +BBX 15 16 0 -2 +BITMAP +2810 +2810 +AA50 +6C7C +2850 +FE90 +1010 +307C +4A10 +9C10 +2C10 +DAFE +2900 +C8C0 +283E +1000 +ENDCHAR +STARTCHAR uni3F55 +ENCODING 16213 +BBX 14 16 1 -2 +BITMAP +0200 +0200 +7FF0 +4210 +7FF0 +4210 +7FF0 +0000 +FFF0 +0010 +2010 +3FFC +0004 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni3F56 +ENCODING 16214 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F880 +A880 +ABF8 +A888 +A888 +F888 +A888 +A908 +A908 +A908 +FA08 +8A08 +0450 +0820 +ENDCHAR +STARTCHAR uni3F57 +ENCODING 16215 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F840 +A840 +A840 +A840 +F840 +A840 +A8A0 +A8A0 +A8A0 +F910 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni3F58 +ENCODING 16216 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F800 +ABF8 +A800 +A800 +A9E0 +F920 +A920 +A920 +A920 +A924 +F924 +8A24 +021C +0400 +ENDCHAR +STARTCHAR uni3F59 +ENCODING 16217 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F900 +A910 +AA08 +AFFC +A804 +F920 +A920 +A920 +A920 +A920 +FA24 +8A24 +041C +0800 +ENDCHAR +STARTCHAR uni3F5A +ENCODING 16218 +BBX 15 15 0 -2 +BITMAP +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0000 +1100 +3FF8 +4100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni3F5B +ENCODING 16219 +BBX 13 16 1 -2 +BITMAP +0100 +0100 +FA00 +ABF8 +AC08 +A808 +ABC8 +FA48 +AA48 +AA48 +ABC8 +AA48 +F808 +8808 +0050 +0020 +ENDCHAR +STARTCHAR uni3F5C +ENCODING 16220 +BBX 15 16 0 -2 +BITMAP +1000 +1EF8 +2288 +62A8 +9492 +0882 +307E +C000 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni3F5D +ENCODING 16221 +BBX 14 16 0 -2 +BITMAP +7F04 +0844 +1E44 +2244 +5444 +0844 +300C +C000 +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3F5E +ENCODING 16222 +BBX 11 15 2 -2 +BITMAP +FBE0 +8A20 +8A20 +8A20 +FBE0 +0000 +0000 +FFE0 +8420 +8420 +FFE0 +8420 +8420 +FFE0 +8020 +ENDCHAR +STARTCHAR uni3F5F +ENCODING 16223 +BBX 14 16 1 -2 +BITMAP +0008 +003C +FBC0 +A844 +AA24 +A928 +A900 +F810 +ABFC +A810 +A910 +A890 +F890 +8810 +0050 +0020 +ENDCHAR +STARTCHAR uni3F60 +ENCODING 16224 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F840 +AFFC +A840 +A840 +AA48 +FA48 +AA48 +AD54 +A840 +A8A0 +F8A0 +8910 +0208 +0404 +ENDCHAR +STARTCHAR uni3F61 +ENCODING 16225 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +F9FC +A924 +A924 +A9FC +F924 +A944 +A9FC +A890 +A910 +FBFE +8810 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni3F62 +ENCODING 16226 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +FBFC +A910 +AA48 +AC46 +FBF8 +AA48 +AA48 +ABF8 +AA48 +FA48 +8BF8 +0042 +0042 +003E +ENDCHAR +STARTCHAR uni3F63 +ENCODING 16227 +BBX 15 16 0 -2 +BITMAP +0014 +0012 +F810 +AFFE +A810 +A810 +FBD2 +AA52 +AA52 +AA54 +ABD4 +F808 +88EA +071A +0226 +0042 +ENDCHAR +STARTCHAR uni3F64 +ENCODING 16228 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F9FC +AA04 +AC44 +A954 +A8E4 +F844 +ABFC +A844 +A8E4 +A954 +FA44 +8844 +0014 +0008 +ENDCHAR +STARTCHAR uni3F65 +ENCODING 16229 +BBX 14 15 1 -2 +BITMAP +01F8 +F890 +A860 +ABFC +A8A4 +A928 +FA20 +AC60 +A840 +ABFC +A8E0 +F950 +8A48 +0444 +0040 +ENDCHAR +STARTCHAR uni3F66 +ENCODING 16230 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +4D28 +1450 +2288 +7FFE +4002 +8004 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni3F67 +ENCODING 16231 +BBX 15 16 0 -2 +BITMAP +0084 +0044 +F848 +ABFE +A884 +A884 +F908 +A94A +AA52 +AB9C +A884 +F908 +8908 +0252 +03DE +0042 +ENDCHAR +STARTCHAR uni3F68 +ENCODING 16232 +BBX 15 15 0 -1 +BITMAP +0108 +0088 +F890 +ABFC +A840 +A9F8 +F840 +ABFE +A880 +A900 +A9FC +FA20 +8C20 +0820 +03FE +ENDCHAR +STARTCHAR uni3F69 +ENCODING 16233 +BBX 15 16 0 -2 +BITMAP +0040 +0088 +F9FC +A908 +AA52 +ABFE +F850 +A988 +AE26 +A8C0 +AB10 +F864 +8B88 +0030 +00C0 +0700 +ENDCHAR +STARTCHAR uni3F6A +ENCODING 16234 +BBX 15 16 0 -2 +BITMAP +0104 +0088 +F800 +ABFE +AA22 +AAAA +FA72 +AA22 +ABFE +A800 +A9FC +F904 +89FC +0104 +01FC +0104 +ENDCHAR +STARTCHAR uni3F6B +ENCODING 16235 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +1048 +24FE +7990 +10FC +2290 +7CFC +0890 +30FE +C080 +3FF8 +2108 +3FF8 +2108 +3FF8 +ENDCHAR +STARTCHAR uni3F6C +ENCODING 16236 +BBX 15 15 0 -2 +BITMAP +FEFE +0000 +7C7C +4444 +4444 +7C7C +0000 +FEFE +9292 +9292 +FEFE +9292 +9292 +FEFE +8282 +ENDCHAR +STARTCHAR uni3F6D +ENCODING 16237 +BBX 15 15 0 -2 +BITMAP +01FC +F820 +ABFE +AA22 +A9AC +F820 +A9AC +A800 +ABFE +A820 +F9FC +8954 +0154 +0154 +010C +ENDCHAR +STARTCHAR uni3F6E +ENCODING 16238 +BBX 15 16 0 -2 +BITMAP +0FE0 +0920 +0FE0 +0920 +0FE0 +7C7C +5454 +7C7C +5454 +7D7C +1100 +1FF8 +2100 +5FF0 +0100 +FFFE +ENDCHAR +STARTCHAR uni3F6F +ENCODING 16239 +BBX 15 16 0 -2 +BITMAP +0222 +03FE +F890 +A9FE +AB10 +ADFE +F910 +A9FE +A910 +A9FE +A900 +FBFE +8A8A +0376 +0252 +0276 +ENDCHAR +STARTCHAR uni3F70 +ENCODING 16240 +BBX 15 15 0 -2 +BITMAP +777C +5514 +5514 +5510 +7710 +5550 +555C +5550 +7750 +5550 +5550 +5550 +B550 +89BE +1300 +ENDCHAR +STARTCHAR uni3F71 +ENCODING 16241 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9008 +5208 +5208 +1208 +3208 +5208 +9238 +13C8 +2208 +2008 +4008 +8008 +ENDCHAR +STARTCHAR uni3F72 +ENCODING 16242 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6000 +2FFC +2100 +2100 +63F8 +A208 +2408 +4008 +4010 +8010 +00E0 +ENDCHAR +STARTCHAR uni3F73 +ENCODING 16243 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +57FC +5040 +1040 +3040 +5FFE +9040 +1040 +2040 +2040 +4140 +8080 +ENDCHAR +STARTCHAR uni3F74 +ENCODING 16244 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9010 +5010 +57FE +1010 +3010 +5210 +9120 +10A0 +2040 +20A0 +4318 +8C06 +ENDCHAR +STARTCHAR uni3F75 +ENCODING 16245 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +6080 +2080 +2080 +2080 +6FF8 +A080 +2080 +4080 +4080 +8080 +1FFC +ENDCHAR +STARTCHAR uni3F76 +ENCODING 16246 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +53F8 +5008 +1008 +3008 +53F8 +9200 +1202 +2202 +2202 +41FE +8000 +ENDCHAR +STARTCHAR uni3F77 +ENCODING 16247 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6080 +2084 +3E84 +22C8 +62D0 +A2A0 +24A0 +4490 +4888 +9086 +0380 +ENDCHAR +STARTCHAR uni3F78 +ENCODING 16248 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9040 +5040 +53FC +1244 +3448 +50A0 +90A0 +1120 +2120 +2222 +4422 +881E +ENDCHAR +STARTCHAR uni3F79 +ENCODING 16249 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +901C +53E0 +5200 +1200 +33F8 +5288 +9288 +1250 +2420 +2450 +4888 +9306 +ENDCHAR +STARTCHAR uni3F7A +ENCODING 16250 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +97F8 +5108 +5110 +1120 +313C +5204 +9288 +1250 +2420 +2450 +4888 +9306 +ENDCHAR +STARTCHAR uni3F7B +ENCODING 16251 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +9040 +57FC +5040 +1040 +37F8 +5208 +9110 +10A0 +2040 +20A0 +4318 +8C06 +ENDCHAR +STARTCHAR uni3F7C +ENCODING 16252 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9004 +57E4 +5024 +1024 +33E4 +5204 +9404 +17E4 +2024 +2024 +4144 +8084 +ENDCHAR +STARTCHAR uni3F7D +ENCODING 16253 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +9040 +5040 +57FE +1040 +3040 +53F8 +9208 +1208 +2208 +2208 +43F8 +8208 +ENDCHAR +STARTCHAR uni3F7E +ENCODING 16254 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9040 +5248 +5248 +1248 +33F8 +5048 +9040 +1444 +2444 +2444 +47FC +8004 +ENDCHAR +STARTCHAR uni3F7F +ENCODING 16255 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +901C +53E0 +5290 +1290 +3290 +5290 +9290 +1288 +24C8 +24A4 +48D4 +9092 +ENDCHAR +STARTCHAR uni3F80 +ENCODING 16256 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2080 +A080 +6FFC +2080 +2080 +6080 +BFFE +2100 +2210 +4408 +4FFC +8404 +ENDCHAR +STARTCHAR uni3F81 +ENCODING 16257 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +9050 +5048 +5040 +17FC +30E0 +5160 +9150 +1248 +2444 +2842 +4040 +8040 +ENDCHAR +STARTCHAR uni3F82 +ENCODING 16258 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1080 +9080 +5110 +5208 +17FC +3204 +5000 +93F8 +1208 +2208 +2208 +43F8 +8208 +ENDCHAR +STARTCHAR uni3F83 +ENCODING 16259 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1080 +9040 +57FC +5404 +1808 +3200 +5210 +9260 +1380 +2200 +2204 +4204 +81FC +ENDCHAR +STARTCHAR uni3F84 +ENCODING 16260 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9040 +5040 +57FC +1444 +3444 +5444 +97FC +1444 +2444 +2444 +47FC +8404 +ENDCHAR +STARTCHAR uni3F85 +ENCODING 16261 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +905C +53E0 +5240 +1240 +33FC +5044 +90C4 +1154 +2248 +2C40 +4040 +8040 +ENDCHAR +STARTCHAR uni3F86 +ENCODING 16262 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +9040 +53F8 +5248 +1248 +33F8 +5248 +9248 +1FFE +2208 +2208 +4228 +8210 +ENDCHAR +STARTCHAR uni3F87 +ENCODING 16263 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2000 +A7F8 +6408 +2408 +27F8 +6408 +A408 +27F8 +2408 +4408 +47F8 +8408 +ENDCHAR +STARTCHAR uni3F88 +ENCODING 16264 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9108 +5108 +5108 +12FE +3208 +5648 +9A28 +1228 +2208 +2208 +4228 +8210 +ENDCHAR +STARTCHAR uni3F89 +ENCODING 16265 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +9040 +50A0 +5110 +1248 +3426 +5020 +93F8 +1008 +2110 +20A0 +4040 +8020 +ENDCHAR +STARTCHAR uni3F8A +ENCODING 16266 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +2040 +AFFE +6040 +27FC +2444 +6454 +A4E8 +2150 +2248 +4C46 +4040 +8040 +ENDCHAR +STARTCHAR uni3F8B +ENCODING 16267 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1110 +9110 +5210 +52FE +1610 +3A38 +5238 +9254 +1254 +2292 +2210 +4210 +8210 +ENDCHAR +STARTCHAR uni3F8C +ENCODING 16268 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9040 +5240 +53FC +1440 +3040 +5FFE +9120 +1120 +2120 +2222 +4422 +981E +ENDCHAR +STARTCHAR uni3F8D +ENCODING 16269 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +5FFE +5040 +1080 +37FC +54A4 +94A4 +14A4 +24A4 +24A4 +4494 +8408 +ENDCHAR +STARTCHAR uni3F8E +ENCODING 16270 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +57BC +54A4 +14A4 +34A4 +54A4 +94E4 +1404 +2404 +2404 +47FC +8404 +ENDCHAR +STARTCHAR uni3F8F +ENCODING 16271 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9040 +57FC +5040 +1040 +3FFE +5000 +9040 +17FC +2040 +2040 +5FFE +8000 +ENDCHAR +STARTCHAR uni3F90 +ENCODING 16272 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9004 +5FC4 +5214 +1214 +37D4 +5454 +9A54 +1194 +2084 +2104 +4214 +8C08 +ENDCHAR +STARTCHAR uni3F91 +ENCODING 16273 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +90A0 +5110 +5208 +1DF6 +3000 +5000 +93F8 +1208 +2208 +2208 +43F8 +8208 +ENDCHAR +STARTCHAR uni3F92 +ENCODING 16274 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1100 +9100 +511E +5FD2 +1252 +3252 +5452 +9492 +1292 +2112 +229E +4452 +8840 +ENDCHAR +STARTCHAR uni3F93 +ENCODING 16275 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +93F0 +5210 +53F0 +1000 +37F8 +5408 +97F8 +1408 +27F8 +2408 +4428 +8410 +ENDCHAR +STARTCHAR uni3F94 +ENCODING 16276 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +53F8 +5208 +1208 +33F8 +5000 +97FC +1404 +2404 +2404 +47FC +8404 +ENDCHAR +STARTCHAR uni3F95 +ENCODING 16277 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1080 +9040 +57FC +5208 +1110 +3FFE +5040 +9040 +17FC +2040 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni3F96 +ENCODING 16278 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +57FC +5444 +17FC +3444 +57FC +9040 +17FC +2040 +2040 +4FFE +8000 +ENDCHAR +STARTCHAR uni3F97 +ENCODING 16279 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1100 +9080 +57F8 +5408 +17F8 +3408 +57F8 +9482 +1444 +2428 +2510 +4608 +8406 +ENDCHAR +STARTCHAR uni3F98 +ENCODING 16280 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +97FC +5040 +53F8 +1248 +33F8 +5248 +93F8 +1240 +2140 +2080 +4360 +8C1E +ENDCHAR +STARTCHAR uni3F99 +ENCODING 16281 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1010 +9720 +50C0 +5130 +1688 +3FFE +5100 +9240 +17F8 +2A48 +2268 +4250 +8040 +ENDCHAR +STARTCHAR uni3F9A +ENCODING 16282 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1120 +9124 +55E8 +5530 +1522 +35A2 +5E1E +9000 +13F8 +2000 +2000 +4FFE +8000 +ENDCHAR +STARTCHAR uni3F9B +ENCODING 16283 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +93F8 +5008 +51F8 +1008 +33F8 +5000 +97FC +1404 +23F8 +2110 +40E0 +871C +ENDCHAR +STARTCHAR uni3F9C +ENCODING 16284 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9040 +5040 +57FC +1040 +3248 +5248 +9554 +1842 +20A0 +2110 +4608 +9806 +ENDCHAR +STARTCHAR uni3F9D +ENCODING 16285 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +3FFC +A080 +6FF8 +2888 +2FF8 +6888 +AFF8 +2080 +3FFE +4080 +4080 +8080 +ENDCHAR +STARTCHAR uni3F9E +ENCODING 16286 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2FFC +A120 +6FFC +2924 +2924 +6A1C +AC04 +2FFC +2804 +4804 +4FFC +8804 +ENDCHAR +STARTCHAR uni3F9F +ENCODING 16287 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9040 +527C +5240 +1240 +3FFE +5040 +9144 +1248 +2410 +2060 +4380 +9C00 +ENDCHAR +STARTCHAR uni3FA0 +ENCODING 16288 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9880 +557C +5210 +1D10 +3110 +517C +9310 +1D10 +2110 +2110 +4A7E +8400 +ENDCHAR +STARTCHAR uni3FA1 +ENCODING 16289 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1100 +911E +57D2 +5112 +1112 +3FF2 +5112 +9292 +145A +2FD4 +2450 +4010 +8010 +ENDCHAR +STARTCHAR uni3FA2 +ENCODING 16290 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +9040 +5FFE +5040 +1248 +3248 +5554 +98E2 +1150 +2248 +2C46 +4040 +8040 +ENDCHAR +STARTCHAR uni3FA3 +ENCODING 16291 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2080 +2140 +A220 +6410 +2808 +37F6 +6080 +A080 +2FF8 +2080 +2490 +42A0 +5FFE +8000 +ENDCHAR +STARTCHAR uni3FA4 +ENCODING 16292 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1080 +9040 +57FC +5404 +1110 +3208 +5404 +93F8 +1040 +2040 +2040 +47FC +8000 +ENDCHAR +STARTCHAR uni3FA5 +ENCODING 16293 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9200 +53BC +5214 +1214 +3FD4 +5014 +9208 +1688 +2A48 +2214 +4A14 +8422 +ENDCHAR +STARTCHAR uni3FA6 +ENCODING 16294 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1080 +9040 +57FC +5208 +1110 +3FFE +5000 +93F8 +1208 +2208 +2208 +43F8 +8208 +ENDCHAR +STARTCHAR uni3FA7 +ENCODING 16295 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +93F8 +5248 +53F8 +1248 +33F8 +5040 +97FC +10E0 +2150 +2248 +4C46 +8040 +ENDCHAR +STARTCHAR uni3FA8 +ENCODING 16296 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2FF8 +A140 +6220 +2410 +3FFE +6010 +A7D0 +2450 +27D0 +4010 +4050 +8020 +ENDCHAR +STARTCHAR uni3FA9 +ENCODING 16297 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9038 +53C0 +5040 +1FFE +3150 +5154 +9758 +1154 +2354 +254C +4040 +8040 +ENDCHAR +STARTCHAR uni3FAA +ENCODING 16298 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +9248 +5454 +5862 +1380 +3FF8 +5208 +93F8 +1208 +23F8 +2208 +43F8 +8208 +ENDCHAR +STARTCHAR uni3FAB +ENCODING 16299 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +93FC +5204 +5204 +13FC +3200 +53FC +9354 +1554 +25FC +2954 +4144 +810C +ENDCHAR +STARTCHAR uni3FAC +ENCODING 16300 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9424 +57A8 +5432 +1522 +361E +5100 +93FC +1204 +23FC +2204 +43FC +8204 +ENDCHAR +STARTCHAR uni3FAD +ENCODING 16301 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2310 +AE10 +6254 +2254 +3F58 +6690 +A610 +2B28 +2A28 +5244 +4244 +8282 +ENDCHAR +STARTCHAR uni3FAE +ENCODING 16302 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A100 +67F8 +2408 +27F8 +2408 +67F8 +A000 +2FFC +4080 +47F8 +8080 +1FFE +ENDCHAR +STARTCHAR uni3FAF +ENCODING 16303 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +93F8 +5248 +53F8 +1248 +33F8 +5000 +97FE +1244 +2228 +2290 +4308 +8206 +ENDCHAR +STARTCHAR uni3FB0 +ENCODING 16304 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2200 +223C +A224 +6FA4 +223C +2224 +6FA4 +A8BC +28A4 +2FA4 +48C4 +4054 +8088 +ENDCHAR +STARTCHAR uni3FB1 +ENCODING 16305 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +2F50 +A124 +6A18 +2408 +3BF6 +6120 +A120 +2FFC +2120 +4224 +4424 +881C +ENDCHAR +STARTCHAR uni3FB2 +ENCODING 16306 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2210 +2F90 +A21E +6FA4 +2224 +3FD4 +6414 +A794 +2488 +2488 +4894 +4AA4 +9142 +ENDCHAR +STARTCHAR uni3FB3 +ENCODING 16307 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2880 +24FC +A124 +6420 +3850 +298C +6100 +BFFE +2210 +2720 +40C0 +4330 +8C08 +ENDCHAR +STARTCHAR uni3FB4 +ENCODING 16308 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +9040 +57FC +5150 +1248 +3446 +53F8 +9208 +13F8 +2208 +23F8 +4208 +8FFE +ENDCHAR +STARTCHAR uni3FB5 +ENCODING 16309 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1200 +9108 +5FC8 +5008 +1788 +303E +5788 +9008 +1788 +2488 +2488 +4788 +8488 +ENDCHAR +STARTCHAR uni3FB6 +ENCODING 16310 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +23F8 +A208 +63C8 +2248 +2FFE +6802 +B3FC +2208 +23F8 +2208 +43F8 +4208 +8218 +ENDCHAR +STARTCHAR uni3FB7 +ENCODING 16311 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +203E +AFC0 +687C +2840 +2BFE +6A42 +AA78 +2AC4 +2A3C +3200 +54F0 +6494 +890C +ENDCHAR +STARTCHAR uni3FB8 +ENCODING 16312 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1020 +97FE +5000 +51F8 +1108 +31F8 +5000 +97FE +1402 +25FA +250A +45FA +8406 +ENDCHAR +STARTCHAR uni3FB9 +ENCODING 16313 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2120 +2128 +A5B0 +6524 +2524 +259C +6E40 +A040 +27FC +20E0 +4150 +4248 +8C46 +ENDCHAR +STARTCHAR uni3FBA +ENCODING 16314 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +27FC +A440 +67F8 +2440 +27F8 +6440 +A7FC +2004 +2AA4 +4AA4 +5014 +8008 +ENDCHAR +STARTCHAR uni3FBB +ENCODING 16315 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1010 +9728 +5544 +5582 +167C +3510 +5510 +95FE +1510 +2754 +2492 +4552 +8420 +ENDCHAR +STARTCHAR uni3FBC +ENCODING 16316 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +29F8 +A508 +65F8 +2108 +3DF8 +6524 +A518 +2548 +2584 +4504 +4A00 +91FE +ENDCHAR +STARTCHAR uni3FBD +ENCODING 16317 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +2880 +A5F8 +6108 +2108 +2DF8 +6500 +A5FC +2504 +2504 +45FC +4A00 +91FE +ENDCHAR +STARTCHAR uni3FBE +ENCODING 16318 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1208 +9110 +5FFE +5120 +17FC +3124 +5FFE +9124 +17FC +2330 +2528 +5926 +8120 +ENDCHAR +STARTCHAR uni3FBF +ENCODING 16319 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2200 +2100 +AFBE +68A2 +2FA4 +28A8 +6FA4 +AA22 +2922 +2AAA +4CA4 +4820 +8020 +ENDCHAR +STARTCHAR uni3FC0 +ENCODING 16320 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2020 +2E2E +A424 +64A4 +24A4 +24A4 +6EAE +A424 +2424 +2444 +4644 +588E +8100 +ENDCHAR +STARTCHAR uni3FC1 +ENCODING 16321 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1080 +93F8 +5208 +53F8 +1208 +33F8 +5080 +97FC +1210 +2448 +29F6 +4040 +8040 +ENDCHAR +STARTCHAR uni3FC2 +ENCODING 16322 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1110 +9550 +5550 +57DE +1024 +37D4 +5114 +9114 +17D4 +2108 +2108 +4FD4 +8022 +ENDCHAR +STARTCHAR uni3FC3 +ENCODING 16323 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +12A8 +92A8 +57FC +52AA +14E6 +3800 +57FC +9444 +13F8 +2248 +2248 +4258 +8040 +ENDCHAR +STARTCHAR uni3FC4 +ENCODING 16324 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2FDC +AA14 +6BD4 +2D16 +2920 +6FDC +A914 +2A94 +2C54 +4808 +4FD4 +8022 +ENDCHAR +STARTCHAR uni3FC5 +ENCODING 16325 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2210 +2410 +A89C +7090 +2290 +25FE +6C10 +B490 +249C +2490 +4550 +463E +8400 +ENDCHAR +STARTCHAR uni3FC6 +ENCODING 16326 +BBX 15 16 0 -2 +BITMAP +0080 +1FFE +1000 +1038 +93C0 +5040 +17FC +3150 +5248 +9486 +1040 +17FC +20A2 +2314 +4D48 +8186 +ENDCHAR +STARTCHAR uni3FC7 +ENCODING 16327 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +97BC +5084 +54A4 +1294 +34A4 +5100 +93FC +1204 +23FC +2204 +43FC +8204 +ENDCHAR +STARTCHAR uni3FC8 +ENCODING 16328 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2228 +2224 +A57E +6948 +2E48 +22FE +6548 +A948 +2F7E +2248 +4448 +487E +9040 +ENDCHAR +STARTCHAR uni3FC9 +ENCODING 16329 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A080 +67F8 +2488 +27F8 +2080 +7FFE +A408 +27F8 +4408 +47F8 +8210 +0C0E +ENDCHAR +STARTCHAR uni3FCA +ENCODING 16330 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +2F78 +A210 +6A50 +2F7C +2630 +6B54 +B28C +27F8 +2408 +27F8 +4408 +47F8 +8408 +ENDCHAR +STARTCHAR uni3FCB +ENCODING 16331 +BBX 15 16 0 -2 +BITMAP +0080 +1FFE +1000 +13F8 +9208 +53F8 +1000 +37BC +54A4 +97BC +1040 +1FFE +2150 +2248 +4C46 +8040 +ENDCHAR +STARTCHAR uni3FCC +ENCODING 16332 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2080 +2140 +A220 +6410 +3BEC +2000 +6F78 +A948 +2948 +2F78 +2220 +4550 +4888 +9104 +ENDCHAR +STARTCHAR uni3FCD +ENCODING 16333 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +287C +AF14 +7124 +2FCC +2AA8 +6FBE +AAC8 +2F88 +2AFE +4A88 +5088 +A188 +ENDCHAR +STARTCHAR uni3FCE +ENCODING 16334 +BBX 15 16 0 -2 +BITMAP +0080 +1FFE +1040 +17FC +9150 +5FFE +1110 +37FC +5404 +97FC +1404 +17FC +2404 +27FC +4110 +8208 +ENDCHAR +STARTCHAR uni3FCF +ENCODING 16335 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +27F8 +A088 +6FFE +2108 +27F8 +6310 +A4A0 +2FFC +3040 +23F8 +4040 +4FFE +8040 +ENDCHAR +STARTCHAR uni3FD0 +ENCODING 16336 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2210 +223E +AF44 +62A8 +2210 +3FA8 +625E +A222 +2A54 +2B08 +2A10 +4A60 +5600 +A3FE +ENDCHAR +STARTCHAR uni3FD1 +ENCODING 16337 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +2FBE +A492 +628A +2492 +2220 +67FE +AC20 +37FE +2420 +27FE +4420 +47FE +8400 +ENDCHAR +STARTCHAR uni3FD2 +ENCODING 16338 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2040 +2FFC +A040 +67FC +2000 +3FFE +6002 +A7F8 +2040 +3FFE +2008 +4F7E +4948 +8F18 +ENDCHAR +STARTCHAR uni3FD3 +ENCODING 16339 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2040 +27FC +A248 +6248 +2554 +28A2 +6318 +ADF6 +2110 +21F0 +2240 +427C +4540 +88FE +ENDCHAR +STARTCHAR uni3FD4 +ENCODING 16340 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +27FC +A444 +67FC +2444 +27FC +6000 +AFBE +2AAA +2FBE +4AAA +4FBE +88A2 +ENDCHAR +STARTCHAR uni3FD5 +ENCODING 16341 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +2F3C +A924 +6F3C +2924 +2F3C +69E4 +AA24 +2C44 +2B64 +2A24 +4B64 +4A24 +8BEC +ENDCHAR +STARTCHAR uni3FD6 +ENCODING 16342 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2040 +207C +A040 +67FE +2442 +25F8 +6444 +A4FC +24A8 +24F8 +24A8 +49FC +4954 +93FE +ENDCHAR +STARTCHAR uni3FD7 +ENCODING 16343 +BBX 15 15 1 -1 +BITMAP +0080 +3FFC +2000 +A1BE +6E08 +223E +3FE2 +273E +6AA2 +B27E +2522 +4522 +453E +8994 +1122 +ENDCHAR +STARTCHAR uni3FD8 +ENCODING 16344 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2208 +2AAA +A248 +6514 +28A2 +2FFE +6802 +A3F8 +2208 +23F8 +2000 +47FC +4404 +87FC +ENDCHAR +STARTCHAR uni3FD9 +ENCODING 16345 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +23F8 +A2A8 +63F8 +2000 +2FBE +6AAA +AFBE +2040 +2FFE +40A0 +4318 +8C06 +ENDCHAR +STARTCHAR uni3FDA +ENCODING 16346 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +2FFE +A912 +6FFE +2228 +2444 +69FE +AF48 +227E +2548 +2F7E +4048 +557E +9540 +ENDCHAR +STARTCHAR uni3FDB +ENCODING 16347 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +2FBE +A514 +671C +2554 +2FFE +6920 +AFFC +2924 +2FFC +2A24 +4BB8 +5222 +A39E +ENDCHAR +STARTCHAR uni3FDC +ENCODING 16348 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2100 +27F8 +A548 +64A8 +27F8 +2210 +67F8 +BD2E +27F8 +2000 +2FFC +4924 +4FFC +8924 +ENDCHAR +STARTCHAR uni3FDD +ENCODING 16349 +BBX 13 16 1 -2 +BITMAP +0800 +1000 +7FF0 +4010 +4010 +7FF0 +4010 +4010 +7FF0 +0400 +0800 +1040 +2020 +4010 +FFF8 +4008 +ENDCHAR +STARTCHAR uni3FDE +ENCODING 16350 +BBX 14 16 1 -2 +BITMAP +2010 +2078 +43C0 +F840 +8840 +8878 +8BC0 +8840 +F840 +887C +8FC0 +8840 +8844 +F844 +8844 +003C +ENDCHAR +STARTCHAR uni3FDF +ENCODING 16351 +BBX 13 16 1 -2 +BITMAP +2040 +2040 +4080 +F9F8 +8908 +8908 +8908 +8908 +F9F8 +8908 +8908 +8908 +8908 +F908 +89F8 +0108 +ENDCHAR +STARTCHAR uni3FE0 +ENCODING 16352 +BBX 14 16 1 -2 +BITMAP +2080 +2088 +4488 +F290 +92A0 +9080 +9FFC +9120 +F120 +9120 +9120 +9124 +9224 +F224 +941C +0800 +ENDCHAR +STARTCHAR uni3FE1 +ENCODING 16353 +BBX 14 16 1 -2 +BITMAP +0400 +0800 +3FE0 +2020 +3FE0 +2020 +3FE0 +0000 +4890 +28A0 +18C0 +28A0 +C890 +1084 +2084 +C07C +ENDCHAR +STARTCHAR uni3FE2 +ENCODING 16354 +BBX 13 15 1 -2 +BITMAP +F9F8 +8908 +89F8 +F908 +89F8 +8908 +FA28 +0410 +1000 +7FF0 +4010 +7FF0 +4010 +7FF0 +4010 +ENDCHAR +STARTCHAR uni3FE3 +ENCODING 16355 +BBX 13 16 1 -2 +BITMAP +2000 +27F0 +4410 +F7F0 +9410 +97F0 +9200 +97F8 +F888 +9488 +9548 +9408 +97E8 +F008 +9050 +0020 +ENDCHAR +STARTCHAR uni3FE4 +ENCODING 16356 +BBX 14 16 1 -2 +BITMAP +2080 +2080 +47F8 +F080 +93F0 +9100 +97F8 +9220 +F410 +9BEC +9220 +9220 +93E0 +F220 +9220 +03E0 +ENDCHAR +STARTCHAR uni3FE5 +ENCODING 16357 +BBX 14 16 1 -2 +BITMAP +2080 +2080 +47FC +F544 +9120 +93FC +9220 +9620 +FBFC +9220 +9220 +93FC +9220 +F220 +93FC +0200 +ENDCHAR +STARTCHAR uni3FE6 +ENCODING 16358 +BBX 15 16 0 -2 +BITMAP +0800 +7F78 +0848 +3E48 +0086 +3E78 +2A48 +3E30 +4048 +8486 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni3FE7 +ENCODING 16359 +BBX 14 16 1 -2 +BITMAP +2040 +27FC +4040 +F3F8 +9000 +97FC +9004 +93F8 +F040 +97FC +9000 +97FC +9008 +F77C +9548 +0718 +ENDCHAR +STARTCHAR uni3FE8 +ENCODING 16360 +BBX 14 16 1 -2 +BITMAP +2000 +27FC +4444 +F598 +9488 +97DC +9488 +95DC +F6A8 +9488 +9420 +9420 +94BC +F4A0 +94A0 +0BFC +ENDCHAR +STARTCHAR uni3FE9 +ENCODING 16361 +BBX 14 16 1 -2 +BITMAP +2248 +2150 +47FC +F404 +91F0 +9110 +97FC +9554 +F4E4 +97FC +9040 +97FC +9040 +FFFC +9548 +08A4 +ENDCHAR +STARTCHAR uni3FEA +ENCODING 16362 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +7F78 +4928 +4A28 +4828 +7EA8 +4268 +4228 +5258 +4C48 +444A +4A8A +9286 +2102 +ENDCHAR +STARTCHAR uni3FEB +ENCODING 16363 +BBX 14 16 1 -2 +BITMAP +4100 +4108 +7D30 +41C8 +4D08 +70F8 +0100 +3FF8 +2108 +2110 +2FE0 +2420 +4240 +4180 +8660 +381C +ENDCHAR +STARTCHAR uni3FEC +ENCODING 16364 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +087C +7F54 +4954 +4A54 +4854 +7E54 +427C +4240 +5240 +4C40 +4442 +4A42 +923E +2000 +ENDCHAR +STARTCHAR uni3FED +ENCODING 16365 +BBX 15 16 0 -2 +BITMAP +0C10 +7010 +4010 +40FE +4092 +7E94 +4890 +48FC +58A4 +48A4 +4CA8 +4AA8 +4890 +4928 +8944 +0282 +ENDCHAR +STARTCHAR uni3FEE +ENCODING 16366 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +1010 +7CFE +5492 +5494 +5490 +54FC +54A4 +FEA4 +10A8 +10A8 +2890 +2528 +4544 +8282 +ENDCHAR +STARTCHAR uni3FEF +ENCODING 16367 +BBX 15 16 0 -2 +BITMAP +0100 +06C0 +1830 +EFEE +0000 +1FF0 +1010 +1FF0 +0100 +3FFC +2104 +2FE8 +2420 +4240 +4180 +9E7C +ENDCHAR +STARTCHAR uni3FF0 +ENCODING 16368 +BBX 15 16 0 -2 +BITMAP +2010 +1010 +0010 +FEFE +0092 +2894 +4490 +82FC +04A4 +44A4 +28A8 +10A8 +2890 +4528 +8544 +0282 +ENDCHAR +STARTCHAR uni3FF1 +ENCODING 16369 +BBX 15 16 0 -2 +BITMAP +100C +11F0 +FD00 +11FE +1D10 +F210 +1210 +3410 +0100 +3FFC +2104 +2FE8 +2420 +4240 +4180 +9E7C +ENDCHAR +STARTCHAR uni3FF2 +ENCODING 16370 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +FE10 +10FE +2892 +4494 +FE90 +04FC +74A4 +54A4 +54A8 +74A8 +5490 +0528 +1544 +0A82 +ENDCHAR +STARTCHAR uni3FF3 +ENCODING 16371 +BBX 15 16 0 -2 +BITMAP +082A +082A +0854 +7F54 +492A +4A2A +482A +7E00 +42FE +4292 +5292 +4CFE +4492 +4A92 +92FE +2082 +ENDCHAR +STARTCHAR uni3FF4 +ENCODING 16372 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +FF10 +24FE +4292 +8194 +7E90 +24FC +3CA4 +24A4 +3CA8 +24A8 +2E90 +F528 +0544 +0682 +ENDCHAR +STARTCHAR uni3FF5 +ENCODING 16373 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +0810 +7F20 +49FE +4AAA +48AA +7EAA +42A2 +4296 +5210 +4CFE +4410 +4A28 +9244 +2082 +ENDCHAR +STARTCHAR uni3FF6 +ENCODING 16374 +BBX 15 16 0 -2 +BITMAP +2010 +1010 +FE10 +00FE +4492 +2894 +FE90 +A2FC +10A4 +FEA4 +20A8 +3CA8 +2490 +4528 +5544 +8A82 +ENDCHAR +STARTCHAR uni3FF7 +ENCODING 16375 +BBX 15 16 0 -2 +BITMAP +4410 +2410 +2810 +FEFE +1092 +7C94 +1090 +FEFC +20A4 +3EA4 +48A8 +48A8 +8E90 +7928 +2144 +0282 +ENDCHAR +STARTCHAR uni3FF8 +ENCODING 16376 +BBX 15 16 0 -2 +BITMAP +087C +0844 +087C +7F44 +497C +4A00 +48FE +7EAA +42FE +4200 +52FC +4C44 +4428 +4A10 +9268 +2186 +ENDCHAR +STARTCHAR uni3FF9 +ENCODING 16377 +BBX 15 16 0 -2 +BITMAP +1010 +1210 +117C +7C10 +54FE +5044 +5328 +7DFE +4510 +657C +5910 +49FE +5510 +9510 +22FE +0400 +ENDCHAR +STARTCHAR uni3FFA +ENCODING 16378 +BBX 15 16 0 -2 +BITMAP +7F08 +4108 +7F08 +417E +7F4A +224A +7F48 +227C +FFD4 +2254 +4954 +AAD4 +1C48 +2A88 +4914 +1822 +ENDCHAR +STARTCHAR uni3FFB +ENCODING 16379 +BBX 15 14 0 -1 +BITMAP +1FF0 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +3FF8 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni3FFC +ENCODING 16380 +BBX 15 14 0 -1 +BITMAP +3FF8 +0820 +0820 +FFFE +0820 +1020 +2020 +4020 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni3FFD +ENCODING 16381 +BBX 15 15 0 -1 +BITMAP +0440 +0820 +1010 +2FE8 +C406 +0800 +0FE0 +0020 +0140 +0080 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni3FFE +ENCODING 16382 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +7FFE +4002 +8004 +3FF0 +0100 +0100 +0500 +0200 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni3FFF +ENCODING 16383 +BBX 15 14 0 -1 +BITMAP +7FFC +0104 +1100 +11F8 +1100 +2900 +47FE +8000 +3FF8 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni4000 +ENCODING 16384 +BBX 15 15 0 -1 +BITMAP +1000 +09F8 +4108 +2508 +0928 +1110 +7102 +1102 +10FE +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni4001 +ENCODING 16385 +BBX 15 15 0 -1 +BITMAP +0200 +FFFE +0400 +0FF0 +1810 +2FF0 +C810 +0FF0 +0810 +0830 +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni4002 +ENCODING 16386 +BBX 15 15 0 -1 +BITMAP +0100 +7FFC +4004 +0400 +FFFE +0820 +1E40 +03C0 +3C38 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni4003 +ENCODING 16387 +BBX 15 14 0 -1 +BITMAP +7FFC +0200 +0D08 +7190 +02A0 +0CC0 +71A0 +0698 +1A86 +E100 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni4004 +ENCODING 16388 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +7FFE +4202 +8924 +2848 +4994 +0E10 +77F0 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni4005 +ENCODING 16389 +BBX 15 15 0 -1 +BITMAP +2020 +1020 +FC20 +09FC +1020 +3820 +5420 +9020 +13FE +1000 +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni4006 +ENCODING 16390 +BBX 15 16 0 -2 +BITMAP +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +7FFC +0000 +1108 +26D0 +1830 +E00E +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni4007 +ENCODING 16391 +BBX 15 15 0 -1 +BITMAP +1080 +1080 +11FC +FE20 +1020 +11FC +7C20 +4524 +4524 +7DFC +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni4008 +ENCODING 16392 +BBX 15 15 0 -1 +BITMAP +7DFC +4420 +7D20 +4520 +7DFE +5050 +4890 +5512 +620E +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni4009 +ENCODING 16393 +BBX 15 16 0 -2 +BITMAP +0070 +1F80 +0200 +FFFE +0820 +37D8 +C446 +3FF8 +2008 +27C8 +2448 +27D8 +0000 +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni400A +ENCODING 16394 +BBX 15 16 0 -2 +BITMAP +27BC +14A4 +9294 +44A4 +4040 +11B0 +2E4E +E390 +2060 +2388 +2070 +0380 +0000 +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni400B +ENCODING 16395 +BBX 15 16 0 -2 +BITMAP +2100 +21FE +2220 +243E +F820 +23FE +22AA +2252 +2326 +3A52 +E2AA +43FE +0000 +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni400C +ENCODING 16396 +BBX 15 16 0 -2 +BITMAP +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +7D7C +1110 +7D7C +4444 +7C7C +4444 +7FFC +2448 +FFFE +ENDCHAR +STARTCHAR uni400D +ENCODING 16397 +BBX 15 16 0 -2 +BITMAP +1040 +FEF8 +2948 +FE30 +01CE +7CF8 +4420 +7DFC +4488 +7CF8 +1088 +FEF8 +1050 +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni400E +ENCODING 16398 +BBX 14 15 1 -2 +BITMAP +07FC +F880 +8880 +8900 +F900 +8A00 +8BF8 +F808 +8808 +8808 +8808 +F808 +8808 +0050 +0020 +ENDCHAR +STARTCHAR uni400F +ENCODING 16399 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +1FFC +2004 +2004 +5FE4 +9024 +1FE4 +1024 +1FE4 +1024 +1FE4 +1024 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni4010 +ENCODING 16400 +BBX 14 16 1 -2 +BITMAP +0010 +FC10 +8420 +8440 +8488 +FC08 +8410 +8420 +8444 +FC84 +8408 +8408 +8410 +FC20 +8440 +0180 +ENDCHAR +STARTCHAR uni4011 +ENCODING 16401 +BBX 14 15 1 -2 +BITMAP +03F0 +F910 +8990 +8950 +F950 +8910 +88A0 +F8A0 +88A0 +8840 +8840 +F8A0 +8910 +0208 +0404 +ENDCHAR +STARTCHAR uni4012 +ENCODING 16402 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +FBC0 +8840 +8840 +F840 +8840 +8FFC +F840 +8840 +8840 +8840 +F840 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni4013 +ENCODING 16403 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F880 +8880 +8BF0 +F890 +8890 +8890 +FA90 +8990 +8890 +8950 +F954 +8A14 +040C +0804 +ENDCHAR +STARTCHAR uni4014 +ENCODING 16404 +BBX 13 14 1 -2 +BITMAP +FBF8 +8888 +8888 +FA88 +8A88 +8A88 +FA88 +8C88 +8888 +8908 +F908 +8A08 +0450 +0820 +ENDCHAR +STARTCHAR uni4015 +ENCODING 16405 +BBX 13 16 1 -2 +BITMAP +0008 +07C8 +F048 +9048 +9048 +F3C8 +9208 +9208 +F408 +97C8 +9048 +9048 +F048 +9048 +0288 +0108 +ENDCHAR +STARTCHAR uni4016 +ENCODING 16406 +BBX 14 14 1 -2 +BITMAP +FBF8 +8840 +8840 +F840 +8840 +8FFC +F840 +8840 +88A0 +88A0 +F910 +8910 +0208 +0404 +ENDCHAR +STARTCHAR uni4017 +ENCODING 16407 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +97F0 +9090 +F090 +9090 +9090 +F7FC +9080 +9140 +9140 +F220 +9220 +0410 +080C +ENDCHAR +STARTCHAR uni4018 +ENCODING 16408 +BBX 14 15 1 -2 +BITMAP +07F8 +F120 +9120 +9120 +F120 +9120 +9FFC +F120 +9120 +9120 +9120 +F220 +9220 +0420 +0820 +ENDCHAR +STARTCHAR uni4019 +ENCODING 16409 +BBX 14 15 1 -2 +BITMAP +0200 +F2FC +9224 +9224 +F224 +93A4 +9E24 +F224 +9224 +92A4 +9324 +F244 +9044 +0094 +0108 +ENDCHAR +STARTCHAR uni401A +ENCODING 16410 +BBX 13 16 1 -2 +BITMAP +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +0000 +1800 +E1F8 +8108 +8108 +9908 +E128 +8110 +0100 +ENDCHAR +STARTCHAR uni401B +ENCODING 16411 +BBX 13 16 1 -2 +BITMAP +0200 +0200 +F200 +93F8 +9548 +F948 +9148 +9248 +F248 +9488 +9888 +9108 +F208 +9408 +0850 +0020 +ENDCHAR +STARTCHAR uni401C +ENCODING 16412 +BBX 12 16 1 -2 +BITMAP +1000 +1000 +3FF0 +4490 +8890 +1110 +2250 +4420 +0800 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +ENDCHAR +STARTCHAR uni401D +ENCODING 16413 +BBX 14 15 1 -1 +BITMAP +0020 +0220 +F220 +9224 +9224 +F228 +93B0 +9220 +F220 +9220 +9220 +9224 +F2A4 +9324 +021C +ENDCHAR +STARTCHAR uni401E +ENCODING 16414 +BBX 14 16 1 -2 +BITMAP +0020 +0220 +F920 +8920 +8820 +FA20 +8920 +8920 +F820 +883C +8FE0 +8820 +F820 +8820 +0020 +0020 +ENDCHAR +STARTCHAR uni401F +ENCODING 16415 +BBX 14 16 1 -2 +BITMAP +0120 +0120 +F120 +97F8 +9128 +F128 +97F8 +9520 +F520 +97FC +9124 +9124 +F234 +9228 +0420 +0820 +ENDCHAR +STARTCHAR uni4020 +ENCODING 16416 +BBX 13 14 1 -1 +BITMAP +F9F8 +8908 +8908 +8908 +F9F8 +8908 +8908 +8908 +F9F8 +8908 +8908 +8908 +F9F8 +8908 +ENDCHAR +STARTCHAR uni4021 +ENCODING 16417 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F840 +8840 +887C +F840 +8840 +8840 +FBF8 +8A08 +8A08 +8A08 +FA08 +8A08 +03F8 +0208 +ENDCHAR +STARTCHAR uni4022 +ENCODING 16418 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F100 +91F8 +9240 +F440 +9040 +9040 +F7FC +9040 +90A0 +90A0 +F110 +9110 +0208 +0404 +ENDCHAR +STARTCHAR uni4023 +ENCODING 16419 +BBX 14 14 1 -1 +BITMAP +0080 +F040 +9050 +9010 +F110 +9120 +9528 +F544 +9544 +9984 +9110 +F310 +9510 +08F0 +ENDCHAR +STARTCHAR uni4024 +ENCODING 16420 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3F30 +4128 +A224 +1422 +0820 +3020 +DFF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni4025 +ENCODING 16421 +BBX 14 16 1 -2 +BITMAP +0010 +0038 +FBC0 +8A00 +8A40 +FA40 +8A40 +8BFC +F840 +8840 +8950 +8948 +FA44 +8C44 +0140 +0080 +ENDCHAR +STARTCHAR uni4026 +ENCODING 16422 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F040 +9040 +97FC +F040 +9040 +9040 +F3F8 +9208 +9208 +9208 +F208 +9208 +03F8 +0208 +ENDCHAR +STARTCHAR uni4027 +ENCODING 16423 +BBX 14 16 1 -2 +BITMAP +0220 +0220 +F220 +9220 +97F8 +F220 +9220 +9220 +F220 +9FFC +9000 +9220 +F210 +9410 +0808 +1008 +ENDCHAR +STARTCHAR uni4028 +ENCODING 16424 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F3C0 +9040 +9040 +F7FC +9040 +9040 +F040 +93F8 +9208 +9208 +F208 +9208 +03F8 +0208 +ENDCHAR +STARTCHAR uni4029 +ENCODING 16425 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F1F0 +9210 +9620 +F940 +9080 +9140 +F230 +940C +9BF0 +9210 +F210 +9210 +03F0 +0210 +ENDCHAR +STARTCHAR uni402A +ENCODING 16426 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F278 +9400 +9900 +F100 +92FC +9610 +FA10 +9210 +9210 +9210 +F210 +9210 +0250 +0220 +ENDCHAR +STARTCHAR uni402B +ENCODING 16427 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F140 +9220 +9410 +F80C +97F0 +9000 +F000 +97F0 +9410 +9410 +F410 +9410 +07F0 +0410 +ENDCHAR +STARTCHAR uni402C +ENCODING 16428 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +F140 +9220 +9410 +F80C +97F0 +9080 +F080 +9080 +97F0 +9080 +F080 +9080 +0FFC +ENDCHAR +STARTCHAR uni402D +ENCODING 16429 +BBX 14 16 1 -2 +BITMAP +0040 +0020 +F820 +8BFC +8840 +F848 +8888 +89F0 +F824 +8844 +8888 +8B10 +F820 +8850 +0088 +0304 +ENDCHAR +STARTCHAR uni402E +ENCODING 16430 +BBX 14 16 1 -2 +BITMAP +0100 +0080 +F7F8 +9200 +9200 +F200 +93F0 +9000 +F2A0 +92A0 +92A0 +92A0 +F4A0 +94A4 +08A4 +101C +ENDCHAR +STARTCHAR uni402F +ENCODING 16431 +BBX 14 16 1 -2 +BITMAP +0090 +0088 +F7FC +9080 +9080 +F7F8 +9488 +9488 +F7F8 +9488 +9488 +97F8 +F488 +9488 +04A8 +0410 +ENDCHAR +STARTCHAR uni4030 +ENCODING 16432 +BBX 14 16 1 -2 +BITMAP +0110 +F108 +9204 +9444 +9040 +F0A0 +9110 +9208 +F404 +93F8 +9208 +9208 +F208 +9208 +03F8 +0208 +ENDCHAR +STARTCHAR uni4031 +ENCODING 16433 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F3F0 +9220 +9540 +F080 +9360 +9C9C +F3E0 +9080 +93E0 +9080 +FFF8 +9080 +0080 +0080 +ENDCHAR +STARTCHAR uni4032 +ENCODING 16434 +BBX 14 16 1 -2 +BITMAP +0200 +0200 +F3F8 +9400 +9BF0 +F210 +9290 +9250 +F7FC +9210 +9490 +9450 +F7F8 +9010 +00A0 +0040 +ENDCHAR +STARTCHAR uni4033 +ENCODING 16435 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +9040 +9040 +F3F8 +9248 +9248 +F3F8 +9040 +90E0 +9150 +F248 +9444 +0040 +0040 +ENDCHAR +STARTCHAR uni4034 +ENCODING 16436 +BBX 14 14 1 -1 +BITMAP +07F8 +F000 +9248 +9490 +F920 +9490 +9248 +F000 +97F8 +9080 +9080 +F080 +9080 +0FFC +ENDCHAR +STARTCHAR uni4035 +ENCODING 16437 +BBX 14 16 1 -2 +BITMAP +0040 +0080 +F110 +9208 +97FC +F104 +9100 +93F8 +F440 +9040 +97FC +9040 +F0A0 +9110 +0208 +0C04 +ENDCHAR +STARTCHAR uni4036 +ENCODING 16438 +BBX 14 16 1 -2 +BITMAP +0100 +0080 +F7F0 +9410 +9410 +F7F0 +9410 +9410 +F7F0 +9480 +9488 +9450 +F420 +9510 +060C +0400 +ENDCHAR +STARTCHAR uni4037 +ENCODING 16439 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F110 +9390 +913C +F114 +9114 +97D4 +F114 +9114 +9214 +9294 +F7D4 +9224 +0054 +0088 +ENDCHAR +STARTCHAR uni4038 +ENCODING 16440 +BBX 14 16 1 -2 +BITMAP +1018 +11E0 +FD00 +1100 +1DFC +F110 +1110 +5210 +2410 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +ENDCHAR +STARTCHAR uni4039 +ENCODING 16441 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +9FFE +9040 +9248 +F248 +9248 +9554 +9554 +F842 +90A0 +90A0 +9110 +F208 +0C06 +ENDCHAR +STARTCHAR uni403A +ENCODING 16442 +BBX 14 16 0 -2 +BITMAP +1080 +20FC +6910 +AA90 +2860 +2890 +230C +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni403B +ENCODING 16443 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F3F8 +9248 +93F8 +F248 +93F8 +9000 +F7FC +9100 +9200 +93F8 +F008 +9008 +0050 +0020 +ENDCHAR +STARTCHAR uni403C +ENCODING 16444 +BBX 14 15 1 -2 +BITMAP +07F8 +F400 +9400 +95F0 +F400 +9400 +97F8 +F540 +9548 +9550 +9520 +F520 +9910 +0948 +1184 +ENDCHAR +STARTCHAR uni403D +ENCODING 16445 +BBX 14 16 1 -2 +BITMAP +0008 +001C +F770 +9110 +9110 +F250 +925C +9750 +F150 +9550 +9550 +927C +F200 +9500 +08FC +1000 +ENDCHAR +STARTCHAR uni403E +ENCODING 16446 +BBX 15 15 0 -2 +BITMAP +FEFC +1044 +2028 +7E10 +A228 +3EC6 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni403F +ENCODING 16447 +BBX 15 16 0 -2 +BITMAP +0104 +010E +F130 +9120 +97E0 +F120 +913E +9164 +F1A4 +9724 +9124 +9124 +F124 +9124 +0544 +0284 +ENDCHAR +STARTCHAR uni4040 +ENCODING 16448 +BBX 14 16 1 -2 +BITMAP +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +1018 +11E0 +FD00 +1100 +1DFC +F110 +1110 +5210 +2410 +ENDCHAR +STARTCHAR uni4041 +ENCODING 16449 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9000 +9000 +F3F8 +9208 +9208 +F208 +93F8 +9040 +9150 +F248 +9444 +0140 +0080 +ENDCHAR +STARTCHAR uni4042 +ENCODING 16450 +BBX 14 16 1 -2 +BITMAP +FDF8 +9088 +FC88 +8450 +FC20 +9050 +FD8C +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +ENDCHAR +STARTCHAR uni4043 +ENCODING 16451 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +9040 +9040 +F3F8 +9040 +9040 +F7FC +9080 +9148 +9350 +F520 +9910 +018C +0100 +ENDCHAR +STARTCHAR uni4044 +ENCODING 16452 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F3F8 +9040 +9040 +F7FC +9110 +90A0 +F3F8 +9040 +9040 +97FC +F040 +9040 +0040 +0040 +ENDCHAR +STARTCHAR uni4045 +ENCODING 16453 +BBX 14 14 1 -1 +BITMAP +03F8 +F010 +9020 +9040 +F7FC +9040 +9140 +F080 +93F8 +92A8 +92A8 +F2A8 +92A8 +0FFC +ENDCHAR +STARTCHAR uni4046 +ENCODING 16454 +BBX 14 16 1 -2 +BITMAP +0080 +0100 +F7F8 +9220 +9490 +F88C +97F0 +9490 +F490 +97F0 +9490 +9490 +F7F0 +9084 +0084 +007C +ENDCHAR +STARTCHAR uni4047 +ENCODING 16455 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4202 +A96C +4994 +0E10 +77F0 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni4048 +ENCODING 16456 +BBX 15 16 0 -2 +BITMAP +1040 +0840 +3E7E +2288 +2350 +3E20 +2058 +4186 +9FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni4049 +ENCODING 16457 +BBX 15 16 0 -2 +BITMAP +1048 +0844 +3E7E +23C0 +2224 +3E28 +2212 +206A +4186 +9FF2 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni404A +ENCODING 16458 +BBX 14 15 1 -2 +BITMAP +07F0 +F290 +9220 +9140 +F080 +9360 +9C1C +F3F0 +9210 +93F0 +9210 +F3F0 +9210 +03F0 +0210 +ENDCHAR +STARTCHAR uni404B +ENCODING 16459 +BBX 14 16 1 -2 +BITMAP +0090 +0290 +F290 +97FC +9290 +F290 +92F0 +9200 +F3FC +9040 +97FC +90E0 +F150 +9248 +0C44 +0040 +ENDCHAR +STARTCHAR uni404C +ENCODING 16460 +BBX 14 15 1 -2 +BITMAP +07FC +F444 +97FC +9444 +F7FC +9000 +93F8 +F208 +93F8 +9208 +93F8 +F208 +9208 +0228 +0210 +ENDCHAR +STARTCHAR uni404D +ENCODING 16461 +BBX 15 16 0 -2 +BITMAP +0014 +0012 +F010 +97FE +9410 +F410 +95D0 +9412 +F412 +95D4 +9554 +9548 +F5DA +942A +0846 +1082 +ENDCHAR +STARTCHAR uni404E +ENCODING 16462 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9000 +93F8 +F208 +93F8 +9000 +F7FC +9404 +93F8 +9040 +F040 +9040 +0140 +0080 +ENDCHAR +STARTCHAR uni404F +ENCODING 16463 +BBX 14 15 1 -2 +BITMAP +07FC +F0A0 +90A0 +97FC +F4A4 +94A4 +97FC +F000 +9080 +9FFC +9110 +F320 +90C0 +01B0 +0608 +ENDCHAR +STARTCHAR uni4050 +ENCODING 16464 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9150 +F040 +93F8 +9248 +F248 +9248 +97FC +9040 +F0A0 +9110 +0208 +0404 +ENDCHAR +STARTCHAR uni4051 +ENCODING 16465 +BBX 14 15 1 -2 +BITMAP +03F0 +F210 +93F0 +9210 +F3F0 +9000 +97FC +F200 +93F8 +94A8 +9928 +F248 +9488 +0150 +0220 +ENDCHAR +STARTCHAR uni4052 +ENCODING 16466 +BBX 14 15 1 -2 +BITMAP +03F0 +F210 +9210 +93F0 +F000 +9FFC +9210 +F3F0 +9210 +93F0 +9210 +F27C +9F90 +0010 +0010 +ENDCHAR +STARTCHAR uni4053 +ENCODING 16467 +BBX 14 15 1 -2 +BITMAP +0110 +F4A4 +9444 +94A4 +F514 +9404 +97FC +F110 +9288 +94F4 +9110 +F2A0 +9040 +01B0 +0E0C +ENDCHAR +STARTCHAR uni4054 +ENCODING 16468 +BBX 14 16 1 -2 +BITMAP +003C +07C0 +F088 +9248 +9110 +F3F8 +9080 +9080 +F7FC +9100 +91F8 +9288 +F250 +9420 +00D0 +030C +ENDCHAR +STARTCHAR uni4055 +ENCODING 16469 +BBX 14 15 1 -2 +BITMAP +07F8 +F408 +97F8 +9440 +F7FC +9420 +9514 +F60C +9000 +97F8 +9408 +F7F8 +9408 +07F8 +0408 +ENDCHAR +STARTCHAR uni4056 +ENCODING 16470 +BBX 14 16 1 -2 +BITMAP +0040 +0248 +F150 +9040 +97FC +F150 +9248 +9404 +F080 +97FC +9110 +9210 +F320 +90C0 +0330 +0C08 +ENDCHAR +STARTCHAR uni4057 +ENCODING 16471 +BBX 14 15 1 -1 +BITMAP +0040 +0248 +F248 +9248 +93F8 +F000 +97FC +9000 +F3F8 +9208 +9208 +93F8 +F110 +90A0 +07FC +ENDCHAR +STARTCHAR uni4058 +ENCODING 16472 +BBX 15 15 1 -1 +BITMAP +0040 +F0F8 +9188 +9650 +9120 +F0C0 +9780 +91FC +9240 +F040 +97FE +9040 +9444 +F444 +07FC +ENDCHAR +STARTCHAR uni4059 +ENCODING 16473 +BBX 14 15 1 -2 +BITMAP +03F8 +F208 +93F8 +9208 +F3F8 +9040 +97FC +F404 +9080 +97FC +9110 +F320 +90C0 +0130 +0608 +ENDCHAR +STARTCHAR uni405A +ENCODING 16474 +BBX 13 15 1 -2 +BITMAP +03F0 +F210 +9210 +93F0 +F000 +97F8 +9408 +F7F8 +9408 +97F8 +9408 +F7F8 +9120 +0210 +0408 +ENDCHAR +STARTCHAR uni405B +ENCODING 16475 +BBX 14 16 1 -2 +BITMAP +0040 +0080 +F7F8 +9448 +9448 +F7F8 +9448 +9488 +F7F8 +9080 +9150 +9168 +F278 +9244 +0444 +083C +ENDCHAR +STARTCHAR uni405C +ENCODING 16476 +BBX 14 15 1 -2 +BITMAP +03F8 +FA08 +8BF8 +8A08 +FBF8 +8840 +8A48 +F950 +8840 +8FFC +8920 +F920 +8A24 +0424 +081C +ENDCHAR +STARTCHAR uni405D +ENCODING 16477 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +2CA8 +4920 +1450 +2288 +7FFE +4002 +9FF4 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni405E +ENCODING 16478 +BBX 15 16 0 -2 +BITMAP +0820 +1450 +2288 +0820 +1450 +2288 +FFFE +0800 +1FF0 +2810 +4FF0 +8810 +0FF0 +0810 +0FF0 +0810 +ENDCHAR +STARTCHAR uni405F +ENCODING 16479 +BBX 14 15 1 -1 +BITMAP +0210 +0110 +F120 +97F8 +9080 +F3F0 +9080 +97FC +F100 +9200 +93F8 +9440 +F840 +9040 +07FC +ENDCHAR +STARTCHAR uni4060 +ENCODING 16480 +BBX 14 16 1 -2 +BITMAP +0220 +0140 +F000 +9FFC +9140 +F7F0 +9150 +9FFC +F150 +97F0 +9140 +9360 +F550 +994C +0140 +0140 +ENDCHAR +STARTCHAR uni4061 +ENCODING 16481 +BBX 14 15 1 -2 +BITMAP +07BC +F4A4 +97BC +94A4 +F7BC +9404 +9444 +F444 +9444 +94A4 +9494 +F514 +9404 +0414 +0408 +ENDCHAR +STARTCHAR uni4062 +ENCODING 16482 +BBX 15 16 0 -2 +BITMAP +0210 +0110 +F110 +97BE +9240 +F200 +93BE +928A +F288 +92A8 +92AE +92A8 +F4A8 +95A8 +085E +1080 +ENDCHAR +STARTCHAR uni4063 +ENCODING 16483 +BBX 14 16 1 -2 +BITMAP +0040 +F7FC +9040 +93F8 +9248 +F3F8 +9248 +93F8 +F044 +97FC +9010 +97FC +F210 +9110 +0050 +0020 +ENDCHAR +STARTCHAR uni4064 +ENCODING 16484 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9110 +90A0 +F7FC +9444 +95F4 +F444 +95F4 +9514 +9514 +F5F4 +9404 +0414 +0408 +ENDCHAR +STARTCHAR uni4065 +ENCODING 16485 +BBX 14 14 1 -1 +BITMAP +07FC +F490 +9490 +97FC +F490 +9440 +97FC +F480 +95F8 +9688 +9488 +F4F8 +9400 +07FC +ENDCHAR +STARTCHAR uni4066 +ENCODING 16486 +BBX 14 16 1 -2 +BITMAP +0080 +00F8 +F080 +97FC +9484 +F4F0 +9788 +9478 +F400 +95F8 +9508 +95F8 +F508 +99F8 +0908 +13FC +ENDCHAR +STARTCHAR uni4067 +ENCODING 16487 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +91F0 +F040 +93F8 +9248 +F3F8 +9040 +93F8 +9040 +F7FC +90A0 +0110 +060C +ENDCHAR +STARTCHAR uni4068 +ENCODING 16488 +BBX 15 16 0 -2 +BITMAP +0200 +011E +F7D2 +9012 +97D4 +F454 +97D8 +9014 +F7D2 +9092 +9112 +91DA +F714 +9110 +0510 +0210 +ENDCHAR +STARTCHAR uni4069 +ENCODING 16489 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F1F0 +9210 +9420 +F3F8 +9248 +9248 +F3F8 +9248 +9248 +93F8 +F000 +92A8 +0254 +0454 +ENDCHAR +STARTCHAR uni406A +ENCODING 16490 +BBX 15 16 0 -2 +BITMAP +0200 +0202 +E23C +AFA0 +A220 +EFA0 +AABE +AFA4 +EAA4 +AFA4 +A224 +AFA4 +E224 +A244 +0244 +0284 +ENDCHAR +STARTCHAR uni406B +ENCODING 16491 +BBX 14 14 1 -1 +BITMAP +03F8 +F248 +9358 +92E8 +F248 +93F8 +9040 +F3F8 +9040 +97FC +9000 +F548 +94A4 +08A4 +ENDCHAR +STARTCHAR uni406C +ENCODING 16492 +BBX 14 16 1 -2 +BITMAP +0208 +0110 +F000 +97FC +9444 +F554 +94E4 +9444 +F7FC +9000 +93F8 +9208 +F3F8 +9208 +03F8 +0208 +ENDCHAR +STARTCHAR uni406D +ENCODING 16493 +BBX 14 16 1 -2 +BITMAP +0050 +0048 +F7FC +90A0 +9110 +F208 +9404 +9330 +F2A8 +9220 +977C +9220 +F550 +9550 +0888 +1104 +ENDCHAR +STARTCHAR uni406E +ENCODING 16494 +BBX 15 15 0 -2 +BITMAP +07BC +F108 +9528 +97BC +F318 +95AA +9946 +F000 +93F8 +9208 +9208 +F3F8 +9208 +0208 +03F8 +ENDCHAR +STARTCHAR uni406F +ENCODING 16495 +BBX 15 16 0 -2 +BITMAP +0040 +00A0 +F118 +96E6 +9000 +F3F8 +9208 +93F8 +F000 +97BC +9084 +94A4 +F294 +94A4 +0294 +0108 +ENDCHAR +STARTCHAR uni4070 +ENCODING 16496 +BBX 15 15 0 -2 +BITMAP +00FE +F010 +9720 +927C +F244 +9244 +927C +F244 +927C +93C4 +9E44 +F07C +9028 +0044 +0082 +ENDCHAR +STARTCHAR uni4071 +ENCODING 16497 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F3F8 +9040 +97FC +F210 +9738 +9210 +F310 +9C7C +9000 +97FC +F120 +9120 +0224 +041C +ENDCHAR +STARTCHAR uni4072 +ENCODING 16498 +BBX 14 15 1 -2 +BITMAP +07FC +F4A4 +94A4 +97FC +F000 +93F8 +9208 +F3F8 +9208 +93F8 +9208 +F3F8 +9110 +0208 +0404 +ENDCHAR +STARTCHAR uni4073 +ENCODING 16499 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9048 +F7FC +90A0 +9110 +F208 +9514 +9110 +97FC +F110 +9110 +0210 +0410 +ENDCHAR +STARTCHAR uni4074 +ENCODING 16500 +BBX 15 16 0 -2 +BITMAP +0040 +0FFE +F000 +97FC +9404 +F5F4 +9514 +97FC +F000 +93F8 +9208 +93F8 +F208 +93F8 +0000 +0FFE +ENDCHAR +STARTCHAR uni4075 +ENCODING 16501 +BBX 14 15 1 -2 +BITMAP +03F8 +F2A8 +92A8 +93F8 +F000 +97FC +9000 +F3F8 +9208 +93F8 +90C4 +F128 +9310 +0548 +0184 +ENDCHAR +STARTCHAR uni4076 +ENCODING 16502 +BBX 15 16 0 -2 +BITMAP +0108 +0208 +F7C8 +9450 +97DE +F464 +97D4 +9214 +F114 +97D4 +9214 +93C8 +F248 +9454 +0554 +08A2 +ENDCHAR +STARTCHAR uni4077 +ENCODING 16503 +BBX 15 16 0 -2 +BITMAP +0A80 +3138 +2288 +3838 +2288 +3938 +2288 +7FFE +4002 +9FF4 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni4078 +ENCODING 16504 +BBX 15 16 0 -2 +BITMAP +0090 +03FC +F294 +93FC +9294 +F3FC +9000 +93FC +F200 +92F8 +9200 +93FE +F520 +9514 +0548 +0986 +ENDCHAR +STARTCHAR uni4079 +ENCODING 16505 +BBX 14 16 1 -2 +BITMAP +0020 +0790 +F4FC +9480 +94C4 +F7A8 +9400 +947C +F790 +9490 +9CFC +9490 +F490 +9790 +0490 +0010 +ENDCHAR +STARTCHAR uni407A +ENCODING 16506 +BBX 14 15 1 -2 +BITMAP +03F8 +F2A8 +93F8 +9040 +F3F8 +9040 +97FC +F110 +90A0 +93F8 +9040 +F7FC +9040 +0040 +0040 +ENDCHAR +STARTCHAR uni407B +ENCODING 16507 +BBX 15 16 0 -2 +BITMAP +0444 +04E4 +E8A8 +AAAA +AEEE +E4A4 +AAAA +AEEE +E242 +A040 +AFFE +A0E0 +E150 +A248 +0C46 +0040 +ENDCHAR +STARTCHAR uni407C +ENCODING 16508 +BBX 14 15 1 -1 +BITMAP +03F8 +F248 +9358 +9248 +93F8 +F040 +93F8 +9040 +F7FC +92A8 +9454 +9040 +F3F8 +9040 +07FC +ENDCHAR +STARTCHAR uni407D +ENCODING 16509 +BBX 14 16 1 -2 +BITMAP +0248 +0490 +F248 +9000 +97F8 +F528 +94C8 +9528 +F7F8 +9490 +96D0 +9490 +F6D4 +9494 +048C +06C4 +ENDCHAR +STARTCHAR uni407E +ENCODING 16510 +BBX 14 16 1 -2 +BITMAP +0210 +0FFC +F210 +9000 +97F8 +F528 +9528 +97F8 +F050 +97FC +9440 +9648 +F550 +9524 +0854 +118C +ENDCHAR +STARTCHAR uni407F +ENCODING 16511 +BBX 15 16 0 -2 +BITMAP +7F14 +6B12 +5D10 +7F7E +0810 +7F10 +0828 +FFA8 +5544 +9FF2 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni4080 +ENCODING 16512 +BBX 15 16 0 -2 +BITMAP +0110 +07FC +F040 +93F8 +9040 +F7FC +9000 +93D4 +F112 +97FE +9350 +9534 +F38C +908A +0296 +0102 +ENDCHAR +STARTCHAR uni4081 +ENCODING 16513 +BBX 15 16 0 -2 +BITMAP +01F0 +0210 +F7FC +9204 +93FC +F224 +93B8 +9222 +F1FE +9210 +97FC +9244 +F3FC +90D0 +014A +063E +ENDCHAR +STARTCHAR uni4082 +ENCODING 16514 +BBX 15 16 0 -2 +BITMAP +07BC +04A4 +F7BC +94A4 +97BC +F4A4 +97BC +9120 +F3FE +9220 +97FC +9A20 +F3FC +9220 +03FE +0200 +ENDCHAR +STARTCHAR uni4083 +ENCODING 16515 +BBX 15 16 0 -2 +BITMAP +003C +07C0 +F244 +9128 +97FC +F4A4 +97FC +9008 +F788 +94FE +9788 +94A8 +F798 +9508 +05A8 +0690 +ENDCHAR +STARTCHAR uni4084 +ENCODING 16516 +BBX 14 16 1 -2 +BITMAP +07BC +F4A4 +97BC +94A4 +97BC +F140 +93FC +9640 +FBF8 +9240 +93FC +9000 +F3F8 +9110 +00E0 +0F1C +ENDCHAR +STARTCHAR uni4085 +ENCODING 16517 +BBX 15 16 0 -2 +BITMAP +0444 +04E4 +EA0A +AEEE +A404 +EAEA +AE0E +A0E0 +EAAA +AAEA +A040 +A7FC +E444 +A7FC +0044 +0FFE +ENDCHAR +STARTCHAR uni4086 +ENCODING 16518 +BBX 14 16 0 -2 +BITMAP +0040 +7C40 +0440 +287C +1084 +0884 +FF04 +1A44 +2824 +2824 +4804 +4804 +8804 +0804 +2828 +1010 +ENDCHAR +STARTCHAR uni4087 +ENCODING 16519 +BBX 15 15 0 -2 +BITMAP +7CFC +0424 +2824 +1024 +0824 +FE24 +1AFC +2844 +2844 +4844 +4844 +8844 +0844 +29FE +1000 +ENDCHAR +STARTCHAR uni4088 +ENCODING 16520 +BBX 15 16 0 -2 +BITMAP +0010 +7C10 +0410 +28FE +1092 +0892 +FE92 +1A92 +28FE +2892 +4810 +4814 +8812 +09FE +2882 +1000 +ENDCHAR +STARTCHAR uni4089 +ENCODING 16521 +BBX 15 16 0 -2 +BITMAP +0080 +F8BC +0884 +5108 +21FE +1320 +FD20 +357C +3190 +5110 +51FE +5110 +9128 +1128 +5144 +2182 +ENDCHAR +STARTCHAR uni408A +ENCODING 16522 +BBX 15 16 0 -2 +BITMAP +0080 +F8F8 +0908 +53FE +2512 +1122 +FDFE +3440 +30A2 +5354 +5098 +5334 +9054 +1092 +5350 +2020 +ENDCHAR +STARTCHAR uni408B +ENCODING 16523 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +FE48 +1030 +7DFE +4452 +7C94 +1110 +1230 +7C20 +11FE +5070 +7CA8 +1124 +1222 +1020 +ENDCHAR +STARTCHAR uni408C +ENCODING 16524 +BBX 15 16 0 -2 +BITMAP +0020 +F9FC +0888 +5050 +23FE +1000 +FDFC +3524 +31FC +5124 +51FC +5020 +91FC +1020 +53FE +2000 +ENDCHAR +STARTCHAR uni408D +ENCODING 16525 +BBX 15 16 0 -2 +BITMAP +01FC +F904 +09FC +5104 +21FC +1088 +FDFC +3488 +33FE +5088 +5124 +52AA +9070 +10A8 +5124 +2060 +ENDCHAR +STARTCHAR uni408E +ENCODING 16526 +BBX 15 16 0 -2 +BITMAP +0528 +FFBE +0948 +57BE +2318 +15AA +FD46 +37FC +3204 +53FC +5204 +53FC +9204 +13FC +5108 +2204 +ENDCHAR +STARTCHAR uni408F +ENCODING 16527 +BBX 14 16 0 -2 +BITMAP +2000 +21FC +3C44 +5044 +9044 +1044 +1094 +FE88 +1100 +10FC +1084 +2884 +2484 +4484 +40FC +8084 +ENDCHAR +STARTCHAR uni4090 +ENCODING 16528 +BBX 14 16 0 -2 +BITMAP +2020 +2020 +2124 +7D24 +5124 +9124 +11FC +FC20 +1020 +1124 +1124 +2924 +2524 +4524 +41FC +8004 +ENDCHAR +STARTCHAR uni4091 +ENCODING 16529 +BBX 15 16 0 -2 +BITMAP +2048 +2048 +2048 +7D48 +514A +916C +1148 +FD48 +1148 +1148 +1148 +294A +256A +478A +4106 +8000 +ENDCHAR +STARTCHAR uni4092 +ENCODING 16530 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +3C20 +53FE +9020 +1020 +11FC +FE00 +1000 +11FC +1104 +2904 +2504 +4504 +41FC +8104 +ENDCHAR +STARTCHAR uni4093 +ENCODING 16531 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +3908 +51F8 +9108 +1108 +11F8 +FD08 +1108 +11F8 +2890 +2490 +4492 +8112 +020E +ENDCHAR +STARTCHAR uni4094 +ENCODING 16532 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +21FC +7C20 +5020 +93FE +1088 +FC50 +11FC +1020 +1020 +2BFE +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni4095 +ENCODING 16533 +BBX 15 16 0 -2 +BITMAP +2080 +20FC +2104 +7DF8 +5008 +93FE +1040 +FCA2 +1334 +1058 +1094 +2B34 +2452 +4490 +4350 +8020 +ENDCHAR +STARTCHAR uni4096 +ENCODING 16534 +BBX 15 15 0 -2 +BITMAP +FFFE +0200 +0210 +0408 +0404 +0800 +0FF8 +1808 +2808 +4808 +8808 +0808 +0808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni4097 +ENCODING 16535 +BBX 14 15 0 -1 +BITMAP +0040 +0040 +FE40 +1044 +1044 +2048 +3E50 +6260 +6240 +A2C0 +2340 +2244 +3E44 +2244 +003C +ENDCHAR +STARTCHAR uni4098 +ENCODING 16536 +BBX 15 15 0 -2 +BITMAP +03FC +FD04 +1144 +1124 +20A8 +3C88 +6488 +6450 +A450 +2420 +2420 +3C50 +2488 +2104 +0602 +ENDCHAR +STARTCHAR uni4099 +ENCODING 16537 +BBX 14 15 0 -2 +BITMAP +007C +FE44 +1048 +1048 +2050 +3E48 +6248 +6244 +A244 +2244 +2268 +3E50 +2240 +0040 +0040 +ENDCHAR +STARTCHAR uni409A +ENCODING 16538 +BBX 15 16 0 -2 +BITMAP +0008 +0088 +FC50 +1020 +1050 +2088 +3D00 +6408 +6488 +A488 +2450 +2450 +3C20 +2450 +2088 +0306 +ENDCHAR +STARTCHAR uni409B +ENCODING 16539 +BBX 15 15 0 -2 +BITMAP +01F8 +FC08 +1050 +1020 +2010 +3DFE +6422 +6424 +A420 +2420 +2420 +3C20 +2420 +20A0 +0040 +ENDCHAR +STARTCHAR uni409C +ENCODING 16540 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC20 +13FE +1020 +2020 +3C20 +65FC +6420 +A420 +2420 +27FE +3C20 +2420 +2020 +0020 +ENDCHAR +STARTCHAR uni409D +ENCODING 16541 +BBX 15 16 0 -2 +BITMAP +0050 +0048 +FC48 +1040 +105E +21E0 +3C40 +6444 +6444 +A448 +2430 +2422 +3C52 +248A +2306 +0002 +ENDCHAR +STARTCHAR uni409E +ENCODING 16542 +BBX 15 15 0 -2 +BITMAP +FFFE +0400 +0800 +1FF0 +2810 +C810 +0FF0 +0100 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni409F +ENCODING 16543 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +7F7C +0944 +1144 +1144 +257C +4200 +0000 +FFFE +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni40A0 +ENCODING 16544 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FC80 +10FC +1120 +2220 +3C20 +6420 +67FE +A420 +2450 +2450 +3C88 +2488 +2104 +0202 +ENDCHAR +STARTCHAR uni40A1 +ENCODING 16545 +BBX 15 15 0 -1 +BITMAP +0008 +001C +FCE0 +1080 +1080 +2080 +3C80 +64FE +6488 +A488 +2488 +2488 +3C88 +2488 +21FE +ENDCHAR +STARTCHAR uni40A2 +ENCODING 16546 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FC7C +1084 +1188 +2250 +3C20 +6450 +6488 +A706 +2460 +2410 +3C08 +24C0 +2020 +0010 +ENDCHAR +STARTCHAR uni40A3 +ENCODING 16547 +BBX 15 15 0 -1 +BITMAP +0090 +0090 +F890 +2290 +2292 +42D4 +7A98 +CA90 +4A90 +4A90 +4A90 +4A92 +7AD2 +4712 +020E +ENDCHAR +STARTCHAR uni40A4 +ENCODING 16548 +BBX 15 16 0 -2 +BITMAP +0088 +0088 +FC88 +1108 +117E +2308 +3D08 +6548 +6528 +A528 +2508 +2508 +3D08 +2508 +2128 +0110 +ENDCHAR +STARTCHAR uni40A5 +ENCODING 16549 +BBX 15 15 0 -2 +BITMAP +01FC +FD04 +1104 +1104 +21FC +3D20 +6520 +65FE +A520 +2520 +2510 +3D12 +254A +2186 +0102 +ENDCHAR +STARTCHAR uni40A6 +ENCODING 16550 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1088 +1104 +2212 +3C20 +6440 +6588 +A410 +2420 +2444 +3D88 +2410 +2060 +0380 +ENDCHAR +STARTCHAR uni40A7 +ENCODING 16551 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +FC80 +11FE +1102 +2204 +3C20 +6420 +6528 +A524 +2624 +2622 +3C22 +2420 +20A0 +0040 +ENDCHAR +STARTCHAR uni40A8 +ENCODING 16552 +BBX 15 16 0 -2 +BITMAP +0008 +001C +FDE0 +1100 +1100 +2100 +3DFE +6510 +6510 +A530 +2518 +2514 +3D12 +2210 +0210 +0410 +ENDCHAR +STARTCHAR uni40A9 +ENCODING 16553 +BBX 14 15 0 -2 +BITMAP +01FC +FD04 +1124 +1124 +2124 +3DFC +6524 +6524 +A554 +254C +258C +3D04 +2504 +21FC +0104 +ENDCHAR +STARTCHAR uni40AA +ENCODING 16554 +BBX 15 16 0 -2 +BITMAP +0090 +0090 +FC90 +1292 +1194 +2098 +3C90 +6598 +6694 +A492 +2490 +2490 +3D12 +2512 +2212 +040E +ENDCHAR +STARTCHAR uni40AB +ENCODING 16555 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +F8FC +2108 +2290 +4060 +7998 +4E26 +C820 +49FC +4820 +4A20 +7BFE +4820 +0020 +0020 +ENDCHAR +STARTCHAR uni40AC +ENCODING 16556 +BBX 15 15 0 -2 +BITMAP +7DF0 +1110 +1190 +1152 +1D12 +E20E +4400 +0000 +FFFE +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni40AD +ENCODING 16557 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FC20 +13FE +1000 +2088 +3D04 +6602 +6488 +A488 +2450 +2450 +3C20 +2450 +2088 +0306 +ENDCHAR +STARTCHAR uni40AE +ENCODING 16558 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +7F7C +0824 +3E24 +0844 +7F54 +0888 +0800 +FFFE +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni40AF +ENCODING 16559 +BBX 15 16 0 -2 +BITMAP +0020 +0010 +FC10 +11FE +1100 +2110 +3D10 +6510 +657C +A510 +2510 +2510 +3D10 +2210 +02FE +0400 +ENDCHAR +STARTCHAR uni40B0 +ENCODING 16560 +BBX 15 16 0 -2 +BITMAP +0042 +00E2 +FB82 +208A +208A +408A +7BEA +488A +C98A +49CA +4AAA +4A82 +7C82 +4882 +008A +0084 +ENDCHAR +STARTCHAR uni40B1 +ENCODING 16561 +BBX 15 16 0 -2 +BITMAP +0104 +0084 +FC88 +1010 +11FC +2104 +3D04 +6504 +65FC +A450 +2450 +2490 +3C92 +2512 +220E +0400 +ENDCHAR +STARTCHAR uni40B2 +ENCODING 16562 +BBX 15 16 0 -2 +BITMAP +0820 +7E20 +08FC +FF24 +1024 +2444 +7E54 +2288 +0100 +FFFE +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni40B3 +ENCODING 16563 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FCA8 +10A8 +10A8 +2174 +3E22 +6420 +6420 +A5FC +2420 +2420 +3C20 +2420 +23FE +ENDCHAR +STARTCHAR uni40B4 +ENCODING 16564 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FDFE +1000 +1000 +20FC +3C00 +6400 +64FC +A400 +2400 +24FC +3C84 +2484 +20FC +0084 +ENDCHAR +STARTCHAR uni40B5 +ENCODING 16565 +BBX 15 15 0 -2 +BITMAP +01FC +FC20 +1020 +13FE +2000 +3C00 +65FC +6504 +A524 +2524 +2524 +3D54 +2488 +2104 +0602 +ENDCHAR +STARTCHAR uni40B6 +ENCODING 16566 +BBX 15 16 0 -2 +BITMAP +0088 +0088 +F888 +21C8 +209E +408A +788A +4BEA +C88A +488A +490A +494A +7BEA +4912 +002A +0044 +ENDCHAR +STARTCHAR uni40B7 +ENCODING 16567 +BBX 15 16 0 -2 +BITMAP +001C +01E0 +FC20 +1020 +13FE +2020 +3CA8 +64AA +67AC +A4A8 +24AA +25AA +3EA6 +2420 +2020 +0020 +ENDCHAR +STARTCHAR uni40B8 +ENCODING 16568 +BBX 15 16 0 -2 +BITMAP +0014 +0012 +F810 +27FE +2010 +4010 +7BD2 +CA52 +4A52 +4A54 +4BD4 +4808 +78EA +471A +0226 +0042 +ENDCHAR +STARTCHAR uni40B9 +ENCODING 16569 +BBX 15 16 0 -2 +BITMAP +0020 +0040 +FCFE +1124 +1298 +2050 +3C60 +6780 +6420 +A424 +24A4 +24A8 +3D30 +2450 +2088 +0306 +ENDCHAR +STARTCHAR uni40BA +ENCODING 16570 +BBX 15 15 0 -2 +BITMAP +01FC +FD24 +1124 +11FC +2124 +3D24 +65FC +6420 +A7FE +2470 +24A8 +3D24 +2222 +0020 +0020 +ENDCHAR +STARTCHAR uni40BB +ENCODING 16571 +BBX 15 15 0 -2 +BITMAP +00FC +FC80 +10F8 +1080 +20F8 +3C80 +67FE +6540 +A524 +2528 +2510 +3D08 +2544 +2182 +0100 +ENDCHAR +STARTCHAR uni40BC +ENCODING 16572 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +F850 +2088 +2144 +4222 +79F8 +4808 +C850 +4820 +48A4 +4A82 +7A8A +4A8A +0478 +ENDCHAR +STARTCHAR uni40BD +ENCODING 16573 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC3E +1020 +11FC +2104 +3DFC +6504 +65FC +A524 +2420 +27FE +3C20 +2420 +2020 +0020 +ENDCHAR +STARTCHAR uni40BE +ENCODING 16574 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +F820 +23FE +2020 +4124 +7924 +4924 +CAAA +4870 +48A8 +48A8 +7924 +4A22 +0420 +0020 +ENDCHAR +STARTCHAR uni40BF +ENCODING 16575 +BBX 15 16 0 -2 +BITMAP +0020 +0022 +FBB4 +20A8 +20A8 +4124 +7AA2 +4840 +C9FC +4904 +4904 +49FC +7904 +4904 +01FC +0104 +ENDCHAR +STARTCHAR uni40C0 +ENCODING 16576 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FBFE +2020 +21FC +4024 +7BFE +4824 +C9FC +4840 +4BFE +4884 +79C8 +4830 +00CC +0302 +ENDCHAR +STARTCHAR uni40C1 +ENCODING 16577 +BBX 15 14 0 -1 +BITMAP +01FE +FC48 +1048 +1048 +21CE +3D02 +6502 +6502 +A5CE +2448 +2448 +3C48 +2448 +21FE +ENDCHAR +STARTCHAR uni40C2 +ENCODING 16578 +BBX 15 15 0 -2 +BITMAP +01FC +FD04 +1104 +11FC +2104 +3D04 +65FC +6400 +A512 +25D4 +2518 +3D10 +2552 +2192 +010E +ENDCHAR +STARTCHAR uni40C3 +ENCODING 16579 +BBX 15 15 0 -2 +BITMAP +03FE +FA02 +228A +2252 +43FE +7A42 +4A22 +CBFE +4A82 +4A82 +4A82 +7AFA +4A02 +020A +0204 +ENDCHAR +STARTCHAR uni40C4 +ENCODING 16580 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2000 +2000 +41FC +7904 +4904 +C904 +49FC +4820 +48A8 +7924 +4A22 +00A0 +0040 +ENDCHAR +STARTCHAR uni40C5 +ENCODING 16581 +BBX 15 16 0 -2 +BITMAP +0104 +0088 +FC50 +11FC +1124 +2124 +3DFC +6524 +6524 +A5FC +2420 +2420 +3DFE +2420 +2020 +0020 +ENDCHAR +STARTCHAR uni40C6 +ENCODING 16582 +BBX 15 16 0 -2 +BITMAP +0084 +0084 +FDFE +1084 +1084 +20FC +3C84 +6484 +64FC +A484 +2484 +25FE +3C00 +2448 +2084 +0102 +ENDCHAR +STARTCHAR uni40C7 +ENCODING 16583 +BBX 15 16 0 -2 +BITMAP +0020 +0040 +FCFC +1084 +10FC +2084 +3CFC +6420 +6420 +A5FE +2522 +2522 +3D2A +2524 +2020 +0020 +ENDCHAR +STARTCHAR uni40C8 +ENCODING 16584 +BBX 15 16 0 -2 +BITMAP +0110 +0112 +FDD4 +1118 +1152 +2192 +3D2E +6440 +65FC +A504 +2504 +25FC +3D04 +2504 +21FC +0104 +ENDCHAR +STARTCHAR uni40C9 +ENCODING 16585 +BBX 15 15 0 -2 +BITMAP +01FC +FD04 +11FC +1110 +21FE +3D10 +654A +6586 +A400 +25FC +2504 +3DFC +2504 +21FC +0104 +ENDCHAR +STARTCHAR uni40CA +ENCODING 16586 +BBX 15 15 0 -1 +BITMAP +0090 +0090 +FBFC +2090 +2000 +41F8 +7908 +4908 +C9F8 +4908 +4908 +49F8 +7908 +4908 +07FE +ENDCHAR +STARTCHAR uni40CB +ENCODING 16587 +BBX 15 16 0 -2 +BITMAP +0040 +00A0 +F910 +2208 +25F6 +4000 +7BC4 +4A54 +CA54 +4BD4 +4A54 +4A54 +7BD4 +4A44 +0254 +02C8 +ENDCHAR +STARTCHAR uni40CC +ENCODING 16588 +BBX 15 14 0 -1 +BITMAP +03FE +FC50 +1050 +11FC +2154 +3D54 +6554 +65FC +A420 +2420 +25FC +3C20 +2420 +23FE +ENDCHAR +STARTCHAR uni40CD +ENCODING 16589 +BBX 15 16 0 -2 +BITMAP +0104 +0088 +F800 +23FE +2040 +40C2 +7922 +CA54 +4898 +4938 +4A54 +4894 +7912 +4610 +0050 +0020 +ENDCHAR +STARTCHAR uni40CE +ENCODING 16590 +BBX 15 15 0 -2 +BITMAP +0040 +FBFE +2088 +2104 +4642 +78FC +4B08 +C8B0 +48D0 +4F3E +48C2 +7B24 +4818 +0060 +0780 +ENDCHAR +STARTCHAR uni40CF +ENCODING 16591 +BBX 15 14 0 -1 +BITMAP +01FC +FD04 +11FC +1104 +21FC +3C20 +6520 +65FE +A620 +2420 +25FC +3C20 +2420 +23FE +ENDCHAR +STARTCHAR uni40D0 +ENCODING 16592 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2088 +4104 +7A22 +4828 +C824 +4BFE +4820 +4850 +7850 +4888 +0104 +0202 +ENDCHAR +STARTCHAR uni40D1 +ENCODING 16593 +BBX 15 16 0 -2 +BITMAP +0100 +023C +F7A4 +24A4 +26A4 +45A4 +74C2 +DF80 +54BC +54A4 +56A4 +55A4 +7494 +5488 +0494 +09A2 +ENDCHAR +STARTCHAR uni40D2 +ENCODING 16594 +BBX 15 15 0 -2 +BITMAP +03FE +F800 +21FC +2104 +4104 +79FC +4800 +CBFE +4A8A +4A52 +4BFE +7A22 +4A22 +022A +0204 +ENDCHAR +STARTCHAR uni40D3 +ENCODING 16595 +BBX 15 16 0 -2 +BITMAP +0088 +0088 +FBFE +2088 +21FC +4088 +7BFE +4820 +C9FC +4924 +49FC +4924 +7BFE +4904 +0114 +0108 +ENDCHAR +STARTCHAR uni40D4 +ENCODING 16596 +BBX 15 16 0 -2 +BITMAP +0020 +0010 +FDFE +1102 +1000 +20FC +3C84 +6484 +64FC +A400 +25FE +2502 +3D02 +2502 +21FE +0102 +ENDCHAR +STARTCHAR uni40D5 +ENCODING 16597 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +2CA8 +4920 +1450 +2288 +7FFE +4002 +8004 +FFFE +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni40D6 +ENCODING 16598 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +F9FC +2104 +2104 +41FC +7900 +C9FE +4900 +49FE +4802 +4AAA +7AAA +4402 +0014 +0008 +ENDCHAR +STARTCHAR uni40D7 +ENCODING 16599 +BBX 15 16 0 -2 +BITMAP +0002 +03E2 +F822 +21EA +202A +47FA +788A +4AAA +C9CA +488A +49CA +4AA2 +7C92 +4882 +028A +0104 +ENDCHAR +STARTCHAR uni40D8 +ENCODING 16600 +BBX 15 14 0 -1 +BITMAP +03DC +FA94 +23D4 +2254 +43C8 +7A88 +4A94 +CBE2 +4800 +4820 +49FC +7820 +4820 +03FE +ENDCHAR +STARTCHAR uni40D9 +ENCODING 16601 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2250 +2250 +43FE +7A52 +CA52 +4BFE +4A00 +4A92 +4AD4 +7A98 +4492 +04D2 +088E +ENDCHAR +STARTCHAR uni40DA +ENCODING 16602 +BBX 15 16 0 -2 +BITMAP +0420 +0220 +F23E +2F40 +24A0 +4420 +773C +D550 +5510 +5510 +55FE +5510 +7528 +5928 +0B44 +1082 +ENDCHAR +STARTCHAR uni40DB +ENCODING 16603 +BBX 15 15 0 -1 +BITMAP +0010 +0010 +FAFE +2110 +217C +4054 +787C +4B54 +C97C +4910 +49FE +4910 +7910 +4A90 +047E +ENDCHAR +STARTCHAR uni40DC +ENCODING 16604 +BBX 13 15 1 -2 +BITMAP +FEF0 +9090 +BE98 +C900 +BEF0 +8890 +9490 +A260 +FE98 +0000 +FFF8 +1000 +3FF0 +D010 +1FF0 +ENDCHAR +STARTCHAR uni40DD +ENCODING 16605 +BBX 15 16 0 -2 +BITMAP +0208 +0248 +F748 +2290 +229E +4FE4 +7114 +D214 +5FD4 +5494 +5914 +51C8 +7F08 +5114 +0514 +0222 +ENDCHAR +STARTCHAR uni40DE +ENCODING 16606 +BBX 14 16 1 -2 +BITMAP +1080 +FE80 +45F0 +7C90 +0090 +7D90 +0890 +FD54 +1154 +520C +2404 +FFF8 +1000 +3FF0 +D010 +1FF0 +ENDCHAR +STARTCHAR uni40DF +ENCODING 16607 +BBX 15 16 0 -2 +BITMAP +0288 +0288 +F7C8 +2290 +229E +4FD4 +7024 +D7D4 +5454 +57D4 +5454 +57C8 +7448 +5454 +0464 +04C2 +ENDCHAR +STARTCHAR uni40E0 +ENCODING 16608 +BBX 15 16 0 -2 +BITMAP +0210 +0110 +F110 +27BE +2240 +4200 +73BE +D28A +5288 +52A8 +52AE +52A8 +74A8 +55A8 +085E +1080 +ENDCHAR +STARTCHAR uni40E1 +ENCODING 16609 +BBX 15 15 0 -2 +BITMAP +03DE +F888 +22A8 +23FE +4188 +7ADA +4CA6 +C9F8 +4908 +4908 +49F8 +7908 +4908 +01F8 +0108 +ENDCHAR +STARTCHAR uni40E2 +ENCODING 16610 +BBX 15 16 0 -2 +BITMAP +0210 +0210 +F510 +24BE +2822 +4744 +7210 +D210 +5F10 +5210 +5AA8 +5728 +7228 +5344 +0C44 +0082 +ENDCHAR +STARTCHAR uni40E3 +ENCODING 16611 +BBX 15 16 0 -2 +BITMAP +000E +03F0 +F844 +2224 +2108 +43F8 +7A08 +CBFC +4A04 +4BFE +4A02 +4AAA +7AAA +4502 +0414 +0808 +ENDCHAR +STARTCHAR uni40E4 +ENCODING 16612 +BBX 15 16 0 -2 +BITMAP +0040 +03F8 +F048 +27FE +2048 +43F8 +7040 +D554 +575C +5444 +57FC +5444 +775C +5554 +0554 +0844 +ENDCHAR +STARTCHAR uni40E5 +ENCODING 16613 +BBX 15 15 0 -1 +BITMAP +0020 +01FC +FC88 +1050 +13FE +2000 +3DFC +6524 +65FC +A524 +25FC +2420 +3DFC +2420 +23FE +ENDCHAR +STARTCHAR uni40E6 +ENCODING 16614 +BBX 14 16 1 -2 +BITMAP +1080 +FE80 +44FC +7D10 +0290 +7C90 +08A0 +FC40 +10A0 +5118 +2000 +FFF8 +1000 +3FF0 +D010 +1FF0 +ENDCHAR +STARTCHAR uni40E7 +ENCODING 16615 +BBX 15 16 0 -2 +BITMAP +0080 +79F8 +4A88 +4870 +538E +4920 +49FC +6A20 +50F8 +4020 +FFFE +0400 +0FF8 +3808 +CFF8 +0808 +ENDCHAR +STARTCHAR uni40E8 +ENCODING 16616 +BBX 15 15 0 -2 +BITMAP +03BE +F8A2 +20A2 +20BE +4388 +7A08 +CA3E +4A2A +4BAA +48AA +48BE +7888 +408A +057E +0202 +ENDCHAR +STARTCHAR uni40E9 +ENCODING 16617 +BBX 15 16 0 -2 +BITMAP +0050 +01FC +FD54 +11FC +1154 +21FC +3C00 +65FE +6500 +A57C +2500 +25FE +3D50 +2554 +2148 +0266 +ENDCHAR +STARTCHAR uni40EA +ENCODING 16618 +BBX 15 16 0 -2 +BITMAP +0020 +03FE +F800 +23FC +2204 +42F4 +7A94 +4BFC +C800 +49F8 +4908 +49F8 +7908 +49F8 +0000 +03FE +ENDCHAR +STARTCHAR uni40EB +ENCODING 16619 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +FA08 +27FE +2288 +4324 +7BFE +CA00 +4AFC +4A00 +4AFC +4A00 +7AFC +4484 +04FC +0884 +ENDCHAR +STARTCHAR uni40EC +ENCODING 16620 +BBX 15 16 0 -2 +BITMAP +0040 +0248 +FA48 +23F8 +2080 +43F8 +7A48 +4BF8 +CA48 +4BF8 +4848 +48B4 +78BC +4922 +0222 +041E +ENDCHAR +STARTCHAR uni40ED +ENCODING 16621 +BBX 15 15 0 -1 +BITMAP +0014 +0012 +F7FE +2410 +25D0 +4414 +75D4 +D558 +55CA +5416 +5442 +5824 +72A2 +528A +0478 +ENDCHAR +STARTCHAR uni40EE +ENCODING 16622 +BBX 15 16 0 -2 +BITMAP +0010 +0410 +F27C +2010 +20FE +4044 +7628 +D2FE +5210 +527C +5210 +52FE +7210 +5210 +05FE +0800 +ENDCHAR +STARTCHAR uni40EF +ENCODING 16623 +BBX 15 16 0 -2 +BITMAP +0020 +0040 +F8F8 +228A +218C +40F8 +798C +4A8A +C8F8 +4820 +4BFE +4870 +78A8 +4924 +0622 +0020 +ENDCHAR +STARTCHAR uni40F0 +ENCODING 16624 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +F7FE +2402 +2A24 +43BC +74A4 +DAA8 +5510 +52E8 +5404 +5BFA +7040 +5248 +0444 +00C0 +ENDCHAR +STARTCHAR uni40F1 +ENCODING 16625 +BBX 15 16 0 -2 +BITMAP +0114 +0112 +F7D2 +2110 +2110 +4FFE +7290 +D6D2 +5292 +56D2 +5294 +56D4 +728A +52CA +0F16 +0022 +ENDCHAR +STARTCHAR uni40F2 +ENCODING 16626 +BBX 15 15 0 -1 +BITMAP +0100 +03DC +FA54 +2366 +2240 +47DC +7A54 +4B48 +CA54 +4CA2 +4800 +4BFC +7A94 +4A94 +07FE +ENDCHAR +STARTCHAR uni40F3 +ENCODING 16627 +BBX 15 16 0 -2 +BITMAP +0124 +0248 +F924 +2000 +23FC +4294 +7A64 +4A94 +CBFC +4A48 +4B68 +4A48 +7B6A +4A4A +0246 +0362 +ENDCHAR +STARTCHAR uni40F4 +ENCODING 16628 +BBX 15 16 0 -2 +BITMAP +0410 +0210 +F07A +2712 +2014 +477E +7008 +D710 +503C +5764 +55A4 +553C +7524 +5724 +053C +0024 +ENDCHAR +STARTCHAR uni40F5 +ENCODING 16629 +BBX 15 16 0 -2 +BITMAP +0040 +07FE +F000 +23FC +2240 +43F8 +7240 +D3F8 +5240 +53FC +5004 +5554 +70A8 +5310 +0D48 +0186 +ENDCHAR +STARTCHAR uni40F6 +ENCODING 16630 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FDFE +1000 +11FC +2154 +3DFC +6420 +6522 +A48C +2522 +2454 +3CC8 +2544 +2252 +0060 +ENDCHAR +STARTCHAR uni40F7 +ENCODING 16631 +BBX 15 16 0 -2 +BITMAP +0040 +0FFE +F400 +27FC +2000 +47FC +7404 +D7FC +5080 +5C9C +57D4 +5D54 +755C +5C96 +1556 +2E22 +ENDCHAR +STARTCHAR uni40F8 +ENCODING 16632 +BBX 15 16 0 -2 +BITMAP +0148 +014C +FAAA +2008 +27FE +4148 +7B68 +494A +CB6A +494C +4B6C +4948 +796A +4B9A +0026 +0042 +ENDCHAR +STARTCHAR uni40F9 +ENCODING 16633 +BBX 15 16 0 -2 +BITMAP +03DE +0252 +FBDE +2252 +23DE +4222 +7AFA +4A22 +CAFA +4AAA +4AFA +4AAA +7AFA +4A72 +02AA +0226 +ENDCHAR +STARTCHAR uni40FA +ENCODING 16634 +BBX 15 16 0 -2 +BITMAP +0020 +07FE +F488 +27DE +2488 +45DC +76AA +D488 +5450 +57DE +5450 +55DC +7450 +5BDE +0850 +1050 +ENDCHAR +STARTCHAR uni40FB +ENCODING 16635 +BBX 15 16 0 -2 +BITMAP +03FE +0020 +F7FE +2422 +21AC +4280 +77DE +D292 +5392 +511E +57D2 +5552 +77DE +5112 +0FD2 +0126 +ENDCHAR +STARTCHAR uni40FC +ENCODING 16636 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +0820 +7E20 +0420 +0828 +0824 +1C22 +2A22 +4A20 +8820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uni40FD +ENCODING 16637 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +FBFE +0820 +1020 +1020 +39FC +5484 +9488 +1048 +1050 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni40FE +ENCODING 16638 +BBX 15 16 0 -2 +BITMAP +2010 +1110 +1110 +F912 +0912 +1114 +11D8 +3910 +5510 +9510 +1110 +1112 +1152 +1192 +110E +1000 +ENDCHAR +STARTCHAR uni40FF +ENCODING 16639 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +F820 +09FC +1020 +1020 +3820 +55FE +9420 +1050 +1050 +1088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni4100 +ENCODING 16640 +BBX 14 16 0 -2 +BITMAP +2090 +1088 +1088 +F880 +08BC +13C0 +1080 +3888 +5488 +9490 +1060 +1044 +10A4 +1114 +120C +1004 +ENDCHAR +STARTCHAR uni4101 +ENCODING 16641 +BBX 15 16 0 -2 +BITMAP +2048 +1148 +1148 +F948 +0948 +13FE +1148 +3948 +5548 +9548 +1178 +1100 +1100 +1100 +11FE +1000 +ENDCHAR +STARTCHAR uni4102 +ENCODING 16642 +BBX 14 16 0 -2 +BITMAP +2020 +1020 +1020 +F820 +09FC +1124 +1124 +3924 +5524 +95FC +1124 +1124 +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni4103 +ENCODING 16643 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +F9FC +0924 +1124 +1924 +3524 +5124 +93FE +1020 +1050 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni4104 +ENCODING 16644 +BBX 14 16 0 -2 +BITMAP +2000 +11FC +1104 +F924 +0924 +1124 +11FC +3924 +5524 +9554 +114C +118C +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni4105 +ENCODING 16645 +BBX 15 15 1 -1 +BITMAP +1110 +0910 +0920 +3FF8 +0280 +0280 +FFFE +0820 +17D0 +2008 +DFF6 +0100 +1930 +610C +0700 +ENDCHAR +STARTCHAR uni4106 +ENCODING 16646 +BBX 15 16 0 -2 +BITMAP +2008 +103C +11E0 +F820 +0820 +13FE +1020 +3820 +5420 +95FC +1104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni4107 +ENCODING 16647 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1104 +F904 +0904 +11FC +1000 +3800 +57FE +9420 +1020 +11FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni4108 +ENCODING 16648 +BBX 15 16 0 -2 +BITMAP +2000 +13FC +1000 +F800 +09F8 +1108 +1108 +3908 +55F8 +9400 +1108 +1088 +1090 +1000 +17FE +1000 +ENDCHAR +STARTCHAR uni4109 +ENCODING 16649 +BBX 15 16 0 -2 +BITMAP +2010 +10D8 +1394 +F894 +0890 +13FE +1090 +3894 +5494 +90D8 +1398 +1090 +10AA +10CA +1286 +1102 +ENDCHAR +STARTCHAR uni410A +ENCODING 16650 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +FBFE +0820 +1020 +1020 +39FC +5440 +9420 +10A4 +1282 +128A +128A +1478 +1000 +ENDCHAR +STARTCHAR uni410B +ENCODING 16651 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +13FE +F850 +0888 +1124 +1222 +39FC +5524 +95FC +1124 +11FC +1022 +1022 +101E +1000 +ENDCHAR +STARTCHAR uni410C +ENCODING 16652 +BBX 15 16 0 -2 +BITMAP +4000 +23DE +2042 +F94A +1084 +114A +2252 +3420 +6800 +ABDE +2052 +2152 +2094 +2148 +2254 +2422 +ENDCHAR +STARTCHAR uni410D +ENCODING 16653 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +1088 +FBFE +0888 +1088 +17FE +3800 +55FC +9504 +1104 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni410E +ENCODING 16654 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +11FC +F850 +0888 +1104 +13FE +3808 +55E8 +9528 +1128 +11E8 +1128 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni410F +ENCODING 16655 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +13FE +F888 +0800 +101C +19E0 +3420 +5020 +93FE +1020 +1050 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni4110 +ENCODING 16656 +BBX 15 16 0 -2 +BITMAP +1000 +5400 +54FC +7C84 +9284 +9284 +FE84 +00FC +7C80 +0080 +FE80 +1082 +5482 +9282 +507E +2000 +ENDCHAR +STARTCHAR uni4111 +ENCODING 16657 +BBX 15 16 0 -2 +BITMAP +201C +13E0 +1220 +FBFE +0A20 +1292 +130A +3A06 +55FC +9504 +1104 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni4112 +ENCODING 16658 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1050 +F888 +0944 +1222 +11F8 +3808 +5450 +9420 +10A4 +1282 +128A +128A +1478 +1000 +ENDCHAR +STARTCHAR uni4113 +ENCODING 16659 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +11FC +F904 +09FC +1104 +11FC +3800 +57FE +9420 +1020 +11FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni4114 +ENCODING 16660 +BBX 15 16 0 -2 +BITMAP +2004 +101E +13E0 +F820 +09FC +1124 +1924 +35FC +5020 +93FE +1222 +122A +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni4115 +ENCODING 16661 +BBX 15 16 0 -2 +BITMAP +2020 +1022 +13B4 +F8A8 +08A8 +1124 +12A2 +3840 +55FC +9524 +1124 +11FC +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni4116 +ENCODING 16662 +BBX 15 16 0 -2 +BITMAP +4040 +20A0 +2110 +FA08 +15F6 +1000 +23C4 +3254 +6A54 +ABD4 +2254 +2254 +23D4 +2244 +2254 +22C8 +ENDCHAR +STARTCHAR uni4117 +ENCODING 16663 +BBX 15 16 0 -2 +BITMAP +4050 +2252 +2252 +FA52 +13DE +1202 +2202 +33FE +6A02 +AA02 +23DE +2252 +2252 +2252 +2452 +2802 +ENDCHAR +STARTCHAR uni4118 +ENCODING 16664 +BBX 15 16 0 -2 +BITMAP +2020 +1010 +11FE +F884 +0848 +11FE +1102 +3A24 +5410 +95FE +1040 +107C +1044 +1084 +1094 +1108 +ENDCHAR +STARTCHAR uni4119 +ENCODING 16665 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +1202 +F800 +09FC +1104 +11FC +3904 +55FC +9440 +1020 +13FE +1000 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni411A +ENCODING 16666 +BBX 15 16 0 -2 +BITMAP +4090 +2090 +27FE +F890 +13FC +1294 +23FC +3294 +6BFC +A800 +21F8 +2108 +21F8 +2108 +21F8 +2108 +ENDCHAR +STARTCHAR uni411B +ENCODING 16667 +BBX 15 16 0 -2 +BITMAP +2020 +11FC +1124 +FBFE +0924 +11FC +1020 +39FC +5524 +95FC +1040 +13FE +1088 +11D0 +1070 +138C +ENDCHAR +STARTCHAR uni411C +ENCODING 16668 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +13FE +F800 +0954 +1124 +1954 +35FC +5020 +93FE +1242 +1292 +12FA +120A +1202 +1206 +ENDCHAR +STARTCHAR uni411D +ENCODING 16669 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +13FE +F820 +09FC +1040 +1BFE +3488 +5104 +9242 +159C +1104 +11DC +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni411E +ENCODING 16670 +BBX 15 16 0 -2 +BITMAP +4100 +2110 +23DC +FA54 +1554 +1288 +2108 +32F4 +6C02 +A800 +23FC +2040 +2150 +2248 +2544 +2080 +ENDCHAR +STARTCHAR uni411F +ENCODING 16671 +BBX 15 16 0 -2 +BITMAP +01F0 +3E00 +03F0 +3E00 +03FA +7E02 +01FE +0C20 +703C +1DE2 +F022 +1C1E +0000 +FFFE +1110 +2308 +ENDCHAR +STARTCHAR uni4120 +ENCODING 16672 +BBX 15 16 0 -2 +BITMAP +2020 +13FE +1000 +FBFC +0A04 +12F4 +1294 +3BFC +5400 +95F8 +1108 +11F8 +1108 +11F8 +1000 +13FE +ENDCHAR +STARTCHAR uni4121 +ENCODING 16673 +BBX 15 16 0 -2 +BITMAP +2080 +10F8 +1108 +FBFE +0944 +1192 +11FE +3900 +557C +9500 +117C +1100 +117C +1244 +127C +1444 +ENDCHAR +STARTCHAR uni4122 +ENCODING 16674 +BBX 15 16 0 -2 +BITMAP +4080 +2040 +27FC +F910 +10A4 +1F58 +2554 +3552 +6B58 +A800 +2208 +23F8 +2208 +23F8 +2208 +2408 +ENDCHAR +STARTCHAR uni4123 +ENCODING 16675 +BBX 15 16 0 -2 +BITMAP +2020 +13FE +1020 +F9FC +0800 +13FE +1252 +3BFE +5504 +95FC +1104 +11FC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni4124 +ENCODING 16676 +BBX 15 16 0 -2 +BITMAP +4108 +2108 +27CE +F912 +1124 +17DE +2552 +355E +6FD2 +A91E +2392 +255E +2940 +2114 +2112 +2122 +ENDCHAR +STARTCHAR uni4125 +ENCODING 16677 +BBX 15 16 0 -2 +BITMAP +47FC +2040 +2FFE +F842 +1358 +1040 +2358 +3000 +6EEE +AAAA +2EEE +2000 +2FFE +2248 +2554 +2FFE +ENDCHAR +STARTCHAR uni4126 +ENCODING 16678 +BBX 14 16 0 -2 +BITMAP +0400 +0EFC +7804 +0808 +0810 +FF20 +0820 +1820 +1C20 +2A20 +2A20 +4820 +8820 +0820 +08A0 +0840 +ENDCHAR +STARTCHAR uni4127 +ENCODING 16679 +BBX 15 16 0 -2 +BITMAP +0400 +0E00 +79FC +0844 +0848 +FF48 +0850 +185E +1C42 +2A42 +2A82 +4882 +8882 +0902 +0914 +0A08 +ENDCHAR +STARTCHAR uni4128 +ENCODING 16680 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +F020 +1020 +1020 +FC20 +1020 +33FE +3820 +5420 +5420 +9020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni4129 +ENCODING 16681 +BBX 15 16 0 -2 +BITMAP +0420 +0E28 +7824 +0824 +0820 +FF2E +08F0 +1820 +1C20 +2A20 +2A20 +4810 +8812 +080A +0806 +0802 +ENDCHAR +STARTCHAR uni412A +ENCODING 16682 +BBX 14 16 0 -2 +BITMAP +0840 +1C40 +F080 +10FC +1104 +FE04 +1004 +3104 +3884 +5444 +5444 +9004 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni412B +ENCODING 16683 +BBX 15 16 0 -2 +BITMAP +0400 +0E00 +78FC +0804 +0804 +FF04 +0804 +18FC +1C84 +2A80 +2A80 +4880 +8882 +0882 +087E +0800 +ENDCHAR +STARTCHAR uni412C +ENCODING 16684 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F020 +1120 +112C +FD34 +1164 +33A4 +3924 +5534 +5528 +9122 +1122 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni412D +ENCODING 16685 +BBX 15 16 0 -2 +BITMAP +0808 +1C3C +F1E0 +1020 +1020 +FC20 +1020 +33FE +3820 +5420 +5420 +9020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni412E +ENCODING 16686 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F020 +1020 +11FC +FC20 +1020 +3820 +35FE +5420 +5050 +9050 +1088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni412F +ENCODING 16687 +BBX 15 16 0 -2 +BITMAP +0400 +0EFC +7848 +0848 +0848 +FF48 +0848 +19FE +1C48 +2A48 +2A48 +4848 +8848 +0848 +0888 +0908 +ENDCHAR +STARTCHAR uni4130 +ENCODING 16688 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F008 +1088 +1088 +FC88 +1108 +31FE +3818 +5428 +5448 +9088 +1108 +1208 +1028 +1010 +ENDCHAR +STARTCHAR uni4131 +ENCODING 16689 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F020 +13FE +1080 +FC80 +1080 +30FC +3884 +5484 +5484 +9084 +1104 +1104 +1228 +1410 +ENDCHAR +STARTCHAR uni4132 +ENCODING 16690 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F020 +11FE +1122 +FD22 +1122 +3122 +3952 +554A +558A +9102 +1102 +1102 +110A +1104 +ENDCHAR +STARTCHAR uni4133 +ENCODING 16691 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F020 +1120 +1120 +FD20 +113C +3120 +3920 +5520 +5520 +9120 +1120 +1120 +17FE +1000 +ENDCHAR +STARTCHAR uni4134 +ENCODING 16692 +BBX 14 16 0 -2 +BITMAP +0800 +1CFC +F084 +1084 +1084 +FCFC +1084 +3084 +3884 +54FC +5484 +9084 +1104 +1104 +1214 +1408 +ENDCHAR +STARTCHAR uni4135 +ENCODING 16693 +BBX 15 16 0 -2 +BITMAP +0070 +1F80 +0100 +0100 +7FFC +0540 +0920 +3118 +C006 +0100 +1FF0 +1100 +1100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni4136 +ENCODING 16694 +BBX 15 16 0 -2 +BITMAP +0890 +1C90 +F090 +13FC +1094 +FC94 +13FC +3A90 +3690 +53FE +5092 +9092 +111A +1114 +1210 +1410 +ENDCHAR +STARTCHAR uni4137 +ENCODING 16695 +BBX 15 16 0 -2 +BITMAP +0800 +1C00 +F3FE +1020 +1020 +FC40 +1040 +38FC +3584 +5284 +5484 +9084 +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni4138 +ENCODING 16696 +BBX 14 16 0 -2 +BITMAP +0820 +1C20 +F040 +11FC +1104 +FD04 +1104 +3104 +39FC +5504 +5504 +9104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni4139 +ENCODING 16697 +BBX 15 16 0 -2 +BITMAP +00F8 +3F00 +0100 +7FFC +0920 +1110 +2288 +CC64 +3018 +C1E6 +1F00 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni413A +ENCODING 16698 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F3FE +1020 +11FC +FC24 +11FC +3120 +39FE +5422 +542A +9054 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni413B +ENCODING 16699 +BBX 15 16 0 -2 +BITMAP +0890 +1C90 +F090 +1292 +1194 +FC98 +1090 +3198 +3A94 +5492 +5490 +9090 +1112 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni413C +ENCODING 16700 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F020 +1020 +1020 +FDFC +1124 +3124 +3954 +554C +558C +9104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni413D +ENCODING 16701 +BBX 14 16 0 -2 +BITMAP +0800 +1DFC +F050 +1050 +1050 +FDFC +1154 +3154 +3954 +5554 +555C +9184 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni413E +ENCODING 16702 +BBX 15 16 0 -2 +BITMAP +0828 +1C24 +F024 +1020 +13FE +FC20 +1124 +3124 +3924 +57A8 +5528 +9110 +1212 +122A +1446 +1082 +ENDCHAR +STARTCHAR uni413F +ENCODING 16703 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F1FC +1124 +1124 +FDFC +1124 +3124 +39FC +5420 +5424 +9018 +1032 +10CA +1306 +1002 +ENDCHAR +STARTCHAR uni4140 +ENCODING 16704 +BBX 15 16 0 -2 +BITMAP +0802 +1C02 +F3E2 +110A +110A +FDEA +112A +3A2A +372A +52AA +544A +904A +1082 +1102 +120A +1404 +ENDCHAR +STARTCHAR uni4141 +ENCODING 16705 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +4004 +0400 +FFFE +0820 +1E40 +03C0 +3C38 +01E0 +1F00 +0100 +7FFC +0540 +1930 +610C +ENDCHAR +STARTCHAR uni4142 +ENCODING 16706 +BBX 15 16 0 -2 +BITMAP +0880 +1C80 +F0F8 +1108 +1310 +FCA0 +1040 +38A0 +3518 +5206 +55F8 +9108 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni4143 +ENCODING 16707 +BBX 15 15 0 -2 +BITMAP +7DF0 +1110 +1190 +1152 +1D12 +E20E +4400 +00E0 +1F00 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni4144 +ENCODING 16708 +BBX 15 16 0 -2 +BITMAP +0840 +1C40 +F1FC +1044 +1084 +FC84 +1128 +3210 +3908 +57DE +554A +914A +114A +1252 +135A +14A4 +ENDCHAR +STARTCHAR uni4145 +ENCODING 16709 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F1FC +1020 +1020 +FC20 +13FE +3000 +3820 +5420 +55FC +9020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni4146 +ENCODING 16710 +BBX 15 16 0 -2 +BITMAP +0810 +1C10 +F210 +113E +1122 +FC44 +1010 +3890 +3490 +5310 +5128 +9128 +1128 +1144 +1044 +1082 +ENDCHAR +STARTCHAR uni4147 +ENCODING 16711 +BBX 15 15 0 -2 +BITMAP +7FFC +0440 +3FF8 +2448 +2448 +3FF8 +0000 +00E0 +1F00 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni4148 +ENCODING 16712 +BBX 15 15 1 -1 +BITMAP +1110 +0910 +0920 +3FF8 +0280 +0280 +FFFE +0440 +18B0 +E70E +0100 +3FFC +0540 +1930 +610C +ENDCHAR +STARTCHAR uni4149 +ENCODING 16713 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F048 +1048 +1048 +FC48 +1248 +314A +394A +554C +5448 +9048 +1048 +1048 +13FE +1000 +ENDCHAR +STARTCHAR uni414A +ENCODING 16714 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F3FE +1200 +1200 +FE0C +12F0 +3220 +3A20 +563E +53E0 +9220 +1422 +1422 +181E +1000 +ENDCHAR +STARTCHAR uni414B +ENCODING 16715 +BBX 15 16 0 -2 +BITMAP +0880 +1C80 +F0F8 +1108 +1210 +FDFC +1124 +3124 +3924 +55FC +5450 +9050 +1090 +1092 +1112 +120E +ENDCHAR +STARTCHAR uni414C +ENCODING 16716 +BBX 15 16 0 -2 +BITMAP +0800 +1CFC +F084 +1084 +10FC +FC00 +11FE +3102 +3902 +55FE +5502 +9102 +11FE +1102 +110A +1104 +ENDCHAR +STARTCHAR uni414D +ENCODING 16717 +BBX 15 16 0 -2 +BITMAP +0800 +1C06 +F3B8 +1088 +1088 +FD08 +113E +3B88 +3488 +5288 +5288 +913E +1100 +1280 +147E +1800 +ENDCHAR +STARTCHAR uni414E +ENCODING 16718 +BBX 15 16 0 -2 +BITMAP +081C +1DE0 +F020 +1020 +13FE +FCA8 +1124 +3222 +39F8 +5488 +5490 +90BE +1102 +1102 +1214 +1408 +ENDCHAR +STARTCHAR uni414F +ENCODING 16719 +BBX 15 15 1 -1 +BITMAP +1800 +E3FC +2204 +23FC +FA00 +221C +22E0 +7220 +6A3C +ABE0 +A23C +23E0 +2222 +2422 +201E +ENDCHAR +STARTCHAR uni4150 +ENCODING 16720 +BBX 15 16 0 -2 +BITMAP +0800 +1DF8 +F108 +1108 +11F8 +FD08 +1108 +31F8 +3908 +5508 +55F8 +9090 +1090 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni4151 +ENCODING 16721 +BBX 15 16 0 -2 +BITMAP +0808 +1C3C +F3C0 +1044 +1224 +FD28 +1100 +3040 +3BFE +5488 +5108 +9390 +1060 +1050 +1188 +1604 +ENDCHAR +STARTCHAR uni4152 +ENCODING 16722 +BBX 15 16 0 -2 +BITMAP +0890 +1C90 +F3FE +1090 +1090 +FC40 +1020 +33FE +3900 +5500 +5500 +9100 +1100 +1100 +11F8 +1000 +ENDCHAR +STARTCHAR uni4153 +ENCODING 16723 +BBX 15 16 0 -2 +BITMAP +1200 +3A00 +E23C +27D4 +2454 +F854 +2754 +3554 +6D54 +6554 +A748 +2548 +2048 +2054 +2294 +2122 +ENDCHAR +STARTCHAR uni4154 +ENCODING 16724 +BBX 15 16 0 -2 +BITMAP +0892 +1C92 +F124 +1248 +1124 +FC92 +1092 +3000 +39FE +5522 +5522 +91FE +1122 +1122 +11FE +1102 +ENDCHAR +STARTCHAR uni4155 +ENCODING 16725 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F102 +1102 +11FE +FD10 +1110 +31FE +3910 +5510 +557E +9142 +1142 +1242 +127E +1442 +ENDCHAR +STARTCHAR uni4156 +ENCODING 16726 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F3FE +1050 +1088 +FD24 +1222 +31FC +3924 +55FC +5524 +91FC +1022 +1022 +101E +1000 +ENDCHAR +STARTCHAR uni4157 +ENCODING 16727 +BBX 15 16 0 -2 +BITMAP +081C +1DE0 +F020 +1020 +13FE +FCA8 +1124 +3A42 +3440 +53FE +5088 +9108 +10D0 +1030 +1048 +1184 +ENDCHAR +STARTCHAR uni4158 +ENCODING 16728 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F020 +13FE +1020 +FD24 +1124 +3124 +3AAA +5470 +54A8 +90A8 +1124 +1222 +1420 +1020 +ENDCHAR +STARTCHAR uni4159 +ENCODING 16729 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +F104 +1104 +11FC +FD04 +1104 +31FC +3800 +5512 +55D4 +9118 +1110 +1152 +1192 +110E +ENDCHAR +STARTCHAR uni415A +ENCODING 16730 +BBX 15 16 0 -2 +BITMAP +0820 +1D24 +F0A8 +1020 +11FC +FC40 +13FE +3888 +3504 +52FA +5488 +9088 +10A8 +1092 +1082 +107E +ENDCHAR +STARTCHAR uni415B +ENCODING 16731 +BBX 15 16 0 -2 +BITMAP +08FC +1C84 +F084 +10FC +1084 +FC84 +10FC +3000 +39FE +5502 +5502 +91FE +1102 +1102 +11FE +1102 +ENDCHAR +STARTCHAR uni415C +ENCODING 16732 +BBX 15 16 0 -2 +BITMAP +0808 +1C3C +F1E0 +1020 +13FE +FCA8 +10A8 +30A8 +3BFE +54A8 +50A8 +93FE +1020 +1020 +11FC +1000 +ENDCHAR +STARTCHAR uni415D +ENCODING 16733 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F020 +13FE +1202 +FC94 +1108 +3204 +3800 +55FC +5420 +9020 +1020 +1020 +17FE +1000 +ENDCHAR +STARTCHAR uni415E +ENCODING 16734 +BBX 15 16 0 -2 +BITMAP +0800 +1DF8 +F108 +11F8 +1108 +FDF8 +1000 +31FC +3810 +57FE +5410 +9110 +1090 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni415F +ENCODING 16735 +BBX 15 16 0 -2 +BITMAP +0040 +1848 +7084 +11FE +1020 +FBFE +1088 +3124 +3A42 +5588 +5010 +9062 +1184 +1018 +1060 +1380 +ENDCHAR +STARTCHAR uni4160 +ENCODING 16736 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +F104 +1104 +11FC +FD04 +1104 +39FC +3400 +53FE +5020 +9120 +113C +1120 +12A0 +147E +ENDCHAR +STARTCHAR uni4161 +ENCODING 16737 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F020 +1040 +11FC +FD04 +1104 +31FC +3904 +55FC +5504 +9104 +11FC +1000 +1088 +1104 +ENDCHAR +STARTCHAR uni4162 +ENCODING 16738 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F3FE +1222 +13FE +FE22 +13FE +3000 +39FC +5504 +55FC +9104 +11FC +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni4163 +ENCODING 16739 +BBX 15 15 1 -1 +BITMAP +1840 +E080 +23F8 +2208 +FBF8 +2208 +2208 +63F8 +7000 +AFFC +A840 +23F8 +2040 +2040 +27FE +ENDCHAR +STARTCHAR uni4164 +ENCODING 16740 +BBX 15 16 0 -2 +BITMAP +0808 +1C3C +F1E0 +1020 +1020 +FDFE +1020 +30A0 +392C +5524 +5524 +91AC +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni4165 +ENCODING 16741 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +F104 +11FC +1104 +FDFC +1080 +31FE +3A22 +5522 +5552 +9102 +11FA +1002 +1014 +1008 +ENDCHAR +STARTCHAR uni4166 +ENCODING 16742 +BBX 15 16 0 -2 +BITMAP +0888 +1C88 +F3FE +1088 +1088 +FC00 +11FC +3124 +3924 +5524 +55FC +9124 +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni4167 +ENCODING 16743 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F3FC +1000 +1108 +FC90 +13FE +3000 +39F8 +5508 +5508 +91F8 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni4168 +ENCODING 16744 +BBX 15 16 0 -2 +BITMAP +081C +1DE0 +F020 +1020 +13FE +FCA8 +1124 +3222 +39FC +5504 +5504 +91FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni4169 +ENCODING 16745 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F3FE +1020 +11FC +FC88 +1050 +3020 +3858 +5586 +5400 +91FE +1102 +11FE +1084 +1102 +ENDCHAR +STARTCHAR uni416A +ENCODING 16746 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F1FC +1124 +11FC +FC20 +13FE +3000 +39FC +5504 +5524 +9124 +1124 +1050 +1088 +1304 +ENDCHAR +STARTCHAR uni416B +ENCODING 16747 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F3FE +1000 +1000 +FDFC +1104 +31FC +3904 +55FC +5420 +90A8 +1124 +1222 +10A0 +1040 +ENDCHAR +STARTCHAR uni416C +ENCODING 16748 +BBX 15 16 0 -2 +BITMAP +0904 +1C84 +F088 +1000 +13FE +FC00 +1088 +3104 +3A02 +55FC +5554 +9154 +1154 +1154 +17FE +1000 +ENDCHAR +STARTCHAR uni416D +ENCODING 16749 +BBX 15 16 0 -2 +BITMAP +0820 +1C10 +F1FE +1084 +1048 +FDFE +1102 +3224 +3810 +55FE +5440 +907C +1044 +1084 +1094 +1108 +ENDCHAR +STARTCHAR uni416E +ENCODING 16750 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F050 +1048 +10A4 +FDFE +1284 +30FC +3884 +54FC +5480 +90FC +1144 +1144 +127C +1044 +ENDCHAR +STARTCHAR uni416F +ENCODING 16751 +BBX 15 16 0 -2 +BITMAP +0820 +1C10 +F1FE +1110 +117C +FD14 +11FE +3114 +397C +5510 +557C +9144 +1144 +1244 +127C +1444 +ENDCHAR +STARTCHAR uni4170 +ENCODING 16752 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +F124 +1124 +11FC +FD24 +1154 +318C +3904 +55FC +5440 +9020 +10A4 +128A +128A +1478 +ENDCHAR +STARTCHAR uni4171 +ENCODING 16753 +BBX 15 16 0 -2 +BITMAP +0820 +1D24 +F124 +1124 +11FC +FC00 +13FE +3000 +39FC +5504 +5504 +91FC +1088 +1050 +13FE +1000 +ENDCHAR +STARTCHAR uni4172 +ENCODING 16754 +BBX 15 16 0 -2 +BITMAP +0840 +1C44 +F1F8 +1050 +13FE +FC40 +10F8 +3182 +3A7E +5400 +55FC +9104 +11FC +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni4173 +ENCODING 16755 +BBX 14 16 0 -2 +BITMAP +0880 +1C80 +F1FC +1244 +1154 +FDF4 +1084 +3128 +3A90 +55FC +5244 +9554 +11F4 +1084 +1128 +1210 +ENDCHAR +STARTCHAR uni4174 +ENCODING 16756 +BBX 15 16 0 -2 +BITMAP +0020 +1820 +73FE +1020 +13FE +FA42 +148C +31F0 +3820 +5444 +53FE +9022 +1128 +1224 +14A4 +1040 +ENDCHAR +STARTCHAR uni4175 +ENCODING 16757 +BBX 15 16 0 -2 +BITMAP +0904 +1C84 +F088 +1000 +13FE +FC20 +1020 +39FC +3420 +5420 +53FE +9000 +12A4 +1252 +1452 +1000 +ENDCHAR +STARTCHAR uni4176 +ENCODING 16758 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F100 +117E +1100 +FDFE +1154 +3148 +3964 +5542 +5504 +91FE +1144 +1224 +1204 +140C +ENDCHAR +STARTCHAR uni4177 +ENCODING 16759 +BBX 15 16 0 -2 +BITMAP +0888 +1C88 +F3FE +1088 +10A8 +FC50 +1088 +3174 +3A22 +5420 +55FC +9020 +10A8 +1124 +12A2 +1040 +ENDCHAR +STARTCHAR uni4178 +ENCODING 16760 +BBX 15 16 0 -2 +BITMAP +0888 +1C88 +F3FE +1088 +1040 +FC20 +11FC +3888 +3450 +53FE +5020 +9020 +11FC +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni4179 +ENCODING 16761 +BBX 15 16 0 -2 +BITMAP +0820 +1DFC +F124 +13FE +1124 +FDFC +1020 +31FC +3924 +55FC +5040 +93FE +1088 +11D0 +1070 +138C +ENDCHAR +STARTCHAR uni417A +ENCODING 16762 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +F050 +11FC +1154 +FD54 +11FC +3000 +39FC +5400 +57FE +9020 +10A8 +1124 +12A2 +1040 +ENDCHAR +STARTCHAR uni417B +ENCODING 16763 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F3FE +1000 +1154 +FD24 +1154 +39FC +3420 +53FE +5242 +9292 +12FA +120A +1202 +1206 +ENDCHAR +STARTCHAR uni417C +ENCODING 16764 +BBX 15 16 0 -2 +BITMAP +0800 +1DF8 +F108 +11F8 +1108 +FDF8 +1000 +3BFC +3694 +53FC +5000 +91F8 +1090 +1060 +1198 +1606 +ENDCHAR +STARTCHAR uni417D +ENCODING 16765 +BBX 15 16 0 -2 +BITMAP +0800 +7F78 +0848 +3E48 +0086 +3E78 +2A48 +3E30 +4048 +81E4 +1F00 +0100 +7FFC +0540 +1930 +610C +ENDCHAR +STARTCHAR uni417E +ENCODING 16766 +BBX 15 15 0 -2 +BITMAP +1BDE +7088 +12A8 +13FE +F988 +12DA +34A6 +39F8 +5508 +5108 +91F8 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni417F +ENCODING 16767 +BBX 15 16 0 -2 +BITMAP +0888 +1FFE +F088 +1000 +11FC +FCA8 +10A8 +33FE +38A8 +54A8 +55FC +9020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni4180 +ENCODING 16768 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +F124 +11AC +1174 +FD24 +11FC +3820 +35FC +5020 +53FE +9000 +12A4 +1252 +1452 +1000 +ENDCHAR +STARTCHAR uni4181 +ENCODING 16769 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +F154 +11FC +1020 +FDFC +1020 +33FE +3888 +5450 +55FC +9020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni4182 +ENCODING 16770 +BBX 15 16 0 -2 +BITMAP +1020 +3BFE +E288 +2250 +23FE +FA50 +22FC +3254 +6BFE +6254 +A2FC +2250 +22D8 +2554 +2652 +2850 +ENDCHAR +STARTCHAR uni4183 +ENCODING 16771 +BBX 14 16 1 -2 +BITMAP +4220 +2FF8 +0080 +E7F0 +2410 +27F0 +2410 +5FFC +8000 +03C0 +3E00 +0200 +FFF8 +0A80 +3260 +C218 +ENDCHAR +STARTCHAR uni4184 +ENCODING 16772 +BBX 15 16 0 -2 +BITMAP +0810 +1DFE +F000 +11FE +1102 +FD7A +114A +39FE +3400 +54FC +5084 +90FC +1084 +10FC +1000 +11FE +ENDCHAR +STARTCHAR uni4185 +ENCODING 16773 +BBX 15 16 0 -2 +BITMAP +0A20 +1D3E +F042 +1094 +1310 +FD28 +1046 +31FC +3904 +55FC +5504 +91FC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni4186 +ENCODING 16774 +BBX 15 16 0 -2 +BITMAP +08F8 +1C88 +F088 +10F8 +1000 +FDDC +1154 +3154 +39DC +5420 +57FE +9070 +10A8 +1124 +1222 +1020 +ENDCHAR +STARTCHAR uni4187 +ENCODING 16775 +BBX 15 16 0 -2 +BITMAP +1000 +E7FC +2484 +25E4 +2524 +FDE4 +2524 +35E4 +6D04 +65F4 +A504 +25F4 +2414 +2556 +2556 +2832 +ENDCHAR +STARTCHAR uni4188 +ENCODING 16776 +BBX 15 16 0 -2 +BITMAP +1000 +E4FE +2282 +22FE +2080 +F8AA +2E9C +32AA +6A80 +62A8 +A2BE +22C8 +22BE +2288 +2508 +28FE +ENDCHAR +STARTCHAR uni4189 +ENCODING 16777 +BBX 15 16 0 -2 +BITMAP +1000 +3BFC +E294 +2294 +23FC +F910 +2252 +33DC +6812 +63CE +A240 +23D2 +225C +23D0 +2252 +22CE +ENDCHAR +STARTCHAR uni418A +ENCODING 16778 +BBX 15 16 0 -2 +BITMAP +0094 +1B98 +7092 +118E +1280 +F9FC +1124 +31FC +3924 +55FC +5088 +91FC +1088 +13FE +1088 +1104 +ENDCHAR +STARTCHAR uni418B +ENCODING 16779 +BBX 15 16 0 -2 +BITMAP +1080 +39F8 +E208 +27FE +2252 +FBDE +2050 +335E +6952 +67DE +A152 +235E +2150 +27D2 +2152 +233E +ENDCHAR +STARTCHAR uni418C +ENCODING 16780 +BBX 15 16 0 -2 +BITMAP +0394 +1910 +77BE +1118 +13AA +FD46 +1020 +33FE +3800 +57FC +5000 +93FC +1000 +13FC +1204 +13FC +ENDCHAR +STARTCHAR uni418D +ENCODING 16781 +BBX 15 16 0 -2 +BITMAP +1210 +3910 +E7DE +2010 +245E +FA82 +27DE +3010 +6FDE +6450 +A7DE +2450 +27DE +2450 +2452 +24CE +ENDCHAR +STARTCHAR uni418E +ENCODING 16782 +BBX 15 16 0 -2 +BITMAP +1148 +394C +E2AA +2008 +27FE +F948 +2368 +314A +6B6A +614C +A36C +2148 +216A +239A +2026 +2042 +ENDCHAR +STARTCHAR uni418F +ENCODING 16783 +BBX 15 16 0 -2 +BITMAP +0924 +1CA8 +F3FE +10A8 +1326 +FDFC +1124 +31FC +3924 +55FC +5488 +93FE +1088 +17FE +1104 +1202 +ENDCHAR +STARTCHAR uni4190 +ENCODING 16784 +BBX 15 16 0 -2 +BITMAP +0100 +1FF0 +0200 +7FFC +0820 +37D8 +C106 +3FF8 +1110 +7D7C +2020 +FEFE +5454 +BABA +1010 +5454 +ENDCHAR +STARTCHAR uni4191 +ENCODING 16785 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8824 +1010 +2008 +0000 +7FFC +0100 +0100 +0100 +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni4192 +ENCODING 16786 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8824 +1210 +2208 +1FE0 +0220 +0A20 +0420 +0620 +0922 +1022 +201E +4000 +ENDCHAR +STARTCHAR uni4193 +ENCODING 16787 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8824 +1110 +2208 +0440 +0820 +1FF0 +0450 +0440 +0440 +0844 +1044 +603C +ENDCHAR +STARTCHAR uni4194 +ENCODING 16788 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9114 +2108 +0100 +3FF8 +2108 +2108 +2108 +3FF8 +2108 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4195 +ENCODING 16789 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9114 +0100 +3FF0 +0110 +0110 +0110 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni4196 +ENCODING 16790 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2208 +0200 +7FFC +0400 +0480 +0880 +1100 +2220 +4410 +8FF8 +0408 +ENDCHAR +STARTCHAR uni4197 +ENCODING 16791 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2008 +0000 +7C88 +4488 +4488 +4488 +4498 +7CE8 +4488 +0008 +0008 +ENDCHAR +STARTCHAR uni4198 +ENCODING 16792 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2008 +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +1110 +0100 +0100 +ENDCHAR +STARTCHAR uni4199 +ENCODING 16793 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +7FFE +4822 +9014 +0000 +7FFC +0100 +0100 +1100 +11F8 +1100 +1100 +1100 +FFFE +ENDCHAR +STARTCHAR uni419A +ENCODING 16794 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +0000 +3FF8 +2008 +2FE8 +2008 +27C8 +2448 +2448 +27C8 +2008 +2018 +ENDCHAR +STARTCHAR uni419B +ENCODING 16795 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +0000 +0018 +79E0 +4840 +4840 +487E +4BC0 +4840 +7844 +4844 +003C +ENDCHAR +STARTCHAR uni419C +ENCODING 16796 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9414 +0400 +7FFC +0800 +1FF0 +2810 +4FF0 +8810 +0FF0 +0810 +0850 +0820 +ENDCHAR +STARTCHAR uni419D +ENCODING 16797 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +7FFE +4002 +8824 +1010 +2108 +0200 +3FF8 +2448 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni419E +ENCODING 16798 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +10F0 +1F00 +1004 +1004 +0FFC +ENDCHAR +STARTCHAR uni419F +ENCODING 16799 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9114 +2288 +0C60 +3018 +CFE6 +0000 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni41A0 +ENCODING 16800 +BBX 15 15 0 -1 +BITMAP +0100 +7FFE +4822 +9014 +0000 +3FFC +2100 +2100 +3FF8 +2008 +2008 +3FF8 +2100 +2100 +3FFC +ENDCHAR +STARTCHAR uni41A1 +ENCODING 16801 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9214 +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +1108 +1090 +1260 +1418 +1806 +ENDCHAR +STARTCHAR uni41A2 +ENCODING 16802 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +1040 +FDF8 +1048 +1448 +1848 +33FE +D040 +10A0 +1110 +5208 +2406 +ENDCHAR +STARTCHAR uni41A3 +ENCODING 16803 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +0000 +3FFC +2000 +2FF8 +2000 +3FFE +2908 +2890 +4860 +4A18 +8C06 +ENDCHAR +STARTCHAR uni41A4 +ENCODING 16804 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +0200 +1FF0 +1010 +1FF0 +1012 +1FF4 +1018 +7FF0 +0190 +0E10 +F050 +0020 +ENDCHAR +STARTCHAR uni41A5 +ENCODING 16805 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +7FFC +0200 +0D08 +7190 +02A0 +0CC0 +71A0 +0698 +1886 +E280 +0100 +ENDCHAR +STARTCHAR uni41A6 +ENCODING 16806 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9114 +0910 +0920 +12C0 +0430 +1908 +6914 +0910 +12A0 +0440 +1830 +600C +ENDCHAR +STARTCHAR uni41A7 +ENCODING 16807 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9074 +1F80 +0100 +7FFC +0540 +1930 +E10E +0400 +7FFC +0820 +1C40 +0380 +7C78 +ENDCHAR +STARTCHAR uni41A8 +ENCODING 16808 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +3FF8 +0100 +7FFC +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni41A9 +ENCODING 16809 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +7FFC +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni41AA +ENCODING 16810 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +95FC +5504 +5850 +1088 +FD04 +2800 +28F8 +2820 +2820 +2820 +29FC +4800 +4802 +87FE +ENDCHAR +STARTCHAR uni41AB +ENCODING 16811 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +0800 +1FF8 +2A48 +4448 +0A88 +1108 +22A8 +0410 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni41AC +ENCODING 16812 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +0FE0 +0820 +3FF8 +2008 +3FF8 +2008 +3FF8 +2008 +3FF8 +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni41AD +ENCODING 16813 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +0800 +7F7C +0810 +7F10 +4910 +7F10 +49FE +7F10 +0810 +FF90 +0810 +0810 +ENDCHAR +STARTCHAR uni41AE +ENCODING 16814 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +23F8 +1008 +11F8 +8008 +43F8 +5000 +17FC +2404 +E3F8 +2110 +20E0 +271C +ENDCHAR +STARTCHAR uni41AF +ENCODING 16815 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +BEFC +1248 +0C30 +32C8 +0000 +3EF8 +1248 +0C30 +32C8 +FFFE +0820 +07C0 +7838 +ENDCHAR +STARTCHAR uni41B0 +ENCODING 16816 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +3FF8 +2000 +27F0 +2410 +27F0 +2000 +2F78 +2948 +2F78 +2000 +3FFC +ENDCHAR +STARTCHAR uni41B1 +ENCODING 16817 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2040 +1248 +90B0 +4108 +4604 +1040 +2244 +E448 +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni41B2 +ENCODING 16818 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9114 +3FF8 +2080 +2FF8 +2088 +3FFE +2088 +2FF8 +24C4 +22A8 +4498 +5886 +8180 +ENDCHAR +STARTCHAR uni41B3 +ENCODING 16819 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +23FC +1080 +1144 +0668 +70B0 +1128 +1668 +10A4 +1124 +16A0 +2840 +47FE +ENDCHAR +STARTCHAR uni41B4 +ENCODING 16820 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4844 +F23E +07C0 +1880 +FFF0 +2110 +3FF8 +2108 +3FF8 +2108 +3FFA +0102 +00FE +ENDCHAR +STARTCHAR uni41B5 +ENCODING 16821 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +0820 +7FFC +5114 +4924 +7FFC +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni41B6 +ENCODING 16822 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9114 +0880 +1FFC +3080 +5FF8 +1080 +1FF8 +1080 +1FFC +1000 +2488 +2244 +4244 +ENDCHAR +STARTCHAR uni41B7 +ENCODING 16823 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +1FF0 +0220 +7FFC +0488 +7A80 +0100 +3FF8 +2828 +37D8 +2448 +27C8 +2018 +ENDCHAR +STARTCHAR uni41B8 +ENCODING 16824 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9094 +7EA0 +0444 +2828 +17D0 +2008 +DFF6 +1010 +1FF0 +0820 +0440 +7FFC +ENDCHAR +STARTCHAR uni41B9 +ENCODING 16825 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4922 +9FF4 +0440 +7FFC +0000 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni41BA +ENCODING 16826 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +00F8 +3F00 +1110 +0920 +FFFE +0920 +3018 +DFF6 +1110 +1FF0 +1110 +1FF0 +ENDCHAR +STARTCHAR uni41BB +ENCODING 16827 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +7C20 +0420 +FF3E +2244 +3EA4 +2228 +3E28 +2390 +FE28 +4244 +0282 +ENDCHAR +STARTCHAR uni41BC +ENCODING 16828 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +21F8 +1108 +11E8 +0128 +73FC +1204 +12F4 +1294 +12F4 +1214 +2A08 +47FE +ENDCHAR +STARTCHAR uni41BD +ENCODING 16829 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +91FC +0100 +3FFC +2104 +2FE0 +2108 +2FF8 +2300 +2C90 +2360 +5CD8 +4346 +9CC0 +ENDCHAR +STARTCHAR uni41BE +ENCODING 16830 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +3F20 +2420 +3F3E +2140 +3F50 +2488 +3F08 +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni41BF +ENCODING 16831 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +F87E +0040 +49FC +4904 +49FC +7904 +09FC +F904 +2BFE +28A8 +4924 +8A22 +ENDCHAR +STARTCHAR uni41C0 +ENCODING 16832 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +2200 +FF7E +2224 +3E3C +0824 +7F24 +493C +7F24 +0826 +FF7C +0804 +0804 +ENDCHAR +STARTCHAR uni41C1 +ENCODING 16833 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +2044 +3E28 +44FE +FF10 +4910 +7F7C +4910 +7F10 +00FE +5510 +4A90 +8A90 +ENDCHAR +STARTCHAR uni41C2 +ENCODING 16834 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +0100 +7FFC +0000 +1010 +0820 +0440 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni41C3 +ENCODING 16835 +BBX 15 15 0 -1 +BITMAP +1000 +0800 +08FC +7E84 +0084 +0484 +4484 +44FC +2484 +2880 +2880 +0E82 +F082 +4082 +007E +ENDCHAR +STARTCHAR uni41C4 +ENCODING 16836 +BBX 15 15 0 -1 +BITMAP +1040 +0840 +0840 +7EFE +0080 +0500 +447C +4408 +2410 +2820 +2840 +0E80 +F102 +4102 +00FE +ENDCHAR +STARTCHAR uni41C5 +ENCODING 16837 +BBX 15 16 0 -2 +BITMAP +1050 +0848 +0848 +7E40 +005E +05E0 +4440 +4444 +2444 +2848 +2830 +0E22 +F052 +408A +0306 +0002 +ENDCHAR +STARTCHAR uni41C6 +ENCODING 16838 +BBX 15 16 0 -2 +BITMAP +1008 +0888 +0848 +7E48 +0008 +0488 +4448 +4448 +2408 +280E +29F8 +0E08 +F008 +4008 +0008 +0008 +ENDCHAR +STARTCHAR uni41C7 +ENCODING 16839 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1104 +FD04 +0104 +09FC +8920 +8920 +49FE +4920 +5120 +5110 +1D12 +E14A +4186 +0102 +ENDCHAR +STARTCHAR uni41C8 +ENCODING 16840 +BBX 15 15 0 -1 +BITMAP +2000 +11FC +1084 +FC88 +0050 +0820 +88D8 +8B06 +4820 +4820 +51FC +5020 +1C20 +E020 +43FE +ENDCHAR +STARTCHAR uni41C9 +ENCODING 16841 +BBX 15 16 0 -2 +BITMAP +2000 +1000 +13FE +FC20 +0020 +0840 +8840 +88FC +4984 +4A84 +5484 +5084 +1C84 +E084 +40FC +0084 +ENDCHAR +STARTCHAR uni41CA +ENCODING 16842 +BBX 15 16 0 -2 +BITMAP +2020 +1010 +1010 +FDFE +0100 +0910 +8910 +8910 +4910 +4920 +5128 +5124 +1E44 +E2FE +4442 +0800 +ENDCHAR +STARTCHAR uni41CB +ENCODING 16843 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +087C +7E84 +0148 +0430 +4428 +4448 +259E +2822 +2842 +0EA4 +F018 +4010 +0060 +0180 +ENDCHAR +STARTCHAR uni41CC +ENCODING 16844 +BBX 14 16 0 -2 +BITMAP +2020 +1124 +10A4 +FCA8 +0020 +09FC +8904 +8904 +49FC +4904 +5104 +51FC +1D04 +E104 +4114 +0108 +ENDCHAR +STARTCHAR uni41CD +ENCODING 16845 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1104 +FD04 +0104 +09FC +8820 +8820 +4920 +493C +5120 +5120 +1EA0 +E260 +443E +0800 +ENDCHAR +STARTCHAR uni41CE +ENCODING 16846 +BBX 15 16 0 -2 +BITMAP +2048 +1048 +1048 +FDFE +0048 +0848 +89FE +8800 +48FC +4884 +5084 +50FC +1C84 +E084 +40FC +0084 +ENDCHAR +STARTCHAR uni41CF +ENCODING 16847 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +13FE +FC00 +01FC +0904 +89FC +8800 +49FC +4808 +5010 +53FE +1C20 +E020 +40A0 +0040 +ENDCHAR +STARTCHAR uni41D0 +ENCODING 16848 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +11FC +FC24 +0024 +0BFE +8824 +8824 +49FC +4A22 +5174 +50A8 +1D24 +E222 +40A0 +0040 +ENDCHAR +STARTCHAR uni41D1 +ENCODING 16849 +BBX 15 16 0 -2 +BITMAP +2040 +1080 +11FC +FD24 +0124 +09FC +8924 +8944 +49FC +4890 +5110 +53FE +1C10 +E010 +4010 +0010 +ENDCHAR +STARTCHAR uni41D2 +ENCODING 16850 +BBX 15 15 0 -1 +BITMAP +7DFC +4420 +7D20 +45FE +7C50 +4852 +5492 +650E +0200 +0100 +3FF8 +0000 +0820 +0440 +FFFE +ENDCHAR +STARTCHAR uni41D3 +ENCODING 16851 +BBX 15 16 0 -2 +BITMAP +0BFE +1040 +61FC +0904 +11FC +6104 +05FC +0904 +31FC +C088 +0304 +0100 +3FF8 +0820 +0440 +FFFE +ENDCHAR +STARTCHAR uni41D4 +ENCODING 16852 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +2000 +3FF8 +0000 +3FF8 +2008 +3FF8 +0200 +711C +57D4 +7014 +545C +7296 +51D6 +B622 +ENDCHAR +STARTCHAR uni41D5 +ENCODING 16853 +BBX 15 15 0 -2 +BITMAP +21FC +1020 +13FE +FA22 +01AC +0820 +89AC +8800 +4BFE +5020 +51FC +1D54 +E154 +4154 +010C +ENDCHAR +STARTCHAR uni41D6 +ENCODING 16854 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0800 +0800 +1FF8 +2108 +4108 +0208 +0208 +0408 +1808 +6050 +0020 +ENDCHAR +STARTCHAR uni41D7 +ENCODING 16855 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8000 +0440 +0820 +1010 +2108 +C206 +0400 +0820 +1010 +3FF8 +1008 +ENDCHAR +STARTCHAR uni41D8 +ENCODING 16856 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8000 +7FFC +0400 +0FF0 +0810 +0820 +1020 +1FC0 +0040 +FFFE +ENDCHAR +STARTCHAR uni41D9 +ENCODING 16857 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0000 +7F08 +0108 +0108 +3F08 +2008 +4008 +7F08 +0108 +0108 +0A08 +0408 +ENDCHAR +STARTCHAR uni41DA +ENCODING 16858 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0000 +0840 +0840 +1040 +3050 +5048 +9044 +1044 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni41DB +ENCODING 16859 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +1F7E +2890 +2488 +4508 +8100 +0100 +1100 +11F8 +1100 +1100 +1100 +1100 +FFFE +ENDCHAR +STARTCHAR uni41DC +ENCODING 16860 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8808 +0800 +0FFC +1004 +2108 +4100 +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni41DD +ENCODING 16861 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8040 +0420 +0400 +04FE +FF00 +0210 +0160 +0184 +0E44 +7034 +000C +ENDCHAR +STARTCHAR uni41DE +ENCODING 16862 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +1010 +1010 +FFFE +1010 +1010 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni41DF +ENCODING 16863 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +9020 +1020 +3E20 +22FC +4224 +A424 +1444 +0844 +1084 +2114 +4208 +ENDCHAR +STARTCHAR uni41E0 +ENCODING 16864 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8200 +0100 +7FFC +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni41E1 +ENCODING 16865 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8A08 +0100 +7FFE +4002 +8004 +3FF8 +0100 +0100 +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni41E2 +ENCODING 16866 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8100 +0100 +FFFE +0100 +0100 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni41E3 +ENCODING 16867 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0280 +0440 +0920 +3118 +C106 +0100 +0920 +1110 +2108 +0500 +0200 +ENDCHAR +STARTCHAR uni41E4 +ENCODING 16868 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0000 +FFFE +0100 +0100 +7FFC +4104 +4284 +4444 +4824 +4004 +4014 +4008 +ENDCHAR +STARTCHAR uni41E5 +ENCODING 16869 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0000 +7FFC +0100 +0100 +1100 +11F8 +1100 +1100 +1100 +FFFE +ENDCHAR +STARTCHAR uni41E6 +ENCODING 16870 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8508 +0100 +1FF0 +1110 +1110 +1110 +7FFC +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni41E7 +ENCODING 16871 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0000 +FFFE +0100 +3FF8 +2108 +2288 +2448 +2828 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni41E8 +ENCODING 16872 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0800 +1FF0 +2820 +07C0 +1830 +E10E +1FF0 +0100 +1100 +1FF8 +0100 +0100 +ENDCHAR +STARTCHAR uni41E9 +ENCODING 16873 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0108 +00B0 +01C2 +0E32 +700E +ENDCHAR +STARTCHAR uni41EA +ENCODING 16874 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0000 +7FFC +0400 +0820 +1FF0 +0110 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni41EB +ENCODING 16875 +BBX 15 15 0 -1 +BITMAP +2040 +3F7E +4890 +8508 +0000 +3FFC +2080 +2080 +27F8 +2408 +2408 +27F8 +2080 +2080 +3FFE +ENDCHAR +STARTCHAR uni41EC +ENCODING 16876 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +1100 +1100 +3FF8 +4100 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni41ED +ENCODING 16877 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0200 +0208 +3FD0 +0220 +FFFE +0100 +0610 +08E0 +3F00 +C808 +0808 +07F8 +ENDCHAR +STARTCHAR uni41EE +ENCODING 16878 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0818 +09E0 +1020 +1020 +37FE +5020 +9020 +1020 +1020 +11FC +ENDCHAR +STARTCHAR uni41EF +ENCODING 16879 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8000 +7FFC +1010 +1FF0 +1010 +1FF0 +1010 +103E +FFD0 +0010 +0010 +ENDCHAR +STARTCHAR uni41F0 +ENCODING 16880 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0000 +1FC0 +0044 +7D88 +0550 +0920 +3118 +C506 +0200 +3FF8 +ENDCHAR +STARTCHAR uni41F1 +ENCODING 16881 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0000 +3FF8 +2208 +23C8 +2448 +2A88 +2108 +2288 +2408 +3FF8 +2008 +ENDCHAR +STARTCHAR uni41F2 +ENCODING 16882 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0100 +3FF8 +0100 +1110 +0920 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni41F3 +ENCODING 16883 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8448 +0120 +3FFC +0100 +1FF8 +0100 +7FFC +00A0 +0042 +03B2 +7C0C +ENDCHAR +STARTCHAR uni41F4 +ENCODING 16884 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0000 +FFFE +0440 +3FF8 +2448 +2448 +2848 +3038 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni41F5 +ENCODING 16885 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +200C +11F0 +1100 +8100 +49FE +4910 +1110 +E110 +2210 +2210 +2410 +ENDCHAR +STARTCHAR uni41F6 +ENCODING 16886 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0800 +1FF0 +2020 +5FF8 +1108 +1FF8 +1108 +1FF8 +1108 +2108 +2128 +4010 +ENDCHAR +STARTCHAR uni41F7 +ENCODING 16887 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3F04 +2104 +2124 +3F24 +0824 +0824 +7FA4 +08A4 +10A4 +1084 +2294 +4108 +ENDCHAR +STARTCHAR uni41F8 +ENCODING 16888 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +3F7E +2890 +4508 +9FF0 +1010 +1010 +1FF0 +0000 +3FF8 +0100 +1FF0 +0100 +7FFC +ENDCHAR +STARTCHAR uni41F9 +ENCODING 16889 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0000 +3FF8 +0408 +FFFE +0408 +3FF8 +0800 +1FF8 +2808 +4808 +8FF8 +0808 +ENDCHAR +STARTCHAR uni41FA +ENCODING 16890 +BBX 15 15 0 -1 +BITMAP +2040 +3F7E +4890 +8508 +0000 +7FFC +0000 +1FF0 +1010 +1010 +1FF0 +0000 +0820 +0440 +FFFE +ENDCHAR +STARTCHAR uni41FB +ENCODING 16891 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3FF8 +2008 +3FF8 +2000 +2070 +2F80 +20F0 +2F80 +20F8 +5F82 +4082 +807E +ENDCHAR +STARTCHAR uni41FC +ENCODING 16892 +BBX 15 15 0 -1 +BITMAP +2040 +3F7E +4890 +8508 +1FF0 +1010 +1FF0 +0000 +3FF8 +2108 +2108 +3FF8 +2002 +2002 +1FFE +ENDCHAR +STARTCHAR uni41FD +ENCODING 16893 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +9508 +100C +11F0 +FD00 +1100 +11FE +1D10 +F110 +1110 +1210 +5210 +2410 +ENDCHAR +STARTCHAR uni41FE +ENCODING 16894 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0100 +7FFC +0000 +3FF8 +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni41FF +ENCODING 16895 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0100 +FFFE +0100 +3FF8 +2108 +2108 +3FF8 +2388 +0560 +1918 +E106 +0100 +ENDCHAR +STARTCHAR uni4200 +ENCODING 16896 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +3F84 +2A84 +2A94 +2A94 +FFD4 +2A94 +2A94 +2A94 +2A84 +2094 +2188 +ENDCHAR +STARTCHAR uni4201 +ENCODING 16897 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0280 +0C60 +37D8 +C006 +3FF8 +2488 +2488 +3FF8 +2488 +2488 +24A8 +2010 +ENDCHAR +STARTCHAR uni4202 +ENCODING 16898 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +1010 +0820 +7FFC +0820 +0820 +0820 +FFFE +0820 +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni4203 +ENCODING 16899 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +23FC +1084 +1084 +8084 +4914 +4A08 +15FC +E104 +2104 +2104 +21FC +2104 +ENDCHAR +STARTCHAR uni4204 +ENCODING 16900 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +9FE0 +4044 +5194 +4924 +43C4 +4544 +4924 +5514 +4204 +7FFC +0004 +ENDCHAR +STARTCHAR uni4205 +ENCODING 16901 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8528 +0090 +7FFC +0080 +3E88 +2288 +2250 +3E50 +0024 +0754 +788C +2104 +ENDCHAR +STARTCHAR uni4206 +ENCODING 16902 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0080 +3FFC +2004 +2004 +3FFC +20A0 +2090 +2FFC +2120 +4210 +4408 +9806 +ENDCHAR +STARTCHAR uni4207 +ENCODING 16903 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8508 +01F8 +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +7FFC +0100 +ENDCHAR +STARTCHAR uni4208 +ENCODING 16904 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +3EFC +22A4 +22A4 +3EA4 +22FC +2280 +3E80 +2282 +2282 +4A7E +8400 +ENDCHAR +STARTCHAR uni4209 +ENCODING 16905 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8A08 +0100 +3FF8 +0820 +FFFE +0400 +7FFC +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni420A +ENCODING 16906 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0100 +3FF8 +0100 +FFFE +1010 +2208 +47E4 +0820 +1440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni420B +ENCODING 16907 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0104 +7D98 +0960 +3118 +C506 +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni420C +ENCODING 16908 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1000 +09F8 +0908 +4108 +21F8 +2908 +0908 +11F8 +7108 +1108 +17FE +1000 +ENDCHAR +STARTCHAR uni420D +ENCODING 16909 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0080 +FFFE +1000 +1FF8 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni420E +ENCODING 16910 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +1110 +FFFE +1110 +11F0 +1000 +1FFC +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni420F +ENCODING 16911 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0000 +7FFC +0000 +1FF0 +1010 +1FF0 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +ENDCHAR +STARTCHAR uni4210 +ENCODING 16912 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +9548 +1040 +13FE +5880 +5490 +5110 +9152 +1254 +14A8 +1028 +1044 +1082 +ENDCHAR +STARTCHAR uni4211 +ENCODING 16913 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1FF0 +1010 +1F90 +1090 +7FFC +4004 +4FE4 +4824 +4824 +4FE4 +4014 +4008 +ENDCHAR +STARTCHAR uni4212 +ENCODING 16914 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0100 +FFFE +0100 +3FF8 +2448 +2288 +2FE8 +2108 +3FF8 +2108 +2128 +2010 +ENDCHAR +STARTCHAR uni4213 +ENCODING 16915 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +1FF0 +1010 +1FF0 +1010 +1FF0 +0800 +1FFC +2104 +5284 +1454 +1FE8 +ENDCHAR +STARTCHAR uni4214 +ENCODING 16916 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7CF8 +4408 +4408 +7CF8 +4000 +41F8 +7C88 +4050 +4020 +7C50 +4088 +4306 +ENDCHAR +STARTCHAR uni4215 +ENCODING 16917 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +7FFC +1100 +11F8 +2900 +47FE +8000 +ENDCHAR +STARTCHAR uni4216 +ENCODING 16918 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0C10 +7090 +1050 +1010 +FC90 +3050 +381E +55F0 +5010 +9010 +1010 +1010 +ENDCHAR +STARTCHAR uni4217 +ENCODING 16919 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0910 +0A08 +17FC +3110 +5208 +9484 +11F8 +1308 +1490 +1060 +1198 +1606 +ENDCHAR +STARTCHAR uni4218 +ENCODING 16920 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +0440 +FFFE +1020 +1020 +2448 +7CF8 +0810 +1020 +2448 +7EFC +0204 +ENDCHAR +STARTCHAR uni4219 +ENCODING 16921 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +1000 +1008 +2408 +79FE +1008 +2488 +7E48 +0048 +5408 +4A28 +8A10 +ENDCHAR +STARTCHAR uni421A +ENCODING 16922 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0800 +1010 +3FF8 +0008 +1FF0 +1010 +1010 +1FF0 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni421B +ENCODING 16923 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0800 +0F7C +0844 +0844 +7F44 +5528 +5528 +7F10 +5510 +5528 +5544 +4382 +ENDCHAR +STARTCHAR uni421C +ENCODING 16924 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0BF8 +0808 +11F8 +3008 +53F8 +9000 +17FC +1404 +13F8 +1110 +10E0 +171C +ENDCHAR +STARTCHAR uni421D +ENCODING 16925 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +BFFC +0104 +11F0 +1100 +2FFE +4000 +9FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1030 +ENDCHAR +STARTCHAR uni421E +ENCODING 16926 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0080 +7FFC +0000 +1FF0 +1010 +1FF0 +0000 +3FF8 +2008 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni421F +ENCODING 16927 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8808 +3F04 +2124 +3F24 +2124 +3F24 +2124 +2124 +3F24 +1204 +2114 +4088 +ENDCHAR +STARTCHAR uni4220 +ENCODING 16928 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +00FC +7F00 +2208 +1110 +3FF8 +0200 +FFFE +0400 +0FF0 +1220 +21C0 +CE3C +ENDCHAR +STARTCHAR uni4221 +ENCODING 16929 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0800 +1FF8 +2A48 +4448 +0A88 +1108 +22A8 +0410 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni4222 +ENCODING 16930 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +9000 +2008 +7FFC +0004 +3FF8 +2008 +3FF8 +0100 +FFFE +0540 +0920 +3118 +C106 +ENDCHAR +STARTCHAR uni4223 +ENCODING 16931 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0020 +7F20 +043E +0444 +27A4 +2428 +2428 +2410 +2F28 +F044 +4082 +ENDCHAR +STARTCHAR uni4224 +ENCODING 16932 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1088 +1088 +FC88 +13FE +3088 +3888 +54F8 +5488 +9088 +1088 +10F8 +1088 +ENDCHAR +STARTCHAR uni4225 +ENCODING 16933 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1010 +1F10 +2210 +7FBE +A492 +3F92 +2492 +3F92 +2492 +24A2 +42AA +8144 +ENDCHAR +STARTCHAR uni4226 +ENCODING 16934 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2448 +2388 +2448 +3FF8 +1010 +2208 +47E4 +0820 +1440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni4227 +ENCODING 16935 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +80F8 +7F00 +2210 +1120 +1FE0 +1020 +1FF0 +1010 +1FFC +2004 +2AA4 +4AA4 +800C +ENDCHAR +STARTCHAR uni4228 +ENCODING 16936 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0000 +7DF8 +4508 +49F8 +5108 +49F8 +4524 +4528 +5510 +4948 +4186 +4100 +ENDCHAR +STARTCHAR uni4229 +ENCODING 16937 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0804 +1404 +2224 +5D24 +8024 +1124 +0924 +4A24 +27A4 +F804 +4014 +0008 +ENDCHAR +STARTCHAR uni422A +ENCODING 16938 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFC +0000 +1FF0 +1010 +1FF0 +0000 +7FFC +4824 +4444 +5FF4 +4104 +410C +ENDCHAR +STARTCHAR uni422B +ENCODING 16939 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1020 +1020 +25FC +7D24 +0924 +1154 +254C +7D84 +0104 +5504 +5514 +8108 +ENDCHAR +STARTCHAR uni422C +ENCODING 16940 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +4044 +27FE +2040 +87FC +4444 +57FC +1444 +E7FC +2444 +2444 +2454 +0408 +ENDCHAR +STARTCHAR uni422D +ENCODING 16941 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8A08 +0400 +3FF8 +2108 +3FF8 +2108 +3FF8 +0290 +04A8 +08FA +308A +C07E +ENDCHAR +STARTCHAR uni422E +ENCODING 16942 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2080 +1080 +10FC +FD04 +02F4 +4894 +4894 +48F4 +1094 +1E04 +F028 +4010 +ENDCHAR +STARTCHAR uni422F +ENCODING 16943 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +BFF8 +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +FFFE +0820 +1010 +ENDCHAR +STARTCHAR uni4230 +ENCODING 16944 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1020 +1124 +10A8 +FC20 +11FC +1104 +1DFC +F104 +51FC +1104 +5114 +2108 +ENDCHAR +STARTCHAR uni4231 +ENCODING 16945 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +00FC +7F00 +2208 +1110 +0C20 +3078 +2008 +3C78 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni4232 +ENCODING 16946 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1078 +3E48 +2248 +2A86 +2300 +FEFC +2244 +2A44 +2228 +4210 +4A28 +84C6 +ENDCHAR +STARTCHAR uni4233 +ENCODING 16947 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +9FF8 +1008 +1FF8 +1008 +1FF8 +0000 +7EFC +2244 +1224 +0A14 +1224 +6AD4 +0408 +ENDCHAR +STARTCHAR uni4234 +ENCODING 16948 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1020 +0840 +7FFC +0480 +3FF0 +0490 +FFFE +0490 +3FF0 +0CA0 +3498 +C486 +ENDCHAR +STARTCHAR uni4235 +ENCODING 16949 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8548 +0820 +3218 +C446 +0FE0 +0020 +7EFC +2244 +1224 +0A14 +1224 +2A54 +4488 +ENDCHAR +STARTCHAR uni4236 +ENCODING 16950 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4A90 +8508 +7FFE +4002 +8924 +1290 +2448 +0820 +3FF8 +C826 +0820 +0FE0 +0820 +ENDCHAR +STARTCHAR uni4237 +ENCODING 16951 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +9508 +1080 +10F8 +FD08 +1290 +3060 +3998 +5606 +51F8 +9108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni4238 +ENCODING 16952 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1004 +1F24 +2214 +7F84 +A4A4 +3F94 +2486 +3FBC +2484 +2484 +4284 +8104 +ENDCHAR +STARTCHAR uni4239 +ENCODING 16953 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFE +4802 +8BF4 +1080 +33F8 +5208 +9208 +13F8 +1208 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni423A +ENCODING 16954 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1040 +10FC +2488 +7D50 +0820 +10D8 +2706 +7C60 +0010 +54C0 +5430 +8008 +ENDCHAR +STARTCHAR uni423B +ENCODING 16955 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0028 +7824 +4BFE +4820 +79FC +4924 +49FC +7924 +49FC +4924 +4924 +990C +ENDCHAR +STARTCHAR uni423C +ENCODING 16956 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +5090 +8A08 +0100 +7FFE +4202 +8924 +2848 +4994 +0E10 +77F0 +0100 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni423D +ENCODING 16957 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +7FFC +0820 +0FE0 +0100 +3FF8 +2108 +3FF8 +0100 +7FFC +0100 +FFFE +ENDCHAR +STARTCHAR uni423E +ENCODING 16958 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1020 +1124 +FCA8 +1020 +31FC +3904 +55FC +9104 +11FC +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni423F +ENCODING 16959 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFC +4004 +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni4240 +ENCODING 16960 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0080 +3FFC +2220 +2220 +3FFC +2220 +2220 +23E0 +2000 +4A48 +4924 +9124 +ENDCHAR +STARTCHAR uni4241 +ENCODING 16961 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0010 +FF90 +2228 +3E44 +2292 +3E08 +227C +2384 +FE08 +0230 +0208 +0204 +ENDCHAR +STARTCHAR uni4242 +ENCODING 16962 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +9FF0 +1110 +1FF0 +1110 +1FF0 +0400 +0820 +1FC0 +0310 +3FF8 +1120 +2510 +4208 +ENDCHAR +STARTCHAR uni4243 +ENCODING 16963 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0440 +247C +24A8 +3D50 +0428 +0448 +7DFE +2488 +2448 +2448 +4408 +8418 +ENDCHAR +STARTCHAR uni4244 +ENCODING 16964 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7840 +4BF8 +5040 +67FC +5110 +4A88 +4CF4 +6910 +52A0 +4040 +41B0 +4E0E +ENDCHAR +STARTCHAR uni4245 +ENCODING 16965 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +9548 +1040 +7C40 +11F8 +FE48 +4448 +28C8 +7C48 +10AA +FEAA +1106 +1202 +ENDCHAR +STARTCHAR uni4246 +ENCODING 16966 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFC +1000 +1FFC +4924 +8494 +0008 +ENDCHAR +STARTCHAR uni4247 +ENCODING 16967 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +9508 +1104 +7FC4 +1124 +1F24 +1124 +1F24 +1124 +7FE4 +2924 +3084 +2014 +3FC8 +ENDCHAR +STARTCHAR uni4248 +ENCODING 16968 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2420 +7E20 +243E +FF44 +00A4 +7E24 +4228 +7E28 +4210 +7E28 +4244 +4682 +ENDCHAR +STARTCHAR uni4249 +ENCODING 16969 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2000 +3E1C +44E8 +7EA8 +AAA8 +3EA8 +2AA8 +3EA8 +2AA4 +2B54 +2B74 +4612 +ENDCHAR +STARTCHAR uni424A +ENCODING 16970 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +5510 +8820 +1FF0 +0210 +FFFE +0920 +3FF8 +D116 +1FF0 +1110 +1FF0 +0100 +7FFC +0100 +ENDCHAR +STARTCHAR uni424B +ENCODING 16971 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +11FC +1124 +FDFC +2500 +257C +4944 +297C +1144 +297C +4644 +827C +0444 +ENDCHAR +STARTCHAR uni424C +ENCODING 16972 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7890 +4BFC +4880 +5144 +5668 +48B0 +4928 +4E68 +68A4 +5122 +46A0 +4040 +ENDCHAR +STARTCHAR uni424D +ENCODING 16973 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7C7C +4444 +7C7C +4444 +7D7C +4084 +4A24 +4A14 +5254 +41C4 +4014 +4008 +ENDCHAR +STARTCHAR uni424E +ENCODING 16974 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1110 +0920 +3FFC +2004 +4FE8 +0820 +0FE0 +0100 +7FFC +0540 +1930 +610C +ENDCHAR +STARTCHAR uni424F +ENCODING 16975 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1000 +1EFC +2224 +7F44 +A99C +3F50 +297C +3F90 +29FE +2910 +4510 +8210 +ENDCHAR +STARTCHAR uni4250 +ENCODING 16976 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1020 +FE20 +1020 +7DFC +5420 +7C20 +54F8 +7C88 +1088 +FE88 +10F8 +1088 +ENDCHAR +STARTCHAR uni4251 +ENCODING 16977 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1000 +3FFC +4AA0 +0AA0 +7FFC +0AA0 +0AA0 +7FFC +0000 +2488 +2244 +4244 +ENDCHAR +STARTCHAR uni4252 +ENCODING 16978 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +80F8 +3F00 +1110 +0920 +FFFE +0920 +3018 +DFF6 +1110 +1FF0 +1110 +1FF0 +1010 +ENDCHAR +STARTCHAR uni4253 +ENCODING 16979 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1000 +11FC +1124 +FDFC +3124 +39FC +5420 +53FE +90A8 +1124 +1222 +1020 +ENDCHAR +STARTCHAR uni4254 +ENCODING 16980 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +5090 +8808 +0090 +0088 +FBFE +2048 +3C32 +45CE +4890 +A888 +13FE +1048 +2032 +C1CE +ENDCHAR +STARTCHAR uni4255 +ENCODING 16981 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +0440 +3FF8 +2928 +2548 +3FF8 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni4256 +ENCODING 16982 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0810 +7F10 +0828 +7F44 +4992 +7F08 +497C +7F04 +0808 +FFB0 +0808 +0804 +ENDCHAR +STARTCHAR uni4257 +ENCODING 16983 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +11F8 +1108 +FDF8 +1000 +13FC +1108 +1DF8 +F108 +11F8 +110E +57F8 +2008 +ENDCHAR +STARTCHAR uni4258 +ENCODING 16984 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1040 +1020 +13FE +FA02 +14FC +3000 +39FE +5420 +50A8 +9124 +12A2 +1040 +ENDCHAR +STARTCHAR uni4259 +ENCODING 16985 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +BFF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +3FF8 +0000 +FFFE +1010 +3FF8 +ENDCHAR +STARTCHAR uni425A +ENCODING 16986 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3FF8 +2448 +3FF8 +0000 +7FFE +4002 +BFF4 +0800 +0FE0 +1124 +16A4 +181C +ENDCHAR +STARTCHAR uni425B +ENCODING 16987 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +8400 +3FF8 +2928 +2548 +2FE8 +2548 +2828 +0100 +FFFE +0280 +0C60 +3018 +C006 +ENDCHAR +STARTCHAR uni425C +ENCODING 16988 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +20A0 +2090 +7DFE +9120 +1320 +11FC +FD20 +11FC +2920 +2520 +41FE +8100 +ENDCHAR +STARTCHAR uni425D +ENCODING 16989 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +9518 +0820 +3FF8 +0100 +7FFC +0240 +3C50 +0848 +FFFE +0850 +7E24 +0854 +198C +ENDCHAR +STARTCHAR uni425E +ENCODING 16990 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0028 +3FFE +2020 +2FA4 +2028 +2F90 +48AA +4FC6 +8282 +0900 +2828 +47E4 +ENDCHAR +STARTCHAR uni425F +ENCODING 16991 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +8120 +11FC +1320 +FDF8 +1120 +15F8 +1920 +31F8 +D100 +13F8 +1110 +50E0 +271E +ENDCHAR +STARTCHAR uni4260 +ENCODING 16992 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2220 +4AA0 +8ABE +1FC4 +20A4 +6F24 +A028 +2F28 +2910 +29A8 +2944 +3082 +ENDCHAR +STARTCHAR uni4261 +ENCODING 16993 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +FFFE +0000 +3FF8 +2008 +27C8 +2448 +3FF8 +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni4262 +ENCODING 16994 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +8100 +7FFC +1110 +2928 +FFFE +0000 +3FF8 +2008 +27C8 +2448 +27C8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni4263 +ENCODING 16995 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +8200 +1CF0 +1010 +1EF0 +1010 +1FF0 +0800 +1FFC +2004 +4924 +2494 +2494 +4008 +ENDCHAR +STARTCHAR uni4264 +ENCODING 16996 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7F7E +48A8 +9220 +547E +FE44 +54A4 +9324 +1028 +FF18 +2410 +6428 +1844 +E682 +ENDCHAR +STARTCHAR uni4265 +ENCODING 16997 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8548 +11FE +1122 +FD7A +118A +1552 +1922 +3152 +D1FE +1040 +12A4 +528A +247A +ENDCHAR +STARTCHAR uni4266 +ENCODING 16998 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +8FF8 +4140 +2FF8 +2948 +0FF8 +E100 +2FFC +2410 +2BE8 +3224 +23E0 +5208 +8FFE +ENDCHAR +STARTCHAR uni4267 +ENCODING 16999 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +F784 +4284 +62A4 +54A4 +69A4 +1424 +2224 +DD24 +0824 +7F24 +4A04 +2F94 +F008 +ENDCHAR +STARTCHAR uni4268 +ENCODING 17000 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +9000 +0878 +7F48 +2248 +1486 +7F00 +10FC +6944 +1644 +6D28 +1490 +6428 +18C6 +ENDCHAR +STARTCHAR uni4269 +ENCODING 17001 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1000 +13FE +1200 +FE7C +1244 +327C +3A00 +56EE +52AA +92EE +1200 +13FE +ENDCHAR +STARTCHAR uni426A +ENCODING 17002 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3FF8 +2108 +3FF8 +2108 +3FF8 +0000 +FEFE +9292 +FEFE +9292 +FEFE +8282 +ENDCHAR +STARTCHAR uni426B +ENCODING 17003 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +8640 +387C +0894 +7E24 +1C44 +2A94 +4908 +02C0 +1D30 +E92E +0540 +0920 +1310 +ENDCHAR +STARTCHAR uni426C +ENCODING 17004 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +8080 +3FFE +2020 +2F28 +3110 +2A0A +277C +294A +3784 +2878 +4F48 +4130 +874C +ENDCHAR +STARTCHAR uni426D +ENCODING 17005 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +9084 +2108 +1084 +3FF8 +2448 +2388 +2448 +3FF8 +2948 +2528 +294A +2526 +3182 +ENDCHAR +STARTCHAR uni426E +ENCODING 17006 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +FC7C +4444 +7C7C +4444 +7D7C +4484 +4FE4 +5904 +4FC4 +4904 +4FC4 +4904 +4FEC +ENDCHAR +STARTCHAR uni426F +ENCODING 17007 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +BF7C +2444 +3F28 +2110 +3F28 +2446 +3FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni4270 +ENCODING 17008 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +BE20 +2210 +3AFE +2A00 +7F28 +4144 +3E82 +2228 +3E28 +2210 +3E28 +2244 +2682 +ENDCHAR +STARTCHAR uni4271 +ENCODING 17009 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +A508 +1000 +03FE +FA00 +0A7C +1244 +2A7C +7200 +AAEE +2AAA +22EE +2200 +23FE +ENDCHAR +STARTCHAR uni4272 +ENCODING 17010 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +8000 +F7FC +1248 +17FC +FC46 +86EC +8554 +F6EC +1554 +16EC +1444 +5454 +2408 +ENDCHAR +STARTCHAR uni4273 +ENCODING 17011 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2044 +3E28 +44FE +FF10 +4910 +7F7C +4910 +7F10 +00FE +5510 +4A90 +8A90 +ENDCHAR +STARTCHAR uni4274 +ENCODING 17012 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFC +0000 +3EF8 +2288 +3EF8 +0440 +3FF8 +0440 +FFFE +0490 +1C60 +671C +ENDCHAR +STARTCHAR uni4275 +ENCODING 17013 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +9FF8 +1490 +1250 +1FF0 +0200 +FFFE +0AA0 +3458 +CFE6 +1550 +07C0 +04A0 +0670 +ENDCHAR +STARTCHAR uni4276 +ENCODING 17014 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +A448 +3F7E +64C8 +BF7E +2448 +3F7E +2448 +3F7E +2040 +1FF0 +0820 +07C0 +F83E +ENDCHAR +STARTCHAR uni4277 +ENCODING 17015 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1E78 +1248 +3FFC +2020 +2E20 +223C +3FC8 +2928 +2F28 +4990 +5F28 +8144 +ENDCHAR +STARTCHAR uni4278 +ENCODING 17016 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8808 +4110 +2788 +F83E +5394 +2008 +FBBE +2008 +739C +2288 +4388 +8288 +ENDCHAR +STARTCHAR uni4279 +ENCODING 17017 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +BFF8 +0100 +7FFE +4922 +8414 +3BB8 +2AA8 +3BB8 +0000 +7FFC +1110 +2928 +FFFE +ENDCHAR +STARTCHAR uni427A +ENCODING 17018 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +4AFC +2A20 +2C20 +0820 +FE20 +1820 +1C20 +2A20 +2A20 +4820 +8820 +0820 +09FE +0800 +ENDCHAR +STARTCHAR uni427B +ENCODING 17019 +BBX 15 16 0 -2 +BITMAP +1004 +101E +95F0 +5510 +5910 +1110 +FD10 +31FE +3910 +5510 +5510 +9108 +110A +114A +1186 +1102 +ENDCHAR +STARTCHAR uni427C +ENCODING 17020 +BBX 15 16 0 -2 +BITMAP +0804 +080E +4AF0 +2A80 +2C80 +0880 +FEFE +1888 +1C88 +2A88 +2A88 +4888 +8888 +0908 +0908 +0A08 +ENDCHAR +STARTCHAR uni427D +ENCODING 17021 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +9524 +54A4 +58A8 +1020 +FDFC +3020 +3820 +5420 +57FE +9020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni427E +ENCODING 17022 +BBX 15 16 0 -2 +BITMAP +0440 +0444 +7C78 +0440 +0442 +1C42 +E43E +0000 +1110 +0920 +7FFC +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni427F +ENCODING 17023 +BBX 15 16 0 -2 +BITMAP +1008 +103C +95E0 +5420 +5924 +10A4 +FCA8 +3020 +39FE +5420 +5420 +9020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni4280 +ENCODING 17024 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +9420 +5420 +5BFE +1020 +FC20 +3020 +39FC +5504 +5504 +9104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni4281 +ENCODING 17025 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +9520 +55FC +5920 +1220 +FC20 +33FE +3890 +5490 +5490 +9090 +1112 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni4282 +ENCODING 17026 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +97FE +5420 +5820 +11FC +FD24 +3124 +3924 +552C +5470 +90A8 +1124 +1622 +1020 +1020 +ENDCHAR +STARTCHAR uni4283 +ENCODING 17027 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2404 +AC04 +75F4 +2444 +FC44 +25F4 +7554 +6D54 +AD54 +2554 +2574 +2446 +2446 +2842 +ENDCHAR +STARTCHAR uni4284 +ENCODING 17028 +BBX 15 15 0 -2 +BITMAP +7DF0 +1110 +1190 +1152 +1D12 +E20E +4400 +1110 +0920 +7FFC +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni4285 +ENCODING 17029 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +94FC +5504 +5A88 +1050 +FC20 +3040 +3880 +55FC +5684 +9084 +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni4286 +ENCODING 17030 +BBX 15 16 0 -2 +BITMAP +0400 +3878 +2008 +2008 +3C78 +2008 +2008 +3FF8 +0000 +1110 +0920 +7FFC +0540 +0920 +3118 +C106 +ENDCHAR +STARTCHAR uni4287 +ENCODING 17031 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +95FE +5420 +5820 +11FC +FD24 +3124 +39FC +5524 +5524 +91FC +1124 +1124 +1124 +110C +ENDCHAR +STARTCHAR uni4288 +ENCODING 17032 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +94FE +5500 +5AFC +1084 +FCA4 +3094 +3BFE +5484 +5524 +9114 +11FE +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni4289 +ENCODING 17033 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +95FC +5504 +5A28 +1020 +FC20 +31FC +3870 +5468 +54A8 +90A4 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni428A +ENCODING 17034 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +9504 +5504 +59FC +1100 +FD1C +3170 +391C +5570 +551E +91F0 +1110 +1112 +1112 +120E +ENDCHAR +STARTCHAR uni428B +ENCODING 17035 +BBX 15 16 0 -2 +BITMAP +1048 +1148 +9548 +5548 +5948 +11C8 +FC7E +3048 +3BC8 +5548 +5548 +9148 +1148 +1148 +125C +1440 +ENDCHAR +STARTCHAR uni428C +ENCODING 17036 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +9410 +55FE +5900 +1148 +FD4A +314A +396C +5548 +5548 +914A +114A +126A +1246 +1400 +ENDCHAR +STARTCHAR uni428D +ENCODING 17037 +BBX 15 16 0 -2 +BITMAP +0C80 +70FC +1124 +FD24 +1224 +3844 +5484 +9128 +1010 +1110 +0920 +7FFC +0540 +0920 +3118 +C106 +ENDCHAR +STARTCHAR uni428E +ENCODING 17038 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +94A8 +5420 +59FC +1040 +FDFE +3088 +3904 +56FA +5488 +9088 +10A8 +1092 +1082 +107E +ENDCHAR +STARTCHAR uni428F +ENCODING 17039 +BBX 15 16 0 -2 +BITMAP +1020 +10A4 +94A4 +5528 +5850 +1088 +FD04 +3024 +3820 +54A8 +54A8 +9130 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni4290 +ENCODING 17040 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +9504 +5504 +59FC +1104 +FD04 +31FC +3800 +5512 +55D4 +9118 +1110 +1152 +1192 +110E +ENDCHAR +STARTCHAR uni4291 +ENCODING 17041 +BBX 14 16 0 -2 +BITMAP +1020 +1124 +94A4 +54A8 +5820 +11FC +FD04 +3104 +3974 +5554 +5554 +9154 +1174 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni4292 +ENCODING 17042 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +9480 +55FE +5910 +1310 +FDFC +3110 +3910 +55FC +5510 +9110 +1110 +11FE +1100 +1100 +ENDCHAR +STARTCHAR uni4293 +ENCODING 17043 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +9504 +5504 +59FC +1104 +FD04 +31FC +3800 +57FE +5420 +9120 +113C +1120 +12A0 +147E +ENDCHAR +STARTCHAR uni4294 +ENCODING 17044 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +23FE +A888 +70A8 +2020 +F9FC +2124 +7124 +6924 +ABFE +2020 +2050 +2088 +2104 +2202 +ENDCHAR +STARTCHAR uni4295 +ENCODING 17045 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +207C +AB14 +71FE +2114 +FA7C +2210 +777C +6910 +A9FE +2510 +2210 +2300 +24FE +2800 +ENDCHAR +STARTCHAR uni4296 +ENCODING 17046 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +23FE +A820 +7020 +23FE +FA8A +2252 +72FA +6A22 +AA22 +22FA +2222 +2222 +222A +2204 +ENDCHAR +STARTCHAR uni4297 +ENCODING 17047 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +95FC +5504 +59FC +1104 +FDFC +3000 +3BFE +5420 +5420 +91FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni4298 +ENCODING 17048 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +95FE +5522 +59FE +1122 +FDFE +3000 +38FC +5484 +54FC +9084 +10FC +1084 +1094 +1088 +ENDCHAR +STARTCHAR uni4299 +ENCODING 17049 +BBX 15 15 0 -2 +BITMAP +FDFE +2048 +4048 +7DFE +C448 +4488 +7D08 +0008 +1110 +0920 +7FFC +0540 +0920 +3118 +C106 +ENDCHAR +STARTCHAR uni429A +ENCODING 17050 +BBX 15 16 0 -2 +BITMAP +2010 +2220 +217C +A944 +7044 +207C +FB40 +2140 +717C +6944 +A944 +217C +2144 +2280 +247E +2000 +ENDCHAR +STARTCHAR uni429B +ENCODING 17051 +BBX 15 16 0 -2 +BITMAP +2000 +245C +2294 +A914 +7294 +2454 +F926 +2100 +77DC +6914 +AD94 +2554 +2948 +2108 +2514 +2222 +ENDCHAR +STARTCHAR uni429C +ENCODING 17052 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +9420 +55FC +5924 +11FC +FD24 +31FC +3822 +57FE +5408 +93FE +1108 +1088 +1028 +1010 +ENDCHAR +STARTCHAR uni429D +ENCODING 17053 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +9420 +5524 +58A8 +13FE +FC70 +30A8 +3924 +5622 +5440 +9024 +12A2 +128A +1488 +1078 +ENDCHAR +STARTCHAR uni429E +ENCODING 17054 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +A888 +7050 +23FE +FA22 +22FA +7222 +6AFA +AA8A +228A +22FA +2202 +220A +2204 +ENDCHAR +STARTCHAR uni429F +ENCODING 17055 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +23FE +A888 +7088 +20F8 +F820 +23FE +7222 +6B32 +AAAA +2376 +2222 +2222 +222A +2224 +ENDCHAR +STARTCHAR uni42A0 +ENCODING 17056 +BBX 15 16 0 -2 +BITMAP +7DFC +4420 +7D20 +45FE +7C50 +4852 +5492 +650E +1110 +0920 +7FFC +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni42A1 +ENCODING 17057 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +9508 +55F8 +5908 +11F8 +FC00 +33FC +3A94 +57FC +5400 +91F8 +1090 +1060 +1198 +1606 +ENDCHAR +STARTCHAR uni42A2 +ENCODING 17058 +BBX 15 16 0 -2 +BITMAP +0440 +247C +24A8 +3D50 +0428 +7DFE +2488 +4448 +8418 +1110 +0920 +7FFC +0540 +0920 +3118 +C106 +ENDCHAR +STARTCHAR uni42A3 +ENCODING 17059 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +95FC +5488 +5888 +13FE +FC20 +31FC +3924 +55FC +5524 +91FC +1000 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni42A4 +ENCODING 17060 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +9450 +57FE +5A52 +13FE +FC00 +31FC +3904 +55FC +5504 +91FC +1020 +13FE +1020 +1020 +ENDCHAR +STARTCHAR uni42A5 +ENCODING 17061 +BBX 15 16 0 -2 +BITMAP +2020 +21FC +2024 +ABFE +7024 +21FC +F820 +22AA +73AE +6A22 +ABFE +2222 +23AE +22AA +22AA +2422 +ENDCHAR +STARTCHAR uni42A6 +ENCODING 17062 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +9420 +55FC +5800 +13FE +FE02 +31FC +3800 +55FC +5504 +91FC +1104 +1088 +13FE +1000 +ENDCHAR +STARTCHAR uni42A7 +ENCODING 17063 +BBX 15 16 0 -2 +BITMAP +2090 +27FC +2094 +ABFC +7290 +23FE +F912 +23FA +750E +69F8 +A908 +21F8 +2108 +21F8 +2090 +2108 +ENDCHAR +STARTCHAR uni42A8 +ENCODING 17064 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +2000 +3FF8 +0000 +3FF8 +2008 +3FF8 +0100 +755C +5394 +77D4 +5114 +7396 +5556 +B122 +ENDCHAR +STARTCHAR uni42A9 +ENCODING 17065 +BBX 15 16 0 -2 +BITMAP +103C +13E0 +9524 +54A8 +5BFE +10A8 +FD24 +3202 +39FC +5524 +5524 +91FC +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni42AA +ENCODING 17066 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +97FE +5488 +59FC +1124 +FDFC +3124 +39FC +5420 +57FE +9222 +122A +12FA +120A +1206 +ENDCHAR +STARTCHAR uni42AB +ENCODING 17067 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2294 +AA94 +73FC +2000 +F890 +279E +7090 +6890 +AB9C +2090 +2090 +279E +2090 +2090 +ENDCHAR +STARTCHAR uni42AC +ENCODING 17068 +BBX 15 16 0 -2 +BITMAP +0DFC +7124 +11FC +1124 +FDFC +3020 +3BFE +54A8 +5124 +8222 +1110 +0920 +7FFC +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni42AD +ENCODING 17069 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +9420 +55FC +5800 +13FE +FC02 +31FC +3820 +57FE +5400 +93FE +1004 +13BE +12A4 +138C +ENDCHAR +STARTCHAR uni42AE +ENCODING 17070 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2042 +AA52 +714A +2252 +F890 +2108 +73FE +6D10 +A9FE +2110 +21FE +2110 +21FE +2100 +ENDCHAR +STARTCHAR uni42AF +ENCODING 17071 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +95FE +5528 +597C +1128 +FDFE +3110 +397C +5554 +557C +9154 +117C +1200 +1244 +1482 +ENDCHAR +STARTCHAR uni42B0 +ENCODING 17072 +BBX 15 16 0 -2 +BITMAP +2210 +2110 +203A +AB92 +7014 +23BE +F808 +2390 +703C +6BE4 +AAA4 +22BC +22A4 +23A4 +22BC +2024 +ENDCHAR +STARTCHAR uni42B1 +ENCODING 17073 +BBX 15 16 0 -2 +BITMAP +2148 +214C +22AA +A808 +77FE +2148 +FB68 +214A +736A +694C +AB6C +2148 +216A +239A +2026 +2042 +ENDCHAR +STARTCHAR uni42B2 +ENCODING 17074 +BBX 15 16 0 -2 +BITMAP +0010 +FE08 +28FE +FE00 +AA44 +AA28 +FEFE +1088 +54A8 +38BE +FEC8 +1088 +38BE +5508 +9108 +127E +ENDCHAR +STARTCHAR uni42B3 +ENCODING 17075 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +2248 +ABFE +7248 +22EC +FB5A +2248 +7250 +6BDE +AA50 +23DC +2250 +25DE +2450 +2850 +ENDCHAR +STARTCHAR uni42B4 +ENCODING 17076 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +94EE +5554 +5A22 +1050 +FC88 +3174 +3A02 +55DC +5554 +91DC +1088 +1088 +1154 +1222 +ENDCHAR +STARTCHAR uni42B5 +ENCODING 17077 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2040 +2440 +45F8 +F848 +1048 +2048 +4848 +FC48 +0448 +004A +548A +548A +8106 +0200 +ENDCHAR +STARTCHAR uni42B6 +ENCODING 17078 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +2020 +2520 +452C +F934 +1164 +23A4 +4924 +FD34 +0528 +0122 +5522 +5502 +80FE +ENDCHAR +STARTCHAR uni42B7 +ENCODING 17079 +BBX 15 16 0 -2 +BITMAP +0808 +0808 +1008 +1208 +22FE +7C08 +0818 +1018 +2428 +7E28 +0248 +0088 +5208 +4908 +8928 +0010 +ENDCHAR +STARTCHAR uni42B8 +ENCODING 17080 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2000 +2400 +4400 +FBFE +1040 +2040 +4880 +FCFC +0404 +0004 +5404 +5404 +8028 +0010 +ENDCHAR +STARTCHAR uni42B9 +ENCODING 17081 +BBX 15 16 0 -2 +BITMAP +1008 +103C +21E0 +2420 +4420 +F820 +1020 +23FE +4820 +FC20 +0420 +0020 +5420 +5420 +8020 +0020 +ENDCHAR +STARTCHAR uni42BA +ENCODING 17082 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +2040 +2440 +4440 +F87C +1084 +2084 +4884 +FD04 +05FC +0008 +5408 +5408 +81FE +ENDCHAR +STARTCHAR uni42BB +ENCODING 17083 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2040 +247E +4482 +F884 +1120 +2220 +4820 +FC50 +0450 +0048 +5488 +5484 +8102 +0200 +ENDCHAR +STARTCHAR uni42BC +ENCODING 17084 +BBX 15 15 0 -1 +BITMAP +1010 +1010 +2010 +2490 +4490 +F890 +109E +2090 +4890 +FC90 +0490 +0090 +5490 +5490 +83FE +ENDCHAR +STARTCHAR uni42BD +ENCODING 17085 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +25FC +4424 +F824 +1024 +2024 +4BFE +FC20 +0450 +0050 +5488 +5488 +8104 +0202 +ENDCHAR +STARTCHAR uni42BE +ENCODING 17086 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +2420 +45FE +F820 +1070 +2070 +48A8 +FCA8 +0524 +0124 +5622 +5420 +8020 +0020 +ENDCHAR +STARTCHAR uni42BF +ENCODING 17087 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +2420 +45FC +F820 +1020 +2020 +4BFE +FC20 +0450 +0050 +5488 +5488 +8104 +0202 +ENDCHAR +STARTCHAR uni42C0 +ENCODING 17088 +BBX 14 16 0 -2 +BITMAP +0100 +0080 +3FFC +2004 +3FFC +2080 +2110 +23E0 +2040 +2088 +27FC +2044 +4250 +4448 +8944 +0080 +ENDCHAR +STARTCHAR uni42C1 +ENCODING 17089 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2000 +25FC +4400 +F800 +10F0 +2090 +4890 +FC90 +0490 +0092 +5492 +5512 +810E +0200 +ENDCHAR +STARTCHAR uni42C2 +ENCODING 17090 +BBX 15 16 0 -2 +BITMAP +0804 +0844 +1028 +1210 +2228 +7C44 +0880 +1004 +2444 +7E44 +0228 +0028 +5210 +4928 +8944 +0082 +ENDCHAR +STARTCHAR uni42C3 +ENCODING 17091 +BBX 15 16 0 -2 +BITMAP +1008 +103C +21E0 +2420 +4420 +F83C +11E0 +2020 +4820 +FC3E +07E0 +0020 +5422 +5422 +8022 +001E +ENDCHAR +STARTCHAR uni42C4 +ENCODING 17092 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +2104 +2504 +4594 +F954 +1154 +2124 +4924 +FD54 +0554 +0194 +5504 +5504 +8114 +0108 +ENDCHAR +STARTCHAR uni42C5 +ENCODING 17093 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +2090 +2490 +44FE +F890 +1110 +2010 +4810 +FDFE +0410 +0010 +5410 +5410 +8010 +0010 +ENDCHAR +STARTCHAR uni42C6 +ENCODING 17094 +BBX 15 15 1 -1 +BITMAP +1000 +21FE +4400 +2800 +10FE +2482 +4C82 +F282 +12FE +5080 +5480 +9280 +9100 +1100 +1200 +ENDCHAR +STARTCHAR uni42C7 +ENCODING 17095 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2104 +2504 +4504 +F904 +11FC +2120 +4920 +FD20 +0520 +0110 +5510 +5508 +8204 +0402 +ENDCHAR +STARTCHAR uni42C8 +ENCODING 17096 +BBX 14 16 1 -2 +BITMAP +1000 +FEF8 +2288 +6450 +1820 +2450 +C68C +0840 +3F80 +0300 +0C20 +7FF0 +0210 +2240 +4A20 +8410 +ENDCHAR +STARTCHAR uni42C9 +ENCODING 17097 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2020 +2BFE +4A02 +F404 +1000 +2090 +4890 +FC90 +0488 +0108 +5508 +5504 +8204 +0402 +ENDCHAR +STARTCHAR uni42CA +ENCODING 17098 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +21FE +2410 +4410 +F810 +1090 +2090 +489E +FC90 +0490 +0090 +5490 +5490 +83FE +ENDCHAR +STARTCHAR uni42CB +ENCODING 17099 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2104 +2504 +4504 +F9FC +1120 +2120 +49FE +FD20 +0520 +0110 +5512 +554A +8186 +0102 +ENDCHAR +STARTCHAR uni42CC +ENCODING 17100 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +2100 +2500 +4500 +F9FC +1104 +2104 +4904 +FD04 +05FC +0100 +5500 +5500 +81FE +ENDCHAR +STARTCHAR uni42CD +ENCODING 17101 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +21FE +2408 +4408 +F9E8 +1128 +2128 +4928 +FD28 +05E8 +0128 +5408 +5408 +8028 +0010 +ENDCHAR +STARTCHAR uni42CE +ENCODING 17102 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +21FC +2504 +4504 +F904 +11FC +2104 +4904 +FD04 +05FC +0104 +5400 +5400 +83FE +ENDCHAR +STARTCHAR uni42CF +ENCODING 17103 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +2080 +24FE +4540 +F940 +1240 +207C +4840 +FC40 +0440 +007C +5440 +5440 +8040 +0040 +ENDCHAR +STARTCHAR uni42D0 +ENCODING 17104 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +2024 +2820 +4BFE +F220 +1224 +2224 +4A24 +FA28 +0A28 +0290 +AB12 +AA2A +8046 +0082 +ENDCHAR +STARTCHAR uni42D1 +ENCODING 17105 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2020 +2420 +4420 +F9FE +1122 +2122 +4952 +FD4A +058A +0102 +5502 +5502 +810A +0104 +ENDCHAR +STARTCHAR uni42D2 +ENCODING 17106 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +2008 +2450 +4420 +F810 +13FE +2062 +48A4 +FCA0 +0520 +0220 +5420 +5420 +80A0 +0040 +ENDCHAR +STARTCHAR uni42D3 +ENCODING 17107 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +20F8 +2508 +4610 +FC20 +11FC +2004 +4804 +FC04 +05FC +0004 +5404 +5404 +81FC +0004 +ENDCHAR +STARTCHAR uni42D4 +ENCODING 17108 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +2010 +2410 +4420 +F820 +1068 +20A4 +4922 +FE22 +0420 +0020 +5420 +5400 +83FE +ENDCHAR +STARTCHAR uni42D5 +ENCODING 17109 +BBX 14 16 0 -2 +BITMAP +0818 +13E0 +3040 +57FC +9040 +13F8 +0200 +0420 +1FC0 +0180 +0610 +3FF8 +0108 +1120 +2510 +4208 +ENDCHAR +STARTCHAR uni42D6 +ENCODING 17110 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +45FC +2824 +11FE +2424 +4DFC +F220 +13FC +5020 +5820 +97FE +9420 +1020 +1020 +ENDCHAR +STARTCHAR uni42D7 +ENCODING 17111 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +2120 +2520 +4520 +F9FC +1104 +2104 +4904 +FD04 +05FC +0120 +5520 +5520 +81FE +ENDCHAR +STARTCHAR uni42D8 +ENCODING 17112 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2820 +4820 +F1FC +1020 +2020 +4BFE +F870 +08A8 +00A8 +A924 +AA22 +8420 +0020 +ENDCHAR +STARTCHAR uni42D9 +ENCODING 17113 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2108 +2508 +4508 +F9F8 +1108 +2108 +49F8 +FD08 +0508 +011E +57E8 +5408 +8008 +0008 +ENDCHAR +STARTCHAR uni42DA +ENCODING 17114 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +2042 +2842 +4A52 +F14A +114A +2042 +48C6 +F94A +0A52 +0042 +A842 +A842 +814A +0084 +ENDCHAR +STARTCHAR uni42DB +ENCODING 17115 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2124 +24A4 +44A8 +F820 +1020 +23FE +4870 +FCA8 +04A8 +0124 +5524 +5622 +8020 +0020 +ENDCHAR +STARTCHAR uni42DC +ENCODING 17116 +BBX 15 16 0 -2 +BITMAP +1000 +08FC +3E44 +2228 +2210 +3E28 +2246 +4420 +9FC0 +0180 +0610 +3FF8 +0108 +1120 +2510 +4208 +ENDCHAR +STARTCHAR uni42DD +ENCODING 17117 +BBX 15 15 1 -1 +BITMAP +1042 +2242 +4522 +2924 +1104 +2408 +4C40 +F3FE +1288 +5088 +5908 +95D0 +9420 +1058 +1386 +ENDCHAR +STARTCHAR uni42DE +ENCODING 17118 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +2104 +2504 +4504 +F9AC +1154 +2154 +4954 +FD54 +05AC +0104 +5504 +5504 +8114 +0108 +ENDCHAR +STARTCHAR uni42DF +ENCODING 17119 +BBX 15 15 0 -1 +BITMAP +1000 +11F8 +2008 +2408 +45F8 +F900 +1104 +2104 +48FC +FC40 +0420 +00A4 +AA8A +AA8A +8478 +ENDCHAR +STARTCHAR uni42E0 +ENCODING 17120 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +21FE +2420 +4420 +F9FC +1124 +2124 +49FC +FD24 +0524 +01FC +5524 +5524 +8124 +010C +ENDCHAR +STARTCHAR uni42E1 +ENCODING 17121 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2050 +2888 +4904 +F2FA +1020 +2020 +4BFE +F820 +0928 +0124 +AA22 +AC22 +80A0 +0040 +ENDCHAR +STARTCHAR uni42E2 +ENCODING 17122 +BBX 14 16 1 -2 +BITMAP +1018 +11E0 +FD00 +1100 +1DFC +F110 +1110 +5210 +2C90 +1100 +3E00 +0420 +7FF0 +0210 +2A40 +4420 +ENDCHAR +STARTCHAR uni42E3 +ENCODING 17123 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +3F24 +4044 +BEF8 +2210 +3220 +2A44 +FF7E +2212 +5210 +4A54 +7F52 +0292 +1450 +0820 +ENDCHAR +STARTCHAR uni42E4 +ENCODING 17124 +BBX 14 16 0 -2 +BITMAP +0840 +0840 +7F40 +087C +3E84 +0884 +FF04 +1044 +2224 +7C24 +0904 +FF84 +0884 +4904 +A8A8 +1010 +ENDCHAR +STARTCHAR uni42E5 +ENCODING 17125 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +2124 +2524 +45FC +F924 +1124 +21FC +4820 +FC20 +05FC +0020 +5420 +5420 +83FE +ENDCHAR +STARTCHAR uni42E6 +ENCODING 17126 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +20FE +2500 +46FC +F884 +10A4 +2094 +49FE +FC84 +0524 +0114 +55FE +5404 +8028 +0010 +ENDCHAR +STARTCHAR uni42E7 +ENCODING 17127 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2104 +2504 +45FC +F910 +1110 +21FE +4910 +FD10 +057C +0144 +5544 +5544 +817C +0244 +ENDCHAR +STARTCHAR uni42E8 +ENCODING 17128 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +21FC +2400 +4508 +F890 +1000 +23FE +4800 +FC00 +05FC +0104 +5504 +5504 +81FC +0104 +ENDCHAR +STARTCHAR uni42E9 +ENCODING 17129 +BBX 15 16 0 -2 +BITMAP +1000 +1040 +239C +2A04 +4A04 +F39C +1204 +2204 +4BFC +FC90 +0490 +0090 +5490 +5512 +8212 +040E +ENDCHAR +STARTCHAR uni42EA +ENCODING 17130 +BBX 15 16 0 -2 +BITMAP +2000 +277E +4504 +4504 +9574 +E554 +2654 +4554 +9554 +F554 +0574 +1554 +AE04 +A404 +8414 +0408 +ENDCHAR +STARTCHAR uni42EB +ENCODING 17131 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +20F8 +2508 +4610 +F9FC +1024 +2024 +49FE +FC24 +0424 +01FC +5424 +5420 +80A0 +0040 +ENDCHAR +STARTCHAR uni42EC +ENCODING 17132 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +2040 +2840 +4BFE +F0A0 +1110 +2208 +4C46 +F840 +0848 +0264 +AA52 +AC52 +8140 +0080 +ENDCHAR +STARTCHAR uni42ED +ENCODING 17133 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2880 +4904 +F3FE +1002 +21FC +4904 +FDFC +0504 +01FC +5504 +5504 +8114 +0108 +ENDCHAR +STARTCHAR uni42EE +ENCODING 17134 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +2050 +2488 +4504 +FA02 +10F8 +2020 +4820 +FDFC +0420 +0124 +54A4 +54A8 +83FE +ENDCHAR +STARTCHAR uni42EF +ENCODING 17135 +BBX 15 16 0 -2 +BITMAP +1048 +0844 +3E7E +23C0 +2224 +3E28 +2212 +206A +4446 +8882 +1F00 +0210 +3FF8 +0108 +1520 +2210 +ENDCHAR +STARTCHAR uni42F0 +ENCODING 17136 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +FFFE +1110 +2248 +CF86 +0220 +1FF0 +0948 +1320 +ENDCHAR +STARTCHAR uni42F1 +ENCODING 17137 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +2BFE +4820 +F124 +1124 +2124 +4AAA +F870 +08A8 +00A8 +A924 +AA22 +8420 +0020 +ENDCHAR +STARTCHAR uni42F2 +ENCODING 17138 +BBX 15 16 0 -2 +BITMAP +1000 +11F0 +2110 +2910 +49F0 +F040 +13F8 +2248 +4A48 +FBF8 +0A48 +0248 +ABFA +A842 +8042 +003E +ENDCHAR +STARTCHAR uni42F3 +ENCODING 17139 +BBX 15 16 0 -2 +BITMAP +1050 +1052 +23DC +2450 +44D2 +FB4E +1000 +21FC +4904 +FDFC +0504 +01FC +5504 +5504 +8114 +0108 +ENDCHAR +STARTCHAR uni42F4 +ENCODING 17140 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2048 +2430 +45FE +F852 +1094 +2110 +4A30 +FC20 +05FE +0070 +54A8 +5524 +8222 +0020 +ENDCHAR +STARTCHAR uni42F5 +ENCODING 17141 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2104 +25FC +4504 +F9FC +1080 +21FE +4A22 +FD22 +0552 +0102 +55FA +5402 +8014 +0008 +ENDCHAR +STARTCHAR uni42F6 +ENCODING 17142 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2020 +2440 +45FC +F904 +1104 +21FC +4904 +FDFC +0504 +0104 +55FC +5400 +8088 +0104 +ENDCHAR +STARTCHAR uni42F7 +ENCODING 17143 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +247E +18A4 +FF28 +2910 +4A28 +98C6 +0440 +0880 +1F00 +0210 +3FF8 +0108 +1520 +2210 +ENDCHAR +STARTCHAR uni42F8 +ENCODING 17144 +BBX 15 16 0 -2 +BITMAP +1008 +101C +21F0 +2510 +4510 +F9FE +1110 +217C +4944 +FD7C +0544 +017C +A944 +AA44 +827C +0444 +ENDCHAR +STARTCHAR uni42F9 +ENCODING 17145 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2000 +29FC +4904 +F104 +11FC +2000 +4BFE +FA22 +0A22 +03FE +AA22 +AA22 +83FE +0202 +ENDCHAR +STARTCHAR uni42FA +ENCODING 17146 +BBX 15 16 0 -2 +BITMAP +1088 +11C8 +2708 +2908 +492A +F12A +17AC +2148 +4B08 +FB88 +0D54 +0514 +A914 +A924 +8124 +0142 +ENDCHAR +STARTCHAR uni42FB +ENCODING 17147 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2820 +4820 +F3FE +128A +2252 +4AFA +FA22 +0A22 +02FA +AA22 +AA22 +822A +0204 +ENDCHAR +STARTCHAR uni42FC +ENCODING 17148 +BBX 15 15 0 -1 +BITMAP +1000 +11F8 +2088 +2490 +44FC +F954 +1124 +2154 +4A88 +FC00 +05FC +0154 +A954 +A954 +83FE +ENDCHAR +STARTCHAR uni42FD +ENCODING 17149 +BBX 15 16 0 -2 +BITMAP +2104 +2104 +4104 +47C4 +913E +E104 +27C4 +4024 +9114 +F114 +07C4 +1104 +A904 +A1C4 +8E14 +0408 +ENDCHAR +STARTCHAR uni42FE +ENCODING 17150 +BBX 15 16 0 -2 +BITMAP +1000 +1040 +23FE +2888 +4904 +F642 +10FC +2308 +48B0 +F8D0 +0F3E +00C2 +AB24 +A818 +8060 +0780 +ENDCHAR +STARTCHAR uni42FF +ENCODING 17151 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2124 +2924 +49FC +F124 +1124 +21FC +4800 +FBFE +0920 +0122 +A914 +A948 +8184 +0102 +ENDCHAR +STARTCHAR uni4300 +ENCODING 17152 +BBX 15 16 0 -2 +BITMAP +10C4 +1704 +2124 +2914 +4914 +F784 +1124 +2114 +4B94 +FB46 +0D3C +0504 +A904 +A904 +8104 +0104 +ENDCHAR +STARTCHAR uni4301 +ENCODING 17153 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2050 +2850 +4BFE +F252 +1252 +23FE +4800 +FC40 +07FE +0088 +5590 +5460 +80D8 +0304 +ENDCHAR +STARTCHAR uni4302 +ENCODING 17154 +BBX 15 15 1 -1 +BITMAP +1000 +23FC +4604 +2A04 +13FC +2200 +4EFE +F220 +124C +52F2 +5A10 +94FC +9410 +1410 +11FE +ENDCHAR +STARTCHAR uni4303 +ENCODING 17155 +BBX 15 16 0 -2 +BITMAP +1082 +1082 +22A2 +29CA +488A +F3EA +122A +222A +4BEA +FA2A +0A2A +03EA +AA22 +AA22 +82AA +0244 +ENDCHAR +STARTCHAR uni4304 +ENCODING 17156 +BBX 15 16 0 -2 +BITMAP +11FC +1020 +21FC +2524 +4554 +F904 +112C +2020 +483C +FC20 +05F8 +0088 +5450 +5420 +80D8 +0306 +ENDCHAR +STARTCHAR uni4305 +ENCODING 17157 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +21FE +2510 +457C +F914 +11FE +2114 +497C +FD10 +057C +0144 +A944 +AA44 +827C +0444 +ENDCHAR +STARTCHAR uni4306 +ENCODING 17158 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +23FC +2A24 +4A24 +F3FC +1224 +2244 +4BFC +F840 +08A8 +00B4 +A93C +A922 +8222 +041E +ENDCHAR +STARTCHAR uni4307 +ENCODING 17159 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2820 +4BFE +F242 +148C +21F0 +4820 +F844 +0BFE +0022 +A928 +AA24 +84A4 +0040 +ENDCHAR +STARTCHAR uni4308 +ENCODING 17160 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2104 +29FC +4904 +F1FC +1000 +23DE +4842 +FA52 +094A +00C6 +AB5A +A842 +814A +0084 +ENDCHAR +STARTCHAR uni4309 +ENCODING 17161 +BBX 15 15 0 -1 +BITMAP +1000 +13FE +2252 +2A52 +4BFE +F000 +1000 +23FE +4820 +F820 +093C +0120 +A920 +A920 +87FE +ENDCHAR +STARTCHAR uni430A +ENCODING 17162 +BBX 15 16 0 -2 +BITMAP +1008 +103C +23C0 +2804 +4A44 +F128 +11FC +2220 +4820 +FBFE +0820 +0124 +A924 +A924 +81FC +0004 +ENDCHAR +STARTCHAR uni430B +ENCODING 17163 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +23FE +2888 +4820 +F050 +1088 +2104 +4AFA +FC00 +0400 +01FC +5504 +5504 +81FC +0104 +ENDCHAR +STARTCHAR uni430C +ENCODING 17164 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +2042 +2A52 +494A +F252 +1042 +2020 +49FC +FD04 +0504 +01FC +5504 +5504 +81FC +0104 +ENDCHAR +STARTCHAR uni430D +ENCODING 17165 +BBX 15 15 0 -1 +BITMAP +1088 +1088 +23FE +2488 +44F8 +F820 +11FC +2124 +49FC +FC20 +05FC +0020 +55FC +5420 +83FE +ENDCHAR +STARTCHAR uni430E +ENCODING 17166 +BBX 14 16 1 -2 +BITMAP +0080 +F9F0 +AA90 +A860 +FB9C +A9F0 +A910 +F9F0 +0880 +1100 +3E00 +0420 +7FF0 +0210 +2A40 +4420 +ENDCHAR +STARTCHAR uni430F +ENCODING 17167 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2A42 +4828 +F294 +12AA +24CA +48F8 +FB00 +0820 +0124 +A924 +A924 +81FC +0004 +ENDCHAR +STARTCHAR uni4310 +ENCODING 17168 +BBX 15 16 0 -2 +BITMAP +100E +13F0 +2044 +2A24 +4908 +F3FC +1204 +23FC +4A04 +FBFC +0A04 +03FC +A890 +A910 +8212 +0C0E +ENDCHAR +STARTCHAR uni4311 +ENCODING 17169 +BBX 15 15 0 -1 +BITMAP +1000 +13DC +2294 +2BD4 +4A54 +F3C8 +1288 +2294 +4BE2 +F800 +0820 +01FC +A820 +A820 +83FE +ENDCHAR +STARTCHAR uni4312 +ENCODING 17170 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2250 +4A50 +FBFE +1252 +2252 +4BFE +FA00 +0A92 +12D4 +AA98 +A492 +84D2 +088E +ENDCHAR +STARTCHAR uni4313 +ENCODING 17171 +BBX 14 16 0 -2 +BITMAP +2078 +3F48 +404C +BE80 +2A78 +FF28 +4A10 +7F28 +0444 +0880 +1F00 +0210 +3FF8 +0108 +1520 +2210 +ENDCHAR +STARTCHAR uni4314 +ENCODING 17172 +BBX 15 15 0 -1 +BITMAP +1000 +13FE +2200 +2A7C +4A44 +F244 +127C +2200 +4AEE +FAAA +0AAA +02AA +AAEE +AA00 +83FE +ENDCHAR +STARTCHAR uni4315 +ENCODING 17173 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +47FE +4490 +9490 +E490 +27FC +4490 +94D8 +F5B8 +05B4 +16D4 +A892 +A890 +9090 +0090 +ENDCHAR +STARTCHAR uni4316 +ENCODING 17174 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +21FE +2B20 +49FC +F120 +11FC +2120 +49FE +FD00 +0420 +03FE +5470 +54A8 +8326 +0020 +ENDCHAR +STARTCHAR uni4317 +ENCODING 17175 +BBX 15 15 0 -1 +BITMAP +2100 +2100 +43FC +46A8 +9AA8 +E2A8 +27FC +42A8 +92A8 +F2A8 +0FFE +1000 +AAA8 +A254 +8454 +ENDCHAR +STARTCHAR uni4318 +ENCODING 17176 +BBX 14 16 1 -2 +BITMAP +1040 +9240 +547C +FE90 +9290 +BB50 +D620 +9250 +8A8C +1100 +3E00 +0420 +7FF0 +0210 +2A40 +4420 +ENDCHAR +STARTCHAR uni4319 +ENCODING 17177 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +21FC +2488 +4488 +FBFE +1020 +21FC +4924 +FDFC +0524 +01FC +5400 +5488 +8104 +0202 +ENDCHAR +STARTCHAR uni431A +ENCODING 17178 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2050 +2850 +4BFE +F252 +1252 +23FE +4924 +F8A8 +0BFE +0070 +A8A8 +A924 +8622 +0020 +ENDCHAR +STARTCHAR uni431B +ENCODING 17179 +BBX 15 16 0 -2 +BITMAP +1000 +1E0C +22F0 +5420 +2844 +10F8 +2810 +FF24 +00FE +7E12 +0050 +7E54 +0092 +7F12 +4250 +7E20 +ENDCHAR +STARTCHAR uni431C +ENCODING 17180 +BBX 15 16 0 -2 +BITMAP +1050 +1252 +2154 +2850 +4BFE +F088 +1050 +23FE +4820 +F9FC +0820 +03FE +A8A8 +A924 +8622 +0020 +ENDCHAR +STARTCHAR uni431D +ENCODING 17181 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +47BC +4110 +93B8 +E554 +2912 +4000 +93F8 +F000 +07FC +1040 +AA48 +A444 +8942 +0080 +ENDCHAR +STARTCHAR uni431E +ENCODING 17182 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2050 +2488 +4504 +FAFA +1000 +2000 +49DC +FD54 +0554 +01DC +5488 +5488 +8154 +0222 +ENDCHAR +STARTCHAR uni431F +ENCODING 17183 +BBX 15 16 0 -2 +BITMAP +1010 +13C8 +227E +2A40 +4A62 +F3D4 +1200 +223E +4BC8 +FA48 +0E7E +0248 +AA48 +ABC8 +8248 +0008 +ENDCHAR +STARTCHAR uni4320 +ENCODING 17184 +BBX 15 16 0 -2 +BITMAP +0290 +7FD0 +421E +5EA2 +4288 +5D08 +5548 +5ED4 +8462 +0880 +1F00 +0210 +3FF8 +0108 +1520 +2210 +ENDCHAR +STARTCHAR uni4321 +ENCODING 17185 +BBX 15 15 0 -1 +BITMAP +1090 +13FC +2294 +2BFC +4A94 +F3FC +1000 +23FC +4800 +FBFC +0A04 +03FC +A908 +A890 +87FE +ENDCHAR +STARTCHAR uni4322 +ENCODING 17186 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2020 +2BFE +4A22 +F1AC +1020 +21AC +4850 +F8C8 +0B26 +00F8 +A808 +A8D0 +8020 +0010 +ENDCHAR +STARTCHAR uni4323 +ENCODING 17187 +BBX 15 16 0 -2 +BITMAP +1108 +1108 +21EE +2A94 +4842 +F010 +11FE +2102 +48F8 +FC88 +04F8 +0080 +54FC +5484 +80FC +0084 +ENDCHAR +STARTCHAR uni4324 +ENCODING 17188 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +4248 +4444 +9FFE +E444 +26EC +4554 +96EC +F444 +06EC +1554 +AEEC +A444 +8454 +0408 +ENDCHAR +STARTCHAR uni4325 +ENCODING 17189 +BBX 15 16 0 -2 +BITMAP +103E +17C0 +2244 +2128 +4BF8 +F840 +17FC +2000 +4BF8 +F808 +0BF8 +1008 +ABF8 +A544 +852A +08FA +ENDCHAR +STARTCHAR uni4326 +ENCODING 17190 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +2042 +2A52 +494A +F252 +1090 +2108 +4BFE +FD10 +09FE +0110 +A9FE +A910 +81FE +0100 +ENDCHAR +STARTCHAR uni4327 +ENCODING 17191 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +2020 +29FC +4800 +F3FE +1002 +21FC +4820 +FBFE +0800 +03FE +A804 +ABBE +82A4 +038C +ENDCHAR +STARTCHAR uni4328 +ENCODING 17192 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +23FE +2888 +4910 +F1DE +1252 +2554 +4A88 +F974 +0A02 +01FC +A820 +A924 +8222 +0060 +ENDCHAR +STARTCHAR uni4329 +ENCODING 17193 +BBX 15 16 0 -2 +BITMAP +1108 +17FE +2108 +2800 +4BFC +F294 +1294 +23FC +4828 +FBFE +0A20 +0324 +AAA8 +AA92 +842A +08C6 +ENDCHAR +STARTCHAR uni432A +ENCODING 17194 +BBX 15 16 0 -2 +BITMAP +13DE +1252 +23DE +2A52 +4BDE +F242 +127A +228A +4B12 +FADA +0A8A +02DA +AA8A +AAFA +820A +0204 +ENDCHAR +STARTCHAR uni432B +ENCODING 17195 +BBX 15 15 1 -1 +BITMAP +1010 +23D0 +469E +2BE0 +1240 +23DC +4E80 +F3FC +1104 +51FC +5904 +95FC +9450 +1092 +130E +ENDCHAR +STARTCHAR uni432C +ENCODING 17196 +BBX 15 16 0 -2 +BITMAP +1110 +1090 +23DE +2810 +4A5E +F182 +13DE +2010 +4BDE +FA50 +0BDE +0250 +ABDE +AA50 +8252 +02CE +ENDCHAR +STARTCHAR uni432D +ENCODING 17197 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +23FE +28A8 +4890 +F1FE +1120 +23FC +4D20 +F9FC +0920 +01FE +A900 +AAA4 +8252 +0452 +ENDCHAR +STARTCHAR uni432E +ENCODING 17198 +BBX 15 16 0 -2 +BITMAP +11FC +1020 +23FE +2A22 +49AC +F020 +11AC +2000 +489E +FBF2 +089E +01D2 +AABE +AC92 +809E +0092 +ENDCHAR +STARTCHAR uni432F +ENCODING 17199 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +2088 +2BDE +4A52 +F3DE +10A0 +2090 +49FE +F920 +0BFC +0520 +A9FC +A920 +81FE +0100 +ENDCHAR +STARTCHAR uni4330 +ENCODING 17200 +BBX 15 16 0 -2 +BITMAP +13FC +1108 +21F8 +2908 +49F8 +F10E +17F8 +2008 +4FFE +FA94 +0B9C +0294 +AB9C +AAD6 +87BC +0084 +ENDCHAR +STARTCHAR uni4331 +ENCODING 17201 +BBX 15 16 0 -2 +BITMAP +4080 +7FFC +4800 +8FF8 +A000 +EFF8 +4808 +4FF8 +A100 +FC9C +15D4 +5C14 +555C +5C96 +95D6 +2C22 +ENDCHAR +STARTCHAR uni4332 +ENCODING 17202 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +2088 +29F0 +4820 +F3FE +1020 +21FC +49AC +FD74 +05FC +0020 +55FC +5420 +83FE +0154 +ENDCHAR +STARTCHAR uni4333 +ENCODING 17203 +BBX 15 16 0 -2 +BITMAP +27FC +2248 +47FC +4C46 +96EC +E554 +26EC +4554 +96EC +F454 +0408 +17FC +A840 +A3F8 +8050 +07FC +ENDCHAR +STARTCHAR uni4334 +ENCODING 17204 +BBX 15 16 0 -2 +BITMAP +4080 +7FFC +4800 +8FF8 +A000 +EFF8 +4808 +4FF8 +A220 +FD5C +17F4 +5C94 +55DC +5C96 +97F6 +2CA2 +ENDCHAR +STARTCHAR uni4335 +ENCODING 17205 +BBX 15 16 0 -2 +BITMAP +13FE +1202 +23FE +2A92 +4A54 +F292 +12FE +22AA +4AFE +FB22 +0AFA +02AA +AAFA +AA22 +85FA +0004 +ENDCHAR +STARTCHAR uni4336 +ENCODING 17206 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +2010 +2410 +45FE +F810 +1030 +2030 +4050 +FC50 +4090 +0110 +1C10 +E010 +4050 +0020 +ENDCHAR +STARTCHAR uni4337 +ENCODING 17207 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +2020 +2420 +45FC +F924 +1124 +2124 +4124 +FDFC +4124 +0124 +1D24 +E124 +41FC +0104 +ENDCHAR +STARTCHAR uni4338 +ENCODING 17208 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +25FC +4420 +F840 +13FE +2040 +4080 +FDFC +4004 +0088 +1C50 +E020 +4010 +0010 +ENDCHAR +STARTCHAR uni4339 +ENCODING 17209 +BBX 14 16 0 -2 +BITMAP +1000 +13FC +2204 +2204 +4A04 +FAF4 +1294 +2294 +4294 +FA94 +42F4 +0294 +1A04 +E204 +4214 +0208 +ENDCHAR +STARTCHAR uni433A +ENCODING 17210 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2088 +2488 +44F8 +F888 +1088 +20F8 +4088 +FC88 +408E +03F8 +1C08 +E008 +4008 +0008 +ENDCHAR +STARTCHAR uni433B +ENCODING 17211 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +2042 +2042 +4A52 +F94A +114A +2042 +40C6 +F94A +4252 +0042 +1842 +E042 +414A +0084 +ENDCHAR +STARTCHAR uni433C +ENCODING 17212 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +2088 +2410 +45FC +F904 +1104 +2104 +41FC +FC50 +4050 +0090 +1C92 +E112 +420E +0400 +ENDCHAR +STARTCHAR uni433D +ENCODING 17213 +BBX 15 16 0 -2 +BITMAP +1008 +103C +23C0 +2044 +4A24 +F928 +1100 +2020 +43FE +F870 +40A8 +00A8 +1924 +E222 +4420 +0020 +ENDCHAR +STARTCHAR uni433E +ENCODING 17214 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2020 +4820 +FBFE +128A +2252 +42FA +FA22 +4222 +02FA +1A22 +E222 +422A +0204 +ENDCHAR +STARTCHAR uni433F +ENCODING 17215 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2000 +21FC +4904 +F904 +11FC +2000 +43FE +FA22 +4222 +03FE +1A22 +E222 +43FE +0202 +ENDCHAR +STARTCHAR uni4340 +ENCODING 17216 +BBX 15 15 0 -1 +BITMAP +1090 +1290 +229C +22A0 +4AD0 +FA88 +1288 +2080 +4000 +FBF8 +42A8 +02A8 +1AA8 +E2A8 +4FFE +ENDCHAR +STARTCHAR uni4341 +ENCODING 17217 +BBX 15 16 0 -2 +BITMAP +1088 +1448 +2250 +20FC +4820 +F850 +1694 +2238 +4250 +FA98 +4234 +0254 +1A90 +E220 +45FE +0800 +ENDCHAR +STARTCHAR uni4342 +ENCODING 17218 +BBX 15 16 0 -2 +BITMAP +2000 +20FC +3C20 +5020 +9020 +1020 +FE20 +11FE +1020 +5420 +5420 +5420 +5C20 +6420 +04A0 +0040 +ENDCHAR +STARTCHAR uni4343 +ENCODING 17219 +BBX 15 15 1 -1 +BITMAP +0100 +07F0 +3910 +04A0 +02C0 +0700 +3800 +1FF8 +2100 +4100 +FFFE +0100 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni4344 +ENCODING 17220 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +3C20 +5020 +903E +1020 +FE20 +1020 +11FC +5504 +5504 +5504 +5D04 +6504 +05FC +0104 +ENDCHAR +STARTCHAR uni4345 +ENCODING 17221 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +3C50 +5050 +9088 +1124 +FE12 +1010 +11FC +5404 +5408 +5488 +5C50 +6420 +0410 +0010 +ENDCHAR +STARTCHAR uni4346 +ENCODING 17222 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3C20 +51FE +9102 +1204 +FE00 +1000 +11FE +5420 +5420 +5420 +5C20 +6420 +04A0 +0040 +ENDCHAR +STARTCHAR uni4347 +ENCODING 17223 +BBX 15 15 0 -1 +BITMAP +2004 +201E +3CE0 +5000 +9010 +1008 +FEFE +1002 +1004 +5408 +5410 +5420 +5C40 +64A0 +051E +ENDCHAR +STARTCHAR uni4348 +ENCODING 17224 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +3C20 +5020 +9124 +10A4 +FEA8 +1020 +13FE +5420 +5420 +5420 +5C20 +6420 +0420 +0020 +ENDCHAR +STARTCHAR uni4349 +ENCODING 17225 +BBX 15 16 0 -2 +BITMAP +2000 +2000 +3CFC +5084 +9084 +1084 +FE84 +1084 +10FC +5484 +5400 +5448 +5C44 +6484 +0482 +0102 +ENDCHAR +STARTCHAR uni434A +ENCODING 17226 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3C20 +51FE +9000 +1088 +FF04 +1202 +1088 +5488 +5450 +5450 +5C20 +6450 +0488 +0306 +ENDCHAR +STARTCHAR uni434B +ENCODING 17227 +BBX 15 15 0 -1 +BITMAP +2008 +203C +3DE0 +5020 +91FE +10A8 +FEA8 +10A8 +11FE +54A8 +54A8 +55FE +5C20 +6420 +05FC +ENDCHAR +STARTCHAR uni434C +ENCODING 17228 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3CFC +5000 +9088 +1048 +FE50 +11FE +1000 +5400 +54FC +5484 +5C84 +6484 +04FC +0084 +ENDCHAR +STARTCHAR uni434D +ENCODING 17229 +BBX 15 16 0 -2 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FE86 +8200 +7CFC +2044 +3C44 +5028 +FE28 +1010 +5428 +7C44 +0182 +ENDCHAR +STARTCHAR uni434E +ENCODING 17230 +BBX 15 16 0 -2 +BITMAP +4088 +43FE +7888 +A020 +23FE +2250 +FBFE +2252 +23FE +AA80 +AAFE +AA80 +BAFE +CC02 +0AAA +0004 +ENDCHAR +STARTCHAR uni434F +ENCODING 17231 +BBX 11 15 2 -2 +BITMAP +FFE0 +9120 +9120 +9120 +9120 +FFE0 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +80A0 +8040 +ENDCHAR +STARTCHAR uni4350 +ENCODING 17232 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +3FF8 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4351 +ENCODING 17233 +BBX 15 15 0 -2 +BITMAP +3FF8 +2228 +2AA8 +2448 +2AA8 +3128 +0000 +3FF8 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4352 +ENCODING 17234 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +0100 +0100 +7FFC +0380 +0540 +0920 +1110 +2108 +C106 +0100 +0100 +ENDCHAR +STARTCHAR uni4353 +ENCODING 17235 +BBX 14 15 1 -2 +BITMAP +FFF8 +8888 +8888 +FFF8 +0000 +7FF8 +0080 +2080 +4080 +7FFC +0280 +0C80 +3080 +C280 +0100 +ENDCHAR +STARTCHAR uni4354 +ENCODING 17236 +BBX 14 15 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +0200 +0200 +7FFC +0400 +0480 +0880 +1100 +2220 +4410 +8FF8 +0408 +ENDCHAR +STARTCHAR uni4355 +ENCODING 17237 +BBX 13 15 1 -2 +BITMAP +FFF8 +8888 +8888 +FFF8 +0000 +01E0 +7E00 +4200 +4200 +7FF8 +4100 +4080 +5448 +6228 +4218 +ENDCHAR +STARTCHAR uni4356 +ENCODING 17238 +BBX 13 15 1 -2 +BITMAP +FFF8 +8888 +8888 +FFF8 +1000 +3FE0 +4020 +BF20 +2120 +2120 +3F20 +20A0 +2048 +2008 +1FF8 +ENDCHAR +STARTCHAR uni4357 +ENCODING 17239 +BBX 13 15 1 -2 +BITMAP +FFF8 +8888 +8888 +FFF8 +0400 +0200 +FFF8 +0800 +1040 +3F80 +0100 +0640 +1820 +7FF0 +0010 +ENDCHAR +STARTCHAR uni4358 +ENCODING 17240 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +0100 +1110 +0920 +0540 +7FFC +0540 +0920 +1110 +2108 +C106 +0100 +ENDCHAR +STARTCHAR uni4359 +ENCODING 17241 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +7FFC +1000 +3FFC +4000 +9FF0 +1210 +1110 +FFFE +2210 +2110 +3FFC +0010 +0060 +ENDCHAR +STARTCHAR uni435A +ENCODING 17242 +BBX 14 15 1 -2 +BITMAP +FFF8 +8888 +8888 +FFF8 +0200 +3FE0 +2020 +3FE0 +2020 +3FE0 +2210 +2120 +24C0 +2830 +300C +ENDCHAR +STARTCHAR uni435B +ENCODING 17243 +BBX 13 15 1 -2 +BITMAP +FFF8 +8888 +8888 +FFF8 +0000 +7FF0 +4210 +5FD0 +4210 +4F90 +4890 +4F90 +4010 +7FF0 +4010 +ENDCHAR +STARTCHAR uni435C +ENCODING 17244 +BBX 14 16 0 -2 +BITMAP +7FFC +4444 +7FFC +0900 +0880 +1FFC +1080 +3080 +5FF8 +9080 +1080 +1FF8 +1080 +1080 +1FFC +1000 +ENDCHAR +STARTCHAR uni435D +ENCODING 17245 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +7FFC +0000 +0104 +7D98 +0960 +3118 +C506 +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni435E +ENCODING 17246 +BBX 15 16 0 -2 +BITMAP +7FFC +4004 +4AA4 +4444 +4AA4 +0050 +0048 +FFFE +0040 +3E40 +2224 +3E28 +0012 +0E2A +70C6 +0302 +ENDCHAR +STARTCHAR uni435F +ENCODING 17247 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +7FFC +0000 +2448 +2388 +2448 +3FF8 +1010 +2208 +47E4 +0820 +1440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni4360 +ENCODING 17248 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +7FFC +0100 +0080 +FFFE +0440 +1390 +1450 +1FF0 +0100 +7FFC +4444 +4FE4 +4424 +400C +ENDCHAR +STARTCHAR uni4361 +ENCODING 17249 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +7FFC +0080 +3FFE +2220 +3FFC +2224 +3FFC +2840 +2848 +2F70 +4844 +4B44 +8C3C +ENDCHAR +STARTCHAR uni4362 +ENCODING 17250 +BBX 13 15 1 -2 +BITMAP +FFF8 +8888 +FFF8 +2000 +7FF8 +9540 +1540 +FFF8 +1540 +1540 +FFF8 +0000 +4910 +4488 +8488 +ENDCHAR +STARTCHAR uni4363 +ENCODING 17251 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +7FFC +0000 +3FF8 +0100 +7FFE +4102 +9D74 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni4364 +ENCODING 17252 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +7FFC +0100 +FFFE +0288 +7D70 +2548 +4D66 +9010 +1FF0 +1010 +1FF0 +1010 +2010 +ENDCHAR +STARTCHAR uni4365 +ENCODING 17253 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +7FFC +0000 +7FFE +4000 +5F3C +4410 +7F7E +4E34 +5552 +6090 +44F8 +4480 +BFFE +ENDCHAR +STARTCHAR uni4366 +ENCODING 17254 +BBX 14 16 1 -2 +BITMAP +FFF8 +8888 +FFF8 +2000 +1050 +FE48 +28FC +9290 +AB90 +FEFC +1090 +FEFC +A290 +AA90 +BAFC +8680 +ENDCHAR +STARTCHAR uni4367 +ENCODING 17255 +BBX 15 16 0 -2 +BITMAP +1088 +1048 +5050 +5000 +7DFC +5020 +9020 +10FC +1C20 +F020 +51FE +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni4368 +ENCODING 17256 +BBX 15 16 0 -2 +BITMAP +4420 +2420 +2820 +FDFE +1020 +1020 +7DFC +1124 +1124 +FD24 +1124 +1134 +2128 +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni4369 +ENCODING 17257 +BBX 15 16 0 -2 +BITMAP +4440 +2440 +2840 +FE80 +10FE +1108 +7E88 +1088 +1088 +FE50 +1050 +1020 +2050 +2088 +4104 +8202 +ENDCHAR +STARTCHAR uni436A +ENCODING 17258 +BBX 15 16 0 -2 +BITMAP +4420 +2420 +2820 +FDFE +1020 +1020 +7C20 +11FC +1070 +FCA8 +10A8 +1124 +2124 +2222 +4020 +8020 +ENDCHAR +STARTCHAR uni436B +ENCODING 17259 +BBX 15 16 0 -2 +BITMAP +4420 +2410 +2810 +FDFE +1102 +1204 +7C80 +1088 +1090 +FCA0 +10C0 +1082 +2082 +2082 +407E +8000 +ENDCHAR +STARTCHAR uni436C +ENCODING 17260 +BBX 15 16 0 -2 +BITMAP +4400 +25FC +2820 +FC20 +1124 +10A4 +7CA8 +1020 +13FE +FC20 +1020 +1020 +2020 +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni436D +ENCODING 17261 +BBX 15 16 0 -2 +BITMAP +4400 +24FC +2884 +FEA4 +1094 +1084 +7C84 +13FE +1104 +FF44 +1124 +1104 +21FE +2004 +4028 +8010 +ENDCHAR +STARTCHAR uni436E +ENCODING 17262 +BBX 15 16 0 -2 +BITMAP +4450 +2450 +2850 +FD52 +10D4 +1058 +7C50 +1058 +10D4 +FD52 +1050 +1050 +2092 +2092 +4112 +820E +ENDCHAR +STARTCHAR uni436F +ENCODING 17263 +BBX 15 16 0 -2 +BITMAP +4440 +2440 +28FC +FD04 +1208 +11FE +7D00 +117C +1144 +FD44 +1154 +1148 +2142 +2242 +423E +8400 +ENDCHAR +STARTCHAR uni4370 +ENCODING 17264 +BBX 14 16 0 -2 +BITMAP +4400 +25FC +2904 +FD24 +1124 +1124 +7DFC +1124 +1124 +FD54 +114C +118C +2104 +2104 +41FC +8104 +ENDCHAR +STARTCHAR uni4371 +ENCODING 17265 +BBX 15 16 0 -2 +BITMAP +4420 +2420 +2850 +FC88 +1104 +12FA +7C20 +1020 +13FE +FC20 +1128 +1124 +2222 +2422 +40A0 +8040 +ENDCHAR +STARTCHAR uni4372 +ENCODING 17266 +BBX 15 16 0 -2 +BITMAP +8800 +4840 +539C +FA04 +2204 +239C +FA04 +2204 +23FC +F890 +2090 +2090 +2090 +4112 +4212 +840E +ENDCHAR +STARTCHAR uni4373 +ENCODING 17267 +BBX 15 16 0 -2 +BITMAP +8800 +4BDE +5042 +F94A +2084 +214A +FA52 +2420 +2000 +FBDE +2052 +2152 +2094 +4148 +4254 +8422 +ENDCHAR +STARTCHAR uni4374 +ENCODING 17268 +BBX 15 16 0 -2 +BITMAP +881C +49E0 +5020 +F820 +23FE +20A8 +F924 +2242 +2040 +FBFE +2088 +2108 +20D0 +4030 +4048 +8184 +ENDCHAR +STARTCHAR uni4375 +ENCODING 17269 +BBX 15 16 0 -2 +BITMAP +4440 +2440 +28F8 +FD08 +1010 +11FC +7C24 +1024 +13FE +FC24 +1024 +11FC +2024 +2020 +40A0 +8040 +ENDCHAR +STARTCHAR uni4376 +ENCODING 17270 +BBX 15 16 0 -2 +BITMAP +4420 +2420 +2BFE +FC20 +11FC +1124 +7DFC +1124 +11FC +FC20 +1070 +10A8 +2124 +2622 +4020 +8020 +ENDCHAR +STARTCHAR uni4377 +ENCODING 17271 +BBX 15 16 0 -2 +BITMAP +4440 +2440 +29FC +FC84 +13FE +1000 +7DFC +1104 +11FC +FC20 +13FE +1020 +2220 +23FE +4020 +8020 +ENDCHAR +STARTCHAR uni4378 +ENCODING 17272 +BBX 15 16 0 -2 +BITMAP +4428 +2424 +2BFE +FC20 +11FC +1124 +7DFC +1124 +11FC +FD24 +1008 +13FE +2088 +2048 +4048 +8018 +ENDCHAR +STARTCHAR uni4379 +ENCODING 17273 +BBX 15 16 0 -2 +BITMAP +4420 +2440 +29FC +FD04 +11FC +1104 +7DFC +1104 +11FC +FC28 +1024 +13FE +2050 +2088 +4104 +8602 +ENDCHAR +STARTCHAR uni437A +ENCODING 17274 +BBX 15 16 0 -2 +BITMAP +8820 +4820 +51FC +F924 +21FC +2020 +FBFE +2222 +23FE +F820 +2040 +2024 +22A2 +428A +4478 +8000 +ENDCHAR +STARTCHAR uni437B +ENCODING 17275 +BBX 15 16 0 -2 +BITMAP +8800 +4BDE +5252 +FBDE +2210 +2252 +F9CE +2000 +2088 +FBFE +2088 +2088 +23FE +4088 +4104 +8202 +ENDCHAR +STARTCHAR uni437C +ENCODING 17276 +BBX 15 16 0 -2 +BITMAP +8800 +4BDE +5088 +FAA8 +23FE +2188 +FADA +24A6 +21F8 +F908 +2108 +21F8 +2108 +4108 +41F8 +8108 +ENDCHAR +STARTCHAR uni437D +ENCODING 17277 +BBX 15 16 0 -2 +BITMAP +8800 +4BFE +5222 +FACC +2244 +23EE +FA44 +22EE +2354 +FA44 +2210 +2290 +229E +4490 +4490 +8BFE +ENDCHAR +STARTCHAR uni437E +ENCODING 17278 +BBX 15 15 0 -2 +BITMAP +7EEE +2422 +2422 +24AA +2466 +2422 +FF22 +2426 +246A +24B2 +2422 +2422 +2422 +44AA +8444 +ENDCHAR +STARTCHAR uni437F +ENCODING 17279 +BBX 15 14 0 -1 +BITMAP +7EFC +2244 +1224 +1A34 +62C4 +0204 +0000 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni4380 +ENCODING 17280 +BBX 15 16 0 -2 +BITMAP +0014 +EE12 +2212 +2210 +AAFE +6690 +2292 +2292 +2692 +6A94 +B294 +22B4 +22CA +228A +AA16 +4422 +ENDCHAR +STARTCHAR uni4381 +ENCODING 17281 +BBX 14 16 0 -2 +BITMAP +1000 +11DC +1044 +1044 +FF54 +10CC +1044 +1044 +7C4C +44D4 +4564 +4444 +4444 +7C44 +4554 +0088 +ENDCHAR +STARTCHAR uni4382 +ENCODING 17282 +BBX 15 16 0 -2 +BITMAP +0040 +EE40 +22FC +2284 +AB04 +66F4 +2294 +2294 +26F4 +6A84 +B294 +2288 +2282 +2282 +AA7E +4400 +ENDCHAR +STARTCHAR uni4383 +ENCODING 17283 +BBX 14 16 0 -2 +BITMAP +1000 +11DC +1044 +7C44 +5554 +54CC +7C44 +5444 +544C +54D4 +FF64 +4444 +4444 +4444 +5554 +4888 +ENDCHAR +STARTCHAR uni4384 +ENCODING 17284 +BBX 14 15 0 -2 +BITMAP +FDDC +2444 +2444 +2554 +24CC +5444 +4844 +804C +7CD4 +4564 +4444 +4444 +4444 +7D54 +4488 +ENDCHAR +STARTCHAR uni4385 +ENCODING 17285 +BBX 13 16 1 -2 +BITMAP +2000 +23B8 +4088 +F888 +8AA8 +8998 +8888 +8888 +F898 +89A8 +8AC8 +8888 +8888 +F888 +8AA8 +0110 +ENDCHAR +STARTCHAR uni4386 +ENCODING 17286 +BBX 15 15 0 -2 +BITMAP +7EFC +2244 +1224 +1A34 +62C4 +0304 +0280 +0C60 +3218 +C106 +1FE0 +0020 +0640 +0180 +0040 +ENDCHAR +STARTCHAR uni4387 +ENCODING 17287 +BBX 14 16 0 -2 +BITMAP +1000 +21DC +7C44 +4444 +6554 +54CC +5444 +FC44 +444C +64D4 +5564 +5444 +4444 +4444 +5554 +8888 +ENDCHAR +STARTCHAR uni4388 +ENCODING 17288 +BBX 15 16 0 -2 +BITMAP +0020 +EE20 +22FC +22A4 +AAA4 +66FC +22A4 +22A4 +26FC +6A20 +B224 +2218 +2212 +226A +AB86 +4402 +ENDCHAR +STARTCHAR uni4389 +ENCODING 17289 +BBX 15 16 0 -2 +BITMAP +000C +EE0A +2208 +22FE +AA88 +6688 +2288 +228A +26EA +6A8A +B28C +228C +228A +228A +AA96 +4522 +ENDCHAR +STARTCHAR uni438A +ENCODING 17290 +BBX 15 16 0 -2 +BITMAP +1000 +10EE +1E22 +2222 +62AA +9466 +0822 +1422 +2226 +416A +BEB2 +2222 +2222 +2222 +3EAA +2244 +ENDCHAR +STARTCHAR uni438B +ENCODING 17291 +BBX 15 16 0 -2 +BITMAP +0800 +28EE +2822 +3E22 +48AA +0866 +FF22 +0022 +0026 +3E6A +22B2 +2222 +2222 +3E22 +22AA +0044 +ENDCHAR +STARTCHAR uni438C +ENCODING 17292 +BBX 15 15 0 -2 +BITMAP +EE7C +2244 +2244 +AA44 +6644 +227C +2210 +2610 +6A50 +B25E +2250 +2250 +2270 +AA9E +4500 +ENDCHAR +STARTCHAR uni438D +ENCODING 17293 +BBX 15 16 0 -2 +BITMAP +0028 +EC24 +25FE +2420 +B420 +6DFC +2524 +2524 +25FC +6D24 +B524 +25FC +2524 +2524 +B524 +490C +ENDCHAR +STARTCHAR uni438E +ENCODING 17294 +BBX 15 15 0 -2 +BITMAP +EDFE +24A0 +24A8 +B4A8 +6CE8 +24A8 +24A8 +24A8 +6CE8 +B4A8 +24AA +24BA +25EA +B426 +4820 +ENDCHAR +STARTCHAR uni438F +ENCODING 17295 +BBX 15 16 0 -2 +BITMAP +0800 +08EE +1422 +2222 +51AA +8866 +7E22 +0222 +0426 +086A +7EB2 +4222 +4222 +7E22 +42AA +0044 +ENDCHAR +STARTCHAR uni4390 +ENCODING 17296 +BBX 14 16 0 -2 +BITMAP +1000 +11DC +FE44 +1044 +7D54 +44CC +7C44 +4444 +7C4C +54D4 +1164 +FE44 +1044 +1044 +1154 +1088 +ENDCHAR +STARTCHAR uni4391 +ENCODING 17297 +BBX 15 15 0 -2 +BITMAP +EEFC +2204 +2204 +AA7C +6604 +2204 +22FE +2610 +6A92 +B254 +2238 +2254 +2292 +AA50 +4420 +ENDCHAR +STARTCHAR uni4392 +ENCODING 17298 +BBX 15 16 0 -2 +BITMAP +0048 +EE44 +225E +23E0 +AA28 +6612 +226A +2396 +2648 +6A5E +B3E0 +2224 +2228 +2212 +AA6A +4586 +ENDCHAR +STARTCHAR uni4393 +ENCODING 17299 +BBX 15 16 0 -2 +BITMAP +0010 +EE10 +22DA +2254 +AA54 +6692 +2350 +2220 +26FE +6A82 +B282 +22FE +2282 +2282 +AAFE +4482 +ENDCHAR +STARTCHAR uni4394 +ENCODING 17300 +BBX 15 16 0 -2 +BITMAP +0028 +EC24 +27FE +2420 +B5FC +6D24 +25FC +2524 +25FC +6D24 +B408 +27FE +2488 +2448 +B448 +4818 +ENDCHAR +STARTCHAR uni4395 +ENCODING 17301 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +4D28 +1450 +2288 +7FFE +4002 +8004 +3EF8 +0208 +1248 +0A28 +1248 +2288 +0A28 +0410 +ENDCHAR +STARTCHAR uni4396 +ENCODING 17302 +BBX 15 16 0 -2 +BITMAP +4400 +24EE +2822 +FE22 +92AA +D666 +BA22 +9222 +FE26 +006A +7CB2 +4422 +7C22 +4422 +7CAA +4444 +ENDCHAR +STARTCHAR uni4397 +ENCODING 17303 +BBX 15 16 0 -2 +BITMAP +0600 +78EE +1022 +FFA2 +22AA +5D66 +94A2 +1C22 +0026 +7F6A +41B2 +5D22 +5522 +5D22 +41AA +4344 +ENDCHAR +STARTCHAR uni4398 +ENCODING 17304 +BBX 15 16 0 -2 +BITMAP +0800 +7F7E +0912 +FF92 +095A +7F36 +0812 +AA92 +EB96 +88BA +FFD2 +8892 +EB92 +AA92 +AA92 +08B6 +ENDCHAR +STARTCHAR uni4399 +ENCODING 17305 +BBX 14 16 0 -2 +BITMAP +2000 +11DC +FE44 +8244 +7D54 +54CC +9844 +7C44 +C44C +7CD4 +4564 +7C44 +4444 +7C44 +2954 +4488 +ENDCHAR +STARTCHAR uni439A +ENCODING 17306 +BBX 15 16 0 -2 +BITMAP +0088 +EDDC +2488 +25DC +B488 +6DDC +2488 +25FC +2404 +6CFC +B404 +25FC +2420 +2554 +B54A +4A3A +ENDCHAR +STARTCHAR uni439B +ENCODING 17307 +BBX 15 16 0 -2 +BITMAP +0200 +0208 +3FD0 +0220 +FFFE +0200 +0C70 +3F84 +C804 +07FC +0000 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni439C +ENCODING 17308 +BBX 15 15 0 -1 +BITMAP +1010 +1210 +7E12 +147E +1414 +FE14 +08FE +1008 +2030 +7E22 +A064 +22B8 +2D22 +3022 +201E +ENDCHAR +STARTCHAR uni439D +ENCODING 17309 +BBX 15 16 0 -2 +BITMAP +0220 +3FC0 +0280 +FFFE +0220 +0FC0 +3408 +C3F8 +0000 +7EFC +2244 +1224 +0A14 +1224 +6AD4 +0408 +ENDCHAR +STARTCHAR uni439E +ENCODING 17310 +BBX 14 16 0 -2 +BITMAP +0100 +0108 +1FD0 +0120 +7FFC +0200 +0FF0 +3810 +CFF0 +0810 +0FF0 +0000 +3FF8 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uni439F +ENCODING 17311 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1020 +FC40 +25FC +2554 +2554 +2554 +4954 +2954 +1154 +2954 +4544 +8114 +0108 +ENDCHAR +STARTCHAR uni43A0 +ENCODING 17312 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2020 +2040 +FDFC +2554 +2554 +A554 +6554 +2554 +3544 +2D16 +250A +4402 +43FE +8000 +ENDCHAR +STARTCHAR uni43A1 +ENCODING 17313 +BBX 15 15 0 -2 +BITMAP +FFFE +0200 +0400 +3FF8 +2488 +2488 +24A8 +2010 +0100 +1110 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni43A2 +ENCODING 17314 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1080 +FCFE +1100 +7A00 +10FC +FC08 +1010 +3820 +3440 +5480 +9102 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni43A3 +ENCODING 17315 +BBX 15 16 0 -2 +BITMAP +1008 +1048 +1128 +FD28 +1128 +7908 +1108 +FD08 +1108 +3908 +3548 +5594 +9114 +1022 +1042 +1082 +ENDCHAR +STARTCHAR uni43A4 +ENCODING 17316 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +FD04 +11FC +7900 +1100 +FDFE +1102 +397A +354A +554A +927A +1202 +1414 +1008 +ENDCHAR +STARTCHAR uni43A5 +ENCODING 17317 +BBX 15 16 0 -2 +BITMAP +1000 +1050 +1048 +FC84 +1124 +7820 +1050 +FC88 +1106 +3AF8 +3488 +5488 +9088 +1088 +10F8 +1088 +ENDCHAR +STARTCHAR uni43A6 +ENCODING 17318 +BBX 15 16 0 -2 +BITMAP +1020 +10A4 +10A4 +FD28 +1050 +7888 +1104 +FC24 +1020 +38A8 +34A8 +5530 +9050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni43A7 +ENCODING 17319 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +10FC +FC00 +1088 +7848 +1050 +FDFE +1000 +3800 +34FC +5484 +9084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni43A8 +ENCODING 17320 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +FC50 +1088 +7924 +1222 +FDFC +1124 +39FC +3524 +55FC +9022 +1022 +101E +1000 +ENDCHAR +STARTCHAR uni43A9 +ENCODING 17321 +BBX 15 16 0 -2 +BITMAP +1092 +1092 +1124 +FE48 +1124 +7892 +1092 +FC00 +11FE +3922 +3522 +55FE +9122 +1122 +11FE +1102 +ENDCHAR +STARTCHAR uni43AA +ENCODING 17322 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +FDFC +1104 +79FC +1000 +FDFE +1008 +3BFE +3408 +5508 +9088 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni43AB +ENCODING 17323 +BBX 15 16 0 -2 +BITMAP +1050 +1124 +1154 +FD04 +11FC +7850 +1088 +FD44 +1078 +3888 +3488 +5550 +9020 +1050 +1088 +1106 +ENDCHAR +STARTCHAR uni43AC +ENCODING 17324 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1252 +FE52 +13FE +7820 +1020 +FDFC +1020 +3820 +37FE +5440 +9088 +1104 +13FE +1102 +ENDCHAR +STARTCHAR uni43AD +ENCODING 17325 +BBX 15 16 0 -2 +BITMAP +1010 +1050 +1250 +FD7C +1090 +7810 +10FE +FF00 +117C +3944 +3544 +517C +5144 +9100 +12FE +1400 +ENDCHAR +STARTCHAR uni43AE +ENCODING 17326 +BBX 14 16 0 -2 +BITMAP +1040 +1020 +11FC +FC88 +1050 +79FC +1104 +FD24 +11FC +3924 +3574 +5554 +9154 +1174 +1104 +110C +ENDCHAR +STARTCHAR uni43AF +ENCODING 17327 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +FC88 +10F8 +7820 +11FC +FD24 +11FC +3820 +35FC +5420 +93FE +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni43B0 +ENCODING 17328 +BBX 15 16 0 -2 +BITMAP +1142 +115C +13F0 +FD50 +1150 +795E +13F4 +FC14 +11D4 +3954 +3554 +55D4 +9154 +1154 +11E4 +1004 +ENDCHAR +STARTCHAR uni43B1 +ENCODING 17329 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2294 +FA94 +23FC +7110 +2252 +FBDC +2012 +73CE +6A40 +A3D2 +225C +23D0 +2252 +22CE +ENDCHAR +STARTCHAR uni43B2 +ENCODING 17330 +BBX 15 15 0 -2 +BITMAP +FF00 +24FC +2404 +3C08 +2410 +2420 +3C20 +2440 +2440 +2E80 +F482 +4482 +0482 +047E +0400 +ENDCHAR +STARTCHAR uni43B3 +ENCODING 17331 +BBX 14 15 0 -2 +BITMAP +FF7C +2444 +2444 +3C44 +247C +2444 +3C44 +2444 +247C +2E44 +F444 +4444 +0484 +0494 +0508 +ENDCHAR +STARTCHAR uni43B4 +ENCODING 17332 +BBX 15 16 0 -2 +BITMAP +0048 +FF48 +2448 +2448 +3CFC +2448 +2448 +3C48 +25FE +2448 +2E48 +F448 +4448 +0488 +0488 +0508 +ENDCHAR +STARTCHAR uni43B5 +ENCODING 17333 +BBX 15 16 0 -2 +BITMAP +0040 +FF20 +2428 +2408 +3C08 +2448 +2454 +3D52 +2552 +2560 +2E60 +F444 +44C4 +0544 +063C +0400 +ENDCHAR +STARTCHAR uni43B6 +ENCODING 17334 +BBX 14 16 0 -2 +BITMAP +0020 +FC20 +4820 +49FC +7924 +4924 +4924 +79FC +4924 +4924 +4D24 +79FC +C924 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uni43B7 +ENCODING 17335 +BBX 15 16 0 -2 +BITMAP +0020 +FD20 +4920 +49FC +7920 +4A20 +4820 +7BFE +4870 +48A8 +4CA8 +7924 +C924 +0A22 +0820 +0820 +ENDCHAR +STARTCHAR uni43B8 +ENCODING 17336 +BBX 15 15 0 -2 +BITMAP +FDFE +4820 +4820 +78FC +4844 +4844 +79FE +4800 +4800 +4CFC +7884 +C884 +0884 +08FC +0884 +ENDCHAR +STARTCHAR uni43B9 +ENCODING 17337 +BBX 15 16 0 -2 +BITMAP +00F8 +3F00 +1110 +0920 +FFFE +0920 +3118 +C106 +3FF8 +0820 +0FE0 +0820 +0FE0 +083E +FFE0 +0020 +ENDCHAR +STARTCHAR uni43BA +ENCODING 17338 +BBX 15 16 0 -2 +BITMAP +0082 +FC82 +4A82 +4BEA +7C8A +488A +4FFA +788A +4BEA +4AAA +4EAA +7AAA +CAA2 +0AE2 +088A +0884 +ENDCHAR +STARTCHAR uni43BB +ENCODING 17339 +BBX 14 15 0 -2 +BITMAP +FDFC +4924 +4924 +7974 +4924 +49FC +7904 +4974 +4954 +4D54 +7974 +C904 +0A04 +0A14 +0C08 +ENDCHAR +STARTCHAR uni43BC +ENCODING 17340 +BBX 15 15 0 -2 +BITMAP +FDF8 +4808 +4808 +79F8 +4808 +4808 +7BFE +4820 +4A22 +4D74 +78A8 +C924 +0A22 +08A0 +0840 +ENDCHAR +STARTCHAR uni43BD +ENCODING 17341 +BBX 15 16 0 -2 +BITMAP +001C +FDE0 +4920 +4920 +79FE +4910 +494A +7986 +4802 +49FC +4D04 +7904 +C9FC +0904 +0904 +09FC +ENDCHAR +STARTCHAR uni43BE +ENCODING 17342 +BBX 15 16 0 -2 +BITMAP +0020 +FC20 +4850 +4888 +7904 +4AFA +4800 +79FC +4954 +4954 +4DFC +7954 +C954 +0954 +0904 +090C +ENDCHAR +STARTCHAR uni43BF +ENCODING 17343 +BBX 15 16 0 -2 +BITMAP +0008 +FCC8 +4B08 +4908 +792A +492A +4BAC +7948 +4908 +4B88 +4D54 +7914 +C914 +0924 +0924 +0942 +ENDCHAR +STARTCHAR uni43C0 +ENCODING 17344 +BBX 15 16 0 -2 +BITMAP +0082 +FC82 +4BE2 +4882 +788A +4BEA +4AAA +7AAA +4BEA +488A +4DCA +7AAA +CCA2 +0882 +088A +0884 +ENDCHAR +STARTCHAR uni43C1 +ENCODING 17345 +BBX 15 16 0 -2 +BITMAP +0040 +FC20 +4BFE +4A42 +7820 +49FC +4888 +7850 +4BFE +4820 +4C20 +79FC +C820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uni43C2 +ENCODING 17346 +BBX 15 16 0 -2 +BITMAP +00A0 +FD2C +4924 +4924 +79AC +4924 +4924 +79FC +4820 +49FC +4C88 +7850 +C820 +0850 +0888 +0B06 +ENDCHAR +STARTCHAR uni43C3 +ENCODING 17347 +BBX 15 15 0 -2 +BITMAP +FDFE +4902 +4800 +78FC +4884 +48FC +7884 +48FC +4820 +4C10 +79FE +C800 +0848 +0884 +0902 +ENDCHAR +STARTCHAR uni43C4 +ENCODING 17348 +BBX 15 16 0 -2 +BITMAP +0040 +FC20 +4BFE +4A8A +7904 +4BFE +4840 +7888 +49FC +4824 +4C20 +79FC +C820 +0820 +0BFE +0800 +ENDCHAR +STARTCHAR uni43C5 +ENCODING 17349 +BBX 15 16 0 -2 +BITMAP +0080 +FC88 +49EE +492A +7AAA +4944 +4884 +797A +4A00 +4800 +4DFE +7820 +C8A8 +0924 +0AA2 +0840 +ENDCHAR +STARTCHAR uni43C6 +ENCODING 17350 +BBX 15 16 0 -2 +BITMAP +0050 +FC50 +4BFE +4850 +7BFE +4A52 +4BFE +7A52 +4BFE +4800 +4DFC +7904 +C9FC +0904 +09FC +0904 +ENDCHAR +STARTCHAR uni43C7 +ENCODING 17351 +BBX 15 15 0 -2 +BITMAP +FDFC +4850 +49FC +7954 +4954 +49FC +7800 +49FC +4800 +4FFE +7820 +C8A8 +0924 +0AA2 +0840 +ENDCHAR +STARTCHAR uni43C8 +ENCODING 17352 +BBX 15 16 0 -2 +BITMAP +0108 +F908 +5254 +5254 +74BC +5708 +5110 +7224 +54BE +578A +5808 +70AC +D56A +154A +1428 +1010 +ENDCHAR +STARTCHAR uni43C9 +ENCODING 17353 +BBX 14 15 0 -2 +BITMAP +FDFC +4904 +49FC +7904 +49FC +4888 +7954 +49DC +4888 +4D54 +79DC +C800 +09A8 +0954 +0A54 +ENDCHAR +STARTCHAR uni43CA +ENCODING 17354 +BBX 15 16 0 -2 +BITMAP +0110 +FC90 +4BDE +4810 +7A5E +4982 +4BDE +7810 +4BDE +4A50 +4FDE +7A50 +CBDE +0A50 +0A52 +0ACE +ENDCHAR +STARTCHAR uni43CB +ENCODING 17355 +BBX 15 16 0 -2 +BITMAP +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0540 +0920 +3118 +C106 +2578 +1348 +A178 +A544 +1D3C +0100 +ENDCHAR +STARTCHAR uni43CC +ENCODING 17356 +BBX 15 16 0 -2 +BITMAP +0840 +0820 +1010 +2008 +4006 +9FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni43CD +ENCODING 17357 +BBX 11 16 2 -2 +BITMAP +0800 +1000 +2080 +4040 +FFE0 +4020 +0000 +7FC0 +4040 +7FC0 +4040 +7FC0 +4040 +4040 +4140 +4080 +ENDCHAR +STARTCHAR uni43CE +ENCODING 17358 +BBX 15 15 0 -2 +BITMAP +3C00 +24F0 +2490 +2490 +3C90 +2490 +24D0 +24B0 +3C90 +2490 +2492 +2492 +4512 +550E +8A00 +ENDCHAR +STARTCHAR uni43CF +ENCODING 17359 +BBX 15 15 0 -2 +BITMAP +3DFC +2420 +2420 +2420 +3C20 +27FE +2420 +2420 +3C20 +2420 +2420 +2420 +4420 +54A0 +8840 +ENDCHAR +STARTCHAR uni43D0 +ENCODING 17360 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2420 +25FC +2424 +3C24 +2424 +2424 +27FE +3C20 +2450 +2450 +2488 +4488 +5504 +8A02 +ENDCHAR +STARTCHAR uni43D1 +ENCODING 17361 +BBX 12 16 1 -2 +BITMAP +0400 +0800 +1FF0 +2420 +D240 +0980 +0600 +1800 +E200 +7FF0 +4510 +4890 +4210 +4510 +4890 +4030 +ENDCHAR +STARTCHAR uni43D2 +ENCODING 17362 +BBX 15 16 0 -2 +BITMAP +0008 +3C88 +2488 +2488 +2488 +3CFE +2480 +2480 +2480 +3CFC +2484 +2484 +2484 +4504 +5504 +8A04 +ENDCHAR +STARTCHAR uni43D3 +ENCODING 17363 +BBX 15 15 0 -2 +BITMAP +3CFC +2400 +2400 +3400 +2DFE +2450 +2450 +2C50 +3450 +2450 +2452 +2452 +4492 +548E +8900 +ENDCHAR +STARTCHAR uni43D4 +ENCODING 17364 +BBX 15 15 0 -2 +BITMAP +3DF8 +2448 +2448 +2448 +3C48 +2448 +25F8 +2488 +3C88 +2488 +2488 +2488 +4488 +57FE +8800 +ENDCHAR +STARTCHAR uni43D5 +ENCODING 17365 +BBX 15 16 0 -2 +BITMAP +0008 +3C3C +25E0 +2420 +2420 +3C20 +2420 +27FE +2420 +3C20 +2420 +2420 +2420 +4420 +55FC +8800 +ENDCHAR +STARTCHAR uni43D6 +ENCODING 17366 +BBX 14 16 0 -2 +BITMAP +0004 +3DE4 +2424 +2424 +2424 +3DE4 +2504 +2504 +2504 +3DE4 +2424 +2424 +2424 +4424 +5544 +8884 +ENDCHAR +STARTCHAR uni43D7 +ENCODING 17367 +BBX 15 16 0 -2 +BITMAP +0080 +3C80 +24FC +2500 +2600 +3CF8 +2400 +2400 +25F8 +3C08 +2408 +2408 +240A +440A +5406 +8802 +ENDCHAR +STARTCHAR uni43D8 +ENCODING 17368 +BBX 15 15 0 -2 +BITMAP +3DFE +2528 +2528 +2528 +3D28 +2528 +2528 +252A +3D2A +254A +2546 +2580 +4500 +55FE +8800 +ENDCHAR +STARTCHAR uni43D9 +ENCODING 17369 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2420 +25FE +2522 +3E24 +2420 +2420 +2450 +3C50 +2450 +2450 +2490 +4492 +5512 +8A0E +ENDCHAR +STARTCHAR uni43DA +ENCODING 17370 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2420 +24A8 +24A4 +3CA2 +2522 +2520 +2624 +3C24 +2428 +2408 +2410 +4420 +54C0 +8B00 +ENDCHAR +STARTCHAR uni43DB +ENCODING 17371 +BBX 14 16 0 -2 +BITMAP +0040 +3C40 +2480 +24FC +2504 +3E04 +2484 +2444 +2444 +3C14 +2424 +2444 +2584 +4404 +5428 +8810 +ENDCHAR +STARTCHAR uni43DC +ENCODING 17372 +BBX 15 15 0 -2 +BITMAP +7BFC +4884 +4888 +4888 +7890 +489C +4884 +4944 +7944 +4928 +4928 +4A10 +4A28 +4C44 +9982 +ENDCHAR +STARTCHAR uni43DD +ENCODING 17373 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2420 +25FC +2420 +3C40 +27FE +2440 +2480 +3DFC +2404 +2488 +2450 +4420 +5410 +8810 +ENDCHAR +STARTCHAR uni43DE +ENCODING 17374 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2420 +27FE +2420 +3C20 +2420 +25FC +2470 +3CA8 +24A8 +2524 +2524 +4622 +5420 +8820 +ENDCHAR +STARTCHAR uni43DF +ENCODING 17375 +BBX 15 16 0 -2 +BITMAP +0040 +3C20 +2428 +2408 +2408 +3C48 +2454 +2552 +2552 +3D60 +2660 +2444 +24C4 +4544 +563C +8800 +ENDCHAR +STARTCHAR uni43E0 +ENCODING 17376 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4820 +4800 +4BFC +7800 +4808 +4908 +4908 +7890 +4890 +4890 +48A0 +4820 +4BFE +9800 +ENDCHAR +STARTCHAR uni43E1 +ENCODING 17377 +BBX 15 15 0 -2 +BITMAP +3CFC +2400 +2400 +2400 +3DFE +2420 +2420 +24A8 +3CA4 +2524 +2522 +2622 +4420 +54A0 +8840 +ENDCHAR +STARTCHAR uni43E2 +ENCODING 17378 +BBX 15 16 0 -2 +BITMAP +0010 +3C10 +2410 +24FE +2492 +3C94 +2490 +24FC +24A4 +3CA4 +24A8 +24A8 +2490 +4528 +5544 +8A82 +ENDCHAR +STARTCHAR uni43E3 +ENCODING 17379 +BBX 15 15 0 -2 +BITMAP +3CF8 +2488 +2488 +2488 +3CF8 +2488 +2488 +2488 +3CF8 +2488 +2488 +2488 +4488 +57FE +8800 +ENDCHAR +STARTCHAR uni43E4 +ENCODING 17380 +BBX 14 15 0 -2 +BITMAP +3DFC +2404 +2404 +25F4 +3C04 +2404 +25F4 +2514 +3D14 +25F4 +2514 +2404 +4404 +5428 +8810 +ENDCHAR +STARTCHAR uni43E5 +ENCODING 17381 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2420 +25FC +2524 +3D24 +25FC +2524 +2524 +3D24 +27FE +2504 +2504 +4504 +5514 +8908 +ENDCHAR +STARTCHAR uni43E6 +ENCODING 17382 +BBX 15 16 0 -2 +BITMAP +0008 +3C3C +25E0 +2420 +2420 +3FFE +2420 +2420 +2420 +3DFC +2504 +2504 +2504 +4504 +55FC +8904 +ENDCHAR +STARTCHAR uni43E7 +ENCODING 17383 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +247C +2484 +2548 +3C30 +2420 +2448 +2590 +3C3E +2442 +25A4 +2418 +4410 +5460 +8980 +ENDCHAR +STARTCHAR uni43E8 +ENCODING 17384 +BBX 14 16 0 -2 +BITMAP +0040 +3C80 +25F8 +2508 +2508 +3D08 +25F8 +2500 +2500 +3D00 +25FC +2504 +2504 +4504 +55FC +8904 +ENDCHAR +STARTCHAR uni43E9 +ENCODING 17385 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2450 +2450 +2488 +3D04 +26FA +2400 +2400 +3CF8 +2488 +2488 +2488 +4488 +54F8 +8888 +ENDCHAR +STARTCHAR uni43EA +ENCODING 17386 +BBX 15 15 0 -2 +BITMAP +3DFE +2488 +2488 +2488 +3CF8 +2488 +2488 +24F8 +3C88 +2488 +249E +27E8 +4408 +5408 +8808 +ENDCHAR +STARTCHAR uni43EB +ENCODING 17387 +BBX 15 16 0 -2 +BITMAP +0090 +7890 +4890 +4910 +49FE +7B10 +4D10 +4938 +4938 +7954 +4954 +4992 +4910 +4910 +4910 +9910 +ENDCHAR +STARTCHAR uni43EC +ENCODING 17388 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2448 +2484 +25FE +3C12 +2490 +2490 +24FE +3D10 +2410 +25FE +2410 +4410 +5410 +8810 +ENDCHAR +STARTCHAR uni43ED +ENCODING 17389 +BBX 15 16 0 -2 +BITMAP +0020 +7920 +4920 +49FC +4920 +7A20 +4820 +4BFE +4870 +78A8 +48A8 +4924 +4924 +4A22 +4820 +9820 +ENDCHAR +STARTCHAR uni43EE +ENCODING 17390 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4BFC +4844 +4884 +7884 +4904 +4A38 +4800 +7B06 +4888 +4800 +4850 +8988 +9E06 +ENDCHAR +STARTCHAR uni43EF +ENCODING 17391 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +4820 +4BFE +4820 +7820 +4820 +49FC +4840 +7820 +48A4 +4A82 +4A8A +4A8A +4C78 +9800 +ENDCHAR +STARTCHAR uni43F0 +ENCODING 17392 +BBX 15 14 1 -1 +BITMAP +7BFC +4844 +4A44 +4944 +7884 +4944 +4A44 +4818 +7840 +4820 +48A4 +4A82 +8A8A +9C78 +ENDCHAR +STARTCHAR uni43F1 +ENCODING 17393 +BBX 15 15 0 -2 +BITMAP +79FC +4904 +4904 +49FC +7900 +4900 +49FE +4902 +797A +494A +494A +4A7A +4A02 +4C14 +9808 +ENDCHAR +STARTCHAR uni43F2 +ENCODING 17394 +BBX 15 16 0 -2 +BITMAP +0108 +3C88 +2490 +25FC +2424 +3C24 +25FC +2520 +2520 +3DFE +2462 +24A2 +252A +4624 +5420 +8820 +ENDCHAR +STARTCHAR uni43F3 +ENCODING 17395 +BBX 15 16 0 -2 +BITMAP +0104 +790E +4930 +4920 +4FE0 +7920 +493E +4964 +49A4 +7F24 +4924 +4924 +4924 +4924 +4944 +9B84 +ENDCHAR +STARTCHAR uni43F4 +ENCODING 17396 +BBX 14 16 0 -2 +BITMAP +0020 +3D24 +24A4 +24A8 +2420 +3DFC +2504 +2504 +25FC +3D04 +2504 +25FC +2504 +4504 +5514 +8908 +ENDCHAR +STARTCHAR uni43F5 +ENCODING 17397 +BBX 15 16 0 -2 +BITMAP +0090 +7888 +4880 +4BFE +48A0 +78A8 +48B0 +48A4 +48A8 +78B0 +4924 +492A +4932 +4A22 +4ADE +9C00 +ENDCHAR +STARTCHAR uni43F6 +ENCODING 17398 +BBX 15 16 0 -2 +BITMAP +0110 +3D12 +2514 +25D8 +2510 +3D12 +2552 +258E +2520 +3C20 +25FC +2420 +2420 +4420 +57FE +8800 +ENDCHAR +STARTCHAR uni43F7 +ENCODING 17399 +BBX 15 15 0 -2 +BITMAP +3DFC +2504 +25FC +2504 +3DFC +2400 +2400 +25FC +3C20 +2420 +27FE +2420 +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni43F8 +ENCODING 17400 +BBX 15 15 0 -2 +BITMAP +7BFC +4840 +4840 +49F8 +7888 +4888 +4BFE +4800 +7800 +49F8 +4908 +4908 +4908 +49F8 +9908 +ENDCHAR +STARTCHAR uni43F9 +ENCODING 17401 +BBX 15 15 0 -2 +BITMAP +3DFC +2504 +2504 +25FC +3D04 +2504 +25FC +2504 +3D04 +25FC +2450 +2490 +4492 +5512 +8A0E +ENDCHAR +STARTCHAR uni43FA +ENCODING 17402 +BBX 15 16 0 -2 +BITMAP +0040 +3C40 +24FC +2488 +2550 +3C20 +24D8 +2726 +24F8 +3C20 +24F8 +2420 +27FE +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni43FB +ENCODING 17403 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +4420 +FEFC +0220 +7C20 +4420 +45FE +7C20 +4420 +7C48 +4484 +45FE +5482 +4800 +ENDCHAR +STARTCHAR uni43FC +ENCODING 17404 +BBX 15 16 0 -2 +BITMAP +0048 +3C44 +245E +25E0 +2428 +3C12 +246A +2596 +2448 +3C5E +25E0 +2424 +2428 +4412 +546A +8986 +ENDCHAR +STARTCHAR uni43FD +ENCODING 17405 +BBX 15 16 0 -2 +BITMAP +0040 +3C20 +25FC +2400 +2508 +3C90 +2400 +27FE +2400 +3C00 +25FC +2504 +2504 +4504 +55FC +8904 +ENDCHAR +STARTCHAR uni43FE +ENCODING 17406 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +25FE +2420 +24FC +3C40 +25FE +2488 +2524 +3E22 +24F8 +2420 +25FE +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni43FF +ENCODING 17407 +BBX 15 16 0 -2 +BITMAP +1040 +0840 +3E7E +2288 +2350 +3E20 +2058 +4186 +9FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni4400 +ENCODING 17408 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +25FC +2450 +2488 +3D04 +27FE +2408 +25E8 +3D28 +2528 +25E8 +2528 +4408 +5428 +8810 +ENDCHAR +STARTCHAR uni4401 +ENCODING 17409 +BBX 15 15 0 -2 +BITMAP +7BFE +4840 +4880 +4944 +7A24 +4868 +4AB0 +4930 +7AA8 +4868 +48A4 +4922 +4A20 +48A0 +9840 +ENDCHAR +STARTCHAR uni4402 +ENCODING 17410 +BBX 15 15 0 -2 +BITMAP +79F8 +4808 +4808 +49F8 +7808 +4808 +4BFE +4820 +7A22 +4974 +48A8 +4924 +4A22 +48A0 +9840 +ENDCHAR +STARTCHAR uni4403 +ENCODING 17411 +BBX 15 15 0 -2 +BITMAP +7BFE +4A02 +4A1A +4AE2 +7A22 +4A22 +4BFE +4A22 +7A72 +4AAA +4B26 +4A22 +4A22 +4BFE +9A02 +ENDCHAR +STARTCHAR uni4404 +ENCODING 17412 +BBX 15 16 0 -2 +BITMAP +0040 +3C40 +247C +2484 +2508 +3E00 +2420 +25CE +2502 +3D02 +25CE +2502 +2502 +4502 +55FE +8902 +ENDCHAR +STARTCHAR uni4405 +ENCODING 17413 +BBX 15 15 0 -2 +BITMAP +3DFC +2504 +2504 +25FC +3D00 +2540 +257C +2590 +3D10 +25FE +2510 +2528 +4528 +5544 +8A82 +ENDCHAR +STARTCHAR uni4406 +ENCODING 17414 +BBX 15 16 0 -2 +BITMAP +0008 +783C +4BC0 +4844 +4A24 +7928 +4900 +4820 +4BFE +7870 +48A8 +48A8 +4924 +4A22 +4C20 +9820 +ENDCHAR +STARTCHAR uni4407 +ENCODING 17415 +BBX 14 16 0 -2 +BITMAP +0080 +3C80 +24FC +2554 +2654 +3C94 +2524 +2454 +2488 +3C00 +25FC +2504 +25FC +4504 +55FC +8904 +ENDCHAR +STARTCHAR uni4408 +ENCODING 17416 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4FFE +4820 +48FC +7A84 +4AFC +4A84 +4A84 +7AFC +4A84 +4A84 +4AFC +8A00 +9BFE +ENDCHAR +STARTCHAR uni4409 +ENCODING 17417 +BBX 15 16 0 -2 +BITMAP +0092 +3C92 +2524 +2648 +2524 +3C92 +2492 +2400 +25FE +3D22 +2522 +25FE +2522 +4522 +55FE +8902 +ENDCHAR +STARTCHAR uni440A +ENCODING 17418 +BBX 15 15 0 -2 +BITMAP +3DFC +2504 +2504 +25FC +3D04 +2504 +25FC +2400 +3D12 +25D4 +2518 +2510 +4552 +5592 +890E +ENDCHAR +STARTCHAR uni440B +ENCODING 17419 +BBX 15 16 0 -2 +BITMAP +0090 +7890 +4908 +4948 +4A44 +7C92 +4908 +4BFC +4844 +7820 +48A4 +4A82 +4A8A +4A8A +4C78 +9800 +ENDCHAR +STARTCHAR uni440C +ENCODING 17420 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +3FF8 +2448 +3FF8 +2448 +FFFE +1010 +2008 +DFF6 +1010 +1FF0 +1010 +1FF0 +1010 +1030 +ENDCHAR +STARTCHAR uni440D +ENCODING 17421 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +27FE +2420 +2420 +3DFC +2400 +2400 +25FC +3D04 +2504 +25FC +2400 +4488 +5450 +8BFE +ENDCHAR +STARTCHAR uni440E +ENCODING 17422 +BBX 15 15 0 -2 +BITMAP +79FC +4904 +4904 +49FC +7904 +4904 +49FC +4800 +7BFE +4820 +4920 +493C +4920 +4AA0 +9C7E +ENDCHAR +STARTCHAR uni440F +ENCODING 17423 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +27FE +2420 +25FC +3C40 +27FE +2488 +2504 +3EFA +2488 +2488 +24F8 +4488 +5488 +88F8 +ENDCHAR +STARTCHAR uni4410 +ENCODING 17424 +BBX 15 16 0 -2 +BITMAP +0088 +71C8 +5708 +5108 +512A +712A +57AC +5148 +5308 +7388 +5554 +5514 +5914 +5124 +5124 +B142 +ENDCHAR +STARTCHAR uni4411 +ENCODING 17425 +BBX 15 16 0 -2 +BITMAP +0048 +3D48 +2548 +27FE +2548 +3D48 +2578 +2500 +25FE +3C20 +27FE +2470 +24A8 +4524 +5622 +8820 +ENDCHAR +STARTCHAR uni4412 +ENCODING 17426 +BBX 15 15 0 -2 +BITMAP +3C40 +25FE +2488 +2504 +3E42 +24F8 +2708 +2490 +3C70 +27BE +2442 +25A4 +4418 +5460 +8B80 +ENDCHAR +STARTCHAR uni4413 +ENCODING 17427 +BBX 15 15 0 -2 +BITMAP +3DFE +2410 +2420 +24FC +3C84 +2484 +24FC +2484 +3CFC +2484 +2484 +24FC +4448 +5484 +8902 +ENDCHAR +STARTCHAR uni4414 +ENCODING 17428 +BBX 15 16 0 -2 +BITMAP +0020 +3C10 +25FE +2502 +2502 +3DFE +2500 +2500 +25FE +3DAA +26AA +24FE +24AA +44AA +54AA +8886 +ENDCHAR +STARTCHAR uni4415 +ENCODING 17429 +BBX 15 15 0 -2 +BITMAP +3CF8 +2488 +2488 +24F8 +3C00 +25FE +2488 +24F8 +3C88 +24F8 +2488 +249E +47E8 +5408 +8808 +ENDCHAR +STARTCHAR uni4416 +ENCODING 17430 +BBX 15 15 0 -2 +BITMAP +7BFC +4A04 +4A04 +4BFC +7A20 +4B24 +4AA8 +4A20 +7BFE +4A70 +4AA8 +4AA8 +4D24 +4A22 +9820 +ENDCHAR +STARTCHAR uni4417 +ENCODING 17431 +BBX 15 15 1 -1 +BITMAP +0080 +7884 +4FFC +4888 +4888 +7890 +4FFE +4850 +4BF8 +7E08 +4A08 +4BF8 +4A08 +8A08 +9BF8 +ENDCHAR +STARTCHAR uni4418 +ENCODING 17432 +BBX 15 16 0 -2 +BITMAP +001E +7BE0 +4844 +4924 +4888 +79FC +4840 +4840 +4BFE +7880 +48FC +4944 +4928 +4A10 +4868 +9986 +ENDCHAR +STARTCHAR uni4419 +ENCODING 17433 +BBX 15 16 0 -2 +BITMAP +0088 +7888 +4BFE +4888 +48F8 +7820 +49FC +4924 +4924 +79FC +4820 +4BFE +4820 +4820 +4820 +9820 +ENDCHAR +STARTCHAR uni441A +ENCODING 17434 +BBX 15 15 0 -2 +BITMAP +7BDE +4A52 +4A52 +4A52 +7BD2 +4A52 +4A52 +4A52 +7BD2 +4A1A +4A94 +4A50 +4AB0 +4B10 +9810 +ENDCHAR +STARTCHAR uni441B +ENCODING 17435 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +25FE +2450 +2488 +3D04 +27FE +2488 +24F8 +3C88 +24F8 +2488 +249E +47E8 +5408 +8808 +ENDCHAR +STARTCHAR uni441C +ENCODING 17436 +BBX 15 15 1 -1 +BITMAP +010C +79F0 +4902 +48FE +4800 +7AFC +4A84 +4AFC +4A84 +7AFC +4A84 +4BFE +4820 +88C8 +9B06 +ENDCHAR +STARTCHAR uni441D +ENCODING 17437 +BBX 14 16 0 -2 +BITMAP +0020 +3D24 +24A8 +2420 +25FC +3D04 +2504 +25FC +2504 +3DFC +2504 +2504 +25FC +4400 +5488 +8904 +ENDCHAR +STARTCHAR uni441E +ENCODING 17438 +BBX 15 15 0 -2 +BITMAP +7BDE +4842 +4842 +4BDE +7A10 +4A10 +4BDE +4842 +7A52 +494A +494A +4A52 +4842 +4A94 +9908 +ENDCHAR +STARTCHAR uni441F +ENCODING 17439 +BBX 15 16 0 -2 +BITMAP +0088 +7888 +4BFE +4888 +49FC +7888 +4BFE +4820 +49FC +7924 +49FC +4924 +4BFE +4904 +4914 +9908 +ENDCHAR +STARTCHAR uni4420 +ENCODING 17440 +BBX 15 16 0 -2 +BITMAP +0088 +3C88 +27FE +24A8 +2410 +3FFE +2480 +2480 +24FC +3C00 +24A8 +24A8 +24A8 +44AA +552A +8A06 +ENDCHAR +STARTCHAR uni4421 +ENCODING 17441 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0284 +7D78 +2550 +2548 +4D64 +0100 +3FF8 +2288 +2448 +2108 +2288 +2448 +2018 +ENDCHAR +STARTCHAR uni4422 +ENCODING 17442 +BBX 14 15 1 -1 +BITMAP +0100 +79FC +4A44 +4D54 +4954 +79F4 +4884 +4918 +49FC +7A44 +4D54 +4954 +49F4 +8884 +9918 +ENDCHAR +STARTCHAR uni4423 +ENCODING 17443 +BBX 14 15 0 -2 +BITMAP +3CF8 +2488 +2488 +24F8 +3C00 +25FC +2504 +25FC +3D04 +25FC +2504 +25FC +4450 +5488 +8904 +ENDCHAR +STARTCHAR uni4424 +ENCODING 17444 +BBX 15 16 0 -2 +BITMAP +0084 +3C44 +2448 +25FE +2420 +3CFC +2420 +25FE +2440 +3C80 +24FE +2510 +2610 +4410 +55FE +8800 +ENDCHAR +STARTCHAR uni4425 +ENCODING 17445 +BBX 15 16 0 -2 +BITMAP +0090 +7888 +4904 +4A42 +4C88 +79FC +4804 +4800 +4BDE +7842 +4A52 +494A +4A52 +4842 +494A +9884 +ENDCHAR +STARTCHAR uni4426 +ENCODING 17446 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +24FC +2420 +2420 +3DFE +2440 +2484 +25FE +3C02 +25FC +2554 +2554 +4554 +57FE +8800 +ENDCHAR +STARTCHAR uni4427 +ENCODING 17447 +BBX 14 16 0 -2 +BITMAP +0040 +7820 +4BFC +4800 +49F8 +7908 +49F8 +4800 +4BFC +7A04 +4AF4 +4A94 +4AF4 +4A04 +4A14 +9A08 +ENDCHAR +STARTCHAR uni4428 +ENCODING 17448 +BBX 15 16 0 -2 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FE86 +8200 +7CFC +0044 +7C44 +4428 +7C28 +4410 +7C28 +4444 +4D82 +ENDCHAR +STARTCHAR uni4429 +ENCODING 17449 +BBX 15 16 0 -2 +BITMAP +0020 +3D24 +2524 +2524 +25FC +3C00 +27FE +2400 +25FC +3D04 +2504 +25FC +2488 +4450 +57FE +8800 +ENDCHAR +STARTCHAR uni442A +ENCODING 17450 +BBX 15 16 0 -2 +BITMAP +00A0 +7890 +49FE +4B20 +4DFC +7920 +49FC +4920 +49FE +7900 +4BFC +4888 +489E +4902 +4A0A +9C04 +ENDCHAR +STARTCHAR uni442B +ENCODING 17451 +BBX 15 16 0 -2 +BITMAP +0124 +7924 +4A24 +4C24 +4954 +794A +4A92 +4E10 +4A10 +7A50 +4A5C +4A50 +4A50 +4AB0 +4A9E +9B00 +ENDCHAR +STARTCHAR uni442C +ENCODING 17452 +BBX 15 16 0 -2 +BITMAP +0090 +7890 +4FFE +4890 +4BFC +7A94 +4BFC +4A94 +4BFC +7800 +49F8 +4908 +49F8 +4908 +49F8 +9908 +ENDCHAR +STARTCHAR uni442D +ENCODING 17453 +BBX 15 16 0 -2 +BITMAP +02A8 +72A8 +57FC +52A8 +52AA +74E6 +5800 +57FC +5444 +7040 +53F8 +5248 +5248 +5248 +5258 +B040 +ENDCHAR +STARTCHAR uni442E +ENCODING 17454 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFC +4800 +4908 +7890 +4BFE +4A20 +4AA0 +7AFC +4B20 +4A20 +4AFC +4A20 +4C20 +99FE +ENDCHAR +STARTCHAR uni442F +ENCODING 17455 +BBX 15 15 0 -2 +BITMAP +3DFC +2524 +25FC +2524 +3DFC +2440 +2488 +25F0 +3C20 +2444 +27FE +2422 +4524 +5622 +8860 +ENDCHAR +STARTCHAR uni4430 +ENCODING 17456 +BBX 15 16 0 -2 +BITMAP +0120 +793C +4944 +4AA8 +4A10 +7EA8 +4AC6 +4ABC +4AA4 +7ABC +4AA4 +4ABC +4A24 +4A24 +4A24 +9A2C +ENDCHAR +STARTCHAR uni4431 +ENCODING 17457 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4888 +4850 +7BFE +4A22 +4AFA +4A22 +7AFA +4A8A +4A8A +4AFA +4A02 +4A0A +9A04 +ENDCHAR +STARTCHAR uni4432 +ENCODING 17458 +BBX 15 15 0 -2 +BITMAP +7BDE +4842 +4A52 +494A +7A52 +4842 +4820 +49FC +7904 +4904 +49FC +4904 +4904 +49FC +9904 +ENDCHAR +STARTCHAR uni4433 +ENCODING 17459 +BBX 15 16 0 -2 +BITMAP +0040 +3C40 +24F8 +2508 +2610 +3DFC +2524 +2524 +25FC +3D24 +2524 +25FC +2400 +4554 +552A +8A2A +ENDCHAR +STARTCHAR uni4434 +ENCODING 17460 +BBX 14 16 1 -2 +BITMAP +FBF8 +8840 +FA40 +8BFC +F8A0 +90A4 +A924 +CA1C +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +20A0 +2040 +ENDCHAR +STARTCHAR uni4435 +ENCODING 17461 +BBX 15 16 0 -2 +BITMAP +0088 +3C88 +25FC +2488 +2488 +3FFE +2420 +25FC +2524 +3DFC +2524 +25FC +2400 +4488 +5504 +8A02 +ENDCHAR +STARTCHAR uni4436 +ENCODING 17462 +BBX 15 15 0 -2 +BITMAP +7BDE +4888 +4AA8 +4BFE +7988 +4ADA +4CA6 +49F8 +7908 +4908 +49F8 +4908 +4908 +49F8 +9908 +ENDCHAR +STARTCHAR uni4437 +ENCODING 17463 +BBX 15 15 0 -2 +BITMAP +7BDE +4A52 +4A52 +4BDE +7800 +49FC +4924 +49FC +7924 +49FC +4820 +4BFE +4820 +4820 +9820 +ENDCHAR +STARTCHAR uni4438 +ENCODING 17464 +BBX 15 16 0 -2 +BITMAP +0020 +3DFC +2424 +27FE +2424 +3DFC +2420 +27FE +2400 +3DFC +2524 +25FC +2524 +45FC +5400 +8BFE +ENDCHAR +STARTCHAR uni4439 +ENCODING 17465 +BBX 15 16 0 -2 +BITMAP +0020 +79FC +4824 +4BFE +4824 +79FC +4820 +4AAA +4BAE +7A22 +4BFE +4A22 +4BAE +4AAA +4AAA +9C22 +ENDCHAR +STARTCHAR uni443A +ENCODING 17466 +BBX 15 15 0 -2 +BITMAP +7BFE +4850 +4BFE +4A52 +7BFE +4800 +49FC +4904 +79FC +4904 +49FC +4820 +4BFE +4820 +9820 +ENDCHAR +STARTCHAR uni443B +ENCODING 17467 +BBX 15 16 0 -2 +BITMAP +0020 +7BFE +4820 +49FC +4904 +79FC +4820 +49FC +4888 +7850 +4BFE +4820 +49FC +4820 +4820 +9820 +ENDCHAR +STARTCHAR uni443C +ENCODING 17468 +BBX 15 16 0 -2 +BITMAP +0080 +7BDE +488A +49CA +488A +7BD2 +48A6 +4840 +4888 +79F0 +4824 +4BFE +4822 +4924 +4AA2 +9840 +ENDCHAR +STARTCHAR uni443D +ENCODING 17469 +BBX 15 16 0 -2 +BITMAP +0088 +7888 +4BFE +4888 +4888 +78F8 +4820 +4BFE +4A22 +7B32 +4AAA +4B76 +4A22 +4A22 +4A2A +9A24 +ENDCHAR +STARTCHAR uni443E +ENCODING 17470 +BBX 15 15 0 -2 +BITMAP +3DFC +2554 +25FC +2420 +3DFC +2420 +27FE +2488 +3C50 +25FC +2420 +27FE +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni443F +ENCODING 17471 +BBX 15 16 0 -2 +BITMAP +0040 +7880 +4BFE +4A22 +4AAA +7A22 +4BFE +4A72 +4AAA +7A02 +4820 +4BFE +4820 +4850 +4888 +9B06 +ENDCHAR +STARTCHAR uni4440 +ENCODING 17472 +BBX 15 16 0 -2 +BITMAP +0010 +7BC8 +4A7E +4A40 +4A62 +7BD4 +4A00 +4A3E +4BC8 +7A48 +4E7E +4A48 +4A48 +4BC8 +4A48 +9808 +ENDCHAR +STARTCHAR uni4441 +ENCODING 17473 +BBX 15 16 0 -2 +BITMAP +3AB8 +2108 +3AB8 +2288 +3938 +2288 +7FFE +4002 +9FF4 +1010 +1FF0 +1010 +1FF0 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni4442 +ENCODING 17474 +BBX 15 16 0 -2 +BITMAP +0140 +7A4C +4A64 +4A44 +4B4C +7A64 +4AA4 +4BAC +4AA4 +7AA4 +4FFE +4800 +4910 +4908 +4A04 +9C04 +ENDCHAR +STARTCHAR uni4443 +ENCODING 17475 +BBX 15 16 0 -2 +BITMAP +0088 +3DFE +2488 +25FE +3502 +2CFC +2400 +25FE +2C20 +3450 +25AA +245C +25AA +4448 +55A8 +8810 +ENDCHAR +STARTCHAR uni4444 +ENCODING 17476 +BBX 15 16 0 -2 +BITMAP +0040 +3CF8 +2488 +24F8 +2488 +3CF8 +2400 +25FC +2524 +3DFC +2524 +25FC +2400 +47FE +5488 +8908 +ENDCHAR +STARTCHAR uni4445 +ENCODING 17477 +BBX 15 16 0 -2 +BITMAP +0088 +7BFE +4888 +49FC +4954 +7954 +49FC +4800 +4BFE +7A42 +48F8 +4888 +4948 +4830 +4860 +9B80 +ENDCHAR +STARTCHAR uni4446 +ENCODING 17478 +BBX 15 16 0 -2 +BITMAP +0108 +7890 +4BFC +4840 +49F8 +7880 +4BFC +4948 +49FC +7B0A +4DF8 +4908 +49FA +4934 +498C +9902 +ENDCHAR +STARTCHAR uni4447 +ENCODING 17479 +BBX 15 16 0 -2 +BITMAP +0042 +7B9C +4A10 +4BDE +4A94 +7A94 +4C20 +4BFC +4A04 +7BFC +4A04 +4BFC +4A04 +4BFC +4908 +9A04 +ENDCHAR +STARTCHAR uni4448 +ENCODING 17480 +BBX 15 16 0 -2 +BITMAP +0124 +7974 +4A58 +4ADA +4BFE +7954 +4ADA +4BFE +48A2 +7820 +4BFE +4870 +48A8 +4924 +4A22 +9820 +ENDCHAR +STARTCHAR uni4449 +ENCODING 17481 +BBX 15 16 0 -2 +BITMAP +E040 +BFFE +A400 +A7FC +A000 +E7FC +A404 +A7FC +A040 +EE4E +ABEA +AEAA +AAAE +AE4A +2AAA +7710 +ENDCHAR +STARTCHAR uni444A +ENCODING 17482 +BBX 15 16 0 -2 +BITMAP +0010 +787C +4A54 +497C +4910 +78FE +4844 +4B7C +4944 +797C +4944 +497C +4928 +4944 +4A80 +9C7E +ENDCHAR +STARTCHAR uni444B +ENCODING 17483 +BBX 15 16 0 -2 +BITMAP +0020 +7BFE +4800 +49DC +4954 +79DC +4888 +4BFE +4888 +7BFE +4888 +4BFE +4894 +4988 +4AA4 +98C2 +ENDCHAR +STARTCHAR uni444C +ENCODING 17484 +BBX 15 16 0 -2 +BITMAP +03DE +7A52 +4BDE +4A52 +4BDE +7A22 +4AFA +4A22 +4AFA +7AAA +4AFA +4AAA +4AFA +4A72 +4AAA +9A26 +ENDCHAR +STARTCHAR uni444D +ENCODING 17485 +BBX 15 16 0 -2 +BITMAP +03DE +7A52 +4BDE +4A52 +4BDE +7A52 +4BDE +498C +4A52 +7840 +4FFE +4888 +4990 +4860 +48D8 +9B04 +ENDCHAR +STARTCHAR uni444E +ENCODING 17486 +BBX 15 16 0 -2 +BITMAP +0148 +794C +4AAA +4808 +4FFE +7948 +4B68 +494A +4B6A +794C +4B6C +4948 +496A +4B9A +4826 +9842 +ENDCHAR +STARTCHAR uni444F +ENCODING 17487 +BBX 15 16 0 -2 +BITMAP +0088 +7BFE +4888 +4BDE +4A52 +7BDE +48A0 +4890 +49FE +7920 +4BFC +4D20 +49FC +4920 +49FE +9900 +ENDCHAR +STARTCHAR uni4450 +ENCODING 17488 +BBX 14 16 1 -2 +BITMAP +0080 +FC80 +9080 +91FC +9100 +FD00 +8620 +8420 +84B0 +FCA8 +9128 +9124 +9224 +9020 +FCA0 +0040 +ENDCHAR +STARTCHAR uni4451 +ENCODING 17489 +BBX 14 16 1 -2 +BITMAP +0050 +FD54 +90D8 +9050 +91FC +FC88 +8450 +85FC +8420 +FCF8 +9020 +91FC +9020 +9050 +FC88 +0104 +ENDCHAR +STARTCHAR uni4452 +ENCODING 17490 +BBX 14 15 0 -2 +BITMAP +FE00 +11FC +2024 +2824 +44A4 +FEA4 +12A4 +1124 +1024 +7C24 +1044 +1044 +1E84 +F114 +4208 +ENDCHAR +STARTCHAR uni4453 +ENCODING 17491 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +7FFC +0820 +0FE0 +0820 +FFFE +8002 +BFFA +0810 +3FE8 +0100 +1FF0 +0100 +FFFE +ENDCHAR +STARTCHAR uni4454 +ENCODING 17492 +BBX 15 16 0 -2 +BITMAP +0020 +4020 +9820 +8BFE +8820 +8820 +89FC +D924 +8924 +8924 +8924 +8934 +F928 +8820 +0020 +0020 +ENDCHAR +STARTCHAR uni4455 +ENCODING 17493 +BBX 15 16 0 -2 +BITMAP +0600 +38F8 +2008 +3EF8 +2008 +3FF8 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +210A +410A +4106 +8102 +ENDCHAR +STARTCHAR uni4456 +ENCODING 17494 +BBX 15 16 0 -2 +BITMAP +0020 +4020 +9BFE +8820 +89FC +8824 +8BFE +D824 +89FC +8820 +8920 +893E +F920 +8AA0 +027E +0400 +ENDCHAR +STARTCHAR uni4457 +ENCODING 17495 +BBX 15 15 0 -2 +BITMAP +41F8 +9908 +89F8 +8908 +89F8 +8800 +DBFE +8900 +89FC +8A54 +8C94 +F924 +8A44 +00A8 +0110 +ENDCHAR +STARTCHAR uni4458 +ENCODING 17496 +BBX 15 15 0 -1 +BITMAP +0108 +4088 +9890 +8BFC +8840 +89F8 +8840 +DBFE +8880 +8900 +89FC +8A20 +FC20 +8820 +03FE +ENDCHAR +STARTCHAR uni4459 +ENCODING 17497 +BBX 15 16 0 -2 +BITMAP +0800 +1CFC +7084 +1084 +1084 +FDFE +1084 +1084 +7C84 +45FE +4484 +4484 +4484 +7C84 +4494 +0088 +ENDCHAR +STARTCHAR uni445A +ENCODING 17498 +BBX 14 16 0 -2 +BITMAP +0800 +1CFC +7084 +1084 +1084 +FCFC +1084 +1084 +7C84 +44FC +4484 +4484 +4484 +7C84 +4514 +0208 +ENDCHAR +STARTCHAR uni445B +ENCODING 17499 +BBX 15 15 1 -1 +BITMAP +1C18 +F1F0 +1110 +1110 +1110 +FDFE +1110 +1110 +1110 +7D10 +45D0 +4708 +440A +47EA +7C04 +ENDCHAR +STARTCHAR uni445C +ENCODING 17500 +BBX 15 16 0 -2 +BITMAP +0848 +1D48 +7148 +13FE +1148 +FD48 +1178 +1100 +7DFE +4420 +47FE +4470 +44A8 +7D24 +4622 +0020 +ENDCHAR +STARTCHAR uni445D +ENCODING 17501 +BBX 15 15 0 -2 +BITMAP +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +9022 +1020 +3DF8 +4420 +A520 +1920 +11FC +2020 +4020 +ENDCHAR +STARTCHAR uni445E +ENCODING 17502 +BBX 15 16 0 -2 +BITMAP +3FFC +2490 +2960 +2610 +3888 +2290 +2560 +2210 +2C08 +3FFC +1010 +3EFC +4210 +1490 +18FE +E010 +ENDCHAR +STARTCHAR uni445F +ENCODING 17503 +BBX 15 16 0 -2 +BITMAP +0F10 +F020 +117C +8944 +427C +0044 +FF7C +8100 +42FE +7710 +9210 +5A7C +2F10 +2210 +42FE +8200 +ENDCHAR +STARTCHAR uni4460 +ENCODING 17504 +BBX 14 16 0 -2 +BITMAP +0800 +11FC +3E04 +2208 +3210 +2A20 +2A20 +FE20 +2220 +3220 +2A20 +2A20 +2220 +4220 +4AA0 +8440 +ENDCHAR +STARTCHAR uni4461 +ENCODING 17505 +BBX 15 16 0 -2 +BITMAP +1000 +21F8 +7C88 +44C8 +64A8 +54A8 +5488 +FC50 +4450 +6450 +5420 +5420 +4450 +4488 +5504 +8A02 +ENDCHAR +STARTCHAR uni4462 +ENCODING 17506 +BBX 15 16 0 -2 +BITMAP +1000 +2000 +7DFC +4490 +6490 +5490 +5490 +FC90 +4490 +6490 +5490 +5492 +4492 +4492 +550E +8A00 +ENDCHAR +STARTCHAR uni4463 +ENCODING 17507 +BBX 15 16 0 -2 +BITMAP +0804 +1004 +3F08 +2110 +2920 +2544 +2504 +FF08 +2110 +2922 +2542 +2504 +2108 +4110 +4520 +82C0 +ENDCHAR +STARTCHAR uni4464 +ENCODING 17508 +BBX 15 16 0 -2 +BITMAP +0820 +1020 +3E50 +2250 +3288 +2B44 +2A22 +FE20 +2200 +33FC +2A04 +2A08 +2208 +4210 +4A10 +8420 +ENDCHAR +STARTCHAR uni4465 +ENCODING 17509 +BBX 15 16 0 -2 +BITMAP +0800 +10FC +3E44 +2248 +3248 +2A50 +2A5C +FE44 +2244 +3244 +2A68 +2AA8 +2290 +4298 +4B24 +8442 +ENDCHAR +STARTCHAR uni4466 +ENCODING 17510 +BBX 14 16 0 -2 +BITMAP +0840 +1040 +3E80 +22FC +3304 +2A04 +2AF4 +FE94 +2294 +3294 +2AF4 +2A94 +2204 +4204 +4A28 +8410 +ENDCHAR +STARTCHAR uni4467 +ENCODING 17511 +BBX 15 16 0 -2 +BITMAP +1088 +2088 +7888 +4908 +697E +5B08 +4D08 +F948 +4928 +4928 +6908 +5908 +4908 +4908 +4928 +9910 +ENDCHAR +STARTCHAR uni4468 +ENCODING 17512 +BBX 15 16 0 -2 +BITMAP +1080 +2080 +7CFE +4500 +6620 +5520 +552C +FD74 +47A4 +6524 +5534 +5528 +4522 +4502 +54FE +8800 +ENDCHAR +STARTCHAR uni4469 +ENCODING 17513 +BBX 15 16 0 -2 +BITMAP +0810 +1010 +3E10 +2210 +32FE +2A10 +2A10 +FE10 +227C +3244 +2A44 +2A44 +2244 +4244 +4A7C +8444 +ENDCHAR +STARTCHAR uni446A +ENCODING 17514 +BBX 15 16 0 -2 +BITMAP +0820 +1020 +3E50 +2250 +3288 +2B04 +2AFA +FE00 +2200 +32F8 +2A88 +2A88 +2288 +4288 +4AF8 +8488 +ENDCHAR +STARTCHAR uni446B +ENCODING 17515 +BBX 15 16 0 -2 +BITMAP +0884 +1048 +3E00 +22FC +3248 +2A48 +2A48 +FE48 +23FE +3248 +2A48 +2A48 +2248 +4288 +4A88 +8508 +ENDCHAR +STARTCHAR uni446C +ENCODING 17516 +BBX 15 16 0 -2 +BITMAP +0850 +1050 +3E50 +2352 +32D4 +2A58 +2A50 +FE58 +22D4 +3352 +2A50 +2A50 +2292 +4292 +4B12 +860E +ENDCHAR +STARTCHAR uni446D +ENCODING 17517 +BBX 15 16 0 -2 +BITMAP +1000 +2100 +7CBE +4488 +6408 +5608 +5508 +FD48 +4448 +6488 +5788 +5488 +4488 +44FE +5480 +8800 +ENDCHAR +STARTCHAR uni446E +ENCODING 17518 +BBX 15 16 0 -2 +BITMAP +1000 +20F8 +7C88 +4488 +6488 +5488 +5526 +FE20 +45FE +6420 +5470 +54A8 +4524 +4622 +5420 +8820 +ENDCHAR +STARTCHAR uni446F +ENCODING 17519 +BBX 15 16 0 -2 +BITMAP +1108 +2088 +7C90 +45FC +6424 +5424 +55FC +FD20 +4520 +65FE +5462 +54A2 +452A +4624 +5420 +8820 +ENDCHAR +STARTCHAR uni4470 +ENCODING 17520 +BBX 15 16 0 -2 +BITMAP +0810 +1010 +3E90 +229E +3290 +2A90 +2BFE +FE00 +2210 +3292 +2A92 +2B14 +2204 +4208 +4A30 +85C0 +ENDCHAR +STARTCHAR uni4471 +ENCODING 17521 +BBX 15 16 0 -2 +BITMAP +1040 +2020 +7BFE +4A02 +6D04 +5900 +49DE +FA52 +4A52 +4B52 +6C9A +5894 +4910 +4912 +4A12 +9C0E +ENDCHAR +STARTCHAR uni4472 +ENCODING 17522 +BBX 15 16 0 -2 +BITMAP +0820 +1020 +3E3E +2220 +32FC +2A84 +2AFC +FE84 +22FC +32A4 +2A20 +2BFE +2220 +4220 +4A20 +8420 +ENDCHAR +STARTCHAR uni4473 +ENCODING 17523 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +7C50 +4488 +6504 +56FA +5400 +FDFC +4554 +6554 +55FC +5554 +4554 +4554 +5504 +890C +ENDCHAR +STARTCHAR uni4474 +ENCODING 17524 +BBX 15 16 0 -2 +BITMAP +0844 +1044 +3EFE +2244 +3244 +2A7C +2A44 +FE44 +227C +3244 +2A44 +2AFE +2200 +4228 +4A44 +8482 +ENDCHAR +STARTCHAR uni4475 +ENCODING 17525 +BBX 15 16 0 -2 +BITMAP +1000 +21FE +7D02 +457A +6502 +557A +5400 +FCFC +4484 +64FC +5484 +54FC +4484 +4484 +5494 +8888 +ENDCHAR +STARTCHAR uni4476 +ENCODING 17526 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +7DFE +4420 +55FC +5420 +45FE +FE00 +45FC +5524 +5524 +55FC +5504 +8504 +8D0C +ENDCHAR +STARTCHAR uni4477 +ENCODING 17527 +BBX 15 16 0 -2 +BITMAP +1020 +2010 +7DFE +4502 +6502 +55FE +5500 +FD7E +4542 +657E +5542 +557E +4542 +4542 +554A +8A44 +ENDCHAR +STARTCHAR uni4478 +ENCODING 17528 +BBX 15 16 0 -2 +BITMAP +0820 +1010 +3EFE +2282 +3200 +2A7C +2A00 +FE00 +22FE +3210 +2A10 +2A54 +2252 +4292 +4A50 +8420 +ENDCHAR +STARTCHAR uni4479 +ENCODING 17529 +BBX 15 16 0 -2 +BITMAP +1040 +2020 +7BFE +4A22 +68A4 +5928 +4850 +F888 +4904 +48F8 +6888 +5888 +4850 +4820 +48D8 +9B06 +ENDCHAR +STARTCHAR uni447A +ENCODING 17530 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +7D04 +4534 +55C4 +5544 +45F4 +FF54 +4554 +55F4 +5544 +5554 +5574 +85CA +8E02 +ENDCHAR +STARTCHAR uni447B +ENCODING 17531 +BBX 15 16 0 -2 +BITMAP +1108 +2088 +7888 +4BDE +6910 +5920 +49DE +F942 +4944 +4944 +695E +5944 +4A44 +4A44 +4CD4 +9808 +ENDCHAR +STARTCHAR uni447C +ENCODING 17532 +BBX 15 16 0 -2 +BITMAP +1040 +2040 +7CFE +4522 +64AA +54FA +5442 +FC94 +4548 +64FE +5522 +56AA +44FA +4442 +5494 +8908 +ENDCHAR +STARTCHAR uni447D +ENCODING 17533 +BBX 15 16 0 -2 +BITMAP +1000 +21FC +7904 +49FC +6904 +59FC +4800 +FBDE +4842 +4A52 +694A +58C6 +4B5A +4842 +494A +9884 +ENDCHAR +STARTCHAR uni447E +ENCODING 17534 +BBX 15 16 0 -2 +BITMAP +10A0 +2090 +79FE +4B20 +69FC +5920 +49FC +F920 +49FE +4900 +6BF8 +5908 +4890 +4860 +4998 +9E06 +ENDCHAR +STARTCHAR uni447F +ENCODING 17535 +BBX 15 16 0 -2 +BITMAP +1020 +2010 +7BFE +4A02 +6880 +58FE +4910 +FB20 +4D7C +4944 +6944 +597C +4944 +4944 +497C +9944 +ENDCHAR +STARTCHAR uni4480 +ENCODING 17536 +BBX 15 16 0 -2 +BITMAP +1110 +2110 +79DE +4AA8 +6C44 +5888 +4888 +F908 +4B7E +4D08 +6948 +5928 +4908 +4908 +4928 +9910 +ENDCHAR +STARTCHAR uni4481 +ENCODING 17537 +BBX 15 16 0 -2 +BITMAP +1000 +23DE +7842 +4A52 +694A +5A52 +4842 +F820 +49FC +4904 +6904 +59FC +4904 +4904 +49FC +9904 +ENDCHAR +STARTCHAR uni4482 +ENCODING 17538 +BBX 15 16 0 -2 +BITMAP +1090 +2290 +7A9E +4AA2 +6AD4 +5BA8 +4894 +F8A4 +4FFE +4A84 +6AA4 +5A94 +4A94 +4A84 +4C94 +9888 +ENDCHAR +STARTCHAR uni4483 +ENCODING 17539 +BBX 15 16 0 -2 +BITMAP +1010 +2050 +7A50 +497C +6890 +5810 +48FE +FB00 +497C +4944 +6944 +597C +4944 +4900 +4AFE +9C00 +ENDCHAR +STARTCHAR uni4484 +ENCODING 17540 +BBX 15 16 0 -2 +BITMAP +1000 +2000 +7BFE +4A02 +69FC +5800 +48F8 +F888 +48F8 +4800 +69FC +5924 +49FC +4924 +49FC +9904 +ENDCHAR +STARTCHAR uni4485 +ENCODING 17541 +BBX 15 16 0 -2 +BITMAP +1020 +2124 +7CA8 +45FC +6440 +57FE +5488 +FD04 +47FE +6504 +55FC +5504 +45FC +4504 +55FC +8904 +ENDCHAR +STARTCHAR uni4486 +ENCODING 17542 +BBX 15 16 0 -2 +BITMAP +1108 +2088 +7BE8 +4910 +6A9E +5FD4 +4864 +FBD4 +4A54 +4BD4 +6A54 +5BC8 +4A48 +4A54 +4A64 +9AC2 +ENDCHAR +STARTCHAR uni4487 +ENCODING 17543 +BBX 15 16 0 -2 +BITMAP +1040 +2020 +7BFE +4A02 +69FC +5800 +48F8 +F888 +48F8 +4800 +69FC +5924 +49FC +4924 +49FC +9904 +ENDCHAR +STARTCHAR uni4488 +ENCODING 17544 +BBX 15 16 0 -2 +BITMAP +1020 +21FC +7C20 +4488 +67FE +5488 +55FC +FD04 +45FC +6504 +55FC +5504 +45FC +4488 +5504 +8A02 +ENDCHAR +STARTCHAR uni4489 +ENCODING 17545 +BBX 15 16 0 -2 +BITMAP +1080 +2100 +7BFE +4D54 +6954 +5BFE +4954 +F954 +4BFE +4904 +69DE +5A44 +4954 +489E +4904 +9A04 +ENDCHAR +STARTCHAR uni448A +ENCODING 17546 +BBX 15 16 0 -2 +BITMAP +0440 +2440 +22FC +2288 +4310 +40FC +BEA4 +10A4 +20A4 +3EFC +0280 +0280 +0282 +0282 +147E +0800 +ENDCHAR +STARTCHAR uni448B +ENCODING 17547 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10FC +7C88 +5510 +54FC +54A4 +54A4 +54A4 +FEFC +1080 +1080 +2882 +2482 +447E +8000 +ENDCHAR +STARTCHAR uni448C +ENCODING 17548 +BBX 15 16 0 -2 +BITMAP +0020 +FF20 +817C +0044 +7E88 +427C +7E54 +4254 +7E54 +107C +0840 +FF40 +0042 +2442 +423E +8100 +ENDCHAR +STARTCHAR uni448D +ENCODING 17549 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +FEFC +0088 +4510 +28FC +FEA4 +A2A4 +10A4 +FEFC +2080 +3C80 +2482 +4482 +547E +8800 +ENDCHAR +STARTCHAR uni448E +ENCODING 17550 +BBX 15 16 0 -2 +BITMAP +2420 +2420 +FF7C +2444 +1288 +FE7C +2454 +4254 +8154 +247C +2440 +FF40 +2442 +2442 +443E +8400 +ENDCHAR +STARTCHAR uni448F +ENCODING 17551 +BBX 15 16 0 -2 +BITMAP +4440 +2440 +28FC +FE88 +9310 +D6FC +BAA4 +92A4 +FEA4 +00FC +7C80 +4480 +7C82 +4482 +7C7E +4400 +ENDCHAR +STARTCHAR uni4490 +ENCODING 17552 +BBX 15 16 0 -2 +BITMAP +2220 +FFA0 +227C +7F44 +5588 +7F7C +0054 +FFD4 +80D4 +3E7C +2240 +3E40 +2242 +3E42 +223E +3E00 +ENDCHAR +STARTCHAR uni4491 +ENCODING 17553 +BBX 15 5 1 5 +BITMAP +2010 +1010 +0820 +0840 +FFFE +ENDCHAR +STARTCHAR uni4492 +ENCODING 17554 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +3FF8 +0008 +0048 +0188 +0608 +1808 +6008 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni4493 +ENCODING 17555 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +FFFE +0400 +0400 +0800 +1FF0 +0010 +0010 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni4494 +ENCODING 17556 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0040 +0440 +0440 +0420 +0820 +0820 +1010 +1010 +2008 +4004 +8002 +ENDCHAR +STARTCHAR uni4495 +ENCODING 17557 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +0100 +0100 +1110 +1108 +2104 +2104 +4102 +8102 +0500 +0200 +ENDCHAR +STARTCHAR uni4496 +ENCODING 17558 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +7FF0 +0410 +0410 +0410 +FFD0 +0412 +040A +0406 +0402 +0400 +ENDCHAR +STARTCHAR uni4497 +ENCODING 17559 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0800 +0800 +1FFC +2000 +4000 +9FE0 +0020 +00C0 +0300 +0C04 +1004 +0FFC +ENDCHAR +STARTCHAR uni4498 +ENCODING 17560 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0400 +0400 +0FF0 +1010 +2820 +4440 +0280 +0100 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni4499 +ENCODING 17561 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0100 +0100 +0100 +0100 +01F8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni449A +ENCODING 17562 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0100 +0100 +1110 +1108 +2104 +2114 +4120 +0040 +0180 +0E00 +F000 +ENDCHAR +STARTCHAR uni449B +ENCODING 17563 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1000 +10FC +2204 +4204 +FC04 +0804 +1004 +2204 +4104 +FF04 +4128 +0010 +ENDCHAR +STARTCHAR uni449C +ENCODING 17564 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +1100 +1100 +1FF8 +2100 +4100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni449D +ENCODING 17565 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0008 +1810 +0660 +0180 +0660 +1818 +6C24 +0240 +0180 +0660 +1818 +E006 +ENDCHAR +STARTCHAR uni449E +ENCODING 17566 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +3FFC +2104 +4108 +0280 +0280 +0480 +0882 +1082 +207E +4000 +ENDCHAR +STARTCHAR uni449F +ENCODING 17567 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +1010 +1210 +1110 +1010 +FFFE +1010 +2010 +2010 +4050 +8020 +ENDCHAR +STARTCHAR uni44A0 +ENCODING 17568 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni44A1 +ENCODING 17569 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7F08 +0108 +0108 +3F08 +2008 +4008 +7F08 +0108 +0108 +0A08 +0408 +ENDCHAR +STARTCHAR uni44A2 +ENCODING 17570 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +0C00 +70FC +4084 +4084 +4084 +4C84 +7094 +4088 +0080 +0080 +ENDCHAR +STARTCHAR uni44A3 +ENCODING 17571 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +1010 +1010 +7FFC +1010 +1010 +7FFC +1010 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni44A4 +ENCODING 17572 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +3FF8 +2008 +2008 +2008 +3FF8 +2008 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni44A5 +ENCODING 17573 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +0100 +0100 +3FF8 +2108 +2108 +2108 +2128 +2110 +0100 +0100 +ENDCHAR +STARTCHAR uni44A6 +ENCODING 17574 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +01F0 +3E00 +0200 +0100 +7FF8 +0060 +0180 +0E00 +3000 +4800 +87FE +ENDCHAR +STARTCHAR uni44A7 +ENCODING 17575 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0400 +0820 +1010 +3FF8 +1008 +ENDCHAR +STARTCHAR uni44A8 +ENCODING 17576 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0800 +0800 +1FF8 +2100 +4100 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni44A9 +ENCODING 17577 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +00F0 +1F00 +0100 +0100 +7FFC +0540 +0920 +3118 +C106 +0100 +0100 +ENDCHAR +STARTCHAR uni44AA +ENCODING 17578 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0400 +0820 +1010 +3FF8 +0008 +0820 +0820 +FFFE +0820 +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni44AB +ENCODING 17579 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0850 +0848 +1040 +307C +57C0 +9040 +1020 +1020 +1014 +100C +1004 +ENDCHAR +STARTCHAR uni44AC +ENCODING 17580 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +3FF8 +0000 +0000 +FFFE +0100 +1110 +2108 +4104 +8502 +0200 +ENDCHAR +STARTCHAR uni44AD +ENCODING 17581 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +0010 +0010 +7FFC +0000 +0020 +FFFE +0820 +0420 +04A0 +0040 +ENDCHAR +STARTCHAR uni44AE +ENCODING 17582 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFE +4002 +8004 +0FE0 +0820 +0A20 +0920 +0922 +1022 +201E +4000 +ENDCHAR +STARTCHAR uni44AF +ENCODING 17583 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFE +4202 +8204 +1FE0 +0220 +0C20 +0420 +0A20 +1122 +2022 +401E +ENDCHAR +STARTCHAR uni44B0 +ENCODING 17584 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0000 +3FFE +2000 +2FFC +2080 +2080 +27F8 +2080 +2080 +2FFC +2000 +3FFE +ENDCHAR +STARTCHAR uni44B1 +ENCODING 17585 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +FFFE +0440 +3FF0 +0020 +00C0 +7D04 +0588 +0950 +1120 +2118 +C506 +0200 +FFFE +ENDCHAR +STARTCHAR uni44B2 +ENCODING 17586 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1008 +101C +FEE0 +1220 +2220 +2220 +643E +15E0 +0822 +1422 +2222 +C01E +ENDCHAR +STARTCHAR uni44B3 +ENCODING 17587 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF0 +0420 +087C +1004 +6018 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni44B4 +ENCODING 17588 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0400 +0400 +7FFC +0800 +1FF0 +2810 +4FF0 +8810 +0FF0 +0810 +0850 +0820 +ENDCHAR +STARTCHAR uni44B5 +ENCODING 17589 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1000 +11F8 +FC08 +2410 +2420 +25FE +4420 +2420 +1820 +1820 +24A0 +C240 +ENDCHAR +STARTCHAR uni44B6 +ENCODING 17590 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0108 +00B0 +01C2 +0E32 +700E +ENDCHAR +STARTCHAR uni44B7 +ENCODING 17591 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +00F0 +1F00 +0100 +0100 +FFFE +0100 +0100 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni44B8 +ENCODING 17592 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0200 +3FF8 +2448 +2448 +2448 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni44B9 +ENCODING 17593 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +7FFC +0100 +3FF8 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni44BA +ENCODING 17594 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0400 +0820 +1FC0 +0080 +0320 +0C10 +3FF8 +0108 +1110 +2108 +4504 +0200 +ENDCHAR +STARTCHAR uni44BB +ENCODING 17595 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +FFFE +0440 +0800 +087C +0804 +4904 +4904 +497C +4940 +4940 +4F42 +7942 +003E +ENDCHAR +STARTCHAR uni44BC +ENCODING 17596 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0440 +0440 +3FF8 +2448 +2448 +2448 +3FF8 +2448 +2448 +2448 +3FF8 +2008 +ENDCHAR +STARTCHAR uni44BD +ENCODING 17597 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +2008 +2AA8 +2AA8 +2448 +2448 +2AA8 +2AA8 +2008 +2028 +2010 +ENDCHAR +STARTCHAR uni44BE +ENCODING 17598 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0100 +0100 +FFFE +0280 +0484 +1848 +E850 +0820 +0F18 +7806 +ENDCHAR +STARTCHAR uni44BF +ENCODING 17599 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7FFE +4002 +9FF4 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni44C0 +ENCODING 17600 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +7FFC +0100 +0100 +1FF0 +0000 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni44C1 +ENCODING 17601 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +3FF8 +0100 +0100 +FFFE +0000 +0020 +7FFC +0820 +0420 +04A0 +0040 +ENDCHAR +STARTCHAR uni44C2 +ENCODING 17602 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0A20 +0100 +FFFE +0000 +3FF8 +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni44C3 +ENCODING 17603 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +FFFE +0440 +1FF0 +1010 +1FF0 +0000 +3FF8 +2108 +2108 +3FF8 +2002 +2002 +1FFE +ENDCHAR +STARTCHAR uni44C4 +ENCODING 17604 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +4400 +280C +11F0 +2900 +C900 +19FE +2910 +4910 +8910 +0A10 +5210 +2410 +ENDCHAR +STARTCHAR uni44C5 +ENCODING 17605 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +200C +11F0 +1100 +8100 +49FE +4910 +1110 +E110 +2210 +2210 +2410 +ENDCHAR +STARTCHAR uni44C6 +ENCODING 17606 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1000 +100C +11F0 +FD00 +1100 +11FE +1D10 +F110 +1110 +1210 +5210 +2410 +ENDCHAR +STARTCHAR uni44C7 +ENCODING 17607 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +3FF8 +0100 +0100 +FFFE +0440 +2448 +4444 +8842 +0840 +1140 +2080 +ENDCHAR +STARTCHAR uni44C8 +ENCODING 17608 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1000 +10F8 +2088 +4108 +8A06 +1000 +31F8 +5088 +9050 +1020 +10D8 +1706 +ENDCHAR +STARTCHAR uni44C9 +ENCODING 17609 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7E7C +2444 +2448 +4450 +7F48 +1444 +2444 +4454 +8448 +1440 +0840 +ENDCHAR +STARTCHAR uni44CA +ENCODING 17610 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7FFC +0200 +0200 +3FF0 +0410 +0810 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni44CB +ENCODING 17611 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2008 +103C +13E0 +8220 +4A20 +4BFE +1220 +E210 +2212 +228A +2306 +2202 +ENDCHAR +STARTCHAR uni44CC +ENCODING 17612 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +7FFC +0100 +0100 +3FF8 +0000 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni44CD +ENCODING 17613 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +3FF8 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni44CE +ENCODING 17614 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1080 +1080 +14FC +5504 +5A04 +5084 +9044 +1044 +2804 +2404 +4428 +8010 +ENDCHAR +STARTCHAR uni44CF +ENCODING 17615 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +0100 +0300 +0D60 +3118 +C104 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni44D0 +ENCODING 17616 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0100 +7FFC +0440 +0820 +3118 +C106 +3FF8 +0100 +1110 +1114 +1FF4 +0104 +00FC +ENDCHAR +STARTCHAR uni44D1 +ENCODING 17617 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2000 +17FC +9110 +4110 +4110 +17FE +2110 +E110 +2210 +2210 +2410 +0810 +ENDCHAR +STARTCHAR uni44D2 +ENCODING 17618 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1000 +1FF8 +2008 +5FC8 +9248 +1248 +1FC8 +1248 +1248 +1FC8 +0028 +0010 +ENDCHAR +STARTCHAR uni44D3 +ENCODING 17619 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0200 +7FFC +0200 +3FF8 +0400 +FFFE +0820 +1FFC +2020 +4420 +8220 +02A0 +0040 +ENDCHAR +STARTCHAR uni44D4 +ENCODING 17620 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0108 +1FF0 +0160 +7FFC +0C00 +F7F8 +0060 +7FFE +0080 +0080 +0380 +ENDCHAR +STARTCHAR uni44D5 +ENCODING 17621 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +23F0 +1000 +1000 +07FC +7120 +1120 +1224 +1224 +141C +2800 +47FE +ENDCHAR +STARTCHAR uni44D6 +ENCODING 17622 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0100 +7FFE +4002 +8824 +1210 +2208 +1FF0 +0410 +0410 +0810 +10A0 +2040 +ENDCHAR +STARTCHAR uni44D7 +ENCODING 17623 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0440 +0820 +1110 +2208 +C446 +0820 +1FF0 +0110 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni44D8 +ENCODING 17624 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +0840 +1F60 +2250 +5448 +0840 +37FE +C000 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni44D9 +ENCODING 17625 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0070 +1F80 +0100 +FFFE +0100 +0920 +7924 +0928 +0932 +1922 +E91E +0100 +0100 +ENDCHAR +STARTCHAR uni44DA +ENCODING 17626 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1000 +21F8 +4108 +8908 +11F8 +3108 +5108 +91F8 +1108 +1108 +17FE +1000 +ENDCHAR +STARTCHAR uni44DB +ENCODING 17627 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +2008 +3FF8 +2080 +2490 +2490 +27F0 +2080 +4888 +4888 +8FF8 +ENDCHAR +STARTCHAR uni44DC +ENCODING 17628 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2008 +103C +13E0 +8220 +4A20 +4BFE +1220 +E210 +2212 +228A +2326 +2212 +ENDCHAR +STARTCHAR uni44DD +ENCODING 17629 +BBX 15 15 0 -1 +BITMAP +0820 +FFFE +0820 +0000 +1FE0 +0040 +0180 +7FFC +0100 +0500 +0200 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni44DE +ENCODING 17630 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0080 +3FFC +2004 +2004 +3FFC +20A0 +2090 +2FFC +2120 +4210 +4408 +9806 +ENDCHAR +STARTCHAR uni44DF +ENCODING 17631 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +2108 +27C8 +2108 +2FE8 +2008 +27C8 +2448 +47C8 +4028 +8010 +ENDCHAR +STARTCHAR uni44E0 +ENCODING 17632 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0104 +7D98 +0960 +3118 +C506 +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni44E1 +ENCODING 17633 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2820 +2000 +3E7C +4844 +8844 +0844 +FF44 +0844 +1444 +227C +4144 +8000 +ENDCHAR +STARTCHAR uni44E2 +ENCODING 17634 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +2108 +2108 +2FE8 +2108 +27C8 +2448 +27C8 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni44E3 +ENCODING 17635 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +FFFE +0100 +0100 +7FFC +4104 +5144 +4924 +5554 +6594 +4104 +4114 +4108 +ENDCHAR +STARTCHAR uni44E4 +ENCODING 17636 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0800 +1FF8 +2248 +4448 +0888 +1108 +2228 +0410 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni44E5 +ENCODING 17637 +BBX 15 16 0 -2 +BITMAP +0600 +0100 +06C0 +1830 +E44E +3FF8 +0440 +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni44E6 +ENCODING 17638 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0440 +0440 +3FF8 +2448 +2448 +3FF8 +2448 +2448 +FFFE +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni44E7 +ENCODING 17639 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0000 +3FF0 +0020 +00C0 +793C +4904 +4968 +4910 +7928 +0144 +0500 +0200 +FFFE +ENDCHAR +STARTCHAR uni44E8 +ENCODING 17640 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7FFE +4002 +8804 +1FF8 +2100 +0100 +FFFE +0100 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni44E9 +ENCODING 17641 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1020 +11FE +FC20 +1020 +31FC +3884 +5488 +5050 +9020 +10D8 +1306 +ENDCHAR +STARTCHAR uni44EA +ENCODING 17642 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +1FF0 +0800 +1FF8 +2248 +4488 +0908 +1228 +2410 +ENDCHAR +STARTCHAR uni44EB +ENCODING 17643 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0100 +3FF8 +0440 +0820 +FFFE +0010 +1F90 +1090 +1F90 +0010 +0050 +0020 +ENDCHAR +STARTCHAR uni44EC +ENCODING 17644 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +01FC +0100 +3FF8 +2008 +3FF8 +2008 +3FF8 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni44ED +ENCODING 17645 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0104 +3204 +0C24 +3224 +C924 +0824 +FFA4 +0824 +2A24 +4904 +A894 +1008 +ENDCHAR +STARTCHAR uni44EE +ENCODING 17646 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +3E40 +0240 +147E +0888 +FF48 +0A48 +1850 +2850 +4820 +0850 +2888 +1104 +ENDCHAR +STARTCHAR uni44EF +ENCODING 17647 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +3FF8 +0100 +1FF0 +0100 +7FFC +0000 +1FF0 +1210 +FFFE +2090 +3FFC +0010 +0060 +ENDCHAR +STARTCHAR uni44F0 +ENCODING 17648 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7FFC +0440 +3FF8 +2448 +2448 +3FF8 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni44F1 +ENCODING 17649 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0440 +274C +2470 +2442 +2F42 +F03E +0100 +7FFC +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni44F2 +ENCODING 17650 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0908 +0890 +1000 +13FC +3204 +5204 +93FC +1090 +1090 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni44F3 +ENCODING 17651 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0000 +09F8 +1108 +21F8 +4508 +09F8 +1924 +2928 +4910 +0948 +0986 +0900 +ENDCHAR +STARTCHAR uni44F4 +ENCODING 17652 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +FFFE +0200 +3FF8 +2488 +24A8 +2110 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni44F5 +ENCODING 17653 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +1010 +1010 +1FF0 +0000 +7EFC +4284 +4284 +4284 +7EFC +4284 +ENDCHAR +STARTCHAR uni44F6 +ENCODING 17654 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0808 +0808 +FF88 +0848 +7F48 +4948 +7F48 +1C48 +2A48 +4908 +8828 +0810 +ENDCHAR +STARTCHAR uni44F7 +ENCODING 17655 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +08A0 +2100 +123C +9480 +4100 +437E +1508 +2108 +E108 +2108 +2108 +2128 +2110 +ENDCHAR +STARTCHAR uni44F8 +ENCODING 17656 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0800 +7EF8 +1220 +2420 +1820 +65FC +0820 +7E20 +1220 +2420 +1820 +6420 +ENDCHAR +STARTCHAR uni44F9 +ENCODING 17657 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0280 +0E60 +3118 +DFE6 +1020 +1FE0 +1020 +1FE0 +1008 +1190 +1460 +1810 +ENDCHAR +STARTCHAR uni44FA +ENCODING 17658 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1010 +0820 +7FFC +0100 +3FF8 +0100 +FFFE +0100 +7FFC +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni44FB +ENCODING 17659 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7FFE +4002 +BE24 +0020 +01FC +7E48 +14C8 +1430 +146A +2586 +2402 +43FE +ENDCHAR +STARTCHAR uni44FC +ENCODING 17660 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1088 +1084 +13FE +FCA4 +24A8 +24B4 +24A8 +48B2 +28A4 +10AA +2932 +4522 +82DE +ENDCHAR +STARTCHAR uni44FD +ENCODING 17661 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +2000 +10FC +FE04 +0004 +7C04 +00FC +7C80 +0080 +7C80 +4482 +7C82 +447E +ENDCHAR +STARTCHAR uni44FE +ENCODING 17662 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2040 +1248 +4444 +2014 +0860 +7380 +2000 +0400 +FFFE +0820 +07C0 +7838 +ENDCHAR +STARTCHAR uni44FF +ENCODING 17663 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +3FE0 +0440 +0280 +7FFC +4444 +4284 +5FF4 +4104 +7FFC +4104 +4104 +7FFC +ENDCHAR +STARTCHAR uni4500 +ENCODING 17664 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1038 +13C0 +2040 +27FC +6150 +A248 +2446 +2080 +2FFE +2110 +2320 +20E0 +2718 +ENDCHAR +STARTCHAR uni4501 +ENCODING 17665 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +0440 +3FF8 +2448 +3FF8 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni4502 +ENCODING 17666 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +7FFE +4202 +8104 +3FF8 +0820 +0440 +FFFE +0100 +3FF8 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4503 +ENCODING 17667 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2000 +11F8 +FD08 +0908 +11F8 +3908 +5508 +95F8 +1108 +1108 +17FE +1000 +ENDCHAR +STARTCHAR uni4504 +ENCODING 17668 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +00FC +7F00 +2208 +1110 +2020 +3FF8 +4100 +0100 +FFFE +0100 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni4505 +ENCODING 17669 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7FFC +0020 +1F20 +1120 +1F20 +0000 +FFFC +0020 +1F20 +1120 +1F20 +0060 +ENDCHAR +STARTCHAR uni4506 +ENCODING 17670 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +4400 +29FC +1124 +29FC +4924 +99FC +2820 +49FC +8820 +0820 +53FE +2000 +ENDCHAR +STARTCHAR uni4507 +ENCODING 17671 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0100 +2108 +2108 +3FF8 +0000 +7FFC +0000 +1FF0 +1010 +1FF0 +0820 +0440 +FFFE +ENDCHAR +STARTCHAR uni4508 +ENCODING 17672 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3FF8 +0100 +FFFE +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uni4509 +ENCODING 17673 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0C1C +71E0 +1020 +1020 +FDFE +3070 +38A8 +54A8 +5124 +9222 +1020 +1020 +ENDCHAR +STARTCHAR uni450A +ENCODING 17674 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0108 +FC90 +11FC +1090 +1090 +7C90 +13FE +1090 +1C90 +F110 +4110 +0210 +ENDCHAR +STARTCHAR uni450B +ENCODING 17675 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1020 +2420 +7CA8 +08A4 +1122 +2522 +7E28 +0010 +5420 +54C0 +8300 +ENDCHAR +STARTCHAR uni450C +ENCODING 17676 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +7FFC +0820 +3118 +CFE6 +0100 +0100 +ENDCHAR +STARTCHAR uni450D +ENCODING 17677 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3FFC +2080 +3FF8 +2080 +3FF8 +2080 +3FFE +0002 +4922 +8492 +848C +ENDCHAR +STARTCHAR uni450E +ENCODING 17678 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2040 +17FC +1040 +03F8 +7248 +1248 +13F8 +1150 +1248 +1444 +2840 +47FE +ENDCHAR +STARTCHAR uni450F +ENCODING 17679 +BBX 15 15 0 -1 +BITMAP +0820 +FFFE +0820 +0040 +2240 +13F8 +1440 +0040 +77FC +1000 +13F8 +1208 +13F8 +2800 +47FE +ENDCHAR +STARTCHAR uni4510 +ENCODING 17680 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +2120 +1110 +17FC +8090 +4064 +539C +1120 +2110 +E7FC +2090 +2064 +239C +ENDCHAR +STARTCHAR uni4511 +ENCODING 17681 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0808 +1448 +2228 +5D08 +88C8 +0828 +7F0E +08F8 +2A08 +4908 +A888 +1008 +ENDCHAR +STARTCHAR uni4512 +ENCODING 17682 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0080 +7840 +4BFC +5108 +6090 +57FE +4800 +49F8 +6908 +5108 +41F8 +4108 +ENDCHAR +STARTCHAR uni4513 +ENCODING 17683 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +2000 +1040 +FE40 +00FE +7C90 +0110 +7C10 +01FE +7C10 +4410 +4410 +7C10 +4410 +ENDCHAR +STARTCHAR uni4514 +ENCODING 17684 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0100 +3FF8 +0440 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0442 +1842 +E03E +ENDCHAR +STARTCHAR uni4515 +ENCODING 17685 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0028 +7824 +4BFE +4820 +79FC +4924 +49FC +7924 +49FC +4924 +4924 +990C +ENDCHAR +STARTCHAR uni4516 +ENCODING 17686 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7840 +4BF8 +5040 +67FC +5110 +4A88 +4CF4 +6910 +52A0 +4040 +41B0 +4E0E +ENDCHAR +STARTCHAR uni4517 +ENCODING 17687 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2088 +1050 +FBFE +0820 +1020 +39FC +5420 +9420 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni4518 +ENCODING 17688 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +2000 +20F8 +3C88 +5088 +10F8 +FC88 +1088 +54F8 +5488 +5C88 +75FE +0400 +ENDCHAR +STARTCHAR uni4519 +ENCODING 17689 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1080 +2880 +44FC +B904 +1204 +7C84 +1044 +9444 +5004 +1E04 +E028 +4010 +ENDCHAR +STARTCHAR uni451A +ENCODING 17690 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3FFC +2000 +2FF8 +2000 +3FFC +2448 +2630 +240E +2FF8 +4808 +4FF8 +8808 +0818 +ENDCHAR +STARTCHAR uni451B +ENCODING 17691 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +23FC +2040 +21F8 +2108 +3DF8 +2108 +21F8 +2508 +29F8 +3000 +2090 +0108 +ENDCHAR +STARTCHAR uni451C +ENCODING 17692 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0020 +FC20 +49FC +7924 +4924 +79FC +4924 +4D24 +FBFE +0904 +0914 +0908 +ENDCHAR +STARTCHAR uni451D +ENCODING 17693 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0844 +2F78 +2842 +2F3E +F400 +0820 +1FC0 +0310 +0C08 +3FFC +0104 +1510 +2208 +ENDCHAR +STARTCHAR uni451E +ENCODING 17694 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +7FFC +0200 +4444 +2F88 +1110 +2248 +4FE4 +0020 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni451F +ENCODING 17695 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0020 +0C40 +70FC +1308 +1090 +FC60 +3090 +3B3E +5442 +55A4 +9018 +1060 +1380 +ENDCHAR +STARTCHAR uni4520 +ENCODING 17696 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1124 +FCA8 +1020 +31FC +3904 +55FC +9104 +11FC +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni4521 +ENCODING 17697 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0800 +1FE0 +2020 +7FF8 +A108 +3FF8 +2108 +3FF8 +0000 +2488 +2244 +4244 +ENDCHAR +STARTCHAR uni4522 +ENCODING 17698 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1450 +2288 +0820 +1450 +2288 +1FF0 +0000 +FFFE +1000 +1FF8 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni4523 +ENCODING 17699 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0304 +3C24 +0424 +7FA4 +1624 +2504 +440C +1100 +1FF8 +2100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni4524 +ENCODING 17700 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +13FE +2020 +7C40 +45FC +4504 +4504 +7DFC +4504 +4504 +7DFC +4504 +ENDCHAR +STARTCHAR uni4525 +ENCODING 17701 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +3FF8 +0108 +FFFE +0108 +3FF8 +0920 +2548 +2FF8 +2388 +4548 +5938 +8108 +ENDCHAR +STARTCHAR uni4526 +ENCODING 17702 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1100 +11FC +1200 +FDF8 +3148 +3928 +57FE +5148 +9228 +13FC +1050 +1020 +ENDCHAR +STARTCHAR uni4527 +ENCODING 17703 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0304 +3C24 +0424 +7FA4 +1624 +2504 +440C +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni4528 +ENCODING 17704 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1050 +1048 +24FE +4590 +7A90 +10FC +2490 +4490 +78FC +0890 +1090 +20FE +C080 +ENDCHAR +STARTCHAR uni4529 +ENCODING 17705 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0820 +0820 +FFBE +0844 +7FA4 +4924 +7F28 +1C28 +2A10 +4928 +8844 +0882 +ENDCHAR +STARTCHAR uni452A +ENCODING 17706 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0100 +7FFC +0100 +2928 +1110 +2928 +0100 +2928 +1110 +2AA8 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni452B +ENCODING 17707 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0020 +7C20 +07FE +1820 +51FC +5D24 +512C +5070 +5CA8 +7124 +C222 +0020 +ENDCHAR +STARTCHAR uni452C +ENCODING 17708 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +0440 +3FF8 +0440 +FFFE +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni452D +ENCODING 17709 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +7FFC +4104 +1490 +1428 +23E8 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +2108 +2118 +ENDCHAR +STARTCHAR uni452E +ENCODING 17710 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +220C +2270 +FF40 +2240 +3E40 +227E +3E48 +2248 +FF48 +2248 +4148 +8088 +ENDCHAR +STARTCHAR uni452F +ENCODING 17711 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0010 +7F10 +1410 +14FE +7F10 +5510 +557C +5744 +6144 +7F44 +4144 +7F7C +4144 +ENDCHAR +STARTCHAR uni4530 +ENCODING 17712 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +7FFC +4004 +3FF8 +0000 +1FF0 +1010 +1FF0 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +ENDCHAR +STARTCHAR uni4531 +ENCODING 17713 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +11F8 +1108 +FDF8 +1000 +13FC +1108 +1DF8 +F108 +11F8 +110E +57F8 +2008 +ENDCHAR +STARTCHAR uni4532 +ENCODING 17714 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0090 +7EA0 +0444 +2828 +17D0 +2008 +DFF6 +1010 +1FF0 +0820 +0440 +7FFC +ENDCHAR +STARTCHAR uni4533 +ENCODING 17715 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1028 +1E24 +32FE +4A20 +A450 +1850 +1088 +2106 +C000 +2488 +2244 +4244 +ENDCHAR +STARTCHAR uni4534 +ENCODING 17716 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0800 +2A00 +3E7C +4944 +7F44 +0044 +3E28 +0028 +7F10 +0810 +2A28 +4944 +1882 +ENDCHAR +STARTCHAR uni4535 +ENCODING 17717 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7C7C +4444 +7C7C +4444 +7D7C +4104 +5FF4 +4384 +4544 +4924 +5124 +410C +ENDCHAR +STARTCHAR uni4536 +ENCODING 17718 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +11FC +1104 +FDFC +1104 +15FC +1800 +37FE +D020 +113C +1120 +52A0 +247E +ENDCHAR +STARTCHAR uni4537 +ENCODING 17719 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +FEFE +1010 +7C7C +1010 +FEFE +0100 +06C0 +1A30 +E10E +1FE0 +0040 +0080 +ENDCHAR +STARTCHAR uni4538 +ENCODING 17720 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0120 +FFFE +0280 +0C60 +3018 +C006 +1028 +1424 +FEFE +1020 +2850 +4488 +8106 +ENDCHAR +STARTCHAR uni4539 +ENCODING 17721 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0108 +7890 +4BFC +4880 +5144 +5668 +48B0 +4928 +4E68 +68A4 +5122 +46A0 +4040 +ENDCHAR +STARTCHAR uni453A +ENCODING 17722 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +7BFC +4880 +49F8 +5220 +55FC +4800 +49F8 +4908 +69F8 +5108 +41F8 +4108 +4118 +ENDCHAR +STARTCHAR uni453B +ENCODING 17723 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1040 +FE40 +0080 +7CFE +4508 +7E88 +0088 +7C50 +0850 +FE20 +1050 +5088 +2306 +ENDCHAR +STARTCHAR uni453C +ENCODING 17724 +BBX 15 15 0 -1 +BITMAP +0820 +FFFE +0820 +0000 +7EFC +1224 +52A4 +9324 +264C +4090 +0850 +2E5C +2850 +2E50 +F1FE +ENDCHAR +STARTCHAR uni453D +ENCODING 17725 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +23F8 +1208 +13F8 +8208 +43F8 +5100 +13FC +2444 +EAA4 +2204 +23F4 +2014 +2008 +ENDCHAR +STARTCHAR uni453E +ENCODING 17726 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +23F8 +2208 +23F8 +FA08 +23F8 +2900 +33FC +6444 +AAA4 +2204 +23F4 +A014 +4008 +ENDCHAR +STARTCHAR uni453F +ENCODING 17727 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0440 +FFFE +0440 +3FF8 +2848 +3038 +27C8 +2008 +3FF8 +0020 +FFFE +0820 +0460 +ENDCHAR +STARTCHAR uni4540 +ENCODING 17728 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0820 +7F20 +083E +3E42 +0094 +3E10 +0010 +7F10 +0828 +2A28 +4944 +1882 +ENDCHAR +STARTCHAR uni4541 +ENCODING 17729 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0440 +7C7C +0440 +3C78 +0440 +7C7C +0540 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni4542 +ENCODING 17730 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0080 +2110 +1208 +17FC +0004 +73F8 +1208 +13F8 +10C4 +11A8 +1290 +2C88 +47FE +ENDCHAR +STARTCHAR uni4543 +ENCODING 17731 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +00D8 +7F06 +44F8 +4880 +50F8 +4880 +44F8 +4480 +47FE +5888 +4134 +43C2 +ENDCHAR +STARTCHAR uni4544 +ENCODING 17732 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +1FC0 +0044 +7D88 +0550 +0920 +3518 +C206 +1FF0 +0000 +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni4545 +ENCODING 17733 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0080 +112C +1124 +FDAC +2524 +25FC +4820 +29F8 +1088 +2850 +4420 +80D8 +0306 +ENDCHAR +STARTCHAR uni4546 +ENCODING 17734 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +20A0 +2110 +2208 +F5F6 +2000 +6784 +74A4 +AFA4 +A4A4 +27A4 +2484 +2494 +2588 +ENDCHAR +STARTCHAR uni4547 +ENCODING 17735 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +0080 +3FFC +2080 +2100 +2FF8 +2888 +2FF8 +2908 +2FF8 +4254 +445C +9842 +603E +ENDCHAR +STARTCHAR uni4548 +ENCODING 17736 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0048 +0948 +4BFE +4948 +7978 +0900 +09FE +F820 +4BFE +4870 +48A8 +8B26 +0820 +ENDCHAR +STARTCHAR uni4549 +ENCODING 17737 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3FF8 +2448 +3FF8 +0100 +3FF8 +0100 +FFFE +0440 +3FF8 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni454A +ENCODING 17738 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +FFFE +0000 +3FF8 +2008 +27C8 +2448 +3FF8 +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni454B +ENCODING 17739 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1040 +1020 +13FE +1220 +7EFC +1224 +13FE +1224 +1EFC +E220 +04FC +0484 +08FC +ENDCHAR +STARTCHAR uni454C +ENCODING 17740 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +0CA0 +7090 +11FE +1120 +FB20 +31FC +3920 +55FC +5120 +9120 +11FE +1100 +ENDCHAR +STARTCHAR uni454D +ENCODING 17741 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +FFFE +0488 +1A70 +EC18 +0806 +3FF8 +2448 +2FE8 +3458 +27C8 +2028 +2010 +ENDCHAR +STARTCHAR uni454E +ENCODING 17742 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +01FC +7C00 +44F8 +4488 +7CF8 +4400 +45FC +7D24 +45FC +4524 +7DFC +4504 +ENDCHAR +STARTCHAR uni454F +ENCODING 17743 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1010 +0820 +3FF8 +0100 +7FFC +0240 +3C50 +0848 +FFFE +0850 +7E24 +0854 +198C +ENDCHAR +STARTCHAR uni4550 +ENCODING 17744 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +21FC +1000 +FCF8 +0888 +10F8 +3800 +55FC +9524 +11FC +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni4551 +ENCODING 17745 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +001C +11E0 +1044 +2524 +7C88 +0820 +1020 +25FC +7C48 +00C8 +5430 +5468 +8184 +ENDCHAR +STARTCHAR uni4552 +ENCODING 17746 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +FFFE +0100 +3FF8 +0000 +1FF0 +1010 +1FF0 +0820 +FFFE +1000 +7EF8 +2288 +46F8 +ENDCHAR +STARTCHAR uni4553 +ENCODING 17747 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +7FFE +5082 +9EFC +2288 +5450 +2820 +17D8 +2006 +DFF0 +0100 +1110 +2308 +ENDCHAR +STARTCHAR uni4554 +ENCODING 17748 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +2100 +411C +8280 +1440 +2BBE +7108 +A7C8 +2108 +2948 +2508 +21C8 +2E28 +2410 +ENDCHAR +STARTCHAR uni4555 +ENCODING 17749 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +11F8 +0908 +09F8 +4108 +23FC +2A94 +0BFC +1000 +73F8 +1090 +1060 +1198 +1606 +ENDCHAR +STARTCHAR uni4556 +ENCODING 17750 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +400C +2F70 +2110 +0224 +0278 +E312 +2E7E +2210 +2254 +2A92 +2430 +5000 +8FFE +ENDCHAR +STARTCHAR uni4557 +ENCODING 17751 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +3FF8 +2108 +3FF8 +2108 +FFFE +0820 +1020 +ENDCHAR +STARTCHAR uni4558 +ENCODING 17752 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1000 +13FC +2840 +45F8 +9308 +09F8 +FD08 +05F8 +0908 +51F8 +2000 +1090 +0108 +ENDCHAR +STARTCHAR uni4559 +ENCODING 17753 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0820 +7F28 +0824 +FFFE +1220 +3FA4 +6424 +BFA8 +2418 +3F92 +242A +3FC6 +2082 +ENDCHAR +STARTCHAR uni455A +ENCODING 17754 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3FFC +2080 +27F0 +2490 +27F0 +2080 +3FFC +2410 +27F0 +2410 +27F0 +2220 +3FFC +ENDCHAR +STARTCHAR uni455B +ENCODING 17755 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +2020 +1020 +FDFC +0020 +78A8 +00A8 +78A8 +0174 +7A22 +4850 +4888 +7904 +4A02 +ENDCHAR +STARTCHAR uni455C +ENCODING 17756 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7CF8 +2448 +1428 +2448 +0100 +7FFC +0820 +1450 +2288 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni455D +ENCODING 17757 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +001E +0DE0 +7044 +1124 +10A8 +FDFC +3124 +39FC +5524 +53FE +9104 +1114 +1108 +ENDCHAR +STARTCHAR uni455E +ENCODING 17758 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7C7C +4444 +7C7C +4444 +7D7C +47C4 +4444 +47C4 +4444 +47D4 +44A4 +4544 +462C +ENDCHAR +STARTCHAR uni455F +ENCODING 17759 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +2FEC +4824 +4BA4 +682C +4BA4 +6AAC +4BA4 +4824 +FFFE +1010 +2008 +4004 +ENDCHAR +STARTCHAR uni4560 +ENCODING 17760 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0080 +3FFE +2020 +2F28 +3110 +2A0A +277C +294A +3784 +2878 +4F48 +4130 +874C +ENDCHAR +STARTCHAR uni4561 +ENCODING 17761 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7C7C +4444 +7C7C +4444 +7C7C +47C4 +4444 +47C4 +4004 +4FE4 +4824 +4FE4 +400C +ENDCHAR +STARTCHAR uni4562 +ENCODING 17762 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0088 +7C50 +13FE +1020 +21FC +3C40 +67FE +A480 +257C +2610 +3C10 +25FE +ENDCHAR +STARTCHAR uni4563 +ENCODING 17763 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +23F8 +1208 +03F8 +FA08 +0BF8 +1100 +2BFC +7444 +AAA4 +2A04 +23F4 +2014 +2008 +ENDCHAR +STARTCHAR uni4564 +ENCODING 17764 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7700 +557C +7744 +0048 +7F50 +4948 +7F44 +4944 +7F54 +0848 +FFC0 +0840 +0840 +ENDCHAR +STARTCHAR uni4565 +ENCODING 17765 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1110 +2548 +4924 +BFFA +2108 +3558 +2928 +3558 +2108 +3558 +2928 +3558 +2118 +ENDCHAR +STARTCHAR uni4566 +ENCODING 17766 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0100 +7FFC +1000 +1FF8 +0820 +0FE0 +7938 +4FA8 +7AA8 +4AB8 +792A +4AAA +9C46 +ENDCHAR +STARTCHAR uni4567 +ENCODING 17767 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +3E20 +2210 +3AFE +2A00 +7F28 +4144 +3E82 +2228 +3E28 +2210 +3E28 +2244 +2682 +ENDCHAR +STARTCHAR uni4568 +ENCODING 17768 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0124 +3CA8 +25FC +2440 +3DFE +2488 +2544 +3E8A +24F0 +2424 +45FC +54A8 +8964 +ENDCHAR +STARTCHAR uni4569 +ENCODING 17769 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1000 +1020 +13FE +7850 +128A +31FC +3A8A +54F8 +5088 +90F8 +1124 +1222 +1060 +ENDCHAR +STARTCHAR uni456A +ENCODING 17770 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +23F8 +12A8 +93F8 +4040 +43F8 +1040 +27FC +E110 +23F8 +2040 +27FC +2040 +ENDCHAR +STARTCHAR uni456B +ENCODING 17771 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +08A0 +111E +13D2 +5A5E +53D0 +5A52 +E3CE +1208 +27E4 +4822 +1440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni456C +ENCODING 17772 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +03FE +F800 +09FC +0924 +F9FC +8124 +87FE +F800 +09FC +0924 +09FC +5124 +27FE +ENDCHAR +STARTCHAR uni456D +ENCODING 17773 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1010 +1054 +7C58 +1090 +FE28 +0044 +5492 +9254 +7C58 +1090 +1C28 +E044 +4182 +ENDCHAR +STARTCHAR uni456E +ENCODING 17774 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1100 +11FC +7E44 +1154 +FEE4 +4444 +29F4 +7C44 +10E4 +FF54 +1044 +1054 +1008 +ENDCHAR +STARTCHAR uni456F +ENCODING 17775 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +FE1C +28E8 +FEA8 +AAA8 +FEA8 +00A8 +7CA8 +00A4 +FEA4 +554A +9278 +3008 +ENDCHAR +STARTCHAR uni4570 +ENCODING 17776 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +101C +13E0 +1524 +54A8 +5BFE +5124 +9202 +11FC +1124 +29FC +2524 +45FC +8104 +ENDCHAR +STARTCHAR uni4571 +ENCODING 17777 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7DFE +0020 +00FC +7E84 +42FC +4284 +7EFC +4284 +24FC +0F00 +F048 +4084 +ENDCHAR +STARTCHAR uni4572 +ENCODING 17778 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +08A0 +3FFE +2040 +2FFE +2404 +25F4 +2514 +27FC +2000 +27FC +2000 +4FFE +4248 +84C4 +ENDCHAR +STARTCHAR uni4573 +ENCODING 17779 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +F7FC +1248 +17FC +FC46 +86EC +8554 +F6EC +1554 +16EC +1444 +5454 +2408 +ENDCHAR +STARTCHAR uni4574 +ENCODING 17780 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +00A0 +0C90 +71FE +1120 +13FC +FD20 +31FC +3920 +55FE +5000 +92A4 +1252 +1452 +ENDCHAR +STARTCHAR uni4575 +ENCODING 17781 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0450 +1020 +10FC +FE84 +10FC +1084 +7CFC +0080 +00FE +7C80 +44FE +4402 +7D52 +4406 +ENDCHAR +STARTCHAR uni4576 +ENCODING 17782 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +2090 +10FE +FD90 +02FC +7890 +00FC +7890 +00FC +7880 +49FC +4888 +7870 +4B8E +ENDCHAR +STARTCHAR uni4577 +ENCODING 17783 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +0080 +3FFE +2410 +3F7C +2638 +2D54 +3492 +2120 +27C0 +2110 +4FF8 +44A4 +8990 +ENDCHAR +STARTCHAR uni4578 +ENCODING 17784 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +7F10 +4910 +6BFE +5D10 +7F10 +087C +7F00 +0800 +0F7C +F044 +0044 +557C +5544 +ENDCHAR +STARTCHAR uni4579 +ENCODING 17785 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +2010 +1048 +FE40 +44FE +4590 +AA90 +10FC +FE90 +10FC +5490 +5290 +92FE +3080 +ENDCHAR +STARTCHAR uni457A +ENCODING 17786 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +2448 +1450 +7FFC +0820 +0440 +7FFC +0100 +FFFE +2200 +3E7C +23A4 +7E18 +0266 +ENDCHAR +STARTCHAR uni457B +ENCODING 17787 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +3F7E +1224 +1B34 +12A4 +3FFC +2240 +3FF8 +2248 +3FF8 +2844 +2F78 +4842 +8F3E +ENDCHAR +STARTCHAR uni457C +ENCODING 17788 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +4450 +FE48 +44FE +7D90 +1290 +FEFE +9290 +FE90 +10FE +FE90 +2890 +44FE +8280 +ENDCHAR +STARTCHAR uni457D +ENCODING 17789 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +01FC +7D54 +45FC +4480 +7DFC +1244 +11F4 +5D54 +51F4 +5044 +5DF4 +E014 +0008 +ENDCHAR +STARTCHAR uni457E +ENCODING 17790 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +1E78 +1248 +3FFC +2020 +2E20 +223C +3FC8 +2928 +2F28 +4990 +5F28 +8144 +ENDCHAR +STARTCHAR uni457F +ENCODING 17791 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0450 +4420 +FEFC +4484 +7CFC +1084 +FEFC +9280 +FEFE +1080 +FEFE +2802 +4552 +8206 +ENDCHAR +STARTCHAR uni4580 +ENCODING 17792 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3C78 +2448 +FFFE +0200 +1FF0 +1490 +1250 +1FF0 +0820 +1010 +7C7C +4444 +7C7C +ENDCHAR +STARTCHAR uni4581 +ENCODING 17793 +BBX 15 16 0 -2 +BITMAP +2810 +FEFE +2844 +0028 +7CFE +5400 +7C7C +5444 +7C7C +1044 +FE7C +9210 +920A +BAAA +8AA4 +851C +ENDCHAR +STARTCHAR uni4582 +ENCODING 17794 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +2928 +4FD2 +F03C +2388 +4812 +FBBE +0280 +ABAA +00F0 +3F00 +0100 +FFFE +0100 +0300 +ENDCHAR +STARTCHAR uni4583 +ENCODING 17795 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +7FFC +0800 +1FF0 +6810 +0FF0 +4444 +FEFE +5454 +FEFE +2020 +7C7C +C4C4 +7D7C +ENDCHAR +STARTCHAR uni4584 +ENCODING 17796 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +4450 +FE48 +44FE +7D90 +10FC +FE90 +92FC +FE90 +1090 +FEFE +2880 +4448 +8224 +ENDCHAR +STARTCHAR uni4585 +ENCODING 17797 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3FF8 +0100 +7FFE +4922 +8414 +3BB8 +2AA8 +3BB8 +0000 +7FFC +1110 +2928 +FFFE +ENDCHAR +STARTCHAR uni4586 +ENCODING 17798 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0020 +FBFE +2154 +F9DC +A888 +A9FC +D888 +89FC +8888 +FBFE +898A +FEA4 +88C2 +ENDCHAR +STARTCHAR uni4587 +ENCODING 17799 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +2A28 +F3BC +2508 +739C +AD6A +27C8 +0000 +FFFE +950A +6B70 +5504 +7F38 +2482 +3FBC +ENDCHAR +STARTCHAR uni4588 +ENCODING 17800 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFE +2102 +21F0 +2F04 +20FC +2000 +2418 +24E0 +2704 +2404 +4404 +43FC +8000 +ENDCHAR +STARTCHAR uni4589 +ENCODING 17801 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFE +2102 +21F0 +2F04 +20FC +2000 +23F8 +2040 +2040 +2FFE +4040 +4140 +8080 +ENDCHAR +STARTCHAR uni458A +ENCODING 17802 +BBX 15 16 0 -2 +BITMAP +0020 +043E +0420 +85FE +4522 +2938 +29E0 +1122 +111E +2900 +2978 +4548 +4548 +824A +024A +0486 +ENDCHAR +STARTCHAR uni458B +ENCODING 17803 +BBX 15 16 0 -2 +BITMAP +0410 +0790 +0410 +3F90 +2490 +2710 +3C10 +2490 +2390 +2028 +2F28 +2928 +2964 +49A4 +9124 +2042 +ENDCHAR +STARTCHAR uni458C +ENCODING 17804 +BBX 14 16 0 -2 +BITMAP +0404 +0784 +0404 +3FD4 +2454 +2714 +3C54 +23D4 +2014 +2F14 +2914 +2904 +4944 +4984 +9114 +2008 +ENDCHAR +STARTCHAR uni458D +ENCODING 17805 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFE +2102 +21F0 +2F04 +20FC +2100 +21FC +2210 +2510 +28A0 +4040 +41B0 +860C +ENDCHAR +STARTCHAR uni458E +ENCODING 17806 +BBX 14 16 1 -2 +BITMAP +0080 +F080 +90F8 +A080 +A7F8 +C488 +A4E0 +9780 +9488 +9478 +D400 +A5E0 +8920 +8924 +9224 +A41C +ENDCHAR +STARTCHAR uni458F +ENCODING 17807 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFE +2102 +21F0 +2F04 +22FC +2200 +27F8 +2D48 +3348 +22E8 +449E +4908 +8218 +ENDCHAR +STARTCHAR uni4590 +ENCODING 17808 +BBX 15 16 0 -2 +BITMAP +0410 +0E1E +3010 +20FE +2092 +209C +3EF0 +2492 +248E +2480 +24B8 +24A8 +24A8 +452A +452A +8246 +ENDCHAR +STARTCHAR uni4591 +ENCODING 17809 +BBX 15 16 0 -2 +BITMAP +0800 +0F00 +087C +7F44 +4944 +4E44 +787C +4944 +4744 +4044 +4E7C +4A44 +4A02 +5202 +91FE +2000 +ENDCHAR +STARTCHAR uni4592 +ENCODING 17810 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFE +2102 +21F0 +2F04 +20FC +2000 +2FF8 +2000 +27F0 +2410 +47F0 +4220 +9FFC +ENDCHAR +STARTCHAR uni4593 +ENCODING 17811 +BBX 15 16 0 -2 +BITMAP +1010 +101E +9210 +92FE +9292 +929C +FEF0 +1092 +108E +9280 +92B8 +92A8 +9EA8 +F32A +012A +0246 +ENDCHAR +STARTCHAR uni4594 +ENCODING 17812 +BBX 15 16 0 -2 +BITMAP +1020 +103E +1020 +7DFE +1122 +1138 +11E0 +FD22 +111E +1100 +2178 +4948 +FD48 +464A +024A +0486 +ENDCHAR +STARTCHAR uni4595 +ENCODING 17813 +BBX 15 16 0 -2 +BITMAP +0800 +0F00 +0878 +7F48 +4948 +4E78 +7848 +4948 +4778 +4048 +4E48 +4AFC +4A02 +5202 +91FE +2000 +ENDCHAR +STARTCHAR uni4596 +ENCODING 17814 +BBX 15 16 0 -2 +BITMAP +0800 +0F00 +087C +7F54 +4954 +4E7C +7854 +4954 +477C +4010 +4E10 +4A10 +4A12 +5202 +91FE +2000 +ENDCHAR +STARTCHAR uni4597 +ENCODING 17815 +BBX 15 16 0 -2 +BITMAP +01FC +0100 +3FFE +2102 +21F0 +2F04 +20FC +2028 +2FFE +2820 +2BA4 +2828 +2BAC +2A94 +4BAC +9044 +ENDCHAR +STARTCHAR uni4598 +ENCODING 17816 +BBX 15 16 0 -2 +BITMAP +1040 +1E40 +1078 +7E88 +5310 +5CFC +70A4 +52A4 +4EFC +4020 +5C50 +5458 +5454 +5692 +9492 +210E +ENDCHAR +STARTCHAR uni4599 +ENCODING 17817 +BBX 15 16 0 -2 +BITMAP +3F90 +2418 +3F14 +2112 +3F10 +247C +3F80 +2080 +2FFC +2884 +28F0 +2F84 +287C +49E0 +4924 +921C +ENDCHAR +STARTCHAR uni459A +ENCODING 17818 +BBX 15 16 0 -2 +BITMAP +1020 +1E40 +10FC +7E84 +5284 +5CFC +7080 +52FE +4E80 +40FE +5C02 +54AA +54AA +5602 +9414 +2008 +ENDCHAR +STARTCHAR uni459B +ENCODING 17819 +BBX 15 16 0 -2 +BITMAP +0810 +0F10 +087C +7F10 +49FE +4EA2 +7844 +4978 +4714 +40FE +4E10 +4A54 +4AB2 +5202 +91FE +2000 +ENDCHAR +STARTCHAR uni459C +ENCODING 17820 +BBX 15 16 0 -2 +BITMAP +1E3C +1020 +7EFE +52A2 +5CB8 +72E4 +4E9C +4080 +5CB8 +952A +2346 +5FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni459D +ENCODING 17821 +BBX 15 15 1 -1 +BITMAP +0038 +01C0 +7F00 +0100 +0100 +3FF8 +2108 +2108 +2108 +3FF8 +0110 +0108 +013C +03C2 +FC02 +ENDCHAR +STARTCHAR uni459E +ENCODING 17822 +BBX 15 16 0 -2 +BITMAP +0808 +0808 +0808 +7F08 +49FE +4908 +4908 +4908 +7F48 +4828 +0828 +0A08 +0F08 +F108 +4028 +0010 +ENDCHAR +STARTCHAR uni459F +ENCODING 17823 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +1000 +1000 +1FF8 +0000 +0100 +1FF0 +1110 +1110 +1FF0 +1100 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni45A0 +ENCODING 17824 +BBX 15 16 0 -2 +BITMAP +1000 +11F0 +1110 +7D10 +5510 +5510 +5590 +5550 +7D50 +5110 +1110 +1512 +1D12 +E612 +420E +0400 +ENDCHAR +STARTCHAR uni45A1 +ENCODING 17825 +BBX 15 15 0 -1 +BITMAP +1000 +11F8 +1048 +7C48 +5448 +5448 +5448 +55F8 +7C88 +5088 +1088 +1488 +1C88 +E488 +43FE +ENDCHAR +STARTCHAR uni45A2 +ENCODING 17826 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +7CA8 +54A4 +54A2 +5522 +5520 +7E24 +5024 +1028 +1408 +1E10 +E220 +40C0 +0300 +ENDCHAR +STARTCHAR uni45A3 +ENCODING 17827 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11F0 +7D50 +5550 +5550 +5550 +5550 +7D50 +5148 +1148 +1548 +1D44 +E644 +4242 +0400 +ENDCHAR +STARTCHAR uni45A4 +ENCODING 17828 +BBX 14 16 0 -2 +BITMAP +1000 +10F8 +3E88 +4288 +A4A8 +1894 +1084 +207C +C100 +1FF0 +1110 +1110 +1FF0 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni45A5 +ENCODING 17829 +BBX 13 16 1 -2 +BITMAP +3FE0 +0440 +0280 +FFF8 +0908 +3110 +C500 +0200 +0200 +3FE0 +2220 +2220 +3FE0 +0210 +FFF8 +4008 +ENDCHAR +STARTCHAR uni45A6 +ENCODING 17830 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1124 +7D24 +5524 +5524 +55FC +5420 +7C20 +5124 +1124 +1524 +1D24 +E524 +41FC +0004 +ENDCHAR +STARTCHAR uni45A7 +ENCODING 17831 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +10FC +7C84 +5484 +5484 +54FC +5484 +7C84 +5084 +10FC +1484 +1E00 +E200 +41FE +ENDCHAR +STARTCHAR uni45A8 +ENCODING 17832 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FE +7C20 +5420 +5440 +5440 +54FC +7C84 +5184 +1284 +1484 +1E84 +E284 +40FC +0084 +ENDCHAR +STARTCHAR uni45A9 +ENCODING 17833 +BBX 15 15 0 -1 +BITMAP +1040 +1020 +1028 +7C08 +5408 +5448 +5454 +5552 +7D52 +5160 +1260 +1444 +1CC4 +E544 +423C +ENDCHAR +STARTCHAR uni45AA +ENCODING 17834 +BBX 14 16 0 -2 +BITMAP +0880 +0888 +2E90 +28A0 +28C0 +2884 +2E84 +F07C +0100 +1FF0 +1110 +1110 +1FF0 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni45AB +ENCODING 17835 +BBX 15 16 0 -2 +BITMAP +1010 +1050 +1050 +7C88 +5488 +5504 +56FA +5420 +7C20 +5020 +11FC +1420 +1E20 +E220 +4020 +0020 +ENDCHAR +STARTCHAR uni45AC +ENCODING 17836 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1124 +7D24 +5524 +55FC +5524 +5524 +7D24 +51FC +1124 +1420 +1C20 +E420 +4020 +0020 +ENDCHAR +STARTCHAR uni45AD +ENCODING 17837 +BBX 15 16 0 -2 +BITMAP +1110 +0910 +0920 +7FFC +0200 +FFFE +0820 +3018 +C106 +1FF0 +1110 +1110 +1FF0 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni45AE +ENCODING 17838 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1040 +7DFC +5504 +5504 +5574 +5554 +7D54 +5154 +1154 +1574 +1D04 +E504 +4114 +0108 +ENDCHAR +STARTCHAR uni45AF +ENCODING 17839 +BBX 15 16 0 -2 +BITMAP +0100 +3FF8 +0100 +FFFE +0100 +3FF8 +0100 +FFFE +0000 +0100 +3FF8 +2108 +3FF8 +0108 +7FFC +0004 +ENDCHAR +STARTCHAR uni45B0 +ENCODING 17840 +BBX 15 16 0 -2 +BITMAP +1004 +101E +11E0 +7D00 +5506 +5578 +5550 +5550 +7D52 +1154 +1548 +1D48 +E544 +4254 +0262 +0440 +ENDCHAR +STARTCHAR uni45B1 +ENCODING 17841 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +1100 +7D00 +55FE +5510 +5510 +557C +7D10 +5110 +1110 +15FE +1D00 +E500 +41FE +ENDCHAR +STARTCHAR uni45B2 +ENCODING 17842 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +11FC +7D04 +5604 +55E4 +5524 +5524 +7DE4 +5124 +1124 +15E4 +1D04 +E404 +4028 +0010 +ENDCHAR +STARTCHAR uni45B3 +ENCODING 17843 +BBX 15 15 0 -1 +BITMAP +1020 +1010 +11FE +7D02 +5400 +541C +54E0 +5420 +7C20 +503E +11E0 +1420 +1E22 +E222 +401E +ENDCHAR +STARTCHAR uni45B4 +ENCODING 17844 +BBX 15 16 0 -2 +BITMAP +1050 +1050 +1050 +7D52 +54D4 +5458 +5450 +5458 +7CD4 +5152 +1050 +1450 +1E92 +E292 +4112 +020E +ENDCHAR +STARTCHAR uni45B5 +ENCODING 17845 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +1020 +7DFC +5524 +5524 +5524 +5524 +7DFC +5124 +1020 +1428 +1C24 +E5FE +4082 +ENDCHAR +STARTCHAR uni45B6 +ENCODING 17846 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1040 +7C80 +5544 +5624 +5468 +54B0 +7D30 +5228 +1068 +14A4 +1D22 +E620 +40A0 +0040 +ENDCHAR +STARTCHAR uni45B7 +ENCODING 17847 +BBX 15 16 0 -2 +BITMAP +2184 +2068 +2030 +F8C8 +AB04 +A840 +ABFE +A8A0 +F920 +A3FC +2524 +2924 +3934 +E928 +4020 +0020 +ENDCHAR +STARTCHAR uni45B8 +ENCODING 17848 +BBX 15 15 1 -1 +BITMAP +7E48 +1044 +FFFE +1048 +1E28 +F030 +10C8 +7306 +0100 +3FF8 +2108 +3FF8 +0104 +013E +FFC2 +ENDCHAR +STARTCHAR uni45B9 +ENCODING 17849 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +2088 +FB8E +A888 +A888 +A800 +A9FC +F820 +A020 +23FE +2820 +3820 +E820 +4020 +0020 +ENDCHAR +STARTCHAR uni45BA +ENCODING 17850 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +11F8 +2108 +2A90 +6C60 +A998 +2E46 +2840 +2BF8 +2A48 +2A48 +2BF8 +2044 +27FC +2004 +ENDCHAR +STARTCHAR uni45BB +ENCODING 17851 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +7C20 +5448 +5484 +55FE +5402 +7CA8 +50A8 +10A8 +14A8 +1EA8 +E2AA +412A +0206 +ENDCHAR +STARTCHAR uni45BC +ENCODING 17852 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +211E +FB92 +A912 +A912 +A912 +AFD2 +F912 +A112 +221A +2A94 +3FD0 +EA50 +4010 +0010 +ENDCHAR +STARTCHAR uni45BD +ENCODING 17853 +BBX 13 16 1 -2 +BITMAP +0610 +7810 +0890 +FE90 +1890 +2C90 +4A10 +8850 +0A20 +3FE0 +2220 +2220 +3FE0 +0210 +FFF8 +4008 +ENDCHAR +STARTCHAR uni45BE +ENCODING 17854 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +7D02 +5604 +54F8 +5400 +5400 +7DFE +5050 +1050 +1450 +1E92 +E292 +410E +0200 +ENDCHAR +STARTCHAR uni45BF +ENCODING 17855 +BBX 14 16 0 -2 +BITMAP +0C80 +70FC +1124 +FD24 +1224 +3844 +5484 +9128 +1010 +0100 +3FF8 +2108 +3FF8 +0108 +7FFC +0004 +ENDCHAR +STARTCHAR uni45C0 +ENCODING 17856 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +21FC +F820 +A820 +ABFE +A888 +A944 +FA42 +A0F8 +2188 +2A50 +3820 +E850 +4188 +0606 +ENDCHAR +STARTCHAR uni45C1 +ENCODING 17857 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +7C50 +5488 +5504 +57FE +5408 +7DE8 +5128 +1128 +15E8 +1D28 +E408 +4028 +0010 +ENDCHAR +STARTCHAR uni45C2 +ENCODING 17858 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +103C +7C20 +55FC +5524 +5530 +55E0 +7D24 +511C +1100 +1570 +1D50 +E552 +4292 +050E +ENDCHAR +STARTCHAR uni45C3 +ENCODING 17859 +BBX 15 16 0 -2 +BITMAP +1048 +1044 +105E +7DE0 +5428 +5412 +546A +5596 +7C48 +505E +11E0 +1424 +1E28 +E212 +406A +0186 +ENDCHAR +STARTCHAR uni45C4 +ENCODING 17860 +BBX 15 16 0 -2 +BITMAP +1050 +1088 +1154 +7C20 +54D8 +5706 +5408 +54F0 +7C80 +5080 +10FC +1490 +1C90 +E510 +4210 +0010 +ENDCHAR +STARTCHAR uni45C5 +ENCODING 17861 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1080 +7CF8 +5480 +54F8 +5480 +57FE +7D40 +5124 +1128 +1510 +1D08 +E544 +4182 +0100 +ENDCHAR +STARTCHAR uni45C6 +ENCODING 17862 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +7D02 +5604 +54F8 +5488 +5488 +7CF8 +5080 +1080 +14FC +1E84 +E284 +40FC +0084 +ENDCHAR +STARTCHAR uni45C7 +ENCODING 17863 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FE +7D02 +5622 +54AA +5472 +5422 +7DFE +5022 +1072 +14AA +1D22 +E422 +400A +0004 +ENDCHAR +STARTCHAR uni45C8 +ENCODING 17864 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +7C80 +5480 +5480 +54FC +5400 +7CFC +5084 +10FC +1484 +1EFC +E284 +40FC +0084 +ENDCHAR +STARTCHAR uni45C9 +ENCODING 17865 +BBX 14 16 0 -2 +BITMAP +10F8 +1088 +1088 +7CF8 +5488 +5488 +54F8 +5400 +7DFC +5104 +1104 +15FC +1D04 +E504 +41FC +0104 +ENDCHAR +STARTCHAR uni45CA +ENCODING 17866 +BBX 15 16 0 -2 +BITMAP +1020 +10A2 +10A2 +7D24 +5450 +5488 +5704 +5422 +7C20 +50A4 +10A4 +1528 +1C50 +E488 +4104 +0202 +ENDCHAR +STARTCHAR uni45CB +ENCODING 17867 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +7C88 +5488 +54F8 +5488 +5488 +7CF8 +5020 +13FE +1470 +1CA8 +E524 +4222 +0020 +ENDCHAR +STARTCHAR uni45CC +ENCODING 17868 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +1104 +7DFC +5504 +55FC +5420 +5520 +7DFE +5220 +1020 +15FC +1C20 +E420 +43FE +ENDCHAR +STARTCHAR uni45CD +ENCODING 17869 +BBX 15 16 0 -2 +BITMAP +0FE0 +1020 +1FC0 +0040 +FFFE +0C10 +7320 +0DC0 +72B0 +0C8E +F300 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni45CE +ENCODING 17870 +BBX 15 15 0 -1 +BITMAP +1000 +13FE +1050 +7C50 +55FC +5554 +5554 +5554 +7DFC +5020 +1020 +15FC +1C20 +E420 +43FE +ENDCHAR +STARTCHAR uni45CF +ENCODING 17871 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FE +7D22 +54A4 +5528 +5450 +5488 +7D04 +50F8 +1088 +1488 +1E50 +E220 +40D8 +0306 +ENDCHAR +STARTCHAR uni45D0 +ENCODING 17872 +BBX 15 16 0 -2 +BITMAP +1040 +FEFE +2120 +3CAC +24F4 +27A4 +44AC +54A2 +887E +0100 +3FF8 +2108 +3FF8 +0108 +7FFC +0004 +ENDCHAR +STARTCHAR uni45D1 +ENCODING 17873 +BBX 15 15 0 -1 +BITMAP +1000 +10FC +1084 +7CFC +5484 +54FC +5484 +5420 +7C10 +51FE +1000 +1484 +1E48 +E200 +41FE +ENDCHAR +STARTCHAR uni45D2 +ENCODING 17874 +BBX 15 15 0 -1 +BITMAP +2108 +2090 +2000 +FBFC +A890 +A890 +A892 +AC92 +FA94 +A298 +2090 +2890 +3890 +E890 +47FE +ENDCHAR +STARTCHAR uni45D3 +ENCODING 17875 +BBX 15 15 0 -1 +BITMAP +2080 +2080 +20FC +F954 +AAD4 +A8B4 +A92C +AA44 +F894 +A108 +2040 +28A4 +3AAA +EA8A +4478 +ENDCHAR +STARTCHAR uni45D4 +ENCODING 17876 +BBX 15 16 0 -2 +BITMAP +1080 +10BC +1084 +7D08 +55FE +5720 +5520 +557C +7D90 +5110 +11FE +1510 +1D28 +E528 +4144 +0182 +ENDCHAR +STARTCHAR uni45D5 +ENCODING 17877 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +5004 +3EF8 +4288 +A2AA +1492 +187E +E100 +1FF0 +1110 +1110 +1FF0 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni45D6 +ENCODING 17878 +BBX 15 16 0 -2 +BITMAP +20A8 +20A8 +23FE +F8A8 +A8A8 +A800 +ABFE +AA22 +F820 +A1FC +2124 +2924 +3934 +E928 +4020 +0020 +ENDCHAR +STARTCHAR uni45D7 +ENCODING 17879 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +23DE +FD28 +A884 +A800 +ABFC +A890 +F890 +A090 +27FE +2890 +3890 +E910 +4210 +0410 +ENDCHAR +STARTCHAR uni45D8 +ENCODING 17880 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +10FC +7C20 +5420 +55FE +5440 +5484 +7DFE +5002 +11FC +1554 +1D54 +E554 +43FE +ENDCHAR +STARTCHAR uni45D9 +ENCODING 17881 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4442 +9FF4 +0440 +3FF8 +0440 +FFFE +0820 +1110 +2FE8 +C926 +0FE0 +0110 +3FF8 +1008 +ENDCHAR +STARTCHAR uni45DA +ENCODING 17882 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +13FE +7C20 +55FC +5524 +55FC +5524 +7DFC +5124 +1008 +17FE +1C88 +E448 +4048 +0018 +ENDCHAR +STARTCHAR uni45DB +ENCODING 17883 +BBX 15 16 0 -2 +BITMAP +2120 +213C +2144 +FAA8 +AA10 +AEA8 +AAC6 +AABC +FAA4 +A2BC +22A4 +2ABC +3A24 +EA24 +4224 +022C +ENDCHAR +STARTCHAR uni45DC +ENCODING 17884 +BBX 15 16 0 -2 +BITMAP +2040 +23BE +2212 +FA92 +AA52 +AAAA +AB24 +A840 +FBFE +A222 +2222 +2BFE +3A22 +EA22 +43FE +0202 +ENDCHAR +STARTCHAR uni45DD +ENCODING 17885 +BBX 14 16 0 -2 +BITMAP +2020 +1020 +FDFC +0924 +11FC +3924 +55FC +9020 +1020 +0100 +3FF8 +2108 +3FF8 +0108 +7FFC +0004 +ENDCHAR +STARTCHAR uni45DE +ENCODING 17886 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +FFFE +0280 +0C60 +3018 +C006 +1020 +7EFC +52A4 +7EFC +1020 +1424 +FEFE +0202 +ENDCHAR +STARTCHAR uni45DF +ENCODING 17887 +BBX 13 16 1 -2 +BITMAP +FEF0 +9090 +BE98 +C900 +BEF0 +8890 +9490 +A260 +FE98 +0200 +7FF0 +4210 +7FF0 +0210 +FFF8 +0008 +ENDCHAR +STARTCHAR uni45E0 +ENCODING 17888 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +FEFE +2100 +3DFE +2422 +24A0 +44BC +5560 +8A3E +0100 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni45E1 +ENCODING 17889 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2020 +F93C +A920 +AFFE +A880 +A8FE +F900 +A1FE +2002 +2AAA +3AAA +EC02 +4014 +0008 +ENDCHAR +STARTCHAR uni45E2 +ENCODING 17890 +BBX 15 16 0 -2 +BITMAP +1010 +1050 +1250 +7D7C +5490 +5410 +54FE +5700 +7D7C +5144 +1144 +157C +1D44 +E500 +42FE +0400 +ENDCHAR +STARTCHAR uni45E3 +ENCODING 17891 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0FE0 +0820 +0FE0 +0000 +1020 +7EFC +52A4 +7EFC +1020 +1424 +FEFE +0202 +ENDCHAR +STARTCHAR uni45E4 +ENCODING 17892 +BBX 15 16 0 -2 +BITMAP +1010 +11FE +1110 +7D7C +5514 +55FE +5514 +557C +7D10 +117C +1554 +1D7C +E554 +427C +0254 +044C +ENDCHAR +STARTCHAR uni45E5 +ENCODING 17893 +BBX 15 15 1 -1 +BITMAP +2144 +2144 +2244 +FAAA +ACAA +A900 +A910 +AA10 +FA90 +269C +2A90 +2A90 +3A90 +C6F0 +031E +ENDCHAR +STARTCHAR uni45E6 +ENCODING 17894 +BBX 15 16 0 -2 +BITMAP +2020 +247C +2284 +F948 +A830 +A8CE +AE10 +AA7C +FA10 +A27C +2210 +2AFE +3A10 +EA10 +45FE +0800 +ENDCHAR +STARTCHAR uni45E7 +ENCODING 17895 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +7D10 +557C +5514 +55FE +5514 +7D7C +1110 +1592 +1D54 +E538 +4254 +0292 +0430 +ENDCHAR +STARTCHAR uni45E8 +ENCODING 17896 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10F8 +7D08 +5610 +55FC +5524 +5524 +7DFC +5124 +1124 +15FC +1C00 +E554 +412A +022A +ENDCHAR +STARTCHAR uni45E9 +ENCODING 17897 +BBX 15 16 0 -2 +BITMAP +200C +200A +2008 +FBFE +AA08 +AA48 +AA6A +AA4A +FBFA +A24C +224C +2AEC +3B5A +EC4A +44D6 +0822 +ENDCHAR +STARTCHAR uni45EA +ENCODING 17898 +BBX 15 15 1 -1 +BITMAP +0080 +3FFE +2220 +3FFE +2220 +43E0 +4A48 +9124 +1124 +3FF8 +2108 +3FF8 +0110 +01FC +FE02 +ENDCHAR +STARTCHAR uni45EB +ENCODING 17899 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +7D48 +5548 +5548 +55FE +5548 +7D48 +51EC +115A +1568 +1D48 +E548 +4248 +0048 +ENDCHAR +STARTCHAR uni45EC +ENCODING 17900 +BBX 14 16 1 -2 +BITMAP +4200 +27E0 +2A20 +01C0 +EEB8 +23E0 +2080 +27F8 +5080 +8FFC +0200 +7FF0 +4210 +7FF0 +0208 +FFFC +ENDCHAR +STARTCHAR uni45ED +ENCODING 17901 +BBX 15 15 0 -1 +BITMAP +2020 +2020 +21FC +F924 +A9FC +A820 +ABFE +AA22 +FBFE +A020 +2040 +2824 +3AA2 +EA8A +4478 +ENDCHAR +STARTCHAR uni45EE +ENCODING 17902 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +23FE +F820 +AAAA +A924 +AAAA +A820 +FAAA +A124 +22AA +2850 +3850 +E888 +4104 +0602 +ENDCHAR +STARTCHAR uni45EF +ENCODING 17903 +BBX 15 15 0 -1 +BITMAP +2028 +2224 +217E +F9C8 +A948 +A87E +AB48 +A948 +F97E +A148 +2148 +297E +3940 +EA80 +447E +ENDCHAR +STARTCHAR uni45F0 +ENCODING 17904 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2124 +FBFE +A924 +A9FC +A800 +A9FC +F904 +A1FC +2104 +29FC +3904 +E9FC +4088 +0104 +ENDCHAR +STARTCHAR uni45F1 +ENCODING 17905 +BBX 15 16 0 -2 +BITMAP +2050 +2252 +2154 +F850 +ABFE +A888 +A850 +ABFE +F820 +A1FC +2020 +2BFE +3850 +E888 +4104 +0602 +ENDCHAR +STARTCHAR uni45F2 +ENCODING 17906 +BBX 15 16 0 -2 +BITMAP +2020 +2124 +20A8 +FBFE +A8A8 +A924 +AA22 +A904 +F904 +A1DE +2244 +2D54 +389E +E904 +4204 +0404 +ENDCHAR +STARTCHAR uni45F3 +ENCODING 17907 +BBX 15 15 0 -1 +BITMAP +2010 +23D2 +2054 +F948 +A88A +A904 +AAFA +AC00 +F9FC +A104 +2104 +29FC +3904 +E888 +47FE +ENDCHAR +STARTCHAR uni45F4 +ENCODING 17908 +BBX 15 15 0 -1 +BITMAP +2110 +2110 +21DE +FAA8 +AC44 +A806 +ABB8 +A888 +F908 +A3BE +2088 +2A88 +393E +EAC0 +443E +ENDCHAR +STARTCHAR uni45F5 +ENCODING 17909 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1000 +7DFC +5524 +55FC +5524 +57FE +7C00 +51FC +1124 +15FC +1D24 +E5FC +4000 +03FE +ENDCHAR +STARTCHAR uni45F6 +ENCODING 17910 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +7DFC +5504 +55FC +5504 +55FC +7C80 +51FE +1222 +1552 +1D02 +E5FA +400A +0004 +ENDCHAR +STARTCHAR uni45F7 +ENCODING 17911 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +7C88 +5450 +57FE +5400 +55FC +7D04 +51FC +1104 +15FC +1C20 +E694 +428A +047A +ENDCHAR +STARTCHAR uni45F8 +ENCODING 17912 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +1048 +24FE +7990 +10FC +2290 +7CFC +0890 +30FE +C180 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni45F9 +ENCODING 17913 +BBX 15 15 0 -1 +BITMAP +2108 +2090 +23FE +F908 +A908 +AA52 +AB9C +A908 +FA52 +A3DE +2040 +28A4 +3AAA +EA8A +4478 +ENDCHAR +STARTCHAR uni45FA +ENCODING 17914 +BBX 15 16 0 -2 +BITMAP +0018 +7BE0 +1040 +2278 +7A40 +0A40 +2BFC +1000 +2FFE +4000 +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni45FB +ENCODING 17915 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +21EE +FA94 +A842 +A800 +ABDE +AA52 +FBD2 +A252 +23D2 +2A1A +3A94 +EB50 +4210 +0010 +ENDCHAR +STARTCHAR uni45FC +ENCODING 17916 +BBX 15 16 0 -2 +BITMAP +201C +21E0 +2020 +FBFE +A820 +A9FC +A9AC +A974 +F9FC +A020 +21FC +2820 +3BFE +E800 +4154 +022A +ENDCHAR +STARTCHAR uni45FD +ENCODING 17917 +BBX 15 16 0 -2 +BITMAP +10A0 +2090 +45FE +7920 +13FC +2520 +7DFC +0120 +55FE +8100 +3FF8 +2108 +3FF8 +0108 +7FFC +0004 +ENDCHAR +STARTCHAR uni45FE +ENCODING 17918 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +FBFE +AA02 +ABFE +A908 +AA52 +FB9C +A108 +2252 +2BDE +3800 +EAA4 +4252 +0452 +ENDCHAR +STARTCHAR uni45FF +ENCODING 17919 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +FA22 +A954 +A94A +AA3A +A800 +F9FC +A154 +23FE +2800 +39FC +E820 +40A0 +0040 +ENDCHAR +STARTCHAR uni4600 +ENCODING 17920 +BBX 15 16 0 -2 +BITMAP +0800 +3FF0 +2010 +3FF0 +2000 +3FF8 +2008 +3FF8 +0100 +FFFE +1120 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni4601 +ENCODING 17921 +BBX 15 16 0 -2 +BITMAP +0828 +7F24 +0820 +FFFE +1220 +3FA4 +6424 +BF28 +2412 +3FAA +0146 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni4602 +ENCODING 17922 +BBX 15 16 0 -2 +BITMAP +2088 +208C +23EA +F888 +A888 +ABFE +A948 +AB6A +F94A +A36A +214C +2B6C +394A +E96A +4796 +0022 +ENDCHAR +STARTCHAR uni4603 +ENCODING 17923 +BBX 15 15 0 -1 +BITMAP +21FC +2124 +21AC +F924 +A9FC +A820 +A9FC +A820 +FBFE +A154 +222A +2820 +39FC +E820 +43FE +ENDCHAR +STARTCHAR uni4604 +ENCODING 17924 +BBX 14 16 0 -2 +BITMAP +0108 +1FD0 +0120 +7FFC +0200 +0FF0 +3810 +CFF0 +0810 +0FF0 +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni4605 +ENCODING 17925 +BBX 15 16 0 -2 +BITMAP +2044 +4258 +FF62 +0142 +7E3E +4200 +7E4C +4272 +7E42 +423E +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni4606 +ENCODING 17926 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1222 +7DFC +5420 +54F8 +5420 +55FC +7C20 +11FC +1554 +1DFC +E440 +42A4 +028A +047A +ENDCHAR +STARTCHAR uni4607 +ENCODING 17927 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0820 +07C0 +1930 +EFEE +0920 +0FE0 +0110 +3FF8 +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni4608 +ENCODING 17928 +BBX 15 16 0 -2 +BITMAP +2FE8 +2948 +2BE8 +F95E +A80A +ABEA +AAAA +ABEA +FAAA +ABEA +288A +2BEA +3AAA +EBEA +4A2A +1276 +ENDCHAR +STARTCHAR uni4609 +ENCODING 17929 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFC +0440 +1930 +EFEE +0920 +0FE0 +0110 +3FF8 +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni460A +ENCODING 17930 +BBX 15 16 0 -2 +BITMAP +2210 +23DE +2528 +F884 +ABFC +AA94 +AA94 +ABFC +F828 +A3FE +2220 +2B24 +3AA8 +EA92 +442A +08C6 +ENDCHAR +STARTCHAR uni460B +ENCODING 17931 +BBX 15 16 0 -2 +BITMAP +2148 +214C +22AA +F808 +ABFE +A948 +AB68 +A94A +FB6A +A14A +236C +294C +396A +EB8A +4016 +0022 +ENDCHAR +STARTCHAR uni460C +ENCODING 17932 +BBX 14 16 0 -2 +BITMAP +3FFC +2420 +2FF8 +2520 +3FFC +2200 +27F0 +2A10 +33F0 +3FFC +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni460D +ENCODING 17933 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1FF0 +1110 +1FF0 +1110 +7FFC +4124 +5FEC +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni460E +ENCODING 17934 +BBX 15 16 0 -2 +BITMAP +2444 +28E8 +2E0E +FCE4 +AA0A +AEEE +A8A0 +AAEA +F800 +A3F8 +2008 +2BF8 +3A00 +EBFC +4004 +0038 +ENDCHAR +STARTCHAR uni460F +ENCODING 17935 +BBX 15 15 1 -1 +BITMAP +0800 +083E +1022 +7F22 +5524 +5524 +5528 +5524 +5524 +5522 +5522 +57A2 +7C2C +C020 +0020 +ENDCHAR +STARTCHAR uni4610 +ENCODING 17936 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +1078 +7F28 +5528 +5528 +556C +556A +55AA +552A +5528 +5528 +57C8 +FC48 +0098 +0100 +ENDCHAR +STARTCHAR uni4611 +ENCODING 17937 +BBX 15 16 0 -2 +BITMAP +0830 +0808 +1000 +7F70 +5510 +551A +55DA +555C +5558 +5558 +5554 +5554 +5794 +FC12 +0050 +0020 +ENDCHAR +STARTCHAR uni4612 +ENCODING 17938 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +1020 +7F44 +55FE +5528 +5544 +55A2 +553C +5544 +5544 +55A8 +5790 +FC28 +0044 +0082 +ENDCHAR +STARTCHAR uni4613 +ENCODING 17939 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +101E +7F22 +5524 +5540 +5510 +5566 +5542 +5542 +5566 +5542 +57C2 +FC42 +007E +0042 +ENDCHAR +STARTCHAR uni4614 +ENCODING 17940 +BBX 15 16 0 -2 +BITMAP +0820 +0810 +107E +7F42 +5510 +551C +5524 +5554 +5508 +5536 +55C0 +553C +57A4 +FC24 +003C +0024 +ENDCHAR +STARTCHAR uni4615 +ENCODING 17941 +BBX 15 16 0 -2 +BITMAP +1200 +1100 +211C +4FC0 +8000 +1000 +23BE +6288 +A288 +2288 +2288 +22A8 +24C8 +2488 +2828 +2010 +ENDCHAR +STARTCHAR uni4616 +ENCODING 17942 +BBX 15 16 0 -2 +BITMAP +1000 +1200 +221C +43C0 +8500 +1100 +213E +6FC8 +A108 +2108 +2548 +2548 +25C8 +2648 +2028 +2010 +ENDCHAR +STARTCHAR uni4617 +ENCODING 17943 +BBX 15 16 0 -2 +BITMAP +1100 +1540 +254E +47C0 +8000 +17C0 +221E +6444 +A784 +2104 +2244 +2FE4 +2104 +2544 +2934 +2308 +ENDCHAR +STARTCHAR uni4618 +ENCODING 17944 +BBX 15 16 0 -2 +BITMAP +2100 +2FE0 +410E +47C0 +8100 +1FE0 +221E +6444 +A784 +2104 +2244 +2FE4 +2104 +2544 +2934 +2308 +ENDCHAR +STARTCHAR uni4619 +ENCODING 17945 +BBX 15 16 0 -2 +BITMAP +1100 +17C0 +224E +4FE0 +8000 +17C0 +245E +67C4 +A104 +23C4 +2504 +27E4 +2104 +27C4 +2554 +2548 +ENDCHAR +STARTCHAR uni461A +ENCODING 17946 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0500 +0C88 +3450 +C530 +060E +0400 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni461B +ENCODING 17947 +BBX 15 16 0 -2 +BITMAP +2000 +11F0 +0110 +FD10 +0910 +1110 +1110 +3510 +5910 +9510 +1510 +1112 +1112 +1212 +120E +1400 +ENDCHAR +STARTCHAR uni461C +ENCODING 17948 +BBX 14 16 0 -2 +BITMAP +2020 +1020 +0020 +FC20 +09FC +1124 +1124 +3524 +5924 +9524 +1524 +1134 +1128 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni461D +ENCODING 17949 +BBX 14 16 0 -2 +BITMAP +2050 +1048 +0048 +FC40 +087C +13C0 +1040 +3440 +5840 +9420 +1420 +1020 +1014 +1014 +100C +1004 +ENDCHAR +STARTCHAR uni461E +ENCODING 17950 +BBX 15 16 0 -2 +BITMAP +2000 +13F8 +0008 +FC08 +0908 +1108 +1108 +35FE +5802 +9402 +1402 +13FA +1002 +1002 +1014 +1008 +ENDCHAR +STARTCHAR uni461F +ENCODING 17951 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0024 +FC24 +0824 +11FC +1120 +3520 +5920 +95FE +1422 +1022 +102A +1024 +1020 +1020 +ENDCHAR +STARTCHAR uni4620 +ENCODING 17952 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +0040 +FC40 +09FE +1040 +1040 +3484 +58A4 +94A4 +1528 +1128 +1210 +1428 +1044 +1182 +ENDCHAR +STARTCHAR uni4621 +ENCODING 17953 +BBX 15 16 0 -2 +BITMAP +2080 +2088 +20B0 +3EC0 +2084 +2684 +387C +2200 +0100 +FFFE +0500 +0C88 +3450 +C530 +060E +0400 +ENDCHAR +STARTCHAR uni4622 +ENCODING 17954 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +0020 +F9FE +0902 +1204 +1000 +3400 +59FE +9420 +1420 +1020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni4623 +ENCODING 17955 +BBX 15 16 0 -2 +BITMAP +2090 +1090 +0090 +F290 +1292 +22D4 +2298 +6A90 +B290 +2A90 +2290 +2292 +23D2 +2E12 +240E +2000 +ENDCHAR +STARTCHAR uni4624 +ENCODING 17956 +BBX 15 16 0 -2 +BITMAP +2040 +1050 +0048 +F840 +0BFC +1040 +14E0 +38E0 +5550 +9150 +1248 +1444 +1842 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni4625 +ENCODING 17957 +BBX 14 16 0 -2 +BITMAP +2000 +11FC +0124 +FD24 +0924 +11FC +1124 +3524 +5924 +95FC +1524 +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni4626 +ENCODING 17958 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0104 +FD04 +0904 +11FC +1100 +3540 +5944 +9548 +1570 +1140 +1142 +1242 +123E +1400 +ENDCHAR +STARTCHAR uni4627 +ENCODING 17959 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FDFC +0924 +1124 +1124 +3524 +5924 +97FE +1420 +1050 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni4628 +ENCODING 17960 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +0020 +FBFE +0800 +1088 +1504 +3A02 +5488 +9088 +1050 +1050 +1020 +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni4629 +ENCODING 17961 +BBX 14 16 0 -2 +BITMAP +2080 +1080 +01FC +FD04 +0A04 +11E4 +1124 +3524 +59E4 +9524 +1524 +11E4 +1104 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni462A +ENCODING 17962 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +0020 +FBFE +0840 +1088 +1504 +3BFE +5492 +9090 +1090 +1090 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni462B +ENCODING 17963 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +7F7C +1144 +2144 +1A44 +0C7C +3200 +0100 +FFFE +0500 +0C88 +3450 +C530 +060E +0400 +ENDCHAR +STARTCHAR uni462C +ENCODING 17964 +BBX 15 16 0 -2 +BITMAP +2028 +1024 +0024 +F820 +0BFE +1020 +1124 +3524 +5924 +97A8 +1528 +1110 +1212 +122A +1446 +1082 +ENDCHAR +STARTCHAR uni462D +ENCODING 17965 +BBX 15 16 0 -2 +BITMAP +2000 +11FE +0020 +FC20 +0848 +1084 +11FE +3422 +5820 +9420 +15FC +1020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni462E +ENCODING 17966 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +1110 +1110 +2928 +4544 +0100 +FFFE +1200 +1110 +10A0 +1040 +1430 +180E +1000 +ENDCHAR +STARTCHAR uni462F +ENCODING 17967 +BBX 14 16 0 -2 +BITMAP +2020 +1124 +00A4 +FCA8 +0820 +11FC +1104 +3504 +59FC +9504 +1504 +11FC +1104 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni4630 +ENCODING 17968 +BBX 15 16 0 -2 +BITMAP +2004 +100E +03B8 +F088 +1088 +2128 +212E +6BA8 +B0A8 +2AA8 +22A8 +213E +2100 +2280 +247E +2800 +ENDCHAR +STARTCHAR uni4631 +ENCODING 17969 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0820 +1110 +2288 +0C60 +3018 +DFF6 +1010 +1010 +1FF0 +0488 +0C50 +3530 +C60E +0400 +ENDCHAR +STARTCHAR uni4632 +ENCODING 17970 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0004 +F8FC +0804 +11FC +1000 +33FE +5602 +99F8 +1488 +1088 +1050 +1020 +10D8 +1306 +ENDCHAR +STARTCHAR uni4633 +ENCODING 17971 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0050 +FC88 +0904 +1202 +10F8 +3420 +5820 +95FC +1420 +1124 +10A4 +10A8 +13FE +1000 +ENDCHAR +STARTCHAR uni4634 +ENCODING 17972 +BBX 15 16 0 -2 +BITMAP +2208 +1228 +0228 +F228 +1FA4 +2244 +2254 +6E92 +B710 +2AA0 +2A20 +3228 +2244 +22FC +2244 +2200 +ENDCHAR +STARTCHAR uni4635 +ENCODING 17973 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0004 +F804 +09FC +1004 +1404 +3BFE +5420 +9222 +1174 +10A8 +1124 +1222 +10A0 +1040 +ENDCHAR +STARTCHAR uni4636 +ENCODING 17974 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0008 +F010 +1222 +22AA +2272 +6A22 +B272 +2AAA +2326 +22A2 +2242 +2202 +23FE +2002 +ENDCHAR +STARTCHAR uni4637 +ENCODING 17975 +BBX 14 16 0 -2 +BITMAP +2020 +1124 +00A4 +FCA8 +0820 +11FC +1124 +3524 +5974 +95AC +1524 +1124 +1124 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni4638 +ENCODING 17976 +BBX 15 16 0 -2 +BITMAP +2080 +1040 +07FE +F120 +1120 +223C +2244 +6E64 +B294 +2B48 +2248 +2230 +2220 +2250 +2288 +2306 +ENDCHAR +STARTCHAR uni4639 +ENCODING 17977 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +F800 +0888 +1088 +1554 +3A22 +5400 +9020 +13FE +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni463A +ENCODING 17978 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +F202 +1404 +2000 +23FE +6820 +B020 +2920 +213C +2120 +22A0 +2260 +243E +2800 +ENDCHAR +STARTCHAR uni463B +ENCODING 17979 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +F880 +0904 +13FE +1002 +35FC +5904 +95FC +1504 +11FC +1104 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni463C +ENCODING 17980 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +F202 +1504 +2100 +21DE +6A52 +B252 +2B52 +249A +2094 +2110 +2112 +2212 +240E +ENDCHAR +STARTCHAR uni463D +ENCODING 17981 +BBX 15 16 0 -2 +BITMAP +2000 +1040 +039C +FA04 +0A04 +139C +1204 +3604 +5BFC +9490 +1490 +1090 +1090 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni463E +ENCODING 17982 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +FA02 +0C04 +11F8 +1108 +3508 +59F8 +9500 +1500 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni463F +ENCODING 17983 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0202 +F202 +13FE +2210 +2292 +6A92 +B292 +2AFE +2210 +2292 +2292 +2492 +24FE +2802 +ENDCHAR +STARTCHAR uni4640 +ENCODING 17984 +BBX 15 16 0 -2 +BITMAP +2000 +13DE +0252 +F252 +1252 +23DE +2252 +6A52 +B252 +2BDE +2252 +2252 +2252 +2252 +2552 +28A6 +ENDCHAR +STARTCHAR uni4641 +ENCODING 17985 +BBX 15 15 1 -1 +BITMAP +2120 +2110 +21F8 +FF00 +0890 +08E4 +1718 +1020 +3510 +69F8 +A700 +20B0 +2042 +21B2 +260C +ENDCHAR +STARTCHAR uni4642 +ENCODING 17986 +BBX 15 16 0 -2 +BITMAP +2090 +1090 +0108 +F148 +1244 +2492 +2108 +6BFC +B044 +2820 +20A4 +2282 +228A +228A +2478 +2000 +ENDCHAR +STARTCHAR uni4643 +ENCODING 17987 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +03FE +F880 +09FC +1220 +15FE +3000 +55FC +9904 +15FC +1104 +11FC +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni4644 +ENCODING 17988 +BBX 15 16 0 -2 +BITMAP +2008 +103C +01E0 +F820 +0820 +13FE +1020 +34A0 +592C +9524 +1524 +11AC +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni4645 +ENCODING 17989 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0050 +F850 +0BFE +1252 +1652 +3BFE +5400 +9040 +17FE +1088 +1190 +1060 +10D8 +1304 +ENDCHAR +STARTCHAR uni4646 +ENCODING 17990 +BBX 15 16 0 -2 +BITMAP +2010 +13D4 +0058 +FA52 +098C +1088 +1504 +3AFA +5420 +9020 +11FE +1020 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni4647 +ENCODING 17991 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0020 +FC40 +09FC +1154 +1154 +3554 +5954 +952C +1420 +13FE +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni4648 +ENCODING 17992 +BBX 15 16 0 -2 +BITMAP +2100 +1178 +0108 +F208 +12FE +2640 +2A40 +6A7C +B290 +2A10 +22FE +2210 +2228 +2228 +2244 +2282 +ENDCHAR +STARTCHAR uni4649 +ENCODING 17993 +BBX 15 16 0 -2 +BITMAP +2008 +101C +01F0 +FD10 +0910 +11FE +1110 +357C +5944 +957C +1544 +117C +1144 +1244 +127C +1444 +ENDCHAR +STARTCHAR uni464A +ENCODING 17994 +BBX 15 16 0 -2 +BITMAP +20A8 +10A8 +03FE +F8A8 +08A8 +1000 +13FE +3622 +5820 +95FC +1524 +1124 +1134 +1128 +1020 +1020 +ENDCHAR +STARTCHAR uni464B +ENCODING 17995 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +FA02 +0C04 +11FC +1000 +35FC +5904 +95FC +1504 +11FC +1104 +1000 +13FE +1000 +ENDCHAR +STARTCHAR uni464C +ENCODING 17996 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +01FC +F924 +09FC +1020 +13FE +3400 +59FC +9504 +1524 +1124 +1124 +1050 +1088 +1304 +ENDCHAR +STARTCHAR uni464D +ENCODING 17997 +BBX 15 16 0 -2 +BITMAP +2000 +13FA +000C +F84A +0B88 +112A +1126 +3522 +5BF8 +952A +152C +112A +1128 +122A +1226 +1422 +ENDCHAR +STARTCHAR uni464E +ENCODING 17998 +BBX 15 16 0 -2 +BITMAP +201E +13E0 +0122 +FC94 +0840 +1088 +11F0 +3420 +58C4 +95FE +1422 +1020 +13FE +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni464F +ENCODING 17999 +BBX 15 16 0 -2 +BITMAP +2028 +1024 +03FE +F820 +09FC +1124 +11FC +3524 +59FC +9524 +1408 +13FE +1088 +1048 +1048 +1018 +ENDCHAR +STARTCHAR uni4650 +ENCODING 18000 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0000 +F9FC +0904 +1104 +15FC +3800 +57FE +928A +1252 +13FE +1222 +1222 +122A +1204 +ENDCHAR +STARTCHAR uni4651 +ENCODING 18001 +BBX 15 16 0 -2 +BITMAP +2080 +1040 +07FE +F000 +13F8 +2208 +2FFE +6A08 +B3F8 +28A4 +2128 +2310 +2510 +2948 +2186 +2100 +ENDCHAR +STARTCHAR uni4652 +ENCODING 18002 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +F840 +0888 +11F0 +1020 +3444 +59FE +9402 +15FC +1124 +11FC +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni4653 +ENCODING 18003 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0252 +FA52 +0BFE +1020 +1420 +39FC +5420 +9020 +17FE +1040 +1088 +1104 +13FE +1102 +ENDCHAR +STARTCHAR uni4654 +ENCODING 18004 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0200 +FA7C +0A44 +1244 +167C +3A00 +56EE +92AA +12AA +12AA +12EE +1200 +13FE +1000 +ENDCHAR +STARTCHAR uni4655 +ENCODING 18005 +BBX 15 16 0 -2 +BITMAP +2124 +1124 +0224 +F4A4 +1154 +214A +2392 +6D08 +B108 +2928 +212E +2128 +2128 +2158 +214E +2180 +ENDCHAR +STARTCHAR uni4656 +ENCODING 18006 +BBX 15 16 0 -2 +BITMAP +2020 +1222 +0222 +F3FE +1000 +23DE +2252 +6A52 +B3DE +2A52 +2252 +23DE +2252 +2252 +255A +28A4 +ENDCHAR +STARTCHAR uni4657 +ENCODING 18007 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +F888 +0850 +13FE +1622 +3AFA +5622 +92FA +128A +128A +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni4658 +ENCODING 18008 +BBX 15 16 0 -2 +BITMAP +2014 +1012 +0010 +F7FE +1410 +2490 +24D2 +6C92 +B7F2 +2C94 +2494 +25C8 +2AAA +289A +31A6 +2042 +ENDCHAR +STARTCHAR uni4659 +ENCODING 18009 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0202 +F3FE +1210 +2254 +2238 +6A54 +B282 +2A50 +227C +2290 +2210 +25FE +2410 +2810 +ENDCHAR +STARTCHAR uni465A +ENCODING 18010 +BBX 15 16 0 -2 +BITMAP +0200 +1FF0 +1010 +1FF0 +1010 +1FFC +1000 +1FFC +0004 +492C +0200 +FFFE +0680 +1C48 +E530 +060E +ENDCHAR +STARTCHAR uni465B +ENCODING 18011 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +F888 +0924 +1242 +1090 +35F8 +5808 +9444 +14A8 +1190 +1288 +14A4 +10C2 +1080 +ENDCHAR +STARTCHAR uni465C +ENCODING 18012 +BBX 15 16 0 -2 +BITMAP +2020 +147C +0284 +F148 +1030 +20CE +2610 +6A7C +B210 +2A7C +2210 +22FE +2210 +2210 +25FE +2800 +ENDCHAR +STARTCHAR uni465D +ENCODING 18013 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0820 +7E20 +08F8 +FF28 +1428 +7F6A +082A +FF56 +0B82 +0488 +0C50 +3530 +C60E +0400 +ENDCHAR +STARTCHAR uni465E +ENCODING 18014 +BBX 15 16 0 -2 +BITMAP +2020 +17A4 +00A8 +F292 +1114 +2208 +25F4 +6802 +B3F8 +2A08 +2208 +23F8 +2208 +2110 +2FFE +2000 +ENDCHAR +STARTCHAR uni465F +ENCODING 18015 +BBX 14 16 0 -2 +BITMAP +2000 +17FC +0444 +F5F4 +1494 +27FC +2404 +6DF4 +B514 +2DF4 +2444 +24F4 +2544 +25FC +2444 +27FC +ENDCHAR +STARTCHAR uni4660 +ENCODING 18016 +BBX 15 16 0 -2 +BITMAP +2000 +17FE +0400 +F628 +1548 +27EE +2492 +6C84 +B6A0 +2EA8 +27E8 +2488 +2494 +2514 +2924 +3242 +ENDCHAR +STARTCHAR uni4661 +ENCODING 18017 +BBX 15 16 0 -2 +BITMAP +2020 +11FC +0124 +F9FC +0820 +13FE +1000 +35FC +5904 +95FC +1504 +11FC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni4662 +ENCODING 18018 +BBX 15 16 0 -2 +BITMAP +2104 +1088 +0000 +FBFE +0A22 +12AA +1272 +3222 +57FE +9800 +15FC +1104 +11FC +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni4663 +ENCODING 18019 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0040 +FBFE +0888 +1104 +1652 +3050 +57DE +9850 +15DC +1050 +13DE +1050 +1050 +1050 +ENDCHAR +STARTCHAR uni4664 +ENCODING 18020 +BBX 15 16 0 -2 +BITMAP +2000 +127C +0144 +F174 +1054 +2054 +26FE +6A82 +B2BA +2AAA +22BA +2282 +228A +2284 +2500 +28FE +ENDCHAR +STARTCHAR uni4665 +ENCODING 18021 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2040 +FBFC +0A44 +0B74 +1040 +10A0 +3518 +6AF6 +A400 +29F8 +2048 +2058 +2040 +ENDCHAR +STARTCHAR uni4666 +ENCODING 18022 +BBX 15 16 0 -2 +BITMAP +2088 +13FE +0088 +F9FC +0954 +1154 +15FC +3800 +57FE +9242 +10F8 +1088 +1148 +1030 +1060 +1380 +ENDCHAR +STARTCHAR uni4667 +ENCODING 18023 +BBX 15 16 0 -2 +BITMAP +201C +11E0 +0020 +FBFE +0820 +11FC +11AC +3574 +59FC +9420 +15FC +1020 +13FE +1000 +1154 +122A +ENDCHAR +STARTCHAR uni4668 +ENCODING 18024 +BBX 15 16 0 -2 +BITMAP +21FC +1124 +01FC +F924 +09FC +1020 +13FE +34A8 +5924 +9642 +1420 +13FE +1060 +1194 +1688 +10C6 +ENDCHAR +STARTCHAR uni4669 +ENCODING 18025 +BBX 15 16 0 -2 +BITMAP +2088 +13FE +0088 +FBFE +0A02 +11FC +1400 +3BFE +5440 +90A2 +1354 +10B8 +1354 +1092 +1350 +1020 +ENDCHAR +STARTCHAR uni466A +ENCODING 18026 +BBX 15 16 0 -2 +BITMAP +2288 +2108 +FABE +2008 +729C +A92A +2288 +FFFE +0A20 +3118 +CFE6 +0288 +0450 +1C20 +6518 +0606 +ENDCHAR +STARTCHAR uni466B +ENCODING 18027 +BBX 15 16 0 -2 +BITMAP +2094 +1398 +0092 +FD8E +0A80 +11FC +1124 +35FC +5924 +95FC +1488 +11FC +1088 +13FE +1088 +1104 +ENDCHAR +STARTCHAR uni466C +ENCODING 18028 +BBX 15 16 0 -2 +BITMAP +23DE +1252 +03DE +FA52 +0BDE +1252 +17DE +398C +5652 +9040 +17FE +1088 +1190 +1060 +10D8 +1304 +ENDCHAR +STARTCHAR uni466D +ENCODING 18029 +BBX 15 16 0 -2 +BITMAP +2040 +17FE +0492 +F3FC +1090 +23FC +2090 +6FFE +B108 +2BFC +250A +21F8 +2240 +227C +2540 +28FE +ENDCHAR +STARTCHAR uni466E +ENCODING 18030 +BBX 15 16 0 -2 +BITMAP +2088 +13FE +0088 +FBDE +0A52 +13DE +14A0 +3890 +55FE +9120 +13FC +1520 +11FC +1120 +11FE +1100 +ENDCHAR +STARTCHAR uni466F +ENCODING 18031 +BBX 15 16 0 -2 +BITMAP +2014 +17FE +0490 +F4D4 +1494 +27FA +25AA +6A96 +B1A2 +2BF8 +2208 +23F8 +2040 +227C +2540 +28FE +ENDCHAR +STARTCHAR uni4670 +ENCODING 18032 +BBX 15 16 0 -2 +BITMAP +220C +110A +07C8 +F29E +1554 +26F4 +245E +6FD4 +B114 +2FDE +2554 +2554 +25D4 +245E +2550 +2490 +ENDCHAR +STARTCHAR uni4671 +ENCODING 18033 +BBX 15 16 0 -2 +BITMAP +23FE +1202 +03FE +FA92 +0A54 +1292 +16FE +3AAA +56FE +9322 +12FA +12AA +12FA +1222 +15FA +1004 +ENDCHAR +STARTCHAR uni4672 +ENCODING 18034 +BBX 15 15 0 -2 +BITMAP +7FFC +0440 +0440 +3FF8 +2448 +2448 +3FF8 +0100 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni4673 +ENCODING 18035 +BBX 15 15 0 -2 +BITMAP +7FFC +0440 +0440 +3FF8 +2448 +2448 +3FF8 +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni4674 +ENCODING 18036 +BBX 15 16 0 -2 +BITMAP +7FFC +0440 +3FF8 +2448 +2448 +3FF8 +0200 +FFFE +0820 +1FF0 +2828 +C826 +0FE0 +0808 +0808 +07F8 +ENDCHAR +STARTCHAR uni4675 +ENCODING 18037 +BBX 15 15 0 -2 +BITMAP +7FFC +0440 +3FF8 +2448 +2448 +3FF8 +0100 +3FF8 +0100 +FFFE +0000 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni4676 +ENCODING 18038 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +2810 +29FE +2922 +FE20 +AA50 +AA50 +AAD2 +AACC +AF48 +C244 +8244 +8252 +FE60 +8240 +ENDCHAR +STARTCHAR uni4677 +ENCODING 18039 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0442 +1842 +E03E +0020 +FFFE +0820 +0420 +04A0 +0040 +ENDCHAR +STARTCHAR uni4678 +ENCODING 18040 +BBX 15 16 0 -2 +BITMAP +0008 +7E08 +4208 +42FE +7E08 +4208 +4288 +7E48 +4248 +4208 +7E08 +2428 +2412 +2402 +43FE +8000 +ENDCHAR +STARTCHAR uni4679 +ENCODING 18041 +BBX 15 15 0 -2 +BITMAP +7EFC +2484 +2484 +24FC +2484 +2484 +FFFC +2484 +2484 +24FC +2450 +2450 +2492 +4492 +850E +ENDCHAR +STARTCHAR uni467A +ENCODING 18042 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +55FC +5904 +5104 +91FC +1104 +1104 +11FC +2850 +2450 +4492 +4112 +820E +ENDCHAR +STARTCHAR uni467B +ENCODING 18043 +BBX 15 16 0 -2 +BITMAP +0800 +087C +0B44 +7C44 +487C +4844 +4844 +7F7C +0944 +1944 +297C +4928 +8B28 +084A +084A +0886 +ENDCHAR +STARTCHAR uni467C +ENCODING 18044 +BBX 15 15 0 -2 +BITMAP +7EFC +1284 +1284 +22FC +2A84 +4484 +80FC +3E84 +2284 +22FC +2250 +2250 +3E92 +2292 +010E +ENDCHAR +STARTCHAR uni467D +ENCODING 18045 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +FFFE +0280 +2448 +1830 +3FF8 +D016 +1FF0 +1010 +1FF0 +1010 +1FF0 +0442 +1842 +E03E +ENDCHAR +STARTCHAR uni467E +ENCODING 18046 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +1084 +FE84 +82FC +0484 +4084 +40FC +7C84 +4084 +40FC +4050 +4C50 +7092 +4092 +010E +ENDCHAR +STARTCHAR uni467F +ENCODING 18047 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +7C84 +10FC +1084 +1084 +FEFC +1084 +3884 +34FC +5250 +9050 +1092 +1092 +110E +ENDCHAR +STARTCHAR uni4680 +ENCODING 18048 +BBX 15 16 0 -2 +BITMAP +0800 +107C +3E44 +2244 +327C +2A44 +2A44 +FE7C +2244 +3244 +2A7C +2A28 +2228 +424A +4A4A +8486 +ENDCHAR +STARTCHAR uni4681 +ENCODING 18049 +BBX 14 16 1 -2 +BITMAP +1000 +10F8 +2088 +FE88 +82F8 +8288 +BA88 +AAF8 +AA88 +AA88 +AAF8 +BA50 +8250 +8294 +8A94 +850C +ENDCHAR +STARTCHAR uni4682 +ENCODING 18050 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +7C84 +10FC +1084 +FE84 +28FC +2884 +6C84 +AAFC +2850 +2850 +4892 +4892 +990E +ENDCHAR +STARTCHAR uni4683 +ENCODING 18051 +BBX 14 16 1 -2 +BITMAP +1000 +10F8 +1E88 +1088 +10F8 +FC88 +8488 +84F8 +F488 +9488 +94F8 +F450 +8450 +8494 +FC94 +850C +ENDCHAR +STARTCHAR uni4684 +ENCODING 18052 +BBX 15 15 0 -2 +BITMAP +7E7C +0244 +3E44 +027C +FFC4 +0844 +097C +4944 +2A44 +1C7C +2A28 +C928 +094A +284A +1086 +ENDCHAR +STARTCHAR uni4685 +ENCODING 18053 +BBX 15 16 0 -2 +BITMAP +0800 +087C +0844 +FF44 +087C +2A44 +2A44 +2A7C +5D44 +8844 +1C7C +2A28 +4928 +884A +084A +0886 +ENDCHAR +STARTCHAR uni4686 +ENCODING 18054 +BBX 15 16 0 -2 +BITMAP +2200 +227C +7F44 +2244 +2A7C +0844 +3E44 +2A7C +2A44 +2A44 +FF7C +0828 +1428 +124A +224A +4086 +ENDCHAR +STARTCHAR uni4687 +ENCODING 18055 +BBX 15 16 0 -2 +BITMAP +1000 +107C +5244 +5144 +957C +0844 +3044 +C07C +7E44 +4244 +7E7C +4228 +7E28 +424A +7E4A +4286 +ENDCHAR +STARTCHAR uni4688 +ENCODING 18056 +BBX 15 15 0 -2 +BITMAP +FF7C +1444 +1444 +7F7C +5544 +5544 +7F7C +0844 +0844 +7F7C +0828 +0828 +0F4A +F04A +4086 +ENDCHAR +STARTCHAR uni4689 +ENCODING 18057 +BBX 15 16 0 -2 +BITMAP +2000 +2F7C +F544 +2544 +757C +2544 +F544 +297C +2344 +0844 +087C +FFA8 +1428 +224A +414A +8086 +ENDCHAR +STARTCHAR uni468A +ENCODING 18058 +BBX 15 16 0 -2 +BITMAP +2200 +147C +0044 +7F44 +007C +1444 +2244 +417C +0044 +7F44 +557C +5528 +5528 +57CA +FC4A +0086 +ENDCHAR +STARTCHAR uni468B +ENCODING 18059 +BBX 14 15 1 -2 +BITMAP +7CF8 +4488 +4488 +7CF8 +0088 +FE88 +82F8 +FE88 +8288 +FEF8 +8250 +FE50 +2894 +4494 +850C +ENDCHAR +STARTCHAR uni468C +ENCODING 18060 +BBX 15 16 0 -2 +BITMAP +0800 +107C +7F44 +4144 +7F7C +4144 +7F44 +107C +FFC4 +2244 +497C +88A8 +7F68 +084A +084A +0886 +ENDCHAR +STARTCHAR uni468D +ENCODING 18061 +BBX 15 16 0 -2 +BITMAP +0800 +FF7C +0844 +7E44 +087C +FF44 +0044 +7E7C +4244 +7E44 +427C +7E28 +4228 +7E4A +244A +4286 +ENDCHAR +STARTCHAR uni468E +ENCODING 18062 +BBX 15 16 0 -2 +BITMAP +0800 +087C +7F44 +1044 +3E7C +1044 +FFC4 +227C +4144 +90C4 +267C +2228 +3628 +224A +3E4A +2286 +ENDCHAR +STARTCHAR uni468F +ENCODING 18063 +BBX 15 16 0 -2 +BITMAP +0800 +4A7C +2C44 +0844 +FF7C +2A44 +4944 +887C +4244 +7744 +927C +5A28 +2F28 +224A +424A +8286 +ENDCHAR +STARTCHAR uni4690 +ENCODING 18064 +BBX 15 16 0 -2 +BITMAP +4000 +777C +A544 +2544 +FD7C +2744 +5544 +807C +7E44 +4244 +427C +7E28 +4228 +424A +7E4A +4286 +ENDCHAR +STARTCHAR uni4691 +ENCODING 18065 +BBX 15 15 0 -2 +BITMAP +FEFC +AA84 +AA84 +FEFC +0084 +7C84 +44FC +7C84 +4484 +7CFC +4450 +7C50 +0092 +2892 +450E +ENDCHAR +STARTCHAR uni4692 +ENCODING 18066 +BBX 15 16 0 -2 +BITMAP +1000 +087C +7F44 +2244 +FF7C +0044 +7F44 +497C +7F44 +4944 +7F7C +0828 +7F28 +084A +0F4A +F086 +ENDCHAR +STARTCHAR uni4693 +ENCODING 18067 +BBX 15 15 0 -2 +BITMAP +FEFC +2884 +FE84 +AAFC +FE84 +0084 +7CFC +4484 +7C84 +44FC +7C50 +1050 +FE92 +1092 +110E +ENDCHAR +STARTCHAR uni4694 +ENCODING 18068 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +FE84 +8284 +7CFC +5484 +9884 +7CFC +C484 +7C84 +44FC +7C50 +4450 +7C92 +2892 +450E +ENDCHAR +STARTCHAR uni4695 +ENCODING 18069 +BBX 15 16 0 -2 +BITMAP +7700 +007C +7744 +5544 +777C +5544 +0844 +7F7C +5444 +7F44 +557C +7F28 +5528 +5E4A +554A +9B86 +ENDCHAR +STARTCHAR uni4696 +ENCODING 18070 +BBX 15 15 0 -2 +BITMAP +FEFC +1084 +FE84 +92FC +5484 +0084 +EEFC +AA84 +EE84 +00FC +FE50 +5450 +BA92 +1092 +FF0E +ENDCHAR +STARTCHAR uni4697 +ENCODING 18071 +BBX 15 16 0 -2 +BITMAP +2008 +2048 +7848 +4848 +9044 +7C84 +54A4 +5522 +7C20 +5440 +5440 +7C48 +5484 +55FE +4482 +8C00 +ENDCHAR +STARTCHAR uni4698 +ENCODING 18072 +BBX 15 16 0 -2 +BITMAP +1200 +1380 +249C +4900 +87C0 +1540 +257E +67C8 +A548 +2548 +27C8 +2548 +2548 +2548 +2468 +28D0 +ENDCHAR +STARTCHAR uni4699 +ENCODING 18073 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +3C00 +2400 +487C +BE44 +2A44 +2A7C +3E44 +2A44 +2A7C +3E44 +2A00 +4A00 +42FE +8600 +ENDCHAR +STARTCHAR uni469A +ENCODING 18074 +BBX 15 16 0 -2 +BITMAP +1010 +1050 +3C50 +247C +4890 +BE10 +2A10 +2AFE +3E28 +2A28 +2A28 +3E28 +2A4A +4A4A +4286 +8700 +ENDCHAR +STARTCHAR uni469B +ENCODING 18075 +BBX 15 16 0 -2 +BITMAP +1010 +1050 +3C50 +247C +4850 +BE90 +2A10 +2AFE +3E00 +2A00 +2A7C +3E44 +2A44 +4A44 +427C +8644 +ENDCHAR +STARTCHAR uni469C +ENCODING 18076 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +3CFE +2492 +4892 +BEFE +2A92 +2AA2 +3EFE +2A48 +2A88 +3FFE +2A08 +4A08 +4208 +8608 +ENDCHAR +STARTCHAR uni469D +ENCODING 18077 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +79FE +4800 +9088 +7C88 +5554 +5622 +7C00 +5420 +55FE +7C20 +5420 +5420 +4420 +8C20 +ENDCHAR +STARTCHAR uni469E +ENCODING 18078 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7820 +4BFE +9020 +7D24 +5524 +5524 +7EAA +5470 +54A8 +7CA8 +5524 +5622 +4420 +8C20 +ENDCHAR +STARTCHAR uni469F +ENCODING 18079 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +3C84 +24FC +4884 +BEFC +2A00 +2AFE +3E08 +2BFE +2A08 +3E88 +2A48 +4A08 +4228 +8610 +ENDCHAR +STARTCHAR uni46A0 +ENCODING 18080 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7904 +4904 +91FC +7D04 +5504 +55FC +7C00 +5512 +55D4 +7D18 +5510 +5552 +4592 +8D0E +ENDCHAR +STARTCHAR uni46A1 +ENCODING 18081 +BBX 15 15 1 -1 +BITMAP +2000 +3DFC +2524 +4924 +FDFC +5524 +5524 +7D24 +55FC +5420 +7C10 +4554 +4544 +864A +8C38 +ENDCHAR +STARTCHAR uni46A2 +ENCODING 18082 +BBX 15 16 0 -2 +BITMAP +2048 +2148 +7948 +4BFE +9148 +7D48 +5578 +5500 +7DFE +5420 +57FE +7C70 +54A8 +5524 +4622 +8C20 +ENDCHAR +STARTCHAR uni46A3 +ENCODING 18083 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +3C84 +2484 +48FC +BE84 +2A84 +2AFC +3E00 +2BFE +2A20 +3EA0 +2ABC +4AA0 +4360 +863E +ENDCHAR +STARTCHAR uni46A4 +ENCODING 18084 +BBX 15 16 0 -2 +BITMAP +1000 +107C +3C54 +2454 +487C +BE54 +2A54 +2A7C +3E10 +2AFE +2A92 +3E96 +2ABE +4A82 +428A +8684 +ENDCHAR +STARTCHAR uni46A5 +ENCODING 18085 +BBX 15 16 0 -2 +BITMAP +1000 +10EE +3C22 +2422 +48EE +BE88 +2A88 +2AEE +3E22 +2AAA +2A66 +3E66 +2AAA +4A22 +42AA +8644 +ENDCHAR +STARTCHAR uni46A6 +ENCODING 18086 +BBX 15 16 0 -2 +BITMAP +2008 +203C +79D0 +491C +9110 +7D7C +5554 +5558 +7D70 +5554 +554C +7D40 +5678 +54A8 +442A +8C46 +ENDCHAR +STARTCHAR uni46A7 +ENCODING 18087 +BBX 15 16 0 -2 +BITMAP +2000 +21DC +7844 +4954 +90CC +7D54 +5428 +5444 +7D92 +5420 +54C8 +7C32 +54C4 +5418 +4460 +8D80 +ENDCHAR +STARTCHAR uni46A8 +ENCODING 18088 +BBX 15 16 0 -2 +BITMAP +2012 +21D4 +7848 +4A8A +9104 +7E02 +55DC +5454 +7C62 +55C0 +551E +7DC2 +5454 +5448 +4554 +8CA2 +ENDCHAR +STARTCHAR uni46A9 +ENCODING 18089 +BBX 15 16 0 -2 +BITMAP +2018 +21E0 +7840 +4BFE +9088 +7D74 +5652 +5470 +7C00 +55FC +5504 +7D74 +5554 +5574 +4504 +8D0C +ENDCHAR +STARTCHAR uni46AA +ENCODING 18090 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7954 +4954 +91FC +7C00 +57FE +5400 +7DFC +5504 +55FC +7C62 +5494 +5588 +46A4 +8CC2 +ENDCHAR +STARTCHAR uni46AB +ENCODING 18091 +BBX 15 16 0 -2 +BITMAP +1020 +7E20 +4A7E +7EC4 +1028 +FF10 +2028 +3EC6 +5200 +1FE0 +2040 +5FF0 +9110 +1FF0 +1110 +2130 +ENDCHAR +STARTCHAR uni46AC +ENCODING 18092 +BBX 15 16 0 -2 +BITMAP +2020 +2124 +78A8 +4BFE +90A8 +7D24 +5622 +5508 +7DC8 +565E +5548 +7CA8 +54BE +5508 +4508 +8E08 +ENDCHAR +STARTCHAR uni46AD +ENCODING 18093 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +7888 +4800 +91DC +7D54 +55DC +5488 +7DFE +5690 +54FC +7C90 +54FC +5490 +44FE +8C80 +ENDCHAR +STARTCHAR uni46AE +ENCODING 18094 +BBX 15 16 0 -2 +BITMAP +2000 +1000 +11FC +FE44 +0048 +7C48 +0050 +7C5E +0042 +7C42 +4482 +4482 +4482 +7D02 +4514 +0208 +ENDCHAR +STARTCHAR uni46AF +ENCODING 18095 +BBX 14 15 1 -1 +BITMAP +0004 +7C04 +0044 +FE44 +0044 +7C44 +0044 +7C44 +0044 +0044 +7C44 +4444 +4404 +4404 +7C1C +ENDCHAR +STARTCHAR uni46B0 +ENCODING 18096 +BBX 14 15 0 -1 +BITMAP +2080 +1080 +1080 +FE84 +0088 +7C90 +00A0 +7CC0 +0080 +7C80 +4480 +4484 +4484 +7C84 +447C +ENDCHAR +STARTCHAR uni46B1 +ENCODING 18097 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +FE20 +0020 +7CA8 +00A4 +7CA4 +0122 +7D22 +4622 +4420 +4420 +7C20 +44A0 +0040 +ENDCHAR +STARTCHAR uni46B2 +ENCODING 18098 +BBX 14 16 0 -2 +BITMAP +2008 +1008 +1010 +FE20 +0040 +7C88 +0008 +7C10 +0020 +7C44 +4484 +4408 +4410 +7C20 +44C0 +0300 +ENDCHAR +STARTCHAR uni46B3 +ENCODING 18099 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FDFE +0020 +7820 +0020 +79FC +0084 +7888 +4848 +4850 +4820 +7850 +4988 +0606 +ENDCHAR +STARTCHAR uni46B4 +ENCODING 18100 +BBX 14 16 0 -2 +BITMAP +2000 +10FC +1084 +FE84 +0084 +7CFC +0084 +7C84 +0084 +7CFC +4484 +4484 +4484 +7C84 +4514 +0208 +ENDCHAR +STARTCHAR uni46B5 +ENCODING 18101 +BBX 15 16 0 -2 +BITMAP +2008 +1088 +1048 +FE48 +0008 +7C88 +0048 +7C48 +0008 +7C0E +45F8 +4408 +4408 +7C08 +4408 +0008 +ENDCHAR +STARTCHAR uni46B6 +ENCODING 18102 +BBX 15 16 0 -2 +BITMAP +2000 +1000 +11FC +FE20 +0020 +7C20 +0020 +7DFE +0020 +7C20 +4450 +4450 +4488 +7C88 +4504 +0202 +ENDCHAR +STARTCHAR uni46B7 +ENCODING 18103 +BBX 15 16 0 -2 +BITMAP +2090 +1090 +0108 +FD08 +0204 +7C02 +03FC +7880 +0100 +79F8 +4808 +4808 +4808 +7808 +4850 +0020 +ENDCHAR +STARTCHAR uni46B8 +ENCODING 18104 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1050 +FE50 +0088 +7D04 +0202 +7C88 +0088 +7C88 +4488 +4488 +4488 +7D08 +4508 +0208 +ENDCHAR +STARTCHAR uni46B9 +ENCODING 18105 +BBX 15 15 0 -1 +BITMAP +2010 +1110 +0110 +FD12 +0112 +7914 +01D8 +7910 +0110 +7910 +4910 +4912 +4952 +7992 +490E +ENDCHAR +STARTCHAR uni46BA +ENCODING 18106 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +1040 +FE80 +00FE +7D08 +0288 +7C88 +0088 +7C50 +4450 +4420 +4450 +7C88 +4504 +0202 +ENDCHAR +STARTCHAR uni46BB +ENCODING 18107 +BBX 13 16 1 -2 +BITMAP +0400 +0FE0 +3040 +C480 +1300 +0C00 +3200 +FFF8 +0000 +7FF0 +0000 +7FF0 +0000 +7FF0 +4010 +7FF0 +ENDCHAR +STARTCHAR uni46BC +ENCODING 18108 +BBX 15 15 0 -1 +BITMAP +2000 +11F8 +1048 +FE48 +0048 +7C48 +0048 +7DF8 +0088 +7C88 +4488 +4488 +4488 +7C88 +47FE +ENDCHAR +STARTCHAR uni46BD +ENCODING 18109 +BBX 15 16 0 -2 +BITMAP +2008 +103C +11E0 +FE20 +0020 +7C3C +01E0 +7C20 +0020 +7C3E +47E0 +4420 +4422 +7C22 +4422 +001E +ENDCHAR +STARTCHAR uni46BE +ENCODING 18110 +BBX 15 15 0 -1 +BITMAP +2008 +103C +11E0 +FE20 +0020 +7C20 +0020 +7DFE +0020 +7C20 +4420 +4420 +4420 +7C20 +45FC +ENDCHAR +STARTCHAR uni46BF +ENCODING 18111 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +1040 +FE7C +0084 +7C88 +0120 +7C20 +0020 +7C50 +4450 +4450 +4488 +7C88 +4504 +0202 +ENDCHAR +STARTCHAR uni46C0 +ENCODING 18112 +BBX 15 16 0 -2 +BITMAP +2008 +101C +01E0 +FD00 +0100 +79FC +0144 +7944 +0144 +7928 +4928 +4910 +4910 +7A28 +4A44 +0482 +ENDCHAR +STARTCHAR uni46C1 +ENCODING 18113 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +1084 +FE84 +0084 +7DFE +0084 +7C84 +0084 +7DFE +4484 +4484 +4484 +7C84 +4494 +0088 +ENDCHAR +STARTCHAR uni46C2 +ENCODING 18114 +BBX 15 16 0 -2 +BITMAP +2008 +1068 +0388 +FC88 +0088 +7888 +0088 +7BFE +0088 +7888 +4888 +4888 +4908 +7908 +4A08 +0408 +ENDCHAR +STARTCHAR uni46C3 +ENCODING 18115 +BBX 15 16 0 -2 +BITMAP +2000 +1000 +11FC +FC00 +0000 +7C00 +03FE +7C90 +0090 +7C90 +4490 +4490 +4492 +7D12 +4512 +020E +ENDCHAR +STARTCHAR uni46C4 +ENCODING 18116 +BBX 15 16 0 -2 +BITMAP +4200 +2200 +023C +FBA4 +02A4 +72A4 +04A4 +74A4 +0AB4 +7128 +5120 +5122 +5222 +7222 +541E +0800 +ENDCHAR +STARTCHAR uni46C5 +ENCODING 18117 +BBX 14 16 0 -2 +BITMAP +2000 +11FC +1124 +FD24 +0124 +7DFC +0124 +7D24 +0124 +7DFC +4524 +4420 +4420 +7C20 +4420 +0020 +ENDCHAR +STARTCHAR uni46C6 +ENCODING 18118 +BBX 14 16 0 -2 +BITMAP +2020 +1020 +1020 +FE20 +01FC +7D24 +0124 +7D24 +0124 +7DFC +4524 +4524 +4524 +7D24 +45FC +0104 +ENDCHAR +STARTCHAR uni46C7 +ENCODING 18119 +BBX 15 16 0 -2 +BITMAP +2000 +10F8 +1088 +FE88 +0088 +7C88 +0106 +7E00 +0000 +7DFC +4504 +4504 +4504 +7D04 +45FC +0104 +ENDCHAR +STARTCHAR uni46C8 +ENCODING 18120 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +1080 +FCFC +0120 +7E20 +0020 +7C20 +01FE +7C20 +4450 +4450 +4488 +7C88 +4504 +0202 +ENDCHAR +STARTCHAR uni46C9 +ENCODING 18121 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1104 +FF04 +0104 +7DFC +0120 +7D20 +01FE +7D20 +4520 +4510 +4512 +7D4A +4586 +0102 +ENDCHAR +STARTCHAR uni46CA +ENCODING 18122 +BBX 15 16 0 -2 +BITMAP +2000 +1000 +10FC +FE84 +0084 +7C84 +0084 +7C84 +00FC +7C84 +4400 +4448 +4444 +7C84 +4482 +0102 +ENDCHAR +STARTCHAR uni46CB +ENCODING 18123 +BBX 15 16 0 -2 +BITMAP +2028 +1024 +0024 +FC20 +01FE +7920 +0124 +7924 +0124 +7928 +4928 +4918 +4912 +7A1A +4A26 +0442 +ENDCHAR +STARTCHAR uni46CC +ENCODING 18124 +BBX 15 15 0 -1 +BITMAP +2040 +1040 +10FC +FE84 +0104 +7EF4 +0094 +7C94 +00F4 +7C84 +4494 +4488 +4482 +7C82 +447E +ENDCHAR +STARTCHAR uni46CD +ENCODING 18125 +BBX 15 16 0 -2 +BITMAP +2090 +1090 +0090 +FBFC +0094 +7894 +03FC +7A90 +0290 +7BFE +4892 +4892 +491A +7914 +4A10 +0410 +ENDCHAR +STARTCHAR uni46CE +ENCODING 18126 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +0020 +FBFE +0202 +7C04 +0000 +7890 +0090 +7890 +4888 +4908 +4908 +7904 +4A04 +0402 +ENDCHAR +STARTCHAR uni46CF +ENCODING 18127 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +1084 +FE84 +0084 +7CFC +0080 +7CA0 +00A2 +7CA4 +44B8 +44A0 +44A2 +7D22 +451E +0200 +ENDCHAR +STARTCHAR uni46D0 +ENCODING 18128 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +7FC8 +0008 +3F88 +2088 +3FA8 +0110 +FFFE +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni46D1 +ENCODING 18129 +BBX 15 15 0 -1 +BITMAP +2000 +1040 +0020 +FC28 +0008 +7888 +0090 +7A94 +02A2 +7AA2 +4CC2 +4888 +4988 +7A88 +4478 +ENDCHAR +STARTCHAR uni46D2 +ENCODING 18130 +BBX 15 15 0 -2 +BITMAP +7DFE +1080 +10FC +1E04 +F028 +0110 +7FFC +0000 +3FF8 +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni46D3 +ENCODING 18131 +BBX 13 16 1 -2 +BITMAP +0900 +4900 +49F8 +4940 +4A20 +0800 +0200 +FFF8 +0000 +7FF0 +0000 +7FF0 +0000 +7FF0 +4010 +7FF0 +ENDCHAR +STARTCHAR uni46D4 +ENCODING 18132 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +1020 +FE20 +0040 +7DFC +0154 +7D54 +0154 +7D54 +4554 +4554 +4554 +7D44 +4514 +0108 +ENDCHAR +STARTCHAR uni46D5 +ENCODING 18133 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FE22 +0222 +7BFE +0222 +7A22 +03FE +7820 +4920 +48A0 +4840 +78A0 +4918 +0606 +ENDCHAR +STARTCHAR uni46D6 +ENCODING 18134 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +01FC +FD24 +0124 +79FC +0124 +7924 +01FC +7820 +4824 +4818 +4832 +78CA +4B06 +0002 +ENDCHAR +STARTCHAR uni46D7 +ENCODING 18135 +BBX 14 16 1 -2 +BITMAP +0080 +FC40 +93FC +9000 +9000 +FDF8 +8400 +8400 +85F8 +FC00 +9000 +91F8 +9108 +9108 +FDF8 +0108 +ENDCHAR +STARTCHAR uni46D8 +ENCODING 18136 +BBX 15 16 0 -2 +BITMAP +2080 +1088 +009C +FD70 +0110 +7B10 +0510 +7910 +01FE +7910 +4910 +4910 +4910 +7910 +497C +0100 +ENDCHAR +STARTCHAR uni46D9 +ENCODING 18137 +BBX 15 16 0 -2 +BITMAP +2090 +1090 +0090 +FD10 +01FE +7B10 +0510 +7938 +0138 +7954 +4954 +4992 +4910 +7910 +4910 +0110 +ENDCHAR +STARTCHAR uni46DA +ENCODING 18138 +BBX 13 16 1 -2 +BITMAP +1000 +FDF0 +1090 +7C90 +1110 +FD50 +1220 +FFF8 +0000 +7FF0 +0000 +7FF0 +0000 +7FF0 +4010 +7FF0 +ENDCHAR +STARTCHAR uni46DB +ENCODING 18139 +BBX 14 15 0 -1 +BITMAP +2000 +1000 +11FC +FF04 +0104 +7D74 +0154 +7D54 +0154 +7D54 +4574 +4504 +4504 +7DFC +4504 +ENDCHAR +STARTCHAR uni46DC +ENCODING 18140 +BBX 14 16 0 -2 +BITMAP +2020 +1020 +0040 +FDFC +0104 +7904 +0194 +7954 +0124 +7924 +4954 +4994 +4904 +7904 +49FC +0104 +ENDCHAR +STARTCHAR uni46DD +ENCODING 18141 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0024 +FC24 +01FC +7844 +0044 +7BFE +0000 +7820 +4820 +4924 +4924 +7924 +49FC +0004 +ENDCHAR +STARTCHAR uni46DE +ENCODING 18142 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1104 +FDFC +0104 +7DFC +0000 +7C00 +01FC +7C20 +4420 +47FE +4420 +7C20 +4420 +0020 +ENDCHAR +STARTCHAR uni46DF +ENCODING 18143 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FBFE +0020 +7820 +0124 +7924 +0124 +7AAA +4820 +4850 +4850 +7888 +4904 +0202 +ENDCHAR +STARTCHAR uni46E0 +ENCODING 18144 +BBX 15 15 0 -1 +BITMAP +2000 +11FE +1000 +FE00 +00FC +7C84 +0084 +7C84 +00FC +7C00 +4484 +4444 +4448 +7C00 +45FE +ENDCHAR +STARTCHAR uni46E1 +ENCODING 18145 +BBX 15 16 0 -2 +BITMAP +201C +13E0 +0220 +FE20 +03FE +7A20 +0290 +7B0A +0206 +79FA +4908 +4908 +4908 +7908 +49F8 +0108 +ENDCHAR +STARTCHAR uni46E2 +ENCODING 18146 +BBX 15 16 0 -2 +BITMAP +201C +11E0 +0020 +FC20 +03FE +78A8 +0124 +7A22 +0000 +78F8 +4888 +4888 +4888 +788A +490A +0206 +ENDCHAR +STARTCHAR uni46E3 +ENCODING 18147 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +01FC +FD24 +01FC +7924 +01FC +7800 +03FE +7880 +4900 +49FC +4804 +7804 +4828 +0010 +ENDCHAR +STARTCHAR uni46E4 +ENCODING 18148 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +1084 +FE84 +0084 +7C84 +00FC +7C10 +0010 +7C90 +449E +4490 +4490 +7CD0 +453E +0200 +ENDCHAR +STARTCHAR uni46E5 +ENCODING 18149 +BBX 15 16 0 -2 +BITMAP +2184 +1068 +0030 +FCC8 +0304 +7840 +03FE +78A0 +0120 +7BFC +4D24 +4924 +4934 +7928 +4820 +0020 +ENDCHAR +STARTCHAR uni46E6 +ENCODING 18150 +BBX 15 16 0 -2 +BITMAP +2000 +1050 +1048 +FE84 +0124 +7C20 +0050 +7C88 +0106 +7EF8 +4488 +4488 +4488 +7C88 +44F8 +0088 +ENDCHAR +STARTCHAR uni46E7 +ENCODING 18151 +BBX 15 15 0 -1 +BITMAP +2010 +1110 +1110 +FD92 +0154 +7D10 +01FE +7D10 +0138 +7D54 +4592 +4510 +4510 +7D10 +45FE +ENDCHAR +STARTCHAR uni46E8 +ENCODING 18152 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +11FC +FE00 +0088 +7C50 +03FE +7C20 +0020 +7C20 +45FC +4420 +4420 +7C20 +4420 +0020 +ENDCHAR +STARTCHAR uni46E9 +ENCODING 18153 +BBX 15 15 0 -1 +BITMAP +2000 +11FE +1048 +FE48 +0048 +7DCE +0102 +7D02 +0102 +7DCE +4448 +4448 +4448 +7C48 +45FE +ENDCHAR +STARTCHAR uni46EA +ENCODING 18154 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +FA02 +0088 +7904 +0202 +79FC +0004 +79FC +4900 +49FC +4804 +7804 +4828 +0010 +ENDCHAR +STARTCHAR uni46EB +ENCODING 18155 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +0080 +FCF8 +0080 +78F8 +0080 +7BFE +0140 +7924 +4928 +4910 +4908 +7944 +4982 +0100 +ENDCHAR +STARTCHAR uni46EC +ENCODING 18156 +BBX 14 16 0 -2 +BITMAP +2080 +1080 +01FC +FD04 +0284 +78F4 +0144 +7844 +03FC +7844 +4954 +4954 +49F4 +7804 +4828 +0010 +ENDCHAR +STARTCHAR uni46ED +ENCODING 18157 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +01FC +FC20 +0020 +7BFE +0088 +7850 +01FC +7820 +4820 +4BFE +4820 +7820 +4820 +0020 +ENDCHAR +STARTCHAR uni46EE +ENCODING 18158 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +10E8 +FD2C +012A +7EA8 +0048 +7CA0 +011E +7E00 +44FC +4484 +4484 +7C84 +44FC +0084 +ENDCHAR +STARTCHAR uni46EF +ENCODING 18159 +BBX 15 16 0 -2 +BITMAP +2000 +11FE +0102 +FD02 +01FE +7910 +0110 +79FE +0110 +7910 +497E +4942 +4942 +7A42 +4A7E +0442 +ENDCHAR +STARTCHAR uni46F0 +ENCODING 18160 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1104 +FF04 +01FC +7D04 +0104 +7DFC +0000 +7D12 +45D4 +4518 +4510 +7D52 +4592 +010E +ENDCHAR +STARTCHAR uni46F1 +ENCODING 18161 +BBX 15 15 0 -1 +BITMAP +2020 +1020 +01FC +FD24 +0124 +7924 +01FC +7820 +0040 +7820 +48A4 +4A82 +4A8A +7A8A +4478 +ENDCHAR +STARTCHAR uni46F2 +ENCODING 18162 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +01FC +FD04 +01FC +7904 +01FC +7820 +0020 +7BFE +4A22 +4A22 +4A2A +7A24 +4820 +0020 +ENDCHAR +STARTCHAR uni46F3 +ENCODING 18163 +BBX 15 15 0 -1 +BITMAP +2020 +1020 +03FE +FC50 +0088 +7924 +0222 +79FC +0124 +79FC +4924 +49FC +4822 +7822 +481E +ENDCHAR +STARTCHAR uni46F4 +ENCODING 18164 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +01FC +FC50 +0088 +7904 +03FE +7808 +01E8 +7928 +4928 +49E8 +4928 +7808 +4828 +0010 +ENDCHAR +STARTCHAR uni46F5 +ENCODING 18165 +BBX 15 16 0 -2 +BITMAP +201C +13E0 +0044 +F924 +00A8 +7890 +03FE +7A02 +0000 +79FC +4884 +4888 +4850 +7820 +48D8 +0306 +ENDCHAR +STARTCHAR uni46F6 +ENCODING 18166 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FC20 +01FC +7820 +03FE +7820 +0000 +7820 +4BFE +4870 +48A8 +7924 +4A22 +0020 +ENDCHAR +STARTCHAR uni46F7 +ENCODING 18167 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +FA02 +0504 +7900 +01DE +7A52 +0252 +7B52 +4C9A +4894 +4910 +7912 +4A12 +040E +ENDCHAR +STARTCHAR uni46F8 +ENCODING 18168 +BBX 15 16 0 -2 +BITMAP +2020 +1010 +01FE +FD00 +0110 +7910 +011E +7910 +0110 +797E +4942 +4942 +4942 +7A42 +4A7E +0442 +ENDCHAR +STARTCHAR uni46F9 +ENCODING 18169 +BBX 15 16 0 -2 +BITMAP +2080 +10FC +0104 +FDF8 +0008 +7BFE +0040 +78A2 +0334 +7858 +4894 +4B34 +4852 +7890 +4B50 +0020 +ENDCHAR +STARTCHAR uni46FA +ENCODING 18170 +BBX 15 16 0 -2 +BITMAP +21FC +1124 +0124 +FDFC +0124 +7924 +01FC +7850 +0088 +7904 +4A8A +4888 +4888 +7888 +4908 +0208 +ENDCHAR +STARTCHAR uni46FB +ENCODING 18171 +BBX 15 16 0 -2 +BITMAP +2008 +101C +01F0 +FD10 +0110 +79FE +0110 +797C +0144 +797C +4944 +497C +4944 +7A44 +427C +0444 +ENDCHAR +STARTCHAR uni46FC +ENCODING 18172 +BBX 15 15 0 -1 +BITMAP +2040 +119C +0104 +FD04 +01DC +7904 +0104 +79FC +0000 +7800 +49FC +4820 +4820 +7820 +4BFE +ENDCHAR +STARTCHAR uni46FD +ENCODING 18173 +BBX 15 16 0 -2 +BITMAP +2008 +103C +01E0 +FC20 +0020 +7BFE +0020 +78A0 +012C +7924 +4924 +49AC +4924 +7924 +49FC +0104 +ENDCHAR +STARTCHAR uni46FE +ENCODING 18174 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FC20 +01FC +7820 +03FE +7840 +0088 +79F0 +4824 +4BFE +4822 +7924 +4AA2 +0040 +ENDCHAR +STARTCHAR uni46FF +ENCODING 18175 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0000 +FDFC +0104 +7904 +01FC +7800 +03FE +7A8A +4A52 +4BFE +4A22 +7A22 +4A2A +0204 +ENDCHAR +STARTCHAR uni4700 +ENCODING 18176 +BBX 15 15 0 -1 +BITMAP +4000 +23DE +014A +F94A +035A +756A +014A +72D6 +0020 +7020 +5120 +513C +5120 +7120 +57FE +ENDCHAR +STARTCHAR uni4701 +ENCODING 18177 +BBX 15 16 0 -2 +BITMAP +2020 +11FC +0220 +FBFE +0200 +7A20 +03FC +7A20 +03FE +7A00 +4BE0 +4820 +4BFE +7850 +4888 +0306 +ENDCHAR +STARTCHAR uni4702 +ENCODING 18178 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +01FC +FD04 +01FC +7904 +01FC +7840 +03FE +7888 +4924 +4A22 +4DFC +7820 +4820 +0020 +ENDCHAR +STARTCHAR uni4703 +ENCODING 18179 +BBX 15 15 0 -1 +BITMAP +2050 +1048 +FEFE +0090 +7DFE +0090 +7CFE +0090 +7C90 +44FE +7C80 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni4704 +ENCODING 18180 +BBX 15 16 0 -2 +BITMAP +2000 +11FE +0102 +FDFE +0110 +7954 +0138 +7954 +0182 +7950 +497C +4990 +4910 +7AFE +4A10 +0410 +ENDCHAR +STARTCHAR uni4705 +ENCODING 18181 +BBX 15 16 0 -2 +BITMAP +2020 +1222 +03FE +FC90 +0088 +79FE +0310 +7D10 +01FE +7910 +4910 +49FE +4910 +7910 +49FE +0100 +ENDCHAR +STARTCHAR uni4706 +ENCODING 18182 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2410 +3F7C +2638 +2D54 +3492 +3FFC +2000 +2FF8 +2000 +2FF8 +2000 +4FF8 +4808 +8FF8 +ENDCHAR +STARTCHAR uni4707 +ENCODING 18183 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +FC88 +0124 +7A42 +0090 +79F8 +0008 +7844 +48A8 +4990 +4A88 +7CA4 +48C2 +0080 +ENDCHAR +STARTCHAR uni4708 +ENCODING 18184 +BBX 15 16 0 -2 +BITMAP +2124 +1248 +0124 +FC00 +01FC +7924 +01FC +7924 +01FC +7820 +4BFE +4870 +48A8 +7924 +4622 +0020 +ENDCHAR +STARTCHAR uni4709 +ENCODING 18185 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FC70 +00AC +7B22 +0050 +7888 +0124 +7A22 +4924 +48A8 +4924 +7A22 +48A0 +0040 +ENDCHAR +STARTCHAR uni470A +ENCODING 18186 +BBX 15 16 0 -2 +BITMAP +2090 +1090 +07FE +F890 +03FC +7A94 +03FC +7A94 +03FC +7800 +49F8 +4908 +49F8 +7908 +49F8 +0108 +ENDCHAR +STARTCHAR uni470B +ENCODING 18187 +BBX 15 16 0 -2 +BITMAP +2020 +11FC +0124 +FDFC +0020 +7BFE +0000 +79FC +0104 +79FC +4904 +49FC +4904 +79FC +4888 +0104 +ENDCHAR +STARTCHAR uni470C +ENCODING 18188 +BBX 15 15 1 -1 +BITMAP +2010 +2390 +4020 +D7E8 +2010 +2B94 +582C +E7B2 +2010 +3014 +AFB4 +A4D2 +A492 +2490 +2790 +ENDCHAR +STARTCHAR uni470D +ENCODING 18189 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +01FC +FC20 +0154 +7888 +0104 +7AFA +0088 +78F8 +4888 +48F8 +4820 +78A8 +4924 +0060 +ENDCHAR +STARTCHAR uni470E +ENCODING 18190 +BBX 15 16 0 -2 +BITMAP +2088 +12AA +02DC +FC88 +0154 +7A22 +0000 +7BFE +0242 +7C44 +4BFC +4844 +4844 +7884 +4914 +0208 +ENDCHAR +STARTCHAR uni470F +ENCODING 18191 +BBX 15 16 0 -2 +BITMAP +4020 +2720 +05FE +FD40 +057C +7690 +057E +7500 +057C +7544 +557C +5644 +547C +7444 +5444 +044C +ENDCHAR +STARTCHAR uni4710 +ENCODING 18192 +BBX 15 16 0 -2 +BITMAP +0040 +7BFC +4880 +51F8 +4A20 +4DFC +6888 +52F8 +4188 +FFFE +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni4711 +ENCODING 18193 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0050 +FDDC +0104 +7904 +01DC +7850 +0050 +7BFE +4840 +4820 +48A4 +7A8A +4A8A +0478 +ENDCHAR +STARTCHAR uni4712 +ENCODING 18194 +BBX 15 16 0 -2 +BITMAP +2040 +1080 +03FE +FE22 +02AA +7A22 +03FE +7A72 +02AA +7A02 +4820 +4BFE +4850 +7888 +4904 +0602 +ENDCHAR +STARTCHAR uni4713 +ENCODING 18195 +BBX 15 16 0 -2 +BITMAP +2088 +13FE +0088 +FC00 +0148 +7BFE +0148 +7978 +0100 +79FC +4820 +4BFE +4870 +78A8 +4B26 +0020 +ENDCHAR +STARTCHAR uni4714 +ENCODING 18196 +BBX 15 16 0 -2 +BITMAP +2020 +10FE +0240 +FD7C +0090 +797E +0000 +7B7C +0144 +797C +4944 +497C +4944 +794C +4A80 +047E +ENDCHAR +STARTCHAR uni4715 +ENCODING 18197 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +03FE +FC88 +01FC +7924 +01FC +7924 +01FC +7820 +4BFE +4A22 +4A2A +7AFA +4A0A +0206 +ENDCHAR +STARTCHAR uni4716 +ENCODING 18198 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0050 +FBFE +0252 +7BFE +0000 +79FC +0104 +79FC +4904 +49FC +4904 +79FC +4888 +0104 +ENDCHAR +STARTCHAR uni4717 +ENCODING 18199 +BBX 15 15 0 -1 +BITMAP +4014 +2012 +07FE +F410 +05D0 +7414 +05D4 +7558 +05CA +7416 +5442 +5824 +52A2 +728A +5478 +ENDCHAR +STARTCHAR uni4718 +ENCODING 18200 +BBX 15 16 0 -2 +BITMAP +4288 +2288 +07E8 +FA90 +041E +77E4 +0454 +7854 +0754 +7554 +5554 +5748 +5548 +7054 +5294 +0122 +ENDCHAR +STARTCHAR uni4719 +ENCODING 18201 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0202 +FBFE +0202 +7BFE +0108 +7A52 +039C +7908 +4A52 +4BDE +4800 +7AA4 +4A52 +0452 +ENDCHAR +STARTCHAR uni471A +ENCODING 18202 +BBX 15 15 0 -1 +BITMAP +4400 +22FE +02AA +F8AA +00FE +7010 +0E54 +7292 +0210 +7254 +5292 +5210 +5210 +7500 +58FE +ENDCHAR +STARTCHAR uni471B +ENCODING 18203 +BBX 15 16 0 -2 +BITMAP +2080 +11F8 +0210 +FDFC +0124 +79FC +0092 +7B0E +0080 +79F8 +4A10 +49FC +4924 +79FC +4892 +030E +ENDCHAR +STARTCHAR uni471C +ENCODING 18204 +BBX 15 16 0 -2 +BITMAP +2040 +107C +0040 +FBFE +0202 +79FC +00A8 +7954 +0288 +79FC +4A8A +48F8 +4888 +78F8 +4888 +00F8 +ENDCHAR +STARTCHAR uni471D +ENCODING 18205 +BBX 15 16 0 -2 +BITMAP +2044 +1284 +02EA +FE4E +02A4 +7AEE +0222 +7BFE +0244 +7A84 +4AEA +4A4E +4AA4 +7AEE +4A22 +03FE +ENDCHAR +STARTCHAR uni471E +ENCODING 18206 +BBX 15 16 0 -2 +BITMAP +4040 +2020 +03FE +F888 +0052 +77AC +02AA +72A8 +05AC +7000 +5104 +51FC +5104 +71FC +5104 +0204 +ENDCHAR +STARTCHAR uni471F +ENCODING 18207 +BBX 15 16 0 -2 +BITMAP +2088 +108C +03EA +F888 +0088 +7BFE +0148 +7B6A +014A +7B6A +494C +4B6C +494A +796A +4B96 +0022 +ENDCHAR +STARTCHAR uni4720 +ENCODING 18208 +BBX 15 16 0 -2 +BITMAP +2042 +139C +0210 +FBDE +0294 +7A94 +0420 +7BFC +0204 +7BFC +4A04 +4BFC +4A04 +7BFC +4908 +0204 +ENDCHAR +STARTCHAR uni4721 +ENCODING 18209 +BBX 15 16 0 -2 +BITMAP +43FC +2040 +01F8 +F908 +01F8 +7108 +07FE +7442 +02A4 +728A +547A +5080 +51F8 +7288 +5070 +038E +ENDCHAR +STARTCHAR uni4722 +ENCODING 18210 +BBX 15 16 0 -2 +BITMAP +2020 +13FE +0222 +FDFC +0020 +78F8 +0020 +79FC +0020 +79FC +4954 +49FC +4840 +7AA4 +4A8A +047A +ENDCHAR +STARTCHAR uni4723 +ENCODING 18211 +BBX 15 16 0 -2 +BITMAP +0008 +201C +11E0 +1100 +0100 +0100 +F1FE +1110 +1110 +1110 +1110 +1510 +1910 +1210 +0210 +0410 +ENDCHAR +STARTCHAR uni4724 +ENCODING 18212 +BBX 15 16 0 -2 +BITMAP +0110 +4110 +2110 +2110 +07FC +0110 +E110 +2110 +2110 +2FFE +2000 +2910 +3108 +2208 +0404 +0804 +ENDCHAR +STARTCHAR uni4725 +ENCODING 18213 +BBX 15 14 0 -1 +BITMAP +407C +2F44 +2144 +027C +0244 +E444 +2744 +217C +2500 +2500 +2AFE +3200 +2500 +08FE +ENDCHAR +STARTCHAR uni4726 +ENCODING 18214 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +17FE +1110 +0200 +03FC +F404 +13E4 +1224 +13E4 +1224 +17E4 +1A24 +1004 +0028 +0010 +ENDCHAR +STARTCHAR uni4727 +ENCODING 18215 +BBX 15 14 0 -1 +BITMAP +23DE +114A +114A +035A +056A +F14A +12D6 +1020 +1020 +1120 +153C +1920 +1120 +07FE +ENDCHAR +STARTCHAR uni4728 +ENCODING 18216 +BBX 15 15 0 -1 +BITMAP +0020 +2020 +11FC +1124 +01FC +0020 +F3FE +1222 +13FE +1020 +1040 +1424 +1AA2 +128A +0478 +ENDCHAR +STARTCHAR uni4729 +ENCODING 18217 +BBX 15 16 0 -2 +BITMAP +0110 +4110 +27FC +2110 +01F0 +0208 +E2EA +26AC +22A8 +22AA +26EA +2A06 +3000 +22A4 +0252 +0452 +ENDCHAR +STARTCHAR uni472A +ENCODING 18218 +BBX 15 16 0 -2 +BITMAP +0040 +2440 +2240 +4A40 +89F8 +1448 +2248 +4148 +BC48 +2448 +2448 +244A +248A +3C8A +2506 +0200 +ENDCHAR +STARTCHAR uni472B +ENCODING 18219 +BBX 14 14 0 -1 +BITMAP +2400 +22F8 +4A20 +8820 +1420 +2220 +4120 +BC20 +2420 +2420 +2420 +2420 +3DFC +2400 +ENDCHAR +STARTCHAR uni472C +ENCODING 18220 +BBX 14 16 0 -2 +BITMAP +0020 +2420 +2220 +4A20 +89FC +1524 +2324 +4124 +BD24 +25FC +2524 +2524 +2524 +3D24 +25FC +0104 +ENDCHAR +STARTCHAR uni472D +ENCODING 18221 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +0100 +7FFE +4002 +9FF4 +0820 +1110 +2288 +0C60 +3018 +DFF6 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni472E +ENCODING 18222 +BBX 15 16 0 -2 +BITMAP +0020 +2410 +22FE +4A82 +8914 +1450 +227E +4150 +BC90 +2410 +25FE +2410 +2410 +3C10 +2410 +0010 +ENDCHAR +STARTCHAR uni472F +ENCODING 18223 +BBX 15 16 0 -2 +BITMAP +0040 +2440 +227E +4A82 +8922 +14AA +2272 +4122 +BCFE +2422 +2472 +24AA +2522 +3C22 +240A +0004 +ENDCHAR +STARTCHAR uni4730 +ENCODING 18224 +BBX 15 16 0 -2 +BITMAP +0020 +4840 +45FC +9504 +11FC +2904 +45FC +8040 +7BFE +4888 +4924 +4A22 +4DFC +7820 +4820 +0020 +ENDCHAR +STARTCHAR uni4731 +ENCODING 18225 +BBX 15 15 0 -2 +BITMAP +49F8 +4508 +95F8 +1108 +29F8 +4400 +83FC +7A94 +4BFC +4800 +49F8 +4890 +7860 +4998 +0606 +ENDCHAR +STARTCHAR uni4732 +ENCODING 18226 +BBX 15 16 0 -2 +BITMAP +0124 +4A48 +4524 +9400 +13FC +2A94 +4664 +8294 +7BFC +4A48 +4B68 +4A48 +4B6A +7A4A +4A46 +0362 +ENDCHAR +STARTCHAR uni4733 +ENCODING 18227 +BBX 15 14 0 -1 +BITMAP +7FFC +0000 +0000 +1FF0 +1010 +1010 +1FF0 +0820 +0440 +FFFE +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uni4734 +ENCODING 18228 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +0020 +003E +7C20 +4420 +4420 +45FC +7C84 +0088 +4448 +2850 +2E20 +F050 +4188 +0606 +ENDCHAR +STARTCHAR uni4735 +ENCODING 18229 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +0010 +01FE +7D12 +4514 +4510 +45FC +7D44 +0144 +4528 +2928 +2F10 +F228 +4244 +0482 +ENDCHAR +STARTCHAR uni4736 +ENCODING 18230 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +003C +0044 +7CA8 +4410 +4428 +44D6 +7C10 +00FC +4410 +2890 +2EFE +F010 +4010 +0010 +ENDCHAR +STARTCHAR uni4737 +ENCODING 18231 +BBX 15 15 0 -2 +BITMAP +FEFC +0004 +007C +7C04 +44FC +4400 +45FE +7D02 +00FC +4444 +2844 +2E28 +F010 +4068 +0186 +ENDCHAR +STARTCHAR uni4738 +ENCODING 18232 +BBX 15 15 0 -2 +BITMAP +FEFE +0082 +0082 +7CFE +4480 +448C +44B0 +7C9C +00B0 +449E +28F0 +2E92 +F112 +410E +0200 +ENDCHAR +STARTCHAR uni4739 +ENCODING 18233 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +01FE +0020 +7C20 +45FC +4524 +4524 +7DFC +0020 +4470 +28A8 +2F24 +F222 +4020 +0020 +ENDCHAR +STARTCHAR uni473A +ENCODING 18234 +BBX 15 16 0 -2 +BITMAP +0048 +FE48 +0048 +01FE +7C48 +4448 +45FE +4400 +7CFC +0084 +4484 +28FC +2E84 +F084 +40FC +0084 +ENDCHAR +STARTCHAR uni473B +ENCODING 18235 +BBX 15 15 0 -2 +BITMAP +FEFC +0084 +0084 +7CFC +4484 +4484 +44FC +7C00 +01FE +4420 +28A0 +2EBC +F0A0 +4160 +023E +ENDCHAR +STARTCHAR uni473C +ENCODING 18236 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +247E +18A4 +FF28 +2910 +4A28 +98C6 +0000 +7FFC +0000 +1FF0 +1010 +1FF0 +0440 +7FFC +ENDCHAR +STARTCHAR uni473D +ENCODING 18237 +BBX 15 16 0 -2 +BITMAP +0020 +FE50 +0088 +0104 +7EFA +4400 +45E2 +452A +7D2A +01EA +452A +292A +2FEA +F122 +412A +0164 +ENDCHAR +STARTCHAR uni473E +ENCODING 18238 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +01FE +0000 +7C84 +4448 +45FE +4400 +7CFC +0084 +4484 +28FC +2E84 +F084 +40FC +0084 +ENDCHAR +STARTCHAR uni473F +ENCODING 18239 +BBX 14 15 1 -2 +BITMAP +7E40 +4840 +7E7C +4280 +7EA0 +4910 +7E10 +0000 +FFF8 +0000 +3FE0 +2020 +3FE0 +0880 +FFF8 +ENDCHAR +STARTCHAR uni4740 +ENCODING 18240 +BBX 15 16 0 -2 +BITMAP +0020 +FEDE +008A +00CA +7CAA +44D2 +44A6 +4400 +7CFE +0092 +4492 +28FE +2E92 +F092 +40FE +0082 +ENDCHAR +STARTCHAR uni4741 +ENCODING 18241 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +2CA8 +4920 +1450 +2288 +7FFE +4002 +9FF4 +0000 +1FF0 +1010 +1FF0 +0820 +0440 +FFFE +ENDCHAR +STARTCHAR uni4742 +ENCODING 18242 +BBX 14 16 1 -2 +BITMAP +FCF0 +9090 +FD1C +8400 +85F0 +FC90 +9060 +FD9C +0000 +FFF8 +0000 +3FE0 +2020 +3FE0 +0880 +FFF8 +ENDCHAR +STARTCHAR uni4743 +ENCODING 18243 +BBX 15 15 0 -2 +BITMAP +FEFE +0082 +00FE +7C82 +44FE +4444 +44AA +7CEE +0044 +44AA +28EE +2E00 +F0D4 +40AA +012A +ENDCHAR +STARTCHAR uni4744 +ENCODING 18244 +BBX 15 16 0 -2 +BITMAP +0108 +FA94 +03DE +06B4 +7BDE +5294 +53DE +5294 +73DE +0210 +97FC +5108 +6090 +3860 +C198 +0606 +ENDCHAR +STARTCHAR uni4745 +ENCODING 18245 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +0820 +1020 +3020 +4A20 +9DFC +2820 +4C20 +9A20 +2A20 +4820 +8820 +0820 +2BFE +1000 +ENDCHAR +STARTCHAR uni4746 +ENCODING 18246 +BBX 15 16 0 -2 +BITMAP +0800 +1FF8 +2248 +4488 +0950 +1220 +7FFC +0200 +0D10 +72A0 +0CC0 +71A0 +0698 +1886 +E280 +0100 +ENDCHAR +STARTCHAR uni4747 +ENCODING 18247 +BBX 15 15 0 -2 +BITMAP +25FC +2220 +4240 +80A4 +2538 +2450 +2498 +2538 +2454 +2494 +2550 +2422 +4402 +43FE +8000 +ENDCHAR +STARTCHAR uni4748 +ENCODING 18248 +BBX 15 16 0 -2 +BITMAP +001C +FDE0 +1100 +2100 +61FE +9500 +3900 +517C +9944 +3544 +5554 +9148 +1142 +1242 +523E +2400 +ENDCHAR +STARTCHAR uni4749 +ENCODING 18249 +BBX 15 16 0 -2 +BITMAP +0440 +2448 +1450 +FFFE +8002 +0000 +7FFC +0200 +0D10 +72A0 +0CC0 +71A0 +0698 +1886 +E280 +0100 +ENDCHAR +STARTCHAR uni474A +ENCODING 18250 +BBX 15 16 0 -2 +BITMAP +0020 +FC20 +13FE +2020 +61FC +9424 +3BFE +5024 +99FC +3420 +5520 +913E +1120 +12A0 +527E +2400 +ENDCHAR +STARTCHAR uni474B +ENCODING 18251 +BBX 15 16 0 -2 +BITMAP +0040 +FC20 +13FE +2202 +6000 +95FC +3800 +5000 +9BFE +3420 +5528 +9124 +1222 +1422 +50A0 +2040 +ENDCHAR +STARTCHAR uni474C +ENCODING 18252 +BBX 15 15 0 -2 +BITMAP +FBDE +2042 +414A +A084 +154A +3A52 +5420 +9800 +37DE +5052 +9152 +1094 +1148 +5254 +2422 +ENDCHAR +STARTCHAR uni474D +ENCODING 18253 +BBX 15 15 0 -2 +BITMAP +FBFE +2222 +4020 +A1FE +1420 +39FC +5124 +99FC +3524 +51FC +9020 +13FE +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni474E +ENCODING 18254 +BBX 15 16 0 -2 +BITMAP +0020 +FD24 +1124 +2124 +61FC +9400 +3BFE +5020 +9840 +35FC +5554 +9154 +1154 +1154 +5154 +210C +ENDCHAR +STARTCHAR uni474F +ENCODING 18255 +BBX 15 16 0 -2 +BITMAP +0020 +FDFC +1124 +23FE +6124 +95FC +3820 +51FC +9924 +35FC +5440 +93FE +1088 +11D0 +5070 +238C +ENDCHAR +STARTCHAR uni4750 +ENCODING 18256 +BBX 15 16 0 -2 +BITMAP +0010 +FB90 +22FE +42A0 +A2BE +1748 +3ABE +5280 +9ABE +36A2 +52BE +9322 +123E +1222 +5222 +2226 +ENDCHAR +STARTCHAR uni4751 +ENCODING 18257 +BBX 15 16 0 -2 +BITMAP +0020 +FDFC +1088 +2050 +63FE +9400 +39FC +5124 +99FC +3524 +55FC +9020 +11FC +1020 +53FE +2000 +ENDCHAR +STARTCHAR uni4752 +ENCODING 18258 +BBX 15 16 0 -2 +BITMAP +03F0 +FD2E +11E2 +212A +61E4 +9534 +3BEA +5032 +981E +35E0 +54A2 +9134 +1068 +10A4 +5322 +2020 +ENDCHAR +STARTCHAR uni4753 +ENCODING 18259 +BBX 15 16 0 -2 +BITMAP +0124 +FA48 +2124 +4000 +A3FC +1694 +3A64 +5294 +9BFC +3648 +5368 +9248 +136A +124A +5246 +2362 +ENDCHAR +STARTCHAR uni4754 +ENCODING 18260 +BBX 15 16 0 -2 +BITMAP +0088 +FBFE +2088 +43DE +A252 +17DE +38A0 +5090 +99FE +3520 +53FC +9520 +11FC +1120 +51FE +2100 +ENDCHAR +STARTCHAR uni4755 +ENCODING 18261 +BBX 15 16 0 -2 +BITMAP +03FC +F908 +11F8 +2108 +65F8 +990E +37F8 +5008 +97FE +3A94 +579C +9294 +139C +12D6 +57BC +2084 +ENDCHAR +STARTCHAR uni4756 +ENCODING 18262 +BBX 15 16 0 -2 +BITMAP +1008 +201C +D5F0 +0950 +5150 +2150 +D150 +1950 +2950 +C948 +1948 +2948 +C944 +0A44 +5242 +2400 +ENDCHAR +STARTCHAR uni4757 +ENCODING 18263 +BBX 15 16 0 -2 +BITMAP +0C20 +3020 +C220 +1420 +4BFE +3020 +C870 +1470 +24A8 +CCA8 +1524 +2622 +C420 +0420 +2820 +1020 +ENDCHAR +STARTCHAR uni4758 +ENCODING 18264 +BBX 15 16 0 -2 +BITMAP +0C00 +30F8 +C288 +1488 +4888 +3106 +CA00 +15FC +2484 +CC84 +1448 +2450 +C420 +0450 +2888 +1306 +ENDCHAR +STARTCHAR uni4759 +ENCODING 18265 +BBX 15 16 0 -2 +BITMAP +0C00 +31FE +C300 +1504 +4944 +3128 +C928 +1510 +2510 +CD28 +1528 +2544 +C584 +0500 +29FE +1000 +ENDCHAR +STARTCHAR uni475A +ENCODING 18266 +BBX 15 16 0 -2 +BITMAP +1000 +21FC +D504 +0904 +5104 +21FC +D100 +1940 +2944 +C948 +1970 +2940 +C942 +0A42 +523E +2400 +ENDCHAR +STARTCHAR uni475B +ENCODING 18267 +BBX 15 16 0 -2 +BITMAP +1010 +2010 +D410 +09FE +5112 +2114 +D110 +19FC +2944 +C944 +1928 +2928 +C910 +0A28 +5244 +2482 +ENDCHAR +STARTCHAR uni475C +ENCODING 18268 +BBX 15 16 0 -2 +BITMAP +1040 +2040 +D488 +0904 +53FE +2002 +D088 +1944 +2A42 +C8F8 +1988 +2A50 +C820 +0850 +5188 +2606 +ENDCHAR +STARTCHAR uni475D +ENCODING 18269 +BBX 15 16 0 -2 +BITMAP +0C20 +3020 +C3FC +1450 +4888 +3104 +CBFE +1408 +25E8 +CD28 +1528 +25E8 +C528 +0408 +2828 +1010 +ENDCHAR +STARTCHAR uni475E +ENCODING 18270 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +D43E +0820 +51FE +2122 +D138 +19E0 +2922 +C91E +1900 +2978 +CA48 +0A4A +548A +2906 +ENDCHAR +STARTCHAR uni475F +ENCODING 18271 +BBX 15 16 0 -2 +BITMAP +1080 +209E +D7EA +088A +51CA +208A +D3EA +1892 +28A6 +C820 +1BFE +2820 +C850 +0888 +5104 +2602 +ENDCHAR +STARTCHAR uni4760 +ENCODING 18272 +BBX 15 16 0 -2 +BITMAP +1000 +21FE +D510 +0920 +517C +2144 +D17C +1944 +297C +C910 +1910 +2954 +C952 +0A92 +5250 +2420 +ENDCHAR +STARTCHAR uni4761 +ENCODING 18273 +BBX 15 16 0 -2 +BITMAP +1088 +2088 +D7FE +0888 +5088 +20F8 +D020 +1BFE +2A22 +CB32 +1AAA +2B76 +CA22 +0A22 +522A +2224 +ENDCHAR +STARTCHAR uni4762 +ENCODING 18274 +BBX 15 16 0 -2 +BITMAP +1000 +21F8 +D508 +09F8 +5108 +21F8 +D000 +1BFC +2A94 +CBFC +1800 +29F8 +C890 +0860 +5198 +2606 +ENDCHAR +STARTCHAR uni4763 +ENCODING 18275 +BBX 15 16 0 -2 +BITMAP +1200 +217E +D440 +0C7C +5244 +20FC +D140 +1E7E +2A20 +C820 +1BFE +2870 +C8A8 +0924 +5222 +2020 +ENDCHAR +STARTCHAR uni4764 +ENCODING 18276 +BBX 15 15 1 -1 +BITMAP +0820 +3020 +CBFE +2450 +0954 +3088 +C9FC +1A8A +24F8 +CC88 +14F8 +2420 +C4A8 +0B26 +3060 +ENDCHAR +STARTCHAR uni4765 +ENCODING 18277 +BBX 15 16 0 -2 +BITMAP +1040 +21FC +D504 +09FC +5104 +21FC +D104 +19FC +2820 +C924 +18A8 +2924 +C820 +0BFE +5020 +2020 +ENDCHAR +STARTCHAR uni4766 +ENCODING 18278 +BBX 15 16 0 -2 +BITMAP +1040 +2080 +D7FE +0A52 +5252 +27FE +D000 +181E +2BE0 +C8A2 +1922 +2A74 +C8A8 +0924 +5622 +2020 +ENDCHAR +STARTCHAR uni4767 +ENCODING 18279 +BBX 14 16 0 -2 +BITMAP +0040 +7C40 +4480 +44FC +7D04 +4604 +4484 +7C44 +4444 +4414 +7C24 +0044 +2984 +2404 +4428 +8010 +ENDCHAR +STARTCHAR uni4768 +ENCODING 18280 +BBX 12 16 2 -2 +BITMAP +1000 +97F0 +9220 +9140 +9080 +9140 +0230 +7FC0 +4040 +7FC0 +4040 +7FC0 +4040 +7FC0 +2080 +4040 +ENDCHAR +STARTCHAR uni4769 +ENCODING 18281 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4450 +4488 +7D04 +4612 +4420 +7C40 +4588 +4410 +7C20 +0044 +2988 +2410 +4460 +8380 +ENDCHAR +STARTCHAR uni476A +ENCODING 18282 +BBX 15 15 0 -2 +BITMAP +7C00 +45FE +4412 +7C14 +4410 +4490 +7C90 +449E +4490 +7C90 +0090 +28D0 +2530 +451E +8200 +ENDCHAR +STARTCHAR uni476B +ENCODING 18283 +BBX 15 16 0 -2 +BITMAP +0080 +7C80 +4480 +44FE +7D40 +4540 +4640 +7C7C +4440 +4440 +7C40 +007C +2840 +2440 +4440 +8040 +ENDCHAR +STARTCHAR uni476C +ENCODING 18284 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +4400 +45FC +7C20 +4420 +4420 +7C20 +45FC +4420 +7C20 +0020 +2820 +2420 +47FE +8000 +ENDCHAR +STARTCHAR uni476D +ENCODING 18285 +BBX 14 16 0 -2 +BITMAP +0080 +7C80 +4500 +45FC +7E04 +4404 +45E4 +7D24 +4524 +4524 +7DE4 +0124 +2804 +2404 +4428 +8010 +ENDCHAR +STARTCHAR uni476E +ENCODING 18286 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +4410 +45FE +7C20 +4420 +4444 +7C84 +45F8 +4410 +7C20 +0044 +2882 +25FE +4482 +8000 +ENDCHAR +STARTCHAR uni476F +ENCODING 18287 +BBX 15 16 0 -2 +BITMAP +0080 +7C80 +44FE +4500 +7E20 +4520 +452C +7D74 +47A4 +4524 +7D34 +0128 +2922 +2502 +44FE +8000 +ENDCHAR +STARTCHAR uni4770 +ENCODING 18288 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +45FC +7C20 +4420 +47FE +7C08 +4408 +45FE +7C08 +0088 +2848 +2408 +4428 +8010 +ENDCHAR +STARTCHAR uni4771 +ENCODING 18289 +BBX 13 16 1 -2 +BITMAP +0400 +3FE0 +1020 +2060 +FDF8 +4488 +8D18 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +1040 +2020 +ENDCHAR +STARTCHAR uni4772 +ENCODING 18290 +BBX 15 15 0 -2 +BITMAP +7CFC +4484 +4484 +7CFC +4490 +4490 +7C88 +4484 +4532 +7D08 +0200 +2860 +2418 +4404 +8000 +ENDCHAR +STARTCHAR uni4773 +ENCODING 18291 +BBX 15 16 0 -2 +BITMAP +0800 +0F7C +2844 +7F28 +A110 +1628 +3846 +DFF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni4774 +ENCODING 18292 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0100 +1FF0 +1110 +1FF0 +0100 +7FFE +5012 +9FF4 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni4775 +ENCODING 18293 +BBX 15 16 0 -2 +BITMAP +0028 +7C24 +45FE +4420 +7C20 +45FC +4524 +7D24 +45FC +4524 +7D24 +01FC +2924 +2524 +4524 +810C +ENDCHAR +STARTCHAR uni4776 +ENCODING 18294 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +47FE +4400 +7C00 +45FC +4504 +7D04 +45FC +4420 +7D28 +0124 +2A22 +2422 +44A0 +8040 +ENDCHAR +STARTCHAR uni4777 +ENCODING 18295 +BBX 14 16 0 -2 +BITMAP +2000 +3E7C +4844 +0844 +FF44 +247C +4200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni4778 +ENCODING 18296 +BBX 15 16 0 -2 +BITMAP +0088 +7C88 +47FE +4488 +7CA8 +4420 +47FE +7C20 +4420 +45FC +7C84 +0088 +2850 +2420 +44D8 +8306 +ENDCHAR +STARTCHAR uni4779 +ENCODING 18297 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4A02 +7D04 +4900 +49DE +7A52 +4A52 +4B52 +7C9A +0094 +5110 +4912 +8A12 +040E +ENDCHAR +STARTCHAR uni477A +ENCODING 18298 +BBX 13 16 1 -2 +BITMAP +2040 +1020 +FDF8 +0890 +4890 +3060 +C998 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +1040 +2020 +ENDCHAR +STARTCHAR uni477B +ENCODING 18299 +BBX 15 15 0 -2 +BITMAP +7DFC +4504 +4504 +7DFC +4510 +4510 +7DFE +4510 +4510 +7D7C +0144 +2944 +2544 +457C +8244 +ENDCHAR +STARTCHAR uni477C +ENCODING 18300 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +47FE +4420 +7DFC +4420 +47FE +7C00 +45FC +4504 +7DFC +0104 +29FC +2504 +4514 +8108 +ENDCHAR +STARTCHAR uni477D +ENCODING 18301 +BBX 15 15 0 -2 +BITMAP +79FE +4910 +4910 +797C +4910 +4910 +79FE +4900 +4910 +7910 +017C +5110 +4A10 +8AFE +0400 +ENDCHAR +STARTCHAR uni477E +ENCODING 18302 +BBX 15 16 0 -2 +BITMAP +3F50 +0048 +FFFE +0840 +2F20 +2812 +2F0A +F006 +3FFA +2008 +3FF8 +2008 +3FF8 +2008 +3FF8 +0820 +ENDCHAR +STARTCHAR uni477F +ENCODING 18303 +BBX 15 16 0 -2 +BITMAP +0500 +3978 +2108 +3D78 +2208 +3FF8 +0820 +3FF8 +D016 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni4780 +ENCODING 18304 +BBX 15 16 0 -2 +BITMAP +0080 +7CBC +4484 +4508 +7DFE +4720 +4520 +7D7C +4590 +4510 +7DFE +0110 +2928 +2528 +4544 +8182 +ENDCHAR +STARTCHAR uni4781 +ENCODING 18305 +BBX 15 15 0 -2 +BITMAP +7BFE +4A00 +4AFC +7A84 +4AFC +4A84 +7AFC +4A20 +4BFE +7A48 +02C8 +5230 +4A48 +8A84 +03FE +ENDCHAR +STARTCHAR uni4782 +ENCODING 18306 +BBX 15 15 0 -2 +BITMAP +7DFC +4420 +4440 +7DFC +4554 +4554 +7D54 +4544 +452C +7C20 +03FE +2850 +2488 +4504 +8202 +ENDCHAR +STARTCHAR uni4783 +ENCODING 18307 +BBX 15 16 0 -2 +BITMAP +0008 +7008 +57C8 +5210 +721E +54A4 +57D4 +7114 +5114 +57D4 +7114 +0108 +51C8 +4E14 +8414 +0022 +ENDCHAR +STARTCHAR uni4784 +ENCODING 18308 +BBX 15 16 0 -2 +BITMAP +2040 +FEFE +2120 +3CAC +24F4 +47AC +54A2 +887E +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni4785 +ENCODING 18309 +BBX 15 15 0 -2 +BITMAP +79FE +4900 +497E +7900 +49FE +4954 +7948 +4964 +4942 +7900 +017E +5142 +4A42 +8A7E +0442 +ENDCHAR +STARTCHAR uni4786 +ENCODING 18310 +BBX 14 16 0 -2 +BITMAP +0020 +7D24 +44A8 +4420 +7DFC +4504 +4504 +7DFC +4504 +45FC +7D04 +0104 +29FC +2400 +4488 +8104 +ENDCHAR +STARTCHAR uni4787 +ENCODING 18311 +BBX 14 16 1 -2 +BITMAP +1040 +7C40 +11F0 +FE50 +54D0 +BA54 +10AC +7D04 +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +1040 +2020 +ENDCHAR +STARTCHAR uni4788 +ENCODING 18312 +BBX 15 16 0 -2 +BITMAP +001E +7BE0 +4944 +48A8 +79F8 +4908 +4908 +79FC +4904 +4904 +79FE +0102 +52AA +4AAA +8D0A +0004 +ENDCHAR +STARTCHAR uni4789 +ENCODING 18313 +BBX 15 16 0 -2 +BITMAP +0020 +7D24 +44A8 +45FC +7C40 +47FE +4488 +7DFC +468A +44F8 +7C88 +00F8 +2888 +24F8 +4450 +8088 +ENDCHAR +STARTCHAR uni478A +ENCODING 18314 +BBX 15 16 0 -2 +BITMAP +007C +7840 +4BFE +4A42 +7A78 +4BC4 +4A3C +7AA8 +4B54 +4AF8 +7B8C +02FA +5288 +4AF8 +8A88 +04F8 +ENDCHAR +STARTCHAR uni478B +ENCODING 18315 +BBX 15 16 0 -2 +BITMAP +0200 +713C +57A4 +5024 +74BC +5324 +57A4 +713C +5124 +57A4 +713C +0590 +5558 +4968 +812A +0346 +ENDCHAR +STARTCHAR uni478C +ENCODING 18316 +BBX 15 16 0 -2 +BITMAP +0008 +7C3C +45E0 +5420 +5420 +57FE +5420 +5420 +5420 +55FC +5504 +1104 +2904 +2504 +45FC +8104 +ENDCHAR +STARTCHAR uni478D +ENCODING 18317 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +47FE +4420 +55FC +5420 +57FE +5400 +55FC +5504 +55FC +1104 +29FC +2504 +4114 +8108 +ENDCHAR +STARTCHAR uni478E +ENCODING 18318 +BBX 14 16 0 -2 +BITMAP +00F8 +7C88 +4488 +54F8 +5488 +5488 +54F8 +5400 +55FC +5504 +5504 +11FC +2904 +2504 +45FC +8104 +ENDCHAR +STARTCHAR uni478F +ENCODING 18319 +BBX 15 15 0 -2 +BITMAP +7DFC +4524 +4524 +55FC +5524 +5524 +55FC +5420 +5410 +5454 +1142 +2942 +254A +4238 +8000 +ENDCHAR +STARTCHAR uni4790 +ENCODING 18320 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +47FE +5420 +55FC +5440 +57FE +5488 +5504 +56FA +5488 +1088 +28F8 +2488 +4488 +80F8 +ENDCHAR +STARTCHAR uni4791 +ENCODING 18321 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +087C +7E10 +0810 +0810 +FF10 +1410 +1410 +5610 +5510 +9510 +2410 +2410 +54FE +8800 +ENDCHAR +STARTCHAR uni4792 +ENCODING 18322 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +0882 +7E82 +08BA +0882 +FF82 +14BA +14AA +56AA +55AA +94BA +2482 +2482 +548A +8884 +ENDCHAR +STARTCHAR uni4793 +ENCODING 18323 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +0800 +7E52 +08A4 +0928 +FF94 +144A +1400 +56FE +5510 +9510 +2410 +2410 +55FE +8800 +ENDCHAR +STARTCHAR uni4794 +ENCODING 18324 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +0882 +7E82 +08FE +0880 +FF8C +14B0 +149C +56B0 +559E +94F0 +2492 +2512 +550E +8A00 +ENDCHAR +STARTCHAR uni4795 +ENCODING 18325 +BBX 15 16 0 -2 +BITMAP +0800 +087C +0810 +7EFE +0892 +0854 +FF10 +1454 +1400 +56FE +5510 +94FE +24AA +24AA +54AA +8886 +ENDCHAR +STARTCHAR uni4796 +ENCODING 18326 +BBX 15 16 0 -2 +BITMAP +0850 +0848 +0848 +7E40 +085C +09E0 +FE40 +0840 +2820 +2824 +2E14 +280C +2804 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni4797 +ENCODING 18327 +BBX 15 16 0 -2 +BITMAP +0808 +0808 +0808 +7E08 +08FE +0818 +FE18 +0828 +2828 +2848 +2E48 +2888 +2818 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni4798 +ENCODING 18328 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +087C +7E80 +0900 +0800 +FEF8 +0810 +2820 +2840 +2E84 +2884 +287C +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni4799 +ENCODING 18329 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +7C20 +1020 +11FC +FD24 +1124 +1124 +5124 +5D24 +5134 +5128 +7020 +5020 +8FFE +ENDCHAR +STARTCHAR uni479A +ENCODING 18330 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +08FE +7E10 +0810 +08FC +FF04 +0804 +2868 +2810 +2E28 +2844 +2882 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni479B +ENCODING 18331 +BBX 15 16 0 -2 +BITMAP +0800 +09FE +0820 +7EA0 +08BC +08A4 +FEA4 +08FC +2804 +2804 +2E04 +2828 +2810 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni479C +ENCODING 18332 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +09FE +7E10 +0820 +0820 +FE68 +0864 +28A2 +2922 +2E20 +2820 +2820 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni479D +ENCODING 18333 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +08FC +7E20 +0820 +0820 +FE20 +08FC +2828 +2824 +2E24 +2820 +29FE +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni479E +ENCODING 18334 +BBX 15 16 0 -2 +BITMAP +1050 +1050 +1050 +7DFC +1054 +1054 +FDFC +1150 +1150 +51FE +5C52 +5052 +505A +7094 +5110 +8FFE +ENDCHAR +STARTCHAR uni479F +ENCODING 18335 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0840 +7EFC +0884 +0884 +FE84 +08FC +2884 +2884 +2E84 +28FC +2884 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47A0 +ENCODING 18336 +BBX 15 16 0 -2 +BITMAP +0800 +09FE +0820 +7E20 +0840 +087C +FEC4 +0944 +2844 +2844 +2E44 +287C +2844 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47A1 +ENCODING 18337 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +08FC +7E84 +0884 +08FC +FE84 +0884 +28FC +2884 +2E00 +29FE +2800 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47A2 +ENCODING 18338 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +7EFE +08A0 +0920 +FE3C +0820 +2820 +283E +2E20 +2820 +2820 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47A3 +ENCODING 18339 +BBX 15 16 0 -2 +BITMAP +0808 +081C +08E0 +7E80 +0880 +08FE +FE90 +0890 +28B0 +2898 +2E94 +2910 +2910 +5A00 +4FFE +8000 +ENDCHAR +STARTCHAR uni47A4 +ENCODING 18340 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +1100 +7DFC +1204 +1004 +FDE4 +1124 +1124 +5124 +5DE4 +5124 +5004 +7028 +5010 +8FFE +ENDCHAR +STARTCHAR uni47A5 +ENCODING 18341 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +09FE +7E20 +0840 +08FC +FF44 +087C +2844 +287C +2E44 +2854 +2848 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47A6 +ENCODING 18342 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +083C +7E44 +08A8 +0810 +FF28 +0844 +2882 +287C +2E44 +2844 +287C +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47A7 +ENCODING 18343 +BBX 15 16 0 -2 +BITMAP +0808 +081C +08E0 +7E80 +08FE +0880 +FE80 +08BC +28A4 +28A4 +2EA4 +293C +2924 +5A00 +4FFE +8000 +ENDCHAR +STARTCHAR uni47A8 +ENCODING 18344 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +08FC +7E20 +0820 +09FE +FE00 +0820 +28FC +2820 +2E20 +2820 +29FE +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47A9 +ENCODING 18345 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0828 +7E44 +0882 +087C +FF00 +0800 +287C +2844 +2E44 +287C +2844 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47AA +ENCODING 18346 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +0880 +7E84 +08B8 +08A0 +FFBE +08A4 +28A4 +28A4 +2EC4 +2880 +28FE +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47AB +ENCODING 18347 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1044 +7C44 +13FE +1044 +FC44 +11FC +1080 +50FC +5D84 +5284 +50FC +7084 +5000 +8FFE +ENDCHAR +STARTCHAR uni47AC +ENCODING 18348 +BBX 15 16 0 -2 +BITMAP +080C +0870 +0810 +7EFE +0838 +0854 +FE92 +0800 +287C +2824 +2E2E +2842 +288A +5904 +4FFE +8000 +ENDCHAR +STARTCHAR uni47AD +ENCODING 18349 +BBX 15 16 0 -2 +BITMAP +1020 +1048 +1084 +7DFE +1002 +1048 +FC84 +1142 +107C +5084 +5D68 +5010 +5068 +7184 +5000 +8FFE +ENDCHAR +STARTCHAR uni47AE +ENCODING 18350 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0828 +7E44 +08BA +0810 +FEFE +0810 +2858 +2894 +2F12 +2850 +2820 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47AF +ENCODING 18351 +BBX 15 16 0 -2 +BITMAP +080E +08F0 +0822 +7E92 +0854 +0800 +FF7C +0808 +2810 +28FE +2E10 +2810 +2850 +5820 +4FFE +8000 +ENDCHAR +STARTCHAR uni47B0 +ENCODING 18352 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +7C20 +1020 +13FE +FC50 +1050 +1154 +5152 +5E52 +5090 +5090 +7130 +5000 +8FFE +ENDCHAR +STARTCHAR uni47B1 +ENCODING 18353 +BBX 15 16 0 -2 +BITMAP +0828 +0844 +0892 +7E10 +0828 +0844 +FE82 +097C +2844 +2844 +2E44 +287C +2844 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47B2 +ENCODING 18354 +BBX 15 16 0 -2 +BITMAP +1010 +10D8 +1394 +7C94 +1090 +13FE +FC94 +1094 +10D8 +5392 +5CAA +50CA +5286 +7102 +5000 +8FFE +ENDCHAR +STARTCHAR uni47B3 +ENCODING 18355 +BBX 15 16 0 -2 +BITMAP +0820 +0810 +08FC +7E00 +0884 +0848 +FEFE +0800 +28FC +2884 +2E84 +28FC +2884 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47B4 +ENCODING 18356 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +1124 +7D74 +1124 +11FC +FD04 +1174 +1154 +5154 +5D74 +5104 +5204 +7214 +5408 +8FFE +ENDCHAR +STARTCHAR uni47B5 +ENCODING 18357 +BBX 15 16 0 -2 +BITMAP +1000 +11EE +1022 +7CAA +1044 +10AA +FD32 +1200 +11EE +5022 +5CAA +5044 +50AA +7112 +5220 +8FFE +ENDCHAR +STARTCHAR uni47B6 +ENCODING 18358 +BBX 15 16 0 -2 +BITMAP +11F8 +1108 +1108 +7DF8 +1108 +1108 +FDF8 +1080 +11FC +5254 +5C94 +5124 +5244 +7094 +5108 +8FFE +ENDCHAR +STARTCHAR uni47B7 +ENCODING 18359 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +7DFC +1100 +1110 +FD54 +1154 +117C +5110 +5D54 +5154 +5254 +747C +5000 +8FFE +ENDCHAR +STARTCHAR uni47B8 +ENCODING 18360 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1000 +7C00 +11FC +1020 +FD24 +1222 +1060 +5000 +5DFC +5104 +5104 +71FC +5000 +8FFE +ENDCHAR +STARTCHAR uni47B9 +ENCODING 18361 +BBX 15 16 0 -2 +BITMAP +0820 +0840 +08FC +7E84 +08FC +0884 +FEFC +0800 +29FE +2820 +2EFC +2820 +29FE +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47BA +ENCODING 18362 +BBX 15 16 0 -2 +BITMAP +081E +09F0 +0910 +7F10 +09FE +0910 +FF7E +0942 +297E +2942 +2F7E +2942 +297E +5A00 +4FFE +8000 +ENDCHAR +STARTCHAR uni47BB +ENCODING 18363 +BBX 15 16 0 -2 +BITMAP +11F8 +1050 +1020 +7DFC +1124 +11FC +FD24 +11FC +1124 +5040 +5DFC +5044 +5084 +7128 +5210 +8FFE +ENDCHAR +STARTCHAR uni47BC +ENCODING 18364 +BBX 15 16 0 -2 +BITMAP +0820 +083C +0844 +7E78 +0808 +08FE +FF20 +0852 +28AC +2858 +2EAC +284A +28AA +5810 +4FFE +8000 +ENDCHAR +STARTCHAR uni47BD +ENCODING 18365 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +087C +7E10 +08FE +08A2 +FE44 +0878 +2814 +28FE +2E10 +2854 +28B2 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47BE +ENCODING 18366 +BBX 15 16 0 -2 +BITMAP +101E +13E0 +123C +7A20 +12FE +12A2 +FAB8 +12E4 +129C +5280 +5AB8 +5328 +554A +7286 +5000 +8FFE +ENDCHAR +STARTCHAR uni47BF +ENCODING 18367 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4442 +9FF4 +0440 +3FF8 +0440 +FFFE +0920 +17D0 +2108 +DFF6 +0100 +11F8 +2900 +47FE +ENDCHAR +STARTCHAR uni47C0 +ENCODING 18368 +BBX 15 16 0 -2 +BITMAP +0844 +0828 +08FE +7E10 +087C +0810 +FEFE +0820 +2820 +287E +2E88 +2908 +287E +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47C1 +ENCODING 18369 +BBX 15 16 0 -2 +BITMAP +1124 +1248 +1124 +7C00 +11FC +1124 +FDFC +1124 +11FC +5020 +5DFE +5070 +50A8 +7124 +5220 +8FFE +ENDCHAR +STARTCHAR uni47C2 +ENCODING 18370 +BBX 15 16 0 -2 +BITMAP +10FC +1084 +10FC +7C84 +10FC +1000 +FDFE +114A +11FE +5000 +5CFC +5048 +5030 +70CC +5302 +8FFE +ENDCHAR +STARTCHAR uni47C3 +ENCODING 18371 +BBX 15 16 0 -2 +BITMAP +1040 +1088 +11FC +7D08 +1252 +13FE +FC50 +118C +1622 +51C8 +5C32 +51CC +5030 +71C0 +5000 +8FFE +ENDCHAR +STARTCHAR uni47C4 +ENCODING 18372 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1020 +7DFC +1020 +13FE +FC00 +11FC +1104 +51FC +5D04 +51FC +5104 +71FC +5088 +8FFE +ENDCHAR +STARTCHAR uni47C5 +ENCODING 18373 +BBX 15 16 0 -2 +BITMAP +0804 +7F78 +0840 +3E40 +2A7E +3E48 +2A48 +FF48 +0988 +3FF0 +0100 +FFFC +1100 +11F8 +2900 +47FE +ENDCHAR +STARTCHAR uni47C6 +ENCODING 18374 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +11FC +7D24 +11FC +10A8 +FCA8 +13FE +10A8 +50A8 +5DFC +5020 +53FE +7020 +5020 +8FFE +ENDCHAR +STARTCHAR uni47C7 +ENCODING 18375 +BBX 15 16 0 -2 +BITMAP +0894 +0918 +09DE +7E94 +095A +09DE +FE94 +09FE +2890 +28D4 +2EAA +2916 +2A22 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47C8 +ENCODING 18376 +BBX 15 16 0 -2 +BITMAP +1094 +11D2 +1090 +7DFE +1010 +11D4 +FD54 +11D4 +1014 +53E8 +5C8A +51CA +5096 +73E2 +5000 +8FFE +ENDCHAR +STARTCHAR uni47C9 +ENCODING 18377 +BBX 15 16 0 -2 +BITMAP +11FC +1154 +1154 +7DFC +1080 +11FC +FE44 +11F4 +1154 +5154 +5DF4 +5044 +51F4 +7014 +5008 +8FFE +ENDCHAR +STARTCHAR uni47CA +ENCODING 18378 +BBX 15 16 0 -2 +BITMAP +1020 +103E +1020 +7DFE +1122 +11F8 +FD22 +11FE +1120 +5152 +5DAC +525A +52AA +7448 +5090 +8FFE +ENDCHAR +STARTCHAR uni47CB +ENCODING 18379 +BBX 15 16 0 -2 +BITMAP +1040 +107C +1084 +7D08 +13FE +1144 +FD92 +117C +1100 +517C +5D00 +517C +5244 +727C +5400 +8FFE +ENDCHAR +STARTCHAR uni47CC +ENCODING 18380 +BBX 15 16 0 -2 +BITMAP +1048 +104C +11FA +7C48 +13FE +10A8 +FDFA +134A +15EC +514C +5DEA +514A +51F6 +7122 +5000 +8FFE +ENDCHAR +STARTCHAR uni47CD +ENCODING 18381 +BBX 15 16 0 -2 +BITMAP +1040 +11FC +1124 +7D94 +114C +1124 +FDFC +1020 +13FE +528A +5D24 +53FE +5080 +70FC +5104 +8FFE +ENDCHAR +STARTCHAR uni47CE +ENCODING 18382 +BBX 15 16 0 -2 +BITMAP +1088 +11DC +1088 +7DDE +1088 +1154 +FE22 +11FC +1104 +51FC +5D04 +51FC +5104 +71FC +5088 +8FFE +ENDCHAR +STARTCHAR uni47CF +ENCODING 18383 +BBX 15 16 0 -2 +BITMAP +1124 +1174 +1258 +7BFE +1154 +12DA +FBFE +1082 +1020 +53FE +5870 +50A8 +5124 +7222 +5020 +8FFE +ENDCHAR +STARTCHAR uni47D0 +ENCODING 18384 +BBX 15 16 0 -2 +BITMAP +13FE +1200 +1222 +7ECC +1244 +13EE +FE44 +12EE +1354 +5210 +5E90 +529E +5490 +73FE +5000 +8FFE +ENDCHAR +STARTCHAR uni47D1 +ENCODING 18385 +BBX 15 16 0 -2 +BITMAP +1020 +1050 +1088 +7D74 +1202 +11FC +FD54 +11FC +1000 +51FC +5D54 +51FC +5154 +710C +5000 +8FFE +ENDCHAR +STARTCHAR uni47D2 +ENCODING 18386 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +7BDE +1252 +13DE +F8A0 +11FE +1120 +53FC +5D20 +51FC +5120 +71FE +5100 +8FFE +ENDCHAR +STARTCHAR uni47D3 +ENCODING 18387 +BBX 15 15 0 -2 +BITMAP +7C00 +45FE +4420 +4420 +7C20 +1020 +1020 +1020 +5C20 +5020 +5020 +5020 +5C20 +E0A0 +0040 +ENDCHAR +STARTCHAR uni47D4 +ENCODING 18388 +BBX 14 16 0 -2 +BITMAP +0040 +7E40 +4240 +4240 +4240 +7E60 +0850 +0848 +4E44 +4844 +4840 +4840 +4E40 +F040 +0040 +0040 +ENDCHAR +STARTCHAR uni47D5 +ENCODING 18389 +BBX 15 15 0 -2 +BITMAP +7DF8 +4488 +44C8 +44A8 +7CA8 +1088 +1050 +5C50 +5050 +5020 +5020 +5C50 +E088 +0104 +0202 +ENDCHAR +STARTCHAR uni47D6 +ENCODING 18390 +BBX 14 15 0 -1 +BITMAP +0020 +7C20 +4420 +4420 +4524 +7D24 +1124 +1124 +5D24 +5124 +5124 +5124 +5D24 +E1FC +0004 +ENDCHAR +STARTCHAR uni47D7 +ENCODING 18391 +BBX 15 16 0 -2 +BITMAP +0004 +7C1E +45F0 +4510 +4510 +7D10 +1110 +11FE +1110 +5D10 +5110 +5108 +510A +5D4A +E186 +0102 +ENDCHAR +STARTCHAR uni47D8 +ENCODING 18392 +BBX 15 16 0 -2 +BITMAP +0080 +7C40 +4440 +47FC +4400 +7C00 +11F0 +1110 +5D10 +5110 +5110 +5112 +5D12 +E212 +020E +0400 +ENDCHAR +STARTCHAR uni47D9 +ENCODING 18393 +BBX 15 15 0 -2 +BITMAP +7900 +497E +4912 +4912 +7912 +11D2 +1712 +5112 +5D12 +5152 +5192 +5922 +E022 +004A +0084 +ENDCHAR +STARTCHAR uni47DA +ENCODING 18394 +BBX 15 15 0 -2 +BITMAP +7CFC +4400 +4400 +4400 +7DFE +1048 +1048 +5C48 +5048 +5048 +5048 +5C88 +E088 +0108 +0208 +ENDCHAR +STARTCHAR uni47DB +ENCODING 18395 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +47FE +4420 +7C20 +11FC +1124 +5D24 +5124 +5124 +5134 +5D28 +E020 +0020 +0020 +ENDCHAR +STARTCHAR uni47DC +ENCODING 18396 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +45FE +4522 +7D22 +1122 +1122 +1152 +5D4A +518A +5102 +5102 +5D02 +E10A +0104 +ENDCHAR +STARTCHAR uni47DD +ENCODING 18397 +BBX 15 15 0 -2 +BITMAP +7CF8 +4488 +4488 +4488 +7D06 +1200 +11FC +1084 +5C84 +5048 +5050 +5020 +5C50 +E088 +0306 +ENDCHAR +STARTCHAR uni47DE +ENCODING 18398 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +44A8 +44A4 +7CA2 +1122 +1120 +1224 +5C24 +5028 +5008 +5010 +5C20 +E0C0 +0300 +ENDCHAR +STARTCHAR uni47DF +ENCODING 18399 +BBX 15 16 0 -2 +BITMAP +0200 +077C +3844 +2044 +2044 +207C +3F90 +2410 +2450 +2C5C +2450 +2650 +2550 +44B0 +449E +8500 +ENDCHAR +STARTCHAR uni47E0 +ENCODING 18400 +BBX 15 16 0 -2 +BITMAP +0028 +7C24 +4424 +4420 +45FE +7D20 +1124 +1124 +1124 +5D28 +5128 +5168 +5194 +5D14 +E02C +0044 +ENDCHAR +STARTCHAR uni47E1 +ENCODING 18401 +BBX 15 16 0 -2 +BITMAP +0004 +7C1E +45F0 +4510 +4510 +7D10 +1110 +11FE +1110 +5D10 +5110 +5108 +510A +5D4A +E1A6 +0112 +ENDCHAR +STARTCHAR uni47E2 +ENCODING 18402 +BBX 15 16 0 -2 +BITMAP +0080 +7C80 +4480 +44FE +4502 +7D04 +1220 +1020 +5CA8 +50A4 +5124 +5122 +5E22 +E020 +00A0 +0040 +ENDCHAR +STARTCHAR uni47E3 +ENCODING 18403 +BBX 15 16 0 -2 +BITMAP +0020 +7C28 +4424 +4420 +45FC +7C20 +1070 +1070 +5CA8 +50A8 +5124 +5124 +5E22 +E020 +0020 +0020 +ENDCHAR +STARTCHAR uni47E4 +ENCODING 18404 +BBX 15 15 0 -1 +BITMAP +0040 +7C20 +4428 +4408 +4408 +7C48 +1054 +1152 +5D52 +5160 +5260 +5044 +5CC4 +E144 +023C +ENDCHAR +STARTCHAR uni47E5 +ENCODING 18405 +BBX 15 15 0 -2 +BITMAP +7DF8 +4408 +4450 +4420 +7C10 +13FE +1062 +5CA4 +50A0 +5120 +5220 +5C20 +E020 +00A0 +0040 +ENDCHAR +STARTCHAR uni47E6 +ENCODING 18406 +BBX 15 16 0 -2 +BITMAP +0008 +7C3C +45E0 +4420 +4420 +7DFE +1040 +1040 +5C7C +50A4 +50A8 +5128 +5D10 +E228 +0444 +0082 +ENDCHAR +STARTCHAR uni47E7 +ENCODING 18407 +BBX 14 15 0 -2 +BITMAP +7C00 +45FC +4524 +4524 +7D24 +1124 +1124 +11FC +5D24 +5124 +5124 +5124 +5D24 +E1FC +0104 +ENDCHAR +STARTCHAR uni47E8 +ENCODING 18408 +BBX 15 15 0 -2 +BITMAP +7DFC +4504 +4504 +4504 +7DFC +1120 +1120 +11FE +5D20 +5120 +5110 +5112 +5D4A +E186 +0102 +ENDCHAR +STARTCHAR uni47E9 +ENCODING 18409 +BBX 15 15 0 -1 +BITMAP +0020 +7C20 +4420 +45FC +4420 +7C20 +1020 +13FE +5C20 +5040 +5040 +5088 +5D04 +E3FE +0102 +ENDCHAR +STARTCHAR uni47EA +ENCODING 18410 +BBX 15 15 0 -1 +BITMAP +0004 +7C1E +45E0 +4400 +4420 +7C10 +11FE +1004 +1008 +5C10 +5020 +5040 +5080 +5D40 +E23E +ENDCHAR +STARTCHAR uni47EB +ENCODING 18411 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +7FFE +4002 +9FF4 +1010 +1010 +1FF0 +0100 +1100 +11F8 +1100 +2900 +47FE +8000 +ENDCHAR +STARTCHAR uni47EC +ENCODING 18412 +BBX 15 15 0 -1 +BITMAP +0008 +7C1C +45E0 +4500 +4500 +7D00 +1100 +11FE +5D10 +5110 +5110 +5110 +5D10 +E110 +07FE +ENDCHAR +STARTCHAR uni47ED +ENCODING 18413 +BBX 15 16 0 -2 +BITMAP +0080 +7C80 +4480 +44FE +4540 +7D40 +1240 +107C +5C40 +5040 +5040 +507C +5C40 +E040 +0040 +0040 +ENDCHAR +STARTCHAR uni47EE +ENCODING 18414 +BBX 15 16 0 -2 +BITMAP +0090 +7C94 +4492 +4512 +4510 +7F7E +1510 +1110 +1110 +5D28 +5128 +5128 +5128 +5D44 +E144 +0182 +ENDCHAR +STARTCHAR uni47EF +ENCODING 18415 +BBX 15 16 0 -2 +BITMAP +0008 +7C3C +45E0 +4420 +4420 +7DFE +1020 +1020 +5C20 +51FC +5104 +5104 +5D04 +E104 +01FC +0104 +ENDCHAR +STARTCHAR uni47F0 +ENCODING 18416 +BBX 15 16 0 -2 +BITMAP +0040 +7C40 +449C +4500 +4640 +7C40 +10BE +1188 +1288 +5C88 +5088 +5088 +5088 +5C88 +E0A8 +0090 +ENDCHAR +STARTCHAR uni47F1 +ENCODING 18417 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +47FE +4420 +4420 +7DFC +1124 +1124 +5D24 +512C +5070 +50A8 +5D24 +E622 +0020 +0020 +ENDCHAR +STARTCHAR uni47F2 +ENCODING 18418 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +4420 +47FE +4440 +7C88 +1104 +13FE +1092 +5C90 +5090 +5090 +5112 +5D12 +E20E +0400 +ENDCHAR +STARTCHAR uni47F3 +ENCODING 18419 +BBX 15 15 0 -2 +BITMAP +3EEE +2222 +2222 +22AA +3E66 +0822 +0866 +28AA +2E22 +2822 +28AA +2844 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni47F4 +ENCODING 18420 +BBX 15 15 0 -2 +BITMAP +7DFE +4500 +4500 +457C +7D00 +1100 +11FE +5D50 +5152 +5154 +5148 +5D48 +E244 +0252 +0460 +ENDCHAR +STARTCHAR uni47F5 +ENCODING 18421 +BBX 15 16 0 -2 +BITMAP +0028 +7C24 +4424 +4420 +45FE +7C20 +1120 +10B2 +5CB4 +5068 +50A8 +5124 +5E22 +E020 +00A0 +0040 +ENDCHAR +STARTCHAR uni47F6 +ENCODING 18422 +BBX 15 15 0 -1 +BITMAP +0020 +7C20 +44A8 +44A8 +44A8 +7D74 +1222 +1020 +1020 +5DFC +5020 +5020 +5020 +5C20 +E3FE +ENDCHAR +STARTCHAR uni47F7 +ENCODING 18423 +BBX 15 16 0 -2 +BITMAP +0104 +790E +4930 +4920 +4FE0 +7920 +113E +1164 +1DA4 +5724 +5124 +5124 +5124 +5D24 +E144 +0384 +ENDCHAR +STARTCHAR uni47F8 +ENCODING 18424 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +447C +44C4 +4528 +7C90 +1060 +1180 +5C48 +5048 +51FE +5048 +5C48 +E088 +0088 +0108 +ENDCHAR +STARTCHAR uni47F9 +ENCODING 18425 +BBX 15 16 0 -2 +BITMAP +0004 +7C1E +45E0 +4422 +4512 +7C94 +1080 +1008 +11FE +5C08 +5088 +5048 +5048 +5C08 +E028 +0010 +ENDCHAR +STARTCHAR uni47FA +ENCODING 18426 +BBX 15 15 0 -2 +BITMAP +7EFC +4284 +4284 +42FC +7E84 +0884 +08FC +4E84 +4884 +48FC +4800 +4E48 +F044 +0082 +0102 +ENDCHAR +STARTCHAR uni47FB +ENCODING 18427 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4450 +4488 +4504 +7E02 +10F8 +1020 +5C20 +53FE +5020 +5124 +5D22 +E222 +00A0 +0040 +ENDCHAR +STARTCHAR uni47FC +ENCODING 18428 +BBX 15 16 0 -2 +BITMAP +0008 +7C0C +44EA +440A +4408 +7DFE +1048 +1048 +1148 +5D68 +5148 +5148 +514A +5D6A +E386 +0102 +ENDCHAR +STARTCHAR uni47FD +ENCODING 18429 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +47FE +4440 +4448 +7C9C +11E2 +1000 +5CA8 +50A8 +50A8 +50A8 +512A +5D2A +E206 +ENDCHAR +STARTCHAR uni47FE +ENCODING 18430 +BBX 15 15 0 -2 +BITMAP +7BDE +4842 +494A +4884 +794A +1252 +1420 +1C00 +53DE +5052 +5152 +5094 +5D48 +E254 +0422 +ENDCHAR +STARTCHAR uni47FF +ENCODING 18431 +BBX 15 15 0 -2 +BITMAP +7DF8 +4408 +4408 +45F8 +7C08 +1008 +13FE +5C20 +5222 +5174 +50A8 +5D24 +E222 +00A0 +0040 +ENDCHAR +STARTCHAR uni4800 +ENCODING 18432 +BBX 14 16 0 -2 +BITMAP +0020 +7D24 +44A4 +44A8 +4420 +7DFC +1104 +1104 +1174 +5D54 +5154 +5154 +5174 +5D04 +E114 +0108 +ENDCHAR +STARTCHAR uni4801 +ENCODING 18433 +BBX 15 15 0 -1 +BITMAP +0040 +7890 +4908 +4BFC +4908 +7A10 +14A4 +17BE +5082 +5C00 +53FC +5000 +5800 +E000 +07FE +ENDCHAR +STARTCHAR uni4802 +ENCODING 18434 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7EFC +0830 +1C68 +2AA4 +C922 +0820 +1FF0 +1010 +1FF0 +0100 +11F8 +1100 +2900 +47FE +ENDCHAR +STARTCHAR uni4803 +ENCODING 18435 +BBX 15 15 0 -2 +BITMAP +7BFE +4820 +4820 +4BFE +7A22 +1222 +1332 +52AA +5EAA +5376 +5266 +5A22 +E222 +022A +0204 +ENDCHAR +STARTCHAR uni4804 +ENCODING 18436 +BBX 15 16 0 -2 +BITMAP +0050 +7C50 +4450 +45FC +4554 +7D54 +1154 +11FC +5D54 +5154 +5154 +53FE +5C00 +E050 +0088 +0104 +ENDCHAR +STARTCHAR uni4805 +ENCODING 18437 +BBX 15 15 0 -2 +BITMAP +7DFE +4502 +451A +4562 +7D22 +1122 +11FA +5D22 +5132 +516A +51A6 +5D22 +E122 +01FE +0102 +ENDCHAR +STARTCHAR uni4806 +ENCODING 18438 +BBX 15 15 0 -2 +BITMAP +7CFC +4480 +44F8 +4480 +7CF8 +1080 +13FE +1140 +5D24 +5128 +5110 +5108 +5D44 +E182 +0100 +ENDCHAR +STARTCHAR uni4807 +ENCODING 18439 +BBX 15 15 0 -2 +BITMAP +7DFE +4502 +4502 +45FE +7D10 +1152 +1152 +5D52 +517E +5110 +5152 +5D52 +E252 +027E +0402 +ENDCHAR +STARTCHAR uni4808 +ENCODING 18440 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +49FC +4824 +4824 +7BFE +1024 +1024 +51FC +5E22 +5174 +50A8 +5924 +E222 +00A0 +0040 +ENDCHAR +STARTCHAR uni4809 +ENCODING 18441 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +45FE +4502 +4604 +7CF8 +1088 +1088 +5CF8 +5080 +5080 +50FC +5C84 +E084 +00FC +0084 +ENDCHAR +STARTCHAR uni480A +ENCODING 18442 +BBX 15 16 0 -2 +BITMAP +0090 +7C90 +4490 +479E +4490 +7C90 +1090 +139C +1090 +5C90 +5090 +539E +5090 +5C90 +E090 +0090 +ENDCHAR +STARTCHAR uni480B +ENCODING 18443 +BBX 15 16 0 -2 +BITMAP +0040 +7C80 +45FC +4524 +4524 +7DFC +1124 +1144 +5DFC +5090 +5110 +53FE +5C10 +E010 +0010 +0010 +ENDCHAR +STARTCHAR uni480C +ENCODING 18444 +BBX 15 16 0 -2 +BITMAP +0020 +7C22 +47B4 +44A8 +44A8 +7D24 +12A2 +1040 +5DFC +5104 +51FC +5104 +5DFC +E104 +0114 +0108 +ENDCHAR +STARTCHAR uni480D +ENCODING 18445 +BBX 15 15 0 -2 +BITMAP +7BDE +4A42 +4A42 +4A42 +7BDE +1200 +123E +53D2 +5E12 +5214 +53D4 +5A08 +E214 +0224 +0242 +ENDCHAR +STARTCHAR uni480E +ENCODING 18446 +BBX 15 15 0 -2 +BITMAP +7DFE +4502 +4502 +45FE +7D00 +11FE +1120 +5D44 +51FE +5112 +5110 +5EFE +E210 +0410 +09FE +ENDCHAR +STARTCHAR uni480F +ENCODING 18447 +BBX 15 16 0 -2 +BITMAP +0010 +7BD4 +4858 +4A52 +498C +7888 +1104 +12FA +1020 +5C20 +53FE +5020 +5050 +5C88 +E104 +0202 +ENDCHAR +STARTCHAR uni4810 +ENCODING 18448 +BBX 15 15 0 -2 +BITMAP +7DFC +4504 +45FC +4504 +7DFC +1104 +11FC +5C28 +5024 +53FE +5050 +5C50 +E088 +0104 +0202 +ENDCHAR +STARTCHAR uni4811 +ENCODING 18449 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +4BFE +4850 +4888 +7B26 +11FC +1020 +1C20 +53FE +5000 +5020 +51FC +5C20 +E020 +03FE +ENDCHAR +STARTCHAR uni4812 +ENCODING 18450 +BBX 15 16 0 -2 +BITMAP +0080 +7C9E +4492 +45D2 +4492 +7C9E +1092 +11D2 +5D52 +515E +5152 +5152 +5DD2 +E022 +002A +0044 +ENDCHAR +STARTCHAR uni4813 +ENCODING 18451 +BBX 15 16 0 -2 +BITMAP +0088 +7C48 +4450 +47FE +4450 +7C50 +11FC +1154 +5D54 +518C +5104 +51FC +5D04 +E104 +01FC +0104 +ENDCHAR +STARTCHAR uni4814 +ENCODING 18452 +BBX 15 15 0 -2 +BITMAP +7C84 +4448 +4400 +45FE +7C20 +1044 +11A8 +1030 +5C58 +5198 +5034 +5052 +5D90 +E050 +0020 +ENDCHAR +STARTCHAR uni4815 +ENCODING 18453 +BBX 15 16 0 -2 +BITMAP +0090 +7892 +4AD4 +4A98 +4A92 +7AD2 +170E +1020 +1C20 +53FE +5070 +50A8 +5124 +5E22 +E020 +0020 +ENDCHAR +STARTCHAR uni4816 +ENCODING 18454 +BBX 15 15 1 -1 +BITMAP +0020 +7D20 +44BE +4452 +4414 +7C90 +1128 +1244 +5C82 +5000 +51FC +5104 +5104 +5D04 +E1FC +ENDCHAR +STARTCHAR uni4817 +ENCODING 18455 +BBX 15 16 0 -2 +BITMAP +0020 +7C40 +45FC +4504 +45FC +7D04 +11FC +1104 +5DFC +5028 +5024 +53FE +5C50 +E088 +0104 +0202 +ENDCHAR +STARTCHAR uni4818 +ENCODING 18456 +BBX 15 16 0 -2 +BITMAP +0020 +7C40 +45FC +4504 +4554 +7D24 +1154 +1104 +11FC +5C00 +5112 +51D4 +5118 +5D52 +E192 +010E +ENDCHAR +STARTCHAR uni4819 +ENCODING 18457 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +45FE +4484 +4448 +7DFE +1102 +1224 +1010 +5DFE +5040 +507C +5044 +5C84 +E094 +0108 +ENDCHAR +STARTCHAR uni481A +ENCODING 18458 +BBX 15 16 0 -2 +BITMAP +0080 +F040 +97FC +9404 +9110 +F208 +203C +23D0 +A290 +BA90 +A290 +A288 +A288 +B4A4 +C4D4 +0892 +ENDCHAR +STARTCHAR uni481B +ENCODING 18459 +BBX 15 16 0 -2 +BITMAP +0008 +783C +4BC0 +4804 +4A44 +7928 +11FC +1220 +1C20 +53FE +5020 +5124 +5124 +5D24 +E1FC +0004 +ENDCHAR +STARTCHAR uni481C +ENCODING 18460 +BBX 15 16 0 -2 +BITMAP +0088 +7C88 +45FE +4488 +4400 +7DFE +1088 +1088 +10F8 +5C88 +50F8 +5088 +509E +5DE8 +E008 +0008 +ENDCHAR +STARTCHAR uni481D +ENCODING 18461 +BBX 14 15 0 -2 +BITMAP +7CF8 +4488 +4488 +44F8 +7C00 +11FC +1104 +5DFC +5104 +51FC +5104 +5DFC +E050 +0088 +0104 +ENDCHAR +STARTCHAR uni481E +ENCODING 18462 +BBX 15 16 0 -2 +BITMAP +0014 +F012 +9010 +97FE +9410 +F490 +24D2 +2492 +A7F2 +BC94 +A494 +A5C8 +BAAA +E89A +11A6 +0042 +ENDCHAR +STARTCHAR uni481F +ENCODING 18463 +BBX 15 16 0 -2 +BITMAP +0820 +7E20 +08F8 +FF28 +1428 +7F6A +082A +FF56 +0882 +1FF0 +1010 +1FF0 +0100 +11F8 +3100 +CFFE +ENDCHAR +STARTCHAR uni4820 +ENCODING 18464 +BBX 15 16 0 -2 +BITMAP +1450 +7FFC +2452 +47CE +8000 +7FFC +4104 +3FF8 +2108 +3FF8 +1010 +1FF0 +0100 +11F8 +3100 +CFFE +ENDCHAR +STARTCHAR uni4821 +ENCODING 18465 +BBX 15 16 0 -2 +BITMAP +0020 +7C3C +4420 +45FE +4522 +7D38 +11E4 +111C +1100 +5D7C +5144 +517C +5144 +5D7C +E144 +02FE +ENDCHAR +STARTCHAR uni4822 +ENCODING 18466 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3FF8 +2448 +3FF8 +0000 +7FFE +4002 +9FF4 +1010 +1FF0 +0100 +11F8 +3100 +CFFE +ENDCHAR +STARTCHAR uni4823 +ENCODING 18467 +BBX 15 15 0 -2 +BITMAP +7BDE +4A52 +4BDE +4A10 +7A52 +11CE +1000 +1C88 +53FE +5088 +5088 +53FE +5C88 +E104 +0202 +ENDCHAR +STARTCHAR uni4824 +ENCODING 18468 +BBX 15 15 0 -2 +BITMAP +7DDC +4554 +4554 +45DC +7C00 +11FC +1124 +11FC +5D24 +51FC +5020 +53FE +5C20 +E020 +0020 +ENDCHAR +STARTCHAR uni4825 +ENCODING 18469 +BBX 15 16 0 -2 +BITMAP +0108 +F108 +9548 +9390 +911E +F7D4 +2564 +2554 +A554 +BF54 +A5D4 +A548 +A548 +B554 +C464 +04C2 +ENDCHAR +STARTCHAR uni4826 +ENCODING 18470 +BBX 15 16 0 -2 +BITMAP +0080 +7CEE +454A +444A +45FA +7C4E +10AA +1100 +10FC +5C84 +5084 +50FC +5084 +5C84 +E0FC +0084 +ENDCHAR +STARTCHAR uni4827 +ENCODING 18471 +BBX 15 15 0 -2 +BITMAP +7BFC +4A04 +4A04 +4BFC +7A22 +12FC +1228 +13FE +5E20 +52FC +5384 +52FC +5C84 +E4FC +0884 +ENDCHAR +STARTCHAR uni4828 +ENCODING 18472 +BBX 15 16 0 -2 +BITMAP +0080 +7CF8 +4508 +47FE +4544 +7D92 +11FE +1100 +5D7C +5100 +517C +5100 +5D7C +E244 +027C +0444 +ENDCHAR +STARTCHAR uni4829 +ENCODING 18473 +BBX 15 16 0 -2 +BITMAP +0020 +F13C +9120 +97FE +9010 +F014 +23FE +2210 +A3F0 +BA54 +A254 +A2D4 +BB68 +E44A +0896 +0322 +ENDCHAR +STARTCHAR uni482A +ENCODING 18474 +BBX 15 16 0 -2 +BITMAP +0044 +7A84 +4AEA +4A4E +4AA4 +7AEE +1222 +13FE +1244 +5E84 +52EA +524E +52A4 +5EEE +E222 +03FE +ENDCHAR +STARTCHAR uni482B +ENCODING 18475 +BBX 15 16 0 -2 +BITMAP +03F0 +792E +49E2 +492A +49E4 +7934 +13EA +1032 +1C1E +53E0 +50A2 +5134 +5068 +5CA4 +E322 +0020 +ENDCHAR +STARTCHAR uni482C +ENCODING 18476 +BBX 15 16 0 -2 +BITMAP +00A0 +F74E +915A +952A +922A +F21C +25DA +280A +A1EA +B92A +A1EA +A22C +A148 +B068 +C388 +0008 +ENDCHAR +STARTCHAR uni482D +ENCODING 18477 +BBX 15 16 0 -2 +BITMAP +0108 +F108 +97CE +9112 +9124 +F7DE +2552 +255E +A7D2 +B91E +A392 +A55E +A940 +B114 +C112 +0122 +ENDCHAR +STARTCHAR uni482E +ENCODING 18478 +BBX 15 16 0 -2 +BITMAP +0124 +78A8 +49FC +4840 +4BFE +7908 +13FC +1522 +51FC +5D20 +51FC +5120 +59FE +E002 +02AA +0004 +ENDCHAR +STARTCHAR uni482F +ENCODING 18479 +BBX 15 16 0 -2 +BITMAP +0040 +F0A0 +9110 +9208 +9DF6 +F000 +2EEE +2AAA +AEEE +B800 +AFFE +A922 +AFFE +B922 +C92A +0804 +ENDCHAR +STARTCHAR uni4830 +ENCODING 18480 +BBX 15 16 0 -2 +BITMAP +0088 +7BFE +4888 +4BDE +4A52 +7BDE +10A0 +1090 +11FE +5D20 +53FC +5520 +51FC +5D20 +E1FE +0100 +ENDCHAR +STARTCHAR uni4831 +ENCODING 18481 +BBX 15 16 0 -2 +BITMAP +03FE +7A02 +4BFE +4A92 +4A54 +7A92 +12FE +12AA +52FE +5F22 +52FA +52AA +5AFA +E222 +05FA +0004 +ENDCHAR +STARTCHAR uni4832 +ENCODING 18482 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +7C50 +4450 +7C88 +4524 +7E12 +4410 +45FC +FC04 +0C08 +1488 +2450 +4420 +9410 +0810 +ENDCHAR +STARTCHAR uni4833 +ENCODING 18483 +BBX 14 16 0 -2 +BITMAP +1020 +2020 +7D24 +4524 +7D24 +4524 +7DFC +4420 +4420 +FD24 +0D24 +1524 +2524 +4524 +95FC +0804 +ENDCHAR +STARTCHAR uni4834 +ENCODING 18484 +BBX 15 16 0 -2 +BITMAP +1020 +2010 +7C10 +4400 +7DFE +4400 +7C04 +4484 +4484 +FC48 +0C48 +1448 +2450 +4410 +95FE +0800 +ENDCHAR +STARTCHAR uni4835 +ENCODING 18485 +BBX 15 16 0 -2 +BITMAP +1044 +2044 +7C44 +4484 +7CBE +4584 +7E84 +44A4 +4494 +FC94 +0C84 +1484 +2484 +4484 +9494 +0888 +ENDCHAR +STARTCHAR uni4836 +ENCODING 18486 +BBX 15 16 0 -2 +BITMAP +1040 +2040 +7C80 +44FC +7D20 +4620 +7C20 +4420 +47FE +FC20 +0C50 +1450 +2488 +4488 +9504 +0A02 +ENDCHAR +STARTCHAR uni4837 +ENCODING 18487 +BBX 15 16 0 -2 +BITMAP +1050 +2050 +7C50 +4552 +7CD4 +4458 +7C50 +4458 +44D4 +FD52 +0C50 +1450 +2492 +4492 +9512 +0A0E +ENDCHAR +STARTCHAR uni4838 +ENCODING 18488 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +7DFC +4450 +7C88 +4504 +7EFA +4400 +47FE +FC40 +0C80 +15FC +2404 +4404 +9428 +0810 +ENDCHAR +STARTCHAR uni4839 +ENCODING 18489 +BBX 15 16 0 -2 +BITMAP +1020 +2010 +7C10 +45FE +7C20 +4424 +7C44 +44F8 +4412 +FC22 +0C44 +1588 +2410 +4428 +9444 +0982 +ENDCHAR +STARTCHAR uni483A +ENCODING 18490 +BBX 15 16 0 -2 +BITMAP +1080 +2040 +7C5E +4502 +7D02 +457A +7D4A +454A +454A +FD4A +0D7A +154A +2502 +4502 +950A +0904 +ENDCHAR +STARTCHAR uni483B +ENCODING 18491 +BBX 15 16 0 -2 +BITMAP +1020 +2010 +7DFE +4502 +7C48 +4484 +7D02 +44FC +4404 +FCFC +0C80 +14FC +2404 +4404 +9428 +0810 +ENDCHAR +STARTCHAR uni483C +ENCODING 18492 +BBX 15 16 0 -2 +BITMAP +1020 +2050 +7C88 +4504 +7EFA +4400 +7DE2 +452A +452A +FDEA +0D2A +152A +25EA +4522 +952A +0964 +ENDCHAR +STARTCHAR uni483D +ENCODING 18493 +BBX 15 16 0 -2 +BITMAP +1020 +2124 +7924 +4924 +79FC +4800 +7BFE +4800 +49FC +F904 +1904 +29FC +4888 +8850 +2BFE +1000 +ENDCHAR +STARTCHAR uni483E +ENCODING 18494 +BBX 15 16 0 -2 +BITMAP +1000 +23DE +7A52 +4BDE +7A52 +4BDE +7A02 +4A22 +4A22 +FA22 +1A52 +2A4A +4A8A +8A02 +2A0A +1204 +ENDCHAR +STARTCHAR uni483F +ENCODING 18495 +BBX 15 16 0 -2 +BITMAP +1020 +21FC +7D24 +45FC +7C20 +47FE +7C00 +45FC +4504 +FDFC +0D04 +15FC +2504 +45FC +9488 +0904 +ENDCHAR +STARTCHAR uni4840 +ENCODING 18496 +BBX 15 16 0 -2 +BITMAP +1010 +21FE +7C00 +45FE +7D02 +457A +7D4A +45FE +4400 +FCFC +0C84 +14FC +2484 +44FC +9400 +09FE +ENDCHAR +STARTCHAR uni4841 +ENCODING 18497 +BBX 15 16 0 -2 +BITMAP +1110 +2090 +7BDE +4810 +7A5E +4982 +7BDE +4810 +4BDE +FA50 +1BDE +2A50 +4BDE +8A50 +2A52 +12CE +ENDCHAR +STARTCHAR uni4842 +ENCODING 18498 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +0844 +FF44 +0844 +7F44 +4944 +7F44 +4944 +7F4C +0874 +FF44 +0804 +0804 +0804 +0804 +ENDCHAR +STARTCHAR uni4843 +ENCODING 18499 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1040 +FE40 +11FC +7C44 +5444 +7C44 +5444 +7C84 +1084 +FE84 +1104 +1104 +1228 +1410 +ENDCHAR +STARTCHAR uni4844 +ENCODING 18500 +BBX 15 15 1 -1 +BITMAP +1000 +10F0 +FE90 +1090 +7C90 +5490 +7C90 +5490 +5490 +7C90 +1090 +FE90 +1112 +1112 +120E +ENDCHAR +STARTCHAR uni4845 +ENCODING 18501 +BBX 15 16 0 -2 +BITMAP +1082 +1092 +1092 +FE92 +1092 +7C92 +5492 +7C92 +5492 +7C92 +1092 +FE92 +1092 +1112 +1102 +1202 +ENDCHAR +STARTCHAR uni4846 +ENCODING 18502 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +1090 +FE88 +1088 +7D24 +5524 +7E22 +5420 +7C40 +1048 +FE44 +1084 +11FE +1082 +1000 +ENDCHAR +STARTCHAR uni4847 +ENCODING 18503 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +FE00 +1000 +7C00 +57FE +7C90 +5490 +7C90 +1090 +FE90 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni4848 +ENCODING 18504 +BBX 15 16 0 -2 +BITMAP +1008 +1088 +1050 +FE20 +1050 +7C88 +5500 +7C08 +5488 +7C88 +1050 +FE50 +1020 +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni4849 +ENCODING 18505 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1000 +FDFC +1000 +7C00 +54F0 +7C90 +5490 +7C90 +1090 +FE92 +1092 +1112 +110E +1200 +ENDCHAR +STARTCHAR uni484A +ENCODING 18506 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11E0 +FD00 +1100 +7DFC +5544 +7D44 +5544 +7D28 +1128 +FF10 +1110 +1228 +1244 +1482 +ENDCHAR +STARTCHAR uni484B +ENCODING 18507 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FDFE +1020 +7C20 +5420 +7DFC +5484 +7C88 +1048 +FE50 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni484C +ENCODING 18508 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +FC40 +13FE +7C40 +5480 +7C90 +5490 +7D20 +1120 +FE48 +1244 +1484 +11FE +1082 +ENDCHAR +STARTCHAR uni484D +ENCODING 18509 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FC20 +11FC +7C20 +5420 +7C20 +55FE +7C20 +1050 +FE50 +1088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni484E +ENCODING 18510 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE00 +1000 +7CFE +5482 +7C82 +54FE +5480 +7C80 +1080 +FE80 +1100 +1100 +1200 +ENDCHAR +STARTCHAR uni484F +ENCODING 18511 +BBX 15 16 0 -2 +BITMAP +1008 +11C8 +1048 +FE48 +1048 +7DC8 +5508 +7D08 +5510 +7DD0 +1054 +FE54 +1052 +105E +1282 +1100 +ENDCHAR +STARTCHAR uni4850 +ENCODING 18512 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1010 +FEFE +1082 +7D04 +5440 +7C48 +5450 +7C60 +1040 +FE42 +1042 +1042 +103E +1000 +ENDCHAR +STARTCHAR uni4851 +ENCODING 18513 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +FD04 +1104 +7DFC +5520 +7D20 +55FE +7D20 +1120 +FD10 +1112 +114A +1186 +1102 +ENDCHAR +STARTCHAR uni4852 +ENCODING 18514 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +11FC +FD24 +1124 +7D24 +5524 +7D24 +55FC +7D24 +1124 +FD24 +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni4853 +ENCODING 18515 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +211C +47C0 +8100 +17C0 +257E +67C8 +A548 +27C8 +2108 +2FE8 +2108 +2108 +2128 +2110 +ENDCHAR +STARTCHAR uni4854 +ENCODING 18516 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +107C +FC84 +1148 +7C30 +5420 +7C48 +5590 +7C3E +1042 +FDA4 +1018 +1010 +1060 +1180 +ENDCHAR +STARTCHAR uni4855 +ENCODING 18517 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1010 +FC20 +1024 +7DA8 +54B0 +7CA8 +5528 +7D24 +1222 +FCA0 +1040 +1000 +11FC +1000 +ENDCHAR +STARTCHAR uni4856 +ENCODING 18518 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +FE00 +1050 +7C88 +5524 +7C20 +5420 +7DFC +1020 +FE20 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni4857 +ENCODING 18519 +BBX 15 16 0 -2 +BITMAP +7DF0 +1110 +1190 +1D52 +F20E +0500 +1FF0 +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni4858 +ENCODING 18520 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FE +FD02 +1102 +7EFA +54AA +7CAA +54FA +7CAA +10AA +FEFA +108A +1002 +1014 +1008 +ENDCHAR +STARTCHAR uni4859 +ENCODING 18521 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +10FC +FE84 +1084 +7CFC +5484 +7C84 +54FC +7CA2 +10A4 +FE98 +1090 +1088 +10C4 +1082 +ENDCHAR +STARTCHAR uni485A +ENCODING 18522 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +FD04 +1104 +7DFC +5504 +7D04 +55FC +7C50 +1050 +FE50 +1092 +1092 +110E +1200 +ENDCHAR +STARTCHAR uni485B +ENCODING 18523 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +FEFE +1010 +7C7C +5454 +5454 +7C7C +5454 +5454 +7C7C +1010 +FEFE +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni485C +ENCODING 18524 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +FC20 +1020 +7DFE +5488 +7D04 +5622 +7C20 +11FC +FE20 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni485D +ENCODING 18525 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +FA02 +2504 +F900 +A9DE +FA52 +AA52 +FB52 +249A +F894 +2110 +2112 +2212 +240E +ENDCHAR +STARTCHAR uni485E +ENCODING 18526 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +FFFE +1110 +3FF8 +C106 +1FF0 +1110 +1FF0 +1110 +FFFE +0100 +ENDCHAR +STARTCHAR uni485F +ENCODING 18527 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +10FE +FC92 +1092 +7CFE +5492 +7CA2 +54FE +7C48 +1088 +FDFE +1008 +1008 +1008 +1008 +ENDCHAR +STARTCHAR uni4860 +ENCODING 18528 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +103E +FE20 +1020 +7CFC +5484 +7CFC +5484 +7CFC +1084 +FEFC +1000 +1048 +1084 +1102 +ENDCHAR +STARTCHAR uni4861 +ENCODING 18529 +BBX 15 16 0 -2 +BITMAP +1110 +1112 +11D4 +FD18 +1152 +7D92 +552E +7C40 +55FC +7D04 +1104 +FDFC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni4862 +ENCODING 18530 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FE +FD02 +1102 +7DFE +5500 +7D00 +55FE +7DAA +11AA +FEFE +12AA +12AA +14A2 +1086 +ENDCHAR +STARTCHAR uni4863 +ENCODING 18531 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1222 +FC20 +11FE +7C20 +55FC +7D24 +55FC +7D24 +11FC +FC20 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni4864 +ENCODING 18532 +BBX 15 16 0 -2 +BITMAP +0200 +3FD0 +0260 +FFFE +1C10 +EFF0 +0810 +0FF0 +0100 +7FFC +1110 +1FF0 +1110 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni4865 +ENCODING 18533 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +FE02 +1050 +7C88 +5524 +7C50 +5488 +7D04 +12FA +FC88 +1088 +1088 +10F8 +1088 +ENDCHAR +STARTCHAR uni4866 +ENCODING 18534 +BBX 15 16 0 -2 +BITMAP +21F8 +2088 +2070 +F98C +2000 +FBDE +AA52 +F98C +AA52 +F820 +23FE +F870 +20A8 +2124 +2622 +2020 +ENDCHAR +STARTCHAR uni4867 +ENCODING 18535 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +FD04 +1104 +7DFC +5500 +7DFE +5500 +7DFE +1002 +FEAA +12AA +1402 +1014 +1008 +ENDCHAR +STARTCHAR uni4868 +ENCODING 18536 +BBX 15 16 0 -2 +BITMAP +0820 +0440 +7FFC +0100 +FFFE +0400 +1FF0 +E100 +3FFC +0100 +1FF0 +1110 +1FF0 +1110 +FFFE +0100 +ENDCHAR +STARTCHAR uni4869 +ENCODING 18537 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +FC20 +11FC +7D04 +55FC +7D04 +55FC +7D04 +11FC +FD04 +13FE +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni486A +ENCODING 18538 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +FD02 +1102 +7DFE +5500 +7DEE +5522 +7DAA +1166 +FD22 +1166 +12AA +1222 +1466 +ENDCHAR +STARTCHAR uni486B +ENCODING 18539 +BBX 15 16 0 -2 +BITMAP +1020 +1220 +117C +FCA4 +1018 +7CE6 +5710 +7D7E +5510 +7D7C +1110 +FDFE +1110 +1110 +12FE +1400 +ENDCHAR +STARTCHAR uni486C +ENCODING 18540 +BBX 15 16 0 -2 +BITMAP +2000 +21F8 +2108 +F9F8 +2108 +F9F8 +A800 +FBFC +AA94 +FBFC +2000 +F9F8 +2090 +2060 +2198 +2606 +ENDCHAR +STARTCHAR uni486D +ENCODING 18541 +BBX 15 16 0 -2 +BITMAP +1084 +1048 +11FE +FE10 +10FC +7C20 +55FE +7C40 +547C +7CA4 +1124 +FEFC +1044 +1044 +11FE +1000 +ENDCHAR +STARTCHAR uni486E +ENCODING 18542 +BBX 15 16 0 -2 +BITMAP +1124 +1124 +1224 +FCA4 +1154 +7D4A +5792 +7D08 +5508 +7D28 +112E +FD28 +1128 +1158 +114E +1180 +ENDCHAR +STARTCHAR uni486F +ENCODING 18543 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +FD24 +117C +7D8C +5554 +7D24 +5554 +7DFC +1040 +FC24 +12A2 +128A +1488 +1078 +ENDCHAR +STARTCHAR uni4870 +ENCODING 18544 +BBX 15 16 0 -2 +BITMAP +0878 +FF48 +0886 +3E78 +2A48 +3E30 +4048 +8104 +3FF8 +0100 +1FF0 +1110 +1FF0 +1110 +FFFE +0100 +ENDCHAR +STARTCHAR uni4871 +ENCODING 18545 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2200 +FA7C +2244 +FA44 +AA7C +FA00 +AAEE +FAAA +22AA +FAAA +22EE +2200 +23FE +2000 +ENDCHAR +STARTCHAR uni4872 +ENCODING 18546 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +FE52 +13DE +7C00 +55FC +7D24 +55FC +7D24 +11FC +FC20 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni4873 +ENCODING 18547 +BBX 15 16 0 -2 +BITMAP +2140 +2144 +2158 +FBF0 +2150 +F9D0 +A95E +F9D4 +A954 +F954 +23F4 +F814 +2154 +2234 +2414 +2024 +ENDCHAR +STARTCHAR uni4874 +ENCODING 18548 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1088 +FC50 +13FE +7C00 +55FC +7D24 +55FC +7D24 +11FC +FC20 +11FC +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni4875 +ENCODING 18549 +BBX 15 16 0 -2 +BITMAP +1044 +1224 +1128 +FC7E +1010 +7C28 +574A +7D1C +5528 +7D4C +111A +FD2A +1148 +1110 +12FE +1400 +ENDCHAR +STARTCHAR uni4876 +ENCODING 18550 +BBX 15 16 0 -2 +BITMAP +2010 +23C8 +227E +FA40 +2262 +FBD4 +AA00 +FA3E +ABC8 +FA48 +267E +FA48 +2248 +23C8 +2248 +2008 +ENDCHAR +STARTCHAR uni4877 +ENCODING 18551 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +FC20 +11FC +7C20 +57FE +7C40 +5488 +7DFC +1000 +FDFC +1154 +1154 +17FE +1000 +ENDCHAR +STARTCHAR uni4878 +ENCODING 18552 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +FDFC +1154 +7D54 +55FC +7C28 +5424 +7DFE +1120 +FD24 +1114 +114A +1196 +1122 +ENDCHAR +STARTCHAR uni4879 +ENCODING 18553 +BBX 15 16 0 -2 +BITMAP +1020 +11FE +1020 +FDFE +1102 +7EFC +54A4 +7CFC +54A4 +7CFC +1000 +FDFE +10A2 +10BC +1160 +123E +ENDCHAR +STARTCHAR uni487A +ENCODING 18554 +BBX 15 16 0 -2 +BITMAP +2088 +23DE +2088 +F9DC +2088 +FBDE +A888 +FBFC +A804 +F9FC +2004 +FBFC +2040 +22A4 +228A +247A +ENDCHAR +STARTCHAR uni487B +ENCODING 18555 +BBX 15 16 0 -2 +BITMAP +2040 +21FC +2124 +F994 +214C +F924 +A9FC +F820 +ABFE +FA8A +2124 +FBFE +2080 +20FC +2104 +220C +ENDCHAR +STARTCHAR uni487C +ENCODING 18556 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2020 +FBFE +2222 +F9AC +A820 +F9AC +A800 +FBEE +22AA +FAAA +22AA +22AA +23EE +22AA +ENDCHAR +STARTCHAR uni487D +ENCODING 18557 +BBX 15 16 0 -2 +BITMAP +2528 +27BE +2948 +FFBE +2318 +FDAA +A946 +FBFC +AA04 +FBFC +2204 +FBFC +2204 +23FC +2108 +2204 +ENDCHAR +STARTCHAR uni487E +ENCODING 18558 +BBX 15 16 0 -2 +BITMAP +2108 +21EC +210A +FFEA +2928 +FBC8 +A93E +FFE8 +A948 +FBE8 +2A28 +FB68 +2AA8 +2BF4 +2AB4 +32A2 +ENDCHAR +STARTCHAR uni487F +ENCODING 18559 +BBX 15 16 0 -2 +BITMAP +21FC +2020 +23FE +FA22 +21AC +F820 +A9AC +F800 +ABBE +FAAA +23BE +F800 +23FE +2124 +22AA +27FE +ENDCHAR +STARTCHAR uni4880 +ENCODING 18560 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +FEFE +2080 +2900 +48F8 +7E08 +0810 +0820 +0E40 +F880 +4902 +0902 +08FE +0800 +ENDCHAR +STARTCHAR uni4881 +ENCODING 18561 +BBX 14 16 0 -2 +BITMAP +1000 +10FC +1084 +FE84 +2084 +28FC +4884 +7E84 +0884 +08FC +0E84 +F884 +4884 +0884 +0914 +0A08 +ENDCHAR +STARTCHAR uni4882 +ENCODING 18562 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +FE00 +21FE +2800 +4804 +7E84 +0884 +0848 +0E48 +F848 +4850 +0810 +0BFE +0800 +ENDCHAR +STARTCHAR uni4883 +ENCODING 18563 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FC +4488 +7C50 +43FE +7C20 +A5FC +2420 +3C20 +1008 +0810 +0660 +0180 +0E70 +F00E +ENDCHAR +STARTCHAR uni4884 +ENCODING 18564 +BBX 15 16 0 -2 +BITMAP +1010 +24FE +4244 +7E28 +00FE +7E10 +427C +7E10 +0820 +0820 +7EFC +0830 +1C68 +2AA4 +C922 +0820 +ENDCHAR +STARTCHAR uni4885 +ENCODING 18565 +BBX 15 16 0 -2 +BITMAP +0200 +1C78 +1008 +1E78 +1008 +1FF8 +0000 +3FFC +2000 +2FF8 +2000 +3FFE +2888 +4850 +4A30 +8C0E +ENDCHAR +STARTCHAR uni4886 +ENCODING 18566 +BBX 15 15 0 -2 +BITMAP +01FE +7D00 +457C +4500 +01FE +3954 +2948 +2964 +2942 +2B08 +2DFE +4948 +4128 +8208 +0418 +ENDCHAR +STARTCHAR uni4887 +ENCODING 18567 +BBX 15 16 0 -2 +BITMAP +2000 +11FE +7D00 +457C +4500 +01FE +3954 +2948 +2964 +2942 +2B08 +2DFE +4948 +4128 +8208 +0418 +ENDCHAR +STARTCHAR uni4888 +ENCODING 18568 +BBX 15 16 0 -2 +BITMAP +3FFC +2000 +2FF8 +2000 +3FFE +2868 +4910 +4A88 +8C64 +3FF8 +D556 +1390 +1FF0 +0A20 +0920 +0FE0 +ENDCHAR +STARTCHAR uni4889 +ENCODING 18569 +BBX 15 16 0 -2 +BITMAP +1118 +27C8 +2448 +36D8 +2548 +26C8 +37D8 +0000 +3FFC +2000 +2FF8 +2000 +3FFC +2448 +4430 +860E +ENDCHAR +STARTCHAR uni488A +ENCODING 18570 +BBX 15 14 0 -1 +BITMAP +23F8 +1010 +1020 +0040 +0040 +F7FE +1040 +1040 +1040 +1040 +1140 +1080 +2800 +47FE +ENDCHAR +STARTCHAR uni488B +ENCODING 18571 +BBX 15 14 0 -1 +BITMAP +23FC +1090 +1090 +0090 +0090 +F090 +1090 +1090 +1110 +1110 +1210 +1410 +2800 +47FE +ENDCHAR +STARTCHAR uni488C +ENCODING 18572 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +2040 +2FFE +0040 +0040 +E7FC +2444 +2444 +2444 +2454 +2448 +2040 +2040 +5000 +8FFE +ENDCHAR +STARTCHAR uni488D +ENCODING 18573 +BBX 15 15 0 -1 +BITMAP +0080 +2040 +1040 +17FE +0100 +0100 +F1F8 +1108 +1108 +1108 +1208 +1208 +1450 +2820 +47FE +ENDCHAR +STARTCHAR uni488E +ENCODING 18574 +BBX 15 14 0 -1 +BITMAP +23FC +1090 +1090 +0090 +0090 +F7FE +1090 +1090 +1110 +1110 +1210 +1410 +2800 +47FE +ENDCHAR +STARTCHAR uni488F +ENCODING 18575 +BBX 15 15 0 -1 +BITMAP +0010 +2110 +1090 +1090 +0010 +0210 +F110 +1110 +101E +17F0 +1010 +1010 +1010 +2810 +47FE +ENDCHAR +STARTCHAR uni4890 +ENCODING 18576 +BBX 15 14 0 -1 +BITMAP +21F8 +1108 +1108 +01F8 +0108 +F108 +11F8 +1108 +1108 +1108 +17FE +1000 +2800 +47FE +ENDCHAR +STARTCHAR uni4891 +ENCODING 18577 +BBX 15 15 0 -1 +BITMAP +0008 +203C +13E0 +1220 +0220 +0220 +F3FE +1220 +1210 +1212 +128A +1326 +1212 +2800 +47FE +ENDCHAR +STARTCHAR uni4892 +ENCODING 18578 +BBX 15 15 0 -1 +BITMAP +0080 +2040 +17FC +1000 +0110 +0208 +F414 +1110 +10A0 +1040 +10A0 +1110 +1208 +2800 +47FE +ENDCHAR +STARTCHAR uni4893 +ENCODING 18579 +BBX 15 15 0 -1 +BITMAP +0040 +2020 +13FE +1202 +0404 +01FC +F020 +1020 +17FE +1020 +1020 +1020 +10A0 +2840 +47FE +ENDCHAR +STARTCHAR uni4894 +ENCODING 18580 +BBX 15 15 0 -1 +BITMAP +0040 +20A0 +1110 +1208 +0DF6 +0000 +F000 +13F8 +1208 +1208 +1208 +13F8 +1000 +2800 +47FE +ENDCHAR +STARTCHAR uni4895 +ENCODING 18581 +BBX 15 16 0 -2 +BITMAP +0028 +2024 +1024 +1020 +03FE +0220 +F224 +1224 +13A8 +1228 +1212 +121A +1426 +1442 +2880 +47FE +ENDCHAR +STARTCHAR uni4896 +ENCODING 18582 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +13F8 +1048 +07FE +0048 +F3F8 +1040 +13F8 +1040 +1040 +17FC +1040 +2840 +47FE +ENDCHAR +STARTCHAR uni4897 +ENCODING 18583 +BBX 15 15 0 -1 +BITMAP +0120 +4120 +2120 +2FFC +0924 +0924 +E924 +2FFC +2924 +2924 +2924 +2FFC +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uni4898 +ENCODING 18584 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +13FE +1202 +0414 +0010 +F3FE +1010 +1110 +1090 +1090 +1010 +1010 +1050 +2820 +47FE +ENDCHAR +STARTCHAR uni4899 +ENCODING 18585 +BBX 15 15 0 -2 +BITMAP +23FC +1204 +1204 +03FC +0204 +F204 +13FC +1204 +1204 +13FC +1000 +1108 +1204 +2800 +47FE +ENDCHAR +STARTCHAR uni489A +ENCODING 18586 +BBX 15 15 0 -2 +BITMAP +4FFE +2040 +27FC +0444 +07FC +E444 +27FC +2040 +2740 +20C0 +20B0 +2108 +2204 +5000 +8FFE +ENDCHAR +STARTCHAR uni489B +ENCODING 18587 +BBX 15 14 0 -1 +BITMAP +23FC +1204 +1294 +030C +0204 +F2F4 +1294 +1294 +12F4 +1204 +1214 +1208 +2800 +47FE +ENDCHAR +STARTCHAR uni489C +ENCODING 18588 +BBX 15 15 0 -1 +BITMAP +03F8 +2008 +11F8 +1008 +03F8 +0000 +F7FC +1444 +13F8 +1248 +1248 +1268 +1250 +2840 +47FE +ENDCHAR +STARTCHAR uni489D +ENCODING 18589 +BBX 15 14 0 -1 +BITMAP +27FE +1090 +1090 +039C +0204 +F204 +139C +1090 +1090 +1090 +17FE +1000 +2800 +47FE +ENDCHAR +STARTCHAR uni489E +ENCODING 18590 +BBX 15 15 0 -1 +BITMAP +0210 +4210 +2210 +2F7C +0210 +0630 +E738 +2AD4 +2A52 +3292 +2310 +2210 +2210 +5000 +8FFE +ENDCHAR +STARTCHAR uni489F +ENCODING 18591 +BBX 15 15 0 -1 +BITMAP +0420 +4220 +2020 +2FBE +0448 +0488 +E728 +2528 +2510 +2910 +2928 +3544 +2284 +5000 +8FFE +ENDCHAR +STARTCHAR uni48A0 +ENCODING 18592 +BBX 15 15 0 -1 +BITMAP +0040 +4244 +2244 +24A8 +0110 +0208 +EC06 +2110 +2110 +2FFE +2110 +2210 +2210 +5410 +8FFE +ENDCHAR +STARTCHAR uni48A1 +ENCODING 18593 +BBX 15 15 0 -1 +BITMAP +0290 +4290 +2FFC +2290 +02F0 +0200 +E3F8 +2040 +2040 +27FC +2150 +2248 +2444 +5040 +8FFE +ENDCHAR +STARTCHAR uni48A2 +ENCODING 18594 +BBX 15 16 0 -2 +BITMAP +0040 +40A0 +2110 +2288 +0C46 +03F8 +E208 +23F8 +2208 +23F8 +2200 +25FC +2504 +29FC +5000 +8FFE +ENDCHAR +STARTCHAR uni48A3 +ENCODING 18595 +BBX 15 16 0 -2 +BITMAP +0020 +20FE +134C +1070 +07A0 +01FE +F000 +11FC +1000 +11FC +1000 +11FC +1104 +11FC +2800 +47FE +ENDCHAR +STARTCHAR uni48A4 +ENCODING 18596 +BBX 15 15 0 -1 +BITMAP +0390 +4E18 +2214 +2210 +0F7E +0610 +E738 +2AB4 +2A54 +3250 +2290 +2210 +2210 +5000 +8FFE +ENDCHAR +STARTCHAR uni48A5 +ENCODING 18597 +BBX 15 15 0 -2 +BITMAP +27FC +1040 +1278 +0240 +0FFE +F000 +13F8 +1208 +13F8 +1208 +13F8 +1208 +13F8 +2800 +47FE +ENDCHAR +STARTCHAR uni48A6 +ENCODING 18598 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +1040 +0090 +05E4 +F248 +14A4 +11F0 +1010 +1040 +17FC +1040 +1040 +2840 +47FE +ENDCHAR +STARTCHAR uni48A7 +ENCODING 18599 +BBX 15 15 0 -2 +BITMAP +27BC +1084 +14A4 +0294 +04A4 +F050 +1188 +1626 +10C0 +1310 +1064 +1388 +1030 +28C0 +47FE +ENDCHAR +STARTCHAR uni48A8 +ENCODING 18600 +BBX 15 16 0 -2 +BITMAP +0224 +4224 +2424 +2924 +0154 +024A +E692 +2A10 +2250 +225E +2250 +2250 +22B0 +229E +5300 +8FFE +ENDCHAR +STARTCHAR uni48A9 +ENCODING 18601 +BBX 15 15 0 -1 +BITMAP +0010 +5F90 +2210 +221E +0FA4 +04C4 +E494 +3FD4 +2008 +2F88 +2894 +28A2 +2FC2 +5000 +8FFE +ENDCHAR +STARTCHAR uni48AA +ENCODING 18602 +BBX 15 16 0 -2 +BITMAP +0078 +4780 +2080 +2FFC +0120 +0210 +E5E8 +2926 +27F8 +2408 +25E8 +2528 +25E8 +2418 +5000 +8FFE +ENDCHAR +STARTCHAR uni48AB +ENCODING 18603 +BBX 15 16 0 -2 +BITMAP +0720 +25FE +1540 +157C +0690 +057E +F500 +157C +1544 +157C +1644 +147C +1444 +144C +2800 +47FE +ENDCHAR +STARTCHAR uni48AC +ENCODING 18604 +BBX 15 16 0 -2 +BITMAP +003C +47C0 +2044 +2224 +0108 +07FE +E402 +2A08 +2208 +23BE +2488 +2AA8 +213E +2208 +5408 +8FFE +ENDCHAR +STARTCHAR uni48AD +ENCODING 18605 +BBX 15 16 0 -2 +BITMAP +0208 +4110 +27FC +2040 +03F8 +0040 +E7FC +2000 +2440 +227C +2084 +2228 +2C20 +2450 +5488 +8FFE +ENDCHAR +STARTCHAR uni48AE +ENCODING 18606 +BBX 15 15 0 -2 +BITMAP +47FC +2040 +2FFE +0842 +0358 +E040 +2358 +2000 +27FC +2444 +27FC +2444 +27FC +5000 +8FFE +ENDCHAR +STARTCHAR uni48AF +ENCODING 18607 +BBX 15 16 0 -2 +BITMAP +0244 +4448 +20B0 +230C +0C42 +0244 +E4A8 +2318 +3C06 +2408 +27BE +2888 +3528 +223E +5408 +8FFE +ENDCHAR +STARTCHAR uni48B0 +ENCODING 18608 +BBX 15 16 0 -2 +BITMAP +07BC +2084 +14A4 +1294 +04A4 +0120 +F210 +17FC +1A20 +13FC +1220 +13FC +1220 +13FE +2A00 +47FE +ENDCHAR +STARTCHAR uni48B1 +ENCODING 18609 +BBX 15 16 0 -2 +BITMAP +0040 +27FC +1040 +13F8 +0000 +07FC +F4A4 +17FC +1208 +13F8 +1208 +13F8 +1208 +13F8 +2910 +47FE +ENDCHAR +STARTCHAR uni48B2 +ENCODING 18610 +BBX 15 16 0 -2 +BITMAP +07BC +24A4 +17BC +14A4 +07BC +0140 +F3FC +1240 +17FC +1A40 +13FE +1290 +1060 +1398 +2800 +47FE +ENDCHAR +STARTCHAR uni48B3 +ENCODING 18611 +BBX 14 15 0 -2 +BITMAP +3C7C +2444 +2448 +2448 +2450 +2448 +2448 +2444 +2444 +2444 +2568 +4650 +4440 +8040 +0040 +ENDCHAR +STARTCHAR uni48B4 +ENCODING 18612 +BBX 14 15 0 -2 +BITMAP +077C +7844 +0848 +0848 +0850 +0848 +FFC8 +0844 +0844 +1044 +1068 +2050 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni48B5 +ENCODING 18613 +BBX 15 14 1 -1 +BITMAP +3E7E +0042 +0042 +0044 +0044 +FF48 +1044 +1044 +1042 +1442 +2242 +224C +3D40 +E140 +ENDCHAR +STARTCHAR uni48B6 +ENCODING 18614 +BBX 14 16 0 -2 +BITMAP +0800 +087C +0844 +0848 +7F48 +0850 +1848 +1C48 +2A44 +2944 +4844 +8868 +0850 +0840 +0840 +0840 +ENDCHAR +STARTCHAR uni48B7 +ENCODING 18615 +BBX 15 15 0 -2 +BITMAP +3F3E +2122 +2124 +2924 +2528 +2524 +2124 +FFE2 +2122 +2122 +2134 +2128 +4120 +4520 +8220 +ENDCHAR +STARTCHAR uni48B8 +ENCODING 18616 +BBX 15 15 0 -2 +BITMAP +3F3E +2122 +2124 +2124 +3F28 +2124 +2124 +3F22 +2122 +2122 +2134 +27A8 +F820 +4020 +0020 +ENDCHAR +STARTCHAR uni48B9 +ENCODING 18617 +BBX 14 15 1 -2 +BITMAP +FF7C +8044 +8048 +8048 +FE50 +8248 +8248 +8244 +8244 +FE44 +8068 +8050 +8040 +FF40 +0040 +ENDCHAR +STARTCHAR uni48BA +ENCODING 18618 +BBX 13 16 1 -2 +BITMAP +1000 +10F8 +9288 +9290 +9290 +92A0 +FE90 +1090 +1088 +9288 +9288 +92D0 +9EA0 +F280 +0080 +0080 +ENDCHAR +STARTCHAR uni48BB +ENCODING 18619 +BBX 14 15 1 -2 +BITMAP +FF7C +9044 +9048 +9048 +FE50 +8248 +8248 +8244 +8244 +FE44 +9068 +9050 +9040 +FF40 +0040 +ENDCHAR +STARTCHAR uni48BC +ENCODING 18620 +BBX 15 16 0 -2 +BITMAP +1200 +123E +1222 +1224 +7F24 +1228 +1224 +1224 +1222 +FFA2 +0022 +1234 +1128 +2120 +20A0 +40A0 +ENDCHAR +STARTCHAR uni48BD +ENCODING 18621 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +7FFC +0440 +FFFE +1010 +2FE8 +C826 +0FE0 +0000 +1FF0 +1110 +1FF0 +1004 +1004 +0FFC +ENDCHAR +STARTCHAR uni48BE +ENCODING 18622 +BBX 14 16 0 -2 +BITMAP +0800 +287C +2844 +3E48 +4848 +0850 +0848 +7F48 +1444 +1444 +1444 +1468 +2550 +2640 +4440 +8040 +ENDCHAR +STARTCHAR uni48BF +ENCODING 18623 +BBX 15 16 0 -2 +BITMAP +1000 +083E +0822 +FFA4 +80A4 +1128 +1024 +FFA4 +2222 +2222 +4222 +3434 +0828 +1420 +2220 +C120 +ENDCHAR +STARTCHAR uni48C0 +ENCODING 18624 +BBX 14 16 0 -2 +BITMAP +1000 +107C +3F44 +2148 +4248 +BFD0 +2048 +2F48 +2944 +2944 +2D44 +2A68 +2850 +4A40 +4C40 +8840 +ENDCHAR +STARTCHAR uni48C1 +ENCODING 18625 +BBX 15 15 0 -2 +BITMAP +F7BE +10A2 +10A4 +94A4 +52A8 +52A4 +10A4 +31A2 +52A2 +94A2 +10B4 +10A8 +10A0 +52A0 +2120 +ENDCHAR +STARTCHAR uni48C2 +ENCODING 18626 +BBX 14 16 0 -2 +BITMAP +0800 +087C +0844 +7F48 +0848 +3E50 +0848 +7F48 +1844 +1C44 +2A44 +2A68 +4850 +8840 +0840 +0840 +ENDCHAR +STARTCHAR uni48C3 +ENCODING 18627 +BBX 14 16 0 -2 +BITMAP +2000 +207C +3F44 +4848 +8848 +0850 +7F48 +0848 +0844 +2E44 +2844 +2868 +2F50 +F040 +4040 +0040 +ENDCHAR +STARTCHAR uni48C4 +ENCODING 18628 +BBX 14 16 0 -2 +BITMAP +0800 +087C +1444 +2248 +4148 +BE50 +0848 +0848 +7F44 +0844 +2A44 +2968 +4950 +8840 +2840 +1040 +ENDCHAR +STARTCHAR uni48C5 +ENCODING 18629 +BBX 15 15 0 -2 +BITMAP +3FBE +2022 +2024 +2F24 +2028 +2024 +3FA4 +2822 +28A2 +2D22 +2A34 +2928 +48A0 +4C20 +8820 +ENDCHAR +STARTCHAR uni48C6 +ENCODING 18630 +BBX 15 15 0 -2 +BITMAP +7FBE +0022 +24A4 +4924 +9228 +4924 +24A4 +0022 +7FA2 +0822 +0834 +0828 +0BA0 +FC20 +0020 +ENDCHAR +STARTCHAR uni48C7 +ENCODING 18631 +BBX 14 16 0 -2 +BITMAP +0800 +0A7C +0944 +0848 +7F48 +0850 +0848 +4948 +2A44 +0844 +1C44 +2A68 +C950 +0840 +2840 +1040 +ENDCHAR +STARTCHAR uni48C8 +ENCODING 18632 +BBX 14 15 1 -2 +BITMAP +F9F0 +8910 +8910 +F9F0 +0000 +FBF8 +AA48 +AA48 +AA48 +FBF8 +8200 +8200 +9A04 +E204 +81FC +ENDCHAR +STARTCHAR uni48C9 +ENCODING 18633 +BBX 14 16 1 -2 +BITMAP +4080 +2490 +8888 +4028 +10C0 +E700 +4000 +3FE0 +2020 +3FE0 +0000 +7FF0 +4210 +7FF0 +4004 +3FFC +ENDCHAR +STARTCHAR uni48CA +ENCODING 18634 +BBX 14 16 1 -2 +BITMAP +1000 +927C +5244 +5448 +1048 +FE50 +8248 +8248 +BA44 +AA44 +AA44 +AA68 +BA50 +8240 +8A40 +8440 +ENDCHAR +STARTCHAR uni48CB +ENCODING 18635 +BBX 15 16 0 -2 +BITMAP +0100 +07BE +7822 +08A4 +44A4 +2528 +2024 +0424 +7FA2 +0C22 +1622 +1534 +24A8 +4420 +8420 +0420 +ENDCHAR +STARTCHAR uni48CC +ENCODING 18636 +BBX 15 16 0 -2 +BITMAP +0800 +041E +7FD2 +4012 +4394 +5E14 +5218 +5214 +5FD2 +5212 +5212 +521A +5554 +5950 +94D0 +0250 +ENDCHAR +STARTCHAR uni48CD +ENCODING 18637 +BBX 15 16 0 -2 +BITMAP +0800 +083E +FFA2 +1424 +2224 +4928 +88A4 +7F24 +4922 +7F22 +4922 +7F34 +0828 +0A20 +0C20 +0820 +ENDCHAR +STARTCHAR uni48CE +ENCODING 18638 +BBX 15 16 0 -2 +BITMAP +2480 +24BE +4922 +9224 +4924 +24A8 +24A4 +0024 +7FA2 +48A2 +48A2 +7FB4 +48A8 +48A0 +7FA0 +40A0 +ENDCHAR +STARTCHAR uni48CF +ENCODING 18639 +BBX 15 16 0 -2 +BITMAP +1500 +153E +1522 +2524 +2FA4 +6528 +6524 +A524 +2522 +2522 +3FE2 +2034 +2528 +24A0 +28A0 +3020 +ENDCHAR +STARTCHAR uni48D0 +ENCODING 18640 +BBX 14 16 0 -2 +BITMAP +2200 +227C +7F44 +2248 +2A48 +0850 +3E48 +2A48 +2A44 +2A44 +FF44 +0868 +1450 +1240 +2240 +4040 +ENDCHAR +STARTCHAR uni48D1 +ENCODING 18641 +BBX 15 15 0 -2 +BITMAP +3FBE +2022 +2FA4 +2AA4 +2AA8 +2FA4 +2AA4 +2AA2 +2FA2 +2222 +2FB4 +4228 +43A0 +9C20 +0820 +ENDCHAR +STARTCHAR uni48D2 +ENCODING 18642 +BBX 15 16 0 -2 +BITMAP +0800 +083E +7F22 +4924 +7F24 +0828 +FFA4 +0024 +7F22 +4122 +4922 +4934 +4928 +1420 +2220 +C120 +ENDCHAR +STARTCHAR uni48D3 +ENCODING 18643 +BBX 15 15 0 -2 +BITMAP +FFBE +0022 +7F24 +4124 +4128 +7F24 +0024 +FFA2 +A2A2 +94A2 +FFB4 +88A8 +88A0 +8AA0 +8120 +ENDCHAR +STARTCHAR uni48D4 +ENCODING 18644 +BBX 13 16 1 -2 +BITMAP +1000 +92F8 +5488 +1090 +FE90 +82A0 +8290 +FE90 +8288 +FE88 +8288 +82D0 +FEA0 +0080 +4480 +8280 +ENDCHAR +STARTCHAR uni48D5 +ENCODING 18645 +BBX 15 15 0 -2 +BITMAP +7FBE +4822 +7F24 +4824 +7F28 +4824 +4824 +7FA2 +00A2 +AAA2 +AAB4 +AAA8 +80A0 +0520 +0220 +ENDCHAR +STARTCHAR uni48D6 +ENCODING 18646 +BBX 15 15 0 -2 +BITMAP +7E78 +4848 +7E48 +4878 +7E00 +48FC +48A4 +7EA4 +02A4 +AAFC +AA80 +AA80 +8282 +1482 +087E +ENDCHAR +STARTCHAR uni48D7 +ENCODING 18647 +BBX 15 16 0 -2 +BITMAP +0800 +103E +7F22 +4124 +7F24 +4128 +7F24 +1024 +FFA2 +2222 +4922 +88B4 +7F68 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uni48D8 +ENCODING 18648 +BBX 15 16 0 -2 +BITMAP +0800 +493E +2A22 +FFA4 +80A4 +3E28 +2224 +2224 +3E22 +0822 +7F22 +0834 +0828 +0F20 +F020 +4020 +ENDCHAR +STARTCHAR uni48D9 +ENCODING 18649 +BBX 15 16 0 -2 +BITMAP +0400 +445E +4452 +7FD2 +0014 +7BD4 +4A58 +4A54 +7BD2 +4A52 +4A52 +7BDA +4A54 +4A50 +AB50 +1490 +ENDCHAR +STARTCHAR uni48DA +ENCODING 18650 +BBX 15 16 0 -2 +BITMAP +0800 +7F3E +4922 +FFA4 +4924 +7F28 +0824 +7F24 +4922 +7F22 +1022 +FF34 +2128 +7220 +0C20 +F320 +ENDCHAR +STARTCHAR uni48DB +ENCODING 18651 +BBX 15 16 0 -2 +BITMAP +0800 +083E +FFA2 +1C24 +2B24 +C8A8 +1424 +2224 +4922 +88A2 +4922 +2A34 +4928 +88A0 +2820 +1020 +ENDCHAR +STARTCHAR uni48DC +ENCODING 18652 +BBX 15 16 0 -2 +BITMAP +0800 +0F3E +0822 +7FA4 +48A4 +4E28 +7924 +4724 +4022 +5F22 +5122 +5F34 +5128 +5F20 +51A0 +BE20 +ENDCHAR +STARTCHAR uni48DD +ENCODING 18653 +BBX 15 15 0 -2 +BITMAP +3FDE +2052 +2052 +3FD4 +2234 +2FD8 +2294 +3FF2 +2212 +2FD2 +385A +2FD4 +4850 +4FD0 +8850 +ENDCHAR +STARTCHAR uni48DE +ENCODING 18654 +BBX 15 15 0 -2 +BITMAP +F7BE +94A2 +94A4 +F7A4 +2228 +1424 +FFA4 +0822 +4922 +4922 +7F34 +0928 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni48DF +ENCODING 18655 +BBX 15 15 0 -2 +BITMAP +F7BE +2122 +A524 +F7A4 +6328 +B5A4 +2124 +7FA2 +40A2 +40A2 +7FB4 +40A8 +40A0 +7FA0 +40A0 +ENDCHAR +STARTCHAR uni48E0 +ENCODING 18656 +BBX 15 16 0 -2 +BITMAP +1100 +111E +7BD2 +1112 +FFF4 +1114 +2A98 +4454 +3FB2 +2092 +2092 +3F9A +2094 +2090 +3F90 +2090 +ENDCHAR +STARTCHAR uni48E1 +ENCODING 18657 +BBX 15 16 0 -2 +BITMAP +4100 +223E +FFA2 +0824 +7F24 +0828 +FFA4 +1524 +64A2 +2422 +FFA2 +2434 +3528 +E2A0 +25A0 +68A0 +ENDCHAR +STARTCHAR uni48E2 +ENCODING 18658 +BBX 15 16 0 -2 +BITMAP +2280 +229E +27D2 +FA92 +2294 +7294 +27F8 +F814 +27D2 +7452 +6C52 +A7DA +2454 +2450 +27D0 +2450 +ENDCHAR +STARTCHAR uni48E3 +ENCODING 18659 +BBX 15 16 0 -2 +BITMAP +2480 +151E +7FD2 +4052 +1F14 +1114 +7FD8 +5554 +4E52 +7FD2 +0412 +7FDA +0414 +FFF0 +2A50 +4530 +ENDCHAR +STARTCHAR uni48E4 +ENCODING 18660 +BBX 15 16 0 -2 +BITMAP +7BC0 +4A5E +7BD2 +4A52 +7BD4 +1414 +3FD8 +6414 +BF92 +2412 +3FD2 +001A +3F94 +1090 +0F10 +F090 +ENDCHAR +STARTCHAR uni48E5 +ENCODING 18661 +BBX 15 16 0 -2 +BITMAP +0020 +FFA0 +1420 +1422 +7F22 +5524 +5528 +5530 +5720 +6120 +4120 +7F22 +4122 +4122 +7F1E +4100 +ENDCHAR +STARTCHAR uni48E6 +ENCODING 18662 +BBX 14 16 0 -2 +BITMAP +0020 +FFA0 +1420 +1420 +7F7C +5524 +5524 +5524 +5724 +6124 +4124 +7F24 +4144 +4144 +7F94 +4108 +ENDCHAR +STARTCHAR uni48E7 +ENCODING 18663 +BBX 15 16 0 -2 +BITMAP +0020 +FFA8 +1424 +1424 +7F20 +553E +55E0 +5520 +5720 +6120 +4120 +7F20 +4114 +4114 +7F0C +4104 +ENDCHAR +STARTCHAR uni48E8 +ENCODING 18664 +BBX 15 16 0 -2 +BITMAP +0010 +FF90 +1410 +141C +7F70 +5510 +5510 +5510 +571E +61F0 +4110 +7F12 +4112 +4112 +7F0E +4100 +ENDCHAR +STARTCHAR uni48E9 +ENCODING 18665 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +2820 +29FC +FE20 +AAA8 +AAA8 +AAA8 +AEA8 +C2A8 +82F8 +FE22 +8222 +8222 +FE1E +8200 +ENDCHAR +STARTCHAR uni48EA +ENCODING 18666 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +2810 +28FE +FE10 +AA10 +AAFE +AA92 +AE92 +C292 +8292 +FE9A +8294 +8210 +FE10 +8210 +ENDCHAR +STARTCHAR uni48EB +ENCODING 18667 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +2810 +28FE +FE10 +AA10 +AAFC +AA44 +AE44 +C244 +8228 +FE28 +8210 +8228 +FE44 +8282 +ENDCHAR +STARTCHAR uni48EC +ENCODING 18668 +BBX 15 16 0 -2 +BITMAP +0048 +FE44 +2844 +2840 +FE5E +ABE0 +AA40 +AA44 +AE44 +C248 +8230 +FE22 +8252 +828A +FF06 +8202 +ENDCHAR +STARTCHAR uni48ED +ENCODING 18669 +BBX 15 16 0 -2 +BITMAP +0010 +FE14 +2812 +2812 +FE10 +AAFE +AA10 +AA10 +AE10 +C228 +8228 +FE28 +8228 +8244 +FE44 +8282 +ENDCHAR +STARTCHAR uni48EE +ENCODING 18670 +BBX 15 16 0 -2 +BITMAP +0028 +FE24 +2824 +2820 +FEFE +AA20 +AA20 +AA3C +AE34 +C254 +8254 +FE54 +8288 +8288 +FF14 +8222 +ENDCHAR +STARTCHAR uni48EF +ENCODING 18671 +BBX 15 15 0 -2 +BITMAP +FFBC +1424 +1424 +7F24 +553C +5524 +5524 +5724 +613C +4124 +7F24 +4124 +4124 +7F7E +4100 +ENDCHAR +STARTCHAR uni48F0 +ENCODING 18672 +BBX 15 15 0 -2 +BITMAP +FFBE +1420 +1420 +7F20 +553E +5522 +5522 +5722 +6122 +413E +7F20 +4120 +4120 +7F3E +4100 +ENDCHAR +STARTCHAR uni48F1 +ENCODING 18673 +BBX 14 16 0 -2 +BITMAP +0020 +FFA0 +1420 +147C +7F44 +5584 +5574 +5554 +5754 +6154 +4174 +7F54 +4104 +4104 +7F28 +4110 +ENDCHAR +STARTCHAR uni48F2 +ENCODING 18674 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +2840 +2848 +FE84 +AAFC +AA04 +AA48 +AE48 +C2FE +8248 +FE48 +8248 +8288 +FE88 +8308 +ENDCHAR +STARTCHAR uni48F3 +ENCODING 18675 +BBX 14 15 0 -2 +BITMAP +FEFC +2804 +2804 +FEFC +AA04 +AA04 +AAF4 +AE94 +C294 +8294 +FEF4 +8204 +8204 +FE14 +8208 +ENDCHAR +STARTCHAR uni48F4 +ENCODING 18676 +BBX 15 15 0 -2 +BITMAP +FE44 +2828 +2892 +FEAA +AAC6 +AA82 +AAFE +AE28 +C228 +8228 +FE28 +8248 +824A +FE8A +8306 +ENDCHAR +STARTCHAR uni48F5 +ENCODING 18677 +BBX 15 15 0 -2 +BITMAP +FEFE +2848 +2848 +FE78 +AA48 +AA48 +AA78 +AE48 +C248 +824E +FEF8 +8208 +8208 +FE08 +8208 +ENDCHAR +STARTCHAR uni48F6 +ENCODING 18678 +BBX 15 16 0 -2 +BITMAP +0008 +FE1C +2870 +2810 +FE10 +AAFE +AA10 +AA10 +AE10 +C27C +8244 +FE44 +8244 +8244 +FE7C +8244 +ENDCHAR +STARTCHAR uni48F7 +ENCODING 18679 +BBX 15 16 0 -2 +BITMAP +0010 +FE50 +2850 +287C +FE90 +AA10 +AA10 +AAFE +AE10 +C238 +8238 +FE54 +8254 +8292 +FE10 +8210 +ENDCHAR +STARTCHAR uni48F8 +ENCODING 18680 +BBX 15 16 0 -2 +BITMAP +0838 +13C0 +3040 +57FC +9040 +1040 +13F8 +1000 +FFFE +0440 +3FF8 +2848 +3038 +27C8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni48F9 +ENCODING 18681 +BBX 14 16 0 -2 +BITMAP +0050 +FE58 +2854 +2894 +FE90 +AA9C +ABF0 +AA94 +AE94 +C294 +8298 +FE98 +8294 +8294 +FEAC +82C4 +ENDCHAR +STARTCHAR uni48FA +ENCODING 18682 +BBX 15 15 0 -2 +BITMAP +FE7C +2844 +2844 +FE7C +AA00 +AAFE +AA82 +AE82 +C2FE +8282 +FE82 +82FE +8282 +FE8A +8284 +ENDCHAR +STARTCHAR uni48FB +ENCODING 18683 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +2828 +2844 +FE92 +AA08 +AA7C +AA04 +AE08 +C210 +827C +FE44 +8244 +8244 +FE7C +8244 +ENDCHAR +STARTCHAR uni48FC +ENCODING 18684 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +28FE +2800 +FE00 +AA7C +AA44 +AA44 +AE7C +C210 +8254 +FE52 +8292 +8210 +FE50 +8220 +ENDCHAR +STARTCHAR uni48FD +ENCODING 18685 +BBX 15 16 0 -2 +BITMAP +2000 +3E7C +4844 +0844 +FF44 +1444 +227C +4000 +FFFE +0440 +3FF8 +2848 +3038 +27C8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni48FE +ENCODING 18686 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +28FE +2882 +FF04 +AA7C +AA44 +AA44 +AE7C +C244 +8244 +FE7C +8244 +8244 +FFFE +8200 +ENDCHAR +STARTCHAR uni48FF +ENCODING 18687 +BBX 15 15 0 -2 +BITMAP +FE7C +2810 +2810 +FEFE +AA10 +AA10 +AA50 +AE20 +C2FE +82AA +FEAA +82AA +82AA +FFFE +8200 +ENDCHAR +STARTCHAR uni4900 +ENCODING 18688 +BBX 15 16 0 -2 +BITMAP +0044 +FE44 +29FE +2844 +FE54 +AA10 +ABFE +AA20 +AE40 +C27E +82C2 +FF42 +8242 +8242 +FE7E +8242 +ENDCHAR +STARTCHAR uni4901 +ENCODING 18689 +BBX 15 16 0 -2 +BITMAP +0048 +FE48 +29FC +2848 +FE78 +AA48 +AA78 +AA48 +AE48 +C3FE +8280 +FEA8 +82C4 +8280 +FEFE +8200 +ENDCHAR +STARTCHAR uni4902 +ENCODING 18690 +BBX 15 16 0 -2 +BITMAP +0088 +FE88 +2BFE +2888 +FE88 +AAF8 +AA88 +AA88 +AEF8 +C220 +83FE +FE70 +82A8 +8324 +FE22 +8220 +ENDCHAR +STARTCHAR uni4903 +ENCODING 18691 +BBX 15 16 0 -2 +BITMAP +0040 +FE20 +29FE +2800 +FE84 +AA48 +ABFE +AA00 +AEFC +C284 +8284 +FEFC +8284 +8284 +FEFC +8284 +ENDCHAR +STARTCHAR uni4904 +ENCODING 18692 +BBX 15 15 0 -2 +BITMAP +FEFE +2810 +2820 +FEFE +AAAA +AAAA +AABA +AEAA +C2AA +82BA +FEAA +82AA +82AA +FEFE +8282 +ENDCHAR +STARTCHAR uni4905 +ENCODING 18693 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +2828 +2844 +FE82 +AA7C +AA00 +AAE2 +AEAA +C2AA +82EA +FEAA +82AA +82E2 +FEAA +82A4 +ENDCHAR +STARTCHAR uni4906 +ENCODING 18694 +BBX 15 16 0 -2 +BITMAP +0010 +FED4 +2848 +294A +FE84 +AA84 +AB02 +AAF8 +AE20 +C220 +83FC +FE20 +8250 +8248 +FE84 +8304 +ENDCHAR +STARTCHAR uni4907 +ENCODING 18695 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +28FE +2882 +FE28 +AA44 +AA92 +AA28 +AE44 +C282 +827C +FE04 +8228 +8210 +FE28 +82C4 +ENDCHAR +STARTCHAR uni4908 +ENCODING 18696 +BBX 15 16 0 -2 +BITMAP +0044 +FE82 +297C +2820 +FE40 +AA7C +AA04 +AA28 +AE10 +C2FE +82AA +FEAA +82AA +82AA +FFFE +8200 +ENDCHAR +STARTCHAR uni4909 +ENCODING 18697 +BBX 15 16 0 -2 +BITMAP +0010 +FE0C +2824 +28AA +FEB0 +AB24 +AA64 +AB9C +AE00 +C2FE +82AA +FEAA +82AA +82AA +FFFE +8200 +ENDCHAR +STARTCHAR uni490A +ENCODING 18698 +BBX 15 16 0 -2 +BITMAP +0044 +FE44 +28FE +2844 +FE00 +AAFE +AA44 +AA44 +AE7C +C244 +827C +FE44 +824E +82F4 +FE04 +8204 +ENDCHAR +STARTCHAR uni490B +ENCODING 18699 +BBX 15 16 0 -2 +BITMAP +4408 +240C +280A +FE08 +29FE +2808 +FE08 +AAEA +AAAA +AEAA +C2EC +FE0C +822A +82CA +FE16 +8222 +ENDCHAR +STARTCHAR uni490C +ENCODING 18700 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +2850 +2848 +FEA4 +ABFE +AA84 +AAFC +AE84 +C2FC +8280 +FEFC +8344 +8344 +FE7C +8244 +ENDCHAR +STARTCHAR uni490D +ENCODING 18701 +BBX 15 16 0 -2 +BITMAP +0088 +F888 +23FE +2088 +F888 +A8F8 +A820 +ABFE +DA22 +8B32 +8AAA +FB76 +8A22 +8A22 +FA2A +8A24 +ENDCHAR +STARTCHAR uni490E +ENCODING 18702 +BBX 15 16 0 -2 +BITMAP +00FC +FE28 +2810 +29FE +FE52 +AA94 +AB50 +AA20 +AEFE +C2AA +82C6 +FEBA +82AA +82BA +FE82 +8286 +ENDCHAR +STARTCHAR uni490F +ENCODING 18703 +BBX 15 16 0 -2 +BITMAP +0028 +FEEE +2828 +28EE +FE28 +AAEE +AA28 +AA06 +AEF8 +C210 +82FE +FE10 +82FE +8210 +FE50 +8220 +ENDCHAR +STARTCHAR uni4910 +ENCODING 18704 +BBX 15 15 0 -2 +BITMAP +FBDE +2088 +22A8 +FBFE +A988 +AADA +ACA6 +D9F8 +8908 +8908 +F9F8 +8908 +8908 +F9F8 +8908 +ENDCHAR +STARTCHAR uni4911 +ENCODING 18705 +BBX 15 16 0 -2 +BITMAP +0028 +FE28 +287C +2828 +FE28 +AAFE +AA10 +AA7C +AE54 +C27C +8254 +FE7C +8200 +8228 +FE44 +8282 +ENDCHAR +STARTCHAR uni4912 +ENCODING 18706 +BBX 15 16 0 -2 +BITMAP +0124 +F924 +22AA +23AE +F924 +AAAA +ABAE +A924 +DBFE +8910 +8914 +F914 +8A8A +8A4A +FA16 +8C22 +ENDCHAR +STARTCHAR uni4913 +ENCODING 18707 +BBX 15 16 0 -2 +BITMAP +0048 +FE48 +29FE +2848 +FEFE +AA82 +AB7C +AA00 +AEFE +C220 +82D2 +FE2C +82D8 +822C +FECA +8230 +ENDCHAR +STARTCHAR uni4914 +ENCODING 18708 +BBX 15 16 0 -2 +BITMAP +4204 +3FD8 +8A90 +4F9E +2A94 +5FD4 +8224 +FFFE +0480 +3FF8 +2488 +2878 +3008 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni4915 +ENCODING 18709 +BBX 15 16 0 -2 +BITMAP +0124 +F974 +2258 +22DA +FBFE +A954 +AADA +ABFE +D8A2 +8820 +8BFE +F870 +88A8 +8924 +FA22 +8820 +ENDCHAR +STARTCHAR uni4916 +ENCODING 18710 +BBX 15 16 0 -2 +BITMAP +01FC +F904 +21FC +2104 +F9FC +A888 +A9FC +A888 +DBFE +8888 +8924 +FAAA +8870 +88A8 +F924 +8860 +ENDCHAR +STARTCHAR uni4917 +ENCODING 18711 +BBX 15 16 0 -2 +BITMAP +0820 +7F7C +14C4 +7F38 +22D6 +3E38 +2250 +7F7C +0810 +FFFE +0440 +3FF8 +2848 +37B8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni4918 +ENCODING 18712 +BBX 15 16 0 -2 +BITMAP +0148 +F94C +22AA +2008 +FBFE +A948 +AB68 +A94A +DB6A +894A +8B6C +F94C +896A +8B8A +F816 +8822 +ENDCHAR +STARTCHAR uni4919 +ENCODING 18713 +BBX 15 16 0 -2 +BITMAP +00F8 +F908 +21F0 +2010 +FBFE +A8C4 +AB28 +A8D4 +DB32 +88D0 +8A28 +FFBE +8AAA +8FBE +FA8A +8FBE +ENDCHAR +STARTCHAR uni491A +ENCODING 18714 +BBX 15 15 0 -2 +BITMAP +3DFC +2524 +2524 +25FC +3D24 +2524 +25FC +2420 +3C20 +25FC +2420 +2420 +4420 +57FE +8800 +ENDCHAR +STARTCHAR uni491B +ENCODING 18715 +BBX 14 16 0 -2 +BITMAP +1004 +1004 +2884 +2484 +4284 +BC84 +1084 +1084 +FE8C +1094 +94E4 +5884 +5004 +1E04 +F004 +4004 +ENDCHAR +STARTCHAR uni491C +ENCODING 18716 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +243C +41E0 +B820 +1020 +1020 +FC3E +13E0 +9420 +5822 +5022 +1C22 +E01E +4000 +ENDCHAR +STARTCHAR uni491D +ENCODING 18717 +BBX 15 16 0 -2 +BITMAP +1000 +1040 +299E +2512 +4112 +B912 +1112 +1112 +FD12 +1112 +955A +5994 +5110 +1C10 +E010 +4010 +ENDCHAR +STARTCHAR uni491E +ENCODING 18718 +BBX 15 16 0 -2 +BITMAP +1040 +1050 +2848 +2448 +4040 +B9FE +1050 +1050 +FC50 +1050 +9490 +5890 +5092 +1D12 +E10E +4200 +ENDCHAR +STARTCHAR uni491F +ENCODING 18719 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +29FE +2502 +4302 +BC00 +1078 +1048 +FE48 +1048 +9448 +584A +504A +1E8A +F086 +4100 +ENDCHAR +STARTCHAR uni4920 +ENCODING 18720 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +2810 +2490 +4290 +BC90 +109E +1090 +FE90 +1090 +9490 +5890 +5090 +1E90 +F1FE +4000 +ENDCHAR +STARTCHAR uni4921 +ENCODING 18721 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +25FC +4124 +B924 +11FC +1124 +FD24 +1124 +97FE +5904 +5104 +1D04 +E114 +4108 +ENDCHAR +STARTCHAR uni4922 +ENCODING 18722 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +2904 +2504 +4104 +B9FC +1040 +1040 +FDFC +1044 +9444 +5884 +5084 +1D04 +E228 +4410 +ENDCHAR +STARTCHAR uni4923 +ENCODING 18723 +BBX 15 16 0 -2 +BITMAP +1008 +103C +29E0 +2420 +4124 +B8A4 +10A8 +1020 +FDFE +1020 +9420 +5820 +5020 +1C20 +E0A0 +4040 +ENDCHAR +STARTCHAR uni4924 +ENCODING 18724 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +2810 +25FE +4220 +BC24 +1044 +10F8 +FE12 +1022 +9444 +5988 +5010 +1E28 +F044 +4182 +ENDCHAR +STARTCHAR uni4925 +ENCODING 18725 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +28FC +2504 +4208 +B9FE +1100 +117C +FD44 +1144 +9554 +5948 +5142 +1E42 +E23E +4400 +ENDCHAR +STARTCHAR uni4926 +ENCODING 18726 +BBX 15 16 0 -2 +BITMAP +10A8 +10A4 +28A4 +2520 +412E +BBF0 +1520 +1124 +FD24 +1124 +9528 +5910 +5132 +1D4A +E186 +4102 +ENDCHAR +STARTCHAR uni4927 +ENCODING 18727 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +29FC +2504 +4104 +B974 +1154 +1154 +FD54 +1154 +9574 +5904 +5104 +1DFC +E104 +4000 +ENDCHAR +STARTCHAR uni4928 +ENCODING 18728 +BBX 15 16 0 -2 +BITMAP +1004 +101E +29E0 +2500 +4106 +B978 +1150 +1150 +FD52 +1154 +9548 +5948 +5144 +1E54 +E262 +4440 +ENDCHAR +STARTCHAR uni4929 +ENCODING 18729 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +29FE +2502 +4000 +B81C +10E0 +1020 +FC20 +103E +95E0 +5820 +5022 +1C22 +E01E +4000 +ENDCHAR +STARTCHAR uni492A +ENCODING 18730 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +2888 +2488 +4088 +B888 +1126 +1220 +FDFE +1020 +9470 +58A8 +5124 +1E22 +E020 +4020 +ENDCHAR +STARTCHAR uni492B +ENCODING 18731 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +2924 +2524 +41FC +B820 +1050 +1088 +FD44 +1222 +9420 +59F8 +5008 +1C10 +E010 +4020 +ENDCHAR +STARTCHAR uni492C +ENCODING 18732 +BBX 15 16 0 -2 +BITMAP +2010 +2210 +5110 +4910 +8454 +7A52 +2252 +2090 +F810 +2114 +2E04 +B208 +6208 +3A10 +E220 +00C0 +ENDCHAR +STARTCHAR uni492D +ENCODING 18733 +BBX 15 16 0 -2 +BITMAP +2184 +2068 +5030 +48C8 +8304 +7840 +23FE +20A0 +F920 +23FC +2D24 +B124 +6134 +3928 +E020 +0020 +ENDCHAR +STARTCHAR uni492E +ENCODING 18734 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +2890 +249E +4090 +B890 +13FE +1000 +FC10 +1092 +9492 +5914 +5208 +1C10 +E060 +4380 +ENDCHAR +STARTCHAR uni492F +ENCODING 18735 +BBX 15 16 0 -2 +BITMAP +1002 +13E2 +2944 +2548 +4140 +B942 +1142 +13E4 +FD48 +1140 +9542 +5942 +5144 +1E44 +E248 +4450 +ENDCHAR +STARTCHAR uni4930 +ENCODING 18736 +BBX 15 15 0 -1 +BITMAP +1080 +1080 +7DFC +1244 +1048 +1CA0 +E110 +06C8 +1830 +EFEE +0100 +3FF8 +0920 +0540 +FFFE +ENDCHAR +STARTCHAR uni4931 +ENCODING 18737 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +2924 +25FC +4000 +B80C +11F0 +1100 +FD00 +11FE +9510 +5910 +5110 +1E10 +E210 +4410 +ENDCHAR +STARTCHAR uni4932 +ENCODING 18738 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +29FC +2420 +4020 +B820 +13FE +1048 +FC48 +114C +954A +5A4A +5088 +1C88 +E128 +4210 +ENDCHAR +STARTCHAR uni4933 +ENCODING 18739 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +57FE +4920 +8120 +7A3C +2244 +2664 +FA94 +2348 +2A48 +B230 +6220 +3A50 +E288 +0306 +ENDCHAR +STARTCHAR uni4934 +ENCODING 18740 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +5008 +4810 +8222 +7AAA +2272 +2222 +FA72 +22AA +2B26 +B2A2 +6242 +3A02 +E3FE +0002 +ENDCHAR +STARTCHAR uni4935 +ENCODING 18741 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +2890 +279E +4090 +B890 +1090 +139C +FC90 +1090 +9490 +5B9E +5090 +1C90 +E090 +4090 +ENDCHAR +STARTCHAR uni4936 +ENCODING 18742 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2BFE +2450 +4088 +B924 +1222 +11FC +FD24 +11FC +9524 +59FC +5022 +1C22 +E01E +4000 +ENDCHAR +STARTCHAR uni4937 +ENCODING 18743 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +5200 +4AFC +8284 +7AFC +2284 +22FC +FA20 +23FE +2A48 +B2C8 +6230 +3A48 +E284 +03FE +ENDCHAR +STARTCHAR uni4938 +ENCODING 18744 +BBX 15 16 0 -2 +BITMAP +2080 +20FC +5104 +49F8 +8008 +7BFE +2040 +20A2 +FB34 +2058 +2894 +B334 +6052 +3890 +E350 +0020 +ENDCHAR +STARTCHAR uni4939 +ENCODING 18745 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2BFE +2622 +40A4 +B928 +1050 +1088 +FD04 +10F8 +9488 +5888 +5050 +1C20 +E0D8 +4306 +ENDCHAR +STARTCHAR uni493A +ENCODING 18746 +BBX 15 16 0 -2 +BITMAP +1000 +1002 +2BDC +2490 +4090 +B910 +11DE +1354 +FD54 +1154 +9554 +59D4 +5154 +1C24 +E024 +4044 +ENDCHAR +STARTCHAR uni493B +ENCODING 18747 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2BFE +2480 +41FC +BA20 +15FE +1000 +FDFC +1104 +95FC +5904 +51FC +1D04 +E114 +4108 +ENDCHAR +STARTCHAR uni493C +ENCODING 18748 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +51FC +4904 +81FC +7904 +21FC +2020 +F832 +23B4 +28A8 +B128 +6124 +3A24 +E4A2 +0040 +ENDCHAR +STARTCHAR uni493D +ENCODING 18749 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +2954 +2554 +4154 +B9FC +1020 +10A8 +FCA4 +1124 +9420 +58A8 +50A4 +1D24 +E020 +4020 +ENDCHAR +STARTCHAR uni493E +ENCODING 18750 +BBX 15 16 0 -2 +BITMAP +101E +11E0 +2822 +2512 +4094 +B880 +1020 +11CE +FD02 +1102 +95CE +5902 +5102 +1D02 +E1FE +4102 +ENDCHAR +STARTCHAR uni493F +ENCODING 18751 +BBX 15 16 0 -2 +BITMAP +1080 +13DE +288A +25CA +408A +BBD2 +10A6 +1008 +FCF0 +1020 +95FC +5820 +53FE +1C20 +E0A0 +4040 +ENDCHAR +STARTCHAR uni4940 +ENCODING 18752 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +2924 +25FC +4020 +BBFE +1000 +1020 +FDFC +1124 +9524 +59FC +5020 +1C24 +E3FE +4102 +ENDCHAR +STARTCHAR uni4941 +ENCODING 18753 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +5008 +48D0 +8020 +7BFE +228A +2252 +FAFA +2222 +2A22 +B3FE +6222 +3A22 +E3FE +0202 +ENDCHAR +STARTCHAR uni4942 +ENCODING 18754 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +5202 +4CFC +8000 +79FC +2040 +20A4 +FB38 +2058 +2894 +B334 +6052 +3890 +E350 +0020 +ENDCHAR +STARTCHAR uni4943 +ENCODING 18755 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2BFE +2692 +4088 +B9FE +1310 +1510 +FDFE +1110 +9510 +59FE +5110 +1D10 +E1FE +4100 +ENDCHAR +STARTCHAR uni4944 +ENCODING 18756 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +5200 +4A48 +8248 +7AFC +2248 +2248 +FBFE +2200 +2AFC +B284 +62FC +3A84 +E2FC +0484 +ENDCHAR +STARTCHAR uni4945 +ENCODING 18757 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0100 +7D7C +1110 +7D7C +1110 +1CFE +E100 +06C0 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni4946 +ENCODING 18758 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0440 +7C7C +0440 +3C78 +0440 +7D7C +06C0 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni4947 +ENCODING 18759 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +29FE +2502 +4102 +B9FE +1100 +11EE +FD22 +11AA +9566 +5922 +5166 +1EAA +E222 +4466 +ENDCHAR +STARTCHAR uni4948 +ENCODING 18760 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +53FE +4888 +8024 +7BFE +2050 +2088 +F904 +228A +2888 +B3FE +6088 +3888 +E108 +0208 +ENDCHAR +STARTCHAR uni4949 +ENCODING 18761 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2A02 +2440 +40F8 +B908 +1210 +11FC +FD24 +1124 +95FC +5850 +5058 +1C96 +E112 +420E +ENDCHAR +STARTCHAR uni494A +ENCODING 18762 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +2820 +25FC +4020 +BBFE +1000 +11FC +FD04 +11FC +9504 +59FC +5104 +1DFC +E088 +4104 +ENDCHAR +STARTCHAR uni494B +ENCODING 18763 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +29FE +2400 +42FC +BC84 +10FC +1000 +FEFC +1008 +9410 +5850 +5020 +1E00 +F154 +4252 +ENDCHAR +STARTCHAR uni494C +ENCODING 18764 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +4004 +3C78 +2448 +3C78 +2448 +3D78 +06C0 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni494D +ENCODING 18765 +BBX 15 16 0 -2 +BITMAP +0820 +7E20 +08F8 +FF28 +1428 +7F6A +082A +FF56 +0982 +06C0 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni494E +ENCODING 18766 +BBX 15 16 0 -2 +BITMAP +23FE +2200 +52FC +4A00 +83FE +7A94 +22A8 +22C4 +FA00 +22FC +2A84 +B2FC +6284 +3CFC +E484 +088C +ENDCHAR +STARTCHAR uni494F +ENCODING 18767 +BBX 15 16 0 -2 +BITMAP +2280 +228E +54EA +494A +804A +724A +25EA +2C4A +F44A +256A +A54A +754E +2568 +3788 +C408 +0408 +ENDCHAR +STARTCHAR uni4950 +ENCODING 18768 +BBX 15 16 0 -2 +BITMAP +0020 +7E7C +14C4 +0838 +FEC6 +2A20 +48FC +A844 +118C +06C0 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni4951 +ENCODING 18769 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2BFE +24A8 +40A8 +B974 +1222 +1070 +FCA8 +1146 +9478 +5888 +5150 +1C20 +E050 +4180 +ENDCHAR +STARTCHAR uni4952 +ENCODING 18770 +BBX 15 16 0 -2 +BITMAP +7CF8 +0488 +04F8 +7C20 +41FC +7D24 +05FC +0428 +2BFC +16C4 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni4953 +ENCODING 18771 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +29FE +2488 +40F8 +B888 +10F8 +1088 +FDFE +1088 +9524 +5AFA +5020 +1C20 +E1FE +4000 +ENDCHAR +STARTCHAR uni4954 +ENCODING 18772 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +5050 +4850 +83FE +7A52 +2252 +23FE +F924 +20A8 +2BFE +B070 +60A8 +3924 +E622 +0020 +ENDCHAR +STARTCHAR uni4955 +ENCODING 18773 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +5548 +4B90 +811E +77D4 +2564 +2554 +F554 +2754 +A5D4 +7548 +2548 +3554 +C464 +04C2 +ENDCHAR +STARTCHAR uni4956 +ENCODING 18774 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +2BFE +2450 +41FC +B954 +118C +1174 +FD04 +11FC +9420 +5BFE +5050 +1C88 +E104 +4202 +ENDCHAR +STARTCHAR uni4957 +ENCODING 18775 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +57C8 +4908 +811E +7B92 +2024 +2380 +F808 +27C8 +2908 +B108 +6594 +3954 +E124 +0342 +ENDCHAR +STARTCHAR uni4958 +ENCODING 18776 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +2954 +2622 +4088 +B888 +1154 +1222 +FDFC +1104 +9504 +59FC +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni4959 +ENCODING 18777 +BBX 15 16 0 -2 +BITMAP +2044 +2724 +5528 +4D7E +8510 +7630 +254A +251A +F52C +254C +A51A +762A +2448 +3408 +C428 +0410 +ENDCHAR +STARTCHAR uni495A +ENCODING 18778 +BBX 15 16 0 -2 +BITMAP +3FF8 +2008 +2EE8 +2AA8 +2EE8 +2AA8 +2EE8 +2AA8 +2FE8 +2288 +2448 +3BB8 +210A +4FEA +4546 +9FF2 +ENDCHAR +STARTCHAR uni495B +ENCODING 18779 +BBX 15 16 0 -2 +BITMAP +1080 +13DE +288A +25CA +408A +BBD2 +10A6 +1040 +FC88 +11F0 +9424 +5BFE +5022 +1D24 +E2A2 +4040 +ENDCHAR +STARTCHAR uni495C +ENCODING 18780 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +5252 +4BDE +8252 +7BDE +2222 +2222 +FAFA +2222 +2A72 +B2AA +6326 +3A22 +E22A +0204 +ENDCHAR +STARTCHAR uni495D +ENCODING 18781 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +5250 +4BFE +8252 +7BFE +2294 +22D8 +FA92 +22CE +2A00 +B284 +6298 +3CE2 +E482 +087E +ENDCHAR +STARTCHAR uni495E +ENCODING 18782 +BBX 15 16 0 -2 +BITMAP +2108 +2208 +27C8 +5450 +8FDE +7464 +27D4 +2214 +F914 +27D4 +2A14 +B3C8 +6248 +3C54 +E554 +08A2 +ENDCHAR +STARTCHAR uni495F +ENCODING 18783 +BBX 15 16 0 -2 +BITMAP +2200 +227C +5244 +4A7C +8744 +7A7C +2220 +237E +FA92 +2652 +2A6A +B242 +627A +3A02 +E214 +0608 +ENDCHAR +STARTCHAR uni4960 +ENCODING 18784 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +53FE +4888 +8014 +7812 +23FE +2210 +FAF4 +2214 +2AF4 +B2A8 +62AA +3AFA +E216 +0422 +ENDCHAR +STARTCHAR uni4961 +ENCODING 18785 +BBX 15 16 0 -2 +BITMAP +2114 +2554 +5554 +4DFE +8554 +77D4 +245C +2440 +F77E +2510 +A5FE +7510 +2538 +3554 +C592 +0910 +ENDCHAR +STARTCHAR uni4962 +ENCODING 18786 +BBX 15 16 0 -2 +BITMAP +0810 +FF7E +0810 +7F7C +4104 +7F28 +2210 +1F28 +E144 +06C0 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni4963 +ENCODING 18787 +BBX 15 16 0 -2 +BITMAP +2C78 +4448 +6C48 +4486 +7D78 +0048 +7C30 +1048 +FD84 +06C0 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni4964 +ENCODING 18788 +BBX 15 16 0 -2 +BITMAP +11FC +1020 +2BFE +2622 +41AC +B820 +11AC +1040 +FCFC +1104 +96F4 +5894 +50F4 +1C8A +E082 +407E +ENDCHAR +STARTCHAR uni4965 +ENCODING 18789 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +5088 +4850 +83FE +7A50 +23FC +2254 +FBFE +2254 +2BFC +B250 +62D8 +3D54 +E652 +0850 +ENDCHAR +STARTCHAR uni4966 +ENCODING 18790 +BBX 15 16 0 -2 +BITMAP +2020 +21FE +5440 +4AFC +8110 +7AFE +2000 +26FC +FA84 +22FC +2A84 +B2FC +6284 +3A8C +E500 +08FE +ENDCHAR +STARTCHAR uni4967 +ENCODING 18791 +BBX 15 16 0 -2 +BITMAP +2040 +207C +5040 +4BFE +8202 +79FC +20A8 +2154 +FA88 +21FC +2A8A +B0F8 +6088 +38F8 +E088 +00F8 +ENDCHAR +STARTCHAR uni4968 +ENCODING 18792 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +5252 +4BDE +8252 +7BDE +2202 +22FA +FA8A +22FA +2A02 +B2FA +628A +3AFA +E202 +0206 +ENDCHAR +STARTCHAR uni4969 +ENCODING 18793 +BBX 15 16 0 -2 +BITMAP +2288 +22A8 +56A8 +4BF0 +801E +7224 +25D4 +2C14 +F414 +25D4 +A554 +7548 +2568 +3554 +C614 +0422 +ENDCHAR +STARTCHAR uni496A +ENCODING 18794 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +5202 +4BFE +8202 +7BFE +2108 +2252 +FB9C +2108 +2A52 +B3DE +6000 +3AA4 +E252 +0452 +ENDCHAR +STARTCHAR uni496B +ENCODING 18795 +BBX 15 16 0 -2 +BITMAP +2110 +2114 +57D2 +4910 +8FFE +7290 +2450 +2FF4 +F494 +27F4 +A494 +77E8 +248A +37FA +C426 +0042 +ENDCHAR +STARTCHAR uni496C +ENCODING 18796 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +2888 +2424 +43FE +B820 +11FC +1124 +FDFC +1124 +95FC +5924 +5008 +1DFE +E088 +4058 +ENDCHAR +STARTCHAR uni496D +ENCODING 18797 +BBX 15 16 0 -2 +BITMAP +1414 +1010 +FEFE +1010 +5454 +3838 +5454 +9292 +3130 +06C0 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni496E +ENCODING 18798 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +5050 +4BFE +8252 +7BFE +2000 +23DE +FA92 +23D2 +2A52 +B3D2 +629A +3A94 +E3D0 +0010 +ENDCHAR +STARTCHAR uni496F +ENCODING 18799 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +5294 +4A94 +83FC +7910 +2252 +23DC +F812 +23CE +2A40 +B3D2 +625C +3BD0 +E252 +02CE +ENDCHAR +STARTCHAR uni4970 +ENCODING 18800 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +57FE +4900 +8100 +79FC +2000 +2088 +FBFE +22AA +2AAA +B3FE +6088 +38AA +E3FE +0022 +ENDCHAR +STARTCHAR uni4971 +ENCODING 18801 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +5202 +4840 +819C +7904 +21DC +2104 +F9FC +2100 +2BFE +B402 +62AA +3AAA +E414 +0008 +ENDCHAR +STARTCHAR uni4972 +ENCODING 18802 +BBX 15 16 0 -2 +BITMAP +2008 +27E8 +5408 +4DC8 +855E +7552 +25E4 +2400 +F7E8 +26A8 +A6A8 +77E8 +2414 +37F4 +C024 +0042 +ENDCHAR +STARTCHAR uni4973 +ENCODING 18803 +BBX 15 16 0 -2 +BITMAP +23FC +2040 +51F8 +4908 +81F8 +7908 +27FE +2442 +FAA4 +228A +2C7A +B080 +61F8 +3A88 +E070 +038E +ENDCHAR +STARTCHAR uni4974 +ENCODING 18804 +BBX 15 16 0 -2 +BITMAP +2020 +2222 +53FE +4890 +81FE +7B10 +25FE +2110 +F9FE +2110 +29FE +B100 +63DE +3A52 +E272 +0206 +ENDCHAR +STARTCHAR uni4975 +ENCODING 18805 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +577E +4D10 +85FE +7544 +25EE +2744 +F564 +25DE +A500 +75FE +2728 +352A +C04A +0086 +ENDCHAR +STARTCHAR uni4976 +ENCODING 18806 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +5222 +4ACC +8244 +7BEE +2244 +22EE +FB54 +2244 +2A10 +B210 +625E +3A50 +E250 +05FE +ENDCHAR +STARTCHAR uni4977 +ENCODING 18807 +BBX 15 16 0 -2 +BITMAP +2442 +2772 +2AA2 +511A +8BEA +722A +23EA +222A +FBEA +222A +2BEA +B14A +67F2 +3942 +E24A +0444 +ENDCHAR +STARTCHAR uni4978 +ENCODING 18808 +BBX 15 16 0 -2 +BITMAP +F7FC +1248 +17FC +FC46 +86EC +F554 +16EC +1554 +57EC +26C4 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni4979 +ENCODING 18809 +BBX 15 16 0 -2 +BITMAP +2080 +23DE +508A +49D2 +80A6 +7BD0 +209C +2050 +FBFE +2050 +2AAA +B3FE +6252 +3AAA +E3FE +0002 +ENDCHAR +STARTCHAR uni497A +ENCODING 18810 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +3810 +2110 +4110 +7910 +A210 +23FE +F830 +2050 +2090 +2110 +2A10 +3410 +2050 +0020 +ENDCHAR +STARTCHAR uni497B +ENCODING 18811 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +3DFC +2020 +4020 +BC20 +1020 +13FE +FC50 +1050 +1050 +1090 +1492 +1912 +120E +0400 +ENDCHAR +STARTCHAR uni497C +ENCODING 18812 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +3C80 +20FC +4154 +BE54 +1054 +1094 +FC94 +1124 +1224 +1044 +1444 +1884 +1128 +0010 +ENDCHAR +STARTCHAR uni497D +ENCODING 18813 +BBX 15 16 0 -2 +BITMAP +2040 +2048 +3A44 +2240 +43FE +7880 +A080 +20FC +F944 +2144 +2148 +2250 +2A20 +3450 +2888 +0306 +ENDCHAR +STARTCHAR uni497E +ENCODING 18814 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +3A02 +2484 +4080 +78FC +A080 +2100 +F9FC +2004 +2004 +23F4 +2804 +3004 +2028 +0010 +ENDCHAR +STARTCHAR uni497F +ENCODING 18815 +BBX 15 16 0 -2 +BITMAP +1008 +101C +3DE0 +2100 +4100 +BDFE +1120 +1120 +FD3C +1124 +1124 +1124 +1524 +1A44 +1254 +0488 +ENDCHAR +STARTCHAR uni4980 +ENCODING 18816 +BBX 14 16 0 -2 +BITMAP +2000 +27BC +3884 +2084 +44A4 +7A94 +A294 +2084 +F98C +2294 +24A4 +2084 +2884 +3084 +2294 +0108 +ENDCHAR +STARTCHAR uni4981 +ENCODING 18817 +BBX 15 16 0 -2 +BITMAP +2100 +211E +3912 +27D2 +4114 +7914 +A7D8 +2114 +F912 +27D2 +2112 +211A +2914 +3210 +2210 +0410 +ENDCHAR +STARTCHAR uni4982 +ENCODING 18818 +BBX 14 16 0 -2 +BITMAP +2040 +2020 +3BFC +2204 +4204 +7BFC +A200 +23DC +FA44 +2354 +22CC +2244 +2ACC +3554 +2444 +08CC +ENDCHAR +STARTCHAR uni4983 +ENCODING 18819 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +3BFE +20A8 +4022 +79FA +A024 +2028 +FBFE +2040 +20FC +2184 +2AFC +3484 +20FC +0084 +ENDCHAR +STARTCHAR uni4984 +ENCODING 18820 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +3C20 +21FC +4124 +BDFC +1124 +11FC +FC22 +13FE +1050 +1094 +1588 +1AA8 +14C4 +0082 +ENDCHAR +STARTCHAR uni4985 +ENCODING 18821 +BBX 15 16 0 -2 +BITMAP +2088 +2050 +3BFE +2020 +41FC +7820 +A3FE +2124 +F8A8 +23FE +2000 +21FC +2904 +3104 +21FC +0104 +ENDCHAR +STARTCHAR uni4986 +ENCODING 18822 +BBX 15 16 0 -2 +BITMAP +23DE +2252 +3BDE +2252 +43DE +78A0 +A1FE +2320 +FDFC +2120 +21FE +2000 +29FC +3088 +2070 +078E +ENDCHAR +STARTCHAR uni4987 +ENCODING 18823 +BBX 15 16 0 -2 +BITMAP +0010 +3E50 +2050 +2048 +3C88 +20A4 +3D24 +2242 +2040 +FE80 +10F8 +2008 +4408 +FE08 +0250 +0020 +ENDCHAR +STARTCHAR uni4988 +ENCODING 18824 +BBX 15 15 0 -1 +BITMAP +0040 +3E40 +2040 +2040 +3DFE +2040 +3C40 +2040 +20FC +FE90 +1090 +2110 +4510 +FE10 +02FE +ENDCHAR +STARTCHAR uni4989 +ENCODING 18825 +BBX 15 14 0 -1 +BITMAP +3EFE +20AA +20AA +3CAA +20AA +3CAA +20AA +20AA +FEAE +10C2 +2082 +4482 +FEFE +0282 +ENDCHAR +STARTCHAR uni498A +ENCODING 18826 +BBX 15 16 0 -2 +BITMAP +0020 +3E20 +2020 +203C +3C20 +2020 +3DFE +2000 +2020 +FE20 +10A8 +20A4 +4522 +FE22 +02A0 +0040 +ENDCHAR +STARTCHAR uni498B +ENCODING 18827 +BBX 15 16 0 -2 +BITMAP +0088 +3C88 +2088 +3BD0 +209E +3BE4 +2094 +27D4 +F914 +21D4 +2154 +4948 +F948 +4A54 +02D4 +0422 +ENDCHAR +STARTCHAR uni498C +ENCODING 18828 +BBX 13 15 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8208 +8208 +9FC8 +8208 +8208 +8208 +BFE8 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni498D +ENCODING 18829 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +8808 +8FE8 +9008 +AF88 +8308 +8408 +8828 +8828 +87E8 +8018 +ENDCHAR +STARTCHAR uni498E +ENCODING 18830 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +9F88 +8008 +BFC8 +8A08 +8A08 +8A08 +9248 +A1C8 +8028 +8010 +ENDCHAR +STARTCHAR uni498F +ENCODING 18831 +BBX 13 15 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8208 +8508 +88C8 +B038 +8888 +8888 +8888 +9088 +A0A8 +8010 +ENDCHAR +STARTCHAR uni4990 +ENCODING 18832 +BBX 13 15 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +81C8 +BE08 +8208 +BFC8 +8208 +FFF8 +8208 +8A28 +8410 +ENDCHAR +STARTCHAR uni4991 +ENCODING 18833 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8408 +8408 +9F88 +8488 +8488 +BFE8 +8408 +8A08 +8908 +90A8 +A010 +ENDCHAR +STARTCHAR uni4992 +ENCODING 18834 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +BFC8 +8208 +8408 +8F88 +9888 +A888 +8888 +8F88 +88A8 +8010 +ENDCHAR +STARTCHAR uni4993 +ENCODING 18835 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8208 +8208 +83E8 +8208 +8208 +9FC8 +9048 +9048 +9FC8 +8028 +8010 +ENDCHAR +STARTCHAR uni4994 +ENCODING 18836 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +8008 +9FC8 +9048 +9FC8 +9048 +9FC8 +8008 +BFE8 +8008 +8018 +ENDCHAR +STARTCHAR uni4995 +ENCODING 18837 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +9048 +8888 +BFE8 +8888 +8888 +FFF8 +8888 +9088 +9088 +A098 +ENDCHAR +STARTCHAR uni4996 +ENCODING 18838 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8208 +8208 +BFE8 +8208 +9FC8 +8008 +9FC8 +9048 +9FC8 +9048 +8018 +ENDCHAR +STARTCHAR uni4997 +ENCODING 18839 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8208 +8408 +9FC8 +9548 +9548 +9548 +9548 +BFE8 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni4998 +ENCODING 18840 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +9FC8 +9048 +9FC8 +9048 +9FC8 +9228 +9148 +9488 +9848 +9038 +ENDCHAR +STARTCHAR uni4999 +ENCODING 18841 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8208 +8208 +BFE8 +8208 +FFF8 +8088 +BFE8 +9088 +8888 +82A8 +8110 +ENDCHAR +STARTCHAR uni499A +ENCODING 18842 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +81C8 +9E08 +8208 +BFE8 +8208 +9FC8 +9048 +9FC8 +8028 +8010 +ENDCHAR +STARTCHAR uni499B +ENCODING 18843 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8408 +8F88 +9108 +BFC8 +8248 +BFE8 +8248 +9FC8 +8208 +8608 +8018 +ENDCHAR +STARTCHAR uni499C +ENCODING 18844 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +BFE8 +8408 +9FC8 +8848 +FFF8 +8008 +9FC8 +9048 +9FE8 +8010 +ENDCHAR +STARTCHAR uni499D +ENCODING 18845 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FAF8 +8208 +9FC8 +8208 +BFE8 +8508 +9548 +9528 +A928 +8908 +9328 +8010 +ENDCHAR +STARTCHAR uni499E +ENCODING 18846 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +93E8 +8888 +A088 +93E8 +8888 +9088 +B088 +97F8 +9008 +8018 +ENDCHAR +STARTCHAR uni499F +ENCODING 18847 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8208 +9248 +9248 +AAA8 +8208 +9FC8 +8208 +8208 +BFE8 +8008 +8018 +ENDCHAR +STARTCHAR uni49A0 +ENCODING 18848 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +BFE8 +8408 +8A28 +B348 +9588 +8B48 +B528 +8928 +B508 +8218 +ENDCHAR +STARTCHAR uni49A1 +ENCODING 18849 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8208 +BFE8 +A028 +8F88 +8888 +8F88 +8808 +8FC8 +8848 +8FC8 +8018 +ENDCHAR +STARTCHAR uni49A2 +ENCODING 18850 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +A108 +9108 +C7C8 +A108 +9108 +AFE8 +E208 +A448 +AFE8 +A028 +8018 +ENDCHAR +STARTCHAR uni49A3 +ENCODING 18851 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FCF8 +8208 +BFE8 +9048 +8888 +FFF8 +8008 +9FC8 +9048 +9048 +9FC8 +8018 +ENDCHAR +STARTCHAR uni49A4 +ENCODING 18852 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +9DC8 +9548 +8888 +9548 +A208 +9DC8 +9548 +8888 +9548 +A218 +ENDCHAR +STARTCHAR uni49A5 +ENCODING 18853 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +8888 +8888 +BDE8 +8888 +9DC8 +AAA8 +C898 +8888 +88A8 +8010 +ENDCHAR +STARTCHAR uni49A6 +ENCODING 18854 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8208 +8508 +98C8 +EFB8 +8208 +BFE8 +9248 +8A88 +FFF8 +8008 +8018 +ENDCHAR +STARTCHAR uni49A7 +ENCODING 18855 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +8408 +99C8 +9048 +9DC8 +9048 +9FC8 +8508 +8928 +B0E8 +8018 +ENDCHAR +STARTCHAR uni49A8 +ENCODING 18856 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8208 +BFE8 +8208 +9FC8 +9248 +9FC8 +9248 +9FC8 +8A88 +9248 +8218 +ENDCHAR +STARTCHAR uni49A9 +ENCODING 18857 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FFF8 +9048 +9FC8 +9048 +9FC8 +9048 +9FC8 +8808 +9F88 +A888 +8728 +B8D0 +ENDCHAR +STARTCHAR uni49AA +ENCODING 18858 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FFF8 +9048 +9FC8 +9048 +9FC8 +8808 +9FE8 +B228 +D528 +9FA8 +80A8 +8058 +ENDCHAR +STARTCHAR uni49AB +ENCODING 18859 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +8888 +BFE8 +8888 +8208 +9FC8 +9248 +BFE8 +8508 +8888 +9058 +ENDCHAR +STARTCHAR uni49AC +ENCODING 18860 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8808 +BDE8 +88A8 +9CA8 +88A8 +BD68 +8A08 +BFE8 +8508 +8888 +9058 +ENDCHAR +STARTCHAR uni49AD +ENCODING 18861 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +81C8 +9E08 +8208 +BFE8 +8A88 +9248 +AFA8 +8888 +8F88 +88A8 +8F90 +ENDCHAR +STARTCHAR uni49AE +ENCODING 18862 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FAF8 +9FC8 +8208 +9FC8 +8408 +BFE8 +8888 +9FC8 +A8B8 +CF88 +8888 +8F98 +ENDCHAR +STARTCHAR uni49AF +ENCODING 18863 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +FE88 +9088 +A4F8 +BF28 +88A8 +BEA8 +8848 +8EA8 +F928 +A218 +ENDCHAR +STARTCHAR uni49B0 +ENCODING 18864 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8FC4 +9084 +9FC4 +9244 +BFE4 +A224 +BFE4 +8214 +83FC +ENDCHAR +STARTCHAR uni49B1 +ENCODING 18865 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +83C8 +BC48 +8A88 +9F08 +9108 +9F88 +9088 +9FC8 +9048 +AA48 +CAD8 +ENDCHAR +STARTCHAR uni49B2 +ENCODING 18866 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8408 +8F88 +9088 +BFE8 +D448 +9928 +9FE8 +9008 +97C8 +9448 +A7D8 +ENDCHAR +STARTCHAR uni49B3 +ENCODING 18867 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +A408 +AEE8 +DAA8 +EEA8 +AAC8 +DEA8 +F8A8 +ACA8 +AAC8 +CD88 +8898 +ENDCHAR +STARTCHAR uni49B4 +ENCODING 18868 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FFF8 +9548 +9FC8 +8208 +9FC8 +8208 +BFE8 +8888 +9FC8 +8208 +BFE8 +8218 +ENDCHAR +STARTCHAR uni49B5 +ENCODING 18869 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +BFE8 +9248 +BFE8 +E238 +B768 +AAA8 +B768 +AAA8 +B768 +A238 +ENDCHAR +STARTCHAR uni49B6 +ENCODING 18870 +BBX 13 16 1 -2 +BITMAP +4000 +27F8 +2008 +8408 +8F88 +9088 +A108 +9FC8 +8248 +BFE8 +8248 +9FC8 +8208 +8A08 +8428 +8010 +ENDCHAR +STARTCHAR uni49B7 +ENCODING 18871 +BBX 13 16 1 -2 +BITMAP +4000 +27F8 +2008 +8008 +8208 +9248 +9248 +AAA8 +8208 +9FC8 +8208 +8208 +BFE8 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni49B8 +ENCODING 18872 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +9FC8 +9248 +9FC8 +9248 +9FC8 +8208 +BFE8 +A228 +A2A8 +AFA8 +A0A8 +A068 +8018 +ENDCHAR +STARTCHAR uni49B9 +ENCODING 18873 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +8840 +9040 +9040 +A040 +97FC +9040 +8840 +8840 +8840 +D040 +A040 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni49BA +ENCODING 18874 +BBX 14 15 1 -2 +BITMAP +F800 +8BFC +9040 +9040 +A040 +9040 +9040 +8840 +8840 +8840 +D040 +A040 +8040 +8140 +8080 +ENDCHAR +STARTCHAR uni49BB +ENCODING 18875 +BBX 14 15 1 -2 +BITMAP +FBF8 +8808 +9010 +9020 +A040 +9040 +97FC +8840 +8840 +8840 +D040 +A040 +8040 +8140 +8080 +ENDCHAR +STARTCHAR uni49BC +ENCODING 18876 +BBX 14 16 1 -2 +BITMAP +0080 +F880 +8880 +97F0 +9090 +A090 +9090 +9090 +8FFC +8880 +8940 +D140 +A220 +8220 +8410 +880C +ENDCHAR +STARTCHAR uni49BD +ENCODING 18877 +BBX 14 15 1 -2 +BITMAP +FBF0 +8810 +90A0 +9040 +A020 +97FC +9044 +8848 +8840 +8840 +D040 +A040 +8040 +8140 +8080 +ENDCHAR +STARTCHAR uni49BE +ENCODING 18878 +BBX 14 16 1 -2 +BITMAP +2080 +2080 +4100 +F910 +8A08 +8FFC +F804 +8120 +8120 +F920 +8920 +8920 +FA24 +8A24 +041C +0800 +ENDCHAR +STARTCHAR uni49BF +ENCODING 18879 +BBX 13 16 1 -2 +BITMAP +0040 +F840 +8840 +9040 +93F8 +A248 +9248 +9248 +8A48 +8BF8 +8A48 +D040 +A040 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni49C0 +ENCODING 18880 +BBX 14 16 1 -2 +BITMAP +0080 +F880 +8880 +9080 +97FC +A080 +9100 +9120 +8920 +8A40 +8A40 +D490 +A488 +8908 +83FC +8104 +ENDCHAR +STARTCHAR uni49C1 +ENCODING 18881 +BBX 13 16 1 -2 +BITMAP +0100 +F900 +8A00 +93F8 +9408 +A808 +93C8 +9248 +8A48 +8A48 +8BC8 +D248 +A008 +8008 +8050 +8020 +ENDCHAR +STARTCHAR uni49C2 +ENCODING 18882 +BBX 13 15 1 -2 +BITMAP +FBF8 +8888 +9088 +9088 +A088 +9128 +9110 +8A00 +89F8 +8908 +D108 +A108 +8108 +81F8 +8108 +ENDCHAR +STARTCHAR uni49C3 +ENCODING 18883 +BBX 13 15 1 -2 +BITMAP +F800 +8BF8 +9248 +9248 +A248 +9248 +9248 +8BF8 +8A48 +8A48 +D248 +A248 +8248 +83F8 +8208 +ENDCHAR +STARTCHAR uni49C4 +ENCODING 18884 +BBX 14 16 1 -2 +BITMAP +0100 +F900 +89F0 +9210 +9620 +A940 +9080 +9140 +8A30 +8C0C +8BF0 +D210 +A210 +8210 +83F0 +8210 +ENDCHAR +STARTCHAR uni49C5 +ENCODING 18885 +BBX 14 16 1 -2 +BITMAP +0080 +F080 +97F8 +9080 +A7F0 +A090 +C7F0 +A480 +97F8 +9088 +90A8 +D150 +A140 +8220 +8410 +880C +ENDCHAR +STARTCHAR uni49C6 +ENCODING 18886 +BBX 14 16 1 -2 +BITMAP +0120 +F920 +8920 +9120 +97F8 +A120 +9120 +9120 +8920 +8FFC +8800 +D120 +A110 +8210 +8208 +8408 +ENDCHAR +STARTCHAR uni49C7 +ENCODING 18887 +BBX 14 16 1 -2 +BITMAP +0080 +F040 +9040 +97FC +A080 +A080 +C140 +A144 +9348 +9530 +9920 +D110 +A108 +8144 +8180 +8100 +ENDCHAR +STARTCHAR uni49C8 +ENCODING 18888 +BBX 14 15 1 -2 +BITMAP +F7FC +90A0 +A0A0 +A0A0 +C3F8 +A2A8 +92A8 +92A8 +92A8 +D2B8 +A308 +8208 +8208 +83F8 +8208 +ENDCHAR +STARTCHAR uni49C9 +ENCODING 18889 +BBX 14 15 1 -2 +BITMAP +FBF8 +8A48 +9248 +93F8 +A248 +9248 +93F8 +8840 +8840 +8BF8 +D040 +A040 +8040 +87FC +8000 +ENDCHAR +STARTCHAR uni49CA +ENCODING 18890 +BBX 14 16 1 -2 +BITMAP +0040 +FA40 +8A40 +93F8 +9240 +A440 +9040 +97FC +8800 +8800 +8BF8 +D208 +A208 +8208 +83F8 +8208 +ENDCHAR +STARTCHAR uni49CB +ENCODING 18891 +BBX 14 15 1 -2 +BITMAP +FBF8 +8A08 +9208 +93F8 +A208 +9208 +93F8 +8A08 +8A08 +8BF8 +D0A0 +A120 +8124 +8224 +841C +ENDCHAR +STARTCHAR uni49CC +ENCODING 18892 +BBX 14 16 1 -2 +BITMAP +0010 +F078 +9780 +A088 +A448 +C250 +A200 +9080 +97FC +9110 +D210 +A720 +80C0 +80A0 +8310 +8C08 +ENDCHAR +STARTCHAR uni49CD +ENCODING 18893 +BBX 14 16 1 -2 +BITMAP +0110 +F908 +8A04 +9444 +9040 +A0A0 +9110 +9208 +8C04 +8BF8 +8A08 +D208 +A208 +8208 +83F8 +8208 +ENDCHAR +STARTCHAR uni49CE +ENCODING 18894 +BBX 14 15 1 -2 +BITMAP +F9F8 +8908 +9108 +91F8 +A000 +93FC +9204 +8A04 +8BFC +8A04 +D204 +A3FC +8204 +8214 +8208 +ENDCHAR +STARTCHAR uni49CF +ENCODING 18895 +BBX 14 16 1 -2 +BITMAP +0080 +F880 +89F8 +9110 +92A0 +A040 +91B0 +964C +89F0 +8840 +89F0 +D040 +A7FC +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni49D0 +ENCODING 18896 +BBX 14 16 1 -2 +BITMAP +0080 +F840 +8FFC +9000 +93F8 +A208 +93F8 +9000 +8BF8 +8810 +8820 +D7FC +A040 +8040 +8140 +8080 +ENDCHAR +STARTCHAR uni49D1 +ENCODING 18897 +BBX 14 16 1 -2 +BITMAP +0080 +F040 +97FC +A404 +A808 +C000 +A7FC +9040 +9040 +9240 +D278 +A240 +8540 +84C0 +887C +9000 +ENDCHAR +STARTCHAR uni49D2 +ENCODING 18898 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +8840 +97FC +9040 +A248 +9248 +9248 +8D54 +88E0 +8950 +D150 +A248 +8444 +8840 +8040 +ENDCHAR +STARTCHAR uni49D3 +ENCODING 18899 +BBX 13 15 1 -2 +BITMAP +FBF8 +8A48 +9248 +92E8 +A248 +93F8 +9208 +8AE8 +8AA8 +8AA8 +D2E8 +A208 +8408 +8428 +8810 +ENDCHAR +STARTCHAR uni49D4 +ENCODING 18900 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +88A0 +9110 +9288 +A444 +93F0 +9010 +88A0 +8840 +8948 +D504 +A514 +8514 +88F0 +8000 +ENDCHAR +STARTCHAR uni49D5 +ENCODING 18901 +BBX 14 16 1 -2 +BITMAP +0028 +F024 +9020 +AFFC +A020 +C020 +A7A4 +94A4 +94A4 +94A8 +D7A8 +A010 +81D4 +8E34 +844C +8084 +ENDCHAR +STARTCHAR uni49D6 +ENCODING 18902 +BBX 14 16 1 -2 +BITMAP +0090 +F888 +88BC +93C0 +9050 +A024 +90D4 +932C +8890 +88BC +8BC0 +D048 +A050 +8024 +80D4 +830C +ENDCHAR +STARTCHAR uni49D7 +ENCODING 18903 +BBX 14 16 1 -2 +BITMAP +0200 +FA00 +8BFC +9400 +9BF8 +A208 +93F8 +9208 +8BF8 +8900 +89F8 +D210 +A520 +80C0 +8330 +8C0C +ENDCHAR +STARTCHAR uni49D8 +ENCODING 18904 +BBX 14 16 1 -2 +BITMAP +0200 +F3F0 +9410 +A7E0 +A020 +CFFC +A100 +9288 +9CD0 +9160 +D250 +ACD0 +8148 +8244 +8D40 +8080 +ENDCHAR +STARTCHAR uni49D9 +ENCODING 18905 +BBX 14 16 1 -2 +BITMAP +0080 +F490 +9490 +A490 +A7F0 +C080 +A140 +9220 +9510 +990C +D120 +A550 +8528 +8928 +8500 +8200 +ENDCHAR +STARTCHAR uni49DA +ENCODING 18906 +BBX 14 16 1 -2 +BITMAP +0040 +F820 +8BFC +9000 +91F8 +A108 +91F8 +9000 +8BFC +8A04 +8AF4 +D294 +A2F4 +8204 +8214 +8208 +ENDCHAR +STARTCHAR uni49DB +ENCODING 18907 +BBX 14 16 1 -2 +BITMAP +0080 +F040 +97F8 +A210 +A120 +C7FC +A404 +9888 +9040 +97F8 +D100 +A1F0 +8110 +8210 +8250 +8420 +ENDCHAR +STARTCHAR uni49DC +ENCODING 18908 +BBX 14 16 1 -2 +BITMAP +0040 +F820 +8BFC +9220 +92F8 +A228 +93FC +9228 +8AF8 +8A20 +8AF8 +D288 +A288 +8488 +84F8 +8888 +ENDCHAR +STARTCHAR uni49DD +ENCODING 18909 +BBX 14 16 1 -2 +BITMAP +0040 +FA48 +8A48 +93F8 +9040 +A7FC +9000 +9040 +8BF8 +8A48 +8A48 +D3F8 +A040 +8048 +87FC +8204 +ENDCHAR +STARTCHAR uni49DE +ENCODING 18910 +BBX 14 15 1 -2 +BITMAP +FBFC +8A40 +93F8 +9240 +A3F8 +9240 +9240 +8BFC +8804 +8D54 +D554 +A554 +8404 +8028 +8010 +ENDCHAR +STARTCHAR uni49DF +ENCODING 18911 +BBX 14 16 1 -2 +BITMAP +003C +FBC0 +8844 +9224 +9128 +A100 +9040 +939C +8A04 +8A04 +8B9C +D204 +A204 +8204 +83FC +8204 +ENDCHAR +STARTCHAR uni49E0 +ENCODING 18912 +BBX 14 16 1 -2 +BITMAP +0040 +F7FC +9040 +A3F8 +A248 +C3F8 +A248 +93F8 +9044 +97FC +D010 +A7FC +8210 +8110 +8050 +8020 +ENDCHAR +STARTCHAR uni49E1 +ENCODING 18913 +BBX 14 16 1 -2 +BITMAP +0020 +FBFC +8A20 +92F8 +9228 +A3FC +9228 +92F8 +8A20 +8AF8 +8AA8 +D2F8 +A2A8 +84F8 +84A8 +8898 +ENDCHAR +STARTCHAR uni49E2 +ENCODING 18914 +BBX 14 15 1 -2 +BITMAP +F7FC +9400 +A4F8 +A488 +C488 +A4F8 +9400 +95DC +9554 +D554 +A554 +85DC +8400 +87FC +8000 +ENDCHAR +STARTCHAR uni49E3 +ENCODING 18915 +BBX 14 15 1 -2 +BITMAP +FBF8 +88A0 +93F8 +92A8 +A2A8 +93F8 +9000 +8BF8 +8800 +8FFC +D040 +A150 +8248 +8544 +8080 +ENDCHAR +STARTCHAR uni49E4 +ENCODING 18916 +BBX 14 16 1 -2 +BITMAP +00A0 +F4A4 +92A8 +A0A0 +A7FC +C110 +A0A0 +97FC +9040 +93F8 +D040 +A7FC +80A0 +8110 +8208 +8C04 +ENDCHAR +STARTCHAR uni49E5 +ENCODING 18917 +BBX 14 16 1 -2 +BITMAP +0040 +F040 +97FC +A040 +A3F8 +C248 +A3F8 +9248 +93F8 +9044 +D7FC +A084 +8048 +8544 +8514 +88F0 +ENDCHAR +STARTCHAR uni49E6 +ENCODING 18918 +BBX 14 16 1 -2 +BITMAP +001C +F7E0 +9088 +A448 +A210 +C7F0 +A410 +97F8 +9408 +97FC +D404 +A554 +8554 +8A04 +8828 +9010 +ENDCHAR +STARTCHAR uni49E7 +ENCODING 18919 +BBX 15 15 1 -1 +BITMAP +0208 +F910 +8FFC +8840 +93F8 +A040 +97FE +9088 +8F24 +8920 +8FFE +B124 +83A8 +8D12 +836E +ENDCHAR +STARTCHAR uni49E8 +ENCODING 18920 +BBX 14 16 1 -2 +BITMAP +00A0 +F4A4 +92A8 +90A0 +A7FC +A110 +C0A0 +A7FC +9040 +93F8 +9040 +D7FC +A150 +8248 +8C44 +8040 +ENDCHAR +STARTCHAR uni49E9 +ENCODING 18921 +BBX 14 16 1 -2 +BITMAP +0010 +F710 +9110 +A220 +AFBC +C528 +A548 +9728 +9528 +9728 +D528 +A590 +8710 +8D28 +8148 +8184 +ENDCHAR +STARTCHAR uni49EA +ENCODING 18922 +BBX 14 16 1 -2 +BITMAP +0040 +F020 +97FC +9420 +A5FC +A4A8 +C4A8 +A574 +9450 +9488 +9504 +D440 +A5FC +8888 +8870 +918C +ENDCHAR +STARTCHAR uni49EB +ENCODING 18923 +BBX 14 16 1 -2 +BITMAP +0040 +F7FC +9000 +A3F8 +A208 +C3F8 +A000 +97FC +9404 +93F8 +D080 +A748 +81B0 +8668 +81A4 +8660 +ENDCHAR +STARTCHAR uni49EC +ENCODING 18924 +BBX 14 16 1 -2 +BITMAP +0080 +F040 +97FC +A404 +A3F8 +C290 +A4A0 +93F8 +9608 +93F8 +D208 +A3F8 +8208 +83F8 +8110 +8208 +ENDCHAR +STARTCHAR uni49ED +ENCODING 18925 +BBX 14 16 1 -2 +BITMAP +0080 +F100 +97FC +A444 +A514 +C4A4 +A64C +94A4 +9554 +97FC +D080 +A048 +8544 +8514 +8910 +80F0 +ENDCHAR +STARTCHAR uni49EE +ENCODING 18926 +BBX 14 16 1 -2 +BITMAP +0040 +F7FC +9444 +A3F8 +A040 +C1F0 +A040 +93F8 +9040 +93F8 +D2A8 +A3F8 +8080 +8548 +8514 +88F4 +ENDCHAR +STARTCHAR uni49EF +ENCODING 18927 +BBX 14 16 1 -2 +BITMAP +03E0 +F420 +9FF8 +A408 +A7F8 +C448 +A770 +9444 +93FC +9420 +DFF8 +A488 +87F8 +81A0 +8294 +8C7C +ENDCHAR +STARTCHAR uni49F0 +ENCODING 18928 +BBX 15 16 0 -2 +BITMAP +0406 +E438 +AF08 +A910 +B224 +AFBC +CA88 +AA94 +AFBE +AA8A +AA88 +AFAC +C02A +954A +9548 +8018 +ENDCHAR +STARTCHAR uni49F1 +ENCODING 18929 +BBX 15 16 0 -2 +BITMAP +2050 +2048 +2080 +20FE +FD90 +2690 +24FC +2490 +2490 +24FC +2590 +2690 +4490 +40FE +8080 +0080 +ENDCHAR +STARTCHAR uni49F2 +ENCODING 18930 +BBX 15 16 0 -2 +BITMAP +0050 +7C48 +1080 +10FE +1190 +1290 +10FC +FE90 +1090 +10FC +1090 +1090 +1090 +10FE +1080 +1080 +ENDCHAR +STARTCHAR uni49F3 +ENCODING 18931 +BBX 15 16 0 -2 +BITMAP +0850 +0848 +0880 +08FE +4990 +4E90 +48FC +4890 +4890 +48FC +4890 +4E90 +5890 +E0FE +0080 +0080 +ENDCHAR +STARTCHAR uni49F4 +ENCODING 18932 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +1080 +FEFE +1190 +1290 +FCFC +0490 +0490 +48FC +2890 +1090 +2890 +44FE +8280 +0080 +ENDCHAR +STARTCHAR uni49F5 +ENCODING 18933 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +1080 +FEFE +9390 +1290 +10FC +2890 +2890 +28FC +2890 +4A90 +4C90 +88FE +0080 +0080 +ENDCHAR +STARTCHAR uni49F6 +ENCODING 18934 +BBX 15 16 0 -2 +BITMAP +0900 +0880 +1FFC +3080 +5FF8 +9080 +1FF8 +1080 +1FFC +1200 +0100 +FFFE +0000 +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni49F7 +ENCODING 18935 +BBX 15 16 0 -2 +BITMAP +2050 +2048 +3C80 +44FE +A990 +1290 +28FC +4490 +8290 +30FC +0890 +0090 +6090 +10FE +0880 +0080 +ENDCHAR +STARTCHAR uni49F8 +ENCODING 18936 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +1080 +10FE +FD90 +1290 +10FC +1090 +7C90 +44FC +4490 +4490 +4490 +7CFE +4480 +0080 +ENDCHAR +STARTCHAR uni49F9 +ENCODING 18937 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2250 +2248 +24FE +2490 +2D90 +36FE +2490 +2490 +24FE +4490 +4490 +84FE +0480 +ENDCHAR +STARTCHAR uni49FA +ENCODING 18938 +BBX 15 15 1 -1 +BITMAP +1044 +1044 +1088 +FDFE +1310 +1110 +21FC +2110 +7D10 +C510 +45FC +4510 +4510 +7D10 +01FE +ENDCHAR +STARTCHAR uni49FB +ENCODING 18939 +BBX 15 16 0 -2 +BITMAP +0850 +0848 +1480 +22FE +4190 +BE90 +00FC +0090 +3E90 +22FC +2290 +2290 +2290 +3EFE +2280 +0080 +ENDCHAR +STARTCHAR uni49FC +ENCODING 18940 +BBX 15 16 0 -2 +BITMAP +1050 +5048 +5080 +7CFE +5190 +9290 +10FC +FE90 +0090 +00FC +7C90 +4490 +4490 +44FE +7C80 +4480 +ENDCHAR +STARTCHAR uni49FD +ENCODING 18941 +BBX 15 16 0 -2 +BITMAP +0628 +7824 +0840 +4A7E +2AC8 +2D48 +087E +FF48 +1848 +1C7E +2A48 +2A48 +4848 +887E +0840 +0840 +ENDCHAR +STARTCHAR uni49FE +ENCODING 18942 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +2840 +44FE +8290 +7D90 +12FC +1090 +FE90 +10FC +1090 +7C90 +4490 +44FE +7C80 +4480 +ENDCHAR +STARTCHAR uni49FF +ENCODING 18943 +BBX 15 16 0 -2 +BITMAP +2428 +2424 +7E40 +247E +24C8 +FF48 +007E +7E48 +4248 +427E +7E48 +4248 +4248 +7E7E +4240 +0040 +ENDCHAR +STARTCHAR uni4A00 +ENCODING 18944 +BBX 15 16 0 -2 +BITMAP +2050 +1048 +2880 +44FE +9190 +1290 +54FC +3890 +1090 +FEFC +1090 +3890 +5490 +94FE +1080 +1080 +ENDCHAR +STARTCHAR uni4A01 +ENCODING 18945 +BBX 15 16 0 -2 +BITMAP +7E20 +243E +1848 +FFA8 +2910 +4A28 +9846 +0900 +1FFC +3080 +5FF8 +9080 +1FF8 +1080 +1FFC +1000 +ENDCHAR +STARTCHAR uni4A02 +ENCODING 18946 +BBX 14 16 0 -2 +BITMAP +0620 +3820 +08A4 +7EA8 +1920 +2C50 +4A88 +0904 +1FFC +3080 +5FF8 +9080 +1FF8 +1080 +1FFC +1000 +ENDCHAR +STARTCHAR uni4A03 +ENCODING 18947 +BBX 15 16 0 -2 +BITMAP +0028 +7E24 +4240 +7E7E +42C8 +7F48 +087E +FF48 +8148 +107E +FF48 +2248 +6448 +187E +2440 +C240 +ENDCHAR +STARTCHAR uni4A04 +ENCODING 18948 +BBX 15 15 1 -1 +BITMAP +3824 +4424 +BA48 +00FE +7D90 +0890 +FEFC +2890 +FE90 +AA90 +CEFC +8290 +FE90 +8290 +FEFE +ENDCHAR +STARTCHAR uni4A05 +ENCODING 18949 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +FE40 +107E +AAC8 +4548 +827E +7D48 +4448 +7C7E +4448 +7C48 +1048 +547E +9240 +3040 +ENDCHAR +STARTCHAR uni4A06 +ENCODING 18950 +BBX 15 16 0 -2 +BITMAP +4920 +2A3E +7F48 +4948 +5DA8 +6B10 +4928 +4146 +0A00 +1FF8 +3100 +5FF0 +9100 +1FF0 +1100 +1FF8 +ENDCHAR +STARTCHAR uni4A07 +ENCODING 18951 +BBX 15 16 0 -2 +BITMAP +2850 +2448 +7EFE +C990 +7EFC +4890 +7EFC +4890 +7EFE +4080 +7DFC +0488 +2850 +1020 +2858 +C586 +ENDCHAR +STARTCHAR uni4A08 +ENCODING 18952 +BBX 15 16 0 -2 +BITMAP +2050 +1048 +FE80 +82FE +7D90 +5690 +98FC +7C90 +C490 +7CFC +4490 +7C90 +4490 +7CFE +2880 +4480 +ENDCHAR +STARTCHAR uni4A09 +ENCODING 18953 +BBX 15 16 0 -2 +BITMAP +0028 +7724 +5540 +777E +55C8 +7748 +557E +7748 +2248 +557E +1048 +FF48 +2248 +647E +1C40 +E340 +ENDCHAR +STARTCHAR uni4A0A +ENCODING 18954 +BBX 15 16 0 -2 +BITMAP +0880 +1FFC +3080 +DFF8 +1080 +1FFC +1428 +3F7E +64C8 +BF7E +2448 +3F7E +1004 +1E7C +1244 +2244 +ENDCHAR +STARTCHAR uni4A0B +ENCODING 18955 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +00F0 +3F00 +0200 +03F8 +7E02 +0202 +01FE +ENDCHAR +STARTCHAR uni4A0C +ENCODING 18956 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +1FF0 +0000 +7FFC +0440 +0844 +1044 +603C +ENDCHAR +STARTCHAR uni4A0D +ENCODING 18957 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +0820 +3FF8 +0820 +0820 +FFFE +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni4A0E +ENCODING 18958 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +7F10 +0110 +7F10 +4020 +7F24 +0142 +0AFE +0442 +ENDCHAR +STARTCHAR uni4A0F +ENCODING 18959 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +4080 +2080 +09FC +1204 +2448 +E040 +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni4A10 +ENCODING 18960 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0100 +06C0 +1830 +E7CE +0000 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni4A11 +ENCODING 18961 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +8414 +0100 +FFFE +0100 +7FF8 +0108 +3FF8 +2100 +3FFC +0284 +044C +1830 +ENDCHAR +STARTCHAR uni4A12 +ENCODING 18962 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +7EFC +2244 +1224 +0A14 +1224 +2244 +4A94 +0408 +ENDCHAR +STARTCHAR uni4A13 +ENCODING 18963 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +3FF8 +2008 +27C8 +2448 +27C8 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni4A14 +ENCODING 18964 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +1110 +0920 +FFFE +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni4A15 +ENCODING 18965 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +11FC +4820 +2020 +0BFE +7020 +1020 +10A0 +0040 +ENDCHAR +STARTCHAR uni4A16 +ENCODING 18966 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0400 +7FFC +0800 +1FF0 +2810 +4FF0 +8810 +0FF0 +0810 +0850 +0820 +ENDCHAR +STARTCHAR uni4A17 +ENCODING 18967 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +00FC +7F00 +1210 +0920 +3FF0 +0040 +FFFE +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni4A18 +ENCODING 18968 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0442 +1842 +E03E +ENDCHAR +STARTCHAR uni4A19 +ENCODING 18969 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +2038 +13C0 +8040 +4840 +17FE +E040 +2040 +23FC +ENDCHAR +STARTCHAR uni4A1A +ENCODING 18970 +BBX 15 15 0 -1 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0800 +1FF8 +6488 +0908 +3628 +0110 +4894 +87F2 +ENDCHAR +STARTCHAR uni4A1B +ENCODING 18971 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +100C +FDF0 +1100 +39FE +5510 +9210 +1210 +1410 +ENDCHAR +STARTCHAR uni4A1C +ENCODING 18972 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +3E7C +2244 +3E7C +2244 +3E7C +2244 +4A94 +8508 +ENDCHAR +STARTCHAR uni4A1D +ENCODING 18973 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +0100 +3FF8 +0100 +FFFE +1010 +1FF0 +1010 +1FF0 +1010 +1030 +ENDCHAR +STARTCHAR uni4A1E +ENCODING 18974 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +01F8 +7F00 +0100 +1FF0 +1110 +7FFC +4124 +41F4 +5E14 +4008 +ENDCHAR +STARTCHAR uni4A1F +ENCODING 18975 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +2000 +1040 +83F8 +4040 +17FC +2040 +E3F8 +2040 +2FFE +ENDCHAR +STARTCHAR uni4A20 +ENCODING 18976 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +8414 +1FF0 +1010 +1FF0 +1010 +1FF0 +0800 +1FFC +2104 +5284 +1454 +1FE8 +ENDCHAR +STARTCHAR uni4A21 +ENCODING 18977 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +1FE0 +0040 +5194 +4924 +5514 +4204 +7FFC +0004 +ENDCHAR +STARTCHAR uni4A22 +ENCODING 18978 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0820 +7FFC +0820 +0FE0 +0820 +0FE0 +0820 +FFFE +1240 +1420 +1FF8 +ENDCHAR +STARTCHAR uni4A23 +ENCODING 18979 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0820 +7FFC +0820 +0FE0 +0100 +3FF8 +2108 +3FF8 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni4A24 +ENCODING 18980 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +2040 +1040 +07FC +F444 +17FC +1444 +17FC +2800 +47FE +ENDCHAR +STARTCHAR uni4A25 +ENCODING 18981 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0900 +1FF8 +3100 +5FF0 +9100 +1FFC +1000 +3FF0 +0820 +07C0 +F83E +ENDCHAR +STARTCHAR uni4A26 +ENCODING 18982 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0200 +3FF8 +0820 +7FFC +4104 +3FF8 +0400 +07F0 +0810 +1050 +2020 +ENDCHAR +STARTCHAR uni4A27 +ENCODING 18983 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +2020 +1050 +FE88 +0526 +4410 +28FC +2E08 +F070 +4008 +ENDCHAR +STARTCHAR uni4A28 +ENCODING 18984 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0080 +2100 +13F8 +0208 +F3F8 +1200 +13FC +1204 +13FC +2800 +47FE +ENDCHAR +STARTCHAR uni4A29 +ENCODING 18985 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +FFFE +8102 +BC7A +0010 +7C10 +00FE +FE92 +10FE +5492 +54FE +9410 +1010 +ENDCHAR +STARTCHAR uni4A2A +ENCODING 18986 +BBX 15 15 0 -1 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +11FC +1124 +11FC +FD24 +11FC +1020 +1DFC +E020 +43FE +ENDCHAR +STARTCHAR uni4A2B +ENCODING 18987 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +0100 +7FFC +1110 +2BA8 +4564 +1918 +E3E6 +0E40 +0180 +0E40 +ENDCHAR +STARTCHAR uni4A2C +ENCODING 18988 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +2000 +1110 +8110 +4FBC +1110 +E3B8 +2554 +2912 +2110 +ENDCHAR +STARTCHAR uni4A2D +ENCODING 18989 +BBX 14 16 0 -2 +BITMAP +0010 +7F10 +0854 +FFB8 +8890 +6B7C +0844 +6B44 +007C +7E44 +0044 +FF7C +1044 +2244 +7F54 +0148 +ENDCHAR +STARTCHAR uni4A2E +ENCODING 18990 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +9414 +FEFE +1010 +7C7C +1010 +FEFE +1010 +3FF8 +0008 +1FF8 +0008 +3FF8 +ENDCHAR +STARTCHAR uni4A2F +ENCODING 18991 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0020 +7BFE +4820 +51FC +6124 +51FC +4924 +49FC +6870 +50A8 +4124 +ENDCHAR +STARTCHAR uni4A30 +ENCODING 18992 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +8414 +2110 +17FC +9110 +41F0 +4840 +0BF8 +1248 +E3F8 +2040 +2FFE +2040 +ENDCHAR +STARTCHAR uni4A31 +ENCODING 18993 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +1200 +27FC +4208 +8BF8 +1208 +33F8 +5100 +93F8 +1510 +10E0 +171E +ENDCHAR +STARTCHAR uni4A32 +ENCODING 18994 +BBX 15 16 0 -2 +BITMAP +0020 +7F20 +083C +FFC4 +8888 +6B7E +0852 +6B52 +007E +FF90 +082C +7F2A +5528 +554A +554A +4386 +ENDCHAR +STARTCHAR uni4A33 +ENCODING 18995 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +3EF8 +2288 +3EF8 +2288 +3EF8 +2288 +3EF8 +1450 +2692 +450E +ENDCHAR +STARTCHAR uni4A34 +ENCODING 18996 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +5508 +3608 +7F7E +1408 +7F48 +0828 +3E28 +0808 +0F28 +7810 +ENDCHAR +STARTCHAR uni4A35 +ENCODING 18997 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +A7FC +10A0 +17FC +84A4 +47FC +5208 +13F8 +2208 +E3F8 +2040 +27FC +2040 +ENDCHAR +STARTCHAR uni4A36 +ENCODING 18998 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0820 +1FF0 +0010 +4FE4 +4AA4 +4964 +7FFC +0440 +FC7C +2444 +4444 +ENDCHAR +STARTCHAR uni4A37 +ENCODING 18999 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +1108 +7BCE +1108 +3B88 +557E +BF92 +2094 +3F88 +2094 +21A2 +ENDCHAR +STARTCHAR uni4A38 +ENCODING 19000 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0018 +7BE0 +4950 +53F8 +6040 +53F8 +4808 +49F8 +6840 +5294 +44F4 +ENDCHAR +STARTCHAR uni4A39 +ENCODING 19001 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +1080 +11FC +2288 +2870 +6B8E +A9FC +29AC +2974 +29FC +2820 +2154 +ENDCHAR +STARTCHAR uni4A3A +ENCODING 19002 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +9FF4 +0440 +0FE0 +0000 +7C7C +1010 +FEFE +9292 +5454 +FEFE +2828 +7C7C +ENDCHAR +STARTCHAR uni4A3B +ENCODING 19003 +BBX 15 15 0 -1 +BITMAP +7C7C +1010 +FEFE +9292 +7C7C +5454 +7C7C +0000 +7C7C +1010 +FEFE +9292 +7C7C +5454 +7C7C +ENDCHAR +STARTCHAR uni4A3C +ENCODING 19004 +BBX 15 16 0 -2 +BITMAP +1044 +11FE +FE54 +1048 +7CFE +1190 +FEFE +0090 +7CFE +4490 +7CFE +4480 +7DFE +4444 +5438 +49C6 +ENDCHAR +STARTCHAR uni4A3D +ENCODING 19005 +BBX 13 16 1 -2 +BITMAP +0880 +F8F8 +0880 +78F0 +0880 +F8F8 +0880 +0880 +7FE0 +0020 +0020 +7FE0 +4000 +4008 +4008 +3FF8 +ENDCHAR +STARTCHAR uni4A3E +ENCODING 19006 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2120 +2120 +2F3C +2120 +2120 +2738 +2120 +2120 +4F3C +4120 +8120 +0120 +ENDCHAR +STARTCHAR uni4A3F +ENCODING 19007 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0200 +FFFE +0820 +3018 +C446 +0440 +7C7C +0440 +3C78 +0440 +7C7C +0440 +0440 +ENDCHAR +STARTCHAR uni4A40 +ENCODING 19008 +BBX 13 16 1 -2 +BITMAP +0880 +F8F8 +0880 +78F0 +0880 +F8F8 +0880 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +1040 +2020 +ENDCHAR +STARTCHAR uni4A41 +ENCODING 19009 +BBX 15 16 0 -2 +BITMAP +0440 +7C7C +0440 +3C78 +0440 +7C7C +0440 +3FF0 +0200 +7FF8 +0202 +0DFE +7040 +1C78 +F1C4 +1C3C +ENDCHAR +STARTCHAR uni4A42 +ENCODING 19010 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +1020 +2050 +FE50 +AA88 +AB44 +BA22 +AA20 +AAF8 +BA08 +AA08 +AA10 +FE10 +8220 +0020 +ENDCHAR +STARTCHAR uni4A43 +ENCODING 19011 +BBX 15 15 0 -1 +BITMAP +0010 +FE90 +1090 +2092 +FE92 +AA94 +AAF4 +BA98 +AA90 +AA90 +BA90 +AA92 +AAB2 +FED2 +828E +ENDCHAR +STARTCHAR uni4A44 +ENCODING 19012 +BBX 15 15 0 -2 +BITMAP +FE7C +1044 +2044 +FE54 +AA54 +AA54 +BA54 +AA54 +AA54 +BA10 +AA28 +AA28 +FE4A +828A +0106 +ENDCHAR +STARTCHAR uni4A45 +ENCODING 19013 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +1010 +20FE +FE92 +AA94 +AA90 +BAFC +AAA4 +AAA4 +BAA8 +AAA8 +AA90 +FEA8 +8344 +0282 +ENDCHAR +STARTCHAR uni4A46 +ENCODING 19014 +BBX 15 16 0 -2 +BITMAP +0040 +FE40 +1040 +207E +FEA0 +AAA0 +AB20 +BA3E +AA20 +AA20 +BA20 +AA3E +AA20 +FE20 +8220 +0020 +ENDCHAR +STARTCHAR uni4A47 +ENCODING 19015 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +1010 +2010 +FE1E +AA10 +AA10 +BA10 +AAFE +AA82 +BA82 +AA82 +AA82 +FE82 +82FE +0082 +ENDCHAR +STARTCHAR uni4A48 +ENCODING 19016 +BBX 15 16 0 -2 +BITMAP +0040 +FE40 +107E +2080 +FF7C +AA44 +AA64 +BA54 +ABFE +AA44 +BAA4 +AA94 +AAFE +FE04 +8228 +0010 +ENDCHAR +STARTCHAR uni4A49 +ENCODING 19017 +BBX 15 16 0 -2 +BITMAP +0014 +FE12 +10FE +2010 +FE10 +AAFE +AA92 +BA92 +AAFE +AA92 +BA92 +AAFE +AA92 +FE92 +8292 +0086 +ENDCHAR +STARTCHAR uni4A4A +ENCODING 19018 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +10FE +2082 +FE40 +AA4E +AA6A +BAAA +AAAA +AAAA +BB6C +AA28 +AA4A +FE4A +828A +0106 +ENDCHAR +STARTCHAR uni4A4B +ENCODING 19019 +BBX 15 16 0 -2 +BITMAP +0010 +FE08 +10FE +20A4 +FEA4 +AAA4 +AAFE +BAA4 +AAA4 +AAF6 +BAAC +AAB4 +AAA4 +FEA4 +8324 +0024 +ENDCHAR +STARTCHAR uni4A4C +ENCODING 19020 +BBX 15 16 0 -2 +BITMAP +0028 +FE24 +1040 +207E +FEC8 +AB48 +AA7E +BA48 +AA48 +AA7E +BA48 +AA48 +AA7E +FE40 +82AA +012A +ENDCHAR +STARTCHAR uni4A4D +ENCODING 19021 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +10FE +2010 +FEAA +AA44 +AA82 +BB7C +AA44 +AA7C +BA44 +AA7C +AA10 +FE54 +8292 +0030 +ENDCHAR +STARTCHAR uni4A4E +ENCODING 19022 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +1028 +2044 +FE82 +AA7C +AA00 +BAEE +AAAA +AAAA +BAEE +AA44 +AA44 +FEAA +82AA +0112 +ENDCHAR +STARTCHAR uni4A4F +ENCODING 19023 +BBX 15 16 0 -2 +BITMAP +0024 +FEFE +1024 +2000 +FEFE +AAAA +AAAA +BAFE +AA14 +AAFE +BA90 +AAD2 +AAAC +FEAA +8296 +0122 +ENDCHAR +STARTCHAR uni4A50 +ENCODING 19024 +BBX 15 16 0 -2 +BITMAP +2220 +2220 +FF20 +227E +3E40 +0880 +7F3C +4904 +4908 +7F10 +0820 +FFC0 +0842 +0842 +083E +0800 +ENDCHAR +STARTCHAR uni4A51 +ENCODING 19025 +BBX 15 16 0 -2 +BITMAP +2200 +227E +FF02 +2202 +3E02 +083E +7F20 +4920 +4940 +7F7E +0802 +FF82 +0802 +0802 +0814 +0808 +ENDCHAR +STARTCHAR uni4A52 +ENCODING 19026 +BBX 15 16 0 -2 +BITMAP +2200 +227E +FF10 +2210 +3E10 +0810 +7F10 +49FE +4910 +7F10 +0810 +FF90 +0810 +0810 +0850 +0820 +ENDCHAR +STARTCHAR uni4A53 +ENCODING 19027 +BBX 15 16 0 -2 +BITMAP +2880 +2880 +FC80 +28FE +3902 +1242 +7C42 +5482 +54A2 +7D12 +13FA +FD0A +1002 +1002 +1014 +1008 +ENDCHAR +STARTCHAR uni4A54 +ENCODING 19028 +BBX 15 16 0 -2 +BITMAP +2800 +28F8 +FE88 +2888 +3888 +1106 +7E00 +55FC +5484 +7C84 +1048 +FE50 +1020 +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni4A55 +ENCODING 19029 +BBX 15 16 0 -2 +BITMAP +2800 +2840 +FD9E +2912 +3912 +1112 +7D12 +5512 +5512 +7D12 +115A +FD94 +1110 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni4A56 +ENCODING 19030 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +FE20 +28A8 +38A4 +10A2 +7D22 +5520 +5624 +7C24 +1028 +FE08 +1010 +1020 +10C0 +1300 +ENDCHAR +STARTCHAR uni4A57 +ENCODING 19031 +BBX 14 16 0 -2 +BITMAP +2800 +28FC +FE84 +2884 +3884 +10FC +7C84 +5484 +5484 +7CFC +1084 +FE84 +1104 +1104 +1214 +1408 +ENDCHAR +STARTCHAR uni4A58 +ENCODING 19032 +BBX 15 16 0 -2 +BITMAP +2200 +2200 +FF7E +2208 +3E10 +0810 +7F24 +4944 +4978 +7F08 +0810 +FF94 +0822 +087E +0822 +0800 +ENDCHAR +STARTCHAR uni4A59 +ENCODING 19033 +BBX 15 16 0 -2 +BITMAP +2820 +2810 +FE10 +29FE +3820 +1020 +7C44 +5484 +55F8 +7C10 +1020 +FE44 +1082 +11FE +1082 +1000 +ENDCHAR +STARTCHAR uni4A5A +ENCODING 19034 +BBX 15 16 0 -2 +BITMAP +2804 +281E +FDF0 +2910 +3910 +1110 +7D10 +55FE +5510 +7D10 +1110 +FD08 +110A +114A +11A6 +1112 +ENDCHAR +STARTCHAR uni4A5B +ENCODING 19035 +BBX 15 16 0 -2 +BITMAP +2840 +2820 +FC28 +2808 +3808 +1048 +7C54 +5552 +5552 +7D60 +1260 +FC44 +10C4 +1144 +123C +1000 +ENDCHAR +STARTCHAR uni4A5C +ENCODING 19036 +BBX 14 16 0 -2 +BITMAP +2820 +2820 +FE20 +2820 +39FC +1124 +7D24 +5524 +5524 +7DFC +1124 +FF24 +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni4A5D +ENCODING 19037 +BBX 15 16 0 -2 +BITMAP +2808 +281C +FDF0 +2950 +3950 +1150 +7D50 +5550 +5550 +7D48 +1148 +FD68 +1154 +1274 +1252 +1400 +ENDCHAR +STARTCHAR uni4A5E +ENCODING 19038 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +FE20 +2820 +383E +1020 +7C20 +5420 +55FC +7D04 +1104 +FF04 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni4A5F +ENCODING 19039 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +FDFE +2820 +39FC +1024 +7DFC +5520 +55FE +7C22 +102A +FC54 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni4A60 +ENCODING 19040 +BBX 15 16 0 -2 +BITMAP +5000 +5006 +FBB8 +5088 +7088 +2108 +F93E +AB88 +A888 +FA88 +2288 +F93E +2100 +2280 +247E +2800 +ENDCHAR +STARTCHAR uni4A61 +ENCODING 19041 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +FC20 +2BFE +3820 +1020 +7D24 +5524 +5524 +7EAA +1020 +FC50 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni4A62 +ENCODING 19042 +BBX 15 16 0 -2 +BITMAP +5104 +510E +F930 +5120 +77E0 +2120 +F93E +A964 +A9A4 +FF24 +2124 +F924 +2124 +2124 +2544 +2284 +ENDCHAR +STARTCHAR uni4A63 +ENCODING 19043 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +FC50 +2888 +3904 +12FA +7C20 +5420 +57FE +7C20 +1128 +FD24 +1222 +1422 +10A0 +1040 +ENDCHAR +STARTCHAR uni4A64 +ENCODING 19044 +BBX 15 16 0 -2 +BITMAP +2800 +28FC +FE84 +2884 +38FC +1084 +7C84 +54FC +5484 +7C84 +10FC +FE50 +1050 +1092 +1112 +120E +ENDCHAR +STARTCHAR uni4A65 +ENCODING 19045 +BBX 15 16 0 -2 +BITMAP +5004 +500E +FBB8 +5088 +7088 +2128 +F92E +ABA8 +A8A8 +FAA8 +22A8 +F93E +2100 +2280 +247E +2800 +ENDCHAR +STARTCHAR uni4A66 +ENCODING 19046 +BBX 15 16 0 -2 +BITMAP +1080 +20FC +6910 +AA90 +2860 +2890 +230C +0440 +7FFC +0440 +07C0 +0100 +1FF0 +1110 +FFFE +0100 +ENDCHAR +STARTCHAR uni4A67 +ENCODING 19047 +BBX 15 16 0 -2 +BITMAP +2840 +2820 +FDFE +2800 +3800 +10FC +7C00 +5400 +54FC +7C00 +1000 +FCFC +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni4A68 +ENCODING 19048 +BBX 15 16 0 -2 +BITMAP +2800 +28FC +FE80 +28F8 +3880 +10F8 +7C80 +57FE +5540 +7D24 +1128 +FF10 +1108 +1144 +1182 +1100 +ENDCHAR +STARTCHAR uni4A69 +ENCODING 19049 +BBX 15 16 0 -2 +BITMAP +5040 +5020 +FBFE +5202 +7504 +2100 +F9DE +AA52 +AA52 +FB52 +249A +F894 +2110 +2112 +2212 +240E +ENDCHAR +STARTCHAR uni4A6A +ENCODING 19050 +BBX 15 16 0 -2 +BITMAP +2820 +2810 +FDFE +2902 +3A04 +10F8 +7C88 +5488 +54F8 +7C80 +1080 +FCFC +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni4A6B +ENCODING 19051 +BBX 15 16 0 -2 +BITMAP +5000 +53FE +F820 +5020 +73FE +2222 +FA22 +AB32 +AAAA +FAAA +2376 +FA66 +2222 +2222 +222A +2204 +ENDCHAR +STARTCHAR uni4A6C +ENCODING 19052 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +FDFE +2820 +38FC +1040 +7DFE +5488 +5524 +7E22 +10F8 +FC20 +11FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni4A6D +ENCODING 19053 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +FDFC +2850 +3888 +1104 +7FFE +5408 +55E8 +7D28 +1128 +FDE8 +1128 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni4A6E +ENCODING 19054 +BBX 15 16 0 -2 +BITMAP +2800 +29F8 +FC08 +2808 +39F8 +1008 +7C08 +57FE +5420 +7E22 +1174 +FCA8 +1124 +1222 +10A0 +1040 +ENDCHAR +STARTCHAR uni4A6F +ENCODING 19055 +BBX 15 16 0 -2 +BITMAP +5000 +53FC +F808 +5010 +7020 +23AE +FAA2 +AAAA +AAA4 +FAA4 +23AA +F832 +20A0 +2040 +27FE +2000 +ENDCHAR +STARTCHAR uni4A70 +ENCODING 19056 +BBX 15 16 0 -2 +BITMAP +2800 +28F8 +FE88 +2888 +38F8 +1000 +7DFE +5488 +54F8 +7C88 +10F8 +FE88 +109E +13E8 +1008 +1008 +ENDCHAR +STARTCHAR uni4A71 +ENCODING 19057 +BBX 15 16 0 -2 +BITMAP +5040 +50A0 +F910 +5208 +75F6 +2000 +FBC4 +AA54 +AA54 +FBD4 +2254 +FA54 +23D4 +2244 +2254 +22C8 +ENDCHAR +STARTCHAR uni4A72 +ENCODING 19058 +BBX 15 16 0 -2 +BITMAP +2840 +2820 +FDFE +2948 +3948 +11FE +7D48 +5578 +5500 +7DFC +1144 +FD48 +1128 +1210 +1228 +14C6 +ENDCHAR +STARTCHAR uni4A73 +ENCODING 19059 +BBX 15 16 0 -2 +BITMAP +2840 +2820 +FDFE +2922 +38A4 +1128 +7C50 +5488 +5504 +7CF8 +1088 +FC88 +1050 +1020 +10D8 +1306 +ENDCHAR +STARTCHAR uni4A74 +ENCODING 19060 +BBX 15 16 0 -2 +BITMAP +2880 +289E +FC92 +29D2 +3892 +109E +7C92 +55D2 +5552 +7D5E +1152 +FD52 +11D2 +1022 +102A +1044 +ENDCHAR +STARTCHAR uni4A75 +ENCODING 19061 +BBX 15 16 0 -2 +BITMAP +2800 +2BFE +FE22 +2820 +3BFE +1020 +7DFC +5524 +55FC +7D24 +11FC +FC20 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni4A76 +ENCODING 19062 +BBX 15 16 0 -2 +BITMAP +2820 +2924 +FD24 +29FC +3820 +11FE +7C00 +5420 +55FC +7D24 +1124 +FDFC +1020 +1024 +13FE +1102 +ENDCHAR +STARTCHAR uni4A77 +ENCODING 19063 +BBX 15 16 0 -2 +BITMAP +2820 +2810 +FDFE +2884 +3848 +11FE +7D02 +5624 +5410 +7DFE +1040 +FC7C +1044 +1084 +1094 +1108 +ENDCHAR +STARTCHAR uni4A78 +ENCODING 19064 +BBX 15 16 0 -2 +BITMAP +2888 +2888 +FDFE +2888 +3800 +11FE +7C88 +5488 +54F8 +7C88 +10F8 +FC88 +109E +11E8 +1008 +1008 +ENDCHAR +STARTCHAR uni4A79 +ENCODING 19065 +BBX 15 16 0 -2 +BITMAP +2800 +28FE +FE00 +287C +3844 +107C +7C00 +54FE +5482 +7CAA +1092 +FEFE +1092 +1092 +1092 +1086 +ENDCHAR +STARTCHAR uni4A7A +ENCODING 19066 +BBX 15 16 0 -2 +BITMAP +5090 +5088 +F904 +5242 +7488 +21FC +F804 +A800 +ABDE +F842 +2252 +F94A +2252 +2042 +214A +2084 +ENDCHAR +STARTCHAR uni4A7B +ENCODING 19067 +BBX 15 16 0 -2 +BITMAP +2800 +29FE +FD20 +29FC +3920 +11FC +7D20 +5520 +55FE +7C02 +12AA +FEAA +12AA +1202 +1014 +1008 +ENDCHAR +STARTCHAR uni4A7C +ENCODING 19068 +BBX 15 16 0 -2 +BITMAP +2820 +2A20 +FD7C +28A4 +3818 +10E6 +7F10 +557E +5510 +7D7C +1110 +FDFE +1110 +1110 +12FE +1400 +ENDCHAR +STARTCHAR uni4A7D +ENCODING 19069 +BBX 15 16 0 -2 +BITMAP +5000 +53FE +FA00 +527C +7244 +2244 +FA7C +AA00 +AAEE +FAAA +22AA +FAAA +22EE +2200 +23FE +2000 +ENDCHAR +STARTCHAR uni4A7E +ENCODING 19070 +BBX 15 16 0 -2 +BITMAP +5040 +5020 +FBFE +5200 +7248 +2248 +FBFE +AA48 +AA48 +FA48 +2278 +FA00 +2554 +252A +2A2A +3000 +ENDCHAR +STARTCHAR uni4A7F +ENCODING 19071 +BBX 15 16 0 -2 +BITMAP +2820 +29FC +FC20 +2888 +3BFE +1088 +7DFC +5504 +55FC +7D04 +11FC +FD04 +11FC +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni4A80 +ENCODING 19072 +BBX 15 16 0 -2 +BITMAP +2820 +29FE +FF02 +28F8 +3888 +10F8 +7C80 +54FC +5484 +7CFC +1000 +FE20 +1054 +1142 +114A +1238 +ENDCHAR +STARTCHAR uni4A81 +ENCODING 19073 +BBX 15 16 0 -2 +BITMAP +2850 +2952 +FCD4 +2850 +39FE +1088 +7C50 +55FE +5420 +7CFC +1020 +FDFE +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni4A82 +ENCODING 19074 +BBX 15 16 0 -2 +BITMAP +5208 +5208 +FFBE +5208 +7208 +2FBE +FAAA +AAAA +AAAA +FBAE +2208 +FF1C +2AAA +3248 +2208 +2208 +ENDCHAR +STARTCHAR uni4A83 +ENCODING 19075 +BBX 15 16 0 -2 +BITMAP +5108 +5088 +FBC8 +5010 +73DE +2264 +FBD4 +A814 +ABD4 +F854 +2094 +F8E8 +2388 +2094 +2294 +2122 +ENDCHAR +STARTCHAR uni4A84 +ENCODING 19076 +BBX 15 16 0 -2 +BITMAP +2888 +2888 +FDFC +2888 +3888 +13FE +7C20 +55FC +5524 +7DFC +1124 +FDFC +1000 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni4A85 +ENCODING 19077 +BBX 15 16 0 -2 +BITMAP +2800 +29FC +FD54 +2954 +39FC +1080 +7DFE +5642 +55F2 +7D52 +1152 +FDF2 +104A +13FA +100A +1004 +ENDCHAR +STARTCHAR uni4A86 +ENCODING 19078 +BBX 15 16 0 -2 +BITMAP +2850 +29FC +FD54 +29FC +3954 +11FC +7C00 +55FC +5400 +7DFC +1104 +FDFC +1088 +1050 +13FE +1000 +ENDCHAR +STARTCHAR uni4A87 +ENCODING 19079 +BBX 15 16 0 -2 +BITMAP +2888 +2BFE +FC88 +2824 +3BFE +1020 +7DFC +5524 +55FC +7D24 +11FC +FD24 +1008 +11FE +1088 +1058 +ENDCHAR +STARTCHAR uni4A88 +ENCODING 19080 +BBX 15 16 0 -2 +BITMAP +2810 +287C +FE54 +297C +3910 +10FE +7C00 +577C +5544 +7D7C +1140 +FD7C +1144 +117C +1280 +147E +ENDCHAR +STARTCHAR uni4A89 +ENCODING 19081 +BBX 15 16 0 -2 +BITMAP +5124 +5248 +F924 +5000 +73FC +2294 +FA64 +AA94 +ABFC +FA48 +2368 +FA48 +236A +224A +2246 +2362 +ENDCHAR +STARTCHAR uni4A8A +ENCODING 19082 +BBX 15 16 0 -2 +BITMAP +5110 +5090 +FBDE +5010 +725E +2182 +FBDE +A810 +ABDE +FA50 +23DE +FA50 +23DE +2250 +2252 +22CE +ENDCHAR +STARTCHAR uni4A8B +ENCODING 19083 +BBX 15 16 0 -2 +BITMAP +2810 +287C +FE54 +297C +3910 +10FE +7C44 +577C +5544 +7D7C +1144 +FD7C +1128 +1144 +1280 +147E +ENDCHAR +STARTCHAR uni4A8C +ENCODING 19084 +BBX 15 16 0 -2 +BITMAP +51F0 +5210 +FBFC +5604 +73FC +2224 +FBB8 +AA22 +A9FE +FA10 +27FC +FA44 +23FC +20D0 +214A +263E +ENDCHAR +STARTCHAR uni4A8D +ENCODING 19085 +BBX 15 16 0 -2 +BITMAP +53DE +5252 +FBDE +5252 +73DE +2222 +FAFA +AA22 +AAFA +FAAA +22FA +FAAA +22FA +2272 +22AA +2226 +ENDCHAR +STARTCHAR uni4A8E +ENCODING 19086 +BBX 15 16 0 -2 +BITMAP +5222 +53FE +F890 +51FE +7310 +25FE +F910 +A9FE +A910 +F9FE +2100 +FBFE +228A +2376 +2252 +2276 +ENDCHAR +STARTCHAR uni4A8F +ENCODING 19087 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +7E10 +22FE +FF92 +0092 +7E92 +42AA +7EAA +08CA +7E82 +0882 +4882 +7E82 +088A +0884 +ENDCHAR +STARTCHAR uni4A90 +ENCODING 19088 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +7C28 +2408 +FE08 +0048 +7C54 +4552 +7D52 +1160 +7E60 +1044 +50C4 +7D44 +123C +1000 +ENDCHAR +STARTCHAR uni4A91 +ENCODING 19089 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +7E10 +22FE +FF82 +0084 +7E40 +4244 +7E48 +0850 +7E60 +0842 +4842 +7E42 +083E +0800 +ENDCHAR +STARTCHAR uni4A92 +ENCODING 19090 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +7E00 +22FE +FF10 +0010 +7E10 +4210 +7E7C +0810 +7E10 +0810 +4810 +7E10 +08FE +0800 +ENDCHAR +STARTCHAR uni4A93 +ENCODING 19091 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +7E20 +2220 +FF3C +0020 +7E20 +4220 +7EFC +0884 +7E84 +0884 +4884 +7E84 +08FC +0884 +ENDCHAR +STARTCHAR uni4A94 +ENCODING 19092 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +7DFE +2420 +FE20 +01FC +7D24 +4524 +7DFC +1124 +7D24 +11FC +5124 +7D24 +1124 +110C +ENDCHAR +STARTCHAR uni4A95 +ENCODING 19093 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +7CFE +2502 +FE22 +00AA +7C72 +4422 +7DFE +1022 +7C72 +10AA +5122 +7C22 +100A +1004 +ENDCHAR +STARTCHAR uni4A96 +ENCODING 19094 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +7E7E +2280 +FF7C +0044 +7E7C +4244 +7E7C +0820 +7E3C +0844 +48A8 +7E10 +0828 +08C6 +ENDCHAR +STARTCHAR uni4A97 +ENCODING 19095 +BBX 15 16 0 -2 +BITMAP +1000 +11DC +7D44 +2544 +FF44 +01DC +7D00 +4500 +7DDC +1114 +7D14 +11D4 +5108 +7D08 +1114 +1122 +ENDCHAR +STARTCHAR uni4A98 +ENCODING 19096 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +7C84 +2484 +FEFC +0084 +7C84 +44FC +7C00 +11FE +7C10 +1090 +509C +7C90 +1150 +123E +ENDCHAR +STARTCHAR uni4A99 +ENCODING 19097 +BBX 15 16 0 -2 +BITMAP +1014 +1012 +7DFE +2410 +FEFE +0092 +7CFE +4492 +7CFE +1092 +7C04 +11FE +5044 +7C24 +1024 +100C +ENDCHAR +STARTCHAR uni4A9A +ENCODING 19098 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +7D04 +25FC +FF04 +01FC +7C00 +47DE +7C42 +1252 +7D4A +10C6 +535A +7C42 +114A +1084 +ENDCHAR +STARTCHAR uni4A9B +ENCODING 19099 +BBX 15 16 0 -2 +BITMAP +101E +10F0 +7C92 +2454 +FEFE +0054 +7C92 +4500 +7CFE +1092 +7C92 +10FE +5092 +7C92 +10FE +1082 +ENDCHAR +STARTCHAR uni4A9C +ENCODING 19100 +BBX 15 16 0 -2 +BITMAP +1040 +1078 +7C88 +25FE +FEA4 +00D2 +7CFE +4480 +7CBC +1080 +7CBC +1080 +50BC +7D24 +113C +1224 +ENDCHAR +STARTCHAR uni4A9D +ENCODING 19101 +BBX 15 16 0 -2 +BITMAP +1044 +11FE +7C54 +2448 +FEFE +0190 +7CFE +4490 +7CFE +1090 +7CFE +1080 +51FE +7C44 +1038 +11C6 +ENDCHAR +STARTCHAR uni4A9E +ENCODING 19102 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +FFFE +0280 +0440 +1830 +E44E +0440 +7C7C +0440 +3C78 +0440 +7C7C +0440 +FFFE +ENDCHAR +STARTCHAR uni4A9F +ENCODING 19103 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +FE88 +1050 +1020 +7C50 +558C +5450 +55DC +5450 +55DC +5C50 +11DC +1050 +13FE +1000 +ENDCHAR +STARTCHAR uni4AA0 +ENCODING 19104 +BBX 15 16 0 -2 +BITMAP +1640 +F87C +9084 +FE28 +3220 +5250 +968C +1000 +0440 +7C7C +0440 +3C78 +0440 +7C7C +0440 +FFFE +ENDCHAR +STARTCHAR uni4AA1 +ENCODING 19105 +BBX 15 16 0 -2 +BITMAP +1120 +1CBE +7042 +5094 +7D90 +34A8 +5C46 +9000 +0440 +7C7C +0440 +3C78 +0440 +7C7C +0440 +FFFE +ENDCHAR +STARTCHAR uni4AA2 +ENCODING 19106 +BBX 15 16 0 -2 +BITMAP +1220 +1D3E +7042 +5094 +5310 +5128 +7D46 +1450 +35DC +3450 +55DC +9850 +11DC +1050 +13FE +1000 +ENDCHAR +STARTCHAR uni4AA3 +ENCODING 19107 +BBX 15 16 0 -2 +BITMAP +1220 +113E +1042 +FC94 +1310 +1128 +7C46 +5450 +55DC +5450 +5DDC +3050 +51DC +9050 +13FE +1000 +ENDCHAR +STARTCHAR uni4AA4 +ENCODING 19108 +BBX 15 16 0 -2 +BITMAP +281E +29F0 +2892 +EE54 +29FE +2854 +EE92 +2900 +28FE +2892 +EE92 +28FE +2892 +2E92 +F0FE +4082 +ENDCHAR +STARTCHAR uni4AA5 +ENCODING 19109 +BBX 15 16 0 -2 +BITMAP +1000 +1EFC +1044 +FF28 +8110 +7E28 +00C6 +7E28 +42EE +7E28 +42EE +7E28 +42EE +7E28 +24FE +4200 +ENDCHAR +STARTCHAR uni4AA6 +ENCODING 19110 +BBX 14 16 0 -2 +BITMAP +2000 +1000 +7CF8 +0020 +4420 +2820 +FE20 +0020 +7C20 +4420 +4420 +7C20 +4420 +4420 +7DFC +4400 +ENDCHAR +STARTCHAR uni4AA7 +ENCODING 19111 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +7C20 +00A0 +44AC +28B4 +FEE4 +01A4 +7CA4 +44B4 +44A8 +7CA2 +44A2 +4482 +7C7E +4400 +ENDCHAR +STARTCHAR uni4AA8 +ENCODING 19112 +BBX 14 16 0 -2 +BITMAP +2040 +1040 +7C40 +00FC +4484 +2904 +FE04 +0084 +7C44 +4444 +4444 +7C04 +4404 +4404 +7C28 +4410 +ENDCHAR +STARTCHAR uni4AA9 +ENCODING 19113 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +7C20 +0050 +4450 +2888 +FF44 +0222 +7C20 +44F8 +4408 +7C08 +4410 +4410 +7C20 +4420 +ENDCHAR +STARTCHAR uni4AAA +ENCODING 19114 +BBX 15 16 0 -2 +BITMAP +1000 +7E7C +1244 +2244 +4A7C +8444 +0100 +3FF8 +0820 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni4AAB +ENCODING 19115 +BBX 15 16 0 -2 +BITMAP +2000 +10FE +7C00 +0052 +44A4 +2928 +FE94 +004A +7C00 +44FE +4410 +7C10 +4410 +4410 +7DFE +4400 +ENDCHAR +STARTCHAR uni4AAC +ENCODING 19116 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +7DFE +0020 +4420 +29FE +FF02 +0204 +7CF8 +4410 +4420 +7DFE +4420 +4420 +7CA0 +4440 +ENDCHAR +STARTCHAR uni4AAD +ENCODING 19117 +BBX 15 16 0 -2 +BITMAP +2020 +1010 +7CFE +0000 +4444 +2828 +FEFE +0000 +7C7C +4444 +4444 +7C7C +4444 +4444 +7C7C +4444 +ENDCHAR +STARTCHAR uni4AAE +ENCODING 19118 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +7CFE +0122 +44AA +28FA +FE42 +0094 +7D48 +44FE +4522 +7EAA +44FA +4442 +7C94 +4508 +ENDCHAR +STARTCHAR uni4AAF +ENCODING 19119 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +4D28 +1450 +2288 +7FFE +4102 +9FF4 +0440 +7FFC +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni4AB0 +ENCODING 19120 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +79FC +0088 +4850 +33FE +FC00 +01FC +7904 +49FC +4904 +79FC +4820 +4A94 +7A8A +4C7A +ENDCHAR +STARTCHAR uni4AB1 +ENCODING 19121 +BBX 15 15 0 -2 +BITMAP +01FE +FC20 +0440 +05FC +0504 +0504 +7DFC +4104 +41FC +4104 +4504 +59FC +6088 +4104 +0202 +ENDCHAR +STARTCHAR uni4AB2 +ENCODING 19122 +BBX 15 15 0 -2 +BITMAP +00FE +FE10 +2820 +28FC +2884 +2884 +28FC +2884 +28FC +2884 +2A84 +4CFC +4848 +8084 +0102 +ENDCHAR +STARTCHAR uni4AB3 +ENCODING 19123 +BBX 15 15 0 -2 +BITMAP +00FE +7E10 +1220 +12FC +FF84 +1284 +12FC +7E84 +12FC +1084 +1084 +20FC +2048 +4084 +8102 +ENDCHAR +STARTCHAR uni4AB4 +ENCODING 19124 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +0810 +7F20 +497C +0844 +0844 +147C +1444 +147C +1444 +2544 +267C +4400 +8028 +0044 +ENDCHAR +STARTCHAR uni4AB5 +ENCODING 19125 +BBX 15 15 0 -2 +BITMAP +7EFE +0410 +2420 +24FC +2484 +4484 +7FFC +0C84 +14FC +1484 +2484 +44FC +8448 +1484 +0902 +ENDCHAR +STARTCHAR uni4AB6 +ENCODING 19126 +BBX 15 15 0 -2 +BITMAP +7CFE +4410 +4420 +44FC +7C84 +4484 +44FC +7C84 +44FC +4484 +4484 +4EFC +F048 +0084 +0102 +ENDCHAR +STARTCHAR uni4AB7 +ENCODING 19127 +BBX 15 16 0 -2 +BITMAP +2000 +20FE +4010 +7E20 +82FC +0284 +7A84 +4AFC +4A84 +4AFC +7A84 +4A84 +02FC +0248 +1484 +0902 +ENDCHAR +STARTCHAR uni4AB8 +ENCODING 19128 +BBX 14 15 1 -2 +BITMAP +FDFC +8420 +8440 +FDF8 +9108 +9108 +91F8 +FD08 +91F8 +9108 +9108 +95F8 +9490 +CD08 +8604 +ENDCHAR +STARTCHAR uni4AB9 +ENCODING 19129 +BBX 15 15 0 -2 +BITMAP +7EFE +0810 +0820 +10FC +1484 +3284 +51FC +9084 +10FC +1084 +0084 +0EFC +F048 +4084 +0102 +ENDCHAR +STARTCHAR uni4ABA +ENCODING 19130 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +1010 +7E20 +10FC +1084 +1084 +FEFC +1084 +10FC +2084 +2884 +44FC +FE48 +4284 +0102 +ENDCHAR +STARTCHAR uni4ABB +ENCODING 19131 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +2010 +4420 +FEFC +0284 +2484 +24FC +2484 +FEFC +2484 +2484 +24FC +4448 +4484 +8502 +ENDCHAR +STARTCHAR uni4ABC +ENCODING 19132 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +9220 +92FC +9284 +FEFC +1084 +1084 +92FC +9284 +9284 +92FC +9240 +FE88 +0306 +ENDCHAR +STARTCHAR uni4ABD +ENCODING 19133 +BBX 15 15 0 -2 +BITMAP +7CFE +4410 +4420 +44FC +7C84 +0084 +FEFC +2084 +40FC +7C84 +0484 +04FC +0448 +2884 +1102 +ENDCHAR +STARTCHAR uni4ABE +ENCODING 19134 +BBX 15 16 0 -2 +BITMAP +0010 +FF10 +0828 +1028 +7E44 +4282 +4208 +7E10 +4264 +7E08 +4212 +4264 +7E08 +2430 +42C0 +8100 +ENDCHAR +STARTCHAR uni4ABF +ENCODING 19135 +BBX 14 16 1 -2 +BITMAP +1000 +11FC +2020 +FE40 +82F8 +8288 +CA88 +AAF8 +9288 +92F8 +AA88 +CA88 +82F8 +FE00 +8250 +0088 +ENDCHAR +STARTCHAR uni4AC0 +ENCODING 19136 +BBX 14 15 1 -2 +BITMAP +FDFC +8420 +8440 +FDF8 +8508 +8508 +FDF8 +8108 +91F8 +8908 +9508 +A5F8 +C090 +8108 +0204 +ENDCHAR +STARTCHAR uni4AC1 +ENCODING 19137 +BBX 14 16 1 -2 +BITMAP +2000 +23FC +4040 +F880 +8BF8 +8A08 +FA08 +8BF8 +8A08 +FBF8 +8A08 +8A08 +8BF8 +F910 +8A08 +0404 +ENDCHAR +STARTCHAR uni4AC2 +ENCODING 19138 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +3E10 +4220 +A47C +1844 +1044 +247C +C844 +1F7C +2144 +D244 +0C7C +0800 +3028 +C044 +ENDCHAR +STARTCHAR uni4AC3 +ENCODING 19139 +BBX 15 15 0 -2 +BITMAP +7F7E +4010 +4020 +5E7C +4044 +4044 +7F7C +5044 +517C +5A44 +5444 +527C +9100 +9828 +1044 +ENDCHAR +STARTCHAR uni4AC4 +ENCODING 19140 +BBX 15 16 0 -2 +BITMAP +4400 +24FE +2810 +0020 +7CFC +4484 +4484 +44FC +7C84 +28FC +2884 +2884 +2AFC +4C48 +8884 +0102 +ENDCHAR +STARTCHAR uni4AC5 +ENCODING 19141 +BBX 15 16 0 -2 +BITMAP +1000 +08FE +7F10 +4120 +497C +0844 +0844 +7F7C +0844 +187C +1C44 +2A44 +497C +8800 +0828 +0844 +ENDCHAR +STARTCHAR uni4AC6 +ENCODING 19142 +BBX 15 16 0 -2 +BITMAP +0400 +053E +0488 +0410 +7FBE +4422 +4422 +753E +5522 +553E +5522 +5222 +52BE +A680 +8994 +10A2 +ENDCHAR +STARTCHAR uni4AC7 +ENCODING 19143 +BBX 15 16 0 -2 +BITMAP +0C00 +30FE +C610 +1820 +637C +0C44 +F044 +007C +7E44 +427C +FF44 +4244 +FF7C +4200 +4A28 +4444 +ENDCHAR +STARTCHAR uni4AC8 +ENCODING 19144 +BBX 15 16 0 -2 +BITMAP +0800 +497E +4910 +4920 +7F7C +0844 +1444 +227C +5144 +88FC +0844 +7E44 +027C +0400 +0428 +0844 +ENDCHAR +STARTCHAR uni4AC9 +ENCODING 19145 +BBX 15 16 0 -2 +BITMAP +0C00 +30FE +C210 +1420 +48FC +3084 +C884 +14FC +2484 +CCFC +1484 +2484 +C4FC +0448 +2884 +1102 +ENDCHAR +STARTCHAR uni4ACA +ENCODING 19146 +BBX 15 15 0 -2 +BITMAP +FEFE +0810 +1020 +347C +5244 +9144 +107C +0044 +7E7C +4244 +4244 +427C +4200 +7E28 +4244 +ENDCHAR +STARTCHAR uni4ACB +ENCODING 19147 +BBX 15 16 0 -2 +BITMAP +0C00 +70FE +1010 +FE20 +38FC +5484 +9284 +00FC +1084 +FCFC +2484 +4484 +28FC +1048 +2884 +C502 +ENDCHAR +STARTCHAR uni4ACC +ENCODING 19148 +BBX 15 16 0 -2 +BITMAP +0800 +10FE +7F10 +4920 +497C +7F44 +4944 +497C +7F44 +147C +2444 +FF44 +047C +0400 +0428 +0444 +ENDCHAR +STARTCHAR uni4ACD +ENCODING 19149 +BBX 15 16 0 -2 +BITMAP +1400 +14FE +1410 +F720 +147C +1444 +1444 +777C +1444 +147C +1444 +F744 +147C +1400 +1428 +1444 +ENDCHAR +STARTCHAR uni4ACE +ENCODING 19150 +BBX 15 15 0 -2 +BITMAP +F77E +1110 +5520 +227C +5544 +8944 +107C +0044 +F77C +1144 +5544 +227C +5500 +8928 +1044 +ENDCHAR +STARTCHAR uni4ACF +ENCODING 19151 +BBX 15 16 0 -2 +BITMAP +2200 +227E +FF90 +2220 +227C +3E44 +2244 +227C +3E44 +227C +2244 +FF44 +007C +1400 +2228 +4144 +ENDCHAR +STARTCHAR uni4AD0 +ENCODING 19152 +BBX 15 16 0 -2 +BITMAP +2200 +227E +2210 +2220 +F7FC +2244 +2244 +667C +7744 +AAFC +AA44 +3244 +227C +2200 +2228 +2244 +ENDCHAR +STARTCHAR uni4AD1 +ENCODING 19153 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +FE10 +1020 +28FC +4484 +FE84 +04FC +7484 +54FC +5484 +7484 +54FC +0448 +1484 +0902 +ENDCHAR +STARTCHAR uni4AD2 +ENCODING 19154 +BBX 14 15 1 -2 +BITMAP +0DFC +F020 +9040 +FEF8 +9088 +8A88 +A6F8 +C288 +00F8 +FC88 +8488 +FCF8 +8400 +FC50 +8488 +ENDCHAR +STARTCHAR uni4AD3 +ENCODING 19155 +BBX 15 16 0 -2 +BITMAP +2000 +10FE +7C10 +0020 +44FC +2484 +2884 +FEFC +0084 +00FC +7C84 +4484 +44FC +4448 +7C84 +4502 +ENDCHAR +STARTCHAR uni4AD4 +ENCODING 19156 +BBX 15 16 0 -2 +BITMAP +2000 +2F7E +F510 +2520 +757C +2544 +F544 +297C +2344 +087C +0844 +FFC4 +147C +2200 +4128 +80C4 +ENDCHAR +STARTCHAR uni4AD5 +ENCODING 19157 +BBX 15 16 0 -2 +BITMAP +2000 +10FE +FE10 +0020 +44FC +2884 +FE84 +82FC +1084 +7CFC +5484 +5484 +54FC +5C48 +1084 +1102 +ENDCHAR +STARTCHAR uni4AD6 +ENCODING 19158 +BBX 15 16 0 -2 +BITMAP +2200 +22FE +FF10 +2220 +3E7C +2244 +3E44 +227C +2244 +FF7C +4044 +5444 +627C +4000 +7E28 +0044 +ENDCHAR +STARTCHAR uni4AD7 +ENCODING 19159 +BBX 14 15 1 -2 +BITMAP +EEFC +A220 +A240 +A2F8 +EE88 +8088 +80F8 +EE88 +82F8 +9288 +EA88 +84F8 +8400 +8A50 +9288 +ENDCHAR +STARTCHAR uni4AD8 +ENCODING 19160 +BBX 15 15 0 -2 +BITMAP +7CFE +4410 +7C20 +44FC +7C84 +2084 +7EFC +9284 +52FC +6A84 +4284 +7AFC +0248 +1484 +0902 +ENDCHAR +STARTCHAR uni4AD9 +ENCODING 19161 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +7F10 +0820 +2A7C +2244 +FFC4 +227C +2A44 +087C +7F44 +1C44 +2A7C +4900 +8928 +0844 +ENDCHAR +STARTCHAR uni4ADA +ENCODING 19162 +BBX 14 15 1 -2 +BITMAP +7DFC +4420 +4440 +74F8 +5488 +5488 +FEF8 +8288 +BAF8 +AA88 +AA88 +BAF8 +8200 +8A50 +8488 +ENDCHAR +STARTCHAR uni4ADB +ENCODING 19163 +BBX 15 16 0 -2 +BITMAP +2000 +2F3E +2108 +4110 +5FBE +C822 +4822 +4FBE +5222 +423E +5FA2 +4222 +453E +4480 +4894 +5022 +ENDCHAR +STARTCHAR uni4ADC +ENCODING 19164 +BBX 15 16 0 -2 +BITMAP +0800 +2A3E +2A08 +AA90 +CCBE +DDA2 +FFA2 +AABE +AAA2 +DDBE +FFA2 +99A2 +88BE +8F80 +F094 +0022 +ENDCHAR +STARTCHAR uni4ADD +ENCODING 19165 +BBX 15 16 0 -2 +BITMAP +0600 +78FE +0810 +0820 +FF7C +1C44 +2A44 +497C +BE44 +227C +2244 +3E44 +227C +2200 +3E28 +2244 +ENDCHAR +STARTCHAR uni4ADE +ENCODING 19166 +BBX 15 16 0 -2 +BITMAP +4400 +24FE +2810 +0020 +FEFC +1084 +1084 +7CFC +1084 +10FC +FE84 +0084 +AAFC +AA48 +AA84 +0102 +ENDCHAR +STARTCHAR uni4ADF +ENCODING 19167 +BBX 15 15 0 -2 +BITMAP +7CFE +4410 +4420 +7CFC +0084 +FE84 +82FC +FE84 +82FC +FE84 +8284 +FEFC +2848 +4484 +8502 +ENDCHAR +STARTCHAR uni4AE0 +ENCODING 19168 +BBX 15 16 0 -2 +BITMAP +1800 +60FE +0C10 +7020 +0CFC +7084 +0084 +FEFC +1084 +34FC +5284 +9084 +7CFC +4448 +7C84 +4502 +ENDCHAR +STARTCHAR uni4AE1 +ENCODING 19169 +BBX 15 16 0 -2 +BITMAP +2200 +147E +FF90 +1420 +147C +7F44 +1544 +FFFC +1544 +7F7C +1444 +3644 +557C +9480 +1428 +1444 +ENDCHAR +STARTCHAR uni4AE2 +ENCODING 19170 +BBX 15 16 0 -2 +BITMAP +0300 +7C7E +4710 +4420 +5F7C +5544 +5644 +5C7C +5544 +537C +5044 +5744 +557C +5500 +A9A8 +0044 +ENDCHAR +STARTCHAR uni4AE3 +ENCODING 19171 +BBX 15 16 0 -2 +BITMAP +0E00 +F0FE +2210 +9220 +44FC +2084 +4484 +F8FC +1084 +24FC +FE84 +1084 +FEFC +2848 +4484 +8302 +ENDCHAR +STARTCHAR uni4AE4 +ENCODING 19172 +BBX 15 15 0 -2 +BITMAP +FF7E +8110 +0020 +7E7C +4244 +7E44 +427C +7E44 +107C +0844 +FF44 +007C +2400 +4228 +8144 +ENDCHAR +STARTCHAR uni4AE5 +ENCODING 19173 +BBX 15 16 0 -2 +BITMAP +0800 +10FE +7F10 +4920 +497C +7F44 +497C +4944 +7F7C +1044 +1A7C +2CA8 +2FC4 +4882 +4802 +87FE +ENDCHAR +STARTCHAR uni4AE6 +ENCODING 19174 +BBX 15 16 0 -2 +BITMAP +0800 +083E +7F08 +0810 +083E +FFA2 +2022 +413E +FFA2 +40BE +0022 +7F22 +553E +5500 +5794 +FC22 +ENDCHAR +STARTCHAR uni4AE7 +ENCODING 19175 +BBX 15 16 0 -2 +BITMAP +1000 +20FE +7C10 +4420 +7CFC +4484 +7C84 +10FC +FE84 +28FC +5484 +9284 +7CFC +1048 +1084 +1102 +ENDCHAR +STARTCHAR uni4AE8 +ENCODING 19176 +BBX 15 16 0 -2 +BITMAP +1200 +123E +1208 +7A10 +13FE +7CA2 +10A2 +FCBE +22A2 +3ABE +2922 +2922 +293E +4A80 +5A94 +84A2 +ENDCHAR +STARTCHAR uni4AE9 +ENCODING 19177 +BBX 15 16 0 -2 +BITMAP +1000 +223E +7F08 +4210 +94BE +F7A2 +0822 +363E +C922 +30BE +C422 +1922 +623E +0C00 +3014 +C022 +ENDCHAR +STARTCHAR uni4AEA +ENCODING 19178 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +FE10 +1020 +BAFC +5484 +BA84 +10FC +BA84 +54FC +BA84 +1084 +28FC +2448 +4284 +8102 +ENDCHAR +STARTCHAR uni4AEB +ENCODING 19179 +BBX 15 16 0 -2 +BITMAP +0800 +7F7E +4910 +FFA0 +497C +7F44 +0844 +7F7C +4944 +7F7C +1044 +FF44 +217C +7200 +0C28 +F344 +ENDCHAR +STARTCHAR uni4AEC +ENCODING 19180 +BBX 15 15 0 -2 +BITMAP +F7BE +2108 +A510 +F7BE +6322 +B5A2 +213E +7FA2 +40BE +40A2 +7FA2 +40BE +4080 +7F94 +40A2 +ENDCHAR +STARTCHAR uni4AED +ENCODING 19181 +BBX 15 16 0 -2 +BITMAP +1000 +7CFE +5410 +7C20 +10FC +FE84 +0084 +7CFC +4484 +7CFC +4484 +7C84 +44FC +7C48 +2884 +4502 +ENDCHAR +STARTCHAR uni4AEE +ENCODING 19182 +BBX 15 15 0 -2 +BITMAP +7F7E +0110 +3F20 +017C +7F44 +0044 +777C +2544 +F77C +0244 +FFC4 +427C +2200 +2A28 +0444 +ENDCHAR +STARTCHAR uni4AEF +ENCODING 19183 +BBX 15 16 0 -2 +BITMAP +4100 +211E +0FE4 +F108 +429E +4452 +7FF2 +505E +5752 +555E +5552 +5752 +555E +5040 +A14C +0092 +ENDCHAR +STARTCHAR uni4AF0 +ENCODING 19184 +BBX 15 16 0 -2 +BITMAP +0020 +F924 +20A8 +43FE +F8A8 +8924 +8A22 +F904 +8904 +F9DE +8A44 +8D54 +F89E +0104 +5204 +8C04 +ENDCHAR +STARTCHAR uni4AF1 +ENCODING 19185 +BBX 14 15 1 -2 +BITMAP +FF7C +1010 +FF20 +A97C +A944 +A944 +837C +0044 +FF7C +1044 +FF44 +A97C +A900 +A928 +8344 +ENDCHAR +STARTCHAR uni4AF2 +ENCODING 19186 +BBX 15 16 0 -2 +BITMAP +0280 +025E +7FC4 +4208 +5E1E +4292 +5E92 +571E +5D52 +42DE +8852 +0492 +545E +5140 +8F0C +0012 +ENDCHAR +STARTCHAR uni4AF3 +ENCODING 19187 +BBX 15 15 0 -2 +BITMAP +7F7E +5510 +5520 +7F7C +2044 +7F44 +917C +7D44 +557C +5544 +7D44 +117C +7D00 +0528 +0244 +ENDCHAR +STARTCHAR uni4AF4 +ENCODING 19188 +BBX 15 16 0 -2 +BITMAP +2200 +223E +F788 +2210 +773E +AAA2 +2262 +003E +7F22 +003E +FFA2 +0822 +493E +4880 +A894 +1022 +ENDCHAR +STARTCHAR uni4AF5 +ENCODING 19189 +BBX 15 16 0 -2 +BITMAP +1000 +7F3E +4908 +6510 +533E +4922 +7F22 +083E +FFA2 +A2BE +4922 +FFA2 +203E +3F00 +4114 +8322 +ENDCHAR +STARTCHAR uni4AF6 +ENCODING 19190 +BBX 15 16 0 -2 +BITMAP +2080 +2A9E +F5E4 +2A88 +71DE +6AB2 +A492 +2A9E +2092 +041E +0412 +7FD2 +0A1E +1100 +208C +4052 +ENDCHAR +STARTCHAR uni4AF7 +ENCODING 19191 +BBX 15 15 0 -2 +BITMAP +FFBE +0808 +EB90 +AABE +EBA2 +0822 +FFBE +0822 +EBBE +AAA2 +EBA2 +083E +0F80 +F814 +4022 +ENDCHAR +STARTCHAR uni4AF8 +ENCODING 19192 +BBX 15 14 0 -1 +BITMAP +7FDE +404A +434A +5C4A +444A +5F4A +554A +5552 +5F52 +446A +4544 +5F40 +4922 +801E +ENDCHAR +STARTCHAR uni4AF9 +ENCODING 19193 +BBX 15 14 0 -1 +BITMAP +7FC0 +407E +4348 +5C48 +4448 +5F48 +5548 +5548 +5F48 +4448 +457E +5F40 +4922 +801E +ENDCHAR +STARTCHAR uni4AFA +ENCODING 19194 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +FD34 +11C4 +1144 +21F4 +2954 +2954 +29F4 +5144 +5554 +5DF4 +8516 +0206 +0402 +ENDCHAR +STARTCHAR uni4AFB +ENCODING 19195 +BBX 15 14 0 -1 +BITMAP +7FDE +4052 +4352 +5C52 +445E +5F52 +5552 +5552 +5F52 +445E +4540 +5F40 +4922 +801E +ENDCHAR +STARTCHAR uni4AFC +ENCODING 19196 +BBX 15 15 0 -1 +BITMAP +0010 +7F10 +4110 +4D7C +7114 +5114 +7D14 +55FE +7D10 +5128 +5524 +7D44 +4480 +4042 +803E +ENDCHAR +STARTCHAR uni4AFD +ENCODING 19197 +BBX 15 14 0 -1 +BITMAP +7FC6 +4058 +4348 +5C4E +4458 +5F4E +5578 +554A +5F4A +444A +4546 +5F40 +4922 +801E +ENDCHAR +STARTCHAR uni4AFE +ENCODING 19198 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +4428 +4C08 +7448 +5454 +5552 +7D62 +5660 +7C44 +54C4 +553C +5200 +7D00 +4482 +807E +ENDCHAR +STARTCHAR uni4AFF +ENCODING 19199 +BBX 15 15 0 -1 +BITMAP +001E +7FCA +404A +434A +5C52 +4466 +5F40 +555E +5552 +5F52 +445E +4552 +5F40 +4922 +801E +ENDCHAR +STARTCHAR uni4B00 +ENCODING 19200 +BBX 15 16 0 -2 +BITMAP +0048 +7C48 +4488 +4CBE +752A +55CA +544A +7C8A +54AA +7DF2 +5412 +542A +5244 +7D00 +4482 +807E +ENDCHAR +STARTCHAR uni4B01 +ENCODING 19201 +BBX 15 15 0 -1 +BITMAP +0010 +7F08 +417E +4D42 +7120 +5124 +7D38 +5520 +7D22 +5122 +551E +7D00 +4480 +4042 +803E +ENDCHAR +STARTCHAR uni4B02 +ENCODING 19202 +BBX 15 16 0 -2 +BITMAP +0028 +7C24 +4420 +4DFC +7520 +5524 +5524 +7D28 +5528 +7D10 +5594 +552C +5244 +7D00 +4482 +807E +ENDCHAR +STARTCHAR uni4B03 +ENCODING 19203 +BBX 15 15 0 -1 +BITMAP +0010 +7F08 +4100 +4D7C +7100 +5144 +7D24 +5528 +7D28 +5110 +55FE +7D00 +4480 +4042 +803E +ENDCHAR +STARTCHAR uni4B04 +ENCODING 19204 +BBX 15 16 0 -2 +BITMAP +0014 +7C12 +4410 +4DFE +7510 +5514 +5514 +7DD4 +5508 +7D0A +551A +5526 +5242 +7D00 +4482 +807E +ENDCHAR +STARTCHAR uni4B05 +ENCODING 19205 +BBX 15 16 0 -2 +BITMAP +0040 +7C40 +45FC +4C84 +7484 +5528 +5610 +7D08 +57DE +7D4A +554A +5652 +525A +7DE4 +4482 +807E +ENDCHAR +STARTCHAR uni4B06 +ENCODING 19206 +BBX 15 16 0 -2 +BITMAP +0044 +7D84 +4494 +4C94 +77F4 +5494 +5594 +7DD4 +56B4 +7C94 +5484 +5494 +5288 +7D00 +4482 +807E +ENDCHAR +STARTCHAR uni4B07 +ENCODING 19207 +BBX 15 16 0 -2 +BITMAP +4400 +25FC +2904 +0134 +7DC4 +4544 +45F4 +4554 +7D54 +29F4 +2944 +2954 +2BF4 +4D16 +8A06 +0402 +ENDCHAR +STARTCHAR uni4B08 +ENCODING 19208 +BBX 15 14 0 -1 +BITMAP +7F44 +4128 +4D00 +717C +5144 +7D44 +557C +7D28 +5128 +554A +7D86 +4480 +4042 +803E +ENDCHAR +STARTCHAR uni4B09 +ENCODING 19209 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +45FC +4C20 +7420 +57FE +5450 +7C50 +5554 +7D52 +5652 +5490 +5290 +7D30 +4482 +807E +ENDCHAR +STARTCHAR uni4B0A +ENCODING 19210 +BBX 15 15 0 -1 +BITMAP +0010 +7F10 +41FE +4D10 +7154 +5154 +7DBA +5510 +7D28 +5124 +5542 +7D80 +4480 +4042 +803E +ENDCHAR +STARTCHAR uni4B0B +ENCODING 19211 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +44F8 +4C20 +75FC +5488 +5544 +7C78 +5488 +7D50 +5420 +5450 +5288 +7D08 +4482 +807E +ENDCHAR +STARTCHAR uni4B0C +ENCODING 19212 +BBX 15 16 0 -2 +BITMAP +1000 +1DFC +1104 +7D34 +55C4 +5944 +71F4 +5554 +4D54 +41F4 +5D44 +5554 +57F4 +9516 +2206 +0402 +ENDCHAR +STARTCHAR uni4B0D +ENCODING 19213 +BBX 15 16 0 -2 +BITMAP +0080 +7C80 +44FC +4D54 +7654 +54A4 +5554 +7C88 +5420 +7C14 +5552 +554A +5238 +7D00 +4482 +807E +ENDCHAR +STARTCHAR uni4B0E +ENCODING 19214 +BBX 15 16 0 -2 +BITMAP +0014 +7C12 +47FE +4C10 +7410 +55D4 +5554 +7D54 +55CC +7C0A +54CA +5716 +5222 +7D40 +4482 +807E +ENDCHAR +STARTCHAR uni4B0F +ENCODING 19215 +BBX 15 15 0 -1 +BITMAP +0020 +7F10 +417C +4D44 +7128 +51FE +7D00 +557C +7D44 +5144 +557C +7D44 +4480 +4042 +803E +ENDCHAR +STARTCHAR uni4B10 +ENCODING 19216 +BBX 15 16 0 -2 +BITMAP +0018 +7CE0 +4420 +4DFC +7470 +54A8 +5524 +7C40 +57FE +7C88 +5590 +5470 +538C +7D00 +4482 +807E +ENDCHAR +STARTCHAR uni4B11 +ENCODING 19217 +BBX 15 15 0 -1 +BITMAP +007C +7F54 +417C +4D54 +717C +5100 +7D7C +5544 +7D7C +5144 +557C +7D44 +44CC +4042 +803E +ENDCHAR +STARTCHAR uni4B12 +ENCODING 19218 +BBX 15 16 0 -2 +BITMAP +0020 +7DFC +4504 +4C50 +7488 +5524 +5450 +7C88 +5506 +7CF8 +5408 +5450 +5220 +7D50 +448A +807E +ENDCHAR +STARTCHAR uni4B13 +ENCODING 19219 +BBX 15 15 0 -1 +BITMAP +0020 +7F10 +41FE +4D44 +7128 +51FE +7D00 +557C +7D44 +517C +5544 +7D7C +4480 +4042 +803E +ENDCHAR +STARTCHAR uni4B14 +ENCODING 19220 +BBX 15 16 0 -2 +BITMAP +0020 +7C50 +4488 +4D04 +74F8 +5400 +55C4 +7D54 +55D4 +7D54 +55D4 +5544 +5354 +7D48 +4482 +807E +ENDCHAR +STARTCHAR uni4B15 +ENCODING 19221 +BBX 15 15 0 -2 +BITMAP +7DFC +4504 +4D34 +75C4 +5544 +7DF4 +5554 +5554 +7DF4 +5544 +5554 +7DF4 +4916 +8206 +0402 +ENDCHAR +STARTCHAR uni4B16 +ENCODING 19222 +BBX 15 15 0 -1 +BITMAP +0010 +7F20 +417C +4D44 +717C +5144 +7D7C +5500 +7D7C +5110 +557C +7D10 +44FC +4042 +803E +ENDCHAR +STARTCHAR uni4B17 +ENCODING 19223 +BBX 15 15 0 -2 +BITMAP +7CF8 +4488 +7C98 +44E8 +7CA8 +00A8 +FEF8 +40A8 +7EF8 +AAA8 +2AAA +4AAA +92FA +2A86 +4502 +ENDCHAR +STARTCHAR uni4B18 +ENCODING 19224 +BBX 15 16 0 -2 +BITMAP +0020 +7DFC +4400 +4CF8 +7488 +54F8 +5400 +7DFC +5504 +7D74 +5554 +5574 +530C +7D00 +4482 +807E +ENDCHAR +STARTCHAR uni4B19 +ENCODING 19225 +BBX 15 15 0 -1 +BITMAP +000E +7F70 +4112 +4D44 +7120 +517C +7D90 +5510 +7DFE +5110 +5554 +7D7C +4480 +4042 +803E +ENDCHAR +STARTCHAR uni4B1A +ENCODING 19226 +BBX 15 15 0 -2 +BITMAP +7DFC +4520 +4DF8 +7520 +55F8 +5520 +7DFC +5404 +7D54 +5554 +5404 +5228 +7D10 +4482 +807E +ENDCHAR +STARTCHAR uni4B1B +ENCODING 19227 +BBX 15 16 0 -2 +BITMAP +01FC +7D24 +45FC +4D24 +75FC +54A8 +54A8 +7FFE +54A8 +7CA8 +55FC +5420 +53FE +7D20 +44A2 +807E +ENDCHAR +STARTCHAR uni4B1C +ENCODING 19228 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FC +4C50 +7524 +5554 +55FC +7C20 +55FC +7D44 +5554 +5574 +530C +7D00 +4482 +807E +ENDCHAR +STARTCHAR uni4B1D +ENCODING 19229 +BBX 15 15 0 -1 +BITMAP +0028 +7F7C +4128 +4DFE +7110 +517C +7D54 +557C +7D54 +517C +5500 +7D44 +4482 +4042 +803E +ENDCHAR +STARTCHAR uni4B1E +ENCODING 19230 +BBX 15 16 0 -2 +BITMAP +0020 +7DFE +4420 +4CFC +7400 +55FE +5402 +7CF8 +5420 +7DFE +5404 +55DE +5354 +7DCC +4482 +807E +ENDCHAR +STARTCHAR uni4B1F +ENCODING 19231 +BBX 15 16 0 -2 +BITMAP +0082 +7D7A +452A +4DAA +754A +559A +5542 +7CA2 +55F2 +7C4A +55F2 +5552 +52E6 +7DF8 +4482 +807E +ENDCHAR +STARTCHAR uni4B20 +ENCODING 19232 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0004 +7FE8 +0824 +7212 +120E +FFD0 +122A +221E +ENDCHAR +STARTCHAR uni4B21 +ENCODING 19233 +BBX 15 16 0 -2 +BITMAP +0200 +3FD0 +0260 +FFFE +1C10 +EFF0 +0810 +0FF0 +0004 +7FE8 +0824 +7212 +120E +FFD0 +122A +221E +ENDCHAR +STARTCHAR uni4B22 +ENCODING 19234 +BBX 14 16 0 -2 +BITMAP +0800 +0800 +14FC +1224 +2924 +7E24 +A224 +3E24 +2224 +3E24 +2024 +2844 +2444 +2A84 +3328 +2210 +ENDCHAR +STARTCHAR uni4B23 +ENCODING 19235 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1420 +127E +2940 +7E80 +A23C +3E04 +2208 +3E10 +2020 +2840 +2442 +2A42 +323E +2000 +ENDCHAR +STARTCHAR uni4B24 +ENCODING 19236 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2080 +2360 +2C98 +37F6 +2410 +27F0 +2410 +27F4 +4468 +4518 +8604 +ENDCHAR +STARTCHAR uni4B25 +ENCODING 19237 +BBX 15 16 0 -2 +BITMAP +0420 +0210 +013E +FFC0 +0022 +011A +0286 +0D60 +3FF8 +C826 +0FE0 +0820 +0FE8 +08D0 +0A30 +0C08 +ENDCHAR +STARTCHAR uni4B26 +ENCODING 19238 +BBX 15 16 0 -2 +BITMAP +0800 +0878 +1448 +1248 +2948 +7E86 +A300 +3EFC +2244 +3E44 +2028 +2828 +2410 +2A28 +3244 +2182 +ENDCHAR +STARTCHAR uni4B27 +ENCODING 19239 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +14FC +1200 +2900 +7E00 +A3FE +3E50 +2250 +3E50 +2050 +2850 +2452 +2A92 +328E +2100 +ENDCHAR +STARTCHAR uni4B28 +ENCODING 19240 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +2880 +25FE +5202 +FC82 +4482 +7DE2 +44A2 +7CA2 +412A +512A +4A1A +5402 +6414 +4008 +ENDCHAR +STARTCHAR uni4B29 +ENCODING 19241 +BBX 15 15 0 -2 +BITMAP +7FFC +0100 +0360 +0D18 +7104 +0280 +0D60 +3FF8 +C826 +0FE0 +0820 +0FE8 +08D0 +0A30 +0C08 +ENDCHAR +STARTCHAR uni4B2A +ENCODING 19242 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +14FE +1210 +2910 +7E20 +A220 +3E68 +2264 +3EA2 +2122 +2820 +2420 +2A20 +3220 +2020 +ENDCHAR +STARTCHAR uni4B2B +ENCODING 19243 +BBX 15 16 0 -2 +BITMAP +0804 +081E +14F0 +1290 +2990 +7E90 +A290 +3EFE +2290 +3E90 +2090 +2888 +248A +2AAA +32D6 +208A +ENDCHAR +STARTCHAR uni4B2C +ENCODING 19244 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +25FC +5324 +FD24 +4524 +7D24 +4524 +7FFE +4020 +5050 +4850 +5488 +6504 +4202 +ENDCHAR +STARTCHAR uni4B2D +ENCODING 19245 +BBX 15 15 0 -2 +BITMAP +7DFC +4444 +4444 +7C94 +0108 +0280 +0D60 +3FF8 +C826 +0FE0 +0820 +0FE8 +08D0 +0A30 +0C08 +ENDCHAR +STARTCHAR uni4B2E +ENCODING 19246 +BBX 15 16 0 -2 +BITMAP +1008 +1048 +2928 +2528 +5328 +FD08 +4508 +7D08 +4508 +7D08 +4148 +5194 +4914 +5422 +6442 +4082 +ENDCHAR +STARTCHAR uni4B2F +ENCODING 19247 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +1410 +1210 +291E +7E10 +A210 +3E10 +22FE +3E82 +2082 +2882 +2482 +2A82 +32FE +2082 +ENDCHAR +STARTCHAR uni4B30 +ENCODING 19248 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +1422 +1222 +2922 +7E22 +A24A +3E44 +2280 +3E7E +2042 +2842 +2442 +2A42 +327E +2042 +ENDCHAR +STARTCHAR uni4B31 +ENCODING 19249 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +2420 +53FE +FC70 +44A8 +7CA8 +4524 +7D24 +4222 +50F8 +4820 +5420 +6420 +4020 +ENDCHAR +STARTCHAR uni4B32 +ENCODING 19250 +BBX 14 16 0 -2 +BITMAP +0840 +0840 +1480 +12FC +2904 +7E04 +A2F4 +3E94 +2294 +3E94 +20F4 +2894 +2404 +2A04 +3228 +2010 +ENDCHAR +STARTCHAR uni4B33 +ENCODING 19251 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2924 +24A4 +52A8 +FC20 +45FC +7C20 +4420 +7C20 +43FE +5020 +4820 +5420 +6420 +4020 +ENDCHAR +STARTCHAR uni4B34 +ENCODING 19252 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +25FE +5220 +FC20 +4420 +7DFC +4470 +7CA8 +40A8 +5124 +4924 +5622 +6420 +4020 +ENDCHAR +STARTCHAR uni4B35 +ENCODING 19253 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +2810 +25FE +5220 +FC24 +4444 +7CF8 +4412 +7C22 +4044 +5188 +4810 +5428 +6444 +4182 +ENDCHAR +STARTCHAR uni4B36 +ENCODING 19254 +BBX 15 16 0 -2 +BITMAP +0800 +08FC +1484 +1284 +29FC +7E84 +A284 +3EFC +22A2 +3EA4 +2098 +2890 +2488 +2AA4 +32C2 +2080 +ENDCHAR +STARTCHAR uni4B37 +ENCODING 19255 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +147C +1284 +2948 +7E30 +A220 +3E48 +2390 +3E3E +2042 +29A4 +2418 +2A10 +3260 +2180 +ENDCHAR +STARTCHAR uni4B38 +ENCODING 19256 +BBX 15 16 0 -2 +BITMAP +7F7C +0804 +1E28 +2210 +5428 +0944 +3280 +CD60 +3FF8 +C826 +0FE0 +0820 +0FE8 +08D0 +0A30 +0C08 +ENDCHAR +STARTCHAR uni4B39 +ENCODING 19257 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2820 +2420 +5248 +FC84 +45FE +7C22 +4420 +7C20 +41FC +5020 +4820 +5420 +67FE +4000 +ENDCHAR +STARTCHAR uni4B3A +ENCODING 19258 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +2888 +2400 +53FE +FC20 +4420 +7DFC +4420 +7C20 +43FE +5020 +4820 +5420 +6420 +4020 +ENDCHAR +STARTCHAR uni4B3B +ENCODING 19259 +BBX 15 15 1 -1 +BITMAP +1028 +1024 +29FE +5620 +D020 +7DFC +4420 +7C20 +45FE +7C20 +4024 +4418 +4C12 +722A +C2C4 +ENDCHAR +STARTCHAR uni4B3C +ENCODING 19260 +BBX 15 16 0 -2 +BITMAP +0800 +087C +1444 +1244 +297C +7E00 +A2FE +3E82 +2282 +3EFE +2082 +2882 +24FE +2A82 +328A +2084 +ENDCHAR +STARTCHAR uni4B3D +ENCODING 19261 +BBX 15 16 0 -2 +BITMAP +0884 +0844 +1448 +1200 +29FC +7E84 +A284 +3E84 +22FC +3E48 +2048 +2848 +2448 +2A8A +328A +2106 +ENDCHAR +STARTCHAR uni4B3E +ENCODING 19262 +BBX 15 16 0 -2 +BITMAP +1088 +1048 +2850 +25FC +5224 +FC24 +45FC +7D20 +4520 +7DFE +4022 +5022 +486A +54A4 +6520 +4020 +ENDCHAR +STARTCHAR uni4B3F +ENCODING 19263 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +2504 +53FC +FD00 +451C +7D70 +451C +7D70 +411E +51F0 +4910 +5512 +6512 +420E +ENDCHAR +STARTCHAR uni4B40 +ENCODING 19264 +BBX 15 16 0 -2 +BITMAP +1000 +1078 +2A28 +2528 +5128 +F828 +4878 +7B28 +4928 +792A +412A +5126 +4922 +5A80 +6C7E +4000 +ENDCHAR +STARTCHAR uni4B41 +ENCODING 19265 +BBX 15 16 0 -2 +BITMAP +100C +FEF0 +1080 +1CFE +F088 +1108 +3288 +0D60 +3FF8 +C826 +0FE0 +0820 +0FE8 +08D0 +0A30 +0C08 +ENDCHAR +STARTCHAR uni4B42 +ENCODING 19266 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +2888 +2488 +52F8 +FC00 +45FC +7D24 +4524 +7D24 +41FC +5100 +4900 +5502 +6502 +40FE +ENDCHAR +STARTCHAR uni4B43 +ENCODING 19267 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2850 +2488 +5144 +FA22 +49F8 +7808 +4850 +7820 +40A4 +5282 +4A8A +5A8A +6C78 +4000 +ENDCHAR +STARTCHAR uni4B44 +ENCODING 19268 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2BFE +2420 +53FC +FD24 +45FC +7C20 +45FC +7C24 +43FE +5024 +49FC +5420 +64A0 +4040 +ENDCHAR +STARTCHAR uni4B45 +ENCODING 19269 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +2904 +2524 +5324 +FDFC +4524 +7D24 +4574 +7D54 +4154 +5174 +4904 +5504 +65FC +4104 +ENDCHAR +STARTCHAR uni4B46 +ENCODING 19270 +BBX 15 16 0 -2 +BITMAP +7F20 +4830 +7E28 +4224 +7E20 +4920 +7E80 +0D60 +3FF8 +C826 +0FE0 +0820 +0FE8 +08D0 +0A30 +0C08 +ENDCHAR +STARTCHAR uni4B47 +ENCODING 19271 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +28FC +2504 +5244 +FC44 +47FC +7C44 +45F4 +7C04 +41F4 +5114 +49F4 +5404 +6428 +4010 +ENDCHAR +STARTCHAR uni4B48 +ENCODING 19272 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +287C +2714 +51FE +F914 +4A7C +7A10 +4F7C +7910 +41FE +5510 +4A10 +5300 +64FE +4800 +ENDCHAR +STARTCHAR uni4B49 +ENCODING 19273 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +28FE +2440 +52FC +FD10 +46FE +7C00 +44FC +7C84 +40FC +5084 +48FC +5484 +6494 +4088 +ENDCHAR +STARTCHAR uni4B4A +ENCODING 19274 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +2BFE +2488 +52A8 +FC20 +45FC +7D24 +4524 +7D24 +43FE +5020 +4850 +5488 +6504 +4202 +ENDCHAR +STARTCHAR uni4B4B +ENCODING 19275 +BBX 15 16 0 -2 +BITMAP +1100 +117C +2944 +2644 +5244 +FE7C +4A10 +7A10 +4AFE +7A38 +4254 +5254 +4A94 +5B12 +6A10 +4210 +ENDCHAR +STARTCHAR uni4B4C +ENCODING 19276 +BBX 15 16 0 -2 +BITMAP +107C +FF44 +107C +7E44 +427C +7F44 +028C +0D60 +3FF8 +C826 +0FE0 +0820 +0FE8 +08D0 +0A30 +0C08 +ENDCHAR +STARTCHAR uni4B4D +ENCODING 19277 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +29FC +2420 +5220 +FCF8 +4420 +7C20 +45FC +7C00 +41FC +5154 +4954 +5554 +67FE +4000 +ENDCHAR +STARTCHAR uni4B4E +ENCODING 19278 +BBX 15 16 0 -2 +BITMAP +1048 +1148 +2948 +27FE +5148 +F948 +4978 +7900 +49FE +7820 +43FE +5070 +48A8 +5924 +6E22 +4020 +ENDCHAR +STARTCHAR uni4B4F +ENCODING 19279 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +29FE +2502 +5102 +F9FE +4900 +7900 +49FE +79AA +41AA +52FE +4AAA +5AAA +6CA2 +4086 +ENDCHAR +STARTCHAR uni4B50 +ENCODING 19280 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +2800 +27FE +5020 +F820 +49FC +7820 +4820 +7BFE +4040 +5024 +4AA2 +5A8A +6C88 +4078 +ENDCHAR +STARTCHAR uni4B51 +ENCODING 19281 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +2800 +25FE +5250 +FDFC +4454 +7DFE +4454 +7DFC +4050 +50D8 +4954 +5652 +6450 +4050 +ENDCHAR +STARTCHAR uni4B52 +ENCODING 19282 +BBX 15 16 0 -2 +BITMAP +1010 +1020 +28FC +2484 +52FC +FC84 +44FC +7C84 +44FC +7C20 +4010 +5054 +4942 +554A +6638 +4000 +ENDCHAR +STARTCHAR uni4B53 +ENCODING 19283 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +2924 +2524 +53FC +FC00 +47FE +7C00 +45FC +7D04 +4104 +51FC +4888 +5450 +67FE +4000 +ENDCHAR +STARTCHAR uni4B54 +ENCODING 19284 +BBX 15 16 0 -2 +BITMAP +1010 +1220 +297C +2544 +5044 +F87C +4B40 +7940 +497C +7944 +4144 +517C +4944 +5A80 +6C7E +4000 +ENDCHAR +STARTCHAR uni4B55 +ENCODING 19285 +BBX 15 16 0 -2 +BITMAP +100C +FEF0 +5480 +7CFE +5488 +FF08 +1288 +0D60 +3FF8 +C826 +0FE0 +0820 +0FE8 +08D0 +0A30 +0C08 +ENDCHAR +STARTCHAR uni4B56 +ENCODING 19286 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +29FE +2500 +5148 +F948 +49FE +7948 +4948 +7948 +4178 +5100 +4AD4 +52AA +652A +4800 +ENDCHAR +STARTCHAR uni4B57 +ENCODING 19287 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +29FC +2488 +5050 +FBFE +4800 +79FC +4904 +79FC +4104 +51FC +4890 +5892 +6912 +460E +ENDCHAR +STARTCHAR uni4B58 +ENCODING 19288 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +25FC +5104 +F9FC +4820 +7BFE +4800 +79FC +4104 +51FC +4820 +5924 +6A22 +4060 +ENDCHAR +STARTCHAR uni4B59 +ENCODING 19289 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +2888 +26A8 +53FE +F988 +4ADA +7CA6 +49F8 +7908 +4108 +51F8 +4908 +5908 +69F8 +4108 +ENDCHAR +STARTCHAR uni4B5A +ENCODING 19290 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +2888 +2450 +53FE +FC00 +45FC +7D24 +45FC +7D24 +41FC +5020 +49FC +5420 +67FE +4000 +ENDCHAR +STARTCHAR uni4B5B +ENCODING 19291 +BBX 15 16 0 -2 +BITMAP +1008 +1388 +2888 +2510 +57DE +FA94 +4AA4 +7B94 +4A94 +7B94 +4294 +52C8 +4B88 +5E94 +68A4 +40C2 +ENDCHAR +STARTCHAR uni4B5C +ENCODING 19292 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +29FC +2420 +5354 +FC88 +4504 +7EFA +4488 +7CF8 +4088 +50F8 +4820 +54A8 +6524 +4060 +ENDCHAR +STARTCHAR uni4B5D +ENCODING 19293 +BBX 15 16 0 -2 +BITMAP +1020 +1050 +2888 +2574 +5202 +FDFC +4524 +7DAC +4524 +7DFC +4000 +50F8 +4888 +54F8 +6488 +40F8 +ENDCHAR +STARTCHAR uni4B5E +ENCODING 19294 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2954 +25FC +5220 +FDFC +4420 +7FFE +4488 +7C50 +41FC +5020 +4BFE +5420 +6420 +4020 +ENDCHAR +STARTCHAR uni4B5F +ENCODING 19295 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +2888 +2400 +5148 +FBFE +4948 +7978 +4900 +79FC +4020 +53FE +4870 +58A8 +6B26 +4020 +ENDCHAR +STARTCHAR uni4B60 +ENCODING 19296 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +2A88 +2650 +53FE +FA50 +4AFC +7A54 +4BFE +7A54 +42FC +5250 +4AD8 +5554 +6652 +4850 +ENDCHAR +STARTCHAR uni4B61 +ENCODING 19297 +BBX 15 16 0 -2 +BITMAP +103C +13C0 +2944 +24A4 +51F8 +F820 +4BFC +7800 +49F8 +7808 +41F8 +5008 +49F8 +5AC4 +6AAA +447A +ENDCHAR +STARTCHAR uni4B62 +ENCODING 19298 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2BFE +2622 +5154 +F94A +4A3A +7800 +49FC +7954 +43FE +5000 +49FC +5820 +68A0 +4040 +ENDCHAR +STARTCHAR uni4B63 +ENCODING 19299 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2BFE +2488 +5052 +FFAC +4AAA +7AA8 +4DAC +7800 +4104 +51FC +4904 +59FC +6904 +4204 +ENDCHAR +STARTCHAR uni4B64 +ENCODING 19300 +BBX 15 16 0 -2 +BITMAP +1010 +107C +2A54 +257C +5110 +F8FE +4800 +7B7C +4944 +797C +4140 +517C +4944 +597C +6A80 +447E +ENDCHAR +STARTCHAR uni4B65 +ENCODING 19301 +BBX 15 16 0 -2 +BITMAP +1108 +1090 +2BFC +2440 +51F8 +F880 +4BFC +7948 +49FC +7B0A +45F8 +5108 +49FA +5934 +698C +4102 +ENDCHAR +STARTCHAR uni4B66 +ENCODING 19302 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +2888 +2412 +52FE +F810 +4CFE +7A92 +4AFE +7892 +41FE +5292 +4E04 +5AFE +6A44 +422C +ENDCHAR +STARTCHAR uni4B67 +ENCODING 19303 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +2A48 +27FE +5248 +FAEC +4B5A +7A48 +4A20 +7A44 +4278 +5214 +4AFE +5A10 +6A54 +44B2 +ENDCHAR +STARTCHAR uni4B68 +ENCODING 19304 +BBX 15 16 0 -2 +BITMAP +1222 +13FE +2890 +25FE +5310 +FDFE +4910 +79FE +4910 +79FE +4100 +53FE +4A8A +5B76 +6A52 +4276 +ENDCHAR +STARTCHAR uni4B69 +ENCODING 19305 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +2A48 +27FE +5248 +FAEC +4B5A +7A48 +4A50 +7BDE +4250 +53DC +4A50 +55DE +6450 +4850 +ENDCHAR +STARTCHAR uni4B6A +ENCODING 19306 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2104 +3DFC +4504 +4BFE +8000 +21FC +2124 +21FC +2124 +25FC +2820 +31FC +2020 +03FE +ENDCHAR +STARTCHAR uni4B6B +ENCODING 19307 +BBX 14 16 1 -2 +BITMAP +8108 +8890 +B3FC +C040 +8480 +85F8 +7D08 +0108 +F9F8 +8908 +8908 +F9F8 +8908 +8908 +F9F8 +8908 +ENDCHAR +STARTCHAR uni4B6C +ENCODING 19308 +BBX 14 16 1 -2 +BITMAP +8124 +8A48 +B248 +C124 +8400 +85FC +7C20 +0040 +F9F8 +8908 +89F8 +F908 +89F8 +8908 +F9F8 +8908 +ENDCHAR +STARTCHAR uni4B6D +ENCODING 19309 +BBX 15 16 0 -2 +BITMAP +4400 +28FE +FE10 +1020 +20FC +7C84 +4484 +44FC +7C84 +44FC +4484 +7C84 +44FC +4448 +7C84 +4502 +ENDCHAR +STARTCHAR uni4B6E +ENCODING 19310 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +1010 +0820 +FFFE +0200 +3FF8 +2008 +3FF8 +2008 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni4B6F +ENCODING 19311 +BBX 14 16 0 -2 +BITMAP +0420 +7820 +1124 +FF24 +1124 +3924 +55FC +9020 +7C20 +4524 +4524 +7D24 +4524 +4524 +7DFC +4404 +ENDCHAR +STARTCHAR uni4B70 +ENCODING 19312 +BBX 15 16 0 -2 +BITMAP +0420 +7820 +11FC +FE40 +10F8 +3840 +57FE +9088 +7D24 +4622 +44F8 +7C20 +45FC +4420 +7C20 +4420 +ENDCHAR +STARTCHAR uni4B71 +ENCODING 19313 +BBX 14 16 0 -2 +BITMAP +0420 +7924 +10A4 +FEA8 +1020 +39FC +5524 +9124 +7D74 +45AC +4524 +7D24 +4524 +4504 +7D14 +4508 +ENDCHAR +STARTCHAR uni4B72 +ENCODING 19314 +BBX 15 16 0 -2 +BITMAP +0420 +7820 +11FC +FE50 +1088 +3904 +57FE +9008 +7DE8 +4528 +4528 +7DE8 +4528 +4408 +7C28 +4410 +ENDCHAR +STARTCHAR uni4B73 +ENCODING 19315 +BBX 15 16 0 -2 +BITMAP +7C40 +11FC +FD24 +39FC +5524 +FDFC +2468 +1BA2 +651E +7FF8 +0920 +3FF8 +C826 +0FE0 +0820 +0FE0 +ENDCHAR +STARTCHAR uni4B74 +ENCODING 19316 +BBX 15 15 0 -2 +BITMAP +1FF8 +1100 +1FF0 +1100 +1FF0 +1100 +1FFC +0004 +2924 +4494 +0108 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4B75 +ENCODING 19317 +BBX 15 15 0 -2 +BITMAP +7E78 +4848 +7E48 +4848 +7E48 +4868 +4858 +7E58 +0248 +AA48 +AA4A +AA4A +828A +1486 +0900 +ENDCHAR +STARTCHAR uni4B76 +ENCODING 19318 +BBX 15 15 0 -2 +BITMAP +7EFE +4848 +7E48 +4848 +7E48 +4848 +4848 +7E48 +0248 +AA48 +AA48 +AA88 +8288 +1508 +0A08 +ENDCHAR +STARTCHAR uni4B77 +ENCODING 19319 +BBX 15 16 0 -2 +BITMAP +0008 +7F1C +4870 +7F10 +4810 +7F1C +4870 +4810 +7F90 +009E +AAF0 +AA90 +AA92 +8092 +0512 +020E +ENDCHAR +STARTCHAR uni4B78 +ENCODING 19320 +BBX 15 16 0 -2 +BITMAP +0010 +7E88 +4884 +7E84 +4902 +7E02 +4888 +4888 +7E88 +0250 +AA50 +AA20 +AA50 +8288 +1504 +0A02 +ENDCHAR +STARTCHAR uni4B79 +ENCODING 19321 +BBX 15 15 0 -2 +BITMAP +7C40 +519E +7D12 +5112 +7D12 +5112 +5112 +7D12 +0512 +555A +5594 +5510 +8410 +1410 +0810 +ENDCHAR +STARTCHAR uni4B7A +ENCODING 19322 +BBX 15 16 0 -2 +BITMAP +0020 +7E10 +4810 +7EFE +4800 +7E00 +4878 +4848 +7E48 +0248 +AA48 +AA4A +AA4A +828A +1486 +0900 +ENDCHAR +STARTCHAR uni4B7B +ENCODING 19323 +BBX 15 16 0 -2 +BITMAP +0010 +7E50 +4850 +7E50 +4888 +7E88 +4904 +4AFA +7E48 +0248 +AA48 +AA48 +AA88 +8288 +1528 +0A10 +ENDCHAR +STARTCHAR uni4B7C +ENCODING 19324 +BBX 15 15 0 -2 +BITMAP +7F3C +4800 +7F00 +4800 +7F7E +4824 +4824 +7FA4 +00A4 +AAA4 +AAA4 +AAA4 +80A4 +0544 +0284 +ENDCHAR +STARTCHAR uni4B7D +ENCODING 19325 +BBX 15 16 0 -2 +BITMAP +0008 +7F28 +4828 +7F28 +483E +7F28 +4848 +4808 +7F88 +00FE +AA88 +AA88 +AA88 +8088 +0508 +0208 +ENDCHAR +STARTCHAR uni4B7E +ENCODING 19326 +BBX 15 16 0 -2 +BITMAP +0020 +7E28 +4824 +7E24 +4820 +7E20 +48FC +4820 +7E20 +0250 +AA50 +AA50 +AA88 +8288 +1504 +0A02 +ENDCHAR +STARTCHAR uni4B7F +ENCODING 19327 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +4850 +7E50 +487C +7E90 +4910 +4810 +7EFE +0210 +AA28 +AA28 +AA28 +8244 +1444 +0882 +ENDCHAR +STARTCHAR uni4B80 +ENCODING 19328 +BBX 15 16 0 -2 +BITMAP +0040 +7E40 +48FC +7E84 +4904 +7EF4 +4894 +4894 +7EF4 +0284 +AA94 +AA88 +AA82 +8282 +147E +0800 +ENDCHAR +STARTCHAR uni4B81 +ENCODING 19329 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +4840 +7E48 +4884 +7EFC +4804 +4848 +7E48 +02FE +AA48 +AA48 +AA48 +8288 +1488 +0908 +ENDCHAR +STARTCHAR uni4B82 +ENCODING 19330 +BBX 15 16 0 -2 +BITMAP +0028 +7E24 +4824 +7E20 +48FE +7E20 +4820 +483C +7E34 +0254 +AA54 +AA54 +AA88 +8288 +1514 +0822 +ENDCHAR +STARTCHAR uni4B83 +ENCODING 19331 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +4810 +7E7E +4810 +7E10 +4810 +48FE +7E10 +0210 +AA20 +AA28 +AA44 +82FE +1442 +0800 +ENDCHAR +STARTCHAR uni4B84 +ENCODING 19332 +BBX 15 16 0 -2 +BITMAP +0010 +7F08 +4808 +7F7E +4810 +7F10 +4824 +4824 +7FB8 +0088 +AA90 +AA90 +AAA4 +80BE +0502 +0200 +ENDCHAR +STARTCHAR uni4B85 +ENCODING 19333 +BBX 15 16 0 -2 +BITMAP +0014 +7E12 +4812 +7E10 +48FE +7E90 +4892 +4892 +7E92 +0294 +AA94 +AAB4 +AACA +828A +1416 +0822 +ENDCHAR +STARTCHAR uni4B86 +ENCODING 19334 +BBX 15 15 0 -2 +BITMAP +7EFE +4808 +7E10 +4834 +7E52 +4890 +4810 +7E00 +0210 +AA10 +AAFE +AA10 +8210 +1410 +0810 +ENDCHAR +STARTCHAR uni4B87 +ENCODING 19335 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +48FC +7E24 +49FE +7E24 +48FC +4820 +7E20 +02FC +AA20 +AA20 +ABFE +8220 +1420 +0820 +ENDCHAR +STARTCHAR uni4B88 +ENCODING 19336 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +481E +7F22 +4854 +7F08 +4810 +4864 +7F88 +009E +AAA2 +AAC2 +AA94 +8088 +0510 +0260 +ENDCHAR +STARTCHAR uni4B89 +ENCODING 19337 +BBX 15 16 0 -2 +BITMAP +0040 +7E40 +487E +7E80 +4900 +7E1C +48E0 +48A0 +7EA2 +02A4 +AAA8 +AA90 +AA90 +82A8 +14C4 +0882 +ENDCHAR +STARTCHAR uni4B8A +ENCODING 19338 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +51FE +7C20 +51FC +7C24 +51FC +5120 +7DFE +0422 +542A +5454 +5450 +8488 +1504 +0A02 +ENDCHAR +STARTCHAR uni4B8B +ENCODING 19339 +BBX 15 16 0 -2 +BITMAP +0002 +7C02 +53E2 +7C8A +508A +7CEA +50AA +512A +7DAA +056A +564A +544A +5482 +8482 +150A +0A04 +ENDCHAR +STARTCHAR uni4B8C +ENCODING 19340 +BBX 15 16 0 -2 +BITMAP +0090 +F890 +A090 +F910 +A1FE +FB10 +A510 +A138 +F938 +0954 +A954 +A992 +A910 +8910 +0910 +3110 +ENDCHAR +STARTCHAR uni4B8D +ENCODING 19341 +BBX 15 16 0 -2 +BITMAP +3FF8 +2100 +3FF0 +2100 +3FF0 +2100 +3FFC +4924 +8694 +0108 +FFFE +0488 +0850 +3A20 +CC18 +0806 +ENDCHAR +STARTCHAR uni4B8E +ENCODING 19342 +BBX 15 16 0 -2 +BITMAP +00C2 +7C34 +5018 +7C64 +5182 +7C20 +51FE +5050 +7C90 +05FE +5692 +5492 +549A +8494 +1410 +0810 +ENDCHAR +STARTCHAR uni4B8F +ENCODING 19343 +BBX 15 15 0 -2 +BITMAP +7EFE +4810 +7E10 +487C +7E24 +4824 +48FE +7E00 +0200 +AA7C +AA44 +AA44 +8244 +147C +0844 +ENDCHAR +STARTCHAR uni4B90 +ENCODING 19344 +BBX 15 15 0 -2 +BITMAP +7EFE +4882 +7E82 +48AA +7EC6 +4882 +48BA +7EAA +02AA +AABA +AAAA +AA82 +8282 +148A +0884 +ENDCHAR +STARTCHAR uni4B91 +ENCODING 19345 +BBX 15 16 0 -2 +BITMAP +0004 +7E1E +48E0 +7E12 +488A +7E4C +4840 +4808 +7EFE +0208 +AA88 +AA48 +AA28 +8208 +1428 +0810 +ENDCHAR +STARTCHAR uni4B92 +ENCODING 19346 +BBX 15 16 0 -2 +BITMAP +0014 +7E12 +48FE +7E10 +4810 +7EFE +4892 +4892 +7EFE +0292 +AA92 +AAFE +AA92 +8292 +1492 +0886 +ENDCHAR +STARTCHAR uni4B93 +ENCODING 19347 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +483E +7E20 +48FC +7E84 +48FC +4884 +7EFC +02A4 +AA20 +ABFE +AA20 +8220 +1420 +0820 +ENDCHAR +STARTCHAR uni4B94 +ENCODING 19348 +BBX 15 16 0 -2 +BITMAP +0004 +7E1E +48F0 +7E10 +48FE +7E54 +4854 +4854 +7EFE +0254 +AA54 +AAFE +AA10 +8210 +14FE +0800 +ENDCHAR +STARTCHAR uni4B95 +ENCODING 19349 +BBX 15 15 0 -2 +BITMAP +FBDE +A042 +F94A +A084 +F94A +A252 +A420 +F800 +0BDE +A852 +A952 +A894 +8948 +0A54 +3422 +ENDCHAR +STARTCHAR uni4B96 +ENCODING 19350 +BBX 15 16 0 -2 +BITMAP +007C +7E44 +4844 +7E7C +4844 +7E44 +487C +4800 +7EFE +0282 +AA82 +AAFE +AA82 +8282 +14FE +0882 +ENDCHAR +STARTCHAR uni4B97 +ENCODING 19351 +BBX 15 16 0 -2 +BITMAP +0010 +7E92 +4892 +7E92 +48FE +7E00 +48FE +4880 +7EBE +0288 +AA88 +AAFE +AA88 +8308 +1508 +0A08 +ENDCHAR +STARTCHAR uni4B98 +ENCODING 19352 +BBX 15 15 0 -2 +BITMAP +7E20 +48CE +7E82 +4882 +7EEE +4882 +4882 +7EFE +0228 +AA28 +AA28 +AA48 +824A +148A +0906 +ENDCHAR +STARTCHAR uni4B99 +ENCODING 19353 +BBX 15 16 0 -2 +BITMAP +0008 +7E0C +480A +7E08 +49FE +7E08 +4808 +48EA +7EAA +02AA +AAEC +AA0C +AA2A +82CA +1416 +0822 +ENDCHAR +STARTCHAR uni4B9A +ENCODING 19354 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +487E +7E10 +4810 +7EFE +4824 +4842 +7E90 +023C +AA44 +AAA4 +AA28 +8210 +1428 +08C6 +ENDCHAR +STARTCHAR uni4B9B +ENCODING 19355 +BBX 15 16 0 -2 +BITMAP +0014 +FB94 +A294 +FAA4 +A2BE +FAA4 +A364 +A2B4 +FAAC +0AAC +AAA4 +AAA4 +AB24 +8A24 +0A24 +322C +ENDCHAR +STARTCHAR uni4B9C +ENCODING 19356 +BBX 15 16 0 -2 +BITMAP +0014 +7E54 +4854 +7EFE +4854 +7E54 +485C +4840 +7E7E +0210 +AAFE +AA10 +AA38 +8254 +1492 +0810 +ENDCHAR +STARTCHAR uni4B9D +ENCODING 19357 +BBX 15 15 0 -2 +BITMAP +7EFE +4892 +7E10 +48FE +7E10 +487C +4854 +7E7C +0254 +AA7C +AA10 +AAFE +8210 +1410 +0810 +ENDCHAR +STARTCHAR uni4B9E +ENCODING 19358 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +49FE +7E20 +48FC +7E40 +49FE +4888 +7F04 +02FA +AA88 +AA88 +AAF8 +8288 +1488 +08F8 +ENDCHAR +STARTCHAR uni4B9F +ENCODING 19359 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +51FE +7D22 +50A4 +7D28 +5050 +5088 +7D04 +04F8 +5488 +5488 +5450 +8420 +14D8 +0B06 +ENDCHAR +STARTCHAR uni4BA0 +ENCODING 19360 +BBX 15 15 0 -2 +BITMAP +7EFE +4800 +7E7C +4844 +7E44 +487C +4800 +7EFE +0292 +AA92 +AAFE +AA92 +8292 +14FE +0882 +ENDCHAR +STARTCHAR uni4BA1 +ENCODING 19361 +BBX 15 16 0 -2 +BITMAP +0040 +7E40 +487E +7E80 +487C +7E44 +487C +4844 +7E7C +0220 +AA3C +AA44 +AAA8 +8210 +1428 +08C6 +ENDCHAR +STARTCHAR uni4BA2 +ENCODING 19362 +BBX 15 16 0 -2 +BITMAP +0004 +7E1E +48F0 +7E10 +4810 +7EFE +4810 +4850 +7E96 +0292 +AA92 +AAD6 +AA92 +8292 +14FE +0882 +ENDCHAR +STARTCHAR uni4BA3 +ENCODING 19363 +BBX 15 15 0 -2 +BITMAP +7EFC +4844 +7E38 +4844 +7EEE +48AA +4844 +7EAA +0210 +AAFE +AA38 +AA54 +8292 +1410 +0810 +ENDCHAR +STARTCHAR uni4BA4 +ENCODING 19364 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +49FE +7F52 +4848 +7EFE +4890 +4990 +7EFE +0290 +AA90 +AAFE +AA90 +8290 +14FE +0880 +ENDCHAR +STARTCHAR uni4BA5 +ENCODING 19365 +BBX 15 15 0 -2 +BITMAP +7EFE +4800 +7E7C +4844 +7E7C +4800 +48FE +7E82 +02AA +AA92 +AAFE +AA92 +8292 +1492 +0886 +ENDCHAR +STARTCHAR uni4BA6 +ENCODING 19366 +BBX 15 16 0 -2 +BITMAP +0020 +7E10 +48FE +7E00 +487C +7E44 +487C +4800 +7EFE +0282 +AABA +AAAA +AABA +8282 +148A +0884 +ENDCHAR +STARTCHAR uni4BA7 +ENCODING 19367 +BBX 15 16 0 -2 +BITMAP +1010 +1028 +1044 +FE82 +11FE +7C90 +44FC +7C90 +44FC +7C90 +10FE +FE02 +12AA +12AA +1414 +1008 +ENDCHAR +STARTCHAR uni4BA8 +ENCODING 19368 +BBX 15 16 0 -2 +BITMAP +0020 +7E10 +48FE +7EA2 +4810 +7EFE +4844 +4828 +7EFE +0210 +AA10 +AA7C +AA10 +8210 +1410 +0810 +ENDCHAR +STARTCHAR uni4BA9 +ENCODING 19369 +BBX 15 15 0 -2 +BITMAP +7E7C +4844 +7E74 +4854 +7EFE +4882 +487C +7E44 +027C +AA44 +AA7C +AA44 +8244 +1454 +0848 +ENDCHAR +STARTCHAR uni4BAA +ENCODING 19370 +BBX 15 16 0 -2 +BITMAP +0084 +7C84 +50DE +7D44 +5154 +7EDE +5044 +5084 +7D24 +0420 +55FE +5470 +54A8 +8524 +1622 +0820 +ENDCHAR +STARTCHAR uni4BAB +ENCODING 19371 +BBX 15 16 0 -2 +BITMAP +0020 +F9FC +A124 +FBFE +A124 +F9FC +A020 +A1FC +F924 +09FC +A840 +ABFE +A888 +89D0 +0870 +338C +ENDCHAR +STARTCHAR uni4BAC +ENCODING 19372 +BBX 15 16 0 -2 +BITMAP +0048 +7E48 +49FE +7E48 +4800 +7EFC +4884 +48FC +7E84 +02FC +AA20 +ABFE +AA20 +8250 +1488 +0906 +ENDCHAR +STARTCHAR uni4BAD +ENCODING 19373 +BBX 15 16 0 -2 +BITMAP +000E +7EF0 +4822 +7E92 +4844 +7EFE +4882 +48FE +7E82 +02FE +AA82 +AAFE +AA28 +8248 +148A +0906 +ENDCHAR +STARTCHAR uni4BAE +ENCODING 19374 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +53FE +7CA8 +50A8 +7D74 +5222 +5070 +7CA8 +0546 +5678 +5488 +5550 +8420 +1450 +0980 +ENDCHAR +STARTCHAR uni4BAF +ENCODING 19375 +BBX 15 16 0 -2 +BITMAP +0088 +F888 +A088 +FBD0 +A09E +FBE4 +A094 +A7D4 +F914 +09D4 +A954 +A948 +A948 +8A54 +0AD4 +3422 +ENDCHAR +STARTCHAR uni4BB0 +ENCODING 19376 +BBX 15 16 0 -2 +BITMAP +0020 +7E10 +48FE +7E44 +4828 +7EFE +4882 +4892 +7EFE +0292 +AABA +AAAA +AAAA +82BA +1482 +0886 +ENDCHAR +STARTCHAR uni4BB1 +ENCODING 19377 +BBX 15 15 0 -2 +BITMAP +FA7E +A110 +F930 +A04A +F89A +A62C +A24C +FA9A +0A2A +AA4A +AA88 +AA28 +8D10 +08FE +3000 +ENDCHAR +STARTCHAR uni4BB2 +ENCODING 19378 +BBX 15 16 0 -2 +BITMAP +0028 +7E28 +487C +7E28 +4828 +7EFE +4810 +487C +7E54 +027C +AA54 +AA7C +AA00 +8228 +1444 +0882 +ENDCHAR +STARTCHAR uni4BB3 +ENCODING 19379 +BBX 15 16 0 -2 +BITMAP +003C +FBE0 +A124 +F8A8 +A3FE +F8A8 +A124 +A202 +F9FC +0924 +A924 +A9FC +A924 +8924 +09FC +3104 +ENDCHAR +STARTCHAR uni4BB4 +ENCODING 19380 +BBX 15 16 0 -2 +BITMAP +0010 +7ED4 +4848 +7F4A +4884 +7E84 +497A +4800 +7EFC +0284 +AAFC +AA00 +AA84 +8248 +15FE +0800 +ENDCHAR +STARTCHAR uni4BB5 +ENCODING 19381 +BBX 15 16 0 -2 +BITMAP +0020 +7DFC +5088 +7C50 +53FE +7C00 +51FC +5124 +7DFC +0524 +55FC +5420 +55FC +8420 +17FE +0800 +ENDCHAR +STARTCHAR uni4BB6 +ENCODING 19382 +BBX 15 16 0 -2 +BITMAP +0050 +7E48 +48FE +7F90 +48FC +7E90 +48FC +4890 +7EFE +0280 +AA10 +AAFE +AA38 +8254 +1492 +0810 +ENDCHAR +STARTCHAR uni4BB7 +ENCODING 19383 +BBX 15 15 0 -2 +BITMAP +7EFE +48AA +7EAA +48FE +7E40 +48FE +4922 +7EFA +02AA +AAAA +AAFA +AA22 +82FA +140A +0804 +ENDCHAR +STARTCHAR uni4BB8 +ENCODING 19384 +BBX 15 16 0 -2 +BITMAP +0A80 +3138 +2288 +3838 +2288 +3938 +2288 +7FFE +5102 +9FF4 +1100 +1FF0 +1100 +1FFC +2A44 +492C +ENDCHAR +STARTCHAR uni4BB9 +ENCODING 19385 +BBX 15 16 0 -2 +BITMAP +0020 +F93C +A120 +FBFE +A010 +F814 +A3FE +A210 +FBF0 +0A54 +AA54 +AAD4 +AB68 +8C4A +0896 +3322 +ENDCHAR +STARTCHAR uni4BBA +ENCODING 19386 +BBX 15 16 0 -2 +BITMAP +0040 +F820 +A3FE +F888 +A052 +FFAC +A2AA +A2A8 +FDAC +0800 +A904 +A9FC +A904 +89FC +0904 +3204 +ENDCHAR +STARTCHAR uni4BBB +ENCODING 19387 +BBX 15 16 0 -2 +BITMAP +0020 +FBFE +A020 +F9FC +A000 +FBFE +A002 +A1FC +F820 +0BFE +A800 +ABFE +A804 +8BBE +0AA4 +338C +ENDCHAR +STARTCHAR uni4BBC +ENCODING 19388 +BBX 15 16 0 -2 +BITMAP +0012 +7E54 +48A8 +7E44 +4892 +7E54 +4898 +4824 +7EC2 +0284 +AAEE +AB24 +AAB4 +825E +1444 +0884 +ENDCHAR +STARTCHAR uni4BBD +ENCODING 19389 +BBX 15 16 0 -2 +BITMAP +0040 +F820 +A3FE +FA50 +A3FE +FA52 +A3FE +A200 +FA94 +0AD8 +AA90 +AAD2 +AA8E +8C00 +0954 +322A +ENDCHAR +STARTCHAR uni4BBE +ENCODING 19390 +BBX 15 16 0 -2 +BITMAP +0110 +F890 +A3DE +F810 +A25E +F982 +A3DE +A010 +FBDE +0A50 +ABDE +AA50 +ABDE +8A50 +0A52 +32CE +ENDCHAR +STARTCHAR uni4BBF +ENCODING 19391 +BBX 15 16 0 -2 +BITMAP +0020 +FBFE +A24A +F9FE +A048 +F9FE +A048 +A3FE +F884 +09FE +AA84 +A8FC +A920 +893C +0AA0 +347E +ENDCHAR +STARTCHAR uni4BC0 +ENCODING 19392 +BBX 15 16 0 -2 +BITMAP +03FC +F908 +A1F8 +F908 +A1F8 +F90E +A7F8 +A008 +FFFE +0A94 +AB9C +AA94 +AB9C +8AD6 +0FBC +3084 +ENDCHAR +STARTCHAR uni4BC1 +ENCODING 19393 +BBX 15 16 0 -2 +BITMAP +0040 +0FFE +F200 +A3F8 +F000 +A7F8 +F408 +A7F8 +F220 +1D5C +57F4 +BC94 +95DC +1C96 +57F6 +2CA2 +ENDCHAR +STARTCHAR uni4BC2 +ENCODING 19394 +BBX 15 15 1 -1 +BITMAP +1FF8 +1080 +1FF0 +1080 +1FF8 +1548 +22A8 +7EFE +4890 +7FFE +5552 +AB2E +7FFC +0D60 +F11E +ENDCHAR +STARTCHAR uni4BC3 +ENCODING 19395 +BBX 15 16 0 -2 +BITMAP +0040 +F820 +0820 +4BFE +4A02 +4C44 +4840 +7FFE +0488 +0488 +1D08 +E4D0 +4420 +0450 +2888 +1304 +ENDCHAR +STARTCHAR uni4BC4 +ENCODING 19396 +BBX 15 15 0 -2 +BITMAP +F8FC +0884 +4884 +4884 +48FC +4820 +7C20 +05FE +0522 +1D52 +E58A +450A +0502 +290A +1104 +ENDCHAR +STARTCHAR uni4BC5 +ENCODING 19397 +BBX 15 15 0 -2 +BITMAP +F1FE +1084 +50FC +5084 +50FC +5086 +7BFC +0804 +0BDE +3852 +C952 +0894 +0948 +2A54 +1422 +ENDCHAR +STARTCHAR uni4BC6 +ENCODING 19398 +BBX 15 16 0 -2 +BITMAP +0020 +7F20 +4120 +7920 +4920 +FFA0 +80A0 +7F20 +4120 +7F20 +4120 +7F22 +4122 +4122 +451E +4200 +ENDCHAR +STARTCHAR uni4BC7 +ENCODING 19399 +BBX 14 16 0 -2 +BITMAP +0020 +7C20 +4420 +7420 +54FC +FE24 +8224 +7C24 +4424 +7C44 +4444 +7C44 +4484 +4484 +5528 +4A10 +ENDCHAR +STARTCHAR uni4BC8 +ENCODING 19400 +BBX 15 15 0 -2 +BITMAP +7CFC +4400 +7400 +5400 +FEFE +8250 +7C50 +4450 +7C50 +4450 +7C52 +4452 +4492 +548E +4900 +ENDCHAR +STARTCHAR uni4BC9 +ENCODING 19401 +BBX 15 16 0 -2 +BITMAP +0040 +7C40 +4440 +747C +5444 +FE88 +82A0 +7D20 +4420 +7C50 +4450 +7C48 +4488 +4484 +5504 +4A02 +ENDCHAR +STARTCHAR uni4BCA +ENCODING 19402 +BBX 15 14 1 -1 +BITMAP +7DFE +4404 +5C04 +54F4 +FE94 +8294 +7C94 +4494 +7C94 +44F4 +7C04 +4404 +4404 +4C1C +ENDCHAR +STARTCHAR uni4BCB +ENCODING 19403 +BBX 15 16 0 -2 +BITMAP +0050 +7C48 +4448 +7440 +55FE +FE40 +8240 +7C7C +44A4 +7CA4 +44A8 +7D28 +4510 +4628 +5444 +4882 +ENDCHAR +STARTCHAR uni4BCC +ENCODING 19404 +BBX 15 15 0 -2 +BITMAP +7CFE +4482 +7482 +54FE +FEA0 +82A0 +7CA0 +44F8 +7CA8 +44A8 +7CA8 +4528 +452A +564A +4886 +ENDCHAR +STARTCHAR uni4BCD +ENCODING 19405 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4450 +7450 +5488 +FF24 +8212 +7C10 +45FC +7C04 +4408 +7C88 +4450 +4420 +5410 +4810 +ENDCHAR +STARTCHAR uni4BCE +ENCODING 19406 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4450 +7450 +5488 +FF04 +82FA +7C20 +4420 +7C20 +45FC +7C20 +4420 +4420 +5420 +4820 +ENDCHAR +STARTCHAR uni4BCF +ENCODING 19407 +BBX 15 16 0 -2 +BITMAP +0004 +7C1E +44F0 +7410 +5410 +FEFE +8210 +7C10 +4410 +7CFE +4482 +7C82 +4482 +4482 +54FE +4882 +ENDCHAR +STARTCHAR uni4BD0 +ENCODING 19408 +BBX 15 16 0 -2 +BITMAP +0010 +7C10 +4410 +74FE +5492 +FE92 +82AA +7CC6 +4492 +7C92 +44AA +7CC6 +4482 +4482 +548A +4884 +ENDCHAR +STARTCHAR uni4BD1 +ENCODING 19409 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4524 +74A4 +54A8 +FE20 +83FE +7C50 +4450 +7C50 +4450 +7C52 +4452 +4492 +548E +4900 +ENDCHAR +STARTCHAR uni4BD2 +ENCODING 19410 +BBX 15 15 1 -1 +BITMAP +0040 +7C4E +4480 +5D00 +5420 +FE2E +8244 +7CC4 +4544 +7C44 +4444 +7C44 +4444 +4444 +4C4C +ENDCHAR +STARTCHAR uni4BD3 +ENCODING 19411 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +44FC +7420 +5420 +FE20 +83FE +7C00 +4420 +7C20 +44FC +7C20 +4420 +4420 +55FE +4800 +ENDCHAR +STARTCHAR uni4BD4 +ENCODING 19412 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +45FE +7502 +5400 +FE1C +82E0 +7C20 +4420 +7C3E +45E0 +7C20 +4422 +4422 +541E +4800 +ENDCHAR +STARTCHAR uni4BD5 +ENCODING 19413 +BBX 15 15 0 -2 +BITMAP +7C06 +45D8 +7448 +5448 +FE88 +829E +7DC8 +4448 +7D48 +4548 +7C9E +4480 +4540 +563E +4C00 +ENDCHAR +STARTCHAR uni4BD6 +ENCODING 19414 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +44FC +7484 +5484 +FEFC +8284 +7C84 +44FC +7CA2 +44A4 +7C98 +4490 +4488 +54C4 +4882 +ENDCHAR +STARTCHAR uni4BD7 +ENCODING 19415 +BBX 15 16 0 -2 +BITMAP +0110 +7D12 +4514 +75D8 +5510 +FF12 +8352 +7D8E +4520 +7C20 +45FC +7C20 +4420 +4420 +57FE +4800 +ENDCHAR +STARTCHAR uni4BD8 +ENCODING 19416 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +45FE +7502 +5604 +FEF8 +8200 +7C00 +45FE +7C50 +4450 +7C50 +4492 +4492 +550E +4A00 +ENDCHAR +STARTCHAR uni4BD9 +ENCODING 19417 +BBX 15 16 0 -2 +BITMAP +0014 +7C12 +44FE +7410 +5410 +FEFE +8292 +7C92 +44FE +7C92 +4492 +7CFE +4492 +4492 +5492 +4886 +ENDCHAR +STARTCHAR uni4BDA +ENCODING 19418 +BBX 15 16 0 -2 +BITMAP +0020 +7C44 +44F8 +7410 +5424 +FEFE +8202 +7CFC +4484 +7CFC +4484 +7CFC +4484 +4484 +5494 +4888 +ENDCHAR +STARTCHAR uni4BDB +ENCODING 19419 +BBX 14 16 0 -2 +BITMAP +0040 +7C20 +45FC +7504 +5480 +FE9C +82D4 +7D54 +4554 +7D54 +46D8 +7C50 +4494 +4494 +5514 +4A0C +ENDCHAR +STARTCHAR uni4BDC +ENCODING 19420 +BBX 15 15 0 -2 +BITMAP +7CFC +4484 +7484 +54FC +FE84 +8284 +7CFC +4440 +7CFE +452A +7E4A +4492 +4522 +544A +4884 +ENDCHAR +STARTCHAR uni4BDD +ENCODING 19421 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +44FE +7440 +54FC +FF10 +82FE +7C00 +44FC +7C84 +44FC +7C84 +44FC +4484 +5494 +4888 +ENDCHAR +STARTCHAR uni4BDE +ENCODING 19422 +BBX 14 15 0 -2 +BITMAP +7CF8 +4488 +7488 +54E8 +FEA8 +82A8 +7DFC +4504 +7D74 +4554 +7D54 +4574 +4504 +5514 +4908 +ENDCHAR +STARTCHAR uni4BDF +ENCODING 19423 +BBX 15 15 0 -2 +BITMAP +7C84 +4448 +7400 +55FE +FE20 +8244 +7DA8 +4430 +7C58 +4598 +7C34 +4452 +4590 +5450 +4820 +ENDCHAR +STARTCHAR uni4BE0 +ENCODING 19424 +BBX 15 15 0 -2 +BITMAP +7CF8 +4488 +7488 +54F8 +FE88 +8288 +7CF8 +4400 +7DFC +4554 +7D54 +4554 +4554 +57FE +4800 +ENDCHAR +STARTCHAR uni4BE1 +ENCODING 19425 +BBX 15 16 0 -2 +BITMAP +0088 +7C50 +4400 +75FE +5450 +FFFC +8254 +7DFE +4454 +7DFC +4450 +7CD8 +4554 +4652 +5450 +4850 +ENDCHAR +STARTCHAR uni4BE2 +ENCODING 19426 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2410 +3F7C +2638 +2D54 +37FA +2208 +23C8 +2248 +2FFE +2A0A +23F8 +4208 +4228 +8210 +ENDCHAR +STARTCHAR uni4BE3 +ENCODING 19427 +BBX 15 16 0 -2 +BITMAP +0020 +7DFC +4524 +75FC +5420 +FFFE +8200 +7DFC +4504 +7DFC +4504 +7DFC +4504 +45FC +5488 +4904 +ENDCHAR +STARTCHAR uni4BE4 +ENCODING 19428 +BBX 15 16 0 -2 +BITMAP +0010 +7C28 +4444 +74BA +5500 +FEFE +8292 +7CD6 +4492 +7CFE +4400 +7C7C +4444 +447C +5444 +487C +ENDCHAR +STARTCHAR uni4BE5 +ENCODING 19429 +BBX 15 15 0 -2 +BITMAP +7CFE +4482 +74FE +5482 +FEFE +8244 +7CAA +44EE +7C44 +44AA +7CEE +4400 +44D4 +54AA +492A +ENDCHAR +STARTCHAR uni4BE6 +ENCODING 19430 +BBX 15 16 0 -2 +BITMAP +0024 +7CFE +4424 +7400 +54FE +FEAA +82AA +7CFE +4414 +7CFE +4490 +7CD2 +44AC +44AA +5496 +4922 +ENDCHAR +STARTCHAR uni4BE7 +ENCODING 19431 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0000 +1FF0 +1010 +1FF0 +0000 +7FFE +4002 +9FF4 +1010 +17D0 +1450 +17D0 +1010 +1030 +ENDCHAR +STARTCHAR uni4BE8 +ENCODING 19432 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0000 +0FE0 +0820 +7FFC +4004 +4FE4 +4824 +4FEC +0100 +FFFE +0280 +0C60 +F01E +ENDCHAR +STARTCHAR uni4BE9 +ENCODING 19433 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0000 +1FF0 +1010 +7FFC +4004 +4FE4 +4824 +4FEC +0000 +3FF8 +2108 +3FF8 +2002 +1FFE +ENDCHAR +STARTCHAR uni4BEA +ENCODING 19434 +BBX 15 16 0 -2 +BITMAP +2000 +11FE +FE10 +0020 +7CFC +4484 +7C84 +00FC +FE84 +82FC +BA84 +AA84 +AAFC +BA48 +8284 +8702 +ENDCHAR +STARTCHAR uni4BEB +ENCODING 19435 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +45FE +7C00 +44FC +7C84 +10FC +FE00 +01FE +7D02 +457A +7D4A +117A +5502 +930A +3104 +ENDCHAR +STARTCHAR uni4BEC +ENCODING 19436 +BBX 15 16 0 -2 +BITMAP +1000 +FEEE +44AA +7CAA +00EE +FE00 +AA7C +BA54 +827C +FE54 +447C +7C10 +10FE +FE10 +1010 +1010 +ENDCHAR +STARTCHAR uni4BED +ENCODING 19437 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0000 +3FF0 +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni4BEE +ENCODING 19438 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0000 +3FE0 +0420 +047C +0804 +3014 +C008 +ENDCHAR +STARTCHAR uni4BEF +ENCODING 19439 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0100 +1110 +2108 +4164 +0380 +1C00 +E000 +ENDCHAR +STARTCHAR uni4BF0 +ENCODING 19440 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0280 +0440 +1C70 +E44E +0440 +0840 +1040 +ENDCHAR +STARTCHAR uni4BF1 +ENCODING 19441 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0000 +7FFC +0100 +0770 +190C +E102 +0100 +ENDCHAR +STARTCHAR uni4BF2 +ENCODING 19442 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0000 +3FF8 +2108 +3FF8 +2002 +2002 +1FFE +ENDCHAR +STARTCHAR uni4BF3 +ENCODING 19443 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0440 +0820 +3218 +C446 +0820 +1FF0 +0810 +ENDCHAR +STARTCHAR uni4BF4 +ENCODING 19444 +BBX 15 16 0 -2 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +0000 +0FE0 +1020 +601C +1FE0 +0820 +04C0 +0780 +F87E +ENDCHAR +STARTCHAR uni4BF5 +ENCODING 19445 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0100 +3FF8 +0100 +0820 +FFFE +0820 +1020 +ENDCHAR +STARTCHAR uni4BF6 +ENCODING 19446 +BBX 15 15 0 -1 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +FFFE +ENDCHAR +STARTCHAR uni4BF7 +ENCODING 19447 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0090 +FFFE +1088 +7E50 +1024 +20D4 +C70C +ENDCHAR +STARTCHAR uni4BF8 +ENCODING 19448 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +4100 +21FC +0A44 +1048 +E0A0 +2118 +2606 +ENDCHAR +STARTCHAR uni4BF9 +ENCODING 19449 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0000 +3FF0 +0010 +1FF0 +0010 +7FFE +4002 +9FF4 +0820 +07C0 +F83E +ENDCHAR +STARTCHAR uni4BFA +ENCODING 19450 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0018 +3FE0 +2100 +3FFC +2080 +2C64 +301C +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni4BFB +ENCODING 19451 +BBX 15 16 0 -2 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +1100 +1FF8 +2100 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni4BFC +ENCODING 19452 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +1400 +0820 +14A4 +6CA8 +1550 +6488 +1906 +ENDCHAR +STARTCHAR uni4BFD +ENCODING 19453 +BBX 15 16 0 -2 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +0100 +3FF8 +0440 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni4BFE +ENCODING 19454 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0000 +3FF8 +2108 +27C8 +2108 +2FE8 +2008 +27C8 +4448 +47C8 +8018 +ENDCHAR +STARTCHAR uni4BFF +ENCODING 19455 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0100 +3FF8 +0820 +1450 +0100 +7FFC +0100 +ENDCHAR +STARTCHAR uni4C00 +ENCODING 19456 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0000 +1FF0 +0100 +FFFE +0920 +711C +0200 +FFFE +0820 +07C0 +7838 +ENDCHAR +STARTCHAR uni4C01 +ENCODING 19457 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0000 +3FF0 +0010 +1FF0 +0010 +FFFE +1110 +09A0 +0540 +1930 +E30E +ENDCHAR +STARTCHAR uni4C02 +ENCODING 19458 +BBX 15 16 0 -2 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +0018 +3FE0 +1210 +0920 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni4C03 +ENCODING 19459 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0820 +0440 +7FFC +0440 +2448 +1450 +FFFE +ENDCHAR +STARTCHAR uni4C04 +ENCODING 19460 +BBX 15 16 0 -2 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +4904 +4892 +87F2 +ENDCHAR +STARTCHAR uni4C05 +ENCODING 19461 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0000 +7FFC +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +ENDCHAR +STARTCHAR uni4C06 +ENCODING 19462 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0000 +1FF0 +0220 +0140 +7FFC +1884 +6288 +0100 +FFFE +0920 +711C +ENDCHAR +STARTCHAR uni4C07 +ENCODING 19463 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0200 +1FD0 +0220 +FFFE +0300 +0FF0 +3810 +CFF0 +0810 +0FF0 +0810 +ENDCHAR +STARTCHAR uni4C08 +ENCODING 19464 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0820 +0440 +7FFC +0100 +3FF8 +0200 +FFFE +0800 +37F0 +C080 +1FFC +ENDCHAR +STARTCHAR uni4C09 +ENCODING 19465 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0000 +1078 +3E48 +2248 +2A86 +FF78 +2248 +2A28 +4210 +4A28 +84C6 +ENDCHAR +STARTCHAR uni4C0A +ENCODING 19466 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0110 +FFFE +2108 +3FF8 +2108 +3FF8 +2108 +0020 +FFFE +0820 +0460 +ENDCHAR +STARTCHAR uni4C0B +ENCODING 19467 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0000 +1FF0 +1010 +1FF0 +1010 +7FFC +4404 +3FF8 +0820 +07C0 +7838 +ENDCHAR +STARTCHAR uni4C0C +ENCODING 19468 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +1088 +2154 +4A22 +113C +3120 +52A0 +147E +ENDCHAR +STARTCHAR uni4C0D +ENCODING 19469 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0100 +7FFC +0910 +3108 +C6C4 +1930 +E92E +05C0 +1930 +6108 +0300 +ENDCHAR +STARTCHAR uni4C0E +ENCODING 19470 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0100 +1FF0 +1110 +1FF0 +0100 +FFFE +1010 +1FF0 +1010 +1FF0 +0820 +ENDCHAR +STARTCHAR uni4C0F +ENCODING 19471 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0828 +7F24 +0820 +FFFE +1220 +3FA4 +6424 +BF28 +2412 +3FAA +2046 +ENDCHAR +STARTCHAR uni4C10 +ENCODING 19472 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +2420 +3F3E +2140 +3F50 +2488 +3F08 +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni4C11 +ENCODING 19473 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0000 +3FF8 +0100 +7FFE +4922 +8514 +7FFC +0200 +3FF8 +2448 +2458 +ENDCHAR +STARTCHAR uni4C12 +ENCODING 19474 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0820 +7FFC +0820 +7FFE +4002 +9FF4 +0600 +1920 +06C0 +38A0 +0318 +ENDCHAR +STARTCHAR uni4C13 +ENCODING 19475 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0200 +1FF0 +1490 +1250 +FFFE +9212 +2FE8 +4404 +07E0 +0820 +3060 +ENDCHAR +STARTCHAR uni4C14 +ENCODING 19476 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0800 +3E78 +2248 +2A86 +7E78 +2248 +2A30 +464C +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni4C15 +ENCODING 19477 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +01FC +0100 +3FFE +2102 +21F0 +2F04 +20FC +2000 +4FFC +4914 +BFFE +ENDCHAR +STARTCHAR uni4C16 +ENCODING 19478 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +2850 +3E7C +4890 +FEFE +1528 +264A +5FF6 +1490 +1250 +1FF0 +0820 +ENDCHAR +STARTCHAR uni4C17 +ENCODING 19479 +BBX 14 14 1 -1 +BITMAP +BCF4 +8844 +BCF4 +8844 +BCF4 +8FC4 +9084 +9FC4 +9244 +BFE4 +A224 +BFE4 +8214 +83FC +ENDCHAR +STARTCHAR uni4C18 +ENCODING 19480 +BBX 15 16 0 -2 +BITMAP +BEFA +8822 +BEFA +8822 +BEFA +8002 +BEFA +924A +8A2A +934A +8282 +8C62 +B19A +8602 +8072 +9F86 +ENDCHAR +STARTCHAR uni4C19 +ENCODING 19481 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +0010 +7CFE +4410 +7C10 +00FC +FE44 +8244 +AA44 +9228 +FE28 +9210 +9228 +9244 +8682 +ENDCHAR +STARTCHAR uni4C1A +ENCODING 19482 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +0010 +7CFE +4444 +7C44 +0044 +FE44 +8244 +AA28 +9228 +FE10 +9210 +9228 +9244 +8682 +ENDCHAR +STARTCHAR uni4C1B +ENCODING 19483 +BBX 15 15 0 -2 +BITMAP +FE00 +01FE +7C40 +4440 +7C78 +0048 +FE48 +8268 +AA98 +9298 +FE88 +928A +92AA +92CA +8686 +ENDCHAR +STARTCHAR uni4C1C +ENCODING 19484 +BBX 15 15 0 -2 +BITMAP +EFEE +2002 +27C2 +2442 +E7CE +8008 +8FE8 +8828 +EAAE +2922 +2FE2 +2922 +2922 +A92A +4864 +ENDCHAR +STARTCHAR uni4C1D +ENCODING 19485 +BBX 15 16 0 -2 +BITMAP +0044 +FE24 +0028 +7CFE +4492 +7CD6 +00BA +FE92 +82FE +AA00 +927C +FE44 +927C +9244 +927C +8644 +ENDCHAR +STARTCHAR uni4C1E +ENCODING 19486 +BBX 15 16 0 -2 +BITMAP +713C +17C4 +719C +47F0 +725C +17C4 +5A54 +23C8 +FFFE +0000 +1FF0 +1010 +7FFC +4444 +5FF4 +410C +ENDCHAR +STARTCHAR uni4C1F +ENCODING 19487 +BBX 15 16 0 -2 +BITMAP +3FF8 +0000 +FFFE +0820 +1010 +3FF8 +0208 +1FF0 +1110 +1FF0 +1210 +1FF0 +04A8 +08BA +3082 +C07E +ENDCHAR +STARTCHAR uni4C20 +ENCODING 19488 +BBX 15 15 1 -1 +BITMAP +0810 +1010 +7EFE +4A92 +4A92 +7EFE +4A92 +4A92 +7E92 +28FE +2A10 +2A90 +4F92 +4802 +87FE +ENDCHAR +STARTCHAR uni4C21 +ENCODING 19489 +BBX 15 16 0 -2 +BITMAP +0808 +1008 +7F28 +4928 +493E +7F48 +4908 +4908 +7F7E +1008 +1A08 +2C94 +2F92 +4820 +4842 +87FE +ENDCHAR +STARTCHAR uni4C22 +ENCODING 19490 +BBX 15 15 0 -1 +BITMAP +1020 +2040 +7C8E +5500 +5420 +7C5E +54C4 +5544 +7C44 +1044 +2A44 +2D54 +4F48 +4802 +87FE +ENDCHAR +STARTCHAR uni4C23 +ENCODING 19491 +BBX 15 15 0 -1 +BITMAP +1000 +21FC +7D04 +5504 +55AC +7D54 +5554 +5554 +7D54 +11AC +2B04 +2D14 +4F08 +4802 +87FE +ENDCHAR +STARTCHAR uni4C24 +ENCODING 19492 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FDFC +1124 +7D24 +55FC +7D24 +5524 +7DFC +1040 +3868 +54B2 +92BE +1120 +1122 +121E +ENDCHAR +STARTCHAR uni4C25 +ENCODING 19493 +BBX 15 16 0 -2 +BITMAP +0050 +7FFC +0040 +3E48 +2250 +3E20 +0054 +7FFC +1114 +1FF0 +1210 +1FF0 +04A8 +08BA +3082 +C07E +ENDCHAR +STARTCHAR uni4C26 +ENCODING 19494 +BBX 15 16 0 -2 +BITMAP +0800 +1008 +7F10 +497E +494A +7F7E +4952 +497E +7F28 +1048 +1A7E +2C88 +2F88 +4808 +4802 +87FE +ENDCHAR +STARTCHAR uni4C27 +ENCODING 19495 +BBX 15 15 0 -1 +BITMAP +1020 +203C +7C20 +54FE +54A2 +7CB8 +54E4 +549C +7C80 +10B8 +2AA8 +2D2A +4F46 +4A02 +87FE +ENDCHAR +STARTCHAR uni4C28 +ENCODING 19496 +BBX 15 15 0 -1 +BITMAP +1000 +21FC +7D24 +55FC +5500 +7D7C +5544 +557C +7D44 +117C +2A44 +2D7C +4F00 +4802 +87FE +ENDCHAR +STARTCHAR uni4C29 +ENCODING 19497 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +7DFC +1294 +1494 +FFFC +10A4 +20A4 +7EFC +A220 +2244 +3E6A +226E +22A0 +3EA2 +231E +ENDCHAR +STARTCHAR uni4C2A +ENCODING 19498 +BBX 15 16 0 -2 +BITMAP +1020 +9240 +54FC +AA94 +4494 +82FC +7CA4 +44A4 +44FC +7C20 +4444 +446A +7C6E +44A0 +44A2 +4D1E +ENDCHAR +STARTCHAR uni4C2B +ENCODING 19499 +BBX 15 15 0 -1 +BITMAP +1010 +207C +7C10 +54FE +5444 +7CEE +5444 +54EE +7C00 +10FE +2A28 +2D2A +4F46 +4882 +87FE +ENDCHAR +STARTCHAR uni4C2C +ENCODING 19500 +BBX 15 15 0 -1 +BITMAP +10FC +2028 +7C10 +55FE +5452 +7C90 +55FE +54AA +7CC6 +10BA +2AAA +2DBA +4F84 +4802 +87FE +ENDCHAR +STARTCHAR uni4C2D +ENCODING 19501 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +10FC +FE94 +AA94 +AAFC +AAA4 +86A4 +00FC +FE20 +1044 +FE6A +AA6E +AAA0 +AAA2 +871E +ENDCHAR +STARTCHAR uni4C2E +ENCODING 19502 +BBX 15 16 0 -2 +BITMAP +2088 +43FE +F820 +A9FC +A820 +FBFE +A854 +A992 +F890 +23FE +2090 +54D4 +5B8A +5E96 +51A2 +8FFE +ENDCHAR +STARTCHAR uni4C2F +ENCODING 19503 +BBX 15 15 0 -1 +BITMAP +1100 +215C +7D84 +5558 +54C8 +7D3E +55CA +56A8 +7DEC +10A8 +2B68 +2D5E +4F80 +4802 +87FE +ENDCHAR +STARTCHAR uni4C30 +ENCODING 19504 +BBX 15 16 0 -2 +BITMAP +0020 +7C40 +10FC +FE94 +9294 +54FC +10A4 +54A4 +00FC +FE20 +1044 +FE6A +AA6E +AAA0 +AAA2 +871E +ENDCHAR +STARTCHAR uni4C31 +ENCODING 19505 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +10FC +FE94 +9294 +54FC +00A4 +EEA4 +AAFC +EE20 +0044 +FE6A +546E +BAA0 +10A2 +FF1E +ENDCHAR +STARTCHAR uni4C32 +ENCODING 19506 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3E20 +4220 +8420 +7F20 +4920 +4920 +7F20 +4920 +4920 +7F22 +0022 +5522 +4A9E +8A80 +ENDCHAR +STARTCHAR uni4C33 +ENCODING 19507 +BBX 15 16 0 -2 +BITMAP +2000 +2000 +7CFE +4410 +8810 +7E10 +5210 +5210 +7E10 +5210 +5210 +7E10 +0010 +AA10 +AA50 +0020 +ENDCHAR +STARTCHAR uni4C34 +ENCODING 19508 +BBX 14 15 0 -1 +BITMAP +2040 +2040 +7880 +48FC +9100 +7E00 +54F8 +5408 +7C10 +5420 +5440 +7C80 +0084 +AA84 +AA7C +ENDCHAR +STARTCHAR uni4C35 +ENCODING 19509 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7C04 +4408 +8810 +7E20 +5220 +53FE +7E20 +5220 +5220 +7E20 +0020 +AA20 +AAA0 +0040 +ENDCHAR +STARTCHAR uni4C36 +ENCODING 19510 +BBX 15 15 0 -1 +BITMAP +2020 +2010 +7C10 +4400 +89FE +7E40 +5240 +5240 +7E40 +5240 +5240 +7E40 +0040 +AA40 +AA7E +ENDCHAR +STARTCHAR uni4C37 +ENCODING 19511 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7820 +49FE +9020 +7C20 +5420 +54FC +7C20 +5420 +5420 +7DFE +0020 +AA20 +AA20 +0020 +ENDCHAR +STARTCHAR uni4C38 +ENCODING 19512 +BBX 15 15 0 -1 +BITMAP +2008 +2048 +7848 +4848 +9044 +7C84 +54A4 +5522 +7C20 +5440 +5440 +7C48 +0084 +ABFE +AA82 +ENDCHAR +STARTCHAR uni4C39 +ENCODING 19513 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +7C24 +4420 +882E +7EF0 +5220 +5224 +7E24 +5228 +5228 +7E10 +0032 +AA4A +AB86 +0002 +ENDCHAR +STARTCHAR uni4C3A +ENCODING 19514 +BBX 15 16 0 -2 +BITMAP +2004 +200E +7C70 +4440 +8840 +7E40 +527E +5248 +7E48 +5248 +5248 +7E48 +0048 +AA88 +AA88 +0108 +ENDCHAR +STARTCHAR uni4C3B +ENCODING 19515 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3E20 +423E +8444 +7F44 +4944 +49A4 +7F28 +4928 +4910 +7F10 +0028 +5528 +4AC4 +8A82 +ENDCHAR +STARTCHAR uni4C3C +ENCODING 19516 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7820 +4850 +9050 +7C88 +5544 +5622 +7C20 +54F8 +5408 +7C08 +0010 +AA10 +AA20 +0020 +ENDCHAR +STARTCHAR uni4C3D +ENCODING 19517 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7820 +4BFE +9020 +7C20 +55FC +5524 +7D24 +5524 +5524 +7D34 +0128 +AA20 +AA20 +0020 +ENDCHAR +STARTCHAR uni4C3E +ENCODING 19518 +BBX 15 15 0 -1 +BITMAP +2000 +2000 +78FC +48A4 +90A4 +7CA4 +54A4 +54A4 +7CFC +5480 +5480 +7C80 +0082 +AA82 +AA7E +ENDCHAR +STARTCHAR uni4C3F +ENCODING 19519 +BBX 15 15 0 -1 +BITMAP +2040 +2040 +787E +4880 +9120 +7CA0 +54AC +54B4 +7DE4 +54A4 +54B4 +7CA8 +00A2 +AA82 +AA7E +ENDCHAR +STARTCHAR uni4C40 +ENCODING 19520 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7820 +48FC +90A4 +7CA4 +54A4 +54A4 +7CA4 +55FE +5420 +7C50 +0050 +AA88 +AB04 +0202 +ENDCHAR +STARTCHAR uni4C41 +ENCODING 19521 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7820 +4BFE +9050 +7C50 +5488 +5524 +7E22 +5420 +55FC +7C20 +0020 +AA20 +AA20 +0020 +ENDCHAR +STARTCHAR uni4C42 +ENCODING 19522 +BBX 14 16 0 -2 +BITMAP +2010 +2050 +7850 +4890 +90FC +7D54 +55D4 +5494 +7C94 +5514 +5554 +7DD4 +0054 +AA24 +AA34 +0048 +ENDCHAR +STARTCHAR uni4C43 +ENCODING 19523 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7C50 +4450 +887C +7E90 +5310 +5210 +7EFE +5210 +5228 +7E28 +0028 +AA44 +AA44 +0082 +ENDCHAR +STARTCHAR uni4C44 +ENCODING 19524 +BBX 15 16 0 -2 +BITMAP +2008 +201C +79F0 +4950 +9150 +7D50 +5550 +5550 +7D50 +5548 +5548 +7D68 +0154 +AA74 +AA52 +0400 +ENDCHAR +STARTCHAR uni4C45 +ENCODING 19525 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7820 +4BFE +9020 +7C20 +5420 +55FC +7C70 +54A8 +54A8 +7D24 +0124 +AA22 +AA20 +0020 +ENDCHAR +STARTCHAR uni4C46 +ENCODING 19526 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7844 +4848 +908E +7C82 +557A +5614 +7C20 +5420 +57FE +7C20 +0020 +AA20 +AAA0 +0040 +ENDCHAR +STARTCHAR uni4C47 +ENCODING 19527 +BBX 15 15 0 -1 +BITMAP +2000 +2000 +7CFC +4484 +8884 +7E84 +52FC +5284 +7E84 +5284 +52FC +7E84 +0000 +AA00 +ABFE +ENDCHAR +STARTCHAR uni4C48 +ENCODING 19528 +BBX 15 16 0 -2 +BITMAP +2000 +20FC +7800 +4800 +9000 +7DFC +5420 +5420 +7CA8 +54A4 +5524 +7D22 +0222 +AA20 +AAA0 +0040 +ENDCHAR +STARTCHAR uni4C49 +ENCODING 19529 +BBX 15 15 0 -1 +BITMAP +2000 +20F8 +7888 +4888 +9088 +7CF8 +5488 +5488 +7C88 +54F8 +5488 +7C88 +0088 +AA88 +ABFE +ENDCHAR +STARTCHAR uni4C4A +ENCODING 19530 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7924 +48A4 +90A8 +7C20 +5420 +57FE +7C70 +54A8 +54A8 +7D24 +0124 +AA22 +AA20 +0020 +ENDCHAR +STARTCHAR uni4C4B +ENCODING 19531 +BBX 15 16 0 -2 +BITMAP +2048 +2048 +7848 +4848 +91FE +7C48 +5448 +5448 +7C48 +55FE +5400 +7C48 +0044 +AA84 +AA82 +0102 +ENDCHAR +STARTCHAR uni4C4C +ENCODING 19532 +BBX 15 15 0 -1 +BITMAP +2000 +20FE +7C90 +4490 +8890 +7EBC +52A4 +52A4 +7EA4 +52A4 +52BC +7E90 +0090 +AA90 +AAFE +ENDCHAR +STARTCHAR uni4C4D +ENCODING 19533 +BBX 15 15 0 -1 +BITMAP +2000 +21FE +7840 +4840 +9040 +7C78 +5488 +54A8 +7C98 +5508 +5548 +7C30 +0010 +AA10 +ABFE +ENDCHAR +STARTCHAR uni4C4E +ENCODING 19534 +BBX 15 15 0 -1 +BITMAP +2000 +21FE +7800 +4800 +90FC +7C84 +5484 +54FC +7C84 +5484 +54FC +7C84 +0000 +AA00 +ABFE +ENDCHAR +STARTCHAR uni4C4F +ENCODING 19535 +BBX 15 15 0 -1 +BITMAP +2000 +21FE +7800 +4800 +90FC +7C84 +5484 +5484 +7CFC +5400 +5484 +7C44 +0048 +AA00 +ABFE +ENDCHAR +STARTCHAR uni4C50 +ENCODING 19536 +BBX 15 16 0 -2 +BITMAP +2008 +203C +79C0 +4804 +9144 +7CA8 +5400 +55F8 +7C10 +5420 +57FE +7C20 +0020 +AA20 +AAA0 +0040 +ENDCHAR +STARTCHAR uni4C51 +ENCODING 19537 +BBX 15 16 0 -2 +BITMAP +2080 +208C +78B0 +48A0 +93E0 +7CA0 +54BE +54E8 +7CA8 +57A8 +54A8 +7CA8 +00A8 +AAA8 +AAC8 +0188 +ENDCHAR +STARTCHAR uni4C52 +ENCODING 19538 +BBX 15 16 0 -2 +BITMAP +2000 +207C +7C44 +4444 +887C +7E00 +52FE +5292 +7E92 +5292 +52FE +7E80 +0080 +AA82 +AA82 +007E +ENDCHAR +STARTCHAR uni4C53 +ENCODING 19539 +BBX 15 16 0 -2 +BITMAP +2000 +2006 +79D8 +4848 +9048 +7C88 +549E +55C8 +7C48 +5548 +5548 +7C9E +0080 +AB40 +AA3E +0400 +ENDCHAR +STARTCHAR uni4C54 +ENCODING 19540 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +7888 +4910 +915E +7D64 +5754 +5554 +7D54 +5554 +5554 +7D48 +0148 +AB54 +AB14 +0122 +ENDCHAR +STARTCHAR uni4C55 +ENCODING 19541 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +78FE +4900 +92FC +7C84 +54A4 +5494 +7DFE +5484 +5524 +7D14 +01FE +AA04 +AA28 +0010 +ENDCHAR +STARTCHAR uni4C56 +ENCODING 19542 +BBX 15 16 0 -2 +BITMAP +2000 +20FE +7C28 +4428 +8828 +7EEE +52AA +52AA +7EAA +52AA +52EE +7E28 +0028 +AA28 +AA48 +0088 +ENDCHAR +STARTCHAR uni4C57 +ENCODING 19543 +BBX 15 16 0 -2 +BITMAP +0800 +0F7C +2844 +7F28 +A110 +1628 +3846 +CFE0 +1040 +3FF0 +5110 +1FF0 +1110 +1FF0 +2488 +4244 +ENDCHAR +STARTCHAR uni4C58 +ENCODING 19544 +BBX 13 16 1 -2 +BITMAP +0608 +7848 +0848 +FF48 +2C48 +4A08 +8818 +1FC0 +2080 +7FE0 +A220 +3FE0 +2220 +3FE0 +4910 +8488 +ENDCHAR +STARTCHAR uni4C59 +ENCODING 19545 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +789C +48F4 +9094 +7C94 +57F4 +5414 +7C94 +5494 +55C8 +7EA8 +0088 +AA94 +AA94 +01A2 +ENDCHAR +STARTCHAR uni4C5A +ENCODING 19546 +BBX 15 16 0 -2 +BITMAP +2000 +21F8 +7808 +4808 +90F8 +7C08 +5408 +55FC +7C20 +5524 +54A8 +7C70 +00A8 +AB24 +AAA2 +0040 +ENDCHAR +STARTCHAR uni4C5B +ENCODING 19547 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +7810 +49FE +9010 +7C10 +55D2 +5552 +7D52 +5554 +55D4 +7C08 +00CA +AB1A +AA26 +0042 +ENDCHAR +STARTCHAR uni4C5C +ENCODING 19548 +BBX 15 16 0 -2 +BITMAP +2048 +2048 +7848 +49FE +9048 +7C48 +55FE +5400 +7CFC +5484 +5484 +7CFC +0084 +AA84 +AAFC +0084 +ENDCHAR +STARTCHAR uni4C5D +ENCODING 19549 +BBX 15 16 0 -2 +BITMAP +2020 +2040 +78FE +4892 +9092 +7CFE +5492 +54A2 +7CFE +5448 +5488 +7DFE +0008 +AA08 +AA08 +0008 +ENDCHAR +STARTCHAR uni4C5E +ENCODING 19550 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +79FE +4850 +9088 +7D04 +56FA +5400 +7C00 +55FE +5420 +7CA4 +00A2 +AB22 +AA20 +0060 +ENDCHAR +STARTCHAR uni4C5F +ENCODING 19551 +BBX 15 16 0 -2 +BITMAP +2000 +20FE +7C82 +4482 +88FE +7E88 +5288 +52FE +7E88 +5288 +52BE +7EA2 +00A2 +AAA2 +AABE +0122 +ENDCHAR +STARTCHAR uni4C60 +ENCODING 19552 +BBX 15 16 0 -2 +BITMAP +2048 +2044 +785E +49E0 +9028 +7C12 +546A +5596 +7C48 +545E +55E0 +7C24 +0028 +AA12 +AA6A +0186 +ENDCHAR +STARTCHAR uni4C61 +ENCODING 19553 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +78FE +4902 +9222 +7CAA +5472 +5422 +7DFE +5422 +5472 +7CAA +0122 +AA22 +AA0A +0004 +ENDCHAR +STARTCHAR uni4C62 +ENCODING 19554 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +78F8 +4908 +9210 +7DFC +5424 +5424 +7DFE +5424 +5424 +7DFC +0024 +AA20 +AAA0 +0040 +ENDCHAR +STARTCHAR uni4C63 +ENCODING 19555 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +79FE +4800 +9088 +7C88 +5554 +5622 +7C00 +5420 +55FE +7C20 +0020 +AA20 +AA20 +0020 +ENDCHAR +STARTCHAR uni4C64 +ENCODING 19556 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +787C +4884 +9108 +7E00 +5420 +54CE +7C82 +5482 +54EE +7C82 +0082 +AA82 +AAFE +0082 +ENDCHAR +STARTCHAR uni4C65 +ENCODING 19557 +BBX 14 16 0 -2 +BITMAP +2404 +3FA4 +4424 +FFA4 +0424 +3F84 +2494 +2FE8 +1040 +3FF0 +5110 +1FF0 +1110 +1FF0 +2488 +4244 +ENDCHAR +STARTCHAR uni4C66 +ENCODING 19558 +BBX 15 16 0 -2 +BITMAP +2050 +2048 +7880 +48FE +9190 +7E90 +54FC +5490 +7C90 +54FC +5490 +7C90 +0090 +AAFE +AA80 +0080 +ENDCHAR +STARTCHAR uni4C67 +ENCODING 19559 +BBX 15 16 0 -2 +BITMAP +2020 +2124 +78A8 +4820 +91FC +7C40 +57FE +5488 +7D04 +56FA +5488 +7C88 +00A8 +AA92 +AA82 +007E +ENDCHAR +STARTCHAR uni4C68 +ENCODING 19560 +BBX 15 16 0 -2 +BITMAP +2082 +2082 +73E2 +908A +208A +FBEA +AAAA +AAAA +FAAA +AAEA +A88A +F9CA +02A2 +AC82 +A88A +0084 +ENDCHAR +STARTCHAR uni4C69 +ENCODING 19561 +BBX 15 16 0 -2 +BITMAP +2000 +20FE +7C82 +44C6 +88AA +7EFE +52A2 +5292 +7EFE +52A2 +52A2 +7EBA +0082 +AA82 +AA8A +0084 +ENDCHAR +STARTCHAR uni4C6A +ENCODING 19562 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +79FE +4810 +9010 +7CFE +5410 +5410 +7DFE +5420 +5452 +7CD4 +0148 +AA44 +AA62 +0040 +ENDCHAR +STARTCHAR uni4C6B +ENCODING 19563 +BBX 13 16 1 -2 +BITMAP +0808 +FF88 +0848 +7F48 +4948 +7F48 +2A08 +4928 +9FD0 +2080 +7FE0 +A220 +3FE0 +2220 +3FE0 +4910 +ENDCHAR +STARTCHAR uni4C6C +ENCODING 19564 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +7812 +4890 +909C +7C90 +557E +5600 +7CFC +5484 +54FC +7C84 +00FC +AA84 +AA94 +0088 +ENDCHAR +STARTCHAR uni4C6D +ENCODING 19565 +BBX 15 16 0 -2 +BITMAP +2080 +20FE +7890 +4890 +90D0 +7CBC +5594 +5694 +7CAC +54A4 +54B4 +7C88 +0088 +AA88 +AAFE +0080 +ENDCHAR +STARTCHAR uni4C6E +ENCODING 19566 +BBX 15 16 0 -2 +BITMAP +2080 +209E +73EA +908A +21CA +F88A +ABEA +A892 +F8A6 +A820 +ABFE +F820 +0050 +A888 +A904 +0602 +ENDCHAR +STARTCHAR uni4C6F +ENCODING 19567 +BBX 15 16 0 -2 +BITMAP +7E20 +243E +1848 +FFA8 +2910 +4A28 +9846 +0FE0 +1040 +3FF0 +5110 +1FF0 +1110 +1FF0 +2488 +4244 +ENDCHAR +STARTCHAR uni4C70 +ENCODING 19568 +BBX 15 15 0 -1 +BITMAP +2008 +203C +79E0 +4820 +93FE +7C20 +55FC +5524 +7DFC +5524 +55FC +7C20 +01FC +AA20 +ABFE +ENDCHAR +STARTCHAR uni4C71 +ENCODING 19569 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +7CFE +4400 +8844 +7E28 +52FE +5282 +7E10 +527C +5254 +7E54 +0054 +AA5C +AA10 +0010 +ENDCHAR +STARTCHAR uni4C72 +ENCODING 19570 +BBX 15 16 0 -2 +BITMAP +2040 +207C +7884 +48F8 +9008 +7DFE +5440 +54A4 +7D38 +5458 +5494 +7D34 +0054 +AA92 +AB50 +0020 +ENDCHAR +STARTCHAR uni4C73 +ENCODING 19571 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +7900 +497C +9154 +7D54 +557C +5554 +7D54 +557C +5510 +7D10 +017C +AA10 +AA10 +04FE +ENDCHAR +STARTCHAR uni4C74 +ENCODING 19572 +BBX 15 16 0 -2 +BITMAP +2040 +205E +7840 +4860 +915E +7D52 +5552 +555E +7C52 +5452 +5452 +7C5E +0052 +AA40 +AA5E +0040 +ENDCHAR +STARTCHAR uni4C75 +ENCODING 19573 +BBX 14 16 0 -2 +BITMAP +2050 +2088 +7924 +4840 +9090 +7DF8 +5408 +5400 +7DDC +5444 +5554 +7CCC +0154 +AA44 +AA54 +00C8 +ENDCHAR +STARTCHAR uni4C76 +ENCODING 19574 +BBX 15 16 0 -2 +BITMAP +2100 +209E +79D2 +4954 +9154 +7DD8 +5554 +5552 +7DD2 +5512 +559A +7D54 +01D0 +AB50 +AA10 +0010 +ENDCHAR +STARTCHAR uni4C77 +ENCODING 19575 +BBX 15 16 0 -2 +BITMAP +0F10 +0810 +7F90 +48A0 +4E3E +7944 +4F24 +5124 +5F24 +7528 +5F28 +5510 +5F28 +4028 +AAC4 +0082 +ENDCHAR +STARTCHAR uni4C78 +ENCODING 19576 +BBX 15 16 0 -2 +BITMAP +20A0 +212C +7924 +4924 +91AC +7D24 +5524 +55FC +7C20 +55FC +5488 +7C50 +0020 +AA50 +AA88 +0306 +ENDCHAR +STARTCHAR uni4C79 +ENCODING 19577 +BBX 15 15 0 -1 +BITMAP +2044 +2024 +7C28 +44FE +8810 +7E7C +5210 +52FE +7E20 +5220 +527C +7E50 +0090 +AB10 +AAFE +ENDCHAR +STARTCHAR uni4C7A +ENCODING 19578 +BBX 15 15 0 -1 +BITMAP +2020 +2124 +7924 +4924 +91FC +7C00 +57FE +5400 +7DFC +5504 +5504 +7DFC +0088 +AA50 +ABFE +ENDCHAR +STARTCHAR uni4C7B +ENCODING 19579 +BBX 15 16 0 -2 +BITMAP +2000 +207C +7C44 +4474 +8854 +7EFE +5282 +527C +7E44 +527C +5244 +7E7C +0044 +AA44 +AA54 +0048 +ENDCHAR +STARTCHAR uni4C7C +ENCODING 19580 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +7902 +4902 +91FE +7D24 +5524 +557E +7D24 +5524 +55FE +7D52 +0154 +AA48 +AA64 +0442 +ENDCHAR +STARTCHAR uni4C7D +ENCODING 19581 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7850 +4848 +90A4 +7DFE +5684 +54FC +7C84 +54FC +5480 +7CFC +0144 +AB44 +AA7C +0044 +ENDCHAR +STARTCHAR uni4C7E +ENCODING 19582 +BBX 15 16 0 -2 +BITMAP +2020 +21FC +7924 +4BFE +9124 +7DFC +5420 +55FC +7D24 +55FC +5440 +7DFE +0088 +ABD0 +AA70 +038C +ENDCHAR +STARTCHAR uni4C7F +ENCODING 19583 +BBX 15 16 0 -2 +BITMAP +2100 +2102 +711C +97D0 +2110 +FFD0 +AD5E +AFD4 +FD54 +AFD4 +A914 +FFD4 +0114 +A924 +A924 +0144 +ENDCHAR +STARTCHAR uni4C80 +ENCODING 19584 +BBX 15 16 0 -2 +BITMAP +0820 +7E20 +08F8 +FF28 +1428 +7F6A +082A +0FE6 +1042 +3FF0 +5110 +1FF0 +1110 +1FF0 +2488 +4244 +ENDCHAR +STARTCHAR uni4C81 +ENCODING 19585 +BBX 15 16 0 -2 +BITMAP +2004 +23E4 +7224 +9224 +23EE +FA04 +AAE4 +AA04 +FA0C +ABF4 +AA44 +FA64 +0554 +AD44 +AA54 +00C8 +ENDCHAR +STARTCHAR uni4C82 +ENCODING 19586 +BBX 15 16 0 -2 +BITMAP +2210 +2110 +7110 +97BE +2240 +FA00 +ABBE +AA8A +FA88 +AAA8 +AAAE +FAA8 +04A8 +ADA8 +A85E +1080 +ENDCHAR +STARTCHAR uni4C83 +ENCODING 19587 +BBX 15 16 0 -2 +BITMAP +2092 +2124 +7892 +4800 +90FE +7C92 +54FE +5492 +7CFE +5410 +55FE +7C38 +0054 +AA92 +AB10 +0010 +ENDCHAR +STARTCHAR uni4C84 +ENCODING 19588 +BBX 15 16 0 -2 +BITMAP +2208 +2208 +73C8 +9210 +27DE +FA54 +AB64 +AAD4 +FFF4 +AA54 +AD54 +FCC8 +07C8 +A854 +AAA4 +0142 +ENDCHAR +STARTCHAR uni4C85 +ENCODING 19589 +BBX 15 16 0 -2 +BITMAP +2100 +213C +7124 +93A4 +213C +F924 +A924 +ABBC +F924 +A924 +A93C +F928 +02A8 +AACA +AC4A +0886 +ENDCHAR +STARTCHAR uni4C86 +ENCODING 19590 +BBX 15 15 0 -1 +BITMAP +2020 +2020 +7C78 +4448 +8890 +7E7C +5254 +5254 +7E7C +5254 +5254 +7E7C +0000 +AAAA +AAAA +ENDCHAR +STARTCHAR uni4C87 +ENCODING 19591 +BBX 15 15 0 -1 +BITMAP +2010 +2210 +797C +4910 +907C +7C54 +5754 +557C +7D10 +5538 +5554 +7D92 +0110 +AA90 +AA7E +ENDCHAR +STARTCHAR uni4C88 +ENCODING 19592 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +79FE +4948 +9148 +7D48 +55FE +5548 +7D48 +55EC +555A +7D68 +0148 +AB48 +AA48 +0048 +ENDCHAR +STARTCHAR uni4C89 +ENCODING 19593 +BBX 15 16 0 -2 +BITMAP +2140 +2144 +7158 +93F0 +2150 +F9D0 +A95E +A9D4 +F954 +A954 +ABF4 +F814 +0154 +AA34 +AC14 +0024 +ENDCHAR +STARTCHAR uni4C8A +ENCODING 19594 +BBX 15 16 0 -2 +BITMAP +2010 +2390 +72FE +92A0 +22BE +FB48 +AABE +AA80 +FABE +AAA2 +AABE +FB22 +023E +AA22 +AA22 +0226 +ENDCHAR +STARTCHAR uni4C8B +ENCODING 19595 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +79DC +4888 +93DE +7C88 +5554 +5622 +7CFC +5484 +5484 +7CFC +0084 +AA84 +AAFC +0084 +ENDCHAR +STARTCHAR uni4C8C +ENCODING 19596 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +77C8 +9108 +211E +FB92 +A824 +AB80 +F808 +AFC8 +A908 +F908 +0594 +A954 +A924 +0342 +ENDCHAR +STARTCHAR uni4C8D +ENCODING 19597 +BBX 15 16 0 -2 +BITMAP +1124 +20A8 +79FC +4840 +6BFE +5908 +4A84 +FCFA +4910 +4BFC +6D24 +59FC +4924 +49FC +4800 +9954 +ENDCHAR +STARTCHAR uni4C8E +ENCODING 19598 +BBX 15 16 0 -2 +BITMAP +2008 +2388 +7088 +9110 +27DE +FA94 +AAA4 +AB94 +FA94 +AB94 +AA94 +FAC8 +0388 +AE94 +A8A4 +00C2 +ENDCHAR +STARTCHAR uni4C8F +ENCODING 19599 +BBX 15 16 0 -2 +BITMAP +2048 +216A +78DC +4848 +90B4 +7D22 +55FE +5502 +7C20 +5420 +54FC +7C24 +0044 +AA44 +AA94 +0108 +ENDCHAR +STARTCHAR uni4C90 +ENCODING 19600 +BBX 15 16 0 -2 +BITMAP +2020 +203E +7820 +49FE +9122 +7DFC +5522 +557E +7D54 +557C +5554 +7D7C +0110 +AAFE +AA22 +04C6 +ENDCHAR +STARTCHAR uni4C91 +ENCODING 19601 +BBX 15 16 0 -2 +BITMAP +2104 +2088 +7BFE +4820 +91FC +7C20 +57FE +5454 +7D92 +5490 +57FE +7C90 +00D4 +AB8A +AA96 +01A2 +ENDCHAR +STARTCHAR uni4C92 +ENCODING 19602 +BBX 15 16 0 -2 +BITMAP +2100 +21DE +724A +948A +23EA +FAB6 +AAA4 +ABF4 +FABE +AAA4 +ABE4 +FABE +02A4 +AAA4 +AA24 +0464 +ENDCHAR +STARTCHAR uni4C93 +ENCODING 19603 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7850 +4888 +9104 +7EFA +5400 +5400 +7DDC +5554 +5554 +7DDC +0088 +AA88 +AB54 +0222 +ENDCHAR +STARTCHAR uni4C94 +ENCODING 19604 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +7000 +91FC +2124 +F9FC +A924 +ABFE +F800 +A9FC +A924 +F9FC +0124 +A9FC +A800 +03FE +ENDCHAR +STARTCHAR uni4C95 +ENCODING 19605 +BBX 15 16 0 -2 +BITMAP +2084 +2048 +79FE +4848 +914A +7CCC +5448 +55FE +7C00 +54FC +5484 +7C84 +00FC +AA84 +AA84 +00FC +ENDCHAR +STARTCHAR uni4C96 +ENCODING 19606 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +7020 +91FC +2000 +FBFE +A802 +A9FC +F820 +ABFE +A800 +FBFE +0004 +ABBE +AAA4 +038C +ENDCHAR +STARTCHAR uni4C97 +ENCODING 19607 +BBX 15 16 0 -2 +BITMAP +2120 +2120 +7256 +9248 +2580 +F970 +AA2E +AA24 +FEF4 +AA24 +AAAC +FA74 +0224 +AA34 +AAC4 +020C +ENDCHAR +STARTCHAR uni4C98 +ENCODING 19608 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +79EE +4A94 +9042 +7C10 +55FE +5502 +7CF8 +5488 +54F8 +7C80 +00FC +AA84 +AAFC +0084 +ENDCHAR +STARTCHAR uni4C99 +ENCODING 19609 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +71EE +9294 +2042 +F800 +ABDE +AA52 +FBD2 +AA52 +ABD2 +FA1A +0294 +AB50 +AA10 +0010 +ENDCHAR +STARTCHAR uni4C9A +ENCODING 19610 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +73EE +9092 +2084 +FBEE +AAAA +AAAE +FBEA +A88E +A9CA +FAAE +04A0 +A88C +A88A +0092 +ENDCHAR +STARTCHAR uni4C9B +ENCODING 19611 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +7888 +49FC +9154 +7DFC +5400 +57FE +7E02 +54F8 +5488 +7CF8 +0088 +AAF8 +AA88 +00F8 +ENDCHAR +STARTCHAR uni4C9C +ENCODING 19612 +BBX 15 16 0 -2 +BITMAP +3C3C +4848 +FCFC +5454 +7C7C +5454 +7C7C +AAAA +3C3C +4848 +FCFC +5454 +7C7C +5454 +7C7C +AAAA +ENDCHAR +STARTCHAR uni4C9D +ENCODING 19613 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7C50 +4450 +8888 +7D04 +5602 +54F8 +7C88 +5488 +54A8 +7C90 +0082 +1C82 +E07E +4000 +ENDCHAR +STARTCHAR uni4C9E +ENCODING 19614 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +7C20 +4400 +89FE +7C00 +5404 +5484 +7C84 +5448 +5448 +7C48 +0050 +1C10 +E3FE +4000 +ENDCHAR +STARTCHAR uni4C9F +ENCODING 19615 +BBX 15 16 0 -2 +BITMAP +2000 +2040 +7D9E +4512 +8912 +7D12 +55D2 +5512 +7D12 +5512 +555A +7D94 +0110 +1C10 +E010 +4010 +ENDCHAR +STARTCHAR uni4CA0 +ENCODING 19616 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7DFE +4420 +88FC +7C40 +55FE +5488 +7D04 +56FA +5488 +7C88 +00F8 +1C88 +E088 +40F8 +ENDCHAR +STARTCHAR uni4CA1 +ENCODING 19617 +BBX 15 16 0 -2 +BITMAP +2088 +2048 +7C50 +45FE +8850 +7C50 +55FC +5554 +7D54 +558C +5504 +7DFC +0104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni4CA2 +ENCODING 19618 +BBX 15 16 0 -2 +BITMAP +0124 +3CA8 +25FC +2440 +27FE +3D08 +2684 +24FA +2510 +3FFC +2524 +25FC +2524 +45FC +5400 +8BFE +ENDCHAR +STARTCHAR uni4CA3 +ENCODING 19619 +BBX 15 16 0 -2 +BITMAP +0F10 +0810 +7F90 +48A0 +4E3E +7944 +4F24 +5124 +5F24 +7528 +5F28 +5510 +5F28 +4028 +BF44 +0082 +ENDCHAR +STARTCHAR uni4CA4 +ENCODING 19620 +BBX 15 16 0 -2 +BITMAP +4000 +44FE +7A28 +8828 +14FE +FAAA +AAAA +A8AA +F9AE +AAC2 +AE82 +FAFE +0282 +1A82 +E2FE +4082 +ENDCHAR +STARTCHAR uni4CA5 +ENCODING 19621 +BBX 15 16 0 -2 +BITMAP +0200 +3FE0 +0422 +1822 +E21E +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFC +1000 +1FFC +2A44 +452C +ENDCHAR +STARTCHAR uni4CA6 +ENCODING 19622 +BBX 15 16 0 -2 +BITMAP +1010 +2010 +7F10 +4110 +7F7E +4110 +7F10 +4010 +7F90 +4028 +7FA8 +00A8 +AAA8 +AAC4 +8144 +0682 +ENDCHAR +STARTCHAR uni4CA7 +ENCODING 19623 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +1104 +11FC +FD04 +11FC +1100 +11FE +1100 +1DFE +E002 +42AA +02AA +0202 +000C +ENDCHAR +STARTCHAR uni4CA8 +ENCODING 19624 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +7DFC +1104 +11FC +1104 +11FC +1100 +11FE +1100 +11FE +1C02 +E2AA +42AA +0202 +000C +ENDCHAR +STARTCHAR uni4CA9 +ENCODING 19625 +BBX 14 16 0 -2 +BITMAP +3FFC +2004 +3FFC +2200 +27F0 +2410 +27F0 +2410 +27F0 +2400 +27FC +2400 +47FC +4004 +8AA4 +0AAC +ENDCHAR +STARTCHAR uni4CAA +ENCODING 19626 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +1104 +11FC +FD04 +11FC +1100 +11FE +2900 +25FE +2402 +42AA +42AA +8202 +000C +ENDCHAR +STARTCHAR uni4CAB +ENCODING 19627 +BBX 15 16 0 -2 +BITMAP +0080 +FDF8 +2908 +29F8 +2908 +29F8 +2900 +29FC +2900 +29FC +2804 +2954 +2A5C +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni4CAC +ENCODING 19628 +BBX 15 16 0 -2 +BITMAP +1004 +201E +7CF0 +4490 +7C90 +4490 +7C90 +40FE +7E90 +4090 +7E90 +0288 +AA8A +AAAA +82C6 +0C82 +ENDCHAR +STARTCHAR uni4CAD +ENCODING 19629 +BBX 15 16 0 -2 +BITMAP +0420 +0E40 +F0FC +9084 +90FC +9084 +FCFC +9080 +90FE +9080 +90FE +8802 +8AAA +C6AA +8302 +000C +ENDCHAR +STARTCHAR uni4CAE +ENCODING 19630 +BBX 15 16 0 -2 +BITMAP +0020 +7C40 +00FC +0084 +00FC +FE84 +28FC +2880 +28FE +2880 +28FE +2A02 +4EAA +4AAA +8202 +000C +ENDCHAR +STARTCHAR uni4CAF +ENCODING 19631 +BBX 15 16 0 -2 +BITMAP +0020 +7E40 +22FC +2484 +24FC +2884 +2EFC +2280 +2AFE +2480 +44FE +4A02 +92AA +20AA +4102 +000C +ENDCHAR +STARTCHAR uni4CB0 +ENCODING 19632 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +79FC +0104 +01FC +0104 +FDFC +2100 +21FE +2100 +41FE +5002 +8AAA +FAAA +0A02 +000C +ENDCHAR +STARTCHAR uni4CB1 +ENCODING 19633 +BBX 15 16 0 -2 +BITMAP +1020 +2010 +7F00 +41FE +7F20 +4120 +7F3C +4024 +7FA4 +4024 +7FA4 +00A4 +AAA4 +AAA4 +8154 +0688 +ENDCHAR +STARTCHAR uni4CB2 +ENCODING 19634 +BBX 15 16 0 -2 +BITMAP +0020 +2840 +24FC +2484 +42FC +5284 +90FC +1080 +20FE +2080 +48FE +4402 +FCAA +44AA +0102 +000C +ENDCHAR +STARTCHAR uni4CB3 +ENCODING 19635 +BBX 15 16 0 -2 +BITMAP +1020 +0840 +08FC +FF84 +00FC +0084 +3CFC +2480 +24FE +2480 +24FE +2502 +46AA +44AA +8102 +000C +ENDCHAR +STARTCHAR uni4CB4 +ENCODING 19636 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +1504 +59FC +5104 +51FC +9100 +11FE +1100 +11FE +2802 +26AA +42AA +4202 +800C +ENDCHAR +STARTCHAR uni4CB5 +ENCODING 19637 +BBX 14 16 0 -2 +BITMAP +0100 +1110 +21E8 +4F04 +F200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFC +1000 +1FFC +2A44 +452C +ENDCHAR +STARTCHAR uni4CB6 +ENCODING 19638 +BBX 15 16 0 -2 +BITMAP +1FF0 +0000 +FFFE +0844 +323C +DFF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFC +1000 +1FFC +2A44 +452C +ENDCHAR +STARTCHAR uni4CB7 +ENCODING 19639 +BBX 15 16 0 -2 +BITMAP +0400 +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFC +1000 +1FFC +4924 +8494 +0108 +FFFE +0920 +711C +ENDCHAR +STARTCHAR uni4CB8 +ENCODING 19640 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +2904 +25FC +4304 +A9FC +2900 +29FE +2900 +29FE +2802 +4AAA +4AAA +8A02 +000C +ENDCHAR +STARTCHAR uni4CB9 +ENCODING 19641 +BBX 15 16 0 -2 +BITMAP +0040 +7E80 +09FC +0904 +11FC +1504 +33FC +5100 +91FE +1100 +11FE +0002 +0EAA +F2AA +4202 +000C +ENDCHAR +STARTCHAR uni4CBA +ENCODING 19642 +BBX 15 16 0 -2 +BITMAP +4840 +4880 +49FC +4904 +FDFC +4904 +49FC +4900 +79FE +4900 +49FE +4802 +4AAA +7AAA +4A02 +000C +ENDCHAR +STARTCHAR uni4CBB +ENCODING 19643 +BBX 15 16 0 -2 +BITMAP +2040 +1080 +01FC +FD04 +21FC +4104 +49FC +8900 +F1FE +1100 +21FE +2002 +4AAA +FAAA +0A02 +000C +ENDCHAR +STARTCHAR uni4CBC +ENCODING 19644 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +51FC +5104 +7DFC +5104 +91FC +1100 +11FE +7D00 +11FE +1002 +12AA +1EAA +E202 +400C +ENDCHAR +STARTCHAR uni4CBD +ENCODING 19645 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +F9FC +2104 +21FC +4104 +79FC +4900 +C9FE +4900 +49FE +4802 +7AAA +4AAA +0202 +000C +ENDCHAR +STARTCHAR uni4CBE +ENCODING 19646 +BBX 15 15 0 -2 +BITMAP +7DFE +1080 +10FC +1E04 +F028 +0210 +1FF0 +1010 +1FF0 +1010 +1FFC +1000 +1FFC +0004 +492C +ENDCHAR +STARTCHAR uni4CBF +ENCODING 19647 +BBX 15 16 0 -2 +BITMAP +0020 +3E40 +22FC +2284 +22FC +3E84 +20FC +2880 +28FE +2E80 +28FE +2802 +4AAA +4CAA +8902 +000C +ENDCHAR +STARTCHAR uni4CC0 +ENCODING 19648 +BBX 15 16 0 -2 +BITMAP +1010 +2010 +7C50 +4450 +7C7C +4490 +7D10 +4010 +7EFE +4010 +7E28 +0228 +AA28 +AA44 +8244 +0C82 +ENDCHAR +STARTCHAR uni4CC1 +ENCODING 19649 +BBX 15 16 0 -2 +BITMAP +1050 +2048 +7C48 +4440 +7DFE +4440 +7C40 +407C +7EA4 +40A4 +7EA8 +0328 +AB10 +AA28 +8244 +0C82 +ENDCHAR +STARTCHAR uni4CC2 +ENCODING 19650 +BBX 15 16 0 -2 +BITMAP +0020 +FC40 +24FC +2484 +44FC +5484 +88FC +0080 +7CFE +4480 +44FE +4402 +44AA +7CAA +4502 +000C +ENDCHAR +STARTCHAR uni4CC3 +ENCODING 19651 +BBX 14 16 1 -2 +BITMAP +0400 +3FE0 +2020 +3FE0 +2020 +3FF8 +2000 +3FF8 +0008 +9258 +1000 +3DF0 +4510 +A930 +1104 +60FC +ENDCHAR +STARTCHAR uni4CC4 +ENCODING 19652 +BBX 15 15 1 -1 +BITMAP +0010 +1420 +14FC +1484 +14FC +5584 +5EFC +5480 +54FE +5480 +54FE +5C02 +7556 +C352 +000C +ENDCHAR +STARTCHAR uni4CC5 +ENCODING 19653 +BBX 15 16 0 -2 +BITMAP +1000 +2000 +7F3E +4122 +7F22 +4122 +7F22 +403E +7FA2 +4000 +7F94 +0094 +AAA2 +AAA2 +8142 +0600 +ENDCHAR +STARTCHAR uni4CC6 +ENCODING 19654 +BBX 14 16 1 -2 +BITMAP +2080 +2100 +43F8 +F208 +93F8 +9208 +93F8 +9200 +F3FC +9200 +93FC +9004 +9554 +F554 +9404 +0018 +ENDCHAR +STARTCHAR uni4CC7 +ENCODING 19655 +BBX 15 16 0 -2 +BITMAP +0020 +3C40 +24FC +3484 +2CFC +2484 +24FC +FE80 +44FE +6480 +54FE +4402 +7EAA +04AA +2902 +100C +ENDCHAR +STARTCHAR uni4CC8 +ENCODING 19656 +BBX 15 16 0 -2 +BITMAP +1040 +2040 +7CFC +4484 +7D04 +46F4 +7C94 +4094 +7EF4 +4084 +7E94 +0288 +AA82 +AA82 +827E +0C00 +ENDCHAR +STARTCHAR uni4CC9 +ENCODING 19657 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +3DFC +4504 +A9FC +1104 +29FC +4500 +83FE +3100 +09FE +0002 +62AA +12AA +0A02 +000C +ENDCHAR +STARTCHAR uni4CCA +ENCODING 19658 +BBX 15 16 0 -2 +BITMAP +2820 +2440 +24FC +2084 +FEFC +2084 +20FC +3E80 +42FE +4480 +54FE +8802 +16AA +22AA +4202 +000C +ENDCHAR +STARTCHAR uni4CCB +ENCODING 19659 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +21FC +F904 +A9FC +A904 +A9FC +A900 +F9FE +A100 +21FE +2802 +3AAA +EAAA +4202 +000C +ENDCHAR +STARTCHAR uni4CCC +ENCODING 19660 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +21FC +4904 +FDFC +0504 +79FC +4900 +49FE +7900 +49FE +7802 +4AAA +4AAA +4A02 +580C +ENDCHAR +STARTCHAR uni4CCD +ENCODING 19661 +BBX 15 16 0 -2 +BITMAP +2410 +2420 +247C +2444 +7F7C +2444 +247C +2440 +247E +FF40 +007E +2402 +24AA +42AA +4302 +820C +ENDCHAR +STARTCHAR uni4CCE +ENCODING 19662 +BBX 15 16 0 -2 +BITMAP +0040 +4080 +99FC +8904 +89FC +8904 +89FC +D900 +89FE +8900 +89FE +8802 +FAAA +8AAA +0202 +000C +ENDCHAR +STARTCHAR uni4CCF +ENCODING 19663 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +7D04 +11FC +1104 +FDFC +0100 +11FE +1100 +7DFE +1002 +12AA +1EAA +E202 +400C +ENDCHAR +STARTCHAR uni4CD0 +ENCODING 19664 +BBX 15 16 0 -2 +BITMAP +4100 +21FC +0A44 +1048 +E0A0 +2118 +2606 +1FF0 +1010 +1FF0 +1010 +1FFC +1000 +1FFC +0004 +492C +ENDCHAR +STARTCHAR uni4CD1 +ENCODING 19665 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +7EFC +1084 +10FC +3E84 +22FC +6280 +BEFE +2280 +22FE +3E02 +22AA +22AA +2604 +ENDCHAR +STARTCHAR uni4CD2 +ENCODING 19666 +BBX 15 16 0 -2 +BITMAP +0820 +7F28 +0824 +FFFE +1020 +7F20 +4124 +7F24 +4124 +7FA8 +4028 +7F90 +0092 +AAAA +AAC6 +0182 +ENDCHAR +STARTCHAR uni4CD3 +ENCODING 19667 +BBX 15 16 0 -2 +BITMAP +1020 +1240 +7EFC +1484 +14FC +FF84 +08FC +1080 +20FE +7E80 +A0FE +2202 +2CAA +30AA +2102 +000C +ENDCHAR +STARTCHAR uni4CD4 +ENCODING 19668 +BBX 13 16 1 -2 +BITMAP +0C00 +71F0 +4010 +79F0 +4010 +7FF0 +0400 +3FE0 +2020 +3FE0 +2020 +3FF8 +2000 +3FF8 +0008 +9258 +ENDCHAR +STARTCHAR uni4CD5 +ENCODING 19669 +BBX 15 16 0 -2 +BITMAP +0E20 +F040 +22FC +9284 +54FC +0084 +FCFC +0880 +10FE +1680 +18FE +F002 +52AA +12AA +5202 +200C +ENDCHAR +STARTCHAR uni4CD6 +ENCODING 19670 +BBX 15 16 0 -2 +BITMAP +1000 +21FE +7CA0 +44A8 +7CA8 +44E8 +7CA8 +40A8 +7EA8 +40E8 +7EA8 +02AA +AABA +ABEA +8226 +0C20 +ENDCHAR +STARTCHAR uni4CD7 +ENCODING 19671 +BBX 15 16 0 -2 +BITMAP +0200 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +0240 +3C50 +0848 +FFFE +0850 +7E24 +0854 +198C +ENDCHAR +STARTCHAR uni4CD8 +ENCODING 19672 +BBX 15 16 0 -2 +BITMAP +2010 +40D8 +F394 +9094 +F090 +93FE +F090 +8094 +F894 +80D8 +FB98 +0890 +A8AA +A8CA +8A86 +3102 +ENDCHAR +STARTCHAR uni4CD9 +ENCODING 19673 +BBX 15 16 0 -2 +BITMAP +0810 +0820 +7F7C +4944 +7F7C +4944 +7F7C +0040 +FF7E +2040 +407E +7E02 +02AA +02AA +1502 +080C +ENDCHAR +STARTCHAR uni4CDA +ENCODING 19674 +BBX 15 16 0 -2 +BITMAP +0040 +7C80 +45FC +7D04 +45FC +7D04 +01FC +0100 +7DFE +1100 +11FE +FE02 +12AA +12AA +1202 +100C +ENDCHAR +STARTCHAR uni4CDB +ENCODING 19675 +BBX 15 16 0 -2 +BITMAP +0020 +7E40 +42FC +4284 +7EFC +4284 +42FC +7E80 +10FE +1080 +FEFE +2202 +64AA +18AA +2502 +C20C +ENDCHAR +STARTCHAR uni4CDC +ENCODING 19676 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +28FC +4484 +82FC +7C84 +10FC +1080 +FEFE +1080 +54FE +5202 +92AA +10AA +5102 +200C +ENDCHAR +STARTCHAR uni4CDD +ENCODING 19677 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +7CFC +0084 +44FC +2884 +00FC +FE80 +00FE +0080 +7CFE +4402 +44AA +44AA +7D02 +440C +ENDCHAR +STARTCHAR uni4CDE +ENCODING 19678 +BBX 15 16 0 -2 +BITMAP +0810 +0820 +7F7C +1044 +3E7C +1044 +FFFC +2240 +497E +88C0 +3E7E +0802 +7FAA +08AA +0902 +080C +ENDCHAR +STARTCHAR uni4CDF +ENCODING 19679 +BBX 15 16 0 -2 +BITMAP +0020 +0E40 +EAFC +AA84 +AAFC +AE84 +EAFC +AA80 +AAFE +AE80 +EAFE +AA02 +0AAA +12AA +1302 +260C +ENDCHAR +STARTCHAR uni4CE0 +ENCODING 19680 +BBX 15 16 0 -2 +BITMAP +0210 +0F20 +787C +0844 +FF7C +2A44 +2A7C +FF40 +2A7E +2A40 +FF7E +0802 +08AA +0EAA +7102 +200C +ENDCHAR +STARTCHAR uni4CE1 +ENCODING 19681 +BBX 15 16 0 -2 +BITMAP +2820 +2440 +40FC +7E84 +C8FC +4884 +7EFC +4880 +48FE +7E80 +48FE +4802 +48AA +7EAA +4102 +400C +ENDCHAR +STARTCHAR uni4CE2 +ENCODING 19682 +BBX 15 16 0 -2 +BITMAP +4840 +4880 +49FC +FD04 +49FC +4904 +79FC +4900 +79FE +4900 +49FE +FC02 +02AA +52AA +4A02 +840C +ENDCHAR +STARTCHAR uni4CE3 +ENCODING 19683 +BBX 15 16 0 -2 +BITMAP +0850 +7F48 +0840 +FFFE +2040 +3E50 +2222 +465A +8286 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni4CE4 +ENCODING 19684 +BBX 15 16 0 -2 +BITMAP +1010 +9220 +527C +5444 +107C +FE44 +927C +9240 +BA7E +D640 +927E +9202 +92AA +82AA +8B02 +840C +ENDCHAR +STARTCHAR uni4CE5 +ENCODING 19685 +BBX 15 16 0 -2 +BITMAP +1020 +9240 +92FC +FE84 +10FC +2884 +44FC +9280 +08FE +FC80 +04FE +0802 +52AA +22AA +1202 +000C +ENDCHAR +STARTCHAR uni4CE6 +ENCODING 19686 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +FEFC +8284 +00FC +7C84 +00FC +7C80 +44FE +7C80 +44FE +7C02 +02AA +1EAA +E202 +400C +ENDCHAR +STARTCHAR uni4CE7 +ENCODING 19687 +BBX 15 16 0 -2 +BITMAP +2100 +4178 +F108 +9208 +F2FE +9640 +FA40 +827C +FA90 +8210 +FAFE +0A10 +AA28 +AA28 +8A44 +3282 +ENDCHAR +STARTCHAR uni4CE8 +ENCODING 19688 +BBX 15 16 0 -2 +BITMAP +1020 +2040 +7CFC +4484 +7CFC +4484 +7CFC +0080 +FEFE +1080 +10FE +7C02 +12AA +1EAA +F202 +400C +ENDCHAR +STARTCHAR uni4CE9 +ENCODING 19689 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +28FC +2884 +FEFC +AA84 +AAFC +FE80 +10FE +FC80 +24FE +4402 +2AAA +12AA +2A02 +C40C +ENDCHAR +STARTCHAR uni4CEA +ENCODING 19690 +BBX 15 16 0 -2 +BITMAP +1020 +9240 +92FC +9284 +FEFC +0084 +FEFC +1080 +20FE +FE80 +AAFE +AA02 +AAAA +AAAA +AB02 +860C +ENDCHAR +STARTCHAR uni4CEB +ENCODING 19691 +BBX 15 16 0 -2 +BITMAP +0A10 +7420 +157C +5244 +227C +2144 +417C +BE40 +087E +0840 +7F7E +0802 +14AA +12AA +2302 +400C +ENDCHAR +STARTCHAR uni4CEC +ENCODING 19692 +BBX 15 16 0 -2 +BITMAP +2840 +2880 +FDFC +2904 +39FC +1104 +7DFC +5500 +55FE +7D00 +11FE +FC02 +12AA +12AA +1202 +100C +ENDCHAR +STARTCHAR uni4CED +ENCODING 19693 +BBX 15 16 0 -2 +BITMAP +0020 +EE40 +AAFC +AA84 +AAFC +EA84 +AAFC +AA80 +EAFE +8A80 +CAFE +AE02 +D8AA +88AA +0902 +080C +ENDCHAR +STARTCHAR uni4CEE +ENCODING 19694 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +45E0 +7C22 +45B4 +7CA8 +4524 +56A2 +8A40 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni4CEF +ENCODING 19695 +BBX 15 16 0 -2 +BITMAP +1C20 +7040 +10FC +FE84 +10FC +7C84 +54FC +7C80 +54FE +7C80 +10FE +7C02 +10AA +1EAA +F102 +400C +ENDCHAR +STARTCHAR uni4CF0 +ENCODING 19696 +BBX 15 16 0 -2 +BITMAP +1008 +1790 +14BC +24A4 +24BC +67A4 +A23C +2220 +2FBE +2720 +26BE +2A82 +2AAA +322A +2202 +220C +ENDCHAR +STARTCHAR uni4CF1 +ENCODING 19697 +BBX 15 16 0 -2 +BITMAP +0020 +7E7C +14C4 +0838 +FEC6 +2A20 +48FC +A844 +128C +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni4CF2 +ENCODING 19698 +BBX 15 16 0 -2 +BITMAP +11FE +1100 +FD7C +1100 +1DFE +F154 +1248 +5464 +2242 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni4CF3 +ENCODING 19699 +BBX 15 16 0 -2 +BITMAP +1020 +5440 +54FC +7C84 +92FC +9284 +FEFC +0080 +7CFE +0080 +FEFE +1002 +54AA +92AA +5102 +200C +ENDCHAR +STARTCHAR uni4CF4 +ENCODING 19700 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +AAFC +AA84 +AAFC +FE84 +10FC +5480 +52FE +9280 +10FE +5402 +52AA +92AA +1102 +100C +ENDCHAR +STARTCHAR uni4CF5 +ENCODING 19701 +BBX 15 16 0 -2 +BITMAP +1104 +1108 +111E +7D12 +13DE +5552 +555E +5550 +BB5E +1150 +395E +5542 +9252 +1252 +154A +1884 +ENDCHAR +STARTCHAR uni4CF6 +ENCODING 19702 +BBX 15 16 0 -2 +BITMAP +100E +20F0 +7C22 +4492 +7C44 +4420 +7C44 +40F8 +7E10 +4024 +7EFE +0210 +AAFE +AA28 +8244 +0C82 +ENDCHAR +STARTCHAR uni4CF7 +ENCODING 19703 +BBX 15 16 0 -2 +BITMAP +1110 +2110 +CAA8 +1444 +3240 +D27C +1540 +14FE +0A00 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni4CF8 +ENCODING 19704 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2410 +3F7C +2638 +2D54 +3412 +2100 +27F0 +2410 +27F0 +2410 +27FC +4004 +4AA4 +800C +ENDCHAR +STARTCHAR uni4CF9 +ENCODING 19705 +BBX 15 16 0 -2 +BITMAP +2040 +4020 +F3FE +9202 +F008 +93EE +F008 +801C +FBE4 +8154 +F948 +0954 +A964 +A942 +893E +3200 +ENDCHAR +STARTCHAR uni4CFA +ENCODING 19706 +BBX 15 16 0 -2 +BITMAP +0810 +1420 +227C +4944 +BEFC +0444 +087C +FFC0 +147E +7F40 +557E +6302 +412A +7F2A +4142 +7F0C +ENDCHAR +STARTCHAR uni4CFB +ENCODING 19707 +BBX 15 16 0 -2 +BITMAP +0804 +7F78 +0840 +3E40 +2A7E +3E48 +2A48 +FF48 +0A88 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni4CFC +ENCODING 19708 +BBX 15 16 0 -2 +BITMAP +1000 +20FE +7C80 +4480 +7CBC +44A4 +7CA4 +40BC +7E80 +40EE +7EAA +02AA +AAEE +AA80 +82FE +0C00 +ENDCHAR +STARTCHAR uni4CFD +ENCODING 19709 +BBX 15 16 0 -2 +BITMAP +1020 +9240 +92FC +FE84 +28FC +2484 +7EFC +C880 +48FE +7E80 +48FE +7E02 +48AA +48AA +7F02 +400C +ENDCHAR +STARTCHAR uni4CFE +ENCODING 19710 +BBX 15 16 0 -2 +BITMAP +0A10 +7420 +157C +5244 +227C +2144 +5D7C +8040 +7E7E +4240 +427E +7E02 +42AA +24AA +0F02 +F00C +ENDCHAR +STARTCHAR uni4CFF +ENCODING 19711 +BBX 15 16 0 -2 +BITMAP +2410 +2620 +357C +5444 +5F7C +7444 +947C +6440 +2A7E +4940 +917E +0002 +AAAA +AAAA +AB02 +000C +ENDCHAR +STARTCHAR uni4D00 +ENCODING 19712 +BBX 15 16 0 -2 +BITMAP +1010 +0820 +7F7C +2244 +FF7C +0044 +7F7C +4940 +7F7E +4940 +7F7E +0802 +7F2A +082A +0F42 +F00C +ENDCHAR +STARTCHAR uni4D01 +ENCODING 19713 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +FEFC +8284 +7CFC +5484 +7CFC +5480 +7CFE +1080 +FEFE +9202 +92AA +BAAA +8B02 +840C +ENDCHAR +STARTCHAR uni4D02 +ENCODING 19714 +BBX 15 16 0 -2 +BITMAP +2010 +3E20 +427C +FF44 +497C +4944 +7F7C +1040 +287E +D540 +267E +CD02 +15AA +24AA +D502 +080C +ENDCHAR +STARTCHAR uni4D03 +ENCODING 19715 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +7CFC +1084 +FEFC +4484 +EEFC +4480 +64FE +DE80 +00FE +FE02 +28AA +2AAA +4D02 +880C +ENDCHAR +STARTCHAR uni4D04 +ENCODING 19716 +BBX 15 16 0 -2 +BITMAP +0F10 +F020 +117C +8944 +427C +0044 +FF7C +8140 +427E +7740 +927E +5A02 +2F2A +222A +4242 +820C +ENDCHAR +STARTCHAR uni4D05 +ENCODING 19717 +BBX 15 16 0 -2 +BITMAP +0810 +7F20 +087C +2244 +FFFC +2244 +7F7C +4140 +7F7E +4140 +7F7E +4102 +7F2A +222A +4142 +808C +ENDCHAR +STARTCHAR uni4D06 +ENCODING 19718 +BBX 15 16 0 -2 +BITMAP +2820 +AA40 +6CFC +2884 +FEFC +4484 +28FC +FE80 +10FE +7C80 +10FE +FE02 +10AA +28AA +4502 +820C +ENDCHAR +STARTCHAR uni4D07 +ENCODING 19719 +BBX 15 15 1 -1 +BITMAP +0010 +FF20 +087C +FF44 +897C +ED44 +897C +6C40 +367E +D9C0 +007E +7E02 +12AA +16AA +1104 +ENDCHAR +STARTCHAR uni4D08 +ENCODING 19720 +BBX 15 16 0 -2 +BITMAP +1020 +2040 +FEFC +9284 +D6FC +BA84 +FEFC +9280 +BAFE +D680 +82FE +1002 +FEAA +28AA +4502 +820C +ENDCHAR +STARTCHAR uni4D09 +ENCODING 19721 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +AAFC +AA84 +FEFC +0084 +FEFC +0080 +7CFE +4480 +7CFE +2A02 +64AA +A2AA +3102 +200C +ENDCHAR +STARTCHAR uni4D0A +ENCODING 19722 +BBX 15 16 0 -2 +BITMAP +4108 +2210 +FFBC +0824 +7F3C +0824 +FFBC +1520 +64BE +2420 +FFBE +2402 +352A +E2AA +2582 +688C +ENDCHAR +STARTCHAR uni4D0B +ENCODING 19723 +BBX 15 16 0 -2 +BITMAP +2000 +43FC +F294 +9294 +F3FC +9000 +F7FE +8000 +FBFC +8204 +FBFC +08A2 +A914 +AB08 +8D44 +3182 +ENDCHAR +STARTCHAR uni4D0C +ENCODING 19724 +BBX 15 16 0 -2 +BITMAP +1048 +2048 +7DFE +4448 +7CFE +4482 +7D7C +4000 +7EFE +4020 +7ED2 +022C +AAD8 +AA2C +82CA +0C30 +ENDCHAR +STARTCHAR uni4D0D +ENCODING 19725 +BBX 15 16 0 -2 +BITMAP +0010 +0020 +777C +5544 +557C +7744 +557C +5540 +777E +5540 +557E +7702 +002A +552A +88C2 +000C +ENDCHAR +STARTCHAR uni4D0E +ENCODING 19726 +BBX 14 15 0 -2 +BITMAP +1FF0 +1110 +1FF0 +1110 +3FF8 +2AA8 +3EF8 +2AA8 +3FF8 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni4D0F +ENCODING 19727 +BBX 15 16 0 -2 +BITMAP +2208 +2210 +FFBC +2224 +3E3C +4124 +5D3C +D5E0 +553E +5520 +DD7E +4182 +002A +552A +4A82 +8A8C +ENDCHAR +STARTCHAR uni4D10 +ENCODING 19728 +BBX 15 16 0 -2 +BITMAP +0808 +FF90 +84BC +7724 +2A3C +7724 +2ABC +FFA0 +003E +7F20 +413E +7F02 +412A +7F2A +2202 +410C +ENDCHAR +STARTCHAR uni4D11 +ENCODING 19729 +BBX 15 16 0 -2 +BITMAP +7F08 +4910 +7F3C +4924 +FFBC +AAA4 +FFBC +AAA0 +FFBE +0020 +FFBE +A282 +3E2A +222A +2782 +F80C +ENDCHAR +STARTCHAR uni4D12 +ENCODING 19730 +BBX 15 16 0 -2 +BITMAP +7F08 +0810 +FFBC +88A4 +6B3C +0824 +6B3C +0020 +EFBE +AAA0 +EFBE +0002 +FFAA +492A +AA82 +FF8C +ENDCHAR +STARTCHAR uni4D13 +ENCODING 19731 +BBX 15 16 0 -2 +BITMAP +0010 +FFA0 +087C +0844 +0864 +7F54 +4944 +494C +4940 +497E +4902 +4D02 +4A7A +0802 +080A +0804 +ENDCHAR +STARTCHAR uni4D14 +ENCODING 19732 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +00FC +FE84 +00A4 +2884 +4494 +8288 +0480 +44FE +2802 +1002 +29FA +4402 +8414 +0008 +ENDCHAR +STARTCHAR uni4D15 +ENCODING 19733 +BBX 14 16 0 -2 +BITMAP +7F04 +0844 +1E44 +2244 +5444 +0844 +320C +DFE0 +1420 +1260 +1000 +1FF8 +0008 +7F88 +0028 +0010 +ENDCHAR +STARTCHAR uni4D16 +ENCODING 19734 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FEFC +1084 +7CA4 +1084 +FE94 +0088 +7C80 +44FE +7C02 +4402 +7DFA +4402 +5414 +4808 +ENDCHAR +STARTCHAR uni4D17 +ENCODING 19735 +BBX 15 16 0 -2 +BITMAP +0020 +7E40 +42FC +7E84 +42A4 +7E84 +4294 +7E88 +1480 +12FE +FF02 +1002 +29FA +2402 +4214 +8008 +ENDCHAR +STARTCHAR uni4D18 +ENCODING 19736 +BBX 15 16 0 -2 +BITMAP +0310 +7C20 +477C +4444 +5F64 +5554 +5644 +5C4C +5540 +537E +5002 +5702 +557A +5502 +A98A +0004 +ENDCHAR +STARTCHAR uni4D19 +ENCODING 19737 +BBX 15 16 0 -2 +BITMAP +0208 +7910 +493E +4BA2 +4832 +7AAA +4122 +47E6 +7920 +693E +AB82 +A902 +297A +3902 +290A +0104 +ENDCHAR +STARTCHAR uni4D1A +ENCODING 19738 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1E20 +10FC +1000 +FE00 +9278 +C648 +AA48 +D648 +AA48 +C64A +924A +FE8A +8286 +0100 +ENDCHAR +STARTCHAR uni4D1B +ENCODING 19739 +BBX 15 16 0 -2 +BITMAP +1010 +1092 +1E52 +1054 +1010 +FEFE +9282 +C682 +AAFE +D682 +AA82 +C6FE +9282 +FE82 +828A +0084 +ENDCHAR +STARTCHAR uni4D1C +ENCODING 19740 +BBX 15 16 0 -2 +BITMAP +1010 +1020 +1EFE +1092 +1092 +FEFE +9292 +C692 +AAFE +D620 +AA24 +C65A +925E +FE90 +8292 +010E +ENDCHAR +STARTCHAR uni4D1D +ENCODING 19741 +BBX 15 16 0 -2 +BITMAP +1000 +107C +1E44 +107C +1044 +FE7C +9200 +C7FE +AAA0 +D6EE +AAAA +C6EA +92BA +FFE4 +8224 +002A +ENDCHAR +STARTCHAR uni4D1E +ENCODING 19742 +BBX 15 16 0 -2 +BITMAP +1000 +11DC +1E44 +1154 +10CC +FF54 +9250 +C648 +AAFE +D790 +AAFE +C690 +92FE +FE90 +82FE +0080 +ENDCHAR +STARTCHAR uni4D1F +ENCODING 19743 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2420 +27BC +2422 +279E +2000 +23F0 +2210 +4290 +4452 +980E +ENDCHAR +STARTCHAR uni4D20 +ENCODING 19744 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2420 +27BC +2422 +279E +2038 +27C0 +2040 +5FFE +4110 +8E0E +ENDCHAR +STARTCHAR uni4D21 +ENCODING 19745 +BBX 15 15 0 -2 +BITMAP +7FFE +0240 +1248 +0A50 +3FFE +2220 +3FFC +2224 +3FFC +2840 +2848 +2F70 +4844 +4B44 +8C3C +ENDCHAR +STARTCHAR uni4D22 +ENCODING 19746 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2420 +27BC +2422 +279E +2040 +2040 +2FFE +4150 +4248 +8C46 +ENDCHAR +STARTCHAR uni4D23 +ENCODING 19747 +BBX 15 16 0 -2 +BITMAP +0804 +7F1E +54F0 +5410 +7F92 +5552 +5554 +7F10 +54FE +5410 +5E10 +5410 +5410 +5C10 +5650 +8020 +ENDCHAR +STARTCHAR uni4D24 +ENCODING 19748 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2420 +27BC +2422 +27DE +2240 +23FC +2440 +4BF8 +4040 +9FFE +ENDCHAR +STARTCHAR uni4D25 +ENCODING 19749 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2420 +27BC +2422 +279E +2400 +3FBC +24A4 +44A4 +4ABC +9124 +ENDCHAR +STARTCHAR uni4D26 +ENCODING 19750 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2422 +27BE +2040 +3FFE +2000 +27F8 +2000 +47F8 +4408 +87F8 +ENDCHAR +STARTCHAR uni4D27 +ENCODING 19751 +BBX 15 16 0 -2 +BITMAP +081C +7F70 +5410 +54FE +7F38 +5554 +5592 +7F10 +5420 +54FE +5E24 +5444 +5428 +5C10 +5628 +80C4 +ENDCHAR +STARTCHAR uni4D28 +ENCODING 19752 +BBX 15 16 0 -2 +BITMAP +0800 +7F7E +5448 +5450 +7F5C +5554 +5554 +7F5C +5454 +5454 +5E5C +5448 +545C +5CAA +568A +8118 +ENDCHAR +STARTCHAR uni4D29 +ENCODING 19753 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2000 +3FFC +2140 +2FF8 +2948 +2FF8 +2000 +5FFC +4490 +8988 +ENDCHAR +STARTCHAR uni4D2A +ENCODING 19754 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2800 +24F8 +2408 +3E78 +2208 +24FE +2E54 +5538 +4454 +84B2 +ENDCHAR +STARTCHAR uni4D2B +ENCODING 19755 +BBX 15 16 0 -2 +BITMAP +0800 +7F7C +5410 +54FE +7F92 +5554 +5510 +7F54 +5428 +5454 +5E8A +547C +5404 +5C08 +5630 +8008 +ENDCHAR +STARTCHAR uni4D2C +ENCODING 19756 +BBX 15 16 0 -2 +BITMAP +0848 +0844 +FF44 +2A40 +2A5E +5DE0 +8840 +1C40 +2A40 +5040 +1E20 +2222 +5412 +080A +1406 +6002 +ENDCHAR +STARTCHAR uni4D2D +ENCODING 19757 +BBX 15 16 0 -2 +BITMAP +0808 +0808 +FF08 +2A08 +2AFE +5D08 +8818 +1C18 +2A28 +5028 +1E48 +2288 +5408 +0808 +1428 +6010 +ENDCHAR +STARTCHAR uni4D2E +ENCODING 19758 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +FF10 +2A10 +2A92 +5D92 +8892 +1C92 +2A92 +5092 +1E92 +2292 +5492 +08FE +1402 +6000 +ENDCHAR +STARTCHAR uni4D2F +ENCODING 19759 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +FF40 +2A7E +2AAA +5D2A +882A +1C4A +2A4A +5092 +1F12 +2222 +5422 +0842 +1494 +6008 +ENDCHAR +STARTCHAR uni4D30 +ENCODING 19760 +BBX 15 16 0 -2 +BITMAP +0848 +0844 +FF44 +2A40 +2A5E +5DE0 +8840 +1C44 +2A44 +5048 +1E30 +2222 +5452 +088A +1506 +6002 +ENDCHAR +STARTCHAR uni4D31 +ENCODING 19761 +BBX 15 16 0 -2 +BITMAP +0820 +0810 +FF10 +2AFE +2A82 +5D04 +8840 +1C48 +2A50 +5060 +1E40 +2242 +5442 +0842 +143E +6000 +ENDCHAR +STARTCHAR uni4D32 +ENCODING 19762 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +FF10 +2AFE +2A10 +5D10 +8810 +1C7C +2A10 +5038 +1E38 +2254 +5454 +0892 +1410 +6010 +ENDCHAR +STARTCHAR uni4D33 +ENCODING 19763 +BBX 15 16 0 -2 +BITMAP +0820 +0810 +FF10 +2AFE +2A82 +5D04 +8800 +1C28 +2A28 +5028 +1E28 +2228 +5444 +0844 +1444 +6082 +ENDCHAR +STARTCHAR uni4D34 +ENCODING 19764 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +FF10 +2A10 +2A1E +5D10 +8810 +1C10 +2AFE +5082 +1E82 +2282 +5482 +0882 +14FE +6082 +ENDCHAR +STARTCHAR uni4D35 +ENCODING 19765 +BBX 15 16 0 -2 +BITMAP +1084 +1048 +FE00 +54FC +5448 +BA48 +1048 +3848 +55FE +A248 +3C48 +4448 +A848 +1088 +2888 +C108 +ENDCHAR +STARTCHAR uni4D36 +ENCODING 19766 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +FEFC +5488 +5550 +BA20 +10D8 +3B26 +54F8 +A220 +3CF8 +4420 +ABFE +1020 +2820 +C020 +ENDCHAR +STARTCHAR uni4D37 +ENCODING 19767 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +FE20 +55FE +5502 +BA04 +10F8 +3800 +5400 +A3FE +3C50 +4450 +A890 +1092 +2912 +C20E +ENDCHAR +STARTCHAR uni4D38 +ENCODING 19768 +BBX 15 16 0 -2 +BITMAP +080E +08F0 +FF22 +2A92 +2A54 +5D00 +887C +1C08 +2A10 +5010 +1EFE +2210 +5410 +0810 +1450 +6020 +ENDCHAR +STARTCHAR uni4D39 +ENCODING 19769 +BBX 15 16 0 -2 +BITMAP +0800 +087C +FF54 +2A54 +2A7C +5D54 +8854 +1C7C +2A10 +50FE +1E10 +2238 +5454 +0892 +1410 +6010 +ENDCHAR +STARTCHAR uni4D3A +ENCODING 19770 +BBX 15 16 0 -2 +BITMAP +0820 +0810 +FF7C +2A00 +2A44 +5D28 +8800 +1CFE +2A00 +5000 +1E7C +2244 +5444 +0844 +147C +6044 +ENDCHAR +STARTCHAR uni4D3B +ENCODING 19771 +BBX 15 16 0 -2 +BITMAP +0640 +387C +0894 +7E24 +2CD4 +4A08 +0100 +7FFC +1110 +2BA8 +4564 +1918 +E3E6 +0E40 +0180 +0E40 +ENDCHAR +STARTCHAR uni4D3C +ENCODING 19772 +BBX 15 16 0 -2 +BITMAP +1048 +1044 +FE5E +55E0 +5428 +BA12 +106A +3996 +5448 +A25E +3DE0 +4424 +A828 +1012 +286A +C186 +ENDCHAR +STARTCHAR uni4D3D +ENCODING 19773 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FEFE +5492 +5492 +BAFE +1092 +38A2 +54FE +A248 +3C88 +45FE +A808 +1008 +2808 +C008 +ENDCHAR +STARTCHAR uni4D3E +ENCODING 19774 +BBX 15 16 0 -2 +BITMAP +1084 +1044 +FE48 +55FE +5420 +BAFC +1020 +39FE +5440 +A280 +3CFE +4510 +AA10 +1410 +29FE +C000 +ENDCHAR +STARTCHAR uni4D3F +ENCODING 19775 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +FF02 +5478 +5400 +BAFC +1040 +38A4 +5538 +A258 +3C94 +4534 +A852 +1090 +2950 +C020 +ENDCHAR +STARTCHAR uni4D40 +ENCODING 19776 +BBX 15 16 0 -2 +BITMAP +1010 +1092 +FE54 +5410 +54FE +BA82 +1082 +38FE +5482 +A2FE +3C82 +4482 +A8FE +1000 +2844 +C082 +ENDCHAR +STARTCHAR uni4D41 +ENCODING 19777 +BBX 15 16 0 -2 +BITMAP +1048 +1148 +FF5E +556A +5554 +BBC8 +1050 +3864 +55C4 +A37E +3D44 +4564 +A954 +1144 +2954 +C248 +ENDCHAR +STARTCHAR uni4D42 +ENCODING 19778 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +FEFE +5444 +5428 +BAFE +1082 +3892 +54FE +A292 +3CBA +44AA +A8AA +10BA +2882 +C086 +ENDCHAR +STARTCHAR uni4D43 +ENCODING 19779 +BBX 15 16 0 -2 +BITMAP +0828 +0828 +FF7C +2A28 +2A28 +5DFE +8810 +1C7C +2A54 +507C +1E54 +227C +5400 +0828 +1444 +6082 +ENDCHAR +STARTCHAR uni4D44 +ENCODING 19780 +BBX 15 16 0 -2 +BITMAP +1050 +11FC +FF54 +55FC +5554 +BBFC +1000 +39FC +5400 +A3FC +3D04 +45FC +A888 +1050 +2BFE +C000 +ENDCHAR +STARTCHAR uni4D45 +ENCODING 19781 +BBX 15 16 0 -2 +BITMAP +0820 +7F20 +083E +3E44 +08A8 +7F10 +1028 +1E46 +2280 +FFFE +11C8 +2AB4 +0DD0 +764E +0180 +1E40 +ENDCHAR +STARTCHAR uni4D46 +ENCODING 19782 +BBX 15 16 0 -2 +BITMAP +1048 +1048 +FEFE +5448 +54FE +BA82 +117C +3800 +54FE +A220 +3CD2 +442C +A8D8 +102C +28CA +C030 +ENDCHAR +STARTCHAR uni4D47 +ENCODING 19783 +BBX 15 16 0 -2 +BITMAP +0810 +0410 +7FD0 +4910 +493E +4924 +7FD4 +4914 +5914 +5D94 +6B54 +4D08 +4908 +4914 +8914 +0922 +ENDCHAR +STARTCHAR uni4D48 +ENCODING 19784 +BBX 15 16 0 -2 +BITMAP +1110 +23E0 +4048 +0BFC +1100 +33F0 +5510 +10E0 +1110 +1288 +3FFE +2410 +3F7C +2638 +4D54 +9412 +ENDCHAR +STARTCHAR uni4D49 +ENCODING 19785 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2410 +3F7C +2638 +2D54 +3492 +2140 +2630 +3BEE +2000 +2FA4 +28A4 +4FA4 +48A4 +898C +ENDCHAR +STARTCHAR uni4D4A +ENCODING 19786 +BBX 15 16 0 -2 +BITMAP +0088 +7888 +49FC +4888 +6888 +5BFE +4820 +FDFC +4924 +49FC +4924 +49FC +4800 +4888 +4904 +9A02 +ENDCHAR +STARTCHAR uni4D4B +ENCODING 19787 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +7DFE +2840 +2840 +FEFC +1084 +7D84 +56FC +5484 +7C84 +54FC +5484 +7C84 +2894 +4488 +ENDCHAR +STARTCHAR uni4D4C +ENCODING 19788 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +7C20 +29FC +2820 +FEA8 +10A8 +7CA8 +5574 +5622 +7C50 +5450 +5488 +7C88 +2904 +4602 +ENDCHAR +STARTCHAR uni4D4D +ENCODING 19789 +BBX 15 16 0 -2 +BITMAP +2820 +2810 +7DFE +2800 +28FC +FE84 +10FC +7C00 +54FC +5408 +7C10 +55FE +5410 +7C10 +2850 +4420 +ENDCHAR +STARTCHAR uni4D4E +ENCODING 19790 +BBX 15 16 0 -2 +BITMAP +2820 +2924 +7D24 +2924 +29FC +FE00 +13FE +7C20 +5440 +55FC +7D54 +5554 +5554 +7D54 +2954 +450C +ENDCHAR +STARTCHAR uni4D4F +ENCODING 19791 +BBX 15 16 0 -2 +BITMAP +2800 +29DC +7C44 +2954 +28CC +FF54 +1028 +7C44 +5592 +5420 +7CC8 +5432 +54C4 +7C18 +2860 +4580 +ENDCHAR +STARTCHAR uni4D50 +ENCODING 19792 +BBX 15 16 0 -2 +BITMAP +2800 +29DC +7D54 +2954 +29DC +FE00 +11FC +7D24 +55FC +5524 +7DFC +5420 +57FE +7C20 +2820 +4420 +ENDCHAR +STARTCHAR uni4D51 +ENCODING 19793 +BBX 14 16 0 -2 +BITMAP +0C00 +7000 +11FC +FE24 +3824 +54A4 +90A4 +28A4 +5524 +9024 +5424 +3844 +5444 +9284 +5114 +2208 +ENDCHAR +STARTCHAR uni4D52 +ENCODING 19794 +BBX 14 16 0 -2 +BITMAP +0C00 +70FC +1084 +FE84 +3884 +5484 +9084 +28FC +5484 +9084 +5484 +3884 +5484 +9284 +50FC +2084 +ENDCHAR +STARTCHAR uni4D53 +ENCODING 19795 +BBX 15 16 0 -2 +BITMAP +0C10 +7010 +1090 +FE90 +38FE +5490 +9110 +2810 +5410 +91FE +5410 +3810 +5410 +9210 +5010 +2010 +ENDCHAR +STARTCHAR uni4D54 +ENCODING 19796 +BBX 15 16 0 -2 +BITMAP +0C20 +7020 +13FE +FE20 +39FC +5524 +91FC +2924 +55FC +9020 +5470 +38A8 +5524 +9622 +5020 +2020 +ENDCHAR +STARTCHAR uni4D55 +ENCODING 19797 +BBX 15 16 0 -2 +BITMAP +0C00 +71FC +1104 +FF04 +39FC +5510 +9110 +29FE +5510 +9110 +557C +3944 +5544 +9344 +517C +2244 +ENDCHAR +STARTCHAR uni4D56 +ENCODING 19798 +BBX 15 16 0 -2 +BITMAP +7E7C +4804 +7E28 +4210 +7E28 +48FC +7F00 +0100 +7FFC +0910 +3288 +CC64 +3938 +C546 +0920 +3310 +ENDCHAR +STARTCHAR uni4D57 +ENCODING 19799 +BBX 14 16 0 -2 +BITMAP +0C00 +71FC +1000 +FEF8 +3888 +5488 +90F8 +2800 +55FC +9124 +5524 +39FC +5524 +9324 +51FC +2104 +ENDCHAR +STARTCHAR uni4D58 +ENCODING 19800 +BBX 15 16 0 -2 +BITMAP +0C00 +70FC +1084 +FEFC +3884 +54FC +9000 +29FE +5480 +90FE +552A +3A4A +5492 +9322 +5054 +2088 +ENDCHAR +STARTCHAR uni4D59 +ENCODING 19801 +BBX 15 16 0 -2 +BITMAP +0C00 +7020 +10FE +FE44 +3882 +5520 +907C +2888 +5450 +9068 +559E +3822 +54D4 +9208 +5030 +21C0 +ENDCHAR +STARTCHAR uni4D5A +ENCODING 19802 +BBX 15 16 0 -2 +BITMAP +0C1E +71E0 +1022 +FF12 +3894 +5480 +9020 +29CE +5502 +9102 +55CE +3902 +5502 +9302 +51FE +2102 +ENDCHAR +STARTCHAR uni4D5B +ENCODING 19803 +BBX 15 16 0 -2 +BITMAP +0C00 +71EE +114A +FFEA +392A +55E4 +9144 +294A +55F0 +9000 +5410 +38FE +5410 +9210 +51FE +2000 +ENDCHAR +STARTCHAR uni4D5C +ENCODING 19804 +BBX 15 16 0 -2 +BITMAP +0C50 +71FC +1154 +FFFC +3954 +55FC +9000 +29FE +5500 +917C +5500 +39FE +5550 +9354 +5148 +2266 +ENDCHAR +STARTCHAR uni4D5D +ENCODING 19805 +BBX 15 16 0 -2 +BITMAP +0020 +7F20 +4920 +6B20 +5D20 +4920 +7F20 +0820 +7F20 +0820 +0F20 +F022 +0022 +5522 +4A9E +8000 +ENDCHAR +STARTCHAR uni4D5E +ENCODING 19806 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +4904 +6B24 +5D24 +4924 +7F24 +0824 +7F24 +0824 +0F24 +F024 +0004 +5504 +4A94 +8008 +ENDCHAR +STARTCHAR uni4D5F +ENCODING 19807 +BBX 15 15 0 -2 +BITMAP +FE7C +9210 +D610 +BA10 +9210 +FE10 +10FE +FE10 +1010 +1E10 +E010 +0210 +AA10 +A810 +8010 +ENDCHAR +STARTCHAR uni4D60 +ENCODING 19808 +BBX 14 16 0 -2 +BITMAP +0040 +FE40 +9240 +D6FC +BA84 +9304 +FE04 +1084 +FE44 +1044 +1E44 +E004 +0204 +AA04 +A828 +8010 +ENDCHAR +STARTCHAR uni4D61 +ENCODING 19809 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +7FFC +0440 +1830 +E00E +3FF8 +2928 +2548 +3FF8 +0100 +7FFC +0100 +FFFE +4444 +ENDCHAR +STARTCHAR uni4D62 +ENCODING 19810 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +9210 +D67C +BA10 +9210 +FE10 +10FE +FE10 +1038 +1E38 +E054 +0254 +AA92 +A810 +8010 +ENDCHAR +STARTCHAR uni4D63 +ENCODING 19811 +BBX 15 15 0 -2 +BITMAP +FE00 +92FC +D684 +BA84 +9284 +FEFC +1084 +FE84 +1084 +1EFC +E084 +0200 +AA00 +A9FE +8000 +ENDCHAR +STARTCHAR uni4D64 +ENCODING 19812 +BBX 15 16 0 -2 +BITMAP +3FF8 +0820 +0820 +FFFE +0820 +1020 +2020 +7FF8 +2928 +2548 +3FF8 +0100 +7FFC +0100 +FFFE +4444 +ENDCHAR +STARTCHAR uni4D65 +ENCODING 19813 +BBX 15 16 0 -2 +BITMAP +0040 +FE40 +927C +D684 +BB08 +92FC +FEA4 +10A4 +FEA4 +10FC +1E80 +E080 +0282 +AA82 +A87E +8000 +ENDCHAR +STARTCHAR uni4D66 +ENCODING 19814 +BBX 15 15 0 -2 +BITMAP +FE9C +9248 +D608 +BA88 +9248 +FE5E +1008 +FE28 +1048 +1EC8 +E048 +0248 +AA48 +A848 +8018 +ENDCHAR +STARTCHAR uni4D67 +ENCODING 19815 +BBX 15 16 0 -2 +BITMAP +0820 +7F28 +0824 +FFFE +0020 +7F20 +4924 +6B24 +4924 +7F28 +0828 +7F10 +0812 +FFAA +0046 +AA82 +ENDCHAR +STARTCHAR uni4D68 +ENCODING 19816 +BBX 15 16 0 -2 +BITMAP +0048 +FE44 +9240 +D6FE +BA50 +9254 +FE58 +1052 +FE54 +1058 +1E52 +E054 +029A +AA92 +A92E +8240 +ENDCHAR +STARTCHAR uni4D69 +ENCODING 19817 +BBX 15 16 0 -2 +BITMAP +0304 +3C24 +0424 +7FA4 +1624 +2504 +440C +3FF8 +2928 +2548 +3FF8 +0100 +7FFC +0100 +FFFE +4444 +ENDCHAR +STARTCHAR uni4D6A +ENCODING 19818 +BBX 15 15 0 -2 +BITMAP +FEFC +9284 +D684 +BAFC +9284 +FE84 +10FC +FE00 +1090 +1E92 +E0F4 +0298 +AA92 +A8D2 +808E +ENDCHAR +STARTCHAR uni4D6B +ENCODING 19819 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +5004 +3EF8 +4288 +A2AA +1492 +187E +E000 +3FF8 +2928 +2548 +3FF8 +0100 +FFFE +2448 +ENDCHAR +STARTCHAR uni4D6C +ENCODING 19820 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +92DA +D654 +BA54 +9292 +FF50 +1020 +FEFE +1082 +1E82 +E0FE +0282 +AA82 +A8FE +8082 +ENDCHAR +STARTCHAR uni4D6D +ENCODING 19821 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +92FA +D624 +BA28 +93FE +FE20 +1040 +FEFC +1144 +1E44 +E07C +0244 +AA44 +A87C +8044 +ENDCHAR +STARTCHAR uni4D6E +ENCODING 19822 +BBX 15 15 0 -2 +BITMAP +FE7C +9244 +D67C +BA44 +927C +FE00 +10FE +FE40 +107E +1EAA +E12A +024A +AA92 +A82A +8044 +ENDCHAR +STARTCHAR uni4D6F +ENCODING 19823 +BBX 15 16 0 -2 +BITMAP +0008 +FE1C +92E0 +D620 +BBFE +9220 +FEFC +10A4 +FEFC +10A4 +1EFC +E020 +02FC +AA20 +A9FE +8000 +ENDCHAR +STARTCHAR uni4D70 +ENCODING 19824 +BBX 15 16 0 -2 +BITMAP +0040 +FE7E +9280 +D77C +BA44 +927C +FE44 +107C +FE00 +10FE +1E40 +E0FE +032A +AA4A +A892 +8026 +ENDCHAR +STARTCHAR uni4D71 +ENCODING 19825 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +92FE +D610 +BA7C +9200 +FE7C +1044 +FE7C +1028 +1EFE +E000 +027C +AA44 +A87C +8044 +ENDCHAR +STARTCHAR uni4D72 +ENCODING 19826 +BBX 15 16 0 -2 +BITMAP +007C +FE44 +9244 +D67C +BA00 +92EE +FEAA +10AA +FEEE +1010 +1EFE +E038 +0254 +AA92 +A910 +8010 +ENDCHAR +STARTCHAR uni4D73 +ENCODING 19827 +BBX 15 16 0 -2 +BITMAP +0010 +FE28 +9244 +D6BA +BB00 +92FE +FE92 +10D6 +FE92 +10FE +1E00 +E07C +0244 +AA7C +A844 +807C +ENDCHAR +STARTCHAR uni4D74 +ENCODING 19828 +BBX 15 15 0 -2 +BITMAP +FEFE +92AA +D6AA +BAEE +9228 +FEEE +10AA +FEAA +10EE +1EAA +E0AA +02EE +AAA8 +A82A +801E +ENDCHAR +STARTCHAR uni4D75 +ENCODING 19829 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +9FF8 +1490 +1250 +1130 +FFFE +0820 +3FF8 +D556 +1390 +1FF0 +0100 +7FFC +2448 +ENDCHAR +STARTCHAR uni4D76 +ENCODING 19830 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2154 +7D54 +45DC +8450 +75DC +5554 +5554 +55DC +7554 +5554 +05DC +0550 +2852 +103E +ENDCHAR +STARTCHAR uni4D77 +ENCODING 19831 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +7AA4 +13BC +10A0 +FBBC +02A4 +12A4 +13BC +7AA4 +12A4 +13BC +1CA0 +3082 +C07E +ENDCHAR +STARTCHAR uni4D78 +ENCODING 19832 +BBX 15 16 0 -2 +BITMAP +7C10 +1052 +FE94 +3828 +5444 +9FF2 +1290 +1EF0 +0280 +3EF8 +2288 +3EF8 +2288 +3EFA +0282 +01FE +ENDCHAR +STARTCHAR uni4D79 +ENCODING 19833 +BBX 15 16 0 -2 +BITMAP +201C +7DC8 +917E +FDC8 +2818 +5FF0 +9290 +1EF0 +0280 +3EF8 +2288 +3EF8 +2288 +3EFA +0282 +01FE +ENDCHAR +STARTCHAR uni4D7A +ENCODING 19834 +BBX 15 16 0 -2 +BITMAP +21F8 +2108 +21F8 +250A +F5FA +250A +25FA +2402 +279E +2090 +3090 +EF9E +4492 +0492 +0492 +0892 +ENDCHAR +STARTCHAR uni4D7B +ENCODING 19835 +BBX 15 16 0 -2 +BITMAP +1C44 +1444 +1CEE +5544 +5DEE +5544 +5DEE +4144 +7744 +1400 +14FE +F702 +557E +5502 +55FE +9502 +ENDCHAR +STARTCHAR uni4D7C +ENCODING 19836 +BBX 15 16 0 -2 +BITMAP +0440 +247C +24A8 +3D50 +0428 +7DFE +2488 +4448 +8FF8 +4824 +4FE4 +4824 +7FFC +0440 +FC7C +2444 +ENDCHAR +STARTCHAR uni4D7D +ENCODING 19837 +BBX 15 16 0 -2 +BITMAP +0810 +FF7E +0810 +7E7C +4244 +7E28 +2418 +FEE6 +0100 +3FF8 +0100 +FFFE +0400 +0820 +1FF0 +0810 +ENDCHAR +STARTCHAR uni4D7E +ENCODING 19838 +BBX 15 16 0 -2 +BITMAP +0810 +17FE +3210 +D150 +1020 +0810 +FF10 +08FE +7E10 +00FC +7E44 +4248 +7E28 +2410 +1E28 +E0C6 +ENDCHAR +STARTCHAR uni4D7F +ENCODING 19839 +BBX 15 16 0 -2 +BITMAP +0810 +FF10 +08FC +7E10 +00FC +7E44 +4228 +7E10 +2428 +1EC6 +E100 +01FC +0100 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni4D80 +ENCODING 19840 +BBX 15 16 0 -2 +BITMAP +0810 +FF7E +0810 +7E7C +4204 +7E48 +2438 +1E44 +E100 +06C0 +1830 +E7CE +0000 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni4D81 +ENCODING 19841 +BBX 15 16 0 -2 +BITMAP +0810 +FF7E +0810 +7E7C +4244 +7E38 +2444 +7E82 +0118 +7D60 +0918 +3FF6 +D010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni4D82 +ENCODING 19842 +BBX 14 16 0 -2 +BITMAP +2020 +CE20 +8220 +EE7C +8244 +8284 +FE04 +0084 +9244 +9224 +DA24 +9204 +DA04 +9204 +9328 +D910 +ENDCHAR +STARTCHAR uni4D83 +ENCODING 19843 +BBX 15 16 0 -2 +BITMAP +2010 +CE10 +8210 +EE28 +8228 +8244 +FE44 +00A2 +9210 +9210 +DA7C +9204 +DA08 +9208 +9310 +D910 +ENDCHAR +STARTCHAR uni4D84 +ENCODING 19844 +BBX 15 16 0 -2 +BITMAP +2000 +CEFC +8210 +EE10 +8294 +8254 +FE58 +0010 +93FE +9210 +DA10 +9210 +DA10 +9210 +9310 +D910 +ENDCHAR +STARTCHAR uni4D85 +ENCODING 19845 +BBX 15 16 0 -2 +BITMAP +2020 +CE20 +823C +EE44 +82A8 +8210 +FE28 +0044 +9282 +927C +DA44 +9244 +DA44 +9244 +937C +D944 +ENDCHAR +STARTCHAR uni4D86 +ENCODING 19846 +BBX 15 16 0 -2 +BITMAP +2028 +CE24 +8240 +EE7E +82C8 +8348 +FE7E +0048 +9248 +927E +DA48 +9248 +DA48 +927E +9340 +D940 +ENDCHAR +STARTCHAR uni4D87 +ENCODING 19847 +BBX 15 16 0 -2 +BITMAP +2010 +CE10 +82FE +EE92 +82FE +8292 +FEFE +0000 +927C +9244 +DA7C +9244 +DA7C +9244 +9344 +D94C +ENDCHAR +STARTCHAR uni4D88 +ENCODING 19848 +BBX 15 16 0 -2 +BITMAP +2014 +CE12 +83FE +EE10 +82FE +8292 +FEFE +0092 +92FE +9292 +DA04 +93FE +DA44 +9224 +9324 +D90C +ENDCHAR +STARTCHAR uni4D89 +ENCODING 19849 +BBX 15 16 0 -2 +BITMAP +2020 +CEDE +828A +EECA +82AA +82D2 +FEA6 +0000 +92FE +9292 +DA92 +92FE +DA92 +9292 +93FE +D982 +ENDCHAR +STARTCHAR uni4D8A +ENCODING 19850 +BBX 15 16 0 -2 +BITMAP +2000 +7CFC +4424 +7C24 +4424 +7C24 +0024 +FEFC +9244 +FE44 +9244 +FE44 +0044 +FE44 +45FE +8400 +ENDCHAR +STARTCHAR uni4D8B +ENCODING 19851 +BBX 15 16 0 -2 +BITMAP +2000 +7CFC +4444 +7C48 +4448 +7C50 +005C +FE44 +9244 +FE44 +9268 +FEA8 +0090 +FE98 +4524 +8442 +ENDCHAR +STARTCHAR uni4D8C +ENCODING 19852 +BBX 15 16 0 -2 +BITMAP +2040 +7C40 +44FC +7C84 +4504 +7EF4 +0094 +FE94 +92F4 +FE84 +9294 +FE88 +0082 +FE82 +447E +8400 +ENDCHAR +STARTCHAR uni4D8D +ENCODING 19853 +BBX 15 16 0 -2 +BITMAP +0040 +FEF8 +2088 +28F8 +4488 +FCF8 +1400 +11FC +1124 +7DFC +1124 +11FC +1C00 +E3FE +4088 +0108 +ENDCHAR +STARTCHAR uni4D8E +ENCODING 19854 +BBX 15 16 0 -2 +BITMAP +1010 +3E10 +2228 +3E28 +2244 +3E82 +007C +7F00 +4900 +7F7C +4944 +7F44 +0044 +FFC4 +227C +4244 +ENDCHAR +STARTCHAR uni4D8F +ENCODING 19855 +BBX 15 16 0 -2 +BITMAP +4420 +287C +0044 +FC7C +1444 +147C +FC00 +90FE +9092 +FEFE +3292 +32FE +5A00 +54FE +9044 +1084 +ENDCHAR +STARTCHAR uni4D90 +ENCODING 19856 +BBX 15 16 0 -2 +BITMAP +2010 +7C28 +4444 +7CBA +4500 +7CFE +0092 +FED6 +9292 +FEFE +9200 +FE7C +0044 +FE7C +4444 +847C +ENDCHAR +STARTCHAR uni4D91 +ENCODING 19857 +BBX 14 16 0 -2 +BITMAP +2020 +7CF8 +4420 +7DFC +4504 +7CF8 +00A8 +FEF8 +92A8 +FEF8 +9244 +FEFC +0020 +FEB8 +44A0 +857C +ENDCHAR +STARTCHAR uni4D92 +ENCODING 19858 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0284 +7D78 +2550 +2548 +4D64 +2008 +3FF8 +2008 +3FF8 +2208 +3FF8 +2448 +4388 +9C68 +ENDCHAR +STARTCHAR uni4D93 +ENCODING 19859 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +F888 +A852 +AFAC +AAAA +AAA8 +ADAC +A800 +A904 +B9FC +2104 +21FC +2104 +2204 +ENDCHAR +STARTCHAR uni4D94 +ENCODING 19860 +BBX 15 16 0 -2 +BITMAP +1020 +5020 +5C20 +50A0 +FEAC +28B4 +AAE4 +D7A4 +82A4 +FEB4 +AAA8 +AAA2 +D6A2 +9E82 +E27E +0200 +ENDCHAR +STARTCHAR uni4D95 +ENCODING 19861 +BBX 15 16 0 -2 +BITMAP +0800 +2800 +2F7C +2854 +FF54 +1454 +5554 +6B54 +417C +7F40 +5540 +5540 +6B42 +4F42 +713E +0100 +ENDCHAR +STARTCHAR uni4D96 +ENCODING 19862 +BBX 15 16 0 -2 +BITMAP +0810 +2810 +2F10 +2828 +FF28 +1444 +5544 +6BA2 +4110 +7F10 +557C +5504 +6B08 +4F08 +7110 +0110 +ENDCHAR +STARTCHAR uni4D97 +ENCODING 19863 +BBX 15 16 0 -2 +BITMAP +0800 +287E +2F04 +2804 +FF74 +1454 +5554 +6B54 +4154 +7F54 +5574 +5554 +6B04 +4F04 +7114 +0108 +ENDCHAR +STARTCHAR uni4D98 +ENCODING 19864 +BBX 15 16 0 -2 +BITMAP +0820 +2810 +2F10 +28FE +FF00 +1404 +5544 +6B44 +4124 +7F24 +5528 +5528 +6B08 +4F10 +71FE +0100 +ENDCHAR +STARTCHAR uni4D99 +ENCODING 19865 +BBX 15 16 0 -2 +BITMAP +0800 +287E +2F40 +2840 +FF40 +147C +5544 +6B44 +4144 +7F44 +557C +5540 +6B40 +4F40 +717E +0100 +ENDCHAR +STARTCHAR uni4D9A +ENCODING 19866 +BBX 15 16 0 -2 +BITMAP +0810 +2810 +2F10 +287C +FF54 +1454 +5554 +6B54 +417C +7F54 +5510 +5514 +6B12 +4F7E +7122 +0100 +ENDCHAR +STARTCHAR uni4D9B +ENCODING 19867 +BBX 14 16 0 -2 +BITMAP +7F04 +0844 +1E44 +2244 +5444 +0844 +310C +C9E0 +0900 +7FFC +0440 +2AA8 +3FF8 +2448 +2AA8 +3FF8 +ENDCHAR +STARTCHAR uni4D9C +ENCODING 19868 +BBX 15 16 0 -2 +BITMAP +1010 +5050 +5C50 +507C +FE50 +2890 +AA10 +D6FE +8200 +FE00 +AA7C +AA44 +D644 +9E44 +E27C +0244 +ENDCHAR +STARTCHAR uni4D9D +ENCODING 19869 +BBX 15 16 0 -2 +BITMAP +1020 +5020 +5C20 +51FC +FE20 +28A8 +AAA8 +D6A8 +8374 +FE22 +AA50 +AA50 +D688 +9E88 +E304 +0202 +ENDCHAR +STARTCHAR uni4D9E +ENCODING 19870 +BBX 15 16 0 -2 +BITMAP +0824 +2824 +2F7E +2824 +FF24 +143C +5524 +6B24 +413C +7F24 +5524 +55FE +6B00 +4F24 +7122 +0142 +ENDCHAR +STARTCHAR uni4D9F +ENCODING 19871 +BBX 14 16 0 -2 +BITMAP +1020 +5020 +5C3C +5044 +FE48 +2880 +AA20 +D6CC +8284 +FE84 +AACC +AA84 +D684 +9E84 +E2FC +0284 +ENDCHAR +STARTCHAR uni4DA0 +ENCODING 19872 +BBX 15 16 0 -2 +BITMAP +0028 +3FFE +2020 +2FA4 +2028 +2F90 +48AA +4FC6 +8082 +0100 +11F8 +1100 +FFFE +0440 +2AA8 +3FF8 +ENDCHAR +STARTCHAR uni4DA1 +ENCODING 19873 +BBX 15 16 0 -2 +BITMAP +1002 +50E2 +5CA2 +50AA +FEAA +28EA +AAAA +D6AA +82EA +FEAA +AAAA +AAA2 +D6E2 +9E02 +E24A +02A4 +ENDCHAR +STARTCHAR uni4DA2 +ENCODING 19874 +BBX 15 16 0 -2 +BITMAP +100C +500A +5C08 +50FE +FE88 +2888 +AAFA +D68A +828A +FEEC +AAAC +AAAC +D6EA +9E8A +E296 +0322 +ENDCHAR +STARTCHAR uni4DA3 +ENCODING 19875 +BBX 15 16 0 -2 +BITMAP +1010 +5054 +5C54 +5054 +FE7C +2800 +AAFE +D600 +827C +FE44 +AA44 +AA7C +D644 +9E28 +E2FE +0200 +ENDCHAR +STARTCHAR uni4DA4 +ENCODING 19876 +BBX 15 16 0 -2 +BITMAP +1000 +507C +5C44 +5074 +FE54 +28FE +AA82 +D67C +8244 +FE7C +AA44 +AA7C +D644 +9E44 +E254 +0248 +ENDCHAR +STARTCHAR uni4DA5 +ENCODING 19877 +BBX 15 16 0 -2 +BITMAP +1020 +503C +5C20 +50FE +FEA2 +28B8 +AAE4 +D69C +8280 +FEBC +AAA4 +AABC +D6A4 +9EBC +E2A4 +037E +ENDCHAR +STARTCHAR uni4DA6 +ENCODING 19878 +BBX 15 16 0 -2 +BITMAP +1020 +51FC +5C20 +50FC +FE20 +29FE +AA00 +D6FC +8284 +FEFC +AA84 +AAFC +D684 +9EFC +E248 +0284 +ENDCHAR +STARTCHAR uni4DA7 +ENCODING 19879 +BBX 15 16 0 -2 +BITMAP +1010 +5010 +5C7E +5010 +FEFE +2844 +AAEE +D644 +8264 +FEDE +AA00 +AAFE +D628 +9E28 +E24A +0286 +ENDCHAR +STARTCHAR uni4DA8 +ENCODING 19880 +BBX 15 16 0 -2 +BITMAP +1010 +5010 +5C28 +5044 +FE82 +287C +AA00 +D6EE +82AA +FEAA +AAEE +AA44 +D644 +9EAA +E2AA +0312 +ENDCHAR +STARTCHAR uni4DA9 +ENCODING 19881 +BBX 15 16 0 -2 +BITMAP +1020 +5010 +5DFE +5054 +FFA8 +28AC +ABAA +D6A8 +83AC +FE00 +AA84 +AAFC +D684 +9EFC +E284 +0304 +ENDCHAR +STARTCHAR uni4DAA +ENCODING 19882 +BBX 15 16 0 -2 +BITMAP +104C +51FA +5C48 +51FE +FE08 +2868 +AA5A +D6FA +83AA +FEFC +AAAC +AAFC +D6AA +9EFA +E296 +0222 +ENDCHAR +STARTCHAR uni4DAB +ENCODING 19883 +BBX 15 16 0 -2 +BITMAP +13DE +5252 +5FDE +5000 +FFFE +2A00 +AAC8 +D64E +83EA +FEB2 +AAEA +AAAA +D6EA +9EB4 +E3E4 +022A +ENDCHAR +STARTCHAR uni4DAC +ENCODING 19884 +BBX 15 15 0 -2 +BITMAP +7C7C +1010 +FEFE +1010 +1010 +0840 +7F7C +1440 +FF7C +2204 +3E7C +2240 +3E7C +2242 +263E +ENDCHAR +STARTCHAR uni4DAD +ENCODING 19885 +BBX 15 16 0 -2 +BITMAP +1400 +12FE +1210 +1010 +FF90 +147C +1410 +1510 +1510 +16FE +2600 +2402 +2C02 +5402 +43FE +8000 +ENDCHAR +STARTCHAR uni4DAE +ENCODING 19886 +BBX 15 16 0 -2 +BITMAP +0440 +0420 +FFFE +0910 +1160 +2184 +4F04 +80FC +0000 +1FF0 +0100 +7FFC +0280 +0440 +1830 +600C +ENDCHAR +STARTCHAR uni4DAF +ENCODING 19887 +BBX 15 16 0 -2 +BITMAP +2080 +27FC +2404 +27BC +F0A0 +56BE +52A2 +57B6 +52AA +96AA +50B6 +26A2 +22BE +57A0 +52A2 +867E +ENDCHAR +STARTCHAR uni4DB0 +ENCODING 19888 +BBX 15 16 0 -2 +BITMAP +1000 +FF86 +80B8 +F788 +1408 +D7CE +5458 +F6C8 +5548 +D54E +16F8 +D448 +57CA +F40A +544A +CFC6 +ENDCHAR +STARTCHAR uni4DB1 +ENCODING 19889 +BBX 15 16 0 -2 +BITMAP +4080 +47FC +7404 +97BC +50A0 +26BE +52A2 +8FB6 +0AAA +66AA +10B6 +06A2 +82BE +47A0 +22A2 +067E +ENDCHAR +STARTCHAR uni4DB2 +ENCODING 19890 +BBX 15 16 0 -2 +BITMAP +1040 +13FE +1202 +7FDE +5450 +575E +7D52 +57DA +5556 +5756 +FC5A +4752 +455E +47D0 +5552 +4B3E +ENDCHAR +STARTCHAR uni4DB3 +ENCODING 19891 +BBX 15 16 0 -2 +BITMAP +0810 +0808 +1400 +227E +5D00 +8080 +7F38 +5528 +7F28 +0028 +7F28 +552A +7F2A +554A +5546 +4380 +ENDCHAR +STARTCHAR uni4DB4 +ENCODING 19892 +BBX 15 16 0 -2 +BITMAP +0840 +2A7C +4894 +1410 +2128 +46C4 +1830 +EFEE +0000 +3BB8 +2AA8 +7FFC +4444 +7FFC +4444 +444C +ENDCHAR +STARTCHAR uni4DB5 +ENCODING 19893 +BBX 15 16 0 -2 +BITMAP +1004 +103E +2BE0 +463C +BA20 +02FC +FEA4 +AAB8 +FEE4 +029C +FE80 +AAB8 +FEA8 +AAAA +AB2A +8646 +ENDCHAR +STARTCHAR uni4DB6 +ENCODING 19894 +BBX 14 16 1 -2 +BITMAP +0400 +07F0 +0400 +FFFC +0000 +23F0 +2210 +FBF0 +2210 +3BF0 +6000 +AFFC +2120 +2138 +A2A0 +447C +ENDCHAR +STARTCHAR uni4DB7 +ENCODING 19895 +BBX 14 15 1 -2 +BITMAP +0220 +F220 +9220 +9220 +9220 +9220 +9220 +9220 +9220 +F420 +9424 +0424 +0824 +081C +1000 +ENDCHAR +STARTCHAR uni4DB8 +ENCODING 19896 +BBX 14 14 1 -1 +BITMAP +0100 +F100 +9100 +9100 +9240 +9240 +9440 +9080 +9080 +F110 +9108 +0208 +07FC +0204 +ENDCHAR +STARTCHAR uni4DB9 +ENCODING 19897 +BBX 11 15 2 -2 +BITMAP +0400 +0400 +8420 +8420 +8420 +8420 +8420 +FFE0 +0400 +0400 +0800 +0800 +1000 +2000 +C000 +ENDCHAR +STARTCHAR uni4DBA +ENCODING 19898 +BBX 16 16 0 -2 +BITMAP +3C10 +2410 +2410 +25FF +3D11 +2511 +2511 +2529 +3D25 +2543 +2581 +2501 +2501 +4501 +5505 +8902 +ENDCHAR +STARTCHAR uni4DBB +ENCODING 19899 +BBX 16 16 0 -2 +BITMAP +3C20 +2420 +2420 +25FE +3D22 +2424 +2420 +2428 +2428 +3C48 +2448 +2488 +2489 +4509 +5607 +8800 +ENDCHAR +STARTCHAR uni4DBC +ENCODING 19900 +BBX 16 16 0 -2 +BITMAP +7848 +4884 +4912 +4A21 +7844 +4982 +4BFE +4802 +7820 +4810 +4952 +4941 +4A45 +8845 +A83C +1000 +ENDCHAR +STARTCHAR uni4DBD +ENCODING 19901 +BBX 16 16 0 -2 +BITMAP +3D52 +2522 +2552 +258A +3DFE +2448 +2448 +2487 +3D10 +2420 +247C +2484 +2548 +4420 +5458 +8984 +ENDCHAR +STARTCHAR uni4DBE +ENCODING 19902 +BBX 16 14 0 -1 +BITMAP +0810 +0810 +681F +8BA1 +88AA +EBC8 +8888 +FF88 +0814 +0814 +0C14 +1222 +2122 +C141 +ENDCHAR +STARTCHAR uni4DBF +ENCODING 19903 +BBX 16 16 0 -2 +BITMAP +0848 +0848 +1448 +1248 +2848 +7E48 +A248 +3E48 +2248 +3E48 +2088 +2889 +2489 +2A89 +3307 +2100 +ENDCHAR +STARTCHAR uni4DC0 +ENCODING 19904 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DC1 +ENCODING 19905 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DC2 +ENCODING 19906 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DC3 +ENCODING 19907 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DC4 +ENCODING 19908 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DC5 +ENCODING 19909 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DC6 +ENCODING 19910 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DC7 +ENCODING 19911 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DC8 +ENCODING 19912 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DC9 +ENCODING 19913 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DCA +ENCODING 19914 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DCB +ENCODING 19915 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DCC +ENCODING 19916 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DCD +ENCODING 19917 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DCE +ENCODING 19918 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DCF +ENCODING 19919 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DD0 +ENCODING 19920 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DD1 +ENCODING 19921 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DD2 +ENCODING 19922 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DD3 +ENCODING 19923 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DD4 +ENCODING 19924 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DD5 +ENCODING 19925 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DD6 +ENCODING 19926 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DD7 +ENCODING 19927 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DD8 +ENCODING 19928 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DD9 +ENCODING 19929 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DDA +ENCODING 19930 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DDB +ENCODING 19931 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DDC +ENCODING 19932 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DDD +ENCODING 19933 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DDE +ENCODING 19934 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DDF +ENCODING 19935 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DE0 +ENCODING 19936 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DE1 +ENCODING 19937 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DE2 +ENCODING 19938 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DE3 +ENCODING 19939 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DE4 +ENCODING 19940 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DE5 +ENCODING 19941 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DE6 +ENCODING 19942 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DE7 +ENCODING 19943 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DE8 +ENCODING 19944 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DE9 +ENCODING 19945 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DEA +ENCODING 19946 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DEB +ENCODING 19947 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DEC +ENCODING 19948 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DED +ENCODING 19949 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DEE +ENCODING 19950 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DEF +ENCODING 19951 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DF0 +ENCODING 19952 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DF1 +ENCODING 19953 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DF2 +ENCODING 19954 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DF3 +ENCODING 19955 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DF4 +ENCODING 19956 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DF5 +ENCODING 19957 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DF6 +ENCODING 19958 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DF7 +ENCODING 19959 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DF8 +ENCODING 19960 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DF9 +ENCODING 19961 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DFA +ENCODING 19962 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DFB +ENCODING 19963 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DFC +ENCODING 19964 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DFD +ENCODING 19965 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +F8F8 +0000 +FFF8 +0000 +FFF8 +0000 +F8F8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4DFE +ENCODING 19966 +BBX 13 11 1 0 +BITMAP +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni4DFF +ENCODING 19967 +BBX 13 11 1 0 +BITMAP +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +0000 +FFF8 +0000 +F8F8 +ENDCHAR +STARTCHAR uni4E00 +ENCODING 19968 +BBX 14 1 1 6 +BITMAP +FFFC +ENDCHAR +STARTCHAR uni4E01 +ENCODING 19969 +BBX 13 14 2 -1 +BITMAP +FFF8 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0E00 +ENDCHAR +STARTCHAR uni4E02 +ENCODING 19970 +BBX 11 14 3 -1 +BITMAP +FFE0 +0800 +0800 +1000 +1000 +3F80 +2080 +0080 +0080 +0080 +0080 +0100 +0100 +0E00 +ENDCHAR +STARTCHAR uni4E03 +ENCODING 19971 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +0800 +0800 +080E +0870 +0F80 +F800 +0800 +0800 +0800 +0804 +0804 +0404 +03FC +ENDCHAR +STARTCHAR uni4E04 +ENCODING 19972 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni4E05 +ENCODING 19973 +BBX 15 15 0 -2 +BITMAP +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4E06 +ENCODING 19974 +BBX 15 11 0 2 +BITMAP +FFFE +0200 +0200 +0400 +0400 +0800 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni4E07 +ENCODING 19975 +BBX 14 14 1 -1 +BITMAP +7FFC +0400 +0400 +0400 +07F0 +0410 +0410 +0810 +0810 +1010 +1010 +2020 +4020 +81C0 +ENDCHAR +STARTCHAR uni4E08 +ENCODING 19976 +BBX 13 15 2 -1 +BITMAP +0100 +0100 +0100 +FFF8 +0100 +0100 +2100 +2100 +1200 +0A00 +0400 +0A00 +1180 +2060 +C018 +ENDCHAR +STARTCHAR uni4E09 +ENCODING 19977 +BBX 14 12 1 0 +BITMAP +3FF0 +0000 +0000 +0000 +0000 +1FE0 +0000 +0000 +0000 +0000 +0000 +FFFC +ENDCHAR +STARTCHAR uni4E0A +ENCODING 19978 +BBX 14 14 1 -1 +BITMAP +0200 +0200 +0200 +0200 +0200 +0200 +03F0 +0200 +0200 +0200 +0200 +0200 +0200 +FFFC +ENDCHAR +STARTCHAR uni4E0B +ENCODING 19979 +BBX 14 14 1 -1 +BITMAP +FFFC +0200 +0200 +0200 +0200 +0380 +0260 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni4E0C +ENCODING 19980 +BBX 15 15 0 -2 +BITMAP +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +0820 +0820 +0820 +1020 +1020 +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni4E0D +ENCODING 19981 +BBX 15 14 1 -1 +BITMAP +7FFC +0080 +0100 +0380 +0540 +0920 +3118 +C106 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4E0E +ENCODING 19982 +BBX 15 15 1 -1 +BITMAP +0400 +0400 +0400 +07F0 +0400 +0800 +0FE0 +0820 +0020 +FFFE +0020 +0020 +0040 +0040 +0780 +ENDCHAR +STARTCHAR uni4E0F +ENCODING 19983 +BBX 15 14 1 -1 +BITMAP +FFFE +0100 +0100 +21FC +2104 +2104 +2104 +3FFC +0004 +0004 +0004 +0008 +0008 +00F0 +ENDCHAR +STARTCHAR uni4E10 +ENCODING 19984 +BBX 13 14 2 -1 +BITMAP +FFF8 +0200 +4200 +43F0 +4200 +4200 +7FF8 +0008 +0008 +0008 +0008 +0010 +0010 +00E0 +ENDCHAR +STARTCHAR uni4E11 +ENCODING 19985 +BBX 15 13 1 0 +BITMAP +7FF0 +0410 +0410 +0410 +0410 +0410 +7FFE +0810 +0810 +0810 +0810 +0810 +FFFE +ENDCHAR +STARTCHAR uni4E12 +ENCODING 19986 +BBX 15 14 1 -1 +BITMAP +7FFC +0104 +1104 +0904 +0504 +0204 +0304 +0484 +0804 +1008 +2008 +C070 +0000 +FFFE +ENDCHAR +STARTCHAR uni4E13 +ENCODING 19987 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +3FF8 +0200 +0200 +FFFE +0400 +0800 +0FF0 +0010 +0020 +0640 +0180 +0040 +0020 +ENDCHAR +STARTCHAR uni4E14 +ENCODING 19988 +BBX 13 13 2 0 +BITMAP +1FC0 +1040 +1040 +1040 +1FC0 +1040 +1040 +1040 +1FC0 +1040 +1040 +1040 +FFF8 +ENDCHAR +STARTCHAR uni4E15 +ENCODING 19989 +BBX 15 14 1 -1 +BITMAP +7FFC +0080 +0080 +0100 +0340 +0520 +0910 +3108 +C106 +0100 +0100 +0100 +0000 +FFFE +ENDCHAR +STARTCHAR uni4E16 +ENCODING 19990 +BBX 15 14 1 -1 +BITMAP +1110 +1110 +1110 +1110 +FFFE +1110 +1110 +1110 +1110 +11F0 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uni4E17 +ENCODING 19991 +BBX 15 15 1 -1 +BITMAP +1110 +1110 +1110 +1110 +1110 +1110 +FFFE +1110 +1110 +1110 +1110 +1110 +1110 +1110 +1FF0 +ENDCHAR +STARTCHAR uni4E18 +ENCODING 19992 +BBX 15 13 1 0 +BITMAP +00E0 +1F00 +1000 +1000 +1FF8 +1020 +1020 +1020 +1020 +1020 +1020 +1020 +FFFE +ENDCHAR +STARTCHAR uni4E19 +ENCODING 19993 +BBX 14 14 1 -1 +BITMAP +FFFC +0200 +0200 +7FF8 +4208 +4508 +4488 +4848 +5028 +4008 +4008 +4008 +4008 +4038 +ENDCHAR +STARTCHAR uni4E1A +ENCODING 19994 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +0440 +0440 +4444 +2444 +2448 +1448 +1450 +1460 +0440 +0440 +0440 +0440 +FFFE +ENDCHAR +STARTCHAR uni4E1B +ENCODING 19995 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +0820 +0820 +0820 +0820 +0820 +1450 +1250 +2288 +2088 +4104 +8202 +0000 +FFFE +ENDCHAR +STARTCHAR uni4E1C +ENCODING 19996 +BBX 13 16 1 -2 +BITMAP +0400 +0400 +0400 +FFF8 +0800 +1200 +2200 +4200 +7FF0 +0200 +1240 +2220 +4210 +8208 +0A00 +0400 +ENDCHAR +STARTCHAR uni4E1D +ENCODING 19997 +BBX 15 15 0 -1 +BITMAP +0810 +0810 +1020 +1020 +2244 +4284 +7CF8 +0408 +0810 +1020 +2040 +7EFC +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uni4E1E +ENCODING 19998 +BBX 15 14 1 -1 +BITMAP +3FF0 +0020 +0040 +0180 +7984 +0948 +1150 +2120 +4110 +8108 +0106 +0F00 +0000 +7FFC +ENDCHAR +STARTCHAR uni4E1F +ENCODING 19999 +BBX 15 15 0 -2 +BITMAP +7FFC +0100 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0200 +0400 +0820 +1010 +3FF8 +1008 +ENDCHAR +STARTCHAR uni4E20 +ENCODING 20000 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +0440 +0444 +7C48 +0450 +0460 +0440 +0442 +0442 +1C42 +E43E +4400 +0000 +FFFE +ENDCHAR +STARTCHAR uni4E21 +ENCODING 20001 +BBX 15 14 1 -1 +BITMAP +FFFE +0100 +0100 +7FFC +4104 +4104 +4924 +4924 +4924 +4924 +4FE4 +4004 +4004 +401C +ENDCHAR +STARTCHAR uni4E22 +ENCODING 20002 +BBX 15 16 0 -2 +BITMAP +0010 +00F8 +3F00 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0200 +0400 +0820 +1010 +3FF8 +1008 +ENDCHAR +STARTCHAR uni4E23 +ENCODING 20003 +BBX 15 15 0 -2 +BITMAP +FFFE +0440 +0440 +0440 +7C7C +4444 +4444 +4444 +7C7C +0444 +0840 +0840 +1040 +2040 +4040 +ENDCHAR +STARTCHAR uni4E24 +ENCODING 20004 +BBX 15 15 0 -2 +BITMAP +FFFE +0440 +0440 +0440 +7FFC +4444 +4444 +4444 +4AA4 +4A94 +5114 +4204 +4004 +4014 +4008 +ENDCHAR +STARTCHAR uni4E25 +ENCODING 20005 +BBX 15 15 0 -2 +BITMAP +7FFC +0240 +1248 +0A50 +0240 +3FFE +2000 +2000 +2000 +2000 +2000 +2000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni4E26 +ENCODING 20006 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +0820 +0840 +7FFC +0440 +0440 +4444 +4444 +4444 +2448 +2448 +0440 +0440 +FFFE +ENDCHAR +STARTCHAR uni4E27 +ENCODING 20007 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +1110 +0910 +0920 +0100 +FFFE +1200 +1110 +10A0 +1040 +1430 +180E +1000 +ENDCHAR +STARTCHAR uni4E28 +ENCODING 20008 +BBX 1 14 7 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni4E29 +ENCODING 20009 +BBX 9 15 3 -1 +BITMAP +0080 +0080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2380 +2C80 +3080 +C080 +0080 +0080 +ENDCHAR +STARTCHAR uni4E2A +ENCODING 20010 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0280 +0440 +0820 +1110 +2108 +C106 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4E2B +ENCODING 20011 +BBX 10 14 3 -1 +BITMAP +8040 +4080 +2100 +1200 +0C00 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni4E2C +ENCODING 20012 +BBX 6 15 5 -1 +BITMAP +04 +04 +04 +44 +24 +14 +14 +04 +0C +14 +24 +C4 +04 +04 +04 +ENDCHAR +STARTCHAR uni4E2D +ENCODING 20013 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +FFF8 +8208 +8208 +8208 +8208 +8208 +FFF8 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni4E2E +ENCODING 20014 +BBX 15 14 1 -1 +BITMAP +FFF0 +0010 +0410 +0410 +0410 +7FD0 +0410 +0410 +0410 +7FD0 +0408 +040A +040A +0404 +ENDCHAR +STARTCHAR uni4E2F +ENCODING 20015 +BBX 14 15 1 -1 +BITMAP +0200 +0218 +03E0 +3E00 +0200 +0230 +03C0 +7E00 +0200 +021C +03E0 +FE00 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni4E30 +ENCODING 20016 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4E31 +ENCODING 20017 +BBX 14 15 1 -1 +BITMAP +0440 +0440 +4444 +4444 +4444 +4444 +4444 +4444 +4444 +7C7C +0440 +0440 +0840 +3040 +C040 +ENDCHAR +STARTCHAR uni4E32 +ENCODING 20018 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +7FF0 +4210 +4210 +7FF0 +0200 +FFF8 +8208 +8208 +8208 +FFF8 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni4E33 +ENCODING 20019 +BBX 13 16 1 -2 +BITMAP +0880 +0880 +7FF0 +4890 +4890 +7FF0 +0880 +0880 +FFF8 +8888 +8888 +FFF8 +9088 +2080 +4080 +8080 +ENDCHAR +STARTCHAR uni4E34 +ENCODING 20020 +BBX 14 16 1 -2 +BITMAP +1100 +1100 +1100 +93FC +9280 +9440 +9840 +9000 +93F8 +9248 +9248 +9248 +9248 +13F8 +1208 +1000 +ENDCHAR +STARTCHAR uni4E35 +ENCODING 20021 +BBX 15 16 0 -2 +BITMAP +0440 +2448 +1450 +0440 +FFFE +0000 +0820 +0440 +3FF8 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4E36 +ENCODING 20022 +BBX 10 9 3 2 +BITMAP +C000 +3000 +0800 +0400 +0200 +0100 +0180 +00C0 +00C0 +ENDCHAR +STARTCHAR uni4E37 +ENCODING 20023 +BBX 11 7 2 4 +BITMAP +0020 +8020 +4040 +2040 +1080 +1100 +0200 +ENDCHAR +STARTCHAR uni4E38 +ENCODING 20024 +BBX 15 15 1 -1 +BITMAP +0400 +0400 +0400 +FFE0 +0420 +0420 +0420 +0420 +3420 +0C20 +0A20 +0920 +1022 +2012 +C00E +ENDCHAR +STARTCHAR uni4E39 +ENCODING 20025 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1010 +1210 +1110 +1090 +1010 +FFFE +1010 +1010 +2010 +2010 +4010 +8070 +ENDCHAR +STARTCHAR uni4E3A +ENCODING 20026 +BBX 13 16 0 -2 +BITMAP +0100 +2100 +1100 +1100 +0100 +7FF8 +0208 +0208 +0288 +0448 +0448 +0808 +1008 +2008 +4050 +8020 +ENDCHAR +STARTCHAR uni4E3B +ENCODING 20027 +BBX 14 15 1 -1 +BITMAP +0400 +0200 +0100 +7FF8 +0200 +0200 +0200 +0200 +3FF0 +0200 +0200 +0200 +0200 +0200 +FFFC +ENDCHAR +STARTCHAR uni4E3C +ENCODING 20028 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +0820 +FFFE +0820 +0A20 +0920 +08A0 +0820 +0820 +FFFE +0820 +1020 +2020 +C020 +ENDCHAR +STARTCHAR uni4E3D +ENCODING 20029 +BBX 15 15 0 -2 +BITMAP +FFFE +0000 +0000 +3EF8 +2288 +2288 +2288 +32C8 +2AA8 +2AA8 +2288 +2288 +2288 +2AA8 +2490 +ENDCHAR +STARTCHAR uni4E3E +ENCODING 20030 +BBX 15 16 0 -2 +BITMAP +2208 +1108 +1110 +0020 +FFFE +0820 +1110 +2108 +CFE6 +0100 +0100 +7FFC +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4E3F +ENCODING 20031 +BBX 8 15 2 -1 +BITMAP +01 +01 +01 +01 +01 +01 +01 +01 +01 +02 +02 +04 +08 +30 +C0 +ENDCHAR +STARTCHAR uni4E40 +ENCODING 20032 +BBX 14 14 2 -1 +BITMAP +1000 +1000 +2800 +2800 +4800 +8400 +0400 +0400 +0200 +0200 +0100 +0080 +0060 +001C +ENDCHAR +STARTCHAR uni4E41 +ENCODING 20033 +BBX 13 14 2 -2 +BITMAP +FC00 +0400 +0400 +0400 +0400 +0400 +0400 +0200 +0200 +0100 +0080 +0040 +0020 +0018 +ENDCHAR +STARTCHAR uni4E42 +ENCODING 20034 +BBX 15 14 1 -1 +BITMAP +1010 +1010 +1010 +0820 +0820 +0440 +0440 +0280 +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni4E43 +ENCODING 20035 +BBX 14 14 1 -1 +BITMAP +7FE0 +0420 +0420 +0420 +0420 +043C +0804 +0804 +0804 +1004 +1004 +2008 +4008 +80F0 +ENDCHAR +STARTCHAR uni4E44 +ENCODING 20036 +BBX 10 14 2 -1 +BITMAP +0040 +0040 +0040 +0040 +0880 +0480 +0300 +0100 +0280 +0440 +8840 +9000 +E000 +8000 +ENDCHAR +STARTCHAR uni4E45 +ENCODING 20037 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +0400 +07E0 +0820 +1040 +6040 +0080 +0080 +0140 +0240 +0420 +0810 +3008 +C006 +ENDCHAR +STARTCHAR uni4E46 +ENCODING 20038 +BBX 15 16 0 -2 +BITMAP +0010 +0810 +0810 +1020 +1020 +2040 +7FC0 +2080 +0080 +0140 +0140 +0220 +0420 +0810 +3008 +C006 +ENDCHAR +STARTCHAR uni4E47 +ENCODING 20039 +BBX 15 15 1 -1 +BITMAP +0030 +01C0 +3E00 +0200 +0200 +0200 +0200 +FFFE +0200 +0200 +0200 +0200 +0204 +0204 +01FC +ENDCHAR +STARTCHAR uni4E48 +ENCODING 20040 +BBX 13 15 2 -1 +BITMAP +1000 +1000 +1000 +1000 +2000 +2400 +4400 +8400 +0400 +0440 +0820 +0820 +0830 +13C8 +FC08 +ENDCHAR +STARTCHAR uni4E49 +ENCODING 20041 +BBX 15 16 0 -2 +BITMAP +0200 +0110 +2110 +2010 +1020 +1020 +0820 +0840 +0440 +0280 +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni4E4A +ENCODING 20042 +BBX 13 9 1 4 +BITMAP +0010 +03F8 +FC00 +0010 +4010 +2020 +2020 +1040 +1080 +ENDCHAR +STARTCHAR uni4E4B +ENCODING 20043 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +7FF8 +0010 +0020 +0040 +0080 +0100 +0200 +1400 +2800 +4600 +8180 +807E +ENDCHAR +STARTCHAR uni4E4C +ENCODING 20044 +BBX 13 16 1 -2 +BITMAP +0200 +0400 +3FE0 +2020 +2020 +2020 +20A0 +2040 +2000 +3FF8 +0008 +0008 +FFC8 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni4E4D +ENCODING 20045 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +1000 +3FFE +2100 +4100 +8100 +01F8 +0100 +0100 +0100 +01FC +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4E4E +ENCODING 20046 +BBX 15 15 1 -1 +BITMAP +00F8 +7F00 +0108 +2108 +2108 +1110 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni4E4F +ENCODING 20047 +BBX 15 14 1 -1 +BITMAP +0070 +3F80 +0100 +0100 +0100 +3FF8 +0010 +0060 +0180 +1600 +2800 +4600 +8180 +807E +ENDCHAR +STARTCHAR uni4E50 +ENCODING 20048 +BBX 13 16 1 -2 +BITMAP +0040 +01E0 +3E00 +2000 +2200 +4200 +4200 +7FF8 +0200 +1240 +1220 +2210 +4208 +8208 +0A00 +0400 +ENDCHAR +STARTCHAR uni4E51 +ENCODING 20049 +BBX 15 15 1 -1 +BITMAP +0038 +00C0 +0700 +3900 +0100 +0980 +3184 +C148 +0150 +0120 +0910 +3108 +C106 +0100 +0100 +ENDCHAR +STARTCHAR uni4E52 +ENCODING 20050 +BBX 15 16 0 -2 +BITMAP +0020 +00F0 +1F00 +1000 +1000 +1FF8 +1080 +1080 +1080 +1080 +FFFE +0000 +0800 +1000 +2000 +4000 +ENDCHAR +STARTCHAR uni4E53 +ENCODING 20051 +BBX 15 16 0 -2 +BITMAP +0020 +00F0 +1F00 +1000 +1000 +1FF8 +1080 +1080 +1080 +1080 +FFFE +0000 +0040 +0020 +0010 +0008 +ENDCHAR +STARTCHAR uni4E54 +ENCODING 20052 +BBX 15 16 0 -2 +BITMAP +0010 +00F8 +3F00 +0100 +0200 +7FFC +0440 +0820 +3018 +C826 +0820 +0820 +0820 +1020 +1020 +2020 +ENDCHAR +STARTCHAR uni4E55 +ENCODING 20053 +BBX 15 15 1 -1 +BITMAP +00F8 +7F80 +4080 +7FFE +4080 +4080 +7FFE +4080 +4080 +5FFC +9084 +9084 +1084 +109C +0080 +ENDCHAR +STARTCHAR uni4E56 +ENCODING 20054 +BBX 15 15 1 -1 +BITMAP +0038 +3FC0 +0100 +0100 +FFFE +0100 +0920 +0926 +F938 +0920 +0922 +3922 +C91E +0100 +0100 +ENDCHAR +STARTCHAR uni4E57 +ENCODING 20055 +BBX 15 15 1 -1 +BITMAP +0038 +3FC0 +0100 +7FFC +1110 +1110 +FFFE +1110 +1110 +7FFC +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni4E58 +ENCODING 20056 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +0100 +FFFE +0100 +0926 +F938 +0922 +3922 +CB9E +0540 +0930 +310C +C102 +0100 +ENDCHAR +STARTCHAR uni4E59 +ENCODING 20057 +BBX 12 14 3 -1 +BITMAP +FFE0 +0180 +0200 +0400 +0800 +1000 +2000 +4000 +4000 +8000 +8010 +8010 +4010 +3FF0 +ENDCHAR +STARTCHAR uni4E5A +ENCODING 20058 +BBX 11 15 3 -1 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8020 +4020 +3FE0 +ENDCHAR +STARTCHAR uni4E5B +ENCODING 20059 +BBX 14 4 0 8 +BITMAP +FFFC +0004 +0008 +0010 +ENDCHAR +STARTCHAR uni4E5C +ENCODING 20060 +BBX 15 13 0 -1 +BITMAP +1000 +1030 +10D0 +1710 +3810 +D010 +1010 +1050 +1020 +1002 +1002 +1002 +0FFE +ENDCHAR +STARTCHAR uni4E5D +ENCODING 20061 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +0800 +FFC0 +0840 +0840 +0840 +0840 +0840 +0840 +1040 +1040 +2042 +4042 +803E +ENDCHAR +STARTCHAR uni4E5E +ENCODING 20062 +BBX 15 15 1 -1 +BITMAP +2000 +2000 +3FFE +4000 +4000 +9FF0 +00C0 +0300 +0C00 +1000 +2000 +4004 +4004 +2004 +1FFC +ENDCHAR +STARTCHAR uni4E5F +ENCODING 20063 +BBX 15 15 1 -1 +BITMAP +0100 +2100 +2100 +2138 +21C8 +2708 +3908 +E108 +2108 +2108 +2138 +2100 +2002 +1002 +0FFE +ENDCHAR +STARTCHAR uni4E60 +ENCODING 20064 +BBX 12 15 1 -2 +BITMAP +FFF0 +0010 +0010 +1010 +0810 +0410 +0410 +00D0 +0310 +1C10 +E010 +4010 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni4E61 +ENCODING 20065 +BBX 13 16 0 -2 +BITMAP +0200 +0200 +0420 +0820 +1040 +3F80 +0108 +0208 +0410 +1FE0 +0040 +0080 +0100 +0600 +1800 +E000 +ENDCHAR +STARTCHAR uni4E62 +ENCODING 20066 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +FE42 +0042 +003E +ENDCHAR +STARTCHAR uni4E63 +ENCODING 20067 +BBX 15 15 0 -1 +BITMAP +0840 +0840 +1040 +1040 +2240 +4240 +FC40 +0440 +0840 +1040 +2440 +4242 +FE42 +4242 +003E +ENDCHAR +STARTCHAR uni4E64 +ENCODING 20068 +BBX 15 15 0 -2 +BITMAP +FFFE +0200 +0240 +0220 +0210 +0208 +0200 +0000 +7FF0 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni4E65 +ENCODING 20069 +BBX 13 16 1 -2 +BITMAP +0010 +03F8 +FC00 +0020 +2020 +1040 +0880 +0100 +0000 +FFE0 +00C0 +0300 +0C00 +3008 +4008 +3FF8 +ENDCHAR +STARTCHAR uni4E66 +ENCODING 20070 +BBX 14 16 0 -2 +BITMAP +0220 +0210 +0208 +3FE0 +0220 +0220 +0220 +0220 +FFFC +0204 +0204 +0204 +0204 +0228 +0210 +0200 +ENDCHAR +STARTCHAR uni4E67 +ENCODING 20071 +BBX 13 16 1 -2 +BITMAP +0080 +0880 +0480 +2480 +1080 +13F8 +FC80 +0080 +0080 +0000 +FFE0 +00C0 +0700 +3808 +4008 +3FF8 +ENDCHAR +STARTCHAR uni4E68 +ENCODING 20072 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1020 +2220 +4120 +FFA0 +00A0 +0020 +7F20 +4120 +4120 +4122 +4122 +4122 +7F1E +4100 +ENDCHAR +STARTCHAR uni4E69 +ENCODING 20073 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +1F40 +1040 +1040 +1040 +1040 +FE40 +8240 +8240 +8240 +8242 +8242 +FE3E +ENDCHAR +STARTCHAR uni4E6A +ENCODING 20074 +BBX 15 14 0 -1 +BITMAP +FDFC +0524 +0524 +0924 +0924 +11FC +1124 +2124 +2124 +4124 +41FC +4002 +4002 +3FFE +ENDCHAR +STARTCHAR uni4E6B +ENCODING 20075 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +7E7C +1244 +1244 +1244 +227C +4A44 +8400 +7FF0 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni4E6C +ENCODING 20076 +BBX 13 15 1 -2 +BITMAP +7FF8 +4000 +7FF0 +4010 +7FF0 +4000 +7FF8 +0000 +FFE0 +00C0 +0300 +0C00 +3008 +4008 +3FF8 +ENDCHAR +STARTCHAR uni4E6D +ENCODING 20077 +BBX 15 15 0 -2 +BITMAP +FFFE +0400 +0800 +1FF0 +2810 +C810 +0FF0 +0000 +7FF0 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni4E6E +ENCODING 20078 +BBX 13 16 1 -2 +BITMAP +1800 +E1F8 +8108 +8908 +B908 +C928 +8910 +1100 +2100 +FFE0 +00C0 +0300 +0C00 +3008 +4008 +3FF8 +ENDCHAR +STARTCHAR uni4E6F +ENCODING 20079 +BBX 15 16 0 -2 +BITMAP +00F8 +7F00 +1110 +0920 +FFFE +0100 +0100 +0500 +0200 +7FF0 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni4E70 +ENCODING 20080 +BBX 15 15 0 -2 +BITMAP +7FFC +0004 +0888 +0480 +2480 +1080 +1080 +0100 +FFFE +0100 +02C0 +0420 +0810 +3008 +C004 +ENDCHAR +STARTCHAR uni4E71 +ENCODING 20081 +BBX 15 15 1 -1 +BITMAP +0720 +7820 +0820 +0820 +0820 +FFA0 +0820 +0820 +0820 +7F20 +4120 +4120 +4122 +4122 +7F1E +ENDCHAR +STARTCHAR uni4E72 +ENCODING 20082 +BBX 15 16 0 -2 +BITMAP +4080 +2080 +09FC +1204 +2448 +E040 +20A0 +2318 +2C06 +0000 +7FF0 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni4E73 +ENCODING 20083 +BBX 15 15 1 -1 +BITMAP +01A0 +0E20 +F8A0 +48A0 +2520 +0020 +7F20 +0220 +0420 +0FA0 +F820 +0820 +0822 +0822 +381E +ENDCHAR +STARTCHAR uni4E74 +ENCODING 20084 +BBX 14 16 1 -2 +BITMAP +1018 +11E0 +FD00 +1100 +1DFC +F110 +1110 +5210 +2410 +0000 +FFE0 +00C0 +0700 +3808 +4008 +3FF8 +ENDCHAR +STARTCHAR uni4E75 +ENCODING 20085 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +7F20 +0020 +2220 +1420 +FFA0 +0820 +0820 +0820 +7F20 +0822 +0822 +0822 +081E +0800 +ENDCHAR +STARTCHAR uni4E76 +ENCODING 20086 +BBX 13 16 1 -2 +BITMAP +0240 +0220 +FFF8 +0200 +7FF0 +4210 +7FF0 +4210 +7FF0 +4210 +0000 +7FE0 +0380 +3C08 +4008 +3FF8 +ENDCHAR +STARTCHAR uni4E77 +ENCODING 20087 +BBX 14 16 1 -2 +BITMAP +2040 +1040 +8150 +4948 +1244 +2450 +E060 +2180 +2E00 +0000 +FFE0 +00C0 +0700 +3808 +4008 +3FF8 +ENDCHAR +STARTCHAR uni4E78 +ENCODING 20088 +BBX 15 15 0 -1 +BITMAP +0800 +087C +2844 +2E64 +3A54 +EAFE +2A44 +2AA4 +2A94 +2EFE +2804 +282A +2012 +2002 +1FFE +ENDCHAR +STARTCHAR uni4E79 +ENCODING 20089 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFA0 +0820 +7F20 +4120 +7F20 +4120 +7F20 +4920 +0820 +FFA2 +0822 +0822 +081E +0800 +ENDCHAR +STARTCHAR uni4E7A +ENCODING 20090 +BBX 14 16 0 -2 +BITMAP +0618 +38E0 +2080 +3EFC +2290 +3E90 +2090 +4110 +8000 +7FF0 +0060 +0180 +0600 +1804 +2004 +1FFC +ENDCHAR +STARTCHAR uni4E7B +ENCODING 20091 +BBX 15 16 0 -2 +BITMAP +1010 +0810 +FF28 +2044 +3E82 +2210 +2208 +4220 +4A10 +8408 +7FF0 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni4E7C +ENCODING 20092 +BBX 14 16 0 -2 +BITMAP +2080 +1040 +87FC +4040 +1040 +23F8 +E040 +2040 +27FC +2000 +7FF0 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni4E7D +ENCODING 20093 +BBX 14 16 0 -2 +BITMAP +0108 +1FD0 +0120 +7FFC +0200 +0FF0 +3810 +CFF0 +0810 +0FF0 +0000 +3FF0 +01C0 +1E04 +2004 +1FFC +ENDCHAR +STARTCHAR uni4E7E +ENCODING 20094 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FE40 +10FC +7D00 +4600 +7CF8 +4410 +4420 +7C40 +1080 +FE80 +1082 +1082 +107E +ENDCHAR +STARTCHAR uni4E7F +ENCODING 20095 +BBX 15 16 0 -2 +BITMAP +0F20 +F020 +1120 +8920 +4220 +1020 +2220 +7C20 +0820 +1120 +FFA0 +08A2 +4A22 +8922 +281E +1000 +ENDCHAR +STARTCHAR uni4E80 +ENCODING 20096 +BBX 14 15 2 -1 +BITMAP +1FC0 +2080 +7FE0 +A220 +3FE0 +2220 +3FE0 +0200 +7FF0 +4210 +7FF0 +4210 +7FF4 +0204 +01FC +ENDCHAR +STARTCHAR uni4E81 +ENCODING 20097 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFA0 +087E +7F40 +4180 +7F7C +4104 +7F08 +0010 +7F20 +0840 +FFC2 +0842 +083E +0800 +ENDCHAR +STARTCHAR uni4E82 +ENCODING 20098 +BBX 15 15 1 -1 +BITMAP +0640 +7940 +88C0 +FF40 +2240 +1440 +FF40 +9140 +A540 +FB40 +8140 +FD40 +A542 +9942 +A53E +ENDCHAR +STARTCHAR uni4E83 +ENCODING 20099 +BBX 15 16 0 -2 +BITMAP +0820 +4920 +2A20 +FFA0 +2A20 +4920 +88A0 +4120 +4120 +77A0 +9120 +5522 +27A2 +4122 +811E +0100 +ENDCHAR +STARTCHAR uni4E84 +ENCODING 20100 +BBX 15 16 0 -2 +BITMAP +0820 +FFA0 +0820 +7F20 +0020 +FFA0 +80A0 +7F20 +0020 +7F20 +4120 +7F22 +4122 +2222 +0F9E +F000 +ENDCHAR +STARTCHAR uni4E85 +ENCODING 20101 +BBX 3 15 5 -1 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +E0 +ENDCHAR +STARTCHAR uni4E86 +ENCODING 20102 +BBX 13 14 2 -1 +BITMAP +FFF8 +0060 +0180 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0E00 +ENDCHAR +STARTCHAR uni4E87 +ENCODING 20103 +BBX 13 16 1 -2 +BITMAP +1000 +1000 +1000 +1FF8 +2008 +2210 +4220 +8200 +0200 +0200 +0200 +0200 +0200 +0200 +0A00 +0400 +ENDCHAR +STARTCHAR uni4E88 +ENCODING 20104 +BBX 15 14 1 -1 +BITMAP +1FF8 +0010 +0420 +0240 +0180 +FFFE +0082 +0084 +0088 +0080 +0080 +0080 +0080 +0380 +ENDCHAR +STARTCHAR uni4E89 +ENCODING 20105 +BBX 15 15 1 -1 +BITMAP +0400 +0FE0 +1040 +6080 +3FF8 +0108 +0108 +FFFE +0108 +0108 +3FF8 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni4E8A +ENCODING 20106 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +1110 +0920 +3FF8 +0108 +0108 +FFFE +0108 +0108 +3FF8 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni4E8B +ENCODING 20107 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +2108 +3FF8 +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +0700 +ENDCHAR +STARTCHAR uni4E8C +ENCODING 20108 +BBX 15 10 1 1 +BITMAP +3FF8 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uni4E8D +ENCODING 20109 +BBX 15 14 1 -1 +BITMAP +3FF8 +0000 +0000 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni4E8E +ENCODING 20110 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni4E8F +ENCODING 20111 +BBX 15 15 0 -2 +BITMAP +3FF8 +0000 +0000 +0000 +FFFE +0400 +0400 +0800 +0FF0 +0010 +0010 +0010 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni4E90 +ENCODING 20112 +BBX 15 15 0 -2 +BITMAP +3FF8 +0200 +0200 +0200 +FFFE +0400 +0400 +0800 +0FF0 +0010 +0010 +0010 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni4E91 +ENCODING 20113 +BBX 14 14 1 -1 +BITMAP +3FF0 +0000 +0000 +0000 +0000 +FFFC +0400 +0400 +0440 +0420 +0810 +0870 +0F88 +7808 +ENDCHAR +STARTCHAR uni4E92 +ENCODING 20114 +BBX 14 14 1 -1 +BITMAP +7FF8 +0800 +0800 +0800 +1FE0 +1020 +1020 +2020 +2020 +3FC0 +0040 +0040 +0040 +FFFC +ENDCHAR +STARTCHAR uni4E93 +ENCODING 20115 +BBX 15 15 0 -2 +BITMAP +3FF8 +0000 +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +1020 +1020 +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni4E94 +ENCODING 20116 +BBX 14 14 1 -1 +BITMAP +7FF8 +0400 +0400 +0400 +0400 +7FE0 +0820 +0820 +0820 +1020 +1020 +1020 +1020 +FFFC +ENDCHAR +STARTCHAR uni4E95 +ENCODING 20117 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +0840 +0840 +7FFC +0840 +0840 +0840 +0840 +FFFC +0840 +0840 +1040 +2040 +C040 +ENDCHAR +STARTCHAR uni4E96 +ENCODING 20118 +BBX 15 13 0 -1 +BITMAP +3FF8 +0000 +0000 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uni4E97 +ENCODING 20119 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +2108 +2108 +2108 +3FF8 +0000 +0000 +0000 +3FF8 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uni4E98 +ENCODING 20120 +BBX 15 14 1 -1 +BITMAP +7FFC +0000 +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1010 +1FF0 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uni4E99 +ENCODING 20121 +BBX 15 14 1 -1 +BITMAP +7FFC +0400 +0400 +07F0 +0410 +0910 +08D0 +0810 +0A10 +11A0 +1020 +0020 +0020 +FFFE +ENDCHAR +STARTCHAR uni4E9A +ENCODING 20122 +BBX 15 14 0 -1 +BITMAP +7FFC +0440 +0440 +0440 +0440 +4444 +2444 +2448 +1448 +1450 +0440 +0440 +0440 +FFFE +ENDCHAR +STARTCHAR uni4E9B +ENCODING 20123 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +4844 +4F78 +4840 +4840 +4842 +4F42 +783E +C000 +0000 +3FF8 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uni4E9C +ENCODING 20124 +BBX 15 14 1 -1 +BITMAP +7FFC +0440 +0440 +0440 +3FF8 +2448 +2448 +2448 +2448 +3FF8 +0440 +0440 +0440 +FFFE +ENDCHAR +STARTCHAR uni4E9D +ENCODING 20125 +BBX 15 15 1 -1 +BITMAP +0200 +0420 +08F0 +3F08 +0000 +2020 +2424 +4C4C +F2F2 +0000 +0000 +1FF0 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uni4E9E +ENCODING 20126 +BBX 15 14 1 -1 +BITMAP +7FFC +0440 +0440 +0440 +3C78 +2008 +2008 +2008 +2008 +3C78 +0440 +0440 +0440 +FFFE +ENDCHAR +STARTCHAR uni4E9F +ENCODING 20127 +BBX 15 14 1 -1 +BITMAP +7FFC +0400 +0800 +0F00 +01FC +7944 +4944 +4928 +4910 +7928 +0244 +0E82 +0000 +FFFE +ENDCHAR +STARTCHAR uni4EA0 +ENCODING 20128 +BBX 15 5 1 5 +BITMAP +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni4EA1 +ENCODING 20129 +BBX 15 14 1 0 +BITMAP +0100 +0100 +0100 +FFFE +1000 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +0FF8 +ENDCHAR +STARTCHAR uni4EA2 +ENCODING 20130 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +FFF8 +0000 +0000 +0FC0 +0840 +0840 +0840 +0840 +0840 +1040 +1044 +2044 +C03C +ENDCHAR +STARTCHAR uni4EA3 +ENCODING 20131 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +0100 +FFFE +0420 +0420 +0420 +0420 +0420 +0420 +0420 +0820 +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni4EA4 +ENCODING 20132 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +FFF8 +0880 +3060 +C018 +1040 +1040 +0880 +0500 +0200 +0500 +18C0 +E038 +ENDCHAR +STARTCHAR uni4EA5 +ENCODING 20133 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0200 +FFFC +0200 +0440 +2880 +1110 +0A20 +0440 +18C0 +6120 +0610 +1808 +E004 +ENDCHAR +STARTCHAR uni4EA6 +ENCODING 20134 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +FFFE +0440 +0440 +2448 +2448 +4444 +4444 +8442 +0840 +0840 +1040 +61C0 +ENDCHAR +STARTCHAR uni4EA7 +ENCODING 20135 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +0000 +0820 +0420 +0440 +3FFE +2000 +2000 +2000 +2000 +2000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni4EA8 +ENCODING 20136 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +0000 +3FE0 +2020 +3FE0 +0000 +7FF0 +00C0 +0300 +0200 +0200 +0200 +0E00 +ENDCHAR +STARTCHAR uni4EA9 +ENCODING 20137 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +0100 +FFFE +0000 +0000 +3FF8 +2108 +2108 +2108 +3FF8 +2108 +2108 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni4EAA +ENCODING 20138 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0440 +1450 +2448 +4844 +0940 +1080 +7FE0 +0020 +0020 +0010 +0010 +0008 +0006 +ENDCHAR +STARTCHAR uni4EAB +ENCODING 20139 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +0000 +3FE0 +2020 +3FE0 +0000 +7FF0 +00C0 +0300 +FFF8 +0200 +0200 +0E00 +ENDCHAR +STARTCHAR uni4EAC +ENCODING 20140 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +0000 +3FE0 +2020 +2020 +2020 +3FE0 +0200 +0200 +2220 +4210 +8208 +0E00 +ENDCHAR +STARTCHAR uni4EAD +ENCODING 20141 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0000 +1FF0 +1010 +1FF0 +0000 +FFFE +8002 +9FF2 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni4EAE +ENCODING 20142 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0000 +0FE0 +0820 +0FE0 +0000 +7FFC +4004 +4444 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni4EAF +ENCODING 20143 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0000 +1FF0 +1010 +1FF0 +0000 +3FF8 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni4EB0 +ENCODING 20144 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0100 +1110 +2108 +C106 +0700 +ENDCHAR +STARTCHAR uni4EB1 +ENCODING 20145 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0800 +0800 +13F8 +1208 +3208 +53F8 +9208 +1208 +13F8 +1208 +1000 +17FC +1000 +ENDCHAR +STARTCHAR uni4EB2 +ENCODING 20146 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +3FF8 +0000 +0820 +0440 +FFFE +0100 +0100 +7FFC +0100 +0920 +1110 +2108 +4504 +0200 +ENDCHAR +STARTCHAR uni4EB3 +ENCODING 20147 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0000 +1FF0 +1010 +1FF0 +0000 +7FFC +4004 +40E4 +1F00 +01FC +FF00 +0102 +00FE +ENDCHAR +STARTCHAR uni4EB4 +ENCODING 20148 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0000 +1FF0 +1010 +1FF0 +0000 +7FFE +4102 +9FF4 +0100 +7FFC +0200 +3FE0 +0822 +701E +ENDCHAR +STARTCHAR uni4EB5 +ENCODING 20149 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0000 +0840 +7DF8 +0848 +0CC8 +784A +08AA +2906 +1302 +0488 +0C50 +3530 +C60E +0400 +ENDCHAR +STARTCHAR uni4EB6 +ENCODING 20150 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0000 +3FF8 +2008 +27C8 +2448 +27C8 +2008 +3FF8 +1010 +1FF0 +1010 +FFFE +ENDCHAR +STARTCHAR uni4EB7 +ENCODING 20151 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFC +0410 +0220 +3FFE +2240 +2FF8 +2248 +3FFE +2248 +2FF8 +2660 +4A50 +524C +8240 +ENDCHAR +STARTCHAR uni4EB8 +ENCODING 20152 +BBX 15 16 0 -2 +BITMAP +2088 +1048 +FC50 +01FC +7D24 +4524 +7DFC +0124 +7D24 +09FC +1020 +1C20 +F3FE +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni4EB9 +ENCODING 20153 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0000 +77DC +4444 +775C +4544 +FFFE +9012 +1FF0 +1010 +1FF0 +1010 +FFFE +ENDCHAR +STARTCHAR uni4EBA +ENCODING 20154 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0500 +0500 +0880 +0880 +1040 +2020 +4010 +8008 +ENDCHAR +STARTCHAR uni4EBB +ENCODING 20155 +BBX 9 15 3 -1 +BITMAP +0080 +0080 +0100 +0200 +0400 +0C00 +3400 +C400 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni4EBC +ENCODING 20156 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +0100 +0100 +0280 +0280 +0440 +0440 +0820 +1010 +2008 +C006 +0000 +FFFE +ENDCHAR +STARTCHAR uni4EBD +ENCODING 20157 +BBX 15 14 0 0 +BITMAP +0100 +0100 +0100 +0280 +0280 +0440 +0820 +1010 +2008 +C006 +0200 +0100 +0080 +0080 +ENDCHAR +STARTCHAR uni4EBE +ENCODING 20158 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +8200 +8200 +8500 +8500 +8880 +8880 +9040 +A020 +C018 +8000 +8000 +FFF8 +ENDCHAR +STARTCHAR uni4EBF +ENCODING 20159 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0BFC +1008 +1010 +3020 +3040 +5080 +9080 +1100 +1100 +1202 +1202 +1202 +11FE +1000 +ENDCHAR +STARTCHAR uni4EC0 +ENCODING 20160 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +2040 +2040 +6FFE +A040 +2040 +2040 +2040 +2040 +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4EC1 +ENCODING 20161 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +1000 +23F8 +2000 +6000 +A000 +2000 +2000 +2000 +2000 +2000 +2FFE +2000 +2000 +ENDCHAR +STARTCHAR uni4EC2 +ENCODING 20162 +BBX 14 15 1 -1 +BITMAP +1080 +1080 +1080 +27FC +2084 +6084 +A084 +2084 +2104 +2104 +2104 +2204 +2208 +2408 +2870 +ENDCHAR +STARTCHAR uni4EC3 +ENCODING 20163 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +17FE +2020 +2020 +6020 +A020 +2020 +2020 +2020 +2020 +2020 +2020 +2020 +2060 +ENDCHAR +STARTCHAR uni4EC4 +ENCODING 20164 +BBX 15 14 1 -1 +BITMAP +7FFE +4000 +4080 +4080 +4080 +4080 +4080 +4140 +4140 +4220 +8220 +8410 +8808 +3006 +ENDCHAR +STARTCHAR uni4EC5 +ENCODING 20165 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0904 +1104 +1104 +3088 +3088 +5088 +9050 +1050 +1020 +1020 +1050 +1088 +1104 +1602 +ENDCHAR +STARTCHAR uni4EC6 +ENCODING 20166 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +0840 +1040 +1040 +3060 +5058 +9046 +1040 +1040 +1040 +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni4EC7 +ENCODING 20167 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +1100 +2FF0 +2110 +6110 +A110 +2110 +2110 +2110 +2210 +2210 +2412 +2812 +300E +ENDCHAR +STARTCHAR uni4EC8 +ENCODING 20168 +BBX 15 15 1 -1 +BITMAP +1030 +1010 +1110 +2110 +2110 +6110 +A108 +2108 +2108 +2208 +2208 +2204 +2404 +2404 +2802 +ENDCHAR +STARTCHAR uni4EC9 +ENCODING 20169 +BBX 15 16 0 -2 +BITMAP +0800 +09F0 +0910 +1110 +1110 +3110 +3110 +5110 +9110 +1110 +1110 +1112 +1112 +1212 +120E +1400 +ENDCHAR +STARTCHAR uni4ECA +ENCODING 20170 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0280 +0440 +0820 +37D8 +C006 +0000 +1FF0 +0010 +0010 +0020 +0020 +0040 +0080 +ENDCHAR +STARTCHAR uni4ECB +ENCODING 20171 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0440 +0820 +1830 +2828 +C826 +0820 +0820 +0820 +1020 +1020 +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni4ECC +ENCODING 20172 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0280 +0240 +0420 +0810 +1108 +6104 +0100 +0280 +0280 +0440 +0820 +1010 +2008 +C006 +ENDCHAR +STARTCHAR uni4ECD +ENCODING 20173 +BBX 15 15 1 -1 +BITMAP +1000 +17F0 +1110 +2110 +2110 +6110 +A11E +2102 +2102 +2102 +2102 +2202 +2204 +2404 +2838 +ENDCHAR +STARTCHAR uni4ECE +ENCODING 20174 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +1020 +1020 +1020 +1020 +2820 +2850 +2850 +4450 +4488 +8288 +8104 +0202 +ENDCHAR +STARTCHAR uni4ECF +ENCODING 20175 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +2080 +2080 +6080 +A080 +2090 +2088 +2108 +2104 +2104 +213C +23C2 +2C02 +ENDCHAR +STARTCHAR uni4ED0 +ENCODING 20176 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0280 +0440 +0820 +3118 +C106 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4ED1 +ENCODING 20177 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0280 +0440 +0820 +1010 +2008 +C806 +0830 +08C0 +0F00 +0808 +0808 +0808 +07F8 +ENDCHAR +STARTCHAR uni4ED2 +ENCODING 20178 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0280 +0440 +0820 +1010 +2008 +C606 +0180 +0040 +0000 +0C00 +0300 +00C0 +0020 +ENDCHAR +STARTCHAR uni4ED3 +ENCODING 20179 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0280 +0440 +0820 +3018 +C006 +0FE0 +0820 +0820 +08A0 +0844 +0804 +0804 +07FC +ENDCHAR +STARTCHAR uni4ED4 +ENCODING 20180 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1018 +2020 +2040 +6040 +A040 +2FFE +2040 +2040 +2040 +2040 +2040 +2040 +21C0 +ENDCHAR +STARTCHAR uni4ED5 +ENCODING 20181 +BBX 15 15 1 -1 +BITMAP +1000 +1040 +1040 +2040 +2040 +6FFE +A040 +2040 +2040 +2040 +2040 +2040 +2040 +27FC +2000 +ENDCHAR +STARTCHAR uni4ED6 +ENCODING 20182 +BBX 15 15 1 -1 +BITMAP +1040 +1240 +1240 +2240 +2278 +63C8 +AE48 +2248 +2248 +2258 +2240 +2240 +2202 +2202 +21FE +ENDCHAR +STARTCHAR uni4ED7 +ENCODING 20183 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +2FFC +2020 +6220 +A220 +2220 +2140 +2140 +2080 +20C0 +2120 +2218 +2C06 +ENDCHAR +STARTCHAR uni4ED8 +ENCODING 20184 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +1010 +2FFE +2010 +6010 +A410 +2210 +2110 +2010 +2010 +2010 +2010 +2010 +2070 +ENDCHAR +STARTCHAR uni4ED9 +ENCODING 20185 +BBX 14 15 1 -1 +BITMAP +1040 +1040 +1040 +2040 +2444 +6444 +A444 +2444 +2444 +2444 +2444 +2444 +2444 +2444 +27FC +ENDCHAR +STARTCHAR uni4EDA +ENCODING 20186 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0280 +0440 +0820 +3118 +C106 +0100 +0100 +4104 +4104 +4104 +4104 +4104 +7FFC +ENDCHAR +STARTCHAR uni4EDB +ENCODING 20187 +BBX 15 16 0 -2 +BITMAP +0810 +0878 +0BC0 +1040 +1040 +3040 +3040 +507E +97C0 +1040 +1040 +1042 +1042 +1042 +103E +1000 +ENDCHAR +STARTCHAR uni4EDC +ENCODING 20188 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0800 +13FE +1020 +3020 +3020 +5020 +9020 +1020 +1020 +1020 +1020 +17FE +1000 +1000 +ENDCHAR +STARTCHAR uni4EDD +ENCODING 20189 +BBX 13 14 2 0 +BITMAP +0200 +0200 +0500 +0880 +1040 +2020 +C018 +0000 +3FE0 +0200 +0200 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni4EDE +ENCODING 20190 +BBX 14 15 1 -1 +BITMAP +1000 +17FC +1084 +2084 +2084 +6084 +A484 +2484 +2904 +2104 +2104 +2204 +2208 +2408 +2870 +ENDCHAR +STARTCHAR uni4EDF +ENCODING 20191 +BBX 15 15 1 -1 +BITMAP +1038 +17C0 +1040 +2040 +2040 +6040 +AFFE +2040 +2040 +2040 +2040 +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4EE0 +ENCODING 20192 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0840 +1040 +1040 +3040 +3040 +5FFE +9040 +1040 +1040 +1040 +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni4EE1 +ENCODING 20193 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +13FE +2200 +2400 +69F8 +A030 +2040 +2080 +2100 +2200 +2400 +2402 +2202 +21FE +ENDCHAR +STARTCHAR uni4EE2 +ENCODING 20194 +BBX 14 16 0 -2 +BITMAP +0880 +0880 +0900 +11FC +1204 +3204 +3404 +5904 +9084 +1044 +1044 +1004 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni4EE3 +ENCODING 20195 +BBX 15 15 1 -1 +BITMAP +1050 +1048 +1044 +2040 +207E +6FC0 +A040 +2040 +2020 +2020 +2020 +2010 +2012 +200A +2004 +ENDCHAR +STARTCHAR uni4EE4 +ENCODING 20196 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0440 +0820 +3018 +CFE6 +0000 +0000 +7FF8 +0108 +0108 +0108 +0138 +0100 +0100 +ENDCHAR +STARTCHAR uni4EE5 +ENCODING 20197 +BBX 15 14 1 -1 +BITMAP +2010 +2010 +2210 +2110 +2090 +2010 +2010 +2010 +2020 +2020 +2C50 +3088 +C104 +0602 +ENDCHAR +STARTCHAR uni4EE6 +ENCODING 20198 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +1020 +1020 +3128 +3124 +5124 +9222 +1222 +1222 +1422 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni4EE7 +ENCODING 20199 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +0200 +03F8 +0200 +0200 +0200 +FFFE +0100 +0100 +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni4EE8 +ENCODING 20200 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0BFC +1000 +1000 +3000 +3000 +51F8 +9000 +1000 +1000 +1000 +1000 +17FE +1000 +1000 +ENDCHAR +STARTCHAR uni4EE9 +ENCODING 20201 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +1040 +1040 +3040 +307C +5040 +9040 +1040 +1040 +1040 +1040 +1040 +17FE +1000 +ENDCHAR +STARTCHAR uni4EEA +ENCODING 20202 +BBX 15 16 0 -2 +BITMAP +0880 +0848 +0A48 +1208 +1208 +3110 +3110 +5110 +90A0 +10A0 +1040 +1040 +10A0 +1110 +1208 +1406 +ENDCHAR +STARTCHAR uni4EEB +ENCODING 20203 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +2100 +2120 +6220 +A420 +2020 +2040 +2040 +2048 +2084 +2084 +213E +2FC2 +ENDCHAR +STARTCHAR uni4EEC +ENCODING 20204 +BBX 14 16 0 -2 +BITMAP +0900 +0880 +08BC +1204 +1204 +3204 +3204 +5204 +9204 +1204 +1204 +1204 +1204 +1204 +1214 +1208 +ENDCHAR +STARTCHAR uni4EED +ENCODING 20205 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1084 +2084 +2084 +6084 +A684 +2184 +2164 +211C +2106 +2204 +2208 +2408 +2870 +ENDCHAR +STARTCHAR uni4EEE +ENCODING 20206 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1400 +2400 +2400 +67F8 +A508 +2508 +2488 +2490 +2850 +2820 +3050 +2088 +2306 +ENDCHAR +STARTCHAR uni4EEF +ENCODING 20207 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +1148 +1144 +3242 +3242 +5448 +9048 +1048 +1010 +1010 +1020 +1040 +1180 +1600 +ENDCHAR +STARTCHAR uni4EF0 +ENCODING 20208 +BBX 15 15 1 -1 +BITMAP +1000 +1100 +223E +2422 +6422 +A422 +2422 +2422 +2422 +2422 +25A2 +262E +3820 +2020 +2020 +ENDCHAR +STARTCHAR uni4EF1 +ENCODING 20209 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +10A0 +2110 +2208 +65F4 +A802 +2000 +23F8 +2008 +2008 +2010 +2010 +2020 +2040 +ENDCHAR +STARTCHAR uni4EF2 +ENCODING 20210 +BBX 14 15 1 -1 +BITMAP +1040 +1040 +1040 +27FC +2444 +6444 +A444 +2444 +2444 +27FC +2040 +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4EF3 +ENCODING 20211 +BBX 15 16 0 -2 +BITMAP +0820 +0A20 +0A20 +1222 +1222 +3224 +33A8 +5230 +9220 +1220 +1220 +1222 +12A2 +1322 +121E +1000 +ENDCHAR +STARTCHAR uni4EF4 +ENCODING 20212 +BBX 14 16 0 -2 +BITMAP +0800 +09FC +0904 +1104 +1104 +31FC +3104 +5104 +9104 +11FC +1104 +1104 +1204 +1204 +1414 +1808 +ENDCHAR +STARTCHAR uni4EF5 +ENCODING 20213 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +1100 +23FC +2240 +6440 +A040 +2040 +27FE +2040 +2040 +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4EF6 +ENCODING 20214 +BBX 15 15 1 -1 +BITMAP +1040 +1240 +1240 +27FC +2440 +6840 +A040 +2040 +2FFE +2040 +2040 +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4EF7 +ENCODING 20215 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +10A0 +2110 +2318 +6514 +A912 +2110 +2110 +2110 +2110 +2210 +2210 +2410 +2810 +ENDCHAR +STARTCHAR uni4EF8 +ENCODING 20216 +BBX 15 16 0 -2 +BITMAP +0810 +0878 +0FC0 +1040 +1040 +3040 +3040 +57FE +9040 +10A0 +10A0 +1110 +1110 +1208 +1404 +1802 +ENDCHAR +STARTCHAR uni4EF9 +ENCODING 20217 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +17FC +1040 +3040 +3040 +53FC +9040 +1040 +1040 +1FFE +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni4EFA +ENCODING 20218 +BBX 15 15 0 -1 +BITMAP +0100 +0280 +0440 +0820 +3018 +C006 +1FF0 +1000 +1000 +1000 +1FF0 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uni4EFB +ENCODING 20219 +BBX 15 15 1 -1 +BITMAP +1038 +17C0 +1040 +2040 +2040 +6040 +A040 +2FFE +2040 +2040 +2040 +2040 +2040 +2040 +27FC +ENDCHAR +STARTCHAR uni4EFC +ENCODING 20220 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0BFE +1020 +1020 +3020 +3020 +5020 +91FC +1020 +1020 +1020 +1020 +1020 +17FE +1000 +ENDCHAR +STARTCHAR uni4EFD +ENCODING 20221 +BBX 15 15 1 -1 +BITMAP +1070 +1110 +1108 +2208 +2404 +6802 +A3F8 +2088 +2088 +2088 +2108 +2108 +2210 +2410 +28E0 +ENDCHAR +STARTCHAR uni4EFE +ENCODING 20222 +BBX 15 16 0 -2 +BITMAP +0800 +0FFE +0880 +1080 +1080 +30F8 +3108 +5108 +9108 +1208 +13F8 +1010 +1010 +1010 +17FE +1000 +ENDCHAR +STARTCHAR uni4EFF +ENCODING 20223 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +27FE +2080 +6080 +A080 +20FC +2104 +2104 +2104 +2204 +2208 +2408 +2870 +ENDCHAR +STARTCHAR uni4F00 +ENCODING 20224 +BBX 15 15 1 -1 +BITMAP +1030 +1110 +1108 +2108 +2244 +6244 +A442 +2040 +2040 +2090 +2088 +2084 +210C +2132 +2FC2 +ENDCHAR +STARTCHAR uni4F01 +ENCODING 20225 +BBX 14 14 1 0 +BITMAP +0100 +0280 +0440 +1830 +600C +0100 +0100 +1100 +11F0 +1100 +1100 +1100 +1100 +FFFC +ENDCHAR +STARTCHAR uni4F02 +ENCODING 20226 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +2FFE +2040 +6040 +67FC +A444 +2444 +2444 +2444 +2454 +2448 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4F03 +ENCODING 20227 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1008 +2110 +20A0 +6040 +A7FE +2042 +2044 +2048 +2040 +2040 +2040 +2040 +21C0 +ENDCHAR +STARTCHAR uni4F04 +ENCODING 20228 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0844 +1044 +1044 +33FC +3240 +5240 +9440 +17FE +1042 +1042 +104A +1044 +1040 +1040 +ENDCHAR +STARTCHAR uni4F05 +ENCODING 20229 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +17FC +1040 +3248 +3248 +5248 +9248 +13F8 +1048 +1040 +1042 +1042 +103E +1000 +ENDCHAR +STARTCHAR uni4F06 +ENCODING 20230 +BBX 14 16 0 -2 +BITMAP +0900 +0900 +0900 +11FC +12A4 +34A4 +30A4 +5124 +9124 +1244 +1444 +1084 +1104 +1204 +1428 +1010 +ENDCHAR +STARTCHAR uni4F07 +ENCODING 20231 +BBX 15 16 0 -2 +BITMAP +0800 +09F0 +0910 +1110 +1110 +320E +3400 +53F8 +9108 +1110 +1090 +10A0 +1040 +10A0 +1318 +1C06 +ENDCHAR +STARTCHAR uni4F08 +ENCODING 20232 +BBX 15 16 0 -2 +BITMAP +0800 +0880 +0840 +1020 +1120 +3100 +3100 +5504 +9502 +1502 +1502 +1908 +1108 +1108 +10F8 +1000 +ENDCHAR +STARTCHAR uni4F09 +ENCODING 20233 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2000 +2000 +61F0 +A110 +2110 +2110 +2110 +2110 +2210 +2212 +2412 +280E +ENDCHAR +STARTCHAR uni4F0A +ENCODING 20234 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1044 +2044 +2FFE +6044 +6044 +A044 +27FC +2040 +2040 +2040 +2080 +2080 +2100 +ENDCHAR +STARTCHAR uni4F0B +ENCODING 20235 +BBX 15 15 1 -1 +BITMAP +1000 +17F8 +1108 +2110 +2110 +61FC +A304 +2284 +2288 +2448 +2450 +2820 +3050 +2188 +2606 +ENDCHAR +STARTCHAR uni4F0C +ENCODING 20236 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +0A00 +1200 +12F8 +3288 +3288 +5288 +9288 +12A8 +1290 +1282 +1482 +1482 +187E +1000 +ENDCHAR +STARTCHAR uni4F0D +ENCODING 20237 +BBX 15 15 1 -1 +BITMAP +1000 +1FFC +1080 +2080 +2080 +6080 +A7F0 +2110 +2110 +2110 +2210 +2210 +2210 +3FFE +2000 +ENDCHAR +STARTCHAR uni4F0E +ENCODING 20238 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +2FFE +2040 +6040 +A7F8 +2008 +2208 +2110 +20A0 +2040 +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni4F0F +ENCODING 20239 +BBX 15 15 1 -1 +BITMAP +1090 +1088 +1084 +2080 +3FFE +6080 +A080 +2140 +2140 +2120 +2220 +2210 +2408 +2804 +3002 +ENDCHAR +STARTCHAR uni4F10 +ENCODING 20240 +BBX 15 15 1 -1 +BITMAP +1090 +1088 +1084 +2080 +20FE +6F80 +A080 +2088 +2050 +2060 +20C0 +2120 +2612 +380A +2004 +ENDCHAR +STARTCHAR uni4F11 +ENCODING 20241 +BBX 14 15 1 -1 +BITMAP +1080 +1080 +1080 +3FFC +2080 +61C0 +A1C0 +22A0 +22A0 +2490 +2888 +3084 +2080 +2080 +2080 +ENDCHAR +STARTCHAR uni4F12 +ENCODING 20242 +BBX 15 16 0 -2 +BITMAP +0808 +081C +09E0 +1100 +1100 +3100 +31FE +5110 +9110 +1110 +1110 +1110 +1110 +1210 +1210 +1410 +ENDCHAR +STARTCHAR uni4F13 +ENCODING 20243 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0BFE +1020 +1020 +3040 +3040 +50D0 +9148 +1244 +1444 +1040 +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni4F14 +ENCODING 20244 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0BFE +1202 +1404 +3000 +31F0 +5110 +9110 +1110 +1110 +1112 +1212 +1212 +140E +1800 +ENDCHAR +STARTCHAR uni4F15 +ENCODING 20245 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +13FC +1040 +3040 +3040 +57FE +9040 +10A0 +10A0 +1110 +1110 +1208 +1404 +1802 +ENDCHAR +STARTCHAR uni4F16 +ENCODING 20246 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +27FC +2080 +6080 +A1F8 +2108 +2108 +2290 +2450 +2820 +2050 +2188 +2606 +ENDCHAR +STARTCHAR uni4F17 +ENCODING 20247 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0280 +0440 +0820 +1010 +2828 +C826 +0820 +0820 +0820 +1450 +1250 +2288 +4104 +8202 +ENDCHAR +STARTCHAR uni4F18 +ENCODING 20248 +BBX 15 16 0 -2 +BITMAP +0890 +0888 +0888 +1080 +17FE +30A0 +30A0 +50A0 +90A0 +10A0 +1120 +1122 +1122 +1222 +121E +1400 +ENDCHAR +STARTCHAR uni4F19 +ENCODING 20249 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +1040 +1244 +3244 +3248 +5450 +9040 +10A0 +10A0 +1110 +1110 +1208 +1404 +1802 +ENDCHAR +STARTCHAR uni4F1A +ENCODING 20250 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0280 +0440 +0820 +1010 +27C8 +C006 +0000 +1FF0 +0200 +0240 +0420 +05D0 +3E08 +ENDCHAR +STARTCHAR uni4F1B +ENCODING 20251 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0A00 +1208 +1288 +3250 +3250 +5220 +9220 +1250 +1250 +1288 +1308 +1200 +13FE +1000 +ENDCHAR +STARTCHAR uni4F1C +ENCODING 20252 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +17F0 +2090 +2110 +6112 +A212 +2C0E +2040 +2040 +2FFE +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4F1D +ENCODING 20253 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1000 +2000 +2000 +6000 +AFFE +2080 +2080 +2090 +2108 +2104 +221C +22E2 +2F02 +ENDCHAR +STARTCHAR uni4F1E +ENCODING 20254 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0280 +0440 +0820 +3018 +C106 +1110 +0910 +0920 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni4F1F +ENCODING 20255 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +17FE +1040 +3040 +33FC +5040 +9040 +17FE +1042 +1042 +104A +1044 +1040 +1040 +ENDCHAR +STARTCHAR uni4F20 +ENCODING 20256 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +13F8 +1040 +3080 +37FE +5080 +9100 +13F8 +1008 +1110 +10A0 +1040 +1020 +1020 +ENDCHAR +STARTCHAR uni4F21 +ENCODING 20257 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +17FE +1080 +30A0 +3120 +53FC +9020 +1020 +1020 +17FE +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni4F22 +ENCODING 20258 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0810 +1110 +1110 +3110 +3210 +53FE +9030 +1050 +1090 +1110 +1210 +1410 +1050 +1020 +ENDCHAR +STARTCHAR uni4F23 +ENCODING 20259 +BBX 15 16 0 -2 +BITMAP +0800 +0BF8 +0A08 +1208 +1248 +3248 +3248 +5248 +9248 +12A8 +12A8 +1120 +1120 +1222 +1422 +181E +ENDCHAR +STARTCHAR uni4F24 +ENCODING 20260 +BBX 15 16 0 -2 +BITMAP +0880 +0880 +0900 +11FE +1200 +3440 +3040 +53FC +9044 +1044 +1084 +1084 +1104 +1104 +1228 +1410 +ENDCHAR +STARTCHAR uni4F25 +ENCODING 20261 +BBX 15 16 0 -2 +BITMAP +0900 +0908 +0908 +1110 +1120 +3140 +3100 +57FE +9140 +1120 +1120 +1110 +1108 +1144 +1182 +1100 +ENDCHAR +STARTCHAR uni4F26 +ENCODING 20262 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +08A0 +10A0 +1110 +3208 +3406 +5110 +9120 +1140 +1180 +1100 +1104 +1104 +10FC +1000 +ENDCHAR +STARTCHAR uni4F27 +ENCODING 20263 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +08A0 +1110 +1208 +3404 +3BF2 +5210 +9210 +1210 +1250 +1220 +1204 +1204 +11FC +1000 +ENDCHAR +STARTCHAR uni4F28 +ENCODING 20264 +BBX 14 16 0 -2 +BITMAP +0900 +0900 +09FC +1204 +1204 +3504 +3884 +5084 +9014 +1024 +1044 +1384 +1104 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni4F29 +ENCODING 20265 +BBX 15 16 0 -2 +BITMAP +0880 +0840 +0840 +17FC +1110 +3110 +3110 +5110 +9110 +10A0 +10A0 +1040 +10A0 +1110 +1208 +1C06 +ENDCHAR +STARTCHAR uni4F2A +ENCODING 20266 +BBX 14 16 0 -2 +BITMAP +0840 +0A40 +0940 +1140 +1040 +37FC +3044 +5044 +9084 +10A4 +1094 +1114 +1104 +1204 +1428 +1810 +ENDCHAR +STARTCHAR uni4F2B +ENCODING 20267 +BBX 15 16 0 -2 +BITMAP +0840 +0820 +0820 +1000 +13FE +3202 +3404 +5000 +9000 +1000 +1000 +1000 +1000 +13FE +1000 +1000 +ENDCHAR +STARTCHAR uni4F2C +ENCODING 20268 +BBX 15 16 0 -2 +BITMAP +0800 +09FC +0904 +1104 +1104 +3104 +31FC +5124 +9120 +1120 +1110 +1110 +1208 +1208 +1404 +1802 +ENDCHAR +STARTCHAR uni4F2D +ENCODING 20269 +BBX 15 16 0 -2 +BITMAP +0880 +0840 +0840 +17FE +1040 +3080 +3108 +5210 +97E0 +1040 +1080 +1108 +1204 +17FE +1202 +1000 +ENDCHAR +STARTCHAR uni4F2E +ENCODING 20270 +BBX 15 16 0 -2 +BITMAP +1200 +1200 +127C +2224 +2FA4 +64A4 +64A4 +A4A8 +24A8 +2928 +2510 +2210 +2528 +2948 +3084 +2102 +ENDCHAR +STARTCHAR uni4F2F +ENCODING 20271 +BBX 14 15 1 -1 +BITMAP +1080 +1080 +1100 +27FC +2404 +6404 +A404 +2404 +27FC +2404 +2404 +2404 +2404 +2404 +27FC +ENDCHAR +STARTCHAR uni4F30 +ENCODING 20272 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +2FFE +2040 +6040 +A040 +2040 +27FC +2404 +2404 +2404 +2404 +2404 +27FC +ENDCHAR +STARTCHAR uni4F31 +ENCODING 20273 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +08A0 +10A0 +1110 +3208 +3446 +5040 +9150 +1148 +1248 +1244 +1444 +1040 +1140 +1080 +ENDCHAR +STARTCHAR uni4F32 +ENCODING 20274 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0A04 +1204 +1204 +33FC +3200 +5240 +9244 +1248 +1270 +1240 +1442 +1442 +183E +1000 +ENDCHAR +STARTCHAR uni4F33 +ENCODING 20275 +BBX 15 16 0 -2 +BITMAP +0848 +0A48 +0A48 +1248 +1248 +37FE +3248 +5248 +9248 +1248 +1278 +1200 +1200 +1200 +13FE +1000 +ENDCHAR +STARTCHAR uni4F34 +ENCODING 20276 +BBX 15 15 1 -1 +BITMAP +1444 +1244 +1248 +2040 +27FC +6040 +A040 +2040 +2FFE +2040 +2040 +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4F35 +ENCODING 20277 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +17FC +24A4 +24A4 +64A4 +64A4 +A4A4 +24A4 +2524 +251C +2604 +2404 +2404 +27FC +2404 +ENDCHAR +STARTCHAR uni4F36 +ENCODING 20278 +BBX 15 15 1 -1 +BITMAP +1040 +10A0 +1110 +2208 +2DF6 +6000 +A000 +27FC +2044 +2044 +2044 +2044 +205C +2040 +2040 +ENDCHAR +STARTCHAR uni4F37 +ENCODING 20279 +BBX 14 15 1 -1 +BITMAP +1040 +1040 +1040 +2040 +27FC +6444 +A444 +2444 +2444 +27FC +2444 +2444 +2444 +2444 +27FC +ENDCHAR +STARTCHAR uni4F38 +ENCODING 20280 +BBX 14 15 1 -1 +BITMAP +1040 +1040 +1040 +27FC +2444 +6444 +A7FC +2444 +2444 +2444 +27FC +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4F39 +ENCODING 20281 +BBX 15 16 0 -2 +BITMAP +0800 +09F8 +0908 +1108 +1108 +31F8 +3108 +5108 +9108 +11F8 +1108 +1108 +1108 +1108 +17FE +1000 +ENDCHAR +STARTCHAR uni4F3A +ENCODING 20282 +BBX 14 15 1 -1 +BITMAP +1000 +17FC +1004 +2004 +27E4 +6004 +A004 +27E4 +2424 +2424 +2424 +27E4 +2004 +2004 +201C +ENDCHAR +STARTCHAR uni4F3B +ENCODING 20283 +BBX 15 16 0 -2 +BITMAP +0800 +0BF8 +0840 +1040 +1248 +3148 +3150 +5040 +97FE +1040 +1040 +1040 +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni4F3C +ENCODING 20284 +BBX 15 15 1 -1 +BITMAP +1008 +1408 +1408 +2508 +2488 +6448 +A408 +2408 +2410 +2410 +2410 +25A8 +2624 +3842 +2082 +ENDCHAR +STARTCHAR uni4F3D +ENCODING 20285 +BBX 14 15 1 -1 +BITMAP +1400 +1400 +143C +3FA4 +24A4 +64A4 +A4A4 +24A4 +24A4 +24A4 +24A4 +24A4 +28A4 +28BC +3300 +ENDCHAR +STARTCHAR uni4F3E +ENCODING 20286 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1020 +2020 +2060 +6040 +A0D0 +2148 +2244 +2442 +2040 +2040 +2040 +2000 +27FE +ENDCHAR +STARTCHAR uni4F3F +ENCODING 20287 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0BFC +1204 +1204 +3204 +3204 +5204 +93FC +1204 +1000 +1090 +1088 +1104 +1202 +1402 +ENDCHAR +STARTCHAR uni4F40 +ENCODING 20288 +BBX 14 16 0 -2 +BITMAP +0800 +0BF8 +0A08 +1208 +1208 +3208 +33F8 +5200 +9200 +13FC +1204 +1204 +1204 +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni4F41 +ENCODING 20289 +BBX 14 16 0 -2 +BITMAP +0840 +0840 +0880 +1080 +1110 +3208 +37FC +5004 +9000 +13F8 +1208 +1208 +1208 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni4F42 +ENCODING 20290 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0BFE +1020 +1020 +3020 +3120 +5120 +913C +1120 +1120 +1120 +1120 +1120 +17FE +1000 +ENDCHAR +STARTCHAR uni4F43 +ENCODING 20291 +BBX 14 15 1 -1 +BITMAP +1000 +17FC +1444 +2444 +2444 +6444 +A444 +27FC +2444 +2444 +2444 +2444 +2444 +2444 +27FC +ENDCHAR +STARTCHAR uni4F44 +ENCODING 20292 +BBX 15 16 0 -2 +BITMAP +0908 +0908 +0908 +1108 +17FE +3108 +3108 +5108 +9108 +11F8 +1108 +1108 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni4F45 +ENCODING 20293 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +13FC +1040 +3040 +3040 +57FE +90E0 +1150 +1150 +1248 +1444 +1842 +1040 +1040 +ENDCHAR +STARTCHAR uni4F46 +ENCODING 20294 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1208 +2208 +2208 +6208 +A3F8 +2208 +2208 +2208 +2208 +23F8 +2000 +2000 +2FFE +ENDCHAR +STARTCHAR uni4F47 +ENCODING 20295 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2404 +2404 +6000 +AFFE +2040 +2040 +2040 +2040 +2040 +2040 +2040 +21C0 +ENDCHAR +STARTCHAR uni4F48 +ENCODING 20296 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +17FE +2100 +2140 +6240 +A7FC +2C44 +3444 +2444 +2444 +2444 +244C +2040 +2040 +ENDCHAR +STARTCHAR uni4F49 +ENCODING 20297 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +27FC +2040 +6040 +A040 +2FFE +2080 +2080 +2090 +2108 +210C +2274 +2F82 +ENDCHAR +STARTCHAR uni4F4A +ENCODING 20298 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +13FE +1222 +3224 +3220 +53FC +9284 +1288 +1248 +1250 +1220 +1450 +1488 +1906 +ENDCHAR +STARTCHAR uni4F4B +ENCODING 20299 +BBX 14 16 0 -2 +BITMAP +0800 +0BFC +0884 +1084 +1084 +3104 +3114 +5208 +9400 +11FC +1104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni4F4C +ENCODING 20300 +BBX 15 16 0 -2 +BITMAP +1120 +1120 +1120 +2522 +2522 +65E4 +6528 +A530 +2520 +2520 +2520 +2522 +25E2 +3E22 +281E +2000 +ENDCHAR +STARTCHAR uni4F4D +ENCODING 20301 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +27FC +2000 +6000 +6208 +A208 +2110 +2110 +2110 +2020 +2020 +2FFE +2000 +ENDCHAR +STARTCHAR uni4F4E +ENCODING 20302 +BBX 15 15 1 -1 +BITMAP +101C +17E0 +1420 +2420 +2420 +6420 +A7FE +2420 +2420 +2410 +2410 +2710 +2C0A +200A +2FE4 +ENDCHAR +STARTCHAR uni4F4F +ENCODING 20303 +BBX 15 15 1 -1 +BITMAP +1080 +1040 +1020 +27FC +2040 +6040 +A040 +2040 +27FC +2040 +2040 +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni4F50 +ENCODING 20304 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +2FFE +2100 +6100 +A200 +2200 +27FC +2840 +3040 +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni4F51 +ENCODING 20305 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +2FFE +2100 +6100 +A200 +2200 +27FC +2A04 +3204 +2204 +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni4F52 +ENCODING 20306 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +13F8 +1248 +3248 +3248 +5248 +9248 +17FE +1040 +10A0 +10A0 +1110 +1208 +1406 +ENDCHAR +STARTCHAR uni4F53 +ENCODING 20307 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +2FFE +2040 +60E0 +A0E0 +2150 +2150 +2248 +2444 +29F2 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4F54 +ENCODING 20308 +BBX 14 15 1 -1 +BITMAP +1040 +1040 +1040 +2040 +207C +6040 +A040 +2040 +2040 +27FC +2404 +2404 +2404 +2404 +27FC +ENDCHAR +STARTCHAR uni4F55 +ENCODING 20309 +BBX 15 15 1 -1 +BITMAP +1000 +17FE +1008 +2008 +23C8 +6248 +A248 +2248 +2248 +2248 +23C8 +2008 +2008 +2008 +2038 +ENDCHAR +STARTCHAR uni4F56 +ENCODING 20310 +BBX 15 15 1 -1 +BITMAP +1100 +1080 +1048 +2108 +2108 +6110 +A510 +2528 +2524 +2942 +2940 +2180 +2104 +2284 +2C7C +ENDCHAR +STARTCHAR uni4F57 +ENCODING 20311 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2404 +2404 +6100 +A10C +2130 +21C0 +2100 +2100 +2100 +2102 +2102 +20FE +ENDCHAR +STARTCHAR uni4F58 +ENCODING 20312 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0440 +1830 +E00E +1FF0 +0000 +0000 +7FFE +0100 +0920 +1110 +2108 +4104 +0300 +ENDCHAR +STARTCHAR uni4F59 +ENCODING 20313 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0460 +1818 +E006 +1FF0 +0100 +0100 +7FFC +0100 +1110 +1110 +2108 +4104 +0700 +ENDCHAR +STARTCHAR uni4F5A +ENCODING 20314 +BBX 15 15 1 -1 +BITMAP +1040 +1240 +1240 +27FC +2440 +6840 +A040 +2040 +2FFE +2040 +20A0 +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni4F5B +ENCODING 20315 +BBX 15 15 1 -1 +BITMAP +1120 +1120 +1FFC +2124 +2124 +6FFC +A920 +2920 +2FFE +2122 +2122 +2222 +2222 +242C +2820 +ENDCHAR +STARTCHAR uni4F5C +ENCODING 20316 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +1100 +23FE +2440 +6840 +A040 +207C +2040 +2040 +2040 +207C +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4F5D +ENCODING 20317 +BBX 14 15 1 -1 +BITMAP +1100 +1100 +13FC +2404 +2804 +63E4 +A224 +2224 +2224 +2224 +23E4 +2004 +2008 +2008 +2070 +ENDCHAR +STARTCHAR uni4F5E +ENCODING 20318 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1000 +2000 +27FC +6080 +A080 +2FFE +2108 +2208 +2790 +2060 +2090 +2308 +2C04 +ENDCHAR +STARTCHAR uni4F5F +ENCODING 20319 +BBX 15 15 1 -1 +BITMAP +1100 +11F0 +1210 +2420 +2A40 +61C0 +A120 +2618 +3886 +2060 +2000 +2000 +2030 +20C0 +2300 +ENDCHAR +STARTCHAR uni4F60 +ENCODING 20320 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +1100 +23FE +2444 +6848 +A040 +2248 +2248 +2444 +2444 +2842 +2040 +2040 +21C0 +ENDCHAR +STARTCHAR uni4F61 +ENCODING 20321 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +20A0 +2110 +6208 +6444 +A842 +2040 +2444 +2444 +2444 +2444 +2444 +27FC +2004 +ENDCHAR +STARTCHAR uni4F62 +ENCODING 20322 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +0A00 +1200 +1200 +33FC +3204 +5204 +9204 +1204 +13FC +1200 +1200 +1200 +13FE +1000 +ENDCHAR +STARTCHAR uni4F63 +ENCODING 20323 +BBX 14 16 0 -2 +BITMAP +1000 +17FC +1444 +2444 +2444 +67FC +6444 +A444 +2444 +27FC +2444 +2444 +2444 +2844 +2854 +3008 +ENDCHAR +STARTCHAR uni4F64 +ENCODING 20324 +BBX 15 15 1 -1 +BITMAP +1000 +1FFC +1200 +2200 +2200 +63F0 +A210 +2210 +2290 +2250 +2210 +2210 +22D2 +2312 +2C0E +ENDCHAR +STARTCHAR uni4F65 +ENCODING 20325 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0280 +0440 +0820 +1010 +2FE8 +C006 +0210 +1110 +0910 +0920 +0820 +0040 +7FFC +ENDCHAR +STARTCHAR uni4F66 +ENCODING 20326 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0FFE +1040 +1040 +3080 +3080 +51F8 +9308 +1508 +1908 +1108 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni4F67 +ENCODING 20327 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +107C +1040 +3040 +3040 +57FE +9040 +1040 +1050 +1048 +1044 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni4F68 +ENCODING 20328 +BBX 15 16 0 -2 +BITMAP +0880 +0880 +09FC +1104 +1204 +35F4 +3114 +5114 +9114 +11F4 +1104 +1128 +1112 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni4F69 +ENCODING 20329 +BBX 15 15 1 -1 +BITMAP +1000 +1FF8 +1808 +2BE8 +2888 +6888 +ABE8 +2AA8 +2AA8 +2AA8 +2AA8 +2AE8 +288A +288A +3084 +ENDCHAR +STARTCHAR uni4F6A +ENCODING 20330 +BBX 15 15 1 -1 +BITMAP +1000 +17FE +1402 +2402 +2402 +64F2 +A492 +2492 +2492 +2492 +24F2 +2402 +2402 +2402 +27FE +ENDCHAR +STARTCHAR uni4F6B +ENCODING 20331 +BBX 15 16 0 -2 +BITMAP +0880 +0880 +09F8 +1208 +1510 +30A0 +3040 +50A0 +9318 +1C06 +13F8 +1208 +1208 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni4F6C +ENCODING 20332 +BBX 15 15 1 -1 +BITMAP +1088 +1088 +17F8 +2090 +2090 +60A0 +AFFE +2180 +2300 +2D18 +21E0 +2100 +2104 +2104 +20FC +ENDCHAR +STARTCHAR uni4F6D +ENCODING 20333 +BBX 15 16 0 -2 +BITMAP +0900 +0900 +09F8 +1310 +14A0 +3040 +31B0 +564E +9040 +13FC +1040 +1440 +17FE +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni4F6E +ENCODING 20334 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +08A0 +1110 +1208 +3406 +33F8 +5000 +9000 +13F8 +1208 +1208 +1208 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni4F6F +ENCODING 20335 +BBX 15 15 1 -1 +BITMAP +1208 +1108 +1110 +2FFE +2040 +6040 +A7FC +2040 +2040 +2040 +2FFE +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4F70 +ENCODING 20336 +BBX 15 15 1 -1 +BITMAP +1000 +17FE +1040 +2080 +23FC +6204 +A204 +2204 +2204 +23FC +2204 +2204 +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni4F71 +ENCODING 20337 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0280 +0440 +0820 +1010 +EFEE +0000 +0000 +7FFC +0100 +0100 +11F8 +1100 +1100 +FFFE +ENDCHAR +STARTCHAR uni4F72 +ENCODING 20338 +BBX 14 16 0 -2 +BITMAP +0880 +0880 +08FC +1104 +1288 +3450 +3020 +5040 +91FC +1304 +1D04 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni4F73 +ENCODING 20339 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2040 +2040 +6040 +AFFE +2000 +2040 +2040 +27FC +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni4F74 +ENCODING 20340 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +0908 +1108 +1108 +31F8 +3108 +5108 +91F8 +1108 +1108 +111E +17E8 +1008 +1008 +1008 +ENDCHAR +STARTCHAR uni4F75 +ENCODING 20341 +BBX 15 15 1 -1 +BITMAP +1208 +1108 +1110 +27FC +2110 +6110 +A110 +2FFE +2110 +2110 +2110 +2210 +2210 +2410 +2810 +ENDCHAR +STARTCHAR uni4F76 +ENCODING 20342 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2040 +2040 +6040 +A7FC +2000 +2000 +23F8 +2208 +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni4F77 +ENCODING 20343 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1208 +2208 +23F8 +6208 +A208 +23F8 +2244 +2224 +2228 +2210 +2210 +23C8 +2606 +ENDCHAR +STARTCHAR uni4F78 +ENCODING 20344 +BBX 15 15 1 -1 +BITMAP +1038 +17C0 +1040 +2040 +2040 +6FFE +A040 +2040 +2040 +27FC +2404 +2404 +2404 +2404 +27FC +ENDCHAR +STARTCHAR uni4F79 +ENCODING 20345 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +13F8 +2208 +2410 +6BFE +6200 +A2F8 +2288 +2288 +22A8 +2290 +2282 +2482 +247E +2800 +ENDCHAR +STARTCHAR uni4F7A +ENCODING 20346 +BBX 15 15 1 -1 +BITMAP +1040 +10A0 +1110 +2208 +2404 +6802 +A3F8 +2040 +2040 +2040 +23F8 +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni4F7B +ENCODING 20347 +BBX 15 15 1 -1 +BITMAP +1120 +1120 +1124 +2928 +2528 +6520 +A120 +2130 +272C +3922 +2120 +2220 +2222 +2422 +281E +ENDCHAR +STARTCHAR uni4F7C +ENCODING 20348 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +2FFE +2110 +6208 +AC06 +2110 +2110 +20A0 +20A0 +2040 +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni4F7D +ENCODING 20349 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +20FE +2902 +6524 +A228 +2020 +2020 +2220 +2450 +2850 +2088 +2104 +2202 +ENDCHAR +STARTCHAR uni4F7E +ENCODING 20350 +BBX 15 15 1 -1 +BITMAP +10F0 +1010 +1108 +2208 +2404 +6BFA +A208 +2208 +23F8 +2208 +2208 +23F8 +2208 +2208 +2218 +ENDCHAR +STARTCHAR uni4F7F +ENCODING 20351 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2040 +27FC +6444 +A444 +2444 +27FC +2040 +2240 +2180 +20C0 +2330 +2C0E +ENDCHAR +STARTCHAR uni4F80 +ENCODING 20352 +BBX 14 16 0 -2 +BITMAP +1004 +1FC4 +1484 +2494 +2494 +6494 +6494 +AFD4 +2494 +2494 +2494 +2494 +2484 +2884 +2894 +3088 +ENDCHAR +STARTCHAR uni4F81 +ENCODING 20353 +BBX 15 16 0 -2 +BITMAP +1040 +1240 +1240 +23FC +2440 +6840 +6040 +A7FE +2120 +2120 +2120 +2120 +2222 +2222 +241E +2800 +ENDCHAR +STARTCHAR uni4F82 +ENCODING 20354 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FE +2400 +2438 +65C0 +A440 +2440 +247E +27C0 +2440 +2440 +2842 +2842 +203E +ENDCHAR +STARTCHAR uni4F83 +ENCODING 20355 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1404 +2404 +2404 +67FC +A000 +2248 +2248 +2248 +2248 +2248 +244A +244A +2806 +ENDCHAR +STARTCHAR uni4F84 +ENCODING 20356 +BBX 15 16 0 -2 +BITMAP +1000 +17FE +1040 +2080 +2110 +6208 +67FC +A044 +2040 +2040 +27FC +2040 +2040 +2040 +2FFE +2000 +ENDCHAR +STARTCHAR uni4F85 +ENCODING 20357 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +2FFE +2080 +6110 +A220 +2144 +2084 +2108 +2610 +2020 +2050 +2188 +2604 +ENDCHAR +STARTCHAR uni4F86 +ENCODING 20358 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +1110 +1110 +2928 +4544 +8102 +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni4F87 +ENCODING 20359 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FE +2040 +27FC +6044 +63FC +A240 +2440 +27FE +2042 +20AA +20A4 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni4F88 +ENCODING 20360 +BBX 14 15 1 -1 +BITMAP +1080 +10F0 +1110 +2310 +24A0 +6040 +A1A0 +2E3C +2044 +20C4 +2328 +2018 +2020 +20C0 +2700 +ENDCHAR +STARTCHAR uni4F89 +ENCODING 20361 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FC +20A0 +2110 +6208 +6DF6 +A000 +27FC +2080 +2100 +23F8 +2008 +2008 +2050 +2020 +ENDCHAR +STARTCHAR uni4F8A +ENCODING 20362 +BBX 15 15 1 -1 +BITMAP +1040 +1444 +1444 +2248 +2248 +6040 +A040 +2FFE +2120 +2120 +2120 +2220 +2222 +2422 +281E +ENDCHAR +STARTCHAR uni4F8B +ENCODING 20363 +BBX 14 15 1 -1 +BITMAP +1004 +1784 +1224 +2224 +2224 +67A4 +A4A4 +24A4 +2AA4 +31A4 +2124 +2104 +2204 +2404 +381C +ENDCHAR +STARTCHAR uni4F8C +ENCODING 20364 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0440 +0920 +3098 +CFE6 +0040 +0080 +3FF8 +0000 +0000 +FFFE +0820 +1010 +3FF8 +0008 +ENDCHAR +STARTCHAR uni4F8D +ENCODING 20365 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2040 +2040 +6FFE +A008 +2008 +2FFE +2008 +2208 +2108 +2088 +2008 +2038 +ENDCHAR +STARTCHAR uni4F8E +ENCODING 20366 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0A48 +1148 +1150 +3040 +37FE +5040 +90E0 +1150 +1150 +1248 +1444 +1842 +1040 +1040 +ENDCHAR +STARTCHAR uni4F8F +ENCODING 20367 +BBX 15 15 1 -1 +BITMAP +1040 +1240 +1240 +27FC +2440 +6840 +A040 +2FFE +2040 +20E0 +2150 +2248 +2C46 +2040 +2040 +ENDCHAR +STARTCHAR uni4F90 +ENCODING 20368 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0880 +1100 +13FC +3294 +3294 +5294 +9294 +1294 +1294 +1294 +1294 +1294 +1FFE +1000 +ENDCHAR +STARTCHAR uni4F91 +ENCODING 20369 +BBX 14 15 1 -1 +BITMAP +1080 +1080 +1FFC +2100 +2100 +63F8 +A608 +2A08 +33F8 +2208 +2208 +23F8 +2208 +2208 +2238 +ENDCHAR +STARTCHAR uni4F92 +ENCODING 20370 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FE +2402 +2482 +6080 +A7FE +2088 +2108 +2108 +2310 +20E0 +2050 +2188 +2604 +ENDCHAR +STARTCHAR uni4F93 +ENCODING 20371 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0BF8 +1048 +17FE +3048 +33F8 +5040 +9040 +17FC +1040 +1040 +1FFE +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni4F94 +ENCODING 20372 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1090 +2138 +27C4 +6040 +A240 +23FC +2440 +2040 +2040 +2FFE +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni4F95 +ENCODING 20373 +BBX 14 16 0 -2 +BITMAP +1000 +17FC +1040 +2040 +2080 +67FC +64A4 +A4A4 +24A4 +24A4 +24A4 +24A4 +24A4 +2484 +2414 +2408 +ENDCHAR +STARTCHAR uni4F96 +ENCODING 20374 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0C60 +3018 +C7E6 +0000 +0000 +3FFC +2444 +2444 +3FFC +2444 +2444 +2444 +244C +ENDCHAR +STARTCHAR uni4F97 +ENCODING 20375 +BBX 14 15 1 -1 +BITMAP +1000 +17FC +1404 +2404 +25F4 +6404 +A404 +25F4 +2514 +2514 +2514 +25F4 +2404 +2404 +241C +ENDCHAR +STARTCHAR uni4F98 +ENCODING 20376 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2404 +2434 +63C0 +A080 +2080 +2FFE +2080 +2080 +2080 +2082 +2082 +207E +ENDCHAR +STARTCHAR uni4F99 +ENCODING 20377 +BBX 15 16 0 -2 +BITMAP +0828 +0824 +0824 +1020 +17FE +3020 +3020 +57E0 +9120 +1110 +1110 +1110 +11CA +170A +1206 +1002 +ENDCHAR +STARTCHAR uni4F9A +ENCODING 20378 +BBX 14 15 1 -1 +BITMAP +1200 +1200 +13FC +2404 +2404 +6BE4 +A224 +2224 +23E4 +2224 +2224 +23E4 +2008 +2008 +2070 +ENDCHAR +STARTCHAR uni4F9B +ENCODING 20379 +BBX 15 15 1 -1 +BITMAP +1110 +1110 +1110 +27FC +2110 +6110 +A110 +2110 +2110 +2FFE +2000 +2080 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni4F9C +ENCODING 20380 +BBX 15 16 0 -2 +BITMAP +0880 +0900 +0BF8 +1208 +1288 +3248 +3248 +5FFE +9208 +1288 +1248 +1248 +1208 +1208 +1428 +1810 +ENDCHAR +STARTCHAR uni4F9D +ENCODING 20381 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +2FFE +2140 +6140 +6244 +A228 +2630 +2A20 +2210 +2210 +22C8 +2304 +2C02 +ENDCHAR +STARTCHAR uni4F9E +ENCODING 20382 +BBX 15 16 0 -2 +BITMAP +0900 +0900 +0900 +111E +17D2 +3252 +3252 +5252 +9252 +1492 +1292 +1112 +1292 +125E +1452 +1800 +ENDCHAR +STARTCHAR uni4F9F +ENCODING 20383 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +17FE +1080 +3080 +317C +5108 +9310 +1510 +11FE +1110 +1110 +1110 +1150 +1120 +ENDCHAR +STARTCHAR uni4FA0 +ENCODING 20384 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +27FC +2040 +6444 +A248 +2040 +2FFE +2040 +20A0 +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni4FA1 +ENCODING 20385 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +1120 +2120 +2120 +6FFC +A924 +2924 +2924 +2924 +2924 +2924 +2924 +2924 +2FFC +ENDCHAR +STARTCHAR uni4FA2 +ENCODING 20386 +BBX 15 16 0 -2 +BITMAP +0800 +0FFC +0840 +1040 +13F8 +3248 +3248 +53F8 +9248 +1248 +1FFE +1208 +1208 +1208 +1228 +1210 +ENDCHAR +STARTCHAR uni4FA3 +ENCODING 20387 +BBX 14 16 0 -2 +BITMAP +1000 +13F8 +1208 +2208 +2208 +6208 +63F8 +A000 +2000 +27FC +2404 +2404 +2404 +2404 +27FC +2404 +ENDCHAR +STARTCHAR uni4FA4 +ENCODING 20388 +BBX 15 16 0 -2 +BITMAP +0880 +0888 +0BE8 +1090 +10A0 +37FE +3080 +5100 +93FC +1480 +1900 +11F8 +1008 +1008 +1050 +1020 +ENDCHAR +STARTCHAR uni4FA5 +ENCODING 20389 +BBX 15 16 0 -2 +BITMAP +0880 +0880 +08BC +13C0 +1050 +3024 +30D4 +530C +9000 +17FE +1090 +1090 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni4FA6 +ENCODING 20390 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +087E +1040 +1040 +33F8 +3208 +5248 +9248 +1248 +1248 +1248 +10A0 +1110 +1208 +1404 +ENDCHAR +STARTCHAR uni4FA7 +ENCODING 20391 +BBX 14 16 0 -2 +BITMAP +1004 +17C4 +1444 +2454 +2554 +6554 +6554 +A554 +2554 +2554 +2554 +2104 +2284 +2244 +2414 +2808 +ENDCHAR +STARTCHAR uni4FA8 +ENCODING 20392 +BBX 15 16 0 -2 +BITMAP +0810 +0878 +0BC0 +1040 +1040 +37FE +30A0 +5110 +9208 +1516 +1110 +1110 +1110 +1210 +1210 +1410 +ENDCHAR +STARTCHAR uni4FA9 +ENCODING 20393 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +08A0 +1110 +1208 +3406 +31F0 +5000 +9000 +17FC +1040 +1080 +1110 +1208 +17FC +1204 +ENDCHAR +STARTCHAR uni4FAA +ENCODING 20394 +BBX 15 16 0 -2 +BITMAP +0880 +0840 +0FFE +1208 +1110 +30A0 +3040 +51B0 +960E +1110 +1110 +1110 +1110 +1210 +1210 +1410 +ENDCHAR +STARTCHAR uni4FAB +ENCODING 20395 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FE +2400 +2400 +63FC +A080 +2080 +2FFE +2108 +2208 +2790 +2060 +2198 +2E04 +ENDCHAR +STARTCHAR uni4FAC +ENCODING 20396 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +27FC +2484 +6888 +6140 +A144 +2348 +2530 +2920 +2110 +2108 +2144 +2182 +2100 +ENDCHAR +STARTCHAR uni4FAD +ENCODING 20397 +BBX 15 15 1 -1 +BITMAP +1000 +17F8 +1408 +2408 +2408 +67F8 +A410 +2810 +2988 +3044 +2022 +2300 +20C0 +2020 +2010 +ENDCHAR +STARTCHAR uni4FAE +ENCODING 20398 +BBX 15 15 1 -1 +BITMAP +1200 +1200 +17FE +2800 +33F8 +6248 +A248 +2248 +3FFE +2488 +2488 +2488 +27FE +2010 +2070 +ENDCHAR +STARTCHAR uni4FAF +ENCODING 20399 +BBX 14 15 1 -1 +BITMAP +1000 +13F0 +1010 +2010 +2FFC +6200 +A200 +27F8 +2880 +2080 +3FFC +2140 +2120 +2210 +2C0C +ENDCHAR +STARTCHAR uni4FB0 +ENCODING 20400 +BBX 15 16 0 -2 +BITMAP +0800 +0BF8 +0888 +1088 +17FE +3088 +3088 +53F8 +9100 +1100 +13F8 +1508 +1908 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni4FB1 +ENCODING 20401 +BBX 15 16 0 -2 +BITMAP +0800 +0BF8 +0A08 +1208 +1208 +33F8 +3000 +5000 +97FC +1040 +1040 +13F8 +1040 +1040 +1FFE +1000 +ENDCHAR +STARTCHAR uni4FB2 +ENCODING 20402 +BBX 15 15 1 -1 +BITMAP +1000 +17FE +1400 +2400 +25FC +6400 +A400 +27FE +2520 +2524 +2928 +2910 +3110 +21C8 +2706 +ENDCHAR +STARTCHAR uni4FB3 +ENCODING 20403 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0A48 +1248 +1248 +3554 +38E2 +5040 +9040 +17FC +1040 +1040 +1040 +1040 +1FFE +1000 +ENDCHAR +STARTCHAR uni4FB4 +ENCODING 20404 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0440 +0820 +3018 +CFE6 +0000 +3F04 +0924 +0924 +3F24 +1124 +1124 +17A4 +7804 +200C +ENDCHAR +STARTCHAR uni4FB5 +ENCODING 20405 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1008 +23F8 +2008 +63F8 +A000 +2FFE +2802 +2BFA +2108 +2090 +2060 +2198 +2E06 +ENDCHAR +STARTCHAR uni4FB6 +ENCODING 20406 +BBX 14 15 1 -1 +BITMAP +1000 +13F8 +1208 +2208 +2208 +6208 +A3F8 +2080 +2100 +27FC +2404 +2404 +2404 +2404 +27FC +ENDCHAR +STARTCHAR uni4FB7 +ENCODING 20407 +BBX 14 16 0 -2 +BITMAP +0800 +0BF8 +0A08 +1208 +13F8 +3200 +3200 +53FC +9204 +12F4 +1294 +1294 +14F4 +1404 +1828 +1010 +ENDCHAR +STARTCHAR uni4FB8 +ENCODING 20408 +BBX 15 16 0 -2 +BITMAP +0800 +0FFC +0800 +1000 +13F8 +3208 +3208 +5208 +9208 +13F8 +1000 +1208 +1108 +1110 +1FFE +1000 +ENDCHAR +STARTCHAR uni4FB9 +ENCODING 20409 +BBX 15 16 0 -2 +BITMAP +1000 +100C +1770 +2110 +2110 +6210 +627C +A710 +2110 +2510 +2510 +227C +2200 +2500 +28FE +3000 +ENDCHAR +STARTCHAR uni4FBA +ENCODING 20410 +BBX 15 16 0 -2 +BITMAP +0840 +0A48 +0A48 +1248 +13F8 +3040 +30A0 +5110 +9288 +1446 +1040 +13F0 +1010 +1020 +1020 +1040 +ENDCHAR +STARTCHAR uni4FBB +ENCODING 20411 +BBX 15 16 0 -2 +BITMAP +0A08 +0908 +0910 +1020 +13F8 +3208 +3208 +5208 +93F8 +10A0 +10A0 +1120 +1122 +1222 +141E +1800 +ENDCHAR +STARTCHAR uni4FBC +ENCODING 20412 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0BFE +1020 +1020 +33FE +3202 +5404 +91F8 +1010 +1020 +13FE +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni4FBD +ENCODING 20413 +BBX 14 16 0 -2 +BITMAP +0BF8 +0A48 +0A48 +13F8 +1248 +3248 +33F8 +5080 +9080 +17FC +1084 +1104 +1104 +1204 +1428 +1810 +ENDCHAR +STARTCHAR uni4FBE +ENCODING 20414 +BBX 15 15 1 -1 +BITMAP +1040 +1044 +13F8 +2050 +2060 +67FE +A080 +23F8 +2C10 +2020 +27FE +2020 +2020 +2020 +20E0 +ENDCHAR +STARTCHAR uni4FBF +ENCODING 20415 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +1040 +27FC +2444 +6444 +A7FC +2444 +2444 +27FC +2440 +2240 +2180 +2160 +2E1E +ENDCHAR +STARTCHAR uni4FC0 +ENCODING 20416 +BBX 15 16 0 -2 +BITMAP +0808 +083C +0BC0 +1044 +1224 +3128 +3100 +5040 +93FE +1088 +1108 +1390 +1060 +1050 +1188 +1604 +ENDCHAR +STARTCHAR uni4FC1 +ENCODING 20417 +BBX 15 16 0 -2 +BITMAP +0800 +08F8 +0888 +1088 +12F8 +3200 +3200 +53FC +9044 +1044 +17FE +1040 +10A0 +1110 +1208 +1406 +ENDCHAR +STARTCHAR uni4FC2 +ENCODING 20418 +BBX 15 15 1 -1 +BITMAP +1070 +1780 +1080 +2100 +2210 +6420 +A348 +2084 +211E +3FE2 +2080 +2488 +2884 +3082 +2080 +ENDCHAR +STARTCHAR uni4FC3 +ENCODING 20419 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1208 +2208 +2208 +6208 +A3F8 +2040 +2240 +227C +2240 +2640 +2540 +28C0 +303E +ENDCHAR +STARTCHAR uni4FC4 +ENCODING 20420 +BBX 15 15 1 -1 +BITMAP +1120 +1228 +1E24 +2220 +2220 +7FFE +A220 +2224 +2224 +23A8 +2E28 +2210 +2212 +222A +26C4 +ENDCHAR +STARTCHAR uni4FC5 +ENCODING 20421 +BBX 15 15 1 -1 +BITMAP +1048 +1048 +1044 +2FFE +2040 +6444 +A248 +2250 +2060 +20E0 +2150 +2248 +2C44 +2042 +21C0 +ENDCHAR +STARTCHAR uni4FC6 +ENCODING 20422 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +08A0 +1110 +1208 +35F6 +3040 +5040 +97FC +1040 +1250 +1248 +1444 +1844 +1140 +1080 +ENDCHAR +STARTCHAR uni4FC7 +ENCODING 20423 +BBX 15 16 0 -2 +BITMAP +0800 +0C40 +0ABE +1108 +1288 +3488 +3088 +50BE +9188 +1288 +1488 +1088 +1088 +1088 +153E +1200 +ENDCHAR +STARTCHAR uni4FC8 +ENCODING 20424 +BBX 15 16 0 -2 +BITMAP +0840 +0A40 +0A40 +13FC +1440 +3840 +3040 +57FE +9000 +1000 +13F8 +1208 +1208 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni4FC9 +ENCODING 20425 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1080 +2080 +23F8 +6088 +A108 +2108 +2FFE +2000 +23F8 +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni4FCA +ENCODING 20426 +BBX 15 15 1 -1 +BITMAP +1100 +1110 +1238 +2FE4 +2120 +6220 +AC3E +2100 +21F8 +2210 +2610 +2920 +20C0 +2330 +2C0C +ENDCHAR +STARTCHAR uni4FCB +ENCODING 20427 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1208 +2208 +23F8 +6000 +A7FC +2444 +2444 +2444 +27FC +2400 +2402 +2402 +23FE +ENDCHAR +STARTCHAR uni4FCC +ENCODING 20428 +BBX 15 16 0 -2 +BITMAP +1048 +1044 +17FE +2040 +2040 +67FC +6444 +A444 +27FC +2444 +2444 +27FC +2444 +2444 +2454 +2408 +ENDCHAR +STARTCHAR uni4FCD +ENCODING 20429 +BBX 15 16 0 -2 +BITMAP +0880 +0840 +0BF8 +1208 +1208 +33F8 +3208 +5208 +93F8 +1240 +1244 +1228 +1210 +1288 +1306 +1200 +ENDCHAR +STARTCHAR uni4FCE +ENCODING 20430 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1108 +1108 +2908 +45F8 +8108 +0108 +1108 +11F8 +1108 +2908 +4508 +8108 +07FE +ENDCHAR +STARTCHAR uni4FCF +ENCODING 20431 +BBX 14 15 1 -1 +BITMAP +1248 +1248 +1444 +2040 +23FC +6204 +A204 +23FC +2204 +2204 +23FC +2204 +2204 +2204 +221C +ENDCHAR +STARTCHAR uni4FD0 +ENCODING 20432 +BBX 14 15 1 -1 +BITMAP +1184 +1E04 +1224 +2224 +3FA4 +6224 +A224 +2624 +2724 +2AA4 +2AA4 +3204 +2204 +2204 +221C +ENDCHAR +STARTCHAR uni4FD1 +ENCODING 20433 +BBX 14 15 1 -1 +BITMAP +1000 +17F8 +1010 +21A0 +2040 +67FC +A444 +2444 +27FC +2444 +2444 +27FC +2444 +2444 +244C +ENDCHAR +STARTCHAR uni4FD2 +ENCODING 20434 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FE +2402 +2402 +61F8 +A000 +2000 +27FE +2090 +2090 +2110 +2110 +2212 +240E +ENDCHAR +STARTCHAR uni4FD3 +ENCODING 20435 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0800 +1124 +1248 +3490 +3248 +5124 +9000 +13FC +1040 +1040 +1040 +1040 +17FE +1000 +ENDCHAR +STARTCHAR uni4FD4 +ENCODING 20436 +BBX 15 15 1 -1 +BITMAP +1000 +17F8 +1408 +27F8 +2408 +6408 +A7F8 +2408 +2408 +27F8 +2120 +2120 +2222 +2422 +381E +ENDCHAR +STARTCHAR uni4FD5 +ENCODING 20437 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +17FE +2402 +2844 +6040 +6040 +A7FC +20E0 +2150 +2150 +2248 +2444 +2842 +2040 +2040 +ENDCHAR +STARTCHAR uni4FD6 +ENCODING 20438 +BBX 14 16 0 -2 +BITMAP +1000 +17FC +1020 +2040 +20D0 +6148 +6644 +A040 +2000 +23F8 +2208 +2208 +2208 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni4FD7 +ENCODING 20439 +BBX 15 15 1 -1 +BITMAP +1110 +1110 +1208 +2444 +2040 +60A0 +A110 +2208 +2C06 +23F8 +2208 +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni4FD8 +ENCODING 20440 +BBX 15 15 1 -1 +BITMAP +1038 +13C8 +1244 +2424 +2000 +67FC +A018 +2020 +2040 +2FFE +2040 +2040 +2040 +2040 +21C0 +ENDCHAR +STARTCHAR uni4FD9 +ENCODING 20441 +BBX 15 16 0 -2 +BITMAP +1208 +1110 +10E0 +2110 +2208 +6080 +6FFE +A140 +2240 +27FC +2A44 +2244 +2254 +2248 +2040 +2040 +ENDCHAR +STARTCHAR uni4FDA +ENCODING 20442 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1444 +2444 +27FC +6444 +A444 +27FC +2040 +2040 +27FC +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni4FDB +ENCODING 20443 +BBX 15 15 1 -1 +BITMAP +1100 +11F0 +1210 +2C20 +27FC +6444 +A444 +2484 +27FC +20A0 +2120 +2120 +2222 +2422 +281E +ENDCHAR +STARTCHAR uni4FDC +ENCODING 20444 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FC +2444 +27FC +6444 +67FC +A000 +3FFE +2100 +2200 +23FC +2004 +2004 +2028 +2010 +ENDCHAR +STARTCHAR uni4FDD +ENCODING 20445 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1208 +2208 +2208 +63F8 +A040 +2040 +2FFE +2150 +2150 +2248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni4FDE +ENCODING 20446 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0440 +0820 +3018 +CFE6 +0000 +3E08 +2248 +3E48 +2248 +3E48 +2248 +2208 +2A28 +2410 +ENDCHAR +STARTCHAR uni4FDF +ENCODING 20447 +BBX 15 15 1 -1 +BITMAP +1100 +1120 +1110 +2238 +27C4 +6200 +A200 +27FC +2840 +2040 +2FFE +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni4FE0 +ENCODING 20448 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +2FFE +2040 +6248 +A248 +2554 +2554 +28A2 +20A0 +2110 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni4FE1 +ENCODING 20449 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1000 +2FFE +2000 +63F8 +A000 +23F8 +2000 +2000 +23F8 +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni4FE2 +ENCODING 20450 +BBX 15 16 0 -2 +BITMAP +0880 +0880 +09F8 +1310 +14A0 +3040 +31B0 +5E4E +9080 +1320 +1044 +1188 +1610 +1020 +10C0 +1700 +ENDCHAR +STARTCHAR uni4FE3 +ENCODING 20451 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1208 +2208 +2208 +63F8 +A000 +27FC +2040 +2040 +2FFE +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni4FE4 +ENCODING 20452 +BBX 15 15 1 -1 +BITMAP +1208 +1110 +1FFC +2044 +2044 +67FC +A440 +2440 +27FE +20C2 +2142 +2242 +2442 +385C +2040 +ENDCHAR +STARTCHAR uni4FE5 +ENCODING 20453 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2040 +27FC +6444 +A444 +27FC +2444 +2444 +27FC +2040 +2FFE +2040 +2040 +ENDCHAR +STARTCHAR uni4FE6 +ENCODING 20454 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2040 +23F8 +6040 +A7FC +2088 +2108 +2FFE +2208 +2488 +2048 +2008 +2038 +ENDCHAR +STARTCHAR uni4FE7 +ENCODING 20455 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +13FE +1020 +3020 +3020 +51FC +9040 +1020 +10A4 +1282 +128A +128A +1478 +1000 +ENDCHAR +STARTCHAR uni4FE8 +ENCODING 20456 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0890 +1294 +1198 +3090 +33FE +5200 +9200 +1200 +1200 +1200 +1200 +1400 +1400 +1800 +ENDCHAR +STARTCHAR uni4FE9 +ENCODING 20457 +BBX 15 16 0 -2 +BITMAP +1000 +1FFE +1120 +2120 +2120 +6FFC +6924 +A924 +2924 +2AA4 +2A54 +2C4C +2884 +2804 +2814 +2808 +ENDCHAR +STARTCHAR uni4FEA +ENCODING 20458 +BBX 15 16 0 -2 +BITMAP +1000 +1FFE +1000 +2000 +27BC +64A4 +64A4 +A4A4 +26B4 +25AC +24A4 +24A4 +24A4 +24A4 +24A4 +25AC +ENDCHAR +STARTCHAR uni4FEB +ENCODING 20459 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +17FC +1040 +3248 +3148 +5150 +9FFE +10E0 +1150 +1150 +1248 +1444 +1842 +1040 +ENDCHAR +STARTCHAR uni4FEC +ENCODING 20460 +BBX 15 16 0 -2 +BITMAP +1088 +11C8 +1F08 +2108 +2108 +6FD0 +6110 +A310 +2390 +2554 +2564 +2922 +217E +2122 +2102 +2100 +ENDCHAR +STARTCHAR uni4FED +ENCODING 20461 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +08A0 +10A0 +1110 +3208 +35F6 +5000 +9088 +1048 +1248 +1150 +1110 +1020 +17FE +1000 +ENDCHAR +STARTCHAR uni4FEE +ENCODING 20462 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +11FE +2308 +2C90 +6860 +A998 +2E26 +29C0 +2810 +2860 +2984 +2008 +2030 +23C0 +ENDCHAR +STARTCHAR uni4FEF +ENCODING 20463 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2800 +2888 +6888 +A97E +2908 +2B48 +2D28 +2928 +2908 +3108 +2108 +2138 +ENDCHAR +STARTCHAR uni4FF0 +ENCODING 20464 +BBX 15 16 0 -2 +BITMAP +1000 +1180 +1700 +211E +2112 +6FD2 +6112 +A312 +2392 +2352 +2552 +2512 +291E +2112 +2100 +2100 +ENDCHAR +STARTCHAR uni4FF1 +ENCODING 20465 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1108 +21F8 +2108 +61F8 +A108 +2108 +21F8 +2108 +2108 +27FE +2080 +2108 +2606 +ENDCHAR +STARTCHAR uni4FF2 +ENCODING 20466 +BBX 15 15 1 -1 +BITMAP +1210 +1210 +1210 +3F90 +207E +6512 +A912 +3092 +2512 +2512 +2512 +2212 +2522 +24A2 +284C +ENDCHAR +STARTCHAR uni4FF3 +ENCODING 20467 +BBX 15 15 1 -1 +BITMAP +1090 +1090 +279E +2090 +6090 +A090 +279E +2090 +2090 +2390 +2C9E +2110 +2110 +2210 +2410 +ENDCHAR +STARTCHAR uni4FF4 +ENCODING 20468 +BBX 14 16 0 -2 +BITMAP +10A0 +1090 +10BC +27C8 +2050 +6064 +6194 +AE0C +20A0 +2090 +20BC +27C8 +2050 +2064 +2194 +2E0C +ENDCHAR +STARTCHAR uni4FF5 +ENCODING 20469 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2040 +27FC +6040 +AFFE +20A0 +2124 +2224 +2E18 +2210 +2248 +2384 +2E02 +ENDCHAR +STARTCHAR uni4FF6 +ENCODING 20470 +BBX 15 15 1 -1 +BITMAP +1200 +127C +13A4 +2224 +2224 +6224 +BFE8 +2228 +2228 +2A90 +2A90 +3268 +2228 +2244 +2682 +ENDCHAR +STARTCHAR uni4FF7 +ENCODING 20471 +BBX 15 16 0 -2 +BITMAP +1000 +17BE +14AA +24AA +24AA +67AA +64AA +A4AA +24BE +27A0 +24A0 +24A0 +24A2 +28A2 +2AA2 +311E +ENDCHAR +STARTCHAR uni4FF8 +ENCODING 20472 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2040 +27FC +60A0 +6FFE +A110 +2248 +2C46 +23F8 +2040 +2FFE +2040 +2040 +ENDCHAR +STARTCHAR uni4FF9 +ENCODING 20473 +BBX 15 16 0 -2 +BITMAP +0800 +0FFE +0890 +1090 +1090 +339C +3204 +5204 +9204 +139C +1090 +1090 +1090 +1090 +17FE +1000 +ENDCHAR +STARTCHAR uni4FFA +ENCODING 20474 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1FFE +2220 +2490 +6FF8 +B88C +288A +2FF8 +2888 +2888 +2FF8 +2082 +2082 +207E +ENDCHAR +STARTCHAR uni4FFB +ENCODING 20475 +BBX 15 16 0 -2 +BITMAP +0880 +0880 +09F8 +1208 +1510 +30E0 +3318 +5C06 +93F8 +1248 +1248 +13F8 +1248 +1248 +13F8 +1208 +ENDCHAR +STARTCHAR uni4FFC +ENCODING 20476 +BBX 15 16 0 -2 +BITMAP +0880 +0840 +0FFE +1100 +1208 +37FC +3004 +53F8 +9208 +13F8 +1208 +13F8 +1208 +1208 +1228 +1210 +ENDCHAR +STARTCHAR uni4FFD +ENCODING 20477 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +1710 +243E +2422 +6444 +6790 +A510 +2510 +2510 +2528 +2528 +2528 +2944 +2944 +3082 +ENDCHAR +STARTCHAR uni4FFE +ENCODING 20478 +BBX 15 15 1 -1 +BITMAP +1040 +1080 +17FC +2444 +2444 +67FC +A484 +2484 +27FC +2120 +2220 +2FFE +2020 +2020 +2020 +ENDCHAR +STARTCHAR uni4FFF +ENCODING 20479 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +087C +1040 +13FC +3244 +3270 +53C0 +9244 +123C +1200 +12F0 +1490 +1492 +1912 +120E +ENDCHAR +STARTCHAR uni5000 +ENCODING 20480 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1200 +23F8 +2200 +63F8 +A200 +2200 +2FFE +2244 +2244 +2228 +2290 +2308 +2C06 +ENDCHAR +STARTCHAR uni5001 +ENCODING 20481 +BBX 15 15 1 -1 +BITMAP +1200 +1200 +13DE +2512 +2912 +6112 +A112 +2FF2 +2112 +2112 +2292 +2292 +2452 +241E +2800 +ENDCHAR +STARTCHAR uni5002 +ENCODING 20482 +BBX 15 15 1 -1 +BITMAP +1108 +1108 +1210 +2FBE +2210 +6210 +A210 +2390 +2E3E +2210 +2210 +2210 +2410 +2410 +2810 +ENDCHAR +STARTCHAR uni5003 +ENCODING 20483 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +13D8 +2254 +2452 +6A90 +6110 +A2FE +2C00 +2000 +23F8 +2208 +2208 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni5004 +ENCODING 20484 +BBX 15 16 0 -2 +BITMAP +0908 +0890 +0860 +1198 +1644 +3040 +37FE +5080 +91FC +1304 +15FC +1104 +11FC +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni5005 +ENCODING 20485 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2000 +2208 +6208 +A514 +28A2 +2000 +2040 +2FFE +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni5006 +ENCODING 20486 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +1040 +2040 +2FFE +6842 +A842 +2F7A +294A +2A52 +2B5A +2CE6 +2842 +2842 +284E +ENDCHAR +STARTCHAR uni5007 +ENCODING 20487 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +17FE +2402 +2A04 +6200 +63BC +A4A4 +24A4 +26A4 +2934 +2128 +2222 +2222 +2422 +281E +ENDCHAR +STARTCHAR uni5008 +ENCODING 20488 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +17FC +1040 +3248 +3248 +5248 +9554 +10E0 +1150 +1150 +1248 +1444 +1842 +1040 +ENDCHAR +STARTCHAR uni5009 +ENCODING 20489 +BBX 15 15 1 -1 +BITMAP +0100 +06C0 +1830 +E7CE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +2000 +2FF8 +4808 +8808 +0FF8 +ENDCHAR +STARTCHAR uni500A +ENCODING 20490 +BBX 15 16 0 -2 +BITMAP +0890 +0890 +0908 +1148 +1244 +3492 +3108 +53FC +9044 +1020 +10A4 +1282 +128A +128A +1478 +1000 +ENDCHAR +STARTCHAR uni500B +ENCODING 20491 +BBX 14 15 1 -1 +BITMAP +1000 +17FC +1444 +2444 +27FC +6444 +A444 +25F4 +2514 +2514 +2514 +2514 +25F4 +2404 +27FC +ENDCHAR +STARTCHAR uni500C +ENCODING 20492 +BBX 15 16 0 -2 +BITMAP +0840 +0820 +0BFE +1202 +1404 +31F8 +3108 +5108 +91F8 +1100 +1100 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni500D +ENCODING 20493 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2208 +2108 +6110 +A010 +2FFE +2000 +23F8 +2208 +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni500E +ENCODING 20494 +BBX 15 15 1 -1 +BITMAP +1120 +1120 +1120 +2FFC +2924 +6924 +AFFC +2924 +2924 +2924 +3FFE +2000 +2210 +2408 +2804 +ENDCHAR +STARTCHAR uni500F +ENCODING 20495 +BBX 15 15 1 -1 +BITMAP +1080 +10FC +1104 +2708 +2090 +6860 +A998 +2E16 +2848 +2840 +2FFE +28A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni5010 +ENCODING 20496 +BBX 15 15 1 -1 +BITMAP +1080 +10F8 +1108 +2308 +2890 +6860 +A998 +2E06 +2824 +2924 +2928 +2A20 +2850 +2088 +2306 +ENDCHAR +STARTCHAR uni5011 +ENCODING 20497 +BBX 14 15 1 -1 +BITMAP +1000 +1F7C +1944 +2F7C +2944 +6944 +AF7C +2804 +2804 +2804 +2804 +2804 +2804 +2804 +281C +ENDCHAR +STARTCHAR uni5012 +ENCODING 20498 +BBX 14 15 1 -1 +BITMAP +1004 +1FC4 +1204 +22A4 +24A4 +6564 +AE24 +2224 +2224 +2FA4 +2224 +2204 +23C4 +3C04 +201C +ENDCHAR +STARTCHAR uni5013 +ENCODING 20499 +BBX 15 15 1 -1 +BITMAP +1040 +1244 +1244 +2448 +24A0 +6090 +A108 +2646 +2040 +2244 +24A8 +24A0 +2110 +2208 +2406 +ENDCHAR +STARTCHAR uni5014 +ENCODING 20500 +BBX 14 15 1 -1 +BITMAP +1000 +17FC +1404 +2404 +27FC +6420 +A524 +2524 +25FC +2420 +2820 +2924 +3124 +2124 +21FC +ENDCHAR +STARTCHAR uni5015 +ENCODING 20501 +BBX 15 16 0 -2 +BITMAP +0810 +0878 +0BC0 +1040 +1040 +37FC +3248 +5248 +9FFE +1248 +1248 +17FC +1040 +1040 +17FC +1000 +ENDCHAR +STARTCHAR uni5016 +ENCODING 20502 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2040 +2040 +6FFE +A208 +2110 +2FFE +2040 +2040 +27FC +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni5017 +ENCODING 20503 +BBX 14 16 0 -2 +BITMAP +1000 +17BC +14A4 +24A4 +24A4 +67BC +64A4 +A4A4 +24A4 +27BC +24A4 +24A4 +24A4 +24A4 +2AA4 +314C +ENDCHAR +STARTCHAR uni5018 +ENCODING 20504 +BBX 14 15 1 -1 +BITMAP +1040 +1248 +1248 +2444 +2040 +67FC +A404 +2404 +25F4 +2514 +2514 +25F4 +2404 +2404 +241C +ENDCHAR +STARTCHAR uni5019 +ENCODING 20505 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1008 +2008 +27FE +6900 +A900 +2BFC +2C40 +2840 +2FFE +28A0 +2090 +2108 +2606 +ENDCHAR +STARTCHAR uni501A +ENCODING 20506 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +20A0 +2110 +660C +A000 +2FFE +2008 +27C8 +2448 +2448 +27C8 +2008 +2038 +ENDCHAR +STARTCHAR uni501B +ENCODING 20507 +BBX 15 16 0 -2 +BITMAP +0908 +0908 +0FFE +1108 +1108 +31F8 +3108 +5108 +91F8 +1108 +1108 +17FE +1000 +1090 +1108 +1204 +ENDCHAR +STARTCHAR uni501C +ENCODING 20508 +BBX 14 15 1 -1 +BITMAP +1000 +17FC +1404 +2444 +25F4 +6444 +A5F4 +2444 +2404 +25F4 +2514 +2514 +25F4 +2804 +281C +ENDCHAR +STARTCHAR uni501D +ENCODING 20509 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +FF90 +0810 +7F10 +4110 +7F10 +4110 +7F10 +4910 +0828 +FFA8 +0848 +0844 +0884 +0902 +ENDCHAR +STARTCHAR uni501E +ENCODING 20510 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2000 +23F8 +6208 +A208 +2208 +23F8 +2040 +2248 +2444 +2842 +2040 +21C0 +ENDCHAR +STARTCHAR uni501F +ENCODING 20511 +BBX 15 15 1 -1 +BITMAP +1110 +1110 +17FC +2110 +2110 +6110 +AFFE +2000 +23F8 +2208 +2208 +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni5020 +ENCODING 20512 +BBX 15 16 0 -2 +BITMAP +0940 +0920 +0920 +13FE +1220 +3620 +3BFC +5220 +9220 +13FC +1220 +1220 +1220 +13FE +1200 +1200 +ENDCHAR +STARTCHAR uni5021 +ENCODING 20513 +BBX 14 15 1 -1 +BITMAP +1000 +13F8 +1208 +23F8 +2208 +6208 +A3F8 +2000 +27FC +2404 +2404 +27FC +2404 +2404 +27FC +ENDCHAR +STARTCHAR uni5022 +ENCODING 20514 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2040 +27FC +6044 +AFFE +2044 +27FC +2040 +2240 +227C +2540 +28C0 +307E +ENDCHAR +STARTCHAR uni5023 +ENCODING 20515 +BBX 15 15 1 -1 +BITMAP +2420 +2420 +2420 +7FBE +4844 +4844 +CF84 +4944 +4928 +4928 +4910 +4910 +5128 +5244 +6C82 +ENDCHAR +STARTCHAR uni5024 +ENCODING 20516 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2080 +23F8 +6A08 +ABF8 +2A08 +2A08 +2BF8 +2A08 +2A08 +2BF8 +2800 +2FFE +ENDCHAR +STARTCHAR uni5025 +ENCODING 20517 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2802 +2912 +6110 +A210 +241E +2800 +2000 +27FC +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni5026 +ENCODING 20518 +BBX 15 15 1 -1 +BITMAP +1050 +1150 +1248 +27FC +20A0 +60A0 +AFFE +2110 +23F8 +2D16 +2110 +2170 +2104 +2104 +20FC +ENDCHAR +STARTCHAR uni5027 +ENCODING 20519 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2802 +2802 +63F8 +A000 +2000 +2FFE +2040 +2248 +2248 +2444 +2842 +20C0 +ENDCHAR +STARTCHAR uni5028 +ENCODING 20520 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1404 +2404 +27FC +6420 +A420 +27FE +2420 +2420 +29FC +2904 +3104 +2104 +21FC +ENDCHAR +STARTCHAR uni5029 +ENCODING 20521 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2040 +23F8 +6040 +AFFE +2000 +23F8 +2248 +2248 +23F8 +2208 +2208 +2238 +ENDCHAR +STARTCHAR uni502A +ENCODING 20522 +BBX 15 15 1 -1 +BITMAP +1080 +1100 +163C +2404 +2404 +67BC +A404 +2404 +27FC +2120 +2120 +2220 +2222 +2422 +281E +ENDCHAR +STARTCHAR uni502B +ENCODING 20523 +BBX 15 15 1 -1 +BITMAP +1080 +1140 +1220 +2418 +3BE6 +6000 +A000 +2FFC +2924 +2924 +2FFC +2924 +2924 +2924 +292C +ENDCHAR +STARTCHAR uni502C +ENCODING 20524 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +107C +2040 +23F8 +6208 +A3F8 +2208 +2208 +23F8 +2040 +2FFE +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni502D +ENCODING 20525 +BBX 15 15 1 -1 +BITMAP +1018 +13E0 +1040 +2FFE +2150 +6248 +AC46 +2080 +2FFE +2110 +2210 +2720 +20E0 +2198 +2E04 +ENDCHAR +STARTCHAR uni502E +ENCODING 20526 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1444 +2444 +27FC +6444 +A444 +27FC +2040 +2FFE +2150 +2248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni502F +ENCODING 20527 +BBX 15 16 0 -2 +BITMAP +1208 +1228 +1228 +2228 +2FA4 +6244 +6254 +A692 +2710 +2AA0 +2A20 +3228 +2244 +22FC +2244 +2200 +ENDCHAR +STARTCHAR uni5030 +ENCODING 20528 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FC +2040 +2040 +6FFE +6208 +A484 +2882 +21F8 +2208 +2510 +20A0 +2040 +21B0 +2E0E +ENDCHAR +STARTCHAR uni5031 +ENCODING 20529 +BBX 15 16 0 -2 +BITMAP +1000 +17FC +1404 +2404 +27FC +6404 +6404 +A7FC +2000 +2420 +2422 +27AC +2430 +2422 +25A2 +261E +ENDCHAR +STARTCHAR uni5032 +ENCODING 20530 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1FFE +2040 +2040 +67FC +6444 +A7FC +2444 +27FC +24E4 +2150 +2248 +2444 +3842 +2040 +ENDCHAR +STARTCHAR uni5033 +ENCODING 20531 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1FFE +2040 +27FC +6444 +67FC +A040 +27FC +2044 +3FFE +2044 +27FC +2040 +2140 +2080 +ENDCHAR +STARTCHAR uni5034 +ENCODING 20532 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0FFE +10A0 +1150 +3248 +35F6 +5040 +9150 +1110 +17FE +1110 +1110 +1110 +1210 +1410 +ENDCHAR +STARTCHAR uni5035 +ENCODING 20533 +BBX 15 16 0 -2 +BITMAP +0810 +0818 +0BD4 +1014 +1010 +37FE +3010 +5090 +9090 +12D0 +1290 +1290 +128A +12EA +1706 +1202 +ENDCHAR +STARTCHAR uni5036 +ENCODING 20534 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1208 +23F8 +2208 +6208 +A3F8 +2208 +2208 +23F8 +2000 +2FFE +2100 +2208 +2C06 +ENDCHAR +STARTCHAR uni5037 +ENCODING 20535 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0FFC +10A0 +1110 +3208 +35F6 +5000 +9000 +17FC +1040 +1248 +1244 +1444 +1140 +1080 +ENDCHAR +STARTCHAR uni5038 +ENCODING 20536 +BBX 15 16 0 -2 +BITMAP +0808 +083C +0BC0 +1044 +1224 +3128 +3100 +5020 +93FE +1070 +10A8 +10A8 +1124 +1222 +1420 +1020 +ENDCHAR +STARTCHAR uni5039 +ENCODING 20537 +BBX 15 15 1 -1 +BITMAP +1040 +10A0 +1110 +2208 +2DF6 +6040 +A7FC +2444 +2444 +27FC +2040 +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni503A +ENCODING 20538 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0FFC +1040 +13F8 +3040 +37FE +5000 +93F8 +1208 +1248 +1248 +1248 +10A0 +1110 +1608 +ENDCHAR +STARTCHAR uni503B +ENCODING 20539 +BBX 15 15 1 -1 +BITMAP +1000 +1FDE +1492 +2492 +2792 +6494 +A494 +2792 +2492 +2492 +2492 +279C +2C90 +2090 +2090 +ENDCHAR +STARTCHAR uni503C +ENCODING 20540 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0FFC +1040 +1040 +33F8 +3208 +53F8 +9208 +13F8 +1208 +13F8 +1208 +1208 +1FFE +1000 +ENDCHAR +STARTCHAR uni503D +ENCODING 20541 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +08A0 +1110 +1208 +35F6 +3040 +5040 +97FC +1040 +1040 +13F8 +1208 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni503E +ENCODING 20542 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +1410 +2420 +247C +6444 +6754 +A454 +2454 +2454 +2554 +2654 +2420 +2028 +2044 +2082 +ENDCHAR +STARTCHAR uni503F +ENCODING 20543 +BBX 15 16 0 -2 +BITMAP +0880 +0840 +0BFC +1000 +1108 +3090 +37FE +5040 +9040 +17FE +1088 +1108 +1090 +1060 +1198 +1604 +ENDCHAR +STARTCHAR uni5040 +ENCODING 20544 +BBX 15 15 1 -1 +BITMAP +1110 +1110 +1FFE +2110 +2110 +6040 +A7FC +2444 +2444 +2444 +2FFE +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni5041 +ENCODING 20545 +BBX 15 15 1 -1 +BITMAP +101C +17E0 +1448 +2424 +2884 +67F8 +A488 +2488 +27F8 +2488 +2488 +2FFE +2408 +2408 +2418 +ENDCHAR +STARTCHAR uni5042 +ENCODING 20546 +BBX 15 15 1 -1 +BITMAP +1208 +1108 +1110 +2FFE +2000 +6784 +A4A4 +26A4 +25A4 +24A4 +26A4 +25A4 +2484 +2484 +258C +ENDCHAR +STARTCHAR uni5043 +ENCODING 20547 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +1800 +29F8 +2908 +69F8 +A908 +29F8 +2840 +2FFE +2888 +2990 +28F0 +2B08 +2FFE +ENDCHAR +STARTCHAR uni5044 +ENCODING 20548 +BBX 15 16 0 -2 +BITMAP +1000 +17FC +1040 +2080 +27FC +64A4 +64A4 +A4A4 +2484 +244C +2040 +2FFE +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni5045 +ENCODING 20549 +BBX 15 16 0 -2 +BITMAP +1008 +103C +17C0 +2040 +2FFE +6040 +67FC +A444 +27FC +2444 +27FC +2040 +27FC +2040 +2FFE +2000 +ENDCHAR +STARTCHAR uni5046 +ENCODING 20550 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2040 +23F8 +60A0 +A7FE +2110 +23F8 +260C +2A0A +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni5047 +ENCODING 20551 +BBX 15 15 1 -1 +BITMAP +1000 +1F7C +1904 +2904 +2904 +6F7C +A800 +28FC +2F44 +2844 +2828 +2F28 +2810 +2828 +28C6 +ENDCHAR +STARTCHAR uni5048 +ENCODING 20552 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1208 +23F8 +2208 +6208 +A3F8 +2100 +23FE +2442 +3C42 +24A2 +2512 +27E2 +201C +ENDCHAR +STARTCHAR uni5049 +ENCODING 20553 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +13F8 +2088 +27FE +6000 +63F8 +A208 +23F8 +2010 +27FC +2110 +2FFE +2010 +2010 +ENDCHAR +STARTCHAR uni504A +ENCODING 20554 +BBX 15 16 0 -2 +BITMAP +0804 +081E +0BE0 +1020 +11FC +3124 +3124 +51FC +9020 +13FE +1222 +122A +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni504B +ENCODING 20555 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0A04 +1204 +13FC +3200 +3284 +5248 +92FC +1248 +1248 +13FE +1448 +1448 +1888 +1108 +ENDCHAR +STARTCHAR uni504C +ENCODING 20556 +BBX 15 16 0 -2 +BITMAP +1108 +1108 +17FE +2108 +2148 +6040 +67FE +A080 +2100 +23FC +2504 +2904 +2104 +2104 +21FC +2104 +ENDCHAR +STARTCHAR uni504D +ENCODING 20557 +BBX 15 16 0 -2 +BITMAP +0800 +0BF8 +0A08 +1208 +13F8 +3208 +3208 +53F8 +9000 +17FE +1040 +1240 +1278 +1240 +1540 +18FE +ENDCHAR +STARTCHAR uni504E +ENCODING 20558 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1248 +23F8 +2248 +6248 +A3F8 +2000 +2FFE +2244 +2244 +2228 +2210 +2388 +2E06 +ENDCHAR +STARTCHAR uni504F +ENCODING 20559 +BBX 14 15 1 -1 +BITMAP +1000 +1FFC +1000 +27F8 +2408 +6408 +A7F8 +2400 +27FC +2D24 +2D24 +37FC +2524 +2524 +240C +ENDCHAR +STARTCHAR uni5050 +ENCODING 20560 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2208 +2110 +6FFE +A830 +29C0 +2800 +2818 +28E0 +2802 +3004 +2038 +23C0 +ENDCHAR +STARTCHAR uni5051 +ENCODING 20561 +BBX 15 16 0 -2 +BITMAP +2000 +2FF8 +2808 +4868 +4B88 +4888 +C888 +4BE8 +4AA8 +4AA8 +4BE8 +488A +48AA +50EA +5726 +6002 +ENDCHAR +STARTCHAR uni5052 +ENCODING 20562 +BBX 15 16 0 -2 +BITMAP +0800 +0BF8 +0A08 +13F8 +1208 +33F8 +3000 +5FFE +9200 +13FC +1494 +1924 +1244 +1484 +1128 +1210 +ENDCHAR +STARTCHAR uni5053 +ENCODING 20563 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1404 +2404 +27FC +6400 +A5FC +2440 +2498 +25E4 +2820 +29FC +3020 +2020 +23FE +ENDCHAR +STARTCHAR uni5054 +ENCODING 20564 +BBX 15 16 0 -2 +BITMAP +0800 +0BDE +0A52 +1252 +13DE +3000 +31FC +5000 +97FE +1080 +1100 +11FC +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni5055 +ENCODING 20565 +BBX 15 15 1 -1 +BITMAP +1420 +1426 +17B8 +2420 +2422 +6722 +AC5E +2080 +27FC +2404 +2404 +27FC +2404 +2404 +27FC +ENDCHAR +STARTCHAR uni5056 +ENCODING 20566 +BBX 15 15 1 -1 +BITMAP +1080 +1084 +17FC +2088 +2088 +6090 +AFFE +2090 +23F8 +2608 +3A08 +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni5057 +ENCODING 20567 +BBX 15 15 1 -1 +BITMAP +1040 +1148 +1244 +2CD2 +2020 +6040 +A1FC +2F04 +21FC +2104 +2104 +21FC +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni5058 +ENCODING 20568 +BBX 14 16 0 -2 +BITMAP +0800 +0BF8 +0A08 +1208 +1208 +3208 +33F8 +5000 +9000 +17BC +14A4 +14A4 +14A4 +14A4 +17BC +14A4 +ENDCHAR +STARTCHAR uni5059 +ENCODING 20569 +BBX 15 16 0 -2 +BITMAP +0880 +0840 +0BFC +1000 +1108 +3090 +37FE +5442 +9844 +13FC +1244 +1244 +1254 +1248 +1040 +1040 +ENDCHAR +STARTCHAR uni505A +ENCODING 20570 +BBX 15 15 1 -1 +BITMAP +1020 +1220 +1220 +227E +3F88 +6288 +A228 +2228 +2F30 +2910 +2910 +2928 +2F28 +2044 +2082 +ENDCHAR +STARTCHAR uni505B +ENCODING 20571 +BBX 15 16 0 -2 +BITMAP +1008 +103C +17C0 +2040 +2040 +6FFE +6040 +A140 +265C +2444 +2444 +275C +2444 +2444 +27FC +2404 +ENDCHAR +STARTCHAR uni505C +ENCODING 20572 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2000 +23F8 +6208 +A3F8 +2000 +2FFE +2802 +23F8 +2040 +2040 +2040 +21C0 +ENDCHAR +STARTCHAR uni505D +ENCODING 20573 +BBX 15 16 0 -2 +BITMAP +0890 +0892 +0F9C +1090 +1192 +368E +3000 +53FC +9204 +13FC +1204 +13FC +1204 +1204 +1214 +1208 +ENDCHAR +STARTCHAR uni505E +ENCODING 20574 +BBX 15 16 0 -2 +BITMAP +0890 +0A90 +0A90 +17FE +1290 +3290 +32F0 +5200 +93FC +1040 +17FE +10E0 +1150 +1248 +1C46 +1040 +ENDCHAR +STARTCHAR uni505F +ENCODING 20575 +BBX 14 16 0 -2 +BITMAP +0840 +0880 +0BF8 +1208 +13F8 +3208 +33F8 +5000 +97FC +1040 +1040 +13F8 +1040 +1040 +17FC +1000 +ENDCHAR +STARTCHAR uni5060 +ENCODING 20576 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +0850 +1050 +13FE +3252 +3252 +53FE +9000 +1040 +17FE +1088 +1190 +1060 +10D8 +1304 +ENDCHAR +STARTCHAR uni5061 +ENCODING 20577 +BBX 15 16 0 -2 +BITMAP +0908 +0908 +0FFE +1108 +11F8 +3108 +31F8 +5108 +9108 +17FE +1250 +1288 +1304 +1200 +13FC +1000 +ENDCHAR +STARTCHAR uni5062 +ENCODING 20578 +BBX 15 16 0 -2 +BITMAP +1390 +1E10 +1210 +2212 +2252 +6FD4 +6258 +A690 +2710 +2AA8 +2A28 +3228 +2248 +2244 +2284 +2302 +ENDCHAR +STARTCHAR uni5063 +ENCODING 20579 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2208 +2108 +6110 +AFFE +2000 +23F8 +2208 +2208 +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni5064 +ENCODING 20580 +BBX 15 16 0 -2 +BITMAP +0908 +0888 +0890 +17FE +1090 +3090 +33FC +5294 +9294 +130C +1204 +13FC +1204 +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni5065 +ENCODING 20581 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1EFC +2424 +25FE +6824 +BEFC +2220 +2AF8 +2A20 +25FC +2420 +2620 +29A0 +307E +ENDCHAR +STARTCHAR uni5066 +ENCODING 20582 +BBX 15 15 1 -1 +BITMAP +1000 +17FE +1042 +2278 +2240 +67C0 +A43E +2800 +23FC +2204 +23FC +2204 +23FC +2204 +221C +ENDCHAR +STARTCHAR uni5067 +ENCODING 20583 +BBX 15 16 0 -2 +BITMAP +1000 +1080 +17FC +2110 +2208 +6C86 +61F8 +A610 +2160 +21A0 +2E7E +2184 +2648 +2030 +20C0 +2F00 +ENDCHAR +STARTCHAR uni5068 +ENCODING 20584 +BBX 15 16 0 -2 +BITMAP +1120 +1124 +15A8 +2530 +2524 +65A4 +6E1C +A040 +2040 +27FC +20E0 +2150 +2248 +2C46 +2040 +2040 +ENDCHAR +STARTCHAR uni5069 +ENCODING 20585 +BBX 15 16 0 -2 +BITMAP +0900 +0900 +0BF8 +1208 +1410 +3BFC +3204 +53FC +9204 +13FC +1204 +13FC +1000 +1108 +1204 +1402 +ENDCHAR +STARTCHAR uni506A +ENCODING 20586 +BBX 14 15 1 -1 +BITMAP +1000 +17FC +1000 +23F8 +2208 +6208 +A3F8 +2000 +27FC +2444 +2444 +27FC +2444 +2444 +27FC +ENDCHAR +STARTCHAR uni506B +ENCODING 20587 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +1210 +247C +2910 +6110 +62FE +A608 +2A08 +22FE +2208 +2248 +2228 +2208 +2228 +2210 +ENDCHAR +STARTCHAR uni506C +ENCODING 20588 +BBX 15 15 1 -1 +BITMAP +1200 +1200 +13FC +24A4 +2BA4 +6144 +A264 +2488 +2108 +2030 +2040 +2524 +2522 +288A +2878 +ENDCHAR +STARTCHAR uni506D +ENCODING 20589 +BBX 15 16 0 -2 +BITMAP +0800 +0FFE +0840 +1080 +13FC +3294 +3294 +52F4 +9294 +1294 +12F4 +1294 +1294 +1294 +13FC +1204 +ENDCHAR +STARTCHAR uni506E +ENCODING 20590 +BBX 15 16 0 -2 +BITMAP +0800 +09F8 +0908 +1108 +11F8 +3000 +37FE +5108 +91F8 +1108 +11F8 +1108 +113E +17C8 +1008 +1008 +ENDCHAR +STARTCHAR uni506F +ENCODING 20591 +BBX 15 16 0 -2 +BITMAP +0880 +0840 +0FFE +1000 +13F8 +3208 +3208 +5208 +93F8 +10A4 +1128 +1310 +1510 +1948 +1186 +1100 +ENDCHAR +STARTCHAR uni5070 +ENCODING 20592 +BBX 15 15 1 -1 +BITMAP +1200 +13BC +1E14 +2394 +2E14 +6214 +A3A4 +2E24 +2248 +2040 +2FFE +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni5071 +ENCODING 20593 +BBX 15 16 0 -2 +BITMAP +103C +17E0 +1420 +2420 +27FE +6420 +65FC +A504 +2504 +25FC +2504 +25FC +2904 +2904 +31FC +2104 +ENDCHAR +STARTCHAR uni5072 +ENCODING 20594 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1444 +2444 +27FC +6444 +A444 +2444 +27FC +2080 +2444 +2522 +2502 +288A +2878 +ENDCHAR +STARTCHAR uni5073 +ENCODING 20595 +BBX 15 16 0 -2 +BITMAP +1040 +1444 +1444 +2444 +27FC +6000 +6FFE +A040 +2080 +27FC +24A4 +24A4 +24A4 +24A4 +24A4 +240C +ENDCHAR +STARTCHAR uni5074 +ENCODING 20596 +BBX 14 15 1 -1 +BITMAP +2004 +2F84 +28A4 +28A4 +4FA4 +48A4 +C8A4 +4FA4 +48A4 +48A4 +48A4 +4FA4 +4404 +4884 +505C +ENDCHAR +STARTCHAR uni5075 +ENCODING 20597 +BBX 15 15 1 -1 +BITMAP +1080 +10FC +1080 +27F8 +2408 +6408 +A7F8 +2408 +2408 +27F8 +2408 +2408 +27F8 +2210 +2C0E +ENDCHAR +STARTCHAR uni5076 +ENCODING 20598 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1444 +27FC +2444 +6444 +A7FC +2040 +2FFE +2842 +2852 +2872 +2B8A +2802 +280E +ENDCHAR +STARTCHAR uni5077 +ENCODING 20599 +BBX 15 16 0 -2 +BITMAP +0840 +08A0 +0910 +1208 +15F6 +3000 +33C4 +5254 +9254 +13D4 +1254 +1254 +13D4 +1244 +1254 +12C8 +ENDCHAR +STARTCHAR uni5078 +ENCODING 20600 +BBX 15 15 1 -1 +BITMAP +1040 +10A0 +1318 +3C06 +23F0 +6000 +AF92 +2892 +2E92 +29A4 +28A4 +2EA4 +2992 +2892 +2992 +ENDCHAR +STARTCHAR uni5079 +ENCODING 20601 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +10FC +1088 +3550 +5420 +94D8 +1706 +14F8 +14A8 +14A8 +14A8 +14F8 +10A8 +10A8 +10F8 +ENDCHAR +STARTCHAR uni507A +ENCODING 20602 +BBX 15 16 0 -2 +BITMAP +0910 +0910 +0BD8 +1254 +1452 +3A90 +3110 +52FE +9C00 +13F8 +1208 +1208 +13F8 +1208 +1208 +13F8 +ENDCHAR +STARTCHAR uni507B +ENCODING 20603 +BBX 15 16 0 -2 +BITMAP +0820 +0924 +08A8 +1020 +13FE +30A8 +3124 +5202 +9040 +17FE +1088 +1108 +1190 +1060 +1198 +1604 +ENDCHAR +STARTCHAR uni507C +ENCODING 20604 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +087E +1040 +13FC +3004 +31FC +5004 +93FC +1040 +1240 +127C +1240 +1540 +14FE +1800 +ENDCHAR +STARTCHAR uni507D +ENCODING 20605 +BBX 15 15 1 -1 +BITMAP +1210 +1120 +17F8 +2108 +2110 +61FC +A204 +2208 +27FE +2802 +3012 +254A +2522 +2802 +201C +ENDCHAR +STARTCHAR uni507E +ENCODING 20606 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FC +2040 +2248 +6FFE +6208 +A000 +27FC +2404 +2444 +2444 +2444 +20B0 +230C +2C02 +ENDCHAR +STARTCHAR uni507F +ENCODING 20607 +BBX 15 16 0 -2 +BITMAP +0840 +0A48 +0950 +1040 +17FE +3402 +3804 +51F0 +9000 +1000 +17FC +1080 +1110 +1208 +17FC +1204 +ENDCHAR +STARTCHAR uni5080 +ENCODING 20608 +BBX 15 15 1 -1 +BITMAP +1040 +1080 +17FC +2444 +2444 +67FC +A444 +2444 +27FC +2124 +212A +223E +2220 +2422 +381E +ENDCHAR +STARTCHAR uni5081 +ENCODING 20609 +BBX 15 16 0 -2 +BITMAP +1140 +165C +1444 +2444 +275C +6444 +6444 +A7FC +2040 +27FC +2208 +2110 +20A0 +2040 +21B0 +2E0E +ENDCHAR +STARTCHAR uni5082 +ENCODING 20610 +BBX 15 16 0 -2 +BITMAP +1004 +103E +17E0 +243E +2420 +65FE +6522 +A538 +25E2 +251E +2500 +2978 +2A48 +324A +248A +2906 +ENDCHAR +STARTCHAR uni5083 +ENCODING 20611 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0FFC +1040 +13F8 +3040 +37FE +5080 +9110 +13E0 +1048 +17FC +1044 +1248 +1544 +1080 +ENDCHAR +STARTCHAR uni5084 +ENCODING 20612 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1FFE +2444 +22A8 +6110 +6208 +AC06 +23F8 +2208 +23F8 +2208 +23F8 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni5085 +ENCODING 20613 +BBX 15 15 1 -1 +BITMAP +1048 +1044 +1FFE +2040 +27FC +6444 +A7FC +2444 +27FC +2444 +2008 +2FFE +2108 +2088 +2038 +ENDCHAR +STARTCHAR uni5086 +ENCODING 20614 +BBX 15 16 0 -2 +BITMAP +1000 +17FE +1420 +2440 +25FC +6504 +65FC +A504 +25FC +2524 +2420 +24A8 +2924 +2A22 +30A0 +2040 +ENDCHAR +STARTCHAR uni5087 +ENCODING 20615 +BBX 15 16 0 -2 +BITMAP +0908 +0908 +0FFE +1108 +1000 +37FE +3108 +51F8 +9108 +11F8 +1108 +113E +17C8 +1008 +1008 +1008 +ENDCHAR +STARTCHAR uni5088 +ENCODING 20616 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +1120 +2120 +2FFC +6924 +A924 +2FFC +2040 +3FFE +2150 +2248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni5089 +ENCODING 20617 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +0A00 +12FC +1200 +33FE +32A8 +5290 +92C8 +1286 +1208 +13FE +1288 +1448 +1408 +1818 +ENDCHAR +STARTCHAR uni508A +ENCODING 20618 +BBX 14 16 0 -2 +BITMAP +0800 +09F8 +0908 +1108 +11F8 +3000 +33FC +5204 +93FC +1204 +13FC +1204 +13FC +1090 +1108 +1204 +ENDCHAR +STARTCHAR uni508B +ENCODING 20619 +BBX 15 16 0 -2 +BITMAP +0910 +0910 +0FFC +1110 +13F8 +3110 +37FC +5040 +93F8 +1248 +13F8 +1248 +17FE +1208 +1228 +1210 +ENDCHAR +STARTCHAR uni508C +ENCODING 20620 +BBX 14 16 0 -2 +BITMAP +0800 +0BFC +0A40 +13F8 +1240 +33F8 +3240 +5240 +93FC +1004 +1554 +1554 +1554 +1404 +1028 +1010 +ENDCHAR +STARTCHAR uni508D +ENCODING 20621 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2208 +2110 +6FFE +A842 +2040 +2FFE +2080 +20FC +2104 +2104 +2204 +2438 +ENDCHAR +STARTCHAR uni508E +ENCODING 20622 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FC +2040 +23F8 +6208 +63F8 +A208 +23F8 +2208 +23F8 +2208 +2FFE +2110 +2208 +2404 +ENDCHAR +STARTCHAR uni508F +ENCODING 20623 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +17FE +2420 +25FC +6424 +67FE +A424 +25FC +2420 +25FC +2504 +2504 +2904 +29FC +3104 +ENDCHAR +STARTCHAR uni5090 +ENCODING 20624 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +17FE +2000 +23F8 +6208 +63F8 +A000 +27FC +2404 +25F4 +2514 +25F4 +2404 +2414 +2408 +ENDCHAR +STARTCHAR uni5091 +ENCODING 20625 +BBX 15 15 1 -1 +BITMAP +2410 +2710 +29FC +4950 +5550 +42FE +C410 +5890 +4080 +5FFE +42A0 +4490 +4888 +5084 +4080 +ENDCHAR +STARTCHAR uni5092 +ENCODING 20626 +BBX 15 15 1 -1 +BITMAP +103C +17D0 +1488 +2444 +2880 +6110 +A220 +2148 +209C +27E2 +2040 +2FFE +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni5093 +ENCODING 20627 +BBX 15 15 1 -1 +BITMAP +101C +17E0 +1400 +27FC +2404 +67FC +A400 +27FE +2442 +24CE +2772 +28C6 +2B7A +2042 +21CE +ENDCHAR +STARTCHAR uni5094 +ENCODING 20628 +BBX 15 15 1 -1 +BITMAP +1088 +1110 +1FFE +2120 +27FC +6124 +AFFE +2124 +2124 +27FC +2120 +2330 +2528 +2924 +2120 +ENDCHAR +STARTCHAR uni5095 +ENCODING 20629 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +17FE +2482 +248A +6110 +A3FC +2620 +2BFC +2220 +2220 +23FC +2220 +2220 +23FE +ENDCHAR +STARTCHAR uni5096 +ENCODING 20630 +BBX 15 15 1 -1 +BITMAP +1040 +10A0 +1318 +2CE6 +2000 +63F8 +A208 +23F8 +2208 +23F8 +2400 +25FC +2904 +2104 +21FC +ENDCHAR +STARTCHAR uni5097 +ENCODING 20631 +BBX 15 16 0 -2 +BITMAP +0880 +0840 +0FFC +1080 +1108 +33F0 +3060 +5184 +97FE +1002 +17FC +1444 +17FC +1444 +17FC +1404 +ENDCHAR +STARTCHAR uni5098 +ENCODING 20632 +BBX 15 15 1 -1 +BITMAP +0100 +06C0 +1830 +E10E +1110 +2928 +4544 +1110 +2928 +4544 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5099 +ENCODING 20633 +BBX 15 15 1 -1 +BITMAP +1210 +1210 +1FFE +2210 +2210 +6FFE +A800 +2BFC +2A44 +2BFC +2A44 +2BFC +2A44 +3244 +224C +ENDCHAR +STARTCHAR uni509A +ENCODING 20634 +BBX 15 15 1 -1 +BITMAP +2420 +2420 +2420 +5F3E +4A44 +CAC4 +5144 +6A48 +4A28 +4A28 +4410 +4410 +4A28 +5144 +4182 +ENDCHAR +STARTCHAR uni509B +ENCODING 20635 +BBX 15 16 0 -2 +BITMAP +0840 +0820 +0BFE +1202 +1494 +3108 +3264 +5090 +9108 +1204 +15FA +1108 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni509C +ENCODING 20636 +BBX 15 15 1 -1 +BITMAP +1080 +10F8 +1188 +2650 +2160 +6180 +AE00 +23FC +2440 +2040 +2FFE +2040 +2444 +2444 +27FC +ENDCHAR +STARTCHAR uni509D +ENCODING 20637 +BBX 14 16 0 -2 +BITMAP +0800 +0BF8 +0A08 +13F8 +1208 +33F8 +3000 +5000 +97BC +1084 +14A4 +1294 +14A4 +1084 +1294 +1108 +ENDCHAR +STARTCHAR uni509E +ENCODING 20638 +BBX 15 16 0 -2 +BITMAP +0908 +0888 +0890 +13FC +1040 +31F8 +3040 +53FE +9080 +1100 +11FC +1220 +1420 +1820 +13FE +1000 +ENDCHAR +STARTCHAR uni509F +ENCODING 20639 +BBX 15 16 0 -2 +BITMAP +0920 +0910 +0A08 +1486 +1910 +33F8 +3008 +5000 +97BC +1084 +14A4 +1294 +14A4 +1084 +1294 +1108 +ENDCHAR +STARTCHAR uni50A0 +ENCODING 20640 +BBX 15 16 0 -2 +BITMAP +1204 +1104 +1104 +2FC4 +203E +6784 +6004 +A7A4 +2014 +2794 +2484 +2484 +2484 +2784 +2494 +2008 +ENDCHAR +STARTCHAR uni50A1 +ENCODING 20641 +BBX 15 16 0 -2 +BITMAP +1410 +1208 +1208 +2FBE +2000 +6082 +68A2 +A8A2 +2492 +2512 +2514 +2114 +2204 +2188 +2E3E +2400 +ENDCHAR +STARTCHAR uni50A2 +ENCODING 20642 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +17FC +2404 +2000 +63F8 +6080 +A144 +2668 +20B0 +2128 +2668 +20A4 +2122 +26A0 +2040 +ENDCHAR +STARTCHAR uni50A3 +ENCODING 20643 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2040 +27FC +60A0 +AFFE +2110 +2208 +2C46 +2348 +20F0 +2358 +2C46 +20C0 +ENDCHAR +STARTCHAR uni50A4 +ENCODING 20644 +BBX 15 16 0 -2 +BITMAP +1110 +1114 +17D2 +2110 +2FFE +6210 +6210 +AFD4 +2414 +2914 +2FD4 +2108 +21CA +2F1A +2526 +2142 +ENDCHAR +STARTCHAR uni50A5 +ENCODING 20645 +BBX 15 16 0 -2 +BITMAP +0840 +0A48 +0950 +1040 +17FE +3402 +3804 +53F8 +9208 +1208 +13F8 +10A0 +1120 +1124 +1224 +141C +ENDCHAR +STARTCHAR uni50A6 +ENCODING 20646 +BBX 15 16 0 -2 +BITMAP +0800 +09F8 +0908 +11E8 +1128 +37FE +3402 +51F8 +9108 +11F8 +1108 +11F8 +1108 +1108 +1128 +1110 +ENDCHAR +STARTCHAR uni50A7 +ENCODING 20647 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +17FE +2402 +2814 +63E0 +6200 +A200 +23FC +2210 +2210 +2FFE +2000 +2110 +2208 +2404 +ENDCHAR +STARTCHAR uni50A8 +ENCODING 20648 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +18FA +2424 +2428 +61FE +6020 +BC40 +24FC +2544 +2644 +247C +2544 +2644 +247C +2044 +ENDCHAR +STARTCHAR uni50A9 +ENCODING 20649 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +1740 +217E +21C8 +6948 +657E +A548 +2248 +227E +2548 +2548 +2948 +207E +2040 +2040 +ENDCHAR +STARTCHAR uni50AA +ENCODING 20650 +BBX 15 15 1 -1 +BITMAP +1080 +1120 +15D8 +2408 +2916 +7EBA +A040 +20A0 +2318 +2CC6 +2300 +2060 +2188 +2030 +27C0 +ENDCHAR +STARTCHAR uni50AB +ENCODING 20651 +BBX 15 16 0 -2 +BITMAP +1000 +17FC +1444 +27FC +2444 +67FC +6100 +A210 +27E0 +20C8 +2304 +2FFE +2042 +2248 +2544 +2882 +ENDCHAR +STARTCHAR uni50AC +ENCODING 20652 +BBX 15 15 1 -1 +BITMAP +1040 +1444 +17FC +2220 +2240 +67FC +A440 +2C40 +37FC +2440 +2440 +27FC +2440 +2440 +27FE +ENDCHAR +STARTCHAR uni50AD +ENCODING 20653 +BBX 15 15 1 -1 +BITMAP +1020 +17FE +1420 +25FC +2424 +67FE +A424 +25FC +2524 +25FC +2524 +29FC +2924 +2124 +212C +ENDCHAR +STARTCHAR uni50AE +ENCODING 20654 +BBX 15 16 0 -2 +BITMAP +08A0 +08A0 +0FFE +10A0 +17FC +34A4 +37FC +54A4 +97FC +1000 +13F8 +1208 +13F8 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni50AF +ENCODING 20655 +BBX 15 16 0 -2 +BITMAP +0840 +0880 +0BFC +1244 +12F4 +3314 +32A4 +5244 +92A4 +13FC +1040 +1024 +1522 +150A +1908 +10F8 +ENDCHAR +STARTCHAR uni50B0 +ENCODING 20656 +BBX 14 16 0 -2 +BITMAP +1040 +1444 +1444 +27FC +2000 +67BC +64A4 +A4A4 +27BC +24A4 +24A4 +27BC +24A4 +24A4 +2AB4 +3148 +ENDCHAR +STARTCHAR uni50B1 +ENCODING 20657 +BBX 15 15 1 -1 +BITMAP +1244 +1244 +1444 +24AA +28AA +6210 +A210 +2490 +249C +2C90 +2490 +2490 +24D0 +24B0 +251E +ENDCHAR +STARTCHAR uni50B2 +ENCODING 20658 +BBX 15 15 1 -1 +BITMAP +1210 +1210 +1F90 +223E +2224 +7FC4 +A244 +2228 +3FA8 +2428 +2710 +2510 +2928 +2944 +3682 +ENDCHAR +STARTCHAR uni50B3 +ENCODING 20659 +BBX 15 15 1 -1 +BITMAP +1040 +1FFE +1040 +27FC +2444 +67FC +A444 +27FC +2048 +2FFC +200A +2FFE +2208 +2108 +2038 +ENDCHAR +STARTCHAR uni50B4 +ENCODING 20660 +BBX 15 15 1 -1 +BITMAP +1000 +17FE +1400 +24F8 +2488 +6488 +A4F8 +2400 +25DC +2554 +2554 +2554 +25DC +2400 +27FE +ENDCHAR +STARTCHAR uni50B5 +ENCODING 20661 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2040 +23F8 +6040 +AFFE +2000 +23F8 +2208 +23F8 +2208 +23F8 +2110 +260C +ENDCHAR +STARTCHAR uni50B6 +ENCODING 20662 +BBX 15 16 0 -2 +BITMAP +1014 +1012 +1010 +27FE +2410 +6490 +64D2 +A492 +27F2 +2494 +2494 +25C8 +2AAA +289A +31A6 +2042 +ENDCHAR +STARTCHAR uni50B7 +ENCODING 20663 +BBX 15 15 1 -1 +BITMAP +1200 +13FE +1400 +2BF8 +2208 +63F8 +A208 +23F8 +2000 +2FFE +2200 +27FE +2C92 +2122 +264C +ENDCHAR +STARTCHAR uni50B8 +ENCODING 20664 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FC +2040 +2554 +6248 +6554 +A040 +2554 +2248 +2554 +20A0 +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni50B9 +ENCODING 20665 +BBX 15 16 0 -2 +BITMAP +0880 +0840 +0BF8 +1110 +10A0 +37FE +3000 +53F8 +9208 +13F8 +1208 +13F8 +1120 +1122 +1222 +1C1E +ENDCHAR +STARTCHAR uni50BA +ENCODING 20666 +BBX 15 15 1 -1 +BITMAP +1200 +13BC +1644 +2D44 +22A8 +6110 +A3F8 +2C06 +2000 +27FC +2040 +2248 +2444 +2842 +20C0 +ENDCHAR +STARTCHAR uni50BB +ENCODING 20667 +BBX 15 15 1 -1 +BITMAP +1040 +17FC +1514 +24E4 +2514 +67FC +A210 +2490 +288E +21F8 +2708 +2090 +2060 +21D8 +2E06 +ENDCHAR +STARTCHAR uni50BC +ENCODING 20668 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +17FE +2110 +21F0 +6040 +63F8 +A248 +23F8 +2040 +27FC +2040 +2FFE +20A0 +2110 +260C +ENDCHAR +STARTCHAR uni50BD +ENCODING 20669 +BBX 15 16 0 -2 +BITMAP +1040 +17FC +1110 +20A0 +2FFE +6000 +63F8 +A208 +23F8 +2208 +23F8 +2040 +2FFE +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni50BE +ENCODING 20670 +BBX 14 15 1 -1 +BITMAP +2000 +23FC +3040 +51F8 +5508 +D9F8 +5108 +5108 +51F8 +5508 +5508 +4DF8 +4080 +4118 +4604 +ENDCHAR +STARTCHAR uni50BF +ENCODING 20671 +BBX 15 16 0 -2 +BITMAP +1000 +17FC +1040 +2278 +2240 +6FFE +6100 +A1FC +2200 +23FC +2004 +2554 +2554 +2804 +2028 +2010 +ENDCHAR +STARTCHAR uni50C0 +ENCODING 20672 +BBX 15 16 0 -2 +BITMAP +12A8 +12A8 +17FC +22A8 +22AA +64E6 +6800 +A7FC +2444 +2040 +23F8 +2248 +2248 +2248 +2258 +2040 +ENDCHAR +STARTCHAR uni50C1 +ENCODING 20673 +BBX 15 16 0 -2 +BITMAP +1008 +103C +17C0 +2040 +2248 +6150 +6FFE +A150 +2248 +2C46 +2080 +2044 +2A42 +2A12 +31F0 +2000 +ENDCHAR +STARTCHAR uni50C2 +ENCODING 20674 +BBX 15 15 1 -1 +BITMAP +1040 +17FC +1444 +2FFE +2444 +67FC +A040 +27FC +2444 +27FC +2080 +2FFE +2108 +21F8 +2F06 +ENDCHAR +STARTCHAR uni50C3 +ENCODING 20675 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +1FFE +2110 +2400 +67FC +6804 +B7F4 +2494 +27F4 +2494 +27F4 +2494 +2494 +2434 +2008 +ENDCHAR +STARTCHAR uni50C4 +ENCODING 20676 +BBX 15 15 1 -1 +BITMAP +1000 +17FE +1120 +27FC +2524 +6524 +A7FC +2000 +23F8 +2000 +27FE +2040 +2248 +2C46 +21C0 +ENDCHAR +STARTCHAR uni50C5 +ENCODING 20677 +BBX 15 15 1 -1 +BITMAP +1110 +1FFE +1110 +2000 +27FC +6444 +A444 +27FC +2040 +23F8 +2040 +23F8 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni50C6 +ENCODING 20678 +BBX 15 16 0 -2 +BITMAP +1020 +1820 +15FE +2420 +21FC +6124 +6DFC +A524 +25FC +2420 +25FE +2420 +2420 +2A20 +31FE +2000 +ENDCHAR +STARTCHAR uni50C7 +ENCODING 20679 +BBX 15 15 1 -1 +BITMAP +1000 +17BE +118A +2296 +25AA +6292 +A440 +21B0 +2E0E +2040 +2390 +2064 +2388 +2030 +23C0 +ENDCHAR +STARTCHAR uni50C8 +ENCODING 20680 +BBX 15 16 0 -2 +BITMAP +13F8 +1208 +13F8 +2208 +23F8 +6000 +67FC +A4A4 +24A4 +27FC +2000 +23F8 +2110 +20E0 +2318 +2C06 +ENDCHAR +STARTCHAR uni50C9 +ENCODING 20681 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0C60 +3018 +CFE6 +0000 +3EF8 +2288 +2288 +3EF8 +0000 +0820 +1450 +2088 +C106 +ENDCHAR +STARTCHAR uni50CA +ENCODING 20682 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +1120 +2FFC +2924 +6FFC +A100 +3FFE +2210 +27F8 +3A16 +23F0 +2204 +2204 +21FC +ENDCHAR +STARTCHAR uni50CB +ENCODING 20683 +BBX 15 16 0 -2 +BITMAP +0840 +08A0 +0910 +1248 +1DF6 +3020 +3040 +53F8 +9208 +13F8 +1208 +13F8 +1208 +13F8 +1110 +1208 +ENDCHAR +STARTCHAR uni50CC +ENCODING 20684 +BBX 15 15 1 -1 +BITMAP +1210 +1210 +1FD0 +223E +2FA4 +6AC4 +AFA4 +2AA4 +2AA8 +2FA8 +2210 +3FD0 +2218 +2224 +22C2 +ENDCHAR +STARTCHAR uni50CD +ENCODING 20685 +BBX 15 15 1 -1 +BITMAP +2190 +2E10 +2210 +5F90 +427E +DF92 +5292 +5F92 +5292 +5F92 +4212 +5F92 +4222 +43A2 +5C4C +ENDCHAR +STARTCHAR uni50CE +ENCODING 20686 +BBX 15 15 1 -1 +BITMAP +1000 +17BE +14A2 +27BE +2420 +64A2 +A39E +2110 +27FC +2110 +2110 +2FFE +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni50CF +ENCODING 20687 +BBX 15 15 1 -1 +BITMAP +1100 +13F0 +1420 +2FFC +2444 +6444 +A7FC +21C2 +2EA4 +2128 +3E60 +20B0 +2328 +3C46 +21C0 +ENDCHAR +STARTCHAR uni50D0 +ENCODING 20688 +BBX 15 15 1 -1 +BITMAP +1208 +1110 +17FC +2040 +23F8 +6040 +A7FC +2248 +2150 +2FFE +2000 +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni50D1 +ENCODING 20689 +BBX 15 15 1 -1 +BITMAP +1038 +17C0 +1080 +3FFE +2210 +67F8 +BA16 +23F0 +2000 +2FFC +2804 +2BF4 +2A14 +2BF4 +280C +ENDCHAR +STARTCHAR uni50D2 +ENCODING 20690 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +17FC +2514 +2208 +63F8 +6088 +A7FE +2088 +23F8 +2100 +23F8 +2508 +2908 +21F8 +2108 +ENDCHAR +STARTCHAR uni50D3 +ENCODING 20691 +BBX 15 16 0 -2 +BITMAP +0840 +0BF8 +0A48 +13F8 +1040 +37FE +3000 +53F8 +9208 +13F8 +1208 +13F8 +1208 +13F8 +1110 +1208 +ENDCHAR +STARTCHAR uni50D4 +ENCODING 20692 +BBX 15 15 1 -1 +BITMAP +1278 +1404 +1BFA +20A0 +27FC +64A4 +A73C +2404 +27FC +2404 +27FC +2008 +2FFE +2208 +2138 +ENDCHAR +STARTCHAR uni50D5 +ENCODING 20693 +BBX 15 15 1 -1 +BITMAP +14A4 +12A4 +12A8 +27FC +2110 +60A0 +A7FC +2040 +23F8 +2040 +2FFE +2040 +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni50D6 +ENCODING 20694 +BBX 15 15 1 -1 +BITMAP +1040 +17FE +1040 +23FC +2000 +63FC +A204 +23FC +2108 +27FE +2000 +23FC +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni50D7 +ENCODING 20695 +BBX 15 16 0 -2 +BITMAP +0888 +0AAA +0ADC +1488 +1154 +3222 +3000 +53FE +9242 +1444 +13FC +1044 +1044 +1084 +1114 +1208 +ENDCHAR +STARTCHAR uni50D8 +ENCODING 20696 +BBX 15 16 0 -2 +BITMAP +2208 +3248 +2A48 +4A90 +421E +5FE4 +D054 +5054 +5754 +5554 +5554 +5548 +5748 +5054 +5154 +50A2 +ENDCHAR +STARTCHAR uni50D9 +ENCODING 20697 +BBX 15 15 1 -1 +BITMAP +1110 +17FC +1110 +21F0 +2000 +6FFE +A040 +27F8 +2448 +27F8 +2448 +2448 +27F8 +2210 +2C0C +ENDCHAR +STARTCHAR uni50DA +ENCODING 20698 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +20A0 +2514 +6208 +A7FC +2A0A +23F8 +2208 +23F8 +2040 +2248 +2C46 +21C0 +ENDCHAR +STARTCHAR uni50DB +ENCODING 20699 +BBX 15 16 0 -2 +BITMAP +1510 +1510 +1510 +2F90 +253E +6722 +6544 +A790 +2510 +2510 +2F90 +2028 +2528 +28A4 +3044 +2082 +ENDCHAR +STARTCHAR uni50DC +ENCODING 20700 +BBX 15 16 0 -2 +BITMAP +1020 +17A4 +10A8 +2292 +2114 +6208 +65F4 +A802 +23F8 +2208 +2208 +23F8 +2208 +2110 +2FFE +2000 +ENDCHAR +STARTCHAR uni50DD +ENCODING 20701 +BBX 15 16 0 -2 +BITMAP +17FC +1404 +17FC +2400 +25F8 +6410 +67FE +A420 +2460 +279C +2484 +2508 +29DE +2F08 +3108 +2318 +ENDCHAR +STARTCHAR uni50DE +ENCODING 20702 +BBX 15 15 1 -1 +BITMAP +1030 +17C8 +1244 +2420 +2FF8 +6408 +A7FC +2404 +2404 +27FE +282A +2A96 +3252 +2442 +241C +ENDCHAR +STARTCHAR uni50DF +ENCODING 20703 +BBX 15 16 0 -2 +BITMAP +1248 +1248 +1554 +275C +2248 +6554 +675C +A248 +2FFE +2220 +2228 +2228 +2514 +2494 +242C +2844 +ENDCHAR +STARTCHAR uni50E0 +ENCODING 20704 +BBX 15 16 0 -2 +BITMAP +0878 +0FC0 +0A48 +1150 +17FC +3150 +3248 +5406 +93F8 +1248 +1248 +13F8 +1248 +1248 +13F8 +1208 +ENDCHAR +STARTCHAR uni50E1 +ENCODING 20705 +BBX 15 15 1 -1 +BITMAP +1040 +1FFE +1040 +27FC +2444 +67FC +A444 +27FC +2044 +2FFE +2082 +2248 +2A44 +320A +21F8 +ENDCHAR +STARTCHAR uni50E2 +ENCODING 20706 +BBX 15 16 0 -2 +BITMAP +103C +17C0 +1044 +2224 +2108 +67FE +6402 +AA08 +2208 +23BE +2488 +2AA8 +213E +2208 +2408 +2808 +ENDCHAR +STARTCHAR uni50E3 +ENCODING 20707 +BBX 15 15 1 -1 +BITMAP +1208 +1208 +1F3C +2208 +3F7E +6618 +A92A +3046 +27F8 +2408 +2408 +27F8 +2408 +2408 +27F8 +ENDCHAR +STARTCHAR uni50E4 +ENCODING 20708 +BBX 15 16 0 -2 +BITMAP +0800 +0BDE +0A52 +1252 +13DE +3000 +31FC +5124 +91FC +1124 +11FC +1020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni50E5 +ENCODING 20709 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +13F8 +2040 +27FC +6208 +AFBE +2208 +2388 +2E3E +2000 +2FFE +2110 +2112 +2E0E +ENDCHAR +STARTCHAR uni50E6 +ENCODING 20710 +BBX 15 15 1 -1 +BITMAP +1214 +1212 +1212 +2F90 +207E +6F90 +A890 +2898 +2FA8 +2228 +2B28 +2AA8 +324A +224A +2686 +ENDCHAR +STARTCHAR uni50E7 +ENCODING 20711 +BBX 14 15 1 -1 +BITMAP +1208 +1108 +1110 +27FC +2444 +67FC +A444 +27FC +2000 +23F8 +2208 +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni50E8 +ENCODING 20712 +BBX 15 16 0 -2 +BITMAP +1040 +17FC +1040 +2110 +2FFE +6110 +63F8 +A208 +23F8 +2208 +23F8 +2208 +23F8 +2110 +2208 +2404 +ENDCHAR +STARTCHAR uni50E9 +ENCODING 20713 +BBX 15 15 1 -1 +BITMAP +1000 +1FBE +18A2 +2FBE +28A2 +6FBE +A802 +29F2 +2912 +29F2 +2912 +29F2 +2912 +2932 +280E +ENDCHAR +STARTCHAR uni50EA +ENCODING 20714 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0848 +1030 +13FE +3052 +3094 +5350 +9020 +13FE +1252 +128A +1376 +1252 +1272 +1206 +ENDCHAR +STARTCHAR uni50EB +ENCODING 20715 +BBX 15 16 0 -2 +BITMAP +0800 +0FFE +0890 +1090 +139C +3204 +3204 +539C +9090 +1090 +17FE +1040 +1524 +150A +190A +10F8 +ENDCHAR +STARTCHAR uni50EC +ENCODING 20716 +BBX 15 16 0 -2 +BITMAP +1140 +1120 +13FE +2220 +2620 +6BFC +6220 +A220 +23FC +2220 +2220 +23FE +2200 +2524 +2492 +2892 +ENDCHAR +STARTCHAR uni50ED +ENCODING 20717 +BBX 15 15 1 -1 +BITMAP +1208 +1208 +1F7C +2A28 +3F7E +6618 +AB2A +3246 +27F8 +2408 +2408 +27F8 +2408 +2408 +27F8 +ENDCHAR +STARTCHAR uni50EE +ENCODING 20718 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FC +2110 +2FFE +6000 +A3F8 +2248 +23F8 +2248 +23F8 +2040 +27FC +2040 +2FFE +ENDCHAR +STARTCHAR uni50EF +ENCODING 20719 +BBX 15 16 0 -2 +BITMAP +1040 +1248 +1150 +27FC +2150 +6248 +6444 +A208 +2208 +23BE +2488 +2AA8 +213E +2208 +2408 +2808 +ENDCHAR +STARTCHAR uni50F0 +ENCODING 20720 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +FEFE +1010 +FEFE +9292 +9292 +3838 +5454 +9292 +1010 +1110 +0280 +0C60 +3018 +C006 +ENDCHAR +STARTCHAR uni50F1 +ENCODING 20721 +BBX 15 16 0 -2 +BITMAP +0840 +0820 +0BFE +1202 +1202 +33FE +3250 +5248 +92FE +1390 +12FE +1290 +14FE +1490 +18FE +1080 +ENDCHAR +STARTCHAR uni50F2 +ENCODING 20722 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +1120 +2FFC +2924 +6924 +AFFC +2208 +2388 +22BE +24A8 +2BA8 +217E +2208 +2C08 +ENDCHAR +STARTCHAR uni50F3 +ENCODING 20723 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +10A0 +27FC +24A4 +64A4 +A7FC +2248 +2150 +2FFE +2150 +2248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni50F4 +ENCODING 20724 +BBX 14 16 0 -2 +BITMAP +1000 +17BC +14A4 +27BC +24A4 +67BC +6404 +A5F4 +2514 +25F4 +2514 +25F4 +2514 +2404 +2414 +2408 +ENDCHAR +STARTCHAR uni50F5 +ENCODING 20725 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +1000 +23F8 +2248 +63F8 +A248 +2FFE +2000 +23F8 +2248 +23F8 +2248 +2248 +2FFE +ENDCHAR +STARTCHAR uni50F6 +ENCODING 20726 +BBX 15 16 0 -2 +BITMAP +1000 +17FC +14A4 +24A4 +27BC +60A0 +67BC +A4A4 +24A4 +27BC +24A4 +24A4 +27BC +24A2 +20A2 +207E +ENDCHAR +STARTCHAR uni50F7 +ENCODING 20727 +BBX 15 16 0 -2 +BITMAP +1108 +17FE +1108 +2000 +2488 +6FFE +6488 +A4F8 +2400 +27FC +2040 +2FFE +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni50F8 +ENCODING 20728 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +17BC +2110 +23B8 +6554 +6912 +A000 +23F8 +2000 +27FC +2040 +2248 +2444 +2942 +2080 +ENDCHAR +STARTCHAR uni50F9 +ENCODING 20729 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +1120 +2FFC +2924 +6FFC +A000 +27F8 +2408 +27F8 +2408 +27F8 +2100 +2630 +380C +ENDCHAR +STARTCHAR uni50FA +ENCODING 20730 +BBX 15 16 0 -2 +BITMAP +13F8 +1208 +1208 +23F8 +2000 +67BC +64A4 +A4A4 +27BC +2040 +2FFE +2160 +2250 +2448 +3846 +2040 +ENDCHAR +STARTCHAR uni50FB +ENCODING 20731 +BBX 15 15 1 -1 +BITMAP +2010 +2F10 +297C +4900 +4944 +4924 +CF28 +48FE +4F10 +4910 +597C +5910 +6910 +4F10 +4010 +ENDCHAR +STARTCHAR uni50FC +ENCODING 20732 +BBX 15 16 0 -2 +BITMAP +10A0 +10A0 +17FC +24A4 +27FC +64A4 +67FC +A000 +27FC +2000 +23F8 +2208 +23F8 +2110 +20A0 +2FFE +ENDCHAR +STARTCHAR uni50FD +ENCODING 20733 +BBX 15 16 0 -2 +BITMAP +10C8 +1708 +112A +212C +2FC8 +6108 +6388 +A554 +2914 +2122 +2040 +2024 +2522 +250A +2908 +20F8 +ENDCHAR +STARTCHAR uni50FE +ENCODING 20734 +BBX 15 16 0 -2 +BITMAP +083C +0BC0 +0844 +1224 +1108 +37FE +3442 +52A4 +928A +147A +1080 +10F8 +1108 +1290 +1060 +179E +ENDCHAR +STARTCHAR uni50FF +ENCODING 20735 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +17FE +2512 +2BFC +6110 +67FC +A110 +27FE +2110 +2248 +25F4 +2842 +2040 +27FC +2000 +ENDCHAR +STARTCHAR uni5100 +ENCODING 20736 +BBX 15 15 1 -1 +BITMAP +1210 +1120 +17FC +2040 +27F8 +6040 +BFFE +2128 +2E24 +2220 +3FFE +2214 +3F98 +222A +2644 +ENDCHAR +STARTCHAR uni5101 +ENCODING 20737 +BBX 15 15 1 -1 +BITMAP +1220 +1240 +17FE +2440 +2FFC +7440 +A7FC +2440 +27FE +2000 +27BC +24A4 +24E4 +2404 +241C +ENDCHAR +STARTCHAR uni5102 +ENCODING 20738 +BBX 15 15 1 -1 +BITMAP +1120 +17FC +1524 +27FC +2524 +67FC +A000 +2FFE +2800 +2BFC +2800 +2FFE +2928 +29D0 +370E +ENDCHAR +STARTCHAR uni5103 +ENCODING 20739 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +2404 +25F4 +6514 +A5F4 +2404 +27FC +2000 +23F8 +2208 +23F8 +2208 +2FFE +ENDCHAR +STARTCHAR uni5104 +ENCODING 20740 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1FFC +2220 +3FFE +6000 +A7F8 +2408 +27F8 +2408 +27F8 +2080 +2A44 +2A12 +31F0 +ENDCHAR +STARTCHAR uni5105 +ENCODING 20741 +BBX 15 16 0 -2 +BITMAP +1040 +1248 +1150 +27FE +2402 +6804 +63F8 +A208 +23F8 +2000 +27FC +2444 +27FC +2444 +27FC +2404 +ENDCHAR +STARTCHAR uni5106 +ENCODING 20742 +BBX 15 15 1 -1 +BITMAP +2A20 +2A20 +3FA0 +4A3E +4A44 +5044 +DF84 +5104 +7D48 +5528 +5510 +5510 +5D28 +4244 +4682 +ENDCHAR +STARTCHAR uni5107 +ENCODING 20743 +BBX 15 16 0 -2 +BITMAP +0800 +0BFC +0A94 +1294 +13FC +3000 +37FE +5000 +93FC +1204 +13FC +10A2 +1114 +1308 +1D44 +1182 +ENDCHAR +STARTCHAR uni5108 +ENCODING 20744 +BBX 15 15 1 -1 +BITMAP +1040 +10A0 +1318 +2DF6 +2000 +67FC +A554 +24E4 +27FC +2000 +23F8 +2208 +23F8 +2208 +23F8 +ENDCHAR +STARTCHAR uni5109 +ENCODING 20745 +BBX 15 15 1 -1 +BITMAP +1040 +10A0 +1318 +2C06 +21F0 +6000 +A7BC +24A4 +24A4 +27BC +2000 +2208 +2208 +2514 +28A2 +ENDCHAR +STARTCHAR uni510A +ENCODING 20746 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +17BC +2110 +23B8 +6554 +6912 +A000 +27FC +2044 +2240 +2278 +2240 +2540 +28FE +3000 +ENDCHAR +STARTCHAR uni510B +ENCODING 20747 +BBX 15 15 1 -1 +BITMAP +1080 +11F8 +1210 +2FFE +2488 +670E +A4F8 +2400 +27FE +2400 +24F8 +2400 +25FC +2904 +21FC +ENDCHAR +STARTCHAR uni510C +ENCODING 20748 +BBX 15 16 0 -2 +BITMAP +1210 +1410 +1F90 +2890 +2FBE +68A4 +6FD4 +A414 +2214 +2FD4 +2414 +2788 +2488 +2894 +2A94 +3122 +ENDCHAR +STARTCHAR uni510D +ENCODING 20749 +BBX 15 16 0 -2 +BITMAP +0820 +0888 +0A52 +1326 +1252 +328A +3222 +53FE +9088 +1144 +127A +1088 +1150 +1020 +10D8 +1706 +ENDCHAR +STARTCHAR uni510E +ENCODING 20750 +BBX 15 16 0 -2 +BITMAP +1114 +17D2 +1110 +2FFE +2110 +6FD0 +6112 +A7D2 +2552 +27D4 +2554 +27C8 +210A +2FDA +2126 +2142 +ENDCHAR +STARTCHAR uni510F +ENCODING 20751 +BBX 15 16 0 -2 +BITMAP +1080 +10DC +1284 +23D4 +2448 +6A94 +6324 +AC40 +2248 +2150 +27FC +20E0 +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni5110 +ENCODING 20752 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +17FE +2402 +2BFC +6148 +6250 +A7FC +2204 +27FC +2A04 +23FC +2204 +23FC +2108 +2204 +ENDCHAR +STARTCHAR uni5111 +ENCODING 20753 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +0A02 +13FE +1202 +33FE +3108 +5252 +939C +1108 +1252 +13DE +1000 +12A4 +1252 +1452 +ENDCHAR +STARTCHAR uni5112 +ENCODING 20754 +BBX 14 15 1 -1 +BITMAP +1000 +17F8 +1080 +2FFC +2884 +6EB4 +A884 +26B0 +2000 +2FFC +2040 +2FFC +2924 +2924 +292C +ENDCHAR +STARTCHAR uni5113 +ENCODING 20755 +BBX 15 16 0 -2 +BITMAP +1040 +1FFE +1040 +27FC +2000 +63F8 +6208 +AFFE +2802 +27FC +2110 +23F8 +2040 +27FC +2040 +2FFE +ENDCHAR +STARTCHAR uni5114 +ENCODING 20756 +BBX 15 15 1 -1 +BITMAP +1040 +17FC +1040 +23F8 +2000 +6FFE +A042 +27FC +2000 +2FFE +2004 +2F7E +2924 +2F04 +200C +ENDCHAR +STARTCHAR uni5115 +ENCODING 20757 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1FFE +20A0 +2F5E +6554 +A554 +2B5A +2000 +2208 +23F8 +2208 +23F8 +2408 +2808 +ENDCHAR +STARTCHAR uni5116 +ENCODING 20758 +BBX 15 15 1 -1 +BITMAP +1010 +1F90 +1910 +2FBE +28A0 +6FC0 +A900 +2F9E +2000 +23F8 +22A8 +22A8 +22A8 +22A8 +2FFE +ENDCHAR +STARTCHAR uni5117 +ENCODING 20759 +BBX 15 15 1 -1 +BITMAP +1400 +14BC +1704 +2428 +2490 +63BE +A412 +2714 +2A50 +225C +2F50 +2250 +2350 +24B0 +288E +ENDCHAR +STARTCHAR uni5118 +ENCODING 20760 +BBX 15 15 1 -1 +BITMAP +1040 +13F8 +1048 +2FFE +2048 +63F8 +A040 +2FFE +2524 +2892 +2000 +27FC +2524 +2524 +2FFE +ENDCHAR +STARTCHAR uni5119 +ENCODING 20761 +BBX 15 16 0 -2 +BITMAP +1010 +14FE +1292 +22FE +2010 +61FE +6000 +AEFE +2282 +22FE +2280 +22FE +2282 +22FE +2500 +28FE +ENDCHAR +STARTCHAR uni511A +ENCODING 20762 +BBX 15 15 1 -1 +BITMAP +1110 +1FFE +1110 +27FC +24A4 +67FC +A000 +2FFE +2882 +29FA +2308 +24C8 +2030 +2060 +2780 +ENDCHAR +STARTCHAR uni511B +ENCODING 20763 +BBX 15 15 1 -1 +BITMAP +1200 +1200 +17FC +2AA8 +2FFE +62A8 +A2A8 +27FC +2208 +23BC +24A8 +2AA8 +217E +2208 +2C08 +ENDCHAR +STARTCHAR uni511C +ENCODING 20764 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +17FC +2444 +22A8 +6294 +6474 +A000 +23F8 +22A8 +2FFE +2000 +27FC +2040 +2140 +2080 +ENDCHAR +STARTCHAR uni511D +ENCODING 20765 +BBX 15 16 0 -2 +BITMAP +1110 +1554 +15B8 +2910 +22A8 +6444 +6000 +A7FC +2444 +2040 +27FC +20E0 +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni511E +ENCODING 20766 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +1248 +2444 +2FFE +6444 +A6EC +2554 +26EC +2444 +26EC +2554 +26EC +2444 +241C +ENDCHAR +STARTCHAR uni511F +ENCODING 20767 +BBX 15 15 1 -1 +BITMAP +1444 +1248 +1FFE +2A0A +2BFA +6000 +A7FC +2404 +27FC +2404 +27FC +2404 +27FC +2318 +2C06 +ENDCHAR +STARTCHAR uni5120 +ENCODING 20768 +BBX 15 16 0 -2 +BITMAP +0924 +0A48 +0924 +1000 +13FC +3294 +3264 +5294 +93FC +1248 +1368 +1248 +136A +124A +1246 +1362 +ENDCHAR +STARTCHAR uni5121 +ENCODING 20769 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1248 +23F8 +2248 +6248 +A3F8 +2000 +2FBE +2AAA +2AAA +2FBE +2AAA +2AAA +2FBE +ENDCHAR +STARTCHAR uni5122 +ENCODING 20770 +BBX 15 16 0 -2 +BITMAP +1020 +103E +1020 +27FE +2422 +65F8 +6422 +A5FE +2524 +25FC +2524 +25FC +2840 +2AA4 +328A +247A +ENDCHAR +STARTCHAR uni5123 +ENCODING 20771 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +17FE +2488 +25FC +6488 +67FE +A420 +25FC +2524 +25FC +2524 +29FC +2888 +3104 +2202 +ENDCHAR +STARTCHAR uni5124 +ENCODING 20772 +BBX 15 16 0 -2 +BITMAP +0BF8 +0A08 +0BF8 +1208 +13F8 +3110 +37FC +5110 +9FFE +1110 +1248 +1554 +10E0 +1150 +1248 +10C0 +ENDCHAR +STARTCHAR uni5125 +ENCODING 20773 +BBX 15 16 0 -2 +BITMAP +0820 +0BFE +0820 +11FC +1000 +33FE +3252 +53FE +9104 +11FC +1104 +11FC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni5126 +ENCODING 20774 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +17FC +24A0 +27FC +64A4 +67FC +A400 +2524 +25A8 +2530 +25A4 +251C +2800 +2AA4 +3452 +ENDCHAR +STARTCHAR uni5127 +ENCODING 20775 +BBX 15 16 0 -2 +BITMAP +1208 +1FBE +1208 +2FBE +2208 +6514 +68A2 +A7FC +2404 +27FC +2404 +27FC +2404 +27FC +2110 +2208 +ENDCHAR +STARTCHAR uni5128 +ENCODING 20776 +BBX 15 16 0 -2 +BITMAP +0842 +0B9C +0A10 +13DE +1294 +3294 +3420 +53FC +9204 +13FC +1204 +13FC +1204 +13FC +1108 +1204 +ENDCHAR +STARTCHAR uni5129 +ENCODING 20777 +BBX 15 16 0 -2 +BITMAP +1000 +1F7C +1944 +297C +2F44 +6944 +697C +AF20 +297E +29AA +2F2A +204A +2A92 +2922 +294A +3104 +ENDCHAR +STARTCHAR uni512A +ENCODING 20778 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +1040 +23F8 +2208 +63F8 +A208 +2FFE +2AAA +247C +2100 +23FC +2D08 +20F0 +2F0E +ENDCHAR +STARTCHAR uni512B +ENCODING 20779 +BBX 15 16 0 -2 +BITMAP +1040 +17FE +1000 +21F8 +2108 +61F8 +6000 +A7FE +2402 +23F8 +2180 +2644 +21B8 +2668 +21A6 +2E60 +ENDCHAR +STARTCHAR uni512C +ENCODING 20780 +BBX 15 16 0 -2 +BITMAP +1200 +123C +1FA4 +2224 +2FBC +6224 +7FE4 +A03C +2FA4 +28A4 +2FBC +2890 +2F98 +28A8 +28AA +29C6 +ENDCHAR +STARTCHAR uni512D +ENCODING 20781 +BBX 15 16 0 -2 +BITMAP +1400 +123C +1FA4 +2024 +28BC +6524 +6FA4 +A23C +2224 +2FA4 +223C +2B10 +2A98 +32A8 +2A2A +2446 +ENDCHAR +STARTCHAR uni512E +ENCODING 20782 +BBX 15 16 0 -2 +BITMAP +1000 +17FE +1444 +2598 +2488 +67DE +6488 +A5DC +26AA +2488 +2420 +2520 +253C +2920 +2920 +37FE +ENDCHAR +STARTCHAR uni512F +ENCODING 20783 +BBX 15 16 0 -2 +BITMAP +1248 +1150 +17FC +2080 +2FFE +6208 +67FC +AA42 +23F8 +2240 +23F8 +2240 +23FC +2004 +2554 +2008 +ENDCHAR +STARTCHAR uni5130 +ENCODING 20784 +BBX 15 16 0 -2 +BITMAP +1110 +1FFE +1110 +203C +2FC0 +6488 +6250 +A7F8 +2408 +27FC +2404 +27FE +2802 +2AAA +32AA +2004 +ENDCHAR +STARTCHAR uni5131 +ENCODING 20785 +BBX 15 16 0 -2 +BITMAP +1420 +1220 +1FBE +2520 +223E +7F82 +603E +AFA0 +28BE +2FA0 +28BE +2FA0 +28BE +28A0 +28A2 +299E +ENDCHAR +STARTCHAR uni5132 +ENCODING 20786 +BBX 15 15 1 -1 +BITMAP +1020 +1E24 +10FC +2E24 +2028 +6E28 +A1FE +2E28 +207C +20C4 +2F44 +2A7C +2A44 +2A44 +2E7C +ENDCHAR +STARTCHAR uni5133 +ENCODING 20787 +BBX 15 16 0 -2 +BITMAP +09F0 +0A10 +0FFC +1204 +13FC +3224 +33B8 +5222 +91FE +1210 +17FC +1244 +13FC +10D0 +114A +163E +ENDCHAR +STARTCHAR uni5134 +ENCODING 20788 +BBX 15 16 0 -2 +BITMAP +1040 +17FC +1000 +23B8 +22A8 +63B8 +6110 +A7FC +2110 +27FC +2110 +2FFE +2128 +2310 +2D48 +2186 +ENDCHAR +STARTCHAR uni5135 +ENCODING 20789 +BBX 15 15 1 -1 +BITMAP +1100 +13FE +1608 +21F0 +2A08 +6FFE +AB58 +2AE8 +2BF8 +2840 +2BF8 +2040 +2FFE +2524 +2892 +ENDCHAR +STARTCHAR uni5136 +ENCODING 20790 +BBX 15 16 0 -2 +BITMAP +0A22 +0BFE +0890 +11FE +1310 +35FE +3110 +51FE +9110 +11FE +1100 +13FE +128A +1376 +1252 +1276 +ENDCHAR +STARTCHAR uni5137 +ENCODING 20791 +BBX 15 15 1 -1 +BITMAP +1000 +1FBE +1000 +2FBE +2AAA +6040 +AFFE +2920 +2FFC +2924 +2FFC +2A20 +2BBC +2A22 +379E +ENDCHAR +STARTCHAR uni5138 +ENCODING 20792 +BBX 15 16 0 -2 +BITMAP +1000 +17FC +14A4 +24A4 +27FC +6210 +62A8 +A4BE +2F68 +223C +24A8 +2FBC +2028 +2AA8 +2ABE +2020 +ENDCHAR +STARTCHAR uni5139 +ENCODING 20793 +BBX 15 16 0 -2 +BITMAP +1528 +17BE +1948 +27BE +2318 +65AA +6946 +A3FC +2204 +23FC +2204 +23FC +2204 +23FC +2108 +2204 +ENDCHAR +STARTCHAR uni513A +ENCODING 20794 +BBX 15 15 1 -1 +BITMAP +2A24 +3FA4 +2A28 +407E +5F48 +D5C8 +557E +5F48 +4448 +5F48 +447E +5F48 +4448 +4A48 +517E +ENDCHAR +STARTCHAR uni513B +ENCODING 20795 +BBX 15 15 1 -1 +BITMAP +1444 +1248 +1FFE +2A0A +2BFA +6000 +A3F8 +2248 +2358 +22E8 +23F8 +2040 +2FFE +2524 +2892 +ENDCHAR +STARTCHAR uni513C +ENCODING 20796 +BBX 15 15 1 -1 +BITMAP +2000 +2F3C +2924 +4F3C +4000 +DFFE +5010 +5790 +521E +5FE4 +54A4 +5794 +5488 +5794 +5CA2 +ENDCHAR +STARTCHAR uni513D +ENCODING 20797 +BBX 15 16 0 -2 +BITMAP +17FC +1444 +17FC +2444 +2FFE +6AAA +6FBE +AAAA +2FBE +2220 +27C0 +2084 +2FFE +2042 +2548 +2884 +ENDCHAR +STARTCHAR uni513E +ENCODING 20798 +BBX 15 16 0 -2 +BITMAP +1040 +17FC +1248 +23F8 +2040 +6FFE +6AAA +A3B8 +2110 +27FC +2110 +2FFE +2128 +2310 +2D48 +2186 +ENDCHAR +STARTCHAR uni513F +ENCODING 20799 +BBX 15 14 1 -1 +BITMAP +0440 +0440 +0440 +0440 +0440 +0440 +0440 +0440 +0440 +0840 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni5140 +ENCODING 20800 +BBX 15 14 1 -1 +BITMAP +FFFE +0440 +0440 +0440 +0440 +0440 +0440 +0440 +0440 +0840 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni5141 +ENCODING 20801 +BBX 15 15 1 -1 +BITMAP +0200 +0220 +0410 +0808 +11FC +7E44 +0440 +0440 +0440 +0440 +0840 +0842 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni5142 +ENCODING 20802 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +7FFC +0100 +1100 +1100 +2100 +3FFE +0280 +0480 +0480 +0884 +1084 +207C +C000 +ENDCHAR +STARTCHAR uni5143 +ENCODING 20803 +BBX 15 14 1 -1 +BITMAP +3FF0 +0000 +0000 +0000 +0000 +FFFC +0840 +0840 +0840 +1040 +1040 +2042 +4042 +803E +ENDCHAR +STARTCHAR uni5144 +ENCODING 20804 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1010 +1010 +1010 +1010 +1FF0 +0240 +0240 +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni5145 +ENCODING 20805 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +7FF8 +0400 +0480 +0840 +11E0 +7F10 +0900 +0900 +0900 +1100 +1104 +2104 +C0FC +ENDCHAR +STARTCHAR uni5146 +ENCODING 20806 +BBX 15 15 1 -1 +BITMAP +0480 +0488 +4490 +24A0 +14C0 +0480 +0480 +1CE0 +6498 +8486 +0880 +0880 +1082 +2042 +C03E +ENDCHAR +STARTCHAR uni5147 +ENCODING 20807 +BBX 15 15 1 -1 +BITMAP +0020 +2428 +2448 +2288 +2108 +2688 +3848 +2008 +3FF8 +0440 +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni5148 +ENCODING 20808 +BBX 14 15 2 -1 +BITMAP +0200 +2200 +2200 +3FF0 +4200 +8200 +0200 +FFF8 +0880 +0880 +0880 +1080 +1084 +2084 +C07C +ENDCHAR +STARTCHAR uni5149 +ENCODING 20809 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +1108 +0910 +0920 +0100 +FFFE +0440 +0440 +0440 +0840 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni514A +ENCODING 20810 +BBX 15 15 1 -1 +BITMAP +03C0 +0040 +0820 +3018 +C446 +0420 +09F0 +7E08 +0008 +0440 +0440 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni514B +ENCODING 20811 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +0100 +1FF0 +1010 +1010 +1010 +1FF0 +0480 +0480 +0882 +3082 +C07E +ENDCHAR +STARTCHAR uni514C +ENCODING 20812 +BBX 15 15 1 -1 +BITMAP +00C0 +0440 +0820 +1010 +7FEC +1020 +1020 +1020 +1020 +1FE0 +0440 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni514D +ENCODING 20813 +BBX 15 15 1 -1 +BITMAP +0400 +0400 +0FE0 +1040 +6080 +3FF8 +2108 +2108 +2108 +3FF8 +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni514E +ENCODING 20814 +BBX 15 14 1 -1 +BITMAP +0070 +3F80 +0100 +0100 +3FF8 +2108 +2208 +3FF8 +0490 +0488 +0880 +1082 +2082 +C07E +ENDCHAR +STARTCHAR uni514F +ENCODING 20815 +BBX 15 16 0 -2 +BITMAP +0010 +00F8 +1F80 +1080 +10F8 +1080 +1080 +1080 +1FFE +1120 +1120 +1120 +2222 +2222 +441E +9800 +ENDCHAR +STARTCHAR uni5150 +ENCODING 20816 +BBX 15 14 1 -1 +BITMAP +23F8 +2208 +2208 +23F8 +2208 +2208 +2208 +23F8 +2000 +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni5151 +ENCODING 20817 +BBX 13 16 1 -2 +BITMAP +2020 +1040 +0880 +0000 +3FE0 +2020 +2020 +2020 +3FE0 +28A0 +0880 +0880 +1088 +1088 +2088 +C078 +ENDCHAR +STARTCHAR uni5152 +ENCODING 20818 +BBX 15 15 1 -1 +BITMAP +0100 +0600 +3878 +2008 +2008 +3CF8 +2008 +2008 +2008 +3FF8 +0480 +0480 +0882 +3082 +C07E +ENDCHAR +STARTCHAR uni5153 +ENCODING 20819 +BBX 15 15 0 -2 +BITMAP +7EFE +0810 +0810 +4890 +4890 +4890 +7EFE +0810 +0810 +1428 +1428 +2548 +264A +448A +8106 +ENDCHAR +STARTCHAR uni5154 +ENCODING 20820 +BBX 15 15 1 -1 +BITMAP +0400 +0FF0 +1040 +2080 +FFF8 +2108 +2108 +2208 +3FF8 +0480 +0490 +0888 +1082 +2082 +C07E +ENDCHAR +STARTCHAR uni5155 +ENCODING 20821 +BBX 15 14 1 -1 +BITMAP +3C78 +2448 +2448 +2448 +27C8 +2008 +2008 +3FF8 +0440 +0440 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni5156 +ENCODING 20822 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0820 +1110 +2208 +4444 +0820 +1FF0 +0450 +0440 +0840 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni5157 +ENCODING 20823 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0000 +03E0 +0820 +1FF0 +2818 +C816 +0FF0 +0240 +0240 +0442 +1842 +603E +ENDCHAR +STARTCHAR uni5158 +ENCODING 20824 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +0048 +0084 +01FE +FE02 +2400 +24FC +2484 +2484 +24FC +2484 +2402 +4402 +43FE +8000 +ENDCHAR +STARTCHAR uni5159 +ENCODING 20825 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +FF10 +0810 +0810 +7F7E +4110 +4110 +7F10 +1410 +1410 +1410 +2412 +2402 +43FE +8000 +ENDCHAR +STARTCHAR uni515A +ENCODING 20826 +BBX 15 15 1 -1 +BITMAP +2108 +1110 +0920 +7FFC +4004 +4FE4 +4824 +0820 +0820 +0FE0 +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni515B +ENCODING 20827 +BBX 15 16 0 -2 +BITMAP +0808 +081C +FF70 +0810 +0810 +7F10 +41FE +4110 +7F10 +1410 +1410 +1410 +2412 +2402 +43FE +8000 +ENDCHAR +STARTCHAR uni515C +ENCODING 20828 +BBX 15 15 1 -1 +BITMAP +1100 +221C +CFC4 +8844 +8844 +8FC4 +8844 +8844 +EFDC +0000 +0880 +0880 +1080 +2082 +C07E +ENDCHAR +STARTCHAR uni515D +ENCODING 20829 +BBX 15 16 0 -2 +BITMAP +0808 +0828 +FF24 +0844 +0842 +7F80 +417C +4124 +7F24 +1444 +1444 +1494 +250A +2402 +43FE +8000 +ENDCHAR +STARTCHAR uni515E +ENCODING 20830 +BBX 15 16 0 -2 +BITMAP +0838 +08E0 +FF20 +0838 +08E0 +7F20 +413C +41E0 +7F24 +1424 +1424 +141C +2402 +2402 +43FE +8000 +ENDCHAR +STARTCHAR uni515F +ENCODING 20831 +BBX 15 16 0 -2 +BITMAP +0810 +2850 +2850 +3E7C +4890 +0810 +0810 +7EFE +1428 +1428 +1428 +1428 +254A +264A +4486 +8100 +ENDCHAR +STARTCHAR uni5160 +ENCODING 20832 +BBX 15 15 1 -1 +BITMAP +1110 +1212 +17D4 +F458 +1450 +17D0 +1450 +3452 +D7D2 +100E +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni5161 +ENCODING 20833 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +FF10 +0820 +087C +7F44 +4144 +417C +7F44 +1444 +147C +1444 +2402 +2402 +43FE +8000 +ENDCHAR +STARTCHAR uni5162 +ENCODING 20834 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FDFE +1020 +1020 +7CFC +4484 +4484 +4484 +7CFC +2850 +2850 +2A92 +4C92 +890E +ENDCHAR +STARTCHAR uni5163 +ENCODING 20835 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +FD00 +117C +1154 +7D7C +4554 +457C +7D10 +297C +2910 +2AFE +2C00 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni5164 +ENCODING 20836 +BBX 15 16 0 -2 +BITMAP +1010 +11FE +9528 +557C +5928 +11FE +FD10 +297C +2954 +297C +2954 +2A7C +2A28 +4C44 +4802 +87FE +ENDCHAR +STARTCHAR uni5165 +ENCODING 20837 +BBX 13 14 2 -1 +BITMAP +0E00 +0200 +0200 +0200 +0200 +0200 +0500 +0500 +0880 +0880 +1040 +2020 +4010 +8008 +ENDCHAR +STARTCHAR uni5166 +ENCODING 20838 +BBX 14 15 1 -1 +BITMAP +0800 +8400 +8200 +8200 +8100 +8100 +8280 +8280 +8440 +8440 +8820 +9010 +A008 +8000 +FFFC +ENDCHAR +STARTCHAR uni5167 +ENCODING 20839 +BBX 13 16 1 -2 +BITMAP +0800 +0400 +0400 +FFF8 +8208 +8208 +8508 +8508 +8888 +9048 +A028 +8008 +8008 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni5168 +ENCODING 20840 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0440 +0820 +3018 +C006 +1FF0 +0100 +0100 +0100 +1FF0 +0100 +0100 +0100 +7FFC +ENDCHAR +STARTCHAR uni5169 +ENCODING 20841 +BBX 15 14 1 -1 +BITMAP +FFFE +0100 +0100 +7FFC +4104 +79E4 +4924 +4924 +5554 +5554 +638C +4104 +4104 +411C +ENDCHAR +STARTCHAR uni516A +ENCODING 20842 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0C60 +3018 +CFE6 +0000 +7E22 +4224 +7244 +4A48 +4290 +7248 +4A44 +4224 +4E22 +ENDCHAR +STARTCHAR uni516B +ENCODING 20843 +BBX 15 12 1 0 +BITMAP +01C0 +0040 +0040 +0840 +0840 +0840 +1020 +1020 +2010 +2010 +4008 +8006 +ENDCHAR +STARTCHAR uni516C +ENCODING 20844 +BBX 15 15 1 -1 +BITMAP +0040 +0820 +0820 +1010 +1010 +2208 +4204 +8202 +0200 +0440 +0420 +0410 +0830 +0BC8 +7C08 +ENDCHAR +STARTCHAR uni516D +ENCODING 20845 +BBX 15 14 1 -1 +BITMAP +0100 +0100 +0100 +FFFE +0000 +0000 +0000 +0820 +0820 +1010 +1010 +2008 +4004 +8002 +ENDCHAR +STARTCHAR uni516E +ENCODING 20846 +BBX 13 15 2 -1 +BITMAP +0880 +0880 +1040 +1040 +3FE0 +4410 +8408 +0800 +0FE0 +1020 +0020 +0020 +0040 +0040 +0380 +ENDCHAR +STARTCHAR uni516F +ENCODING 20847 +BBX 12 16 1 -2 +BITMAP +4020 +2020 +1040 +1080 +0000 +FFF0 +0410 +0410 +0410 +0410 +0450 +0420 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni5170 +ENCODING 20848 +BBX 15 15 0 -1 +BITMAP +1010 +0810 +0420 +0440 +0000 +7FFC +0000 +0000 +0000 +3FF8 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uni5171 +ENCODING 20849 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +0820 +3FF8 +0820 +0820 +0820 +0820 +0820 +FFFE +0000 +0400 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5172 +ENCODING 20850 +BBX 15 15 0 -2 +BITMAP +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +0000 +0440 +0440 +0820 +0820 +1010 +2008 +C006 +ENDCHAR +STARTCHAR uni5173 +ENCODING 20851 +BBX 15 15 1 -1 +BITMAP +1020 +0820 +0440 +0080 +3FF8 +0100 +0100 +0100 +7FFC +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5174 +ENCODING 20852 +BBX 15 16 0 -2 +BITMAP +0408 +0208 +2108 +1110 +0810 +0820 +0040 +FFFE +0000 +0440 +0420 +0810 +0808 +1008 +2004 +4004 +ENDCHAR +STARTCHAR uni5175 +ENCODING 20853 +BBX 15 15 1 -1 +BITMAP +0060 +0F80 +0800 +0800 +0FFC +0820 +0820 +0820 +0820 +0820 +FFFE +0000 +0820 +1010 +600C +ENDCHAR +STARTCHAR uni5176 +ENCODING 20854 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +3FF8 +0820 +0820 +0FE0 +0820 +0820 +0FE0 +0820 +0820 +7FFC +0400 +1830 +E00E +ENDCHAR +STARTCHAR uni5177 +ENCODING 20855 +BBX 14 14 1 -1 +BITMAP +1FE0 +1020 +1FE0 +1020 +1020 +1FE0 +1020 +1020 +1FE0 +0000 +7FF8 +0C00 +3030 +C00C +ENDCHAR +STARTCHAR uni5178 +ENCODING 20856 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +3FF8 +2448 +2448 +2448 +3FF8 +2448 +2448 +2448 +FFFE +0000 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5179 +ENCODING 20857 +BBX 15 16 0 -2 +BITMAP +0820 +0420 +0440 +FFFE +1020 +1020 +2040 +2448 +4488 +78F0 +0810 +1020 +1428 +2244 +7EFC +0204 +ENDCHAR +STARTCHAR uni517A +ENCODING 20858 +BBX 15 16 0 -2 +BITMAP +0440 +0820 +1010 +2FE8 +C426 +0420 +0820 +10A0 +6040 +0000 +3E44 +2258 +2260 +2242 +3E42 +223E +ENDCHAR +STARTCHAR uni517B +ENCODING 20859 +BBX 15 15 1 -1 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +0280 +0440 +1830 +E81E +0810 +0810 +1010 +2010 +ENDCHAR +STARTCHAR uni517C +ENCODING 20860 +BBX 15 15 1 -1 +BITMAP +1010 +0820 +7FF8 +0480 +3FF0 +0490 +FFFE +0490 +0490 +3FF0 +0CC0 +14A0 +2490 +C48C +0480 +ENDCHAR +STARTCHAR uni517D +ENCODING 20861 +BBX 15 16 0 -2 +BITMAP +0820 +0440 +3FF8 +2108 +3FF8 +2108 +3FF8 +0000 +FFFE +0000 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni517E +ENCODING 20862 +BBX 15 16 0 -2 +BITMAP +0820 +0440 +3FF8 +2108 +3FF8 +2108 +3FF8 +0000 +0820 +7FFC +0820 +0820 +FFFE +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni517F +ENCODING 20863 +BBX 15 16 0 -2 +BITMAP +0810 +0420 +FFFE +0820 +3EF8 +0828 +3EAA +0866 +3892 +0000 +1FF0 +0000 +7FFC +0400 +0810 +1FF8 +ENDCHAR +STARTCHAR uni5180 +ENCODING 20864 +BBX 15 15 1 -1 +BITMAP +0480 +048C +7CF0 +0482 +FFFE +2108 +3FF8 +2108 +3FF8 +0820 +7FFC +0820 +FFFE +1010 +600C +ENDCHAR +STARTCHAR uni5181 +ENCODING 20865 +BBX 15 16 0 -2 +BITMAP +4400 +25FE +2902 +7D02 +55FE +5524 +7D24 +557E +5524 +7D24 +11FE +1152 +FD54 +1248 +1264 +1442 +ENDCHAR +STARTCHAR uni5182 +ENCODING 20866 +BBX 13 14 2 -1 +BITMAP +FFF8 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8038 +ENDCHAR +STARTCHAR uni5183 +ENCODING 20867 +BBX 11 14 3 -1 +BITMAP +FFE0 +8020 +8020 +8020 +BFA0 +8020 +8020 +8020 +BFA0 +8020 +8020 +8020 +8020 +80E0 +ENDCHAR +STARTCHAR uni5184 +ENCODING 20868 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +FFFE +2008 +2008 +2008 +FFFE +2008 +2008 +2008 +2008 +2028 +2010 +ENDCHAR +STARTCHAR uni5185 +ENCODING 20869 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +FFF8 +8208 +8208 +8508 +8508 +8888 +9048 +A028 +8008 +8008 +8008 +8038 +ENDCHAR +STARTCHAR uni5186 +ENCODING 20870 +BBX 13 14 2 -1 +BITMAP +FFF8 +8208 +8208 +8208 +8208 +8208 +8208 +FFF8 +8008 +8008 +8008 +8008 +8008 +8038 +ENDCHAR +STARTCHAR uni5187 +ENCODING 20871 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +FFFE +0400 +0400 +0FF0 +0810 +1810 +2810 +4810 +8810 +0810 +0810 +0810 +0850 +0820 +ENDCHAR +STARTCHAR uni5188 +ENCODING 20872 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8008 +8008 +9048 +8888 +8508 +8208 +8508 +8888 +9048 +8008 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni5189 +ENCODING 20873 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +2108 +FFFE +2008 +2008 +2008 +2038 +ENDCHAR +STARTCHAR uni518A +ENCODING 20874 +BBX 15 14 1 -1 +BITMAP +3FF8 +2488 +2488 +2488 +2488 +2488 +FFFE +2488 +2488 +2488 +2488 +2488 +2488 +2038 +ENDCHAR +STARTCHAR uni518B +ENCODING 20875 +BBX 14 15 1 -2 +BITMAP +FFFC +8004 +8004 +8004 +8FC4 +8844 +8844 +8844 +8844 +8FC4 +8004 +8004 +8004 +8004 +801C +ENDCHAR +STARTCHAR uni518C +ENCODING 20876 +BBX 15 14 1 -1 +BITMAP +3E7C +2244 +2244 +2244 +2244 +2244 +FFFE +2244 +2244 +2244 +2244 +4284 +4E84 +811C +ENDCHAR +STARTCHAR uni518D +ENCODING 20877 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +0100 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +FFFE +2008 +2008 +2008 +2038 +ENDCHAR +STARTCHAR uni518E +ENCODING 20878 +BBX 13 15 1 -2 +BITMAP +3FE0 +2020 +2020 +3F20 +2120 +2120 +FFF8 +8008 +8008 +8008 +8008 +8008 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni518F +ENCODING 20879 +BBX 13 13 2 -1 +BITMAP +FFF8 +8908 +8908 +8908 +91E8 +A008 +8F88 +8888 +8888 +8888 +8F88 +8008 +8038 +ENDCHAR +STARTCHAR uni5190 +ENCODING 20880 +BBX 13 14 2 -1 +BITMAP +FFF8 +8008 +BFE8 +8008 +BFE8 +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +2020 +20E0 +ENDCHAR +STARTCHAR uni5191 +ENCODING 20881 +BBX 13 15 2 -1 +BITMAP +0200 +FFF8 +8208 +FFF8 +8208 +FFF8 +0000 +7FF0 +4010 +5FD0 +4010 +5FD0 +4010 +4010 +4070 +ENDCHAR +STARTCHAR uni5192 +ENCODING 20882 +BBX 12 14 2 -1 +BITMAP +FFF0 +8010 +FFF0 +8010 +FFF0 +0000 +7FE0 +4020 +7FE0 +4020 +7FE0 +4020 +4020 +7FE0 +ENDCHAR +STARTCHAR uni5193 +ENCODING 20883 +BBX 15 15 1 -1 +BITMAP +0820 +7FFC +0820 +3FF8 +0820 +FFFE +0100 +1FF0 +1110 +1FF0 +1110 +FFFE +1010 +1010 +1070 +ENDCHAR +STARTCHAR uni5194 +ENCODING 20884 +BBX 14 15 1 -2 +BITMAP +7FF0 +4010 +5FD0 +4010 +5FD0 +0000 +FBF8 +8840 +8840 +8FFC +8840 +F840 +8840 +0140 +0080 +ENDCHAR +STARTCHAR uni5195 +ENCODING 20885 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +2FE8 +2008 +2FE8 +0400 +0FE0 +3040 +FFF8 +2108 +3FF8 +0442 +1842 +E03E +ENDCHAR +STARTCHAR uni5196 +ENCODING 20886 +BBX 14 4 1 4 +BITMAP +FFFC +8004 +8004 +8004 +ENDCHAR +STARTCHAR uni5197 +ENCODING 20887 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +4004 +47C4 +0440 +0440 +0440 +0440 +0440 +0840 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni5198 +ENCODING 20888 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +7FFC +4104 +4104 +4104 +0180 +0280 +0280 +0480 +0480 +0882 +3082 +C07E +ENDCHAR +STARTCHAR uni5199 +ENCODING 20889 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8804 +8FE4 +0800 +0800 +1FC0 +1040 +0040 +FFFC +0040 +0080 +0080 +0700 +ENDCHAR +STARTCHAR uni519A +ENCODING 20890 +BBX 15 14 0 -2 +BITMAP +7FFE +4002 +8104 +0100 +0100 +2108 +2108 +2108 +2108 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni519B +ENCODING 20891 +BBX 15 15 0 -2 +BITMAP +7FFE +4002 +8204 +0200 +3FF8 +0400 +0900 +1100 +3FF8 +0100 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni519C +ENCODING 20892 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +7FFC +4204 +8208 +0500 +0508 +0890 +18A0 +2840 +4820 +8810 +0A08 +0C06 +0800 +ENDCHAR +STARTCHAR uni519D +ENCODING 20893 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +4004 +4FE4 +0820 +0820 +0FE0 +0820 +0820 +0FE0 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uni519E +ENCODING 20894 +BBX 15 15 0 -2 +BITMAP +7FFE +4002 +8104 +1110 +0920 +0540 +0100 +7FFC +0540 +0920 +1110 +2108 +C106 +0100 +0100 +ENDCHAR +STARTCHAR uni519F +ENCODING 20895 +BBX 15 14 0 -1 +BITMAP +7FFE +4102 +8204 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +10F0 +1F00 +1004 +1004 +0FFC +ENDCHAR +STARTCHAR uni51A0 +ENCODING 20896 +BBX 15 14 1 -1 +BITMAP +FFFC +8004 +7C08 +0008 +01FE +FE08 +2888 +2888 +2848 +2808 +2808 +483A +4802 +87FE +ENDCHAR +STARTCHAR uni51A1 +ENCODING 20897 +BBX 15 15 0 -2 +BITMAP +7FFE +4002 +9FF4 +0000 +7FFC +0200 +0D08 +7190 +02A0 +0CC0 +71A0 +0698 +1886 +E280 +0100 +ENDCHAR +STARTCHAR uni51A2 +ENCODING 20898 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +4004 +1FF0 +0200 +0D08 +7108 +0A90 +0CC0 +75A0 +0690 +1888 +E106 +0600 +ENDCHAR +STARTCHAR uni51A3 +ENCODING 20899 +BBX 13 14 2 -1 +BITMAP +FFF8 +8008 +8008 +FC00 +4BF0 +7910 +4910 +4910 +78A0 +48A0 +4840 +78A0 +C910 +0A08 +ENDCHAR +STARTCHAR uni51A4 +ENCODING 20900 +BBX 15 14 1 -1 +BITMAP +7FFC +4404 +4FF4 +1020 +2040 +FFF8 +2108 +2208 +3FF8 +0440 +0850 +104A +2042 +C03E +ENDCHAR +STARTCHAR uni51A5 +ENCODING 20901 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +5FF4 +1010 +1FF0 +1010 +1010 +1FF0 +0100 +FFFE +0000 +0440 +1830 +600C +ENDCHAR +STARTCHAR uni51A6 +ENCODING 20902 +BBX 15 14 1 -1 +BITMAP +FFFE +8002 +8022 +7C3C +0020 +01F8 +FE88 +2888 +2850 +2820 +2850 +498E +4802 +87FE +ENDCHAR +STARTCHAR uni51A7 +ENCODING 20903 +BBX 15 15 0 -2 +BITMAP +7FFE +4002 +8004 +0820 +0820 +0820 +7EFC +0820 +1C30 +1A70 +2A68 +48A4 +8922 +0820 +0820 +ENDCHAR +STARTCHAR uni51A8 +ENCODING 20904 +BBX 13 14 2 -1 +BITMAP +FFF8 +8008 +BFE8 +0000 +1FC0 +1040 +1FC0 +0000 +7FF0 +4210 +7FF0 +4210 +4210 +7FF0 +ENDCHAR +STARTCHAR uni51A9 +ENCODING 20905 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8604 +38F0 +2010 +3CF0 +2010 +3FF0 +1000 +3FFC +4044 +A924 +24A4 +4018 +ENDCHAR +STARTCHAR uni51AA +ENCODING 20906 +BBX 14 14 1 -1 +BITMAP +FFFC +8844 +BFF4 +1020 +1FE0 +1020 +1FE0 +0200 +FFFC +0840 +3FF0 +E21C +2230 +0200 +ENDCHAR +STARTCHAR uni51AB +ENCODING 20907 +BBX 6 14 5 -1 +BITMAP +80 +40 +20 +10 +00 +00 +04 +04 +08 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni51AC +ENCODING 20908 +BBX 15 15 1 -1 +BITMAP +0200 +07F0 +0810 +1820 +6640 +0180 +0260 +0C18 +3006 +C300 +00E0 +0000 +0E00 +01C0 +0030 +ENDCHAR +STARTCHAR uni51AD +ENCODING 20909 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +FFFE +0280 +0440 +0820 +3018 +C306 +00C0 +0000 +0000 +0060 +0180 +0E00 +ENDCHAR +STARTCHAR uni51AE +ENCODING 20910 +BBX 15 14 0 -1 +BITMAP +4000 +27FC +2040 +0040 +0840 +0840 +1040 +1040 +E040 +2040 +2040 +2040 +2FFE +2000 +ENDCHAR +STARTCHAR uni51AF +ENCODING 20911 +BBX 14 15 0 -2 +BITMAP +47F0 +2010 +2010 +0210 +0A10 +0A10 +13FC +1004 +E004 +2004 +27F4 +2004 +2004 +2028 +0010 +ENDCHAR +STARTCHAR uni51B0 +ENCODING 20912 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1044 +0F44 +0168 +0168 +0150 +1250 +1248 +2248 +2444 +4444 +4842 +8040 +01C0 +ENDCHAR +STARTCHAR uni51B1 +ENCODING 20913 +BBX 15 14 1 -1 +BITMAP +4FFC +2100 +1100 +0100 +03F0 +0210 +0210 +1410 +1410 +27F0 +2020 +4020 +4020 +9FFE +ENDCHAR +STARTCHAR uni51B2 +ENCODING 20914 +BBX 15 15 1 -1 +BITMAP +8040 +4040 +2040 +0FFE +0842 +0842 +0842 +0842 +2FFE +2040 +2040 +4040 +4040 +8040 +8040 +ENDCHAR +STARTCHAR uni51B3 +ENCODING 20915 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +1080 +07F8 +0088 +0088 +0088 +1088 +1FFE +2080 +2140 +4220 +4410 +8808 +1006 +ENDCHAR +STARTCHAR uni51B4 +ENCODING 20916 +BBX 15 15 1 -1 +BITMAP +4000 +23FC +1110 +0110 +0110 +0110 +0110 +07FE +1050 +1090 +2110 +2210 +4410 +9810 +0070 +ENDCHAR +STARTCHAR uni51B5 +ENCODING 20917 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1408 +0408 +0408 +0408 +0408 +17F8 +1120 +2120 +2120 +4220 +4222 +8422 +181E +ENDCHAR +STARTCHAR uni51B6 +ENCODING 20918 +BBX 15 15 1 -1 +BITMAP +0080 +4080 +2080 +1110 +0108 +021C +0FE2 +0002 +1000 +13FC +2204 +2204 +4204 +8204 +03FC +ENDCHAR +STARTCHAR uni51B7 +ENCODING 20919 +BBX 15 15 1 -1 +BITMAP +4040 +20A0 +1110 +0208 +05F6 +0000 +0000 +17FC +1084 +2084 +2084 +4084 +409C +8080 +0080 +ENDCHAR +STARTCHAR uni51B8 +ENCODING 20920 +BBX 15 16 0 -2 +BITMAP +0040 +4244 +2148 +2150 +0040 +07FC +1040 +1040 +2040 +EFFE +2040 +2040 +2040 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni51B9 +ENCODING 20921 +BBX 15 16 0 -2 +BITMAP +0090 +4088 +2088 +2080 +07FE +0080 +1100 +11FC +2144 +E244 +2248 +2450 +2420 +2850 +2088 +0306 +ENDCHAR +STARTCHAR uni51BA +ENCODING 20922 +BBX 15 15 0 -2 +BITMAP +43FC +2204 +2204 +0204 +0BFC +0A20 +1220 +13FE +E220 +2220 +2210 +2212 +228A +2306 +0202 +ENDCHAR +STARTCHAR uni51BB +ENCODING 20923 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +2040 +27FE +0080 +0920 +0920 +1220 +13FC +E020 +2128 +2124 +2222 +2422 +20A0 +0040 +ENDCHAR +STARTCHAR uni51BC +ENCODING 20924 +BBX 15 15 1 -1 +BITMAP +0020 +4120 +2120 +11FC +0220 +0420 +0020 +07FE +1090 +1090 +2090 +2110 +4112 +4212 +840E +ENDCHAR +STARTCHAR uni51BD +ENCODING 20925 +BBX 15 15 1 -1 +BITMAP +8002 +4FD2 +2212 +0212 +03D2 +0252 +0452 +2452 +2A52 +2192 +4082 +4102 +4202 +8402 +080E +ENDCHAR +STARTCHAR uni51BE +ENCODING 20926 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +20A0 +2110 +0208 +1406 +13F8 +1000 +2000 +23F8 +E208 +2208 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni51BF +ENCODING 20927 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +23F8 +2048 +07FE +0048 +13F8 +1040 +2040 +E7FC +2040 +2040 +2FFE +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni51C0 +ENCODING 20928 +BBX 15 16 0 -2 +BITMAP +0100 +4100 +23F0 +2410 +0020 +17FC +1044 +1044 +2FFE +2044 +E044 +27FC +2044 +2040 +2140 +0080 +ENDCHAR +STARTCHAR uni51C1 +ENCODING 20929 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +2FFE +2040 +0040 +07FC +1444 +1444 +27FC +E040 +20E0 +2150 +2248 +2C46 +2040 +0040 +ENDCHAR +STARTCHAR uni51C2 +ENCODING 20930 +BBX 15 16 0 -2 +BITMAP +0100 +4100 +21F0 +2210 +0220 +07FC +1A44 +1244 +2244 +E3FC +22A4 +20A0 +2120 +2222 +2422 +081E +ENDCHAR +STARTCHAR uni51C3 +ENCODING 20931 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +10A0 +0110 +0208 +0DF6 +0040 +1040 +17FC +2040 +2248 +4248 +4444 +8842 +01C0 +ENDCHAR +STARTCHAR uni51C4 +ENCODING 20932 +BBX 15 15 1 -1 +BITMAP +0040 +8040 +4FFE +2040 +07FC +0044 +0FFE +1044 +17FC +2080 +2FFE +4210 +4720 +80F8 +0F06 +ENDCHAR +STARTCHAR uni51C5 +ENCODING 20933 +BBX 15 15 1 -1 +BITMAP +8000 +4FFE +2802 +0842 +0BFA +0842 +0842 +09F2 +2912 +2912 +2912 +49F2 +4802 +8802 +8FFE +ENDCHAR +STARTCHAR uni51C6 +ENCODING 20934 +BBX 15 15 1 -1 +BITMAP +4110 +2110 +1220 +07FE +0C20 +1420 +07FC +1420 +1420 +2420 +27FC +4420 +4420 +8420 +07FE +ENDCHAR +STARTCHAR uni51C7 +ENCODING 20935 +BBX 15 16 0 -2 +BITMAP +0208 +4228 +2228 +2228 +0FA4 +0244 +1254 +1692 +2710 +EAA0 +2A20 +3228 +2244 +22FC +2244 +0200 +ENDCHAR +STARTCHAR uni51C8 +ENCODING 20936 +BBX 15 16 0 -2 +BITMAP +003C +47C0 +2244 +2128 +0000 +0BF8 +0848 +1048 +17FE +E048 +2048 +23F8 +2048 +2040 +2140 +0080 +ENDCHAR +STARTCHAR uni51C9 +ENCODING 20937 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +0FFE +0000 +03F8 +0208 +0208 +1208 +13F8 +2040 +2248 +4248 +4444 +8842 +01C0 +ENDCHAR +STARTCHAR uni51CA +ENCODING 20938 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0040 +03F8 +0040 +0FFE +1000 +13F8 +2248 +2248 +43F8 +4208 +8208 +0238 +ENDCHAR +STARTCHAR uni51CB +ENCODING 20939 +BBX 14 14 1 -1 +BITMAP +47FC +2444 +1444 +05F4 +0444 +0444 +15F4 +1404 +25F4 +2514 +4914 +49F4 +9004 +201C +ENDCHAR +STARTCHAR uni51CC +ENCODING 20940 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +87FC +4040 +2FFE +0120 +0220 +0CBE +1080 +11F8 +2208 +2D10 +40E0 +8198 +0E06 +ENDCHAR +STARTCHAR uni51CD +ENCODING 20941 +BBX 15 15 1 -1 +BITMAP +0040 +4040 +2FFE +1040 +07FC +0444 +07FC +0444 +1444 +17FC +2150 +2248 +4444 +8842 +0040 +ENDCHAR +STARTCHAR uni51CE +ENCODING 20942 +BBX 15 15 0 -1 +BITMAP +0040 +4040 +20A0 +2110 +0208 +0406 +11F0 +1040 +2040 +E3F8 +2040 +2248 +2148 +2150 +2FFE +ENDCHAR +STARTCHAR uni51CF +ENCODING 20943 +BBX 15 16 0 -2 +BITMAP +0014 +4012 +2010 +27FE +0410 +0410 +15D0 +1412 +2412 +E5D4 +2554 +2548 +25DA +242A +2846 +1082 +ENDCHAR +STARTCHAR uni51D0 +ENCODING 20944 +BBX 15 14 0 -1 +BITMAP +47FC +20A0 +20A0 +07FC +04A4 +14A4 +14A4 +27FC +E040 +2040 +27FC +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni51D1 +ENCODING 20945 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +27FC +2040 +03F8 +0080 +17FC +1110 +2208 +E5F6 +2040 +23F8 +2040 +20A0 +2110 +0608 +ENDCHAR +STARTCHAR uni51D2 +ENCODING 20946 +BBX 15 15 0 -1 +BITMAP +0040 +4248 +2248 +2248 +03F8 +0000 +17FC +1000 +23F8 +E208 +2208 +23F8 +2110 +20A0 +27FE +ENDCHAR +STARTCHAR uni51D3 +ENCODING 20947 +BBX 15 15 0 -2 +BITMAP +47FC +20A0 +20A0 +07FC +04A4 +14A4 +17FC +2040 +E040 +27FC +20E0 +2150 +2248 +2C46 +0040 +ENDCHAR +STARTCHAR uni51D4 +ENCODING 20948 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +20A0 +2190 +0248 +17FE +1A08 +13F8 +2208 +23F8 +E200 +23F8 +2508 +2508 +29F8 +0108 +ENDCHAR +STARTCHAR uni51D5 +ENCODING 20949 +BBX 14 15 0 -2 +BITMAP +47FC +2404 +2000 +03F8 +0A08 +0BF8 +1208 +13F8 +E080 +2040 +27FC +2000 +2110 +2208 +0404 +ENDCHAR +STARTCHAR uni51D6 +ENCODING 20950 +BBX 15 15 1 -1 +BITMAP +4108 +2110 +13FE +0620 +0BFC +0220 +13FC +2220 +43FE +8000 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni51D7 +ENCODING 20951 +BBX 15 16 0 -2 +BITMAP +0040 +4444 +27FC +2120 +0110 +03FE +1220 +1620 +2BFC +E220 +2220 +23FC +2220 +2220 +23FE +0200 +ENDCHAR +STARTCHAR uni51D8 +ENCODING 20952 +BBX 15 16 0 -2 +BITMAP +0480 +4482 +249C +2FD0 +0490 +0790 +149E +1794 +2494 +E494 +2FD4 +2014 +2514 +28A4 +3024 +0044 +ENDCHAR +STARTCHAR uni51D9 +ENCODING 20953 +BBX 15 15 0 -2 +BITMAP +47FC +24A4 +27FC +0040 +03F8 +1040 +17FC +2110 +E0A0 +23F8 +2040 +2FFE +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni51DA +ENCODING 20954 +BBX 15 16 0 -2 +BITMAP +0110 +4110 +27BC +2110 +03B8 +0554 +1912 +1000 +23F8 +E000 +27FC +2040 +2248 +2444 +2942 +0080 +ENDCHAR +STARTCHAR uni51DB +ENCODING 20955 +BBX 15 15 1 -1 +BITMAP +8040 +4040 +2FFE +0404 +05F4 +0514 +05F4 +1404 +17FC +2000 +2FFE +4040 +4248 +8C46 +80C0 +ENDCHAR +STARTCHAR uni51DC +ENCODING 20956 +BBX 15 15 1 -1 +BITMAP +0040 +8040 +4FFE +22A8 +02A8 +02E8 +0208 +03F8 +100C +17F0 +2040 +2FFE +4150 +4248 +8C46 +ENDCHAR +STARTCHAR uni51DD +ENCODING 20957 +BBX 15 15 1 -1 +BITMAP +1000 +937C +5C08 +3130 +0F10 +10FE +1F12 +3414 +2450 +3F5C +4450 +4A50 +4950 +90B0 +211E +ENDCHAR +STARTCHAR uni51DE +ENCODING 20958 +BBX 15 14 1 -1 +BITMAP +8BDE +4A92 +2A92 +0BD2 +0A5E +0A50 +0BD0 +2A92 +2A92 +53CE +5000 +8A48 +9124 +2122 +ENDCHAR +STARTCHAR uni51DF +ENCODING 20959 +BBX 15 16 0 -2 +BITMAP +0040 +4FFE +2040 +27FC +0000 +07FC +14A4 +17FC +2208 +E3F8 +2208 +23F8 +2208 +23F8 +2110 +0208 +ENDCHAR +STARTCHAR uni51E0 +ENCODING 20960 +BBX 15 14 1 -1 +BITMAP +0FC0 +0840 +0840 +0840 +0840 +0840 +0840 +0840 +0840 +1040 +1040 +2042 +2042 +C03E +ENDCHAR +STARTCHAR uni51E1 +ENCODING 20961 +BBX 15 14 1 -1 +BITMAP +0FE0 +0820 +0820 +0820 +0820 +0A20 +0920 +08A0 +0820 +0820 +1020 +1022 +2022 +C01E +ENDCHAR +STARTCHAR uni51E2 +ENCODING 20962 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0200 +0FC0 +0840 +0840 +0840 +0840 +0840 +0840 +0840 +1040 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni51E3 +ENCODING 20963 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +0200 +0200 +1FE0 +1020 +1020 +1020 +1020 +1020 +1020 +1022 +2022 +2022 +401E +8000 +ENDCHAR +STARTCHAR uni51E4 +ENCODING 20964 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2FC8 +2048 +2848 +2488 +2288 +2108 +2288 +244A +284A +400A +4006 +8002 +ENDCHAR +STARTCHAR uni51E5 +ENCODING 20965 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2000 +2000 +23E0 +2220 +2220 +2220 +2220 +2422 +4422 +4822 +901E +ENDCHAR +STARTCHAR uni51E6 +ENCODING 20966 +BBX 15 15 1 -1 +BITMAP +2000 +20F0 +3C90 +2490 +4490 +4490 +4490 +A890 +2890 +2912 +1112 +120E +2800 +4700 +80FE +ENDCHAR +STARTCHAR uni51E7 +ENCODING 20967 +BBX 15 14 1 -1 +BITMAP +7FF0 +4010 +4210 +4210 +5FD0 +5250 +5250 +5250 +5250 +5250 +52C8 +420A +820A +8004 +ENDCHAR +STARTCHAR uni51E8 +ENCODING 20968 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2FC8 +2008 +2008 +3FE8 +2208 +2488 +2848 +3FEA +282A +400A +4006 +8002 +ENDCHAR +STARTCHAR uni51E9 +ENCODING 20969 +BBX 15 14 1 -1 +BITMAP +7FF0 +4010 +4210 +4210 +5FD0 +4210 +4210 +4710 +4710 +4A90 +4A90 +524A +820A +8004 +ENDCHAR +STARTCHAR uni51EA +ENCODING 20970 +BBX 15 14 1 -1 +BITMAP +3FF0 +2010 +2110 +2110 +2110 +29D0 +2910 +2910 +2910 +2910 +2910 +490A +5FEA +8004 +ENDCHAR +STARTCHAR uni51EB +ENCODING 20971 +BBX 15 16 0 -2 +BITMAP +0200 +0400 +3FE0 +2020 +2420 +22A0 +2040 +3FF8 +0008 +1F88 +10A8 +1090 +1082 +2082 +407E +8000 +ENDCHAR +STARTCHAR uni51EC +ENCODING 20972 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2FE8 +2008 +2008 +27C8 +2448 +2448 +27C8 +244A +244A +47CA +4446 +8002 +ENDCHAR +STARTCHAR uni51ED +ENCODING 20973 +BBX 15 14 1 -1 +BITMAP +0838 +13C0 +2040 +6FFE +A040 +2040 +27FC +2000 +0FC0 +0840 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni51EE +ENCODING 20974 +BBX 15 14 1 -1 +BITMAP +3FF0 +2010 +2010 +2FD0 +2210 +2410 +2FD0 +2850 +2850 +2FD0 +2848 +484A +4FCA +8004 +ENDCHAR +STARTCHAR uni51EF +ENCODING 20975 +BBX 15 16 0 -2 +BITMAP +1000 +92F0 +9290 +9290 +FE90 +0090 +FE90 +0290 +0290 +7E90 +4090 +4092 +4692 +5912 +610E +0200 +ENDCHAR +STARTCHAR uni51F0 +ENCODING 20976 +BBX 15 14 1 -1 +BITMAP +7FF0 +4210 +4410 +5FD0 +5050 +5FD0 +5050 +5FD0 +4010 +5FD0 +4210 +8F8A +820A +BFE4 +ENDCHAR +STARTCHAR uni51F1 +ENCODING 20977 +BBX 15 15 1 -1 +BITMAP +1000 +54F0 +5490 +7C90 +0090 +FE90 +0090 +7C90 +4490 +4490 +7C90 +4890 +2E92 +3892 +C30E +ENDCHAR +STARTCHAR uni51F2 +ENCODING 20978 +BBX 15 15 0 -2 +BITMAP +3FF8 +2448 +2288 +3FF8 +2288 +2FE8 +22A8 +3FF8 +22A8 +2FE8 +228A +26CA +4AAA +5296 +8282 +ENDCHAR +STARTCHAR uni51F3 +ENCODING 20979 +BBX 15 15 1 -1 +BITMAP +0F90 +4264 +2428 +1FF0 +E00E +0FE0 +0820 +0FE0 +0440 +7FFC +0000 +0FC0 +0840 +1042 +E03E +ENDCHAR +STARTCHAR uni51F4 +ENCODING 20980 +BBX 15 15 1 -1 +BITMAP +47FC +2440 +17F8 +0440 +07F8 +1440 +27FE +4012 +8A4A +1126 +0FC0 +0840 +1040 +2042 +C03E +ENDCHAR +STARTCHAR uni51F5 +ENCODING 20981 +BBX 14 15 1 -1 +BITMAP +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni51F6 +ENCODING 20982 +BBX 13 14 2 -1 +BITMAP +0020 +8028 +9028 +8848 +8448 +8288 +8108 +8288 +8448 +8828 +9028 +E008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni51F7 +ENCODING 20983 +BBX 13 16 1 -2 +BITMAP +0200 +0200 +0200 +0200 +9FC8 +8208 +8208 +8208 +8208 +8208 +BFE8 +8008 +8008 +8008 +FFF8 +0008 +ENDCHAR +STARTCHAR uni51F8 +ENCODING 20984 +BBX 14 13 1 0 +BITMAP +0FC0 +0840 +0840 +0840 +0840 +0840 +F87C +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni51F9 +ENCODING 20985 +BBX 14 14 1 -1 +BITMAP +F87C +8844 +8844 +8844 +8844 +8844 +8844 +8FC4 +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni51FA +ENCODING 20986 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +4210 +4210 +4210 +4210 +7FF0 +0200 +0200 +8208 +8208 +8208 +8208 +8208 +FFF8 +ENDCHAR +STARTCHAR uni51FB +ENCODING 20987 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0100 +0100 +2108 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni51FC +ENCODING 20988 +BBX 13 16 1 -2 +BITMAP +0200 +0200 +0200 +0220 +BA48 +8A88 +8B08 +9288 +9248 +A228 +C228 +8A08 +8408 +8008 +FFF8 +0008 +ENDCHAR +STARTCHAR uni51FD +ENCODING 20989 +BBX 14 14 1 -1 +BITMAP +FFFC +0200 +0400 +8704 +9124 +8924 +8944 +8104 +8584 +8944 +B134 +8704 +8004 +FFFC +ENDCHAR +STARTCHAR uni51FE +ENCODING 20990 +BBX 14 14 1 -1 +BITMAP +3FE0 +0180 +0200 +8204 +BBF4 +AA94 +AA94 +AAA4 +AA44 +BA64 +8294 +8E04 +8004 +FFFC +ENDCHAR +STARTCHAR uni51FF +ENCODING 20991 +BBX 15 16 0 -2 +BITMAP +0440 +2448 +1450 +0440 +FFFE +0000 +0440 +2288 +2FE8 +2108 +2108 +2FE8 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5200 +ENCODING 20992 +BBX 13 12 1 0 +BITMAP +7FF8 +0408 +0408 +0408 +0808 +0808 +0808 +1008 +1008 +2010 +4010 +80E0 +ENDCHAR +STARTCHAR uni5201 +ENCODING 20993 +BBX 14 13 1 -1 +BITMAP +FFFC +0004 +0004 +0004 +0004 +0064 +0384 +1C04 +E004 +0004 +0008 +0008 +0070 +ENDCHAR +STARTCHAR uni5202 +ENCODING 20994 +BBX 7 15 5 -1 +BITMAP +02 +02 +82 +82 +82 +82 +82 +82 +82 +82 +82 +02 +02 +02 +0E +ENDCHAR +STARTCHAR uni5203 +ENCODING 20995 +BBX 14 13 1 -1 +BITMAP +7FFC +0204 +0204 +2204 +1204 +0A04 +0404 +0604 +0904 +0904 +1008 +2008 +C070 +ENDCHAR +STARTCHAR uni5204 +ENCODING 20996 +BBX 15 14 1 -1 +BITMAP +7FF8 +0208 +0208 +4208 +2208 +1208 +0C08 +0608 +0588 +0868 +101E +2010 +4010 +80E0 +ENDCHAR +STARTCHAR uni5205 +ENCODING 20997 +BBX 15 15 0 -2 +BITMAP +7FE0 +0420 +0420 +0420 +0420 +2428 +2424 +4422 +8422 +0820 +0820 +1020 +1020 +2140 +C080 +ENDCHAR +STARTCHAR uni5206 +ENCODING 20998 +BBX 15 15 1 -1 +BITMAP +00C0 +0840 +0820 +1020 +1010 +2008 +5FF4 +8212 +0210 +0210 +0410 +0410 +0820 +1020 +21C0 +ENDCHAR +STARTCHAR uni5207 +ENCODING 20999 +BBX 14 14 1 -1 +BITMAP +2000 +23FC +2044 +2044 +3C44 +E044 +2044 +2044 +2044 +2484 +2484 +1D04 +0204 +0438 +ENDCHAR +STARTCHAR uni5208 +ENCODING 21000 +BBX 14 15 1 -1 +BITMAP +0404 +0404 +0444 +0444 +4444 +2444 +1844 +0844 +0C44 +0A44 +1104 +1004 +2004 +4004 +801C +ENDCHAR +STARTCHAR uni5209 +ENCODING 21001 +BBX 14 16 0 -2 +BITMAP +1004 +1004 +2004 +3FA4 +4024 +8024 +3F24 +0224 +0424 +0824 +1024 +2024 +4084 +4084 +3F94 +0008 +ENDCHAR +STARTCHAR uni520A +ENCODING 21002 +BBX 14 15 1 -1 +BITMAP +0004 +7E04 +0844 +0844 +0844 +0844 +FF44 +0844 +0844 +0844 +0844 +0804 +0804 +0804 +081C +ENDCHAR +STARTCHAR uni520B +ENCODING 21003 +BBX 14 15 1 -1 +BITMAP +0604 +7804 +0804 +0844 +0844 +0844 +FF44 +0844 +0844 +0844 +1044 +1044 +2004 +4004 +801C +ENDCHAR +STARTCHAR uni520C +ENCODING 21004 +BBX 14 16 0 -2 +BITMAP +0404 +0404 +0404 +0424 +FFA4 +0424 +0424 +0424 +4424 +2424 +2424 +0424 +0404 +0404 +1414 +0808 +ENDCHAR +STARTCHAR uni520D +ENCODING 21005 +BBX 13 16 0 -2 +BITMAP +0400 +0400 +0FF0 +1010 +2020 +4040 +BFF8 +0008 +0008 +0008 +1FF8 +0008 +0008 +0008 +3FF8 +0008 +ENDCHAR +STARTCHAR uni520E +ENCODING 21006 +BBX 14 15 1 -1 +BITMAP +1004 +1004 +1FA4 +2AA4 +2AA4 +4AA4 +92A4 +12A4 +24A4 +24A4 +48A4 +0884 +1104 +2104 +061C +ENDCHAR +STARTCHAR uni520F +ENCODING 21007 +BBX 14 16 0 -2 +BITMAP +2004 +2004 +3F84 +4024 +8024 +3F24 +0024 +0024 +7F24 +0124 +0124 +0124 +0144 +0144 +00D4 +0048 +ENDCHAR +STARTCHAR uni5210 +ENCODING 21008 +BBX 14 16 0 -2 +BITMAP +0004 +3F04 +2104 +2124 +2924 +2524 +2524 +2124 +FFE4 +2124 +2124 +2124 +2104 +4104 +4514 +8208 +ENDCHAR +STARTCHAR uni5211 +ENCODING 21009 +BBX 14 15 1 -1 +BITMAP +0004 +7F84 +1204 +1224 +1224 +1224 +FFA4 +1224 +1224 +1224 +1224 +2204 +2204 +4204 +821C +ENDCHAR +STARTCHAR uni5212 +ENCODING 21010 +BBX 14 15 1 -1 +BITMAP +0A04 +0904 +0924 +0824 +FFA4 +0824 +0924 +0924 +0A24 +0A24 +0424 +0C04 +3284 +C284 +011C +ENDCHAR +STARTCHAR uni5213 +ENCODING 21011 +BBX 14 14 1 -1 +BITMAP +0004 +7E04 +0044 +0044 +0044 +FF44 +2444 +2444 +2444 +2444 +2404 +4484 +4704 +8C1C +ENDCHAR +STARTCHAR uni5214 +ENCODING 21012 +BBX 14 15 1 -1 +BITMAP +1004 +1004 +1044 +7E44 +1244 +1244 +1244 +1244 +FFC4 +2844 +2844 +2404 +4404 +4204 +811C +ENDCHAR +STARTCHAR uni5215 +ENCODING 21013 +BBX 15 14 1 -1 +BITMAP +3FF8 +0108 +0108 +0208 +0C08 +3070 +0000 +FEFE +2222 +2222 +2222 +4242 +4242 +9C9C +ENDCHAR +STARTCHAR uni5216 +ENCODING 21014 +BBX 14 15 1 -1 +BITMAP +0004 +3F04 +2124 +2124 +2124 +3F24 +2124 +2124 +2124 +3F24 +2124 +2104 +4104 +4104 +831C +ENDCHAR +STARTCHAR uni5217 +ENCODING 21015 +BBX 14 15 1 -1 +BITMAP +0004 +7F04 +1044 +1044 +1E44 +2244 +2244 +5244 +8A44 +0444 +0404 +0804 +1004 +2004 +C01C +ENDCHAR +STARTCHAR uni5218 +ENCODING 21016 +BBX 14 16 0 -2 +BITMAP +1004 +0804 +0804 +FFA4 +0224 +4224 +2224 +1424 +1424 +0824 +0824 +1424 +2404 +4204 +8214 +0008 +ENDCHAR +STARTCHAR uni5219 +ENCODING 21017 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +4104 +4124 +4924 +4924 +4924 +4924 +4924 +4924 +4924 +1424 +1204 +2104 +4094 +8088 +ENDCHAR +STARTCHAR uni521A +ENCODING 21018 +BBX 13 16 1 -2 +BITMAP +0008 +FE08 +8208 +8248 +CA48 +AA48 +AA48 +9248 +9248 +AA48 +AA48 +CA48 +8208 +8208 +8A28 +8410 +ENDCHAR +STARTCHAR uni521B +ENCODING 21019 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +1404 +1224 +2124 +40A4 +BE24 +2224 +2224 +2224 +2A24 +2424 +2084 +2084 +1F94 +0008 +ENDCHAR +STARTCHAR uni521C +ENCODING 21020 +BBX 15 16 0 -2 +BITMAP +1202 +1202 +1202 +7F82 +1292 +1292 +7F92 +5212 +5212 +7FD2 +1252 +1252 +2342 +2282 +420A +8204 +ENDCHAR +STARTCHAR uni521D +ENCODING 21021 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +11FC +FC44 +0444 +0844 +0844 +1044 +3A44 +5444 +9244 +1084 +1088 +1108 +1230 +ENDCHAR +STARTCHAR uni521E +ENCODING 21022 +BBX 14 16 0 -2 +BITMAP +0004 +3F04 +2104 +2124 +2124 +3F24 +2124 +2124 +3F24 +2124 +2124 +2124 +2784 +F804 +4014 +0008 +ENDCHAR +STARTCHAR uni521F +ENCODING 21023 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +1104 +1124 +2124 +2524 +4224 +8024 +3F24 +2124 +2124 +2124 +2104 +3F04 +2114 +0008 +ENDCHAR +STARTCHAR uni5220 +ENCODING 21024 +BBX 15 16 0 -2 +BITMAP +0002 +7BC2 +4A42 +4A4A +4A4A +4A4A +4A4A +FFEA +4A4A +4A4A +4A4A +4A4A +4A42 +5A42 +854A +0884 +ENDCHAR +STARTCHAR uni5221 +ENCODING 21025 +BBX 14 16 1 -2 +BITMAP +0004 +FF04 +8104 +8104 +8124 +FF24 +8824 +8824 +FFA4 +8824 +8824 +8424 +8484 +A284 +C194 +8088 +ENDCHAR +STARTCHAR uni5222 +ENCODING 21026 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +1404 +1224 +2124 +48A4 +8424 +0424 +7F24 +0124 +2224 +1424 +0804 +0404 +0414 +0008 +ENDCHAR +STARTCHAR uni5223 +ENCODING 21027 +BBX 13 16 1 -2 +BITMAP +1008 +1008 +1008 +2048 +2448 +4248 +FF48 +4148 +0048 +7E48 +4248 +4248 +4208 +4208 +7E28 +4210 +ENDCHAR +STARTCHAR uni5224 +ENCODING 21028 +BBX 14 15 1 -1 +BITMAP +4904 +2904 +2A44 +0844 +7F44 +0844 +0844 +0844 +FF44 +0844 +0844 +0804 +0804 +0804 +081C +ENDCHAR +STARTCHAR uni5225 +ENCODING 21029 +BBX 14 15 1 -1 +BITMAP +0004 +FE04 +8244 +8244 +8244 +FE44 +2044 +2044 +3E44 +2244 +2244 +2204 +4204 +4204 +9C1C +ENDCHAR +STARTCHAR uni5226 +ENCODING 21030 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +0804 +7F24 +0824 +0824 +0824 +FFA4 +0824 +1024 +1024 +2224 +4104 +FF84 +4094 +0008 +ENDCHAR +STARTCHAR uni5227 +ENCODING 21031 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +11FC +7C44 +1044 +1044 +1044 +FE44 +2044 +2844 +2884 +4884 +5C88 +E508 +0230 +ENDCHAR +STARTCHAR uni5228 +ENCODING 21032 +BBX 14 16 0 -2 +BITMAP +1004 +1004 +3F04 +2124 +4124 +BD24 +2524 +2524 +3D24 +2124 +2524 +2224 +2084 +2084 +1F94 +0008 +ENDCHAR +STARTCHAR uni5229 +ENCODING 21033 +BBX 14 15 1 -1 +BITMAP +0C04 +F004 +1044 +1044 +FE44 +1044 +1044 +3844 +3444 +5244 +5044 +9004 +1004 +1004 +101C +ENDCHAR +STARTCHAR uni522A +ENCODING 21034 +BBX 14 15 1 -1 +BITMAP +0004 +7F04 +5524 +5524 +5524 +5524 +5524 +FFA4 +5524 +5524 +5524 +5504 +5504 +5504 +430C +ENDCHAR +STARTCHAR uni522B +ENCODING 21035 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +4104 +4124 +4124 +7F24 +1024 +1024 +FF24 +1124 +1124 +1124 +2104 +2104 +4A14 +8408 +ENDCHAR +STARTCHAR uni522C +ENCODING 21036 +BBX 14 16 0 -2 +BITMAP +1404 +1204 +1004 +1724 +7824 +1024 +17A4 +F824 +1124 +1224 +0C24 +08A4 +1484 +2284 +C194 +0088 +ENDCHAR +STARTCHAR uni522D +ENCODING 21037 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +0204 +0424 +0C24 +1224 +2124 +C0A4 +0024 +7F24 +0824 +0824 +0804 +0F04 +F014 +4008 +ENDCHAR +STARTCHAR uni522E +ENCODING 21038 +BBX 14 15 1 -1 +BITMAP +0704 +7804 +0844 +0844 +0844 +FFC4 +0844 +0844 +0844 +7F44 +4144 +4104 +4104 +4104 +7F1C +ENDCHAR +STARTCHAR uni522F +ENCODING 21039 +BBX 14 16 0 -2 +BITMAP +0004 +7F84 +0004 +0024 +3F24 +2124 +2124 +3F24 +2124 +2124 +3F24 +2124 +0004 +0784 +F814 +4008 +ENDCHAR +STARTCHAR uni5230 +ENCODING 21040 +BBX 14 15 1 -1 +BITMAP +0004 +FF04 +1044 +1444 +2244 +4F44 +F144 +0844 +0844 +7E44 +0844 +0804 +0804 +0F04 +F01C +ENDCHAR +STARTCHAR uni5231 +ENCODING 21041 +BBX 15 16 0 -2 +BITMAP +2400 +2400 +25F8 +2448 +7E48 +2448 +254C +254A +FE4A +2448 +2448 +2448 +2448 +4488 +44A8 +8510 +ENDCHAR +STARTCHAR uni5232 +ENCODING 21042 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +7F04 +0824 +0824 +0824 +FFA4 +0024 +0824 +0824 +7F24 +0824 +0804 +0F04 +F014 +4008 +ENDCHAR +STARTCHAR uni5233 +ENCODING 21043 +BBX 14 15 1 -1 +BITMAP +0804 +0804 +FF44 +1444 +2244 +C144 +3E44 +0044 +FF44 +1044 +3E44 +4204 +0204 +0204 +1C1C +ENDCHAR +STARTCHAR uni5234 +ENCODING 21044 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +1104 +1224 +23A4 +20A4 +4AA4 +8924 +0824 +FFA4 +1824 +2C24 +2A04 +4904 +8894 +0808 +ENDCHAR +STARTCHAR uni5235 +ENCODING 21045 +BBX 14 16 0 -2 +BITMAP +0004 +FF84 +2204 +2224 +3E24 +2224 +2224 +3E24 +2224 +2224 +27A4 +FA24 +4204 +0204 +0214 +0208 +ENDCHAR +STARTCHAR uni5236 +ENCODING 21046 +BBX 14 15 1 -1 +BITMAP +0804 +4804 +4844 +7F44 +8844 +8844 +7F44 +0844 +0844 +7F44 +4944 +4904 +4904 +4B04 +081C +ENDCHAR +STARTCHAR uni5237 +ENCODING 21047 +BBX 14 15 1 -1 +BITMAP +0004 +7F84 +40A4 +40A4 +7FA4 +4424 +4424 +5FA4 +54A4 +54A4 +5484 +9484 +9584 +0404 +041C +ENDCHAR +STARTCHAR uni5238 +ENCODING 21048 +BBX 15 15 1 -1 +BITMAP +1110 +0910 +0920 +3FF8 +0280 +0440 +7FFC +0820 +3018 +DFF6 +0410 +0410 +0810 +1010 +20E0 +ENDCHAR +STARTCHAR uni5239 +ENCODING 21049 +BBX 14 15 1 -1 +BITMAP +0204 +2204 +1444 +0844 +3444 +C344 +0844 +0844 +FF44 +0844 +1C44 +2A04 +4904 +8804 +081C +ENDCHAR +STARTCHAR uni523A +ENCODING 21050 +BBX 14 15 1 -1 +BITMAP +0804 +0804 +FFA4 +0824 +0824 +7F24 +4924 +4924 +4B24 +1C24 +1A04 +2904 +4884 +8804 +081C +ENDCHAR +STARTCHAR uni523B +ENCODING 21051 +BBX 14 15 1 -1 +BITMAP +0804 +0804 +FF44 +0844 +1044 +2444 +4444 +2844 +1044 +2244 +4404 +8C04 +1204 +2104 +C11C +ENDCHAR +STARTCHAR uni523C +ENCODING 21052 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +10FC +7E24 +1024 +10A4 +10A4 +FEA4 +10A4 +1124 +2024 +2824 +4444 +FE44 +4294 +0108 +ENDCHAR +STARTCHAR uni523D +ENCODING 21053 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +1404 +2224 +4124 +BEA4 +0024 +0024 +FFA4 +1024 +1024 +2224 +4104 +FF04 +4114 +0008 +ENDCHAR +STARTCHAR uni523E +ENCODING 21054 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +0804 +FFA4 +0824 +4924 +2924 +2A24 +FFA4 +0824 +0824 +1424 +1204 +2104 +4114 +8008 +ENDCHAR +STARTCHAR uni523F +ENCODING 21055 +BBX 14 16 0 -2 +BITMAP +0804 +4904 +4904 +4924 +7F24 +1024 +1024 +3F24 +4124 +A124 +1224 +1424 +0804 +1004 +2014 +C008 +ENDCHAR +STARTCHAR uni5240 +ENCODING 21056 +BBX 13 16 1 -2 +BITMAP +1008 +9208 +9208 +9248 +FE48 +0048 +FE48 +0248 +0248 +7E48 +4048 +4048 +4608 +5808 +6028 +0010 +ENDCHAR +STARTCHAR uni5241 +ENCODING 21057 +BBX 14 16 0 -2 +BITMAP +0004 +3E04 +2204 +2224 +2224 +49A4 +8824 +0824 +FFA4 +0824 +1C24 +2A24 +4904 +8884 +0814 +0808 +ENDCHAR +STARTCHAR uni5242 +ENCODING 21058 +BBX 14 16 0 -2 +BITMAP +1004 +0804 +FF84 +0224 +6424 +1824 +2624 +C124 +22A4 +2224 +2224 +2224 +2204 +4204 +4214 +8208 +ENDCHAR +STARTCHAR uni5243 +ENCODING 21059 +BBX 14 15 1 -1 +BITMAP +4204 +2404 +FF24 +0924 +0924 +7F24 +4824 +4824 +7FA4 +18A4 +18A4 +2884 +4884 +8B04 +081C +ENDCHAR +STARTCHAR uni5244 +ENCODING 21060 +BBX 14 15 1 -1 +BITMAP +0004 +FF84 +0024 +4924 +9224 +4924 +24A4 +0024 +7FA4 +0824 +0824 +0804 +09C4 +1E04 +E01C +ENDCHAR +STARTCHAR uni5245 +ENCODING 21061 +BBX 13 16 1 -2 +BITMAP +0008 +FF08 +0008 +0048 +7E48 +4248 +4248 +4248 +7E48 +0048 +4248 +2248 +2408 +0F08 +F028 +4010 +ENDCHAR +STARTCHAR uni5246 +ENCODING 21062 +BBX 12 16 2 -2 +BITMAP +2010 +1010 +FC10 +8490 +8490 +FC90 +8490 +8490 +FC90 +8090 +9090 +8890 +9410 +A410 +C050 +8020 +ENDCHAR +STARTCHAR uni5247 +ENCODING 21063 +BBX 14 15 1 -1 +BITMAP +0004 +7E04 +4244 +4244 +7E44 +4244 +4244 +7E44 +4244 +4244 +4244 +7E44 +2004 +4404 +831C +ENDCHAR +STARTCHAR uni5248 +ENCODING 21064 +BBX 13 16 1 -2 +BITMAP +0008 +7E08 +4208 +4248 +7E48 +0048 +FF48 +8148 +8148 +FF48 +8148 +8148 +FF08 +8108 +8528 +8210 +ENDCHAR +STARTCHAR uni5249 +ENCODING 21065 +BBX 14 15 1 -1 +BITMAP +0804 +0804 +2A44 +2A44 +2A44 +2A44 +5D44 +48C4 +8844 +0844 +7F44 +0804 +0804 +0F84 +F81C +ENDCHAR +STARTCHAR uni524A +ENCODING 21066 +BBX 13 15 2 -1 +BITMAP +9208 +5208 +5488 +1088 +FE88 +8288 +8288 +FE88 +8288 +8288 +FE08 +8208 +8208 +8208 +8E38 +ENDCHAR +STARTCHAR uni524B +ENCODING 21067 +BBX 15 15 1 -1 +BITMAP +0804 +0804 +FFA4 +0824 +0824 +7F24 +4124 +4124 +4124 +7F04 +1404 +141C +2402 +4402 +83FE +ENDCHAR +STARTCHAR uni524C +ENCODING 21068 +BBX 14 15 1 -1 +BITMAP +0804 +0804 +FF84 +0824 +7F24 +4924 +4924 +4924 +7F24 +1824 +1C24 +2A04 +4904 +8804 +081C +ENDCHAR +STARTCHAR uni524D +ENCODING 21069 +BBX 14 15 1 -1 +BITMAP +1020 +0840 +FFFC +0000 +7C08 +4488 +4488 +7C88 +4488 +4488 +7C88 +4488 +4408 +4408 +4C38 +ENDCHAR +STARTCHAR uni524E +ENCODING 21070 +BBX 14 16 0 -2 +BITMAP +0204 +6404 +1804 +1624 +2124 +CA24 +0924 +0824 +FFA4 +1824 +1C24 +2A24 +2904 +4884 +8894 +0808 +ENDCHAR +STARTCHAR uni524F +ENCODING 21071 +BBX 15 15 1 -1 +BITMAP +4200 +22FC +2424 +FF24 +2424 +2424 +24A4 +FF64 +2424 +2434 +242C +2446 +4444 +4484 +8518 +ENDCHAR +STARTCHAR uni5250 +ENCODING 21072 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +4104 +4124 +4124 +7F24 +0824 +0824 +FFA4 +88A4 +94A4 +A2A4 +C284 +8084 +8294 +8108 +ENDCHAR +STARTCHAR uni5251 +ENCODING 21073 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +1404 +1224 +2124 +40A4 +BE24 +0024 +1124 +0924 +4924 +2224 +2204 +0784 +7814 +2008 +ENDCHAR +STARTCHAR uni5252 +ENCODING 21074 +BBX 14 16 0 -2 +BITMAP +1204 +1204 +1204 +7F24 +1224 +1224 +FFA4 +0024 +3F24 +2124 +2124 +3F24 +2104 +2104 +3F14 +2108 +ENDCHAR +STARTCHAR uni5253 +ENCODING 21075 +BBX 14 16 0 -2 +BITMAP +0C80 +7080 +11FC +FD24 +3224 +3844 +5484 +9104 +1228 +1010 +0000 +7FF8 +0408 +0808 +1050 +6020 +ENDCHAR +STARTCHAR uni5254 +ENCODING 21076 +BBX 14 15 1 -1 +BITMAP +0004 +7F04 +4124 +7F24 +4124 +7F24 +1024 +3FA4 +4AA4 +92A4 +14A4 +2484 +4884 +1084 +071C +ENDCHAR +STARTCHAR uni5255 +ENCODING 21077 +BBX 14 15 1 -1 +BITMAP +1204 +1204 +1224 +73A4 +1224 +1224 +73A4 +1224 +3224 +D3A4 +1224 +1204 +2204 +2204 +421C +ENDCHAR +STARTCHAR uni5256 +ENCODING 21078 +BBX 14 15 1 -1 +BITMAP +0804 +0804 +7FA4 +2124 +1124 +1224 +0224 +FFE4 +0024 +3F24 +2124 +2104 +2104 +2104 +3F1C +ENDCHAR +STARTCHAR uni5257 +ENCODING 21079 +BBX 14 15 1 -1 +BITMAP +2404 +2204 +1F44 +F044 +0B44 +0C44 +72C4 +25C4 +2244 +1F44 +F044 +0B04 +0C04 +3284 +C19C +ENDCHAR +STARTCHAR uni5258 +ENCODING 21080 +BBX 14 16 0 -2 +BITMAP +2204 +2204 +FF84 +2224 +2224 +3E24 +2224 +2224 +3E24 +2224 +2224 +FFA4 +0004 +2204 +4114 +8088 +ENDCHAR +STARTCHAR uni5259 +ENCODING 21081 +BBX 15 16 0 -2 +BITMAP +4200 +2400 +01F8 +7E48 +2448 +2448 +254C +254A +FE4A +2448 +2448 +2448 +2448 +4488 +44A8 +8510 +ENDCHAR +STARTCHAR uni525A +ENCODING 21082 +BBX 15 16 0 -2 +BITMAP +0402 +0402 +FFC2 +0402 +3F92 +2492 +3F92 +0412 +3F92 +0492 +FFD2 +0492 +3F82 +0402 +140A +0804 +ENDCHAR +STARTCHAR uni525B +ENCODING 21083 +BBX 14 15 1 -1 +BITMAP +0004 +FF84 +80A4 +A2A4 +92A4 +84A4 +BEA4 +88A4 +88A4 +AAA4 +AAA4 +AA84 +BE84 +8084 +839C +ENDCHAR +STARTCHAR uni525C +ENCODING 21084 +BBX 15 15 1 -1 +BITMAP +0402 +0402 +7FD2 +4052 +4052 +2012 +3BD2 +2A52 +4A52 +CA52 +2AD2 +1202 +1222 +2222 +C1EE +ENDCHAR +STARTCHAR uni525D +ENCODING 21085 +BBX 14 15 1 -1 +BITMAP +2004 +2004 +3E04 +4224 +7E24 +0424 +FFA4 +0824 +4924 +2E24 +1C24 +2A04 +4904 +8884 +381C +ENDCHAR +STARTCHAR uni525E +ENCODING 21086 +BBX 14 15 1 -1 +BITMAP +0804 +0804 +FFA4 +1424 +2224 +4124 +0024 +FFE4 +0124 +7924 +4924 +4904 +7904 +0104 +071C +ENDCHAR +STARTCHAR uni525F +ENCODING 21087 +BBX 14 16 0 -2 +BITMAP +0004 +7B84 +0884 +2AA4 +1124 +2AA4 +44A4 +8824 +0024 +7BA4 +08A4 +2AA4 +1104 +2A84 +4494 +8808 +ENDCHAR +STARTCHAR uni5260 +ENCODING 21088 +BBX 14 16 0 -2 +BITMAP +1004 +0804 +FF84 +0024 +0024 +7F24 +4124 +4124 +4124 +7F24 +0824 +2A24 +4904 +8884 +2814 +1008 +ENDCHAR +STARTCHAR uni5261 +ENCODING 21089 +BBX 14 15 1 -1 +BITMAP +0804 +2A04 +2A44 +4944 +1444 +1244 +2144 +48C4 +2A44 +2A44 +4844 +1404 +1204 +2104 +C09C +ENDCHAR +STARTCHAR uni5262 +ENCODING 21090 +BBX 14 16 0 -2 +BITMAP +0004 +FF84 +0804 +1024 +2824 +C4A4 +0D24 +5624 +2524 +D524 +0CA4 +14A4 +2404 +C404 +1414 +0808 +ENDCHAR +STARTCHAR uni5263 +ENCODING 21091 +BBX 14 15 1 -1 +BITMAP +0804 +0804 +1424 +2224 +5D24 +88A4 +7F24 +4924 +4924 +7F24 +0824 +1404 +2204 +4104 +801C +ENDCHAR +STARTCHAR uni5264 +ENCODING 21092 +BBX 14 15 1 -1 +BITMAP +0404 +0404 +FFE4 +2124 +1224 +0C24 +3324 +E1E4 +3F24 +2124 +2124 +3F04 +4104 +4104 +811C +ENDCHAR +STARTCHAR uni5265 +ENCODING 21093 +BBX 14 15 1 -1 +BITMAP +0004 +7E04 +0224 +7E24 +0224 +FFA4 +0824 +4924 +4A24 +2A24 +1C24 +2A04 +4904 +8884 +381C +ENDCHAR +STARTCHAR uni5266 +ENCODING 21094 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +FF84 +1424 +2224 +4924 +88A4 +7F24 +4924 +7F24 +4924 +7F24 +0804 +0A04 +0C14 +0808 +ENDCHAR +STARTCHAR uni5267 +ENCODING 21095 +BBX 14 16 0 -2 +BITMAP +0004 +3F84 +2084 +20A4 +3FA4 +2424 +2424 +3FA4 +2424 +2424 +3FA4 +50A4 +5084 +9084 +1F94 +1088 +ENDCHAR +STARTCHAR uni5268 +ENCODING 21096 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +FF84 +0824 +7F24 +0824 +FFA4 +0824 +FFA4 +1024 +2024 +7F24 +A104 +2104 +3F14 +2108 +ENDCHAR +STARTCHAR uni5269 +ENCODING 21097 +BBX 14 15 1 -1 +BITMAP +0304 +7C04 +0824 +FFA4 +0824 +2AA4 +EB24 +2A24 +6AA4 +B9A4 +1C24 +2A04 +4904 +8804 +081C +ENDCHAR +STARTCHAR uni526A +ENCODING 21098 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0000 +3E08 +3248 +2E48 +3248 +2E48 +2208 +2618 +0000 +FFFE +0202 +0C02 +F01C +ENDCHAR +STARTCHAR uni526B +ENCODING 21099 +BBX 15 16 0 -2 +BITMAP +0402 +0202 +3FE2 +2482 +2492 +3FF2 +2492 +2792 +2012 +2FD2 +2052 +2492 +2282 +4102 +468A +9844 +ENDCHAR +STARTCHAR uni526C +ENCODING 21100 +BBX 14 15 1 -1 +BITMAP +0804 +8904 +8924 +FF24 +0024 +FF24 +1024 +2024 +FF24 +A924 +A924 +A904 +A904 +A904 +AB1C +ENDCHAR +STARTCHAR uni526D +ENCODING 21101 +BBX 14 16 0 -2 +BITMAP +0004 +3F84 +2084 +20A4 +3FA4 +2024 +3FA4 +2424 +2924 +2FA4 +2224 +2FA4 +2204 +4384 +5E14 +8808 +ENDCHAR +STARTCHAR uni526E +ENCODING 21102 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +4104 +4124 +7924 +4924 +4924 +FFA4 +80A4 +BEA4 +A2A4 +A2A4 +BE84 +8084 +8294 +8108 +ENDCHAR +STARTCHAR uni526F +ENCODING 21103 +BBX 14 15 1 -1 +BITMAP +0004 +FF04 +0044 +7E44 +4244 +4244 +7E44 +0044 +FF44 +8944 +8944 +FF04 +8904 +8904 +FF1C +ENDCHAR +STARTCHAR uni5270 +ENCODING 21104 +BBX 14 15 1 -1 +BITMAP +0304 +3C24 +0424 +7FA4 +2524 +2524 +FFE4 +2524 +2524 +7FA4 +0C24 +1624 +2504 +C4C4 +041C +ENDCHAR +STARTCHAR uni5271 +ENCODING 21105 +BBX 15 15 1 -1 +BITMAP +0800 +087C +1424 +2324 +FE24 +0864 +7F24 +4934 +492C +7F26 +0824 +1424 +2244 +4144 +8098 +ENDCHAR +STARTCHAR uni5272 +ENCODING 21106 +BBX 14 15 1 -1 +BITMAP +0804 +0804 +FFA4 +80A4 +88A4 +7F24 +0824 +7F24 +0824 +FFA4 +0024 +7F04 +4104 +4104 +7F1C +ENDCHAR +STARTCHAR uni5273 +ENCODING 21107 +BBX 14 15 1 -1 +BITMAP +2204 +2204 +FFA4 +2224 +2A24 +1424 +2224 +C1A4 +3E24 +0024 +7F24 +4104 +4104 +4104 +7F0C +ENDCHAR +STARTCHAR uni5274 +ENCODING 21108 +BBX 14 15 1 -1 +BITMAP +0804 +4904 +4924 +7F24 +0024 +FFA4 +0024 +7F24 +4124 +4124 +7F24 +2204 +1384 +1C04 +E01C +ENDCHAR +STARTCHAR uni5275 +ENCODING 21109 +BBX 14 15 1 -1 +BITMAP +0404 +0A04 +1124 +2EE4 +C024 +3F24 +2124 +3F24 +2124 +3F24 +2024 +5F04 +5104 +9104 +1F1C +ENDCHAR +STARTCHAR uni5276 +ENCODING 21110 +BBX 14 16 0 -2 +BITMAP +2004 +3F04 +4104 +7E24 +0224 +FFA4 +1024 +28A4 +CD24 +1624 +2524 +CD24 +1484 +2484 +D414 +0808 +ENDCHAR +STARTCHAR uni5277 +ENCODING 21111 +BBX 14 15 1 -1 +BITMAP +0804 +0804 +7FA4 +2224 +1C24 +2324 +7FA4 +5424 +5424 +7F24 +6424 +5F04 +8404 +8784 +3C1C +ENDCHAR +STARTCHAR uni5278 +ENCODING 21112 +BBX 14 16 0 -2 +BITMAP +0804 +FF84 +0804 +7F24 +4924 +7F24 +4924 +7F24 +08A4 +FFA4 +0224 +FFA4 +4204 +2204 +0A14 +0408 +ENDCHAR +STARTCHAR uni5279 +ENCODING 21113 +BBX 14 16 0 -2 +BITMAP +0004 +7704 +1104 +5524 +3324 +5524 +0C24 +3324 +C4A4 +1824 +6224 +0CA4 +7104 +0604 +1814 +E008 +ENDCHAR +STARTCHAR uni527A +ENCODING 21114 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7E7E +08C4 +FF28 +1C10 +2A28 +48C6 +0000 +3FFE +2000 +2FF8 +2208 +4208 +4428 +9810 +ENDCHAR +STARTCHAR uni527B +ENCODING 21115 +BBX 15 16 0 -2 +BITMAP +0202 +2222 +2222 +3FEA +000A +3DEA +252A +252A +3DEA +252A +252A +3DEA +2522 +2522 +55AA +8A44 +ENDCHAR +STARTCHAR uni527C +ENCODING 21116 +BBX 14 16 0 -2 +BITMAP +1004 +2204 +7F04 +4224 +94A4 +F7A4 +0824 +3624 +C924 +30A4 +C424 +1924 +6204 +0C04 +3014 +C008 +ENDCHAR +STARTCHAR uni527D +ENCODING 21117 +BBX 14 15 1 -1 +BITMAP +0004 +FFC4 +1204 +7FA4 +52A4 +7FA4 +0024 +3F24 +0024 +7FA4 +0424 +2504 +2504 +4484 +0C1C +ENDCHAR +STARTCHAR uni527E +ENCODING 21118 +BBX 14 16 1 -2 +BITMAP +0004 +FF84 +8004 +9F04 +9124 +9124 +9F24 +8024 +BBA4 +AAA4 +AAA4 +AAA4 +BB84 +8004 +FFD4 +0008 +ENDCHAR +STARTCHAR uni527F +ENCODING 21119 +BBX 14 15 1 -1 +BITMAP +2904 +5204 +2944 +7F44 +4944 +7F44 +4944 +7F44 +0844 +FFC4 +2A44 +2A04 +4904 +8884 +081C +ENDCHAR +STARTCHAR uni5280 +ENCODING 21120 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +1204 +0C24 +FFA4 +14A4 +2524 +D424 +0824 +FFA4 +94A4 +A2A4 +DD84 +9484 +9C94 +8188 +ENDCHAR +STARTCHAR uni5281 +ENCODING 21121 +BBX 15 16 0 -2 +BITMAP +1202 +1102 +3FC2 +2202 +6212 +BFD2 +2212 +2212 +3FD2 +2212 +2212 +3FD2 +2002 +5482 +4A4A +8A44 +ENDCHAR +STARTCHAR uni5282 +ENCODING 21122 +BBX 15 15 1 -1 +BITMAP +0002 +7FF2 +510A +498A +4A8A +7FFA +448A +552A +552A +552A +552A +5F52 +8452 +8852 +108E +ENDCHAR +STARTCHAR uni5283 +ENCODING 21123 +BBX 14 15 1 -1 +BITMAP +0804 +7F04 +0924 +FFA4 +0924 +7F24 +0824 +7F24 +4924 +7F24 +4924 +7F04 +0004 +0784 +F81C +ENDCHAR +STARTCHAR uni5284 +ENCODING 21124 +BBX 14 15 1 -1 +BITMAP +2204 +2204 +3FE4 +5524 +50A4 +8C24 +0A24 +1124 +20A4 +DF64 +0024 +3F04 +2104 +2104 +3F1C +ENDCHAR +STARTCHAR uni5285 +ENCODING 21125 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +5504 +5524 +7F24 +2024 +7FA4 +90A4 +7CA4 +54A4 +54A4 +7CA4 +1284 +FE84 +0294 +0108 +ENDCHAR +STARTCHAR uni5286 +ENCODING 21126 +BBX 15 16 0 -2 +BITMAP +0202 +3FF2 +2882 +250A +3FEA +250A +2FCA +254A +3FEA +254A +2FCA +250A +2D82 +5542 +652A +8504 +ENDCHAR +STARTCHAR uni5287 +ENCODING 21127 +BBX 14 15 1 -1 +BITMAP +0804 +0F04 +0824 +7FA4 +48A4 +4E24 +78A4 +4FA4 +4024 +7F24 +54A4 +6B04 +D684 +8A44 +361C +ENDCHAR +STARTCHAR uni5288 +ENCODING 21128 +BBX 15 15 1 -1 +BITMAP +0010 +7C10 +447C +7C28 +40FE +BC10 +A4FE +A410 +3C10 +0000 +FFFC +0204 +0404 +1804 +6038 +ENDCHAR +STARTCHAR uni5289 +ENCODING 21129 +BBX 14 15 1 -1 +BITMAP +1004 +6784 +52A4 +74A4 +C9A4 +1424 +2224 +C1A4 +3E24 +0824 +FF84 +0904 +4A04 +2F84 +F81C +ENDCHAR +STARTCHAR uni528A +ENCODING 21130 +BBX 15 16 0 -2 +BITMAP +0402 +0B02 +30C2 +DF22 +0012 +7FD2 +5552 +4E52 +7FD2 +0012 +3F92 +2092 +3F82 +2082 +3F8A +2084 +ENDCHAR +STARTCHAR uni528B +ENCODING 21131 +BBX 14 16 0 -2 +BITMAP +0004 +7F04 +4104 +7F24 +0024 +F7A4 +94A4 +F7A4 +0824 +0824 +FFA4 +1C24 +2A04 +4904 +8894 +0808 +ENDCHAR +STARTCHAR uni528C +ENCODING 21132 +BBX 15 16 0 -2 +BITMAP +0202 +13C2 +1202 +7FEA +010A +014A +3FEA +210A +3F0A +254A +254A +2D4A +3682 +44A2 +896A +3224 +ENDCHAR +STARTCHAR uni528D +ENCODING 21133 +BBX 15 15 1 -1 +BITMAP +0402 +0A02 +3192 +C072 +1F12 +0012 +7BD2 +4A52 +4A52 +7BD2 +0012 +2082 +2082 +5142 +8A26 +ENDCHAR +STARTCHAR uni528E +ENCODING 21134 +BBX 14 16 0 -2 +BITMAP +0800 +0800 +14FC +2224 +4124 +BE24 +0024 +0024 +7724 +5524 +5524 +7724 +2244 +2244 +5594 +8908 +ENDCHAR +STARTCHAR uni528F +ENCODING 21135 +BBX 14 16 0 -2 +BITMAP +0804 +4904 +2A04 +FFA4 +80A4 +3E24 +2224 +2224 +3E24 +0024 +7F24 +4924 +7F04 +4904 +7F14 +4108 +ENDCHAR +STARTCHAR uni5290 +ENCODING 21136 +BBX 15 16 0 -2 +BITMAP +1102 +7FC2 +1502 +1202 +3FD2 +6412 +BF92 +2412 +3F92 +2412 +3FD2 +2012 +7F82 +1102 +0E0A +7184 +ENDCHAR +STARTCHAR uni5291 +ENCODING 21137 +BBX 15 15 1 -1 +BITMAP +0402 +0402 +FFE2 +0A12 +F5F2 +5552 +5552 +B5B2 +0012 +2092 +3F92 +2092 +3F82 +4082 +808E +ENDCHAR +STARTCHAR uni5292 +ENCODING 21138 +BBX 14 15 1 -1 +BITMAP +0800 +14FC +2224 +C1A4 +3E24 +0024 +7764 +5564 +55A4 +7724 +0024 +2224 +2244 +5544 +9598 +ENDCHAR +STARTCHAR uni5293 +ENCODING 21139 +BBX 14 15 1 -1 +BITMAP +0804 +1004 +3E44 +2244 +3E44 +2244 +7F44 +4944 +7F44 +4944 +7F44 +0004 +FF84 +2204 +421C +ENDCHAR +STARTCHAR uni5294 +ENCODING 21140 +BBX 15 15 1 -1 +BITMAP +0800 +14FC +2224 +C1A4 +3E24 +00A4 +7764 +5534 +552C +7726 +0024 +2224 +2244 +5544 +9598 +ENDCHAR +STARTCHAR uni5295 +ENCODING 21141 +BBX 14 16 0 -2 +BITMAP +0844 +7384 +4204 +7BE4 +52A4 +52A4 +8424 +7FA4 +40A4 +7FA4 +40A4 +7FA4 +4084 +7F84 +2114 +4088 +ENDCHAR +STARTCHAR uni5296 +ENCODING 21142 +BBX 15 16 0 -2 +BITMAP +3E02 +4202 +FF82 +4082 +7F92 +4492 +7712 +4452 +3FD2 +4212 +FF92 +4892 +7F82 +1A02 +294A +C7C4 +ENDCHAR +STARTCHAR uni5297 +ENCODING 21143 +BBX 15 16 0 -2 +BITMAP +5282 +7BE2 +9482 +7BEA +318A +5AAA +946A +3FCA +204A +3FCA +204A +3FCA +2042 +3FC2 +108A +2044 +ENDCHAR +STARTCHAR uni5298 +ENCODING 21144 +BBX 15 15 1 -1 +BITMAP +0402 +7FE2 +488A +7DEA +488A +5AAA +5AAA +6AAA +450A +5DCA +450A +5DC2 +8502 +9DC2 +0906 +ENDCHAR +STARTCHAR uni5299 +ENCODING 21145 +BBX 15 16 0 -2 +BITMAP +1F02 +2102 +3E02 +0202 +7FD2 +1892 +6512 +1A92 +6652 +1A12 +2492 +FBF2 +AAA2 +FBE2 +28AA +FBE4 +ENDCHAR +STARTCHAR uni529A +ENCODING 21146 +BBX 15 16 0 -2 +BITMAP +7FC2 +4042 +7FC2 +5242 +4A92 +5252 +5FD2 +5552 +5FD2 +6452 +5F52 +5552 +5F42 +4442 +BF4A +0084 +ENDCHAR +STARTCHAR uni529B +ENCODING 21147 +BBX 13 15 1 -1 +BITMAP +0400 +0400 +0400 +0400 +FFF8 +0408 +0408 +0408 +0808 +0808 +0808 +1008 +1010 +2010 +40E0 +ENDCHAR +STARTCHAR uni529C +ENCODING 21148 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +FF20 +1120 +1120 +1120 +1120 +1120 +2120 +2122 +2122 +4122 +4A1E +8400 +ENDCHAR +STARTCHAR uni529D +ENCODING 21149 +BBX 14 16 0 -2 +BITMAP +0040 +0040 +0040 +FC40 +05FC +0444 +4844 +2844 +1044 +1084 +2884 +2484 +4504 +8104 +0228 +0410 +ENDCHAR +STARTCHAR uni529E +ENCODING 21150 +BBX 14 16 1 -2 +BITMAP +0400 +0400 +0400 +0400 +FFE0 +0420 +0420 +2430 +2428 +4824 +8824 +1020 +1020 +2020 +4140 +8080 +ENDCHAR +STARTCHAR uni529F +ENCODING 21151 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +FC40 +13FC +1044 +1044 +1044 +1044 +1044 +1C84 +3084 +C104 +0104 +0204 +0438 +ENDCHAR +STARTCHAR uni52A0 +ENCODING 21152 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +107C +FE44 +1244 +1244 +1244 +1244 +2244 +2244 +2244 +4244 +4444 +847C +1800 +ENDCHAR +STARTCHAR uni52A1 +ENCODING 21153 +BBX 15 16 0 -2 +BITMAP +0400 +0400 +0FF0 +1820 +24C0 +0300 +0CC0 +3230 +C20E +1FF0 +0210 +0410 +0410 +0810 +10A0 +2040 +ENDCHAR +STARTCHAR uni52A2 +ENCODING 21154 +BBX 14 16 0 -2 +BITMAP +0020 +0020 +FF20 +2020 +20FC +2024 +3E24 +2224 +2224 +2224 +2224 +2224 +4244 +4244 +94A8 +0910 +ENDCHAR +STARTCHAR uni52A3 +ENCODING 21155 +BBX 15 15 1 -1 +BITMAP +0100 +0920 +1110 +2108 +C126 +0720 +00C0 +0700 +F900 +0100 +7FFC +0204 +0404 +1804 +6038 +ENDCHAR +STARTCHAR uni52A4 +ENCODING 21156 +BBX 15 15 1 -1 +BITMAP +0620 +3820 +2020 +2020 +20FE +3F22 +2422 +2422 +2422 +2422 +2422 +4442 +4442 +8482 +050C +ENDCHAR +STARTCHAR uni52A5 +ENCODING 21157 +BBX 14 16 0 -2 +BITMAP +1020 +0820 +0820 +FF20 +00FC +0024 +3C24 +2424 +2424 +2424 +2424 +2544 +4644 +4484 +8128 +0210 +ENDCHAR +STARTCHAR uni52A6 +ENCODING 21158 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0208 +0408 +1808 +6070 +0000 +2020 +FEFE +2222 +2222 +4242 +4282 +8D0C +ENDCHAR +STARTCHAR uni52A7 +ENCODING 21159 +BBX 14 16 0 -2 +BITMAP +0420 +0E20 +7820 +0820 +08FC +7E24 +0824 +0824 +0824 +FF24 +0824 +0844 +0844 +0884 +2928 +1210 +ENDCHAR +STARTCHAR uni52A8 +ENCODING 21160 +BBX 14 16 0 -2 +BITMAP +0040 +0040 +7C40 +0040 +01FC +0044 +FE44 +2044 +2044 +2084 +4884 +4484 +FD04 +4504 +0228 +0410 +ENDCHAR +STARTCHAR uni52A9 +ENCODING 21161 +BBX 14 15 1 -1 +BITMAP +0040 +3C40 +2440 +2440 +3DFC +2444 +2444 +2444 +3C44 +2444 +2484 +2684 +3904 +C204 +0438 +ENDCHAR +STARTCHAR uni52AA +ENCODING 21162 +BBX 15 15 1 -1 +BITMAP +0800 +08FC +FF44 +2144 +2228 +7C10 +0B68 +3006 +C100 +3FFC +0104 +0204 +0404 +1804 +6038 +ENDCHAR +STARTCHAR uni52AB +ENCODING 21163 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +0820 +7EFE +0822 +0822 +0822 +FFA2 +1022 +1422 +2242 +2742 +3942 +C082 +011C +ENDCHAR +STARTCHAR uni52AC +ENCODING 21164 +BBX 14 15 1 -1 +BITMAP +2020 +2020 +7E20 +42FC +8224 +7A24 +4A24 +4A24 +4A24 +4A24 +7A44 +0244 +0444 +0484 +1918 +ENDCHAR +STARTCHAR uni52AD +ENCODING 21165 +BBX 14 15 1 -1 +BITMAP +0020 +0020 +FE20 +22FC +2224 +4224 +4224 +8C24 +0024 +7C24 +4444 +4444 +4444 +4484 +7D18 +ENDCHAR +STARTCHAR uni52AE +ENCODING 21166 +BBX 14 16 0 -2 +BITMAP +0820 +0820 +4820 +4820 +7EFC +4824 +8824 +0824 +FF24 +0824 +0824 +1444 +2244 +4284 +8128 +0210 +ENDCHAR +STARTCHAR uni52AF +ENCODING 21167 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +FC40 +2040 +23FC +2044 +7844 +4844 +C844 +4844 +4844 +4884 +7884 +0104 +0238 +ENDCHAR +STARTCHAR uni52B0 +ENCODING 21168 +BBX 13 16 1 -2 +BITMAP +2040 +2040 +4040 +FC40 +85F8 +8448 +8448 +8448 +FC48 +8448 +8448 +8448 +8488 +FC88 +8550 +0220 +ENDCHAR +STARTCHAR uni52B1 +ENCODING 21169 +BBX 14 15 1 -1 +BITMAP +0020 +7E20 +4020 +4020 +7EFC +5024 +5024 +5E24 +5224 +5224 +5224 +9244 +A244 +2284 +4D18 +ENDCHAR +STARTCHAR uni52B2 +ENCODING 21170 +BBX 14 16 0 -2 +BITMAP +0020 +7E20 +0420 +0820 +18FC +2424 +4224 +8124 +0024 +7E24 +0824 +0844 +0844 +0E84 +F128 +4210 +ENDCHAR +STARTCHAR uni52B3 +ENCODING 21171 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFE +4202 +8204 +3FF0 +0210 +0210 +0410 +0410 +0810 +10A0 +2040 +ENDCHAR +STARTCHAR uni52B4 +ENCODING 21172 +BBX 14 15 1 -1 +BITMAP +2208 +1108 +1110 +0020 +7FFC +4004 +4204 +0200 +7FF8 +0208 +0208 +0408 +0810 +3010 +C0E0 +ENDCHAR +STARTCHAR uni52B5 +ENCODING 21173 +BBX 15 15 1 -1 +BITMAP +0920 +0920 +1110 +3FF8 +0280 +0440 +7FFC +0820 +3218 +C206 +1FF0 +0410 +0410 +0810 +30E0 +ENDCHAR +STARTCHAR uni52B6 +ENCODING 21174 +BBX 14 16 0 -2 +BITMAP +0420 +0E20 +7020 +4020 +40FC +7F24 +4024 +4024 +5E24 +5224 +5224 +5224 +5244 +9E44 +92A8 +0110 +ENDCHAR +STARTCHAR uni52B7 +ENCODING 21175 +BBX 13 16 1 -2 +BITMAP +4440 +2440 +2840 +FE40 +11F8 +1048 +7C48 +1048 +1048 +FE48 +1048 +1088 +2088 +2108 +4250 +8420 +ENDCHAR +STARTCHAR uni52B8 +ENCODING 21176 +BBX 14 16 0 -2 +BITMAP +0820 +0820 +7F20 +0820 +08FC +0824 +FFA4 +0024 +0824 +0824 +7F24 +0824 +0844 +0F44 +F0A8 +4110 +ENDCHAR +STARTCHAR uni52B9 +ENCODING 21177 +BBX 14 15 1 -1 +BITMAP +0820 +0820 +0820 +FF20 +24FC +4224 +8124 +2424 +2444 +1844 +0844 +1484 +2284 +4104 +8238 +ENDCHAR +STARTCHAR uni52BA +ENCODING 21178 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1220 +2620 +79FE +0022 +2822 +2822 +7F22 +8822 +0822 +FF42 +0842 +0882 +091C +ENDCHAR +STARTCHAR uni52BB +ENCODING 21179 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FE20 +8020 +BDFE +8822 +8822 +BC22 +8822 +8822 +BC22 +8042 +8042 +FE82 +011C +ENDCHAR +STARTCHAR uni52BC +ENCODING 21180 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +1020 +FE20 +11FC +1024 +1024 +7C24 +0024 +7C24 +4444 +4444 +4444 +4484 +7D18 +ENDCHAR +STARTCHAR uni52BD +ENCODING 21181 +BBX 14 16 0 -2 +BITMAP +7F84 +0824 +1024 +3F24 +5124 +0A24 +0404 +0804 +3014 +C208 +0200 +7FF8 +0408 +0808 +1050 +6020 +ENDCHAR +STARTCHAR uni52BE +ENCODING 21182 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +1020 +FE20 +11FC +2424 +4424 +2824 +1224 +2224 +4444 +0844 +1444 +2284 +C118 +ENDCHAR +STARTCHAR uni52BF +ENCODING 21183 +BBX 14 16 1 -2 +BITMAP +1080 +1080 +FBF0 +1090 +1890 +3390 +D094 +1154 +510C +2604 +0400 +FFF0 +0810 +1010 +20A0 +C040 +ENDCHAR +STARTCHAR uni52C0 +ENCODING 21184 +BBX 14 16 0 -2 +BITMAP +0820 +0820 +0820 +7F20 +08FC +0824 +7F24 +4124 +4124 +7F24 +1424 +1424 +2544 +2644 +44A8 +8110 +ENDCHAR +STARTCHAR uni52C1 +ENCODING 21185 +BBX 14 15 1 -1 +BITMAP +0020 +FF20 +2520 +4AFC +9424 +4A24 +2524 +0024 +7E24 +0824 +0824 +0844 +0844 +0E84 +F118 +ENDCHAR +STARTCHAR uni52C2 +ENCODING 21186 +BBX 14 16 0 -2 +BITMAP +0820 +2820 +2820 +3E20 +48FC +0824 +FF24 +0024 +0024 +3E24 +2224 +2224 +2244 +3E44 +22A8 +0110 +ENDCHAR +STARTCHAR uni52C3 +ENCODING 21187 +BBX 14 15 1 -1 +BITMAP +0820 +0820 +FF20 +08FC +0824 +FF24 +8124 +BD24 +0424 +0844 +0F44 +F844 +0884 +0884 +3918 +ENDCHAR +STARTCHAR uni52C4 +ENCODING 21188 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +3F90 +4010 +BF7E +2112 +2912 +2512 +FFD2 +2112 +4912 +4512 +7F92 +0122 +0A2A +0444 +ENDCHAR +STARTCHAR uni52C5 +ENCODING 21189 +BBX 14 15 1 -1 +BITMAP +0820 +0820 +FF20 +08FC +7F24 +4924 +4924 +4924 +7F24 +1824 +2C24 +2A44 +4A44 +8884 +0918 +ENDCHAR +STARTCHAR uni52C6 +ENCODING 21190 +BBX 13 16 1 -2 +BITMAP +2040 +1040 +FC40 +8440 +85F8 +FC48 +8448 +8448 +FC48 +8048 +9048 +8888 +9488 +A508 +C250 +8420 +ENDCHAR +STARTCHAR uni52C7 +ENCODING 21191 +BBX 13 14 2 -1 +BITMAP +7FF0 +0860 +0480 +7FF0 +4210 +7FF0 +4210 +4210 +7FF0 +0200 +FFF8 +0408 +1808 +E030 +ENDCHAR +STARTCHAR uni52C8 +ENCODING 21192 +BBX 14 15 1 -1 +BITMAP +0040 +FE40 +0440 +29FC +1044 +FE44 +9244 +9244 +FE44 +9244 +9284 +FE84 +9284 +9304 +8E18 +ENDCHAR +STARTCHAR uni52C9 +ENCODING 21193 +BBX 15 15 1 -1 +BITMAP +2020 +3E20 +2220 +44FC +FF24 +4924 +4924 +4924 +7F44 +1444 +1488 +2508 +2432 +4202 +81FE +ENDCHAR +STARTCHAR uni52CA +ENCODING 21194 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FF20 +0820 +08FC +7E24 +4224 +4224 +4224 +7E44 +1444 +1484 +251A +4402 +83FE +ENDCHAR +STARTCHAR uni52CB +ENCODING 21195 +BBX 14 16 0 -2 +BITMAP +0020 +3E20 +2220 +2220 +3EFC +0024 +7F24 +4124 +4924 +4924 +4924 +4944 +1444 +1284 +2128 +C210 +ENDCHAR +STARTCHAR uni52CC +ENCODING 21196 +BBX 14 15 1 -1 +BITMAP +2A20 +2A20 +4920 +7F7C +1424 +1424 +FFA4 +2224 +2224 +7F24 +A2A4 +2E44 +2044 +2184 +1F18 +ENDCHAR +STARTCHAR uni52CD +ENCODING 21197 +BBX 14 15 1 -1 +BITMAP +0820 +0820 +FF20 +0020 +7EFC +4224 +4224 +4224 +7E24 +0824 +4A24 +4A44 +8944 +8984 +3918 +ENDCHAR +STARTCHAR uni52CE +ENCODING 21198 +BBX 14 16 0 -2 +BITMAP +0820 +0820 +7E20 +0820 +08FC +FF24 +2224 +4124 +88A4 +0824 +7E24 +0824 +0844 +0F44 +F8A8 +4110 +ENDCHAR +STARTCHAR uni52CF +ENCODING 21199 +BBX 14 16 0 -2 +BITMAP +1020 +0820 +7F20 +0020 +22FC +1424 +FFA4 +0024 +0024 +3E24 +2224 +2224 +2244 +3E44 +22A8 +0110 +ENDCHAR +STARTCHAR uni52D0 +ENCODING 21200 +BBX 14 15 1 -1 +BITMAP +0020 +7E20 +0420 +0820 +1EFC +E824 +0824 +1824 +0024 +7F24 +5524 +5544 +57C4 +7884 +C118 +ENDCHAR +STARTCHAR uni52D1 +ENCODING 21201 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +0820 +FF20 +08FE +4A22 +4A22 +AD22 +A922 +1C22 +1C22 +2A22 +4942 +8842 +089C +ENDCHAR +STARTCHAR uni52D2 +ENCODING 21202 +BBX 14 15 1 -1 +BITMAP +2220 +2220 +FFA0 +2220 +3EFC +0824 +7F24 +4924 +4924 +7F24 +0824 +FFC4 +0844 +0884 +0918 +ENDCHAR +STARTCHAR uni52D3 +ENCODING 21203 +BBX 14 16 1 -2 +BITMAP +8820 +8920 +EA20 +8C20 +A9FC +C924 +9724 +2024 +FE24 +8224 +8224 +FE24 +8224 +8244 +FE54 +8288 +ENDCHAR +STARTCHAR uni52D4 +ENCODING 21204 +BBX 14 16 0 -2 +BITMAP +0020 +FFA0 +0820 +1020 +7F7C +5524 +5524 +5D24 +5524 +5524 +5D24 +5524 +5544 +5544 +7F94 +4108 +ENDCHAR +STARTCHAR uni52D5 +ENCODING 21205 +BBX 14 15 1 -1 +BITMAP +0720 +7820 +0820 +FF20 +08FC +7F24 +4924 +7F24 +4924 +7F44 +0844 +7F44 +0884 +0F84 +F118 +ENDCHAR +STARTCHAR uni52D6 +ENCODING 21206 +BBX 14 15 1 -1 +BITMAP +0020 +FF20 +8120 +BD20 +81FC +BD24 +8124 +0024 +7E24 +4224 +7E24 +4244 +7E44 +4284 +7F18 +ENDCHAR +STARTCHAR uni52D7 +ENCODING 21207 +BBX 14 14 1 -1 +BITMAP +1FF8 +1008 +1FF8 +1008 +1FF8 +0020 +3C20 +25FC +3C24 +2424 +3C44 +2444 +2E84 +F118 +ENDCHAR +STARTCHAR uni52D8 +ENCODING 21208 +BBX 14 15 1 -1 +BITMAP +2220 +2220 +FF20 +22FC +3E24 +2224 +3E24 +2224 +FFA4 +5424 +5424 +5744 +6044 +4084 +7F38 +ENDCHAR +STARTCHAR uni52D9 +ENCODING 21209 +BBX 15 15 1 -1 +BITMAP +0040 +FC40 +04FC +2B08 +3090 +1060 +FE98 +1506 +3080 +33FC +5084 +5084 +9104 +1204 +7438 +ENDCHAR +STARTCHAR uni52DA +ENCODING 21210 +BBX 15 16 0 -2 +BITMAP +5210 +5210 +FF90 +5210 +5E7E +4012 +7F12 +0012 +7F12 +4112 +4912 +4912 +4912 +1422 +222A +C144 +ENDCHAR +STARTCHAR uni52DB +ENCODING 21211 +BBX 14 15 1 -1 +BITMAP +0020 +7E20 +4220 +7EFC +0024 +7E24 +4224 +7E24 +4224 +7E24 +4244 +7E44 +2044 +4484 +8318 +ENDCHAR +STARTCHAR uni52DC +ENCODING 21212 +BBX 14 16 0 -2 +BITMAP +2820 +4420 +9220 +2020 +48FC +FC24 +0424 +0024 +EE24 +2224 +AA24 +6624 +AA44 +2244 +AAA8 +4510 +ENDCHAR +STARTCHAR uni52DD +ENCODING 21213 +BBX 15 15 1 -1 +BITMAP +0248 +7950 +4840 +4BFC +4890 +7890 +4FFE +4908 +4A44 +7C42 +4BFC +4844 +4844 +8884 +9B18 +ENDCHAR +STARTCHAR uni52DE +ENCODING 21214 +BBX 15 15 1 -1 +BITMAP +1024 +54A8 +1830 +2448 +C584 +0000 +FFFE +8202 +8202 +7FF8 +0408 +0408 +0810 +1010 +60E0 +ENDCHAR +STARTCHAR uni52DF +ENCODING 21215 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +FFFE +1110 +2FF8 +C216 +0C10 +7070 +ENDCHAR +STARTCHAR uni52E0 +ENCODING 21216 +BBX 15 15 1 -1 +BITMAP +0010 +F790 +5290 +9590 +52FE +8C92 +1412 +2212 +C992 +1212 +6492 +1922 +6222 +0C42 +708C +ENDCHAR +STARTCHAR uni52E1 +ENCODING 21217 +BBX 14 16 0 -2 +BITMAP +0020 +FFA0 +1420 +7F20 +55FC +5524 +7F24 +0024 +7F24 +0024 +FFA4 +0824 +2A44 +4944 +A8A8 +1110 +ENDCHAR +STARTCHAR uni52E2 +ENCODING 21218 +BBX 15 15 1 -1 +BITMAP +1020 +7C20 +11F8 +FE28 +2428 +56A8 +9048 +7C6A +10AA +FD06 +0200 +7FFC +0404 +1804 +E038 +ENDCHAR +STARTCHAR uni52E3 +ENCODING 21219 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +7F10 +0810 +7F7E +0812 +FF92 +4112 +7F12 +4112 +7F12 +4122 +7F22 +3242 +C18C +ENDCHAR +STARTCHAR uni52E4 +ENCODING 21220 +BBX 14 15 1 -1 +BITMAP +2220 +2220 +FF20 +22FC +7F24 +4924 +4924 +7F24 +0824 +7F24 +0824 +7F44 +0844 +0F84 +F118 +ENDCHAR +STARTCHAR uni52E5 +ENCODING 21221 +BBX 13 16 1 -2 +BITMAP +F9F0 +0910 +09F0 +F840 +83F8 +FA48 +0BF8 +0850 +57F8 +2408 +0400 +FFF0 +0810 +1010 +20A0 +C040 +ENDCHAR +STARTCHAR uni52E6 +ENCODING 21222 +BBX 15 15 1 -1 +BITMAP +2910 +5210 +2910 +7F10 +49FE +7F12 +4912 +7F12 +0812 +FF92 +1C12 +2A22 +4922 +8842 +088C +ENDCHAR +STARTCHAR uni52E7 +ENCODING 21223 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +3F20 +48FC +8824 +7F24 +1224 +2424 +7F24 +A424 +3E24 +2444 +3E44 +2484 +3F38 +ENDCHAR +STARTCHAR uni52E8 +ENCODING 21224 +BBX 14 16 0 -2 +BITMAP +2020 +3E20 +4220 +FF20 +49FC +4924 +7F24 +1024 +2824 +D524 +2624 +CD24 +1544 +2444 +D4A8 +0910 +ENDCHAR +STARTCHAR uni52E9 +ENCODING 21225 +BBX 14 16 0 -2 +BITMAP +5220 +FFA0 +5220 +5E20 +40FC +7F24 +0024 +7E24 +4224 +7E24 +4224 +7E44 +4244 +7E84 +2528 +4210 +ENDCHAR +STARTCHAR uni52EA +ENCODING 21226 +BBX 15 16 0 -2 +BITMAP +0610 +7810 +1010 +FF90 +227E +5D12 +9492 +1C12 +0012 +7F12 +4112 +5D12 +5512 +5D22 +412A +4344 +ENDCHAR +STARTCHAR uni52EB +ENCODING 21227 +BBX 15 16 0 -2 +BITMAP +0F10 +F810 +4910 +2A7E +FF92 +2A12 +4912 +8092 +7F12 +4922 +4922 +7F22 +4942 +4942 +7F94 +4108 +ENDCHAR +STARTCHAR uni52EC +ENCODING 21228 +BBX 15 16 0 -2 +BITMAP +0810 +4910 +2A10 +7F10 +107E +FF92 +2212 +5112 +A292 +3C12 +0912 +7F12 +0812 +4922 +88AA +1844 +ENDCHAR +STARTCHAR uni52ED +ENCODING 21229 +BBX 15 16 0 -2 +BITMAP +1010 +0810 +7F10 +2210 +FF7E +0012 +7F12 +4912 +7F12 +4912 +7F12 +0812 +7F12 +0822 +0F2A +F044 +ENDCHAR +STARTCHAR uni52EE +ENCODING 21230 +BBX 15 16 0 -2 +BITMAP +0810 +0F10 +0810 +7F90 +48FE +7E12 +4912 +4712 +4012 +7F92 +4812 +5512 +4A12 +B722 +0AAA +3644 +ENDCHAR +STARTCHAR uni52EF +ENCODING 21231 +BBX 14 16 0 -2 +BITMAP +0820 +FF20 +0020 +FF20 +817C +BD24 +A524 +FF24 +0024 +7E24 +4224 +7E24 +4244 +7E44 +0094 +FF08 +ENDCHAR +STARTCHAR uni52F0 +ENCODING 21232 +BBX 15 15 1 -1 +BITMAP +1000 +107C +7E54 +1254 +127C +2254 +4C54 +0054 +447C +FF10 +5508 +5552 +5552 +5594 +BB0C +ENDCHAR +STARTCHAR uni52F1 +ENCODING 21233 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +FF90 +2210 +7F7E +4912 +7F12 +4912 +7F12 +0812 +FF92 +8892 +8A92 +BEA2 +82AA +81C4 +ENDCHAR +STARTCHAR uni52F2 +ENCODING 21234 +BBX 15 15 1 -1 +BITMAP +7E20 +0820 +FFA0 +087C +7F24 +4924 +7F24 +4924 +7F24 +0844 +7F44 +0884 +FF18 +4844 +8422 +ENDCHAR +STARTCHAR uni52F3 +ENCODING 21235 +BBX 15 15 1 -1 +BITMAP +0710 +7810 +0810 +FF10 +087E +7F12 +6B12 +5D12 +4912 +7F22 +0822 +FFA2 +5542 +8AC2 +888C +ENDCHAR +STARTCHAR uni52F4 +ENCODING 21236 +BBX 15 16 0 -2 +BITMAP +0810 +0F90 +0810 +7F90 +48FE +7E12 +4892 +5F92 +5512 +5F12 +5512 +5F12 +4812 +5522 +B2AA +5E44 +ENDCHAR +STARTCHAR uni52F5 +ENCODING 21237 +BBX 15 15 1 -1 +BITMAP +0010 +7FD0 +4910 +7FD0 +493E +5F92 +5492 +5F92 +5492 +5F92 +4412 +BFD2 +A552 +2762 +2CCC +ENDCHAR +STARTCHAR uni52F6 +ENCODING 21238 +BBX 15 16 0 -2 +BITMAP +2210 +4F90 +821E +14A4 +2FD4 +6014 +AF94 +2888 +2F88 +2894 +29A2 +0200 +7FFC +0404 +1828 +6010 +ENDCHAR +STARTCHAR uni52F7 +ENCODING 21239 +BBX 15 15 1 -1 +BITMAP +0810 +FF10 +0010 +7710 +557E +7712 +2212 +7F12 +2212 +7F12 +2212 +FF12 +62A2 +3922 +E0CC +ENDCHAR +STARTCHAR uni52F8 +ENCODING 21240 +BBX 15 15 1 -1 +BITMAP +2210 +2210 +FF90 +2210 +777E +5512 +7712 +2412 +7F12 +C812 +7F12 +4812 +7F22 +4822 +7F4C +ENDCHAR +STARTCHAR uni52F9 +ENCODING 21241 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +3FFC +2004 +4004 +4004 +8004 +0004 +0004 +0004 +0004 +0004 +0008 +0008 +0070 +ENDCHAR +STARTCHAR uni52FA +ENCODING 21242 +BBX 14 15 1 -1 +BITMAP +0800 +0800 +0800 +1FFC +1004 +2004 +4004 +8C04 +0304 +0084 +0004 +0004 +0008 +0008 +0070 +ENDCHAR +STARTCHAR uni52FB +ENCODING 21243 +BBX 14 15 1 -1 +BITMAP +0800 +0800 +0800 +1FFC +1004 +2004 +4004 +9F84 +0004 +0004 +0004 +3FC4 +0008 +0008 +0070 +ENDCHAR +STARTCHAR uni52FC +ENCODING 21244 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +3FFC +2004 +4404 +8404 +3F84 +0484 +0484 +0884 +0894 +1094 +2074 +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni52FD +ENCODING 21245 +BBX 13 16 0 -2 +BITMAP +0800 +0800 +1000 +1FF8 +2008 +4208 +8208 +0208 +0508 +0488 +0488 +0848 +1048 +2008 +0050 +0020 +ENDCHAR +STARTCHAR uni52FE +ENCODING 21246 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +1FFC +2004 +2404 +4404 +8404 +0504 +0884 +08C4 +1324 +7C24 +0008 +0008 +0070 +ENDCHAR +STARTCHAR uni52FF +ENCODING 21247 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +1000 +3FFC +2444 +4444 +8844 +0884 +1084 +2104 +C104 +0204 +0C08 +3008 +0070 +ENDCHAR +STARTCHAR uni5300 +ENCODING 21248 +BBX 14 15 1 -1 +BITMAP +0800 +0800 +0800 +1FFC +1004 +2004 +4004 +9F84 +0004 +0004 +00C4 +0704 +3808 +0008 +0070 +ENDCHAR +STARTCHAR uni5301 +ENCODING 21249 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +1FFC +1084 +2884 +2884 +4884 +8504 +0504 +0204 +0308 +04C8 +1838 +6016 +00E0 +ENDCHAR +STARTCHAR uni5302 +ENCODING 21250 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +3FFC +2004 +4004 +9004 +1184 +1E04 +1004 +1044 +1044 +0FC4 +0008 +0008 +0070 +ENDCHAR +STARTCHAR uni5303 +ENCODING 21251 +BBX 14 16 0 -2 +BITMAP +0800 +0800 +0FFC +1004 +2104 +4104 +9104 +1284 +1244 +1424 +1824 +1004 +1FE4 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni5304 +ENCODING 21252 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +3FFC +2004 +4204 +8104 +0004 +3FF4 +0804 +0804 +0804 +0804 +0FE4 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni5305 +ENCODING 21253 +BBX 14 15 1 -1 +BITMAP +2000 +2000 +3FF8 +4008 +4008 +9F88 +0088 +0088 +0090 +3F90 +2060 +2004 +2004 +2004 +1FFC +ENDCHAR +STARTCHAR uni5306 +ENCODING 21254 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +3FFC +2444 +4444 +4844 +A844 +1884 +1684 +2184 +4144 +8204 +0408 +1808 +0070 +ENDCHAR +STARTCHAR uni5307 +ENCODING 21255 +BBX 14 15 1 -1 +BITMAP +0800 +0800 +0800 +1FFC +1004 +2404 +4404 +8FC4 +1044 +2844 +0684 +0104 +0608 +3808 +0070 +ENDCHAR +STARTCHAR uni5308 +ENCODING 21256 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +3FFC +2004 +4084 +4084 +A8A4 +2524 +2224 +2524 +38A4 +2024 +3FE8 +0008 +0070 +ENDCHAR +STARTCHAR uni5309 +ENCODING 21257 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +3FFC +2004 +4004 +BFE4 +0204 +1244 +0A44 +0A84 +0204 +7FF4 +0204 +0204 +0228 +0210 +ENDCHAR +STARTCHAR uni530A +ENCODING 21258 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +1FFC +2004 +4204 +A244 +1244 +1284 +7FE4 +0704 +0A84 +1244 +6208 +0208 +0070 +ENDCHAR +STARTCHAR uni530B +ENCODING 21259 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +1FFC +2004 +4804 +8FC4 +1204 +0204 +3FE4 +0204 +1244 +1244 +1FC8 +0008 +0070 +ENDCHAR +STARTCHAR uni530C +ENCODING 21260 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +3FFC +2204 +4504 +8884 +1044 +6FB4 +0004 +1FC4 +1044 +1044 +1FC4 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni530D +ENCODING 21261 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +3FFC +4084 +8244 +7FF4 +0204 +3FE4 +2224 +3FE4 +2224 +3FE4 +2224 +2224 +22F8 +ENDCHAR +STARTCHAR uni530E +ENCODING 21262 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +1FFC +2404 +7FE4 +8884 +1244 +6234 +1FC4 +1244 +1FC4 +1244 +1FC4 +0224 +01F4 +0008 +ENDCHAR +STARTCHAR uni530F +ENCODING 21263 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FF7C +2884 +4504 +83F4 +7C94 +0094 +FF94 +20F4 +7E8C +4280 +0282 +0282 +1C7E +ENDCHAR +STARTCHAR uni5310 +ENCODING 21264 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +3FFC +4004 +7FE4 +8004 +1FC4 +1044 +1FC4 +0004 +3FE4 +2224 +3FE8 +2228 +3FF0 +ENDCHAR +STARTCHAR uni5311 +ENCODING 21265 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +3FFC +2804 +5EF4 +9214 +1E14 +12F4 +1E84 +1284 +7EF4 +0A14 +1214 +2A54 +4428 +0010 +ENDCHAR +STARTCHAR uni5312 +ENCODING 21266 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +1FFC +2884 +4884 +BFE4 +0A84 +0504 +0884 +1744 +6034 +1FC4 +1044 +1044 +1FD4 +1048 +ENDCHAR +STARTCHAR uni5313 +ENCODING 21267 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +3FFC +4004 +BDE4 +2524 +2524 +3D34 +2604 +25E4 +3C24 +20A4 +2844 +2CA4 +3328 +2010 +ENDCHAR +STARTCHAR uni5314 +ENCODING 21268 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +3FFC +2804 +5EF4 +9294 +1E94 +12F4 +1E04 +12F4 +7E94 +0A94 +12F4 +2A04 +4428 +0010 +ENDCHAR +STARTCHAR uni5315 +ENCODING 21269 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +1004 +1008 +1010 +1060 +1180 +1E00 +F000 +1000 +1004 +1004 +1004 +1004 +0FFC +ENDCHAR +STARTCHAR uni5316 +ENCODING 21270 +BBX 15 15 1 -1 +BITMAP +0900 +0900 +0904 +1108 +1130 +31C0 +5100 +9100 +1100 +1100 +1100 +1102 +1102 +1102 +10FE +ENDCHAR +STARTCHAR uni5317 +ENCODING 21271 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +0440 +0440 +7C4C +0470 +0440 +0440 +0440 +0440 +0440 +0C40 +3442 +C442 +043E +ENDCHAR +STARTCHAR uni5318 +ENCODING 21272 +BBX 14 16 1 -2 +BITMAP +8124 +8248 +8490 +9248 +9124 +A080 +C100 +87FC +8404 +8514 +84A4 +9444 +94A4 +9514 +77FC +0404 +ENDCHAR +STARTCHAR uni5319 +ENCODING 21273 +BBX 15 15 1 -1 +BITMAP +0040 +7E40 +4244 +7E48 +4270 +7E40 +0040 +FF40 +1040 +5042 +5E42 +503E +7000 +9C00 +83FE +ENDCHAR +STARTCHAR uni531A +ENCODING 21274 +BBX 13 14 2 -1 +BITMAP +FFF8 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +FFF8 +ENDCHAR +STARTCHAR uni531B +ENCODING 21275 +BBX 14 14 1 -1 +BITMAP +FFF8 +8400 +8400 +8FE0 +8820 +9040 +A040 +8080 +8140 +8220 +8C10 +B008 +8000 +FFFC +ENDCHAR +STARTCHAR uni531C +ENCODING 21276 +BBX 13 14 2 -1 +BITMAP +FFF8 +8200 +9200 +9260 +93A0 +9E20 +F220 +9260 +9200 +9010 +9010 +8FF0 +8000 +FFF8 +ENDCHAR +STARTCHAR uni531D +ENCODING 21277 +BBX 14 14 1 -1 +BITMAP +FFFC +8000 +8100 +8100 +9FF0 +9110 +9110 +9110 +9110 +9170 +8100 +8100 +8000 +FFFC +ENDCHAR +STARTCHAR uni531E +ENCODING 21278 +BBX 14 14 1 -1 +BITMAP +FFF8 +8000 +8000 +9FF0 +8100 +8100 +8100 +8100 +8100 +8100 +BFF8 +8000 +8000 +FFFC +ENDCHAR +STARTCHAR uni531F +ENCODING 21279 +BBX 14 14 1 -1 +BITMAP +FFF8 +8000 +8200 +8100 +BFF8 +8000 +87C0 +8440 +8440 +8448 +8848 +9038 +A000 +FFFC +ENDCHAR +STARTCHAR uni5320 +ENCODING 21280 +BBX 13 14 2 -1 +BITMAP +FFF8 +8000 +80F0 +8F00 +8800 +8800 +8FF8 +8880 +9080 +9080 +A080 +8080 +8000 +FFF8 +ENDCHAR +STARTCHAR uni5321 +ENCODING 21281 +BBX 13 14 2 -1 +BITMAP +FFF0 +8000 +8000 +9FC0 +8200 +8200 +9FC0 +8200 +8200 +8200 +BFE0 +8000 +8000 +FFF8 +ENDCHAR +STARTCHAR uni5322 +ENCODING 21282 +BBX 14 14 1 -1 +BITMAP +FFF8 +8800 +8800 +8FF0 +9250 +A250 +C490 +8890 +9110 +A210 +84A0 +8840 +8000 +FFFC +ENDCHAR +STARTCHAR uni5323 +ENCODING 21283 +BBX 13 14 2 -1 +BITMAP +FFF8 +8000 +9FF0 +9110 +9110 +9FF0 +9110 +9110 +9FF0 +8100 +8100 +8100 +8000 +FFF8 +ENDCHAR +STARTCHAR uni5324 +ENCODING 21284 +BBX 13 14 2 -1 +BITMAP +FFF8 +8000 +9FE0 +8200 +8200 +8200 +9FE0 +8200 +8240 +8220 +8220 +BFF0 +8000 +FFF8 +ENDCHAR +STARTCHAR uni5325 +ENCODING 21285 +BBX 14 14 1 -1 +BITMAP +FFF8 +8400 +8820 +9010 +BFF8 +8008 +8820 +8820 +FFFC +8820 +8820 +9020 +A020 +FFFC +ENDCHAR +STARTCHAR uni5326 +ENCODING 21286 +BBX 14 14 1 -1 +BITMAP +FFF8 +8840 +8840 +BF40 +90F0 +A450 +BF50 +8450 +8750 +BC54 +9454 +848C +8500 +FFFC +ENDCHAR +STARTCHAR uni5327 +ENCODING 21287 +BBX 14 14 1 -1 +BITMAP +FFF8 +8100 +8100 +BFF8 +8100 +8920 +8920 +9550 +A288 +8240 +8440 +8820 +9020 +FFFC +ENDCHAR +STARTCHAR uni5328 +ENCODING 21288 +BBX 14 14 1 -1 +BITMAP +FFF8 +8440 +A440 +A440 +BC40 +87F8 +8440 +FC40 +A440 +A440 +A5F0 +C400 +8400 +FFFC +ENDCHAR +STARTCHAR uni5329 +ENCODING 21289 +BBX 14 14 1 -1 +BITMAP +FFF8 +8100 +9110 +9110 +9FF0 +8100 +BFF8 +8000 +8100 +9FF0 +8100 +BFF8 +8000 +FFFC +ENDCHAR +STARTCHAR uni532A +ENCODING 21290 +BBX 14 14 1 -1 +BITMAP +FFFC +8440 +8440 +BC78 +8440 +BC40 +8478 +8C40 +B440 +8478 +8840 +B040 +8000 +FFFC +ENDCHAR +STARTCHAR uni532B +ENCODING 21291 +BBX 14 14 1 -1 +BITMAP +FFF8 +8800 +9FF8 +A248 +C488 +8950 +9220 +9FF0 +9010 +9FF0 +9010 +9FF0 +8000 +FFFC +ENDCHAR +STARTCHAR uni532C +ENCODING 21292 +BBX 14 16 1 -2 +BITMAP +FFFC +8100 +8280 +8440 +9830 +E7EC +8000 +9F48 +9148 +9F48 +9148 +9F48 +9108 +9528 +9210 +FFFC +ENDCHAR +STARTCHAR uni532D +ENCODING 21293 +BBX 14 14 1 -1 +BITMAP +FFF8 +8840 +BE40 +8840 +BEF0 +AA50 +BE50 +AA50 +BE50 +8854 +BE54 +888C +8900 +FFFC +ENDCHAR +STARTCHAR uni532E +ENCODING 21294 +BBX 14 14 1 -1 +BITMAP +FFF8 +8100 +9FF0 +9110 +9FF0 +8100 +FFFC +8000 +9FF0 +9110 +92D0 +8420 +9810 +FFFC +ENDCHAR +STARTCHAR uni532F +ENCODING 21295 +BBX 14 14 1 -1 +BITMAP +FFFC +8000 +9120 +8920 +83F8 +A640 +93F8 +8240 +8BF8 +8A40 +9240 +A3F8 +8000 +FFFC +ENDCHAR +STARTCHAR uni5330 +ENCODING 21296 +BBX 14 16 1 -2 +BITMAP +FFFC +8000 +BEF8 +A288 +BEF8 +8000 +9FF0 +9110 +9FF0 +9110 +9FF0 +8100 +FFFC +8100 +8100 +FFFC +ENDCHAR +STARTCHAR uni5331 +ENCODING 21297 +BBX 14 14 1 -1 +BITMAP +FFFC +8100 +8FE0 +8920 +8FE0 +8100 +BFF8 +8820 +8FE0 +8820 +8FE0 +8640 +9830 +FFFC +ENDCHAR +STARTCHAR uni5332 +ENCODING 21298 +BBX 14 14 1 -1 +BITMAP +FFF8 +8100 +BFF8 +8440 +9830 +EFEC +8820 +8FE0 +8000 +9EF0 +9290 +9EF0 +8000 +FFFC +ENDCHAR +STARTCHAR uni5333 +ENCODING 21299 +BBX 14 14 1 -1 +BITMAP +FFFC +8100 +8280 +8C60 +B398 +8000 +9EF0 +9290 +9EF0 +8820 +9450 +A288 +8000 +FFFC +ENDCHAR +STARTCHAR uni5334 +ENCODING 21300 +BBX 14 16 1 -2 +BITMAP +FFFC +9080 +9EF8 +A920 +DFF0 +9010 +9FF0 +9010 +9FF0 +9010 +9FF0 +8440 +BFF8 +8840 +9040 +FFFC +ENDCHAR +STARTCHAR uni5335 +ENCODING 21301 +BBX 14 14 2 -1 +BITMAP +FFFC +8200 +FFF8 +8200 +BFF0 +A490 +BFF0 +9020 +9FE0 +9020 +9FE0 +8840 +B030 +FFFC +ENDCHAR +STARTCHAR uni5336 +ENCODING 21302 +BBX 14 15 1 -1 +BITMAP +FFFC +8820 +BFF8 +8920 +9FF8 +B100 +DFF0 +9100 +9FF0 +9100 +9FF8 +8810 +8E70 +8810 +FFFC +ENDCHAR +STARTCHAR uni5337 +ENCODING 21303 +BBX 14 15 1 -1 +BITMAP +FFFC +9290 +9EF0 +9290 +9EF0 +9290 +9EF0 +8900 +8FF0 +9900 +AFE0 +C900 +8FF8 +8800 +FFFC +ENDCHAR +STARTCHAR uni5338 +ENCODING 21304 +BBX 15 13 1 -1 +BITMAP +FFFE +2000 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +1000 +0FFE +ENDCHAR +STARTCHAR uni5339 +ENCODING 21305 +BBX 13 12 2 0 +BITMAP +FFF8 +8480 +8480 +8480 +8880 +8888 +9088 +A078 +8000 +8000 +8000 +FFF8 +ENDCHAR +STARTCHAR uni533A +ENCODING 21306 +BBX 13 14 2 -1 +BITMAP +FFF8 +8000 +8020 +9020 +8840 +8440 +8280 +8100 +8280 +8440 +9820 +E010 +8000 +FFF8 +ENDCHAR +STARTCHAR uni533B +ENCODING 21307 +BBX 13 14 2 -1 +BITMAP +FFF0 +8800 +8800 +8FE0 +9200 +A200 +8200 +BFF0 +8200 +8500 +8880 +B060 +8000 +FFF8 +ENDCHAR +STARTCHAR uni533C +ENCODING 21308 +BBX 14 14 1 -1 +BITMAP +FFF8 +8100 +8280 +8440 +8820 +B7D8 +8000 +8FE0 +8820 +8820 +8FE0 +8820 +8000 +FFFC +ENDCHAR +STARTCHAR uni533D +ENCODING 21309 +BBX 14 16 1 -2 +BITMAP +FFFC +8000 +9FF0 +9010 +9FF0 +9010 +9FF0 +8200 +BFFC +8420 +8E40 +8180 +8660 +9810 +8000 +FFFC +ENDCHAR +STARTCHAR uni533E +ENCODING 21310 +BBX 15 14 1 -1 +BITMAP +FFFC +4000 +5FF8 +4000 +4FF0 +4810 +4FF0 +4800 +5FF8 +5948 +6FF8 +4948 +4818 +3FFE +ENDCHAR +STARTCHAR uni533F +ENCODING 21311 +BBX 13 14 2 -1 +BITMAP +FFF8 +8000 +8840 +BFF0 +8840 +8400 +FFF8 +8800 +9FE0 +A820 +8820 +8FE0 +8000 +FFF8 +ENDCHAR +STARTCHAR uni5340 +ENCODING 21312 +BBX 14 14 1 -1 +BITMAP +FFFC +8000 +8FE0 +8820 +8820 +8FE0 +8000 +BEF8 +A288 +A288 +A288 +BEF8 +8000 +FFFC +ENDCHAR +STARTCHAR uni5341 +ENCODING 21313 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5342 +ENCODING 21314 +BBX 15 14 1 -1 +BITMAP +FFF0 +0010 +0410 +0410 +0410 +0410 +0410 +FFD0 +0410 +0410 +0408 +040A +040A +0404 +ENDCHAR +STARTCHAR uni5343 +ENCODING 21315 +BBX 15 15 1 -1 +BITMAP +00F0 +3F00 +0100 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5344 +ENCODING 21316 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +0840 +0840 +0840 +FFFE +0840 +0840 +0840 +0840 +0840 +0840 +0840 +0840 +0840 +ENDCHAR +STARTCHAR uni5345 +ENCODING 21317 +BBX 15 15 1 -1 +BITMAP +1110 +1110 +1110 +1110 +1110 +1110 +FFFE +1110 +1110 +1110 +1110 +2110 +2110 +4110 +8110 +ENDCHAR +STARTCHAR uni5346 +ENCODING 21318 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +7FE0 +0220 +0220 +0420 +0822 +1022 +611E +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5347 +ENCODING 21319 +BBX 15 15 1 -1 +BITMAP +01A0 +0620 +7C20 +0420 +0420 +0420 +FFFE +0420 +0420 +0420 +0820 +0820 +1020 +2020 +C020 +ENDCHAR +STARTCHAR uni5348 +ENCODING 21320 +BBX 13 15 2 -1 +BITMAP +1000 +1000 +3FE0 +2200 +4200 +8200 +0200 +0200 +FFF8 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni5349 +ENCODING 21321 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +3FF8 +0100 +0100 +0920 +0820 +0820 +FFFE +0820 +1020 +1020 +2020 +C020 +ENDCHAR +STARTCHAR uni534A +ENCODING 21322 +BBX 15 15 1 -1 +BITMAP +2108 +1108 +1110 +0100 +7FFC +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni534B +ENCODING 21323 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +7FFC +0100 +0100 +0920 +0820 +0820 +FFFE +0820 +0820 +0820 +0820 +0FE0 +0820 +ENDCHAR +STARTCHAR uni534C +ENCODING 21324 +BBX 15 16 0 -2 +BITMAP +2010 +2490 +2490 +2490 +2490 +2490 +FFFE +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2010 +ENDCHAR +STARTCHAR uni534D +ENCODING 21325 +BBX 13 14 2 -1 +BITMAP +FE08 +0208 +0208 +0208 +0208 +0208 +FFF8 +8200 +8200 +8200 +8200 +8200 +8200 +83F8 +ENDCHAR +STARTCHAR uni534E +ENCODING 21326 +BBX 15 16 0 -2 +BITMAP +0880 +0888 +1090 +30E0 +5180 +9684 +1084 +107C +1100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni534F +ENCODING 21327 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +2080 +2080 +FBF0 +2090 +2090 +2298 +2294 +2492 +2892 +2090 +2110 +2110 +2250 +2420 +ENDCHAR +STARTCHAR uni5350 +ENCODING 21328 +BBX 14 15 0 -1 +BITMAP +2000 +21FC +2100 +2100 +2100 +2100 +2100 +3FFC +0104 +0104 +0104 +0104 +0104 +FF04 +0004 +ENDCHAR +STARTCHAR uni5351 +ENCODING 21329 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0840 +1040 +FFFE +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5352 +ENCODING 21330 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0000 +0820 +0820 +1450 +2288 +4004 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5353 +ENCODING 21331 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +01F8 +0100 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5354 +ENCODING 21332 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +27F8 +2088 +F888 +2108 +2230 +2410 +3FFE +2492 +2492 +2492 +2892 +28A2 +334C +ENDCHAR +STARTCHAR uni5355 +ENCODING 21333 +BBX 15 16 0 -2 +BITMAP +1010 +0820 +0440 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0100 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5356 +ENCODING 21334 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +3FF8 +0100 +0100 +7FFC +0404 +0288 +1280 +0880 +0900 +FFFE +0240 +0420 +1810 +6008 +ENDCHAR +STARTCHAR uni5357 +ENCODING 21335 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +0100 +7FFC +4444 +4284 +4FE4 +4104 +4104 +5FF4 +4104 +4104 +411C +ENDCHAR +STARTCHAR uni5358 +ENCODING 21336 +BBX 15 15 1 -1 +BITMAP +2208 +1108 +1110 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5359 +ENCODING 21337 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +FF90 +2210 +3E10 +2210 +3E7E +2210 +2210 +FFD0 +4010 +5210 +6110 +4010 +7F90 +0010 +ENDCHAR +STARTCHAR uni535A +ENCODING 21338 +BBX 15 15 1 -1 +BITMAP +2048 +2044 +2FFE +2040 +27FC +F444 +27FC +2444 +27FC +2008 +2FFE +2208 +2108 +2108 +2038 +ENDCHAR +STARTCHAR uni535B +ENCODING 21339 +BBX 15 16 0 -2 +BITMAP +2104 +47C8 +8812 +F3BC +2008 +4B92 +F83E +0380 +AAAA +ABAA +0100 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni535C +ENCODING 21340 +BBX 7 15 6 -1 +BITMAP +80 +80 +80 +80 +80 +E0 +98 +86 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni535D +ENCODING 21341 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +0840 +0840 +0840 +F87E +0840 +0840 +0840 +0840 +0840 +0840 +0840 +0840 +0840 +ENDCHAR +STARTCHAR uni535E +ENCODING 21342 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +01C0 +0130 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni535F +ENCODING 21343 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F880 +8880 +8880 +88C0 +88A0 +8890 +8888 +8888 +F880 +8880 +0080 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni5360 +ENCODING 21344 +BBX 10 15 3 -1 +BITMAP +0800 +0800 +0800 +0FC0 +0800 +0800 +0800 +0800 +FFC0 +8040 +8040 +8040 +8040 +8040 +FFC0 +ENDCHAR +STARTCHAR uni5361 +ENCODING 21345 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +0200 +03F8 +0200 +0200 +FFFE +0200 +0200 +0380 +0260 +0218 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni5362 +ENCODING 21346 +BBX 14 16 0 -2 +BITMAP +0100 +0100 +01FC +0100 +0100 +1FF8 +1008 +1008 +1008 +1FF8 +1008 +1000 +2000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni5363 +ENCODING 21347 +BBX 13 15 2 -1 +BITMAP +0400 +0400 +07F8 +0400 +0400 +FFF0 +8010 +8010 +FE10 +8210 +8210 +FE10 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni5364 +ENCODING 21348 +BBX 13 16 2 -2 +BITMAP +0400 +0400 +07F8 +0400 +0400 +FFE0 +8020 +9120 +8A20 +8420 +8A20 +9120 +A0A0 +8020 +FFE0 +8020 +ENDCHAR +STARTCHAR uni5365 +ENCODING 21349 +BBX 13 16 2 -2 +BITMAP +0400 +0400 +07F8 +0400 +0400 +FFE0 +8020 +A4A0 +94A0 +8920 +9520 +A220 +8520 +88A0 +FFE0 +8020 +ENDCHAR +STARTCHAR uni5366 +ENCODING 21350 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +7F10 +0810 +0810 +0818 +FF94 +0812 +0810 +7F10 +0810 +0810 +0990 +0E10 +F010 +ENDCHAR +STARTCHAR uni5367 +ENCODING 21351 +BBX 15 15 1 -1 +BITMAP +0040 +FE40 +8840 +8840 +8840 +FE40 +8260 +8258 +8246 +FE40 +8840 +8840 +8840 +FE40 +0040 +ENDCHAR +STARTCHAR uni5368 +ENCODING 21352 +BBX 13 16 1 -2 +BITMAP +0200 +0200 +03F8 +0200 +3FE0 +2020 +3F20 +2120 +FFF8 +8008 +9FC8 +9048 +9048 +9FC8 +8028 +8010 +ENDCHAR +STARTCHAR uni5369 +ENCODING 21353 +BBX 8 14 4 -1 +BITMAP +FF +81 +81 +81 +81 +81 +81 +81 +81 +81 +8F +80 +80 +80 +ENDCHAR +STARTCHAR uni536A +ENCODING 21354 +BBX 7 15 6 -2 +BITMAP +FE +82 +82 +82 +A2 +92 +92 +82 +82 +8A +84 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni536B +ENCODING 21355 +BBX 15 14 0 -1 +BITMAP +7FF8 +0208 +0208 +0208 +0208 +0208 +0208 +0228 +0210 +0200 +0200 +0200 +0200 +FFFE +ENDCHAR +STARTCHAR uni536C +ENCODING 21356 +BBX 14 15 1 -1 +BITMAP +0100 +0600 +38FC +2084 +2084 +2084 +2084 +2084 +2084 +2084 +2E84 +F084 +009C +0080 +0080 +ENDCHAR +STARTCHAR uni536D +ENCODING 21357 +BBX 14 14 0 -2 +BITMAP +FEFC +1084 +1084 +1084 +1084 +1084 +1084 +1084 +1E84 +F0A8 +4090 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni536E +ENCODING 21358 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +2000 +2000 +3FFE +2000 +2FF0 +2810 +2810 +2810 +4870 +4800 +4802 +8802 +07FE +ENDCHAR +STARTCHAR uni536F +ENCODING 21359 +BBX 14 15 1 -1 +BITMAP +0200 +0C00 +70FC +4284 +4284 +4284 +4284 +4284 +4684 +5A84 +E484 +049C +0880 +1080 +6080 +ENDCHAR +STARTCHAR uni5370 +ENCODING 21360 +BBX 13 15 2 -1 +BITMAP +0400 +1800 +E1F8 +8108 +8108 +8108 +F908 +8108 +8108 +8108 +8108 +F978 +8100 +0100 +0100 +ENDCHAR +STARTCHAR uni5371 +ENCODING 21361 +BBX 14 15 1 -1 +BITMAP +0400 +0FE0 +3040 +C080 +3FFC +2000 +2000 +27F0 +2410 +2410 +2410 +4470 +4404 +8404 +03FC +ENDCHAR +STARTCHAR uni5372 +ENCODING 21362 +BBX 14 14 0 -2 +BITMAP +7F7C +1144 +1144 +2144 +2544 +4244 +8044 +3F44 +2144 +2154 +2148 +2140 +3F40 +2140 +ENDCHAR +STARTCHAR uni5373 +ENCODING 21363 +BBX 14 14 1 -1 +BITMAP +7E7C +4244 +4244 +7E44 +4244 +4244 +7E44 +4044 +4444 +4244 +4D5C +7140 +C040 +0040 +ENDCHAR +STARTCHAR uni5374 +ENCODING 21364 +BBX 15 15 1 -1 +BITMAP +0800 +083E +7F22 +0822 +0822 +0822 +FFA2 +1022 +1422 +1222 +2122 +2FAE +F0A0 +0020 +0020 +ENDCHAR +STARTCHAR uni5375 +ENCODING 21365 +BBX 15 15 1 -1 +BITMAP +0E00 +707E +4242 +4242 +5242 +4A52 +4A4A +424A +4242 +4242 +5E42 +E44E +0840 +1040 +6040 +ENDCHAR +STARTCHAR uni5376 +ENCODING 21366 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +3E7C +4244 +A444 +1844 +1044 +2444 +C844 +1F44 +2144 +D254 +0C48 +0840 +3040 +C040 +ENDCHAR +STARTCHAR uni5377 +ENCODING 21367 +BBX 15 15 1 -1 +BITMAP +0920 +0920 +1110 +3FF8 +0280 +0440 +7FFC +0820 +1010 +2FE8 +C826 +08E0 +0804 +0804 +07FC +ENDCHAR +STARTCHAR uni5378 +ENCODING 21368 +BBX 14 15 1 -1 +BITMAP +2000 +207C +7F44 +8844 +0844 +FF44 +0844 +4844 +4F44 +4844 +4844 +4F5C +7840 +C040 +0040 +ENDCHAR +STARTCHAR uni5379 +ENCODING 21369 +BBX 14 16 0 -2 +BITMAP +0800 +0800 +107C +7F44 +5544 +5544 +5544 +5544 +5544 +5544 +5544 +5554 +57C8 +FC40 +0040 +0040 +ENDCHAR +STARTCHAR uni537A +ENCODING 21370 +BBX 15 15 1 -1 +BITMAP +1FE0 +0040 +3D88 +0550 +0920 +3118 +C106 +0300 +3FFC +0000 +3FF8 +2008 +2038 +2002 +1FFE +ENDCHAR +STARTCHAR uni537B +ENCODING 21371 +BBX 15 15 1 -1 +BITMAP +2200 +223E +4122 +88A2 +0822 +1422 +2222 +4122 +80A2 +7F22 +4122 +412E +4120 +7F20 +0020 +ENDCHAR +STARTCHAR uni537C +ENCODING 21372 +BBX 15 16 0 -2 +BITMAP +0080 +FC80 +29F8 +2A08 +2DFE +2900 +2978 +2948 +2968 +2950 +2944 +2A44 +2C3C +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni537D +ENCODING 21373 +BBX 13 15 2 -1 +BITMAP +1000 +20F8 +FC88 +8488 +FC88 +8488 +8488 +FC88 +0088 +8488 +9888 +E0B8 +8280 +8280 +7E80 +ENDCHAR +STARTCHAR uni537E +ENCODING 21374 +BBX 14 15 0 -2 +BITMAP +7700 +557C +5544 +7744 +0044 +7F44 +0044 +FFC4 +2044 +3F44 +0154 +0148 +0140 +0A40 +0440 +ENDCHAR +STARTCHAR uni537F +ENCODING 21375 +BBX 15 15 1 -1 +BITMAP +1000 +27DE +C452 +97D2 +9452 +9452 +97D2 +9412 +9412 +B7D2 +D412 +1412 +27D6 +4410 +8410 +ENDCHAR +STARTCHAR uni5380 +ENCODING 21376 +BBX 14 16 0 -2 +BITMAP +0800 +0800 +7F7C +1C44 +2A44 +4944 +1444 +2244 +4944 +8844 +2A44 +1C54 +2A48 +C940 +2840 +1040 +ENDCHAR +STARTCHAR uni5381 +ENCODING 21377 +BBX 15 16 0 -2 +BITMAP +0808 +1448 +2228 +5C88 +8848 +7F0E +08F8 +2A08 +4908 +1808 +7FFC +0104 +0114 +0108 +0100 +0100 +ENDCHAR +STARTCHAR uni5382 +ENCODING 21378 +BBX 15 14 1 -1 +BITMAP +7FFE +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +8000 +8000 +ENDCHAR +STARTCHAR uni5383 +ENCODING 21379 +BBX 14 16 0 -2 +BITMAP +0400 +0400 +0FF0 +1010 +2020 +5FFC +1000 +1000 +1000 +1000 +1000 +1000 +2000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni5384 +ENCODING 21380 +BBX 15 14 1 -1 +BITMAP +7FFE +4000 +4000 +4FF0 +4810 +4810 +4810 +4810 +4810 +4870 +4800 +8804 +8804 +87FC +ENDCHAR +STARTCHAR uni5385 +ENCODING 21381 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2000 +2000 +2FFE +2040 +2040 +2040 +2040 +2040 +2040 +2040 +4040 +4140 +8080 +ENDCHAR +STARTCHAR uni5386 +ENCODING 21382 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2080 +2080 +2080 +2FFC +2084 +2084 +2104 +2104 +2204 +2204 +4404 +4828 +9010 +ENDCHAR +STARTCHAR uni5387 +ENCODING 21383 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2010 +20F8 +2780 +2080 +2080 +20FE +3F80 +2080 +2082 +2082 +4082 +407E +8000 +ENDCHAR +STARTCHAR uni5388 +ENCODING 21384 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2000 +2FFC +2080 +2080 +2080 +2080 +3FFE +2080 +2080 +2080 +4080 +4080 +8080 +ENDCHAR +STARTCHAR uni5389 +ENCODING 21385 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2000 +2FFE +2100 +2100 +21F8 +2108 +2108 +2108 +2208 +2208 +4408 +4850 +9020 +ENDCHAR +STARTCHAR uni538A +ENCODING 21386 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2000 +27FE +2010 +2210 +2210 +2410 +27FE +2050 +2090 +2110 +4210 +4C50 +8020 +ENDCHAR +STARTCHAR uni538B +ENCODING 21387 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2080 +2080 +2080 +2080 +2FFC +2080 +2080 +2090 +2088 +2088 +4080 +5FFE +8000 +ENDCHAR +STARTCHAR uni538C +ENCODING 21388 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2080 +2090 +2088 +2080 +2FFC +2080 +2140 +2140 +2220 +2220 +4410 +4808 +9006 +ENDCHAR +STARTCHAR uni538D +ENCODING 21389 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2080 +2080 +2FFC +2100 +2240 +2440 +27FC +2040 +2040 +4FFE +4040 +8040 +0040 +ENDCHAR +STARTCHAR uni538E +ENCODING 21390 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2000 +203C +27C0 +2440 +2440 +2440 +27FE +2420 +2420 +2412 +450A +4646 +8422 +ENDCHAR +STARTCHAR uni538F +ENCODING 21391 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2200 +2200 +23FE +2480 +2480 +28FC +3080 +2080 +20FC +2080 +4080 +4080 +8080 +ENDCHAR +STARTCHAR uni5390 +ENCODING 21392 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2220 +2210 +2200 +2FFC +2240 +2240 +2248 +2450 +2460 +4842 +48C2 +933E +2000 +ENDCHAR +STARTCHAR uni5391 +ENCODING 21393 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2020 +2FA0 +28A2 +28A4 +28A8 +28B0 +28A0 +28A0 +28A2 +2FA2 +48A2 +401E +8000 +ENDCHAR +STARTCHAR uni5392 +ENCODING 21394 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2100 +2100 +23FC +2240 +2440 +2040 +3FFE +2040 +2444 +2444 +4444 +47FC +8004 +ENDCHAR +STARTCHAR uni5393 +ENCODING 21395 +BBX 15 14 1 -1 +BITMAP +3FFC +2080 +2080 +27F0 +2080 +2080 +2FF8 +2000 +2080 +4FF8 +4080 +8080 +0080 +3FFE +ENDCHAR +STARTCHAR uni5394 +ENCODING 21396 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2000 +27FC +2080 +2110 +2208 +27FC +2044 +2040 +27FC +2040 +4040 +4FFE +8000 +ENDCHAR +STARTCHAR uni5395 +ENCODING 21397 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2F84 +28A4 +28A4 +2AA4 +2AA4 +2AA4 +2AA4 +2AA4 +2224 +2504 +4484 +4894 +9008 +ENDCHAR +STARTCHAR uni5396 +ENCODING 21398 +BBX 15 14 1 -1 +BITMAP +7FFC +4000 +4504 +4488 +4430 +5F04 +4408 +4430 +4602 +4A04 +8A18 +9260 +1102 +20FE +ENDCHAR +STARTCHAR uni5397 +ENCODING 21399 +BBX 15 15 0 -2 +BITMAP +3FFE +2080 +2040 +27FC +2000 +2110 +20A0 +2FFE +2040 +2040 +27FC +2040 +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni5398 +ENCODING 21400 +BBX 15 14 1 -1 +BITMAP +7FFE +4000 +4FF8 +4888 +4FF8 +4888 +4888 +4FF8 +4080 +4080 +8FF8 +8080 +8080 +3FFE +ENDCHAR +STARTCHAR uni5399 +ENCODING 21401 +BBX 15 15 0 -2 +BITMAP +3FFE +2040 +2040 +2FFC +2040 +27FC +2444 +27FC +2444 +27FC +2040 +2FFE +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni539A +ENCODING 21402 +BBX 15 15 1 -1 +BITMAP +7FFE +4000 +4FF8 +4808 +4FF8 +4808 +4FF8 +4000 +4FF8 +4020 +4040 +9FFE +8040 +8040 +01C0 +ENDCHAR +STARTCHAR uni539B +ENCODING 21403 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +200C +2F70 +2940 +2940 +2940 +297E +2948 +2948 +2948 +2F48 +4088 +4088 +8108 +ENDCHAR +STARTCHAR uni539C +ENCODING 21404 +BBX 15 15 0 -2 +BITMAP +3FFE +2000 +2038 +27C0 +2040 +27FC +2248 +2248 +2FFE +2248 +2248 +2FFE +4040 +4040 +87FC +ENDCHAR +STARTCHAR uni539D +ENCODING 21405 +BBX 14 14 1 -1 +BITMAP +3FFC +2000 +2220 +2FF8 +2220 +2220 +3FFC +2000 +2FF8 +4808 +4FF8 +8808 +0808 +0FF8 +ENDCHAR +STARTCHAR uni539E +ENCODING 21406 +BBX 15 15 0 -2 +BITMAP +3FFE +2120 +2120 +2120 +3F3E +2120 +2120 +2F3C +2120 +2120 +3F3E +2120 +4120 +4120 +8120 +ENDCHAR +STARTCHAR uni539F +ENCODING 21407 +BBX 14 14 1 -1 +BITMAP +7FFC +4100 +4200 +4FF0 +4810 +4FF0 +4810 +4810 +4FF0 +4080 +8890 +9088 +2084 +0380 +ENDCHAR +STARTCHAR uni53A0 +ENCODING 21408 +BBX 14 14 1 -1 +BITMAP +7FFC +4000 +5F04 +5124 +5F24 +5124 +5124 +5F24 +5124 +5124 +9F24 +8404 +1904 +609C +ENDCHAR +STARTCHAR uni53A1 +ENCODING 21409 +BBX 15 15 0 -2 +BITMAP +3FFE +2080 +2100 +27FC +2404 +27FC +2404 +27FC +2040 +2744 +2168 +2250 +4448 +5946 +8080 +ENDCHAR +STARTCHAR uni53A2 +ENCODING 21410 +BBX 15 15 0 -2 +BITMAP +3FFE +2200 +2200 +227C +2F44 +2244 +267C +2744 +2AC4 +2A7C +3244 +2244 +4244 +427C +8244 +ENDCHAR +STARTCHAR uni53A3 +ENCODING 21411 +BBX 15 15 0 -2 +BITMAP +3FFE +20A0 +2090 +3FFE +2140 +2630 +380E +2FF8 +2888 +2FF8 +2888 +4FF8 +4888 +8080 +0080 +ENDCHAR +STARTCHAR uni53A4 +ENCODING 21412 +BBX 15 14 1 -1 +BITMAP +7FFE +4000 +430C +5C70 +4410 +5F7C +4410 +4C10 +4E38 +5538 +9554 +A454 +0492 +0410 +ENDCHAR +STARTCHAR uni53A5 +ENCODING 21413 +BBX 15 14 1 -1 +BITMAP +7FFE +5110 +4910 +4A10 +7FBE +4422 +5554 +5510 +5510 +5F10 +8428 +8428 +8844 +3082 +ENDCHAR +STARTCHAR uni53A6 +ENCODING 21414 +BBX 15 14 1 -1 +BITMAP +7FFC +4000 +5FFC +4080 +4FF8 +4808 +4FF8 +4808 +4FF8 +4200 +8FF8 +B230 +01C0 +3E3E +ENDCHAR +STARTCHAR uni53A7 +ENCODING 21415 +BBX 15 15 0 -2 +BITMAP +3FFE +2080 +2FFC +2080 +27F8 +2408 +27F8 +2408 +27F8 +2408 +27F8 +2408 +7FFE +4210 +8408 +ENDCHAR +STARTCHAR uni53A8 +ENCODING 21416 +BBX 15 14 1 -1 +BITMAP +7FFE +4008 +7F08 +4008 +5F7E +5108 +5108 +5F48 +4028 +5128 +8908 +8A08 +8F08 +3038 +ENDCHAR +STARTCHAR uni53A9 +ENCODING 21417 +BBX 15 14 1 -1 +BITMAP +7FFE +4400 +487C +5E28 +5228 +5E28 +5228 +52FE +5E10 +5018 +9E28 +902A +1E4A +1186 +ENDCHAR +STARTCHAR uni53AA +ENCODING 21418 +BBX 15 15 0 -2 +BITMAP +3FFE +2110 +2FFE +2110 +21F0 +2040 +27FC +2444 +27FC +2040 +2FFE +2040 +47FC +4040 +8FFE +ENDCHAR +STARTCHAR uni53AB +ENCODING 21419 +BBX 15 15 0 -2 +BITMAP +3FFE +2210 +2210 +2F90 +221E +2FA4 +2224 +3FD4 +2414 +2794 +2488 +2488 +4894 +4AA4 +9142 +ENDCHAR +STARTCHAR uni53AC +ENCODING 21420 +BBX 15 16 0 -2 +BITMAP +3FFE +2000 +27F8 +2408 +27F8 +2408 +27F8 +2220 +27B0 +2D28 +27FE +3800 +47F8 +4408 +87F8 +0408 +ENDCHAR +STARTCHAR uni53AD +ENCODING 21421 +BBX 15 14 1 -1 +BITMAP +7FFE +4000 +5F14 +5112 +5F10 +51FE +5F10 +4010 +5F10 +5128 +5F28 +9144 +9F44 +1182 +ENDCHAR +STARTCHAR uni53AE +ENCODING 21422 +BBX 15 14 1 -1 +BITMAP +7FFE +4900 +490C +5FB0 +4920 +4F3E +4924 +4F24 +4924 +4924 +9FA4 +8424 +18A4 +6044 +ENDCHAR +STARTCHAR uni53AF +ENCODING 21423 +BBX 15 15 0 -2 +BITMAP +3FFE +2210 +2210 +3FFE +2718 +2AB4 +3252 +2210 +2210 +2080 +2444 +2452 +4412 +43F0 +8000 +ENDCHAR +STARTCHAR uni53B0 +ENCODING 21424 +BBX 15 14 1 -1 +BITMAP +7FFC +4000 +5510 +5510 +6490 +443E +5F24 +5164 +5714 +5514 +9508 +9708 +1114 +1362 +ENDCHAR +STARTCHAR uni53B1 +ENCODING 21425 +BBX 15 15 0 -2 +BITMAP +3FFE +2040 +20A0 +2110 +2208 +2DF6 +2000 +27BC +24A4 +24A4 +27BC +2110 +42A8 +4444 +8882 +ENDCHAR +STARTCHAR uni53B2 +ENCODING 21426 +BBX 14 14 1 -1 +BITMAP +3FFC +2220 +3FFC +2220 +2FF8 +2888 +2FF8 +2888 +2FF8 +2080 +5FFC +50A4 +97F4 +100C +ENDCHAR +STARTCHAR uni53B3 +ENCODING 21427 +BBX 15 15 1 -1 +BITMAP +2204 +1108 +7FFE +4000 +5F10 +4410 +7FBE +4924 +4F64 +4914 +4F18 +4908 +8F14 +B124 +0142 +ENDCHAR +STARTCHAR uni53B4 +ENCODING 21428 +BBX 15 15 1 -1 +BITMAP +7FFE +5114 +5F12 +407E +5F18 +5128 +5F24 +5142 +4FF8 +4888 +4FF8 +8888 +8FF8 +0080 +0080 +ENDCHAR +STARTCHAR uni53B5 +ENCODING 21429 +BBX 15 16 0 -2 +BITMAP +3FFE +2080 +2FF8 +2808 +2FF8 +4490 +4A88 +8100 +7EFE +4890 +5EBC +52A4 +5EBC +4890 +6AD4 +9930 +ENDCHAR +STARTCHAR uni53B6 +ENCODING 21430 +BBX 15 14 1 -1 +BITMAP +0200 +0200 +0200 +0200 +0200 +0200 +0400 +0420 +0410 +0408 +0808 +083C +11C4 +FE02 +ENDCHAR +STARTCHAR uni53B7 +ENCODING 21431 +BBX 13 15 2 -1 +BITMAP +0400 +0400 +0400 +FFF0 +0800 +0800 +1200 +1200 +2200 +4240 +8420 +0410 +0430 +0BC8 +7C08 +ENDCHAR +STARTCHAR uni53B8 +ENCODING 21432 +BBX 15 15 0 -1 +BITMAP +0808 +0808 +0808 +0808 +0808 +1010 +1010 +1010 +2020 +2424 +2424 +4242 +FEFE +4242 +0202 +ENDCHAR +STARTCHAR uni53B9 +ENCODING 21433 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +3FE0 +0220 +0220 +0420 +0422 +0822 +311E +C100 +0200 +0420 +0810 +1008 +3FFC +1004 +ENDCHAR +STARTCHAR uni53BA +ENCODING 21434 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +FFFE +0280 +0440 +0920 +3118 +C206 +0200 +0420 +0810 +1008 +3FFC +1004 +0004 +ENDCHAR +STARTCHAR uni53BB +ENCODING 21435 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0200 +3FF0 +0200 +0200 +0200 +FFFC +0400 +0440 +0420 +0810 +0878 +1784 +F804 +ENDCHAR +STARTCHAR uni53BC +ENCODING 21436 +BBX 13 16 1 -2 +BITMAP +0400 +0400 +0800 +1040 +2020 +7FF0 +2210 +0200 +1240 +1220 +2210 +4208 +8208 +0200 +0A00 +0400 +ENDCHAR +STARTCHAR uni53BD +ENCODING 21437 +BBX 15 15 0 -1 +BITMAP +0200 +0200 +0400 +0820 +1010 +3FF8 +0008 +1010 +1010 +1010 +2020 +2424 +4242 +FEFE +4242 +ENDCHAR +STARTCHAR uni53BE +ENCODING 21438 +BBX 14 15 1 -2 +BITMAP +FFE0 +0820 +0820 +0820 +7F20 +0820 +0820 +FFA0 +0820 +1020 +2224 +4114 +FF94 +008C +0004 +ENDCHAR +STARTCHAR uni53BF +ENCODING 21439 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +FFFE +0400 +0820 +1010 +3FF8 +1008 +ENDCHAR +STARTCHAR uni53C0 +ENCODING 21440 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +2108 +3FF8 +2108 +2108 +3FF8 +0200 +0220 +0410 +09E8 +7E04 +ENDCHAR +STARTCHAR uni53C1 +ENCODING 21441 +BBX 15 15 0 -1 +BITMAP +0200 +0440 +0820 +1FF0 +0200 +7FFC +0820 +1010 +27C8 +C006 +0000 +0FE0 +0000 +0000 +3FF8 +ENDCHAR +STARTCHAR uni53C2 +ENCODING 21442 +BBX 14 15 1 -1 +BITMAP +0400 +0440 +09E0 +3E10 +0200 +FFFC +0840 +3130 +C60C +1880 +0320 +0C40 +0080 +0300 +3C00 +ENDCHAR +STARTCHAR uni53C3 +ENCODING 21443 +BBX 15 15 1 -1 +BITMAP +0200 +0420 +08F0 +3F08 +2010 +4924 +FEFA +08A0 +3318 +CC46 +0190 +0620 +0040 +0180 +1E00 +ENDCHAR +STARTCHAR uni53C4 +ENCODING 21444 +BBX 15 15 0 -1 +BITMAP +0400 +0820 +1FF0 +1020 +2448 +7EFC +0100 +06C0 +1830 +E00E +0FE0 +0000 +1FF0 +0000 +7FFC +ENDCHAR +STARTCHAR uni53C5 +ENCODING 21445 +BBX 15 16 0 -2 +BITMAP +0400 +0820 +1FF0 +1020 +2448 +7EFC +0100 +06C0 +1830 +E20E +0220 +1290 +1248 +2248 +0A00 +0400 +ENDCHAR +STARTCHAR uni53C6 +ENCODING 21446 +BBX 15 16 0 -2 +BITMAP +000E +03F0 +7844 +0224 +0108 +03FE +FE42 +1040 +13FE +2080 +28FC +4544 +FD28 +4210 +0468 +0186 +ENDCHAR +STARTCHAR uni53C7 +ENCODING 21447 +BBX 15 16 0 -2 +BITMAP +0010 +0210 +797C +0014 +00FE +0014 +FB7C +2192 +2154 +4138 +5154 +4992 +F930 +4900 +02FE +0400 +ENDCHAR +STARTCHAR uni53C8 +ENCODING 21448 +BBX 13 14 2 -1 +BITMAP +7FE0 +0020 +0020 +1020 +1020 +1040 +0840 +0880 +0500 +0200 +0500 +0880 +3060 +C018 +ENDCHAR +STARTCHAR uni53C9 +ENCODING 21449 +BBX 13 14 2 -1 +BITMAP +7FE0 +0020 +0220 +1120 +1120 +1040 +0840 +0880 +0500 +0200 +0500 +0880 +3060 +C018 +ENDCHAR +STARTCHAR uni53CA +ENCODING 21450 +BBX 15 14 1 -1 +BITMAP +7FF0 +0410 +0410 +0420 +0420 +0A78 +0A08 +0908 +0910 +10A0 +1040 +20A0 +4318 +8C06 +ENDCHAR +STARTCHAR uni53CB +ENCODING 21451 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +FFFE +0200 +0200 +07F0 +0410 +0A10 +0A20 +1120 +20C0 +4040 +80A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni53CC +ENCODING 21452 +BBX 15 14 1 -1 +BITMAP +7DF8 +0408 +0488 +0488 +4488 +2888 +1850 +0C50 +1220 +1020 +2050 +2088 +4104 +8602 +ENDCHAR +STARTCHAR uni53CD +ENCODING 21453 +BBX 14 14 1 -1 +BITMAP +3FF8 +2000 +2000 +2000 +3FF0 +2410 +2410 +2220 +2220 +4140 +4080 +8140 +0630 +380C +ENDCHAR +STARTCHAR uni53CE +ENCODING 21454 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +4BFC +4804 +4884 +4884 +4888 +4848 +4850 +4820 +7820 +C850 +0888 +0904 +0A02 +ENDCHAR +STARTCHAR uni53CF +ENCODING 21455 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +3FF0 +0210 +0210 +0210 +FFFE +0200 +0200 +3FF0 +1010 +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni53D0 +ENCODING 21456 +BBX 15 16 0 -2 +BITMAP +00FC +3F00 +0100 +0100 +7FFE +0200 +0400 +07F8 +0A08 +0A08 +1110 +20A0 +4040 +80A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni53D1 +ENCODING 21457 +BBX 14 16 1 -2 +BITMAP +0200 +2220 +2210 +4400 +7FF8 +0400 +0800 +0FF0 +1410 +1210 +2220 +2140 +4080 +8140 +0630 +380C +ENDCHAR +STARTCHAR uni53D2 +ENCODING 21458 +BBX 15 15 0 -2 +BITMAP +3FF0 +0020 +1E40 +0180 +0660 +1818 +E004 +0000 +3EF8 +0288 +2288 +1450 +0820 +34D8 +C306 +ENDCHAR +STARTCHAR uni53D3 +ENCODING 21459 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +2108 +2108 +3FF8 +0100 +3FF0 +1010 +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni53D4 +ENCODING 21460 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +0EFC +0844 +0844 +0844 +FFC4 +0828 +2A28 +2A10 +4910 +4928 +8848 +0884 +3902 +ENDCHAR +STARTCHAR uni53D5 +ENCODING 21461 +BBX 14 14 1 -1 +BITMAP +FDF8 +4488 +4488 +2850 +1020 +2850 +468C +FDF8 +4488 +4488 +2850 +1020 +2850 +C58C +ENDCHAR +STARTCHAR uni53D6 +ENCODING 21462 +BBX 14 14 1 -1 +BITMAP +FF00 +2400 +25F8 +3C08 +2488 +2488 +3C88 +2450 +2450 +2420 +3C50 +E488 +0504 +0400 +ENDCHAR +STARTCHAR uni53D7 +ENCODING 21463 +BBX 15 15 1 -1 +BITMAP +0078 +7F90 +1210 +0920 +7FFC +4004 +4004 +1FF0 +0810 +0420 +0240 +0180 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni53D8 +ENCODING 21464 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0440 +1450 +2448 +4444 +0000 +3FF0 +0820 +0440 +0280 +0100 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni53D9 +ENCODING 21465 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +29FC +2404 +7E84 +9084 +1088 +FE88 +1050 +5450 +5420 +9220 +9250 +1088 +3306 +ENDCHAR +STARTCHAR uni53DA +ENCODING 21466 +BBX 14 14 2 -1 +BITMAP +FDF8 +8408 +8408 +8408 +FDF8 +8000 +83F8 +FD08 +8108 +8090 +FCA0 +8060 +8190 +860C +ENDCHAR +STARTCHAR uni53DB +ENCODING 21467 +BBX 15 15 1 -1 +BITMAP +1000 +59FE +5500 +9500 +1100 +FDFC +1144 +1144 +1D44 +F128 +1128 +2210 +2228 +4444 +8082 +ENDCHAR +STARTCHAR uni53DC +ENCODING 21468 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4112 +9124 +22C0 +0430 +180C +E002 +3FF0 +1010 +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni53DD +ENCODING 21469 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +1084 +7C94 +1088 +1080 +10FC +FEA4 +10A4 +10A8 +24A8 +4290 +FEA8 +42C4 +0082 +ENDCHAR +STARTCHAR uni53DE +ENCODING 21470 +BBX 15 15 0 -2 +BITMAP +7F00 +417C +4124 +7F24 +4024 +5F24 +4028 +4028 +7FA8 +4410 +5510 +94A8 +A4A8 +1444 +0882 +ENDCHAR +STARTCHAR uni53DF +ENCODING 21471 +BBX 15 15 1 -1 +BITMAP +0D00 +3178 +2108 +2108 +3D78 +2108 +2108 +3D78 +0100 +7FFC +1010 +0C60 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni53E0 +ENCODING 21472 +BBX 15 16 0 -2 +BITMAP +1FE0 +0440 +0380 +0C40 +7EFC +2244 +1C38 +6244 +0000 +FFFE +9012 +1FF0 +1010 +1FF0 +1010 +FFFE +ENDCHAR +STARTCHAR uni53E1 +ENCODING 21473 +BBX 15 15 1 -1 +BITMAP +1000 +1E00 +10FC +FF04 +9944 +4244 +9924 +2428 +7E28 +C310 +7E10 +4228 +7E28 +4244 +7E82 +ENDCHAR +STARTCHAR uni53E2 +ENCODING 21474 +BBX 15 15 1 -1 +BITMAP +1290 +FFFE +0820 +7FFC +0100 +3FF8 +0100 +FFFE +2200 +3EFC +2244 +3E28 +2210 +3E28 +E2C6 +ENDCHAR +STARTCHAR uni53E3 +ENCODING 21475 +BBX 11 11 3 0 +BITMAP +FFE0 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +8020 +FFE0 +8020 +ENDCHAR +STARTCHAR uni53E4 +ENCODING 21476 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0200 +FFFC +0200 +0200 +0200 +0200 +3FF0 +2010 +2010 +2010 +2010 +2010 +3FF0 +ENDCHAR +STARTCHAR uni53E5 +ENCODING 21477 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +3FFC +2004 +4004 +8FC4 +0844 +0844 +0844 +0844 +0FC4 +0004 +0008 +0008 +0070 +ENDCHAR +STARTCHAR uni53E6 +ENCODING 21478 +BBX 12 15 1 -2 +BITMAP +3FE0 +2020 +2020 +2020 +3FE0 +0400 +0400 +FFF0 +0410 +0810 +0810 +1010 +2010 +40A0 +8040 +ENDCHAR +STARTCHAR uni53E7 +ENCODING 21479 +BBX 13 15 0 -2 +BITMAP +1FF0 +1010 +1010 +1010 +1FF0 +0000 +0000 +7FF8 +0408 +0408 +0808 +0808 +1008 +2050 +C020 +ENDCHAR +STARTCHAR uni53E8 +ENCODING 21480 +BBX 14 14 1 -1 +BITMAP +0FFC +F084 +9084 +9084 +9084 +9084 +9104 +9104 +9104 +F204 +0204 +0408 +0808 +3070 +ENDCHAR +STARTCHAR uni53E9 +ENCODING 21481 +BBX 14 14 1 -1 +BITMAP +01FC +F904 +8904 +8904 +8904 +8904 +8904 +8904 +8904 +8904 +F91C +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni53EA +ENCODING 21482 +BBX 14 13 1 -1 +BITMAP +1FF0 +1010 +1010 +1010 +1010 +1010 +1FF0 +0000 +0000 +0400 +0820 +3010 +C00C +ENDCHAR +STARTCHAR uni53EB +ENCODING 21483 +BBX 15 15 1 -1 +BITMAP +0008 +0008 +F888 +8888 +8888 +8888 +8888 +8888 +8888 +888E +88F8 +FB88 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uni53EC +ENCODING 21484 +BBX 12 14 2 -1 +BITMAP +7FF0 +0410 +0410 +0810 +1010 +2010 +C0E0 +0000 +3FE0 +2020 +2020 +2020 +2020 +3FE0 +ENDCHAR +STARTCHAR uni53ED +ENCODING 21485 +BBX 15 15 1 -1 +BITMAP +0070 +F110 +9110 +9110 +9110 +9110 +9110 +9110 +9110 +9208 +F208 +0208 +0404 +0404 +0802 +ENDCHAR +STARTCHAR uni53EE +ENCODING 21486 +BBX 15 14 1 -1 +BITMAP +07FE +F020 +9020 +9020 +9020 +9020 +9020 +9020 +9020 +9020 +F020 +0020 +0020 +00E0 +ENDCHAR +STARTCHAR uni53EF +ENCODING 21487 +BBX 15 13 1 -1 +BITMAP +FFFE +0010 +0010 +3F10 +2110 +2110 +2110 +2110 +3F10 +0010 +0010 +0010 +0070 +ENDCHAR +STARTCHAR uni53F0 +ENCODING 21488 +BBX 14 15 1 -1 +BITMAP +0400 +0400 +0820 +1010 +21E8 +FE04 +0004 +0000 +3FF0 +2010 +2010 +2010 +2010 +2010 +3FF0 +ENDCHAR +STARTCHAR uni53F1 +ENCODING 21489 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0104 +F108 +9110 +9160 +9180 +9700 +9100 +9100 +9100 +F102 +0102 +0102 +00FE +ENDCHAR +STARTCHAR uni53F2 +ENCODING 21490 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +3FF8 +2108 +2108 +2108 +3FF8 +0100 +1100 +0A00 +0600 +0980 +3060 +C01E +ENDCHAR +STARTCHAR uni53F3 +ENCODING 21491 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +0200 +FFFE +0400 +0400 +0800 +0800 +1FF8 +2808 +4808 +8808 +0808 +0808 +0FF8 +ENDCHAR +STARTCHAR uni53F4 +ENCODING 21492 +BBX 15 15 1 -1 +BITMAP +0400 +0400 +7FE0 +0420 +0420 +0822 +1022 +201E +FFF0 +2010 +2010 +2010 +2010 +2010 +3FF0 +ENDCHAR +STARTCHAR uni53F5 +ENCODING 21493 +BBX 13 14 2 -1 +BITMAP +FFF8 +8000 +8000 +8000 +8FC0 +8840 +8840 +8840 +8840 +8FC0 +8000 +8000 +8000 +FFF8 +ENDCHAR +STARTCHAR uni53F6 +ENCODING 21494 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F840 +8840 +8840 +8840 +8FFE +8840 +8840 +8840 +8840 +F840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni53F7 +ENCODING 21495 +BBX 14 14 1 -1 +BITMAP +1FE0 +1020 +1020 +1FE0 +0000 +FFFC +0400 +0800 +1FF0 +1010 +0010 +0020 +0020 +01C0 +ENDCHAR +STARTCHAR uni53F8 +ENCODING 21496 +BBX 12 14 2 -1 +BITMAP +FFF0 +0010 +0010 +7FD0 +0010 +0010 +3F90 +2090 +2090 +2090 +3F90 +0010 +0010 +0070 +ENDCHAR +STARTCHAR uni53F9 +ENCODING 21497 +BBX 14 15 1 -2 +BITMAP +0FF0 +F410 +9410 +9410 +9220 +9220 +9220 +9140 +9140 +F080 +9080 +0140 +0220 +0410 +180C +ENDCHAR +STARTCHAR uni53FA +ENCODING 21498 +BBX 14 14 2 -1 +BITMAP +0380 +0080 +F080 +9080 +9080 +9080 +9140 +9140 +9140 +F220 +0220 +0410 +0808 +1004 +ENDCHAR +STARTCHAR uni53FB +ENCODING 21499 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F080 +9080 +97F8 +9088 +9088 +9088 +9088 +9108 +F108 +9108 +0208 +0208 +0450 +0820 +ENDCHAR +STARTCHAR uni53FC +ENCODING 21500 +BBX 13 15 1 -2 +BITMAP +07F8 +F008 +9008 +9008 +9028 +9048 +9088 +9108 +9208 +9408 +F008 +9008 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni53FD +ENCODING 21501 +BBX 14 15 1 -2 +BITMAP +03E0 +F220 +9220 +9220 +9220 +9220 +9220 +9220 +9220 +F420 +9424 +0424 +0824 +081C +1000 +ENDCHAR +STARTCHAR uni53FE +ENCODING 21502 +BBX 11 15 2 -2 +BITMAP +FFE0 +0180 +0600 +0400 +0400 +0400 +1400 +0800 +7FC0 +4040 +4040 +4040 +4040 +7FC0 +4040 +ENDCHAR +STARTCHAR uni53FF +ENCODING 21503 +BBX 14 13 1 -1 +BITMAP +FBF8 +8840 +8840 +8840 +8840 +8840 +8840 +8840 +F840 +8840 +0040 +0040 +07FC +ENDCHAR +STARTCHAR uni5400 +ENCODING 21504 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +FBC0 +8840 +8840 +8840 +8840 +8FFC +8840 +8840 +F840 +8840 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5401 +ENCODING 21505 +BBX 15 14 1 -1 +BITMAP +07FC +F040 +9040 +9040 +9040 +9040 +9FFE +9040 +9040 +F040 +0040 +0040 +0040 +01C0 +ENDCHAR +STARTCHAR uni5402 +ENCODING 21506 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +1000 +1000 +1000 +1FF8 +0000 +0000 +1FF0 +1010 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni5403 +ENCODING 21507 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +03FE +F400 +9400 +99F8 +9030 +9040 +9080 +9100 +9200 +F400 +0402 +0402 +03FE +ENDCHAR +STARTCHAR uni5404 +ENCODING 21508 +BBX 14 15 1 -1 +BITMAP +0400 +0400 +0FE0 +1020 +6840 +0580 +0300 +0CC0 +3030 +DFEC +1020 +1020 +1020 +1020 +1FE0 +ENDCHAR +STARTCHAR uni5405 +ENCODING 21509 +BBX 13 12 1 0 +BITMAP +FDF8 +8508 +8508 +8508 +8508 +8508 +8508 +8508 +8508 +8508 +FDF8 +8508 +ENDCHAR +STARTCHAR uni5406 +ENCODING 21510 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F080 +9080 +9108 +9108 +9210 +97F0 +9220 +9020 +F040 +9080 +0110 +0208 +07FC +0204 +ENDCHAR +STARTCHAR uni5407 +ENCODING 21511 +BBX 14 15 1 -2 +BITMAP +07F0 +F010 +9020 +9040 +9080 +9080 +9FFC +9080 +9080 +F080 +9080 +0080 +0080 +0280 +0100 +ENDCHAR +STARTCHAR uni5408 +ENCODING 21512 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0440 +0820 +3018 +C006 +0FE0 +0000 +0000 +1FF0 +1010 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni5409 +ENCODING 21513 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +FFF8 +0200 +0200 +0200 +7FF0 +0000 +3FE0 +2020 +2020 +2020 +2020 +3FE0 +ENDCHAR +STARTCHAR uni540A +ENCODING 21514 +BBX 12 14 2 -1 +BITMAP +3FC0 +2040 +2040 +2040 +3FC0 +0400 +0400 +FFF0 +8410 +8410 +8410 +8470 +0400 +0400 +ENDCHAR +STARTCHAR uni540B +ENCODING 21515 +BBX 15 15 1 -1 +BITMAP +0010 +0010 +F810 +8810 +8FFE +8810 +8810 +8A10 +8910 +8890 +8810 +F810 +0010 +0010 +0070 +ENDCHAR +STARTCHAR uni540C +ENCODING 21516 +BBX 12 14 2 -1 +BITMAP +FFF0 +8010 +8010 +9F90 +8010 +8010 +9F90 +9090 +9090 +9090 +9F90 +8010 +8010 +8070 +ENDCHAR +STARTCHAR uni540D +ENCODING 21517 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +07F0 +0810 +3820 +C440 +0280 +0100 +07FC +1C04 +E404 +0404 +0404 +0404 +07FC +ENDCHAR +STARTCHAR uni540E +ENCODING 21518 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +2000 +2000 +3FFE +2000 +2000 +2FF8 +2808 +4808 +4808 +4808 +8808 +0808 +0FF8 +ENDCHAR +STARTCHAR uni540F +ENCODING 21519 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +2108 +2108 +2108 +3FF8 +0100 +1A00 +0400 +0B00 +30E0 +C01E +ENDCHAR +STARTCHAR uni5410 +ENCODING 21520 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F840 +8840 +8840 +8840 +8FFC +8840 +8840 +8840 +8840 +F840 +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni5411 +ENCODING 21521 +BBX 13 15 2 -1 +BITMAP +0400 +0400 +0800 +FFF8 +8008 +8008 +9FC8 +9048 +9048 +9048 +9048 +9FC8 +8008 +8008 +8038 +ENDCHAR +STARTCHAR uni5412 +ENCODING 21522 +BBX 15 15 1 -1 +BITMAP +0070 +0780 +F080 +9080 +9080 +9080 +90FE +9F80 +9080 +9080 +9080 +F080 +0082 +0082 +007E +ENDCHAR +STARTCHAR uni5413 +ENCODING 21523 +BBX 14 15 1 -2 +BITMAP +0FFC +F080 +9080 +9080 +9080 +90A0 +9090 +9088 +9088 +F080 +9080 +0080 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni5414 +ENCODING 21524 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +F040 +9240 +9258 +9268 +92C8 +9748 +9248 +9268 +F250 +9244 +0244 +0204 +01FC +ENDCHAR +STARTCHAR uni5415 +ENCODING 21525 +BBX 11 15 2 -2 +BITMAP +7FC0 +4040 +4040 +4040 +4040 +7FC0 +0000 +0000 +FFE0 +8020 +8020 +8020 +8020 +FFE0 +8020 +ENDCHAR +STARTCHAR uni5416 +ENCODING 21526 +BBX 14 15 1 -2 +BITMAP +0404 +F208 +9110 +90A0 +9040 +9040 +9040 +9040 +9040 +F040 +9040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5417 +ENCODING 21527 +BBX 13 15 1 -2 +BITMAP +07E0 +F020 +9020 +9220 +9220 +9220 +93F8 +9008 +9008 +F008 +97E8 +0008 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni5418 +ENCODING 21528 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F100 +93F8 +9240 +9440 +9040 +9040 +97FC +9040 +F040 +9040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5419 +ENCODING 21529 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +9080 +9488 +9488 +9490 +98A0 +9080 +9140 +F140 +9220 +0220 +0410 +0808 +1004 +ENDCHAR +STARTCHAR uni541A +ENCODING 21530 +BBX 14 15 1 -2 +BITMAP +07F0 +F110 +9110 +9110 +9FFC +9110 +9110 +9110 +97F0 +F110 +9100 +0200 +0200 +0400 +0800 +ENDCHAR +STARTCHAR uni541B +ENCODING 21531 +BBX 15 14 1 -1 +BITMAP +3FF8 +0208 +0208 +FFFE +0408 +0408 +3FF8 +0800 +1FF8 +2808 +C808 +0808 +0808 +0FF8 +ENDCHAR +STARTCHAR uni541C +ENCODING 21532 +BBX 14 14 1 -1 +BITMAP +07F0 +F110 +9110 +9110 +9110 +9110 +9FF0 +9210 +9210 +F210 +9210 +0210 +0210 +0FFC +ENDCHAR +STARTCHAR uni541D +ENCODING 21533 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0820 +0820 +0440 +0380 +1C70 +E00E +0000 +3FF8 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni541E +ENCODING 21534 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +0100 +0200 +FFFE +0440 +0820 +3018 +DFF6 +1010 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni541F +ENCODING 21535 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F0A0 +9110 +9208 +9DF6 +9000 +9000 +93F8 +9008 +F008 +0010 +0010 +0020 +0040 +ENDCHAR +STARTCHAR uni5420 +ENCODING 21536 +BBX 15 15 1 -1 +BITMAP +0050 +0048 +F844 +8840 +8FFE +8840 +8840 +8840 +88A0 +88A0 +F910 +0110 +0208 +0404 +0802 +ENDCHAR +STARTCHAR uni5421 +ENCODING 21537 +BBX 14 15 1 -1 +BITMAP +0040 +0440 +F440 +9444 +9444 +9448 +9750 +9460 +9440 +9440 +F440 +9444 +0544 +0644 +043C +ENDCHAR +STARTCHAR uni5422 +ENCODING 21538 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +0888 +4804 +4812 +4812 +87F0 +0000 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +1008 +ENDCHAR +STARTCHAR uni5423 +ENCODING 21539 +BBX 15 14 0 -1 +BITMAP +0040 +F020 +9010 +9090 +9080 +9080 +9284 +9282 +9282 +F282 +9488 +0088 +0088 +0078 +ENDCHAR +STARTCHAR uni5424 +ENCODING 21540 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F0A0 +9110 +9318 +9D16 +9110 +9110 +9110 +9110 +9110 +F210 +0210 +0410 +0810 +ENDCHAR +STARTCHAR uni5425 +ENCODING 21541 +BBX 14 14 1 -2 +BITMAP +F7FC +9020 +9020 +9040 +9040 +90D0 +90C8 +9148 +F244 +9444 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5426 +ENCODING 21542 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +0340 +0D20 +3118 +C106 +0100 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni5427 +ENCODING 21543 +BBX 15 14 1 -1 +BITMAP +07FC +F444 +9444 +9444 +9444 +9444 +97FC +9400 +9400 +9400 +F400 +0402 +0402 +03FE +ENDCHAR +STARTCHAR uni5428 +ENCODING 21544 +BBX 15 15 1 -1 +BITMAP +0040 +004C +F070 +97C0 +9040 +9040 +9248 +9248 +9248 +9248 +93F8 +F040 +0042 +0042 +003E +ENDCHAR +STARTCHAR uni5429 +ENCODING 21545 +BBX 15 15 1 -1 +BITMAP +0130 +0110 +F208 +9208 +9404 +9802 +93F8 +9088 +9088 +9108 +9108 +F208 +0210 +0410 +0860 +ENDCHAR +STARTCHAR uni542A +ENCODING 21546 +BBX 14 16 1 -2 +BITMAP +0140 +0140 +F140 +9248 +9248 +9650 +9A60 +9240 +92C0 +9340 +F240 +9244 +0244 +0244 +023C +0200 +ENDCHAR +STARTCHAR uni542B +ENCODING 21547 +BBX 14 15 1 -1 +BITMAP +0200 +0500 +08C0 +3030 +CFCC +0000 +3FF0 +0020 +0040 +0080 +3FF0 +2010 +2010 +2010 +3FF0 +ENDCHAR +STARTCHAR uni542C +ENCODING 21548 +BBX 15 15 1 -1 +BITMAP +003C +F3C0 +9200 +9200 +93FE +9210 +9210 +9210 +9210 +9210 +F410 +0410 +0810 +1010 +0010 +ENDCHAR +STARTCHAR uni542D +ENCODING 21549 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +9FFE +9000 +9000 +91F0 +9110 +9110 +9110 +9110 +F110 +0210 +0212 +0412 +080E +ENDCHAR +STARTCHAR uni542E +ENCODING 21550 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +F108 +9108 +923C +9FD2 +9110 +9110 +9110 +9110 +9110 +F210 +0212 +0412 +080E +ENDCHAR +STARTCHAR uni542F +ENCODING 21551 +BBX 14 16 0 -2 +BITMAP +0100 +0080 +1FFC +1004 +1004 +1004 +1FFC +1000 +1000 +1000 +17FC +2404 +2404 +4404 +87FC +0404 +ENDCHAR +STARTCHAR uni5430 +ENCODING 21552 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +9080 +97FC +9080 +9100 +9120 +9120 +9240 +F240 +9490 +0488 +0908 +03FC +0104 +ENDCHAR +STARTCHAR uni5431 +ENCODING 21553 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F040 +97FC +9040 +9040 +9040 +93F8 +9108 +9110 +F090 +90A0 +0040 +00A0 +0310 +0C0C +ENDCHAR +STARTCHAR uni5432 +ENCODING 21554 +BBX 13 16 1 -2 +BITMAP +0008 +07C8 +F048 +9048 +9048 +93C8 +9208 +9208 +9408 +97C8 +F048 +9048 +0048 +0048 +0288 +0108 +ENDCHAR +STARTCHAR uni5433 +ENCODING 21555 +BBX 15 15 0 -2 +BITMAP +07E0 +0420 +1420 +17E0 +1000 +1000 +1FF0 +0110 +0110 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5434 +ENCODING 21556 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1010 +1FF0 +0000 +0000 +3FF8 +0100 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5435 +ENCODING 21557 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +9290 +9288 +9484 +9484 +9890 +9090 +9090 +F020 +9020 +0040 +0080 +0300 +0C00 +ENDCHAR +STARTCHAR uni5436 +ENCODING 21558 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +F040 +97FC +9444 +9444 +94A4 +94A4 +9514 +960C +9404 +F404 +0404 +0404 +041C +ENDCHAR +STARTCHAR uni5437 +ENCODING 21559 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +97F0 +9090 +9090 +9090 +9090 +9FFC +9080 +F140 +9140 +0220 +0220 +0410 +080C +ENDCHAR +STARTCHAR uni5438 +ENCODING 21560 +BBX 15 14 1 -1 +BITMAP +07F8 +F108 +9108 +9110 +9110 +913C +9284 +9288 +9248 +F450 +0420 +0860 +1098 +2306 +ENDCHAR +STARTCHAR uni5439 +ENCODING 21561 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +F100 +93FE +9202 +9444 +9844 +9040 +9040 +90A0 +90A0 +F110 +0208 +0404 +0802 +ENDCHAR +STARTCHAR uni543A +ENCODING 21562 +BBX 14 15 1 -2 +BITMAP +03E0 +F220 +9220 +9220 +941C +9800 +97F0 +9210 +9220 +F120 +9140 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uni543B +ENCODING 21563 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +F3FE +9292 +9492 +9892 +9112 +9122 +9222 +9442 +F842 +0084 +0104 +0038 +ENDCHAR +STARTCHAR uni543C +ENCODING 21564 +BBX 15 15 1 -1 +BITMAP +0010 +0F90 +F090 +9110 +9210 +9210 +92D0 +9310 +9610 +9A10 +9210 +F212 +0212 +0212 +0E0E +ENDCHAR +STARTCHAR uni543D +ENCODING 21565 +BBX 15 15 1 -1 +BITMAP +0040 +0240 +F240 +97FC +9440 +9840 +9040 +9040 +9FFE +9040 +9040 +F040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni543E +ENCODING 21566 +BBX 15 14 1 -1 +BITMAP +7FF8 +0200 +0200 +3FE0 +0420 +0420 +0820 +FFFE +0000 +3FF0 +2010 +2010 +2010 +3FF0 +ENDCHAR +STARTCHAR uni543F +ENCODING 21567 +BBX 15 16 0 -2 +BITMAP +0100 +1100 +1100 +1FF8 +2100 +4100 +0100 +FFFE +0100 +0100 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni5440 +ENCODING 21568 +BBX 15 14 1 -1 +BITMAP +03FC +F010 +9110 +9110 +9210 +97FE +9450 +9050 +9090 +F090 +0110 +0210 +0C10 +0070 +ENDCHAR +STARTCHAR uni5441 +ENCODING 21569 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F100 +91F8 +9208 +9408 +9108 +9088 +9088 +9028 +9048 +F088 +9308 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni5442 +ENCODING 21570 +BBX 12 14 2 -1 +BITMAP +7FE0 +4020 +4020 +4020 +4020 +7FE0 +0400 +0800 +FFF0 +8010 +8010 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni5443 +ENCODING 21571 +BBX 15 14 1 -1 +BITMAP +07FE +F400 +9400 +94F8 +9488 +9488 +9488 +9488 +9498 +9480 +F880 +0882 +1082 +007E +ENDCHAR +STARTCHAR uni5444 +ENCODING 21572 +BBX 15 15 0 -2 +BITMAP +3FE0 +0420 +047C +0804 +1014 +6108 +0100 +FFFE +0100 +0100 +3FF8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni5445 +ENCODING 21573 +BBX 14 16 1 -2 +BITMAP +0100 +0080 +F080 +9FF8 +9220 +9220 +9220 +9220 +9220 +9140 +F140 +9080 +0140 +0220 +0410 +180C +ENDCHAR +STARTCHAR uni5446 +ENCODING 21574 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1010 +1010 +1FF0 +0100 +0100 +FFFE +0540 +0920 +1110 +2108 +C106 +0100 +ENDCHAR +STARTCHAR uni5447 +ENCODING 21575 +BBX 15 16 0 -2 +BITMAP +0100 +0104 +7D88 +0550 +0920 +1110 +2108 +C506 +0200 +1FF0 +1010 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni5448 +ENCODING 21576 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1010 +1010 +1FF0 +0000 +0000 +3FF8 +0100 +0100 +1FF0 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5449 +ENCODING 21577 +BBX 14 14 1 -1 +BITMAP +0FE0 +4820 +4820 +4820 +4FE0 +4000 +4000 +7FF0 +0010 +0010 +FFFC +0800 +3030 +C00C +ENDCHAR +STARTCHAR uni544A +ENCODING 21578 +BBX 15 15 1 -1 +BITMAP +0100 +1100 +1100 +3FFC +2100 +4100 +0100 +FFFE +0000 +1FF0 +1010 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni544B +ENCODING 21579 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +97F8 +9080 +9080 +9080 +9FFC +9080 +9140 +F140 +9220 +0220 +0410 +0808 +1004 +ENDCHAR +STARTCHAR uni544C +ENCODING 21580 +BBX 14 16 1 -2 +BITMAP +0020 +0220 +F120 +9120 +9020 +9220 +9120 +9120 +9020 +903C +F7E0 +9020 +0020 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni544D +ENCODING 21581 +BBX 15 14 1 -1 +BITMAP +07F8 +F000 +9000 +9000 +9000 +9FFE +9080 +9080 +9090 +9108 +F104 +020C +0272 +1F82 +ENDCHAR +STARTCHAR uni544E +ENCODING 21582 +BBX 15 14 1 -1 +BITMAP +03FC +F204 +9204 +9204 +9204 +93FC +9220 +9220 +9210 +F210 +0408 +0408 +0804 +1002 +ENDCHAR +STARTCHAR uni544F +ENCODING 21583 +BBX 14 16 1 -2 +BITMAP +0010 +00D0 +F710 +9110 +9110 +9110 +9110 +97FC +9110 +9110 +F110 +9110 +0210 +0210 +0410 +0810 +ENDCHAR +STARTCHAR uni5450 +ENCODING 21584 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F080 +97F8 +9488 +9488 +9488 +9488 +9548 +9528 +F628 +9408 +0408 +0408 +0428 +0410 +ENDCHAR +STARTCHAR uni5451 +ENCODING 21585 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +0100 +0100 +FFFE +0240 +0420 +0810 +3008 +DFF6 +1010 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni5452 +ENCODING 21586 +BBX 14 15 1 -2 +BITMAP +07F8 +F080 +9080 +9080 +9080 +9FFC +9080 +9140 +9140 +F140 +9240 +0244 +0444 +083C +1000 +ENDCHAR +STARTCHAR uni5453 +ENCODING 21587 +BBX 14 15 1 -1 +BITMAP +0120 +0120 +F7FC +9120 +9120 +9000 +97F0 +9020 +9040 +9080 +F100 +9200 +0404 +0404 +03FC +ENDCHAR +STARTCHAR uni5454 +ENCODING 21588 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +9080 +9FFC +9080 +9080 +9140 +9140 +9140 +F220 +9220 +0510 +0490 +0888 +1004 +ENDCHAR +STARTCHAR uni5455 +ENCODING 21589 +BBX 15 14 1 -1 +BITMAP +07FE +F400 +9408 +9408 +9488 +9450 +9450 +9420 +9430 +9450 +F488 +0508 +0400 +07FE +ENDCHAR +STARTCHAR uni5456 +ENCODING 21590 +BBX 14 15 1 -2 +BITMAP +07FC +F400 +9440 +9440 +9440 +95F8 +9448 +9448 +9448 +F488 +9488 +0908 +0908 +1250 +2420 +ENDCHAR +STARTCHAR uni5457 +ENCODING 21591 +BBX 14 15 1 -2 +BITMAP +03F8 +F208 +9208 +9248 +9248 +9248 +9248 +9248 +9248 +F248 +90A0 +0090 +0108 +0204 +0C04 +ENDCHAR +STARTCHAR uni5458 +ENCODING 21592 +BBX 13 15 1 -2 +BITMAP +3FE0 +2020 +2020 +3FE0 +0000 +7FF0 +4010 +4210 +4210 +4210 +4210 +4590 +0860 +3010 +C008 +ENDCHAR +STARTCHAR uni5459 +ENCODING 21593 +BBX 13 15 1 -2 +BITMAP +3FE0 +2020 +2020 +2020 +3FE0 +0200 +0200 +FFF8 +8208 +8508 +8888 +9048 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni545A +ENCODING 21594 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F880 +8900 +89FC +8A10 +8D10 +8910 +8910 +88A0 +F8A0 +8840 +00A0 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni545B +ENCODING 21595 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +F140 +9140 +9220 +9410 +980C +93E0 +9220 +9220 +F2A0 +9240 +0208 +0208 +01F8 +ENDCHAR +STARTCHAR uni545C +ENCODING 21596 +BBX 14 16 1 -2 +BITMAP +0040 +0080 +F3F8 +9208 +9208 +9208 +9228 +9210 +9200 +93FC +F004 +9004 +07F4 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni545D +ENCODING 21597 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F3F8 +9208 +9208 +93F8 +9200 +9200 +92F8 +9210 +F220 +9240 +0284 +0504 +04FC +0800 +ENDCHAR +STARTCHAR uni545E +ENCODING 21598 +BBX 13 15 1 -2 +BITMAP +03F8 +F008 +9008 +97E8 +9008 +9008 +93E8 +9228 +9228 +F228 +93E8 +0008 +0008 +0028 +0010 +ENDCHAR +STARTCHAR uni545F +ENCODING 21599 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFE +9080 +9080 +9100 +9220 +9620 +9140 +9080 +F090 +0108 +0104 +023C +0FC2 +ENDCHAR +STARTCHAR uni5460 +ENCODING 21600 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +9080 +9FF8 +9080 +91C0 +91C0 +92A0 +92A0 +9490 +FBE8 +9084 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni5461 +ENCODING 21601 +BBX 14 15 1 -2 +BITMAP +07F8 +F408 +9408 +9408 +97F8 +9440 +9440 +97FC +9440 +F440 +9420 +0424 +0514 +060C +0404 +ENDCHAR +STARTCHAR uni5462 +ENCODING 21602 +BBX 15 14 1 -1 +BITMAP +07FC +F404 +9404 +9404 +97FC +9400 +9500 +950C +95F0 +9500 +F900 +0902 +1102 +00FE +ENDCHAR +STARTCHAR uni5463 +ENCODING 21603 +BBX 14 15 1 -2 +BITMAP +03F0 +F210 +9290 +9250 +9210 +9210 +9FFC +9410 +9510 +F490 +9410 +07FC +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni5464 +ENCODING 21604 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F140 +9140 +9220 +9490 +984C +9040 +97F0 +9010 +F020 +9220 +0140 +0080 +0040 +0040 +ENDCHAR +STARTCHAR uni5465 +ENCODING 21605 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +97F0 +9490 +9490 +97F0 +9490 +9490 +9490 +9FFC +F410 +9410 +0410 +0450 +0420 +ENDCHAR +STARTCHAR uni5466 +ENCODING 21606 +BBX 15 15 1 -1 +BITMAP +0210 +0210 +F210 +9410 +947E +9912 +9512 +9312 +9212 +9212 +92A2 +F4A2 +05A2 +0642 +188C +ENDCHAR +STARTCHAR uni5467 +ENCODING 21607 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F7C0 +9440 +9440 +9440 +9440 +97FC +9440 +9420 +F420 +9424 +0414 +0514 +064C +0424 +ENDCHAR +STARTCHAR uni5468 +ENCODING 21608 +BBX 14 14 1 -1 +BITMAP +3FFC +2004 +2104 +27E4 +2104 +2104 +2FF4 +2004 +27E4 +2424 +2424 +47E4 +4004 +801C +ENDCHAR +STARTCHAR uni5469 +ENCODING 21609 +BBX 14 15 1 -2 +BITMAP +03F8 +F000 +9000 +9000 +97FC +9040 +9040 +9250 +9248 +F448 +9444 +0844 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni546A +ENCODING 21610 +BBX 15 14 1 -1 +BITMAP +03FC +F204 +9204 +9204 +9204 +9204 +93FC +9090 +9090 +F090 +0110 +0112 +0212 +1C0E +ENDCHAR +STARTCHAR uni546B +ENCODING 21611 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F840 +8840 +887E +8840 +8840 +8840 +8BFC +8A04 +8A04 +FA04 +0204 +0204 +03FC +ENDCHAR +STARTCHAR uni546C +ENCODING 21612 +BBX 15 14 1 -1 +BITMAP +07FE +F492 +9492 +9492 +9492 +9492 +9512 +951E +9602 +9402 +F402 +0402 +0402 +07FE +ENDCHAR +STARTCHAR uni546D +ENCODING 21613 +BBX 14 15 1 -1 +BITMAP +0090 +0490 +F490 +9490 +9490 +9FFC +9490 +9490 +9490 +9490 +F4F0 +9400 +0400 +0400 +07FC +ENDCHAR +STARTCHAR uni546E +ENCODING 21614 +BBX 14 14 1 -2 +BITMAP +F3F8 +9208 +9208 +9208 +9208 +9208 +93F8 +9208 +F000 +9120 +0110 +0208 +0404 +0804 +ENDCHAR +STARTCHAR uni546F +ENCODING 21615 +BBX 14 15 1 -2 +BITMAP +03F8 +F040 +9040 +9248 +9148 +9150 +9040 +97FC +9040 +F040 +9040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5470 +ENCODING 21616 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +484C +4F70 +4840 +4840 +4842 +4F42 +703E +C000 +1FF8 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni5471 +ENCODING 21617 +BBX 15 15 1 -1 +BITMAP +0018 +00F0 +F710 +9410 +9490 +9490 +9490 +9490 +9490 +9488 +9488 +F8A8 +08A4 +10D4 +2312 +ENDCHAR +STARTCHAR uni5472 +ENCODING 21618 +BBX 14 15 1 -1 +BITMAP +0120 +0120 +F120 +9520 +9524 +95A8 +9530 +9520 +9520 +9520 +F520 +9524 +07A4 +1C24 +081C +ENDCHAR +STARTCHAR uni5473 +ENCODING 21619 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F040 +97FC +9040 +9040 +9040 +9FFE +9150 +9150 +9248 +F444 +0842 +0040 +0040 +ENDCHAR +STARTCHAR uni5474 +ENCODING 21620 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +03FC +F404 +9804 +93E4 +9224 +9224 +9224 +9224 +93E4 +9004 +F008 +0008 +0070 +ENDCHAR +STARTCHAR uni5475 +ENCODING 21621 +BBX 15 14 1 -1 +BITMAP +07FE +F008 +9008 +93C8 +9248 +9248 +9248 +9248 +9248 +93C8 +F008 +0008 +0008 +0038 +ENDCHAR +STARTCHAR uni5476 +ENCODING 21622 +BBX 15 15 1 -1 +BITMAP +0200 +02FC +E204 +BF44 +A544 +A544 +A548 +A928 +A928 +AA10 +BE10 +E328 +0448 +0884 +3102 +ENDCHAR +STARTCHAR uni5477 +ENCODING 21623 +BBX 14 14 1 -1 +BITMAP +07FC +F444 +9444 +9444 +97FC +9444 +9444 +9444 +97FC +F040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5478 +ENCODING 21624 +BBX 14 14 1 -1 +BITMAP +07F8 +F040 +9040 +9080 +9080 +91A0 +9290 +9488 +9888 +F080 +9080 +0080 +0000 +0FFC +ENDCHAR +STARTCHAR uni5479 +ENCODING 21625 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F480 +9480 +97F8 +9480 +9880 +9080 +9FFC +9080 +F140 +9140 +0220 +0410 +0808 +1004 +ENDCHAR +STARTCHAR uni547A +ENCODING 21626 +BBX 14 15 1 -2 +BITMAP +03F0 +F210 +9210 +9210 +93F0 +9000 +97FC +9100 +9200 +F3F0 +9010 +0010 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni547B +ENCODING 21627 +BBX 14 15 1 -1 +BITMAP +0040 +F040 +97FC +9444 +9444 +9444 +97FC +9444 +9444 +9444 +F7FC +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni547C +ENCODING 21628 +BBX 15 15 1 -1 +BITMAP +0038 +07C0 +F040 +9444 +9444 +9248 +9040 +9FFE +9040 +9040 +9040 +F040 +0040 +0040 +01C0 +ENDCHAR +STARTCHAR uni547D +ENCODING 21629 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0C60 +3018 +CFE6 +0000 +0000 +7C7C +4444 +4444 +4444 +4444 +7C5C +0040 +0040 +ENDCHAR +STARTCHAR uni547E +ENCODING 21630 +BBX 14 13 1 -1 +BITMAP +F3F8 +9208 +9208 +9208 +93F8 +9208 +9208 +9208 +F3F8 +9208 +0000 +0000 +07FC +ENDCHAR +STARTCHAR uni547F +ENCODING 21631 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F040 +97FC +9040 +9040 +9040 +9FFE +9080 +9080 +9090 +F108 +010C +0274 +1F82 +ENDCHAR +STARTCHAR uni5480 +ENCODING 21632 +BBX 15 14 1 -1 +BITMAP +03F8 +F208 +9208 +9208 +93F8 +9208 +9208 +9208 +93F8 +F208 +0208 +0208 +0208 +0FFE +ENDCHAR +STARTCHAR uni5481 +ENCODING 21633 +BBX 14 16 1 -2 +BITMAP +0210 +0210 +F210 +9210 +9FFC +9210 +9210 +9210 +9210 +93F0 +F210 +9210 +0210 +0210 +03F0 +0210 +ENDCHAR +STARTCHAR uni5482 +ENCODING 21634 +BBX 14 14 1 -1 +BITMAP +07FC +F420 +9420 +9420 +95FC +9524 +9524 +9524 +9524 +F534 +9528 +0420 +0420 +07FC +ENDCHAR +STARTCHAR uni5483 +ENCODING 21635 +BBX 14 16 1 -2 +BITMAP +0240 +0240 +F240 +9540 +9558 +9D68 +95C8 +9748 +9548 +9568 +F550 +9544 +0544 +0504 +04FC +0400 +ENDCHAR +STARTCHAR uni5484 +ENCODING 21636 +BBX 15 15 1 -1 +BITMAP +0040 +0244 +F244 +9244 +9244 +9244 +93FC +9040 +9040 +9442 +9442 +F442 +0442 +0442 +07FE +ENDCHAR +STARTCHAR uni5485 +ENCODING 21637 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +3FF8 +0000 +0820 +0440 +FFFE +0000 +0000 +1FF0 +1010 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni5486 +ENCODING 21638 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +F3FC +9404 +9804 +93E4 +9224 +9224 +9224 +93E4 +9218 +F200 +0202 +0202 +01FE +ENDCHAR +STARTCHAR uni5487 +ENCODING 21639 +BBX 14 14 1 -1 +BITMAP +0080 +F040 +9050 +9010 +9110 +9120 +9528 +9544 +9544 +F984 +9110 +0310 +0510 +08F0 +ENDCHAR +STARTCHAR uni5488 +ENCODING 21640 +BBX 15 15 1 -1 +BITMAP +0120 +0120 +F7FC +9124 +9124 +97FC +9520 +9520 +97FE +9122 +9122 +F222 +0222 +042C +0820 +ENDCHAR +STARTCHAR uni5489 +ENCODING 21641 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +97F0 +9490 +9490 +9490 +9490 +9490 +9FFC +F080 +9140 +0140 +0220 +0410 +080C +ENDCHAR +STARTCHAR uni548A +ENCODING 21642 +BBX 15 15 1 -1 +BITMAP +0030 +03C0 +F040 +9040 +97FE +9040 +90E0 +90E0 +9150 +9150 +9248 +F444 +0842 +0040 +0040 +ENDCHAR +STARTCHAR uni548B +ENCODING 21643 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +F3FE +9240 +9440 +9840 +907C +9040 +9040 +9040 +F07C +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni548C +ENCODING 21644 +BBX 14 15 1 -1 +BITMAP +0C00 +F000 +10FC +1084 +FE84 +1084 +1084 +3884 +3484 +5284 +9084 +1084 +10FC +1000 +1000 +ENDCHAR +STARTCHAR uni548D +ENCODING 21645 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +F080 +9110 +9108 +9234 +97C2 +9000 +9000 +93FC +9204 +F204 +0204 +0204 +03FC +ENDCHAR +STARTCHAR uni548E +ENCODING 21646 +BBX 15 15 1 -1 +BITMAP +2010 +3E10 +4210 +C228 +2428 +1844 +1482 +2300 +C0FE +0000 +3FF8 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni548F +ENCODING 21647 +BBX 15 15 1 -1 +BITMAP +0100 +0080 +F040 +9000 +97C0 +9044 +9048 +9F48 +9160 +9160 +F250 +0250 +0448 +1846 +01C0 +ENDCHAR +STARTCHAR uni5490 +ENCODING 21648 +BBX 15 15 1 -1 +BITMAP +0104 +0104 +F104 +92FE +9204 +9604 +9A44 +9224 +9214 +9204 +9204 +F204 +0204 +0204 +021C +ENDCHAR +STARTCHAR uni5491 +ENCODING 21649 +BBX 14 16 1 -2 +BITMAP +0200 +0200 +F27C +9210 +9F90 +9210 +9210 +9290 +9310 +9E10 +F210 +9210 +0210 +0210 +0A50 +0420 +ENDCHAR +STARTCHAR uni5492 +ENCODING 21650 +BBX 15 14 1 -1 +BITMAP +FCFC +8484 +8484 +8484 +FCFC +0000 +0FC0 +0840 +0840 +0840 +1040 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni5493 +ENCODING 21651 +BBX 14 14 1 -2 +BITMAP +F7F8 +9200 +9200 +93E0 +9220 +9220 +9320 +94A0 +F4A0 +9420 +0424 +0524 +0624 +041C +ENDCHAR +STARTCHAR uni5494 +ENCODING 21652 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +90F8 +9080 +9080 +9080 +9FFC +9080 +9080 +F0A0 +9090 +0088 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni5495 +ENCODING 21653 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +0040 +F040 +97FC +9040 +9040 +9040 +93F8 +9208 +9208 +F208 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni5496 +ENCODING 21654 +BBX 14 15 1 -1 +BITMAP +0400 +0400 +0400 +FFBC +94A4 +94A4 +94A4 +94A4 +94A4 +94A4 +94A4 +94A4 +F8A4 +08BC +1300 +ENDCHAR +STARTCHAR uni5497 +ENCODING 21655 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +F080 +9080 +97FC +9080 +9100 +9100 +91FC +9220 +F220 +9420 +0420 +0820 +03FC +ENDCHAR +STARTCHAR uni5498 +ENCODING 21656 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +97FC +9100 +9140 +9240 +93F8 +9648 +9A48 +F248 +9248 +0268 +0250 +0040 +0040 +ENDCHAR +STARTCHAR uni5499 +ENCODING 21657 +BBX 14 16 1 -2 +BITMAP +0120 +0110 +F110 +9100 +97FC +9140 +9140 +9148 +9148 +9250 +F250 +9264 +0444 +04C4 +093C +1000 +ENDCHAR +STARTCHAR uni549A +ENCODING 21658 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F1F0 +9210 +9620 +9940 +9080 +9140 +9630 +980C +F180 +9040 +0020 +0300 +00C0 +0020 +ENDCHAR +STARTCHAR uni549B +ENCODING 21659 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F040 +97FC +9404 +9808 +9000 +9000 +97FC +9040 +F040 +9040 +0040 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni549C +ENCODING 21660 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +07FC +F404 +9404 +9200 +9208 +9230 +93C0 +9200 +9200 +F200 +0204 +0204 +01FC +ENDCHAR +STARTCHAR uni549D +ENCODING 21661 +BBX 14 15 1 -1 +BITMAP +0210 +0210 +E210 +A420 +A528 +A948 +AF78 +A210 +A210 +A420 +E840 +AF78 +0000 +0000 +1FFC +ENDCHAR +STARTCHAR uni549E +ENCODING 21662 +BBX 14 15 1 -2 +BITMAP +07F8 +F120 +9120 +9120 +9120 +9120 +9FFC +9120 +9120 +F120 +9120 +0220 +0220 +0420 +0820 +ENDCHAR +STARTCHAR uni549F +ENCODING 21663 +BBX 14 15 1 -2 +BITMAP +07FC +F040 +9040 +9080 +93F8 +9208 +9208 +9208 +93F8 +9208 +F208 +9208 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni54A0 +ENCODING 21664 +BBX 13 14 2 -1 +BITMAP +1FC0 +1040 +1040 +1FC0 +0000 +FFF8 +1040 +1FC0 +1040 +1FC0 +1078 +1FC0 +E040 +0040 +ENDCHAR +STARTCHAR uni54A1 +ENCODING 21665 +BBX 15 14 1 -1 +BITMAP +07FE +F108 +9108 +91F8 +9108 +9108 +91F8 +9108 +9108 +910E +F1F8 +0F08 +0008 +0008 +ENDCHAR +STARTCHAR uni54A2 +ENCODING 21666 +BBX 15 14 1 -1 +BITMAP +7EFC +4284 +4284 +7EFC +0000 +3FF8 +0000 +FFFE +0400 +0FF0 +1010 +0010 +0020 +01C0 +ENDCHAR +STARTCHAR uni54A3 +ENCODING 21667 +BBX 14 16 1 -2 +BITMAP +0080 +0088 +F488 +9290 +92A0 +9080 +9FFC +9120 +9120 +9120 +F120 +9124 +0224 +0224 +041C +0800 +ENDCHAR +STARTCHAR uni54A4 +ENCODING 21668 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FE +9402 +941A +9060 +93C0 +9040 +9040 +97FE +9040 +F040 +0042 +0042 +003E +ENDCHAR +STARTCHAR uni54A5 +ENCODING 21669 +BBX 15 14 1 -1 +BITMAP +0FFE +F080 +9110 +9108 +923C +97C4 +9000 +9040 +9040 +F7FC +0040 +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni54A6 +ENCODING 21670 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFE +9040 +97FC +9044 +97FC +9440 +9440 +97FE +9042 +F0A2 +0116 +0608 +1806 +ENDCHAR +STARTCHAR uni54A7 +ENCODING 21671 +BBX 14 16 0 -2 +BITMAP +0004 +0004 +EFC4 +A214 +A214 +A3D4 +A254 +A454 +A654 +A554 +E894 +A094 +0104 +0204 +0414 +0808 +ENDCHAR +STARTCHAR uni54A8 +ENCODING 21672 +BBX 15 15 1 -1 +BITMAP +0100 +4100 +23FC +1244 +0448 +00A0 +0890 +3108 +C606 +0000 +1FF0 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni54A9 +ENCODING 21673 +BBX 15 15 1 -1 +BITMAP +0208 +0108 +F110 +97FC +9040 +9040 +93F8 +9040 +9040 +9040 +9FFE +F040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni54AA +ENCODING 21674 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F490 +9290 +92A0 +9080 +9FFC +9080 +91C0 +92A0 +F2A0 +9490 +0888 +1084 +0080 +0080 +ENDCHAR +STARTCHAR uni54AB +ENCODING 21675 +BBX 15 14 1 -1 +BITMAP +7E7C +4244 +4244 +4244 +4244 +7E7C +4800 +4828 +4828 +4444 +4482 +4200 +8180 +807E +ENDCHAR +STARTCHAR uni54AC +ENCODING 21676 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F040 +9FFE +9110 +9208 +9404 +9110 +9110 +90A0 +90A0 +F040 +00A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni54AD +ENCODING 21677 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F040 +9FFE +9040 +9040 +9040 +97FC +9000 +93F8 +9208 +F208 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni54AE +ENCODING 21678 +BBX 15 15 1 -1 +BITMAP +0040 +0240 +F240 +97FC +9440 +9840 +9040 +9FFE +9040 +90E0 +9150 +F248 +0C46 +0040 +0040 +ENDCHAR +STARTCHAR uni54AF +ENCODING 21679 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +01FC +F204 +9508 +9890 +9060 +9198 +9E06 +93F8 +9208 +F208 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni54B0 +ENCODING 21680 +BBX 13 16 1 -2 +BITMAP +0100 +0100 +F3F8 +9208 +9408 +93C8 +9248 +9248 +93C8 +9248 +F248 +93C8 +0208 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni54B1 +ENCODING 21681 +BBX 13 16 1 -2 +BITMAP +0040 +0080 +F3F8 +9208 +9208 +9208 +93F8 +9208 +9208 +9208 +93F8 +F208 +9208 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni54B2 +ENCODING 21682 +BBX 15 15 1 -1 +BITMAP +0208 +0108 +0110 +F7FC +9040 +9040 +9040 +9FFE +9040 +90A0 +90A0 +F110 +0208 +0404 +0802 +ENDCHAR +STARTCHAR uni54B3 +ENCODING 21683 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +0040 +FFFE +9080 +9090 +9510 +9224 +9124 +90C8 +9188 +F610 +0060 +0198 +1E06 +ENDCHAR +STARTCHAR uni54B4 +ENCODING 21684 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +97FC +9100 +9120 +9120 +9224 +92A4 +92A8 +F520 +9450 +0850 +0088 +0108 +0204 +ENDCHAR +STARTCHAR uni54B5 +ENCODING 21685 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +90A0 +9110 +9208 +95F4 +9000 +97FC +9080 +F100 +93F8 +0008 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni54B6 +ENCODING 21686 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F3C0 +9040 +9040 +97FC +9040 +9040 +9040 +93F8 +F208 +9208 +0208 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni54B7 +ENCODING 21687 +BBX 15 15 1 -1 +BITMAP +0120 +0120 +F124 +9924 +9728 +9120 +9120 +9120 +9130 +9328 +9D26 +F120 +0222 +0422 +181E +ENDCHAR +STARTCHAR uni54B8 +ENCODING 21688 +BBX 15 15 1 -1 +BITMAP +0048 +0048 +0044 +7FFE +4040 +4040 +5F44 +4044 +4028 +5F28 +5110 +5110 +5F2A +804A +8184 +ENDCHAR +STARTCHAR uni54B9 +ENCODING 21689 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F040 +97FC +9404 +9888 +9080 +97FC +9110 +9110 +F210 +91A0 +0040 +00A0 +0110 +0608 +ENDCHAR +STARTCHAR uni54BA +ENCODING 21690 +BBX 15 14 1 -1 +BITMAP +07FC +F000 +9000 +93F8 +9208 +9208 +93F8 +9208 +9208 +9208 +F3F8 +0000 +0000 +0FFE +ENDCHAR +STARTCHAR uni54BB +ENCODING 21691 +BBX 14 16 1 -2 +BITMAP +0120 +0120 +F120 +9220 +93FC +9620 +9A20 +9270 +9270 +92A8 +F2A8 +9324 +0220 +0220 +0220 +0220 +ENDCHAR +STARTCHAR uni54BC +ENCODING 21692 +BBX 13 14 2 -1 +BITMAP +3FE0 +2020 +23E0 +2220 +2220 +FFF8 +8008 +9FC8 +9048 +9048 +9048 +9FC8 +8008 +8038 +ENDCHAR +STARTCHAR uni54BD +ENCODING 21693 +BBX 14 14 1 -1 +BITMAP +07FC +0404 +F444 +9444 +95F4 +9444 +9444 +9444 +94A4 +94A4 +F514 +0404 +0404 +07FC +ENDCHAR +STARTCHAR uni54BE +ENCODING 21694 +BBX 15 15 1 -1 +BITMAP +0084 +0084 +F7FC +9088 +9090 +9090 +9FFE +9040 +9080 +918C +92F0 +F480 +0882 +0082 +007E +ENDCHAR +STARTCHAR uni54BF +ENCODING 21695 +BBX 15 15 1 -1 +BITMAP +0100 +01FC +F124 +9224 +93FE +9624 +9A24 +9224 +92FC +9220 +9220 +F220 +0240 +0240 +0280 +ENDCHAR +STARTCHAR uni54C0 +ENCODING 21696 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +7FF8 +0000 +1FE0 +1020 +1020 +1FE4 +0488 +0890 +3860 +C840 +0820 +0F10 +780C +ENDCHAR +STARTCHAR uni54C1 +ENCODING 21697 +BBX 14 14 1 -1 +BITMAP +1FE0 +1020 +1020 +1020 +1020 +1FE0 +0000 +FCFC +8484 +8484 +8484 +8484 +8484 +FCFC +ENDCHAR +STARTCHAR uni54C2 +ENCODING 21698 +BBX 15 14 1 -1 +BITMAP +0FFE +F0A0 +90A0 +90A0 +97FC +94A4 +94A4 +94A4 +9524 +963C +F404 +0404 +0404 +07FC +ENDCHAR +STARTCHAR uni54C3 +ENCODING 21699 +BBX 14 14 1 -1 +BITMAP +03FC +F204 +9204 +92F4 +9204 +9204 +92F4 +9294 +9294 +9294 +F2F4 +0204 +0204 +020C +ENDCHAR +STARTCHAR uni54C4 +ENCODING 21700 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +F110 +97FC +9110 +9110 +9110 +9110 +9110 +9FFE +9000 +F080 +0110 +0608 +1806 +ENDCHAR +STARTCHAR uni54C5 +ENCODING 21701 +BBX 14 16 1 -2 +BITMAP +0200 +0200 +F200 +93FC +9404 +9404 +9A24 +9144 +9494 +9554 +F634 +9414 +07F4 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni54C6 +ENCODING 21702 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +00F8 +F310 +9090 +9060 +90D0 +971E +9022 +9044 +F1A4 +0018 +0010 +0060 +0780 +ENDCHAR +STARTCHAR uni54C7 +ENCODING 21703 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F3F8 +9040 +9040 +9040 +97FC +9000 +9040 +9040 +F7FC +0040 +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni54C8 +ENCODING 21704 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F0A0 +9110 +9208 +9C06 +93F8 +9000 +9000 +93F8 +9208 +F208 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni54C9 +ENCODING 21705 +BBX 15 15 1 -1 +BITMAP +0848 +0848 +7F44 +0840 +0840 +FFFE +0040 +0044 +7E44 +4228 +4228 +4210 +7E32 +00CA +0704 +ENDCHAR +STARTCHAR uni54CA +ENCODING 21706 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F7FE +9080 +9100 +91FC +9304 +9504 +99FC +9104 +F104 +91FC +0104 +0104 +0114 +0108 +ENDCHAR +STARTCHAR uni54CB +ENCODING 21707 +BBX 14 15 1 -1 +BITMAP +0420 +04A0 +E4A0 +A4B8 +BEE8 +A5A8 +A4A8 +A4A8 +A4A8 +A4B8 +E4A0 +A6A4 +1C84 +0884 +007C +ENDCHAR +STARTCHAR uni54CC +ENCODING 21708 +BBX 15 16 0 -2 +BITMAP +0008 +003C +F7C0 +9400 +941C +95E0 +9520 +9522 +9524 +9528 +F510 +9510 +0508 +0944 +0982 +1100 +ENDCHAR +STARTCHAR uni54CD +ENCODING 21709 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F100 +97F8 +9408 +9408 +95E8 +9528 +9528 +9528 +F528 +95E8 +0408 +0408 +0428 +0410 +ENDCHAR +STARTCHAR uni54CE +ENCODING 21710 +BBX 14 16 1 -2 +BITMAP +0220 +0220 +F7F8 +9220 +9220 +9000 +9410 +9410 +9220 +9220 +F140 +9080 +0140 +0220 +0410 +180C +ENDCHAR +STARTCHAR uni54CF +ENCODING 21711 +BBX 14 15 1 -2 +BITMAP +07F0 +F410 +9410 +97F0 +9410 +9410 +97F0 +9488 +9490 +F460 +9440 +0420 +0510 +060C +0400 +ENDCHAR +STARTCHAR uni54D0 +ENCODING 21712 +BBX 14 14 1 -1 +BITMAP +07FC +F400 +9400 +97F8 +9440 +9440 +95F0 +9440 +9440 +F440 +97F8 +0400 +0400 +07FC +ENDCHAR +STARTCHAR uni54D1 +ENCODING 21713 +BBX 14 14 1 -1 +BITMAP +07F8 +F120 +9120 +9120 +9124 +9924 +9528 +9528 +9530 +F120 +9120 +0120 +0120 +0FFC +ENDCHAR +STARTCHAR uni54D2 +ENCODING 21714 +BBX 14 15 1 -1 +BITMAP +0020 +0420 +F220 +9220 +91FC +9020 +9620 +9250 +9248 +9288 +F284 +9304 +0200 +0500 +08FC +ENDCHAR +STARTCHAR uni54D3 +ENCODING 21715 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F178 +9780 +90A0 +9048 +91A8 +9618 +9000 +97FC +F120 +9120 +0224 +0224 +041C +0800 +ENDCHAR +STARTCHAR uni54D4 +ENCODING 21716 +BBX 14 16 1 -2 +BITMAP +0220 +0224 +F228 +93B0 +9220 +9224 +92A4 +931C +9240 +9040 +F7FC +9040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni54D5 +ENCODING 21717 +BBX 13 16 1 -2 +BITMAP +0040 +0248 +F248 +9248 +93F8 +9080 +9080 +91F8 +9208 +9508 +F090 +90A0 +0040 +0080 +0100 +0600 +ENDCHAR +STARTCHAR uni54D6 +ENCODING 21718 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F1FC +9220 +9420 +9020 +91F8 +9120 +9120 +9120 +F7FC +9020 +0020 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni54D7 +ENCODING 21719 +BBX 14 16 1 -2 +BITMAP +0120 +0128 +F228 +9230 +9620 +9A64 +92A4 +921C +9240 +9040 +F7FC +9040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni54D8 +ENCODING 21720 +BBX 15 15 1 -1 +BITMAP +0100 +021C +F400 +9880 +9080 +913E +9208 +9E08 +9208 +9208 +9208 +F208 +0208 +0208 +0238 +ENDCHAR +STARTCHAR uni54D9 +ENCODING 21721 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F140 +9220 +9410 +980C +93E0 +9000 +9000 +9FF8 +F080 +9100 +0220 +0410 +0FF8 +0408 +ENDCHAR +STARTCHAR uni54DA +ENCODING 21722 +BBX 14 15 1 -2 +BITMAP +03E0 +F220 +9220 +9220 +9220 +949C +9880 +97F8 +9080 +F1C0 +92A0 +0490 +088C +0080 +0080 +ENDCHAR +STARTCHAR uni54DB +ENCODING 21723 +BBX 15 16 0 -2 +BITMAP +0080 +7C88 +44B0 +44C4 +4484 +7C7C +0000 +0440 +0820 +1010 +2FE8 +C426 +0420 +0820 +10A0 +6040 +ENDCHAR +STARTCHAR uni54DC +ENCODING 21724 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9208 +9110 +90A0 +9040 +91B0 +960C +9110 +F110 +9110 +0110 +0210 +0210 +0410 +ENDCHAR +STARTCHAR uni54DD +ENCODING 21725 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F040 +97FC +9484 +9888 +9140 +9144 +9348 +9530 +F920 +9110 +0108 +0144 +0182 +0100 +ENDCHAR +STARTCHAR uni54DE +ENCODING 21726 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F120 +9210 +97F8 +9048 +9240 +9240 +93F8 +9440 +F040 +9FFC +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni54DF +ENCODING 21727 +BBX 14 16 0 -2 +BITMAP +0220 +0220 +F220 +943C +9544 +9F44 +9284 +9224 +9414 +9F94 +F404 +9004 +0184 +0E04 +0428 +0010 +ENDCHAR +STARTCHAR uni54E0 +ENCODING 21728 +BBX 14 16 1 -2 +BITMAP +0040 +0240 +F240 +93FC +9440 +9840 +9040 +97FC +9000 +9000 +F3F8 +9208 +0208 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni54E1 +ENCODING 21729 +BBX 14 14 1 -1 +BITMAP +1FE0 +1020 +1FE0 +0000 +3FF0 +2010 +3FF0 +2010 +3FF0 +2010 +3FF0 +0400 +1830 +E00C +ENDCHAR +STARTCHAR uni54E2 +ENCODING 21730 +BBX 15 14 1 -1 +BITMAP +07FC +F040 +93F8 +9040 +9040 +9FFE +9110 +9110 +9FFE +9110 +F210 +0210 +0410 +0810 +ENDCHAR +STARTCHAR uni54E3 +ENCODING 21731 +BBX 14 14 1 -1 +BITMAP +07F8 +F000 +9000 +93F0 +9210 +9210 +9210 +93F0 +9000 +F210 +9110 +0120 +0000 +0FFC +ENDCHAR +STARTCHAR uni54E4 +ENCODING 21732 +BBX 14 16 1 -2 +BITMAP +0220 +0210 +F200 +9FFC +9290 +92A0 +92C8 +9290 +92A0 +94C8 +F490 +94A4 +08C4 +0884 +137C +2000 +ENDCHAR +STARTCHAR uni54E5 +ENCODING 21733 +BBX 15 14 1 -1 +BITMAP +FFFE +0010 +1F10 +1110 +1110 +1F70 +0000 +FFFE +0010 +1F10 +1110 +1110 +1F10 +0070 +ENDCHAR +STARTCHAR uni54E6 +ENCODING 21734 +BBX 15 15 1 -1 +BITMAP +01A8 +0E28 +F224 +9220 +9FFE +9220 +9224 +9224 +93A4 +9E28 +9218 +F210 +022A +024A +0E84 +ENDCHAR +STARTCHAR uni54E7 +ENCODING 21735 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F3F8 +9040 +9040 +9040 +97FC +9090 +9090 +9298 +F294 +9494 +0110 +0110 +0250 +0420 +ENDCHAR +STARTCHAR uni54E8 +ENCODING 21736 +BBX 15 15 1 -1 +BITMAP +0040 +0148 +0244 +F442 +93FC +9204 +9204 +93FC +9204 +9204 +93FC +F204 +0204 +0204 +021C +ENDCHAR +STARTCHAR uni54E9 +ENCODING 21737 +BBX 15 14 1 -1 +BITMAP +07FC +0444 +F444 +97FC +9444 +9444 +97FC +9040 +9040 +97FC +F040 +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni54EA +ENCODING 21738 +BBX 14 15 1 -2 +BITMAP +1FBC +E4A4 +A4A4 +A4A8 +AFA8 +A4B0 +A4A8 +A4A4 +BFA4 +E4A4 +A4B4 +04A8 +08A0 +0AA0 +1120 +ENDCHAR +STARTCHAR uni54EB +ENCODING 21739 +BBX 14 15 1 -2 +BITMAP +03F8 +F208 +9208 +9208 +93F8 +9040 +9040 +9240 +9278 +F240 +9240 +0540 +04C0 +087C +1000 +ENDCHAR +STARTCHAR uni54EC +ENCODING 21740 +BBX 15 15 1 -1 +BITMAP +0200 +03FE +E204 +A404 +A4E4 +ACA4 +B4A4 +A4A4 +A4A4 +A4A4 +A4E4 +E404 +0404 +0404 +041C +ENDCHAR +STARTCHAR uni54ED +ENCODING 21741 +BBX 15 14 1 -1 +BITMAP +7EFC +4284 +4284 +4284 +4284 +7EFC +0110 +0108 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni54EE +ENCODING 21742 +BBX 15 15 1 -1 +BITMAP +0084 +0084 +F7F8 +9088 +9090 +9FFE +9040 +97F8 +9210 +9460 +9840 +F7FE +0040 +0040 +01C0 +ENDCHAR +STARTCHAR uni54EF +ENCODING 21743 +BBX 15 14 1 -1 +BITMAP +07F8 +F408 +97F8 +9408 +9408 +97F8 +9408 +9408 +97F8 +9120 +F120 +0222 +0422 +181E +ENDCHAR +STARTCHAR uni54F0 +ENCODING 21744 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9404 +9848 +9240 +93F8 +9240 +9440 +9040 +F7FC +9040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni54F1 +ENCODING 21745 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9040 +9040 +97FE +9402 +91F8 +9010 +9020 +97FE +F020 +0020 +0020 +00E0 +ENDCHAR +STARTCHAR uni54F2 +ENCODING 21746 +BBX 14 15 1 -1 +BITMAP +200C +21F0 +FD00 +21FC +2110 +3910 +E210 +2410 +6010 +0000 +3FF0 +2010 +2010 +2010 +3FF0 +ENDCHAR +STARTCHAR uni54F3 +ENCODING 21747 +BBX 15 15 1 -1 +BITMAP +020C +0270 +F240 +9240 +9FC0 +927E +9248 +9248 +93C8 +9E48 +9248 +F288 +0288 +0308 +0608 +ENDCHAR +STARTCHAR uni54F4 +ENCODING 21748 +BBX 14 16 1 -2 +BITMAP +0100 +0080 +F7F0 +9410 +9410 +97F0 +9410 +9410 +97F0 +9480 +F488 +9450 +0420 +0510 +060C +0400 +ENDCHAR +STARTCHAR uni54F5 +ENCODING 21749 +BBX 14 16 1 -2 +BITMAP +0004 +07C4 +F444 +9454 +9454 +97D4 +9214 +9214 +97D4 +9254 +F254 +9254 +0444 +0444 +0954 +1088 +ENDCHAR +STARTCHAR uni54F6 +ENCODING 21750 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F110 +971C +9110 +9110 +9000 +93F8 +9040 +9040 +F7FC +9040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni54F7 +ENCODING 21751 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F780 +9088 +9448 +9250 +9200 +9020 +97FC +9020 +F220 +9120 +0120 +0020 +00A0 +0040 +ENDCHAR +STARTCHAR uni54F8 +ENCODING 21752 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F780 +9088 +9448 +9250 +9200 +9080 +97FC +9110 +F210 +9720 +00C0 +00A0 +0310 +0C08 +ENDCHAR +STARTCHAR uni54F9 +ENCODING 21753 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F780 +9008 +9488 +9250 +9000 +97F0 +9020 +9040 +9FFC +F040 +9040 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni54FA +ENCODING 21754 +BBX 15 15 1 -1 +BITMAP +0048 +0044 +FFFE +9040 +9040 +97FC +9444 +9444 +97FC +9444 +9444 +F7FC +0444 +0444 +044C +ENDCHAR +STARTCHAR uni54FB +ENCODING 21755 +BBX 14 15 1 -2 +BITMAP +03F8 +F208 +93F8 +9208 +93F8 +9000 +9000 +93F8 +9040 +F040 +97FC +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni54FC +ENCODING 21756 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9000 +93F0 +9210 +9210 +93F0 +9000 +97F8 +F010 +9060 +0040 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni54FD +ENCODING 21757 +BBX 15 14 1 -1 +BITMAP +0FFE +F040 +97FC +9444 +9444 +97FC +9444 +9444 +97FC +F440 +0280 +0180 +0270 +0C0E +ENDCHAR +STARTCHAR uni54FE +ENCODING 21758 +BBX 14 16 1 -2 +BITMAP +0208 +0108 +F110 +9020 +93F8 +9208 +9208 +9208 +93F8 +90A0 +F0A0 +9120 +0124 +0224 +041C +0800 +ENDCHAR +STARTCHAR uni54FF +ENCODING 21759 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +7E7C +1244 +2244 +2244 +467C +0000 +FFFE +0008 +1F88 +1088 +1088 +1F88 +0038 +ENDCHAR +STARTCHAR uni5500 +ENCODING 21760 +BBX 15 15 1 -1 +BITMAP +0038 +07C0 +F040 +9040 +9FFE +9150 +9248 +9C46 +9000 +97F0 +9090 +F09C +0104 +0204 +0C1C +ENDCHAR +STARTCHAR uni5501 +ENCODING 21761 +BBX 15 14 1 -1 +BITMAP +03F8 +F000 +9FFE +9000 +93F8 +9000 +93F8 +9000 +9000 +93F8 +F208 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni5502 +ENCODING 21762 +BBX 15 16 0 -2 +BITMAP +0110 +0108 +F204 +9444 +9040 +90A0 +9110 +9208 +9C06 +93F8 +F208 +9208 +0208 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni5503 +ENCODING 21763 +BBX 13 16 1 -2 +BITMAP +0200 +0200 +F7F0 +9410 +9820 +97F8 +9488 +9488 +97F8 +9488 +F488 +97F8 +0488 +0888 +08A8 +1010 +ENDCHAR +STARTCHAR uni5504 +ENCODING 21764 +BBX 15 14 1 -1 +BITMAP +03F8 +F208 +9208 +93F8 +9208 +9208 +93F8 +9208 +9208 +F208 +03F8 +0080 +0318 +1C06 +ENDCHAR +STARTCHAR uni5505 +ENCODING 21765 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F140 +9220 +9510 +988C +93E0 +9020 +9040 +9080 +F7F0 +9410 +0410 +0410 +07F0 +0410 +ENDCHAR +STARTCHAR uni5506 +ENCODING 21766 +BBX 15 15 1 -1 +BITMAP +0080 +0090 +0118 +F7E4 +9120 +9120 +923E +9D00 +91F8 +9108 +9210 +FD20 +00C0 +01B0 +0E0E +ENDCHAR +STARTCHAR uni5507 +ENCODING 21767 +BBX 14 14 1 -1 +BITMAP +7FFC +4000 +5FF8 +4000 +7FFC +4888 +4850 +8F30 +380C +0000 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni5508 +ENCODING 21768 +BBX 14 14 1 -1 +BITMAP +03F0 +F210 +9210 +93F0 +9000 +97F8 +9488 +9488 +9488 +F7F8 +9400 +0404 +0404 +03FC +ENDCHAR +STARTCHAR uni5509 +ENCODING 21769 +BBX 15 15 1 -1 +BITMAP +0100 +0110 +F108 +923C +9FC6 +9200 +9200 +97FC +9840 +9040 +9FFE +F0A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni550A +ENCODING 21770 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F040 +97FC +9040 +9040 +9248 +9248 +9248 +9554 +F040 +90A0 +00A0 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni550B +ENCODING 21771 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F0A0 +9110 +9208 +95F4 +9040 +9040 +97FC +9040 +F250 +9248 +0444 +0844 +0140 +0080 +ENDCHAR +STARTCHAR uni550C +ENCODING 21772 +BBX 14 16 1 -2 +BITMAP +0008 +001C +F770 +9110 +9110 +9250 +925C +9750 +9150 +9550 +F550 +927C +0200 +0500 +08FC +1000 +ENDCHAR +STARTCHAR uni550D +ENCODING 21773 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9404 +9808 +93F0 +9000 +9000 +97FC +9120 +F120 +9120 +0224 +0224 +041C +0800 +ENDCHAR +STARTCHAR uni550E +ENCODING 21774 +BBX 14 15 1 -1 +BITMAP +0084 +0304 +FE24 +9224 +9224 +9FA4 +9224 +9224 +9724 +96A4 +9AA4 +F224 +0204 +0204 +021C +ENDCHAR +STARTCHAR uni550F +ENCODING 21775 +BBX 15 15 1 -1 +BITMAP +0208 +0190 +F060 +919C +9E80 +9080 +9FFE +9140 +97FC +9C44 +9444 +F444 +044C +0040 +0040 +ENDCHAR +STARTCHAR uni5510 +ENCODING 21776 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +2080 +27F8 +2088 +3FFE +2088 +27F8 +2000 +27F8 +4408 +4408 +8408 +07F8 +ENDCHAR +STARTCHAR uni5511 +ENCODING 21777 +BBX 15 15 0 -1 +BITMAP +0040 +0040 +F248 +9248 +9248 +9554 +98E2 +9040 +9040 +97FC +F040 +9040 +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni5512 +ENCODING 21778 +BBX 15 15 0 -2 +BITMAP +0FFE +F0A0 +90A0 +97FC +94A4 +94A4 +94A4 +951C +9604 +F404 +97FC +0404 +0404 +07FC +0404 +ENDCHAR +STARTCHAR uni5513 +ENCODING 21779 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9248 +9248 +93F8 +9248 +9248 +93F8 +F040 +97FC +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5514 +ENCODING 21780 +BBX 15 14 1 -1 +BITMAP +07FC +F080 +9080 +97F8 +9108 +9108 +9108 +9FFE +9000 +93FC +F204 +0204 +0204 +03FC +ENDCHAR +STARTCHAR uni5515 +ENCODING 21781 +BBX 14 16 1 -2 +BITMAP +0040 +0080 +F3F8 +9208 +9208 +93F8 +9208 +9208 +93F8 +9040 +F040 +97FC +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5516 +ENCODING 21782 +BBX 15 14 1 -1 +BITMAP +0FFC +0120 +F120 +9120 +97FC +9524 +9524 +9524 +9524 +97FC +F120 +0120 +0120 +0FFE +ENDCHAR +STARTCHAR uni5517 +ENCODING 21783 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F3F8 +9040 +9040 +9040 +97FC +9040 +9040 +9240 +F278 +9240 +0540 +04C0 +087C +1000 +ENDCHAR +STARTCHAR uni5518 +ENCODING 21784 +BBX 15 15 0 -2 +BITMAP +FEFC +1044 +2044 +3E28 +6210 +A228 +3E44 +2282 +0000 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni5519 +ENCODING 21785 +BBX 14 16 1 -2 +BITMAP +0020 +1120 +EA20 +A424 +AAA4 +B2A8 +A2B0 +A320 +A620 +AA50 +F250 +A250 +0290 +0288 +1508 +0A04 +ENDCHAR +STARTCHAR uni551A +ENCODING 21786 +BBX 14 15 1 -2 +BITMAP +03F8 +F008 +91F8 +9008 +93F8 +9000 +97FC +9404 +93F0 +F110 +9110 +00A0 +0040 +01B0 +060C +ENDCHAR +STARTCHAR uni551B +ENCODING 21787 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9040 +97FE +9080 +90F8 +9108 +F310 +94A0 +0040 +00A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni551C +ENCODING 21788 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0540 +0920 +3118 +C106 +0000 +3E44 +2258 +2260 +2242 +3E42 +223E +ENDCHAR +STARTCHAR uni551D +ENCODING 21789 +BBX 14 15 1 -2 +BITMAP +03F8 +F040 +9040 +97FC +9000 +9000 +93F8 +9208 +9248 +F248 +9248 +02A8 +0110 +0208 +0C04 +ENDCHAR +STARTCHAR uni551E +ENCODING 21790 +BBX 14 16 1 -2 +BITMAP +0208 +0248 +F228 +9228 +9F88 +9248 +9228 +92A8 +930C +9E78 +F208 +9208 +0208 +0208 +0A08 +0408 +ENDCHAR +STARTCHAR uni551F +ENCODING 21791 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +3FF8 +0100 +0100 +FFFE +0400 +0820 +1FF0 +0010 +3E44 +2258 +2260 +2242 +3E42 +223E +ENDCHAR +STARTCHAR uni5520 +ENCODING 21792 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9000 +97FC +9404 +9888 +9080 +97F8 +F088 +9108 +0108 +0208 +0450 +0820 +ENDCHAR +STARTCHAR uni5521 +ENCODING 21793 +BBX 14 15 1 -2 +BITMAP +07FC +F0A0 +90A0 +90A0 +97FC +94A4 +94A4 +94A4 +9554 +F54C +9604 +0404 +0404 +0414 +0408 +ENDCHAR +STARTCHAR uni5522 +ENCODING 21794 +BBX 14 16 1 -2 +BITMAP +0040 +0248 +F148 +9150 +9040 +93F8 +9208 +9248 +9248 +9248 +F248 +9248 +00A0 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni5523 +ENCODING 21795 +BBX 14 16 1 -2 +BITMAP +0040 +0080 +F3F8 +9208 +9208 +93F8 +9208 +9208 +93F8 +9080 +F080 +90FC +0F80 +0084 +0084 +007C +ENDCHAR +STARTCHAR uni5524 +ENCODING 21796 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +F1F0 +9210 +9420 +9BF8 +9248 +9248 +9248 +9248 +F7FE +90A0 +00A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni5525 +ENCODING 21797 +BBX 14 16 1 -2 +BITMAP +0020 +0820 +F450 +9450 +9088 +9324 +9210 +9210 +95FC +9C04 +F408 +9488 +0450 +0420 +0410 +0010 +ENDCHAR +STARTCHAR uni5526 +ENCODING 21798 +BBX 14 16 1 -2 +BITMAP +0020 +0420 +F220 +9220 +98A8 +94A4 +94A4 +9120 +9020 +9228 +FC08 +9410 +0410 +0420 +0440 +0180 +ENDCHAR +STARTCHAR uni5527 +ENCODING 21799 +BBX 13 15 1 -2 +BITMAP +0F78 +E948 +A948 +A948 +AF48 +A948 +A948 +A948 +AF48 +E868 +AA50 +0940 +0AC0 +0C40 +0040 +ENDCHAR +STARTCHAR uni5528 +ENCODING 21800 +BBX 14 15 1 -2 +BITMAP +0F78 +E948 +AA48 +AA48 +AC78 +AA48 +A948 +A948 +A978 +ED48 +AA48 +0848 +0848 +08FC +0800 +ENDCHAR +STARTCHAR uni5529 +ENCODING 21801 +BBX 14 16 1 -2 +BITMAP +0038 +03C0 +F040 +9040 +97FC +9150 +9248 +9484 +9080 +97FC +F110 +9210 +01A0 +0060 +0090 +0308 +ENDCHAR +STARTCHAR uni552A +ENCODING 21802 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9080 +97FC +9110 +9248 +9446 +F1F0 +9040 +07FC +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni552B +ENCODING 21803 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F0A0 +9110 +9208 +97FC +9842 +9040 +97FC +9040 +9444 +F244 +0248 +0050 +0FFE +ENDCHAR +STARTCHAR uni552C +ENCODING 21804 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F0F8 +9080 +97F8 +9488 +94E0 +9780 +9488 +9478 +F400 +95E0 +0920 +0924 +1224 +241C +ENDCHAR +STARTCHAR uni552D +ENCODING 21805 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9110 +91F0 +9110 +9110 +91F0 +9110 +F110 +97FC +0000 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni552E +ENCODING 21806 +BBX 15 15 1 -1 +BITMAP +0820 +1040 +3FFC +6080 +BFF8 +2080 +3FF8 +2080 +3FFE +0000 +3FF8 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni552F +ENCODING 21807 +BBX 15 15 1 -1 +BITMAP +0108 +0108 +F110 +93FE +9220 +9620 +9BFC +9220 +9220 +9220 +93FC +F220 +0220 +0220 +03FE +ENDCHAR +STARTCHAR uni5530 +ENCODING 21808 +BBX 14 16 1 -2 +BITMAP +0004 +0FC4 +E844 +A854 +AFD4 +A914 +A914 +A914 +AFD4 +AD54 +ED54 +B554 +1544 +25C4 +0114 +0108 +ENDCHAR +STARTCHAR uni5531 +ENCODING 21809 +BBX 15 14 1 -1 +BITMAP +03FC +F204 +93FC +9204 +9204 +93FC +9000 +97FE +9402 +F402 +07FE +0402 +0402 +07FE +ENDCHAR +STARTCHAR uni5532 +ENCODING 21810 +BBX 14 15 1 -2 +BITMAP +0080 +F738 +9408 +9408 +9738 +9408 +9408 +97F8 +9120 +F120 +9120 +0120 +0224 +0424 +081C +ENDCHAR +STARTCHAR uni5533 +ENCODING 21811 +BBX 15 14 1 -1 +BITMAP +0FFE +0000 +F7FC +9404 +9404 +97FC +9440 +9440 +97FE +9440 +F8A0 +1110 +0208 +0C06 +ENDCHAR +STARTCHAR uni5534 +ENCODING 21812 +BBX 15 16 0 -2 +BITMAP +0208 +0108 +F110 +97FC +9040 +9040 +93F8 +9040 +9080 +9FFE +F120 +9120 +0220 +0222 +0422 +081E +ENDCHAR +STARTCHAR uni5535 +ENCODING 21813 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +0FFE +F110 +9248 +97FC +9A4A +9248 +93F8 +9248 +9248 +F3F8 +0042 +0042 +003E +ENDCHAR +STARTCHAR uni5536 +ENCODING 21814 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F110 +97FC +9110 +9110 +9FFC +9000 +93F8 +9208 +F208 +93F8 +0208 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni5537 +ENCODING 21815 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9100 +9208 +97FC +9004 +93F8 +9208 +93F8 +F208 +93F8 +0208 +0208 +0228 +0210 +ENDCHAR +STARTCHAR uni5538 +ENCODING 21816 +BBX 15 15 1 -1 +BITMAP +0040 +00A0 +0110 +F208 +9DF6 +9000 +97FC +9008 +9010 +9040 +9020 +F524 +0502 +090A +08F8 +ENDCHAR +STARTCHAR uni5539 +ENCODING 21817 +BBX 15 15 1 -1 +BITMAP +0210 +0210 +F228 +9FA8 +9444 +9442 +9780 +9490 +9488 +9484 +9480 +F4A0 +0490 +0888 +1384 +ENDCHAR +STARTCHAR uni553A +ENCODING 21818 +BBX 14 16 1 -2 +BITMAP +0120 +0120 +F120 +97F8 +9528 +9528 +9528 +97F8 +9528 +9528 +9528 +FFFC +9000 +0120 +0210 +0408 +ENDCHAR +STARTCHAR uni553B +ENCODING 21819 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +9FF8 +9080 +9490 +9490 +9490 +9AA8 +91C0 +F2A0 +92A0 +0490 +0888 +1084 +0080 +ENDCHAR +STARTCHAR uni553C +ENCODING 21820 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9208 +9110 +9FFE +9080 +9080 +9FFE +9108 +9208 +F710 +00E0 +0198 +0E06 +ENDCHAR +STARTCHAR uni553D +ENCODING 21821 +BBX 15 16 0 -2 +BITMAP +0100 +0106 +F138 +9120 +97A0 +9120 +913E +9324 +93A4 +9564 +F524 +9924 +0124 +0124 +0124 +0144 +ENDCHAR +STARTCHAR uni553E +ENCODING 21822 +BBX 15 15 1 -1 +BITMAP +0038 +07C0 +F040 +9040 +97FC +9248 +9248 +9FFE +9248 +9248 +9248 +F7FC +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni553F +ENCODING 21823 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +F3FC +9494 +9894 +9124 +9244 +9484 +9128 +9210 +F040 +9124 +052A +050A +08F8 +ENDCHAR +STARTCHAR uni5540 +ENCODING 21824 +BBX 15 14 1 -1 +BITMAP +07FE +F420 +9420 +95FC +9420 +9420 +97FE +9400 +9420 +F420 +09FC +0820 +1020 +03FE +ENDCHAR +STARTCHAR uni5541 +ENCODING 21825 +BBX 14 14 1 -1 +BITMAP +07FC +F404 +9444 +95F4 +9444 +95F4 +9444 +9404 +95F4 +9514 +F514 +09F4 +0804 +101C +ENDCHAR +STARTCHAR uni5542 +ENCODING 21826 +BBX 15 16 0 -2 +BITMAP +00E8 +0F08 +E228 +A928 +A548 +A008 +A7C8 +A088 +A108 +A108 +E1E8 +AF08 +010A +010A +050A +0206 +ENDCHAR +STARTCHAR uni5543 +ENCODING 21827 +BBX 14 16 1 -2 +BITMAP +0040 +0240 +F278 +9240 +9240 +9FFC +9000 +97F8 +9408 +97F8 +F408 +97F8 +0408 +0408 +0428 +0410 +ENDCHAR +STARTCHAR uni5544 +ENCODING 21828 +BBX 15 14 1 -1 +BITMAP +0FFE +0080 +F080 +9144 +9668 +90B0 +9120 +9620 +9070 +90B0 +F128 +0624 +1822 +01C0 +ENDCHAR +STARTCHAR uni5545 +ENCODING 21829 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +007C +F040 +93F8 +9208 +93F8 +9208 +9208 +93F8 +F040 +0FFE +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5546 +ENCODING 21830 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +1040 +0880 +FFF8 +8888 +8888 +90F8 +E008 +9F88 +9088 +9088 +9F88 +8038 +ENDCHAR +STARTCHAR uni5547 +ENCODING 21831 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0820 +0440 +7FFC +4004 +4104 +5FF4 +4104 +4FE4 +4824 +4824 +4FE4 +401C +ENDCHAR +STARTCHAR uni5548 +ENCODING 21832 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F3F8 +9040 +9040 +97FC +9110 +90A0 +93F8 +9040 +F040 +97FC +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5549 +ENCODING 21833 +BBX 14 16 1 -2 +BITMAP +0220 +0220 +E220 +A220 +AF78 +A220 +A220 +A670 +A770 +AAA8 +EAA8 +B324 +0220 +0220 +0220 +0220 +ENDCHAR +STARTCHAR uni554A +ENCODING 21834 +BBX 15 14 1 -1 +BITMAP +0F7E +E904 +A904 +AA74 +AA54 +AA54 +A954 +A954 +A954 +A974 +EA04 +0804 +0804 +080C +ENDCHAR +STARTCHAR uni554B +ENCODING 21835 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F780 +9088 +9448 +9250 +9200 +9040 +97FC +90E0 +F150 +9150 +0248 +0444 +0840 +0040 +ENDCHAR +STARTCHAR uni554C +ENCODING 21836 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +07FC +F404 +9524 +9120 +9222 +9C1E +9000 +9000 +93FC +F040 +0040 +0040 +07FE +ENDCHAR +STARTCHAR uni554D +ENCODING 21837 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9000 +93F8 +9208 +93F8 +9000 +93F8 +9010 +F020 +97FC +0040 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni554E +ENCODING 21838 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +2020 +3E20 +49FC +8844 +0844 +09FE +FE00 +0800 +08FC +0884 +0884 +0884 +08FC +0884 +ENDCHAR +STARTCHAR uni554F +ENCODING 21839 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8004 +8FC4 +8844 +8844 +8844 +8FC4 +8004 +801C +ENDCHAR +STARTCHAR uni5550 +ENCODING 21840 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9000 +9208 +9208 +9514 +98A2 +9000 +9040 +F7FC +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5551 +ENCODING 21841 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9048 +97FC +9048 +93F8 +9040 +F240 +927C +0240 +0540 +04FC +0800 +ENDCHAR +STARTCHAR uni5552 +ENCODING 21842 +BBX 14 15 1 -2 +BITMAP +07FC +F404 +9404 +97FC +9420 +9524 +9524 +9524 +95FC +F420 +9524 +0524 +0924 +09FC +1004 +ENDCHAR +STARTCHAR uni5553 +ENCODING 21843 +BBX 15 15 1 -1 +BITMAP +0040 +FE40 +00FE +7E88 +4388 +4250 +7E20 +4050 +4188 +8006 +BFF0 +2010 +2010 +2010 +3FF0 +ENDCHAR +STARTCHAR uni5554 +ENCODING 21844 +BBX 15 16 0 -2 +BITMAP +1048 +0844 +3E7E +23C0 +2224 +3E28 +2212 +206A +4186 +8002 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni5555 +ENCODING 21845 +BBX 13 16 1 -2 +BITMAP +0200 +0200 +F3F8 +9408 +9A08 +93C8 +9508 +9108 +9FE8 +9108 +F548 +9548 +07C8 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni5556 +ENCODING 21846 +BBX 15 15 1 -1 +BITMAP +0040 +0244 +0244 +F448 +90A0 +9110 +960E +9040 +9244 +9244 +9448 +F4A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni5557 +ENCODING 21847 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +00FC +F108 +9610 +9000 +90C0 +931E +9202 +9202 +93DE +F202 +0202 +0202 +03FE +ENDCHAR +STARTCHAR uni5558 +ENCODING 21848 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +F7FE +9402 +9A04 +9200 +93BC +94A4 +94A4 +96A4 +F934 +9128 +0222 +0222 +0422 +081E +ENDCHAR +STARTCHAR uni5559 +ENCODING 21849 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +2444 +2758 +2460 +2442 +2442 +2F42 +F03E +0000 +3E7C +2244 +2244 +2244 +3E7C +2244 +ENDCHAR +STARTCHAR uni555A +ENCODING 21850 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1010 +1FF0 +0100 +FFFE +0200 +3FF8 +2008 +27C8 +2448 +27C8 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni555B +ENCODING 21851 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9048 +97FC +9048 +93F8 +9080 +F7FC +9108 +0390 +0060 +0198 +0604 +ENDCHAR +STARTCHAR uni555C +ENCODING 21852 +BBX 15 14 1 -1 +BITMAP +07BE +0082 +F294 +9108 +9294 +9422 +9000 +97BE +9082 +9492 +F30C +0104 +028A +0CB2 +ENDCHAR +STARTCHAR uni555D +ENCODING 21853 +BBX 15 15 1 -1 +BITMAP +0040 +0180 +0700 +F11E +9112 +9FF2 +9112 +9112 +9392 +9392 +9552 +955E +F930 +010C +0100 +ENDCHAR +STARTCHAR uni555E +ENCODING 21854 +BBX 15 14 1 -1 +BITMAP +0FFE +0120 +F120 +9120 +973C +9404 +9404 +9404 +973C +9120 +F120 +0120 +0120 +0FFE +ENDCHAR +STARTCHAR uni555F +ENCODING 21855 +BBX 15 16 0 -2 +BITMAP +0820 +0420 +3F20 +213E +2144 +2144 +3F44 +20A4 +2028 +3F28 +3110 +5110 +5128 +9F28 +1144 +0082 +ENDCHAR +STARTCHAR uni5560 +ENCODING 21856 +BBX 15 15 1 -1 +BITMAP +060C +38F0 +2080 +3EFE +2490 +4490 +8510 +0410 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni5561 +ENCODING 21857 +BBX 15 15 1 -1 +BITMAP +0090 +0090 +F090 +979E +9090 +9090 +979E +9090 +9090 +9190 +969E +F110 +0110 +0210 +0410 +ENDCHAR +STARTCHAR uni5562 +ENCODING 21858 +BBX 14 15 1 -2 +BITMAP +07FC +F040 +9040 +97FC +9444 +9444 +9664 +9554 +9554 +F6EC +94CC +0444 +0444 +0454 +0408 +ENDCHAR +STARTCHAR uni5563 +ENCODING 21859 +BBX 15 15 1 -1 +BITMAP +0200 +021E +F7F2 +9912 +9112 +9FF2 +9112 +9112 +95D2 +9512 +9512 +F576 +0590 +0E10 +0010 +ENDCHAR +STARTCHAR uni5564 +ENCODING 21860 +BBX 15 15 1 -1 +BITMAP +0040 +0080 +F7FC +9444 +9444 +97FC +9444 +9484 +97FC +9120 +F220 +0FFE +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni5565 +ENCODING 21861 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F140 +9220 +9410 +9BEC +9080 +9080 +9FF8 +9080 +F080 +97F0 +0410 +0410 +07F0 +0410 +ENDCHAR +STARTCHAR uni5566 +ENCODING 21862 +BBX 14 16 1 -2 +BITMAP +0240 +0220 +E220 +A2FC +AF00 +A208 +A288 +A388 +A248 +A648 +EA50 +A250 +0210 +0220 +0AFC +0400 +ENDCHAR +STARTCHAR uni5567 +ENCODING 21863 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9040 +97FC +9000 +93F8 +9208 +F248 +9248 +0248 +00A0 +0110 +0608 +ENDCHAR +STARTCHAR uni5568 +ENCODING 21864 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9040 +97FC +9000 +93F8 +9208 +F3F8 +9208 +03F8 +0208 +0228 +0210 +ENDCHAR +STARTCHAR uni5569 +ENCODING 21865 +BBX 15 16 0 -2 +BITMAP +0110 +0110 +F7D0 +9110 +9110 +9118 +9FF4 +9012 +9112 +9110 +F7D0 +9110 +0110 +01D0 +0E10 +0410 +ENDCHAR +STARTCHAR uni556A +ENCODING 21866 +BBX 13 16 1 -2 +BITMAP +0420 +0420 +E440 +A4F8 +BF88 +A488 +A488 +A588 +A6F8 +BC88 +E488 +A488 +0488 +0488 +14F8 +0888 +ENDCHAR +STARTCHAR uni556B +ENCODING 21867 +BBX 14 16 1 -2 +BITMAP +0080 +0088 +F7E8 +9090 +90A0 +9FFC +9080 +9100 +93F0 +9610 +FA10 +93F0 +0210 +0210 +03F0 +0210 +ENDCHAR +STARTCHAR uni556C +ENCODING 21868 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +1110 +0920 +FFFE +0000 +3FF8 +2008 +27C8 +2448 +27C8 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni556D +ENCODING 21869 +BBX 14 16 1 -2 +BITMAP +0420 +0420 +E420 +BF78 +A420 +AA20 +AAFC +AF20 +A240 +A278 +E388 +BE10 +0A50 +0220 +0210 +0208 +ENDCHAR +STARTCHAR uni556E +ENCODING 21870 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F27C +9240 +9240 +9240 +9FFE +9000 +9444 +9444 +F4A4 +9494 +0514 +0404 +07FC +0004 +ENDCHAR +STARTCHAR uni556F +ENCODING 21871 +BBX 14 15 1 -2 +BITMAP +07FC +F404 +9404 +97FC +9444 +9444 +95F4 +9444 +9464 +F454 +97FC +0404 +0404 +07FC +0404 +ENDCHAR +STARTCHAR uni5570 +ENCODING 21872 +BBX 14 15 1 -2 +BITMAP +07FC +F4A4 +94A4 +94A4 +97FC +9040 +9080 +91F8 +9208 +F510 +90A0 +0040 +0080 +0300 +0C00 +ENDCHAR +STARTCHAR uni5571 +ENCODING 21873 +BBX 14 16 1 -2 +BITMAP +0040 +0248 +F248 +9248 +93F8 +9000 +9000 +97FC +9080 +9100 +F1F8 +9308 +0508 +0908 +01F8 +0108 +ENDCHAR +STARTCHAR uni5572 +ENCODING 21874 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F210 +97BC +94A4 +94C4 +9484 +94A4 +9794 +9494 +F484 +9484 +0484 +0784 +04A8 +0010 +ENDCHAR +STARTCHAR uni5573 +ENCODING 21875 +BBX 15 16 0 -2 +BITMAP +0040 +0248 +F150 +97FC +9080 +9100 +9FFE +9210 +9408 +9BF4 +F212 +9210 +0250 +0224 +0204 +01FC +ENDCHAR +STARTCHAR uni5574 +ENCODING 21876 +BBX 14 16 1 -2 +BITMAP +0208 +0110 +F0A0 +93F8 +9248 +9248 +93F8 +9248 +9248 +93F8 +F040 +9040 +07FC +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5575 +ENCODING 21877 +BBX 14 16 1 -2 +BITMAP +0020 +0820 +E420 +A5FC +B124 +A928 +A920 +A5F8 +A548 +A948 +F950 +A950 +0920 +0A50 +0A88 +0504 +ENDCHAR +STARTCHAR uni5576 +ENCODING 21878 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9404 +9808 +9000 +97FC +9040 +9040 +9240 +F278 +9240 +0540 +04C0 +087C +1000 +ENDCHAR +STARTCHAR uni5577 +ENCODING 21879 +BBX 14 16 1 -2 +BITMAP +0200 +013C +F7A4 +94A4 +94A8 +97A8 +94B0 +94A8 +97A4 +9424 +F524 +94B4 +05A8 +06A0 +0420 +0020 +ENDCHAR +STARTCHAR uni5578 +ENCODING 21880 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F7F0 +9090 +9FFC +9090 +97F0 +9080 +9490 +9490 +F5D0 +96B0 +0490 +0490 +0890 +1090 +ENDCHAR +STARTCHAR uni5579 +ENCODING 21881 +BBX 14 15 1 -2 +BITMAP +07F8 +F408 +9408 +97F8 +9440 +9440 +97FC +9440 +9440 +F5F8 +9508 +0508 +0908 +09F8 +1108 +ENDCHAR +STARTCHAR uni557A +ENCODING 21882 +BBX 14 15 1 -2 +BITMAP +03F8 +F208 +93F8 +9208 +93F8 +9000 +97FC +9200 +93FC +F494 +9924 +0244 +0484 +0128 +0210 +ENDCHAR +STARTCHAR uni557B +ENCODING 21883 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +7FF8 +0840 +FFFC +8204 +BFF4 +2210 +2230 +0200 +3FF0 +2010 +2010 +2010 +3FF0 +ENDCHAR +STARTCHAR uni557C +ENCODING 21884 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +0FFE +F208 +9108 +9110 +9FFE +9842 +9842 +97FC +9444 +F444 +044C +0040 +0040 +ENDCHAR +STARTCHAR uni557D +ENCODING 21885 +BBX 15 15 1 -1 +BITMAP +0040 +00A0 +F318 +9DF6 +9000 +93F8 +9208 +93F8 +9110 +9110 +9FFE +F110 +0110 +0210 +0410 +ENDCHAR +STARTCHAR uni557E +ENCODING 21886 +BBX 15 15 1 -1 +BITMAP +0190 +0E12 +0252 +F252 +9FD4 +9254 +9210 +9710 +96A8 +9A28 +9A28 +F228 +0244 +0244 +0282 +ENDCHAR +STARTCHAR uni557F +ENCODING 21887 +BBX 14 15 1 -1 +BITMAP +0110 +0110 +F7FC +9110 +91F0 +9110 +91F0 +9110 +9110 +97FC +F200 +9290 +0308 +0200 +03FC +ENDCHAR +STARTCHAR uni5580 +ENCODING 21888 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +07FC +F484 +95FC +9210 +9D20 +90E0 +9318 +9C06 +93F8 +F208 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni5581 +ENCODING 21889 +BBX 15 14 1 -1 +BITMAP +03FC +F244 +9244 +93FC +9244 +9244 +93FC +9040 +97FE +9442 +F452 +0472 +05CA +0406 +ENDCHAR +STARTCHAR uni5582 +ENCODING 21890 +BBX 15 14 1 -1 +BITMAP +03F8 +F248 +93F8 +9248 +9248 +93F8 +9000 +9FFE +9244 +9244 +F228 +0210 +0388 +0E06 +ENDCHAR +STARTCHAR uni5583 +ENCODING 21891 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +0FFE +F040 +9040 +97FC +9514 +94A4 +95F4 +9444 +9444 +F5F4 +0444 +0444 +044C +ENDCHAR +STARTCHAR uni5584 +ENCODING 21892 +BBX 15 15 1 -1 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +7FFC +1110 +0920 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni5585 +ENCODING 21893 +BBX 14 14 1 -1 +BITMAP +03F8 +F208 +93F8 +9208 +93F8 +9208 +9080 +9040 +97FC +F000 +9208 +0110 +0000 +0FFC +ENDCHAR +STARTCHAR uni5586 +ENCODING 21894 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +1010 +FEFE +1010 +1010 +1010 +7C7C +0000 +7C7C +4444 +4444 +4444 +4444 +7C7C +ENDCHAR +STARTCHAR uni5587 +ENCODING 21895 +BBX 14 15 1 -1 +BITMAP +0204 +0204 +1FE4 +E224 +AFA4 +AAA4 +AAA4 +AAA4 +AFA4 +A624 +A724 +EA84 +1244 +2204 +021C +ENDCHAR +STARTCHAR uni5588 +ENCODING 21896 +BBX 15 15 1 -1 +BITMAP +0420 +0426 +F7B8 +9420 +9420 +9422 +971E +9C40 +9080 +97FC +9404 +F7FC +0404 +0404 +07FC +ENDCHAR +STARTCHAR uni5589 +ENCODING 21897 +BBX 15 15 1 -1 +BITMAP +0400 +05F8 +E408 +A408 +ABFE +A880 +B880 +A9FC +AA20 +A820 +AFFE +E850 +0848 +0884 +0B02 +ENDCHAR +STARTCHAR uni558A +ENCODING 21898 +BBX 15 15 1 -1 +BITMAP +0028 +0024 +E020 +AFFE +A820 +ABA4 +A824 +ABA4 +AAA8 +AA98 +AA90 +EB90 +102A +104A +2184 +ENDCHAR +STARTCHAR uni558B +ENCODING 21899 +BBX 15 15 1 -1 +BITMAP +0248 +0248 +0FFE +F248 +9248 +9278 +9200 +93FC +9040 +9FFE +9150 +F248 +0444 +0842 +0040 +ENDCHAR +STARTCHAR uni558C +ENCODING 21900 +BBX 14 15 0 -2 +BITMAP +7EFC +4284 +4284 +7EFC +0000 +1008 +1108 +1108 +5548 +5328 +9108 +2108 +2108 +4108 +8108 +ENDCHAR +STARTCHAR uni558D +ENCODING 21901 +BBX 14 16 1 -2 +BITMAP +0120 +0124 +F5A8 +9530 +9524 +95A4 +9E1C +9040 +9040 +97FC +F0E0 +9150 +0248 +0C44 +0040 +0040 +ENDCHAR +STARTCHAR uni558E +ENCODING 21902 +BBX 15 14 1 -1 +BITMAP +03FC +F204 +927C +9244 +9244 +97FE +9402 +94F2 +9492 +F492 +0492 +04F2 +0402 +040E +ENDCHAR +STARTCHAR uni558F +ENCODING 21903 +BBX 15 16 0 -2 +BITMAP +0108 +0108 +F7FE +9108 +9148 +9040 +97FE +9080 +9100 +93FC +F504 +9904 +0104 +0104 +01FC +0104 +ENDCHAR +STARTCHAR uni5590 +ENCODING 21904 +BBX 14 16 1 -2 +BITMAP +0200 +023C +EFE4 +A224 +A428 +A7A8 +A4B0 +ACA8 +B7A4 +A4A4 +E4A4 +A7B4 +04A8 +04A0 +04A0 +05A0 +ENDCHAR +STARTCHAR uni5591 +ENCODING 21905 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9208 +9108 +9110 +9FFE +9000 +93F8 +9208 +9208 +F3F8 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni5592 +ENCODING 21906 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F3D8 +9254 +9450 +9A90 +9110 +92FC +9C00 +93F8 +F208 +9208 +03F8 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni5593 +ENCODING 21907 +BBX 14 15 1 -2 +BITMAP +07FC +F0A0 +90A0 +97FC +94A4 +94A4 +97FC +9000 +9080 +9FFC +F110 +9320 +00C0 +01B0 +0608 +ENDCHAR +STARTCHAR uni5594 +ENCODING 21908 +BBX 14 15 1 -2 +BITMAP +07F8 +F408 +9408 +97F8 +9400 +97F8 +9480 +9510 +97F8 +F448 +9440 +0BF8 +0840 +1040 +27FC +ENDCHAR +STARTCHAR uni5595 +ENCODING 21909 +BBX 14 15 1 -2 +BITMAP +0FFC +F080 +9100 +97F8 +9528 +9528 +95E8 +9528 +9528 +F5E8 +9528 +0528 +0528 +07F8 +0408 +ENDCHAR +STARTCHAR uni5596 +ENCODING 21910 +BBX 14 16 1 -2 +BITMAP +0210 +0210 +E210 +A210 +AF7C +A210 +A610 +A710 +AAFC +AA44 +F244 +A244 +0244 +0244 +027C +0244 +ENDCHAR +STARTCHAR uni5597 +ENCODING 21911 +BBX 14 15 1 -2 +BITMAP +07FC +F444 +9040 +97FC +9040 +93F8 +9248 +93F8 +9248 +F3F8 +9040 +07FC +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5598 +ENCODING 21912 +BBX 15 15 1 -1 +BITMAP +0040 +0444 +0444 +F7FC +9000 +9FFE +9040 +9080 +97FC +9524 +9524 +F524 +0524 +0524 +052C +ENDCHAR +STARTCHAR uni5599 +ENCODING 21913 +BBX 15 15 1 -1 +BITMAP +0100 +01F8 +0208 +F3F0 +9010 +9FFE +9140 +9664 +90A8 +9130 +9668 +F0A8 +0324 +0C22 +00C0 +ENDCHAR +STARTCHAR uni559A +ENCODING 21914 +BBX 15 15 1 -1 +BITMAP +0100 +01F0 +F220 +9420 +97FC +94A4 +94A4 +953C +9604 +9444 +9FFE +F0A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni559B +ENCODING 21915 +BBX 14 16 1 -2 +BITMAP +0078 +0F80 +F488 +9250 +9000 +97F8 +9100 +9100 +9FFC +9200 +F3F0 +9510 +04A0 +0840 +11B0 +060C +ENDCHAR +STARTCHAR uni559C +ENCODING 21916 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0100 +1FF0 +0000 +1FF0 +1010 +1FF0 +0820 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni559D +ENCODING 21917 +BBX 15 14 1 -1 +BITMAP +03F8 +0208 +F3F8 +9208 +9208 +93F8 +9100 +91FE +9202 +9E62 +F382 +0212 +01F2 +000C +ENDCHAR +STARTCHAR uni559E +ENCODING 21918 +BBX 15 14 1 -1 +BITMAP +07DE +0452 +F7D2 +9452 +9452 +97D2 +9412 +9412 +97D2 +9412 +F416 +07D0 +0410 +0410 +ENDCHAR +STARTCHAR uni559F +ENCODING 21919 +BBX 14 14 1 -1 +BITMAP +07FC +0444 +F7FC +9444 +97FC +9000 +93F8 +9208 +93F8 +9208 +F3F8 +0208 +0208 +0238 +ENDCHAR +STARTCHAR uni55A0 +ENCODING 21920 +BBX 14 15 1 -1 +BITMAP +0010 +0078 +F3C0 +9040 +97FC +9040 +93F8 +9248 +93F8 +9248 +F3F8 +9040 +03F8 +0040 +07FC +ENDCHAR +STARTCHAR uni55A1 +ENCODING 21921 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F3F8 +9108 +97FC +9000 +93F8 +9208 +93F8 +9040 +F7FC +9040 +0440 +07FC +0040 +0040 +ENDCHAR +STARTCHAR uni55A2 +ENCODING 21922 +BBX 14 16 1 -2 +BITMAP +0008 +003C +F7C0 +9040 +9040 +9FFC +9040 +9140 +965C +9444 +F444 +975C +0444 +0444 +07FC +0404 +ENDCHAR +STARTCHAR uni55A3 +ENCODING 21923 +BBX 14 16 0 -2 +BITMAP +0100 +0100 +79FC +4A04 +4C04 +49E4 +4924 +4924 +79E4 +4804 +0028 +0010 +2488 +2244 +4244 +8004 +ENDCHAR +STARTCHAR uni55A4 +ENCODING 21924 +BBX 14 15 1 -1 +BITMAP +0040 +0080 +F3F8 +9208 +93F8 +9208 +93F8 +9000 +97FC +9040 +F040 +93F8 +0040 +0040 +07FC +ENDCHAR +STARTCHAR uni55A5 +ENCODING 21925 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9490 +9490 +97FC +9490 +94F0 +9400 +95F8 +F488 +9490 +0450 +0820 +08D0 +130C +ENDCHAR +STARTCHAR uni55A6 +ENCODING 21926 +BBX 13 15 1 -2 +BITMAP +3FE0 +2020 +2020 +3FE0 +0000 +FAF8 +8A88 +8A88 +FAF8 +0200 +4210 +4210 +4210 +7FF0 +0010 +ENDCHAR +STARTCHAR uni55A7 +ENCODING 21927 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +07FE +F402 +95FA +9000 +91F8 +9108 +9108 +91F8 +F108 +0108 +01F8 +0000 +07FE +ENDCHAR +STARTCHAR uni55A8 +ENCODING 21928 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +07FC +F000 +93F8 +9208 +93F8 +9000 +97FC +9404 +9524 +F120 +0122 +0222 +0C1E +ENDCHAR +STARTCHAR uni55A9 +ENCODING 21929 +BBX 15 15 1 -1 +BITMAP +0040 +00A0 +0110 +F208 +9CE6 +9000 +9792 +9492 +9692 +95A4 +94A4 +F6A4 +0592 +0492 +0592 +ENDCHAR +STARTCHAR uni55AA +ENCODING 21930 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +7D7C +4544 +4544 +7D7C +0100 +FFFE +1084 +1088 +1050 +1E30 +700E +ENDCHAR +STARTCHAR uni55AB +ENCODING 21931 +BBX 15 15 1 -1 +BITMAP +0200 +027C +FF24 +9224 +9224 +9F24 +9244 +9244 +9384 +9C18 +9080 +FFFE +0120 +0618 +1806 +ENDCHAR +STARTCHAR uni55AC +ENCODING 21932 +BBX 13 15 2 -1 +BITMAP +01C0 +3E00 +0200 +7FF0 +0880 +3FE0 +C898 +0F80 +0000 +7FF0 +4010 +4F90 +4890 +4F90 +4070 +ENDCHAR +STARTCHAR uni55AD +ENCODING 21933 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +F7F8 +9110 +90E0 +9110 +97FC +9420 +95C0 +9400 +F430 +08C0 +0804 +1018 +01E0 +ENDCHAR +STARTCHAR uni55AE +ENCODING 21934 +BBX 15 14 1 -1 +BITMAP +3EF8 +2288 +3EF8 +0000 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni55AF +ENCODING 21935 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +90A0 +9150 +9248 +95F4 +9040 +9150 +9110 +F7FC +9110 +0110 +0110 +0210 +0410 +ENDCHAR +STARTCHAR uni55B0 +ENCODING 21936 +BBX 15 15 1 -1 +BITMAP +0040 +00A0 +F110 +9248 +9C46 +93F8 +9208 +93F8 +9208 +93FA +9224 +F228 +0210 +03C8 +0E06 +ENDCHAR +STARTCHAR uni55B1 +ENCODING 21937 +BBX 15 15 0 -2 +BITMAP +07FE +F400 +95FC +9524 +9524 +95FC +9524 +9524 +95FC +F420 +9420 +05FC +0820 +0820 +13FE +ENDCHAR +STARTCHAR uni55B2 +ENCODING 21938 +BBX 14 16 1 -2 +BITMAP +0220 +0220 +E420 +A53C +A944 +BE44 +A284 +A424 +A914 +BF94 +E884 +A004 +1504 +1284 +22A8 +0010 +ENDCHAR +STARTCHAR uni55B3 +ENCODING 21939 +BBX 15 15 0 -1 +BITMAP +0040 +0040 +F7FC +90E0 +9150 +9248 +9446 +93F8 +9208 +93F8 +F208 +93F8 +0208 +0000 +0FFE +ENDCHAR +STARTCHAR uni55B4 +ENCODING 21940 +BBX 14 16 1 -2 +BITMAP +0028 +0024 +EFFC +A820 +A820 +AFE0 +A924 +A924 +AFA4 +AAA8 +EAA8 +A910 +0A94 +1434 +104C +2084 +ENDCHAR +STARTCHAR uni55B5 +ENCODING 21941 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9110 +9000 +93F8 +9248 +9248 +9248 +F3F8 +9248 +0248 +0248 +03F8 +0208 +ENDCHAR +STARTCHAR uni55B6 +ENCODING 21942 +BBX 12 15 2 -1 +BITMAP +4840 +2440 +0080 +FFF0 +8010 +BFD0 +2040 +2040 +3FC0 +0800 +7FE0 +4020 +4020 +4020 +7FE0 +ENDCHAR +STARTCHAR uni55B7 +ENCODING 21943 +BBX 14 16 1 -2 +BITMAP +0040 +03F8 +F040 +9110 +97FC +9110 +9000 +93F8 +9208 +9248 +F248 +9248 +0248 +00A0 +0110 +0608 +ENDCHAR +STARTCHAR uni55B8 +ENCODING 21944 +BBX 13 16 1 -2 +BITMAP +0240 +0220 +FFF8 +0200 +7FF0 +4210 +7FF0 +4210 +7FF0 +4210 +0000 +F910 +8960 +8988 +F908 +88F8 +ENDCHAR +STARTCHAR uni55B9 +ENCODING 21945 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F7FC +90A0 +9110 +9248 +9DF6 +9040 +9040 +97FC +F000 +9040 +03F8 +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni55BA +ENCODING 21946 +BBX 14 16 1 -2 +BITMAP +020C +02F0 +E220 +A444 +A488 +ADF0 +B428 +A444 +A5FC +A424 +E420 +A4A8 +0524 +0624 +04A0 +0440 +ENDCHAR +STARTCHAR uni55BB +ENCODING 21947 +BBX 14 16 1 -2 +BITMAP +0080 +0140 +F220 +9410 +9BEC +9000 +9788 +94A8 +94A8 +97A8 +F4A8 +94A8 +07A8 +0488 +04A8 +0590 +ENDCHAR +STARTCHAR uni55BC +ENCODING 21948 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F3F0 +9410 +9820 +97F8 +9008 +93F8 +9008 +97F8 +F008 +9080 +0248 +0A54 +0A14 +11F0 +ENDCHAR +STARTCHAR uni55BD +ENCODING 21949 +BBX 14 16 1 -2 +BITMAP +0040 +0248 +F150 +9040 +97FC +9150 +9248 +9404 +9080 +9FFC +F110 +9210 +0320 +00C0 +0330 +0C08 +ENDCHAR +STARTCHAR uni55BE +ENCODING 21950 +BBX 15 16 0 -2 +BITMAP +2208 +1110 +0020 +7FFE +4102 +9104 +1FF0 +2100 +0100 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni55BF +ENCODING 21951 +BBX 13 14 2 -1 +BITMAP +1FC0 +1040 +1040 +1FC0 +0000 +7DF0 +4510 +4510 +7DF0 +0200 +FFF8 +0A80 +3260 +C218 +ENDCHAR +STARTCHAR uni55C0 +ENCODING 21952 +BBX 15 16 0 -2 +BITMAP +1000 +1078 +FE48 +1048 +7C48 +0086 +FE00 +82FC +0044 +7C44 +0028 +7C28 +4410 +4428 +7C44 +4582 +ENDCHAR +STARTCHAR uni55C1 +ENCODING 21953 +BBX 14 16 1 -2 +BITMAP +0008 +003C +F7E0 +943C +9420 +95FC +9524 +9530 +95E4 +951C +F500 +9570 +0550 +0954 +0A94 +150C +ENDCHAR +STARTCHAR uni55C2 +ENCODING 21954 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F780 +9008 +9488 +9250 +93F8 +9440 +9040 +97FC +F040 +9248 +0248 +0248 +03F8 +0008 +ENDCHAR +STARTCHAR uni55C3 +ENCODING 21955 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9000 +93F8 +9208 +93F8 +9000 +97FC +9404 +F5F4 +9514 +05F4 +0404 +0414 +0408 +ENDCHAR +STARTCHAR uni55C4 +ENCODING 21956 +BBX 15 14 1 -1 +BITMAP +0FFE +0040 +F3F8 +9208 +93F8 +9208 +93F8 +9208 +93F8 +9100 +F3F8 +0610 +01E0 +1E1E +ENDCHAR +STARTCHAR uni55C5 +ENCODING 21957 +BBX 15 15 1 -1 +BITMAP +0040 +0080 +03F8 +F208 +93F8 +9208 +93F8 +9208 +93F8 +9044 +9FFE +F040 +00A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni55C6 +ENCODING 21958 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F0A0 +9190 +9248 +97FE +9A08 +93F8 +9208 +93F8 +F200 +93F8 +0508 +0508 +09F8 +0108 +ENDCHAR +STARTCHAR uni55C7 +ENCODING 21959 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +1110 +2928 +4544 +FFFE +0000 +3FF8 +2008 +27C8 +2448 +27C8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni55C8 +ENCODING 21960 +BBX 14 15 1 -1 +BITMAP +0248 +0490 +F490 +9248 +97F0 +9410 +97F0 +9000 +97F0 +9490 +F490 +97F0 +0404 +0404 +03FC +ENDCHAR +STARTCHAR uni55C9 +ENCODING 21961 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9040 +9FFE +9040 +9088 +9310 +90AC +F7F2 +0148 +0E46 +0040 +ENDCHAR +STARTCHAR uni55CA +ENCODING 21962 +BBX 14 15 1 -2 +BITMAP +03F8 +F040 +9040 +97FC +9000 +93F8 +9208 +93F8 +9208 +F3F8 +9208 +03F8 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni55CB +ENCODING 21963 +BBX 14 16 1 -2 +BITMAP +0080 +03F8 +F088 +9128 +9210 +97BC +9294 +9294 +9528 +93F8 +F208 +93F8 +0208 +03F8 +0208 +0218 +ENDCHAR +STARTCHAR uni55CC +ENCODING 21964 +BBX 15 15 1 -1 +BITMAP +0060 +0110 +F208 +94E4 +9000 +90E0 +9210 +9408 +9806 +9000 +97FC +F524 +0524 +0524 +1FFE +ENDCHAR +STARTCHAR uni55CD +ENCODING 21965 +BBX 14 16 1 -2 +BITMAP +0880 +04BC +E524 +A024 +AFA4 +A23C +AAA4 +AAA4 +AAA4 +AFBC +E2A4 +A224 +0424 +0444 +0854 +1088 +ENDCHAR +STARTCHAR uni55CE +ENCODING 21966 +BBX 15 14 1 -1 +BITMAP +03FC +F220 +9220 +93F8 +9220 +9220 +93F8 +9220 +9220 +93FE +F012 +0A4A +0922 +100C +ENDCHAR +STARTCHAR uni55CF +ENCODING 21967 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9150 +90A0 +9110 +9248 +9444 +93F8 +F040 +9150 +0248 +0444 +0140 +0080 +ENDCHAR +STARTCHAR uni55D0 +ENCODING 21968 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9404 +9848 +93F8 +9040 +93F8 +9040 +97FC +F040 +93F8 +0208 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni55D1 +ENCODING 21969 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +F7F8 +9080 +9080 +9FFC +9100 +9110 +9268 +9F84 +9000 +FFFC +0924 +0924 +1FFE +ENDCHAR +STARTCHAR uni55D2 +ENCODING 21970 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +FFFE +9110 +9040 +90A0 +9110 +93F8 +9C06 +9000 +93F8 +F208 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni55D3 +ENCODING 21971 +BBX 15 16 0 -2 +BITMAP +03F0 +0110 +F0E0 +9318 +9000 +97BC +94A4 +9318 +94A4 +9040 +F7FC +90E0 +0150 +0248 +0C46 +0040 +ENDCHAR +STARTCHAR uni55D4 +ENCODING 21972 +BBX 15 15 1 -1 +BITMAP +0238 +03C0 +F204 +91FC +9000 +95F8 +9508 +95F8 +9508 +95F8 +F508 +07FE +0080 +0318 +0C06 +ENDCHAR +STARTCHAR uni55D5 +ENCODING 21973 +BBX 14 15 1 -2 +BITMAP +07FC +F400 +95F8 +9400 +97FC +9550 +9520 +9590 +950C +F410 +97FC +0510 +0890 +0810 +1030 +ENDCHAR +STARTCHAR uni55D6 +ENCODING 21974 +BBX 15 16 0 -2 +BITMAP +0140 +065C +F444 +9444 +975C +9444 +9444 +97FC +9040 +97FC +F208 +9110 +00A0 +0040 +01B0 +0E0E +ENDCHAR +STARTCHAR uni55D7 +ENCODING 21975 +BBX 14 15 1 -2 +BITMAP +03F8 +F208 +93C8 +9248 +97FC +9404 +93F8 +9208 +93F8 +F208 +93F8 +0208 +0208 +0228 +0210 +ENDCHAR +STARTCHAR uni55D8 +ENCODING 21976 +BBX 14 16 1 -2 +BITMAP +003C +07C0 +F244 +9128 +9080 +9110 +93E0 +9040 +9188 +93FC +F044 +9040 +07FC +00A0 +0110 +060C +ENDCHAR +STARTCHAR uni55D9 +ENCODING 21977 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7F8 +9210 +9120 +97FC +9404 +9888 +9040 +97F8 +F100 +91F0 +0110 +0210 +0250 +0420 +ENDCHAR +STARTCHAR uni55DA +ENCODING 21978 +BBX 15 15 1 -1 +BITMAP +0040 +0080 +03F8 +F208 +9208 +9208 +93F8 +9200 +93FE +9200 +F3FC +0004 +0AA4 +12A4 +1018 +ENDCHAR +STARTCHAR uni55DB +ENCODING 21979 +BBX 14 16 1 -2 +BITMAP +0210 +0120 +F000 +97FC +9140 +97F8 +9148 +9FFC +9148 +97F8 +F140 +9360 +0550 +194C +0140 +0140 +ENDCHAR +STARTCHAR uni55DC +ENCODING 21980 +BBX 15 15 1 -1 +BITMAP +0084 +0084 +07F8 +F090 +9FFE +90C0 +93F8 +9D02 +91FE +9000 +93FC +F204 +03FC +0204 +03FC +ENDCHAR +STARTCHAR uni55DD +ENCODING 21981 +BBX 15 14 1 -1 +BITMAP +07FE +F000 +93FC +9204 +93FC +9000 +97FE +9492 +9512 +960E +F402 +05FA +0442 +0446 +ENDCHAR +STARTCHAR uni55DE +ENCODING 21982 +BBX 14 16 1 -2 +BITMAP +0108 +0088 +F090 +97FC +9108 +9108 +9210 +9294 +94A4 +9738 +F108 +9210 +0210 +04A4 +07BC +0084 +ENDCHAR +STARTCHAR uni55DF +ENCODING 21983 +BBX 15 15 1 -1 +BITMAP +0208 +0110 +F7FC +9040 +93F8 +9040 +9040 +97FC +9080 +9100 +F3FC +0420 +0820 +1020 +03FE +ENDCHAR +STARTCHAR uni55E0 +ENCODING 21984 +BBX 15 16 0 -2 +BITMAP +0E40 +F040 +2278 +9288 +5550 +0020 +7C50 +0888 +1106 +10F8 +1E88 +F088 +5088 +1088 +50F8 +2088 +ENDCHAR +STARTCHAR uni55E1 +ENCODING 21985 +BBX 14 16 1 -2 +BITMAP +0120 +0110 +F208 +9484 +9910 +93F8 +9008 +9000 +97BC +9084 +F4A4 +9294 +04A4 +0084 +0294 +0108 +ENDCHAR +STARTCHAR uni55E2 +ENCODING 21986 +BBX 15 14 1 -1 +BITMAP +03F8 +F248 +9248 +9248 +92A8 +9318 +93F8 +9000 +97FC +9524 +F524 +0524 +0524 +0FFE +ENDCHAR +STARTCHAR uni55E3 +ENCODING 21987 +BBX 14 14 1 -1 +BITMAP +7EFC +4204 +7E04 +00F4 +FE04 +AA04 +AAF4 +AA94 +FE94 +AA94 +AAF4 +AA04 +AA04 +861C +ENDCHAR +STARTCHAR uni55E4 +ENCODING 21988 +BBX 15 15 1 -1 +BITMAP +0040 +0444 +0444 +F7FC +9100 +9FFE +9040 +97FC +9444 +9444 +97FC +F040 +0044 +00FE +0F02 +ENDCHAR +STARTCHAR uni55E5 +ENCODING 21989 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +F3F8 +9208 +93F8 +9208 +93F8 +9080 +97FC +9110 +F248 +9444 +0BFA +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni55E6 +ENCODING 21990 +BBX 14 16 0 -2 +BITMAP +0040 +0040 +F7FC +9040 +97FC +9484 +9918 +93E0 +9040 +9088 +F7FC +9044 +0250 +0448 +0948 +0080 +ENDCHAR +STARTCHAR uni55E7 +ENCODING 21991 +BBX 15 16 0 -2 +BITMAP +1000 +7E78 +1248 +2A48 +4578 +8280 +0C60 +37D8 +C006 +3FF8 +2488 +2488 +3FF8 +2488 +24A8 +2010 +ENDCHAR +STARTCHAR uni55E8 +ENCODING 21992 +BBX 15 16 0 -2 +BITMAP +0080 +0880 +E4FE +A100 +AAFC +A484 +A4A4 +A094 +A3FE +A484 +ED24 +A514 +05FE +0404 +0428 +0010 +ENDCHAR +STARTCHAR uni55E9 +ENCODING 21993 +BBX 15 15 1 -1 +BITMAP +0148 +0244 +F442 +93FC +9204 +9204 +93FC +9204 +9204 +93FC +9204 +F204 +03FC +0108 +0606 +ENDCHAR +STARTCHAR uni55EA +ENCODING 21994 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9080 +97FC +9110 +9268 +95C6 +F040 +93F8 +00E0 +0158 +0644 +0040 +ENDCHAR +STARTCHAR uni55EB +ENCODING 21995 +BBX 14 15 1 -2 +BITMAP +07F8 +F210 +93F0 +9210 +93F0 +921C +9FF0 +9010 +9F78 +F148 +9548 +0250 +0520 +0950 +108C +ENDCHAR +STARTCHAR uni55EC +ENCODING 21996 +BBX 15 16 0 -2 +BITMAP +0110 +0110 +F7FE +9110 +9100 +92FE +9208 +9608 +9AE8 +92A8 +F2A8 +92E8 +02A8 +0208 +0228 +0210 +ENDCHAR +STARTCHAR uni55ED +ENCODING 21997 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +FFFE +0090 +3EE4 +2284 +3E7C +ENDCHAR +STARTCHAR uni55EE +ENCODING 21998 +BBX 15 15 0 -2 +BITMAP +00FE +EE28 +AA28 +AA28 +AAFE +AAAA +AEAA +AAAA +AAAA +EAAE +AAC2 +0E82 +0A82 +00FE +0082 +ENDCHAR +STARTCHAR uni55EF +ENCODING 21999 +BBX 15 15 0 -2 +BITMAP +07FC +F444 +9444 +97FC +9444 +94A4 +9514 +9404 +97FC +F040 +9024 +0522 +050A +0908 +00F8 +ENDCHAR +STARTCHAR uni55F0 +ENCODING 22000 +BBX 13 16 1 -2 +BITMAP +0400 +07F8 +EA48 +AA48 +BA48 +ABF8 +AA48 +AA48 +AAE8 +AAA8 +EAA8 +AAA8 +0AE8 +0A08 +0BF8 +0A08 +ENDCHAR +STARTCHAR uni55F1 +ENCODING 22001 +BBX 14 16 1 -2 +BITMAP +0040 +00A0 +F110 +92E8 +9404 +91F0 +9110 +91F0 +9018 +93E0 +F040 +93F8 +0040 +07FC +0040 +00C0 +ENDCHAR +STARTCHAR uni55F2 +ENCODING 22002 +BBX 15 16 0 -2 +BITMAP +0090 +0108 +F294 +9060 +9198 +9646 +90FC +9308 +90B0 +90D0 +F73E +90C2 +0324 +0018 +0060 +0780 +ENDCHAR +STARTCHAR uni55F3 +ENCODING 22003 +BBX 14 16 1 -2 +BITMAP +001C +07E0 +F088 +9448 +9210 +97FC +9484 +9080 +97FC +9100 +F1F8 +9288 +0250 +0420 +08D0 +030C +ENDCHAR +STARTCHAR uni55F4 +ENCODING 22004 +BBX 14 16 1 -2 +BITMAP +0210 +0120 +F7F8 +9080 +9080 +93F0 +9080 +9080 +97F8 +9140 +F150 +9168 +0278 +0244 +0444 +083C +ENDCHAR +STARTCHAR uni55F5 +ENCODING 22005 +BBX 15 15 0 -1 +BITMAP +01FC +0808 +E450 +A420 +A1FC +A124 +BD24 +A5FC +A524 +A5FC +E524 +A524 +052C +0A00 +11FE +ENDCHAR +STARTCHAR uni55F6 +ENCODING 22006 +BBX 14 15 1 -2 +BITMAP +03F8 +F248 +93F8 +9248 +93F8 +9150 +9150 +97FC +9150 +F150 +93F8 +0040 +07FC +0040 +0040 +ENDCHAR +STARTCHAR uni55F7 +ENCODING 22007 +BBX 15 15 1 -1 +BITMAP +0210 +0210 +0F90 +F23E +9FA4 +9244 +9224 +9FE4 +9414 +9794 +9488 +F498 +0894 +08A4 +1342 +ENDCHAR +STARTCHAR uni55F8 +ENCODING 22008 +BBX 15 16 0 -2 +BITMAP +0820 +7F20 +087E +7E44 +08A4 +FF28 +1010 +1E28 +2244 +4682 +8000 +3FF8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni55F9 +ENCODING 22009 +BBX 15 15 1 -1 +BITMAP +0820 +0420 +03FE +F020 +A9FC +A524 +A1FC +BD24 +A524 +A5FC +A420 +E7FE +0420 +0A20 +11FE +ENDCHAR +STARTCHAR uni55FA +ENCODING 22010 +BBX 14 16 1 -2 +BITMAP +0040 +0444 +F7FC +9120 +9110 +93FC +9620 +9A20 +93FC +9220 +F220 +93FC +0220 +0220 +03FC +0200 +ENDCHAR +STARTCHAR uni55FB +ENCODING 22011 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9400 +9490 +9490 +97FC +9490 +9490 +9490 +F4F0 +9400 +0AA8 +0A54 +1454 +2000 +ENDCHAR +STARTCHAR uni55FC +ENCODING 22012 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9000 +93F8 +9208 +93F8 +9208 +93F8 +F040 +97FC +00A0 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni55FD +ENCODING 22013 +BBX 15 15 1 -1 +BITMAP +0220 +0220 +E220 +BFBE +A222 +AFD4 +AA90 +AA90 +AF90 +A228 +A728 +E6A8 +0A24 +1244 +0242 +ENDCHAR +STARTCHAR uni55FE +ENCODING 22014 +BBX 15 15 1 -1 +BITMAP +0220 +0220 +F23E +9FC0 +94A0 +943C +9750 +9590 +9510 +95FE +9510 +F510 +0928 +0944 +1282 +ENDCHAR +STARTCHAR uni55FF +ENCODING 22015 +BBX 14 16 1 -2 +BITMAP +0080 +0140 +F220 +9490 +9BEC +9040 +9080 +97F0 +9410 +97F0 +F410 +97F0 +0410 +07F0 +0220 +0410 +ENDCHAR +STARTCHAR uni5600 +ENCODING 22016 +BBX 14 16 0 -2 +BITMAP +0080 +0040 +F7FC +9110 +90A0 +97FC +9444 +95F4 +9444 +95F4 +F514 +9514 +05F4 +0404 +0414 +0408 +ENDCHAR +STARTCHAR uni5601 +ENCODING 22017 +BBX 14 16 1 -2 +BITMAP +0028 +0024 +E020 +AFFC +A820 +A920 +A9A4 +A924 +AFE4 +A928 +E928 +AB90 +1554 +1134 +234C +0084 +ENDCHAR +STARTCHAR uni5602 +ENCODING 22018 +BBX 14 16 1 -2 +BITMAP +0080 +F0BC +90A4 +94A4 +94A4 +94A4 +F4BC +0480 +F4BC +95A4 +96A4 +94A4 +90A4 +F0BC +90A4 +0080 +ENDCHAR +STARTCHAR uni5603 +ENCODING 22019 +BBX 14 16 1 -2 +BITMAP +0040 +0FFC +E840 +ABF8 +A848 +AFFC +A848 +ABF8 +A840 +ABF8 +EA48 +ABF8 +0A48 +13F8 +1248 +2258 +ENDCHAR +STARTCHAR uni5604 +ENCODING 22020 +BBX 14 16 1 -2 +BITMAP +0200 +07F0 +F410 +97F0 +9410 +97F0 +9400 +97FC +9400 +97FC +F084 +9FF4 +02C8 +0CB0 +308C +0080 +ENDCHAR +STARTCHAR uni5605 +ENCODING 22021 +BBX 14 15 1 -2 +BITMAP +0F7C +E910 +A910 +AF50 +A950 +A950 +AF7C +A820 +AA30 +E930 +AB50 +0D54 +0894 +008C +0100 +ENDCHAR +STARTCHAR uni5606 +ENCODING 22022 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +0FFE +F110 +97FC +9444 +9444 +97FC +9040 +97FC +F040 +0FFE +00A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni5607 +ENCODING 22023 +BBX 15 15 1 -1 +BITMAP +0040 +00B0 +F0D0 +9208 +9596 +9E9A +9040 +91B0 +9E4E +9380 +9060 +F184 +0008 +0030 +07C0 +ENDCHAR +STARTCHAR uni5608 +ENCODING 22024 +BBX 15 15 1 -1 +BITMAP +0090 +0FFE +F090 +97FE +9492 +97FE +9492 +97FE +9000 +93FC +9204 +F3FC +0204 +0204 +03FC +ENDCHAR +STARTCHAR uni5609 +ENCODING 22025 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0000 +1FF0 +1010 +1FF0 +0440 +FFFE +1000 +7EFC +2284 +CEFC +ENDCHAR +STARTCHAR uni560A +ENCODING 22026 +BBX 14 15 1 -1 +BITMAP +0040 +0444 +F444 +97FC +9000 +97FC +9440 +97F8 +9440 +97FC +F400 +9440 +0BF8 +0840 +17FC +ENDCHAR +STARTCHAR uni560B +ENCODING 22027 +BBX 15 16 0 -2 +BITMAP +0208 +0248 +E748 +A290 +A29E +AFE4 +A114 +A214 +AFD4 +A494 +E914 +A1C8 +0F08 +0114 +0514 +0222 +ENDCHAR +STARTCHAR uni560C +ENCODING 22028 +BBX 15 15 0 -2 +BITMAP +0FFE +E0A0 +A7FC +A4A4 +A4A4 +A7FC +A000 +A7FC +A000 +EFFE +A040 +0248 +0444 +0942 +0080 +ENDCHAR +STARTCHAR uni560D +ENCODING 22029 +BBX 15 16 0 -2 +BITMAP +0040 +03F8 +F248 +9FFE +9248 +93F8 +9040 +93F8 +9248 +93F8 +F080 +9FFE +0110 +00E0 +0318 +0C04 +ENDCHAR +STARTCHAR uni560E +ENCODING 22030 +BBX 15 14 1 -1 +BITMAP +0FFE +F080 +93F8 +9208 +93F8 +9208 +93F8 +9208 +93F8 +F104 +0FFE +0090 +01E2 +1E1E +ENDCHAR +STARTCHAR uni560F +ENCODING 22031 +BBX 15 16 0 -2 +BITMAP +1000 +11DC +1144 +1144 +FD44 +11DC +1100 +1100 +7DDC +4514 +4514 +45D4 +4508 +7D08 +4514 +0122 +ENDCHAR +STARTCHAR uni5610 +ENCODING 22032 +BBX 15 14 1 -1 +BITMAP +07BE +F18A +9296 +95AA +9292 +9440 +91B0 +9E0E +9040 +9390 +F064 +0388 +0030 +03C0 +ENDCHAR +STARTCHAR uni5611 +ENCODING 22033 +BBX 14 16 1 -2 +BITMAP +0080 +00F8 +F080 +97FC +9484 +94F0 +9788 +9478 +9410 +95E0 +F648 +9550 +0BFC +0840 +1140 +0080 +ENDCHAR +STARTCHAR uni5612 +ENCODING 22034 +BBX 14 16 1 -2 +BITMAP +0110 +07BC +F110 +93B8 +9110 +97BC +9110 +9000 +97F8 +9008 +F008 +93F8 +0008 +0008 +07F8 +0008 +ENDCHAR +STARTCHAR uni5613 +ENCODING 22035 +BBX 15 15 0 -2 +BITMAP +0FFE +E82A +A826 +AFFE +A822 +ABAA +AAAA +ABAA +A832 +E996 +AE2E +0846 +0882 +0FFE +0802 +ENDCHAR +STARTCHAR uni5614 +ENCODING 22036 +BBX 15 14 1 -1 +BITMAP +07FE +0400 +F4F8 +9488 +9488 +94F8 +9400 +95DC +9554 +9554 +F554 +05DC +0400 +07FE +ENDCHAR +STARTCHAR uni5615 +ENCODING 22037 +BBX 15 15 0 -2 +BITMAP +07FC +F040 +9278 +9240 +9FFE +9100 +91FC +9200 +93FC +F004 +9554 +0554 +0804 +0028 +0010 +ENDCHAR +STARTCHAR uni5616 +ENCODING 22038 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +07FC +F040 +93F8 +9040 +9FFE +9208 +93F8 +9208 +93F8 +F208 +03F8 +0190 +0E0C +ENDCHAR +STARTCHAR uni5617 +ENCODING 22039 +BBX 14 15 1 -1 +BITMAP +4210 +2220 +FFFC +8004 +BFF4 +2010 +3FF0 +8000 +FFF0 +8004 +FFFC +4008 +7FF8 +4008 +7FF8 +ENDCHAR +STARTCHAR uni5618 +ENCODING 22040 +BBX 15 15 1 -1 +BITMAP +0080 +00FC +F080 +97FE +9482 +94F4 +9780 +9484 +947C +9400 +F8A0 +0CA4 +12A4 +22A8 +07FE +ENDCHAR +STARTCHAR uni5619 +ENCODING 22041 +BBX 15 16 0 -2 +BITMAP +0410 +0210 +E8FE +A492 +A2FC +A4A4 +ACA8 +A510 +A528 +A6C6 +E080 +AFFE +0110 +0320 +00E0 +0718 +ENDCHAR +STARTCHAR uni561A +ENCODING 22042 +BBX 14 16 1 -2 +BITMAP +0400 +04F8 +E888 +B2F8 +A288 +A4F8 +AC00 +B5F8 +A410 +A7FC +E410 +A510 +0490 +0410 +0450 +0420 +ENDCHAR +STARTCHAR uni561B +ENCODING 22043 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +0FFC +E910 +A910 +AFFE +A910 +A918 +AB58 +AB5A +AD5A +F556 +1590 +0110 +0110 +ENDCHAR +STARTCHAR uni561C +ENCODING 22044 +BBX 14 16 1 -2 +BITMAP +0080 +0FF8 +E2A0 +A2A0 +A5D0 +A888 +A1C0 +A6B0 +B88C +A100 +E3F0 +A410 +09A0 +0040 +01A0 +0E10 +ENDCHAR +STARTCHAR uni561D +ENCODING 22045 +BBX 14 16 1 -2 +BITMAP +0408 +0408 +EF08 +A928 +B218 +AF88 +AAC8 +AAA8 +AF88 +AA8C +EAF8 +AF88 +0A88 +0A88 +0888 +1188 +ENDCHAR +STARTCHAR uni561E +ENCODING 22046 +BBX 13 16 1 -2 +BITMAP +0520 +0520 +EFA0 +A520 +A778 +A228 +AFA8 +AAA8 +AAA8 +AFA8 +E228 +AFA8 +0248 +0248 +02A8 +0310 +ENDCHAR +STARTCHAR uni561F +ENCODING 22047 +BBX 15 16 0 -2 +BITMAP +0200 +023E +EF62 +A264 +A2A4 +AFE8 +A124 +A224 +A7A2 +ACA2 +F4A2 +A7B4 +04A8 +04A0 +07A0 +04A0 +ENDCHAR +STARTCHAR uni5620 +ENCODING 22048 +BBX 15 16 0 -2 +BITMAP +07FC +0080 +F3F8 +9208 +93F8 +9208 +93F8 +9208 +97FE +94A2 +F89C +97F0 +0050 +0024 +00D4 +030C +ENDCHAR +STARTCHAR uni5621 +ENCODING 22049 +BBX 14 15 1 -1 +BITMAP +0040 +0248 +F150 +97FC +9404 +91F0 +9110 +9110 +91F0 +9040 +F040 +93F8 +0040 +0040 +07FC +ENDCHAR +STARTCHAR uni5622 +ENCODING 22050 +BBX 14 15 1 -2 +BITMAP +0FBC +EA84 +AAA8 +AF90 +AA88 +AAFC +AF94 +A214 +A210 +EF90 +A210 +0210 +0390 +1C50 +0820 +ENDCHAR +STARTCHAR uni5623 +ENCODING 22051 +BBX 13 16 1 -2 +BITMAP +0080 +0888 +E888 +AFF8 +A000 +AF78 +A948 +A948 +AF78 +A948 +E948 +AF78 +0948 +0948 +1568 +2290 +ENDCHAR +STARTCHAR uni5624 +ENCODING 22052 +BBX 15 15 0 -2 +BITMAP +0FBE +E8A2 +AAAA +AAAA +AAAA +A514 +A8A2 +A080 +AFFE +E110 +A210 +03A0 +0060 +0198 +0E04 +ENDCHAR +STARTCHAR uni5625 +ENCODING 22053 +BBX 14 16 1 -2 +BITMAP +0420 +0420 +E8A0 +B2B8 +A2A0 +A4A0 +ADFC +B400 +A420 +A4A0 +E4B8 +A4A0 +0560 +0520 +061C +0400 +ENDCHAR +STARTCHAR uni5626 +ENCODING 22054 +BBX 15 16 0 -2 +BITMAP +3FF8 +2008 +3FF8 +1010 +2008 +5FF4 +0440 +3FF8 +2448 +3FF8 +0400 +FFFE +0820 +1E40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni5627 +ENCODING 22055 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +F7FE +9402 +9894 +9050 +9524 +954A +98FA +9300 +F040 +9444 +0444 +0444 +07FC +0004 +ENDCHAR +STARTCHAR uni5628 +ENCODING 22056 +BBX 15 15 1 -1 +BITMAP +0040 +07FC +F044 +9FFE +9044 +97FC +9040 +9554 +94E4 +9444 +95FC +F444 +08F4 +094C +1044 +ENDCHAR +STARTCHAR uni5629 +ENCODING 22057 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +0FFE +F110 +97FC +9248 +9FFE +9248 +9248 +97FC +F040 +0FFE +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni562A +ENCODING 22058 +BBX 14 15 1 -2 +BITMAP +07FC +F4A4 +94A4 +97FC +9000 +93F8 +9208 +93F8 +9208 +F3F8 +9208 +03F8 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni562B +ENCODING 22059 +BBX 14 16 1 -2 +BITMAP +0220 +0228 +F3A4 +94A0 +94FC +9AA0 +9120 +9550 +9250 +9288 +F488 +9904 +0010 +0548 +04A4 +08A4 +ENDCHAR +STARTCHAR uni562C +ENCODING 22060 +BBX 15 15 0 -2 +BITMAP +03F8 +F208 +93F8 +9208 +93F8 +9000 +9FFE +9480 +97BC +F494 +9794 +04D4 +0F88 +0094 +00A2 +ENDCHAR +STARTCHAR uni562D +ENCODING 22061 +BBX 14 16 1 -2 +BITMAP +0208 +0208 +EFD0 +A220 +A200 +AF88 +A008 +AF90 +A8A0 +A884 +EF84 +A888 +0508 +01D0 +1E20 +0840 +ENDCHAR +STARTCHAR uni562E +ENCODING 22062 +BBX 14 16 1 -2 +BITMAP +0110 +0554 +F5B8 +9910 +92A8 +9444 +9000 +97FC +9484 +9888 +F7F8 +9088 +0088 +0108 +0228 +0410 +ENDCHAR +STARTCHAR uni562F +ENCODING 22063 +BBX 15 15 1 -1 +BITMAP +0040 +07FC +F044 +9FFE +9044 +97FC +9040 +9554 +975C +9444 +97FC +F444 +075C +0554 +0844 +ENDCHAR +STARTCHAR uni5630 +ENCODING 22064 +BBX 15 15 1 -1 +BITMAP +0248 +0248 +F450 +9D74 +9248 +9554 +9EFA +9044 +97FE +9440 +9424 +F628 +0910 +092A +10C4 +ENDCHAR +STARTCHAR uni5631 +ENCODING 22065 +BBX 15 14 1 -1 +BITMAP +0FFC +E804 +AFFC +A830 +ABC0 +A840 +ABFC +AA44 +ABFC +E840 +17FE +144A +247A +05C6 +ENDCHAR +STARTCHAR uni5632 +ENCODING 22066 +BBX 15 15 1 -1 +BITMAP +0100 +011E +F112 +9FF2 +9112 +97DA +9456 +97D2 +9452 +97DA +9116 +9FF2 +F112 +0112 +0126 +ENDCHAR +STARTCHAR uni5633 +ENCODING 22067 +BBX 14 16 1 -2 +BITMAP +0040 +03F8 +F248 +93F8 +9040 +97FC +9000 +93F8 +9208 +93F8 +F208 +93F8 +0208 +03F8 +0110 +0208 +ENDCHAR +STARTCHAR uni5634 +ENCODING 22068 +BBX 15 15 1 -1 +BITMAP +0220 +0A26 +0BB8 +EA20 +ABA2 +BE1E +A3E0 +A440 +AFFC +A444 +A7FC +E444 +07FC +0404 +081C +ENDCHAR +STARTCHAR uni5635 +ENCODING 22069 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F3F8 +9040 +97FC +9210 +9738 +9210 +9310 +9C7C +F000 +97FC +0120 +0120 +0224 +041C +ENDCHAR +STARTCHAR uni5636 +ENCODING 22070 +BBX 15 15 1 -1 +BITMAP +048C +04B0 +0FE0 +F4A0 +94BE +97A4 +94A4 +94A4 +97A4 +94A4 +94A4 +FFC4 +0244 +0484 +1844 +ENDCHAR +STARTCHAR uni5637 +ENCODING 22071 +BBX 15 15 1 -1 +BITMAP +0040 +03F8 +F208 +93F8 +9208 +93F8 +9208 +93F8 +9040 +975C +F040 +075C +0040 +1FFE +0040 +ENDCHAR +STARTCHAR uni5638 +ENCODING 22072 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +F7FC +9AA8 +92A8 +92A8 +9FFE +92A8 +92A8 +92A8 +9FFE +F000 +02A8 +0454 +0852 +ENDCHAR +STARTCHAR uni5639 +ENCODING 22073 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F7FC +90A0 +9514 +9208 +97FC +9A0A +93F8 +9208 +F3F8 +9040 +0248 +0444 +0944 +0080 +ENDCHAR +STARTCHAR uni563A +ENCODING 22074 +BBX 15 16 0 -2 +BITMAP +0038 +03C0 +F080 +97FE +9110 +9208 +95F6 +9910 +91F0 +9000 +F7FC +9404 +05F4 +0514 +05F4 +040C +ENDCHAR +STARTCHAR uni563B +ENCODING 22075 +BBX 15 15 1 -1 +BITMAP +0040 +0FFE +F040 +93F8 +9000 +93F8 +9208 +93F8 +9110 +9FFE +9000 +F3F8 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni563C +ENCODING 22076 +BBX 15 16 0 -2 +BITMAP +3E7C +2244 +3E7C +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +0000 +FFFE +0000 +3FF8 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni563D +ENCODING 22077 +BBX 15 14 1 -1 +BITMAP +07BC +F4A4 +97BC +9000 +93F8 +9248 +93F8 +9248 +9248 +F3F8 +0040 +0FFE +0040 +0040 +ENDCHAR +STARTCHAR uni563E +ENCODING 22078 +BBX 14 15 1 -2 +BITMAP +07FC +F0A0 +97FC +94A4 +97FC +9000 +93F8 +9208 +93F8 +F208 +93F8 +0040 +07FC +0040 +0040 +ENDCHAR +STARTCHAR uni563F +ENCODING 22079 +BBX 15 14 1 -1 +BITMAP +07FC +F444 +9654 +9564 +9444 +97FC +9040 +97FC +9040 +9FFE +F000 +0524 +0892 +1092 +ENDCHAR +STARTCHAR uni5640 +ENCODING 22080 +BBX 15 14 1 -1 +BITMAP +07BE +F4A2 +97BE +9420 +94A2 +939E +9110 +97FC +9110 +9110 +FFFE +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni5641 +ENCODING 22081 +BBX 15 15 0 -2 +BITMAP +07FE +F090 +9090 +939C +9204 +9204 +939C +9090 +9090 +F7FE +9040 +0524 +050A +090A +00F8 +ENDCHAR +STARTCHAR uni5642 +ENCODING 22082 +BBX 15 15 1 -1 +BITMAP +0208 +0DF6 +F0A0 +97FC +94A4 +973C +9404 +97FC +9404 +97FC +F008 +0FFE +0208 +0108 +0038 +ENDCHAR +STARTCHAR uni5643 +ENCODING 22083 +BBX 14 16 1 -2 +BITMAP +0078 +07C0 +F248 +9150 +97FC +9150 +9248 +9404 +93F8 +9248 +F248 +93F8 +0248 +0248 +03F8 +0208 +ENDCHAR +STARTCHAR uni5644 +ENCODING 22084 +BBX 14 16 1 -2 +BITMAP +0100 +07BC +F114 +9394 +9114 +97A4 +914C +9080 +9110 +93E0 +F048 +97FC +0044 +0248 +0544 +0080 +ENDCHAR +STARTCHAR uni5645 +ENCODING 22085 +BBX 15 16 0 -2 +BITMAP +0004 +003E +F7C0 +9244 +9128 +93F8 +9208 +93FC +9204 +93FE +F402 +96AA +0AAA +0A02 +1014 +0008 +ENDCHAR +STARTCHAR uni5646 +ENCODING 22086 +BBX 14 15 1 -2 +BITMAP +0F78 +E210 +AA50 +AF78 +A630 +AB54 +B28C +A000 +A7F0 +E410 +A410 +07F0 +0410 +0410 +07F0 +ENDCHAR +STARTCHAR uni5647 +ENCODING 22087 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9110 +9FFE +9000 +93F8 +9248 +93F8 +9248 +93F8 +F040 +07FC +0040 +0FFE +ENDCHAR +STARTCHAR uni5648 +ENCODING 22088 +BBX 15 16 0 -2 +BITMAP +0414 +0212 +EF92 +A010 +A07E +AF90 +A890 +A890 +AF90 +A228 +EB28 +AAA8 +1228 +024A +0A4A +0486 +ENDCHAR +STARTCHAR uni5649 +ENCODING 22089 +BBX 15 15 1 -1 +BITMAP +0010 +0FD0 +F210 +9FDE +94A4 +94C4 +97A4 +94A4 +94A8 +97A8 +9490 +F490 +07A8 +1CC4 +0082 +ENDCHAR +STARTCHAR uni564A +ENCODING 22090 +BBX 14 15 1 -2 +BITMAP +07F8 +F090 +9060 +97FC +90A4 +9128 +96A0 +9040 +97FC +F4A4 +9514 +06EC +04A4 +04E4 +040C +ENDCHAR +STARTCHAR uni564B +ENCODING 22091 +BBX 14 16 1 -2 +BITMAP +0410 +0210 +EF90 +A020 +AF3C +A928 +AF48 +A028 +AF28 +A128 +E228 +A390 +0E10 +0228 +0A48 +0484 +ENDCHAR +STARTCHAR uni564C +ENCODING 22092 +BBX 15 15 1 -1 +BITMAP +0030 +0108 +0204 +F7FE +964C +9554 +9444 +97FC +9000 +93F8 +F208 +03F8 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni564D +ENCODING 22093 +BBX 15 16 0 -2 +BITMAP +0140 +0120 +F3FE +9220 +9620 +9BFC +9220 +9220 +93FC +9220 +F220 +93FE +0200 +0524 +0492 +0892 +ENDCHAR +STARTCHAR uni564E +ENCODING 22094 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +0FFE +F040 +93F8 +9000 +97FC +9404 +95F4 +9000 +93F8 +F208 +03F8 +0110 +0FFE +ENDCHAR +STARTCHAR uni564F +ENCODING 22095 +BBX 15 16 0 -2 +BITMAP +0040 +00A0 +F118 +96E6 +9000 +93F8 +9208 +93F8 +9000 +97BC +F084 +94A4 +0294 +04A4 +0294 +0108 +ENDCHAR +STARTCHAR uni5650 +ENCODING 22096 +BBX 14 14 1 -1 +BITMAP +7CF8 +4488 +4488 +7CF8 +0000 +7FF8 +0200 +0200 +FFFC +0000 +7CF8 +4488 +4488 +7CF8 +ENDCHAR +STARTCHAR uni5651 +ENCODING 22097 +BBX 14 16 1 -2 +BITMAP +0040 +0080 +F3F8 +9208 +93F8 +9208 +93F8 +9040 +9248 +9150 +F248 +9040 +07FC +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5652 +ENCODING 22098 +BBX 14 16 1 -2 +BITMAP +0040 +0248 +F150 +97FC +9150 +9248 +9444 +9208 +9208 +93BC +F488 +9AA8 +013C +0208 +0408 +0808 +ENDCHAR +STARTCHAR uni5653 +ENCODING 22099 +BBX 15 15 1 -1 +BITMAP +0040 +0078 +0040 +F7FE +9480 +97F0 +9484 +947C +9400 +9450 +F554 +0954 +09DC +1050 +03FE +ENDCHAR +STARTCHAR uni5654 +ENCODING 22100 +BBX 15 15 0 -1 +BITMAP +0020 +07A4 +F0A8 +9292 +9114 +9208 +95F4 +9802 +93F8 +9208 +F208 +93F8 +0208 +0110 +0FFE +ENDCHAR +STARTCHAR uni5655 +ENCODING 22101 +BBX 14 16 0 -2 +BITMAP +00F8 +3F20 +0940 +1FE0 +1020 +1FF0 +1010 +1FFC +2004 +2AA4 +400C +BFF8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni5656 +ENCODING 22102 +BBX 15 15 0 -2 +BITMAP +0FBE +F208 +971C +9208 +9FBE +9040 +90A0 +9318 +9C46 +F020 +93F8 +0008 +0010 +0020 +0040 +ENDCHAR +STARTCHAR uni5657 +ENCODING 22103 +BBX 15 16 0 -2 +BITMAP +00A0 +04A4 +F2A8 +90A0 +97FC +9110 +90A0 +97FC +9040 +93F8 +F040 +97FC +00A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni5658 +ENCODING 22104 +BBX 15 15 0 -2 +BITMAP +0FFE +E800 +AA28 +A948 +ABEE +A892 +A884 +AAA0 +AAA8 +EBE8 +A888 +0894 +0914 +0924 +1242 +ENDCHAR +STARTCHAR uni5659 +ENCODING 22105 +BBX 15 16 0 -2 +BITMAP +0040 +00A0 +F110 +9248 +9DF6 +90A0 +9248 +92A8 +93F8 +9040 +F7FC +9484 +0524 +05F4 +0414 +040C +ENDCHAR +STARTCHAR uni565A +ENCODING 22106 +BBX 14 15 1 -2 +BITMAP +07F8 +F008 +97F8 +9008 +97F8 +9000 +9778 +9248 +9F78 +F010 +97FC +0210 +0110 +0150 +0020 +ENDCHAR +STARTCHAR uni565B +ENCODING 22107 +BBX 15 15 1 -1 +BITMAP +0040 +0240 +027C +F240 +9FFE +9404 +9554 +9564 +94C4 +97FC +94E4 +F554 +064C +0404 +07FC +ENDCHAR +STARTCHAR uni565C +ENCODING 22108 +BBX 15 16 0 -2 +BITMAP +0100 +03F0 +F410 +9FFC +9444 +97FC +9444 +97FC +9000 +9FFE +F000 +93F8 +0208 +03F8 +0208 +03F8 +ENDCHAR +STARTCHAR uni565D +ENCODING 22109 +BBX 15 16 0 -2 +BITMAP +0108 +0108 +E214 +A294 +A4BC +AF08 +A110 +A224 +A4BE +AF8A +E088 +A02C +0AAA +0ACA +0828 +0010 +ENDCHAR +STARTCHAR uni565E +ENCODING 22110 +BBX 15 15 1 -1 +BITMAP +0040 +00A0 +F318 +9C06 +91F0 +9000 +97BC +94A4 +94A4 +97BC +9000 +F208 +0208 +0514 +08A2 +ENDCHAR +STARTCHAR uni565F +ENCODING 22111 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2248 +24FE +2D90 +36FC +2490 +24FC +2490 +24FE +2480 +4FFC +4804 +8FFC +0804 +ENDCHAR +STARTCHAR uni5660 +ENCODING 22112 +BBX 15 15 1 -1 +BITMAP +0020 +0820 +E5F8 +A420 +ABFC +A508 +A490 +A1FC +BC20 +A5FC +A420 +E7FE +0420 +0A20 +11FE +ENDCHAR +STARTCHAR uni5661 +ENCODING 22113 +BBX 14 16 1 -2 +BITMAP +0200 +03F0 +F410 +9FFC +9510 +9648 +97FC +9400 +95F8 +9400 +F5F8 +9400 +05F8 +0908 +09F8 +1108 +ENDCHAR +STARTCHAR uni5662 +ENCODING 22114 +BBX 15 16 0 -2 +BITMAP +0080 +0100 +F7FC +9444 +9554 +9444 +97FC +94E4 +9554 +9404 +F040 +97FE +00A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni5663 +ENCODING 22115 +BBX 13 15 1 -2 +BITMAP +07F0 +F550 +9550 +97F0 +9200 +97F8 +9908 +97C8 +9548 +F548 +97C8 +0128 +0FE8 +0028 +0010 +ENDCHAR +STARTCHAR uni5664 +ENCODING 22116 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +0FFE +F110 +93B8 +9554 +9912 +9000 +93F8 +9000 +97FC +F040 +0248 +0C46 +00C0 +ENDCHAR +STARTCHAR uni5665 +ENCODING 22117 +BBX 14 16 1 -2 +BITMAP +0120 +07F8 +F528 +97F8 +9528 +97F8 +9000 +97F8 +9400 +95F0 +F400 +97FC +0A40 +0A28 +0A90 +130C +ENDCHAR +STARTCHAR uni5666 +ENCODING 22118 +BBX 15 15 1 -1 +BITMAP +0040 +0240 +027C +F240 +9FFE +9014 +97FE +9410 +97F4 +9494 +95B4 +F6A8 +04DA +0724 +08C4 +ENDCHAR +STARTCHAR uni5667 +ENCODING 22119 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +93F8 +9248 +93F8 +9248 +93F8 +9040 +F7FC +9444 +0454 +05F4 +0414 +040C +ENDCHAR +STARTCHAR uni5668 +ENCODING 22120 +BBX 15 14 1 -1 +BITMAP +3EF8 +2288 +2288 +3EF8 +0100 +FFFE +0440 +0820 +3018 +FEFE +2288 +2288 +2288 +3EF8 +ENDCHAR +STARTCHAR uni5669 +ENCODING 22121 +BBX 15 15 0 -2 +BITMAP +7FFC +0100 +3D78 +2548 +2548 +3D78 +0100 +7FFC +0100 +3D78 +2548 +2548 +3D78 +0100 +FFFE +ENDCHAR +STARTCHAR uni566A +ENCODING 22122 +BBX 15 14 1 -1 +BITMAP +01F0 +0110 +F1F0 +9000 +97BC +94A4 +94A4 +97BC +9040 +9FFE +F150 +0648 +1846 +0040 +ENDCHAR +STARTCHAR uni566B +ENCODING 22123 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +07FC +F110 +9FFE +9000 +93F8 +9208 +93F8 +9208 +93F8 +F040 +0524 +050A +08F8 +ENDCHAR +STARTCHAR uni566C +ENCODING 22124 +BBX 15 15 1 -1 +BITMAP +0210 +0210 +07BE +F528 +9948 +9000 +97FC +9040 +9248 +9248 +9554 +F554 +08E2 +0040 +0FFE +ENDCHAR +STARTCHAR uni566D +ENCODING 22125 +BBX 15 15 1 -1 +BITMAP +0110 +0210 +F790 +94BE +97A4 +94C4 +97A4 +9224 +9FD4 +9218 +9388 +F488 +0494 +08A4 +1342 +ENDCHAR +STARTCHAR uni566E +ENCODING 22126 +BBX 14 15 1 -2 +BITMAP +07F8 +F528 +9528 +97F8 +9000 +9FFC +9000 +97F8 +9408 +F7F8 +9144 +0228 +0610 +1A88 +0304 +ENDCHAR +STARTCHAR uni566F +ENCODING 22127 +BBX 15 15 1 -1 +BITMAP +001C +0FE8 +0508 +F290 +9FFE +9842 +952C +94FA +9900 +91F8 +9208 +9D10 +F0E0 +0198 +0E06 +ENDCHAR +STARTCHAR uni5670 +ENCODING 22128 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +EFFC +A050 +A448 +A4FC +A990 +AE90 +A2FC +A490 +E990 +AEFC +0290 +0490 +08FC +1080 +ENDCHAR +STARTCHAR uni5671 +ENCODING 22129 +BBX 15 15 1 -1 +BITMAP +0080 +00F8 +F080 +97FC +9480 +97F8 +9484 +947C +9400 +97FE +F464 +0BA8 +0878 +1796 +0060 +ENDCHAR +STARTCHAR uni5672 +ENCODING 22130 +BBX 15 15 1 -1 +BITMAP +0040 +00A0 +F318 +9CE6 +9000 +97FC +9444 +9554 +97FC +9000 +93F8 +F208 +03F8 +0208 +03F8 +ENDCHAR +STARTCHAR uni5673 +ENCODING 22131 +BBX 14 16 1 -2 +BITMAP +0040 +007C +F040 +97FC +9444 +97F0 +9444 +95FC +9508 +95F8 +F400 +95F8 +0440 +0BFC +0890 +130C +ENDCHAR +STARTCHAR uni5674 +ENCODING 22132 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +07FC +F040 +9208 +9FFE +9208 +9000 +97FC +9404 +97FC +F404 +07FC +0208 +0C06 +ENDCHAR +STARTCHAR uni5675 +ENCODING 22133 +BBX 15 16 0 -2 +BITMAP +2110 +17FE +1080 +03F8 +F208 +13F8 +1208 +13F8 +1208 +13F8 +2800 +47FE +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni5676 +ENCODING 22134 +BBX 15 15 1 -1 +BITMAP +0210 +0FFE +0210 +F7F8 +9408 +97F8 +9408 +97F8 +9200 +97FE +9C42 +F4A2 +0512 +07F2 +000C +ENDCHAR +STARTCHAR uni5677 +ENCODING 22135 +BBX 14 16 1 -2 +BITMAP +0420 +0220 +EF20 +A07C +A944 +A688 +BF20 +A020 +AF20 +A920 +EF50 +A950 +0950 +0F88 +0088 +0104 +ENDCHAR +STARTCHAR uni5678 +ENCODING 22136 +BBX 15 15 1 -1 +BITMAP +0200 +027E +E390 +BE3C +A224 +AABC +AAA4 +AAA4 +AABC +AFA4 +A224 +E23C +0290 +01A4 +0042 +ENDCHAR +STARTCHAR uni5679 +ENCODING 22137 +BBX 15 16 0 -2 +BITMAP +0040 +0248 +F150 +97FE +9402 +9804 +93F8 +9208 +93F8 +9000 +F7FC +9444 +07FC +0444 +07FC +0404 +ENDCHAR +STARTCHAR uni567A +ENCODING 22138 +BBX 15 15 1 -1 +BITMAP +0204 +0238 +1FE0 +E8A0 +A4BE +A524 +BFE4 +A224 +A224 +BFE4 +A324 +E6A4 +0A44 +1244 +0284 +ENDCHAR +STARTCHAR uni567B +ENCODING 22139 +BBX 15 15 0 -1 +BITMAP +0080 +0040 +F7FE +9512 +9BFC +9110 +97FC +9110 +97FE +9110 +F248 +95F4 +0842 +0040 +07FC +ENDCHAR +STARTCHAR uni567C +ENCODING 22140 +BBX 14 16 1 -2 +BITMAP +0020 +0010 +EF10 +A97C +A900 +A928 +AF10 +A8FC +A810 +AF10 +ED7C +B510 +1510 +1710 +2510 +0010 +ENDCHAR +STARTCHAR uni567D +ENCODING 22141 +BBX 15 16 0 -2 +BITMAP +0800 +FF00 +08FE +7E10 +0010 +7E30 +4238 +7E54 +2492 +FF10 +0010 +7E10 +4210 +4200 +7EFE +4200 +ENDCHAR +STARTCHAR uni567E +ENCODING 22142 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9514 +9288 +9444 +93F8 +9110 +97FC +9000 +F3F8 +9208 +03F8 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni567F +ENCODING 22143 +BBX 14 16 1 -2 +BITMAP +07BC +0084 +F4A4 +9294 +94A4 +9040 +97FC +9110 +9110 +92A8 +F444 +9040 +07FC +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5680 +ENCODING 22144 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +07FE +F442 +94A8 +92FA +9400 +93FC +9294 +93FC +9000 +F7FE +0020 +0020 +00E0 +ENDCHAR +STARTCHAR uni5681 +ENCODING 22145 +BBX 14 15 1 -2 +BITMAP +07BC +F084 +94A4 +9294 +94A4 +9120 +9210 +97FC +9A20 +F3FC +9220 +03FC +0220 +03FC +0200 +ENDCHAR +STARTCHAR uni5682 +ENCODING 22146 +BBX 14 15 1 -1 +BITMAP +0020 +0FA0 +EA20 +AFBC +A8A0 +AFD0 +AA08 +AF88 +A000 +A7F0 +E550 +A550 +0550 +0550 +1FFC +ENDCHAR +STARTCHAR uni5683 +ENCODING 22147 +BBX 14 15 1 -1 +BITMAP +0800 +05FC +F554 +9154 +91FC +9020 +9CA8 +9524 +9420 +94A8 +F524 +9420 +0420 +0A00 +11FC +ENDCHAR +STARTCHAR uni5684 +ENCODING 22148 +BBX 14 16 1 -2 +BITMAP +0110 +07FC +F150 +9120 +93FC +9640 +93F8 +9240 +93F8 +9240 +F3FC +9200 +07F8 +0110 +00E0 +071C +ENDCHAR +STARTCHAR uni5685 +ENCODING 22149 +BBX 15 15 0 -2 +BITMAP +07FC +E040 +AFFE +A842 +A358 +A040 +A358 +A000 +AFFE +E040 +A7FC +04A4 +04A4 +04A4 +040C +ENDCHAR +STARTCHAR uni5686 +ENCODING 22150 +BBX 14 15 1 -1 +BITMAP +0210 +0FFC +0210 +F080 +9FFC +9000 +93F0 +9210 +93F0 +9000 +9FFC +F804 +0BE4 +0A24 +0BEC +ENDCHAR +STARTCHAR uni5687 +ENCODING 22151 +BBX 15 15 1 -1 +BITMAP +0210 +0210 +EF7C +A210 +A210 +BFFE +A528 +A528 +B5AC +B56A +E568 +2528 +0928 +0948 +1358 +ENDCHAR +STARTCHAR uni5688 +ENCODING 22152 +BBX 15 14 1 -1 +BITMAP +0FFE +EA48 +ABCC +AA4A +ABC8 +A83E +ABC8 +AA48 +ABC8 +AA48 +EBD4 +0A54 +1254 +02E2 +ENDCHAR +STARTCHAR uni5689 +ENCODING 22153 +BBX 15 16 0 -2 +BITMAP +0284 +0284 +EAA4 +A6C4 +A29E +AFE4 +A004 +A454 +A28C +AFE4 +E104 +A7C4 +0104 +01C4 +0E14 +0008 +ENDCHAR +STARTCHAR uni568A +ENCODING 22154 +BBX 15 15 1 -1 +BITMAP +0040 +0080 +03F8 +F208 +93F8 +9208 +97FC +9444 +97FC +9444 +97FC +F000 +0FFE +0210 +0C10 +ENDCHAR +STARTCHAR uni568B +ENCODING 22155 +BBX 14 16 1 -2 +BITMAP +0080 +0FF8 +E080 +A7F8 +A000 +AFFC +A004 +A7F0 +A080 +AFFC +E000 +AFFC +0010 +0FFC +0950 +0F30 +ENDCHAR +STARTCHAR uni568C +ENCODING 22156 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFE +90A0 +9F5E +9554 +9554 +9B5A +9000 +9204 +93FC +F204 +03FC +0404 +0804 +ENDCHAR +STARTCHAR uni568D +ENCODING 22157 +BBX 14 15 1 -1 +BITMAP +0080 +07F0 +E090 +AFFC +A090 +A7F0 +A080 +AFFC +A000 +A548 +E8A4 +A7F0 +0550 +0550 +1FFC +ENDCHAR +STARTCHAR uni568E +ENCODING 22158 +BBX 15 16 0 -2 +BITMAP +0040 +07FE +F000 +91F8 +9108 +91F8 +9000 +97FE +9402 +93F8 +F180 +9644 +01B8 +0668 +01A6 +0E60 +ENDCHAR +STARTCHAR uni568F +ENCODING 22159 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +07FC +F040 +9FFE +9A4A +93F8 +9248 +93F8 +9000 +9FFE +F244 +0270 +0540 +18FE +ENDCHAR +STARTCHAR uni5690 +ENCODING 22160 +BBX 14 16 1 -2 +BITMAP +0248 +0150 +F7FC +9514 +91F0 +9218 +93E0 +9204 +91FC +9000 +F3F8 +9208 +03F8 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni5691 +ENCODING 22161 +BBX 15 16 0 -2 +BITMAP +003C +07C0 +F040 +9FFE +9040 +97FC +9554 +94E4 +97FC +9040 +F7FC +9040 +0FFE +0000 +0524 +0892 +ENDCHAR +STARTCHAR uni5692 +ENCODING 22162 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +EFFC +A910 +AFBC +A910 +ABB8 +AD54 +A910 +A880 +E910 +ABE0 +0840 +0890 +13F8 +2108 +ENDCHAR +STARTCHAR uni5693 +ENCODING 22163 +BBX 14 16 1 -2 +BITMAP +0100 +0080 +EFFC +A804 +B448 +A778 +A948 +B550 +AA20 +A5D0 +E808 +B7F4 +0080 +0490 +0888 +0180 +ENDCHAR +STARTCHAR uni5694 +ENCODING 22164 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +07FC +F040 +9FFE +9A4A +93F8 +9248 +93F8 +9104 +9FFA +F242 +0270 +0540 +18FE +ENDCHAR +STARTCHAR uni5695 +ENCODING 22165 +BBX 15 15 1 -1 +BITMAP +0100 +03F0 +F420 +9FFC +9444 +97FC +9444 +97FC +9524 +9892 +97FC +F404 +07FC +0404 +07FC +ENDCHAR +STARTCHAR uni5696 +ENCODING 22166 +BBX 14 16 1 -2 +BITMAP +0110 +07BC +F110 +93B8 +9110 +97BC +9110 +97F8 +9008 +93F8 +F008 +97F8 +0080 +0548 +0514 +08F4 +ENDCHAR +STARTCHAR uni5697 +ENCODING 22167 +BBX 15 16 0 -2 +BITMAP +03F8 +0208 +F3F8 +9208 +93F8 +9110 +97FC +9110 +9FFE +9110 +F248 +9554 +00E0 +0150 +0248 +00C0 +ENDCHAR +STARTCHAR uni5698 +ENCODING 22168 +BBX 15 16 0 -2 +BITMAP +07FC +0080 +E3F8 +A208 +A3F8 +A208 +AFFE +A882 +A548 +A514 +E8F4 +A100 +03F8 +0508 +00F0 +0F0E +ENDCHAR +STARTCHAR uni5699 +ENCODING 22169 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F27C +9240 +9FFE +9514 +9514 +96AC +9404 +97FC +9514 +F514 +06AC +0404 +07FC +ENDCHAR +STARTCHAR uni569A +ENCODING 22170 +BBX 14 15 2 -1 +BITMAP +FDF8 +8508 +FDF8 +0000 +FFFC +8100 +FFF8 +8008 +FFF8 +8100 +FFFC +0000 +FDF8 +8508 +FDF8 +ENDCHAR +STARTCHAR uni569B +ENCODING 22171 +BBX 15 16 0 -2 +BITMAP +0444 +04E4 +E8A8 +AAAA +AEEE +A4A4 +AAAA +AEEE +A242 +A040 +EFFE +A0E0 +0150 +0248 +0C46 +0040 +ENDCHAR +STARTCHAR uni569C +ENCODING 22172 +BBX 14 15 1 -1 +BITMAP +03F8 +0248 +F358 +9248 +93F8 +9040 +93F8 +9040 +97FC +92A8 +F454 +9040 +03F8 +0040 +07FC +ENDCHAR +STARTCHAR uni569D +ENCODING 22173 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +F7FE +9488 +97FE +9488 +97FE +9420 +95FC +9524 +95FC +F924 +09FC +1088 +0306 +ENDCHAR +STARTCHAR uni569E +ENCODING 22174 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +3FF0 +0200 +1FE0 +0000 +1FE0 +1020 +FFFC +1020 +7CF8 +0000 +7CF8 +4488 +7CF8 +ENDCHAR +STARTCHAR uni569F +ENCODING 22175 +BBX 15 16 0 -2 +BITMAP +0090 +031E +F12A +97CA +910A +9392 +9522 +9956 +9088 +9124 +F222 +94A8 +0070 +01AC +0622 +0060 +ENDCHAR +STARTCHAR uni56A0 +ENCODING 22176 +BBX 15 15 1 -1 +BITMAP +0202 +0CEA +08AA +EAAA +AEAA +A96A +A28A +A44A +ABAA +A10A +A7CA +E922 +0542 +01E2 +0F0E +ENDCHAR +STARTCHAR uni56A1 +ENCODING 22177 +BBX 15 16 0 -2 +BITMAP +0508 +0508 +EFBE +A508 +A708 +A208 +AFBE +AA80 +AA88 +AF88 +E23E +AF88 +0208 +0208 +023E +0200 +ENDCHAR +STARTCHAR uni56A2 +ENCODING 22178 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +1110 +1FF0 +0100 +FFFE +9452 +2FE8 +C446 +3FF8 +0440 +FFFE +0848 +F330 +1C0E +ENDCHAR +STARTCHAR uni56A3 +ENCODING 22179 +BBX 15 16 0 -2 +BITMAP +3EF8 +2288 +3EF8 +0000 +FFFE +0100 +1FF0 +1010 +1110 +02C0 +0C30 +7008 +0000 +3EF8 +2288 +3EF8 +ENDCHAR +STARTCHAR uni56A4 +ENCODING 22180 +BBX 14 16 1 -2 +BITMAP +0040 +0FFC +E910 +AFBC +A910 +ABB8 +AD54 +A918 +ABE0 +A840 +EBF8 +A840 +0FFC +1040 +1140 +2080 +ENDCHAR +STARTCHAR uni56A5 +ENCODING 22181 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +0FFE +F110 +91F0 +9208 +9EEA +92AC +92A8 +92A8 +96EA +FA06 +0000 +06A8 +18A6 +ENDCHAR +STARTCHAR uni56A6 +ENCODING 22182 +BBX 14 15 1 -2 +BITMAP +0FFC +E888 +AB30 +A910 +AFBC +A910 +ABB8 +AD54 +A910 +E840 +AA40 +0A78 +1240 +1240 +2FFC +ENDCHAR +STARTCHAR uni56A7 +ENCODING 22183 +BBX 14 16 1 -2 +BITMAP +0080 +00F8 +F080 +97F8 +9488 +97E0 +9488 +95F8 +9550 +95F0 +F550 +95F0 +0400 +0BF8 +0AA8 +17FC +ENDCHAR +STARTCHAR uni56A8 +ENCODING 22184 +BBX 15 15 1 -1 +BITMAP +0120 +0120 +FFFE +94A0 +953C +9FC4 +903C +97A0 +94BC +97A0 +94BC +F7A0 +04BC +04A2 +059E +ENDCHAR +STARTCHAR uni56A9 +ENCODING 22185 +BBX 15 15 1 -1 +BITMAP +0214 +0412 +E8FE +A510 +A27C +A454 +A57C +AB54 +BCFC +A254 +AA08 +EB7E +1228 +1208 +0218 +ENDCHAR +STARTCHAR uni56AA +ENCODING 22186 +BBX 14 16 1 -2 +BITMAP +07BC +04A4 +F7BC +94A4 +97BC +9484 +94F4 +9514 +9624 +95B4 +F514 +95B4 +0514 +05F4 +0414 +0408 +ENDCHAR +STARTCHAR uni56AB +ENCODING 22187 +BBX 15 16 0 -2 +BITMAP +0400 +023C +EFA4 +A024 +A8BC +A524 +AFA4 +A23C +A224 +AFA4 +E23C +AB10 +0A98 +12A8 +0A2A +0446 +ENDCHAR +STARTCHAR uni56AC +ENCODING 22188 +BBX 15 15 1 -1 +BITMAP +0200 +027E +EB90 +AA3C +AA24 +AA3C +BFA4 +A224 +AA3C +AAA4 +B2A4 +E6BC +0110 +0224 +1CC2 +ENDCHAR +STARTCHAR uni56AD +ENCODING 22189 +BBX 15 15 1 -1 +BITMAP +1000 +FEFE +1010 +7C10 +0020 +7C68 +44A4 +7D22 +2820 +FE00 +00FC +7C84 +4484 +4484 +7CFC +ENDCHAR +STARTCHAR uni56AE +ENCODING 22190 +BBX 15 15 1 -1 +BITMAP +23C0 +201E +4BD2 +D252 +23D4 +2A14 +5BD2 +EA12 +13DC +2410 +FFFC +4004 +4FE4 +4824 +4FEC +ENDCHAR +STARTCHAR uni56AF +ENCODING 22191 +BBX 15 16 0 -2 +BITMAP +07FC +0040 +F7FE +9442 +9B5C +9040 +975C +9120 +93FC +9620 +FBFC +9220 +03FC +0220 +03FE +0200 +ENDCHAR +STARTCHAR uni56B0 +ENCODING 22192 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9490 +97FC +9490 +95D8 +96B4 +9490 +97FC +F440 +94F8 +0588 +0688 +08F8 +1088 +ENDCHAR +STARTCHAR uni56B1 +ENCODING 22193 +BBX 14 16 1 -2 +BITMAP +0210 +03D8 +E214 +AFD0 +AA50 +ABBC +AE50 +A9D4 +A814 +AFD4 +E818 +AFD8 +1454 +17D4 +22AC +0FC4 +ENDCHAR +STARTCHAR uni56B2 +ENCODING 22194 +BBX 15 15 1 -1 +BITMAP +0800 +09DE +FF52 +01DE +3E00 +22FC +3EA4 +00FC +7EA4 +04FC +0E20 +F9FE +0820 +0820 +3820 +ENDCHAR +STARTCHAR uni56B3 +ENCODING 22195 +BBX 13 15 2 -1 +BITMAP +1000 +6570 +4210 +7570 +4210 +4510 +FFF8 +9208 +9FC8 +2200 +FFF8 +0000 +3FE0 +2020 +3FE0 +ENDCHAR +STARTCHAR uni56B4 +ENCODING 22196 +BBX 15 15 1 -1 +BITMAP +3EF8 +2288 +3EF8 +0000 +7FFE +4020 +5E20 +447E +7F48 +52A8 +5E28 +5210 +5E28 +B244 +0282 +ENDCHAR +STARTCHAR uni56B5 +ENCODING 22197 +BBX 14 16 1 -2 +BITMAP +03E0 +0420 +EFF8 +A408 +A7F8 +A448 +A770 +A444 +A3FC +A420 +EFF8 +A488 +07F8 +01A0 +0294 +0C7C +ENDCHAR +STARTCHAR uni56B6 +ENCODING 22198 +BBX 15 14 1 -1 +BITMAP +0FBE +08A2 +EFBE +A8A2 +AFBE +A8A2 +AFBE +A514 +A8A2 +AFFE +E108 +0790 +00F0 +0F8C +ENDCHAR +STARTCHAR uni56B7 +ENCODING 22199 +BBX 15 16 0 -2 +BITMAP +0040 +07FC +F000 +93B8 +92A8 +93B8 +9110 +97FC +9110 +97FC +F110 +9FFE +0128 +0310 +0D48 +0186 +ENDCHAR +STARTCHAR uni56B8 +ENCODING 22200 +BBX 15 16 0 -2 +BITMAP +0008 +0FE8 +E928 +AB68 +A9AE +A928 +AFE8 +A108 +AFE8 +A11E +E112 +BFF2 +0012 +1552 +155E +2012 +ENDCHAR +STARTCHAR uni56B9 +ENCODING 22201 +BBX 16 16 0 -2 +BITMAP +0820 +083C +EE20 +B4FE +A4A2 +A4B8 +BFE2 +A49E +B582 +B5BC +F5AA +B79C +18FF +0108 +0128 +0210 +ENDCHAR +STARTCHAR uni56BA +ENCODING 22202 +BBX 14 16 1 -2 +BITMAP +03F8 +12A8 +EBF8 +A910 +A0A0 +A7FC +B880 +A944 +AA68 +A8B0 +EB68 +A8A4 +0B24 +08A0 +1440 +23FC +ENDCHAR +STARTCHAR uni56BB +ENCODING 22203 +BBX 14 15 1 -2 +BITMAP +F7BC +9124 +9224 +97A4 +94A4 +F4BC +0780 +F4BC +97A4 +94A4 +94A4 +97A4 +F03C +9324 +0480 +ENDCHAR +STARTCHAR uni56BC +ENCODING 22204 +BBX 15 15 1 -1 +BITMAP +0038 +07C8 +0824 +EFFC +A924 +AFFC +A000 +AF84 +A8BE +AF84 +A824 +EF94 +0814 +0F84 +081C +ENDCHAR +STARTCHAR uni56BD +ENCODING 22205 +BBX 14 16 1 -2 +BITMAP +0220 +0FA0 +E23C +AF48 +A2A8 +BFA8 +A410 +A728 +A944 +B7F8 +E408 +A7F8 +0408 +07F8 +0210 +0408 +ENDCHAR +STARTCHAR uni56BE +ENCODING 22206 +BBX 14 16 1 -2 +BITMAP +0110 +07FC +F110 +97BC +94A4 +97BC +9140 +9120 +93FC +9240 +F7F8 +9A40 +03F8 +0240 +03FC +0200 +ENDCHAR +STARTCHAR uni56BF +ENCODING 22207 +BBX 14 16 1 -2 +BITMAP +0210 +0FFC +E250 +A7FC +A440 +AFF8 +B440 +A7F8 +A440 +A7FC +E100 +A638 +0408 +0738 +0408 +07F8 +ENDCHAR +STARTCHAR uni56C0 +ENCODING 22208 +BBX 15 15 1 -1 +BITMAP +0208 +027E +EF88 +A23E +AFAA +AABE +AAAA +AFBE +AA8C +AABA +AF84 +E27E +0F84 +0224 +020C +ENDCHAR +STARTCHAR uni56C1 +ENCODING 22209 +BBX 15 14 1 -1 +BITMAP +0FFC +E210 +A3F0 +A21C +AFF0 +A010 +BFFE +A924 +AF3C +A924 +EF3C +0924 +3F7C +0104 +ENDCHAR +STARTCHAR uni56C2 +ENCODING 22210 +BBX 15 14 1 -1 +BITMAP +7EFC +4284 +FFFE +0100 +3FF8 +2008 +3FF8 +2008 +3FF8 +C006 +7EFC +4284 +4284 +7EFC +ENDCHAR +STARTCHAR uni56C3 +ENCODING 22211 +BBX 15 15 1 -1 +BITMAP +0428 +0428 +1F50 +E07E +AAC8 +AA48 +B57C +A448 +BF48 +A448 +AE7C +ED48 +1548 +2448 +047E +ENDCHAR +STARTCHAR uni56C4 +ENCODING 22212 +BBX 15 16 0 -2 +BITMAP +0418 +0214 +EF90 +A53E +AAA8 +ADE8 +A8BE +AFA8 +A228 +AFBE +EAA8 +AAA8 +0BA8 +08BE +0AA0 +0920 +ENDCHAR +STARTCHAR uni56C5 +ENCODING 22213 +BBX 15 14 1 -1 +BITMAP +EEFC +AA84 +EE84 +00FC +7CA8 +54A8 +7CFC +54A8 +54A8 +7CFE +112A +FF24 +1034 +10C2 +ENDCHAR +STARTCHAR uni56C6 +ENCODING 22214 +BBX 14 16 1 -2 +BITMAP +0110 +07FC +F110 +93F8 +9248 +93F8 +9248 +97FC +9454 +95F4 +F44C +93F8 +0248 +03F8 +0044 +07FC +ENDCHAR +STARTCHAR uni56C7 +ENCODING 22215 +BBX 14 16 1 -2 +BITMAP +1F7C +0000 +EF78 +A948 +AD68 +A948 +A080 +AFFC +A940 +AFF8 +E948 +AFF8 +0A24 +13B8 +1224 +239C +ENDCHAR +STARTCHAR uni56C8 +ENCODING 22216 +BBX 15 15 1 -1 +BITMAP +0120 +1FFE +0120 +E210 +AF90 +A23C +BFD4 +A8B4 +B7DC +A214 +AFA2 +E000 +1FFE +0110 +0FEC +ENDCHAR +STARTCHAR uni56C9 +ENCODING 22217 +BBX 15 15 1 -1 +BITMAP +07FC +0524 +F524 +97FC +9224 +9428 +9D7E +92C8 +947C +9548 +9EC8 +F37C +0AC8 +1248 +027E +ENDCHAR +STARTCHAR uni56CA +ENCODING 22218 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +1110 +1FF0 +0100 +FFFE +A28A +3EF8 +0240 +3FF8 +0440 +FFFE +0888 +F670 +181E +ENDCHAR +STARTCHAR uni56CB +ENCODING 22219 +BBX 14 16 1 -2 +BITMAP +0A50 +0F7C +F290 +AF7C +A630 +AB54 +B28C +A7F8 +A408 +A7F8 +E408 +A7F8 +0408 +07F8 +0210 +0408 +ENDCHAR +STARTCHAR uni56CC +ENCODING 22220 +BBX 15 16 0 -2 +BITMAP +0110 +0FFE +E510 +A400 +AF06 +B138 +AF88 +AA88 +AABE +AF88 +EA9C +AF9A +0028 +1548 +1548 +0008 +ENDCHAR +STARTCHAR uni56CD +ENCODING 22221 +BBX 15 15 1 -1 +BITMAP +1010 +FEFE +1010 +7C7C +0000 +7C7C +4444 +7C7C +2828 +FEFE +0000 +7C7C +4444 +4444 +7C7C +ENDCHAR +STARTCHAR uni56CE +ENCODING 22222 +BBX 15 15 1 -1 +BITMAP +0018 +0E44 +0A82 +EBFE +AED6 +AABA +AA92 +AEFE +AA00 +AA7C +AA44 +EE7C +0844 +1244 +217C +ENDCHAR +STARTCHAR uni56CF +ENCODING 22223 +BBX 15 16 0 -2 +BITMAP +2810 +29FE +FE10 +28FC +3800 +10FC +7C84 +54FC +7C48 +11FE +7C00 +10FC +FE84 +2884 +44FC +8284 +ENDCHAR +STARTCHAR uni56D0 +ENCODING 22224 +BBX 15 16 0 -2 +BITMAP +0108 +01EC +E10A +AFEA +A928 +ABC8 +A93E +AFE8 +A948 +ABE8 +EA28 +AB68 +0AA8 +0BF4 +0AB4 +12A2 +ENDCHAR +STARTCHAR uni56D1 +ENCODING 22225 +BBX 15 15 1 -1 +BITMAP +0FFC +0804 +EFFC +A840 +AB58 +A840 +ABFC +AA94 +ABFC +AC44 +EBFA +124A +13FA +2052 +07EE +ENDCHAR +STARTCHAR uni56D2 +ENCODING 22226 +BBX 14 16 1 -2 +BITMAP +0220 +0FFC +E220 +AF78 +A948 +AF78 +A948 +AF78 +A888 +AFF8 +EAA8 +ABE8 +0888 +09C8 +0AA8 +0890 +ENDCHAR +STARTCHAR uni56D3 +ENCODING 22227 +BBX 15 15 1 -1 +BITMAP +0200 +0FBE +0212 +EF92 +A222 +AFA2 +A134 +A120 +BFFE +AA24 +AD54 +EFFC +0A24 +0D54 +0FFC +ENDCHAR +STARTCHAR uni56D4 +ENCODING 22228 +BBX 14 16 1 -2 +BITMAP +0080 +0FF8 +E490 +A7F0 +A080 +BFFC +B554 +A770 +A220 +AFF8 +E220 +9FFC +0250 +0620 +1A90 +030C +ENDCHAR +STARTCHAR uni56D5 +ENCODING 22229 +BBX 14 16 1 -2 +BITMAP +0F20 +0A3C +EF50 +A908 +AF7C +AA54 +AF7C +A000 +A7F0 +A410 +E7F0 +A410 +07F0 +0140 +0248 +0C38 +ENDCHAR +STARTCHAR uni56D6 +ENCODING 22230 +BBX 15 16 0 -2 +BITMAP +0210 +07DE +E928 +AFFE +A912 +AFFE +A228 +A444 +A9FE +AF48 +E27E +A548 +0F7E +0048 +157E +1540 +ENDCHAR +STARTCHAR uni56D7 +ENCODING 22231 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni56D8 +ENCODING 22232 +BBX 13 14 2 -1 +BITMAP +FFF8 +8008 +8008 +9F88 +9088 +9088 +9F88 +9008 +9048 +9048 +8FC8 +8008 +8008 +8038 +ENDCHAR +STARTCHAR uni56D9 +ENCODING 22233 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8008 +8008 +FF08 +8108 +8108 +8108 +8108 +FF08 +8108 +8008 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56DA +ENCODING 22234 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8204 +8204 +8204 +8204 +8204 +8504 +8504 +8884 +9044 +A034 +8004 +FFFC +ENDCHAR +STARTCHAR uni56DB +ENCODING 22235 +BBX 14 12 1 0 +BITMAP +FFFC +8884 +8884 +8884 +8884 +8884 +9084 +A07C +C004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni56DC +ENCODING 22236 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8008 +8208 +8208 +8408 +8408 +8888 +9048 +BFE8 +9028 +8008 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56DD +ENCODING 22237 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8008 +9FC8 +8088 +8108 +8208 +BFE8 +8208 +8208 +8208 +8A08 +8408 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56DE +ENCODING 22238 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +8004 +8FC4 +8844 +8844 +8844 +8844 +8FC4 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni56DF +ENCODING 22239 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0400 +FFF8 +8008 +8048 +9048 +8888 +8488 +8308 +8288 +8C48 +B048 +8008 +FFF8 +ENDCHAR +STARTCHAR uni56E0 +ENCODING 22240 +BBX 13 14 2 -1 +BITMAP +FFF8 +8008 +8208 +8208 +BFE8 +8208 +8208 +8508 +8508 +8888 +B068 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni56E1 +ENCODING 22241 +BBX 13 15 1 -2 +BITMAP +FFF8 +8408 +8408 +8408 +FFF8 +8888 +8888 +9108 +8D08 +8208 +8508 +8888 +9048 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56E2 +ENCODING 22242 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8108 +8108 +BFE8 +8108 +8308 +8508 +8908 +9108 +A108 +8508 +8208 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56E3 +ENCODING 22243 +BBX 13 14 2 -1 +BITMAP +FFF8 +8008 +8088 +8088 +BFE8 +8088 +9088 +8888 +8888 +8088 +8088 +8388 +8008 +FFF8 +ENDCHAR +STARTCHAR uni56E4 +ENCODING 22244 +BBX 13 15 1 -2 +BITMAP +FFF8 +8208 +8208 +BFE8 +8208 +9248 +9248 +9FC8 +8228 +8228 +8228 +81E8 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56E5 +ENCODING 22245 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8408 +8208 +BFE8 +8008 +8008 +8F88 +8888 +8888 +88A8 +9068 +A008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56E6 +ENCODING 22246 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8208 +8208 +BA28 +8B48 +8A88 +9248 +9228 +A228 +CA08 +8408 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56E7 +ENCODING 22247 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8888 +8848 +9028 +A028 +C008 +8F88 +8888 +8888 +8888 +8888 +8888 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56E8 +ENCODING 22248 +BBX 13 14 2 -1 +BITMAP +FFF8 +8008 +8008 +BFE8 +8208 +8608 +8A88 +9248 +E238 +8208 +8208 +8208 +8008 +FFF8 +ENDCHAR +STARTCHAR uni56E9 +ENCODING 22249 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8008 +9FC8 +8008 +8008 +BFE8 +8408 +8888 +9048 +BFE8 +9028 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56EA +ENCODING 22250 +BBX 13 16 1 -2 +BITMAP +0800 +1000 +FFF8 +8008 +8108 +9128 +8A28 +8448 +8A88 +9108 +A288 +8448 +9848 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56EB +ENCODING 22251 +BBX 13 15 1 -2 +BITMAP +FFF8 +8808 +8808 +8FE8 +92A8 +92A8 +A4A8 +8528 +8928 +9228 +8548 +8888 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56EC +ENCODING 22252 +BBX 13 15 1 -2 +BITMAP +FFF8 +8888 +8888 +8888 +8F88 +8888 +8888 +8888 +8F88 +8888 +8888 +8888 +8888 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56ED +ENCODING 22253 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +9FC8 +8008 +8008 +BFE8 +8908 +8908 +8908 +9128 +9128 +A0E8 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56EE +ENCODING 22254 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8504 +8524 +8944 +9984 +A904 +8904 +8904 +8914 +8914 +88F4 +8004 +FFFC +ENDCHAR +STARTCHAR uni56EF +ENCODING 22255 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8008 +BFE8 +8208 +8208 +9FC8 +8208 +8208 +8208 +BFE8 +8008 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56F0 +ENCODING 22256 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8204 +8204 +BFF4 +8704 +8684 +8A44 +9224 +A214 +8204 +8204 +8004 +FFFC +ENDCHAR +STARTCHAR uni56F1 +ENCODING 22257 +BBX 13 16 1 -2 +BITMAP +0800 +1000 +FFF8 +8408 +8408 +8FE8 +9028 +A448 +8288 +8108 +8288 +8C48 +B008 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56F2 +ENCODING 22258 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8444 +8444 +9FF4 +8444 +8444 +8444 +BFF4 +8444 +8844 +B044 +8004 +FFFC +ENDCHAR +STARTCHAR uni56F3 +ENCODING 22259 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8204 +9114 +8914 +8824 +8024 +8E44 +8184 +8144 +8624 +B814 +8004 +FFFC +ENDCHAR +STARTCHAR uni56F4 +ENCODING 22260 +BBX 13 15 1 -2 +BITMAP +FFF8 +8208 +8208 +BFE8 +8208 +9FC8 +8208 +BFE8 +8228 +8228 +82A8 +8248 +8208 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56F5 +ENCODING 22261 +BBX 13 15 1 -2 +BITMAP +FFF8 +8208 +8208 +8508 +8888 +9048 +A938 +CA08 +8C08 +8848 +8848 +87C8 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56F6 +ENCODING 22262 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8784 +8084 +8444 +8824 +B214 +8204 +9FE4 +8204 +8204 +BFF4 +8004 +FFFC +ENDCHAR +STARTCHAR uni56F7 +ENCODING 22263 +BBX 13 14 2 -1 +BITMAP +FFF8 +8008 +81C8 +9E08 +8208 +8208 +BFE8 +8A88 +8A88 +9248 +A228 +C218 +8208 +FFF8 +ENDCHAR +STARTCHAR uni56F8 +ENCODING 22264 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8008 +BFE8 +8208 +8208 +93C8 +9208 +9208 +9208 +BFE8 +8008 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56F9 +ENCODING 22265 +BBX 14 14 1 -1 +BITMAP +FFFC +8204 +8504 +88C4 +B034 +8FC4 +8004 +9FE4 +8224 +8224 +82E4 +8204 +8004 +FFFC +ENDCHAR +STARTCHAR uni56FA +ENCODING 22266 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8204 +8204 +BFF4 +8204 +8204 +8FC4 +8844 +8844 +8844 +8FC4 +8004 +FFFC +ENDCHAR +STARTCHAR uni56FB +ENCODING 22267 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +BFC8 +A048 +A048 +BFC8 +A208 +BFE8 +A208 +A128 +A8A8 +B068 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56FC +ENCODING 22268 +BBX 13 15 1 -2 +BITMAP +FFF8 +8408 +8408 +8888 +9048 +BFE8 +8028 +9FC8 +9048 +9048 +9FC8 +9048 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56FD +ENCODING 22269 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +9FE4 +8204 +8204 +8204 +9FE4 +8204 +8244 +8224 +8224 +BFF4 +8004 +FFFC +ENDCHAR +STARTCHAR uni56FE +ENCODING 22270 +BBX 13 15 1 -2 +BITMAP +FFF8 +8408 +8408 +8FC8 +9888 +A508 +8208 +8D88 +F078 +8608 +8108 +8C08 +8308 +FFF8 +8008 +ENDCHAR +STARTCHAR uni56FF +ENCODING 22271 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8204 +BFF4 +8404 +8FE4 +9824 +AFE4 +8824 +8FE4 +8824 +8864 +8004 +FFFC +ENDCHAR +STARTCHAR uni5700 +ENCODING 22272 +BBX 14 14 1 -1 +BITMAP +FFFC +8884 +9084 +A2F4 +8204 +BFF4 +8404 +87E4 +8424 +8824 +9024 +A1C4 +8004 +FFFC +ENDCHAR +STARTCHAR uni5701 +ENCODING 22273 +BBX 13 15 1 -2 +BITMAP +FFF8 +8208 +BFE8 +8008 +9FC8 +8008 +9FC8 +8008 +9FC8 +9048 +9FC8 +9048 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni5702 +ENCODING 22274 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +9FC8 +8408 +8A28 +B348 +8588 +8948 +B348 +8528 +8928 +B508 +8208 +FFF8 +8008 +ENDCHAR +STARTCHAR uni5703 +ENCODING 22275 +BBX 14 14 1 -1 +BITMAP +FFFC +8084 +8244 +BFF4 +8204 +9FE4 +9224 +9FE4 +9224 +9FE4 +9224 +9264 +8004 +FFFC +ENDCHAR +STARTCHAR uni5704 +ENCODING 22276 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +9FE4 +8204 +9FC4 +8444 +BFF4 +8004 +8FC4 +8844 +8844 +8FC4 +8004 +FFFC +ENDCHAR +STARTCHAR uni5705 +ENCODING 22277 +BBX 13 16 1 -2 +BITMAP +7FE0 +0040 +0C80 +0300 +FFF8 +8888 +8508 +BFE8 +8208 +8208 +FFF8 +8208 +8208 +8208 +FFF8 +8008 +ENDCHAR +STARTCHAR uni5706 +ENCODING 22278 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +9FC8 +9048 +9FC8 +8008 +BFE8 +A028 +A228 +A228 +A528 +8888 +9048 +FFF8 +8008 +ENDCHAR +STARTCHAR uni5707 +ENCODING 22279 +BBX 13 15 1 -2 +BITMAP +FFF8 +8208 +8508 +8888 +9748 +A028 +9FC8 +9548 +9548 +9FC8 +9548 +9548 +90C8 +FFF8 +8008 +ENDCHAR +STARTCHAR uni5708 +ENCODING 22280 +BBX 14 14 1 -1 +BITMAP +FFFC +8A44 +9224 +9FE4 +8484 +BFF4 +8844 +9FE4 +A854 +8BC4 +8814 +87F4 +8004 +FFFC +ENDCHAR +STARTCHAR uni5709 +ENCODING 22281 +BBX 13 14 2 -1 +BITMAP +FFF8 +8208 +8208 +9FC8 +8208 +BFE8 +8888 +8508 +BFE8 +8208 +9FC8 +8208 +8008 +FFF8 +ENDCHAR +STARTCHAR uni570A +ENCODING 22282 +BBX 13 14 2 -1 +BITMAP +FFF8 +8208 +BFE8 +8208 +9FC8 +8208 +FFF8 +9248 +9248 +9FC8 +9048 +90C8 +8008 +FFF8 +ENDCHAR +STARTCHAR uni570B +ENCODING 22283 +BBX 14 14 1 -1 +BITMAP +FFFC +80A4 +8094 +BFF4 +8084 +9E94 +9294 +9EA4 +8044 +86C4 +B92C +8214 +8004 +FFFC +ENDCHAR +STARTCHAR uni570C +ENCODING 22284 +BBX 13 15 1 -2 +BITMAP +FFF8 +8208 +A228 +A228 +BFE8 +8008 +FFF8 +8208 +BFE8 +A528 +A528 +A068 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni570D +ENCODING 22285 +BBX 14 14 1 -1 +BITMAP +FFFC +8204 +9FC4 +8444 +BFF4 +8004 +8FC4 +8844 +9FE4 +9084 +BFF4 +8084 +8084 +FFFC +ENDCHAR +STARTCHAR uni570E +ENCODING 22286 +BBX 13 16 1 -2 +BITMAP +FFF8 +8808 +9048 +BFE8 +8028 +9FC8 +9048 +9FC8 +9048 +9FC8 +9048 +9FC8 +8888 +9048 +FFF8 +8008 +ENDCHAR +STARTCHAR uni570F +ENCODING 22287 +BBX 14 14 1 -1 +BITMAP +FFFC +9224 +8A44 +BFF4 +8484 +BFF4 +8844 +9FA4 +E09C +8F84 +8824 +8FE4 +8004 +FFFC +ENDCHAR +STARTCHAR uni5710 +ENCODING 22288 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +BFE8 +A528 +A528 +BFE8 +8208 +FFF8 +8808 +8FE8 +9028 +A0A8 +C048 +FFF8 +8008 +ENDCHAR +STARTCHAR uni5711 +ENCODING 22289 +BBX 13 16 1 -2 +BITMAP +FFF8 +8248 +BFE8 +8208 +9FC8 +9248 +9FC8 +9248 +9FC8 +9248 +8088 +BFE8 +9088 +8A88 +8108 +FFF8 +ENDCHAR +STARTCHAR uni5712 +ENCODING 22290 +BBX 14 14 1 -1 +BITMAP +FFFC +8204 +9FE4 +8204 +BFF4 +8004 +9FE4 +9024 +9FE4 +8694 +8A64 +B214 +8204 +FFFC +ENDCHAR +STARTCHAR uni5713 +ENCODING 22291 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8FC4 +8844 +8FC4 +8004 +9FE4 +9024 +9FE4 +9024 +9FE4 +8844 +9024 +FFFC +ENDCHAR +STARTCHAR uni5714 +ENCODING 22292 +BBX 13 16 1 -2 +BITMAP +FFF8 +8208 +9FC8 +8208 +BFE8 +8408 +8888 +9FC8 +8008 +9FC8 +9548 +9548 +BFE8 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni5715 +ENCODING 22293 +BBX 14 15 1 -1 +BITMAP +FFFC +8204 +9FE4 +8224 +FFFC +8224 +9FE4 +8204 +FFFC +9024 +9FE4 +9024 +9FE4 +8004 +FFFC +ENDCHAR +STARTCHAR uni5716 +ENCODING 22294 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +9FE4 +9024 +9FE4 +8204 +BFF4 +94A4 +94A4 +97A4 +9024 +9FE4 +8004 +FFFC +ENDCHAR +STARTCHAR uni5717 +ENCODING 22295 +BBX 13 16 1 -2 +BITMAP +FFF8 +8408 +8888 +9FC8 +8208 +FFF8 +8408 +BFE8 +A8A8 +AFA8 +A8A8 +AFA8 +A8A8 +BFE8 +8008 +FFF8 +ENDCHAR +STARTCHAR uni5718 +ENCODING 22296 +BBX 14 14 1 -1 +BITMAP +FFFC +8204 +BFF4 +8204 +9FE4 +9224 +9FE4 +9224 +9FE4 +8244 +9FF4 +8844 +84C4 +FFFC +ENDCHAR +STARTCHAR uni5719 +ENCODING 22297 +BBX 13 15 1 -2 +BITMAP +FFF8 +8888 +9048 +AFA8 +8208 +9FC8 +9548 +9748 +9548 +9748 +9548 +9FC8 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni571A +ENCODING 22298 +BBX 13 16 1 -2 +BITMAP +FFF8 +8208 +9FC8 +9248 +9FC8 +8208 +BFE8 +9048 +9FC8 +9048 +9FC8 +9048 +9FC8 +8888 +9048 +FFF8 +ENDCHAR +STARTCHAR uni571B +ENCODING 22299 +BBX 13 16 1 -2 +BITMAP +FFF8 +8008 +BFE8 +A528 +BFE8 +8208 +9FC8 +8208 +BFE8 +8888 +8508 +9FC8 +8208 +FFF8 +8208 +FFF8 +ENDCHAR +STARTCHAR uni571C +ENCODING 22300 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +9FE4 +9524 +9FE4 +8004 +BFF4 +8844 +8FD4 +8524 +B8C4 +8E34 +8004 +FFFC +ENDCHAR +STARTCHAR uni571D +ENCODING 22301 +BBX 15 15 0 -2 +BITMAP +FFFE +8002 +9112 +9392 +A82A +BBBA +9012 +ABAA +B83A +8382 +AAAA +ABAA +8002 +FFFE +8002 +ENDCHAR +STARTCHAR uni571E +ENCODING 22302 +BBX 15 16 0 -2 +BITMAP +FFFE +9112 +A3A2 +B83A +9392 +A82A +BBBA +8282 +ABAA +8102 +BFFA +8542 +8922 +9112 +FFFE +8002 +ENDCHAR +STARTCHAR uni571F +ENCODING 22303 +BBX 15 14 1 0 +BITMAP +0100 +0100 +0100 +0100 +0100 +7FFC +0100 +0100 +0100 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5720 +ENCODING 22304 +BBX 14 15 0 -1 +BITMAP +1080 +1080 +1080 +1080 +1080 +FE80 +1080 +1080 +1080 +1080 +1680 +1884 +E084 +4084 +007C +ENDCHAR +STARTCHAR uni5721 +ENCODING 22305 +BBX 15 14 1 0 +BITMAP +0100 +0100 +0100 +0100 +0100 +7FFC +0100 +0100 +0110 +0108 +0104 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5722 +ENCODING 22306 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FE +1020 +1020 +FE20 +1020 +1020 +1020 +1020 +1620 +1820 +E020 +4020 +00A0 +0040 +ENDCHAR +STARTCHAR uni5723 +ENCODING 22307 +BBX 15 14 1 -1 +BITMAP +3FF8 +0810 +0460 +0380 +06C0 +1830 +E10E +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5724 +ENCODING 22308 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1040 +1040 +1040 +FE60 +1050 +1048 +1044 +1044 +1640 +1840 +E040 +4040 +0040 +0040 +ENDCHAR +STARTCHAR uni5725 +ENCODING 22309 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0440 +0440 +0440 +0440 +0844 +0844 +1044 +603C +ENDCHAR +STARTCHAR uni5726 +ENCODING 22310 +BBX 15 15 1 -1 +BITMAP +2000 +23C0 +2040 +2040 +F840 +2040 +2040 +20A0 +20A0 +20A0 +3910 +E110 +0208 +0404 +0802 +ENDCHAR +STARTCHAR uni5727 +ENCODING 22311 +BBX 15 14 1 -1 +BITMAP +3FFC +2000 +2080 +2080 +2080 +2080 +2FF8 +2080 +2080 +4080 +4080 +8080 +0080 +3FFE +ENDCHAR +STARTCHAR uni5728 +ENCODING 22312 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +0200 +FFFE +0400 +0440 +1840 +1040 +33FC +5040 +9040 +1040 +1040 +1040 +17FE +ENDCHAR +STARTCHAR uni5729 +ENCODING 22313 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2020 +2020 +F820 +2020 +2020 +27FE +2020 +2020 +3820 +C020 +0020 +0020 +00E0 +ENDCHAR +STARTCHAR uni572A +ENCODING 22314 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +1080 +10FE +1100 +FE00 +10FC +1008 +1010 +1020 +1040 +1C80 +E102 +4102 +00FE +ENDCHAR +STARTCHAR uni572B +ENCODING 22315 +BBX 15 15 0 -1 +BITMAP +1008 +103C +13C0 +1040 +1040 +FE40 +1040 +107E +13C0 +1040 +1640 +1842 +E042 +4042 +003E +ENDCHAR +STARTCHAR uni572C +ENCODING 22316 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2000 +2000 +2000 +FBFE +2080 +2080 +2100 +21FC +2004 +3804 +E004 +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni572D +ENCODING 22317 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +0100 +0100 +7FFC +0000 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni572E +ENCODING 22318 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +11F8 +1008 +1008 +FC08 +1008 +11F8 +1108 +1100 +1100 +1D00 +E102 +4102 +00FE +ENDCHAR +STARTCHAR uni572F +ENCODING 22319 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +2204 +FA04 +2204 +2204 +23FC +2200 +2200 +3A00 +E200 +0202 +0202 +01FE +ENDCHAR +STARTCHAR uni5730 +ENCODING 22320 +BBX 15 15 1 -1 +BITMAP +2040 +2240 +2240 +2240 +2278 +F3C8 +2E48 +2248 +2248 +2258 +2240 +3200 +C202 +0202 +01FE +ENDCHAR +STARTCHAR uni5731 +ENCODING 22321 +BBX 15 16 0 -2 +BITMAP +0020 +0C20 +7020 +1020 +1020 +11FC +1020 +FE20 +1020 +1020 +1020 +1020 +2020 +23FE +4000 +8000 +ENDCHAR +STARTCHAR uni5732 +ENCODING 22322 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +1020 +FC20 +1020 +13FE +1020 +1020 +1020 +1C20 +E020 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni5733 +ENCODING 22323 +BBX 14 15 1 -1 +BITMAP +2004 +2244 +2244 +2244 +FA44 +2244 +2244 +2244 +2244 +2244 +3A44 +E244 +0444 +0404 +0804 +ENDCHAR +STARTCHAR uni5734 +ENCODING 22324 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +2100 +23FE +FA02 +2402 +2002 +2002 +21F2 +2002 +3802 +E002 +0004 +0004 +0038 +ENDCHAR +STARTCHAR uni5735 +ENCODING 22325 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +1040 +1040 +1040 +FE40 +107C +1040 +1040 +1040 +1640 +1840 +E040 +4040 +07FE +ENDCHAR +STARTCHAR uni5736 +ENCODING 22326 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0820 +3118 +C106 +0100 +3FF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5737 +ENCODING 22327 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2040 +2040 +F840 +2060 +2050 +2048 +2040 +2040 +3840 +E040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5738 +ENCODING 22328 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +2020 +F820 +2222 +2222 +2222 +2222 +2222 +3A22 +E222 +0222 +0222 +03FE +ENDCHAR +STARTCHAR uni5739 +ENCODING 22329 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +1200 +FE00 +1200 +1200 +1200 +1200 +1E00 +E200 +4200 +0400 +0400 +0800 +ENDCHAR +STARTCHAR uni573A +ENCODING 22330 +BBX 14 16 0 -2 +BITMAP +2000 +23F0 +2020 +2040 +2080 +F900 +23FC +2124 +2124 +2124 +2224 +3A44 +E444 +4884 +0128 +0210 +ENDCHAR +STARTCHAR uni573B +ENCODING 22331 +BBX 15 15 1 -1 +BITMAP +2018 +21E0 +2100 +2100 +F9FE +2110 +2110 +2110 +2110 +2110 +3A10 +E210 +0410 +0810 +0010 +ENDCHAR +STARTCHAR uni573C +ENCODING 22332 +BBX 15 14 0 -1 +BITMAP +3FF8 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni573D +ENCODING 22333 +BBX 14 16 0 -2 +BITMAP +1100 +1100 +1100 +11FC +12A4 +FCA4 +10A4 +1124 +1124 +1244 +1C44 +E084 +4104 +0204 +0428 +0010 +ENDCHAR +STARTCHAR uni573E +ENCODING 22334 +BBX 15 16 0 -2 +BITMAP +1000 +17F8 +1108 +1110 +1110 +FD20 +113C +1104 +1104 +1288 +1E88 +E250 +4420 +0450 +0888 +0306 +ENDCHAR +STARTCHAR uni573F +ENCODING 22335 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1050 +1088 +FD04 +1202 +1088 +1088 +1088 +1088 +1C88 +E088 +4108 +0108 +0208 +ENDCHAR +STARTCHAR uni5740 +ENCODING 22336 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +2440 +F440 +2440 +247C +2440 +2440 +2440 +3440 +C440 +0440 +0440 +1FFE +ENDCHAR +STARTCHAR uni5741 +ENCODING 22337 +BBX 15 16 0 -2 +BITMAP +1004 +101E +11F0 +1110 +1110 +FD10 +1110 +11FE +1110 +1110 +1110 +1D08 +E10A +414A +0186 +0102 +ENDCHAR +STARTCHAR uni5742 +ENCODING 22338 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2200 +2200 +FA00 +23FC +2284 +2284 +2248 +3A48 +E430 +0420 +0850 +1088 +0306 +ENDCHAR +STARTCHAR uni5743 +ENCODING 22339 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +1000 +1000 +FC00 +13FE +1090 +1090 +1090 +1090 +1C90 +E112 +4112 +020E +0400 +ENDCHAR +STARTCHAR uni5744 +ENCODING 22340 +BBX 15 16 0 -2 +BITMAP +2000 +21F0 +2110 +2110 +2110 +FA0E +2400 +23F8 +2108 +2110 +2090 +38A0 +E040 +40A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni5745 +ENCODING 22341 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +20A0 +20A0 +F110 +2208 +2DF6 +2000 +2000 +23F8 +3008 +C010 +0010 +0020 +0040 +ENDCHAR +STARTCHAR uni5746 +ENCODING 22342 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +2100 +23FE +F208 +2608 +2908 +2110 +2090 +20A0 +3040 +C0A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni5747 +ENCODING 22343 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +21FE +2202 +FA02 +2402 +21E2 +2002 +2002 +2032 +38C2 +C302 +0004 +0004 +0038 +ENDCHAR +STARTCHAR uni5748 +ENCODING 22344 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FC +1204 +1408 +FC00 +11F0 +1110 +1110 +1110 +1110 +1D12 +E212 +4212 +040E +0800 +ENDCHAR +STARTCHAR uni5749 +ENCODING 22345 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +1020 +13FE +1020 +FD24 +1124 +1124 +1124 +11FC +1024 +1C20 +E022 +4022 +001E +ENDCHAR +STARTCHAR uni574A +ENCODING 22346 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +27FE +F880 +2080 +2080 +20FC +2084 +3884 +C104 +0104 +0204 +0404 +0838 +ENDCHAR +STARTCHAR uni574B +ENCODING 22347 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +1090 +1088 +1108 +FD04 +1204 +15FA +1088 +1088 +1088 +1C88 +E108 +4108 +0228 +0410 +ENDCHAR +STARTCHAR uni574C +ENCODING 22348 +BBX 15 15 1 -1 +BITMAP +0080 +0440 +0820 +3018 +DFFE +0208 +0408 +1808 +6170 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni574D +ENCODING 22349 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +2208 +F288 +2248 +2228 +2208 +2FFE +2208 +3208 +C208 +0408 +0408 +0838 +ENDCHAR +STARTCHAR uni574E +ENCODING 22350 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +2100 +21FC +FA04 +2248 +2448 +2040 +2040 +2040 +38A0 +E0A0 +0110 +0208 +0406 +ENDCHAR +STARTCHAR uni574F +ENCODING 22351 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2020 +2020 +2040 +F840 +20D0 +2148 +2244 +2442 +2040 +3840 +E040 +0040 +0040 +ENDCHAR +STARTCHAR uni5750 +ENCODING 22352 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +1110 +1110 +1110 +1110 +2928 +4544 +8102 +0100 +3FFC +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5751 +ENCODING 22353 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2000 +F800 +21F0 +2110 +2110 +2110 +2110 +3910 +C210 +0212 +0412 +080E +ENDCHAR +STARTCHAR uni5752 +ENCODING 22354 +BBX 15 15 0 -1 +BITMAP +2080 +2088 +20B0 +3EC0 +2080 +2084 +2684 +387C +2100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5753 +ENCODING 22355 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +0820 +7FFC +0820 +0820 +FFFE +1020 +2020 +4120 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5754 +ENCODING 22356 +BBX 15 15 0 -1 +BITMAP +0100 +0104 +7D88 +0550 +0920 +1110 +2108 +C506 +0200 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5755 +ENCODING 22357 +BBX 15 15 0 -1 +BITMAP +0078 +1FA0 +1120 +1120 +1120 +1110 +2110 +2108 +4004 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5756 +ENCODING 22358 +BBX 15 14 0 -1 +BITMAP +3FF8 +0000 +0000 +FFFE +0440 +0442 +0842 +303E +C100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5757 +ENCODING 22359 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +13FC +1044 +FC44 +1044 +1044 +13FE +1040 +10A0 +1CA0 +E110 +4208 +0404 +0802 +ENDCHAR +STARTCHAR uni5758 +ENCODING 22360 +BBX 15 15 0 -1 +BITMAP +1000 +17FE +1080 +1080 +1080 +FCF8 +1108 +1108 +1108 +1208 +13F8 +1C10 +E010 +4010 +07FE +ENDCHAR +STARTCHAR uni5759 +ENCODING 22361 +BBX 15 14 0 -1 +BITMAP +7FFE +0888 +0888 +1110 +2220 +1110 +0888 +0888 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni575A +ENCODING 22362 +BBX 15 15 0 -1 +BITMAP +0400 +25FC +2504 +2488 +2450 +2420 +2458 +2586 +0400 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni575B +ENCODING 22363 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +11FC +1000 +1000 +FC00 +13FE +1020 +1020 +1040 +1040 +1C88 +E104 +43FE +0102 +ENDCHAR +STARTCHAR uni575C +ENCODING 22364 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2200 +2220 +2220 +FA20 +22FC +2224 +2224 +2224 +2244 +3A44 +E484 +4484 +0928 +1210 +ENDCHAR +STARTCHAR uni575D +ENCODING 22365 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +1124 +FD24 +1124 +1124 +1124 +1124 +1124 +1C50 +E048 +4084 +0102 +0602 +ENDCHAR +STARTCHAR uni575E +ENCODING 22366 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1104 +1104 +FD04 +1114 +1108 +1100 +11FE +1002 +1C02 +E3FA +4002 +0014 +0008 +ENDCHAR +STARTCHAR uni575F +ENCODING 22367 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +1040 +17FC +1110 +FD10 +1110 +1110 +1110 +10A0 +10A0 +1C40 +E0A0 +4110 +0208 +0C06 +ENDCHAR +STARTCHAR uni5760 +ENCODING 22368 +BBX 15 15 0 -1 +BITMAP +0040 +7C40 +4440 +4840 +44A0 +44A0 +5510 +4908 +4204 +4502 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5761 +ENCODING 22369 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2442 +F444 +2440 +27FC +2504 +2504 +2488 +3450 +C820 +0850 +1088 +0306 +ENDCHAR +STARTCHAR uni5762 +ENCODING 22370 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1124 +10A4 +10A8 +FC20 +11FC +1020 +1020 +1020 +13FE +1C20 +E020 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni5763 +ENCODING 22371 +BBX 15 15 0 -1 +BITMAP +0100 +1110 +0920 +0100 +7FFE +4002 +8104 +0100 +0100 +3FF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5764 +ENCODING 22372 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +2222 +FA22 +23FE +2222 +2222 +2222 +23FE +3820 +E020 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni5765 +ENCODING 22373 +BBX 15 15 0 -1 +BITMAP +1000 +11F8 +1108 +1108 +1108 +FDF8 +1108 +1108 +1108 +11F8 +1108 +1D08 +E108 +4108 +07FE +ENDCHAR +STARTCHAR uni5766 +ENCODING 22374 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +2208 +FA08 +2208 +23F8 +2208 +2208 +2208 +3A08 +C3F8 +0000 +0000 +1FFE +ENDCHAR +STARTCHAR uni5767 +ENCODING 22375 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FE +1020 +1020 +FC40 +1040 +10FC +1184 +1284 +1484 +1C84 +E084 +4084 +00FC +0084 +ENDCHAR +STARTCHAR uni5768 +ENCODING 22376 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +2202 +FA82 +2080 +2080 +208C +20F0 +2080 +3880 +E080 +0082 +0082 +007E +ENDCHAR +STARTCHAR uni5769 +ENCODING 22377 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +2108 +27FE +F108 +2108 +2108 +2108 +21F8 +2108 +3908 +E108 +0108 +0108 +01F8 +ENDCHAR +STARTCHAR uni576A +ENCODING 22378 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +2444 +2444 +F248 +2248 +2040 +2FFE +2040 +3040 +C040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni576B +ENCODING 22379 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +103E +FC20 +1020 +1020 +11FC +1104 +1104 +1D04 +E104 +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni576C +ENCODING 22380 +BBX 15 16 0 -2 +BITMAP +2008 +203C +23D0 +2290 +2290 +FA90 +2290 +2290 +2290 +2288 +2288 +3AC8 +E2A4 +44D4 +0492 +0800 +ENDCHAR +STARTCHAR uni576D +ENCODING 22381 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +1104 +FDFC +1100 +1140 +1144 +1148 +1170 +1D40 +E142 +4242 +023E +0400 +ENDCHAR +STARTCHAR uni576E +ENCODING 22382 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1040 +1040 +1088 +FD04 +13FE +1002 +1000 +11FC +1104 +1D04 +E104 +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni576F +ENCODING 22383 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2020 +2020 +F040 +2050 +20D0 +2148 +2244 +2442 +3040 +C040 +0040 +0000 +07FE +ENDCHAR +STARTCHAR uni5770 +ENCODING 22384 +BBX 14 15 1 -1 +BITMAP +2000 +23FC +2204 +2204 +FAF4 +2294 +2294 +2294 +2294 +2294 +3AF4 +E204 +0204 +0204 +021C +ENDCHAR +STARTCHAR uni5771 +ENCODING 22385 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +1124 +FD24 +1124 +1124 +1124 +13FE +1020 +1C50 +E050 +4088 +0104 +0202 +ENDCHAR +STARTCHAR uni5772 +ENCODING 22386 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1090 +13FC +1094 +FC94 +13FC +1290 +1290 +13FE +1092 +1C92 +E11A +4114 +0210 +0410 +ENDCHAR +STARTCHAR uni5773 +ENCODING 22387 +BBX 15 15 1 -1 +BITMAP +2210 +2210 +2210 +2410 +F47E +2912 +2912 +2512 +2212 +2212 +3212 +C4A2 +05A2 +0642 +188C +ENDCHAR +STARTCHAR uni5774 +ENCODING 22388 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +0100 +7FFC +0420 +0820 +113C +6100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5775 +ENCODING 22389 +BBX 15 14 1 0 +BITMAP +2038 +23C0 +2200 +2200 +FA00 +23FC +2210 +2210 +2210 +2210 +3A10 +C210 +0210 +1FFE +ENDCHAR +STARTCHAR uni5776 +ENCODING 22390 +BBX 15 16 0 -2 +BITMAP +2000 +21F8 +2108 +2148 +2128 +F908 +2108 +27FE +2208 +2288 +2248 +3A08 +E3FE +4008 +0050 +0020 +ENDCHAR +STARTCHAR uni5777 +ENCODING 22391 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2008 +2008 +FBC8 +2248 +2248 +2248 +2248 +2248 +3BC8 +E008 +0008 +0008 +0038 +ENDCHAR +STARTCHAR uni5778 +ENCODING 22392 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +1100 +11FC +1204 +FC04 +11E4 +1124 +1124 +1124 +11E4 +1D24 +E004 +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni5779 +ENCODING 22393 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +1202 +FC04 +1000 +1090 +1090 +1090 +1088 +1D08 +E108 +4104 +0204 +0402 +ENDCHAR +STARTCHAR uni577A +ENCODING 22394 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +1048 +1040 +13FE +FC80 +1080 +10FC +1144 +1144 +1128 +1D28 +E210 +4228 +0444 +0182 +ENDCHAR +STARTCHAR uni577B +ENCODING 22395 +BBX 15 15 1 -1 +BITMAP +2018 +23E0 +2220 +2220 +FA20 +2220 +23FE +2220 +2220 +2210 +3A10 +C390 +0E0A +000A +0FE4 +ENDCHAR +STARTCHAR uni577C +ENCODING 22396 +BBX 15 15 1 -1 +BITMAP +201C +23E0 +2200 +2200 +FA00 +23FE +2210 +2210 +2270 +221C +3A12 +E410 +0410 +0810 +0010 +ENDCHAR +STARTCHAR uni577D +ENCODING 22397 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1050 +1088 +FD24 +1212 +1010 +11FC +1004 +1008 +1C88 +E050 +4020 +0010 +0010 +ENDCHAR +STARTCHAR uni577E +ENCODING 22398 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +1202 +FC04 +1000 +1000 +13FE +1020 +1020 +1C20 +E020 +4020 +00A0 +0040 +ENDCHAR +STARTCHAR uni577F +ENCODING 22399 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +2108 +2208 +F2FE +2608 +2A08 +3248 +2228 +2228 +3208 +C208 +0208 +0208 +0238 +ENDCHAR +STARTCHAR uni5780 +ENCODING 22400 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13E0 +1020 +1124 +FCA4 +10A8 +1020 +13FE +1020 +1020 +1C20 +E020 +4020 +00A0 +0040 +ENDCHAR +STARTCHAR uni5781 +ENCODING 22401 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1080 +10FC +1120 +FE20 +1020 +1020 +13FE +1020 +1050 +1C50 +E088 +4088 +0104 +0202 +ENDCHAR +STARTCHAR uni5782 +ENCODING 22402 +BBX 15 15 1 -1 +BITMAP +0070 +1F80 +0100 +0100 +7FFC +1110 +1110 +FFFE +1110 +1110 +1110 +7FFC +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5783 +ENCODING 22403 +BBX 15 15 0 -1 +BITMAP +1080 +1040 +1040 +1000 +13FC +FC00 +1008 +1108 +1108 +1090 +1090 +1C90 +E0A0 +4020 +07FE +ENDCHAR +STARTCHAR uni5784 +ENCODING 22404 +BBX 15 15 0 -1 +BITMAP +0440 +0420 +FFFE +0910 +1120 +11C0 +2304 +4D04 +80FC +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5785 +ENCODING 22405 +BBX 15 16 0 -2 +BITMAP +1090 +1088 +1088 +1080 +13FE +FCA0 +10A0 +10A4 +10A4 +10A8 +1128 +1D32 +E122 +4262 +029E +0400 +ENDCHAR +STARTCHAR uni5786 +ENCODING 22406 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +207E +2040 +2040 +FBFC +2204 +2204 +2204 +23FC +2204 +3A00 +E200 +4400 +0400 +0800 +ENDCHAR +STARTCHAR uni5787 +ENCODING 22407 +BBX 15 15 0 -1 +BITMAP +2000 +2000 +23DE +2252 +2252 +FA52 +2252 +2252 +2272 +2202 +2202 +3A02 +E202 +43FE +0202 +ENDCHAR +STARTCHAR uni5788 +ENCODING 22408 +BBX 15 15 1 -1 +BITMAP +1048 +1048 +2044 +207E +6FC0 +A020 +2020 +2012 +200A +2104 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5789 +ENCODING 22409 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +23FC +2204 +F404 +27E4 +2A24 +2224 +23E4 +2204 +3238 +C200 +0202 +0202 +01FE +ENDCHAR +STARTCHAR uni578A +ENCODING 22410 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2204 +2204 +2204 +FBFC +2220 +2220 +23FE +2220 +2220 +3A10 +E212 +428A +0306 +0202 +ENDCHAR +STARTCHAR uni578B +ENCODING 22411 +BBX 15 15 1 -1 +BITMAP +0004 +7F84 +1224 +1224 +1224 +FFA4 +1224 +1204 +2204 +400C +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni578C +ENCODING 22412 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +2202 +22FA +FA02 +2202 +22FA +228A +228A +228A +3AFA +E202 +4202 +020A +0204 +ENDCHAR +STARTCHAR uni578D +ENCODING 22413 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1040 +11FC +1104 +FD04 +1104 +11FC +1104 +1104 +11FC +1D04 +E104 +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni578E +ENCODING 22414 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +21F8 +2208 +2510 +F8A0 +2040 +20A0 +2318 +2C06 +23F8 +3A08 +E208 +4208 +03F8 +0208 +ENDCHAR +STARTCHAR uni578F +ENCODING 22415 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1024 +13FE +FC24 +11FC +1020 +1020 +11FC +1020 +1C20 +E3FE +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni5790 +ENCODING 22416 +BBX 15 15 0 -1 +BITMAP +4080 +2080 +09FC +1204 +2448 +E040 +20A0 +2318 +2C06 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5791 +ENCODING 22417 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +20FC +2108 +2290 +F860 +2048 +2190 +263E +2042 +2084 +3B48 +E030 +4020 +00C0 +0700 +ENDCHAR +STARTCHAR uni5792 +ENCODING 22418 +BBX 15 15 0 -1 +BITMAP +0400 +0820 +1010 +3FF8 +0810 +1020 +2448 +7EFC +0204 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5793 +ENCODING 22419 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2080 +F080 +2110 +2220 +2140 +2080 +2108 +3610 +C020 +0050 +0188 +0E04 +ENDCHAR +STARTCHAR uni5794 +ENCODING 22420 +BBX 15 14 0 -1 +BITMAP +7FFC +0440 +0440 +3FF8 +2448 +2448 +3FF8 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5795 +ENCODING 22421 +BBX 15 15 0 -1 +BITMAP +007C +3F80 +2000 +3FFE +2000 +2FF8 +2808 +2808 +2FF8 +2080 +2080 +2FFC +4080 +4080 +BFFE +ENDCHAR +STARTCHAR uni5796 +ENCODING 22422 +BBX 14 16 0 -2 +BITMAP +1040 +1080 +11F8 +1108 +1108 +FD08 +11F8 +1100 +1100 +1100 +11FC +1D04 +E104 +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni5797 +ENCODING 22423 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1090 +1292 +1194 +FC98 +1090 +1198 +1294 +1492 +1090 +1C90 +E112 +4112 +0212 +040E +ENDCHAR +STARTCHAR uni5798 +ENCODING 22424 +BBX 15 16 0 -2 +BITMAP +1090 +1094 +1092 +1112 +1110 +FF7E +1510 +1110 +1110 +1128 +1128 +1D28 +E128 +4144 +0144 +0182 +ENDCHAR +STARTCHAR uni5799 +ENCODING 22425 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1124 +10A4 +10A8 +FC20 +13FE +1090 +1090 +1090 +1090 +1C92 +E112 +4112 +020E +0400 +ENDCHAR +STARTCHAR uni579A +ENCODING 22426 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +0100 +0100 +7FFC +0000 +1020 +1020 +FEFC +1020 +1020 +1E20 +F1FE +ENDCHAR +STARTCHAR uni579B +ENCODING 22427 +BBX 15 16 0 -2 +BITMAP +1000 +11F0 +1110 +1110 +1110 +FD10 +124E +1440 +13FC +1040 +1CE0 +E150 +4248 +0446 +0040 +0040 +ENDCHAR +STARTCHAR uni579C +ENCODING 22428 +BBX 15 15 1 -1 +BITMAP +2000 +27F0 +2090 +209C +F884 +2104 +2204 +2458 +2040 +27FC +38E0 +E150 +0248 +0C46 +0040 +ENDCHAR +STARTCHAR uni579D +ENCODING 22429 +BBX 15 15 1 -1 +BITMAP +2100 +21F8 +2110 +2220 +F7FE +2A00 +2200 +22F8 +2288 +2288 +3288 +C498 +0482 +0882 +007E +ENDCHAR +STARTCHAR uni579E +ENCODING 22430 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +2202 +FA3A +21C0 +2040 +2040 +207E +27C0 +3840 +E040 +0042 +0042 +003E +ENDCHAR +STARTCHAR uni579F +ENCODING 22431 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +1000 +13FE +FC20 +1020 +11FC +1020 +1020 +13FE +1C20 +E020 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni57A0 +ENCODING 22432 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +2208 +FBF8 +2208 +2208 +23F8 +2244 +2248 +3A30 +E220 +0210 +03C8 +0E06 +ENDCHAR +STARTCHAR uni57A1 +ENCODING 22433 +BBX 15 16 0 -2 +BITMAP +08A0 +0890 +1080 +30FC +5780 +9048 +1050 +1024 +1054 +118C +1604 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni57A2 +ENCODING 22434 +BBX 15 15 1 -1 +BITMAP +2038 +27C0 +2400 +2400 +F7FE +2400 +2400 +25FC +2504 +2504 +3504 +C904 +0904 +1104 +01FC +ENDCHAR +STARTCHAR uni57A3 +ENCODING 22435 +BBX 15 14 1 0 +BITMAP +2000 +27FC +2000 +2000 +FBF8 +2208 +2208 +23F8 +2208 +2208 +3BF8 +E000 +0000 +0FFE +ENDCHAR +STARTCHAR uni57A4 +ENCODING 22436 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +2090 +F088 +2134 +27C2 +2040 +2040 +2040 +33F8 +C040 +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni57A5 +ENCODING 22437 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +20A0 +2110 +FA08 +2406 +23F8 +2000 +2000 +23F8 +2208 +3A08 +E208 +4208 +03F8 +0208 +ENDCHAR +STARTCHAR uni57A6 +ENCODING 22438 +BBX 15 14 0 -1 +BITMAP +3FF0 +2010 +3FF0 +2010 +3FF0 +2208 +2190 +2C60 +311C +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni57A7 +ENCODING 22439 +BBX 14 16 0 -2 +BITMAP +2040 +2040 +2080 +23FC +2204 +FA04 +22F4 +2294 +2294 +2294 +2294 +3AF4 +E204 +4204 +0214 +0208 +ENDCHAR +STARTCHAR uni57A8 +ENCODING 22440 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2402 +F402 +2010 +2010 +27FE +2010 +2210 +3110 +C090 +0010 +0010 +0070 +ENDCHAR +STARTCHAR uni57A9 +ENCODING 22441 +BBX 15 14 0 -1 +BITMAP +7FFC +0440 +2448 +1448 +1450 +0440 +FFFE +0000 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni57AA +ENCODING 22442 +BBX 15 15 1 -1 +BITMAP +2208 +2108 +2110 +27FC +F910 +2110 +2110 +2110 +2FFE +2110 +3910 +E210 +0210 +0410 +0810 +ENDCHAR +STARTCHAR uni57AB +ENCODING 22443 +BBX 15 15 0 -1 +BITMAP +0840 +0840 +7DF8 +0848 +0C48 +19C8 +684A +08AA +2886 +1102 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni57AC +ENCODING 22444 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2110 +2110 +F7FC +2110 +2110 +2110 +2110 +2110 +37FE +C000 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni57AD +ENCODING 22445 +BBX 15 15 0 -1 +BITMAP +2000 +23FC +2090 +2090 +2090 +F892 +2492 +2294 +2294 +2298 +2090 +3890 +E090 +4090 +07FE +ENDCHAR +STARTCHAR uni57AE +ENCODING 22446 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +20A0 +2110 +FA08 +2DF6 +2000 +27FC +2080 +2100 +3BF8 +E008 +4008 +0050 +0020 +ENDCHAR +STARTCHAR uni57AF +ENCODING 22447 +BBX 15 15 0 -1 +BITMAP +1010 +1210 +1110 +1110 +10FE +FC10 +1310 +1128 +1124 +1144 +1142 +1D82 +E100 +4280 +047E +ENDCHAR +STARTCHAR uni57B0 +ENCODING 22448 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +207C +2040 +F840 +27FE +2000 +27FE +2040 +2040 +3870 +E04C +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni57B1 +ENCODING 22449 +BBX 14 16 0 -2 +BITMAP +1020 +1124 +10A4 +10A4 +10A8 +FC20 +13FC +1004 +1004 +1004 +11FC +1C04 +E004 +4004 +03FC +0004 +ENDCHAR +STARTCHAR uni57B2 +ENCODING 22450 +BBX 15 15 0 -1 +BITMAP +1020 +1124 +1124 +1124 +11FC +FC00 +11FC +1004 +1004 +11FC +1100 +1D00 +E102 +4102 +00FE +ENDCHAR +STARTCHAR uni57B3 +ENCODING 22451 +BBX 15 15 1 -1 +BITMAP +2100 +217C +2200 +2400 +F100 +217E +2208 +2608 +2A08 +2208 +3208 +C208 +0208 +0208 +0238 +ENDCHAR +STARTCHAR uni57B4 +ENCODING 22452 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +2020 +27FE +2000 +F800 +2090 +2254 +2224 +2224 +2254 +3A94 +E204 +4204 +03FC +0004 +ENDCHAR +STARTCHAR uni57B5 +ENCODING 22453 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +1202 +FC44 +1040 +13FE +1088 +1088 +1108 +1CD0 +E020 +4050 +0088 +0304 +ENDCHAR +STARTCHAR uni57B6 +ENCODING 22454 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +1000 +1088 +FC50 +13FE +1020 +1020 +1020 +11FC +1C20 +E020 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni57B7 +ENCODING 22455 +BBX 15 16 0 -2 +BITMAP +1000 +13F8 +1208 +1208 +13F8 +FE08 +1208 +13F8 +1208 +1208 +13F8 +1D20 +E120 +4222 +0422 +181E +ENDCHAR +STARTCHAR uni57B8 +ENCODING 22456 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2404 +F404 +23F8 +2000 +2000 +2FFE +2120 +3120 +C120 +0222 +0422 +081E +ENDCHAR +STARTCHAR uni57B9 +ENCODING 22457 +BBX 15 16 0 -2 +BITMAP +2100 +211E +2112 +2FD2 +2114 +F914 +27D8 +2114 +2112 +2FD2 +2112 +391A +E214 +4210 +0410 +0810 +ENDCHAR +STARTCHAR uni57BA +ENCODING 22458 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11C0 +1004 +1144 +FCA8 +1000 +11F8 +1010 +1020 +13FE +1C20 +E020 +4020 +00A0 +0040 +ENDCHAR +STARTCHAR uni57BB +ENCODING 22459 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +11FC +FD04 +1104 +11FC +1104 +1104 +11FC +1C00 +E088 +4084 +0102 +0202 +ENDCHAR +STARTCHAR uni57BC +ENCODING 22460 +BBX 15 16 0 -2 +BITMAP +10F8 +2088 +4108 +8A06 +1000 +31F8 +5088 +9050 +1020 +10D8 +1706 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni57BD +ENCODING 22461 +BBX 15 15 0 -1 +BITMAP +200C +11F0 +8100 +4900 +09FE +1110 +E110 +2210 +2210 +2510 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni57BE +ENCODING 22462 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +11FC +1104 +FDFC +1000 +1000 +11FC +1020 +1C20 +E3FE +4020 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni57BF +ENCODING 22463 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2200 +2200 +FAFE +2204 +2228 +2210 +23FE +3A12 +E214 +4210 +0410 +0450 +0820 +ENDCHAR +STARTCHAR uni57C0 +ENCODING 22464 +BBX 15 15 1 -1 +BITMAP +00E0 +3F00 +0100 +7FFC +0100 +0924 +7938 +0920 +1924 +691C +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni57C1 +ENCODING 22465 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +11FC +FC20 +1050 +1088 +1144 +1222 +1020 +1DF8 +E008 +4010 +0010 +0020 +ENDCHAR +STARTCHAR uni57C2 +ENCODING 22466 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1020 +11FC +FD24 +1124 +11FC +1124 +1124 +11FC +1D20 +E0A0 +4040 +00B0 +030E +ENDCHAR +STARTCHAR uni57C3 +ENCODING 22467 +BBX 15 15 1 -1 +BITMAP +2080 +2090 +2108 +2134 +F7C2 +2100 +2100 +23FC +2440 +2040 +37FE +C060 +0090 +0308 +0C06 +ENDCHAR +STARTCHAR uni57C4 +ENCODING 22468 +BBX 15 16 0 -2 +BITMAP +2100 +21F8 +2308 +2490 +2060 +F998 +2646 +2040 +23F8 +2040 +23F8 +3840 +E7FC +4040 +0040 +0040 +ENDCHAR +STARTCHAR uni57C5 +ENCODING 22469 +BBX 15 15 0 -1 +BITMAP +0040 +7820 +4BFE +5080 +48F8 +4488 +5508 +4928 +4210 +4100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni57C6 +ENCODING 22470 +BBX 14 15 1 -1 +BITMAP +2080 +21F8 +2210 +2C20 +F3FC +2244 +2244 +23FC +2244 +2244 +33FC +C204 +0404 +0404 +081C +ENDCHAR +STARTCHAR uni57C7 +ENCODING 22471 +BBX 14 15 1 -1 +BITMAP +2000 +27F8 +2010 +21A0 +F840 +27FC +2444 +2444 +27FC +2444 +3C44 +E7FC +0444 +0444 +044C +ENDCHAR +STARTCHAR uni57C8 +ENCODING 22472 +BBX 15 15 1 -1 +BITMAP +2080 +2088 +211C +23F2 +F890 +2110 +221E +2480 +20FC +2104 +3A88 +E450 +0060 +0198 +0606 +ENDCHAR +STARTCHAR uni57C9 +ENCODING 22473 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +1020 +FC20 +1124 +1124 +1124 +12AA +1020 +1C50 +E050 +4088 +0104 +0202 +ENDCHAR +STARTCHAR uni57CA +ENCODING 22474 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +0104 +7D88 +0950 +1120 +2518 +C206 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni57CB +ENCODING 22475 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2248 +2248 +FBF8 +2248 +2248 +23F8 +2040 +2040 +3BF8 +E040 +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni57CC +ENCODING 22476 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +23F8 +2208 +FA08 +23F8 +2208 +2208 +23F8 +2242 +3A44 +C228 +0210 +0388 +0C06 +ENDCHAR +STARTCHAR uni57CD +ENCODING 22477 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +1084 +10FC +FC00 +11FE +1102 +1102 +11FE +1102 +1D02 +E1FE +4102 +010A +0104 +ENDCHAR +STARTCHAR uni57CE +ENCODING 22478 +BBX 15 15 1 -1 +BITMAP +2028 +2024 +2020 +27FE +FC20 +2424 +2424 +27A4 +24A8 +2498 +3C90 +C510 +0B2A +084A +1184 +ENDCHAR +STARTCHAR uni57CF +ENCODING 22479 +BBX 15 15 1 -1 +BITMAP +2004 +2718 +2170 +2110 +FA10 +225C +2750 +2150 +2550 +2550 +3D50 +E2FC +0200 +0380 +0C7E +ENDCHAR +STARTCHAR uni57D0 +ENCODING 22480 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1004 +10FC +1004 +FDFC +1000 +13FE +1202 +11F8 +1088 +1C88 +E050 +4020 +00D8 +0306 +ENDCHAR +STARTCHAR uni57D1 +ENCODING 22481 +BBX 15 15 0 -1 +BITMAP +080C +08F0 +7E80 +0880 +0EFE +7888 +0888 +2908 +1208 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni57D2 +ENCODING 22482 +BBX 15 15 1 -1 +BITMAP +2018 +2068 +2784 +2484 +F442 +2842 +2000 +2008 +27FE +2008 +3208 +C108 +0088 +0008 +0038 +ENDCHAR +STARTCHAR uni57D3 +ENCODING 22483 +BBX 15 15 1 -1 +BITMAP +2040 +20C4 +2124 +2718 +F090 +2060 +20C0 +2708 +2008 +27FE +3008 +C208 +0188 +0008 +0038 +ENDCHAR +STARTCHAR uni57D4 +ENCODING 22484 +BBX 15 15 1 -1 +BITMAP +2048 +2044 +2FFE +2040 +F040 +27FC +2444 +2444 +27FC +2444 +3444 +C7FC +0444 +0444 +044C +ENDCHAR +STARTCHAR uni57D5 +ENCODING 22485 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +1104 +1104 +1104 +FDFC +1000 +1000 +13FE +1020 +1020 +1DFC +E020 +4020 +03FE +ENDCHAR +STARTCHAR uni57D6 +ENCODING 22486 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2FFE +2110 +F0A0 +20A0 +2122 +2124 +2338 +2520 +3920 +C120 +0122 +0122 +011E +ENDCHAR +STARTCHAR uni57D7 +ENCODING 22487 +BBX 15 15 1 -1 +BITMAP +2040 +2240 +227C +2240 +F240 +2FFE +2040 +2244 +2244 +2448 +30C8 +C010 +0020 +00C0 +0F00 +ENDCHAR +STARTCHAR uni57D8 +ENCODING 22488 +BBX 15 16 0 -2 +BITMAP +2008 +2008 +2788 +2488 +24FE +FC88 +2488 +27C8 +24A8 +24A8 +2488 +3C88 +E788 +4488 +0028 +0010 +ENDCHAR +STARTCHAR uni57D9 +ENCODING 22489 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2208 +2208 +23F8 +F800 +2000 +27FC +2404 +2444 +2444 +3C44 +E4B4 +4108 +0604 +1802 +ENDCHAR +STARTCHAR uni57DA +ENCODING 22490 +BBX 14 16 0 -2 +BITMAP +2000 +23F8 +2208 +2208 +2208 +FBF8 +2040 +2040 +27FC +2444 +24A4 +3D14 +E614 +4404 +0414 +0408 +ENDCHAR +STARTCHAR uni57DB +ENCODING 22491 +BBX 14 16 0 -2 +BITMAP +2000 +27FC +2404 +24A4 +2514 +FE0C +2404 +25F4 +2514 +2514 +2514 +3DF4 +E514 +4404 +0414 +0408 +ENDCHAR +STARTCHAR uni57DC +ENCODING 22492 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +0810 +FEFE +2850 +2C58 +4A94 +8912 +0810 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni57DD +ENCODING 22493 +BBX 15 15 0 -1 +BITMAP +2020 +2020 +2050 +2088 +2144 +FA22 +21F8 +2008 +2050 +2020 +20A4 +3A82 +E28A +428A +0478 +ENDCHAR +STARTCHAR uni57DE +ENCODING 22494 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2404 +F404 +23F8 +2040 +2040 +2240 +227C +3240 +C240 +0540 +04C0 +083E +ENDCHAR +STARTCHAR uni57DF +ENCODING 22495 +BBX 15 15 1 -1 +BITMAP +2028 +2024 +2020 +2FFE +F020 +27A0 +24A4 +24A4 +24A8 +27A8 +3010 +C330 +1C4A +018A +0604 +ENDCHAR +STARTCHAR uni57E0 +ENCODING 22496 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23F8 +2208 +FBF8 +2200 +23F8 +2208 +2208 +3BF8 +C040 +0FFE +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni57E1 +ENCODING 22497 +BBX 15 15 0 -1 +BITMAP +2000 +27FE +2090 +2090 +2090 +FB9C +2204 +2204 +2204 +239C +2090 +3890 +E090 +4090 +07FE +ENDCHAR +STARTCHAR uni57E2 +ENCODING 22498 +BBX 15 16 0 -2 +BITMAP +2040 +2248 +2150 +2040 +23F8 +F880 +27FC +2110 +2208 +25F4 +2912 +3910 +E150 +4124 +0104 +00FC +ENDCHAR +STARTCHAR uni57E3 +ENCODING 22499 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2000 +F208 +2208 +2514 +28A2 +2000 +3040 +CFFE +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni57E4 +ENCODING 22500 +BBX 15 15 1 -1 +BITMAP +2020 +2040 +23FC +2244 +FA44 +23FC +2244 +2284 +23FC +2090 +3910 +E7FE +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni57E5 +ENCODING 22501 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +11FC +FC20 +13FE +1000 +11FC +1104 +11FC +1D04 +E1FC +4104 +0114 +0108 +ENDCHAR +STARTCHAR uni57E6 +ENCODING 22502 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2404 +F404 +2200 +23BC +22A4 +24A4 +2CA4 +33AC +C120 +0120 +0222 +0C1E +ENDCHAR +STARTCHAR uni57E7 +ENCODING 22503 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +11F8 +FD08 +11F8 +1108 +11F8 +1108 +1D08 +E3FE +4000 +0090 +0108 +0204 +ENDCHAR +STARTCHAR uni57E8 +ENCODING 22504 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +20A0 +2110 +2208 +FDF6 +2000 +27FC +24A4 +24A4 +27FC +3CA4 +E4A4 +44A4 +0414 +0408 +ENDCHAR +STARTCHAR uni57E9 +ENCODING 22505 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +11F8 +1108 +1210 +FDFC +1024 +1024 +13FE +1024 +1024 +1DFC +E024 +4020 +00A0 +0040 +ENDCHAR +STARTCHAR uni57EA +ENCODING 22506 +BBX 15 15 0 -1 +BITMAP +1040 +1020 +1020 +13FE +1202 +FC94 +1108 +1204 +1000 +11FC +1020 +1C20 +E020 +4020 +07FE +ENDCHAR +STARTCHAR uni57EB +ENCODING 22507 +BBX 15 16 0 -2 +BITMAP +2020 +2124 +20A4 +20A8 +2020 +FBFE +2202 +2202 +22FA +228A +228A +3A8A +E2FA +4202 +020A +0204 +ENDCHAR +STARTCHAR uni57EC +ENCODING 22508 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +2040 +23F8 +FA48 +23F8 +2248 +23F8 +2040 +20E0 +3950 +E248 +4C46 +0040 +0040 +ENDCHAR +STARTCHAR uni57ED +ENCODING 22509 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23F8 +2048 +F7FE +2048 +2048 +23F8 +2444 +2258 +38E0 +E150 +0248 +0C46 +00C0 +ENDCHAR +STARTCHAR uni57EE +ENCODING 22510 +BBX 15 16 0 -2 +BITMAP +1020 +1122 +1122 +1224 +1050 +FC88 +1304 +1022 +1020 +1124 +1D24 +E228 +4050 +0088 +0104 +0602 +ENDCHAR +STARTCHAR uni57EF +ENCODING 22511 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +27FE +2110 +2248 +FC46 +23F8 +2248 +2248 +23F8 +2248 +3A48 +E3F8 +4042 +0042 +003E +ENDCHAR +STARTCHAR uni57F0 +ENCODING 22512 +BBX 15 15 1 -1 +BITMAP +2038 +27C8 +2488 +2444 +F844 +2802 +2040 +2040 +2FFE +3150 +C150 +0248 +0444 +0842 +0040 +ENDCHAR +STARTCHAR uni57F1 +ENCODING 22513 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +21DC +2114 +F114 +2114 +27D4 +2014 +2114 +2114 +3588 +E548 +4948 +0114 +0514 +0222 +ENDCHAR +STARTCHAR uni57F2 +ENCODING 22514 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +11FC +FC40 +13FE +1088 +1124 +1222 +10F8 +1C20 +E3FE +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni57F3 +ENCODING 22515 +BBX 14 16 0 -2 +BITMAP +2080 +2080 +20F8 +2108 +FA10 +2400 +2040 +239C +2204 +2204 +239C +3A04 +E204 +4204 +03FC +0204 +ENDCHAR +STARTCHAR uni57F4 +ENCODING 22516 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2FFE +2040 +F1F8 +2108 +25F8 +2508 +2508 +25F8 +2508 +3508 +C5F8 +0400 +07FE +ENDCHAR +STARTCHAR uni57F5 +ENCODING 22517 +BBX 15 15 1 -1 +BITMAP +2018 +2060 +27C0 +2040 +F7FC +2248 +2248 +2FFE +2248 +2248 +3248 +E7FC +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni57F6 +ENCODING 22518 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +7C40 +11F8 +1048 +FE48 +2548 +24C8 +D648 +1068 +7CA8 +10A8 +110A +1D0A +E206 +ENDCHAR +STARTCHAR uni57F7 +ENCODING 22519 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +7C40 +11F8 +1048 +FE48 +4548 +28C8 +FE48 +1068 +10A8 +7CA8 +108A +110A +1606 +ENDCHAR +STARTCHAR uni57F8 +ENCODING 22520 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +FA08 +2208 +23F8 +2100 +21FE +264A +388A +C112 +0622 +00C2 +001C +ENDCHAR +STARTCHAR uni57F9 +ENCODING 22521 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2208 +F908 +2110 +2010 +2FFE +2000 +23F8 +3A08 +C208 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni57FA +ENCODING 22522 +BBX 13 15 2 -1 +BITMAP +0880 +0880 +7FF0 +0880 +0F80 +0880 +0F80 +0880 +FFF8 +1040 +2220 +DFD8 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni57FB +ENCODING 22523 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +27FE +2000 +F9F8 +2108 +21F8 +2000 +23FC +2018 +3820 +C7FE +0020 +0020 +00E0 +ENDCHAR +STARTCHAR uni57FC +ENCODING 22524 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +20A0 +F910 +260C +2000 +2FFE +2008 +23C8 +3A48 +C248 +03C8 +0008 +0038 +ENDCHAR +STARTCHAR uni57FD +ENCODING 22525 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2008 +2FFE +F008 +23F8 +2000 +2FFE +2842 +27FC +3444 +C444 +0444 +044C +0040 +ENDCHAR +STARTCHAR uni57FE +ENCODING 22526 +BBX 15 14 0 -1 +BITMAP +7F7C +2244 +3E44 +2228 +3E10 +23A8 +FE44 +0282 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni57FF +ENCODING 22527 +BBX 15 14 1 -1 +BITMAP +33FC +0A04 +C3FC +2200 +028C +0AF0 +3280 +C482 +097E +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5800 +ENCODING 22528 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2404 +2404 +27FC +F420 +2524 +2524 +25FC +2420 +3420 +C924 +0924 +1124 +01FC +ENDCHAR +STARTCHAR uni5801 +ENCODING 22529 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +11FC +FD24 +1124 +11FC +1020 +13FE +1070 +1CA8 +E124 +4222 +0020 +0020 +ENDCHAR +STARTCHAR uni5802 +ENCODING 22530 +BBX 15 15 1 -1 +BITMAP +1110 +1110 +0920 +7FFC +4004 +4FE4 +0820 +0820 +0FE0 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5803 +ENCODING 22531 +BBX 15 15 0 -1 +BITMAP +1020 +0810 +7EFE +1020 +1E3C +1224 +1224 +2244 +4A94 +8508 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5804 +ENCODING 22532 +BBX 15 15 1 -1 +BITMAP +2080 +2100 +2638 +2408 +FC08 +2778 +2408 +2408 +27F8 +2120 +3920 +C220 +0222 +0422 +081E +ENDCHAR +STARTCHAR uni5805 +ENCODING 22533 +BBX 15 14 1 -1 +BITMAP +7EFC +4844 +7E44 +4228 +7E10 +4818 +4824 +7EC2 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5806 +ENCODING 22534 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +2110 +23FE +F620 +2A20 +23FC +2220 +2220 +2220 +33FC +C220 +0220 +0220 +03FE +ENDCHAR +STARTCHAR uni5807 +ENCODING 22535 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0FE0 +0100 +3FF8 +2108 +3FF8 +0100 +7FFC +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni5808 +ENCODING 22536 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +228A +2252 +FBFE +2222 +2222 +22AA +22AA +22AA +3AFA +E202 +4202 +020A +0204 +ENDCHAR +STARTCHAR uni5809 +ENCODING 22537 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2088 +F13C +27C2 +2000 +23F8 +2208 +23F8 +3208 +C3F8 +0208 +0208 +0218 +ENDCHAR +STARTCHAR uni580A +ENCODING 22538 +BBX 15 14 1 -1 +BITMAP +7FFC +0440 +3C78 +2008 +2008 +3C78 +0440 +FFFE +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni580B +ENCODING 22539 +BBX 14 15 1 -1 +BITMAP +2000 +27BC +24A4 +24A4 +F4A4 +27BC +24A4 +24A4 +24A4 +27BC +34A4 +C4A4 +08A4 +08A4 +11CC +ENDCHAR +STARTCHAR uni580C +ENCODING 22540 +BBX 14 16 0 -2 +BITMAP +2000 +27FC +2444 +2444 +27FC +FC44 +2444 +25F4 +2514 +2514 +2514 +3DF4 +E514 +4404 +07FC +0404 +ENDCHAR +STARTCHAR uni580D +ENCODING 22541 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +21F0 +2210 +FA20 +27FC +2A44 +2244 +2244 +23FC +22A4 +38B0 +E128 +422A +0422 +081E +ENDCHAR +STARTCHAR uni580E +ENCODING 22542 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +21FC +2020 +2020 +FBFE +2088 +2144 +2242 +20F8 +2188 +3A50 +E020 +4050 +0188 +0606 +ENDCHAR +STARTCHAR uni580F +ENCODING 22543 +BBX 15 15 0 -1 +BITMAP +0820 +0810 +09FE +7E40 +187C +2C44 +2A84 +4894 +8908 +0800 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5810 +ENCODING 22544 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1210 +1210 +12FE +FE10 +1210 +13FE +1200 +1210 +1210 +1EFE +E210 +4410 +05FE +0800 +ENDCHAR +STARTCHAR uni5811 +ENCODING 22545 +BBX 15 15 0 -1 +BITMAP +100C +FEF0 +2080 +4880 +7EFE +0888 +0E88 +F908 +4A08 +0908 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5812 +ENCODING 22546 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +11FC +FD04 +1104 +11FC +1000 +1112 +11D4 +1D18 +E110 +4152 +0192 +010E +ENDCHAR +STARTCHAR uni5813 +ENCODING 22547 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +11FC +FC00 +11FE +1100 +117C +1110 +1110 +1DFE +E110 +4210 +0210 +0410 +ENDCHAR +STARTCHAR uni5814 +ENCODING 22548 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1252 +1088 +FD04 +1020 +1020 +13FE +1020 +1070 +1CA8 +E124 +4222 +0020 +0020 +ENDCHAR +STARTCHAR uni5815 +ENCODING 22549 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8BFE +9080 +A1FC +9284 +88FC +8884 +B0FC +8084 +818C +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5816 +ENCODING 22550 +BBX 14 16 0 -2 +BITMAP +2124 +2248 +2490 +2248 +2124 +F880 +2100 +27FC +2404 +2514 +24A4 +3C44 +E4A4 +4514 +07FC +0404 +ENDCHAR +STARTCHAR uni5817 +ENCODING 22551 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +1088 +FD04 +1222 +1028 +1024 +13FE +1020 +1C50 +E050 +4088 +0104 +0202 +ENDCHAR +STARTCHAR uni5818 +ENCODING 22552 +BBX 15 15 0 -1 +BITMAP +2040 +2248 +2150 +2040 +23F8 +F880 +27FC +2110 +2248 +2444 +3842 +E3F8 +4040 +0040 +07FC +ENDCHAR +STARTCHAR uni5819 +ENCODING 22553 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2120 +2120 +FFFC +2524 +2524 +27FC +2040 +2040 +3BF8 +C040 +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni581A +ENCODING 22554 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1222 +1020 +13FE +FC20 +11FC +1124 +11FC +1124 +11FC +1C20 +E3FE +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni581B +ENCODING 22555 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2000 +21FC +2104 +F904 +21FC +2000 +23FE +2222 +2222 +3BFE +E222 +4222 +03FE +0202 +ENDCHAR +STARTCHAR uni581C +ENCODING 22556 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +11FC +FD24 +11AC +1174 +1124 +11FC +1020 +1C70 +E0A8 +4124 +0222 +0020 +ENDCHAR +STARTCHAR uni581D +ENCODING 22557 +BBX 14 15 1 -1 +BITMAP +2000 +23F8 +2208 +2278 +FA48 +2248 +27FC +2404 +25F4 +2514 +3D14 +C514 +05F4 +0404 +040C +ENDCHAR +STARTCHAR uni581E +ENCODING 22558 +BBX 15 15 1 -1 +BITMAP +2248 +2248 +2FFE +2248 +F248 +2278 +2200 +23FC +2040 +2FFE +3150 +C248 +0444 +0842 +0040 +ENDCHAR +STARTCHAR uni581F +ENCODING 22559 +BBX 15 16 0 -2 +BITMAP +2080 +20FC +2104 +21F8 +2008 +FBFE +2040 +20A2 +2334 +2058 +2094 +3B34 +E052 +4090 +0350 +0020 +ENDCHAR +STARTCHAR uni5820 +ENCODING 22560 +BBX 15 15 1 -1 +BITMAP +2200 +22F8 +2208 +2208 +F7FE +2400 +2C80 +34FC +2520 +2420 +35FE +C420 +0450 +0488 +0506 +ENDCHAR +STARTCHAR uni5821 +ENCODING 22561 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1208 +2208 +63F8 +A040 +2FFE +2150 +2248 +2C46 +2140 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5822 +ENCODING 22562 +BBX 15 16 0 -2 +BITMAP +2100 +217C +2144 +2244 +FA44 +267C +2A10 +2210 +22FE +2238 +2254 +3A54 +E294 +4312 +0210 +0210 +ENDCHAR +STARTCHAR uni5823 +ENCODING 22563 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +1124 +11FC +1124 +FD24 +11FC +1020 +1020 +13FE +1222 +1E2A +E2FA +420A +0202 +0206 +ENDCHAR +STARTCHAR uni5824 +ENCODING 22564 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +F208 +2208 +23F8 +2000 +2FFE +2040 +3240 +C27C +0540 +08C0 +107E +ENDCHAR +STARTCHAR uni5825 +ENCODING 22565 +BBX 15 15 0 -1 +BITMAP +0040 +7F40 +127E +0C88 +FF48 +1948 +2A50 +4820 +A850 +118C +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5826 +ENCODING 22566 +BBX 15 16 0 -2 +BITMAP +1110 +1112 +11D4 +1118 +1152 +FD92 +112E +1040 +11FC +1104 +1104 +1DFC +E104 +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni5827 +ENCODING 22567 +BBX 15 15 1 -1 +BITMAP +27FE +2040 +2080 +27FE +FC92 +2492 +2492 +2446 +2040 +27FE +3840 +C040 +00A0 +0110 +060E +ENDCHAR +STARTCHAR uni5828 +ENCODING 22568 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +11FC +1104 +FDFC +1080 +11FE +1222 +1122 +1152 +1D02 +E1FA +4002 +0014 +0008 +ENDCHAR +STARTCHAR uni5829 +ENCODING 22569 +BBX 15 16 0 -2 +BITMAP +2200 +22FE +2220 +2220 +FB20 +22BC +2644 +2A54 +224C +2284 +22A4 +3A18 +E208 +4208 +02FE +0200 +ENDCHAR +STARTCHAR uni582A +ENCODING 22570 +BBX 15 15 1 -1 +BITMAP +2208 +2208 +27FC +2208 +FBF8 +2208 +23F8 +2208 +2FFE +2490 +3490 +C51C +0600 +0400 +07FC +ENDCHAR +STARTCHAR uni582B +ENCODING 22571 +BBX 15 16 0 -2 +BITMAP +2000 +2088 +2252 +2222 +2252 +FA8A +2202 +23FE +2088 +2144 +227A +3888 +E150 +4020 +00D8 +0706 +ENDCHAR +STARTCHAR uni582C +ENCODING 22572 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2110 +2208 +25F6 +F800 +23C4 +2254 +2254 +23D4 +2254 +3A54 +E3D4 +4244 +0254 +02C8 +ENDCHAR +STARTCHAR uni582D +ENCODING 22573 +BBX 15 15 0 -1 +BITMAP +1020 +1040 +11FC +1104 +11FC +FD04 +11FC +1000 +13FE +1020 +1020 +1DFC +E020 +4020 +03FE +ENDCHAR +STARTCHAR uni582E +ENCODING 22574 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +1252 +13DE +FC00 +11FC +1000 +13FE +1080 +1100 +1DFC +E004 +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni582F +ENCODING 22575 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +1FF0 +0100 +7FFC +0810 +7F7C +0810 +0F10 +F0FE +0000 +7FFC +0840 +3042 +C03E +ENDCHAR +STARTCHAR uni5830 +ENCODING 22576 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2400 +25F8 +2508 +FDF8 +2508 +25F8 +2440 +27FC +2490 +3DA0 +C470 +048C +07FE +ENDCHAR +STARTCHAR uni5831 +ENCODING 22577 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +7D04 +1104 +111C +FF00 +45FC +2944 +FF44 +1144 +1128 +7D28 +1110 +1128 +1146 +ENDCHAR +STARTCHAR uni5832 +ENCODING 22578 +BBX 15 15 1 -1 +BITMAP +1000 +7E7C +4244 +7E44 +4244 +7E44 +0044 +4C44 +705C +4240 +7E40 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni5833 +ENCODING 22579 +BBX 14 16 0 -2 +BITMAP +2000 +23FC +2224 +2224 +23FC +FA00 +22FC +2284 +2284 +22FC +2284 +3AFC +E484 +4484 +08FC +1084 +ENDCHAR +STARTCHAR uni5834 +ENCODING 22580 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +F208 +23F8 +2000 +2FFE +2200 +23FE +3492 +C922 +0222 +0442 +009C +ENDCHAR +STARTCHAR uni5835 +ENCODING 22581 +BBX 15 15 1 -1 +BITMAP +2040 +2044 +23FC +2048 +F850 +2060 +27FE +2088 +21FC +2704 +3904 +C1FC +0104 +0104 +01FC +ENDCHAR +STARTCHAR uni5836 +ENCODING 22582 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +23FE +2080 +21FC +FA20 +25FE +2000 +21FC +2104 +21FC +3904 +E1FC +4104 +0114 +0108 +ENDCHAR +STARTCHAR uni5837 +ENCODING 22583 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +2000 +2208 +F910 +2FFE +2000 +23F8 +2208 +2208 +3BF8 +E208 +4208 +03F8 +0208 +ENDCHAR +STARTCHAR uni5838 +ENCODING 22584 +BBX 15 16 0 -2 +BITMAP +2000 +2FF8 +2808 +2868 +FB88 +2888 +2888 +2BE8 +2AA8 +2AA8 +3BE8 +E88A +48AA +10EA +1726 +2002 +ENDCHAR +STARTCHAR uni5839 +ENCODING 22585 +BBX 15 15 1 -1 +BITMAP +2018 +23E0 +2040 +27FE +F840 +23F8 +2248 +23F8 +2248 +23F8 +3840 +C7F8 +0040 +0040 +0FFE +ENDCHAR +STARTCHAR uni583A +ENCODING 22586 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2444 +27FC +2444 +F444 +27FC +20A0 +2110 +2718 +3916 +C110 +0110 +0210 +0C10 +ENDCHAR +STARTCHAR uni583B +ENCODING 22587 +BBX 15 16 0 -2 +BITMAP +2040 +13F8 +9048 +4FFE +4048 +13F8 +2040 +E3FC +2040 +2FFE +2040 +2040 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni583C +ENCODING 22588 +BBX 15 15 0 -1 +BITMAP +0808 +0808 +7E08 +08FE +FE08 +0848 +7E28 +0808 +0F28 +F010 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni583D +ENCODING 22589 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2524 +2524 +FFFC +2000 +27FC +2040 +2040 +2240 +3A78 +C240 +0240 +0240 +0FFE +ENDCHAR +STARTCHAR uni583E +ENCODING 22590 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +2040 +23F8 +F880 +27FE +2110 +2208 +27FC +3A0A +E208 +43F8 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni583F +ENCODING 22591 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +2010 +27FE +2410 +FC10 +25D0 +2412 +2412 +25D4 +2554 +3D48 +E5DA +442A +0846 +1082 +ENDCHAR +STARTCHAR uni5840 +ENCODING 22592 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2404 +2404 +FFFC +2508 +2490 +27FC +2490 +2490 +3FFE +C890 +0890 +1110 +0210 +ENDCHAR +STARTCHAR uni5841 +ENCODING 22593 +BBX 15 14 1 -1 +BITMAP +1FF0 +1110 +1FF0 +1110 +1FF0 +600C +1C30 +0000 +0EE0 +701C +0100 +1FF0 +0100 +FFFE +ENDCHAR +STARTCHAR uni5842 +ENCODING 22594 +BBX 15 15 0 -1 +BITMAP +2110 +2110 +27FC +2110 +F110 +2FFE +2110 +2208 +27F4 +2A12 +3210 +E3F0 +4204 +0204 +01FC +ENDCHAR +STARTCHAR uni5843 +ENCODING 22595 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +27FE +2148 +F820 +27FE +2200 +2200 +23FC +2000 +2248 +3A48 +E248 +444A +044A +0846 +ENDCHAR +STARTCHAR uni5844 +ENCODING 22596 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2294 +2294 +2294 +FBFC +2080 +2040 +27FE +2080 +20F8 +3888 +E108 +4108 +0228 +0410 +ENDCHAR +STARTCHAR uni5845 +ENCODING 22597 +BBX 15 16 0 -2 +BITMAP +2080 +2338 +2228 +2228 +23A8 +FA46 +2200 +227C +23A4 +2224 +2228 +3BA8 +E610 +4228 +0244 +0282 +ENDCHAR +STARTCHAR uni5846 +ENCODING 22598 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FE +2090 +FA94 +2492 +2000 +23F8 +2008 +23F8 +2200 +3BFC +E004 +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni5847 +ENCODING 22599 +BBX 15 15 0 -1 +BITMAP +1040 +1020 +13FE +1202 +1404 +FDFC +1000 +11FC +1104 +11FC +1104 +1DFC +E104 +4000 +03FE +ENDCHAR +STARTCHAR uni5848 +ENCODING 22600 +BBX 15 14 0 -1 +BITMAP +7DFC +4420 +7D20 +45FE +7C50 +4852 +5492 +650E +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5849 +ENCODING 22601 +BBX 15 15 1 -1 +BITMAP +2040 +275C +20A0 +26AC +F910 +23F8 +2E0E +2208 +23F8 +2208 +3A08 +C3F8 +0208 +0208 +0238 +ENDCHAR +STARTCHAR uni584A +ENCODING 22602 +BBX 15 15 1 -1 +BITMAP +2080 +2100 +27F8 +2488 +FC88 +27F8 +2488 +2488 +27F8 +2150 +3954 +E17C +0240 +0442 +183E +ENDCHAR +STARTCHAR uni584B +ENCODING 22603 +BBX 15 15 1 -1 +BITMAP +0820 +4AA4 +4AA8 +1450 +2288 +4304 +0000 +7FFC +4004 +4104 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni584C +ENCODING 22604 +BBX 15 15 1 -1 +BITMAP +23F8 +2208 +23F8 +2208 +FA08 +23F8 +2000 +27BE +2186 +268A +3996 +C28A +04B2 +1882 +038E +ENDCHAR +STARTCHAR uni584D +ENCODING 22605 +BBX 15 16 0 -2 +BITMAP +0020 +7924 +48A8 +4820 +49FC +7840 +4BFE +4888 +4924 +7A22 +4C20 +49FC +4820 +4820 +4BFE +9800 +ENDCHAR +STARTCHAR uni584E +ENCODING 22606 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +1050 +FC88 +1124 +1050 +1088 +1104 +12FA +1C88 +E088 +4088 +00F8 +0088 +ENDCHAR +STARTCHAR uni584F +ENCODING 22607 +BBX 15 15 0 -1 +BITMAP +1020 +1124 +1124 +1124 +11FC +FC00 +13FE +1000 +11FC +1104 +1104 +1DFC +E088 +4050 +03FE +ENDCHAR +STARTCHAR uni5850 +ENCODING 22608 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +11FC +FC20 +13FE +1040 +1088 +11F0 +1C24 +E3FE +4022 +0124 +02A2 +0040 +ENDCHAR +STARTCHAR uni5851 +ENCODING 22609 +BBX 15 15 1 -1 +BITMAP +4200 +227C +2444 +FF7C +0844 +4944 +497C +7F44 +0884 +110C +E100 +1FF0 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5852 +ENCODING 22610 +BBX 15 15 1 -1 +BITMAP +2010 +2010 +2F7C +2910 +F910 +29FE +2F04 +2904 +29FE +2904 +3944 +CF44 +0024 +0004 +001C +ENDCHAR +STARTCHAR uni5853 +ENCODING 22611 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1000 +11FC +FD04 +11FC +1104 +11FC +1040 +1C20 +E3FE +4000 +0088 +0104 +0202 +ENDCHAR +STARTCHAR uni5854 +ENCODING 22612 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2FFE +2150 +F0A0 +2110 +2208 +2DF6 +2000 +2000 +33F8 +C208 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni5855 +ENCODING 22613 +BBX 15 16 0 -2 +BITMAP +2120 +2110 +2208 +2486 +2910 +FBF8 +2008 +2000 +27BC +2084 +24A4 +3A94 +E4A4 +4084 +0294 +0108 +ENDCHAR +STARTCHAR uni5856 +ENCODING 22614 +BBX 15 16 0 -2 +BITMAP +2038 +23C0 +2040 +27FC +2150 +F954 +2758 +2154 +2354 +254C +20E0 +3950 +E248 +4444 +0842 +0040 +ENDCHAR +STARTCHAR uni5857 +ENCODING 22615 +BBX 15 15 1 -1 +BITMAP +4040 +20A0 +1318 +8C06 +43F8 +0040 +1FFE +2248 +4444 +88C2 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5858 +ENCODING 22616 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2420 +F5FC +2424 +27FE +2424 +25FC +2400 +35FC +C904 +0904 +1104 +01FC +ENDCHAR +STARTCHAR uni5859 +ENCODING 22617 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2000 +F3F8 +2208 +23F8 +2000 +2FFE +2802 +39F2 +C912 +0912 +09F2 +0806 +ENDCHAR +STARTCHAR uni585A +ENCODING 22618 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2402 +2402 +F3FC +2040 +21C4 +2668 +20B0 +2120 +3670 +C1A8 +0E26 +0020 +00C0 +ENDCHAR +STARTCHAR uni585B +ENCODING 22619 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +20A0 +20A0 +27FC +FCA4 +24A4 +27FC +2040 +2040 +27FC +38E0 +E150 +4248 +0C46 +0040 +ENDCHAR +STARTCHAR uni585C +ENCODING 22620 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2402 +29F4 +2000 +FBF8 +2080 +2144 +2668 +20B0 +3928 +E668 +40A4 +0122 +06A0 +0040 +ENDCHAR +STARTCHAR uni585D +ENCODING 22621 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FC +2108 +2090 +FBFE +2202 +2444 +2020 +23FC +2080 +38F8 +E088 +4108 +0128 +0210 +ENDCHAR +STARTCHAR uni585E +ENCODING 22622 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8888 +BFE8 +0880 +7FF0 +0880 +FFF8 +3060 +4210 +BFE8 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni585F +ENCODING 22623 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7FFC +0840 +1F48 +6250 +1462 +1842 +E03E +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5860 +ENCODING 22624 +BBX 15 15 0 -1 +BITMAP +2010 +2420 +22F8 +2288 +F888 +20F8 +2E80 +2280 +22FC +2284 +2284 +3AFC +E284 +4500 +08FE +ENDCHAR +STARTCHAR uni5861 +ENCODING 22625 +BBX 15 15 1 -1 +BITMAP +2218 +23E0 +2202 +21FE +F800 +25FC +2504 +25FC +2504 +25FC +3D04 +E7FE +0000 +0108 +0606 +ENDCHAR +STARTCHAR uni5862 +ENCODING 22626 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +27F8 +2408 +F408 +2408 +27F8 +2400 +27FE +2400 +37FC +C004 +0AA4 +12A4 +2018 +ENDCHAR +STARTCHAR uni5863 +ENCODING 22627 +BBX 15 16 0 -2 +BITMAP +2000 +13F8 +9208 +4208 +4BF8 +0800 +17FC +E040 +23F8 +2040 +27FC +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5864 +ENCODING 22628 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +F800 +23FC +2204 +23FC +2204 +23FC +3A04 +C3FC +0080 +0108 +0606 +ENDCHAR +STARTCHAR uni5865 +ENCODING 22629 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2000 +21FC +2104 +F904 +21FC +2000 +23FE +228A +2252 +3BFE +E222 +4222 +022A +0204 +ENDCHAR +STARTCHAR uni5866 +ENCODING 22630 +BBX 15 16 0 -2 +BITMAP +7C20 +45FE +4820 +51FC +4924 +45FC +4524 +55FC +4820 +43FE +4020 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5867 +ENCODING 22631 +BBX 15 15 1 -1 +BITMAP +2040 +2120 +2210 +24EC +F800 +20F0 +2208 +2404 +2802 +2000 +37FC +C524 +0524 +0524 +0FFE +ENDCHAR +STARTCHAR uni5868 +ENCODING 22632 +BBX 15 16 0 -2 +BITMAP +2090 +2090 +23FC +2090 +2090 +F890 +27FE +2090 +2148 +2244 +244A +3954 +E14A +424A +0140 +0080 +ENDCHAR +STARTCHAR uni5869 +ENCODING 22633 +BBX 15 15 1 -1 +BITMAP +2400 +2400 +2FFC +2800 +27F8 +F408 +2408 +27F8 +2000 +2FFC +3924 +C924 +0924 +0924 +1FFE +ENDCHAR +STARTCHAR uni586A +ENCODING 22634 +BBX 15 16 0 -2 +BITMAP +101E +11E0 +1022 +1112 +1094 +FC80 +1020 +11CE +1102 +1102 +11CE +1D02 +E102 +4102 +01FE +0102 +ENDCHAR +STARTCHAR uni586B +ENCODING 22635 +BBX 15 15 1 -1 +BITMAP +2040 +27FC +2040 +23F8 +F208 +23F8 +2208 +23F8 +2208 +23F8 +3000 +CFFE +0080 +0308 +0C06 +ENDCHAR +STARTCHAR uni586C +ENCODING 22636 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2420 +2440 +25FC +FD04 +25FC +2504 +25FC +2524 +3C20 +E4A8 +4924 +0A22 +10A0 +0040 +ENDCHAR +STARTCHAR uni586D +ENCODING 22637 +BBX 15 15 0 -1 +BITMAP +1000 +11F8 +1108 +1108 +11F8 +FD08 +1108 +11F8 +1000 +13FC +1294 +1E94 +E294 +4294 +07FE +ENDCHAR +STARTCHAR uni586E +ENCODING 22638 +BBX 15 16 0 -2 +BITMAP +2084 +2104 +23C4 +2244 +23DE +FA44 +23C4 +2264 +2254 +27D4 +20C4 +3944 +E244 +4444 +0154 +0088 +ENDCHAR +STARTCHAR uni586F +ENCODING 22639 +BBX 15 16 0 -2 +BITMAP +2040 +23BE +2212 +2292 +2252 +FAAA +2324 +2040 +23FE +2222 +2222 +3BFE +E222 +4222 +03FE +0202 +ENDCHAR +STARTCHAR uni5870 +ENCODING 22640 +BBX 15 15 1 -1 +BITMAP +4200 +23FE +0400 +89FC +4124 +27FE +0244 +1224 +23FE +4108 +8118 +1FF0 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5871 +ENCODING 22641 +BBX 15 15 0 -1 +BITMAP +1000 +7E7C +4244 +7E7C +4244 +7E7C +4844 +4444 +5A94 +6108 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5872 +ENCODING 22642 +BBX 15 15 1 -1 +BITMAP +2200 +27FC +2800 +23F8 +F208 +23F8 +2208 +23F8 +2000 +2FFE +3200 +C7FC +0D24 +0244 +0DB8 +ENDCHAR +STARTCHAR uni5873 +ENCODING 22643 +BBX 15 16 0 -2 +BITMAP +2020 +247C +2284 +2148 +2030 +F8CE +2610 +227C +2210 +227C +2210 +3AFE +E210 +4210 +05FE +0800 +ENDCHAR +STARTCHAR uni5874 +ENCODING 22644 +BBX 15 16 0 -2 +BITMAP +2020 +2222 +2222 +23FE +2000 +FBDE +2252 +2252 +23DE +2252 +2252 +3BDE +E252 +4252 +055A +08A4 +ENDCHAR +STARTCHAR uni5875 +ENCODING 22645 +BBX 15 15 1 -1 +BITMAP +0100 +7FFE +4440 +7FFC +4444 +7FFC +4840 +4F48 +4872 +8F42 +B83E +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni5876 +ENCODING 22646 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2250 +2250 +FBFE +2252 +2252 +23FE +2200 +2292 +3AD4 +E298 +4492 +04D2 +088E +ENDCHAR +STARTCHAR uni5877 +ENCODING 22647 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +203E +2020 +2020 +FBFE +2202 +2326 +228A +2252 +2326 +3A52 +E28A +4326 +03FE +0202 +ENDCHAR +STARTCHAR uni5878 +ENCODING 22648 +BBX 15 15 0 -1 +BITMAP +2000 +23FE +2200 +227C +2244 +FA44 +227C +2200 +22EE +22AA +22AA +3AAA +E2EE +4200 +03FE +ENDCHAR +STARTCHAR uni5879 +ENCODING 22649 +BBX 15 15 1 -1 +BITMAP +080C +FFB0 +0820 +7F20 +493E +7F24 +4924 +7F24 +0824 +FFA4 +0944 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni587A +ENCODING 22650 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +3FFE +2210 +2210 +2FBC +2318 +26B4 +2A52 +2080 +2080 +2FFC +4080 +4080 +9FFE +ENDCHAR +STARTCHAR uni587B +ENCODING 22651 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +1000 +FDFC +1104 +11FC +1104 +11FC +1C20 +E3FE +4050 +0088 +0104 +0202 +ENDCHAR +STARTCHAR uni587C +ENCODING 22652 +BBX 15 15 1 -1 +BITMAP +2040 +2FFE +2040 +27FC +F444 +27FC +2444 +27FC +2048 +27FC +380A +EFFE +0208 +0108 +0038 +ENDCHAR +STARTCHAR uni587D +ENCODING 22653 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +2040 +2554 +FA48 +2554 +2040 +2554 +2248 +2554 +38A0 +E0A0 +4110 +0208 +0C06 +ENDCHAR +STARTCHAR uni587E +ENCODING 22654 +BBX 15 15 1 -1 +BITMAP +0820 +FF20 +0020 +7EF8 +4228 +7E28 +00A8 +7E68 +042A +FF4A +0886 +0904 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni587F +ENCODING 22655 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1124 +13FE +1124 +FDFC +1020 +11FC +1124 +11FC +1C40 +E3FE +4088 +01D0 +0070 +038C +ENDCHAR +STARTCHAR uni5880 +ENCODING 22656 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2404 +27FC +2420 +FCA8 +2470 +24A8 +2504 +24A0 +3CFC +E520 +4420 +0BFE +0820 +1020 +ENDCHAR +STARTCHAR uni5881 +ENCODING 22657 +BBX 15 16 0 -2 +BITMAP +23F8 +2208 +23F8 +2208 +23F8 +F800 +27FC +24A4 +24A4 +27FC +2000 +3BF8 +E110 +40E0 +0318 +0C06 +ENDCHAR +STARTCHAR uni5882 +ENCODING 22658 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +11FC +1154 +FD54 +11FC +1000 +11FC +1000 +13FE +1C20 +E0A8 +4124 +02A2 +0040 +ENDCHAR +STARTCHAR uni5883 +ENCODING 22659 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2208 +F110 +2FFE +2000 +23F8 +2208 +23F8 +3208 +C3F8 +0122 +0622 +181E +ENDCHAR +STARTCHAR uni5884 +ENCODING 22660 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +2010 +27FE +2410 +FC90 +24D2 +2492 +27F2 +2494 +3C94 +E5C8 +4AAA +089A +11A6 +0042 +ENDCHAR +STARTCHAR uni5885 +ENCODING 22661 +BBX 15 14 1 -1 +BITMAP +7E7C +4A08 +7E30 +4A10 +7EFE +0814 +7E10 +0810 +0F10 +F130 +1FF0 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5886 +ENCODING 22662 +BBX 15 16 0 -2 +BITMAP +22A8 +22A8 +27FC +22A8 +FAAA +24E6 +2800 +27FC +2444 +2040 +23F8 +3A48 +E248 +4248 +0258 +0040 +ENDCHAR +STARTCHAR uni5887 +ENCODING 22663 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1088 +1050 +13FE +FC00 +11FC +1104 +11FC +1104 +11FC +1C20 +E3FE +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni5888 +ENCODING 22664 +BBX 15 16 0 -2 +BITMAP +2248 +2248 +2FE8 +2248 +23DE +F24A +23CA +224A +224A +2FEA +240A +354A +E632 +4412 +07EA +0044 +ENDCHAR +STARTCHAR uni5889 +ENCODING 22665 +BBX 15 15 1 -1 +BITMAP +2020 +27FE +2420 +25FC +FC24 +27FE +2424 +25FC +2524 +3DFC +E524 +09FC +0924 +1124 +012C +ENDCHAR +STARTCHAR uni588A +ENCODING 22666 +BBX 15 15 1 -1 +BITMAP +1040 +7C40 +11F8 +FE48 +4448 +FEC8 +1068 +FE8A +110A +1006 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni588B +ENCODING 22667 +BBX 15 15 1 -1 +BITMAP +2080 +2130 +21D0 +2408 +FB16 +2D1A +2040 +21B0 +2E4E +2380 +3060 +C184 +0008 +0030 +07C0 +ENDCHAR +STARTCHAR uni588C +ENCODING 22668 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2200 +2248 +FA48 +23FE +2248 +2248 +2248 +3A78 +E200 +4554 +052A +0A2A +1000 +ENDCHAR +STARTCHAR uni588D +ENCODING 22669 +BBX 15 15 1 -1 +BITMAP +1000 +7E7E +4248 +7E48 +42FE +7E10 +0018 +4C28 +7028 +424A +7E86 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni588E +ENCODING 22670 +BBX 15 16 0 -2 +BITMAP +2200 +211E +27D2 +2012 +27D4 +FC54 +27D8 +2014 +27D2 +2092 +2112 +39DA +E714 +4110 +0510 +0210 +ENDCHAR +STARTCHAR uni588F +ENCODING 22671 +BBX 15 15 1 -1 +BITMAP +0820 +487C +4BA4 +78B8 +0BE0 +F808 +2FFE +2908 +2888 +4888 +8938 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni5890 +ENCODING 22672 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2FFE +2110 +F1F0 +2040 +27FC +2444 +27FC +2040 +37FC +C040 +07FC +0040 +0FFE +ENDCHAR +STARTCHAR uni5891 +ENCODING 22673 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2088 +2050 +FBFE +2222 +22FA +2222 +22FA +228A +3A8A +E2FA +4202 +020A +0204 +ENDCHAR +STARTCHAR uni5892 +ENCODING 22674 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2088 +2050 +FBFE +2252 +228A +2306 +22FA +228A +3A8A +E2FA +4202 +020A +0204 +ENDCHAR +STARTCHAR uni5893 +ENCODING 22675 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +FFFE +0440 +1930 +EFEE +0100 +7FFC +ENDCHAR +STARTCHAR uni5894 +ENCODING 22676 +BBX 15 15 1 -1 +BITMAP +2040 +2444 +2444 +27FC +F220 +2240 +27FC +2C40 +27FC +2440 +3440 +C7FC +0440 +0440 +07FE +ENDCHAR +STARTCHAR uni5895 +ENCODING 22677 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2040 +2278 +F240 +2FFE +2100 +21FC +2200 +23FC +3004 +E554 +4554 +0804 +0028 +0010 +ENDCHAR +STARTCHAR uni5896 +ENCODING 22678 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2110 +2208 +2DF6 +F000 +23F8 +2208 +23F8 +2000 +27FC +3444 +E7FC +4444 +07FC +0404 +ENDCHAR +STARTCHAR uni5897 +ENCODING 22679 +BBX 14 15 1 -1 +BITMAP +2208 +2108 +2110 +27FC +FC44 +27FC +2444 +27FC +2000 +23F8 +3A08 +C3F8 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni5898 +ENCODING 22680 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +2110 +2FDE +F120 +27C0 +245C +27C4 +2448 +27C8 +3110 +EFD0 +4122 +0122 +011E +0100 +ENDCHAR +STARTCHAR uni5899 +ENCODING 22681 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +2040 +2248 +F950 +27FE +2000 +23F8 +2208 +22E8 +3AA8 +E2E8 +4208 +03F8 +0208 +ENDCHAR +STARTCHAR uni589A +ENCODING 22682 +BBX 15 16 0 -2 +BITMAP +2278 +2128 +246C +22AA +202A +F948 +2298 +2040 +2040 +27FC +20E0 +3950 +E248 +4C46 +0040 +0040 +ENDCHAR +STARTCHAR uni589B +ENCODING 22683 +BBX 15 16 0 -2 +BITMAP +2004 +27C4 +2444 +2444 +27DE +FC04 +25C4 +2404 +2414 +27EC +3C84 +E4C4 +4AA4 +0A84 +1494 +0188 +ENDCHAR +STARTCHAR uni589C +ENCODING 22684 +BBX 15 15 1 -1 +BITMAP +0108 +F090 +9FFE +9080 +A142 +9EAC +8960 +8EB0 +B128 +8626 +80C0 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni589D +ENCODING 22685 +BBX 15 15 1 -1 +BITMAP +2040 +23F8 +2040 +27FC +F208 +2FBE +2208 +2388 +2E3E +3000 +CFFE +0120 +0122 +0222 +0C1E +ENDCHAR +STARTCHAR uni589E +ENCODING 22686 +BBX 15 15 1 -1 +BITMAP +21F0 +2010 +2208 +2404 +FFFE +2444 +2554 +2444 +27FC +3800 +E3F8 +0208 +03F8 +0208 +03F8 +ENDCHAR +STARTCHAR uni589F +ENCODING 22687 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +207C +2040 +F7FE +2484 +24F0 +2784 +247C +2400 +3554 +C554 +09DC +1050 +07FE +ENDCHAR +STARTCHAR uni58A0 +ENCODING 22688 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +1252 +13DE +FC00 +11FC +1124 +11FC +1124 +11FC +1C20 +E3FE +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni58A1 +ENCODING 22689 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +13FE +1020 +11FC +FC20 +13FE +1124 +10A8 +13FE +1000 +1DFC +E104 +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni58A2 +ENCODING 22690 +BBX 15 16 0 -2 +BITMAP +2024 +23A8 +2092 +2514 +F208 +2C04 +27BA +20A8 +27C6 +2400 +37BC +E084 +40A8 +0090 +0528 +0244 +ENDCHAR +STARTCHAR uni58A3 +ENCODING 22691 +BBX 15 16 0 -2 +BITMAP +20A0 +24A4 +22A8 +20A0 +27FC +F910 +20A0 +27FC +2040 +23F8 +3840 +E7FC +40A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni58A4 +ENCODING 22692 +BBX 15 16 0 -2 +BITMAP +2040 +23F8 +2248 +23F8 +F840 +27FE +2000 +23F8 +2208 +23F8 +2208 +3BF8 +E208 +43F8 +0110 +0208 +ENDCHAR +STARTCHAR uni58A5 +ENCODING 22693 +BBX 15 15 0 -1 +BITMAP +1020 +11FC +1088 +1050 +13FE +FC00 +11FC +1124 +11FC +1124 +11FC +1C20 +E1FC +4020 +03FE +ENDCHAR +STARTCHAR uni58A6 +ENCODING 22694 +BBX 15 16 0 -2 +BITMAP +103C +13E0 +1124 +10A8 +13FE +FCA8 +1124 +1202 +11FC +1124 +1124 +1DFC +E124 +4124 +01FC +0104 +ENDCHAR +STARTCHAR uni58A7 +ENCODING 22695 +BBX 15 16 0 -2 +BITMAP +2038 +23C0 +2080 +27FE +2110 +FA08 +25F6 +2910 +21F0 +2000 +27FC +3C04 +E5F4 +4514 +05F4 +040C +ENDCHAR +STARTCHAR uni58A8 +ENCODING 22696 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +3FF8 +2108 +3FF8 +0100 +7FFC +0100 +FFFE +2448 +C106 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni58A9 +ENCODING 22697 +BBX 15 15 1 -1 +BITMAP +2210 +2210 +2FD0 +203E +F7A4 +24E4 +27A4 +2024 +27A8 +2128 +3210 +CF90 +0228 +0244 +0682 +ENDCHAR +STARTCHAR uni58AA +ENCODING 22698 +BBX 15 15 1 -1 +BITMAP +0820 +FF20 +003E +3E44 +2244 +3EC4 +0028 +7E28 +0410 +FF28 +08C6 +0900 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni58AB +ENCODING 22699 +BBX 15 15 1 -1 +BITMAP +2070 +2208 +2DF6 +20A0 +FBFC +22A4 +233C +2204 +23FC +2204 +3BFC +C008 +07FE +0108 +0038 +ENDCHAR +STARTCHAR uni58AC +ENCODING 22700 +BBX 15 16 0 -2 +BITMAP +0040 +3C78 +2488 +28F0 +3010 +2BFE +2440 +25A4 +3458 +29B4 +2052 +21B0 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni58AD +ENCODING 22701 +BBX 15 15 0 -1 +BITMAP +2028 +2024 +23FE +2220 +2224 +FBA4 +2298 +2490 +25AA +2846 +23FA +3AA8 +E2A8 +42A8 +0FFE +ENDCHAR +STARTCHAR uni58AE +ENCODING 22702 +BBX 15 15 1 -1 +BITMAP +0040 +7BFC +4880 +49F8 +5220 +51FC +4888 +48F8 +5088 +4098 +4100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni58AF +ENCODING 22703 +BBX 15 16 0 -2 +BITMAP +1040 +13FE +1880 +55F8 +5220 +95FC +1088 +10F8 +1088 +10F8 +1088 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni58B0 +ENCODING 22704 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2050 +23FE +2252 +FBFE +2000 +21FC +2104 +21FC +2104 +39FC +E020 +43FE +0020 +0020 +ENDCHAR +STARTCHAR uni58B1 +ENCODING 22705 +BBX 15 15 1 -1 +BITMAP +2008 +21D0 +2462 +2294 +F908 +26F6 +2000 +21F8 +2108 +2108 +39F8 +C000 +0108 +0090 +07FE +ENDCHAR +STARTCHAR uni58B2 +ENCODING 22706 +BBX 15 15 0 -1 +BITMAP +2100 +2100 +23FC +26A8 +2AA8 +F2A8 +27FC +22A8 +22A8 +22A8 +2FFE +3000 +E2A8 +4254 +0454 +ENDCHAR +STARTCHAR uni58B3 +ENCODING 22707 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2040 +F208 +2FFE +2208 +2000 +27FC +2404 +37FC +C404 +07FC +0208 +0C06 +ENDCHAR +STARTCHAR uni58B4 +ENCODING 22708 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27FC +2110 +2110 +F7FE +2040 +27FC +2444 +27FC +2444 +37FC +E000 +4110 +0208 +0404 +ENDCHAR +STARTCHAR uni58B5 +ENCODING 22709 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +13FE +1222 +FDAC +1020 +11AC +1000 +11FC +1C00 +E3FE +4040 +0088 +01FC +0084 +ENDCHAR +STARTCHAR uni58B6 +ENCODING 22710 +BBX 15 16 0 -2 +BITMAP +2010 +2410 +227C +2010 +20FE +F844 +2628 +22FE +2210 +227C +2210 +3AFE +E210 +4210 +05FE +0800 +ENDCHAR +STARTCHAR uni58B7 +ENCODING 22711 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +1000 +11FC +FCA8 +10A8 +13FE +10A8 +10A8 +11FC +1C20 +E3FE +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni58B8 +ENCODING 22712 +BBX 15 15 1 -1 +BITMAP +2110 +27FE +2110 +2044 +FBF8 +2048 +2050 +27FE +2048 +21FC +3B04 +C5FC +0104 +0104 +01FC +ENDCHAR +STARTCHAR uni58B9 +ENCODING 22713 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +28A2 +2FBE +F8A2 +2FBE +2802 +29F2 +2912 +2912 +39F2 +C912 +0912 +09F2 +080E +ENDCHAR +STARTCHAR uni58BA +ENCODING 22714 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +27FC +2424 +F7D4 +2554 +27FC +2564 +2654 +2444 +3080 +CFFE +00A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni58BB +ENCODING 22715 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2248 +F248 +2554 +2FFE +2000 +27FC +2404 +35F4 +C514 +05F4 +0404 +07FC +ENDCHAR +STARTCHAR uni58BC +ENCODING 22716 +BBX 15 16 0 -2 +BITMAP +0800 +FF78 +0848 +7F48 +4986 +7F00 +4978 +7F48 +0828 +FF90 +4928 +7F44 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni58BD +ENCODING 22717 +BBX 15 16 0 -2 +BITMAP +2210 +2410 +2F90 +2890 +2FBE +F8A4 +2FD4 +2414 +2214 +2FD4 +2414 +3788 +E488 +4894 +0A94 +1122 +ENDCHAR +STARTCHAR uni58BE +ENCODING 22718 +BBX 15 15 1 -1 +BITMAP +0CFC +F084 +4EFC +3884 +C884 +34FC +C4A2 +0C94 +34A8 +C5C4 +0902 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni58BF +ENCODING 22719 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +24A4 +27FC +2040 +FBF8 +2040 +27FC +2110 +20A0 +3BF8 +E040 +4FFE +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni58C0 +ENCODING 22720 +BBX 15 16 0 -2 +BITMAP +2010 +2008 +2788 +24BE +F480 +2494 +2788 +247E +2408 +2788 +36BE +EA88 +4A88 +0B88 +1288 +0008 +ENDCHAR +STARTCHAR uni58C1 +ENCODING 22721 +BBX 15 15 1 -1 +BITMAP +0010 +7E10 +42FE +4244 +7E28 +40FE +7E10 +A2FE +A210 +3E10 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni58C2 +ENCODING 22722 +BBX 15 16 0 -2 +BITMAP +3F78 +2148 +3F48 +2086 +2A78 +3F48 +2A48 +3F28 +2010 +4A28 +9146 +2000 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni58C3 +ENCODING 22723 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2000 +23F8 +F248 +23F8 +2248 +2FFE +2000 +23F8 +3248 +C3F8 +0248 +0248 +0FFE +ENDCHAR +STARTCHAR uni58C4 +ENCODING 22724 +BBX 15 15 0 -2 +BITMAP +2788 +2088 +FABE +2108 +77D8 +6B5C +A52A +2948 +2508 +2208 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni58C5 +ENCODING 22725 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +2090 +45FE +2B10 +11FC +2510 +FDFC +0910 +11FE +E100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni58C6 +ENCODING 22726 +BBX 15 15 0 -1 +BITMAP +0A80 +3138 +2288 +3838 +2288 +3938 +2288 +7FFE +4002 +8104 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni58C7 +ENCODING 22727 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2404 +25F4 +F514 +25F4 +2404 +27FC +2000 +33F8 +C208 +03F8 +0208 +0FFE +ENDCHAR +STARTCHAR uni58C8 +ENCODING 22728 +BBX 15 16 0 -2 +BITMAP +2040 +2FFE +2000 +27FC +2404 +FDF4 +2514 +25F4 +2404 +27FC +2008 +3BF0 +E040 +4FFE +0150 +0E4E +ENDCHAR +STARTCHAR uni58C9 +ENCODING 22729 +BBX 15 16 0 -2 +BITMAP +2040 +207C +2040 +23FE +2242 +FA78 +23C4 +223C +2200 +23FE +2240 +3BA4 +E258 +45B4 +0452 +09B0 +ENDCHAR +STARTCHAR uni58CA +ENCODING 22730 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2040 +FFFC +2524 +2524 +27FC +2020 +27FE +3892 +E314 +0D08 +01E4 +0702 +ENDCHAR +STARTCHAR uni58CB +ENCODING 22731 +BBX 15 16 0 -2 +BITMAP +2040 +2248 +2150 +27FE +2402 +F804 +23F8 +2208 +23F8 +2000 +27FC +3C44 +E7FC +4444 +07FC +0404 +ENDCHAR +STARTCHAR uni58CC +ENCODING 22732 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2110 +FE0E +2110 +27FC +2110 +27FC +2110 +3FFE +C124 +0E28 +03D0 +0E0E +ENDCHAR +STARTCHAR uni58CD +ENCODING 22733 +BBX 15 15 1 -1 +BITMAP +4206 +2FB8 +0220 +8FBE +4AA4 +0FA4 +2AA4 +2FA4 +4224 +4FC4 +8240 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni58CE +ENCODING 22734 +BBX 15 15 1 -1 +BITMAP +203C +27C0 +2040 +2FFE +F040 +27FC +2444 +2554 +27FC +2040 +37FC +C040 +0FFE +0524 +0892 +ENDCHAR +STARTCHAR uni58CF +ENCODING 22735 +BBX 15 15 0 -1 +BITMAP +2010 +27D0 +2510 +27DE +FC50 +27E8 +2504 +27C4 +2000 +23F8 +22A8 +3AA8 +E2A8 +42A8 +0FFE +ENDCHAR +STARTCHAR uni58D0 +ENCODING 22736 +BBX 15 16 0 -2 +BITMAP +7FFC +1110 +2108 +7FFC +B55A +2928 +3558 +2108 +3558 +2928 +3458 +2018 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni58D1 +ENCODING 22737 +BBX 15 15 1 -1 +BITMAP +0800 +0F7C +0844 +7F44 +4144 +1C28 +6B28 +1410 +FFA8 +2244 +3E82 +0100 +3FFC +0100 +FFFE +ENDCHAR +STARTCHAR uni58D2 +ENCODING 22738 +BBX 15 15 1 -1 +BITMAP +2208 +2208 +2FFE +2248 +F7FC +2040 +2FFE +2110 +2238 +27C4 +3000 +C7FC +04A4 +04A4 +0FFE +ENDCHAR +STARTCHAR uni58D3 +ENCODING 22739 +BBX 15 14 1 -1 +BITMAP +7FFE +5120 +5F28 +4024 +5FFE +5130 +5F28 +5148 +5F44 +5182 +8FF8 +8080 +0080 +7FFE +ENDCHAR +STARTCHAR uni58D4 +ENCODING 22740 +BBX 15 15 1 -1 +BITMAP +2040 +27FC +2040 +23F8 +F000 +2FFE +2002 +23FA +2040 +2FFE +3004 +CF7E +0944 +0F24 +000C +ENDCHAR +STARTCHAR uni58D5 +ENCODING 22741 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2208 +F3F8 +2000 +2FFE +2802 +29FA +2744 +30E8 +C730 +00E8 +0F26 +00C0 +ENDCHAR +STARTCHAR uni58D6 +ENCODING 22742 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +13FE +1222 +FDAC +1020 +11AC +1000 +13FE +1020 +1DFC +E154 +4154 +0154 +010C +ENDCHAR +STARTCHAR uni58D7 +ENCODING 22743 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2044 +FFFE +2044 +27FC +2040 +2FFE +2524 +3892 +CFFC +0924 +0924 +1FFE +ENDCHAR +STARTCHAR uni58D8 +ENCODING 22744 +BBX 15 14 1 -1 +BITMAP +0FE0 +0920 +0FE0 +0920 +7FFC +4AA4 +7EFC +4AA4 +7EFC +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni58D9 +ENCODING 22745 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2890 +FBFC +2890 +2FFE +2840 +2BFC +2A44 +3BFC +CA44 +13FC +0108 +0606 +ENDCHAR +STARTCHAR uni58DA +ENCODING 22746 +BBX 15 15 1 -1 +BITMAP +2040 +2078 +2040 +27FE +FC42 +25F0 +2444 +24FC +24A8 +24F8 +3CA8 +C5FC +0954 +0154 +07FE +ENDCHAR +STARTCHAR uni58DB +ENCODING 22747 +BBX 14 16 0 -2 +BITMAP +27BC +24A4 +27BC +24A4 +27BC +FC84 +24F4 +2514 +2624 +25B4 +2514 +3DB4 +E514 +45F4 +0414 +0408 +ENDCHAR +STARTCHAR uni58DC +ENCODING 22748 +BBX 15 15 1 -1 +BITMAP +23F8 +2208 +23F8 +2208 +F7FC +2040 +2FFE +2B5A +2040 +23F8 +3000 +CFFE +0108 +0274 +0F82 +ENDCHAR +STARTCHAR uni58DD +ENCODING 22749 +BBX 15 16 0 -2 +BITMAP +2020 +29FC +2524 +21FC +F820 +23FE +2D04 +25FC +2504 +25FC +2504 +3DFC +E488 +4504 +0BFE +1000 +ENDCHAR +STARTCHAR uni58DE +ENCODING 22750 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2000 +F7FC +2524 +27FC +2000 +2F5E +2040 +3FBE +C122 +0E14 +03C8 +0E06 +ENDCHAR +STARTCHAR uni58DF +ENCODING 22751 +BBX 15 15 1 -1 +BITMAP +0840 +7F7E +2240 +FFFC +0004 +3E7C +2240 +3E7C +2240 +3E42 +223E +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni58E0 +ENCODING 22752 +BBX 15 15 1 -1 +BITMAP +2220 +2220 +3FFE +28A0 +E53C +3FC4 +203C +2FA0 +28BC +2FA0 +38BC +CFA0 +08BC +08A2 +099E +ENDCHAR +STARTCHAR uni58E1 +ENCODING 22753 +BBX 15 16 0 -2 +BITMAP +1000 +1F7C +1024 +FFA4 +80A8 +7F10 +2A28 +5546 +A210 +7F10 +A2BC +3E10 +2210 +3E10 +22FE +3E00 +ENDCHAR +STARTCHAR uni58E2 +ENCODING 22754 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2888 +2B30 +F910 +2FFE +2918 +2BB4 +2D52 +2910 +3840 +D278 +1240 +0240 +0FFE +ENDCHAR +STARTCHAR uni58E3 +ENCODING 22755 +BBX 15 16 0 -2 +BITMAP +4044 +5F44 +4AAA +4AEE +4E44 +EAAA +4AEE +4E00 +4A28 +4AAA +6BAA +4EEE +9A28 +0228 +0248 +0288 +ENDCHAR +STARTCHAR uni58E4 +ENCODING 22756 +BBX 15 15 1 -1 +BITMAP +2040 +2FFE +2000 +27BC +F4A4 +27BC +2110 +27FC +2110 +27FC +3110 +EFFE +0124 +0ED8 +0306 +ENDCHAR +STARTCHAR uni58E5 +ENCODING 22757 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2400 +25FC +FDAC +2574 +2524 +25FC +2420 +25FE +3D54 +CA22 +09FC +1020 +03FE +ENDCHAR +STARTCHAR uni58E6 +ENCODING 22758 +BBX 15 16 0 -2 +BITMAP +2110 +2FFE +2110 +27BC +24A4 +F7BC +2140 +2120 +23FE +2220 +27FC +3A20 +E3FC +4220 +03FE +0200 +ENDCHAR +STARTCHAR uni58E7 +ENCODING 22759 +BBX 15 16 0 -2 +BITMAP +27BC +24A4 +27BC +2000 +27FE +FC00 +2590 +249E +27D4 +2564 +25D4 +3D54 +E5D4 +4568 +0BC8 +1054 +ENDCHAR +STARTCHAR uni58E8 +ENCODING 22760 +BBX 15 15 0 -2 +BITMAP +3EF8 +2AA8 +3EF8 +2AA8 +3EF8 +0000 +3EF8 +2AA8 +3EF8 +2AA8 +3EF8 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni58E9 +ENCODING 22761 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2040 +2FFE +2842 +FB5A +2500 +2FBE +2522 +2FBE +3AA2 +CFBE +0222 +0FA2 +0246 +ENDCHAR +STARTCHAR uni58EA +ENCODING 22762 +BBX 15 16 0 -2 +BITMAP +2444 +28E8 +2E0E +24E4 +FA0A +2EEE +20A0 +2AEA +2000 +23F8 +2008 +3BF8 +E200 +43FC +0004 +0038 +ENDCHAR +STARTCHAR uni58EB +ENCODING 22763 +BBX 15 14 1 0 +BITMAP +0100 +0100 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +0100 +7FFC +ENDCHAR +STARTCHAR uni58EC +ENCODING 22764 +BBX 15 14 1 0 +BITMAP +0010 +00E0 +3F00 +0100 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +7FFC +ENDCHAR +STARTCHAR uni58ED +ENCODING 22765 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +FFFE +0100 +0100 +7FFC +0000 +0000 +3FF8 +0108 +0108 +0128 +0110 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni58EE +ENCODING 22766 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +9040 +5040 +1040 +1FFE +1040 +1040 +3040 +5040 +9040 +1040 +1040 +1040 +17FC +ENDCHAR +STARTCHAR uni58EF +ENCODING 22767 +BBX 15 15 1 -1 +BITMAP +0820 +4820 +4820 +4820 +4820 +7BFE +0820 +0820 +F820 +2820 +2820 +4820 +4820 +8820 +09FC +ENDCHAR +STARTCHAR uni58F0 +ENCODING 22768 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +0100 +7FFC +0000 +3FF8 +2108 +2108 +3FF8 +2000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni58F1 +ENCODING 22769 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +0200 +0200 +3FE0 +0000 +FFF8 +8008 +9008 +1180 +1E00 +1010 +1010 +0FF0 +ENDCHAR +STARTCHAR uni58F2 +ENCODING 22770 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +0100 +3FF8 +0000 +7FFC +4004 +4444 +0440 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni58F3 +ENCODING 22771 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +0000 +FFFE +8002 +9FF2 +0000 +0FE0 +0820 +0822 +1022 +601E +ENDCHAR +STARTCHAR uni58F4 +ENCODING 22772 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +0000 +1FF0 +1010 +1010 +1FF0 +0820 +0420 +0440 +0040 +FFFE +ENDCHAR +STARTCHAR uni58F5 +ENCODING 22773 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +7FFC +0100 +0100 +0100 +3FF8 +0000 +1010 +1010 +FEFE +1010 +1010 +1010 +7C7C +ENDCHAR +STARTCHAR uni58F6 +ENCODING 22774 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +0100 +1FF0 +0000 +7FFE +4002 +8444 +0440 +2448 +1448 +1450 +0440 +7FFC +ENDCHAR +STARTCHAR uni58F7 +ENCODING 22775 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +0000 +7FFC +4444 +3FF8 +2448 +2448 +3FF8 +0440 +0440 +FFFE +ENDCHAR +STARTCHAR uni58F8 +ENCODING 22776 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +7FFC +0100 +1FF0 +0000 +7FFE +4002 +BFFC +0440 +2448 +1448 +1450 +0440 +FFFE +ENDCHAR +STARTCHAR uni58F9 +ENCODING 22777 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0100 +1FF0 +0000 +7FFC +4004 +5FF4 +0000 +1FF0 +1010 +1FF0 +0820 +0440 +FFFE +ENDCHAR +STARTCHAR uni58FA +ENCODING 22778 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +1FF0 +0000 +7FFC +4284 +5EF4 +1010 +1010 +1EF0 +0280 +0280 +FFFE +ENDCHAR +STARTCHAR uni58FB +ENCODING 22779 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2022 +213C +F9A0 +227E +2400 +23FC +2204 +23FC +3A04 +E3FC +0204 +0204 +021C +ENDCHAR +STARTCHAR uni58FC +ENCODING 22780 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +1FF0 +0000 +7FFC +4004 +5FF4 +0280 +1EF0 +1010 +1EF0 +0280 +FFFE +ENDCHAR +STARTCHAR uni58FD +ENCODING 22781 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +0000 +1FFC +0104 +3FF4 +0000 +FFFE +0008 +7DFE +4488 +7C58 +ENDCHAR +STARTCHAR uni58FE +ENCODING 22782 +BBX 15 16 0 -2 +BITMAP +0800 +087E +FF40 +0840 +0840 +7E7C +0044 +7E44 +4244 +4244 +7E7C +4240 +2440 +0F40 +F07E +4000 +ENDCHAR +STARTCHAR uni58FF +ENCODING 22783 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +13FE +1050 +11FC +FF54 +118C +1174 +1104 +11FC +1C08 +73FE +2108 +0088 +00A8 +0010 +ENDCHAR +STARTCHAR uni5900 +ENCODING 22784 +BBX 15 16 0 -2 +BITMAP +0100 +3FF8 +0100 +1FF0 +0100 +7FFC +0104 +1FF0 +1110 +1FF0 +0100 +FFFE +0008 +3EFE +2248 +3E18 +ENDCHAR +STARTCHAR uni5901 +ENCODING 22785 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0100 +3FF8 +0000 +7FFC +4444 +7FFC +0000 +3FF8 +2108 +2FE8 +2108 +27C8 +2448 +3FF8 +ENDCHAR +STARTCHAR uni5902 +ENCODING 22786 +BBX 15 15 1 -1 +BITMAP +0400 +0400 +0400 +0FE0 +0820 +1820 +2420 +4440 +0240 +0280 +0100 +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni5903 +ENCODING 22787 +BBX 14 15 0 -2 +BITMAP +3FF0 +0410 +0420 +0420 +0440 +047C +0404 +0BE4 +0824 +0944 +1084 +1144 +2224 +4C28 +8010 +ENDCHAR +STARTCHAR uni5904 +ENCODING 22788 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +1E40 +1260 +2250 +2248 +5244 +9444 +1440 +0840 +0840 +1440 +2300 +40FE +8000 +ENDCHAR +STARTCHAR uni5905 +ENCODING 22789 +BBX 15 15 1 -1 +BITMAP +0400 +0400 +0FF0 +1820 +6440 +0380 +1C70 +E04E +0FF0 +0840 +0840 +7FF8 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5906 +ENCODING 22790 +BBX 15 15 1 -1 +BITMAP +0400 +0400 +0FF0 +1820 +6440 +0380 +1C70 +E10E +1FF0 +0100 +1FF0 +0100 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni5907 +ENCODING 22791 +BBX 15 16 0 -2 +BITMAP +0400 +0400 +0FF0 +1820 +6440 +0380 +1C70 +E00E +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +1010 +ENDCHAR +STARTCHAR uni5908 +ENCODING 22792 +BBX 15 16 0 -2 +BITMAP +0400 +0400 +0FF0 +1820 +6440 +0380 +1C70 +E10E +1110 +0920 +7FFC +0540 +0920 +1110 +6108 +0100 +ENDCHAR +STARTCHAR uni5909 +ENCODING 22793 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0420 +2428 +4424 +88E2 +1400 +07F0 +0810 +7420 +0240 +0180 +0E70 +F00E +ENDCHAR +STARTCHAR uni590A +ENCODING 22794 +BBX 15 15 1 -1 +BITMAP +0400 +4400 +4400 +2FE0 +2820 +1820 +3020 +4840 +0440 +0280 +0100 +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni590B +ENCODING 22795 +BBX 15 15 1 -1 +BITMAP +0400 +0440 +08E0 +3F10 +0010 +0480 +1884 +E07C +0400 +0FE0 +1820 +6440 +0380 +0C60 +F01E +ENDCHAR +STARTCHAR uni590C +ENCODING 22796 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +FFFE +0440 +1840 +E47E +0400 +0FF0 +3820 +0440 +0380 +0E70 +F00E +ENDCHAR +STARTCHAR uni590D +ENCODING 22797 +BBX 13 15 2 -1 +BITMAP +1000 +1000 +3FE0 +2000 +5FC0 +9040 +1FC0 +1040 +1FC0 +0800 +1FE0 +7020 +08C0 +0700 +F8F8 +ENDCHAR +STARTCHAR uni590E +ENCODING 22798 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +1110 +2928 +4544 +3FF8 +0100 +0100 +FFFE +0800 +0FF0 +1420 +2240 +4180 +0E60 +701C +ENDCHAR +STARTCHAR uni590F +ENCODING 22799 +BBX 14 14 1 -1 +BITMAP +FFFC +0200 +3FF0 +2010 +3FF0 +2010 +3FF0 +2010 +3FF0 +0800 +1FF0 +F020 +0FC0 +F83C +ENDCHAR +STARTCHAR uni5910 +ENCODING 22800 +BBX 15 15 1 -1 +BITMAP +0FE0 +3040 +FFFC +4184 +4664 +3FF8 +2008 +3FF8 +2008 +3FF8 +0400 +1FF8 +7430 +03C0 +FC3E +ENDCHAR +STARTCHAR uni5911 +ENCODING 22801 +BBX 15 16 0 -2 +BITMAP +2108 +27C8 +2008 +6B9A +B02C +2388 +2008 +5394 +4A92 +8BA2 +0400 +0FE0 +1440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni5912 +ENCODING 22802 +BBX 15 15 0 -2 +BITMAP +FFFE +1100 +13DC +5254 +5BD4 +525C +53D0 +5A52 +E3CE +2408 +4FE4 +9442 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni5913 +ENCODING 22803 +BBX 15 16 0 -2 +BITMAP +17C0 +621C +47C4 +4444 +77DC +4444 +47C4 +745C +47C4 +0000 +2408 +4FE4 +9442 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni5914 +ENCODING 22804 +BBX 15 15 1 -1 +BITMAP +1010 +0820 +FFFE +1200 +17BC +5CA4 +57BC +54A0 +5FA2 +E45E +0820 +1FF8 +E820 +07C0 +F83E +ENDCHAR +STARTCHAR uni5915 +ENCODING 22805 +BBX 11 15 3 -1 +BITMAP +0400 +0400 +0FE0 +0820 +1020 +2020 +5840 +8440 +0280 +0180 +0100 +0200 +0400 +1800 +E000 +ENDCHAR +STARTCHAR uni5916 +ENCODING 22806 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1F20 +1120 +2120 +2120 +5230 +8A2C +0622 +0420 +0420 +0820 +1020 +2020 +C020 +ENDCHAR +STARTCHAR uni5917 +ENCODING 22807 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +10F8 +1E88 +1288 +2288 +2288 +5288 +8AA8 +0490 +0480 +0882 +0882 +1082 +207E +4000 +ENDCHAR +STARTCHAR uni5918 +ENCODING 22808 +BBX 15 15 1 -1 +BITMAP +1000 +103E +1F22 +2122 +2122 +6122 +9222 +0A22 +0622 +0422 +0422 +082E +1020 +2020 +C020 +ENDCHAR +STARTCHAR uni5919 +ENCODING 22809 +BBX 15 14 1 -1 +BITMAP +7FF0 +4010 +4010 +5FD0 +4410 +4790 +4490 +4C90 +4A90 +5110 +4110 +420A +8C0A +8004 +ENDCHAR +STARTCHAR uni591A +ENCODING 22810 +BBX 12 15 2 -1 +BITMAP +0400 +0780 +0880 +1880 +6500 +0200 +0480 +18F0 +E110 +0610 +1920 +00C0 +0180 +0600 +7800 +ENDCHAR +STARTCHAR uni591B +ENCODING 22811 +BBX 15 14 1 -1 +BITMAP +1FF0 +0010 +1FF0 +0010 +FFFE +0200 +07F8 +1C08 +6208 +0190 +0060 +00C0 +0700 +7800 +ENDCHAR +STARTCHAR uni591C +ENCODING 22812 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +0840 +08FC +1084 +31C4 +5328 +9498 +1050 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni591D +ENCODING 22813 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2120 +3D20 +25FC +4520 +4620 +A420 +1420 +09FC +0820 +1020 +1020 +2020 +43FE +8000 +ENDCHAR +STARTCHAR uni591E +ENCODING 22814 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3F30 +4128 +A224 +1422 +0820 +3020 +C020 +0000 +3E44 +2258 +2260 +2242 +3E42 +223E +ENDCHAR +STARTCHAR uni591F +ENCODING 22815 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +407C +7E44 +82A8 +0210 +7A20 +4AD0 +4A1E +4A22 +7A64 +4A94 +0208 +0210 +1420 +08C0 +ENDCHAR +STARTCHAR uni5920 +ENCODING 22816 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3E40 +427E +A482 +1902 +107A +284A +CF4A +114A +327A +4A4A +0402 +0802 +3014 +C008 +ENDCHAR +STARTCHAR uni5921 +ENCODING 22817 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +3E10 +42FE +A410 +1810 +107C +2800 +CF00 +117C +3244 +4A44 +0444 +0844 +307C +C044 +ENDCHAR +STARTCHAR uni5922 +ENCODING 22818 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3FF8 +2448 +3FF8 +0000 +7FFC +4204 +47E4 +1C20 +0240 +0380 +3C00 +ENDCHAR +STARTCHAR uni5923 +ENCODING 22819 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +1010 +3FF8 +0000 +3FF8 +2448 +3FF8 +0000 +7FFE +4402 +8FF4 +3420 +02C0 +0700 +7800 +ENDCHAR +STARTCHAR uni5924 +ENCODING 22820 +BBX 13 15 2 -1 +BITMAP +03E0 +3C20 +04C0 +0700 +F800 +0200 +FFF8 +8208 +3FE0 +2220 +3FE0 +2220 +3FE0 +0880 +F078 +ENDCHAR +STARTCHAR uni5925 +ENCODING 22821 +BBX 15 15 1 -1 +BITMAP +0010 +7F1E +4922 +7F52 +490C +4908 +7F70 +0810 +FF9E +2C22 +2A62 +4A12 +490C +8818 +08E0 +ENDCHAR +STARTCHAR uni5926 +ENCODING 22822 +BBX 15 16 0 -2 +BITMAP +2220 +2220 +FF7C +2244 +3EA8 +2210 +3E20 +22D0 +221E +FF22 +4064 +5494 +6208 +4010 +7E20 +00C0 +ENDCHAR +STARTCHAR uni5927 +ENCODING 22823 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +0200 +FFF8 +0200 +0200 +0500 +0500 +0880 +0880 +1040 +2020 +4010 +8008 +ENDCHAR +STARTCHAR uni5928 +ENCODING 22824 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +1000 +2000 +2000 +7F80 +0080 +0100 +0100 +FFFE +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5929 +ENCODING 22825 +BBX 13 14 2 -1 +BITMAP +FFF8 +0200 +0200 +0200 +0200 +7FF0 +0200 +0200 +0500 +0500 +0880 +1040 +2020 +C018 +ENDCHAR +STARTCHAR uni592A +ENCODING 22826 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +0200 +FFF8 +0200 +0200 +0500 +0500 +0880 +0880 +1440 +2220 +4110 +8008 +ENDCHAR +STARTCHAR uni592B +ENCODING 22827 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +3FF8 +0100 +0100 +0100 +0100 +FFFE +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni592C +ENCODING 22828 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +3FF8 +0108 +0108 +0108 +0108 +FFFE +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni592D +ENCODING 22829 +BBX 15 14 1 -1 +BITMAP +00FC +7F00 +0100 +0100 +0100 +FFFE +0100 +0280 +0280 +0440 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni592E +ENCODING 22830 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +3FF8 +2108 +2108 +2108 +2108 +2108 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni592F +ENCODING 22831 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0820 +3018 +C106 +0100 +3FF8 +0208 +0208 +0408 +0808 +1050 +6020 +ENDCHAR +STARTCHAR uni5930 +ENCODING 22832 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0820 +3018 +C446 +0440 +0440 +0440 +0440 +0840 +0840 +1040 +2040 +ENDCHAR +STARTCHAR uni5931 +ENCODING 22833 +BBX 15 15 1 -1 +BITMAP +0100 +1100 +1100 +3FFC +2100 +4100 +0100 +0100 +7FFE +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5932 +ENCODING 22834 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +FFFE +0280 +0440 +0820 +3118 +C106 +0100 +7FFC +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5933 +ENCODING 22835 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0100 +FFFE +0280 +0440 +0820 +1010 +2008 +CFE6 +0000 +0000 +0000 +0000 +7FFC +ENDCHAR +STARTCHAR uni5934 +ENCODING 22836 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +0880 +0480 +2480 +1080 +1080 +0080 +FFFE +0100 +0140 +0220 +0410 +0808 +3004 +C004 +ENDCHAR +STARTCHAR uni5935 +ENCODING 22837 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0820 +3018 +C106 +0100 +0920 +0910 +1108 +2104 +4104 +0500 +0200 +ENDCHAR +STARTCHAR uni5936 +ENCODING 22838 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +0820 +0820 +7EFE +0820 +0820 +0850 +1450 +1250 +1288 +2088 +2104 +4204 +8402 +ENDCHAR +STARTCHAR uni5937 +ENCODING 22839 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +7FF8 +0108 +3FF8 +2100 +3FFC +0104 +0284 +0458 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5938 +ENCODING 22840 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0280 +0C60 +3018 +CFE6 +0000 +3FFC +0400 +0FF8 +0808 +0008 +0010 +00E0 +ENDCHAR +STARTCHAR uni5939 +ENCODING 22841 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +7FFC +0100 +1110 +0920 +0100 +FFFE +0100 +0280 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni593A +ENCODING 22842 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0820 +3018 +C046 +0040 +FFFE +0040 +1040 +0840 +0840 +0140 +0080 +ENDCHAR +STARTCHAR uni593B +ENCODING 22843 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +0280 +0440 +0820 +3018 +C006 +1FF0 +1010 +1010 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni593C +ENCODING 22844 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0820 +3018 +C926 +0920 +0920 +0920 +0920 +1120 +1120 +2120 +4020 +ENDCHAR +STARTCHAR uni593D +ENCODING 22845 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0280 +0440 +0820 +37D8 +C006 +0000 +3FF8 +0400 +0420 +0470 +0B88 +7C04 +ENDCHAR +STARTCHAR uni593E +ENCODING 22846 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +FFFE +0100 +1110 +1110 +2928 +4544 +8102 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni593F +ENCODING 22847 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0820 +3018 +DFF6 +1110 +1110 +1110 +1FF0 +1004 +1004 +0FFC +ENDCHAR +STARTCHAR uni5940 +ENCODING 22848 +BBX 15 15 0 -2 +BITMAP +7FFC +0100 +0300 +0560 +1918 +6104 +0000 +0100 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5941 +ENCODING 22849 +BBX 15 15 0 -1 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3018 +DFF6 +1000 +1220 +1140 +1080 +1140 +1220 +1000 +1FF8 +ENDCHAR +STARTCHAR uni5942 +ENCODING 22850 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0FE0 +1020 +2040 +5FF0 +9110 +1110 +1110 +1110 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5943 +ENCODING 22851 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3018 +C0F6 +3F00 +2100 +2100 +3FFC +2080 +2040 +2A24 +3114 +210C +ENDCHAR +STARTCHAR uni5944 +ENCODING 22852 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +0920 +1FF0 +3118 +D116 +1FF0 +1110 +1110 +1FF0 +0102 +0102 +00FE +ENDCHAR +STARTCHAR uni5945 +ENCODING 22853 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3018 +C606 +38F8 +2088 +2288 +2288 +2E88 +32A8 +2490 +0480 +0880 +ENDCHAR +STARTCHAR uni5946 +ENCODING 22854 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0280 +0440 +0820 +3FF8 +D006 +1000 +1FF0 +1010 +1FF0 +1000 +1000 +7FFC +ENDCHAR +STARTCHAR uni5947 +ENCODING 22855 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +7FF8 +0480 +0840 +3030 +0000 +FFFC +0010 +3F10 +2110 +2110 +3F10 +0010 +0070 +ENDCHAR +STARTCHAR uni5948 +ENCODING 22856 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0820 +37D8 +C006 +0000 +7FFC +0100 +0920 +3118 +C106 +0700 +ENDCHAR +STARTCHAR uni5949 +ENCODING 22857 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0280 +FFFE +0820 +1110 +2FE8 +C106 +0100 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni594A +ENCODING 22858 +BBX 15 16 0 -2 +BITMAP +0080 +0FF8 +4080 +5FFC +4080 +4FF8 +4080 +5FFC +4000 +7F00 +0100 +7FFC +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni594B +ENCODING 22859 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0820 +3018 +C006 +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +1010 +ENDCHAR +STARTCHAR uni594C +ENCODING 22860 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +01FC +0100 +0100 +1FF0 +1010 +1010 +1FF0 +0100 +0100 +7FFC +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni594D +ENCODING 22861 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +3FF8 +0200 +0200 +7FFC +0820 +1010 +2448 +C446 +0440 +0840 +0840 +1040 +2040 +ENDCHAR +STARTCHAR uni594E +ENCODING 22862 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +0920 +3FF8 +C106 +0100 +7FFC +0000 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni594F +ENCODING 22863 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0280 +FFFE +0440 +0820 +37D8 +C106 +3FF8 +0280 +1C70 +E00E +ENDCHAR +STARTCHAR uni5950 +ENCODING 22864 +BBX 15 15 1 -1 +BITMAP +0400 +0FE0 +3040 +C080 +3FF8 +2288 +2488 +28F8 +3008 +2108 +2108 +FFFE +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni5951 +ENCODING 22865 +BBX 15 15 1 -1 +BITMAP +0800 +08FC +FF24 +0824 +0824 +7F44 +0844 +0E84 +F118 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni5952 +ENCODING 22866 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0A20 +3118 +DFF6 +0400 +0840 +1F80 +0110 +0620 +3840 +01A0 +0E10 +7008 +ENDCHAR +STARTCHAR uni5953 +ENCODING 22867 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3218 +C7E6 +1840 +0580 +0680 +39F8 +0610 +1920 +00C0 +0300 +3C00 +ENDCHAR +STARTCHAR uni5954 +ENCODING 22868 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +0920 +3118 +CFE6 +0100 +0910 +0810 +FFFE +0810 +1010 +2010 +4010 +ENDCHAR +STARTCHAR uni5955 +ENCODING 22869 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +2448 +2448 +4444 +8842 +11C0 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni5956 +ENCODING 22870 +BBX 15 16 0 -2 +BITMAP +0840 +4840 +28FC +0904 +1A88 +2850 +4820 +8840 +0980 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5957 +ENCODING 22871 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0820 +3FF8 +C806 +0FE0 +0800 +0FE0 +0800 +FFFE +0840 +0830 +11C8 +7E04 +ENDCHAR +STARTCHAR uni5958 +ENCODING 22872 +BBX 15 15 1 -1 +BITMAP +0820 +4820 +4820 +7BFE +0820 +0820 +F820 +2820 +29FC +4900 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni5959 +ENCODING 22873 +BBX 15 15 0 -1 +BITMAP +0400 +0820 +1FF0 +0210 +FFFE +0820 +3118 +DFF6 +1110 +1FF0 +1110 +1FF4 +0104 +0104 +00FC +ENDCHAR +STARTCHAR uni595A +ENCODING 22874 +BBX 15 15 1 -1 +BITMAP +007C +3F80 +2108 +4484 +8842 +1080 +0D10 +0208 +7FF4 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni595B +ENCODING 22875 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0280 +0440 +1830 +E0FE +3E88 +22F8 +3E88 +2288 +22F8 +3E88 +0108 +0218 +ENDCHAR +STARTCHAR uni595C +ENCODING 22876 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +7C7C +0440 +3C78 +0440 +7C7C +0440 +0540 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni595D +ENCODING 22877 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0280 +0C60 +F01E +3FF8 +2108 +27C8 +2108 +2FE8 +2108 +27C8 +2448 +47D8 +ENDCHAR +STARTCHAR uni595E +ENCODING 22878 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3018 +C906 +0880 +1FFC +3080 +5FF8 +9080 +1FF8 +1080 +1FFC +1000 +ENDCHAR +STARTCHAR uni595F +ENCODING 22879 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0280 +0440 +1830 +FEFE +2288 +3AE8 +2698 +3AE8 +2698 +2288 +4288 +8E98 +ENDCHAR +STARTCHAR uni5960 +ENCODING 22880 +BBX 14 15 1 -1 +BITMAP +0840 +1020 +2FD0 +C48C +3FF0 +2490 +38F0 +2010 +3FF0 +2010 +3FF0 +0200 +FFFC +1860 +E01C +ENDCHAR +STARTCHAR uni5961 +ENCODING 22881 +BBX 15 16 0 -2 +BITMAP +7FFC +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +FFFE +0820 +3458 +C446 +0840 +1040 +ENDCHAR +STARTCHAR uni5962 +ENCODING 22882 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0D60 +3118 +DFF6 +0120 +FFFE +0220 +0FF0 +3810 +CFF0 +0810 +0810 +0FF0 +ENDCHAR +STARTCHAR uni5963 +ENCODING 22883 +BBX 15 15 0 -2 +BITMAP +3FF8 +0200 +7FFC +0440 +1830 +E00E +3CF8 +2488 +24F8 +3C88 +24F8 +2488 +3C88 +0128 +0210 +ENDCHAR +STARTCHAR uni5964 +ENCODING 22884 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3FF8 +C106 +0200 +3FF8 +2448 +27C8 +2448 +27C8 +2448 +3FF8 +2008 +ENDCHAR +STARTCHAR uni5965 +ENCODING 22885 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +3FF8 +2008 +2928 +2548 +2FE8 +2548 +2928 +2108 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni5966 +ENCODING 22886 +BBX 15 16 0 -2 +BITMAP +0040 +7EFC +1544 +0838 +FE44 +1AA2 +2CFC +4844 +A894 +1108 +0100 +7FFC +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni5967 +ENCODING 22887 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +3FF8 +2048 +2788 +2928 +2548 +2FE8 +2388 +2548 +2108 +FFFE +0420 +1818 +6006 +ENDCHAR +STARTCHAR uni5968 +ENCODING 22888 +BBX 15 15 1 -1 +BITMAP +481C +4BE0 +2912 +0884 +0808 +3BFE +C888 +0848 +0818 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni5969 +ENCODING 22889 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0280 +0C60 +3FF8 +E006 +23E0 +2220 +23E0 +2000 +2F78 +2948 +2F78 +2000 +3FFC +ENDCHAR +STARTCHAR uni596A +ENCODING 22890 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +1830 +E44E +0FF8 +3080 +DFF0 +1080 +1FF0 +0020 +FFFE +0820 +0420 +0060 +ENDCHAR +STARTCHAR uni596B +ENCODING 22891 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3018 +C146 +2548 +1778 +8408 +47F8 +1408 +2778 +E548 +2548 +2808 +ENDCHAR +STARTCHAR uni596C +ENCODING 22892 +BBX 15 15 1 -1 +BITMAP +0820 +487C +4BA4 +7858 +09E0 +F808 +2BFC +2888 +4848 +8938 +0100 +FFFE +0280 +1C70 +E00E +ENDCHAR +STARTCHAR uni596D +ENCODING 22893 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +7D7C +2120 +7D7C +4544 +7D7C +4544 +4544 +7EFC +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni596E +ENCODING 22894 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0440 +1AB0 +E48E +1FF0 +7080 +1FF0 +1080 +3FFC +2108 +3FF8 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni596F +ENCODING 22895 +BBX 15 16 0 -2 +BITMAP +0200 +7FFC +0420 +1918 +E9E6 +0900 +7FFC +0028 +3FFE +2020 +2FA4 +2228 +2A90 +532A +4646 +9882 +ENDCHAR +STARTCHAR uni5970 +ENCODING 22896 +BBX 15 15 0 -2 +BITMAP +3FF8 +2448 +3FF8 +0000 +FEFE +AAAA +AAAA +FEFE +0100 +0100 +7FFC +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni5971 +ENCODING 22897 +BBX 15 16 0 -2 +BITMAP +2104 +47C8 +8812 +F3BC +2008 +4B92 +F83E +0380 +AAAA +ABAA +0100 +7FFC +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni5972 +ENCODING 22898 +BBX 15 16 0 -2 +BITMAP +1000 +10EE +FEAA +28AA +44EE +9000 +7AFE +1492 +FEFE +1092 +7CFE +C410 +7DFE +4410 +7C10 +4410 +ENDCHAR +STARTCHAR uni5973 +ENCODING 22899 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +0200 +0200 +FFFE +0420 +0420 +0820 +0840 +1040 +3C80 +0300 +02C0 +0C30 +7008 +ENDCHAR +STARTCHAR uni5974 +ENCODING 22900 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +13FC +FD04 +2504 +2504 +2484 +4488 +4848 +4850 +F020 +1850 +2488 +4104 +8602 +ENDCHAR +STARTCHAR uni5975 +ENCODING 22901 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +13FE +FC10 +2410 +2410 +2410 +4410 +4810 +4810 +F010 +1810 +2410 +4010 +8070 +ENDCHAR +STARTCHAR uni5976 +ENCODING 22902 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1088 +FC88 +2488 +2490 +249E +4482 +4882 +4882 +F102 +1902 +2604 +4204 +8438 +ENDCHAR +STARTCHAR uni5977 +ENCODING 22903 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FC20 +2420 +2420 +27FE +2420 +4820 +2820 +1020 +2820 +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni5978 +ENCODING 22904 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1020 +FC20 +2420 +2420 +2420 +47FE +4820 +4820 +F020 +1820 +2420 +4020 +8020 +ENDCHAR +STARTCHAR uni5979 +ENCODING 22905 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +1020 +1120 +FD2C +2534 +2564 +27A4 +2524 +4934 +2928 +1122 +2922 +4502 +84FE +ENDCHAR +STARTCHAR uni597A +ENCODING 22906 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +1080 +10F8 +FD08 +2508 +2510 +2610 +2420 +4820 +2850 +1050 +2888 +4508 +8204 +0402 +ENDCHAR +STARTCHAR uni597B +ENCODING 22907 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +FEFE +2244 +2244 +2244 +4244 +2484 +1448 +0828 +1410 +2228 +4244 +8082 +ENDCHAR +STARTCHAR uni597C +ENCODING 22908 +BBX 15 15 1 -1 +BITMAP +1038 +11C0 +1040 +FC40 +2440 +2440 +27FE +4440 +4840 +4840 +F040 +1840 +2442 +4042 +803E +ENDCHAR +STARTCHAR uni597D +ENCODING 22909 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1008 +FC10 +2420 +2420 +2420 +47FE +4820 +4820 +F020 +1820 +2420 +4020 +80E0 +ENDCHAR +STARTCHAR uni597E +ENCODING 22910 +BBX 14 15 0 -1 +BITMAP +1020 +1020 +1020 +1020 +FD24 +2524 +2524 +2524 +2524 +4924 +2924 +1124 +2924 +45FC +8004 +ENDCHAR +STARTCHAR uni597F +ENCODING 22911 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +2040 +23FE +FC88 +2488 +2508 +2490 +6450 +2420 +3450 +248A +2502 +4402 +43FE +8000 +ENDCHAR +STARTCHAR uni5980 +ENCODING 22912 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FC40 +0440 +07FE +0488 +0488 +7C88 +4088 +4108 +4090 +4450 +5820 +6050 +4088 +0304 +ENDCHAR +STARTCHAR uni5981 +ENCODING 22913 +BBX 14 15 1 -1 +BITMAP +1080 +1080 +11FC +FD04 +2604 +2404 +2404 +4484 +4844 +4824 +F004 +1804 +2408 +4008 +8070 +ENDCHAR +STARTCHAR uni5982 +ENCODING 22914 +BBX 14 15 1 -1 +BITMAP +0800 +0800 +0800 +7EFC +1284 +1284 +2284 +2284 +4484 +4484 +F884 +0C84 +12FC +2100 +C000 +ENDCHAR +STARTCHAR uni5983 +ENCODING 22915 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2004 +FC04 +2404 +2404 +25FC +4500 +4900 +4900 +F100 +1900 +2502 +4102 +80FE +ENDCHAR +STARTCHAR uni5984 +ENCODING 22916 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +1000 +1000 +0FF8 +0200 +0200 +FFFE +0420 +0840 +1E40 +01C0 +0730 +780C +ENDCHAR +STARTCHAR uni5985 +ENCODING 22917 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +11FC +1020 +FC20 +2420 +2420 +2420 +2420 +4820 +2820 +1020 +2820 +4420 +83FE +ENDCHAR +STARTCHAR uni5986 +ENCODING 22918 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +4840 +2BFE +2888 +0888 +0888 +1888 +2908 +C890 +0850 +0820 +0850 +0888 +0B04 +ENDCHAR +STARTCHAR uni5987 +ENCODING 22919 +BBX 14 15 0 -1 +BITMAP +1000 +1000 +11FC +1004 +FC04 +2404 +2404 +25FC +2404 +4804 +2804 +1004 +2804 +45FC +8004 +ENDCHAR +STARTCHAR uni5988 +ENCODING 22920 +BBX 14 16 0 -2 +BITMAP +1000 +13F0 +1010 +1010 +FD10 +2510 +2510 +25FC +2404 +4804 +2804 +13F4 +2804 +4404 +8428 +0010 +ENDCHAR +STARTCHAR uni5989 +ENCODING 22921 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FE +FD22 +2624 +2420 +2420 +2450 +4850 +2850 +1050 +2890 +4492 +8512 +020E +ENDCHAR +STARTCHAR uni598A +ENCODING 22922 +BBX 15 15 1 -1 +BITMAP +1018 +11E0 +1020 +FC20 +2420 +2420 +2420 +47FE +4820 +4820 +F020 +1820 +2420 +4020 +81FC +ENDCHAR +STARTCHAR uni598B +ENCODING 22923 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FDFC +2420 +2420 +2420 +47FE +4820 +4820 +F050 +1850 +2488 +4104 +8202 +ENDCHAR +STARTCHAR uni598C +ENCODING 22924 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +1088 +FDFC +2488 +2488 +2488 +27FE +4888 +2888 +1088 +2888 +4508 +8508 +0208 +ENDCHAR +STARTCHAR uni598D +ENCODING 22925 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1048 +FC48 +2448 +2448 +25FE +4448 +4848 +4848 +F048 +1848 +2488 +4088 +8108 +ENDCHAR +STARTCHAR uni598E +ENCODING 22926 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1050 +FC88 +2504 +2602 +2488 +2488 +4888 +2888 +1088 +2888 +4508 +8108 +0208 +ENDCHAR +STARTCHAR uni598F +ENCODING 22927 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +FC88 +2488 +2488 +2488 +2488 +4850 +2850 +1020 +2850 +4488 +8104 +0602 +ENDCHAR +STARTCHAR uni5990 +ENCODING 22928 +BBX 15 15 0 -1 +BITMAP +1010 +1090 +1090 +1088 +FC88 +2524 +2524 +2622 +2420 +4840 +2848 +1044 +2884 +45FE +8482 +ENDCHAR +STARTCHAR uni5991 +ENCODING 22929 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +11FC +1124 +FD24 +2524 +2524 +2524 +25FC +4900 +2900 +1100 +2902 +4502 +84FE +ENDCHAR +STARTCHAR uni5992 +ENCODING 22930 +BBX 15 15 1 -1 +BITMAP +100C +11F0 +1100 +FD00 +25FE +2502 +2502 +4502 +49FE +4900 +F100 +1900 +2600 +4200 +8400 +ENDCHAR +STARTCHAR uni5993 +ENCODING 22931 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +13FE +FC20 +2420 +25FC +4484 +4888 +4848 +F050 +1820 +2450 +4188 +8606 +ENDCHAR +STARTCHAR uni5994 +ENCODING 22932 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +1040 +13FC +FC00 +2400 +25F0 +2510 +2510 +4910 +2910 +1112 +2912 +4612 +820E +0400 +ENDCHAR +STARTCHAR uni5995 +ENCODING 22933 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +FDFC +2524 +2524 +2524 +2524 +49FC +2924 +1020 +2820 +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni5996 +ENCODING 22934 +BBX 15 15 1 -1 +BITMAP +101C +11E0 +1020 +FC20 +2420 +2420 +27FE +4420 +4820 +4850 +F050 +1888 +2488 +4104 +8202 +ENDCHAR +STARTCHAR uni5997 +ENCODING 22935 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1050 +FC88 +2544 +2622 +2420 +2400 +49FC +2804 +1008 +2808 +4410 +8410 +0020 +ENDCHAR +STARTCHAR uni5998 +ENCODING 22936 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +10FC +1000 +FC00 +2400 +25FE +2420 +2420 +4840 +2840 +1088 +2884 +45FE +8482 +ENDCHAR +STARTCHAR uni5999 +ENCODING 22937 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1148 +FD48 +2544 +2644 +2642 +4448 +4848 +48C8 +F010 +1810 +2420 +4040 +8180 +ENDCHAR +STARTCHAR uni599A +ENCODING 22938 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FE +1010 +FC10 +2420 +2420 +2468 +24A4 +4922 +2A22 +1020 +2820 +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni599B +ENCODING 22939 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +FFFE +0200 +0200 +FFFE +0420 +0820 +3C40 +03C0 +0C60 +7018 +ENDCHAR +STARTCHAR uni599C +ENCODING 22940 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +13F8 +FC48 +2448 +2448 +2448 +27FE +4840 +28A0 +10A0 +2910 +4510 +8208 +0406 +ENDCHAR +STARTCHAR uni599D +ENCODING 22941 +BBX 15 15 1 -1 +BITMAP +0840 +4840 +4840 +4840 +4FFE +7888 +0888 +0888 +F910 +4910 +4BA0 +4860 +8890 +8908 +0E04 +ENDCHAR +STARTCHAR uni599E +ENCODING 22942 +BBX 15 15 0 -1 +BITMAP +1000 +11F8 +1048 +1048 +FC48 +2448 +2448 +25F8 +2488 +4888 +2888 +1088 +2888 +4488 +83FE +ENDCHAR +STARTCHAR uni599F +ENCODING 22943 +BBX 15 14 1 -1 +BITMAP +1FF8 +1008 +1FF8 +1008 +1008 +1FF8 +0200 +0200 +FFFE +0410 +1C20 +03C0 +0660 +7818 +ENDCHAR +STARTCHAR uni59A0 +ENCODING 22944 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +FDFE +2522 +2522 +2522 +2552 +494A +298A +1102 +2902 +4502 +850A +0104 +ENDCHAR +STARTCHAR uni59A1 +ENCODING 22945 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11E0 +1100 +FD00 +2500 +25FE +2510 +2510 +4910 +2910 +1110 +2910 +4610 +8210 +0410 +ENDCHAR +STARTCHAR uni59A2 +ENCODING 22946 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +1090 +1088 +FD08 +2504 +2604 +25FA +2488 +4888 +2888 +1088 +2908 +4508 +8228 +0410 +ENDCHAR +STARTCHAR uni59A3 +ENCODING 22947 +BBX 15 15 1 -1 +BITMAP +1110 +1110 +1112 +FD14 +25D8 +2510 +2510 +4510 +4910 +4910 +F110 +1910 +2512 +41D2 +870E +ENDCHAR +STARTCHAR uni59A4 +ENCODING 22948 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1004 +FE48 +2430 +2420 +27FE +4422 +4824 +4820 +F020 +1820 +2420 +4020 +80E0 +ENDCHAR +STARTCHAR uni59A5 +ENCODING 22949 +BBX 15 14 1 -1 +BITMAP +0078 +7F80 +0204 +2108 +1210 +0200 +FFFE +0420 +0820 +0820 +1E40 +03C0 +0C30 +700C +ENDCHAR +STARTCHAR uni59A6 +ENCODING 22950 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +FC20 +2420 +2420 +25FC +2420 +4820 +2820 +13FE +2820 +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni59A7 +ENCODING 22951 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1000 +1000 +FC00 +27FE +2490 +2490 +2490 +4890 +2890 +1092 +2912 +4512 +820E +0400 +ENDCHAR +STARTCHAR uni59A8 +ENCODING 22952 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FFFE +2440 +2440 +2440 +447C +4844 +4844 +F044 +1884 +2484 +4104 +8238 +ENDCHAR +STARTCHAR uni59A9 +ENCODING 22953 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2040 +2040 +F840 +4840 +4FFE +4840 +88A0 +48A0 +30A0 +1120 +2922 +4A22 +841E +0800 +ENDCHAR +STARTCHAR uni59AA +ENCODING 22954 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +1100 +1104 +FD44 +2528 +2528 +2510 +2510 +4928 +2928 +1144 +2984 +4500 +85FE +ENDCHAR +STARTCHAR uni59AB +ENCODING 22955 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +10A0 +10A0 +FC20 +27FE +2422 +2422 +2442 +4852 +284A +108A +2882 +4502 +8214 +0408 +ENDCHAR +STARTCHAR uni59AC +ENCODING 22956 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2040 +FC40 +2440 +2440 +2480 +44FC +4584 +4A84 +F484 +1884 +2484 +4084 +80FC +ENDCHAR +STARTCHAR uni59AD +ENCODING 22957 +BBX 15 16 0 -2 +BITMAP +2050 +2048 +2048 +2040 +FBFE +4880 +4880 +48FC +8944 +4944 +3128 +1128 +2A10 +4A28 +8444 +0182 +ENDCHAR +STARTCHAR uni59AE +ENCODING 22958 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1104 +FD04 +25FC +2500 +2540 +4540 +494C +4970 +F240 +1A40 +2442 +4842 +803E +ENDCHAR +STARTCHAR uni59AF +ENCODING 22959 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +FDFC +2524 +2524 +2524 +2524 +49FC +2924 +1124 +2924 +4524 +85FC +0104 +ENDCHAR +STARTCHAR uni59B0 +ENCODING 22960 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +1080 +10FE +FD40 +2540 +2640 +247C +2440 +4840 +2840 +107C +2840 +4440 +8440 +0040 +ENDCHAR +STARTCHAR uni59B1 +ENCODING 22961 +BBX 14 16 0 -2 +BITMAP +1000 +13FC +1084 +1084 +FC84 +2504 +2514 +2608 +2400 +49FC +2904 +1104 +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni59B2 +ENCODING 22962 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +1084 +FC84 +2484 +2484 +24FC +4484 +4884 +4884 +F084 +18FC +2400 +4000 +81FE +ENDCHAR +STARTCHAR uni59B3 +ENCODING 22963 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +1080 +10FE +FD02 +2504 +2620 +2420 +24A8 +48A4 +2924 +1122 +2A22 +4420 +80A0 +0040 +ENDCHAR +STARTCHAR uni59B4 +ENCODING 22964 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +3E88 +4288 +A4A8 +1894 +1084 +207C +C200 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni59B5 +ENCODING 22965 +BBX 15 15 0 -1 +BITMAP +1040 +1020 +1000 +13FE +FC20 +2420 +2420 +2420 +25FC +4820 +2820 +1020 +2820 +4420 +83FE +ENDCHAR +STARTCHAR uni59B6 +ENCODING 22966 +BBX 15 15 0 -1 +BITMAP +1020 +1010 +1010 +11FE +FC20 +2420 +2444 +2484 +25F8 +4810 +2820 +1044 +2882 +45FE +8482 +ENDCHAR +STARTCHAR uni59B7 +ENCODING 22967 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1120 +1120 +FDFC +2520 +2620 +2420 +25FE +4820 +2850 +1050 +2888 +4488 +8504 +0202 +ENDCHAR +STARTCHAR uni59B8 +ENCODING 22968 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FE +1008 +FC08 +25E8 +2528 +2528 +2528 +4928 +29E8 +1128 +2808 +4408 +8428 +0010 +ENDCHAR +STARTCHAR uni59B9 +ENCODING 22969 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FDFC +2440 +2440 +2440 +47FE +4950 +4950 +F248 +1A48 +2444 +4842 +8040 +ENDCHAR +STARTCHAR uni59BA +ENCODING 22970 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +FC20 +2420 +2420 +25FC +2470 +48A8 +28A8 +1124 +2924 +4622 +8020 +0020 +ENDCHAR +STARTCHAR uni59BB +ENCODING 22971 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0200 +FFFE +0410 +1F20 +01F0 +FE0C +ENDCHAR +STARTCHAR uni59BC +ENCODING 22972 +BBX 15 15 1 -1 +BITMAP +1040 +1020 +1010 +FC44 +2444 +2544 +2548 +4548 +4954 +4A52 +F260 +1840 +20C2 +4742 +803E +ENDCHAR +STARTCHAR uni59BD +ENCODING 22973 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FD24 +2524 +2524 +25FC +2524 +4924 +2924 +11FC +2924 +4420 +8020 +0020 +ENDCHAR +STARTCHAR uni59BE +ENCODING 22974 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0820 +0440 +7FFC +0200 +0200 +FFFE +0420 +0820 +3C40 +0380 +0E60 +7018 +ENDCHAR +STARTCHAR uni59BF +ENCODING 22975 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +7E7C +1244 +1244 +2244 +4A7C +8444 +0200 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni59C0 +ENCODING 22976 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +1020 +1020 +FC20 +27FE +2420 +2470 +2470 +48A8 +28A8 +1124 +2A22 +4420 +8020 +0020 +ENDCHAR +STARTCHAR uni59C1 +ENCODING 22977 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +1100 +11FC +FE04 +2404 +25E4 +2524 +2524 +4924 +29E4 +1124 +2804 +4404 +8428 +0010 +ENDCHAR +STARTCHAR uni59C2 +ENCODING 22978 +BBX 15 15 0 -1 +BITMAP +1004 +101E +11E0 +1000 +FC20 +2410 +25FE +2404 +2408 +4810 +2820 +1040 +2880 +4540 +823E +ENDCHAR +STARTCHAR uni59C3 +ENCODING 22979 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1020 +FE20 +2420 +2520 +2520 +453C +4920 +4920 +F120 +1920 +2520 +43FE +8000 +ENDCHAR +STARTCHAR uni59C4 +ENCODING 22980 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FD04 +25FC +2520 +2520 +25FE +4920 +2920 +1110 +2912 +454A +8586 +0102 +ENDCHAR +STARTCHAR uni59C5 +ENCODING 22981 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1124 +10A4 +FCA8 +2420 +25FC +2420 +2420 +4820 +2BFE +1020 +2820 +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni59C6 +ENCODING 22982 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +1084 +FCA4 +2494 +2484 +27FE +4504 +4944 +4924 +F114 +1904 +25FE +4008 +8038 +ENDCHAR +STARTCHAR uni59C7 +ENCODING 22983 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +17FE +3010 +5210 +9110 +1110 +1050 +1220 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni59C8 +ENCODING 22984 +BBX 15 15 1 -1 +BITMAP +1020 +1050 +1088 +FD04 +2602 +24FC +2400 +4400 +49FE +4822 +F022 +1822 +242E +4020 +8020 +ENDCHAR +STARTCHAR uni59C9 +ENCODING 22985 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FC20 +2420 +25FC +2524 +4524 +4924 +4924 +F124 +192C +2420 +4020 +8020 +ENDCHAR +STARTCHAR uni59CA +ENCODING 22986 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +102E +11F0 +FD20 +2520 +2520 +25FE +2422 +4862 +28A2 +112A +2E24 +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni59CB +ENCODING 22987 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FC88 +2484 +251E +27E2 +4400 +4800 +49FC +F104 +1904 +2504 +4104 +81FC +ENDCHAR +STARTCHAR uni59CC +ENCODING 22988 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FD24 +2524 +25FC +2524 +2524 +4924 +2BFE +1104 +2904 +4504 +8514 +0108 +ENDCHAR +STARTCHAR uni59CD +ENCODING 22989 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1154 +FD54 +2554 +2554 +2554 +47FE +4954 +4954 +F154 +1954 +2654 +4254 +840C +ENDCHAR +STARTCHAR uni59CE +ENCODING 22990 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FD24 +2524 +2524 +2524 +2524 +4BFE +2820 +1050 +2850 +4488 +8104 +0202 +ENDCHAR +STARTCHAR uni59CF +ENCODING 22991 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +1088 +FDFE +2488 +2488 +2488 +2488 +48F8 +2888 +1088 +2888 +4488 +84F8 +0088 +ENDCHAR +STARTCHAR uni59D0 +ENCODING 22992 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1108 +FD08 +2508 +25F8 +2508 +4508 +4908 +49F8 +F108 +1908 +2508 +4108 +87FE +ENDCHAR +STARTCHAR uni59D1 +ENCODING 22993 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FDFE +2420 +2420 +2420 +4420 +49FC +4904 +F104 +1904 +2504 +4104 +81FC +ENDCHAR +STARTCHAR uni59D2 +ENCODING 22994 +BBX 15 15 1 -1 +BITMAP +1004 +1104 +1104 +FD44 +2524 +2514 +2504 +4504 +4904 +4928 +F148 +1994 +2324 +4C42 +8082 +ENDCHAR +STARTCHAR uni59D3 +ENCODING 22995 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1120 +FD20 +25FE +2520 +2620 +4420 +4820 +49FC +F020 +1820 +2420 +4020 +83FE +ENDCHAR +STARTCHAR uni59D4 +ENCODING 22996 +BBX 15 15 1 -1 +BITMAP +0060 +1F80 +0100 +7FFC +0540 +1930 +610C +0200 +FFFE +0420 +0820 +1E40 +01C0 +0730 +7808 +ENDCHAR +STARTCHAR uni59D5 +ENCODING 22997 +BBX 15 16 0 -2 +BITMAP +0880 +0888 +2890 +2EA0 +28C0 +2884 +2E84 +F07C +0200 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni59D6 +ENCODING 22998 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +1100 +1100 +FD00 +25FC +2504 +2504 +2504 +4904 +29FC +1100 +2900 +4500 +85FE +ENDCHAR +STARTCHAR uni59D7 +ENCODING 22999 +BBX 15 16 0 -2 +BITMAP +1000 +11DC +1154 +1154 +FD54 +2554 +2554 +27FE +2554 +4954 +2954 +1154 +2954 +46D4 +8224 +044C +ENDCHAR +STARTCHAR uni59D8 +ENCODING 23000 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +1000 +FDFE +2488 +2488 +2488 +2488 +4BFE +2888 +1088 +2908 +4508 +8208 +0408 +ENDCHAR +STARTCHAR uni59D9 +ENCODING 23001 +BBX 15 15 1 -1 +BITMAP +210C +2170 +2110 +FA10 +2A10 +2E10 +2AFE +4A10 +4A10 +4A10 +F210 +1A10 +2610 +427C +8200 +ENDCHAR +STARTCHAR uni59DA +ENCODING 23002 +BBX 15 15 1 -1 +BITMAP +1050 +1050 +1052 +FD54 +24D8 +2450 +2450 +4458 +48D4 +4952 +F050 +1850 +2492 +4092 +810E +ENDCHAR +STARTCHAR uni59DB +ENCODING 23003 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1102 +1102 +FD7A +2502 +2502 +257A +254A +494A +294A +117A +2902 +4502 +850A +0104 +ENDCHAR +STARTCHAR uni59DC +ENCODING 23004 +BBX 15 15 1 -1 +BITMAP +1010 +0820 +7FFC +0100 +3FF8 +0100 +FFFE +0200 +0200 +FFFE +0410 +1C20 +03C0 +0630 +780C +ENDCHAR +STARTCHAR uni59DD +ENCODING 23005 +BBX 15 15 1 -1 +BITMAP +1020 +10A0 +10A0 +FDFC +2520 +2620 +2420 +47FE +48A8 +48A8 +F0A8 +1924 +2524 +4222 +8020 +ENDCHAR +STARTCHAR uni59DE +ENCODING 23006 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FDFE +2420 +2420 +2420 +45FC +4800 +49FC +F104 +1904 +2504 +4104 +81FC +ENDCHAR +STARTCHAR uni59DF +ENCODING 23007 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1010 +13FE +FC20 +2442 +2484 +25F8 +2410 +4822 +28C4 +1308 +2810 +4428 +80C4 +0302 +ENDCHAR +STARTCHAR uni59E0 +ENCODING 23008 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1040 +11FE +FD02 +2502 +257A +254A +254A +494A +294A +117A +2902 +4502 +850A +0104 +ENDCHAR +STARTCHAR uni59E1 +ENCODING 23009 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FC20 +27FE +2420 +2420 +2420 +49FC +2904 +1104 +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni59E2 +ENCODING 23010 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1048 +1084 +FDFE +2402 +2400 +24FC +2484 +48FC +2884 +10FC +2884 +4484 +8494 +0088 +ENDCHAR +STARTCHAR uni59E3 +ENCODING 23011 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FDFE +2488 +2504 +2602 +4488 +4888 +4850 +F020 +1850 +2488 +4104 +8202 +ENDCHAR +STARTCHAR uni59E4 +ENCODING 23012 +BBX 15 15 1 -1 +BITMAP +100C +11F0 +1100 +FD00 +25FE +2500 +2500 +4500 +497C +4944 +F144 +1A44 +2244 +4444 +807C +ENDCHAR +STARTCHAR uni59E5 +ENCODING 23013 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1048 +FDF8 +2448 +2450 +27FE +2440 +4880 +498C +F2F0 +1880 +2482 +4082 +807E +ENDCHAR +STARTCHAR uni59E6 +ENCODING 23014 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0220 +0420 +1E40 +01C0 +1E38 +0820 +FFFE +1248 +2288 +75D0 +1838 +E5C4 +ENDCHAR +STARTCHAR uni59E7 +ENCODING 23015 +BBX 15 15 1 -1 +BITMAP +1000 +10FE +FE10 +2410 +4410 +F810 +1410 +E1FE +1010 +FE10 +2410 +4410 +F810 +1410 +E210 +ENDCHAR +STARTCHAR uni59E8 +ENCODING 23016 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F840 +2BFC +2844 +2BFC +4A40 +4A40 +4BFE +F0A2 +18A6 +2510 +4208 +8404 +ENDCHAR +STARTCHAR uni59E9 +ENCODING 23017 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FE +1110 +FE10 +2410 +24FC +2490 +2490 +4890 +2BFE +1010 +2810 +4410 +8410 +0010 +ENDCHAR +STARTCHAR uni59EA +ENCODING 23018 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1040 +FC50 +2488 +24BC +25E4 +4420 +4820 +49FC +F020 +1820 +2420 +4020 +83FE +ENDCHAR +STARTCHAR uni59EB +ENCODING 23019 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1110 +FD10 +2510 +25FC +2504 +2504 +4904 +49FC +F110 +1910 +2510 +4110 +81FE +ENDCHAR +STARTCHAR uni59EC +ENCODING 23020 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +1110 +1110 +FD10 +257C +2544 +2544 +2544 +4944 +297C +1110 +2910 +4510 +85FE +ENDCHAR +STARTCHAR uni59ED +ENCODING 23021 +BBX 15 16 0 -2 +BITMAP +0200 +1FF0 +0410 +0850 +1020 +7EFC +1224 +2A54 +4488 +0400 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni59EE +ENCODING 23022 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1000 +FC00 +25F8 +2508 +2508 +45F8 +4908 +4908 +F108 +19F8 +2400 +4000 +83FE +ENDCHAR +STARTCHAR uni59EF +ENCODING 23023 +BBX 15 16 0 -2 +BITMAP +1040 +1044 +1244 +1148 +FD50 +2440 +27FE +2490 +2490 +4890 +2890 +1092 +2912 +4512 +820E +0400 +ENDCHAR +STARTCHAR uni59F0 +ENCODING 23024 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +11FC +1104 +FE04 +25E4 +2524 +2524 +25E4 +4924 +2924 +11E4 +2904 +4404 +8428 +0010 +ENDCHAR +STARTCHAR uni59F1 +ENCODING 23025 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1050 +FC88 +2504 +26FA +2400 +27FE +4840 +2880 +11FC +2804 +4404 +8428 +0010 +ENDCHAR +STARTCHAR uni59F2 +ENCODING 23026 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +2020 +23FE +FA02 +4C44 +4840 +4BFE +4888 +9088 +5108 +20D0 +3020 +4850 +4888 +8304 +ENDCHAR +STARTCHAR uni59F3 +ENCODING 23027 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +10FC +1104 +FE88 +2450 +2420 +2440 +2480 +49FC +2A84 +1084 +2884 +4484 +84FC +0084 +ENDCHAR +STARTCHAR uni59F4 +ENCODING 23028 +BBX 15 16 0 -2 +BITMAP +0004 +7FA4 +1024 +3F24 +5124 +0A04 +0C04 +3014 +C208 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni59F5 +ENCODING 23029 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2404 +2404 +F5F4 +5444 +5444 +55F4 +5554 +9554 +5554 +2554 +2574 +5446 +5446 +8842 +ENDCHAR +STARTCHAR uni59F6 +ENCODING 23030 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1050 +FC88 +2706 +2400 +24F8 +4400 +4800 +49FC +F104 +1904 +2504 +4104 +81FC +ENDCHAR +STARTCHAR uni59F7 +ENCODING 23031 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FE +1040 +FC40 +24FC +2484 +2584 +26FC +4884 +2884 +10FC +2884 +4484 +8494 +0088 +ENDCHAR +STARTCHAR uni59F8 +ENCODING 23032 +BBX 15 15 1 -1 +BITMAP +1000 +11DC +1088 +FC88 +2488 +2488 +24C8 +45BE +4A88 +4888 +FC88 +1308 +2108 +4208 +8408 +ENDCHAR +STARTCHAR uni59F9 +ENCODING 23033 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +11FE +FD02 +2604 +2418 +25E0 +2440 +4840 +287E +13C0 +2840 +4444 +8444 +003C +ENDCHAR +STARTCHAR uni59FA +ENCODING 23034 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +1120 +11FC +FD20 +2620 +2420 +27FE +2490 +4890 +2890 +1090 +2912 +4512 +8212 +040E +ENDCHAR +STARTCHAR uni59FB +ENCODING 23035 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2202 +FA22 +2A22 +2AFA +2A22 +4A22 +4A22 +4A52 +F252 +1A8A +2602 +4202 +83FE +ENDCHAR +STARTCHAR uni59FC +ENCODING 23036 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +107C +1084 +FD48 +2430 +2420 +2448 +2590 +483E +2842 +11A4 +2818 +4410 +8460 +0180 +ENDCHAR +STARTCHAR uni59FD +ENCODING 23037 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10FC +1104 +FE08 +25FE +2500 +257C +2544 +4944 +2954 +1148 +2942 +4542 +853E +0200 +ENDCHAR +STARTCHAR uni59FE +ENCODING 23038 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +1050 +1088 +FD04 +2602 +25FC +2420 +2420 +4820 +29FC +1020 +2820 +4420 +83FE +ENDCHAR +STARTCHAR uni59FF +ENCODING 23039 +BBX 15 15 1 -1 +BITMAP +0100 +6100 +13FC +0448 +0040 +10A0 +2318 +CC06 +0200 +FFFE +0410 +0820 +1FC0 +0270 +7C0C +ENDCHAR +STARTCHAR uni5A00 +ENCODING 23040 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +2024 +2020 +FBFE +4820 +4924 +4924 +8924 +4BA8 +3128 +1110 +2A12 +4A2A +8446 +0082 +ENDCHAR +STARTCHAR uni5A01 +ENCODING 23041 +BBX 15 15 1 -1 +BITMAP +0048 +0044 +0040 +7FFE +4040 +5F40 +4444 +5FA4 +4928 +4928 +5A10 +4610 +892A +90CA +8304 +ENDCHAR +STARTCHAR uni5A02 +ENCODING 23042 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +1088 +FDFE +2488 +2488 +2488 +2488 +4BFE +2800 +1088 +2884 +4504 +8202 +0402 +ENDCHAR +STARTCHAR uni5A03 +ENCODING 23043 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FDFC +2420 +2420 +27FE +4420 +4820 +49FC +F020 +1820 +2420 +4020 +83FE +ENDCHAR +STARTCHAR uni5A04 +ENCODING 23044 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +FFFE +0540 +0920 +3118 +C006 +0200 +FFFE +0420 +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5A05 +ENCODING 23045 +BBX 15 15 0 -1 +BITMAP +2000 +23FC +2090 +2090 +F890 +4892 +4C92 +4A94 +8A94 +4A98 +3090 +1090 +2890 +4890 +87FE +ENDCHAR +STARTCHAR uni5A06 +ENCODING 23046 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +20BC +23C0 +F850 +4824 +48D4 +4B0C +8800 +4BFE +3090 +1090 +2912 +4912 +820E +0400 +ENDCHAR +STARTCHAR uni5A07 +ENCODING 23047 +BBX 15 16 0 -2 +BITMAP +1008 +101C +10E0 +1020 +FC20 +25FE +2450 +2488 +2504 +4A8A +2888 +1088 +2888 +4488 +8488 +0108 +ENDCHAR +STARTCHAR uni5A08 +ENCODING 23048 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0440 +1450 +1448 +2444 +4204 +0200 +7FFC +0420 +0840 +1C80 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5A09 +ENCODING 23049 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +11FC +FD24 +25FC +2524 +25FC +4400 +4BFE +4880 +F1FC +1904 +2404 +4004 +8038 +ENDCHAR +STARTCHAR uni5A0A +ENCODING 23050 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +FDF8 +2508 +2508 +25F8 +2508 +4908 +29F8 +1090 +2890 +4512 +8212 +040E +ENDCHAR +STARTCHAR uni5A0B +ENCODING 23051 +BBX 14 16 0 -2 +BITMAP +1020 +1124 +10A4 +10A8 +FC20 +25FC +2504 +2504 +25FC +4904 +2904 +11FC +2904 +4504 +8514 +0108 +ENDCHAR +STARTCHAR uni5A0C +ENCODING 23052 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1124 +FD24 +25FC +2524 +2524 +45FC +4820 +4820 +F1FC +1820 +2420 +4020 +83FE +ENDCHAR +STARTCHAR uni5A0D +ENCODING 23053 +BBX 15 15 1 -1 +BITMAP +1018 +1014 +1014 +FBFE +2A10 +2A10 +2BF2 +4A52 +5252 +5254 +FA54 +1648 +259A +442A +88C4 +ENDCHAR +STARTCHAR uni5A0E +ENCODING 23054 +BBX 15 16 0 -2 +BITMAP +080C +08F0 +7E80 +0880 +0EFE +7888 +0888 +2908 +1208 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5A0F +ENCODING 23055 +BBX 15 16 0 -2 +BITMAP +1090 +1088 +1080 +13FE +FCA0 +24A8 +24B0 +24A4 +24A8 +48B0 +2924 +112A +2932 +4622 +82DE +0400 +ENDCHAR +STARTCHAR uni5A10 +ENCODING 23056 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11C0 +1004 +FD44 +24A8 +2400 +25F8 +2410 +4820 +2BFE +1020 +2820 +4420 +84A0 +0040 +ENDCHAR +STARTCHAR uni5A11 +ENCODING 23057 +BBX 15 15 1 -1 +BITMAP +2040 +1248 +8444 +6842 +01C8 +0810 +3060 +C780 +0000 +0400 +FFFE +1020 +3C40 +03E0 +FC1C +ENDCHAR +STARTCHAR uni5A12 +ENCODING 23058 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FE +1100 +FEFC +2484 +24A4 +2494 +25FE +4884 +2924 +1114 +29FE +4404 +8428 +0010 +ENDCHAR +STARTCHAR uni5A13 +ENCODING 23059 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1104 +FD04 +25FC +2500 +2518 +45E0 +493C +49E0 +F13C +19E0 +2622 +4222 +801E +ENDCHAR +STARTCHAR uni5A14 +ENCODING 23060 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FC20 +25FC +2504 +2504 +2504 +49FC +2850 +1050 +2892 +4492 +8112 +020E +ENDCHAR +STARTCHAR uni5A15 +ENCODING 23061 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FC20 +25FC +2524 +2524 +25FC +4820 +2870 +10A8 +2924 +4622 +8020 +0020 +ENDCHAR +STARTCHAR uni5A16 +ENCODING 23062 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FD04 +2504 +25FC +2420 +2420 +4920 +293E +1120 +2920 +46A0 +847E +0800 +ENDCHAR +STARTCHAR uni5A17 +ENCODING 23063 +BBX 15 15 1 -1 +BITMAP +100C +1770 +1110 +F910 +2A10 +2FFE +2890 +4890 +4910 +5510 +F610 +1A7E +2300 +4480 +887E +ENDCHAR +STARTCHAR uni5A18 +ENCODING 23064 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +11FC +FD04 +2504 +25FC +2504 +4504 +49FE +4922 +F124 +1910 +2508 +41E4 +8702 +ENDCHAR +STARTCHAR uni5A19 +ENCODING 23065 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +1000 +1092 +FD24 +2648 +2524 +2492 +2400 +49FE +2820 +1020 +2820 +4420 +83FE +ENDCHAR +STARTCHAR uni5A1A +ENCODING 23066 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1124 +FD24 +25FC +2524 +2524 +45FC +4820 +49FE +F042 +1842 +2482 +4102 +821C +ENDCHAR +STARTCHAR uni5A1B +ENCODING 23067 +BBX 15 16 0 -2 +BITMAP +2000 +20F8 +2088 +2088 +FAF8 +4A00 +4A00 +4BFC +8844 +4844 +37FE +1040 +28A0 +4910 +8208 +0406 +ENDCHAR +STARTCHAR uni5A1C +ENCODING 23068 +BBX 15 15 1 -1 +BITMAP +2000 +23DE +2152 +F952 +2954 +2BD4 +2954 +4952 +4952 +4BD2 +F152 +1952 +265C +4250 +84D0 +ENDCHAR +STARTCHAR uni5A1D +ENCODING 23069 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1010 +1020 +FC68 +24A4 +2722 +2420 +2400 +49FC +2904 +1104 +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni5A1E +ENCODING 23070 +BBX 15 16 0 -2 +BITMAP +2008 +203C +23C0 +2044 +FA24 +4928 +4900 +4840 +8BFE +4888 +3108 +1390 +2860 +4850 +8188 +0604 +ENDCHAR +STARTCHAR uni5A1F +ENCODING 23071 +BBX 14 15 1 -1 +BITMAP +1000 +11FC +1104 +FD04 +25FC +2400 +25FC +4504 +49FC +4904 +F104 +19FC +2504 +4104 +811C +ENDCHAR +STARTCHAR uni5A20 +ENCODING 23072 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2200 +FA00 +2AF8 +2A00 +2A00 +4BFE +4A90 +5294 +F294 +1C88 +2488 +48E4 +8382 +ENDCHAR +STARTCHAR uni5A21 +ENCODING 23073 +BBX 15 15 0 -1 +BITMAP +2020 +2020 +2020 +23FE +F820 +4820 +4820 +49FC +8840 +4820 +30A4 +1282 +2A8A +4A8A +8478 +ENDCHAR +STARTCHAR uni5A22 +ENCODING 23074 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1088 +FD44 +2622 +24F8 +2408 +2410 +4820 +29FC +1104 +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni5A23 +ENCODING 23075 +BBX 15 15 1 -1 +BITMAP +1084 +1048 +11FC +FC24 +2424 +25FC +2520 +4520 +49FE +4822 +F062 +18A2 +252C +4220 +8020 +ENDCHAR +STARTCHAR uni5A24 +ENCODING 23076 +BBX 15 16 0 -2 +BITMAP +2420 +2420 +2420 +3DFC +0420 +FC20 +2420 +24F8 +4600 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5A25 +ENCODING 23077 +BBX 15 15 1 -1 +BITMAP +21A8 +2724 +2120 +F920 +2FFE +2920 +2924 +4924 +49A8 +4F18 +F110 +1910 +252A +412A +8344 +ENDCHAR +STARTCHAR uni5A26 +ENCODING 23078 +BBX 15 16 0 -2 +BITMAP +1010 +1038 +11C0 +1100 +FD00 +25FC +2510 +2510 +2510 +4910 +2BFE +1000 +2890 +4508 +8204 +0402 +ENDCHAR +STARTCHAR uni5A27 +ENCODING 23079 +BBX 15 15 1 -1 +BITMAP +1020 +1090 +1108 +FF06 +25F8 +2508 +2508 +4508 +49F8 +4890 +F090 +1890 +2512 +4112 +820E +ENDCHAR +STARTCHAR uni5A28 +ENCODING 23080 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +11FC +FD04 +25FC +2400 +2400 +25FC +4820 +2820 +13FE +2820 +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni5A29 +ENCODING 23081 +BBX 15 15 1 -1 +BITMAP +1040 +1078 +1088 +FD10 +27FC +2524 +2524 +4544 +45FC +4890 +F090 +1890 +2512 +4212 +840E +ENDCHAR +STARTCHAR uni5A2A +ENCODING 23082 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1040 +1040 +FDFC +2484 +2484 +27FE +2400 +4800 +29FC +1104 +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni5A2B +ENCODING 23083 +BBX 15 16 0 -2 +BITMAP +2004 +200E +23B8 +2088 +F888 +4928 +492E +4BA8 +88A8 +4AA8 +32A8 +113E +2900 +4A80 +847E +0800 +ENDCHAR +STARTCHAR uni5A2C +ENCODING 23084 +BBX 15 16 0 -2 +BITMAP +2010 +2018 +23D4 +2014 +F810 +4FFE +4810 +4890 +8890 +4AD0 +3290 +1290 +2A8A +4AEA +8706 +0202 +ENDCHAR +STARTCHAR uni5A2D +ENCODING 23085 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1088 +FD18 +27E4 +2480 +2480 +45FC +4A40 +4840 +F7FE +1840 +24A0 +4318 +8C06 +ENDCHAR +STARTCHAR uni5A2E +ENCODING 23086 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +FC00 +25FC +2400 +2400 +25FC +4800 +2800 +11FC +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni5A2F +ENCODING 23087 +BBX 15 15 1 -1 +BITMAP +1000 +1078 +1148 +1148 +FD48 +2578 +2500 +4500 +49FC +4804 +F004 +1BFE +2440 +4088 +8306 +ENDCHAR +STARTCHAR uni5A30 +ENCODING 23088 +BBX 15 16 0 -2 +BITMAP +2108 +2148 +2128 +22A8 +FAA8 +4E88 +4A88 +4A88 +4A88 +9288 +52A8 +22D4 +3294 +4A22 +4A42 +8282 +ENDCHAR +STARTCHAR uni5A31 +ENCODING 23089 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2208 +2208 +FBF8 +4800 +4800 +4BF8 +8840 +4840 +37FE +1040 +28A0 +4910 +8208 +0406 +ENDCHAR +STARTCHAR uni5A32 +ENCODING 23090 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2104 +2104 +F904 +49FC +4820 +4820 +4BFE +9222 +5252 +228A +330A +4A02 +4A0A +8204 +ENDCHAR +STARTCHAR uni5A33 +ENCODING 23091 +BBX 15 16 0 -2 +BITMAP +2042 +20E2 +2382 +208A +F88A +488A +4BEA +488A +498A +91CA +52AA +2282 +3482 +4882 +488A +8084 +ENDCHAR +STARTCHAR uni5A34 +ENCODING 23092 +BBX 14 16 0 -2 +BITMAP +1100 +10BC +1004 +1124 +FD24 +2524 +25FC +2524 +2574 +49AC +2924 +1124 +2924 +4504 +8514 +0108 +ENDCHAR +STARTCHAR uni5A35 +ENCODING 23093 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2280 +FA80 +2BFE +2A82 +2AA2 +4AA2 +4BA4 +4A94 +F298 +1A88 +2398 +46A4 +80C2 +ENDCHAR +STARTCHAR uni5A36 +ENCODING 23094 +BBX 15 14 1 -1 +BITMAP +7E00 +23FC +3E84 +2244 +3E28 +2230 +3E48 +C386 +0200 +FFFE +0820 +3C40 +03E0 +7E1C +ENDCHAR +STARTCHAR uni5A37 +ENCODING 23095 +BBX 15 15 0 -1 +BITMAP +1008 +103C +11E0 +1020 +FDFE +24A8 +24A8 +24A8 +27FE +48A8 +28A8 +13FE +2820 +4420 +85FC +ENDCHAR +STARTCHAR uni5A38 +ENCODING 23096 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC88 +24F8 +2488 +2488 +24F8 +4888 +2888 +13FE +2800 +4488 +8504 +0202 +ENDCHAR +STARTCHAR uni5A39 +ENCODING 23097 +BBX 15 16 0 -2 +BITMAP +2010 +2388 +2088 +20FE +F890 +4B90 +4A24 +4A24 +4A38 +9388 +5090 +2090 +30A4 +48BE +4A82 +8100 +ENDCHAR +STARTCHAR uni5A3A +ENCODING 23098 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2042 +214A +F884 +494A +4A52 +4C20 +8800 +4BDE +3052 +1152 +2894 +4948 +8254 +0422 +ENDCHAR +STARTCHAR uni5A3B +ENCODING 23099 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +2524 +25FC +2524 +25FC +4820 +2870 +10A8 +2924 +4622 +8020 +0020 +ENDCHAR +STARTCHAR uni5A3C +ENCODING 23100 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +1084 +FCFC +2484 +2484 +24FC +4400 +49FE +4902 +F102 +19FE +2502 +4102 +81FE +ENDCHAR +STARTCHAR uni5A3D +ENCODING 23101 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1008 +1008 +FDF8 +2408 +2408 +27FE +2420 +4A22 +2974 +10A8 +2924 +4622 +80A0 +0040 +ENDCHAR +STARTCHAR uni5A3E +ENCODING 23102 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1110 +1110 +FD7C +2510 +2510 +25FE +2500 +4910 +2910 +117C +2910 +4610 +82FE +0400 +ENDCHAR +STARTCHAR uni5A3F +ENCODING 23103 +BBX 15 15 0 -2 +BITMAP +7BFE +4808 +51E8 +4928 +45E8 +5408 +4828 +4210 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5A40 +ENCODING 23104 +BBX 15 15 1 -1 +BITMAP +2000 +277E +2504 +F504 +5574 +5554 +5654 +5554 +5554 +9574 +E504 +3704 +2C04 +4404 +841C +ENDCHAR +STARTCHAR uni5A41 +ENCODING 23105 +BBX 15 15 1 -1 +BITMAP +0100 +3FF8 +2108 +FFFE +2108 +3FF8 +0100 +3FF8 +2108 +3FF8 +0200 +FFFE +0810 +0FE0 +783E +ENDCHAR +STARTCHAR uni5A42 +ENCODING 23106 +BBX 15 16 0 -2 +BITMAP +2020 +2040 +21FC +2104 +F9FC +4904 +49FC +4820 +4820 +93FE +5222 +2222 +322A +4A24 +4820 +8020 +ENDCHAR +STARTCHAR uni5A43 +ENCODING 23107 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2202 +F800 +49FC +4800 +4800 +4BFE +9020 +5128 +2124 +3222 +4C22 +48A0 +8040 +ENDCHAR +STARTCHAR uni5A44 +ENCODING 23108 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +1000 +FD08 +2490 +2400 +27FE +2400 +4800 +29FC +1104 +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni5A45 +ENCODING 23109 +BBX 14 16 0 -2 +BITMAP +1100 +1100 +11FC +1204 +FC44 +2554 +24E4 +2444 +27FC +4844 +28E4 +1154 +2A44 +4444 +8414 +0008 +ENDCHAR +STARTCHAR uni5A46 +ENCODING 23110 +BBX 15 15 1 -1 +BITMAP +2020 +1BFE +8222 +63FC +0284 +1248 +2430 +48D8 +8306 +0400 +FFFE +0810 +1F20 +00F8 +7F06 +ENDCHAR +STARTCHAR uni5A47 +ENCODING 23111 +BBX 15 16 0 -2 +BITMAP +2008 +203C +23C0 +2044 +FA24 +4928 +4900 +4820 +8BFE +4870 +30A8 +10A8 +2924 +4A22 +8420 +0020 +ENDCHAR +STARTCHAR uni5A48 +ENCODING 23112 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +21FC +2020 +F820 +4BFE +4888 +4944 +8A42 +48F8 +3188 +1250 +2820 +4850 +8188 +0606 +ENDCHAR +STARTCHAR uni5A49 +ENCODING 23113 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +FA02 +2900 +29DE +2952 +4A52 +4A52 +4D52 +F0D6 +1890 +2492 +4112 +860E +ENDCHAR +STARTCHAR uni5A4A +ENCODING 23114 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FC20 +25FC +2420 +2420 +27FE +4840 +28A4 +11A8 +2A90 +4488 +84C6 +0080 +ENDCHAR +STARTCHAR uni5A4B +ENCODING 23115 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +103E +1020 +FDFE +2522 +2538 +25E0 +2522 +491E +2900 +1178 +2A48 +464A +848A +0906 +ENDCHAR +STARTCHAR uni5A4C +ENCODING 23116 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +21DC +2114 +F114 +5114 +57D4 +5014 +5114 +9114 +5588 +2548 +2948 +5114 +5514 +8222 +ENDCHAR +STARTCHAR uni5A4D +ENCODING 23117 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1050 +FC88 +2504 +27FE +2408 +25E8 +4928 +2928 +11E8 +2928 +4408 +8428 +0010 +ENDCHAR +STARTCHAR uni5A4E +ENCODING 23118 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +1090 +11FE +FD20 +2520 +27FC +2520 +2520 +49FC +2920 +1120 +2920 +45FE +8500 +0100 +ENDCHAR +STARTCHAR uni5A4F +ENCODING 23119 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10F8 +1108 +FE10 +25FC +2524 +2524 +2524 +49FC +2850 +1058 +2894 +4492 +8112 +020E +ENDCHAR +STARTCHAR uni5A50 +ENCODING 23120 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +FDFC +2524 +2524 +25FC +2420 +4BFE +2870 +10A8 +2924 +4622 +8020 +0020 +ENDCHAR +STARTCHAR uni5A51 +ENCODING 23121 +BBX 15 16 0 -2 +BITMAP +201C +21E0 +2020 +2020 +FBFE +48A8 +4924 +4A42 +4840 +93FE +5088 +2108 +30D0 +4830 +4848 +8184 +ENDCHAR +STARTCHAR uni5A52 +ENCODING 23122 +BBX 15 16 0 -2 +BITMAP +1020 +10A2 +10A2 +1124 +FC50 +2488 +2704 +2422 +2420 +48A4 +28A4 +1128 +2850 +4488 +8504 +0202 +ENDCHAR +STARTCHAR uni5A53 +ENCODING 23123 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FC7E +0440 +7C7C +0440 +FC7E +0440 +0640 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5A54 +ENCODING 23124 +BBX 15 16 0 -2 +BITMAP +2090 +2090 +2090 +279E +F890 +4890 +4890 +4B9C +4890 +9090 +5090 +279E +3090 +4890 +4890 +8090 +ENDCHAR +STARTCHAR uni5A55 +ENCODING 23125 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FC20 +25FC +2424 +27FE +4424 +49FC +4820 +F120 +193C +2520 +42E0 +843E +ENDCHAR +STARTCHAR uni5A56 +ENCODING 23126 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2040 +2040 +FBFE +48A0 +4910 +4A08 +4C46 +9040 +5048 +2264 +3252 +4C52 +4940 +8080 +ENDCHAR +STARTCHAR uni5A57 +ENCODING 23127 +BBX 15 16 0 -2 +BITMAP +2000 +2040 +239C +2204 +FA04 +4B9C +4A04 +4A04 +8BFC +4890 +3090 +1090 +2890 +4912 +8212 +040E +ENDCHAR +STARTCHAR uni5A58 +ENCODING 23128 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +10A8 +1020 +FDFC +2440 +27FE +2488 +2504 +4AFA +2C88 +1088 +28A8 +4492 +8482 +007E +ENDCHAR +STARTCHAR uni5A59 +ENCODING 23129 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10F8 +1108 +FE10 +25FC +2424 +2424 +25FE +4824 +2824 +11FC +2824 +4420 +84A0 +0040 +ENDCHAR +STARTCHAR uni5A5A +ENCODING 23130 +BBX 15 15 1 -1 +BITMAP +100C +11F0 +1110 +FDFE +2510 +2510 +25CA +4706 +49FC +4904 +F104 +19FC +2504 +4104 +81FC +ENDCHAR +STARTCHAR uni5A5B +ENCODING 23131 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +FC00 +25FC +2504 +2504 +25FC +4820 +2928 +1124 +2A22 +4422 +80A0 +0040 +ENDCHAR +STARTCHAR uni5A5C +ENCODING 23132 +BBX 15 15 0 -2 +BITMAP +7F7C +4844 +7F44 +4128 +7F10 +4828 +7F44 +0082 +0400 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5A5D +ENCODING 23133 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2202 +FC04 +4800 +4BFE +4820 +8820 +4920 +313C +1120 +2AA0 +4A60 +843E +0800 +ENDCHAR +STARTCHAR uni5A5E +ENCODING 23134 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1020 +FC20 +27FE +2488 +2450 +25FC +4820 +2820 +13FE +2820 +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni5A5F +ENCODING 23135 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2222 +2222 +FBFE +4A22 +4A22 +4AFA +4A8A +928A +528A +22FA +328A +4A02 +4BFE +8202 +ENDCHAR +STARTCHAR uni5A60 +ENCODING 23136 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC04 +25F8 +2508 +2508 +25F8 +4900 +2900 +11FC +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni5A61 +ENCODING 23137 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2020 +23FE +F820 +4924 +4924 +4924 +8AAA +4870 +30A8 +10A8 +2924 +4A22 +8420 +0020 +ENDCHAR +STARTCHAR uni5A62 +ENCODING 23138 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23FC +FA44 +2BFC +2A44 +2A44 +4BFC +4890 +4910 +F7FE +1810 +2410 +4010 +8010 +ENDCHAR +STARTCHAR uni5A63 +ENCODING 23139 +BBX 15 16 0 -2 +BITMAP +2050 +2252 +2252 +2252 +FBDE +4A02 +4A02 +4BFE +8A02 +4A02 +33DE +1252 +2A52 +4252 +8452 +0802 +ENDCHAR +STARTCHAR uni5A64 +ENCODING 23140 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2222 +2222 +FAFA +4A22 +4A22 +4BFE +8A02 +4AFA +328A +128A +2AFA +4A02 +820A +0404 +ENDCHAR +STARTCHAR uni5A65 +ENCODING 23141 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +107E +FC40 +25FC +2504 +25FC +4504 +4904 +49FC +F020 +1BFE +2420 +4020 +8020 +ENDCHAR +STARTCHAR uni5A66 +ENCODING 23142 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1004 +FDFC +2404 +25FC +2400 +47FE +4A22 +4A22 +F1FC +1924 +2524 +412C +8020 +ENDCHAR +STARTCHAR uni5A67 +ENCODING 23143 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +11FC +FC20 +24F8 +2420 +27FE +4400 +49FC +4924 +F124 +19FC +2504 +4104 +810C +ENDCHAR +STARTCHAR uni5A68 +ENCODING 23144 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1088 +FD04 +26FA +2400 +25FC +2554 +4954 +29FC +1154 +2954 +4554 +8504 +010C +ENDCHAR +STARTCHAR uni5A69 +ENCODING 23145 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +FDFC +2400 +25FE +2500 +257C +4910 +2910 +11FE +2910 +4610 +8210 +0410 +ENDCHAR +STARTCHAR uni5A6A +ENCODING 23146 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +28A8 +2EA4 +4922 +8820 +0A00 +0200 +FFFE +0410 +1C20 +03C0 +0630 +7808 +ENDCHAR +STARTCHAR uni5A6B +ENCODING 23147 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FDFC +2504 +2504 +25FC +2400 +4912 +29D4 +1118 +2910 +4552 +8592 +010E +ENDCHAR +STARTCHAR uni5A6C +ENCODING 23148 +BBX 15 15 1 -1 +BITMAP +100C +11F8 +1144 +FD22 +2622 +2400 +241C +45E0 +4820 +4820 +F3FE +1820 +2420 +4020 +81FC +ENDCHAR +STARTCHAR uni5A6D +ENCODING 23149 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1050 +FC50 +2450 +25DC +2504 +4504 +4904 +49DC +F050 +1850 +2450 +4050 +83FE +ENDCHAR +STARTCHAR uni5A6E +ENCODING 23150 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FDFC +2510 +2510 +25FE +2510 +4910 +297C +1144 +2944 +4544 +857C +0244 +ENDCHAR +STARTCHAR uni5A6F +ENCODING 23151 +BBX 15 15 0 -2 +BITMAP +FEFE +0000 +7C7C +4444 +6464 +5454 +4444 +4644 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5A70 +ENCODING 23152 +BBX 15 16 0 -2 +BITMAP +1050 +1050 +1050 +11FC +FD54 +2554 +2554 +25FC +2554 +4954 +2954 +13FE +2800 +4488 +8104 +0202 +ENDCHAR +STARTCHAR uni5A71 +ENCODING 23153 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +05FC +7C40 +4088 +7DF0 +0420 +0448 +29FC +1004 +0200 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni5A72 +ENCODING 23154 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC88 +2450 +2450 +2494 +2594 +4A98 +2890 +10B2 +28D2 +4492 +848E +0080 +ENDCHAR +STARTCHAR uni5A73 +ENCODING 23155 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2000 +2000 +F8F8 +48A8 +4AAA +4AFA +4AAA +92AA +52AA +22FA +3202 +4A02 +4BFE +8002 +ENDCHAR +STARTCHAR uni5A74 +ENCODING 23156 +BBX 13 15 1 -2 +BITMAP +7DF0 +4510 +5550 +5550 +5550 +28A0 +C510 +0400 +FFF8 +0840 +1080 +3900 +0700 +0CE0 +7010 +ENDCHAR +STARTCHAR uni5A75 +ENCODING 23157 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +1050 +11FC +FD24 +2524 +25FC +2524 +2524 +49FC +2820 +1020 +2BFE +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni5A76 +ENCODING 23158 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2222 +F820 +49FC +4924 +4924 +49FC +9124 +5124 +21FC +3124 +4820 +4820 +8020 +ENDCHAR +STARTCHAR uni5A77 +ENCODING 23159 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FC00 +25FC +2504 +25FC +4400 +4BFE +4A02 +F1FC +1820 +2420 +4020 +8060 +ENDCHAR +STARTCHAR uni5A78 +ENCODING 23160 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +10FC +FC84 +24FC +2400 +25FE +2480 +48FE +292A +124A +2892 +4522 +8454 +0088 +ENDCHAR +STARTCHAR uni5A79 +ENCODING 23161 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2050 +2050 +FBFE +4A52 +4A52 +4BFE +4800 +9040 +57FE +2088 +3190 +4860 +48D8 +8304 +ENDCHAR +STARTCHAR uni5A7A +ENCODING 23162 +BBX 15 15 1 -1 +BITMAP +7E80 +24FE +1884 +FF44 +2A28 +4810 +8828 +19C6 +0200 +FFFE +0410 +0820 +1E40 +01E0 +FE18 +ENDCHAR +STARTCHAR uni5A7B +ENCODING 23163 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +23FE +2020 +F820 +4BFE +4A8A +4A52 +4AFA +9222 +5222 +22FA +3222 +4A22 +4A2A +8204 +ENDCHAR +STARTCHAR uni5A7C +ENCODING 23164 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FCA8 +2420 +27FE +2440 +2480 +48FC +2984 +1284 +2884 +4484 +84FC +0084 +ENDCHAR +STARTCHAR uni5A7D +ENCODING 23165 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2242 +2242 +FA42 +4BDE +4A00 +4A3E +4BD2 +9212 +5214 +23D4 +3208 +4A14 +4A24 +8242 +ENDCHAR +STARTCHAR uni5A7E +ENCODING 23166 +BBX 15 15 1 -1 +BITMAP +11E0 +1050 +1088 +FF06 +2478 +2400 +27CA +464A +4B4A +4AD4 +F254 +1B54 +26CA +424A +82CA +ENDCHAR +STARTCHAR uni5A7F +ENCODING 23167 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1022 +FD3C +2520 +25A0 +267E +4400 +49FC +4904 +F1FC +1904 +25FC +4104 +810C +ENDCHAR +STARTCHAR uni5A80 +ENCODING 23168 +BBX 15 16 0 -2 +BITMAP +21FC +2124 +2124 +21FC +F924 +4924 +49FC +4820 +4820 +93FE +5222 +222A +32FA +4A0A +4A02 +8206 +ENDCHAR +STARTCHAR uni5A81 +ENCODING 23169 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +21FC +2084 +FBFE +4800 +49FC +4904 +49FC +9020 +53FE +2020 +3220 +4BFE +4820 +8020 +ENDCHAR +STARTCHAR uni5A82 +ENCODING 23170 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +21FC +2000 +F888 +4850 +4BFE +4A22 +4C24 +91FC +5124 +2124 +3134 +4928 +4820 +8020 +ENDCHAR +STARTCHAR uni5A83 +ENCODING 23171 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2048 +2030 +FBFE +4852 +4894 +4910 +8A30 +4820 +33FE +1070 +28A8 +4924 +8622 +0020 +ENDCHAR +STARTCHAR uni5A84 +ENCODING 23172 +BBX 15 15 1 -1 +BITMAP +1110 +10A0 +13FC +FC40 +25F8 +2440 +2440 +47FE +4840 +4840 +F7FE +18A0 +2510 +4208 +8C06 +ENDCHAR +STARTCHAR uni5A85 +ENCODING 23173 +BBX 15 15 0 -1 +BITMAP +1088 +1088 +13FE +1088 +FCF8 +2488 +24F8 +2488 +2488 +4BFE +2900 +1148 +2984 +4500 +85FE +ENDCHAR +STARTCHAR uni5A86 +ENCODING 23174 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1040 +FDFC +2554 +2554 +2554 +2554 +492C +2820 +13FE +2850 +4488 +8104 +0202 +ENDCHAR +STARTCHAR uni5A87 +ENCODING 23175 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +1000 +FC88 +2450 +27FE +2420 +2420 +49FC +2820 +10A8 +2924 +4622 +80A0 +0040 +ENDCHAR +STARTCHAR uni5A88 +ENCODING 23176 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2222 +2020 +FBFE +4820 +49FC +4924 +49FC +9124 +51FC +2020 +33FE +4820 +4820 +8020 +ENDCHAR +STARTCHAR uni5A89 +ENCODING 23177 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2204 +2204 +FBFC +4A00 +4BFC +4A40 +8A88 +4BFC +3224 +1220 +2DFC +4420 +8820 +13FE +ENDCHAR +STARTCHAR uni5A8A +ENCODING 23178 +BBX 15 16 0 -2 +BITMAP +2108 +2088 +2090 +27FE +F800 +4BC4 +4A54 +4A54 +4BD4 +9254 +5254 +23D4 +3254 +4A44 +4A54 +82C8 +ENDCHAR +STARTCHAR uni5A8B +ENCODING 23179 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +11FC +FC40 +25F8 +2440 +27FE +4488 +49FC +4F0A +F108 +19F8 +2508 +4108 +81F8 +ENDCHAR +STARTCHAR uni5A8C +ENCODING 23180 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC88 +2400 +25FC +2524 +2524 +4924 +29FC +1124 +2924 +4524 +85FC +0104 +ENDCHAR +STARTCHAR uni5A8D +ENCODING 23181 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10F8 +1108 +FE10 +25FC +2504 +25FC +2504 +49FC +2904 +11FC +2800 +4488 +8104 +0202 +ENDCHAR +STARTCHAR uni5A8E +ENCODING 23182 +BBX 15 16 0 -2 +BITMAP +1020 +1022 +11FA +1024 +FC28 +27FE +2420 +2440 +24FC +4984 +2A84 +10FC +2884 +4484 +84FC +0084 +ENDCHAR +STARTCHAR uni5A8F +ENCODING 23183 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +FDFC +2400 +27FE +2420 +2440 +49FC +2954 +1154 +2954 +4554 +8554 +010C +ENDCHAR +STARTCHAR uni5A90 +ENCODING 23184 +BBX 15 15 0 -2 +BITMAP +7F7C +4444 +4444 +5F7C +5140 +5F42 +4442 +7FBE +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5A91 +ENCODING 23185 +BBX 15 16 0 -2 +BITMAP +2008 +203C +21E0 +2020 +FBFE +4820 +49FC +4924 +49FC +9124 +51FC +2020 +31FC +4820 +4BFE +8000 +ENDCHAR +STARTCHAR uni5A92 +ENCODING 23186 +BBX 15 15 1 -1 +BITMAP +1088 +1088 +13FE +FC88 +24F8 +2488 +2488 +44F8 +4820 +4BFE +F070 +18A8 +2524 +4222 +8020 +ENDCHAR +STARTCHAR uni5A93 +ENCODING 23187 +BBX 15 15 0 -1 +BITMAP +1020 +1040 +11FC +1104 +FDFC +2504 +25FC +2400 +27FE +4820 +2820 +11FC +2820 +4420 +83FE +ENDCHAR +STARTCHAR uni5A94 +ENCODING 23188 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2040 +2080 +FBFC +4A94 +4A94 +4AF4 +4A94 +9294 +52F4 +2294 +3294 +4A94 +4BFC +8204 +ENDCHAR +STARTCHAR uni5A95 +ENCODING 23189 +BBX 15 16 0 -2 +BITMAP +1020 +1050 +1088 +1104 +FEFA +2400 +25FC +2504 +2504 +49FC +2888 +1088 +2BFE +4488 +8108 +0208 +ENDCHAR +STARTCHAR uni5A96 +ENCODING 23190 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27FC +2110 +F950 +4840 +4BF8 +4A48 +8A48 +4A48 +37FE +1040 +28A0 +4910 +8208 +0406 +ENDCHAR +STARTCHAR uni5A97 +ENCODING 23191 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2202 +FC04 +49FC +4800 +49FC +4904 +91FC +5104 +21FC +3104 +4800 +4BFE +8000 +ENDCHAR +STARTCHAR uni5A98 +ENCODING 23192 +BBX 15 16 0 -2 +BITMAP +1110 +1112 +11D4 +1118 +FD52 +2592 +252E +2440 +25FC +4904 +2904 +11FC +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni5A99 +ENCODING 23193 +BBX 15 16 0 -2 +BITMAP +200C +200A +2008 +23FE +FA08 +4BF8 +4A4A +4A4A +8BEA +4AAC +32AC +124C +2AAA +4B0A +8216 +0422 +ENDCHAR +STARTCHAR uni5A9A +ENCODING 23194 +BBX 14 15 1 -1 +BITMAP +1000 +11FC +1124 +FD24 +25FC +2500 +257C +4544 +497C +4944 +F144 +197C +2544 +4244 +807C +ENDCHAR +STARTCHAR uni5A9B +ENCODING 23195 +BBX 15 15 1 -1 +BITMAP +101C +13E0 +1144 +FCA8 +25FC +2440 +27FE +2440 +487C +4884 +F188 +1A50 +2420 +40D8 +8306 +ENDCHAR +STARTCHAR uni5A9C +ENCODING 23196 +BBX 15 15 1 -1 +BITMAP +1020 +103E +1020 +FDFC +2504 +2504 +25FC +4504 +4904 +49FC +F104 +1904 +25FC +4090 +870E +ENDCHAR +STARTCHAR uni5A9D +ENCODING 23197 +BBX 15 16 0 -2 +BITMAP +0610 +3810 +0852 +7E54 +0890 +1C28 +2A28 +4844 +0A82 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5A9E +ENCODING 23198 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1108 +FDF8 +2508 +2508 +25F8 +4400 +4BFC +4840 +F240 +1A78 +2740 +42C0 +843E +ENDCHAR +STARTCHAR uni5A9F +ENCODING 23199 +BBX 15 15 1 -1 +BITMAP +1124 +1124 +13FE +FD24 +2524 +253C +2500 +45FC +4820 +4BFE +F0A8 +1928 +2624 +4422 +8020 +ENDCHAR +STARTCHAR uni5AA0 +ENCODING 23200 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +13FE +FC80 +25FC +2620 +24FE +4400 +49FC +4904 +F1FC +1904 +25FC +4104 +810C +ENDCHAR +STARTCHAR uni5AA1 +ENCODING 23201 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +2524 +25AC +2574 +2524 +49FC +2820 +1070 +28A8 +4524 +8222 +0020 +ENDCHAR +STARTCHAR uni5AA2 +ENCODING 23202 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1102 +FD7A +2502 +257A +2400 +45FC +4904 +49FC +F104 +19FC +2504 +4104 +81FC +ENDCHAR +STARTCHAR uni5AA3 +ENCODING 23203 +BBX 15 16 0 -2 +BITMAP +2120 +20A0 +2478 +2228 +F8A8 +492A +4F2A +4946 +49A0 +9020 +53FE +2070 +30A8 +4924 +4A22 +8020 +ENDCHAR +STARTCHAR uni5AA4 +ENCODING 23204 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +1124 +1124 +FDFC +2524 +2524 +25FC +2420 +4810 +2854 +1142 +2942 +454A +8238 +ENDCHAR +STARTCHAR uni5AA5 +ENCODING 23205 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +21FE +2102 +F902 +49FE +4900 +4900 +89FE +49AA +31AA +12FE +2AAA +4AAA +84A2 +0086 +ENDCHAR +STARTCHAR uni5AA6 +ENCODING 23206 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2222 +23FE +FA22 +4BFE +4800 +49FC +4904 +91FC +5104 +21FC +3104 +4904 +4914 +8108 +ENDCHAR +STARTCHAR uni5AA7 +ENCODING 23207 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1104 +FD3C +2524 +2524 +27FE +4602 +4AFA +4A8A +F28A +1A8A +26FA +4202 +8206 +ENDCHAR +STARTCHAR uni5AA8 +ENCODING 23208 +BBX 15 16 0 -2 +BITMAP +2108 +2088 +2090 +27FE +F890 +4890 +4BFC +4A94 +4A94 +930C +5204 +23FC +3204 +4A04 +4BFC +8204 +ENDCHAR +STARTCHAR uni5AA9 +ENCODING 23209 +BBX 15 16 0 -2 +BITMAP +1080 +109E +1092 +13F2 +FC92 +249E +2492 +25D2 +2552 +495E +2952 +1152 +29D2 +4422 +842A +0044 +ENDCHAR +STARTCHAR uni5AAA +ENCODING 23210 +BBX 15 15 0 -1 +BITMAP +2000 +21F8 +2108 +2108 +F9F8 +4908 +4908 +49F8 +8800 +4BFC +3294 +1294 +2A94 +4A94 +87FE +ENDCHAR +STARTCHAR uni5AAB +ENCODING 23211 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +207E +2040 +FBFC +4804 +49FC +4804 +8BFC +4840 +3240 +127C +2A40 +4540 +84FE +0800 +ENDCHAR +STARTCHAR uni5AAC +ENCODING 23212 +BBX 15 16 0 -2 +BITMAP +2100 +217C +2144 +2244 +FA44 +4E7C +4A10 +4A10 +4AFE +9238 +5254 +2254 +3294 +4B12 +4A10 +8210 +ENDCHAR +STARTCHAR uni5AAD +ENCODING 23213 +BBX 15 16 0 -2 +BITMAP +0BFE +3020 +C1FC +0904 +3124 +C524 +0924 +3050 +C088 +0304 +0200 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni5AAE +ENCODING 23214 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2110 +2208 +FDF6 +4800 +4BC4 +4A54 +4A54 +93D4 +5254 +2254 +33D4 +4A44 +4A54 +82C8 +ENDCHAR +STARTCHAR uni5AAF +ENCODING 23215 +BBX 15 16 0 -2 +BITMAP +2040 +2240 +2140 +27F8 +F888 +4890 +48FC +4904 +8908 +4BFE +3202 +142A +2AAA +4A82 +8414 +0008 +ENDCHAR +STARTCHAR uni5AB0 +ENCODING 23216 +BBX 14 16 0 -2 +BITMAP +2080 +2080 +21FC +2244 +F954 +49F4 +4884 +4928 +4A90 +91FC +5244 +2554 +31F4 +4884 +4928 +8210 +ENDCHAR +STARTCHAR uni5AB1 +ENCODING 23217 +BBX 15 15 1 -1 +BITMAP +1020 +107C +13A4 +FC98 +2450 +2460 +2780 +44FC +4920 +4820 +F1FE +1820 +2524 +4124 +81FC +ENDCHAR +STARTCHAR uni5AB2 +ENCODING 23218 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1154 +FD24 +2554 +2504 +25FC +2400 +4912 +29D4 +1118 +2910 +4552 +8592 +010E +ENDCHAR +STARTCHAR uni5AB3 +ENCODING 23219 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +11FC +FD04 +25FC +2504 +25FC +4504 +49FC +4840 +F020 +18A4 +2682 +428A +8478 +ENDCHAR +STARTCHAR uni5AB4 +ENCODING 23220 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +21FC +2020 +FBFE +4800 +49FC +4904 +4904 +91FC +5052 +2094 +3188 +4EA4 +48C2 +8080 +ENDCHAR +STARTCHAR uni5AB5 +ENCODING 23221 +BBX 15 15 1 -1 +BITMAP +0040 +7950 +4A48 +4BF8 +48A0 +68A0 +5FFE +4910 +4A48 +6C46 +5BFC +4888 +4990 +8870 +9B8E +ENDCHAR +STARTCHAR uni5AB6 +ENCODING 23222 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +27FE +2108 +F800 +4FFE +4908 +49F8 +4908 +91F8 +5108 +213E +37C8 +4808 +4808 +8008 +ENDCHAR +STARTCHAR uni5AB7 +ENCODING 23223 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2200 +22FC +FA00 +4BFE +4AA8 +4A90 +8AC8 +4A86 +3208 +13FE +2A88 +4C48 +8408 +0818 +ENDCHAR +STARTCHAR uni5AB8 +ENCODING 23224 +BBX 15 16 0 -2 +BITMAP +2020 +2124 +2124 +21FC +F820 +4BFE +4800 +4820 +49FC +9124 +5124 +21FC +3020 +4824 +4BFE +8102 +ENDCHAR +STARTCHAR uni5AB9 +ENCODING 23225 +BBX 15 16 0 -2 +BITMAP +2040 +23BE +2212 +2292 +FA52 +4AAA +4B24 +4840 +4BFE +9222 +5222 +23FE +3222 +4A22 +4BFE +8202 +ENDCHAR +STARTCHAR uni5ABA +ENCODING 23226 +BBX 15 15 1 -1 +BITMAP +1108 +1548 +1548 +FD5E +2FD4 +2824 +2804 +4FD4 +4A94 +5294 +F288 +1A88 +24D4 +4494 +8822 +ENDCHAR +STARTCHAR uni5ABB +ENCODING 23227 +BBX 15 16 0 -2 +BITMAP +1078 +3E48 +2248 +2A86 +FF78 +2248 +2A28 +4210 +4A28 +84C6 +0200 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni5ABC +ENCODING 23228 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +10A4 +FCA4 +24B4 +24CC +2484 +44FC +4800 +49FC +F154 +1954 +2554 +4154 +83FE +ENDCHAR +STARTCHAR uni5ABD +ENCODING 23229 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1120 +FD20 +25FC +2520 +2520 +45FC +4920 +4920 +F1FE +1A02 +24AA +44AA +800C +ENDCHAR +STARTCHAR uni5ABE +ENCODING 23230 +BBX 15 15 1 -1 +BITMAP +1088 +13FE +1088 +FDFC +2488 +27FE +2420 +45FC +4924 +49FC +F924 +17FE +2104 +4104 +811C +ENDCHAR +STARTCHAR uni5ABF +ENCODING 23231 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +11FC +FD24 +2524 +25FC +2524 +4524 +49FC +48A8 +F0AA +193E +2520 +4222 +841E +ENDCHAR +STARTCHAR uni5AC0 +ENCODING 23232 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +2040 +FBF8 +4880 +4FFC +4910 +8A68 +4DC6 +3040 +13F8 +28E0 +4958 +8644 +0040 +ENDCHAR +STARTCHAR uni5AC1 +ENCODING 23233 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +FC04 +2BF8 +2840 +28C4 +4B24 +48E8 +5720 +F070 +11A8 +2E26 +4820 +80C0 +ENDCHAR +STARTCHAR uni5AC2 +ENCODING 23234 +BBX 15 15 1 -1 +BITMAP +1020 +10A0 +112C +FD24 +25AC +2524 +2524 +45FC +4820 +4BFC +F084 +1848 +2430 +40D8 +8306 +ENDCHAR +STARTCHAR uni5AC3 +ENCODING 23235 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +2504 +25FC +2504 +25FC +4904 +29FC +1104 +2BFE +4488 +8104 +0202 +ENDCHAR +STARTCHAR uni5AC4 +ENCODING 23236 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1220 +FE40 +2AFC +2A84 +2AFC +4A84 +4A84 +52FC +F220 +1AA8 +2524 +4222 +80E0 +ENDCHAR +STARTCHAR uni5AC5 +ENCODING 23237 +BBX 15 16 0 -2 +BITMAP +2108 +2088 +2090 +23FC +F840 +49F8 +4840 +4BFE +4880 +9100 +51FC +2220 +3420 +4820 +4BFE +8000 +ENDCHAR +STARTCHAR uni5AC6 +ENCODING 23238 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC50 +2488 +2524 +2450 +2488 +4904 +2AFA +1088 +2888 +4488 +84F8 +0088 +ENDCHAR +STARTCHAR uni5AC7 +ENCODING 23239 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1000 +FDFC +2504 +25FC +2504 +25FC +4840 +2820 +13FE +2800 +4488 +8104 +0202 +ENDCHAR +STARTCHAR uni5AC8 +ENCODING 23240 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +2CA8 +4920 +1450 +2288 +7FFE +4002 +8204 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5AC9 +ENCODING 23241 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +2240 +FE40 +2AFC +2B20 +4E20 +4A20 +4BFE +F220 +1A50 +2488 +4504 +8202 +ENDCHAR +STARTCHAR uni5ACA +ENCODING 23242 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +23FE +2020 +F9FC +4820 +4BFE +4840 +4888 +91F0 +5024 +23FE +3022 +4924 +4AA2 +8040 +ENDCHAR +STARTCHAR uni5ACB +ENCODING 23243 +BBX 15 15 1 -1 +BITMAP +1000 +17DE +1042 +F842 +2BDE +2A10 +2A10 +4BDE +48C6 +535A +F0C6 +194A +2652 +4042 +839C +ENDCHAR +STARTCHAR uni5ACC +ENCODING 23244 +BBX 15 15 1 -1 +BITMAP +2108 +2090 +23FC +F8A0 +2BF8 +28A8 +2FFE +48A8 +48A8 +53F8 +F1A0 +1AB0 +24A8 +48A6 +80A0 +ENDCHAR +STARTCHAR uni5ACD +ENCODING 23245 +BBX 15 16 0 -2 +BITMAP +101E +11E0 +1022 +1112 +FC94 +2480 +2420 +25CE +2502 +4902 +29CE +1102 +2902 +4502 +85FE +0102 +ENDCHAR +STARTCHAR uni5ACE +ENCODING 23246 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FC +2108 +F890 +4BFE +4A02 +4C44 +4820 +93FC +5080 +20F8 +3088 +4908 +4928 +8210 +ENDCHAR +STARTCHAR uni5ACF +ENCODING 23247 +BBX 15 16 0 -2 +BITMAP +2100 +209E +23D2 +2252 +FA54 +4BD4 +4A58 +4A54 +4BD2 +9212 +5292 +225A +32D4 +4B50 +4A10 +8010 +ENDCHAR +STARTCHAR uni5AD0 +ENCODING 23248 +BBX 15 15 1 -1 +BITMAP +2008 +27C8 +2548 +2548 +FFFE +5554 +5554 +57D4 +5114 +57D4 +D174 +3148 +2A4C +4A54 +85A2 +ENDCHAR +STARTCHAR uni5AD1 +ENCODING 23249 +BBX 15 16 0 -2 +BITMAP +7FFC +0300 +0D70 +710C +0100 +7FFC +0440 +3FF8 +2448 +3FF8 +0400 +FFFE +0820 +1E40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni5AD2 +ENCODING 23250 +BBX 15 16 0 -2 +BITMAP +200E +23F0 +2044 +2224 +F908 +4BFE +4A42 +4840 +4BFE +9080 +50FC +2144 +3128 +4A10 +4C68 +8186 +ENDCHAR +STARTCHAR uni5AD3 +ENCODING 23251 +BBX 15 16 0 -2 +BITMAP +1080 +10F8 +1108 +1210 +FDFC +2524 +2554 +258C +2504 +4810 +2912 +11D4 +2918 +4552 +8592 +010E +ENDCHAR +STARTCHAR uni5AD4 +ENCODING 23252 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2202 +FC14 +49E0 +4900 +4900 +49FC +9110 +5110 +27FE +3000 +4890 +4908 +8204 +ENDCHAR +STARTCHAR uni5AD5 +ENCODING 23253 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1140 +117C +FD90 +2510 +25FE +2528 +2544 +49FE +2820 +1010 +2944 +4542 +824A +0038 +ENDCHAR +STARTCHAR uni5AD6 +ENCODING 23254 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1050 +FDFC +2554 +2554 +25FC +4400 +48F8 +4800 +F3FE +1820 +1524 +2222 +C060 +ENDCHAR +STARTCHAR uni5AD7 +ENCODING 23255 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2200 +FA7C +2A44 +2A44 +2A7C +4A00 +4AEE +4AAA +F2AA +1AAA +26EE +4200 +83FE +ENDCHAR +STARTCHAR uni5AD8 +ENCODING 23256 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +11FC +FD24 +25FC +2440 +2488 +25F0 +4820 +2844 +13FE +2822 +4524 +8222 +0060 +ENDCHAR +STARTCHAR uni5AD9 +ENCODING 23257 +BBX 15 16 0 -2 +BITMAP +2420 +2220 +2220 +2F7E +F480 +5400 +577C +5514 +5510 +9550 +555C +2550 +2950 +5B50 +50BE +A100 +ENDCHAR +STARTCHAR uni5ADA +ENCODING 23258 +BBX 14 15 1 -1 +BITMAP +1000 +13F0 +1210 +FBF0 +2A10 +2BF0 +2800 +4FFC +5524 +57FC +F000 +17F8 +2A10 +41E0 +8F3C +ENDCHAR +STARTCHAR uni5ADB +ENCODING 23259 +BBX 15 16 0 -2 +BITMAP +7F78 +4848 +5F4C +6480 +5F78 +4448 +4A48 +5130 +7F4C +0400 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5ADC +ENCODING 23260 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +11FC +FC88 +27FE +2400 +25FC +4504 +49FC +4904 +F1FC +1820 +27FE +4020 +8020 +ENDCHAR +STARTCHAR uni5ADD +ENCODING 23261 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +1110 +FD7C +2514 +25FE +2514 +257C +4910 +2992 +1154 +2938 +4654 +8292 +0430 +ENDCHAR +STARTCHAR uni5ADE +ENCODING 23262 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +2220 +22FC +FA24 +4BFE +4A24 +4AFC +8A20 +4AFC +32A4 +12FC +2AA4 +4CFC +84A4 +08AC +ENDCHAR +STARTCHAR uni5ADF +ENCODING 23263 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2248 +2248 +FBFE +4A48 +4A20 +4BFE +4A40 +92FC +5344 +2244 +327C +4A00 +4BFE +8000 +ENDCHAR +STARTCHAR uni5AE0 +ENCODING 23264 +BBX 15 15 1 -1 +BITMAP +0840 +087E +7F44 +08A8 +7F10 +2A28 +4946 +7FFC +4200 +7FFE +4410 +4820 +9F40 +81E0 +3E18 +ENDCHAR +STARTCHAR uni5AE1 +ENCODING 23265 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FD04 +2488 +27FE +2622 +4AFA +4A22 +4AFA +F28A +1A8A +26FA +4202 +820E +ENDCHAR +STARTCHAR uni5AE2 +ENCODING 23266 +BBX 15 16 0 -2 +BITMAP +11F8 +7D08 +11F8 +1108 +FDF8 +1108 +29F8 +2490 +4112 +860E +0200 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni5AE3 +ENCODING 23267 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2020 +F93C +2920 +2920 +2FFE +4900 +49FE +4900 +F1FE +18AA +2656 +4252 +840C +ENDCHAR +STARTCHAR uni5AE4 +ENCODING 23268 +BBX 15 15 0 -1 +BITMAP +1088 +1088 +13FE +1088 +FCF8 +2420 +25FC +2524 +25FC +4820 +2BFE +1020 +29FC +4420 +83FE +ENDCHAR +STARTCHAR uni5AE5 +ENCODING 23269 +BBX 15 15 1 -1 +BITMAP +1020 +11FE +1020 +FDFC +2524 +25FC +2524 +45FC +4824 +4BFC +F00A +1DFE +2288 +4068 +8018 +ENDCHAR +STARTCHAR uni5AE6 +ENCODING 23270 +BBX 15 15 1 -1 +BITMAP +2124 +20A8 +23FE +FA02 +2AFA +2888 +2888 +48F8 +4820 +49FC +F124 +1924 +2524 +412C +8020 +ENDCHAR +STARTCHAR uni5AE7 +ENCODING 23271 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1020 +11FC +FC20 +27FE +2400 +25FC +2504 +49FC +2904 +11FC +2904 +45FC +8488 +0104 +ENDCHAR +STARTCHAR uni5AE8 +ENCODING 23272 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FCF8 +2420 +25FC +2524 +25FC +4820 +29FC +1020 +2BFE +4450 +8088 +0306 +ENDCHAR +STARTCHAR uni5AE9 +ENCODING 23273 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27D0 +F11E +57D4 +5574 +5554 +5554 +57C8 +5108 +F388 +2B54 +2514 +4124 +8142 +ENDCHAR +STARTCHAR uni5AEA +ENCODING 23274 +BBX 15 16 0 -2 +BITMAP +2000 +27BC +2084 +24A4 +FA94 +4CA4 +4850 +4988 +4E26 +90C0 +5310 +2064 +3388 +4830 +48C0 +8700 +ENDCHAR +STARTCHAR uni5AEB +ENCODING 23275 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27FC +2110 +F800 +4BF8 +4A08 +4BF8 +8A08 +4BF8 +3040 +17FC +28A0 +4910 +8208 +0406 +ENDCHAR +STARTCHAR uni5AEC +ENCODING 23276 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2200 +FA48 +4A48 +4BFE +4A48 +8A48 +4A48 +3278 +1200 +2D54 +452A +8A2A +1000 +ENDCHAR +STARTCHAR uni5AED +ENCODING 23277 +BBX 15 16 0 -2 +BITMAP +2040 +207C +2040 +23FE +FA42 +4A78 +4BC4 +4A3C +8A08 +4AF0 +3324 +12A8 +2DFE +4420 +88A0 +0040 +ENDCHAR +STARTCHAR uni5AEE +ENCODING 23278 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1020 +FBFE +2A22 +2BBA +2A22 +49FC +4800 +53FE +F040 +18FC +2504 +4004 +8018 +ENDCHAR +STARTCHAR uni5AEF +ENCODING 23279 +BBX 15 16 0 -2 +BITMAP +0820 +7F20 +087E +7E44 +08A4 +FF28 +1010 +1E28 +2244 +4682 +8200 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni5AF0 +ENCODING 23280 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27D0 +F13E +57E4 +5558 +5550 +5550 +57D0 +5110 +F310 +1BA8 +2568 +4124 +8142 +ENDCHAR +STARTCHAR uni5AF1 +ENCODING 23281 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FD24 +24A8 +27FE +2400 +25FC +4904 +2974 +1154 +2974 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni5AF2 +ENCODING 23282 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2490 +F490 +5490 +57FC +5490 +54D8 +95B8 +55B4 +26D4 +2892 +5890 +5090 +8090 +ENDCHAR +STARTCHAR uni5AF3 +ENCODING 23283 +BBX 15 16 0 -2 +BITMAP +0820 +4920 +2A3E +7F48 +4948 +5DA8 +6B10 +4928 +4146 +0400 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5AF4 +ENCODING 23284 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1020 +11FC +FD04 +25FC +2420 +25FC +2488 +4850 +2BFE +1020 +29FC +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni5AF5 +ENCODING 23285 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +13FE +FD54 +2954 +2954 +2FFE +4954 +4954 +5154 +F7FE +1800 +2554 +422A +842A +ENDCHAR +STARTCHAR uni5AF6 +ENCODING 23286 +BBX 15 16 0 -2 +BITMAP +2090 +2088 +21FE +2110 +FB10 +4DFE +4910 +4910 +89FE +4910 +3110 +11FE +2900 +4AA4 +8252 +0452 +ENDCHAR +STARTCHAR uni5AF7 +ENCODING 23287 +BBX 15 16 0 -2 +BITMAP +2020 +2720 +25FE +2540 +F57C +5690 +557E +5500 +557C +9544 +557C +2644 +247C +5444 +5444 +844C +ENDCHAR +STARTCHAR uni5AF8 +ENCODING 23288 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +13FE +1020 +FDFC +2420 +27FE +2524 +24A8 +4BFE +2800 +11FC +2904 +4504 +85FC +0104 +ENDCHAR +STARTCHAR uni5AF9 +ENCODING 23289 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +11FC +1088 +FC88 +27FE +2420 +25FC +2524 +49FC +2924 +11FC +2800 +4488 +8104 +0202 +ENDCHAR +STARTCHAR uni5AFA +ENCODING 23290 +BBX 15 15 1 -1 +BITMAP +2000 +23DE +2252 +FBDE +2A52 +2BDE +2A02 +4AFA +4A8A +4AFA +F28A +1A8A +26FA +4202 +820E +ENDCHAR +STARTCHAR uni5AFB +ENCODING 23291 +BBX 15 15 1 -1 +BITMAP +2000 +23DE +2252 +FBDE +2A52 +2BDE +2A22 +4A22 +4AFA +4A22 +F272 +1A72 +26AA +4222 +8206 +ENDCHAR +STARTCHAR uni5AFC +ENCODING 23292 +BBX 15 15 0 -1 +BITMAP +2000 +21FC +2124 +21AC +F974 +4924 +49FC +4820 +89FC +4820 +33FE +1000 +2AA4 +4A52 +8452 +ENDCHAR +STARTCHAR uni5AFD +ENCODING 23293 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +23FE +2050 +FA8A +4904 +4BFE +4D04 +49FC +9104 +51FC +2020 +3124 +4A22 +4CA2 +8040 +ENDCHAR +STARTCHAR uni5AFE +ENCODING 23294 +BBX 15 16 0 -2 +BITMAP +2020 +2124 +20A8 +23FE +F8A8 +4924 +4A22 +4904 +8904 +49DE +3244 +1554 +289E +4904 +8204 +0404 +ENDCHAR +STARTCHAR uni5AFF +ENCODING 23295 +BBX 15 16 0 -2 +BITMAP +2020 +21FC +2024 +23FE +F824 +49FC +4820 +4BFE +4800 +91FC +5124 +21FC +3124 +49FC +4800 +83FE +ENDCHAR +STARTCHAR uni5B00 +ENCODING 23296 +BBX 15 15 1 -1 +BITMAP +1018 +13E4 +1244 +FC20 +2BF8 +2A08 +2BFC +4A04 +4A04 +53FE +F402 +18AA +22AA +44A2 +880C +ENDCHAR +STARTCHAR uni5B01 +ENCODING 23297 +BBX 15 15 0 -1 +BITMAP +2020 +27A4 +20A8 +2292 +F914 +4A08 +4DF4 +4802 +8BF8 +4A08 +3208 +13F8 +2A08 +4110 +8FFE +ENDCHAR +STARTCHAR uni5B02 +ENCODING 23298 +BBX 15 16 0 -2 +BITMAP +2110 +2094 +23D2 +2012 +FA50 +4990 +4FFE +4810 +4BD2 +9252 +5254 +23D4 +324A +4A4A +4BD6 +8022 +ENDCHAR +STARTCHAR uni5B03 +ENCODING 23299 +BBX 15 16 0 -2 +BITMAP +0BFE +1040 +61FC +0904 +11FC +6104 +05FC +0904 +31FC +C088 +0504 +FFFE +0820 +1E40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni5B04 +ENCODING 23300 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +2020 +21FC +F800 +4BFE +4A02 +49FC +4800 +91FC +5104 +21FC +3104 +4888 +4BFE +8000 +ENDCHAR +STARTCHAR uni5B05 +ENCODING 23301 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +1000 +FDFC +24A8 +24A8 +27FE +24A8 +48A8 +29FC +1020 +2BFE +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni5B06 +ENCODING 23302 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2118 +26E6 +F000 +53F8 +5208 +53F8 +5000 +97BC +5084 +24A4 +2294 +54A4 +5294 +8108 +ENDCHAR +STARTCHAR uni5B07 +ENCODING 23303 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1124 +11FC +FC20 +27FE +2400 +25FC +2504 +49FC +2904 +11FC +2904 +45FC +8488 +0104 +ENDCHAR +STARTCHAR uni5B08 +ENCODING 23304 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +11FC +FC20 +27FE +2488 +27DE +4488 +48C8 +4B3E +F000 +1BFE +2490 +4112 +860E +ENDCHAR +STARTCHAR uni5B09 +ENCODING 23305 +BBX 15 15 1 -1 +BITMAP +1020 +13FE +1020 +FDFC +2400 +25FC +2504 +45FC +4888 +4BFE +F000 +19FC +2504 +4104 +81FC +ENDCHAR +STARTCHAR uni5B0A +ENCODING 23306 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +17D0 +F012 +17DC +3452 +D7D2 +100E +0400 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni5B0B +ENCODING 23307 +BBX 15 15 1 -1 +BITMAP +2000 +23DE +2252 +FBDE +2800 +29FC +2924 +49FC +4924 +49FC +F020 +1BFE +2420 +4020 +8020 +ENDCHAR +STARTCHAR uni5B0C +ENCODING 23308 +BBX 15 15 1 -1 +BITMAP +2018 +21E0 +2040 +FBFC +2890 +29F8 +2E96 +48F0 +4800 +4BFC +F204 +1AF4 +2694 +42F4 +820C +ENDCHAR +STARTCHAR uni5B0D +ENCODING 23309 +BBX 15 16 0 -2 +BITMAP +2108 +2548 +2548 +2550 +F7DE +5014 +57E4 +5014 +57D4 +9114 +57D4 +2108 +2108 +5FD4 +5024 +8042 +ENDCHAR +STARTCHAR uni5B0E +ENCODING 23310 +BBX 15 16 0 -2 +BITMAP +2200 +2208 +23A8 +24A8 +F93E +57C8 +5548 +555C +5548 +97C8 +52BE +2280 +2282 +5482 +547E +8800 +ENDCHAR +STARTCHAR uni5B0F +ENCODING 23311 +BBX 15 16 0 -2 +BITMAP +203C +23E0 +2124 +20A8 +FBFE +48A8 +4924 +4A02 +49FC +9124 +5124 +21FC +3124 +4924 +49FC +8104 +ENDCHAR +STARTCHAR uni5B10 +ENCODING 23312 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1088 +FD04 +26FA +2400 +2400 +25DC +4954 +2954 +11DC +2888 +4488 +8554 +0222 +ENDCHAR +STARTCHAR uni5B11 +ENCODING 23313 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +21FC +2088 +F850 +4BFE +4800 +49FC +4904 +91FC +5104 +21FC +3020 +4A94 +4A8A +847A +ENDCHAR +STARTCHAR uni5B12 +ENCODING 23314 +BBX 15 16 0 -2 +BITMAP +1020 +1050 +1088 +1174 +FE02 +25FC +2524 +25AC +2524 +49FC +2800 +10F8 +2888 +44F8 +8488 +00F8 +ENDCHAR +STARTCHAR uni5B13 +ENCODING 23315 +BBX 15 16 0 -2 +BITMAP +2108 +2208 +27C8 +2450 +F7DE +5464 +57D4 +5214 +5114 +97D4 +5214 +23C8 +2248 +5454 +5554 +88A2 +ENDCHAR +STARTCHAR uni5B14 +ENCODING 23316 +BBX 15 16 0 -2 +BITMAP +2200 +2208 +2388 +24A8 +F93E +57C8 +5548 +557E +5548 +97C8 +52BE +2280 +22A2 +5492 +547E +8800 +ENDCHAR +STARTCHAR uni5B15 +ENCODING 23317 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1154 +11FC +FC20 +25FC +2420 +27FE +2488 +4850 +29FC +1020 +2BFE +4420 +8420 +0020 +ENDCHAR +STARTCHAR uni5B16 +ENCODING 23318 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +45FC +7C88 +4050 +BFFE +A420 +A5FC +3C20 +0420 +FFFE +0820 +1E40 +01E0 +7E18 +ENDCHAR +STARTCHAR uni5B17 +ENCODING 23319 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FE +FA04 +2AF4 +2A94 +2AF4 +4A04 +4BFC +5108 +F1F8 +1908 +25F8 +4000 +87FE +ENDCHAR +STARTCHAR uni5B18 +ENCODING 23320 +BBX 15 16 0 -2 +BITMAP +2088 +2448 +2250 +20FC +F820 +4850 +4E94 +4A38 +8A50 +4A98 +3234 +1254 +2A90 +4A20 +85FE +0800 +ENDCHAR +STARTCHAR uni5B19 +ENCODING 23321 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FD24 +2524 +26AA +27FE +4400 +4BFC +4A04 +F2F4 +1A94 +26F4 +4204 +83FC +ENDCHAR +STARTCHAR uni5B1A +ENCODING 23322 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +2288 +2250 +FBFE +4A50 +4AFC +4A54 +8BFE +4A54 +32FC +1250 +2AD8 +4D54 +8652 +0850 +ENDCHAR +STARTCHAR uni5B1B +ENCODING 23323 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2294 +2294 +FBFC +4800 +4FFE +4800 +4BFC +9204 +53FC +20A2 +3114 +4B08 +4D44 +8182 +ENDCHAR +STARTCHAR uni5B1C +ENCODING 23324 +BBX 15 16 0 -2 +BITMAP +1020 +7E20 +243E +FF42 +0094 +7E10 +4228 +7E28 +4244 +7E82 +0200 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni5B1D +ENCODING 23325 +BBX 15 16 0 -2 +BITMAP +2080 +23F8 +2208 +23F8 +FA08 +4BF8 +4A00 +4BFC +8A00 +4BFC +3044 +13FC +28A0 +4994 +86C8 +0086 +ENDCHAR +STARTCHAR uni5B1E +ENCODING 23326 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +2088 +21FC +F820 +4BFE +4820 +49FC +4924 +91FC +5124 +21FC +3020 +4BFE +4820 +87FE +ENDCHAR +STARTCHAR uni5B1F +ENCODING 23327 +BBX 15 16 0 -2 +BITMAP +2104 +2088 +23FE +2020 +F9FC +4820 +4BFE +4854 +4992 +9090 +53FE +2090 +30D4 +4B8A +4896 +81A2 +ENDCHAR +STARTCHAR uni5B20 +ENCODING 23328 +BBX 15 16 0 -2 +BITMAP +10F8 +1088 +1088 +10F8 +FC00 +25DC +2554 +2554 +25DC +4820 +2BFE +1070 +28A8 +4524 +8222 +0020 +ENDCHAR +STARTCHAR uni5B21 +ENCODING 23329 +BBX 15 16 0 -2 +BITMAP +203C +23C0 +2044 +2224 +F108 +57FE +5442 +52A4 +528A +947A +5080 +20F8 +2108 +5290 +5060 +879E +ENDCHAR +STARTCHAR uni5B22 +ENCODING 23330 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +F888 +2F06 +2890 +2BFC +4890 +4BFC +5090 +F7FE +1890 +2714 +41E8 +8706 +ENDCHAR +STARTCHAR uni5B23 +ENCODING 23331 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2222 +F954 +494A +4A3A +4800 +49FC +9154 +53FE +2000 +31FC +4820 +48A0 +8040 +ENDCHAR +STARTCHAR uni5B24 +ENCODING 23332 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2488 +F7DE +5488 +55DC +56AA +5488 +9440 +5488 +25F0 +2420 +5448 +59FC +9084 +ENDCHAR +STARTCHAR uni5B25 +ENCODING 23333 +BBX 15 15 1 -1 +BITMAP +1000 +13DE +10CA +FD56 +24CA +2552 +2488 +4510 +4BFE +4D10 +F1FC +1910 +25FC +4110 +81FE +ENDCHAR +STARTCHAR uni5B26 +ENCODING 23334 +BBX 15 16 0 -2 +BITMAP +2040 +27FC +2040 +23FC +F000 +57FE +5002 +53F8 +5040 +97FE +5000 +27FE +2008 +57FE +54A8 +8798 +ENDCHAR +STARTCHAR uni5B27 +ENCODING 23335 +BBX 15 16 0 -2 +BITMAP +2040 +23F8 +2048 +27FE +F848 +4BF8 +4840 +4FFE +4800 +92A4 +5452 +23F8 +32A8 +4AA8 +4FFE +8000 +ENDCHAR +STARTCHAR uni5B28 +ENCODING 23336 +BBX 15 15 0 -1 +BITMAP +2108 +2090 +23FE +2108 +F908 +4A52 +4B9C +4908 +8A52 +4BDE +3040 +10A4 +2AAA +4A8A +8478 +ENDCHAR +STARTCHAR uni5B29 +ENCODING 23337 +BBX 15 16 0 -2 +BITMAP +2140 +224C +2264 +2244 +FB4C +4A64 +4AA4 +4BAC +8AA4 +4AA4 +37FE +1000 +2910 +4908 +8204 +0404 +ENDCHAR +STARTCHAR uni5B2A +ENCODING 23338 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +FA02 +29FC +28A4 +2B32 +4864 +49FC +4F04 +F1FC +1904 +25FC +4088 +8306 +ENDCHAR +STARTCHAR uni5B2B +ENCODING 23339 +BBX 15 16 0 -2 +BITMAP +2088 +22AA +22DC +2488 +F954 +4A22 +4800 +4BFE +8A22 +4820 +33FE +1070 +28A8 +4924 +8622 +0020 +ENDCHAR +STARTCHAR uni5B2C +ENCODING 23340 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2020 +FBFE +2A22 +2BBA +2A22 +49B8 +4800 +4BFE +F040 +1BFE +2692 +4292 +8296 +ENDCHAR +STARTCHAR uni5B2D +ENCODING 23341 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +10A8 +F924 +2BFE +2A22 +2B76 +4AAA +4B76 +5222 +F376 +1AAA +2776 +4222 +8226 +ENDCHAR +STARTCHAR uni5B2E +ENCODING 23342 +BBX 15 16 0 -2 +BITMAP +3FFE +2888 +2F8A +2008 +2FBE +2888 +2F88 +2894 +29A2 +2080 +3FFE +2208 +2710 +40E0 +431C +9C02 +ENDCHAR +STARTCHAR uni5B2F +ENCODING 23343 +BBX 15 16 0 -2 +BITMAP +2040 +2FFE +2040 +27FC +F000 +53F8 +5208 +5FFE +5802 +97FC +5110 +23F8 +2040 +57FC +5040 +8FFE +ENDCHAR +STARTCHAR uni5B30 +ENCODING 23344 +BBX 15 14 1 -1 +BITMAP +7EFC +4284 +7EFC +4284 +7EFC +4284 +7EFC +2548 +FFFE +0410 +0820 +3FC0 +0630 +F808 +ENDCHAR +STARTCHAR uni5B31 +ENCODING 23345 +BBX 15 16 0 -2 +BITMAP +420C +2FB0 +8220 +4FA0 +0ABE +2FA8 +4AA8 +CFA8 +4228 +5FA8 +4248 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni5B32 +ENCODING 23346 +BBX 15 15 1 -1 +BITMAP +0100 +F93E +A92A +A92A +FFFE +AAAA +AAAA +FABE +2288 +FABE +2F0A +290A +4992 +4A52 +B46C +ENDCHAR +STARTCHAR uni5B33 +ENCODING 23347 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +10A8 +1090 +FDFE +2720 +25FC +2520 +25FC +4920 +29FE +1100 +2BFC +4488 +8070 +038E +ENDCHAR +STARTCHAR uni5B34 +ENCODING 23348 +BBX 15 15 1 -1 +BITMAP +0100 +7FFE +4000 +7FF8 +0000 +1FF0 +1010 +7FFC +4914 +7914 +4FF4 +795C +4A54 +49A4 +9E66 +ENDCHAR +STARTCHAR uni5B35 +ENCODING 23349 +BBX 15 16 0 -2 +BITMAP +2108 +2110 +223E +2222 +F4BE +5722 +513E +5208 +54BE +97AA +502A +20AA +256A +552E +5408 +8008 +ENDCHAR +STARTCHAR uni5B36 +ENCODING 23350 +BBX 15 15 1 -1 +BITMAP +2020 +2040 +21F8 +F908 +29F8 +2908 +2BFC +4A44 +4BFC +4A44 +F3FC +1800 +27FE +4110 +8610 +ENDCHAR +STARTCHAR uni5B37 +ENCODING 23351 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2488 +F7DE +5488 +55DC +56AA +5488 +9440 +5490 +2520 +2448 +5484 +55FC +8884 +ENDCHAR +STARTCHAR uni5B38 +ENCODING 23352 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +2202 +241C +FBE0 +4924 +48A8 +4BFE +4924 +9202 +55FC +2124 +31FC +4924 +49FC +8104 +ENDCHAR +STARTCHAR uni5B39 +ENCODING 23353 +BBX 15 16 0 -2 +BITMAP +2200 +24EC +24A4 +24A4 +F6EC +54A4 +54A4 +56EC +54A4 +94A4 +5FFE +2000 +2110 +5108 +5204 +8404 +ENDCHAR +STARTCHAR uni5B3A +ENCODING 23354 +BBX 15 16 0 -2 +BITMAP +23FE +2248 +23FE +2248 +FA20 +4BFE +4A40 +4AFC +8B44 +4A7C +3200 +13FE +2840 +4AA4 +828A +047A +ENDCHAR +STARTCHAR uni5B3B +ENCODING 23355 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +2020 +21FC +F800 +4BFE +4A52 +4BFE +4904 +91FC +5104 +21FC +3104 +49FC +4888 +8104 +ENDCHAR +STARTCHAR uni5B3C +ENCODING 23356 +BBX 15 16 0 -2 +BITMAP +2202 +25E2 +24A2 +26AA +F52A +566A +510A +528A +544A +9BAA +510A +27CA +2122 +5542 +51EA +8E04 +ENDCHAR +STARTCHAR uni5B3D +ENCODING 23357 +BBX 15 16 0 -2 +BITMAP +23FA +22AA +23FA +2002 +F7FE +5400 +55FC +5554 +55FC +9400 +57FE +2040 +27FE +50A0 +5118 +8606 +ENDCHAR +STARTCHAR uni5B3E +ENCODING 23358 +BBX 15 15 1 -1 +BITMAP +2100 +213E +27CA +F112 +57E6 +5540 +555C +5554 +57DC +5114 +E39C +3554 +295C +4114 +8162 +ENDCHAR +STARTCHAR uni5B3F +ENCODING 23359 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27FC +2110 +F1F0 +5208 +52EA +56AC +52A8 +92AA +56EA +2A06 +2000 +52A4 +5252 +8452 +ENDCHAR +STARTCHAR uni5B40 +ENCODING 23360 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2020 +FBFE +2AAA +2A22 +2AA8 +4800 +489E +4BF2 +F09E +19D2 +25BE +4292 +809E +ENDCHAR +STARTCHAR uni5B41 +ENCODING 23361 +BBX 15 15 1 -1 +BITMAP +3FF8 +0100 +7FFC +4104 +5D74 +0000 +7BBC +4AA4 +7BBC +0200 +FFFE +0810 +1F20 +01F0 +7E0C +ENDCHAR +STARTCHAR uni5B42 +ENCODING 23362 +BBX 15 16 0 -2 +BITMAP +2210 +23DE +2528 +2084 +FBF8 +4A08 +4BF8 +4A08 +8BFA +4A24 +3298 +1306 +2800 +4BFC +8294 +0FFE +ENDCHAR +STARTCHAR uni5B43 +ENCODING 23363 +BBX 15 15 1 -1 +BITMAP +2040 +23FC +2000 +FBBC +2AA4 +2BBC +2890 +4BFC +4890 +4BFC +F090 +1FFE +2514 +41C8 +8306 +ENDCHAR +STARTCHAR uni5B44 +ENCODING 23364 +BBX 15 16 0 -2 +BITMAP +23DE +2252 +23DE +2252 +FBDE +4A22 +4AFA +4A22 +4AFA +92AA +52FA +22AA +32FA +4A72 +4AAA +8226 +ENDCHAR +STARTCHAR uni5B45 +ENCODING 23365 +BBX 15 15 1 -1 +BITMAP +2454 +2252 +22B2 +F810 +2FFE +2A90 +2ED4 +4A94 +4ED4 +4A88 +F6C8 +1A88 +23DA +4E2A +8044 +ENDCHAR +STARTCHAR uni5B46 +ENCODING 23366 +BBX 15 16 0 -2 +BITMAP +23DE +2252 +23DE +2252 +FBDE +4A52 +4BDE +498C +4A52 +9040 +57FE +2088 +3190 +4860 +48D8 +8304 +ENDCHAR +STARTCHAR uni5B47 +ENCODING 23367 +BBX 15 16 0 -2 +BITMAP +2108 +2294 +23DE +26B4 +FBDE +4A94 +4BDE +4A94 +4BDE +9210 +57FC +2108 +3090 +4860 +4998 +8606 +ENDCHAR +STARTCHAR uni5B48 +ENCODING 23368 +BBX 15 16 0 -2 +BITMAP +2222 +23FE +2090 +21FE +FB10 +4DFE +4910 +49FE +4910 +91FE +5100 +23FE +328A +4B76 +4A52 +8276 +ENDCHAR +STARTCHAR uni5B49 +ENCODING 23369 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +2088 +23DE +FA52 +4BDE +48A0 +4890 +49FE +9120 +53FC +2520 +31FC +4920 +49FE +8100 +ENDCHAR +STARTCHAR uni5B4A +ENCODING 23370 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +2248 +23FE +FA48 +4AEC +4B5A +4A48 +8A50 +4BDE +3250 +13DC +2A50 +4DDE +8450 +0850 +ENDCHAR +STARTCHAR uni5B4B +ENCODING 23371 +BBX 15 16 0 -2 +BITMAP +23DE +2000 +23DE +2252 +FB5A +4A52 +4820 +4BFE +4A50 +93FE +5252 +23FE +3292 +4ADC +4A92 +84CE +ENDCHAR +STARTCHAR uni5B4C +ENCODING 23372 +BBX 15 15 1 -1 +BITMAP +2388 +4010 +D7F4 +2008 +5B96 +E83A +338C +6AAA +ABAA +0200 +FFFE +0410 +1E20 +01E0 +7E1C +ENDCHAR +STARTCHAR uni5B4D +ENCODING 23373 +BBX 15 16 0 -2 +BITMAP +27BC +24A4 +27BC +2000 +F7FE +5400 +5590 +549E +57D4 +9564 +55D4 +2554 +25D4 +5568 +5BC8 +9054 +ENDCHAR +STARTCHAR uni5B4E +ENCODING 23374 +BBX 15 16 0 -2 +BITMAP +23FE +2202 +23FE +2292 +FA54 +4A92 +4AFE +4AAA +4AFE +9322 +52FA +22AA +32FA +4A22 +4DFA +8004 +ENDCHAR +STARTCHAR uni5B4F +ENCODING 23375 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +2088 +23DE +FA52 +4BDE +4A52 +4BDE +4A22 +93FE +52AA +22FA +3222 +4A72 +4AAA +8224 +ENDCHAR +STARTCHAR uni5B50 +ENCODING 23376 +BBX 15 14 1 -1 +BITMAP +1FF0 +0020 +0040 +0080 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni5B51 +ENCODING 23377 +BBX 13 14 2 -1 +BITMAP +7FE0 +0040 +0080 +0100 +0200 +0218 +03E0 +FE00 +0200 +0200 +0200 +0200 +0200 +0E00 +ENDCHAR +STARTCHAR uni5B52 +ENCODING 23378 +BBX 13 14 3 -1 +BITMAP +FFC0 +0080 +0100 +0200 +0400 +0400 +07F8 +0400 +0400 +0400 +0400 +0400 +0400 +1C00 +ENDCHAR +STARTCHAR uni5B53 +ENCODING 23379 +BBX 13 15 1 -2 +BITMAP +FFF0 +0020 +0040 +4080 +2300 +1200 +0A00 +0600 +0200 +0300 +0280 +0260 +0218 +0A00 +0400 +ENDCHAR +STARTCHAR uni5B54 +ENCODING 23380 +BBX 15 15 1 -1 +BITMAP +0040 +FE40 +0440 +0840 +1040 +1040 +1640 +3840 +D040 +1040 +1040 +1040 +1042 +1042 +703E +ENDCHAR +STARTCHAR uni5B55 +ENCODING 23381 +BBX 15 14 1 -1 +BITMAP +7FF8 +0210 +043E +0802 +1002 +6FEE +0040 +0080 +0100 +FFFE +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni5B56 +ENCODING 23382 +BBX 15 14 1 -1 +BITMAP +7E7C +0404 +0408 +0810 +0810 +0A10 +0DFE +3810 +C810 +0810 +0810 +0810 +0810 +3870 +ENDCHAR +STARTCHAR uni5B57 +ENCODING 23383 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8008 +3FE0 +0040 +0180 +0200 +FFF8 +0200 +0200 +0200 +0200 +0E00 +ENDCHAR +STARTCHAR uni5B58 +ENCODING 23384 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +0200 +FFFE +0400 +05F8 +1808 +1010 +3020 +57FE +9020 +1020 +1020 +1020 +10E0 +ENDCHAR +STARTCHAR uni5B59 +ENCODING 23385 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +0220 +0420 +0820 +08A8 +0AA4 +0CA4 +3922 +C922 +0A22 +0820 +0820 +0820 +28A0 +1040 +ENDCHAR +STARTCHAR uni5B5A +ENCODING 23386 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +2108 +2104 +4082 +9FF0 +0020 +0040 +0080 +FFFE +0100 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni5B5B +ENCODING 23387 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +0100 +7FFC +4004 +5FE4 +00C0 +0100 +FFFE +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni5B5C +ENCODING 23388 +BBX 15 15 1 -1 +BITMAP +0080 +FC80 +0480 +08FE +1108 +1108 +1B08 +1088 +3090 +D050 +1020 +1020 +1050 +1088 +7306 +ENDCHAR +STARTCHAR uni5B5D +ENCODING 23389 +BBX 14 15 1 -1 +BITMAP +0200 +0208 +3FF0 +0240 +0280 +FFFC +0400 +1FF0 +E040 +0180 +FFFC +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni5B5E +ENCODING 23390 +BBX 15 14 0 -1 +BITMAP +1FE0 +0040 +0080 +0100 +FFFE +0100 +0100 +0500 +0200 +0910 +4908 +4824 +4824 +87E0 +ENDCHAR +STARTCHAR uni5B5F +ENCODING 23391 +BBX 15 14 1 -1 +BITMAP +3FF8 +0030 +00C0 +0100 +FFFE +0100 +0100 +0700 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni5B60 +ENCODING 23392 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +7FC8 +0008 +3F88 +2088 +3FA8 +0010 +3FE0 +0080 +0100 +FFFE +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni5B61 +ENCODING 23393 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +0220 +0440 +0848 +0884 +0BFE +0C82 +3800 +C8FC +0884 +0884 +0884 +0884 +28FC +1084 +ENDCHAR +STARTCHAR uni5B62 +ENCODING 23394 +BBX 15 16 0 -2 +BITMAP +0080 +FC80 +05FC +0904 +1204 +15F4 +1514 +1914 +3114 +D1F4 +1104 +1128 +1112 +1102 +50FE +2000 +ENDCHAR +STARTCHAR uni5B63 +ENCODING 23395 +BBX 15 15 1 -1 +BITMAP +0070 +3F80 +0100 +FFFE +0540 +0920 +3118 +C006 +1FF0 +0060 +0180 +FFFE +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni5B64 +ENCODING 23396 +BBX 15 15 1 -1 +BITMAP +003C +FBC8 +0A08 +1248 +2248 +2248 +2248 +3A48 +E248 +2248 +2288 +22A8 +24A4 +24F4 +6992 +ENDCHAR +STARTCHAR uni5B65 +ENCODING 23397 +BBX 15 15 1 -1 +BITMAP +0800 +087C +FFC4 +1144 +2228 +7C18 +0A64 +3102 +CFE0 +00C0 +0100 +FFFE +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni5B66 +ENCODING 23398 +BBX 15 15 1 -1 +BITMAP +2208 +1110 +0020 +7FFC +4004 +5FF4 +0060 +0180 +0100 +FFFE +0100 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni5B67 +ENCODING 23399 +BBX 15 16 0 -2 +BITMAP +0820 +1020 +22FC +7C24 +0824 +1244 +7F54 +0088 +0100 +3FE0 +0080 +0100 +FFFE +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni5B68 +ENCODING 23400 +BBX 14 14 1 -1 +BITMAP +1FE0 +0040 +0080 +FFFC +0100 +0100 +0700 +78F8 +0810 +1020 +1DFC +F020 +1020 +3060 +ENDCHAR +STARTCHAR uni5B69 +ENCODING 23401 +BBX 14 15 1 -1 +BITMAP +0020 +F820 +0FFC +1040 +2040 +2090 +2910 +30A0 +6044 +A088 +2310 +2020 +2050 +2088 +6304 +ENDCHAR +STARTCHAR uni5B6A +ENCODING 23402 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0440 +1450 +1448 +2444 +4444 +0000 +3FE0 +0080 +0100 +FFFE +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni5B6B +ENCODING 23403 +BBX 15 15 1 -1 +BITMAP +0018 +FBE0 +1080 +1108 +2210 +21A0 +2048 +308C +E7F2 +2042 +2248 +2248 +2444 +2842 +6040 +ENDCHAR +STARTCHAR uni5B6C +ENCODING 23404 +BBX 15 16 0 -2 +BITMAP +7FFC +0080 +0360 +0D18 +7104 +0100 +1000 +10FC +FE04 +2208 +2210 +64FE +1410 +0810 +3450 +C220 +ENDCHAR +STARTCHAR uni5B6D +ENCODING 23405 +BBX 15 15 0 -2 +BITMAP +FDFC +0504 +0904 +11FC +1104 +1504 +19FC +3104 +D104 +11FC +1000 +1088 +1084 +5102 +2202 +ENDCHAR +STARTCHAR uni5B6E +ENCODING 23406 +BBX 15 16 0 -2 +BITMAP +0040 +FC20 +07FE +0A02 +1000 +11FC +1400 +1800 +33FE +D020 +1128 +1124 +1222 +1422 +50A0 +2040 +ENDCHAR +STARTCHAR uni5B6F +ENCODING 23407 +BBX 14 15 1 -1 +BITMAP +7DF8 +4808 +7C88 +4450 +7C20 +4850 +7D8C +0000 +1FE0 +0080 +0100 +FFFC +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni5B70 +ENCODING 23408 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FF20 +00F8 +7C28 +4428 +7CA8 +00A8 +FEA8 +0C48 +3048 +1CAA +F0AA +112A +7206 +ENDCHAR +STARTCHAR uni5B71 +ENCODING 23409 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +7FFC +4000 +47E0 +4080 +5FFC +4040 +41C0 +5E7C +8408 +BF7E +8408 +0C18 +ENDCHAR +STARTCHAR uni5B72 +ENCODING 23410 +BBX 15 15 0 -2 +BITMAP +FDFE +0448 +0848 +1048 +11CE +1502 +1902 +3102 +D1CE +1048 +1048 +1048 +1048 +53FE +2000 +ENDCHAR +STARTCHAR uni5B73 +ENCODING 23411 +BBX 15 15 1 -1 +BITMAP +2010 +1020 +FFFE +1020 +64C8 +2850 +1428 +7AF4 +0000 +3FE0 +0080 +FFFE +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni5B74 +ENCODING 23412 +BBX 15 16 0 -2 +BITMAP +1FE0 +0040 +FFFE +0100 +0300 +7C7C +0808 +1EFE +F010 +1050 +3020 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni5B75 +ENCODING 23413 +BBX 15 15 1 -1 +BITMAP +3002 +C70C +9574 +9552 +954A +958A +D700 +B57C +9508 +9510 +F5FE +A710 +2410 +4410 +8430 +ENDCHAR +STARTCHAR uni5B76 +ENCODING 23414 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1248 +3CF0 +0820 +1450 +3EF8 +0000 +3FE0 +0080 +0100 +FFFE +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni5B77 +ENCODING 23415 +BBX 15 16 0 -2 +BITMAP +0820 +3E7E +08A4 +7F28 +1C10 +2A28 +4944 +3FFE +2000 +23F0 +2020 +2040 +2FFE +4040 +4140 +8080 +ENDCHAR +STARTCHAR uni5B78 +ENCODING 23416 +BBX 15 15 1 -1 +BITMAP +0680 +3938 +2288 +3838 +2288 +3938 +2288 +7FFC +4004 +5FF4 +00C0 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni5B79 +ENCODING 23417 +BBX 15 16 0 -2 +BITMAP +3E10 +22FE +3E44 +2028 +7EFE +A210 +3EFC +2210 +0000 +3FE0 +0080 +0100 +FFFE +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni5B7A +ENCODING 23418 +BBX 15 14 1 -1 +BITMAP +F7FC +1040 +2FFE +2842 +2B5A +3842 +2318 +6000 +AFFE +2040 +2FFE +2922 +2922 +6926 +ENDCHAR +STARTCHAR uni5B7B +ENCODING 23419 +BBX 15 16 0 -2 +BITMAP +0020 +FDFC +0424 +0BFE +1024 +11FC +1420 +1BFE +3000 +D2A4 +1452 +11FC +1154 +1154 +57FE +2000 +ENDCHAR +STARTCHAR uni5B7C +ENCODING 23420 +BBX 15 15 1 -1 +BITMAP +1010 +9210 +FEFE +2844 +7E28 +C2FE +7E10 +40FE +7E10 +4210 +7FF0 +0040 +FFFE +0080 +0380 +ENDCHAR +STARTCHAR uni5B7D +ENCODING 23421 +BBX 15 15 1 -1 +BITMAP +0840 +FFFE +1020 +7DFC +4488 +7C88 +43FE +7C20 +45FC +7C20 +0FF0 +0040 +FFFE +0080 +0380 +ENDCHAR +STARTCHAR uni5B7E +ENCODING 23422 +BBX 15 16 0 -2 +BITMAP +03DE +FA52 +0BDE +1252 +23DE +2252 +2BDE +318C +2252 +E040 +27FE +2088 +2190 +2060 +A0D8 +4304 +ENDCHAR +STARTCHAR uni5B7F +ENCODING 23423 +BBX 15 15 1 -1 +BITMAP +2388 +4010 +D7F4 +2008 +5B96 +E83A +2388 +AAAA +ABAA +2008 +1FF0 +0080 +FFFE +0100 +0300 +ENDCHAR +STARTCHAR uni5B80 +ENCODING 23424 +BBX 13 7 2 4 +BITMAP +0200 +0200 +0200 +FFF8 +8008 +8008 +8008 +ENDCHAR +STARTCHAR uni5B81 +ENCODING 23425 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8008 +0000 +7FF0 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0E00 +ENDCHAR +STARTCHAR uni5B82 +ENCODING 23426 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +0100 +7FFE +4002 +8004 +0000 +0FE0 +0820 +0820 +0820 +1020 +1022 +2022 +401E +8000 +ENDCHAR +STARTCHAR uni5B83 +ENCODING 23427 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +FFFC +8004 +8004 +1000 +1000 +1030 +11C0 +1E00 +1000 +1000 +1004 +1004 +0FFC +ENDCHAR +STARTCHAR uni5B84 +ENCODING 23428 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8408 +0400 +0400 +7FE0 +0420 +0420 +0420 +0820 +0824 +1024 +601C +ENDCHAR +STARTCHAR uni5B85 +ENCODING 23429 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +41C4 +5E04 +0200 +0200 +0200 +FFFE +0200 +0200 +0202 +0202 +01FE +ENDCHAR +STARTCHAR uni5B86 +ENCODING 23430 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8004 +3FF8 +0008 +0008 +3FF8 +2000 +2000 +3FFC +0004 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni5B87 +ENCODING 23431 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8008 +BFE8 +0200 +0200 +0200 +FFF8 +0200 +0200 +0200 +0200 +0E00 +ENDCHAR +STARTCHAR uni5B88 +ENCODING 23432 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8088 +0080 +FFF8 +0080 +0080 +2080 +1080 +0880 +0080 +0080 +0380 +ENDCHAR +STARTCHAR uni5B89 +ENCODING 23433 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FF8 +4208 +4208 +0200 +FFFC +0420 +0420 +0840 +1E40 +0180 +0160 +0610 +7808 +ENDCHAR +STARTCHAR uni5B8A +ENCODING 23434 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +0100 +7FFE +4002 +8104 +0120 +0110 +7FFC +0100 +0280 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5B8B +ENCODING 23435 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +4104 +0100 +FFFE +0380 +0540 +0920 +1110 +2108 +C106 +0100 +0100 +ENDCHAR +STARTCHAR uni5B8C +ENCODING 23436 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8008 +3FE0 +0000 +0000 +FFF8 +0880 +0880 +1080 +1084 +2084 +C07C +ENDCHAR +STARTCHAR uni5B8D +ENCODING 23437 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +4104 +4104 +0100 +FFFE +0000 +0400 +0440 +0820 +1010 +2008 +C004 +ENDCHAR +STARTCHAR uni5B8E +ENCODING 23438 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8004 +00F0 +3F00 +0100 +0100 +FFFE +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5B8F +ENCODING 23439 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +4404 +0400 +FFFE +0800 +0900 +1100 +1220 +2210 +4430 +87C8 +3C08 +ENDCHAR +STARTCHAR uni5B90 +ENCODING 23440 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +7FFE +4002 +8404 +0400 +07F0 +0810 +0810 +1420 +2220 +0140 +0040 +0080 +FFFE +ENDCHAR +STARTCHAR uni5B91 +ENCODING 23441 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8824 +0820 +3FF8 +0820 +0820 +0820 +FFFE +0820 +1020 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni5B92 +ENCODING 23442 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8004 +00F8 +3F00 +0100 +01F8 +3F00 +0100 +01FC +7F02 +0102 +0102 +00FE +ENDCHAR +STARTCHAR uni5B93 +ENCODING 23443 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8408 +0220 +0920 +4848 +4844 +8884 +8900 +0A08 +0408 +1A08 +E1F8 +ENDCHAR +STARTCHAR uni5B94 +ENCODING 23444 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +7FFE +4002 +8204 +0100 +7FFC +0100 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5B95 +ENCODING 23445 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +4004 +0000 +FFFE +0200 +0400 +0FF8 +3808 +C808 +0808 +0808 +0FF8 +ENDCHAR +STARTCHAR uni5B96 +ENCODING 23446 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8008 +7880 +0880 +7880 +4080 +4080 +7920 +0920 +0910 +0A78 +7788 +ENDCHAR +STARTCHAR uni5B97 +ENCODING 23447 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +4004 +1FF0 +0000 +0000 +7FFC +0100 +1110 +2108 +4104 +8102 +0700 +ENDCHAR +STARTCHAR uni5B98 +ENCODING 23448 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8008 +3FE0 +2020 +2020 +3FE0 +2000 +3FF0 +2010 +2010 +2010 +3FF0 +ENDCHAR +STARTCHAR uni5B99 +ENCODING 23449 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8208 +0200 +3FE0 +2220 +2220 +2220 +3FE0 +2220 +2220 +2220 +3FE0 +ENDCHAR +STARTCHAR uni5B9A +ENCODING 23450 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +4004 +1FF0 +0100 +1100 +1100 +11F0 +1100 +3100 +2900 +4700 +81FE +ENDCHAR +STARTCHAR uni5B9B +ENCODING 23451 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +5004 +1EF8 +1288 +1288 +2288 +5288 +1498 +0C80 +0882 +3082 +C07E +ENDCHAR +STARTCHAR uni5B9C +ENCODING 23452 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8008 +1FC0 +1040 +1040 +1FC0 +1040 +1040 +1FC0 +1040 +1040 +FFF8 +ENDCHAR +STARTCHAR uni5B9D +ENCODING 23453 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +4004 +5FF4 +0100 +0100 +0100 +1FF0 +0100 +0120 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni5B9E +ENCODING 23454 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8884 +0480 +0480 +1080 +0880 +0880 +FFFE +0140 +0220 +0410 +1808 +6004 +ENDCHAR +STARTCHAR uni5B9F +ENCODING 23455 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8208 +3FE0 +0200 +3FE0 +0200 +0200 +FFF8 +0500 +0880 +3060 +C018 +ENDCHAR +STARTCHAR uni5BA0 +ENCODING 23456 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8424 +0410 +0410 +FFFE +0480 +0888 +0890 +10A0 +10C2 +2082 +4182 +867E +ENDCHAR +STARTCHAR uni5BA1 +ENCODING 23457 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4102 +8104 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +2108 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5BA2 +ENCODING 23458 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4404 +4FF4 +1820 +6440 +0380 +1C70 +E00C +1FF0 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni5BA3 +ENCODING 23459 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +5FF4 +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni5BA4 +ENCODING 23460 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +5FF4 +0200 +0420 +08F0 +3F0C +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5BA5 +ENCODING 23461 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +7FF8 +4008 +4408 +FFFC +0400 +0FF0 +1810 +2FF0 +4810 +8FF0 +0810 +0810 +0870 +ENDCHAR +STARTCHAR uni5BA6 +ENCODING 23462 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +FFFC +8004 +3FF8 +2100 +2100 +3FF0 +2010 +2010 +3FF0 +2100 +2100 +2100 +3FF8 +ENDCHAR +STARTCHAR uni5BA7 +ENCODING 23463 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +7FFE +4002 +8004 +3FFC +2080 +2080 +27F8 +2408 +2408 +27F8 +2080 +2080 +3FFE +ENDCHAR +STARTCHAR uni5BA8 +ENCODING 23464 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8004 +0440 +4448 +2450 +2460 +0C40 +3460 +C852 +084A +1042 +203E +4000 +ENDCHAR +STARTCHAR uni5BA9 +ENCODING 23465 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4102 +9114 +0920 +0540 +0100 +7FFC +0540 +0920 +1110 +2108 +C106 +0100 +0100 +ENDCHAR +STARTCHAR uni5BAA +ENCODING 23466 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8104 +1100 +1FF8 +2100 +0100 +FFFE +0440 +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni5BAB +ENCODING 23467 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8004 +1FF0 +1010 +1010 +1FF0 +0000 +3FF8 +2008 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni5BAC +ENCODING 23468 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4054 +0048 +3FFC +2040 +2044 +3F44 +2228 +2228 +2210 +4212 +4C2A +80C4 +ENDCHAR +STARTCHAR uni5BAD +ENCODING 23469 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8004 +3FF8 +0408 +FFFE +0408 +3FF8 +0800 +1FF8 +2808 +4808 +8FF8 +0808 +ENDCHAR +STARTCHAR uni5BAE +ENCODING 23470 +BBX 12 15 2 -1 +BITMAP +0400 +0400 +FFF0 +8010 +BFD0 +2040 +2040 +3FC0 +0400 +0800 +7FE0 +4020 +4020 +4020 +7FE0 +ENDCHAR +STARTCHAR uni5BAF +ENCODING 23471 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +810C +1FD0 +0120 +FFFE +0100 +1FF0 +0820 +30C0 +CFFC +0080 +0280 +0100 +ENDCHAR +STARTCHAR uni5BB0 +ENCODING 23472 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +4104 +3FF8 +0820 +0440 +FFFE +0100 +0100 +3FF8 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5BB1 +ENCODING 23473 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8884 +0880 +10FE +1140 +3240 +547C +9040 +1040 +107E +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni5BB2 +ENCODING 23474 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8004 +1FF0 +1010 +1010 +1FF0 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni5BB3 +ENCODING 23475 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8208 +7FF0 +0200 +7FF0 +0200 +FFF8 +0000 +3FE0 +2020 +2020 +2020 +3FE0 +ENDCHAR +STARTCHAR uni5BB4 +ENCODING 23476 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +9FC8 +1040 +1FC0 +1040 +1FC0 +0400 +FFF8 +0840 +3F80 +06C0 +F830 +ENDCHAR +STARTCHAR uni5BB5 +ENCODING 23477 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +A228 +9228 +1240 +3FE0 +2020 +3FE0 +2020 +2020 +3FE0 +2020 +2020 +20E0 +ENDCHAR +STARTCHAR uni5BB6 +ENCODING 23478 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +3FE0 +0400 +1A10 +6320 +0500 +1980 +6340 +0520 +1910 +E10C +0E00 +ENDCHAR +STARTCHAR uni5BB7 +ENCODING 23479 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +80F4 +3F00 +1110 +0920 +0100 +FFFE +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni5BB8 +ENCODING 23480 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +8002 +BFFA +2000 +2FF0 +2000 +3FFC +2440 +2444 +4428 +4410 +8788 +1C06 +ENDCHAR +STARTCHAR uni5BB9 +ENCODING 23481 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +9048 +2220 +C518 +0880 +3060 +C018 +3FE0 +2020 +2020 +2020 +3FE0 +ENDCHAR +STARTCHAR uni5BBA +ENCODING 23482 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +9FF4 +1010 +1010 +1FF0 +0000 +FFFE +0920 +0920 +1120 +1122 +2122 +411E +ENDCHAR +STARTCHAR uni5BBB +ENCODING 23483 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +BFF4 +1010 +4824 +2448 +0380 +1C70 +E00E +0100 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5BBC +ENCODING 23484 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8024 +3E20 +01FE +0044 +7E44 +14C8 +1428 +1410 +146A +2586 +2402 +43FE +ENDCHAR +STARTCHAR uni5BBD +ENCODING 23485 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8444 +3FF8 +0440 +0000 +1FF0 +1010 +1110 +1110 +1290 +0482 +1882 +E07E +ENDCHAR +STARTCHAR uni5BBE +ENCODING 23486 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8074 +1F80 +1000 +1000 +1FF8 +1080 +1080 +FFFE +0000 +0840 +1020 +2010 +ENDCHAR +STARTCHAR uni5BBF +ENCODING 23487 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +5004 +17F8 +2080 +2100 +67F8 +A408 +2408 +27F8 +2408 +2408 +27F8 +ENDCHAR +STARTCHAR uni5BC0 +ENCODING 23488 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +40F4 +1F20 +1110 +2090 +0100 +FFFC +0540 +0920 +1110 +610C +0100 +ENDCHAR +STARTCHAR uni5BC1 +ENCODING 23489 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4002 +8104 +7FFC +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +1100 +11F8 +2900 +47FE +8000 +ENDCHAR +STARTCHAR uni5BC2 +ENCODING 23490 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +5004 +5004 +1DF8 +1088 +1088 +FE88 +1050 +5450 +5220 +9250 +9088 +3106 +ENDCHAR +STARTCHAR uni5BC3 +ENCODING 23491 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4404 +4FC4 +1080 +3FF0 +E210 +2210 +3FF0 +04A0 +0490 +088A +3082 +C07E +ENDCHAR +STARTCHAR uni5BC4 +ENCODING 23492 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +FFFC +8204 +7FF8 +0480 +1860 +0000 +FFFC +0010 +3F10 +2110 +2110 +3F10 +0070 +ENDCHAR +STARTCHAR uni5BC5 +ENCODING 23493 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +8002 +9FF2 +0100 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +1830 +E00E +ENDCHAR +STARTCHAR uni5BC6 +ENCODING 23494 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8408 +8208 +2940 +4890 +0528 +0E24 +F1E0 +0200 +4210 +4210 +4210 +7FF0 +ENDCHAR +STARTCHAR uni5BC7 +ENCODING 23495 +BBX 15 15 1 -1 +BITMAP +0400 +0400 +FFFC +8004 +8044 +7878 +0040 +01F8 +FC88 +2850 +2820 +2850 +298C +4402 +83FE +ENDCHAR +STARTCHAR uni5BC8 +ENCODING 23496 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4102 +BFFC +0100 +1FF0 +0100 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1030 +ENDCHAR +STARTCHAR uni5BC9 +ENCODING 23497 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +FFFC +8844 +9084 +3FF8 +2100 +6100 +BFF0 +2100 +2100 +3FF0 +2100 +2100 +3FFC +ENDCHAR +STARTCHAR uni5BCA +ENCODING 23498 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4202 +83F4 +0200 +3FF8 +2008 +3FF8 +2008 +3FF8 +2008 +3FF8 +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni5BCB +ENCODING 23499 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +BFFC +0820 +3FF8 +0820 +FFFE +1010 +2FE8 +C826 +08A0 +0848 +0808 +07F8 +ENDCHAR +STARTCHAR uni5BCC +ENCODING 23500 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +BFE8 +0000 +1FC0 +1040 +1FC0 +0000 +7FF0 +4210 +7FF0 +4210 +7FF0 +ENDCHAR +STARTCHAR uni5BCD +ENCODING 23501 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +7FFE +4002 +8204 +0908 +4924 +4824 +87E0 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni5BCE +ENCODING 23502 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +4404 +25FC +2420 +3C20 +05FC +0524 +7D54 +258C +2504 +4504 +851C +ENDCHAR +STARTCHAR uni5BCF +ENCODING 23503 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4802 +8FE4 +1040 +3FF8 +5248 +1428 +1108 +0100 +7FFC +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni5BD0 +ENCODING 23504 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +0020 +4820 +49FC +7820 +0820 +0BFE +F8A8 +28A8 +2924 +4A22 +8860 +ENDCHAR +STARTCHAR uni5BD1 +ENCODING 23505 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8BFC +0808 +11F8 +3008 +53F8 +9000 +17FC +1404 +13F8 +1110 +10E0 +171C +ENDCHAR +STARTCHAR uni5BD2 +ENCODING 23506 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +3FF8 +0440 +3FF8 +0440 +FFFE +0820 +3398 +C066 +0E00 +01C0 +0030 +ENDCHAR +STARTCHAR uni5BD3 +ENCODING 23507 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +BFE8 +2220 +3FE0 +2220 +3FE0 +0200 +FFF8 +8208 +8288 +83C8 +BC58 +ENDCHAR +STARTCHAR uni5BD4 +ENCODING 23508 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +FFFC +8004 +9FE4 +1020 +1FE0 +1020 +1FE0 +0000 +FFFE +2200 +23F8 +5E00 +81FE +ENDCHAR +STARTCHAR uni5BD5 +ENCODING 23509 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +BFFC +0200 +3FF8 +2448 +2448 +3FF8 +0000 +FFFE +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni5BD6 +ENCODING 23510 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +FFFC +8004 +C3F4 +3010 +07F8 +8010 +4FFC +2804 +0BF4 +1210 +2120 +41E0 +8E1C +ENDCHAR +STARTCHAR uni5BD7 +ENCODING 23511 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4202 +8144 +0880 +2928 +47E4 +1800 +6100 +3FF8 +2108 +3FF8 +2108 +FFFE +2008 +2018 +ENDCHAR +STARTCHAR uni5BD8 +ENCODING 23512 +BBX 13 15 2 -1 +BITMAP +0200 +FFF8 +A0C8 +BF08 +2010 +1FF0 +8000 +9FC0 +9040 +9FC0 +9040 +FFF8 +0800 +3020 +C018 +ENDCHAR +STARTCHAR uni5BD9 +ENCODING 23513 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8004 +061C +38E8 +28A8 +2CA8 +2AA8 +2AA8 +2AA8 +28A4 +5554 +5D74 +8212 +ENDCHAR +STARTCHAR uni5BDA +ENCODING 23514 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +BFFC +0100 +1FF0 +0100 +7FFC +1000 +1FF0 +2100 +FFFE +0100 +2108 +3FF8 +ENDCHAR +STARTCHAR uni5BDB +ENCODING 23515 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +5FF4 +0440 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF2 +0C42 +F03E +ENDCHAR +STARTCHAR uni5BDC +ENCODING 23516 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4102 +9494 +1428 +23E8 +0000 +3FF8 +2448 +2448 +FFFE +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni5BDD +ENCODING 23517 +BBX 14 15 1 -1 +BITMAP +0100 +7FFC +4004 +53F4 +1010 +53F0 +3010 +33F0 +1000 +17FC +3404 +53F0 +9110 +10E0 +171C +ENDCHAR +STARTCHAR uni5BDE +ENCODING 23518 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +5FF4 +0440 +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0280 +1C70 +E00E +ENDCHAR +STARTCHAR uni5BDF +ENCODING 23519 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +FFFC +9004 +9EF4 +2310 +54A0 +2840 +3030 +CFCC +0000 +7FF8 +0100 +3130 +C70C +ENDCHAR +STARTCHAR uni5BE0 +ENCODING 23520 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4102 +BFFC +2108 +FFFE +2108 +3FF8 +1110 +1FF0 +0400 +FFFE +0820 +07C0 +7838 +ENDCHAR +STARTCHAR uni5BE1 +ENCODING 23521 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +5FF4 +0100 +1FF0 +1010 +1FF0 +1010 +FFFE +2008 +DFF6 +0410 +3870 +ENDCHAR +STARTCHAR uni5BE2 +ENCODING 23522 +BBX 14 15 1 -1 +BITMAP +0100 +7FFC +4004 +09F8 +4808 +4BFC +4808 +79F8 +0800 +0BFC +FA04 +29F8 +2888 +4870 +8B8C +ENDCHAR +STARTCHAR uni5BE3 +ENCODING 23523 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4042 +8424 +25FC +2400 +3CF8 +0400 +04F8 +7C00 +24F8 +2488 +2488 +44F8 +8488 +ENDCHAR +STARTCHAR uni5BE4 +ENCODING 23524 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +09F8 +4840 +49F8 +7888 +0888 +0BFE +F800 +29F8 +2908 +4908 +89F8 +ENDCHAR +STARTCHAR uni5BE5 +ENCODING 23525 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +8002 +BEFA +0A28 +1658 +0B28 +36C8 +1860 +E31E +1C40 +0188 +0E30 +00C0 +1F00 +ENDCHAR +STARTCHAR uni5BE6 +ENCODING 23526 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +5FF4 +1110 +FFFE +1110 +3FF8 +2008 +3FF8 +2008 +3FF8 +1830 +600C +ENDCHAR +STARTCHAR uni5BE7 +ENCODING 23527 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +5494 +2428 +43E4 +0000 +3FF8 +2448 +3FF8 +0000 +FFFE +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni5BE8 +ENCODING 23528 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +5FF4 +0440 +1FF0 +0440 +FFFE +0820 +3118 +DFF6 +0D60 +711C +0100 +ENDCHAR +STARTCHAR uni5BE9 +ENCODING 23529 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4064 +4F84 +1110 +0920 +FFFE +0540 +0920 +3FF8 +D116 +1FF0 +1110 +1110 +1FF0 +ENDCHAR +STARTCHAR uni5BEA +ENCODING 23530 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4002 +80FC +7F00 +2210 +1120 +1FE0 +1020 +1FF0 +1010 +1FFC +2004 +2AA4 +4AA4 +800C +ENDCHAR +STARTCHAR uni5BEB +ENCODING 23531 +BBX 14 15 1 -1 +BITMAP +0200 +FFFC +8404 +B8F4 +2010 +3CF0 +2010 +3FF0 +1000 +3FFC +4044 +A924 +2484 +4488 +4030 +ENDCHAR +STARTCHAR uni5BEC +ENCODING 23532 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +5FF4 +0440 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF2 +0C4A +F03E +ENDCHAR +STARTCHAR uni5BED +ENCODING 23533 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4102 +BFFC +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0108 +7FFC +0204 +4908 +4824 +87E4 +ENDCHAR +STARTCHAR uni5BEE +ENCODING 23534 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4104 +FFFE +4284 +2468 +1FF0 +F01E +1FF0 +1010 +1FF0 +0100 +1930 +E10E +0700 +ENDCHAR +STARTCHAR uni5BEF +ENCODING 23535 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4902 +8884 +1FFC +3080 +5FF8 +9080 +1FF8 +1080 +1FFC +1000 +3E7C +2244 +23D4 +2008 +ENDCHAR +STARTCHAR uni5BF0 +ENCODING 23536 +BBX 15 15 1 -1 +BITMAP +0200 +FFFC +8004 +BFF4 +2490 +3FF0 +0000 +FFFC +2010 +3FF4 +0908 +30D0 +D020 +1E18 +7006 +ENDCHAR +STARTCHAR uni5BF1 +ENCODING 23537 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4044 +45FC +2508 +25F8 +3D08 +05F8 +0508 +7DF8 +2420 +27FE +4524 +8622 +ENDCHAR +STARTCHAR uni5BF2 +ENCODING 23538 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +A47C +3A04 +2228 +1E10 +20FE +3E12 +4850 +085E +7F50 +14B0 +229E +4100 +ENDCHAR +STARTCHAR uni5BF3 +ENCODING 23539 +BBX 14 15 1 -1 +BITMAP +0200 +FFFC +8084 +7CF8 +1120 +7CA8 +1124 +FFF0 +2010 +3FF0 +2010 +3FF0 +0800 +3030 +C00C +ENDCHAR +STARTCHAR uni5BF4 +ENCODING 23540 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8804 +7F7C +2244 +147C +FF44 +087C +7F44 +087C +2A28 +492A +A94A +1086 +ENDCHAR +STARTCHAR uni5BF5 +ENCODING 23541 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4844 +FF7E +4240 +247C +FF04 +007C +7E40 +427C +7E40 +427C +7E42 +4242 +463E +ENDCHAR +STARTCHAR uni5BF6 +ENCODING 23542 +BBX 14 15 1 -1 +BITMAP +0200 +FFFC +8084 +7CF8 +1120 +7CF8 +1124 +FFFC +2010 +3FF0 +2010 +3FF0 +0800 +3030 +C00C +ENDCHAR +STARTCHAR uni5BF7 +ENCODING 23543 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9D74 +4924 +5D74 +4924 +5D74 +4924 +7FFC +0000 +7FFC +1010 +1FF0 +0820 +FFFE +ENDCHAR +STARTCHAR uni5BF8 +ENCODING 23544 +BBX 13 15 2 -1 +BITMAP +0040 +0040 +0040 +FFF8 +0040 +0040 +2040 +1040 +0840 +0840 +0040 +0040 +0040 +0040 +01C0 +ENDCHAR +STARTCHAR uni5BF9 +ENCODING 23545 +BBX 14 16 1 -2 +BITMAP +0020 +0020 +0020 +FC20 +05FC +0420 +4820 +2920 +10A0 +10A0 +2820 +2420 +4420 +8020 +00A0 +0040 +ENDCHAR +STARTCHAR uni5BFA +ENCODING 23546 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FF0 +0100 +0100 +FFFC +0020 +0020 +7FF8 +0020 +1020 +0820 +0420 +0020 +00E0 +ENDCHAR +STARTCHAR uni5BFB +ENCODING 23547 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +1FF8 +0008 +0008 +3FF8 +0020 +0020 +FFFE +0820 +0420 +0420 +00A0 +0040 +ENDCHAR +STARTCHAR uni5BFC +ENCODING 23548 +BBX 15 15 0 -2 +BITMAP +3FF0 +2010 +2010 +3FF0 +2004 +2004 +1FFC +0020 +0020 +FFFE +0820 +0420 +0420 +00A0 +0040 +ENDCHAR +STARTCHAR uni5BFD +ENCODING 23549 +BBX 14 15 2 -1 +BITMAP +01C0 +3E20 +2220 +2110 +4108 +8104 +0040 +FFFC +0040 +0840 +0440 +0440 +0040 +0040 +01C0 +ENDCHAR +STARTCHAR uni5BFE +ENCODING 23550 +BBX 15 15 1 -1 +BITMAP +1008 +1008 +1008 +FF08 +04FE +0408 +4408 +4888 +2848 +1028 +1808 +2408 +4208 +8008 +0038 +ENDCHAR +STARTCHAR uni5BFF +ENCODING 23551 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +7FF8 +0200 +3FF0 +0200 +7FF8 +0400 +0410 +FFFE +0810 +3210 +C110 +0010 +0070 +ENDCHAR +STARTCHAR uni5C00 +ENCODING 23552 +BBX 14 16 1 -2 +BITMAP +0010 +0010 +FF10 +8010 +80FC +BE10 +A210 +A290 +A250 +A250 +BE10 +A210 +8010 +FF10 +0050 +0020 +ENDCHAR +STARTCHAR uni5C01 +ENCODING 23553 +BBX 15 15 1 -1 +BITMAP +0804 +0804 +7F04 +0804 +087E +FF84 +0004 +0844 +0844 +7F24 +0804 +0804 +0F04 +F004 +001C +ENDCHAR +STARTCHAR uni5C02 +ENCODING 23554 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0010 +FFFE +0010 +0410 +0210 +0070 +ENDCHAR +STARTCHAR uni5C03 +ENCODING 23555 +BBX 15 15 1 -1 +BITMAP +0110 +0108 +FFFE +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +2108 +0010 +FFFE +0810 +0410 +0070 +ENDCHAR +STARTCHAR uni5C04 +ENCODING 23556 +BBX 15 15 1 -1 +BITMAP +0808 +1008 +3E08 +2208 +3EFE +2208 +2208 +3E48 +2248 +2228 +FE08 +0A08 +3208 +C208 +0E38 +ENDCHAR +STARTCHAR uni5C05 +ENCODING 23557 +BBX 15 15 1 -1 +BITMAP +1008 +1008 +1008 +FE08 +10FE +1008 +7E08 +4248 +4248 +7E28 +2808 +2808 +4838 +4802 +87FE +ENDCHAR +STARTCHAR uni5C06 +ENCODING 23558 +BBX 15 15 1 -1 +BITMAP +101C +13E0 +9084 +9444 +5248 +1200 +1008 +1008 +37FE +5008 +9108 +1088 +1048 +1008 +1038 +ENDCHAR +STARTCHAR uni5C07 +ENCODING 23559 +BBX 15 15 1 -1 +BITMAP +1040 +50FC +5144 +5328 +5490 +7060 +10C0 +1710 +F010 +57FE +5010 +5110 +5090 +9010 +1070 +ENDCHAR +STARTCHAR uni5C08 +ENCODING 23560 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0120 +01F0 +7E08 +0010 +FFFE +0810 +0470 +ENDCHAR +STARTCHAR uni5C09 +ENCODING 23561 +BBX 15 15 1 -1 +BITMAP +0008 +7F08 +4108 +4108 +7F7E +4008 +5F08 +4048 +5F28 +4428 +5508 +9508 +9508 +2508 +0C38 +ENDCHAR +STARTCHAR uni5C0A +ENCODING 23562 +BBX 13 15 2 -1 +BITMAP +1020 +0840 +7FF8 +0480 +3FF0 +2490 +38F0 +2010 +3FF0 +2010 +3FF0 +0040 +FFF8 +1040 +09C0 +ENDCHAR +STARTCHAR uni5C0B +ENCODING 23563 +BBX 15 15 1 -1 +BITMAP +1FF0 +0010 +1FF0 +0010 +1FF0 +0000 +7F7C +0844 +0F44 +787C +0010 +FFFE +0810 +0410 +0030 +ENDCHAR +STARTCHAR uni5C0C +ENCODING 23564 +BBX 15 16 0 -2 +BITMAP +0808 +0808 +FF88 +0808 +087E +7F08 +0008 +7F48 +4128 +4128 +7F08 +0008 +2208 +1788 +F828 +4010 +ENDCHAR +STARTCHAR uni5C0D +ENCODING 23565 +BBX 15 15 1 -1 +BITMAP +2808 +AA08 +AA08 +6808 +FEFE +4408 +2408 +0888 +FE48 +1028 +7C08 +1008 +1008 +1E08 +F038 +ENDCHAR +STARTCHAR uni5C0E +ENCODING 23566 +BBX 15 15 1 -1 +BITMAP +0410 +8220 +5FFE +2080 +07F8 +E408 +27F8 +2408 +27F8 +5000 +8FFE +0010 +FFFE +1010 +0870 +ENDCHAR +STARTCHAR uni5C0F +ENCODING 23567 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +1110 +1110 +1110 +2108 +2108 +4104 +4104 +8102 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni5C10 +ENCODING 23568 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0200 +1240 +1220 +2210 +2208 +4208 +8200 +0200 +0000 +3000 +4800 +0700 +00FC +ENDCHAR +STARTCHAR uni5C11 +ENCODING 23569 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +1110 +1110 +2108 +2108 +4104 +8112 +0710 +0020 +0040 +0080 +0100 +0600 +7800 +ENDCHAR +STARTCHAR uni5C12 +ENCODING 23570 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0280 +0440 +0820 +3118 +C106 +0100 +0100 +0920 +1110 +2108 +C106 +0100 +0700 +ENDCHAR +STARTCHAR uni5C13 +ENCODING 23571 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +1000 +3FFE +2100 +4100 +8920 +0920 +1110 +1110 +2108 +4104 +8102 +0100 +0700 +ENDCHAR +STARTCHAR uni5C14 +ENCODING 23572 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0800 +1FFC +1004 +2108 +4100 +8100 +0100 +1110 +1108 +2104 +4102 +8102 +0500 +0200 +ENDCHAR +STARTCHAR uni5C15 +ENCODING 23573 +BBX 13 15 1 -2 +BITMAP +7FE0 +1020 +1040 +1078 +2008 +2008 +4228 +8210 +1240 +1220 +2210 +4208 +8208 +0A00 +0400 +ENDCHAR +STARTCHAR uni5C16 +ENCODING 23574 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0920 +3118 +C106 +0100 +0700 +0000 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni5C17 +ENCODING 23575 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +03F8 +0200 +0200 +0200 +FFFE +0100 +0100 +0920 +1110 +2108 +4104 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni5C18 +ENCODING 23576 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0920 +0910 +1108 +2104 +4104 +0000 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5C19 +ENCODING 23577 +BBX 13 16 1 -2 +BITMAP +0200 +2220 +2210 +4208 +8208 +7FF0 +4010 +4010 +4F90 +4890 +4890 +4890 +4F90 +4010 +4050 +4020 +ENDCHAR +STARTCHAR uni5C1A +ENCODING 23578 +BBX 13 15 2 -1 +BITMAP +0200 +4210 +2210 +2220 +0200 +FFF8 +8008 +8008 +9F88 +9088 +9088 +9088 +9F88 +8008 +8038 +ENDCHAR +STARTCHAR uni5C1B +ENCODING 23579 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0920 +0910 +1108 +2104 +4104 +1010 +1010 +1010 +5454 +5252 +9292 +1010 +5050 +2020 +ENDCHAR +STARTCHAR uni5C1C +ENCODING 23580 +BBX 15 16 0 -2 +BITMAP +0100 +0920 +1110 +2108 +0000 +0100 +FFFE +0280 +0C60 +3018 +C106 +0920 +0910 +1108 +2508 +0200 +ENDCHAR +STARTCHAR uni5C1D +ENCODING 23581 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +0100 +7FFE +4002 +8004 +1FF0 +0000 +0000 +7FFC +0400 +0820 +1010 +3FF8 +1008 +ENDCHAR +STARTCHAR uni5C1E +ENCODING 23582 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0280 +2448 +1FF0 +3838 +CFE6 +0820 +0FE0 +0100 +3118 +C106 +0100 +0700 +ENDCHAR +STARTCHAR uni5C1F +ENCODING 23583 +BBX 15 16 0 -2 +BITMAP +0010 +3E10 +2210 +3E54 +2252 +3E52 +0090 +FF12 +0804 +0808 +2F10 +2860 +2980 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni5C20 +ENCODING 23584 +BBX 15 15 1 -1 +BITMAP +2210 +2210 +FF90 +2254 +3E54 +2254 +3E92 +2210 +FFB2 +5402 +5404 +5704 +6008 +4010 +7F60 +ENDCHAR +STARTCHAR uni5C21 +ENCODING 23585 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +9104 +5504 +59FC +1104 +FD04 +29FC +2800 +2912 +29D4 +2918 +2B10 +4D52 +4992 +810E +ENDCHAR +STARTCHAR uni5C22 +ENCODING 23586 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +0100 +FFFE +0100 +0100 +0180 +0280 +0280 +0480 +0880 +1082 +2082 +C07E +ENDCHAR +STARTCHAR uni5C23 +ENCODING 23587 +BBX 14 15 2 -1 +BITMAP +0480 +0480 +0480 +0840 +0840 +1020 +2490 +C48C +0480 +0480 +0480 +0880 +0880 +1084 +607C +ENDCHAR +STARTCHAR uni5C24 +ENCODING 23588 +BBX 15 15 1 -1 +BITMAP +0120 +0110 +0108 +0100 +FFFE +0100 +0100 +0180 +0280 +0280 +0480 +0480 +0882 +3082 +C07E +ENDCHAR +STARTCHAR uni5C25 +ENCODING 23589 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +2080 +21F8 +FD08 +2A08 +2888 +2848 +2848 +2808 +2808 +2850 +2822 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni5C26 +ENCODING 23590 +BBX 15 16 0 -2 +BITMAP +0040 +2440 +2240 +427C +8084 +2504 +2444 +2424 +2424 +2404 +2404 +2428 +2412 +4402 +43FE +8000 +ENDCHAR +STARTCHAR uni5C27 +ENCODING 23591 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +02FC +7F20 +0140 +0084 +0764 +381C +0000 +FFFE +0440 +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni5C28 +ENCODING 23592 +BBX 15 15 1 -1 +BITMAP +1408 +1208 +1210 +1020 +FC44 +1184 +1008 +1010 +1862 +2984 +2808 +2830 +49C2 +4802 +87FE +ENDCHAR +STARTCHAR uni5C29 +ENCODING 23593 +BBX 15 15 1 -1 +BITMAP +2800 +2800 +29FC +4420 +4220 +8020 +A8F8 +2820 +2820 +2820 +2820 +29FC +4800 +4402 +83FE +ENDCHAR +STARTCHAR uni5C2A +ENCODING 23594 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2040 +2040 +FC40 +2840 +29F0 +2840 +2840 +2840 +2840 +2BF8 +2802 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni5C2B +ENCODING 23595 +BBX 15 14 1 -1 +BITMAP +FC00 +2BF8 +2840 +2840 +2840 +29F0 +2840 +2840 +2840 +2840 +2BF8 +4802 +4802 +87FE +ENDCHAR +STARTCHAR uni5C2C +ENCODING 23596 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2050 +2088 +FD04 +2A02 +2888 +2888 +2888 +2888 +2908 +2908 +2A0A +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni5C2D +ENCODING 23597 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +0920 +0820 +7FFC +0820 +0820 +0000 +3FF8 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni5C2E +ENCODING 23598 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2088 +2090 +FCBC +2904 +2914 +2A48 +2840 +2BFC +28E0 +2950 +2A4A +4842 +47FE +8000 +ENDCHAR +STARTCHAR uni5C2F +ENCODING 23599 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +21F8 +2208 +FDFE +2900 +2978 +2948 +2968 +2950 +2944 +2A44 +2C3E +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni5C30 +ENCODING 23600 +BBX 15 15 1 -1 +BITMAP +11F0 +1040 +17FC +F840 +13F8 +1248 +13F8 +1A48 +2BF8 +2840 +2BF8 +2840 +4FFC +4402 +83FE +ENDCHAR +STARTCHAR uni5C31 +ENCODING 23601 +BBX 15 15 1 -1 +BITMAP +0828 +0824 +FE20 +01FE +7E20 +4220 +4220 +4220 +7E30 +0850 +2A50 +2950 +4892 +8912 +3A0E +ENDCHAR +STARTCHAR uni5C32 +ENCODING 23602 +BBX 15 16 0 -2 +BITMAP +2088 +2050 +23FE +2050 +FDFC +2854 +2BFE +2854 +29FC +2850 +28D8 +2954 +2A52 +4852 +47FE +8000 +ENDCHAR +STARTCHAR uni5C33 +ENCODING 23603 +BBX 15 16 0 -2 +BITMAP +20F8 +2088 +20E8 +20A8 +FDFC +2904 +28F8 +2888 +28F8 +2888 +28F8 +2888 +2888 +48AA +4892 +87FE +ENDCHAR +STARTCHAR uni5C34 +ENCODING 23604 +BBX 15 16 0 -2 +BITMAP +2090 +2290 +22BC +22D0 +FE88 +2A88 +2800 +2BF8 +2AA8 +2AA8 +2AA8 +2FFE +2802 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni5C35 +ENCODING 23605 +BBX 15 16 0 -2 +BITMAP +2020 +21FC +2124 +21FC +FC20 +2BFE +2904 +29FC +2904 +29FC +2904 +29FC +2888 +4906 +4802 +87FE +ENDCHAR +STARTCHAR uni5C36 +ENCODING 23606 +BBX 15 16 0 -2 +BITMAP +03E8 +FE88 +2BCE +2A50 +2BE4 +2A82 +2BE0 +2800 +29FC +2954 +2954 +2954 +2BFE +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni5C37 +ENCODING 23607 +BBX 15 16 0 -2 +BITMAP +23E8 +2288 +23CE +2250 +FFE4 +2A82 +2BE0 +2800 +29FC +2954 +2954 +2954 +2BFE +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni5C38 +ENCODING 23608 +BBX 14 14 1 -1 +BITMAP +3FFC +2004 +2004 +2004 +2004 +3FFC +2000 +2000 +2000 +2000 +2000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni5C39 +ENCODING 23609 +BBX 15 14 1 -1 +BITMAP +3FF8 +0108 +0108 +0108 +FFFE +0108 +0108 +0108 +3FF8 +0100 +0100 +0200 +0C00 +7000 +ENDCHAR +STARTCHAR uni5C3A +ENCODING 23610 +BBX 14 14 1 -1 +BITMAP +3FF0 +2010 +2010 +2010 +2010 +3FF0 +2100 +2100 +2080 +2080 +4040 +4020 +4010 +800C +ENDCHAR +STARTCHAR uni5C3B +ENCODING 23611 +BBX 14 14 1 -1 +BITMAP +7FF8 +4008 +4008 +7FF8 +4200 +4200 +5FE0 +4220 +4220 +4220 +8420 +8424 +8824 +301C +ENDCHAR +STARTCHAR uni5C3C +ENCODING 23612 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +4004 +4004 +7FFC +4400 +440C +4470 +4780 +4400 +8400 +8402 +8402 +03FE +ENDCHAR +STARTCHAR uni5C3D +ENCODING 23613 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +2010 +2010 +4308 +40C4 +8002 +0000 +0600 +0180 +0040 +ENDCHAR +STARTCHAR uni5C3E +ENCODING 23614 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +2008 +3FF8 +2060 +2F80 +2100 +3FF8 +2100 +7FFC +4100 +8102 +0102 +00FE +ENDCHAR +STARTCHAR uni5C3F +ENCODING 23615 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +4004 +7FFC +4080 +4084 +5E88 +42D0 +42E0 +44A0 +8490 +8888 +B086 +0380 +ENDCHAR +STARTCHAR uni5C40 +ENCODING 23616 +BBX 14 14 1 -1 +BITMAP +3FF8 +2008 +2008 +3FF8 +2000 +3FFC +2004 +2FE4 +2824 +4824 +4FE4 +8008 +0008 +0070 +ENDCHAR +STARTCHAR uni5C41 +ENCODING 23617 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +4004 +7FFC +4000 +4840 +4840 +484C +4F70 +4840 +4840 +8842 +8F42 +383E +ENDCHAR +STARTCHAR uni5C42 +ENCODING 23618 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2000 +2000 +2FFC +2000 +2000 +3FFE +2100 +2210 +4408 +4FFC +8404 +ENDCHAR +STARTCHAR uni5C43 +ENCODING 23619 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2000 +2000 +27FC +2404 +2444 +2444 +2444 +24B4 +4108 +4604 +9802 +ENDCHAR +STARTCHAR uni5C44 +ENCODING 23620 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2080 +2040 +2FFE +2802 +3124 +2120 +2210 +2210 +4408 +4804 +9002 +ENDCHAR +STARTCHAR uni5C45 +ENCODING 23621 +BBX 14 14 1 -1 +BITMAP +3FF8 +2008 +2008 +3FF8 +2080 +3FFC +2080 +2080 +2FF8 +4808 +4808 +8808 +0808 +0FF8 +ENDCHAR +STARTCHAR uni5C46 +ENCODING 23622 +BBX 14 14 1 -1 +BITMAP +7FFC +4004 +4004 +7FFC +4000 +4080 +5084 +57F4 +5084 +5084 +57F4 +9004 +9004 +1FFC +ENDCHAR +STARTCHAR uni5C47 +ENCODING 23623 +BBX 14 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2000 +27FC +2444 +2444 +2444 +27FC +2444 +2444 +4444 +47FC +8404 +ENDCHAR +STARTCHAR uni5C48 +ENCODING 23624 +BBX 14 14 1 -1 +BITMAP +3FFC +2004 +2004 +3FFC +2080 +2488 +2488 +2488 +27F8 +4080 +4884 +8884 +0884 +0FFC +ENDCHAR +STARTCHAR uni5C49 +ENCODING 23625 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +3FF8 +2090 +2490 +2490 +2490 +3FFC +2490 +2490 +44F0 +4400 +8400 +07FE +ENDCHAR +STARTCHAR uni5C4A +ENCODING 23626 +BBX 14 14 1 -1 +BITMAP +3FFC +2004 +2004 +3FFC +2080 +2080 +2FFC +2884 +2884 +4FFC +4884 +8884 +0884 +0FFC +ENDCHAR +STARTCHAR uni5C4B +ENCODING 23627 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +2008 +3FF8 +2000 +3FFC +2200 +2470 +3F88 +4100 +5FF0 +8100 +0100 +7FFE +ENDCHAR +STARTCHAR uni5C4C +ENCODING 23628 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2000 +27FC +2404 +2404 +27FC +2040 +2FFE +2842 +484A +4844 +8040 +ENDCHAR +STARTCHAR uni5C4D +ENCODING 23629 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +4004 +7FFC +4000 +7FFC +4840 +4F4C +5170 +7140 +8A40 +8442 +0842 +303E +ENDCHAR +STARTCHAR uni5C4E +ENCODING 23630 +BBX 15 14 1 -1 +BITMAP +3FFC +2004 +3FFC +2080 +2488 +2490 +22A0 +3FFC +42A0 +42A0 +8490 +0888 +3086 +0080 +ENDCHAR +STARTCHAR uni5C4F +ENCODING 23631 +BBX 15 14 1 -1 +BITMAP +3FFC +2004 +2004 +3FFC +2410 +2220 +3FFC +2220 +2220 +3FFE +4220 +4420 +8420 +0820 +ENDCHAR +STARTCHAR uni5C50 +ENCODING 23632 +BBX 15 14 1 -1 +BITMAP +3FFC +2004 +3FFC +2420 +2420 +2BFE +3020 +25F8 +2888 +7888 +4850 +8820 +08D8 +0B06 +ENDCHAR +STARTCHAR uni5C51 +ENCODING 23633 +BBX 14 14 1 -1 +BITMAP +3FFC +2004 +2004 +3FFC +2290 +2488 +2FFC +2408 +27F8 +4408 +47F8 +8408 +0408 +0418 +ENDCHAR +STARTCHAR uni5C52 +ENCODING 23634 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +3FFC +2000 +2FF8 +2800 +2BF8 +2800 +2FFC +2A48 +2A50 +5220 +5298 +A306 +0200 +ENDCHAR +STARTCHAR uni5C53 +ENCODING 23635 +BBX 14 14 1 -1 +BITMAP +3FF8 +2008 +3FF8 +2000 +2FF0 +2810 +2FF0 +2810 +2FF0 +4810 +4FF0 +8200 +0C30 +300C +ENDCHAR +STARTCHAR uni5C54 +ENCODING 23636 +BBX 15 15 0 -2 +BITMAP +02FE +3C82 +2082 +2082 +20FE +3E80 +24A0 +24A2 +24A4 +24B8 +2EA0 +F122 +4122 +021E +0400 +ENDCHAR +STARTCHAR uni5C55 +ENCODING 23637 +BBX 15 14 1 -1 +BITMAP +3FFC +2004 +2004 +3FFC +2220 +2220 +3FFC +2220 +2220 +3FFE +4448 +4430 +8718 +1C06 +ENDCHAR +STARTCHAR uni5C56 +ENCODING 23638 +BBX 14 15 0 -2 +BITMAP +3FFC +2004 +3FFC +2100 +2080 +2FF8 +2410 +2220 +3FFC +2080 +2080 +4FF8 +4080 +8080 +0080 +ENDCHAR +STARTCHAR uni5C57 +ENCODING 23639 +BBX 15 16 0 -2 +BITMAP +0008 +3F08 +2108 +217E +3F08 +2048 +2328 +3C28 +2708 +3C08 +27A8 +3C12 +2402 +4402 +43FE +8000 +ENDCHAR +STARTCHAR uni5C58 +ENCODING 23640 +BBX 15 15 0 -2 +BITMAP +3F7E +2102 +2104 +3F08 +2008 +237E +3C08 +2708 +3C08 +2788 +3C2A +2412 +4402 +43FE +8000 +ENDCHAR +STARTCHAR uni5C59 +ENCODING 23641 +BBX 14 15 0 -2 +BITMAP +3FFC +2004 +3FFC +2000 +2EFC +2A08 +2AE8 +2CA8 +2AA8 +2AA8 +2AE8 +4AA8 +4E08 +8828 +0810 +ENDCHAR +STARTCHAR uni5C5A +ENCODING 23642 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +3FFC +2000 +3FFE +2080 +2FFC +2884 +2CA4 +2A94 +2884 +4CA4 +4A94 +8884 +080C +ENDCHAR +STARTCHAR uni5C5B +ENCODING 23643 +BBX 15 14 1 -1 +BITMAP +3FFC +2004 +2004 +3FFC +2208 +2410 +3F7E +2408 +4488 +477E +5C08 +8408 +0808 +1008 +ENDCHAR +STARTCHAR uni5C5C +ENCODING 23644 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2228 +24A8 +2AA8 +23FE +24A8 +2CA8 +34A8 +24B8 +4480 +44FE +8400 +ENDCHAR +STARTCHAR uni5C5D +ENCODING 23645 +BBX 14 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2120 +2120 +2F3C +2120 +2120 +2738 +2120 +2120 +4F3C +4120 +8120 +ENDCHAR +STARTCHAR uni5C5E +ENCODING 23646 +BBX 14 14 1 -1 +BITMAP +3FFC +2004 +3FFC +2030 +2FC0 +2080 +2FF8 +2888 +4FF8 +4080 +5FFC +90A4 +10F4 +170C +ENDCHAR +STARTCHAR uni5C5F +ENCODING 23647 +BBX 15 14 1 -1 +BITMAP +3FFC +2004 +3FFC +2490 +3FFE +2490 +24F0 +2400 +27FC +2080 +7FFE +4490 +8888 +3086 +ENDCHAR +STARTCHAR uni5C60 +ENCODING 23648 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +7FFC +4110 +5FF8 +4120 +7FFE +4090 +47F8 +7C08 +87F8 +8408 +0408 +07F8 +ENDCHAR +STARTCHAR uni5C61 +ENCODING 23649 +BBX 15 14 1 -1 +BITMAP +3FFC +2004 +3FFC +2888 +2490 +3FFE +22A0 +2C98 +2100 +5FFE +4210 +87E0 +0098 +1F06 +ENDCHAR +STARTCHAR uni5C62 +ENCODING 23650 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +7FFC +4888 +5FFC +4888 +4FF8 +4080 +4FF8 +4888 +5FFE +8E18 +83E0 +1C1E +ENDCHAR +STARTCHAR uni5C63 +ENCODING 23651 +BBX 15 14 1 -1 +BITMAP +3FFC +2004 +3FFC +2010 +2450 +245C +2850 +32FE +2210 +2410 +4C9C +54D0 +84B0 +051E +ENDCHAR +STARTCHAR uni5C64 +ENCODING 23652 +BBX 14 14 1 -1 +BITMAP +7FFC +4004 +7FFC +4410 +5FFC +5084 +5FFC +5084 +5FFC +4808 +8FF8 +8808 +0808 +0FF8 +ENDCHAR +STARTCHAR uni5C65 +ENCODING 23653 +BBX 15 15 1 -1 +BITMAP +7FFC +4004 +7FFC +4880 +51FC +6108 +4BF8 +4908 +51F8 +7080 +51FC +9708 +1090 +1060 +179E +ENDCHAR +STARTCHAR uni5C66 +ENCODING 23654 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +3FFC +2000 +2524 +28A8 +31FC +24A8 +2924 +3840 +2BFE +4888 +4990 +8870 +0B8C +ENDCHAR +STARTCHAR uni5C67 +ENCODING 23655 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +7FFC +4948 +4BFE +5148 +5578 +6500 +49FC +4820 +5BFE +A8A8 +8924 +0A22 +ENDCHAR +STARTCHAR uni5C68 +ENCODING 23656 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +7FFC +5040 +53F8 +6248 +4FFC +4A48 +57FC +5444 +7FFE +9108 +90F0 +170E +ENDCHAR +STARTCHAR uni5C69 +ENCODING 23657 +BBX 15 15 1 -1 +BITMAP +7FFC +4004 +7FFC +4800 +49F8 +5040 +55FC +6490 +49F8 +5A94 +6BFE +4A04 +8AF4 +8A94 +0AFC +ENDCHAR +STARTCHAR uni5C6A +ENCODING 23658 +BBX 15 16 0 -2 +BITMAP +3FFC +2004 +3FFC +2040 +2FFE +2882 +27FC +2110 +2BFA +260C +2BFA +2208 +43F8 +4040 +8448 +08C4 +ENDCHAR +STARTCHAR uni5C6B +ENCODING 23659 +BBX 15 16 0 -2 +BITMAP +3FFC +2004 +3FFC +2000 +22FE +2A20 +2BFE +2E44 +22BA +2328 +3EFE +2A82 +4ABA +4AAA +92BA +2286 +ENDCHAR +STARTCHAR uni5C6C +ENCODING 23660 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +7FFC +4080 +5EBC +4080 +5FFC +5224 +5FFE +6912 +4FF2 +8122 +81D2 +1E1C +ENDCHAR +STARTCHAR uni5C6D +ENCODING 23661 +BBX 15 16 0 -2 +BITMAP +3FFC +2004 +3FFC +2208 +23F8 +2208 +23F8 +2110 +2208 +2FBE +28A2 +2FBE +48A2 +4FBE +8514 +08A2 +ENDCHAR +STARTCHAR uni5C6E +ENCODING 23662 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +0100 +4104 +4104 +4104 +4104 +4104 +4104 +7FFC +0100 +0100 +0200 +0C00 +F000 +ENDCHAR +STARTCHAR uni5C6F +ENCODING 23663 +BBX 15 15 1 -1 +BITMAP +0100 +010C +01F0 +FF00 +0100 +2108 +2108 +2108 +2108 +2108 +3FF8 +0100 +0102 +0102 +00FE +ENDCHAR +STARTCHAR uni5C70 +ENCODING 23664 +BBX 13 15 2 -1 +BITMAP +1040 +0840 +0880 +FFF8 +0200 +2220 +2220 +2220 +2220 +3FE0 +0200 +0200 +0200 +0400 +3800 +ENDCHAR +STARTCHAR uni5C71 +ENCODING 23665 +BBX 13 14 2 0 +BITMAP +0200 +0200 +0200 +0200 +0200 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +FFF8 +ENDCHAR +STARTCHAR uni5C72 +ENCODING 23666 +BBX 13 15 1 -1 +BITMAP +0010 +00F8 +0F00 +F000 +0200 +0200 +0200 +4210 +4210 +4210 +4210 +4210 +4210 +7FF0 +0010 +ENDCHAR +STARTCHAR uni5C73 +ENCODING 23667 +BBX 15 16 0 -2 +BITMAP +0600 +0100 +0280 +0440 +0820 +3118 +C106 +0100 +2108 +2108 +2108 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5C74 +ENCODING 23668 +BBX 12 16 1 -2 +BITMAP +0200 +0200 +4210 +4210 +4210 +7FF0 +0400 +0400 +FFF0 +0410 +0810 +0810 +1010 +2010 +40A0 +8040 +ENDCHAR +STARTCHAR uni5C75 +ENCODING 23669 +BBX 14 16 0 -2 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0000 +0000 +3FFC +2000 +2000 +2000 +2000 +2000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni5C76 +ENCODING 23670 +BBX 13 15 1 -1 +BITMAP +0200 +4208 +4208 +4208 +7FF8 +0000 +0000 +FFF8 +0408 +0408 +0408 +0808 +1010 +2010 +C0E0 +ENDCHAR +STARTCHAR uni5C77 +ENCODING 23671 +BBX 13 16 1 -2 +BITMAP +2000 +2000 +27F0 +2110 +A920 +A920 +A940 +A978 +A908 +A908 +AA08 +BA08 +CA08 +0408 +0450 +0820 +ENDCHAR +STARTCHAR uni5C78 +ENCODING 23672 +BBX 14 15 1 -1 +BITMAP +2000 +2000 +23F8 +2040 +A840 +A840 +A840 +A840 +A840 +A840 +A840 +B840 +C840 +0040 +07FC +ENDCHAR +STARTCHAR uni5C79 +ENCODING 23673 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +A9FE +AA00 +AC00 +A9FC +A808 +A810 +A820 +A840 +F880 +0102 +0102 +00FE +ENDCHAR +STARTCHAR uni5C7A +ENCODING 23674 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2004 +2004 +A804 +A804 +ABFC +AA00 +AA00 +AA00 +AA00 +FA00 +0202 +0202 +01FE +ENDCHAR +STARTCHAR uni5C7B +ENCODING 23675 +BBX 13 16 1 -2 +BITMAP +2000 +2000 +23F8 +2088 +A888 +AA88 +AA88 +AA88 +AA88 +AC88 +A888 +B908 +C908 +0208 +0450 +0820 +ENDCHAR +STARTCHAR uni5C7C +ENCODING 23676 +BBX 15 15 1 -1 +BITMAP +2000 +2FFC +2000 +2120 +A920 +A920 +A920 +A920 +A920 +A920 +A920 +FA20 +0222 +0422 +081E +ENDCHAR +STARTCHAR uni5C7D +ENCODING 23677 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2040 +2040 +A840 +A840 +A840 +AFFC +A840 +A840 +A840 +B840 +C840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5C7E +ENCODING 23678 +BBX 13 15 1 -1 +BITMAP +2040 +2040 +2040 +2040 +AA48 +AA48 +AA48 +AA48 +AA48 +AA48 +AA48 +BA48 +CA48 +03F8 +0008 +ENDCHAR +STARTCHAR uni5C7F +ENCODING 23679 +BBX 14 16 1 -2 +BITMAP +2080 +2080 +2080 +20FC +A880 +A900 +A900 +A9F8 +A808 +A808 +A808 +BBE8 +C808 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni5C80 +ENCODING 23680 +BBX 13 15 1 -1 +BITMAP +0200 +0200 +4210 +4210 +4210 +4210 +7FF0 +0000 +0200 +8208 +8208 +8208 +8208 +FFF8 +0008 +ENDCHAR +STARTCHAR uni5C81 +ENCODING 23681 +BBX 13 16 0 -2 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0200 +0200 +07F0 +0810 +1410 +2220 +0140 +0080 +0300 +1C00 +E000 +ENDCHAR +STARTCHAR uni5C82 +ENCODING 23682 +BBX 12 16 2 -2 +BITMAP +0400 +8420 +8420 +8420 +FFE0 +0000 +0000 +FFC0 +0040 +0040 +0040 +FFC0 +8000 +8010 +8010 +7FF0 +ENDCHAR +STARTCHAR uni5C83 +ENCODING 23683 +BBX 12 16 1 -2 +BITMAP +0200 +4210 +4210 +4210 +7FF0 +0000 +0000 +7FF0 +0410 +2410 +2410 +4410 +0810 +1010 +20A0 +C040 +ENDCHAR +STARTCHAR uni5C84 +ENCODING 23684 +BBX 13 16 1 -2 +BITMAP +2000 +21F8 +2108 +2108 +A908 +A9F8 +A908 +A908 +A908 +A9F8 +A908 +B908 +CA08 +0208 +0428 +0810 +ENDCHAR +STARTCHAR uni5C85 +ENCODING 23685 +BBX 14 16 1 -2 +BITMAP +2010 +2038 +23C0 +2200 +AA00 +ABF8 +AA88 +AA88 +AA88 +AA50 +AA50 +BA20 +CA20 +0450 +0488 +0904 +ENDCHAR +STARTCHAR uni5C86 +ENCODING 23686 +BBX 14 16 1 -2 +BITMAP +2010 +2078 +23C0 +2040 +A840 +A840 +AFFC +A840 +A840 +A8A0 +A8A0 +B8A0 +C910 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni5C87 +ENCODING 23687 +BBX 13 16 1 -2 +BITMAP +0200 +4210 +4210 +4210 +7FF0 +0000 +1800 +E1F8 +8108 +8108 +8108 +9908 +E128 +8110 +0100 +0100 +ENDCHAR +STARTCHAR uni5C88 +ENCODING 23688 +BBX 15 15 1 -1 +BITMAP +2000 +21FE +2108 +2108 +A908 +A908 +AFFE +A848 +A848 +A888 +A888 +F908 +0208 +0C08 +0038 +ENDCHAR +STARTCHAR uni5C89 +ENCODING 23689 +BBX 13 16 1 -2 +BITMAP +2100 +2100 +2100 +21F8 +AAA8 +ACA8 +A8A8 +A928 +A928 +AA48 +AC48 +B888 +C888 +0108 +0250 +0020 +ENDCHAR +STARTCHAR uni5C8A +ENCODING 23690 +BBX 13 14 2 -1 +BITMAP +FFF0 +8410 +8410 +FFF0 +8000 +8008 +8008 +7FF8 +0400 +0400 +8410 +8410 +8410 +FFF0 +ENDCHAR +STARTCHAR uni5C8B +ENCODING 23691 +BBX 14 16 1 -2 +BITMAP +2000 +27F8 +2108 +2110 +A910 +A920 +A938 +A908 +AA88 +AA88 +AA50 +BA50 +CC20 +0450 +0888 +0304 +ENDCHAR +STARTCHAR uni5C8C +ENCODING 23692 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +4104 +7FFC +0000 +7FE0 +0420 +0440 +0BF8 +0A08 +1210 +2120 +40E0 +8718 +3806 +ENDCHAR +STARTCHAR uni5C8D +ENCODING 23693 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2110 +2110 +A910 +A910 +A910 +AFFC +A910 +A910 +A910 +B910 +C910 +0210 +0210 +0410 +ENDCHAR +STARTCHAR uni5C8E +ENCODING 23694 +BBX 14 16 1 -2 +BITMAP +2020 +2120 +2120 +2110 +AA10 +AA08 +AC08 +ABF4 +A910 +A910 +A910 +B910 +CA10 +0210 +0450 +0820 +ENDCHAR +STARTCHAR uni5C8F +ENCODING 23695 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2000 +2000 +A800 +A800 +AFFE +A890 +A890 +A890 +A890 +F910 +0112 +0212 +0C0E +ENDCHAR +STARTCHAR uni5C90 +ENCODING 23696 +BBX 15 15 1 -1 +BITMAP +0020 +2020 +2020 +AFFE +A820 +A820 +ABF8 +A808 +A888 +A890 +A850 +F820 +0050 +0188 +0606 +ENDCHAR +STARTCHAR uni5C91 +ENCODING 23697 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +4104 +7FFC +0100 +0280 +0440 +0820 +3398 +C006 +1FF0 +0010 +0020 +0040 +0080 +ENDCHAR +STARTCHAR uni5C92 +ENCODING 23698 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +20A0 +20A0 +A910 +AA88 +AC44 +A840 +A800 +ABF8 +A808 +B810 +C810 +0020 +0020 +0040 +ENDCHAR +STARTCHAR uni5C93 +ENCODING 23699 +BBX 14 16 1 -2 +BITMAP +2010 +2038 +21C0 +2100 +A900 +A900 +A9FC +A910 +A910 +A910 +A910 +B910 +CA10 +0210 +0410 +0810 +ENDCHAR +STARTCHAR uni5C94 +ENCODING 23700 +BBX 15 15 1 -1 +BITMAP +0040 +0820 +1010 +2008 +DFF6 +0210 +0410 +0820 +1020 +60C0 +0100 +4104 +4104 +4104 +7FFC +ENDCHAR +STARTCHAR uni5C95 +ENCODING 23701 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0100 +0280 +0440 +0820 +3458 +C446 +0440 +0440 +0840 +0840 +1040 +ENDCHAR +STARTCHAR uni5C96 +ENCODING 23702 +BBX 14 15 1 -1 +BITMAP +2000 +23FC +2200 +2208 +AA88 +AA50 +AA50 +AA20 +AA20 +AA50 +AA50 +BA88 +CB08 +0200 +03FC +ENDCHAR +STARTCHAR uni5C97 +ENCODING 23703 +BBX 11 16 2 -2 +BITMAP +0400 +8420 +8420 +FFE0 +0000 +FFE0 +8020 +8120 +9120 +8A20 +8420 +8A20 +9120 +A020 +80A0 +8040 +ENDCHAR +STARTCHAR uni5C98 +ENCODING 23704 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2208 +2208 +AA48 +AA48 +AA48 +AA48 +AA48 +AAA8 +A8A0 +B920 +C920 +0224 +0424 +081C +ENDCHAR +STARTCHAR uni5C99 +ENCODING 23705 +BBX 15 16 0 -2 +BITMAP +0010 +00F8 +3F00 +0100 +0200 +7FFC +0440 +0820 +3018 +C106 +0100 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5C9A +ENCODING 23706 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +1FF0 +1010 +1050 +1450 +1290 +1110 +1292 +244A +284A +4006 +8002 +ENDCHAR +STARTCHAR uni5C9B +ENCODING 23707 +BBX 12 16 2 -2 +BITMAP +0400 +0800 +7FC0 +4040 +4840 +4540 +4080 +4000 +7FF0 +0810 +8890 +8890 +FF90 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni5C9C +ENCODING 23708 +BBX 13 15 2 -1 +BITMAP +0400 +8420 +8420 +FFE0 +0000 +FFE0 +8420 +8420 +8420 +FFE0 +8000 +8008 +8008 +8008 +7FF8 +ENDCHAR +STARTCHAR uni5C9D +ENCODING 23709 +BBX 14 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0800 +0800 +1FFC +2400 +4400 +87F0 +0400 +0400 +07F8 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni5C9E +ENCODING 23710 +BBX 14 16 1 -2 +BITMAP +2100 +2100 +2100 +21FC +AA80 +AA80 +AC80 +A8F8 +A880 +A880 +A880 +B8FC +C880 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni5C9F +ENCODING 23711 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +23F8 +AA48 +AA48 +AA48 +AA48 +AA48 +AFFC +A8A0 +F8A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni5CA0 +ENCODING 23712 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2200 +2200 +AA00 +ABFC +AA04 +AA04 +AA04 +ABFC +AA00 +FA00 +0200 +0200 +03FE +ENDCHAR +STARTCHAR uni5CA1 +ENCODING 23713 +BBX 13 14 2 -1 +BITMAP +FFF8 +9048 +8888 +8888 +BFE8 +8208 +8208 +9248 +9248 +9248 +9248 +9FC8 +8008 +8038 +ENDCHAR +STARTCHAR uni5CA2 +ENCODING 23714 +BBX 14 15 1 -1 +BITMAP +0200 +4208 +4208 +4208 +7FF8 +0000 +FFFC +0010 +3F10 +2110 +2110 +3F10 +0010 +0010 +0070 +ENDCHAR +STARTCHAR uni5CA3 +ENCODING 23715 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +2100 +23FE +AA02 +AC02 +A9F2 +A912 +A912 +A912 +A912 +F9F2 +0004 +0004 +0018 +ENDCHAR +STARTCHAR uni5CA4 +ENCODING 23716 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +2020 +23FE +AA02 +AC04 +A800 +A890 +A890 +A890 +A888 +B908 +C908 +0104 +0204 +0402 +ENDCHAR +STARTCHAR uni5CA5 +ENCODING 23717 +BBX 14 16 1 -2 +BITMAP +2020 +2020 +2020 +23FC +AA24 +AA28 +AA20 +ABF8 +AA88 +AA88 +AA50 +BA50 +CA20 +0450 +0488 +0904 +ENDCHAR +STARTCHAR uni5CA6 +ENCODING 23718 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +4208 +4208 +7FF8 +0000 +0200 +0200 +7FF8 +0020 +1020 +0840 +0840 +0080 +FFFC +ENDCHAR +STARTCHAR uni5CA7 +ENCODING 23719 +BBX 14 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +7FFC +0104 +0E04 +F018 +0000 +3FF8 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni5CA8 +ENCODING 23720 +BBX 15 14 1 -1 +BITMAP +21F8 +2108 +A908 +A908 +A9F8 +A908 +A908 +A908 +A9F8 +A908 +F908 +0108 +0108 +07FE +ENDCHAR +STARTCHAR uni5CA9 +ENCODING 23721 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0000 +FFFE +0400 +0800 +1FF8 +2808 +C808 +0808 +0808 +0FF8 +ENDCHAR +STARTCHAR uni5CAA +ENCODING 23722 +BBX 13 15 2 -1 +BITMAP +0200 +8208 +8208 +FFF8 +0880 +FFF0 +0890 +7FF0 +4880 +4880 +7FF8 +0888 +1088 +2098 +C080 +ENDCHAR +STARTCHAR uni5CAB +ENCODING 23723 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +2020 +ABFE +AA22 +AA22 +AA22 +ABFE +AA22 +AA22 +FA22 +0222 +0222 +03FE +ENDCHAR +STARTCHAR uni5CAC +ENCODING 23724 +BBX 14 14 1 -1 +BITMAP +23FC +2244 +2244 +AA44 +ABFC +AA44 +AA44 +AA44 +ABFC +A840 +F840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5CAD +ENCODING 23725 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2110 +2208 +ADF6 +A800 +A800 +AFFC +A884 +A884 +A884 +F884 +009C +0080 +0080 +ENDCHAR +STARTCHAR uni5CAE +ENCODING 23726 +BBX 14 15 1 -1 +BITMAP +2040 +2020 +2020 +23FC +AA04 +AC08 +A900 +A910 +A920 +A940 +A980 +B904 +C904 +0104 +00FC +ENDCHAR +STARTCHAR uni5CAF +ENCODING 23727 +BBX 14 15 1 -1 +BITMAP +2000 +23FC +2020 +2020 +A840 +A840 +A8D0 +A948 +AA44 +AC44 +A840 +B840 +C840 +0000 +07FC +ENDCHAR +STARTCHAR uni5CB0 +ENCODING 23728 +BBX 15 16 0 -2 +BITMAP +2010 +2090 +2090 +2110 +A97E +AA52 +AB92 +A892 +A912 +A912 +AA52 +BBD2 +C862 +0022 +004A +0084 +ENDCHAR +STARTCHAR uni5CB1 +ENCODING 23729 +BBX 15 15 1 -1 +BITMAP +0890 +1090 +2088 +609E +A7E0 +2040 +2020 +2012 +200A +2004 +0100 +4104 +4104 +4104 +7FFC +ENDCHAR +STARTCHAR uni5CB2 +ENCODING 23730 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2208 +2208 +AA08 +AA08 +ABF8 +A8A0 +A8A0 +A8A0 +A8A0 +B924 +C924 +0224 +041C +0800 +ENDCHAR +STARTCHAR uni5CB3 +ENCODING 23731 +BBX 15 15 1 -1 +BITMAP +0070 +1F80 +1000 +1000 +1FF8 +1020 +1020 +1020 +FFFE +0100 +0100 +2108 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni5CB4 +ENCODING 23732 +BBX 14 15 1 -1 +BITMAP +2010 +2038 +21C0 +2100 +A900 +A900 +A900 +A9FC +A910 +A910 +A910 +B910 +C910 +0110 +03FC +ENDCHAR +STARTCHAR uni5CB5 +ENCODING 23733 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +2040 +AFFE +A840 +A840 +A840 +ABFC +AA04 +AA04 +FA04 +0204 +0204 +03FC +ENDCHAR +STARTCHAR uni5CB6 +ENCODING 23734 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +2080 +ABFC +AA04 +AA04 +AA04 +AA04 +ABFC +AA04 +AA04 +AA04 +FA04 +0204 +03FC +ENDCHAR +STARTCHAR uni5CB7 +ENCODING 23735 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +AA04 +AA04 +ABFC +AA20 +AA20 +ABFE +AA20 +AA20 +FA10 +0252 +038A +0604 +ENDCHAR +STARTCHAR uni5CB8 +ENCODING 23736 +BBX 14 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +3FFC +2000 +2FF8 +2080 +2080 +3FFC +4080 +4080 +8080 +0080 +ENDCHAR +STARTCHAR uni5CB9 +ENCODING 23737 +BBX 13 16 1 -2 +BITMAP +2000 +27F8 +2108 +2108 +A908 +AA08 +AA28 +AC10 +A800 +ABF8 +AA08 +BA08 +CA08 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni5CBA +ENCODING 23738 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0280 +0C60 +3018 +C7F6 +0000 +3FFC +0104 +0104 +011C +0100 +ENDCHAR +STARTCHAR uni5CBB +ENCODING 23739 +BBX 15 15 1 -1 +BITMAP +201C +23E0 +2220 +AA20 +AA20 +ABFE +AA20 +AA20 +AA20 +AA10 +AA10 +FBD0 +060A +000A +07F4 +ENDCHAR +STARTCHAR uni5CBC +ENCODING 23740 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +A950 +A948 +AA44 +AC44 +A840 +AFFE +A840 +A840 +F840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5CBD +ENCODING 23741 +BBX 13 16 1 -2 +BITMAP +0200 +4210 +4210 +7FF0 +0400 +0400 +FFF8 +0800 +1200 +2200 +7FF0 +0200 +2220 +4210 +8A08 +0400 +ENDCHAR +STARTCHAR uni5CBE +ENCODING 23742 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +A840 +A87E +A840 +A840 +A840 +ABFC +AA04 +AA04 +FA04 +0204 +0204 +03FC +ENDCHAR +STARTCHAR uni5CBF +ENCODING 23743 +BBX 12 16 1 -2 +BITMAP +0200 +4210 +4210 +7FF0 +0000 +1000 +97F0 +9010 +9010 +9010 +93F0 +9010 +9010 +2010 +27F0 +4010 +ENDCHAR +STARTCHAR uni5CC0 +ENCODING 23744 +BBX 11 16 2 -2 +BITMAP +0400 +8420 +8420 +8420 +FFE0 +0000 +0400 +0400 +FFE0 +8420 +8420 +FFE0 +8420 +8420 +FFE0 +8020 +ENDCHAR +STARTCHAR uni5CC1 +ENCODING 23745 +BBX 13 16 1 -2 +BITMAP +0200 +4210 +4210 +7FF0 +0000 +1800 +E1F8 +8108 +8908 +8908 +B908 +C928 +9110 +1100 +2100 +C100 +ENDCHAR +STARTCHAR uni5CC2 +ENCODING 23746 +BBX 14 16 1 -2 +BITMAP +2080 +2080 +20F8 +2108 +AB10 +ACA0 +A840 +A8A0 +A910 +AE0C +A8C0 +B820 +C810 +0180 +0040 +0020 +ENDCHAR +STARTCHAR uni5CC3 +ENCODING 23747 +BBX 15 16 0 -2 +BITMAP +0208 +2108 +1110 +1020 +0000 +7FFE +4002 +8104 +0100 +2108 +2108 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5CC4 +ENCODING 23748 +BBX 14 16 1 -2 +BITMAP +2000 +27F8 +2208 +2110 +A8A0 +A840 +A9B0 +AE4C +A840 +ABF8 +A840 +B840 +CFFC +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5CC5 +ENCODING 23749 +BBX 15 15 1 -1 +BITMAP +2080 +2088 +2108 +A93C +ABD2 +A890 +A890 +A890 +AFFE +A890 +A890 +F910 +0110 +0210 +0410 +ENDCHAR +STARTCHAR uni5CC6 +ENCODING 23750 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +20A0 +2110 +AA08 +AC04 +ABF8 +A800 +A800 +ABF8 +AA08 +BA08 +CA08 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni5CC7 +ENCODING 23751 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +4104 +7FFC +0100 +0280 +0C60 +3018 +C7E6 +0000 +1FF8 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni5CC8 +ENCODING 23752 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +20F8 +2108 +AB10 +ACA0 +A840 +A8A0 +A918 +AA06 +ADF8 +B908 +C908 +0108 +01F8 +0108 +ENDCHAR +STARTCHAR uni5CC9 +ENCODING 23753 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0200 +07F0 +0810 +7660 +0180 +0E70 +F00E +0FF0 +0810 +0810 +0FF0 +ENDCHAR +STARTCHAR uni5CCA +ENCODING 23754 +BBX 11 16 2 -2 +BITMAP +1000 +2000 +FFC0 +8040 +8040 +FFC0 +8000 +FFE0 +8020 +8020 +FFE0 +0400 +8420 +8420 +FFE0 +0020 +ENDCHAR +STARTCHAR uni5CCB +ENCODING 23755 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +21FE +2202 +AA02 +ADF2 +A912 +A912 +A9F2 +A912 +A912 +F9F2 +0004 +0004 +0038 +ENDCHAR +STARTCHAR uni5CCC +ENCODING 23756 +BBX 14 15 1 -1 +BITMAP +2000 +23FC +2040 +2080 +A910 +AA08 +ABFC +A844 +A840 +A840 +ABFC +B840 +C840 +0040 +07FC +ENDCHAR +STARTCHAR uni5CCD +ENCODING 23757 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +21FC +2024 +ABFE +A824 +A9FC +A820 +A820 +A9FC +A820 +B820 +CBFE +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni5CCE +ENCODING 23758 +BBX 13 16 2 -2 +BITMAP +0400 +8420 +8420 +FFE0 +0000 +FFC0 +8040 +FFC0 +8040 +FFC0 +8820 +8440 +8280 +9100 +A0C0 +C038 +ENDCHAR +STARTCHAR uni5CCF +ENCODING 23759 +BBX 14 16 1 -2 +BITMAP +2000 +27FC +2040 +2040 +A880 +ABF8 +AAA8 +AAA8 +AAA8 +AAA8 +AAA8 +BAA8 +CAA8 +0288 +0228 +0210 +ENDCHAR +STARTCHAR uni5CD0 +ENCODING 23760 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +27FE +A880 +A890 +A910 +AA24 +A944 +A888 +A910 +FA20 +0050 +0188 +0606 +ENDCHAR +STARTCHAR uni5CD1 +ENCODING 23761 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0100 +0280 +0440 +0820 +3018 +CFE6 +0100 +0100 +1FF0 +0100 +0100 +7FFC +ENDCHAR +STARTCHAR uni5CD2 +ENCODING 23762 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2202 +2202 +AAFA +AA02 +AA02 +AAFA +AA8A +AA8A +AA8A +FAFA +0202 +0202 +020E +ENDCHAR +STARTCHAR uni5CD3 +ENCODING 23763 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +27FC +2040 +ABF8 +A848 +ABF8 +AA40 +ABFC +A844 +A854 +B8A8 +C8A0 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni5CD4 +ENCODING 23764 +BBX 14 15 1 -1 +BITMAP +2080 +2080 +2088 +23E8 +A890 +A8A0 +AFFC +A880 +A900 +AB08 +AD30 +B9C0 +C904 +0104 +00FC +ENDCHAR +STARTCHAR uni5CD5 +ENCODING 23765 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0200 +0100 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni5CD6 +ENCODING 23766 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +2020 +23FE +AA02 +AC44 +A840 +ABFE +A888 +A888 +A908 +B8D0 +C820 +0050 +0088 +0304 +ENDCHAR +STARTCHAR uni5CD7 +ENCODING 23767 +BBX 14 16 1 -2 +BITMAP +2080 +2080 +21F8 +2208 +AC10 +ABFC +AA00 +AAF8 +AA88 +AA88 +AAA8 +BA90 +CA84 +0484 +047C +0800 +ENDCHAR +STARTCHAR uni5CD8 +ENCODING 23768 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2000 +2000 +ABF8 +AA08 +AA08 +ABF8 +AA08 +AA08 +ABF8 +BA08 +C800 +0000 +07FC +ENDCHAR +STARTCHAR uni5CD9 +ENCODING 23769 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +A840 +A840 +AFFE +A808 +A808 +AFFE +A808 +A908 +F908 +0088 +0008 +0038 +ENDCHAR +STARTCHAR uni5CDA +ENCODING 23770 +BBX 15 15 0 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +0200 +7FFC +0440 +1830 +E10E +0100 +1FF0 +0100 +0100 +7FFC +ENDCHAR +STARTCHAR uni5CDB +ENCODING 23771 +BBX 14 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0004 +7F84 +0824 +0824 +1F24 +2124 +5124 +0A24 +0404 +0804 +3014 +C008 +ENDCHAR +STARTCHAR uni5CDC +ENCODING 23772 +BBX 15 15 0 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0100 +0280 +0440 +0820 +3118 +C106 +09F0 +0900 +0900 +0900 +7FFC +ENDCHAR +STARTCHAR uni5CDD +ENCODING 23773 +BBX 11 16 2 -2 +BITMAP +0400 +8420 +8420 +FFE0 +0000 +FFE0 +8020 +BFA0 +8020 +9F20 +9120 +9120 +9F20 +8020 +80A0 +8040 +ENDCHAR +STARTCHAR uni5CDE +ENCODING 23774 +BBX 14 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0800 +1FE0 +2020 +5FFC +9000 +17F0 +1410 +1454 +2424 +2404 +43FC +8000 +ENDCHAR +STARTCHAR uni5CDF +ENCODING 23775 +BBX 14 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0400 +0400 +7FFC +0800 +1FF0 +2810 +4FF0 +8810 +0FF0 +0810 +0850 +0820 +ENDCHAR +STARTCHAR uni5CE0 +ENCODING 23776 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +207C +A840 +A840 +AFFE +A800 +AFFE +A840 +A840 +A870 +F84C +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5CE1 +ENCODING 23777 +BBX 15 15 1 -1 +BITMAP +0040 +2040 +23FC +A840 +AA48 +AA48 +A950 +A950 +A840 +AFFE +A840 +F8A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni5CE2 +ENCODING 23778 +BBX 15 16 0 -2 +BITMAP +2002 +2002 +27E2 +210A +A90A +A9EA +A92A +AA2A +AB2A +AAAA +AC4A +B84A +C882 +0102 +020A +0404 +ENDCHAR +STARTCHAR uni5CE3 +ENCODING 23779 +BBX 14 16 1 -2 +BITMAP +2100 +2100 +2178 +2780 +A8A0 +A848 +A9A8 +AE18 +A800 +AFFC +A920 +B920 +CA24 +0224 +041C +0800 +ENDCHAR +STARTCHAR uni5CE4 +ENCODING 23780 +BBX 14 16 1 -2 +BITMAP +2010 +2078 +23C0 +2040 +A840 +AFFC +A8A0 +A910 +AA08 +AD14 +A910 +B910 +C910 +0210 +0210 +0410 +ENDCHAR +STARTCHAR uni5CE5 +ENCODING 23781 +BBX 14 16 1 -2 +BITMAP +2100 +2100 +21F0 +2210 +AC20 +ABF8 +A848 +A848 +ABFC +A848 +A848 +BBF8 +C848 +0040 +0140 +0080 +ENDCHAR +STARTCHAR uni5CE6 +ENCODING 23782 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0440 +1450 +1448 +2444 +4444 +0100 +0100 +2108 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5CE7 +ENCODING 23783 +BBX 14 16 1 -2 +BITMAP +2080 +2040 +2040 +27FC +A800 +A910 +AA08 +AC04 +A910 +A910 +A8A0 +B8A0 +C840 +00A0 +0110 +060C +ENDCHAR +STARTCHAR uni5CE8 +ENCODING 23784 +BBX 15 15 1 -1 +BITMAP +00A0 +2128 +2724 +2120 +A920 +AFFE +A920 +A924 +A924 +A9A8 +AF28 +A910 +F912 +012A +0344 +ENDCHAR +STARTCHAR uni5CE9 +ENCODING 23785 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +4104 +7FFC +0000 +0C88 +7084 +1080 +FFFE +1048 +1650 +3820 +D052 +118A +3604 +ENDCHAR +STARTCHAR uni5CEA +ENCODING 23786 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2208 +AA04 +A840 +A8A0 +A910 +AA08 +AC06 +ABF8 +AA08 +FA08 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uni5CEB +ENCODING 23787 +BBX 15 16 0 -2 +BITMAP +2000 +27DE +2092 +2292 +AA94 +AA94 +ABD8 +A894 +A992 +A992 +AA92 +BA9A +CC94 +0890 +0290 +0110 +ENDCHAR +STARTCHAR uni5CEC +ENCODING 23788 +BBX 14 16 1 -2 +BITMAP +2050 +2048 +27FC +2040 +A840 +ABF8 +AA48 +AA48 +ABF8 +AA48 +AA48 +BBF8 +CA48 +0248 +0248 +0218 +ENDCHAR +STARTCHAR uni5CED +ENCODING 23789 +BBX 15 15 1 -1 +BITMAP +2020 +20A8 +2124 +AA22 +A9FC +A904 +A904 +A9FC +A904 +A904 +A9FC +F904 +0104 +0104 +011C +ENDCHAR +STARTCHAR uni5CEE +ENCODING 23790 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2088 +2088 +AFFE +A888 +A888 +ABF8 +A900 +A900 +ABF8 +BD08 +C908 +0108 +01F8 +0108 +ENDCHAR +STARTCHAR uni5CEF +ENCODING 23791 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +3FF8 +0200 +07E0 +7A40 +0180 +0E60 +F11E +1FF0 +0100 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni5CF0 +ENCODING 23792 +BBX 15 15 1 -1 +BITMAP +0080 +21F8 +2710 +A8A0 +A840 +A9B0 +AE4E +ABF8 +A840 +ABF8 +A840 +F840 +07FC +0040 +0040 +ENDCHAR +STARTCHAR uni5CF1 +ENCODING 23793 +BBX 15 15 0 -2 +BITMAP +45FC +2824 +1024 +29FC +4844 +8844 +0BFE +1800 +2820 +4820 +8924 +0924 +0924 +51FC +2004 +ENDCHAR +STARTCHAR uni5CF2 +ENCODING 23794 +BBX 13 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +0608 +7808 +0848 +0848 +FF48 +1C48 +2A48 +4948 +8808 +0828 +0810 +ENDCHAR +STARTCHAR uni5CF3 +ENCODING 23795 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +1040 +1040 +247E +2488 +6488 +A548 +2450 +2420 +2050 +2088 +2306 +ENDCHAR +STARTCHAR uni5CF4 +ENCODING 23796 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +21F8 +A908 +A908 +A9F8 +A908 +A908 +A9F8 +A8A0 +F8A0 +0122 +0222 +0C1E +ENDCHAR +STARTCHAR uni5CF5 +ENCODING 23797 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2202 +AC44 +A840 +ABFE +A840 +A890 +A890 +A910 +B920 +CA24 +0242 +04FE +0842 +ENDCHAR +STARTCHAR uni5CF6 +ENCODING 23798 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +3FF0 +2010 +3FF0 +2010 +3FF0 +2000 +3FFE +2000 +3FFC +0404 +8424 +FFE4 +0018 +ENDCHAR +STARTCHAR uni5CF7 +ENCODING 23799 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0200 +0100 +3FF8 +0820 +0440 +FFFE +0100 +0100 +7FFC +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5CF8 +ENCODING 23800 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +2024 +2020 +ABFE +AA20 +AA24 +AA24 +ABA4 +AAA8 +AAA8 +BA90 +CA92 +05AA +0446 +0882 +ENDCHAR +STARTCHAR uni5CF9 +ENCODING 23801 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0C60 +3018 +CFE6 +0100 +3FF8 +0100 +1110 +2508 +0200 +0100 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5CFA +ENCODING 23802 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2040 +ABFC +AA44 +AA44 +ABFC +AA44 +AA44 +ABFC +A940 +F8C0 +00E0 +0118 +0E06 +ENDCHAR +STARTCHAR uni5CFB +ENCODING 23803 +BBX 15 15 1 -1 +BITMAP +0080 +2090 +2138 +27E4 +A8A0 +A920 +AE3E +A880 +A8FC +A908 +AB08 +AC90 +F860 +0198 +0606 +ENDCHAR +STARTCHAR uni5CFC +ENCODING 23804 +BBX 14 16 1 -2 +BITMAP +2040 +2240 +2240 +23F8 +AA40 +AC40 +A840 +AFFC +A800 +A800 +ABF8 +BA08 +CA08 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni5CFD +ENCODING 23805 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +27FE +A820 +A924 +A924 +A924 +AAAA +AAAA +AC50 +A850 +F888 +0088 +0104 +0602 +ENDCHAR +STARTCHAR uni5CFE +ENCODING 23806 +BBX 15 16 0 -2 +BITMAP +200C +11F0 +8100 +4900 +09FE +1110 +E110 +2210 +2210 +2510 +0100 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5CFF +ENCODING 23807 +BBX 14 16 1 -2 +BITMAP +2000 +27FC +2080 +2080 +ABF8 +A908 +A908 +AFFC +A800 +A800 +ABF8 +BA08 +CA08 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni5D00 +ENCODING 23808 +BBX 13 16 2 -2 +BITMAP +0400 +8420 +8420 +FFE0 +0800 +0400 +7FC0 +4040 +7FC0 +4040 +7FC0 +4420 +4240 +4980 +5060 +6018 +ENDCHAR +STARTCHAR uni5D01 +ENCODING 23809 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +1080 +1080 +10FC +7D04 +1248 +1040 +1040 +1CA0 +E0A0 +4110 +0208 +0C06 +ENDCHAR +STARTCHAR uni5D02 +ENCODING 23810 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +23FE +2088 +A800 +ABFE +AA02 +AC44 +A840 +ABFC +A844 +B884 +C884 +0104 +0228 +0410 +ENDCHAR +STARTCHAR uni5D03 +ENCODING 23811 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +2040 +27FC +A840 +AA48 +A948 +A950 +AFFE +A8E0 +A950 +B950 +CA48 +0444 +0842 +0040 +ENDCHAR +STARTCHAR uni5D04 +ENCODING 23812 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +20A0 +20A0 +A910 +AA08 +ADF4 +A800 +A888 +A848 +AA48 +B950 +C910 +0020 +07FC +ENDCHAR +STARTCHAR uni5D05 +ENCODING 23813 +BBX 14 16 1 -2 +BITMAP +2080 +2080 +20F8 +2108 +AA10 +ADFC +A924 +A924 +A9FC +A924 +A924 +B9FC +C924 +0224 +0214 +0408 +ENDCHAR +STARTCHAR uni5D06 +ENCODING 23814 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +2202 +AA92 +A890 +A910 +AA0E +A800 +A9FC +A820 +F820 +0020 +0020 +03FE +ENDCHAR +STARTCHAR uni5D07 +ENCODING 23815 +BBX 13 15 2 -1 +BITMAP +0200 +4210 +4210 +7FF0 +0200 +FFF8 +8008 +9FC8 +0000 +FFF8 +0200 +2220 +4210 +8208 +0E00 +ENDCHAR +STARTCHAR uni5D08 +ENCODING 23816 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +9FF4 +0000 +7FFC +1110 +2108 +4504 +0200 +0100 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5D09 +ENCODING 23817 +BBX 14 16 1 -2 +BITMAP +2040 +2044 +2768 +2150 +A950 +AA48 +AD44 +A880 +ABF8 +AA08 +AA08 +BBF8 +CA08 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni5D0A +ENCODING 23818 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +2088 +2088 +ABDE +A888 +A888 +A99C +A9DC +AAAA +AAAA +BCC8 +C888 +0088 +0088 +0088 +ENDCHAR +STARTCHAR uni5D0B +ENCODING 23819 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +7FFC +0000 +7FFC +1110 +1110 +FFFE +1110 +1110 +7FFC +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni5D0C +ENCODING 23820 +BBX 14 16 1 -2 +BITMAP +2000 +23FC +2204 +2204 +ABFC +AA20 +AA20 +ABFC +AA20 +AA20 +AAFC +BA84 +CA84 +0484 +04FC +0884 +ENDCHAR +STARTCHAR uni5D0D +ENCODING 23821 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2040 +AA48 +AA48 +AA48 +AD54 +A8E2 +A8E0 +A950 +FA48 +0C46 +0040 +0040 +ENDCHAR +STARTCHAR uni5D0E +ENCODING 23822 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +23FE +2050 +A888 +AB06 +A800 +AFFE +A804 +A9E4 +A924 +F924 +01E4 +0004 +001C +ENDCHAR +STARTCHAR uni5D0F +ENCODING 23823 +BBX 15 16 0 -2 +BITMAP +201C +23E0 +2220 +23FE +AA20 +AA92 +AB0A +AA06 +A9FC +A904 +A904 +B9FC +C904 +0104 +01FC +0104 +ENDCHAR +STARTCHAR uni5D10 +ENCODING 23824 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +AA08 +AA08 +ABF8 +A800 +AA20 +AA24 +ABB8 +FA20 +0222 +03A2 +0E1E +ENDCHAR +STARTCHAR uni5D11 +ENCODING 23825 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +4104 +7FFC +0000 +3FF0 +2010 +3FF0 +2010 +3FF0 +2088 +3EF0 +2080 +3E82 +E07E +ENDCHAR +STARTCHAR uni5D12 +ENCODING 23826 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0200 +0100 +7FFC +0820 +1450 +2288 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5D13 +ENCODING 23827 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2222 +2222 +ABFE +AA22 +AA22 +AAFA +AA8A +AA8A +AA8A +BAFA +CA8A +0202 +03FE +0202 +ENDCHAR +STARTCHAR uni5D14 +ENCODING 23828 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +4104 +7FFC +1080 +1080 +3FFC +6100 +BFF8 +2100 +2100 +3FF8 +2100 +2100 +3FFE +ENDCHAR +STARTCHAR uni5D15 +ENCODING 23829 +BBX 15 14 1 -1 +BITMAP +21FE +2100 +2110 +A97C +A910 +A910 +A9FE +A900 +A910 +A97C +FA10 +0210 +0210 +00FE +ENDCHAR +STARTCHAR uni5D16 +ENCODING 23830 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +3FFC +2080 +27F0 +2080 +3FFC +2080 +47F0 +4080 +8080 +3FFE +ENDCHAR +STARTCHAR uni5D17 +ENCODING 23831 +BBX 13 15 2 -1 +BITMAP +0200 +8208 +8208 +FFF8 +0000 +FFF8 +9048 +8888 +BFE8 +8208 +9248 +9248 +9FC8 +8008 +8038 +ENDCHAR +STARTCHAR uni5D18 +ENCODING 23832 +BBX 15 15 1 -1 +BITMAP +2060 +2090 +2108 +AE06 +A8F0 +A800 +A800 +ABFC +AAA4 +AAA4 +ABFC +FAA4 +02A4 +02A4 +02AC +ENDCHAR +STARTCHAR uni5D19 +ENCODING 23833 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +4104 +7FFC +0100 +06C0 +1830 +E7CE +0000 +3FFC +2444 +3FFC +2444 +2444 +245C +ENDCHAR +STARTCHAR uni5D1A +ENCODING 23834 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FC +A820 +AFFE +A890 +A910 +AA5E +A840 +A8F8 +A908 +FA90 +0060 +0198 +0606 +ENDCHAR +STARTCHAR uni5D1B +ENCODING 23835 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +AA04 +ABFC +AA20 +AAA4 +AAA4 +AAA4 +AAFC +AA20 +AB22 +FD22 +0522 +01FE +ENDCHAR +STARTCHAR uni5D1C +ENCODING 23836 +BBX 15 15 0 -1 +BITMAP +2008 +203C +21E0 +2020 +ABFE +A8A8 +A8A8 +A8A8 +ABFE +A8A8 +A8A8 +BBFE +C820 +0020 +01FC +ENDCHAR +STARTCHAR uni5D1D +ENCODING 23837 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2040 +ABFC +A840 +AFFE +A800 +ABFC +AA44 +AA44 +FBFC +0204 +0204 +021C +ENDCHAR +STARTCHAR uni5D1E +ENCODING 23838 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2000 +A9FC +A904 +A9FC +A800 +A9FC +A808 +A810 +BBFE +C820 +0020 +00A0 +0040 +ENDCHAR +STARTCHAR uni5D1F +ENCODING 23839 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +4104 +7FFC +0100 +0280 +0440 +1830 +E7CE +0100 +3FF8 +0100 +0920 +0540 +FFFE +ENDCHAR +STARTCHAR uni5D20 +ENCODING 23840 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2040 +ABFC +AA44 +ABFC +AA44 +AA44 +ABFC +A950 +FA48 +0444 +0842 +0040 +ENDCHAR +STARTCHAR uni5D21 +ENCODING 23841 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2008 +2010 +AA22 +AAAA +AA72 +AA22 +AA72 +AAAA +AB26 +BAA2 +CA42 +0202 +03FE +0002 +ENDCHAR +STARTCHAR uni5D22 +ENCODING 23842 +BBX 15 15 1 -1 +BITMAP +2038 +23C8 +2244 +AC22 +ABFC +A844 +A844 +AFFE +A844 +A844 +ABFC +F840 +0040 +0040 +01C0 +ENDCHAR +STARTCHAR uni5D23 +ENCODING 23843 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0070 +1F80 +0100 +7FFC +0540 +1930 +E10E +0400 +7FFC +0820 +1C40 +0380 +7C78 +ENDCHAR +STARTCHAR uni5D24 +ENCODING 23844 +BBX 15 15 1 -1 +BITMAP +2004 +2318 +20E0 +2718 +A880 +AFFE +A880 +A9FC +AB04 +ADFC +A904 +F9FC +0104 +0104 +010C +ENDCHAR +STARTCHAR uni5D25 +ENCODING 23845 +BBX 14 16 1 -2 +BITMAP +2080 +2100 +23F8 +2248 +AA48 +ABF8 +AA48 +AA88 +ABF8 +A920 +AA20 +BFFC +C820 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni5D26 +ENCODING 23846 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2150 +AA48 +AFFC +AA4A +AA48 +ABF8 +AA48 +AA48 +FBF8 +0042 +0042 +003E +ENDCHAR +STARTCHAR uni5D27 +ENCODING 23847 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +4104 +7FFC +1000 +10B8 +FC88 +1104 +3144 +3A42 +5450 +9088 +1088 +10F4 +1382 +ENDCHAR +STARTCHAR uni5D28 +ENCODING 23848 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +27FC +2040 +ABF8 +A848 +AFFC +A848 +ABF8 +A840 +AA40 +BA7C +CA40 +0540 +04FC +0800 +ENDCHAR +STARTCHAR uni5D29 +ENCODING 23849 +BBX 14 15 1 -1 +BITMAP +0100 +4104 +7FFC +0000 +3E7C +2244 +2244 +3E7C +2244 +2244 +3E7C +2244 +4284 +4284 +8F1C +ENDCHAR +STARTCHAR uni5D2A +ENCODING 23850 +BBX 14 16 1 -2 +BITMAP +2080 +2040 +27FC +2000 +A910 +A910 +AAA8 +AC44 +A800 +A840 +AFFC +B840 +C840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5D2B +ENCODING 23851 +BBX 14 15 1 -1 +BITMAP +0100 +2104 +3FFC +0000 +3FFC +2004 +3FFC +2080 +2488 +2488 +27F8 +4080 +4884 +8884 +0FFC +ENDCHAR +STARTCHAR uni5D2C +ENCODING 23852 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0100 +FFFE +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0380 +0D60 +3118 +C106 +ENDCHAR +STARTCHAR uni5D2D +ENCODING 23853 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +1000 +100C +FEF0 +2080 +4880 +7EFE +0888 +0E88 +F888 +4908 +0908 +0A08 +ENDCHAR +STARTCHAR uni5D2E +ENCODING 23854 +BBX 11 16 2 -2 +BITMAP +0400 +8420 +8420 +FFE0 +0000 +FFE0 +8420 +8420 +BFA0 +8420 +9F20 +9120 +9F20 +8020 +FFE0 +8020 +ENDCHAR +STARTCHAR uni5D2F +ENCODING 23855 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +20A0 +2110 +AA08 +AC04 +A9F0 +A840 +A840 +ABF8 +A840 +BA48 +C948 +0150 +07FC +ENDCHAR +STARTCHAR uni5D30 +ENCODING 23856 +BBX 14 16 1 -2 +BITMAP +2124 +2124 +2248 +2490 +AA48 +A924 +A924 +A800 +ABFC +AA44 +AA44 +BBFC +CA44 +0244 +03FC +0204 +ENDCHAR +STARTCHAR uni5D31 +ENCODING 23857 +BBX 14 15 1 -1 +BITMAP +0200 +8204 +8204 +FFFC +0000 +7E04 +4244 +7E44 +4244 +7E44 +4244 +4244 +7E04 +2404 +C31C +ENDCHAR +STARTCHAR uni5D32 +ENCODING 23858 +BBX 14 15 1 -1 +BITMAP +2040 +2080 +23F8 +2208 +ABF8 +AA08 +ABF8 +A800 +AFFC +A840 +A840 +BBF8 +C840 +0040 +07FC +ENDCHAR +STARTCHAR uni5D33 +ENCODING 23859 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2110 +2208 +ADF6 +A800 +ABC4 +AA54 +AA54 +ABD4 +AA54 +BA54 +CBD4 +0244 +0254 +02C8 +ENDCHAR +STARTCHAR uni5D34 +ENCODING 23860 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0028 +0024 +3FFE +2020 +2FA4 +2224 +2FA8 +2498 +2D12 +422A +4546 +8882 +ENDCHAR +STARTCHAR uni5D35 +ENCODING 23861 +BBX 14 16 1 -2 +BITMAP +2000 +21F8 +2108 +21F8 +A908 +A9F8 +A800 +ABFC +A900 +A9FC +AA54 +BC94 +C924 +0244 +00A8 +0110 +ENDCHAR +STARTCHAR uni5D36 +ENCODING 23862 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0800 +0808 +7F08 +08FE +FF08 +0848 +0828 +7F28 +0808 +0F08 +F028 +4010 +ENDCHAR +STARTCHAR uni5D37 +ENCODING 23863 +BBX 14 16 1 -2 +BITMAP +2110 +2090 +20A0 +27FC +A8A0 +A8A0 +ABF8 +AAA8 +AAA8 +AB18 +AA08 +BBF8 +CA08 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni5D38 +ENCODING 23864 +BBX 14 16 1 -2 +BITMAP +2000 +27FC +2040 +2080 +ABF8 +AA08 +AA08 +ABF8 +AA08 +ABF8 +AA08 +BA08 +CBF8 +0000 +0110 +0208 +ENDCHAR +STARTCHAR uni5D39 +ENCODING 23865 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +2088 +A848 +A850 +ABFE +AA22 +AA22 +A9FC +A924 +F924 +0124 +012C +0020 +ENDCHAR +STARTCHAR uni5D3A +ENCODING 23866 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +2040 +1040 +FEFE +2120 +20AC +3CB4 +25E4 +24AC +24A0 +44A2 +5482 +887E +ENDCHAR +STARTCHAR uni5D3B +ENCODING 23867 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +2210 +247C +A910 +A910 +AAFE +AE08 +AA08 +AAFE +AA08 +BA48 +CA28 +0208 +0228 +0210 +ENDCHAR +STARTCHAR uni5D3C +ENCODING 23868 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2208 +2208 +ABF8 +AA08 +AA08 +ABF8 +A800 +AFFC +A840 +BA40 +CA78 +0240 +0540 +08FC +ENDCHAR +STARTCHAR uni5D3D +ENCODING 23869 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni5D3E +ENCODING 23870 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2050 +2050 +ABFE +AA52 +AA52 +ABFE +A800 +A840 +AFFE +B888 +C990 +0060 +00D8 +0304 +ENDCHAR +STARTCHAR uni5D3F +ENCODING 23871 +BBX 14 16 1 -2 +BITMAP +2000 +23B8 +22A8 +22A8 +ABB8 +A800 +ABF8 +A800 +AFFC +A900 +A9F8 +B808 +C808 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni5D40 +ENCODING 23872 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +0840 +0820 +7EFC +0820 +1820 +1CFC +2A20 +2A20 +4820 +89FE +0800 +ENDCHAR +STARTCHAR uni5D41 +ENCODING 23873 +BBX 14 15 1 -1 +BITMAP +2110 +2110 +27FC +2110 +A9F0 +A910 +A9F0 +A910 +A910 +AFFC +AA00 +BA90 +CB08 +0200 +03FC +ENDCHAR +STARTCHAR uni5D42 +ENCODING 23874 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +7FFC +1040 +23FC +4044 +87FE +1044 +23FC +6040 +A3FC +2040 +27FE +2040 +2040 +ENDCHAR +STARTCHAR uni5D43 +ENCODING 23875 +BBX 14 16 1 -2 +BITMAP +2040 +2020 +23FC +2000 +A908 +A890 +ABFC +AA10 +AA20 +AAC8 +AA10 +BA24 +CAC8 +0410 +0460 +0980 +ENDCHAR +STARTCHAR uni5D44 +ENCODING 23876 +BBX 15 16 0 -2 +BITMAP +2104 +2088 +23FE +2020 +A820 +A9FC +A820 +A820 +ABFE +A800 +A820 +BBFE +C820 +0050 +0088 +0306 +ENDCHAR +STARTCHAR uni5D45 +ENCODING 23877 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0028 +0024 +3FFE +2020 +2FA4 +2024 +2FA8 +2898 +2892 +4FAA +4046 +8082 +ENDCHAR +STARTCHAR uni5D46 +ENCODING 23878 +BBX 15 15 1 -1 +BITMAP +062C +3822 +0820 +FEFE +0820 +1C30 +1A50 +2852 +4892 +090E +0100 +2108 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni5D47 +ENCODING 23879 +BBX 15 15 1 -1 +BITMAP +0458 +1844 +F040 +13FE +1040 +FC60 +10A0 +10A2 +3922 +361E +5420 +5020 +9222 +1222 +13FE +ENDCHAR +STARTCHAR uni5D48 +ENCODING 23880 +BBX 15 16 0 -2 +BITMAP +203C +27C0 +2244 +2128 +A800 +ABFC +A880 +A880 +AFFE +A900 +A9F8 +BA88 +CA50 +0420 +08D8 +0306 +ENDCHAR +STARTCHAR uni5D49 +ENCODING 23881 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2000 +A9FC +A904 +A9FC +A800 +ABFE +AA02 +A9FC +B820 +C820 +0020 +00A0 +0040 +ENDCHAR +STARTCHAR uni5D4A +ENCODING 23882 +BBX 15 15 1 -1 +BITMAP +2030 +23C0 +2040 +27FE +A950 +AF5C +A950 +AF54 +A95C +A8E0 +A950 +FA48 +0C46 +0040 +0040 +ENDCHAR +STARTCHAR uni5D4B +ENCODING 23883 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2222 +AA22 +ABFE +AA00 +AAFC +AA84 +AAFC +AA84 +AA84 +FAFC +0484 +0484 +00FC +ENDCHAR +STARTCHAR uni5D4C +ENCODING 23884 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +4104 +7FFC +0040 +4440 +447C +FE84 +4528 +4420 +7C20 +4450 +4450 +4488 +7D06 +ENDCHAR +STARTCHAR uni5D4D +ENCODING 23885 +BBX 15 16 0 -2 +BITMAP +0040 +7F40 +127E +0C88 +FF48 +1948 +2A50 +4820 +A850 +118C +0100 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5D4E +ENCODING 23886 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2124 +A9FC +A924 +A924 +A9FC +A820 +ABFE +AA22 +AA2A +FA3A +02E6 +0202 +020E +ENDCHAR +STARTCHAR uni5D4F +ENCODING 23887 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0000 +2448 +2388 +2448 +3FF8 +1010 +2208 +47E4 +0820 +1440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni5D50 +ENCODING 23888 +BBX 15 15 1 -1 +BITMAP +0200 +2210 +3FF0 +0000 +3FF0 +2090 +2F10 +2210 +2FD0 +2A50 +2A50 +2FD0 +424A +43AA +9E14 +ENDCHAR +STARTCHAR uni5D51 +ENCODING 23889 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2208 +23F8 +AA08 +ABF8 +A900 +ABFC +AC44 +AA44 +AAA4 +BA04 +CBF4 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni5D52 +ENCODING 23890 +BBX 13 14 2 -1 +BITMAP +1FC0 +1040 +1040 +1FC0 +0000 +F8F8 +8888 +8888 +F8F8 +0200 +0200 +8208 +8208 +FFF8 +ENDCHAR +STARTCHAR uni5D53 +ENCODING 23891 +BBX 13 15 2 -1 +BITMAP +0200 +8208 +8208 +FFF8 +0000 +1FC0 +1040 +1040 +1FC0 +0000 +FDF8 +8508 +8508 +8508 +FDF8 +ENDCHAR +STARTCHAR uni5D54 +ENCODING 23892 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0000 +1FF0 +1110 +1FF0 +1110 +1FF0 +0000 +FFFE +1110 +10A0 +1440 +1830 +100E +ENDCHAR +STARTCHAR uni5D55 +ENCODING 23893 +BBX 15 16 0 -2 +BITMAP +2000 +2088 +2252 +2222 +AA52 +AA8A +AA02 +ABFE +A888 +A944 +AA7A +B888 +C950 +0020 +00D8 +0706 +ENDCHAR +STARTCHAR uni5D56 +ENCODING 23894 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +27FC +20E0 +A950 +AA48 +AC44 +ABF8 +AA08 +ABF8 +AA08 +BBF8 +CA08 +0000 +07FC +ENDCHAR +STARTCHAR uni5D57 +ENCODING 23895 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0048 +0044 +3FFE +2040 +2F44 +2244 +2A28 +2AA8 +3112 +422A +44C6 +9B02 +ENDCHAR +STARTCHAR uni5D58 +ENCODING 23896 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +23FE +2088 +A800 +ABFE +AA02 +AC24 +A820 +ABFE +A870 +B8A8 +C8A8 +0124 +0222 +0020 +ENDCHAR +STARTCHAR uni5D59 +ENCODING 23897 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +0C10 +7090 +1050 +FC90 +3050 +381E +55F0 +5010 +9010 +1010 +1010 +ENDCHAR +STARTCHAR uni5D5A +ENCODING 23898 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +1040 +1040 +3E7C +4084 +BD28 +1020 +1020 +FE50 +1050 +1488 +1904 +1202 +ENDCHAR +STARTCHAR uni5D5B +ENCODING 23899 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0280 +0C60 +37D8 +C006 +3E08 +2248 +3E48 +2248 +3E48 +2208 +2228 +2610 +ENDCHAR +STARTCHAR uni5D5C +ENCODING 23900 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0100 +7FFC +0810 +0420 +FFFE +0008 +1F88 +1088 +1088 +1F88 +0038 +ENDCHAR +STARTCHAR uni5D5D +ENCODING 23901 +BBX 15 16 0 -2 +BITMAP +2020 +2124 +20A8 +2020 +ABFE +A8A8 +A924 +AA02 +A840 +AFFE +A888 +B908 +C990 +0060 +0198 +0604 +ENDCHAR +STARTCHAR uni5D5E +ENCODING 23902 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0C60 +3018 +CFE6 +0100 +3FF8 +0100 +1110 +2508 +0200 +1010 +9292 +9292 +FEFE +0202 +ENDCHAR +STARTCHAR uni5D5F +ENCODING 23903 +BBX 14 16 0 -2 +BITMAP +0100 +4104 +7FFC +0000 +3FFC +2280 +2240 +27FC +2C40 +37F8 +2440 +27F8 +2440 +4440 +47FC +8400 +ENDCHAR +STARTCHAR uni5D60 +ENCODING 23904 +BBX 14 16 1 -2 +BITMAP +203C +27C0 +2244 +2128 +A880 +A910 +ABE0 +A840 +A988 +ABFC +A844 +B840 +C7FC +00A0 +0110 +060C +ENDCHAR +STARTCHAR uni5D61 +ENCODING 23905 +BBX 14 15 2 -1 +BITMAP +0200 +8208 +FFF8 +0980 +3060 +C49C +09C0 +3E20 +0000 +FDF8 +2448 +CD98 +3468 +C588 +0C18 +ENDCHAR +STARTCHAR uni5D62 +ENCODING 23906 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +20A0 +2090 +A948 +ABFC +AD08 +A9F8 +A908 +A9F8 +A900 +B9F8 +CA88 +0288 +04F8 +0088 +ENDCHAR +STARTCHAR uni5D63 +ENCODING 23907 +BBX 14 16 1 -2 +BITMAP +2040 +2020 +23FC +2220 +AAF8 +AA28 +ABFC +AA28 +AAF8 +AA20 +AAF8 +BA88 +CA88 +0488 +04F8 +0888 +ENDCHAR +STARTCHAR uni5D64 +ENCODING 23908 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +2CA8 +4920 +1450 +2288 +7FFE +4002 +8104 +0100 +2108 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5D65 +ENCODING 23909 +BBX 15 16 0 -2 +BITMAP +2104 +2104 +21DE +2244 +AD54 +A89E +A904 +AA24 +AC24 +ABFE +A870 +B8A8 +C924 +0622 +0020 +0020 +ENDCHAR +STARTCHAR uni5D66 +ENCODING 23910 +BBX 14 15 1 -1 +BITMAP +2040 +2248 +2248 +2248 +ABF8 +A800 +AFFC +A800 +ABF8 +AA08 +AA08 +BBF8 +C910 +00A0 +07FC +ENDCHAR +STARTCHAR uni5D67 +ENCODING 23911 +BBX 15 16 0 -2 +BITMAP +2040 +23BE +2212 +2292 +AA52 +AAAA +AB24 +A840 +ABFE +AA22 +AA22 +BBFE +CA22 +0222 +03FE +0202 +ENDCHAR +STARTCHAR uni5D68 +ENCODING 23912 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +21FC +2104 +A904 +A9FC +A900 +A9FE +A900 +A9FE +A802 +BAAA +CAAA +0402 +0014 +0008 +ENDCHAR +STARTCHAR uni5D69 +ENCODING 23913 +BBX 13 15 2 -1 +BITMAP +0200 +4210 +7FF0 +0200 +FFF8 +0000 +1FC0 +1040 +1FC0 +0000 +FFF8 +8008 +9FC8 +9048 +9FD8 +ENDCHAR +STARTCHAR uni5D6A +ENCODING 23914 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +2000 +A8F8 +A888 +A8F8 +A800 +ABFE +AA02 +AAFA +FA8A +02FA +0202 +020E +ENDCHAR +STARTCHAR uni5D6B +ENCODING 23915 +BBX 15 16 0 -2 +BITMAP +2084 +2044 +2048 +23FE +A884 +A884 +A908 +A94A +AA52 +AB9C +A884 +B908 +C908 +0252 +03DE +0042 +ENDCHAR +STARTCHAR uni5D6C +ENCODING 23916 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +4104 +7FFC +0400 +3FF0 +2210 +3FF0 +2210 +2210 +3FF0 +0494 +08BC +3082 +C07E +ENDCHAR +STARTCHAR uni5D6D +ENCODING 23917 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2208 +A910 +AFFE +A842 +A840 +AFFE +A880 +A8FC +F904 +0104 +0204 +0438 +ENDCHAR +STARTCHAR uni5D6E +ENCODING 23918 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +27FC +2040 +ABF8 +AA08 +ABF8 +AA08 +ABF8 +AA08 +ABF8 +BA08 +C7FC +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni5D6F +ENCODING 23919 +BBX 15 15 1 -1 +BITMAP +0104 +2088 +23FE +A820 +A820 +A9FC +A820 +A820 +AFFE +A880 +A9FC +FA20 +0C20 +0020 +03FE +ENDCHAR +STARTCHAR uni5D70 +ENCODING 23920 +BBX 15 15 1 -1 +BITMAP +2048 +2090 +27FE +2090 +ABFC +A894 +AFFE +A894 +A894 +ABFC +A890 +F998 +0294 +0492 +0090 +ENDCHAR +STARTCHAR uni5D71 +ENCODING 23921 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2202 +AC94 +A908 +AA64 +A890 +A908 +AA04 +ADFA +B908 +C908 +0108 +01F8 +0108 +ENDCHAR +STARTCHAR uni5D72 +ENCODING 23922 +BBX 14 16 1 -2 +BITMAP +2040 +2080 +23F8 +2208 +ABF8 +AA08 +ABF8 +AA08 +ABF8 +A840 +AFFC +B8E0 +C950 +0248 +0444 +0040 +ENDCHAR +STARTCHAR uni5D73 +ENCODING 23923 +BBX 13 15 2 -1 +BITMAP +0200 +4210 +4210 +7FF0 +0880 +7FF0 +0200 +3FE0 +0200 +FFF8 +0800 +1FF0 +2100 +C100 +1FF8 +ENDCHAR +STARTCHAR uni5D74 +ENCODING 23924 +BBX 15 16 0 -2 +BITMAP +2040 +2248 +2150 +2248 +ACA4 +A918 +AE06 +ABF8 +AA08 +ABF8 +AA08 +BBF8 +CA08 +0208 +0228 +0210 +ENDCHAR +STARTCHAR uni5D75 +ENCODING 23925 +BBX 14 16 1 -2 +BITMAP +0200 +4210 +4210 +7FF0 +0080 +F080 +97F8 +9080 +9FFC +F020 +9FFC +9020 +9420 +F220 +90A0 +0040 +ENDCHAR +STARTCHAR uni5D76 +ENCODING 23926 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2042 +A842 +ABDE +AA10 +AA10 +ABDE +AA52 +A94A +A8C6 +F94A +0652 +0042 +018C +ENDCHAR +STARTCHAR uni5D77 +ENCODING 23927 +BBX 15 16 0 -2 +BITMAP +2124 +2124 +2224 +2424 +A954 +A94A +AA92 +AE10 +AA10 +AA50 +AA5C +BA50 +CA50 +02B0 +029E +0300 +ENDCHAR +STARTCHAR uni5D78 +ENCODING 23928 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +1110 +2110 +4110 +8AA8 +1444 +3040 +5240 +927C +1240 +1540 +14FE +1800 +ENDCHAR +STARTCHAR uni5D79 +ENCODING 23929 +BBX 14 16 1 -2 +BITMAP +0200 +8208 +FFF8 +0000 +F9F0 +0910 +09F0 +F840 +83F8 +8248 +FA48 +0BF8 +0840 +0848 +57FC +2004 +ENDCHAR +STARTCHAR uni5D7A +ENCODING 23930 +BBX 15 16 0 -2 +BITMAP +2000 +27BC +2084 +24A4 +AA94 +ACA4 +A850 +A988 +AE26 +A8C0 +AB10 +B864 +CB88 +0030 +00C0 +0700 +ENDCHAR +STARTCHAR uni5D7B +ENCODING 23931 +BBX 14 16 1 -2 +BITMAP +2040 +2020 +23FC +2220 +AAF8 +AA28 +ABFC +AA28 +AAF8 +AA20 +AB24 +BAA8 +CA70 +04A8 +0524 +0860 +ENDCHAR +STARTCHAR uni5D7C +ENCODING 23932 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FC +2000 +A908 +A890 +ABFE +AA20 +AAA0 +AAFC +AB20 +BA20 +CAFC +0420 +0420 +09FE +ENDCHAR +STARTCHAR uni5D7D +ENCODING 23933 +BBX 15 16 0 -2 +BITMAP +2154 +2154 +23FE +2154 +A954 +AA72 +AC00 +ABFE +AA22 +A820 +A9FC +B924 +C924 +0124 +012C +0020 +ENDCHAR +STARTCHAR uni5D7E +ENCODING 23934 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0820 +1FF0 +1020 +2548 +7EFC +0440 +1930 +E64E +1990 +0620 +18C0 +0700 +3800 +ENDCHAR +STARTCHAR uni5D7F +ENCODING 23935 +BBX 14 16 0 -2 +BITMAP +0100 +4104 +7FFC +0000 +0000 +FDFC +1040 +11F8 +1108 +11F8 +1108 +11F8 +1108 +11F8 +5090 +2108 +ENDCHAR +STARTCHAR uni5D80 +ENCODING 23936 +BBX 14 16 1 -2 +BITMAP +23F8 +2040 +27FC +2444 +AB58 +A840 +AB58 +A800 +ABF8 +A800 +AFFC +B900 +C9F8 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni5D81 +ENCODING 23937 +BBX 15 15 1 -1 +BITMAP +2040 +23F8 +2248 +2FFE +2248 +ABF8 +A840 +ABF8 +AA48 +ABF8 +A880 +FFFE +0108 +01F0 +0F1E +ENDCHAR +STARTCHAR uni5D82 +ENCODING 23938 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +A908 +AFFE +A800 +ABF8 +AA08 +ABF8 +AA08 +FBF8 +0040 +0FFE +0040 +0040 +ENDCHAR +STARTCHAR uni5D83 +ENCODING 23939 +BBX 15 16 0 -2 +BITMAP +2200 +2202 +223C +2FA0 +AA20 +AFA0 +AABE +AFA4 +AAA4 +AFA4 +AA24 +BFA4 +CA24 +0244 +0244 +0284 +ENDCHAR +STARTCHAR uni5D84 +ENCODING 23940 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +7FFC +0800 +FF86 +0878 +7F40 +497E +7F48 +4948 +7F48 +0848 +FFC8 +0888 +0808 +ENDCHAR +STARTCHAR uni5D85 +ENCODING 23941 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7F20 +087E +7E44 +08A4 +FF28 +1010 +1E28 +2244 +4682 +8100 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5D86 +ENCODING 23942 +BBX 15 16 0 -2 +BITMAP +2090 +2090 +27FE +2090 +ABFC +AA94 +ABFC +AA94 +ABFC +A800 +A9F8 +B908 +C9F8 +0108 +01F8 +0108 +ENDCHAR +STARTCHAR uni5D87 +ENCODING 23943 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2200 +227C +AA44 +AA44 +AA7C +AA00 +AAEE +AAAA +AAAA +AAAA +FAEE +0200 +03FE +ENDCHAR +STARTCHAR uni5D88 +ENCODING 23944 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +4820 +48FC +4B24 +7898 +0BE0 +0810 +FBFE +2910 +2890 +4810 +8830 +ENDCHAR +STARTCHAR uni5D89 +ENCODING 23945 +BBX 14 16 1 -2 +BITMAP +0200 +4210 +4210 +7FF0 +0140 +0120 +F3FC +9240 +9640 +9BF8 +9240 +93F8 +F240 +9240 +03FC +0200 +ENDCHAR +STARTCHAR uni5D8A +ENCODING 23946 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +10A0 +1090 +F9FE +1120 +1B20 +15FC +3120 +D1FC +1120 +1120 +51FE +2100 +ENDCHAR +STARTCHAR uni5D8B +ENCODING 23947 +BBX 15 15 1 -1 +BITMAP +0040 +2080 +23F8 +AA08 +ABF8 +AA08 +ABF8 +AA00 +ABFE +AA00 +ABFC +F804 +0554 +0544 +0818 +ENDCHAR +STARTCHAR uni5D8C +ENCODING 23948 +BBX 15 15 1 -1 +BITMAP +0200 +8204 +FFFC +0200 +3FF0 +2010 +3FF0 +2010 +3FF0 +2000 +3FFE +2000 +3FFC +5242 +8926 +ENDCHAR +STARTCHAR uni5D8D +ENCODING 23949 +BBX 14 16 1 -2 +BITMAP +2000 +27BC +2084 +24A4 +AA94 +ACA4 +A884 +A840 +ABF8 +AA08 +AA08 +BBF8 +CA08 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni5D8E +ENCODING 23950 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +3F08 +2108 +3F08 +20FE +2E08 +2048 +3F28 +4428 +5508 +A4A8 +0C10 +ENDCHAR +STARTCHAR uni5D8F +ENCODING 23951 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0000 +7FFE +4000 +5FDC +4504 +5FC4 +5544 +59DC +5050 +5FD0 +5052 +5FD2 +904E +ENDCHAR +STARTCHAR uni5D90 +ENCODING 23952 +BBX 15 15 1 -1 +BITMAP +0200 +8204 +FFFC +0100 +F9FC +8B10 +94E0 +A198 +96F6 +8920 +89FC +8A20 +B5F8 +8020 +87FE +ENDCHAR +STARTCHAR uni5D91 +ENCODING 23953 +BBX 15 16 0 -2 +BITMAP +2080 +20F8 +2108 +23FE +AD12 +A922 +A9FE +A840 +A8A2 +AB54 +A898 +BB34 +C854 +0092 +0350 +0020 +ENDCHAR +STARTCHAR uni5D92 +ENCODING 23954 +BBX 15 15 1 -1 +BITMAP +2030 +2108 +2204 +27FE +AB4C +AAD4 +AA44 +ABFC +A800 +A9F8 +A908 +F9F8 +0108 +0108 +01F8 +ENDCHAR +STARTCHAR uni5D93 +ENCODING 23955 +BBX 14 16 1 -2 +BITMAP +2078 +27C0 +2248 +2150 +ABFC +A950 +AA48 +AC04 +ABF8 +AA48 +AA48 +BBF8 +CA48 +0248 +03F8 +0208 +ENDCHAR +STARTCHAR uni5D94 +ENCODING 23956 +BBX 14 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0840 +1440 +20FC +7C84 +0928 +7E20 +0820 +4A50 +2E50 +1888 +E104 +ENDCHAR +STARTCHAR uni5D95 +ENCODING 23957 +BBX 15 16 0 -2 +BITMAP +2090 +2088 +21FE +2110 +AB10 +ADFE +A910 +A910 +A9FE +A910 +A910 +B9FE +C900 +02A4 +0252 +0452 +ENDCHAR +STARTCHAR uni5D96 +ENCODING 23958 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2118 +26E6 +A800 +ABF8 +AA08 +ABF8 +A800 +AFBC +A884 +BCA4 +C294 +04A4 +0294 +0108 +ENDCHAR +STARTCHAR uni5D97 +ENCODING 23959 +BBX 15 15 1 -1 +BITMAP +220A +2AAA +2308 +2496 +A8A2 +A800 +AFFE +A882 +A882 +AFFC +A884 +F904 +0104 +0204 +0C38 +ENDCHAR +STARTCHAR uni5D98 +ENCODING 23960 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +3FF8 +1090 +1088 +13FE +FC48 +1032 +31CE +3890 +5488 +53FE +9048 +1032 +11CE +ENDCHAR +STARTCHAR uni5D99 +ENCODING 23961 +BBX 15 15 1 -1 +BITMAP +2244 +2148 +2040 +27FE +A8D0 +A948 +AF46 +A908 +A9BC +AAA8 +AEA8 +F9FE +0108 +0208 +0408 +ENDCHAR +STARTCHAR uni5D9A +ENCODING 23962 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0100 +7FFC +0440 +2828 +1FF0 +2828 +CFE6 +0820 +0FE0 +0100 +1110 +2508 +0200 +ENDCHAR +STARTCHAR uni5D9B +ENCODING 23963 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +23F8 +2040 +AAA8 +A910 +AA08 +ADF4 +A910 +A9F0 +A910 +B9F0 +C840 +0150 +0248 +00C0 +ENDCHAR +STARTCHAR uni5D9C +ENCODING 23964 +BBX 14 16 1 -2 +BITMAP +0200 +8208 +FFF8 +0000 +7CF8 +1020 +9120 +FDFC +2850 +4894 +8D0C +7FF0 +4010 +7FF0 +4010 +7FF0 +ENDCHAR +STARTCHAR uni5D9D +ENCODING 23965 +BBX 15 15 1 -1 +BITMAP +2000 +21C8 +24B2 +2314 +AA08 +ADF6 +A800 +ABF8 +AA08 +AA08 +ABF8 +F910 +0110 +00A0 +0FFE +ENDCHAR +STARTCHAR uni5D9E +ENCODING 23966 +BBX 13 16 1 -2 +BITMAP +0080 +F7F8 +9100 +A3F0 +C440 +ABF8 +9110 +91F0 +D110 +A1F0 +8110 +8200 +4210 +4210 +7FF0 +0010 +ENDCHAR +STARTCHAR uni5D9F +ENCODING 23967 +BBX 15 16 0 -2 +BITMAP +2088 +2050 +23FE +2050 +A9FC +A954 +A98C +A974 +A904 +A9FC +A808 +BBFE +C908 +0088 +00A8 +0010 +ENDCHAR +STARTCHAR uni5DA0 +ENCODING 23968 +BBX 15 15 1 -1 +BITMAP +201C +23E0 +2040 +27FE +A888 +A9FC +AE8A +A8F8 +A800 +ABFE +AA02 +FAFA +028A +02FA +0206 +ENDCHAR +STARTCHAR uni5DA1 +ENCODING 23969 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0000 +3FFE +2890 +2510 +2FBE +2222 +2AD4 +2A90 +2F90 +2228 +4428 +4444 +8882 +ENDCHAR +STARTCHAR uni5DA2 +ENCODING 23970 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23F8 +2040 +AFFC +AA08 +AFBE +AA08 +AB88 +AE3E +A800 +AFFE +F920 +0222 +0C1E +ENDCHAR +STARTCHAR uni5DA3 +ENCODING 23971 +BBX 13 16 1 -2 +BITMAP +0200 +8208 +FFF8 +0200 +1100 +3FF8 +6100 +BFF0 +2100 +3FF0 +2100 +3FF8 +2000 +4910 +4488 +8488 +ENDCHAR +STARTCHAR uni5DA4 +ENCODING 23972 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +7FFC +0100 +1FF0 +0100 +7FFC +0820 +7EFC +0820 +FEFE +0000 +7FFC +0822 +F01E +ENDCHAR +STARTCHAR uni5DA5 +ENCODING 23973 +BBX 15 16 0 -2 +BITMAP +2000 +2FFE +2800 +2A28 +A948 +ABEE +A892 +A884 +AAA0 +AAA8 +ABE8 +B888 +C894 +0914 +0924 +1242 +ENDCHAR +STARTCHAR uni5DA6 +ENCODING 23974 +BBX 14 16 1 -2 +BITMAP +2100 +21F0 +2210 +27FC +AA88 +AB24 +ABFC +AA00 +AAF8 +AA00 +AAF8 +BA00 +CAF8 +0488 +04F8 +0888 +ENDCHAR +STARTCHAR uni5DA7 +ENCODING 23975 +BBX 14 14 1 -1 +BITMAP +27FC +24A4 +27FC +2040 +ABF8 +A840 +AFFC +A910 +AFFC +A840 +FBF8 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni5DA8 +ENCODING 23976 +BBX 15 16 0 -2 +BITMAP +0A80 +3138 +2288 +3838 +2288 +3938 +2288 +7FFE +4002 +8104 +0100 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni5DA9 +ENCODING 23977 +BBX 14 16 1 -2 +BITMAP +20A0 +23F8 +22A8 +23F8 +AAA8 +ABF8 +A800 +ABFC +AA00 +AAF8 +AA00 +BBFC +CAA0 +02A8 +0290 +04CC +ENDCHAR +STARTCHAR uni5DAA +ENCODING 23978 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +2448 +1450 +FFFE +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni5DAB +ENCODING 23979 +BBX 15 16 0 -2 +BITMAP +2050 +2252 +2154 +2050 +ABFE +A888 +A850 +ABFE +A820 +A9FC +A820 +BBFE +C8A8 +0124 +0622 +0020 +ENDCHAR +STARTCHAR uni5DAC +ENCODING 23980 +BBX 15 15 1 -1 +BITMAP +2208 +2110 +27FC +A840 +ABF8 +A840 +AFFE +A808 +AFA4 +AA20 +AFFE +FA24 +0FA8 +021A +0666 +ENDCHAR +STARTCHAR uni5DAD +ENCODING 23981 +BBX 14 16 1 -2 +BITMAP +0200 +4210 +4210 +7FF0 +2080 +F840 +8BF8 +8910 +F8A0 +87FC +8040 +F840 +8BF8 +8840 +F840 +8840 +ENDCHAR +STARTCHAR uni5DAE +ENCODING 23982 +BBX 15 15 1 -1 +BITMAP +2020 +2050 +2188 +AE06 +A8F8 +A800 +ABDE +AA52 +AA52 +ABDE +A800 +F908 +0108 +0294 +04A2 +ENDCHAR +STARTCHAR uni5DAF +ENCODING 23983 +BBX 15 16 0 -2 +BITMAP +4104 +7FFC +0000 +3E28 +2224 +3E24 +0020 +FFFE +2220 +3E28 +2228 +3E10 +2212 +2F2A +F246 +4282 +ENDCHAR +STARTCHAR uni5DB0 +ENCODING 23984 +BBX 15 15 1 -1 +BITMAP +2400 +277C +2524 +2924 +AFA4 +AAC8 +AAA8 +AFBC +AAA8 +AAC8 +AF88 +F8FE +0888 +0888 +1188 +ENDCHAR +STARTCHAR uni5DB1 +ENCODING 23985 +BBX 14 16 1 -2 +BITMAP +2110 +27FC +2110 +23F8 +AA08 +ABF8 +AA08 +ABF8 +A900 +ABFC +AC44 +BAA4 +CA04 +03F4 +0014 +0008 +ENDCHAR +STARTCHAR uni5DB2 +ENCODING 23986 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +3FF8 +1040 +3FFC +6080 +BFF8 +2080 +3FF8 +2080 +3FFE +0000 +7C7C +4444 +47CC +ENDCHAR +STARTCHAR uni5DB3 +ENCODING 23987 +BBX 15 16 0 -2 +BITMAP +2108 +3FF8 +0000 +7FFC +0600 +3B08 +04B0 +19C0 +62A0 +0C98 +7326 +1020 +7CFC +1020 +1E20 +F1FE +ENDCHAR +STARTCHAR uni5DB4 +ENCODING 23988 +BBX 15 15 1 -1 +BITMAP +0200 +3FF8 +2068 +2FA8 +2548 +2FF8 +2388 +2548 +0920 +FFFE +0C60 +711C +0100 +2108 +3FF8 +ENDCHAR +STARTCHAR uni5DB5 +ENCODING 23989 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2294 +2294 +ABFC +A800 +A890 +AF9E +A890 +A890 +AB9C +B890 +C890 +079E +0090 +0090 +ENDCHAR +STARTCHAR uni5DB6 +ENCODING 23990 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0000 +2220 +4AA0 +8ABE +1FC4 +20A4 +6F24 +A028 +2F28 +2910 +29A8 +2944 +3082 +ENDCHAR +STARTCHAR uni5DB7 +ENCODING 23991 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +7FFC +0000 +4CFC +7004 +4228 +7E10 +21FE +7E12 +4850 +FF5C +0850 +3470 +C29E +ENDCHAR +STARTCHAR uni5DB8 +ENCODING 23992 +BBX 15 15 1 -1 +BITMAP +2208 +2AAA +2AAA +2514 +A8A2 +A800 +AFFC +AC04 +A840 +AFFE +A950 +FA48 +0444 +0842 +0040 +ENDCHAR +STARTCHAR uni5DB9 +ENCODING 23993 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2040 +ABF8 +A800 +AFFC +A844 +ABF8 +A800 +AFFE +F808 +07FE +0548 +0718 +ENDCHAR +STARTCHAR uni5DBA +ENCODING 23994 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +7FFC +1000 +11FE +2820 +44FC +BA84 +00FC +FC84 +24FC +2484 +2CFC +2048 +2186 +ENDCHAR +STARTCHAR uni5DBB +ENCODING 23995 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0820 +7F28 +0824 +FFFE +1220 +3FA4 +6424 +BFA8 +2418 +3F92 +242A +3FC6 +2082 +ENDCHAR +STARTCHAR uni5DBC +ENCODING 23996 +BBX 15 15 1 -1 +BITMAP +2080 +234C +2264 +AA44 +AB4C +AA64 +AA24 +AB2C +AAA4 +AAA4 +AAA4 +FFFE +0040 +0188 +0606 +ENDCHAR +STARTCHAR uni5DBD +ENCODING 23997 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +7FFC +0000 +978A +500A +2FC8 +503E +9788 +3008 +5788 +9014 +1794 +2492 +C7A2 +ENDCHAR +STARTCHAR uni5DBE +ENCODING 23998 +BBX 15 16 0 -2 +BITMAP +203E +27C0 +2244 +2128 +ABF8 +A840 +AFFC +A800 +ABF8 +A808 +ABF8 +B808 +CBF8 +0544 +052A +08FA +ENDCHAR +STARTCHAR uni5DBF +ENCODING 23999 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2020 +23FE +AA22 +A9AC +A820 +A9AC +A800 +ABFE +A820 +B9FC +C954 +0154 +0154 +010C +ENDCHAR +STARTCHAR uni5DC0 +ENCODING 24000 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0800 +2A28 +4D24 +0820 +142E +3F70 +6424 +BF24 +2428 +3F12 +242A +3F46 +2082 +ENDCHAR +STARTCHAR uni5DC1 +ENCODING 24001 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2248 +23FE +AA48 +AAFC +AAA4 +AAFC +AAA4 +AAFC +AA20 +BBFE +C32A +057A +050A +0906 +ENDCHAR +STARTCHAR uni5DC2 +ENCODING 24002 +BBX 14 16 0 -2 +BITMAP +2108 +3FF8 +0880 +1FFC +3080 +5FF8 +9080 +1FF8 +1080 +1FFC +1000 +3FFC +2424 +2BD4 +2244 +23CC +ENDCHAR +STARTCHAR uni5DC3 +ENCODING 24003 +BBX 15 16 0 -2 +BITMAP +4104 +7FFC +0840 +7F7C +2240 +147C +FF04 +007C +7F40 +417C +7F40 +417C +7F40 +417C +4542 +423E +ENDCHAR +STARTCHAR uni5DC4 +ENCODING 24004 +BBX 15 16 0 -2 +BITMAP +2110 +2090 +23DE +2010 +AA5E +A982 +ABDE +A810 +ABDE +AA50 +ABDE +BA50 +CBDE +0250 +0252 +02CE +ENDCHAR +STARTCHAR uni5DC5 +ENCODING 24005 +BBX 15 16 0 -2 +BITMAP +2108 +3FF8 +0800 +7EFE +0810 +3E20 +227C +3E44 +2254 +3E54 +2254 +3E54 +2254 +FF28 +2444 +4282 +ENDCHAR +STARTCHAR uni5DC6 +ENCODING 24006 +BBX 15 16 0 -2 +BITMAP +2088 +22AA +22DC +2488 +A954 +AA22 +ABFE +AA02 +A8F8 +A888 +A8F8 +B800 +C9FC +0104 +01FC +0104 +ENDCHAR +STARTCHAR uni5DC7 +ENCODING 24007 +BBX 15 16 0 -2 +BITMAP +2088 +20CC +208A +23E8 +AAA8 +AADE +ABA8 +AA6A +AA0A +ABEA +AC0C +BFEC +CA2A +03EA +0156 +07E2 +ENDCHAR +STARTCHAR uni5DC8 +ENCODING 24008 +BBX 14 16 0 -2 +BITMAP +0100 +4104 +7FFC +0000 +2900 +7DFC +2904 +3A44 +1154 +7CE4 +55F4 +7C44 +10E4 +FD54 +1054 +1008 +ENDCHAR +STARTCHAR uni5DC9 +ENCODING 24009 +BBX 15 15 1 -1 +BITMAP +21F0 +2220 +27FC +AA04 +ABFC +A920 +A9BC +A922 +ABDE +A800 +ABFC +FA44 +03FC +00AA +073E +ENDCHAR +STARTCHAR uni5DCA +ENCODING 24010 +BBX 15 16 0 -2 +BITMAP +23DE +2252 +23DE +2252 +ABDE +AA52 +ABDE +A98C +AA52 +A840 +AFFE +B888 +C990 +0060 +00D8 +0304 +ENDCHAR +STARTCHAR uni5DCB +ENCODING 24011 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +7FFC +1000 +7E7C +4204 +7EFE +4004 +7E7C +4200 +7FFE +1122 +5EFC +50A4 +FEAC +ENDCHAR +STARTCHAR uni5DCC +ENCODING 24012 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +7FFC +1108 +7FFE +4020 +5F20 +443C +7FC8 +5148 +5F28 +5110 +5F10 +B128 +0146 +ENDCHAR +STARTCHAR uni5DCD +ENCODING 24013 +BBX 15 15 1 -1 +BITMAP +4104 +4104 +7FFC +0820 +7040 +11FC +FD24 +39FC +D524 +21FC +FEAA +48BE +C8A0 +3122 +CD1E +ENDCHAR +STARTCHAR uni5DCE +ENCODING 24014 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2040 +22EE +AAAA +ABEA +AAAE +AAE8 +ABAA +ACE6 +AA88 +BDF4 +CA90 +0060 +0198 +0606 +ENDCHAR +STARTCHAR uni5DCF +ENCODING 24015 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +2088 +23DE +AA52 +ABDE +A8A0 +A890 +A9FE +A920 +ABFC +BD20 +C9FC +0120 +01FE +0100 +ENDCHAR +STARTCHAR uni5DD0 +ENCODING 24016 +BBX 14 16 1 -2 +BITMAP +0200 +8208 +FFF8 +1000 +FEF8 +0088 +7CF8 +4488 +7CF8 +0020 +FEC8 +8248 +BBFC +AA48 +BA48 +8688 +ENDCHAR +STARTCHAR uni5DD1 +ENCODING 24017 +BBX 15 15 1 -1 +BITMAP +2528 +27BC +2948 +27FE +AA94 +AAD4 +AFFE +AA08 +ABF8 +AA08 +ABF8 +FA08 +03F8 +0110 +060C +ENDCHAR +STARTCHAR uni5DD2 +ENCODING 24018 +BBX 15 15 1 -1 +BITMAP +4390 +4010 +8FE4 +5014 +2388 +5816 +E7BA +2008 +6BAC +AAAA +2388 +0100 +4104 +4104 +7FFC +ENDCHAR +STARTCHAR uni5DD3 +ENCODING 24019 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +7FFC +2400 +38FE +2210 +1E7C +0044 +5C7C +5444 +5C7C +5444 +7E7C +2428 +C2C6 +ENDCHAR +STARTCHAR uni5DD4 +ENCODING 24020 +BBX 15 16 0 -2 +BITMAP +2108 +3FF8 +0800 +7EFE +0810 +3E20 +227C +3E44 +227C +3E44 +227C +3E44 +227C +FF28 +2444 +4282 +ENDCHAR +STARTCHAR uni5DD5 +ENCODING 24021 +BBX 15 16 0 -2 +BITMAP +2108 +2090 +27FE +2108 +ABFE +AA54 +ABC8 +AA3E +ABC8 +AA5C +ABC8 +B840 +CBFE +0088 +0070 +038C +ENDCHAR +STARTCHAR uni5DD6 +ENCODING 24022 +BBX 15 15 1 -1 +BITMAP +4104 +7FFC +0000 +1E3C +1224 +7FFE +4010 +5F10 +441E +7FA4 +5164 +5F18 +5108 +9F14 +B162 +ENDCHAR +STARTCHAR uni5DD7 +ENCODING 24023 +BBX 15 15 1 -1 +BITMAP +27BC +24A4 +27BC +2000 +AFFE +A810 +AB90 +A91E +AFF4 +AAA4 +AB94 +FA98 +0B88 +1694 +00A2 +ENDCHAR +STARTCHAR uni5DD8 +ENCODING 24024 +BBX 15 15 1 -1 +BITMAP +2208 +238C +220A +2FC8 +AA3E +AF88 +AA48 +AFC8 +AA8C +AFD4 +AD54 +F9D4 +0F54 +1A54 +0AE6 +ENDCHAR +STARTCHAR uni5DD9 +ENCODING 24025 +BBX 15 16 0 -2 +BITMAP +2110 +27FE +2040 +22EE +AAAA +ABEA +AAAE +AAE8 +ABAA +ACE6 +AA88 +BDF4 +CA90 +0060 +0198 +0606 +ENDCHAR +STARTCHAR uni5DDA +ENCODING 24026 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0800 +0F90 +0814 +7F92 +48FE +7E10 +4890 +5FA8 +5128 +5F28 +5544 +5544 +9382 +ENDCHAR +STARTCHAR uni5DDB +ENCODING 24027 +BBX 12 15 2 -1 +BITMAP +1110 +1110 +2220 +2220 +4440 +4440 +8880 +8880 +8880 +4440 +4440 +2220 +2220 +1110 +1110 +ENDCHAR +STARTCHAR uni5DDC +ENCODING 24028 +BBX 11 13 1 0 +BITMAP +0820 +0820 +1040 +1040 +2080 +4100 +8200 +4100 +2080 +1040 +1040 +0820 +0820 +ENDCHAR +STARTCHAR uni5DDD +ENCODING 24029 +BBX 14 15 1 -1 +BITMAP +0004 +2004 +2104 +2104 +2104 +2104 +2104 +2104 +2104 +2104 +2104 +4104 +4004 +8004 +0004 +ENDCHAR +STARTCHAR uni5DDE +ENCODING 24030 +BBX 14 15 1 -1 +BITMAP +1004 +1084 +1084 +1084 +54A4 +5494 +5294 +9284 +9084 +1084 +1084 +2084 +2084 +4004 +8004 +ENDCHAR +STARTCHAR uni5DDF +ENCODING 24031 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +1000 +1000 +1000 +1FF8 +0000 +1110 +1110 +1110 +1110 +2110 +2112 +4112 +800E +ENDCHAR +STARTCHAR uni5DE0 +ENCODING 24032 +BBX 13 14 2 -1 +BITMAP +FFF8 +2220 +2220 +4440 +8880 +4440 +2220 +2220 +0000 +7FF0 +0200 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni5DE1 +ENCODING 24033 +BBX 15 15 1 -1 +BITMAP +0124 +8124 +4248 +2248 +0490 +0920 +0920 +E490 +2248 +2248 +2124 +2124 +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uni5DE2 +ENCODING 24034 +BBX 15 15 1 -1 +BITMAP +0888 +1110 +2220 +1110 +3FF8 +2108 +3FF8 +2108 +3FF8 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni5DE3 +ENCODING 24035 +BBX 15 15 1 -1 +BITMAP +2208 +1108 +1110 +3FF8 +2108 +3FF8 +2108 +3FF8 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni5DE4 +ENCODING 24036 +BBX 15 15 1 -1 +BITMAP +0888 +1110 +2220 +1110 +3FF8 +2668 +2188 +2668 +3FF8 +2950 +2530 +2950 +252A +39C4 +E704 +ENDCHAR +STARTCHAR uni5DE5 +ENCODING 24037 +BBX 13 11 2 0 +BITMAP +3FE0 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni5DE6 +ENCODING 24038 +BBX 14 15 1 -1 +BITMAP +0400 +0400 +0400 +FFFC +0400 +0800 +0800 +0FF8 +1080 +1080 +2080 +4080 +8080 +0080 +3FFC +ENDCHAR +STARTCHAR uni5DE7 +ENCODING 24039 +BBX 15 14 1 -1 +BITMAP +07FE +0040 +F840 +2080 +2080 +21FC +2104 +2004 +3804 +E004 +0004 +0008 +0008 +0070 +ENDCHAR +STARTCHAR uni5DE8 +ENCODING 24040 +BBX 13 14 2 -1 +BITMAP +FFF0 +8000 +8000 +8000 +FFE0 +8020 +8020 +8020 +FFE0 +8000 +8000 +8000 +8000 +FFF8 +ENDCHAR +STARTCHAR uni5DE9 +ENCODING 24041 +BBX 15 14 1 -1 +BITMAP +07F0 +FA10 +2210 +2210 +2210 +2FD0 +2210 +2210 +3A10 +C210 +0410 +0412 +0812 +100E +ENDCHAR +STARTCHAR uni5DEA +ENCODING 24042 +BBX 13 15 1 -2 +BITMAP +7FF0 +4000 +4000 +7FE0 +4020 +4020 +7FE0 +4000 +4000 +7FF8 +0000 +FFF0 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni5DEB +ENCODING 24043 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +0100 +1110 +1110 +1110 +1110 +2928 +2928 +4544 +4544 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni5DEC +ENCODING 24044 +BBX 15 15 0 -2 +BITMAP +7DF0 +1110 +1110 +1112 +1D12 +E20E +4400 +0100 +3FF8 +0100 +FFFE +0280 +0440 +1830 +600C +ENDCHAR +STARTCHAR uni5DED +ENCODING 24045 +BBX 15 16 0 -2 +BITMAP +0040 +7C40 +13FC +1044 +1044 +1C84 +E114 +4208 +0100 +3FF8 +0100 +FFFE +0280 +0440 +1830 +600C +ENDCHAR +STARTCHAR uni5DEE +ENCODING 24046 +BBX 15 15 1 -1 +BITMAP +0820 +0440 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +0800 +1FF8 +2080 +C080 +0080 +3FFE +ENDCHAR +STARTCHAR uni5DEF +ENCODING 24047 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +05FE +0820 +1048 +2884 +45FE +8202 +00A8 +7CA8 +10A8 +10A8 +10AA +1D2A +E126 +4200 +ENDCHAR +STARTCHAR uni5DF0 +ENCODING 24048 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +55FE +5420 +A848 +5484 +55FE +0002 +FEA8 +10A8 +10A8 +10A8 +1EAA +F12A +4126 +0200 +ENDCHAR +STARTCHAR uni5DF1 +ENCODING 24049 +BBX 13 14 2 -1 +BITMAP +FFE0 +0020 +0020 +0020 +0020 +FFE0 +8000 +8000 +8000 +8000 +8000 +8008 +8008 +7FF8 +ENDCHAR +STARTCHAR uni5DF2 +ENCODING 24050 +BBX 14 14 2 -1 +BITMAP +FFF0 +0010 +0010 +8010 +8010 +FFF0 +8000 +8000 +8000 +8000 +8004 +8004 +8004 +7FFC +ENDCHAR +STARTCHAR uni5DF3 +ENCODING 24051 +BBX 12 14 3 -1 +BITMAP +FFE0 +8020 +8020 +8020 +8020 +FFE0 +8000 +8000 +8000 +8000 +8000 +8010 +8010 +7FF0 +ENDCHAR +STARTCHAR uni5DF4 +ENCODING 24052 +BBX 14 14 2 -1 +BITMAP +FFF8 +8208 +8208 +8208 +8208 +8208 +FFF8 +8000 +8000 +8000 +8004 +8004 +8004 +7FFC +ENDCHAR +STARTCHAR uni5DF5 +ENCODING 24053 +BBX 15 15 1 -1 +BITMAP +01F0 +7E00 +4000 +7FFE +4000 +5FF8 +5108 +5108 +5108 +5FF8 +5000 +9000 +9002 +9002 +0FFE +ENDCHAR +STARTCHAR uni5DF6 +ENCODING 24054 +BBX 15 14 0 -1 +BITMAP +FEFC +2284 +2284 +4284 +4A84 +8484 +00FC +7E80 +4280 +4280 +4282 +4282 +7E82 +427E +ENDCHAR +STARTCHAR uni5DF7 +ENCODING 24055 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +3FF8 +0440 +0440 +FFFE +0820 +1FF0 +2828 +C826 +0FE0 +0800 +0808 +0808 +07F8 +ENDCHAR +STARTCHAR uni5DF8 +ENCODING 24056 +BBX 14 14 1 -1 +BITMAP +FEF8 +9088 +9088 +9088 +BC88 +A488 +A4F8 +A480 +A480 +BC80 +9084 +9084 +9084 +FE7C +ENDCHAR +STARTCHAR uni5DF9 +ENCODING 24057 +BBX 15 16 0 -2 +BITMAP +1FC0 +0044 +7D88 +0550 +0920 +3118 +C506 +0200 +3FF8 +0000 +3FF0 +0010 +3FF0 +2004 +2004 +1FFC +ENDCHAR +STARTCHAR uni5DFA +ENCODING 24058 +BBX 15 15 0 -2 +BITMAP +7CF8 +4488 +4488 +7CF8 +4080 +4284 +4284 +3E7C +0000 +0000 +FFFE +0000 +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni5DFB +ENCODING 24059 +BBX 15 15 1 -1 +BITMAP +1110 +0910 +0920 +3FF8 +0280 +0440 +FFFE +0820 +1FF0 +3028 +C026 +0FE0 +0800 +0808 +07F8 +ENDCHAR +STARTCHAR uni5DFC +ENCODING 24060 +BBX 13 15 2 -2 +BITMAP +FFC0 +8440 +8440 +FFC0 +8000 +8010 +8010 +7FF0 +0000 +F910 +8960 +8980 +8908 +F908 +88F8 +ENDCHAR +STARTCHAR uni5DFD +ENCODING 24061 +BBX 15 14 1 -1 +BITMAP +7EFC +0204 +7EFC +4080 +4284 +3E7C +0440 +3FF8 +0440 +0440 +FFFE +0000 +1830 +600C +ENDCHAR +STARTCHAR uni5DFE +ENCODING 24062 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +FFF8 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8238 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni5DFF +ENCODING 24063 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +FFFE +0100 +0100 +0100 +3FF8 +2108 +2108 +2108 +2108 +2128 +2110 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5E00 +ENCODING 24064 +BBX 13 14 2 -1 +BITMAP +FFF8 +0200 +0200 +7FF0 +4210 +4210 +4210 +4210 +4210 +4210 +4270 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni5E01 +ENCODING 24065 +BBX 13 16 1 -2 +BITMAP +0010 +03F8 +FE00 +0200 +0200 +7FF0 +4210 +4210 +4210 +4210 +4210 +4250 +4220 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni5E02 +ENCODING 24066 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +0100 +3FF8 +2108 +2108 +2108 +2108 +2108 +2138 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5E03 +ENCODING 24067 +BBX 14 15 1 -1 +BITMAP +0400 +0400 +FFFC +0800 +1100 +1100 +3FF8 +5108 +9108 +1108 +1108 +1108 +1138 +0100 +0100 +ENDCHAR +STARTCHAR uni5E04 +ENCODING 24068 +BBX 14 16 1 -2 +BITMAP +1000 +1000 +11FC +FE20 +9220 +9220 +9220 +9220 +9220 +9220 +9220 +9620 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni5E05 +ENCODING 24069 +BBX 13 16 1 -2 +BITMAP +1040 +1040 +9040 +9040 +93F8 +9248 +9248 +9248 +9248 +9248 +9248 +1268 +2250 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni5E06 +ENCODING 24070 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +F908 +A908 +A948 +A948 +A928 +A928 +A908 +B908 +2108 +220A +220A +2406 +ENDCHAR +STARTCHAR uni5E07 +ENCODING 24071 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +0100 +3FF8 +2108 +2108 +2128 +2110 +0100 +0100 +ENDCHAR +STARTCHAR uni5E08 +ENCODING 24072 +BBX 14 16 1 -2 +BITMAP +1000 +17FC +9040 +9040 +9040 +93F8 +9248 +9248 +9248 +9248 +9248 +1268 +2250 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni5E09 +ENCODING 24073 +BBX 14 16 1 -2 +BITMAP +2020 +2120 +2120 +F910 +AA10 +AA08 +AC08 +ABF4 +A910 +A910 +A910 +B910 +2210 +2210 +2450 +2820 +ENDCHAR +STARTCHAR uni5E0A +ENCODING 24074 +BBX 14 16 1 -2 +BITMAP +2000 +2000 +23F8 +FA48 +AA48 +AA48 +AA48 +AA48 +ABF8 +AA00 +AA00 +BA00 +2204 +2204 +21FC +2000 +ENDCHAR +STARTCHAR uni5E0B +ENCODING 24075 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +2080 +3FFE +2040 +2040 +3E32 +E10C +0100 +3FFC +2104 +2104 +2104 +211C +0100 +ENDCHAR +STARTCHAR uni5E0C +ENCODING 24076 +BBX 13 15 2 -1 +BITMAP +1040 +0C80 +0300 +1CE0 +E400 +0400 +FFF8 +0900 +1FF0 +3110 +5110 +9110 +1130 +0100 +0100 +ENDCHAR +STARTCHAR uni5E0D +ENCODING 24077 +BBX 14 16 0 -2 +BITMAP +0200 +0100 +3FFC +2004 +2004 +3FFC +2040 +2040 +27FC +2444 +2444 +2444 +4454 +4448 +8040 +0040 +ENDCHAR +STARTCHAR uni5E0E +ENCODING 24078 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +2040 +FBFC +AA44 +AC48 +A840 +A840 +A8A0 +A8A0 +A8A0 +B8A0 +2120 +2124 +2224 +241C +ENDCHAR +STARTCHAR uni5E0F +ENCODING 24079 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +2040 +FBFC +A840 +A840 +A9F8 +A840 +A840 +ABFC +A844 +B844 +2054 +2048 +2040 +2040 +ENDCHAR +STARTCHAR uni5E10 +ENCODING 24080 +BBX 14 16 1 -2 +BITMAP +2100 +2108 +2108 +F910 +A920 +A940 +A900 +AFFC +A940 +A920 +A920 +B910 +2108 +2144 +2180 +2100 +ENDCHAR +STARTCHAR uni5E11 +ENCODING 24081 +BBX 15 15 1 -1 +BITMAP +0800 +087E +FFC2 +1144 +2228 +7C10 +0B68 +3006 +C100 +3FFC +2104 +2104 +2104 +211C +0100 +ENDCHAR +STARTCHAR uni5E12 +ENCODING 24082 +BBX 14 15 1 -1 +BITMAP +1120 +1110 +1100 +21FC +6F80 +A040 +2024 +2118 +0100 +3FF8 +2108 +2108 +2108 +2138 +0100 +ENDCHAR +STARTCHAR uni5E13 +ENCODING 24083 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +2040 +FBFC +A840 +A840 +A840 +ABF8 +A8E0 +A950 +A950 +BA48 +2248 +2444 +2040 +2040 +ENDCHAR +STARTCHAR uni5E14 +ENCODING 24084 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +FBFE +AA22 +AA24 +AA20 +ABFC +AA84 +AA84 +BA48 +2448 +2430 +2850 +208C +2302 +ENDCHAR +STARTCHAR uni5E15 +ENCODING 24085 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +2080 +FBFC +AA04 +AA04 +AA04 +AA04 +ABFC +AA04 +BA04 +2204 +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni5E16 +ENCODING 24086 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +F87E +A840 +A840 +A840 +A840 +ABFC +BA04 +2204 +2204 +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni5E17 +ENCODING 24087 +BBX 14 16 1 -2 +BITMAP +20A0 +2090 +2090 +F880 +ABFC +A880 +A880 +A8F8 +A948 +A948 +A950 +BA50 +2220 +2450 +2088 +2104 +ENDCHAR +STARTCHAR uni5E18 +ENCODING 24088 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4444 +1842 +E13E +0100 +3FF8 +2108 +2108 +2108 +2138 +0100 +0100 +ENDCHAR +STARTCHAR uni5E19 +ENCODING 24089 +BBX 14 15 2 -1 +BITMAP +2040 +2040 +2140 +F940 +ABF8 +AA40 +A840 +A840 +AFFC +A840 +B8A0 +20A0 +2110 +2208 +2404 +ENDCHAR +STARTCHAR uni5E1A +ENCODING 24090 +BBX 14 14 1 -1 +BITMAP +3FF0 +0010 +FFFC +0010 +3FF0 +0000 +7FFC +4104 +1FF0 +1110 +1110 +1170 +0100 +0100 +ENDCHAR +STARTCHAR uni5E1B +ENCODING 24091 +BBX 11 15 3 -1 +BITMAP +0400 +0800 +7FC0 +4040 +7FC0 +4040 +7FC0 +0400 +FFE0 +8420 +8420 +8420 +84E0 +0400 +0400 +ENDCHAR +STARTCHAR uni5E1C +ENCODING 24092 +BBX 14 16 1 -2 +BITMAP +2000 +2000 +23F8 +FA08 +AA08 +AA08 +AA08 +AA08 +ABF8 +AA08 +A800 +B920 +2110 +2208 +2404 +2804 +ENDCHAR +STARTCHAR uni5E1D +ENCODING 24093 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +0420 +0440 +FFFE +8102 +8102 +3FF8 +2108 +2108 +2108 +2138 +0100 +ENDCHAR +STARTCHAR uni5E1E +ENCODING 24094 +BBX 14 16 1 -2 +BITMAP +2000 +27FC +2040 +F840 +A880 +ABF8 +AA08 +AA08 +AA08 +ABF8 +AA08 +BA08 +2208 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni5E1F +ENCODING 24095 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +2448 +4444 +8842 +1140 +0100 +3FF8 +2108 +2108 +2108 +2118 +0100 +ENDCHAR +STARTCHAR uni5E20 +ENCODING 24096 +BBX 11 16 2 -2 +BITMAP +0800 +73C0 +4040 +4040 +7BC0 +4040 +4040 +7FC0 +0400 +FFE0 +8420 +8420 +84A0 +8440 +0400 +0400 +ENDCHAR +STARTCHAR uni5E21 +ENCODING 24097 +BBX 14 16 1 -2 +BITMAP +2208 +2108 +2110 +F800 +ABFC +A910 +A910 +A910 +A910 +AFFC +A910 +B910 +2210 +2210 +2410 +2810 +ENDCHAR +STARTCHAR uni5E22 +ENCODING 24098 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +20A0 +F910 +AA08 +AC04 +ABF8 +A800 +A800 +ABF8 +AA08 +BA08 +2208 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni5E23 +ENCODING 24099 +BBX 15 16 0 -2 +BITMAP +1110 +0910 +0920 +7FFC +0200 +0400 +FFFE +1110 +2108 +DFF6 +1110 +1110 +1150 +1120 +0100 +0100 +ENDCHAR +STARTCHAR uni5E24 +ENCODING 24100 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +FE7C +2244 +4244 +3444 +087C +3400 +C200 +0100 +3FF8 +2108 +2108 +2128 +2110 +0100 +ENDCHAR +STARTCHAR uni5E25 +ENCODING 24101 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +4040 +FBFC +8A44 +8A44 +FA44 +8244 +FA44 +8A44 +8A44 +8A4C +F840 +0040 +0040 +ENDCHAR +STARTCHAR uni5E26 +ENCODING 24102 +BBX 15 16 0 -2 +BITMAP +0920 +0920 +7FFC +0920 +0920 +0000 +7FFE +4102 +8104 +1FF0 +1110 +1110 +1150 +1120 +0100 +0100 +ENDCHAR +STARTCHAR uni5E27 +ENCODING 24103 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +207C +F840 +A840 +ABF8 +AA08 +AA48 +AA48 +AA48 +AA48 +BA48 +20A0 +2090 +2108 +2208 +ENDCHAR +STARTCHAR uni5E28 +ENCODING 24104 +BBX 14 16 1 -2 +BITMAP +2208 +2108 +2110 +F820 +ABF8 +AA08 +AA08 +AA08 +ABF8 +A8A0 +A8A0 +B920 +2124 +2224 +241C +2800 +ENDCHAR +STARTCHAR uni5E29 +ENCODING 24105 +BBX 13 16 1 -2 +BITMAP +2040 +2248 +2148 +F950 +A840 +ABF8 +AA08 +AA08 +ABF8 +AA08 +AA08 +BBF8 +2208 +2208 +2228 +2210 +ENDCHAR +STARTCHAR uni5E2A +ENCODING 24106 +BBX 14 16 1 -2 +BITMAP +2000 +23FC +2200 +FA00 +AAF8 +AA00 +AA00 +ABFC +AAA0 +AAA4 +AAA8 +BA90 +2290 +2488 +24A4 +28C0 +ENDCHAR +STARTCHAR uni5E2B +ENCODING 24107 +BBX 15 15 1 -1 +BITMAP +2000 +47FE +F840 +8840 +8BFC +FA44 +8244 +8244 +FA44 +8A44 +8A44 +8A44 +FA5C +0040 +0040 +ENDCHAR +STARTCHAR uni5E2C +ENCODING 24108 +BBX 15 15 0 -2 +BITMAP +3FF8 +0208 +FFFE +0408 +3FF8 +0800 +1FF8 +2808 +CFF8 +0080 +1FFC +1084 +1094 +1088 +0080 +ENDCHAR +STARTCHAR uni5E2D +ENCODING 24109 +BBX 14 15 2 -1 +BITMAP +0100 +7FFC +4420 +4420 +5FF8 +4420 +4420 +47E0 +4100 +5FF8 +9108 +9108 +9118 +0100 +0100 +ENDCHAR +STARTCHAR uni5E2E +ENCODING 24110 +BBX 15 15 1 -1 +BITMAP +0800 +087C +7F44 +0848 +7E44 +0842 +FF42 +104C +2040 +C100 +3FF8 +2108 +2108 +2118 +0100 +ENDCHAR +STARTCHAR uni5E2F +ENCODING 24111 +BBX 15 15 1 -1 +BITMAP +1110 +1110 +FFFE +1110 +1110 +1FF0 +0000 +7FFC +4104 +4104 +3FF8 +2108 +2108 +2138 +0100 +ENDCHAR +STARTCHAR uni5E30 +ENCODING 24112 +BBX 15 14 1 -1 +BITMAP +23F8 +A008 +A3F8 +A008 +A3F8 +A000 +AFFE +A842 +27FC +2444 +4444 +444C +8040 +0040 +ENDCHAR +STARTCHAR uni5E31 +ENCODING 24113 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +F840 +ABF8 +A880 +AFFE +A890 +A910 +A9FE +AA10 +BA90 +2450 +2810 +2050 +2020 +ENDCHAR +STARTCHAR uni5E32 +ENCODING 24114 +BBX 14 16 1 -2 +BITMAP +2088 +2088 +2110 +FBB8 +A910 +A910 +A910 +A910 +ABBC +A910 +A910 +B910 +2110 +2110 +2110 +2210 +ENDCHAR +STARTCHAR uni5E33 +ENCODING 24115 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2100 +F9F8 +A900 +A9F8 +A900 +A900 +AFFE +B944 +2148 +2130 +2110 +21C8 +2706 +ENDCHAR +STARTCHAR uni5E34 +ENCODING 24116 +BBX 14 16 1 -2 +BITMAP +2090 +2088 +20BC +FBC0 +A850 +A824 +A8D4 +AB2C +A890 +A8BC +ABC0 +B848 +2050 +2024 +20D4 +230C +ENDCHAR +STARTCHAR uni5E35 +ENCODING 24117 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +FA02 +AD04 +A900 +A9DE +AA52 +AA52 +AB52 +AC9A +B894 +2110 +2112 +2212 +240E +ENDCHAR +STARTCHAR uni5E36 +ENCODING 24118 +BBX 15 15 1 -1 +BITMAP +1450 +1450 +FFFE +1450 +2450 +47DC +0000 +7FFC +4104 +3FF8 +2108 +2108 +2108 +2138 +0100 +ENDCHAR +STARTCHAR uni5E37 +ENCODING 24119 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2220 +FFFE +AA20 +AA20 +ABFC +AA20 +AA20 +AA20 +BBFC +2220 +2220 +2220 +23FE +ENDCHAR +STARTCHAR uni5E38 +ENCODING 24120 +BBX 13 15 2 -1 +BITMAP +0200 +2220 +1240 +FFF8 +8008 +9FC8 +9048 +1040 +1FC0 +0200 +7FF0 +4210 +4210 +4230 +0200 +ENDCHAR +STARTCHAR uni5E39 +ENCODING 24121 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +23FC +F800 +A908 +A890 +AFFE +A840 +A840 +AFFE +A888 +B908 +2090 +2060 +2198 +2604 +ENDCHAR +STARTCHAR uni5E3A +ENCODING 24122 +BBX 14 16 1 -2 +BITMAP +2110 +2110 +23F8 +F910 +A910 +A9F0 +A910 +A910 +A9F0 +A910 +A910 +BBFC +2000 +2110 +2208 +2404 +ENDCHAR +STARTCHAR uni5E3B +ENCODING 24123 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +F840 +ABF8 +A840 +AFFE +A800 +ABF8 +AA08 +AA48 +BA48 +2248 +20A0 +2110 +2608 +ENDCHAR +STARTCHAR uni5E3C +ENCODING 24124 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +FA02 +ABFE +AA22 +AA22 +AAFA +AA22 +AA32 +AA2A +BBFE +2202 +2202 +23FE +2202 +ENDCHAR +STARTCHAR uni5E3D +ENCODING 24125 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2202 +FBFE +AA02 +ABFE +A800 +A9FC +A904 +B9FC +2104 +21FC +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni5E3E +ENCODING 24126 +BBX 15 15 1 -1 +BITMAP +2040 +2044 +23FC +F848 +A848 +A850 +AFFE +A848 +A9FC +AB04 +BD04 +21FC +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni5E3F +ENCODING 24127 +BBX 15 16 0 -2 +BITMAP +2100 +2178 +2108 +FA08 +AAFE +AE40 +AA40 +AA7C +AA90 +AA10 +AAFE +BA10 +2228 +2228 +2244 +2282 +ENDCHAR +STARTCHAR uni5E40 +ENCODING 24128 +BBX 15 15 1 -1 +BITMAP +2040 +207E +2040 +FBFC +AA04 +AA04 +ABFC +AA04 +AA04 +ABFC +BA04 +2204 +23FC +2108 +2606 +ENDCHAR +STARTCHAR uni5E41 +ENCODING 24129 +BBX 14 16 1 -2 +BITMAP +2000 +27FC +2040 +F880 +ABF8 +AA08 +AA08 +ABF8 +AA08 +ABF8 +AA08 +BA08 +23F8 +2000 +2110 +2208 +ENDCHAR +STARTCHAR uni5E42 +ENCODING 24130 +BBX 15 15 0 -2 +BITMAP +7FFE +4002 +9FF4 +1010 +1FF0 +1010 +1FF0 +0200 +FFFE +0920 +3FF8 +D116 +1150 +1120 +0100 +ENDCHAR +STARTCHAR uni5E43 +ENCODING 24131 +BBX 15 15 1 -1 +BITMAP +2040 +23F8 +2088 +FFFE +A800 +A9F8 +A908 +A9F8 +A810 +A9FC +B910 +2110 +23FE +2010 +2010 +ENDCHAR +STARTCHAR uni5E44 +ENCODING 24132 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +FA04 +ABFC +AA00 +AAF8 +AA40 +AA5C +AAE4 +BA20 +24FC +2420 +2820 +23FE +ENDCHAR +STARTCHAR uni5E45 +ENCODING 24133 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2000 +F9FC +A904 +A904 +A9FC +A800 +ABFE +BA22 +2222 +23FE +2222 +2222 +23FE +ENDCHAR +STARTCHAR uni5E46 +ENCODING 24134 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2208 +FBF8 +AA08 +ABF8 +A900 +ABFC +AC44 +AA44 +AAA4 +BA04 +23F4 +2004 +2028 +2010 +ENDCHAR +STARTCHAR uni5E47 +ENCODING 24135 +BBX 15 15 1 -1 +BITMAP +1008 +7E08 +10FE +FF08 +1048 +7E28 +1028 +1F08 +F038 +0200 +7FF8 +4208 +4208 +4238 +0200 +ENDCHAR +STARTCHAR uni5E48 +ENCODING 24136 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2204 +FA04 +ABFC +AA00 +AA84 +AA48 +AAFC +AA48 +AA48 +BBFE +2448 +2448 +2888 +3108 +ENDCHAR +STARTCHAR uni5E49 +ENCODING 24137 +BBX 15 15 1 -1 +BITMAP +2248 +2248 +27FE +FA48 +AA48 +AA78 +AA00 +ABFC +A840 +AFFE +B950 +2248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni5E4A +ENCODING 24138 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2040 +F840 +AFFC +A800 +ABF8 +AA08 +ABF8 +AA08 +ABF8 +BA08 +23F8 +2110 +2208 +2404 +ENDCHAR +STARTCHAR uni5E4B +ENCODING 24139 +BBX 15 16 0 -2 +BITMAP +1078 +3E48 +2248 +2A86 +FF78 +2248 +2A28 +4210 +4A28 +8546 +0100 +3FF8 +2108 +2128 +2110 +0100 +ENDCHAR +STARTCHAR uni5E4C +ENCODING 24140 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +F9F8 +A908 +A9F8 +AA44 +AA44 +A948 +AFFE +B890 +2090 +2112 +2212 +240E +ENDCHAR +STARTCHAR uni5E4D +ENCODING 24141 +BBX 14 16 1 -2 +BITMAP +203C +23C0 +2044 +FA24 +A928 +A900 +A840 +AB9C +AA04 +AA04 +AB9C +BA04 +2204 +2204 +23FC +2204 +ENDCHAR +STARTCHAR uni5E4E +ENCODING 24142 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +FA04 +A9F8 +A908 +A9F8 +A908 +A908 +A9F8 +B840 +27FE +2000 +2108 +2204 +ENDCHAR +STARTCHAR uni5E4F +ENCODING 24143 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +FA02 +A800 +A9FC +A840 +A8A2 +AB34 +A858 +A894 +BB34 +2052 +2090 +2350 +2020 +ENDCHAR +STARTCHAR uni5E50 +ENCODING 24144 +BBX 15 16 0 -2 +BITMAP +0020 +7924 +48A8 +49FC +4840 +7BFE +4908 +4A24 +4C22 +79FC +4924 +4924 +4934 +4928 +4820 +9820 +ENDCHAR +STARTCHAR uni5E51 +ENCODING 24145 +BBX 15 16 0 -2 +BITMAP +1210 +1A90 +2A90 +4AA0 +8FBE +1044 +2FA4 +6224 +A224 +2FA8 +2AA8 +2A90 +2AA8 +2BA8 +2244 +2282 +ENDCHAR +STARTCHAR uni5E52 +ENCODING 24146 +BBX 14 16 1 -2 +BITMAP +2040 +2080 +23F8 +FA48 +AAF8 +AB18 +AAA8 +AA48 +AAA8 +ABF8 +A880 +B848 +2544 +2514 +2910 +20F0 +ENDCHAR +STARTCHAR uni5E53 +ENCODING 24147 +BBX 15 16 0 -2 +BITMAP +2040 +2088 +21FC +F908 +AA52 +ABFE +A850 +A988 +AE26 +A8C0 +AB10 +B864 +2388 +2030 +20C0 +2700 +ENDCHAR +STARTCHAR uni5E54 +ENCODING 24148 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +F9F8 +A908 +A9F8 +A800 +ABFC +AAA4 +ABFC +B800 +23FC +2088 +2070 +238E +ENDCHAR +STARTCHAR uni5E55 +ENCODING 24149 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +FFFE +0920 +3FF8 +D116 +1130 +0100 +ENDCHAR +STARTCHAR uni5E56 +ENCODING 24150 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2090 +FBFE +AA92 +AA92 +ABFE +A800 +A9FC +A800 +BBFE +2020 +2128 +2626 +2060 +ENDCHAR +STARTCHAR uni5E57 +ENCODING 24151 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2212 +FA16 +ABFE +AA0A +AAEA +AAAA +AAEE +AA0A +BA6A +2396 +2266 +2202 +23FE +ENDCHAR +STARTCHAR uni5E58 +ENCODING 24152 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +27FC +F840 +ABF8 +A840 +AFFC +A800 +ABF8 +AA08 +BBF8 +2208 +23F8 +2110 +260C +ENDCHAR +STARTCHAR uni5E59 +ENCODING 24153 +BBX 14 16 1 -2 +BITMAP +2110 +2110 +27FC +F910 +A800 +ABF8 +AA08 +ABF8 +AA08 +ABF8 +A840 +BBFC +20A0 +2110 +2208 +2404 +ENDCHAR +STARTCHAR uni5E5A +ENCODING 24154 +BBX 14 16 0 -2 +BITMAP +087C +FF48 +0850 +7E48 +0844 +FF54 +1048 +2240 +5FF0 +9010 +1FF0 +1010 +3FF8 +2108 +2118 +0100 +ENDCHAR +STARTCHAR uni5E5B +ENCODING 24155 +BBX 14 16 1 -2 +BITMAP +2040 +23F8 +2110 +F8A0 +AFFC +A800 +ABF8 +AA08 +ABF8 +AA08 +ABF8 +B840 +27FC +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni5E5C +ENCODING 24156 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2208 +FBF8 +AA08 +ABF8 +A840 +AFFC +A800 +ABF8 +AA08 +BBF8 +2040 +2248 +2444 +20C0 +ENDCHAR +STARTCHAR uni5E5D +ENCODING 24157 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2252 +FA52 +ABDE +A800 +A9FC +A924 +A9FC +A924 +A9FC +B820 +23FE +2020 +2020 +2020 +ENDCHAR +STARTCHAR uni5E5E +ENCODING 24158 +BBX 15 15 1 -1 +BITMAP +20A0 +24A4 +22A8 +FFFC +A910 +A8A0 +AFFC +A840 +ABF8 +A840 +BFFE +2040 +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni5E5F +ENCODING 24159 +BBX 15 15 1 -1 +BITMAP +2110 +2114 +27D4 +FA92 +AA90 +AFFE +A810 +ABD2 +AA52 +AA54 +BBD4 +2248 +224A +23DA +2024 +ENDCHAR +STARTCHAR uni5E60 +ENCODING 24160 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +21FE +FB54 +AD54 +A954 +ABFE +A954 +A954 +A954 +AFFE +B800 +2154 +212A +222A +2000 +ENDCHAR +STARTCHAR uni5E61 +ENCODING 24161 +BBX 15 15 1 -1 +BITMAP +2038 +27C0 +2248 +F950 +AFFE +A950 +AA48 +AC44 +A802 +ABF8 +AA48 +23F8 +2248 +2248 +23F8 +ENDCHAR +STARTCHAR uni5E62 +ENCODING 24162 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +F890 +AFFE +A800 +A9F8 +A948 +A9F8 +A948 +B9F8 +2040 +23FC +2040 +27FE +ENDCHAR +STARTCHAR uni5E63 +ENCODING 24163 +BBX 15 15 1 -1 +BITMAP +9240 +5240 +54FE +FE88 +9388 +BA50 +D620 +9258 +9686 +0200 +7FF8 +4208 +4208 +4238 +0200 +ENDCHAR +STARTCHAR uni5E64 +ENCODING 24164 +BBX 15 15 1 -1 +BITMAP +5440 +9240 +10FE +FF88 +8248 +BA50 +AA30 +BA4E +8680 +0200 +7FF8 +4208 +4208 +4238 +0200 +ENDCHAR +STARTCHAR uni5E65 +ENCODING 24165 +BBX 15 16 0 -2 +BITMAP +2124 +20A8 +23FE +FA02 +A8F8 +A888 +A8F8 +A80C +A9F0 +A820 +A9FC +B820 +23FE +2020 +20A0 +2040 +ENDCHAR +STARTCHAR uni5E66 +ENCODING 24166 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FC +4488 +7C50 +43FE +7C20 +A5FC +2420 +3D20 +0100 +3FF8 +2108 +2128 +2110 +0100 +ENDCHAR +STARTCHAR uni5E67 +ENCODING 24167 +BBX 14 16 1 -2 +BITMAP +21F0 +2110 +2110 +F9F0 +A800 +ABB8 +AAA8 +AAA8 +ABB8 +A840 +AFFC +B8E0 +2150 +2248 +2444 +2040 +ENDCHAR +STARTCHAR uni5E68 +ENCODING 24168 +BBX 15 16 0 -2 +BITMAP +2100 +21F8 +2208 +FFFE +AA88 +AB24 +ABFE +AA00 +AAFC +AA00 +AAFC +BA00 +22FC +2484 +24FC +2884 +ENDCHAR +STARTCHAR uni5E69 +ENCODING 24169 +BBX 14 16 1 -2 +BITMAP +2040 +23F8 +2040 +F910 +AFFC +A910 +ABF8 +AA08 +ABF8 +AA08 +ABF8 +BA08 +23F8 +2110 +2208 +2404 +ENDCHAR +STARTCHAR uni5E6A +ENCODING 24170 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +2088 +FBFE +AA02 +A9FC +A800 +ABFE +A840 +A8A2 +AB54 +B8B8 +2354 +2092 +2350 +2020 +ENDCHAR +STARTCHAR uni5E6B +ENCODING 24171 +BBX 15 15 1 -1 +BITMAP +0808 +7EFE +0808 +FF48 +08A8 +7D08 +1FF8 +F010 +1FF0 +1010 +1FF0 +0100 +3FF8 +2108 +2118 +ENDCHAR +STARTCHAR uni5E6C +ENCODING 24172 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F840 +ABF8 +A800 +ABFE +A842 +ABFC +A800 +BFFE +2004 +277E +2524 +270C +ENDCHAR +STARTCHAR uni5E6D +ENCODING 24173 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27FE +F910 +ABFC +AAA4 +AAA4 +ABFC +A812 +ABFE +BA10 +2314 +2298 +222A +24C4 +ENDCHAR +STARTCHAR uni5E6E +ENCODING 24174 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +F904 +AFC4 +A904 +ABBE +A804 +AB94 +AA94 +BB94 +2A04 +2A84 +31C4 +270C +ENDCHAR +STARTCHAR uni5E6F +ENCODING 24175 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +21EE +FA94 +A842 +A800 +ABDE +AA52 +ABD2 +AA52 +ABD2 +BA1A +2294 +2350 +2210 +2010 +ENDCHAR +STARTCHAR uni5E70 +ENCODING 24176 +BBX 14 16 1 -2 +BITMAP +2040 +27FC +2444 +FBF8 +A840 +A9F0 +A840 +ABF8 +A840 +ABF8 +AAA8 +BBF8 +2080 +2548 +2514 +28F4 +ENDCHAR +STARTCHAR uni5E71 +ENCODING 24177 +BBX 15 16 0 -2 +BITMAP +23DE +2252 +23DE +FA52 +ABDE +AA22 +AAFA +AA22 +AAFA +AAAA +AAFA +BAAA +22FA +2272 +22AA +2226 +ENDCHAR +STARTCHAR uni5E72 +ENCODING 24178 +BBX 13 14 2 -1 +BITMAP +7FF0 +0200 +0200 +0200 +0200 +0200 +FFF8 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni5E73 +ENCODING 24179 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +1110 +1110 +0920 +0920 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni5E74 +ENCODING 24180 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +1FFC +2080 +4080 +8080 +1FF8 +1080 +1080 +1080 +FFFE +0080 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni5E75 +ENCODING 24181 +BBX 15 14 1 -1 +BITMAP +7C7C +1010 +1010 +1010 +1010 +1010 +FEFE +1010 +1010 +1010 +1010 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni5E76 +ENCODING 24182 +BBX 15 15 1 -1 +BITMAP +1010 +0810 +0820 +7FFC +0440 +0440 +0440 +0440 +FFFE +0440 +0840 +0840 +1040 +2040 +4040 +ENDCHAR +STARTCHAR uni5E77 +ENCODING 24183 +BBX 15 15 1 -1 +BITMAP +0408 +0810 +1020 +FEFC +1020 +1020 +1220 +1C20 +31FE +D020 +1020 +1020 +2020 +2020 +4020 +ENDCHAR +STARTCHAR uni5E78 +ENCODING 24184 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +7FF0 +0200 +0200 +FFF8 +2020 +1040 +FFF8 +0200 +0200 +7FF0 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni5E79 +ENCODING 24185 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FE50 +1088 +7D06 +46F8 +7C20 +4420 +4420 +7DFE +1020 +FE20 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni5E7A +ENCODING 24186 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +0400 +0800 +1020 +2020 +1040 +0880 +0500 +0220 +0210 +0408 +081C +10E4 +FF02 +ENDCHAR +STARTCHAR uni5E7B +ENCODING 24187 +BBX 14 15 1 -1 +BITMAP +1000 +10FC +1004 +2004 +2404 +6404 +1804 +0804 +1004 +1204 +2104 +2704 +F888 +0088 +0030 +ENDCHAR +STARTCHAR uni5E7C +ENCODING 24188 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +1020 +24FC +2424 +4824 +2824 +1024 +1424 +2224 +2244 +4D44 +F144 +0084 +0118 +ENDCHAR +STARTCHAR uni5E7D +ENCODING 24189 +BBX 14 15 1 -1 +BITMAP +0200 +1220 +9224 +A244 +A244 +CA94 +AA54 +9224 +9224 +A244 +AA54 +D6AC +E3C4 +8204 +FFFC +ENDCHAR +STARTCHAR uni5E7E +ENCODING 24190 +BBX 15 15 1 -1 +BITMAP +1110 +2524 +4948 +3130 +1524 +2D4E +F3F2 +0108 +7FFE +4080 +4088 +7050 +4C62 +8192 +860C +ENDCHAR +STARTCHAR uni5E7F +ENCODING 24191 +BBX 15 14 1 0 +BITMAP +0100 +0100 +7FFE +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +4000 +8000 +8000 +ENDCHAR +STARTCHAR uni5E80 +ENCODING 24192 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2000 +2200 +2204 +2218 +2260 +2380 +2200 +2202 +2202 +4202 +41FE +8000 +ENDCHAR +STARTCHAR uni5E81 +ENCODING 24193 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4000 +4000 +5FFC +4080 +4080 +4080 +4080 +4080 +8080 +8080 +0080 +0380 +ENDCHAR +STARTCHAR uni5E82 +ENCODING 24194 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2080 +2080 +2080 +2080 +2080 +2140 +2140 +2220 +4220 +4410 +8808 +1006 +ENDCHAR +STARTCHAR uni5E83 +ENCODING 24195 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +4000 +4200 +4200 +4200 +4240 +4220 +4410 +8408 +8438 +89C4 +3E04 +ENDCHAR +STARTCHAR uni5E84 +ENCODING 24196 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FF8 +2000 +2080 +2080 +2080 +2FF8 +2080 +2080 +4080 +4080 +8080 +0080 +1FFC +ENDCHAR +STARTCHAR uni5E85 +ENCODING 24197 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +3FFE +2000 +2100 +2100 +2220 +2220 +2440 +2880 +2100 +2208 +4404 +4FFE +8402 +ENDCHAR +STARTCHAR uni5E86 +ENCODING 24198 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2080 +2080 +2080 +2FFC +2080 +2140 +2140 +2220 +4220 +4410 +8808 +1006 +ENDCHAR +STARTCHAR uni5E87 +ENCODING 24199 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4000 +4840 +4840 +484C +4F70 +4840 +4840 +4840 +4840 +8842 +8F42 +383E +ENDCHAR +STARTCHAR uni5E88 +ENCODING 24200 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2140 +2220 +2410 +2908 +3086 +2080 +2FF0 +2010 +4020 +4020 +8040 +0080 +ENDCHAR +STARTCHAR uni5E89 +ENCODING 24201 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +2040 +2FFE +2040 +2444 +2444 +2444 +27FC +2042 +2042 +4042 +403E +8000 +ENDCHAR +STARTCHAR uni5E8A +ENCODING 24202 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +4080 +4080 +5FFC +4280 +42C0 +44A0 +4890 +9088 +A086 +0080 +0080 +ENDCHAR +STARTCHAR uni5E8B +ENCODING 24203 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2080 +3FFC +2080 +2080 +2FF0 +2410 +2220 +2140 +4080 +4160 +8618 +3806 +ENDCHAR +STARTCHAR uni5E8C +ENCODING 24204 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2000 +2FFC +2020 +2420 +2820 +2FFE +20A0 +2120 +4620 +5820 +80A0 +0040 +ENDCHAR +STARTCHAR uni5E8D +ENCODING 24205 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +201C +27E0 +2400 +2400 +27FE +2420 +2420 +2420 +4820 +4820 +9020 +2020 +ENDCHAR +STARTCHAR uni5E8E +ENCODING 24206 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +2040 +20A0 +2110 +2208 +2D16 +2110 +2110 +2110 +4110 +4210 +8210 +0410 +ENDCHAR +STARTCHAR uni5E8F +ENCODING 24207 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +4FF8 +4010 +4220 +4140 +7FFE +4084 +4088 +8090 +8080 +0080 +0380 +ENDCHAR +STARTCHAR uni5E90 +ENCODING 24208 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2100 +2080 +27F8 +2408 +2408 +2408 +27F8 +2408 +2400 +4400 +4800 +8800 +1000 +ENDCHAR +STARTCHAR uni5E91 +ENCODING 24209 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2000 +2FFC +2080 +2080 +3FFE +2140 +2140 +2240 +4242 +4442 +883E +1000 +ENDCHAR +STARTCHAR uni5E92 +ENCODING 24210 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +3FFE +2080 +2080 +2080 +2080 +2FFC +2080 +2080 +2090 +2088 +4088 +4080 +9FFE +ENDCHAR +STARTCHAR uni5E93 +ENCODING 24211 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2100 +2100 +3FFC +2200 +2480 +2880 +2FF8 +2080 +2080 +5FFE +4080 +8080 +0080 +ENDCHAR +STARTCHAR uni5E94 +ENCODING 24212 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +3FFE +2000 +2000 +2104 +2884 +2484 +2448 +2248 +2210 +2210 +4020 +4040 +9FFE +ENDCHAR +STARTCHAR uni5E95 +ENCODING 24213 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +2000 +2018 +27E0 +2440 +2440 +27FE +2420 +2420 +4790 +4C12 +800A +0FE4 +ENDCHAR +STARTCHAR uni5E96 +ENCODING 24214 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4400 +4400 +4FF8 +4808 +5FC8 +6848 +4848 +4FC8 +4830 +8800 +8804 +07FC +ENDCHAR +STARTCHAR uni5E97 +ENCODING 24215 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +2000 +2080 +2080 +20FE +2080 +2080 +2FF8 +2808 +4808 +4808 +8808 +0FF8 +ENDCHAR +STARTCHAR uni5E98 +ENCODING 24216 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2000 +27FC +2444 +2444 +27FC +2444 +2444 +27FC +2444 +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni5E99 +ENCODING 24217 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2080 +2080 +2FF8 +2888 +2888 +2888 +2FF8 +2888 +4888 +4888 +8FF8 +0808 +ENDCHAR +STARTCHAR uni5E9A +ENCODING 24218 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4100 +5FF8 +4108 +4108 +7FFE +4108 +4108 +5FF8 +8280 +8440 +1830 +600C +ENDCHAR +STARTCHAR uni5E9B +ENCODING 24219 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2110 +2110 +2512 +2514 +25D8 +2510 +2510 +2510 +2512 +45D2 +5E12 +880E +ENDCHAR +STARTCHAR uni5E9C +ENCODING 24220 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +4410 +4410 +4FFE +4810 +5910 +6910 +4890 +8810 +8810 +8810 +0870 +ENDCHAR +STARTCHAR uni5E9D +ENCODING 24221 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2100 +2100 +23F8 +2610 +2920 +20C0 +2330 +3C0E +20C0 +4020 +4300 +80C0 +0020 +ENDCHAR +STARTCHAR uni5E9E +ENCODING 24222 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2220 +2210 +2200 +2FFC +2240 +2240 +2248 +2450 +2460 +4842 +48C2 +933E +2000 +ENDCHAR +STARTCHAR uni5E9F +ENCODING 24223 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2490 +2888 +2FFE +2100 +21FC +2284 +2288 +2450 +2420 +4850 +5188 +8606 +ENDCHAR +STARTCHAR uni5EA0 +ENCODING 24224 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4410 +4220 +5FFC +4080 +4080 +4FF8 +4080 +4080 +5FFE +8080 +8080 +0080 +ENDCHAR +STARTCHAR uni5EA1 +ENCODING 24225 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2040 +3FFE +2080 +2100 +2284 +2688 +2A50 +3220 +4210 +4288 +8306 +0200 +ENDCHAR +STARTCHAR uni5EA2 +ENCODING 24226 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +3FFE +2000 +2000 +2FFC +2100 +2210 +27F8 +2088 +2080 +2FFC +4080 +4080 +BFFE +ENDCHAR +STARTCHAR uni5EA3 +ENCODING 24227 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2120 +2120 +2924 +2528 +2130 +2120 +2330 +2528 +2924 +2220 +4222 +4422 +881E +ENDCHAR +STARTCHAR uni5EA4 +ENCODING 24228 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2040 +27FC +2040 +2040 +3FFE +2000 +2010 +2FFC +4210 +4110 +8150 +0020 +ENDCHAR +STARTCHAR uni5EA5 +ENCODING 24229 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4440 +4440 +4440 +4BFC +4950 +5950 +6950 +4A48 +8A48 +8C44 +0840 +0840 +ENDCHAR +STARTCHAR uni5EA6 +ENCODING 24230 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +2000 +2210 +2FFC +2210 +23F0 +2000 +2FF8 +2210 +4120 +40C0 +8330 +1C0E +ENDCHAR +STARTCHAR uni5EA7 +ENCODING 24231 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4000 +4490 +4490 +4490 +4AA8 +4AA8 +51C4 +4080 +9FFC +8080 +8080 +3FFE +ENDCHAR +STARTCHAR uni5EA8 +ENCODING 24232 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2088 +27F0 +20A0 +3FFE +2080 +2FF0 +2620 +3840 +47FC +4040 +8140 +0080 +ENDCHAR +STARTCHAR uni5EA9 +ENCODING 24233 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2140 +2220 +2410 +3BEC +2080 +2080 +2FF8 +2080 +4490 +4888 +9284 +0100 +ENDCHAR +STARTCHAR uni5EAA +ENCODING 24234 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4820 +4820 +49FC +7E20 +4820 +49F8 +4888 +4E88 +7850 +8820 +88D8 +1B06 +ENDCHAR +STARTCHAR uni5EAB +ENCODING 24235 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +7FFE +4080 +5FFC +4080 +4FF8 +4888 +4FF8 +4888 +4FF8 +8080 +BFFE +8080 +0080 +ENDCHAR +STARTCHAR uni5EAC +ENCODING 24236 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4880 +4840 +7FFE +4820 +49C8 +4C10 +54E0 +5404 +9418 +A4E0 +2402 +43FE +ENDCHAR +STARTCHAR uni5EAD +ENCODING 24237 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +2000 +2018 +3EE0 +2420 +2820 +2FFE +2220 +2A20 +4A20 +44FC +8B00 +10FE +ENDCHAR +STARTCHAR uni5EAE +ENCODING 24238 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2FFC +2120 +2FFC +2924 +2924 +2A1C +2C04 +2FFC +4804 +4804 +8FFC +0804 +ENDCHAR +STARTCHAR uni5EAF +ENCODING 24239 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2048 +2044 +2FFE +2040 +27FC +2444 +27FC +2444 +27FC +2444 +4444 +4454 +8408 +ENDCHAR +STARTCHAR uni5EB0 +ENCODING 24240 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2208 +2108 +2110 +27FC +2110 +2110 +2110 +2FFE +2110 +4110 +4210 +8410 +0810 +ENDCHAR +STARTCHAR uni5EB1 +ENCODING 24241 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2080 +2FFC +2080 +3FFE +2408 +2904 +33F2 +2610 +4920 +40C0 +8730 +380E +ENDCHAR +STARTCHAR uni5EB2 +ENCODING 24242 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +2040 +2FFE +2040 +2248 +2248 +2554 +28E2 +2150 +4248 +4C46 +8040 +0040 +ENDCHAR +STARTCHAR uni5EB3 +ENCODING 24243 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2100 +27FC +2444 +27FC +2484 +27FC +2120 +2220 +3FFE +4020 +4020 +8020 +ENDCHAR +STARTCHAR uni5EB4 +ENCODING 24244 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2210 +2210 +2FFC +2210 +2210 +3FFE +2000 +27F8 +2408 +2408 +47F8 +4408 +8408 +07F8 +ENDCHAR +STARTCHAR uni5EB5 +ENCODING 24245 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +2100 +3FFE +22A0 +2490 +2FF8 +388E +2FF8 +4888 +4888 +8FF8 +0082 +007E +ENDCHAR +STARTCHAR uni5EB6 +ENCODING 24246 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +2000 +2210 +2210 +3FFE +2210 +2210 +2210 +23F0 +4000 +4A48 +9124 +2122 +ENDCHAR +STARTCHAR uni5EB7 +ENCODING 24247 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4100 +5FF0 +4110 +7FFC +4110 +5FF0 +5108 +4990 +8340 +8D30 +310C +0700 +ENDCHAR +STARTCHAR uni5EB8 +ENCODING 24248 +BBX 15 15 1 -1 +BITMAP +0100 +7FFE +4080 +4FF8 +4088 +7FFE +4088 +4FF8 +4888 +4FF8 +4888 +4FF8 +8888 +8888 +0898 +ENDCHAR +STARTCHAR uni5EB9 +ENCODING 24249 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +4220 +5FFC +4220 +43E0 +4000 +4FF8 +4808 +4FF8 +8840 +9030 +200E +ENDCHAR +STARTCHAR uni5EBA +ENCODING 24250 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2210 +2488 +2924 +2210 +27F8 +2088 +2080 +2FFC +21C0 +42A0 +4498 +9886 +0080 +ENDCHAR +STARTCHAR uni5EBB +ENCODING 24251 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2220 +2220 +3FFC +2220 +2220 +23E0 +2000 +2410 +2410 +4410 +4A28 +9144 +2082 +ENDCHAR +STARTCHAR uni5EBC +ENCODING 24252 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2800 +29FC +2820 +2E40 +29FC +2904 +2924 +2924 +2B24 +2D24 +4850 +4088 +8304 +ENDCHAR +STARTCHAR uni5EBD +ENCODING 24253 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +27F8 +2488 +27F8 +2488 +27F8 +2080 +2FFC +2884 +48A4 +4BF4 +8914 +0808 +ENDCHAR +STARTCHAR uni5EBE +ENCODING 24254 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFE +2080 +26B8 +2888 +2EB8 +2888 +2888 +2FF8 +2080 +4140 +4220 +8C18 +3006 +ENDCHAR +STARTCHAR uni5EBF +ENCODING 24255 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4220 +4220 +5FFC +4220 +4220 +4000 +4FF8 +4888 +4FF8 +8888 +8888 +0FF8 +ENDCHAR +STARTCHAR uni5EC0 +ENCODING 24256 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +2FFE +2842 +2248 +24B0 +2308 +2C04 +27F8 +2208 +2110 +40E0 +4318 +9C06 +ENDCHAR +STARTCHAR uni5EC1 +ENCODING 24257 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +5F04 +5124 +5F24 +5124 +5124 +5F24 +5124 +5124 +9F04 +8A04 +319C +ENDCHAR +STARTCHAR uni5EC2 +ENCODING 24258 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +4400 +447C +5F44 +4444 +447C +4E44 +4D44 +557C +9444 +A444 +047C +ENDCHAR +STARTCHAR uni5EC3 +ENCODING 24259 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4000 +4790 +5264 +4C28 +4818 +77F6 +4220 +4220 +9FFC +8220 +0422 +0822 +301E +ENDCHAR +STARTCHAR uni5EC4 +ENCODING 24260 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2F78 +2948 +2948 +2F86 +2900 +297C +2F44 +2844 +2A28 +4910 +4B28 +8D46 +ENDCHAR +STARTCHAR uni5EC5 +ENCODING 24261 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +3FFE +2080 +2FFC +2080 +3FFE +2200 +2408 +2FFC +2000 +2FFC +4924 +4924 +BFFE +ENDCHAR +STARTCHAR uni5EC6 +ENCODING 24262 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4200 +5FF8 +5108 +5FF8 +5108 +5108 +5FF8 +4490 +44A8 +84B4 +8882 +307E +ENDCHAR +STARTCHAR uni5EC7 +ENCODING 24263 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2080 +277C +2424 +2524 +24A4 +2554 +2648 +2080 +27FC +2444 +47FC +4444 +87FC +0404 +ENDCHAR +STARTCHAR uni5EC8 +ENCODING 24264 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4000 +5FFC +4100 +47F0 +4410 +47F0 +4410 +47F0 +4410 +87F8 +9A10 +01E0 +3E1E +ENDCHAR +STARTCHAR uni5EC9 +ENCODING 24265 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4410 +4220 +7FFC +4240 +5FF8 +4248 +7FFE +4248 +5FF8 +8A50 +1248 +6246 +0240 +ENDCHAR +STARTCHAR uni5ECA +ENCODING 24266 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4400 +4478 +5F48 +5148 +5F50 +5148 +5F48 +5044 +9244 +9244 +9D58 +3140 +ENDCHAR +STARTCHAR uni5ECB +ENCODING 24267 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFE +2080 +26B8 +2888 +2EB8 +2888 +2EB8 +2080 +2FFC +4408 +4230 +81C0 +3E3E +ENDCHAR +STARTCHAR uni5ECC +ENCODING 24268 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2220 +3FFE +2222 +3FFE +2400 +27FC +2400 +27FE +2002 +224A +4926 +500A +8004 +ENDCHAR +STARTCHAR uni5ECD +ENCODING 24269 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2400 +221E +2F92 +2014 +2898 +2514 +3FD2 +2012 +2F9A +4894 +4890 +8F90 +0890 +ENDCHAR +STARTCHAR uni5ECE +ENCODING 24270 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +29FE +2820 +28FC +2E84 +28FC +2884 +28FC +2A84 +4CFC +4800 +8048 +0084 +ENDCHAR +STARTCHAR uni5ECF +ENCODING 24271 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +5E78 +5248 +5E4E +5280 +5E00 +50FC +5244 +9C28 +9010 +1128 +0FC6 +ENDCHAR +STARTCHAR uni5ED0 +ENCODING 24272 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +5E7C +5208 +5E48 +5248 +5EFE +5090 +5218 +9C28 +9028 +114A +0F86 +ENDCHAR +STARTCHAR uni5ED1 +ENCODING 24273 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2410 +3FFE +2410 +27F0 +2080 +2FF8 +2888 +2FF8 +2080 +3FFC +4080 +4FF8 +8080 +3FFE +ENDCHAR +STARTCHAR uni5ED2 +ENCODING 24274 +BBX 15 15 1 -1 +BITMAP +0100 +7FFE +4440 +4440 +7F7E +4444 +4484 +7F44 +4448 +7FA8 +4810 +4F10 +8928 +9144 +2382 +ENDCHAR +STARTCHAR uni5ED3 +ENCODING 24275 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4400 +7FBC +4024 +5F24 +5124 +5F28 +4024 +5F22 +4222 +BFA2 +842C +0C20 +ENDCHAR +STARTCHAR uni5ED4 +ENCODING 24276 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2FF8 +2888 +3FFE +2888 +2FF8 +2490 +27F0 +2100 +3FFE +4410 +43E0 +9C1C +ENDCHAR +STARTCHAR uni5ED5 +ENCODING 24277 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2010 +2F28 +2944 +2A92 +2C7C +2A08 +2910 +297E +2D00 +2AFE +4820 +4844 +88FE +ENDCHAR +STARTCHAR uni5ED6 +ENCODING 24278 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +7E7C +4A14 +56AC +4954 +4630 +788E +4320 +8CC4 +8318 +00E0 +0F00 +ENDCHAR +STARTCHAR uni5ED7 +ENCODING 24279 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +22A8 +22A8 +2FFC +22AA +24E6 +2800 +2FFE +2842 +23F8 +4248 +4248 +8258 +0040 +ENDCHAR +STARTCHAR uni5ED8 +ENCODING 24280 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2040 +2FFC +2920 +2FFC +2924 +2FFC +2A20 +2A24 +4BB8 +5224 +92A4 +231C +ENDCHAR +STARTCHAR uni5ED9 +ENCODING 24281 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +4FF8 +4888 +4FF8 +4888 +4FF8 +4220 +5FFC +4220 +BFFE +8410 +180C +ENDCHAR +STARTCHAR uni5EDA +ENCODING 24282 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4400 +7F84 +4404 +5F7E +4004 +5F24 +5114 +5F14 +4104 +9204 +8F84 +381C +ENDCHAR +STARTCHAR uni5EDB +ENCODING 24283 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +4FF8 +4888 +4FF8 +4888 +4FF8 +4080 +5FFC +8888 +B7F6 +0080 +3FFE +ENDCHAR +STARTCHAR uni5EDC +ENCODING 24284 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +27FC +2404 +27FC +2444 +25F8 +2450 +27FE +2440 +24F8 +4988 +4AF8 +9488 +00F8 +ENDCHAR +STARTCHAR uni5EDD +ENCODING 24285 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4800 +490C +5FB0 +4920 +4F3E +4924 +4F24 +4924 +9FA4 +8944 +10C4 +2004 +ENDCHAR +STARTCHAR uni5EDE +ENCODING 24286 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2200 +2220 +2520 +28BE +3742 +2294 +2F90 +2210 +3290 +4A28 +43A8 +9C44 +0882 +ENDCHAR +STARTCHAR uni5EDF +ENCODING 24287 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4400 +5F7C +4444 +5F44 +5164 +5F54 +5144 +5F64 +8454 +9F44 +8444 +048C +ENDCHAR +STARTCHAR uni5EE0 +ENCODING 24288 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +7FFE +4210 +4A90 +4ABE +4224 +5FD4 +5054 +5748 +5548 +5548 +9754 +9054 +91E2 +ENDCHAR +STARTCHAR uni5EE1 +ENCODING 24289 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4200 +4400 +4FF8 +5550 +4550 +7FFE +4550 +4550 +4FF8 +8000 +8924 +1092 +ENDCHAR +STARTCHAR uni5EE2 +ENCODING 24290 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4000 +4FC8 +5232 +4C0C +7E7A +4248 +5E8E +5000 +5EFC +8244 +8238 +1CC6 +ENDCHAR +STARTCHAR uni5EE3 +ENCODING 24291 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4220 +5FFC +4220 +7FFE +4080 +4FF8 +4888 +4FF8 +8888 +8FF8 +0410 +180C +ENDCHAR +STARTCHAR uni5EE4 +ENCODING 24292 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2080 +3FFC +2080 +2FF8 +2888 +2FF8 +2888 +2FF8 +2080 +3FFC +40A4 +5F3A +9122 +1F1E +ENDCHAR +STARTCHAR uni5EE5 +ENCODING 24293 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2140 +2630 +3BEC +2000 +2FF8 +2AA8 +29C8 +2FF8 +2000 +27F0 +4410 +47F0 +8410 +07F0 +ENDCHAR +STARTCHAR uni5EE6 +ENCODING 24294 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2010 +2788 +24BE +2480 +27A2 +2494 +243E +2F88 +2C88 +54BE +4788 +8488 +0008 +ENDCHAR +STARTCHAR uni5EE7 +ENCODING 24295 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2040 +27FC +2248 +2248 +2554 +3FFE +2000 +27FC +2404 +25F4 +4514 +45F4 +8404 +07FC +ENDCHAR +STARTCHAR uni5EE8 +ENCODING 24296 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4800 +4EFC +5224 +6424 +5F4C +5550 +5F7C +5550 +5F90 +917E +9110 +2710 +ENDCHAR +STARTCHAR uni5EE9 +ENCODING 24297 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4080 +7FFE +4A28 +4BE8 +4808 +4FF8 +400C +5FF0 +8080 +BFFE +0490 +388E +ENDCHAR +STARTCHAR uni5EEA +ENCODING 24298 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2040 +2FFE +2000 +27FC +2404 +25F4 +2514 +27FC +2000 +27FC +4000 +4FFE +8248 +04C4 +ENDCHAR +STARTCHAR uni5EEB +ENCODING 24299 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +2EEE +2A22 +2AAA +2A66 +2EAA +2A10 +2A28 +2E54 +2AAA +4A50 +5224 +9248 +2610 +ENDCHAR +STARTCHAR uni5EEC +ENCODING 24300 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4100 +5FFC +5104 +5FE0 +5108 +57F8 +5490 +57F0 +9490 +AFFC +0924 +3FFE +ENDCHAR +STARTCHAR uni5EED +ENCODING 24301 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2010 +237C +2E10 +227C +2F10 +22FE +2644 +277C +2AC4 +2A7C +5244 +427C +8228 +0244 +ENDCHAR +STARTCHAR uni5EEE +ENCODING 24302 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +2FBE +28A2 +2FBE +28A2 +2FBE +28A2 +2FBE +2514 +28A2 +4FFE +4310 +80E0 +0F1C +ENDCHAR +STARTCHAR uni5EEF +ENCODING 24303 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2400 +2722 +2914 +323E +2F88 +2A88 +2F9C +2A88 +2F88 +403E +5548 +9548 +0008 +ENDCHAR +STARTCHAR uni5EF0 +ENCODING 24304 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4020 +7E20 +55FC +5C20 +55FC +5554 +5D54 +55FC +9420 +9C54 +354A +0538 +ENDCHAR +STARTCHAR uni5EF1 +ENCODING 24305 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +52A2 +6524 +5E7E +4AC8 +4E48 +407E +5F48 +5548 +9F7E +9048 +1148 +0F7E +ENDCHAR +STARTCHAR uni5EF2 +ENCODING 24306 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +2FBE +2514 +271C +2554 +2FFE +2920 +2FFC +2924 +2FFC +4A24 +4BB8 +9222 +239E +ENDCHAR +STARTCHAR uni5EF3 +ENCODING 24307 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4010 +7EFE +5210 +5EFE +52AA +7EFE +4200 +7AFE +9214 +BAAA +12A4 +3A9C +ENDCHAR +STARTCHAR uni5EF4 +ENCODING 24308 +BBX 15 14 1 -1 +BITMAP +F800 +1000 +1000 +2000 +7800 +0800 +4800 +5000 +5000 +2000 +2000 +5000 +4E00 +81FE +ENDCHAR +STARTCHAR uni5EF5 +ENCODING 24309 +BBX 15 15 0 -2 +BITMAP +0124 +F924 +0924 +1248 +1248 +2490 +7A48 +0A48 +0924 +4924 +3124 +1000 +2C00 +43FE +8000 +ENDCHAR +STARTCHAR uni5EF6 +ENCODING 24310 +BBX 15 15 1 -1 +BITMAP +0038 +03C0 +F840 +1040 +2040 +2240 +7278 +1240 +1240 +9240 +5240 +27FC +5000 +4C00 +83FE +ENDCHAR +STARTCHAR uni5EF7 +ENCODING 24311 +BBX 15 14 1 -1 +BITMAP +0038 +F3C0 +1040 +1040 +2040 +FFFE +1040 +5040 +5040 +5040 +27FC +3000 +4C00 +83FE +ENDCHAR +STARTCHAR uni5EF8 +ENCODING 24312 +BBX 15 15 1 -1 +BITMAP +0020 +F820 +1020 +13FE +2222 +7A22 +0A22 +4BFE +5222 +5222 +2222 +23FE +5000 +4E00 +81FE +ENDCHAR +STARTCHAR uni5EF9 +ENCODING 24313 +BBX 15 15 1 -1 +BITMAP +0040 +FC40 +1080 +13FC +2204 +2204 +7A04 +0BFC +5204 +5204 +2204 +23FC +5000 +4E00 +81FE +ENDCHAR +STARTCHAR uni5EFA +ENCODING 24314 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F3F8 +2048 +2FFE +4048 +F3F8 +1040 +53F8 +5040 +67FC +2040 +3040 +4C40 +83FE +ENDCHAR +STARTCHAR uni5EFB +ENCODING 24315 +BBX 15 14 1 -1 +BITMAP +03FC +FA04 +1204 +22F4 +4294 +7294 +1294 +92F4 +9204 +5204 +63FC +3000 +4E00 +81FE +ENDCHAR +STARTCHAR uni5EFC +ENCODING 24316 +BBX 15 14 1 -1 +BITMAP +F7FE +10A0 +10A0 +23FC +22A4 +72A4 +12A4 +12BC +9304 +5204 +2204 +53FC +4C00 +83FE +ENDCHAR +STARTCHAR uni5EFD +ENCODING 24317 +BBX 15 14 1 -1 +BITMAP +FBFC +1294 +2294 +42F4 +F294 +1294 +12F4 +9294 +9294 +5294 +23FC +5000 +4C00 +83FE +ENDCHAR +STARTCHAR uni5EFE +ENCODING 24318 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +0820 +0820 +0820 +FFFE +0820 +0820 +0820 +0820 +1020 +1020 +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni5EFF +ENCODING 24319 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +0820 +0820 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +0820 +0820 +0820 +0FE0 +ENDCHAR +STARTCHAR uni5F00 +ENCODING 24320 +BBX 15 14 1 -1 +BITMAP +1FF8 +0420 +0420 +0420 +0420 +FFFE +0420 +0420 +0420 +0420 +0820 +0820 +1020 +6020 +ENDCHAR +STARTCHAR uni5F01 +ENCODING 24321 +BBX 15 15 1 -1 +BITMAP +0400 +0420 +0810 +11E8 +7E04 +0440 +0440 +FFFE +0440 +0440 +0840 +0840 +1040 +2040 +4040 +ENDCHAR +STARTCHAR uni5F02 +ENCODING 24322 +BBX 15 14 1 -1 +BITMAP +3FF8 +0008 +0008 +3FF8 +2000 +2004 +1FFC +0420 +0420 +FFFE +0420 +0820 +1020 +6020 +ENDCHAR +STARTCHAR uni5F03 +ENCODING 24323 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0200 +0410 +08E8 +3F24 +0420 +0420 +FFFE +0420 +0420 +0820 +1020 +6020 +ENDCHAR +STARTCHAR uni5F04 +ENCODING 24324 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +0100 +1FF0 +0100 +0100 +7FFC +0820 +0820 +FFFE +0820 +1020 +1020 +2020 +ENDCHAR +STARTCHAR uni5F05 +ENCODING 24325 +BBX 15 16 0 -2 +BITMAP +0440 +0820 +1010 +2FE8 +C426 +0420 +0820 +10A0 +6040 +0820 +0820 +FFFE +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni5F06 +ENCODING 24326 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +3FF8 +0100 +FFFE +0400 +0820 +1FF0 +0010 +0820 +0820 +FFFE +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni5F07 +ENCODING 24327 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0C60 +3018 +CFE6 +0000 +1FF0 +1010 +1010 +1FF0 +0420 +FFFE +0420 +0820 +3020 +ENDCHAR +STARTCHAR uni5F08 +ENCODING 24328 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +2448 +4444 +8842 +10C0 +0420 +0420 +FFFE +0420 +0420 +0820 +3020 +ENDCHAR +STARTCHAR uni5F09 +ENCODING 24329 +BBX 15 15 1 -1 +BITMAP +0820 +4820 +4820 +7BFE +0820 +F820 +2820 +49FC +8800 +0420 +FFFE +0420 +0420 +0820 +3020 +ENDCHAR +STARTCHAR uni5F0A +ENCODING 24330 +BBX 15 15 1 -1 +BITMAP +9240 +5240 +54FE +FE88 +9388 +BA50 +D620 +9258 +9686 +0420 +FFFE +0420 +0820 +1020 +6020 +ENDCHAR +STARTCHAR uni5F0B +ENCODING 24331 +BBX 15 15 1 -1 +BITMAP +0220 +0210 +0210 +0200 +FFFE +0200 +0200 +0200 +0100 +0100 +0100 +0080 +0042 +0022 +001C +ENDCHAR +STARTCHAR uni5F0C +ENCODING 24332 +BBX 15 15 1 -1 +BITMAP +0048 +0044 +0040 +FFFE +0040 +0040 +0040 +0040 +0020 +0020 +0F20 +F010 +0012 +000A +0004 +ENDCHAR +STARTCHAR uni5F0D +ENCODING 24333 +BBX 15 15 1 -1 +BITMAP +0048 +0044 +0040 +FFFE +0040 +0040 +0040 +7E40 +0020 +0020 +0020 +0010 +0F92 +F00A +0004 +ENDCHAR +STARTCHAR uni5F0E +ENCODING 24334 +BBX 15 15 1 -1 +BITMAP +0050 +0048 +0048 +FFFE +0040 +0040 +0040 +7F40 +0040 +0020 +3E20 +0020 +0012 +FF94 +0008 +ENDCHAR +STARTCHAR uni5F0F +ENCODING 24335 +BBX 15 15 1 -1 +BITMAP +0048 +0044 +0040 +FFFE +0040 +0040 +7F40 +0840 +0820 +0820 +0820 +0B10 +3C12 +C00A +0004 +ENDCHAR +STARTCHAR uni5F10 +ENCODING 24336 +BBX 15 15 1 -1 +BITMAP +0080 +3C90 +0088 +0080 +FFFE +0040 +0040 +0040 +7E40 +0020 +0020 +0010 +0712 +F80A +0004 +ENDCHAR +STARTCHAR uni5F11 +ENCODING 24337 +BBX 15 15 1 -1 +BITMAP +4414 +2812 +1010 +2BFE +4410 +9010 +1010 +FDD0 +1090 +3890 +3490 +5088 +90CA +130A +1004 +ENDCHAR +STARTCHAR uni5F12 +ENCODING 24338 +BBX 15 16 0 -2 +BITMAP +4410 +2814 +1012 +2810 +45FE +1010 +1410 +11D0 +FC90 +3090 +3890 +5488 +50EA +938A +1006 +1002 +ENDCHAR +STARTCHAR uni5F13 +ENCODING 24339 +BBX 11 14 3 -1 +BITMAP +FFC0 +0040 +0040 +7FC0 +4000 +4000 +FFE0 +8020 +0020 +0020 +0020 +0040 +0040 +0380 +ENDCHAR +STARTCHAR uni5F14 +ENCODING 24340 +BBX 13 13 2 -1 +BITMAP +FFF0 +0210 +0210 +7FF0 +4200 +4200 +7FF8 +0208 +0208 +0208 +0230 +0200 +0200 +ENDCHAR +STARTCHAR uni5F15 +ENCODING 24341 +BBX 13 14 1 -1 +BITMAP +FE08 +0208 +0208 +7E08 +4008 +4008 +4008 +7E08 +0208 +0208 +0208 +0408 +0408 +3808 +ENDCHAR +STARTCHAR uni5F16 +ENCODING 24342 +BBX 15 14 1 -1 +BITMAP +7FF0 +0010 +0010 +3FF0 +2000 +2000 +3FF8 +0008 +0008 +0010 +0010 +01E0 +0000 +FFFE +ENDCHAR +STARTCHAR uni5F17 +ENCODING 24343 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +FFFC +0444 +0444 +7FFC +4440 +4440 +7FFE +0442 +0442 +0842 +1042 +205C +C040 +ENDCHAR +STARTCHAR uni5F18 +ENCODING 24344 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +0840 +0840 +7840 +4040 +4040 +4040 +7890 +0888 +0888 +0884 +090E +0932 +77C2 +ENDCHAR +STARTCHAR uni5F19 +ENCODING 24345 +BBX 14 15 1 -2 +BITMAP +F9FC +0820 +0820 +0820 +F820 +8020 +83FC +8020 +F820 +0820 +0820 +0820 +0820 +50A0 +2040 +ENDCHAR +STARTCHAR uni5F1A +ENCODING 24346 +BBX 13 16 1 -2 +BITMAP +1040 +0840 +0880 +FFF0 +0210 +0210 +7FF0 +4200 +4200 +7FF8 +0208 +0208 +0228 +0210 +0200 +0200 +ENDCHAR +STARTCHAR uni5F1B +ENCODING 24347 +BBX 15 15 1 -1 +BITMAP +0040 +F240 +1240 +1240 +7278 +43C8 +4E48 +4248 +7248 +1258 +1240 +1200 +1202 +1202 +61FE +ENDCHAR +STARTCHAR uni5F1C +ENCODING 24348 +BBX 13 14 2 -1 +BITMAP +FCF8 +0408 +0408 +0408 +7CF8 +4080 +4080 +7CF8 +0408 +0408 +0408 +0408 +0408 +3870 +ENDCHAR +STARTCHAR uni5F1D +ENCODING 24349 +BBX 15 14 1 -1 +BITMAP +F7FC +1444 +1444 +1444 +7444 +4444 +47FC +7400 +1400 +1400 +1400 +1402 +1402 +63FE +ENDCHAR +STARTCHAR uni5F1E +ENCODING 24350 +BBX 15 15 1 -1 +BITMAP +0080 +F880 +0880 +08FE +0902 +7924 +4228 +4020 +7820 +0820 +0850 +0850 +0888 +0904 +7202 +ENDCHAR +STARTCHAR uni5F1F +ENCODING 24351 +BBX 14 15 1 -1 +BITMAP +1010 +0820 +7FF8 +0108 +0108 +3FF8 +2100 +2100 +3FFC +0304 +0504 +0904 +3104 +C118 +0100 +ENDCHAR +STARTCHAR uni5F20 +ENCODING 24352 +BBX 15 16 0 -2 +BITMAP +0100 +F908 +0908 +0910 +0920 +7940 +4100 +47FE +4140 +7920 +0920 +0910 +0908 +0944 +5182 +2100 +ENDCHAR +STARTCHAR uni5F21 +ENCODING 24353 +BBX 14 15 1 -2 +BITMAP +F9FC +0900 +0900 +0900 +F9F8 +8108 +8108 +8108 +F908 +09F8 +0900 +0900 +0900 +51FC +2000 +ENDCHAR +STARTCHAR uni5F22 +ENCODING 24354 +BBX 14 16 1 -2 +BITMAP +0040 +FA48 +0A48 +0A48 +0BF8 +F840 +8040 +87F8 +8208 +F910 +0910 +08A0 +0840 +08A0 +5310 +2C0C +ENDCHAR +STARTCHAR uni5F23 +ENCODING 24355 +BBX 15 15 1 -1 +BITMAP +0108 +F908 +0908 +0A08 +0AFE +7A08 +4608 +4248 +7A28 +0A28 +0A08 +0A08 +0A08 +0A08 +7238 +ENDCHAR +STARTCHAR uni5F24 +ENCODING 24356 +BBX 15 16 0 -2 +BITMAP +0004 +F81E +09F0 +0910 +0910 +7910 +4110 +41FE +4110 +7910 +0910 +0908 +090A +094A +51A6 +2112 +ENDCHAR +STARTCHAR uni5F25 +ENCODING 24357 +BBX 15 15 1 -1 +BITMAP +0100 +F900 +0900 +0BFE +7A20 +4420 +4020 +4124 +7924 +0924 +0A22 +0A22 +0820 +0820 +70E0 +ENDCHAR +STARTCHAR uni5F26 +ENCODING 24358 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +0840 +0FFE +7840 +4080 +4110 +4320 +78A0 +0840 +0848 +0884 +0884 +093A +77C2 +ENDCHAR +STARTCHAR uni5F27 +ENCODING 24359 +BBX 15 15 1 -1 +BITMAP +003C +F3C8 +1208 +1248 +F248 +8248 +8248 +8248 +F248 +1248 +1288 +12A4 +14A4 +14F4 +6992 +ENDCHAR +STARTCHAR uni5F28 +ENCODING 24360 +BBX 14 15 0 -2 +BITMAP +FBFC +0884 +0884 +0884 +7904 +4114 +4208 +4400 +79FC +0904 +0904 +0904 +0904 +51FC +2104 +ENDCHAR +STARTCHAR uni5F29 +ENCODING 24361 +BBX 15 15 1 -1 +BITMAP +1000 +FEFC +2244 +2428 +7810 +1428 +6246 +BFF0 +0010 +3FF0 +2000 +3FF8 +0008 +0008 +0070 +ENDCHAR +STARTCHAR uni5F2A +ENCODING 24362 +BBX 14 15 1 -2 +BITMAP +FBF8 +0810 +0820 +0860 +F890 +8108 +8604 +8000 +FBF8 +0840 +0840 +0840 +0840 +57FC +2000 +ENDCHAR +STARTCHAR uni5F2B +ENCODING 24363 +BBX 14 15 1 -2 +BITMAP +FBFC +0A40 +0A40 +0A40 +FBF8 +8208 +8208 +8208 +FA08 +0BF8 +0A40 +0A40 +0A40 +53FC +2000 +ENDCHAR +STARTCHAR uni5F2C +ENCODING 24364 +BBX 14 15 1 -2 +BITMAP +FBFC +0A20 +0A20 +0AA0 +FAB8 +8288 +8288 +8288 +FA88 +0AB8 +0AA0 +0A20 +0A20 +53FC +2000 +ENDCHAR +STARTCHAR uni5F2D +ENCODING 24365 +BBX 15 14 1 -1 +BITMAP +FFFE +0908 +0908 +79F8 +4108 +4108 +41F8 +7908 +0908 +0908 +09F8 +0F08 +0808 +7008 +ENDCHAR +STARTCHAR uni5F2E +ENCODING 24366 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +7FFC +0400 +FFFE +1010 +2008 +DFF6 +0010 +0FF0 +0800 +1000 +1FF8 +0008 +0028 +0010 +ENDCHAR +STARTCHAR uni5F2F +ENCODING 24367 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +2448 +C8C6 +0000 +3FF0 +0010 +1FF0 +1000 +1FF8 +0008 +0008 +00F0 +ENDCHAR +STARTCHAR uni5F30 +ENCODING 24368 +BBX 13 16 1 -2 +BITMAP +0040 +FA48 +0948 +0950 +0840 +FBF8 +8208 +8208 +83F8 +FA08 +0A08 +0BF8 +0A08 +0A08 +5228 +2210 +ENDCHAR +STARTCHAR uni5F31 +ENCODING 24369 +BBX 14 14 1 -1 +BITMAP +FDFC +0404 +0404 +7CFC +4080 +4080 +7CFC +0404 +4444 +2C2C +1414 +2464 +C584 +3838 +ENDCHAR +STARTCHAR uni5F32 +ENCODING 24370 +BBX 14 15 0 -2 +BITMAP +F9F8 +0908 +0908 +09F8 +7800 +43FC +4204 +4204 +7BFC +0A04 +0A04 +0BFC +0A04 +5214 +2208 +ENDCHAR +STARTCHAR uni5F33 +ENCODING 24371 +BBX 15 15 0 -2 +BITMAP +FBFC +0800 +0924 +0A48 +7C90 +4248 +4124 +4000 +7BFC +0840 +0840 +0840 +0840 +57FE +2000 +ENDCHAR +STARTCHAR uni5F34 +ENCODING 24372 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +1FFE +1000 +13F8 +7208 +43F8 +4000 +77FC +1018 +1020 +1FFE +1040 +1040 +61C0 +ENDCHAR +STARTCHAR uni5F35 +ENCODING 24373 +BBX 15 14 1 -1 +BITMAP +F3FC +1200 +13F8 +7200 +43F8 +4200 +4200 +7FFE +1288 +1250 +1220 +1210 +13C8 +6E06 +ENDCHAR +STARTCHAR uni5F36 +ENCODING 24374 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +1FFE +1000 +13F8 +7208 +4208 +4208 +73F8 +1040 +1040 +1248 +1C46 +1040 +61C0 +ENDCHAR +STARTCHAR uni5F37 +ENCODING 24375 +BBX 15 15 1 -1 +BITMAP +0080 +F0A0 +1110 +1178 +77C4 +4040 +43F8 +4248 +7248 +13F8 +1040 +1048 +1058 +1064 +6782 +ENDCHAR +STARTCHAR uni5F38 +ENCODING 24376 +BBX 15 14 1 -1 +BITMAP +FBDE +0A52 +0A52 +7A52 +43DE +4252 +4252 +7A52 +0BDE +0A52 +0A52 +0A52 +0A52 +74E6 +ENDCHAR +STARTCHAR uni5F39 +ENCODING 24377 +BBX 15 16 0 -2 +BITMAP +0104 +F888 +0850 +09FC +0924 +7924 +41FC +4124 +4124 +79FC +0820 +0820 +0BFE +0820 +5020 +2020 +ENDCHAR +STARTCHAR uni5F3A +ENCODING 24378 +BBX 16 15 0 -2 +BITMAP +F9FC +0904 +0904 +79FC +4020 +83FE +8222 +FA22 +0A22 +0BFE +0820 +0824 +0822 +903F +63C1 +ENDCHAR +STARTCHAR uni5F3B +ENCODING 24379 +BBX 15 15 0 -2 +BITMAP +F01E +17C2 +1102 +1102 +F7DE +8550 +8550 +8550 +F6DE +1442 +1442 +1442 +17C2 +A454 +4008 +ENDCHAR +STARTCHAR uni5F3C +ENCODING 24380 +BBX 15 14 1 -1 +BITMAP +F7DE +1102 +1202 +77DE +4450 +4450 +4450 +77DE +1442 +1442 +1442 +1442 +17C2 +600C +ENDCHAR +STARTCHAR uni5F3D +ENCODING 24381 +BBX 15 15 1 -1 +BITMAP +0248 +F248 +1FFE +1248 +1248 +7278 +4200 +43FC +7040 +1040 +1FFE +1150 +1248 +1C46 +6040 +ENDCHAR +STARTCHAR uni5F3E +ENCODING 24382 +BBX 15 15 1 -1 +BITMAP +0484 +F244 +1248 +17FC +7444 +4444 +47FC +4444 +7444 +17FC +1040 +1FFE +1040 +1040 +6040 +ENDCHAR +STARTCHAR uni5F3F +ENCODING 24383 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4442 +9FF4 +0440 +3FF8 +0440 +FFFE +0820 +1FF0 +2028 +DFE6 +1000 +1FF0 +0010 +00E0 +ENDCHAR +STARTCHAR uni5F40 +ENCODING 24384 +BBX 15 15 1 -1 +BITMAP +1000 +10F8 +FE88 +1088 +FE88 +830E +BA00 +03FC +7C84 +0484 +3C48 +4048 +7C30 +0448 +1D86 +ENDCHAR +STARTCHAR uni5F41 +ENCODING 24385 +BBX 15 14 1 -1 +BITMAP +FFFE +0808 +0BC8 +7A48 +43C8 +4018 +4000 +7FFE +0808 +0BC8 +0A48 +0A48 +0BC8 +7018 +ENDCHAR +STARTCHAR uni5F42 +ENCODING 24386 +BBX 15 16 0 -2 +BITMAP +0440 +2448 +1450 +0440 +FFFE +0000 +FC80 +04F8 +7D20 +4020 +81FC +FC20 +0450 +0450 +2888 +1104 +ENDCHAR +STARTCHAR uni5F43 +ENCODING 24387 +BBX 15 15 0 -2 +BITMAP +F9FC +0924 +09FC +0924 +79FC +40A8 +40A8 +43FE +78A8 +08A8 +09FC +0820 +0BFE +5020 +2020 +ENDCHAR +STARTCHAR uni5F44 +ENCODING 24388 +BBX 15 15 0 -2 +BITMAP +FBFE +0A00 +0A7C +0A44 +7A44 +427C +4200 +42EE +7AAA +0AAA +0AAA +0AEE +0A00 +53FE +2000 +ENDCHAR +STARTCHAR uni5F45 +ENCODING 24389 +BBX 15 15 1 -1 +BITMAP +0208 +F110 +1FFE +1000 +1784 +76A4 +45A4 +46A4 +75A4 +1484 +159C +1040 +17FC +1084 +6738 +ENDCHAR +STARTCHAR uni5F46 +ENCODING 24390 +BBX 14 16 1 -2 +BITMAP +9240 +547C +FE90 +9290 +BB50 +D620 +9250 +828C +7FE0 +0020 +7FE0 +4000 +7FF0 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni5F47 +ENCODING 24391 +BBX 15 15 1 -1 +BITMAP +0020 +F9FC +0824 +0BFE +0824 +79FC +4020 +42AA +7BAE +0A22 +0BFE +0A22 +0BAE +0AAA +74AA +ENDCHAR +STARTCHAR uni5F48 +ENCODING 24392 +BBX 15 14 1 -1 +BITMAP +F7BC +14A4 +17BC +7000 +43F8 +4248 +43F8 +7248 +1248 +13F8 +1040 +1FFE +1040 +6040 +ENDCHAR +STARTCHAR uni5F49 +ENCODING 24393 +BBX 15 16 0 -2 +BITMAP +0088 +F888 +09FC +0888 +0888 +7BFE +4020 +41FC +4124 +79FC +0924 +09FC +0800 +0888 +5104 +2202 +ENDCHAR +STARTCHAR uni5F4A +ENCODING 24394 +BBX 15 14 1 -1 +BITMAP +F7FC +1000 +17F8 +7488 +47F8 +4488 +4FFC +7000 +17F8 +1488 +17F8 +1488 +1488 +6FFE +ENDCHAR +STARTCHAR uni5F4B +ENCODING 24395 +BBX 15 15 0 -2 +BITMAP +FBFC +0A94 +0A94 +0BFC +7800 +47FE +4000 +43FC +7A04 +0BFC +08A2 +0914 +0B08 +5D44 +2182 +ENDCHAR +STARTCHAR uni5F4C +ENCODING 24396 +BBX 15 14 1 -1 +BITMAP +FFFE +1248 +1444 +7FFE +4444 +46EC +4554 +76EC +1444 +16EC +1554 +16EC +1444 +644C +ENDCHAR +STARTCHAR uni5F4D +ENCODING 24397 +BBX 15 16 0 -2 +BITMAP +0040 +F020 +17FE +1488 +15FC +F488 +87FE +8420 +85FC +F524 +15FC +1524 +15FC +1400 +A488 +4904 +ENDCHAR +STARTCHAR uni5F4E +ENCODING 24398 +BBX 15 15 1 -1 +BITMAP +2108 +47D0 +D034 +2388 +5812 +EBBE +62A8 +ABCA +1FF0 +0010 +3FF0 +2000 +3FF8 +0008 +0078 +ENDCHAR +STARTCHAR uni5F4F +ENCODING 24399 +BBX 15 16 0 -2 +BITMAP +03DE +FA52 +0BDE +0A52 +0BDE +78A0 +41FE +4320 +45FC +7920 +09FE +0800 +09FC +0888 +5070 +278E +ENDCHAR +STARTCHAR uni5F50 +ENCODING 24400 +BBX 12 12 1 0 +BITMAP +FFF0 +0010 +0010 +0010 +0010 +7FF0 +0010 +0010 +0010 +0010 +FFF0 +0010 +ENDCHAR +STARTCHAR uni5F51 +ENCODING 24401 +BBX 15 15 1 -1 +BITMAP +0400 +0400 +0400 +0400 +0FF8 +0808 +0808 +0810 +1010 +1010 +1FF0 +0020 +0020 +0020 +FFFE +ENDCHAR +STARTCHAR uni5F52 +ENCODING 24402 +BBX 13 16 1 -2 +BITMAP +1000 +1000 +97F8 +9008 +9008 +9008 +9008 +93F8 +9008 +9008 +9008 +1008 +2008 +27F8 +4008 +8000 +ENDCHAR +STARTCHAR uni5F53 +ENCODING 24403 +BBX 11 15 3 -1 +BITMAP +0400 +8420 +8420 +4440 +4480 +0400 +FFE0 +0020 +0020 +0020 +FFE0 +0020 +0020 +0020 +FFE0 +ENDCHAR +STARTCHAR uni5F54 +ENCODING 24404 +BBX 15 15 1 -1 +BITMAP +0400 +0FF0 +0810 +1FF0 +0020 +FFFE +0100 +2104 +1108 +0990 +0140 +0D20 +3118 +C106 +0700 +ENDCHAR +STARTCHAR uni5F55 +ENCODING 24405 +BBX 15 15 0 -2 +BITMAP +3FF0 +0010 +0010 +1FF0 +0010 +0010 +FFFE +0100 +2108 +1190 +0560 +0920 +3118 +C506 +0200 +ENDCHAR +STARTCHAR uni5F56 +ENCODING 24406 +BBX 15 15 1 -1 +BITMAP +0400 +0FF0 +0810 +1FF0 +0020 +FFFE +0200 +0D04 +7188 +0690 +18C0 +61A0 +0E98 +7086 +0700 +ENDCHAR +STARTCHAR uni5F57 +ENCODING 24407 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +FEFE +1010 +7C7C +1010 +1EFE +F010 +1010 +3FF8 +0008 +FFFE +0008 +0008 +3FF8 +ENDCHAR +STARTCHAR uni5F58 +ENCODING 24408 +BBX 15 15 1 -1 +BITMAP +0400 +0FF0 +0810 +1FF0 +0020 +FFFE +0200 +43D0 +4510 +711C +47D0 +4110 +4290 +7292 +C44E +ENDCHAR +STARTCHAR uni5F59 +ENCODING 24409 +BBX 15 15 1 -1 +BITMAP +0400 +0FE0 +0820 +1FC0 +0040 +FFFE +5114 +5FF4 +1110 +1FF0 +0100 +FFFE +0D60 +3118 +C106 +ENDCHAR +STARTCHAR uni5F5A +ENCODING 24410 +BBX 15 15 0 -2 +BITMAP +3FF0 +0010 +1FF0 +0010 +7FFE +4002 +9FF4 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +1110 +610C +ENDCHAR +STARTCHAR uni5F5B +ENCODING 24411 +BBX 15 16 0 -2 +BITMAP +3FF0 +0010 +1FF0 +0010 +FFFE +9248 +5484 +FF7A +3828 +5448 +9298 +0820 +FFFE +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni5F5C +ENCODING 24412 +BBX 15 15 1 -1 +BITMAP +0400 +0FF8 +0810 +1FF0 +0020 +FFFE +2A24 +0C42 +7EBC +2C24 +4ACC +0420 +FFFE +0820 +3020 +ENDCHAR +STARTCHAR uni5F5D +ENCODING 24413 +BBX 15 15 1 -1 +BITMAP +0400 +0FF8 +0810 +1FF0 +0020 +FFFE +54C8 +FE32 +39FE +5454 +9292 +0420 +FFFE +0820 +3020 +ENDCHAR +STARTCHAR uni5F5E +ENCODING 24414 +BBX 15 16 0 -2 +BITMAP +3FF0 +0010 +1FF0 +0010 +FFFE +9224 +5478 +FE12 +38FE +5454 +9292 +0820 +FFFE +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni5F5F +ENCODING 24415 +BBX 15 16 0 -2 +BITMAP +0044 +FDFE +0454 +0448 +FCFE +0590 +04FE +FC90 +00FE +0890 +FEFE +0880 +49FE +2844 +0838 +19C6 +ENDCHAR +STARTCHAR uni5F60 +ENCODING 24416 +BBX 15 16 0 -2 +BITMAP +7E44 +03FE +3E54 +0248 +7EFE +0190 +EEFE +4A90 +6EFE +C090 +04FE +FE80 +45FE +2444 +2438 +0DC6 +ENDCHAR +STARTCHAR uni5F61 +ENCODING 24417 +BBX 10 15 3 -1 +BITMAP +0100 +0600 +1800 +E000 +0080 +0100 +0600 +1800 +E000 +0040 +0080 +0100 +0600 +1800 +E000 +ENDCHAR +STARTCHAR uni5F62 +ENCODING 24418 +BBX 15 15 1 -1 +BITMAP +0004 +FF88 +2210 +2220 +2200 +2204 +FF88 +2210 +2220 +2240 +2202 +2204 +4208 +4210 +8260 +ENDCHAR +STARTCHAR uni5F63 +ENCODING 24419 +BBX 15 15 1 -1 +BITMAP +0808 +0810 +0820 +FF40 +0204 +2208 +2210 +1460 +1402 +0804 +0818 +1460 +2200 +4180 +807E +ENDCHAR +STARTCHAR uni5F64 +ENCODING 24420 +BBX 15 14 1 -1 +BITMAP +3F04 +2108 +2130 +2900 +2500 +2504 +21C8 +3F30 +E100 +2100 +2102 +4104 +4118 +8760 +ENDCHAR +STARTCHAR uni5F65 +ENCODING 24421 +BBX 14 16 0 -2 +BITMAP +0200 +0100 +3FF8 +0420 +03C0 +0420 +3FFC +2020 +21C0 +2E10 +2060 +2188 +2E10 +4060 +4380 +9C00 +ENDCHAR +STARTCHAR uni5F66 +ENCODING 24422 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0820 +0440 +3FFC +20C0 +2700 +2000 +2060 +2380 +2008 +4010 +40E0 +8F00 +ENDCHAR +STARTCHAR uni5F67 +ENCODING 24423 +BBX 15 15 1 -1 +BITMAP +0048 +0044 +0040 +FFFE +0040 +0048 +3E50 +2264 +22C8 +3E30 +00E4 +0618 +3832 +C0CA +0704 +ENDCHAR +STARTCHAR uni5F68 +ENCODING 24424 +BBX 15 16 0 -2 +BITMAP +0002 +FFE2 +0004 +0008 +7BD0 +4A42 +4A42 +4A44 +6B48 +5AD0 +4A42 +4A42 +4A44 +4A48 +4A50 +5AE0 +ENDCHAR +STARTCHAR uni5F69 +ENCODING 24425 +BBX 15 15 1 -1 +BITMAP +0408 +1810 +E220 +A2C0 +5400 +4004 +1008 +FE30 +10C0 +3002 +3C02 +5204 +9008 +1030 +10C0 +ENDCHAR +STARTCHAR uni5F6A +ENCODING 24426 +BBX 15 15 1 -1 +BITMAP +1008 +1E10 +1010 +7F60 +5104 +5E04 +7008 +5210 +4E62 +4002 +5404 +5418 +9462 +9402 +23FE +ENDCHAR +STARTCHAR uni5F6B +ENCODING 24427 +BBX 15 15 1 -1 +BITMAP +0004 +7F88 +48B0 +4882 +5E82 +4884 +4884 +5E88 +40B0 +5E82 +5282 +5284 +5E84 +8088 +83B0 +ENDCHAR +STARTCHAR uni5F6C +ENCODING 24428 +BBX 15 15 1 -1 +BITMAP +2100 +2108 +2110 +FFE0 +2100 +7384 +6B48 +6310 +A522 +A502 +A504 +2104 +2108 +2110 +2120 +ENDCHAR +STARTCHAR uni5F6D +ENCODING 24429 +BBX 15 15 1 -1 +BITMAP +1000 +1008 +7E10 +1020 +1040 +FF04 +0008 +7E10 +4220 +4242 +7E02 +2404 +2408 +1F10 +F060 +ENDCHAR +STARTCHAR uni5F6E +ENCODING 24430 +BBX 15 16 0 -2 +BITMAP +1000 +0804 +FF84 +8088 +1410 +2222 +4902 +1404 +2208 +4110 +BEA2 +2202 +2204 +2208 +3E10 +2260 +ENDCHAR +STARTCHAR uni5F6F +ENCODING 24431 +BBX 15 15 0 -2 +BITMAP +FF84 +1404 +7F08 +5510 +5522 +7F02 +0004 +7F08 +0010 +FFA2 +0802 +2A04 +4908 +A890 +1060 +ENDCHAR +STARTCHAR uni5F70 +ENCODING 24432 +BBX 15 15 1 -1 +BITMAP +0800 +0804 +7F08 +2230 +FF80 +0000 +7F04 +4108 +7F30 +4100 +7F00 +0802 +FF84 +0818 +0860 +ENDCHAR +STARTCHAR uni5F71 +ENCODING 24433 +BBX 15 15 1 -1 +BITMAP +7E04 +4208 +7E30 +4200 +7E00 +0804 +FF88 +0030 +7E00 +4200 +7E00 +0802 +4A04 +8918 +1860 +ENDCHAR +STARTCHAR uni5F72 +ENCODING 24434 +BBX 15 15 1 -1 +BITMAP +0008 +7B88 +0010 +7BA0 +5A80 +0404 +7F84 +4A08 +7F90 +4AA0 +7F82 +5202 +5B84 +9248 +39D0 +ENDCHAR +STARTCHAR uni5F73 +ENCODING 24435 +BBX 10 15 3 -1 +BITMAP +0080 +0100 +0200 +0400 +0840 +3080 +C100 +0200 +0C00 +3400 +C400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni5F74 +ENCODING 24436 +BBX 14 16 0 -2 +BITMAP +0840 +0840 +1080 +20FC +4904 +0904 +1204 +3484 +5044 +9024 +1024 +1004 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni5F75 +ENCODING 24437 +BBX 14 16 0 -2 +BITMAP +0840 +0840 +1040 +2240 +4A58 +0A68 +12C8 +3748 +5248 +9268 +1250 +1244 +1244 +1204 +11FC +1000 +ENDCHAR +STARTCHAR uni5F76 +ENCODING 24438 +BBX 15 16 0 -2 +BITMAP +1000 +17F8 +2108 +4110 +9110 +1120 +213C +6104 +A104 +2288 +2288 +2250 +2420 +2450 +2888 +2306 +ENDCHAR +STARTCHAR uni5F77 +ENCODING 24439 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4020 +87FE +1080 +2080 +6080 +A0FC +2084 +2084 +2104 +2104 +2204 +2204 +2438 +ENDCHAR +STARTCHAR uni5F78 +ENCODING 24440 +BBX 15 16 0 -2 +BITMAP +0820 +0920 +1120 +2110 +4910 +0A48 +1248 +3444 +5882 +9080 +1110 +1108 +1208 +17FC +1204 +1000 +ENDCHAR +STARTCHAR uni5F79 +ENCODING 24441 +BBX 15 15 1 -1 +BITMAP +1000 +21F0 +4110 +8910 +1210 +2412 +680E +A000 +27F8 +2208 +2110 +20A0 +20E0 +2318 +2C06 +ENDCHAR +STARTCHAR uni5F7A +ENCODING 24442 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +13FE +2020 +4820 +0820 +1020 +3020 +51FC +9020 +1020 +1020 +1020 +1020 +17FE +1000 +ENDCHAR +STARTCHAR uni5F7B +ENCODING 24443 +BBX 14 16 0 -2 +BITMAP +1000 +1200 +22FC +4224 +9224 +1224 +23A4 +6E24 +A224 +2224 +22A4 +2324 +2244 +2044 +2094 +2108 +ENDCHAR +STARTCHAR uni5F7C +ENCODING 24444 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +47FC +8C44 +1448 +2440 +67F8 +A508 +2508 +2490 +28A0 +2840 +30A0 +2118 +2606 +ENDCHAR +STARTCHAR uni5F7D +ENCODING 24445 +BBX 15 15 1 -1 +BITMAP +101C +27E0 +4420 +8420 +1420 +1420 +27FE +6420 +A420 +2410 +2410 +2710 +2C0A +200A +2FE4 +ENDCHAR +STARTCHAR uni5F7E +ENCODING 24446 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +40A0 +8110 +0208 +15F6 +2000 +6000 +A7FC +2084 +2084 +2084 +209C +2080 +2080 +ENDCHAR +STARTCHAR uni5F7F +ENCODING 24447 +BBX 14 15 1 -1 +BITMAP +1120 +2120 +4FFC +8124 +1124 +2FFC +6920 +A920 +2FFC +2124 +2124 +2224 +2224 +2428 +2820 +ENDCHAR +STARTCHAR uni5F80 +ENCODING 24448 +BBX 15 15 1 -1 +BITMAP +1080 +2040 +4020 +87FC +1040 +2040 +6040 +A040 +23F8 +2040 +2040 +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni5F81 +ENCODING 24449 +BBX 15 15 1 -1 +BITMAP +1000 +27FC +4040 +8040 +0840 +1240 +2240 +627C +A240 +2240 +2240 +2240 +2240 +2240 +2FFE +ENDCHAR +STARTCHAR uni5F82 +ENCODING 24450 +BBX 15 15 1 -1 +BITMAP +1000 +23F8 +4208 +8208 +1208 +23F8 +6208 +A208 +2208 +23F8 +2208 +2208 +2208 +2208 +2FFE +ENDCHAR +STARTCHAR uni5F83 +ENCODING 24451 +BBX 15 15 1 -1 +BITMAP +1040 +2240 +4240 +8240 +17FC +2440 +6840 +A040 +2040 +23F8 +2040 +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni5F84 +ENCODING 24452 +BBX 15 15 1 -1 +BITMAP +1000 +27F8 +4008 +8210 +1120 +20C0 +6330 +AC0E +2040 +2040 +27FC +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni5F85 +ENCODING 24453 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +47FC +8040 +1040 +2FFE +6008 +A008 +2FFE +2008 +2208 +2108 +2088 +2008 +2038 +ENDCHAR +STARTCHAR uni5F86 +ENCODING 24454 +BBX 15 16 0 -2 +BITMAP +0800 +0FFE +1090 +2090 +4890 +0BFC +1294 +3294 +5294 +9294 +129C +1304 +1204 +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni5F87 +ENCODING 24455 +BBX 15 15 1 -1 +BITMAP +1100 +2100 +43FE +8202 +1402 +23F2 +6212 +A212 +23F2 +2212 +2212 +23F2 +2004 +2004 +2038 +ENDCHAR +STARTCHAR uni5F88 +ENCODING 24456 +BBX 15 15 1 -1 +BITMAP +1000 +27F0 +4410 +8410 +17F0 +2410 +6410 +A7F4 +2444 +2448 +2430 +2420 +2490 +2708 +2C06 +ENDCHAR +STARTCHAR uni5F89 +ENCODING 24457 +BBX 15 15 1 -1 +BITMAP +1208 +2108 +4110 +87FC +0040 +1040 +23F8 +6040 +A040 +2040 +2FFE +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni5F8A +ENCODING 24458 +BBX 14 15 1 -1 +BITMAP +1000 +27FC +4404 +8404 +1404 +25E4 +6524 +A524 +2524 +2524 +25E4 +2404 +2404 +2404 +27FC +ENDCHAR +STARTCHAR uni5F8B +ENCODING 24459 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +47FC +8044 +1FFE +2044 +67FC +A040 +27FC +2040 +2040 +2FFE +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni5F8C +ENCODING 24460 +BBX 15 15 1 -1 +BITMAP +1080 +2110 +4220 +8140 +1088 +211C +6FE2 +A102 +23F8 +2408 +2910 +20A0 +2040 +21B0 +2E0E +ENDCHAR +STARTCHAR uni5F8D +ENCODING 24461 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +11FC +2020 +4820 +0820 +17FE +3000 +5020 +9020 +11FC +1020 +1020 +1020 +17FE +1000 +ENDCHAR +STARTCHAR uni5F8E +ENCODING 24462 +BBX 15 16 0 -2 +BITMAP +0800 +09FC +1104 +2104 +4904 +09FC +1000 +3000 +53FE +9020 +1020 +11FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni5F8F +ENCODING 24463 +BBX 15 15 1 -1 +BITMAP +1040 +2240 +427C +8240 +0240 +17FE +2040 +6144 +A244 +2444 +20C8 +2008 +2010 +2060 +2780 +ENDCHAR +STARTCHAR uni5F90 +ENCODING 24464 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +40A0 +8110 +1208 +2DF6 +6040 +A040 +27FC +2040 +2248 +2248 +2444 +2842 +21C0 +ENDCHAR +STARTCHAR uni5F91 +ENCODING 24465 +BBX 15 15 1 -1 +BITMAP +1000 +27FC +4000 +8248 +1248 +2490 +6248 +A248 +2000 +27FC +2040 +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni5F92 +ENCODING 24466 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +47FC +8040 +1040 +2040 +6FFE +A040 +2240 +2240 +227C +2540 +2540 +28C0 +303E +ENDCHAR +STARTCHAR uni5F93 +ENCODING 24467 +BBX 15 15 1 -1 +BITMAP +1208 +2108 +4110 +8FFE +1040 +2040 +6240 +A27C +2240 +2240 +2240 +2240 +2540 +24C0 +283E +ENDCHAR +STARTCHAR uni5F94 +ENCODING 24468 +BBX 15 16 0 -2 +BITMAP +0888 +0888 +13FE +2088 +4888 +0840 +1020 +33FC +5008 +9010 +1020 +1040 +1080 +1100 +1280 +147E +ENDCHAR +STARTCHAR uni5F95 +ENCODING 24469 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2040 +47FC +9040 +1248 +2148 +6150 +AFFE +20E0 +2150 +2150 +2248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni5F96 +ENCODING 24470 +BBX 15 16 0 -2 +BITMAP +0840 +0820 +13FE +2202 +4800 +09FC +1000 +3000 +53FE +9020 +1128 +1124 +1222 +1422 +10A0 +1040 +ENDCHAR +STARTCHAR uni5F97 +ENCODING 24471 +BBX 15 15 1 -1 +BITMAP +1000 +23F8 +4208 +83F8 +1208 +23F8 +6000 +AFFE +2010 +2FFE +2210 +2110 +2110 +2010 +2070 +ENDCHAR +STARTCHAR uni5F98 +ENCODING 24472 +BBX 15 15 1 -1 +BITMAP +1120 +2120 +4120 +8F3E +1120 +2120 +6120 +AF3C +2120 +21A0 +2320 +2D3E +2120 +2220 +2420 +ENDCHAR +STARTCHAR uni5F99 +ENCODING 24473 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +427C +8A40 +1240 +2240 +6FFE +A040 +2040 +2240 +227C +2240 +2540 +24C0 +283E +ENDCHAR +STARTCHAR uni5F9A +ENCODING 24474 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2FFE +4040 +97FC +1444 +2554 +64E4 +A444 +27FC +20E0 +2150 +2248 +2C46 +2040 +2040 +ENDCHAR +STARTCHAR uni5F9B +ENCODING 24475 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +13FC +20A0 +4910 +0A08 +17FE +3008 +53C8 +9248 +1248 +1248 +13C8 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni5F9C +ENCODING 24476 +BBX 15 15 1 -1 +BITMAP +1040 +2248 +4248 +8444 +0842 +17FC +2404 +6404 +A5F4 +2514 +2514 +2514 +25F4 +2404 +241C +ENDCHAR +STARTCHAR uni5F9D +ENCODING 24477 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +17FC +2040 +4840 +0BF8 +1208 +33F8 +5208 +93F8 +1208 +13F8 +1208 +1208 +1FFE +1000 +ENDCHAR +STARTCHAR uni5F9E +ENCODING 24478 +BBX 15 15 1 -1 +BITMAP +1208 +2208 +4208 +8514 +1514 +28A2 +6000 +A040 +2240 +2278 +2240 +2240 +2540 +24C0 +283E +ENDCHAR +STARTCHAR uni5F9F +ENCODING 24479 +BBX 14 16 0 -2 +BITMAP +1000 +17FC +2444 +4444 +95F4 +1444 +2444 +67FC +A404 +25F4 +2514 +2514 +25F4 +2404 +2414 +2808 +ENDCHAR +STARTCHAR uni5FA0 +ENCODING 24480 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +4FFE +8040 +1248 +2248 +6248 +A554 +2554 +28E2 +20E0 +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni5FA1 +ENCODING 24481 +BBX 15 15 1 -1 +BITMAP +1200 +221E +47D2 +8912 +1112 +2112 +6FD2 +A112 +2512 +25D2 +2512 +2512 +2556 +2590 +2E10 +ENDCHAR +STARTCHAR uni5FA2 +ENCODING 24482 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +4FFE +8040 +07FC +1044 +27FE +6044 +A7FC +2040 +2240 +227C +2240 +25C0 +287E +ENDCHAR +STARTCHAR uni5FA3 +ENCODING 24483 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +2110 +47FC +9110 +1110 +2FFE +6000 +A3F8 +2208 +2208 +23F8 +2208 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni5FA4 +ENCODING 24484 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +5EFC +8224 +05FE +1824 +2E24 +62FC +AA20 +2AFC +2A20 +25FE +2420 +2A20 +31FE +ENDCHAR +STARTCHAR uni5FA5 +ENCODING 24485 +BBX 15 16 0 -2 +BITMAP +0800 +09FC +1104 +2104 +49FC +0904 +1104 +31FC +5000 +93FE +1020 +1120 +113C +1120 +12A0 +147E +ENDCHAR +STARTCHAR uni5FA6 +ENCODING 24486 +BBX 15 16 0 -2 +BITMAP +1000 +17BC +2484 +4484 +9484 +17BC +2400 +6400 +A7BC +2424 +2424 +27A8 +2410 +2428 +2444 +2482 +ENDCHAR +STARTCHAR uni5FA7 +ENCODING 24487 +BBX 15 15 1 -1 +BITMAP +101C +27E0 +4400 +87FC +0404 +1404 +27FC +6400 +A7FE +2E92 +2A92 +2BFE +2A92 +3292 +2296 +ENDCHAR +STARTCHAR uni5FA8 +ENCODING 24488 +BBX 15 15 1 -1 +BITMAP +1040 +2080 +43F8 +8A08 +13F8 +2208 +6208 +A3F8 +2000 +27FC +2040 +23F8 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni5FA9 +ENCODING 24489 +BBX 15 15 1 -1 +BITMAP +2200 +4200 +87FE +0800 +13F8 +2208 +63F8 +A208 +23F8 +2100 +21F8 +2608 +2130 +20E0 +2F1E +ENDCHAR +STARTCHAR uni5FAA +ENCODING 24490 +BBX 15 15 1 -1 +BITMAP +101C +27E0 +4420 +87FE +1420 +25FC +6504 +A504 +25FC +2504 +2904 +29FC +3104 +2104 +21FC +ENDCHAR +STARTCHAR uni5FAB +ENCODING 24491 +BBX 15 16 0 -2 +BITMAP +0880 +0880 +13F8 +2108 +4FFE +0800 +13F8 +3208 +53F8 +9040 +17FC +1040 +1440 +17FE +1040 +1040 +ENDCHAR +STARTCHAR uni5FAC +ENCODING 24492 +BBX 15 16 0 -2 +BITMAP +0840 +0820 +13FC +2108 +4890 +0BFE +1202 +3444 +5020 +93FC +1080 +10F8 +1088 +1108 +1128 +1210 +ENDCHAR +STARTCHAR uni5FAD +ENCODING 24493 +BBX 15 15 1 -1 +BITMAP +1040 +20F8 +4188 +8A48 +1130 +20E0 +6F00 +A3FC +2440 +2040 +2FFE +2040 +2444 +2444 +27FC +ENDCHAR +STARTCHAR uni5FAE +ENCODING 24494 +BBX 15 15 1 -1 +BITMAP +2210 +4210 +8A90 +0A9E +1AA4 +2FA4 +6044 +BFA4 +2528 +2528 +2550 +2990 +2928 +3044 +2082 +ENDCHAR +STARTCHAR uni5FAF +ENCODING 24495 +BBX 15 15 1 -1 +BITMAP +103C +23C8 +4244 +8444 +0480 +1110 +2220 +6148 +A0FC +2782 +2040 +2FFE +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni5FB0 +ENCODING 24496 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +1020 +213C +4920 +0920 +17FE +3000 +57FE +9020 +1120 +113C +1120 +1120 +17FE +1000 +ENDCHAR +STARTCHAR uni5FB1 +ENCODING 24497 +BBX 15 16 0 -2 +BITMAP +1000 +17FC +20A0 +47FC +94A4 +14A4 +27FC +6000 +A7FC +2000 +2FFE +2040 +2248 +2444 +2942 +2080 +ENDCHAR +STARTCHAR uni5FB2 +ENCODING 24498 +BBX 15 16 0 -2 +BITMAP +1000 +17FC +2404 +47FC +9420 +14A8 +2470 +64A8 +A504 +24A0 +24FC +2520 +2420 +2BFE +2820 +3020 +ENDCHAR +STARTCHAR uni5FB3 +ENCODING 24499 +BBX 15 15 1 -1 +BITMAP +1080 +2080 +4FFE +8080 +07FC +1524 +2524 +6524 +A7FC +2080 +2048 +2524 +2502 +2888 +2878 +ENDCHAR +STARTCHAR uni5FB4 +ENCODING 24500 +BBX 15 15 1 -1 +BITMAP +1210 +2210 +4A90 +8ABE +1AA4 +2FA4 +6044 +AF94 +2214 +2214 +2F88 +2208 +2214 +23A4 +2E42 +ENDCHAR +STARTCHAR uni5FB5 +ENCODING 24501 +BBX 15 15 1 -1 +BITMAP +2210 +2A90 +4A90 +8F9E +2024 +2FE4 +4014 +4194 +CE14 +4218 +4F88 +4208 +43D4 +5C24 +4042 +ENDCHAR +STARTCHAR uni5FB6 +ENCODING 24502 +BBX 15 16 0 -2 +BITMAP +1108 +1108 +2548 +4390 +911E +17D4 +2564 +6554 +A554 +2754 +25D4 +2548 +2548 +2554 +2464 +24C2 +ENDCHAR +STARTCHAR uni5FB7 +ENCODING 24503 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +5FFE +8080 +2FFC +2924 +4924 +4FFC +C000 +5FFE +4080 +4A4C +4A02 +5108 +50F8 +ENDCHAR +STARTCHAR uni5FB8 +ENCODING 24504 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +43FC +8090 +07FE +1000 +23FC +6244 +A3FC +2244 +23FC +2040 +23FC +2040 +27FE +ENDCHAR +STARTCHAR uni5FB9 +ENCODING 24505 +BBX 15 15 1 -1 +BITMAP +1210 +2210 +5FD0 +853E +19A4 +2E44 +4014 +CF94 +4894 +4F88 +4888 +4F98 +4894 +48A4 +49C2 +ENDCHAR +STARTCHAR uni5FBA +ENCODING 24506 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +11FC +2020 +4BFE +0908 +139C +3108 +5188 +963E +1000 +13FE +1090 +1090 +1112 +120E +ENDCHAR +STARTCHAR uni5FBB +ENCODING 24507 +BBX 15 16 0 -2 +BITMAP +1040 +10A0 +2318 +4DF6 +9000 +17FC +2554 +64E4 +A7FC +2000 +23F8 +2208 +23F8 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni5FBC +ENCODING 24508 +BBX 15 15 1 -1 +BITMAP +2420 +4820 +9F20 +117E +3F48 +51C8 +5F48 +C428 +7FA8 +4810 +4F10 +4928 +5128 +5144 +6682 +ENDCHAR +STARTCHAR uni5FBD +ENCODING 24509 +BBX 15 15 1 -1 +BITMAP +1210 +2A90 +4A90 +8FBE +1224 +2FC4 +6424 +AD24 +2228 +25A8 +2E50 +2210 +2AA8 +3244 +2282 +ENDCHAR +STARTCHAR uni5FBE +ENCODING 24510 +BBX 15 16 0 -2 +BITMAP +1210 +1A90 +2A90 +4F90 +943E +1224 +2FD4 +6014 +AF94 +2014 +2F94 +2008 +2F88 +2894 +2F94 +2022 +ENDCHAR +STARTCHAR uni5FBF +ENCODING 24511 +BBX 15 16 0 -2 +BITMAP +0910 +0890 +13DE +2010 +4A5E +0982 +13DE +3010 +53DE +9250 +13DE +1250 +13DE +1250 +1252 +12CE +ENDCHAR +STARTCHAR uni5FC0 +ENCODING 24512 +BBX 15 16 0 -2 +BITMAP +1040 +17FC +2000 +43B8 +92A8 +13B8 +2110 +67FC +A110 +27FC +2110 +2FFE +2128 +2310 +2D48 +2186 +ENDCHAR +STARTCHAR uni5FC1 +ENCODING 24513 +BBX 15 16 0 -2 +BITMAP +0BF8 +0A08 +13F8 +2208 +4BF8 +0A48 +13F8 +3444 +57FC +9080 +1FFE +1248 +1554 +18E2 +1150 +16C8 +ENDCHAR +STARTCHAR uni5FC2 +ENCODING 24514 +BBX 15 16 0 -2 +BITMAP +17BC +14A4 +27BC +44A4 +97BC +14A4 +27BC +6120 +A3FE +2220 +27FC +2A20 +23FC +2220 +23FE +2200 +ENDCHAR +STARTCHAR uni5FC3 +ENCODING 24515 +BBX 15 14 1 -1 +BITMAP +0400 +0200 +0100 +0880 +0800 +0800 +2810 +2808 +2804 +4802 +4812 +8810 +0810 +07F0 +ENDCHAR +STARTCHAR uni5FC4 +ENCODING 24516 +BBX 10 15 3 -1 +BITMAP +0400 +0400 +0400 +0400 +2500 +2500 +2480 +4440 +4400 +8400 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni5FC5 +ENCODING 24517 +BBX 15 15 1 -1 +BITMAP +0200 +0110 +0090 +0410 +0420 +0420 +2448 +2448 +2484 +4484 +4502 +8608 +0408 +1A08 +E1F8 +ENDCHAR +STARTCHAR uni5FC6 +ENCODING 24518 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FC +1008 +1810 +5420 +5040 +5080 +9080 +1100 +1100 +1202 +1202 +1202 +11FE +1000 +ENDCHAR +STARTCHAR uni5FC7 +ENCODING 24519 +BBX 14 15 1 -1 +BITMAP +2080 +2080 +2080 +2080 +A7FC +B084 +A884 +A884 +A084 +2084 +2104 +2104 +2204 +2404 +2838 +ENDCHAR +STARTCHAR uni5FC8 +ENCODING 24520 +BBX 15 14 0 -1 +BITMAP +3FF8 +0000 +0000 +0000 +0000 +FFFE +0000 +0100 +0880 +0888 +4804 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni5FC9 +ENCODING 24521 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +13FC +1084 +5084 +5884 +5484 +9484 +9084 +1104 +1104 +1104 +1204 +1204 +1438 +ENDCHAR +STARTCHAR uni5FCA +ENCODING 24522 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FE +1020 +1820 +5420 +5020 +5020 +9020 +1020 +1020 +1020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni5FCB +ENCODING 24523 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2004 +2004 +A004 +B004 +ABFC +AA00 +A200 +2200 +2200 +2200 +2202 +2202 +21FE +ENDCHAR +STARTCHAR uni5FCC +ENCODING 24524 +BBX 15 14 1 -1 +BITMAP +7FF0 +0010 +0010 +3FF0 +2000 +2004 +2004 +1FFC +0200 +0100 +4888 +4814 +8412 +83F0 +ENDCHAR +STARTCHAR uni5FCD +ENCODING 24525 +BBX 15 14 1 -1 +BITMAP +7FF8 +0108 +0108 +1A08 +0408 +0A10 +1110 +6060 +0200 +2908 +2884 +4804 +4422 +83E2 +ENDCHAR +STARTCHAR uni5FCE +ENCODING 24526 +BBX 15 15 0 -1 +BITMAP +0010 +00F8 +3F00 +0100 +0100 +FFFE +0100 +0100 +0100 +0000 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni5FCF +ENCODING 24527 +BBX 15 16 0 -2 +BITMAP +1010 +1078 +13C0 +1040 +1840 +5440 +5040 +57FE +9040 +1040 +1040 +1040 +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni5FD0 +ENCODING 24528 +BBX 15 15 0 -1 +BITMAP +0200 +0200 +0200 +03F8 +0200 +0200 +0200 +FFFE +0000 +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni5FD1 +ENCODING 24529 +BBX 15 14 0 -1 +BITMAP +FFFE +0200 +0240 +0220 +0210 +0208 +0200 +0000 +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni5FD2 +ENCODING 24530 +BBX 15 15 1 -1 +BITMAP +0048 +0044 +0044 +0040 +FFFE +0040 +1040 +0840 +0440 +1120 +50A0 +5050 +5112 +910A +8F04 +ENDCHAR +STARTCHAR uni5FD3 +ENCODING 24531 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2040 +2040 +A040 +B040 +A840 +AFFE +A040 +2040 +2040 +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni5FD4 +ENCODING 24532 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +2100 +23FE +A200 +B200 +ADF8 +A820 +A040 +2080 +2100 +2200 +2202 +2202 +21FE +ENDCHAR +STARTCHAR uni5FD5 +ENCODING 24533 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +1840 +5440 +53FE +5040 +9040 +1040 +10A0 +10A0 +1090 +1110 +1108 +1204 +1402 +ENDCHAR +STARTCHAR uni5FD6 +ENCODING 24534 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +1010 +13FE +5010 +5810 +5410 +9510 +9090 +1050 +1010 +1010 +1010 +1010 +1070 +ENDCHAR +STARTCHAR uni5FD7 +ENCODING 24535 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +7FFC +0100 +0100 +0100 +3FF8 +0200 +0100 +2488 +2404 +4402 +4210 +81F0 +ENDCHAR +STARTCHAR uni5FD8 +ENCODING 24536 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +FFFE +1000 +1000 +1000 +1000 +0FF8 +0000 +0200 +0900 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni5FD9 +ENCODING 24537 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +A7FE +B100 +A900 +A900 +2100 +2100 +2100 +2100 +2100 +2100 +2100 +20FC +ENDCHAR +STARTCHAR uni5FDA +ENCODING 24538 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1120 +192C +5534 +5164 +53A4 +9124 +1134 +1128 +1122 +1122 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni5FDB +ENCODING 24539 +BBX 15 16 0 -2 +BITMAP +1000 +11F0 +1110 +1110 +1910 +5510 +5190 +5150 +9150 +1110 +1110 +1112 +1112 +1212 +120E +1400 +ENDCHAR +STARTCHAR uni5FDC +ENCODING 24540 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4200 +4100 +4080 +4240 +4A00 +4A00 +4A08 +4A04 +9202 +9210 +9210 +01F0 +ENDCHAR +STARTCHAR uni5FDD +ENCODING 24541 +BBX 14 15 1 -1 +BITMAP +01E0 +3E00 +0200 +0200 +FFFC +0480 +0840 +3230 +C20C +0200 +1290 +1248 +2224 +4224 +0E00 +ENDCHAR +STARTCHAR uni5FDE +ENCODING 24542 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +0440 +0280 +0100 +06C0 +1830 +E20E +0100 +2888 +2804 +4422 +83E2 +ENDCHAR +STARTCHAR uni5FDF +ENCODING 24543 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +1888 +5488 +5088 +5088 +9088 +1050 +1050 +1020 +1050 +1088 +1104 +1602 +ENDCHAR +STARTCHAR uni5FE0 +ENCODING 24544 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +3FF8 +2108 +2108 +2108 +3FF8 +0100 +0100 +2888 +2844 +480A +4408 +83F8 +ENDCHAR +STARTCHAR uni5FE1 +ENCODING 24545 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +23FE +A222 +B222 +AA22 +AA22 +AA22 +23FE +2020 +2020 +2020 +2020 +2020 +ENDCHAR +STARTCHAR uni5FE2 +ENCODING 24546 +BBX 15 14 1 -1 +BITMAP +3FF8 +0200 +0200 +1FE0 +0420 +0420 +0820 +7FFC +0200 +0100 +2488 +2404 +4412 +83F0 +ENDCHAR +STARTCHAR uni5FE3 +ENCODING 24547 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1084 +1088 +1888 +5490 +509C +5084 +9144 +1144 +1128 +1128 +1210 +1228 +1444 +1182 +ENDCHAR +STARTCHAR uni5FE4 +ENCODING 24548 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +11FC +1220 +5220 +5820 +5420 +97FE +9020 +1020 +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni5FE5 +ENCODING 24549 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +3FFC +2000 +4FF0 +8000 +3FF0 +0010 +0810 +0410 +1490 +5050 +514A +514A +8F06 +0002 +ENDCHAR +STARTCHAR uni5FE6 +ENCODING 24550 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +18A0 +5510 +5208 +5406 +9110 +1110 +1110 +1110 +1110 +1110 +1210 +1210 +1410 +ENDCHAR +STARTCHAR uni5FE7 +ENCODING 24551 +BBX 15 16 0 -2 +BITMAP +1090 +1088 +1088 +1080 +1BFE +54A0 +50A0 +50A0 +90A0 +10A0 +1120 +1122 +1122 +1222 +121E +1400 +ENDCHAR +STARTCHAR uni5FE8 +ENCODING 24552 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13F8 +1800 +5400 +5000 +57FC +9120 +1120 +1120 +1120 +1120 +1222 +1222 +141E +1800 +ENDCHAR +STARTCHAR uni5FE9 +ENCODING 24553 +BBX 15 15 1 -1 +BITMAP +03C0 +0840 +0820 +1210 +2208 +C446 +0420 +09D0 +7E0C +0000 +0200 +2908 +2884 +4412 +83F0 +ENDCHAR +STARTCHAR uni5FEA +ENCODING 24554 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +1120 +1910 +5510 +5248 +5248 +9444 +1882 +1080 +1110 +1108 +1208 +17FC +1204 +1000 +ENDCHAR +STARTCHAR uni5FEB +ENCODING 24555 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +27F8 +A088 +B088 +A888 +A888 +AFFE +2080 +2140 +2120 +2210 +2408 +2806 +ENDCHAR +STARTCHAR uni5FEC +ENCODING 24556 +BBX 15 16 0 -2 +BITMAP +1000 +13F8 +1008 +1910 +54A0 +5040 +57FE +9042 +1044 +1040 +1040 +1040 +1040 +1040 +1140 +1080 +ENDCHAR +STARTCHAR uni5FED +ENCODING 24557 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +1000 +1BFE +5440 +5040 +5060 +9050 +1048 +1044 +1044 +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni5FEE +ENCODING 24558 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +27FC +A040 +B040 +ABF8 +A808 +A108 +2110 +20A0 +2040 +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni5FEF +ENCODING 24559 +BBX 15 15 1 -1 +BITMAP +201C +23E0 +2220 +2220 +A220 +B220 +ABFE +AA20 +A220 +2220 +2210 +2210 +220A +23CA +2E04 +ENDCHAR +STARTCHAR uni5FF0 +ENCODING 24560 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +27F0 +2090 +A110 +B112 +AA12 +A44E +A040 +2FFE +2040 +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni5FF1 +ENCODING 24561 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +13FC +5244 +5A44 +5440 +9440 +9060 +10A0 +10A0 +1122 +1122 +1222 +141E +ENDCHAR +STARTCHAR uni5FF2 +ENCODING 24562 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +1040 +1BFE +5440 +5040 +50A0 +90A0 +10A0 +1110 +1110 +1288 +1248 +1444 +1802 +ENDCHAR +STARTCHAR uni5FF3 +ENCODING 24563 +BBX 15 15 1 -1 +BITMAP +2040 +2044 +2078 +23C0 +A040 +B248 +AA48 +AA48 +A248 +2248 +23F8 +2040 +2042 +2042 +203E +ENDCHAR +STARTCHAR uni5FF4 +ENCODING 24564 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +18A0 +5510 +5288 +5446 +9040 +1000 +13F8 +1008 +1010 +1010 +1020 +1020 +1040 +ENDCHAR +STARTCHAR uni5FF5 +ENCODING 24565 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0440 +1830 +E7CE +0000 +1FF0 +0010 +0020 +0240 +0900 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni5FF6 +ENCODING 24566 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +1800 +5400 +5000 +53FE +9020 +1020 +1040 +1040 +1088 +1104 +13FE +1102 +1000 +ENDCHAR +STARTCHAR uni5FF7 +ENCODING 24567 +BBX 15 16 0 -2 +BITMAP +1000 +1008 +1108 +1088 +1A52 +5652 +5222 +5222 +9252 +1292 +130A +120A +1202 +13FE +1002 +1000 +ENDCHAR +STARTCHAR uni5FF8 +ENCODING 24568 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1088 +1088 +5088 +5888 +5488 +97FE +9088 +1088 +1088 +1088 +1088 +17FE +1000 +ENDCHAR +STARTCHAR uni5FF9 +ENCODING 24569 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FE +1020 +1820 +5420 +5020 +5020 +91FC +1020 +1020 +1020 +1020 +1020 +17FE +1000 +ENDCHAR +STARTCHAR uni5FFA +ENCODING 24570 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +1080 +10FC +1904 +5508 +5240 +5440 +9040 +10A0 +10A0 +1090 +1110 +1108 +1204 +1402 +ENDCHAR +STARTCHAR uni5FFB +ENCODING 24571 +BBX 15 15 1 -1 +BITMAP +1018 +11E0 +1100 +1100 +5100 +59FE +5510 +9510 +9110 +1110 +1110 +1210 +1210 +1410 +1010 +ENDCHAR +STARTCHAR uni5FFC +ENCODING 24572 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +27FE +A000 +B000 +A9F0 +A110 +A110 +2110 +2110 +2110 +2212 +2212 +240E +ENDCHAR +STARTCHAR uni5FFD +ENCODING 24573 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +1FFC +6244 +0444 +1884 +E104 +0608 +3808 +0230 +0108 +2884 +2802 +4410 +83F0 +ENDCHAR +STARTCHAR uni5FFE +ENCODING 24574 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +11FC +1A00 +5400 +51F8 +5000 +9000 +13F8 +1008 +1008 +1008 +100A +100A +1006 +1002 +ENDCHAR +STARTCHAR uni5FFF +ENCODING 24575 +BBX 15 15 1 -1 +BITMAP +0060 +0420 +0810 +1008 +2FF4 +C212 +0410 +1820 +6020 +02C0 +0900 +2888 +2814 +4412 +83F0 +ENDCHAR +STARTCHAR uni6000 +ENCODING 24576 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +17FE +1020 +1820 +5440 +5040 +50D0 +9148 +1244 +1442 +1040 +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni6001 +ENCODING 24577 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +7FFC +0100 +0280 +0440 +0A20 +3118 +C006 +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni6002 +ENCODING 24578 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +0820 +0820 +1450 +1250 +2288 +2088 +4104 +8202 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni6003 +ENCODING 24579 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1040 +1840 +5440 +5040 +57FE +9040 +10A0 +10A0 +10A0 +1120 +1122 +1222 +141E +1800 +ENDCHAR +STARTCHAR uni6004 +ENCODING 24580 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1200 +1208 +1A88 +5650 +5250 +5220 +9220 +1250 +1250 +1288 +1308 +1200 +13FE +1000 +ENDCHAR +STARTCHAR uni6005 +ENCODING 24581 +BBX 15 16 0 -2 +BITMAP +1100 +1108 +1108 +1110 +1920 +5540 +5100 +57FE +9140 +1120 +1120 +1110 +1108 +1144 +1182 +1100 +ENDCHAR +STARTCHAR uni6006 +ENCODING 24582 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +18A0 +5510 +5208 +5406 +91F0 +1110 +1110 +1150 +1120 +1104 +1104 +10FC +1000 +ENDCHAR +STARTCHAR uni6007 +ENCODING 24583 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1200 +1200 +1A00 +57FC +5204 +5204 +9204 +1204 +13FC +1200 +1200 +1200 +13FE +1000 +ENDCHAR +STARTCHAR uni6008 +ENCODING 24584 +BBX 15 16 0 -2 +BITMAP +1048 +1248 +1248 +1248 +1A48 +57FE +5248 +5248 +9248 +1248 +1278 +1200 +1200 +1200 +13FE +1000 +ENDCHAR +STARTCHAR uni6009 +ENCODING 24585 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +11FC +1104 +1A04 +55F4 +5114 +5114 +9114 +11F4 +1104 +1128 +1112 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni600A +ENCODING 24586 +BBX 14 16 0 -2 +BITMAP +1000 +13FC +1084 +1084 +1884 +5504 +5114 +5208 +9400 +11FC +1104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni600B +ENCODING 24587 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1204 +1204 +1A04 +57FC +5220 +5220 +93FE +1220 +1220 +1210 +1212 +128A +1306 +1202 +ENDCHAR +STARTCHAR uni600C +ENCODING 24588 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1020 +1020 +1840 +5440 +50D0 +5148 +9244 +1444 +1040 +1040 +1040 +1000 +17FE +1000 +ENDCHAR +STARTCHAR uni600D +ENCODING 24589 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +2100 +23FE +A240 +B240 +AC40 +A87C +A040 +2040 +2040 +207C +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni600E +ENCODING 24590 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +3FFC +2100 +4100 +81F8 +0100 +0100 +01FC +0100 +0300 +0888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni600F +ENCODING 24591 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +23F8 +A248 +B248 +AA48 +AA48 +A248 +2FFE +2040 +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni6010 +ENCODING 24592 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +1100 +13FE +5202 +5802 +55F2 +9112 +9112 +1112 +1112 +11F2 +1004 +1004 +1038 +ENDCHAR +STARTCHAR uni6011 +ENCODING 24593 +BBX 15 16 0 -2 +BITMAP +2040 +2244 +2148 +3150 +A840 +A7FC +A040 +A040 +2040 +2FFE +2040 +2040 +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni6012 +ENCODING 24594 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +7F7C +1144 +1144 +2228 +7C10 +0A28 +3046 +C200 +0900 +2888 +2804 +4422 +83E2 +ENDCHAR +STARTCHAR uni6013 +ENCODING 24595 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +213E +2112 +37D2 +AA52 +A252 +A254 +A254 +2494 +2288 +2108 +2294 +24A4 +2842 +2080 +ENDCHAR +STARTCHAR uni6014 +ENCODING 24596 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +2040 +A040 +B040 +A840 +AA7C +A240 +2240 +2240 +2240 +2240 +2240 +2FFE +ENDCHAR +STARTCHAR uni6015 +ENCODING 24597 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1040 +11FE +5102 +5902 +5502 +9502 +91FE +1102 +1102 +1102 +1102 +1102 +11FE +ENDCHAR +STARTCHAR uni6016 +ENCODING 24598 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +27FE +A080 +B140 +A940 +A3FC +A644 +2A44 +2244 +2244 +2244 +224C +2040 +2040 +ENDCHAR +STARTCHAR uni6017 +ENCODING 24599 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +2040 +A07E +B040 +A840 +A840 +A3FC +2204 +2204 +2204 +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni6018 +ENCODING 24600 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +0100 +1FF0 +1010 +1010 +1010 +1FF0 +0100 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni6019 +ENCODING 24601 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +1020 +53FE +5820 +5420 +9420 +9020 +11FC +1104 +1104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni601A +ENCODING 24602 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +1908 +55F8 +5108 +5108 +9108 +11F8 +1108 +1108 +1108 +1108 +17FE +1000 +ENDCHAR +STARTCHAR uni601B +ENCODING 24603 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1108 +1108 +5108 +5908 +55F8 +9508 +9108 +1108 +1108 +11F8 +1000 +1000 +17FE +ENDCHAR +STARTCHAR uni601C +ENCODING 24604 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2110 +A208 +B5F4 +A802 +A800 +A3FC +2084 +2084 +2084 +2084 +209C +2080 +2080 +ENDCHAR +STARTCHAR uni601D +ENCODING 24605 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +2108 +3FF8 +2108 +2108 +2108 +3FF8 +0200 +2108 +2884 +4812 +4412 +83F0 +ENDCHAR +STARTCHAR uni601E +ENCODING 24606 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +1BFE +5622 +5222 +5222 +9222 +13FE +1222 +1222 +1222 +1222 +13FE +1202 +ENDCHAR +STARTCHAR uni601F +ENCODING 24607 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13E0 +1220 +1A20 +5620 +5220 +53FE +9220 +1210 +1210 +1212 +120A +128A +1326 +1212 +ENDCHAR +STARTCHAR uni6020 +ENCODING 24608 +BBX 15 15 1 -1 +BITMAP +0400 +0420 +0810 +11F8 +7E04 +0000 +1FF0 +1010 +1010 +1FF0 +0100 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni6021 +ENCODING 24609 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1050 +1088 +5884 +551E +53E2 +9000 +9000 +11FC +1104 +1104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni6022 +ENCODING 24610 +BBX 15 15 1 -1 +BITMAP +2040 +2240 +2240 +23FC +A440 +B440 +A840 +A040 +A7FE +20A0 +20A0 +2110 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni6023 +ENCODING 24611 +BBX 15 15 0 -1 +BITMAP +0900 +0900 +1FF0 +2100 +0100 +7FFC +0280 +0440 +0820 +3018 +C106 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni6024 +ENCODING 24612 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +17FE +2010 +6210 +A110 +2090 +2010 +2030 +0200 +0108 +2884 +2802 +4410 +83F0 +ENDCHAR +STARTCHAR uni6025 +ENCODING 24613 +BBX 15 15 1 -1 +BITMAP +0400 +0FE0 +1040 +2080 +DFF0 +0010 +1FF0 +0010 +0010 +3FF0 +0110 +0888 +2814 +4412 +83F0 +ENDCHAR +STARTCHAR uni6026 +ENCODING 24614 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +2150 +A148 +B244 +AC44 +A040 +AFFE +2040 +2040 +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni6027 +ENCODING 24615 +BBX 15 15 1 -1 +BITMAP +2040 +2240 +2240 +B240 +ABFC +A440 +A840 +2040 +2040 +23F8 +2040 +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6028 +ENCODING 24616 +BBX 15 15 1 -1 +BITMAP +1000 +1EF8 +1288 +2288 +6288 +9298 +0C82 +0882 +307E +C100 +0080 +2448 +2404 +4212 +81F2 +ENDCHAR +STARTCHAR uni6029 +ENCODING 24617 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1204 +1204 +53FC +5A00 +5680 +9280 +929C +12E0 +1280 +1480 +1482 +1882 +107E +ENDCHAR +STARTCHAR uni602A +ENCODING 24618 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2004 +2108 +A090 +B060 +A998 +AE06 +A040 +2040 +27FC +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni602B +ENCODING 24619 +BBX 15 15 1 -1 +BITMAP +2120 +2120 +2FFC +2124 +A124 +AFFC +A920 +B920 +AFFE +2122 +2122 +2222 +2222 +242C +2820 +ENDCHAR +STARTCHAR uni602C +ENCODING 24620 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FE +1252 +1A52 +5652 +5252 +5252 +9252 +1292 +128E +1302 +1202 +1202 +13FE +1202 +ENDCHAR +STARTCHAR uni602D +ENCODING 24621 +BBX 15 16 0 -2 +BITMAP +1000 +1040 +1020 +1028 +1808 +5488 +5090 +5294 +92A2 +12A2 +14C2 +1088 +1188 +1288 +1478 +1000 +ENDCHAR +STARTCHAR uni602E +ENCODING 24622 +BBX 14 16 0 -2 +BITMAP +2220 +2220 +2220 +3420 +AD7C +A924 +AE24 +A224 +2424 +2424 +2924 +2F24 +2144 +2044 +2094 +2108 +ENDCHAR +STARTCHAR uni602F +ENCODING 24623 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +27FC +A040 +B040 +A840 +AFFE +A080 +2080 +2090 +2108 +210C +2272 +2F82 +ENDCHAR +STARTCHAR uni6030 +ENCODING 24624 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +1840 +5440 +5088 +5108 +93F0 +1020 +1040 +1088 +1104 +13FC +1104 +1000 +ENDCHAR +STARTCHAR uni6031 +ENCODING 24625 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +1FFC +3124 +D224 +0C44 +1A44 +6184 +0664 +3818 +0100 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni6032 +ENCODING 24626 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1020 +1820 +57FE +5222 +5222 +9252 +124A +128A +1302 +1202 +1202 +120A +1204 +ENDCHAR +STARTCHAR uni6033 +ENCODING 24627 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +2208 +A208 +B208 +AA08 +ABF8 +A0A0 +20A0 +20A0 +2120 +2122 +2222 +2C1E +ENDCHAR +STARTCHAR uni6034 +ENCODING 24628 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +1024 +1020 +1BFE +5620 +5224 +5224 +9224 +1228 +1228 +1290 +1312 +122A +1046 +1082 +ENDCHAR +STARTCHAR uni6035 +ENCODING 24629 +BBX 15 15 1 -1 +BITMAP +2048 +2044 +2044 +27FE +A040 +B040 +AA48 +AA48 +A248 +2248 +2248 +244A +2446 +2040 +2040 +ENDCHAR +STARTCHAR uni6036 +ENCODING 24630 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +1A22 +5624 +5220 +53FC +9284 +1288 +1248 +1250 +1220 +1450 +1488 +1906 +ENDCHAR +STARTCHAR uni6037 +ENCODING 24631 +BBX 15 15 0 -1 +BITMAP +0110 +0108 +0100 +FFFE +0100 +1110 +1110 +1110 +2110 +C00E +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni6038 +ENCODING 24632 +BBX 15 15 0 -1 +BITMAP +0120 +0110 +0100 +7FFC +0380 +0540 +0920 +3118 +C106 +0000 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni6039 +ENCODING 24633 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2240 +2278 +63C8 +AE48 +2268 +2252 +2242 +2202 +21FE +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni603A +ENCODING 24634 +BBX 15 15 1 -1 +BITMAP +2180 +2040 +2020 +2000 +A3C0 +B040 +A844 +A768 +A168 +2170 +2250 +2248 +2444 +2842 +21C0 +ENDCHAR +STARTCHAR uni603B +ENCODING 24635 +BBX 15 15 0 -1 +BITMAP +1010 +0820 +0440 +0000 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni603C +ENCODING 24636 +BBX 15 15 0 -1 +BITMAP +0008 +0008 +7E08 +02FE +2408 +1448 +0828 +1408 +2228 +4010 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni603D +ENCODING 24637 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +13FC +1840 +5440 +5040 +57FE +90E0 +1150 +1150 +1248 +1444 +1842 +1040 +1040 +ENDCHAR +STARTCHAR uni603E +ENCODING 24638 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +1104 +1904 +5504 +5104 +5104 +91FC +1104 +1000 +1090 +1088 +1104 +1202 +1402 +ENDCHAR +STARTCHAR uni603F +ENCODING 24639 +BBX 15 16 0 -2 +BITMAP +1000 +17F8 +1208 +1110 +18A0 +5440 +51B0 +564E +9040 +13F8 +1040 +1040 +17FC +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni6040 +ENCODING 24640 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10FC +1108 +1A90 +5460 +5048 +5190 +963E +1042 +1084 +1348 +1030 +1020 +10C0 +1700 +ENDCHAR +STARTCHAR uni6041 +ENCODING 24641 +BBX 15 15 1 -1 +BITMAP +0838 +17C0 +1040 +2040 +2040 +6FFE +A040 +2040 +2040 +27FC +2100 +0888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni6042 +ENCODING 24642 +BBX 14 15 1 -1 +BITMAP +2200 +2200 +23FC +2404 +A404 +B3E4 +AA24 +A224 +A3E4 +2224 +2224 +23E4 +2008 +2008 +2070 +ENDCHAR +STARTCHAR uni6043 +ENCODING 24643 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +2040 +B040 +AFFE +A808 +A008 +A7FE +2008 +2208 +2108 +2088 +2008 +2038 +ENDCHAR +STARTCHAR uni6044 +ENCODING 24644 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +1820 +5420 +51FC +5000 +9000 +11FC +1104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni6045 +ENCODING 24645 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1044 +19F4 +5448 +5050 +53FE +9040 +1080 +1184 +1298 +14E0 +1082 +1082 +107E +1000 +ENDCHAR +STARTCHAR uni6046 +ENCODING 24646 +BBX 15 15 1 -1 +BITMAP +2000 +2FFC +2100 +2100 +A1F0 +B110 +A990 +AA50 +A210 +2290 +2250 +2010 +2010 +2FFE +2000 +ENDCHAR +STARTCHAR uni6047 +ENCODING 24647 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2200 +22F8 +A220 +B220 +AA20 +AAF8 +A220 +2220 +2220 +2220 +22FC +2200 +23FE +ENDCHAR +STARTCHAR uni6048 +ENCODING 24648 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1090 +1108 +1BFC +5424 +5120 +5120 +91FC +1220 +1020 +17FE +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni6049 +ENCODING 24649 +BBX 15 16 0 -2 +BITMAP +1100 +1104 +1138 +11C0 +1902 +5502 +50FE +5000 +91FC +1104 +1104 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni604A +ENCODING 24650 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23F8 +2088 +A088 +B108 +AA30 +A210 +A210 +2FFE +2492 +2492 +2492 +28A2 +334C +ENDCHAR +STARTCHAR uni604B +ENCODING 24651 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +2448 +2448 +4444 +4842 +88C0 +0200 +0900 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni604C +ENCODING 24652 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +2492 +2294 +A298 +B090 +A890 +A890 +A198 +2294 +2492 +2110 +2110 +2212 +240E +ENDCHAR +STARTCHAR uni604D +ENCODING 24653 +BBX 15 15 1 -1 +BITMAP +2040 +2244 +2244 +2148 +A148 +A040 +A840 +AFFE +A090 +2090 +2090 +2110 +2112 +2212 +240E +ENDCHAR +STARTCHAR uni604E +ENCODING 24654 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1040 +1888 +5504 +53FE +5022 +9020 +1020 +13FE +1020 +1020 +1020 +17FE +1000 +ENDCHAR +STARTCHAR uni604F +ENCODING 24655 +BBX 15 15 0 -1 +BITMAP +1000 +10FC +FE04 +2208 +2210 +64FE +1410 +0810 +3450 +C220 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni6050 +ENCODING 24656 +BBX 15 14 1 -1 +BITMAP +03F0 +FA10 +2210 +2290 +2250 +3A12 +C412 +080E +0200 +2908 +2884 +4812 +4412 +83F0 +ENDCHAR +STARTCHAR uni6051 +ENCODING 24657 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10FC +1104 +1A08 +55FE +5100 +517C +9144 +1144 +1154 +1148 +1142 +1242 +123E +1400 +ENDCHAR +STARTCHAR uni6052 +ENCODING 24658 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2000 +2000 +A1F8 +B108 +A908 +A9F8 +A108 +2108 +2108 +21F8 +2000 +2000 +27FE +ENDCHAR +STARTCHAR uni6053 +ENCODING 24659 +BBX 15 16 0 -2 +BITMAP +1000 +17FE +1090 +1890 +5490 +53FC +5294 +9294 +1294 +1294 +129C +1304 +1204 +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni6054 +ENCODING 24660 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +1800 +5488 +5104 +5202 +9088 +1088 +1050 +1050 +1020 +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni6055 +ENCODING 24661 +BBX 15 15 1 -1 +BITMAP +0800 +087C +FF44 +1144 +2244 +7444 +0C44 +337C +C000 +0200 +2908 +2884 +4802 +4410 +83F0 +ENDCHAR +STARTCHAR uni6056 +ENCODING 24662 +BBX 15 15 0 -1 +BITMAP +0200 +0400 +3FF8 +2448 +2288 +2108 +2288 +2448 +3FF8 +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni6057 +ENCODING 24663 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1050 +1888 +5504 +52FA +5000 +93FE +1040 +1080 +11FC +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni6058 +ENCODING 24664 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1090 +1910 +55FE +5310 +5510 +9138 +1138 +1154 +1154 +1192 +1110 +1110 +1110 +1110 +ENDCHAR +STARTCHAR uni6059 +ENCODING 24665 +BBX 15 15 1 -1 +BITMAP +0820 +0420 +0440 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +0200 +2908 +2884 +4412 +83F0 +ENDCHAR +STARTCHAR uni605A +ENCODING 24666 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +1FF0 +0100 +7FFC +0100 +3FF8 +0100 +0100 +FFFE +0200 +2908 +2884 +4412 +83F0 +ENDCHAR +STARTCHAR uni605B +ENCODING 24667 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +13FC +1204 +1A04 +56F4 +5294 +5294 +9294 +1294 +12F4 +1204 +1204 +13FC +1204 +1000 +ENDCHAR +STARTCHAR uni605C +ENCODING 24668 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +1024 +1820 +57FE +5020 +5020 +97E0 +1120 +1110 +1110 +1110 +11CA +170A +1206 +1002 +ENDCHAR +STARTCHAR uni605D +ENCODING 24669 +BBX 15 15 0 -1 +BITMAP +0800 +0800 +7F7C +0824 +3E24 +0824 +7F44 +0854 +0888 +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni605E +ENCODING 24670 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FC +1040 +1BF8 +5448 +53F8 +5240 +93FC +1044 +1054 +10A8 +10A0 +1110 +1208 +1406 +ENDCHAR +STARTCHAR uni605F +ENCODING 24671 +BBX 14 15 1 -1 +BITMAP +2200 +2200 +23FC +2404 +A844 +B244 +AD54 +A494 +A4D4 +2534 +2614 +27F4 +2008 +2008 +2030 +ENDCHAR +STARTCHAR uni6060 +ENCODING 24672 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +2FFE +A100 +B120 +AA20 +A420 +ACFC +3420 +2420 +2420 +2420 +2420 +25FE +ENDCHAR +STARTCHAR uni6061 +ENCODING 24673 +BBX 15 16 0 -2 +BITMAP +1008 +1190 +1060 +1098 +1B04 +5440 +5040 +57FE +9080 +1090 +1110 +1120 +1248 +1484 +19FC +1084 +ENDCHAR +STARTCHAR uni6062 +ENCODING 24674 +BBX 15 15 1 -1 +BITMAP +2400 +2FFE +2400 +2420 +A4A2 +B4A2 +AD24 +A524 +A428 +2420 +2450 +2850 +2888 +2104 +2202 +ENDCHAR +STARTCHAR uni6063 +ENCODING 24675 +BBX 15 15 1 -1 +BITMAP +0100 +4100 +23FC +1244 +0448 +00A0 +10A0 +2110 +4208 +8C06 +0100 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni6064 +ENCODING 24676 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +2080 +23F8 +A2A8 +B2A8 +AAA8 +AAA8 +A2A8 +22A8 +22A8 +22A8 +22A8 +2FFE +2000 +ENDCHAR +STARTCHAR uni6065 +ENCODING 24677 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +4810 +4810 +7848 +4840 +4840 +7844 +4944 +4942 +4942 +7A40 +CA44 +0824 +081C +ENDCHAR +STARTCHAR uni6066 +ENCODING 24678 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1080 +13FC +1A04 +5604 +52F4 +5294 +9294 +1294 +1294 +12F4 +1204 +1204 +1214 +1208 +ENDCHAR +STARTCHAR uni6067 +ENCODING 24679 +BBX 15 14 0 -1 +BITMAP +FFFE +0200 +0400 +3FF8 +2488 +2488 +2488 +24A8 +2010 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni6068 +ENCODING 24680 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +2208 +A3F8 +B208 +AA08 +A3F8 +A242 +2244 +2228 +2210 +2208 +23C4 +2E02 +ENDCHAR +STARTCHAR uni6069 +ENCODING 24681 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +2108 +2FE8 +2288 +2448 +2828 +3FF8 +0100 +2888 +2884 +4802 +4410 +83F0 +ENDCHAR +STARTCHAR uni606A +ENCODING 24682 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +23F8 +2208 +A510 +A0A0 +B0E0 +AB18 +AC06 +23F8 +2208 +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni606B +ENCODING 24683 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2404 +2404 +A5F4 +B404 +AC04 +A5F4 +A514 +2514 +2514 +25F4 +2404 +2404 +241C +ENDCHAR +STARTCHAR uni606C +ENCODING 24684 +BBX 15 15 1 -1 +BITMAP +2038 +23C0 +2040 +2040 +A040 +B7FE +A840 +A040 +A040 +23F8 +2208 +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni606D +ENCODING 24685 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +7FF8 +0840 +0840 +FFFC +1020 +2210 +4208 +8204 +2210 +2288 +4244 +8220 +0E00 +ENDCHAR +STARTCHAR uni606E +ENCODING 24686 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +1110 +1A08 +5406 +53F8 +5040 +9040 +1040 +13F8 +1040 +1040 +1040 +17FE +1000 +ENDCHAR +STARTCHAR uni606F +ENCODING 24687 +BBX 15 15 1 -1 +BITMAP +0080 +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0100 +2888 +2884 +4412 +83F2 +ENDCHAR +STARTCHAR uni6070 +ENCODING 24688 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +20A0 +2110 +A208 +BC06 +A9F0 +A000 +A000 +23F8 +2208 +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni6071 +ENCODING 24689 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1108 +1148 +1A44 +5492 +5108 +53FC +9094 +1090 +1090 +1090 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni6072 +ENCODING 24690 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +1000 +1BFE +5488 +5088 +5088 +9088 +17FE +1088 +1088 +1108 +1108 +1208 +1408 +ENDCHAR +STARTCHAR uni6073 +ENCODING 24691 +BBX 15 14 0 -1 +BITMAP +3FF0 +2010 +3FF0 +2010 +3FF0 +2208 +2190 +2C60 +301C +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni6074 +ENCODING 24692 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +FFFE +0000 +3FF8 +2008 +3FF8 +2008 +3FF8 +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni6075 +ENCODING 24693 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +2108 +3FF8 +2108 +2108 +3FF8 +0100 +2888 +2814 +4412 +83F0 +ENDCHAR +STARTCHAR uni6076 +ENCODING 24694 +BBX 15 14 0 -1 +BITMAP +7FFC +0440 +2448 +1448 +1450 +0440 +FFFE +0000 +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni6077 +ENCODING 24695 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +1040 +27FC +6150 +A150 +2248 +2444 +2842 +2040 +0100 +2488 +2404 +4212 +81F0 +ENDCHAR +STARTCHAR uni6078 +ENCODING 24696 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +2790 +3010 +A87E +A012 +AFD2 +A212 +2212 +2422 +2522 +28A2 +2FC2 +2042 +2094 +2108 +ENDCHAR +STARTCHAR uni6079 +ENCODING 24697 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1220 +1228 +1A24 +5620 +53FE +5220 +9220 +1250 +1250 +1250 +1488 +1488 +1904 +1202 +ENDCHAR +STARTCHAR uni607A +ENCODING 24698 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +19FC +5400 +51FC +5004 +9004 +11FC +1100 +1100 +1102 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni607B +ENCODING 24699 +BBX 14 16 0 -2 +BITMAP +2004 +27C4 +2444 +2454 +3554 +AD54 +A554 +A554 +A554 +2554 +2554 +2104 +2284 +2244 +2414 +2808 +ENDCHAR +STARTCHAR uni607C +ENCODING 24700 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +17FE +1800 +5400 +5090 +5254 +9224 +1224 +1254 +1294 +1204 +1204 +13FC +1004 +ENDCHAR +STARTCHAR uni607D +ENCODING 24701 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1C44 +5440 +53FC +5080 +90A0 +1120 +11FC +1020 +1020 +17FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni607E +ENCODING 24702 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +17FE +1090 +1890 +5440 +5020 +57FE +9100 +1100 +1100 +1100 +1100 +1100 +11FC +1000 +ENDCHAR +STARTCHAR uni607F +ENCODING 24703 +BBX 15 14 1 -1 +BITMAP +3FF0 +0020 +0440 +3FF8 +2108 +3FF8 +2108 +3FF8 +2108 +4018 +0104 +2882 +4812 +87F0 +ENDCHAR +STARTCHAR uni6080 +ENCODING 24704 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1008 +18D0 +5420 +53FE +5222 +9222 +13FE +1222 +1222 +13FE +1222 +1222 +122A +1204 +ENDCHAR +STARTCHAR uni6081 +ENCODING 24705 +BBX 14 15 1 -1 +BITMAP +2000 +23FC +2204 +2204 +A3FC +B000 +ABFC +AA04 +A3FC +2204 +2204 +23FC +2204 +2204 +221C +ENDCHAR +STARTCHAR uni6082 +ENCODING 24706 +BBX 15 16 0 -2 +BITMAP +1220 +1224 +1228 +13B0 +1A20 +5622 +52A2 +531E +9040 +1040 +13FC +1040 +1040 +1040 +17FE +1000 +ENDCHAR +STARTCHAR uni6083 +ENCODING 24707 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2404 +2444 +A444 +B7FC +AC44 +A444 +A4E4 +24E4 +2554 +264C +2444 +2404 +27FC +ENDCHAR +STARTCHAR uni6084 +ENCODING 24708 +BBX 14 15 1 -1 +BITMAP +2150 +2248 +2444 +2040 +A3F8 +B208 +AA08 +ABF8 +A208 +2208 +23F8 +2208 +2208 +2208 +2238 +ENDCHAR +STARTCHAR uni6085 +ENCODING 24709 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +1088 +1108 +1A04 +55FA +5108 +5108 +9108 +11F8 +1090 +1090 +1090 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni6086 +ENCODING 24710 +BBX 15 15 0 -1 +BITMAP +0100 +0280 +0C60 +3018 +CFE6 +0100 +3FF8 +1110 +2508 +0200 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni6087 +ENCODING 24711 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +1110 +1A08 +55F6 +5040 +5040 +97FC +1040 +1250 +1248 +1444 +1844 +1140 +1080 +ENDCHAR +STARTCHAR uni6088 +ENCODING 24712 +BBX 15 16 0 -2 +BITMAP +1010 +1014 +1012 +1010 +1BFE +5410 +5150 +5154 +97F4 +1154 +1154 +1148 +124A +125A +1426 +1042 +ENDCHAR +STARTCHAR uni6089 +ENCODING 24713 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +1108 +0910 +FFFE +0540 +0920 +3118 +C106 +0200 +0900 +2888 +2814 +4412 +83F0 +ENDCHAR +STARTCHAR uni608A +ENCODING 24714 +BBX 15 15 1 -1 +BITMAP +2018 +21E0 +F900 +21FE +2110 +3910 +E110 +2210 +2410 +6010 +0200 +2908 +2884 +4812 +87F0 +ENDCHAR +STARTCHAR uni608B +ENCODING 24715 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2208 +A110 +B0E0 +AB18 +AC06 +A000 +23F8 +2208 +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni608C +ENCODING 24716 +BBX 15 15 1 -1 +BITMAP +2108 +2090 +27FC +2044 +B044 +ABFC +AA40 +A240 +23FE +2042 +20C2 +2142 +2242 +244C +2040 +ENDCHAR +STARTCHAR uni608D +ENCODING 24717 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +A208 +B208 +ABF8 +A800 +A7FC +2040 +2040 +2FFE +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni608E +ENCODING 24718 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +1120 +11FE +1A20 +5420 +5020 +53FE +9000 +1000 +11FC +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni608F +ENCODING 24719 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +1820 +5420 +5124 +5124 +9124 +12AA +1020 +1050 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni6090 +ENCODING 24720 +BBX 15 16 0 -2 +BITMAP +4420 +2820 +10A4 +28A4 +48A8 +9920 +2820 +4850 +8850 +0888 +5104 +2202 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni6091 +ENCODING 24721 +BBX 15 16 0 -2 +BITMAP +1048 +1044 +13FE +1840 +5440 +53FC +5244 +9244 +13FC +1244 +1244 +13FC +1244 +1244 +1254 +1208 +ENDCHAR +STARTCHAR uni6092 +ENCODING 24722 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +2208 +A3F8 +B000 +AFFC +A444 +A444 +2444 +27FC +2400 +2402 +2402 +23FE +ENDCHAR +STARTCHAR uni6093 +ENCODING 24723 +BBX 15 16 0 -2 +BITMAP +1000 +13F8 +1208 +1208 +1BF8 +5608 +5208 +53F8 +9208 +1208 +13F8 +1120 +1120 +1222 +1422 +181E +ENDCHAR +STARTCHAR uni6094 +ENCODING 24724 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +27FC +2800 +A000 +A3F8 +B248 +AA48 +BFFE +2488 +2488 +2488 +27FE +2010 +2070 +ENDCHAR +STARTCHAR uni6095 +ENCODING 24725 +BBX 15 15 1 -1 +BITMAP +2108 +2090 +2060 +2198 +A604 +B080 +ABFE +A900 +A240 +27FC +2A44 +2244 +2244 +224C +2040 +ENDCHAR +STARTCHAR uni6096 +ENCODING 24726 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2040 +A040 +B7FC +AC04 +A3F8 +A010 +2020 +2FFE +2040 +2040 +2040 +21C0 +ENDCHAR +STARTCHAR uni6097 +ENCODING 24727 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +23F0 +2410 +B020 +AFFC +A444 +A444 +A7FC +20A0 +20A0 +2120 +2222 +2422 +281E +ENDCHAR +STARTCHAR uni6098 +ENCODING 24728 +BBX 15 14 0 -1 +BITMAP +3FF8 +2400 +27F0 +2880 +3FFC +2140 +2220 +2410 +3FFC +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni6099 +ENCODING 24729 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +19F8 +5508 +5108 +51F8 +9000 +13FC +1008 +1030 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni609A +ENCODING 24730 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2040 +A3F8 +B248 +AA48 +AA48 +A3F8 +2150 +2150 +2248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni609B +ENCODING 24731 +BBX 15 15 1 -1 +BITMAP +2080 +2090 +2108 +27F4 +A0A4 +B120 +AA1E +A480 +A0FC +2108 +2308 +2490 +2060 +2198 +2606 +ENDCHAR +STARTCHAR uni609C +ENCODING 24732 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +1904 +55FC +5000 +5000 +93FE +1020 +1020 +11FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni609D +ENCODING 24733 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2248 +2248 +A3F8 +B248 +AA48 +ABF8 +A040 +2040 +23F8 +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni609E +ENCODING 24734 +BBX 15 15 1 -1 +BITMAP +2000 +20F8 +2288 +2288 +A288 +B2F8 +AA00 +AA00 +A3FC +2044 +2044 +2FFE +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni609F +ENCODING 24735 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +2040 +A3F8 +B088 +A888 +A888 +27FE +2000 +23FC +2204 +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni60A0 +ENCODING 24736 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +28FE +6988 +AA88 +2850 +2820 +2850 +2088 +2306 +0100 +2888 +2814 +4412 +83F0 +ENDCHAR +STARTCHAR uni60A1 +ENCODING 24737 +BBX 15 15 0 -1 +BITMAP +0604 +7804 +0844 +0844 +FF44 +1C44 +2A44 +4904 +8814 +0808 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni60A2 +ENCODING 24738 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +13F8 +1208 +1A08 +57F8 +5208 +5208 +93F8 +1240 +1244 +1228 +1210 +1288 +1306 +1200 +ENDCHAR +STARTCHAR uni60A3 +ENCODING 24739 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +1FF0 +1110 +1FF0 +0100 +3FF8 +2108 +2108 +3FF8 +0100 +2888 +2844 +440A +83F8 +ENDCHAR +STARTCHAR uni60A4 +ENCODING 24740 +BBX 15 16 0 -2 +BITMAP +0200 +0400 +3FF8 +2208 +23C8 +2448 +2A88 +2108 +2288 +2408 +3FF8 +2008 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni60A5 +ENCODING 24741 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0000 +3FF8 +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni60A6 +ENCODING 24742 +BBX 15 15 1 -1 +BITMAP +2108 +2088 +2090 +23FC +A204 +B204 +AA04 +ABFC +A090 +2090 +2090 +2110 +2112 +2212 +240E +ENDCHAR +STARTCHAR uni60A7 +ENCODING 24743 +BBX 14 15 1 -1 +BITMAP +2084 +2704 +2124 +2124 +A124 +B7A4 +A924 +A124 +A3A4 +2364 +2524 +2504 +2904 +2104 +211C +ENDCHAR +STARTCHAR uni60A8 +ENCODING 24744 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +13FC +2444 +6048 +A240 +2248 +2444 +2842 +20C0 +0100 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni60A9 +ENCODING 24745 +BBX 15 15 1 -1 +BITMAP +2082 +2842 +2444 +2408 +B000 +A810 +A414 +A524 +A4A4 +2444 +24A4 +2514 +2604 +2404 +27FC +ENDCHAR +STARTCHAR uni60AA +ENCODING 24746 +BBX 14 14 1 -1 +BITMAP +7FF8 +0480 +0480 +3FF0 +2490 +2490 +3FF0 +0480 +0480 +7FF8 +0110 +2888 +4814 +87F0 +ENDCHAR +STARTCHAR uni60AB +ENCODING 24747 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0100 +3FF8 +0000 +7FFE +4002 +8FE4 +0820 +1022 +2022 +C11E +2888 +28A4 +4824 +07E0 +ENDCHAR +STARTCHAR uni60AC +ENCODING 24748 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +FFFE +0820 +1010 +3FF8 +1008 +0100 +2888 +28A4 +4824 +07E0 +ENDCHAR +STARTCHAR uni60AD +ENCODING 24749 +BBX 15 16 0 -2 +BITMAP +1080 +12FC +12A4 +12A4 +1AA8 +5690 +52A8 +50C6 +9020 +1020 +11FC +1020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni60AE +ENCODING 24750 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2208 +2208 +33F8 +A800 +A000 +A7FC +A040 +2040 +2FFE +2040 +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni60AF +ENCODING 24751 +BBX 15 16 0 -2 +BITMAP +1100 +10BE +1282 +1202 +1A42 +5622 +53FE +5292 +9252 +1222 +1252 +128A +130A +1202 +120A +1204 +ENDCHAR +STARTCHAR uni60B0 +ENCODING 24752 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2402 +A402 +B1F8 +A800 +A800 +A7FE +2040 +2248 +2248 +2444 +2442 +21C0 +ENDCHAR +STARTCHAR uni60B1 +ENCODING 24753 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +2090 +279E +A090 +B090 +AB9E +A890 +A090 +2190 +269E +2090 +2090 +2110 +2610 +ENDCHAR +STARTCHAR uni60B2 +ENCODING 24754 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +FC7E +0440 +7C7C +0440 +1C40 +E47E +0840 +3240 +C900 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni60B3 +ENCODING 24755 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +0FF0 +2810 +2FF0 +2810 +2FF0 +2000 +3FF8 +0200 +2908 +4824 +87E2 +ENDCHAR +STARTCHAR uni60B4 +ENCODING 24756 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2000 +A110 +B110 +AAA8 +A4A4 +A000 +2040 +2FFE +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni60B5 +ENCODING 24757 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2200 +23F8 +A200 +B3F8 +AA00 +AA00 +AFFE +2244 +2244 +2228 +2210 +23C8 +2E06 +ENDCHAR +STARTCHAR uni60B6 +ENCODING 24758 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8204 +8104 +8524 +9414 +9414 +A444 +A3C4 +801C +ENDCHAR +STARTCHAR uni60B7 +ENCODING 24759 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FC +1204 +1A04 +57FC +5200 +5228 +9224 +13FE +1220 +1250 +1250 +1488 +1504 +1A02 +ENDCHAR +STARTCHAR uni60B8 +ENCODING 24760 +BBX 15 15 1 -1 +BITMAP +2078 +27C0 +2040 +27FE +A150 +B248 +AC44 +A802 +A3F8 +2030 +2040 +2FFE +2040 +2040 +21C0 +ENDCHAR +STARTCHAR uni60B9 +ENCODING 24761 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4002 +9FE4 +1020 +1FE0 +1000 +1FF0 +1010 +1010 +1FF0 +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni60BA +ENCODING 24762 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1A02 +5404 +51F8 +5108 +9108 +11F8 +1100 +1100 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni60BB +ENCODING 24763 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +1820 +57FE +5088 +5050 +93FE +1020 +1020 +17FE +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni60BC +ENCODING 24764 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +207C +2040 +A3F8 +B208 +ABF8 +A208 +A208 +23F8 +2040 +2FFE +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni60BD +ENCODING 24765 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2040 +A3FC +B044 +AFFE +A044 +A3FC +2040 +27FE +2088 +23F0 +20D8 +2706 +ENDCHAR +STARTCHAR uni60BE +ENCODING 24766 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +2202 +A292 +B090 +A890 +A90E +A200 +2000 +21FC +2020 +2020 +2020 +23FE +ENDCHAR +STARTCHAR uni60BF +ENCODING 24767 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1040 +1040 +1BFE +54A0 +5110 +5208 +9446 +1040 +1048 +1264 +1252 +1452 +1140 +1080 +ENDCHAR +STARTCHAR uni60C0 +ENCODING 24768 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +20A0 +3110 +AA08 +ADF6 +A000 +A7FC +24A4 +24A4 +27FC +24A4 +24A4 +24A4 +2414 +2408 +ENDCHAR +STARTCHAR uni60C1 +ENCODING 24769 +BBX 15 15 0 -1 +BITMAP +080C +08F0 +7E80 +1880 +2CFE +2A88 +4888 +8888 +0908 +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni60C2 +ENCODING 24770 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +10F8 +1108 +1A10 +5400 +5040 +539C +9204 +1204 +139C +1204 +1204 +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni60C3 +ENCODING 24771 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1204 +1204 +1BFC +5604 +5204 +53FC +9000 +1220 +1224 +13A8 +1230 +1222 +12A2 +131E +ENDCHAR +STARTCHAR uni60C4 +ENCODING 24772 +BBX 15 16 0 -2 +BITMAP +0800 +0F7C +0844 +0844 +FF48 +0828 +2A30 +4910 +8928 +2844 +1082 +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni60C5 +ENCODING 24773 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2040 +A3F8 +B040 +AFFE +A000 +A3F8 +2208 +23F8 +2208 +23F8 +2208 +2218 +ENDCHAR +STARTCHAR uni60C6 +ENCODING 24774 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2444 +2444 +A5F4 +B444 +AC44 +A5F4 +A444 +25F4 +2514 +2514 +25F4 +2404 +281C +ENDCHAR +STARTCHAR uni60C7 +ENCODING 24775 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2000 +B1F8 +A908 +A9F8 +A000 +23FC +2018 +2020 +27FE +2020 +2020 +20E0 +ENDCHAR +STARTCHAR uni60C8 +ENCODING 24776 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2244 +2244 +A3FC +B244 +AA44 +ABFC +A040 +27FE +2150 +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni60C9 +ENCODING 24777 +BBX 15 15 0 -1 +BITMAP +1040 +0840 +407E +2040 +0840 +13FC +7204 +1204 +13FC +1000 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni60CA +ENCODING 24778 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +1800 +55FC +5104 +5104 +91FC +1020 +1128 +1124 +1222 +1422 +10A0 +1040 +ENDCHAR +STARTCHAR uni60CB +ENCODING 24779 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2404 +A404 +B200 +ABBC +AAA4 +A4A4 +2CA4 +22A4 +21AC +2120 +2222 +2C1E +ENDCHAR +STARTCHAR uni60CC +ENCODING 24780 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +9004 +1EF8 +2288 +24A8 +5490 +0884 +1084 +607C +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni60CD +ENCODING 24781 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +1110 +1A08 +5406 +51F0 +5040 +9040 +13F8 +1040 +1248 +1148 +1150 +17FC +1000 +ENDCHAR +STARTCHAR uni60CE +ENCODING 24782 +BBX 15 15 0 -1 +BITMAP +0820 +7FFC +0820 +0FE0 +0820 +0FE0 +0820 +FFFE +1010 +2208 +C106 +0900 +2828 +2824 +47E4 +ENDCHAR +STARTCHAR uni60CF +ENCODING 24783 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +2110 +2110 +37BC +A910 +A110 +A338 +A3B8 +2554 +2554 +2992 +2110 +2110 +2110 +2110 +ENDCHAR +STARTCHAR uni60D0 +ENCODING 24784 +BBX 15 16 0 -2 +BITMAP +1014 +1012 +1010 +17FE +1810 +5410 +53D2 +5252 +9252 +1254 +13D4 +1008 +10EA +171A +1226 +1042 +ENDCHAR +STARTCHAR uni60D1 +ENCODING 24785 +BBX 15 15 1 -1 +BITMAP +0090 +0088 +FFFE +0080 +3E44 +2244 +3E28 +0010 +1E2A +E0C6 +0704 +0108 +28C4 +4812 +87F0 +ENDCHAR +STARTCHAR uni60D2 +ENCODING 24786 +BBX 15 15 0 -1 +BITMAP +0600 +787C +0844 +0844 +FF44 +1C44 +2A44 +497C +8844 +0800 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni60D3 +ENCODING 24787 +BBX 15 15 1 -1 +BITMAP +2150 +2150 +2248 +27FC +A0A0 +B0A0 +AFFE +A110 +A3F8 +2414 +2812 +23F0 +2204 +2204 +21FC +ENDCHAR +STARTCHAR uni60D4 +ENCODING 24788 +BBX 15 15 1 -1 +BITMAP +2020 +2122 +2122 +2224 +A050 +B088 +AB06 +A820 +A122 +2122 +2224 +2220 +2050 +2088 +2706 +ENDCHAR +STARTCHAR uni60D5 +ENCODING 24789 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +A208 +B208 +ABF8 +A900 +A3FE +2492 +2912 +2622 +2042 +2182 +200C +ENDCHAR +STARTCHAR uni60D6 +ENCODING 24790 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0800 +1FF8 +2248 +4488 +0908 +1228 +2410 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni60D7 +ENCODING 24791 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +20A0 +3110 +AA88 +A446 +A800 +A3F0 +2010 +2020 +2040 +2124 +2522 +250A +2908 +20F8 +ENDCHAR +STARTCHAR uni60D8 +ENCODING 24792 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2404 +2514 +A4A4 +B7FC +AC44 +A444 +A7FC +2484 +2484 +24F4 +2404 +2404 +241C +ENDCHAR +STARTCHAR uni60D9 +ENCODING 24793 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +2084 +26B4 +A108 +B294 +AC22 +A800 +A7BC +2084 +24A4 +2318 +2108 +2294 +2C62 +ENDCHAR +STARTCHAR uni60DA +ENCODING 24794 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +23FC +24A4 +A924 +B244 +A888 +A308 +A030 +2080 +2240 +2A08 +2A04 +3112 +30F0 +ENDCHAR +STARTCHAR uni60DB +ENCODING 24795 +BBX 15 15 1 -1 +BITMAP +201C +23E0 +2220 +2220 +A3FE +B210 +AA10 +AB8A +A604 +23FC +2204 +23FC +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni60DC +ENCODING 24796 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27FC +A110 +B110 +A910 +AFFE +A000 +23F8 +2208 +2208 +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni60DD +ENCODING 24797 +BBX 15 15 1 -1 +BITMAP +2040 +2148 +2148 +2244 +A442 +B3FC +AA04 +AA04 +A2F4 +2294 +2294 +2294 +22F4 +2204 +220C +ENDCHAR +STARTCHAR uni60DE +ENCODING 24798 +BBX 15 16 0 -2 +BITMAP +2010 +2090 +2710 +243E +3422 +AC44 +A790 +A510 +A510 +2510 +2528 +2528 +2528 +2944 +2944 +3082 +ENDCHAR +STARTCHAR uni60DF +ENCODING 24799 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2220 +23FE +A620 +B220 +ABFC +AA20 +A220 +2220 +23FC +2220 +2220 +2220 +23FE +ENDCHAR +STARTCHAR uni60E0 +ENCODING 24800 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0110 +01F8 +7E04 +0108 +2884 +4812 +87F0 +ENDCHAR +STARTCHAR uni60E1 +ENCODING 24801 +BBX 14 14 1 -1 +BITMAP +7FF8 +0480 +0480 +3CF0 +2010 +2010 +3CF0 +0480 +0480 +7FF8 +0110 +2888 +4814 +87F0 +ENDCHAR +STARTCHAR uni60E2 +ENCODING 24802 +BBX 15 15 0 -1 +BITMAP +0100 +0080 +0888 +4804 +4812 +4812 +87F0 +0000 +1010 +0808 +2220 +A124 +A4A2 +A4A4 +1D1C +ENDCHAR +STARTCHAR uni60E3 +ENCODING 24803 +BBX 15 15 1 -1 +BITMAP +1100 +5100 +7FFC +92A4 +14A4 +10A4 +1D44 +F244 +1084 +1118 +0200 +2908 +2884 +4412 +83F0 +ENDCHAR +STARTCHAR uni60E4 +ENCODING 24804 +BBX 15 16 0 -2 +BITMAP +1010 +1388 +1088 +10FE +1890 +5790 +5224 +5224 +9238 +1388 +1090 +1090 +10A4 +10BE +1282 +1100 +ENDCHAR +STARTCHAR uni60E5 +ENCODING 24805 +BBX 15 15 0 -1 +BITMAP +0100 +0500 +3978 +2108 +3D78 +2108 +3FF8 +0280 +0440 +1830 +E10E +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni60E6 +ENCODING 24806 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1200 +1A20 +5620 +523E +5220 +9220 +12FC +1284 +1284 +1284 +1484 +14FC +1884 +ENDCHAR +STARTCHAR uni60E7 +ENCODING 24807 +BBX 15 15 1 -1 +BITMAP +23F8 +2208 +23F8 +2208 +A208 +B3F8 +AA08 +AA08 +A3F8 +2208 +2208 +2FFE +2100 +2208 +2404 +ENDCHAR +STARTCHAR uni60E8 +ENCODING 24808 +BBX 15 15 1 -1 +BITMAP +2080 +2090 +2138 +27C4 +A040 +B7FE +A908 +A224 +ACC2 +2310 +2064 +2188 +2010 +2060 +2380 +ENDCHAR +STARTCHAR uni60E9 +ENCODING 24809 +BBX 15 15 0 -1 +BITMAP +1000 +23FE +4020 +8920 +113C +3120 +5120 +9120 +17FE +1000 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni60EA +ENCODING 24810 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +FFFE +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni60EB +ENCODING 24811 +BBX 15 16 0 -2 +BITMAP +0800 +0FF0 +1020 +2C40 +0380 +1C70 +E00E +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni60EC +ENCODING 24812 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2420 +2420 +35FC +AC20 +A524 +A4A8 +A7FE +2420 +2450 +2448 +2484 +2504 +27FE +2000 +ENDCHAR +STARTCHAR uni60ED +ENCODING 24813 +BBX 15 16 0 -2 +BITMAP +2100 +2102 +211C +2FD0 +3210 +AA10 +A51E +A7D4 +A114 +2114 +21D4 +2F14 +2514 +2124 +2124 +2144 +ENDCHAR +STARTCHAR uni60EE +ENCODING 24814 +BBX 15 15 1 -1 +BITMAP +2442 +2222 +2224 +23FC +A244 +B244 +ABFC +AA44 +A244 +23FC +2040 +2040 +27FE +2040 +2040 +ENDCHAR +STARTCHAR uni60EF +ENCODING 24815 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +1124 +13FE +1924 +5524 +51FC +5000 +91FC +1104 +1124 +1124 +1124 +1058 +1084 +1302 +ENDCHAR +STARTCHAR uni60F0 +ENCODING 24816 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +27FE +A100 +B2FC +AC20 +ABFE +A000 +23FC +2204 +23FC +2204 +23FC +2204 +221C +ENDCHAR +STARTCHAR uni60F1 +ENCODING 24817 +BBX 14 15 1 -1 +BITMAP +2124 +2248 +2490 +2248 +A124 +B080 +AFFC +A414 +A414 +24A4 +2444 +24A4 +2714 +2404 +27FC +ENDCHAR +STARTCHAR uni60F2 +ENCODING 24818 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2402 +2442 +A3FC +B040 +ABFC +AA44 +A3FC +2244 +23FC +2040 +27FE +2040 +2040 +ENDCHAR +STARTCHAR uni60F3 +ENCODING 24819 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +FE84 +10FC +3884 +3484 +52FC +9084 +1084 +10FC +0100 +2888 +2844 +4412 +83F0 +ENDCHAR +STARTCHAR uni60F4 +ENCODING 24820 +BBX 15 15 1 -1 +BITMAP +2040 +2444 +2444 +2444 +A7FC +B000 +AFFE +A100 +A7FC +2524 +2524 +2524 +2524 +2524 +252C +ENDCHAR +STARTCHAR uni60F5 +ENCODING 24821 +BBX 15 15 1 -1 +BITMAP +2248 +2248 +27FE +2248 +A248 +B278 +AA00 +ABFC +A040 +27FE +2150 +2150 +2248 +2444 +2040 +ENDCHAR +STARTCHAR uni60F6 +ENCODING 24822 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23F8 +2208 +A3F8 +B208 +AA08 +A3F8 +A000 +27FC +2040 +23F8 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni60F7 +ENCODING 24823 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0100 +3FF8 +0280 +FFFE +0840 +3FF8 +C826 +0FE0 +0820 +0FE0 +0100 +28A8 +C7E6 +ENDCHAR +STARTCHAR uni60F8 +ENCODING 24824 +BBX 15 15 1 -1 +BITMAP +2100 +21FE +2202 +25F2 +A112 +B1F2 +A912 +A9F2 +A00C +21F8 +2010 +2FFE +2020 +2020 +20E0 +ENDCHAR +STARTCHAR uni60F9 +ENCODING 24825 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FFFC +1420 +7FFC +0800 +1FF0 +F010 +1010 +1FF0 +0100 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni60FA +ENCODING 24826 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +A208 +B208 +ABF8 +A240 +A3FC +2440 +2840 +23F8 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni60FB +ENCODING 24827 +BBX 14 15 1 -1 +BITMAP +2004 +2784 +24A4 +24A4 +A7A4 +B4A4 +ACA4 +A7A4 +A4A4 +24A4 +24A4 +2784 +2204 +2484 +285C +ENDCHAR +STARTCHAR uni60FC +ENCODING 24828 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +1A02 +57FE +5200 +5200 +93FE +1352 +1552 +15FE +1552 +1552 +1952 +1106 +ENDCHAR +STARTCHAR uni60FD +ENCODING 24829 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1204 +13FC +1A20 +57FE +5210 +528A +9306 +1000 +13FC +1204 +13FC +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni60FE +ENCODING 24830 +BBX 15 16 0 -2 +BITMAP +1000 +1088 +1252 +1222 +1A52 +568A +5202 +53FE +9088 +1144 +127A +1088 +1150 +1020 +10D8 +1706 +ENDCHAR +STARTCHAR uni60FF +ENCODING 24831 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +19FC +5504 +5104 +51FC +9000 +13FE +1020 +1120 +113C +1120 +12A0 +147E +ENDCHAR +STARTCHAR uni6100 +ENCODING 24832 +BBX 15 15 1 -1 +BITMAP +2190 +2E10 +2212 +2252 +A254 +B7D4 +AA54 +A210 +A710 +26A8 +2AA8 +2A28 +3244 +2244 +2282 +ENDCHAR +STARTCHAR uni6101 +ENCODING 24833 +BBX 15 15 1 -1 +BITMAP +0C20 +F0A2 +10A2 +FD24 +1130 +3850 +3448 +5084 +9102 +1200 +0100 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni6102 +ENCODING 24834 +BBX 15 16 0 -2 +BITMAP +0810 +7F10 +0810 +7F7E +4112 +3E12 +0412 +0F12 +7822 +0822 +284A +1084 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni6103 +ENCODING 24835 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2402 +A5FA +B000 +A9F8 +A108 +A108 +21F8 +2108 +2108 +21F8 +2000 +27FE +ENDCHAR +STARTCHAR uni6104 +ENCODING 24836 +BBX 15 16 0 -2 +BITMAP +1000 +13F8 +1248 +1248 +1BF8 +5648 +5248 +53F8 +9000 +17FE +1240 +1244 +1228 +1290 +1308 +1206 +ENDCHAR +STARTCHAR uni6105 +ENCODING 24837 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27FC +2110 +31F0 +A840 +A3F8 +A248 +A248 +23F8 +2040 +2FFE +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni6106 +ENCODING 24838 +BBX 15 15 1 -1 +BITMAP +1200 +213C +4000 +8400 +127E +2008 +6088 +A108 +2208 +2418 +0100 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni6107 +ENCODING 24839 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +11FC +1084 +1BFE +5400 +51FC +5104 +91FC +1020 +13FE +1020 +1220 +13FE +1020 +1020 +ENDCHAR +STARTCHAR uni6108 +ENCODING 24840 +BBX 15 15 1 -1 +BITMAP +0380 +0C60 +37D8 +C006 +3E24 +2224 +3248 +2A48 +3248 +2A24 +2624 +0100 +2888 +4824 +87E2 +ENDCHAR +STARTCHAR uni6109 +ENCODING 24841 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2318 +2C06 +A1F0 +B000 +AF84 +A4A4 +A7A4 +24A4 +24A4 +27A4 +2484 +2484 +259C +ENDCHAR +STARTCHAR uni610A +ENCODING 24842 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1000 +11FC +1904 +5504 +51FC +5000 +93FE +1222 +1222 +13FE +1222 +1222 +13FE +1202 +ENDCHAR +STARTCHAR uni610B +ENCODING 24843 +BBX 15 16 0 -2 +BITMAP +103C +17C0 +1244 +1928 +5400 +53FC +5080 +9080 +17FE +1100 +11F8 +1288 +1250 +1420 +18D8 +1306 +ENDCHAR +STARTCHAR uni610C +ENCODING 24844 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10F8 +1108 +1A10 +55FC +5104 +5154 +918C +1124 +1020 +13FE +1050 +1088 +1104 +1602 +ENDCHAR +STARTCHAR uni610D +ENCODING 24845 +BBX 15 15 1 -1 +BITMAP +0040 +7E40 +427E +7E88 +4948 +7E28 +4810 +44A8 +7344 +C082 +0200 +2908 +2884 +4412 +83F0 +ENDCHAR +STARTCHAR uni610E +ENCODING 24846 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +27FE +2800 +A3F8 +B208 +ABF8 +A208 +A3F8 +2100 +23F8 +2E08 +2110 +20E0 +2F1E +ENDCHAR +STARTCHAR uni610F +ENCODING 24847 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +1FF0 +0440 +7FFC +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +2908 +4824 +87E2 +ENDCHAR +STARTCHAR uni6110 +ENCODING 24848 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2020 +2040 +A3FE +B252 +AA52 +AA72 +A252 +2252 +2272 +2252 +2252 +2252 +23FE +ENDCHAR +STARTCHAR uni6111 +ENCODING 24849 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1088 +1050 +1BFE +5622 +53FE +5222 +93FE +1222 +1040 +13FE +1042 +1082 +1114 +1208 +ENDCHAR +STARTCHAR uni6112 +ENCODING 24850 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +A208 +B208 +ABF8 +A900 +A3FE +2442 +2C42 +24A2 +2512 +27E2 +200C +ENDCHAR +STARTCHAR uni6113 +ENCODING 24851 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +A208 +B3F8 +A800 +AFFE +A200 +23FE +2492 +2922 +2242 +2C82 +201C +ENDCHAR +STARTCHAR uni6114 +ENCODING 24852 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +3000 +AA08 +A110 +AFFE +A000 +23F8 +2208 +2208 +23F8 +2208 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni6115 +ENCODING 24853 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +24A4 +24A4 +A7BC +B000 +ABFC +A000 +A7FE +2080 +21F8 +2208 +2008 +2008 +2070 +ENDCHAR +STARTCHAR uni6116 +ENCODING 24854 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +17FC +1110 +19F0 +5510 +51F0 +5110 +9110 +17FE +1200 +1290 +1308 +1200 +13FC +1000 +ENDCHAR +STARTCHAR uni6117 +ENCODING 24855 +BBX 15 15 0 -1 +BITMAP +0040 +7F40 +127E +0C88 +FF48 +1948 +2A50 +4820 +A850 +108C +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni6118 +ENCODING 24856 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +1880 +54F8 +5108 +5290 +9060 +1198 +1606 +11F8 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni6119 +ENCODING 24857 +BBX 15 15 1 -1 +BITMAP +0100 +3FF8 +2208 +27E8 +0C40 +3380 +0660 +781E +0FF0 +0810 +0FF0 +0100 +2888 +4814 +87F2 +ENDCHAR +STARTCHAR uni611A +ENCODING 24858 +BBX 14 14 2 -1 +BITMAP +7FF0 +4210 +7FF0 +4210 +7FF0 +0200 +FFF8 +8248 +83E8 +BC28 +8218 +2910 +48A8 +87E4 +ENDCHAR +STARTCHAR uni611B +ENCODING 24859 +BBX 13 15 2 -1 +BITMAP +00E0 +7F40 +2840 +1480 +FFF8 +8448 +AAA8 +4FA0 +0800 +0FE0 +1840 +6480 +0300 +0CC0 +F038 +ENDCHAR +STARTCHAR uni611C +ENCODING 24860 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2420 +2420 +A7FE +B524 +AD24 +A6AA +A6AA +2420 +2450 +2488 +2706 +2400 +27FE +ENDCHAR +STARTCHAR uni611D +ENCODING 24861 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1200 +12FC +1A84 +56FC +5284 +52FC +9220 +13FE +1248 +12C8 +1230 +1248 +1284 +13FE +ENDCHAR +STARTCHAR uni611E +ENCODING 24862 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2080 +27FE +A492 +B492 +AC92 +A496 +A040 +2040 +27FE +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni611F +ENCODING 24863 +BBX 15 15 1 -1 +BITMAP +0050 +0048 +7FFE +4040 +5F44 +4024 +5F28 +5110 +5F2A +80C4 +8200 +2908 +2884 +4412 +83F0 +ENDCHAR +STARTCHAR uni6120 +ENCODING 24864 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +19F8 +5508 +5108 +51F8 +9000 +13FC +1294 +1294 +1294 +1294 +17FE +1000 +ENDCHAR +STARTCHAR uni6121 +ENCODING 24865 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +23FE +2252 +A592 +B0E2 +A922 +A254 +A084 +2018 +2040 +2524 +2502 +288A +2878 +ENDCHAR +STARTCHAR uni6122 +ENCODING 24866 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1244 +1244 +1BFC +5644 +5244 +53FC +9000 +1040 +1024 +1522 +150A +1908 +10F8 +1000 +ENDCHAR +STARTCHAR uni6123 +ENCODING 24867 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1294 +1A94 +5694 +53FC +5080 +9040 +17FE +1080 +10F8 +1088 +1108 +1108 +1228 +1410 +ENDCHAR +STARTCHAR uni6124 +ENCODING 24868 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1020 +1088 +1BFE +5488 +5000 +51FC +9104 +1124 +1124 +1124 +1124 +1050 +1088 +1304 +ENDCHAR +STARTCHAR uni6125 +ENCODING 24869 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27FC +2110 +3150 +A840 +A3F8 +A248 +A248 +2248 +2FFE +2040 +20A0 +2110 +2208 +2406 +ENDCHAR +STARTCHAR uni6126 +ENCODING 24870 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1924 +55FC +5020 +53FE +9000 +11FC +1104 +1124 +1124 +1124 +1050 +1088 +1304 +ENDCHAR +STARTCHAR uni6127 +ENCODING 24871 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +27FC +2444 +A444 +B7FC +AC44 +A444 +A7FC +2120 +212A +223E +2220 +2422 +281E +ENDCHAR +STARTCHAR uni6128 +ENCODING 24872 +BBX 15 15 1 -1 +BITMAP +1000 +1078 +FE48 +1048 +7C8E +0000 +FEFE +8244 +0028 +7C10 +0028 +0146 +2880 +4414 +83F2 +ENDCHAR +STARTCHAR uni6129 +ENCODING 24873 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +1020 +1BFE +5400 +51FC +5104 +91FC +1104 +11FC +1104 +11FC +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni612A +ENCODING 24874 +BBX 14 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +19F8 +5400 +53FC +5204 +93FC +1204 +13FC +1204 +13FC +1090 +1108 +1204 +ENDCHAR +STARTCHAR uni612B +ENCODING 24875 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2040 +A3F8 +B040 +AFFE +A840 +A090 +2320 +20C8 +27F4 +2044 +2150 +264C +ENDCHAR +STARTCHAR uni612C +ENCODING 24876 +BBX 15 15 1 -1 +BITMAP +4100 +213E +2222 +FFA2 +083E +4922 +4922 +7F3E +1022 +2022 +C24E +2900 +2888 +4414 +83F2 +ENDCHAR +STARTCHAR uni612D +ENCODING 24877 +BBX 15 16 0 -2 +BITMAP +1040 +1044 +11F8 +1050 +1BFE +5440 +50F8 +5182 +927E +1400 +11FC +1104 +11FC +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni612E +ENCODING 24878 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13C0 +1004 +1A44 +5528 +51FC +5220 +9020 +13FE +1020 +1124 +1124 +1124 +11FC +1004 +ENDCHAR +STARTCHAR uni612F +ENCODING 24879 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +11FE +1B20 +55FC +5120 +51FC +9120 +11FE +1100 +13F8 +1108 +1090 +1060 +1198 +1606 +ENDCHAR +STARTCHAR uni6130 +ENCODING 24880 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +21F8 +A108 +B108 +A9F8 +AA44 +A244 +2148 +27FE +2090 +2090 +2112 +260E +ENDCHAR +STARTCHAR uni6131 +ENCODING 24881 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +1900 +5520 +5120 +553C +9350 +1190 +1310 +15FE +1110 +1128 +1228 +1244 +1482 +ENDCHAR +STARTCHAR uni6132 +ENCODING 24882 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +11E8 +1928 +57FE +5402 +51F8 +9108 +11F8 +1108 +11F8 +1108 +1108 +1128 +1110 +ENDCHAR +STARTCHAR uni6133 +ENCODING 24883 +BBX 15 14 0 -1 +BITMAP +3E7C +2244 +3E7C +2244 +3E7C +2244 +3E7C +0000 +0100 +0888 +4884 +4812 +4812 +87F0 +ENDCHAR +STARTCHAR uni6134 +ENCODING 24884 +BBX 15 15 1 -1 +BITMAP +1020 +1050 +1088 +1376 +5000 +59FC +5504 +91FC +9104 +11FC +1100 +12FE +1282 +1482 +10FE +ENDCHAR +STARTCHAR uni6135 +ENCODING 24885 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1042 +1042 +1BDE +5610 +5210 +53DE +9042 +1252 +114A +114A +1252 +1042 +1294 +1108 +ENDCHAR +STARTCHAR uni6136 +ENCODING 24886 +BBX 15 16 0 -2 +BITMAP +1040 +11FC +1044 +1094 +1908 +57DE +514A +514A +9294 +11FC +1104 +11FC +1104 +11FC +1104 +110C +ENDCHAR +STARTCHAR uni6137 +ENCODING 24887 +BBX 15 15 1 -1 +BITMAP +2040 +2244 +2244 +23FC +A000 +B7FE +A800 +ABFC +A204 +2204 +23FC +2108 +2108 +2090 +27FE +ENDCHAR +STARTCHAR uni6138 +ENCODING 24888 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +7F7C +2A24 +2A24 +5D24 +0824 +1C44 +2A94 +4808 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni6139 +ENCODING 24889 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2202 +3494 +A908 +A264 +A090 +A108 +2204 +25FA +2108 +2108 +2108 +21F8 +2108 +ENDCHAR +STARTCHAR uni613A +ENCODING 24890 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27FE +2110 +A000 +B3F8 +AA08 +ABF8 +A208 +23F8 +2040 +2FFE +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni613B +ENCODING 24891 +BBX 15 16 0 -2 +BITMAP +000C +7DF0 +0440 +0888 +11F0 +1020 +1C44 +F3FE +1022 +1124 +5222 +2060 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni613C +ENCODING 24892 +BBX 15 15 1 -1 +BITMAP +2218 +23E0 +2202 +21FE +A000 +B5FC +AD04 +A5FC +A504 +25FC +2504 +27FE +2080 +2108 +2606 +ENDCHAR +STARTCHAR uni613D +ENCODING 24893 +BBX 15 15 1 -1 +BITMAP +2048 +2044 +2FFE +2040 +A7FC +B444 +AFFC +A444 +A7FC +2444 +2008 +2FFE +2208 +2108 +2038 +ENDCHAR +STARTCHAR uni613E +ENCODING 24894 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +23F8 +2400 +ABF0 +B000 +AFF8 +A828 +A548 +2108 +2FE8 +2388 +254A +292A +2104 +ENDCHAR +STARTCHAR uni613F +ENCODING 24895 +BBX 15 14 1 -1 +BITMAP +3FFC +2080 +2FF8 +2808 +2FF8 +2808 +2FF8 +4490 +4888 +1384 +0100 +2888 +4814 +87F2 +ENDCHAR +STARTCHAR uni6140 +ENCODING 24896 +BBX 15 16 0 -2 +BITMAP +103C +17C0 +1244 +1928 +5480 +5110 +53E0 +9040 +1188 +13FC +1044 +1040 +17FC +10A0 +1110 +160E +ENDCHAR +STARTCHAR uni6141 +ENCODING 24897 +BBX 15 15 1 -1 +BITMAP +3FF8 +2008 +2FE8 +2308 +2DA8 +22C8 +2DC8 +22A8 +2C98 +2308 +3FF8 +0108 +2884 +4812 +87F0 +ENDCHAR +STARTCHAR uni6142 +ENCODING 24898 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1118 +80A0 +47FC +2444 +07FC +1444 +27FC +4444 +844C +0100 +2888 +4814 +87F2 +ENDCHAR +STARTCHAR uni6143 +ENCODING 24899 +BBX 15 16 0 -2 +BITMAP +2120 +2110 +2208 +3486 +A910 +A3F8 +A008 +A000 +27BC +2084 +24A4 +2294 +24A4 +2084 +2294 +2108 +ENDCHAR +STARTCHAR uni6144 +ENCODING 24900 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2120 +2120 +A7FC +B524 +AD24 +A7FC +A040 +2FFE +2150 +2248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni6145 +ENCODING 24901 +BBX 15 16 0 -2 +BITMAP +1000 +13F8 +1148 +1110 +18A0 +5440 +51B0 +564E +9040 +13F8 +1248 +1248 +13F8 +1044 +17FC +1004 +ENDCHAR +STARTCHAR uni6146 +ENCODING 24902 +BBX 15 15 1 -1 +BITMAP +2078 +2388 +2244 +2224 +B422 +A802 +A8C0 +A71E +A402 +2402 +279E +2402 +2402 +2402 +27FE +ENDCHAR +STARTCHAR uni6147 +ENCODING 24903 +BBX 15 15 1 -1 +BITMAP +0C00 +3078 +3E48 +2248 +3E8E +2200 +3EFE +2044 +3E28 +4238 +86C6 +0100 +2888 +4814 +87F2 +ENDCHAR +STARTCHAR uni6148 +ENCODING 24904 +BBX 15 15 1 -1 +BITMAP +1010 +0820 +FFFE +2040 +4488 +2850 +1020 +2448 +3A74 +E1C2 +0200 +2908 +2894 +4412 +83F0 +ENDCHAR +STARTCHAR uni6149 +ENCODING 24905 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +2080 +3108 +ABF0 +A060 +A184 +A7FE +2002 +27FC +2444 +27FC +2444 +27FC +2404 +ENDCHAR +STARTCHAR uni614A +ENCODING 24906 +BBX 15 15 1 -1 +BITMAP +2110 +2220 +2FFE +2120 +A7FC +B124 +AFFE +A924 +A124 +27FC +2120 +2330 +2528 +2926 +2120 +ENDCHAR +STARTCHAR uni614B +ENCODING 24907 +BBX 15 15 1 -1 +BITMAP +2080 +4C98 +F2E0 +0084 +7C7C +4480 +7C98 +44E0 +7C80 +4484 +4C7C +0300 +2888 +4424 +83E2 +ENDCHAR +STARTCHAR uni614C +ENCODING 24908 +BBX 15 15 1 -1 +BITMAP +2108 +27FE +2108 +2040 +A7FE +B200 +AA00 +A9FC +A000 +2248 +2248 +2248 +224A +244A +2806 +ENDCHAR +STARTCHAR uni614D +ENCODING 24909 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2248 +2248 +A2A8 +B318 +AA08 +A3F8 +A000 +27FC +2524 +2524 +2524 +2524 +2FFE +ENDCHAR +STARTCHAR uni614E +ENCODING 24910 +BBX 15 15 1 -1 +BITMAP +2040 +27FC +2040 +23F8 +A208 +B3F8 +AA08 +ABF8 +A208 +23F8 +2000 +2FFE +2100 +2208 +2404 +ENDCHAR +STARTCHAR uni614F +ENCODING 24911 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1000 +19FC +5504 +51FC +5104 +91FC +1040 +1020 +13FE +1000 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni6150 +ENCODING 24912 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFC +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1110 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni6151 +ENCODING 24913 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2108 +21F8 +3108 +A9F8 +A10E +A7F8 +A008 +27BC +20A4 +22A4 +2128 +2290 +24A8 +2846 +ENDCHAR +STARTCHAR uni6152 +ENCODING 24914 +BBX 15 16 0 -2 +BITMAP +1050 +1050 +13FE +1050 +1BFE +5652 +53FE +5252 +93FE +1000 +11FC +1104 +11FC +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni6153 +ENCODING 24915 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2090 +23FC +A294 +B294 +ABFC +A000 +A3FC +2000 +27FE +2020 +2224 +2422 +20E0 +ENDCHAR +STARTCHAR uni6154 +ENCODING 24916 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27FC +2110 +3000 +ABF8 +A208 +A3F8 +A208 +23F8 +2040 +27FC +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni6155 +ENCODING 24917 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +FFFE +0440 +1A30 +F2AE +1250 +2648 +ENDCHAR +STARTCHAR uni6156 +ENCODING 24918 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +242A +2426 +37FE +AC22 +A7AA +A6AA +A7AA +2432 +2596 +262E +2446 +2482 +27FE +2402 +ENDCHAR +STARTCHAR uni6157 +ENCODING 24919 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFBE +0844 +7FA4 +4924 +7F28 +1C28 +2A10 +4928 +8844 +0882 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni6158 +ENCODING 24920 +BBX 15 15 1 -1 +BITMAP +2080 +2130 +21D0 +2210 +A5A6 +B67A +A8A0 +A318 +AC46 +2380 +2064 +2188 +2010 +2060 +2780 +ENDCHAR +STARTCHAR uni6159 +ENCODING 24921 +BBX 15 15 1 -1 +BITMAP +100C +FE70 +1040 +7C40 +547E +7C48 +5448 +7C48 +1048 +FE88 +1088 +0100 +2888 +4814 +87F2 +ENDCHAR +STARTCHAR uni615A +ENCODING 24922 +BBX 15 15 1 -1 +BITMAP +2102 +211C +2FF0 +2110 +A7D0 +B55E +AD54 +A7D4 +A554 +2554 +27D4 +2114 +2FF4 +2114 +2124 +ENDCHAR +STARTCHAR uni615B +ENCODING 24923 +BBX 15 16 0 -2 +BITMAP +1020 +1222 +13FE +1090 +1888 +55FE +5310 +5510 +91FE +1110 +1110 +11FE +1110 +1110 +11FE +1100 +ENDCHAR +STARTCHAR uni615C +ENCODING 24924 +BBX 15 16 0 -2 +BITMAP +2020 +3FA0 +403E +BF44 +29A4 +2524 +7FE8 +2928 +4510 +7FA8 +0144 +0282 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni615D +ENCODING 24925 +BBX 15 14 1 -1 +BITMAP +3FF8 +2420 +3FF8 +2520 +3FF8 +2400 +2FF0 +3410 +27F0 +2000 +3FF8 +2108 +4894 +87F2 +ENDCHAR +STARTCHAR uni615E +ENCODING 24926 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1088 +1050 +1BFE +5400 +51FC +5104 +91FC +1104 +11FC +1020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni615F +ENCODING 24927 +BBX 15 15 1 -1 +BITMAP +20D0 +2710 +2110 +2FD0 +A13E +B7D2 +AD52 +A7D2 +A552 +27D2 +2112 +27F2 +2122 +21E2 +2E4C +ENDCHAR +STARTCHAR uni6160 +ENCODING 24928 +BBX 15 15 1 -1 +BITMAP +2220 +2220 +27A0 +223E +B224 +AFC4 +AA24 +A224 +AF94 +2214 +2388 +2288 +2494 +2494 +2B22 +ENDCHAR +STARTCHAR uni6161 +ENCODING 24929 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +2040 +3554 +AA48 +A554 +A040 +A554 +2248 +2554 +20A0 +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni6162 +ENCODING 24930 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +A1F8 +B108 +A9F8 +A000 +27FE +2492 +27FE +2000 +27FC +2108 +20F0 +279E +ENDCHAR +STARTCHAR uni6163 +ENCODING 24931 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2444 +2FFE +A444 +A7FC +B000 +A3F8 +A208 +23F8 +2208 +23F8 +2208 +23F8 +2C06 +ENDCHAR +STARTCHAR uni6164 +ENCODING 24932 +BBX 15 16 0 -2 +BITMAP +0878 +7F48 +0848 +3E86 +0078 +7F48 +4148 +9C28 +1510 +2628 +4046 +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni6165 +ENCODING 24933 +BBX 15 15 1 -1 +BITMAP +2410 +2250 +2250 +20FC +A890 +B410 +A9FE +A010 +AE00 +227C +2244 +2244 +227C +2500 +28FE +ENDCHAR +STARTCHAR uni6166 +ENCODING 24934 +BBX 15 15 0 -1 +BITMAP +0A20 +0920 +7FBE +0844 +6AA4 +1C24 +2A28 +4910 +2828 +1046 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni6167 +ENCODING 24935 +BBX 15 14 1 -1 +BITMAP +FEFE +1010 +FEFE +1010 +FEFE +1010 +7FFC +0004 +7FFC +0004 +7FFC +0100 +2894 +C7F2 +ENDCHAR +STARTCHAR uni6168 +ENCODING 24936 +BBX 15 15 1 -1 +BITMAP +2000 +2F7C +2928 +2928 +AF28 +A928 +B97E +AF08 +A808 +2918 +2918 +29A8 +2EAA +384A +2086 +ENDCHAR +STARTCHAR uni6169 +ENCODING 24937 +BBX 15 16 0 -2 +BITMAP +2010 +2410 +22FE +3210 +A8FE +A092 +A6FE +A292 +22FE +2210 +22FE +2210 +2210 +2510 +28FE +2000 +ENDCHAR +STARTCHAR uni616A +ENCODING 24938 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1200 +127C +1A44 +5644 +527C +5200 +92EE +12AA +12AA +12AA +12EE +1200 +13FE +1000 +ENDCHAR +STARTCHAR uni616B +ENCODING 24939 +BBX 15 15 1 -1 +BITMAP +1108 +2108 +4294 +8C22 +1040 +2240 +627C +A240 +2640 +25C0 +283E +0100 +2888 +4414 +83F2 +ENDCHAR +STARTCHAR uni616C +ENCODING 24940 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +18F8 +5420 +51FC +5124 +91FC +1020 +13FE +1020 +11FC +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni616D +ENCODING 24941 +BBX 15 15 0 -1 +BITMAP +0814 +0812 +7F10 +4AFE +2C10 +FF10 +1C28 +2A28 +4944 +8882 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni616E +ENCODING 24942 +BBX 15 15 1 -1 +BITMAP +0200 +03F0 +0200 +3FFC +2204 +3FF0 +2204 +2FFC +2888 +2FF8 +4888 +4FF8 +9508 +1494 +23F2 +ENDCHAR +STARTCHAR uni616F +ENCODING 24943 +BBX 15 15 1 -1 +BITMAP +2200 +27FC +2400 +2BF8 +A208 +B3F8 +AA08 +A3F8 +A000 +2FFE +2200 +27FC +2924 +2244 +2498 +ENDCHAR +STARTCHAR uni6170 +ENCODING 24944 +BBX 15 15 1 -1 +BITMAP +0008 +7E08 +4208 +7EFE +4008 +7E48 +4028 +7E28 +8808 +AA08 +5A18 +0100 +2908 +4824 +87E2 +ENDCHAR +STARTCHAR uni6171 +ENCODING 24945 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2040 +A7FC +B444 +AFFC +A444 +A7FC +2048 +27FC +200A +2FFE +2208 +2138 +ENDCHAR +STARTCHAR uni6172 +ENCODING 24946 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +1888 +54F8 +5020 +53FE +9222 +1332 +12AA +1376 +1222 +1222 +122A +1224 +ENDCHAR +STARTCHAR uni6173 +ENCODING 24947 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2524 +27A4 +A4A8 +B790 +AD28 +A544 +A782 +2040 +2040 +23F8 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6174 +ENCODING 24948 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +228A +2492 +A186 +B28A +AC52 +A080 +A3FC +2204 +2204 +23FC +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni6175 +ENCODING 24949 +BBX 15 15 1 -1 +BITMAP +2020 +27FE +2420 +25FC +A424 +B7FE +AC24 +A5FC +A524 +25FC +2524 +29FC +2924 +3124 +212C +ENDCHAR +STARTCHAR uni6176 +ENCODING 24950 +BBX 15 15 1 -1 +BITMAP +0100 +7FFE +4440 +7FFC +4444 +7FFC +4000 +7FFE +5494 +63F4 +4200 +47F8 +5C30 +83C0 +BC3E +ENDCHAR +STARTCHAR uni6177 +ENCODING 24951 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2840 +ABF8 +B848 +AFFE +A848 +ABF8 +2A44 +2968 +28D0 +3148 +3644 +20C2 +ENDCHAR +STARTCHAR uni6178 +ENCODING 24952 +BBX 15 16 0 -2 +BITMAP +1450 +1450 +7FFC +2452 +47CE +8000 +7FFC +4104 +1FF0 +1110 +1150 +1120 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni6179 +ENCODING 24953 +BBX 15 16 0 -2 +BITMAP +1040 +7C40 +11F8 +FE48 +4448 +28C8 +7C68 +109A +FE8A +1106 +1202 +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni617A +ENCODING 24954 +BBX 15 16 0 -2 +BITMAP +2040 +23F8 +2248 +2FFE +3248 +ABF8 +A040 +A3F8 +A248 +23F8 +2080 +2FFE +2110 +20E0 +2318 +2C04 +ENDCHAR +STARTCHAR uni617B +ENCODING 24955 +BBX 15 16 0 -2 +BITMAP +1040 +1248 +1150 +13F8 +1880 +57FC +5110 +5208 +97FC +1A0A +13F8 +1208 +13F8 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni617C +ENCODING 24956 +BBX 15 15 1 -1 +BITMAP +0050 +7FFC +4440 +4740 +4448 +7F28 +4428 +5510 +6532 +4C4C +8280 +2908 +2884 +4412 +83F0 +ENDCHAR +STARTCHAR uni617D +ENCODING 24957 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +2010 +27FE +3410 +AC90 +A4D2 +A492 +A7F2 +2494 +2494 +25C8 +2AAA +289A +31A6 +2042 +ENDCHAR +STARTCHAR uni617E +ENCODING 24958 +BBX 15 15 1 -1 +BITMAP +2220 +2220 +4920 +94BE +2254 +4110 +BE28 +2228 +2244 +3E82 +0100 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni617F +ENCODING 24959 +BBX 15 16 0 -2 +BITMAP +43FE +2220 +23FC +0A20 +0BFC +1220 +E3FE +2122 +27FA +2122 +0226 +0200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni6180 +ENCODING 24960 +BBX 15 16 0 -2 +BITMAP +1000 +17BC +1084 +14A4 +1A94 +54A4 +5050 +5188 +9626 +10C0 +1310 +1064 +1388 +1030 +10C0 +1700 +ENDCHAR +STARTCHAR uni6181 +ENCODING 24961 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +13FC +1244 +1AF4 +5714 +52A4 +5244 +92A4 +13FC +1040 +1024 +1522 +150A +1908 +10F8 +ENDCHAR +STARTCHAR uni6182 +ENCODING 24962 +BBX 15 14 1 -1 +BITMAP +FFFE +0100 +1FF0 +1010 +1FF0 +1010 +FFFE +A92A +C7E6 +0400 +0FF8 +7820 +07C0 +F83E +ENDCHAR +STARTCHAR uni6183 +ENCODING 24963 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0100 +3FF8 +0200 +FFFE +0820 +3CF8 +D016 +1CF0 +1010 +1FF0 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni6184 +ENCODING 24964 +BBX 15 16 0 -2 +BITMAP +1040 +27FC +4040 +8BF8 +1208 +33F8 +5208 +93F8 +1208 +13F8 +1208 +17FE +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni6185 +ENCODING 24965 +BBX 14 16 0 -2 +BITMAP +7F20 +0820 +FF20 +08FC +7F24 +4924 +7F24 +4924 +7F24 +0844 +7F44 +0894 +FF08 +0208 +5124 +9FE4 +ENDCHAR +STARTCHAR uni6186 +ENCODING 24966 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +10A8 +13FE +1A02 +54F8 +5088 +5088 +90F8 +1020 +1020 +11FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni6187 +ENCODING 24967 +BBX 15 15 1 -1 +BITMAP +0C88 +F088 +13FE +1088 +FE88 +10F8 +7C88 +4488 +4488 +7CF8 +0200 +0900 +2888 +4414 +83F2 +ENDCHAR +STARTCHAR uni6188 +ENCODING 24968 +BBX 15 16 0 -2 +BITMAP +1040 +107C +1040 +13FE +1A42 +5678 +53C4 +523C +9200 +1250 +1254 +1354 +14D8 +1450 +19FE +1000 +ENDCHAR +STARTCHAR uni6189 +ENCODING 24969 +BBX 15 16 0 -2 +BITMAP +1082 +1082 +17F4 +1088 +1880 +57E2 +5002 +53E4 +9228 +1220 +13E0 +1222 +1142 +1074 +1788 +1210 +ENDCHAR +STARTCHAR uni618A +ENCODING 24970 +BBX 15 15 1 -1 +BITMAP +0890 +13FC +2090 +67FE +A400 +25FC +2524 +25FC +2524 +25FC +2924 +212C +0880 +4814 +87F2 +ENDCHAR +STARTCHAR uni618B +ENCODING 24971 +BBX 15 15 0 -1 +BITMAP +0820 +4920 +2A3E +7F44 +49A4 +5D28 +6B28 +4910 +4928 +4346 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni618C +ENCODING 24972 +BBX 15 16 0 -2 +BITMAP +0840 +1440 +227C +5C84 +8944 +3E2C +0814 +4A24 +28C4 +0E28 +7010 +2200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni618D +ENCODING 24973 +BBX 15 15 1 -1 +BITMAP +2038 +23C0 +2040 +27FE +A108 +B3FC +AD0A +A9F8 +A000 +27FC +2404 +25F4 +2514 +25F4 +240C +ENDCHAR +STARTCHAR uni618E +ENCODING 24974 +BBX 14 15 1 -1 +BITMAP +2208 +2108 +2110 +27FC +B444 +AFFC +A444 +A7FC +2000 +23F8 +2208 +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni618F +ENCODING 24975 +BBX 15 16 0 -2 +BITMAP +2100 +2110 +23DC +2254 +3554 +AA88 +A108 +A2F4 +A402 +2000 +23FC +2040 +2150 +2248 +2544 +2080 +ENDCHAR +STARTCHAR uni6190 +ENCODING 24976 +BBX 15 15 1 -1 +BITMAP +2444 +2248 +2040 +2FFE +A150 +B248 +AC46 +A240 +2388 +24BE +26A8 +2928 +217E +2208 +2C08 +ENDCHAR +STARTCHAR uni6191 +ENCODING 24977 +BBX 15 14 1 -1 +BITMAP +47FC +2440 +17F8 +0440 +07F8 +1440 +27FE +4012 +8A4A +1126 +0200 +2908 +4814 +87F2 +ENDCHAR +STARTCHAR uni6192 +ENCODING 24978 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +21FC +2124 +A1FC +B020 +ABFE +A904 +A1FC +2104 +21FC +2104 +21FC +2088 +2306 +ENDCHAR +STARTCHAR uni6193 +ENCODING 24979 +BBX 15 15 1 -1 +BITMAP +2040 +2FFE +2040 +27FC +A444 +B7FC +AC44 +A7FC +A044 +27FE +2082 +2448 +2544 +290A +28F8 +ENDCHAR +STARTCHAR uni6194 +ENCODING 24980 +BBX 15 15 1 -1 +BITMAP +2110 +2120 +23FC +2240 +A7F8 +B240 +AA40 +A3F8 +A240 +2240 +23FC +2000 +2528 +2894 +2892 +ENDCHAR +STARTCHAR uni6195 +ENCODING 24981 +BBX 15 16 0 -2 +BITMAP +2020 +27A4 +20A8 +2292 +3114 +AA08 +A5F4 +A802 +A3F8 +2208 +2208 +23F8 +2208 +2110 +2FFE +2000 +ENDCHAR +STARTCHAR uni6196 +ENCODING 24982 +BBX 15 15 1 -1 +BITMAP +0814 +0812 +FF90 +087E +2A10 +5D10 +0828 +1C28 +2A44 +C882 +0900 +0080 +2488 +4414 +83F2 +ENDCHAR +STARTCHAR uni6197 +ENCODING 24983 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FF7E +0844 +2AA4 +2A28 +5D10 +9C90 +2A28 +C946 +0000 +2908 +2884 +4812 +87F0 +ENDCHAR +STARTCHAR uni6198 +ENCODING 24984 +BBX 15 15 1 -1 +BITMAP +2040 +27FE +2040 +23FC +A000 +B3FC +AA04 +ABFC +A090 +27FE +2000 +23FC +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni6199 +ENCODING 24985 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0100 +1FF0 +0000 +1FF0 +1010 +1FF0 +0440 +FFFE +1010 +1FF0 +0100 +4894 +87F2 +ENDCHAR +STARTCHAR uni619A +ENCODING 24986 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +24A4 +27BC +A000 +B3F8 +AA48 +A3F8 +A248 +2248 +23F8 +2040 +2FFE +2040 +2040 +ENDCHAR +STARTCHAR uni619B +ENCODING 24987 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +1BFE +5652 +53FE +5000 +91FC +1104 +11FC +1104 +11FC +1020 +13FE +1020 +1020 +ENDCHAR +STARTCHAR uni619C +ENCODING 24988 +BBX 15 16 0 -2 +BITMAP +2020 +2720 +25FE +2540 +357C +AE90 +A57E +A500 +A57C +2544 +257C +2644 +247C +2444 +2444 +244C +ENDCHAR +STARTCHAR uni619D +ENCODING 24989 +BBX 15 16 0 -2 +BITMAP +0840 +7F40 +007E +3E88 +2348 +3E48 +0050 +3E50 +0420 +7F50 +0888 +2904 +1100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni619E +ENCODING 24990 +BBX 15 16 0 -2 +BITMAP +2210 +2110 +2FD0 +2010 +37BE +ACA4 +A7D4 +A014 +A794 +2094 +2114 +21C8 +2F08 +2114 +2514 +2222 +ENDCHAR +STARTCHAR uni619F +ENCODING 24991 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +20A0 +20A0 +37FC +ACA4 +A4A4 +A7FC +A248 +2150 +27FC +20E0 +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni61A0 +ENCODING 24992 +BBX 15 16 0 -2 +BITMAP +3FFE +2890 +2510 +2FBE +2222 +2AD4 +2A90 +2F90 +2228 +4428 +4444 +8882 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni61A1 +ENCODING 24993 +BBX 15 16 0 -2 +BITMAP +1210 +1210 +13DE +1528 +18A4 +5420 +53FE +5020 +93FE +1222 +122A +1274 +10A8 +1124 +1622 +1020 +ENDCHAR +STARTCHAR uni61A2 +ENCODING 24994 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1020 +1BFE +5508 +539C +5108 +9188 +163E +1000 +13FE +1090 +1090 +1112 +120E +ENDCHAR +STARTCHAR uni61A3 +ENCODING 24995 +BBX 15 16 0 -2 +BITMAP +103C +13E0 +1124 +10A8 +1BFE +54A8 +5124 +5202 +91FC +1124 +1124 +11FC +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni61A4 +ENCODING 24996 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +B040 +AA08 +AFFE +A208 +A000 +27FC +2404 +27FC +2404 +27FC +2208 +2C06 +ENDCHAR +STARTCHAR uni61A5 +ENCODING 24997 +BBX 15 15 1 -1 +BITMAP +2AA8 +2AA8 +1450 +2288 +7FFC +4104 +5FF4 +0210 +0410 +0810 +3060 +0200 +2908 +4814 +87F2 +ENDCHAR +STARTCHAR uni61A6 +ENCODING 24998 +BBX 15 16 0 -2 +BITMAP +1088 +12AA +12DC +1488 +1954 +5622 +5000 +53FE +9242 +1444 +13FC +1044 +1044 +1084 +1114 +1208 +ENDCHAR +STARTCHAR uni61A7 +ENCODING 24999 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2110 +A7FE +B000 +ABF8 +A248 +A3F8 +2248 +23F8 +2040 +27FC +2040 +2FFE +ENDCHAR +STARTCHAR uni61A8 +ENCODING 25000 +BBX 15 15 1 -1 +BITMAP +3C40 +0840 +FEFC +2488 +3D88 +2450 +3C20 +2420 +FE50 +048C +0200 +2908 +2884 +4812 +87F0 +ENDCHAR +STARTCHAR uni61A9 +ENCODING 25001 +BBX 15 15 1 -1 +BITMAP +0C10 +7020 +10FC +FE84 +10FC +1084 +7CFC +4484 +4484 +7CFC +0200 +2908 +2894 +4812 +87F0 +ENDCHAR +STARTCHAR uni61AA +ENCODING 25002 +BBX 15 16 0 -2 +BITMAP +279E +2492 +279E +2492 +379E +AC02 +A4F2 +A492 +A4F2 +2492 +24F2 +2492 +2492 +2532 +2402 +2406 +ENDCHAR +STARTCHAR uni61AB +ENCODING 25003 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +28A2 +2FBE +A8A2 +BFBE +A802 +A842 +ABFA +2912 +28A2 +2842 +28A2 +2B12 +2806 +ENDCHAR +STARTCHAR uni61AC +ENCODING 25004 +BBX 15 15 1 -1 +BITMAP +23F8 +2208 +23F8 +2208 +A3F8 +B040 +AFFE +A000 +A3F8 +2208 +23F8 +2040 +2248 +2C46 +20C0 +ENDCHAR +STARTCHAR uni61AD +ENCODING 25005 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +20A0 +A514 +B208 +AFFC +AA0A +A3F8 +2208 +23F8 +2040 +2248 +2C46 +20C0 +ENDCHAR +STARTCHAR uni61AE +ENCODING 25006 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +27FE +2AA8 +A2A8 +B2A8 +AFFE +A2A8 +A2A8 +22A8 +2FFE +2000 +2524 +2492 +2892 +ENDCHAR +STARTCHAR uni61AF +ENCODING 25007 +BBX 15 16 0 -2 +BITMAP +2000 +27BC +2108 +2528 +37BC +AB18 +A5AA +A946 +A000 +23F8 +2208 +2208 +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni61B0 +ENCODING 25008 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1048 +1030 +1BFE +5452 +5094 +5350 +9020 +13FE +1252 +128A +1376 +1252 +1272 +1206 +ENDCHAR +STARTCHAR uni61B1 +ENCODING 25009 +BBX 15 16 0 -2 +BITMAP +2214 +2112 +2FD2 +2010 +307E +AF90 +A490 +A490 +A790 +2128 +25A8 +2568 +2928 +214A +254A +2286 +ENDCHAR +STARTCHAR uni61B2 +ENCODING 25010 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4104 +5FF4 +0100 +1FF0 +0100 +7FFC +0000 +3FF8 +2448 +3FF8 +0200 +5914 +87F2 +ENDCHAR +STARTCHAR uni61B3 +ENCODING 25011 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1004 +13FC +1804 +57FC +5000 +53BC +9124 +17BC +1008 +13FE +1108 +1088 +10A8 +1010 +ENDCHAR +STARTCHAR uni61B4 +ENCODING 25012 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +24A4 +24A4 +37BC +A8A0 +A7BC +A4A4 +A4A4 +27BC +24A4 +24A4 +27BC +24A2 +20A2 +207E +ENDCHAR +STARTCHAR uni61B5 +ENCODING 25013 +BBX 15 15 0 -1 +BITMAP +0040 +7C20 +45FC +4488 +7C50 +43FE +7C20 +A5FC +2420 +3C20 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni61B6 +ENCODING 25014 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2FFC +2220 +BFFE +B000 +AFF8 +A408 +A7F8 +2408 +27F8 +2080 +2A44 +2A12 +31F0 +ENDCHAR +STARTCHAR uni61B7 +ENCODING 25015 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27BC +3110 +ABB8 +A554 +A912 +A000 +27FC +2044 +2240 +2278 +2240 +2540 +28FE +3000 +ENDCHAR +STARTCHAR uni61B8 +ENCODING 25016 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +20A0 +3110 +AA08 +A5F6 +A800 +A7BC +24A4 +24A4 +27BC +2210 +2210 +2528 +2944 +3082 +ENDCHAR +STARTCHAR uni61B9 +ENCODING 25017 +BBX 15 15 1 -1 +BITMAP +2090 +23FC +2294 +23FC +A294 +B3FC +A800 +AFFE +A400 +25FC +2400 +27FE +2524 +25D8 +2B06 +ENDCHAR +STARTCHAR uni61BA +ENCODING 25018 +BBX 15 15 1 -1 +BITMAP +21F0 +2220 +2FFE +2488 +A70E +B4F8 +AC00 +A7FE +A400 +24F8 +2400 +25FC +2504 +2904 +21FC +ENDCHAR +STARTCHAR uni61BB +ENCODING 25019 +BBX 15 16 0 -2 +BITMAP +1020 +17FE +1000 +13FE +1A02 +56FA +528A +53FE +9000 +11FC +1104 +11FC +1104 +11FC +1000 +17FE +ENDCHAR +STARTCHAR uni61BC +ENCODING 25020 +BBX 15 15 1 -1 +BITMAP +2840 +2840 +FE7E +2888 +2188 +7E50 +8220 +7250 +5288 +7306 +2600 +4908 +4884 +8412 +83F0 +ENDCHAR +STARTCHAR uni61BD +ENCODING 25021 +BBX 15 16 0 -2 +BITMAP +2110 +2FFE +2110 +3200 +ABFC +A4A4 +ABA4 +A164 +2254 +2494 +2108 +2040 +2024 +2522 +250A +28F8 +ENDCHAR +STARTCHAR uni61BE +ENCODING 25022 +BBX 15 15 1 -1 +BITMAP +2028 +2024 +2FFE +2820 +ABA8 +A828 +BB98 +AA90 +ABAA +2946 +3080 +2A44 +2A02 +290A +30F8 +ENDCHAR +STARTCHAR uni61BF +ENCODING 25023 +BBX 15 16 0 -2 +BITMAP +2108 +2208 +27C8 +2450 +37DE +AC64 +A7D4 +A214 +A114 +27D4 +2214 +23C8 +2248 +2454 +2554 +28A2 +ENDCHAR +STARTCHAR uni61C0 +ENCODING 25024 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2318 +2DF6 +3000 +AFFC +A554 +A4E4 +A7FC +2000 +23F8 +2208 +23F8 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni61C1 +ENCODING 25025 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2294 +3294 +ABFC +A000 +A7FE +A000 +23FC +2204 +23FC +20A2 +2114 +2308 +2D44 +2182 +ENDCHAR +STARTCHAR uni61C2 +ENCODING 25026 +BBX 15 16 0 -2 +BITMAP +2110 +27FE +2110 +23F8 +3040 +AFFC +A040 +A3F8 +A248 +23F8 +2248 +23F8 +2040 +27FC +2040 +2FFE +ENDCHAR +STARTCHAR uni61C3 +ENCODING 25027 +BBX 15 15 1 -1 +BITMAP +2220 +FF20 +2220 +7FFC +4924 +7F24 +0824 +7F24 +0824 +7F44 +0844 +1E98 +E108 +4894 +87F2 +ENDCHAR +STARTCHAR uni61C4 +ENCODING 25028 +BBX 15 16 0 -2 +BITMAP +2288 +2288 +2FE8 +2288 +33BE +A90A +A7CA +A54A +A7CA +210A +27CA +210A +27D2 +2112 +21EA +2E44 +ENDCHAR +STARTCHAR uni61C5 +ENCODING 25029 +BBX 15 16 0 -2 +BITMAP +1040 +107C +1040 +13FE +1A42 +5678 +53C4 +523C +9200 +13FE +1240 +13A4 +1258 +15B4 +1452 +19B0 +ENDCHAR +STARTCHAR uni61C6 +ENCODING 25030 +BBX 15 15 1 -1 +BITMAP +2000 +21F0 +2110 +21F0 +A000 +B7BC +ACA4 +A4A4 +A7BC +2040 +2FFE +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni61C7 +ENCODING 25031 +BBX 15 15 1 -1 +BITMAP +0CFC +F084 +4EFC +3884 +C884 +34FC +C4A2 +0C94 +3488 +C4E4 +1982 +0200 +2988 +4824 +87E2 +ENDCHAR +STARTCHAR uni61C8 +ENCODING 25032 +BBX 15 15 1 -1 +BITMAP +2400 +27BE +2892 +3112 +AFA2 +BAA2 +AACC +AF88 +AAA8 +2ABE +2FC8 +2888 +28FE +2888 +3188 +ENDCHAR +STARTCHAR uni61C9 +ENCODING 25033 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4910 +4BFC +5220 +77F8 +5220 +93F8 +9220 +93FE +0100 +2888 +4814 +87F2 +ENDCHAR +STARTCHAR uni61CA +ENCODING 25034 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +27FC +2424 +A5C4 +B554 +AFF4 +A564 +A654 +2404 +2040 +2FFE +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni61CB +ENCODING 25035 +BBX 15 15 1 -1 +BITMAP +2008 +27C8 +F87E +2288 +2108 +77DC +695C +A32A +2508 +2908 +2308 +0100 +2888 +4814 +87F2 +ENDCHAR +STARTCHAR uni61CC +ENCODING 25036 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2524 +27FC +A040 +B3F8 +A840 +AFFC +A110 +27FC +2040 +27FC +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni61CD +ENCODING 25037 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2208 +A2E8 +B2A8 +AAE8 +A208 +A3F8 +2004 +27F8 +2040 +2FFE +2150 +2E4E +ENDCHAR +STARTCHAR uni61CE +ENCODING 25038 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +3248 +AA48 +A554 +AFFE +A000 +27FC +2404 +25F4 +2514 +25F4 +2404 +27FC +2404 +ENDCHAR +STARTCHAR uni61CF +ENCODING 25039 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +11FE +1320 +19FC +5520 +51FC +5120 +91FE +1100 +13DE +1252 +1252 +1272 +1202 +1206 +ENDCHAR +STARTCHAR uni61D0 +ENCODING 25040 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2040 +A3FC +B2A4 +AAA4 +ABFC +A020 +27FE +2092 +2314 +2D08 +21E4 +2702 +ENDCHAR +STARTCHAR uni61D1 +ENCODING 25041 +BBX 15 16 0 -2 +BITMAP +0110 +4FFE +2110 +27FC +80A0 +47FC +54A4 +14A4 +E564 +2654 +2484 +240C +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni61D2 +ENCODING 25042 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +2F9C +2224 +3248 +AFBE +AAA2 +AAAA +AFAA +222A +272A +2AAA +3288 +2214 +2222 +2242 +ENDCHAR +STARTCHAR uni61D3 +ENCODING 25043 +BBX 15 16 0 -2 +BITMAP +103C +13C0 +1044 +1224 +1908 +57FE +5442 +52A4 +928A +147A +1080 +10F8 +1108 +1290 +1060 +179E +ENDCHAR +STARTCHAR uni61D4 +ENCODING 25044 +BBX 15 16 0 -2 +BITMAP +2040 +2FFE +2000 +37FC +AC04 +A5F4 +A514 +A5F4 +2404 +27FC +2000 +23F8 +2000 +2FFE +2248 +24C4 +ENDCHAR +STARTCHAR uni61D5 +ENCODING 25045 +BBX 15 15 1 -1 +BITMAP +7FFC +5110 +5F14 +4012 +5FFE +5110 +5F28 +5128 +9F28 +9144 +1342 +0100 +2888 +4814 +87F2 +ENDCHAR +STARTCHAR uni61D6 +ENCODING 25046 +BBX 15 16 0 -2 +BITMAP +080C +1470 +2210 +5C10 +88FE +3E10 +0810 +4A7C +2844 +0E44 +707C +2200 +5104 +5112 +9012 +0FF0 +ENDCHAR +STARTCHAR uni61D7 +ENCODING 25047 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +2110 +37BC +A910 +A110 +AFFE +A2A8 +22A8 +26EC +2AAA +22AA +22A8 +25A8 +2448 +2898 +ENDCHAR +STARTCHAR uni61D8 +ENCODING 25048 +BBX 15 15 0 -1 +BITMAP +42A8 +27FC +22AA +84E6 +4000 +57FC +1444 +E3F8 +2248 +2258 +2140 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni61D9 +ENCODING 25049 +BBX 15 16 0 -2 +BITMAP +1140 +124C +1264 +1244 +1B4C +5664 +52A4 +53AC +92A4 +12A4 +17FE +1000 +1110 +1108 +1204 +1404 +ENDCHAR +STARTCHAR uni61DA +ENCODING 25050 +BBX 15 16 0 -2 +BITMAP +203E +27C0 +2244 +2128 +33F8 +A840 +A7FC +A000 +A3F8 +2008 +23F8 +2008 +23F8 +2544 +252A +28FA +ENDCHAR +STARTCHAR uni61DB +ENCODING 25051 +BBX 15 16 0 -2 +BITMAP +2040 +2FFE +2040 +27FC +3000 +ABF8 +A208 +AFFE +A802 +27FC +2110 +23F8 +2040 +27FC +2040 +2FFE +ENDCHAR +STARTCHAR uni61DC +ENCODING 25052 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +1BFE +5652 +53FE +5000 +93FE +1242 +10F8 +1108 +1290 +1060 +10C0 +1700 +ENDCHAR +STARTCHAR uni61DD +ENCODING 25053 +BBX 15 15 1 -1 +BITMAP +2800 +297C +2E04 +2848 +A930 +A710 +BAFE +AF12 +AA14 +3250 +2F5C +2250 +2570 +24D0 +288E +ENDCHAR +STARTCHAR uni61DE +ENCODING 25054 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +13FE +1A02 +55FC +5000 +53FE +9040 +10A2 +1354 +10B8 +1354 +1092 +1350 +1020 +ENDCHAR +STARTCHAR uni61DF +ENCODING 25055 +BBX 15 15 1 -1 +BITMAP +4A84 +4A84 +2B04 +7FFE +2104 +1224 +7F94 +0814 +7F84 +0804 +7F9C +0100 +2888 +4814 +87F2 +ENDCHAR +STARTCHAR uni61E0 +ENCODING 25056 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +2110 +30A4 +AF58 +A554 +A552 +AB58 +2000 +2208 +23F8 +2208 +23F8 +2208 +2408 +ENDCHAR +STARTCHAR uni61E1 +ENCODING 25057 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2488 +37DE +AC88 +A5DC +A6AA +A488 +2440 +2490 +2520 +2448 +2484 +25FC +2884 +ENDCHAR +STARTCHAR uni61E2 +ENCODING 25058 +BBX 15 16 0 -2 +BITMAP +2010 +27D0 +2510 +27DE +3450 +AFE8 +A504 +A7C4 +A000 +23F8 +22A8 +22A8 +22A8 +22A8 +2FFE +2000 +ENDCHAR +STARTCHAR uni61E3 +ENCODING 25059 +BBX 15 15 1 -1 +BITMAP +4110 +2FFE +0110 +81F0 +4040 +27FC +0444 +1554 +26EC +4444 +844C +0100 +2888 +4814 +87F2 +ENDCHAR +STARTCHAR uni61E4 +ENCODING 25060 +BBX 15 16 0 -2 +BITMAP +2040 +27FC +2040 +33FC +A800 +A7FE +A002 +A3F8 +2040 +27FE +2000 +27FE +2008 +27FE +24A8 +2798 +ENDCHAR +STARTCHAR uni61E5 +ENCODING 25061 +BBX 15 16 0 -2 +BITMAP +2040 +27FC +2040 +27FE +3402 +ABFC +A248 +A3F8 +A248 +23F8 +2000 +27FC +2244 +2278 +2540 +28FE +ENDCHAR +STARTCHAR uni61E6 +ENCODING 25062 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +2FFE +A842 +BB5A +A842 +A358 +A000 +2FFE +2080 +2FFE +2922 +2922 +2926 +ENDCHAR +STARTCHAR uni61E7 +ENCODING 25063 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +2444 +32A8 +AA94 +A474 +A000 +A3F8 +22A8 +2FFE +2000 +27FC +2040 +2140 +2080 +ENDCHAR +STARTCHAR uni61E8 +ENCODING 25064 +BBX 15 16 0 -2 +BITMAP +2000 +2FFE +2808 +2BC8 +3A4C +ABCA +AA48 +ABDE +A808 +2BC8 +2A48 +2BD4 +2A54 +2BD4 +2A54 +32E2 +ENDCHAR +STARTCHAR uni61E9 +ENCODING 25065 +BBX 15 16 0 -2 +BITMAP +2208 +2110 +27FC +3040 +ABF8 +A080 +A7FC +A148 +23FC +260A +2BF8 +2208 +23FA +2234 +228C +2302 +ENDCHAR +STARTCHAR uni61EA +ENCODING 25066 +BBX 15 16 0 -2 +BITMAP +23F8 +2208 +23F8 +2208 +33F8 +A910 +A7FC +A110 +AFFE +2110 +2248 +2554 +20E0 +2150 +2248 +20C0 +ENDCHAR +STARTCHAR uni61EB +ENCODING 25067 +BBX 15 16 0 -2 +BITMAP +1042 +139C +1210 +1BDE +5694 +5294 +5420 +93FC +1204 +13FC +1204 +13FC +1204 +13FC +1108 +1204 +ENDCHAR +STARTCHAR uni61EC +ENCODING 25068 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +2FF8 +2220 +3FFC +2080 +2FF8 +2888 +2FF8 +2888 +2FF8 +4220 +5494 +924A +23FA +ENDCHAR +STARTCHAR uni61ED +ENCODING 25069 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2488 +35FC +AC88 +A7FE +A420 +A5FC +2524 +25FC +2524 +25FC +2400 +2488 +2904 +ENDCHAR +STARTCHAR uni61EE +ENCODING 25070 +BBX 15 16 0 -2 +BITMAP +27FC +2080 +23F8 +3208 +ABF8 +A208 +AFFE +A882 +2548 +2514 +28F4 +2100 +23F8 +2508 +20F0 +2F0E +ENDCHAR +STARTCHAR uni61EF +ENCODING 25071 +BBX 15 16 0 -2 +BITMAP +0A20 +FFA0 +493E +7F44 +49A4 +5124 +0828 +FF28 +2010 +3E28 +4244 +8682 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni61F0 +ENCODING 25072 +BBX 15 16 0 -2 +BITMAP +2202 +25E2 +24A2 +26AA +352A +AE6A +A10A +A28A +A44A +2BAA +210A +27CA +2122 +2542 +21EA +2E04 +ENDCHAR +STARTCHAR uni61F1 +ENCODING 25073 +BBX 15 16 0 -2 +BITMAP +1108 +17FE +1108 +1000 +1BFC +5694 +5294 +53FC +9028 +13FE +1220 +1324 +12A8 +1292 +142A +18C6 +ENDCHAR +STARTCHAR uni61F2 +ENCODING 25074 +BBX 15 15 1 -1 +BITMAP +2210 +4A90 +9FBE +2044 +2FA4 +6228 +AF90 +2210 +2FA8 +2046 +0200 +2908 +2894 +4412 +83F0 +ENDCHAR +STARTCHAR uni61F3 +ENCODING 25075 +BBX 15 16 0 -2 +BITMAP +1088 +13DE +1088 +19DC +5488 +53DE +5088 +93FC +1004 +11FC +1004 +13FC +1040 +12A4 +128A +147A +ENDCHAR +STARTCHAR uni61F4 +ENCODING 25076 +BBX 15 15 1 -1 +BITMAP +2110 +2114 +27D2 +2112 +A110 +BFFE +A290 +AED4 +A294 +2ED4 +2298 +2E88 +23DA +2E2A +2044 +ENDCHAR +STARTCHAR uni61F5 +ENCODING 25077 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +27FE +2090 +A3FC +B2A4 +ABFC +A800 +A7FE +250A +21F8 +2108 +21F8 +2108 +21F8 +ENDCHAR +STARTCHAR uni61F6 +ENCODING 25078 +BBX 15 15 1 -1 +BITMAP +2200 +223E +2F92 +2212 +AFA6 +BA80 +AABC +AAA4 +AFBC +2224 +273C +26A4 +2ABC +3228 +2246 +ENDCHAR +STARTCHAR uni61F7 +ENCODING 25079 +BBX 15 15 1 -1 +BITMAP +2040 +2FFE +2000 +27FC +A524 +B7FC +A840 +A75C +A040 +275C +20A2 +2324 +3E14 +23C8 +2E06 +ENDCHAR +STARTCHAR uni61F8 +ENCODING 25080 +BBX 15 15 1 -1 +BITMAP +3C0E +A4F0 +BC20 +A448 +BCD0 +A424 +BC5A +81F2 +FE54 +1454 +5292 +9110 +0A28 +4924 +87F2 +ENDCHAR +STARTCHAR uni61F9 +ENCODING 25081 +BBX 15 16 0 -2 +BITMAP +2040 +27FC +2000 +23B8 +32A8 +ABB8 +A110 +A7FC +A110 +27FC +2110 +2FFE +2128 +2310 +2D48 +2186 +ENDCHAR +STARTCHAR uni61FA +ENCODING 25082 +BBX 15 15 1 -1 +BITMAP +2490 +2494 +2B52 +2A52 +A010 +BFFE +A290 +AED4 +A294 +2ED4 +2298 +2E88 +23DA +2E2A +2044 +ENDCHAR +STARTCHAR uni61FB +ENCODING 25083 +BBX 15 16 0 -2 +BITMAP +1094 +1398 +1092 +118E +1A80 +55FC +5124 +51FC +9124 +11FC +1088 +11FC +1088 +13FE +1088 +1104 +ENDCHAR +STARTCHAR uni61FC +ENCODING 25084 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +24A4 +27BC +A4A4 +B7BC +A920 +A240 +A7FC +2C40 +27F8 +2440 +27F8 +2440 +27FE +ENDCHAR +STARTCHAR uni61FD +ENCODING 25085 +BBX 15 15 1 -1 +BITMAP +2110 +2FFE +2110 +27BC +A4A4 +B7BC +A910 +A220 +A7FC +2A20 +23F8 +2220 +23F8 +2220 +23FE +ENDCHAR +STARTCHAR uni61FE +ENCODING 25086 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2110 +21F0 +A11C +B7F0 +A810 +AFFE +A4A4 +27BC +24A4 +27BC +24A4 +2FFC +2084 +ENDCHAR +STARTCHAR uni61FF +ENCODING 25087 +BBX 15 15 1 -1 +BITMAP +1020 +FC20 +137E +7892 +0014 +FCA8 +8528 +7A44 +0082 +7820 +4810 +7950 +5144 +3A4A +C23A +ENDCHAR +STARTCHAR uni6200 +ENCODING 25088 +BBX 15 15 1 -1 +BITMAP +2388 +4010 +D7F4 +2008 +4B96 +F43A +2788 +A028 +B3AC +AAAA +2388 +0900 +2888 +4414 +83F2 +ENDCHAR +STARTCHAR uni6201 +ENCODING 25089 +BBX 15 16 0 -2 +BITMAP +2850 +FE48 +28FE +3990 +1290 +7CFE +5490 +7C90 +10FE +7C90 +1090 +FEFE +2880 +4504 +2492 +43F0 +ENDCHAR +STARTCHAR uni6202 +ENCODING 25090 +BBX 15 16 0 -2 +BITMAP +2020 +27FE +2488 +27DE +3488 +ADDC +A6AA +A488 +A450 +27DE +2450 +25DC +2450 +2BDE +2850 +3050 +ENDCHAR +STARTCHAR uni6203 +ENCODING 25091 +BBX 15 16 0 -2 +BITMAP +2248 +2150 +27FC +2404 +31F0 +A910 +A7FC +A554 +A4E4 +27FC +2040 +27FC +2040 +2FFE +22A4 +2452 +ENDCHAR +STARTCHAR uni6204 +ENCODING 25092 +BBX 15 16 0 -2 +BITMAP +13DE +1252 +13DE +1252 +1BDE +54A0 +51FE +5320 +95FC +1120 +11FE +1000 +11FC +1088 +1070 +178E +ENDCHAR +STARTCHAR uni6205 +ENCODING 25093 +BBX 14 16 0 -2 +BITMAP +1000 +FEF8 +2820 +FEFC +0000 +7CF8 +4488 +7CF8 +4488 +7CF8 +1088 +FEF8 +1050 +0208 +5124 +9FE4 +ENDCHAR +STARTCHAR uni6206 +ENCODING 25094 +BBX 15 16 0 -2 +BITMAP +1040 +FEF8 +2948 +FE30 +01CE +7CF8 +4420 +7DFC +4488 +7CA8 +10A8 +FE50 +1188 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni6207 +ENCODING 25095 +BBX 15 16 0 -2 +BITMAP +1040 +FEF8 +2948 +FE30 +01CE +7CF8 +4420 +7DFC +4488 +7CF8 +1088 +FEF8 +1050 +0288 +5124 +9FE4 +ENDCHAR +STARTCHAR uni6208 +ENCODING 25096 +BBX 15 15 1 -1 +BITMAP +0110 +0108 +0104 +0100 +FFFE +0100 +0104 +0088 +0090 +00A0 +0040 +00C0 +0322 +0C12 +700C +ENDCHAR +STARTCHAR uni6209 +ENCODING 25097 +BBX 15 15 1 -1 +BITMAP +0088 +0084 +0080 +3FFE +2080 +2080 +2088 +2088 +2048 +2050 +2020 +2660 +3892 +E30A +1C04 +ENDCHAR +STARTCHAR uni620A +ENCODING 25098 +BBX 15 15 1 -1 +BITMAP +0090 +0088 +0088 +7FFE +4080 +4080 +4044 +4048 +4050 +4020 +4020 +40D0 +4312 +8C0A +8004 +ENDCHAR +STARTCHAR uni620B +ENCODING 25099 +BBX 15 16 0 -2 +BITMAP +0240 +0220 +0220 +02FC +7F00 +0200 +0200 +023E +FFC0 +0210 +0120 +0140 +0184 +0E44 +7034 +000C +ENDCHAR +STARTCHAR uni620C +ENCODING 25100 +BBX 15 15 1 -1 +BITMAP +0088 +0084 +0080 +3FFE +2080 +2080 +2088 +2088 +2E48 +2050 +2020 +4060 +4092 +830A +1C04 +ENDCHAR +STARTCHAR uni620D +ENCODING 25101 +BBX 15 15 1 -1 +BITMAP +0088 +0084 +0080 +3FFE +2080 +2080 +2088 +2888 +2448 +2250 +2020 +4060 +4092 +830A +1C04 +ENDCHAR +STARTCHAR uni620E +ENCODING 25102 +BBX 15 15 1 -1 +BITMAP +0090 +0088 +0080 +FFFE +0080 +0880 +0884 +0844 +FE48 +0850 +1020 +1020 +2052 +418A +0E04 +ENDCHAR +STARTCHAR uni620F +ENCODING 25103 +BBX 14 16 1 -2 +BITMAP +0040 +0050 +0048 +FC48 +0440 +047C +4BC0 +2848 +1048 +1050 +2850 +2420 +4464 +8094 +010C +0204 +ENDCHAR +STARTCHAR uni6210 +ENCODING 25104 +BBX 15 15 1 -1 +BITMAP +0090 +0088 +0080 +7FFC +4080 +4080 +4088 +7C48 +4450 +4450 +4420 +4420 +8452 +B88A +8304 +ENDCHAR +STARTCHAR uni6211 +ENCODING 25105 +BBX 15 15 1 -1 +BITMAP +0240 +0C48 +7848 +0844 +0840 +FFFE +0840 +0848 +0848 +0E50 +F820 +0820 +0852 +088A +3B04 +ENDCHAR +STARTCHAR uni6212 +ENCODING 25106 +BBX 15 15 1 -1 +BITMAP +0050 +0048 +0048 +FFFE +0040 +1240 +1244 +1244 +FF24 +1228 +1228 +2210 +2232 +424A +8284 +ENDCHAR +STARTCHAR uni6213 +ENCODING 25107 +BBX 15 16 0 -2 +BITMAP +0048 +0044 +0040 +FFFE +0040 +0040 +0044 +3E44 +2244 +2228 +2228 +2212 +3E32 +224A +0086 +0302 +ENDCHAR +STARTCHAR uni6214 +ENCODING 25108 +BBX 15 15 1 -1 +BITMAP +0220 +0210 +7FFC +0100 +00B0 +00C0 +0724 +7818 +0808 +FFFE +0400 +0260 +0182 +0E62 +F01C +ENDCHAR +STARTCHAR uni6215 +ENCODING 25109 +BBX 15 15 1 -1 +BITMAP +0850 +4848 +4844 +4840 +487E +7BC0 +0844 +0824 +F828 +4828 +4810 +4830 +484A +888A +0B04 +ENDCHAR +STARTCHAR uni6216 +ENCODING 25110 +BBX 15 15 1 -1 +BITMAP +0048 +0044 +0040 +FFFE +0040 +0040 +3E44 +2224 +2228 +3E28 +0010 +0710 +382A +C0CA +0704 +ENDCHAR +STARTCHAR uni6217 +ENCODING 25111 +BBX 15 16 0 -2 +BITMAP +0828 +0824 +1424 +1220 +212E +40F0 +BE20 +2224 +2224 +2228 +2A28 +2410 +2112 +212A +1F46 +0082 +ENDCHAR +STARTCHAR uni6218 +ENCODING 25112 +BBX 14 16 1 -2 +BITMAP +2040 +2050 +2048 +3C48 +2040 +207C +23C0 +2048 +FC48 +8450 +8450 +8420 +8464 +FC94 +850C +0204 +ENDCHAR +STARTCHAR uni6219 +ENCODING 25113 +BBX 15 16 0 -2 +BITMAP +0028 +FF24 +8124 +8120 +BD2E +81F0 +8120 +BD24 +A524 +A528 +A528 +BD10 +8112 +812A +8546 +8282 +ENDCHAR +STARTCHAR uni621A +ENCODING 25114 +BBX 15 15 1 -1 +BITMAP +0048 +0044 +0040 +7FFC +4440 +4440 +4744 +4444 +7FA4 +4428 +5528 +5510 +A492 +A4AA +0C44 +ENDCHAR +STARTCHAR uni621B +ENCODING 25115 +BBX 15 14 1 -1 +BITMAP +FFFE +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +0404 +FFFE +0210 +0120 +00C2 +0732 +780C +ENDCHAR +STARTCHAR uni621C +ENCODING 25116 +BBX 15 16 0 -2 +BITMAP +0050 +0048 +0040 +FFFE +0040 +3E40 +2244 +3E44 +0044 +7F28 +0828 +3E12 +0832 +0F4A +7886 +2302 +ENDCHAR +STARTCHAR uni621D +ENCODING 25117 +BBX 15 15 1 -1 +BITMAP +0048 +7C44 +4444 +4440 +7C7E +47C0 +4444 +7C44 +4444 +4428 +4428 +7C10 +2832 +444A +8584 +ENDCHAR +STARTCHAR uni621E +ENCODING 25118 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +1FF0 +1010 +1FF0 +1010 +7FFC +4444 +0420 +7FFC +0240 +0182 +0E62 +F01C +ENDCHAR +STARTCHAR uni621F +ENCODING 25119 +BBX 15 15 1 -1 +BITMAP +1028 +1024 +1020 +FE3E +11E0 +7C20 +4424 +7C24 +4428 +7C10 +1010 +FE30 +104A +108A +1304 +ENDCHAR +STARTCHAR uni6220 +ENCODING 25120 +BBX 15 16 0 -2 +BITMAP +1040 +0848 +FF44 +0044 +4240 +2440 +FFFE +0040 +7E44 +4244 +4228 +7E2A +4212 +422A +7E46 +4282 +ENDCHAR +STARTCHAR uni6221 +ENCODING 25121 +BBX 15 15 1 -1 +BITMAP +2220 +2228 +FFA4 +2220 +3E3E +22E0 +3E24 +2224 +2228 +FFA8 +5410 +5430 +672A +404A +7F84 +ENDCHAR +STARTCHAR uni6222 +ENCODING 25122 +BBX 15 15 1 -1 +BITMAP +0028 +3E24 +2224 +3E20 +003E +FFE0 +2220 +3E24 +2224 +3E28 +2228 +3E10 +E232 +024A +0384 +ENDCHAR +STARTCHAR uni6223 +ENCODING 25123 +BBX 15 15 1 -1 +BITMAP +0128 +7E24 +94A4 +6520 +243E +42E0 +8124 +3C24 +0828 +0828 +FE10 +0810 +142A +224A +C184 +ENDCHAR +STARTCHAR uni6224 +ENCODING 25124 +BBX 15 16 0 -2 +BITMAP +0010 +7E14 +2212 +2410 +3F16 +5578 +4912 +5512 +A212 +0014 +7F14 +5508 +551A +57AA +FC46 +0082 +ENDCHAR +STARTCHAR uni6225 +ENCODING 25125 +BBX 15 16 0 -2 +BITMAP +0020 +7E28 +4224 +7E24 +4220 +7E3E +09E0 +4824 +7F24 +8828 +7E28 +0810 +0F32 +F04A +4086 +0102 +ENDCHAR +STARTCHAR uni6226 +ENCODING 25126 +BBX 15 15 1 -1 +BITMAP +1128 +8924 +4220 +7F2E +49F0 +4924 +7F24 +4924 +4928 +7F28 +0810 +0F10 +F82A +08CA +0B04 +ENDCHAR +STARTCHAR uni6227 +ENCODING 25127 +BBX 15 16 0 -2 +BITMAP +0828 +0C24 +1224 +2920 +44AE +BFF0 +2120 +3F24 +2124 +3F28 +2028 +3F10 +5112 +512A +9F46 +1182 +ENDCHAR +STARTCHAR uni6228 +ENCODING 25128 +BBX 15 16 0 -2 +BITMAP +0028 +FF24 +0224 +7A20 +4A2E +7AF0 +0020 +FF24 +0224 +7A28 +4A28 +4A10 +7A12 +022A +0A46 +0482 +ENDCHAR +STARTCHAR uni6229 +ENCODING 25129 +BBX 15 15 1 -1 +BITMAP +0028 +FF24 +4424 +443E +AAE0 +DD20 +0024 +FF24 +0028 +7E28 +4210 +7E10 +422A +424A +7E84 +ENDCHAR +STARTCHAR uni622A +ENCODING 25130 +BBX 15 15 1 -1 +BITMAP +0420 +0428 +7FA4 +0420 +043E +FFE0 +1224 +2424 +7F28 +A418 +3F10 +2410 +3F2A +242A +3F44 +ENDCHAR +STARTCHAR uni622B +ENCODING 25131 +BBX 15 16 0 -2 +BITMAP +1014 +1012 +FE10 +11FE +2010 +3C10 +25D2 +6552 +BD52 +2554 +25D4 +3C08 +24CA +271A +2426 +2C42 +ENDCHAR +STARTCHAR uni622C +ENCODING 25132 +BBX 15 16 0 -2 +BITMAP +0010 +7F94 +1212 +5290 +3316 +1278 +FFD2 +0012 +3F12 +2114 +2114 +3F08 +211A +212A +3F46 +2182 +ENDCHAR +STARTCHAR uni622D +ENCODING 25133 +BBX 15 16 0 -2 +BITMAP +1010 +0814 +FF92 +8090 +0016 +7F78 +0812 +7F12 +4912 +7F14 +4914 +7F08 +001A +222A +4146 +8082 +ENDCHAR +STARTCHAR uni622E +ENCODING 25134 +BBX 15 15 1 -1 +BITMAP +0028 +F724 +5320 +953E +33E0 +D524 +1924 +2424 +4B28 +B418 +0810 +3230 +044A +088A +7304 +ENDCHAR +STARTCHAR uni622F +ENCODING 25135 +BBX 15 15 1 -1 +BITMAP +1028 +1E24 +1020 +7F3E +51E0 +7C24 +5124 +5F24 +4028 +5518 +5510 +7610 +942A +9F4A +7084 +ENDCHAR +STARTCHAR uni6230 +ENCODING 25136 +BBX 15 15 1 -1 +BITMAP +0028 +7724 +5520 +773E +00E0 +7F24 +4924 +7F24 +4928 +7F18 +0810 +FF90 +082A +08CA +0B04 +ENDCHAR +STARTCHAR uni6231 +ENCODING 25137 +BBX 15 16 0 -2 +BITMAP +0810 +0F14 +0812 +7F90 +4896 +4E78 +7912 +4712 +4012 +4A14 +6A94 +AA88 +BB9A +0A2A +7F46 +2082 +ENDCHAR +STARTCHAR uni6232 +ENCODING 25138 +BBX 15 15 1 -1 +BITMAP +0828 +0F24 +0820 +7F3E +49E0 +7E24 +4924 +4728 +4028 +7F90 +5110 +5F10 +922A +882A +3F44 +ENDCHAR +STARTCHAR uni6233 +ENCODING 25139 +BBX 15 15 1 -1 +BITMAP +0020 +F7A8 +52A4 +B5A0 +52BE +94E0 +2424 +2824 +7F28 +C818 +7E10 +4830 +7E2A +484A +7F84 +ENDCHAR +STARTCHAR uni6234 +ENCODING 25140 +BBX 15 15 1 -1 +BITMAP +0428 +3FA4 +0420 +FFFE +0020 +3FA4 +24A4 +3FA4 +24A8 +3FA8 +1218 +7F90 +122A +FFEA +2144 +ENDCHAR +STARTCHAR uni6235 +ENCODING 25141 +BBX 15 16 0 -2 +BITMAP +7728 +5524 +7724 +5520 +772E +55F0 +7720 +2224 +7FA4 +A428 +3F28 +2410 +3F12 +242A +3FC6 +2082 +ENDCHAR +STARTCHAR uni6236 +ENCODING 25142 +BBX 13 16 0 -2 +BITMAP +0010 +00F8 +1F00 +1000 +1FF8 +1008 +1008 +1008 +1FF8 +1008 +1000 +1000 +2000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni6237 +ENCODING 25143 +BBX 12 16 1 -2 +BITMAP +0400 +0200 +0200 +3FF0 +2010 +2010 +2010 +2010 +3FF0 +2010 +2000 +2000 +2000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni6238 +ENCODING 25144 +BBX 14 14 1 -1 +BITMAP +7FFC +0000 +0000 +3FFC +2004 +2004 +2004 +3FFC +2000 +2000 +2000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni6239 +ENCODING 25145 +BBX 14 16 0 -2 +BITMAP +0200 +0100 +3FFC +2004 +2004 +3FFC +2000 +2000 +2FF0 +2020 +20C0 +2100 +4200 +4404 +8404 +03FC +ENDCHAR +STARTCHAR uni623A +ENCODING 25146 +BBX 15 16 0 -2 +BITMAP +0800 +0400 +047C +3F44 +2144 +2144 +2144 +3F44 +217C +2040 +2040 +2040 +2042 +4042 +4042 +803E +ENDCHAR +STARTCHAR uni623B +ENCODING 25147 +BBX 15 14 1 -1 +BITMAP +7FFC +0000 +3FF8 +2008 +2008 +3FF8 +2080 +2080 +3FFC +4080 +4140 +8220 +0C18 +3006 +ENDCHAR +STARTCHAR uni623C +ENCODING 25148 +BBX 15 15 0 -2 +BITMAP +FC7E +0440 +0440 +0440 +7C7C +4444 +4444 +4444 +7C7C +0444 +0840 +0840 +1040 +2040 +4040 +ENDCHAR +STARTCHAR uni623D +ENCODING 25149 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +3FFC +2004 +2004 +3FFC +2000 +2220 +2120 +2420 +2220 +207E +5FA0 +4020 +8020 +0020 +ENDCHAR +STARTCHAR uni623E +ENCODING 25150 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +2000 +3FFC +2004 +3FFC +2090 +2088 +3FFE +2080 +4080 +4140 +8220 +0C18 +3006 +ENDCHAR +STARTCHAR uni623F +ENCODING 25151 +BBX 15 14 1 -1 +BITMAP +7FFC +0000 +3FF8 +2008 +2008 +3FF8 +2100 +3FFE +2200 +43F8 +4208 +8408 +0808 +3070 +ENDCHAR +STARTCHAR uni6240 +ENCODING 25152 +BBX 15 15 1 -1 +BITMAP +000C +FEF0 +0080 +0080 +7C80 +44FE +4488 +4488 +7C88 +4088 +4088 +4108 +4108 +8208 +8008 +ENDCHAR +STARTCHAR uni6241 +ENCODING 25153 +BBX 14 15 1 -1 +BITMAP +00F8 +3F00 +2000 +3FF8 +2008 +2008 +3FF8 +2000 +3FFC +3244 +5244 +5FFC +9244 +1244 +125C +ENDCHAR +STARTCHAR uni6242 +ENCODING 25154 +BBX 14 16 0 -2 +BITMAP +0200 +0100 +3FFC +2004 +2004 +3FFC +2080 +2080 +20FC +2080 +2080 +2FF8 +4808 +4808 +8FF8 +0808 +ENDCHAR +STARTCHAR uni6243 +ENCODING 25155 +BBX 14 15 1 -1 +BITMAP +0078 +3F80 +2000 +3FFC +2004 +3FFC +2000 +2FFC +2804 +2BF4 +4A14 +4A14 +8BF4 +0804 +081C +ENDCHAR +STARTCHAR uni6244 +ENCODING 25156 +BBX 14 16 0 -2 +BITMAP +0200 +0100 +3FFC +2004 +2004 +3FFC +2100 +2200 +2FFC +2804 +29E4 +2924 +4924 +49E4 +8814 +0808 +ENDCHAR +STARTCHAR uni6245 +ENCODING 25157 +BBX 14 16 0 -2 +BITMAP +0100 +0080 +3FFC +2004 +3FFC +2100 +23F0 +2C20 +22C0 +2340 +3CFC +2308 +4C90 +4060 +8180 +1E00 +ENDCHAR +STARTCHAR uni6246 +ENCODING 25158 +BBX 15 15 1 -1 +BITMAP +007C +7F80 +4000 +7FFC +4004 +7FFC +4100 +4100 +7FFE +4288 +4C88 +B850 +8820 +0F18 +3806 +ENDCHAR +STARTCHAR uni6247 +ENCODING 25159 +BBX 14 14 1 -1 +BITMAP +FFFC +0000 +7FF8 +4008 +7FF8 +4000 +5EFC +4204 +5264 +4A14 +460C +8A14 +B2E4 +060C +ENDCHAR +STARTCHAR uni6248 +ENCODING 25160 +BBX 15 15 1 -1 +BITMAP +FFFE +0000 +3FFC +2004 +3FFC +2000 +27F0 +2410 +27F0 +2000 +4FF8 +4888 +8FF8 +0802 +07FE +ENDCHAR +STARTCHAR uni6249 +ENCODING 25161 +BBX 15 14 1 -1 +BITMAP +FFFE +0000 +7FFC +4004 +7FFC +4240 +5E7C +4240 +5E7C +4240 +8E40 +B27E +8440 +0840 +ENDCHAR +STARTCHAR uni624A +ENCODING 25162 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFC +2004 +3FFC +2488 +2490 +2960 +2218 +2C84 +348A +2488 +4950 +4220 +8C18 +3006 +ENDCHAR +STARTCHAR uni624B +ENCODING 25163 +BBX 15 14 1 -1 +BITMAP +00F0 +3F00 +0100 +0100 +7FFC +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni624C +ENCODING 25164 +BBX 9 15 4 -1 +BITMAP +0800 +0800 +0800 +0800 +FF80 +0800 +0800 +0800 +0F80 +F800 +0800 +0800 +0800 +0800 +3800 +ENDCHAR +STARTCHAR uni624D +ENCODING 25165 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +0080 +FFFC +0080 +0090 +00A0 +00C0 +0080 +0180 +0680 +1880 +E080 +0080 +0380 +ENDCHAR +STARTCHAR uni624E +ENCODING 25166 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +1040 +FE40 +1040 +1040 +1040 +1E40 +F040 +1040 +1040 +1042 +1042 +703E +ENDCHAR +STARTCHAR uni624F +ENCODING 25167 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +1080 +1080 +FDF0 +1090 +1090 +1490 +1890 +3090 +D090 +1092 +1112 +1112 +520E +2400 +ENDCHAR +STARTCHAR uni6250 +ENCODING 25168 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1040 +1040 +FDFC +1044 +1044 +1444 +1844 +3084 +D084 +1084 +1104 +1104 +5228 +2410 +ENDCHAR +STARTCHAR uni6251 +ENCODING 25169 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +1020 +FE20 +1030 +1028 +1024 +1E22 +F020 +1020 +1020 +1020 +1020 +7020 +ENDCHAR +STARTCHAR uni6252 +ENCODING 25170 +BBX 15 15 1 -1 +BITMAP +2000 +21F0 +2010 +2010 +F910 +2110 +2110 +2110 +3910 +E110 +2208 +2208 +2408 +2404 +6802 +ENDCHAR +STARTCHAR uni6253 +ENCODING 25171 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2010 +2010 +F810 +2010 +2010 +2010 +3810 +E010 +2010 +2010 +2010 +2010 +6070 +ENDCHAR +STARTCHAR uni6254 +ENCODING 25172 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +13F8 +1088 +FC90 +1090 +10A0 +14BC +1884 +3084 +D104 +1104 +1104 +1204 +5228 +2410 +ENDCHAR +STARTCHAR uni6255 +ENCODING 25173 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +2080 +F880 +2080 +2080 +2110 +3908 +E108 +2204 +2204 +227C +2782 +6C02 +ENDCHAR +STARTCHAR uni6256 +ENCODING 25174 +BBX 15 15 1 -1 +BITMAP +2000 +23C0 +2040 +2040 +F840 +2040 +2040 +2040 +38A0 +E0A0 +2110 +2110 +2208 +2404 +6802 +ENDCHAR +STARTCHAR uni6257 +ENCODING 25175 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +FC20 +1020 +11FC +1420 +1820 +3020 +D020 +1020 +1020 +1020 +53FE +2000 +ENDCHAR +STARTCHAR uni6258 +ENCODING 25176 +BBX 15 15 1 -1 +BITMAP +2030 +23C0 +2080 +2080 +F880 +2080 +2080 +27FE +3880 +E080 +2080 +2080 +2082 +2082 +607E +ENDCHAR +STARTCHAR uni6259 +ENCODING 25177 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +1010 +1010 +FDFE +1010 +1010 +1510 +1910 +3090 +D090 +1050 +1020 +1050 +5188 +2606 +ENDCHAR +STARTCHAR uni625A +ENCODING 25178 +BBX 14 15 1 -1 +BITMAP +2100 +2100 +2100 +21FC +FA04 +2204 +2404 +2004 +3804 +E1E4 +2004 +2004 +2008 +2008 +6070 +ENDCHAR +STARTCHAR uni625B +ENCODING 25179 +BBX 14 15 1 -1 +BITMAP +2000 +2000 +23F8 +2040 +F840 +2040 +2040 +2040 +3840 +E040 +2040 +2040 +2040 +27FC +6000 +ENDCHAR +STARTCHAR uni625C +ENCODING 25180 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +1020 +FC20 +1020 +1420 +1BFE +3020 +D020 +1020 +1020 +1020 +1020 +50A0 +2040 +ENDCHAR +STARTCHAR uni625D +ENCODING 25181 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1000 +1000 +FC00 +13FE +1040 +1440 +1880 +30FC +D004 +1004 +1004 +1004 +5028 +2010 +ENDCHAR +STARTCHAR uni625E +ENCODING 25182 +BBX 14 15 1 -1 +BITMAP +2000 +23F8 +2040 +2040 +F840 +2040 +2040 +27FC +3840 +E040 +2040 +2040 +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni625F +ENCODING 25183 +BBX 15 16 0 -2 +BITMAP +1000 +13F0 +1090 +1090 +FC90 +1090 +1090 +13F0 +1890 +3090 +D090 +1092 +108A +108A +5086 +2082 +ENDCHAR +STARTCHAR uni6260 +ENCODING 25184 +BBX 14 15 1 -1 +BITMAP +2000 +2FF8 +2208 +2288 +FA48 +2248 +2110 +2110 +38A0 +E0A0 +2040 +20A0 +2110 +2208 +6404 +ENDCHAR +STARTCHAR uni6261 +ENCODING 25185 +BBX 15 15 1 -1 +BITMAP +2020 +2120 +2120 +213C +F964 +21A4 +2724 +2124 +392C +E120 +2120 +2100 +2102 +2102 +60FE +ENDCHAR +STARTCHAR uni6262 +ENCODING 25186 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1080 +10FE +FD00 +1200 +10FC +1408 +1810 +3020 +D040 +1080 +1102 +1102 +50FE +2000 +ENDCHAR +STARTCHAR uni6263 +ENCODING 25187 +BBX 14 15 1 -1 +BITMAP +2000 +23FC +2204 +2204 +FA04 +2204 +2204 +2204 +3A04 +E204 +2204 +2204 +2204 +2204 +63FC +ENDCHAR +STARTCHAR uni6264 +ENCODING 25188 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2120 +2120 +F920 +2120 +2120 +2120 +3920 +E120 +2120 +2220 +2220 +2422 +681E +ENDCHAR +STARTCHAR uni6265 +ENCODING 25189 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +103C +FDE0 +1020 +1020 +1420 +183E +33E0 +D020 +1022 +1022 +1022 +501E +2000 +ENDCHAR +STARTCHAR uni6266 +ENCODING 25190 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FC20 +1020 +1020 +17FE +1820 +3020 +D020 +1020 +1020 +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni6267 +ENCODING 25191 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +1040 +FDF8 +1048 +1048 +1448 +1948 +30C8 +D048 +10A8 +10AA +110A +5206 +2402 +ENDCHAR +STARTCHAR uni6268 +ENCODING 25192 +BBX 15 15 1 -1 +BITMAP +2000 +27F8 +2088 +2088 +F888 +2488 +2288 +2188 +3888 +E148 +2128 +2218 +2214 +2412 +6860 +ENDCHAR +STARTCHAR uni6269 +ENCODING 25193 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1010 +11FE +FD00 +1100 +1100 +1500 +1900 +3100 +D100 +1100 +1100 +1200 +5200 +2400 +ENDCHAR +STARTCHAR uni626A +ENCODING 25194 +BBX 14 16 0 -2 +BITMAP +1100 +1080 +10BC +1204 +FA04 +1204 +1604 +1A04 +3204 +D204 +1204 +1204 +1204 +1204 +5214 +2208 +ENDCHAR +STARTCHAR uni626B +ENCODING 25195 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +13FC +1004 +FC04 +1004 +1004 +15FC +1804 +3004 +D004 +1004 +1004 +13FC +5004 +2000 +ENDCHAR +STARTCHAR uni626C +ENCODING 25196 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1010 +1020 +FC40 +1080 +11FE +1492 +1892 +3092 +D112 +1122 +1222 +1442 +5094 +2108 +ENDCHAR +STARTCHAR uni626D +ENCODING 25197 +BBX 15 15 1 -1 +BITMAP +2000 +27F8 +2088 +2088 +F888 +2088 +2088 +27FE +3888 +E088 +2088 +2088 +2088 +2088 +67FE +ENDCHAR +STARTCHAR uni626E +ENCODING 25198 +BBX 15 15 1 -1 +BITMAP +2030 +2110 +2110 +2208 +FA08 +2404 +2BFA +2088 +3888 +E088 +2088 +2108 +2110 +2210 +6460 +ENDCHAR +STARTCHAR uni626F +ENCODING 25199 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +2120 +F920 +213C +2120 +2120 +3920 +E120 +2120 +2120 +2120 +2120 +67FE +ENDCHAR +STARTCHAR uni6270 +ENCODING 25200 +BBX 15 16 0 -2 +BITMAP +1040 +1050 +1048 +1048 +FC40 +11FE +1050 +1450 +1850 +3050 +D090 +1090 +1092 +1112 +510E +2200 +ENDCHAR +STARTCHAR uni6271 +ENCODING 25201 +BBX 15 15 1 -1 +BITMAP +2000 +2FF0 +2210 +FA10 +2220 +2220 +2378 +2308 +3A88 +E290 +2450 +2420 +2450 +2888 +6906 +ENDCHAR +STARTCHAR uni6272 +ENCODING 25202 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +10A0 +FD10 +1288 +1446 +1040 +1800 +33F8 +D008 +1010 +1010 +1020 +5020 +2040 +ENDCHAR +STARTCHAR uni6273 +ENCODING 25203 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2200 +2200 +FA00 +23FC +2284 +2284 +3A88 +E248 +2250 +2420 +2450 +2888 +6106 +ENDCHAR +STARTCHAR uni6274 +ENCODING 25204 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1050 +FC88 +1104 +1202 +1088 +1888 +3088 +D088 +1088 +1088 +1108 +5108 +2208 +ENDCHAR +STARTCHAR uni6275 +ENCODING 25205 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1050 +FC50 +1088 +1504 +1A02 +3060 +D010 +1000 +10C0 +1020 +1010 +5008 +2000 +ENDCHAR +STARTCHAR uni6276 +ENCODING 25206 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +27FC +F840 +2040 +2040 +2040 +3FFE +E040 +20A0 +20A0 +2110 +2208 +6C06 +ENDCHAR +STARTCHAR uni6277 +ENCODING 25207 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FC20 +1020 +13FE +1420 +1820 +3050 +D050 +1050 +1088 +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni6278 +ENCODING 25208 +BBX 15 16 0 -2 +BITMAP +1010 +1110 +1110 +1110 +FD10 +11FE +1100 +1500 +1900 +31F8 +D108 +1108 +1108 +1208 +5208 +2408 +ENDCHAR +STARTCHAR uni6279 +ENCODING 25209 +BBX 15 15 1 -1 +BITMAP +2440 +2440 +2440 +2448 +FC50 +2760 +2440 +2440 +3C40 +E440 +2440 +2440 +2442 +2742 +6C3E +ENDCHAR +STARTCHAR uni627A +ENCODING 25210 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13E0 +1220 +FE20 +1220 +1220 +17FE +1A20 +3210 +D210 +1212 +120A +128A +5306 +2202 +ENDCHAR +STARTCHAR uni627B +ENCODING 25211 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +2200 +23FC +F404 +2448 +2850 +2040 +3040 +E040 +20A0 +20A0 +2110 +2208 +6C06 +ENDCHAR +STARTCHAR uni627C +ENCODING 25212 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2200 +2200 +FAF8 +2288 +2288 +2288 +3A88 +E298 +2280 +2480 +2482 +2882 +607E +ENDCHAR +STARTCHAR uni627D +ENCODING 25213 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +FC20 +1124 +1124 +1524 +1924 +31FC +D024 +1020 +1022 +1022 +501E +2000 +ENDCHAR +STARTCHAR uni627E +ENCODING 25214 +BBX 15 15 1 -1 +BITMAP +2048 +2044 +2044 +2040 +FBFE +2040 +2040 +2044 +3848 +E030 +2020 +2050 +2192 +260A +6004 +ENDCHAR +STARTCHAR uni627F +ENCODING 25215 +BBX 15 14 1 -1 +BITMAP +1FF0 +0040 +0180 +F122 +17E4 +1128 +1130 +17D0 +2110 +2108 +4FE8 +8104 +0102 +0700 +ENDCHAR +STARTCHAR uni6280 +ENCODING 25216 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +2FFE +F040 +2040 +27F8 +2208 +3208 +E110 +20A0 +2040 +20A0 +2318 +6C06 +ENDCHAR +STARTCHAR uni6281 +ENCODING 25217 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1080 +1088 +FD04 +13FE +1002 +1490 +1890 +3090 +D090 +1090 +1112 +1112 +520E +2400 +ENDCHAR +STARTCHAR uni6282 +ENCODING 25218 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +2040 +F840 +2040 +2040 +23F8 +3840 +E040 +2040 +2040 +2040 +2040 +67FE +ENDCHAR +STARTCHAR uni6283 +ENCODING 25219 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2040 +F840 +2040 +2070 +204C +3840 +E040 +2040 +2040 +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni6284 +ENCODING 25220 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2248 +2248 +FC44 +2444 +2842 +2048 +39C8 +E008 +2010 +2010 +2020 +20C0 +6300 +ENDCHAR +STARTCHAR uni6285 +ENCODING 25221 +BBX 14 15 1 -1 +BITMAP +2100 +2100 +2100 +21FC +FA04 +2204 +2504 +2104 +3944 +E244 +23E4 +2E24 +2008 +2008 +6070 +ENDCHAR +STARTCHAR uni6286 +ENCODING 25222 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +FC88 +1088 +1088 +1488 +1888 +3050 +D050 +1020 +1050 +1088 +5104 +2602 +ENDCHAR +STARTCHAR uni6287 +ENCODING 25223 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FE +1102 +FD02 +1102 +1102 +15FA +1902 +3102 +D102 +1102 +1102 +11FE +5102 +2000 +ENDCHAR +STARTCHAR uni6288 +ENCODING 25224 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FD04 +11FC +1104 +1504 +1904 +31FC +D104 +1104 +1204 +1204 +5414 +2808 +ENDCHAR +STARTCHAR uni6289 +ENCODING 25225 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +23F8 +F848 +2048 +2048 +2048 +37FE +E0A0 +20A0 +2110 +2208 +2404 +6802 +ENDCHAR +STARTCHAR uni628A +ENCODING 25226 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2244 +2244 +FA44 +2244 +2244 +23FC +3A00 +E200 +2200 +2200 +2202 +2202 +61FE +ENDCHAR +STARTCHAR uni628B +ENCODING 25227 +BBX 15 16 0 -2 +BITMAP +1000 +1040 +1020 +1010 +FC90 +1080 +1080 +1284 +1A82 +3282 +D282 +1488 +1088 +1088 +5078 +2000 +ENDCHAR +STARTCHAR uni628C +ENCODING 25228 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FE +FD22 +1224 +1020 +1420 +1850 +3050 +D050 +1050 +1090 +1092 +5112 +220E +ENDCHAR +STARTCHAR uni628D +ENCODING 25229 +BBX 15 16 0 -2 +BITMAP +1008 +1068 +1388 +1088 +FC88 +1088 +1488 +1BFE +3088 +D088 +1088 +1088 +1108 +1108 +5208 +2408 +ENDCHAR +STARTCHAR uni628E +ENCODING 25230 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +1000 +FC00 +1000 +13FE +1420 +1820 +3040 +D040 +1088 +1104 +13FE +5102 +2000 +ENDCHAR +STARTCHAR uni628F +ENCODING 25231 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +1000 +FC00 +1000 +13FE +1090 +1890 +3090 +D090 +1090 +1112 +1112 +520E +2400 +ENDCHAR +STARTCHAR uni6290 +ENCODING 25232 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +FDFE +1122 +1122 +1522 +1952 +314A +D18A +1102 +1102 +1102 +510A +2104 +ENDCHAR +STARTCHAR uni6291 +ENCODING 25233 +BBX 14 15 1 -1 +BITMAP +2000 +2180 +267C +2444 +F444 +2444 +2444 +2444 +3444 +E444 +25C4 +2644 +385C +2040 +6040 +ENDCHAR +STARTCHAR uni6292 +ENCODING 25234 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2008 +2110 +F8A0 +2040 +27FE +2042 +3844 +E048 +2040 +2040 +2040 +2040 +61C0 +ENDCHAR +STARTCHAR uni6293 +ENCODING 25235 +BBX 15 15 1 -1 +BITMAP +200C +2038 +23C8 +2208 +FA48 +2248 +2248 +2248 +3A48 +E244 +2244 +2244 +2244 +2442 +6442 +ENDCHAR +STARTCHAR uni6294 +ENCODING 25236 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2020 +2020 +F820 +2040 +20C8 +20C4 +3944 +E242 +2442 +2040 +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni6295 +ENCODING 25237 +BBX 15 15 1 -1 +BITMAP +2000 +21F0 +2110 +2110 +FA12 +2212 +240E +2000 +3BFC +E004 +2108 +2090 +2060 +2198 +6606 +ENDCHAR +STARTCHAR uni6296 +ENCODING 25238 +BBX 15 15 1 -1 +BITMAP +2010 +2010 +2110 +2090 +F810 +2010 +2110 +2090 +3810 +E01E +20F0 +2710 +2010 +2010 +6010 +ENDCHAR +STARTCHAR uni6297 +ENCODING 25239 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2000 +F800 +21F0 +2110 +2110 +3910 +E110 +2110 +2210 +2212 +2412 +680E +ENDCHAR +STARTCHAR uni6298 +ENCODING 25240 +BBX 15 15 1 -1 +BITMAP +2018 +23E0 +2200 +2200 +FA00 +23FE +2210 +2210 +3A10 +E210 +2210 +2410 +2410 +2810 +6010 +ENDCHAR +STARTCHAR uni6299 +ENCODING 25241 +BBX 15 15 1 -1 +BITMAP +2038 +23C0 +2040 +2040 +F3FC +2040 +2040 +2040 +37FE +E040 +2040 +2040 +2040 +2040 +61C0 +ENDCHAR +STARTCHAR uni629A +ENCODING 25242 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1040 +1040 +FC40 +1040 +17FE +1040 +18A0 +30A0 +D0A0 +1120 +1122 +1222 +541E +2800 +ENDCHAR +STARTCHAR uni629B +ENCODING 25243 +BBX 15 15 1 -1 +BITMAP +2220 +2220 +2220 +2FA0 +F27C +2224 +2224 +2224 +3324 +E544 +2544 +2598 +2502 +2902 +68FE +ENDCHAR +STARTCHAR uni629C +ENCODING 25244 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +2FFE +F080 +2080 +21F8 +2108 +3290 +E290 +2450 +2820 +2050 +2188 +6606 +ENDCHAR +STARTCHAR uni629D +ENCODING 25245 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +213E +2102 +FA42 +2242 +27C2 +2882 +3082 +E102 +2142 +2222 +27E2 +2222 +A00A +4004 +ENDCHAR +STARTCHAR uni629E +ENCODING 25246 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +2204 +F204 +2204 +23FC +2220 +3220 +E220 +2210 +2210 +2408 +2404 +6802 +ENDCHAR +STARTCHAR uni629F +ENCODING 25247 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FC20 +1040 +11FE +1440 +1880 +31FC +D004 +1088 +1050 +1020 +5010 +2010 +ENDCHAR +STARTCHAR uni62A0 +ENCODING 25248 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1100 +1104 +FD44 +1128 +1128 +1510 +1910 +3128 +D128 +1144 +1184 +1100 +51FE +2000 +ENDCHAR +STARTCHAR uni62A1 +ENCODING 25249 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +10A0 +FD10 +1208 +1406 +1110 +1920 +3140 +D180 +1100 +1104 +1104 +50FC +2000 +ENDCHAR +STARTCHAR uni62A2 +ENCODING 25250 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +10A0 +FD10 +1208 +1406 +11F0 +1910 +3110 +D150 +1120 +1104 +1104 +50FC +2000 +ENDCHAR +STARTCHAR uni62A3 +ENCODING 25251 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1080 +10FC +FD04 +1204 +1084 +1444 +1844 +3014 +D024 +1044 +1184 +1004 +5028 +2010 +ENDCHAR +STARTCHAR uni62A4 +ENCODING 25252 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +11FE +FD02 +1102 +1102 +15FE +1902 +3100 +D100 +1100 +1200 +1200 +5400 +2800 +ENDCHAR +STARTCHAR uni62A5 +ENCODING 25253 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FD14 +1108 +1100 +15FC +1944 +3144 +D128 +1128 +1110 +1128 +5144 +2182 +ENDCHAR +STARTCHAR uni62A6 +ENCODING 25254 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2040 +2040 +F7FC +2444 +2444 +24A4 +34A4 +E514 +2514 +2404 +2404 +2404 +641C +ENDCHAR +STARTCHAR uni62A7 +ENCODING 25255 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +1104 +FD04 +1104 +1104 +1504 +19FC +3104 +D000 +1090 +1088 +1104 +5202 +2402 +ENDCHAR +STARTCHAR uni62A8 +ENCODING 25256 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +1020 +FD24 +10A4 +10A8 +1420 +1BFE +3020 +D020 +1020 +1020 +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni62A9 +ENCODING 25257 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FD24 +1124 +11FC +1524 +1924 +3124 +D7FE +1104 +1104 +1104 +5114 +2108 +ENDCHAR +STARTCHAR uni62AA +ENCODING 25258 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +13FE +FC80 +10A0 +1520 +19FC +3324 +D524 +1124 +1124 +1134 +1128 +5020 +2020 +ENDCHAR +STARTCHAR uni62AB +ENCODING 25259 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2444 +F448 +2440 +27F8 +2508 +3508 +E490 +28A0 +2840 +30A0 +2118 +6606 +ENDCHAR +STARTCHAR uni62AC +ENCODING 25260 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +2110 +F908 +2234 +27C2 +2000 +3800 +E3FC +2204 +2204 +2204 +2204 +63FC +ENDCHAR +STARTCHAR uni62AD +ENCODING 25261 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +FA02 +1404 +1000 +18F0 +3090 +D090 +1090 +1090 +1112 +1112 +520E +2400 +ENDCHAR +STARTCHAR uni62AE +ENCODING 25262 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +1110 +FA08 +1426 +1040 +1880 +3310 +D020 +1040 +1088 +1310 +1020 +50C0 +2700 +ENDCHAR +STARTCHAR uni62AF +ENCODING 25263 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +FD08 +11F8 +1108 +1508 +1908 +31F8 +D108 +1108 +1108 +1108 +57FE +2000 +ENDCHAR +STARTCHAR uni62B0 +ENCODING 25264 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FD24 +1124 +1124 +1524 +1924 +33FE +D020 +1050 +1050 +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni62B1 +ENCODING 25265 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +23FC +2404 +F404 +2BE4 +2024 +2024 +3024 +E7E4 +2418 +2402 +2402 +2402 +63FE +ENDCHAR +STARTCHAR uni62B2 +ENCODING 25266 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +17FE +1008 +FC08 +13C8 +1248 +1648 +1A48 +3248 +D3C8 +1248 +1008 +1008 +5028 +2010 +ENDCHAR +STARTCHAR uni62B3 +ENCODING 25267 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FD04 +11FC +1100 +1540 +1944 +3148 +D170 +1140 +1142 +1242 +523E +2400 +ENDCHAR +STARTCHAR uni62B4 +ENCODING 25268 +BBX 15 16 0 -2 +BITMAP +2048 +2248 +2248 +2248 +FA48 +27FE +2248 +2A48 +3248 +E248 +2278 +2200 +2200 +2200 +A3FE +4000 +ENDCHAR +STARTCHAR uni62B5 +ENCODING 25269 +BBX 15 15 1 -1 +BITMAP +201C +27E0 +2420 +2420 +F420 +2420 +27FE +2420 +3420 +E410 +2410 +2790 +2C0A +200A +6FE4 +ENDCHAR +STARTCHAR uni62B6 +ENCODING 25270 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1120 +1120 +FDFC +1120 +1220 +1020 +1BFE +3020 +D050 +1050 +1088 +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni62B7 +ENCODING 25271 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1020 +1020 +FC40 +1040 +14D0 +1948 +3244 +D444 +1040 +1040 +1040 +1000 +57FE +2000 +ENDCHAR +STARTCHAR uni62B8 +ENCODING 25272 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13C0 +1000 +FC40 +1020 +13FC +1408 +1810 +3020 +D040 +1080 +1100 +1280 +547E +2000 +ENDCHAR +STARTCHAR uni62B9 +ENCODING 25273 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +2FFE +F040 +2040 +2040 +27FC +3040 +E0E0 +2150 +2248 +2444 +2842 +6040 +ENDCHAR +STARTCHAR uni62BA +ENCODING 25274 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FC20 +1020 +1020 +13FE +1870 +30A8 +D0A8 +1124 +1124 +1222 +5020 +2020 +ENDCHAR +STARTCHAR uni62BB +ENCODING 25275 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +27FC +2444 +FC44 +2444 +27FC +2444 +3C44 +E444 +27FC +2040 +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni62BC +ENCODING 25276 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2444 +2444 +F444 +27FC +2444 +2444 +3444 +E7FC +2040 +2040 +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni62BD +ENCODING 25277 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +2040 +2040 +F7FC +2444 +2444 +2444 +3444 +E7FC +2444 +2444 +2444 +2444 +67FC +ENDCHAR +STARTCHAR uni62BE +ENCODING 25278 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +FDFE +1020 +1020 +1420 +1BFE +3020 +D040 +1040 +1088 +1104 +53FE +2102 +ENDCHAR +STARTCHAR uni62BF +ENCODING 25279 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1204 +1204 +FE04 +13FC +1220 +1620 +1BFE +3220 +D220 +1210 +1212 +128A +5306 +2202 +ENDCHAR +STARTCHAR uni62C0 +ENCODING 25280 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FD04 +1104 +11FC +1450 +1850 +3050 +D050 +1092 +1092 +1112 +520E +2400 +ENDCHAR +STARTCHAR uni62C1 +ENCODING 25281 +BBX 15 16 0 -2 +BITMAP +2200 +2200 +2200 +221E +F7D2 +2252 +2252 +2252 +3252 +E252 +2252 +2252 +2452 +245E +A952 +5080 +ENDCHAR +STARTCHAR uni62C2 +ENCODING 25282 +BBX 15 15 1 -1 +BITMAP +2120 +2120 +27FC +2124 +F924 +27FC +2520 +2520 +37FE +E122 +2122 +2122 +2222 +222C +6420 +ENDCHAR +STARTCHAR uni62C3 +ENCODING 25283 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +1080 +10FE +FD40 +1140 +1240 +107C +1840 +3040 +D040 +107E +1040 +1040 +5040 +2040 +ENDCHAR +STARTCHAR uni62C4 +ENCODING 25284 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +2040 +F7FC +2040 +2040 +2040 +3040 +E7FC +2040 +2040 +2040 +2040 +6FFE +ENDCHAR +STARTCHAR uni62C5 +ENCODING 25285 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +2208 +F208 +2208 +23F8 +2208 +3208 +E208 +2208 +23F8 +2000 +2000 +6FFE +ENDCHAR +STARTCHAR uni62C6 +ENCODING 25286 +BBX 15 15 1 -1 +BITMAP +2038 +23C0 +2200 +2200 +FBFE +2220 +2220 +22E0 +3A38 +E226 +2220 +2420 +2420 +2820 +6020 +ENDCHAR +STARTCHAR uni62C7 +ENCODING 25287 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +2288 +F248 +2208 +3FFE +2408 +3488 +E448 +2448 +2408 +27FE +2010 +6070 +ENDCHAR +STARTCHAR uni62C8 +ENCODING 25288 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +1040 +FE7E +1040 +1040 +1040 +1FFC +F204 +1204 +1204 +1204 +1204 +73FC +ENDCHAR +STARTCHAR uni62C9 +ENCODING 25289 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +27FC +F800 +2000 +2208 +2208 +3A10 +E110 +2110 +2020 +2020 +2020 +6FFE +ENDCHAR +STARTCHAR uni62CA +ENCODING 25290 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +2108 +2208 +F2FE +2608 +2A08 +2248 +3248 +E228 +2208 +2208 +2208 +2208 +6238 +ENDCHAR +STARTCHAR uni62CB +ENCODING 25291 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +2210 +227C +FA14 +27D4 +2294 +2A94 +32A4 +E2A4 +22D4 +228A +2482 +2482 +A87E +5000 +ENDCHAR +STARTCHAR uni62CC +ENCODING 25292 +BBX 15 15 1 -1 +BITMAP +2040 +2248 +2244 +2444 +F040 +27FC +2040 +2040 +3040 +EFFE +2040 +2040 +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni62CD +ENCODING 25293 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +2080 +23FC +FA04 +2204 +2204 +2204 +3BFC +E204 +2204 +2204 +2204 +2204 +63FC +ENDCHAR +STARTCHAR uni62CE +ENCODING 25294 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +10A0 +FD10 +1248 +1426 +1020 +1BF8 +3008 +D010 +1110 +10A0 +1040 +5020 +2020 +ENDCHAR +STARTCHAR uni62CF +ENCODING 25295 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +FEFC +1244 +2448 +7C30 +16C8 +2006 +DFE0 +0100 +7FF8 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni62D0 +ENCODING 25296 +BBX 14 15 1 -1 +BITMAP +2000 +23F8 +2208 +2208 +F208 +23F8 +2000 +2000 +37FC +E084 +2084 +2104 +2104 +2204 +6438 +ENDCHAR +STARTCHAR uni62D1 +ENCODING 25297 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +2108 +27FE +F908 +2108 +2108 +2108 +39F8 +E108 +2108 +2108 +2108 +2108 +61F8 +ENDCHAR +STARTCHAR uni62D2 +ENCODING 25298 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2200 +2200 +FA00 +23FC +2204 +2204 +3A04 +E3FC +2200 +2200 +2200 +2200 +63FE +ENDCHAR +STARTCHAR uni62D3 +ENCODING 25299 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2080 +2080 +F880 +2100 +21FC +2104 +3B04 +E504 +2904 +2104 +2104 +2104 +61FC +ENDCHAR +STARTCHAR uni62D4 +ENCODING 25300 +BBX 15 15 1 -1 +BITMAP +2090 +2088 +2088 +2FFE +F080 +2080 +2108 +2108 +3288 +E290 +2450 +2820 +2050 +2188 +6606 +ENDCHAR +STARTCHAR uni62D5 +ENCODING 25301 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +23FE +FA02 +2202 +2080 +2084 +3898 +E0E0 +2080 +2080 +2082 +2082 +607E +ENDCHAR +STARTCHAR uni62D6 +ENCODING 25302 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +2100 +23FE +FA00 +2420 +212C +2134 +39E4 +E724 +212C +2120 +2120 +2102 +60FE +ENDCHAR +STARTCHAR uni62D7 +ENCODING 25303 +BBX 14 15 1 -1 +BITMAP +2220 +2220 +2420 +2420 +F97C +2924 +2524 +2224 +3A24 +E224 +24A4 +24A4 +25C4 +2E44 +6098 +ENDCHAR +STARTCHAR uni62D8 +ENCODING 25304 +BBX 14 15 1 -1 +BITMAP +2200 +2200 +27FC +2404 +F804 +23E4 +2224 +2224 +3A24 +E224 +23E4 +2004 +2008 +2008 +6070 +ENDCHAR +STARTCHAR uni62D9 +ENCODING 25305 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2444 +2444 +F444 +2444 +27FC +2040 +3040 +E442 +2442 +2442 +2442 +2442 +67FE +ENDCHAR +STARTCHAR uni62DA +ENCODING 25306 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1040 +1088 +FD04 +13FE +1002 +1488 +1888 +33FE +D088 +1088 +1108 +1108 +5208 +2408 +ENDCHAR +STARTCHAR uni62DB +ENCODING 25307 +BBX 14 15 1 -1 +BITMAP +2000 +23FC +2084 +2084 +F884 +2104 +2104 +2218 +3800 +E1FC +2104 +2104 +2104 +2104 +61FC +ENDCHAR +STARTCHAR uni62DC +ENCODING 25308 +BBX 15 15 1 -1 +BITMAP +0400 +1BFE +F020 +1020 +11FC +FC20 +1020 +11FC +1C20 +3020 +D3FE +1020 +2020 +2020 +4020 +ENDCHAR +STARTCHAR uni62DD +ENCODING 25309 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2040 +2040 +F7FC +2040 +2040 +27FC +3040 +E040 +2FFE +2040 +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni62DE +ENCODING 25310 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11E0 +1100 +FD00 +1100 +1100 +15FE +1910 +3110 +D110 +1110 +1110 +1110 +57FE +2000 +ENDCHAR +STARTCHAR uni62DF +ENCODING 25311 +BBX 15 16 0 -2 +BITMAP +1008 +1088 +1048 +1228 +FA28 +1208 +1208 +1A08 +3208 +D208 +1210 +1298 +1324 +1224 +5042 +2082 +ENDCHAR +STARTCHAR uni62E0 +ENCODING 25312 +BBX 15 15 1 -1 +BITMAP +2400 +2478 +2748 +2548 +FD48 +2948 +2548 +2548 +3548 +E24A +224A +2286 +2500 +24C0 +683E +ENDCHAR +STARTCHAR uni62E1 +ENCODING 25313 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2400 +F440 +2440 +2440 +2440 +3440 +E448 +2488 +2884 +288C +2172 +6782 +ENDCHAR +STARTCHAR uni62E2 +ENCODING 25314 +BBX 15 16 0 -2 +BITMAP +1090 +1088 +1088 +1080 +FBFE +10A0 +14A0 +18A4 +30A4 +D128 +1128 +1132 +1222 +1262 +549E +2800 +ENDCHAR +STARTCHAR uni62E3 +ENCODING 25315 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FC +1080 +FC80 +13E0 +1120 +1220 +1BFC +3020 +D128 +1124 +1222 +1422 +50A0 +2040 +ENDCHAR +STARTCHAR uni62E4 +ENCODING 25316 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +107C +FC40 +1040 +1440 +1BFE +3040 +D040 +1050 +1048 +1044 +1040 +5040 +2040 +ENDCHAR +STARTCHAR uni62E5 +ENCODING 25317 +BBX 14 16 0 -2 +BITMAP +2000 +27FC +2444 +2444 +FC44 +27FC +2444 +2C44 +3444 +E7FC +2444 +2444 +2444 +2844 +A854 +5008 +ENDCHAR +STARTCHAR uni62E6 +ENCODING 25318 +BBX 15 16 0 -2 +BITMAP +1000 +1108 +1088 +1090 +FC00 +13FE +1000 +1400 +1800 +31FC +D000 +1000 +1000 +1000 +53FE +2000 +ENDCHAR +STARTCHAR uni62E7 +ENCODING 25319 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +FA02 +1404 +1000 +1800 +33FE +D020 +1020 +1020 +1020 +1020 +50A0 +2040 +ENDCHAR +STARTCHAR uni62E8 +ENCODING 25320 +BBX 15 16 0 -2 +BITMAP +1040 +1048 +1244 +1240 +FBFE +1080 +1480 +18FC +3144 +D144 +1148 +1250 +1220 +1450 +5888 +2306 +ENDCHAR +STARTCHAR uni62E9 +ENCODING 25321 +BBX 15 16 0 -2 +BITMAP +2000 +27F8 +2208 +2110 +F0A0 +2040 +21B0 +264E +3040 +E3F8 +2040 +2040 +27FC +2040 +A040 +4040 +ENDCHAR +STARTCHAR uni62EA +ENCODING 25322 +BBX 15 16 0 -2 +BITMAP +1000 +17FE +1090 +1090 +FC90 +13FC +1294 +1694 +1A94 +3294 +D29C +1304 +1204 +1204 +53FC +2204 +ENDCHAR +STARTCHAR uni62EB +ENCODING 25323 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +FDF8 +1108 +1108 +15F8 +1944 +3148 +D130 +1120 +1110 +1148 +5186 +2100 +ENDCHAR +STARTCHAR uni62EC +ENCODING 25324 +BBX 15 15 1 -1 +BITMAP +2018 +23E0 +2040 +2040 +F840 +27FE +2040 +2040 +3840 +E3FC +2204 +2204 +2204 +2204 +63FC +ENDCHAR +STARTCHAR uni62ED +ENCODING 25325 +BBX 15 15 1 -1 +BITMAP +2028 +2028 +2024 +27FE +F820 +2020 +2020 +27A0 +3920 +E110 +2110 +2110 +218A +260A +6004 +ENDCHAR +STARTCHAR uni62EE +ENCODING 25326 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +27FE +F840 +2040 +2040 +23FC +3800 +E3FC +2204 +2204 +2204 +2204 +63FC +ENDCHAR +STARTCHAR uni62EF +ENCODING 25327 +BBX 15 15 1 -1 +BITMAP +2000 +27F8 +2010 +2020 +F040 +2744 +2168 +2168 +3250 +E250 +2448 +2846 +21C0 +2000 +6FFE +ENDCHAR +STARTCHAR uni62F0 +ENCODING 25328 +BBX 15 16 0 -2 +BITMAP +1080 +1088 +109C +1170 +FD10 +1310 +1510 +1110 +19FE +3110 +D110 +1110 +1110 +1110 +517C +2100 +ENDCHAR +STARTCHAR uni62F1 +ENCODING 25329 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2110 +2110 +F7FC +2110 +2110 +2110 +3110 +EFFE +2000 +2110 +2208 +2404 +6802 +ENDCHAR +STARTCHAR uni62F2 +ENCODING 25330 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +7FFC +0440 +FFFE +0820 +3018 +C0E6 +1F00 +0100 +3FF8 +0100 +7FFC +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni62F3 +ENCODING 25331 +BBX 15 15 1 -1 +BITMAP +1110 +0910 +0920 +3FF8 +0240 +7FFC +08A0 +3718 +C106 +1FF0 +0100 +7FFC +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni62F4 +ENCODING 25332 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1088 +FD04 +1202 +11FC +1420 +1820 +3020 +D1FC +1020 +1020 +1020 +53FE +2000 +ENDCHAR +STARTCHAR uni62F5 +ENCODING 25333 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +2FFE +F100 +2100 +227C +2208 +3610 +EA10 +22FE +2210 +2210 +2210 +6230 +ENDCHAR +STARTCHAR uni62F6 +ENCODING 25334 +BBX 15 15 1 -1 +BITMAP +2222 +2444 +2888 +2444 +F222 +2080 +20FC +2104 +3304 +E488 +2048 +2030 +2020 +20C0 +6700 +ENDCHAR +STARTCHAR uni62F7 +ENCODING 25335 +BBX 15 15 1 -1 +BITMAP +2080 +2084 +27F8 +2088 +F090 +2FFE +2040 +20B8 +33C0 +EC80 +21FC +2104 +2004 +2004 +6038 +ENDCHAR +STARTCHAR uni62F8 +ENCODING 25336 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10FC +1108 +FA90 +1060 +1448 +1990 +363E +D042 +1084 +1348 +1030 +1020 +50C0 +2700 +ENDCHAR +STARTCHAR uni62F9 +ENCODING 25337 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +11FC +1044 +FC84 +1084 +1528 +1A10 +3108 +D3DE +114A +114A +114A +1252 +535A +24A4 +ENDCHAR +STARTCHAR uni62FA +ENCODING 25338 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FC20 +11FC +1124 +1524 +1924 +312C +D070 +10A8 +1124 +1622 +5020 +2020 +ENDCHAR +STARTCHAR uni62FB +ENCODING 25339 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +13FE +FC80 +1090 +1090 +1512 +1952 +3154 +D290 +1228 +1428 +1044 +5084 +2102 +ENDCHAR +STARTCHAR uni62FC +ENCODING 25340 +BBX 15 15 1 -1 +BITMAP +2104 +2084 +2088 +23FE +F888 +2088 +2088 +2088 +3BFE +E088 +2088 +2108 +2108 +2208 +6408 +ENDCHAR +STARTCHAR uni62FD +ENCODING 25341 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2444 +F444 +27FC +2444 +2444 +37FC +E040 +2048 +2050 +2022 +20D2 +670C +ENDCHAR +STARTCHAR uni62FE +ENCODING 25342 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +20A0 +2110 +F208 +2DF6 +2000 +2000 +33F8 +E208 +2208 +2208 +2208 +2208 +63F8 +ENDCHAR +STARTCHAR uni62FF +ENCODING 25343 +BBX 15 15 1 -1 +BITMAP +0380 +0C60 +3398 +C006 +1FF0 +1010 +1FF0 +0000 +0FE0 +0100 +3FF8 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni6300 +ENCODING 25344 +BBX 15 16 0 -2 +BITMAP +1004 +101E +11E0 +1100 +FD06 +1178 +1150 +1550 +1952 +3154 +D148 +1148 +1144 +1254 +5262 +2440 +ENDCHAR +STARTCHAR uni6301 +ENCODING 25345 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +2040 +F840 +27FE +2008 +2008 +3FFE +E008 +2208 +2108 +2088 +2008 +6038 +ENDCHAR +STARTCHAR uni6302 +ENCODING 25346 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +23F8 +F840 +2040 +27FC +2040 +3840 +E040 +23F8 +2040 +2040 +2040 +6FFE +ENDCHAR +STARTCHAR uni6303 +ENCODING 25347 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2080 +2090 +F088 +213C +27C4 +2000 +3040 +E040 +27FC +2040 +2040 +2040 +6FFE +ENDCHAR +STARTCHAR uni6304 +ENCODING 25348 +BBX 15 16 0 -2 +BITMAP +1040 +1044 +1244 +1148 +FD50 +1040 +17FE +1090 +1890 +3090 +D090 +1092 +1112 +1112 +520E +2400 +ENDCHAR +STARTCHAR uni6305 +ENCODING 25349 +BBX 15 16 0 -2 +BITMAP +1000 +13F8 +1088 +1090 +FCBC +1104 +1514 +1A48 +3040 +D7FE +1040 +10E0 +1150 +1248 +5446 +2040 +ENDCHAR +STARTCHAR uni6306 +ENCODING 25350 +BBX 15 16 0 -2 +BITMAP +1000 +11F0 +1110 +1110 +FD10 +1110 +124E +1440 +1BFC +3040 +D0E0 +1150 +1248 +1446 +5040 +2040 +ENDCHAR +STARTCHAR uni6307 +ENCODING 25351 +BBX 14 15 1 -1 +BITMAP +2200 +2208 +2230 +23C0 +FA04 +2204 +21FC +2000 +3BF8 +E208 +2208 +23F8 +2208 +2208 +63F8 +ENDCHAR +STARTCHAR uni6308 +ENCODING 25352 +BBX 15 15 1 -1 +BITMAP +0800 +0F7E +F812 +0F12 +7822 +0F42 +F80C +00C0 +0F00 +0100 +3FF8 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni6309 +ENCODING 25353 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +FC84 +2484 +2080 +2FFE +2108 +3908 +E210 +27A0 +2060 +2090 +2308 +6C04 +ENDCHAR +STARTCHAR uni630A +ENCODING 25354 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2078 +2040 +F840 +27FE +2000 +27FE +3840 +E040 +2070 +2048 +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni630B +ENCODING 25355 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1220 +1220 +FE20 +13FC +1204 +1604 +1A04 +3204 +D3FC +1220 +1220 +1220 +53FE +2000 +ENDCHAR +STARTCHAR uni630C +ENCODING 25356 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +21F8 +2208 +F508 +2890 +2060 +20A0 +3318 +EC06 +23F8 +2208 +2208 +2208 +63F8 +ENDCHAR +STARTCHAR uni630D +ENCODING 25357 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +23FE +F888 +2104 +2202 +2088 +3888 +E050 +2050 +2020 +2050 +2088 +6306 +ENDCHAR +STARTCHAR uni630E +ENCODING 25358 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +20A0 +F110 +2208 +2DF6 +2000 +37FC +E080 +2100 +23F8 +2008 +2008 +A050 +4020 +ENDCHAR +STARTCHAR uni630F +ENCODING 25359 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1102 +1102 +FD7A +1102 +1102 +157A +194A +314A +D14A +117A +1102 +1102 +510A +2104 +ENDCHAR +STARTCHAR uni6310 +ENCODING 25360 +BBX 15 15 1 -1 +BITMAP +0800 +087E +FF42 +1142 +2242 +7C42 +0B7E +3000 +CFE0 +0100 +3FF8 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni6311 +ENCODING 25361 +BBX 15 15 1 -1 +BITMAP +2120 +2924 +2928 +2530 +F520 +2120 +2120 +2130 +3728 +F924 +2120 +2220 +2222 +2422 +681E +ENDCHAR +STARTCHAR uni6312 +ENCODING 25362 +BBX 15 16 0 -2 +BITMAP +2002 +2002 +2FC2 +2212 +FA12 +23D2 +2252 +2C52 +3652 +E552 +2892 +2092 +2102 +2202 +A40A +4804 +ENDCHAR +STARTCHAR uni6313 +ENCODING 25363 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +FA02 +1404 +1038 +1BC0 +3040 +D040 +107E +17C0 +1040 +1042 +5042 +203E +ENDCHAR +STARTCHAR uni6314 +ENCODING 25364 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +FC40 +1040 +10A0 +14A2 +19A4 +3298 +D490 +1088 +1084 +10A2 +50C0 +2080 +ENDCHAR +STARTCHAR uni6315 +ENCODING 25365 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1108 +1108 +FD08 +11F8 +1108 +1508 +19F8 +3108 +D108 +111E +17E8 +1008 +5008 +2008 +ENDCHAR +STARTCHAR uni6316 +ENCODING 25366 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC88 +1104 +1202 +14F8 +1810 +3020 +D040 +1080 +1102 +1102 +50FE +2000 +ENDCHAR +STARTCHAR uni6317 +ENCODING 25367 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1024 +11FC +1520 +19FE +3022 +D02A +1054 +1050 +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni6318 +ENCODING 25368 +BBX 15 15 1 -1 +BITMAP +2040 +2148 +2244 +244A +F0D0 +2020 +20C0 +2700 +3040 +E7FC +2044 +2044 +2084 +2104 +6638 +ENDCHAR +STARTCHAR uni6319 +ENCODING 25369 +BBX 15 15 1 -1 +BITMAP +2208 +1110 +0020 +7FFC +0420 +1818 +E0C6 +0F00 +0100 +3FF8 +0100 +FFFE +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni631A +ENCODING 25370 +BBX 14 16 0 -2 +BITMAP +1080 +FBF0 +1090 +1990 +F094 +1154 +520C +24E4 +1F00 +0100 +3FF8 +0100 +7FFC +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni631B +ENCODING 25371 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0440 +1450 +2448 +4444 +00F0 +3F00 +0100 +3FF8 +0100 +7FFC +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni631C +ENCODING 25372 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1090 +1090 +FC90 +1092 +1492 +1294 +1A94 +3298 +D090 +1090 +1090 +1090 +57FE +2000 +ENDCHAR +STARTCHAR uni631D +ENCODING 25373 +BBX 15 16 0 -2 +BITMAP +2408 +2208 +2208 +2008 +F8FE +2E08 +2248 +2A28 +3228 +E208 +2208 +2228 +2210 +2500 +A8FE +4000 +ENDCHAR +STARTCHAR uni631E +ENCODING 25374 +BBX 15 16 0 -2 +BITMAP +1010 +1210 +1110 +1110 +FCFE +1010 +1310 +1528 +1924 +3144 +D142 +1182 +1100 +1280 +547E +2000 +ENDCHAR +STARTCHAR uni631F +ENCODING 25375 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +27FC +F040 +2444 +2248 +2040 +3FFE +E040 +20A0 +20A0 +2110 +2208 +6C06 +ENDCHAR +STARTCHAR uni6320 +ENCODING 25376 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10BC +13C0 +FC50 +1024 +10D4 +130C +1800 +33FE +D090 +1090 +1112 +1112 +520E +2400 +ENDCHAR +STARTCHAR uni6321 +ENCODING 25377 +BBX 14 16 0 -2 +BITMAP +1040 +1244 +1144 +1144 +FD48 +1040 +17FC +1004 +1804 +3004 +D3FC +1004 +1004 +1004 +57FC +2004 +ENDCHAR +STARTCHAR uni6322 +ENCODING 25378 +BBX 15 16 0 -2 +BITMAP +2010 +2078 +23C0 +2040 +F840 +27FE +20A0 +2910 +3208 +E516 +2110 +2110 +2110 +2210 +A210 +4410 +ENDCHAR +STARTCHAR uni6323 +ENCODING 25379 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +11F0 +1210 +F820 +13FC +1044 +1844 +37FE +D044 +1044 +13FC +1044 +1040 +5140 +2080 +ENDCHAR +STARTCHAR uni6324 +ENCODING 25380 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +17FE +1208 +FD10 +10A0 +1440 +19B0 +360E +D110 +1110 +1110 +1110 +1210 +5210 +2410 +ENDCHAR +STARTCHAR uni6325 +ENCODING 25381 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1444 +FC40 +13FC +1080 +14A0 +1920 +31FC +D020 +1020 +17FE +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni6326 +ENCODING 25382 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1004 +1004 +FDFC +1004 +1004 +17FC +1808 +3008 +D7FE +1108 +1088 +1088 +5028 +2010 +ENDCHAR +STARTCHAR uni6327 +ENCODING 25383 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +2082 +2082 +F986 +228A +2492 +2082 +3986 +E28A +2492 +28A2 +2082 +2082 +638E +ENDCHAR +STARTCHAR uni6328 +ENCODING 25384 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2090 +2108 +F93C +27C4 +2080 +21F8 +3A40 +E040 +27FE +2040 +20A0 +2118 +6606 +ENDCHAR +STARTCHAR uni6329 +ENCODING 25385 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +1088 +1108 +FA04 +15FA +1108 +1908 +3108 +D1F8 +1090 +1090 +1090 +1112 +5212 +240E +ENDCHAR +STARTCHAR uni632A +ENCODING 25386 +BBX 15 16 0 -2 +BITMAP +1000 +17DE +1252 +1252 +FA54 +17D4 +1258 +1A54 +3252 +DFD2 +1252 +125A +1254 +1450 +5550 +2890 +ENDCHAR +STARTCHAR uni632B +ENCODING 25387 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2248 +FA48 +2248 +2248 +2554 +28E4 +3042 +E040 +27FC +2040 +2040 +2040 +6FFE +ENDCHAR +STARTCHAR uni632C +ENCODING 25388 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FC20 +13FE +1202 +1404 +19F8 +3010 +D020 +13FE +1020 +1020 +50A0 +2040 +ENDCHAR +STARTCHAR uni632D +ENCODING 25389 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1020 +FDFC +1124 +1124 +15FC +1924 +3124 +D1FC +1120 +10A0 +1040 +50B0 +230E +ENDCHAR +STARTCHAR uni632E +ENCODING 25390 +BBX 15 16 0 -2 +BITMAP +1108 +1088 +1090 +13FC +FC24 +1024 +13FC +1620 +1A20 +33FE +D062 +10A2 +112A +1224 +5420 +2020 +ENDCHAR +STARTCHAR uni632F +ENCODING 25391 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2400 +2400 +FDFC +2400 +2400 +27FE +3C90 +E492 +2494 +2888 +2888 +30E4 +6382 +ENDCHAR +STARTCHAR uni6330 +ENCODING 25392 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FD04 +11FC +1000 +1400 +1BFE +3020 +D020 +11FC +1020 +1020 +53FE +2000 +ENDCHAR +STARTCHAR uni6331 +ENCODING 25393 +BBX 15 16 0 -2 +BITMAP +1010 +1210 +1110 +1110 +FC54 +1252 +1252 +1090 +1810 +3114 +D604 +1208 +1208 +1210 +5220 +20C0 +ENDCHAR +STARTCHAR uni6332 +ENCODING 25394 +BBX 15 15 1 -1 +BITMAP +2040 +1948 +8244 +6442 +00C8 +0830 +33C0 +C000 +0FC0 +0100 +3FFC +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni6333 +ENCODING 25395 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1000 +1092 +FD24 +1248 +1124 +1492 +1800 +31FE +D020 +1020 +1020 +1020 +53FE +2000 +ENDCHAR +STARTCHAR uni6334 +ENCODING 25396 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +11FC +1200 +FDF8 +1108 +1148 +1528 +1BFE +3108 +D248 +1228 +13FC +1008 +5050 +2020 +ENDCHAR +STARTCHAR uni6335 +ENCODING 25397 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +23F8 +F040 +2040 +2FFE +2000 +3110 +E110 +2FFE +2110 +2210 +2210 +6410 +ENDCHAR +STARTCHAR uni6336 +ENCODING 25398 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FDFC +1100 +1100 +15FE +1902 +317A +D14A +114A +127A +1202 +5414 +2008 +ENDCHAR +STARTCHAR uni6337 +ENCODING 25399 +BBX 15 16 0 -2 +BITMAP +2100 +211E +2112 +27D2 +F914 +2114 +27D8 +2914 +3112 +E7D2 +2112 +211A +2114 +2210 +A210 +4410 +ENDCHAR +STARTCHAR uni6338 +ENCODING 25400 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FDFC +1104 +1504 +19FC +3104 +D104 +11FC +1050 +1050 +1092 +5112 +220E +ENDCHAR +STARTCHAR uni6339 +ENCODING 25401 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +2208 +FBF8 +2000 +27FC +2444 +3C44 +E444 +27FC +2400 +2400 +2402 +63FE +ENDCHAR +STARTCHAR uni633A +ENCODING 25402 +BBX 15 15 1 -1 +BITMAP +2004 +2018 +2F70 +2210 +F410 +2410 +2EFE +2210 +3A10 +EA10 +2410 +247C +2A00 +2980 +707E +ENDCHAR +STARTCHAR uni633B +ENCODING 25403 +BBX 15 15 1 -1 +BITMAP +200C +2070 +2E10 +2410 +F410 +2890 +2E9C +2290 +3A90 +EA90 +2490 +25FE +2600 +2980 +707E +ENDCHAR +STARTCHAR uni633C +ENCODING 25404 +BBX 15 15 1 -1 +BITMAP +2038 +23C8 +2244 +2224 +FC22 +2442 +2040 +23FE +3888 +E088 +2108 +23D0 +2070 +2088 +6304 +ENDCHAR +STARTCHAR uni633D +ENCODING 25405 +BBX 15 15 1 -1 +BITMAP +2100 +21F8 +2210 +2C20 +F7FC +2444 +2444 +2484 +37FC +E120 +2120 +2220 +2222 +2422 +781E +ENDCHAR +STARTCHAR uni633E +ENCODING 25406 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2040 +F248 +2248 +2248 +2554 +3554 +E8A2 +20A0 +2110 +2110 +2208 +6C06 +ENDCHAR +STARTCHAR uni633F +ENCODING 25407 +BBX 15 15 1 -1 +BITMAP +201C +27E0 +2040 +2FFE +F040 +27FC +2444 +27FC +3444 +E444 +27FC +2040 +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni6340 +ENCODING 25408 +BBX 15 16 0 -2 +BITMAP +1100 +11F8 +1308 +1490 +FC60 +1198 +1646 +1040 +1BF8 +3040 +D3F8 +1040 +17FC +1040 +5040 +2040 +ENDCHAR +STARTCHAR uni6341 +ENCODING 25409 +BBX 15 15 1 -1 +BITMAP +2040 +2240 +2240 +27FC +F440 +2840 +2040 +2FFE +3040 +E000 +23F8 +2208 +2208 +2208 +63F8 +ENDCHAR +STARTCHAR uni6342 +ENCODING 25410 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1040 +1040 +FDFC +1084 +1084 +17FE +1800 +3000 +D1FC +1104 +1104 +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni6343 +ENCODING 25411 +BBX 15 15 1 -1 +BITMAP +2000 +27F8 +2088 +2088 +FFFE +2108 +2108 +27F8 +3100 +E3FC +2604 +2A04 +2204 +2204 +63FC +ENDCHAR +STARTCHAR uni6344 +ENCODING 25412 +BBX 15 15 1 -1 +BITMAP +2048 +2048 +2044 +2FFE +F040 +2444 +2248 +2250 +3040 +E060 +2150 +2248 +2C44 +2042 +61C0 +ENDCHAR +STARTCHAR uni6345 +ENCODING 25413 +BBX 14 16 0 -2 +BITMAP +2000 +27F8 +2010 +21A0 +F840 +27FC +2444 +2C44 +37FC +E444 +2444 +27FC +2444 +2444 +A454 +4408 +ENDCHAR +STARTCHAR uni6346 +ENCODING 25414 +BBX 14 16 0 -2 +BITMAP +2000 +27FC +2444 +2444 +FC44 +27FC +2444 +2CC4 +34E4 +E554 +2644 +2444 +2444 +2404 +A7FC +4404 +ENDCHAR +STARTCHAR uni6347 +ENCODING 25415 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FC20 +1020 +13FE +1450 +1850 +3154 +D152 +1152 +1252 +1090 +5090 +2130 +ENDCHAR +STARTCHAR uni6348 +ENCODING 25416 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1088 +FD04 +12FA +1020 +1420 +1BFE +3020 +D128 +1124 +1222 +1422 +50A0 +2040 +ENDCHAR +STARTCHAR uni6349 +ENCODING 25417 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +2204 +F204 +23FC +2040 +2040 +3240 +E27C +2240 +2640 +2540 +28C0 +703E +ENDCHAR +STARTCHAR uni634A +ENCODING 25418 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13C0 +1004 +FA44 +1128 +1000 +1BF8 +3010 +D020 +17FE +1020 +1020 +1020 +50A0 +2040 +ENDCHAR +STARTCHAR uni634B +ENCODING 25419 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13C0 +1044 +FA24 +1128 +1500 +1810 +33FE +D010 +1110 +1090 +1090 +1010 +5050 +2020 +ENDCHAR +STARTCHAR uni634C +ENCODING 25420 +BBX 14 15 1 -1 +BITMAP +2004 +2F84 +28A4 +28A4 +F8A4 +2FA4 +2424 +2424 +37A4 +E4A4 +2484 +2884 +2884 +3084 +631C +ENDCHAR +STARTCHAR uni634D +ENCODING 25421 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +F208 +23F8 +2000 +27FC +3040 +E040 +2FFE +2040 +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni634E +ENCODING 25422 +BBX 14 15 1 -1 +BITMAP +2040 +2248 +2244 +2444 +F040 +23FC +2204 +2204 +33FC +E204 +2204 +23FC +2204 +2204 +621C +ENDCHAR +STARTCHAR uni634F +ENCODING 25423 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +2208 +FBF8 +2208 +2208 +23F8 +3800 +E040 +27FC +2040 +2040 +2040 +6FFE +ENDCHAR +STARTCHAR uni6350 +ENCODING 25424 +BBX 14 15 1 -1 +BITMAP +2000 +23FC +2204 +2204 +FBFC +2000 +23FC +2204 +3BFC +E204 +2204 +23FC +2204 +2204 +621C +ENDCHAR +STARTCHAR uni6351 +ENCODING 25425 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +1284 +FEFC +1284 +1284 +16FC +1A00 +33E0 +D020 +13FE +1020 +1050 +5088 +2306 +ENDCHAR +STARTCHAR uni6352 +ENCODING 25426 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FC20 +11FC +1124 +1524 +19FC +3020 +D070 +10A8 +1124 +1222 +5020 +2020 +ENDCHAR +STARTCHAR uni6353 +ENCODING 25427 +BBX 15 16 0 -2 +BITMAP +2000 +27DE +2092 +2492 +F494 +2494 +27D8 +2094 +3192 +E192 +2292 +229A +2494 +2890 +A290 +4110 +ENDCHAR +STARTCHAR uni6354 +ENCODING 25428 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +11FC +1104 +FA08 +15FE +1122 +1922 +31FE +D122 +1122 +11FE +1122 +1222 +522A +2404 +ENDCHAR +STARTCHAR uni6355 +ENCODING 25429 +BBX 15 15 1 -1 +BITMAP +2048 +2044 +2FFE +2040 +F040 +27FC +2444 +2444 +37FC +E444 +2444 +27FC +2444 +2444 +644C +ENDCHAR +STARTCHAR uni6356 +ENCODING 25430 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC04 +11F8 +1000 +1400 +1BFE +3090 +D090 +1090 +1112 +1112 +520E +2400 +ENDCHAR +STARTCHAR uni6357 +ENCODING 25431 +BBX 15 15 1 -1 +BITMAP +2040 +2240 +227C +2240 +F240 +2FFE +2040 +2240 +3444 +E844 +21C8 +2010 +2020 +20C0 +6700 +ENDCHAR +STARTCHAR uni6358 +ENCODING 25432 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1088 +1104 +FBFE +1002 +1488 +1944 +3242 +D0F8 +1188 +1250 +1020 +1050 +5188 +2606 +ENDCHAR +STARTCHAR uni6359 +ENCODING 25433 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2FFC +2080 +F7F8 +2488 +2488 +27F8 +3488 +E488 +27F8 +2080 +3FFE +2080 +6080 +ENDCHAR +STARTCHAR uni635A +ENCODING 25434 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +FDFC +1124 +1124 +15FC +1820 +3020 +D1FC +1020 +1020 +1020 +53FE +2000 +ENDCHAR +STARTCHAR uni635B +ENCODING 25435 +BBX 14 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +FD08 +1108 +11F8 +1400 +1800 +33FC +D204 +1204 +1204 +1204 +53FC +2204 +ENDCHAR +STARTCHAR uni635C +ENCODING 25436 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2444 +F7FC +2444 +2444 +27FC +3040 +EFFC +2208 +2110 +20E0 +2318 +6C06 +ENDCHAR +STARTCHAR uni635D +ENCODING 25437 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +1010 +FDFC +1104 +1104 +1504 +19FC +3050 +D050 +1090 +1092 +1112 +520E +2400 +ENDCHAR +STARTCHAR uni635E +ENCODING 25438 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC00 +13FE +1202 +1444 +1840 +33FC +D044 +1084 +1084 +1104 +5228 +2410 +ENDCHAR +STARTCHAR uni635F +ENCODING 25439 +BBX 14 16 0 -2 +BITMAP +1000 +10F8 +1088 +1088 +FCF8 +1000 +11FC +1504 +1924 +3124 +D124 +1124 +1050 +1048 +5084 +2304 +ENDCHAR +STARTCHAR uni6360 +ENCODING 25440 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11E0 +1100 +FD00 +11FE +1110 +1510 +1910 +3110 +D7FE +1000 +1090 +1108 +5204 +2402 +ENDCHAR +STARTCHAR uni6361 +ENCODING 25441 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +10A0 +FD10 +1208 +15F6 +1000 +1888 +3048 +D248 +1150 +1110 +1020 +57FE +2000 +ENDCHAR +STARTCHAR uni6362 +ENCODING 25442 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10F8 +1108 +FA10 +15FC +1124 +1924 +3124 +D124 +17FE +1050 +1050 +1088 +5104 +2602 +ENDCHAR +STARTCHAR uni6363 +ENCODING 25443 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +23F8 +2208 +FA88 +2248 +2218 +2A00 +33FE +E082 +2492 +2492 +27F2 +2002 +A014 +4008 +ENDCHAR +STARTCHAR uni6364 +ENCODING 25444 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2204 +2204 +FBFC +2200 +2218 +2AE0 +3238 +E2E0 +223C +23E0 +2222 +2422 +A41E +4800 +ENDCHAR +STARTCHAR uni6365 +ENCODING 25445 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2404 +FC04 +2200 +23BC +22A4 +3CA4 +E4A4 +2AAC +2120 +2122 +2222 +6C1E +ENDCHAR +STARTCHAR uni6366 +ENCODING 25446 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1088 +FD04 +1202 +10F8 +1420 +1820 +31FC +D020 +1124 +10A4 +10A8 +53FE +2000 +ENDCHAR +STARTCHAR uni6367 +ENCODING 25447 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2040 +F3F8 +20A0 +2FFE +2110 +3248 +EDF6 +2040 +2040 +27FC +2040 +6040 +ENDCHAR +STARTCHAR uni6368 +ENCODING 25448 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2318 +2C46 +F040 +23F8 +2040 +2040 +3FFE +E000 +23F8 +2208 +2208 +2208 +63F8 +ENDCHAR +STARTCHAR uni6369 +ENCODING 25449 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2000 +27FC +F404 +2404 +27FC +2440 +3440 +E7FE +2440 +2860 +2890 +3108 +6606 +ENDCHAR +STARTCHAR uni636A +ENCODING 25450 +BBX 15 16 0 -2 +BITMAP +101C +13E0 +1220 +13FE +FE20 +1292 +130A +1206 +19FC +3104 +D104 +11FC +1104 +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni636B +ENCODING 25451 +BBX 14 15 1 -1 +BITMAP +2000 +2F7C +2944 +2F7C +F944 +2F7C +2804 +2804 +3804 +E804 +2804 +2804 +2804 +2804 +681C +ENDCHAR +STARTCHAR uni636C +ENCODING 25452 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2400 +F488 +2488 +25FE +2508 +3748 +E528 +2528 +2508 +2508 +2908 +6138 +ENDCHAR +STARTCHAR uni636D +ENCODING 25453 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +13FC +1224 +FA24 +13FC +1624 +1A44 +33FC +D090 +1110 +17FE +1010 +1010 +5010 +2010 +ENDCHAR +STARTCHAR uni636E +ENCODING 25454 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2404 +2404 +FFFC +2420 +2420 +27FE +3C20 +E420 +25FC +2904 +2904 +2104 +61FC +ENDCHAR +STARTCHAR uni636F +ENCODING 25455 +BBX 14 16 0 -2 +BITMAP +2004 +2004 +2FC4 +2214 +FA14 +2494 +27D4 +2914 +3114 +E7D4 +2114 +2114 +21C4 +2E04 +A414 +4008 +ENDCHAR +STARTCHAR uni6370 +ENCODING 25456 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +FDFC +1124 +1124 +15FC +1820 +33FE +D070 +10A8 +1124 +1222 +5020 +2020 +ENDCHAR +STARTCHAR uni6371 +ENCODING 25457 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1210 +1210 +FEFE +1210 +1210 +17FE +1A00 +3210 +D210 +12FE +1210 +1410 +55FE +2800 +ENDCHAR +STARTCHAR uni6372 +ENCODING 25458 +BBX 15 15 1 -1 +BITMAP +2050 +2150 +2248 +27FC +F0A0 +2110 +2FFE +2208 +35F4 +E912 +2110 +2170 +2104 +2104 +60FC +ENDCHAR +STARTCHAR uni6373 +ENCODING 25459 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11E0 +1100 +FDFE +1110 +1510 +1910 +37FE +D000 +1020 +1222 +1222 +1222 +53FE +2002 +ENDCHAR +STARTCHAR uni6374 +ENCODING 25460 +BBX 15 16 0 -2 +BITMAP +2090 +2090 +2108 +2148 +FA44 +2492 +2108 +2BFC +3044 +E020 +20A4 +2282 +228A +228A +A478 +4000 +ENDCHAR +STARTCHAR uni6375 +ENCODING 25461 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1090 +13FC +FE94 +1294 +1294 +17FC +1A94 +3294 +D294 +17FE +1000 +1090 +5108 +2204 +ENDCHAR +STARTCHAR uni6376 +ENCODING 25462 +BBX 15 15 1 -1 +BITMAP +2038 +27C0 +2040 +2040 +F7FC +2248 +2248 +2FFE +3248 +E248 +2248 +27FC +2040 +2040 +6FFE +ENDCHAR +STARTCHAR uni6377 +ENCODING 25463 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2040 +F7FC +2044 +2FFE +2044 +37FC +E040 +2240 +227C +2540 +28C0 +703E +ENDCHAR +STARTCHAR uni6378 +ENCODING 25464 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1024 +FC24 +13FE +1024 +1424 +19FC +3222 +D174 +10A8 +1124 +1222 +50A0 +2040 +ENDCHAR +STARTCHAR uni6379 +ENCODING 25465 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1050 +FCA8 +1124 +12FA +1420 +18A8 +3088 +D3FE +1088 +1088 +1088 +5108 +2208 +ENDCHAR +STARTCHAR uni637A +ENCODING 25466 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +F110 +2208 +2C06 +21F0 +2000 +3000 +EFFE +2040 +2248 +2444 +2842 +61C0 +ENDCHAR +STARTCHAR uni637B +ENCODING 25467 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2318 +2C06 +F1F0 +2000 +27FC +2008 +3008 +E090 +2040 +2528 +2504 +288A +6878 +ENDCHAR +STARTCHAR uni637C +ENCODING 25468 +BBX 15 15 1 -1 +BITMAP +2018 +21E0 +2020 +23FE +F8A8 +2124 +2222 +2040 +3840 +E7FE +2088 +2110 +23E0 +2058 +6784 +ENDCHAR +STARTCHAR uni637D +ENCODING 25469 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +FC88 +1088 +1554 +1A22 +3000 +D020 +13FE +1020 +1020 +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni637E +ENCODING 25470 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC04 +11F8 +1108 +1508 +19F8 +3100 +D100 +11FC +1104 +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni637F +ENCODING 25471 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1024 +13FE +1424 +19FC +3040 +D3FE +1084 +11C8 +1030 +50CC +2302 +ENDCHAR +STARTCHAR uni6380 +ENCODING 25472 +BBX 15 15 1 -1 +BITMAP +2120 +2220 +2420 +243E +F7E2 +2554 +2510 +2510 +3510 +E528 +2528 +2528 +2544 +2944 +6982 +ENDCHAR +STARTCHAR uni6381 +ENCODING 25473 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1080 +10F8 +FC80 +10F8 +1080 +17FE +1940 +3124 +D128 +1110 +1108 +1144 +5182 +2100 +ENDCHAR +STARTCHAR uni6382 +ENCODING 25474 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1200 +FE20 +1220 +123E +1220 +1A20 +32FC +D284 +1284 +1284 +1484 +54FC +2884 +ENDCHAR +STARTCHAR uni6383 +ENCODING 25475 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2008 +23F8 +F008 +23F8 +2000 +2FFE +3842 +E842 +27FC +2444 +2444 +244C +6040 +ENDCHAR +STARTCHAR uni6384 +ENCODING 25476 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2110 +2208 +F406 +21F0 +2000 +27FC +3524 +E524 +27FC +2524 +2524 +2524 +652C +ENDCHAR +STARTCHAR uni6385 +ENCODING 25477 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1020 +13FE +1400 +19FC +3104 +D1FC +1104 +11FC +1104 +5114 +2108 +ENDCHAR +STARTCHAR uni6386 +ENCODING 25478 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +128A +FE52 +13FE +1222 +1622 +1AAA +32AA +D2AA +12FA +1202 +1202 +520A +2204 +ENDCHAR +STARTCHAR uni6387 +ENCODING 25479 +BBX 15 16 0 -2 +BITMAP +2000 +27BC +2084 +2294 +F908 +2294 +24A4 +2840 +3000 +E7BC +20A4 +22A4 +2128 +2290 +A4A8 +4846 +ENDCHAR +STARTCHAR uni6388 +ENCODING 25480 +BBX 15 15 1 -1 +BITMAP +203C +27C8 +2288 +2150 +F7FC +2404 +2404 +23F8 +3108 +E110 +20A0 +2040 +20A0 +2318 +6C06 +ENDCHAR +STARTCHAR uni6389 +ENCODING 25481 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +207C +2040 +FBF8 +2208 +23F8 +2208 +3A08 +E3F8 +2040 +2FFE +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni638A +ENCODING 25482 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +1000 +FD08 +1090 +1000 +13FE +1800 +3000 +D1FC +1104 +1104 +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni638B +ENCODING 25483 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1200 +FE1C +12F0 +1290 +1690 +1AFE +3290 +D290 +1290 +12AA +12CA +54A6 +2812 +ENDCHAR +STARTCHAR uni638C +ENCODING 25484 +BBX 15 15 1 -1 +BITMAP +2108 +1110 +7FFC +4004 +5FF4 +1010 +1FF0 +0000 +1FF0 +0100 +3FF8 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni638D +ENCODING 25485 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FDFC +1104 +1104 +15FC +1800 +3112 +D1D4 +1118 +1110 +1152 +5192 +210E +ENDCHAR +STARTCHAR uni638E +ENCODING 25486 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +20A0 +F110 +2208 +2000 +2FFE +3008 +E3C8 +2248 +2248 +23C8 +2008 +6038 +ENDCHAR +STARTCHAR uni638F +ENCODING 25487 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +27FE +2802 +F202 +23F2 +2482 +2082 +3FFA +E082 +2492 +2492 +27F4 +2004 +6018 +ENDCHAR +STARTCHAR uni6390 +ENCODING 25488 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +107C +1084 +FD08 +1200 +1020 +15CE +1902 +3102 +D1CE +1102 +1102 +1102 +51FE +2102 +ENDCHAR +STARTCHAR uni6391 +ENCODING 25489 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC88 +10F8 +1088 +1488 +18F8 +3088 +D088 +13FE +1000 +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni6392 +ENCODING 25490 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +279E +2090 +F090 +2090 +279E +2090 +3090 +E390 +2C9E +2090 +2110 +2210 +6410 +ENDCHAR +STARTCHAR uni6393 +ENCODING 25491 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +21DC +2114 +F914 +2114 +27D4 +2814 +3114 +E114 +2588 +2548 +2948 +2114 +A514 +4222 +ENDCHAR +STARTCHAR uni6394 +ENCODING 25492 +BBX 15 15 1 -1 +BITMAP +7EFC +4844 +7C44 +4428 +7C10 +4828 +7EC6 +0000 +1FE0 +0100 +3FF8 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni6395 +ENCODING 25493 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1020 +FC20 +13FE +1088 +1544 +1A42 +30F8 +D188 +1250 +1020 +1050 +5188 +2606 +ENDCHAR +STARTCHAR uni6396 +ENCODING 25494 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +2FFE +F120 +2120 +233C +2264 +3654 +EAC8 +2228 +2210 +2228 +2244 +6282 +ENDCHAR +STARTCHAR uni6397 +ENCODING 25495 +BBX 15 16 0 -2 +BITMAP +1000 +17FE +1090 +1090 +FC90 +139C +1204 +1604 +1A04 +339C +D090 +1090 +1090 +1090 +57FE +2000 +ENDCHAR +STARTCHAR uni6398 +ENCODING 25496 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2404 +2404 +F7FC +2420 +2524 +2524 +35FC +E420 +2420 +2924 +2924 +3124 +61FC +ENDCHAR +STARTCHAR uni6399 +ENCODING 25497 +BBX 15 15 1 -1 +BITMAP +2038 +23C8 +2244 +2424 +F7FC +2044 +2044 +2FFE +3044 +E044 +27FC +2040 +2040 +2040 +61C0 +ENDCHAR +STARTCHAR uni639A +ENCODING 25498 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1020 +FBFE +1222 +1222 +1B32 +32AA +D2AA +1376 +1266 +1222 +1222 +522A +2204 +ENDCHAR +STARTCHAR uni639B +ENCODING 25499 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +27C8 +2108 +F108 +2FE8 +200C +210A +310A +E7C8 +2108 +2108 +2108 +21C8 +6E08 +ENDCHAR +STARTCHAR uni639C +ENCODING 25500 +BBX 15 16 0 -2 +BITMAP +1000 +1040 +139C +1204 +FE04 +139C +1204 +1604 +1BFC +3090 +D090 +1090 +1090 +1112 +5212 +240E +ENDCHAR +STARTCHAR uni639D +ENCODING 25501 +BBX 15 16 0 -2 +BITMAP +1014 +1012 +1010 +17FE +F810 +1010 +17D2 +1A52 +3252 +D254 +13D4 +1008 +10EA +171A +5226 +2042 +ENDCHAR +STARTCHAR uni639E +ENCODING 25502 +BBX 15 16 0 -2 +BITMAP +1020 +1122 +1122 +1224 +FC50 +1088 +1304 +1422 +1820 +3124 +D124 +1228 +1050 +1088 +5104 +2602 +ENDCHAR +STARTCHAR uni639F +ENCODING 25503 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2404 +F404 +23F8 +2040 +2040 +3A40 +E27C +2240 +2240 +2240 +25C0 +687E +ENDCHAR +STARTCHAR uni63A0 +ENCODING 25504 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2000 +F3F8 +2208 +2208 +2208 +33F8 +E040 +2248 +2248 +2444 +2842 +61C0 +ENDCHAR +STARTCHAR uni63A1 +ENCODING 25505 +BBX 15 15 1 -1 +BITMAP +2000 +2038 +27C0 +2084 +F444 +2248 +2200 +2040 +3040 +EFFE +2150 +2150 +2248 +2C46 +6040 +ENDCHAR +STARTCHAR uni63A2 +ENCODING 25506 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2404 +24A4 +F0A0 +2122 +261E +2040 +3040 +EFFE +2150 +2150 +2248 +2C46 +6040 +ENDCHAR +STARTCHAR uni63A3 +ENCODING 25507 +BBX 15 15 1 -1 +BITMAP +2804 +7E24 +4824 +FF24 +0824 +7F04 +4904 +40DC +1F00 +0100 +3FF8 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni63A4 +ENCODING 25508 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +1252 +FA52 +13DE +1252 +1A52 +3252 +D3DE +1252 +1252 +1252 +1252 +5552 +28A6 +ENDCHAR +STARTCHAR uni63A5 +ENCODING 25509 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2208 +F110 +2FFE +2040 +2040 +3FFE +E108 +2208 +2790 +2060 +2198 +6E04 +ENDCHAR +STARTCHAR uni63A6 +ENCODING 25510 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +11FC +FD04 +11FC +1080 +1480 +19FE +324A +D44A +1092 +1122 +1242 +5094 +2108 +ENDCHAR +STARTCHAR uni63A7 +ENCODING 25511 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2404 +FD24 +2120 +2222 +241C +3800 +E000 +27FC +2040 +2040 +2040 +6FFE +ENDCHAR +STARTCHAR uni63A8 +ENCODING 25512 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2120 +23FE +F620 +2A20 +23FC +2220 +3220 +E220 +23FC +2220 +2220 +2220 +63FE +ENDCHAR +STARTCHAR uni63A9 +ENCODING 25513 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2110 +F248 +27FC +2A4A +2248 +33F8 +E248 +2248 +23F8 +2042 +2042 +603E +ENDCHAR +STARTCHAR uni63AA +ENCODING 25514 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27FC +2110 +F110 +2110 +2FFE +2000 +33F8 +E208 +2208 +23F8 +2208 +2208 +63F8 +ENDCHAR +STARTCHAR uni63AB +ENCODING 25515 +BBX 15 15 1 -1 +BITMAP +2000 +2FFC +2480 +2480 +F7FC +24A4 +24A4 +24A4 +37A8 +E4A8 +2490 +2490 +27A8 +2CA8 +60C6 +ENDCHAR +STARTCHAR uni63AC +ENCODING 25516 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +23FE +2402 +F882 +2492 +2292 +22A2 +37FA +E1C2 +22A2 +2492 +2884 +2084 +6038 +ENDCHAR +STARTCHAR uni63AD +ENCODING 25517 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2040 +2040 +FBFE +20A0 +2110 +2A08 +3446 +E040 +2048 +2264 +2252 +2452 +A140 +4080 +ENDCHAR +STARTCHAR uni63AE +ENCODING 25518 +BBX 14 16 0 -2 +BITMAP +1040 +1020 +13FC +1204 +FE04 +13FC +1200 +12FC +1A84 +32FC +D284 +12FC +1484 +1484 +5894 +2088 +ENDCHAR +STARTCHAR uni63AF +ENCODING 25519 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +113C +1120 +F920 +17FE +1000 +1BFC +3204 +D3FC +1204 +13FC +1204 +1204 +5214 +2208 +ENDCHAR +STARTCHAR uni63B0 +ENCODING 25520 +BBX 15 16 0 -2 +BITMAP +1000 +3A86 +E2B8 +2488 +2448 +F85E +2028 +2788 +2288 +FABE +2288 +2488 +2488 +2A88 +5128 +8010 +ENDCHAR +STARTCHAR uni63B1 +ENCODING 25521 +BBX 15 16 0 -2 +BITMAP +00F0 +3F00 +0100 +3FF8 +0100 +7FFC +0100 +0504 +7A78 +1010 +7CFC +1010 +FEFE +1010 +5050 +2020 +ENDCHAR +STARTCHAR uni63B2 +ENCODING 25522 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +F208 +2208 +23F8 +2100 +33FE +E602 +3A62 +2382 +2212 +21F2 +600C +ENDCHAR +STARTCHAR uni63B3 +ENCODING 25523 +BBX 15 16 0 -2 +BITMAP +2040 +207C +2040 +23FE +FA42 +2278 +23C4 +2A3C +3240 +E240 +23FC +2244 +2484 +2484 +A914 +4208 +ENDCHAR +STARTCHAR uni63B4 +ENCODING 25524 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2404 +27F4 +FC44 +2444 +2444 +25F4 +3C44 +E464 +2454 +2444 +27F4 +2404 +67FC +ENDCHAR +STARTCHAR uni63B5 +ENCODING 25525 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2110 +2208 +FDF6 +2000 +2000 +27BC +34A4 +E4A4 +24A4 +24A4 +27AC +2020 +6020 +ENDCHAR +STARTCHAR uni63B6 +ENCODING 25526 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1220 +FEFC +1224 +1224 +17FE +1A24 +3224 +D2FC +1220 +1250 +1450 +5488 +2906 +ENDCHAR +STARTCHAR uni63B7 +ENCODING 25527 +BBX 15 16 0 -2 +BITMAP +2440 +225E +2292 +2012 +FFD4 +2114 +2118 +2914 +37F2 +E112 +2112 +211A +2294 +2250 +A450 +4810 +ENDCHAR +STARTCHAR uni63B8 +ENCODING 25528 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +1050 +11FC +FD24 +1124 +11FC +1524 +1924 +31FC +D020 +1020 +13FE +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni63B9 +ENCODING 25529 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1008 +1010 +F820 +13FE +1420 +18A0 +3040 +D1FC +1154 +1154 +1154 +1154 +57FE +2000 +ENDCHAR +STARTCHAR uni63BA +ENCODING 25530 +BBX 15 16 0 -2 +BITMAP +1080 +1090 +1108 +13FC +FC40 +17FE +1110 +1248 +1C86 +3310 +D020 +10C4 +1308 +1030 +50C0 +2700 +ENDCHAR +STARTCHAR uni63BB +ENCODING 25531 +BBX 15 15 1 -1 +BITMAP +2000 +2FF8 +2208 +2110 +F0E0 +2318 +2C46 +23F8 +3248 +E248 +23F8 +2048 +204C +20F2 +6F02 +ENDCHAR +STARTCHAR uni63BC +ENCODING 25532 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +1124 +13FE +FD24 +1124 +11FC +1400 +19FC +3104 +D124 +1124 +1124 +1058 +5084 +2302 +ENDCHAR +STARTCHAR uni63BD +ENCODING 25533 +BBX 15 15 1 -1 +BITMAP +2108 +2088 +2090 +2020 +F7FE +2090 +2090 +2492 +3492 +E492 +279E +2090 +2090 +2090 +67FE +ENDCHAR +STARTCHAR uni63BE +ENCODING 25534 +BBX 15 15 1 -1 +BITMAP +2100 +21F0 +2210 +23F0 +F020 +2FFC +2180 +2284 +34C8 +E150 +2240 +2CE0 +2158 +2646 +6180 +ENDCHAR +STARTCHAR uni63BF +ENCODING 25535 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FCA8 +1020 +13FE +1440 +1880 +30FC +D184 +1284 +1084 +1084 +50FC +2084 +ENDCHAR +STARTCHAR uni63C0 +ENCODING 25536 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2040 +F7FC +2444 +2554 +24E4 +3444 +E7FC +2150 +2248 +2444 +2842 +6040 +ENDCHAR +STARTCHAR uni63C1 +ENCODING 25537 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +103E +1020 +FC20 +11FC +1104 +15FC +1904 +31FC +D104 +11FC +1000 +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni63C2 +ENCODING 25538 +BBX 15 16 0 -2 +BITMAP +2108 +2088 +2090 +27FE +F890 +2090 +23FC +2A94 +3294 +E30C +2204 +23FC +2204 +2204 +A3FC +4204 +ENDCHAR +STARTCHAR uni63C3 +ENCODING 25539 +BBX 15 15 1 -1 +BITMAP +2208 +2108 +2110 +2FFE +F000 +2784 +24A4 +26A4 +35A4 +E4A4 +26A4 +25A4 +2484 +2484 +659C +ENDCHAR +STARTCHAR uni63C4 +ENCODING 25540 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2318 +2CE6 +F000 +2792 +2492 +2692 +35A4 +E4A4 +26A4 +2592 +2492 +2492 +6592 +ENDCHAR +STARTCHAR uni63C5 +ENCODING 25541 +BBX 15 16 0 -2 +BITMAP +FDFE +2048 +4048 +7DFE +C448 +4488 +7D08 +00E8 +1F00 +0100 +3FF8 +0100 +7FFC +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni63C6 +ENCODING 25542 +BBX 15 15 1 -1 +BITMAP +2004 +23C8 +2842 +24A4 +F318 +2208 +2C06 +23F8 +3040 +E040 +2FFE +20A0 +2110 +2208 +6C06 +ENDCHAR +STARTCHAR uni63C7 +ENCODING 25543 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FC20 +13FE +128A +1652 +1AFA +3222 +D222 +12FA +1222 +1222 +522A +2204 +ENDCHAR +STARTCHAR uni63C8 +ENCODING 25544 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +11FE +1202 +FC82 +17F2 +1002 +13F2 +1802 +33F2 +D002 +13F2 +1212 +13F2 +5014 +2008 +ENDCHAR +STARTCHAR uni63C9 +ENCODING 25545 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2108 +2090 +F7FE +20A4 +2128 +2620 +3040 +EFFE +2150 +2150 +2248 +2C46 +6040 +ENDCHAR +STARTCHAR uni63CA +ENCODING 25546 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1000 +11FC +FD04 +1104 +11FC +1400 +1BFE +3222 +D222 +13FE +1222 +1222 +53FE +2202 +ENDCHAR +STARTCHAR uni63CB +ENCODING 25547 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +FDFC +1124 +1124 +15FC +1800 +33FE +D120 +1122 +1114 +1148 +5184 +2102 +ENDCHAR +STARTCHAR uni63CC +ENCODING 25548 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +FDFC +1124 +1524 +19FC +3000 +D040 +1024 +12A2 +128A +1488 +5078 +2000 +ENDCHAR +STARTCHAR uni63CD +ENCODING 25549 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +2040 +FBF8 +2080 +27FC +2910 +3208 +E5F6 +2040 +23F8 +2040 +20A0 +A110 +4608 +ENDCHAR +STARTCHAR uni63CE +ENCODING 25550 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC04 +11FC +1400 +19FC +3104 +D1FC +1104 +11FC +1104 +1000 +53FE +2000 +ENDCHAR +STARTCHAR uni63CF +ENCODING 25551 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2FFE +2110 +F110 +2000 +27FC +2444 +3444 +E444 +27FC +2444 +2444 +2444 +67FC +ENDCHAR +STARTCHAR uni63D0 +ENCODING 25552 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +F208 +2208 +23F8 +2000 +37FE +E040 +2240 +2278 +2340 +24C0 +683E +ENDCHAR +STARTCHAR uni63D1 +ENCODING 25553 +BBX 15 16 0 -2 +BITMAP +1040 +119C +1104 +1104 +FDDC +1104 +1104 +15FC +1800 +3000 +D1FC +1020 +1020 +1020 +53FE +2000 +ENDCHAR +STARTCHAR uni63D2 +ENCODING 25554 +BBX 15 15 1 -1 +BITMAP +2008 +2070 +27C0 +2040 +F040 +2FFE +2040 +2140 +365C +E444 +2444 +275C +2444 +2444 +67FC +ENDCHAR +STARTCHAR uni63D3 +ENCODING 25555 +BBX 15 16 0 -2 +BITMAP +2210 +2110 +2110 +27BE +FA28 +2248 +23AA +2AAE +32BA +E2EA +22AE +22A8 +24AA +24A2 +A9A2 +501E +ENDCHAR +STARTCHAR uni63D4 +ENCODING 25556 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +27FC +24A4 +FB24 +21C4 +2264 +2488 +3908 +E030 +2080 +2A48 +2A04 +2912 +70F0 +ENDCHAR +STARTCHAR uni63D5 +ENCODING 25557 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +27FE +2108 +F1F8 +2108 +21F8 +2108 +3FFE +E490 +2490 +251E +2600 +2400 +67FE +ENDCHAR +STARTCHAR uni63D6 +ENCODING 25558 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +F000 +2FFE +2208 +23F8 +3208 +E3F8 +2208 +220E +23F8 +2E08 +6008 +ENDCHAR +STARTCHAR uni63D7 +ENCODING 25559 +BBX 15 16 0 -2 +BITMAP +101C +13E0 +1220 +1220 +FBFE +1220 +12FC +1A84 +3284 +D2FC +1284 +12FC +1484 +1484 +58FC +2084 +ENDCHAR +STARTCHAR uni63D8 +ENCODING 25560 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1104 +FDFC +1104 +11FC +1400 +1BFE +3020 +D020 +11FC +1020 +1020 +53FE +2000 +ENDCHAR +STARTCHAR uni63D9 +ENCODING 25561 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FE02 +13FE +1200 +1600 +1BFE +3352 +D552 +15FE +1552 +1552 +5952 +2106 +ENDCHAR +STARTCHAR uni63DA +ENCODING 25562 +BBX 15 15 1 -1 +BITMAP +2000 +23F0 +2210 +23F0 +F210 +23F0 +2000 +2FFE +3200 +E3FC +2CA4 +2124 +2644 +2084 +6338 +ENDCHAR +STARTCHAR uni63DB +ENCODING 25563 +BBX 15 15 1 -1 +BITMAP +2100 +21F0 +2210 +2C20 +F7FC +24A4 +24A4 +253C +3604 +E444 +2FFE +20A0 +2110 +2208 +6C06 +ENDCHAR +STARTCHAR uni63DC +ENCODING 25564 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2110 +2208 +FDF6 +2000 +23F8 +2208 +3BF8 +E000 +2110 +2FFE +2110 +2210 +6410 +ENDCHAR +STARTCHAR uni63DD +ENCODING 25565 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +11EC +112A +FA28 +1548 +1088 +197E +3600 +D1FC +1104 +1104 +11FC +1104 +5104 +21FC +ENDCHAR +STARTCHAR uni63DE +ENCODING 25566 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +FD04 +1088 +17FE +1000 +19FC +3104 +D104 +11FC +1104 +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni63DF +ENCODING 25567 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1022 +1120 +FD3C +1120 +12FE +1400 +19FC +3104 +D1FC +1104 +11FC +1104 +5114 +2108 +ENDCHAR +STARTCHAR uni63E0 +ENCODING 25568 +BBX 15 15 1 -1 +BITMAP +2FFE +2800 +29F8 +2908 +F9F8 +2908 +29F8 +2840 +3BFC +E890 +29B0 +2860 +2B9C +2800 +6FFE +ENDCHAR +STARTCHAR uni63E1 +ENCODING 25569 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2404 +2404 +F7FC +2400 +27FC +2480 +3518 +E7E4 +2840 +2BFC +3040 +2040 +6FFE +ENDCHAR +STARTCHAR uni63E2 +ENCODING 25570 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC80 +10F8 +1508 +1A90 +3060 +D198 +1606 +11F8 +1108 +1108 +51F8 +2108 +ENDCHAR +STARTCHAR uni63E3 +ENCODING 25571 +BBX 15 15 1 -1 +BITMAP +2040 +2444 +2444 +27FC +F000 +2FFE +2040 +2080 +37FC +E524 +2524 +2524 +2524 +2524 +652C +ENDCHAR +STARTCHAR uni63E4 +ENCODING 25572 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +1252 +FA52 +13D2 +1252 +1A52 +3252 +D3D2 +121A +1294 +1250 +12B0 +5310 +2010 +ENDCHAR +STARTCHAR uni63E5 +ENCODING 25573 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2208 +F110 +2FFE +2842 +2842 +33FC +E244 +2244 +2244 +225C +2040 +6040 +ENDCHAR +STARTCHAR uni63E6 +ENCODING 25574 +BBX 15 16 0 -2 +BITMAP +1082 +1082 +17F2 +1082 +FC8A +13EA +16AA +1AAA +33EA +D08A +11CA +12AA +14A2 +1082 +508A +2084 +ENDCHAR +STARTCHAR uni63E7 +ENCODING 25575 +BBX 13 16 1 -2 +BITMAP +0808 +FF88 +0848 +7F48 +4948 +7F48 +2A08 +4928 +8850 +3F80 +0200 +7FF0 +0200 +FFF8 +0200 +0600 +ENDCHAR +STARTCHAR uni63E8 +ENCODING 25576 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +FDFC +1104 +11FC +1400 +1BFE +3202 +D1FC +1020 +1020 +1020 +50A0 +2040 +ENDCHAR +STARTCHAR uni63E9 +ENCODING 25577 +BBX 15 15 1 -1 +BITMAP +2420 +2426 +27B8 +2420 +FC20 +27A2 +2C9E +2100 +33FC +E204 +2204 +23FC +2204 +2204 +63FC +ENDCHAR +STARTCHAR uni63EA +ENCODING 25578 +BBX 15 16 0 -2 +BITMAP +2088 +21C8 +2708 +2108 +F92A +212A +27AC +2948 +3308 +E388 +2554 +2514 +2914 +2124 +A124 +4142 +ENDCHAR +STARTCHAR uni63EB +ENCODING 25579 +BBX 15 15 1 -1 +BITMAP +1C20 +F0A2 +10A2 +FD24 +1120 +3850 +3488 +5004 +9FE2 +0100 +3FF8 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni63EC +ENCODING 25580 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2492 +F492 +2110 +220E +2400 +3050 +E048 +2FFE +20A0 +2110 +2208 +6C06 +ENDCHAR +STARTCHAR uni63ED +ENCODING 25581 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +F208 +2208 +23F8 +2100 +33FE +E442 +3C42 +24A2 +2512 +27F2 +600C +ENDCHAR +STARTCHAR uni63EE +ENCODING 25582 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2842 +27FC +F040 +27FC +2444 +27FC +3444 +E444 +27FC +2040 +2FFE +2040 +6040 +ENDCHAR +STARTCHAR uni63EF +ENCODING 25583 +BBX 15 16 0 -2 +BITMAP +2200 +22FE +2220 +2220 +FB20 +22BC +2644 +2A54 +324C +E284 +22A4 +2218 +2208 +2208 +A2FE +4200 +ENDCHAR +STARTCHAR uni63F0 +ENCODING 25584 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FBFE +1020 +15FC +1924 +31FC +D124 +11FC +1020 +11FC +1020 +53FE +2000 +ENDCHAR +STARTCHAR uni63F1 +ENCODING 25585 +BBX 13 16 1 -2 +BITMAP +9208 +5448 +FE48 +8248 +FE48 +8248 +FE48 +8208 +8658 +3F80 +0200 +7FF0 +0200 +FFF8 +0200 +0600 +ENDCHAR +STARTCHAR uni63F2 +ENCODING 25586 +BBX 15 15 1 -1 +BITMAP +2248 +2248 +2FFE +2248 +F248 +2278 +2200 +23FC +3040 +EFFE +2150 +2248 +2444 +2842 +6040 +ENDCHAR +STARTCHAR uni63F3 +ENCODING 25587 +BBX 15 16 0 -2 +BITMAP +1080 +109E +13EA +108A +FDCA +108A +13EA +1492 +18A6 +3020 +D3FE +1020 +1050 +1088 +5104 +2602 +ENDCHAR +STARTCHAR uni63F4 +ENCODING 25588 +BBX 15 15 1 -1 +BITMAP +203C +2FC0 +2484 +2248 +F7FC +2100 +2FFE +2100 +31F8 +E208 +2510 +28A0 +2040 +21B0 +6E0E +ENDCHAR +STARTCHAR uni63F5 +ENCODING 25589 +BBX 15 15 1 -1 +BITMAP +2010 +2010 +277C +2114 +FAFE +2414 +277C +2110 +3D7C +E510 +2BFE +2110 +2110 +22D0 +643E +ENDCHAR +STARTCHAR uni63F6 +ENCODING 25590 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +24A2 +24A4 +F7A4 +24A8 +24A4 +27A4 +34A2 +E4A2 +24A2 +27AC +2CA0 +20A0 +60A0 +ENDCHAR +STARTCHAR uni63F7 +ENCODING 25591 +BBX 15 15 1 -1 +BITMAP +2038 +27C0 +2040 +2FFE +F040 +215C +2644 +2444 +375C +E444 +2444 +27FC +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni63F8 +ENCODING 25592 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1070 +FCA8 +1124 +1222 +11FC +1904 +31FC +D104 +11FC +1104 +1000 +57FE +2000 +ENDCHAR +STARTCHAR uni63F9 +ENCODING 25593 +BBX 15 16 0 -2 +BITMAP +1050 +1052 +13DC +1050 +FCD2 +134E +1000 +15FC +1904 +31FC +D104 +11FC +1104 +1104 +5114 +2108 +ENDCHAR +STARTCHAR uni63FA +ENCODING 25594 +BBX 15 15 1 -1 +BITMAP +203C +2FC0 +2488 +2248 +F010 +27FC +2040 +2040 +3FFE +E040 +2040 +2444 +2444 +2444 +67FC +ENDCHAR +STARTCHAR uni63FB +ENCODING 25595 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +27FE +2410 +FC10 +27F0 +2492 +2C92 +37D2 +E554 +2554 +2488 +254A +2A1A +A826 +5042 +ENDCHAR +STARTCHAR uni63FC +ENCODING 25596 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1040 +1080 +FDFC +1284 +1084 +14FC +1820 +3022 +D3B4 +10A8 +1128 +1224 +54A2 +2040 +ENDCHAR +STARTCHAR uni63FD +ENCODING 25597 +BBX 15 16 0 -2 +BITMAP +1090 +1290 +129E +12A8 +FAC4 +1080 +15FC +1904 +3124 +D124 +1124 +1154 +1050 +1090 +5112 +260E +ENDCHAR +STARTCHAR uni63FE +ENCODING 25598 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +FDF8 +1108 +1108 +15F8 +1800 +33FC +D294 +1294 +1294 +1294 +57FE +2000 +ENDCHAR +STARTCHAR uni63FF +ENCODING 25599 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +2210 +23BE +F422 +2444 +2790 +2A10 +3210 +EF90 +2228 +2228 +22A8 +2344 +A244 +4082 +ENDCHAR +STARTCHAR uni6400 +ENCODING 25600 +BBX 15 16 0 -2 +BITMAP +2100 +21F0 +2210 +2420 +FBFC +2244 +2244 +2BFC +30A0 +E122 +261E +20C0 +2030 +2180 +A060 +4010 +ENDCHAR +STARTCHAR uni6401 +ENCODING 25601 +BBX 14 16 0 -2 +BITMAP +2200 +217C +2504 +2484 +F4F4 +2514 +26A4 +2444 +34A4 +E71C +25F4 +2514 +2514 +25F4 +A514 +4408 +ENDCHAR +STARTCHAR uni6402 +ENCODING 25602 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +10A8 +1020 +FBFE +10A8 +1124 +1A02 +3040 +D7FE +1088 +1108 +1190 +1060 +5198 +2604 +ENDCHAR +STARTCHAR uni6403 +ENCODING 25603 +BBX 15 16 0 -2 +BITMAP +1108 +1088 +1090 +13FC +FE04 +1204 +1204 +13FC +1840 +3020 +D0A4 +1282 +128A +128A +5478 +2000 +ENDCHAR +STARTCHAR uni6404 +ENCODING 25604 +BBX 15 16 0 -2 +BITMAP +2100 +213C +2100 +2100 +F9BC +2564 +2524 +2D3C +3524 +E124 +2124 +213C +2124 +2100 +A17E +4100 +ENDCHAR +STARTCHAR uni6405 +ENCODING 25605 +BBX 15 16 0 -2 +BITMAP +2484 +2244 +2248 +27FE +FC02 +2804 +23F8 +2A08 +3248 +E248 +2248 +22A8 +20A0 +2122 +A222 +4C1E +ENDCHAR +STARTCHAR uni6406 +ENCODING 25606 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2FFE +2110 +F7FC +2110 +2FFE +2040 +37FC +E444 +27FC +2444 +2FFE +2404 +641C +ENDCHAR +STARTCHAR uni6407 +ENCODING 25607 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2118 +2686 +F840 +23F0 +2010 +28A0 +3040 +E7FE +2088 +2150 +2320 +2510 +A948 +4186 +ENDCHAR +STARTCHAR uni6408 +ENCODING 25608 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC50 +1088 +1124 +1450 +1888 +3104 +D2FA +1088 +1088 +1088 +50F8 +2088 +ENDCHAR +STARTCHAR uni6409 +ENCODING 25609 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2482 +F48A +2110 +23FC +2620 +3BFC +E220 +2220 +23FC +2220 +2220 +63FE +ENDCHAR +STARTCHAR uni640A +ENCODING 25610 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +11FC +1244 +FD54 +11F4 +1084 +1528 +1A90 +31FC +D244 +1554 +11F4 +1084 +5128 +2210 +ENDCHAR +STARTCHAR uni640B +ENCODING 25611 +BBX 15 16 0 -2 +BITMAP +1004 +101E +13F0 +121E +FE10 +12FE +1292 +1698 +1AF2 +328E +D280 +12B8 +12A8 +14AA +554A +2A86 +ENDCHAR +STARTCHAR uni640C +ENCODING 25612 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2204 +2204 +FBFC +2248 +2248 +2AFC +3248 +E248 +23FE +22A4 +22A8 +2490 +A4C8 +4886 +ENDCHAR +STARTCHAR uni640D +ENCODING 25613 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +F800 +23F8 +2208 +23F8 +3A08 +E3F8 +2208 +23F8 +2100 +2208 +6C06 +ENDCHAR +STARTCHAR uni640E +ENCODING 25614 +BBX 15 16 0 -2 +BITMAP +2006 +2F78 +2110 +2120 +FA44 +2278 +2310 +2A24 +367E +EA12 +2210 +2254 +2252 +2292 +AA50 +4420 +ENDCHAR +STARTCHAR uni640F +ENCODING 25615 +BBX 15 15 1 -1 +BITMAP +2048 +2044 +2FFE +2040 +F7FC +2444 +27FC +2444 +37FC +E444 +2008 +2FFE +2208 +2108 +6038 +ENDCHAR +STARTCHAR uni6410 +ENCODING 25616 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2080 +F110 +2620 +2344 +20FA +3F82 +E000 +27FC +2444 +27FC +2444 +67FC +ENDCHAR +STARTCHAR uni6411 +ENCODING 25617 +BBX 15 16 0 -2 +BITMAP +1108 +1108 +17FE +1108 +F800 +17FE +1108 +19F8 +3108 +D1F8 +1108 +113E +17C8 +1008 +5008 +2008 +ENDCHAR +STARTCHAR uni6412 +ENCODING 25618 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FC +1108 +FC90 +13FE +1202 +1444 +1820 +33FC +D080 +10F8 +1088 +1108 +5128 +2210 +ENDCHAR +STARTCHAR uni6413 +ENCODING 25619 +BBX 15 15 1 -1 +BITMAP +2208 +2110 +27FC +2040 +F040 +23F8 +2040 +2040 +37FC +E080 +21FC +2220 +2420 +2820 +63FE +ENDCHAR +STARTCHAR uni6414 +ENCODING 25620 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2288 +2248 +FD10 +24E0 +2318 +2C46 +37FC +E444 +2444 +27FC +2048 +207C +6F82 +ENDCHAR +STARTCHAR uni6415 +ENCODING 25621 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1020 +FC20 +13FE +1080 +1504 +1BFE +3002 +D3FC +1294 +1294 +1294 +57FE +2000 +ENDCHAR +STARTCHAR uni6416 +ENCODING 25622 +BBX 15 15 1 -1 +BITMAP +2040 +20F8 +2188 +2650 +F120 +21C0 +2F00 +23FC +3440 +E040 +2FFE +2040 +2444 +2444 +67FC +ENDCHAR +STARTCHAR uni6417 +ENCODING 25623 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23F8 +2208 +FBF8 +2208 +23F8 +2200 +3BFE +E200 +23FE +2102 +2922 +2FE2 +601C +ENDCHAR +STARTCHAR uni6418 +ENCODING 25624 +BBX 15 16 0 -2 +BITMAP +1040 +1044 +11F8 +1050 +FBFE +1040 +14F8 +1982 +327E +D400 +11FC +1104 +11FC +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni6419 +ENCODING 25625 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1200 +12FC +FE00 +13FE +12A8 +1690 +1AC8 +3286 +D208 +13FE +1288 +1448 +5408 +2818 +ENDCHAR +STARTCHAR uni641A +ENCODING 25626 +BBX 15 16 0 -2 +BITMAP +1040 +11FC +1044 +1094 +FD08 +13DE +114A +154A +1A94 +31FC +D104 +11FC +1104 +11FC +5104 +210C +ENDCHAR +STARTCHAR uni641B +ENCODING 25627 +BBX 15 16 0 -2 +BITMAP +1110 +10A0 +1000 +17FE +F8A0 +13F8 +10A8 +1FFE +30A8 +D3F8 +10A0 +11B0 +12A8 +14A6 +50A0 +20A0 +ENDCHAR +STARTCHAR uni641C +ENCODING 25628 +BBX 15 15 1 -1 +BITMAP +2040 +2340 +245C +2444 +F75C +2444 +2444 +27FC +3040 +EFFC +2208 +2110 +20E0 +21B0 +6E0E +ENDCHAR +STARTCHAR uni641D +ENCODING 25629 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1104 +FDFC +1104 +11FC +1504 +19FC +3028 +D024 +13FE +1050 +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni641E +ENCODING 25630 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2000 +FBF8 +2208 +23F8 +2000 +3FFE +E402 +25F2 +2512 +2512 +25F2 +6406 +ENDCHAR +STARTCHAR uni641F +ENCODING 25631 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +213E +27C8 +F908 +27C8 +2548 +2FC8 +357E +E7C8 +2108 +2FE8 +2108 +2108 +A108 +4108 +ENDCHAR +STARTCHAR uni6420 +ENCODING 25632 +BBX 15 16 0 -2 +BITMAP +2440 +225E +2292 +2012 +F7D2 +211E +2552 +2552 +3552 +E7DE +2152 +2112 +2212 +2222 +A42A +4844 +ENDCHAR +STARTCHAR uni6421 +ENCODING 25633 +BBX 15 16 0 -2 +BITMAP +23F0 +2110 +20E0 +2318 +F800 +27BC +24A4 +2B18 +34A4 +E040 +27FC +20E0 +2150 +2248 +AC46 +4040 +ENDCHAR +STARTCHAR uni6422 +ENCODING 25634 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2108 +2108 +FA94 +275A +2000 +27FE +3800 +E3FC +2204 +23FC +2204 +2204 +63FC +ENDCHAR +STARTCHAR uni6423 +ENCODING 25635 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +2010 +27FE +FC10 +2410 +27F2 +2C92 +3492 +E5B4 +26D4 +2488 +254A +293A +AA26 +5042 +ENDCHAR +STARTCHAR uni6424 +ENCODING 25636 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +1000 +FBFE +1000 +1488 +1904 +3202 +D1FC +1154 +1154 +1154 +1154 +57FE +2000 +ENDCHAR +STARTCHAR uni6425 +ENCODING 25637 +BBX 15 15 1 -1 +BITMAP +2810 +2420 +22FC +2884 +F484 +2284 +20FC +2E80 +32FC +E284 +2284 +2284 +22FC +2500 +78FE +ENDCHAR +STARTCHAR uni6426 +ENCODING 25638 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +2082 +2082 +FFBE +2820 +2820 +2FBE +328A +E492 +2186 +228A +2CB2 +2082 +671C +ENDCHAR +STARTCHAR uni6427 +ENCODING 25639 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FE +2402 +FC02 +27FE +2400 +2FDE +3442 +E652 +254A +24C6 +2B5A +2842 +B14A +4084 +ENDCHAR +STARTCHAR uni6428 +ENCODING 25640 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +F208 +2208 +23F8 +2000 +3FBE +E28A +2492 +2186 +269A +38E2 +638E +ENDCHAR +STARTCHAR uni6429 +ENCODING 25641 +BBX 15 15 1 -1 +BITMAP +2408 +2788 +24BE +2CA8 +F2A8 +2128 +227E +2408 +3808 +E040 +2FFE +2150 +2248 +2C46 +6040 +ENDCHAR +STARTCHAR uni642A +ENCODING 25642 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2420 +FDFC +2424 +27FE +2C24 +35FC +E420 +25FC +2504 +2504 +2904 +A9FC +5104 +ENDCHAR +STARTCHAR uni642B +ENCODING 25643 +BBX 15 16 0 -2 +BITMAP +0878 +3E48 +228E +2A00 +7EF8 +2248 +2A30 +46CC +8020 +1FC0 +0100 +3FF8 +0100 +7FFC +0100 +0300 +ENDCHAR +STARTCHAR uni642C +ENCODING 25644 +BBX 15 15 1 -1 +BITMAP +2100 +221C +27D4 +2454 +F554 +2556 +2460 +2FDE +3452 +E552 +2554 +2548 +2548 +2454 +68E2 +ENDCHAR +STARTCHAR uni642D +ENCODING 25645 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2FFE +2150 +F0A0 +2110 +2208 +2DF6 +3000 +E000 +23F8 +2208 +2208 +2208 +63F8 +ENDCHAR +STARTCHAR uni642E +ENCODING 25646 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +1050 +FBFE +1252 +1652 +1BFE +3020 +D020 +13FE +1070 +10A8 +1124 +5622 +2020 +ENDCHAR +STARTCHAR uni642F +ENCODING 25647 +BBX 15 15 1 -1 +BITMAP +203C +27C8 +2484 +2444 +F842 +2802 +2180 +273C +3404 +E404 +27BC +2404 +2404 +2404 +67FC +ENDCHAR +STARTCHAR uni6430 +ENCODING 25648 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +11E4 +FD24 +13FE +1202 +11FC +1904 +31FC +D104 +11FC +1104 +1104 +5114 +2108 +ENDCHAR +STARTCHAR uni6431 +ENCODING 25649 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1204 +1204 +FBFC +1240 +1220 +1BFC +3288 +D250 +13FE +1220 +15FC +1420 +5820 +2020 +ENDCHAR +STARTCHAR uni6432 +ENCODING 25650 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +2404 +F910 +2208 +203C +2BD0 +3290 +E290 +2290 +2288 +2288 +24A4 +A4D4 +4892 +ENDCHAR +STARTCHAR uni6433 +ENCODING 25651 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC24 +11FC +1020 +15FC +1820 +33FE +D020 +11FC +1104 +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni6434 +ENCODING 25652 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +1FF0 +0440 +FFFE +0820 +37D8 +C106 +1FF0 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni6435 +ENCODING 25653 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2248 +22A8 +FB18 +2208 +23F8 +2800 +3000 +E7FC +24A4 +24A4 +24A4 +24A4 +AFFE +4000 +ENDCHAR +STARTCHAR uni6436 +ENCODING 25654 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2318 +2CE6 +F000 +23F8 +2208 +23F8 +3208 +E3F8 +2200 +25FC +2504 +2904 +61FC +ENDCHAR +STARTCHAR uni6437 +ENCODING 25655 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1104 +11FC +1504 +19FC +3104 +D1FC +1104 +13FE +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni6438 +ENCODING 25656 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1040 +13FE +1488 +1934 +32E2 +D020 +11FC +1070 +10AC +5322 +2020 +ENDCHAR +STARTCHAR uni6439 +ENCODING 25657 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1000 +11FC +FD04 +1104 +11FC +1400 +1BFE +328A +D252 +13FE +1222 +1222 +522A +2204 +ENDCHAR +STARTCHAR uni643A +ENCODING 25658 +BBX 15 15 1 -1 +BITMAP +2120 +2240 +27FE +2C20 +F7FC +2420 +27FC +2420 +37FE +E000 +2FF8 +2108 +211E +2202 +641C +ENDCHAR +STARTCHAR uni643B +ENCODING 25659 +BBX 15 16 0 -2 +BITMAP +0100 +06C0 +1830 +EFEE +0000 +1FF0 +1010 +1FF0 +040C +78F0 +1010 +7CFC +1010 +FEFE +1010 +3030 +ENDCHAR +STARTCHAR uni643C +ENCODING 25660 +BBX 15 16 0 -2 +BITMAP +1040 +1248 +1150 +13F8 +F880 +17FC +1110 +1A28 +35C4 +D842 +13F8 +1040 +17FC +1040 +5140 +2080 +ENDCHAR +STARTCHAR uni643D +ENCODING 25661 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FCA8 +1050 +1088 +1524 +1A22 +31FC +D020 +10A8 +1124 +1222 +50A0 +2040 +ENDCHAR +STARTCHAR uni643E +ENCODING 25662 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2FFC +2924 +FA20 +2C3E +2200 +23FE +3440 +E87C +2040 +207C +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni643F +ENCODING 25663 +BBX 15 16 0 -2 +BITMAP +1100 +3906 +E2B8 +2288 +2448 +F85E +2388 +2008 +2008 +FBBE +2288 +2288 +2288 +2388 +42A8 +8010 +ENDCHAR +STARTCHAR uni6440 +ENCODING 25664 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +1104 +FD04 +11FC +1100 +15FE +1900 +31FE +D002 +12AA +12AA +1402 +5014 +2008 +ENDCHAR +STARTCHAR uni6441 +ENCODING 25665 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2444 +2444 +F7FC +2444 +24A4 +2514 +3404 +E7FC +2040 +2024 +2522 +250A +A908 +40F8 +ENDCHAR +STARTCHAR uni6442 +ENCODING 25666 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2208 +23F8 +F208 +23F8 +2208 +2FFE +3008 +E60C +2110 +2000 +20A0 +2318 +6C06 +ENDCHAR +STARTCHAR uni6443 +ENCODING 25667 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +1020 +FBFE +1000 +15FC +1904 +31FC +D104 +11FC +1104 +11FC +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni6444 +ENCODING 25668 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1108 +11F8 +FD08 +11F8 +110E +17F8 +1808 +37BC +D0A4 +12A4 +1128 +1290 +54A8 +2846 +ENDCHAR +STARTCHAR uni6445 +ENCODING 25669 +BBX 15 16 0 -2 +BITMAP +2040 +207C +2040 +27FE +F442 +2470 +27C4 +2444 +343C +E420 +2410 +2454 +2542 +2942 +A94A +5238 +ENDCHAR +STARTCHAR uni6446 +ENCODING 25670 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1252 +1252 +FBFE +1020 +1420 +19FC +3020 +D020 +17FE +1040 +1088 +1104 +53FE +2102 +ENDCHAR +STARTCHAR uni6447 +ENCODING 25671 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13C0 +1004 +FA44 +1128 +11FC +1A20 +3020 +D3FE +1020 +1124 +1124 +1124 +51FC +2004 +ENDCHAR +STARTCHAR uni6448 +ENCODING 25672 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC14 +11E0 +1100 +1500 +19FC +3110 +D110 +17FE +1000 +1090 +5108 +2204 +ENDCHAR +STARTCHAR uni6449 +ENCODING 25673 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FCA8 +1124 +1450 +1888 +3346 +D0F8 +1108 +1288 +1050 +1020 +5040 +2380 +ENDCHAR +STARTCHAR uni644A +ENCODING 25674 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +2740 +217E +F1C8 +2948 +257E +2548 +3248 +E27E +2548 +2548 +2948 +207E +A040 +4040 +ENDCHAR +STARTCHAR uni644B +ENCODING 25675 +BBX 15 16 0 -2 +BITMAP +2000 +245C +2294 +2114 +FA94 +2454 +2126 +2900 +37DC +E114 +2594 +2554 +2948 +2108 +A514 +4222 +ENDCHAR +STARTCHAR uni644C +ENCODING 25676 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FC +1000 +FD08 +1090 +17FE +1A20 +32A0 +D2FC +1320 +1220 +12FC +1420 +5420 +29FE +ENDCHAR +STARTCHAR uni644D +ENCODING 25677 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +17FE +1402 +FD00 +11FE +1210 +1620 +1A7C +3244 +D244 +127C +1244 +1244 +527C +2244 +ENDCHAR +STARTCHAR uni644E +ENCODING 25678 +BBX 15 15 1 -1 +BITMAP +2000 +2FBC +2294 +24A4 +F18C +26B4 +2040 +21B0 +360E +E040 +2390 +2064 +2388 +2030 +63C0 +ENDCHAR +STARTCHAR uni644F +ENCODING 25679 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1040 +13FE +1488 +1904 +3242 +D59C +1104 +11DC +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni6450 +ENCODING 25680 +BBX 15 16 0 -2 +BITMAP +2124 +2124 +2224 +F424 +2954 +214A +2292 +3610 +EA10 +2250 +225C +2250 +2250 +22B0 +A29E +4300 +ENDCHAR +STARTCHAR uni6451 +ENCODING 25681 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +282A +2826 +FFFE +2822 +2BA2 +2AA6 +3BAA +E812 +29B2 +2E56 +2896 +290A +6FFE +ENDCHAR +STARTCHAR uni6452 +ENCODING 25682 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2204 +2204 +FBFC +2200 +2284 +2A48 +32FC +E248 +2248 +23FE +2448 +2448 +A888 +5108 +ENDCHAR +STARTCHAR uni6453 +ENCODING 25683 +BBX 15 16 0 -2 +BITMAP +1020 +147C +1284 +1148 +FC30 +10CE +1610 +1A7C +3210 +D27C +1210 +12FE +1210 +1210 +55FE +2800 +ENDCHAR +STARTCHAR uni6454 +ENCODING 25684 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1020 +FC48 +12F2 +1124 +1652 +18F8 +3008 +D020 +13FE +1020 +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni6455 +ENCODING 25685 +BBX 15 16 0 -2 +BITMAP +22A8 +22A8 +27FC +22A8 +FAAA +24E6 +2800 +2FFC +3444 +E040 +23F8 +2248 +2248 +2248 +A258 +4040 +ENDCHAR +STARTCHAR uni6456 +ENCODING 25686 +BBX 15 16 0 -2 +BITMAP +1100 +1110 +13DC +1254 +FD54 +1288 +1108 +1AF4 +3402 +D000 +13FC +1040 +1150 +1248 +5544 +2080 +ENDCHAR +STARTCHAR uni6457 +ENCODING 25687 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +27C8 +2108 +F91E +27D2 +2564 +2D40 +37C8 +E108 +2388 +2548 +2954 +2114 +A124 +4142 +ENDCHAR +STARTCHAR uni6458 +ENCODING 25688 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2208 +F110 +27FC +2404 +2444 +35F4 +E444 +25F4 +2514 +2514 +25F4 +640C +ENDCHAR +STARTCHAR uni6459 +ENCODING 25689 +BBX 15 16 0 -2 +BITMAP +2010 +2410 +22FE +2210 +F8FE +2092 +26FE +2A92 +32FE +E210 +22FE +2210 +2210 +2510 +A8FE +4000 +ENDCHAR +STARTCHAR uni645A +ENCODING 25690 +BBX 15 15 1 -1 +BITMAP +2444 +2444 +2248 +27FC +F404 +25F4 +2110 +2110 +31F0 +E040 +2040 +23F8 +2040 +2040 +6FFE +ENDCHAR +STARTCHAR uni645B +ENCODING 25691 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +2010 +FAA4 +2264 +2394 +2204 +3BFC +E040 +27FE +2482 +2492 +25EA +6406 +ENDCHAR +STARTCHAR uni645C +ENCODING 25692 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +13FE +FD24 +11FC +1000 +15FC +1904 +31FC +D104 +11FC +1104 +11FC +5088 +2104 +ENDCHAR +STARTCHAR uni645D +ENCODING 25693 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2920 +FFFC +2924 +2924 +2FFC +3800 +EA20 +2BA4 +2A38 +2A20 +33A2 +661E +ENDCHAR +STARTCHAR uni645E +ENCODING 25694 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1244 +13FC +FE44 +13FC +1080 +1510 +1BE0 +3048 +D184 +13FE +1022 +1128 +52A4 +2442 +ENDCHAR +STARTCHAR uni645F +ENCODING 25695 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1124 +13FE +FD24 +11FC +1020 +15FC +1924 +31FC +D040 +13FE +1088 +11D0 +5070 +238C +ENDCHAR +STARTCHAR uni6460 +ENCODING 25696 +BBX 15 15 1 -1 +BITMAP +2020 +2040 +27FC +2444 +FD74 +2494 +2554 +2464 +3D94 +E7FC +2040 +2524 +2522 +288A +6878 +ENDCHAR +STARTCHAR uni6461 +ENCODING 25697 +BBX 15 16 0 -2 +BITMAP +2000 +27BE +2488 +2488 +F7A8 +24A8 +24A8 +27BE +3410 +E518 +2498 +25A8 +26AA +244A +A046 +4080 +ENDCHAR +STARTCHAR uni6462 +ENCODING 25698 +BBX 15 16 0 -2 +BITMAP +1040 +107C +1040 +13FE +FA42 +1278 +13C4 +1A3C +3208 +D2F0 +1324 +12A8 +15FE +1420 +58A0 +2040 +ENDCHAR +STARTCHAR uni6463 +ENCODING 25699 +BBX 15 16 0 -2 +BITMAP +1040 +107C +1040 +13FE +FA42 +1278 +13C4 +1A3C +3200 +D2FC +1284 +12FC +1284 +14FC +5484 +29FE +ENDCHAR +STARTCHAR uni6464 +ENCODING 25700 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FAAA +1124 +12AA +1820 +32AA +D124 +12AA +1050 +1050 +1088 +5104 +2602 +ENDCHAR +STARTCHAR uni6465 +ENCODING 25701 +BBX 15 16 0 -2 +BITMAP +1100 +11FC +1200 +15F8 +F908 +11F8 +1508 +19F8 +3000 +D7FE +1100 +13FC +14A4 +1124 +5254 +2088 +ENDCHAR +STARTCHAR uni6466 +ENCODING 25702 +BBX 15 16 0 -2 +BITMAP +2200 +220E +2F74 +F254 +2554 +28D4 +2754 +3054 +EFD4 +2454 +2754 +2154 +2152 +2154 +A55C +4284 +ENDCHAR +STARTCHAR uni6467 +ENCODING 25703 +BBX 15 15 1 -1 +BITMAP +2040 +2444 +2444 +27FC +F910 +2110 +23FC +2620 +3BFC +E220 +2220 +23FC +2220 +2220 +63FE +ENDCHAR +STARTCHAR uni6468 +ENCODING 25704 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +13FE +FE10 +1254 +1238 +1654 +1A82 +3250 +D27C +1290 +1210 +15FE +5410 +2810 +ENDCHAR +STARTCHAR uni6469 +ENCODING 25705 +BBX 15 15 1 -1 +BITMAP +0100 +7FFE +4410 +5F7E +4C18 +5634 +4552 +4038 +4FC0 +4080 +5FFC +8080 +BFFE +8080 +0380 +ENDCHAR +STARTCHAR uni646A +ENCODING 25706 +BBX 15 16 0 -2 +BITMAP +2090 +2290 +229E +22A2 +FAD4 +23A8 +2094 +28A4 +37FE +E284 +22A4 +2294 +2294 +2284 +A494 +4888 +ENDCHAR +STARTCHAR uni646B +ENCODING 25707 +BBX 15 16 0 -2 +BITMAP +2200 +227C +2244 +2744 +FA7C +2244 +2244 +2F7C +3244 +E244 +227C +2228 +2528 +254A +A84A +5086 +ENDCHAR +STARTCHAR uni646C +ENCODING 25708 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +13F8 +1110 +F8A0 +17FE +1000 +1BF8 +3208 +D3F8 +1208 +13F8 +1120 +1122 +5222 +2C1E +ENDCHAR +STARTCHAR uni646D +ENCODING 25709 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +27FE +2400 +FC88 +2488 +27FE +2488 +3C88 +E4F8 +2400 +2800 +2954 +322A +622A +ENDCHAR +STARTCHAR uni646E +ENCODING 25710 +BBX 15 16 0 -2 +BITMAP +0820 +7F20 +087E +7E44 +08A4 +FF28 +1010 +1E28 +2264 +5FC2 +8100 +3FF8 +0100 +7FFC +0100 +0300 +ENDCHAR +STARTCHAR uni646F +ENCODING 25711 +BBX 15 15 1 -1 +BITMAP +1040 +7C40 +11F8 +FE48 +44C8 +FE48 +10AA +7C2A +13C6 +0080 +1FF8 +0080 +FFFE +0080 +0380 +ENDCHAR +STARTCHAR uni6470 +ENCODING 25712 +BBX 14 16 1 -2 +BITMAP +1040 +7C40 +11F0 +FE50 +54D0 +BA54 +10AC +7D04 +0040 +3F80 +0200 +7FF0 +0200 +FFF8 +0200 +0600 +ENDCHAR +STARTCHAR uni6471 +ENCODING 25713 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +11F8 +FD08 +11F8 +1000 +17FC +1A94 +33FC +D000 +11F8 +1090 +1060 +5198 +2606 +ENDCHAR +STARTCHAR uni6472 +ENCODING 25714 +BBX 15 16 0 -2 +BITMAP +2200 +2202 +223C +2FA0 +F220 +2FA0 +2ABE +2FA4 +3AA4 +EFA4 +2224 +2FA4 +2224 +2244 +A244 +4284 +ENDCHAR +STARTCHAR uni6473 +ENCODING 25715 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2400 +24F8 +FC88 +2488 +24F8 +2400 +3DDC +E554 +2554 +2554 +25DC +2400 +67FE +ENDCHAR +STARTCHAR uni6474 +ENCODING 25716 +BBX 15 16 0 -2 +BITMAP +11FC +1020 +13FE +1222 +FDAC +1020 +11AC +1400 +19FC +3000 +D3FE +1080 +10FC +1004 +5028 +2010 +ENDCHAR +STARTCHAR uni6475 +ENCODING 25717 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +2010 +27FE +FC10 +2490 +24D2 +2C92 +37F2 +E494 +2494 +25C8 +2AAA +289A +B1A6 +4042 +ENDCHAR +STARTCHAR uni6476 +ENCODING 25718 +BBX 15 15 1 -1 +BITMAP +2040 +2FFE +2040 +27FC +FC44 +27FC +2444 +27FC +3848 +E0FC +2F02 +2008 +2FFE +2208 +6138 +ENDCHAR +STARTCHAR uni6477 +ENCODING 25719 +BBX 15 16 0 -2 +BITMAP +1124 +1248 +1124 +1000 +FDFC +1124 +11FC +1524 +19FC +3020 +D3FE +1070 +10A8 +1124 +5622 +2020 +ENDCHAR +STARTCHAR uni6478 +ENCODING 25720 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +27FE +2090 +F890 +23FC +2204 +23FC +3A04 +E3FC +2040 +27FE +2090 +2108 +6606 +ENDCHAR +STARTCHAR uni6479 +ENCODING 25721 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +FFFE +04C0 +19B0 +EFEE +0080 +FFFE +0080 +0300 +ENDCHAR +STARTCHAR uni647A +ENCODING 25722 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +228A +2492 +F082 +238E +2CB2 +2082 +3040 +E3FC +2204 +23FC +2204 +2204 +63FC +ENDCHAR +STARTCHAR uni647B +ENCODING 25723 +BBX 15 16 0 -2 +BITMAP +1040 +1088 +11FC +1108 +FA52 +13FE +1450 +1988 +3626 +D0C0 +1310 +1064 +1388 +1030 +50C0 +2700 +ENDCHAR +STARTCHAR uni647C +ENCODING 25724 +BBX 15 16 0 -2 +BITMAP +2000 +27DC +2514 +27D4 +FC54 +27C8 +2508 +2D14 +37E2 +E000 +2040 +27FC +2040 +2040 +AFFE +4000 +ENDCHAR +STARTCHAR uni647D +ENCODING 25725 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2090 +27FE +F492 +2492 +27FE +2000 +33FC +E000 +27FE +2020 +2128 +2626 +60E0 +ENDCHAR +STARTCHAR uni647E +ENCODING 25726 +BBX 15 16 0 -2 +BITMAP +2000 +277C +2144 +2144 +F97C +2710 +2410 +2C7C +3454 +E754 +2154 +217C +2110 +2114 +AAFE +4402 +ENDCHAR +STARTCHAR uni647F +ENCODING 25727 +BBX 15 16 0 -2 +BITMAP +1020 +1050 +1088 +1346 +FC20 +11FC +1088 +1450 +1BFE +3000 +D1FC +1104 +11FC +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni6480 +ENCODING 25728 +BBX 15 16 0 -2 +BITMAP +0800 +7F78 +0848 +3E48 +0086 +3E78 +2A48 +3E30 +4068 +9FC6 +0100 +3FF8 +0100 +7FFC +0100 +0300 +ENDCHAR +STARTCHAR uni6481 +ENCODING 25729 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1048 +10F0 +FC20 +13FE +1242 +1090 +19F8 +3028 +D120 +11FC +1220 +17FE +5020 +2020 +ENDCHAR +STARTCHAR uni6482 +ENCODING 25730 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2444 +27FC +FC44 +27FC +2100 +2BF8 +3510 +E0E0 +2318 +2C06 +23F8 +2208 +A3F8 +4208 +ENDCHAR +STARTCHAR uni6483 +ENCODING 25731 +BBX 15 15 1 -1 +BITMAP +1000 +FE78 +5448 +7DCE +5400 +7CFC +1048 +FE30 +13CC +0100 +3FF8 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni6484 +ENCODING 25732 +BBX 15 16 0 -2 +BITMAP +2000 +2FBE +28A2 +2AAA +FAAA +2AAA +2514 +28A2 +3080 +EFFE +2110 +2210 +23A0 +2060 +A198 +4E04 +ENDCHAR +STARTCHAR uni6485 +ENCODING 25733 +BBX 15 16 0 -2 +BITMAP +2000 +2FFE +2800 +2A28 +F948 +2BEE +2892 +2884 +3AA0 +EAA8 +2BE8 +2888 +2894 +2914 +A924 +5242 +ENDCHAR +STARTCHAR uni6486 +ENCODING 25734 +BBX 14 16 1 -2 +BITMAP +9240 +547C +FE90 +9290 +BB50 +D620 +9250 +828C +0040 +3F80 +0200 +7FF0 +0200 +FFF8 +0200 +0600 +ENDCHAR +STARTCHAR uni6487 +ENCODING 25735 +BBX 15 15 1 -1 +BITMAP +2210 +2A90 +2A5E +3234 +F224 +2FD4 +2A54 +2A54 +3A54 +EF48 +2AC8 +2A54 +2A54 +2A62 +68C2 +ENDCHAR +STARTCHAR uni6488 +ENCODING 25736 +BBX 15 15 1 -1 +BITMAP +2208 +2AAA +2AAA +2208 +F514 +28A2 +2000 +2FFE +3802 +E882 +27FC +2084 +2104 +2208 +6C30 +ENDCHAR +STARTCHAR uni6489 +ENCODING 25737 +BBX 14 16 1 -2 +BITMAP +1080 +FE80 +44FC +7D10 +0290 +7C90 +08A0 +FC40 +10A0 +5118 +21E0 +7E00 +0200 +FFF8 +0200 +0600 +ENDCHAR +STARTCHAR uni648A +ENCODING 25738 +BBX 15 16 0 -2 +BITMAP +279E +2492 +279E +2492 +FF9E +2402 +24F2 +2C92 +34F2 +E492 +24F2 +2492 +2492 +2532 +A402 +4406 +ENDCHAR +STARTCHAR uni648B +ENCODING 25739 +BBX 14 16 0 -2 +BITMAP +2000 +27BC +24A4 +27BC +FCA4 +27BC +2404 +2DF4 +3444 +E4E4 +2444 +2444 +25F4 +2404 +A414 +4408 +ENDCHAR +STARTCHAR uni648C +ENCODING 25740 +BBX 15 16 0 -2 +BITMAP +1040 +13F8 +1248 +13F8 +F840 +17FE +1000 +1BF8 +3208 +D3F8 +1208 +13F8 +1208 +13F8 +5110 +2208 +ENDCHAR +STARTCHAR uni648D +ENCODING 25741 +BBX 15 16 0 -2 +BITMAP +2000 +27BC +2108 +2528 +F7BC +2318 +25AA +2946 +3000 +E3F8 +2208 +2208 +23F8 +2208 +A208 +43F8 +ENDCHAR +STARTCHAR uni648E +ENCODING 25742 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1020 +11FC +FC00 +13FE +1202 +15FC +1800 +31FC +D104 +11FC +1104 +1088 +53FE +2000 +ENDCHAR +STARTCHAR uni648F +ENCODING 25743 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1004 +13FC +FC04 +13FC +1000 +17BC +1924 +37BC +D008 +13FE +1108 +1088 +50A8 +2010 +ENDCHAR +STARTCHAR uni6490 +ENCODING 25744 +BBX 15 16 0 -2 +BITMAP +1124 +10A8 +13FE +1202 +FCF8 +1088 +10F8 +1400 +19FC +3010 +D110 +11FE +1050 +1090 +5310 +2030 +ENDCHAR +STARTCHAR uni6491 +ENCODING 25745 +BBX 15 15 1 -1 +BITMAP +2444 +2248 +2FFE +2802 +FBFA +2208 +23F8 +2000 +3BF8 +E040 +27FC +2040 +2FFE +2040 +61C0 +ENDCHAR +STARTCHAR uni6492 +ENCODING 25746 +BBX 15 15 1 -1 +BITMAP +2290 +2290 +27D0 +229E +F2A4 +2FE4 +2044 +2794 +3494 +E788 +2488 +2798 +2494 +24A4 +65C2 +ENDCHAR +STARTCHAR uni6493 +ENCODING 25747 +BBX 15 15 1 -1 +BITMAP +2040 +23F8 +2040 +27FC +F000 +2208 +2FBE +2208 +3388 +EE3E +2000 +2FFE +2110 +2212 +6C0E +ENDCHAR +STARTCHAR uni6494 +ENCODING 25748 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +11FC +FD04 +11FC +1420 +1BFE +3000 +D1FC +1104 +11FC +1020 +1124 +5222 +2060 +ENDCHAR +STARTCHAR uni6495 +ENCODING 25749 +BBX 15 15 1 -1 +BITMAP +2904 +2938 +3FA0 +2920 +F93E +2F24 +2924 +2924 +3F24 +E924 +2924 +3FA4 +2024 +2544 +6884 +ENDCHAR +STARTCHAR uni6496 +ENCODING 25750 +BBX 15 16 0 -2 +BITMAP +2008 +2788 +2088 +2110 +FFDE +2494 +24A4 +2794 +3494 +E794 +2494 +24C8 +2788 +2C94 +A0A4 +40C2 +ENDCHAR +STARTCHAR uni6497 +ENCODING 25751 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +11FC +1088 +FC88 +13FE +1020 +15FC +1924 +31FC +D124 +11FC +1000 +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni6498 +ENCODING 25752 +BBX 15 16 0 -2 +BITMAP +1210 +1210 +13DE +1228 +FD44 +10A0 +1510 +1A08 +35F6 +D000 +1000 +13F8 +1208 +1208 +53F8 +2208 +ENDCHAR +STARTCHAR uni6499 +ENCODING 25753 +BBX 15 16 0 -2 +BITMAP +2108 +2090 +27FE +2090 +FBFC +2294 +231C +2A04 +33FC +E204 +23FC +2008 +27FE +2108 +A0A8 +4010 +ENDCHAR +STARTCHAR uni649A +ENCODING 25754 +BBX 15 15 1 -1 +BITMAP +2410 +2414 +2792 +2490 +FAFE +3510 +2328 +2228 +3444 +E882 +2400 +2524 +2924 +2892 +6892 +ENDCHAR +STARTCHAR uni649B +ENCODING 25755 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +10A8 +13FE +FCA8 +1124 +1222 +1104 +1904 +31DE +D244 +1554 +109E +1104 +5204 +2404 +ENDCHAR +STARTCHAR uni649C +ENCODING 25756 +BBX 15 16 0 -2 +BITMAP +2020 +27A4 +20A8 +2292 +F914 +2208 +25F4 +2802 +33F8 +E208 +2208 +23F8 +2208 +2110 +AFFE +4000 +ENDCHAR +STARTCHAR uni649D +ENCODING 25757 +BBX 15 15 1 -1 +BITMAP +2038 +27C8 +2484 +2044 +F7F8 +2408 +27FC +2404 +3404 +E7FE +2802 +282A +3296 +2442 +641C +ENDCHAR +STARTCHAR uni649E +ENCODING 25758 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2110 +FFFE +2000 +23F8 +2248 +3BF8 +E248 +23F8 +2040 +27FC +2040 +6FFE +ENDCHAR +STARTCHAR uni649F +ENCODING 25759 +BBX 15 15 1 -1 +BITMAP +2038 +27C0 +2080 +2FFE +F110 +23F8 +2D16 +21F0 +3000 +E7FC +2404 +25F4 +2514 +25F4 +640C +ENDCHAR +STARTCHAR uni64A0 +ENCODING 25760 +BBX 15 16 0 -2 +BITMAP +2110 +2114 +2112 +27D2 +F910 +27DE +2470 +2FD2 +3452 +E7D4 +2114 +2FD8 +210A +211A +A126 +4142 +ENDCHAR +STARTCHAR uni64A1 +ENCODING 25761 +BBX 15 16 0 -2 +BITMAP +2080 +2110 +23F8 +2210 +FCA4 +27BC +2040 +28A0 +3358 +EC46 +2048 +2264 +2252 +2452 +A140 +4080 +ENDCHAR +STARTCHAR uni64A2 +ENCODING 25762 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +13FE +FE52 +13FE +1000 +15FC +1904 +31FC +D104 +11FC +1020 +13FE +5020 +2020 +ENDCHAR +STARTCHAR uni64A3 +ENCODING 25763 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +1252 +FBDE +1000 +15FC +1924 +31FC +D124 +11FC +1020 +13FE +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni64A4 +ENCODING 25764 +BBX 15 15 1 -1 +BITMAP +2210 +2210 +3FD0 +251E +F9A4 +2E44 +2014 +2F94 +3894 +EF88 +2888 +2F98 +2894 +28A4 +69C2 +ENDCHAR +STARTCHAR uni64A5 +ENCODING 25765 +BBX 15 15 1 -1 +BITMAP +23C4 +28A8 +2512 +220C +F404 +2F7A +2148 +274A +3486 +E400 +27FC +2144 +2128 +2118 +6666 +ENDCHAR +STARTCHAR uni64A6 +ENCODING 25766 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FC +1110 +FA48 +1446 +13F8 +1850 +37FC +D080 +13F8 +1D08 +11F8 +1108 +51F8 +2108 +ENDCHAR +STARTCHAR uni64A7 +ENCODING 25767 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +221C +22A4 +F4C8 +2F3E +212A +222A +34AA +EFBE +20A0 +2022 +2AA2 +2AA2 +A81E +4000 +ENDCHAR +STARTCHAR uni64A8 +ENCODING 25768 +BBX 15 16 0 -2 +BITMAP +1090 +1088 +11FE +1110 +FB10 +15FE +1110 +1910 +31FE +D110 +1110 +11FE +1100 +12A4 +5252 +2452 +ENDCHAR +STARTCHAR uni64A9 +ENCODING 25769 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +27FE +2090 +FA94 +2108 +23FC +250A +39F8 +E108 +21F8 +2020 +2128 +2626 +6060 +ENDCHAR +STARTCHAR uni64AA +ENCODING 25770 +BBX 15 16 0 -2 +BITMAP +2080 +2110 +23F8 +2080 +F7FE +2248 +25F4 +2842 +33F8 +E248 +23F8 +2248 +23F8 +2040 +A7FC +4040 +ENDCHAR +STARTCHAR uni64AB +ENCODING 25771 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +27FE +2AA8 +F2A8 +22A8 +2FFE +22A8 +32A8 +E2A8 +2FFE +2000 +22A8 +2454 +6852 +ENDCHAR +STARTCHAR uni64AC +ENCODING 25772 +BBX 15 16 0 -2 +BITMAP +1038 +13C0 +1078 +13C0 +FC78 +13C4 +103C +1400 +18C6 +3738 +D1CE +1738 +11CE +1738 +514A +2186 +ENDCHAR +STARTCHAR uni64AD +ENCODING 25773 +BBX 15 15 1 -1 +BITMAP +2038 +27C0 +2444 +2248 +FFFE +2150 +2248 +2444 +3802 +E7FC +2444 +27FC +2444 +2444 +67FC +ENDCHAR +STARTCHAR uni64AE +ENCODING 25774 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +23F8 +F208 +23F8 +2000 +2FFE +3480 +E7BC +2494 +2794 +2488 +2794 +6CA2 +ENDCHAR +STARTCHAR uni64AF +ENCODING 25775 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +13FE +1020 +FDFC +1040 +13FE +1480 +19FC +3284 +D4FC +1084 +10FC +1084 +50FC +2084 +ENDCHAR +STARTCHAR uni64B0 +ENCODING 25776 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +28A2 +2FBE +F820 +28A2 +279E +2110 +37FC +E110 +2110 +2FFE +2080 +2308 +6C06 +ENDCHAR +STARTCHAR uni64B1 +ENCODING 25777 +BBX 15 16 0 -2 +BITMAP +2020 +2720 +25FE +2540 +FD7C +2690 +257E +2D00 +357C +E544 +257C +2644 +247C +2444 +A444 +444C +ENDCHAR +STARTCHAR uni64B2 +ENCODING 25778 +BBX 15 15 1 -1 +BITMAP +24A4 +22A4 +22A8 +27FC +F910 +20A0 +27FC +2040 +3BF8 +E040 +2FFE +2040 +20A0 +2318 +6C06 +ENDCHAR +STARTCHAR uni64B3 +ENCODING 25779 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +2510 +F4BE +2822 +2744 +2210 +3210 +EF10 +2210 +2AA8 +2728 +2228 +2344 +AC44 +4082 +ENDCHAR +STARTCHAR uni64B4 +ENCODING 25780 +BBX 15 16 0 -2 +BITMAP +2210 +2110 +2FD0 +2010 +F7BE +24A4 +27D4 +2014 +3794 +E094 +2114 +21C8 +2F08 +2114 +A514 +4222 +ENDCHAR +STARTCHAR uni64B5 +ENCODING 25781 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13DE +1088 +FBDE +1088 +1154 +1A22 +33FC +D080 +1120 +13FC +1020 +17FE +5020 +2020 +ENDCHAR +STARTCHAR uni64B6 +ENCODING 25782 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +1000 +FDFC +10A8 +10A8 +17FE +18A8 +30A8 +D1FC +1020 +13FE +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni64B7 +ENCODING 25783 +BBX 15 16 0 -2 +BITMAP +2200 +22FE +2210 +2FA0 +F27C +2244 +2754 +2054 +3054 +E754 +2554 +2554 +2528 +2724 +A542 +4082 +ENDCHAR +STARTCHAR uni64B8 +ENCODING 25784 +BBX 15 16 0 -2 +BITMAP +2100 +23F0 +2410 +2FFC +F444 +27FC +2444 +27FC +3000 +EFFE +2000 +23F8 +2208 +23F8 +A208 +43F8 +ENDCHAR +STARTCHAR uni64B9 +ENCODING 25785 +BBX 15 15 1 -1 +BITMAP +2484 +2244 +2008 +2FFE +F802 +2BFA +2208 +23F8 +3208 +E3F8 +2208 +23F8 +2122 +2222 +6C1E +ENDCHAR +STARTCHAR uni64BA +ENCODING 25786 +BBX 14 16 0 -2 +BITMAP +2080 +2040 +27FC +2514 +FA48 +2444 +23F8 +2A48 +33F8 +E040 +27FC +2444 +27FC +2444 +A040 +4040 +ENDCHAR +STARTCHAR uni64BB +ENCODING 25787 +BBX 15 15 1 -1 +BITMAP +2820 +2820 +25FC +2020 +FBFE +2488 +2050 +3DFC +3420 +E5FC +2420 +27FE +2420 +2A20 +71FE +ENDCHAR +STARTCHAR uni64BC +ENCODING 25788 +BBX 15 15 1 -1 +BITMAP +2048 +2044 +2FFE +2840 +FBC4 +2824 +2BA8 +2A90 +3BAA +E844 +3180 +2048 +2524 +290A +70F8 +ENDCHAR +STARTCHAR uni64BD +ENCODING 25789 +BBX 15 16 0 -2 +BITMAP +2108 +2208 +27C8 +2450 +F7DE +2464 +27D4 +2214 +3114 +E7D4 +2214 +23C8 +2248 +2454 +A554 +48A2 +ENDCHAR +STARTCHAR uni64BE +ENCODING 25790 +BBX 15 15 1 -1 +BITMAP +2000 +28F8 +2488 +24B8 +F8A8 +24A8 +25FC +2104 +3D74 +E554 +2554 +2574 +250C +2A00 +71FE +ENDCHAR +STARTCHAR uni64BF +ENCODING 25791 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2318 +2C06 +F1F0 +2000 +27BC +24A4 +34A4 +E7BC +2000 +2208 +2208 +2514 +68A2 +ENDCHAR +STARTCHAR uni64C0 +ENCODING 25792 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +2114 +2FD4 +F122 +27C0 +245C +27C8 +3448 +E7C8 +213E +2FC8 +2108 +2108 +A108 +4108 +ENDCHAR +STARTCHAR uni64C1 +ENCODING 25793 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2FFE +2224 +F424 +287E +2AC8 +2448 +357C +E948 +2F48 +3A7C +2248 +2448 +687E +ENDCHAR +STARTCHAR uni64C2 +ENCODING 25794 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +2FFE +F842 +2B5A +2842 +2358 +3000 +E7FC +2444 +27FC +2444 +2444 +67FC +ENDCHAR +STARTCHAR uni64C3 +ENCODING 25795 +BBX 15 16 0 -2 +BITMAP +1090 +13FC +1294 +13FC +FE94 +13FC +1000 +17FC +1A00 +32F8 +D200 +13FE +1520 +1514 +5548 +2986 +ENDCHAR +STARTCHAR uni64C4 +ENCODING 25796 +BBX 15 15 1 -1 +BITMAP +2040 +2078 +2040 +27FC +FC82 +27FE +2524 +25FC +3D24 +E5FC +2820 +2FFE +3082 +2102 +661C +ENDCHAR +STARTCHAR uni64C5 +ENCODING 25797 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2000 +F7FC +2404 +25F4 +2514 +35F4 +E404 +27FC +2208 +23F8 +2208 +6FFE +ENDCHAR +STARTCHAR uni64C6 +ENCODING 25798 +BBX 15 16 0 -2 +BITMAP +1108 +1108 +17FE +1108 +F844 +13F4 +1048 +1850 +37FE +D080 +11FC +1304 +15FC +1904 +51FC +2104 +ENDCHAR +STARTCHAR uni64C7 +ENCODING 25799 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2524 +27FC +F040 +27FC +2040 +2FFE +3110 +E7FC +2040 +27FC +2040 +2040 +6040 +ENDCHAR +STARTCHAR uni64C8 +ENCODING 25800 +BBX 15 16 0 -2 +BITMAP +1050 +1252 +1154 +1050 +FBFE +1088 +1450 +1BFE +3020 +D1FC +1020 +13FE +10A8 +1124 +5622 +2020 +ENDCHAR +STARTCHAR uni64C9 +ENCODING 25801 +BBX 14 16 0 -2 +BITMAP +1000 +13F8 +12A8 +12A8 +FBF8 +1100 +13FC +1C84 +33E4 +D2A4 +12A4 +13E4 +1094 +17F4 +5014 +2008 +ENDCHAR +STARTCHAR uni64CA +ENCODING 25802 +BBX 15 15 1 -1 +BITMAP +0800 +083C +FFA4 +2A46 +3E00 +2A7E +FFA4 +4918 +7FE6 +0080 +3FFC +0080 +FFFE +0080 +0380 +ENDCHAR +STARTCHAR uni64CB +ENCODING 25803 +BBX 15 15 1 -1 +BITMAP +2444 +2444 +2248 +2FFE +F802 +2BFA +2208 +23F8 +3000 +E7FC +2444 +27FC +2444 +2444 +67FC +ENDCHAR +STARTCHAR uni64CC +ENCODING 25804 +BBX 15 15 1 -1 +BITMAP +2420 +2420 +2FBE +2A48 +F104 +2040 +2FFE +2040 +3248 +E248 +2554 +24A4 +2110 +2208 +6C06 +ENDCHAR +STARTCHAR uni64CD +ENCODING 25805 +BBX 15 15 1 -1 +BITMAP +2000 +21F0 +2110 +21F0 +F000 +27BC +24A4 +24A4 +37BC +E040 +2FFE +2150 +2248 +2C46 +6040 +ENDCHAR +STARTCHAR uni64CE +ENCODING 25806 +BBX 15 15 1 -1 +BITMAP +2420 +FF20 +247E +7E84 +C248 +7A30 +4A48 +7DB6 +0FC0 +0080 +3FF8 +0080 +FFFE +0080 +0380 +ENDCHAR +STARTCHAR uni64CF +ENCODING 25807 +BBX 15 16 0 -2 +BITMAP +2288 +2288 +27E8 +2290 +FC1E +27E4 +2454 +2854 +3754 +E554 +2554 +2748 +2548 +2054 +A294 +4122 +ENDCHAR +STARTCHAR uni64D0 +ENCODING 25808 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2294 +23FC +F800 +27FE +2000 +23FC +3A04 +E3FC +20A2 +212C +2710 +21C8 +6306 +ENDCHAR +STARTCHAR uni64D1 +ENCODING 25809 +BBX 15 16 0 -2 +BITMAP +1010 +13D4 +1252 +1252 +FBD0 +1010 +17FE +1A50 +33D2 +D252 +13D4 +1254 +12EA +174A +5056 +2062 +ENDCHAR +STARTCHAR uni64D2 +ENCODING 25810 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2110 +2248 +FDF6 +22A8 +2248 +22A8 +33F8 +E040 +27FC +2484 +2524 +27D4 +640C +ENDCHAR +STARTCHAR uni64D3 +ENCODING 25811 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2428 +2624 +FD7E +2448 +24C8 +2C7E +3648 +E57E +2448 +2448 +257E +2640 +A7FE +4000 +ENDCHAR +STARTCHAR uni64D4 +ENCODING 25812 +BBX 15 15 1 -1 +BITMAP +2080 +21F8 +2210 +2FFE +F488 +270E +24F8 +2400 +37FE +E400 +24F8 +2400 +29FC +2904 +69FC +ENDCHAR +STARTCHAR uni64D5 +ENCODING 25813 +BBX 15 15 1 -1 +BITMAP +2220 +2240 +27FE +2440 +FFFC +2440 +27FC +2440 +37FE +E000 +2F3C +2924 +29E4 +2804 +681C +ENDCHAR +STARTCHAR uni64D6 +ENCODING 25814 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +11FC +FD04 +11FC +1104 +15FC +1880 +31FE +D222 +1552 +1102 +11FA +500A +2004 +ENDCHAR +STARTCHAR uni64D7 +ENCODING 25815 +BBX 15 15 1 -1 +BITMAP +2010 +2F10 +297C +2900 +F944 +2F44 +2828 +28FE +3F10 +E910 +297C +2910 +2910 +2F10 +6010 +ENDCHAR +STARTCHAR uni64D8 +ENCODING 25816 +BBX 15 15 1 -1 +BITMAP +0010 +7CFE +4444 +7C28 +40FE +BC10 +A4FE +BC10 +03D0 +0080 +3FF8 +0080 +FFFE +0080 +0380 +ENDCHAR +STARTCHAR uni64D9 +ENCODING 25817 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +13FE +1222 +FEAA +1222 +13FE +1672 +1AAA +3202 +D020 +13FE +1020 +1050 +5088 +2306 +ENDCHAR +STARTCHAR uni64DA +ENCODING 25818 +BBX 15 15 1 -1 +BITMAP +2080 +20FC +2080 +2FFE +F884 +2BF0 +2884 +287C +3800 +EFFE +2944 +2AA8 +2970 +30A8 +6766 +ENDCHAR +STARTCHAR uni64DB +ENCODING 25819 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +1000 +FD48 +13FE +1148 +1578 +1900 +31FC +D020 +13FE +1070 +10A8 +5326 +2020 +ENDCHAR +STARTCHAR uni64DC +ENCODING 25820 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +27CC +210A +F908 +27DE +2448 +2EC8 +3548 +E7C8 +2554 +27D4 +2554 +2554 +A454 +44E2 +ENDCHAR +STARTCHAR uni64DD +ENCODING 25821 +BBX 15 16 0 -2 +BITMAP +2000 +27BC +24A4 +24BC +F7A4 +24BC +24A4 +27A4 +3024 +E04C +23F8 +22A8 +22A8 +22A8 +AFFE +4000 +ENDCHAR +STARTCHAR uni64DE +ENCODING 25822 +BBX 15 16 0 -2 +BITMAP +2210 +2A90 +2710 +2220 +FFBE +2244 +27A4 +2AA4 +3228 +EFA8 +2490 +2890 +2528 +2228 +A544 +4882 +ENDCHAR +STARTCHAR uni64DF +ENCODING 25823 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2248 +F444 +2FFE +2444 +26EC +3554 +E6EC +2444 +26EC +2554 +26EC +2444 +A454 +4408 +ENDCHAR +STARTCHAR uni64E0 +ENCODING 25824 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +20A0 +FF5E +2554 +2554 +2B5A +3000 +E404 +27FC +2404 +27FC +2804 +7004 +ENDCHAR +STARTCHAR uni64E1 +ENCODING 25825 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2040 +F7FC +2208 +2FFE +2802 +37FC +E108 +27F4 +2040 +27FC +2040 +6FFE +ENDCHAR +STARTCHAR uni64E2 +ENCODING 25826 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +2492 +29A6 +F28A +2CB2 +2196 +2220 +37FE +EC20 +27FC +2420 +27FC +2420 +67FE +ENDCHAR +STARTCHAR uni64E3 +ENCODING 25827 +BBX 15 15 1 -1 +BITMAP +2040 +27FC +2040 +23F8 +F000 +2FFE +2002 +23FA +3040 +EFFE +2004 +2F7E +2944 +2F24 +600C +ENDCHAR +STARTCHAR uni64E4 +ENCODING 25828 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23F8 +2208 +FBF8 +2208 +27FC +2444 +3FFC +E444 +27FC +2000 +2FFE +2208 +6408 +ENDCHAR +STARTCHAR uni64E5 +ENCODING 25829 +BBX 15 15 1 -1 +BITMAP +7E40 +487E +7E80 +427C +7E00 +48FE +7EAA +00AA +1FFE +0100 +3FF8 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni64E6 +ENCODING 25830 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2802 +FBFE +24A4 +2AA8 +2510 +3208 +EDF6 +2000 +27FC +2040 +2248 +6CC6 +ENDCHAR +STARTCHAR uni64E7 +ENCODING 25831 +BBX 15 15 1 -1 +BITMAP +0900 +31B8 +2108 +39B8 +2288 +2288 +FFFE +1010 +27C8 +4104 +9FF2 +0100 +7FFC +0100 +0700 +ENDCHAR +STARTCHAR uni64E8 +ENCODING 25832 +BBX 15 16 0 -2 +BITMAP +2008 +2068 +2F88 +28EE +F88A +2BF2 +2AA4 +2AC4 +3B84 +EAA4 +2A64 +2A0A +2AEA +2AAA +AAAA +5530 +ENDCHAR +STARTCHAR uni64E9 +ENCODING 25833 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2040 +2FFE +F842 +2358 +2040 +2B58 +3000 +EFFE +2040 +27FC +24A4 +24A4 +A4A4 +440C +ENDCHAR +STARTCHAR uni64EA +ENCODING 25834 +BBX 15 16 0 -2 +BITMAP +3FFE +2888 +2F8A +2008 +2FBE +2888 +2F88 +2894 +29A2 +27F8 +2040 +27FC +2040 +5FFE +4040 +80C0 +ENDCHAR +STARTCHAR uni64EB +ENCODING 25835 +BBX 15 16 0 -2 +BITMAP +2000 +2FFE +2808 +2BC8 +FA4C +2BCA +2A48 +2BDE +3808 +EBC8 +2A48 +2BD4 +2A54 +2BD4 +AA54 +52E2 +ENDCHAR +STARTCHAR uni64EC +ENCODING 25836 +BBX 15 15 1 -1 +BITMAP +2800 +2B7E +2C04 +2928 +F910 +277E +2812 +2F54 +3450 +E45C +3F50 +2650 +2570 +2890 +710E +ENDCHAR +STARTCHAR uni64ED +ENCODING 25837 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +10A8 +1090 +FDFE +1320 +11FC +1520 +19FC +3120 +D1FE +1100 +13FC +1088 +5070 +238E +ENDCHAR +STARTCHAR uni64EE +ENCODING 25838 +BBX 15 16 0 -2 +BITMAP +2110 +2114 +27D2 +2110 +FFFE +2290 +2450 +2FF4 +3494 +E7F4 +2494 +27E8 +248A +27FA +A426 +4042 +ENDCHAR +STARTCHAR uni64EF +ENCODING 25839 +BBX 15 15 1 -1 +BITMAP +2040 +2FFE +2802 +27FC +F048 +2C56 +23FC +2E04 +33FC +E204 +23FC +2204 +23FC +2108 +6606 +ENDCHAR +STARTCHAR uni64F0 +ENCODING 25840 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1222 +FD54 +114A +123A +1000 +19FC +3154 +D3FE +1000 +11FC +1020 +50A0 +2040 +ENDCHAR +STARTCHAR uni64F1 +ENCODING 25841 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +28A2 +2FBE +F8A2 +2FBE +2882 +29F2 +3B12 +E8E2 +2B1A +29F2 +2912 +29F2 +680E +ENDCHAR +STARTCHAR uni64F2 +ENCODING 25842 +BBX 15 15 1 -1 +BITMAP +2580 +284E +3FFA +228A +FFEA +2AAC +2CEC +282A +3FEA +E82A +2FEA +210C +3FF8 +2288 +6C68 +ENDCHAR +STARTCHAR uni64F3 +ENCODING 25843 +BBX 15 16 0 -2 +BITMAP +1108 +1108 +11EE +1294 +FC42 +1000 +13DE +1652 +1BD2 +3252 +D3D2 +121A +1294 +1350 +5210 +2010 +ENDCHAR +STARTCHAR uni64F4 +ENCODING 25844 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +27FE +2450 +FDFC +2450 +27FE +2420 +3DFC +E524 +25FC +2524 +25FC +2888 +6306 +ENDCHAR +STARTCHAR uni64F5 +ENCODING 25845 +BBX 15 16 0 -2 +BITMAP +2020 +27FE +2488 +27DE +F488 +25DC +26AA +248C +35F0 +E420 +25FC +2420 +27FE +2820 +A8A0 +5040 +ENDCHAR +STARTCHAR uni64F6 +ENCODING 25846 +BBX 15 15 1 -1 +BITMAP +2420 +2420 +27BE +2A50 +F208 +2110 +2FFE +2000 +3784 +E4A4 +27A4 +24A4 +27A4 +2484 +659C +ENDCHAR +STARTCHAR uni64F7 +ENCODING 25847 +BBX 15 15 1 -1 +BITMAP +2200 +227E +2210 +2FBC +F224 +223C +2FA4 +2024 +303C +EFA4 +28A4 +28BC +2890 +2FA4 +6042 +ENDCHAR +STARTCHAR uni64F8 +ENCODING 25848 +BBX 15 16 0 -2 +BITMAP +1124 +1248 +1124 +1000 +FBFC +1294 +1664 +1A94 +33FC +D248 +1368 +1248 +136A +124A +5246 +2362 +ENDCHAR +STARTCHAR uni64F9 +ENCODING 25849 +BBX 15 16 0 -2 +BITMAP +2290 +2290 +27D0 +229E +FB92 +2122 +27C8 +2D48 +37C8 +E108 +27C8 +2114 +2FD4 +2294 +A454 +4822 +ENDCHAR +STARTCHAR uni64FA +ENCODING 25850 +BBX 15 15 1 -1 +BITMAP +2000 +2FFC +2924 +2FFC +F200 +24A4 +2F78 +2022 +379E +E480 +27A4 +24B8 +27A0 +24A2 +659E +ENDCHAR +STARTCHAR uni64FB +ENCODING 25851 +BBX 15 15 1 -1 +BITMAP +2108 +27C8 +2548 +2FFE +F554 +27F4 +2114 +27D4 +354C +E7C8 +2208 +2FF8 +2454 +23A4 +6CC2 +ENDCHAR +STARTCHAR uni64FC +ENCODING 25852 +BBX 15 16 0 -2 +BITMAP +2100 +23F0 +2410 +2FFC +F444 +27FC +2444 +27FC +3524 +E892 +23F8 +2208 +23F8 +2208 +A3F8 +4208 +ENDCHAR +STARTCHAR uni64FD +ENCODING 25853 +BBX 15 15 1 -1 +BITMAP +2448 +2488 +29F2 +2B34 +F528 +25E8 +2930 +2B24 +3DFA +E040 +2FFE +2150 +2248 +2C46 +6040 +ENDCHAR +STARTCHAR uni64FE +ENCODING 25854 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2080 +23F8 +F208 +23F8 +2208 +2FFE +3AAA +EC74 +2100 +23FC +2E08 +21F0 +6E0E +ENDCHAR +STARTCHAR uni64FF +ENCODING 25855 +BBX 15 15 1 -1 +BITMAP +2010 +2410 +24FE +2244 +F428 +24FE +2292 +20FE +3692 +E2BA +22AA +22BA +2286 +2500 +68FE +ENDCHAR +STARTCHAR uni6500 +ENCODING 25856 +BBX 15 15 1 -1 +BITMAP +2288 +F93E +2288 +711C +AAAA +2108 +FFFE +0440 +1FB0 +E10E +1FF0 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni6501 +ENCODING 25857 +BBX 15 16 0 -2 +BITMAP +2208 +2110 +27FC +2040 +FBF8 +2080 +27FC +2948 +33FC +E60A +2BF8 +2208 +23FA +2234 +A28C +4302 +ENDCHAR +STARTCHAR uni6502 +ENCODING 25858 +BBX 15 16 0 -2 +BITMAP +23F8 +2248 +2248 +23F8 +F248 +2248 +23F8 +2000 +3FBE +EAAA +2AAA +2FBE +2AAA +2AAA +AFBE +48A2 +ENDCHAR +STARTCHAR uni6503 +ENCODING 25859 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FD10 +11DE +1252 +1554 +1A88 +3174 +D202 +11FC +1020 +1124 +5222 +2060 +ENDCHAR +STARTCHAR uni6504 +ENCODING 25860 +BBX 15 15 1 -1 +BITMAP +2080 +20F8 +2080 +2FFE +F882 +2BF0 +2884 +2BFC +3A48 +EBF8 +2A48 +2BF8 +3444 +252A +68FA +ENDCHAR +STARTCHAR uni6505 +ENCODING 25861 +BBX 15 15 1 -1 +BITMAP +2208 +2FBE +2208 +2FBE +F208 +2D16 +23F8 +2208 +33F8 +E208 +23F8 +2208 +23F8 +2110 +660C +ENDCHAR +STARTCHAR uni6506 +ENCODING 25862 +BBX 15 16 0 -2 +BITMAP +1088 +13DE +1088 +13DE +FD54 +1222 +11FC +1420 +19FC +3124 +D1FC +1124 +11FC +1020 +53FE +2020 +ENDCHAR +STARTCHAR uni6507 +ENCODING 25863 +BBX 15 16 0 -2 +BITMAP +2040 +2FFE +2842 +27FC +F840 +23F8 +2040 +2FFC +3040 +E7FC +24A4 +27FC +2040 +2524 +A52A +48FA +ENDCHAR +STARTCHAR uni6508 +ENCODING 25864 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1250 +13FE +FA52 +13FE +1294 +1AD8 +3292 +D2CE +1208 +12F0 +1220 +15FC +54A8 +2B26 +ENDCHAR +STARTCHAR uni6509 +ENCODING 25865 +BBX 15 16 0 -2 +BITMAP +27FC +2040 +27FE +2442 +FB5C +2040 +275C +2920 +33FC +E620 +2BFC +2220 +23FC +2220 +A3FE +4200 +ENDCHAR +STARTCHAR uni650A +ENCODING 25866 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2444 +2598 +FC88 +27DE +2488 +2DDC +36AA +E488 +2420 +2520 +253C +2920 +A920 +57FE +ENDCHAR +STARTCHAR uni650B +ENCODING 25867 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +27CE +2112 +F924 +27DE +2552 +2D5E +37D2 +E11E +2392 +255E +2940 +2114 +A112 +4122 +ENDCHAR +STARTCHAR uni650C +ENCODING 25868 +BBX 15 16 0 -2 +BITMAP +2FFE +2802 +2BFA +2AAA +FBFA +2802 +2BFA +2802 +39F2 +E912 +29F2 +28AA +2992 +2ACA +A882 +4FFE +ENDCHAR +STARTCHAR uni650D +ENCODING 25869 +BBX 15 16 0 -2 +BITMAP +4080 +7FFC +4800 +4FF8 +E000 +4FF8 +4808 +4FF8 +6080 +DC9C +57D4 +5D54 +555C +5C96 +5556 +EE22 +ENDCHAR +STARTCHAR uni650E +ENCODING 25870 +BBX 15 16 0 -2 +BITMAP +1040 +107C +1040 +13FC +FE44 +13F0 +1244 +16FC +1AA8 +32F8 +D2A8 +12F8 +1200 +15FC +5554 +2BFE +ENDCHAR +STARTCHAR uni650F +ENCODING 25871 +BBX 15 15 1 -1 +BITMAP +4220 +4220 +5FFE +48A0 +E53C +5FC4 +403C +4FA0 +68BC +CFA0 +48BC +4FA0 +48BC +48A2 +C99E +ENDCHAR +STARTCHAR uni6510 +ENCODING 25872 +BBX 15 16 0 -2 +BITMAP +1040 +17FE +1492 +13FC +FC90 +13FC +1090 +17FE +1948 +3224 +D5FA +10A4 +11A8 +1290 +54C8 +2086 +ENDCHAR +STARTCHAR uni6511 +ENCODING 25873 +BBX 15 16 0 -2 +BITMAP +1140 +126C +1244 +136C +FEA4 +13AC +12A4 +17FE +1908 +3244 +D5F2 +1040 +17FC +1040 +5040 +2040 +ENDCHAR +STARTCHAR uni6512 +ENCODING 25874 +BBX 15 16 0 -2 +BITMAP +2108 +2528 +27BE +2948 +F7BE +2318 +25AA +2946 +3000 +E3F8 +2208 +2248 +2248 +20B0 +A108 +4604 +ENDCHAR +STARTCHAR uni6513 +ENCODING 25875 +BBX 15 16 0 -2 +BITMAP +2040 +27FE +2492 +23FC +F890 +23FC +2090 +2FFE +3108 +E3FC +250A +21F8 +2240 +227C +A540 +48FE +ENDCHAR +STARTCHAR uni6514 +ENCODING 25876 +BBX 15 15 1 -1 +BITMAP +2FBE +28A2 +2FBE +28A2 +FFBE +2842 +2BFA +2842 +3BFA +EB5A +2AEA +2BFA +2952 +2A4A +6846 +ENDCHAR +STARTCHAR uni6515 +ENCODING 25877 +BBX 15 16 0 -2 +BITMAP +2448 +244C +2AAA +F008 +2FFE +2288 +2EE8 +328A +EEEA +228C +2EEC +2288 +22EA +2F1A +A426 +4042 +ENDCHAR +STARTCHAR uni6516 +ENCODING 25878 +BBX 15 15 1 -1 +BITMAP +27BC +24A4 +27BC +24A4 +F7BC +24A4 +27BC +22A8 +3444 +E100 +2FFE +2208 +2710 +20F0 +670C +ENDCHAR +STARTCHAR uni6517 +ENCODING 25879 +BBX 15 16 0 -2 +BITMAP +2040 +27FE +24A0 +27FC +FCA4 +27FC +2514 +2DD8 +3512 +E54E +25A4 +24A8 +27FE +28A8 +A924 +5222 +ENDCHAR +STARTCHAR uni6518 +ENCODING 25880 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +2000 +F3B8 +22A8 +27FC +2110 +37FC +E110 +2FFE +2124 +3E28 +23D0 +6E0E +ENDCHAR +STARTCHAR uni6519 +ENCODING 25881 +BBX 15 16 0 -2 +BITMAP +11F0 +1210 +17FC +1204 +FBFC +1224 +13B8 +1A22 +31FE +D210 +17FC +1244 +13FC +10D0 +514A +263E +ENDCHAR +STARTCHAR uni651A +ENCODING 25882 +BBX 15 16 0 -2 +BITMAP +1088 +12AA +12DC +1488 +F954 +1222 +17FE +1A02 +30F8 +D088 +10F8 +1000 +11FC +1104 +51FC +2104 +ENDCHAR +STARTCHAR uni651B +ENCODING 25883 +BBX 15 16 0 -2 +BITMAP +1040 +17FE +1492 +1108 +FC80 +131C +1204 +179C +1A04 +33FC +D248 +1368 +1248 +136A +5246 +2362 +ENDCHAR +STARTCHAR uni651C +ENCODING 25884 +BBX 15 15 1 -1 +BITMAP +2040 +2444 +27FC +2220 +F7FC +2C40 +27FC +2440 +37FC +E440 +2FFE +2924 +2BFC +2D24 +69EC +ENDCHAR +STARTCHAR uni651D +ENCODING 25885 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2110 +21F0 +F910 +21FC +2710 +2010 +3FFE +E4A4 +27BC +24A4 +27BC +2CE4 +6084 +ENDCHAR +STARTCHAR uni651E +ENCODING 25886 +BBX 15 15 1 -1 +BITMAP +2000 +2FFC +2924 +2FFC +F210 +2214 +243E +2D68 +323C +E5A8 +2EA8 +223C +2AA8 +2AA8 +623E +ENDCHAR +STARTCHAR uni651F +ENCODING 25887 +BBX 15 16 0 -2 +BITMAP +2040 +27FE +24A0 +27FC +FCA4 +27FC +2400 +2DFC +3504 +E574 +2524 +25FC +2574 +29AC +A924 +51FC +ENDCHAR +STARTCHAR uni6520 +ENCODING 25888 +BBX 15 16 0 -2 +BITMAP +2020 +27FE +2488 +27DE +FC88 +25DC +26AA +2C88 +3450 +E7DE +2450 +25DC +2450 +2BDE +A850 +5050 +ENDCHAR +STARTCHAR uni6521 +ENCODING 25889 +BBX 15 16 0 -2 +BITMAP +2418 +2214 +2F90 +253E +FAA8 +2DE8 +28BE +2FA8 +3228 +EFBE +2AA8 +2AA8 +2BA8 +28BE +AAA0 +4920 +ENDCHAR +STARTCHAR uni6522 +ENCODING 25890 +BBX 15 15 1 -1 +BITMAP +2108 +2528 +27BE +2948 +FFFE +2294 +22A4 +24C6 +3BFC +E204 +23FC +2204 +23FC +2108 +6606 +ENDCHAR +STARTCHAR uni6523 +ENCODING 25891 +BBX 15 15 1 -1 +BITMAP +2388 +4012 +D7F4 +2008 +5B96 +E83A +338C +AAAA +27C8 +0100 +3FF8 +0100 +FFFE +0100 +0700 +ENDCHAR +STARTCHAR uni6524 +ENCODING 25892 +BBX 15 15 1 -1 +BITMAP +2512 +3FD2 +2514 +253E +FFE8 +2AA8 +2ABE +2FA8 +3228 +EFA8 +223E +3FE8 +2528 +28A8 +70BE +ENDCHAR +STARTCHAR uni6525 +ENCODING 25893 +BBX 15 16 0 -2 +BITMAP +2210 +23DE +2528 +2084 +FBFC +22A4 +2254 +2BFC +3080 +E7FE +22A8 +25E4 +2852 +23F8 +A150 +42C8 +ENDCHAR +STARTCHAR uni6526 +ENCODING 25894 +BBX 15 16 0 -2 +BITMAP +2FBE +2000 +27BC +24A4 +F6B4 +24A4 +2040 +27FE +34A0 +E7FC +24A4 +27FC +2512 +29DC +A912 +51CE +ENDCHAR +STARTCHAR uni6527 +ENCODING 25895 +BBX 15 16 0 -2 +BITMAP +2200 +221E +2FC4 +2208 +F79E +2492 +2792 +249E +3792 +E49E +2792 +2492 +2FDE +2500 +A48C +4892 +ENDCHAR +STARTCHAR uni6528 +ENCODING 25896 +BBX 15 16 0 -2 +BITMAP +2040 +2FFE +2A0A +2434 +F3C0 +2290 +2288 +22A4 +34D0 +E18E +2E74 +2B54 +2AD4 +2A52 +AB5A +5294 +ENDCHAR +STARTCHAR uni6529 +ENCODING 25897 +BBX 15 15 1 -1 +BITMAP +2444 +2248 +2FFE +2A0A +FBFA +2000 +27FC +2444 +3554 +E554 +27FC +2040 +2FFE +2524 +6892 +ENDCHAR +STARTCHAR uni652A +ENCODING 25898 +BBX 15 15 1 -1 +BITMAP +2100 +26AC +2444 +26AC +F444 +26AC +2404 +2FFE +3A0A +EBFA +2208 +23F8 +2110 +2112 +6E1E +ENDCHAR +STARTCHAR uni652B +ENCODING 25899 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +24A4 +27BC +F4A4 +27FE +2C40 +27FC +3440 +E7FC +2440 +3FFE +2210 +21E0 +7E1E +ENDCHAR +STARTCHAR uni652C +ENCODING 25900 +BBX 15 15 1 -1 +BITMAP +2F40 +2A7E +2F80 +297C +FF54 +2A54 +2FFE +2408 +37F8 +E408 +27F8 +2408 +27F8 +2222 +6C1E +ENDCHAR +STARTCHAR uni652D +ENCODING 25901 +BBX 15 16 0 -2 +BITMAP +21F0 +2210 +23E0 +2020 +F7FC +2188 +2650 +21A8 +3664 +E1A0 +2248 +2FBE +2AAA +2FBE +A28A +4FBE +ENDCHAR +STARTCHAR uni652E +ENCODING 25902 +BBX 15 16 0 -2 +BITMAP +2040 +27FC +2248 +23F8 +F040 +2FFE +2AAA +23B8 +3110 +E7FC +2110 +2FFE +2128 +2310 +AD48 +4186 +ENDCHAR +STARTCHAR uni652F +ENCODING 25903 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +0200 +FFF8 +0200 +0200 +3FE0 +0020 +1020 +0840 +0480 +0300 +0480 +1860 +E01C +ENDCHAR +STARTCHAR uni6530 +ENCODING 25904 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FE20 +10FC +1024 +FC24 +4424 +4424 +2844 +2844 +1094 +1908 +2400 +43FE +8000 +ENDCHAR +STARTCHAR uni6531 +ENCODING 25905 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +FDFE +0020 +0820 +8820 +89FC +4884 +4888 +5048 +5050 +1C20 +E050 +4188 +0606 +ENDCHAR +STARTCHAR uni6532 +ENCODING 25906 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FEFE +1410 +2210 +40FC +0044 +FF44 +0244 +7A28 +4A28 +4A10 +7A28 +0244 +0E82 +ENDCHAR +STARTCHAR uni6533 +ENCODING 25907 +BBX 15 16 0 -2 +BITMAP +11FC +1004 +10FC +FE04 +11FC +1000 +FDDE +4492 +47DE +2808 +2BFE +1108 +18A8 +2410 +43FE +8000 +ENDCHAR +STARTCHAR uni6534 +ENCODING 25908 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +03F8 +0200 +0200 +7FC0 +1040 +1040 +0880 +0500 +0200 +0500 +0880 +3060 +C018 +ENDCHAR +STARTCHAR uni6535 +ENCODING 25909 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +0800 +1FFE +1020 +3020 +4820 +8840 +0440 +0280 +0100 +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni6536 +ENCODING 25910 +BBX 15 15 1 -1 +BITMAP +0880 +0880 +4880 +48FE +4908 +4908 +4B08 +4888 +4888 +4850 +5850 +6820 +C850 +0888 +0B06 +ENDCHAR +STARTCHAR uni6537 +ENCODING 25911 +BBX 15 15 1 -1 +BITMAP +0080 +FC80 +2080 +20FE +4108 +4108 +FB08 +8888 +0888 +0850 +0850 +0820 +1050 +1088 +6306 +ENDCHAR +STARTCHAR uni6538 +ENCODING 25912 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +24FE +2508 +6508 +A708 +2488 +2488 +2450 +2450 +2420 +2050 +2088 +2306 +ENDCHAR +STARTCHAR uni6539 +ENCODING 25913 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +F880 +08FE +0908 +0908 +FA88 +8088 +8090 +8050 +8820 +8850 +7888 +0104 +0602 +ENDCHAR +STARTCHAR uni653A +ENCODING 25914 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F880 +8900 +89FC +8A10 +8D10 +8910 +F910 +80A0 +80A0 +8040 +88A0 +B110 +C208 +0404 +ENDCHAR +STARTCHAR uni653B +ENCODING 25915 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +FBFE +2208 +2408 +2908 +2110 +2110 +20A0 +3840 +E040 +00A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni653C +ENCODING 25916 +BBX 15 16 0 -2 +BITMAP +0040 +7C40 +1040 +1080 +10FE +1108 +1288 +FE88 +1088 +1050 +1050 +1020 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni653D +ENCODING 25917 +BBX 15 16 0 -2 +BITMAP +0020 +1420 +1220 +123E +2144 +2144 +4044 +BEA4 +1228 +1228 +1210 +1210 +2228 +2248 +4A84 +8502 +ENDCHAR +STARTCHAR uni653E +ENCODING 25918 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FEFE +2088 +2188 +3E88 +2488 +2450 +2450 +2420 +2420 +4450 +4488 +9B06 +ENDCHAR +STARTCHAR uni653F +ENCODING 25919 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FE40 +10FE +1088 +5108 +5288 +5C88 +5090 +5050 +5060 +5E20 +F050 +0188 +0606 +ENDCHAR +STARTCHAR uni6540 +ENCODING 25920 +BBX 14 16 1 -2 +BITMAP +2080 +2080 +4080 +F900 +89FC +8A10 +8D10 +8910 +F910 +88A0 +88A0 +8840 +88A0 +F910 +8A08 +0404 +ENDCHAR +STARTCHAR uni6541 +ENCODING 25921 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +2040 +3C7C +2040 +2040 +2040 +FBF8 +8908 +8910 +8890 +88A0 +F840 +88A0 +0310 +0C0C +ENDCHAR +STARTCHAR uni6542 +ENCODING 25922 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +3F3E +4144 +8144 +3D44 +25A4 +2528 +2528 +3D10 +2510 +0128 +0148 +0A84 +0502 +ENDCHAR +STARTCHAR uni6543 +ENCODING 25923 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +8220 +823E +8244 +FE44 +9044 +90A4 +FF28 +9028 +9010 +8810 +8928 +A528 +C344 +8182 +ENDCHAR +STARTCHAR uni6544 +ENCODING 25924 +BBX 15 15 1 -1 +BITMAP +0080 +FE80 +0480 +28FE +3088 +1108 +FF88 +1288 +1450 +3050 +3020 +5050 +9088 +1104 +3202 +ENDCHAR +STARTCHAR uni6545 +ENCODING 25925 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FEFE +1088 +1108 +1288 +7C88 +4450 +4450 +4420 +4450 +4488 +7D04 +0202 +ENDCHAR +STARTCHAR uni6546 +ENCODING 25926 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +141E +2210 +4110 +BEFC +0044 +0044 +3E44 +2228 +2228 +2210 +2210 +3E28 +2244 +0082 +ENDCHAR +STARTCHAR uni6547 +ENCODING 25927 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +FF90 +0820 +083E +7F44 +4924 +4924 +4D24 +4A28 +1C28 +2A10 +4928 +88A8 +0844 +0882 +ENDCHAR +STARTCHAR uni6548 +ENCODING 25928 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FE7E +2884 +4884 +8484 +2948 +2848 +1028 +1010 +2810 +4428 +8044 +0182 +ENDCHAR +STARTCHAR uni6549 +ENCODING 25929 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +9440 +5480 +58FE +1108 +FE88 +3088 +3888 +5450 +5450 +9020 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni654A +ENCODING 25930 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0E10 +081E +0810 +0810 +FEFC +0044 +0844 +0844 +4A28 +4928 +8910 +0828 +2844 +1082 +ENDCHAR +STARTCHAR uni654B +ENCODING 25931 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +3C40 +4480 +C4FE +2908 +1288 +2888 +4488 +8250 +7C50 +4420 +4450 +4488 +7D04 +4602 +ENDCHAR +STARTCHAR uni654C +ENCODING 25932 +BBX 15 16 0 -2 +BITMAP +0420 +0E20 +3820 +083E +0844 +FF44 +0844 +08A4 +3E28 +2228 +2210 +2210 +2228 +3E48 +2284 +0102 +ENDCHAR +STARTCHAR uni654D +ENCODING 25933 +BBX 15 15 1 -1 +BITMAP +0820 +1420 +223C +C120 +3E20 +08FC +0804 +FE44 +0848 +2A28 +2A10 +4910 +8928 +0844 +1882 +ENDCHAR +STARTCHAR uni654E +ENCODING 25934 +BBX 15 16 0 -2 +BITMAP +0240 +6440 +1840 +2480 +D2FE +1108 +FE88 +2088 +FE88 +4450 +8850 +0F20 +F850 +0888 +2904 +1202 +ENDCHAR +STARTCHAR uni654F +ENCODING 25935 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +7F20 +403E +BE44 +2A44 +2AC4 +2A24 +FFA8 +5228 +5210 +5210 +7F28 +0444 +0C82 +ENDCHAR +STARTCHAR uni6550 +ENCODING 25936 +BBX 15 16 0 -2 +BITMAP +0020 +7F20 +4020 +403E +5E44 +4044 +4044 +7FA4 +5028 +5128 +5A10 +5410 +5228 +9128 +9844 +1082 +ENDCHAR +STARTCHAR uni6551 +ENCODING 25937 +BBX 15 15 1 -1 +BITMAP +0C40 +0A40 +0840 +FE7E +0848 +0A88 +4D88 +2890 +1850 +1C50 +2A20 +2920 +4850 +8888 +1B06 +ENDCHAR +STARTCHAR uni6552 +ENCODING 25938 +BBX 15 16 0 -2 +BITMAP +1210 +1210 +1210 +2FA0 +2ABE +6AC4 +6AA4 +AFA4 +2AA4 +2AA8 +2AA8 +2F90 +2228 +2228 +2244 +2282 +ENDCHAR +STARTCHAR uni6553 +ENCODING 25939 +BBX 15 16 0 -2 +BITMAP +0040 +2840 +2440 +4280 +80FE +7D08 +4688 +4488 +4488 +7C50 +2850 +2820 +2850 +2A88 +4D04 +8A02 +ENDCHAR +STARTCHAR uni6554 +ENCODING 25940 +BBX 15 15 1 -1 +BITMAP +0020 +7E20 +1020 +103E +7C44 +2444 +2444 +24A8 +FF28 +0010 +7E10 +4228 +4228 +4244 +7E82 +ENDCHAR +STARTCHAR uni6555 +ENCODING 25941 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFA0 +083E +7F24 +4964 +4944 +49A4 +7F28 +0828 +1C10 +2A10 +4828 +8844 +0982 +ENDCHAR +STARTCHAR uni6556 +ENCODING 25942 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +7C40 +107E +FE48 +1088 +1088 +FF08 +2088 +3C50 +2450 +2420 +4450 +4488 +9906 +ENDCHAR +STARTCHAR uni6557 +ENCODING 25943 +BBX 15 15 1 -1 +BITMAP +0080 +7880 +4880 +49FE +7908 +4B08 +4C88 +7888 +4890 +4850 +4820 +7850 +2088 +4904 +8602 +ENDCHAR +STARTCHAR uni6558 +ENCODING 25944 +BBX 15 15 1 -1 +BITMAP +0840 +1440 +2240 +C17E +3C48 +08C8 +0888 +FF48 +0850 +2A50 +2920 +4920 +8850 +0888 +1906 +ENDCHAR +STARTCHAR uni6559 +ENCODING 25945 +BBX 15 15 1 -1 +BITMAP +1040 +1240 +7A40 +14FE +1488 +FF88 +1288 +3C88 +4850 +9050 +1E20 +F020 +1050 +1088 +3306 +ENDCHAR +STARTCHAR uni655A +ENCODING 25946 +BBX 15 16 0 -2 +BITMAP +4440 +2440 +2840 +0080 +7CFE +4508 +4688 +4488 +7C88 +2850 +2850 +2820 +2A50 +4C88 +8904 +0202 +ENDCHAR +STARTCHAR uni655B +ENCODING 25947 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1420 +123E +2144 +40C4 +BE44 +00A4 +1128 +0928 +4910 +2210 +2228 +0748 +7884 +2102 +ENDCHAR +STARTCHAR uni655C +ENCODING 25948 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1420 +223E +5144 +8844 +7E44 +02A4 +1428 +0828 +2A10 +A110 +A128 +A528 +1C44 +0082 +ENDCHAR +STARTCHAR uni655D +ENCODING 25949 +BBX 15 15 1 -1 +BITMAP +0810 +2A10 +4910 +891E +0824 +FFA4 +88E4 +8894 +AA94 +AA88 +AA88 +CA94 +8894 +88A2 +81C2 +ENDCHAR +STARTCHAR uni655E +ENCODING 25950 +BBX 15 15 1 -1 +BITMAP +1040 +5440 +5240 +927E +1088 +FE88 +8388 +BA88 +AA50 +AA50 +AA20 +AA20 +BA50 +8288 +8706 +ENDCHAR +STARTCHAR uni655F +ENCODING 25951 +BBX 15 16 0 -2 +BITMAP +1420 +1420 +1420 +7F3E +5544 +5544 +5544 +7FA4 +5528 +5528 +5510 +FF90 +2428 +2248 +4284 +8102 +ENDCHAR +STARTCHAR uni6560 +ENCODING 25952 +BBX 15 16 0 -2 +BITMAP +0010 +F710 +1110 +551E +2210 +5510 +89FC +1044 +0044 +F744 +1128 +5528 +2210 +5528 +8944 +1082 +ENDCHAR +STARTCHAR uni6561 +ENCODING 25953 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +4210 +421E +7E10 +4210 +42FC +7E44 +2044 +7F44 +9528 +2528 +4910 +9128 +2544 +4282 +ENDCHAR +STARTCHAR uni6562 +ENCODING 25954 +BBX 15 15 1 -1 +BITMAP +0040 +7C40 +1040 +10FE +FE88 +4508 +7C88 +4488 +4450 +7C50 +4420 +4420 +7C50 +C488 +0506 +ENDCHAR +STARTCHAR uni6563 +ENCODING 25955 +BBX 15 15 1 -1 +BITMAP +2840 +2840 +FE40 +28FE +2988 +FE88 +0088 +7C88 +4450 +7C50 +4420 +7C50 +4488 +4504 +4E02 +ENDCHAR +STARTCHAR uni6564 +ENCODING 25956 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +4910 +491E +7F10 +4910 +49FC +7F44 +0844 +FF44 +1C28 +2A28 +4910 +8828 +0844 +0882 +ENDCHAR +STARTCHAR uni6565 +ENCODING 25957 +BBX 15 16 0 -2 +BITMAP +0810 +0910 +4910 +4A1E +8810 +1410 +22FC +4944 +8844 +4944 +4928 +8A28 +1410 +2228 +4144 +8082 +ENDCHAR +STARTCHAR uni6566 +ENCODING 25958 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FE40 +00FE +7C88 +4588 +7E88 +0088 +7C50 +0850 +1020 +FE20 +1050 +1088 +3306 +ENDCHAR +STARTCHAR uni6567 +ENCODING 25959 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FF1E +1410 +2210 +41FC +0044 +FF44 +0228 +7A28 +4A10 +4A10 +7A28 +0244 +0E82 +ENDCHAR +STARTCHAR uni6568 +ENCODING 25960 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +7F20 +003E +2244 +1444 +FF44 +00A4 +0028 +3E28 +2210 +2210 +2228 +3E28 +2244 +0082 +ENDCHAR +STARTCHAR uni6569 +ENCODING 25961 +BBX 15 16 0 -2 +BITMAP +5110 +2910 +2A10 +0020 +FFBE +80C4 +0124 +7E24 +0424 +0828 +0F28 +F810 +0828 +0828 +2844 +1082 +ENDCHAR +STARTCHAR uni656A +ENCODING 25962 +BBX 15 16 0 -2 +BITMAP +0020 +F720 +1120 +553E +2244 +5544 +9944 +00A4 +F728 +1128 +5510 +2210 +5528 +8948 +1084 +0102 +ENDCHAR +STARTCHAR uni656B +ENCODING 25963 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +7C40 +447E +7C88 +4488 +7D88 +1048 +FE50 +2050 +3C20 +2420 +4450 +4888 +9B06 +ENDCHAR +STARTCHAR uni656C +ENCODING 25964 +BBX 15 15 1 -1 +BITMAP +2440 +2440 +FF40 +247E +2488 +4088 +7D08 +4448 +F448 +5450 +5420 +5420 +7450 +0488 +1906 +ENDCHAR +STARTCHAR uni656D +ENCODING 25965 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +4220 +7E3E +4244 +7E44 +0044 +FFA4 +4028 +7F28 +9510 +2510 +4928 +9148 +2A84 +4502 +ENDCHAR +STARTCHAR uni656E +ENCODING 25966 +BBX 15 16 0 -2 +BITMAP +0210 +0F10 +7810 +081E +0810 +FF10 +28FC +4B44 +4944 +4944 +6B28 +4928 +4910 +7F28 +4144 +0082 +ENDCHAR +STARTCHAR uni656F +ENCODING 25967 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +8210 +FE1E +8810 +FF10 +88FC +A544 +C344 +0044 +FE28 +8228 +FE10 +8228 +FE44 +8282 +ENDCHAR +STARTCHAR uni6570 +ENCODING 25968 +BBX 15 15 1 -1 +BITMAP +4920 +2920 +2A20 +FF7E +1C44 +2AC4 +4944 +9044 +FFA8 +1228 +2210 +7410 +0C28 +3244 +C182 +ENDCHAR +STARTCHAR uni6571 +ENCODING 25969 +BBX 15 16 0 -2 +BITMAP +0810 +4910 +4910 +7F1E +0010 +FF10 +00FC +7F44 +4144 +4144 +7F28 +4228 +2410 +0F28 +F044 +4082 +ENDCHAR +STARTCHAR uni6572 +ENCODING 25970 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FF1E +0010 +7E10 +42FC +7E44 +0044 +FF28 +8128 +BD10 +A510 +A528 +BD44 +8382 +ENDCHAR +STARTCHAR uni6573 +ENCODING 25971 +BBX 15 16 0 -2 +BITMAP +0820 +4920 +4920 +7F3E +0044 +FF44 +0044 +7FA4 +4128 +4128 +7F10 +4210 +2428 +0F48 +F084 +4102 +ENDCHAR +STARTCHAR uni6574 +ENCODING 25972 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FF7E +08C4 +7F24 +4928 +7F18 +2A66 +C900 +3FF8 +0100 +11F0 +1100 +1100 +FFFE +ENDCHAR +STARTCHAR uni6575 +ENCODING 25973 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FE40 +447E +28C8 +FE88 +8348 +9248 +BA28 +9230 +BA10 +AA10 +AA28 +BA44 +8682 +ENDCHAR +STARTCHAR uni6576 +ENCODING 25974 +BBX 15 16 0 -2 +BITMAP +0210 +E210 +BFD0 +A220 +AFBE +CAC4 +AFA4 +AAA4 +AFA4 +A228 +A728 +CA90 +9268 +8228 +8244 +8282 +ENDCHAR +STARTCHAR uni6577 +ENCODING 25975 +BBX 15 15 1 -1 +BITMAP +0A20 +0920 +FFA0 +087E +7F44 +49C4 +7F44 +4924 +7F28 +0828 +FF90 +1010 +3F28 +4144 +8682 +ENDCHAR +STARTCHAR uni6578 +ENCODING 25976 +BBX 15 15 1 -1 +BITMAP +0820 +7F20 +4920 +FFBE +4944 +7F44 +08C4 +7F44 +4928 +7F28 +1010 +FF10 +2228 +1C44 +E682 +ENDCHAR +STARTCHAR uni6579 +ENCODING 25977 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0F20 +083E +FF44 +8144 +0644 +78A4 +4928 +2A28 +FF10 +1810 +2C28 +4A48 +8884 +0902 +ENDCHAR +STARTCHAR uni657A +ENCODING 25978 +BBX 15 15 1 -1 +BITMAP +0010 +FF10 +801E +9E10 +9210 +92FC +9E44 +8044 +BBC4 +AAA8 +AAA8 +BB90 +8028 +FF44 +0082 +ENDCHAR +STARTCHAR uni657B +ENCODING 25979 +BBX 15 16 0 -2 +BITMAP +1000 +1FE0 +2020 +7FF8 +A308 +2488 +1FF0 +1010 +1FF0 +1010 +1FF0 +0800 +1FF8 +2820 +07C0 +F83E +ENDCHAR +STARTCHAR uni657C +ENCODING 25980 +BBX 15 16 0 -2 +BITMAP +0810 +FF90 +0810 +7F1E +0010 +7F10 +41FC +7F44 +2244 +FFC4 +0028 +7F28 +4110 +4128 +7F44 +4182 +ENDCHAR +STARTCHAR uni657D +ENCODING 25981 +BBX 15 16 0 -2 +BITMAP +0610 +7810 +1010 +FF9E +2210 +5D10 +94FC +1C44 +0044 +7F44 +4128 +5D28 +5510 +5D28 +4144 +4382 +ENDCHAR +STARTCHAR uni657E +ENCODING 25982 +BBX 15 16 0 -2 +BITMAP +2210 +1410 +FF90 +0820 +7F3E +0844 +FFA4 +4924 +2A24 +FFA8 +0028 +7F10 +4128 +4128 +7F44 +4182 +ENDCHAR +STARTCHAR uni657F +ENCODING 25983 +BBX 15 16 0 -2 +BITMAP +0610 +7810 +1010 +FFA0 +223E +5D44 +94A4 +1C24 +0024 +7F28 +4128 +5D10 +5528 +5D28 +4144 +4382 +ENDCHAR +STARTCHAR uni6580 +ENCODING 25984 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +551E +5510 +7F10 +20FC +7F44 +9144 +7D44 +5528 +5528 +7D10 +1110 +7D28 +0544 +0282 +ENDCHAR +STARTCHAR uni6581 +ENCODING 25985 +BBX 15 15 1 -1 +BITMAP +0020 +7F20 +5520 +7F3E +0844 +7F84 +0844 +FFA8 +2228 +FF90 +0810 +7F28 +0828 +0844 +0882 +ENDCHAR +STARTCHAR uni6582 +ENCODING 25986 +BBX 15 15 1 -1 +BITMAP +0820 +1420 +2220 +C13E +3E44 +0044 +7744 +55C4 +5528 +7728 +0010 +2210 +2228 +5544 +9582 +ENDCHAR +STARTCHAR uni6583 +ENCODING 25987 +BBX 15 15 1 -1 +BITMAP +2A20 +4920 +FF7E +49C4 +5D28 +6B10 +4928 +4346 +0000 +FFFE +0880 +1E98 +62E0 +1482 +F87E +ENDCHAR +STARTCHAR uni6584 +ENCODING 25988 +BBX 15 15 1 -1 +BITMAP +0820 +7E7E +0844 +FFA8 +2C10 +4A28 +8946 +7FFE +4080 +5FFC +4490 +4AA8 +91C4 +86B0 +388E +ENDCHAR +STARTCHAR uni6585 +ENCODING 25989 +BBX 15 15 1 -1 +BITMAP +1008 +6308 +550E +6B08 +5508 +6B7E +5522 +FFE2 +8062 +BF54 +0414 +0FC8 +FC08 +0414 +1C22 +ENDCHAR +STARTCHAR uni6586 +ENCODING 25990 +BBX 15 16 0 -2 +BITMAP +3410 +4B10 +5510 +6320 +553E +6B44 +5524 +FFA4 +80A4 +7E28 +0428 +0F10 +F828 +0828 +2844 +1082 +ENDCHAR +STARTCHAR uni6587 +ENCODING 25991 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +FFFE +0820 +0820 +0440 +0440 +0280 +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni6588 +ENCODING 25992 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +1040 +0880 +0700 +18C0 +E038 +1FC0 +0100 +0200 +FFF8 +0200 +0200 +0E00 +ENDCHAR +STARTCHAR uni6589 +ENCODING 25993 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +0440 +0380 +0C70 +F81E +0FF0 +0810 +0810 +0FF0 +0810 +1010 +6010 +ENDCHAR +STARTCHAR uni658A +ENCODING 25994 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0420 +03C0 +0E70 +F00E +0000 +FFFE +0820 +0FE0 +0820 +0FE0 +083E +FFE0 +0020 +ENDCHAR +STARTCHAR uni658B +ENCODING 25995 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +0820 +0440 +0380 +1C70 +E00E +1FF0 +0200 +0400 +3FF8 +2488 +2488 +24A8 +2010 +ENDCHAR +STARTCHAR uni658C +ENCODING 25996 +BBX 15 15 1 -1 +BITMAP +2014 +23D4 +2012 +F810 +17FE +5010 +5090 +5290 +22F0 +2290 +2290 +5288 +4AEA +830A +0404 +ENDCHAR +STARTCHAR uni658D +ENCODING 25997 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0820 +0440 +0380 +1C70 +E00E +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0842 +F03E +ENDCHAR +STARTCHAR uni658E +ENCODING 25998 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +0440 +07C0 +F83E +17D0 +1010 +1FF0 +1110 +1550 +2930 +3310 +4010 +ENDCHAR +STARTCHAR uni658F +ENCODING 25999 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +11FC +0104 +FD04 +09FC +0904 +4904 +29FC +1120 +1122 +2914 +2908 +4944 +8182 +0100 +ENDCHAR +STARTCHAR uni6590 +ENCODING 26000 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +FC7E +0440 +7C7C +0440 +FC7E +0940 +1100 +FFFE +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni6591 +ENCODING 26001 +BBX 15 15 1 -1 +BITMAP +0200 +F27E +2210 +3FD0 +2110 +2910 +F910 +257C +2510 +2210 +2210 +3510 +C490 +0810 +307E +ENDCHAR +STARTCHAR uni6592 +ENCODING 26002 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +11FE +0102 +FD02 +09FE +0900 +4900 +29FE +11AA +11AA +2AFE +2AAA +4AAA +84A2 +0086 +ENDCHAR +STARTCHAR uni6593 +ENCODING 26003 +BBX 14 16 0 -2 +BITMAP +0200 +417C +2504 +0444 +FDF4 +1444 +15F4 +1554 +9574 +55D4 +2554 +25F4 +54E4 +5554 +8444 +044C +ENDCHAR +STARTCHAR uni6594 +ENCODING 26004 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +FEA0 +052C +6924 +1124 +29AC +D524 +1124 +7DFC +5524 +7C50 +1050 +1C88 +E504 +4202 +ENDCHAR +STARTCHAR uni6595 +ENCODING 26005 +BBX 15 16 0 -2 +BITMAP +03DE +2252 +13DE +0252 +FFDE +0A22 +0AFA +4A22 +2AFA +12AA +12FA +2AAA +2AFA +4A72 +82AA +0226 +ENDCHAR +STARTCHAR uni6596 +ENCODING 26006 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0820 +07C0 +1830 +E7CE +2448 +37D8 +2448 +FFFE +9012 +1FF0 +1010 +1FF0 +1010 +FFFE +ENDCHAR +STARTCHAR uni6597 +ENCODING 26007 +BBX 15 15 1 -1 +BITMAP +0020 +1820 +0420 +0220 +0020 +2020 +1820 +0420 +0020 +003E +07E0 +F820 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni6598 +ENCODING 26008 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +1090 +1E50 +1210 +2290 +2250 +5210 +8A1E +05F0 +0410 +0810 +0810 +1010 +2010 +4010 +ENDCHAR +STARTCHAR uni6599 +ENCODING 26009 +BBX 15 15 1 -1 +BITMAP +1008 +1088 +9448 +5428 +5808 +1108 +FC88 +1048 +3008 +380E +5478 +9388 +1008 +1008 +1008 +ENDCHAR +STARTCHAR uni659A +ENCODING 26010 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2448 +7EFC +2244 +0000 +7FFE +4442 +8244 +1040 +0840 +007E +FFC0 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni659B +ENCODING 26011 +BBX 15 15 1 -1 +BITMAP +2008 +3E08 +4248 +4428 +FF28 +4908 +4948 +7F28 +4928 +4908 +7F0E +4138 +41C8 +8108 +8708 +ENDCHAR +STARTCHAR uni659C +ENCODING 26012 +BBX 15 15 1 -1 +BITMAP +0808 +0848 +1428 +2208 +7F08 +8848 +0828 +FF88 +080E +2A38 +2AC8 +4908 +8908 +0808 +3808 +ENDCHAR +STARTCHAR uni659D +ENCODING 26013 +BBX 15 14 1 -1 +BITMAP +3EF8 +2288 +3EF8 +0000 +7FFC +4004 +4C24 +0320 +3020 +0C3E +07E0 +F820 +0020 +0020 +ENDCHAR +STARTCHAR uni659E +ENCODING 26014 +BBX 15 16 0 -2 +BITMAP +0808 +2848 +4B28 +4928 +4908 +6B48 +4928 +4928 +7F0E +4978 +0808 +1408 +1208 +2108 +4108 +8008 +ENDCHAR +STARTCHAR uni659F +ENCODING 26015 +BBX 15 15 1 -1 +BITMAP +2208 +2208 +FF48 +2248 +3E28 +2208 +3E48 +2248 +FF28 +540E +5438 +66C8 +4008 +7F08 +0008 +ENDCHAR +STARTCHAR uni65A0 +ENCODING 26016 +BBX 15 16 0 -2 +BITMAP +2208 +2248 +FFA8 +2228 +7F08 +2248 +FFA8 +0828 +7F0E +4978 +7F08 +4908 +FFC8 +4108 +4508 +4208 +ENDCHAR +STARTCHAR uni65A1 +ENCODING 26017 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FE50 +1088 +7F06 +4448 +7C28 +4408 +4588 +7C48 +100E +FE38 +11C8 +1008 +1008 +ENDCHAR +STARTCHAR uni65A2 +ENCODING 26018 +BBX 15 16 0 -2 +BITMAP +2208 +2248 +7F28 +2228 +2208 +FFC8 +0828 +7F28 +490E +7F78 +4908 +7F08 +0008 +2208 +4108 +8088 +ENDCHAR +STARTCHAR uni65A3 +ENCODING 26019 +BBX 15 16 0 -2 +BITMAP +0008 +7F48 +5528 +5528 +7F08 +2048 +7FA8 +90A8 +7C8E +54F8 +5488 +7C88 +1288 +FE88 +0288 +0108 +ENDCHAR +STARTCHAR uni65A4 +ENCODING 26020 +BBX 14 15 1 -1 +BITMAP +0010 +00E0 +1F00 +1000 +1000 +1FFC +1040 +1040 +1040 +2040 +2040 +4040 +8040 +0040 +0040 +ENDCHAR +STARTCHAR uni65A5 +ENCODING 26021 +BBX 14 15 1 -1 +BITMAP +0070 +1F80 +1000 +1000 +1000 +1FFC +1080 +1080 +1780 +20F0 +208C +4080 +8080 +0080 +0080 +ENDCHAR +STARTCHAR uni65A6 +ENCODING 26022 +BBX 15 16 0 -2 +BITMAP +0200 +0704 +3878 +2040 +2040 +2040 +3F7E +2448 +2448 +2448 +2448 +2448 +2448 +4488 +4488 +8108 +ENDCHAR +STARTCHAR uni65A7 +ENCODING 26023 +BBX 15 15 1 -1 +BITMAP +0240 +0420 +1818 +6664 +0180 +0660 +1818 +E0E6 +1F00 +1000 +1FFE +1080 +2080 +4080 +0080 +ENDCHAR +STARTCHAR uni65A8 +ENCODING 26024 +BBX 15 16 0 -2 +BITMAP +0408 +241C +24E0 +2480 +2480 +3C80 +04FE +0488 +FC88 +2488 +2488 +2488 +2508 +4508 +4608 +8408 +ENDCHAR +STARTCHAR uni65A9 +ENCODING 26025 +BBX 15 16 0 -2 +BITMAP +2008 +201C +21E0 +FD00 +4100 +5100 +91FE +FD10 +1110 +1110 +1D10 +F110 +5110 +1210 +1210 +1410 +ENDCHAR +STARTCHAR uni65AA +ENCODING 26026 +BBX 15 16 0 -2 +BITMAP +2000 +2004 +4078 +7E40 +8240 +0240 +7A7E +4A48 +4A48 +4A48 +7A48 +4A48 +0248 +0288 +1488 +0908 +ENDCHAR +STARTCHAR uni65AB +ENCODING 26027 +BBX 15 15 1 -1 +BITMAP +000C +FCF0 +1080 +1080 +1080 +3CFE +2490 +6490 +6490 +A490 +2490 +2510 +3D10 +0210 +0010 +ENDCHAR +STARTCHAR uni65AC +ENCODING 26028 +BBX 15 15 1 -1 +BITMAP +080C +08F0 +FE80 +0880 +7E80 +4AFE +7E88 +4A88 +4A88 +7E88 +0888 +FE88 +0908 +0908 +0A08 +ENDCHAR +STARTCHAR uni65AD +ENCODING 26029 +BBX 15 15 1 -1 +BITMAP +080C +88F0 +CA80 +AA80 +AC80 +88FE +FE88 +8888 +9C88 +9A88 +A988 +C888 +8908 +FF08 +0208 +ENDCHAR +STARTCHAR uni65AE +ENCODING 26030 +BBX 15 16 0 -2 +BITMAP +2400 +2404 +7E78 +2440 +2440 +FF40 +007E +7E48 +4248 +4248 +7E48 +4248 +4248 +7E88 +4288 +0108 +ENDCHAR +STARTCHAR uni65AF +ENCODING 26031 +BBX 15 15 1 -1 +BITMAP +240C +2470 +FF40 +2440 +3C40 +247E +2448 +3C48 +2448 +2448 +FF48 +0048 +2488 +4288 +8108 +ENDCHAR +STARTCHAR uni65B0 +ENCODING 26032 +BBX 15 15 1 -1 +BITMAP +100C +10F0 +FE80 +4480 +2480 +28FE +FE88 +1088 +FE88 +3088 +3888 +5508 +5108 +9208 +1008 +ENDCHAR +STARTCHAR uni65B1 +ENCODING 26033 +BBX 15 16 0 -2 +BITMAP +1000 +1004 +7D78 +1240 +1440 +FF40 +107E +2048 +7E48 +A248 +2248 +3E48 +2248 +2288 +3E88 +2308 +ENDCHAR +STARTCHAR uni65B2 +ENCODING 26034 +BBX 15 15 1 -1 +BITMAP +300C +C770 +9540 +9540 +F740 +147E +1448 +F748 +8148 +8148 +F748 +1448 +1448 +1E88 +F008 +ENDCHAR +STARTCHAR uni65B3 +ENCODING 26035 +BBX 15 16 0 -2 +BITMAP +2200 +2202 +FFBC +2220 +3E20 +0820 +7F3E +4924 +7F24 +0824 +7F24 +0824 +7F24 +0844 +0F44 +F084 +ENDCHAR +STARTCHAR uni65B4 +ENCODING 26036 +BBX 15 16 0 -2 +BITMAP +0800 +4902 +2A3C +FFA0 +2A20 +4920 +88BE +4124 +4124 +77A4 +9124 +5524 +27A4 +4144 +8144 +0184 +ENDCHAR +STARTCHAR uni65B5 +ENCODING 26037 +BBX 15 15 1 -1 +BITMAP +100C +6F70 +4540 +5540 +7940 +C37E +0048 +FF48 +1448 +7748 +4148 +4748 +7448 +1788 +F808 +ENDCHAR +STARTCHAR uni65B6 +ENCODING 26038 +BBX 14 15 0 -2 +BITMAP +0DFC +7154 +4154 +41FC +4080 +7DFC +4A44 +49F4 +4954 +4954 +49F4 +4844 +49F4 +4814 +8808 +ENDCHAR +STARTCHAR uni65B7 +ENCODING 26039 +BBX 15 15 1 -1 +BITMAP +220C +C470 +D540 +A240 +F740 +807E +FF48 +A248 +C448 +D548 +A248 +F748 +8048 +FE88 +0008 +ENDCHAR +STARTCHAR uni65B8 +ENCODING 26040 +BBX 15 15 1 -1 +BITMAP +7F8C +40B0 +7FA0 +4420 +77A0 +443E +7FA4 +52A4 +7FA4 +5024 +BFA4 +EAA4 +BEA4 +0AC4 +3D84 +ENDCHAR +STARTCHAR uni65B9 +ENCODING 26041 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +FFF8 +0400 +0400 +0400 +07F0 +0810 +0810 +0810 +1010 +1020 +2020 +C1C0 +ENDCHAR +STARTCHAR uni65BA +ENCODING 26042 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0050 +FE50 +2088 +2104 +3E02 +2488 +2488 +2488 +2488 +2488 +4488 +5508 +8908 +0208 +ENDCHAR +STARTCHAR uni65BB +ENCODING 26043 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +0080 +FEFC +2100 +2200 +3CF0 +2490 +2490 +2490 +2490 +2492 +4492 +5512 +890E +0200 +ENDCHAR +STARTCHAR uni65BC +ENCODING 26044 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1050 +FE50 +2088 +2104 +3E02 +2460 +2418 +2400 +2400 +2400 +44C0 +4430 +9808 +ENDCHAR +STARTCHAR uni65BD +ENCODING 26045 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +11FE +FD00 +2220 +20A0 +3CAC +24B4 +24E4 +25AC +24A0 +24A0 +4482 +4482 +987E +ENDCHAR +STARTCHAR uni65BE +ENCODING 26046 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +0080 +FEFE +2120 +2220 +3C20 +25FC +2524 +2524 +2524 +2524 +4534 +5528 +8820 +0020 +ENDCHAR +STARTCHAR uni65BF +ENCODING 26047 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +FDFE +2100 +2200 +20FC +3C04 +2408 +2410 +25FE +2410 +4410 +4410 +9870 +ENDCHAR +STARTCHAR uni65C0 +ENCODING 26048 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0048 +FE84 +21FE +2002 +3C20 +2420 +24A8 +24A4 +2524 +2522 +4622 +5420 +88A0 +0040 +ENDCHAR +STARTCHAR uni65C1 +ENCODING 26049 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +0440 +7FFC +4004 +0100 +FFFE +0200 +07F8 +0408 +0810 +1010 +60E0 +ENDCHAR +STARTCHAR uni65C2 +ENCODING 26050 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FEFE +2080 +210C +3C70 +2440 +2440 +247E +2448 +2488 +4488 +4508 +9808 +ENDCHAR +STARTCHAR uni65C3 +ENCODING 26051 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +1100 +FFFE +2200 +2400 +3DFC +2524 +2524 +2524 +27FE +2504 +4504 +4504 +991C +ENDCHAR +STARTCHAR uni65C4 +ENCODING 26052 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FEFE +2100 +2018 +3CE0 +2420 +24F8 +2420 +2420 +25FC +4420 +4422 +981E +ENDCHAR +STARTCHAR uni65C5 +ENCODING 26053 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +1100 +FDFE +2220 +2440 +20C4 +3FA4 +24A8 +24B0 +2490 +2490 +4488 +4484 +9882 +ENDCHAR +STARTCHAR uni65C6 +ENCODING 26054 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +FDFE +2220 +2020 +3FFE +2420 +2420 +25FC +2524 +2524 +4524 +452C +9820 +ENDCHAR +STARTCHAR uni65C7 +ENCODING 26055 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +10FE +0100 +FE10 +2010 +20FE +3C92 +2490 +24FC +24A4 +24A4 +24A8 +4510 +5528 +8A46 +ENDCHAR +STARTCHAR uni65C8 +ENCODING 26056 +BBX 15 16 0 -2 +BITMAP +2020 +1010 +01FE +FE20 +2048 +2084 +3DFE +2402 +24A8 +24A8 +24A8 +24A8 +44A8 +54AA +892A +0206 +ENDCHAR +STARTCHAR uni65C9 +ENCODING 26057 +BBX 15 15 1 -1 +BITMAP +0108 +FFFE +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +2108 +0100 +FFFE +0200 +07F8 +1808 +6070 +ENDCHAR +STARTCHAR uni65CA +ENCODING 26058 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +10FE +0100 +FE00 +20FC +2040 +3C40 +2478 +2448 +24A8 +2498 +2488 +44AA +54CA +888E +ENDCHAR +STARTCHAR uni65CB +ENCODING 26059 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +11FE +FD00 +2200 +21FE +3C24 +2428 +24A0 +24BC +24A0 +24A0 +44A0 +4960 +9A1E +ENDCHAR +STARTCHAR uni65CC +ENCODING 26060 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +FDFE +2100 +2220 +3CA0 +24A0 +25FC +2620 +2420 +25FC +4420 +4420 +9BFE +ENDCHAR +STARTCHAR uni65CD +ENCODING 26061 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +10FE +0120 +FE20 +2050 +2088 +3D24 +2612 +2410 +25FC +2404 +2488 +4450 +5420 +8810 +ENDCHAR +STARTCHAR uni65CE +ENCODING 26062 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +10FE +0100 +FE00 +20FC +2084 +3C84 +24FC +2480 +24A4 +24A8 +24B0 +4522 +5522 +8A1E +ENDCHAR +STARTCHAR uni65CF +ENCODING 26063 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +FDFE +2140 +2240 +3CFC +24A0 +2520 +2420 +27FE +2420 +4450 +4488 +9B06 +ENDCHAR +STARTCHAR uni65D0 +ENCODING 26064 +BBX 15 16 0 -2 +BITMAP +2100 +1100 +11FE +0200 +FC50 +2050 +2254 +3D58 +2450 +24D8 +2554 +2652 +2450 +4450 +5492 +890E +ENDCHAR +STARTCHAR uni65D1 +ENCODING 26065 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +11FC +0050 +FC88 +2104 +23FE +3C08 +25E8 +2528 +2528 +25E8 +2528 +4408 +5428 +8810 +ENDCHAR +STARTCHAR uni65D2 +ENCODING 26066 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +13FE +FE00 +2020 +23FE +3C40 +2488 +25F4 +2400 +24A8 +24A8 +44A8 +452A +9A06 +ENDCHAR +STARTCHAR uni65D3 +ENCODING 26067 +BBX 15 16 0 -2 +BITMAP +2100 +1100 +11FE +0220 +FD24 +20A8 +2020 +3DFC +2504 +25FC +2504 +25FC +2504 +4504 +5514 +8908 +ENDCHAR +STARTCHAR uni65D4 +ENCODING 26068 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +177C +F914 +22FE +2214 +3C14 +2F7C +2910 +2D7C +2D10 +2AFE +4A10 +4D10 +98FE +ENDCHAR +STARTCHAR uni65D5 +ENCODING 26069 +BBX 15 16 0 -2 +BITMAP +1010 +0810 +FF28 +2044 +3E82 +2210 +2208 +4220 +4A10 +8408 +0000 +7C88 +44B0 +44C4 +7C84 +447C +ENDCHAR +STARTCHAR uni65D6 +ENCODING 26070 +BBX 15 16 0 -2 +BITMAP +2100 +1100 +11FE +0200 +FC20 +21FC +2050 +3C88 +27FE +2408 +25E8 +2528 +25E8 +4408 +5428 +8810 +ENDCHAR +STARTCHAR uni65D7 +ENCODING 26071 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +11FE +FD00 +2248 +21FE +3C48 +2478 +2448 +2478 +2448 +25FE +4420 +44CC +9B02 +ENDCHAR +STARTCHAR uni65D8 +ENCODING 26072 +BBX 15 16 0 -2 +BITMAP +2110 +1094 +13D2 +0012 +FA50 +2190 +27FE +3810 +2BD2 +2A52 +2A54 +2BD4 +2A4A +4A4A +4BD6 +9822 +ENDCHAR +STARTCHAR uni65D9 +ENCODING 26073 +BBX 15 15 1 -1 +BITMAP +1018 +11E0 +1124 +FCA8 +23FE +2070 +3CA8 +2524 +2602 +25FC +2524 +25FC +4524 +4524 +99FC +ENDCHAR +STARTCHAR uni65DA +ENCODING 26074 +BBX 15 16 0 -2 +BITMAP +2100 +11FE +1200 +01FE +FC50 +21FC +2154 +3DFC +2400 +25FC +2400 +27FE +2420 +44A8 +5524 +8A64 +ENDCHAR +STARTCHAR uni65DB +ENCODING 26075 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +13FE +FE0C +23F0 +2124 +3CA8 +27FE +24A8 +2524 +27FE +2524 +45FC +4524 +99FC +ENDCHAR +STARTCHAR uni65DC +ENCODING 26076 +BBX 15 16 0 -2 +BITMAP +2100 +11FE +1220 +04FC +FC00 +21FE +2102 +3D7A +254A +25FE +2484 +24FC +2484 +44FC +5400 +89FE +ENDCHAR +STARTCHAR uni65DD +ENCODING 26077 +BBX 15 16 0 -2 +BITMAP +2080 +10FE +1130 +0248 +FCB4 +2102 +21FE +3DAA +2572 +25FE +2400 +24FC +2484 +44FC +5484 +88FC +ENDCHAR +STARTCHAR uni65DE +ENCODING 26078 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +10FE +0100 +FE44 +2028 +22FE +3D20 +2454 +2728 +255C +252A +254A +4528 +5690 +8C7E +ENDCHAR +STARTCHAR uni65DF +ENCODING 26079 +BBX 15 16 0 -2 +BITMAP +2100 +1100 +01FE +FE00 +2540 +224C +3A64 +2B4C +2A64 +2AA4 +2BAC +2AA4 +4FFE +6890 +9108 +0204 +ENDCHAR +STARTCHAR uni65E0 +ENCODING 26080 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +0100 +0100 +0100 +7FFC +0100 +0180 +0280 +0480 +0880 +1082 +2082 +C07E +ENDCHAR +STARTCHAR uni65E1 +ENCODING 26081 +BBX 13 14 2 -1 +BITMAP +7FE0 +0100 +2100 +2100 +2100 +4100 +7FF0 +4200 +0300 +0500 +0900 +1108 +2108 +C0F8 +ENDCHAR +STARTCHAR uni65E2 +ENCODING 26082 +BBX 15 14 1 -1 +BITMAP +7DFC +4490 +4490 +7C90 +4490 +45FE +7C20 +4020 +4830 +4850 +4850 +5492 +6512 +C20E +ENDCHAR +STARTCHAR uni65E3 +ENCODING 26083 +BBX 14 16 1 -2 +BITMAP +2000 +43F8 +F840 +8840 +FA40 +8A40 +FBFC +0040 +8040 +8060 +F8A0 +80A0 +8124 +9924 +E21C +0400 +ENDCHAR +STARTCHAR uni65E4 +ENCODING 26084 +BBX 15 15 0 -2 +BITMAP +7DFC +4420 +4420 +7520 +5520 +55FE +FE20 +8220 +BA30 +AA50 +AA50 +BA92 +8292 +8B0E +8600 +ENDCHAR +STARTCHAR uni65E5 +ENCODING 26085 +BBX 9 14 4 -1 +BITMAP +FF80 +8080 +8080 +8080 +8080 +8080 +FF80 +8080 +8080 +8080 +8080 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uni65E6 +ENCODING 26086 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1010 +1010 +1010 +1FF0 +1010 +1010 +1010 +1010 +1FF0 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uni65E7 +ENCODING 26087 +BBX 13 14 2 -1 +BITMAP +8FF8 +8808 +8808 +8808 +8808 +8808 +8FF8 +8808 +8808 +8808 +8808 +8808 +8808 +8FF8 +ENDCHAR +STARTCHAR uni65E8 +ENCODING 26088 +BBX 11 15 3 -1 +BITMAP +8000 +8040 +8380 +FC00 +8020 +8020 +7FE0 +0000 +7FC0 +4040 +4040 +7FC0 +4040 +4040 +7FC0 +ENDCHAR +STARTCHAR uni65E9 +ENCODING 26089 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni65EA +ENCODING 26090 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F840 +8840 +8840 +8840 +8FFC +F840 +8840 +8840 +8840 +8840 +F840 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni65EB +ENCODING 26091 +BBX 13 14 1 -2 +BITMAP +FBF8 +8888 +8888 +8888 +8888 +F888 +8888 +8888 +8888 +8908 +F908 +8A08 +0450 +0820 +ENDCHAR +STARTCHAR uni65EC +ENCODING 26092 +BBX 14 15 1 -1 +BITMAP +0800 +0800 +0FFC +1004 +2004 +4FC4 +8844 +0844 +0FC4 +0844 +0844 +0FC4 +0008 +0008 +0070 +ENDCHAR +STARTCHAR uni65ED +ENCODING 26093 +BBX 15 15 1 -1 +BITMAP +2000 +2000 +21F8 +2108 +FD08 +2508 +25F8 +2508 +2508 +2508 +2508 +25F8 +4402 +4202 +81FE +ENDCHAR +STARTCHAR uni65EE +ENCODING 26094 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +3FE0 +0420 +0822 +3022 +C01E +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni65EF +ENCODING 26095 +BBX 14 15 1 -2 +BITMAP +3FE0 +2020 +2020 +3FE0 +2020 +2020 +3FE0 +0400 +0400 +FFC0 +0840 +0840 +1044 +2044 +C03C +ENDCHAR +STARTCHAR uni65F0 +ENCODING 26096 +BBX 14 15 1 -2 +BITMAP +01F8 +F840 +8840 +8840 +8840 +8840 +FBFC +8840 +8840 +8840 +8840 +F840 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni65F1 +ENCODING 26097 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0000 +3FF8 +0100 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni65F2 +ENCODING 26098 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0000 +0100 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni65F3 +ENCODING 26099 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F900 +89F8 +8A08 +8C08 +8808 +FA08 +8908 +8888 +8888 +8808 +F808 +8808 +0050 +0020 +ENDCHAR +STARTCHAR uni65F4 +ENCODING 26100 +BBX 14 15 1 -2 +BITMAP +03F8 +F840 +8840 +8840 +8840 +8FFC +F840 +8840 +8840 +8840 +8840 +F840 +8840 +0140 +0080 +ENDCHAR +STARTCHAR uni65F5 +ENCODING 26101 +BBX 11 15 2 -2 +BITMAP +7FC0 +4040 +4040 +7FC0 +4040 +4040 +7FC0 +0000 +0400 +8420 +8420 +8420 +8420 +FFE0 +0020 +ENDCHAR +STARTCHAR uni65F6 +ENCODING 26102 +BBX 14 16 1 -2 +BITMAP +0010 +0010 +F810 +8810 +8BFC +8810 +8810 +F810 +8910 +8890 +8890 +8810 +F810 +8810 +0050 +0020 +ENDCHAR +STARTCHAR uni65F7 +ENCODING 26103 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F040 +93FC +9200 +9200 +F200 +9200 +9200 +9200 +9200 +F200 +9200 +0400 +0400 +0800 +ENDCHAR +STARTCHAR uni65F8 +ENCODING 26104 +BBX 14 15 1 -2 +BITMAP +03F0 +F820 +8840 +8880 +8900 +8BFC +F924 +8924 +8924 +8A24 +8A44 +FC44 +8884 +0128 +0210 +ENDCHAR +STARTCHAR uni65F9 +ENCODING 26105 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0100 +0100 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni65FA +ENCODING 26106 +BBX 15 14 1 -1 +BITMAP +07FC +F040 +9040 +9040 +9040 +9040 +F7FC +9040 +9040 +9040 +9040 +F040 +0040 +0FFE +ENDCHAR +STARTCHAR uni65FB +ENCODING 26107 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +0100 +7FFC +0820 +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni65FC +ENCODING 26108 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F040 +9FFE +9208 +9208 +9208 +F110 +9110 +90A0 +9040 +90A0 +F110 +0208 +0C06 +ENDCHAR +STARTCHAR uni65FD +ENCODING 26109 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +F040 +97FC +9040 +9248 +9248 +F248 +9248 +93F8 +9048 +9040 +F044 +9044 +003C +ENDCHAR +STARTCHAR uni65FE +ENCODING 26110 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +FFFE +0100 +2108 +3FF8 +0102 +0102 +00FE +0000 +3FF8 +2008 +3FF8 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni65FF +ENCODING 26111 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F900 +8BF8 +8A40 +8C40 +8840 +F840 +8FFC +8840 +8840 +8840 +F840 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni6600 +ENCODING 26112 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +F100 +93FC +9204 +9404 +9804 +F3C4 +9004 +9004 +97E4 +9004 +F008 +0008 +0070 +ENDCHAR +STARTCHAR uni6601 +ENCODING 26113 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F040 +97FC +9040 +9040 +93F8 +F248 +9248 +9248 +9248 +9268 +F250 +9040 +0040 +0040 +ENDCHAR +STARTCHAR uni6602 +ENCODING 26114 +BBX 14 14 1 -1 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +0000 +0CFC +3084 +2084 +2084 +3C84 +E09C +0080 +0080 +ENDCHAR +STARTCHAR uni6603 +ENCODING 26115 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +3FFC +2000 +2080 +2080 +4140 +4220 +8C18 +3006 +ENDCHAR +STARTCHAR uni6604 +ENCODING 26116 +BBX 15 14 1 -1 +BITMAP +03FC +F200 +9200 +9200 +93F8 +9288 +F288 +9288 +9250 +9250 +9420 +F450 +0888 +0106 +ENDCHAR +STARTCHAR uni6605 +ENCODING 26117 +BBX 14 15 1 -2 +BITMAP +07F8 +F108 +9110 +9110 +9120 +9138 +F108 +9288 +9288 +9250 +9250 +F420 +9450 +0888 +0304 +ENDCHAR +STARTCHAR uni6606 +ENCODING 26118 +BBX 15 14 1 -1 +BITMAP +3FF0 +2010 +3FF0 +2010 +2010 +3FF0 +0000 +2080 +2098 +3EE0 +2080 +2082 +3E82 +E07E +ENDCHAR +STARTCHAR uni6607 +ENCODING 26119 +BBX 15 14 1 -1 +BITMAP +1FF8 +1008 +1FF8 +1008 +1FF8 +0000 +0720 +3C20 +0420 +FFFE +0420 +0820 +1020 +6020 +ENDCHAR +STARTCHAR uni6608 +ENCODING 26120 +BBX 15 15 1 -1 +BITMAP +001C +03E0 +F200 +9200 +93FE +9202 +9202 +F202 +93FE +9200 +9200 +9200 +F400 +0400 +0800 +ENDCHAR +STARTCHAR uni6609 +ENCODING 26121 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F840 +8FFE +8880 +8880 +8880 +F8FC +8884 +8884 +8884 +8904 +F904 +0204 +0C38 +ENDCHAR +STARTCHAR uni660A +ENCODING 26122 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +0100 +0100 +3FF8 +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni660B +ENCODING 26123 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +0200 +FFFE +0440 +0820 +3018 +C006 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni660C +ENCODING 26124 +BBX 12 14 2 -1 +BITMAP +7FE0 +4020 +7FE0 +4020 +4020 +7FE0 +0000 +FFF0 +8010 +8010 +FFF0 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni660D +ENCODING 26125 +BBX 13 14 1 -1 +BITMAP +03F8 +FA08 +8A08 +8A08 +8A08 +8A08 +FBF8 +8A08 +8A08 +8A08 +8A08 +FA08 +8BF8 +0208 +ENDCHAR +STARTCHAR uni660E +ENCODING 26126 +BBX 13 14 2 -1 +BITMAP +01F8 +F908 +8908 +8908 +89F8 +F908 +8908 +8908 +89F8 +F908 +0208 +0208 +0408 +1838 +ENDCHAR +STARTCHAR uni660F +ENCODING 26127 +BBX 14 15 1 -1 +BITMAP +00E0 +3F00 +2100 +3FFC +2080 +2040 +3C20 +E014 +1FF8 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni6610 +ENCODING 26128 +BBX 14 16 1 -2 +BITMAP +0020 +0120 +F920 +8910 +8A10 +8A08 +8C08 +FBF4 +8910 +8910 +8910 +8910 +FA10 +8A10 +0450 +0820 +ENDCHAR +STARTCHAR uni6611 +ENCODING 26129 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F8A0 +88A0 +8910 +8A88 +8C44 +F840 +8800 +8BF8 +8808 +8810 +F810 +8820 +0020 +0040 +ENDCHAR +STARTCHAR uni6612 +ENCODING 26130 +BBX 13 16 1 -2 +BITMAP +0200 +0200 +F200 +93F8 +9548 +9948 +9148 +F248 +9248 +9488 +9888 +9108 +F208 +9408 +0850 +0020 +ENDCHAR +STARTCHAR uni6613 +ENCODING 26131 +BBX 12 14 2 -1 +BITMAP +3FC0 +2040 +3FC0 +2040 +2040 +3FC0 +0800 +3FF0 +C490 +0890 +3110 +C620 +1820 +01C0 +ENDCHAR +STARTCHAR uni6614 +ENCODING 26132 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +7FF8 +0840 +0840 +0840 +FFFC +0000 +1FE0 +1020 +1020 +1FE0 +1020 +1020 +1FE0 +ENDCHAR +STARTCHAR uni6615 +ENCODING 26133 +BBX 15 15 1 -1 +BITMAP +0038 +03C0 +F200 +9200 +9200 +93FE +9210 +F210 +9210 +9210 +9210 +9410 +F410 +0810 +0010 +ENDCHAR +STARTCHAR uni6616 +ENCODING 26134 +BBX 14 15 1 -1 +BITMAP +0020 +0120 +F120 +9110 +9110 +9248 +9248 +F444 +9880 +9080 +9110 +9108 +F208 +97FC +0204 +ENDCHAR +STARTCHAR uni6617 +ENCODING 26135 +BBX 13 15 1 -2 +BITMAP +3FE0 +2020 +2020 +3FE0 +2020 +2020 +3FE0 +0400 +0200 +FFF8 +0000 +0880 +1040 +2020 +4010 +ENDCHAR +STARTCHAR uni6618 +ENCODING 26136 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +0100 +FFFE +0400 +07F0 +0410 +0810 +1010 +20A0 +4040 +ENDCHAR +STARTCHAR uni6619 +ENCODING 26137 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +3FF8 +0000 +0000 +FFFE +0400 +0820 +1010 +3FF8 +1008 +ENDCHAR +STARTCHAR uni661A +ENCODING 26138 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +FFFE +0100 +2288 +1450 +0820 +3018 +DFF6 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni661B +ENCODING 26139 +BBX 14 14 1 -1 +BITMAP +03FC +FA00 +8A00 +8A00 +8BF8 +8A08 +FA08 +8A08 +8A08 +8BF8 +8A00 +FA00 +8A00 +03FC +ENDCHAR +STARTCHAR uni661C +ENCODING 26140 +BBX 14 14 1 -1 +BITMAP +3FF0 +2010 +3FF0 +2010 +3FF0 +0000 +FFFC +0800 +1FF8 +2248 +C448 +0888 +3108 +0630 +ENDCHAR +STARTCHAR uni661D +ENCODING 26141 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3E50 +2248 +5444 +0840 +17FE +2000 +DFF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni661E +ENCODING 26142 +BBX 15 14 1 -1 +BITMAP +0FFE +F040 +9040 +9040 +97FC +9444 +F444 +94A4 +9514 +960C +9404 +F404 +0404 +040C +ENDCHAR +STARTCHAR uni661F +ENCODING 26143 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +1100 +1FF8 +2100 +4100 +1FF0 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni6620 +ENCODING 26144 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +0040 +F3F8 +9248 +9248 +9248 +F248 +9248 +9FFE +90A0 +F110 +0208 +0404 +1802 +ENDCHAR +STARTCHAR uni6621 +ENCODING 26145 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F840 +8FFE +8880 +8880 +8910 +F910 +8E20 +89A0 +8840 +8848 +F88C +00F2 +0702 +ENDCHAR +STARTCHAR uni6622 +ENCODING 26146 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F244 +9244 +9244 +9244 +93FC +F040 +9040 +9442 +9442 +9442 +F442 +0442 +07FE +ENDCHAR +STARTCHAR uni6623 +ENCODING 26147 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F8A0 +8910 +8A08 +8C24 +8840 +F880 +8B10 +8820 +8840 +8888 +FB10 +8820 +00C0 +0700 +ENDCHAR +STARTCHAR uni6624 +ENCODING 26148 +BBX 15 15 1 -1 +BITMAP +0040 +00A0 +F110 +9208 +9DF6 +9000 +9000 +F7FC +9084 +9084 +9084 +9084 +F09C +0080 +0080 +ENDCHAR +STARTCHAR uni6625 +ENCODING 26149 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0280 +FFFE +0440 +1FF0 +3018 +D016 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni6626 +ENCODING 26150 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +7FFC +0440 +0820 +3458 +C446 +0440 +0440 +0840 +1040 +ENDCHAR +STARTCHAR uni6627 +ENCODING 26151 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F040 +97FC +9040 +9040 +F040 +9FFE +9150 +9150 +9248 +F248 +0444 +0842 +0040 +ENDCHAR +STARTCHAR uni6628 +ENCODING 26152 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +F100 +93FE +9240 +9440 +9840 +F07C +9040 +9040 +9040 +907C +F040 +0040 +0040 +ENDCHAR +STARTCHAR uni6629 +ENCODING 26153 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F080 +9FFC +9080 +9080 +9080 +F7F8 +9080 +91C0 +92A0 +9490 +F88C +9080 +0080 +0080 +ENDCHAR +STARTCHAR uni662A +ENCODING 26154 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +0400 +0420 +0870 +7F8C +0420 +FFFE +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni662B +ENCODING 26155 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +F100 +91FC +9204 +9404 +9BE4 +F224 +9224 +9224 +93E4 +9004 +F008 +0008 +0070 +ENDCHAR +STARTCHAR uni662C +ENCODING 26156 +BBX 12 15 2 -2 +BITMAP +FFE0 +8020 +FFE0 +8200 +FFF0 +8100 +B090 +C050 +8030 +7FC0 +4040 +7FC0 +4040 +7FC0 +4040 +ENDCHAR +STARTCHAR uni662D +ENCODING 26157 +BBX 14 14 1 -1 +BITMAP +03FC +F884 +8884 +8884 +8904 +8904 +FA18 +8800 +89FC +8904 +8904 +F904 +0104 +01FC +ENDCHAR +STARTCHAR uni662E +ENCODING 26158 +BBX 14 15 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0040 +0040 +7DFC +1044 +1044 +1084 +1C84 +E104 +4228 +0410 +ENDCHAR +STARTCHAR uni662F +ENCODING 26159 +BBX 14 14 1 -1 +BITMAP +1FE0 +1020 +1FE0 +1020 +1020 +1FE0 +0000 +FFFC +0200 +2200 +23F0 +3200 +4E00 +83FC +ENDCHAR +STARTCHAR uni6630 +ENCODING 26160 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +7FFC +0100 +0100 +11F8 +1100 +1100 +1100 +FFFE +ENDCHAR +STARTCHAR uni6631 +ENCODING 26161 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0100 +0100 +7FFC +0820 +0820 +0440 +0440 +FFFE +ENDCHAR +STARTCHAR uni6632 +ENCODING 26162 +BBX 14 16 1 -2 +BITMAP +0120 +0120 +F120 +97F8 +9128 +9128 +F7F8 +9520 +9520 +97FC +9124 +F124 +9234 +0228 +0420 +0820 +ENDCHAR +STARTCHAR uni6633 +ENCODING 26163 +BBX 15 15 1 -1 +BITMAP +0040 +0240 +F240 +93FC +9440 +9440 +9040 +F040 +97FE +9040 +90A0 +90A0 +F110 +0208 +0C06 +ENDCHAR +STARTCHAR uni6634 +ENCODING 26164 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +0C00 +707E +4242 +4242 +4242 +4E42 +F44E +0840 +3040 +ENDCHAR +STARTCHAR uni6635 +ENCODING 26165 +BBX 15 14 1 -1 +BITMAP +03FC +F204 +9204 +93FC +9200 +9240 +F240 +924C +9270 +9240 +9440 +F442 +0842 +003E +ENDCHAR +STARTCHAR uni6636 +ENCODING 26166 +BBX 15 15 1 -1 +BITMAP +2000 +1000 +087C +0044 +7844 +0944 +0A7C +EC44 +2C44 +2A44 +4A7C +4980 +8860 +081E +3800 +ENDCHAR +STARTCHAR uni6637 +ENCODING 26167 +BBX 15 14 0 -1 +BITMAP +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0000 +3FF8 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni6638 +ENCODING 26168 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F8F8 +8908 +8B10 +8CA0 +8840 +F8A0 +8910 +8E0C +88C0 +8820 +F810 +8980 +0040 +0020 +ENDCHAR +STARTCHAR uni6639 +ENCODING 26169 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F020 +93C0 +9044 +9068 +F770 +9160 +9150 +9150 +9250 +F248 +9448 +0844 +0140 +0080 +ENDCHAR +STARTCHAR uni663A +ENCODING 26170 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +0100 +3FF8 +2108 +2288 +2C68 +2008 +2018 +ENDCHAR +STARTCHAR uni663B +ENCODING 26171 +BBX 14 15 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +7CFC +1084 +1084 +1084 +1084 +1E94 +F088 +4080 +0080 +ENDCHAR +STARTCHAR uni663C +ENCODING 26172 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1010 +1FF0 +1020 +1010 +2FF0 +2828 +CFE6 +0820 +0820 +0FE0 +0000 +FFFE +ENDCHAR +STARTCHAR uni663D +ENCODING 26173 +BBX 14 16 1 -2 +BITMAP +0120 +0110 +F110 +9100 +97FC +9140 +9140 +F148 +9148 +9250 +9250 +9264 +F444 +94C4 +093C +1000 +ENDCHAR +STARTCHAR uni663E +ENCODING 26174 +BBX 15 14 0 -1 +BITMAP +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0440 +4444 +2444 +1448 +1450 +0440 +FFFE +ENDCHAR +STARTCHAR uni663F +ENCODING 26175 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FE +9400 +9400 +9440 +9440 +F440 +9440 +9450 +9488 +9888 +F884 +111E +03E2 +ENDCHAR +STARTCHAR uni6640 +ENCODING 26176 +BBX 14 16 1 -2 +BITMAP +0120 +0120 +F120 +9524 +9328 +9130 +9120 +F330 +9528 +9924 +9120 +9120 +F224 +9224 +0424 +081C +ENDCHAR +STARTCHAR uni6641 +ENCODING 26177 +BBX 14 14 1 -1 +BITMAP +7FF8 +4008 +7FF8 +4008 +7FF8 +0000 +4480 +2490 +04A0 +34C0 +C4A0 +0894 +3084 +C07C +ENDCHAR +STARTCHAR uni6642 +ENCODING 26178 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F3FC +9040 +9040 +97FE +F008 +9008 +97FE +9008 +9208 +F108 +0088 +0008 +0038 +ENDCHAR +STARTCHAR uni6643 +ENCODING 26179 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +1110 +1110 +0920 +7FFC +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni6644 +ENCODING 26180 +BBX 15 15 1 -1 +BITMAP +0040 +0444 +F444 +9248 +9248 +9040 +9040 +FFFE +9110 +9110 +9110 +9210 +F212 +0412 +080E +ENDCHAR +STARTCHAR uni6645 +ENCODING 26181 +BBX 15 14 1 -1 +BITMAP +07FC +F000 +9000 +93F8 +9208 +9208 +F3F8 +9208 +9208 +9208 +93F8 +F000 +0000 +0FFE +ENDCHAR +STARTCHAR uni6646 +ENCODING 26182 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +FBF8 +8840 +8840 +8840 +8FFC +F800 +8840 +8840 +8BF8 +8840 +F840 +8840 +07FC +ENDCHAR +STARTCHAR uni6647 +ENCODING 26183 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +90A0 +9110 +9208 +F5F4 +9000 +97FC +9080 +9100 +F3F8 +9008 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni6648 +ENCODING 26184 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F040 +9FFE +9110 +9208 +9404 +F110 +9110 +90A0 +90A0 +9040 +F0A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni6649 +ENCODING 26185 +BBX 15 14 1 -1 +BITMAP +7FFC +1020 +2448 +7AF4 +0000 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni664A +ENCODING 26186 +BBX 14 14 1 -1 +BITMAP +07FC +F080 +9100 +9220 +9410 +97F8 +F088 +9080 +9080 +97F8 +9080 +F080 +9080 +0FFC +ENDCHAR +STARTCHAR uni664B +ENCODING 26187 +BBX 14 14 1 -1 +BITMAP +7FF8 +0480 +2490 +14A0 +0480 +FFFC +0000 +3FF0 +2010 +2010 +3FF0 +2010 +2010 +3FF0 +ENDCHAR +STARTCHAR uni664C +ENCODING 26188 +BBX 15 15 1 -1 +BITMAP +0040 +0080 +F100 +97FE +9402 +9402 +94F2 +F492 +9492 +9492 +9492 +94F2 +F402 +0402 +040E +ENDCHAR +STARTCHAR uni664D +ENCODING 26189 +BBX 14 15 1 -2 +BITMAP +03FC +FA04 +8A04 +8AF4 +8A04 +8A04 +FAF4 +8A94 +8A94 +8A94 +8AF4 +FA04 +8A04 +0214 +0208 +ENDCHAR +STARTCHAR uni664E +ENCODING 26190 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +F110 +9110 +97FC +9110 +9110 +F110 +9110 +9FFE +9000 +9110 +F208 +0404 +0802 +ENDCHAR +STARTCHAR uni664F +ENCODING 26191 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +0100 +7FFC +4204 +FFFE +0410 +0820 +1E40 +01E0 +7E18 +ENDCHAR +STARTCHAR uni6650 +ENCODING 26192 +BBX 14 16 1 -2 +BITMAP +0040 +0020 +F020 +97FC +9040 +9084 +9108 +F3F0 +9020 +9044 +9188 +9610 +F020 +9050 +0188 +0604 +ENDCHAR +STARTCHAR uni6651 +ENCODING 26193 +BBX 13 14 2 -1 +BITMAP +7FF0 +4010 +7FF0 +4010 +7FF0 +0800 +1000 +FFF8 +8008 +8F88 +8888 +8888 +8F88 +8038 +ENDCHAR +STARTCHAR uni6652 +ENCODING 26194 +BBX 15 14 1 -1 +BITMAP +0FFE +F0A0 +90A0 +90A0 +97FC +94A4 +F4A4 +94A4 +9524 +963C +9404 +F404 +0404 +07FC +ENDCHAR +STARTCHAR uni6653 +ENCODING 26195 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F178 +9780 +90A0 +9048 +91A8 +F618 +9000 +97FC +9120 +9120 +F224 +9224 +041C +0800 +ENDCHAR +STARTCHAR uni6654 +ENCODING 26196 +BBX 14 16 1 -2 +BITMAP +0120 +0128 +F228 +9230 +9620 +9A64 +92A4 +F21C +9240 +9040 +97FC +9040 +F040 +9040 +0040 +0040 +ENDCHAR +STARTCHAR uni6655 +ENCODING 26197 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +7FFE +4202 +9FF4 +0400 +0900 +1FF0 +0100 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni6656 +ENCODING 26198 +BBX 14 15 1 -2 +BITMAP +07FC +F404 +9888 +9080 +97F8 +9100 +F140 +9240 +93F8 +9040 +9040 +F7FC +9040 +0040 +0040 +ENDCHAR +STARTCHAR uni6657 +ENCODING 26199 +BBX 15 15 1 -1 +BITMAP +0040 +00A0 +F110 +9208 +9DF6 +9000 +93F8 +F010 +9020 +9040 +93F8 +9208 +F208 +0208 +03F8 +ENDCHAR +STARTCHAR uni6658 +ENCODING 26200 +BBX 14 15 1 -2 +BITMAP +03F8 +FA08 +8BF8 +8A08 +8BF8 +8800 +F800 +8BF8 +8840 +8840 +8FFC +F840 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni6659 +ENCODING 26201 +BBX 15 15 1 -1 +BITMAP +0040 +0090 +F918 +8BF4 +8890 +8910 +FE1E +8880 +88FC +8908 +8B08 +F890 +0060 +0198 +0606 +ENDCHAR +STARTCHAR uni665A +ENCODING 26202 +BBX 15 15 1 -1 +BITMAP +0100 +03F8 +F410 +9820 +97FC +9444 +9444 +F484 +97FC +90A0 +9120 +9120 +F222 +0422 +181E +ENDCHAR +STARTCHAR uni665B +ENCODING 26203 +BBX 15 14 1 -1 +BITMAP +03F8 +F208 +93F8 +9208 +9208 +93F8 +F208 +9208 +93F8 +90A0 +90A0 +F122 +0222 +0C1E +ENDCHAR +STARTCHAR uni665C +ENCODING 26204 +BBX 13 15 1 -2 +BITMAP +3FE0 +2020 +3FE0 +2020 +3FE0 +0880 +FFF0 +0210 +7FF0 +4200 +7FF8 +0608 +0A28 +3210 +C200 +ENDCHAR +STARTCHAR uni665D +ENCODING 26205 +BBX 15 14 1 0 +BITMAP +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +FFFE +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni665E +ENCODING 26206 +BBX 15 15 1 -1 +BITMAP +0008 +0190 +F060 +9190 +9608 +9080 +9FFE +F100 +9240 +97FC +9A44 +9244 +F244 +025C +0040 +ENDCHAR +STARTCHAR uni665F +ENCODING 26207 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +0090 +3FFC +2080 +3E48 +2250 +2220 +4450 +5C8A +8304 +ENDCHAR +STARTCHAR uni6660 +ENCODING 26208 +BBX 14 16 1 -2 +BITMAP +0050 +0048 +F048 +9040 +97FC +9440 +F448 +9448 +9748 +9550 +9550 +F520 +9524 +0B54 +088C +1104 +ENDCHAR +STARTCHAR uni6661 +ENCODING 26209 +BBX 15 15 1 -1 +BITMAP +0048 +0044 +F7FE +9040 +9040 +97FC +9444 +F444 +97FC +9444 +9444 +97FC +F444 +0444 +044C +ENDCHAR +STARTCHAR uni6662 +ENCODING 26210 +BBX 15 15 1 -1 +BITMAP +100C +10F0 +FE80 +1080 +10FE +1C90 +F110 +1110 +3210 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni6663 +ENCODING 26211 +BBX 15 15 1 -1 +BITMAP +020C +0270 +F240 +9240 +9FC0 +927E +9248 +F248 +93C8 +9E48 +9248 +9288 +F288 +0308 +0608 +ENDCHAR +STARTCHAR uni6664 +ENCODING 26212 +BBX 15 14 1 -1 +BITMAP +07FE +F040 +9040 +93F8 +9088 +9088 +F088 +97FE +9000 +93FC +9204 +F204 +0204 +03FC +ENDCHAR +STARTCHAR uni6665 +ENCODING 26213 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9404 +9404 +93F8 +9000 +F000 +9FFE +9120 +9120 +9120 +F222 +0222 +041E +ENDCHAR +STARTCHAR uni6666 +ENCODING 26214 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +F7FC +9400 +9800 +93F8 +9288 +F248 +9FFE +9488 +9448 +9448 +F7FE +0010 +0070 +ENDCHAR +STARTCHAR uni6667 +ENCODING 26215 +BBX 15 15 1 -1 +BITMAP +0040 +0240 +F240 +97FC +9440 +9840 +9040 +FFFE +9040 +9000 +93F8 +9208 +F208 +0208 +03F8 +ENDCHAR +STARTCHAR uni6668 +ENCODING 26216 +BBX 15 15 1 -1 +BITMAP +3FF0 +2010 +3FF0 +2010 +3FF0 +0000 +7FFC +4000 +5FF8 +4000 +7FFC +8888 +8850 +0E30 +380E +ENDCHAR +STARTCHAR uni6669 +ENCODING 26217 +BBX 15 15 1 -1 +BITMAP +0100 +03F8 +F410 +9820 +97FC +9444 +9444 +F444 +97FC +9120 +9120 +9220 +F222 +0422 +181E +ENDCHAR +STARTCHAR uni666A +ENCODING 26218 +BBX 15 15 1 -1 +BITMAP +0120 +0120 +F120 +97FC +9524 +9524 +97FC +F524 +9524 +9524 +9FFE +9000 +F110 +0208 +0404 +ENDCHAR +STARTCHAR uni666B +ENCODING 26219 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +F0FC +9080 +97F8 +9408 +9408 +F7F8 +9408 +9408 +97F8 +9080 +FFFE +0080 +0080 +ENDCHAR +STARTCHAR uni666C +ENCODING 26220 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9000 +9208 +9208 +9318 +F4A4 +9802 +9040 +9FFE +9040 +F040 +0040 +0040 +ENDCHAR +STARTCHAR uni666D +ENCODING 26221 +BBX 14 14 1 -1 +BITMAP +07FC +F404 +9444 +95F4 +9444 +95F4 +F444 +9404 +95F4 +9514 +9514 +F5F4 +0804 +081C +ENDCHAR +STARTCHAR uni666E +ENCODING 26222 +BBX 15 15 1 -1 +BITMAP +1010 +0820 +7FFC +0440 +2448 +1450 +0440 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni666F +ENCODING 26223 +BBX 13 15 2 -1 +BITMAP +3FE0 +2020 +3FE0 +2020 +3FE0 +0200 +FFF8 +0000 +3FE0 +2020 +3FE0 +0200 +3260 +C218 +0E00 +ENDCHAR +STARTCHAR uni6670 +ENCODING 26224 +BBX 15 15 1 -1 +BITMAP +020C +0270 +F240 +9FC0 +9240 +927E +9348 +F6C8 +96C8 +9A48 +9248 +9248 +F288 +0288 +0208 +ENDCHAR +STARTCHAR uni6671 +ENCODING 26225 +BBX 14 16 1 -2 +BITMAP +0040 +0244 +F244 +9448 +90A0 +9110 +F608 +9044 +9040 +9248 +9248 +F450 +90A0 +0110 +0208 +0C04 +ENDCHAR +STARTCHAR uni6672 +ENCODING 26226 +BBX 14 15 1 -2 +BITMAP +0080 +F738 +9408 +9408 +9738 +F408 +9408 +97F8 +9120 +9120 +F120 +9120 +0224 +0424 +081C +ENDCHAR +STARTCHAR uni6673 +ENCODING 26227 +BBX 15 15 1 -1 +BITMAP +1018 +11E0 +FD00 +11FE +3910 +3510 +5510 +9110 +1210 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni6674 +ENCODING 26228 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9040 +FFFE +9000 +93F8 +9208 +93F8 +F208 +03F8 +0208 +0238 +ENDCHAR +STARTCHAR uni6675 +ENCODING 26229 +BBX 15 16 0 -2 +BITMAP +1040 +0840 +3E7E +2288 +2350 +3E20 +2058 +4186 +9FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni6676 +ENCODING 26230 +BBX 14 14 1 -1 +BITMAP +1FE0 +1020 +1FE0 +1020 +1020 +1FE0 +0000 +FCFC +8484 +8484 +FCFC +8484 +8484 +FCFC +ENDCHAR +STARTCHAR uni6677 +ENCODING 26231 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0810 +1F10 +7130 +0E28 +1344 +FFFE +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni6678 +ENCODING 26232 +BBX 15 14 1 -1 +BITMAP +1FF8 +1008 +1FF8 +1008 +1FF8 +0040 +7FFE +0484 +2744 +2448 +2428 +2F30 +F048 +0186 +ENDCHAR +STARTCHAR uni6679 +ENCODING 26233 +BBX 14 16 1 -2 +BITMAP +03F8 +0208 +F3F8 +9208 +9208 +93F8 +F000 +9200 +93FC +9494 +9894 +F124 +9224 +0444 +0094 +0308 +ENDCHAR +STARTCHAR uni667A +ENCODING 26234 +BBX 15 15 1 -1 +BITMAP +2000 +207E +3F42 +4442 +0442 +FFC2 +127E +2100 +5FF8 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni667B +ENCODING 26235 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FE +9110 +9248 +97FC +9A4A +F248 +93F8 +9248 +9248 +93F8 +F042 +0042 +003E +ENDCHAR +STARTCHAR uni667C +ENCODING 26236 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +F7FE +9402 +9A04 +9200 +93BC +F4A4 +94A4 +96A4 +9934 +9128 +F222 +9222 +0422 +081E +ENDCHAR +STARTCHAR uni667D +ENCODING 26237 +BBX 15 16 0 -2 +BITMAP +0110 +0110 +F110 +9110 +97BC +9110 +9110 +F338 +93B8 +9554 +9554 +9992 +F110 +9110 +0110 +0110 +ENDCHAR +STARTCHAR uni667E +ENCODING 26238 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9000 +9000 +93F8 +9208 +F208 +9208 +93F8 +9040 +9150 +F248 +9444 +0140 +0080 +ENDCHAR +STARTCHAR uni667F +ENCODING 26239 +BBX 14 16 1 -2 +BITMAP +01F8 +0108 +F908 +89F8 +8908 +8908 +89F8 +F800 +8BFC +8A04 +8A04 +8BFC +FA04 +8A04 +03FC +0204 +ENDCHAR +STARTCHAR uni6680 +ENCODING 26240 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +F210 +94FE +9910 +9110 +9310 +F210 +967C +9A10 +9210 +9210 +F210 +0210 +02FE +ENDCHAR +STARTCHAR uni6681 +ENCODING 26241 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9040 +9248 +9208 +FFFE +9208 +9208 +9000 +97FC +F120 +0222 +0422 +181E +ENDCHAR +STARTCHAR uni6682 +ENCODING 26242 +BBX 15 16 0 -2 +BITMAP +100C +FEF0 +2080 +4880 +7EFE +0888 +0E88 +F908 +4A08 +1FF8 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni6683 +ENCODING 26243 +BBX 15 14 1 -1 +BITMAP +1FF8 +1008 +1FF8 +1008 +1FF8 +0440 +7C7C +0440 +7C7C +0440 +1C7E +E440 +0840 +3040 +ENDCHAR +STARTCHAR uni6684 +ENCODING 26244 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +F7FE +9402 +95FA +9000 +91F8 +F108 +9108 +91F8 +9108 +9108 +F1F8 +0000 +07FE +ENDCHAR +STARTCHAR uni6685 +ENCODING 26245 +BBX 15 16 0 -2 +BITMAP +0100 +013C +F100 +9100 +91BC +9564 +9524 +F53C +9524 +9124 +9124 +913C +F124 +9100 +017E +0100 +ENDCHAR +STARTCHAR uni6686 +ENCODING 26246 +BBX 15 16 0 -2 +BITMAP +0210 +0110 +F110 +97BE +9228 +9248 +93AA +F2AE +92BA +92EA +92AE +92A8 +F4AA +94A2 +09A2 +101E +ENDCHAR +STARTCHAR uni6687 +ENCODING 26247 +BBX 15 14 1 -1 +BITMAP +07BC +F484 +9484 +97BC +9400 +947C +F784 +9424 +9424 +9428 +97A8 +F410 +0428 +04C6 +ENDCHAR +STARTCHAR uni6688 +ENCODING 26248 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +FFFE +8102 +BFFA +0100 +1FF0 +1110 +1FF0 +1110 +FFFE +0100 +ENDCHAR +STARTCHAR uni6689 +ENCODING 26249 +BBX 15 14 1 -1 +BITMAP +07FC +F404 +9444 +93F8 +9040 +93F8 +F248 +93F8 +9248 +93F8 +9040 +F7FE +0040 +0040 +ENDCHAR +STARTCHAR uni668A +ENCODING 26250 +BBX 14 15 1 -2 +BITMAP +07FC +F840 +8880 +8BF8 +8A08 +8A08 +FBF8 +8A08 +8BF8 +8A08 +8A08 +FBF8 +8800 +0110 +0208 +ENDCHAR +STARTCHAR uni668B +ENCODING 26251 +BBX 14 16 1 -2 +BITMAP +0040 +FE40 +827C +FE88 +9148 +FE48 +9050 +8A20 +A650 +C28C +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +ENDCHAR +STARTCHAR uni668C +ENCODING 26252 +BBX 14 16 1 -2 +BITMAP +0020 +07A8 +F0B0 +94A4 +9318 +9110 +9208 +F5F4 +9040 +9040 +97FC +9040 +F0A0 +9110 +0208 +0404 +ENDCHAR +STARTCHAR uni668D +ENCODING 26253 +BBX 15 14 1 -1 +BITMAP +03F8 +F208 +93F8 +9208 +9208 +93F8 +F100 +93FE +9442 +9C42 +94A2 +F512 +07F2 +000C +ENDCHAR +STARTCHAR uni668E +ENCODING 26254 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +FFFE +9110 +9150 +9040 +97FC +F444 +9444 +9444 +9FFE +90A0 +F110 +0208 +0C06 +ENDCHAR +STARTCHAR uni668F +ENCODING 26255 +BBX 14 16 1 -2 +BITMAP +0080 +0088 +F7E8 +9090 +90A0 +9FFC +9080 +F100 +93F0 +9610 +9A10 +93F0 +F210 +9210 +03F0 +0210 +ENDCHAR +STARTCHAR uni6690 +ENCODING 26256 +BBX 15 15 1 -1 +BITMAP +0080 +03F8 +F108 +97FE +9000 +93F8 +9208 +F3F8 +9010 +93FC +9210 +9210 +FFFE +0010 +0010 +ENDCHAR +STARTCHAR uni6691 +ENCODING 26257 +BBX 15 15 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF2 +0104 +3FF8 +0110 +FFFE +0080 +0FF8 +F808 +0FF8 +0808 +0FF8 +ENDCHAR +STARTCHAR uni6692 +ENCODING 26258 +BBX 15 14 1 -1 +BITMAP +03F8 +F208 +93F8 +9208 +9208 +93F8 +F240 +93FC +9440 +9840 +93F8 +F040 +0040 +0FFE +ENDCHAR +STARTCHAR uni6693 +ENCODING 26259 +BBX 15 16 0 -2 +BITMAP +0040 +7F40 +127E +0C88 +FF48 +1948 +2A50 +4820 +A850 +108C +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni6694 +ENCODING 26260 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +9040 +9040 +97FC +F514 +94A4 +95F4 +9444 +9444 +F5F4 +9444 +0444 +0454 +0408 +ENDCHAR +STARTCHAR uni6695 +ENCODING 26261 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9248 +F358 +92E8 +9248 +93F8 +9040 +F0E0 +9150 +0248 +0444 +0040 +ENDCHAR +STARTCHAR uni6696 +ENCODING 26262 +BBX 15 15 1 -1 +BITMAP +001C +F7E0 +9244 +9128 +93FC +9080 +F7FE +9080 +90F8 +9108 +9310 +F4A0 +0060 +0198 +0E06 +ENDCHAR +STARTCHAR uni6697 +ENCODING 26263 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +07F8 +F210 +9110 +9120 +9FFE +F000 +93F0 +9210 +9210 +F3F0 +0210 +0210 +03F0 +ENDCHAR +STARTCHAR uni6698 +ENCODING 26264 +BBX 15 14 1 -1 +BITMAP +03F0 +F210 +93F0 +9210 +93F0 +9000 +F7FE +9100 +93FC +9CA4 +9124 +F644 +0084 +0338 +ENDCHAR +STARTCHAR uni6699 +ENCODING 26265 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +90A0 +9FFE +F110 +93F8 +960C +9A0A +93F8 +F208 +0208 +03F8 +ENDCHAR +STARTCHAR uni669A +ENCODING 26266 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F780 +9008 +9488 +9250 +F3F8 +9440 +9040 +97FC +9040 +F248 +9248 +0248 +03F8 +0008 +ENDCHAR +STARTCHAR uni669B +ENCODING 26267 +BBX 14 15 1 -1 +BITMAP +0210 +0110 +F120 +97F8 +9080 +93F0 +9080 +F7FC +9100 +9200 +93F8 +9440 +F840 +9040 +07FC +ENDCHAR +STARTCHAR uni669C +ENCODING 26268 +BBX 15 16 0 -2 +BITMAP +2020 +1010 +FEFE +0000 +4444 +2424 +2828 +0EFE +F000 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni669D +ENCODING 26269 +BBX 15 14 1 -1 +BITMAP +0FFE +F802 +93F8 +9208 +9208 +93F8 +F208 +9208 +93F8 +9040 +9FFE +F000 +0318 +0C06 +ENDCHAR +STARTCHAR uni669E +ENCODING 26270 +BBX 14 16 1 -2 +BITMAP +0040 +0080 +F3F8 +9208 +93F8 +9208 +F3F8 +9208 +93F8 +9040 +97FC +F0E0 +9150 +0248 +0444 +0040 +ENDCHAR +STARTCHAR uni669F +ENCODING 26271 +BBX 14 15 1 -1 +BITMAP +0040 +0248 +F248 +9248 +93F8 +9000 +F7FC +9000 +93F8 +9208 +9208 +F3F8 +9110 +00A0 +07FC +ENDCHAR +STARTCHAR uni66A0 +ENCODING 26272 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0820 +7FFC +4004 +4FE4 +4824 +4FE4 +400C +ENDCHAR +STARTCHAR uni66A1 +ENCODING 26273 +BBX 14 16 1 -2 +BITMAP +0120 +0110 +F208 +9484 +9910 +93F8 +F008 +9000 +97BC +9084 +94A4 +F294 +94A4 +0084 +0294 +0108 +ENDCHAR +STARTCHAR uni66A2 +ENCODING 26274 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +F908 +A9F8 +A908 +A9F8 +F800 +AFFE +A900 +ABFE +FC92 +2122 +2642 +2084 +2318 +ENDCHAR +STARTCHAR uni66A3 +ENCODING 26275 +BBX 14 16 1 -2 +BITMAP +0200 +0200 +F3F8 +9400 +9BF0 +9000 +F7F0 +9110 +9550 +9390 +9FF0 +F114 +9394 +0D54 +010C +0104 +ENDCHAR +STARTCHAR uni66A4 +ENCODING 26276 +BBX 14 16 1 -2 +BITMAP +0040 +0080 +F3F8 +9208 +93F8 +9208 +F3F8 +9080 +97FC +9110 +9248 +F444 +9BF8 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni66A5 +ENCODING 26277 +BBX 14 15 1 -2 +BITMAP +03F8 +F208 +93F8 +9208 +93F8 +F040 +97FC +9404 +9080 +97FC +F110 +9320 +00C0 +0130 +0608 +ENDCHAR +STARTCHAR uni66A6 +ENCODING 26278 +BBX 14 14 1 -1 +BITMAP +7FF8 +4410 +4410 +5F7C +4410 +4E38 +5554 +4410 +4000 +5FF8 +9008 +9FF8 +1008 +1FF8 +ENDCHAR +STARTCHAR uni66A7 +ENCODING 26279 +BBX 14 16 1 -2 +BITMAP +001C +07E0 +F088 +9448 +9210 +97FC +F484 +9080 +97FC +9100 +91F8 +F288 +9250 +0420 +08D0 +030C +ENDCHAR +STARTCHAR uni66A8 +ENCODING 26280 +BBX 15 15 0 -1 +BITMAP +7DFC +4420 +7D20 +45FE +7C50 +4852 +5492 +650E +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni66A9 +ENCODING 26281 +BBX 14 16 1 -2 +BITMAP +0200 +0220 +F7B8 +94A8 +9AA8 +9510 +F210 +95E8 +9804 +9000 +97F8 +F080 +92A0 +0490 +0A88 +0100 +ENDCHAR +STARTCHAR uni66AA +ENCODING 26282 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9110 +91F0 +F040 +97FC +9444 +9664 +9554 +F6EC +9444 +0444 +0454 +0448 +ENDCHAR +STARTCHAR uni66AB +ENCODING 26283 +BBX 15 15 1 -1 +BITMAP +100C +1070 +FF40 +527E +7E48 +5248 +7E88 +1088 +FF08 +1008 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni66AC +ENCODING 26284 +BBX 14 16 1 -2 +BITMAP +1040 +7C40 +11F0 +FE50 +4450 +92D4 +7C54 +10AC +FD04 +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +ENDCHAR +STARTCHAR uni66AD +ENCODING 26285 +BBX 14 15 1 -1 +BITMAP +0040 +0080 +F3F8 +9208 +93F8 +9208 +93F8 +F000 +975C +9040 +975C +9040 +F7FC +0040 +0040 +ENDCHAR +STARTCHAR uni66AE +ENCODING 26286 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +FFFE +3018 +DFF6 +1010 +1FF0 +ENDCHAR +STARTCHAR uni66AF +ENCODING 26287 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9000 +93F8 +F208 +93F8 +9208 +93F8 +9040 +F7FC +90A0 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni66B0 +ENCODING 26288 +BBX 15 16 0 -2 +BITMAP +0124 +0124 +F224 +9424 +9954 +914A +9292 +F610 +9A10 +9250 +925C +9250 +F250 +92B0 +029E +0300 +ENDCHAR +STARTCHAR uni66B1 +ENCODING 26289 +BBX 15 14 1 -1 +BITMAP +07FE +F400 +9488 +95FC +9488 +9440 +F7FE +9480 +95FC +9684 +9484 +F4FC +0400 +07FE +ENDCHAR +STARTCHAR uni66B2 +ENCODING 26290 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9110 +9FFE +9000 +93F8 +F208 +93F8 +9208 +93F8 +9040 +FFFE +0040 +0040 +ENDCHAR +STARTCHAR uni66B3 +ENCODING 26291 +BBX 14 16 1 -2 +BITMAP +0110 +07BC +F110 +93B8 +9110 +97BC +F110 +9000 +97F8 +9008 +9008 +F3F8 +9008 +0008 +07F8 +0008 +ENDCHAR +STARTCHAR uni66B4 +ENCODING 26292 +BBX 15 15 1 -1 +BITMAP +3FF0 +2010 +3FF0 +2010 +3FF0 +0840 +3FF0 +0840 +FFFC +1120 +E918 +07A6 +1940 +E130 +070C +ENDCHAR +STARTCHAR uni66B5 +ENCODING 26293 +BBX 15 15 1 -1 +BITMAP +0110 +0FFE +F110 +91F0 +9040 +97FC +9444 +F7FC +9040 +97FC +9040 +9FFE +F0A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni66B6 +ENCODING 26294 +BBX 15 16 0 -2 +BITMAP +0210 +0110 +F110 +97BE +9240 +9200 +93BE +F28A +9288 +92A8 +92AE +92A8 +F4A8 +95A8 +085E +1080 +ENDCHAR +STARTCHAR uni66B7 +ENCODING 26295 +BBX 14 16 1 -2 +BITMAP +0040 +07FC +F040 +93F8 +9248 +93F8 +F248 +93F8 +9044 +97FC +9010 +F7FC +9210 +0110 +0050 +0020 +ENDCHAR +STARTCHAR uni66B8 +ENCODING 26296 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FE +9090 +9294 +9108 +93FC +F50A +91F8 +9108 +91F8 +9020 +F328 +0C26 +00E0 +ENDCHAR +STARTCHAR uni66B9 +ENCODING 26297 +BBX 15 15 1 -1 +BITMAP +47F8 +2408 +17F8 +8408 +47F8 +2220 +07FC +EC40 +37F8 +2440 +27F8 +2440 +27FC +5000 +8FFE +ENDCHAR +STARTCHAR uni66BA +ENCODING 26298 +BBX 14 15 1 -2 +BITMAP +07BC +F4A4 +94A4 +97BC +9000 +F3F8 +9248 +93F8 +9248 +93F8 +F040 +97FC +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni66BB +ENCODING 26299 +BBX 15 15 1 -1 +BITMAP +03F8 +0208 +F3F8 +9208 +93F8 +9040 +9FFE +F000 +93F8 +9208 +93F8 +9040 +F658 +1846 +01C0 +ENDCHAR +STARTCHAR uni66BC +ENCODING 26300 +BBX 14 15 2 -1 +BITMAP +5440 +9240 +107C +FE88 +9388 +BA50 +D620 +9250 +968C +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +ENDCHAR +STARTCHAR uni66BD +ENCODING 26301 +BBX 14 16 1 -2 +BITMAP +0040 +0248 +F150 +97FC +9150 +9248 +9444 +F208 +9208 +93BC +9488 +9AA8 +F13C +9208 +0408 +0808 +ENDCHAR +STARTCHAR uni66BE +ENCODING 26302 +BBX 15 15 1 -1 +BITMAP +0210 +0210 +FFD0 +903E +97A4 +94E4 +97A4 +F028 +97A8 +9110 +9210 +9F90 +F228 +0244 +0682 +ENDCHAR +STARTCHAR uni66BF +ENCODING 26303 +BBX 15 15 1 -1 +BITMAP +0040 +07FC +F040 +93F8 +9000 +93F8 +9208 +F3F8 +9110 +9FFE +9000 +93F8 +F208 +0208 +03F8 +ENDCHAR +STARTCHAR uni66C0 +ENCODING 26304 +BBX 14 15 1 -1 +BITMAP +0040 +07FC +F040 +93F8 +9000 +97FC +F404 +93F8 +9000 +93F8 +9208 +F3F8 +9208 +0110 +07FC +ENDCHAR +STARTCHAR uni66C1 +ENCODING 26305 +BBX 15 15 1 -1 +BITMAP +7EFC +4250 +7E50 +42FC +7E20 +4450 +7892 +430E +3FF0 +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni66C2 +ENCODING 26306 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F3F8 +9110 +9110 +97FC +F040 +93F8 +9248 +93F8 +9248 +F3F8 +9000 +0110 +0208 +0404 +ENDCHAR +STARTCHAR uni66C3 +ENCODING 26307 +BBX 14 16 1 -2 +BITMAP +0020 +0420 +F2F8 +9028 +91FC +9028 +96F8 +F324 +92A8 +9270 +92A8 +9324 +F260 +9200 +05FC +0800 +ENDCHAR +STARTCHAR uni66C4 +ENCODING 26308 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +F7FE +9110 +97FC +9248 +9248 +FFFE +9248 +9248 +97FC +9040 +F7FE +0040 +0040 +ENDCHAR +STARTCHAR uni66C5 +ENCODING 26309 +BBX 13 16 1 -2 +BITMAP +3FE0 +2020 +3FE0 +2020 +3FE0 +0880 +FFF8 +0880 +7FF0 +1240 +FFF8 +1240 +7FF0 +0200 +FFF8 +0200 +ENDCHAR +STARTCHAR uni66C6 +ENCODING 26310 +BBX 15 14 1 -1 +BITMAP +7FFE +4104 +5E78 +4410 +7F7E +4410 +4E38 +7556 +4410 +5FFC +9004 +9FFC +1004 +1FFC +ENDCHAR +STARTCHAR uni66C7 +ENCODING 26311 +BBX 15 15 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +7FFC +0100 +7FFC +4104 +7DF4 +0000 +3FF8 +0000 +FFFE +0830 +7FCC +ENDCHAR +STARTCHAR uni66C8 +ENCODING 26312 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9110 +9FFE +9000 +93F8 +F248 +93F8 +9248 +93F8 +9040 +F7FC +0040 +0FFE +ENDCHAR +STARTCHAR uni66C9 +ENCODING 26313 +BBX 15 15 1 -1 +BITMAP +0040 +03F8 +F040 +97FC +9000 +9208 +FFBE +9208 +9388 +9E3E +9000 +FFFE +0110 +0212 +1C0E +ENDCHAR +STARTCHAR uni66CA +ENCODING 26314 +BBX 14 16 1 -2 +BITMAP +0120 +0FF8 +F128 +97F8 +9520 +97FC +F224 +97F4 +9A1C +93F0 +9210 +F3F0 +9210 +03F0 +0120 +0210 +ENDCHAR +STARTCHAR uni66CB +ENCODING 26315 +BBX 14 15 1 -2 +BITMAP +07FC +F0A0 +97FC +94A4 +97FC +F000 +93F8 +9208 +93F8 +9208 +F3F8 +9040 +07FC +0040 +0040 +ENDCHAR +STARTCHAR uni66CC +ENCODING 26316 +BBX 13 15 1 -1 +BITMAP +01F0 +F910 +89F0 +F910 +89F0 +F910 +0550 +0220 +FFF8 +9048 +2020 +5FD0 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni66CD +ENCODING 26317 +BBX 14 16 1 -2 +BITMAP +0080 +03F8 +F208 +93F8 +9208 +93F8 +F208 +93F8 +9040 +9248 +9150 +F248 +9040 +07FC +0040 +0040 +ENDCHAR +STARTCHAR uni66CE +ENCODING 26318 +BBX 14 15 1 -2 +BITMAP +03F8 +F2A8 +93F8 +9040 +93F8 +F040 +97FC +9110 +90A0 +93F8 +F040 +97FC +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni66CF +ENCODING 26319 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +2100 +27DE +5452 +97D4 +E458 +2454 +57D2 +9512 +F49A +2554 +4610 +ENDCHAR +STARTCHAR uni66D0 +ENCODING 26320 +BBX 15 16 0 -2 +BITMAP +0FE0 +0820 +0FE0 +0820 +0FE0 +7C7C +4444 +7C7C +4444 +7D7C +1100 +1FF8 +2100 +5FF0 +0100 +FFFE +ENDCHAR +STARTCHAR uni66D1 +ENCODING 26321 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +7FFC +4444 +7C7C +4444 +7D7C +06C0 +1930 +E64E +0180 +0E20 +00C0 +1F00 +ENDCHAR +STARTCHAR uni66D2 +ENCODING 26322 +BBX 15 16 0 -2 +BITMAP +0108 +0208 +F7C8 +9450 +97DE +9464 +97D4 +F214 +9114 +97D4 +9214 +93C8 +F248 +9454 +0554 +08A2 +ENDCHAR +STARTCHAR uni66D3 +ENCODING 26323 +BBX 15 16 0 -2 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +1110 +1FF0 +4104 +7FFC +0200 +FFFE +0920 +3FF8 +C546 +0BA0 +1110 +ENDCHAR +STARTCHAR uni66D4 +ENCODING 26324 +BBX 15 16 0 -2 +BITMAP +0288 +0288 +F7E8 +9290 +941E +97E4 +9454 +F854 +9754 +9554 +9554 +9748 +F548 +9054 +0294 +0122 +ENDCHAR +STARTCHAR uni66D5 +ENCODING 26325 +BBX 14 16 1 -2 +BITMAP +0200 +03F0 +F410 +9FFC +9510 +9648 +F7FC +9400 +95F8 +9400 +95F8 +F400 +95F8 +0908 +09F8 +1108 +ENDCHAR +STARTCHAR uni66D6 +ENCODING 26326 +BBX 15 15 1 -1 +BITMAP +001C +07E8 +F288 +9150 +97FC +9484 +9554 +F8F2 +9100 +91F8 +9208 +9510 +F0E0 +0318 +1C06 +ENDCHAR +STARTCHAR uni66D7 +ENCODING 26327 +BBX 14 16 1 -2 +BITMAP +00A0 +04A4 +F2A8 +90A0 +97FC +9110 +F0A0 +97FC +9040 +93F8 +9040 +F7FC +9150 +0248 +0C44 +0040 +ENDCHAR +STARTCHAR uni66D8 +ENCODING 26328 +BBX 14 15 1 -2 +BITMAP +03F8 +F040 +97FC +9444 +9358 +F040 +9358 +9000 +97FC +9040 +F3F8 +92A8 +02A8 +02A8 +0218 +ENDCHAR +STARTCHAR uni66D9 +ENCODING 26329 +BBX 15 14 1 -1 +BITMAP +07FC +F4A4 +97FC +9042 +97FC +9048 +FFFE +9020 +93FC +9E04 +93FC +F204 +0204 +03FC +ENDCHAR +STARTCHAR uni66DA +ENCODING 26330 +BBX 15 15 1 -1 +BITMAP +0210 +1FFE +E210 +AFFC +A804 +ABF4 +A000 +FFFE +A100 +A28C +AD50 +A260 +ECB0 +0328 +1CC6 +ENDCHAR +STARTCHAR uni66DB +ENCODING 26331 +BBX 15 15 1 -1 +BITMAP +0038 +03C0 +F040 +9FFE +9040 +97FC +964C +F554 +97FC +9040 +93F8 +9040 +F7FE +0524 +0892 +ENDCHAR +STARTCHAR uni66DC +ENCODING 26332 +BBX 15 14 1 -1 +BITMAP +07BC +F084 +97BC +9084 +97BC +9420 +FFFC +9420 +97FC +9420 +97FC +F420 +0420 +07FE +ENDCHAR +STARTCHAR uni66DD +ENCODING 26333 +BBX 15 14 1 -1 +BITMAP +03F8 +F208 +93F8 +9208 +93F8 +9110 +F7FC +9110 +9FFE +9148 +964E +F1D0 +0E78 +00C6 +ENDCHAR +STARTCHAR uni66DE +ENCODING 26334 +BBX 14 15 1 -2 +BITMAP +07FC +F490 +97FC +9490 +95F8 +F548 +95F8 +9548 +95F8 +9440 +F7FC +9654 +0AF4 +0A14 +120C +ENDCHAR +STARTCHAR uni66DF +ENCODING 26335 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +7FFC +4444 +7C7C +4444 +7FFC +2000 +2FF8 +2000 +3FFC +2448 +4430 +860E +ENDCHAR +STARTCHAR uni66E0 +ENCODING 26336 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +F7FE +9488 +95FC +9488 +F7FE +9420 +95FC +9524 +95FC +F924 +09FC +1088 +0306 +ENDCHAR +STARTCHAR uni66E1 +ENCODING 26337 +BBX 15 16 0 -2 +BITMAP +0FE0 +0820 +0FE0 +0820 +0FE0 +7C7C +4444 +7C7C +4444 +FFFE +9012 +1FF0 +1010 +1FF0 +1010 +FFFE +ENDCHAR +STARTCHAR uni66E2 +ENCODING 26338 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9444 +93F8 +90A0 +F514 +93F8 +9514 +91F0 +9110 +F1F0 +9040 +0248 +0544 +0080 +ENDCHAR +STARTCHAR uni66E3 +ENCODING 26339 +BBX 15 16 0 -2 +BITMAP +0110 +0110 +F7FC +9110 +91F0 +9208 +92EA +F6AC +92A8 +92AA +96EA +9A06 +F000 +92A4 +0252 +0452 +ENDCHAR +STARTCHAR uni66E4 +ENCODING 26340 +BBX 15 16 0 -2 +BITMAP +07FC +0040 +F7FE +9442 +9B5C +9040 +975C +F120 +93FC +9620 +9BFC +9220 +F3FC +9220 +03FE +0200 +ENDCHAR +STARTCHAR uni66E5 +ENCODING 26341 +BBX 14 16 1 -2 +BITMAP +0080 +00F8 +F080 +97F8 +9488 +97E0 +F488 +95F8 +9550 +95F0 +9550 +F5F0 +9400 +0BF8 +0AA8 +17FC +ENDCHAR +STARTCHAR uni66E6 +ENCODING 26342 +BBX 15 15 1 -1 +BITMAP +0110 +07FC +F040 +93F8 +9040 +9FFE +9008 +F724 +9220 +9FFE +96A4 +9A54 +F788 +009A +0364 +ENDCHAR +STARTCHAR uni66E7 +ENCODING 26343 +BBX 14 16 1 -2 +BITMAP +7FF0 +4010 +7FF0 +4010 +7FF0 +0020 +FE20 +01FC +7D24 +4524 +7DFC +0020 +FE28 +AA24 +FFFC +9204 +ENDCHAR +STARTCHAR uni66E8 +ENCODING 26344 +BBX 15 15 1 -1 +BITMAP +0120 +0120 +FFFE +94A0 +953C +9FC4 +903C +F7A0 +94BC +97A0 +94BC +97A0 +F4BC +04A2 +05BE +ENDCHAR +STARTCHAR uni66E9 +ENCODING 26345 +BBX 15 15 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +2448 +DFF6 +0440 +FFFE +0C88 +7050 +1F30 +700E +ENDCHAR +STARTCHAR uni66EA +ENCODING 26346 +BBX 15 15 0 -2 +BITMAP +03FE +F252 +9252 +93FE +9108 +9154 +F25E +97B4 +911E +9254 +97DE +F014 +9554 +055E +0010 +ENDCHAR +STARTCHAR uni66EB +ENCODING 26347 +BBX 15 16 0 -2 +BITMAP +2104 +47C8 +8812 +F3BC +2008 +4B92 +F83E +0380 +AAAA +ABAA +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni66EC +ENCODING 26348 +BBX 15 14 1 -1 +BITMAP +0FBE +E000 +AFBE +AAAA +A040 +AFFE +E920 +AFFC +A924 +AFFC +AA20 +EBBC +1222 +079E +ENDCHAR +STARTCHAR uni66ED +ENCODING 26349 +BBX 15 16 0 -2 +BITMAP +0248 +0150 +F7FC +9404 +91F0 +9110 +97FC +F554 +94E4 +97FC +9040 +97FC +F040 +9FFE +02A4 +0452 +ENDCHAR +STARTCHAR uni66EE +ENCODING 26350 +BBX 15 16 0 -2 +BITMAP +07BC +04A4 +F7BC +9000 +97FE +9400 +9590 +F49E +97D4 +9564 +95D4 +9554 +F5D4 +9568 +0BC8 +1054 +ENDCHAR +STARTCHAR uni66EF +ENCODING 26351 +BBX 14 16 1 -2 +BITMAP +07FC +0404 +F7FC +9524 +94A8 +9524 +F5FC +9554 +95FC +9644 +95F4 +F554 +95F4 +0444 +0BF4 +0008 +ENDCHAR +STARTCHAR uni66F0 +ENCODING 26352 +BBX 13 13 2 -1 +BITMAP +FFF8 +8008 +8008 +8008 +8008 +8008 +FFC8 +8008 +8008 +8008 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni66F1 +ENCODING 26353 +BBX 11 15 2 -2 +BITMAP +FFE0 +8020 +8020 +8020 +FFE0 +8420 +8420 +8420 +FFE0 +8420 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni66F2 +ENCODING 26354 +BBX 13 15 2 -1 +BITMAP +0880 +0880 +0880 +0880 +FFF8 +8888 +8888 +8888 +8888 +FFF8 +8888 +8888 +8888 +8888 +FFF8 +ENDCHAR +STARTCHAR uni66F3 +ENCODING 26355 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +3FF0 +2210 +2210 +3FF0 +2210 +2210 +3FF0 +0100 +0110 +00A0 +01C2 +0E32 +F00C +ENDCHAR +STARTCHAR uni66F4 +ENCODING 26356 +BBX 14 14 2 -1 +BITMAP +FFF8 +0200 +3FE0 +2220 +2220 +3FE0 +2220 +2220 +3FE0 +2200 +1400 +0C00 +3380 +C07C +ENDCHAR +STARTCHAR uni66F5 +ENCODING 26357 +BBX 15 15 1 -1 +BITMAP +0280 +0240 +0240 +7FF0 +4210 +4210 +7F90 +4210 +4218 +7FF0 +0220 +0140 +0182 +0E62 +F01C +ENDCHAR +STARTCHAR uni66F6 +ENCODING 26358 +BBX 12 16 1 -2 +BITMAP +1000 +1000 +3FF0 +4490 +8890 +1110 +2250 +4420 +3FE0 +2020 +2020 +3FE0 +2020 +2020 +3FE0 +2020 +ENDCHAR +STARTCHAR uni66F7 +ENCODING 26359 +BBX 14 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0800 +1FFC +3104 +D104 +1284 +1444 +1FE4 +0018 +ENDCHAR +STARTCHAR uni66F8 +ENCODING 26360 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +FFFE +0000 +3FF8 +2008 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni66F9 +ENCODING 26361 +BBX 15 15 1 -1 +BITMAP +0440 +FFFE +0440 +3FF8 +2448 +3FF8 +2448 +3FF8 +0000 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni66FA +ENCODING 26362 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +0200 +7FF0 +4210 +7FF0 +4210 +7FF0 +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +ENDCHAR +STARTCHAR uni66FB +ENCODING 26363 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +1000 +1008 +1E7E +2248 +5248 +0A48 +05FE +1808 +E008 +ENDCHAR +STARTCHAR uni66FC +ENCODING 26364 +BBX 14 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +7FFC +4444 +7FFC +0000 +7FFC +1018 +0C60 +0380 +1C60 +E01C +ENDCHAR +STARTCHAR uni66FD +ENCODING 26365 +BBX 11 15 3 -1 +BITMAP +2080 +1080 +1100 +FFE0 +8420 +FFE0 +8420 +FFE0 +0000 +7FC0 +4040 +7FC0 +4040 +4040 +7FC0 +ENDCHAR +STARTCHAR uni66FE +ENCODING 26366 +BBX 15 15 1 -1 +BITMAP +03C0 +1020 +2018 +FFFE +2928 +2548 +2108 +3FF8 +0000 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni66FF +ENCODING 26367 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +7EFC +0820 +0820 +FEFE +1450 +2288 +DFF6 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni6700 +ENCODING 26368 +BBX 14 15 1 -1 +BITMAP +3FF0 +2010 +3FF0 +2010 +3FF0 +0000 +FFFC +2400 +3DF8 +2488 +3C88 +2450 +3C20 +C450 +058C +ENDCHAR +STARTCHAR uni6701 +ENCODING 26369 +BBX 15 15 1 -1 +BITMAP +0810 +7CFC +4890 +4890 +FDFC +1020 +2A52 +4A52 +868E +3FF8 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni6702 +ENCODING 26370 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +2220 +3E20 +22FC +3E24 +2224 +2F24 +F244 +4254 +0288 +ENDCHAR +STARTCHAR uni6703 +ENCODING 26371 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0C60 +37D8 +C006 +3FF8 +2928 +2548 +3FF8 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni6704 +ENCODING 26372 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +27FC +F840 +ABF8 +AA48 +FB58 +AAE8 +AA48 +ABF8 +F840 +A8E0 +2150 +2248 +2444 +2040 +ENDCHAR +STARTCHAR uni6705 +ENCODING 26373 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1104 +FDFC +1104 +1104 +11FC +FC80 +21FE +2222 +2D22 +2952 +5D8A +E5F2 +000C +ENDCHAR +STARTCHAR uni6706 +ENCODING 26374 +BBX 15 16 0 -2 +BITMAP +4440 +2440 +2840 +FE7E +92AA +D72A +BA2A +924A +FE4A +0092 +7D12 +4422 +7C22 +4442 +7C94 +4408 +ENDCHAR +STARTCHAR uni6707 +ENCODING 26375 +BBX 15 16 0 -2 +BITMAP +1010 +2820 +44FE +BA92 +0092 +FEFE +9292 +D692 +92FE +FE28 +0048 +7DFE +4408 +7C08 +4408 +7C08 +ENDCHAR +STARTCHAR uni6708 +ENCODING 26376 +BBX 11 14 2 -1 +BITMAP +1FE0 +1020 +1020 +1020 +1FE0 +1020 +1020 +1020 +1FE0 +1020 +2020 +2020 +4020 +80E0 +ENDCHAR +STARTCHAR uni6709 +ENCODING 26377 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +FFFE +0400 +0400 +0FF8 +1808 +1808 +2FF8 +4808 +8808 +0FF8 +0808 +0808 +0838 +ENDCHAR +STARTCHAR uni670A +ENCODING 26378 +BBX 15 15 0 -2 +BITMAP +7800 +49FC +4800 +4800 +7800 +4BFE +4890 +4890 +7890 +4890 +4890 +4892 +4912 +4912 +9A0E +ENDCHAR +STARTCHAR uni670B +ENCODING 26379 +BBX 14 14 1 -1 +BITMAP +3E7C +2244 +2244 +2244 +3E7C +2244 +2244 +2244 +3E7C +2244 +2244 +4284 +4284 +8F1C +ENDCHAR +STARTCHAR uni670C +ENCODING 26380 +BBX 15 16 0 -2 +BITMAP +0010 +3C50 +2450 +2450 +2488 +3C88 +2504 +26FA +2448 +3C48 +2448 +2448 +2488 +4488 +5528 +8A10 +ENDCHAR +STARTCHAR uni670D +ENCODING 26381 +BBX 15 14 1 -1 +BITMAP +79FC +4904 +4904 +490C +7900 +49FC +4944 +4944 +7928 +4928 +4910 +4918 +8924 +9942 +ENDCHAR +STARTCHAR uni670E +ENCODING 26382 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2450 +2450 +2488 +3D24 +2612 +2410 +25FC +3C04 +2408 +2488 +2450 +4420 +5410 +8810 +ENDCHAR +STARTCHAR uni670F +ENCODING 26383 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4924 +4924 +4924 +7924 +49FC +4820 +4820 +7A22 +4A22 +4A22 +4A22 +8A22 +BBFE +ENDCHAR +STARTCHAR uni6710 +ENCODING 26384 +BBX 14 16 0 -2 +BITMAP +0080 +3C80 +2500 +25FC +2604 +3C04 +25E4 +2524 +2524 +3D24 +25E4 +2524 +2404 +4404 +5428 +8810 +ENDCHAR +STARTCHAR uni6711 +ENCODING 26385 +BBX 15 16 0 -2 +BITMAP +0048 +7A48 +4A48 +4A48 +4A48 +7FFE +4A48 +4A48 +4A48 +7A48 +4A78 +4A00 +4A00 +4A00 +4BFE +9800 +ENDCHAR +STARTCHAR uni6712 +ENCODING 26386 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4BFE +4A22 +4A22 +7A52 +4A52 +4AAA +4A22 +7A22 +4A52 +4A52 +4A8A +8A02 +9A06 +ENDCHAR +STARTCHAR uni6713 +ENCODING 26387 +BBX 15 15 1 -1 +BITMAP +0090 +7894 +4A94 +4A98 +4990 +7890 +4890 +4890 +4998 +7E96 +4890 +4890 +4912 +8912 +9A0E +ENDCHAR +STARTCHAR uni6714 +ENCODING 26388 +BBX 14 15 1 -1 +BITMAP +4100 +217C +2244 +0444 +FFC4 +087C +4944 +4944 +4944 +497C +7F44 +0844 +0884 +1084 +211C +ENDCHAR +STARTCHAR uni6715 +ENCODING 26389 +BBX 15 15 1 -1 +BITMAP +0104 +7888 +4810 +49FC +4820 +7820 +4820 +4BFE +4820 +7820 +4850 +4850 +4888 +8904 +9A02 +ENDCHAR +STARTCHAR uni6716 +ENCODING 26390 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +49FC +4904 +4904 +79FC +4904 +4904 +49FC +7922 +4922 +4914 +4910 +89E8 +BB06 +ENDCHAR +STARTCHAR uni6717 +ENCODING 26391 +BBX 14 15 1 -1 +BITMAP +1000 +107C +7E44 +4244 +4244 +7E7C +4244 +4244 +7E44 +407C +4444 +4444 +4E84 +7284 +C11C +ENDCHAR +STARTCHAR uni6718 +ENCODING 26392 +BBX 15 16 0 -2 +BITMAP +0040 +7840 +4888 +4904 +4BFE +7802 +4888 +4944 +4A42 +78F8 +4988 +4A50 +4820 +4850 +4988 +9E06 +ENDCHAR +STARTCHAR uni6719 +ENCODING 26393 +BBX 14 14 1 -1 +BITMAP +007C +FF44 +9544 +9544 +957C +A544 +C344 +8144 +BD7C +A544 +A544 +FF84 +0084 +011C +ENDCHAR +STARTCHAR uni671A +ENCODING 26394 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +1000 +1000 +1FF8 +0000 +7CFC +4484 +44FC +7C84 +44FC +4484 +7C84 +0114 +0208 +ENDCHAR +STARTCHAR uni671B +ENCODING 26395 +BBX 15 15 1 -1 +BITMAP +1000 +107C +FE44 +407C +4044 +407C +3C88 +0118 +0000 +7FFC +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni671C +ENCODING 26396 +BBX 15 16 0 -2 +BITMAP +0040 +3C20 +27FE +2400 +25FC +3D04 +25FC +2400 +25FC +3C08 +2410 +27FE +2420 +4420 +54A0 +8840 +ENDCHAR +STARTCHAR uni671D +ENCODING 26397 +BBX 14 15 1 -1 +BITMAP +0800 +087C +FF44 +0844 +7E44 +427C +7E44 +4244 +4244 +7E7C +0844 +FF44 +0884 +0884 +091C +ENDCHAR +STARTCHAR uni671E +ENCODING 26398 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +7FFC +0820 +0FE0 +0820 +FFFE +1010 +2FE8 +C826 +0FE0 +0820 +0FE0 +1020 +20E0 +ENDCHAR +STARTCHAR uni671F +ENCODING 26399 +BBX 14 15 1 -1 +BITMAP +2400 +247C +FF44 +2444 +2444 +3C7C +2444 +2444 +3C44 +247C +2444 +FF84 +2084 +4504 +821C +ENDCHAR +STARTCHAR uni6720 +ENCODING 26400 +BBX 15 16 0 -2 +BITMAP +0088 +7888 +4BFE +4888 +48A8 +7820 +49FC +4924 +4924 +7924 +4BFE +4820 +4850 +4888 +4904 +9A02 +ENDCHAR +STARTCHAR uni6721 +ENCODING 26401 +BBX 15 15 0 -2 +BITMAP +7888 +4A52 +4A22 +4A52 +7A8A +4A02 +4BFE +4888 +7944 +4A7A +4888 +4950 +4820 +48D8 +9B06 +ENDCHAR +STARTCHAR uni6722 +ENCODING 26402 +BBX 15 14 0 -1 +BITMAP +7F7C +4844 +7E7C +4244 +7E7C +4844 +7F54 +0088 +7FFC +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni6723 +ENCODING 26403 +BBX 15 16 0 -2 +BITMAP +0020 +3DFC +2488 +2450 +27FE +3C00 +25FC +2524 +25FC +3D24 +25FC +2420 +25FC +4420 +57FE +8800 +ENDCHAR +STARTCHAR uni6724 +ENCODING 26404 +BBX 14 16 0 -2 +BITMAP +3E7C +2244 +3E7C +2244 +3E7C +2244 +4A94 +8508 +3E7C +2244 +3E7C +2244 +3E7C +2244 +4A94 +8508 +ENDCHAR +STARTCHAR uni6725 +ENCODING 26405 +BBX 15 16 0 -2 +BITMAP +0088 +7AAA +4ADC +4C88 +4954 +7A22 +4800 +4BFE +4A42 +7C44 +4BFC +4844 +4844 +4884 +4914 +9A08 +ENDCHAR +STARTCHAR uni6726 +ENCODING 26406 +BBX 15 15 1 -1 +BITMAP +0110 +7FFE +5110 +57FC +5404 +75F4 +5000 +5FFE +5080 +7144 +56A8 +5130 +5658 +9194 +9E62 +ENDCHAR +STARTCHAR uni6727 +ENCODING 26407 +BBX 15 15 1 -1 +BITMAP +0120 +7120 +5FFE +54A0 +52BC +7FC4 +503C +57A0 +54BC +77A0 +54BC +57A0 +54BC +94A2 +B59E +ENDCHAR +STARTCHAR uni6728 +ENCODING 26408 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +FFFE +0380 +0380 +0540 +0540 +0920 +1110 +2108 +4104 +8102 +0100 +0100 +ENDCHAR +STARTCHAR uni6729 +ENCODING 26409 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0100 +0100 +FFFE +0100 +0100 +0920 +0910 +1108 +1108 +2104 +4104 +8104 +0500 +0200 +ENDCHAR +STARTCHAR uni672A +ENCODING 26410 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0540 +0540 +0920 +1110 +2108 +C106 +0100 +ENDCHAR +STARTCHAR uni672B +ENCODING 26411 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +7FFC +0100 +0100 +0100 +3FF8 +0100 +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni672C +ENCODING 26412 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +FFFE +0100 +0380 +0540 +0540 +0920 +1110 +2108 +4FE4 +8102 +0100 +0100 +ENDCHAR +STARTCHAR uni672D +ENCODING 26413 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +FE80 +1080 +3080 +3880 +5480 +5280 +9080 +1080 +1080 +1082 +1082 +107E +ENDCHAR +STARTCHAR uni672E +ENCODING 26414 +BBX 14 15 2 -1 +BITMAP +0220 +0210 +0210 +FFFC +0200 +0200 +2220 +2220 +2220 +2220 +4220 +4224 +8224 +821C +0200 +ENDCHAR +STARTCHAR uni672F +ENCODING 26415 +BBX 15 16 0 -2 +BITMAP +0100 +0120 +0110 +0110 +7FFC +0380 +0540 +0540 +0920 +1110 +2108 +4104 +8102 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni6730 +ENCODING 26416 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +7FFC +0380 +0540 +0920 +3118 +C106 +3FF8 +0010 +0060 +0380 +1C04 +2004 +1FFC +ENDCHAR +STARTCHAR uni6731 +ENCODING 26417 +BBX 15 15 1 -1 +BITMAP +0100 +1100 +1100 +3FF8 +2100 +4100 +0100 +7FFC +0100 +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6732 +ENCODING 26418 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +1040 +FC40 +1040 +3040 +3840 +54A0 +54A0 +90A0 +1110 +1110 +1208 +1404 +1802 +ENDCHAR +STARTCHAR uni6733 +ENCODING 26419 +BBX 15 15 1 -1 +BITMAP +1000 +10F0 +1010 +FC10 +1110 +1110 +3910 +3510 +3110 +5110 +5110 +9108 +1208 +1204 +1402 +ENDCHAR +STARTCHAR uni6734 +ENCODING 26420 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FE20 +1020 +3020 +3838 +5426 +5220 +9020 +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni6735 +ENCODING 26421 +BBX 15 15 0 -2 +BITMAP +0FE0 +0820 +0820 +0820 +1020 +201E +C100 +0100 +7FFC +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6736 +ENCODING 26422 +BBX 15 14 1 -1 +BITMAP +7FF0 +0410 +0420 +087C +1004 +2004 +C138 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6737 +ENCODING 26423 +BBX 14 15 1 -1 +BITMAP +1000 +13FC +1044 +FC44 +1044 +1044 +3844 +3444 +3444 +5084 +5084 +9084 +1108 +1208 +1430 +ENDCHAR +STARTCHAR uni6738 +ENCODING 26424 +BBX 14 15 1 -1 +BITMAP +1040 +1040 +1040 +FC40 +13FC +1044 +3844 +3444 +3444 +5084 +5084 +9084 +1108 +1208 +1430 +ENDCHAR +STARTCHAR uni6739 +ENCODING 26425 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +1080 +1080 +FDF0 +1090 +3090 +3890 +5490 +5490 +9090 +1092 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni673A +ENCODING 26426 +BBX 15 15 1 -1 +BITMAP +2000 +21F0 +2110 +FD10 +2110 +2110 +7110 +6910 +6910 +A110 +A110 +2210 +2212 +2412 +280E +ENDCHAR +STARTCHAR uni673B +ENCODING 26427 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +0884 +0884 +FE84 +0884 +1884 +1C84 +2A8C +2AB4 +48C4 +8884 +0804 +0804 +0804 +0804 +ENDCHAR +STARTCHAR uni673C +ENCODING 26428 +BBX 14 16 0 -2 +BITMAP +0880 +0880 +0880 +0884 +FE88 +0890 +18A0 +1CC0 +2A80 +2A80 +4880 +8884 +0884 +0884 +087C +0800 +ENDCHAR +STARTCHAR uni673D +ENCODING 26429 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1040 +FC40 +1080 +3080 +39FC +3504 +5004 +5004 +9004 +1008 +1008 +1008 +1070 +ENDCHAR +STARTCHAR uni673E +ENCODING 26430 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +0BFE +0820 +FE20 +0820 +1820 +1C20 +2A20 +2A20 +4820 +8820 +0820 +0820 +08A0 +0840 +ENDCHAR +STARTCHAR uni673F +ENCODING 26431 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +0100 +3FF8 +2108 +2108 +23B8 +0540 +0920 +1110 +610C +0100 +0100 +ENDCHAR +STARTCHAR uni6740 +ENCODING 26432 +BBX 15 16 0 -2 +BITMAP +0008 +1810 +0660 +0180 +0660 +1818 +6104 +0100 +FFFE +0100 +1120 +1110 +2108 +2104 +4504 +0200 +ENDCHAR +STARTCHAR uni6741 +ENCODING 26433 +BBX 15 15 1 -1 +BITMAP +1000 +11E0 +1020 +FE20 +1020 +1020 +3820 +3450 +3250 +5050 +5088 +9088 +1104 +1204 +1402 +ENDCHAR +STARTCHAR uni6742 +ENCODING 26434 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +3FE0 +0420 +0422 +0822 +111E +6100 +0100 +FFFE +0100 +0920 +1110 +2108 +4504 +0200 +ENDCHAR +STARTCHAR uni6743 +ENCODING 26435 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1104 +1104 +FD04 +1088 +3088 +3888 +5450 +5450 +9020 +1020 +1050 +1088 +1104 +1602 +ENDCHAR +STARTCHAR uni6744 +ENCODING 26436 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FC20 +1020 +3020 +3BFE +5420 +5420 +9020 +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni6745 +ENCODING 26437 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +1020 +FC20 +1020 +3020 +3BFE +5420 +5420 +9020 +1020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni6746 +ENCODING 26438 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1020 +FC20 +1020 +1020 +3020 +3BFE +3420 +5420 +5020 +9020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni6747 +ENCODING 26439 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1000 +F800 +1000 +17FE +3080 +3880 +31FC +5104 +5204 +9004 +1008 +1008 +1070 +ENDCHAR +STARTCHAR uni6748 +ENCODING 26440 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1004 +FC04 +1144 +1124 +3B28 +3488 +3090 +5050 +5020 +9050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni6749 +ENCODING 26441 +BBX 15 15 1 -1 +BITMAP +1008 +1010 +1060 +FD80 +1004 +1008 +3010 +3860 +5580 +5002 +9004 +1008 +1010 +1060 +1380 +ENDCHAR +STARTCHAR uni674A +ENCODING 26442 +BBX 14 16 0 -2 +BITMAP +1104 +1124 +1124 +1124 +FD24 +1124 +3124 +3924 +5524 +5124 +9124 +1124 +1124 +1224 +1204 +1404 +ENDCHAR +STARTCHAR uni674B +ENCODING 26443 +BBX 15 16 0 -2 +BITMAP +1000 +11F0 +1110 +1110 +FD10 +1110 +3190 +3950 +5550 +5510 +9110 +1112 +1112 +1212 +120E +1400 +ENDCHAR +STARTCHAR uni674C +ENCODING 26444 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1090 +FC90 +1090 +1090 +3090 +3890 +3490 +5090 +5090 +9090 +1112 +1112 +120E +ENDCHAR +STARTCHAR uni674D +ENCODING 26445 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1008 +FC10 +1020 +1020 +3020 +3BFE +3420 +5020 +5020 +9020 +1020 +1020 +10E0 +ENDCHAR +STARTCHAR uni674E +ENCODING 26446 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0540 +0920 +3118 +C106 +0000 +1FF0 +0060 +0180 +FFFE +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni674F +ENCODING 26447 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +FFFE +0540 +0920 +3118 +C106 +0000 +1FF0 +1010 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni6750 +ENCODING 26448 +BBX 15 15 1 -1 +BITMAP +1008 +1008 +1008 +FBFE +1018 +1018 +3028 +3828 +5448 +5088 +9108 +1208 +1408 +1008 +1038 +ENDCHAR +STARTCHAR uni6751 +ENCODING 26449 +BBX 15 15 1 -1 +BITMAP +1008 +1008 +1008 +FDFE +1008 +1008 +3008 +3908 +3488 +5048 +5008 +9008 +1008 +1008 +1038 +ENDCHAR +STARTCHAR uni6752 +ENCODING 26450 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +11FC +1044 +FC44 +1144 +3944 +3544 +5244 +5044 +9084 +1084 +1104 +1104 +1228 +1410 +ENDCHAR +STARTCHAR uni6753 +ENCODING 26451 +BBX 14 15 1 -1 +BITMAP +2100 +2100 +2100 +FBFC +2204 +2404 +7004 +6804 +69E4 +A004 +A004 +2004 +2008 +2008 +2070 +ENDCHAR +STARTCHAR uni6754 +ENCODING 26452 +BBX 15 15 1 -1 +BITMAP +1038 +11C0 +1040 +FC40 +1040 +1040 +307C +3BC0 +3440 +5040 +5040 +9040 +1042 +1042 +103E +ENDCHAR +STARTCHAR uni6755 +ENCODING 26453 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +0820 +FE20 +09FE +1820 +1C20 +2A20 +2A50 +4850 +8850 +0888 +0888 +0904 +0A02 +ENDCHAR +STARTCHAR uni6756 +ENCODING 26454 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +FBFE +2020 +2020 +6120 +7120 +68A0 +A8A0 +A040 +2040 +20A0 +2118 +2606 +ENDCHAR +STARTCHAR uni6757 +ENCODING 26455 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +1000 +1000 +1000 +1FF8 +0100 +0100 +FFFE +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6758 +ENCODING 26456 +BBX 15 15 0 -2 +BITMAP +3FFC +2004 +2004 +3FFC +2000 +2080 +2080 +3FFE +21C0 +22A0 +2490 +2888 +5086 +4080 +8080 +ENDCHAR +STARTCHAR uni6759 +ENCODING 26457 +BBX 15 15 1 -1 +BITMAP +1048 +1044 +1044 +FC40 +13FE +1040 +3840 +3440 +3420 +5020 +5020 +9010 +1012 +100A +1004 +ENDCHAR +STARTCHAR uni675A +ENCODING 26458 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1080 +10FE +FD00 +1200 +30FC +3808 +5410 +5420 +9040 +1080 +1102 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni675B +ENCODING 26459 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1004 +1004 +FC04 +10FC +3080 +3880 +5500 +55FC +9004 +1004 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni675C +ENCODING 26460 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FC20 +1020 +11FC +3820 +3420 +3020 +5020 +5020 +9020 +1020 +1020 +13FE +ENDCHAR +STARTCHAR uni675D +ENCODING 26461 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2240 +FA40 +225C +22E4 +7344 +6E44 +6244 +A24C +2240 +2200 +2202 +2202 +21FE +ENDCHAR +STARTCHAR uni675E +ENCODING 26462 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1004 +FC04 +1004 +1004 +39FC +3500 +3500 +5100 +5100 +9102 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni675F +ENCODING 26463 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +1FF0 +1110 +1110 +1110 +1FF0 +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6760 +ENCODING 26464 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +11FC +FC20 +1020 +1020 +3820 +3420 +3420 +5020 +5020 +9020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni6761 +ENCODING 26465 +BBX 15 15 1 -1 +BITMAP +0400 +0400 +0FF0 +1820 +6440 +0380 +1C70 +E10E +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6762 +ENCODING 26466 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0380 +0540 +0920 +3118 +C106 +0100 +0000 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni6763 +ENCODING 26467 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FC20 +1020 +1222 +3A22 +3622 +3222 +5222 +5222 +9222 +1222 +13FE +1000 +ENDCHAR +STARTCHAR uni6764 +ENCODING 26468 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1040 +FC40 +1040 +107C +3844 +3444 +3444 +5084 +5084 +9084 +1108 +1208 +1430 +ENDCHAR +STARTCHAR uni6765 +ENCODING 26469 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +1110 +0910 +0920 +0120 +FFFE +0540 +0540 +0920 +1110 +2108 +C106 +0100 +ENDCHAR +STARTCHAR uni6766 +ENCODING 26470 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +10F0 +FC90 +1110 +1110 +3A10 +3410 +3020 +5020 +5060 +9090 +1108 +1204 +1402 +ENDCHAR +STARTCHAR uni6767 +ENCODING 26471 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1010 +1000 +FDFE +1080 +3080 +3880 +5480 +5480 +9080 +1080 +1080 +1080 +10FC +1000 +ENDCHAR +STARTCHAR uni6768 +ENCODING 26472 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1010 +1020 +FC40 +1080 +31FE +3892 +5492 +5492 +9112 +1122 +1222 +1442 +1094 +1108 +ENDCHAR +STARTCHAR uni6769 +ENCODING 26473 +BBX 14 16 0 -2 +BITMAP +1000 +13F0 +1010 +1010 +FD10 +1110 +3110 +39FC +5404 +5404 +9004 +13F4 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni676A +ENCODING 26474 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FCA8 +10A8 +1124 +3222 +3820 +3464 +5404 +5008 +9010 +1020 +1040 +1180 +ENDCHAR +STARTCHAR uni676B +ENCODING 26475 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0810 +0890 +FE90 +0890 +189E +1C90 +2A90 +2A90 +4890 +8890 +0890 +0890 +0BFE +0800 +ENDCHAR +STARTCHAR uni676C +ENCODING 26476 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1000 +1000 +FC00 +13FE +3090 +3890 +5490 +5490 +9090 +1092 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni676D +ENCODING 26477 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F800 +2000 +21F0 +7110 +6910 +6910 +A110 +A110 +2210 +2212 +2412 +280E +ENDCHAR +STARTCHAR uni676E +ENCODING 26478 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +FC20 +1020 +31FC +3924 +5524 +5524 +9124 +1134 +1128 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni676F +ENCODING 26479 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1020 +FC20 +1040 +1050 +38D0 +3548 +3244 +5442 +5040 +9040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni6770 +ENCODING 26480 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +FFFE +0540 +0920 +1110 +2108 +C106 +0100 +0000 +2448 +2444 +4222 +8222 +ENDCHAR +STARTCHAR uni6771 +ENCODING 26481 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +2108 +3FF8 +2108 +2108 +3FF8 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6772 +ENCODING 26482 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0100 +FFFE +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6773 +ENCODING 26483 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0540 +0920 +3118 +C106 +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni6774 +ENCODING 26484 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +FCFE +1122 +1124 +3228 +3820 +3450 +5050 +5050 +9088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni6775 +ENCODING 26485 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +F9FC +2120 +2220 +7020 +6820 +6BFE +A020 +A020 +2020 +2020 +2020 +2020 +ENDCHAR +STARTCHAR uni6776 +ENCODING 26486 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2078 +FBC0 +2040 +2040 +7248 +6A48 +6A48 +A248 +A3F8 +2040 +2042 +2042 +203E +ENDCHAR +STARTCHAR uni6777 +ENCODING 26487 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2244 +FA44 +2244 +2244 +7244 +6BFC +6A00 +A200 +A200 +2200 +2202 +2202 +21FE +ENDCHAR +STARTCHAR uni6778 +ENCODING 26488 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1088 +1088 +FC88 +1106 +3200 +39FC +5484 +5484 +9048 +1050 +1020 +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni6779 +ENCODING 26489 +BBX 15 16 0 -2 +BITMAP +10A0 +10A0 +10A0 +1124 +FD24 +1328 +3530 +3920 +5560 +51A0 +9120 +1122 +1122 +1122 +111E +1100 +ENDCHAR +STARTCHAR uni677A +ENCODING 26490 +BBX 15 16 0 -2 +BITMAP +1000 +1040 +1020 +1010 +FC90 +1080 +3080 +3A84 +5682 +5282 +9282 +1488 +1088 +1088 +1078 +1000 +ENDCHAR +STARTCHAR uni677B +ENCODING 26491 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1088 +FC88 +1088 +1088 +3888 +37FE +3088 +5088 +5088 +9088 +1088 +1088 +17FE +ENDCHAR +STARTCHAR uni677C +ENCODING 26492 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1004 +FC88 +1050 +1020 +33FE +3822 +3424 +5420 +5020 +9020 +1020 +1020 +10E0 +ENDCHAR +STARTCHAR uni677D +ENCODING 26493 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FC20 +11FC +3820 +3420 +5020 +53FE +9020 +1020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni677E +ENCODING 26494 +BBX 15 15 1 -1 +BITMAP +2020 +2110 +2110 +F908 +2208 +2244 +6442 +7040 +6880 +A890 +A088 +2108 +210C +2174 +2784 +ENDCHAR +STARTCHAR uni677F +ENCODING 26495 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2200 +FA00 +2200 +73FC +6A84 +6A84 +A248 +A248 +2230 +2420 +2450 +2888 +2306 +ENDCHAR +STARTCHAR uni6780 +ENCODING 26496 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +0820 +1010 +2208 +C446 +0820 +1FF0 +0110 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6781 +ENCODING 26497 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1088 +FC88 +1090 +1090 +397C +3544 +3124 +5128 +5218 +9210 +1428 +1044 +1082 +ENDCHAR +STARTCHAR uni6782 +ENCODING 26498 +BBX 14 16 0 -2 +BITMAP +0800 +08FC +0884 +0884 +FE84 +08FC +1884 +1C84 +2A84 +2AFC +4884 +8884 +0884 +0884 +0914 +0A08 +ENDCHAR +STARTCHAR uni6783 +ENCODING 26499 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1080 +10FC +FD04 +1204 +3084 +3844 +5444 +5414 +9024 +1044 +1184 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni6784 +ENCODING 26500 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +1080 +10FC +FD04 +1104 +3244 +3844 +5484 +54A4 +9114 +11F4 +1014 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni6785 +ENCODING 26501 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1088 +FC88 +1088 +1088 +33FE +3888 +3488 +5488 +5088 +9108 +1108 +1208 +1408 +ENDCHAR +STARTCHAR uni6786 +ENCODING 26502 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1020 +FC20 +103C +31E0 +3820 +5420 +503E +93E0 +1020 +1022 +1022 +1022 +101E +ENDCHAR +STARTCHAR uni6787 +ENCODING 26503 +BBX 15 15 1 -1 +BITMAP +2220 +2220 +2220 +FA24 +2228 +23B0 +7220 +6A20 +6A20 +A220 +A220 +2220 +22E2 +2322 +2C1E +ENDCHAR +STARTCHAR uni6788 +ENCODING 26504 +BBX 15 16 0 -2 +BITMAP +2080 +2084 +3E98 +20E0 +2084 +2684 +387C +2100 +0100 +FFFE +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6789 +ENCODING 26505 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1040 +FC40 +1040 +1040 +3840 +35F8 +3440 +5040 +5040 +9040 +1040 +1040 +17FE +ENDCHAR +STARTCHAR uni678A +ENCODING 26506 +BBX 15 16 0 -2 +BITMAP +1000 +1040 +119E +1112 +FD12 +1112 +3112 +3912 +5512 +5512 +915A +1194 +1110 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni678B +ENCODING 26507 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FDFE +1040 +1040 +3840 +347C +3444 +5044 +5044 +9084 +1088 +1108 +1230 +ENDCHAR +STARTCHAR uni678C +ENCODING 26508 +BBX 15 15 1 -1 +BITMAP +1030 +1090 +1088 +FD08 +1204 +1402 +31F8 +3848 +3448 +5448 +5048 +9088 +1088 +1108 +1230 +ENDCHAR +STARTCHAR uni678D +ENCODING 26509 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1108 +1108 +FA04 +1402 +33FC +3880 +5500 +51F8 +9008 +1008 +1008 +1008 +1050 +1020 +ENDCHAR +STARTCHAR uni678E +ENCODING 26510 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +FDFC +1020 +3020 +3820 +57FE +5420 +9050 +1050 +1088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni678F +ENCODING 26511 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +FD08 +13FE +3108 +3908 +5508 +53FE +9108 +1108 +1108 +1108 +1128 +1110 +ENDCHAR +STARTCHAR uni6790 +ENCODING 26512 +BBX 15 15 1 -1 +BITMAP +1018 +11E0 +1100 +FD00 +1100 +11FE +3910 +3510 +5510 +5110 +9110 +1210 +1210 +1410 +1010 +ENDCHAR +STARTCHAR uni6791 +ENCODING 26513 +BBX 15 16 0 -2 +BITMAP +1000 +17FE +1080 +1080 +FC80 +10F8 +3908 +3508 +5108 +5208 +93F8 +1010 +1010 +1010 +17FE +1000 +ENDCHAR +STARTCHAR uni6792 +ENCODING 26514 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2110 +F910 +2110 +2110 +77FE +6850 +6850 +A090 +A110 +2210 +2C10 +2010 +2070 +ENDCHAR +STARTCHAR uni6793 +ENCODING 26515 +BBX 15 15 1 -1 +BITMAP +1008 +1108 +1088 +FC48 +1008 +1108 +3888 +3448 +3008 +500E +5078 +9388 +1008 +1008 +1008 +ENDCHAR +STARTCHAR uni6794 +ENCODING 26516 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1050 +FC88 +1144 +3222 +3820 +5400 +55FC +9004 +1008 +1008 +1010 +1010 +1020 +ENDCHAR +STARTCHAR uni6795 +ENCODING 26517 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +FA44 +2244 +7040 +6840 +6860 +A0A0 +A0A0 +20A0 +2120 +2122 +2222 +241E +ENDCHAR +STARTCHAR uni6796 +ENCODING 26518 +BBX 15 16 0 -2 +BITMAP +0808 +083C +09E0 +0820 +FE20 +0820 +19FE +1C20 +2A20 +2A50 +4850 +8850 +0888 +0888 +0904 +0A02 +ENDCHAR +STARTCHAR uni6797 +ENCODING 26519 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +1010 +FEFE +1010 +1010 +3838 +3438 +3254 +5054 +5092 +9110 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni6798 +ENCODING 26520 +BBX 14 15 1 -1 +BITMAP +23C0 +2040 +2040 +F7FC +2444 +2444 +7444 +6CA4 +6514 +A60C +A404 +2404 +2404 +2404 +241C +ENDCHAR +STARTCHAR uni6799 +ENCODING 26521 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1100 +1100 +FD78 +1148 +3148 +3948 +5548 +5568 +9150 +1142 +1142 +1142 +123E +1400 +ENDCHAR +STARTCHAR uni679A +ENCODING 26522 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +2100 +FBFE +2208 +2608 +7108 +6910 +6890 +A0A0 +A040 +20A0 +2110 +2208 +2406 +ENDCHAR +STARTCHAR uni679B +ENCODING 26523 +BBX 15 15 1 -1 +BITMAP +100C +1078 +1388 +FE08 +1248 +1248 +3A48 +3648 +3248 +5248 +5248 +9244 +1444 +1444 +1842 +ENDCHAR +STARTCHAR uni679C +ENCODING 26524 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni679D +ENCODING 26525 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FFFE +1020 +3820 +35FC +5484 +5088 +9048 +1050 +1020 +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni679E +ENCODING 26526 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +1110 +1110 +FD10 +1110 +3110 +3910 +5510 +52A8 +9268 +1228 +1444 +1444 +1884 +1102 +ENDCHAR +STARTCHAR uni679F +ENCODING 26527 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +1000 +FC00 +1000 +33FE +3820 +5420 +5440 +9040 +1088 +1104 +13FE +1102 +1000 +ENDCHAR +STARTCHAR uni67A0 +ENCODING 26528 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23F0 +F850 +2092 +3112 +6A0E +6040 +A040 +A7FE +2040 +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni67A1 +ENCODING 26529 +BBX 15 15 1 -1 +BITMAP +1028 +10C8 +1388 +FC88 +1088 +1088 +33FE +3888 +3488 +5488 +5088 +9108 +1108 +1208 +1408 +ENDCHAR +STARTCHAR uni67A2 +ENCODING 26530 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1200 +FE04 +1204 +1284 +3248 +3A28 +5610 +5228 +9246 +1380 +1200 +1200 +13FE +ENDCHAR +STARTCHAR uni67A3 +ENCODING 26531 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +2108 +2388 +2548 +0920 +3018 +C606 +0180 +0040 +0E00 +0180 +0040 +ENDCHAR +STARTCHAR uni67A4 +ENCODING 26532 +BBX 15 16 0 -2 +BITMAP +0820 +0828 +0824 +0824 +FE20 +09FE +1820 +1C20 +2A20 +2A50 +4850 +8850 +0888 +0888 +0904 +0A02 +ENDCHAR +STARTCHAR uni67A5 +ENCODING 26533 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2200 +2220 +FA20 +2220 +22FC +7224 +6A24 +A224 +A244 +2244 +2484 +2484 +2928 +3210 +ENDCHAR +STARTCHAR uni67A6 +ENCODING 26534 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1000 +FC00 +11FC +1104 +3904 +3504 +35FC +5100 +5100 +9100 +1200 +1200 +1400 +ENDCHAR +STARTCHAR uni67A7 +ENCODING 26535 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FD24 +1124 +3124 +3924 +5524 +5554 +9050 +1090 +1090 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni67A8 +ENCODING 26536 +BBX 15 16 0 -2 +BITMAP +1080 +1084 +1084 +1088 +FC90 +10A0 +3080 +3BFE +54A0 +5490 +9090 +1088 +1084 +10A2 +10C0 +1080 +ENDCHAR +STARTCHAR uni67A9 +ENCODING 26537 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0540 +0920 +3118 +C106 +00C0 +0420 +0818 +3206 +C220 +0410 +08E8 +7F04 +ENDCHAR +STARTCHAR uni67AA +ENCODING 26538 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +10A0 +FD10 +1208 +3406 +39F0 +5510 +5110 +9150 +1120 +1104 +1104 +10FC +1000 +ENDCHAR +STARTCHAR uni67AB +ENCODING 26539 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2208 +2208 +FB28 +22A8 +22A8 +7248 +6A48 +A2A8 +A2A8 +232A +240A +240A +2806 +3002 +ENDCHAR +STARTCHAR uni67AC +ENCODING 26540 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +FD48 +1128 +3928 +3508 +53FE +5108 +9108 +1108 +1108 +1208 +1228 +1410 +ENDCHAR +STARTCHAR uni67AD +ENCODING 26541 +BBX 15 16 0 -2 +BITMAP +0100 +0200 +1FF0 +1010 +1210 +1150 +1020 +1FFC +0104 +0104 +7FF4 +0388 +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni67AE +ENCODING 26542 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0810 +0810 +FE1E +0810 +1810 +1C10 +2AFE +2A82 +4882 +8882 +0882 +0882 +08FE +0882 +ENDCHAR +STARTCHAR uni67AF +ENCODING 26543 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +F820 +23FE +2020 +7020 +6820 +69FC +A104 +A104 +2104 +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni67B0 +ENCODING 26544 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1020 +FCA8 +10A8 +1124 +3924 +3420 +33FE +5020 +5020 +9020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni67B1 +ENCODING 26545 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +0840 +FE48 +0884 +19FE +1C82 +2A00 +2AFC +4884 +8884 +0884 +0884 +08FC +0884 +ENDCHAR +STARTCHAR uni67B2 +ENCODING 26546 +BBX 15 15 1 -1 +BITMAP +0200 +0420 +08F0 +7F08 +0004 +1FF0 +1010 +1010 +1FF0 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni67B3 +ENCODING 26547 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1104 +FD04 +1104 +1104 +3904 +3504 +35FC +5000 +5000 +9088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni67B4 +ENCODING 26548 +BBX 14 15 1 -1 +BITMAP +1000 +11F8 +1108 +FD08 +1108 +11F8 +3800 +3400 +33FC +5084 +5084 +9104 +1104 +1204 +1438 +ENDCHAR +STARTCHAR uni67B5 +ENCODING 26549 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +FD08 +11F8 +3000 +3BFE +5480 +5500 +91F8 +1008 +1008 +1008 +1050 +1020 +ENDCHAR +STARTCHAR uni67B6 +ENCODING 26550 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +7E7C +1244 +2244 +2244 +4E7C +0100 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni67B7 +ENCODING 26551 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +2100 +F91E +27D2 +2152 +7152 +6952 +A952 +A252 +2252 +2252 +2452 +245E +2980 +ENDCHAR +STARTCHAR uni67B8 +ENCODING 26552 +BBX 14 15 1 -1 +BITMAP +1100 +1100 +1100 +FFFC +1204 +1404 +31E4 +3924 +3524 +5524 +5124 +91E4 +1008 +1008 +1070 +ENDCHAR +STARTCHAR uni67B9 +ENCODING 26553 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +10FC +FD04 +1204 +15E4 +3124 +3924 +3524 +55E4 +5118 +9100 +1102 +1102 +10FE +ENDCHAR +STARTCHAR uni67BA +ENCODING 26554 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +FC20 +1020 +3020 +39FC +5470 +54A8 +90A8 +1124 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni67BB +ENCODING 26555 +BBX 15 15 1 -1 +BITMAP +1000 +1248 +1248 +FA48 +1248 +17FE +3248 +3A48 +3248 +5278 +5200 +9200 +1200 +13FE +1000 +ENDCHAR +STARTCHAR uni67BC +ENCODING 26556 +BBX 15 16 0 -2 +BITMAP +1220 +1220 +FFFE +1220 +1220 +13E0 +1000 +1FF8 +0100 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni67BD +ENCODING 26557 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +1010 +FFFE +1010 +1010 +1FF0 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni67BE +ENCODING 26558 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +FC20 +1020 +3124 +3924 +5524 +55FC +9124 +1124 +1224 +1224 +1424 +1020 +ENDCHAR +STARTCHAR uni67BF +ENCODING 26559 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +FC20 +1020 +38A8 +3488 +5088 +57FE +9088 +1088 +1108 +1108 +1208 +1408 +ENDCHAR +STARTCHAR uni67C0 +ENCODING 26560 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FE22 +1224 +1220 +3BFC +3684 +3284 +5248 +5248 +9430 +1430 +1848 +1186 +ENDCHAR +STARTCHAR uni67C1 +ENCODING 26561 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +FA02 +2202 +2282 +7080 +688C +68F0 +A080 +A080 +2080 +2082 +2082 +207E +ENDCHAR +STARTCHAR uni67C2 +ENCODING 26562 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FE +1100 +FA20 +1120 +312C +3974 +57A4 +5124 +9134 +1128 +1122 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni67C3 +ENCODING 26563 +BBX 15 15 1 -1 +BITMAP +1020 +1050 +1088 +FD04 +12FA +1000 +3800 +35FC +3044 +5044 +5044 +9044 +104C +1040 +1040 +ENDCHAR +STARTCHAR uni67C4 +ENCODING 26564 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2040 +F840 +27FC +7444 +6CA4 +64A4 +A514 +A514 +2404 +2404 +2404 +2404 +241C +ENDCHAR +STARTCHAR uni67C5 +ENCODING 26565 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FD04 +11FC +3100 +3940 +5544 +5548 +9170 +1140 +1142 +1242 +123E +1400 +ENDCHAR +STARTCHAR uni67C6 +ENCODING 26566 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FDFC +1000 +1108 +3908 +3508 +3508 +5088 +5090 +9090 +1010 +1010 +13FE +ENDCHAR +STARTCHAR uni67C7 +ENCODING 26567 +BBX 15 16 0 -2 +BITMAP +1038 +11C0 +1040 +1040 +FC40 +13FC +3040 +38E0 +54E0 +5550 +9150 +1248 +1444 +1842 +1040 +1040 +ENDCHAR +STARTCHAR uni67C8 +ENCODING 26568 +BBX 15 15 1 -1 +BITMAP +1020 +10A8 +10A8 +FD24 +1020 +11FC +3820 +3420 +3020 +53FE +5020 +9020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni67C9 +ENCODING 26569 +BBX 15 16 0 -2 +BITMAP +0804 +081E +09E0 +0800 +FE20 +0810 +19FE +1C04 +2A08 +2A10 +4820 +8840 +0880 +0940 +0A3E +0800 +ENDCHAR +STARTCHAR uni67CA +ENCODING 26570 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +21F0 +FA10 +2520 +70C0 +6920 +6218 +AC06 +A180 +2060 +2000 +2300 +20C0 +2030 +ENDCHAR +STARTCHAR uni67CB +ENCODING 26571 +BBX 15 16 0 -2 +BITMAP +0890 +0888 +1080 +309E +57E0 +9080 +1044 +1034 +110C +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni67CC +ENCODING 26572 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1004 +1004 +FDF4 +1004 +3004 +39F4 +5514 +5514 +91F4 +1114 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni67CD +ENCODING 26573 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FD24 +1124 +3124 +3924 +5524 +53FE +9020 +1050 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni67CE +ENCODING 26574 +BBX 15 15 1 -1 +BITMAP +1088 +1088 +1088 +FD08 +117E +1108 +3B08 +3548 +3128 +5128 +5108 +9108 +1108 +1108 +1138 +ENDCHAR +STARTCHAR uni67CF +ENCODING 26575 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +2080 +FBFC +2204 +2204 +7204 +6A04 +6BFC +A204 +A204 +2204 +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni67D0 +ENCODING 26576 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0FE0 +0820 +0820 +0FE0 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni67D1 +ENCODING 26577 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +2108 +FFFE +2108 +2108 +7108 +6908 +A9F8 +A108 +A108 +2108 +2108 +2108 +21F8 +ENDCHAR +STARTCHAR uni67D2 +ENCODING 26578 +BBX 15 15 1 -1 +BITMAP +2080 +1080 +889C +43E0 +2080 +0080 +0880 +307C +C000 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni67D3 +ENCODING 26579 +BBX 15 15 1 -1 +BITMAP +2080 +1880 +83F0 +6090 +0090 +0912 +3112 +C60E +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni67D4 +ENCODING 26580 +BBX 15 14 1 -1 +BITMAP +3FF8 +0430 +0240 +7FFE +0284 +0488 +1880 +6080 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni67D5 +ENCODING 26581 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1008 +1050 +FC20 +1010 +33FE +3862 +54A4 +54A0 +9120 +1220 +1420 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni67D6 +ENCODING 26582 +BBX 14 16 0 -2 +BITMAP +1000 +13FC +1084 +1084 +FC84 +1104 +3114 +3A08 +5400 +51FC +9104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni67D7 +ENCODING 26583 +BBX 15 15 1 -1 +BITMAP +1070 +1010 +1090 +FC88 +1108 +1104 +3A02 +3400 +31FC +5104 +5104 +9104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni67D8 +ENCODING 26584 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1020 +FC20 +1020 +3840 +3440 +50FC +5184 +9284 +1484 +1084 +1084 +1084 +10FC +ENDCHAR +STARTCHAR uni67D9 +ENCODING 26585 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1222 +FE22 +1222 +13FE +3A22 +3622 +3222 +53FE +5020 +9020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni67DA +ENCODING 26586 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +F820 +23FE +2222 +7222 +6A22 +6A22 +A3FE +A222 +2222 +2222 +2222 +23FE +ENDCHAR +STARTCHAR uni67DB +ENCODING 26587 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FFFE +1222 +1222 +3222 +3BFE +3622 +5222 +5222 +93FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni67DC +ENCODING 26588 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1100 +1100 +FD00 +11FC +3104 +3904 +5504 +5504 +91FC +1100 +1100 +1100 +11FE +1000 +ENDCHAR +STARTCHAR uni67DD +ENCODING 26589 +BBX 15 15 1 -1 +BITMAP +1018 +11E0 +1100 +FD00 +1100 +11FE +3910 +3510 +3570 +5118 +5114 +9212 +1210 +1410 +1010 +ENDCHAR +STARTCHAR uni67DE +ENCODING 26590 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +FDFE +1140 +1240 +3840 +347C +3440 +5040 +5040 +907C +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni67DF +ENCODING 26591 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +FD24 +1124 +31FC +3924 +5524 +5524 +93FE +1104 +1104 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni67E0 +ENCODING 26592 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +2020 +23FE +FA02 +2404 +2000 +7000 +6BFE +A020 +A020 +2020 +2020 +2020 +20A0 +2040 +ENDCHAR +STARTCHAR uni67E1 +ENCODING 26593 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1000 +1000 +FBFE +1000 +3020 +3822 +57B2 +50B4 +90A8 +1128 +1124 +1224 +14A2 +1040 +ENDCHAR +STARTCHAR uni67E2 +ENCODING 26594 +BBX 15 15 1 -1 +BITMAP +1038 +11D0 +1110 +FD10 +1110 +1110 +39FE +3510 +3510 +5110 +5110 +91C8 +170A +100A +17F4 +ENDCHAR +STARTCHAR uni67E3 +ENCODING 26595 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1120 +1120 +FDFC +1120 +3220 +3820 +57FE +5420 +9050 +1050 +1088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni67E4 +ENCODING 26596 +BBX 15 15 1 -1 +BITMAP +1000 +10F8 +1088 +FC88 +1088 +10F8 +3888 +3488 +3488 +50F8 +5088 +9088 +1088 +1088 +13FE +ENDCHAR +STARTCHAR uni67E5 +ENCODING 26597 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +FFFE +0540 +0920 +1110 +3FF8 +D016 +1010 +1FF0 +1010 +1010 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni67E6 +ENCODING 26598 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +08FC +0884 +FE84 +0884 +18FC +1C84 +2A84 +2A84 +48FC +8884 +0800 +0800 +09FE +0800 +ENDCHAR +STARTCHAR uni67E7 +ENCODING 26599 +BBX 15 15 1 -1 +BITMAP +1004 +1078 +1388 +FE08 +1248 +1248 +3A48 +3648 +3648 +5248 +5248 +9244 +1254 +15F4 +1402 +ENDCHAR +STARTCHAR uni67E8 +ENCODING 26600 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +13FE +FC80 +10A0 +3920 +35FC +5324 +5524 +9124 +1124 +1134 +1128 +1020 +1020 +ENDCHAR +STARTCHAR uni67E9 +ENCODING 26601 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1220 +FE20 +1278 +1248 +3A88 +3610 +3210 +5228 +5228 +9244 +1282 +1200 +13FE +ENDCHAR +STARTCHAR uni67EA +ENCODING 26602 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +1090 +1110 +FD7E +1252 +3392 +3892 +5512 +5112 +9252 +13D2 +1062 +1022 +104A +1084 +ENDCHAR +STARTCHAR uni67EB +ENCODING 26603 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1090 +13FC +FC94 +1094 +33FC +3A90 +5690 +53FE +9092 +1092 +111A +1114 +1210 +1410 +ENDCHAR +STARTCHAR uni67EC +ENCODING 26604 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +2108 +2928 +2548 +2108 +3FF8 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni67ED +ENCODING 26605 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +1048 +1040 +FBFE +1080 +3080 +38FC +5544 +5144 +9128 +1128 +1210 +1228 +1444 +1182 +ENDCHAR +STARTCHAR uni67EE +ENCODING 26606 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1124 +FD24 +1124 +1124 +39FC +3420 +3420 +5222 +5222 +9222 +1222 +1222 +13FE +ENDCHAR +STARTCHAR uni67EF +ENCODING 26607 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1008 +FC08 +13C8 +1248 +3A48 +3648 +3248 +5248 +53C8 +9008 +1008 +1008 +1018 +ENDCHAR +STARTCHAR uni67F0 +ENCODING 26608 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0540 +0920 +3118 +CFE6 +0000 +0000 +7FFE +0100 +0920 +3118 +C106 +0700 +ENDCHAR +STARTCHAR uni67F1 +ENCODING 26609 +BBX 15 15 1 -1 +BITMAP +2080 +2040 +2040 +FBFC +2040 +2040 +7040 +6840 +67FC +A040 +A040 +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni67F2 +ENCODING 26610 +BBX 15 16 0 -2 +BITMAP +1000 +1040 +1020 +1028 +FC08 +1088 +3090 +3A94 +56A2 +52A2 +94C2 +1088 +1188 +1288 +1478 +1000 +ENDCHAR +STARTCHAR uni67F3 +ENCODING 26611 +BBX 15 15 1 -1 +BITMAP +2180 +261E +2492 +FC92 +2492 +2492 +7492 +6C92 +A492 +A492 +2792 +2C9E +2090 +2110 +2210 +ENDCHAR +STARTCHAR uni67F4 +ENCODING 26612 +BBX 15 15 1 -1 +BITMAP +0880 +088C +4EF0 +4880 +4882 +4E82 +787E +C100 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni67F5 +ENCODING 26613 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +12A4 +FAA4 +12A4 +12A4 +3AA4 +37FE +52A4 +52A4 +92A4 +12A4 +12A4 +12A4 +12AC +ENDCHAR +STARTCHAR uni67F6 +ENCODING 26614 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FE +1252 +FE52 +1252 +3252 +3A52 +5652 +528E +9282 +1302 +1202 +13FE +1202 +1000 +ENDCHAR +STARTCHAR uni67F7 +ENCODING 26615 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1208 +FE08 +1208 +1208 +3208 +3BF8 +3520 +5120 +5120 +9120 +1222 +1222 +141E +ENDCHAR +STARTCHAR uni67F8 +ENCODING 26616 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1010 +1010 +FC20 +1020 +3068 +38A4 +5522 +5222 +9020 +1020 +1020 +1000 +13FE +1000 +ENDCHAR +STARTCHAR uni67F9 +ENCODING 26617 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +102E +FDF0 +1120 +1120 +3920 +35FE +30A2 +50A2 +50A2 +9122 +1122 +1224 +1020 +ENDCHAR +STARTCHAR uni67FA +ENCODING 26618 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FD04 +11FC +3040 +3840 +55FC +5444 +9044 +1084 +1084 +1104 +1228 +1410 +ENDCHAR +STARTCHAR uni67FB +ENCODING 26619 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +0A80 +1240 +2220 +C218 +1FC0 +1040 +1FC0 +1040 +1FC0 +1040 +1040 +FFF8 +ENDCHAR +STARTCHAR uni67FC +ENCODING 26620 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FFFC +1204 +1204 +3A04 +34F0 +3010 +5010 +5090 +9088 +1108 +1204 +1402 +ENDCHAR +STARTCHAR uni67FD +ENCODING 26621 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1084 +1088 +FC50 +1020 +3050 +3888 +5726 +5020 +91FC +1020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni67FE +ENCODING 26622 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1040 +FC40 +1040 +1040 +3240 +3A7C +5640 +5240 +9240 +1240 +1240 +1240 +17FE +ENDCHAR +STARTCHAR uni67FF +ENCODING 26623 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F040 +2040 +27FC +6444 +7444 +6C44 +A444 +A444 +245C +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni6800 +ENCODING 26624 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +1100 +1100 +FDFE +1100 +3100 +397C +5544 +5544 +9154 +1148 +1142 +1242 +123E +1400 +ENDCHAR +STARTCHAR uni6801 +ENCODING 26625 +BBX 15 15 1 -1 +BITMAP +2200 +221E +2212 +FBD2 +2252 +2252 +6652 +7552 +6892 +A092 +A092 +2116 +2110 +2210 +2410 +ENDCHAR +STARTCHAR uni6802 +ENCODING 26626 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1108 +FD48 +1128 +3908 +37FE +3208 +5288 +5248 +9228 +1208 +13FC +1010 +1070 +ENDCHAR +STARTCHAR uni6803 +ENCODING 26627 +BBX 15 15 1 -1 +BITMAP +201C +23E0 +2200 +FA00 +23FE +7240 +6A40 +6A7C +A244 +A244 +2444 +2484 +2888 +2108 +2230 +ENDCHAR +STARTCHAR uni6804 +ENCODING 26628 +BBX 15 15 1 -1 +BITMAP +2210 +1110 +0020 +7FFC +4004 +4104 +0100 +FFFE +0540 +0540 +0920 +1110 +2108 +C106 +0100 +ENDCHAR +STARTCHAR uni6805 +ENCODING 26629 +BBX 15 16 0 -2 +BITMAP +1000 +11DC +1154 +1154 +FD54 +1154 +3154 +3BFE +5554 +5154 +9154 +1154 +1154 +12D4 +1224 +144C +ENDCHAR +STARTCHAR uni6806 +ENCODING 26630 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +2108 +2108 +3FF8 +0280 +0440 +0820 +3318 +C0C6 +0600 +0180 +0040 +ENDCHAR +STARTCHAR uni6807 +ENCODING 26631 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1000 +1000 +FC00 +13FE +3020 +3820 +5528 +5524 +9224 +1222 +1422 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni6808 +ENCODING 26632 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +1040 +105C +FDE0 +1040 +305E +39E0 +5444 +5048 +9030 +1022 +1052 +108A +1306 +1002 +ENDCHAR +STARTCHAR uni6809 +ENCODING 26633 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC88 +1000 +33FE +3842 +5442 +5442 +9042 +104A +1044 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni680A +ENCODING 26634 +BBX 15 16 0 -2 +BITMAP +1090 +1088 +1088 +1080 +FBFE +10A0 +30A0 +38A4 +54A4 +5128 +9128 +1132 +1222 +1262 +149E +1800 +ENDCHAR +STARTCHAR uni680B +ENCODING 26635 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +17FE +F880 +1120 +3120 +3A20 +57FC +5020 +9128 +1124 +1222 +1422 +10A0 +1040 +ENDCHAR +STARTCHAR uni680C +ENCODING 26636 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +103E +1020 +FC20 +11FC +3104 +3904 +5504 +55FC +9104 +1100 +1100 +1200 +1200 +1400 +ENDCHAR +STARTCHAR uni680D +ENCODING 26637 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1120 +1120 +FDFC +1120 +3220 +3820 +5420 +55FC +9020 +1020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni680E +ENCODING 26638 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13C0 +1200 +FE20 +1220 +3220 +3BFE +5420 +5420 +9128 +1124 +1222 +1422 +10A0 +1040 +ENDCHAR +STARTCHAR uni680F +ENCODING 26639 +BBX 15 16 0 -2 +BITMAP +1000 +1108 +1088 +1090 +FC00 +13FE +3000 +3800 +5400 +55FC +9000 +1000 +1000 +1000 +13FE +1000 +ENDCHAR +STARTCHAR uni6810 +ENCODING 26640 +BBX 15 15 1 -1 +BITMAP +2380 +2060 +2000 +F800 +23C0 +2040 +7044 +6F68 +6970 +A150 +A250 +2248 +2444 +2842 +21C0 +ENDCHAR +STARTCHAR uni6811 +ENCODING 26641 +BBX 15 16 0 -2 +BITMAP +2004 +2004 +2784 +2084 +F8BE +2484 +2284 +72A4 +6914 +A114 +A284 +2284 +2484 +2804 +2014 +2008 +ENDCHAR +STARTCHAR uni6812 +ENCODING 26642 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +11FC +1104 +FE04 +11E4 +3124 +3924 +55E4 +5524 +9124 +11E4 +1104 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni6813 +ENCODING 26643 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +20A0 +F910 +2208 +2C06 +73F8 +6840 +6840 +A040 +A3F8 +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6814 +ENCODING 26644 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +7F7C +0824 +3E24 +0844 +7F54 +0888 +0900 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6815 +ENCODING 26645 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1120 +1120 +FD20 +11FC +3104 +3904 +5504 +5504 +91FC +1120 +1120 +1120 +11FE +1000 +ENDCHAR +STARTCHAR uni6816 +ENCODING 26646 +BBX 15 15 1 -1 +BITMAP +1000 +17FE +10A0 +FCA0 +13FC +12A4 +3AA4 +36A4 +5294 +530C +9204 +1204 +1204 +1204 +13FC +ENDCHAR +STARTCHAR uni6817 +ENCODING 26647 +BBX 15 14 1 -1 +BITMAP +FFFE +0440 +0440 +3FF8 +2448 +2448 +3FF8 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6818 +ENCODING 26648 +BBX 15 15 1 -1 +BITMAP +1040 +107C +1084 +FD44 +1028 +1030 +33E0 +3810 +341E +5062 +51A2 +9014 +1008 +1030 +13C0 +ENDCHAR +STARTCHAR uni6819 +ENCODING 26649 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +20FC +2108 +FA90 +2060 +2198 +7626 +6820 +A1FC +A020 +2220 +23FE +2020 +2020 +2020 +ENDCHAR +STARTCHAR uni681A +ENCODING 26650 +BBX 15 16 0 -2 +BITMAP +1088 +1048 +1050 +1000 +FDFC +1020 +3020 +3820 +55FE +5420 +9050 +1050 +1088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni681B +ENCODING 26651 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +11FC +1044 +FC84 +1084 +3128 +3A10 +5508 +53DE +914A +114A +114A +1252 +135A +14A4 +ENDCHAR +STARTCHAR uni681C +ENCODING 26652 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FC20 +11FC +3124 +3924 +5524 +552C +9070 +10A8 +1124 +1622 +1020 +1020 +ENDCHAR +STARTCHAR uni681D +ENCODING 26653 +BBX 15 15 1 -1 +BITMAP +101C +11E0 +1020 +FC20 +1020 +13FE +3820 +3420 +3020 +51FC +5104 +9104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni681E +ENCODING 26654 +BBX 15 14 1 -1 +BITMAP +7C7C +1010 +1010 +FEFE +1010 +1010 +1110 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni681F +ENCODING 26655 +BBX 15 15 1 -1 +BITMAP +1104 +1084 +1088 +FDFE +1088 +1088 +3888 +3488 +33FE +5088 +5088 +9088 +1108 +1108 +1208 +ENDCHAR +STARTCHAR uni6820 +ENCODING 26656 +BBX 15 16 0 -2 +BITMAP +0838 +13C0 +3040 +5040 +97FC +1040 +1040 +13F8 +0000 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6821 +ENCODING 26657 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +FBFE +2088 +2104 +7202 +6888 +6888 +A050 +A050 +2020 +2050 +2088 +2306 +ENDCHAR +STARTCHAR uni6822 +ENCODING 26658 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2040 +F840 +2080 +23FC +7204 +6A04 +6A04 +A3FC +A204 +2204 +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni6823 +ENCODING 26659 +BBX 15 16 0 -2 +BITMAP +1080 +1088 +109C +1170 +FD10 +1310 +3510 +3910 +55FE +5510 +9110 +1110 +1110 +1110 +117C +1100 +ENDCHAR +STARTCHAR uni6824 +ENCODING 26660 +BBX 15 16 0 -2 +BITMAP +2020 +2420 +2220 +2220 +F832 +21B2 +20B4 +72A8 +6AA8 +A4A8 +A524 +2924 +2A22 +2020 +20A0 +2040 +ENDCHAR +STARTCHAR uni6825 +ENCODING 26661 +BBX 15 16 0 -2 +BITMAP +0100 +4100 +21FC +0A44 +1448 +E0A0 +2110 +2608 +0100 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6826 +ENCODING 26662 +BBX 15 16 0 -2 +BITMAP +1082 +1092 +1092 +1092 +FC92 +1092 +32DA +3AB6 +5492 +5092 +9092 +1092 +1092 +1112 +1102 +1202 +ENDCHAR +STARTCHAR uni6827 +ENCODING 26663 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1124 +FD24 +11FC +3124 +3924 +55FC +5420 +9024 +1018 +1032 +10CA +1306 +1002 +ENDCHAR +STARTCHAR uni6828 +ENCODING 26664 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +1210 +113E +FD22 +1044 +3810 +3490 +5090 +5310 +9128 +1128 +1128 +1144 +1044 +1082 +ENDCHAR +STARTCHAR uni6829 +ENCODING 26665 +BBX 14 15 1 -1 +BITMAP +2000 +27BC +2084 +F884 +218C +2294 +74A4 +6884 +698C +A294 +A4A4 +28C4 +2084 +2084 +239C +ENDCHAR +STARTCHAR uni682A +ENCODING 26666 +BBX 15 15 1 -1 +BITMAP +2240 +2240 +2240 +F7FC +2440 +2840 +7040 +6FFE +A150 +A150 +2248 +2248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni682B +ENCODING 26667 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FBFE +1080 +1880 +353C +3104 +3308 +5508 +517E +9108 +1108 +1108 +1118 +ENDCHAR +STARTCHAR uni682C +ENCODING 26668 +BBX 15 15 1 -1 +BITMAP +1080 +10F8 +1088 +FD10 +13FC +1124 +3924 +3524 +3124 +51FC +5100 +9100 +1102 +1102 +10FE +ENDCHAR +STARTCHAR uni682D +ENCODING 26669 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1020 +FC40 +13FE +1252 +3252 +3A52 +3652 +5252 +5252 +9252 +1252 +1252 +1256 +ENDCHAR +STARTCHAR uni682E +ENCODING 26670 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1108 +1108 +FD08 +11F8 +3108 +3908 +55F8 +5508 +9108 +111E +17E8 +1008 +1008 +1008 +ENDCHAR +STARTCHAR uni682F +ENCODING 26671 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FE +1080 +FD00 +13FC +3504 +3904 +55FC +5504 +9104 +11FC +1104 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni6830 +ENCODING 26672 +BBX 15 16 0 -2 +BITMAP +10A8 +10A4 +10A4 +1120 +FD2E +13F0 +3520 +3924 +5524 +5524 +9128 +1110 +1132 +114A +1186 +1102 +ENDCHAR +STARTCHAR uni6831 +ENCODING 26673 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2110 +F7FC +2110 +2110 +7110 +6910 +6110 +AFFE +A000 +2080 +2110 +2608 +3806 +ENDCHAR +STARTCHAR uni6832 +ENCODING 26674 +BBX 15 15 1 -1 +BITMAP +2040 +2048 +23F8 +F848 +2050 +27FE +7040 +6898 +63E0 +AC80 +A1F8 +2108 +2008 +2008 +2070 +ENDCHAR +STARTCHAR uni6833 +ENCODING 26675 +BBX 15 15 1 -1 +BITMAP +1044 +1044 +13F8 +FC48 +1048 +1050 +3BFE +3420 +3040 +518C +56F0 +9080 +1082 +1082 +107E +ENDCHAR +STARTCHAR uni6834 +ENCODING 26676 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +21FE +FA00 +2200 +25FC +7124 +6924 +6924 +A124 +A3FE +2104 +2104 +2104 +211C +ENDCHAR +STARTCHAR uni6835 +ENCODING 26677 +BBX 15 16 0 -2 +BITMAP +1002 +1002 +17E2 +110A +F90A +11EA +312A +3A2A +572A +52AA +944A +104A +1082 +1102 +120A +1404 +ENDCHAR +STARTCHAR uni6836 +ENCODING 26678 +BBX 14 16 0 -2 +BITMAP +1000 +13FC +1204 +1244 +FE44 +1244 +33FC +3A44 +5644 +52A4 +9294 +1314 +1204 +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni6837 +ENCODING 26679 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +1000 +FBFE +1020 +3020 +39FC +5420 +5020 +93FE +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni6838 +ENCODING 26680 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +F7FE +2040 +6080 +7110 +68A0 +A040 +A088 +2110 +2620 +2050 +2188 +2606 +ENDCHAR +STARTCHAR uni6839 +ENCODING 26681 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +FA08 +23F8 +2208 +7208 +6BF8 +6A42 +A244 +A228 +2230 +2210 +23C8 +2E06 +ENDCHAR +STARTCHAR uni683A +ENCODING 26682 +BBX 15 16 0 -2 +BITMAP +1100 +1104 +1138 +11C0 +FD02 +1102 +30FE +3800 +55FC +5504 +9104 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni683B +ENCODING 26683 +BBX 15 15 1 -1 +BITMAP +1010 +1014 +1012 +FC12 +13FE +1010 +3010 +3BD0 +3510 +5110 +5110 +91C8 +170A +100A +1004 +ENDCHAR +STARTCHAR uni683C +ENCODING 26684 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +21F8 +FB10 +2510 +20A0 +7060 +6998 +A606 +A3F8 +2208 +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni683D +ENCODING 26685 +BBX 15 15 1 -1 +BITMAP +0840 +0850 +7E48 +0844 +0840 +FFFE +0040 +0844 +FFC4 +0828 +1C28 +2B10 +4832 +88CA +0B04 +ENDCHAR +STARTCHAR uni683E +ENCODING 26686 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +2448 +4444 +8842 +1140 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni683F +ENCODING 26687 +BBX 15 16 0 -2 +BITMAP +1090 +1094 +1092 +1112 +FD10 +137E +3110 +3910 +5510 +5528 +9128 +1128 +1128 +1144 +1144 +1182 +ENDCHAR +STARTCHAR uni6840 +ENCODING 26688 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +3CFC +C490 +2890 +11FE +2010 +C110 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6841 +ENCODING 26689 +BBX 15 15 1 -1 +BITMAP +2100 +213C +2200 +FA00 +2400 +257E +7108 +6A08 +6208 +A608 +A208 +2208 +2208 +2208 +2218 +ENDCHAR +STARTCHAR uni6842 +ENCODING 26690 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +23F8 +F840 +2040 +2040 +77FC +6800 +6840 +A040 +A3F8 +2040 +2040 +2040 +27FC +ENDCHAR +STARTCHAR uni6843 +ENCODING 26691 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +2492 +FA94 +2098 +3090 +6890 +6898 +A394 +A492 +2090 +2110 +2112 +2212 +240E +ENDCHAR +STARTCHAR uni6844 +ENCODING 26692 +BBX 15 15 1 -1 +BITMAP +1040 +1244 +1244 +FD48 +1150 +1040 +3840 +37FE +3090 +5090 +5090 +9090 +1112 +1112 +120E +ENDCHAR +STARTCHAR uni6845 +ENCODING 26693 +BBX 15 15 1 -1 +BITMAP +1080 +10F8 +1108 +FA10 +17FE +1200 +3A00 +36F8 +3288 +5288 +5288 +9298 +1282 +1482 +107E +ENDCHAR +STARTCHAR uni6846 +ENCODING 26694 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2400 +FDFC +2420 +2420 +7420 +6CF8 +6420 +A420 +A420 +2420 +25FC +2400 +27FE +ENDCHAR +STARTCHAR uni6847 +ENCODING 26695 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +FE7C +2244 +4244 +3444 +087C +3400 +C300 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6848 +ENCODING 26696 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4204 +3FF8 +0420 +1E40 +01E0 +3E18 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni6849 +ENCODING 26697 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +13FC +FE04 +1244 +1040 +3840 +37FE +3488 +5088 +5110 +9390 +1060 +1098 +1304 +ENDCHAR +STARTCHAR uni684A +ENCODING 26698 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +3FF8 +0200 +0200 +7FFC +0820 +1110 +2108 +DFF6 +0300 +05C0 +1930 +6108 +0100 +ENDCHAR +STARTCHAR uni684B +ENCODING 26699 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1024 +31FC +3920 +55FE +5422 +902A +1054 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni684C +ENCODING 26700 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +01FC +0100 +1FF8 +1008 +1FF8 +1008 +1FF8 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni684D +ENCODING 26701 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FC50 +1088 +1376 +3000 +39FC +3420 +5440 +50FC +9084 +1004 +1004 +1038 +ENDCHAR +STARTCHAR uni684E +ENCODING 26702 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2080 +F8A0 +2110 +2138 +77C4 +6800 +6840 +A040 +A3F8 +2040 +2040 +2040 +27FE +ENDCHAR +STARTCHAR uni684F +ENCODING 26703 +BBX 15 16 0 -2 +BITMAP +1000 +101E +13F2 +1092 +FC94 +1094 +3098 +3894 +5492 +5492 +90F2 +171A +1214 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni6850 +ENCODING 26704 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2404 +FC04 +25F4 +2404 +7404 +6DF4 +6514 +A514 +A514 +25F4 +2404 +2404 +241C +ENDCHAR +STARTCHAR uni6851 +ENCODING 26705 +BBX 15 14 1 -1 +BITMAP +1FF0 +0460 +0380 +1C78 +0000 +7EFC +2448 +1830 +E6CE +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni6852 +ENCODING 26706 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +1FF0 +0100 +0820 +FFFE +0820 +0820 +0100 +7FFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6853 +ENCODING 26707 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2000 +F800 +23F8 +2208 +7208 +6BF8 +AA08 +A208 +2208 +23F8 +2000 +2000 +2FFE +ENDCHAR +STARTCHAR uni6854 +ENCODING 26708 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +FBFE +2020 +7020 +6820 +69FC +A000 +A1FC +2104 +2104 +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni6855 +ENCODING 26709 +BBX 14 15 1 -1 +BITMAP +1040 +1040 +1080 +FF1C +1204 +1204 +3A04 +3604 +339C +5204 +5204 +9204 +1204 +1204 +13FC +ENDCHAR +STARTCHAR uni6856 +ENCODING 26710 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1040 +1080 +FDFC +1154 +3154 +3954 +5554 +5554 +9154 +1154 +1154 +1154 +13FE +1000 +ENDCHAR +STARTCHAR uni6857 +ENCODING 26711 +BBX 15 15 1 -1 +BITMAP +1000 +13F8 +1048 +FC4E +1042 +1082 +3902 +365C +3040 +57FE +5150 +9148 +1244 +1442 +1040 +ENDCHAR +STARTCHAR uni6858 +ENCODING 26712 +BBX 14 16 0 -2 +BITMAP +1040 +1080 +11F8 +1108 +FD08 +1108 +31F8 +3900 +5500 +5500 +91FC +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni6859 +ENCODING 26713 +BBX 15 15 1 -1 +BITMAP +1040 +1050 +1048 +FC9C +13E2 +1000 +38A0 +34A0 +31FC +5220 +5020 +97FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni685A +ENCODING 26714 +BBX 14 16 0 -2 +BITMAP +1124 +1124 +1248 +1124 +FD24 +1000 +3080 +38FC +5504 +5184 +9248 +1428 +1010 +1020 +10C0 +1300 +ENDCHAR +STARTCHAR uni685B +ENCODING 26715 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +107C +FC40 +1040 +13FE +3800 +37FE +3240 +5040 +5070 +904C +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni685C +ENCODING 26716 +BBX 15 15 1 -1 +BITMAP +2482 +2442 +2244 +FA08 +2000 +7040 +6840 +67FE +A088 +A108 +2210 +2390 +2060 +2198 +2604 +ENDCHAR +STARTCHAR uni685D +ENCODING 26717 +BBX 15 15 1 -1 +BITMAP +2208 +2208 +2388 +F4BE +24A8 +2CA8 +6AA8 +72A8 +6128 +A17E +A108 +2208 +2208 +2408 +2808 +ENDCHAR +STARTCHAR uni685E +ENCODING 26718 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +211E +21D2 +FA54 +2254 +2258 +7554 +6892 +A092 +A112 +211A +2214 +2410 +2810 +2010 +ENDCHAR +STARTCHAR uni685F +ENCODING 26719 +BBX 15 15 1 -1 +BITMAP +2050 +2048 +23FC +F840 +2040 +73FC +6840 +6040 +A7FE +A028 +2028 +2030 +20D2 +230A +2C04 +ENDCHAR +STARTCHAR uni6860 +ENCODING 26720 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1048 +1048 +FC48 +1048 +3248 +394A +554A +554C +9048 +1048 +1048 +1048 +13FE +1000 +ENDCHAR +STARTCHAR uni6861 +ENCODING 26721 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10BC +13C0 +FC50 +1024 +30D4 +3B0C +5400 +53FE +9090 +1090 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni6862 +ENCODING 26722 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +103E +1020 +FC20 +11FC +3104 +3924 +5524 +5524 +9124 +1124 +1050 +1048 +1084 +1104 +ENDCHAR +STARTCHAR uni6863 +ENCODING 26723 +BBX 14 15 1 -1 +BITMAP +2040 +2244 +2144 +F948 +2148 +2040 +73FC +6804 +6804 +A004 +A3FC +2004 +2004 +2004 +23FC +ENDCHAR +STARTCHAR uni6864 +ENCODING 26724 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +FDFC +1000 +31FC +3804 +5404 +55FC +9100 +1100 +1102 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni6865 +ENCODING 26725 +BBX 15 16 0 -2 +BITMAP +2010 +2078 +23C0 +2040 +F840 +27FE +20A0 +7110 +6A08 +A516 +A110 +2110 +2110 +2210 +2210 +2410 +ENDCHAR +STARTCHAR uni6866 +ENCODING 26726 +BBX 15 16 0 -2 +BITMAP +1090 +1094 +1114 +1118 +FB10 +1532 +3152 +390E +5520 +5020 +93FE +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni6867 +ENCODING 26727 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1050 +FC88 +1306 +10F8 +3800 +3400 +53FC +5040 +9050 +1048 +1084 +109C +13E2 +ENDCHAR +STARTCHAR uni6868 +ENCODING 26728 +BBX 15 16 0 -2 +BITMAP +0840 +4840 +28FC +0904 +1A88 +2850 +4860 +8980 +0100 +FFFE +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6869 +ENCODING 26729 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1010 +11FE +FD00 +1110 +3110 +3910 +557C +5510 +9110 +1110 +1110 +1210 +12FE +1400 +ENDCHAR +STARTCHAR uni686A +ENCODING 26730 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1004 +1004 +FDFC +1004 +3004 +3BFC +5408 +5008 +97FE +1108 +1088 +1088 +1028 +1010 +ENDCHAR +STARTCHAR uni686B +ENCODING 26731 +BBX 15 15 1 -1 +BITMAP +1010 +1210 +1110 +FC54 +1054 +1092 +3A92 +3510 +3014 +5034 +5108 +9108 +1210 +1220 +14C0 +ENDCHAR +STARTCHAR uni686C +ENCODING 26732 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +40A8 +24A4 +0922 +7228 +1030 +10C0 +0700 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni686D +ENCODING 26733 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1200 +1200 +FEF8 +1200 +3200 +3BFC +56A0 +52A4 +92A8 +1290 +1290 +1488 +14A4 +18C2 +ENDCHAR +STARTCHAR uni686E +ENCODING 26734 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1020 +FC60 +10B0 +1128 +3226 +3820 +3420 +51FC +5104 +9104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni686F +ENCODING 26735 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FD04 +11FC +3000 +3800 +57FE +5420 +9020 +11FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni6870 +ENCODING 26736 +BBX 15 16 0 -2 +BITMAP +101C +13E0 +1220 +1220 +FBFE +1220 +3290 +3B0A +5606 +51FA +9108 +1108 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni6871 +ENCODING 26737 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1000 +1124 +FA48 +1490 +3248 +3924 +5400 +53FC +9040 +1040 +1040 +1040 +17FE +1000 +ENDCHAR +STARTCHAR uni6872 +ENCODING 26738 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F840 +2040 +27FE +7402 +6BF8 +6010 +A020 +AFFE +2020 +2020 +2020 +20E0 +ENDCHAR +STARTCHAR uni6873 +ENCODING 26739 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +1104 +13FE +FC22 +1020 +33FE +3850 +5488 +5124 +9222 +11FC +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni6874 +ENCODING 26740 +BBX 15 15 1 -1 +BITMAP +1038 +17C8 +1244 +FA24 +1420 +13FC +3808 +3410 +3420 +53FE +5020 +9020 +1020 +1020 +10E0 +ENDCHAR +STARTCHAR uni6875 +ENCODING 26741 +BBX 15 15 1 -1 +BITMAP +203C +23C8 +2244 +FA22 +2422 +2480 +7080 +6880 +67FC +A110 +A210 +2720 +20E0 +2118 +2604 +ENDCHAR +STARTCHAR uni6876 +ENCODING 26742 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2008 +F990 +2060 +27FC +7444 +6C44 +A7FC +A444 +2444 +27FC +2444 +2444 +244C +ENDCHAR +STARTCHAR uni6877 +ENCODING 26743 +BBX 14 15 1 -1 +BITMAP +1040 +1078 +1088 +FD10 +13FC +1124 +3924 +35FC +3524 +5124 +51FC +9104 +1104 +1204 +121C +ENDCHAR +STARTCHAR uni6878 +ENCODING 26744 +BBX 15 16 0 -2 +BITMAP +1184 +1068 +1030 +10C8 +FB04 +1040 +33FE +38A0 +5520 +53FC +9524 +1124 +1134 +1128 +1020 +1020 +ENDCHAR +STARTCHAR uni6879 +ENCODING 26745 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +1104 +FD04 +11FC +3104 +3904 +55FC +5520 +9122 +1114 +1108 +1144 +1182 +1100 +ENDCHAR +STARTCHAR uni687A +ENCODING 26746 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1050 +FC50 +1050 +13DE +3A52 +3652 +3252 +5252 +53DE +9050 +1090 +1090 +1110 +ENDCHAR +STARTCHAR uni687B +ENCODING 26747 +BBX 15 16 0 -2 +BITMAP +2100 +21F8 +2308 +2490 +F860 +2198 +2646 +7040 +6BF8 +A040 +A3F8 +2040 +27FC +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni687C +ENCODING 26748 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0540 +1930 +610C +0280 +0C70 +F10E +2110 +1120 +05C0 +1930 +610C +0700 +ENDCHAR +STARTCHAR uni687D +ENCODING 26749 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +7FFC +0540 +1930 +E10E +0820 +0920 +1550 +2388 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni687E +ENCODING 26750 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2088 +F888 +27FE +2088 +7088 +6BF8 +6900 +A100 +A3FC +2504 +2904 +2104 +21FC +ENDCHAR +STARTCHAR uni687F +ENCODING 26751 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1104 +FDFC +1104 +11FC +3800 +35FC +3420 +5020 +53FE +9020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni6880 +ENCODING 26752 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FC20 +11FC +3124 +3924 +55FC +5420 +9070 +10A8 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni6881 +ENCODING 26753 +BBX 15 14 1 -1 +BITMAP +47F0 +3090 +8294 +6494 +0512 +1110 +2210 +C060 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni6882 +ENCODING 26754 +BBX 15 15 1 -1 +BITMAP +2048 +2044 +2044 +FBFE +2040 +2244 +7148 +6950 +6040 +A060 +A160 +2250 +2C48 +2046 +20C0 +ENDCHAR +STARTCHAR uni6883 +ENCODING 26755 +BBX 15 15 1 -1 +BITMAP +200C +2070 +2710 +F910 +2110 +2210 +727E +6F90 +A110 +A510 +2510 +227C +2300 +24C0 +283E +ENDCHAR +STARTCHAR uni6884 +ENCODING 26756 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +1050 +FDFC +1154 +3154 +3954 +558C +5504 +9104 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni6885 +ENCODING 26757 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +23FE +FC00 +21FC +7124 +6924 +6124 +A7FE +A244 +2244 +2244 +23FE +2008 +2038 +ENDCHAR +STARTCHAR uni6886 +ENCODING 26758 +BBX 15 16 0 -2 +BITMAP +2100 +211E +2112 +2FD2 +F114 +2114 +27D8 +7114 +6912 +AFD2 +A112 +211A +2214 +2210 +2410 +2810 +ENDCHAR +STARTCHAR uni6887 +ENCODING 26759 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1020 +FDFC +1020 +3020 +3BFE +5488 +5088 +93FE +1088 +1088 +1108 +1108 +1208 +ENDCHAR +STARTCHAR uni6888 +ENCODING 26760 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +FDF8 +1108 +3108 +39F8 +5400 +53FC +9008 +1030 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni6889 +ENCODING 26761 +BBX 15 16 0 -2 +BITMAP +1048 +1148 +1148 +1148 +FD48 +11C8 +307E +3848 +57C8 +5148 +9148 +1148 +1148 +1148 +125C +1440 +ENDCHAR +STARTCHAR uni688A +ENCODING 26762 +BBX 15 16 0 -2 +BITMAP +080C +08F0 +7E80 +0880 +0EFE +7888 +0888 +2908 +1208 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni688B +ENCODING 26763 +BBX 14 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +FDF8 +1000 +33FC +3A04 +5604 +53FC +9204 +1204 +13FC +1204 +1214 +1208 +ENDCHAR +STARTCHAR uni688C +ENCODING 26764 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1088 +FD04 +12FA +3020 +3820 +57FE +5420 +9128 +1124 +1222 +1422 +10A0 +1040 +ENDCHAR +STARTCHAR uni688D +ENCODING 26765 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +11F8 +FD08 +11F8 +1108 +3908 +35F8 +3400 +5080 +53F8 +9080 +1082 +1082 +107E +ENDCHAR +STARTCHAR uni688E +ENCODING 26766 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1104 +FDFC +1104 +31FC +3800 +5500 +550C +91F0 +1100 +1102 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni688F +ENCODING 26767 +BBX 15 15 1 -1 +BITMAP +1020 +10A0 +10A0 +FCFC +1120 +1220 +3820 +37FE +3420 +5000 +51FC +9104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni6890 +ENCODING 26768 +BBX 15 15 1 -1 +BITMAP +2220 +2220 +2224 +FBB8 +2220 +2220 +7222 +6B9E +6E40 +A040 +A3F8 +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6891 +ENCODING 26769 +BBX 15 16 0 -2 +BITMAP +2010 +2890 +2510 +2212 +F552 +2954 +2158 +7190 +6B10 +A528 +A928 +2128 +2148 +2144 +2A84 +2502 +ENDCHAR +STARTCHAR uni6892 +ENCODING 26770 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1088 +FD44 +1222 +30F8 +3808 +5410 +5420 +91FC +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni6893 +ENCODING 26771 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +F808 +2208 +2110 +6110 +77FE +6840 +A040 +A3FC +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni6894 +ENCODING 26772 +BBX 15 15 1 -1 +BITMAP +200C +23F0 +2200 +FA00 +23FE +2200 +72FC +6AA4 +6AA4 +A2A4 +A2FC +2480 +2482 +2882 +207E +ENDCHAR +STARTCHAR uni6895 +ENCODING 26773 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1044 +1144 +FD44 +1284 +3894 +3508 +5240 +5020 +90A4 +1282 +128A +128A +1478 +1000 +ENDCHAR +STARTCHAR uni6896 +ENCODING 26774 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1104 +FD04 +11FC +1104 +3904 +35FC +3104 +5104 +5104 +91FC +1080 +1108 +1606 +ENDCHAR +STARTCHAR uni6897 +ENCODING 26775 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +FBF8 +2248 +2248 +73F8 +6A48 +AA48 +A3F8 +2240 +2140 +2080 +2160 +261E +ENDCHAR +STARTCHAR uni6898 +ENCODING 26776 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +FBFC +2204 +2204 +73FC +6A04 +6204 +A3FC +A090 +2090 +2112 +2212 +240E +ENDCHAR +STARTCHAR uni6899 +ENCODING 26777 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +11FC +FD24 +1124 +1124 +39FC +3420 +37FE +5222 +5222 +9222 +13FE +1020 +1020 +ENDCHAR +STARTCHAR uni689A +ENCODING 26778 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +10F0 +FD10 +1220 +13FC +3244 +3A44 +3644 +53FC +50A0 +90A0 +1122 +1222 +141E +ENDCHAR +STARTCHAR uni689B +ENCODING 26779 +BBX 15 15 1 -1 +BITMAP +2000 +2FDE +2252 +FA52 +2252 +2FD4 +7254 +6A54 +A252 +AFD2 +2252 +2252 +2454 +2450 +2990 +ENDCHAR +STARTCHAR uni689C +ENCODING 26780 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FE +F840 +1248 +1248 +3248 +3D54 +3554 +5042 +50A0 +90A0 +1110 +1208 +1C06 +ENDCHAR +STARTCHAR uni689D +ENCODING 26781 +BBX 15 15 1 -1 +BITMAP +0880 +0880 +11FE +1308 +2508 +2890 +6860 +A998 +2E46 +2840 +2FFE +2950 +2A48 +2446 +2040 +ENDCHAR +STARTCHAR uni689E +ENCODING 26782 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1008 +1008 +FDF8 +1100 +3104 +3904 +54FC +5440 +9020 +10A4 +128A +128A +1478 +1000 +ENDCHAR +STARTCHAR uni689F +ENCODING 26783 +BBX 15 15 1 -1 +BITMAP +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFE +1000 +1FFC +0108 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni68A0 +ENCODING 26784 +BBX 14 15 1 -1 +BITMAP +2000 +23F8 +2208 +FA08 +2208 +23F8 +7040 +6880 +6880 +A7FC +A404 +2404 +2404 +2404 +27FC +ENDCHAR +STARTCHAR uni68A1 +ENCODING 26785 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC04 +11F8 +3800 +3400 +53FE +5090 +9090 +1090 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni68A2 +ENCODING 26786 +BBX 14 15 1 -1 +BITMAP +2244 +2144 +2148 +F840 +23FC +2204 +6204 +73FC +6A04 +AA04 +A3FC +2204 +2204 +2204 +221C +ENDCHAR +STARTCHAR uni68A3 +ENCODING 26787 +BBX 15 15 1 -1 +BITMAP +1020 +1222 +1222 +FFFE +1020 +1050 +3888 +3504 +32FA +5000 +51F8 +9010 +1010 +1020 +1020 +ENDCHAR +STARTCHAR uni68A4 +ENCODING 26788 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +FDFC +1000 +3088 +3888 +5504 +52FA +9048 +1048 +1088 +1088 +1128 +1210 +ENDCHAR +STARTCHAR uni68A5 +ENCODING 26789 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +0DE0 +321C +0220 +0CF0 +3F0C +0100 +FFFE +0540 +1930 +610C +0100 +ENDCHAR +STARTCHAR uni68A6 +ENCODING 26790 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FEFE +2854 +2C54 +4A92 +8892 +0200 +07F8 +0C08 +1210 +6120 +00C0 +0700 +7800 +ENDCHAR +STARTCHAR uni68A7 +ENCODING 26791 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +F840 +23F8 +2088 +7088 +6888 +67FE +A000 +A3FC +2204 +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni68A8 +ENCODING 26792 +BBX 15 15 1 -1 +BITMAP +0604 +7844 +0844 +FF44 +1C44 +2A04 +4804 +881C +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni68A9 +ENCODING 26793 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +FDFC +1124 +3124 +39FC +5420 +5420 +91FC +1020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni68AA +ENCODING 26794 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1000 +FC00 +11FC +1104 +3104 +3904 +35FC +5000 +5108 +9088 +1090 +1010 +13FE +ENDCHAR +STARTCHAR uni68AB +ENCODING 26795 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1008 +FDFE +1008 +11F8 +3000 +3BFE +3402 +55FA +5088 +9088 +1070 +10D8 +1306 +ENDCHAR +STARTCHAR uni68AC +ENCODING 26796 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1124 +FDFC +1124 +31FC +3800 +57FE +5480 +9100 +11FC +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni68AD +ENCODING 26797 +BBX 15 15 1 -1 +BITMAP +1040 +1050 +1098 +FDE4 +1090 +1090 +311E +3A40 +3478 +5088 +5188 +9250 +1020 +10D8 +1306 +ENDCHAR +STARTCHAR uni68AE +ENCODING 26798 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FDFC +1100 +3100 +39FE +5502 +557A +914A +114A +127A +1202 +1414 +1008 +ENDCHAR +STARTCHAR uni68AF +ENCODING 26799 +BBX 15 15 1 -1 +BITMAP +1208 +1110 +13FC +FC44 +1044 +13FC +3A40 +3640 +33FE +50C2 +5142 +9242 +1442 +184C +1040 +ENDCHAR +STARTCHAR uni68B0 +ENCODING 26800 +BBX 15 15 1 -1 +BITMAP +1028 +1024 +1020 +FBFE +1020 +12A0 +32A4 +3AA4 +57E8 +5298 +9290 +1290 +14AA +144A +1184 +ENDCHAR +STARTCHAR uni68B1 +ENCODING 26801 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2404 +FC44 +2444 +27FC +7444 +6CE4 +64E4 +A554 +A554 +264C +2444 +2404 +27FC +ENDCHAR +STARTCHAR uni68B2 +ENCODING 26802 +BBX 15 15 1 -1 +BITMAP +10F0 +1010 +1108 +FD04 +13FA +1608 +3A08 +3608 +33F8 +50A0 +50A0 +9120 +1122 +1222 +141E +ENDCHAR +STARTCHAR uni68B3 +ENCODING 26803 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FC40 +1048 +109C +39E4 +3400 +34A8 +50A8 +50A8 +90A8 +1128 +112A +1206 +ENDCHAR +STARTCHAR uni68B4 +ENCODING 26804 +BBX 15 15 1 -1 +BITMAP +200C +2070 +2F10 +F210 +2410 +245C +6F50 +7150 +6550 +A550 +A550 +22FE +2200 +2580 +287E +ENDCHAR +STARTCHAR uni68B5 +ENCODING 26805 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FDFE +28A8 +2CA8 +4AA4 +8922 +0820 +0000 +0FE0 +0820 +0A20 +1122 +20A2 +C01E +ENDCHAR +STARTCHAR uni68B6 +ENCODING 26806 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2404 +FFFC +2430 +25C0 +7440 +6C78 +67C0 +A440 +A47C +27C0 +2842 +2842 +203E +ENDCHAR +STARTCHAR uni68B7 +ENCODING 26807 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1E04 +1048 +7E28 +4210 +4228 +7EC4 +0100 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni68B8 +ENCODING 26808 +BBX 14 16 0 -2 +BITMAP +2084 +21C4 +2704 +2114 +F914 +2114 +27D4 +7114 +6B14 +A394 +A554 +2504 +2904 +2104 +2114 +2108 +ENDCHAR +STARTCHAR uni68B9 +ENCODING 26809 +BBX 15 15 1 -1 +BITMAP +1018 +11E0 +1100 +FD00 +11FC +1110 +3910 +3510 +3110 +57FE +5000 +9080 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni68BA +ENCODING 26810 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +28A8 +2CA8 +4AA4 +8922 +0820 +0000 +FFFE +0100 +01C0 +0130 +0100 +0100 +ENDCHAR +STARTCHAR uni68BB +ENCODING 26811 +BBX 15 15 1 -1 +BITMAP +2128 +2128 +23FE +FA2A +262A +26FE +6AA8 +72A8 +6AFE +A22A +A22A +222A +224A +224C +2288 +ENDCHAR +STARTCHAR uni68BC +ENCODING 26812 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F840 +23FC +2040 +77FE +6880 +6088 +AFFE +A208 +2488 +2848 +2008 +2038 +ENDCHAR +STARTCHAR uni68BD +ENCODING 26813 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +FC20 +1020 +3020 +39FC +5440 +5420 +90A4 +1282 +128A +128A +1478 +1000 +ENDCHAR +STARTCHAR uni68BE +ENCODING 26814 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +13FE +FC20 +1124 +30A4 +38A8 +55FE +5470 +90A8 +10A8 +1124 +1222 +1420 +1020 +ENDCHAR +STARTCHAR uni68BF +ENCODING 26815 +BBX 15 16 0 -2 +BITMAP +1010 +1210 +1110 +117E +FC20 +1028 +3748 +397E +5508 +5508 +91FE +1108 +1108 +1288 +147E +1000 +ENDCHAR +STARTCHAR uni68C0 +ENCODING 26816 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +10A0 +FD10 +1208 +35F6 +3800 +5488 +5048 +9248 +1150 +1110 +1020 +17FE +1000 +ENDCHAR +STARTCHAR uni68C1 +ENCODING 26817 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +1010 +FDFC +1104 +3104 +3904 +55FC +5450 +9050 +1090 +1092 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni68C2 +ENCODING 26818 +BBX 15 16 0 -2 +BITMAP +1000 +13F8 +1008 +1008 +FDF8 +1008 +3008 +3BF8 +5440 +5148 +9148 +1250 +10A0 +1110 +1208 +1406 +ENDCHAR +STARTCHAR uni68C3 +ENCODING 26819 +BBX 15 15 1 -1 +BITMAP +0C40 +F040 +10FE +FD12 +1022 +3842 +5482 +9402 +111C +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni68C4 +ENCODING 26820 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0810 +3FE8 +1110 +FFFE +1110 +1FF0 +0100 +FFFE +0540 +1930 +610E +0100 +ENDCHAR +STARTCHAR uni68C5 +ENCODING 26821 +BBX 15 15 1 -1 +BITMAP +1038 +13C0 +1040 +FFFE +1040 +13FC +3044 +3FFE +3844 +53FC +50E0 +9150 +1248 +1C46 +1040 +ENDCHAR +STARTCHAR uni68C6 +ENCODING 26822 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2110 +FA08 +2406 +23F8 +7000 +6800 +67FC +A524 +A524 +27FC +2524 +2524 +252C +ENDCHAR +STARTCHAR uni68C7 +ENCODING 26823 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1108 +1148 +FA44 +1492 +3108 +3BFC +5444 +5020 +90A4 +1282 +128A +128A +1478 +1000 +ENDCHAR +STARTCHAR uni68C8 +ENCODING 26824 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FC20 +11FC +1020 +3BFE +3400 +31FC +5124 +5124 +91FC +1104 +1104 +110C +ENDCHAR +STARTCHAR uni68C9 +ENCODING 26825 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +11FC +FD04 +11FC +1104 +39FC +3420 +33FE +5222 +9222 +1222 +122E +1020 +1020 +ENDCHAR +STARTCHAR uni68CA +ENCODING 26826 +BBX 15 15 1 -1 +BITMAP +0820 +7FFC +0820 +0FE0 +0820 +0FE0 +0820 +FFFE +0820 +1110 +3FF8 +C546 +1930 +610C +0100 +ENDCHAR +STARTCHAR uni68CB +ENCODING 26827 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +27FE +F908 +2108 +21F8 +7108 +6908 +69F8 +A108 +A108 +27FE +2080 +2108 +2606 +ENDCHAR +STARTCHAR uni68CC +ENCODING 26828 +BBX 15 15 1 -1 +BITMAP +1038 +11C8 +1144 +FD24 +1222 +1202 +3020 +3820 +37FE +50A8 +50A8 +9124 +1124 +1222 +1020 +ENDCHAR +STARTCHAR uni68CD +ENCODING 26829 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +FBF8 +2208 +2208 +73F8 +6800 +6A20 +A22C +A3B0 +2220 +2220 +23A2 +2E1E +ENDCHAR +STARTCHAR uni68CE +ENCODING 26830 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1252 +FC88 +1104 +3020 +3820 +57FE +5420 +9070 +10A8 +1124 +1622 +1020 +1020 +ENDCHAR +STARTCHAR uni68CF +ENCODING 26831 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1104 +FDFC +1104 +1104 +39FC +3400 +33FE +5008 +53FE +9108 +1088 +1088 +1038 +ENDCHAR +STARTCHAR uni68D0 +ENCODING 26832 +BBX 15 15 1 -1 +BITMAP +0420 +7C3E +0420 +3C3C +0420 +1C20 +643E +0820 +1120 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni68D1 +ENCODING 26833 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1090 +179E +F890 +1090 +3090 +3B9C +5490 +5090 +9090 +179E +1090 +1090 +1090 +1090 +ENDCHAR +STARTCHAR uni68D2 +ENCODING 26834 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F840 +23F8 +20A0 +77FE +6910 +6248 +ADF6 +A040 +2040 +27FC +2040 +2040 +ENDCHAR +STARTCHAR uni68D3 +ENCODING 26835 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +11FC +1000 +FD08 +1088 +3090 +3BFE +5400 +5400 +91FC +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni68D4 +ENCODING 26836 +BBX 15 15 1 -1 +BITMAP +101C +13E0 +1220 +FA20 +13FE +1A10 +3610 +338A +3604 +53FC +5204 +93FC +1204 +1204 +13FC +ENDCHAR +STARTCHAR uni68D5 +ENCODING 26837 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +FC04 +2404 +23F8 +7000 +6800 +67FC +A040 +A248 +2248 +2444 +2842 +21C0 +ENDCHAR +STARTCHAR uni68D6 +ENCODING 26838 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1100 +FDF8 +1100 +11F8 +3900 +3500 +33FE +5124 +5128 +9110 +1110 +11C8 +1706 +ENDCHAR +STARTCHAR uni68D7 +ENCODING 26839 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0100 +3FF8 +2388 +0D68 +711C +0100 +FFFE +0100 +3FF8 +2388 +2558 +1930 +E10E +ENDCHAR +STARTCHAR uni68D8 +ENCODING 26840 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FEFE +1020 +1020 +7EFC +52A4 +52A4 +56AC +3070 +3870 +54A8 +9324 +1122 +1020 +ENDCHAR +STARTCHAR uni68D9 +ENCODING 26841 +BBX 15 15 1 -1 +BITMAP +101C +13E0 +1200 +FBFC +1204 +1204 +33FC +3A28 +3624 +53FE +5220 +9420 +1450 +1888 +1306 +ENDCHAR +STARTCHAR uni68DA +ENCODING 26842 +BBX 14 15 1 -1 +BITMAP +2000 +27BC +24A4 +FCA4 +24A4 +27BC +74A4 +6CA4 +A4A4 +A7BC +24A4 +24A4 +24A4 +24A4 +29CC +ENDCHAR +STARTCHAR uni68DB +ENCODING 26843 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1080 +FD04 +13FE +3002 +39FC +5504 +55FC +9104 +11FC +1104 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni68DC +ENCODING 26844 +BBX 15 16 0 -2 +BITMAP +2108 +2088 +2008 +27D4 +FA14 +2222 +2200 +73C8 +6A44 +A244 +A240 +2250 +2248 +2444 +2544 +2880 +ENDCHAR +STARTCHAR uni68DD +ENCODING 26845 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1104 +1124 +FD24 +11FC +3124 +3924 +5574 +5554 +9154 +1174 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni68DE +ENCODING 26846 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +121A +FEE2 +1222 +3222 +3BFE +5622 +5272 +92AA +1326 +1222 +1222 +13FE +1202 +ENDCHAR +STARTCHAR uni68DF +ENCODING 26847 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F840 +23FC +2244 +73FC +6A44 +6244 +A3FC +A150 +2248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni68E0 +ENCODING 26848 +BBX 15 15 1 -1 +BITMAP +1110 +1110 +0920 +7FFC +4004 +4FE4 +0820 +0820 +0FE0 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni68E1 +ENCODING 26849 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2202 +FA8A +224A +2252 +72FA +6A22 +6A22 +A2AA +A2AA +22AA +22FA +2202 +220E +ENDCHAR +STARTCHAR uni68E2 +ENCODING 26850 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +128A +FE52 +13FE +3242 +3A22 +57FE +5282 +9282 +1282 +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni68E3 +ENCODING 26851 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +F844 +27FE +2044 +7044 +6BFC +6244 +A144 +A0E8 +2150 +2248 +2C46 +20C0 +ENDCHAR +STARTCHAR uni68E4 +ENCODING 26852 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27FC +F910 +2110 +2110 +77FE +6800 +6BF8 +A208 +A208 +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni68E5 +ENCODING 26853 +BBX 15 15 1 -1 +BITMAP +2008 +2088 +2488 +F33E +2108 +2288 +7418 +681C +689A +A4AA +A328 +2148 +2288 +2408 +2008 +ENDCHAR +STARTCHAR uni68E6 +ENCODING 26854 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +11F0 +1210 +FC20 +13FC +3044 +3844 +57FE +5444 +9044 +13FC +1044 +1040 +1140 +1080 +ENDCHAR +STARTCHAR uni68E7 +ENCODING 26855 +BBX 15 15 1 -1 +BITMAP +10A0 +1090 +109C +FBE0 +1058 +1062 +3392 +384C +34A0 +50F8 +5780 +9050 +1022 +10D2 +170C +ENDCHAR +STARTCHAR uni68E8 +ENCODING 26856 +BBX 15 15 1 -1 +BITMAP +0E20 +7020 +407E +7E44 +42C4 +4228 +7E10 +4028 +80C6 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni68E9 +ENCODING 26857 +BBX 15 16 0 -2 +BITMAP +1050 +1252 +1252 +1252 +FBDE +1202 +3202 +3BFE +5602 +5202 +93DE +1252 +1252 +1252 +1452 +1802 +ENDCHAR +STARTCHAR uni68EA +ENCODING 26858 +BBX 15 16 0 -2 +BITMAP +1020 +1122 +1122 +1224 +FC50 +1088 +3304 +3822 +5420 +5524 +9124 +1228 +1050 +1088 +1104 +1602 +ENDCHAR +STARTCHAR uni68EB +ENCODING 26859 +BBX 15 16 0 -2 +BITMAP +1014 +1012 +1010 +17FE +F810 +1010 +33D2 +3A52 +5652 +5254 +93D4 +1008 +10EA +171A +1226 +1042 +ENDCHAR +STARTCHAR uni68EC +ENCODING 26860 +BBX 15 15 1 -1 +BITMAP +2248 +2248 +2444 +F7FC +20A0 +20A0 +77FE +6910 +63F8 +A61C +AA16 +2270 +2200 +2204 +21FC +ENDCHAR +STARTCHAR uni68ED +ENCODING 26861 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +17FE +F920 +1120 +123C +3A24 +3664 +3654 +5AC8 +5228 +9210 +1228 +1244 +1282 +ENDCHAR +STARTCHAR uni68EE +ENCODING 26862 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0380 +0540 +0920 +3118 +1010 +1010 +FEFE +1010 +3838 +5454 +9292 +1010 +ENDCHAR +STARTCHAR uni68EF +ENCODING 26863 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +20A0 +F910 +260C +21F0 +7000 +6BF8 +6810 +A020 +A040 +2024 +2282 +248A +2478 +ENDCHAR +STARTCHAR uni68F0 +ENCODING 26864 +BBX 15 15 1 -1 +BITMAP +1038 +13C0 +1040 +FFFC +1248 +1248 +3A48 +37FE +3248 +5248 +5248 +97FC +1040 +1040 +17FE +ENDCHAR +STARTCHAR uni68F1 +ENCODING 26865 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F040 +2FFE +2120 +7220 +6D3E +6100 +A3FC +A608 +2910 +20E0 +21B0 +2E0E +ENDCHAR +STARTCHAR uni68F2 +ENCODING 26866 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F840 +23FC +6044 +77FE +6844 +A3FC +A040 +2FFE +2108 +23F0 +2058 +2784 +ENDCHAR +STARTCHAR uni68F3 +ENCODING 26867 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1042 +114A +FC84 +114A +3A52 +3420 +5000 +53DE +9052 +1152 +1094 +1148 +1254 +1422 +ENDCHAR +STARTCHAR uni68F4 +ENCODING 26868 +BBX 15 16 0 -2 +BITMAP +2000 +27BE +24A2 +24A2 +FCAA +27A4 +24A0 +74BE +6CAA +A7AA +A4AA +24AA +24A4 +24A4 +24AA +29B0 +ENDCHAR +STARTCHAR uni68F5 +ENCODING 26869 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +FDFC +1124 +3124 +39FC +5420 +53FE +9070 +10A8 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni68F6 +ENCODING 26870 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +17FC +F840 +1248 +3248 +3A48 +5554 +50E0 +9150 +1150 +1248 +1444 +1842 +1040 +ENDCHAR +STARTCHAR uni68F7 +ENCODING 26871 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2480 +F480 +27FE +24A2 +64A2 +74A2 +6F94 +A494 +A494 +2488 +2788 +2C94 +20A2 +ENDCHAR +STARTCHAR uni68F8 +ENCODING 26872 +BBX 15 15 0 -2 +BITMAP +7F00 +227C +3E04 +2228 +3E10 +23A8 +FE44 +0200 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni68F9 +ENCODING 26873 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +207C +F840 +23F8 +2208 +73F8 +6A08 +6A08 +A3F8 +A040 +2FFE +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni68FA +ENCODING 26874 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +27FC +FC04 +2404 +23F8 +7208 +6A08 +A3F8 +A200 +23FC +2204 +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni68FB +ENCODING 26875 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +05C0 +0C20 +17F0 +621C +0410 +1860 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni68FC +ENCODING 26876 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FEFE +2850 +2C58 +4A94 +8912 +0BD0 +0830 +3008 +CFF6 +0210 +0410 +0810 +3060 +ENDCHAR +STARTCHAR uni68FD +ENCODING 26877 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7EFC +0820 +1C70 +2AA8 +C924 +0280 +0E60 +3118 +C106 +1FE0 +0020 +0040 +0080 +0100 +ENDCHAR +STARTCHAR uni68FE +ENCODING 26878 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7EFC +0820 +1C70 +2AA8 +C826 +0000 +7FFE +4002 +8FE4 +0820 +0820 +1022 +2022 +C01E +ENDCHAR +STARTCHAR uni68FF +ENCODING 26879 +BBX 15 16 0 -2 +BITMAP +1000 +1040 +139C +1204 +FE04 +139C +3204 +3A04 +57FC +5490 +9090 +1090 +1090 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni6900 +ENCODING 26880 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F404 +2404 +7200 +6BBC +64A4 +A4A4 +ABA4 +212C +2120 +2222 +2422 +281E +ENDCHAR +STARTCHAR uni6901 +ENCODING 26881 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F800 +21F8 +2108 +71F8 +6800 +6BFC +A018 +A020 +27FE +2020 +2020 +20E0 +ENDCHAR +STARTCHAR uni6902 +ENCODING 26882 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1008 +1008 +FDF8 +1008 +3008 +3BFE +5420 +5222 +9174 +10A8 +1124 +1222 +10A0 +1040 +ENDCHAR +STARTCHAR uni6903 +ENCODING 26883 +BBX 15 15 1 -1 +BITMAP +2040 +207C +2040 +FBFE +2242 +2244 +2278 +73C0 +6A44 +AA3C +A200 +2490 +2490 +2912 +220E +ENDCHAR +STARTCHAR uni6904 +ENCODING 26884 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +F908 +2088 +2090 +77FE +6800 +6080 +A7FE +A088 +2108 +2390 +2070 +278C +ENDCHAR +STARTCHAR uni6905 +ENCODING 26885 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F0A0 +2118 +2606 +7000 +6FFE +6008 +A3C8 +A248 +2248 +23C8 +2008 +2038 +ENDCHAR +STARTCHAR uni6906 +ENCODING 26886 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +FD74 +1124 +31FC +3904 +5574 +5154 +9154 +1174 +1104 +1204 +1214 +1408 +ENDCHAR +STARTCHAR uni6907 +ENCODING 26887 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +FBF8 +2208 +2208 +73F8 +6A08 +6A08 +A3F8 +A208 +2208 +2FFE +2110 +2E0C +ENDCHAR +STARTCHAR uni6908 +ENCODING 26888 +BBX 14 15 1 -1 +BITMAP +2200 +2200 +27FC +F804 +2084 +2494 +6294 +72A4 +6FF4 +A1C4 +A1A4 +2294 +2484 +2884 +2038 +ENDCHAR +STARTCHAR uni6909 +ENCODING 26889 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +1010 +3EFC +4210 +1490 +18FE +E010 +0110 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni690A +ENCODING 26890 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FC00 +1088 +1088 +3894 +3562 +3220 +5020 +53FE +9020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni690B +ENCODING 26891 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F800 +23F8 +7208 +6A08 +6A08 +A3F8 +A040 +2248 +2248 +2444 +2842 +20C0 +ENDCHAR +STARTCHAR uni690C +ENCODING 26892 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +13FC +FE04 +12A4 +10A0 +3922 +361C +3400 +5000 +53F8 +9040 +1040 +1040 +17FE +ENDCHAR +STARTCHAR uni690D +ENCODING 26893 +BBX 15 15 1 -1 +BITMAP +2010 +2010 +23FE +F820 +20FC +2284 +72FC +6A84 +AA84 +A2FC +2284 +2284 +22FC +2200 +23FE +ENDCHAR +STARTCHAR uni690E +ENCODING 26894 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +2110 +FBFE +2210 +2610 +73FC +6A10 +6210 +A210 +A3FC +2210 +2210 +2210 +23FE +ENDCHAR +STARTCHAR uni690F +ENCODING 26895 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2090 +F890 +2090 +239C +7204 +6A04 +6A04 +A39C +A090 +2090 +2090 +2090 +27FE +ENDCHAR +STARTCHAR uni6910 +ENCODING 26896 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1204 +1204 +FBFC +1220 +3220 +3BFE +5620 +5220 +92FC +1284 +1284 +1484 +14FC +1884 +ENDCHAR +STARTCHAR uni6911 +ENCODING 26897 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +1124 +FD24 +11FC +3124 +3944 +55FC +5490 +9110 +13FE +1010 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni6912 +ENCODING 26898 +BBX 15 15 1 -1 +BITMAP +2200 +223E +2392 +F212 +2212 +2212 +6FD4 +7214 +6214 +AA88 +AA88 +2A48 +2A54 +2214 +2622 +ENDCHAR +STARTCHAR uni6913 +ENCODING 26899 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1040 +1080 +FD44 +1224 +3068 +3AB0 +5530 +52A8 +9068 +10A4 +1122 +1220 +10A0 +1040 +ENDCHAR +STARTCHAR uni6914 +ENCODING 26900 +BBX 15 16 0 -2 +BITMAP +1092 +1092 +1124 +1248 +FD24 +1092 +3092 +3800 +55FE +5522 +9122 +11FE +1122 +1122 +11FE +1102 +ENDCHAR +STARTCHAR uni6915 +ENCODING 26901 +BBX 15 16 0 -2 +BITMAP +2008 +2088 +2288 +2288 +FABE +2448 +2018 +779C +6AAC +A2AA +A2C8 +2288 +2288 +2488 +2488 +2988 +ENDCHAR +STARTCHAR uni6916 +ENCODING 26902 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +1104 +FD04 +11FC +3120 +3910 +55FE +5520 +9120 +113C +1124 +1244 +1254 +1488 +ENDCHAR +STARTCHAR uni6917 +ENCODING 26903 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC04 +1000 +33FE +3820 +5420 +5520 +913C +1120 +12A0 +1260 +143E +1800 +ENDCHAR +STARTCHAR uni6918 +ENCODING 26904 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7EFC +0820 +1C70 +2AA8 +C824 +0200 +0100 +7FF8 +0060 +0180 +0E00 +3000 +4800 +87FE +ENDCHAR +STARTCHAR uni6919 +ENCODING 26905 +BBX 14 15 1 -1 +BITMAP +2000 +21F8 +2108 +F9F8 +2108 +2108 +71F8 +6800 +ABFC +A204 +2204 +23FC +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni691A +ENCODING 26906 +BBX 14 15 1 -1 +BITMAP +2000 +27BC +24A4 +FFBC +24A4 +27BC +7404 +6C04 +6C04 +A404 +A404 +2404 +2404 +2404 +241C +ENDCHAR +STARTCHAR uni691B +ENCODING 26907 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27FE +F910 +2110 +20A0 +70A0 +6924 +6328 +A530 +A920 +2120 +2122 +2122 +211E +ENDCHAR +STARTCHAR uni691C +ENCODING 26908 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2110 +F208 +2DF6 +2040 +63F8 +7248 +6A48 +A3F8 +A040 +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni691D +ENCODING 26909 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +7D04 +1124 +1124 +FC50 +1090 +2912 +460E +8100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni691E +ENCODING 26910 +BBX 15 16 0 -2 +BITMAP +080C +08F0 +7E80 +1880 +2CFE +2A88 +4888 +8888 +0908 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni691F +ENCODING 26911 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1020 +FC20 +13FE +3002 +3894 +5450 +5510 +9090 +13FE +1028 +1044 +1082 +1302 +ENDCHAR +STARTCHAR uni6920 +ENCODING 26912 +BBX 15 16 0 -2 +BITMAP +100C +FEF0 +2080 +4880 +7EFE +0888 +0E88 +F908 +4A08 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6921 +ENCODING 26913 +BBX 15 15 1 -1 +BITMAP +2002 +2FE2 +2112 +F952 +2252 +27B2 +7132 +6912 +6112 +A792 +A112 +2102 +21C2 +2F02 +200E +ENDCHAR +STARTCHAR uni6922 +ENCODING 26914 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2402 +FDFA +2442 +2442 +7442 +6DF2 +6442 +A452 +A452 +244A +25FA +2402 +27FE +ENDCHAR +STARTCHAR uni6923 +ENCODING 26915 +BBX 15 15 1 -1 +BITMAP +20A0 +20A0 +20A0 +FBFC +22A4 +22A4 +62A4 +73FC +6AA4 +A2A4 +A2A4 +27FE +2080 +2108 +2606 +ENDCHAR +STARTCHAR uni6924 +ENCODING 26916 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1252 +1252 +FE52 +13FE +3020 +3840 +54FC +5104 +9288 +1050 +1020 +1040 +1180 +1600 +ENDCHAR +STARTCHAR uni6925 +ENCODING 26917 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +223E +FBE2 +2522 +2122 +7122 +6FE2 +A122 +A122 +2122 +22A2 +22A2 +247E +2840 +ENDCHAR +STARTCHAR uni6926 +ENCODING 26918 +BBX 15 15 1 -1 +BITMAP +2150 +2148 +2248 +FBFC +20A0 +20A0 +77FE +6910 +6288 +A486 +A3F8 +2088 +2088 +2108 +2630 +ENDCHAR +STARTCHAR uni6927 +ENCODING 26919 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1088 +FD04 +12FA +3000 +3BDE +5652 +5252 +9252 +13DA +1254 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni6928 +ENCODING 26920 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +FC00 +2488 +2488 +75FE +6D08 +A748 +A528 +2528 +2508 +2508 +2908 +2138 +ENDCHAR +STARTCHAR uni6929 +ENCODING 26921 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1220 +FEFC +1224 +3224 +3BFE +5624 +5224 +92FC +1220 +1250 +1450 +1488 +1906 +ENDCHAR +STARTCHAR uni692A +ENCODING 26922 +BBX 15 15 1 -1 +BITMAP +2108 +2088 +2090 +F800 +23FC +3090 +6890 +6092 +6492 +A294 +A294 +2090 +2090 +2090 +27FE +ENDCHAR +STARTCHAR uni692B +ENCODING 26923 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +1050 +11FC +FD24 +1124 +31FC +3924 +5524 +55FC +9020 +1020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni692C +ENCODING 26924 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC04 +11F8 +3108 +3908 +55F8 +5508 +9108 +11F8 +1108 +1108 +17FE +1000 +ENDCHAR +STARTCHAR uni692D +ENCODING 26925 +BBX 15 16 0 -2 +BITMAP +2010 +2790 +2490 +257E +FD20 +2620 +257C +74A4 +6CA4 +A4BC +A6A4 +253C +2424 +2424 +2424 +242C +ENDCHAR +STARTCHAR uni692E +ENCODING 26926 +BBX 15 16 0 -2 +BITMAP +1040 +1048 +1084 +11FE +FC20 +13FE +3088 +3924 +5642 +5188 +9010 +1062 +1184 +1018 +1060 +1380 +ENDCHAR +STARTCHAR uni692F +ENCODING 26927 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +1124 +FDFC +1000 +33FE +3820 +5440 +55FC +9154 +1154 +1154 +1154 +1154 +110C +ENDCHAR +STARTCHAR uni6930 +ENCODING 26928 +BBX 15 15 1 -1 +BITMAP +2000 +2FDE +2492 +FC92 +2792 +2494 +6494 +7794 +6C92 +A492 +A492 +2792 +2C94 +2090 +2090 +ENDCHAR +STARTCHAR uni6931 +ENCODING 26929 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +11FE +1200 +FDFC +1104 +31FC +3904 +55FC +5480 +90FC +1108 +1290 +1060 +1198 +1606 +ENDCHAR +STARTCHAR uni6932 +ENCODING 26930 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +11FC +1084 +FBFE +1000 +31FC +3904 +55FC +5020 +93FE +1020 +1220 +13FE +1020 +1020 +ENDCHAR +STARTCHAR uni6933 +ENCODING 26931 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +FDFC +1124 +3124 +39FC +5400 +53FE +9120 +1122 +1114 +1148 +1184 +1102 +ENDCHAR +STARTCHAR uni6934 +ENCODING 26932 +BBX 15 15 1 -1 +BITMAP +2100 +2678 +2448 +F448 +2748 +248E +6400 +77FC +AC44 +A444 +2428 +2710 +2C28 +2444 +2482 +ENDCHAR +STARTCHAR uni6935 +ENCODING 26933 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +2484 +FC84 +2484 +27BC +7400 +6C7C +6784 +A444 +A428 +2410 +27A8 +2444 +2482 +ENDCHAR +STARTCHAR uni6936 +ENCODING 26934 +BBX 15 15 1 -1 +BITMAP +2010 +22A4 +2244 +FBB4 +2204 +23FC +7110 +6A10 +648E +A1F8 +A308 +2490 +2060 +2190 +2E0E +ENDCHAR +STARTCHAR uni6937 +ENCODING 26935 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +2010 +27FE +FC10 +2410 +25D0 +7412 +6C12 +A5D4 +A554 +2548 +25DA +242A +2846 +3082 +ENDCHAR +STARTCHAR uni6938 +ENCODING 26936 +BBX 15 16 0 -2 +BITMAP +2210 +2110 +2110 +27BE +FA28 +2248 +23AA +72AE +6ABA +A2EA +A2AE +22A8 +24AA +24A2 +29A2 +301E +ENDCHAR +STARTCHAR uni6939 +ENCODING 26937 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +27FE +F908 +21F8 +2108 +71F8 +6908 +6FFE +A290 +A290 +231E +2200 +2200 +23FE +ENDCHAR +STARTCHAR uni693A +ENCODING 26938 +BBX 15 16 0 -2 +BITMAP +2100 +217C +2144 +2244 +FA44 +267C +2A10 +7210 +6AFE +A238 +A254 +2254 +2294 +2312 +2210 +2210 +ENDCHAR +STARTCHAR uni693B +ENCODING 26939 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2400 +FDFC +2504 +25FC +7504 +6DFC +6440 +A7FE +A488 +25D0 +2430 +25C8 +27FE +ENDCHAR +STARTCHAR uni693C +ENCODING 26940 +BBX 15 16 0 -2 +BITMAP +1080 +108E +1120 +1210 +FCC0 +10AE +3104 +3B14 +5524 +5164 +9124 +1124 +1124 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni693D +ENCODING 26941 +BBX 15 15 1 -1 +BITMAP +2100 +21F8 +2208 +FBF8 +2010 +27FE +7060 +6B94 +6478 +A190 +A630 +2058 +2194 +2622 +20C0 +ENDCHAR +STARTCHAR uni693E +ENCODING 26942 +BBX 15 16 0 -2 +BITMAP +1108 +1088 +1090 +17FE +F800 +13C4 +3254 +3A54 +57D4 +5254 +9254 +13D4 +1254 +1244 +1254 +12C8 +ENDCHAR +STARTCHAR uni693F +ENCODING 26943 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F840 +23F8 +70A0 +6FFE +6110 +A3F8 +A60C +2A0A +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni6940 +ENCODING 26944 +BBX 15 16 0 -2 +BITMAP +1004 +101E +13E0 +1020 +FDFC +1124 +3124 +39FC +5420 +53FE +9222 +122A +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni6941 +ENCODING 26945 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC80 +10F8 +3108 +3A90 +5460 +5198 +9606 +11F8 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni6942 +ENCODING 26946 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +13FC +FD50 +1150 +1248 +3C46 +3400 +31F8 +5108 +51F8 +9108 +11F8 +1108 +17FE +ENDCHAR +STARTCHAR uni6943 +ENCODING 26947 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1204 +1204 +FBFC +1200 +33FC +3A40 +5688 +53FC +9224 +1220 +15FC +1420 +1820 +13FE +ENDCHAR +STARTCHAR uni6944 +ENCODING 26948 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FE02 +13FE +3200 +3A00 +57FE +5352 +9552 +15FE +1552 +1552 +1952 +1106 +ENDCHAR +STARTCHAR uni6945 +ENCODING 26949 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1000 +11FC +FD04 +1104 +31FC +3800 +57FE +5222 +9222 +13FE +1222 +1222 +13FE +1202 +ENDCHAR +STARTCHAR uni6946 +ENCODING 26950 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2090 +F7FE +2492 +2492 +67FE +7040 +6840 +A7FE +A088 +2108 +23D0 +2070 +278C +ENDCHAR +STARTCHAR uni6947 +ENCODING 26951 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +FDE4 +1124 +3124 +3BFE +5602 +52FA +928A +128A +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni6948 +ENCODING 26952 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1022 +1120 +FD3C +1120 +3AFE +3400 +51FC +5104 +91FC +1104 +11FC +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni6949 +ENCODING 26953 +BBX 15 15 1 -1 +BITMAP +1088 +1088 +13FE +FC88 +1088 +1040 +3840 +37FE +3080 +5080 +51FE +9282 +1482 +1082 +10FE +ENDCHAR +STARTCHAR uni694A +ENCODING 26954 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +F9F8 +2108 +71F8 +6800 +67FE +A100 +A3FE +2C52 +2192 +2622 +2042 +219C +ENDCHAR +STARTCHAR uni694B +ENCODING 26955 +BBX 15 16 0 -2 +BITMAP +1082 +1082 +17F2 +1082 +FC8A +13EA +32AA +3AAA +57EA +508A +91CA +12AA +14A2 +1082 +108A +1084 +ENDCHAR +STARTCHAR uni694C +ENCODING 26956 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FC +1000 +FD08 +1090 +33FE +3A10 +5620 +52C8 +9210 +1224 +12C8 +1410 +1460 +1980 +ENDCHAR +STARTCHAR uni694D +ENCODING 26957 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0380 +0540 +0920 +3118 +C106 +0000 +7BBC +4AA4 +4AA4 +4AA4 +4AA4 +7BBC +4AA4 +ENDCHAR +STARTCHAR uni694E +ENCODING 26958 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1222 +1020 +FDFE +1020 +31FC +3924 +55FC +5524 +91FC +1020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni694F +ENCODING 26959 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1050 +FC88 +1326 +31FC +3820 +5420 +53FE +9000 +1020 +11FC +1020 +1020 +13FE +ENDCHAR +STARTCHAR uni6950 +ENCODING 26960 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +1124 +11FC +FD24 +1124 +31FC +3850 +5488 +5104 +928A +1088 +1088 +1088 +1108 +1208 +ENDCHAR +STARTCHAR uni6951 +ENCODING 26961 +BBX 15 16 0 -2 +BITMAP +1010 +13D4 +1058 +1252 +FD8C +1088 +3104 +3AFA +5420 +5020 +93FE +1020 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni6952 +ENCODING 26962 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +FDFC +1124 +3124 +39FC +5400 +5440 +9024 +12A2 +128A +1488 +1078 +1000 +ENDCHAR +STARTCHAR uni6953 +ENCODING 26963 +BBX 15 15 1 -1 +BITMAP +2000 +2FF8 +2808 +F868 +2B88 +2888 +6BE8 +7AA8 +AAA8 +ABE8 +2888 +28A8 +28EA +331A +3004 +ENDCHAR +STARTCHAR uni6954 +ENCODING 26964 +BBX 15 15 1 -1 +BITMAP +2100 +213E +27CA +F90A +210A +27D2 +7112 +69E2 +674C +A040 +AFFE +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni6955 +ENCODING 26965 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +27FE +F900 +22FC +2420 +71FE +6800 +6BFC +A204 +A3FC +2204 +23FC +2204 +221C +ENDCHAR +STARTCHAR uni6956 +ENCODING 26966 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +1252 +FE52 +13D2 +3252 +3A52 +5652 +53D2 +921A +1294 +1250 +12B0 +1310 +1010 +ENDCHAR +STARTCHAR uni6957 +ENCODING 26967 +BBX 15 15 1 -1 +BITMAP +2010 +2010 +277C +F914 +22FE +2414 +777C +6910 +657C +A510 +ABFE +2110 +2110 +22D0 +243E +ENDCHAR +STARTCHAR uni6958 +ENCODING 26968 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +247E +1884 +FF28 +2910 +4A28 +9944 +0100 +FFFE +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6959 +ENCODING 26969 +BBX 15 15 1 -1 +BITMAP +2008 +27C8 +2048 +F8BE +2308 +2108 +77DC +695C +6B1A +A32A +A528 +2508 +2908 +2108 +2308 +ENDCHAR +STARTCHAR uni695A +ENCODING 26970 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FEFE +2C58 +4A94 +8912 +0810 +0000 +7FFC +0104 +1100 +11F8 +2900 +4700 +81FE +ENDCHAR +STARTCHAR uni695B +ENCODING 26971 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FCA8 +1020 +33FE +3820 +5420 +5420 +91FC +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni695C +ENCODING 26972 +BBX 14 15 1 -1 +BITMAP +2100 +213C +2124 +F924 +27E4 +213C +7124 +6924 +A7A4 +A4BC +24A4 +24A4 +27C4 +2044 +209C +ENDCHAR +STARTCHAR uni695D +ENCODING 26973 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +F040 +27FC +2444 +7554 +6CE4 +6444 +A7FC +A150 +2248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni695E +ENCODING 26974 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2492 +FC92 +27FE +2040 +7040 +6FFE +6080 +A0FC +A084 +2104 +2104 +2204 +2438 +ENDCHAR +STARTCHAR uni695F +ENCODING 26975 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +FDFC +1104 +39FC +3400 +53FE +5202 +91FC +1020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni6960 +ENCODING 26976 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F840 +2040 +27FC +7514 +6CA4 +65F4 +A444 +A444 +25F4 +2444 +2444 +245C +ENDCHAR +STARTCHAR uni6961 +ENCODING 26977 +BBX 15 15 1 -1 +BITMAP +2020 +2050 +2088 +FB76 +2000 +23CA +724A +6B4A +6AD4 +A254 +A354 +22CA +224A +224A +22CA +ENDCHAR +STARTCHAR uni6962 +ENCODING 26978 +BBX 15 15 1 -1 +BITMAP +2030 +2108 +2204 +FDFA +2090 +2090 +77FE +6C92 +A492 +A71E +2402 +27FE +2402 +2402 +27FE +ENDCHAR +STARTCHAR uni6963 +ENCODING 26979 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1222 +FE22 +13FE +1200 +3AFE +3682 +32FE +5282 +5282 +94FE +1482 +1882 +10FE +ENDCHAR +STARTCHAR uni6964 +ENCODING 26980 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +13FC +FAA4 +14A4 +1324 +31C4 +3A64 +3484 +5118 +5040 +9120 +1508 +1494 +1872 +ENDCHAR +STARTCHAR uni6965 +ENCODING 26981 +BBX 15 16 0 -2 +BITMAP +103C +17C0 +1244 +1128 +FC00 +13FC +3080 +3880 +57FE +5500 +91F8 +1288 +1250 +1420 +18D8 +1306 +ENDCHAR +STARTCHAR uni6966 +ENCODING 26982 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC04 +11FC +3000 +39FC +5504 +55FC +9104 +11FC +1104 +1000 +13FE +1000 +ENDCHAR +STARTCHAR uni6967 +ENCODING 26983 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27FC +2110 +F950 +2040 +23F8 +7248 +6A48 +A248 +A7FE +2040 +20A0 +2110 +2208 +2406 +ENDCHAR +STARTCHAR uni6968 +ENCODING 26984 +BBX 14 15 1 -1 +BITMAP +2080 +20FC +2080 +FBF8 +2208 +2208 +73F8 +6A08 +6A08 +A3F8 +A208 +2208 +23F8 +2110 +260C +ENDCHAR +STARTCHAR uni6969 +ENCODING 26985 +BBX 15 15 1 -1 +BITMAP +2200 +23FE +2220 +FBFE +2522 +25FE +6D22 +7522 +65FE +A420 +A4A0 +2460 +2450 +2488 +2506 +ENDCHAR +STARTCHAR uni696A +ENCODING 26986 +BBX 15 15 1 -1 +BITMAP +2248 +2248 +2FFE +F248 +2248 +2278 +7200 +6BFC +6840 +A040 +AFFE +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni696B +ENCODING 26987 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +FA08 +23F8 +2000 +77FE +6A08 +6BF8 +A208 +A3F8 +220E +23F8 +2608 +2008 +ENDCHAR +STARTCHAR uni696C +ENCODING 26988 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +FBF8 +2208 +2208 +73F8 +6900 +63FE +A442 +AC42 +24A2 +2512 +27E2 +200C +ENDCHAR +STARTCHAR uni696D +ENCODING 26989 +BBX 15 15 1 -1 +BITMAP +2248 +1248 +1250 +FFFE +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni696E +ENCODING 26990 +BBX 15 15 1 -1 +BITMAP +2040 +2044 +23FC +F848 +2048 +2050 +77FE +6848 +69FC +A704 +A104 +21FC +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni696F +ENCODING 26991 +BBX 15 15 1 -1 +BITMAP +201C +23E0 +2220 +FBFE +2220 +22FC +7284 +6A84 +6AFC +A284 +A484 +24FC +2884 +2084 +20FC +ENDCHAR +STARTCHAR uni6970 +ENCODING 26992 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +10A0 +112C +FD24 +1124 +31AC +3924 +5524 +55FC +9124 +1050 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni6971 +ENCODING 26993 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +2040 +FBF8 +2080 +27FC +7110 +6A08 +A5F6 +A040 +23F8 +2040 +20A0 +2110 +2608 +ENDCHAR +STARTCHAR uni6972 +ENCODING 26994 +BBX 15 15 1 -1 +BITMAP +2014 +2012 +2010 +FFFE +2410 +25D0 +7494 +6C94 +67D4 +A554 +A548 +27C8 +24AA +251A +2864 +ENDCHAR +STARTCHAR uni6973 +ENCODING 26995 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +27FE +F908 +21F8 +7108 +6908 +69F8 +A040 +A7FE +20D0 +2148 +2244 +2442 +2040 +ENDCHAR +STARTCHAR uni6974 +ENCODING 26996 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F208 +2108 +2110 +7FFE +6842 +6842 +A7FC +A444 +2444 +245C +2040 +2040 +ENDCHAR +STARTCHAR uni6975 +ENCODING 26997 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2080 +F100 +23C0 +2040 +777C +6D44 +A554 +A548 +2754 +2062 +2180 +2000 +2FFE +ENDCHAR +STARTCHAR uni6976 +ENCODING 26998 +BBX 15 16 0 -2 +BITMAP +4100 +21FC +0A44 +1048 +E0A0 +2110 +2608 +1FF4 +1010 +1FF0 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni6977 +ENCODING 26999 +BBX 15 15 1 -1 +BITMAP +2220 +2226 +23B8 +FA20 +2222 +23A2 +665E +7080 +6BFC +A204 +A204 +23FC +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni6978 +ENCODING 27000 +BBX 15 15 1 -1 +BITMAP +2190 +2E10 +2212 +F252 +2FD2 +2254 +6254 +7710 +A690 +A6A8 +2A28 +2A28 +2244 +2244 +2282 +ENDCHAR +STARTCHAR uni6979 +ENCODING 27001 +BBX 15 15 1 -1 +BITMAP +2000 +27F0 +2210 +FA10 +23FC +3224 +6B24 +66C4 +6D2C +A000 +A7FC +2524 +2524 +2524 +2FFE +ENDCHAR +STARTCHAR uni697A +ENCODING 27002 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2098 +FC60 +23FE +20A4 +70A8 +6920 +6A60 +A040 +A7FE +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni697B +ENCODING 27003 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1104 +FDFC +1104 +39FC +3400 +53FE +5020 +9020 +11FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni697C +ENCODING 27004 +BBX 15 15 1 -1 +BITMAP +2124 +20A4 +20A8 +FBFE +20A8 +2124 +7222 +6840 +6840 +A3FE +A088 +2108 +23F0 +2058 +2786 +ENDCHAR +STARTCHAR uni697D +ENCODING 27005 +BBX 15 15 1 -1 +BITMAP +0080 +0100 +47C4 +2448 +0440 +17D0 +2448 +C446 +07C0 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni697E +ENCODING 27006 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23F8 +FA08 +23F8 +2208 +7208 +6BF8 +6844 +A748 +A168 +2250 +2448 +2846 +21C0 +ENDCHAR +STARTCHAR uni697F +ENCODING 27007 +BBX 15 15 1 -1 +BITMAP +2018 +23E0 +2040 +F840 +27FE +2150 +6248 +7444 +6842 +A3F8 +A208 +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni6980 +ENCODING 27008 +BBX 15 15 1 -1 +BITMAP +1000 +10F8 +1088 +FC88 +1088 +1088 +38F8 +3400 +33DE +5252 +5252 +9252 +1252 +1252 +13DE +ENDCHAR +STARTCHAR uni6981 +ENCODING 27009 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +FC04 +2404 +23F8 +7080 +6930 +6BC8 +A048 +A040 +23F0 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6982 +ENCODING 27010 +BBX 15 15 1 -1 +BITMAP +2000 +2F7C +2928 +2928 +FF28 +2928 +697E +6F08 +B808 +A918 +2918 +29A8 +2EAA +384A +2086 +ENDCHAR +STARTCHAR uni6983 +ENCODING 27011 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7EFC +0820 +1C70 +2AA8 +C826 +0000 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni6984 +ENCODING 27012 +BBX 15 16 0 -2 +BITMAP +1090 +1290 +129E +12A8 +FEC4 +1080 +31FC +3904 +5524 +5524 +9124 +1154 +1050 +1090 +1112 +160E +ENDCHAR +STARTCHAR uni6985 +ENCODING 27013 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +1108 +FDF8 +1108 +3108 +39F8 +5400 +53FC +9294 +1294 +1294 +1294 +17FE +1000 +ENDCHAR +STARTCHAR uni6986 +ENCODING 27014 +BBX 15 16 0 -2 +BITMAP +1040 +10A0 +1110 +1208 +FDF6 +1000 +33C4 +3A54 +5654 +53D4 +9254 +1254 +13D4 +1244 +1254 +12C8 +ENDCHAR +STARTCHAR uni6987 +ENCODING 27015 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +1000 +FC88 +1050 +33FE +3820 +5420 +55FC +9020 +10A8 +1124 +1222 +10A0 +1040 +ENDCHAR +STARTCHAR uni6988 +ENCODING 27016 +BBX 14 16 0 -2 +BITMAP +1100 +10BC +1284 +1204 +FEF4 +1294 +3294 +3AF4 +5604 +52F4 +9294 +1294 +12F4 +1204 +1214 +1208 +ENDCHAR +STARTCHAR uni6989 +ENCODING 27017 +BBX 15 16 0 -2 +BITMAP +1044 +1124 +1088 +1010 +FBFE +1088 +3124 +3A22 +54F8 +5020 +9020 +13FE +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni698A +ENCODING 27018 +BBX 15 15 1 -1 +BITMAP +2008 +2788 +2008 +F83E +202A +77EA +693E +612A +A52A +A5AA +257E +2948 +2908 +2108 +2108 +ENDCHAR +STARTCHAR uni698B +ENCODING 27019 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1004 +10FC +FC04 +11FC +3004 +3800 +57DE +5442 +9042 +13DE +1042 +1042 +13DE +1042 +ENDCHAR +STARTCHAR uni698C +ENCODING 27020 +BBX 15 16 0 -2 +BITMAP +1000 +13FA +100C +104A +FB88 +112A +3126 +3922 +57F8 +512A +912C +112A +1128 +122A +1226 +1422 +ENDCHAR +STARTCHAR uni698D +ENCODING 27021 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +2202 +FBFE +2210 +2292 +7254 +6AFE +A282 +A2FE +2282 +22FE +2482 +248A +2884 +ENDCHAR +STARTCHAR uni698E +ENCODING 27022 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2080 +FBF8 +2208 +23F8 +7208 +6BF8 +6A08 +A3F8 +A100 +23F8 +2E08 +21F0 +2E1E +ENDCHAR +STARTCHAR uni698F +ENCODING 27023 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +1000 +FBFE +1000 +3088 +3904 +5602 +51FC +9154 +1154 +1154 +1154 +17FE +1000 +ENDCHAR +STARTCHAR uni6990 +ENCODING 27024 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1204 +1204 +FBFC +1248 +3248 +3AFC +5648 +5248 +93FE +12A4 +12A8 +1490 +14C8 +1886 +ENDCHAR +STARTCHAR uni6991 +ENCODING 27025 +BBX 15 15 1 -1 +BITMAP +2028 +2024 +27FE +F820 +23FE +2222 +63FE +7222 +6BFE +A222 +A008 +27FE +2108 +2088 +2038 +ENDCHAR +STARTCHAR uni6992 +ENCODING 27026 +BBX 15 15 1 -1 +BITMAP +2000 +27BE +2082 +F882 +27BE +2420 +6420 +77BE +6A8A +A492 +A1A6 +228A +24B2 +2082 +231C +ENDCHAR +STARTCHAR uni6993 +ENCODING 27027 +BBX 15 16 0 -2 +BITMAP +2040 +2028 +2090 +22A4 +FAC2 +248A +2188 +7678 +6800 +A3FC +A294 +2294 +2294 +2294 +27FE +2000 +ENDCHAR +STARTCHAR uni6994 +ENCODING 27028 +BBX 15 15 1 -1 +BITMAP +2200 +223E +2FA2 +F8A2 +28A4 +2FA4 +78A8 +68A4 +AFA4 +A862 +2AA2 +2922 +2EAC +38A0 +2020 +ENDCHAR +STARTCHAR uni6995 +ENCODING 27029 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +FC04 +2514 +2208 +6444 +70A0 +6910 +A208 +AFFE +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni6996 +ENCODING 27030 +BBX 15 15 1 -1 +BITMAP +1000 +1078 +FE48 +1048 +7C48 +008E +FE00 +82FC +BA44 +0044 +1028 +FE10 +3428 +5244 +9182 +ENDCHAR +STARTCHAR uni6997 +ENCODING 27031 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1090 +1294 +FD98 +1090 +37FE +3800 +55F8 +5508 +9108 +11F8 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni6998 +ENCODING 27032 +BBX 15 15 1 -1 +BITMAP +2000 +20FE +7E40 +907C +1044 +FF44 +187C +2840 +44FE +8300 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni6999 +ENCODING 27033 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC20 +1050 +3888 +3504 +52FA +5000 +9000 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni699A +ENCODING 27034 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +1000 +FBFE +1020 +3020 +39FC +5420 +5020 +93FE +1000 +12A4 +1252 +1452 +1000 +ENDCHAR +STARTCHAR uni699B +ENCODING 27035 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F840 +23F8 +70A0 +6FFE +6110 +A268 +ADC6 +2040 +27FC +2150 +2E4E +2040 +ENDCHAR +STARTCHAR uni699C +ENCODING 27036 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F908 +2090 +27FE +7442 +6C42 +ABF8 +A080 +20F8 +2088 +2108 +2208 +2430 +ENDCHAR +STARTCHAR uni699D +ENCODING 27037 +BBX 15 16 0 -2 +BITMAP +2000 +245C +2294 +2114 +FA94 +2454 +2126 +7100 +6FDC +A114 +A594 +2554 +2948 +2108 +2514 +2222 +ENDCHAR +STARTCHAR uni699E +ENCODING 27038 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1110 +1120 +FD7C +1144 +317C +3944 +557C +5510 +9110 +1154 +1152 +1292 +1250 +1420 +ENDCHAR +STARTCHAR uni699F +ENCODING 27039 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1242 +FC20 +11FC +3088 +3850 +57FE +5020 +9020 +11FC +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni69A0 +ENCODING 27040 +BBX 15 15 1 -1 +BITMAP +2000 +2FFC +2804 +FBF4 +2210 +23F0 +6210 +7210 +6BF0 +A080 +AFFE +2000 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni69A1 +ENCODING 27041 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1020 +33FE +3840 +5488 +55F0 +9024 +13FE +1022 +1124 +12A2 +1040 +ENDCHAR +STARTCHAR uni69A2 +ENCODING 27042 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC00 +11FC +3040 +38A2 +5734 +5458 +9094 +1334 +1052 +1090 +1350 +1020 +ENDCHAR +STARTCHAR uni69A3 +ENCODING 27043 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13C0 +1004 +FA44 +1128 +31FC +3A20 +5420 +53FE +9020 +1124 +1124 +1124 +11FC +1004 +ENDCHAR +STARTCHAR uni69A4 +ENCODING 27044 +BBX 15 16 0 -2 +BITMAP +2208 +2208 +23BE +2488 +FAA8 +213E +2208 +7448 +6848 +A7FC +A0E0 +2150 +2248 +2C46 +2040 +2040 +ENDCHAR +STARTCHAR uni69A5 +ENCODING 27045 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +FBFC +2204 +23FC +7040 +6A48 +6A48 +A150 +A7FE +2120 +2120 +2222 +2C1E +ENDCHAR +STARTCHAR uni69A6 +ENCODING 27046 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FE50 +1088 +7D04 +4622 +7C20 +45FC +4420 +7C70 +1070 +FEA8 +1124 +1020 +1020 +ENDCHAR +STARTCHAR uni69A7 +ENCODING 27047 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2400 +FC50 +2450 +25DC +7450 +6DDC +A450 +A5DC +2450 +2490 +2510 +2400 +27FE +ENDCHAR +STARTCHAR uni69A8 +ENCODING 27048 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +128A +FD04 +1080 +30FE +3940 +5640 +507C +9040 +1040 +107E +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni69A9 +ENCODING 27049 +BBX 15 16 0 -2 +BITMAP +1040 +107C +1040 +13FE +FE42 +1278 +33C4 +3A3C +5640 +5220 +93FE +1288 +1250 +1420 +1458 +1986 +ENDCHAR +STARTCHAR uni69AA +ENCODING 27050 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1120 +11FC +FD20 +11FC +3120 +3920 +55FE +5002 +92AA +12AA +12AA +1202 +1014 +1008 +ENDCHAR +STARTCHAR uni69AB +ENCODING 27051 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +11FE +1320 +FDFC +1120 +31FC +3920 +55FE +5500 +9020 +13FE +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni69AC +ENCODING 27052 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1020 +FBFE +1000 +31FC +3904 +5504 +51FC +9052 +1094 +1188 +16A4 +10C2 +1080 +ENDCHAR +STARTCHAR uni69AD +ENCODING 27053 +BBX 15 15 1 -1 +BITMAP +2104 +2204 +2784 +FCFE +2784 +2484 +7484 +6FA4 +6494 +A4D4 +AF84 +2284 +2484 +2884 +219C +ENDCHAR +STARTCHAR uni69AE +ENCODING 27054 +BBX 15 15 1 -1 +BITMAP +0820 +2AA4 +2AA8 +1450 +2288 +0000 +7FFC +4104 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni69AF +ENCODING 27055 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +2710 +257C +FD10 +2510 +25FE +7708 +6D08 +A5FE +A508 +2548 +2728 +2008 +2028 +2010 +ENDCHAR +STARTCHAR uni69B0 +ENCODING 27056 +BBX 15 15 1 -1 +BITMAP +2048 +23F8 +2050 +F7FE +20C0 +2118 +63E0 +7504 +68FC +A000 +A1FC +2104 +21FC +2104 +21FC +ENDCHAR +STARTCHAR uni69B1 +ENCODING 27057 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F800 +21F8 +2108 +77FE +6908 +69F8 +A0A2 +A1A2 +2714 +2110 +21C8 +2706 +ENDCHAR +STARTCHAR uni69B2 +ENCODING 27058 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2248 +FA48 +22A8 +2318 +7208 +6BF8 +6800 +A7FC +A524 +2524 +2524 +2524 +2FFE +ENDCHAR +STARTCHAR uni69B3 +ENCODING 27059 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +2202 +FAEC +2224 +2244 +7244 +6AEE +A224 +A2A4 +22A4 +224E +2460 +249E +2900 +ENDCHAR +STARTCHAR uni69B4 +ENCODING 27060 +BBX 15 15 1 -1 +BITMAP +2180 +267E +2412 +FC12 +24A2 +25A2 +764E +6800 +67FC +A444 +A444 +27FC +2444 +2444 +27FC +ENDCHAR +STARTCHAR uni69B5 +ENCODING 27061 +BBX 15 16 0 -2 +BITMAP +1108 +1108 +17FE +1108 +F800 +17FE +3108 +39F8 +5508 +51F8 +9108 +113E +17C8 +1008 +1008 +1008 +ENDCHAR +STARTCHAR uni69B6 +ENCODING 27062 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +13FE +1220 +FAFC +1224 +33FE +3A24 +56FC +5220 +92FC +1284 +1284 +1484 +14FC +1884 +ENDCHAR +STARTCHAR uni69B7 +ENCODING 27063 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +27FE +FC82 +2492 +2120 +63FC +7620 +6BFC +A220 +A220 +23FC +2220 +2220 +23FE +ENDCHAR +STARTCHAR uni69B8 +ENCODING 27064 +BBX 15 16 0 -2 +BITMAP +1100 +113E +112A +112A +F93E +17AA +312A +393E +5508 +5108 +913E +1188 +1708 +1208 +107E +1000 +ENDCHAR +STARTCHAR uni69B9 +ENCODING 27065 +BBX 15 16 0 -2 +BITMAP +1004 +101E +13F0 +121E +FE10 +12FE +3292 +3A98 +56F2 +528E +9280 +12B8 +12A8 +14AA +154A +1A86 +ENDCHAR +STARTCHAR uni69BA +ENCODING 27066 +BBX 15 15 1 -1 +BITMAP +0040 +7950 +4A48 +4840 +4BFC +68A0 +58A0 +4FFE +4A08 +6C44 +5BFA +4950 +4A48 +8C44 +9840 +ENDCHAR +STARTCHAR uni69BB +ENCODING 27067 +BBX 14 15 1 -1 +BITMAP +2000 +23F8 +2208 +FBF8 +2208 +23F8 +7000 +6FBC +6A94 +A4A4 +A18C +2294 +24A4 +3884 +239C +ENDCHAR +STARTCHAR uni69BC +ENCODING 27068 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23F8 +F840 +2040 +27FC +7080 +6890 +6128 +A7C4 +A000 +23F8 +22A8 +22A8 +2FFE +ENDCHAR +STARTCHAR uni69BD +ENCODING 27069 +BBX 15 16 0 -2 +BITMAP +103C +17C0 +1244 +1128 +FC80 +1110 +33E0 +3840 +5588 +53FC +9044 +1040 +17FC +10A0 +1110 +160E +ENDCHAR +STARTCHAR uni69BE +ENCODING 27070 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +F938 +2128 +27FE +6402 +75FA +6908 +A1F8 +A108 +21F8 +2108 +2108 +2118 +ENDCHAR +STARTCHAR uni69BF +ENCODING 27071 +BBX 15 15 1 -1 +BITMAP +2040 +2444 +2444 +F7FC +2000 +27FC +6000 +73F8 +6A08 +A208 +A3F8 +2110 +2090 +20A0 +2FFE +ENDCHAR +STARTCHAR uni69C0 +ENCODING 27072 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0000 +0FE0 +0820 +7FFC +4004 +4FE4 +4824 +4FEC +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni69C1 +ENCODING 27073 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F800 +21F8 +2108 +71F8 +6800 +6BFC +A204 +A2F4 +2294 +22F4 +2204 +221C +ENDCHAR +STARTCHAR uni69C2 +ENCODING 27074 +BBX 15 16 0 -2 +BITMAP +2006 +2F78 +2110 +2120 +FA44 +2278 +3310 +6A24 +667E +AA12 +A210 +2254 +2252 +2292 +2A50 +2420 +ENDCHAR +STARTCHAR uni69C3 +ENCODING 27075 +BBX 15 15 1 -1 +BITMAP +083C +3E24 +2266 +2A00 +FF7E +2224 +4A18 +8E66 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni69C4 +ENCODING 27076 +BBX 14 16 0 -2 +BITMAP +103C +13C0 +1044 +1224 +FD28 +1100 +3040 +3B9C +5604 +5204 +939C +1204 +1204 +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni69C5 +ENCODING 27077 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1000 +11FC +FD04 +1104 +31FC +3800 +57FE +528A +9252 +13FE +1222 +1222 +122A +1204 +ENDCHAR +STARTCHAR uni69C6 +ENCODING 27078 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +17FE +1110 +FA00 +13FC +3404 +3BE4 +5624 +53E4 +9224 +13E4 +1224 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni69C7 +ENCODING 27079 +BBX 15 15 1 -1 +BITMAP +110C +11F0 +1102 +FCFE +1000 +12FC +3A84 +36FC +3284 +52FC +5284 +93FE +1040 +1188 +1606 +ENDCHAR +STARTCHAR uni69C8 +ENCODING 27080 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1200 +12FC +FE00 +13FE +32A8 +3A90 +56C8 +5286 +9208 +13FE +1288 +1448 +1408 +1818 +ENDCHAR +STARTCHAR uni69C9 +ENCODING 27081 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +1100 +F920 +1520 +333C +3950 +5590 +5310 +95FE +1110 +1128 +1228 +1244 +1482 +ENDCHAR +STARTCHAR uni69CA +ENCODING 27082 +BBX 15 15 1 -1 +BITMAP +2200 +147C +FF44 +087C +4944 +497C +7F44 +088C +1100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni69CB +ENCODING 27083 +BBX 15 15 1 -1 +BITMAP +2090 +27FE +2090 +FBFC +2090 +27FE +7040 +6BFC +A244 +A3FC +2244 +27FE +2204 +2204 +221C +ENDCHAR +STARTCHAR uni69CC +ENCODING 27084 +BBX 15 15 1 -1 +BITMAP +2420 +2240 +21F8 +F888 +2488 +2288 +70F8 +6E80 +62FC +A284 +A284 +2284 +22FC +2500 +28FE +ENDCHAR +STARTCHAR uni69CD +ENCODING 27085 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2118 +FEE6 +2000 +73F8 +6A08 +6BF8 +A208 +A3F8 +2200 +25FC +2504 +2904 +21FC +ENDCHAR +STARTCHAR uni69CE +ENCODING 27086 +BBX 15 15 1 -1 +BITMAP +2208 +2110 +27FC +F840 +23F8 +2040 +7040 +6BFC +6480 +A100 +A2FC +2C20 +2020 +2020 +23FE +ENDCHAR +STARTCHAR uni69CF +ENCODING 27087 +BBX 15 15 1 -1 +BITMAP +2088 +2110 +27FE +F8A0 +23FC +20A4 +77FE +68A4 +68A4 +A3FC +A0A0 +21B0 +22A8 +2CA6 +20A0 +ENDCHAR +STARTCHAR uni69D0 +ENCODING 27088 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +27FC +FC44 +2444 +27FC +7444 +6C44 +67FC +A128 +A12A +213E +2220 +2422 +281E +ENDCHAR +STARTCHAR uni69D1 +ENCODING 27089 +BBX 15 14 1 -1 +BITMAP +7EFC +4284 +4284 +4284 +7EFC +0820 +0820 +FEFE +1830 +1C70 +2AA8 +4924 +8922 +0820 +ENDCHAR +STARTCHAR uni69D2 +ENCODING 27090 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1040 +FC88 +11F0 +3020 +3844 +55FE +5402 +91FC +1124 +11FC +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni69D3 +ENCODING 27091 +BBX 14 15 1 -1 +BITMAP +2000 +23F8 +2040 +F7FC +2000 +23F8 +7208 +6BF8 +6A08 +A3F8 +A208 +2208 +23F8 +2110 +260C +ENDCHAR +STARTCHAR uni69D4 +ENCODING 27092 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +13F8 +1208 +FBF8 +1208 +33F8 +3880 +57FC +5110 +9248 +1444 +1BFA +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni69D5 +ENCODING 27093 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +103E +1020 +FDFC +1104 +31FC +3904 +55FC +5020 +93FE +1070 +10A8 +1124 +1222 +1020 +ENDCHAR +STARTCHAR uni69D6 +ENCODING 27094 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +0200 +FFF8 +8008 +BFE8 +0400 +1FE0 +6820 +0FE0 +0200 +FFF8 +1240 +E238 +ENDCHAR +STARTCHAR uni69D7 +ENCODING 27095 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FE +1080 +FDF8 +1288 +34F8 +3800 +57FE +5202 +92FA +128A +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni69D8 +ENCODING 27096 +BBX 15 15 1 -1 +BITMAP +2208 +2110 +27FC +F840 +23F8 +6040 +7040 +6FFE +A044 +A668 +2170 +20D0 +2348 +2C46 +21C0 +ENDCHAR +STARTCHAR uni69D9 +ENCODING 27097 +BBX 15 15 1 -1 +BITMAP +2040 +27FC +2040 +FBF8 +2208 +73F8 +6A08 +6BF8 +A208 +A3F8 +2000 +2FFE +2080 +2308 +2C06 +ENDCHAR +STARTCHAR uni69DA +ENCODING 27098 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +13FE +FE52 +1252 +33FE +3800 +55FC +5504 +9124 +1124 +1124 +1050 +1088 +1304 +ENDCHAR +STARTCHAR uni69DB +ENCODING 27099 +BBX 15 16 0 -2 +BITMAP +1048 +1148 +114E +1150 +FD68 +1144 +3144 +3840 +5400 +55FC +9154 +1154 +1154 +1154 +17FE +1000 +ENDCHAR +STARTCHAR uni69DC +ENCODING 27100 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +11FE +1320 +FDFC +1120 +31FC +3920 +55FE +5100 +93FC +1088 +109E +1102 +120A +1404 +ENDCHAR +STARTCHAR uni69DD +ENCODING 27101 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23F8 +FA08 +23F8 +2208 +73F8 +6A00 +6BFE +A200 +A3FC +2104 +2924 +2FE4 +200C +ENDCHAR +STARTCHAR uni69DE +ENCODING 27102 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23F8 +F910 +20A0 +27FC +7000 +6BF8 +6A48 +A3F8 +A248 +2248 +23FA +2042 +203E +ENDCHAR +STARTCHAR uni69DF +ENCODING 27103 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +FC14 +11E0 +3100 +3900 +55FC +5110 +9110 +17FE +1000 +1090 +1108 +1204 +ENDCHAR +STARTCHAR uni69E0 +ENCODING 27104 +BBX 15 16 0 -2 +BITMAP +2020 +2420 +22FA +2224 +F828 +21FE +2E20 +7240 +6AFC +A344 +A244 +227C +22C4 +2344 +227C +2044 +ENDCHAR +STARTCHAR uni69E1 +ENCODING 27105 +BBX 15 16 0 -2 +BITMAP +11F8 +1088 +1070 +118C +FC00 +13DE +3252 +398C +5652 +5020 +93FE +1070 +10A8 +1124 +1622 +1020 +ENDCHAR +STARTCHAR uni69E2 +ENCODING 27106 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +2186 +F69A +2082 +238E +6CB2 +7082 +6840 +A3FC +A204 +23FC +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni69E3 +ENCODING 27107 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FE02 +1222 +11FC +3850 +358C +3400 +53FE +5004 +91E4 +1124 +11E4 +100C +ENDCHAR +STARTCHAR uni69E4 +ENCODING 27108 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +12FE +1110 +FD7C +1054 +307C +3B54 +557C +5110 +91FE +1110 +1110 +1290 +147E +1000 +ENDCHAR +STARTCHAR uni69E5 +ENCODING 27109 +BBX 15 16 0 -2 +BITMAP +1088 +13DE +1088 +11DC +FC88 +13DE +3888 +3400 +53FC +5004 +9004 +11FC +1004 +1004 +13FC +1004 +ENDCHAR +STARTCHAR uni69E6 +ENCODING 27110 +BBX 15 16 0 -2 +BITMAP +2020 +27FE +2420 +25FC +FC24 +27FE +2424 +75FC +6C20 +A5FC +A524 +25FC +2524 +29FC +2924 +312C +ENDCHAR +STARTCHAR uni69E7 +ENCODING 27111 +BBX 15 15 1 -1 +BITMAP +080C +FFB0 +0820 +7F3E +4924 +7F24 +4924 +7F24 +0824 +FF44 +0900 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni69E8 +ENCODING 27112 +BBX 15 15 1 -1 +BITMAP +2100 +211E +2FF2 +F012 +27D2 +2454 +77D4 +6812 +A7D2 +A092 +2112 +2FD2 +2114 +2110 +2310 +ENDCHAR +STARTCHAR uni69E9 +ENCODING 27113 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +7C90 +4490 +7DFE +4430 +7C52 +4092 +7D0E +4100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni69EA +ENCODING 27114 +BBX 15 15 1 -1 +BITMAP +2100 +223E +2794 +FC94 +2794 +2494 +74FE +6F88 +6408 +A408 +A798 +2418 +242A +27AA +2446 +ENDCHAR +STARTCHAR uni69EB +ENCODING 27115 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +F040 +27FC +2444 +77FC +6C44 +67FC +A048 +AFFC +200A +2FFE +2208 +2138 +ENDCHAR +STARTCHAR uni69EC +ENCODING 27116 +BBX 15 16 0 -2 +BITMAP +2200 +220E +2F74 +2254 +F554 +28D4 +2754 +7054 +6FD4 +A454 +A754 +2154 +2152 +2154 +255C +2284 +ENDCHAR +STARTCHAR uni69ED +ENCODING 27117 +BBX 15 15 1 -1 +BITMAP +2014 +2012 +2010 +F7FE +2410 +2490 +74D4 +6C94 +6FF4 +A494 +A5CC +26A8 +248A +299A +2824 +ENDCHAR +STARTCHAR uni69EE +ENCODING 27118 +BBX 15 15 1 -1 +BITMAP +2040 +2090 +23E8 +F800 +2108 +22D6 +777A +68A0 +6318 +AC26 +A3C8 +2030 +21C4 +2018 +23E0 +ENDCHAR +STARTCHAR uni69EF +ENCODING 27119 +BBX 15 15 1 -1 +BITMAP +2040 +2244 +2244 +FBFC +2110 +2120 +73FC +6A20 +67FC +A220 +A220 +23FC +2220 +2220 +23FE +ENDCHAR +STARTCHAR uni69F0 +ENCODING 27120 +BBX 15 16 0 -2 +BITMAP +2020 +247C +2284 +2148 +F830 +20CE +2610 +727C +6A10 +A27C +A210 +22FE +2210 +2210 +25FE +2800 +ENDCHAR +STARTCHAR uni69F1 +ENCODING 27121 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1048 +1048 +FDFE +114A +314A +398E +5502 +55FE +9102 +11FE +1000 +1154 +112A +122A +ENDCHAR +STARTCHAR uni69F2 +ENCODING 27122 +BBX 15 15 1 -1 +BITMAP +2204 +2384 +2484 +F494 +2FCC +2544 +7564 +6FD4 +6554 +A544 +A7C6 +244C +2474 +2444 +28C4 +ENDCHAR +STARTCHAR uni69F3 +ENCODING 27123 +BBX 15 15 1 -1 +BITMAP +0820 +48FC +4B44 +78B8 +0BE0 +F808 +2FFE +2908 +4888 +8898 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni69F4 +ENCODING 27124 +BBX 15 15 1 -1 +BITMAP +201C +27E0 +2400 +FFFC +2404 +27FC +7400 +6CF8 +6C88 +A5FC +A524 +25FC +2900 +2902 +20FE +ENDCHAR +STARTCHAR uni69F5 +ENCODING 27125 +BBX 15 15 1 -1 +BITMAP +2040 +23F8 +2248 +FA48 +23F8 +2040 +77FC +6C44 +6444 +A7FC +A040 +2524 +2512 +2884 +287C +ENDCHAR +STARTCHAR uni69F6 +ENCODING 27126 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +282A +F826 +2FFE +2822 +6BA2 +7AA6 +6BAA +A812 +A9B2 +2E56 +2896 +290A +2FFE +ENDCHAR +STARTCHAR uni69F7 +ENCODING 27127 +BBX 15 16 0 -2 +BITMAP +0820 +3E20 +08F8 +7F28 +2228 +496A +3E2A +0856 +7E82 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni69F8 +ENCODING 27128 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27D0 +2110 +F93C +27D4 +2014 +72B4 +6D54 +A11C +A7D4 +2114 +2114 +21E4 +2726 +2242 +ENDCHAR +STARTCHAR uni69F9 +ENCODING 27129 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23F8 +FA08 +23F8 +2208 +63F8 +7000 +675C +A040 +A75C +2040 +2FFE +2040 +2040 +ENDCHAR +STARTCHAR uni69FA +ENCODING 27130 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2420 +FDFC +2424 +27FE +7424 +6DFC +A420 +A562 +24B4 +2928 +2A26 +30A0 +2040 +ENDCHAR +STARTCHAR uni69FB +ENCODING 27131 +BBX 15 15 1 -1 +BITMAP +2200 +227C +2244 +F27C +2FC4 +2244 +627C +7FC4 +6244 +A27C +A528 +24A8 +284A +304A +2086 +ENDCHAR +STARTCHAR uni69FC +ENCODING 27132 +BBX 15 16 0 -2 +BITMAP +11F8 +7D08 +11F8 +1108 +FDF8 +1108 +29F8 +2490 +4112 +860E +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni69FD +ENCODING 27133 +BBX 15 15 1 -1 +BITMAP +2090 +27FE +2090 +FFFE +2492 +77FE +6C92 +67FE +A000 +A3FC +2204 +23FC +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni69FE +ENCODING 27134 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2104 +F9FC +2104 +21FC +7000 +6BFE +6292 +A3FE +A000 +27FE +2104 +20F8 +278E +ENDCHAR +STARTCHAR uni69FF +ENCODING 27135 +BBX 14 15 1 -1 +BITMAP +2110 +27FC +2110 +F9F0 +2000 +23F8 +7248 +6BF8 +6840 +A3F8 +A040 +23F8 +2040 +2040 +27FC +ENDCHAR +STARTCHAR uni6A00 +ENCODING 27136 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1088 +FC50 +13FE +3222 +3AFA +5622 +52FA +928A +128A +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni6A01 +ENCODING 27137 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1040 +33FE +3888 +5504 +5242 +959C +1104 +11DC +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni6A02 +ENCODING 27138 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +47D0 +D474 +27C8 +4450 +5C56 +EFFA +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6A03 +ENCODING 27139 +BBX 15 16 0 -2 +BITMAP +1100 +109E +13D2 +1252 +FE52 +13DE +3252 +3A52 +57D2 +521E +9292 +1252 +12D2 +1352 +122A +1044 +ENDCHAR +STARTCHAR uni6A04 +ENCODING 27140 +BBX 15 16 0 -2 +BITMAP +2010 +2710 +25FE +2510 +FD7C +2654 +257C +7554 +6D7C +A510 +A538 +2654 +2492 +2410 +2410 +2410 +ENDCHAR +STARTCHAR uni6A05 +ENCODING 27141 +BBX 15 15 1 -1 +BITMAP +2288 +2288 +24D4 +F532 +2800 +3220 +6A20 +6420 +6CBC +A4A0 +A4A0 +24A0 +24E0 +2520 +251E +ENDCHAR +STARTCHAR uni6A06 +ENCODING 27142 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1000 +FD54 +1124 +3154 +39FC +5420 +53FE +9242 +1292 +12FA +120A +1202 +1206 +ENDCHAR +STARTCHAR uni6A07 +ENCODING 27143 +BBX 15 16 0 -2 +BITMAP +2120 +213C +2144 +22A8 +FA10 +26A8 +2AC6 +72BC +6AA4 +A2BC +A2A4 +22BC +2224 +2224 +2224 +222C +ENDCHAR +STARTCHAR uni6A08 +ENCODING 27144 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +23F8 +2110 +F8A0 +27FE +2000 +73F8 +6A08 +A3F8 +A208 +23F8 +2120 +2122 +2222 +2C1E +ENDCHAR +STARTCHAR uni6A09 +ENCODING 27145 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FAAA +1124 +32AA +3820 +56AA +5124 +92AA +1050 +1050 +1088 +1104 +1602 +ENDCHAR +STARTCHAR uni6A0A +ENCODING 27146 +BBX 15 15 1 -1 +BITMAP +2088 +2288 +F93E +2288 +640C +729C +A92A +2288 +2448 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni6A0B +ENCODING 27147 +BBX 15 15 1 -1 +BITMAP +2800 +25FC +2208 +F0D0 +2820 +25FC +6124 +BDFC +A524 +25FC +2524 +2524 +252C +2A00 +31FE +ENDCHAR +STARTCHAR uni6A0C +ENCODING 27148 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2248 +FFFE +2248 +23F8 +7000 +6BF8 +6A08 +A3F8 +A208 +23F8 +2208 +23F8 +260C +ENDCHAR +STARTCHAR uni6A0D +ENCODING 27149 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1020 +11FC +FC20 +13FE +3000 +39FC +5504 +55FC +9104 +11FC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni6A0E +ENCODING 27150 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +13FE +1202 +F880 +10FE +3110 +3B20 +557C +5144 +9144 +117C +1144 +1144 +117C +1144 +ENDCHAR +STARTCHAR uni6A0F +ENCODING 27151 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1124 +FDFC +1124 +1124 +39FC +3450 +35A4 +50CC +53F2 +9020 +10A8 +1326 +1020 +ENDCHAR +STARTCHAR uni6A10 +ENCODING 27152 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +103E +1020 +FC20 +13FE +3202 +3B26 +568A +5252 +9326 +1252 +128A +1326 +13FE +1202 +ENDCHAR +STARTCHAR uni6A11 +ENCODING 27153 +BBX 15 15 1 -1 +BITMAP +2000 +24F8 +2228 +F8AC +26AA +204A +7148 +6A98 +6440 +A040 +A7FE +2150 +2248 +2446 +2040 +ENDCHAR +STARTCHAR uni6A12 +ENCODING 27154 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +F882 +2852 +2524 +6942 +718A +AEF8 +A000 +2040 +2444 +2444 +2444 +27FC +ENDCHAR +STARTCHAR uni6A13 +ENCODING 27155 +BBX 15 15 1 -1 +BITMAP +2040 +23F8 +2248 +FFFE +2248 +23F8 +7040 +6BF8 +6A48 +A3F8 +A080 +2FFE +2108 +21F0 +270C +ENDCHAR +STARTCHAR uni6A14 +ENCODING 27156 +BBX 15 15 1 -1 +BITMAP +2148 +2290 +2148 +FBFC +2244 +23FC +7244 +6BFC +6840 +A7FE +A150 +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni6A15 +ENCODING 27157 +BBX 15 15 1 -1 +BITMAP +2210 +2210 +2F90 +F23E +2FA2 +2AAA +6ACC +7A88 +6F88 +A208 +A714 +2694 +2A94 +2A22 +2242 +ENDCHAR +STARTCHAR uni6A16 +ENCODING 27158 +BBX 15 16 0 -2 +BITMAP +0100 +06C0 +1830 +EFEE +0000 +1FF0 +1010 +1FF0 +0000 +13FE +FC08 +11E8 +3928 +55E8 +9008 +1018 +ENDCHAR +STARTCHAR uni6A17 +ENCODING 27159 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2040 +F7FE +2442 +675A +7040 +6BFC +A800 +A7FE +2100 +21FC +2204 +2004 +2038 +ENDCHAR +STARTCHAR uni6A18 +ENCODING 27160 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +10A8 +13FE +FE02 +10F8 +3088 +3888 +54F8 +5420 +9020 +11FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni6A19 +ENCODING 27161 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2090 +FFFE +2492 +7492 +6FFE +6000 +A3FC +A000 +27FE +2020 +2228 +2C26 +20E0 +ENDCHAR +STARTCHAR uni6A1A +ENCODING 27162 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +FC90 +2490 +27FE +7492 +6C92 +67FE +A510 +A5D2 +251C +2910 +29D2 +230E +ENDCHAR +STARTCHAR uni6A1B +ENCODING 27163 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +2294 +FCA4 +218C +2294 +7044 +68A0 +6318 +AC46 +A390 +2064 +2388 +2030 +23C0 +ENDCHAR +STARTCHAR uni6A1C +ENCODING 27164 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1200 +FE48 +1248 +33FE +3A48 +5648 +5248 +9278 +1200 +1554 +152A +1A2A +1000 +ENDCHAR +STARTCHAR uni6A1D +ENCODING 27165 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +107C +FC40 +13FE +1242 +33FC +3A40 +36FE +5284 +52FC +9284 +14FC +1484 +11FE +ENDCHAR +STARTCHAR uni6A1E +ENCODING 27166 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2400 +FCF8 +2488 +2488 +74F8 +6C00 +65DC +A554 +A554 +2554 +25DC +2400 +27FE +ENDCHAR +STARTCHAR uni6A1F +ENCODING 27167 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23F8 +F910 +27FC +2000 +63F8 +7208 +6BF8 +AA08 +A3F8 +2040 +27FE +2040 +2040 +ENDCHAR +STARTCHAR uni6A20 +ENCODING 27168 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC88 +10F8 +3020 +3BFE +5622 +5332 +92AA +1376 +1222 +1222 +122A +1224 +ENDCHAR +STARTCHAR uni6A21 +ENCODING 27169 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +27FE +F890 +2090 +73FC +6A04 +6BFC +A204 +A3FC +2040 +27FE +2090 +2108 +2606 +ENDCHAR +STARTCHAR uni6A22 +ENCODING 27170 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23F8 +FA08 +23F8 +2208 +73F8 +6A00 +6BFE +A200 +A3FC +2004 +2554 +2554 +2808 +ENDCHAR +STARTCHAR uni6A23 +ENCODING 27171 +BBX 15 15 1 -1 +BITMAP +2208 +2110 +27FC +F840 +23F8 +2040 +6FFE +7080 +6860 +A3C4 +A048 +2768 +2150 +2248 +2CC6 +ENDCHAR +STARTCHAR uni6A24 +ENCODING 27172 +BBX 15 16 0 -2 +BITMAP +2110 +211E +2122 +2254 +F208 +2694 +2AE2 +7288 +6A88 +A2BE +A288 +22AC +222A +224A +2228 +2210 +ENDCHAR +STARTCHAR uni6A25 +ENCODING 27173 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +1080 +FDF8 +1288 +3070 +3B8E +5420 +55FC +9020 +11FC +1020 +13FE +1020 +1020 +ENDCHAR +STARTCHAR uni6A26 +ENCODING 27174 +BBX 15 16 0 -2 +BITMAP +1210 +1210 +13DE +1528 +F884 +1020 +3010 +3BFE +5420 +5020 +91FC +1020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni6A27 +ENCODING 27175 +BBX 15 16 0 -2 +BITMAP +2000 +245C +2294 +2114 +FA94 +2414 +20A6 +7140 +691C +A7D4 +A114 +2394 +2548 +2908 +2114 +2122 +ENDCHAR +STARTCHAR uni6A28 +ENCODING 27176 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +23FE +FA10 +2254 +2238 +7254 +6A82 +A250 +A27C +2290 +2210 +25FE +2410 +2810 +ENDCHAR +STARTCHAR uni6A29 +ENCODING 27177 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +23FC +F480 +2080 +2FFE +7120 +6BFC +6220 +A7FC +AA20 +23FC +2220 +2220 +23FE +ENDCHAR +STARTCHAR uni6A2A +ENCODING 27178 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27FC +F910 +2110 +2FFE +7040 +6FFC +6444 +A7FC +A444 +2444 +27FC +2208 +2C06 +ENDCHAR +STARTCHAR uni6A2B +ENCODING 27179 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2A22 +FFA2 +28A2 +2F94 +6A08 +7A18 +AFA4 +A042 +2040 +27FC +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6A2C +ENCODING 27180 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +13FC +1244 +FEF4 +1314 +32A4 +3A44 +56A4 +53FC +9040 +1024 +1522 +150A +1908 +10F8 +ENDCHAR +STARTCHAR uni6A2D +ENCODING 27181 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FCF8 +1088 +30F8 +3888 +57FE +5088 +9124 +12FA +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni6A2E +ENCODING 27182 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2120 +F920 +27FC +2524 +7524 +6FFC +A800 +A244 +2244 +2448 +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni6A2F +ENCODING 27183 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FD24 +10A8 +33FE +3800 +55FC +5504 +9174 +1154 +1174 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni6A30 +ENCODING 27184 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1040 +FFFE +1242 +135A +3040 +3B58 +3440 +53FC +5004 +97FE +1004 +1004 +13FC +ENDCHAR +STARTCHAR uni6A31 +ENCODING 27185 +BBX 15 16 0 -2 +BITMAP +2000 +2FBE +28A2 +2AAA +FAAA +2AAA +2514 +78A2 +6880 +AFFE +A110 +2210 +23A0 +2060 +2198 +2E04 +ENDCHAR +STARTCHAR uni6A32 +ENCODING 27186 +BBX 15 15 1 -1 +BITMAP +2014 +2012 +27FE +F810 +23D0 +2010 +77D0 +6A50 +6BD0 +A250 +A3D0 +2248 +23CA +212A +2614 +ENDCHAR +STARTCHAR uni6A33 +ENCODING 27187 +BBX 15 15 1 -1 +BITMAP +21F8 +2008 +27FE +F808 +21F8 +2000 +77DE +6912 +69D2 +A71E +A008 +27FE +2108 +2088 +2038 +ENDCHAR +STARTCHAR uni6A34 +ENCODING 27188 +BBX 15 15 1 -1 +BITMAP +2110 +2114 +27D2 +F812 +2450 +2290 +77FE +6810 +67D4 +A454 +A7C8 +2448 +245A +27EA +2044 +ENDCHAR +STARTCHAR uni6A35 +ENCODING 27189 +BBX 15 15 1 -1 +BITMAP +2110 +2120 +23FE +F620 +2BFC +2220 +6220 +73FC +6A20 +AA20 +A3FE +2000 +2294 +2494 +2402 +ENDCHAR +STARTCHAR uni6A36 +ENCODING 27190 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +FBFC +2204 +23FC +7000 +6FFE +6A40 +A3FC +A254 +23D4 +2248 +23D4 +2E62 +ENDCHAR +STARTCHAR uni6A37 +ENCODING 27191 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7EFC +1830 +2C68 +4AA4 +8820 +7F7C +2244 +3E44 +2228 +3E28 +2210 +27A8 +FA44 +0282 +ENDCHAR +STARTCHAR uni6A38 +ENCODING 27192 +BBX 15 15 1 -1 +BITMAP +20A0 +24A4 +22A8 +FFFE +2208 +2110 +77FC +6840 +ABF8 +A040 +2FFE +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni6A39 +ENCODING 27193 +BBX 15 15 1 -1 +BITMAP +2104 +2104 +2FC4 +F13E +2784 +2004 +67A4 +7494 +6C94 +A784 +2004 +2484 +22E4 +2F04 +200C +ENDCHAR +STARTCHAR uni6A3A +ENCODING 27194 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2FFE +2110 +F7FC +2248 +2FFE +6248 +7248 +A7FC +A040 +2FFE +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni6A3B +ENCODING 27195 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +23F8 +FA48 +23F8 +2040 +77FC +6A08 +63F8 +A208 +A3F8 +2208 +23F8 +2110 +260C +ENDCHAR +STARTCHAR uni6A3C +ENCODING 27196 +BBX 15 16 0 -2 +BITMAP +27FC +2404 +27FC +2400 +FDF8 +2410 +27FE +7420 +6C60 +A79C +A484 +2508 +29DE +2F08 +3108 +2318 +ENDCHAR +STARTCHAR uni6A3D +ENCODING 27197 +BBX 15 15 1 -1 +BITMAP +2208 +25F6 +20A0 +FBFC +22A4 +733C +6A04 +6BFC +A204 +A3FC +2008 +27FE +2108 +2088 +2038 +ENDCHAR +STARTCHAR uni6A3E +ENCODING 27198 +BBX 15 15 1 -1 +BITMAP +2214 +2214 +2F92 +F27E +2250 +2FD0 +7254 +6A54 +63D4 +AA48 +AA6A +2A9A +2E24 +2980 +307E +ENDCHAR +STARTCHAR uni6A3F +ENCODING 27199 +BBX 14 15 1 -1 +BITMAP +2000 +27BC +24A4 +F7BC +2000 +23F8 +7248 +6BF8 +6A48 +A248 +A3F8 +2040 +27FC +2040 +2040 +ENDCHAR +STARTCHAR uni6A40 +ENCODING 27200 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1040 +FC84 +11FE +30A8 +38AA +5526 +5200 +91FC +1154 +1154 +1154 +13FE +1000 +ENDCHAR +STARTCHAR uni6A41 +ENCODING 27201 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +11DE +12A8 +FC44 +1100 +31FC +3A04 +55F4 +5114 +91F4 +1114 +11F4 +1114 +1028 +1010 +ENDCHAR +STARTCHAR uni6A42 +ENCODING 27202 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +13FE +1050 +FDFC +1154 +318C +3974 +5504 +55FC +9020 +13FE +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni6A43 +ENCODING 27203 +BBX 15 16 0 -2 +BITMAP +1024 +13A8 +1092 +1514 +FA08 +1404 +33BA +38A8 +54C6 +5380 +923C +1384 +10A8 +1090 +12A8 +1144 +ENDCHAR +STARTCHAR uni6A44 +ENCODING 27204 +BBX 15 15 1 -1 +BITMAP +2010 +2FD0 +2210 +F23E +2FA4 +24C4 +77A4 +6CA4 +ACA8 +A798 +2490 +2498 +27A8 +2CA4 +20C2 +ENDCHAR +STARTCHAR uni6A45 +ENCODING 27205 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +27FC +FAA8 +22A8 +22A8 +6FFE +72A8 +62A8 +A2A8 +AFFE +2000 +2524 +2892 +2892 +ENDCHAR +STARTCHAR uni6A46 +ENCODING 27206 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +3FFC +5248 +1248 +FFFE +1248 +1248 +3FFC +0820 +7DFE +28A8 +2D24 +4A22 +8820 +ENDCHAR +STARTCHAR uni6A47 +ENCODING 27207 +BBX 15 15 1 -1 +BITMAP +2070 +2380 +27F0 +F080 +2FF8 +2084 +707C +6308 +AC70 +A410 +3F7C +2410 +3F7C +2492 +238E +ENDCHAR +STARTCHAR uni6A48 +ENCODING 27208 +BBX 15 15 1 -1 +BITMAP +2040 +23F8 +2040 +F7FC +2000 +2208 +6FBE +7208 +A388 +AE3E +2000 +2FFE +2110 +2112 +2E0E +ENDCHAR +STARTCHAR uni6A49 +ENCODING 27209 +BBX 15 15 1 -1 +BITMAP +2444 +2248 +2040 +F7FE +2150 +2248 +7446 +6A40 +6388 +A4FE +A4A8 +2AA8 +213E +2208 +2C08 +ENDCHAR +STARTCHAR uni6A4A +ENCODING 27210 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +13DE +FA52 +1252 +33DE +3850 +57FE +5222 +9222 +13FE +1222 +1222 +13FE +1202 +ENDCHAR +STARTCHAR uni6A4B +ENCODING 27211 +BBX 15 15 1 -1 +BITMAP +2018 +23E0 +2040 +F7FC +2110 +23F8 +6D16 +B1F0 +B000 +27FC +2404 +25F4 +2514 +25F4 +240C +ENDCHAR +STARTCHAR uni6A4C +ENCODING 27212 +BBX 15 16 0 -2 +BITMAP +13DE +1252 +13DE +1252 +FBDE +1202 +32F2 +3A92 +56F2 +5292 +92F2 +1292 +1292 +1332 +1202 +1206 +ENDCHAR +STARTCHAR uni6A4D +ENCODING 27213 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +13DE +FE52 +13DE +3202 +3AFA +5622 +5272 +9222 +1222 +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni6A4E +ENCODING 27214 +BBX 15 15 1 -1 +BITMAP +2038 +23C0 +2248 +F950 +27FE +20D0 +7148 +6A44 +6402 +A3F8 +A248 +23F8 +2248 +2248 +23F8 +ENDCHAR +STARTCHAR uni6A4F +ENCODING 27215 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +13FE +1020 +FDFC +1020 +33FE +3924 +54A8 +53FE +9000 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni6A50 +ENCODING 27216 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +0200 +3FE0 +2220 +FFF8 +8208 +1FE0 +6820 +0FE0 +0200 +FFF8 +1240 +E238 +ENDCHAR +STARTCHAR uni6A51 +ENCODING 27217 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +F8A0 +2514 +2208 +77FC +6A0A +ABF8 +A208 +23F8 +2040 +2248 +2444 +2944 +2080 +ENDCHAR +STARTCHAR uni6A52 +ENCODING 27218 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2040 +FFFE +2442 +235C +7040 +6B5C +6000 +A3FC +A000 +27FE +2088 +2134 +27C2 +ENDCHAR +STARTCHAR uni6A53 +ENCODING 27219 +BBX 15 16 0 -2 +BITMAP +203C +27C0 +2044 +FA24 +2108 +27FE +7402 +6A08 +AA08 +A3BE +2488 +2AA8 +213E +2208 +2408 +2808 +ENDCHAR +STARTCHAR uni6A54 +ENCODING 27220 +BBX 15 16 0 -2 +BITMAP +2210 +2110 +2FD0 +2010 +F7BE +24A4 +27D4 +7014 +6F94 +A094 +A114 +21C8 +2F08 +2114 +2514 +2222 +ENDCHAR +STARTCHAR uni6A55 +ENCODING 27221 +BBX 15 16 0 -2 +BITMAP +1124 +10A8 +13FE +1202 +FCF8 +1088 +30F8 +3800 +55FC +5410 +9110 +11FE +1050 +1090 +1310 +1030 +ENDCHAR +STARTCHAR uni6A56 +ENCODING 27222 +BBX 15 15 1 -1 +BITMAP +2248 +2248 +2150 +FFFE +2402 +25FA +7108 +6908 +61F8 +A040 +A7FC +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni6A57 +ENCODING 27223 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FC00 +13DE +3252 +3A52 +57DE +5252 +9252 +13DE +1252 +1022 +102A +1044 +ENDCHAR +STARTCHAR uni6A58 +ENCODING 27224 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2088 +F850 +27FE +30A4 +6928 +6260 +67FE +A492 +A512 +26FE +2492 +24F2 +2406 +ENDCHAR +STARTCHAR uni6A59 +ENCODING 27225 +BBX 15 15 1 -1 +BITMAP +2008 +23D0 +2462 +FA94 +2108 +26F6 +7000 +69F8 +6908 +A108 +A1F8 +2000 +2108 +2090 +27FE +ENDCHAR +STARTCHAR uni6A5A +ENCODING 27226 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1024 +13FE +FC24 +11FC +3020 +3AAA +57AE +5222 +93FE +1222 +13AE +12AA +12AA +1422 +ENDCHAR +STARTCHAR uni6A5B +ENCODING 27227 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2A28 +F928 +2948 +2BEE +6892 +7894 +6AA8 +AAA8 +ABE8 +2888 +2914 +3114 +2222 +ENDCHAR +STARTCHAR uni6A5C +ENCODING 27228 +BBX 15 16 0 -2 +BITMAP +3FFE +2890 +2510 +3FDE +2222 +2A88 +2F88 +2294 +2422 +2880 +3FFE +21C0 +22A0 +4498 +5886 +8080 +ENDCHAR +STARTCHAR uni6A5D +ENCODING 27229 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +13FE +FE52 +13FE +3000 +39FC +5504 +55FC +9104 +11FC +1020 +13FE +1020 +1020 +ENDCHAR +STARTCHAR uni6A5E +ENCODING 27230 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1124 +31FC +3924 +55FC +5022 +93FE +1042 +1024 +12A2 +128A +1478 +ENDCHAR +STARTCHAR uni6A5F +ENCODING 27231 +BBX 15 15 1 -1 +BITMAP +2248 +2248 +2450 +FD74 +2248 +2554 +6EFA +6044 +B7FE +B440 +2424 +2628 +2910 +282A +30C4 +ENDCHAR +STARTCHAR uni6A60 +ENCODING 27232 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1040 +10F8 +FB48 +1030 +33D0 +383C +55C4 +5048 +9030 +13C4 +10A8 +1190 +16A8 +10C6 +ENDCHAR +STARTCHAR uni6A61 +ENCODING 27233 +BBX 15 15 1 -1 +BITMAP +2100 +21F0 +2220 +FFF8 +2248 +7248 +6BF8 +6840 +A184 +A644 +21A8 +2670 +21A8 +2626 +20E0 +ENDCHAR +STARTCHAR uni6A62 +ENCODING 27234 +BBX 15 15 1 -1 +BITMAP +2010 +2710 +25FE +FD10 +25FC +2610 +76FE +6D00 +A57C +A544 +257C +2644 +247C +2444 +244C +ENDCHAR +STARTCHAR uni6A63 +ENCODING 27235 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +2FFE +2882 +F548 +2514 +28F4 +7000 +6FFC +A444 +A7FC +2444 +27FC +2444 +2454 +2408 +ENDCHAR +STARTCHAR uni6A64 +ENCODING 27236 +BBX 15 15 1 -1 +BITMAP +1110 +1488 +2420 +03E0 +1414 +AAAA +A0A0 +A2A2 +1E1E +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni6A65 +ENCODING 27237 +BBX 15 16 0 -2 +BITMAP +2822 +11FC +2828 +4BFE +9840 +29FC +4E84 +88FC +2884 +10FC +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni6A66 +ENCODING 27238 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23F8 +F910 +27FE +2000 +73F8 +6A48 +6BF8 +A248 +A3F8 +2040 +23F8 +2040 +27FE +ENDCHAR +STARTCHAR uni6A67 +ENCODING 27239 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +1000 +13FE +FE22 +12AA +3272 +3A22 +57FE +5400 +91FC +1104 +11FC +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni6A68 +ENCODING 27240 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1020 +1088 +FBFE +1088 +31FC +3904 +55FC +5104 +91FC +1104 +11FC +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni6A69 +ENCODING 27241 +BBX 15 16 0 -2 +BITMAP +1088 +12AA +12DC +1488 +F954 +1222 +33FE +3A02 +5400 +50F8 +9088 +1088 +108A +110A +1206 +1400 +ENDCHAR +STARTCHAR uni6A6A +ENCODING 27242 +BBX 15 16 0 -2 +BITMAP +1110 +1114 +11D2 +1250 +FA7E +1550 +3090 +3AA8 +5528 +5144 +9244 +1482 +1008 +12A4 +1252 +1452 +ENDCHAR +STARTCHAR uni6A6B +ENCODING 27243 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27FC +F910 +21F0 +2000 +7FFE +6840 +67FC +A444 +A7FC +2444 +27FC +2208 +2C06 +ENDCHAR +STARTCHAR uni6A6C +ENCODING 27244 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1088 +12A8 +FBFE +1188 +32DA +3CA6 +55F8 +5108 +9108 +11F8 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni6A6D +ENCODING 27245 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1020 +11FC +FD04 +11FC +3020 +39FC +5488 +5050 +93FE +1020 +11FC +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni6A6E +ENCODING 27246 +BBX 15 16 0 -2 +BITMAP +1040 +13BE +1292 +1252 +FEAA +1324 +3040 +39FC +5504 +55FC +9104 +11FC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni6A6F +ENCODING 27247 +BBX 15 16 0 -2 +BITMAP +2088 +22AA +22DC +2488 +F954 +2222 +2000 +73FE +6A42 +A444 +A3FC +2044 +2044 +2084 +2114 +2208 +ENDCHAR +STARTCHAR uni6A70 +ENCODING 27248 +BBX 15 16 0 -2 +BITMAP +1040 +11FC +1104 +11FC +FD04 +11FC +3104 +39FC +5420 +5524 +90A8 +1124 +1020 +13FE +1020 +1020 +ENDCHAR +STARTCHAR uni6A71 +ENCODING 27249 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2400 +2404 +F7E4 +2404 +25DE +7544 +6D44 +A5D4 +A40C +2544 +2484 +24E4 +2B14 +2008 +ENDCHAR +STARTCHAR uni6A72 +ENCODING 27250 +BBX 15 15 1 -1 +BITMAP +2040 +27FE +2040 +FBFC +2000 +23FC +7204 +6BFC +6908 +A7FE +A000 +23FC +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni6A73 +ENCODING 27251 +BBX 15 15 1 -1 +BITMAP +2010 +2F54 +2992 +F97C +2910 +2D10 +6BFE +6928 +7944 +AD92 +AB7C +2924 +2924 +2924 +334C +ENDCHAR +STARTCHAR uni6A74 +ENCODING 27252 +BBX 15 16 0 -2 +BITMAP +1090 +1092 +12D4 +129A +FAD2 +174E +3088 +39F0 +5420 +5044 +93FE +1022 +1128 +1224 +14A2 +1040 +ENDCHAR +STARTCHAR uni6A75 +ENCODING 27253 +BBX 15 16 0 -2 +BITMAP +2288 +2288 +27C8 +2290 +FA9E +27D4 +2024 +77D4 +6C54 +A7D4 +A454 +27C8 +2448 +2454 +2464 +24C2 +ENDCHAR +STARTCHAR uni6A76 +ENCODING 27254 +BBX 15 16 0 -2 +BITMAP +2110 +2114 +2112 +27D2 +F910 +27DE +2470 +77D2 +6C52 +A7D4 +A114 +2FD8 +210A +211A +2126 +2142 +ENDCHAR +STARTCHAR uni6A77 +ENCODING 27255 +BBX 15 16 0 -2 +BITMAP +2040 +2288 +22EA +2EAA +F2AC +22E8 +22AA +76AA +6AE6 +A000 +A120 +2120 +2120 +2222 +2422 +281E +ENDCHAR +STARTCHAR uni6A78 +ENCODING 27256 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +FBF8 +2208 +2208 +73F8 +6000 +AFBE +A8A2 +28A2 +2FBE +28A2 +28A2 +2FBE +ENDCHAR +STARTCHAR uni6A79 +ENCODING 27257 +BBX 15 16 0 -2 +BITMAP +1080 +10F8 +1110 +13FC +FD24 +11FC +3924 +35FC +5000 +53FE +9000 +11FC +1104 +11FC +1104 +11FC +ENDCHAR +STARTCHAR uni6A7A +ENCODING 27258 +BBX 15 15 1 -1 +BITMAP +2000 +27BE +24A2 +FFBE +24A2 +27BE +7402 +6CF2 +6C92 +A492 +A4F2 +2492 +2492 +24F2 +240E +ENDCHAR +STARTCHAR uni6A7B +ENCODING 27259 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2048 +2048 +FBF8 +2088 +2088 +77FC +6800 +A7BC +A294 +2294 +27BC +2294 +22D4 +2F3E +ENDCHAR +STARTCHAR uni6A7C +ENCODING 27260 +BBX 15 16 0 -2 +BITMAP +2220 +223C +2444 +2578 +F908 +2EFE +2220 +74D2 +681A +AF2C +A0CC +201A +232A +2CC8 +2028 +2010 +ENDCHAR +STARTCHAR uni6A7D +ENCODING 27261 +BBX 15 16 0 -2 +BITMAP +1010 +1210 +117C +1010 +FCFE +1044 +3328 +39FE +5510 +557C +9110 +11FE +1110 +1110 +12FE +1400 +ENDCHAR +STARTCHAR uni6A7E +ENCODING 27262 +BBX 15 15 1 -1 +BITMAP +2000 +21F0 +2110 +F910 +21F0 +2000 +67BC +74A4 +6CA4 +A7BC +A040 +2FFE +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni6A7F +ENCODING 27263 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2000 +F3F8 +2248 +23F8 +6248 +6FFE +B000 +A3F8 +2248 +23F8 +2248 +2248 +2FFE +ENDCHAR +STARTCHAR uni6A80 +ENCODING 27264 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +FA04 +22F4 +2294 +72F4 +6A04 +6BFC +A000 +A1F8 +2108 +21F8 +2108 +27FE +ENDCHAR +STARTCHAR uni6A81 +ENCODING 27265 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1000 +11FC +FD04 +1174 +3154 +3974 +5504 +55FC +9008 +10F0 +1020 +13FE +10A8 +1326 +ENDCHAR +STARTCHAR uni6A82 +ENCODING 27266 +BBX 15 16 0 -2 +BITMAP +1090 +13FC +1294 +13FC +FE94 +13FC +3000 +3BFC +5600 +52F8 +9200 +13FE +1520 +1514 +1548 +1986 +ENDCHAR +STARTCHAR uni6A83 +ENCODING 27267 +BBX 15 15 1 -1 +BITMAP +001C +79E4 +4A12 +4AFA +5020 +51FE +4808 +4BFE +5008 +41F8 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni6A84 +ENCODING 27268 +BBX 15 15 1 -1 +BITMAP +2110 +2210 +2790 +FCBE +27A4 +24E4 +7794 +6914 +AFD4 +A208 +23C8 +2248 +2454 +2454 +29A2 +ENDCHAR +STARTCHAR uni6A85 +ENCODING 27269 +BBX 15 16 0 -2 +BITMAP +1020 +113C +1120 +13FE +FC10 +1014 +33FE +3A10 +57F0 +5254 +9254 +12D4 +1368 +144A +1896 +1322 +ENDCHAR +STARTCHAR uni6A86 +ENCODING 27270 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +2148 +2548 +F58E +2908 +2288 +7448 +693E +A162 +A5A2 +2522 +2922 +22A2 +247E +2822 +ENDCHAR +STARTCHAR uni6A87 +ENCODING 27271 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +11FE +1320 +FDFC +1120 +31FC +3920 +55FE +5100 +93DE +1252 +1252 +1272 +1202 +1206 +ENDCHAR +STARTCHAR uni6A88 +ENCODING 27272 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1294 +1294 +FBFC +1000 +37FE +3800 +57FC +5204 +93FC +10A2 +1114 +1308 +1D44 +1182 +ENDCHAR +STARTCHAR uni6A89 +ENCODING 27273 +BBX 14 15 1 -1 +BITMAP +2000 +2FC0 +24BC +F7A4 +24A4 +27A4 +64A4 +77BC +6C80 +A070 +A780 +2080 +27F8 +2080 +2FFC +ENDCHAR +STARTCHAR uni6A8A +ENCODING 27274 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +2114 +2FD4 +F122 +27C0 +245C +77C8 +6C48 +A7C8 +A13E +2FC8 +2108 +2108 +2108 +2108 +ENDCHAR +STARTCHAR uni6A8B +ENCODING 27275 +BBX 15 15 1 -1 +BITMAP +2110 +23FC +2110 +FFFE +2248 +23F8 +6444 +77FC +6A4A +A3F8 +A248 +23F8 +2040 +27FC +2040 +ENDCHAR +STARTCHAR uni6A8C +ENCODING 27276 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2294 +2294 +FBFC +2000 +2090 +779E +6890 +A090 +A39C +2090 +2090 +279E +2090 +2090 +ENDCHAR +STARTCHAR uni6A8D +ENCODING 27277 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +FA08 +2110 +2FFE +7000 +6BF8 +6A08 +A3F8 +A208 +23F8 +2044 +252A +28F8 +ENDCHAR +STARTCHAR uni6A8E +ENCODING 27278 +BBX 15 15 1 -1 +BITMAP +2040 +21B0 +2248 +FDF6 +22A8 +2248 +62A8 +63F8 +B040 +A7FC +2484 +2524 +25D4 +2404 +241C +ENDCHAR +STARTCHAR uni6A8F +ENCODING 27279 +BBX 15 16 0 -2 +BITMAP +1050 +1252 +1154 +1050 +FBFE +1088 +3050 +3BFE +5420 +51FC +9020 +13FE +10A8 +1124 +1622 +1020 +ENDCHAR +STARTCHAR uni6A90 +ENCODING 27280 +BBX 15 15 1 -1 +BITMAP +21F0 +2220 +2FFE +F488 +270E +24F8 +6400 +77FE +B400 +A4F8 +2400 +29FC +2904 +2904 +21FC +ENDCHAR +STARTCHAR uni6A91 +ENCODING 27281 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2040 +F7FE +2442 +235A +7042 +6B58 +6000 +A3FC +A244 +23FC +2244 +2244 +23FC +ENDCHAR +STARTCHAR uni6A92 +ENCODING 27282 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7EFC +1830 +2C68 +4AA6 +9FF0 +10D0 +1710 +1110 +17D0 +1550 +27CA +212A +4FE6 +8022 +ENDCHAR +STARTCHAR uni6A93 +ENCODING 27283 +BBX 15 16 0 -2 +BITMAP +2100 +26DC +2454 +2454 +F6D4 +2454 +2466 +77C0 +681C +A014 +A7D4 +2114 +2108 +21C8 +2714 +2222 +ENDCHAR +STARTCHAR uni6A94 +ENCODING 27284 +BBX 15 15 1 -1 +BITMAP +2244 +2244 +2148 +FFFE +2402 +25FA +7108 +69F8 +6800 +A3FC +A244 +23FC +2244 +2244 +23FC +ENDCHAR +STARTCHAR uni6A95 +ENCODING 27285 +BBX 15 16 0 -2 +BITMAP +0800 +FF78 +0848 +7F48 +4986 +7F00 +4978 +7F48 +0828 +FF90 +4928 +7F44 +0100 +FFFE +0920 +711C +ENDCHAR +STARTCHAR uni6A96 +ENCODING 27286 +BBX 15 16 0 -2 +BITMAP +1044 +1224 +1128 +107E +FC10 +1028 +334A +391C +5528 +554C +911A +112A +1148 +1110 +12FE +1400 +ENDCHAR +STARTCHAR uni6A97 +ENCODING 27287 +BBX 15 15 1 -1 +BITMAP +0010 +7E10 +42FE +4244 +7E28 +41FE +BE10 +A2FE +A210 +3E10 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni6A98 +ENCODING 27288 +BBX 15 16 0 -2 +BITMAP +2010 +2008 +2788 +24BE +FC80 +2494 +2788 +747E +6C08 +A788 +A6BE +2A88 +2A88 +2B88 +3288 +2008 +ENDCHAR +STARTCHAR uni6A99 +ENCODING 27289 +BBX 15 16 0 -2 +BITMAP +21F8 +2108 +21F8 +250A +F5FA +250A +25FA +7402 +6F9E +A090 +A090 +2F9E +2492 +2492 +2492 +2892 +ENDCHAR +STARTCHAR uni6A9A +ENCODING 27290 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27BC +2110 +FBB8 +2554 +2912 +7000 +6FFC +A044 +A240 +2278 +2240 +2540 +28FE +3000 +ENDCHAR +STARTCHAR uni6A9B +ENCODING 27291 +BBX 15 16 0 -2 +BITMAP +2000 +227C +2144 +2174 +F854 +2054 +26FE +7282 +6ABA +A2AA +A2BA +2282 +228A +2284 +2500 +28FE +ENDCHAR +STARTCHAR uni6A9C +ENCODING 27292 +BBX 15 15 1 -1 +BITMAP +2040 +21B0 +26EE +F800 +27FC +2444 +7554 +6D54 +67FC +A000 +A3F8 +2208 +23F8 +2208 +23F8 +ENDCHAR +STARTCHAR uni6A9D +ENCODING 27293 +BBX 15 15 1 -1 +BITMAP +2010 +2794 +2492 +F792 +2010 +2FDE +64B0 +7790 +6494 +A794 +A48C +27C8 +2C9A +20AA +20C4 +ENDCHAR +STARTCHAR uni6A9E +ENCODING 27294 +BBX 15 15 1 -1 +BITMAP +2400 +27BE +2492 +F912 +2FA2 +2AC6 +6AA8 +7FA8 +6ABE +AAC8 +AF88 +28FE +2888 +2888 +3188 +ENDCHAR +STARTCHAR uni6A9F +ENCODING 27295 +BBX 15 15 1 -1 +BITMAP +27FE +2090 +27FE +FC92 +27FE +7000 +6BFC +6604 +A3FC +A204 +23FC +2204 +23FC +2108 +2606 +ENDCHAR +STARTCHAR uni6AA0 +ENCODING 27296 +BBX 15 15 1 -1 +BITMAP +2420 +FF20 +247E +7EC4 +4224 +FA28 +4A18 +7A24 +0542 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni6AA1 +ENCODING 27297 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2294 +FBFC +2040 +73FC +6840 +6FFE +A108 +A7FE +2040 +23FC +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni6AA2 +ENCODING 27298 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2318 +FC06 +21F0 +2000 +77BC +6CA4 +A4A4 +A7BC +2000 +2208 +2208 +2514 +28A2 +ENDCHAR +STARTCHAR uni6AA3 +ENCODING 27299 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +F248 +2248 +2554 +7FFE +6800 +A7FC +A404 +25F4 +2514 +25F4 +2404 +27FC +ENDCHAR +STARTCHAR uni6AA4 +ENCODING 27300 +BBX 15 16 0 -2 +BITMAP +1044 +1028 +1200 +11FE +FD20 +107C +3044 +3B7C +5544 +517C +9144 +117C +1144 +1280 +147E +1000 +ENDCHAR +STARTCHAR uni6AA5 +ENCODING 27301 +BBX 15 15 1 -1 +BITMAP +2110 +20A0 +27FC +F840 +23F8 +2040 +7FFE +6808 +6744 +A240 +AFFE +2224 +2728 +2A92 +226C +ENDCHAR +STARTCHAR uni6AA6 +ENCODING 27302 +BBX 15 16 0 -2 +BITMAP +2002 +2FE2 +2282 +2FEA +FAAA +2AAA +2FEA +700A +6BCA +A00A +AFEA +210A +2542 +2522 +292A +2304 +ENDCHAR +STARTCHAR uni6AA7 +ENCODING 27303 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +1100 +FBFC +1554 +30D4 +3B24 +5454 +5094 +9348 +1020 +10A4 +128A +128A +1478 +ENDCHAR +STARTCHAR uni6AA8 +ENCODING 27304 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +13FE +1020 +FDFC +1020 +33FE +3800 +5620 +513E +9042 +1114 +1610 +1228 +1244 +1082 +ENDCHAR +STARTCHAR uni6AA9 +ENCODING 27305 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1000 +11FC +FD04 +1174 +3154 +3974 +5504 +55FC +9000 +11FC +1000 +13FE +1124 +1262 +ENDCHAR +STARTCHAR uni6AAA +ENCODING 27306 +BBX 15 15 1 -1 +BITMAP +2020 +2040 +24F2 +FA94 +2294 +20F0 +6294 +7492 +ACF2 +A040 +2FFE +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni6AAB +ENCODING 27307 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +FC02 +25FE +2264 +75A8 +6A90 +69F8 +A606 +A3FC +2020 +2128 +2626 +2060 +ENDCHAR +STARTCHAR uni6AAC +ENCODING 27308 +BBX 15 15 1 -1 +BITMAP +2090 +27FE +2090 +F7FE +2402 +25FA +7000 +6FFE +A880 +A146 +26A8 +2120 +2678 +21A6 +2660 +ENDCHAR +STARTCHAR uni6AAD +ENCODING 27309 +BBX 15 16 0 -2 +BITMAP +2200 +227C +2544 +24C4 +F87C +2744 +2244 +727C +6F52 +A252 +AA54 +2748 +2248 +2354 +2C62 +2040 +ENDCHAR +STARTCHAR uni6AAE +ENCODING 27310 +BBX 15 15 1 -1 +BITMAP +2040 +27FC +2040 +FBF8 +2000 +27FC +7044 +6BF8 +6000 +AFFE +A008 +277E +2508 +2748 +2018 +ENDCHAR +STARTCHAR uni6AAF +ENCODING 27311 +BBX 15 16 0 -2 +BITMAP +2040 +2FFE +2040 +27FC +F800 +23F8 +3208 +6FFE +6802 +A7FC +A110 +23F8 +2040 +27FC +2040 +2FFE +ENDCHAR +STARTCHAR uni6AB0 +ENCODING 27312 +BBX 15 16 0 -2 +BITMAP +2108 +2110 +223E +2222 +F4BE +2722 +213E +7208 +6CBE +A7AA +A02A +20AA +256A +252E +2408 +2008 +ENDCHAR +STARTCHAR uni6AB1 +ENCODING 27313 +BBX 15 16 0 -2 +BITMAP +1108 +11EE +1294 +1042 +FC88 +1088 +33FE +3888 +54F8 +5488 +90F8 +1088 +13FE +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni6AB2 +ENCODING 27314 +BBX 15 16 0 -2 +BITMAP +13FE +1222 +13FE +1222 +FEFA +12AA +32FA +3AAA +56FA +5226 +93FE +120A +13FE +128A +125A +13FE +ENDCHAR +STARTCHAR uni6AB3 +ENCODING 27315 +BBX 15 15 1 -1 +BITMAP +2020 +23FE +2202 +F9FC +20A4 +232A +71FC +6704 +A1FC +A104 +21FC +2104 +21FC +2088 +2306 +ENDCHAR +STARTCHAR uni6AB4 +ENCODING 27316 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +10A8 +1090 +FDFE +1320 +31FC +3920 +55FC +5120 +91FE +1100 +13FC +1088 +1070 +138E +ENDCHAR +STARTCHAR uni6AB5 +ENCODING 27317 +BBX 15 16 0 -2 +BITMAP +1044 +1284 +12EA +124E +FEA4 +12EE +3222 +3BFE +5644 +5284 +92EA +124E +12A4 +12EE +1222 +13FE +ENDCHAR +STARTCHAR uni6AB6 +ENCODING 27318 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1050 +FC88 +13FE +3200 +3A7C +5644 +527C +9200 +12EE +12AA +12EE +1200 +13FE +ENDCHAR +STARTCHAR uni6AB7 +ENCODING 27319 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2248 +2444 +FFFE +2444 +26EC +7554 +6EEC +A444 +A6EC +2554 +26EC +2444 +2454 +2408 +ENDCHAR +STARTCHAR uni6AB8 +ENCODING 27320 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +27FE +FC42 +24AA +2278 +6402 +73FC +AA94 +ABFC +2000 +27FE +2020 +2020 +20E0 +ENDCHAR +STARTCHAR uni6AB9 +ENCODING 27321 +BBX 15 16 0 -2 +BITMAP +2420 +2220 +223E +2F40 +F490 +247E +2724 +7542 +6DFE +A504 +A574 +2554 +2974 +2904 +3314 +2008 +ENDCHAR +STARTCHAR uni6ABA +ENCODING 27322 +BBX 15 16 0 -2 +BITMAP +2040 +27FE +2000 +21F8 +F908 +21F8 +2000 +77FE +6C02 +A3F8 +A180 +2644 +21B8 +2668 +21A6 +2660 +ENDCHAR +STARTCHAR uni6ABB +ENCODING 27323 +BBX 15 15 1 -1 +BITMAP +2010 +27D0 +251E +F790 +24A0 +27A0 +7500 +6D0E +A7C0 +A000 +27FC +2524 +2524 +2524 +2FFE +ENDCHAR +STARTCHAR uni6ABC +ENCODING 27324 +BBX 15 16 0 -2 +BITMAP +203E +27C0 +2244 +2128 +FBF8 +2040 +27FC +7000 +6BF8 +A008 +A3F8 +2008 +23F8 +2544 +252A +28FA +ENDCHAR +STARTCHAR uni6ABD +ENCODING 27325 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2040 +FFFE +2442 +255A +7442 +6958 +6000 +A7FE +A040 +27FE +2492 +2492 +2496 +ENDCHAR +STARTCHAR uni6ABE +ENCODING 27326 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +4D28 +1450 +2288 +7FFE +4002 +8824 +0820 +7EFC +0830 +1C68 +2AA4 +C922 +0820 +0820 +ENDCHAR +STARTCHAR uni6ABF +ENCODING 27327 +BBX 15 16 0 -2 +BITMAP +3FFE +2894 +2F92 +2890 +2FFE +2010 +2F90 +28A8 +2FA4 +28C4 +2980 +2040 +4FFE +4160 +8658 +1846 +ENDCHAR +STARTCHAR uni6AC0 +ENCODING 27328 +BBX 15 16 0 -2 +BITMAP +1108 +17FE +1108 +11F8 +FD08 +11F8 +3908 +37FE +5108 +5294 +95E2 +1048 +13FC +1040 +1248 +14C4 +ENDCHAR +STARTCHAR uni6AC1 +ENCODING 27329 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2FFE +F882 +2852 +2524 +694A +76F8 +A840 +A7FC +2444 +27FC +2048 +207C +2F82 +ENDCHAR +STARTCHAR uni6AC2 +ENCODING 27330 +BBX 15 15 1 -1 +BITMAP +2000 +23BC +2194 +FAAC +2194 +22A4 +7088 +6910 +ABFE +A620 +23FC +2220 +23FC +2220 +23FE +ENDCHAR +STARTCHAR uni6AC3 +ENCODING 27331 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2420 +FCF8 +24A8 +27FE +7488 +6CF8 +A488 +A4F8 +2488 +24F8 +2450 +258C +27FE +ENDCHAR +STARTCHAR uni6AC4 +ENCODING 27332 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +1020 +13FE +FC20 +11FC +31AC +3974 +55FC +5420 +91FC +1020 +13FE +1000 +1154 +122A +ENDCHAR +STARTCHAR uni6AC5 +ENCODING 27333 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +2110 +F0A4 +2F58 +2554 +7552 +6B58 +A000 +A208 +23F8 +2208 +23F8 +2208 +2408 +ENDCHAR +STARTCHAR uni6AC6 +ENCODING 27334 +BBX 15 15 1 -1 +BITMAP +2104 +2204 +2FD4 +FA4C +2A44 +2FD4 +6A4C +7A44 +6FC6 +A53C +A544 +2554 +29EC +2902 +30FE +ENDCHAR +STARTCHAR uni6AC7 +ENCODING 27335 +BBX 15 16 0 -2 +BITMAP +2080 +209E +2084 +27E8 +FCBE +2492 +2492 +77DE +6E52 +A55E +A552 +2492 +289E +2940 +314C +2252 +ENDCHAR +STARTCHAR uni6AC8 +ENCODING 27336 +BBX 15 16 0 -2 +BITMAP +2024 +27A8 +2092 +2514 +F2E8 +2404 +23FA +7208 +6BF8 +A110 +A7FC +2000 +21F0 +2110 +2212 +240E +ENDCHAR +STARTCHAR uni6AC9 +ENCODING 27337 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2484 +2484 +F7E4 +249E +25C4 +7404 +6DD4 +A54C +A5C4 +2544 +2884 +28C4 +3314 +2008 +ENDCHAR +STARTCHAR uni6ACA +ENCODING 27338 +BBX 14 16 0 -2 +BITMAP +2000 +27BC +24A4 +27BC +FCA4 +27BC +2484 +75F4 +6E94 +A4E4 +A71C +24E4 +24A4 +24A4 +24E4 +240C +ENDCHAR +STARTCHAR uni6ACB +ENCODING 27339 +BBX 15 16 0 -2 +BITMAP +1040 +11FC +1124 +1194 +FD4C +1124 +39FC +3420 +53FE +528A +9124 +13FE +1080 +10FC +1104 +120C +ENDCHAR +STARTCHAR uni6ACC +ENCODING 27340 +BBX 15 16 0 -2 +BITMAP +23FC +2040 +21F8 +2108 +F9F8 +2108 +27FE +7442 +6AA4 +A28A +A47A +2080 +21F8 +2288 +2070 +238E +ENDCHAR +STARTCHAR uni6ACD +ENCODING 27341 +BBX 15 16 0 -2 +BITMAP +1042 +139C +1210 +13DE +FE94 +1294 +3420 +3BFC +5604 +53FC +9204 +13FC +1204 +13FC +1108 +1204 +ENDCHAR +STARTCHAR uni6ACE +ENCODING 27342 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2488 +FDFC +2488 +27FE +7420 +6DFC +A524 +A5FC +2524 +25FC +2400 +2488 +2904 +ENDCHAR +STARTCHAR uni6ACF +ENCODING 27343 +BBX 15 16 0 -2 +BITMAP +2000 +20FE +2428 +22FE +FAAA +20FE +2010 +71FE +6E44 +A2FE +A344 +227C +2242 +223E +2500 +28FE +ENDCHAR +STARTCHAR uni6AD0 +ENCODING 27344 +BBX 15 14 1 -1 +BITMAP +0FE0 +0920 +0FE0 +0920 +7FFC +4AA4 +7EFC +4AA4 +7EFC +0100 +7FFC +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni6AD1 +ENCODING 27345 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2248 +F3F8 +2248 +2248 +73F8 +6800 +AFBE +AAAA +2AAA +2FBE +2AAA +2AAA +2FBE +ENDCHAR +STARTCHAR uni6AD2 +ENCODING 27346 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +FD10 +11DE +3A52 +3554 +5288 +5174 +9202 +11FC +1020 +1124 +1222 +1060 +ENDCHAR +STARTCHAR uni6AD3 +ENCODING 27347 +BBX 15 15 1 -1 +BITMAP +2080 +21F0 +2620 +FBFC +2244 +23FC +7244 +6BFC +A294 +A44A +23FC +2204 +23FC +2204 +23FC +ENDCHAR +STARTCHAR uni6AD4 +ENCODING 27348 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2488 +FFFE +2488 +25FC +7524 +6DFC +6524 +A5FC +A420 +25FE +252A +293A +21C6 +ENDCHAR +STARTCHAR uni6AD5 +ENCODING 27349 +BBX 15 16 0 -2 +BITMAP +1088 +11DC +1088 +13DE +FC88 +1154 +3222 +39FC +5504 +55FC +9104 +11FC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni6AD6 +ENCODING 27350 +BBX 15 16 0 -2 +BITMAP +2020 +203E +2020 +27FE +FC22 +25F8 +2422 +75FE +6D24 +A5FC +A524 +25FC +2840 +2AA4 +328A +247A +ENDCHAR +STARTCHAR uni6AD7 +ENCODING 27351 +BBX 15 16 0 -2 +BITMAP +1108 +17FE +1108 +1000 +FBFC +1294 +3294 +3BFC +5428 +53FE +9220 +1324 +12A8 +1292 +142A +18C6 +ENDCHAR +STARTCHAR uni6AD8 +ENCODING 27352 +BBX 15 16 0 -2 +BITMAP +1088 +13DE +1088 +11DC +FC88 +13DE +3088 +3BFC +5404 +51FC +9004 +13FC +1040 +12A4 +128A +147A +ENDCHAR +STARTCHAR uni6AD9 +ENCODING 27353 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +17FE +1088 +FBFE +1200 +327C +3A44 +567C +5200 +92EE +12AA +12AA +12EE +1200 +13FE +ENDCHAR +STARTCHAR uni6ADA +ENCODING 27354 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +28A2 +FFBE +28A2 +2FBE +6802 +79F2 +A912 +A9F2 +2842 +2BFA +2A0A +2BFA +2806 +ENDCHAR +STARTCHAR uni6ADB +ENCODING 27355 +BBX 15 15 1 -1 +BITMAP +2420 +2420 +27BE +F948 +2084 +27DE +6452 +77D2 +AC52 +A7D2 +2412 +2492 +2556 +2650 +2810 +ENDCHAR +STARTCHAR uni6ADC +ENCODING 27356 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0100 +1FF0 +1110 +FFFE +8922 +3638 +0FE0 +783E +0FE0 +0100 +FFFE +0920 +711C +ENDCHAR +STARTCHAR uni6ADD +ENCODING 27357 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +1020 +FDFC +1000 +13FE +3252 +3BFE +3504 +51FC +5104 +91FC +1088 +1306 +ENDCHAR +STARTCHAR uni6ADE +ENCODING 27358 +BBX 15 15 1 -1 +BITMAP +2220 +2238 +2448 +FD78 +2510 +227E +62A0 +75D2 +6E54 +A238 +A2D8 +2A94 +2AB2 +3250 +2230 +ENDCHAR +STARTCHAR uni6ADF +ENCODING 27359 +BBX 15 15 1 -1 +BITMAP +2488 +2508 +29F0 +FB34 +2528 +25E8 +6930 +7B24 +ADFA +A040 +2FFE +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni6AE0 +ENCODING 27360 +BBX 15 16 0 -2 +BITMAP +2020 +27FE +2410 +27D4 +FD4A +2484 +2502 +77DC +6C54 +A5E6 +A500 +25DC +2844 +2854 +3148 +2094 +ENDCHAR +STARTCHAR uni6AE1 +ENCODING 27361 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +23DE +2528 +F884 +2044 +23F8 +7050 +6FFC +A080 +A3F8 +2D08 +21F8 +2108 +21F8 +2108 +ENDCHAR +STARTCHAR uni6AE2 +ENCODING 27362 +BBX 15 16 0 -2 +BITMAP +2108 +27C8 +2548 +2FF0 +F55E +27E4 +2114 +77D4 +6D54 +A7D4 +A214 +2FC8 +2448 +2694 +2194 +2662 +ENDCHAR +STARTCHAR uni6AE3 +ENCODING 27363 +BBX 15 16 0 -2 +BITMAP +1108 +17FE +1108 +1410 +FAFE +1210 +307C +3854 +567C +5254 +927C +1210 +12FE +1210 +1510 +18FE +ENDCHAR +STARTCHAR uni6AE4 +ENCODING 27364 +BBX 15 15 1 -1 +BITMAP +2420 +2420 +27BE +F8C8 +2210 +2120 +6FFE +7000 +6784 +A6A4 +A5A4 +26A4 +25A4 +2484 +258C +ENDCHAR +STARTCHAR uni6AE5 +ENCODING 27365 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1244 +FBF4 +1244 +32EE +3A04 +56F4 +52AC +92E4 +1214 +12A4 +1474 +1594 +1808 +ENDCHAR +STARTCHAR uni6AE6 +ENCODING 27366 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1250 +13FE +FE52 +13FE +3200 +3BFE +5692 +5348 +923A +1240 +12FC +1548 +1430 +19CE +ENDCHAR +STARTCHAR uni6AE7 +ENCODING 27367 +BBX 15 15 1 -1 +BITMAP +2010 +2714 +207C +FF94 +2018 +277E +7014 +6F12 +603E +A062 +A7A2 +253E +2522 +2522 +273E +ENDCHAR +STARTCHAR uni6AE8 +ENCODING 27368 +BBX 15 15 1 -1 +BITMAP +2080 +20F0 +2080 +FFFC +2884 +2BF0 +6884 +7BFC +AA48 +ABF8 +2A48 +2FFC +3524 +2524 +2FFE +ENDCHAR +STARTCHAR uni6AE9 +ENCODING 27369 +BBX 15 16 0 -2 +BITMAP +13DE +1252 +13DE +1252 +FBDE +1242 +327A +3A8A +5712 +52DA +928A +12DA +128A +12FA +120A +1204 +ENDCHAR +STARTCHAR uni6AEA +ENCODING 27370 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2444 +FD98 +2488 +27FE +6488 +75DC +6EA8 +A420 +A53C +2920 +2120 +2120 +27FE +ENDCHAR +STARTCHAR uni6AEB +ENCODING 27371 +BBX 15 16 0 -2 +BITMAP +0020 +7F24 +10FC +2828 +4DFE +1620 +247C +4EC4 +157C +6444 +0C7C +0100 +7FFC +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni6AEC +ENCODING 27372 +BBX 15 15 1 -1 +BITMAP +2200 +227C +2FC4 +F57C +2544 +2544 +6FFC +6244 +7244 +AFFC +A228 +2728 +2AC8 +324A +2286 +ENDCHAR +STARTCHAR uni6AED +ENCODING 27373 +BBX 15 16 0 -2 +BITMAP +2F7E +2910 +2F50 +2950 +FF7E +2A28 +2B28 +7D4A +6886 +A7F8 +A408 +27F8 +2408 +27F8 +2000 +2FFE +ENDCHAR +STARTCHAR uni6AEE +ENCODING 27374 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +13AE +FEAA +12AA +33AE +3820 +57FE +5020 +93AE +12AA +12AA +13AE +1020 +13FE +ENDCHAR +STARTCHAR uni6AEF +ENCODING 27375 +BBX 15 16 0 -2 +BITMAP +2206 +2238 +2788 +2488 +F908 +27DE +2548 +7548 +6FDC +A55A +A568 +27E8 +2008 +2AA8 +2AA8 +2008 +ENDCHAR +STARTCHAR uni6AF0 +ENCODING 27376 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +2FFE +2000 +F7FC +24A4 +27FC +7248 +6950 +A208 +A444 +20A8 +2110 +2308 +2D46 +2180 +ENDCHAR +STARTCHAR uni6AF1 +ENCODING 27377 +BBX 15 15 1 -1 +BITMAP +1020 +5420 +7DFC +2888 +7C88 +4450 +7DFC +4020 +7DFC +4420 +7C20 +0100 +FFFE +0D60 +F11E +ENDCHAR +STARTCHAR uni6AF2 +ENCODING 27378 +BBX 15 15 1 -1 +BITMAP +2020 +2F3C +2144 +FD88 +267E +2252 +6FD2 +72FE +6B20 +A2D2 +A22C +22D8 +222C +22CA +2630 +ENDCHAR +STARTCHAR uni6AF3 +ENCODING 27379 +BBX 15 15 1 -1 +BITMAP +2220 +2220 +2FFE +F8A0 +253C +2FC4 +603C +77A0 +6CBC +A7A0 +A4BC +27A0 +24BC +24A2 +259E +ENDCHAR +STARTCHAR uni6AF4 +ENCODING 27380 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +27CE +2112 +F924 +27DE +2552 +755E +6FD2 +A11E +A392 +255E +2940 +2114 +2112 +2122 +ENDCHAR +STARTCHAR uni6AF5 +ENCODING 27381 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +10A8 +FC90 +11FE +3120 +3BFC +5520 +51FC +9120 +11FE +1100 +12A4 +1252 +1452 +ENDCHAR +STARTCHAR uni6AF6 +ENCODING 27382 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1222 +11FC +FC20 +10F8 +3020 +39FC +5420 +55FC +9154 +11FC +1040 +12A4 +128A +147A +ENDCHAR +STARTCHAR uni6AF7 +ENCODING 27383 +BBX 15 16 0 -2 +BITMAP +2080 +27FC +2404 +27BC +F8A0 +26BE +22A2 +77B6 +6AAA +A6AA +A0B6 +26A2 +22BE +27A0 +22A2 +267E +ENDCHAR +STARTCHAR uni6AF8 +ENCODING 27384 +BBX 15 16 0 -2 +BITMAP +2140 +226C +2244 +236C +FAA4 +23AC +22A4 +77FE +6908 +A244 +A5F2 +2040 +27FC +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni6AF9 +ENCODING 27385 +BBX 15 16 0 -2 +BITMAP +2110 +27FE +2150 +23F8 +F848 +27FE +2048 +73F8 +6D54 +A75C +A444 +27FC +2444 +275C +2554 +2954 +ENDCHAR +STARTCHAR uni6AFA +ENCODING 27386 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +FFFE +2842 +2B5A +6842 +7358 +A040 +A000 +2EEE +2AAA +2AAA +2AAA +2EEE +ENDCHAR +STARTCHAR uni6AFB +ENCODING 27387 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +24A4 +F7BC +24A4 +27BC +74A4 +77BC +AAA8 +A544 +2FFE +2208 +2790 +20F0 +270C +ENDCHAR +STARTCHAR uni6AFC +ENCODING 27388 +BBX 15 16 0 -2 +BITMAP +2148 +214C +22AA +F808 +27FE +2148 +7368 +694A +AB6A +A14C +236C +2148 +216A +239A +2026 +2042 +ENDCHAR +STARTCHAR uni6AFD +ENCODING 27389 +BBX 15 15 1 -1 +BITMAP +79FE +4A44 +4AFA +5010 +51FE +4804 +4BFE +4804 +51FC +4544 +48FA +0100 +FFFE +0D60 +F11E +ENDCHAR +STARTCHAR uni6AFE +ENCODING 27390 +BBX 15 16 0 -2 +BITMAP +2182 +2E3C +2088 +2A90 +F522 +243C +2788 +7A12 +6A3E +AF88 +A208 +2AAC +2AAA +2BCA +2EA8 +2090 +ENDCHAR +STARTCHAR uni6AFF +ENCODING 27391 +BBX 15 16 0 -2 +BITMAP +1088 +12AA +12DC +1488 +F954 +1222 +33FE +3A02 +54F8 +5088 +90F8 +1000 +11FC +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni6B00 +ENCODING 27392 +BBX 15 16 0 -2 +BITMAP +2040 +27FC +2000 +23B8 +FAA8 +23B8 +2110 +77FC +6910 +A7FC +A110 +2FFE +2128 +2310 +2D48 +2186 +ENDCHAR +STARTCHAR uni6B01 +ENCODING 27393 +BBX 15 16 0 -2 +BITMAP +2288 +2FE8 +2AA8 +2FE8 +FABE +2FE8 +3008 +6FDC +681A +ABE8 +A828 +2FC8 +2AA8 +2A48 +2B28 +3228 +ENDCHAR +STARTCHAR uni6B02 +ENCODING 27394 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +1412 +FAFE +1010 +34FE +3A92 +56FE +5092 +91FE +1292 +1604 +12FE +1244 +122C +ENDCHAR +STARTCHAR uni6B03 +ENCODING 27395 +BBX 15 16 0 -2 +BITMAP +11F0 +1210 +17FC +1204 +FBFC +1224 +33B8 +3A22 +55FE +5210 +97FC +1244 +13FC +10D0 +114A +163E +ENDCHAR +STARTCHAR uni6B04 +ENCODING 27396 +BBX 15 15 1 -1 +BITMAP +2FBE +28A2 +2FBE +F8A2 +2FBE +2842 +6BFA +7842 +A9F2 +A952 +29F2 +2952 +29F2 +2952 +2A4E +ENDCHAR +STARTCHAR uni6B05 +ENCODING 27397 +BBX 15 15 1 -1 +BITMAP +214C +2264 +234C +FA64 +232C +2224 +77FE +6A68 +65C4 +A842 +A3F8 +2040 +27FC +2040 +20C0 +ENDCHAR +STARTCHAR uni6B06 +ENCODING 27398 +BBX 15 16 0 -2 +BITMAP +2108 +2294 +23DE +26B4 +FBDE +2294 +23DE +7294 +6BDE +A210 +A7FC +2108 +2090 +2060 +2198 +2606 +ENDCHAR +STARTCHAR uni6B07 +ENCODING 27399 +BBX 15 16 0 -2 +BITMAP +13FC +1108 +11F8 +1108 +FDF8 +110E +37F8 +3808 +57FE +5294 +939C +1294 +139C +12D6 +17BC +1084 +ENDCHAR +STARTCHAR uni6B08 +ENCODING 27400 +BBX 15 16 0 -2 +BITMAP +1222 +13FE +1090 +11FE +FB10 +15FE +3110 +39FE +5510 +51FE +9100 +13FE +128A +1376 +1252 +1276 +ENDCHAR +STARTCHAR uni6B09 +ENCODING 27401 +BBX 15 16 0 -2 +BITMAP +2492 +2294 +2FFE +2110 +F7FC +2040 +23F8 +7040 +6FFE +A480 +A7BC +2494 +2794 +24C8 +2F94 +20A2 +ENDCHAR +STARTCHAR uni6B0A +ENCODING 27402 +BBX 15 15 1 -1 +BITMAP +2110 +2FFE +2110 +F7BC +24A4 +27BC +7110 +6A20 +67FE +AA20 +A3FC +2220 +23FC +2220 +23FE +ENDCHAR +STARTCHAR uni6B0B +ENCODING 27403 +BBX 15 15 1 -1 +BITMAP +27BC +24A4 +27BC +F4A4 +27BC +24A4 +67BC +6220 +77FE +AC40 +A7FC +2440 +27FC +2440 +27FE +ENDCHAR +STARTCHAR uni6B0C +ENCODING 27404 +BBX 15 16 0 -2 +BITMAP +2090 +2090 +27FE +2094 +F80A +21FE +2508 +77E8 +694A +A1EA +AF2A +25EA +254C +29EA +2216 +2462 +ENDCHAR +STARTCHAR uni6B0D +ENCODING 27405 +BBX 15 16 0 -2 +BITMAP +2108 +27FE +2128 +23FE +FA20 +27FC +2A20 +73FC +6A20 +A3FE +A080 +231C +2204 +239C +2204 +23FC +ENDCHAR +STARTCHAR uni6B0E +ENCODING 27406 +BBX 15 16 0 -2 +BITMAP +2288 +F93E +2288 +729C +A92A +2288 +FFFE +8002 +3E08 +22FE +3E08 +2248 +3E28 +2808 +2428 +3A10 +ENDCHAR +STARTCHAR uni6B0F +ENCODING 27407 +BBX 15 15 1 -1 +BITMAP +27FE +2492 +2492 +F7FE +2224 +2448 +68FE +6548 +727E +B4C8 +AF48 +227E +26C8 +3A48 +227E +ENDCHAR +STARTCHAR uni6B10 +ENCODING 27408 +BBX 15 15 1 -1 +BITMAP +2000 +27BE +2000 +FFBE +25AA +2040 +77FE +6C90 +67FE +A492 +A7FE +2510 +25DC +2912 +23CE +ENDCHAR +STARTCHAR uni6B11 +ENCODING 27409 +BBX 15 15 1 -1 +BITMAP +2528 +27BE +2108 +FFFE +2294 +2294 +77FE +6A04 +6BFC +A204 +A3FC +2204 +23FC +2108 +2606 +ENDCHAR +STARTCHAR uni6B12 +ENCODING 27410 +BBX 15 15 1 -1 +BITMAP +2008 +4390 +D034 +27C8 +5814 +EBBA +2008 +73AC +AAAA +2388 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni6B13 +ENCODING 27411 +BBX 15 16 0 -2 +BITMAP +2248 +2150 +27FC +2404 +F9F0 +2110 +27FC +7554 +6CE4 +A7FC +A040 +27FC +2040 +2FFE +22A4 +2452 +ENDCHAR +STARTCHAR uni6B14 +ENCODING 27412 +BBX 15 16 0 -2 +BITMAP +13DE +1252 +13DE +1252 +FBDE +10A0 +31FE +3B20 +55FC +5120 +91FE +1000 +11FC +1088 +1070 +178E +ENDCHAR +STARTCHAR uni6B15 +ENCODING 27413 +BBX 15 16 0 -2 +BITMAP +27BC +24A4 +27BC +2000 +F7FE +2400 +2590 +749E +6FD4 +A564 +A5D4 +2554 +25D4 +2568 +2BC8 +3054 +ENDCHAR +STARTCHAR uni6B16 +ENCODING 27414 +BBX 15 15 1 -1 +BITMAP +2020 +2FBE +2A40 +2FBC +F880 +2FFC +2A54 +6FFE +7408 +A7F8 +A408 +27F8 +2110 +2212 +2C0E +ENDCHAR +STARTCHAR uni6B17 +ENCODING 27415 +BBX 15 15 1 -1 +BITMAP +2110 +2FFE +2110 +FFBE +28A2 +2FBE +68A2 +6FBE +7842 +ABFA +A842 +29F2 +2952 +29F2 +2A5E +ENDCHAR +STARTCHAR uni6B18 +ENCODING 27416 +BBX 15 16 0 -2 +BITMAP +13FE +1202 +13FE +1292 +FE54 +1292 +32FE +3AAA +56FE +5322 +92FA +12AA +14FA +1422 +19FA +1004 +ENDCHAR +STARTCHAR uni6B19 +ENCODING 27417 +BBX 15 16 0 -2 +BITMAP +27FC +2444 +27FC +2444 +FFFE +2AAA +2FBE +7AAA +6FBE +A220 +A7C0 +2084 +2FFE +2042 +2548 +2884 +ENDCHAR +STARTCHAR uni6B1A +ENCODING 27418 +BBX 15 16 0 -2 +BITMAP +21F0 +2210 +23E0 +2020 +F7FC +2188 +2650 +71A8 +6E64 +A1A0 +A248 +2FBE +2AAA +2FBE +228A +2FBE +ENDCHAR +STARTCHAR uni6B1B +ENCODING 27419 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +FFFE +2842 +2B5A +7500 +6FFE +6522 +AFBE +AAA2 +2FBE +2222 +3FE2 +2226 +ENDCHAR +STARTCHAR uni6B1C +ENCODING 27420 +BBX 15 16 0 -2 +BITMAP +2040 +27FC +2248 +23F8 +F040 +2FFE +2AAA +73B8 +6910 +A7FC +A110 +2FFE +2128 +2310 +2D48 +2186 +ENDCHAR +STARTCHAR uni6B1D +ENCODING 27421 +BBX 15 15 1 -1 +BITMAP +2008 +2448 +FBBE +2448 +739C +AC6A +3FF8 +2448 +7FF8 +4208 +7EFE +4248 +7E28 +4408 +FA38 +ENDCHAR +STARTCHAR uni6B1E +ENCODING 27422 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2040 +FFFE +2842 +2B5A +7040 +6EEE +6AAA +AEEE +A000 +27FC +2248 +2554 +2FFE +ENDCHAR +STARTCHAR uni6B1F +ENCODING 27423 +BBX 15 15 1 -1 +BITMAP +2500 +3FFC +2524 +FFBC +2AA4 +2FA4 +753C +6FA4 +BA24 +AFBC +2A28 +2FA8 +2A2A +2FEA +2046 +ENDCHAR +STARTCHAR uni6B20 +ENCODING 27424 +BBX 13 15 2 -1 +BITMAP +1000 +1000 +1000 +3FF8 +2008 +4210 +8220 +0200 +0200 +0500 +0500 +0880 +1040 +2020 +C018 +ENDCHAR +STARTCHAR uni6B21 +ENCODING 27425 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +8200 +43FC +2404 +0488 +0890 +0080 +0080 +1080 +2140 +4140 +8220 +0C18 +3006 +ENDCHAR +STARTCHAR uni6B22 +ENCODING 27426 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +FC80 +04FC +0504 +4908 +2A40 +1440 +1040 +28A0 +24A0 +4510 +8110 +0208 +0404 +0802 +ENDCHAR +STARTCHAR uni6B23 +ENCODING 27427 +BBX 15 15 1 -1 +BITMAP +0480 +0880 +7080 +41FE +4104 +7E28 +4820 +4820 +4820 +4820 +4850 +4850 +8888 +8904 +0A02 +ENDCHAR +STARTCHAR uni6B24 +ENCODING 27428 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2020 +3F7E +2042 +4084 +4010 +7E10 +0210 +0210 +1A28 +E228 +4248 +0244 +1484 +0902 +ENDCHAR +STARTCHAR uni6B25 +ENCODING 27429 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F880 +88F8 +8908 +8910 +8A40 +F840 +8840 +88A0 +88A0 +88A0 +F910 +8910 +0208 +0404 +ENDCHAR +STARTCHAR uni6B26 +ENCODING 27430 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +1440 +147C +2284 +5288 +8920 +0820 +0020 +7E50 +0250 +0450 +0488 +0888 +0904 +0202 +ENDCHAR +STARTCHAR uni6B27 +ENCODING 27431 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FC40 +80FE +8502 +A524 +AA24 +9020 +9820 +A420 +C050 +8050 +FC88 +0104 +0202 +ENDCHAR +STARTCHAR uni6B28 +ENCODING 27432 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +4040 +7E7C +8284 +0288 +7B20 +4A20 +4A20 +4A50 +7A50 +4A50 +0288 +0288 +1504 +0A02 +ENDCHAR +STARTCHAR uni6B29 +ENCODING 27433 +BBX 15 16 0 -2 +BITMAP +0020 +7F20 +1120 +117E +2142 +2584 +4210 +8010 +3F10 +2110 +2128 +2128 +2128 +3F44 +2144 +0082 +ENDCHAR +STARTCHAR uni6B2A +ENCODING 27434 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +9220 +927E +9242 +9284 +FE10 +1010 +1010 +9210 +9228 +9228 +9E48 +F244 +0084 +0102 +ENDCHAR +STARTCHAR uni6B2B +ENCODING 27435 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +3F20 +487E +8842 +0884 +7F10 +0810 +0810 +2E10 +2828 +2828 +2F48 +F044 +4084 +0102 +ENDCHAR +STARTCHAR uni6B2C +ENCODING 27436 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +0820 +FF7E +1042 +2494 +4418 +2810 +1110 +2210 +C428 +0C28 +1244 +2144 +C082 +ENDCHAR +STARTCHAR uni6B2D +ENCODING 27437 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +8220 +927E +9242 +9284 +FE10 +9210 +9210 +AA10 +A628 +C228 +8248 +FE44 +8284 +0102 +ENDCHAR +STARTCHAR uni6B2E +ENCODING 27438 +BBX 15 16 0 -2 +BITMAP +4220 +2220 +2420 +FF7E +0842 +0884 +4910 +4910 +4910 +7F10 +0928 +1028 +1048 +2044 +4084 +8102 +ENDCHAR +STARTCHAR uni6B2F +ENCODING 27439 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +0840 +FEFE +0882 +0924 +0828 +7E20 +0020 +7E20 +4220 +4250 +4250 +4288 +7F06 +ENDCHAR +STARTCHAR uni6B30 +ENCODING 27440 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1020 +7F7E +5542 +5584 +5510 +5510 +5510 +5510 +5528 +5528 +57A8 +FC44 +0044 +0082 +ENDCHAR +STARTCHAR uni6B31 +ENCODING 27441 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2840 +247C +4284 +8088 +7D20 +0020 +0020 +7C50 +4450 +4450 +4488 +7C88 +4504 +0202 +ENDCHAR +STARTCHAR uni6B32 +ENCODING 27442 +BBX 15 15 1 -1 +BITMAP +0040 +4440 +4440 +82FE +9284 +1124 +2820 +4420 +8220 +7C20 +4450 +4448 +4488 +4484 +7D02 +ENDCHAR +STARTCHAR uni6B33 +ENCODING 27443 +BBX 14 16 1 -2 +BITMAP +1040 +1040 +1E40 +10FC +1084 +FF08 +AA20 +AA20 +AA20 +FE20 +AA50 +AA50 +AA50 +A288 +8A88 +8504 +ENDCHAR +STARTCHAR uni6B34 +ENCODING 27444 +BBX 14 16 1 -2 +BITMAP +2080 +1080 +FC80 +84F8 +8508 +FD10 +8640 +8440 +FC40 +80A0 +90A0 +88A0 +9510 +A510 +C208 +8404 +ENDCHAR +STARTCHAR uni6B35 +ENCODING 27445 +BBX 15 15 1 -1 +BITMAP +4040 +4640 +7840 +40FE +4282 +3F14 +4014 +7F10 +4810 +8810 +7F28 +0828 +1444 +2284 +C102 +ENDCHAR +STARTCHAR uni6B36 +ENCODING 27446 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFA0 +087E +0842 +7F84 +4910 +4910 +7F10 +0810 +1C28 +2A28 +4948 +8844 +0884 +0902 +ENDCHAR +STARTCHAR uni6B37 +ENCODING 27447 +BBX 15 15 1 -1 +BITMAP +2240 +1440 +0840 +147E +62C2 +0892 +FF94 +1010 +2810 +7F10 +A928 +2928 +2B44 +0844 +0882 +ENDCHAR +STARTCHAR uni6B38 +ENCODING 27448 +BBX 15 15 1 -1 +BITMAP +1040 +1240 +2640 +397E +E042 +2094 +7F14 +8810 +0810 +FFA8 +0828 +1428 +1244 +2144 +C082 +ENDCHAR +STARTCHAR uni6B39 +ENCODING 27449 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FE40 +28FE +4482 +8524 +0024 +FF20 +0420 +7420 +5450 +5450 +7488 +0484 +1D02 +ENDCHAR +STARTCHAR uni6B3A +ENCODING 27450 +BBX 15 15 1 -1 +BITMAP +2440 +2440 +7E40 +24FC +3C84 +2528 +2420 +3C20 +2420 +2420 +FF50 +1050 +2488 +4284 +8102 +ENDCHAR +STARTCHAR uni6B3B +ENCODING 27451 +BBX 15 16 0 -2 +BITMAP +1040 +5240 +5440 +907C +2884 +4488 +8320 +1020 +1020 +5250 +5450 +9050 +2888 +2488 +4304 +8202 +ENDCHAR +STARTCHAR uni6B3C +ENCODING 27452 +BBX 15 16 0 -2 +BITMAP +0020 +F720 +1120 +557E +2242 +5584 +8910 +1010 +0010 +F710 +1128 +5528 +2228 +5544 +8944 +1082 +ENDCHAR +STARTCHAR uni6B3D +ENCODING 27453 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +2480 +41FE +FD04 +1228 +1020 +FE20 +1020 +9420 +5450 +5050 +1E88 +3104 +C202 +ENDCHAR +STARTCHAR uni6B3E +ENCODING 27454 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FE40 +10FC +7C84 +00A8 +7D20 +0020 +FE20 +1020 +5450 +5250 +9288 +9104 +3202 +ENDCHAR +STARTCHAR uni6B3F +ENCODING 27455 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3E20 +227E +4442 +8084 +1010 +6610 +4210 +4210 +6628 +4228 +4248 +7E44 +4284 +0102 +ENDCHAR +STARTCHAR uni6B40 +ENCODING 27456 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7F20 +1C7E +2A42 +4984 +0010 +7E10 +0010 +FF10 +0828 +4A28 +4948 +8944 +2884 +1102 +ENDCHAR +STARTCHAR uni6B41 +ENCODING 27457 +BBX 15 16 0 -2 +BITMAP +2220 +2220 +FF20 +227E +3E42 +2284 +3E10 +2210 +2210 +FF10 +4028 +5428 +6248 +4044 +7E84 +0102 +ENDCHAR +STARTCHAR uni6B42 +ENCODING 27458 +BBX 15 16 0 -2 +BITMAP +1020 +9220 +9220 +927E +FE42 +0084 +FE10 +1010 +2010 +FE10 +AA28 +AA28 +AA28 +AA44 +AA44 +8682 +ENDCHAR +STARTCHAR uni6B43 +ENCODING 27459 +BBX 15 15 1 -1 +BITMAP +0E20 +7820 +0820 +087E +FF82 +0814 +2814 +6B10 +4910 +4928 +6B28 +4928 +4944 +7F44 +0082 +ENDCHAR +STARTCHAR uni6B44 +ENCODING 27460 +BBX 14 16 1 -2 +BITMAP +0040 +7C40 +4440 +44FC +7484 +5508 +5420 +FE20 +8220 +BA20 +AA50 +AA50 +BA50 +8288 +8A88 +8504 +ENDCHAR +STARTCHAR uni6B45 +ENCODING 27461 +BBX 15 16 0 -2 +BITMAP +0040 +FE40 +2840 +287C +FE84 +AA88 +AB20 +FE20 +1020 +1050 +FE50 +1050 +1088 +1E88 +F104 +4202 +ENDCHAR +STARTCHAR uni6B46 +ENCODING 27462 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FF20 +427E +2242 +2494 +FF14 +0010 +7E10 +4210 +4228 +7E28 +4244 +4244 +7E82 +ENDCHAR +STARTCHAR uni6B47 +ENCODING 27463 +BBX 15 15 1 -1 +BITMAP +0020 +7E20 +4220 +7E7E +4282 +4314 +7E10 +2010 +3F10 +4928 +C928 +5528 +6344 +7D44 +0282 +ENDCHAR +STARTCHAR uni6B48 +ENCODING 27464 +BBX 15 16 0 -2 +BITMAP +1020 +2820 +4420 +827E +7D42 +0084 +F110 +9510 +9510 +F510 +9528 +9528 +F528 +9144 +9544 +B282 +ENDCHAR +STARTCHAR uni6B49 +ENCODING 27465 +BBX 15 15 1 -1 +BITMAP +1210 +2410 +FF90 +143E +7F22 +154A +FF88 +1508 +7F08 +1408 +3614 +3614 +5514 +94A2 +1442 +ENDCHAR +STARTCHAR uni6B4A +ENCODING 27466 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFA0 +003E +3E42 +2254 +3E98 +0010 +7F10 +4110 +5D28 +5528 +5D44 +4144 +4382 +ENDCHAR +STARTCHAR uni6B4B +ENCODING 27467 +BBX 15 16 0 -2 +BITMAP +0320 +7C20 +4720 +447E +5F42 +5584 +5610 +5C10 +5510 +5310 +5028 +5728 +5548 +5544 +A984 +0102 +ENDCHAR +STARTCHAR uni6B4C +ENCODING 27468 +BBX 15 15 1 -1 +BITMAP +0040 +FF40 +0440 +747C +5484 +74A8 +0D20 +0020 +FF20 +0420 +7430 +5450 +7448 +0484 +0D02 +ENDCHAR +STARTCHAR uni6B4D +ENCODING 27469 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +7F20 +417E +4142 +7F84 +4010 +7FD0 +4010 +7F90 +00A8 +AAA8 +AAA8 +00C4 +0544 +0282 +ENDCHAR +STARTCHAR uni6B4E +ENCODING 27470 +BBX 15 15 1 -1 +BITMAP +2220 +FFA0 +2220 +3E3E +0842 +7F54 +4994 +7F10 +0810 +7F10 +0810 +FFA8 +1428 +2244 +C182 +ENDCHAR +STARTCHAR uni6B4F +ENCODING 27471 +BBX 15 16 0 -2 +BITMAP +2220 +2220 +FFA0 +227E +3E42 +0884 +7F10 +4910 +7F10 +0810 +7F28 +0828 +7F28 +0844 +0F44 +F082 +ENDCHAR +STARTCHAR uni6B50 +ENCODING 27472 +BBX 15 15 1 -1 +BITMAP +0020 +FF20 +8020 +9E3E +9242 +9254 +9E94 +8010 +BB90 +AA90 +AAA8 +BBA8 +8044 +FF44 +0082 +ENDCHAR +STARTCHAR uni6B51 +ENCODING 27473 +BBX 15 16 0 -2 +BITMAP +0410 +0790 +0410 +3FDE +2452 +2724 +3C88 +2388 +2088 +2F08 +3248 +2A94 +5FD4 +4214 +8A14 +0422 +ENDCHAR +STARTCHAR uni6B52 +ENCODING 27474 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +FE20 +447E +2842 +FE84 +8210 +9210 +FE10 +9210 +BA28 +AA28 +AA28 +BA44 +8244 +8682 +ENDCHAR +STARTCHAR uni6B53 +ENCODING 27475 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +7F20 +907E +1042 +FF94 +2514 +2810 +7F10 +C810 +7E10 +4828 +7E28 +4844 +7F82 +ENDCHAR +STARTCHAR uni6B54 +ENCODING 27476 +BBX 15 15 1 -1 +BITMAP +1020 +1E20 +1020 +7F7E +5142 +7C94 +5114 +4F10 +4010 +5410 +5510 +7728 +5428 +9744 +7882 +ENDCHAR +STARTCHAR uni6B55 +ENCODING 27477 +BBX 15 16 0 -2 +BITMAP +0820 +7F20 +0820 +223E +FFA2 +2244 +7F50 +4190 +7F10 +4110 +7F10 +4128 +7F28 +2244 +4144 +8082 +ENDCHAR +STARTCHAR uni6B56 +ENCODING 27478 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FF20 +087E +7E42 +0094 +7E14 +4210 +7E10 +2410 +FF28 +0028 +7E44 +4244 +7E82 +ENDCHAR +STARTCHAR uni6B57 +ENCODING 27479 +BBX 15 16 0 -2 +BITMAP +0410 +3F90 +0490 +7FDE +0492 +3FA4 +0408 +5548 +75C8 +4448 +7FC8 +4454 +75D4 +5554 +5554 +8462 +ENDCHAR +STARTCHAR uni6B58 +ENCODING 27480 +BBX 15 15 1 -1 +BITMAP +4920 +4920 +8A20 +947E +1442 +2294 +C118 +2210 +A290 +B690 +AB28 +2228 +5544 +4544 +8882 +ENDCHAR +STARTCHAR uni6B59 +ENCODING 27481 +BBX 15 15 1 -1 +BITMAP +0820 +1420 +2220 +DDBE +0042 +3E54 +2294 +3E10 +0010 +F790 +52A8 +94A8 +31A4 +D6C4 +3182 +ENDCHAR +STARTCHAR uni6B5A +ENCODING 27482 +BBX 14 16 1 -2 +BITMAP +2220 +1420 +FFA0 +083C +7F24 +0848 +FF90 +4910 +2A10 +FF90 +0010 +7F28 +4128 +4128 +7F28 +4144 +ENDCHAR +STARTCHAR uni6B5B +ENCODING 27483 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +1420 +227E +7D52 +8094 +7710 +5510 +5510 +7710 +0028 +2228 +2244 +5544 +9582 +ENDCHAR +STARTCHAR uni6B5C +ENCODING 27484 +BBX 15 16 0 -2 +BITMAP +0020 +7F20 +5520 +557E +7F42 +2084 +7F10 +9110 +7D10 +5510 +5528 +7D28 +1128 +7D44 +0544 +0282 +ENDCHAR +STARTCHAR uni6B5D +ENCODING 27485 +BBX 15 16 0 -2 +BITMAP +0020 +7F20 +5520 +7F7E +0842 +7F84 +0810 +FF90 +2210 +1410 +7F28 +0828 +FFA8 +0844 +0844 +0882 +ENDCHAR +STARTCHAR uni6B5E +ENCODING 27486 +BBX 14 16 1 -2 +BITMAP +0040 +FE40 +8240 +FEFC +8284 +FF08 +4420 +AA20 +EE20 +4420 +AA50 +EE50 +0050 +AA88 +AA88 +0104 +ENDCHAR +STARTCHAR uni6B5F +ENCODING 27487 +BBX 15 15 1 -1 +BITMAP +2820 +4B20 +4D20 +493E +6B42 +4D52 +5594 +7710 +5510 +5510 +FFA8 +0028 +2424 +4244 +8142 +ENDCHAR +STARTCHAR uni6B60 +ENCODING 27488 +BBX 15 15 1 -1 +BITMAP +FF20 +2220 +4C20 +B37E +FF42 +2294 +4C14 +B310 +FF10 +2828 +FF28 +A928 +FF44 +8144 +FF82 +ENDCHAR +STARTCHAR uni6B61 +ENCODING 27489 +BBX 15 15 1 -1 +BITMAP +2220 +FFA0 +2220 +773E +5542 +7754 +2490 +7F10 +C810 +7F28 +4828 +7F28 +4824 +7FC4 +0042 +ENDCHAR +STARTCHAR uni6B62 +ENCODING 27490 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +0100 +0100 +2100 +2100 +21F8 +2100 +2100 +2100 +2100 +2100 +2100 +2100 +FFFC +ENDCHAR +STARTCHAR uni6B63 +ENCODING 27491 +BBX 14 14 1 -1 +BITMAP +7FF8 +0100 +0100 +0100 +1100 +1100 +11F0 +1100 +1100 +1100 +1100 +1100 +1100 +FFFC +ENDCHAR +STARTCHAR uni6B64 +ENCODING 27492 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +4840 +4846 +4858 +4F60 +4840 +4840 +4840 +4840 +4840 +4840 +4F42 +7842 +C03E +ENDCHAR +STARTCHAR uni6B65 +ENCODING 27493 +BBX 15 15 1 -1 +BITMAP +0100 +1100 +11F0 +1100 +1100 +FFFE +0100 +0900 +1108 +2108 +C710 +0020 +0040 +0380 +3C00 +ENDCHAR +STARTCHAR uni6B66 +ENCODING 27494 +BBX 15 15 1 -1 +BITMAP +0050 +3C48 +0044 +0040 +FFFE +0040 +0440 +2440 +27A0 +2420 +2420 +2410 +2792 +3C0A +C004 +ENDCHAR +STARTCHAR uni6B67 +ENCODING 27495 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +5020 +5020 +5C20 +53FC +5104 +5104 +5088 +5050 +5020 +5C50 +7088 +C306 +ENDCHAR +STARTCHAR uni6B68 +ENCODING 27496 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +11F8 +1100 +1100 +1100 +FFFE +0000 +0100 +1100 +11F8 +1100 +1100 +2900 +47FE +8000 +ENDCHAR +STARTCHAR uni6B69 +ENCODING 27497 +BBX 15 15 1 -1 +BITMAP +0100 +1100 +11F0 +1100 +1100 +FFFE +0100 +0910 +1108 +2114 +C712 +0020 +0040 +0380 +7C00 +ENDCHAR +STARTCHAR uni6B6A +ENCODING 27498 +BBX 15 14 1 -1 +BITMAP +7FFE +0100 +0340 +0520 +1918 +E106 +0000 +3FF8 +0100 +1100 +11F0 +1100 +1100 +FFFE +ENDCHAR +STARTCHAR uni6B6B +ENCODING 27499 +BBX 15 15 0 -1 +BITMAP +0800 +08FE +0880 +0880 +4880 +4EFC +4884 +4884 +4884 +4884 +48FC +4E80 +5880 +E080 +00FE +ENDCHAR +STARTCHAR uni6B6C +ENCODING 27500 +BBX 15 15 1 -1 +BITMAP +0100 +11F8 +1100 +1100 +FFFE +0100 +1FF8 +1108 +1088 +1088 +FFFE +1108 +2108 +2108 +4038 +ENDCHAR +STARTCHAR uni6B6D +ENCODING 27501 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +5020 +5C20 +53FE +5008 +5008 +51FE +5008 +5C88 +7048 +C008 +0028 +0010 +ENDCHAR +STARTCHAR uni6B6E +ENCODING 27502 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +11F8 +1100 +1100 +FFFE +0000 +0810 +0810 +4890 +4E9C +4890 +4890 +4E90 +F1FE +ENDCHAR +STARTCHAR uni6B6F +ENCODING 27503 +BBX 14 15 1 -1 +BITMAP +0200 +2200 +23F0 +2200 +FFFC +4008 +4A48 +4A48 +4688 +5FE8 +4688 +4A48 +5228 +4008 +7FF8 +ENDCHAR +STARTCHAR uni6B70 +ENCODING 27504 +BBX 15 14 0 -1 +BITMAP +7EFC +1224 +52A4 +9324 +2244 +2A54 +4488 +0810 +0810 +4E9C +4890 +4890 +4E90 +F1FE +ENDCHAR +STARTCHAR uni6B71 +ENCODING 27505 +BBX 15 15 0 -1 +BITMAP +1008 +103C +11E0 +1020 +53FE +5C20 +51FC +5124 +51FC +5124 +51FC +5C20 +71FC +C020 +03FE +ENDCHAR +STARTCHAR uni6B72 +ENCODING 27506 +BBX 15 16 0 -2 +BITMAP +0080 +08FC +0880 +0880 +7FFE +0028 +0024 +3FFE +2020 +2FA4 +2224 +2A18 +2A90 +512A +4646 +9882 +ENDCHAR +STARTCHAR uni6B73 +ENCODING 27507 +BBX 15 15 1 -1 +BITMAP +0100 +1100 +11FC +1100 +FFFE +0048 +7FFC +4040 +5F44 +4424 +5528 +5510 +4432 +8C4A +8184 +ENDCHAR +STARTCHAR uni6B74 +ENCODING 27508 +BBX 15 14 1 -1 +BITMAP +7FFC +4410 +4410 +5F7E +4410 +4E38 +5556 +4410 +4080 +4880 +88FC +8880 +8880 +3FFE +ENDCHAR +STARTCHAR uni6B75 +ENCODING 27509 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +1020 +51FC +5C20 +53FE +5104 +51FC +5104 +51FC +5104 +5DFC +7088 +C306 +ENDCHAR +STARTCHAR uni6B76 +ENCODING 27510 +BBX 15 16 0 -2 +BITMAP +0844 +2F78 +2842 +2F3E +F000 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +3FF8 +2148 +2FE8 +2428 +2018 +ENDCHAR +STARTCHAR uni6B77 +ENCODING 27511 +BBX 15 14 1 -1 +BITMAP +7FFE +4104 +5E78 +4410 +7F7E +4410 +4E38 +7556 +4490 +8880 +88FC +8880 +0880 +7FFE +ENDCHAR +STARTCHAR uni6B78 +ENCODING 27512 +BBX 15 15 1 -1 +BITMAP +1000 +20F8 +7808 +4BFE +7808 +40F8 +7C00 +47FE +7C22 +11FC +5124 +5D24 +5124 +5D2C +E020 +ENDCHAR +STARTCHAR uni6B79 +ENCODING 27513 +BBX 12 14 2 -1 +BITMAP +FFF0 +0800 +0800 +1FC0 +1040 +3040 +4C40 +0280 +0080 +0100 +0200 +0400 +1800 +6000 +ENDCHAR +STARTCHAR uni6B7A +ENCODING 27514 +BBX 12 15 3 -1 +BITMAP +0200 +0200 +03F0 +0200 +1200 +1FE0 +2020 +E020 +1820 +0440 +0280 +0100 +0200 +0C00 +F000 +ENDCHAR +STARTCHAR uni6B7B +ENCODING 27515 +BBX 15 14 1 -1 +BITMAP +FFFC +2080 +2080 +3E80 +2284 +4298 +42E0 +A480 +1480 +0880 +0880 +1082 +2082 +C07E +ENDCHAR +STARTCHAR uni6B7C +ENCODING 27516 +BBX 15 16 0 -2 +BITMAP +0008 +003C +FDE0 +2020 +2020 +3C20 +4420 +47FE +6420 +9420 +0820 +0820 +1020 +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni6B7D +ENCODING 27517 +BBX 15 16 0 -2 +BITMAP +0008 +001C +FDE0 +2100 +2100 +3D00 +45FE +4510 +6510 +9510 +0910 +0910 +1110 +2210 +4210 +8410 +ENDCHAR +STARTCHAR uni6B7E +ENCODING 27518 +BBX 14 16 0 -2 +BITMAP +0080 +0080 +FC80 +20FC +2154 +3E54 +4454 +4494 +6494 +9524 +0A24 +0844 +1044 +2084 +4128 +8010 +ENDCHAR +STARTCHAR uni6B7F +ENCODING 27519 +BBX 15 15 1 -1 +BITMAP +0040 +FE40 +207C +2084 +3C84 +2504 +4438 +4400 +65FC +9C04 +0884 +0848 +1030 +20C8 +C306 +ENDCHAR +STARTCHAR uni6B80 +ENCODING 27520 +BBX 15 15 1 -1 +BITMAP +001C +FDE0 +2020 +2020 +3C20 +2420 +47FE +4420 +6420 +9C50 +0850 +0888 +1088 +2104 +C602 +ENDCHAR +STARTCHAR uni6B81 +ENCODING 27521 +BBX 15 14 1 -1 +BITMAP +FEF8 +2088 +2088 +3C88 +250E +2600 +4400 +65FC +9484 +0884 +0848 +1030 +20C8 +C306 +ENDCHAR +STARTCHAR uni6B82 +ENCODING 27522 +BBX 15 14 1 -1 +BITMAP +FEF8 +1088 +1088 +3C88 +24F8 +2488 +2488 +5488 +88F8 +0888 +1088 +1088 +2088 +C3FE +ENDCHAR +STARTCHAR uni6B83 +ENCODING 27523 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +2020 +21FC +3D24 +2524 +4524 +4524 +67FE +9C20 +0850 +0850 +1088 +2104 +C202 +ENDCHAR +STARTCHAR uni6B84 +ENCODING 27524 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +2050 +2050 +3C88 +2524 +4642 +4488 +6410 +9C60 +0802 +0804 +1008 +2030 +C1C0 +ENDCHAR +STARTCHAR uni6B85 +ENCODING 27525 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FD20 +2120 +21FC +3D20 +4620 +4420 +6420 +95FC +0820 +0820 +1020 +2020 +43FE +8000 +ENDCHAR +STARTCHAR uni6B86 +ENCODING 27526 +BBX 15 15 1 -1 +BITMAP +0040 +FC40 +2040 +2088 +3C84 +251C +47E2 +4402 +A400 +19FC +0904 +0904 +1104 +2104 +C1FC +ENDCHAR +STARTCHAR uni6B87 +ENCODING 27527 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +FCFE +2100 +22F8 +3C10 +4420 +4440 +65FC +9494 +0894 +0924 +1224 +2444 +40A8 +8110 +ENDCHAR +STARTCHAR uni6B88 +ENCODING 27528 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC40 +2080 +21FC +3D54 +4554 +4554 +6554 +9554 +0954 +0954 +1154 +2154 +43FE +8000 +ENDCHAR +STARTCHAR uni6B89 +ENCODING 27529 +BBX 15 15 1 -1 +BITMAP +0080 +FE80 +20FE +2102 +3E02 +24F2 +2492 +6492 +54F2 +8892 +0892 +10F2 +1004 +2004 +4038 +ENDCHAR +STARTCHAR uni6B8A +ENCODING 27530 +BBX 15 15 1 -1 +BITMAP +0020 +FD20 +2120 +21FC +7A20 +4A20 +4820 +CBFE +3020 +1070 +10A8 +2124 +4622 +8020 +0020 +ENDCHAR +STARTCHAR uni6B8B +ENCODING 27531 +BBX 15 15 1 -1 +BITMAP +0050 +FE48 +23FC +2040 +3C40 +27FC +4440 +4440 +67FE +9C44 +0828 +0830 +1052 +218A +C604 +ENDCHAR +STARTCHAR uni6B8C +ENCODING 27532 +BBX 15 15 0 -2 +BITMAP +03FC +F800 +2124 +2248 +3C90 +4A48 +4924 +6800 +9BFC +0840 +1040 +1040 +2040 +47FE +8000 +ENDCHAR +STARTCHAR uni6B8D +ENCODING 27533 +BBX 15 15 1 -1 +BITMAP +0018 +FEE4 +2122 +2212 +3E10 +25FC +4418 +4420 +6420 +9FFE +0820 +0820 +1020 +2020 +C0E0 +ENDCHAR +STARTCHAR uni6B8E +ENCODING 27534 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC20 +23FE +2020 +3C20 +4524 +4524 +6524 +96AA +0820 +0850 +1050 +2088 +4104 +8202 +ENDCHAR +STARTCHAR uni6B8F +ENCODING 27535 +BBX 15 16 0 -2 +BITMAP +0028 +0024 +FC24 +2020 +23FE +3C20 +4520 +44B2 +64B4 +9468 +08A8 +0924 +1222 +2020 +40A0 +8040 +ENDCHAR +STARTCHAR uni6B90 +ENCODING 27536 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FDFE +2020 +2020 +3DFC +4524 +4524 +65FC +9420 +0870 +08A8 +1124 +2222 +4020 +8020 +ENDCHAR +STARTCHAR uni6B91 +ENCODING 27537 +BBX 15 16 0 -2 +BITMAP +0020 +FC20 +23FE +2020 +2020 +3DFC +4504 +4504 +6504 +95FC +0850 +0850 +1092 +2092 +4112 +820E +ENDCHAR +STARTCHAR uni6B92 +ENCODING 27538 +BBX 14 15 0 -2 +BITMAP +00F8 +FC88 +2088 +20F8 +3C00 +45FC +4504 +6524 +9524 +0924 +0924 +1050 +2048 +4084 +8304 +ENDCHAR +STARTCHAR uni6B93 +ENCODING 27539 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +2050 +2088 +3D04 +46FA +4400 +6444 +9424 +0924 +08A8 +1088 +2010 +43FE +8000 +ENDCHAR +STARTCHAR uni6B94 +ENCODING 27540 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +F9FC +2024 +2024 +3BFE +4824 +4824 +69FC +9A22 +0974 +10A8 +1124 +2222 +40A0 +8040 +ENDCHAR +STARTCHAR uni6B95 +ENCODING 27541 +BBX 15 15 1 -1 +BITMAP +0040 +FC40 +2040 +23FC +3D08 +2488 +4490 +47FE +6400 +9DF8 +0908 +0908 +1108 +2108 +C1F8 +ENDCHAR +STARTCHAR uni6B96 +ENCODING 27542 +BBX 15 15 1 -1 +BITMAP +0010 +FC10 +23FE +2020 +78FC +4A84 +4AFC +4A84 +AA84 +1AFC +1284 +1284 +22FC +4200 +83FE +ENDCHAR +STARTCHAR uni6B97 +ENCODING 27543 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +FBFC +2110 +2248 +3C46 +4BF8 +4A48 +6A48 +9BF8 +0A48 +1248 +13F8 +2042 +4042 +803E +ENDCHAR +STARTCHAR uni6B98 +ENCODING 27544 +BBX 15 15 1 -1 +BITMAP +0090 +FE88 +207C +23C0 +3C2C +2432 +45CA +4494 +6488 +9C7C +0BC0 +082C +1032 +20CA +C304 +ENDCHAR +STARTCHAR uni6B99 +ENCODING 27545 +BBX 15 16 0 -2 +BITMAP +001C +03E0 +FA20 +23FE +2220 +3A92 +4B0A +4A06 +69FC +9904 +0904 +11FC +1104 +2104 +41FC +8104 +ENDCHAR +STARTCHAR uni6B9A +ENCODING 27546 +BBX 15 16 0 -2 +BITMAP +0104 +0088 +FC50 +21FC +2124 +3D24 +45FC +4524 +6524 +95FC +0820 +0820 +13FE +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni6B9B +ENCODING 27547 +BBX 15 14 1 -1 +BITMAP +FBFC +2080 +2080 +39E0 +2820 +4BBE +4AA2 +AAAA +1AA4 +13AC +1052 +21C0 +4000 +8FFE +ENDCHAR +STARTCHAR uni6B9C +ENCODING 27548 +BBX 15 16 0 -2 +BITMAP +0048 +0148 +FD48 +23FE +2148 +3D48 +4578 +4500 +65FE +9420 +0BFE +0870 +10A8 +2124 +4622 +8020 +ENDCHAR +STARTCHAR uni6B9D +ENCODING 27549 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FBFE +2020 +21FC +3840 +4BFE +4888 +6934 +9AE2 +0820 +11FC +1070 +20AC +4322 +8020 +ENDCHAR +STARTCHAR uni6B9E +ENCODING 27550 +BBX 15 14 1 -1 +BITMAP +FDFC +2104 +2104 +3DFC +2400 +45FC +4504 +65FC +9D04 +09FC +0904 +11FC +2088 +C306 +ENDCHAR +STARTCHAR uni6B9F +ENCODING 27551 +BBX 15 15 0 -2 +BITMAP +01F8 +FD08 +2108 +21F8 +3D08 +4508 +45F8 +6400 +97FC +0A94 +0A94 +1294 +2294 +47FE +8000 +ENDCHAR +STARTCHAR uni6BA0 +ENCODING 27552 +BBX 15 16 0 -2 +BITMAP +0020 +0040 +FDFC +2104 +21FC +3D04 +45FC +4504 +65FC +9428 +0824 +0BFE +1050 +2088 +4104 +8602 +ENDCHAR +STARTCHAR uni6BA1 +ENCODING 27553 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2414 +39E0 +4900 +4900 +69FC +9910 +0910 +17FE +1000 +2090 +4108 +8204 +ENDCHAR +STARTCHAR uni6BA2 +ENCODING 27554 +BBX 15 16 0 -2 +BITMAP +0154 +0154 +FBFE +2154 +2154 +3A72 +4C00 +4BFE +6A22 +9820 +09FC +1124 +1124 +2124 +412C +8020 +ENDCHAR +STARTCHAR uni6BA3 +ENCODING 27555 +BBX 15 16 0 -2 +BITMAP +0088 +FC88 +23FE +2088 +20F8 +3C20 +45FC +4524 +65FC +9420 +0BFE +0820 +11FC +2020 +43FE +8000 +ENDCHAR +STARTCHAR uni6BA4 +ENCODING 27556 +BBX 15 15 1 -1 +BITMAP +0080 +FDFC +2200 +20F8 +3C88 +24F8 +4488 +44F8 +6400 +9FFE +0880 +09FE +124A +2192 +C06C +ENDCHAR +STARTCHAR uni6BA5 +ENCODING 27557 +BBX 15 16 0 -2 +BITMAP +0040 +FC20 +23FE +2202 +2000 +3DFC +4420 +45FC +6524 +95FC +0924 +09FC +1000 +2088 +4104 +8202 +ENDCHAR +STARTCHAR uni6BA6 +ENCODING 27558 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +FDFC +2104 +21FC +3D04 +45FC +4500 +65FE +9500 +09FE +0802 +12AA +22AA +4202 +800C +ENDCHAR +STARTCHAR uni6BA7 +ENCODING 27559 +BBX 15 16 0 -2 +BITMAP +0214 +0112 +FBD2 +2010 +203E +3BD0 +4A50 +4A50 +6BD0 +9928 +0BA8 +1368 +1528 +212A +452A +8246 +ENDCHAR +STARTCHAR uni6BA8 +ENCODING 27560 +BBX 15 16 0 -2 +BITMAP +0020 +01FC +FD24 +21FC +2020 +3FFE +4400 +45FC +6504 +95FC +0904 +09FC +1104 +21FC +4088 +8104 +ENDCHAR +STARTCHAR uni6BA9 +ENCODING 27561 +BBX 15 15 1 -1 +BITMAP +0100 +F9DE +2102 +23D4 +3A48 +2D54 +48A2 +4B00 +A924 +18A8 +17FE +10A8 +2124 +4222 +8020 +ENDCHAR +STARTCHAR uni6BAA +ENCODING 27562 +BBX 15 15 1 -1 +BITMAP +0020 +FBFE +2020 +21FC +3800 +4BFE +4A02 +4AFA +6800 +99FC +1104 +11FC +2088 +4050 +83FE +ENDCHAR +STARTCHAR uni6BAB +ENCODING 27563 +BBX 15 14 1 -1 +BITMAP +FDDC +2154 +21DC +3C00 +25FC +4524 +45FC +6524 +9D24 +09FC +0820 +13FE +2020 +C020 +ENDCHAR +STARTCHAR uni6BAC +ENCODING 27564 +BBX 15 15 0 -2 +BITMAP +01FC +FD54 +21FC +2020 +3DFC +4420 +47FE +6488 +9450 +09FC +0820 +13FE +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni6BAD +ENCODING 27565 +BBX 15 14 1 -1 +BITMAP +FBFE +2000 +21FC +3924 +29FC +4924 +4BFE +A800 +19FC +1124 +11FC +2124 +4124 +83FE +ENDCHAR +STARTCHAR uni6BAE +ENCODING 27566 +BBX 15 15 1 -1 +BITMAP +0020 +FC50 +2088 +2104 +3A02 +28F8 +4800 +4BBC +AAA4 +1AA4 +13BC +1108 +2188 +4254 +8422 +ENDCHAR +STARTCHAR uni6BAF +ENCODING 27567 +BBX 15 15 1 -1 +BITMAP +0020 +FBFE +2202 +21FC +3CA8 +2736 +44FC +4784 +64FC +9C84 +08FC +0884 +10FC +2048 +C186 +ENDCHAR +STARTCHAR uni6BB0 +ENCODING 27568 +BBX 15 16 0 -2 +BITMAP +0020 +03FE +F820 +21FC +2000 +3BFE +4A52 +4BFE +6904 +99FC +0904 +11FC +1104 +21FC +4088 +8104 +ENDCHAR +STARTCHAR uni6BB1 +ENCODING 27569 +BBX 15 15 1 -1 +BITMAP +0110 +F114 +47D4 +4112 +7110 +5FFE +52D0 +5694 +D2D4 +3694 +22D4 +2688 +43DA +4E2A +8044 +ENDCHAR +STARTCHAR uni6BB2 +ENCODING 27570 +BBX 15 15 1 -1 +BITMAP +0450 +F454 +4AB4 +4AB2 +7010 +5FFE +52D0 +5694 +D2D4 +3694 +22D4 +2688 +43DA +4E2A +8044 +ENDCHAR +STARTCHAR uni6BB3 +ENCODING 27571 +BBX 15 14 1 -1 +BITMAP +0FC0 +0840 +0840 +0840 +107C +2000 +4000 +3FF0 +0810 +0820 +0440 +0380 +0CE0 +F01E +ENDCHAR +STARTCHAR uni6BB4 +ENCODING 27572 +BBX 15 14 1 -1 +BITMAP +00F8 +F888 +8088 +848A +A706 +A800 +91FC +9804 +A484 +C088 +8050 +FC20 +00D8 +0306 +ENDCHAR +STARTCHAR uni6BB5 +ENCODING 27573 +BBX 15 15 1 -1 +BITMAP +0C00 +71F0 +4110 +4110 +7910 +461E +4000 +7BF8 +4108 +4108 +4090 +78A0 +C060 +4198 +4606 +ENDCHAR +STARTCHAR uni6BB6 +ENCODING 27574 +BBX 15 16 0 -2 +BITMAP +1000 +0878 +0048 +7F48 +0848 +0886 +0800 +7EFC +0844 +0844 +0828 +0828 +0F10 +F028 +4044 +0182 +ENDCHAR +STARTCHAR uni6BB7 +ENCODING 27575 +BBX 15 15 1 -1 +BITMAP +0C00 +70F8 +4088 +7C88 +4508 +7E0E +4400 +7DFC +4084 +7C88 +4450 +4420 +4450 +8488 +9B06 +ENDCHAR +STARTCHAR uni6BB8 +ENCODING 27576 +BBX 15 16 0 -2 +BITMAP +0800 +0878 +7F48 +0848 +0848 +3E86 +0000 +3EFC +2A44 +2A44 +3E28 +2028 +2010 +4028 +4044 +8182 +ENDCHAR +STARTCHAR uni6BB9 +ENCODING 27577 +BBX 14 15 1 -2 +BITMAP +FEF0 +9090 +9090 +BE90 +C90C +8800 +89F8 +FE88 +8888 +9450 +A250 +C020 +8050 +FC88 +0304 +ENDCHAR +STARTCHAR uni6BBA +ENCODING 27578 +BBX 15 15 1 -1 +BITMAP +0400 +44F0 +2890 +1090 +2D12 +D21E +1000 +FDF8 +1088 +3888 +3450 +5420 +9050 +1088 +1306 +ENDCHAR +STARTCHAR uni6BBB +ENCODING 27579 +BBX 15 15 1 -1 +BITMAP +1000 +1078 +FE48 +1048 +7C48 +008E +FE00 +82FC +BA44 +2844 +2828 +2A10 +4C30 +4848 +8186 +ENDCHAR +STARTCHAR uni6BBC +ENCODING 27580 +BBX 15 15 1 -1 +BITMAP +1000 +1078 +FE48 +1048 +7C48 +008E +FE00 +82FC +7C44 +0044 +7C28 +4410 +4528 +4644 +8482 +ENDCHAR +STARTCHAR uni6BBD +ENCODING 27581 +BBX 15 15 1 -1 +BITMAP +0100 +6678 +1848 +6748 +0848 +FF8E +1000 +3EFC +6244 +BE44 +2228 +3E28 +2210 +2228 +26C6 +ENDCHAR +STARTCHAR uni6BBE +ENCODING 27582 +BBX 15 15 1 -1 +BITMAP +1100 +1178 +7F48 +1248 +1248 +148E +FF00 +14FC +2244 +7E44 +A228 +3E28 +2210 +2228 +3EC6 +ENDCHAR +STARTCHAR uni6BBF +ENCODING 27583 +BBX 15 14 1 -1 +BITMAP +7E78 +4248 +7E48 +544A +5486 +7E00 +54FC +5444 +5444 +7F28 +9010 +9428 +2244 +4282 +ENDCHAR +STARTCHAR uni6BC0 +ENCODING 27584 +BBX 15 15 1 -1 +BITMAP +1000 +6678 +4248 +4248 +6E48 +428E +4200 +7EFC +0044 +1044 +7E28 +1028 +1010 +1E28 +E0C6 +ENDCHAR +STARTCHAR uni6BC1 +ENCODING 27585 +BBX 15 16 0 -2 +BITMAP +2000 +CE78 +8248 +8248 +EE48 +8286 +8200 +FEFC +0044 +0044 +FE28 +1028 +1010 +1E28 +F044 +4182 +ENDCHAR +STARTCHAR uni6BC2 +ENCODING 27586 +BBX 15 16 0 -2 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FE86 +8200 +10FC +7C44 +2044 +5028 +7C28 +1010 +FE28 +1044 +1182 +ENDCHAR +STARTCHAR uni6BC3 +ENCODING 27587 +BBX 15 16 0 -2 +BITMAP +2000 +1078 +FE48 +0048 +7C48 +4486 +7C00 +00FC +FE44 +8244 +BA28 +AA28 +BA10 +8228 +8A44 +8582 +ENDCHAR +STARTCHAR uni6BC4 +ENCODING 27588 +BBX 15 16 0 -2 +BITMAP +1000 +7E78 +1048 +7E48 +5248 +7E86 +5200 +7EFC +1044 +FF44 +1028 +7E28 +4210 +4228 +7E44 +4382 +ENDCHAR +STARTCHAR uni6BC5 +ENCODING 27589 +BBX 15 15 1 -1 +BITMAP +0800 +0878 +7F48 +2248 +1448 +FF88 +3106 +CA00 +3CFC +C844 +1C44 +2A28 +C910 +0868 +3186 +ENDCHAR +STARTCHAR uni6BC6 +ENCODING 27590 +BBX 15 14 1 -1 +BITMAP +FF78 +8048 +9E48 +9248 +928E +9E00 +807C +BBA4 +AAA4 +AAA8 +AAA8 +BB90 +8028 +FF46 +ENDCHAR +STARTCHAR uni6BC7 +ENCODING 27591 +BBX 15 15 1 -1 +BITMAP +3000 +C678 +8248 +EE48 +8248 +828E +FF00 +92FC +5444 +3844 +FE28 +3028 +5410 +5228 +92C6 +ENDCHAR +STARTCHAR uni6BC8 +ENCODING 27592 +BBX 15 15 1 -1 +BITMAP +1020 +205C +CE94 +AA94 +AA94 +AAD4 +EEA6 +AA80 +AAFE +AAA2 +EAA2 +2ED4 +4988 +4894 +88A2 +ENDCHAR +STARTCHAR uni6BC9 +ENCODING 27593 +BBX 15 15 1 -1 +BITMAP +7F78 +4848 +4E4E +5480 +7F7C +4A28 +5110 +7F6C +0000 +7FFC +1110 +1110 +2928 +4544 +FFFE +ENDCHAR +STARTCHAR uni6BCA +ENCODING 27594 +BBX 15 16 0 -2 +BITMAP +0878 +FF48 +0886 +3E78 +2A48 +3E30 +4048 +9FF4 +0200 +FFFE +0820 +3FF8 +D016 +1390 +1290 +13B0 +ENDCHAR +STARTCHAR uni6BCB +ENCODING 27595 +BBX 15 14 1 -1 +BITMAP +1FF8 +1088 +1088 +1088 +1088 +FFFE +2108 +2108 +2108 +2108 +2108 +3FFE +0010 +0070 +ENDCHAR +STARTCHAR uni6BCC +ENCODING 27596 +BBX 15 15 0 -2 +BITMAP +1FF0 +1110 +1110 +1110 +1110 +1110 +FFFE +2210 +2210 +2210 +2210 +2210 +3FF0 +0010 +0010 +ENDCHAR +STARTCHAR uni6BCD +ENCODING 27597 +BBX 15 14 1 -1 +BITMAP +1FF8 +1008 +1188 +1048 +1008 +FFFE +2008 +2308 +2088 +2048 +2008 +3FFE +0010 +0070 +ENDCHAR +STARTCHAR uni6BCE +ENCODING 27598 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +1FFC +2000 +4FF0 +0890 +0890 +0890 +FFFE +1110 +1110 +1110 +1FFC +0020 +00E0 +ENDCHAR +STARTCHAR uni6BCF +ENCODING 27599 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +1FFC +2000 +CFF0 +0810 +0910 +0890 +FFFE +1010 +1210 +1110 +1FFC +0020 +00E0 +ENDCHAR +STARTCHAR uni6BD0 +ENCODING 27600 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +0000 +1FF0 +1110 +1110 +FFFE +2110 +2210 +3FFC +0410 +0850 +1020 +ENDCHAR +STARTCHAR uni6BD1 +ENCODING 27601 +BBX 15 16 0 -2 +BITMAP +0010 +3E50 +2250 +325C +2A74 +22D4 +2254 +FF54 +4254 +525C +4A50 +4250 +7F42 +0242 +143E +0800 +ENDCHAR +STARTCHAR uni6BD2 +ENCODING 27602 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0100 +3FF8 +0100 +FFFE +0000 +1FF8 +1108 +FFFE +2108 +2108 +3FFC +0010 +0070 +ENDCHAR +STARTCHAR uni6BD3 +ENCODING 27603 +BBX 15 15 1 -1 +BITMAP +2010 +2010 +7EFE +8020 +3E24 +2A4C +2AF2 +2200 +FFA8 +52A8 +52A8 +4AA8 +7EA8 +04AA +1D06 +ENDCHAR +STARTCHAR uni6BD4 +ENCODING 27604 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +208C +3EB0 +20C0 +2080 +2080 +2080 +2080 +2080 +2080 +2682 +3882 +E07E +ENDCHAR +STARTCHAR uni6BD5 +ENCODING 27605 +BBX 15 16 0 -2 +BITMAP +2080 +2088 +20B0 +3EC0 +2080 +2084 +2684 +387C +2100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni6BD6 +ENCODING 27606 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +204C +3E70 +2040 +2042 +3E42 +E03E +0300 +00A0 +2448 +2484 +4502 +8608 +39F8 +ENDCHAR +STARTCHAR uni6BD7 +ENCODING 27607 +BBX 15 15 1 -1 +BITMAP +0220 +0220 +FA20 +AA20 +AA24 +ABB8 +AA20 +FA20 +AA20 +AA20 +AA20 +AA20 +FA22 +03A2 +0E1E +ENDCHAR +STARTCHAR uni6BD8 +ENCODING 27608 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0040 +204C +3C70 +2040 +2042 +3E42 +E03E +ENDCHAR +STARTCHAR uni6BD9 +ENCODING 27609 +BBX 15 16 0 -2 +BITMAP +4100 +4118 +7DE0 +4104 +4D04 +70FC +0000 +FFFE +1080 +1088 +3E90 +42E0 +1480 +0884 +3084 +C07C +ENDCHAR +STARTCHAR uni6BDA +ENCODING 27610 +BBX 15 15 1 -1 +BITMAP +0FC0 +1080 +FFF8 +2008 +3FF8 +1080 +1EF8 +1082 +FFFE +0840 +7FF8 +2108 +3FF8 +0C92 +F07E +ENDCHAR +STARTCHAR uni6BDB +ENCODING 27611 +BBX 15 15 1 -1 +BITMAP +00F0 +3F00 +0200 +0200 +7FFC +0200 +0200 +0200 +FFFE +0200 +0200 +0200 +0202 +0202 +01FE +ENDCHAR +STARTCHAR uni6BDC +ENCODING 27612 +BBX 15 15 0 -1 +BITMAP +0820 +1C20 +7020 +1020 +10A8 +1CA4 +7124 +1122 +1222 +1C20 +F020 +10A2 +1042 +1002 +0FFE +ENDCHAR +STARTCHAR uni6BDD +ENCODING 27613 +BBX 15 15 0 -1 +BITMAP +0804 +1C08 +7030 +11C0 +1004 +1C08 +7030 +11C0 +1004 +1C08 +F030 +11C2 +1002 +1002 +0FFE +ENDCHAR +STARTCHAR uni6BDE +ENCODING 27614 +BBX 14 16 1 -2 +BITMAP +4100 +4110 +4160 +7D80 +4108 +4108 +4CF8 +7000 +01E0 +7E00 +03E0 +7E00 +03F0 +FE04 +0204 +01FC +ENDCHAR +STARTCHAR uni6BDF +ENCODING 27615 +BBX 15 15 1 -1 +BITMAP +0100 +0920 +1118 +2106 +C730 +00C0 +0F00 +F070 +0780 +0100 +3FF8 +0100 +7FFC +0102 +00FE +ENDCHAR +STARTCHAR uni6BE0 +ENCODING 27616 +BBX 14 16 1 -2 +BITMAP +1000 +1000 +FEF8 +1288 +2288 +2288 +4AF8 +8400 +01E0 +7E00 +03E0 +7E00 +03F0 +FE04 +0204 +01FC +ENDCHAR +STARTCHAR uni6BE1 +ENCODING 27617 +BBX 15 15 0 -1 +BITMAP +0840 +1C40 +7040 +107C +1040 +1C40 +7040 +11F8 +1108 +1D08 +F108 +11FA +110A +1002 +0FFE +ENDCHAR +STARTCHAR uni6BE2 +ENCODING 27618 +BBX 15 16 0 -2 +BITMAP +1000 +3BF8 +E0A0 +20A0 +23F8 +3AA8 +E2A8 +22A8 +22B8 +3B08 +E208 +23F8 +220A +2002 +2002 +1FFE +ENDCHAR +STARTCHAR uni6BE3 +ENCODING 27619 +BBX 14 15 1 -2 +BITMAP +FDF8 +4488 +2448 +0C18 +3468 +C588 +0000 +01E0 +7E00 +03E0 +7E00 +03F0 +FE04 +0204 +01FC +ENDCHAR +STARTCHAR uni6BE4 +ENCODING 27620 +BBX 15 16 0 -2 +BITMAP +2818 +24E0 +4220 +9238 +10E0 +2020 +443C +FEE0 +0222 +2422 +241E +2400 +2402 +4402 +43FE +8000 +ENDCHAR +STARTCHAR uni6BE5 +ENCODING 27621 +BBX 15 16 0 -2 +BITMAP +1100 +3900 +E1FC +2204 +2404 +3BE4 +E224 +23E4 +2224 +3A24 +E3E4 +2004 +202A +2012 +2002 +1FFE +ENDCHAR +STARTCHAR uni6BE6 +ENCODING 27622 +BBX 15 15 1 -1 +BITMAP +001C +FEE0 +4420 +4420 +7C3C +44E0 +4420 +7C20 +443E +45E0 +4420 +7C20 +C422 +0422 +041E +ENDCHAR +STARTCHAR uni6BE7 +ENCODING 27623 +BBX 15 15 1 -1 +BITMAP +1814 +E012 +2010 +23FE +2010 +3892 +E092 +23F4 +2094 +3888 +E11A +212A +2244 +2000 +1FFE +ENDCHAR +STARTCHAR uni6BE8 +ENCODING 27624 +BBX 15 15 0 -1 +BITMAP +0820 +1CA0 +70FC +1120 +1020 +1DFE +7050 +1050 +1090 +1C92 +F112 +120E +1000 +1002 +0FFE +ENDCHAR +STARTCHAR uni6BE9 +ENCODING 27625 +BBX 15 15 0 -1 +BITMAP +0820 +1C20 +7124 +10A4 +10A8 +1C20 +73FE +1020 +1070 +1CA8 +F124 +1222 +1020 +1002 +0FFE +ENDCHAR +STARTCHAR uni6BEA +ENCODING 27626 +BBX 15 16 0 -2 +BITMAP +1040 +3840 +E090 +2108 +23FC +3824 +E120 +21FC +2120 +3A20 +E7FE +2020 +2022 +2022 +2022 +1FFE +ENDCHAR +STARTCHAR uni6BEB +ENCODING 27627 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +FFF8 +0000 +1FC0 +1040 +FFF8 +8008 +9FC8 +0200 +7FF0 +0200 +FFF8 +0204 +01FC +ENDCHAR +STARTCHAR uni6BEC +ENCODING 27628 +BBX 15 15 1 -1 +BITMAP +0C50 +3050 +E048 +27FC +2040 +FA48 +2150 +2150 +2060 +F960 +2250 +244C +20C2 +2002 +1FFE +ENDCHAR +STARTCHAR uni6BED +ENCODING 27629 +BBX 15 16 0 -2 +BITMAP +0008 +FF1C +00E0 +0020 +7E20 +423C +42E0 +4220 +7E20 +003C +42E0 +2222 +2422 +0F22 +F01E +4000 +ENDCHAR +STARTCHAR uni6BEE +ENCODING 27630 +BBX 15 15 1 -1 +BITMAP +2040 +2248 +2248 +24C4 +F812 +2060 +2780 +2038 +33C0 +E07C +27C0 +207E +2FC0 +2042 +603E +ENDCHAR +STARTCHAR uni6BEF +ENCODING 27631 +BBX 15 15 1 -1 +BITMAP +0C40 +3144 +E244 +22A8 +20A0 +F910 +2248 +2144 +2244 +FAA8 +20A0 +2110 +220A +2002 +1FFE +ENDCHAR +STARTCHAR uni6BF0 +ENCODING 27632 +BBX 15 15 0 -1 +BITMAP +0840 +1C20 +71FC +1000 +1088 +1C50 +73FE +1000 +10F8 +1C88 +F088 +108A +10FA +1002 +0FFE +ENDCHAR +STARTCHAR uni6BF1 +ENCODING 27633 +BBX 15 15 1 -1 +BITMAP +1900 +E100 +23FC +2404 +2294 +39A4 +E084 +23F4 +20C4 +39A4 +E294 +2484 +203A +2002 +1FFE +ENDCHAR +STARTCHAR uni6BF2 +ENCODING 27634 +BBX 15 16 0 -2 +BITMAP +0004 +F70E +1170 +5510 +2210 +551C +8970 +1010 +0010 +F71E +1170 +5510 +2212 +5512 +8912 +100E +ENDCHAR +STARTCHAR uni6BF3 +ENCODING 27635 +BBX 15 15 1 -1 +BITMAP +01C0 +1E00 +0200 +3FF0 +0200 +7FF8 +0204 +01FC +0C10 +70E0 +1E38 +7060 +1E3C +F162 +0F1E +ENDCHAR +STARTCHAR uni6BF4 +ENCODING 27636 +BBX 15 16 0 -2 +BITMAP +1090 +3890 +E090 +279E +2090 +3890 +E39C +2090 +2090 +3890 +E79E +2090 +2092 +2092 +2002 +1FFE +ENDCHAR +STARTCHAR uni6BF5 +ENCODING 27637 +BBX 15 16 0 -2 +BITMAP +0808 +101C +24E0 +7E20 +1020 +FF3C +24E0 +4220 +8920 +303C +C4E0 +0822 +3222 +C422 +381E +C000 +ENDCHAR +STARTCHAR uni6BF6 +ENCODING 27638 +BBX 15 15 0 -1 +BITMAP +0840 +1C88 +71FC +1024 +13FE +1C88 +7134 +12C2 +1018 +1CE0 +F00C +1030 +11C0 +1002 +0FFE +ENDCHAR +STARTCHAR uni6BF7 +ENCODING 27639 +BBX 14 16 1 -2 +BITMAP +0008 +FE1C +82E0 +BA20 +8220 +BA38 +82E0 +0020 +7C20 +443C +7CE0 +4420 +7C24 +4424 +7C24 +441C +ENDCHAR +STARTCHAR uni6BF8 +ENCODING 27640 +BBX 15 15 0 -1 +BITMAP +0800 +1DFC +7124 +11FC +1124 +1DFC +7020 +1014 +1152 +1D42 +F248 +103A +1002 +1002 +0FFE +ENDCHAR +STARTCHAR uni6BF9 +ENCODING 27641 +BBX 15 16 0 -2 +BITMAP +0804 +140E +2270 +4110 +BE90 +001C +78F0 +4A90 +4A90 +7A9E +4AF0 +4A90 +7A92 +4892 +4A92 +590E +ENDCHAR +STARTCHAR uni6BFA +ENCODING 27642 +BBX 15 16 0 -2 +BITMAP +1020 +3850 +E088 +2104 +26FA +3800 +E3C4 +2254 +23D4 +3A54 +E3D4 +2244 +2256 +22CA +2002 +1FFE +ENDCHAR +STARTCHAR uni6BFB +ENCODING 27643 +BBX 15 16 0 -2 +BITMAP +1008 +101C +FEE0 +2020 +7E20 +883C +7EE0 +0020 +7E20 +423C +7EE0 +4222 +7E22 +4222 +4A1E +4400 +ENDCHAR +STARTCHAR uni6BFC +ENCODING 27644 +BBX 15 16 0 -2 +BITMAP +0008 +7E1C +42E0 +7E20 +4220 +7E3C +20E0 +7F20 +9120 +513C +69E0 +4122 +7D22 +0122 +0A1E +0400 +ENDCHAR +STARTCHAR uni6BFD +ENCODING 27645 +BBX 15 16 0 -2 +BITMAP +1010 +3810 +E77C +2114 +22FE +3A14 +E77C +2110 +217C +3910 +E6FE +2210 +2512 +28FE +2002 +1FFE +ENDCHAR +STARTCHAR uni6BFE +ENCODING 27646 +BBX 15 16 0 -2 +BITMAP +0004 +7F0E +4170 +7F10 +4110 +7F1C +0070 +F790 +1090 +949E +52F0 +3190 +D692 +1092 +5292 +210E +ENDCHAR +STARTCHAR uni6BFF +ENCODING 27647 +BBX 15 15 1 -1 +BITMAP +1018 +2CE0 +3420 +4220 +B5BC +D660 +0820 +3620 +C9FE +1220 +6420 +1920 +6222 +0C22 +F01E +ENDCHAR +STARTCHAR uni6C00 +ENCODING 27648 +BBX 15 16 0 -2 +BITMAP +0804 +7F0E +4970 +FF90 +4910 +7F1C +0870 +7F10 +4910 +7F1E +1070 +FF10 +2112 +7212 +0C12 +F30E +ENDCHAR +STARTCHAR uni6C01 +ENCODING 27649 +BBX 15 16 0 -2 +BITMAP +1110 +3910 +E7FC +2110 +23F8 +3A08 +E3F8 +2208 +23F8 +3840 +E7FC +20A0 +2112 +220A +2002 +1FFE +ENDCHAR +STARTCHAR uni6C02 +ENCODING 27650 +BBX 15 15 1 -1 +BITMAP +0840 +7E40 +08FE +FF48 +2C30 +CA48 +0886 +7FFC +4180 +4E00 +43E0 +5E00 +43F0 +BE04 +01FC +ENDCHAR +STARTCHAR uni6C03 +ENCODING 27651 +BBX 15 16 0 -2 +BITMAP +1004 +080E +7F70 +2210 +FF10 +001C +7F70 +4910 +7F10 +491E +7F70 +0810 +7F12 +0812 +0F12 +F00E +ENDCHAR +STARTCHAR uni6C04 +ENCODING 27652 +BBX 15 16 0 -2 +BITMAP +7E04 +140E +0870 +FF10 +2910 +4A1C +A870 +1010 +7F10 +551E +6370 +5D10 +5512 +5D12 +4112 +430E +ENDCHAR +STARTCHAR uni6C05 +ENCODING 27653 +BBX 15 15 1 -1 +BITMAP +5440 +9240 +FEFE +8388 +BA50 +AA20 +BA58 +87C6 +3E00 +03F0 +7E00 +03F8 +FE00 +0202 +01FE +ENDCHAR +STARTCHAR uni6C06 +ENCODING 27654 +BBX 15 16 0 -2 +BITMAP +1108 +3890 +E3FC +2090 +2294 +3998 +E090 +27FE +2000 +39F8 +E108 +21F8 +210A +21FA +2002 +1FFE +ENDCHAR +STARTCHAR uni6C07 +ENCODING 27655 +BBX 15 16 0 -2 +BITMAP +1100 +3BF0 +E410 +2BF8 +2248 +3BF8 +E248 +27FC +2000 +3BF8 +E208 +23F8 +220A +23FA +2002 +1FFE +ENDCHAR +STARTCHAR uni6C08 +ENCODING 27656 +BBX 15 15 1 -1 +BITMAP +0810 +0860 +FFA0 +4120 +5D20 +55FC +5D20 +4120 +7F20 +22FE +3E20 +2220 +3E20 +23A2 +FC1E +ENDCHAR +STARTCHAR uni6C09 +ENCODING 27657 +BBX 15 16 0 -2 +BITMAP +0004 +7F0E +4170 +7F10 +0010 +F79C +94F0 +F790 +0810 +081E +FF70 +1C10 +2A12 +4912 +8892 +080E +ENDCHAR +STARTCHAR uni6C0A +ENCODING 27658 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +27FE +2204 +22F4 +3A94 +E2F4 +2204 +23FC +3908 +E1F8 +2108 +27FC +2002 +1FFE +ENDCHAR +STARTCHAR uni6C0B +ENCODING 27659 +BBX 15 16 0 -2 +BITMAP +2404 +FF0E +2470 +FF10 +8110 +7E1C +0070 +FF10 +1010 +289E +D570 +2E10 +D512 +2492 +D412 +080E +ENDCHAR +STARTCHAR uni6C0C +ENCODING 27660 +BBX 15 16 0 -2 +BITMAP +1080 +39F8 +E208 +25FC +2124 +39FC +E124 +21FC +2154 +3AFA +E088 +20F8 +208A +20FA +2002 +1FFE +ENDCHAR +STARTCHAR uni6C0D +ENCODING 27661 +BBX 15 16 0 -2 +BITMAP +7704 +550E +7770 +5510 +7710 +551C +7770 +2210 +7F90 +A41E +3F70 +2410 +3F12 +2412 +3F92 +200E +ENDCHAR +STARTCHAR uni6C0E +ENCODING 27662 +BBX 15 15 1 -1 +BITMAP +3F86 +2498 +3F88 +2488 +FFEE +AAB8 +FBE8 +AAA8 +FBEE +0418 +FFE8 +9028 +3F8A +490A +FFE6 +ENDCHAR +STARTCHAR uni6C0F +ENCODING 27663 +BBX 15 14 1 -1 +BITMAP +0070 +3F80 +2080 +2080 +2080 +2080 +3FFE +2080 +2080 +2040 +2040 +2022 +3C12 +E00C +ENDCHAR +STARTCHAR uni6C10 +ENCODING 27664 +BBX 15 15 1 -1 +BITMAP +0038 +3FC0 +2040 +2040 +2040 +3FFE +2040 +2040 +2020 +2020 +3E20 +E010 +0012 +7FEA +0004 +ENDCHAR +STARTCHAR uni6C11 +ENCODING 27665 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +2080 +2080 +3FFE +2040 +2040 +2020 +2622 +3812 +C00C +ENDCHAR +STARTCHAR uni6C12 +ENCODING 27666 +BBX 15 16 0 -2 +BITMAP +00F0 +3F00 +2100 +2100 +3FFC +2080 +2040 +2824 +3114 +210C +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni6C13 +ENCODING 27667 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +2204 +FA04 +83FC +8220 +8220 +83FE +8220 +8220 +8210 +7A12 +038A +0E04 +ENDCHAR +STARTCHAR uni6C14 +ENCODING 27668 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +1FFC +2000 +4FF0 +8000 +3FF0 +0010 +0010 +0010 +0010 +0010 +000A +000A +0004 +ENDCHAR +STARTCHAR uni6C15 +ENCODING 27669 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +3FFC +2000 +4FF0 +8000 +3FF0 +0010 +0410 +0410 +0410 +0410 +080A +080A +1006 +2002 +ENDCHAR +STARTCHAR uni6C16 +ENCODING 27670 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +3FFC +2000 +4FF0 +8000 +3FF0 +0010 +3F10 +1110 +1210 +17D0 +204A +204A +4286 +8102 +ENDCHAR +STARTCHAR uni6C17 +ENCODING 27671 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +1FFC +2000 +4FF0 +8000 +3FF0 +0010 +0090 +1890 +0510 +0210 +050A +188A +6044 +ENDCHAR +STARTCHAR uni6C18 +ENCODING 27672 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +3FFC +2000 +4FF0 +8000 +3FF0 +0010 +0010 +1110 +1110 +1110 +210A +210A +4106 +8102 +ENDCHAR +STARTCHAR uni6C19 +ENCODING 27673 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +3FFC +2000 +4FF0 +8000 +3FF0 +0010 +0410 +0410 +4450 +4450 +444A +7FCA +0046 +0002 +ENDCHAR +STARTCHAR uni6C1A +ENCODING 27674 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +3FFC +2000 +4FF0 +8000 +3FF0 +0010 +2490 +2490 +2490 +2490 +248A +448A +4486 +8082 +ENDCHAR +STARTCHAR uni6C1B +ENCODING 27675 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +1FFC +2000 +4FF0 +8000 +3FF0 +1110 +2090 +4070 +BF90 +0890 +088A +108A +6304 +ENDCHAR +STARTCHAR uni6C1C +ENCODING 27676 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0010 +3F90 +2090 +2090 +3F90 +2092 +208A +208A +3F86 +2082 +ENDCHAR +STARTCHAR uni6C1D +ENCODING 27677 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +3FFC +2000 +4FF0 +8000 +3FF0 +0410 +0410 +7FD0 +4450 +4A50 +514A +604A +4146 +4082 +ENDCHAR +STARTCHAR uni6C1E +ENCODING 27678 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0010 +7FD0 +0410 +7FD0 +4450 +4A52 +514A +604A +4146 +4082 +ENDCHAR +STARTCHAR uni6C1F +ENCODING 27679 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +1210 +7F90 +1290 +7F90 +5210 +7FD2 +124A +134A +2286 +4202 +ENDCHAR +STARTCHAR uni6C20 +ENCODING 27680 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0410 +0410 +7FD0 +4450 +7FD0 +4452 +7FCA +444A +0406 +0402 +ENDCHAR +STARTCHAR uni6C21 +ENCODING 27681 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +1010 +1F90 +2090 +5110 +0E10 +3192 +CC6A +030A +1C06 +0302 +ENDCHAR +STARTCHAR uni6C22 +ENCODING 27682 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0010 +3FD0 +0310 +0CD0 +7030 +1FD2 +020A +020A +7FF6 +0002 +ENDCHAR +STARTCHAR uni6C23 +ENCODING 27683 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +1FFC +2000 +5FF0 +8000 +3FF0 +2490 +1510 +0410 +7FD0 +1510 +248A +444A +0404 +ENDCHAR +STARTCHAR uni6C24 +ENCODING 27684 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +1FFC +2000 +4FF0 +8000 +3FF0 +0010 +7FD0 +4450 +5F50 +4450 +4A4A +514A +7FC4 +ENDCHAR +STARTCHAR uni6C25 +ENCODING 27685 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0010 +7FD0 +0A10 +3F90 +2A90 +2A92 +338A +208A +3F86 +2082 +ENDCHAR +STARTCHAR uni6C26 +ENCODING 27686 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0410 +7FD0 +0810 +1110 +3E10 +0492 +190A +620A +0D06 +3082 +ENDCHAR +STARTCHAR uni6C27 +ENCODING 27687 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +1110 +0A10 +7FD0 +0410 +3F90 +0412 +FFEA +040A +0406 +0402 +ENDCHAR +STARTCHAR uni6C28 +ENCODING 27688 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0410 +7FD0 +4050 +0810 +FFD0 +1112 +320A +0C0A +1B06 +6082 +ENDCHAR +STARTCHAR uni6C29 +ENCODING 27689 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0010 +7F90 +1210 +1250 +9290 +5312 +520A +120A +FFC6 +0002 +ENDCHAR +STARTCHAR uni6C2A +ENCODING 27690 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0410 +7FD0 +0410 +3F90 +2090 +3F92 +0A0A +124A +2246 +41C2 +ENDCHAR +STARTCHAR uni6C2B +ENCODING 27691 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0010 +7FD0 +2490 +4910 +2490 +7FD2 +040A +040A +FFE6 +0002 +ENDCHAR +STARTCHAR uni6C2C +ENCODING 27692 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0010 +FFD0 +1210 +7390 +4090 +4092 +738A +120A +1206 +FFE2 +ENDCHAR +STARTCHAR uni6C2D +ENCODING 27693 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0410 +7FD0 +0410 +3F90 +2490 +3F92 +248A +3F8A +1506 +2482 +ENDCHAR +STARTCHAR uni6C2E +ENCODING 27694 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0410 +2490 +0B10 +1090 +6050 +0412 +248A +0B0A +1086 +6042 +ENDCHAR +STARTCHAR uni6C2F +ENCODING 27695 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0010 +7F90 +0090 +3F90 +0090 +FFF2 +248A +150A +2486 +4C42 +ENDCHAR +STARTCHAR uni6C30 +ENCODING 27696 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0410 +7FD0 +0410 +3F90 +0410 +FFF2 +208A +3F8A +2086 +2182 +ENDCHAR +STARTCHAR uni6C31 +ENCODING 27697 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +1090 +1F90 +1090 +3FF0 +1010 +3FD2 +4A4A +124A +2546 +0882 +ENDCHAR +STARTCHAR uni6C32 +ENCODING 27698 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0010 +3F90 +2090 +3F90 +2090 +3F92 +000A +7FCA +4A46 +FFE2 +ENDCHAR +STARTCHAR uni6C33 +ENCODING 27699 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +3FFC +4000 +9FF0 +0000 +7FF0 +0010 +3F90 +2490 +2A90 +7FD0 +494A +494A +FFE4 +ENDCHAR +STARTCHAR uni6C34 +ENCODING 27700 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +0200 +0210 +FB10 +0B20 +0B40 +1280 +1280 +2240 +2220 +4210 +820C +0200 +0E00 +ENDCHAR +STARTCHAR uni6C35 +ENCODING 27701 +BBX 5 15 6 -1 +BITMAP +60 +10 +08 +00 +C0 +20 +10 +00 +08 +08 +10 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni6C36 +ENCODING 27702 +BBX 15 14 1 -1 +BITMAP +7FF8 +0030 +00C0 +0104 +FD08 +0510 +05A0 +0940 +0920 +1110 +2108 +C106 +0100 +0700 +ENDCHAR +STARTCHAR uni6C37 +ENCODING 27703 +BBX 15 15 1 -1 +BITMAP +0100 +2100 +1108 +0908 +0190 +7DA0 +05C0 +0540 +0940 +0920 +1110 +2108 +C106 +0100 +0700 +ENDCHAR +STARTCHAR uni6C38 +ENCODING 27704 +BBX 15 15 1 -1 +BITMAP +0800 +0600 +0180 +0000 +1F00 +0104 +0108 +7D90 +05A0 +0540 +0940 +1120 +2118 +C106 +0700 +ENDCHAR +STARTCHAR uni6C39 +ENCODING 27705 +BBX 15 15 0 -1 +BITMAP +0040 +0040 +F840 +0844 +0F48 +0950 +1160 +1250 +2248 +2444 +4844 +4140 +4082 +4002 +3FFE +ENDCHAR +STARTCHAR uni6C3A +ENCODING 27706 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +2104 +1104 +0908 +0910 +0120 +0580 +0540 +0920 +3110 +C108 +0106 +0100 +0700 +ENDCHAR +STARTCHAR uni6C3B +ENCODING 27707 +BBX 14 16 0 -2 +BITMAP +0080 +2080 +1080 +1080 +87FC +4084 +4884 +0884 +1084 +1084 +E104 +2104 +2104 +2204 +2228 +0410 +ENDCHAR +STARTCHAR uni6C3C +ENCODING 27708 +BBX 15 16 0 -2 +BITMAP +0100 +0104 +7D88 +0550 +0920 +1110 +2108 +C506 +0200 +0100 +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni6C3D +ENCODING 27709 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0440 +0820 +3118 +C106 +0100 +3D84 +0588 +0950 +0920 +1110 +2108 +C106 +0500 +0200 +ENDCHAR +STARTCHAR uni6C3E +ENCODING 27710 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1208 +0208 +8208 +4208 +2208 +0A08 +0A38 +1200 +1200 +2200 +2202 +4202 +81FE +ENDCHAR +STARTCHAR uni6C3F +ENCODING 27711 +BBX 15 15 1 -1 +BITMAP +4100 +2100 +1100 +0100 +8FF0 +4110 +2110 +0110 +0110 +1110 +1110 +2210 +2212 +4412 +880E +ENDCHAR +STARTCHAR uni6C40 +ENCODING 27712 +BBX 15 15 1 -1 +BITMAP +4000 +27FE +1020 +0020 +8020 +4020 +2020 +0020 +1020 +1020 +2020 +2020 +4020 +4020 +80E0 +ENDCHAR +STARTCHAR uni6C41 +ENCODING 27713 +BBX 14 15 1 -1 +BITMAP +4040 +2040 +1040 +0040 +8040 +4FFC +2040 +0040 +1040 +1040 +2040 +2040 +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6C42 +ENCODING 27714 +BBX 15 15 1 -1 +BITMAP +0120 +0110 +0110 +7FFC +0100 +2108 +1110 +0920 +0180 +0380 +0540 +0920 +3118 +C106 +0700 +ENDCHAR +STARTCHAR uni6C43 +ENCODING 27715 +BBX 15 15 0 -2 +BITMAP +2020 +1120 +1120 +8120 +4120 +4920 +0920 +1120 +1110 +E110 +2210 +2208 +2408 +2804 +1002 +ENDCHAR +STARTCHAR uni6C44 +ENCODING 27716 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +1040 +8040 +4040 +4840 +0840 +10A0 +10A0 +E0A0 +2110 +2110 +2208 +2404 +0802 +ENDCHAR +STARTCHAR uni6C45 +ENCODING 27717 +BBX 15 15 0 -2 +BITMAP +27FE +1080 +1080 +8100 +4100 +4A00 +0BF8 +1008 +1008 +E008 +2008 +2008 +2008 +2050 +0020 +ENDCHAR +STARTCHAR uni6C46 +ENCODING 27718 +BBX 15 16 0 -2 +BITMAP +0600 +0100 +0280 +0C60 +3118 +C106 +0100 +3D84 +0588 +0950 +0920 +1110 +2108 +C106 +0500 +0200 +ENDCHAR +STARTCHAR uni6C47 +ENCODING 27719 +BBX 15 14 0 -1 +BITMAP +23FE +1200 +1200 +8200 +4200 +4A00 +0A00 +1200 +1200 +E200 +2200 +2200 +2200 +23FE +ENDCHAR +STARTCHAR uni6C48 +ENCODING 27720 +BBX 14 15 0 -2 +BITMAP +27FC +1004 +1004 +8004 +4014 +4824 +0844 +1084 +1104 +E604 +2004 +2004 +2004 +2028 +0010 +ENDCHAR +STARTCHAR uni6C49 +ENCODING 27721 +BBX 15 15 0 -2 +BITMAP +27F8 +1208 +1208 +8208 +4110 +4910 +0910 +10A0 +10A0 +E040 +2040 +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni6C4A +ENCODING 27722 +BBX 15 15 0 -2 +BITMAP +27F8 +1208 +1288 +8248 +4150 +4910 +0910 +10A0 +10A0 +E040 +2040 +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni6C4B +ENCODING 27723 +BBX 14 16 0 -2 +BITMAP +0080 +2080 +1100 +11FC +8204 +4204 +5404 +1904 +1084 +2044 +E044 +2004 +2004 +2004 +2028 +0010 +ENDCHAR +STARTCHAR uni6C4C +ENCODING 27724 +BBX 14 16 0 -2 +BITMAP +0204 +2244 +1244 +1244 +8244 +4244 +4244 +1244 +1244 +2244 +E244 +2244 +2244 +2444 +2404 +0804 +ENDCHAR +STARTCHAR uni6C4D +ENCODING 27725 +BBX 15 15 1 -1 +BITMAP +4100 +2100 +1100 +0100 +8FF0 +4110 +2110 +0510 +0310 +1110 +1190 +2250 +2212 +4412 +880E +ENDCHAR +STARTCHAR uni6C4E +ENCODING 27726 +BBX 15 15 1 -1 +BITMAP +4000 +27F0 +1410 +0410 +8410 +4410 +2510 +0490 +1450 +1410 +2410 +2410 +4812 +4812 +900E +ENDCHAR +STARTCHAR uni6C4F +ENCODING 27727 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +1040 +8040 +47FE +4840 +0840 +10A0 +10A0 +E0A0 +2110 +2110 +2208 +2404 +0802 +ENDCHAR +STARTCHAR uni6C50 +ENCODING 27728 +BBX 15 15 1 -1 +BITMAP +2040 +1040 +08FE +0082 +8102 +4302 +2484 +0044 +1028 +1018 +2010 +2020 +4040 +4180 +8E00 +ENDCHAR +STARTCHAR uni6C51 +ENCODING 27729 +BBX 15 15 0 -1 +BITMAP +0010 +2078 +13C0 +1040 +8040 +4040 +4840 +087E +17C0 +1040 +E040 +2042 +2042 +2042 +203E +ENDCHAR +STARTCHAR uni6C52 +ENCODING 27730 +BBX 15 15 0 -1 +BITMAP +0040 +2020 +1020 +1000 +87FE +4100 +4900 +0900 +1100 +1100 +E100 +2100 +2100 +2100 +21FC +ENDCHAR +STARTCHAR uni6C53 +ENCODING 27731 +BBX 15 15 0 -2 +BITMAP +23F8 +1008 +1010 +8020 +4040 +4840 +0FFE +1040 +1040 +E040 +2040 +2040 +2040 +2140 +0080 +ENDCHAR +STARTCHAR uni6C54 +ENCODING 27732 +BBX 15 15 0 -1 +BITMAP +0080 +2080 +1100 +11FE +8200 +4400 +41F8 +1008 +1010 +2060 +E080 +2100 +2202 +2202 +21FE +ENDCHAR +STARTCHAR uni6C55 +ENCODING 27733 +BBX 14 15 1 -1 +BITMAP +4040 +2040 +1040 +0040 +8040 +4444 +2444 +0444 +1444 +1444 +2444 +2444 +4444 +4444 +87FC +ENDCHAR +STARTCHAR uni6C56 +ENCODING 27734 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +2108 +2108 +2108 +3FF8 +0000 +0100 +0104 +7D88 +0550 +0920 +1110 +2108 +C506 +0200 +ENDCHAR +STARTCHAR uni6C57 +ENCODING 27735 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1040 +0040 +8040 +4040 +2FFE +0040 +0040 +1040 +1040 +2040 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni6C58 +ENCODING 27736 +BBX 15 16 0 -2 +BITMAP +0010 +2078 +13C0 +1040 +8040 +4040 +4840 +0FFE +1040 +1040 +E040 +2040 +2040 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6C59 +ENCODING 27737 +BBX 15 15 1 -1 +BITMAP +4000 +23FC +1020 +0020 +8020 +4020 +27FE +0020 +1020 +1020 +2020 +2020 +4020 +4020 +80E0 +ENDCHAR +STARTCHAR uni6C5A +ENCODING 27738 +BBX 15 15 1 -1 +BITMAP +8000 +43FC +2080 +0080 +0FFE +8100 +4100 +0100 +13FC +1204 +2004 +2004 +4008 +4008 +8070 +ENDCHAR +STARTCHAR uni6C5B +ENCODING 27739 +BBX 15 15 1 -1 +BITMAP +4000 +2FF0 +1110 +0110 +8110 +4110 +2110 +07D0 +0110 +1110 +1110 +2208 +220A +440A +8804 +ENDCHAR +STARTCHAR uni6C5C +ENCODING 27740 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1404 +0404 +8404 +4404 +27FC +0400 +1400 +1400 +2400 +2400 +4402 +4402 +83FE +ENDCHAR +STARTCHAR uni6C5D +ENCODING 27741 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +1080 +0FFE +8088 +4088 +2108 +0108 +1208 +1210 +2790 +2060 +4050 +4188 +8E04 +ENDCHAR +STARTCHAR uni6C5E +ENCODING 27742 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +0100 +FFFE +0100 +0104 +7D08 +0590 +0580 +0940 +1120 +2118 +C106 +0700 +ENDCHAR +STARTCHAR uni6C5F +ENCODING 27743 +BBX 15 15 1 -1 +BITMAP +4000 +2000 +17FC +0040 +8040 +4040 +2040 +0040 +0040 +1040 +2040 +2040 +4040 +4FFE +8000 +ENDCHAR +STARTCHAR uni6C60 +ENCODING 27744 +BBX 15 15 1 -1 +BITMAP +4040 +2240 +1240 +0240 +8278 +43C8 +2E48 +0248 +1248 +1258 +2240 +2200 +4202 +4202 +81FE +ENDCHAR +STARTCHAR uni6C61 +ENCODING 27745 +BBX 15 15 0 -2 +BITMAP +23F8 +1000 +1000 +8000 +47FE +4080 +1080 +1100 +21F8 +E008 +2008 +2008 +2008 +2050 +0020 +ENDCHAR +STARTCHAR uni6C62 +ENCODING 27746 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0040 +8040 +4040 +23F8 +0040 +1040 +1040 +2040 +2040 +4040 +4040 +8FFE +ENDCHAR +STARTCHAR uni6C63 +ENCODING 27747 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +1080 +10F8 +8108 +4108 +4910 +0A10 +1020 +1020 +E050 +2050 +2088 +2108 +2204 +0402 +ENDCHAR +STARTCHAR uni6C64 +ENCODING 27748 +BBX 14 15 0 -2 +BITMAP +23F0 +1020 +1040 +8080 +4100 +43FC +1124 +1124 +2124 +E224 +2244 +2444 +2884 +2128 +0210 +ENDCHAR +STARTCHAR uni6C65 +ENCODING 27749 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +17FE +8040 +4040 +4040 +17FC +1204 +2208 +E110 +20A0 +2040 +20A0 +2318 +0C06 +ENDCHAR +STARTCHAR uni6C66 +ENCODING 27750 +BBX 15 16 0 -2 +BITMAP +0008 +203C +13E0 +1220 +8220 +4220 +4A20 +0BFE +1220 +1210 +E210 +2212 +220A +228A +2306 +0202 +ENDCHAR +STARTCHAR uni6C67 +ENCODING 27751 +BBX 15 15 1 -1 +BITMAP +4000 +2FBE +1208 +0208 +8208 +4208 +2388 +0E3E +0208 +1208 +1208 +2208 +2408 +4408 +8808 +ENDCHAR +STARTCHAR uni6C68 +ENCODING 27752 +BBX 14 15 1 -1 +BITMAP +4000 +27FC +1404 +0404 +8404 +4404 +2404 +07FC +1404 +1404 +2404 +2404 +4404 +4404 +87FC +ENDCHAR +STARTCHAR uni6C69 +ENCODING 27753 +BBX 14 14 0 -1 +BITMAP +2000 +17FC +1404 +8404 +4404 +4404 +17F4 +1404 +2404 +E404 +2404 +2404 +27FC +2404 +ENDCHAR +STARTCHAR uni6C6A +ENCODING 27754 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1040 +0040 +8040 +4040 +2040 +03F8 +1040 +1040 +2040 +2040 +4040 +4040 +8FFE +ENDCHAR +STARTCHAR uni6C6B +ENCODING 27755 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +1110 +1110 +87FC +4110 +4110 +1110 +1110 +2FFE +E110 +2110 +2110 +2210 +2210 +0410 +ENDCHAR +STARTCHAR uni6C6C +ENCODING 27756 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7FFC +0820 +0820 +FFFE +1020 +2020 +4120 +0104 +7D88 +0950 +1120 +2118 +C506 +0200 +ENDCHAR +STARTCHAR uni6C6D +ENCODING 27757 +BBX 14 15 1 -1 +BITMAP +40C0 +2040 +1040 +07FC +8444 +4444 +2444 +04A4 +04A4 +1514 +160C +2404 +2404 +4404 +841C +ENDCHAR +STARTCHAR uni6C6E +ENCODING 27758 +BBX 14 16 0 -2 +BITMAP +0100 +4100 +21FC +2204 +0204 +8504 +4884 +4084 +1014 +2024 +E044 +2384 +2104 +2004 +2028 +0010 +ENDCHAR +STARTCHAR uni6C6F +ENCODING 27759 +BBX 15 16 0 -2 +BITMAP +0080 +4080 +2080 +2FFE +0080 +8080 +4120 +5120 +1120 +2240 +E240 +2488 +2488 +29FC +2084 +0004 +ENDCHAR +STARTCHAR uni6C70 +ENCODING 27760 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0040 +8FFE +4040 +2040 +00A0 +10A0 +1110 +2110 +2288 +4288 +4444 +8802 +ENDCHAR +STARTCHAR uni6C71 +ENCODING 27761 +BBX 15 16 0 -2 +BITMAP +0040 +2050 +1048 +1048 +8040 +47FE +4840 +0840 +10A0 +10A0 +E0A0 +2110 +2110 +2208 +2404 +0802 +ENDCHAR +STARTCHAR uni6C72 +ENCODING 27762 +BBX 15 15 1 -1 +BITMAP +4000 +2FF8 +1108 +0110 +8120 +41FC +2284 +0288 +1288 +1250 +2450 +2420 +4850 +5088 +8306 +ENDCHAR +STARTCHAR uni6C73 +ENCODING 27763 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1400 +0400 +8400 +47F8 +2508 +0508 +1510 +1490 +24A0 +2840 +48A0 +5118 +8606 +ENDCHAR +STARTCHAR uni6C74 +ENCODING 27764 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +07FE +8040 +4040 +2040 +0070 +104C +1040 +2040 +2040 +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6C75 +ENCODING 27765 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +10A0 +10A0 +8110 +4288 +4C46 +0840 +1000 +13F8 +E008 +2010 +2010 +2020 +2020 +0040 +ENDCHAR +STARTCHAR uni6C76 +ENCODING 27766 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0FFE +8208 +4208 +2110 +0110 +10A0 +10A0 +2040 +20A0 +4110 +4208 +8C06 +ENDCHAR +STARTCHAR uni6C77 +ENCODING 27767 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +1080 +1080 +81F8 +4108 +4A08 +0D10 +1110 +10A0 +E0A0 +2040 +20A0 +2110 +2208 +0406 +ENDCHAR +STARTCHAR uni6C78 +ENCODING 27768 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +1040 +17FE +8100 +4100 +4900 +09F8 +1108 +1108 +E108 +2108 +2208 +2208 +2450 +0820 +ENDCHAR +STARTCHAR uni6C79 +ENCODING 27769 +BBX 15 14 0 -1 +BITMAP +2008 +1108 +1088 +8252 +4252 +4A22 +0A22 +1252 +1292 +E30A +220A +2202 +23FE +2002 +ENDCHAR +STARTCHAR uni6C7A +ENCODING 27770 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +1080 +07F8 +8088 +4088 +2088 +0088 +1FFE +1140 +2140 +2220 +4210 +4408 +9806 +ENDCHAR +STARTCHAR uni6C7B +ENCODING 27771 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +1080 +11FC +8120 +4120 +4A20 +0820 +1020 +17FE +E020 +2020 +2020 +2020 +2020 +0020 +ENDCHAR +STARTCHAR uni6C7C +ENCODING 27772 +BBX 15 16 0 -2 +BITMAP +0020 +2020 +1120 +1120 +81FC +4220 +4220 +1420 +1020 +27FE +E020 +2020 +2020 +2020 +2020 +0020 +ENDCHAR +STARTCHAR uni6C7D +ENCODING 27773 +BBX 15 15 1 -1 +BITMAP +4200 +2200 +17FC +0800 +83F0 +4000 +2FF0 +0010 +0010 +1010 +2010 +2010 +400A +400A +8004 +ENDCHAR +STARTCHAR uni6C7E +ENCODING 27774 +BBX 15 15 1 -1 +BITMAP +4110 +2110 +1110 +0208 +8208 +4404 +2BFA +0088 +1088 +1088 +2108 +2108 +4208 +4408 +8870 +ENDCHAR +STARTCHAR uni6C7F +ENCODING 27775 +BBX 15 15 0 -2 +BITMAP +23F8 +1008 +1110 +80A0 +4040 +47FE +1042 +1044 +2040 +E040 +2040 +2040 +2040 +2140 +0080 +ENDCHAR +STARTCHAR uni6C80 +ENCODING 27776 +BBX 15 16 0 -2 +BITMAP +0800 +087C +0804 +0928 +0910 +EA08 +2CFE +2A12 +2914 +4910 +4890 +8890 +0810 +0810 +2850 +1020 +ENDCHAR +STARTCHAR uni6C81 +ENCODING 27777 +BBX 15 15 1 -1 +BITMAP +4100 +2080 +1040 +0020 +8100 +4100 +2100 +0100 +1508 +1504 +2902 +2902 +5108 +4108 +80F8 +ENDCHAR +STARTCHAR uni6C82 +ENCODING 27778 +BBX 15 15 1 -1 +BITMAP +4038 +23C0 +1200 +0200 +8200 +43FE +2210 +0210 +1210 +1210 +2210 +2410 +4410 +4810 +8010 +ENDCHAR +STARTCHAR uni6C83 +ENCODING 27779 +BBX 15 15 1 -1 +BITMAP +4038 +27C0 +1040 +0040 +8040 +4FFE +2040 +0040 +1040 +10A0 +20A0 +2110 +4208 +4404 +8802 +ENDCHAR +STARTCHAR uni6C84 +ENCODING 27780 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1000 +0000 +8000 +4000 +2FFE +0080 +0080 +1080 +1090 +2108 +2108 +4234 +8FC4 +ENDCHAR +STARTCHAR uni6C85 +ENCODING 27781 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1000 +0000 +8000 +4000 +2FFE +0120 +1120 +1120 +2120 +2220 +4222 +4422 +881E +ENDCHAR +STARTCHAR uni6C86 +ENCODING 27782 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0FFE +8000 +4000 +21F0 +0110 +1110 +1110 +2110 +2210 +4212 +4412 +880E +ENDCHAR +STARTCHAR uni6C87 +ENCODING 27783 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +1100 +1110 +8208 +47FC +4004 +1120 +1120 +2120 +E120 +2120 +2222 +2222 +241E +0800 +ENDCHAR +STARTCHAR uni6C88 +ENCODING 27784 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +07FC +8444 +4444 +2444 +0040 +1060 +10A0 +20A0 +20A0 +4122 +4222 +8C1E +ENDCHAR +STARTCHAR uni6C89 +ENCODING 27785 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1802 +0802 +8802 +41F0 +2110 +0110 +0110 +1110 +1110 +2210 +2212 +4412 +880E +ENDCHAR +STARTCHAR uni6C8A +ENCODING 27786 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +7E24 +53A8 +94B0 +10A8 +1124 +2922 +2A22 +2C20 +28A2 +2842 +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni6C8B +ENCODING 27787 +BBX 15 16 0 -2 +BITMAP +0090 +2088 +1088 +1080 +87FE +40A0 +48A0 +08A0 +10A0 +10A0 +E120 +2122 +2122 +2222 +221E +0400 +ENDCHAR +STARTCHAR uni6C8C +ENCODING 27788 +BBX 15 15 1 -1 +BITMAP +4040 +2048 +1070 +07C0 +8040 +4248 +2248 +0248 +1248 +1248 +23F8 +2040 +4042 +4042 +803E +ENDCHAR +STARTCHAR uni6C8D +ENCODING 27789 +BBX 15 15 1 -1 +BITMAP +4000 +27FE +1040 +0040 +8080 +40F8 +2108 +0108 +1208 +1210 +23F0 +2010 +4020 +4020 +8FFE +ENDCHAR +STARTCHAR uni6C8E +ENCODING 27790 +BBX 15 16 0 -2 +BITMAP +0120 +2120 +1120 +1224 +8224 +4628 +5630 +1A20 +1260 +22A0 +E220 +2222 +2222 +2222 +221E +0200 +ENDCHAR +STARTCHAR uni6C8F +ENCODING 27791 +BBX 14 15 0 -2 +BITMAP +2200 +12FC +1224 +8224 +4224 +53A4 +1E24 +1224 +2224 +E2A4 +2324 +2244 +2044 +2094 +0108 +ENDCHAR +STARTCHAR uni6C90 +ENCODING 27792 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0040 +8FFE +40E0 +20E0 +0150 +1150 +1248 +2248 +2444 +4842 +4040 +8040 +ENDCHAR +STARTCHAR uni6C91 +ENCODING 27793 +BBX 15 14 0 -1 +BITMAP +23F8 +1088 +1088 +8088 +4088 +4888 +0BF8 +1108 +1108 +E108 +2108 +2108 +2108 +2FFE +ENDCHAR +STARTCHAR uni6C92 +ENCODING 27794 +BBX 15 15 1 -1 +BITMAP +4100 +2100 +11F8 +0208 +8208 +4408 +2870 +0000 +17F8 +1008 +2210 +2120 +40C0 +4330 +9C0E +ENDCHAR +STARTCHAR uni6C93 +ENCODING 27795 +BBX 15 15 1 -1 +BITMAP +0100 +0108 +7D90 +0560 +0920 +3118 +C106 +0700 +3FF8 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni6C94 +ENCODING 27796 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1040 +0040 +8440 +447C +2444 +0444 +0444 +1444 +17FC +2004 +2008 +4008 +8070 +ENDCHAR +STARTCHAR uni6C95 +ENCODING 27797 +BBX 15 15 1 -1 +BITMAP +4200 +2200 +1200 +03FE +8292 +4492 +2492 +0892 +0112 +1122 +1222 +2442 +2084 +4104 +8038 +ENDCHAR +STARTCHAR uni6C96 +ENCODING 27798 +BBX 14 15 1 -1 +BITMAP +4040 +2040 +1040 +07FC +8444 +4444 +2444 +0444 +17FC +1040 +2040 +2040 +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6C97 +ENCODING 27799 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +0100 +FFFE +0280 +1C70 +E10E +1918 +0560 +0180 +0740 +1930 +E10E +0700 +ENDCHAR +STARTCHAR uni6C98 +ENCODING 27800 +BBX 15 15 1 -1 +BITMAP +4440 +2440 +1440 +0444 +8448 +4770 +2440 +0440 +1440 +1440 +2440 +2440 +4442 +4742 +9C3E +ENDCHAR +STARTCHAR uni6C99 +ENCODING 27801 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1248 +0248 +8444 +4442 +2840 +0044 +11C4 +1008 +2008 +2010 +4020 +40C0 +8700 +ENDCHAR +STARTCHAR uni6C9A +ENCODING 27802 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0040 +8040 +4240 +2278 +0240 +1240 +1240 +2240 +2240 +4240 +4240 +8FFE +ENDCHAR +STARTCHAR uni6C9B +ENCODING 27803 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0FFE +8040 +4040 +27FC +0444 +1444 +1444 +2444 +244C +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6C9C +ENCODING 27804 +BBX 15 15 1 -1 +BITMAP +4210 +2210 +1210 +0210 +83FE +4200 +2200 +0200 +13F8 +1208 +2208 +2208 +4408 +4408 +8808 +ENDCHAR +STARTCHAR uni6C9D +ENCODING 27805 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +0A20 +0A32 +EDB2 +28B4 +2CA8 +2AA8 +2AA8 +4924 +4924 +8A22 +0820 +28A0 +1040 +ENDCHAR +STARTCHAR uni6C9E +ENCODING 27806 +BBX 15 15 0 -2 +BITMAP +4FFE +2040 +2040 +0040 +87FC +4444 +5444 +1444 +2444 +E444 +2454 +2448 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6C9F +ENCODING 27807 +BBX 14 16 0 -2 +BITMAP +0100 +2100 +1100 +11FC +8204 +4484 +4084 +1104 +1144 +2224 +E7F4 +2214 +2004 +2004 +2028 +0010 +ENDCHAR +STARTCHAR uni6CA0 +ENCODING 27808 +BBX 15 16 0 -2 +BITMAP +0008 +203C +17D0 +1490 +8490 +4490 +4490 +1490 +1490 +2488 +E488 +2488 +2484 +2884 +2882 +1000 +ENDCHAR +STARTCHAR uni6CA1 +ENCODING 27809 +BBX 15 15 1 -1 +BITMAP +4000 +21F0 +1110 +0110 +8212 +440E +2800 +07F8 +1008 +1208 +2110 +20A0 +4040 +41B0 +8E0E +ENDCHAR +STARTCHAR uni6CA2 +ENCODING 27810 +BBX 15 15 1 -1 +BITMAP +4000 +23FC +1204 +0204 +8204 +4204 +23FC +0220 +1220 +1210 +2210 +2408 +4408 +4804 +9002 +ENDCHAR +STARTCHAR uni6CA3 +ENCODING 27811 +BBX 15 16 0 -2 +BITMAP +0020 +2020 +1020 +13FE +8020 +4020 +4820 +09FC +1020 +1020 +E020 +27FE +2020 +2020 +2020 +0020 +ENDCHAR +STARTCHAR uni6CA4 +ENCODING 27812 +BBX 15 14 0 -1 +BITMAP +23FC +1200 +1208 +8288 +4250 +4A50 +0A20 +1220 +1250 +E250 +2288 +2308 +2200 +23FE +ENDCHAR +STARTCHAR uni6CA5 +ENCODING 27813 +BBX 15 15 0 -2 +BITMAP +23FE +1200 +1220 +8220 +4220 +4AFC +0A24 +1224 +1224 +E244 +2244 +2484 +2484 +2928 +1210 +ENDCHAR +STARTCHAR uni6CA6 +ENCODING 27814 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +10A0 +10A0 +8110 +4208 +4406 +1110 +1120 +2140 +E180 +2100 +2104 +2104 +20FC +ENDCHAR +STARTCHAR uni6CA7 +ENCODING 27815 +BBX 15 15 0 -1 +BITMAP +0040 +4040 +20A0 +2110 +0208 +8404 +4BF2 +4210 +1210 +2210 +E250 +2220 +2204 +2204 +21FC +ENDCHAR +STARTCHAR uni6CA8 +ENCODING 27816 +BBX 15 15 0 -2 +BITMAP +23F8 +1208 +1208 +8328 +42A8 +4AA8 +0A48 +1248 +12A8 +E2A8 +232A +240A +240A +2806 +1002 +ENDCHAR +STARTCHAR uni6CA9 +ENCODING 27817 +BBX 14 16 0 -2 +BITMAP +0040 +2240 +1140 +1140 +8040 +47FC +4044 +1044 +1084 +20A4 +E094 +2114 +2104 +2204 +2428 +0810 +ENDCHAR +STARTCHAR uni6CAA +ENCODING 27818 +BBX 15 15 1 -1 +BITMAP +4000 +27FE +1000 +0000 +83FC +4204 +2204 +0204 +13FC +1200 +2200 +2200 +4400 +4400 +8800 +ENDCHAR +STARTCHAR uni6CAB +ENCODING 27819 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0FFE +8040 +4040 +2040 +07FC +1040 +10E0 +2150 +2248 +4444 +4842 +8040 +ENDCHAR +STARTCHAR uni6CAC +ENCODING 27820 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +13FC +8040 +4040 +4840 +0FFE +10E0 +1150 +E150 +2248 +2444 +2842 +2040 +0040 +ENDCHAR +STARTCHAR uni6CAD +ENCODING 27821 +BBX 15 15 1 -1 +BITMAP +4048 +2044 +1044 +0FFE +8040 +4040 +2248 +0248 +0248 +1248 +144A +244A +284E +4040 +8040 +ENDCHAR +STARTCHAR uni6CAE +ENCODING 27822 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1208 +0208 +8208 +43F8 +2208 +0208 +1208 +13F8 +2208 +2208 +4208 +4208 +8FFE +ENDCHAR +STARTCHAR uni6CAF +ENCODING 27823 +BBX 15 16 0 -2 +BITMAP +0100 +0108 +7D10 +05A0 +0960 +3118 +C506 +0200 +7FFC +0400 +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni6CB0 +ENCODING 27824 +BBX 15 15 0 -2 +BITMAP +2000 +17FE +1040 +8040 +4080 +4880 +09F8 +1308 +1508 +E908 +2108 +2108 +2108 +21F8 +0108 +ENDCHAR +STARTCHAR uni6CB1 +ENCODING 27825 +BBX 15 15 1 -1 +BITMAP +4020 +2020 +1020 +07FE +8402 +4402 +2100 +0104 +1118 +11E0 +2100 +2100 +4102 +4102 +80FE +ENDCHAR +STARTCHAR uni6CB2 +ENCODING 27826 +BBX 15 15 0 -1 +BITMAP +0100 +2100 +13FC +1200 +8440 +4840 +4278 +12C8 +1348 +2E48 +E248 +225A +2242 +2202 +21FE +ENDCHAR +STARTCHAR uni6CB3 +ENCODING 27827 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1008 +0008 +0788 +8488 +4488 +2488 +0488 +1488 +1788 +2008 +2008 +4008 +8038 +ENDCHAR +STARTCHAR uni6CB4 +ENCODING 27828 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +10A0 +1110 +8208 +4426 +4040 +1080 +1310 +2020 +E040 +2088 +2310 +2020 +20C0 +0700 +ENDCHAR +STARTCHAR uni6CB5 +ENCODING 27829 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +1080 +11FE +8102 +4204 +5420 +1020 +1128 +2124 +E224 +2222 +2422 +2020 +20A0 +0040 +ENDCHAR +STARTCHAR uni6CB6 +ENCODING 27830 +BBX 15 15 0 -2 +BITMAP +23FC +1000 +1000 +8000 +4000 +4FFE +1040 +1040 +2248 +E244 +2444 +2442 +2842 +2140 +0080 +ENDCHAR +STARTCHAR uni6CB7 +ENCODING 27831 +BBX 15 16 0 -2 +BITMAP +0090 +2088 +1088 +1080 +87FE +4080 +4900 +09FC +1144 +1244 +E248 +2450 +2420 +2850 +2088 +0306 +ENDCHAR +STARTCHAR uni6CB8 +ENCODING 27832 +BBX 15 15 1 -1 +BITMAP +4120 +2120 +17FC +0124 +8124 +47FC +2520 +0520 +17FE +1122 +2122 +2222 +4222 +442C +8820 +ENDCHAR +STARTCHAR uni6CB9 +ENCODING 27833 +BBX 14 15 1 -1 +BITMAP +4040 +2040 +1040 +0040 +87FC +4444 +2444 +0444 +1444 +17FC +2444 +2444 +4444 +4444 +87FC +ENDCHAR +STARTCHAR uni6CBA +ENCODING 27834 +BBX 14 15 1 -1 +BITMAP +4000 +2000 +17FC +0444 +8444 +4444 +2444 +07FC +1444 +1444 +2444 +2444 +4444 +47FC +8000 +ENDCHAR +STARTCHAR uni6CBB +ENCODING 27835 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +1080 +0110 +8108 +4234 +2FC2 +0000 +1000 +17FC +2404 +2404 +4404 +4404 +87FC +ENDCHAR +STARTCHAR uni6CBC +ENCODING 27836 +BBX 14 15 1 -1 +BITMAP +4000 +27FC +1084 +0084 +8084 +4104 +2104 +0218 +1000 +13FC +2204 +2204 +4204 +4204 +83FC +ENDCHAR +STARTCHAR uni6CBD +ENCODING 27837 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0040 +8FFE +4040 +2040 +0040 +17FC +1404 +2404 +2404 +4404 +4404 +87FC +ENDCHAR +STARTCHAR uni6CBE +ENCODING 27838 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0040 +807E +4040 +2040 +0040 +17FC +1404 +2404 +2404 +4404 +4404 +87FC +ENDCHAR +STARTCHAR uni6CBF +ENCODING 27839 +BBX 15 15 1 -1 +BITMAP +4030 +2110 +1110 +0208 +0208 +8404 +4802 +2000 +03F8 +1208 +1208 +2208 +2208 +4208 +83F8 +ENDCHAR +STARTCHAR uni6CC0 +ENCODING 27840 +BBX 14 15 0 -2 +BITMAP +23FC +1004 +1004 +87F4 +4004 +4804 +0BE4 +1224 +1224 +E224 +23E4 +2004 +2004 +2014 +0008 +ENDCHAR +STARTCHAR uni6CC1 +ENCODING 27841 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1408 +0408 +8408 +4408 +27F8 +0120 +0120 +1120 +1120 +2220 +2222 +4422 +981E +ENDCHAR +STARTCHAR uni6CC2 +ENCODING 27842 +BBX 14 15 1 -1 +BITMAP +4000 +27FC +1404 +0404 +8404 +45F4 +2514 +0514 +0514 +1514 +15F4 +2404 +2404 +4404 +841C +ENDCHAR +STARTCHAR uni6CC3 +ENCODING 27843 +BBX 14 16 0 -2 +BITMAP +0100 +2100 +1200 +13FC +8404 +4804 +43E4 +1224 +1224 +2224 +E224 +23E4 +2224 +2004 +2028 +0010 +ENDCHAR +STARTCHAR uni6CC4 +ENCODING 27844 +BBX 15 15 1 -1 +BITMAP +4000 +2490 +1490 +0490 +8490 +5FFE +2490 +0490 +1490 +14F0 +2400 +2400 +4400 +47FC +8000 +ENDCHAR +STARTCHAR uni6CC5 +ENCODING 27845 +BBX 14 15 1 -1 +BITMAP +4000 +27FC +1404 +0444 +8444 +4444 +2444 +04A4 +14A4 +1514 +2514 +260C +4404 +47FC +8000 +ENDCHAR +STARTCHAR uni6CC6 +ENCODING 27846 +BBX 15 15 1 -1 +BITMAP +4040 +2240 +1240 +03FC +8440 +4440 +2040 +0040 +17FE +1040 +20A0 +20A0 +4110 +4208 +8C06 +ENDCHAR +STARTCHAR uni6CC7 +ENCODING 27847 +BBX 15 16 0 -2 +BITMAP +0200 +2200 +1200 +121E +87D2 +4252 +4A52 +0A52 +1252 +1252 +E252 +2252 +2452 +245E +2952 +1080 +ENDCHAR +STARTCHAR uni6CC8 +ENCODING 27848 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +10F8 +1108 +8310 +44A0 +4040 +10A0 +1318 +2C06 +E0C0 +2020 +2010 +2180 +2060 +0010 +ENDCHAR +STARTCHAR uni6CC9 +ENCODING 27849 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0104 +7D88 +0550 +0920 +3118 +C106 +0700 +ENDCHAR +STARTCHAR uni6CCA +ENCODING 27850 +BBX 14 15 1 -1 +BITMAP +2080 +1080 +0900 +07FC +8404 +4404 +2404 +0404 +17FC +1404 +2404 +2404 +4404 +4404 +87FC +ENDCHAR +STARTCHAR uni6CCB +ENCODING 27851 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +17FC +8040 +4040 +4150 +1110 +1110 +2FFE +E110 +2110 +2210 +2210 +2410 +0810 +ENDCHAR +STARTCHAR uni6CCC +ENCODING 27852 +BBX 15 15 1 -1 +BITMAP +4100 +2080 +1040 +0108 +8108 +4108 +2110 +0510 +1528 +1524 +2942 +2980 +4104 +4684 +987C +ENDCHAR +STARTCHAR uni6CCD +ENCODING 27853 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +1040 +87FC +4040 +48E0 +08E0 +1150 +1150 +E248 +25F4 +2842 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6CCE +ENCODING 27854 +BBX 15 16 0 -2 +BITMAP +0100 +2100 +1100 +11FE +8280 +4280 +4480 +10F8 +1080 +2080 +E080 +20FC +2080 +2080 +2080 +0080 +ENDCHAR +STARTCHAR uni6CCF +ENCODING 27855 +BBX 14 16 0 -2 +BITMAP +0040 +2040 +1248 +1248 +8248 +4248 +4BF8 +0848 +1040 +1040 +E444 +2444 +2444 +2444 +27FC +0004 +ENDCHAR +STARTCHAR uni6CD0 +ENCODING 27856 +BBX 15 15 1 -1 +BITMAP +4010 +2F90 +1890 +0890 +897E +4912 +2A12 +0912 +0912 +1892 +1892 +28A2 +2B22 +4842 +888C +ENDCHAR +STARTCHAR uni6CD1 +ENCODING 27857 +BBX 14 16 0 -2 +BITMAP +0220 +4220 +2220 +2420 +057C +8924 +4E24 +4224 +1424 +2424 +E924 +2F24 +2144 +2044 +2094 +0108 +ENDCHAR +STARTCHAR uni6CD2 +ENCODING 27858 +BBX 15 16 0 -2 +BITMAP +0008 +203C +13D0 +1290 +8290 +4290 +4A90 +0A90 +1290 +1288 +E288 +22C8 +22A4 +24D4 +2492 +0800 +ENDCHAR +STARTCHAR uni6CD3 +ENCODING 27859 +BBX 15 15 1 -1 +BITMAP +4010 +2710 +1110 +0110 +8110 +4710 +2410 +0410 +1720 +1120 +2128 +2124 +4124 +414E +86F2 +ENDCHAR +STARTCHAR uni6CD4 +ENCODING 27860 +BBX 15 15 1 -1 +BITMAP +4108 +2108 +1108 +07FE +8108 +4108 +2108 +0108 +11F8 +1108 +2108 +2108 +4108 +4108 +81F8 +ENDCHAR +STARTCHAR uni6CD5 +ENCODING 27861 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +07FC +8040 +4040 +2040 +0FFE +1080 +1090 +2088 +2104 +411C +41E2 +8E02 +ENDCHAR +STARTCHAR uni6CD6 +ENCODING 27862 +BBX 15 15 1 -1 +BITMAP +4080 +2100 +161E +0492 +8492 +4492 +2492 +0492 +0492 +1492 +1792 +2C92 +211E +4110 +8210 +ENDCHAR +STARTCHAR uni6CD7 +ENCODING 27863 +BBX 14 15 1 -1 +BITMAP +4000 +2000 +1FFC +0924 +8924 +4924 +2924 +0A24 +1A3C +1C04 +2804 +2804 +4804 +4FFC +8000 +ENDCHAR +STARTCHAR uni6CD8 +ENCODING 27864 +BBX 15 16 0 -2 +BITMAP +0010 +2078 +17C0 +1040 +8444 +4244 +4248 +1040 +17FE +2040 +E040 +2040 +2040 +2040 +2140 +0080 +ENDCHAR +STARTCHAR uni6CD9 +ENCODING 27865 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1040 +0250 +8248 +4444 +2844 +0040 +1FFE +1040 +2040 +2040 +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6CDA +ENCODING 27866 +BBX 15 15 1 -1 +BITMAP +4220 +2220 +1220 +0A20 +8A26 +4BB8 +2A20 +0A20 +0A20 +2A20 +2A20 +2A20 +4A22 +4BA2 +9C1E +ENDCHAR +STARTCHAR uni6CDB +ENCODING 27867 +BBX 15 15 1 -1 +BITMAP +400C +2070 +17C0 +0040 +8040 +4040 +27FC +0008 +1010 +1020 +2040 +2280 +4500 +48C0 +903E +ENDCHAR +STARTCHAR uni6CDC +ENCODING 27868 +BBX 15 15 1 -1 +BITMAP +4038 +27E0 +1420 +0420 +8420 +4420 +27FE +0420 +0420 +1410 +1410 +2790 +2C0A +400A +8FE4 +ENDCHAR +STARTCHAR uni6CDD +ENCODING 27869 +BBX 15 15 1 -1 +BITMAP +4038 +23C0 +1200 +0200 +8200 +43FE +2210 +0210 +12D0 +1238 +2216 +2410 +4410 +4810 +8010 +ENDCHAR +STARTCHAR uni6CDE +ENCODING 27870 +BBX 14 16 0 -2 +BITMAP +0080 +2040 +1040 +17FC +8404 +4808 +4000 +1000 +17FC +2040 +E040 +2040 +2040 +2040 +2140 +0080 +ENDCHAR +STARTCHAR uni6CDF +ENCODING 27871 +BBX 15 14 0 -1 +BITMAP +27FC +1040 +1040 +8040 +4040 +4A40 +0A78 +1240 +1240 +E240 +2240 +2240 +2240 +2FFE +ENDCHAR +STARTCHAR uni6CE0 +ENCODING 27872 +BBX 15 15 1 -1 +BITMAP +4040 +20A0 +1110 +0208 +85F6 +4000 +2000 +07FC +1084 +1084 +2084 +2084 +409C +4080 +8080 +ENDCHAR +STARTCHAR uni6CE1 +ENCODING 27873 +BBX 15 15 1 -1 +BITMAP +4200 +2200 +13FC +0404 +8404 +4BE4 +2024 +0024 +1024 +17E4 +2418 +2400 +4402 +4402 +83FE +ENDCHAR +STARTCHAR uni6CE2 +ENCODING 27874 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FE +0442 +8444 +4440 +27FC +0504 +1504 +1488 +2488 +2850 +4820 +50D8 +8306 +ENDCHAR +STARTCHAR uni6CE3 +ENCODING 27875 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +07FC +8000 +4208 +2208 +0208 +1110 +1110 +2110 +2020 +4020 +4FFE +8000 +ENDCHAR +STARTCHAR uni6CE4 +ENCODING 27876 +BBX 15 16 0 -2 +BITMAP +0008 +2108 +1088 +1448 +8448 +4408 +4408 +1408 +1410 +2410 +E410 +2528 +2624 +2444 +2082 +0102 +ENDCHAR +STARTCHAR uni6CE5 +ENCODING 27877 +BBX 15 15 1 -1 +BITMAP +4000 +23FC +1204 +0204 +83FC +4200 +2280 +0284 +1298 +12E0 +2280 +2480 +4482 +4882 +807E +ENDCHAR +STARTCHAR uni6CE6 +ENCODING 27878 +BBX 15 15 0 -2 +BITMAP +23FC +1204 +1204 +83FC +4240 +4A40 +0A40 +13F8 +1248 +E248 +2248 +2488 +248A +290A +0206 +ENDCHAR +STARTCHAR uni6CE7 +ENCODING 27879 +BBX 15 16 0 -2 +BITMAP +0028 +2024 +1024 +1020 +83FE +4220 +4A24 +0A24 +1224 +1228 +E228 +2290 +2312 +222A +2046 +0082 +ENDCHAR +STARTCHAR uni6CE8 +ENCODING 27880 +BBX 15 15 1 -1 +BITMAP +4080 +2040 +1040 +07FC +0040 +8040 +4040 +2040 +07FC +1040 +1040 +2040 +2040 +4040 +8FFE +ENDCHAR +STARTCHAR uni6CE9 +ENCODING 27881 +BBX 15 15 1 -1 +BITMAP +4040 +2240 +1240 +0240 +83FC +4440 +2840 +0040 +0040 +17FC +1040 +2040 +2040 +4040 +8FFE +ENDCHAR +STARTCHAR uni6CEA +ENCODING 27882 +BBX 13 15 1 -1 +BITMAP +4000 +23F8 +1208 +0208 +8208 +43F8 +2208 +0208 +1208 +13F8 +2208 +2208 +4208 +4208 +83F8 +ENDCHAR +STARTCHAR uni6CEB +ENCODING 27883 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0FFE +8080 +4110 +2610 +0120 +1140 +1080 +2090 +2108 +411C +4262 +8F82 +ENDCHAR +STARTCHAR uni6CEC +ENCODING 27884 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0FFE +8802 +4802 +2822 +0010 +0110 +1110 +1110 +2208 +2208 +4404 +8802 +ENDCHAR +STARTCHAR uni6CED +ENCODING 27885 +BBX 15 15 1 -1 +BITMAP +4108 +2108 +1108 +0208 +82FE +4608 +2A08 +1288 +0248 +1248 +1208 +2208 +2208 +4208 +8238 +ENDCHAR +STARTCHAR uni6CEE +ENCODING 27886 +BBX 15 15 1 -1 +BITMAP +4248 +2244 +1444 +0040 +87FC +4040 +2040 +0040 +1FFE +1040 +2040 +2040 +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6CEF +ENCODING 27887 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1408 +0408 +8408 +47F8 +2420 +0420 +17FE +1420 +2420 +2410 +4492 +470A +9C04 +ENDCHAR +STARTCHAR uni6CF0 +ENCODING 27888 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0280 +FFFE +0440 +0920 +3918 +C536 +03C0 +0D30 +710E +0700 +ENDCHAR +STARTCHAR uni6CF1 +ENCODING 27889 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +03F8 +8248 +4248 +2248 +0248 +1248 +1FFE +20A0 +2110 +4208 +4404 +9802 +ENDCHAR +STARTCHAR uni6CF2 +ENCODING 27890 +BBX 14 16 0 -2 +BITMAP +0040 +2040 +105C +13E0 +8240 +4240 +4A40 +0BFC +1044 +10C4 +E144 +2254 +2C48 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6CF3 +ENCODING 27891 +BBX 15 15 1 -1 +BITMAP +4400 +2300 +10C0 +0000 +8780 +4084 +20C8 +0ED0 +02D0 +22A0 +24A0 +2490 +4888 +5086 +8380 +ENDCHAR +STARTCHAR uni6CF4 +ENCODING 27892 +BBX 15 15 0 -1 +BITMAP +0100 +0108 +7D10 +05A0 +0960 +3118 +C506 +0200 +0000 +3FF8 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni6CF5 +ENCODING 27893 +BBX 15 15 0 -2 +BITMAP +FFFE +0400 +0800 +1FF0 +2810 +C810 +0FF0 +0100 +0104 +7D88 +0950 +1120 +2118 +C506 +0200 +ENDCHAR +STARTCHAR uni6CF6 +ENCODING 27894 +BBX 15 16 0 -2 +BITMAP +2208 +1108 +1110 +0020 +7FFE +4002 +8004 +0100 +0104 +7D88 +0550 +0920 +1110 +2108 +C506 +0200 +ENDCHAR +STARTCHAR uni6CF7 +ENCODING 27895 +BBX 15 16 0 -2 +BITMAP +0120 +2110 +1110 +1100 +87FE +4140 +4940 +0948 +1148 +1250 +E250 +2262 +2442 +24C2 +293E +1000 +ENDCHAR +STARTCHAR uni6CF8 +ENCODING 27896 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +107E +1040 +8040 +43FC +4A04 +0A04 +1204 +13FC +E204 +2200 +2200 +2400 +2400 +0800 +ENDCHAR +STARTCHAR uni6CF9 +ENCODING 27897 +BBX 15 14 0 -1 +BITMAP +23F8 +1208 +1208 +8208 +4208 +4BF8 +0A08 +1208 +1208 +E208 +23F8 +2000 +2000 +2FFE +ENDCHAR +STARTCHAR uni6CFA +ENCODING 27898 +BBX 15 16 0 -2 +BITMAP +0008 +203C +17C0 +1400 +8440 +4440 +4440 +17FE +1040 +2040 +E248 +2244 +2442 +2842 +2140 +0080 +ENDCHAR +STARTCHAR uni6CFB +ENCODING 27899 +BBX 15 15 1 -1 +BITMAP +4000 +27FE +1402 +0482 +84FA +4080 +2100 +01F8 +1108 +1008 +27FE +2008 +4010 +4010 +80E0 +ENDCHAR +STARTCHAR uni6CFC +ENCODING 27900 +BBX 15 16 0 -2 +BITMAP +0040 +2048 +1244 +1240 +83FE +4080 +4880 +08FC +1144 +1144 +E148 +2250 +2220 +2450 +2888 +0306 +ENDCHAR +STARTCHAR uni6CFD +ENCODING 27901 +BBX 15 15 0 -2 +BITMAP +27F8 +1208 +1110 +80A0 +4040 +41B0 +164E +1040 +23F8 +E040 +2040 +27FC +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6CFE +ENCODING 27902 +BBX 15 14 0 -1 +BITMAP +27F8 +1010 +1020 +8060 +4098 +4104 +1602 +1000 +23FC +E040 +2040 +2040 +2040 +27FE +ENDCHAR +STARTCHAR uni6CFF +ENCODING 27903 +BBX 15 15 0 -2 +BITMAP +23F8 +1208 +1208 +83F8 +4208 +4A08 +0BF8 +1244 +1248 +E230 +2220 +2210 +2288 +2306 +0200 +ENDCHAR +STARTCHAR uni6D00 +ENCODING 27904 +BBX 15 15 1 -1 +BITMAP +4020 +2040 +13FC +0204 +8284 +4244 +2224 +0204 +0FFE +1204 +1244 +2244 +2444 +4444 +881C +ENDCHAR +STARTCHAR uni6D01 +ENCODING 27905 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +2040 +2FFE +0040 +8040 +47FC +5000 +1000 +23F8 +E208 +2208 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni6D02 +ENCODING 27906 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +1020 +17FE +8090 +4090 +4890 +0A94 +1292 +1292 +E492 +2090 +2110 +2110 +2250 +0420 +ENDCHAR +STARTCHAR uni6D03 +ENCODING 27907 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +1080 +17FE +8100 +4120 +4A20 +0AA4 +14A4 +1528 +EA50 +2050 +2088 +2108 +2204 +0402 +ENDCHAR +STARTCHAR uni6D04 +ENCODING 27908 +BBX 14 15 1 -1 +BITMAP +4000 +2FFC +1804 +0804 +89E4 +4924 +2924 +0924 +1924 +1924 +29E4 +2804 +4804 +4804 +8FFC +ENDCHAR +STARTCHAR uni6D05 +ENCODING 27909 +BBX 15 15 0 -2 +BITMAP +27FC +1040 +1040 +83F8 +4248 +4A48 +0BF8 +1248 +1248 +EFFE +2208 +2208 +2208 +2228 +0210 +ENDCHAR +STARTCHAR uni6D06 +ENCODING 27910 +BBX 15 14 0 -1 +BITMAP +23F8 +1010 +1020 +8044 +4764 +4168 +1150 +1250 +2248 +E444 +2942 +2080 +2000 +2FFE +ENDCHAR +STARTCHAR uni6D07 +ENCODING 27911 +BBX 14 15 0 -2 +BITMAP +27FC +1404 +1444 +8444 +4444 +47FC +1444 +1444 +24A4 +E494 +2514 +2604 +2404 +27FC +0404 +ENDCHAR +STARTCHAR uni6D08 +ENCODING 27912 +BBX 15 16 0 -2 +BITMAP +0100 +2100 +13F8 +1208 +8410 +4BFE +4200 +12F8 +1288 +2288 +E2A8 +2290 +2282 +2482 +247E +0800 +ENDCHAR +STARTCHAR uni6D09 +ENCODING 27913 +BBX 15 16 0 -2 +BITMAP +0008 +203C +13C0 +1200 +8200 +43FE +4A00 +0A00 +1200 +12FC +E284 +2284 +2484 +2484 +28FC +0084 +ENDCHAR +STARTCHAR uni6D0A +ENCODING 27914 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +1080 +0FFE +8100 +417C +2204 +0208 +1610 +1A10 +22FE +2210 +4210 +4210 +8230 +ENDCHAR +STARTCHAR uni6D0B +ENCODING 27915 +BBX 15 15 1 -1 +BITMAP +4208 +2108 +1110 +07FC +8040 +4040 +23F8 +0040 +1040 +1040 +2FFE +2040 +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6D0C +ENCODING 27916 +BBX 15 15 1 -1 +BITMAP +4002 +2FE2 +1112 +0112 +8112 +43D2 +2252 +0452 +1652 +1192 +2082 +2102 +4102 +4202 +840E +ENDCHAR +STARTCHAR uni6D0D +ENCODING 27917 +BBX 15 14 0 -1 +BITMAP +27FE +1420 +1420 +8420 +44F8 +4488 +1488 +1488 +2488 +E4F8 +2420 +2420 +2420 +27FE +ENDCHAR +STARTCHAR uni6D0E +ENCODING 27918 +BBX 14 15 1 -1 +BITMAP +4040 +2080 +17FC +0404 +8404 +4404 +27FC +0404 +1404 +1404 +27FC +2404 +4404 +4404 +87FC +ENDCHAR +STARTCHAR uni6D0F +ENCODING 27919 +BBX 15 15 0 -2 +BITMAP +2FFE +1040 +1040 +8080 +47FC +44A4 +14A4 +14A4 +24A4 +E4A4 +24A4 +24A4 +2484 +2414 +0408 +ENDCHAR +STARTCHAR uni6D10 +ENCODING 27920 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +113C +1200 +8480 +4080 +497E +0B08 +1508 +1108 +E108 +2108 +2108 +2108 +2128 +0110 +ENDCHAR +STARTCHAR uni6D11 +ENCODING 27921 +BBX 15 16 0 -2 +BITMAP +0120 +4128 +2124 +2224 +0220 +8620 +4AFC +4220 +1220 +2250 +E250 +2250 +2288 +2288 +2304 +0202 +ENDCHAR +STARTCHAR uni6D12 +ENCODING 27922 +BBX 15 15 1 -1 +BITMAP +4000 +3FFE +1120 +0120 +8120 +4FFC +2924 +0924 +1A24 +1A3C +2C04 +2804 +4804 +4804 +8FFC +ENDCHAR +STARTCHAR uni6D13 +ENCODING 27923 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +1040 +8040 +43F8 +4A48 +0A48 +1248 +1258 +E0E0 +2150 +2248 +2C46 +2040 +0040 +ENDCHAR +STARTCHAR uni6D14 +ENCODING 27924 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +13FC +8040 +4040 +47FE +1010 +1010 +27FE +E010 +2210 +2110 +2110 +2050 +0020 +ENDCHAR +STARTCHAR uni6D15 +ENCODING 27925 +BBX 15 16 0 -2 +BITMAP +0010 +2110 +1108 +1208 +8404 +4BFA +4208 +1208 +13F8 +2208 +E208 +23F8 +2208 +2208 +2228 +0210 +ENDCHAR +STARTCHAR uni6D16 +ENCODING 27926 +BBX 15 15 0 -2 +BITMAP +23F8 +1208 +1208 +83F8 +4000 +4000 +17FC +1040 +2040 +EFFE +2040 +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni6D17 +ENCODING 27927 +BBX 15 15 1 -1 +BITMAP +4040 +2240 +1240 +03FC +8440 +4840 +2040 +0FFE +1120 +1120 +2120 +2220 +4222 +4422 +881E +ENDCHAR +STARTCHAR uni6D18 +ENCODING 27928 +BBX 15 16 0 -2 +BITMAP +0080 +2088 +13E8 +1090 +80A0 +47FE +4880 +0900 +13FC +1480 +E900 +21F8 +2008 +2008 +2050 +0020 +ENDCHAR +STARTCHAR uni6D19 +ENCODING 27929 +BBX 15 15 1 -1 +BITMAP +4040 +2240 +1240 +07FC +8840 +4040 +2040 +0FFE +1150 +1150 +2248 +2248 +4444 +4842 +8040 +ENDCHAR +STARTCHAR uni6D1A +ENCODING 27930 +BBX 15 16 0 -2 +BITMAP +0100 +2100 +11F8 +1310 +84A0 +4040 +51B0 +164E +1040 +23FC +E040 +2440 +27FE +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6D1B +ENCODING 27931 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +11F8 +0210 +8E10 +4120 +20E0 +0318 +1C06 +13F8 +2208 +2208 +4208 +4208 +83F8 +ENDCHAR +STARTCHAR uni6D1C +ENCODING 27932 +BBX 15 16 0 -2 +BITMAP +0800 +1FF0 +2820 +07C0 +1830 +E00E +1FF0 +1010 +1FF0 +0104 +7D88 +0950 +1120 +2118 +C506 +0200 +ENDCHAR +STARTCHAR uni6D1D +ENCODING 27933 +BBX 14 16 0 -2 +BITMAP +0080 +2040 +1040 +17FC +8404 +4888 +4080 +17FC +1110 +2110 +E210 +21A0 +2040 +20A0 +2110 +0608 +ENDCHAR +STARTCHAR uni6D1E +ENCODING 27934 +BBX 14 15 1 -1 +BITMAP +4000 +27FC +1404 +0404 +85F4 +4404 +2404 +05F4 +1514 +1514 +2514 +25F4 +4404 +4404 +841C +ENDCHAR +STARTCHAR uni6D1F +ENCODING 27935 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +1FFE +0080 +8FF8 +4088 +2FF8 +0880 +1FFC +1084 +2144 +214C +4220 +4410 +980C +ENDCHAR +STARTCHAR uni6D20 +ENCODING 27936 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1090 +1108 +83FC +4024 +4920 +0920 +11FC +1220 +E020 +27FE +2020 +2020 +2020 +0020 +ENDCHAR +STARTCHAR uni6D21 +ENCODING 27937 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +1040 +8040 +43F8 +4840 +0840 +17FE +10E0 +E150 +2150 +2248 +2444 +2842 +0040 +ENDCHAR +STARTCHAR uni6D22 +ENCODING 27938 +BBX 15 16 0 -2 +BITMAP +0100 +217C +1124 +1224 +8224 +46FE +4A24 +1224 +1224 +227C +E224 +2220 +2220 +2220 +2240 +0280 +ENDCHAR +STARTCHAR uni6D23 +ENCODING 27939 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1248 +1148 +8150 +4040 +47FE +1040 +10E0 +2150 +E150 +2248 +2444 +2842 +2040 +0040 +ENDCHAR +STARTCHAR uni6D24 +ENCODING 27940 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +10A0 +0110 +8208 +4C06 +23F8 +0040 +0040 +1040 +13F8 +2040 +2040 +4040 +8FFE +ENDCHAR +STARTCHAR uni6D25 +ENCODING 27941 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0044 +8FFE +4044 +27FC +0040 +17FC +1040 +2040 +2FFE +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6D26 +ENCODING 27942 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1080 +0080 +8100 +47FC +2404 +0404 +0404 +17FC +1404 +2404 +2404 +4404 +87FC +ENDCHAR +STARTCHAR uni6D27 +ENCODING 27943 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +1FFE +0100 +8100 +43FC +2604 +1A04 +03FC +1204 +1204 +23FC +2204 +4204 +821C +ENDCHAR +STARTCHAR uni6D28 +ENCODING 27944 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +1040 +17FC +8000 +4110 +4208 +1404 +1110 +2110 +E0A0 +2040 +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni6D29 +ENCODING 27945 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0444 +8444 +47FC +2444 +0444 +17FC +1040 +1050 +2020 +2062 +4392 +9C0C +ENDCHAR +STARTCHAR uni6D2A +ENCODING 27946 +BBX 15 15 1 -1 +BITMAP +4110 +2110 +1110 +07FC +8110 +4110 +2110 +0110 +1110 +1FFE +2000 +2110 +4208 +4404 +9802 +ENDCHAR +STARTCHAR uni6D2B +ENCODING 27947 +BBX 15 15 1 -1 +BITMAP +4040 +2080 +1080 +03F8 +82A8 +42A8 +22A8 +02A8 +12A8 +12A8 +22A8 +22A8 +42A8 +4FFE +8000 +ENDCHAR +STARTCHAR uni6D2C +ENCODING 27948 +BBX 15 15 0 -2 +BITMAP +27F8 +1408 +1408 +87F8 +4488 +4488 +14E8 +1528 +2528 +E6A8 +244A +244A +288A +2906 +1202 +ENDCHAR +STARTCHAR uni6D2D +ENCODING 27949 +BBX 15 14 0 -1 +BITMAP +23FE +1200 +1200 +83FC +4220 +4A20 +0AF8 +1220 +1220 +E220 +23FC +2200 +2200 +23FE +ENDCHAR +STARTCHAR uni6D2E +ENCODING 27950 +BBX 15 15 1 -1 +BITMAP +4120 +2128 +1528 +0530 +8320 +4120 +2120 +0120 +1330 +1D2C +2120 +2120 +4222 +4222 +841E +ENDCHAR +STARTCHAR uni6D2F +ENCODING 27951 +BBX 15 15 1 -1 +BITMAP +1000 +1EFC +F024 +1E24 +7024 +1E44 +F098 +1100 +0104 +7D88 +0550 +0920 +3118 +C106 +0700 +ENDCHAR +STARTCHAR uni6D30 +ENCODING 27952 +BBX 15 14 0 -1 +BITMAP +23FE +1200 +1200 +8200 +43FC +4A04 +0A04 +1204 +1204 +E3FC +2200 +2200 +2200 +23FE +ENDCHAR +STARTCHAR uni6D31 +ENCODING 27953 +BBX 15 15 1 -1 +BITMAP +4000 +27FE +1108 +0108 +81F8 +4108 +2108 +0108 +11F8 +1108 +2108 +210E +41F8 +4708 +8008 +ENDCHAR +STARTCHAR uni6D32 +ENCODING 27954 +BBX 15 15 1 -1 +BITMAP +4202 +2222 +0222 +0222 +8B32 +4AAA +52AA +1222 +0222 +2222 +2222 +2422 +4422 +4802 +9002 +ENDCHAR +STARTCHAR uni6D33 +ENCODING 27955 +BBX 15 15 1 -1 +BITMAP +4100 +2100 +111E +0FD2 +8252 +4252 +2252 +0252 +1452 +1492 +2692 +2192 +4152 +423E +8C00 +ENDCHAR +STARTCHAR uni6D34 +ENCODING 27956 +BBX 15 15 1 -1 +BITMAP +4108 +2108 +1210 +0FBE +8210 +4210 +2210 +0390 +0E3E +1210 +1210 +2210 +2410 +4410 +8810 +ENDCHAR +STARTCHAR uni6D35 +ENCODING 27957 +BBX 14 15 1 -1 +BITMAP +4400 +2400 +17FC +0404 +8804 +4BE4 +2224 +0224 +13E4 +1224 +2224 +23E4 +4008 +4008 +8030 +ENDCHAR +STARTCHAR uni6D36 +ENCODING 27958 +BBX 14 15 1 -1 +BITMAP +4200 +2200 +17FC +0404 +8844 +4144 +2494 +0494 +1554 +1654 +2414 +27F4 +4008 +4008 +8030 +ENDCHAR +STARTCHAR uni6D37 +ENCODING 27959 +BBX 15 14 0 -1 +BITMAP +27FE +1040 +1080 +8110 +4208 +47FC +1044 +1040 +2040 +E7FC +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6D38 +ENCODING 27960 +BBX 15 15 1 -1 +BITMAP +4040 +2444 +1444 +0248 +8248 +4040 +2040 +0FFE +1110 +1110 +2110 +2210 +4212 +4412 +880E +ENDCHAR +STARTCHAR uni6D39 +ENCODING 27961 +BBX 15 15 1 -1 +BITMAP +4000 +2FFC +1000 +0000 +87F8 +4408 +2408 +07F8 +1408 +1408 +2408 +27F8 +4000 +4000 +9FFE +ENDCHAR +STARTCHAR uni6D3A +ENCODING 27962 +BBX 14 16 0 -2 +BITMAP +0080 +2080 +10FC +1104 +8288 +4450 +4020 +1040 +11FC +2304 +ED04 +2104 +2104 +2104 +21FC +0104 +ENDCHAR +STARTCHAR uni6D3B +ENCODING 27963 +BBX 15 15 1 -1 +BITMAP +4038 +23C0 +1040 +0040 +8040 +4FFE +2040 +0040 +1040 +17FC +2404 +2404 +4404 +4404 +87FC +ENDCHAR +STARTCHAR uni6D3C +ENCODING 27964 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0040 +8040 +4040 +2FFE +0000 +0040 +1040 +17FC +2040 +2040 +4040 +8FFE +ENDCHAR +STARTCHAR uni6D3D +ENCODING 27965 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +10A0 +00A0 +8110 +4208 +25F4 +0802 +1000 +13F8 +2208 +2208 +4208 +4208 +83F8 +ENDCHAR +STARTCHAR uni6D3E +ENCODING 27966 +BBX 15 15 1 -1 +BITMAP +4018 +27E0 +1400 +0418 +84E0 +4484 +2488 +04D0 +14E0 +14A0 +24A0 +2890 +4888 +5086 +8080 +ENDCHAR +STARTCHAR uni6D3F +ENCODING 27967 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FE +00A0 +8318 +4C06 +23F8 +0000 +17FE +1080 +21F8 +2208 +4008 +4008 +8070 +ENDCHAR +STARTCHAR uni6D40 +ENCODING 27968 +BBX 15 16 0 -2 +BITMAP +0050 +2050 +1050 +1050 +83FE +4252 +4A52 +0A52 +1252 +13FE +E252 +2252 +2252 +2252 +23FE +0202 +ENDCHAR +STARTCHAR uni6D41 +ENCODING 27969 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FE +0080 +8088 +4134 +27C4 +0000 +1248 +1248 +2248 +2248 +444A +444A +8806 +ENDCHAR +STARTCHAR uni6D42 +ENCODING 27970 +BBX 15 16 0 -2 +BITMAP +0208 +2108 +1110 +1000 +83FC +4040 +4840 +0840 +17FE +1040 +E040 +20A0 +20A0 +2110 +2208 +0406 +ENDCHAR +STARTCHAR uni6D43 +ENCODING 27971 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +17FC +8040 +4248 +5150 +1040 +1FFE +20A0 +E0A0 +2110 +2110 +2208 +2404 +0802 +ENDCHAR +STARTCHAR uni6D44 +ENCODING 27972 +BBX 15 15 1 -1 +BITMAP +4080 +21F0 +1220 +0040 +83F8 +4048 +2048 +0FFE +1048 +1048 +23F8 +2040 +4040 +4040 +81C0 +ENDCHAR +STARTCHAR uni6D45 +ENCODING 27973 +BBX 15 15 1 -1 +BITMAP +4090 +2088 +17FC +0080 +8080 +47F8 +2080 +0080 +1FFC +1080 +2048 +2050 +4022 +40D2 +8F0C +ENDCHAR +STARTCHAR uni6D46 +ENCODING 27974 +BBX 15 16 0 -2 +BITMAP +0840 +4840 +28FC +0904 +1A88 +2850 +4860 +8980 +0104 +7D88 +0550 +0920 +1110 +2108 +C506 +0200 +ENDCHAR +STARTCHAR uni6D47 +ENCODING 27975 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +10BC +13C0 +8050 +4024 +48D4 +0B0C +1000 +17FE +E090 +2090 +2112 +2112 +220E +0400 +ENDCHAR +STARTCHAR uni6D48 +ENCODING 27976 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +107E +1040 +8040 +43F8 +4A08 +0A48 +1248 +1248 +E248 +2248 +20A0 +2110 +2208 +0404 +ENDCHAR +STARTCHAR uni6D49 +ENCODING 27977 +BBX 15 16 0 -2 +BITMAP +0100 +21FE +1110 +1510 +857C +4554 +4554 +1554 +1554 +2554 +E554 +2154 +225C +2210 +2410 +0810 +ENDCHAR +STARTCHAR uni6D4A +ENCODING 27978 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +1040 +17FC +8444 +4444 +4444 +1444 +17FC +2444 +E040 +2048 +2044 +2FFE +2402 +ENDCHAR +STARTCHAR uni6D4B +ENCODING 27979 +BBX 14 16 0 -2 +BITMAP +0004 +27C4 +1444 +1454 +8554 +4554 +4554 +1554 +1554 +2554 +E554 +2104 +2284 +2244 +2414 +0808 +ENDCHAR +STARTCHAR uni6D4C +ENCODING 27980 +BBX 15 16 0 -2 +BITMAP +0120 +2128 +1124 +1224 +8220 +463E +4BE0 +1224 +1224 +2228 +E228 +2210 +2212 +222A +2246 +0282 +ENDCHAR +STARTCHAR uni6D4D +ENCODING 27981 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +10A0 +1110 +8208 +4406 +41F0 +1000 +1000 +27FC +E040 +2080 +2110 +2208 +27FC +0204 +ENDCHAR +STARTCHAR uni6D4E +ENCODING 27982 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FE +1208 +8110 +40A0 +4040 +11B0 +160E +2110 +E110 +2110 +2110 +2210 +2210 +0410 +ENDCHAR +STARTCHAR uni6D4F +ENCODING 27983 +BBX 14 16 0 -2 +BITMAP +0204 +4104 +2104 +2FE4 +0094 +8494 +4294 +5294 +1114 +2114 +E294 +2294 +2444 +2844 +3014 +0008 +ENDCHAR +STARTCHAR uni6D50 +ENCODING 27984 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +13FC +1000 +8108 +4090 +4BFE +0A00 +1200 +1200 +E200 +2200 +2200 +2400 +2400 +0800 +ENDCHAR +STARTCHAR uni6D51 +ENCODING 27985 +BBX 15 15 0 -2 +BITMAP +23FE +1202 +1444 +8040 +43FC +4880 +08A0 +1120 +11FC +E020 +2020 +27FE +2020 +2020 +0020 +ENDCHAR +STARTCHAR uni6D52 +ENCODING 27986 +BBX 15 16 0 -2 +BITMAP +0040 +4440 +2240 +227C +0050 +8090 +4E10 +5210 +12FE +2210 +E210 +2290 +2310 +2210 +2010 +0010 +ENDCHAR +STARTCHAR uni6D53 +ENCODING 27987 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +17FC +8484 +4888 +4140 +1144 +1348 +2530 +E920 +2110 +2108 +2144 +2182 +0100 +ENDCHAR +STARTCHAR uni6D54 +ENCODING 27988 +BBX 15 15 0 -2 +BITMAP +27F8 +1008 +1008 +83F8 +4008 +4008 +17F8 +1010 +2010 +EFFE +2210 +2110 +2110 +2050 +0020 +ENDCHAR +STARTCHAR uni6D55 +ENCODING 27989 +BBX 15 14 0 -1 +BITMAP +23F8 +1208 +1208 +83F8 +4220 +4A20 +0A10 +1208 +14C6 +E420 +2800 +21C0 +2030 +2008 +ENDCHAR +STARTCHAR uni6D56 +ENCODING 27990 +BBX 14 16 0 -2 +BITMAP +0010 +2078 +1780 +1088 +8448 +4250 +4200 +1020 +17FC +2020 +E220 +2120 +2120 +2020 +20A0 +0040 +ENDCHAR +STARTCHAR uni6D57 +ENCODING 27991 +BBX 15 16 0 -2 +BITMAP +0050 +2048 +1048 +1040 +87FE +4040 +4A44 +0964 +1168 +10D0 +E150 +2248 +2444 +2042 +2140 +0080 +ENDCHAR +STARTCHAR uni6D58 +ENCODING 27992 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1408 +07F8 +8400 +4430 +25C0 +0440 +1478 +17C0 +2440 +287C +4FC0 +5042 +803E +ENDCHAR +STARTCHAR uni6D59 +ENCODING 27993 +BBX 15 15 1 -1 +BITMAP +840C +4470 +2440 +1F40 +847E +4448 +2448 +0748 +3C48 +2448 +2448 +4488 +4488 +4508 +8C08 +ENDCHAR +STARTCHAR uni6D5A +ENCODING 27994 +BBX 15 15 1 -1 +BITMAP +4080 +2090 +1138 +07E4 +8120 +4220 +253E +0900 +11F8 +1208 +2510 +28A0 +4040 +41B0 +8E0E +ENDCHAR +STARTCHAR uni6D5B +ENCODING 27995 +BBX 15 15 1 -1 +BITMAP +4040 +20A0 +1110 +0208 +8DF6 +4000 +23F8 +0008 +0010 +1020 +13F8 +2208 +2208 +4208 +83F8 +ENDCHAR +STARTCHAR uni6D5C +ENCODING 27996 +BBX 15 15 1 -1 +BITMAP +4038 +23C0 +1200 +0200 +83FC +4210 +2210 +0210 +1210 +1210 +3FFE +2000 +4110 +4208 +8C06 +ENDCHAR +STARTCHAR uni6D5D +ENCODING 27997 +BBX 15 16 0 -2 +BITMAP +0110 +2108 +1100 +17FE +8148 +4150 +4964 +0948 +1150 +1264 +E248 +2252 +2462 +2442 +29BE +1000 +ENDCHAR +STARTCHAR uni6D5E +ENCODING 27998 +BBX 15 15 1 -1 +BITMAP +4000 +23FC +1204 +0204 +8204 +4204 +23FC +0040 +0040 +1240 +127C +2240 +2540 +48C0 +903E +ENDCHAR +STARTCHAR uni6D5F +ENCODING 27999 +BBX 15 16 0 -2 +BITMAP +0210 +2210 +1210 +1420 +853E +4D44 +4DA4 +1524 +1528 +2528 +E510 +2510 +2428 +2428 +2444 +0482 +ENDCHAR +STARTCHAR uni6D60 +ENCODING 28000 +BBX 15 15 1 -1 +BITMAP +4208 +2190 +1060 +0198 +8E80 +4080 +3FFE +0140 +07FC +1C44 +1444 +2444 +244C +4040 +8040 +ENDCHAR +STARTCHAR uni6D61 +ENCODING 28001 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +13FC +1040 +8040 +47FE +5402 +1804 +11F0 +2010 +E020 +2FFE +2040 +2040 +2140 +0080 +ENDCHAR +STARTCHAR uni6D62 +ENCODING 28002 +BBX 15 14 0 -1 +BITMAP +27FC +1000 +1000 +83F8 +4208 +4A08 +0A08 +1208 +13F8 +E000 +2208 +2108 +2110 +2FFE +ENDCHAR +STARTCHAR uni6D63 +ENCODING 28003 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +0FFC +0804 +8804 +43F0 +2000 +0000 +1FFC +1120 +2120 +2220 +4222 +4422 +881E +ENDCHAR +STARTCHAR uni6D64 +ENCODING 28004 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +0FFC +0804 +8884 +4080 +3FFE +0100 +1140 +1240 +2240 +2490 +4888 +513C +87C4 +ENDCHAR +STARTCHAR uni6D65 +ENCODING 28005 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1208 +0208 +83F8 +4000 +27FC +0444 +1444 +1444 +27FC +2400 +4402 +4402 +83FE +ENDCHAR +STARTCHAR uni6D66 +ENCODING 28006 +BBX 15 15 1 -1 +BITMAP +4048 +2044 +1FFE +0040 +87FC +4444 +2444 +07FC +1444 +1444 +27FC +2444 +4444 +4444 +844C +ENDCHAR +STARTCHAR uni6D67 +ENCODING 28007 +BBX 15 14 0 -1 +BITMAP +23F8 +1208 +1208 +8208 +43F8 +4800 +0800 +17FC +1040 +E040 +23F8 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6D68 +ENCODING 28008 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FE +1402 +8844 +4040 +4040 +17FC +10E0 +2150 +E150 +2248 +2444 +2842 +2040 +0040 +ENDCHAR +STARTCHAR uni6D69 +ENCODING 28009 +BBX 15 15 1 -1 +BITMAP +4240 +2240 +1240 +07FC +8440 +4840 +2040 +0FFE +1000 +13F8 +2208 +2208 +4208 +4208 +83F8 +ENDCHAR +STARTCHAR uni6D6A +ENCODING 28010 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +17F8 +0408 +8408 +47F8 +2408 +0408 +17FA +1444 +2428 +2430 +4490 +4708 +9C06 +ENDCHAR +STARTCHAR uni6D6B +ENCODING 28011 +BBX 15 15 0 -2 +BITMAP +47FE +2402 +2914 +0208 +8404 +43F8 +5040 +1040 +2040 +E7FC +2040 +2040 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6D6C +ENCODING 28012 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1444 +0444 +87FC +4444 +2444 +07FC +1040 +1040 +27FC +2040 +4040 +4040 +8FFE +ENDCHAR +STARTCHAR uni6D6D +ENCODING 28013 +BBX 15 15 0 -2 +BITMAP +2FFE +1040 +17FC +8444 +4444 +47FC +1444 +1444 +27FC +E240 +2140 +2080 +2140 +2230 +0C0E +ENDCHAR +STARTCHAR uni6D6E +ENCODING 28014 +BBX 15 15 1 -1 +BITMAP +4038 +2FC0 +1484 +0488 +8250 +47FC +2008 +0030 +1040 +1FFE +2040 +2040 +4040 +4040 +81C0 +ENDCHAR +STARTCHAR uni6D6F +ENCODING 28015 +BBX 15 15 0 -2 +BITMAP +27FC +1040 +1040 +83F8 +4088 +4088 +17FE +1000 +2000 +E3F8 +2208 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni6D70 +ENCODING 28016 +BBX 14 15 1 -1 +BITMAP +4184 +2E04 +1224 +0224 +8224 +5FA4 +2224 +0624 +0724 +16A4 +1AA4 +2A24 +2204 +4204 +821C +ENDCHAR +STARTCHAR uni6D71 +ENCODING 28017 +BBX 15 15 0 -2 +BITMAP +23FC +1200 +1200 +82F8 +4200 +4A00 +0BFC +12A0 +12A4 +E2A8 +2290 +2290 +2488 +24A4 +08C2 +ENDCHAR +STARTCHAR uni6D72 +ENCODING 28018 +BBX 15 16 0 -2 +BITMAP +0100 +21F8 +1308 +1490 +8060 +4198 +4646 +1040 +13F8 +2040 +E3F8 +2040 +27FC +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6D73 +ENCODING 28019 +BBX 15 16 0 -2 +BITMAP +0088 +2084 +10BE +17C0 +8032 +400E +4800 +0BFC +1204 +13FC +E204 +23FC +2204 +2204 +2214 +0208 +ENDCHAR +STARTCHAR uni6D74 +ENCODING 28020 +BBX 15 15 1 -1 +BITMAP +4110 +2208 +1404 +0842 +8040 +40A0 +2110 +0208 +1404 +13F8 +2208 +2208 +4208 +4208 +83F8 +ENDCHAR +STARTCHAR uni6D75 +ENCODING 28021 +BBX 15 16 0 -2 +BITMAP +0002 +2782 +1484 +1488 +8690 +4582 +4482 +1484 +1FC8 +2490 +E482 +2482 +2484 +2488 +2890 +11A0 +ENDCHAR +STARTCHAR uni6D76 +ENCODING 28022 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +13FE +1202 +8424 +4120 +49FC +0920 +1220 +1020 +E7FE +2020 +2020 +2020 +2020 +0020 +ENDCHAR +STARTCHAR uni6D77 +ENCODING 28023 +BBX 15 15 1 -1 +BITMAP +4200 +2200 +17FC +0400 +8800 +43F8 +2248 +0248 +1FFE +1488 +2488 +2488 +47FE +4010 +8070 +ENDCHAR +STARTCHAR uni6D78 +ENCODING 28024 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1008 +03F8 +8008 +43F8 +2000 +0FFE +0802 +0BFA +2108 +2090 +4060 +4198 +8E06 +ENDCHAR +STARTCHAR uni6D79 +ENCODING 28025 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +0FFE +0040 +8248 +4248 +2248 +0554 +1554 +18A2 +20A0 +2110 +4208 +4404 +8802 +ENDCHAR +STARTCHAR uni6D7A +ENCODING 28026 +BBX 15 16 0 -2 +BITMAP +0108 +2108 +1108 +113E +81AA +456A +452A +152A +192A +213E +E12A +2108 +2108 +2108 +2108 +0108 +ENDCHAR +STARTCHAR uni6D7B +ENCODING 28027 +BBX 14 15 0 -2 +BITMAP +27FC +1404 +14A4 +8514 +460C +5404 +15F4 +1514 +2514 +E514 +25F4 +2514 +2404 +2414 +0408 +ENDCHAR +STARTCHAR uni6D7C +ENCODING 28028 +BBX 15 16 0 -2 +BITMAP +0100 +2100 +11F0 +1210 +8220 +47FC +4A44 +1244 +1244 +23FC +E2A4 +20A0 +2120 +2222 +2422 +081E +ENDCHAR +STARTCHAR uni6D7D +ENCODING 28029 +BBX 15 16 0 -2 +BITMAP +0008 +203C +13C0 +1044 +8224 +4128 +4900 +0840 +13FE +1088 +E108 +2390 +2060 +2050 +2188 +0604 +ENDCHAR +STARTCHAR uni6D7E +ENCODING 28030 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +13FC +1040 +8040 +4040 +47FE +1090 +1294 +2292 +E492 +2912 +2110 +2210 +2450 +0820 +ENDCHAR +STARTCHAR uni6D7F +ENCODING 28031 +BBX 14 15 0 -2 +BITMAP +23FC +1204 +1204 +83FC +4204 +4A04 +0BFC +1204 +1204 +E3FC +2000 +2110 +2108 +2204 +0404 +ENDCHAR +STARTCHAR uni6D80 +ENCODING 28032 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1408 +07F8 +8408 +4408 +27F8 +0408 +0408 +17F8 +1120 +2120 +2222 +4422 +981E +ENDCHAR +STARTCHAR uni6D81 +ENCODING 28033 +BBX 15 15 1 -1 +BITMAP +4204 +2208 +1230 +0F80 +8200 +4204 +2708 +0690 +0AE0 +2A02 +3202 +2204 +4208 +4230 +82C0 +ENDCHAR +STARTCHAR uni6D82 +ENCODING 28034 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +10A0 +0110 +8208 +4DF6 +2040 +0040 +17FC +1040 +2248 +2248 +4444 +4842 +81C0 +ENDCHAR +STARTCHAR uni6D83 +ENCODING 28035 +BBX 14 15 0 -2 +BITMAP +27FC +1444 +1444 +8444 +47FC +4444 +14C4 +14E4 +2554 +E644 +2444 +2444 +2404 +27FC +0404 +ENDCHAR +STARTCHAR uni6D84 +ENCODING 28036 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +1444 +87FC +4444 +47FC +1000 +1FFE +2100 +E200 +23FC +2004 +2004 +2028 +0010 +ENDCHAR +STARTCHAR uni6D85 +ENCODING 28037 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1208 +0208 +83F8 +4208 +2208 +03F8 +1040 +1040 +27FC +2040 +4040 +4040 +8FFE +ENDCHAR +STARTCHAR uni6D86 +ENCODING 28038 +BBX 15 15 0 -2 +BITMAP +203E +1788 +1488 +8488 +4488 +4488 +17BE +1488 +2488 +E488 +2488 +2788 +2488 +2008 +0008 +ENDCHAR +STARTCHAR uni6D87 +ENCODING 28039 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1000 +0248 +8248 +4490 +2490 +0248 +1248 +1000 +27FC +2040 +4040 +4040 +8FFE +ENDCHAR +STARTCHAR uni6D88 +ENCODING 28040 +BBX 15 15 1 -1 +BITMAP +4222 +2124 +1128 +0020 +83FC +4204 +2204 +03FC +1204 +1204 +23FC +2204 +4204 +4204 +821C +ENDCHAR +STARTCHAR uni6D89 +ENCODING 28041 +BBX 15 15 1 -1 +BITMAP +4040 +2240 +127C +0240 +8240 +4FFE +2040 +0244 +1444 +1848 +21C8 +2010 +4020 +40C0 +8700 +ENDCHAR +STARTCHAR uni6D8A +ENCODING 28042 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1044 +0244 +8484 +4888 +2108 +0230 +0040 +1020 +1124 +2504 +2502 +488A +8878 +ENDCHAR +STARTCHAR uni6D8B +ENCODING 28043 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +13FE +1202 +8404 +4050 +4048 +1040 +17FE +2040 +E0A0 +20A0 +2110 +2110 +2208 +0406 +ENDCHAR +STARTCHAR uni6D8C +ENCODING 28044 +BBX 14 15 1 -1 +BITMAP +4000 +2FFC +1008 +0110 +80A0 +47FC +2444 +0444 +17FC +1444 +2444 +27FC +4444 +4444 +845C +ENDCHAR +STARTCHAR uni6D8D +ENCODING 28045 +BBX 15 15 1 -1 +BITMAP +4080 +2088 +17F8 +0088 +8090 +4FFE +2040 +07F8 +0110 +1620 +1840 +27FE +2040 +4040 +81C0 +ENDCHAR +STARTCHAR uni6D8E +ENCODING 28046 +BBX 15 15 1 -1 +BITMAP +800C +5E30 +24D0 +0810 +8810 +5E9C +2290 +0A90 +0A90 +2A90 +2690 +24FE +4A00 +51C0 +A03E +ENDCHAR +STARTCHAR uni6D8F +ENCODING 28047 +BBX 15 15 0 -2 +BITMAP +200C +1770 +1110 +8110 +4210 +427C +1710 +1110 +2510 +E510 +227C +2200 +2500 +28FE +1000 +ENDCHAR +STARTCHAR uni6D90 +ENCODING 28048 +BBX 15 16 0 -2 +BITMAP +0120 +43A8 +2E24 +2224 +0220 +9FFE +4220 +5224 +12A4 +2328 +E228 +2E10 +2232 +224A +2A86 +0402 +ENDCHAR +STARTCHAR uni6D91 +ENCODING 28049 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0040 +87FC +4444 +2444 +0444 +07FC +1150 +1150 +2248 +2444 +4842 +8040 +ENDCHAR +STARTCHAR uni6D92 +ENCODING 28050 +BBX 15 15 0 -2 +BITMAP +23F8 +1088 +1088 +87FE +4088 +4888 +0BF8 +1100 +1100 +E3F8 +2508 +2908 +2108 +21F8 +0108 +ENDCHAR +STARTCHAR uni6D93 +ENCODING 28051 +BBX 14 15 1 -1 +BITMAP +4000 +27FC +1404 +0404 +87FC +4000 +27FC +0404 +17FC +1404 +2404 +27FC +4404 +4404 +841C +ENDCHAR +STARTCHAR uni6D94 +ENCODING 28052 +BBX 14 15 1 -1 +BITMAP +4040 +2444 +1444 +07FC +8040 +40A0 +2110 +0208 +15F4 +1000 +23F8 +2010 +4010 +4020 +8040 +ENDCHAR +STARTCHAR uni6D95 +ENCODING 28053 +BBX 15 15 1 -1 +BITMAP +4208 +2110 +0FFC +0044 +8044 +47FC +2440 +0440 +17FE +1042 +20C2 +2142 +4242 +4C4C +8040 +ENDCHAR +STARTCHAR uni6D96 +ENCODING 28054 +BBX 15 16 0 -2 +BITMAP +0120 +2110 +1110 +1200 +82FE +4600 +5604 +1A84 +1284 +2248 +E248 +2248 +2250 +2210 +22FE +0200 +ENDCHAR +STARTCHAR uni6D97 +ENCODING 28055 +BBX 15 16 0 -2 +BITMAP +0010 +2090 +1088 +1108 +8204 +45FA +4108 +1108 +1108 +21F8 +E090 +2090 +2090 +2112 +2212 +040E +ENDCHAR +STARTCHAR uni6D98 +ENCODING 28056 +BBX 15 15 1 -1 +BITMAP +4080 +2090 +1088 +0114 +8FE2 +4200 +2200 +07FC +0840 +1040 +1FFE +20A0 +2110 +4208 +8C06 +ENDCHAR +STARTCHAR uni6D99 +ENCODING 28057 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1000 +07FC +8404 +4404 +27FC +0440 +1440 +17FE +2840 +28A0 +4110 +4208 +8C06 +ENDCHAR +STARTCHAR uni6D9A +ENCODING 28058 +BBX 15 16 0 -2 +BITMAP +0208 +2108 +1110 +1020 +83F8 +4208 +4A08 +0A08 +13F8 +10A0 +E0A0 +2120 +2122 +2222 +241E +0800 +ENDCHAR +STARTCHAR uni6D9B +ENCODING 28059 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FE +0040 +83FC +4040 +27FE +0080 +1088 +17FE +2108 +2288 +4448 +4008 +8038 +ENDCHAR +STARTCHAR uni6D9C +ENCODING 28060 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FE +0040 +8040 +43FC +2000 +07FE +1402 +1492 +2090 +2090 +4112 +4212 +840E +ENDCHAR +STARTCHAR uni6D9D +ENCODING 28061 +BBX 15 16 0 -2 +BITMAP +0108 +2108 +17FE +1108 +8000 +47FE +5402 +1884 +1080 +27FC +E084 +2104 +2104 +2204 +2428 +0810 +ENDCHAR +STARTCHAR uni6D9E +ENCODING 28062 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +17FC +8040 +4248 +4148 +1150 +17FE +20E0 +E150 +2150 +2248 +2444 +2842 +0040 +ENDCHAR +STARTCHAR uni6D9F +ENCODING 28063 +BBX 15 15 0 -1 +BITMAP +0020 +2420 +1220 +12FE +8040 +4050 +4E90 +12FE +1210 +2210 +E3FE +2210 +2210 +2510 +28FE +ENDCHAR +STARTCHAR uni6DA0 +ENCODING 28064 +BBX 14 15 0 -2 +BITMAP +27FC +1444 +1444 +85F4 +4444 +44E4 +1444 +15F4 +2454 +E454 +2474 +2444 +2444 +27FC +0404 +ENDCHAR +STARTCHAR uni6DA1 +ENCODING 28065 +BBX 14 15 0 -2 +BITMAP +23F8 +1208 +1208 +8208 +43F8 +4040 +1040 +17FC +2444 +E4A4 +2514 +2614 +2404 +2414 +0408 +ENDCHAR +STARTCHAR uni6DA2 +ENCODING 28066 +BBX 15 15 0 -2 +BITMAP +23F8 +1208 +1208 +83F8 +4000 +4000 +17FC +1404 +2444 +E444 +2444 +24B4 +2108 +2604 +1802 +ENDCHAR +STARTCHAR uni6DA3 +ENCODING 28067 +BBX 15 16 0 -2 +BITMAP +0100 +2100 +11F0 +1210 +8420 +4BF8 +4248 +1248 +1248 +2248 +EFFE +20A0 +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni6DA4 +ENCODING 28068 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +11F8 +1308 +8490 +4060 +4198 +1646 +1040 +27FC +E040 +2248 +2244 +2444 +2140 +0080 +ENDCHAR +STARTCHAR uni6DA5 +ENCODING 28069 +BBX 15 16 0 -2 +BITMAP +0080 +4040 +2FFE +2000 +03F8 +8208 +4208 +53F8 +1000 +23F8 +E010 +2060 +2040 +2040 +2140 +0080 +ENDCHAR +STARTCHAR uni6DA6 +ENCODING 28070 +BBX 14 16 0 -2 +BITMAP +0200 +217C +1504 +1404 +85F4 +4444 +4444 +1444 +15F4 +2444 +E444 +2444 +25F4 +2404 +2414 +0408 +ENDCHAR +STARTCHAR uni6DA7 +ENCODING 28071 +BBX 14 16 0 -2 +BITMAP +0200 +217C +1504 +1404 +8404 +45F4 +4514 +1514 +15F4 +2514 +E514 +25F4 +2404 +2404 +2414 +0408 +ENDCHAR +STARTCHAR uni6DA8 +ENCODING 28072 +BBX 15 16 0 -2 +BITMAP +0040 +4F44 +2144 +2148 +0148 +8F50 +4840 +58FE +1850 +2F50 +E148 +2148 +2144 +2144 +2A62 +0440 +ENDCHAR +STARTCHAR uni6DA9 +ENCODING 28073 +BBX 15 14 0 -1 +BITMAP +23FC +1044 +1244 +8244 +4484 +4094 +1108 +1220 +2020 +E13C +2120 +2120 +2120 +27FE +ENDCHAR +STARTCHAR uni6DAA +ENCODING 28074 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0208 +8208 +4110 +2010 +0FFE +1000 +13F8 +2208 +2208 +4208 +4208 +83F8 +ENDCHAR +STARTCHAR uni6DAB +ENCODING 28075 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0802 +8802 +43F8 +2208 +0208 +03F8 +1200 +13FC +2204 +2204 +4204 +83FC +ENDCHAR +STARTCHAR uni6DAC +ENCODING 28076 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0040 +8040 +4FFE +2208 +0110 +1FFE +1040 +2040 +27FC +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6DAD +ENCODING 28077 +BBX 15 16 0 -2 +BITMAP +001C +23E0 +1084 +1244 +8148 +4110 +57FE +1402 +1000 +23F8 +E108 +2110 +20A0 +2040 +21B0 +060E +ENDCHAR +STARTCHAR uni6DAE +ENCODING 28078 +BBX 15 15 1 -1 +BITMAP +4002 +2FE2 +182A +082A +8FEA +488A +288A +0BEA +0AAA +1AAA +1AAA +2AA2 +2AE2 +5082 +8086 +ENDCHAR +STARTCHAR uni6DAF +ENCODING 28079 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1420 +0420 +84F8 +4420 +2420 +05FC +1400 +1420 +29FC +2820 +5020 +4020 +83FE +ENDCHAR +STARTCHAR uni6DB0 +ENCODING 28080 +BBX 15 15 0 -2 +BITMAP +27BC +1084 +1294 +8108 +4294 +54A4 +1840 +1000 +27BC +E0A4 +22A4 +2128 +2290 +24A8 +0846 +ENDCHAR +STARTCHAR uni6DB1 +ENCODING 28081 +BBX 15 15 0 -2 +BITMAP +21FC +1100 +11F8 +8100 +41F8 +5100 +1FFE +1280 +2248 +E250 +2220 +2210 +2288 +2306 +0200 +ENDCHAR +STARTCHAR uni6DB2 +ENCODING 28082 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +0FFE +0220 +8220 +447C +0444 +0C64 +3494 +2548 +2428 +4410 +4428 +8444 +8582 +ENDCHAR +STARTCHAR uni6DB3 +ENCODING 28083 +BBX 15 15 0 -1 +BITMAP +0040 +2020 +1020 +13FE +8202 +4494 +4108 +1204 +1000 +21FC +E020 +2020 +2020 +2020 +27FE +ENDCHAR +STARTCHAR uni6DB4 +ENCODING 28084 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0404 +8404 +4200 +23BC +02A4 +04A4 +14A4 +1AAC +2120 +2122 +4222 +8C1E +ENDCHAR +STARTCHAR uni6DB5 +ENCODING 28085 +BBX 15 15 1 -1 +BITMAP +4000 +3FFE +1100 +0100 +81C0 +4854 +2A54 +0964 +1844 +1964 +2A54 +2C54 +49C4 +4804 +8FFC +ENDCHAR +STARTCHAR uni6DB6 +ENCODING 28086 +BBX 15 15 0 -1 +BITMAP +0010 +2078 +13C0 +1040 +8040 +47FC +4248 +1248 +1FFE +2248 +E248 +27FC +2040 +2040 +27FC +ENDCHAR +STARTCHAR uni6DB7 +ENCODING 28087 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +1040 +83F8 +4248 +4BF8 +0A48 +13F8 +1040 +E0E0 +2150 +2248 +2C46 +2040 +0040 +ENDCHAR +STARTCHAR uni6DB8 +ENCODING 28088 +BBX 14 15 1 -1 +BITMAP +4000 +27FC +1404 +0444 +8444 +45F4 +2444 +0444 +15F4 +1514 +2514 +2514 +45F4 +4404 +87FC +ENDCHAR +STARTCHAR uni6DB9 +ENCODING 28089 +BBX 15 16 0 -2 +BITMAP +0038 +23C0 +1040 +1040 +87FC +4150 +4248 +1486 +1080 +27FC +E110 +2210 +21A0 +2060 +2090 +0308 +ENDCHAR +STARTCHAR uni6DBA +ENCODING 28090 +BBX 15 15 0 -2 +BITMAP +23FC +1204 +1204 +83FC +4220 +4A20 +0BFE +1220 +1220 +E2FC +2284 +2284 +2484 +24FC +0884 +ENDCHAR +STARTCHAR uni6DBB +ENCODING 28091 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +10A0 +1110 +8208 +45F6 +4040 +1040 +17FC +2040 +E040 +23F8 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni6DBC +ENCODING 28092 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +0FFE +0000 +83F8 +4208 +2208 +0208 +13F8 +1040 +2248 +2248 +4444 +4842 +81C0 +ENDCHAR +STARTCHAR uni6DBD +ENCODING 28093 +BBX 15 16 0 -2 +BITMAP +001C +23E0 +1220 +13FE +8220 +4292 +4B0A +0A06 +11FC +1104 +E104 +21FC +2104 +2104 +21FC +0104 +ENDCHAR +STARTCHAR uni6DBE +ENCODING 28094 +BBX 14 16 0 -2 +BITMAP +0040 +2044 +1768 +1150 +8150 +4248 +4544 +1080 +13F8 +2208 +E208 +23F8 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni6DBF +ENCODING 28095 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1080 +0180 +8244 +4C44 +20A8 +0520 +1620 +1C70 +22B0 +2328 +4624 +5842 +8180 +ENDCHAR +STARTCHAR uni6DC0 +ENCODING 28096 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0802 +8802 +47FC +2040 +0240 +1240 +1278 +2240 +2640 +4540 +48C0 +903E +ENDCHAR +STARTCHAR uni6DC1 +ENCODING 28097 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +13FC +1000 +8108 +4090 +47FE +1040 +1040 +27FE +E088 +2108 +2090 +2060 +2198 +0604 +ENDCHAR +STARTCHAR uni6DC2 +ENCODING 28098 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1208 +03F8 +8208 +4208 +23F8 +0000 +07FC +1010 +1FFE +2210 +2110 +4110 +8070 +ENDCHAR +STARTCHAR uni6DC3 +ENCODING 28099 +BBX 15 16 0 -2 +BITMAP +0040 +2248 +1150 +17FC +8080 +4100 +4FFE +1210 +1408 +2BF4 +F212 +2210 +2250 +2224 +2204 +01FC +ENDCHAR +STARTCHAR uni6DC4 +ENCODING 28100 +BBX 15 15 1 -1 +BITMAP +4222 +2444 +1888 +0888 +8444 +4222 +2000 +07FC +1444 +1444 +27FC +2444 +4444 +4444 +87FC +ENDCHAR +STARTCHAR uni6DC5 +ENCODING 28101 +BBX 15 15 1 -1 +BITMAP +440C +2470 +1440 +1F40 +847E +4448 +2C48 +0E48 +1548 +1448 +2448 +2488 +4488 +4508 +8408 +ENDCHAR +STARTCHAR uni6DC6 +ENCODING 28102 +BBX 15 15 1 -1 +BITMAP +4208 +2130 +11C0 +0638 +8080 +5FFE +2100 +03F8 +1608 +1BF8 +2208 +23F8 +4208 +4208 +8238 +ENDCHAR +STARTCHAR uni6DC7 +ENCODING 28103 +BBX 15 15 1 -1 +BITMAP +4210 +2210 +1FFC +0210 +8210 +43F0 +2210 +0210 +13F0 +1210 +2210 +3FFE +4100 +4630 +980C +ENDCHAR +STARTCHAR uni6DC8 +ENCODING 28104 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1404 +0404 +87FC +4420 +2420 +0524 +0524 +15FC +1420 +2922 +2922 +5122 +81FE +ENDCHAR +STARTCHAR uni6DC9 +ENCODING 28105 +BBX 15 15 0 -2 +BITMAP +23F8 +1248 +1248 +83F8 +4248 +4A48 +0BF8 +1040 +17FC +E0E0 +2150 +2248 +2446 +2040 +0040 +ENDCHAR +STARTCHAR uni6DCA +ENCODING 28106 +BBX 14 16 0 -2 +BITMAP +0100 +2100 +11F8 +1208 +8410 +4820 +4180 +163C +1404 +2404 +E7BC +2404 +2404 +2404 +27FC +0404 +ENDCHAR +STARTCHAR uni6DCB +ENCODING 28107 +BBX 15 15 1 -1 +BITMAP +4210 +2210 +1210 +0F7C +8210 +4210 +2738 +06B8 +0A54 +2A54 +3292 +2210 +4210 +4210 +8210 +ENDCHAR +STARTCHAR uni6DCC +ENCODING 28108 +BBX 14 15 1 -1 +BITMAP +4040 +2248 +1244 +0444 +8040 +47FC +2404 +0404 +15F4 +1514 +2514 +25F4 +4404 +4404 +841C +ENDCHAR +STARTCHAR uni6DCD +ENCODING 28109 +BBX 14 15 0 -2 +BITMAP +27FC +1444 +1444 +85F4 +4444 +4444 +17FC +1404 +25F4 +E514 +2514 +25F4 +2404 +2414 +0808 +ENDCHAR +STARTCHAR uni6DCE +ENCODING 28110 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0040 +87FC +40A0 +2FFE +0110 +0248 +1C46 +13F8 +2040 +2FFE +4040 +8040 +ENDCHAR +STARTCHAR uni6DCF +ENCODING 28111 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1208 +03F8 +8208 +4208 +23F8 +0000 +07FC +1040 +1040 +2FFE +20A0 +4318 +8C06 +ENDCHAR +STARTCHAR uni6DD0 +ENCODING 28112 +BBX 14 15 1 -1 +BITMAP +4000 +23F8 +1208 +03F8 +8208 +4208 +23F8 +0000 +07FC +1404 +1404 +27FC +2404 +4404 +87FC +ENDCHAR +STARTCHAR uni6DD1 +ENCODING 28113 +BBX 15 15 1 -1 +BITMAP +4200 +2200 +13FE +0222 +8222 +4222 +2FE2 +0214 +2214 +2A88 +2A88 +4A54 +5264 +5222 +8642 +ENDCHAR +STARTCHAR uni6DD2 +ENCODING 28114 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0040 +87FC +4044 +2FFE +0044 +17FC +1080 +2FFE +2118 +47E0 +40B8 +8F04 +ENDCHAR +STARTCHAR uni6DD3 +ENCODING 28115 +BBX 15 16 0 -2 +BITMAP +0208 +4208 +2FFE +2208 +0288 +8040 +4FFE +4100 +1100 +21F8 +E108 +2108 +2208 +2208 +2428 +0810 +ENDCHAR +STARTCHAR uni6DD4 +ENCODING 28116 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +17FC +1040 +8040 +43F8 +4A08 +0BF8 +1208 +13F8 +E208 +23F8 +2208 +2208 +2FFE +ENDCHAR +STARTCHAR uni6DD5 +ENCODING 28117 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0040 +8040 +4FFE +2110 +0210 +145E +1040 +27FC +2040 +4040 +4040 +8FFE +ENDCHAR +STARTCHAR uni6DD6 +ENCODING 28118 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +107C +0040 +83F8 +4208 +23F8 +0208 +1208 +13F8 +2040 +2FFE +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6DD7 +ENCODING 28119 +BBX 14 16 0 -2 +BITMAP +0100 +2100 +11FC +1204 +8484 +4494 +42A4 +1084 +17FC +2084 +E1C4 +22A4 +2494 +2084 +20A8 +0010 +ENDCHAR +STARTCHAR uni6DD8 +ENCODING 28120 +BBX 15 15 1 -1 +BITMAP +4200 +2200 +17FE +0402 +8A02 +43F2 +2482 +0082 +17F2 +1082 +2492 +2492 +47F4 +4004 +8038 +ENDCHAR +STARTCHAR uni6DD9 +ENCODING 28121 +BBX 14 15 1 -1 +BITMAP +4080 +2080 +0FFC +0804 +8804 +43F0 +2000 +0000 +1FFC +1080 +2490 +2490 +4888 +5084 +8180 +ENDCHAR +STARTCHAR uni6DDA +ENCODING 28122 +BBX 15 15 1 -1 +BITMAP +401C +27E0 +1400 +07FC +8404 +4404 +27FC +0448 +1444 +17FE +2840 +2840 +40A0 +4318 +8C06 +ENDCHAR +STARTCHAR uni6DDB +ENCODING 28123 +BBX 15 15 1 -1 +BITMAP +4202 +2A12 +1A12 +0FD2 +9212 +4212 +3FD2 +0212 +1212 +1FD2 +3252 +3252 +5242 +52C2 +820E +ENDCHAR +STARTCHAR uni6DDC +ENCODING 28124 +BBX 14 15 0 -2 +BITMAP +27BC +14A4 +14A4 +84A4 +47BC +44A4 +14A4 +14A4 +27BC +E4A4 +24A4 +24A4 +24A4 +2AA4 +114C +ENDCHAR +STARTCHAR uni6DDD +ENCODING 28125 +BBX 15 15 1 -1 +BITMAP +4000 +2F7C +1954 +0954 +8954 +4F54 +2954 +097C +1940 +1F40 +2940 +2940 +4942 +5142 +933E +ENDCHAR +STARTCHAR uni6DDE +ENCODING 28126 +BBX 15 15 1 -1 +BITMAP +4448 +2448 +1448 +1F48 +8484 +4484 +26A2 +0D20 +0C20 +1420 +2440 +2444 +4444 +449A +85E2 +ENDCHAR +STARTCHAR uni6DDF +ENCODING 28127 +BBX 15 15 1 -1 +BITMAP +4120 +2120 +1120 +0FFC +8924 +4924 +2FFC +0924 +0924 +2924 +3FFE +2000 +4210 +4408 +8804 +ENDCHAR +STARTCHAR uni6DE0 +ENCODING 28128 +BBX 15 15 0 -2 +BITMAP +27FC +1444 +1444 +87FC +4444 +4444 +17FC +1000 +2000 +EFFE +2208 +2208 +2208 +2408 +0808 +ENDCHAR +STARTCHAR uni6DE1 +ENCODING 28129 +BBX 15 15 1 -1 +BITMAP +4040 +2244 +1448 +04A0 +8090 +410C +2642 +0040 +1242 +144C +24A0 +20A0 +4110 +420C +8C02 +ENDCHAR +STARTCHAR uni6DE2 +ENCODING 28130 +BBX 15 16 0 -2 +BITMAP +0014 +2012 +1010 +17FE +8010 +4010 +4BD2 +0A52 +1252 +1254 +E3D4 +2008 +20EA +271A +2226 +0042 +ENDCHAR +STARTCHAR uni6DE3 +ENCODING 28131 +BBX 15 15 0 -2 +BITMAP +2040 +139C +1204 +8204 +439C +4A04 +0A04 +13FC +1090 +E090 +2090 +2090 +2112 +2212 +040E +ENDCHAR +STARTCHAR uni6DE4 +ENCODING 28132 +BBX 15 15 1 -1 +BITMAP +4410 +2410 +1410 +1FA8 +8828 +4844 +2F44 +0982 +0920 +2910 +2908 +2900 +5120 +5110 +A608 +ENDCHAR +STARTCHAR uni6DE5 +ENCODING 28133 +BBX 15 16 0 -2 +BITMAP +0080 +20F8 +1088 +1108 +81F0 +4010 +4810 +0BFE +1020 +1222 +E174 +20A8 +2124 +2222 +20A0 +0040 +ENDCHAR +STARTCHAR uni6DE6 +ENCODING 28134 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +10A0 +0110 +8208 +45F4 +2842 +0040 +1040 +17FC +2040 +2444 +4244 +4248 +8FFE +ENDCHAR +STARTCHAR uni6DE7 +ENCODING 28135 +BBX 15 15 0 -1 +BITMAP +0040 +2020 +13FE +1202 +8444 +4020 +4828 +0888 +1090 +12A4 +E2C2 +2482 +2188 +2288 +2478 +ENDCHAR +STARTCHAR uni6DE8 +ENCODING 28136 +BBX 15 15 1 -1 +BITMAP +4038 +27C4 +1222 +0410 +87FC +4044 +2044 +0FFE +1044 +1044 +27FC +2040 +4040 +4040 +81C0 +ENDCHAR +STARTCHAR uni6DE9 +ENCODING 28137 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0040 +8FFE +4110 +2210 +041E +0080 +10F8 +1108 +2710 +20A0 +40F0 +8F0E +ENDCHAR +STARTCHAR uni6DEA +ENCODING 28138 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +10A0 +0110 +8208 +4DF6 +2000 +0000 +17FC +1524 +2524 +27FC +4524 +4524 +852C +ENDCHAR +STARTCHAR uni6DEB +ENCODING 28139 +BBX 15 15 1 -1 +BITMAP +401C +27E0 +1408 +0484 +8842 +4842 +2038 +03C0 +1040 +1040 +2FFE +2040 +4040 +4040 +87FC +ENDCHAR +STARTCHAR uni6DEC +ENCODING 28140 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0000 +8110 +4110 +22A8 +04A4 +1000 +1040 +2FFE +2040 +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6DED +ENCODING 28141 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +1404 +8404 +47FC +4440 +1440 +17FE +24E0 +E950 +2950 +3248 +2444 +2842 +0040 +ENDCHAR +STARTCHAR uni6DEE +ENCODING 28142 +BBX 15 15 1 -1 +BITMAP +4108 +2108 +1110 +03FC +8620 +4A20 +23F8 +0220 +1220 +1220 +23FC +2220 +4220 +4220 +83FE +ENDCHAR +STARTCHAR uni6DEF +ENCODING 28143 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FE +1100 +8208 +47FC +4004 +13F8 +1208 +23F8 +E208 +23F8 +2208 +2208 +2228 +0210 +ENDCHAR +STARTCHAR uni6DF0 +ENCODING 28144 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +10A0 +1110 +8288 +4446 +4000 +13F0 +1010 +2020 +E040 +2124 +2522 +250A +2908 +00F8 +ENDCHAR +STARTCHAR uni6DF1 +ENCODING 28145 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1404 +04A4 +80A0 +4122 +261E +0040 +1040 +17FE +2150 +2248 +4444 +4842 +8040 +ENDCHAR +STARTCHAR uni6DF2 +ENCODING 28146 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +107C +1040 +83FC +4244 +4A70 +0BC0 +1244 +123C +E200 +22F0 +2490 +2492 +2912 +120E +ENDCHAR +STARTCHAR uni6DF3 +ENCODING 28147 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0000 +83F8 +4208 +23F8 +0000 +07FC +1010 +1060 +2FFE +2040 +4040 +81C0 +ENDCHAR +STARTCHAR uni6DF4 +ENCODING 28148 +BBX 15 15 0 -1 +BITMAP +0100 +2100 +13FC +1494 +8894 +4124 +4244 +1484 +1128 +2210 +E040 +2124 +252A +250A +28F8 +ENDCHAR +STARTCHAR uni6DF5 +ENCODING 28149 +BBX 14 15 1 -1 +BITMAP +4404 +24A4 +14A4 +07BC +8404 +4404 +27FC +0404 +1404 +17BC +24A4 +24A4 +48A4 +48A4 +9004 +ENDCHAR +STARTCHAR uni6DF6 +ENCODING 28150 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0040 +8248 +4248 +2248 +0554 +0554 +1842 +10E0 +2150 +2248 +4C46 +8040 +ENDCHAR +STARTCHAR uni6DF7 +ENCODING 28151 +BBX 15 14 1 -1 +BITMAP +47F8 +2408 +17F8 +0408 +8408 +47F8 +2000 +0420 +1424 +17B8 +2420 +2422 +47A2 +9C1E +ENDCHAR +STARTCHAR uni6DF8 +ENCODING 28152 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +1040 +83F8 +4040 +47FE +1000 +13F8 +2248 +E248 +23F8 +2208 +2208 +2228 +0210 +ENDCHAR +STARTCHAR uni6DF9 +ENCODING 28153 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0110 +8248 +47FC +2A4A +0248 +13F8 +1248 +2248 +23F8 +4042 +4042 +803E +ENDCHAR +STARTCHAR uni6DFA +ENCODING 28154 +BBX 15 15 1 -1 +BITMAP +4090 +2088 +10BC +07C0 +8058 +4062 +2192 +060C +1088 +10BE +27C0 +2058 +4022 +40D2 +870C +ENDCHAR +STARTCHAR uni6DFB +ENCODING 28155 +BBX 15 15 1 -1 +BITMAP +4038 +27C0 +1080 +0080 +8FFE +4120 +2210 +0408 +2886 +2080 +24A8 +44A4 +4892 +4892 +8180 +ENDCHAR +STARTCHAR uni6DFC +ENCODING 28156 +BBX 15 15 1 -1 +BITMAP +0100 +0104 +7D98 +0560 +0920 +3118 +C106 +0300 +0810 +0912 +EEF4 +2C38 +4B54 +8892 +1930 +ENDCHAR +STARTCHAR uni6DFD +ENCODING 28157 +BBX 15 15 0 -1 +BITMAP +0108 +2108 +17FE +1108 +8108 +4020 +4820 +0920 +1120 +113C +E120 +2120 +2120 +2120 +2FFE +ENDCHAR +STARTCHAR uni6DFE +ENCODING 28158 +BBX 15 16 0 -2 +BITMAP +0100 +06C0 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +0000 +0108 +7D90 +0960 +1120 +2518 +C206 +ENDCHAR +STARTCHAR uni6DFF +ENCODING 28159 +BBX 14 16 0 -2 +BITMAP +0040 +2080 +13F8 +1208 +83F8 +4208 +4BF8 +0840 +1040 +17FC +E444 +2444 +2454 +2448 +2040 +0040 +ENDCHAR +STARTCHAR uni6E00 +ENCODING 28160 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FE +10A0 +8150 +4248 +45F6 +1040 +1150 +2110 +E7FE +2110 +2110 +2110 +2210 +0410 +ENDCHAR +STARTCHAR uni6E01 +ENCODING 28161 +BBX 15 16 0 -2 +BITMAP +0040 +4744 +2168 +2150 +0248 +8444 +4940 +4080 +1000 +2040 +E744 +2168 +2250 +2448 +2946 +0080 +ENDCHAR +STARTCHAR uni6E02 +ENCODING 28162 +BBX 15 16 0 -2 +BITMAP +03F8 +2208 +1208 +13F8 +8208 +4208 +4BF8 +0880 +1040 +17FC +E110 +2110 +20A0 +2040 +21B0 +0E0E +ENDCHAR +STARTCHAR uni6E03 +ENCODING 28163 +BBX 15 16 0 -2 +BITMAP +0108 +2108 +17FE +1108 +8148 +4040 +47FE +1080 +1100 +23FC +E504 +2904 +2104 +2104 +21FC +0104 +ENDCHAR +STARTCHAR uni6E04 +ENCODING 28164 +BBX 15 16 0 -2 +BITMAP +0090 +2090 +1090 +179E +8090 +4090 +4890 +0B9C +1090 +1090 +E090 +279E +2090 +2090 +2090 +0090 +ENDCHAR +STARTCHAR uni6E05 +ENCODING 28165 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0040 +83F8 +4040 +2FFE +0000 +13F8 +1208 +23F8 +2208 +43F8 +4208 +8238 +ENDCHAR +STARTCHAR uni6E06 +ENCODING 28166 +BBX 14 16 0 -2 +BITMAP +0844 +4484 +2004 +2FD4 +0494 +8494 +4494 +5494 +1FF4 +2494 +E494 +2494 +2484 +2884 +2894 +1088 +ENDCHAR +STARTCHAR uni6E07 +ENCODING 28167 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1408 +07F8 +8408 +4408 +27F8 +0200 +13FE +1402 +2C62 +2782 +4412 +43F2 +800C +ENDCHAR +STARTCHAR uni6E08 +ENCODING 28168 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +0FFE +0208 +8110 +40E0 +2318 +0E0E +13F8 +1208 +2208 +23F8 +4208 +4408 +8808 +ENDCHAR +STARTCHAR uni6E09 +ENCODING 28169 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +127C +0240 +8240 +47FE +2040 +0148 +1244 +1442 +20C8 +2008 +4010 +4060 +8780 +ENDCHAR +STARTCHAR uni6E0A +ENCODING 28170 +BBX 14 15 1 -1 +BITMAP +4404 +2444 +1554 +0554 +84E4 +4444 +25F4 +0444 +14E4 +14E4 +2554 +2954 +4A44 +5044 +A004 +ENDCHAR +STARTCHAR uni6E0B +ENCODING 28171 +BBX 15 15 1 -1 +BITMAP +4040 +2240 +127C +0240 +8240 +4240 +2FFE +0000 +1404 +1208 +2110 +2000 +4210 +4408 +8804 +ENDCHAR +STARTCHAR uni6E0C +ENCODING 28172 +BBX 15 15 0 -2 +BITMAP +23F8 +1008 +1008 +83F8 +4008 +4008 +17FE +1040 +2444 +E2E8 +2150 +2248 +2446 +2140 +0080 +ENDCHAR +STARTCHAR uni6E0D +ENCODING 28173 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +1040 +83F8 +4040 +47FE +1000 +13F8 +2208 +E248 +2248 +2248 +20A0 +2110 +0608 +ENDCHAR +STARTCHAR uni6E0E +ENCODING 28174 +BBX 14 16 0 -2 +BITMAP +0040 +2040 +13F8 +1040 +8040 +47FC +4004 +1128 +10A0 +2220 +E120 +27FC +2050 +2088 +2104 +0604 +ENDCHAR +STARTCHAR uni6E0F +ENCODING 28175 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +13FC +10A0 +8110 +4208 +57FE +1008 +13C8 +2248 +E248 +2248 +23C8 +2008 +2028 +0010 +ENDCHAR +STARTCHAR uni6E10 +ENCODING 28176 +BBX 15 16 0 -2 +BITMAP +0100 +4102 +211C +2FD0 +0210 +8210 +451E +57D4 +1114 +2114 +E1D4 +2F14 +2514 +2124 +2124 +0144 +ENDCHAR +STARTCHAR uni6E11 +ENCODING 28177 +BBX 15 15 0 -2 +BITMAP +23F8 +1208 +1208 +83F8 +4040 +47FC +1444 +1444 +27FC +E444 +2444 +27FC +2042 +2042 +003E +ENDCHAR +STARTCHAR uni6E12 +ENCODING 28178 +BBX 15 16 0 -2 +BITMAP +0040 +2080 +13FC +1224 +8224 +43FC +4A24 +0A44 +13FC +1090 +E110 +27FE +2010 +2010 +2010 +0010 +ENDCHAR +STARTCHAR uni6E13 +ENCODING 28179 +BBX 15 15 1 -1 +BITMAP +403C +27C0 +1084 +0484 +8448 +4210 +2040 +07FC +1040 +1040 +2FFE +20A0 +4110 +4208 +8C06 +ENDCHAR +STARTCHAR uni6E14 +ENCODING 28180 +BBX 15 15 0 -1 +BITMAP +0100 +4100 +23F0 +2210 +0420 +8FFC +5444 +5444 +17FC +2444 +E444 +27FC +2000 +2000 +2FFE +ENDCHAR +STARTCHAR uni6E15 +ENCODING 28181 +BBX 15 15 1 -1 +BITMAP +4002 +2452 +1252 +0292 +87D2 +4112 +2112 +0FD2 +1112 +1292 +2292 +2442 +4442 +4802 +800E +ENDCHAR +STARTCHAR uni6E16 +ENCODING 28182 +BBX 14 16 0 -2 +BITMAP +0080 +2040 +17FC +1444 +8040 +43F8 +4248 +1248 +13F8 +2248 +E248 +23F8 +2248 +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6E17 +ENCODING 28183 +BBX 15 15 1 -1 +BITMAP +4080 +2090 +1118 +03E4 +8040 +47FE +2090 +0128 +06C6 +1310 +1060 +2184 +2008 +4030 +83C0 +ENDCHAR +STARTCHAR uni6E18 +ENCODING 28184 +BBX 15 15 0 -2 +BITMAP +23F8 +1090 +1060 +87FC +40A4 +4128 +1220 +1460 +2040 +E7FC +20E0 +2150 +2248 +2C46 +0040 +ENDCHAR +STARTCHAR uni6E19 +ENCODING 28185 +BBX 15 15 1 -1 +BITMAP +4100 +21F0 +1210 +0420 +8FFC +44A4 +24A4 +053C +1604 +1444 +2FFE +20A0 +4110 +4208 +8C06 +ENDCHAR +STARTCHAR uni6E1A +ENCODING 28186 +BBX 15 15 1 -1 +BITMAP +4040 +2044 +13FC +0048 +8048 +4050 +2FFE +0040 +11FC +1704 +2104 +21FC +4104 +4104 +81FC +ENDCHAR +STARTCHAR uni6E1B +ENCODING 28187 +BBX 15 15 1 -1 +BITMAP +4028 +2024 +1FFE +0820 +8824 +4BA4 +2824 +0BA8 +1AA8 +1A90 +2A90 +2B90 +482A +504A +9184 +ENDCHAR +STARTCHAR uni6E1C +ENCODING 28188 +BBX 15 15 0 -2 +BITMAP +27FC +1040 +1080 +87FC +44A4 +44A4 +14A4 +1484 +244C +E040 +2FFE +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni6E1D +ENCODING 28189 +BBX 15 15 1 -1 +BITMAP +4040 +20A0 +1110 +0208 +8DF6 +4000 +2792 +0492 +1692 +15A4 +24A4 +26A4 +4592 +4492 +8592 +ENDCHAR +STARTCHAR uni6E1E +ENCODING 28190 +BBX 15 15 1 -1 +BITMAP +4208 +2108 +1110 +0FFE +8040 +43F8 +2208 +0208 +03F8 +1208 +1208 +23F8 +2208 +4208 +83F8 +ENDCHAR +STARTCHAR uni6E1F +ENCODING 28191 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FE +0000 +83F8 +4208 +23F8 +0000 +17FE +1402 +21FA +2020 +4020 +4020 +80E0 +ENDCHAR +STARTCHAR uni6E20 +ENCODING 28192 +BBX 15 15 1 -1 +BITMAP +3000 +0BFC +8200 +63F8 +0208 +0BF8 +3200 +C3FE +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni6E21 +ENCODING 28193 +BBX 15 15 1 -1 +BITMAP +4020 +2020 +17FE +0400 +8448 +45FE +2448 +0478 +1400 +15FC +2484 +2848 +4830 +50C8 +9306 +ENDCHAR +STARTCHAR uni6E22 +ENCODING 28194 +BBX 15 15 1 -1 +BITMAP +4000 +2FF8 +1808 +0868 +8B88 +4888 +2BE8 +0AA8 +0AA8 +1BE8 +1888 +28A8 +28EA +539A +9004 +ENDCHAR +STARTCHAR uni6E23 +ENCODING 28195 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +0FFE +8150 +4248 +2444 +0842 +13F8 +1208 +23F8 +2208 +43F8 +4208 +8FFE +ENDCHAR +STARTCHAR uni6E24 +ENCODING 28196 +BBX 15 15 1 -1 +BITMAP +4210 +2210 +1FD0 +0210 +823E +5FD2 +3052 +0F92 +1112 +1212 +23D2 +3E22 +4222 +4242 +8E8C +ENDCHAR +STARTCHAR uni6E25 +ENCODING 28197 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1404 +0404 +87FC +4400 +27FC +0480 +0518 +27E4 +2840 +4BFC +5040 +8040 +8FFE +ENDCHAR +STARTCHAR uni6E26 +ENCODING 28198 +BBX 14 15 1 -1 +BITMAP +4000 +27F8 +1408 +04F8 +8488 +4488 +2FFC +0804 +09E4 +0924 +2924 +2924 +49E4 +4804 +881C +ENDCHAR +STARTCHAR uni6E27 +ENCODING 28199 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0208 +8108 +4110 +2FFE +0842 +0842 +17FC +1444 +2444 +2444 +444C +8040 +ENDCHAR +STARTCHAR uni6E28 +ENCODING 28200 +BBX 15 15 0 -2 +BITMAP +23F8 +1248 +1248 +83F8 +4248 +4A48 +0BF8 +1000 +17FE +E240 +2244 +2228 +2290 +2308 +0206 +ENDCHAR +STARTCHAR uni6E29 +ENCODING 28201 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1408 +0408 +87F8 +4408 +2408 +07F8 +1000 +1FFC +2924 +2924 +4924 +4924 +9FFE +ENDCHAR +STARTCHAR uni6E2A +ENCODING 28202 +BBX 14 16 0 -2 +BITMAP +0008 +203C +17C0 +1040 +83F8 +4248 +4A48 +0BF8 +1040 +17FC +E444 +2454 +25F4 +2404 +2414 +0408 +ENDCHAR +STARTCHAR uni6E2B +ENCODING 28203 +BBX 15 15 1 -1 +BITMAP +4248 +2248 +1FFE +0248 +8248 +4278 +2200 +03FC +1040 +1FFE +2150 +2248 +4444 +4842 +8040 +ENDCHAR +STARTCHAR uni6E2C +ENCODING 28204 +BBX 14 15 1 -1 +BITMAP +4004 +2F84 +18A4 +08A4 +8FA4 +48A4 +28A4 +0FA4 +08A4 +28A4 +28A4 +2FA4 +4404 +4884 +905C +ENDCHAR +STARTCHAR uni6E2D +ENCODING 28205 +BBX 14 15 1 -1 +BITMAP +4000 +27FC +1444 +07FC +8444 +47FC +2000 +03F8 +1208 +13F8 +2208 +23F8 +4208 +4208 +8238 +ENDCHAR +STARTCHAR uni6E2E +ENCODING 28206 +BBX 15 15 1 -1 +BITMAP +4110 +2110 +1FFE +0110 +8110 +4000 +2FFE +0008 +13C8 +1248 +2248 +23C8 +4008 +4008 +8038 +ENDCHAR +STARTCHAR uni6E2F +ENCODING 28207 +BBX 15 15 1 -1 +BITMAP +4110 +2110 +17FC +0110 +8110 +4FFE +2110 +0208 +07FC +080A +2008 +23F8 +4202 +4202 +81FE +ENDCHAR +STARTCHAR uni6E30 +ENCODING 28208 +BBX 15 16 0 -2 +BITMAP +0040 +20A0 +1110 +1208 +8DF6 +4000 +43F8 +1208 +1208 +23F8 +E110 +2110 +27FC +2110 +2210 +0410 +ENDCHAR +STARTCHAR uni6E31 +ENCODING 28209 +BBX 15 15 0 -1 +BITMAP +0100 +2100 +113E +17C8 +8548 +4548 +4548 +1548 +17C8 +2508 +E108 +2148 +21C8 +2E48 +243E +ENDCHAR +STARTCHAR uni6E32 +ENCODING 28210 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0802 +8BFA +4000 +23F8 +0208 +0208 +13F8 +1208 +2208 +23F8 +4000 +8FFE +ENDCHAR +STARTCHAR uni6E33 +ENCODING 28211 +BBX 15 15 0 -2 +BITMAP +277E +1124 +1124 +813C +4724 +4424 +143C +1424 +2724 +E126 +217C +2104 +2104 +2A04 +0404 +ENDCHAR +STARTCHAR uni6E34 +ENCODING 28212 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1408 +07F8 +8408 +4408 +27F8 +0200 +13FE +1442 +2C42 +24A2 +4512 +47F2 +800C +ENDCHAR +STARTCHAR uni6E35 +ENCODING 28213 +BBX 15 16 0 -2 +BITMAP +0208 +4208 +2FFE +2208 +0208 +8000 +47FC +5444 +1444 +2444 +E7FC +2444 +2444 +2444 +27FC +0404 +ENDCHAR +STARTCHAR uni6E36 +ENCODING 28214 +BBX 15 15 1 -1 +BITMAP +4110 +2110 +1FFE +0110 +8110 +4040 +27FC +0444 +0444 +1444 +1FFE +20A0 +2110 +4208 +8C06 +ENDCHAR +STARTCHAR uni6E37 +ENCODING 28215 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +1110 +8208 +4404 +43F8 +1208 +1208 +23F8 +E110 +2110 +2112 +2212 +240E +0800 +ENDCHAR +STARTCHAR uni6E38 +ENCODING 28216 +BBX 15 15 1 -1 +BITMAP +4420 +2420 +1420 +1FBE +8440 +4480 +27BC +0484 +1488 +1488 +24FE +2488 +4888 +4888 +9318 +ENDCHAR +STARTCHAR uni6E39 +ENCODING 28217 +BBX 15 16 0 -2 +BITMAP +0200 +2200 +13FE +1402 +8882 +47FA +4002 +17F2 +1002 +27F2 +E002 +27F2 +2412 +27F2 +2014 +0008 +ENDCHAR +STARTCHAR uni6E3A +ENCODING 28218 +BBX 15 15 1 -1 +BITMAP +4010 +2F10 +1910 +0954 +8F54 +4954 +2992 +0910 +1F14 +1934 +2908 +2908 +4F10 +4020 +80C0 +ENDCHAR +STARTCHAR uni6E3B +ENCODING 28219 +BBX 14 16 0 -2 +BITMAP +0040 +2040 +1248 +1244 +8454 +4060 +4980 +0E00 +13F8 +1208 +E3F8 +2208 +23F8 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni6E3C +ENCODING 28220 +BBX 15 15 1 -1 +BITMAP +4208 +2110 +17FC +0040 +87FC +4040 +2040 +0FFE +0040 +1040 +1FFE +2040 +20A0 +4318 +8C06 +ENDCHAR +STARTCHAR uni6E3D +ENCODING 28221 +BBX 15 16 0 -2 +BITMAP +0128 +2124 +17A4 +1120 +8120 +4FFE +4020 +1024 +17A4 +24A8 +E4A8 +2490 +2792 +24AA +2046 +0082 +ENDCHAR +STARTCHAR uni6E3E +ENCODING 28222 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1842 +0842 +87FC +4040 +27FC +0444 +17FC +1444 +27FC +2040 +4FFE +4040 +8040 +ENDCHAR +STARTCHAR uni6E3F +ENCODING 28223 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +10E0 +8150 +4248 +4C46 +13F8 +1000 +2000 +E7FC +2040 +2248 +2444 +2942 +0080 +ENDCHAR +STARTCHAR uni6E40 +ENCODING 28224 +BBX 14 16 0 -2 +BITMAP +0020 +27A8 +10B0 +14A4 +8318 +4110 +4208 +15F4 +1040 +2040 +E7FC +2040 +20A0 +2110 +2208 +0404 +ENDCHAR +STARTCHAR uni6E41 +ENCODING 28225 +BBX 15 16 0 -2 +BITMAP +0210 +2210 +1228 +1228 +8F44 +4282 +427C +1300 +1200 +2E7C +E244 +2244 +2244 +2244 +2A7C +0444 +ENDCHAR +STARTCHAR uni6E42 +ENCODING 28226 +BBX 15 15 0 -2 +BITMAP +27BC +14A4 +14A4 +87BC +4000 +43F8 +1000 +1FFE +2100 +E200 +23F8 +2008 +2008 +2050 +0020 +ENDCHAR +STARTCHAR uni6E43 +ENCODING 28227 +BBX 15 15 1 -1 +BITMAP +4100 +23FE +1E10 +0210 +827C +4F10 +2210 +027C +1210 +1310 +2EFE +2410 +4410 +4810 +9010 +ENDCHAR +STARTCHAR uni6E44 +ENCODING 28228 +BBX 14 15 1 -1 +BITMAP +4000 +27FC +1444 +0444 +87FC +4400 +25FC +0504 +15FC +1504 +2504 +29FC +4904 +5104 +81FC +ENDCHAR +STARTCHAR uni6E45 +ENCODING 28229 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +2FFE +2040 +07FC +8444 +4554 +54E4 +1444 +27FC +E0E0 +2150 +2248 +2C46 +2040 +0040 +ENDCHAR +STARTCHAR uni6E46 +ENCODING 28230 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +1000 +8208 +4110 +4FFE +1000 +13F8 +2208 +E208 +23F8 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni6E47 +ENCODING 28231 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +1208 +8110 +4FFE +4000 +13F8 +1208 +23F8 +E208 +23F8 +2208 +2208 +2228 +0210 +ENDCHAR +STARTCHAR uni6E48 +ENCODING 28232 +BBX 15 15 1 -1 +BITMAP +4208 +2208 +1FFE +0208 +83F8 +4208 +2208 +03F8 +0040 +1FFE +1150 +2248 +2444 +4842 +8040 +ENDCHAR +STARTCHAR uni6E49 +ENCODING 28233 +BBX 15 15 1 -1 +BITMAP +420C +2270 +1210 +0210 +8B10 +4AFE +2A90 +0A10 +0A10 +127C +1244 +2244 +2244 +4244 +827C +ENDCHAR +STARTCHAR uni6E4A +ENCODING 28234 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0040 +83F8 +40A0 +2FFE +0110 +1208 +1DF6 +2040 +27FC +40A0 +4318 +8C06 +ENDCHAR +STARTCHAR uni6E4B +ENCODING 28235 +BBX 15 15 1 -1 +BITMAP +4080 +27F8 +1108 +0FFE +8000 +47F8 +2408 +07F8 +0020 +17FC +1220 +2220 +2FFE +4020 +8020 +ENDCHAR +STARTCHAR uni6E4C +ENCODING 28236 +BBX 15 15 1 -1 +BITMAP +4040 +20A0 +1110 +0208 +8DF6 +4000 +23F8 +0208 +03F8 +1208 +13FA +2244 +2228 +4390 +8E0E +ENDCHAR +STARTCHAR uni6E4D +ENCODING 28237 +BBX 15 15 1 -1 +BITMAP +4040 +2444 +1444 +07FC +8000 +4FFE +2080 +0100 +17FC +1524 +2524 +2524 +4524 +4524 +852C +ENDCHAR +STARTCHAR uni6E4E +ENCODING 28238 +BBX 15 15 1 -1 +BITMAP +4000 +3FFE +1080 +0100 +8FFC +4924 +2924 +09E4 +1924 +1924 +29E4 +2924 +4924 +4924 +8FFC +ENDCHAR +STARTCHAR uni6E4F +ENCODING 28239 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1040 +03F8 +8208 +43F8 +2208 +0208 +03F8 +1208 +1208 +23F8 +2080 +4108 +8606 +ENDCHAR +STARTCHAR uni6E50 +ENCODING 28240 +BBX 14 16 0 -2 +BITMAP +0210 +4210 +2220 +227C +0FC4 +8244 +4244 +5744 +16FC +2A44 +EA44 +3244 +2244 +2244 +227C +0244 +ENDCHAR +STARTCHAR uni6E51 +ENCODING 28241 +BBX 15 15 1 -1 +BITMAP +4000 +3FFE +1082 +04F4 +8480 +4B80 +30FE +0000 +07F8 +1408 +17F8 +2408 +27F8 +4408 +8438 +ENDCHAR +STARTCHAR uni6E52 +ENCODING 28242 +BBX 15 15 0 -2 +BITMAP +23F8 +1208 +1208 +83F8 +4000 +4FFE +1208 +13F8 +2208 +E3F8 +2208 +227E +2F88 +2008 +0008 +ENDCHAR +STARTCHAR uni6E53 +ENCODING 28243 +BBX 15 15 1 -1 +BITMAP +4060 +2210 +1408 +0806 +83F8 +4088 +2088 +0108 +0630 +1000 +17FC +2524 +2524 +4524 +8FFE +ENDCHAR +STARTCHAR uni6E54 +ENCODING 28244 +BBX 15 15 1 -1 +BITMAP +4208 +2108 +1110 +0FFE +8000 +4784 +24A4 +06A4 +05A4 +14A4 +16A4 +25A4 +2484 +4484 +858C +ENDCHAR +STARTCHAR uni6E55 +ENCODING 28245 +BBX 15 15 0 -1 +BITMAP +0010 +2010 +177C +1114 +81FE +4214 +427C +1710 +117C +2510 +E5FE +2210 +2210 +2500 +28FE +ENDCHAR +STARTCHAR uni6E56 +ENCODING 28246 +BBX 15 15 1 -1 +BITMAP +4200 +223E +0222 +1FE2 +8222 +423E +2222 +0FA2 +18A2 +18BE +28A2 +28A2 +4FC2 +4042 +808E +ENDCHAR +STARTCHAR uni6E57 +ENCODING 28247 +BBX 15 15 1 -1 +BITMAP +4204 +2204 +1F84 +0204 +823E +5FC4 +2004 +0224 +0214 +1F94 +1204 +2204 +2204 +4384 +9C1C +ENDCHAR +STARTCHAR uni6E58 +ENCODING 28248 +BBX 15 15 1 -1 +BITMAP +4200 +223E +0222 +0FA2 +8222 +423E +2322 +06A2 +26A2 +2A3E +2A22 +5222 +4222 +4222 +823E +ENDCHAR +STARTCHAR uni6E59 +ENCODING 28249 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FE +1090 +8298 +4494 +4114 +1230 +1440 +2040 +E7FE +2040 +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni6E5A +ENCODING 28250 +BBX 15 16 0 -2 +BITMAP +0040 +2488 +1528 +15E8 +8448 +44A8 +45E8 +1408 +15E8 +2528 +E5E8 +2528 +25EA +292A +292A +1166 +ENDCHAR +STARTCHAR uni6E5B +ENCODING 28251 +BBX 15 15 1 -1 +BITMAP +4208 +2208 +1FFE +0208 +83F8 +4208 +23F8 +0208 +1208 +1FFE +2490 +2490 +471E +4400 +87FE +ENDCHAR +STARTCHAR uni6E5C +ENCODING 28252 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1208 +03F8 +8208 +4208 +23F8 +0000 +17FE +1040 +2240 +227C +4540 +48C0 +903E +ENDCHAR +STARTCHAR uni6E5D +ENCODING 28253 +BBX 15 16 0 -2 +BITMAP +0220 +2224 +13A8 +1230 +82A2 +4322 +4A5E +0880 +13FC +1204 +E204 +23FC +2204 +2204 +23FC +0204 +ENDCHAR +STARTCHAR uni6E5E +ENCODING 28254 +BBX 15 15 1 -1 +BITMAP +4040 +207C +1040 +03F8 +8208 +4208 +23F8 +0208 +1208 +13F8 +2208 +2208 +43F8 +4210 +8C0E +ENDCHAR +STARTCHAR uni6E5F +ENCODING 28255 +BBX 15 15 1 -1 +BITMAP +4040 +2080 +13F8 +0208 +83F8 +4208 +2208 +03F8 +1000 +17FC +2040 +23F8 +4040 +4040 +8FFE +ENDCHAR +STARTCHAR uni6E60 +ENCODING 28256 +BBX 15 16 0 -2 +BITMAP +0040 +2444 +1444 +1444 +87FC +4100 +4100 +17FE +1120 +2220 +E2A4 +22A8 +2550 +2450 +2888 +0106 +ENDCHAR +STARTCHAR uni6E61 +ENCODING 28257 +BBX 14 16 0 -2 +BITMAP +03F8 +2248 +1248 +13F8 +8248 +4248 +4BF8 +0840 +1040 +17FC +E444 +2454 +25F4 +2414 +2404 +040C +ENDCHAR +STARTCHAR uni6E62 +ENCODING 28258 +BBX 14 15 0 -2 +BITMAP +27FC +1000 +13F8 +8208 +4208 +43F8 +1000 +17FC +2444 +E444 +27FC +2444 +2444 +27FC +0404 +ENDCHAR +STARTCHAR uni6E63 +ENCODING 28259 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1404 +07FC +8440 +47FE +2420 +0710 +0C0A +17FC +1404 +27FC +2404 +4404 +87FC +ENDCHAR +STARTCHAR uni6E64 +ENCODING 28260 +BBX 15 16 0 -2 +BITMAP +0210 +2110 +1110 +17BE +8228 +4248 +4BAA +0AAE +12BA +12EA +E2AE +22A8 +24AA +24A2 +29A2 +101E +ENDCHAR +STARTCHAR uni6E65 +ENCODING 28261 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +1404 +8110 +4208 +4444 +1050 +1048 +27FE +E040 +20A0 +20A0 +2110 +2208 +0406 +ENDCHAR +STARTCHAR uni6E66 +ENCODING 28262 +BBX 15 14 0 -1 +BITMAP +23F8 +1208 +13F8 +8208 +43F8 +4840 +0A40 +13FC +1440 +E040 +23F8 +2040 +2040 +27FE +ENDCHAR +STARTCHAR uni6E67 +ENCODING 28263 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1108 +0090 +87FC +4444 +27FC +0444 +1444 +17FC +2040 +2FFE +4082 +4302 +8C1C +ENDCHAR +STARTCHAR uni6E68 +ENCODING 28264 +BBX 15 15 0 -2 +BITMAP +23FC +1204 +13FC +8204 +43FC +4A04 +0BFC +1050 +1048 +E7FE +2040 +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni6E69 +ENCODING 28265 +BBX 15 15 0 -1 +BITMAP +0008 +203C +17C0 +1040 +8FFE +4040 +47FC +1444 +17FC +2444 +E7FC +2040 +27FC +2040 +2FFE +ENDCHAR +STARTCHAR uni6E6A +ENCODING 28266 +BBX 15 16 0 -2 +BITMAP +0100 +21F8 +1208 +13F0 +8010 +47FE +4080 +1144 +1668 +20B0 +E128 +2668 +20A4 +2122 +26A0 +0040 +ENDCHAR +STARTCHAR uni6E6B +ENCODING 28267 +BBX 15 15 1 -1 +BITMAP +4190 +2E12 +1252 +0252 +8FD4 +4254 +2210 +0710 +0690 +2A90 +2A28 +4228 +4244 +4244 +8282 +ENDCHAR +STARTCHAR uni6E6C +ENCODING 28268 +BBX 15 16 0 -2 +BITMAP +0610 +3810 +0852 +7E54 +0890 +1C28 +2A44 +4882 +0900 +0104 +7D88 +0950 +1120 +2118 +C506 +0200 +ENDCHAR +STARTCHAR uni6E6D +ENCODING 28269 +BBX 15 16 0 -2 +BITMAP +0108 +2088 +1090 +17FE +8090 +4090 +4BFC +0A94 +1294 +130C +E204 +23FC +2204 +2204 +23FC +0204 +ENDCHAR +STARTCHAR uni6E6E +ENCODING 28270 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1120 +0120 +8FFC +4924 +2924 +0FFC +1080 +1080 +2FFC +2080 +4080 +4080 +9FFE +ENDCHAR +STARTCHAR uni6E6F +ENCODING 28271 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1208 +03F8 +8208 +43F8 +2000 +0FFE +1200 +17FE +2C92 +2122 +4642 +4082 +831C +ENDCHAR +STARTCHAR uni6E70 +ENCODING 28272 +BBX 15 15 0 -1 +BITMAP +0080 +21F8 +1208 +1510 +80E0 +4318 +4C06 +13F8 +1040 +2240 +E3FC +2440 +23F8 +2040 +2FFE +ENDCHAR +STARTCHAR uni6E71 +ENCODING 28273 +BBX 14 16 0 -2 +BITMAP +0040 +2040 +17FC +1040 +83F8 +4040 +47FC +1040 +17FC +2080 +E100 +23F8 +2D08 +2108 +21F8 +0108 +ENDCHAR +STARTCHAR uni6E72 +ENCODING 28274 +BBX 15 15 1 -1 +BITMAP +403C +2FC8 +1444 +0822 +8FFC +4100 +3FFE +0100 +11F8 +1208 +2E10 +2120 +40E0 +4318 +9C06 +ENDCHAR +STARTCHAR uni6E73 +ENCODING 28275 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +2FFE +2040 +0040 +87FC +4514 +54A4 +15F4 +2444 +E444 +25F4 +2444 +2444 +2454 +0408 +ENDCHAR +STARTCHAR uni6E74 +ENCODING 28276 +BBX 15 15 0 -1 +BITMAP +0108 +2090 +1000 +13FC +8090 +4090 +4092 +1492 +1294 +2298 +E090 +2090 +2090 +2090 +27FE +ENDCHAR +STARTCHAR uni6E75 +ENCODING 28277 +BBX 15 16 0 -2 +BITMAP +0208 +2110 +17FC +1040 +83F8 +4040 +47FC +1100 +1100 +23F8 +E410 +2820 +2040 +20A0 +2318 +0C06 +ENDCHAR +STARTCHAR uni6E76 +ENCODING 28278 +BBX 15 15 1 -1 +BITMAP +4040 +2080 +13F8 +0208 +83F8 +4208 +2208 +03FA +1044 +1768 +2150 +2250 +4448 +4846 +81C0 +ENDCHAR +STARTCHAR uni6E77 +ENCODING 28279 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +1040 +83F8 +4080 +47FE +1110 +1208 +27FC +EA0A +2208 +23F8 +2208 +2208 +03F8 +ENDCHAR +STARTCHAR uni6E78 +ENCODING 28280 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FE +1000 +83F8 +4208 +43F8 +1000 +17FE +2402 +E9F4 +2110 +2110 +2212 +2412 +080E +ENDCHAR +STARTCHAR uni6E79 +ENCODING 28281 +BBX 15 15 0 -2 +BITMAP +27FE +1400 +15FC +8524 +4524 +45FC +1524 +1524 +25FC +E420 +2420 +25FC +2820 +2820 +13FE +ENDCHAR +STARTCHAR uni6E7A +ENCODING 28282 +BBX 15 16 0 -2 +BITMAP +0100 +217C +1144 +1244 +8244 +467C +4A10 +1210 +12FE +2238 +E254 +2254 +2294 +2312 +2210 +0210 +ENDCHAR +STARTCHAR uni6E7B +ENCODING 28283 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +17FE +1000 +81F8 +4108 +49F8 +0800 +13FC +1204 +E204 +23FC +2204 +2204 +23FC +0204 +ENDCHAR +STARTCHAR uni6E7C +ENCODING 28284 +BBX 15 15 0 -1 +BITMAP +0100 +261C +1404 +1404 +871C +4404 +4404 +17FC +1000 +2000 +E7FC +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6E7D +ENCODING 28285 +BBX 15 16 0 -2 +BITMAP +0248 +4248 +2490 +2FFE +0490 +8248 +4248 +5000 +17FC +2444 +E444 +27FC +2444 +2444 +27FC +0404 +ENDCHAR +STARTCHAR uni6E7E +ENCODING 28286 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FE +0110 +8514 +4A32 +2000 +03F8 +1008 +13F8 +2200 +23FC +4004 +4004 +8038 +ENDCHAR +STARTCHAR uni6E7F +ENCODING 28287 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1408 +0408 +87F8 +4408 +2408 +07F8 +1000 +1120 +2924 +2524 +4528 +4120 +9FFE +ENDCHAR +STARTCHAR uni6E80 +ENCODING 28288 +BBX 15 15 1 -1 +BITMAP +4110 +2110 +17FC +0110 +8110 +4FFE +2040 +07FC +1444 +1554 +2554 +2554 +45F4 +4404 +841C +ENDCHAR +STARTCHAR uni6E81 +ENCODING 28289 +BBX 15 16 0 -2 +BITMAP +0088 +2088 +13FE +1088 +8000 +43FE +4202 +1424 +1020 +23FE +E070 +20A8 +20A8 +2124 +2222 +0020 +ENDCHAR +STARTCHAR uni6E82 +ENCODING 28290 +BBX 14 15 1 -1 +BITMAP +4204 +2224 +1FE4 +0224 +8FA4 +4AA4 +2AA4 +0AA4 +1FA4 +1224 +2724 +2A84 +5244 +6204 +821C +ENDCHAR +STARTCHAR uni6E83 +ENCODING 28291 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +13F8 +1248 +83F8 +4040 +4FFE +1000 +13F8 +2208 +E248 +2248 +2248 +20A0 +2110 +0608 +ENDCHAR +STARTCHAR uni6E84 +ENCODING 28292 +BBX 15 16 0 -2 +BITMAP +0040 +2444 +1444 +17FC +8080 +41F8 +4208 +1510 +10E0 +2318 +EC46 +23F8 +2040 +2FFE +2040 +0040 +ENDCHAR +STARTCHAR uni6E85 +ENCODING 28293 +BBX 15 16 0 -2 +BITMAP +0010 +4F94 +2892 +2890 +0A9E +8AF0 +4A90 +5A9E +1AF0 +2A94 +EA94 +2208 +250A +249A +2826 +1042 +ENDCHAR +STARTCHAR uni6E86 +ENCODING 28294 +BBX 15 16 0 -2 +BITMAP +4200 +2200 +257C +84A4 +4824 +5724 +0224 +2228 +2FA8 +4228 +CB10 +4A90 +52A8 +4228 +4A44 +0482 +ENDCHAR +STARTCHAR uni6E87 +ENCODING 28295 +BBX 15 16 0 -2 +BITMAP +0040 +2248 +1150 +1040 +87FC +4150 +4248 +1404 +1080 +2FFE +E110 +2210 +2320 +20C0 +2330 +0C08 +ENDCHAR +STARTCHAR uni6E88 +ENCODING 28296 +BBX 15 16 0 -2 +BITMAP +0040 +2240 +1140 +17F8 +8088 +4090 +48FC +0904 +1108 +13FE +E202 +242A +2AAA +2282 +2414 +0008 +ENDCHAR +STARTCHAR uni6E89 +ENCODING 28297 +BBX 15 15 0 -2 +BITMAP +27BE +1488 +1488 +87A8 +44A8 +44A8 +17BE +1410 +2518 +E498 +25A8 +26AA +244A +2046 +0080 +ENDCHAR +STARTCHAR uni6E8A +ENCODING 28298 +BBX 15 15 0 -2 +BITMAP +27BC +1484 +1484 +8484 +47BC +4400 +1400 +17BC +2424 +E424 +27A8 +2410 +2428 +2444 +0482 +ENDCHAR +STARTCHAR uni6E8B +ENCODING 28299 +BBX 15 14 0 -1 +BITMAP +23F8 +1108 +1110 +811C +42E4 +42A4 +1254 +14A8 +2100 +E3FC +2294 +2294 +2294 +27FE +ENDCHAR +STARTCHAR uni6E8C +ENCODING 28300 +BBX 15 15 1 -1 +BITMAP +4000 +23C4 +10A8 +0514 +8208 +4404 +2BFA +0110 +1110 +1FFE +2110 +2110 +4212 +4412 +980E +ENDCHAR +STARTCHAR uni6E8D +ENCODING 28301 +BBX 15 15 0 -2 +BITMAP +27FC +10A0 +14A4 +82A8 +40A0 +4FFE +1000 +13F8 +2208 +E208 +23F8 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni6E8E +ENCODING 28302 +BBX 15 16 0 -2 +BITMAP +0210 +2210 +127C +1210 +8F90 +4210 +42FE +1700 +1690 +2A10 +EA7C +3210 +2210 +2210 +22FE +0200 +ENDCHAR +STARTCHAR uni6E8F +ENCODING 28303 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0840 +8BFC +4844 +2FFE +0844 +1BFC +1840 +2BFC +2A04 +5204 +4204 +83FC +ENDCHAR +STARTCHAR uni6E90 +ENCODING 28304 +BBX 15 15 1 -1 +BITMAP +4000 +27FE +1440 +0480 +85FC +4504 +25FC +0504 +1504 +15FC +2820 +2928 +5224 +4422 +8060 +ENDCHAR +STARTCHAR uni6E91 +ENCODING 28305 +BBX 14 16 0 -2 +BITMAP +0040 +2244 +1148 +1040 +83FC +4204 +4A04 +0BFC +1204 +13FC +E204 +2204 +23FC +2000 +2108 +0204 +ENDCHAR +STARTCHAR uni6E92 +ENCODING 28306 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +13F8 +1040 +87FE +4000 +4BF8 +0A08 +1208 +13F8 +E0A4 +2128 +2310 +2D48 +2186 +0100 +ENDCHAR +STARTCHAR uni6E93 +ENCODING 28307 +BBX 15 15 1 -1 +BITMAP +4088 +2110 +1FFE +0120 +87FC +4124 +2FFE +0124 +0124 +17FC +1330 +2528 +2924 +5122 +8120 +ENDCHAR +STARTCHAR uni6E94 +ENCODING 28308 +BBX 15 15 0 -1 +BITMAP +0208 +2108 +1110 +1000 +87FC +4040 +4840 +0BF8 +1040 +1040 +E7FE +2000 +2548 +24A4 +28A4 +ENDCHAR +STARTCHAR uni6E95 +ENCODING 28309 +BBX 15 15 0 -2 +BITMAP +47FE +2402 +29F4 +0000 +83F8 +4080 +5144 +1668 +20B0 +E128 +2668 +20A4 +2122 +26A0 +0040 +ENDCHAR +STARTCHAR uni6E96 +ENCODING 28310 +BBX 15 15 1 -1 +BITMAP +2088 +1110 +83FE +4620 +2BF8 +0220 +13F8 +2220 +43FE +8000 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni6E97 +ENCODING 28311 +BBX 15 16 0 -2 +BITMAP +0038 +23C0 +1040 +17FC +8150 +4154 +4758 +1154 +1354 +254C +E0E0 +2150 +2248 +2444 +2842 +0040 +ENDCHAR +STARTCHAR uni6E98 +ENCODING 28312 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +17F8 +0080 +8080 +4FFC +2080 +0110 +1268 +1F84 +2000 +2FFC +4924 +4924 +9FFE +ENDCHAR +STARTCHAR uni6E99 +ENCODING 28313 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +1040 +83F8 +4080 +47FC +1110 +1248 +2446 +E248 +2150 +2248 +2444 +2140 +0080 +ENDCHAR +STARTCHAR uni6E9A +ENCODING 28314 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +17FC +1110 +8040 +40A0 +4910 +0A08 +15F6 +1000 +E000 +23F8 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni6E9B +ENCODING 28315 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +1404 +8110 +4208 +483C +0BD0 +1290 +1290 +E290 +2288 +2288 +24A4 +24D4 +0892 +ENDCHAR +STARTCHAR uni6E9C +ENCODING 28316 +BBX 15 15 1 -1 +BITMAP +4180 +2E7E +0812 +0912 +8922 +4FA2 +388C +0000 +17FC +1444 +2444 +27FC +4444 +4444 +87FC +ENDCHAR +STARTCHAR uni6E9D +ENCODING 28317 +BBX 15 15 1 -1 +BITMAP +4110 +2FFE +1110 +07FC +8110 +4FFE +2040 +07FC +1444 +17FC +2444 +2FFE +4404 +4404 +841C +ENDCHAR +STARTCHAR uni6E9E +ENCODING 28318 +BBX 15 15 0 -2 +BITMAP +23F8 +1148 +1110 +80A0 +4040 +41B0 +164E +1040 +23F8 +E248 +2248 +23F8 +2044 +27FC +0004 +ENDCHAR +STARTCHAR uni6E9F +ENCODING 28319 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1802 +0BFA +8208 +43F8 +2208 +0208 +13F8 +1040 +2FFE +2000 +4110 +4208 +8C06 +ENDCHAR +STARTCHAR uni6EA0 +ENCODING 28320 +BBX 15 15 0 -1 +BITMAP +0108 +2088 +1090 +13FC +8040 +41F8 +4840 +0BFE +1080 +1100 +E1FC +2220 +2420 +2820 +23FE +ENDCHAR +STARTCHAR uni6EA1 +ENCODING 28321 +BBX 15 16 0 -2 +BITMAP +0010 +2010 +1710 +157C +8510 +4510 +45FE +1708 +1508 +25FE +E508 +2548 +2728 +2008 +2028 +0010 +ENDCHAR +STARTCHAR uni6EA2 +ENCODING 28322 +BBX 15 15 1 -1 +BITMAP +4030 +2110 +1208 +0404 +8BFA +4000 +2118 +0204 +0C02 +23F8 +22A8 +42A8 +42A8 +82A8 +8FFE +ENDCHAR +STARTCHAR uni6EA3 +ENCODING 28323 +BBX 15 16 0 -2 +BITMAP +0220 +4220 +2250 +2488 +0504 +8EFA +5400 +55FC +1554 +2554 +E5FC +2554 +2554 +2554 +2504 +050C +ENDCHAR +STARTCHAR uni6EA4 +ENCODING 28324 +BBX 14 15 0 -2 +BITMAP +23FC +1240 +13F8 +8240 +43F8 +4A40 +0A40 +13FC +1004 +E554 +2554 +2554 +2404 +2028 +0010 +ENDCHAR +STARTCHAR uni6EA5 +ENCODING 28325 +BBX 15 15 1 -1 +BITMAP +4048 +2044 +1FFE +0040 +87FC +4444 +27FC +0444 +17FC +1444 +2008 +2FFE +4208 +4108 +8038 +ENDCHAR +STARTCHAR uni6EA6 +ENCODING 28326 +BBX 15 16 0 -2 +BITMAP +0108 +2548 +1548 +1550 +87DE +4024 +4014 +1FD4 +1014 +2794 +E494 +24A8 +24C8 +2494 +2814 +1022 +ENDCHAR +STARTCHAR uni6EA7 +ENCODING 28327 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1120 +0120 +8FFC +4924 +2924 +0FFC +0040 +1FFE +1150 +2248 +2444 +4842 +8040 +ENDCHAR +STARTCHAR uni6EA8 +ENCODING 28328 +BBX 15 16 0 -2 +BITMAP +0110 +2114 +17D2 +1110 +8110 +4FFE +4010 +1114 +17D4 +2114 +E394 +2548 +290A +211A +2126 +0142 +ENDCHAR +STARTCHAR uni6EA9 +ENCODING 28329 +BBX 15 16 0 -2 +BITMAP +0080 +2100 +13F8 +1208 +8208 +43F8 +4A00 +0BFE +1200 +13FC +E004 +2554 +2554 +2804 +2028 +0010 +ENDCHAR +STARTCHAR uni6EAA +ENCODING 28330 +BBX 15 15 1 -1 +BITMAP +4038 +27C8 +1444 +0842 +8880 +4120 +2240 +0188 +10F4 +1702 +2040 +2FFE +40A0 +4318 +8C06 +ENDCHAR +STARTCHAR uni6EAB +ENCODING 28331 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1488 +0488 +8488 +4548 +2628 +07F8 +1000 +1FFC +2924 +2924 +4924 +4924 +9FFE +ENDCHAR +STARTCHAR uni6EAC +ENCODING 28332 +BBX 15 16 0 -2 +BITMAP +0208 +2110 +17FC +1040 +8040 +43F8 +4840 +0880 +17FC +10A0 +E128 +2134 +223C +2222 +2422 +081E +ENDCHAR +STARTCHAR uni6EAD +ENCODING 28333 +BBX 15 15 0 -2 +BITMAP +27FC +1444 +17FC +8444 +47FC +4110 +1208 +1484 +21F8 +E208 +2508 +2090 +2060 +2198 +0E06 +ENDCHAR +STARTCHAR uni6EAE +ENCODING 28334 +BBX 15 16 0 -2 +BITMAP +0200 +24FE +1710 +1510 +857C +4554 +4754 +1454 +1454 +2754 +E554 +255C +2510 +2710 +2510 +0010 +ENDCHAR +STARTCHAR uni6EAF +ENCODING 28335 +BBX 14 15 1 -1 +BITMAP +4880 +24BC +1524 +1FE4 +8224 +423C +2AA4 +0AA4 +1AA4 +1ABC +2FA4 +2224 +4224 +4424 +984C +ENDCHAR +STARTCHAR uni6EB0 +ENCODING 28336 +BBX 15 15 0 -1 +BITMAP +0040 +2248 +1248 +1248 +83F8 +4000 +47FC +1000 +13F8 +2208 +E208 +23F8 +2110 +20A0 +27FE +ENDCHAR +STARTCHAR uni6EB1 +ENCODING 28337 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0040 +83F8 +40A0 +2FFE +0110 +1238 +1DC6 +2040 +27FC +40E0 +4358 +8C46 +ENDCHAR +STARTCHAR uni6EB2 +ENCODING 28338 +BBX 15 15 1 -1 +BITMAP +4040 +2140 +165C +0444 +875C +4444 +2444 +075C +1040 +1FFC +2208 +2190 +4060 +4198 +8E06 +ENDCHAR +STARTCHAR uni6EB3 +ENCODING 28339 +BBX 14 15 0 -2 +BITMAP +21F8 +1108 +1108 +81F8 +4000 +4BFC +0A04 +13FC +1204 +E3FC +2204 +23FC +2090 +2108 +0204 +ENDCHAR +STARTCHAR uni6EB4 +ENCODING 28340 +BBX 15 15 1 -1 +BITMAP +4080 +2100 +17F8 +0408 +87F8 +4408 +27F8 +0408 +07F8 +1090 +1088 +2FFE +2140 +4630 +980E +ENDCHAR +STARTCHAR uni6EB5 +ENCODING 28341 +BBX 15 15 0 -2 +BITMAP +21B8 +1628 +1428 +87A8 +44A8 +47CE +1480 +17B8 +2428 +E7A8 +24A8 +2490 +2890 +2AA8 +1146 +ENDCHAR +STARTCHAR uni6EB6 +ENCODING 28342 +BBX 14 15 1 -1 +BITMAP +4040 +2040 +17FC +0404 +8514 +4208 +2444 +00A0 +1110 +160C +23F8 +2208 +4208 +4208 +83F8 +ENDCHAR +STARTCHAR uni6EB7 +ENCODING 28343 +BBX 14 15 1 -1 +BITMAP +4000 +2FFC +1804 +0BF4 +8884 +4904 +2A94 +08A4 +1944 +1A44 +28E4 +2954 +4A4C +4884 +8FFC +ENDCHAR +STARTCHAR uni6EB8 +ENCODING 28344 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +1040 +83F8 +4040 +47FE +1080 +1110 +23E0 +E048 +27FC +2044 +2248 +2544 +0080 +ENDCHAR +STARTCHAR uni6EB9 +ENCODING 28345 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +1040 +8FFE +4882 +4110 +13E0 +1040 +2088 +E7FC +2044 +2248 +2444 +2942 +0080 +ENDCHAR +STARTCHAR uni6EBA +ENCODING 28346 +BBX 14 15 1 -1 +BITMAP +4000 +2F7C +0104 +0104 +8F7C +4840 +2840 +0F7C +1104 +1D6C +2314 +2524 +4944 +4104 +8E18 +ENDCHAR +STARTCHAR uni6EBB +ENCODING 28347 +BBX 14 15 0 -2 +BITMAP +23F8 +1208 +13F8 +8208 +43F8 +4000 +17BC +1084 +24A4 +E294 +218C +26B4 +2084 +2294 +0108 +ENDCHAR +STARTCHAR uni6EBC +ENCODING 28348 +BBX 15 14 0 -1 +BITMAP +2FFE +1210 +1210 +84A4 +4738 +4210 +14A4 +17BC +2040 +E040 +27FC +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6EBD +ENCODING 28349 +BBX 15 15 1 -1 +BITMAP +4000 +27FE +1400 +05FC +8400 +47FE +2524 +0528 +15D0 +1B0E +2008 +2FFE +4208 +4108 +8038 +ENDCHAR +STARTCHAR uni6EBE +ENCODING 28350 +BBX 15 16 0 -2 +BITMAP +0080 +2100 +17FC +1444 +8444 +47FC +4444 +1484 +17FC +20C8 +E150 +2168 +227C +2242 +2442 +083E +ENDCHAR +STARTCHAR uni6EBF +ENCODING 28351 +BBX 15 15 1 -1 +BITMAP +4010 +2054 +1F52 +1592 +9510 +557C +3510 +1F10 +1510 +35FE +3510 +5510 +5F10 +8010 +8010 +ENDCHAR +STARTCHAR uni6EC0 +ENCODING 28352 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +1080 +8108 +43F0 +4860 +0984 +17FE +1002 +E7FC +2444 +27FC +2444 +27FC +0404 +ENDCHAR +STARTCHAR uni6EC1 +ENCODING 28353 +BBX 15 15 1 -1 +BITMAP +4010 +2F10 +1928 +0924 +8A42 +4AFC +2A10 +0910 +19FE +1910 +2954 +2A54 +4892 +4892 +8830 +ENDCHAR +STARTCHAR uni6EC2 +ENCODING 28354 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0208 +8110 +4FFE +2842 +0040 +1FFE +1100 +21FC +2104 +4104 +4204 +8C18 +ENDCHAR +STARTCHAR uni6EC3 +ENCODING 28355 +BBX 15 15 1 -1 +BITMAP +4020 +2210 +1488 +0886 +8110 +4168 +2784 +0000 +0FBC +118C +16B4 +218C +2294 +44A4 +818C +ENDCHAR +STARTCHAR uni6EC4 +ENCODING 28356 +BBX 15 15 1 -1 +BITMAP +4040 +20A0 +1110 +02E8 +8C06 +43F8 +2208 +03F8 +1208 +13F8 +2400 +27FC +4A04 +5204 +83FC +ENDCHAR +STARTCHAR uni6EC5 +ENCODING 28357 +BBX 15 15 1 -1 +BITMAP +4028 +2024 +0FFE +0820 +8FE4 +4824 +2924 +0D68 +0BA8 +2918 +2A90 +2A50 +4C2A +504A +9084 +ENDCHAR +STARTCHAR uni6EC6 +ENCODING 28358 +BBX 15 15 0 -2 +BITMAP +2FFE +1000 +13F8 +8208 +4208 +43F8 +1000 +17FC +2514 +E4A4 +27FC +2444 +2444 +2454 +0408 +ENDCHAR +STARTCHAR uni6EC7 +ENCODING 28359 +BBX 15 15 1 -1 +BITMAP +420C +23F0 +1202 +01FE +8000 +45FC +2504 +05FC +1504 +15FC +2504 +27FE +4080 +4108 +8606 +ENDCHAR +STARTCHAR uni6EC8 +ENCODING 28360 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FE +1000 +83F8 +4208 +43F8 +1000 +17FC +2404 +E5F4 +2514 +25F4 +2404 +2414 +0408 +ENDCHAR +STARTCHAR uni6EC9 +ENCODING 28361 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1208 +03F8 +8208 +43F8 +2444 +0244 +1248 +1FFE +2110 +2110 +4210 +4412 +880E +ENDCHAR +STARTCHAR uni6ECA +ENCODING 28362 +BBX 15 15 1 -1 +BITMAP +4400 +2400 +17FC +0800 +93F0 +4000 +2FF8 +0108 +0928 +1548 +1FF8 +2388 +254A +492A +9114 +ENDCHAR +STARTCHAR uni6ECB +ENCODING 28363 +BBX 15 15 1 -1 +BITMAP +4208 +2108 +1110 +0FFE +8210 +4420 +2420 +0948 +1528 +1210 +2210 +2528 +44A4 +49CE +9E72 +ENDCHAR +STARTCHAR uni6ECC +ENCODING 28364 +BBX 15 15 1 -1 +BITMAP +4440 +2440 +14FE +0888 +8988 +5A50 +2A70 +0B8E +0A20 +2BFE +2AA8 +4AA8 +4924 +8A22 +8820 +ENDCHAR +STARTCHAR uni6ECD +ENCODING 28365 +BBX 15 16 0 -2 +BITMAP +0040 +2244 +1244 +13FC +8040 +4FFE +4000 +1040 +13FC +2244 +E244 +23FC +2040 +2044 +27FE +0202 +ENDCHAR +STARTCHAR uni6ECE +ENCODING 28366 +BBX 15 15 1 -1 +BITMAP +1020 +52A4 +54A8 +2850 +4488 +0000 +7FFC +4004 +4114 +3D10 +05A0 +0940 +3130 +C10E +0700 +ENDCHAR +STARTCHAR uni6ECF +ENCODING 28367 +BBX 15 15 0 -1 +BITMAP +0110 +4208 +2514 +20A0 +00E0 +8318 +4C06 +53F8 +1040 +2040 +E7FC +2040 +2248 +2150 +2FFE +ENDCHAR +STARTCHAR uni6ED0 +ENCODING 28368 +BBX 15 16 0 -2 +BITMAP +0208 +2208 +13BE +1488 +8AA8 +413E +4208 +1448 +1848 +27FC +E0E0 +2150 +2248 +2C46 +2040 +0040 +ENDCHAR +STARTCHAR uni6ED1 +ENCODING 28369 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1208 +0278 +8248 +4FFE +2802 +0BFA +1208 +13F8 +2208 +23F8 +4208 +4208 +8238 +ENDCHAR +STARTCHAR uni6ED2 +ENCODING 28370 +BBX 15 15 0 -2 +BITMAP +27FC +1008 +13C8 +8248 +4248 +43C8 +1000 +1FFE +2008 +E3C8 +2248 +2248 +23C8 +2028 +0010 +ENDCHAR +STARTCHAR uni6ED3 +ENCODING 28371 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0802 +8842 +47FC +2208 +0110 +1FFE +1040 +2040 +27FC +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6ED4 +ENCODING 28372 +BBX 15 15 1 -1 +BITMAP +4018 +23E8 +1244 +0222 +8422 +4440 +2080 +031C +1204 +1204 +23BC +2204 +4204 +4204 +83FC +ENDCHAR +STARTCHAR uni6ED5 +ENCODING 28373 +BBX 15 15 1 -1 +BITMAP +0150 +7948 +4A48 +4FFC +48A0 +78A0 +4FFE +4950 +4A48 +7D54 +48E2 +4950 +4A48 +8C44 +99C0 +ENDCHAR +STARTCHAR uni6ED6 +ENCODING 28374 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FE +1000 +83F8 +4208 +4FFE +1208 +13F8 +20A4 +E128 +2310 +2510 +2948 +2186 +0100 +ENDCHAR +STARTCHAR uni6ED7 +ENCODING 28375 +BBX 15 16 0 -2 +BITMAP +0210 +2210 +13DE +1528 +8884 +4078 +4780 +1080 +10F8 +2780 +E080 +20F8 +2F84 +2084 +2084 +007C +ENDCHAR +STARTCHAR uni6ED8 +ENCODING 28376 +BBX 15 15 0 -2 +BITMAP +47FE +2402 +2914 +0208 +85F4 +4040 +5040 +17FC +2000 +E000 +23F8 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni6ED9 +ENCODING 28377 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1800 +0888 +8890 +49FC +2B20 +09F8 +0920 +19F8 +1920 +2920 +29FC +4800 +8FFE +ENDCHAR +STARTCHAR uni6EDA +ENCODING 28378 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +1110 +8248 +4484 +4120 +13F0 +1010 +2088 +E150 +2320 +2510 +2948 +2186 +0100 +ENDCHAR +STARTCHAR uni6EDB +ENCODING 28379 +BBX 15 16 0 -2 +BITMAP +0004 +203E +17C0 +1244 +8124 +4128 +4200 +13FC +1440 +2040 +EFFE +2040 +2444 +2444 +27FC +0004 +ENDCHAR +STARTCHAR uni6EDC +ENCODING 28380 +BBX 15 16 0 -2 +BITMAP +0040 +2080 +13F8 +1208 +83F8 +4208 +4BF8 +0880 +17FC +1110 +E248 +2444 +2BFA +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6EDD +ENCODING 28381 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0208 +8110 +4FFE +2000 +07FC +1444 +17FC +2444 +2444 +47FC +4042 +803E +ENDCHAR +STARTCHAR uni6EDE +ENCODING 28382 +BBX 15 15 1 -1 +BITMAP +4248 +2248 +1FFE +0248 +8248 +43F8 +2000 +0FFE +0842 +1842 +27FC +2444 +4444 +444C +8040 +ENDCHAR +STARTCHAR uni6EDF +ENCODING 28383 +BBX 15 16 0 -2 +BITMAP +0420 +8420 +4478 +1F48 +8490 +447C +4454 +1E54 +2454 +447C +C440 +5F40 +4442 +4442 +443E +0400 +ENDCHAR +STARTCHAR uni6EE0 +ENCODING 28384 +BBX 15 15 0 -2 +BITMAP +23FC +1108 +11F8 +8108 +41F8 +410E +17F8 +1008 +27BC +E0A4 +22A4 +2128 +2290 +24A8 +0846 +ENDCHAR +STARTCHAR uni6EE1 +ENCODING 28385 +BBX 15 16 0 -2 +BITMAP +0108 +2108 +17FE +1108 +8000 +47FE +4090 +1090 +17FE +2492 +E492 +256A +2646 +2402 +240A +0404 +ENDCHAR +STARTCHAR uni6EE2 +ENCODING 28386 +BBX 15 15 0 -1 +BITMAP +0110 +2110 +17FE +1110 +8000 +4FFE +4802 +1000 +17FC +2040 +E040 +23F8 +2050 +2048 +2FFE +ENDCHAR +STARTCHAR uni6EE3 +ENCODING 28387 +BBX 15 15 0 -2 +BITMAP +23FE +1200 +12FC +8200 +43FE +4AA8 +0A90 +12C8 +1286 +E200 +22FC +2284 +2484 +24FC +0884 +ENDCHAR +STARTCHAR uni6EE4 +ENCODING 28388 +BBX 15 16 0 -2 +BITMAP +0040 +207C +1040 +17FE +8442 +4470 +47C4 +1444 +143C +2420 +E410 +2454 +2542 +2942 +294A +1238 +ENDCHAR +STARTCHAR uni6EE5 +ENCODING 28389 +BBX 15 15 0 -1 +BITMAP +0090 +2490 +149E +1490 +84A8 +44A4 +44C4 +1080 +1000 +27FC +E4A4 +24A4 +24A4 +24A4 +2FFE +ENDCHAR +STARTCHAR uni6EE6 +ENCODING 28390 +BBX 15 16 0 -2 +BITMAP +0080 +4040 +2FFE +20A0 +02A8 +82A4 +44A4 +5040 +1040 +27FE +E0E0 +2150 +2248 +2444 +2842 +0040 +ENDCHAR +STARTCHAR uni6EE7 +ENCODING 28391 +BBX 15 16 0 -2 +BITMAP +4410 +2210 +2210 +8FA0 +403E +4544 +04A4 +28A4 +3128 +4528 +C210 +4210 +4528 +4928 +5044 +0082 +ENDCHAR +STARTCHAR uni6EE8 +ENCODING 28392 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FE +1402 +8814 +43E0 +4A00 +0A00 +13FC +1210 +E210 +2FFE +2000 +2110 +2208 +0404 +ENDCHAR +STARTCHAR uni6EE9 +ENCODING 28393 +BBX 15 16 0 -2 +BITMAP +0050 +4048 +2E80 +22FE +0390 +9290 +4AFC +5A90 +1490 +24FC +EA90 +2A90 +3290 +20FE +2080 +0080 +ENDCHAR +STARTCHAR uni6EEA +ENCODING 28394 +BBX 15 15 0 -2 +BITMAP +4FBE +2088 +2510 +023E +8122 +4FAA +52AA +122A +222A +E22A +222A +2210 +2214 +2A22 +0442 +ENDCHAR +STARTCHAR uni6EEB +ENCODING 28395 +BBX 15 15 1 -1 +BITMAP +4240 +2240 +12FE +0584 +8448 +4A30 +2A68 +1B86 +0AFC +1A84 +1AFC +2A84 +2AFC +4884 +888C +ENDCHAR +STARTCHAR uni6EEC +ENCODING 28396 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1000 +07FC +8404 +47FC +2400 +04F8 +1488 +15FC +2524 +29FC +4900 +5102 +80FE +ENDCHAR +STARTCHAR uni6EED +ENCODING 28397 +BBX 15 15 0 -2 +BITMAP +27FC +1444 +17FC +8444 +47FC +5248 +1248 +17FE +2248 +E248 +27FC +2040 +2FFE +2040 +0040 +ENDCHAR +STARTCHAR uni6EEE +ENCODING 28398 +BBX 15 16 0 -2 +BITMAP +4200 +23C2 +2202 +8FE4 +4A28 +4B92 +0E42 +29C4 +2808 +4B92 +CA82 +4A84 +4A8A +4C92 +547E +0800 +ENDCHAR +STARTCHAR uni6EEF +ENCODING 28399 +BBX 15 15 1 -1 +BITMAP +42A8 +22A8 +1FFE +02A8 +84A8 +48EE +2000 +0FFE +0842 +2842 +27FC +2444 +4444 +444C +8040 +ENDCHAR +STARTCHAR uni6EF0 +ENCODING 28400 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +13F8 +1110 +80A0 +47FE +4000 +13F8 +1208 +23F8 +E208 +23F8 +2120 +2122 +2222 +0C1E +ENDCHAR +STARTCHAR uni6EF1 +ENCODING 28401 +BBX 15 16 0 -2 +BITMAP +4080 +2040 +2FFE +8802 +5004 +4F90 +001C +2010 +2F90 +457C +C504 +4528 +4910 +492A +5142 +20FE +ENDCHAR +STARTCHAR uni6EF2 +ENCODING 28402 +BBX 15 15 1 -1 +BITMAP +4100 +2110 +1238 +07C4 +8040 +4FFE +2110 +0228 +1CC6 +1310 +2060 +2184 +4008 +4030 +87C0 +ENDCHAR +STARTCHAR uni6EF3 +ENCODING 28403 +BBX 14 16 0 -2 +BITMAP +0080 +2040 +17FC +1110 +80A0 +47FC +44A4 +1514 +160C +25F4 +E514 +2514 +25F4 +2404 +2414 +0408 +ENDCHAR +STARTCHAR uni6EF4 +ENCODING 28404 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0208 +8110 +47FC +2404 +0444 +15F4 +1444 +25F4 +2514 +4514 +45F4 +840C +ENDCHAR +STARTCHAR uni6EF5 +ENCODING 28405 +BBX 15 16 0 -2 +BITMAP +0080 +4040 +27FE +2402 +0894 +8050 +4524 +554A +18FA +2300 +E040 +2444 +2444 +2444 +27FC +0004 +ENDCHAR +STARTCHAR uni6EF6 +ENCODING 28406 +BBX 15 16 0 -2 +BITMAP +0108 +2108 +1108 +17D0 +811E +4794 +5124 +1FD4 +1214 +23D4 +E254 +2248 +2248 +24D4 +2424 +0842 +ENDCHAR +STARTCHAR uni6EF7 +ENCODING 28407 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +107E +0040 +8040 +4FFE +2882 +0952 +1CA2 +1A4A +28A6 +2912 +4A4A +4822 +8FFE +ENDCHAR +STARTCHAR uni6EF8 +ENCODING 28408 +BBX 15 15 1 -1 +BITMAP +4020 +2F20 +007C +1F90 +8010 +4F10 +2010 +0F7E +1010 +1010 +2F10 +2910 +4910 +4910 +8F10 +ENDCHAR +STARTCHAR uni6EF9 +ENCODING 28409 +BBX 15 15 1 -1 +BITMAP +4040 +207C +1040 +07FE +8442 +45F8 +2442 +043E +05E0 +1524 +14A8 +2BFE +2820 +5020 +80E0 +ENDCHAR +STARTCHAR uni6EFA +ENCODING 28410 +BBX 15 15 0 -1 +BITMAP +0220 +4220 +243E +2548 +0DA8 +9510 +4528 +5446 +1480 +2040 +E124 +2522 +250A +250A +28F8 +ENDCHAR +STARTCHAR uni6EFB +ENCODING 28411 +BBX 14 15 1 -1 +BITMAP +4040 +2040 +0FFC +0210 +81E0 +4210 +2FFC +0840 +0940 +1BF8 +1C40 +29F8 +2840 +5040 +87FC +ENDCHAR +STARTCHAR uni6EFC +ENCODING 28412 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +17BE +1110 +83B8 +4554 +4912 +1000 +13F0 +2210 +E290 +2250 +2252 +2212 +240E +0800 +ENDCHAR +STARTCHAR uni6EFD +ENCODING 28413 +BBX 15 16 0 -2 +BITMAP +0020 +27FE +1420 +15FC +8424 +47FE +4424 +15FC +1420 +25FC +E524 +25FC +2524 +29FC +2924 +112C +ENDCHAR +STARTCHAR uni6EFE +ENCODING 28414 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0110 +8208 +4C06 +23F8 +0208 +1208 +13FA +2122 +2214 +4E50 +4388 +8E06 +ENDCHAR +STARTCHAR uni6EFF +ENCODING 28415 +BBX 15 15 1 -1 +BITMAP +4110 +2110 +1FFE +0110 +8110 +41F0 +2040 +0FFE +1842 +1B5A +294A +294A +4AD6 +4842 +8846 +ENDCHAR +STARTCHAR uni6F00 +ENCODING 28416 +BBX 15 16 0 -2 +BITMAP +0800 +7F78 +0848 +3E48 +0086 +3E78 +2A48 +3E30 +4048 +8084 +0108 +7D90 +0960 +1120 +2518 +C206 +ENDCHAR +STARTCHAR uni6F01 +ENCODING 28417 +BBX 15 15 1 -1 +BITMAP +4100 +21F8 +1210 +0C20 +87FC +4444 +2444 +07FC +1444 +1444 +27FC +2000 +4524 +4892 +9092 +ENDCHAR +STARTCHAR uni6F02 +ENCODING 28418 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1120 +0FFC +8924 +4924 +2FFC +0000 +17F8 +1000 +2FFE +2040 +4448 +5846 +81C0 +ENDCHAR +STARTCHAR uni6F03 +ENCODING 28419 +BBX 15 16 0 -2 +BITMAP +0080 +4040 +2FFE +2802 +1204 +83BC +4224 +5224 +1FA4 +2028 +E228 +2B10 +3290 +2228 +2A44 +0482 +ENDCHAR +STARTCHAR uni6F04 +ENCODING 28420 +BBX 15 15 0 -1 +BITMAP +0020 +2222 +1222 +13FE +8000 +43FE +4A20 +0BFC +1220 +13FE +E200 +2220 +25FC +2420 +2BFE +ENDCHAR +STARTCHAR uni6F05 +ENCODING 28421 +BBX 15 16 0 -2 +BITMAP +0248 +2490 +1248 +1000 +83F8 +4248 +4BF8 +0A48 +13F8 +1040 +E7FC +20E0 +2150 +2248 +2C46 +0040 +ENDCHAR +STARTCHAR uni6F06 +ENCODING 28422 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +0FFE +0150 +8248 +4C46 +20A0 +0318 +1C46 +1248 +2150 +20E0 +4358 +4C46 +80C0 +ENDCHAR +STARTCHAR uni6F07 +ENCODING 28423 +BBX 15 16 0 -2 +BITMAP +0210 +4210 +2450 +295C +0150 +8250 +46FE +5A00 +1210 +2250 +E25C +2250 +22B0 +2290 +230E +0200 +ENDCHAR +STARTCHAR uni6F08 +ENCODING 28424 +BBX 15 16 0 -2 +BITMAP +0100 +2110 +13DC +1254 +8554 +4288 +4108 +12F4 +1402 +2000 +E3FC +2040 +2150 +2248 +2544 +0080 +ENDCHAR +STARTCHAR uni6F09 +ENCODING 28425 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0920 +8FFC +4924 +2924 +0FFC +0800 +2A20 +2BAC +2A30 +5220 +53A2 +861E +ENDCHAR +STARTCHAR uni6F0A +ENCODING 28426 +BBX 15 15 1 -1 +BITMAP +4040 +27FC +1444 +0FFE +8444 +47FC +2040 +07FC +0444 +17FC +1080 +2FFE +2108 +41F0 +871C +ENDCHAR +STARTCHAR uni6F0B +ENCODING 28427 +BBX 15 16 0 -2 +BITMAP +0020 +4F3C +2944 +2AA8 +0A10 +8C28 +4AC6 +4938 +1910 +2950 +ED7E +2A90 +287C +2810 +28FE +0800 +ENDCHAR +STARTCHAR uni6F0C +ENCODING 28428 +BBX 15 15 1 -1 +BITMAP +4110 +2110 +1FFE +0110 +81F0 +4040 +27FC +0444 +07FC +1040 +17FC +2040 +27FC +4040 +8FFE +ENDCHAR +STARTCHAR uni6F0D +ENCODING 28429 +BBX 15 15 0 -2 +BITMAP +4FFE +282A +2826 +0FFE +8822 +4BAA +4AAA +1BAA +2832 +E996 +2E2E +2846 +2882 +2FFE +0802 +ENDCHAR +STARTCHAR uni6F0E +ENCODING 28430 +BBX 15 16 0 -2 +BITMAP +0124 +4124 +2224 +2424 +0954 +814A +4292 +5610 +1A10 +2250 +E25C +2250 +2250 +22B0 +229E +0300 +ENDCHAR +STARTCHAR uni6F0F +ENCODING 28431 +BBX 15 15 1 -1 +BITMAP +4000 +27FE +1402 +07FE +8400 +45FE +2420 +05FE +1522 +15AA +2566 +29AA +4966 +5122 +8126 +ENDCHAR +STARTCHAR uni6F10 +ENCODING 28432 +BBX 15 15 1 -1 +BITMAP +1040 +7C40 +11F8 +FE48 +44C8 +FE78 +108A +7C86 +1100 +010C +7D90 +0560 +1918 +E106 +0700 +ENDCHAR +STARTCHAR uni6F11 +ENCODING 28433 +BBX 15 15 1 -1 +BITMAP +4000 +2F7C +1928 +0928 +8F28 +4928 +2928 +0F7E +1810 +1810 +2F18 +2828 +482A +4F4A +8886 +ENDCHAR +STARTCHAR uni6F12 +ENCODING 28434 +BBX 15 15 0 -2 +BITMAP +277C +1144 +1144 +817C +4710 +4410 +147C +1454 +2754 +E154 +217C +2110 +2114 +2AFE +0402 +ENDCHAR +STARTCHAR uni6F13 +ENCODING 28435 +BBX 14 15 1 -1 +BITMAP +4040 +2040 +17FC +0000 +82A8 +4248 +23A8 +0208 +13F8 +1040 +27FC +2484 +4524 +47D4 +840C +ENDCHAR +STARTCHAR uni6F14 +ENCODING 28436 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0802 +83F8 +4040 +27FC +0444 +1444 +17FC +2444 +2444 +47FC +4208 +8C06 +ENDCHAR +STARTCHAR uni6F15 +ENCODING 28437 +BBX 15 15 1 -1 +BITMAP +8120 +5FFE +2120 +0FFC +8924 +4FFC +2924 +0FFC +1000 +17F8 +2408 +27F8 +4408 +4408 +87F8 +ENDCHAR +STARTCHAR uni6F16 +ENCODING 28438 +BBX 15 16 0 -2 +BITMAP +0208 +2248 +1748 +1290 +829E +4FE4 +4114 +1214 +1FD4 +2494 +E914 +21C8 +2F08 +2114 +2514 +0222 +ENDCHAR +STARTCHAR uni6F17 +ENCODING 28439 +BBX 15 16 0 -2 +BITMAP +0040 +2080 +13FC +1244 +82F4 +4314 +4AA4 +0A44 +12A4 +13FC +E040 +2024 +2522 +250A +2908 +00F8 +ENDCHAR +STARTCHAR uni6F18 +ENCODING 28440 +BBX 15 15 1 -1 +BITMAP +4000 +27FE +1400 +05FC +8400 +47FE +2494 +0488 +05FC +1706 +15FC +2504 +29FC +4904 +910C +ENDCHAR +STARTCHAR uni6F19 +ENCODING 28441 +BBX 15 16 0 -2 +BITMAP +0040 +4FFE +2040 +27FC +0444 +87FC +4444 +57FC +1042 +2FFE +E010 +2FFE +2210 +2110 +2150 +0020 +ENDCHAR +STARTCHAR uni6F1A +ENCODING 28442 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1800 +08F8 +8888 +4888 +28F8 +0800 +1BDE +1A52 +2A52 +2A52 +4BDE +4800 +8FFE +ENDCHAR +STARTCHAR uni6F1B +ENCODING 28443 +BBX 15 16 0 -2 +BITMAP +0040 +2248 +1150 +17FC +8040 +4080 +4FFE +1110 +1248 +2446 +EA48 +2150 +2248 +2444 +2140 +0080 +ENDCHAR +STARTCHAR uni6F1C +ENCODING 28444 +BBX 15 15 0 -1 +BITMAP +0110 +2110 +17BC +1110 +83B8 +4554 +4912 +1110 +1040 +2040 +E7FC +2040 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6F1D +ENCODING 28445 +BBX 14 15 0 -2 +BITMAP +27BC +1084 +14A4 +8294 +44A4 +4084 +1040 +13F8 +2208 +E208 +23F8 +2208 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni6F1E +ENCODING 28446 +BBX 15 16 0 -2 +BITMAP +000E +27F0 +1044 +1224 +8108 +43FC +4A04 +0BFC +1204 +13FC +E204 +23FC +2090 +2110 +2212 +0C0E +ENDCHAR +STARTCHAR uni6F1F +ENCODING 28447 +BBX 15 15 0 -1 +BITMAP +0040 +4444 +2248 +2FFE +0802 +83F8 +4208 +5208 +13F8 +2040 +E040 +27FC +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6F20 +ENCODING 28448 +BBX 15 15 1 -1 +BITMAP +4110 +2110 +1FFE +0110 +87FC +4404 +27FC +0404 +1404 +17FC +2040 +2FFE +40A0 +4318 +8C06 +ENDCHAR +STARTCHAR uni6F21 +ENCODING 28449 +BBX 15 16 0 -2 +BITMAP +0100 +21FC +1200 +15F8 +8108 +41F8 +4908 +09F8 +1000 +17FE +E100 +23FC +24A4 +2124 +2254 +0088 +ENDCHAR +STARTCHAR uni6F22 +ENCODING 28450 +BBX 15 15 1 -1 +BITMAP +4110 +2110 +1FFE +0110 +87FC +4444 +2444 +07FC +1040 +17FC +2040 +2FFE +40A0 +4318 +8C06 +ENDCHAR +STARTCHAR uni6F23 +ENCODING 28451 +BBX 15 15 1 -1 +BITMAP +9020 +4820 +07FE +1020 +89FC +4524 +01FC +1D24 +0524 +25FC +2420 +27FE +4420 +4A20 +91FE +ENDCHAR +STARTCHAR uni6F24 +ENCODING 28452 +BBX 15 16 0 -2 +BITMAP +0110 +4110 +27BC +2110 +03B8 +8554 +4912 +4080 +1080 +2FFC +E110 +2210 +2120 +20C0 +2330 +0C08 +ENDCHAR +STARTCHAR uni6F25 +ENCODING 28453 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +04A4 +84A4 +4F3E +2040 +03F8 +0040 +17FC +1040 +27FC +2040 +4040 +8FFE +ENDCHAR +STARTCHAR uni6F26 +ENCODING 28454 +BBX 15 16 0 -2 +BITMAP +0820 +3E3E +0844 +7FA8 +2A10 +4928 +0844 +3FFE +2000 +2088 +2ED0 +22A0 +2490 +4888 +5286 +8100 +ENDCHAR +STARTCHAR uni6F27 +ENCODING 28455 +BBX 15 16 0 -2 +BITMAP +0110 +4110 +2110 +2FDE +0120 +87C0 +445C +57C4 +1448 +27C8 +E110 +2FD0 +2122 +2122 +211E +0100 +ENDCHAR +STARTCHAR uni6F28 +ENCODING 28456 +BBX 15 16 0 -2 +BITMAP +0020 +247C +1284 +1148 +8030 +40CE +4610 +127C +1210 +227C +E210 +22FE +2210 +2210 +25FE +0800 +ENDCHAR +STARTCHAR uni6F29 +ENCODING 28457 +BBX 15 16 0 -2 +BITMAP +0420 +4220 +2220 +2F7E +0480 +8400 +477C +5514 +1510 +2550 +E55C +2550 +2950 +2B50 +30BE +2100 +ENDCHAR +STARTCHAR uni6F2A +ENCODING 28458 +BBX 15 15 1 -1 +BITMAP +4090 +2890 +157E +0210 +8228 +4544 +2900 +01FE +1304 +1574 +2954 +2154 +4174 +4204 +8C0C +ENDCHAR +STARTCHAR uni6F2B +ENCODING 28459 +BBX 15 15 1 -1 +BITMAP +4000 +21F8 +1108 +01F8 +8108 +41F8 +2000 +07FE +1492 +17FE +2000 +27FC +4108 +40F0 +879E +ENDCHAR +STARTCHAR uni6F2C +ENCODING 28460 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +0FFC +0080 +87F8 +4080 +2FFE +0408 +17F8 +1408 +27F8 +2408 +47F8 +4210 +8C0C +ENDCHAR +STARTCHAR uni6F2D +ENCODING 28461 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +17FC +1110 +8048 +47FC +40A0 +1110 +1208 +2514 +E110 +27FE +2110 +2110 +2210 +0410 +ENDCHAR +STARTCHAR uni6F2E +ENCODING 28462 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +17FE +1420 +85FC +4424 +47FE +1424 +15FC +2420 +E562 +24B4 +2928 +2A26 +30A0 +0040 +ENDCHAR +STARTCHAR uni6F2F +ENCODING 28463 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1444 +07FC +8444 +47FC +2040 +0088 +1310 +10A4 +27FA +2040 +4248 +4C46 +8040 +ENDCHAR +STARTCHAR uni6F30 +ENCODING 28464 +BBX 14 16 0 -2 +BITMAP +0040 +2444 +1444 +17FC +8000 +47BC +44A4 +14A4 +17BC +24A4 +E4A4 +27BC +24A4 +24A4 +2AB4 +1148 +ENDCHAR +STARTCHAR uni6F31 +ENCODING 28465 +BBX 15 15 1 -1 +BITMAP +4220 +2220 +1FA0 +027E +8FC2 +4A94 +2A90 +0A90 +2F90 +2228 +2728 +46A8 +4A44 +5244 +8282 +ENDCHAR +STARTCHAR uni6F32 +ENCODING 28466 +BBX 15 15 1 -1 +BITMAP +4000 +3EFC +0280 +02F8 +9E80 +50F8 +1080 +13FE +1EA0 +22A2 +2294 +4294 +4288 +82E4 +9D82 +ENDCHAR +STARTCHAR uni6F33 +ENCODING 28467 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0110 +8FFE +4000 +27FC +0404 +17FC +1404 +27FC +2040 +4FFE +4040 +8040 +ENDCHAR +STARTCHAR uni6F34 +ENCODING 28468 +BBX 15 16 0 -2 +BITMAP +0040 +2444 +1444 +17FC +8080 +4040 +47FE +1402 +1BF4 +2000 +E7FC +2040 +2250 +2448 +2944 +0080 +ENDCHAR +STARTCHAR uni6F35 +ENCODING 28469 +BBX 15 15 1 -1 +BITMAP +4210 +2210 +1510 +053E +88A4 +5FE4 +3254 +0214 +1FD4 +2208 +2A88 +4A98 +5294 +92A4 +8642 +ENDCHAR +STARTCHAR uni6F36 +ENCODING 28470 +BBX 15 15 1 -1 +BITMAP +4040 +23F8 +1248 +03F8 +8040 +47FC +2444 +0444 +07FC +1040 +1080 +2A48 +2A44 +520A +91F8 +ENDCHAR +STARTCHAR uni6F37 +ENCODING 28471 +BBX 15 16 0 -2 +BITMAP +0200 +211E +17D2 +1012 +87D4 +4454 +47D8 +1014 +17D2 +2092 +E112 +21DA +2714 +2110 +2510 +0210 +ENDCHAR +STARTCHAR uni6F38 +ENCODING 28472 +BBX 15 15 1 -1 +BITMAP +4400 +240C +1F70 +0440 +1F40 +957E +5548 +3F48 +1548 +1548 +3F48 +2448 +7F88 +4488 +8508 +ENDCHAR +STARTCHAR uni6F39 +ENCODING 28473 +BBX 15 15 0 -2 +BITMAP +27FC +1040 +1278 +8240 +4FFE +4100 +11FC +1200 +23FC +E004 +2554 +2554 +2804 +2028 +0010 +ENDCHAR +STARTCHAR uni6F3A +ENCODING 28474 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +1040 +8554 +4248 +4554 +1040 +1554 +2248 +E554 +20A0 +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni6F3B +ENCODING 28475 +BBX 15 15 0 -2 +BITMAP +27BC +1084 +14A4 +8294 +44A4 +4050 +1188 +1626 +20C0 +E310 +2064 +2388 +2030 +20C0 +0700 +ENDCHAR +STARTCHAR uni6F3C +ENCODING 28476 +BBX 15 15 1 -1 +BITMAP +4040 +2444 +1444 +07FC +8220 +4240 +27FC +0440 +0FFC +1440 +1440 +27FC +2440 +4440 +87FE +ENDCHAR +STARTCHAR uni6F3D +ENCODING 28477 +BBX 15 15 0 -2 +BITMAP +27FC +1404 +17FC +8420 +44A8 +4470 +14A8 +1504 +24A0 +E4FC +2520 +2420 +2BFE +2820 +1020 +ENDCHAR +STARTCHAR uni6F3E +ENCODING 28478 +BBX 15 15 1 -1 +BITMAP +4208 +2110 +17FC +0040 +83F8 +4040 +2FFE +0080 +1060 +17C4 +204C +2F68 +4150 +4248 +8DC6 +ENDCHAR +STARTCHAR uni6F3F +ENCODING 28479 +BBX 14 15 1 -1 +BITMAP +0840 +48F8 +4B28 +7898 +0BE0 +F808 +2FFC +4908 +8AB8 +0200 +7B30 +0AC0 +1260 +E21C +0E00 +ENDCHAR +STARTCHAR uni6F40 +ENCODING 28480 +BBX 15 15 0 -2 +BITMAP +27FC +14A4 +14A4 +87FC +4000 +401C +17E0 +1248 +2248 +E248 +2554 +2554 +2862 +2040 +0040 +ENDCHAR +STARTCHAR uni6F41 +ENCODING 28481 +BBX 15 15 1 -1 +BITMAP +4000 +46FE +7810 +417C +4144 +3F7C +0844 +0944 +EA7C +2A44 +2C44 +4A7C +4908 +88A4 +38C2 +ENDCHAR +STARTCHAR uni6F42 +ENCODING 28482 +BBX 15 15 0 -1 +BITMAP +0040 +2444 +1444 +17FC +8000 +4208 +4110 +17FC +1110 +2110 +E514 +2318 +2110 +2110 +2FFE +ENDCHAR +STARTCHAR uni6F43 +ENCODING 28483 +BBX 15 16 0 -2 +BITMAP +0240 +4440 +28FC +3088 +0350 +8420 +4CD8 +5706 +14F8 +2488 +E4F8 +2488 +24F8 +2488 +2488 +0498 +ENDCHAR +STARTCHAR uni6F44 +ENCODING 28484 +BBX 15 16 0 -2 +BITMAP +0108 +2108 +17C8 +1110 +811E +47E4 +4554 +1554 +17D4 +2114 +E394 +2548 +2948 +2114 +2114 +0122 +ENDCHAR +STARTCHAR uni6F45 +ENCODING 28485 +BBX 15 15 1 -1 +BITMAP +4100 +2100 +13FC +0240 +8440 +4FFE +2220 +07FC +1C20 +17FC +2420 +27FC +4420 +4420 +87FE +ENDCHAR +STARTCHAR uni6F46 +ENCODING 28486 +BBX 15 16 0 -2 +BITMAP +0110 +4FFE +2110 +2000 +0FFE +8882 +5114 +43E0 +1040 +2088 +E7FC +2044 +2250 +2448 +2944 +0080 +ENDCHAR +STARTCHAR uni6F47 +ENCODING 28487 +BBX 15 16 0 -2 +BITMAP +0110 +4110 +2FFE +2110 +0040 +87FC +4044 +5FFE +1044 +27FC +E040 +2564 +2554 +2654 +2844 +1044 +ENDCHAR +STARTCHAR uni6F48 +ENCODING 28488 +BBX 15 15 0 -2 +BITMAP +27FC +14A4 +14A4 +84A4 +47FC +4080 +1144 +1668 +20B0 +E128 +2668 +20A4 +2122 +26A0 +0040 +ENDCHAR +STARTCHAR uni6F49 +ENCODING 28489 +BBX 15 16 0 -2 +BITMAP +0040 +2444 +1444 +17FC +8000 +47FC +4404 +17FC +1404 +27FC +E000 +2424 +27A8 +2432 +25A2 +061E +ENDCHAR +STARTCHAR uni6F4A +ENCODING 28490 +BBX 15 16 0 -2 +BITMAP +4210 +2210 +2510 +849E +4810 +5710 +027C +2224 +2FA4 +4224 +CB28 +4AA8 +5290 +4228 +4A44 +0482 +ENDCHAR +STARTCHAR uni6F4B +ENCODING 28491 +BBX 15 16 0 -2 +BITMAP +4210 +2210 +2510 +84A0 +483E +5744 +0024 +24A4 +32A4 +4AA8 +C8A8 +4110 +43A8 +5C28 +4044 +0082 +ENDCHAR +STARTCHAR uni6F4C +ENCODING 28492 +BBX 15 15 0 -1 +BITMAP +0080 +2040 +17FC +1514 +8208 +47FC +4080 +1110 +13F8 +2048 +E040 +23F8 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni6F4D +ENCODING 28493 +BBX 15 16 0 -2 +BITMAP +0450 +8448 +4480 +08FE +8B90 +5E90 +44FC +0490 +2890 +5EFC +C890 +4090 +4690 +58FE +4080 +0080 +ENDCHAR +STARTCHAR uni6F4E +ENCODING 28494 +BBX 15 16 0 -2 +BITMAP +0108 +2108 +1548 +1390 +811E +47D4 +4564 +1554 +1554 +2754 +E5D4 +2548 +2548 +2554 +2464 +04C2 +ENDCHAR +STARTCHAR uni6F4F +ENCODING 28495 +BBX 14 15 0 -2 +BITMAP +27F8 +1090 +1060 +87FC +40A4 +4128 +16A0 +1040 +27FC +E4A4 +2514 +26EC +24A4 +24E4 +040C +ENDCHAR +STARTCHAR uni6F50 +ENCODING 28496 +BBX 15 16 0 -2 +BITMAP +0140 +2120 +13FE +1220 +8620 +4BFC +4220 +1220 +13FC +2220 +E220 +23FE +2200 +2524 +2492 +0892 +ENDCHAR +STARTCHAR uni6F51 +ENCODING 28497 +BBX 15 15 1 -1 +BITMAP +43D0 +28A2 +1514 +0208 +8C06 +4778 +2148 +0148 +174E +1480 +247C +2744 +4128 +4130 +8ECE +ENDCHAR +STARTCHAR uni6F52 +ENCODING 28498 +BBX 15 15 1 -1 +BITMAP +4100 +23F0 +1420 +0FFC +8444 +4444 +27FC +00C2 +0764 +11A8 +1E70 +20A8 +2124 +4E22 +80C0 +ENDCHAR +STARTCHAR uni6F53 +ENCODING 28499 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +2FFE +2040 +07FC +8444 +47FC +5444 +17FC +2044 +EFFE +2042 +2024 +2522 +250A +08F8 +ENDCHAR +STARTCHAR uni6F54 +ENCODING 28500 +BBX 15 15 1 -1 +BITMAP +4200 +2FBE +1212 +0F92 +8222 +43A2 +2E4C +0110 +1220 +1148 +2FF4 +2042 +4248 +4444 +8842 +ENDCHAR +STARTCHAR uni6F55 +ENCODING 28501 +BBX 15 15 0 -1 +BITMAP +0100 +2100 +13FC +16A8 +8AA8 +42A8 +47FC +12A8 +12A8 +22A8 +EFFE +2000 +22A8 +2254 +2454 +ENDCHAR +STARTCHAR uni6F56 +ENCODING 28502 +BBX 15 14 0 -1 +BITMAP +4FBE +2208 +27BC +0208 +8FBE +4000 +57FC +1444 +2444 +E7FC +2400 +2402 +2402 +23FE +ENDCHAR +STARTCHAR uni6F57 +ENCODING 28503 +BBX 15 15 1 -1 +BITMAP +4210 +2220 +17FC +0C20 +87FC +4420 +27FC +0420 +07FE +1040 +1FFE +2150 +2248 +4C46 +8040 +ENDCHAR +STARTCHAR uni6F58 +ENCODING 28504 +BBX 15 15 1 -1 +BITMAP +4038 +27C0 +1248 +0150 +8FFE +4150 +2248 +0444 +1BFA +1248 +2248 +23F8 +4248 +4248 +83F8 +ENDCHAR +STARTCHAR uni6F59 +ENCODING 28505 +BBX 15 15 1 -1 +BITMAP +4030 +27C8 +1244 +07F8 +8408 +4408 +27FC +0404 +1404 +17FE +280A +2AA6 +5252 +4442 +841C +ENDCHAR +STARTCHAR uni6F5A +ENCODING 28506 +BBX 15 15 1 -1 +BITMAP +4040 +27FC +1044 +0FFE +8044 +47FC +2040 +0554 +075C +1444 +17FC +2444 +275C +4554 +8844 +ENDCHAR +STARTCHAR uni6F5B +ENCODING 28507 +BBX 15 15 1 -1 +BITMAP +4208 +3F7C +0A28 +0A28 +9F7E +4618 +2B2A +124E +07F8 +1408 +1408 +27F8 +2408 +4408 +87F8 +ENDCHAR +STARTCHAR uni6F5C +ENCODING 28508 +BBX 15 15 1 -1 +BITMAP +4208 +2208 +1FBE +0208 +8FBE +4208 +2514 +08A2 +17FC +1404 +2404 +27FC +4404 +4404 +87FC +ENDCHAR +STARTCHAR uni6F5D +ENCODING 28509 +BBX 15 16 0 -2 +BITMAP +0040 +20A0 +1118 +16E6 +8000 +43F8 +4A08 +0BF8 +1000 +17BC +E084 +24A4 +2294 +24A4 +2294 +0108 +ENDCHAR +STARTCHAR uni6F5E +ENCODING 28510 +BBX 15 15 1 -1 +BITMAP +4020 +2F20 +197C +0944 +89C4 +4F28 +2210 +0228 +0A44 +2B82 +2A7C +4A44 +4B44 +8C44 +B07C +ENDCHAR +STARTCHAR uni6F5F +ENCODING 28511 +BBX 15 15 1 -1 +BITMAP +40C0 +231C +1204 +0204 +83BC +4204 +2204 +03FC +1200 +17FE +2802 +2452 +452A +4882 +900C +ENDCHAR +STARTCHAR uni6F60 +ENCODING 28512 +BBX 15 15 1 -1 +BITMAP +4000 +2FBE +18A2 +0FBE +8820 +48A2 +279E +0110 +07FC +1110 +1110 +2FFE +2110 +4208 +8C06 +ENDCHAR +STARTCHAR uni6F61 +ENCODING 28513 +BBX 15 15 1 -1 +BITMAP +4210 +2210 +1FD0 +003E +8FA4 +48E4 +2FA4 +0028 +1FA8 +1118 +2210 +2F90 +4228 +4244 +8E82 +ENDCHAR +STARTCHAR uni6F62 +ENCODING 28514 +BBX 15 15 1 -1 +BITMAP +4110 +2110 +17FC +0110 +81F0 +4000 +2FFE +0040 +17FC +1444 +27FC +2444 +47FC +4208 +8C06 +ENDCHAR +STARTCHAR uni6F63 +ENCODING 28515 +BBX 14 15 0 -2 +BITMAP +27BC +14A4 +17BC +84A4 +47BC +4484 +1444 +15F4 +2424 +E4A4 +2444 +24A4 +2504 +2414 +0408 +ENDCHAR +STARTCHAR uni6F64 +ENCODING 28516 +BBX 15 15 1 -1 +BITMAP +4000 +2FBE +18A2 +0FBE +88A2 +4FBE +2802 +09F2 +0842 +0842 +29F2 +2842 +4842 +4BFA +8806 +ENDCHAR +STARTCHAR uni6F65 +ENCODING 28517 +BBX 15 15 0 -2 +BITMAP +27FC +10A0 +10A0 +87FC +44A4 +44A4 +17FC +1248 +2150 +E7FC +20E0 +2150 +2248 +2C46 +0040 +ENDCHAR +STARTCHAR uni6F66 +ENCODING 28518 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0110 +8514 +4208 +27FC +0A0A +13F8 +1208 +23F8 +2040 +4250 +4C4C +81C0 +ENDCHAR +STARTCHAR uni6F67 +ENCODING 28519 +BBX 14 16 0 -2 +BITMAP +0208 +2110 +1000 +17FC +8444 +4554 +44E4 +1444 +17FC +2000 +E3F8 +2208 +23F8 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni6F68 +ENCODING 28520 +BBX 15 15 1 -1 +BITMAP +4040 +2080 +1FFC +0924 +8924 +5FFE +2060 +07C4 +02A4 +14A8 +1990 +2288 +2484 +5882 +8080 +ENDCHAR +STARTCHAR uni6F69 +ENCODING 28521 +BBX 15 15 0 -2 +BITMAP +27FC +1444 +17FC +8444 +47FC +4110 +1110 +17FC +2110 +E110 +2FFE +2000 +2110 +2208 +0404 +ENDCHAR +STARTCHAR uni6F6A +ENCODING 28522 +BBX 15 16 0 -2 +BITMAP +0200 +43DE +2512 +2112 +0FD2 +8292 +425E +5400 +13FC +2204 +E204 +23FC +2204 +2204 +23FC +0204 +ENDCHAR +STARTCHAR uni6F6B +ENCODING 28523 +BBX 15 16 0 -2 +BITMAP +0040 +2248 +1150 +13F8 +8080 +47FC +4110 +1288 +1516 +21E0 +E048 +23FC +2044 +2248 +2444 +00C0 +ENDCHAR +STARTCHAR uni6F6C +ENCODING 28524 +BBX 14 15 0 -2 +BITMAP +27BC +14A4 +14A4 +87BC +4000 +4BF8 +0A48 +13F8 +1248 +E3F8 +2040 +27FC +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6F6D +ENCODING 28525 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +10A0 +07FC +84A4 +47FC +2000 +03F8 +1208 +13F8 +2208 +23F8 +4040 +4FFE +8040 +ENDCHAR +STARTCHAR uni6F6E +ENCODING 28526 +BBX 14 15 1 -1 +BITMAP +4200 +223C +1FE4 +0224 +8FA4 +48BC +2FA4 +08A4 +08A4 +0FBC +2224 +3FE4 +4244 +4244 +828C +ENDCHAR +STARTCHAR uni6F6F +ENCODING 28527 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1008 +0FFE +8008 +43F8 +2000 +0FBC +1224 +1FBC +2008 +2FFE +4208 +4108 +8038 +ENDCHAR +STARTCHAR uni6F70 +ENCODING 28528 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0444 +87FC +4040 +2FFE +0404 +17FC +1404 +27FC +2404 +47FC +4208 +8C06 +ENDCHAR +STARTCHAR uni6F71 +ENCODING 28529 +BBX 14 15 0 -1 +BITMAP +0040 +27FC +1040 +13F8 +8000 +47FC +4404 +13F8 +1000 +23F8 +E208 +23F8 +2208 +2110 +27FC +ENDCHAR +STARTCHAR uni6F72 +ENCODING 28530 +BBX 14 16 0 -2 +BITMAP +0110 +4E10 +2254 +2238 +0210 +8F7C +4244 +5344 +16FC +2644 +EA44 +227C +2244 +2244 +2254 +0248 +ENDCHAR +STARTCHAR uni6F73 +ENCODING 28531 +BBX 15 15 0 -2 +BITMAP +23FC +1204 +1204 +83FC +4222 +4AFC +0A28 +13FE +1220 +E2FC +2384 +22FC +2484 +24FC +0884 +ENDCHAR +STARTCHAR uni6F74 +ENCODING 28532 +BBX 15 15 1 -1 +BITMAP +9240 +5248 +2A48 +04FC +8450 +4A50 +33FE +2248 +06FC +2B84 +3284 +22FC +4284 +4484 +98FC +ENDCHAR +STARTCHAR uni6F75 +ENCODING 28533 +BBX 15 16 0 -2 +BITMAP +0288 +2288 +17C8 +1290 +829E +4FD4 +4024 +17D4 +1454 +27D4 +E454 +27C8 +2448 +2454 +2464 +04C2 +ENDCHAR +STARTCHAR uni6F76 +ENCODING 28534 +BBX 15 15 0 -2 +BITMAP +27FC +1444 +1554 +84E4 +4444 +47FC +1040 +17FC +2040 +E040 +2FFE +2000 +2524 +2492 +0892 +ENDCHAR +STARTCHAR uni6F77 +ENCODING 28535 +BBX 15 16 0 -2 +BITMAP +0210 +23DE +1528 +1084 +8040 +43F8 +4048 +17FE +1048 +23F8 +E040 +23FC +2040 +27FE +2040 +0040 +ENDCHAR +STARTCHAR uni6F78 +ENCODING 28536 +BBX 15 15 1 -1 +BITMAP +4208 +2208 +1FBE +0208 +871C +4AAA +2208 +03F8 +1208 +13F8 +2208 +23F8 +4208 +4408 +8838 +ENDCHAR +STARTCHAR uni6F79 +ENCODING 28537 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +17FC +10E0 +8150 +464C +4040 +1110 +1110 +27BC +E110 +23B8 +2554 +2912 +2110 +0110 +ENDCHAR +STARTCHAR uni6F7A +ENCODING 28538 +BBX 15 15 1 -1 +BITMAP +4000 +2FFC +1804 +0FFC +8800 +49F8 +2810 +0BFC +1820 +1860 +2B9C +2884 +4FDE +4908 +9318 +ENDCHAR +STARTCHAR uni6F7B +ENCODING 28539 +BBX 15 16 0 -2 +BITMAP +0038 +23C0 +1040 +17FC +8150 +4248 +44A4 +1110 +1248 +2C46 +E248 +2150 +2248 +2444 +2140 +0080 +ENDCHAR +STARTCHAR uni6F7C +ENCODING 28540 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0110 +8FFE +4000 +23F8 +0248 +13F8 +1248 +23F8 +2040 +47FC +4040 +8FFE +ENDCHAR +STARTCHAR uni6F7D +ENCODING 28541 +BBX 15 15 1 -1 +BITMAP +4210 +2120 +1FFC +0120 +8924 +4528 +2120 +1FFE +0000 +17F8 +1408 +27F8 +2408 +4408 +87F8 +ENDCHAR +STARTCHAR uni6F7E +ENCODING 28542 +BBX 15 15 1 -1 +BITMAP +4448 +2250 +1040 +07FC +8160 +4250 +2448 +0844 +1788 +14FC +24A8 +2AA8 +517E +4208 +8C08 +ENDCHAR +STARTCHAR uni6F7F +ENCODING 28543 +BBX 14 15 0 -2 +BITMAP +27FC +1444 +15F4 +8494 +47FC +4404 +15F4 +1514 +25F4 +E444 +24F4 +2544 +25FC +2444 +07FC +ENDCHAR +STARTCHAR uni6F80 +ENCODING 28544 +BBX 15 15 1 -1 +BITMAP +4000 +3F7C +0924 +0924 +9964 +4934 +2944 +138C +1000 +1208 +2BAE +2A28 +4A28 +4BA8 +9C7E +ENDCHAR +STARTCHAR uni6F81 +ENCODING 28545 +BBX 15 15 1 -1 +BITMAP +4040 +2240 +1278 +0240 +8240 +4FFE +2000 +0208 +1A28 +1A28 +2BAE +2A28 +4A28 +4BA8 +9C7E +ENDCHAR +STARTCHAR uni6F82 +ENCODING 28546 +BBX 15 15 1 -1 +BITMAP +4210 +2210 +1A90 +0ABE +8AA4 +4FE4 +2014 +0F94 +1214 +1208 +2F88 +2208 +4214 +4394 +9C22 +ENDCHAR +STARTCHAR uni6F83 +ENCODING 28547 +BBX 15 16 0 -2 +BITMAP +0BFE +1040 +61FC +0904 +11FC +6104 +05FC +0904 +31FC +C088 +010C +7D90 +0960 +1120 +2518 +C206 +ENDCHAR +STARTCHAR uni6F84 +ENCODING 28548 +BBX 15 15 1 -1 +BITMAP +4000 +27D0 +18A2 +1514 +8208 +4DF6 +2000 +03F8 +0208 +1208 +13F8 +2210 +2110 +4020 +9FFE +ENDCHAR +STARTCHAR uni6F85 +ENCODING 28549 +BBX 15 16 0 -2 +BITMAP +0040 +23F8 +1048 +17FE +8048 +43F8 +4040 +17FE +1000 +23F8 +E248 +23F8 +2248 +23F8 +2000 +07FE +ENDCHAR +STARTCHAR uni6F86 +ENCODING 28550 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +13F8 +0040 +87FC +4208 +2FBE +0208 +1388 +1E3E +2000 +2FFE +4110 +4212 +8C0E +ENDCHAR +STARTCHAR uni6F87 +ENCODING 28551 +BBX 14 16 0 -2 +BITMAP +0110 +4554 +25B8 +2910 +02A8 +8444 +4000 +57FC +1484 +2888 +E7F8 +2088 +2088 +2108 +2228 +0410 +ENDCHAR +STARTCHAR uni6F88 +ENCODING 28552 +BBX 15 15 1 -1 +BITMAP +4210 +2210 +1FD0 +041E +8534 +49A4 +2E94 +0014 +1F94 +1888 +2F88 +2888 +4F94 +4894 +89A2 +ENDCHAR +STARTCHAR uni6F89 +ENCODING 28553 +BBX 15 16 0 -2 +BITMAP +0008 +4788 +2088 +2110 +0FDE +8494 +44A4 +5794 +1494 +2794 +E494 +24C8 +2788 +2C94 +20A4 +00C2 +ENDCHAR +STARTCHAR uni6F8A +ENCODING 28554 +BBX 15 16 0 -2 +BITMAP +0108 +2090 +17FE +1090 +83FC +4294 +4B1C +0A04 +13FC +1204 +E3FC +2008 +27FE +2108 +20A8 +0010 +ENDCHAR +STARTCHAR uni6F8B +ENCODING 28555 +BBX 15 15 0 -2 +BITMAP +23F8 +1208 +13F8 +8208 +43F8 +4040 +17FE +1000 +23F8 +E208 +23F8 +2040 +2248 +2444 +00C0 +ENDCHAR +STARTCHAR uni6F8C +ENCODING 28556 +BBX 15 15 1 -1 +BITMAP +4486 +24B8 +1FE0 +04A0 +84A0 +47BE +24A4 +04A4 +17A4 +14A4 +24A4 +3FE4 +44A4 +4844 +9004 +ENDCHAR +STARTCHAR uni6F8D +ENCODING 28557 +BBX 15 15 1 -1 +BITMAP +4104 +2104 +1FC4 +013E +8784 +4004 +27A4 +0494 +1494 +1784 +2004 +2484 +43C4 +4E04 +801C +ENDCHAR +STARTCHAR uni6F8E +ENCODING 28558 +BBX 15 15 1 -1 +BITMAP +4104 +2104 +1FE8 +0110 +87C2 +4002 +27C4 +0448 +17D0 +1000 +2442 +2242 +4284 +41C8 +8E10 +ENDCHAR +STARTCHAR uni6F8F +ENCODING 28559 +BBX 14 15 0 -2 +BITMAP +23F8 +1208 +1208 +83F8 +4000 +47BC +14A4 +14A4 +27BC +E040 +2444 +2444 +2444 +27FC +0004 +ENDCHAR +STARTCHAR uni6F90 +ENCODING 28560 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1040 +0FFE +8842 +4B5A +2842 +0358 +0000 +17FC +1000 +2FFE +2110 +4268 +8F84 +ENDCHAR +STARTCHAR uni6F91 +ENCODING 28561 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +10A0 +07BC +84A4 +44A4 +27BC +00A0 +17FC +1444 +2444 +27FC +4444 +4444 +87FC +ENDCHAR +STARTCHAR uni6F92 +ENCODING 28562 +BBX 15 15 0 -2 +BITMAP +20FE +1010 +1720 +827C +4244 +4244 +127C +1244 +227C +E3C4 +2E44 +207C +2028 +2044 +0082 +ENDCHAR +STARTCHAR uni6F93 +ENCODING 28563 +BBX 15 16 0 -2 +BITMAP +0140 +2140 +127E +1480 +897C +4144 +427C +1644 +1A7C +2220 +E23C +2244 +22A8 +2210 +2228 +02C6 +ENDCHAR +STARTCHAR uni6F94 +ENCODING 28564 +BBX 15 15 1 -1 +BITMAP +4010 +2450 +1450 +087C +8F90 +4910 +2910 +09FE +0F10 +0900 +297C +2944 +4F44 +4044 +807C +ENDCHAR +STARTCHAR uni6F95 +ENCODING 28565 +BBX 15 16 0 -2 +BITMAP +0110 +2FFE +1110 +1000 +87FC +4150 +5150 +1FFE +1150 +2150 +E7FC +2040 +2FFE +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6F96 +ENCODING 28566 +BBX 15 15 1 -1 +BITMAP +4000 +2FBE +18A2 +0FBE +88A2 +4FBE +2802 +0842 +0BFA +1842 +18E2 +28E2 +2952 +4A4A +8846 +ENDCHAR +STARTCHAR uni6F97 +ENCODING 28567 +BBX 15 15 1 -1 +BITMAP +4000 +2FBE +18A2 +0FBE +88A2 +4FBE +2802 +09F2 +0912 +1912 +29F2 +2912 +4912 +49F2 +880E +ENDCHAR +STARTCHAR uni6F98 +ENCODING 28568 +BBX 15 15 1 -1 +BITMAP +4208 +2208 +1FBE +0208 +871C +469A +2AAA +1248 +0000 +17FC +1404 +27FC +2404 +4404 +87FC +ENDCHAR +STARTCHAR uni6F99 +ENCODING 28569 +BBX 15 15 0 -2 +BITMAP +2080 +173C +1404 +87BC +4404 +47FC +1200 +13FC +2400 +E7FE +2002 +2552 +24AA +28AA +0004 +ENDCHAR +STARTCHAR uni6F9A +ENCODING 28570 +BBX 15 16 0 -2 +BITMAP +0100 +27FC +1444 +1554 +8444 +47FC +44E4 +1554 +1000 +2FFE +E200 +23FC +2004 +2004 +2028 +0010 +ENDCHAR +STARTCHAR uni6F9B +ENCODING 28571 +BBX 15 16 0 -2 +BITMAP +0100 +43F0 +2410 +2FFC +1444 +87FC +4444 +57FC +1000 +2FFE +E000 +23F8 +2208 +23F8 +2208 +03F8 +ENDCHAR +STARTCHAR uni6F9C +ENCODING 28572 +BBX 14 16 0 -2 +BITMAP +0200 +217C +1504 +1444 +85F4 +4444 +45F4 +1554 +1574 +25D4 +E554 +25F4 +24E4 +2554 +2444 +044C +ENDCHAR +STARTCHAR uni6F9D +ENCODING 28573 +BBX 15 16 0 -2 +BITMAP +0080 +4040 +2FFE +2882 +0548 +8514 +48F4 +4000 +17FC +2444 +E7FC +2444 +27FC +2444 +2454 +0408 +ENDCHAR +STARTCHAR uni6F9E +ENCODING 28574 +BBX 15 16 0 -2 +BITMAP +0040 +207C +1040 +17FE +8442 +45F8 +4444 +15FC +1508 +25F8 +E400 +25FE +2420 +2BFE +2888 +1306 +ENDCHAR +STARTCHAR uni6F9F +ENCODING 28575 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +02A8 +82A8 +42E8 +2208 +03F8 +000C +17F0 +1040 +2FFE +2150 +4248 +8C46 +ENDCHAR +STARTCHAR uni6FA0 +ENCODING 28576 +BBX 15 15 1 -1 +BITMAP +4000 +2FF8 +1948 +0948 +8F78 +4140 +2F78 +0948 +1948 +1F78 +2948 +2948 +4F78 +4102 +80FE +ENDCHAR +STARTCHAR uni6FA1 +ENCODING 28577 +BBX 15 15 1 -1 +BITMAP +4000 +21F0 +1110 +01F0 +8000 +47BC +24A4 +04A4 +17BC +1040 +2FFE +2150 +4248 +4C46 +8040 +ENDCHAR +STARTCHAR uni6FA2 +ENCODING 28578 +BBX 15 16 0 -2 +BITMAP +0040 +2248 +1150 +17FE +8402 +4804 +43F8 +1208 +13F8 +2000 +E7FC +2444 +27FC +2444 +27FC +0404 +ENDCHAR +STARTCHAR uni6FA3 +ENCODING 28579 +BBX 15 15 1 -1 +BITMAP +4208 +2208 +1FD4 +0214 +8FA2 +4880 +2FBE +0888 +2888 +2F88 +223E +5FC8 +4208 +4208 +8208 +ENDCHAR +STARTCHAR uni6FA4 +ENCODING 28580 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1524 +07FC +8040 +47FC +2040 +0FFE +1110 +17FC +2040 +27FC +4040 +4040 +8040 +ENDCHAR +STARTCHAR uni6FA5 +ENCODING 28581 +BBX 15 15 1 -1 +BITMAP +4400 +27BE +1C92 +0912 +8FA2 +4AA2 +2ACC +0FA8 +0AA8 +1ABE +1FC8 +2888 +28FE +5088 +9188 +ENDCHAR +STARTCHAR uni6FA6 +ENCODING 28582 +BBX 15 15 0 -2 +BITMAP +4FBE +2088 +2510 +023E +8122 +4FA2 +52BE +1222 +223E +E222 +2222 +223E +2200 +2A14 +0422 +ENDCHAR +STARTCHAR uni6FA7 +ENCODING 28583 +BBX 15 15 1 -1 +BITMAP +4120 +2FFC +1924 +0FFC +8924 +4FFC +2000 +1FFE +1000 +17F8 +2408 +27F8 +4210 +4120 +9FFE +ENDCHAR +STARTCHAR uni6FA8 +ENCODING 28584 +BBX 15 15 0 -1 +BITMAP +0210 +2210 +13DE +1528 +8884 +4000 +47FC +1040 +1248 +2248 +E248 +2554 +28E2 +2040 +2FFE +ENDCHAR +STARTCHAR uni6FA9 +ENCODING 28585 +BBX 15 16 0 -2 +BITMAP +0A80 +3138 +2288 +3838 +2288 +3938 +2288 +7FFE +4102 +8104 +7D88 +0950 +1120 +2118 +C506 +0200 +ENDCHAR +STARTCHAR uni6FAA +ENCODING 28586 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1040 +0FFE +8842 +4B5A +2842 +00E0 +1318 +1CE6 +2000 +27FC +4044 +404C +8040 +ENDCHAR +STARTCHAR uni6FAB +ENCODING 28587 +BBX 14 16 0 -2 +BITMAP +0110 +2110 +17FC +1110 +83F8 +4248 +4BF8 +0A48 +13F8 +1040 +E7FC +2444 +2454 +25F4 +2414 +040C +ENDCHAR +STARTCHAR uni6FAC +ENCODING 28588 +BBX 14 16 0 -2 +BITMAP +0440 +227C +1084 +1128 +8620 +4250 +488C +0BF8 +1208 +13F8 +E208 +23F8 +2208 +23F8 +2110 +0208 +ENDCHAR +STARTCHAR uni6FAD +ENCODING 28589 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +17FE +1028 +8224 +427E +44C8 +1748 +117E +2248 +E4C8 +2F7E +2148 +2248 +247E +0840 +ENDCHAR +STARTCHAR uni6FAE +ENCODING 28590 +BBX 15 16 0 -2 +BITMAP +0040 +40A0 +2318 +2DF6 +0000 +87FC +4554 +54E4 +17FC +2000 +E3F8 +2208 +23F8 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni6FAF +ENCODING 28591 +BBX 15 15 1 -1 +BITMAP +4200 +23BC +1204 +03A8 +8490 +5AA8 +2146 +0600 +1A48 +1150 +1FFE +2150 +2248 +4C46 +8040 +ENDCHAR +STARTCHAR uni6FB0 +ENCODING 28592 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +10A0 +1110 +8208 +45F6 +4000 +17BC +14A4 +24A4 +E7BC +2210 +2210 +2528 +2944 +1082 +ENDCHAR +STARTCHAR uni6FB1 +ENCODING 28593 +BBX 15 15 1 -1 +BITMAP +8000 +5FBC +30A4 +1FA4 +9524 +5546 +1F80 +157C +1544 +1544 +5FA8 +6828 +4A10 +9128 +A146 +ENDCHAR +STARTCHAR uni6FB2 +ENCODING 28594 +BBX 15 16 0 -2 +BITMAP +00A0 +24A4 +12A8 +10A0 +87FC +4110 +40A0 +17FC +1040 +23F8 +E040 +27FC +2150 +2248 +2C46 +0040 +ENDCHAR +STARTCHAR uni6FB3 +ENCODING 28595 +BBX 15 15 1 -1 +BITMAP +4040 +2080 +17FC +0424 +85CC +4554 +27FC +04D4 +154C +1444 +2080 +2FFE +4120 +4618 +9806 +ENDCHAR +STARTCHAR uni6FB4 +ENCODING 28596 +BBX 15 15 0 -2 +BITMAP +23FC +1294 +1294 +83FC +4000 +47FE +1000 +13FC +2204 +E3FC +20A2 +2114 +2308 +2D44 +0182 +ENDCHAR +STARTCHAR uni6FB5 +ENCODING 28597 +BBX 15 15 1 -1 +BITMAP +4206 +2238 +1FE0 +08A0 +04A0 +853E +5FE4 +2224 +0224 +1FE4 +1224 +2724 +2AA4 +5244 +8204 +ENDCHAR +STARTCHAR uni6FB6 +ENCODING 28598 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0404 +85F4 +4514 +25F4 +0404 +17FC +1000 +23F8 +2208 +43F8 +4208 +8FFE +ENDCHAR +STARTCHAR uni6FB7 +ENCODING 28599 +BBX 15 16 0 -2 +BITMAP +03F8 +2208 +13F8 +1208 +83F8 +4000 +47FC +14A4 +17FC +2040 +E7FE +2100 +21F8 +2108 +2228 +0410 +ENDCHAR +STARTCHAR uni6FB8 +ENCODING 28600 +BBX 15 15 0 -1 +BITMAP +0014 +2012 +17FE +1410 +85D0 +4414 +45D4 +1558 +15CA +2416 +E442 +2824 +22A2 +228A +2478 +ENDCHAR +STARTCHAR uni6FB9 +ENCODING 28601 +BBX 15 15 1 -1 +BITMAP +4100 +21F0 +1220 +0FFE +8488 +470E +24F8 +0400 +17FE +1400 +24F8 +2400 +45FC +4904 +81FC +ENDCHAR +STARTCHAR uni6FBA +ENCODING 28602 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +13FC +1108 +8090 +47FE +4000 +13FC +1204 +23FC +E204 +23FC +2040 +2524 +250A +08FA +ENDCHAR +STARTCHAR uni6FBB +ENCODING 28603 +BBX 15 16 0 -2 +BITMAP +0088 +2448 +1250 +10FC +8020 +4050 +4694 +1238 +1250 +2298 +E234 +2254 +2290 +2220 +25FE +0800 +ENDCHAR +STARTCHAR uni6FBC +ENCODING 28604 +BBX 15 15 1 -1 +BITMAP +4010 +2F10 +197C +0900 +8944 +4F44 +2828 +08FE +1F10 +1910 +297C +2910 +4910 +4F10 +8010 +ENDCHAR +STARTCHAR uni6FBD +ENCODING 28605 +BBX 15 16 0 -2 +BITMAP +0040 +207C +1040 +13FE +8242 +4278 +4BC4 +0A3C +1200 +13FE +E240 +23A4 +2258 +25B4 +2452 +09B0 +ENDCHAR +STARTCHAR uni6FBE +ENCODING 28606 +BBX 15 15 1 -1 +BITMAP +4020 +2820 +19FC +0420 +83FE +4888 +2850 +05FC +0020 +1DFC +1420 +27FE +2420 +4A20 +91FE +ENDCHAR +STARTCHAR uni6FBF +ENCODING 28607 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +17BC +1110 +83B8 +4554 +4912 +1000 +13F8 +2000 +E7FC +2040 +2248 +2444 +2942 +0080 +ENDCHAR +STARTCHAR uni6FC0 +ENCODING 28608 +BBX 15 15 1 -1 +BITMAP +8420 +4820 +1F20 +113E +1F44 +9144 +5FC4 +0428 +1FA8 +2828 +2F10 +4910 +4928 +9144 +A682 +ENDCHAR +STARTCHAR uni6FC1 +ENCODING 28609 +BBX 15 15 1 -1 +BITMAP +4000 +2FFC +1924 +0924 +8FFC +4200 +27FE +0882 +17F2 +1492 +27F2 +20A2 +41F2 +4E12 +800C +ENDCHAR +STARTCHAR uni6FC2 +ENCODING 28610 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +1FFC +0848 +8FFE +4890 +2BFC +0894 +1FFE +1894 +2BFC +2998 +4A94 +5492 +8090 +ENDCHAR +STARTCHAR uni6FC3 +ENCODING 28611 +BBX 15 15 1 -1 +BITMAP +4090 +23FC +1294 +03FC +8294 +43FC +2000 +07FE +1400 +15FC +2400 +27FE +4524 +45D8 +8B06 +ENDCHAR +STARTCHAR uni6FC4 +ENCODING 28612 +BBX 15 15 0 -2 +BITMAP +44F8 +2288 +22E8 +00A8 +80A8 +4DFC +4504 +1574 +2554 +E574 +2504 +2514 +2508 +2A00 +11FE +ENDCHAR +STARTCHAR uni6FC5 +ENCODING 28613 +BBX 15 16 0 -2 +BITMAP +0040 +4FFE +2802 +23F8 +0008 +83F8 +4008 +57FC +1444 +23F8 +E248 +2040 +27F8 +2110 +20E0 +0F1E +ENDCHAR +STARTCHAR uni6FC6 +ENCODING 28614 +BBX 15 15 1 -1 +BITMAP +4040 +27FC +1040 +0208 +8FFE +4208 +27FC +0404 +17FC +1404 +27FC +2404 +47FC +4208 +8C06 +ENDCHAR +STARTCHAR uni6FC7 +ENCODING 28615 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0248 +8248 +4554 +2FFE +0000 +17FC +1404 +25F4 +2514 +45F4 +4404 +87FC +ENDCHAR +STARTCHAR uni6FC8 +ENCODING 28616 +BBX 15 15 1 -1 +BITMAP +4028 +2F24 +1924 +0920 +8F2E +40F0 +3F24 +0924 +0F28 +2928 +2F10 +4990 +4F2A +B14A +8184 +ENDCHAR +STARTCHAR uni6FC9 +ENCODING 28617 +BBX 15 15 1 -1 +BITMAP +4024 +2F24 +1948 +097E +89C8 +4F48 +297E +0948 +0948 +1F48 +197E +2948 +2948 +4F48 +807E +ENDCHAR +STARTCHAR uni6FCA +ENCODING 28618 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +127C +0240 +8FFE +4014 +2FFE +0808 +1BE8 +1888 +2AAA +2EAC +48CA +4B3A +90C4 +ENDCHAR +STARTCHAR uni6FCB +ENCODING 28619 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +17BC +1110 +83B8 +4554 +4912 +1000 +17FC +2044 +E240 +2278 +2240 +2540 +28FE +1000 +ENDCHAR +STARTCHAR uni6FCC +ENCODING 28620 +BBX 15 16 0 -2 +BITMAP +1C20 +7022 +11B4 +FCA8 +10A8 +7D24 +56A2 +7C40 +55FC +7D04 +1104 +7DFC +1104 +1F04 +F1FC +4104 +ENDCHAR +STARTCHAR uni6FCD +ENCODING 28621 +BBX 15 16 0 -2 +BITMAP +0110 +4FFE +2110 +2200 +03FC +84A4 +4BA4 +4164 +1254 +2494 +E108 +2040 +2024 +2522 +250A +08F8 +ENDCHAR +STARTCHAR uni6FCE +ENCODING 28622 +BBX 15 16 0 -2 +BITMAP +01F8 +2108 +11F8 +150A +85FA +450A +45FA +1402 +179E +2090 +E090 +2F9E +2492 +2492 +2492 +0892 +ENDCHAR +STARTCHAR uni6FCF +ENCODING 28623 +BBX 15 15 0 -2 +BITMAP +27BE +1108 +1108 +87BE +4108 +4108 +17BE +1000 +2080 +E044 +2512 +2522 +29C0 +2304 +0CFC +ENDCHAR +STARTCHAR uni6FD0 +ENCODING 28624 +BBX 15 16 0 -2 +BITMAP +03FC +2204 +13FC +1204 +83FC +4044 +4BF8 +0850 +17FE +1040 +E1FC +2704 +21FC +2104 +21FC +0104 +ENDCHAR +STARTCHAR uni6FD1 +ENCODING 28625 +BBX 15 16 0 -2 +BITMAP +0210 +4210 +2F9C +2224 +0248 +8FBE +4AA2 +5AAA +1FAA +222A +E72A +2AAA +3288 +2214 +2222 +0242 +ENDCHAR +STARTCHAR uni6FD2 +ENCODING 28626 +BBX 15 16 0 -2 +BITMAP +4200 +227E +2A10 +8BA0 +4A7C +4A44 +1FD4 +2054 +2254 +4AD4 +CAD4 +4B54 +5120 +4228 +4444 +1882 +ENDCHAR +STARTCHAR uni6FD3 +ENCODING 28627 +BBX 15 16 0 -2 +BITMAP +0040 +27FC +1110 +10A0 +87FE +44A0 +47F8 +14A8 +17FE +24A8 +E7F8 +24A0 +25B0 +2AA8 +2CA6 +10A0 +ENDCHAR +STARTCHAR uni6FD4 +ENCODING 28628 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1248 +0444 +8FFE +4444 +26EC +0554 +16EC +1444 +26EC +2554 +46EC +4444 +844C +ENDCHAR +STARTCHAR uni6FD5 +ENCODING 28629 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1404 +07FC +8404 +47FC +2208 +0410 +1D34 +1208 +2596 +2EBA +4000 +4524 +8892 +ENDCHAR +STARTCHAR uni6FD6 +ENCODING 28630 +BBX 15 15 0 -2 +BITMAP +27FC +14A4 +14A4 +87FC +4048 +43F8 +1050 +17FE +2040 +E1F8 +2308 +25F8 +2108 +21F8 +0108 +ENDCHAR +STARTCHAR uni6FD7 +ENCODING 28631 +BBX 15 16 0 -2 +BITMAP +0110 +2FFE +1110 +13F8 +8208 +43F8 +4208 +13F8 +1080 +2FFE +E248 +27FC +2A4A +2248 +2258 +0040 +ENDCHAR +STARTCHAR uni6FD8 +ENCODING 28632 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0882 +8554 +48F2 +2000 +07FC +1524 +17FC +2000 +2FFE +4040 +4040 +81C0 +ENDCHAR +STARTCHAR uni6FD9 +ENCODING 28633 +BBX 15 16 0 -2 +BITMAP +0110 +4554 +25B8 +2910 +02A8 +8444 +4FFE +4802 +1040 +2248 +E248 +2450 +20A0 +2110 +2208 +0C06 +ENDCHAR +STARTCHAR uni6FDA +ENCODING 28634 +BBX 15 15 1 -1 +BITMAP +4208 +2AAA +1AAA +0514 +88A2 +4000 +27FC +0404 +0040 +1FFE +1150 +2248 +2444 +4842 +8040 +ENDCHAR +STARTCHAR uni6FDB +ENCODING 28635 +BBX 15 15 1 -1 +BITMAP +4120 +3FFE +1120 +0FFC +8804 +4BF4 +2000 +1FFE +1100 +1284 +2CD8 +2360 +4CD8 +4346 +9CC0 +ENDCHAR +STARTCHAR uni6FDC +ENCODING 28636 +BBX 15 15 0 -1 +BITMAP +0040 +23F8 +1048 +17FE +8048 +43F8 +4040 +17FE +1000 +22A4 +E452 +23F8 +22A8 +22A8 +2FFE +ENDCHAR +STARTCHAR uni6FDD +ENCODING 28637 +BBX 15 16 0 -2 +BITMAP +0108 +27FE +1108 +11F8 +8108 +41F8 +4108 +17FE +1108 +2294 +E5E2 +2048 +23FC +2040 +2248 +04C4 +ENDCHAR +STARTCHAR uni6FDE +ENCODING 28638 +BBX 15 15 1 -1 +BITMAP +4040 +2080 +13F8 +0208 +83F8 +4208 +27FC +0444 +07FC +1444 +17FC +2000 +2FFE +4208 +8408 +ENDCHAR +STARTCHAR uni6FDF +ENCODING 28639 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +00A0 +8F5E +4554 +2554 +0B5A +1000 +1404 +27FC +2404 +47FC +4804 +9004 +ENDCHAR +STARTCHAR uni6FE0 +ENCODING 28640 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0208 +83F8 +4000 +2FFE +0802 +09FA +1744 +10E8 +2730 +20E8 +4F26 +80C0 +ENDCHAR +STARTCHAR uni6FE1 +ENCODING 28641 +BBX 14 15 1 -1 +BITMAP +4000 +2FF8 +0080 +1FFC +9084 +56B4 +3084 +0630 +0000 +3FFC +2200 +5FFC +5244 +9244 +924C +ENDCHAR +STARTCHAR uni6FE2 +ENCODING 28642 +BBX 15 16 0 -2 +BITMAP +07BC +2084 +14A4 +1294 +84A4 +4040 +47FC +1110 +1110 +22A8 +E444 +2040 +2FFE +2040 +2040 +0040 +ENDCHAR +STARTCHAR uni6FE3 +ENCODING 28643 +BBX 15 16 0 -2 +BITMAP +4210 +2210 +2228 +9FA8 +4244 +4F8A +08A8 +2F98 +28C8 +4FA8 +C20E +5FB8 +4208 +4208 +4208 +0208 +ENDCHAR +STARTCHAR uni6FE4 +ENCODING 28644 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0040 +83F8 +4000 +2FFE +0042 +17FA +1000 +2FFE +2004 +4F7E +4924 +8F0C +ENDCHAR +STARTCHAR uni6FE5 +ENCODING 28645 +BBX 15 16 0 -2 +BITMAP +0080 +41F8 +2690 +2060 +01A0 +8FFE +4802 +47FC +1040 +27FC +E444 +27FC +2444 +27FC +2208 +0404 +ENDCHAR +STARTCHAR uni6FE6 +ENCODING 28646 +BBX 15 16 0 -2 +BITMAP +003E +27C0 +1244 +1128 +83F8 +4040 +47FC +1000 +13F8 +2008 +E3F8 +2008 +23F8 +2544 +252A +08FA +ENDCHAR +STARTCHAR uni6FE7 +ENCODING 28647 +BBX 15 16 0 -2 +BITMAP +0284 +4284 +2AA4 +26C4 +029E +8FE4 +4004 +5454 +128C +2FE4 +E104 +27C4 +2104 +21C4 +2E14 +0008 +ENDCHAR +STARTCHAR uni6FE8 +ENCODING 28648 +BBX 14 15 0 -1 +BITMAP +0210 +2120 +17FC +1210 +8210 +44A4 +4738 +1210 +14A4 +27BC +E080 +2148 +2554 +2514 +28F0 +ENDCHAR +STARTCHAR uni6FE9 +ENCODING 28649 +BBX 15 15 1 -1 +BITMAP +4110 +2FFE +1220 +07FE +8C40 +57FC +2440 +07FC +0440 +17FE +1000 +2FFC +2118 +40E0 +8F1E +ENDCHAR +STARTCHAR uni6FEA +ENCODING 28650 +BBX 15 16 0 -2 +BITMAP +0210 +4210 +2F9C +2224 +0FC8 +823E +4FAA +502A +1FAA +28BE +EFA0 +28A0 +2FA2 +28A2 +2AA2 +091E +ENDCHAR +STARTCHAR uni6FEB +ENCODING 28651 +BBX 15 15 1 -1 +BITMAP +4010 +2F90 +191E +0F90 +88A0 +4FC0 +2900 +091E +1FC0 +1000 +2FFC +2924 +4924 +4924 +9FFE +ENDCHAR +STARTCHAR uni6FEC +ENCODING 28652 +BBX 15 15 1 -1 +BITMAP +4040 +207C +1040 +0FFE +8802 +4BFA +2208 +0444 +13F8 +1E0E +23F8 +2208 +43F8 +4208 +83F8 +ENDCHAR +STARTCHAR uni6FED +ENCODING 28653 +BBX 15 15 0 -1 +BITMAP +0110 +27FC +1110 +1040 +83F8 +4040 +47FC +1080 +1110 +23F8 +E000 +23F8 +22A8 +22A8 +2FFE +ENDCHAR +STARTCHAR uni6FEE +ENCODING 28654 +BBX 15 15 1 -1 +BITMAP +4450 +2552 +14D4 +07FE +8888 +4850 +3BFE +0820 +09FC +2820 +2BFE +2850 +4888 +4904 +8A02 +ENDCHAR +STARTCHAR uni6FEF +ENCODING 28655 +BBX 15 15 1 -1 +BITMAP +4000 +2FBE +1082 +0FBE +8082 +4FBE +2220 +07FE +1C40 +17FC +2440 +27FC +4440 +4440 +87FE +ENDCHAR +STARTCHAR uni6FF0 +ENCODING 28656 +BBX 15 15 1 -1 +BITMAP +4424 +2424 +0448 +087E +9AC8 +4448 +297E +0B48 +1CC8 +2448 +2D7E +3548 +5548 +4448 +847E +ENDCHAR +STARTCHAR uni6FF1 +ENCODING 28657 +BBX 15 15 1 -1 +BITMAP +4040 +27FE +1402 +03FC +8148 +4656 +23FC +0E04 +13FC +1204 +23FC +2204 +43FC +4108 +8606 +ENDCHAR +STARTCHAR uni6FF2 +ENCODING 28658 +BBX 15 16 0 -2 +BITMAP +0200 +421C +2F94 +2214 +0714 +8026 +4F80 +48BC +1714 +2014 +E214 +2F88 +2708 +2A94 +3224 +0242 +ENDCHAR +STARTCHAR uni6FF3 +ENCODING 28659 +BBX 15 15 1 -1 +BITMAP +4208 +2A28 +1F3C +1248 +8F3E +4618 +2B2A +124E +07F8 +1408 +1408 +27F8 +2408 +4408 +87F8 +ENDCHAR +STARTCHAR uni6FF4 +ENCODING 28660 +BBX 15 16 0 -2 +BITMAP +0110 +4554 +25B8 +2910 +02A8 +8444 +4FFE +4842 +1040 +2764 +E168 +2150 +2248 +2444 +2942 +0080 +ENDCHAR +STARTCHAR uni6FF5 +ENCODING 28661 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0802 +87FC +4444 +27FC +0508 +15F8 +1508 +25F8 +2908 +49F8 +5090 +830C +ENDCHAR +STARTCHAR uni6FF6 +ENCODING 28662 +BBX 14 14 1 -1 +BITMAP +5F7C +3144 +1F7C +1144 +9F7C +5004 +1064 +1384 +1084 +17F4 +3084 +33E4 +5224 +93EC +ENDCHAR +STARTCHAR uni6FF7 +ENCODING 28663 +BBX 15 16 0 -2 +BITMAP +0108 +7990 +0960 +3518 +C206 +0110 +47FC +2110 +81F0 +4040 +17FC +1664 +E554 +26EC +2444 +244C +ENDCHAR +STARTCHAR uni6FF8 +ENCODING 28664 +BBX 15 16 0 -2 +BITMAP +0110 +2FFE +1110 +1040 +81B0 +4E4E +43F8 +1208 +13F8 +2208 +E3F8 +2200 +25FC +2504 +29FC +0104 +ENDCHAR +STARTCHAR uni6FF9 +ENCODING 28665 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1444 +0554 +8554 +47FC +2040 +07FC +1040 +1FFE +22A4 +2C52 +43F8 +4040 +8FFE +ENDCHAR +STARTCHAR uni6FFA +ENCODING 28666 +BBX 15 15 1 -1 +BITMAP +4028 +2F24 +193E +09E0 +8F28 +4912 +292A +0FC4 +1924 +193E +29E0 +2F28 +4512 +48AA +9044 +ENDCHAR +STARTCHAR uni6FFB +ENCODING 28667 +BBX 15 16 0 -2 +BITMAP +0010 +277C +1554 +157C +8510 +46FE +4500 +157C +1544 +257C +E544 +267C +2444 +247C +2428 +0444 +ENDCHAR +STARTCHAR uni6FFC +ENCODING 28668 +BBX 15 15 1 -1 +BITMAP +4444 +2484 +18EA +0AAA +84E4 +48A8 +2AAA +1DEE +0040 +1FFE +1150 +2248 +2444 +4842 +8040 +ENDCHAR +STARTCHAR uni6FFD +ENCODING 28669 +BBX 15 16 0 -2 +BITMAP +0208 +4FBE +2208 +2FBE +0208 +8514 +48A2 +57FC +1404 +27FC +E404 +27FC +2404 +27FC +2110 +0208 +ENDCHAR +STARTCHAR uni6FFE +ENCODING 28670 +BBX 15 15 1 -1 +BITMAP +4100 +21F0 +1100 +0FFC +8904 +4FF0 +2904 +0BFC +0A48 +2BF8 +2A48 +33F8 +5544 +652A +88FA +ENDCHAR +STARTCHAR uni6FFF +ENCODING 28671 +BBX 15 15 0 -2 +BITMAP +27FE +1488 +17FE +8488 +45FC +4524 +15FC +1524 +25FC +E420 +27FE +262A +2AFA +2A0A +1206 +ENDCHAR +STARTCHAR uni7000 +ENCODING 28672 +BBX 15 15 1 -1 +BITMAP +4FFE +2040 +13F8 +0208 +83F8 +4208 +2FFE +0842 +0524 +08FA +2100 +23F8 +4D08 +40F0 +8F0E +ENDCHAR +STARTCHAR uni7001 +ENCODING 28673 +BBX 15 15 1 -1 +BITMAP +4410 +2220 +1FFC +0080 +87F8 +4080 +3FFE +0490 +0FF8 +3416 +27F0 +2410 +47F4 +4468 +9F1E +ENDCHAR +STARTCHAR uni7002 +ENCODING 28674 +BBX 15 16 0 -2 +BITMAP +0100 +43F0 +2410 +2FFC +1444 +87FC +4444 +57FC +1524 +2892 +E3F8 +2208 +23F8 +2208 +23F8 +0208 +ENDCHAR +STARTCHAR uni7003 +ENCODING 28675 +BBX 15 16 0 -2 +BITMAP +4000 +2F7C +2944 +897C +4F44 +4944 +097C +2F20 +297E +49AA +CF2A +404A +4A92 +4922 +494A +1104 +ENDCHAR +STARTCHAR uni7004 +ENCODING 28676 +BBX 15 16 0 -2 +BITMAP +0210 +2210 +13DE +1528 +8084 +4000 +47BC +14A4 +17A4 +24A4 +E7A4 +2434 +2528 +26A0 +2420 +0020 +ENDCHAR +STARTCHAR uni7005 +ENCODING 28677 +BBX 15 15 1 -1 +BITMAP +4208 +2AAA +1AAA +0514 +88A2 +4000 +2FFE +0802 +1802 +17FC +2040 +23F8 +4050 +4048 +8FFE +ENDCHAR +STARTCHAR uni7006 +ENCODING 28678 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FE +0040 +83FC +4000 +27FE +0492 +17FE +1204 +23FC +2204 +43FC +4108 +8606 +ENDCHAR +STARTCHAR uni7007 +ENCODING 28679 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +0890 +8BFC +4890 +2FFE +0840 +0BFC +1A44 +1BFC +2A44 +33FC +5108 +8606 +ENDCHAR +STARTCHAR uni7008 +ENCODING 28680 +BBX 15 16 0 -2 +BITMAP +07BC +24A4 +1294 +14A4 +8FFE +4842 +47FC +1040 +13F8 +2248 +E3F8 +2248 +23F8 +2040 +27FC +0040 +ENDCHAR +STARTCHAR uni7009 +ENCODING 28681 +BBX 15 15 1 -1 +BITMAP +4040 +2FFE +1802 +0982 +863C +4404 +27BC +0404 +17FC +1200 +27FE +280A +5526 +4492 +888C +ENDCHAR +STARTCHAR uni700A +ENCODING 28682 +BBX 15 15 1 -1 +BITMAP +8400 +5F78 +3148 +154E +3F80 +917C +5524 +3528 +1110 +276E +2000 +2FF8 +4A48 +4A48 +BFFE +ENDCHAR +STARTCHAR uni700B +ENCODING 28683 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +081A +87E0 +4248 +2150 +0FFE +1150 +1248 +2FFE +2444 +47FC +4444 +87FC +ENDCHAR +STARTCHAR uni700C +ENCODING 28684 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +14A0 +87FC +44A4 +47FC +1400 +1524 +25A8 +E530 +25A4 +251C +2800 +2AA4 +1452 +ENDCHAR +STARTCHAR uni700D +ENCODING 28685 +BBX 15 16 0 -2 +BITMAP +0020 +27FE +1400 +15FC +8524 +45FC +4524 +15FC +1420 +25FC +E420 +27FE +2524 +2AFA +2820 +13FE +ENDCHAR +STARTCHAR uni700E +ENCODING 28686 +BBX 15 16 0 -2 +BITMAP +0108 +27FE +1108 +1000 +83FC +4294 +4A94 +0BFC +1028 +13FE +E220 +2324 +22A8 +2292 +242A +08C6 +ENDCHAR +STARTCHAR uni700F +ENCODING 28687 +BBX 15 15 1 -1 +BITMAP +4402 +39E2 +10AA +14AA +9D2A +526A +050A +088A +174A +220A +2F8A +5242 +4A82 +83C2 +9C0E +ENDCHAR +STARTCHAR uni7010 +ENCODING 28688 +BBX 15 16 0 -2 +BITMAP +0114 +2112 +17D2 +1110 +8110 +4FFE +4290 +16D2 +1292 +26D2 +E294 +26D4 +228A +22CA +2F16 +0022 +ENDCHAR +STARTCHAR uni7011 +ENCODING 28689 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1208 +03F8 +8208 +43F8 +2110 +07FC +1110 +1FFE +2248 +2D56 +40E0 +475C +80C0 +ENDCHAR +STARTCHAR uni7012 +ENCODING 28690 +BBX 15 16 0 -2 +BITMAP +0040 +4FFE +2248 +2554 +08E2 +8150 +4248 +4DF6 +1000 +27FC +E404 +25F4 +2514 +25F4 +2404 +07FC +ENDCHAR +STARTCHAR uni7013 +ENCODING 28691 +BBX 15 16 0 -2 +BITMAP +0288 +42A8 +26A8 +2BF0 +001E +8224 +45D4 +5C14 +15D4 +2494 +E494 +25C8 +2488 +2494 +25D4 +0422 +ENDCHAR +STARTCHAR uni7014 +ENCODING 28692 +BBX 15 16 0 -2 +BITMAP +0200 +9FDC +4214 +0F94 +8014 +5FD4 +5066 +0F80 +201C +4F94 +C214 +5FD4 +4708 +4A88 +5254 +0222 +ENDCHAR +STARTCHAR uni7015 +ENCODING 28693 +BBX 15 15 1 -1 +BITMAP +4200 +2A7E +0B90 +0A3C +8A24 +5FFC +2224 +0A24 +0ABC +2AA4 +32A4 +26BC +4110 +4224 +8CC2 +ENDCHAR +STARTCHAR uni7016 +ENCODING 28694 +BBX 15 16 0 -2 +BITMAP +07FC +2040 +17FE +1442 +8B5C +4040 +475C +1120 +13FC +2620 +EBFC +2220 +23FC +2220 +23FE +0200 +ENDCHAR +STARTCHAR uni7017 +ENCODING 28695 +BBX 15 16 0 -2 +BITMAP +0040 +4FFE +2842 +27FC +0040 +83F8 +4040 +57FC +1040 +27FC +E4A4 +27FC +2040 +2524 +252A +08FA +ENDCHAR +STARTCHAR uni7018 +ENCODING 28696 +BBX 15 15 1 -1 +BITMAP +4080 +20F8 +1080 +07FC +8484 +47F8 +2482 +05FE +1548 +15F8 +2548 +2BFC +42A4 +42A4 +8FFE +ENDCHAR +STARTCHAR uni7019 +ENCODING 28697 +BBX 15 16 0 -2 +BITMAP +4400 +223C +2FA4 +8024 +48BC +4524 +0FA4 +223C +2224 +4FA4 +C23C +4B10 +4A98 +52A8 +4A2A +0446 +ENDCHAR +STARTCHAR uni701A +ENCODING 28698 +BBX 15 15 1 -1 +BITMAP +4410 +4410 +3FA8 +2428 +9F44 +9182 +5FFC +5124 +11B4 +3F6C +2424 +7F6C +44B4 +8424 +846C +ENDCHAR +STARTCHAR uni701B +ENCODING 28699 +BBX 15 15 1 -1 +BITMAP +4080 +2FFC +2800 +0FF8 +8000 +4FF8 +4808 +0FF8 +2000 +3D1C +37D4 +5D54 +555C +9C94 +A566 +ENDCHAR +STARTCHAR uni701C +ENCODING 28700 +BBX 15 16 0 -2 +BITMAP +0008 +4F88 +2008 +2708 +053E +852A +472A +502A +1FAA +2DBE +EAA8 +2F88 +2A8A +2A8E +2ABA +0990 +ENDCHAR +STARTCHAR uni701D +ENCODING 28701 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1444 +05B8 +8488 +47FE +2488 +05DC +16AA +1488 +2840 +2A7C +5240 +4240 +8FFE +ENDCHAR +STARTCHAR uni701E +ENCODING 28702 +BBX 15 15 1 -1 +BITMAP +4418 +2468 +1F54 +0492 +9F7C +4414 +3F14 +00FE +1F14 +1514 +357C +5F10 +5110 +9110 +9730 +ENDCHAR +STARTCHAR uni701F +ENCODING 28703 +BBX 15 15 1 -1 +BITMAP +4110 +2FFE +1110 +0040 +87FC +4044 +2FFE +0044 +17FC +1040 +2554 +27FC +4444 +475C +8954 +ENDCHAR +STARTCHAR uni7020 +ENCODING 28704 +BBX 14 16 0 -2 +BITMAP +0110 +4554 +25B8 +2910 +02A8 +8444 +47FC +5484 +1110 +23E0 +E048 +27FC +2044 +2248 +2544 +0080 +ENDCHAR +STARTCHAR uni7021 +ENCODING 28705 +BBX 15 16 0 -2 +BITMAP +0010 +4E7E +2B20 +2ABC +0AC8 +8CBE +4A00 +4BBC +1AA4 +2ABC +EAA4 +2CBC +28A4 +28AC +2940 +0A3E +ENDCHAR +STARTCHAR uni7022 +ENCODING 28706 +BBX 15 16 0 -2 +BITMAP +0020 +49FC +2524 +21FC +0020 +83FE +4D04 +45FC +1504 +25FC +E504 +25FC +2488 +2504 +2BFE +1000 +ENDCHAR +STARTCHAR uni7023 +ENCODING 28707 +BBX 15 15 1 -1 +BITMAP +4200 +23BC +1204 +07A8 +8490 +4AA8 +2146 +02A0 +0FBC +10A0 +17BC +20A0 +27BC +40A0 +8FFE +ENDCHAR +STARTCHAR uni7024 +ENCODING 28708 +BBX 15 16 0 -2 +BITMAP +0080 +4040 +2FFE +2000 +07FC +84A4 +47FC +5248 +1150 +2208 +E444 +20A8 +2110 +2308 +2D46 +0180 +ENDCHAR +STARTCHAR uni7025 +ENCODING 28709 +BBX 14 16 0 -2 +BITMAP +07BC +24A4 +1294 +14A4 +8040 +47FC +4000 +11F0 +1110 +21F0 +E000 +27FC +2404 +24E4 +24A4 +04EC +ENDCHAR +STARTCHAR uni7026 +ENCODING 28710 +BBX 15 15 1 -1 +BITMAP +4010 +2F92 +047E +0A54 +1294 +8718 +4A7E +3228 +027C +26C4 +2B44 +32FC +4244 +4244 +8C7C +ENDCHAR +STARTCHAR uni7027 +ENCODING 28711 +BBX 15 15 1 -1 +BITMAP +4220 +2220 +1FFE +08A0 +853C +5FC4 +203C +0FA0 +08BC +1FA0 +28BC +2FA0 +48BC +48A2 +899E +ENDCHAR +STARTCHAR uni7028 +ENCODING 28712 +BBX 15 15 1 -1 +BITMAP +4400 +24FE +1F22 +0446 +9FFC +5544 +357C +1544 +1F44 +147C +2E44 +2D44 +557C +6428 +84C6 +ENDCHAR +STARTCHAR uni7029 +ENCODING 28713 +BBX 15 16 0 -2 +BITMAP +0180 +4E3E +2208 +3F90 +023E +8722 +4AA2 +527E +1022 +273E +E522 +2522 +257E +2980 +2914 +1022 +ENDCHAR +STARTCHAR uni702A +ENCODING 28714 +BBX 15 16 0 -2 +BITMAP +2020 +7F3E +AA44 +7FA8 +2A10 +3F28 +0444 +1FF0 +1010 +1FF0 +1010 +1FF0 +0184 +3D48 +0930 +730E +ENDCHAR +STARTCHAR uni702B +ENCODING 28715 +BBX 15 16 0 -2 +BITMAP +0200 +9FDC +4214 +0F94 +8014 +5FD4 +5066 +0F80 +241C +4894 +CF14 +4294 +5FC8 +4A88 +5254 +0622 +ENDCHAR +STARTCHAR uni702C +ENCODING 28716 +BBX 15 15 1 -1 +BITMAP +4400 +24FE +3F10 +047C +9F44 +557C +5544 +1F44 +247C +2C44 +2E44 +557C +5520 +4448 +8486 +ENDCHAR +STARTCHAR uni702D +ENCODING 28717 +BBX 15 16 0 -2 +BITMAP +0410 +8410 +4428 +1F44 +8482 +5F7C +5500 +1FE2 +35AA +5FAA +C4EA +5FAA +44AA +44E2 +44AA +04A4 +ENDCHAR +STARTCHAR uni702E +ENCODING 28718 +BBX 15 16 0 -2 +BITMAP +07FC +4040 +2FFE +2842 +0358 +8040 +4358 +5000 +1110 +2FBE +E110 +23B8 +2554 +2912 +2110 +0110 +ENDCHAR +STARTCHAR uni702F +ENCODING 28719 +BBX 15 16 0 -2 +BITMAP +0088 +22AA +12DC +1488 +8154 +4222 +47FE +1402 +11F8 +2108 +E1F8 +2000 +23FC +2204 +23FC +0204 +ENDCHAR +STARTCHAR uni7030 +ENCODING 28720 +BBX 15 15 1 -1 +BITMAP +4000 +3BFE +28A8 +0924 +9BFE +5222 +5376 +12AA +1B76 +2A22 +2B76 +4AAA +4B76 +8A22 +9226 +ENDCHAR +STARTCHAR uni7031 +ENCODING 28721 +BBX 15 16 0 -2 +BITMAP +4000 +2FFE +2912 +8FFE +4000 +4FFE +0880 +2AA2 +288A +494A +CA2A +488A +4AAA +5082 +514A +2224 +ENDCHAR +STARTCHAR uni7032 +ENCODING 28722 +BBX 15 15 1 -1 +BITMAP +4210 +2210 +0510 +051E +88A4 +5764 +2014 +1DD4 +1554 +3548 +3DC8 +4894 +5554 +9552 +A222 +ENDCHAR +STARTCHAR uni7033 +ENCODING 28723 +BBX 15 16 0 -2 +BITMAP +0110 +27FE +1110 +1040 +87FE +44A0 +47FC +14A4 +17FC +2500 +E5FC +2500 +25FC +2804 +3554 +0008 +ENDCHAR +STARTCHAR uni7034 +ENCODING 28724 +BBX 14 16 0 -2 +BITMAP +07BC +24A4 +17BC +14A4 +87BC +44A4 +47BC +1318 +14A4 +2080 +EFFC +2110 +2320 +20C0 +21B0 +0608 +ENDCHAR +STARTCHAR uni7035 +ENCODING 28725 +BBX 15 16 0 -2 +BITMAP +0248 +2150 +17FC +1150 +864C +43F8 +4248 +13F8 +1248 +23F8 +E110 +27FC +2110 +2FFE +2208 +0404 +ENDCHAR +STARTCHAR uni7036 +ENCODING 28726 +BBX 15 16 0 -2 +BITMAP +0040 +4F40 +2A7E +2A80 +0A00 +8F7C +4944 +4944 +197C +2F00 +EAEE +2AAA +2AAA +2AAA +2FEE +00AA +ENDCHAR +STARTCHAR uni7037 +ENCODING 28727 +BBX 15 15 0 -2 +BITMAP +27BC +14A4 +1294 +84A4 +43F8 +4248 +13F8 +1248 +23F8 +E110 +27FC +2110 +2FFE +2208 +0404 +ENDCHAR +STARTCHAR uni7038 +ENCODING 28728 +BBX 15 16 0 -2 +BITMAP +0448 +444C +2AAA +2008 +0FFE +8288 +4EE8 +528A +1EEA +228C +EEEC +2288 +22EA +2F1A +2426 +0042 +ENDCHAR +STARTCHAR uni7039 +ENCODING 28729 +BBX 15 15 1 -1 +BITMAP +4040 +20A0 +1318 +0C06 +83F8 +4000 +2EEE +0AAA +0EEE +1000 +17FC +2524 +27FC +4524 +852C +ENDCHAR +STARTCHAR uni703A +ENCODING 28730 +BBX 15 15 1 -1 +BITMAP +40F0 +2120 +1FFC +0404 +87FC +4220 +23BC +0222 +0FFE +1110 +1FFC +2444 +27FC +412A +8E1E +ENDCHAR +STARTCHAR uni703B +ENCODING 28731 +BBX 15 16 0 -2 +BITMAP +0114 +47D2 +2110 +2FFE +0010 +87D0 +4552 +57D2 +1552 +27D4 +E294 +27C8 +228A +2FFA +22A6 +0442 +ENDCHAR +STARTCHAR uni703C +ENCODING 28732 +BBX 15 15 1 -1 +BITMAP +4040 +2FFE +1000 +07BC +84A4 +47BC +2110 +07FC +0110 +17FC +1110 +2FFE +2112 +476C +8182 +ENDCHAR +STARTCHAR uni703D +ENCODING 28733 +BBX 15 16 0 -2 +BITMAP +0040 +27FE +1492 +13FC +8090 +43FC +4090 +17FE +1108 +23FC +E50A +21F8 +2240 +227C +2540 +08FE +ENDCHAR +STARTCHAR uni703E +ENCODING 28734 +BBX 15 15 1 -1 +BITMAP +4000 +2FBE +18A2 +0FBE +88A2 +4FBE +2842 +0BFA +1952 +19F2 +2952 +29F2 +48E2 +4952 +8A4E +ENDCHAR +STARTCHAR uni703F +ENCODING 28735 +BBX 15 16 0 -2 +BITMAP +0210 +43D0 +241E +2FE4 +0554 +8FF4 +4548 +57D4 +11B2 +2220 +E7C0 +2088 +27FC +2044 +2350 +0488 +ENDCHAR +STARTCHAR uni7040 +ENCODING 28736 +BBX 15 16 0 -2 +BITMAP +07FC +4040 +2FFE +2842 +0358 +8040 +4358 +5000 +127C +2FC4 +E27C +2744 +2AFC +3244 +227C +0244 +ENDCHAR +STARTCHAR uni7041 +ENCODING 28737 +BBX 15 16 0 -2 +BITMAP +4FBE +28A2 +2FBE +88A2 +4FBE +4842 +09F2 +2912 +29F2 +4912 +C9F2 +4846 +4F6A +4952 +4A4A +0CC6 +ENDCHAR +STARTCHAR uni7042 +ENCODING 28738 +BBX 15 16 0 -2 +BITMAP +003C +27C0 +1244 +1128 +87FC +44A4 +47FC +1008 +1788 +24FE +E788 +24A8 +2798 +2508 +25A8 +0690 +ENDCHAR +STARTCHAR uni7043 +ENCODING 28739 +BBX 15 15 1 -1 +BITMAP +4A52 +2F7A +1A52 +0F7A +8A52 +4F7A +2A52 +1FFE +0000 +17FC +1404 +27FC +2208 +4110 +9FFE +ENDCHAR +STARTCHAR uni7044 +ENCODING 28740 +BBX 15 16 0 -2 +BITMAP +03FC +2108 +11F8 +1108 +81F8 +410E +47F8 +1008 +17FE +2294 +E39C +2294 +239C +22D6 +27BC +0084 +ENDCHAR +STARTCHAR uni7045 +ENCODING 28741 +BBX 15 16 0 -2 +BITMAP +07FC +4444 +27FC +2444 +07FC +8000 +4FBE +5AAA +1FBE +2AAA +EFBE +2040 +2040 +27FC +2040 +0FFE +ENDCHAR +STARTCHAR uni7046 +ENCODING 28742 +BBX 15 15 0 -1 +BITMAP +0090 +27FE +1090 +13E8 +8288 +43CE +4A50 +0BD4 +12A2 +13E2 +E000 +23FC +2294 +2294 +27FE +ENDCHAR +STARTCHAR uni7047 +ENCODING 28743 +BBX 15 15 1 -1 +BITMAP +4528 +2FFC +1210 +0FFC +8080 +47F8 +2080 +1FFE +0900 +2F7C +2924 +2F28 +4910 +5F28 +8146 +ENDCHAR +STARTCHAR uni7048 +ENCODING 28744 +BBX 15 16 0 -2 +BITMAP +07BC +24A4 +17BC +14A4 +87BC +44A4 +47BC +1120 +13FE +2220 +E7FC +2A20 +23FC +2220 +23FE +0200 +ENDCHAR +STARTCHAR uni7049 +ENCODING 28745 +BBX 15 16 0 -2 +BITMAP +0A98 +9514 +5490 +0A3E +9F28 +5168 +5F3E +0028 +3F28 +553E +D528 +5F28 +50A8 +50BE +4FA0 +0020 +ENDCHAR +STARTCHAR uni704A +ENCODING 28746 +BBX 15 15 1 -1 +BITMAP +4208 +2208 +1F7C +0A28 +8F3E +4618 +2B2A +124C +1FFE +1408 +2FFC +2924 +4E3C +49C4 +889C +ENDCHAR +STARTCHAR uni704B +ENCODING 28747 +BBX 15 15 1 -1 +BITMAP +4040 +2FFE +1920 +0FFC +8924 +4FFC +2A00 +0BFE +0AAA +1C46 +1BF8 +2840 +2FFE +5110 +87EE +ENDCHAR +STARTCHAR uni704C +ENCODING 28748 +BBX 15 15 1 -1 +BITMAP +4110 +2FFE +1110 +07BC +84A4 +47BC +2110 +0220 +17FC +1C40 +27F8 +2440 +47F8 +4440 +87FE +ENDCHAR +STARTCHAR uni704D +ENCODING 28749 +BBX 15 16 0 -2 +BITMAP +0FBE +48A2 +2FBE +28A2 +0FBE +8C42 +4A92 +4FDE +1926 +2D5A +EFD2 +2912 +292A +2A46 +2C0A +0804 +ENDCHAR +STARTCHAR uni704E +ENCODING 28750 +BBX 15 15 1 -1 +BITMAP +4A10 +3F90 +2ABC +3F90 +AA90 +7FFE +0020 +3FA8 +204C +3FF2 +5100 +5F7C +4A54 +8FD4 +B87E +ENDCHAR +STARTCHAR uni704F +ENCODING 28751 +BBX 15 16 0 -2 +BITMAP +4000 +2FBE +2888 +8F90 +48BE +4FA2 +0222 +3FEA +202A +4FAA +C8AA +4FAA +4208 +4A94 +5252 +0622 +ENDCHAR +STARTCHAR uni7050 +ENCODING 28752 +BBX 15 16 0 -2 +BITMAP +0110 +4554 +25B8 +2910 +02A8 +8444 +4FFE +4842 +10A0 +2318 +EDF6 +2040 +27FC +2248 +2150 +0FFE +ENDCHAR +STARTCHAR uni7051 +ENCODING 28753 +BBX 15 15 1 -1 +BITMAP +4000 +2FBE +0000 +0FBE +8AAA +4040 +2FFE +0920 +0FFC +2924 +2FFC +2A20 +4BBC +5222 +8F9E +ENDCHAR +STARTCHAR uni7052 +ENCODING 28754 +BBX 15 16 0 -2 +BITMAP +0528 +47BE +2948 +27BE +0318 +85AA +4946 +53FC +1204 +23FC +E204 +23FC +2204 +23FC +2108 +0204 +ENDCHAR +STARTCHAR uni7053 +ENCODING 28755 +BBX 15 16 0 -2 +BITMAP +2104 +47C8 +8812 +F3BC +2008 +4B92 +F83E +0380 +AAAA +ABAA +0108 +7D90 +0960 +1120 +2518 +C206 +ENDCHAR +STARTCHAR uni7054 +ENCODING 28756 +BBX 15 15 1 -1 +BITMAP +4500 +3FCE +1552 +1FE4 +1548 +9FFE +402A +1FEA +002A +2FBE +28A0 +4FA0 +4522 +85E2 +9E1E +ENDCHAR +STARTCHAR uni7055 +ENCODING 28757 +BBX 15 16 0 -2 +BITMAP +040C +820A +5FC8 +051E +9254 +5574 +505E +1FD4 +2214 +5FDE +D454 +5554 +5754 +505E +5150 +1090 +ENDCHAR +STARTCHAR uni7056 +ENCODING 28758 +BBX 15 16 0 -2 +BITMAP +0020 +27FE +1488 +17DE +8488 +45DC +46AA +1488 +1450 +27DE +E450 +25DC +2450 +2BDE +2850 +1050 +ENDCHAR +STARTCHAR uni7057 +ENCODING 28759 +BBX 15 16 0 -2 +BITMAP +0810 +88FE +4800 +3EFE +2A82 +2ABA +AAAA +6AFE +3E00 +287C +0844 +4A7C +8E44 +3A7C +1000 +00FE +ENDCHAR +STARTCHAR uni7058 +ENCODING 28760 +BBX 15 15 1 -1 +BITMAP +4514 +3FD4 +1528 +073E +8268 +4FA8 +2ABC +0FA8 +2228 +2FA8 +223C +7FE8 +4528 +48A8 +90BE +ENDCHAR +STARTCHAR uni7059 +ENCODING 28761 +BBX 15 16 0 -2 +BITMAP +0248 +2150 +17FC +1404 +81F0 +4110 +47FC +1554 +14E4 +27FC +E040 +27FC +2040 +2FFE +22A4 +0452 +ENDCHAR +STARTCHAR uni705A +ENCODING 28762 +BBX 15 16 0 -2 +BITMAP +02AC +4444 +26AC +2444 +06AC +8404 +4FFE +4A0A +13F8 +2208 +E3F8 +2208 +23F8 +20A0 +2124 +061C +ENDCHAR +STARTCHAR uni705B +ENCODING 28763 +BBX 15 16 0 -2 +BITMAP +4F1E +2912 +2F1E +8912 +4F1E +4BBA +0AAA +2BBA +29F2 +4952 +C9F2 +4952 +49F2 +4842 +4BFA +0846 +ENDCHAR +STARTCHAR uni705C +ENCODING 28764 +BBX 15 16 0 -2 +BITMAP +0080 +BFFC +4800 +0FF8 +8000 +4FF8 +4808 +0FF8 +2000 +5DDC +D554 +5DD4 +555C +5DD6 +5496 +2D62 +ENDCHAR +STARTCHAR uni705D +ENCODING 28765 +BBX 15 15 1 -1 +BITMAP +4000 +2FBE +1890 +0FBC +88A4 +4FBC +2224 +1FE4 +003C +1FA4 +28A4 +2FBC +4A90 +5264 +9642 +ENDCHAR +STARTCHAR uni705E +ENCODING 28766 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1040 +0FFE +8842 +4B5A +2280 +0FDE +1292 +17DE +2552 +27DE +4112 +4FD2 +8126 +ENDCHAR +STARTCHAR uni705F +ENCODING 28767 +BBX 14 16 0 -2 +BITMAP +07FC +2404 +17FC +1524 +84A8 +4524 +45FC +1554 +15FC +2644 +E5F4 +2554 +29F4 +2844 +33F4 +0008 +ENDCHAR +STARTCHAR uni7060 +ENCODING 28768 +BBX 15 16 0 -2 +BITMAP +0790 +251E +17A8 +1484 +87BE +452A +47BE +1000 +13F8 +2208 +E3F8 +2208 +23F8 +20A0 +2124 +061C +ENDCHAR +STARTCHAR uni7061 +ENCODING 28769 +BBX 15 16 0 -2 +BITMAP +0110 +27FE +1110 +17BC +84A4 +47BC +44A4 +17BC +1444 +27FC +E554 +25F4 +2444 +24E4 +2554 +0448 +ENDCHAR +STARTCHAR uni7062 +ENCODING 28770 +BBX 15 16 0 -2 +BITMAP +0040 +27FC +1248 +13F8 +8040 +4FFE +4AAA +13B8 +1110 +27FC +E110 +2FFE +2128 +2310 +2D48 +0186 +ENDCHAR +STARTCHAR uni7063 +ENCODING 28771 +BBX 15 15 1 -1 +BITMAP +4888 +3290 +15F4 +0808 +15D2 +BD5E +49C8 +2C1A +0FFA +0008 +2FF8 +2800 +4FFC +4004 +801C +ENDCHAR +STARTCHAR uni7064 +ENCODING 28772 +BBX 15 15 1 -1 +BITMAP +4808 +29C8 +1010 +37F4 +8808 +55D2 +3E3E +09CA +1D5C +2BEA +2888 +3FFE +42A0 +4C98 +B086 +ENDCHAR +STARTCHAR uni7065 +ENCODING 28773 +BBX 15 15 1 -1 +BITMAP +0100 +0FE0 +0820 +0FE8 +7D10 +19E0 +E11E +1320 +7EFC +4284 +7EFC +4286 +FFFC +2E54 +D9B2 +ENDCHAR +STARTCHAR uni7066 +ENCODING 28774 +BBX 15 15 0 -2 +BITMAP +9FDE +5044 +1FC8 +905E +5FD2 +4892 +155E +3DD2 +489E +D552 +5DD2 +401E +5540 +554C +0012 +ENDCHAR +STARTCHAR uni7067 +ENCODING 28775 +BBX 15 16 0 -2 +BITMAP +4210 +2A90 +2F9C +8AA4 +4FC8 +4ABE +0FAA +202A +3FEA +403E +CFA0 +48A0 +4FA2 +48A2 +4522 +1F9E +ENDCHAR +STARTCHAR uni7068 +ENCODING 28776 +BBX 15 16 0 -2 +BITMAP +0410 +9F9C +4934 +0608 +9FB6 +401C +4F88 +08BE +2F80 +48BE +CFA2 +423E +5FA2 +423E +4214 +0222 +ENDCHAR +STARTCHAR uni7069 +ENCODING 28777 +BBX 15 15 1 -1 +BITMAP +4410 +3510 +1FFC +1510 +9FFE +5520 +3F2C +00F2 +1F00 +207C +3F54 +5154 +5F54 +8A54 +BFFE +ENDCHAR +STARTCHAR uni706A +ENCODING 28778 +BBX 15 16 0 -2 +BITMAP +4288 +22E8 +2F5E +82EC +475A +4AE8 +0208 +2FFE +2942 +5494 +C558 +47F2 +4204 +43E8 +4202 +03E4 +ENDCHAR +STARTCHAR uni706B +ENCODING 28779 +BBX 15 15 1 -1 +BITMAP +0100 +0102 +1102 +1104 +1104 +2108 +2110 +4280 +0280 +0440 +0420 +0810 +1008 +2004 +C002 +ENDCHAR +STARTCHAR uni706C +ENCODING 28780 +BBX 15 4 1 4 +BITMAP +2488 +2444 +4222 +8222 +ENDCHAR +STARTCHAR uni706D +ENCODING 28781 +BBX 15 15 0 -2 +BITMAP +FFFE +0100 +0100 +1108 +1108 +1110 +2120 +4280 +0280 +0440 +0440 +0820 +1010 +2008 +C006 +ENDCHAR +STARTCHAR uni706E +ENCODING 28782 +BBX 15 15 1 -1 +BITMAP +0100 +1104 +1108 +2290 +2440 +0820 +3018 +C446 +0440 +0440 +0440 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni706F +ENCODING 28783 +BBX 15 15 1 -1 +BITMAP +1000 +12FE +1210 +5210 +5410 +9010 +9010 +1010 +1010 +2810 +2810 +2410 +4410 +4210 +8070 +ENDCHAR +STARTCHAR uni7070 +ENCODING 28784 +BBX 15 14 1 -1 +BITMAP +7FFC +4000 +4080 +4084 +4484 +4488 +4890 +4880 +4080 +8140 +8140 +8220 +0C18 +3006 +ENDCHAR +STARTCHAR uni7071 +ENCODING 28785 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +11FC +1044 +5444 +5844 +5044 +9044 +1044 +1044 +1044 +2884 +2484 +4504 +4228 +8410 +ENDCHAR +STARTCHAR uni7072 +ENCODING 28786 +BBX 14 16 0 -2 +BITMAP +0804 +0804 +0804 +0944 +4944 +4A44 +4C44 +8844 +0844 +0844 +1444 +1244 +2104 +2104 +4014 +8008 +ENDCHAR +STARTCHAR uni7073 +ENCODING 28787 +BBX 14 16 0 -2 +BITMAP +0800 +0800 +0800 +1FFC +1004 +2204 +4244 +9244 +1284 +2204 +0504 +0484 +0844 +1004 +6028 +0010 +ENDCHAR +STARTCHAR uni7074 +ENCODING 28788 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +1020 +5420 +5820 +5020 +9020 +1020 +1020 +1020 +2820 +2420 +4420 +43FE +8000 +ENDCHAR +STARTCHAR uni7075 +ENCODING 28789 +BBX 15 14 1 -1 +BITMAP +1FF0 +0010 +0010 +7FFC +0010 +0010 +1FF0 +0100 +1104 +1108 +2290 +2440 +1830 +E00E +ENDCHAR +STARTCHAR uni7076 +ENCODING 28790 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +1210 +5210 +5210 +54FE +9410 +9010 +1010 +1010 +2810 +2810 +2410 +4210 +81FE +ENDCHAR +STARTCHAR uni7077 +ENCODING 28791 +BBX 15 16 0 -2 +BITMAP +0100 +1108 +1108 +2290 +0440 +1830 +E00E +0820 +0820 +0820 +FFFE +0820 +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni7078 +ENCODING 28792 +BBX 13 15 2 -1 +BITMAP +0400 +0F80 +1080 +6100 +0200 +0500 +18C0 +E038 +0200 +2210 +4260 +8500 +0880 +3060 +C018 +ENDCHAR +STARTCHAR uni7079 +ENCODING 28793 +BBX 15 16 0 -2 +BITMAP +1010 +1078 +13C0 +1040 +5440 +5840 +5040 +907E +17C0 +1040 +1040 +2842 +2442 +4442 +403E +8000 +ENDCHAR +STARTCHAR uni707A +ENCODING 28794 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1120 +552C +5934 +5164 +93A4 +1124 +1134 +1128 +2922 +2522 +4502 +40FE +8000 +ENDCHAR +STARTCHAR uni707B +ENCODING 28795 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0000 +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni707C +ENCODING 28796 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1240 +52FE +5482 +5102 +9002 +9002 +10F2 +1002 +2802 +2802 +4404 +4204 +8038 +ENDCHAR +STARTCHAR uni707D +ENCODING 28797 +BBX 15 15 1 -1 +BITMAP +0844 +1088 +2110 +4220 +2110 +1088 +0844 +0100 +1104 +2108 +4290 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni707E +ENCODING 28798 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +4004 +0100 +0104 +1108 +1110 +2280 +2280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni707F +ENCODING 28799 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +5524 +5924 +5124 +9124 +1124 +1124 +1124 +2924 +2524 +45FC +4004 +8000 +ENDCHAR +STARTCHAR uni7080 +ENCODING 28800 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1010 +1420 +5840 +5080 +51FE +9092 +1092 +1092 +1112 +2922 +2622 +4442 +4094 +8108 +ENDCHAR +STARTCHAR uni7081 +ENCODING 28801 +BBX 15 14 1 -1 +BITMAP +3FF8 +0880 +0880 +0880 +7FFC +0100 +0180 +0282 +0C82 +F07E +0000 +2444 +4222 +8222 +ENDCHAR +STARTCHAR uni7082 +ENCODING 28802 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +1090 +1488 +5888 +5124 +5124 +9222 +1440 +1040 +1088 +2884 +2504 +43FE +4102 +8000 +ENDCHAR +STARTCHAR uni7083 +ENCODING 28803 +BBX 15 16 0 -2 +BITMAP +0440 +0820 +1010 +2FE8 +C426 +0420 +0820 +10A0 +6040 +0100 +1110 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7084 +ENCODING 28804 +BBX 15 16 0 -2 +BITMAP +1000 +13F8 +1088 +1488 +5888 +5088 +5088 +97F8 +1108 +1108 +1108 +2908 +2508 +4108 +47FE +8000 +ENDCHAR +STARTCHAR uni7085 +ENCODING 28805 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0100 +1104 +1108 +2290 +2440 +1830 +E00E +ENDCHAR +STARTCHAR uni7086 +ENCODING 28806 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +15FE +5488 +5488 +9088 +9088 +1050 +2850 +2820 +2420 +4450 +4088 +8306 +ENDCHAR +STARTCHAR uni7087 +ENCODING 28807 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +1480 +58FE +5108 +5288 +9088 +1088 +1050 +1050 +2820 +2450 +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni7088 +ENCODING 28808 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1088 +1488 +5888 +5106 +5200 +91FC +1084 +1084 +1048 +2850 +2420 +4450 +4088 +8306 +ENDCHAR +STARTCHAR uni7089 +ENCODING 28809 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1200 +5200 +54FE +9082 +9082 +1082 +10FE +2880 +2880 +2480 +4500 +4100 +8200 +ENDCHAR +STARTCHAR uni708A +ENCODING 28810 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +5480 +54FE +5902 +9124 +9220 +1020 +1050 +2850 +2850 +2488 +4288 +4104 +8202 +ENDCHAR +STARTCHAR uni708B +ENCODING 28811 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FE +1010 +5410 +5820 +5020 +9068 +10A4 +1122 +1222 +2820 +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni708C +ENCODING 28812 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1450 +5888 +5104 +5202 +9088 +1088 +1088 +1088 +2888 +2488 +4508 +4108 +8208 +ENDCHAR +STARTCHAR uni708D +ENCODING 28813 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11E0 +1500 +5900 +51FC +5144 +9144 +1144 +1128 +1128 +2910 +2510 +4228 +4244 +8482 +ENDCHAR +STARTCHAR uni708E +ENCODING 28814 +BBX 14 15 1 -1 +BITMAP +2210 +2210 +4220 +4500 +0880 +3060 +C21C +0210 +2220 +4540 +8500 +0880 +1040 +2030 +C00C +ENDCHAR +STARTCHAR uni708F +ENCODING 28815 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +1440 +5944 +5144 +5148 +9250 +1040 +10A0 +10A0 +2890 +2510 +4108 +4204 +8402 +ENDCHAR +STARTCHAR uni7090 +ENCODING 28816 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +5420 +5820 +5020 +91FC +1020 +1020 +1020 +2BFE +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni7091 +ENCODING 28817 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1420 +5BFE +5020 +5070 +9070 +10A8 +10A8 +1124 +2A22 +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni7092 +ENCODING 28818 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +12A8 +52A8 +5524 +9124 +9222 +1060 +2804 +2804 +2408 +4410 +4060 +8380 +ENDCHAR +STARTCHAR uni7093 +ENCODING 28819 +BBX 15 16 0 -2 +BITMAP +1010 +1110 +1090 +1090 +5410 +5910 +5090 +9090 +1010 +101E +13F0 +2810 +2410 +4410 +4010 +8010 +ENDCHAR +STARTCHAR uni7094 +ENCODING 28820 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +17F8 +5848 +5048 +5048 +9048 +17FE +1040 +10A0 +28A0 +2510 +4110 +4208 +8406 +ENDCHAR +STARTCHAR uni7095 +ENCODING 28821 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +15FE +5400 +5400 +90F8 +9088 +1088 +1088 +2888 +2888 +450A +410A +8206 +ENDCHAR +STARTCHAR uni7096 +ENCODING 28822 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FE +5420 +5924 +5124 +9124 +1124 +11FC +1024 +2820 +2422 +4422 +401E +8000 +ENDCHAR +STARTCHAR uni7097 +ENCODING 28823 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0FE0 +0100 +0100 +1104 +1108 +2290 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7098 +ENCODING 28824 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11E0 +1500 +5900 +5100 +51FE +9110 +1110 +1110 +1110 +2910 +2510 +4210 +4210 +8410 +ENDCHAR +STARTCHAR uni7099 +ENCODING 28825 +BBX 15 15 1 -1 +BITMAP +0100 +03F8 +0E10 +7920 +04C0 +0300 +1C00 +E104 +1108 +1110 +2280 +2440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni709A +ENCODING 28826 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F840 +8848 +8948 +8948 +8950 +FA40 +8840 +88A0 +88A0 +88A0 +F910 +8910 +0208 +0404 +ENDCHAR +STARTCHAR uni709B +ENCODING 28827 +BBX 15 16 0 -2 +BITMAP +0100 +1108 +1108 +2290 +0440 +1830 +E00E +0880 +0888 +1090 +30E0 +5180 +9684 +1084 +107C +1000 +ENDCHAR +STARTCHAR uni709C +ENCODING 28828 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +13FE +5440 +5840 +51FC +9040 +1040 +13FE +1042 +2842 +244A +4444 +4040 +8040 +ENDCHAR +STARTCHAR uni709D +ENCODING 28829 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +14A0 +5910 +5208 +5406 +91F0 +1110 +1110 +1150 +2920 +2504 +4504 +40FC +8000 +ENDCHAR +STARTCHAR uni709E +ENCODING 28830 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +1400 +5BFE +5040 +5040 +9060 +1050 +1048 +1044 +2844 +2440 +4440 +4040 +8040 +ENDCHAR +STARTCHAR uni709F +ENCODING 28831 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +1084 +1484 +5484 +5484 +90FC +9084 +1084 +1084 +2884 +28FC +4400 +4400 +81FE +ENDCHAR +STARTCHAR uni70A0 +ENCODING 28832 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1124 +1124 +5524 +59FC +5124 +9124 +1124 +11FC +1124 +2820 +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni70A1 +ENCODING 28833 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FE +1420 +5820 +5020 +5120 +9120 +113C +1120 +1120 +2920 +2520 +4120 +47FE +8000 +ENDCHAR +STARTCHAR uni70A2 +ENCODING 28834 +BBX 15 16 0 -2 +BITMAP +1020 +1028 +1024 +1020 +55FE +5820 +5070 +9070 +10A8 +10A8 +1124 +2A22 +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni70A3 +ENCODING 28835 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FE +1008 +5408 +59E8 +5128 +9128 +1128 +1128 +11E8 +2928 +2408 +4408 +4028 +8010 +ENDCHAR +STARTCHAR uni70A4 +ENCODING 28836 +BBX 14 15 1 -1 +BITMAP +1000 +11FC +1444 +5444 +5884 +5088 +9108 +9230 +1000 +29FC +2904 +2504 +4504 +4104 +81FC +ENDCHAR +STARTCHAR uni70A5 +ENCODING 28837 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1090 +13FC +5494 +5894 +53FC +9290 +1290 +13FE +1092 +2892 +251A +4514 +4210 +8410 +ENDCHAR +STARTCHAR uni70A6 +ENCODING 28838 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +1048 +1440 +5BFE +5080 +5080 +90FC +1144 +1144 +1128 +2928 +2610 +4228 +4444 +8182 +ENDCHAR +STARTCHAR uni70A7 +ENCODING 28839 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FE +1500 +5A20 +5120 +512C +9174 +13A4 +1124 +1134 +2928 +2522 +4502 +40FE +8000 +ENDCHAR +STARTCHAR uni70A8 +ENCODING 28840 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1010 +15FE +5902 +5204 +5080 +9088 +1090 +10A0 +10C0 +2882 +2482 +4482 +407E +8000 +ENDCHAR +STARTCHAR uni70A9 +ENCODING 28841 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10A0 +14A0 +5910 +5248 +5426 +9020 +13F8 +1008 +1010 +2910 +24A0 +4440 +4020 +8020 +ENDCHAR +STARTCHAR uni70AA +ENCODING 28842 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1124 +1524 +5924 +5124 +51FC +9020 +1020 +1124 +1124 +2924 +2524 +4524 +41FC +8004 +ENDCHAR +STARTCHAR uni70AB +ENCODING 28843 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1420 +57FE +5840 +5040 +9080 +9110 +1090 +2860 +2820 +2448 +4444 +409A +83E2 +ENDCHAR +STARTCHAR uni70AC +ENCODING 28844 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1100 +1300 +5300 +55FC +9104 +9104 +1104 +29FC +2900 +2500 +4500 +4100 +81FE +ENDCHAR +STARTCHAR uni70AD +ENCODING 28845 +BBX 15 15 1 -1 +BITMAP +0100 +2104 +2104 +3FFC +0000 +3FFE +2080 +2488 +2488 +2490 +2940 +4140 +4220 +8418 +1806 +ENDCHAR +STARTCHAR uni70AE +ENCODING 28846 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +21FC +2904 +6A04 +ABE4 +A624 +A224 +2224 +33E8 +5208 +4A30 +4A02 +8202 +81FE +ENDCHAR +STARTCHAR uni70AF +ENCODING 28847 +BBX 14 15 1 -1 +BITMAP +2000 +23FC +2204 +2A04 +6A04 +AAF4 +A294 +A294 +2294 +3294 +52F4 +4A04 +4A04 +8204 +821C +ENDCHAR +STARTCHAR uni70B0 +ENCODING 28848 +BBX 14 16 0 -2 +BITMAP +0800 +0800 +1FF0 +2010 +5F90 +1090 +1090 +1F90 +1050 +1024 +1004 +0FFC +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni70B1 +ENCODING 28849 +BBX 15 15 1 -1 +BITMAP +0400 +0420 +0870 +7F8C +0000 +1FF0 +1010 +1010 +1FF0 +0100 +1104 +6298 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni70B2 +ENCODING 28850 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1040 +1088 +5504 +5BFE +5002 +9000 +11FC +1104 +1104 +2904 +2504 +4504 +41FC +8104 +ENDCHAR +STARTCHAR uni70B3 +ENCODING 28851 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2040 +2840 +6BFC +AA44 +A244 +A2A4 +22A4 +3294 +5314 +4A04 +4A04 +8204 +821C +ENDCHAR +STARTCHAR uni70B4 +ENCODING 28852 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +5524 +5924 +5124 +9124 +1124 +13FE +1020 +2850 +2450 +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni70B5 +ENCODING 28853 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +107C +1084 +5588 +5A50 +5020 +9050 +1088 +1306 +1060 +2810 +2408 +44C0 +4020 +8010 +ENDCHAR +STARTCHAR uni70B6 +ENCODING 28854 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +1020 +543E +5820 +5020 +9020 +11FC +1104 +1104 +2904 +2504 +4504 +41FC +8104 +ENDCHAR +STARTCHAR uni70B7 +ENCODING 28855 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1420 +57FE +5820 +5020 +9020 +9020 +11FC +2820 +2820 +2420 +4420 +4020 +83FE +ENDCHAR +STARTCHAR uni70B8 +ENCODING 28856 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +2100 +29FE +6A40 +AA40 +A440 +A07C +2040 +3040 +5040 +487C +4840 +8040 +8040 +ENDCHAR +STARTCHAR uni70B9 +ENCODING 28857 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +0200 +03F8 +0200 +0200 +3FF0 +2010 +2010 +2010 +3FF0 +0000 +2888 +4444 +8442 +ENDCHAR +STARTCHAR uni70BA +ENCODING 28858 +BBX 15 15 1 -1 +BITMAP +0840 +0440 +0280 +3FE0 +0220 +0240 +07F0 +0810 +1020 +3FFE +C002 +2922 +2492 +4484 +0018 +ENDCHAR +STARTCHAR uni70BB +ENCODING 28859 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1040 +1440 +5440 +5480 +9080 +90FE +1182 +1182 +2A82 +2882 +4482 +4282 +80FE +ENDCHAR +STARTCHAR uni70BC +ENCODING 28860 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FC +1080 +5480 +5BE0 +5120 +9220 +13FC +1020 +1128 +2924 +2622 +4422 +40A0 +8040 +ENDCHAR +STARTCHAR uni70BD +ENCODING 28861 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +1104 +5504 +5904 +5104 +9104 +11FC +1104 +1000 +2890 +2488 +4504 +4202 +8402 +ENDCHAR +STARTCHAR uni70BE +ENCODING 28862 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1104 +5504 +5904 +51FC +9050 +1050 +1050 +1050 +2892 +2492 +4512 +420E +8400 +ENDCHAR +STARTCHAR uni70BF +ENCODING 28863 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11F8 +1508 +5908 +5148 +5128 +9128 +1108 +17FE +1108 +2908 +2508 +4108 +4228 +8410 +ENDCHAR +STARTCHAR uni70C0 +ENCODING 28864 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13E0 +1020 +5524 +58A4 +50A8 +9020 +13FE +1020 +1020 +2820 +2420 +4420 +40A0 +8040 +ENDCHAR +STARTCHAR uni70C1 +ENCODING 28865 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11E0 +1100 +5520 +5920 +5120 +91FE +1020 +1020 +10A8 +28A4 +2522 +4622 +40A0 +8040 +ENDCHAR +STARTCHAR uni70C2 +ENCODING 28866 +BBX 15 16 0 -2 +BITMAP +1000 +1108 +1088 +1490 +5800 +53FE +5000 +9000 +1000 +11FC +1000 +2800 +2400 +4000 +43FE +8000 +ENDCHAR +STARTCHAR uni70C3 +ENCODING 28867 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1008 +1010 +5430 +5848 +5084 +9302 +1000 +11FC +1020 +2820 +2420 +4420 +43FE +8000 +ENDCHAR +STARTCHAR uni70C4 +ENCODING 28868 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +13FE +5400 +5888 +5104 +9202 +1088 +1088 +1050 +2850 +2420 +4450 +4088 +8306 +ENDCHAR +STARTCHAR uni70C5 +ENCODING 28869 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1040 +1480 +59FC +5154 +5154 +9154 +1154 +1154 +1154 +2954 +2554 +4154 +43FE +8000 +ENDCHAR +STARTCHAR uni70C6 +ENCODING 28870 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +113C +1200 +5480 +5880 +517E +9308 +1508 +1108 +1108 +2908 +2508 +4508 +4128 +8110 +ENDCHAR +STARTCHAR uni70C7 +ENCODING 28871 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1488 +5904 +5202 +51FC +9020 +1020 +1020 +11FC +2820 +2420 +4420 +43FE +8000 +ENDCHAR +STARTCHAR uni70C8 +ENCODING 28872 +BBX 15 15 1 -1 +BITMAP +0004 +7F04 +0844 +0844 +1F44 +1144 +3144 +4A44 +0604 +0C04 +701C +0000 +2888 +4444 +8442 +ENDCHAR +STARTCHAR uni70C9 +ENCODING 28873 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +1FE0 +2020 +4040 +BFF8 +2008 +2288 +2448 +2828 +0100 +1110 +22A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni70CA +ENCODING 28874 +BBX 15 15 1 -1 +BITMAP +1084 +1044 +1048 +15FC +5420 +5420 +90F8 +9020 +1020 +1020 +2BFE +2820 +4420 +4420 +8020 +ENDCHAR +STARTCHAR uni70CB +ENCODING 28875 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +2040 +2FFE +6150 +A150 +2248 +2248 +2444 +2842 +2040 +0000 +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni70CC +ENCODING 28876 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1090 +1510 +59FE +5310 +5510 +9138 +1138 +1154 +1154 +2992 +2510 +4510 +4110 +8110 +ENDCHAR +STARTCHAR uni70CD +ENCODING 28877 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +1120 +11FC +5520 +5A20 +5020 +93FE +1090 +1090 +1090 +2890 +2512 +4512 +4212 +840E +ENDCHAR +STARTCHAR uni70CE +ENCODING 28878 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +FFFE +0820 +1020 +2020 +4120 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni70CF +ENCODING 28879 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +3FF0 +2010 +2010 +2010 +3FF0 +2000 +3FFE +2000 +3FFC +0044 +5224 +4924 +8918 +ENDCHAR +STARTCHAR uni70D0 +ENCODING 28880 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11F8 +1508 +5948 +5128 +5128 +93FE +1108 +1148 +1128 +2928 +2508 +4208 +4228 +8410 +ENDCHAR +STARTCHAR uni70D1 +ENCODING 28881 +BBX 15 15 1 -1 +BITMAP +1050 +1050 +1252 +1554 +5558 +5450 +9050 +9050 +1058 +10D4 +2B52 +2850 +4452 +4092 +830E +ENDCHAR +STARTCHAR uni70D2 +ENCODING 28882 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +1024 +1420 +5BFE +5020 +5020 +93A0 +1120 +1110 +1110 +2910 +25CA +470A +4206 +8002 +ENDCHAR +STARTCHAR uni70D3 +ENCODING 28883 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +11FC +1420 +5420 +5420 +D1FE +9000 +1020 +3020 +29FC +2820 +4420 +4020 +83FE +ENDCHAR +STARTCHAR uni70D4 +ENCODING 28884 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1502 +5502 +597A +5102 +9102 +917A +114A +294A +294A +257A +4502 +4102 +8106 +ENDCHAR +STARTCHAR uni70D5 +ENCODING 28885 +BBX 15 16 0 -2 +BITMAP +0028 +0024 +0020 +3FFE +2020 +2020 +2FA4 +2224 +2264 +2AA8 +3228 +2510 +2492 +48AA +5046 +8082 +ENDCHAR +STARTCHAR uni70D6 +ENCODING 28886 +BBX 15 16 0 -2 +BITMAP +0840 +0848 +7F44 +0844 +0840 +FFFE +0040 +0844 +2944 +2944 +2A28 +482A +1412 +122A +2246 +4082 +ENDCHAR +STARTCHAR uni70D7 +ENCODING 28887 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1010 +13FE +5420 +5842 +5084 +91F8 +1010 +1022 +10C4 +2B08 +2410 +4428 +40C4 +8302 +ENDCHAR +STARTCHAR uni70D8 +ENCODING 28888 +BBX 15 15 1 -1 +BITMAP +1090 +1090 +1490 +5490 +5BFC +5090 +9090 +9090 +1090 +2890 +2BFE +2400 +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni70D9 +ENCODING 28889 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +20FC +2984 +6A88 +A850 +A020 +A0D8 +2306 +3000 +51FC +4904 +4904 +8104 +81FC +ENDCHAR +STARTCHAR uni70DA +ENCODING 28890 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1088 +5504 +5A02 +51FC +9000 +1000 +11FC +1104 +2904 +2504 +4504 +41FC +8104 +ENDCHAR +STARTCHAR uni70DB +ENCODING 28891 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +11FC +5524 +5924 +5124 +9124 +11FC +1124 +1020 +2828 +2424 +45FE +4082 +8000 +ENDCHAR +STARTCHAR uni70DC +ENCODING 28892 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1000 +1400 +55F8 +5508 +9108 +91F8 +1108 +1108 +2908 +29F8 +4400 +4000 +87FE +ENDCHAR +STARTCHAR uni70DD +ENCODING 28893 +BBX 15 14 1 -1 +BITMAP +3FF8 +0060 +0184 +7D08 +0590 +0940 +1120 +2118 +C706 +0000 +FFFE +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni70DE +ENCODING 28894 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +1488 +5BE8 +5088 +518C +91CA +12AA +1288 +1488 +2888 +2488 +4488 +4088 +8088 +ENDCHAR +STARTCHAR uni70DF +ENCODING 28895 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2202 +2A22 +6A22 +ABFE +A222 +A222 +2252 +3252 +528A +4B06 +4A02 +83FE +8000 +ENDCHAR +STARTCHAR uni70E0 +ENCODING 28896 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +17FE +1080 +5500 +59FC +5304 +9504 +19FC +1104 +1104 +29FC +2504 +4504 +4114 +8108 +ENDCHAR +STARTCHAR uni70E1 +ENCODING 28897 +BBX 15 16 0 -2 +BITMAP +0100 +1108 +1108 +2290 +0440 +1830 +E44E +0440 +3FF8 +0440 +0440 +FFFE +0000 +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni70E2 +ENCODING 28898 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +5400 +5838 +53C0 +9040 +1040 +107C +13C0 +2840 +2442 +4442 +403E +8000 +ENDCHAR +STARTCHAR uni70E3 +ENCODING 28899 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +13FE +5480 +5890 +5090 +9112 +1152 +1154 +1290 +2A28 +2428 +4444 +4084 +8102 +ENDCHAR +STARTCHAR uni70E4 +ENCODING 28900 +BBX 15 15 1 -1 +BITMAP +1040 +1044 +15FC +5448 +5848 +53FE +9020 +904C +11F0 +2E80 +28FC +2504 +4404 +4004 +8038 +ENDCHAR +STARTCHAR uni70E5 +ENCODING 28901 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1120 +1120 +5520 +59FC +5104 +9104 +1104 +1104 +11FC +2920 +2520 +4520 +41FE +8000 +ENDCHAR +STARTCHAR uni70E6 +ENCODING 28902 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1040 +55FC +5904 +5104 +9124 +1124 +1124 +1124 +2944 +2450 +4488 +4104 +8204 +ENDCHAR +STARTCHAR uni70E7 +ENCODING 28903 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +20BC +23C0 +A850 +B024 +A0D4 +A30C +2000 +27FE +2090 +2090 +5112 +4912 +420E +8400 +ENDCHAR +STARTCHAR uni70E8 +ENCODING 28904 +BBX 15 16 0 -2 +BITMAP +1090 +1094 +1114 +1518 +5B10 +5532 +5152 +910E +1120 +1020 +13FE +2820 +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni70E9 +ENCODING 28905 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1488 +5904 +5202 +50F8 +9000 +1000 +13FE +1020 +2840 +2488 +4104 +43FE +8102 +ENDCHAR +STARTCHAR uni70EA +ENCODING 28906 +BBX 15 16 0 -2 +BITMAP +1088 +1048 +1050 +1000 +55FC +5820 +5020 +9020 +13FE +1020 +1050 +2850 +2488 +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni70EB +ENCODING 28907 +BBX 15 16 0 -2 +BITMAP +23F0 +1020 +80C0 +43FC +1124 +2124 +E244 +2484 +2928 +2010 +0100 +1110 +22A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni70EC +ENCODING 28908 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1104 +1504 +5504 +55FC +9108 +9104 +1164 +1112 +2A0A +2AC0 +4420 +4410 +8008 +ENDCHAR +STARTCHAR uni70ED +ENCODING 28909 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +FDF8 +1048 +1048 +1CC8 +3048 +D0AA +10AA +5106 +2202 +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni70EE +ENCODING 28910 +BBX 15 16 0 -2 +BITMAP +7F84 +0824 +1024 +3F24 +5124 +0A24 +0404 +0804 +3014 +C108 +1110 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni70EF +ENCODING 28911 +BBX 15 16 0 -2 +BITMAP +1184 +1068 +1030 +14C8 +5B04 +5040 +53FE +90A0 +1120 +13FC +1524 +2924 +2534 +4128 +4020 +8020 +ENDCHAR +STARTCHAR uni70F0 +ENCODING 28912 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11C0 +1004 +5544 +58A8 +5000 +91F8 +1010 +1020 +13FE +2820 +2420 +4420 +40A0 +8040 +ENDCHAR +STARTCHAR uni70F1 +ENCODING 28913 +BBX 14 15 1 -1 +BITMAP +2000 +23FC +22A4 +2AA4 +6AA4 +AABC +A304 +A204 +22F4 +3294 +5294 +4A94 +4AF4 +8204 +821C +ENDCHAR +STARTCHAR uni70F2 +ENCODING 28914 +BBX 15 16 0 -2 +BITMAP +080C +08F0 +7E80 +0880 +0EFE +7888 +0888 +2908 +1208 +0100 +1110 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni70F3 +ENCODING 28915 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +13FE +1020 +5420 +59FC +5124 +9124 +11FC +1124 +1124 +29FC +2524 +4524 +4124 +810C +ENDCHAR +STARTCHAR uni70F4 +ENCODING 28916 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1000 +1492 +5924 +5248 +5124 +9092 +1000 +11FE +1020 +2820 +2420 +4420 +43FE +8000 +ENDCHAR +STARTCHAR uni70F5 +ENCODING 28917 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +5400 +5880 +50FC +9104 +1204 +1484 +1044 +2844 +2404 +4404 +4028 +8010 +ENDCHAR +STARTCHAR uni70F6 +ENCODING 28918 +BBX 15 16 0 -2 +BITMAP +1000 +1006 +13B8 +1488 +5888 +5108 +513E +9388 +1088 +1288 +1288 +293E +2500 +4280 +447E +8800 +ENDCHAR +STARTCHAR uni70F7 +ENCODING 28919 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1602 +5C04 +51F8 +5000 +9000 +13FE +1090 +1090 +2890 +2512 +4112 +420E +8400 +ENDCHAR +STARTCHAR uni70F8 +ENCODING 28920 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FE +1500 +5AFC +5084 +50A4 +9094 +13FE +1084 +1124 +2914 +25FE +4404 +4028 +8010 +ENDCHAR +STARTCHAR uni70F9 +ENCODING 28921 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0000 +1FF0 +1010 +1FF0 +0000 +7FFC +0030 +01C0 +0100 +0300 +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni70FA +ENCODING 28922 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +1104 +5504 +59FC +5104 +9104 +11FC +1120 +1122 +2914 +2508 +4544 +4182 +8100 +ENDCHAR +STARTCHAR uni70FB +ENCODING 28923 +BBX 15 16 0 -2 +BITMAP +1004 +100E +13B8 +1488 +5888 +5128 +512E +93A8 +10A8 +12A8 +12A8 +293E +2500 +4280 +447E +8800 +ENDCHAR +STARTCHAR uni70FC +ENCODING 28924 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1040 +1480 +5944 +5224 +5068 +90B0 +1130 +1228 +1068 +28A4 +2522 +4220 +40A0 +8040 +ENDCHAR +STARTCHAR uni70FD +ENCODING 28925 +BBX 15 15 1 -1 +BITMAP +2040 +207C +2084 +2988 +6A50 +A870 +A38E +A020 +21FC +3020 +51FC +4820 +4BFE +8020 +8020 +ENDCHAR +STARTCHAR uni70FE +ENCODING 28926 +BBX 13 16 1 -2 +BITMAP +0200 +1220 +1240 +2580 +0860 +3210 +D228 +1220 +2540 +0880 +3060 +C218 +3FE0 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni70FF +ENCODING 28927 +BBX 15 16 0 -2 +BITMAP +1002 +13C2 +1244 +1648 +5B50 +52C2 +5242 +9244 +1FE8 +1250 +1242 +2A42 +2644 +4248 +4450 +88E0 +ENDCHAR +STARTCHAR uni7100 +ENCODING 28928 +BBX 15 16 0 -2 +BITMAP +1000 +1050 +1048 +1084 +5524 +5820 +5050 +9088 +1106 +12F8 +1088 +2888 +2488 +4488 +40F8 +8088 +ENDCHAR +STARTCHAR uni7101 +ENCODING 28929 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +78FC +4904 +4A48 +4840 +78B0 +030C +0C02 +0100 +1110 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7102 +ENCODING 28930 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +24FE +6488 +A550 +2420 +2450 +2088 +0104 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni7103 +ENCODING 28931 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +10FC +1220 +5220 +5420 +91FE +9050 +1154 +1154 +2A52 +2A52 +4490 +4490 +8130 +ENDCHAR +STARTCHAR uni7104 +ENCODING 28932 +BBX 15 14 1 -1 +BITMAP +3FF8 +0208 +FFFE +0208 +3FF8 +0400 +0FF8 +3808 +C808 +0FF8 +0000 +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni7105 +ENCODING 28933 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +1120 +11FC +5520 +5A20 +5020 +93FE +1000 +1000 +11FC +2904 +2504 +4504 +41FC +8104 +ENDCHAR +STARTCHAR uni7106 +ENCODING 28934 +BBX 14 15 1 -1 +BITMAP +1000 +11FC +1104 +1504 +55FC +5400 +91FC +9104 +11FC +1104 +2904 +29FC +4504 +4504 +811C +ENDCHAR +STARTCHAR uni7107 +ENCODING 28935 +BBX 15 15 1 -1 +BITMAP +1020 +10A4 +10A4 +1522 +5420 +55FC +9104 +9104 +11FC +1104 +2904 +29FC +4504 +4504 +811C +ENDCHAR +STARTCHAR uni7108 +ENCODING 28936 +BBX 15 15 1 -1 +BITMAP +0E00 +70FC +4084 +7E84 +42FC +4280 +7E82 +407E +C100 +9104 +1108 +2290 +2440 +1830 +E00E +ENDCHAR +STARTCHAR uni7109 +ENCODING 28937 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +1100 +11F8 +1100 +1100 +FFFE +1000 +1FF8 +1000 +1FFE +4922 +4492 +8496 +ENDCHAR +STARTCHAR uni710A +ENCODING 28938 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +11FC +5504 +59FC +5000 +9000 +11FC +1020 +1020 +2BFE +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni710B +ENCODING 28939 +BBX 15 16 0 -2 +BITMAP +2420 +2420 +2420 +3DFC +0420 +FC20 +2420 +24F8 +4400 +0100 +1110 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni710C +ENCODING 28940 +BBX 15 15 1 -1 +BITMAP +1080 +1090 +1118 +17E4 +5490 +5490 +911E +9280 +10F8 +1108 +2B08 +2490 +4060 +4198 +8606 +ENDCHAR +STARTCHAR uni710D +ENCODING 28941 +BBX 15 16 0 -2 +BITMAP +1108 +1088 +1090 +15FC +5824 +5024 +51FC +9120 +1120 +11FE +1062 +28A2 +252A +4224 +4420 +8020 +ENDCHAR +STARTCHAR uni710E +ENCODING 28942 +BBX 15 16 0 -2 +BITMAP +1000 +100C +11F0 +FD00 +1100 +11FE +1D10 +F110 +1110 +1210 +5210 +2410 +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni710F +ENCODING 28943 +BBX 15 14 1 -1 +BITMAP +3FF0 +00C0 +0300 +01FC +7D44 +4544 +4528 +4510 +7D68 +0186 +0E00 +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni7110 +ENCODING 28944 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1040 +1040 +55FC +5884 +5084 +93FE +1000 +1000 +11FC +2904 +2504 +4504 +41FC +8104 +ENDCHAR +STARTCHAR uni7111 +ENCODING 28945 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1222 +1622 +5A22 +53FE +5222 +9262 +1272 +12AA +1322 +2A22 +2622 +4202 +43FE +8202 +ENDCHAR +STARTCHAR uni7112 +ENCODING 28946 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +1084 +5484 +5884 +50FC +9000 +1000 +11FE +1102 +2902 +2502 +4502 +41FE +8102 +ENDCHAR +STARTCHAR uni7113 +ENCODING 28947 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1488 +5944 +5222 +50F8 +9008 +1010 +1020 +11FC +2904 +2504 +4504 +41FC +8104 +ENDCHAR +STARTCHAR uni7114 +ENCODING 28948 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +14FC +5504 +5808 +5010 +917E +9142 +1142 +2942 +297E +2542 +4542 +4142 +817E +ENDCHAR +STARTCHAR uni7115 +ENCODING 28949 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10F8 +1508 +5A10 +55FC +5124 +9124 +1124 +1124 +13FE +2850 +2450 +4488 +4104 +8602 +ENDCHAR +STARTCHAR uni7116 +ENCODING 28950 +BBX 15 16 0 -2 +BITMAP +1100 +10BE +1282 +1602 +5A22 +5212 +5252 +9242 +12CA +1356 +1252 +2A32 +2602 +4202 +420A +8204 +ENDCHAR +STARTCHAR uni7117 +ENCODING 28951 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1504 +59FC +5100 +5100 +91FE +1102 +117A +114A +294A +267A +4202 +4414 +8008 +ENDCHAR +STARTCHAR uni7118 +ENCODING 28952 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0200 +3FF8 +0400 +FFFE +0820 +1FFC +2020 +4420 +8220 +02A0 +0040 +2488 +4244 +ENDCHAR +STARTCHAR uni7119 +ENCODING 28953 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +2908 +6888 +A890 +A7FE +A000 +2000 +31F8 +5108 +4908 +4908 +8108 +81F8 +ENDCHAR +STARTCHAR uni711A +ENCODING 28954 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FEFE +1020 +3870 +56A8 +9126 +1020 +0100 +1108 +2110 +42A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni711B +ENCODING 28955 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FAF8 +8208 +8208 +9248 +9248 +9288 +A308 +8488 +8448 +8848 +9008 +A018 +ENDCHAR +STARTCHAR uni711C +ENCODING 28956 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +2A08 +6BF8 +AA08 +A208 +A3F8 +2000 +5220 +53AC +4A30 +4A20 +83A2 +861E +ENDCHAR +STARTCHAR uni711D +ENCODING 28957 +BBX 15 16 0 -2 +BITMAP +101C +13E0 +1220 +13FE +5620 +5A92 +530A +9206 +11FC +1104 +1104 +29FC +2504 +4504 +41FC +8104 +ENDCHAR +STARTCHAR uni711E +ENCODING 28958 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +17FE +5400 +59F8 +5108 +91F8 +9000 +11FC +2818 +2820 +27FE +4420 +4020 +80E0 +ENDCHAR +STARTCHAR uni711F +ENCODING 28959 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +1088 +17FE +5888 +5088 +57FE +9000 +11FC +1104 +1104 +29FC +2504 +4504 +41FC +8104 +ENDCHAR +STARTCHAR uni7120 +ENCODING 28960 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +17FE +5400 +5888 +5088 +9154 +9222 +1000 +2820 +2BFE +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni7121 +ENCODING 28961 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +3FFC +5248 +9248 +1248 +FFFE +1248 +1248 +1248 +FFFE +0000 +2888 +4444 +8442 +ENDCHAR +STARTCHAR uni7122 +ENCODING 28962 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1010 +15FE +5902 +5254 +5088 +9104 +1000 +10FC +1020 +2820 +2420 +4420 +41FE +8000 +ENDCHAR +STARTCHAR uni7123 +ENCODING 28963 +BBX 15 15 0 -2 +BITMAP +7F00 +22FC +3E44 +2244 +3E44 +2228 +2228 +2F10 +F228 +4244 +0282 +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni7124 +ENCODING 28964 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2210 +2210 +25FE +2C90 +3450 +4410 +4450 +8520 +1110 +22A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7125 +ENCODING 28965 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +5504 +5900 +51DE +9252 +1252 +1352 +149A +2894 +2510 +4512 +4212 +840E +ENDCHAR +STARTCHAR uni7126 +ENCODING 28966 +BBX 15 15 1 -1 +BITMAP +0440 +0480 +1FF8 +3080 +DFF0 +1080 +1080 +1FF0 +1080 +1080 +1FFC +0000 +2888 +4444 +8442 +ENDCHAR +STARTCHAR uni7127 +ENCODING 28967 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +1108 +1548 +5A44 +5492 +5108 +93FC +1044 +1020 +10A4 +2A82 +268A +428A +4478 +8000 +ENDCHAR +STARTCHAR uni7128 +ENCODING 28968 +BBX 14 16 0 -2 +BITMAP +1000 +13FC +1204 +12F4 +5604 +5AF4 +5000 +91F8 +1108 +11F8 +1108 +29F8 +2508 +4508 +4128 +8110 +ENDCHAR +STARTCHAR uni7129 +ENCODING 28969 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +1652 +5A52 +53DE +5252 +9252 +1252 +13DE +1252 +2A52 +2652 +4252 +4552 +88A6 +ENDCHAR +STARTCHAR uni712A +ENCODING 28970 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1202 +5488 +5904 +5202 +91FC +1004 +11FC +1100 +29FC +2404 +4404 +4028 +8010 +ENDCHAR +STARTCHAR uni712B +ENCODING 28971 +BBX 15 15 1 -1 +BITMAP +1088 +1088 +17FE +5488 +5888 +5060 +9020 +93FE +1222 +2A22 +2A52 +268A +4602 +4202 +8206 +ENDCHAR +STARTCHAR uni712C +ENCODING 28972 +BBX 14 16 0 -2 +BITMAP +1000 +11F8 +1108 +1508 +59F8 +5108 +5108 +91F8 +1080 +11FC +1254 +2894 +2524 +4244 +4094 +8108 +ENDCHAR +STARTCHAR uni712D +ENCODING 28973 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +2CA8 +4920 +1450 +2288 +7FFE +4002 +8004 +0FE0 +0820 +0820 +0822 +1022 +201E +C000 +ENDCHAR +STARTCHAR uni712E +ENCODING 28974 +BBX 15 15 1 -1 +BITMAP +20D0 +2710 +2410 +AC3E +B7C2 +A48A +A48C +A488 +2488 +5488 +5488 +4894 +8894 +88A2 +80C2 +ENDCHAR +STARTCHAR uni712F +ENCODING 28975 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +103E +1420 +55FC +5904 +91FC +9104 +1104 +11FC +2820 +2BFE +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni7130 +ENCODING 28976 +BBX 14 15 1 -1 +BITMAP +1040 +1040 +14FC +5484 +5908 +5230 +9000 +9040 +118C +2904 +2904 +25DC +4504 +4104 +81FC +ENDCHAR +STARTCHAR uni7131 +ENCODING 28977 +BBX 15 15 1 -1 +BITMAP +0100 +1104 +1108 +2110 +2280 +0440 +1830 +600C +0810 +2952 +4A52 +4894 +1428 +2244 +C082 +ENDCHAR +STARTCHAR uni7132 +ENCODING 28978 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FE +2120 +A920 +B23C +A244 +A664 +2294 +2348 +2248 +2230 +5220 +4A50 +4288 +8306 +ENDCHAR +STARTCHAR uni7133 +ENCODING 28979 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +1080 +15FE +5910 +5310 +55FC +9110 +1110 +11FC +1110 +2910 +2510 +45FE +4100 +8100 +ENDCHAR +STARTCHAR uni7134 +ENCODING 28980 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1080 +5504 +5BFE +5002 +91FC +1104 +11FC +1104 +29FC +2504 +4504 +4114 +8108 +ENDCHAR +STARTCHAR uni7135 +ENCODING 28981 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +168A +5A52 +53FE +5222 +9222 +12AA +12AA +12AA +2AFA +2602 +4202 +420A +8204 +ENDCHAR +STARTCHAR uni7136 +ENCODING 28982 +BBX 15 15 1 -1 +BITMAP +0820 +0828 +1E24 +1220 +33FE +4A20 +C450 +2850 +1088 +2104 +C202 +2000 +4444 +4222 +8222 +ENDCHAR +STARTCHAR uni7137 +ENCODING 28983 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +1124 +5524 +59FC +5124 +9144 +11FC +1090 +1110 +2BFE +2410 +4410 +4010 +8010 +ENDCHAR +STARTCHAR uni7138 +ENCODING 28984 +BBX 15 15 0 -2 +BITMAP +3E7C +2244 +2244 +3E7C +2244 +2244 +3E7C +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni7139 +ENCODING 28985 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +168A +5A52 +53FE +5242 +9222 +13FE +1282 +1282 +2A82 +26FA +4202 +420A +8204 +ENDCHAR +STARTCHAR uni713A +ENCODING 28986 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +11FC +5504 +59FC +5000 +9028 +11C8 +1088 +1088 +2BFE +2488 +4488 +4108 +8208 +ENDCHAR +STARTCHAR uni713B +ENCODING 28987 +BBX 14 16 0 -2 +BITMAP +11F8 +1108 +1108 +15F8 +5908 +5108 +51F8 +9000 +13FC +1204 +1204 +2BFC +2604 +4204 +43FC +8204 +ENDCHAR +STARTCHAR uni713C +ENCODING 28988 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +11FC +1420 +5524 +5504 +57FE +9504 +9104 +2800 +2BFE +2490 +4492 +4112 +860E +ENDCHAR +STARTCHAR uni713D +ENCODING 28989 +BBX 15 15 0 -2 +BITMAP +7CFC +4484 +44FC +7C84 +44FC +4484 +7C84 +0114 +0208 +0100 +1110 +22A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni713E +ENCODING 28990 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +1488 +5944 +5222 +51F8 +9008 +1050 +1020 +10A4 +2A82 +268A +428A +4478 +8000 +ENDCHAR +STARTCHAR uni713F +ENCODING 28991 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1620 +5AFC +5224 +5224 +93FE +1224 +1224 +12FC +2A20 +2650 +4450 +4488 +8906 +ENDCHAR +STARTCHAR uni7140 +ENCODING 28992 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1602 +5BFE +5210 +5292 +9292 +1292 +12FE +1210 +2A92 +2692 +4492 +44FE +8802 +ENDCHAR +STARTCHAR uni7141 +ENCODING 28993 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +54F8 +5888 +50F8 +9088 +1088 +13FE +1100 +2948 +2584 +4500 +41FE +8000 +ENDCHAR +STARTCHAR uni7142 +ENCODING 28994 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1088 +54F8 +5820 +51FC +9124 +1124 +11FC +1020 +2BFE +2420 +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni7143 +ENCODING 28995 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1050 +5488 +5B26 +51FC +9020 +1020 +13FE +1000 +2820 +25FC +4420 +4020 +83FE +ENDCHAR +STARTCHAR uni7144 +ENCODING 28996 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +1420 +5BFE +5020 +51FC +9124 +11FC +1124 +11FC +2820 +25FC +4420 +43FE +8000 +ENDCHAR +STARTCHAR uni7145 +ENCODING 28997 +BBX 15 16 0 -2 +BITMAP +1020 +11DC +1114 +1114 +5514 +59D4 +5126 +9100 +11DC +1114 +1114 +29D4 +2708 +4508 +4114 +8122 +ENDCHAR +STARTCHAR uni7146 +ENCODING 28998 +BBX 15 15 1 -1 +BITMAP +1000 +17BC +1484 +5484 +5C84 +57BC +9400 +947C +17C4 +2C44 +2C28 +2790 +4428 +4444 +8482 +ENDCHAR +STARTCHAR uni7147 +ENCODING 28999 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1202 +5222 +55FC +5820 +91FC +9124 +11FC +2924 +29FC +2420 +47FE +4020 +8020 +ENDCHAR +STARTCHAR uni7148 +ENCODING 29000 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2404 +2434 +ADC4 +B444 +A5F4 +A554 +2554 +25F4 +2444 +2454 +55F4 +4C94 +4806 +9002 +ENDCHAR +STARTCHAR uni7149 +ENCODING 29001 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +1420 +55FC +5924 +91AC +9174 +1124 +11FC +2870 +28A8 +2524 +4622 +8020 +ENDCHAR +STARTCHAR uni714A +ENCODING 29002 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +1202 +52FA +5400 +98F8 +9088 +1088 +10F8 +2888 +2888 +44F8 +4000 +83FE +ENDCHAR +STARTCHAR uni714B +ENCODING 29003 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +15FC +5904 +51FC +5020 +9120 +11FE +1220 +1020 +29FC +2420 +4020 +43FE +8000 +ENDCHAR +STARTCHAR uni714C +ENCODING 29004 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23F8 +2A08 +6BF8 +AA08 +A208 +A3F8 +2000 +37FC +5040 +4BF8 +4840 +8040 +8FFE +ENDCHAR +STARTCHAR uni714D +ENCODING 29005 +BBX 15 16 0 -2 +BITMAP +2088 +21C8 +2708 +2108 +A92A +B12A +A7AC +A148 +2308 +2388 +2554 +2514 +5914 +4924 +4124 +8142 +ENDCHAR +STARTCHAR uni714E +ENCODING 29006 +BBX 15 15 1 -1 +BITMAP +1010 +0820 +FFFE +0000 +3E08 +3248 +2A48 +3248 +2A48 +2208 +2618 +0000 +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni714F +ENCODING 29007 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1000 +15FC +5904 +5104 +51FC +9000 +13FE +1222 +1222 +2BFE +2622 +4222 +43FE +8202 +ENDCHAR +STARTCHAR uni7150 +ENCODING 29008 +BBX 15 15 1 -1 +BITMAP +1088 +1088 +13FE +1488 +5488 +5420 +91FC +9124 +1124 +1124 +2BFE +2820 +4450 +4088 +8306 +ENDCHAR +STARTCHAR uni7151 +ENCODING 29009 +BBX 15 15 1 -1 +BITMAP +0100 +0108 +3FF8 +0110 +FFFE +0220 +1FF0 +F010 +1FF0 +1010 +1FF0 +1108 +6290 +0C60 +F01E +ENDCHAR +STARTCHAR uni7152 +ENCODING 29010 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +15FC +5484 +5BFE +5000 +91FC +9104 +11FC +2810 +29FC +2490 +47FE +4010 +8010 +ENDCHAR +STARTCHAR uni7153 +ENCODING 29011 +BBX 15 15 1 -1 +BITMAP +1020 +1222 +1222 +1222 +57FE +5800 +97FE +9020 +1040 +13FE +2A92 +2A92 +4692 +4292 +8296 +ENDCHAR +STARTCHAR uni7154 +ENCODING 29012 +BBX 14 16 0 -2 +BITMAP +1020 +5220 +5420 +9020 +283C +4420 +8220 +1020 +10FC +5284 +5484 +9084 +2884 +2484 +42FC +8084 +ENDCHAR +STARTCHAR uni7155 +ENCODING 29013 +BBX 15 14 1 -1 +BITMAP +7F7C +4444 +5444 +5744 +517C +5140 +5740 +5442 +4442 +7F3E +0000 +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni7156 +ENCODING 29014 +BBX 15 15 1 -1 +BITMAP +2038 +27C8 +2244 +2C22 +6BFC +A840 +A7FE +A080 +20F8 +3108 +5710 +48A0 +4860 +8198 +8E06 +ENDCHAR +STARTCHAR uni7157 +ENCODING 29015 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +1040 +55FC +5954 +5154 +9154 +1154 +112C +1020 +2BFE +2450 +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni7158 +ENCODING 29016 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +2010 +27FE +AC10 +B410 +A5D0 +A412 +2412 +25D4 +2554 +2548 +55DA +4C2A +4846 +9082 +ENDCHAR +STARTCHAR uni7159 +ENCODING 29017 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1850 +5450 +55FC +5554 +9154 +91FC +1020 +2820 +29FC +2420 +4420 +4020 +83FE +ENDCHAR +STARTCHAR uni715A +ENCODING 29018 +BBX 15 15 0 -2 +BITMAP +7CFE +4480 +44FC +7C84 +44FC +4480 +7CFE +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni715B +ENCODING 29019 +BBX 15 15 0 -2 +BITMAP +3EF8 +2288 +3EF8 +2288 +3EF8 +2288 +3EF8 +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni715C +ENCODING 29020 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1504 +55FC +5904 +5104 +91FC +9020 +1020 +29FC +2888 +2488 +4490 +4050 +83FE +ENDCHAR +STARTCHAR uni715D +ENCODING 29021 +BBX 14 16 0 -2 +BITMAP +1000 +13FC +1224 +1624 +5BFC +5200 +52FC +9284 +1284 +12FC +1284 +2AFC +2684 +4284 +44FC +8884 +ENDCHAR +STARTCHAR uni715E +ENCODING 29022 +BBX 15 15 1 -1 +BITMAP +1020 +1E20 +223E +4424 +0844 +7EC4 +0228 +FF28 +0210 +0228 +7E44 +0082 +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni715F +ENCODING 29023 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1222 +13FE +5622 +5BFE +5000 +91FC +1104 +11FC +1104 +29FC +2504 +4504 +4114 +8108 +ENDCHAR +STARTCHAR uni7160 +ENCODING 29024 +BBX 15 15 1 -1 +BITMAP +1148 +1148 +17FE +5548 +5948 +5178 +9100 +91FC +1020 +2BFE +28A8 +24A8 +4524 +4222 +8020 +ENDCHAR +STARTCHAR uni7161 +ENCODING 29025 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +207C +2714 +A9FE +B114 +A27C +A210 +277C +2110 +21FE +2510 +5210 +4B00 +44FE +8800 +ENDCHAR +STARTCHAR uni7162 +ENCODING 29026 +BBX 15 15 1 -1 +BITMAP +1020 +52A4 +54A8 +2850 +4488 +FFFC +8004 +8004 +7FF0 +0410 +0410 +7FD0 +0412 +040A +0406 +ENDCHAR +STARTCHAR uni7163 +ENCODING 29027 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1048 +1430 +5BFE +5052 +5094 +9110 +1230 +1020 +13FE +2870 +24A8 +4124 +4622 +8020 +ENDCHAR +STARTCHAR uni7164 +ENCODING 29028 +BBX 15 15 1 -1 +BITMAP +1088 +1088 +13FE +5488 +54F8 +5488 +9088 +90F8 +1020 +2BFE +28A8 +44A8 +4124 +8222 +0020 +ENDCHAR +STARTCHAR uni7165 +ENCODING 29029 +BBX 15 15 1 -1 +BITMAP +2080 +20F0 +2110 +2A20 +6BFC +AAA4 +A2A4 +A2A4 +233C +3204 +5244 +4FFE +4890 +8108 +8606 +ENDCHAR +STARTCHAR uni7166 +ENCODING 29030 +BBX 15 15 1 -1 +BITMAP +0100 +7900 +4BFE +4A02 +4C02 +79F2 +4912 +4912 +49F2 +7802 +0002 +001C +2488 +4244 +8242 +ENDCHAR +STARTCHAR uni7167 +ENCODING 29031 +BBX 15 14 1 -1 +BITMAP +7BFC +4844 +4884 +4904 +7A18 +4800 +49FC +4904 +4904 +79FC +0000 +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni7168 +ENCODING 29032 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1524 +5524 +59FC +5124 +9124 +91FC +1000 +2BFE +2924 +2528 +4510 +41C8 +8706 +ENDCHAR +STARTCHAR uni7169 +ENCODING 29033 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1020 +52FC +5284 +54FC +9084 +9084 +10FC +2884 +2884 +44FC +4220 +80CC +0302 +ENDCHAR +STARTCHAR uni716A +ENCODING 29034 +BBX 15 16 0 -2 +BITMAP +1108 +1088 +1090 +17FE +5890 +5090 +53FC +9294 +1294 +130C +1204 +2BFC +2604 +4204 +43FC +8204 +ENDCHAR +STARTCHAR uni716B +ENCODING 29035 +BBX 15 16 0 -2 +BITMAP +2108 +2090 +2000 +2BFE +B080 +A184 +A244 +A4A8 +2130 +2270 +24A8 +2128 +5224 +4C22 +48A0 +8040 +ENDCHAR +STARTCHAR uni716C +ENCODING 29036 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +29F8 +6908 +A9F8 +A000 +A7FE +2100 +33FE +5452 +4892 +4B22 +8042 +819C +ENDCHAR +STARTCHAR uni716D +ENCODING 29037 +BBX 14 16 0 -2 +BITMAP +2484 +4904 +24A4 +0024 +7FA4 +0824 +1F24 +6124 +1224 +0C04 +3014 +C008 +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni716E +ENCODING 29038 +BBX 15 15 1 -1 +BITMAP +0200 +0210 +1FF0 +0220 +0240 +7FFC +0200 +1FF0 +F010 +1FF0 +1010 +1FF0 +2008 +4444 +8222 +ENDCHAR +STARTCHAR uni716F +ENCODING 29039 +BBX 15 16 0 -2 +BITMAP +1110 +1112 +11D4 +1118 +5552 +5992 +512E +9040 +11FC +1104 +1104 +29FC +2504 +4504 +41FC +8104 +ENDCHAR +STARTCHAR uni7170 +ENCODING 29040 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1088 +1488 +5888 +5088 +50F8 +9088 +1000 +13DE +1252 +2A52 +2652 +4252 +43DE +8252 +ENDCHAR +STARTCHAR uni7171 +ENCODING 29041 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1504 +59E4 +5124 +5124 +93FE +1202 +12FA +128A +2A8A +26FA +4202 +420A +8204 +ENDCHAR +STARTCHAR uni7172 +ENCODING 29042 +BBX 15 16 0 -2 +BITMAP +0800 +0BF8 +1208 +33F8 +5040 +97FC +1150 +1248 +1444 +1040 +0100 +1110 +22A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7173 +ENCODING 29043 +BBX 14 16 0 -2 +BITMAP +1100 +113C +1124 +17A4 +5924 +513C +5124 +93A4 +12A4 +12BC +12A4 +2AA4 +27A4 +4444 +4054 +8088 +ENDCHAR +STARTCHAR uni7174 +ENCODING 29044 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +1508 +59F8 +5108 +5108 +91F8 +1000 +13FC +1294 +2A94 +2694 +4294 +47FE +8000 +ENDCHAR +STARTCHAR uni7175 +ENCODING 29045 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +1420 +5820 +53FE +528A +9252 +12FA +1222 +1222 +2AFA +2622 +4222 +422A +8204 +ENDCHAR +STARTCHAR uni7176 +ENCODING 29046 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +1504 +59FC +5104 +5104 +91FC +1000 +13FE +1020 +2920 +253C +4120 +42A0 +847E +ENDCHAR +STARTCHAR uni7177 +ENCODING 29047 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FE +2000 +ABF8 +B208 +A3F8 +A000 +27FE +2402 +29F4 +2110 +5110 +4A12 +4412 +880E +ENDCHAR +STARTCHAR uni7178 +ENCODING 29048 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FE +1102 +5502 +59FE +5100 +9100 +11FE +11AA +12AA +2AFE +24AA +44AA +40A2 +8086 +ENDCHAR +STARTCHAR uni7179 +ENCODING 29049 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1488 +59FC +5088 +53FE +9020 +11FC +1124 +11FC +2924 +27FE +4104 +4114 +8108 +ENDCHAR +STARTCHAR uni717A +ENCODING 29050 +BBX 15 16 0 -2 +BITMAP +2000 +24F8 +2288 +2288 +A8F8 +B088 +AE88 +A2F8 +22A2 +2294 +2288 +22A8 +52C4 +4A84 +4500 +88FE +ENDCHAR +STARTCHAR uni717B +ENCODING 29051 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +13FE +1620 +5AFC +5224 +53FE +9224 +12FC +1220 +12FC +2A84 +2684 +4484 +44FC +8884 +ENDCHAR +STARTCHAR uni717C +ENCODING 29052 +BBX 14 16 0 -2 +BITMAP +2080 +2080 +21FC +2A44 +B154 +A1F4 +A084 +A128 +2290 +21FC +2244 +2554 +51F4 +4884 +4928 +8210 +ENDCHAR +STARTCHAR uni717D +ENCODING 29053 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +2000 +A7FC +AC04 +AFFC +B400 +27DE +2442 +254A +2652 +58C6 +494A +5252 +80C6 +ENDCHAR +STARTCHAR uni717E +ENCODING 29054 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +1524 +59FC +5124 +5154 +918C +1104 +11FC +1040 +2820 +24A4 +428A +428A +8478 +ENDCHAR +STARTCHAR uni717F +ENCODING 29055 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +13FE +1020 +55FC +5924 +51FC +9124 +11FC +1124 +1008 +2BFE +2488 +4448 +4048 +8018 +ENDCHAR +STARTCHAR uni7180 +ENCODING 29056 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +2BF8 +AA08 +ABF8 +A444 +A244 +2248 +2FFE +2120 +5120 +5220 +4422 +881E +ENDCHAR +STARTCHAR uni7181 +ENCODING 29057 +BBX 15 16 0 -2 +BITMAP +1040 +11FC +1044 +1094 +5508 +5BDE +514A +914A +1294 +11FC +1104 +29FC +2504 +45FC +4104 +810C +ENDCHAR +STARTCHAR uni7182 +ENCODING 29058 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +21FC +2A00 +B5F8 +A000 +A3F8 +A088 +22A8 +21C8 +27F8 +208A +51CA +4EAA +4886 +8082 +ENDCHAR +STARTCHAR uni7183 +ENCODING 29059 +BBX 15 16 0 -2 +BITMAP +0040 +7EFC +1544 +0838 +FE44 +1AA2 +2CFC +4844 +A894 +1108 +0100 +1110 +22A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7184 +ENCODING 29060 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +21F8 +2908 +69F8 +A908 +A1F8 +A108 +2108 +31F8 +5040 +48A4 +4AA2 +828A +8478 +ENDCHAR +STARTCHAR uni7185 +ENCODING 29061 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1548 +5548 +5948 +51A8 +9118 +91F8 +1000 +2BFC +2AA4 +26A4 +42A4 +42A4 +87FE +ENDCHAR +STARTCHAR uni7186 +ENCODING 29062 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +1420 +5820 +53FE +5080 +9104 +13FE +1002 +13FC +2A94 +2694 +4294 +47FE +8000 +ENDCHAR +STARTCHAR uni7187 +ENCODING 29063 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +15FC +5400 +58F8 +5088 +90F8 +9000 +13FE +2A02 +2AFA +268A +42FA +4202 +8206 +ENDCHAR +STARTCHAR uni7188 +ENCODING 29064 +BBX 15 14 1 -1 +BITMAP +5F7C +5444 +5444 +5F44 +517C +5140 +5F40 +5442 +9442 +9F3E +0000 +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni7189 +ENCODING 29065 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +1084 +54FC +5800 +51FE +9102 +11FE +1102 +11FE +2902 +25FE +4448 +4084 +8102 +ENDCHAR +STARTCHAR uni718A +ENCODING 29066 +BBX 15 15 1 -1 +BITMAP +2080 +248C +4CF0 +F280 +0182 +7E7E +4280 +7E8C +42F0 +7E82 +4282 +467E +2000 +4444 +8222 +ENDCHAR +STARTCHAR uni718B +ENCODING 29067 +BBX 13 16 1 -2 +BITMAP +2100 +4930 +FDC0 +0108 +FCF8 +8400 +FD30 +85C0 +FD08 +8508 +8CF8 +0200 +2220 +4540 +18C0 +E038 +ENDCHAR +STARTCHAR uni718C +ENCODING 29068 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +17DE +5A52 +53DE +5202 +9222 +1222 +1222 +1252 +2A4A +268A +4202 +420A +8204 +ENDCHAR +STARTCHAR uni718D +ENCODING 29069 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +1102 +5400 +58FC +5084 +9084 +10FC +1000 +11FE +2902 +2502 +4502 +41FE +8102 +ENDCHAR +STARTCHAR uni718E +ENCODING 29070 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13C0 +1004 +5644 +5928 +51FC +9220 +1020 +13FE +1020 +2924 +2524 +4524 +41FC +8004 +ENDCHAR +STARTCHAR uni718F +ENCODING 29071 +BBX 15 15 1 -1 +BITMAP +0070 +1F80 +0100 +FFFE +0100 +1FF0 +1110 +1550 +1390 +1FF0 +0100 +FFFE +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni7190 +ENCODING 29072 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +1000 +55FC +5904 +51FC +9104 +11FC +1040 +1020 +2BFE +2400 +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni7191 +ENCODING 29073 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +1000 +15FE +5850 +51FC +5054 +93FE +1054 +11FC +1050 +28D8 +2554 +4252 +4050 +8050 +ENDCHAR +STARTCHAR uni7192 +ENCODING 29074 +BBX 15 15 1 -1 +BITMAP +1020 +52A4 +54A8 +2850 +4488 +0000 +7FFC +4004 +4104 +1110 +2110 +42A0 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7193 +ENCODING 29075 +BBX 15 16 0 -2 +BITMAP +2080 +2100 +23F8 +2208 +AA08 +B3F8 +A200 +A3FE +2200 +23FC +2004 +2554 +5554 +4804 +4028 +8010 +ENDCHAR +STARTCHAR uni7194 +ENCODING 29076 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +2A02 +6A8A +7104 +A222 +A050 +2088 +2306 +51FC +5104 +4904 +8904 +81FC +ENDCHAR +STARTCHAR uni7195 +ENCODING 29077 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2020 +2BFE +6800 +A9FC +A104 +A1FC +2104 +31FC +5104 +49FC +4840 +8088 +8306 +ENDCHAR +STARTCHAR uni7196 +ENCODING 29078 +BBX 15 15 1 -1 +BITMAP +101C +11E8 +1144 +1622 +5422 +5440 +9080 +931C +1204 +1204 +2B9C +2A04 +4604 +4204 +83FC +ENDCHAR +STARTCHAR uni7197 +ENCODING 29079 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +20A0 +2990 +B248 +A7FE +AA08 +A3F8 +2208 +23F8 +2200 +23F8 +5508 +4D08 +49F8 +8108 +ENDCHAR +STARTCHAR uni7198 +ENCODING 29080 +BBX 15 16 0 -2 +BITMAP +1040 +13BE +1212 +1692 +5A52 +52AA +5324 +9040 +13FE +1222 +1222 +2BFE +2622 +4222 +43FE +8202 +ENDCHAR +STARTCHAR uni7199 +ENCODING 29081 +BBX 15 14 1 -1 +BITMAP +7F7C +4444 +4444 +5F44 +517C +5140 +5F40 +4442 +4442 +7F3E +0000 +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni719A +ENCODING 29082 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +15FC +5924 +51FC +50A8 +90A8 +13FE +10A8 +10A8 +29FC +2420 +43FE +4020 +8020 +ENDCHAR +STARTCHAR uni719B +ENCODING 29083 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2090 +27FE +AC92 +B492 +A7FE +A000 +23FC +2000 +37FE +2820 +4128 +4626 +88E0 +ENDCHAR +STARTCHAR uni719C +ENCODING 29084 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +1524 +597C +518C +5154 +9124 +1154 +11FC +1020 +2810 +2554 +4542 +414A +8238 +ENDCHAR +STARTCHAR uni719D +ENCODING 29085 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1250 +5650 +5BFE +5252 +9252 +13FE +1200 +1292 +2AD4 +2698 +4492 +44D2 +888E +ENDCHAR +STARTCHAR uni719E +ENCODING 29086 +BBX 15 16 0 -2 +BITMAP +1000 +13DC +1294 +17D4 +5A54 +53C8 +5288 +9294 +13E2 +1000 +1020 +29FC +2420 +4020 +43FE +8000 +ENDCHAR +STARTCHAR uni719F +ENCODING 29087 +BBX 15 15 1 -1 +BITMAP +0820 +FF20 +0020 +7EF8 +4228 +7E28 +00A8 +7E68 +0428 +FF4A +088A +1806 +4448 +4224 +8222 +ENDCHAR +STARTCHAR uni71A0 +ENCODING 29088 +BBX 15 15 1 -1 +BITMAP +2000 +27BE +228A +2C92 +A986 +AA8A +AC92 +A040 +2080 +23FC +3204 +2BFC +4A04 +4204 +83FC +ENDCHAR +STARTCHAR uni71A1 +ENCODING 29089 +BBX 15 16 0 -2 +BITMAP +2040 +23F8 +2248 +2FFE +AA48 +B3F8 +A040 +A3F8 +2248 +23F8 +2080 +2FFE +5110 +48E0 +4318 +8C04 +ENDCHAR +STARTCHAR uni71A2 +ENCODING 29090 +BBX 15 15 1 -1 +BITMAP +2420 +223C +2144 +2CA8 +AA10 +A928 +A0C6 +A710 +217C +2110 +317C +2910 +49FE +4290 +847E +ENDCHAR +STARTCHAR uni71A3 +ENCODING 29091 +BBX 15 16 0 -2 +BITMAP +1020 +1222 +13FE +1090 +5488 +59FE +5310 +9510 +11FE +1110 +1110 +29FE +2510 +4510 +41FE +8100 +ENDCHAR +STARTCHAR uni71A4 +ENCODING 29092 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1042 +114A +54C6 +594A +5252 +9002 +1040 +1020 +11FC +2800 +2508 +4488 +4090 +83FE +ENDCHAR +STARTCHAR uni71A5 +ENCODING 29093 +BBX 15 16 0 -2 +BITMAP +20FE +2404 +2228 +2210 +A8FE +B092 +AE92 +A2FE +2292 +22FE +2292 +2292 +5296 +4D00 +48FE +8000 +ENDCHAR +STARTCHAR uni71A6 +ENCODING 29094 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1122 +152A +5A32 +5060 +5190 +97FE +1120 +11FC +1120 +29FC +2520 +4520 +41FE +8100 +ENDCHAR +STARTCHAR uni71A7 +ENCODING 29095 +BBX 15 16 0 -2 +BITMAP +1110 +2110 +CAA8 +1444 +3240 +D27C +1540 +14FE +0800 +0100 +1110 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni71A8 +ENCODING 29096 +BBX 15 14 1 -1 +BITMAP +7F08 +4108 +7F7E +4008 +5F48 +4048 +5F28 +8408 +9538 +2C80 +1104 +2298 +0C60 +F01E +ENDCHAR +STARTCHAR uni71A9 +ENCODING 29097 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FC +1604 +5BFC +5200 +52F8 +9288 +12F8 +1200 +13FC +2B24 +25FC +4502 +4902 +80FE +ENDCHAR +STARTCHAR uni71AA +ENCODING 29098 +BBX 15 16 0 -2 +BITMAP +2010 +2190 +261E +2222 +AA54 +B208 +AF90 +A264 +2208 +271E +2AA2 +2242 +5214 +4A08 +4210 +8260 +ENDCHAR +STARTCHAR uni71AB +ENCODING 29099 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1200 +5648 +5A48 +53FE +9248 +1248 +1248 +1278 +2A00 +2554 +452A +4A2A +9000 +ENDCHAR +STARTCHAR uni71AC +ENCODING 29100 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +7C40 +10FC +FE88 +1188 +FC50 +2050 +3C20 +4450 +4488 +9D04 +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni71AD +ENCODING 29101 +BBX 15 16 0 -2 +BITMAP +1010 +FEFE +1010 +7C7C +1010 +FEFE +1010 +3FF8 +0008 +1FF8 +0008 +3FF8 +1110 +22A0 +0C60 +701C +ENDCHAR +STARTCHAR uni71AE +ENCODING 29102 +BBX 15 15 1 -1 +BITMAP +2000 +27BE +218A +2296 +ADAA +AA92 +B440 +A1B0 +2E0E +2040 +3390 +2864 +4B88 +4030 +83C0 +ENDCHAR +STARTCHAR uni71AF +ENCODING 29103 +BBX 15 15 1 -1 +BITMAP +2208 +2FFE +2208 +2BF8 +A840 +AFFC +A444 +A7FC +2040 +27FC +2040 +2FFE +50A0 +5110 +860E +ENDCHAR +STARTCHAR uni71B0 +ENCODING 29104 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1200 +167C +5A44 +5244 +527C +9200 +12EE +12AA +12AA +2AAA +26EE +4200 +43FE +8000 +ENDCHAR +STARTCHAR uni71B1 +ENCODING 29105 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +7E20 +10F8 +FF28 +4428 +9728 +7CA8 +1048 +1EAA +E126 +0000 +2888 +4444 +8442 +ENDCHAR +STARTCHAR uni71B2 +ENCODING 29106 +BBX 15 16 0 -2 +BITMAP +4000 +44FE +7810 +4220 +42FC +3E84 +0084 +10FC +5284 +52FC +5484 +9084 +28FC +2448 +4484 +8102 +ENDCHAR +STARTCHAR uni71B3 +ENCODING 29107 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1104 +11FC +5504 +55FC +9400 +93FE +1292 +13FE +2800 +2BFC +4108 +40F0 +879E +ENDCHAR +STARTCHAR uni71B4 +ENCODING 29108 +BBX 15 16 0 -2 +BITMAP +2040 +2444 +2444 +27FC +A800 +B7FC +A404 +A7FC +2404 +27FC +2000 +2424 +57A8 +4C32 +45A2 +861E +ENDCHAR +STARTCHAR uni71B5 +ENCODING 29109 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1488 +5850 +53FE +5252 +928A +1306 +12FA +128A +2A8A +26FA +4202 +420A +8204 +ENDCHAR +STARTCHAR uni71B6 +ENCODING 29110 +BBX 15 16 0 -2 +BITMAP +2000 +23F8 +2208 +23F8 +AA08 +B3F8 +A000 +AFFE +2480 +27BC +2494 +2794 +54D4 +4F88 +4094 +80A2 +ENDCHAR +STARTCHAR uni71B7 +ENCODING 29111 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +1000 +13FE +5622 +5AAA +5272 +9222 +13FE +1000 +11FC +2904 +25FC +4504 +41FC +8104 +ENDCHAR +STARTCHAR uni71B8 +ENCODING 29112 +BBX 15 16 0 -2 +BITMAP +2000 +27BC +2108 +2528 +AFBC +B318 +A5AA +A946 +2000 +23F8 +2208 +2208 +53F8 +4A08 +4208 +83F8 +ENDCHAR +STARTCHAR uni71B9 +ENCODING 29113 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +1FF0 +0000 +1FF0 +1010 +1FF0 +0440 +FFFE +1010 +1FF8 +2444 +C222 +ENDCHAR +STARTCHAR uni71BA +ENCODING 29114 +BBX 15 15 1 -1 +BITMAP +1020 +13FE +1420 +55FC +5800 +51FC +9104 +91FC +1088 +2BFE +2800 +25FC +4504 +4104 +81FC +ENDCHAR +STARTCHAR uni71BB +ENCODING 29115 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2118 +2EE6 +B000 +A3F8 +A208 +A3F8 +2000 +27BC +2084 +24A4 +5294 +4CA4 +4A94 +8108 +ENDCHAR +STARTCHAR uni71BC +ENCODING 29116 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2444 +27FC +AC44 +B7FC +A110 +A110 +27FC +2110 +2110 +2FFE +5000 +4910 +4208 +8404 +ENDCHAR +STARTCHAR uni71BD +ENCODING 29117 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1024 +17FE +5824 +51FC +5020 +92AA +13AE +1222 +13FE +2A22 +27AE +42AA +42AA +8422 +ENDCHAR +STARTCHAR uni71BE +ENCODING 29118 +BBX 15 15 1 -1 +BITMAP +2090 +2094 +23D2 +2812 +6A50 +A950 +A7FE +A010 +23D4 +3254 +5248 +4BCA +4A4A +8254 +83E4 +ENDCHAR +STARTCHAR uni71BF +ENCODING 29119 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +11FC +1088 +5488 +5BFE +5020 +91FC +1124 +11FC +1124 +29FC +2400 +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni71C0 +ENCODING 29120 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +1252 +57DE +5800 +51FC +9124 +11FC +1124 +11FC +2820 +27FE +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni71C1 +ENCODING 29121 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2FFC +6910 +B7FC +A248 +A248 +AFFE +2248 +3248 +57FC +4840 +4FFE +8040 +8040 +ENDCHAR +STARTCHAR uni71C2 +ENCODING 29122 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +13FE +5652 +5BFE +5000 +91FC +1104 +11FC +1104 +29FC +2420 +47FE +4020 +8020 +ENDCHAR +STARTCHAR uni71C3 +ENCODING 29123 +BBX 15 15 1 -1 +BITMAP +2410 +2414 +3792 +AC90 +AAFE +A910 +B528 +2228 +2444 +2882 +2000 +5524 +4524 +4892 +9092 +ENDCHAR +STARTCHAR uni71C4 +ENCODING 29124 +BBX 15 15 1 -1 +BITMAP +2020 +2122 +3D24 +2654 +4450 +9888 +0306 +2020 +4D22 +4522 +4624 +6E50 +4450 +4488 +7F06 +ENDCHAR +STARTCHAR uni71C5 +ENCODING 29125 +BBX 15 16 0 -2 +BITMAP +0810 +0852 +7E54 +0890 +0828 +FF44 +2482 +4210 +8952 +0854 +7E98 +0810 +0828 +0F28 +F844 +4082 +ENDCHAR +STARTCHAR uni71C6 +ENCODING 29126 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +1040 +17FE +5888 +5104 +52FA +9488 +10F8 +1000 +13FE +2A02 +26FA +428A +42FA +8206 +ENDCHAR +STARTCHAR uni71C7 +ENCODING 29127 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +13FE +1050 +55FC +5954 +518C +9174 +1104 +11FC +1008 +2BFE +2508 +4488 +40A8 +8010 +ENDCHAR +STARTCHAR uni71C8 +ENCODING 29128 +BBX 15 15 1 -1 +BITMAP +2000 +22E8 +2152 +2894 +A908 +AAF4 +B402 +A1F8 +2108 +2108 +51F8 +5088 +4890 +8820 +87FE +ENDCHAR +STARTCHAR uni71C9 +ENCODING 29129 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2790 +283E +6BA4 +AAE4 +A3A4 +A014 +2394 +3114 +51C8 +4F08 +4914 +8124 +8342 +ENDCHAR +STARTCHAR uni71CA +ENCODING 29130 +BBX 15 16 0 -2 +BITMAP +1108 +2110 +02E0 +0C18 +7004 +0010 +5252 +9494 +2828 +C4C4 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni71CB +ENCODING 29131 +BBX 15 15 1 -1 +BITMAP +2110 +2120 +2BFE +2E20 +ABFC +B220 +A220 +A3FC +2220 +3220 +2BFE +4800 +4294 +8492 +0402 +ENDCHAR +STARTCHAR uni71CC +ENCODING 29132 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1020 +1488 +5BFE +5088 +51FC +9104 +11FC +1104 +11FC +2904 +25FC +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni71CD +ENCODING 29133 +BBX 15 16 0 -2 +BITMAP +2240 +2242 +225C +27F0 +AA50 +B3D0 +A25E +A3D4 +2254 +2254 +27F4 +2014 +5294 +4C64 +4824 +8044 +ENDCHAR +STARTCHAR uni71CE +ENCODING 29134 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +27FC +28A0 +6AA8 +A910 +A3F8 +A514 +21F0 +3110 +51F0 +4840 +4950 +864C +80C0 +ENDCHAR +STARTCHAR uni71CF +ENCODING 29135 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1048 +1430 +5BFE +5052 +5094 +9350 +1020 +13FE +1252 +2A8A +2776 +4252 +4272 +8206 +ENDCHAR +STARTCHAR uni71D0 +ENCODING 29136 +BBX 15 15 1 -1 +BITMAP +2224 +2124 +2928 +ABFE +A8B0 +B128 +A224 +2422 +2388 +22BC +22A8 +55A8 +497E +8208 +8408 +ENDCHAR +STARTCHAR uni71D1 +ENCODING 29137 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1088 +1450 +5BFE +5000 +51FC +9124 +11FC +1124 +11FC +2820 +25FC +4420 +43FE +8000 +ENDCHAR +STARTCHAR uni71D2 +ENCODING 29138 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23F8 +2840 +6FFC +A908 +A7BE +A108 +2188 +363E +5000 +4FFE +4910 +8212 +8C0E +ENDCHAR +STARTCHAR uni71D3 +ENCODING 29139 +BBX 15 15 1 -1 +BITMAP +2008 +2288 +F93E +2288 +2008 +729C +692C +A28A +2008 +0100 +1104 +6298 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni71D4 +ENCODING 29140 +BBX 15 15 1 -1 +BITMAP +2038 +27C0 +2248 +2A48 +6950 +AFFE +A150 +A248 +2C46 +33F8 +5248 +4BF8 +4A48 +8248 +83F8 +ENDCHAR +STARTCHAR uni71D5 +ENCODING 29141 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +0FC0 +2012 +E79C +2490 +2492 +6792 +A01E +0000 +2888 +4444 +8442 +ENDCHAR +STARTCHAR uni71D6 +ENCODING 29142 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +1004 +13FC +5404 +5BFC +5000 +93BC +1124 +17BC +1008 +2BFE +2508 +4488 +40A8 +8010 +ENDCHAR +STARTCHAR uni71D7 +ENCODING 29143 +BBX 15 15 1 -1 +BITMAP +2000 +27BE +24A2 +2FBE +74A2 +A7BE +A402 +A4F2 +2492 +34F2 +5492 +4CF2 +4C92 +8492 +8536 +ENDCHAR +STARTCHAR uni71D8 +ENCODING 29144 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1252 +17DE +5A52 +53DE +5242 +9222 +12FA +1212 +1252 +2A22 +2652 +4282 +420A +8204 +ENDCHAR +STARTCHAR uni71D9 +ENCODING 29145 +BBX 15 15 1 -1 +BITMAP +43F0 +2210 +13F0 +8210 +43F0 +2000 +0FFE +2100 +23FC +44A4 +814C +1100 +6298 +0C60 +F01E +ENDCHAR +STARTCHAR uni71DA +ENCODING 29146 +BBX 15 16 0 -2 +BITMAP +1010 +5252 +5454 +9090 +2828 +4444 +8282 +1010 +1052 +5254 +5498 +9010 +2828 +2428 +4244 +8082 +ENDCHAR +STARTCHAR uni71DB +ENCODING 29147 +BBX 15 15 0 -2 +BITMAP +FEFE +1290 +7EFC +4284 +7EFC +1290 +FEFE +0100 +1110 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni71DC +ENCODING 29148 +BBX 15 15 1 -1 +BITMAP +2000 +27BE +24A2 +2FBE +B4A2 +A7BE +A402 +A422 +2412 +2556 +3542 +2E42 +4C4A +443A +8406 +ENDCHAR +STARTCHAR uni71DD +ENCODING 29149 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +15FC +5904 +51FC +5020 +93FE +1000 +11FC +1104 +29FC +2420 +4524 +4222 +8060 +ENDCHAR +STARTCHAR uni71DE +ENCODING 29150 +BBX 15 16 0 -2 +BITMAP +1420 +1220 +3F3E +2442 +6494 +BF10 +2410 +3F10 +2428 +2428 +3F44 +2082 +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni71DF +ENCODING 29151 +BBX 15 15 1 -1 +BITMAP +1020 +52A4 +54A8 +2850 +4488 +FFFE +8002 +9FF2 +1010 +1FF0 +0200 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni71E0 +ENCODING 29152 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23FC +2A34 +6BC4 +AB4C +A2D4 +A3FC +22D4 +334C +5040 +4FFC +48A0 +8318 +8C06 +ENDCHAR +STARTCHAR uni71E1 +ENCODING 29153 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1252 +13FE +5420 +59FC +5020 +93FE +1088 +1050 +11FC +2820 +27FE +4420 +4020 +8020 +ENDCHAR +STARTCHAR uni71E2 +ENCODING 29154 +BBX 15 16 0 -2 +BITMAP +0A80 +3138 +2288 +3838 +2288 +3938 +2288 +7FFE +4102 +9114 +1110 +22A0 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni71E3 +ENCODING 29155 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1000 +11FC +5504 +5974 +5154 +9174 +1104 +11FC +1008 +28F0 +2420 +47FE +40A8 +8326 +ENDCHAR +STARTCHAR uni71E4 +ENCODING 29156 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +1488 +59FC +5124 +51FC +9124 +11FC +1020 +13FE +2A22 +262A +42FA +420A +8206 +ENDCHAR +STARTCHAR uni71E5 +ENCODING 29157 +BBX 15 15 1 -1 +BITMAP +2000 +21F0 +2110 +69F0 +6800 +AFBC +A4A4 +A4A4 +27BC +2040 +37FE +4950 +4A48 +8C46 +0040 +ENDCHAR +STARTCHAR uni71E6 +ENCODING 29158 +BBX 15 15 1 -1 +BITMAP +2200 +23BC +2A04 +B7A8 +A490 +AAA8 +2144 +2600 +3A48 +2150 +5FFE +5150 +4A48 +8446 +8040 +ENDCHAR +STARTCHAR uni71E7 +ENCODING 29159 +BBX 15 15 1 -1 +BITMAP +2418 +2248 +2044 +2082 +697C +AC20 +B2D2 +A014 +2E28 +32C8 +5218 +4A2C +4ACA +8510 +88FE +ENDCHAR +STARTCHAR uni71E8 +ENCODING 29160 +BBX 15 16 0 -2 +BITMAP +2208 +2110 +2FFE +2840 +B7FC +A040 +AFFE +A054 +2792 +2110 +2FFE +2110 +51D4 +4F0A +4916 +8322 +ENDCHAR +STARTCHAR uni71E9 +ENCODING 29161 +BBX 15 16 0 -2 +BITMAP +2108 +2208 +27C8 +2450 +AFDE +B464 +A7D4 +A214 +2114 +27D4 +2214 +23C8 +5248 +4C54 +4554 +88A2 +ENDCHAR +STARTCHAR uni71EA +ENCODING 29162 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +1500 +5BFC +5554 +50D4 +9324 +1054 +1094 +1348 +2820 +24A4 +428A +428A +8478 +ENDCHAR +STARTCHAR uni71EB +ENCODING 29163 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1288 +1250 +57FE +5A50 +52FC +9254 +13FE +1254 +12FC +2A50 +26D8 +4554 +4652 +8850 +ENDCHAR +STARTCHAR uni71EC +ENCODING 29164 +BBX 15 15 1 -1 +BITMAP +2200 +24DC +2454 +2454 +6ED4 +B466 +A440 +A7FC +2114 +3114 +57D4 +4908 +4908 +81D4 +8722 +ENDCHAR +STARTCHAR uni71ED +ENCODING 29165 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1AA4 +16A4 +57FC +5500 +91FE +9242 +17FA +2A4A +2BFA +244A +4076 +4782 +800C +ENDCHAR +STARTCHAR uni71EE +ENCODING 29166 +BBX 15 15 1 -1 +BITMAP +2008 +2388 +A00A +AFEA +A82A +2BA8 +2008 +5394 +5294 +8BA2 +0000 +7FF8 +0820 +07C0 +F83E +ENDCHAR +STARTCHAR uni71EF +ENCODING 29167 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +13FE +5622 +59AC +5020 +91AC +1050 +10C8 +1326 +28F8 +2408 +44D0 +4020 +8010 +ENDCHAR +STARTCHAR uni71F0 +ENCODING 29168 +BBX 15 16 0 -2 +BITMAP +203C +23C0 +2044 +2224 +A908 +B7FE +A442 +A2A4 +228A +247A +2080 +20F8 +5108 +4A90 +4060 +879E +ENDCHAR +STARTCHAR uni71F1 +ENCODING 29169 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +1488 +5850 +53FE +5000 +91FC +1104 +11FC +1104 +29FC +2420 +4294 +428A +847A +ENDCHAR +STARTCHAR uni71F2 +ENCODING 29170 +BBX 15 16 0 -2 +BITMAP +1040 +13FC +1044 +1094 +5508 +5BDE +514A +92D6 +11FC +1104 +11FC +2904 +25FC +4504 +41FC +8088 +ENDCHAR +STARTCHAR uni71F3 +ENCODING 29171 +BBX 15 16 0 -2 +BITMAP +2000 +27BE +2492 +2492 +ACAA +B7A4 +A4C0 +A4BE +24A2 +24A2 +27BE +24A2 +5000 +4AA4 +4252 +8452 +ENDCHAR +STARTCHAR uni71F4 +ENCODING 29172 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2318 +2DF6 +B000 +A7FC +A554 +A4E4 +27FC +2000 +23F8 +2208 +53F8 +4A08 +4BF8 +8208 +ENDCHAR +STARTCHAR uni71F5 +ENCODING 29173 +BBX 15 15 1 -1 +BITMAP +2410 +2210 +207C +2010 +68FE +AC44 +B228 +A1FE +2E10 +327C +5210 +4AFE +4A10 +8510 +88FE +ENDCHAR +STARTCHAR uni71F6 +ENCODING 29174 +BBX 15 16 0 -2 +BITMAP +1090 +13FC +1294 +17FC +5A94 +53FC +5000 +93FC +1200 +12F8 +1200 +2BFE +2520 +4514 +4548 +8986 +ENDCHAR +STARTCHAR uni71F7 +ENCODING 29175 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1000 +15FC +5904 +5174 +5154 +9174 +1104 +11FC +1000 +29FC +2400 +43FE +4124 +8262 +ENDCHAR +STARTCHAR uni71F8 +ENCODING 29176 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +13FE +5622 +59AC +5020 +91AC +1000 +13FE +1020 +29FC +2554 +4554 +4154 +810C +ENDCHAR +STARTCHAR uni71F9 +ENCODING 29177 +BBX 15 14 1 -1 +BITMAP +FEFE +1010 +2222 +D4D4 +2828 +DCDC +2A2A +C8C8 +3938 +1100 +228C +2440 +1830 +E00E +ENDCHAR +STARTCHAR uni71FA +ENCODING 29178 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1000 +14F8 +5888 +50F8 +5000 +93FE +1202 +1272 +1252 +2A76 +2420 +43FE +40A8 +8326 +ENDCHAR +STARTCHAR uni71FB +ENCODING 29179 +BBX 15 15 1 -1 +BITMAP +2038 +23C0 +2040 +2FFE +6840 +ABF8 +A248 +A358 +22E8 +33F8 +5040 +4FFC +4528 +8894 +9092 +ENDCHAR +STARTCHAR uni71FC +ENCODING 29180 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23F8 +2848 +6FFE +A848 +A3F8 +A040 +27FC +3294 +544A +4BFC +4AA4 +82A4 +87FE +ENDCHAR +STARTCHAR uni71FD +ENCODING 29181 +BBX 15 16 0 -2 +BITMAP +2040 +27FC +2040 +23FC +A800 +B7FE +A002 +A3F8 +2040 +27FE +2000 +27FE +5008 +4FFE +44A8 +8798 +ENDCHAR +STARTCHAR uni71FE +ENCODING 29182 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFC +0100 +3FF8 +0008 +1FE8 +0100 +FFFE +0008 +7BFE +4888 +7858 +4884 +8442 +ENDCHAR +STARTCHAR uni71FF +ENCODING 29183 +BBX 15 15 1 -1 +BITMAP +2000 +23BC +2084 +2BBC +6884 +ABBC +A110 +A220 +27FE +3A20 +53FC +4A20 +4BFC +8220 +83FE +ENDCHAR +STARTCHAR uni7200 +ENCODING 29184 +BBX 15 15 1 -1 +BITMAP +2210 +2210 +2FBC +2A10 +B210 +A210 +BFFE +A528 +2528 +2DAC +556A +552A +4948 +8948 +9398 +ENDCHAR +STARTCHAR uni7201 +ENCODING 29185 +BBX 15 16 0 -2 +BITMAP +1008 +13E8 +1288 +17EE +5A28 +53F4 +5282 +93E2 +1000 +11FC +1154 +2954 +2554 +4154 +47FE +8000 +ENDCHAR +STARTCHAR uni7202 +ENCODING 29186 +BBX 15 16 0 -2 +BITMAP +2FEC +4824 +4BA4 +682C +4BA4 +6AAC +4BA4 +4824 +FFFE +8102 +1110 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7203 +ENCODING 29187 +BBX 15 16 0 -2 +BITMAP +1088 +12AA +12DC +1488 +5954 +5222 +5000 +93FE +1222 +1020 +13FE +2870 +24A8 +4124 +4622 +8020 +ENDCHAR +STARTCHAR uni7204 +ENCODING 29188 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1248 +17FE +5A48 +52FC +52A4 +92FC +12A4 +12FC +1220 +2BFE +272A +457A +450A +8906 +ENDCHAR +STARTCHAR uni7205 +ENCODING 29189 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +11AC +1524 +59FC +5020 +51FC +9020 +13FE +1154 +122A +2820 +25FC +4020 +43FE +8000 +ENDCHAR +STARTCHAR uni7206 +ENCODING 29190 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2A08 +2BF8 +AA08 +ABF8 +B110 +A7FC +2110 +2FFE +2110 +5348 +4CD6 +8B70 +80CC +ENDCHAR +STARTCHAR uni7207 +ENCODING 29191 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1000 +7E20 +10F8 +FF28 +24A8 +D6A8 +3C48 +104A +FEA6 +2888 +4444 +8222 +ENDCHAR +STARTCHAR uni7208 +ENCODING 29192 +BBX 15 16 0 -2 +BITMAP +2020 +203E +2020 +27FE +AC22 +B5F8 +A422 +A5FE +2524 +25FC +2524 +25FC +5840 +4AA4 +528A +847A +ENDCHAR +STARTCHAR uni7209 +ENCODING 29193 +BBX 15 16 0 -2 +BITMAP +1124 +1248 +1124 +1400 +5BFC +5294 +5264 +9294 +13FC +1248 +1368 +2A48 +276A +424A +4246 +8362 +ENDCHAR +STARTCHAR uni720A +ENCODING 29194 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +27FC +24A0 +AFFC +B4A4 +A7FC +A400 +2524 +25A8 +2530 +25A4 +551C +4800 +4AA4 +9452 +ENDCHAR +STARTCHAR uni720B +ENCODING 29195 +BBX 15 16 0 -2 +BITMAP +21C8 +2708 +2108 +27C8 +A93E +B7CA +A54A +A7CA +254A +27CA +210A +27CA +510A +4FEA +4AAA +9156 +ENDCHAR +STARTCHAR uni720C +ENCODING 29196 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +2488 +ADFC +B488 +A7FE +A420 +25FC +2524 +25FC +2524 +55FC +4C00 +4488 +8904 +ENDCHAR +STARTCHAR uni720D +ENCODING 29197 +BBX 15 15 1 -1 +BITMAP +2448 +2488 +29F0 +2934 +75E8 +A930 +B324 +BDFA +2040 +3FFE +5150 +4950 +4A48 +8444 +8842 +ENDCHAR +STARTCHAR uni720E +ENCODING 29198 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +1222 +55FC +5850 +528A +91FC +128A +10F8 +1088 +28F8 +2420 +4524 +42A2 +8040 +ENDCHAR +STARTCHAR uni720F +ENCODING 29199 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2444 +2598 +AC88 +B7DE +A488 +A5DC +26AA +2488 +2420 +2520 +553C +4920 +4920 +97FE +ENDCHAR +STARTCHAR uni7210 +ENCODING 29200 +BBX 15 15 1 -1 +BITMAP +2040 +2078 +2040 +2BFC +6A24 +AAF8 +A222 +A2FE +22A4 +32FC +52A4 +4DFC +4954 +8154 +83FE +ENDCHAR +STARTCHAR uni7211 +ENCODING 29201 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +14A8 +5890 +51FE +5120 +93FC +1520 +11FC +1120 +29FE +2500 +42A4 +4252 +8452 +ENDCHAR +STARTCHAR uni7212 +ENCODING 29202 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +1EFE +2210 +54AA +A844 +1082 +287C +CA44 +2A7C +2C44 +487C +1410 +1254 +2292 +4030 +ENDCHAR +STARTCHAR uni7213 +ENCODING 29203 +BBX 15 16 0 -2 +BITMAP +13DE +1252 +13DE +1652 +5BDE +5242 +527A +928A +1312 +12DA +128A +2ADA +268A +42FA +420A +8204 +ENDCHAR +STARTCHAR uni7214 +ENCODING 29204 +BBX 15 16 0 -2 +BITMAP +2110 +27FC +2040 +23F8 +A840 +B7FC +A000 +A3D4 +2112 +27FE +2350 +2534 +538C +488A +4296 +8102 +ENDCHAR +STARTCHAR uni7215 +ENCODING 29205 +BBX 15 15 1 -1 +BITMAP +2008 +2B8A +A82A +AFEA +A028 +2388 +5014 +4FD4 +8462 +87E0 +1104 +6298 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7216 +ENCODING 29206 +BBX 15 16 0 -2 +BITMAP +2210 +2110 +27DE +2010 +AC5E +B282 +A7DE +A010 +27DE +2450 +27DE +2450 +57DE +4C50 +4452 +84CE +ENDCHAR +STARTCHAR uni7217 +ENCODING 29207 +BBX 15 16 0 -2 +BITMAP +11FC +1104 +11FC +1504 +59FC +5088 +53FE +9088 +11FC +10A8 +13FE +28A8 +25FC +4420 +43FE +8020 +ENDCHAR +STARTCHAR uni7218 +ENCODING 29208 +BBX 15 16 0 -2 +BITMAP +1080 +10DE +1282 +13D4 +5448 +5AB4 +514A +96A4 +11FA +1288 +10F8 +2888 +24FA +4494 +40A8 +80C4 +ENDCHAR +STARTCHAR uni7219 +ENCODING 29209 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1000 +15DC +5954 +51DC +5088 +93FE +1088 +13FE +1088 +2BFE +2494 +4188 +42A4 +80C2 +ENDCHAR +STARTCHAR uni721A +ENCODING 29210 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2110 +2208 +ADF6 +B000 +AEEE +AAAA +2EEE +2000 +2FFE +2922 +5FFE +4922 +492A +8804 +ENDCHAR +STARTCHAR uni721B +ENCODING 29211 +BBX 14 15 1 -1 +BITMAP +2000 +27BC +24A4 +2FBC +74A4 +A7BC +A444 +A7FC +2554 +35F4 +5554 +4DF4 +4CE4 +8554 +864C +ENDCHAR +STARTCHAR uni721C +ENCODING 29212 +BBX 15 16 0 -2 +BITMAP +2492 +2294 +2FFE +2910 +B7FC +A040 +A3F8 +A040 +2FFE +2480 +27BC +2494 +5794 +4CC8 +4F94 +80A2 +ENDCHAR +STARTCHAR uni721D +ENCODING 29213 +BBX 15 16 0 -2 +BITMAP +101E +13E0 +1122 +1494 +5BFE +5252 +53FE +9004 +13C4 +127E +13C4 +2A54 +27CC +4284 +42D4 +8348 +ENDCHAR +STARTCHAR uni721E +ENCODING 29214 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +23F8 +2248 +ABF8 +B044 +A7FC +A004 +2208 +2FBE +2AAA +2FBE +5208 +4A8A +4FBE +8082 +ENDCHAR +STARTCHAR uni721F +ENCODING 29215 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +2088 +23DE +AA52 +B3DE +A0A0 +A090 +21FE +2120 +23FC +2520 +51FC +4920 +41FE +8100 +ENDCHAR +STARTCHAR uni7220 +ENCODING 29216 +BBX 15 16 0 -2 +BITMAP +27BC +24A4 +27BC +24A4 +AFBC +B4A4 +A7BC +A120 +23FE +2220 +27FC +2A20 +53FC +4A20 +43FE +8200 +ENDCHAR +STARTCHAR uni7221 +ENCODING 29217 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +11FC +5524 +59FC +5124 +93FE +122A +12FA +1226 +29FC +2524 +45FC +4022 +83FE +ENDCHAR +STARTCHAR uni7222 +ENCODING 29218 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2410 +3F7C +2638 +2D54 +3412 +2120 +2F3C +2120 +2738 +2120 +2F3C +4120 +5244 +A122 +ENDCHAR +STARTCHAR uni7223 +ENCODING 29219 +BBX 15 16 0 -2 +BITMAP +2248 +2150 +27FC +2404 +A9F0 +B110 +A7FC +A554 +24E4 +27FC +2040 +27FC +5040 +4FFE +42A4 +8452 +ENDCHAR +STARTCHAR uni7224 +ENCODING 29220 +BBX 15 16 0 -2 +BITMAP +2110 +27FE +2110 +27BC +ACA4 +B7BC +A4A4 +A7BC +2444 +27FC +2554 +25F4 +5444 +4CE4 +4554 +8448 +ENDCHAR +STARTCHAR uni7225 +ENCODING 29221 +BBX 15 16 0 -2 +BITMAP +13FE +1202 +13FE +1692 +5A54 +5292 +52FE +92AA +12FE +1322 +12FA +2AAA +24FA +4422 +49FA +8004 +ENDCHAR +STARTCHAR uni7226 +ENCODING 29222 +BBX 15 16 0 -2 +BITMAP +2790 +251E +27A8 +2484 +AFBE +B52A +A7BE +A000 +23F8 +2208 +23F8 +2208 +53F8 +48A0 +4124 +861C +ENDCHAR +STARTCHAR uni7227 +ENCODING 29223 +BBX 15 16 0 -2 +BITMAP +27FC +2040 +2FFE +2842 +AB58 +B040 +A358 +A000 +2EEE +2AAA +2EEE +2000 +5FFE +4A48 +4554 +8FFE +ENDCHAR +STARTCHAR uni7228 +ENCODING 29224 +BBX 15 15 1 -1 +BITMAP +1000 +67DC +4444 +775C +4544 +FFFE +8822 +7EFC +2C68 +4AA4 +FFFE +1110 +EAAE +0C60 +F01E +ENDCHAR +STARTCHAR uni7229 +ENCODING 29225 +BBX 15 16 0 -2 +BITMAP +2288 +22E8 +2F5E +22EC +AF5A +BAE8 +A208 +AFFE +2942 +3494 +2558 +27F2 +5204 +4BE8 +4202 +83E4 +ENDCHAR +STARTCHAR uni722A +ENCODING 29226 +BBX 15 15 1 -1 +BITMAP +0018 +01F0 +3E10 +2010 +2110 +2110 +2110 +2110 +2108 +2108 +2108 +4108 +4104 +4104 +8102 +ENDCHAR +STARTCHAR uni722B +ENCODING 29227 +BBX 15 9 1 2 +BITMAP +0018 +00E0 +1F00 +1110 +1108 +2084 +2082 +4082 +8000 +ENDCHAR +STARTCHAR uni722C +ENCODING 29228 +BBX 15 15 1 -1 +BITMAP +0200 +0C00 +74FE +4492 +5492 +5492 +54FE +5480 +5480 +5482 +5282 +527E +9100 +90C0 +903E +ENDCHAR +STARTCHAR uni722D +ENCODING 29229 +BBX 15 15 1 -1 +BITMAP +0078 +1F90 +1108 +2084 +4FF0 +0110 +0110 +FFFE +0110 +0110 +1FF0 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni722E +ENCODING 29230 +BBX 15 16 0 -2 +BITMAP +0240 +0740 +3A7C +2A84 +2B74 +2A54 +2A54 +2A74 +2A48 +2942 +2942 +28BE +2840 +4830 +480E +8800 +ENDCHAR +STARTCHAR uni722F +ENCODING 29231 +BBX 15 16 0 -2 +BITMAP +0008 +01FC +7E10 +2210 +1120 +0100 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +FFFE +2008 +2028 +2010 +ENDCHAR +STARTCHAR uni7230 +ENCODING 29232 +BBX 15 15 1 -1 +BITMAP +0038 +1FD0 +1108 +2084 +4FF8 +0200 +FFFE +0400 +07F8 +0C10 +1220 +2140 +C1C0 +0630 +380E +ENDCHAR +STARTCHAR uni7231 +ENCODING 29233 +BBX 15 16 0 -2 +BITMAP +0008 +01FC +7E10 +2210 +1120 +7FFE +4202 +8204 +7FF8 +0400 +07F0 +0A10 +1120 +20C0 +4330 +1C0E +ENDCHAR +STARTCHAR uni7232 +ENCODING 29234 +BBX 15 15 1 -1 +BITMAP +00F0 +3F10 +2108 +4084 +BFE0 +2020 +3FF8 +2008 +2008 +3FFE +4022 +4492 +9252 +2242 +201C +ENDCHAR +STARTCHAR uni7233 +ENCODING 29235 +BBX 14 16 0 -2 +BITMAP +00F8 +3F20 +0940 +1FE0 +1020 +1FF0 +1010 +1FFC +2004 +2AA4 +400C +9FE0 +0040 +0180 +0500 +0200 +ENDCHAR +STARTCHAR uni7234 +ENCODING 29236 +BBX 15 15 1 -1 +BITMAP +0006 +FF7C +9554 +9354 +FF54 +9154 +E954 +AB54 +EB54 +8554 +ED54 +9354 +E154 +8152 +FF92 +ENDCHAR +STARTCHAR uni7235 +ENCODING 29237 +BBX 15 15 1 -1 +BITMAP +003C +7FC8 +1110 +7FFC +4444 +7FFC +0000 +7E08 +4208 +7EFE +4208 +7E48 +4228 +7D08 +C138 +ENDCHAR +STARTCHAR uni7236 +ENCODING 29238 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +0820 +3018 +C826 +0820 +0820 +0440 +0440 +0280 +0100 +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7237 +ENCODING 29239 +BBX 15 16 0 -2 +BITMAP +0440 +0820 +1850 +2488 +0300 +0CC0 +3030 +C00E +1FF0 +0210 +0210 +0210 +0250 +0220 +0200 +0200 +ENDCHAR +STARTCHAR uni7238 +ENCODING 29240 +BBX 15 15 1 -1 +BITMAP +0280 +0440 +1830 +66CC +0100 +0280 +0C60 +F01E +1FF0 +1110 +1110 +1FF0 +1000 +1002 +0FFE +ENDCHAR +STARTCHAR uni7239 +ENCODING 29241 +BBX 15 15 1 -1 +BITMAP +0280 +0C60 +76DC +0100 +0EE0 +F21E +07F0 +1C20 +02C0 +3F80 +01F8 +0E08 +0110 +00E0 +1F80 +ENDCHAR +STARTCHAR uni723A +ENCODING 29242 +BBX 15 15 1 -1 +BITMAP +1870 +648C +0300 +1CE0 +E01E +0000 +FF7C +2444 +3C48 +2450 +3C48 +2444 +3C44 +E458 +0440 +ENDCHAR +STARTCHAR uni723B +ENCODING 29243 +BBX 15 15 1 -1 +BITMAP +0010 +1820 +0640 +0180 +0260 +0C18 +7000 +0010 +1020 +0840 +0680 +0180 +0660 +1818 +E006 +ENDCHAR +STARTCHAR uni723C +ENCODING 29244 +BBX 15 15 1 -1 +BITMAP +0400 +44F8 +2888 +1088 +2888 +44F8 +8088 +0088 +0488 +44F8 +2888 +1088 +2888 +4488 +83FE +ENDCHAR +STARTCHAR uni723D +ENCODING 29245 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +FFFE +0100 +4924 +3118 +4924 +0100 +4924 +3118 +4AA4 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni723E +ENCODING 29246 +BBX 15 14 1 -1 +BITMAP +FFFE +1110 +2108 +7FFC +C106 +5554 +4924 +5554 +4104 +5554 +4924 +5554 +4104 +410C +ENDCHAR +STARTCHAR uni723F +ENCODING 29247 +BBX 11 15 2 -1 +BITMAP +0020 +1020 +1020 +1020 +1020 +1FE0 +0020 +0020 +FFE0 +0820 +0820 +1020 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni7240 +ENCODING 29248 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +9040 +9040 +9FFE +F040 +10E0 +10E0 +F150 +5150 +5248 +5444 +9842 +9040 +1040 +ENDCHAR +STARTCHAR uni7241 +ENCODING 29249 +BBX 15 16 0 -2 +BITMAP +0400 +2400 +25FE +2408 +2408 +3DE8 +0528 +0528 +FD28 +2528 +25E8 +2528 +2408 +4408 +4428 +8410 +ENDCHAR +STARTCHAR uni7242 +ENCODING 29250 +BBX 15 15 1 -1 +BITMAP +0908 +4888 +4890 +4BFC +4840 +7840 +0BF8 +0840 +F840 +4840 +4FFE +4840 +4840 +4840 +8840 +ENDCHAR +STARTCHAR uni7243 +ENCODING 29251 +BBX 15 16 0 -2 +BITMAP +0448 +2548 +2548 +27FE +2548 +3D48 +0578 +0500 +FDFE +2420 +27FE +2470 +24A8 +4524 +4622 +8420 +ENDCHAR +STARTCHAR uni7244 +ENCODING 29252 +BBX 15 16 0 -2 +BITMAP +0420 +2420 +2450 +2448 +24A4 +3DFE +0684 +04FC +FC84 +24FC +2480 +24FC +2544 +4544 +467C +8444 +ENDCHAR +STARTCHAR uni7245 +ENCODING 29253 +BBX 15 16 0 -2 +BITMAP +1020 +57FE +5420 +55FC +5424 +77FE +1424 +15FC +F420 +55FC +5524 +55FC +5524 +55FC +5524 +892C +ENDCHAR +STARTCHAR uni7246 +ENCODING 29254 +BBX 15 15 1 -1 +BITMAP +1040 +9040 +9FFE +9248 +F248 +1554 +1FFE +1000 +F7FC +5404 +55F4 +5514 +95F4 +9404 +17FC +ENDCHAR +STARTCHAR uni7247 +ENCODING 29255 +BBX 13 15 2 -1 +BITMAP +2080 +2080 +2080 +2080 +3FF8 +2000 +2000 +2000 +3FC0 +2040 +2040 +4040 +4040 +8040 +0040 +ENDCHAR +STARTCHAR uni7248 +ENCODING 29256 +BBX 15 15 1 -1 +BITMAP +4800 +49FE +4900 +4900 +4900 +7DFC +4144 +4144 +7944 +4928 +4928 +4A10 +4A28 +8C44 +8882 +ENDCHAR +STARTCHAR uni7249 +ENCODING 29257 +BBX 15 16 0 -2 +BITMAP +0420 +2420 +2524 +24A4 +24A8 +3E20 +21FC +2020 +3C20 +2420 +27FE +2420 +2420 +4420 +4420 +8420 +ENDCHAR +STARTCHAR uni724A +ENCODING 29258 +BBX 14 16 0 -2 +BITMAP +0400 +25FC +2444 +2444 +2444 +3E44 +2094 +2088 +3D00 +24FC +2484 +2484 +2484 +4484 +44FC +8484 +ENDCHAR +STARTCHAR uni724B +ENCODING 29259 +BBX 15 15 1 -1 +BITMAP +4890 +4888 +487C +4BC0 +7C2C +4032 +40CA +4314 +7888 +487C +4FC0 +4858 +4822 +8852 +8B8C +ENDCHAR +STARTCHAR uni724C +ENCODING 29260 +BBX 15 15 1 -1 +BITMAP +4820 +4840 +49FC +4924 +7D24 +41FC +4124 +4144 +79FC +4888 +4908 +4BFE +4808 +8808 +8808 +ENDCHAR +STARTCHAR uni724D +ENCODING 29261 +BBX 15 16 0 -2 +BITMAP +0820 +4820 +48FC +4820 +4820 +7DFE +4002 +4094 +7850 +4890 +4850 +49FE +4828 +4844 +4882 +8902 +ENDCHAR +STARTCHAR uni724E +ENCODING 29262 +BBX 15 16 0 -2 +BITMAP +0880 +4880 +48FC +4954 +4AD4 +7CB4 +412C +4244 +7894 +4908 +4840 +48A4 +4AAA +4A8A +4C78 +8800 +ENDCHAR +STARTCHAR uni724F +ENCODING 29263 +BBX 15 16 0 -2 +BITMAP +0820 +4850 +4888 +4904 +4AFA +7C00 +41E2 +412A +792A +49EA +492A +492A +49EA +4922 +492A +8964 +ENDCHAR +STARTCHAR uni7250 +ENCODING 29264 +BBX 15 16 0 -2 +BITMAP +0808 +483C +49E0 +4820 +4820 +7DFE +4020 +40A0 +792C +4924 +4924 +49AC +4924 +4924 +49FC +8904 +ENDCHAR +STARTCHAR uni7251 +ENCODING 29265 +BBX 15 16 0 -2 +BITMAP +0840 +4820 +49FE +4902 +4902 +7DFE +4100 +4100 +79FE +49AA +4AAA +4AFE +4CAA +48AA +48A2 +8886 +ENDCHAR +STARTCHAR uni7252 +ENCODING 29266 +BBX 15 15 1 -1 +BITMAP +5248 +5248 +57FE +5248 +5248 +7A78 +4200 +43FC +7840 +4FFE +4950 +4950 +4A48 +8C46 +8840 +ENDCHAR +STARTCHAR uni7253 +ENCODING 29267 +BBX 15 15 1 -1 +BITMAP +4820 +4820 +4BFE +4904 +7C88 +43FE +4202 +4222 +7820 +4BFE +4840 +487C +4844 +8884 +8B18 +ENDCHAR +STARTCHAR uni7254 +ENCODING 29268 +BBX 15 16 0 -2 +BITMAP +0828 +4824 +4BFE +4820 +49FC +7D24 +41FC +4124 +79FC +4924 +4808 +4BFE +4888 +4848 +4848 +8818 +ENDCHAR +STARTCHAR uni7255 +ENCODING 29269 +BBX 15 15 1 -1 +BITMAP +4820 +4840 +4BFC +4A44 +7F74 +4294 +4354 +4224 +7A54 +4BFC +4820 +4A94 +4A92 +8C4A +8C38 +ENDCHAR +STARTCHAR uni7256 +ENCODING 29270 +BBX 15 15 1 -1 +BITMAP +501C +57E0 +5400 +57FC +7C04 +47FC +4428 +47FE +7420 +55FC +5524 +55FC +5524 +99FC +9104 +ENDCHAR +STARTCHAR uni7257 +ENCODING 29271 +BBX 15 15 1 -1 +BITMAP +5020 +57FE +5420 +55FC +7C24 +47FE +4424 +45FC +7524 +55FC +5524 +55FC +5524 +5924 +912C +ENDCHAR +STARTCHAR uni7258 +ENCODING 29272 +BBX 15 15 1 -1 +BITMAP +4820 +4BFE +4820 +49FC +7C00 +43FE +4252 +43FE +7904 +49FC +4904 +49FC +4904 +89FC +8B06 +ENDCHAR +STARTCHAR uni7259 +ENCODING 29273 +BBX 15 14 1 -1 +BITMAP +1FFC +0020 +0820 +0820 +1020 +3FFE +20A0 +0120 +0220 +0420 +0820 +3020 +C020 +00E0 +ENDCHAR +STARTCHAR uni725A +ENCODING 29274 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +7FFE +4002 +9FF4 +1010 +1FF0 +0000 +7FFC +1040 +2040 +3FFE +0240 +0440 +1940 +6080 +ENDCHAR +STARTCHAR uni725B +ENCODING 29275 +BBX 15 15 1 -1 +BITMAP +0100 +1100 +1100 +3FF8 +2100 +4100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni725C +ENCODING 29276 +BBX 7 16 0 -2 +BITMAP +08 +08 +48 +48 +7E +48 +88 +08 +0E +F8 +48 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni725D +ENCODING 29277 +BBX 15 15 1 -1 +BITMAP +0880 +2880 +2880 +7E84 +4898 +88E0 +0880 +0E80 +3880 +C880 +0880 +0880 +0882 +0882 +087E +ENDCHAR +STARTCHAR uni725E +ENCODING 29278 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +5040 +5040 +7DFC +5044 +9044 +1044 +1C44 +F084 +5084 +1084 +1104 +1104 +1228 +1410 +ENDCHAR +STARTCHAR uni725F +ENCODING 29279 +BBX 15 15 1 -1 +BITMAP +0440 +0420 +0870 +7F88 +0108 +1100 +1100 +1FF0 +2100 +4100 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7260 +ENCODING 29280 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +5020 +5120 +7D2C +5134 +9164 +13A4 +1D24 +F134 +5128 +1122 +1122 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni7261 +ENCODING 29281 +BBX 15 15 1 -1 +BITMAP +1020 +5020 +5020 +5020 +7C20 +91FC +9020 +1020 +1020 +1C20 +F020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni7262 +ENCODING 29282 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +4904 +0900 +1FF8 +1100 +2100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7263 +ENCODING 29283 +BBX 14 15 1 -1 +BITMAP +1000 +53FC +5044 +5044 +7D44 +9144 +9144 +1244 +1244 +1884 +3084 +D084 +1104 +1204 +1438 +ENDCHAR +STARTCHAR uni7264 +ENCODING 29284 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +5010 +5000 +7DFE +5080 +9080 +1080 +1C80 +F080 +5080 +1080 +1080 +1080 +10FC +1000 +ENDCHAR +STARTCHAR uni7265 +ENCODING 29285 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +5020 +53FE +7C80 +5080 +9080 +10FC +1C84 +F084 +5084 +1084 +1104 +1104 +1228 +1410 +ENDCHAR +STARTCHAR uni7266 +ENCODING 29286 +BBX 15 16 0 -2 +BITMAP +0808 +083C +49E0 +4820 +7E20 +483C +89E0 +0820 +0E20 +F83E +4BE0 +0820 +0822 +0822 +0822 +081E +ENDCHAR +STARTCHAR uni7267 +ENCODING 29287 +BBX 15 15 1 -1 +BITMAP +1080 +5080 +5080 +50FE +FD08 +9108 +9308 +1088 +1C90 +3050 +D050 +1020 +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni7268 +ENCODING 29288 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +5040 +53FC +7C00 +5000 +91F0 +1110 +1D10 +F110 +5110 +1112 +1112 +1212 +120E +1400 +ENDCHAR +STARTCHAR uni7269 +ENCODING 29289 +BBX 15 15 1 -1 +BITMAP +1100 +5100 +5100 +7BFE +9292 +9492 +1092 +1122 +1922 +3222 +D442 +1042 +1084 +1104 +1038 +ENDCHAR +STARTCHAR uni726A +ENCODING 29290 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +4890 +4890 +7EFE +4890 +8910 +0810 +0E10 +F9FE +4810 +0810 +0810 +0810 +0810 +0810 +ENDCHAR +STARTCHAR uni726B +ENCODING 29291 +BBX 15 16 0 -2 +BITMAP +0850 +0848 +4848 +4840 +7E5E +49E0 +8840 +0844 +0E44 +F848 +4830 +0822 +0852 +088A +0B06 +0802 +ENDCHAR +STARTCHAR uni726C +ENCODING 29292 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +502E +51F0 +7D20 +5120 +9120 +11FE +1C22 +F062 +50A2 +112A +1624 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni726D +ENCODING 29293 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +53FC +5294 +7E94 +5294 +9294 +1294 +1E94 +F294 +529C +1304 +1204 +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni726E +ENCODING 29294 +BBX 15 15 1 -1 +BITMAP +1090 +1088 +2088 +607E +AFC0 +2040 +2022 +2012 +310C +1FF0 +2100 +4100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni726F +ENCODING 29295 +BBX 15 15 1 -1 +BITMAP +1020 +5020 +5020 +5020 +7DFE +9020 +9020 +1020 +1020 +1DFC +F104 +1104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni7270 +ENCODING 29296 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +5020 +5020 +7DFC +5124 +9124 +1124 +1D24 +F1FC +5124 +1124 +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni7271 +ENCODING 29297 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +53FE +5008 +7C08 +51E8 +9128 +1128 +1D28 +F128 +51E8 +1128 +1008 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni7272 +ENCODING 29298 +BBX 15 15 1 -1 +BITMAP +1020 +5120 +5120 +5120 +FDFE +9220 +1220 +1020 +1C20 +31FC +D020 +1020 +1020 +1020 +13FE +ENDCHAR +STARTCHAR uni7273 +ENCODING 29299 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +5084 +50A4 +7C94 +5084 +9084 +13FE +1D04 +F144 +5124 +1104 +11FE +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni7274 +ENCODING 29300 +BBX 15 15 1 -1 +BITMAP +1018 +51F0 +5110 +5110 +FD10 +9110 +11FE +1110 +1D10 +3110 +D110 +11C8 +170A +100A +17F4 +ENDCHAR +STARTCHAR uni7275 +ENCODING 29301 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +3FF8 +0280 +0440 +0820 +7FFE +4102 +8904 +0FF0 +1100 +0100 +7FFC +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7276 +ENCODING 29302 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +3FF8 +0200 +7FFC +0820 +1110 +2908 +CFF6 +1100 +0100 +7FFC +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7277 +ENCODING 29303 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +5050 +5088 +7D04 +5202 +91FC +1020 +1C20 +F020 +51FC +1020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni7278 +ENCODING 29304 +BBX 15 15 1 -1 +BITMAP +1020 +5020 +53FE +5202 +7E02 +91FC +9008 +1010 +1C20 +33FE +D020 +1020 +1020 +1020 +10E0 +ENDCHAR +STARTCHAR uni7279 +ENCODING 29305 +BBX 15 15 1 -1 +BITMAP +1020 +5020 +51FC +FC20 +9020 +13FE +1008 +1C08 +33FE +D008 +1108 +1088 +1048 +1008 +1038 +ENDCHAR +STARTCHAR uni727A +ENCODING 29306 +BBX 15 16 0 -2 +BITMAP +1000 +17FE +5090 +5090 +7C90 +53FC +9294 +1294 +1E94 +F294 +529C +1304 +1204 +1204 +13FC +1204 +ENDCHAR +STARTCHAR uni727B +ENCODING 29307 +BBX 15 16 0 -2 +BITMAP +1090 +1088 +5080 +51FE +7CA0 +50A8 +90B0 +10A4 +1CA8 +F0B0 +5124 +112A +1132 +1222 +12DE +1400 +ENDCHAR +STARTCHAR uni727C +ENCODING 29308 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +5000 +5092 +7D24 +5248 +9124 +1092 +1C00 +F1FE +5020 +1020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni727D +ENCODING 29309 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +7FF8 +2440 +1880 +7FF8 +4848 +11E0 +3E10 +1200 +3FF0 +4200 +FFFC +0200 +0200 +ENDCHAR +STARTCHAR uni727E +ENCODING 29310 +BBX 15 15 1 -1 +BITMAP +1000 +53FE +5040 +5040 +FDF8 +9088 +1088 +1088 +1FFE +3000 +D1FC +1104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni727F +ENCODING 29311 +BBX 15 15 1 -1 +BITMAP +1020 +5120 +5120 +51FC +7A20 +9220 +9020 +13FE +1820 +3000 +D1FC +1104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni7280 +ENCODING 29312 +BBX 14 14 1 -1 +BITMAP +7FFC +4004 +7FFC +4000 +5C9C +4080 +5C9C +4000 +4880 +4FF8 +9080 +BFFC +0080 +0080 +ENDCHAR +STARTCHAR uni7281 +ENCODING 29313 +BBX 15 15 1 -1 +BITMAP +0604 +7804 +0844 +FF44 +2844 +2C44 +4A04 +8804 +111C +1FF0 +2100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni7282 +ENCODING 29314 +BBX 15 15 1 -1 +BITMAP +0640 +7840 +087E +FE92 +2912 +2C22 +4A42 +8882 +110C +1FF0 +2100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni7283 +ENCODING 29315 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +51FC +5000 +7D08 +5090 +9000 +13FE +1C00 +F000 +51FC +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni7284 +ENCODING 29316 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +51FC +5050 +7C88 +5104 +93FE +1008 +1DE8 +F128 +5128 +11E8 +1128 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni7285 +ENCODING 29317 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +5202 +528A +7E52 +53FE +9222 +1222 +1EAA +F2AA +52AA +12FA +1202 +1202 +120A +1204 +ENDCHAR +STARTCHAR uni7286 +ENCODING 29318 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +53FE +5020 +7C20 +51FC +9104 +11FC +1D04 +F1FC +5104 +11FC +1104 +1104 +17FE +1000 +ENDCHAR +STARTCHAR uni7287 +ENCODING 29319 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +1FF0 +2100 +0100 +FFFE +0100 +5150 +5050 +7C7C +9090 +1010 +FDFE +1010 +1010 +ENDCHAR +STARTCHAR uni7288 +ENCODING 29320 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +50A8 +5020 +7DFC +5040 +93FE +1088 +1D04 +F2FA +5488 +1088 +10A8 +1092 +1082 +107E +ENDCHAR +STARTCHAR uni7289 +ENCODING 29321 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +53FE +5000 +7DFC +5104 +91FC +1000 +1DFC +F008 +5010 +13FE +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni728A +ENCODING 29322 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +51FC +5020 +7C20 +53FE +9002 +1094 +1C50 +F110 +5090 +13FE +1028 +1044 +1082 +1302 +ENDCHAR +STARTCHAR uni728B +ENCODING 29323 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +5108 +5108 +7DF8 +5108 +91F8 +1108 +1DF8 +F108 +5108 +17FE +1000 +1090 +1108 +1204 +ENDCHAR +STARTCHAR uni728C +ENCODING 29324 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +5242 +5242 +7A42 +53DE +9200 +123E +1BD2 +3212 +D214 +13D4 +1208 +1214 +1224 +1242 +ENDCHAR +STARTCHAR uni728D +ENCODING 29325 +BBX 15 15 1 -1 +BITMAP +1010 +5710 +517C +5214 +FAFE +9414 +1714 +117C +1910 +357C +DD10 +1AFE +1210 +1510 +18FE +ENDCHAR +STARTCHAR uni728E +ENCODING 29326 +BBX 15 15 1 -1 +BITMAP +0808 +7E08 +08FE +FF08 +0848 +7E28 +0828 +0F08 +F038 +1100 +1FF0 +2100 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni728F +ENCODING 29327 +BBX 14 16 0 -2 +BITMAP +1080 +1040 +53FC +5204 +7E04 +53FC +9200 +1200 +1FFC +F354 +5354 +15FC +1554 +1554 +1944 +110C +ENDCHAR +STARTCHAR uni7290 +ENCODING 29328 +BBX 15 16 0 -2 +BITMAP +10C4 +1704 +5124 +5114 +7914 +5784 +9124 +1114 +1B94 +3346 +D53C +1504 +1104 +1104 +1104 +1104 +ENDCHAR +STARTCHAR uni7291 +ENCODING 29329 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +5104 +51FC +7D04 +51FC +9104 +11FC +1C28 +F024 +53FE +1050 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni7292 +ENCODING 29330 +BBX 15 15 1 -1 +BITMAP +1040 +5040 +57FE +5000 +FDF8 +9108 +11F8 +1000 +1BFC +3204 +D2F4 +1294 +1294 +12F4 +120C +ENDCHAR +STARTCHAR uni7293 +ENCODING 29331 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +51FC +5244 +7954 +51F4 +9084 +1128 +1A90 +31FC +D244 +1554 +11F4 +1084 +1128 +1210 +ENDCHAR +STARTCHAR uni7294 +ENCODING 29332 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +51FC +5200 +7DF8 +5000 +93F8 +1088 +1AA8 +31C8 +D7F8 +108A +11CA +16AA +1086 +1082 +ENDCHAR +STARTCHAR uni7295 +ENCODING 29333 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +53FE +5088 +7888 +57FE +9080 +11FC +1B24 +35FC +D124 +11FC +1124 +1124 +1124 +110C +ENDCHAR +STARTCHAR uni7296 +ENCODING 29334 +BBX 15 15 1 -1 +BITMAP +0820 +29A4 +2AA8 +1450 +2288 +0000 +7FFC +4104 +4904 +0FF0 +1100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni7297 +ENCODING 29335 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +53FE +5202 +7C24 +51FC +9020 +11FC +1C20 +F3FE +5020 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni7298 +ENCODING 29336 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2210 +2F7C +2638 +2B54 +3292 +2040 +2240 +23FC +2440 +2040 +5FFE +4040 +8040 +ENDCHAR +STARTCHAR uni7299 +ENCODING 29337 +BBX 15 16 0 -2 +BITMAP +1040 +1088 +51FC +5108 +7A52 +53FE +9050 +1188 +1E26 +30C0 +D310 +1064 +1388 +1030 +10C0 +1700 +ENDCHAR +STARTCHAR uni729A +ENCODING 29338 +BBX 15 16 0 -2 +BITMAP +3F08 +2108 +3F7E +2008 +2F48 +2028 +5FA8 +4408 +9528 +2C90 +1100 +1FF8 +2100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni729B +ENCODING 29339 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +7F7E +0844 +FFA8 +2A10 +4928 +8844 +7FFE +4480 +47F8 +4880 +BFFE +0080 +0080 +ENDCHAR +STARTCHAR uni729C +ENCODING 29340 +BBX 15 16 0 -2 +BITMAP +1108 +1088 +53C8 +5010 +7BDE +5264 +93D4 +1014 +1BD4 +3054 +D094 +10E8 +1388 +1094 +1294 +1122 +ENDCHAR +STARTCHAR uni729D +ENCODING 29341 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +5088 +5050 +7DFE +5000 +91FC +1124 +1DFC +F124 +51FC +1020 +11FC +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni729E +ENCODING 29342 +BBX 15 16 0 -2 +BITMAP +1018 +11E0 +5040 +53FE +7C88 +5174 +9252 +1070 +1C00 +F1FC +5104 +1174 +1154 +1174 +1104 +110C +ENDCHAR +STARTCHAR uni729F +ENCODING 29343 +BBX 15 16 0 -2 +BITMAP +7CF8 +0488 +04F8 +7C20 +41FC +7D24 +05FC +0428 +2BFC +1004 +1100 +1FF8 +2100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni72A0 +ENCODING 29344 +BBX 15 15 1 -1 +BITMAP +2208 +2110 +A7FC +F840 +A3F8 +2040 +2FFE +2128 +3624 +6220 +AFFE +2224 +2F98 +222A +2644 +ENDCHAR +STARTCHAR uni72A1 +ENCODING 29345 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +5248 +53FE +7E48 +52FC +92A4 +12FC +1EA4 +F2FC +5220 +13FE +132A +157A +150A +1906 +ENDCHAR +STARTCHAR uni72A2 +ENCODING 29346 +BBX 15 15 1 -1 +BITMAP +1020 +53FE +5020 +51FC +FC00 +93FE +1252 +13FE +1D04 +31FC +D104 +11FC +1104 +11FC +1306 +ENDCHAR +STARTCHAR uni72A3 +ENCODING 29347 +BBX 15 16 0 -2 +BITMAP +1124 +1248 +5124 +5000 +7BFC +5294 +9264 +1294 +1BFC +3248 +D368 +1248 +136A +124A +1246 +1362 +ENDCHAR +STARTCHAR uni72A4 +ENCODING 29348 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +5294 +5294 +7BFC +5110 +9252 +13DC +1812 +33CE +D240 +13D2 +125C +13D0 +1252 +12CE +ENDCHAR +STARTCHAR uni72A5 +ENCODING 29349 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +53FE +5250 +7BFE +5252 +93FE +1200 +1A94 +32D8 +D290 +12D2 +128E +1400 +1554 +1A2A +ENDCHAR +STARTCHAR uni72A6 +ENCODING 29350 +BBX 15 16 0 -2 +BITMAP +13F8 +1208 +53F8 +5208 +7BF8 +5110 +97FC +1110 +1FFE +3110 +D248 +1554 +10E0 +1150 +1248 +10C0 +ENDCHAR +STARTCHAR uni72A7 +ENCODING 29351 +BBX 15 15 1 -1 +BITMAP +2110 +A7FC +A040 +FBF8 +A040 +AFFE +2008 +2794 +3210 +EFFE +2690 +2A52 +2794 +208A +23B6 +ENDCHAR +STARTCHAR uni72A8 +ENCODING 29352 +BBX 15 16 0 -2 +BITMAP +0810 +2448 +3F7E +64C8 +BF7E +2448 +3F7E +2448 +3F7E +2040 +1100 +1FF8 +2100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni72A9 +ENCODING 29353 +BBX 15 16 0 -2 +BITMAP +7C40 +11FC +FD24 +39FC +5524 +FDFC +2468 +18A2 +651E +1100 +1FF8 +2100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni72AA +ENCODING 29354 +BBX 15 16 0 -2 +BITMAP +2110 +27FE +A040 +A2EE +FAAA +ABEA +AAAE +2AE8 +3BAA +ECE6 +2288 +25F4 +2290 +2060 +2198 +2606 +ENDCHAR +STARTCHAR uni72AB +ENCODING 29355 +BBX 15 16 0 -2 +BITMAP +5118 +4B94 +7C3E +D3A8 +7C7E +53A8 +7C3E +53A8 +7EBE +43A0 +1100 +1FF8 +2100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni72AC +ENCODING 29356 +BBX 15 15 1 -1 +BITMAP +0120 +0110 +0108 +0100 +FFFE +0100 +0100 +0280 +0280 +0440 +0440 +0820 +1010 +2008 +C006 +ENDCHAR +STARTCHAR uni72AD +ENCODING 29357 +BBX 9 15 4 -1 +BITMAP +2080 +1100 +0A00 +0400 +0A00 +3200 +C200 +0500 +0900 +3100 +C100 +0100 +0100 +0200 +0C00 +ENDCHAR +STARTCHAR uni72AE +ENCODING 29358 +BBX 15 15 1 -1 +BITMAP +0208 +0204 +FFFE +0200 +0200 +0410 +0410 +0A10 +0A20 +1120 +20C0 +4040 +81A0 +0618 +1806 +ENDCHAR +STARTCHAR uni72AF +ENCODING 29359 +BBX 15 15 1 -1 +BITMAP +0800 +8BF8 +5208 +2208 +6208 +9208 +1208 +1208 +3238 +5200 +9200 +1200 +1202 +2202 +C1FE +ENDCHAR +STARTCHAR uni72B0 +ENCODING 29360 +BBX 15 15 1 -1 +BITMAP +0900 +8900 +5100 +2100 +27F0 +5110 +9110 +1110 +3110 +5110 +9110 +1210 +1212 +2412 +C80E +ENDCHAR +STARTCHAR uni72B1 +ENCODING 29361 +BBX 15 15 1 -1 +BITMAP +0900 +8900 +5100 +2100 +27F0 +5110 +9110 +1710 +3110 +5190 +9150 +1210 +1212 +2412 +C80E +ENDCHAR +STARTCHAR uni72B2 +ENCODING 29362 +BBX 15 15 1 -1 +BITMAP +0810 +8810 +5010 +2010 +27FE +5050 +9050 +1050 +3090 +5090 +9110 +1210 +1410 +2010 +C070 +ENDCHAR +STARTCHAR uni72B3 +ENCODING 29363 +BBX 14 16 0 -2 +BITMAP +0040 +4440 +2880 +10FC +2904 +4A04 +8804 +0904 +1884 +2844 +4844 +8804 +0804 +0804 +5028 +2010 +ENDCHAR +STARTCHAR uni72B4 +ENCODING 29364 +BBX 15 15 0 -2 +BITMAP +45FC +2820 +1020 +2820 +4820 +8820 +0BFE +1820 +2820 +4820 +8820 +0820 +0820 +5020 +2020 +ENDCHAR +STARTCHAR uni72B5 +ENCODING 29365 +BBX 15 16 0 -2 +BITMAP +0080 +4480 +2900 +11FE +2A00 +4C00 +89F8 +0808 +1810 +2860 +4880 +8900 +0A02 +0A02 +51FE +2000 +ENDCHAR +STARTCHAR uni72B6 +ENCODING 29366 +BBX 15 15 1 -1 +BITMAP +1048 +9048 +5044 +5040 +17FE +1040 +1040 +1040 +30A0 +50A0 +9090 +1110 +1108 +1204 +1402 +ENDCHAR +STARTCHAR uni72B7 +ENCODING 29367 +BBX 15 16 0 -2 +BITMAP +0020 +4410 +2810 +11FE +2900 +4900 +8900 +0900 +1900 +2900 +4900 +8900 +0900 +0A00 +5200 +2400 +ENDCHAR +STARTCHAR uni72B8 +ENCODING 29368 +BBX 14 15 0 -2 +BITMAP +47F0 +2810 +1010 +2910 +4910 +8910 +09FC +1804 +2804 +4804 +8BF4 +0804 +0804 +5028 +2010 +ENDCHAR +STARTCHAR uni72B9 +ENCODING 29369 +BBX 15 15 1 -1 +BITMAP +0890 +8888 +5088 +2080 +2FFE +5080 +9080 +10C0 +3140 +5140 +9140 +1240 +1242 +2422 +C81E +ENDCHAR +STARTCHAR uni72BA +ENCODING 29370 +BBX 15 16 0 -2 +BITMAP +0080 +4440 +2840 +13FC +2800 +4800 +89F0 +0910 +1910 +2910 +4910 +8912 +0912 +0A12 +520E +2400 +ENDCHAR +STARTCHAR uni72BB +ENCODING 29371 +BBX 15 16 0 -2 +BITMAP +0020 +4420 +2820 +13FE +2820 +4820 +89FC +0924 +1924 +2924 +4924 +8934 +0928 +0820 +5020 +2020 +ENDCHAR +STARTCHAR uni72BC +ENCODING 29372 +BBX 15 16 0 -2 +BITMAP +0010 +8FD0 +5050 +2090 +5110 +9110 +1150 +1190 +3110 +5710 +9110 +1112 +1112 +1112 +A50E +4200 +ENDCHAR +STARTCHAR uni72BD +ENCODING 29373 +BBX 15 15 0 -2 +BITMAP +45FC +2810 +1110 +2910 +4910 +8A10 +0BFE +1830 +2850 +4850 +8890 +0910 +0A10 +5050 +2020 +ENDCHAR +STARTCHAR uni72BE +ENCODING 29374 +BBX 15 15 1 -1 +BITMAP +0848 +8848 +5044 +2040 +2FFE +5040 +9040 +1040 +30A0 +50A0 +9110 +1110 +1208 +2404 +C802 +ENDCHAR +STARTCHAR uni72BF +ENCODING 29375 +BBX 15 16 0 -2 +BITMAP +0040 +4420 +2820 +1000 +2BFE +4840 +8840 +0860 +1850 +2848 +4844 +8844 +0840 +0840 +5040 +2040 +ENDCHAR +STARTCHAR uni72C0 +ENCODING 29376 +BBX 15 15 1 -1 +BITMAP +4828 +4828 +4824 +4820 +7BFE +0820 +0820 +F820 +4850 +4850 +4850 +4888 +4888 +8904 +8A02 +ENDCHAR +STARTCHAR uni72C1 +ENCODING 29377 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +5088 +2088 +211C +57F2 +9090 +1090 +3090 +5090 +9090 +1110 +1112 +2212 +C40E +ENDCHAR +STARTCHAR uni72C2 +ENCODING 29378 +BBX 15 15 1 -1 +BITMAP +0800 +8FFC +5040 +2040 +2040 +5040 +9040 +13F8 +3040 +5040 +9040 +1040 +1040 +2040 +CFFE +ENDCHAR +STARTCHAR uni72C3 +ENCODING 29379 +BBX 15 15 1 -1 +BITMAP +0800 +8BF8 +5088 +2088 +2088 +5088 +9088 +17FE +3108 +5108 +9108 +1108 +1108 +2108 +C7FE +ENDCHAR +STARTCHAR uni72C4 +ENCODING 29380 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +5044 +2244 +2244 +5248 +9450 +1440 +3040 +5040 +90A0 +10A0 +1110 +2208 +CC06 +ENDCHAR +STARTCHAR uni72C5 +ENCODING 29381 +BBX 15 16 0 -2 +BITMAP +0008 +443C +29E0 +1020 +2820 +4820 +8820 +0BFE +1820 +2820 +4820 +8820 +0820 +0820 +51FC +2000 +ENDCHAR +STARTCHAR uni72C6 +ENCODING 29382 +BBX 14 15 1 -1 +BITMAP +0840 +8840 +5040 +2040 +27FC +5444 +9444 +1444 +3444 +57FC +9040 +1040 +1040 +2040 +C040 +ENDCHAR +STARTCHAR uni72C7 +ENCODING 29383 +BBX 15 16 0 -2 +BITMAP +0040 +4440 +2840 +1040 +2BFE +4840 +88E0 +08E0 +1950 +2950 +4A48 +8C44 +0842 +0840 +5040 +2040 +ENDCHAR +STARTCHAR uni72C8 +ENCODING 29384 +BBX 15 15 0 -2 +BITMAP +45FC +2904 +1104 +2924 +4924 +8924 +0924 +1924 +2924 +4924 +8850 +0848 +0884 +5102 +2602 +ENDCHAR +STARTCHAR uni72C9 +ENCODING 29385 +BBX 15 15 0 -2 +BITMAP +45FE +2810 +1010 +2820 +4820 +8868 +08A4 +1922 +2A22 +4820 +8820 +0820 +0800 +53FE +2000 +ENDCHAR +STARTCHAR uni72CA +ENCODING 29386 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +2008 +3FF8 +0110 +0108 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni72CB +ENCODING 29387 +BBX 15 15 0 -2 +BITMAP +45FC +2800 +1000 +2800 +4BFE +8820 +0820 +1928 +2924 +4A24 +8A22 +0C22 +0820 +50A0 +2040 +ENDCHAR +STARTCHAR uni72CC +ENCODING 29388 +BBX 15 15 1 -1 +BITMAP +0840 +8A40 +5240 +2240 +23FC +5440 +9440 +1040 +3040 +51F8 +9040 +1040 +1040 +2040 +C7FE +ENDCHAR +STARTCHAR uni72CD +ENCODING 29389 +BBX 15 16 0 -2 +BITMAP +0080 +4480 +29FC +1104 +2A04 +4DF4 +8914 +0914 +1914 +29F4 +4904 +8928 +0912 +0902 +50FE +2000 +ENDCHAR +STARTCHAR uni72CE +ENCODING 29390 +BBX 14 15 1 -1 +BITMAP +0800 +8FFC +5444 +2444 +2444 +57FC +9444 +1444 +3444 +57FC +9040 +1040 +1040 +2040 +C040 +ENDCHAR +STARTCHAR uni72CF +ENCODING 29391 +BBX 15 16 0 -2 +BITMAP +0080 +4480 +28FE +1100 +2A20 +4920 +892C +0974 +1BA4 +2924 +4934 +8928 +0922 +0902 +50FE +2000 +ENDCHAR +STARTCHAR uni72D0 +ENCODING 29392 +BBX 15 15 1 -1 +BITMAP +1008 +9078 +5788 +2408 +2488 +5488 +9488 +3488 +3488 +54A8 +9528 +1524 +19F4 +2B0C +D002 +ENDCHAR +STARTCHAR uni72D1 +ENCODING 29393 +BBX 15 16 0 -2 +BITMAP +0040 +4440 +28A0 +10A0 +2910 +4A48 +8C26 +0820 +1BF8 +2808 +4810 +8910 +08A0 +0840 +5020 +2020 +ENDCHAR +STARTCHAR uni72D2 +ENCODING 29394 +BBX 15 15 1 -1 +BITMAP +0920 +8920 +57FC +2124 +2124 +57FC +9520 +1520 +37FE +5122 +9122 +1122 +1222 +222C +C420 +ENDCHAR +STARTCHAR uni72D3 +ENCODING 29395 +BBX 15 16 0 -2 +BITMAP +0010 +4410 +2810 +11FE +2912 +4914 +8910 +09FC +1944 +2944 +4928 +8928 +0910 +0A28 +5244 +2482 +ENDCHAR +STARTCHAR uni72D4 +ENCODING 29396 +BBX 15 15 0 -2 +BITMAP +45FC +2904 +1104 +2904 +49FC +8900 +0940 +1944 +2948 +4970 +8940 +0942 +0A42 +523E +2400 +ENDCHAR +STARTCHAR uni72D5 +ENCODING 29397 +BBX 14 16 0 -2 +BITMAP +0020 +8920 +5120 +2220 +52FC +94A4 +1724 +1124 +3224 +5224 +94A4 +17A4 +10C4 +1044 +A094 +4108 +ENDCHAR +STARTCHAR uni72D6 +ENCODING 29398 +BBX 15 16 0 -2 +BITMAP +0040 +4420 +2820 +13FE +2A02 +4C04 +8800 +0890 +1890 +2890 +4888 +8908 +0908 +0904 +5204 +2402 +ENDCHAR +STARTCHAR uni72D7 +ENCODING 29399 +BBX 14 15 1 -1 +BITMAP +0900 +8900 +53FC +2404 +6804 +93E4 +1224 +1224 +3224 +5224 +93E4 +1004 +1008 +2008 +C070 +ENDCHAR +STARTCHAR uni72D8 +ENCODING 29400 +BBX 15 16 0 -2 +BITMAP +0028 +4424 +2824 +1020 +2BFE +4A20 +8A24 +0A24 +1A24 +2A28 +4A28 +8A90 +0B12 +0A2A +5046 +2082 +ENDCHAR +STARTCHAR uni72D9 +ENCODING 29401 +BBX 15 15 1 -1 +BITMAP +0800 +8BF8 +5208 +2208 +2208 +53F8 +9208 +1208 +3208 +53F8 +9208 +1208 +1208 +2208 +CFFE +ENDCHAR +STARTCHAR uni72DA +ENCODING 29402 +BBX 15 15 0 -2 +BITMAP +4400 +29FC +1104 +2904 +4904 +89FC +0904 +1904 +2904 +49FC +8904 +0800 +0800 +53FE +2000 +ENDCHAR +STARTCHAR uni72DB +ENCODING 29403 +BBX 14 15 1 -1 +BITMAP +0840 +8840 +5080 +23FC +2204 +5204 +9204 +1204 +33FC +5204 +9204 +1204 +1204 +2204 +C3FC +ENDCHAR +STARTCHAR uni72DC +ENCODING 29404 +BBX 15 16 0 -2 +BITMAP +0020 +4420 +2820 +1020 +2BFE +4820 +8820 +0820 +19FC +2904 +4904 +8904 +0904 +0904 +51FC +2104 +ENDCHAR +STARTCHAR uni72DD +ENCODING 29405 +BBX 15 16 0 -2 +BITMAP +0080 +4480 +2880 +11FE +2902 +4A04 +8C20 +0820 +1928 +2924 +4A24 +8A22 +0C22 +0820 +50A0 +2040 +ENDCHAR +STARTCHAR uni72DE +ENCODING 29406 +BBX 15 16 0 -2 +BITMAP +0040 +4420 +2820 +13FE +2A02 +4C04 +8800 +0800 +1BFE +2820 +4820 +8820 +0820 +0820 +50A0 +2040 +ENDCHAR +STARTCHAR uni72DF +ENCODING 29407 +BBX 15 15 0 -2 +BITMAP +45FE +2800 +1000 +29FC +4904 +8904 +09FC +1904 +2904 +49FC +8904 +0800 +0800 +53FE +2000 +ENDCHAR +STARTCHAR uni72E0 +ENCODING 29408 +BBX 15 15 1 -1 +BITMAP +0800 +8BF8 +5208 +2208 +23F8 +5208 +9208 +1208 +33FA +5224 +9228 +1210 +1210 +23C8 +CE06 +ENDCHAR +STARTCHAR uni72E1 +ENCODING 29409 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +5040 +2FFE +2208 +5404 +9912 +1110 +30A0 +50A0 +9040 +10A0 +1110 +2208 +CC06 +ENDCHAR +STARTCHAR uni72E2 +ENCODING 29410 +BBX 15 15 1 -1 +BITMAP +0880 +8880 +51F8 +2108 +2288 +5450 +9020 +10D8 +3706 +51F8 +9108 +1108 +1108 +2108 +C1F8 +ENDCHAR +STARTCHAR uni72E3 +ENCODING 29411 +BBX 15 16 0 -2 +BITMAP +0090 +4490 +2890 +1292 +2994 +4898 +8890 +0998 +1A94 +2C92 +4890 +8890 +0912 +0912 +5212 +240E +ENDCHAR +STARTCHAR uni72E4 +ENCODING 29412 +BBX 15 16 0 -2 +BITMAP +0020 +4420 +2820 +13FE +2820 +4820 +89FC +0800 +1800 +29FC +4904 +8904 +0904 +0904 +51FC +2104 +ENDCHAR +STARTCHAR uni72E5 +ENCODING 29413 +BBX 14 16 0 -2 +BITMAP +0080 +4480 +29FC +1104 +2A04 +49E4 +8924 +0924 +19E4 +2924 +4924 +89E4 +0904 +0804 +5028 +2010 +ENDCHAR +STARTCHAR uni72E6 +ENCODING 29414 +BBX 15 15 0 -2 +BITMAP +8BF8 +52A8 +22A8 +52A8 +9FFE +12A8 +12A8 +32A8 +5FFE +92A8 +12A8 +12A8 +12A8 +A208 +4218 +ENDCHAR +STARTCHAR uni72E7 +ENCODING 29415 +BBX 15 16 0 -2 +BITMAP +0008 +443C +29E0 +1020 +2820 +4BFE +8820 +0820 +1820 +29FC +4904 +8904 +0904 +0904 +51FC +2104 +ENDCHAR +STARTCHAR uni72E8 +ENCODING 29416 +BBX 15 16 0 -2 +BITMAP +0028 +4424 +2824 +1020 +2BFE +4820 +8924 +0924 +1924 +2BA8 +4928 +8910 +0A12 +0A2A +5446 +2082 +ENDCHAR +STARTCHAR uni72E9 +ENCODING 29417 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +57FE +2402 +2412 +5010 +97FE +1010 +3210 +5110 +9090 +1010 +1010 +2010 +C070 +ENDCHAR +STARTCHAR uni72EA +ENCODING 29418 +BBX 15 15 0 -2 +BITMAP +45FE +2902 +1102 +297A +4902 +8902 +097A +194A +294A +494A +897A +0902 +0902 +510A +2104 +ENDCHAR +STARTCHAR uni72EB +ENCODING 29419 +BBX 15 16 0 -2 +BITMAP +0040 +4440 +2844 +13F4 +2848 +4850 +8FFE +0840 +1880 +2984 +4A98 +8CE0 +0882 +0882 +507E +2000 +ENDCHAR +STARTCHAR uni72EC +ENCODING 29420 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +5040 +27FC +2444 +5444 +9444 +3444 +37FC +5040 +9048 +1044 +104C +2072 +CF82 +ENDCHAR +STARTCHAR uni72ED +ENCODING 29421 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +5040 +27FC +2040 +5444 +9248 +1040 +3FFE +5040 +90A0 +10A0 +1110 +2208 +CC06 +ENDCHAR +STARTCHAR uni72EE +ENCODING 29422 +BBX 15 16 0 -2 +BITMAP +0100 +89FE +5110 +2510 +557C +9554 +1554 +1554 +3554 +5554 +9554 +1154 +125C +1210 +A410 +4810 +ENDCHAR +STARTCHAR uni72EF +ENCODING 29423 +BBX 15 16 0 -2 +BITMAP +0040 +8840 +50A0 +2110 +5208 +9406 +11F0 +1000 +3000 +57FC +9040 +1080 +1110 +1208 +A7FC +4204 +ENDCHAR +STARTCHAR uni72F0 +ENCODING 29424 +BBX 15 16 0 -2 +BITMAP +0080 +4480 +29F0 +1210 +2820 +4BFC +8844 +0844 +1FFE +2844 +4844 +8BFC +0844 +0840 +5140 +2080 +ENDCHAR +STARTCHAR uni72F1 +ENCODING 29425 +BBX 15 16 0 -2 +BITMAP +0020 +9428 +5224 +2224 +5020 +9E20 +12FC +1220 +3220 +5250 +92D0 +1350 +1288 +1088 +A104 +4202 +ENDCHAR +STARTCHAR uni72F2 +ENCODING 29426 +BBX 15 15 0 -2 +BITMAP +8810 +5790 +2090 +5110 +9210 +12D8 +1354 +3254 +5692 +9A92 +1312 +1210 +1210 +A250 +4620 +ENDCHAR +STARTCHAR uni72F3 +ENCODING 29427 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +50A0 +2110 +2208 +5DF6 +9040 +1040 +33FC +5040 +9248 +1248 +1444 +2842 +C0C0 +ENDCHAR +STARTCHAR uni72F4 +ENCODING 29428 +BBX 15 16 0 -2 +BITMAP +0220 +8A24 +5228 +23B0 +5220 +9222 +12A2 +131E +3040 +5040 +93FC +1040 +1040 +1040 +A7FE +4000 +ENDCHAR +STARTCHAR uni72F5 +ENCODING 29429 +BBX 15 16 0 -2 +BITMAP +0090 +4488 +2880 +13FE +28A0 +48A8 +88B0 +08A4 +18A8 +28B0 +4924 +892A +0932 +0A22 +52DE +2400 +ENDCHAR +STARTCHAR uni72F6 +ENCODING 29430 +BBX 15 16 0 -2 +BITMAP +0184 +4468 +2830 +10C8 +2B04 +4840 +8BFE +08A0 +1920 +2BFC +4D24 +8924 +0934 +0928 +5020 +2020 +ENDCHAR +STARTCHAR uni72F7 +ENCODING 29431 +BBX 14 15 1 -1 +BITMAP +0800 +8BFC +5204 +2204 +23FC +5000 +93FC +1204 +33FC +5204 +9204 +13FC +1204 +2204 +C21C +ENDCHAR +STARTCHAR uni72F8 +ENCODING 29432 +BBX 15 15 1 -1 +BITMAP +0800 +8BFC +5244 +2244 +23FC +5244 +9244 +3244 +33FC +5040 +9040 +13FC +1040 +2040 +CFFE +ENDCHAR +STARTCHAR uni72F9 +ENCODING 29433 +BBX 15 15 1 -1 +BITMAP +1040 +9040 +5FFE +2040 +2248 +5248 +9248 +1554 +3554 +58A2 +90A0 +1110 +1110 +2208 +CC06 +ENDCHAR +STARTCHAR uni72FA +ENCODING 29434 +BBX 15 15 1 -1 +BITMAP +0800 +8BF8 +5000 +27FE +2000 +53F8 +9000 +13F8 +3000 +5000 +93F8 +1208 +1208 +2208 +C3F8 +ENDCHAR +STARTCHAR uni72FB +ENCODING 29435 +BBX 15 15 1 -1 +BITMAP +0880 +8890 +5138 +27D4 +2090 +5110 +9E9E +1080 +31F8 +5608 +9110 +10A0 +1060 +2198 +CE06 +ENDCHAR +STARTCHAR uni72FC +ENCODING 29436 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +53F8 +2208 +2208 +53F8 +9208 +1208 +33FC +5248 +9250 +1220 +1210 +23C8 +CE06 +ENDCHAR +STARTCHAR uni72FD +ENCODING 29437 +BBX 15 15 1 -1 +BITMAP +0800 +8BF8 +5208 +2208 +23F8 +5208 +9208 +13F8 +3208 +5208 +9208 +13F8 +1100 +2208 +CC06 +ENDCHAR +STARTCHAR uni72FE +ENCODING 29438 +BBX 15 16 0 -2 +BITMAP +0104 +890E +5130 +2120 +57E0 +9120 +113E +1164 +31A4 +5724 +9124 +1124 +1124 +1124 +A544 +4284 +ENDCHAR +STARTCHAR uni72FF +ENCODING 29439 +BBX 15 16 0 -2 +BITMAP +0004 +440E +2BB8 +1088 +2888 +4928 +892E +0BA8 +18A8 +2AA8 +4AA8 +893E +0900 +0A80 +547E +2800 +ENDCHAR +STARTCHAR uni7300 +ENCODING 29440 +BBX 15 16 0 -2 +BITMAP +0010 +8A10 +5110 +2110 +5454 +9252 +1252 +1090 +3010 +5114 +9604 +1208 +1208 +1210 +A220 +40C0 +ENDCHAR +STARTCHAR uni7301 +ENCODING 29441 +BBX 14 16 0 -2 +BITMAP +0084 +89C4 +5704 +2114 +5114 +9114 +1FD4 +1114 +3314 +5394 +9554 +1504 +1904 +1104 +A114 +4108 +ENDCHAR +STARTCHAR uni7302 +ENCODING 29442 +BBX 15 15 0 -2 +BITMAP +45FC +2904 +11FC +2904 +49FC +8800 +0800 +19FC +2820 +4820 +8BFE +0820 +0820 +5020 +2020 +ENDCHAR +STARTCHAR uni7303 +ENCODING 29443 +BBX 15 16 0 -2 +BITMAP +0040 +8840 +50A0 +20A0 +5110 +9208 +15F6 +1000 +3088 +5048 +9248 +1150 +1110 +1020 +A7FE +4000 +ENDCHAR +STARTCHAR uni7304 +ENCODING 29444 +BBX 15 16 0 -2 +BITMAP +0040 +4420 +2BFE +1000 +2800 +49FC +8904 +0904 +1904 +29FC +4820 +88A8 +0924 +0A22 +50A0 +2040 +ENDCHAR +STARTCHAR uni7305 +ENCODING 29445 +BBX 15 16 0 -2 +BITMAP +0090 +8890 +5090 +279E +5090 +9090 +1090 +139C +3090 +5090 +9090 +179E +1090 +1090 +A090 +4090 +ENDCHAR +STARTCHAR uni7306 +ENCODING 29446 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +7C7C +0440 +3C78 +0440 +7C7C +0440 +0440 +0120 +0110 +7FFC +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7307 +ENCODING 29447 +BBX 15 15 1 -1 +BITMAP +0840 +887C +5040 +27FE +2402 +5444 +9478 +15C0 +3442 +543E +9400 +1490 +1492 +2892 +C30E +ENDCHAR +STARTCHAR uni7308 +ENCODING 29448 +BBX 15 16 0 -2 +BITMAP +0040 +4480 +29FC +1124 +2924 +49FC +8924 +0944 +19FC +2890 +4910 +8BFE +0810 +0810 +5010 +2010 +ENDCHAR +STARTCHAR uni7309 +ENCODING 29449 +BBX 15 16 0 -2 +BITMAP +0088 +4488 +2BFE +1088 +2888 +48F8 +8888 +0888 +18F8 +2888 +4888 +8BFE +0800 +0888 +5104 +2202 +ENDCHAR +STARTCHAR uni730A +ENCODING 29450 +BBX 15 15 1 -1 +BITMAP +0840 +8880 +531C +2204 +2204 +539C +9204 +1204 +33FC +5090 +9090 +1090 +1112 +2212 +C40E +ENDCHAR +STARTCHAR uni730B +ENCODING 29451 +BBX 15 16 0 -2 +BITMAP +0110 +0108 +FFFE +0280 +0440 +0820 +3018 +C006 +1428 +1224 +FDFE +1020 +2850 +2450 +4488 +8106 +ENDCHAR +STARTCHAR uni730C +ENCODING 29452 +BBX 15 16 0 -2 +BITMAP +0810 +0814 +0812 +FF12 +0810 +2AFE +2A10 +2A10 +5D10 +8828 +1C28 +2A28 +4944 +8844 +0884 +0902 +ENDCHAR +STARTCHAR uni730D +ENCODING 29453 +BBX 15 16 0 -2 +BITMAP +0040 +8840 +5040 +27FC +5040 +9248 +1248 +1248 +3554 +50E0 +9150 +1150 +1248 +1444 +A842 +4040 +ENDCHAR +STARTCHAR uni730E +ENCODING 29454 +BBX 15 16 0 -2 +BITMAP +0088 +4488 +2888 +13FE +2888 +4888 +8FFE +0800 +19FC +2904 +4904 +89FC +0904 +0904 +51FC +2104 +ENDCHAR +STARTCHAR uni730F +ENCODING 29455 +BBX 14 16 0 -2 +BITMAP +0040 +8820 +53FC +2204 +5204 +93FC +1200 +12FC +3284 +52FC +9284 +12FC +1484 +1484 +A894 +4088 +ENDCHAR +STARTCHAR uni7310 +ENCODING 29456 +BBX 15 16 0 -2 +BITMAP +0208 +8908 +5110 +27FC +5040 +9040 +13F8 +1040 +3080 +5FFE +9120 +1120 +1220 +1222 +A422 +481E +ENDCHAR +STARTCHAR uni7311 +ENCODING 29457 +BBX 15 15 0 -2 +BITMAP +45FC +2904 +1104 +29FC +4904 +8904 +09FC +1800 +2912 +49D4 +8918 +0910 +0952 +5192 +210E +ENDCHAR +STARTCHAR uni7312 +ENCODING 29458 +BBX 14 15 2 -1 +BITMAP +FC40 +8450 +FC48 +8448 +FC40 +03FC +FC40 +8440 +FC40 +84A0 +84A0 +FC90 +8510 +8508 +9E04 +ENDCHAR +STARTCHAR uni7313 +ENCODING 29459 +BBX 15 15 0 -2 +BITMAP +8BF8 +5248 +2248 +53F8 +9248 +1248 +13F8 +3040 +57FC +90E0 +1150 +1248 +1446 +A040 +4040 +ENDCHAR +STARTCHAR uni7314 +ENCODING 29460 +BBX 15 16 0 -2 +BITMAP +0040 +4420 +2BFE +1202 +2800 +49FC +8800 +0800 +1BFE +2820 +4928 +8924 +0A22 +0C22 +50A0 +2040 +ENDCHAR +STARTCHAR uni7315 +ENCODING 29461 +BBX 15 16 0 -2 +BITMAP +0020 +9720 +5120 +213E +5142 +9744 +1490 +1410 +3410 +5754 +9152 +1152 +1192 +1110 +A550 +4220 +ENDCHAR +STARTCHAR uni7316 +ENCODING 29462 +BBX 14 15 1 -1 +BITMAP +0800 +8BF8 +5208 +23F8 +2208 +5208 +93F8 +1000 +37FC +5404 +9404 +17FC +1404 +2404 +C7FC +ENDCHAR +STARTCHAR uni7317 +ENCODING 29463 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +57FC +20A0 +2110 +560C +9000 +1FFE +3008 +53C8 +9248 +1248 +13C8 +2008 +C038 +ENDCHAR +STARTCHAR uni7318 +ENCODING 29464 +BBX 15 15 1 -1 +BITMAP +1102 +9502 +5512 +6FD2 +2912 +6112 +AFD2 +2112 +2112 +6FD2 +A952 +2942 +2942 +49C2 +810E +ENDCHAR +STARTCHAR uni7319 +ENCODING 29465 +BBX 15 15 1 -1 +BITMAP +0870 +8B90 +5248 +2448 +27F8 +5048 +9048 +1FFE +3048 +5048 +97F8 +1040 +1040 +2040 +C1C0 +ENDCHAR +STARTCHAR uni731A +ENCODING 29466 +BBX 15 16 0 -2 +BITMAP +00A0 +4490 +2880 +11FE +2910 +4B10 +8DFC +0910 +1910 +29FC +4910 +8910 +0910 +09FE +5100 +2100 +ENDCHAR +STARTCHAR uni731B +ENCODING 29467 +BBX 15 15 1 -1 +BITMAP +0800 +8BF8 +5010 +2020 +2040 +5FFE +9040 +1040 +31C0 +5000 +97FC +1524 +1524 +2524 +CFFE +ENDCHAR +STARTCHAR uni731C +ENCODING 29468 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +57FC +2040 +23F8 +5040 +9FFE +1000 +33F8 +5248 +9248 +13F8 +1208 +2208 +C238 +ENDCHAR +STARTCHAR uni731D +ENCODING 29469 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +57FC +2000 +2110 +5110 +92A8 +14A4 +3000 +5040 +9FFE +1040 +1040 +2040 +C040 +ENDCHAR +STARTCHAR uni731E +ENCODING 29470 +BBX 15 16 0 -2 +BITMAP +0040 +8840 +50A0 +2110 +5208 +95F6 +1040 +1040 +37FC +5040 +9040 +13F8 +1208 +1208 +A3F8 +4208 +ENDCHAR +STARTCHAR uni731F +ENCODING 29471 +BBX 15 15 1 -1 +BITMAP +1484 +9444 +5248 +2210 +27F8 +5488 +9488 +17F8 +3488 +5488 +97F8 +1488 +148A +288A +D086 +ENDCHAR +STARTCHAR uni7320 +ENCODING 29472 +BBX 15 16 0 -2 +BITMAP +0090 +4490 +2890 +13FC +2A94 +4A94 +8A94 +0BFC +1A94 +2A94 +4A94 +8FFE +0800 +0890 +5108 +2204 +ENDCHAR +STARTCHAR uni7321 +ENCODING 29473 +BBX 15 15 0 -2 +BITMAP +8BFE +5252 +2252 +5252 +93FE +1020 +1040 +30FC +5104 +9288 +1050 +1020 +1040 +A180 +4600 +ENDCHAR +STARTCHAR uni7322 +ENCODING 29474 +BBX 15 16 0 -2 +BITMAP +0100 +891E +5112 +27D2 +5112 +911E +1112 +17D2 +3452 +545E +9452 +17D2 +1452 +1022 +A02A +4044 +ENDCHAR +STARTCHAR uni7323 +ENCODING 29475 +BBX 15 15 0 -2 +BITMAP +4488 +2A52 +1222 +2A52 +4A8A +8A02 +0BFE +1888 +2944 +4A7A +8888 +0950 +0820 +50D8 +2706 +ENDCHAR +STARTCHAR uni7324 +ENCODING 29476 +BBX 15 16 0 -2 +BITMAP +0010 +45D4 +2858 +1252 +298C +4888 +8904 +0AFA +1820 +2820 +49FE +8820 +0850 +0888 +5104 +2202 +ENDCHAR +STARTCHAR uni7325 +ENCODING 29477 +BBX 15 15 1 -1 +BITMAP +0800 +8FFC +5444 +27FC +2444 +5444 +97FC +1000 +3FFE +5244 +9244 +1228 +1210 +2388 +CE06 +ENDCHAR +STARTCHAR uni7326 +ENCODING 29478 +BBX 15 15 0 -2 +BITMAP +97FC +5404 +2434 +65C4 +A444 +25F4 +2554 +6554 +A5F4 +2444 +2454 +25F4 +2494 +A806 +5002 +ENDCHAR +STARTCHAR uni7327 +ENCODING 29479 +BBX 14 15 1 -1 +BITMAP +0800 +8BF8 +5208 +2278 +2248 +5248 +97FC +1404 +35F4 +5514 +9514 +15F4 +1404 +2404 +C41C +ENDCHAR +STARTCHAR uni7328 +ENCODING 29480 +BBX 15 15 1 -1 +BITMAP +083C +8FC0 +5248 +2424 +27FC +5100 +9FFE +1100 +31F8 +5208 +9610 +1920 +10C0 +21B0 +CE0E +ENDCHAR +STARTCHAR uni7329 +ENCODING 29481 +BBX 15 15 1 -1 +BITMAP +0800 +8BF8 +5208 +23F8 +2208 +5208 +93F8 +1240 +33FC +5440 +9040 +13F8 +1040 +2040 +CFFE +ENDCHAR +STARTCHAR uni732A +ENCODING 29482 +BBX 15 15 1 -1 +BITMAP +0880 +8888 +57F8 +2090 +2090 +5FFE +9040 +1080 +33F8 +5E08 +9208 +13F8 +1208 +2208 +C3F8 +ENDCHAR +STARTCHAR uni732B +ENCODING 29483 +BBX 15 15 1 -1 +BITMAP +0910 +8910 +5FFE +2110 +2110 +5000 +97FC +1444 +3444 +5444 +97FC +1444 +1444 +2444 +C7FC +ENDCHAR +STARTCHAR uni732C +ENCODING 29484 +BBX 14 15 1 -1 +BITMAP +0800 +8BFC +5244 +23FC +2244 +53FC +9000 +13FC +3204 +53FC +9204 +13FC +1204 +2204 +C21C +ENDCHAR +STARTCHAR uni732D +ENCODING 29485 +BBX 15 16 0 -2 +BITMAP +0100 +89F8 +5208 +23F0 +5010 +97FE +1080 +1144 +3668 +50B0 +9128 +1668 +10A4 +1122 +A6A0 +4040 +ENDCHAR +STARTCHAR uni732E +ENCODING 29486 +BBX 15 15 1 -1 +BITMAP +1010 +1014 +FE12 +1010 +10FE +FE10 +8210 +AA10 +9210 +BA28 +9228 +BA28 +9244 +9244 +8682 +ENDCHAR +STARTCHAR uni732F +ENCODING 29487 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +5444 +2444 +27FC +5000 +97FE +1040 +3080 +57FE +9492 +1492 +1492 +2492 +C496 +ENDCHAR +STARTCHAR uni7330 +ENCODING 29488 +BBX 15 16 0 -2 +BITMAP +0080 +449E +2BEA +108A +29CA +488A +8BEA +0892 +18A6 +2820 +4BFE +8820 +0850 +0888 +5104 +2602 +ENDCHAR +STARTCHAR uni7331 +ENCODING 29489 +BBX 15 15 1 -1 +BITMAP +0800 +8FFC +5108 +2090 +27FE +50A4 +9128 +1620 +3020 +5040 +9FFE +1150 +1248 +2C46 +C040 +ENDCHAR +STARTCHAR uni7332 +ENCODING 29490 +BBX 15 15 0 -2 +BITMAP +45FC +2904 +11FC +2904 +49FC +8880 +09FE +1A22 +2922 +4952 +8902 +09FA +0802 +5014 +2008 +ENDCHAR +STARTCHAR uni7333 +ENCODING 29491 +BBX 15 15 1 -1 +BITMAP +0800 +8FBC +5484 +2484 +2484 +57BC +9400 +147C +37A4 +5424 +9428 +1798 +1410 +2428 +C4C6 +ENDCHAR +STARTCHAR uni7334 +ENCODING 29492 +BBX 15 15 1 -1 +BITMAP +1200 +92F8 +5408 +6408 +25FE +6C40 +B440 +24F8 +2520 +6420 +A5FC +2420 +2450 +2488 +C706 +ENDCHAR +STARTCHAR uni7335 +ENCODING 29493 +BBX 14 16 0 -2 +BITMAP +0080 +8840 +53FC +2204 +5204 +93FC +1200 +1200 +33FC +5354 +9354 +15FC +1554 +1554 +A944 +410C +ENDCHAR +STARTCHAR uni7336 +ENCODING 29494 +BBX 15 15 1 -1 +BITMAP +0A08 +8910 +5FFE +20A0 +20A0 +57FC +94A4 +14A4 +353C +5604 +9404 +17FC +1404 +2404 +C7FC +ENDCHAR +STARTCHAR uni7337 +ENCODING 29495 +BBX 15 15 1 -1 +BITMAP +0614 +2214 +4112 +BE90 +14FE +7F10 +5510 +5510 +5710 +6128 +4128 +7F24 +4144 +7F42 +0082 +ENDCHAR +STARTCHAR uni7338 +ENCODING 29496 +BBX 14 15 0 -2 +BITMAP +8BFC +5224 +2224 +53FC +9200 +12FC +1284 +3284 +52FC +9284 +12FC +1284 +1284 +A4FC +4884 +ENDCHAR +STARTCHAR uni7339 +ENCODING 29497 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +5FFE +2150 +2150 +5248 +9444 +1802 +33F8 +5208 +93F8 +1208 +13F8 +2000 +CFFE +ENDCHAR +STARTCHAR uni733A +ENCODING 29498 +BBX 15 16 0 -2 +BITMAP +0008 +443C +2BC0 +1004 +2A44 +4928 +89FC +0A20 +1820 +2BFE +4820 +8924 +0924 +0924 +51FC +2004 +ENDCHAR +STARTCHAR uni733B +ENCODING 29499 +BBX 15 16 0 -2 +BITMAP +0006 +8F78 +5110 +2120 +5244 +9278 +1310 +1224 +367E +5A12 +9210 +1254 +1252 +1292 +A250 +4620 +ENDCHAR +STARTCHAR uni733C +ENCODING 29500 +BBX 15 16 0 -2 +BITMAP +0028 +4424 +2BFE +1020 +29FC +4924 +89FC +0924 +19FC +2924 +4808 +8BFE +0888 +0848 +5048 +2018 +ENDCHAR +STARTCHAR uni733D +ENCODING 29501 +BBX 15 15 1 -1 +BITMAP +0800 +8FFE +5402 +25FA +2108 +5108 +91F8 +1108 +3108 +51F8 +9040 +17FE +1000 +2108 +C606 +ENDCHAR +STARTCHAR uni733E +ENCODING 29502 +BBX 15 15 1 -1 +BITMAP +0800 +89F8 +5108 +2178 +2148 +57FE +9402 +15FA +3108 +51F8 +9108 +11F8 +1108 +2108 +C118 +ENDCHAR +STARTCHAR uni733F +ENCODING 29503 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +53F8 +2040 +27FC +5000 +93F8 +1208 +3208 +53F8 +90A4 +1328 +1D10 +21C8 +C706 +ENDCHAR +STARTCHAR uni7340 +ENCODING 29504 +BBX 15 16 0 -2 +BITMAP +0140 +965C +5444 +2444 +575C +9444 +1444 +17FC +3040 +57FC +9208 +1110 +10A0 +1040 +A1B0 +460E +ENDCHAR +STARTCHAR uni7341 +ENCODING 29505 +BBX 14 15 0 -2 +BITMAP +8BFC +5240 +23F8 +5240 +93F8 +1240 +1240 +33FC +5004 +9554 +1554 +1554 +1404 +A028 +4010 +ENDCHAR +STARTCHAR uni7342 +ENCODING 29506 +BBX 15 15 0 -2 +BITMAP +45FE +2910 +1120 +297C +4944 +897C +0944 +197C +2910 +4910 +8954 +0952 +0A92 +5250 +2420 +ENDCHAR +STARTCHAR uni7343 +ENCODING 29507 +BBX 15 16 0 -2 +BITMAP +0810 +4914 +4912 +4912 +7F10 +00FE +7F10 +0010 +7F10 +4128 +7F28 +4128 +2244 +0F44 +F084 +4102 +ENDCHAR +STARTCHAR uni7344 +ENCODING 29508 +BBX 15 15 1 -1 +BITMAP +0810 +8F10 +5014 +2F92 +2010 +577E +9010 +1710 +3010 +5028 +9728 +1528 +1544 +2544 +C782 +ENDCHAR +STARTCHAR uni7345 +ENCODING 29509 +BBX 15 15 1 -1 +BITMAP +0A00 +8A7E +5710 +2510 +257E +5552 +9752 +1452 +3452 +5752 +9552 +1552 +1556 +2710 +C010 +ENDCHAR +STARTCHAR uni7346 +ENCODING 29510 +BBX 15 16 0 -2 +BITMAP +0020 +4440 +29FC +1104 +29FC +4904 +89FC +0840 +1BFE +2888 +4924 +8A22 +0DFC +0820 +5020 +2020 +ENDCHAR +STARTCHAR uni7347 +ENCODING 29511 +BBX 15 16 0 -2 +BITMAP +0208 +8910 +57FC +2040 +5040 +93F8 +1040 +1080 +37FC +50A0 +9128 +1134 +123C +1222 +A422 +481E +ENDCHAR +STARTCHAR uni7348 +ENCODING 29512 +BBX 15 16 0 -2 +BITMAP +0208 +8908 +5110 +2000 +57FC +9000 +1110 +1208 +3404 +53F8 +92A8 +12A8 +12A8 +12A8 +AFFE +4000 +ENDCHAR +STARTCHAR uni7349 +ENCODING 29513 +BBX 15 16 0 -2 +BITMAP +0040 +8840 +57FC +2040 +53F8 +9080 +17FC +1110 +3268 +55C6 +9040 +13F8 +10E0 +1158 +A644 +4040 +ENDCHAR +STARTCHAR uni734A +ENCODING 29514 +BBX 15 16 0 -2 +BITMAP +0040 +8840 +50A0 +2190 +5248 +97FE +1A08 +13F8 +3208 +53F8 +9200 +13F8 +1508 +1508 +A9F8 +4108 +ENDCHAR +STARTCHAR uni734B +ENCODING 29515 +BBX 15 16 0 -2 +BITMAP +0040 +45FC +2904 +11FC +2904 +49FC +8904 +09FC +1820 +2924 +48A8 +8924 +0820 +0BFE +5020 +2020 +ENDCHAR +STARTCHAR uni734C +ENCODING 29516 +BBX 15 15 0 -2 +BITMAP +45F8 +2908 +11F8 +2908 +49F8 +8800 +0BFC +1A94 +2BFC +4800 +89F8 +0890 +0860 +5198 +2606 +ENDCHAR +STARTCHAR uni734D +ENCODING 29517 +BBX 15 16 0 -2 +BITMAP +0080 +8840 +53F8 +2110 +50A0 +97FE +1000 +13F8 +3208 +53F8 +9208 +13F8 +1120 +1122 +A222 +4C1E +ENDCHAR +STARTCHAR uni734E +ENCODING 29518 +BBX 15 15 1 -1 +BITMAP +0820 +48FC +4BA4 +78B8 +0BE0 +F808 +2FFE +2908 +4888 +8918 +0120 +FFFE +0280 +1C70 +E00E +ENDCHAR +STARTCHAR uni734F +ENCODING 29519 +BBX 15 15 1 -1 +BITMAP +0910 +8910 +5FFE +2110 +23F8 +5208 +93F8 +1208 +3208 +53F8 +9040 +1FFE +10A0 +2318 +CC06 +ENDCHAR +STARTCHAR uni7350 +ENCODING 29520 +BBX 15 15 1 -1 +BITMAP +0840 +8840 +57FC +2110 +2FFE +5000 +93F8 +1208 +33F8 +5208 +93F8 +1040 +1FFE +2040 +C040 +ENDCHAR +STARTCHAR uni7351 +ENCODING 29521 +BBX 15 16 0 -2 +BITMAP +0100 +8902 +511C +27D0 +5110 +97D0 +155E +17D4 +3554 +57D4 +9114 +17D4 +1114 +1124 +A124 +4144 +ENDCHAR +STARTCHAR uni7352 +ENCODING 29522 +BBX 15 15 1 -1 +BITMAP +0840 +7E40 +08FE +FF84 +0844 +FF28 +1010 +1F28 +2144 +CE92 +0108 +FFFE +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7353 +ENCODING 29523 +BBX 15 16 0 -2 +BITMAP +0108 +9108 +5108 +27D0 +511E +9794 +1124 +1FD4 +3214 +53D4 +9254 +1248 +1248 +14D4 +A424 +4842 +ENDCHAR +STARTCHAR uni7354 +ENCODING 29524 +BBX 15 16 0 -2 +BITMAP +0020 +4440 +29FC +1104 +29FC +4904 +89FC +0820 +1924 +28A8 +4924 +8820 +0BFE +0820 +5020 +2020 +ENDCHAR +STARTCHAR uni7355 +ENCODING 29525 +BBX 15 16 0 -2 +BITMAP +0020 +4622 +2BFE +1090 +2888 +49FE +8B10 +0D10 +19FE +2910 +4910 +89FE +0910 +0910 +51FE +2100 +ENDCHAR +STARTCHAR uni7356 +ENCODING 29526 +BBX 15 16 0 -2 +BITMAP +0020 +45FC +2820 +1088 +2BFE +4888 +89FC +0904 +19FC +2904 +49FC +8904 +09FC +0888 +5104 +2202 +ENDCHAR +STARTCHAR uni7357 +ENCODING 29527 +BBX 15 15 1 -1 +BITMAP +2000 +2FFE +AA28 +4A28 +495E +AFFA +28AA +2AA8 +2AA8 +6AA8 +AAA8 +2BF4 +3094 +2114 +C222 +ENDCHAR +STARTCHAR uni7358 +ENCODING 29528 +BBX 15 16 0 -2 +BITMAP +0820 +4920 +2A3E +7F48 +4948 +5DA8 +6B10 +4928 +4144 +4020 +0110 +FFFE +0280 +0C60 +3018 +C006 +ENDCHAR +STARTCHAR uni7359 +ENCODING 29529 +BBX 15 16 0 -2 +BITMAP +0108 +8908 +5548 +2390 +511E +97D4 +1564 +1554 +3554 +5754 +95D4 +1548 +1548 +1554 +A464 +44C2 +ENDCHAR +STARTCHAR uni735A +ENCODING 29530 +BBX 15 16 0 -2 +BITMAP +0088 +4488 +29FC +1088 +2888 +4BFE +8820 +09FC +1924 +29FC +4924 +89FC +0800 +0888 +5104 +2202 +ENDCHAR +STARTCHAR uni735B +ENCODING 29531 +BBX 15 16 0 -2 +BITMAP +00A0 +94A4 +52A8 +20A0 +57FC +9110 +10A0 +17FC +3040 +53F8 +9040 +17FC +10A0 +1110 +A208 +4C06 +ENDCHAR +STARTCHAR uni735C +ENCODING 29532 +BBX 15 16 0 -2 +BITMAP +0020 +4524 +28A8 +13FE +28A8 +4924 +8A22 +0904 +1904 +29DE +4A44 +8D54 +089E +0904 +5204 +2404 +ENDCHAR +STARTCHAR uni735D +ENCODING 29533 +BBX 15 15 0 -2 +BITMAP +45FC +2848 +1030 +2BFE +4852 +8894 +0B50 +1820 +2BFE +4A52 +8A8A +0B76 +0A52 +5272 +2206 +ENDCHAR +STARTCHAR uni735E +ENCODING 29534 +BBX 15 16 0 -2 +BITMAP +0020 +45FC +2888 +1050 +2BFE +4800 +89FC +0924 +19FC +2924 +49FC +8820 +09FC +0820 +53FE +2000 +ENDCHAR +STARTCHAR uni735F +ENCODING 29535 +BBX 15 16 0 -2 +BITMAP +0020 +4420 +29FC +1020 +2BFE +4908 +8B9C +0908 +1988 +2E3E +4800 +8BFE +0890 +0890 +5112 +220E +ENDCHAR +STARTCHAR uni7360 +ENCODING 29536 +BBX 15 16 0 -2 +BITMAP +0040 +9040 +57FC +20A0 +5514 +9208 +17FC +1A0A +33F8 +5208 +93F8 +1040 +1248 +1444 +A944 +4080 +ENDCHAR +STARTCHAR uni7361 +ENCODING 29537 +BBX 15 16 0 -2 +BITMAP +0080 +8B1C +5204 +2204 +539C +9204 +1204 +13FC +3100 +53FE +9402 +12AA +12AA +1402 +A014 +4008 +ENDCHAR +STARTCHAR uni7362 +ENCODING 29538 +BBX 15 16 0 -2 +BITMAP +0038 +8BC0 +5080 +27FE +5110 +9208 +15F6 +1910 +31F0 +5000 +97FC +1404 +15F4 +1514 +A5F4 +440C +ENDCHAR +STARTCHAR uni7363 +ENCODING 29539 +BBX 15 15 1 -1 +BITMAP +2110 +9114 +4212 +7F12 +4910 +7FFE +4910 +7F10 +0010 +FFA8 +0028 +7F28 +4144 +4144 +7F82 +ENDCHAR +STARTCHAR uni7364 +ENCODING 29540 +BBX 15 16 0 -2 +BITMAP +0208 +8908 +57C8 +2010 +579E +9494 +17A4 +1014 +3794 +5094 +9114 +11C8 +1708 +1114 +A524 +4242 +ENDCHAR +STARTCHAR uni7365 +ENCODING 29541 +BBX 15 16 0 -2 +BITMAP +0108 +8A08 +57C8 +2450 +57DE +9464 +17D4 +1214 +3114 +57D4 +9214 +13C8 +1248 +1454 +A554 +48A2 +ENDCHAR +STARTCHAR uni7366 +ENCODING 29542 +BBX 15 15 1 -1 +BITMAP +0910 +8FFE +5110 +23F8 +2208 +53F8 +9208 +13F8 +3100 +53FE +9642 +1A42 +12A2 +23F2 +C00C +ENDCHAR +STARTCHAR uni7367 +ENCODING 29543 +BBX 15 15 0 -2 +BITMAP +8BFC +5294 +2294 +53FC +9000 +17FE +1000 +33FC +5204 +93FC +10A2 +1114 +1308 +AD44 +4182 +ENDCHAR +STARTCHAR uni7368 +ENCODING 29544 +BBX 15 15 1 -1 +BITMAP +0800 +8FFC +5924 +2924 +2FFC +5200 +97FE +1C82 +37F2 +5492 +97F2 +10A2 +10F2 +2F0A +C00C +ENDCHAR +STARTCHAR uni7369 +ENCODING 29545 +BBX 15 16 0 -2 +BITMAP +0020 +893C +5120 +27FE +5010 +9014 +13FE +1210 +33F0 +5254 +9254 +12D4 +1368 +144A +A896 +4322 +ENDCHAR +STARTCHAR uni736A +ENCODING 29546 +BBX 15 15 1 -1 +BITMAP +0840 +88A0 +5318 +2CE6 +2000 +57FC +9444 +1554 +37FC +5000 +93F8 +1208 +13F8 +2208 +C3F8 +ENDCHAR +STARTCHAR uni736B +ENCODING 29547 +BBX 15 15 1 -1 +BITMAP +0840 +88A0 +5110 +2208 +2DF6 +5000 +97BC +14A4 +34A4 +57BC +9000 +1208 +1208 +2514 +C8A2 +ENDCHAR +STARTCHAR uni736C +ENCODING 29548 +BBX 15 15 1 -1 +BITMAP +1200 +93BE +548A +290A +27CA +5552 +9566 +17C0 +3554 +555E +97E4 +1444 +147E +2444 +C8C4 +ENDCHAR +STARTCHAR uni736D +ENCODING 29549 +BBX 15 16 0 -2 +BITMAP +0210 +9210 +5F9C +2224 +6248 +AFBE +2AA2 +2AAA +6FAA +A22A +272A +2AAA +3288 +2214 +A222 +4242 +ENDCHAR +STARTCHAR uni736E +ENCODING 29550 +BBX 15 15 1 -1 +BITMAP +1000 +9FFE +5248 +2444 +2FFE +5444 +96EC +1554 +36EC +5444 +96EC +1554 +16EC +2444 +C44C +ENDCHAR +STARTCHAR uni736F +ENCODING 29551 +BBX 15 15 1 -1 +BITMAP +081C +8FE0 +5040 +2FFE +2040 +57FC +9444 +1554 +37FC +5040 +93F8 +1040 +1FFE +2524 +C892 +ENDCHAR +STARTCHAR uni7370 +ENCODING 29552 +BBX 15 15 1 -1 +BITMAP +0820 +8820 +57FE +2442 +24A2 +5294 +9472 +1000 +33FC +5294 +93FC +1000 +17FE +2020 +C0E0 +ENDCHAR +STARTCHAR uni7371 +ENCODING 29553 +BBX 15 15 1 -1 +BITMAP +0840 +8FFE +5402 +23FC +2248 +5450 +91FC +1704 +31FC +5104 +91FC +1104 +11FC +2088 +C306 +ENDCHAR +STARTCHAR uni7372 +ENCODING 29554 +BBX 15 15 1 -1 +BITMAP +0908 +8FFE +5110 +23FE +2220 +57FC +9A20 +33FC +3220 +53FE +9000 +17FE +1108 +20F0 +C70E +ENDCHAR +STARTCHAR uni7373 +ENCODING 29555 +BBX 15 15 0 -2 +BITMAP +45FC +2820 +13FE +2A22 +49AC +8820 +09AC +1800 +2BFE +4820 +89FC +0954 +0954 +5154 +210C +ENDCHAR +STARTCHAR uni7374 +ENCODING 29556 +BBX 15 16 0 -2 +BITMAP +0110 +97FC +5110 +27FC +5404 +93F8 +1000 +17FC +3080 +5144 +96A8 +1170 +16A8 +1126 +A6A0 +4040 +ENDCHAR +STARTCHAR uni7375 +ENCODING 29557 +BBX 15 15 1 -1 +BITMAP +1222 +9444 +5222 +27FC +24A4 +5444 +94A4 +17FC +3000 +5568 +9448 +1568 +1448 +276A +CCC6 +ENDCHAR +STARTCHAR uni7376 +ENCODING 29558 +BBX 15 16 0 -2 +BITMAP +03FC +8840 +51F8 +2108 +51F8 +9108 +17FE +1442 +32A4 +528A +947A +1080 +11F8 +1288 +A070 +438E +ENDCHAR +STARTCHAR uni7377 +ENCODING 29559 +BBX 15 15 1 -1 +BITMAP +0820 +8820 +57FE +2488 +27FE +5488 +97FE +1420 +35FC +5524 +95FC +1524 +15FC +2888 +C306 +ENDCHAR +STARTCHAR uni7378 +ENCODING 29560 +BBX 15 15 1 -1 +BITMAP +F790 +9494 +F794 +0012 +7F10 +49FE +7F10 +4910 +7F10 +0038 +FFA8 +0028 +7F44 +4144 +7F82 +ENDCHAR +STARTCHAR uni7379 +ENCODING 29561 +BBX 15 16 0 -2 +BITMAP +0040 +887C +5040 +23FC +5244 +93F0 +1244 +12FC +32A8 +52F8 +92A8 +12F8 +1200 +15FC +A554 +4BFE +ENDCHAR +STARTCHAR uni737A +ENCODING 29562 +BBX 15 15 1 -1 +BITMAP +1200 +927E +5F92 +2212 +2FA6 +6A80 +AABC +2FA4 +623C +6724 +A73C +2AA4 +323C +4224 +8242 +ENDCHAR +STARTCHAR uni737B +ENCODING 29563 +BBX 15 15 1 -1 +BITMAP +0810 +0F14 +0812 +7F92 +4490 +5F7E +4490 +7F90 +4A10 +7FA8 +6AA8 +73A8 +6EC4 +A4C4 +2482 +ENDCHAR +STARTCHAR uni737C +ENCODING 29564 +BBX 15 15 1 -1 +BITMAP +2000 +3FFE +A524 +4622 +4FFE +AA22 +2B76 +2AAA +6F76 +6222 +A376 +22AA +2376 +2222 +CC22 +ENDCHAR +STARTCHAR uni737D +ENCODING 29565 +BBX 15 16 0 -2 +BITMAP +0040 +97FC +5000 +23B8 +52A8 +93B8 +1110 +17FC +3110 +57FC +9110 +1FFE +1128 +1310 +AD48 +4186 +ENDCHAR +STARTCHAR uni737E +ENCODING 29566 +BBX 15 16 0 -2 +BITMAP +0110 +8FFE +5110 +27BC +54A4 +97BC +1140 +1120 +33FE +5220 +97FC +1A20 +13FC +1220 +A3FE +4200 +ENDCHAR +STARTCHAR uni737F +ENCODING 29567 +BBX 15 15 0 -2 +BITMAP +97FE +5040 +22EE +62AA +ABEA +2AAE +2AE8 +6BAA +ACE6 +2288 +25F4 +2290 +2060 +A198 +4606 +ENDCHAR +STARTCHAR uni7380 +ENCODING 29568 +BBX 15 15 0 -2 +BITMAP +97FC +54A4 +24A4 +67FC +A210 +22A8 +24BE +6F68 +A23C +24A8 +2FBC +2028 +2AA8 +AABE +4020 +ENDCHAR +STARTCHAR uni7381 +ENCODING 29569 +BBX 15 15 1 -1 +BITMAP +27BC +24A4 +A7BC +4000 +4FFE +A810 +2B90 +691E +6FF4 +AAA4 +2B94 +2A94 +2B88 +5494 +80A2 +ENDCHAR +STARTCHAR uni7382 +ENCODING 29570 +BBX 15 16 0 -2 +BITMAP +0240 +97E2 +525C +2EF0 +6AB0 +AEF0 +201E +27D4 +6554 +A7D4 +2554 +27D4 +2114 +2FE4 +A124 +4144 +ENDCHAR +STARTCHAR uni7383 +ENCODING 29571 +BBX 15 16 0 -2 +BITMAP +03DE +4652 +2BDE +1252 +2BDE +48A0 +89FE +0B20 +1DFC +2920 +49FE +8800 +09FC +0888 +5070 +278E +ENDCHAR +STARTCHAR uni7384 +ENCODING 29572 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +FFF8 +0400 +0400 +0880 +1080 +3100 +0A00 +0440 +0420 +0830 +13C8 +FC08 +ENDCHAR +STARTCHAR uni7385 +ENCODING 29573 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1148 +FF48 +1144 +1244 +2242 +4448 +2848 +10C8 +1010 +2410 +4C20 +F240 +0380 +ENDCHAR +STARTCHAR uni7386 +ENCODING 29574 +BBX 15 15 0 -1 +BITMAP +1010 +0808 +0808 +FEFE +1010 +1010 +2020 +4242 +FCFC +4848 +1010 +2020 +4444 +FEFE +4242 +ENDCHAR +STARTCHAR uni7387 +ENCODING 29575 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0200 +644C +1290 +0100 +1250 +27A8 +4004 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7388 +ENCODING 29576 +BBX 15 16 0 -2 +BITMAP +1040 +0840 +087E +FE80 +1100 +101C +20E0 +42A0 +FCA2 +48A4 +10A8 +2090 +4490 +FEA8 +42C4 +0082 +ENDCHAR +STARTCHAR uni7389 +ENCODING 29577 +BBX 14 14 1 -1 +BITMAP +7FF8 +0200 +0200 +0200 +0200 +0200 +3FE0 +0200 +0200 +0220 +0210 +0208 +0200 +FFFC +ENDCHAR +STARTCHAR uni738A +ENCODING 29578 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +0120 +0110 +0108 +0100 +3FF8 +0100 +0100 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni738B +ENCODING 29579 +BBX 13 13 2 0 +BITMAP +7FF0 +0200 +0200 +0200 +0200 +0200 +3FE0 +0200 +0200 +0200 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni738C +ENCODING 29580 +BBX 15 15 0 -1 +BITMAP +0040 +0040 +FF40 +0840 +0840 +0840 +0840 +7E40 +0840 +0840 +0840 +0842 +0F42 +F042 +403E +ENDCHAR +STARTCHAR uni738D +ENCODING 29581 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +1000 +3FFC +2100 +4100 +8100 +0100 +3FF8 +0100 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni738E +ENCODING 29582 +BBX 15 14 0 -2 +BITMAP +FEFE +1010 +1010 +1010 +7C10 +1010 +1010 +1010 +1010 +1E10 +F010 +4010 +0050 +0020 +ENDCHAR +STARTCHAR uni738F +ENCODING 29583 +BBX 14 16 0 -2 +BITMAP +0040 +0040 +FE40 +1040 +11FC +1044 +7C44 +1044 +1044 +1084 +1084 +1E84 +F104 +4104 +0228 +0410 +ENDCHAR +STARTCHAR uni7390 +ENCODING 29584 +BBX 15 15 0 -2 +BITMAP +0020 +FD20 +1120 +1120 +1120 +7D20 +1120 +1120 +1110 +1110 +1E10 +E208 +4408 +0804 +1002 +ENDCHAR +STARTCHAR uni7391 +ENCODING 29585 +BBX 15 15 0 -2 +BITMAP +01F0 +FD10 +1110 +1110 +1110 +1110 +7D10 +1110 +1110 +1110 +1112 +1D12 +E212 +420E +0400 +ENDCHAR +STARTCHAR uni7392 +ENCODING 29586 +BBX 15 13 0 -1 +BITMAP +FDFC +1020 +1020 +1020 +7C20 +1020 +1020 +1020 +1020 +1C20 +E020 +4020 +03FE +ENDCHAR +STARTCHAR uni7393 +ENCODING 29587 +BBX 14 16 0 -2 +BITMAP +0040 +0040 +FE80 +10FC +1104 +1204 +7C04 +1104 +1084 +1044 +1044 +1E04 +F004 +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni7394 +ENCODING 29588 +BBX 14 15 1 -1 +BITMAP +0004 +0204 +FA44 +2244 +2244 +2244 +2244 +FA44 +2244 +2244 +2244 +3A44 +C444 +0404 +0804 +ENDCHAR +STARTCHAR uni7395 +ENCODING 29589 +BBX 15 14 1 -1 +BITMAP +03FC +F840 +2040 +2040 +2040 +2040 +F7FE +2040 +2040 +2040 +3840 +C040 +0040 +0040 +ENDCHAR +STARTCHAR uni7396 +ENCODING 29590 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +F880 +20F0 +2110 +2110 +FA10 +2020 +2020 +2040 +3860 +E090 +0108 +0204 +0C02 +ENDCHAR +STARTCHAR uni7397 +ENCODING 29591 +BBX 15 15 0 -2 +BITMAP +01FC +FC20 +1020 +1020 +1020 +7C20 +13FE +1020 +1020 +1020 +1C20 +E020 +4020 +00A0 +0040 +ENDCHAR +STARTCHAR uni7398 +ENCODING 29592 +BBX 15 14 1 -1 +BITMAP +03FC +F804 +2004 +2004 +2004 +23FC +FA00 +2200 +2200 +2200 +3A00 +C202 +0202 +01FE +ENDCHAR +STARTCHAR uni7399 +ENCODING 29593 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +FC80 +10FE +1080 +1100 +1100 +7DFC +1004 +1004 +1004 +13F4 +1C04 +E004 +4028 +0010 +ENDCHAR +STARTCHAR uni739A +ENCODING 29594 +BBX 15 15 0 -2 +BITMAP +01F8 +FC10 +1020 +1040 +1080 +7DFE +1092 +1092 +1092 +1112 +1D22 +E222 +4442 +0094 +0108 +ENDCHAR +STARTCHAR uni739B +ENCODING 29595 +BBX 15 15 0 -2 +BITMAP +03F8 +FC08 +1008 +1108 +1108 +1108 +7DFE +1002 +1002 +1002 +13FA +1C02 +E002 +4014 +0008 +ENDCHAR +STARTCHAR uni739C +ENCODING 29596 +BBX 15 15 1 -1 +BITMAP +0020 +0010 +F910 +2108 +2208 +2244 +2442 +F840 +2040 +2080 +2090 +3888 +C088 +0134 +07C4 +ENDCHAR +STARTCHAR uni739D +ENCODING 29597 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +FC80 +11FC +1120 +1220 +7C20 +1020 +13FE +1020 +1020 +1C20 +E020 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni739E +ENCODING 29598 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F840 +27FC +2040 +2040 +2040 +F840 +27FE +2040 +20A0 +38A0 +C110 +0208 +0C06 +ENDCHAR +STARTCHAR uni739F +ENCODING 29599 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F040 +2FFE +2208 +2208 +2208 +F110 +2110 +20A0 +2040 +30A0 +C110 +0208 +0C06 +ENDCHAR +STARTCHAR uni73A0 +ENCODING 29600 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F0A0 +2110 +2318 +2D16 +2110 +F110 +2110 +2110 +2110 +3210 +C210 +0410 +0810 +ENDCHAR +STARTCHAR uni73A1 +ENCODING 29601 +BBX 15 15 0 -2 +BITMAP +01FE +FE08 +1088 +1088 +1088 +7D08 +11FE +1018 +1028 +1048 +1E88 +F108 +4208 +0028 +0010 +ENDCHAR +STARTCHAR uni73A2 +ENCODING 29602 +BBX 15 15 1 -1 +BITMAP +00F0 +0010 +F110 +2108 +2208 +2404 +2BFA +F088 +2088 +2088 +2088 +3108 +C108 +0208 +0430 +ENDCHAR +STARTCHAR uni73A3 +ENCODING 29603 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FE20 +1000 +13FE +1040 +7C40 +1060 +1050 +1048 +1044 +1E44 +F040 +4040 +0040 +0040 +ENDCHAR +STARTCHAR uni73A4 +ENCODING 29604 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC20 +13FE +1020 +1020 +1020 +7DFC +1020 +1020 +1020 +13FE +1C20 +E020 +4020 +0020 +ENDCHAR +STARTCHAR uni73A5 +ENCODING 29605 +BBX 14 14 1 -1 +BITMAP +01FC +F904 +2104 +2104 +21FC +2104 +F904 +2104 +21FC +2104 +3A04 +C204 +0404 +081C +ENDCHAR +STARTCHAR uni73A6 +ENCODING 29606 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F040 +23F8 +2048 +2048 +2048 +F048 +2FFE +2040 +20A0 +30A0 +C110 +0208 +0C06 +ENDCHAR +STARTCHAR uni73A7 +ENCODING 29607 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FC80 +1088 +1104 +13FE +7C02 +1090 +1090 +1090 +1090 +1C90 +E112 +4112 +020E +0400 +ENDCHAR +STARTCHAR uni73A8 +ENCODING 29608 +BBX 15 14 1 -1 +BITMAP +03FC +F840 +2040 +2040 +2040 +2040 +FBFC +2040 +2040 +2040 +3840 +C040 +0040 +07FE +ENDCHAR +STARTCHAR uni73A9 +ENCODING 29609 +BBX 15 14 1 -1 +BITMAP +01F8 +F800 +2000 +2000 +27FE +F890 +2090 +2090 +2090 +3890 +E110 +0112 +0212 +040E +ENDCHAR +STARTCHAR uni73AA +ENCODING 29610 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1050 +1088 +1144 +1222 +7C20 +1000 +11FC +1004 +1008 +1C08 +E010 +4010 +0020 +ENDCHAR +STARTCHAR uni73AB +ENCODING 29611 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +F900 +23FE +2208 +2608 +2108 +F910 +2090 +20A0 +2040 +38A0 +C110 +0208 +0C06 +ENDCHAR +STARTCHAR uni73AC +ENCODING 29612 +BBX 15 15 0 -2 +BITMAP +01F8 +FD08 +1108 +1148 +1128 +7D28 +1108 +17FE +1108 +1108 +1D08 +E108 +4208 +0228 +0410 +ENDCHAR +STARTCHAR uni73AD +ENCODING 29613 +BBX 15 15 0 -1 +BITMAP +0010 +0110 +FD10 +1112 +1112 +1114 +7DD8 +1110 +1110 +1110 +1110 +1D12 +E152 +4192 +010E +ENDCHAR +STARTCHAR uni73AE +ENCODING 29614 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FC40 +13FE +1040 +1040 +11FC +7C40 +1040 +13FE +1042 +1042 +1C4A +E044 +4040 +0040 +ENDCHAR +STARTCHAR uni73AF +ENCODING 29615 +BBX 15 14 0 -2 +BITMAP +FDFE +1010 +1010 +1020 +1020 +7C68 +10A4 +1122 +1222 +1020 +1C20 +E020 +4020 +0020 +ENDCHAR +STARTCHAR uni73B0 +ENCODING 29616 +BBX 15 15 0 -2 +BITMAP +01FC +FD04 +1104 +1124 +1124 +1124 +7D24 +1124 +1154 +1050 +1090 +1C90 +E112 +4212 +040E +ENDCHAR +STARTCHAR uni73B1 +ENCODING 29617 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FE50 +1050 +1088 +1104 +7E02 +10F8 +1088 +1088 +10A8 +1E90 +F082 +4082 +007E +ENDCHAR +STARTCHAR uni73B2 +ENCODING 29618 +BBX 15 15 1 -1 +BITMAP +0040 +F0A0 +2110 +2208 +25F4 +2802 +F000 +27FC +2084 +2084 +2084 +3084 +C09C +0080 +0080 +ENDCHAR +STARTCHAR uni73B3 +ENCODING 29619 +BBX 15 15 1 -1 +BITMAP +0120 +0128 +F224 +2224 +2620 +2A3E +22E0 +F220 +2220 +2220 +2220 +3210 +C212 +020A +0204 +ENDCHAR +STARTCHAR uni73B4 +ENCODING 29620 +BBX 15 15 0 -1 +BITMAP +0048 +0148 +FD48 +1148 +1148 +13FE +7D48 +1148 +1148 +1148 +1178 +1D00 +E100 +4100 +01FE +ENDCHAR +STARTCHAR uni73B5 +ENCODING 29621 +BBX 15 15 1 -1 +BITMAP +0108 +0108 +F908 +2108 +27FE +2108 +2108 +F908 +2108 +21F8 +2108 +3908 +C108 +0108 +01F8 +ENDCHAR +STARTCHAR uni73B6 +ENCODING 29622 +BBX 15 15 0 -2 +BITMAP +01FC +FC20 +1020 +1124 +10A4 +7CA8 +1020 +13FE +1020 +1020 +1C20 +E020 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni73B7 +ENCODING 29623 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F840 +2040 +207E +2040 +2040 +F840 +23FC +2204 +2204 +3A04 +C204 +0204 +03FC +ENDCHAR +STARTCHAR uni73B8 +ENCODING 29624 +BBX 15 15 0 -1 +BITMAP +0080 +0080 +FDFC +1104 +1204 +15F4 +1114 +7D14 +1114 +11F4 +1104 +1128 +1D12 +E102 +40FE +ENDCHAR +STARTCHAR uni73B9 +ENCODING 29625 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F840 +27FE +2040 +2040 +2088 +F908 +2310 +20A0 +2040 +3848 +C088 +0134 +07C2 +ENDCHAR +STARTCHAR uni73BA +ENCODING 29626 +BBX 15 15 0 -1 +BITMAP +0800 +0800 +1FFC +2104 +4108 +0920 +1110 +2508 +0200 +7FFC +0100 +3FF8 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni73BB +ENCODING 29627 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F040 +27FE +2442 +2444 +2440 +F7FC +2504 +2504 +2488 +3850 +C860 +1198 +0606 +ENDCHAR +STARTCHAR uni73BC +ENCODING 29628 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +F910 +2110 +2512 +25DC +2510 +FD10 +2510 +2510 +2510 +3D10 +C5D2 +0712 +0C0E +ENDCHAR +STARTCHAR uni73BD +ENCODING 29629 +BBX 14 16 0 -2 +BITMAP +0080 +0080 +FD00 +11FC +1204 +1404 +7DE4 +1124 +1124 +1124 +11E4 +1D24 +E004 +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni73BE +ENCODING 29630 +BBX 14 15 0 -2 +BITMAP +01FC +FD24 +1124 +1124 +11FC +7D24 +1124 +1124 +11FC +1124 +1C20 +E020 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni73BF +ENCODING 29631 +BBX 14 14 1 -1 +BITMAP +07FC +F084 +2084 +2104 +2104 +2204 +F438 +2000 +23FC +2204 +3A04 +C204 +0204 +03FC +ENDCHAR +STARTCHAR uni73C0 +ENCODING 29632 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +F880 +23FC +2204 +2204 +2204 +FA04 +23FC +2204 +2204 +3A04 +C204 +0204 +03FC +ENDCHAR +STARTCHAR uni73C1 +ENCODING 29633 +BBX 15 14 0 -2 +BITMAP +FBFC +2100 +2100 +21F0 +2110 +F910 +2190 +2250 +2250 +3A10 +E212 +4292 +0312 +020E +ENDCHAR +STARTCHAR uni73C2 +ENCODING 29634 +BBX 15 14 1 -1 +BITMAP +07FE +F808 +2008 +23C8 +2248 +2248 +F248 +2248 +2248 +23C8 +3808 +E008 +0008 +0038 +ENDCHAR +STARTCHAR uni73C3 +ENCODING 29635 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC20 +11FC +1124 +1124 +11FC +7D24 +1124 +1124 +13FE +1104 +1D04 +E104 +4114 +0108 +ENDCHAR +STARTCHAR uni73C4 +ENCODING 29636 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FD20 +1120 +11FC +1120 +1220 +7C20 +1020 +11FC +1020 +1020 +1C20 +E020 +43FE +ENDCHAR +STARTCHAR uni73C5 +ENCODING 29637 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +F820 +23FE +2222 +2222 +23FE +FA22 +2222 +2222 +23FE +3820 +C020 +0020 +0020 +ENDCHAR +STARTCHAR uni73C6 +ENCODING 29638 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC40 +1088 +1104 +13FE +7C02 +1000 +11FC +1104 +1104 +1D04 +E104 +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni73C7 +ENCODING 29639 +BBX 15 14 0 -1 +BITMAP +01F8 +FD08 +1108 +1108 +11F8 +7D08 +1108 +1108 +11F8 +1108 +1D08 +E108 +4108 +07FE +ENDCHAR +STARTCHAR uni73C8 +ENCODING 29640 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +F200 +2FDE +2252 +2252 +2252 +F252 +2252 +2252 +2452 +3452 +C452 +085E +1180 +ENDCHAR +STARTCHAR uni73C9 +ENCODING 29641 +BBX 15 14 1 -1 +BITMAP +03FC +FA04 +2204 +2204 +23FC +2220 +FA20 +23FE +2220 +2220 +3A10 +C252 +038A +0E04 +ENDCHAR +STARTCHAR uni73CA +ENCODING 29642 +BBX 15 14 1 -1 +BITMAP +07FC +F524 +2524 +2524 +2524 +F524 +2FFE +2524 +2524 +2524 +3524 +C524 +0524 +052C +ENDCHAR +STARTCHAR uni73CB +ENCODING 29643 +BBX 15 15 1 -1 +BITMAP +0080 +0100 +F61E +2492 +2492 +2492 +2492 +F492 +2492 +2492 +2792 +3C9E +C090 +0110 +0210 +ENDCHAR +STARTCHAR uni73CC +ENCODING 29644 +BBX 15 14 0 -1 +BITMAP +0040 +F820 +2028 +2008 +2088 +2090 +FA94 +22A2 +22A2 +24C2 +3888 +E188 +4288 +0478 +ENDCHAR +STARTCHAR uni73CD +ENCODING 29645 +BBX 15 15 1 -1 +BITMAP +0040 +00A0 +F110 +2208 +2C46 +2080 +2108 +F610 +2020 +20C2 +2704 +2008 +3030 +C0C0 +0700 +ENDCHAR +STARTCHAR uni73CE +ENCODING 29646 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +F900 +23FE +2220 +2420 +2020 +F924 +2124 +2124 +2222 +3A22 +C020 +0020 +00E0 +ENDCHAR +STARTCHAR uni73CF +ENCODING 29647 +BBX 15 14 1 -1 +BITMAP +07FC +F840 +2040 +2040 +2040 +2040 +F3FC +2040 +2040 +2050 +3848 +C044 +0040 +0FFE +ENDCHAR +STARTCHAR uni73D0 +ENCODING 29648 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FC20 +11FC +1020 +1020 +1020 +7DFE +1020 +1020 +1040 +1048 +1C84 +E1FE +4082 +ENDCHAR +STARTCHAR uni73D1 +ENCODING 29649 +BBX 15 16 0 -2 +BITMAP +0090 +0088 +FC88 +1080 +13FE +10A0 +10A0 +7CA4 +10A4 +10A8 +1128 +1132 +1D22 +E262 +429E +0400 +ENDCHAR +STARTCHAR uni73D2 +ENCODING 29650 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FDFC +1024 +13FE +1024 +7DFC +1020 +1020 +11FC +1020 +1C20 +E3FE +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni73D3 +ENCODING 29651 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FC20 +13FE +1000 +1088 +7D04 +1202 +1088 +1088 +1050 +1C50 +E020 +4050 +0088 +0306 +ENDCHAR +STARTCHAR uni73D4 +ENCODING 29652 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F840 +27FE +2080 +2080 +F97C +2108 +2310 +2510 +21FE +3910 +E110 +4110 +0150 +0120 +ENDCHAR +STARTCHAR uni73D5 +ENCODING 29653 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FDFC +1044 +1084 +1084 +7D28 +1210 +1108 +13DE +114A +1D4A +E14A +4252 +035A +04A4 +ENDCHAR +STARTCHAR uni73D6 +ENCODING 29654 +BBX 15 15 1 -1 +BITMAP +0040 +0244 +F244 +2148 +2148 +2040 +2040 +F7FE +2090 +2090 +2090 +3110 +C110 +0212 +040E +ENDCHAR +STARTCHAR uni73D7 +ENCODING 29655 +BBX 15 16 0 -2 +BITMAP +0020 +0120 +FD20 +11FC +1120 +1220 +7C20 +13FE +1090 +1090 +1090 +1C90 +E112 +4112 +0212 +040E +ENDCHAR +STARTCHAR uni73D8 +ENCODING 29656 +BBX 15 16 0 -2 +BITMAP +0020 +0040 +FDF8 +1108 +1148 +1128 +7D28 +13FE +1108 +1148 +1128 +1D28 +E108 +4208 +0228 +0410 +ENDCHAR +STARTCHAR uni73D9 +ENCODING 29657 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +F110 +27FC +2110 +2110 +2110 +F110 +2110 +2FFE +2000 +3110 +C208 +0404 +0802 +ENDCHAR +STARTCHAR uni73DA +ENCODING 29658 +BBX 14 15 0 -2 +BITMAP +01FC +FD04 +1124 +1124 +1124 +7DFC +1124 +1124 +1154 +114C +1D8C +E104 +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni73DB +ENCODING 29659 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FDFE +1040 +1040 +10FC +7C84 +1184 +12FC +1084 +1084 +1CFC +E084 +4084 +0094 +0088 +ENDCHAR +STARTCHAR uni73DC +ENCODING 29660 +BBX 15 16 0 -2 +BITMAP +0104 +0084 +FC88 +1000 +13FE +1020 +7C20 +11FC +1020 +1020 +13FE +1C20 +E020 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni73DD +ENCODING 29661 +BBX 15 15 0 -2 +BITMAP +03DE +F842 +2042 +2252 +214A +F94A +2042 +20C6 +214A +2252 +3842 +E042 +4042 +014A +0084 +ENDCHAR +STARTCHAR uni73DE +ENCODING 29662 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +F3F8 +2208 +2608 +2990 +2060 +F198 +2E06 +23F8 +2208 +3208 +C208 +0208 +03F8 +ENDCHAR +STARTCHAR uni73DF +ENCODING 29663 +BBX 15 15 0 -2 +BITMAP +07F8 +F408 +2408 +27F8 +2488 +2488 +F4E8 +2528 +2528 +26A8 +244A +344A +C88A +0906 +1202 +ENDCHAR +STARTCHAR uni73E0 +ENCODING 29664 +BBX 15 15 1 -1 +BITMAP +0040 +0240 +F240 +27FC +2440 +2840 +F040 +2FFE +2040 +20E0 +3150 +C248 +0C46 +0040 +0040 +ENDCHAR +STARTCHAR uni73E1 +ENCODING 29665 +BBX 15 14 1 -1 +BITMAP +FEFE +1010 +1010 +7C7C +1010 +1010 +1EFE +F100 +0100 +0280 +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni73E2 +ENCODING 29666 +BBX 15 15 0 -2 +BITMAP +01F8 +FD08 +1108 +11F8 +1108 +7D08 +11F8 +1144 +1148 +1130 +1D20 +E110 +4148 +0186 +0100 +ENDCHAR +STARTCHAR uni73E3 +ENCODING 29667 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +F9FE +2202 +2202 +27F2 +2112 +F912 +21F2 +2112 +2112 +39F2 +C004 +0004 +0038 +ENDCHAR +STARTCHAR uni73E4 +ENCODING 29668 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +FC80 +11FC +1120 +1220 +7C20 +1020 +17FE +1020 +1124 +1D24 +E124 +4124 +01FC +0004 +ENDCHAR +STARTCHAR uni73E5 +ENCODING 29669 +BBX 15 14 1 -1 +BITMAP +07FE +F908 +2108 +21F8 +2108 +2108 +F908 +21F8 +2108 +2108 +390E +C178 +0788 +0008 +ENDCHAR +STARTCHAR uni73E6 +ENCODING 29670 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC40 +11FE +1102 +1102 +7D7A +114A +114A +114A +114A +1D7A +E102 +4102 +010A +0104 +ENDCHAR +STARTCHAR uni73E7 +ENCODING 29671 +BBX 15 15 1 -1 +BITMAP +00A0 +00A0 +FCA4 +24A8 +22B0 +22A0 +20A0 +F8A0 +20B0 +23AC +24A0 +3920 +E122 +0222 +041E +ENDCHAR +STARTCHAR uni73E8 +ENCODING 29672 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1088 +1104 +1202 +11FC +7C00 +1000 +11FC +1104 +1104 +1D04 +E104 +41FC +0104 +ENDCHAR +STARTCHAR uni73E9 +ENCODING 29673 +BBX 15 15 1 -1 +BITMAP +0100 +023C +F400 +2800 +2100 +227E +2608 +FA08 +2208 +2208 +2208 +3208 +C208 +0208 +0238 +ENDCHAR +STARTCHAR uni73EA +ENCODING 29674 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +27FC +2040 +2040 +2040 +F7FE +2000 +2040 +2040 +27FC +3040 +C040 +0040 +0FFE +ENDCHAR +STARTCHAR uni73EB +ENCODING 29675 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FC20 +13FE +1040 +1088 +7D04 +13FE +1092 +1090 +1090 +1C90 +E112 +4112 +020E +0400 +ENDCHAR +STARTCHAR uni73EC +ENCODING 29676 +BBX 15 16 0 -2 +BITMAP +0028 +0024 +F824 +2020 +23FE +2220 +2224 +FA24 +2224 +23A8 +2228 +3A10 +E212 +442A +0446 +0882 +ENDCHAR +STARTCHAR uni73ED +ENCODING 29677 +BBX 15 15 1 -1 +BITMAP +0100 +F1FE +2910 +2910 +2910 +2910 +F910 +297C +2910 +2110 +2110 +3210 +C210 +0410 +08FE +ENDCHAR +STARTCHAR uni73EE +ENCODING 29678 +BBX 15 14 1 -1 +BITMAP +0FF8 +F808 +2808 +2BE8 +2888 +2888 +FBE8 +2AA8 +2AA8 +2AA8 +3AE8 +D08A +108A +2086 +ENDCHAR +STARTCHAR uni73EF +ENCODING 29679 +BBX 15 15 0 -1 +BITMAP +0040 +0040 +FC44 +11F4 +1048 +1050 +13FE +7C40 +1080 +1184 +1298 +10E0 +1C82 +E082 +407E +ENDCHAR +STARTCHAR uni73F0 +ENCODING 29680 +BBX 14 16 0 -2 +BITMAP +0020 +0124 +FCA4 +10A4 +10A8 +1020 +11FC +7C04 +1004 +1004 +11FC +1004 +1C04 +E004 +41FC +0004 +ENDCHAR +STARTCHAR uni73F1 +ENCODING 29681 +BBX 15 15 1 -1 +BITMAP +0080 +0482 +FC42 +2204 +2208 +2080 +2080 +FFFE +2108 +2108 +2210 +3BA0 +C060 +0198 +0604 +ENDCHAR +STARTCHAR uni73F2 +ENCODING 29682 +BBX 15 15 0 -2 +BITMAP +03FE +FA02 +2444 +2040 +23FC +2080 +F8A0 +2120 +21FC +2020 +3820 +E3FE +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni73F3 +ENCODING 29683 +BBX 15 16 0 -2 +BITMAP +0204 +0104 +F908 +2FE8 +2294 +22A4 +2288 +FA8A +2292 +2124 +2104 +3908 +E290 +4240 +043E +0800 +ENDCHAR +STARTCHAR uni73F4 +ENCODING 29684 +BBX 15 16 0 -2 +BITMAP +0010 +00D8 +FB94 +2094 +2090 +23FE +F890 +2094 +2094 +20D8 +2398 +3890 +E0AA +40CA +0286 +0102 +ENDCHAR +STARTCHAR uni73F5 +ENCODING 29685 +BBX 15 14 0 -1 +BITMAP +01FC +FD04 +1104 +1104 +11FC +7C00 +1000 +13FE +1020 +1020 +1DFC +E020 +4020 +03FE +ENDCHAR +STARTCHAR uni73F6 +ENCODING 29686 +BBX 15 16 0 -2 +BITMAP +0108 +0088 +FC90 +11FC +1024 +1024 +11FC +7D20 +1120 +11FE +1062 +10A2 +1D2A +E224 +4420 +0020 +ENDCHAR +STARTCHAR uni73F7 +ENCODING 29687 +BBX 15 16 0 -2 +BITMAP +0010 +0018 +FBD4 +2014 +2010 +27FE +2010 +F890 +2090 +22D0 +2290 +3A90 +E28A +42EA +0706 +0202 +ENDCHAR +STARTCHAR uni73F8 +ENCODING 29688 +BBX 15 14 1 -1 +BITMAP +07FE +F840 +2040 +23F8 +2088 +2088 +F888 +27FE +2000 +23FC +3A04 +C204 +0204 +03FC +ENDCHAR +STARTCHAR uni73F9 +ENCODING 29689 +BBX 15 15 1 -1 +BITMAP +0024 +0022 +F820 +27FE +2420 +2420 +27E4 +FCA4 +24A8 +24A8 +2490 +3C90 +CBAA +084A +1084 +ENDCHAR +STARTCHAR uni73FA +ENCODING 29690 +BBX 15 14 1 -1 +BITMAP +03F8 +F888 +2088 +27FE +2088 +2088 +FBF8 +2100 +21FC +2304 +3D04 +C904 +0104 +01FC +ENDCHAR +STARTCHAR uni73FB +ENCODING 29691 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +FCFE +1100 +12FC +1084 +7CA4 +1094 +13FE +1084 +1124 +1D14 +E1FE +4004 +0028 +0010 +ENDCHAR +STARTCHAR uni73FC +ENCODING 29692 +BBX 15 15 0 -2 +BITMAP +01FC +FD04 +1104 +11FC +1104 +7D04 +11FC +1104 +1104 +11FC +1C00 +E088 +4084 +0102 +0202 +ENDCHAR +STARTCHAR uni73FD +ENCODING 29693 +BBX 15 15 0 -2 +BITMAP +0006 +FBB8 +2088 +2088 +2108 +213E +FB88 +2088 +2288 +2288 +393E +E100 +4280 +047E +0800 +ENDCHAR +STARTCHAR uni73FE +ENCODING 29694 +BBX 15 14 1 -1 +BITMAP +03F0 +FA10 +23F0 +2210 +2210 +F3F0 +2210 +2210 +23F0 +3920 +E120 +0222 +0422 +181E +ENDCHAR +STARTCHAR uni73FF +ENCODING 29695 +BBX 15 15 0 -2 +BITMAP +01FC +FD04 +1104 +1104 +11FC +7C20 +1020 +1120 +113C +1120 +1D20 +E2A0 +4260 +043E +0800 +ENDCHAR +STARTCHAR uni7400 +ENCODING 29696 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1088 +1144 +1222 +10F8 +7C08 +1010 +1020 +11FC +1104 +1D04 +E104 +41FC +0104 +ENDCHAR +STARTCHAR uni7401 +ENCODING 29697 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FBFE +2200 +2400 +23FE +2024 +F828 +2120 +2120 +213C +3920 +C1A0 +0260 +041E +ENDCHAR +STARTCHAR uni7402 +ENCODING 29698 +BBX 15 16 0 -2 +BITMAP +0020 +0010 +FDFE +1000 +1000 +10FC +1000 +7C00 +10FC +1000 +1000 +10FC +1C84 +E084 +40FC +0084 +ENDCHAR +STARTCHAR uni7403 +ENCODING 29699 +BBX 15 15 1 -1 +BITMAP +0048 +F844 +2040 +2FFE +2040 +2444 +F248 +2270 +20E0 +2150 +2248 +3444 +C842 +0040 +01C0 +ENDCHAR +STARTCHAR uni7404 +ENCODING 29700 +BBX 15 15 0 -2 +BITMAP +00FC +FC84 +1084 +10FC +1000 +7DFE +1102 +1102 +11FE +1102 +1D02 +E1FE +4102 +010A +0104 +ENDCHAR +STARTCHAR uni7405 +ENCODING 29701 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FBF8 +2208 +2208 +23F8 +2208 +FA08 +23FA +2224 +2228 +3A10 +C210 +03C8 +0E06 +ENDCHAR +STARTCHAR uni7406 +ENCODING 29702 +BBX 15 14 1 -1 +BITMAP +03F8 +FA48 +2248 +23F8 +2248 +2248 +F3F8 +2040 +2040 +23F8 +3840 +C040 +0040 +0FFE +ENDCHAR +STARTCHAR uni7407 +ENCODING 29703 +BBX 15 15 1 -1 +BITMAP +0038 +03C0 +F040 +2FFE +2150 +2248 +2C46 +F000 +23F0 +2090 +209C +3084 +C104 +0204 +041C +ENDCHAR +STARTCHAR uni7408 +ENCODING 29704 +BBX 15 16 0 -2 +BITMAP +0008 +003C +FDC0 +1004 +1144 +10A8 +1000 +7DF8 +1010 +1020 +13FE +1020 +1C20 +E020 +40A0 +0040 +ENDCHAR +STARTCHAR uni7409 +ENCODING 29705 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FE +2080 +2088 +2134 +F7C4 +2000 +2248 +2248 +3A48 +C248 +044A +044A +0806 +ENDCHAR +STARTCHAR uni740A +ENCODING 29706 +BBX 15 14 1 -1 +BITMAP +07DE +F292 +2292 +2492 +2494 +2FD4 +F094 +2192 +2192 +2292 +3296 +C490 +0890 +0190 +ENDCHAR +STARTCHAR uni740B +ENCODING 29707 +BBX 15 16 0 -2 +BITMAP +0184 +0068 +F830 +20C8 +2304 +2040 +FBFE +20A0 +2120 +23FC +2524 +3924 +E134 +4128 +0020 +0020 +ENDCHAR +STARTCHAR uni740C +ENCODING 29708 +BBX 15 16 0 -2 +BITMAP +0020 +0124 +FD24 +1124 +11FC +1020 +7C50 +1088 +1144 +1222 +1020 +1DF8 +E008 +4010 +0010 +0020 +ENDCHAR +STARTCHAR uni740D +ENCODING 29709 +BBX 15 16 0 -2 +BITMAP +0042 +00E2 +FB82 +208A +208A +208A +27EA +F88A +218A +21CA +22AA +3A82 +E482 +4082 +008A +0084 +ENDCHAR +STARTCHAR uni740E +ENCODING 29710 +BBX 15 16 0 -2 +BITMAP +0024 +0224 +FD24 +117E +1024 +1024 +7C24 +137E +1124 +1124 +1124 +1D24 +E144 +4100 +02FE +0400 +ENDCHAR +STARTCHAR uni740F +ENCODING 29711 +BBX 15 15 0 -1 +BITMAP +0020 +0420 +FA20 +22FE +2040 +2050 +2E90 +FAFE +2210 +2210 +23FE +3A10 +E210 +4510 +08FE +ENDCHAR +STARTCHAR uni7410 +ENCODING 29712 +BBX 15 16 0 -2 +BITMAP +0020 +0124 +FCA4 +10A8 +1020 +11FC +1104 +7D24 +1124 +1124 +1124 +1124 +1C50 +E088 +4104 +0202 +ENDCHAR +STARTCHAR uni7411 +ENCODING 29713 +BBX 14 16 0 -2 +BITMAP +0020 +0124 +FCA4 +10A8 +1020 +11FC +7D04 +1104 +11FC +1104 +1104 +1DFC +E104 +4104 +0114 +0108 +ENDCHAR +STARTCHAR uni7412 +ENCODING 29714 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FCFC +1088 +1150 +1020 +7CD8 +1326 +10F8 +1020 +10F8 +1C20 +E3FE +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni7413 +ENCODING 29715 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +2404 +2404 +23F8 +2000 +F000 +2FFE +2110 +2110 +3110 +C212 +0412 +080E +ENDCHAR +STARTCHAR uni7414 +ENCODING 29716 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2404 +2000 +23FE +F820 +2020 +2120 +213C +3920 +E2A0 +4260 +043E +0800 +ENDCHAR +STARTCHAR uni7415 +ENCODING 29717 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +FDFC +1124 +1124 +11FC +1124 +7D44 +11FC +1090 +1110 +13FE +1C10 +E010 +4010 +0010 +ENDCHAR +STARTCHAR uni7416 +ENCODING 29718 +BBX 15 16 0 -2 +BITMAP +0048 +0044 +FC5E +11E0 +1028 +1012 +7C6A +1196 +1048 +105E +11E0 +1C24 +E028 +4012 +006A +0186 +ENDCHAR +STARTCHAR uni7417 +ENCODING 29719 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FDFE +1000 +1088 +1088 +7D54 +1222 +1000 +1020 +13FE +1C20 +E020 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni7418 +ENCODING 29720 +BBX 15 16 0 -2 +BITMAP +001C +03E0 +FA20 +23FE +2220 +2292 +230A +FA06 +21FC +2104 +2104 +39FC +E104 +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni7419 +ENCODING 29721 +BBX 15 16 0 -2 +BITMAP +0014 +0012 +F810 +27FE +2010 +2010 +FBD2 +2252 +2252 +2254 +23D4 +3808 +E0EA +471A +0226 +0042 +ENDCHAR +STARTCHAR uni741A +ENCODING 29722 +BBX 15 14 1 -1 +BITMAP +03FC +FA04 +2204 +23FC +2220 +2220 +FBFE +2220 +2220 +23FC +3D04 +C504 +0904 +01FC +ENDCHAR +STARTCHAR uni741B +ENCODING 29723 +BBX 15 14 1 -1 +BITMAP +07FE +F492 +2492 +2110 +221E +2440 +F040 +2FFE +2150 +2150 +3248 +C444 +0842 +0040 +ENDCHAR +STARTCHAR uni741C +ENCODING 29724 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F840 +27FC +2040 +2248 +2248 +FA48 +2554 +20E0 +2150 +3950 +E248 +4444 +0842 +0040 +ENDCHAR +STARTCHAR uni741D +ENCODING 29725 +BBX 15 16 0 -2 +BITMAP +01FC +0104 +FD04 +11FC +1104 +1104 +7DFC +1040 +1020 +13FE +1088 +1C88 +E050 +4020 +00D8 +0706 +ENDCHAR +STARTCHAR uni741E +ENCODING 29726 +BBX 15 15 0 -1 +BITMAP +7CFC +4484 +44FC +7C84 +44FC +4484 +7C84 +0114 +0208 +7FFC +0100 +3FF8 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni741F +ENCODING 29727 +BBX 15 16 0 -2 +BITMAP +00A0 +0090 +FC90 +11FE +1110 +1310 +7DFE +1110 +1110 +11FE +1110 +1D10 +E110 +41FE +0100 +0100 +ENDCHAR +STARTCHAR uni7420 +ENCODING 29728 +BBX 15 16 0 -2 +BITMAP +0050 +0050 +FC50 +11FC +1154 +1154 +1154 +7DFC +1154 +1154 +1154 +13FE +1C00 +E088 +4104 +0202 +ENDCHAR +STARTCHAR uni7421 +ENCODING 29729 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +F9DC +2114 +2114 +2114 +27D4 +F814 +2114 +2114 +2588 +3D48 +E948 +4114 +0514 +0222 +ENDCHAR +STARTCHAR uni7422 +ENCODING 29730 +BBX 15 14 1 -1 +BITMAP +07FC +F880 +2080 +2144 +2648 +2068 +F8A0 +2120 +2670 +20B0 +38A8 +C324 +0C22 +00C0 +ENDCHAR +STARTCHAR uni7423 +ENCODING 29731 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +F9FC +2000 +2108 +2090 +2000 +FBFE +2000 +2000 +21FC +3904 +E104 +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni7424 +ENCODING 29732 +BBX 15 15 1 -1 +BITMAP +0038 +03C8 +F244 +2424 +23FC +2044 +2044 +F7FE +2044 +2044 +23FC +3040 +C040 +0040 +01C0 +ENDCHAR +STARTCHAR uni7425 +ENCODING 29733 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F07C +2040 +27FE +2484 +24F0 +F780 +2484 +247C +2490 +3890 +C892 +1112 +020E +ENDCHAR +STARTCHAR uni7426 +ENCODING 29734 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +20A0 +2110 +2208 +2000 +FFFE +2008 +23C8 +2248 +3248 +C3C8 +0008 +0038 +ENDCHAR +STARTCHAR uni7427 +ENCODING 29735 +BBX 15 14 0 -1 +BITMAP +7FFC +0440 +3C78 +2008 +3C78 +0440 +FFFE +0000 +7FFC +0100 +3FF8 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni7428 +ENCODING 29736 +BBX 15 14 1 -1 +BITMAP +07F8 +F408 +27F8 +2408 +2408 +27F8 +F000 +2420 +2420 +27A4 +3438 +C420 +07A2 +1C1E +ENDCHAR +STARTCHAR uni7429 +ENCODING 29737 +BBX 15 16 0 -2 +BITMAP +00FC +0084 +FC84 +10FC +1084 +1084 +7CFC +1000 +11FE +1102 +1102 +1DFE +E102 +4102 +01FE +0102 +ENDCHAR +STARTCHAR uni742A +ENCODING 29738 +BBX 15 15 1 -1 +BITMAP +0108 +0108 +F3FC +2108 +2108 +21F8 +2108 +F108 +21F8 +2108 +2108 +37FE +C080 +0108 +0606 +ENDCHAR +STARTCHAR uni742B +ENCODING 29739 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFE +2040 +27FC +20A0 +2FFE +F110 +2248 +2C46 +23F8 +3040 +CFFE +0040 +0040 +ENDCHAR +STARTCHAR uni742C +ENCODING 29740 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +2404 +2404 +2200 +23BC +F2A4 +24A4 +2CA4 +22A4 +312C +C120 +0222 +0C1E +ENDCHAR +STARTCHAR uni742D +ENCODING 29741 +BBX 15 15 0 -2 +BITMAP +01F8 +FC08 +1008 +11F8 +1008 +7C08 +13FE +1020 +1222 +1174 +1CA8 +E124 +4222 +00A0 +0040 +ENDCHAR +STARTCHAR uni742E +ENCODING 29742 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FBFE +2202 +2202 +21FC +2000 +F800 +23FE +2020 +2224 +3A24 +C422 +0422 +00E0 +ENDCHAR +STARTCHAR uni742F +ENCODING 29743 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FE +2402 +2402 +21F8 +2108 +F108 +21F8 +2100 +21FC +3104 +C104 +0104 +01FC +ENDCHAR +STARTCHAR uni7430 +ENCODING 29744 +BBX 15 15 1 -1 +BITMAP +0244 +0244 +F448 +24A0 +2110 +2208 +2404 +F040 +2244 +2244 +2448 +34A0 +C110 +0208 +0C06 +ENDCHAR +STARTCHAR uni7431 +ENCODING 29745 +BBX 14 14 1 -1 +BITMAP +07FC +F404 +2444 +25F4 +2444 +25F4 +F444 +2404 +25F4 +2514 +3514 +C9F4 +0804 +101C +ENDCHAR +STARTCHAR uni7432 +ENCODING 29746 +BBX 15 15 1 -1 +BITMAP +0090 +0090 +F090 +279E +2090 +2090 +2090 +F79E +2090 +2090 +2190 +369E +C090 +0110 +0210 +ENDCHAR +STARTCHAR uni7433 +ENCODING 29747 +BBX 15 15 1 -1 +BITMAP +0210 +F210 +2210 +2F7E +2210 +2210 +F738 +26B8 +2A54 +2A54 +2292 +3210 +C210 +0210 +0210 +ENDCHAR +STARTCHAR uni7434 +ENCODING 29748 +BBX 15 14 1 -1 +BITMAP +7F7E +0810 +3E7C +0810 +0E7E +7100 +06C0 +1830 +E7CE +0000 +1FF8 +0010 +0020 +00C0 +ENDCHAR +STARTCHAR uni7435 +ENCODING 29749 +BBX 15 14 1 -1 +BITMAP +FEFE +1010 +7C7C +1010 +1010 +1EFE +E040 +2040 +3C4C +2070 +2040 +2642 +3842 +E03E +ENDCHAR +STARTCHAR uni7436 +ENCODING 29750 +BBX 15 14 1 -1 +BITMAP +FEFE +1010 +7C7C +1010 +FEFE +0000 +3FF8 +2108 +2108 +3FF8 +2000 +2002 +2002 +1FFE +ENDCHAR +STARTCHAR uni7437 +ENCODING 29751 +BBX 15 16 0 -2 +BITMAP +0108 +0088 +F890 +23FC +2040 +2040 +21F8 +F840 +2040 +27FE +20A0 +38A0 +E120 +4122 +0222 +041E +ENDCHAR +STARTCHAR uni7438 +ENCODING 29752 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC3E +1020 +11FC +1104 +11FC +7D04 +11FC +1124 +1020 +13FE +1C20 +E020 +4020 +0020 +ENDCHAR +STARTCHAR uni7439 +ENCODING 29753 +BBX 15 14 1 -1 +BITMAP +FEFE +1010 +1010 +7C7C +1010 +1E10 +E1FE +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni743A +ENCODING 29754 +BBX 15 15 1 -1 +BITMAP +0420 +0220 +F220 +20FC +2820 +2420 +2420 +F1FE +2020 +2220 +2220 +3248 +C448 +049C +09E2 +ENDCHAR +STARTCHAR uni743B +ENCODING 29755 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FC50 +1088 +1104 +1202 +10F8 +7C20 +1020 +11FC +1020 +1124 +1CA4 +E0A8 +43FE +ENDCHAR +STARTCHAR uni743C +ENCODING 29756 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2000 +2000 +21FC +F904 +2104 +21FC +2020 +2128 +3924 +E222 +4422 +00A0 +0040 +ENDCHAR +STARTCHAR uni743D +ENCODING 29757 +BBX 15 16 0 -2 +BITMAP +0020 +0022 +FDFA +1024 +1028 +13FE +7C20 +1040 +10FC +1184 +1284 +1CFC +E084 +4084 +00FC +0084 +ENDCHAR +STARTCHAR uni743E +ENCODING 29758 +BBX 15 16 0 -2 +BITMAP +03F8 +0248 +FA48 +23F8 +2248 +2248 +23F8 +F8A0 +2110 +2208 +2516 +2110 +3910 +E110 +0210 +0410 +ENDCHAR +STARTCHAR uni743F +ENCODING 29759 +BBX 15 14 1 -1 +BITMAP +0FFE +F802 +2842 +27FC +2040 +23F8 +F248 +23F8 +2248 +23F8 +3040 +CFFE +0040 +0040 +ENDCHAR +STARTCHAR uni7440 +ENCODING 29760 +BBX 15 15 1 -1 +BITMAP +0038 +03C0 +F840 +23FC +2244 +2244 +23FC +F040 +27FE +2442 +2452 +3C6A +C58A +0402 +0406 +ENDCHAR +STARTCHAR uni7441 +ENCODING 29761 +BBX 15 14 1 -1 +BITMAP +07FE +F402 +25FA +2402 +25FA +F402 +2000 +23FC +2204 +23FC +3204 +C3FC +0204 +03FC +ENDCHAR +STARTCHAR uni7442 +ENCODING 29762 +BBX 15 15 0 -2 +BITMAP +01FE +FD12 +1112 +11FE +1100 +7D7E +1142 +1142 +117E +1142 +1D7E +E242 +4242 +047E +0842 +ENDCHAR +STARTCHAR uni7443 +ENCODING 29763 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +2040 +23F8 +20A0 +2FFE +F110 +23F8 +260C +2A0A +33F8 +C208 +0208 +03F8 +ENDCHAR +STARTCHAR uni7444 +ENCODING 29764 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FE +2402 +25FA +2000 +21F8 +F108 +2108 +21F8 +2108 +3108 +C1F8 +0000 +07FE +ENDCHAR +STARTCHAR uni7445 +ENCODING 29765 +BBX 15 15 0 -2 +BITMAP +01FC +FD04 +1104 +11FC +1104 +7D04 +11FC +1000 +13FE +1020 +1D20 +E13C +4120 +02A0 +047E +ENDCHAR +STARTCHAR uni7446 +ENCODING 29766 +BBX 15 14 1 -1 +BITMAP +03F8 +F208 +23F8 +2208 +2208 +23F8 +F240 +23FC +2440 +2040 +3BF8 +C040 +0040 +0FFE +ENDCHAR +STARTCHAR uni7447 +ENCODING 29767 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7F8 +2040 +23F8 +2040 +2FFE +F288 +2248 +2FFE +2488 +3448 +C7FC +0010 +0070 +ENDCHAR +STARTCHAR uni7448 +ENCODING 29768 +BBX 15 15 0 -2 +BITMAP +01FC +FC48 +1030 +13FE +1052 +7C94 +1110 +1230 +1020 +13FE +1C70 +E0A8 +4124 +0622 +0020 +ENDCHAR +STARTCHAR uni7449 +ENCODING 29769 +BBX 15 15 0 -2 +BITMAP +01FC +FD04 +11FC +1110 +11FE +7D10 +114A +1186 +1000 +11FC +1D04 +E1FC +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni744A +ENCODING 29770 +BBX 15 16 0 -2 +BITMAP +0008 +000C +F80A +23FE +2208 +2208 +22E8 +FA0A +220A +22EC +22AC +3AA8 +E2EA +421A +0226 +0442 +ENDCHAR +STARTCHAR uni744B +ENCODING 29771 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F3F8 +2088 +27FE +2000 +23F8 +F208 +23F8 +2010 +27FC +3110 +CFFE +0010 +0010 +ENDCHAR +STARTCHAR uni744C +ENCODING 29772 +BBX 15 15 0 -2 +BITMAP +03FE +FC20 +1040 +11FC +1154 +1154 +7D54 +1154 +112C +1020 +13FE +1C50 +E088 +4104 +0202 +ENDCHAR +STARTCHAR uni744D +ENCODING 29773 +BBX 15 15 1 -1 +BITMAP +0100 +01F0 +F210 +2420 +2FFC +24A4 +24A4 +F4A4 +253C +2604 +2040 +3FFE +C0A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni744E +ENCODING 29774 +BBX 15 16 0 -2 +BITMAP +0110 +0112 +FDD4 +1118 +1152 +1192 +7D2E +1040 +11FC +1104 +1104 +1DFC +E104 +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni744F +ENCODING 29775 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2088 +2104 +21FC +F890 +2110 +23FE +2050 +3890 +E110 +4610 +0050 +0020 +ENDCHAR +STARTCHAR uni7450 +ENCODING 29776 +BBX 15 16 0 -2 +BITMAP +0108 +0088 +F890 +27FE +2000 +23C4 +2254 +FA54 +23D4 +2254 +2254 +3BD4 +E254 +4244 +0254 +02C8 +ENDCHAR +STARTCHAR uni7451 +ENCODING 29777 +BBX 15 16 0 -2 +BITMAP +0080 +00FC +FD04 +11F8 +1008 +13FE +1040 +7CA2 +1334 +1058 +1094 +1334 +1C52 +E090 +4350 +0020 +ENDCHAR +STARTCHAR uni7452 +ENCODING 29778 +BBX 15 14 1 -1 +BITMAP +03F0 +F210 +23F0 +2210 +2210 +23F0 +F000 +2FFE +2200 +27FC +39A4 +C644 +0184 +0038 +ENDCHAR +STARTCHAR uni7453 +ENCODING 29779 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FE +2040 +27FC +2444 +264C +F554 +2444 +27FC +2150 +3248 +C444 +0842 +0040 +ENDCHAR +STARTCHAR uni7454 +ENCODING 29780 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +FDFC +1104 +11FC +1104 +7DFC +1020 +1032 +13B4 +10A8 +1D28 +E124 +4224 +04A2 +0040 +ENDCHAR +STARTCHAR uni7455 +ENCODING 29781 +BBX 15 14 1 -1 +BITMAP +0F7C +F904 +2904 +2904 +2F7C +2800 +F8FC +2F44 +2844 +2828 +3F10 +C828 +0844 +0982 +ENDCHAR +STARTCHAR uni7456 +ENCODING 29782 +BBX 15 16 0 -2 +BITMAP +0080 +0338 +FA28 +2228 +23A8 +2246 +2200 +FA7C +23A4 +2224 +2228 +3BA8 +E610 +4228 +0244 +0282 +ENDCHAR +STARTCHAR uni7457 +ENCODING 29783 +BBX 15 15 1 -1 +BITMAP +003C +07C0 +F248 +2424 +27FC +2100 +2FFE +F100 +21F8 +2208 +2610 +3920 +C0C0 +01B0 +0E0E +ENDCHAR +STARTCHAR uni7458 +ENCODING 29784 +BBX 15 15 0 -2 +BITMAP +0FDE +F492 +2492 +2494 +2794 +2498 +F494 +2792 +2492 +2492 +25DA +3E94 +C090 +0090 +0090 +ENDCHAR +STARTCHAR uni7459 +ENCODING 29785 +BBX 14 15 1 -1 +BITMAP +0124 +0248 +F490 +2248 +2124 +2080 +F7FC +2414 +2514 +24A4 +2444 +34A4 +C714 +0404 +07FC +ENDCHAR +STARTCHAR uni745A +ENCODING 29786 +BBX 15 14 1 -1 +BITMAP +023E +F222 +2222 +2FE2 +223E +2222 +F222 +2FA2 +28BE +28A2 +38A2 +CFC2 +0042 +008E +ENDCHAR +STARTCHAR uni745B +ENCODING 29787 +BBX 15 15 1 -1 +BITMAP +0110 +F910 +27FE +2110 +2150 +2040 +F7FC +2444 +2444 +2444 +2FFE +30A0 +C110 +0208 +0C06 +ENDCHAR +STARTCHAR uni745C +ENCODING 29788 +BBX 15 15 1 -1 +BITMAP +0040 +00A0 +F110 +2208 +2CE6 +2000 +2792 +F492 +2692 +25A4 +24A4 +36A4 +C592 +0492 +0592 +ENDCHAR +STARTCHAR uni745D +ENCODING 29789 +BBX 15 15 1 -1 +BITMAP +0040 +0080 +FBF8 +2208 +23F8 +2208 +2208 +FBF8 +2000 +27FC +2040 +3BF8 +C040 +0040 +0FFE +ENDCHAR +STARTCHAR uni745E +ENCODING 29790 +BBX 15 15 1 -1 +BITMAP +0040 +F444 +2444 +27FC +2000 +2FFE +F040 +2080 +27FC +2524 +2524 +3524 +C524 +0524 +052C +ENDCHAR +STARTCHAR uni745F +ENCODING 29791 +BBX 15 14 1 -1 +BITMAP +FEFE +1010 +1010 +7C7C +1010 +1010 +1CFE +E300 +00A0 +2448 +2484 +4502 +8608 +3BF8 +ENDCHAR +STARTCHAR uni7460 +ENCODING 29792 +BBX 15 15 1 -1 +BITMAP +0180 +067E +F412 +2512 +25A2 +26A2 +FC4C +2000 +27FC +2444 +3444 +C7FC +0444 +0444 +07FC +ENDCHAR +STARTCHAR uni7461 +ENCODING 29793 +BBX 15 16 0 -2 +BITMAP +0100 +027E +FB88 +2288 +22BE +22AA +23AA +FA2A +222A +23AA +22AA +3AAE +E288 +4388 +0288 +0008 +ENDCHAR +STARTCHAR uni7462 +ENCODING 29794 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +24A4 +2524 +2238 +2040 +F0A0 +2318 +2C06 +23F8 +3208 +C208 +0208 +03F8 +ENDCHAR +STARTCHAR uni7463 +ENCODING 29795 +BBX 14 15 1 -1 +BITMAP +0248 +FA44 +2444 +23F8 +2208 +2208 +FBF8 +2208 +2208 +23F8 +3A08 +E208 +03F8 +0110 +060C +ENDCHAR +STARTCHAR uni7464 +ENCODING 29796 +BBX 15 15 1 -1 +BITMAP +0020 +007C +FBC4 +20A8 +2050 +2060 +FB80 +20FC +2120 +2020 +3BFE +E020 +0124 +0124 +01FC +ENDCHAR +STARTCHAR uni7465 +ENCODING 29797 +BBX 15 14 0 -1 +BITMAP +01F8 +FD08 +1108 +11F8 +1108 +7D08 +11F8 +1000 +13FC +1294 +1E94 +E294 +4294 +07FE +ENDCHAR +STARTCHAR uni7466 +ENCODING 29798 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +FDFC +1104 +1104 +11FC +7D00 +11FE +1100 +11FE +1002 +1EAA +E2AA +4402 +0014 +0008 +ENDCHAR +STARTCHAR uni7467 +ENCODING 29799 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FBFE +2020 +21FC +2040 +23FE +F888 +2134 +22E2 +2020 +39FC +E070 +40AC +0322 +0020 +ENDCHAR +STARTCHAR uni7468 +ENCODING 29800 +BBX 15 15 0 -2 +BITMAP +03FC +F890 +2294 +2198 +2090 +27FE +F800 +21F8 +2108 +2108 +21F8 +3908 +E108 +01F8 +0108 +ENDCHAR +STARTCHAR uni7469 +ENCODING 29801 +BBX 15 15 1 -1 +BITMAP +0820 +29A4 +2AA8 +1450 +2288 +7FFC +4004 +4004 +3FF8 +0100 +0100 +1FF0 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni746A +ENCODING 29802 +BBX 15 14 1 -1 +BITMAP +07FC +F440 +2440 +27F8 +2440 +2440 +F7F8 +2440 +2440 +27FE +3012 +C54A +08A2 +080C +ENDCHAR +STARTCHAR uni746B +ENCODING 29803 +BBX 15 15 1 -1 +BITMAP +000C +0038 +FBC8 +2244 +2244 +2422 +2422 +F8C0 +231C +2204 +2204 +3B9C +C204 +0204 +03FC +ENDCHAR +STARTCHAR uni746C +ENCODING 29804 +BBX 15 15 0 -1 +BITMAP +2040 +17FE +8090 +4908 +13FC +E150 +2252 +244E +0000 +7FFC +0100 +3FF8 +0120 +0110 +FFFE +ENDCHAR +STARTCHAR uni746D +ENCODING 29805 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +F7FE +2420 +25FC +2424 +27FE +F424 +25FC +2420 +25FC +3504 +C504 +0904 +01FC +ENDCHAR +STARTCHAR uni746E +ENCODING 29806 +BBX 15 15 0 -2 +BITMAP +03FE +F850 +2050 +23FE +2252 +2252 +FBFE +2020 +2020 +23FE +3870 +E0A8 +4124 +0622 +0020 +ENDCHAR +STARTCHAR uni746F +ENCODING 29807 +BBX 15 15 1 -1 +BITMAP +0200 +023E +FFA2 +28A2 +28A4 +2FA8 +28A8 +F8A4 +2FA4 +2822 +2AA2 +3922 +CB2C +0CA0 +18A0 +ENDCHAR +STARTCHAR uni7470 +ENCODING 29808 +BBX 15 15 1 -1 +BITMAP +0040 +0080 +F7FC +2444 +2444 +27FC +2444 +F444 +27FC +2120 +212A +323E +C220 +0422 +081E +ENDCHAR +STARTCHAR uni7471 +ENCODING 29809 +BBX 15 15 1 -1 +BITMAP +0200 +0238 +FBC2 +2202 +21FE +2000 +25FC +FD04 +25FC +2504 +25FC +3D04 +C7FE +0108 +0606 +ENDCHAR +STARTCHAR uni7472 +ENCODING 29810 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F8A0 +2190 +2248 +27FE +FA08 +23F8 +2208 +23F8 +2200 +3BF8 +E508 +4508 +09F8 +0108 +ENDCHAR +STARTCHAR uni7473 +ENCODING 29811 +BBX 15 15 1 -1 +BITMAP +0208 +0110 +F7FC +2040 +2040 +23F8 +F040 +2040 +27FC +2100 +23FC +3420 +C820 +0020 +03FE +ENDCHAR +STARTCHAR uni7474 +ENCODING 29812 +BBX 15 16 0 -2 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FE86 +8200 +7CFC +0044 +FE44 +1028 +7C28 +1010 +1E28 +F044 +4182 +ENDCHAR +STARTCHAR uni7475 +ENCODING 29813 +BBX 15 15 0 -2 +BITMAP +01FC +FCA4 +1088 +1050 +1020 +7CD8 +1326 +1020 +11FC +1124 +1D24 +E1FC +4022 +03FE +0002 +ENDCHAR +STARTCHAR uni7476 +ENCODING 29814 +BBX 15 15 1 -1 +BITMAP +0038 +07C4 +F084 +2448 +2240 +2000 +27FC +F040 +2040 +2FFE +2040 +3444 +C444 +0444 +07FC +ENDCHAR +STARTCHAR uni7477 +ENCODING 29815 +BBX 15 16 0 -2 +BITMAP +000E +03F0 +F844 +2224 +2108 +23FE +2242 +F840 +23FE +2080 +20FC +3944 +E128 +4210 +0468 +0186 +ENDCHAR +STARTCHAR uni7478 +ENCODING 29816 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2414 +21E0 +2100 +F900 +21FC +2110 +2110 +27FE +3800 +E090 +0108 +0204 +ENDCHAR +STARTCHAR uni7479 +ENCODING 29817 +BBX 15 16 0 -2 +BITMAP +0088 +0088 +FBFE +2088 +20A8 +2050 +2088 +F974 +2222 +2020 +21FC +3820 +E0A8 +4124 +02A2 +0040 +ENDCHAR +STARTCHAR uni747A +ENCODING 29818 +BBX 15 16 0 -2 +BITMAP +0020 +0124 +FCA8 +13FE +1202 +10F8 +7C88 +1088 +10F8 +1020 +11FC +1D24 +E124 +4134 +0128 +0020 +ENDCHAR +STARTCHAR uni747B +ENCODING 29819 +BBX 15 15 0 -2 +BITMAP +01FC +FD24 +13FE +1124 +11FC +7C00 +11FC +1104 +11FC +1104 +1DFC +E104 +41FC +0088 +0104 +ENDCHAR +STARTCHAR uni747C +ENCODING 29820 +BBX 15 16 0 -2 +BITMAP +0020 +03FE +FC20 +11FC +1124 +11FC +1124 +7DFC +1022 +13FE +1008 +13FE +1D08 +E088 +4028 +0010 +ENDCHAR +STARTCHAR uni747D +ENCODING 29821 +BBX 15 16 0 -2 +BITMAP +0124 +0124 +FA24 +2424 +2954 +214A +FA92 +2610 +2A10 +2250 +225C +3A50 +E250 +42B0 +029E +0300 +ENDCHAR +STARTCHAR uni747E +ENCODING 29822 +BBX 15 15 1 -1 +BITMAP +0110 +0FFE +F110 +21F0 +2040 +27FC +2444 +F7FC +2040 +27FC +2040 +37FC +C040 +0040 +0FFE +ENDCHAR +STARTCHAR uni747F +ENCODING 29823 +BBX 15 15 0 -2 +BITMAP +7F78 +4848 +5F4C +6480 +5F78 +4448 +4A48 +5130 +7F4C +0000 +7FFC +0100 +3FF8 +0120 +FFFE +ENDCHAR +STARTCHAR uni7480 +ENCODING 29824 +BBX 15 16 0 -2 +BITMAP +0020 +0222 +FBFE +2090 +2088 +21FE +2310 +FD10 +21FE +2110 +2110 +39FE +E110 +4110 +01FE +0100 +ENDCHAR +STARTCHAR uni7481 +ENCODING 29825 +BBX 15 15 1 -1 +BITMAP +0020 +0040 +F7FC +2444 +2574 +2494 +2554 +F424 +2454 +27FC +2040 +3524 +C522 +090A +08F8 +ENDCHAR +STARTCHAR uni7482 +ENCODING 29826 +BBX 15 15 0 -1 +BITMAP +0088 +0088 +FBFE +2088 +20F8 +2088 +20F8 +F888 +23FE +2088 +2124 +3AFA +E020 +4020 +03FE +ENDCHAR +STARTCHAR uni7483 +ENCODING 29827 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FE +2000 +2294 +2264 +2294 +F204 +23FC +2040 +27FE +3C42 +C492 +05EA +0406 +ENDCHAR +STARTCHAR uni7484 +ENCODING 29828 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FDFC +1088 +1050 +13FE +7C00 +11FC +1104 +11FC +1104 +1DFC +E090 +4092 +0112 +060E +ENDCHAR +STARTCHAR uni7485 +ENCODING 29829 +BBX 15 15 1 -1 +BITMAP +0248 +0248 +F490 +2248 +23F8 +2248 +23F8 +F248 +23F8 +2040 +2FFE +3150 +C248 +0C46 +0040 +ENDCHAR +STARTCHAR uni7486 +ENCODING 29830 +BBX 15 14 1 -1 +BITMAP +07BC +F18C +2294 +25AC +2294 +2444 +F1B0 +2E0E +2040 +2390 +3064 +C388 +0030 +03C0 +ENDCHAR +STARTCHAR uni7487 +ENCODING 29831 +BBX 15 15 1 -1 +BITMAP +0220 +0220 +F27E +2F40 +2480 +247E +2714 +F514 +2550 +255C +2550 +3950 +C970 +1150 +268E +ENDCHAR +STARTCHAR uni7488 +ENCODING 29832 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +F7D0 +211E +2114 +27E4 +2124 +F114 +2FD4 +2214 +23C8 +3248 +C454 +0454 +09A2 +ENDCHAR +STARTCHAR uni7489 +ENCODING 29833 +BBX 15 15 1 -1 +BITMAP +0410 +0410 +F2FE +2410 +247C +2254 +207C +F654 +2254 +227C +2210 +32FE +C210 +0510 +08FE +ENDCHAR +STARTCHAR uni748A +ENCODING 29834 +BBX 15 16 0 -2 +BITMAP +0088 +0088 +FBFE +2088 +2088 +20F8 +2020 +FBFE +2222 +2332 +22AA +3B76 +E222 +4222 +022A +0224 +ENDCHAR +STARTCHAR uni748B +ENCODING 29835 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +2110 +2FFE +2000 +F3F8 +2208 +23F8 +2208 +33F8 +C040 +0FFE +0040 +0040 +ENDCHAR +STARTCHAR uni748C +ENCODING 29836 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2000 +21FC +2020 +F9FC +2124 +21FC +2124 +39FC +E000 +4088 +0104 +0202 +ENDCHAR +STARTCHAR uni748D +ENCODING 29837 +BBX 15 16 0 -2 +BITMAP +0088 +03FE +F888 +2000 +21FC +20A8 +20A8 +FBFE +20A8 +20A8 +21FC +3820 +E3FE +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni748E +ENCODING 29838 +BBX 15 15 0 -2 +BITMAP +0FBE +F8A2 +2AAA +2AAA +2AAA +2514 +F8A2 +2080 +2FFE +2110 +3A10 +E3A0 +4060 +0198 +0E04 +ENDCHAR +STARTCHAR uni748F +ENCODING 29839 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +FA08 +23F0 +2010 +2FFE +2080 +FC88 +24EA +274A +244C +3DE8 +E44A +464A +04A6 +0110 +ENDCHAR +STARTCHAR uni7490 +ENCODING 29840 +BBX 15 14 1 0 +BITMAP +0020 +0F20 +F97C +2944 +29C4 +2F28 +2210 +F228 +2BFE +2A44 +2A44 +3BC4 +CE44 +187C +ENDCHAR +STARTCHAR uni7491 +ENCODING 29841 +BBX 15 15 0 -1 +BITMAP +0080 +0080 +F9FE +2354 +2554 +2154 +23FE +F954 +2154 +2154 +27FE +2000 +3954 +E12A +022A +ENDCHAR +STARTCHAR uni7492 +ENCODING 29842 +BBX 15 15 1 -1 +BITMAP +0008 +03D0 +FC62 +2294 +2108 +26F6 +2000 +F9F8 +2108 +2108 +21F8 +3808 +C108 +0090 +07FE +ENDCHAR +STARTCHAR uni7493 +ENCODING 29843 +BBX 15 16 0 -2 +BITMAP +0088 +03FE +FC88 +101C +11E0 +1020 +13FE +7CA8 +1124 +1222 +11F8 +1088 +1C9E +E082 +410A +0204 +ENDCHAR +STARTCHAR uni7494 +ENCODING 29844 +BBX 15 16 0 -2 +BITMAP +0104 +0088 +F800 +23FE +2222 +22AA +2272 +FA22 +23FE +2000 +21FC +3904 +E1FC +4104 +01FC +0104 +ENDCHAR +STARTCHAR uni7495 +ENCODING 29845 +BBX 15 15 0 -2 +BITMAP +03FC +F804 +23FC +2004 +23FC +2000 +FBBC +2124 +27BC +2008 +3BFE +E108 +4088 +00A8 +0010 +ENDCHAR +STARTCHAR uni7496 +ENCODING 29846 +BBX 15 16 0 -2 +BITMAP +0200 +017E +F840 +247C +2244 +20FC +F940 +267E +2220 +2020 +23FE +3870 +E0A8 +4124 +0222 +0020 +ENDCHAR +STARTCHAR uni7497 +ENCODING 29847 +BBX 15 15 1 -1 +BITMAP +63F0 +1210 +C3F0 +2210 +3FFE +2200 +47FC +4924 +824C +FFFE +0100 +3FF8 +0110 +0120 +FFFE +ENDCHAR +STARTCHAR uni7498 +ENCODING 29848 +BBX 15 15 1 -1 +BITMAP +0124 +00A4 +F8A8 +23FE +20B0 +2128 +2224 +FC22 +2388 +22BC +22A8 +35A8 +C8FE +0108 +0608 +ENDCHAR +STARTCHAR uni7499 +ENCODING 29849 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFE +2090 +2294 +2108 +23FC +FD0A +21F8 +2108 +21F8 +3820 +E128 +0626 +0060 +ENDCHAR +STARTCHAR uni749A +ENCODING 29850 +BBX 15 15 0 -2 +BITMAP +03FC +F848 +2030 +23FE +2052 +2094 +FB50 +2020 +23FE +2252 +3A8A +E376 +4252 +0272 +0206 +ENDCHAR +STARTCHAR uni749B +ENCODING 29851 +BBX 15 16 0 -2 +BITMAP +0040 +03F8 +F848 +27FE +2048 +23F8 +F840 +2554 +275C +2444 +27FC +3C44 +E75C +4554 +0554 +0844 +ENDCHAR +STARTCHAR uni749C +ENCODING 29852 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +F7FC +2110 +21F0 +2000 +2FFE +F040 +27FC +2444 +27FC +3444 +C7FC +0208 +0C06 +ENDCHAR +STARTCHAR uni749D +ENCODING 29853 +BBX 15 16 0 -2 +BITMAP +0020 +01FC +FD24 +11FC +1020 +13FE +7C00 +11FC +1104 +11FC +1104 +1DFC +E104 +41FC +0088 +0104 +ENDCHAR +STARTCHAR uni749E +ENCODING 29854 +BBX 15 15 1 -1 +BITMAP +04A4 +02A4 +F2A8 +27FC +2110 +20A0 +27FC +F040 +23F8 +2040 +2FFE +30A0 +C110 +0208 +0C06 +ENDCHAR +STARTCHAR uni749F +ENCODING 29855 +BBX 15 15 1 -1 +BITMAP +03F8 +0208 +F3F8 +2208 +23F8 +2040 +2FFE +F000 +23F8 +2208 +23F8 +3040 +C248 +0C46 +00C0 +ENDCHAR +STARTCHAR uni74A0 +ENCODING 29856 +BBX 15 15 1 -1 +BITMAP +0038 +07C0 +F444 +2248 +2FFE +2150 +2248 +F444 +2802 +27FC +2444 +37FC +C444 +0444 +07FC +ENDCHAR +STARTCHAR uni74A1 +ENCODING 29857 +BBX 15 15 1 -1 +BITMAP +0424 +0424 +F248 +20FE +2590 +2290 +20FC +F690 +2290 +22FC +2290 +3290 +C2FE +0500 +08FE +ENDCHAR +STARTCHAR uni74A2 +ENCODING 29858 +BBX 15 14 1 -1 +BITMAP +0FFE +F0A0 +27BC +24A4 +24A4 +27BC +F0A0 +27FC +2444 +2444 +37FC +C444 +0444 +07FC +ENDCHAR +STARTCHAR uni74A3 +ENCODING 29859 +BBX 15 15 1 -1 +BITMAP +0248 +0248 +F450 +2D74 +2248 +2554 +2EFA +F044 +27FE +2440 +2424 +3628 +C910 +092A +10C4 +ENDCHAR +STARTCHAR uni74A4 +ENCODING 29860 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FBFE +2020 +21FC +2124 +F9FC +2124 +21FC +2022 +23FE +3842 +E024 +42A2 +028A +0478 +ENDCHAR +STARTCHAR uni74A5 +ENCODING 29861 +BBX 15 15 1 -1 +BITMAP +0288 +0288 +F7C8 +229E +2294 +2424 +27D4 +F454 +2F54 +2554 +2548 +3548 +C754 +0094 +01A2 +ENDCHAR +STARTCHAR uni74A6 +ENCODING 29862 +BBX 15 15 1 -1 +BITMAP +001C +07E8 +F288 +2150 +2FFE +2842 +2524 +F9FA +2200 +23FC +2408 +3A10 +C1E0 +0330 +1C0E +ENDCHAR +STARTCHAR uni74A7 +ENCODING 29863 +BBX 15 15 1 -1 +BITMAP +0010 +7EFE +4244 +7E28 +40FE +7E10 +62FE +A210 +BE10 +0000 +7FFC +0100 +3FF8 +0120 +FFFE +ENDCHAR +STARTCHAR uni74A8 +ENCODING 29864 +BBX 15 15 1 -1 +BITMAP +0200 +03BC +F204 +27A8 +2490 +2AA8 +2146 +F600 +2248 +2150 +2FFE +3150 +C248 +0C46 +0040 +ENDCHAR +STARTCHAR uni74A9 +ENCODING 29865 +BBX 15 15 1 -1 +BITMAP +0040 +007C +F040 +27FE +2482 +27F0 +2484 +F47C +2400 +27FE +25C4 +36A8 +C970 +00A8 +0766 +ENDCHAR +STARTCHAR uni74AA +ENCODING 29866 +BBX 15 14 1 -1 +BITMAP +01F0 +F110 +21F0 +2000 +27BC +24A4 +F4A4 +27BC +2040 +2FFE +3150 +C248 +0C46 +0040 +ENDCHAR +STARTCHAR uni74AB +ENCODING 29867 +BBX 15 15 1 -1 +BITMAP +0444 +0444 +FA48 +27FE +2402 +25FA +2108 +F9F8 +2000 +23FC +2244 +3BFC +C244 +0244 +03FC +ENDCHAR +STARTCHAR uni74AC +ENCODING 29868 +BBX 15 16 0 -2 +BITMAP +0108 +0208 +F7C8 +2450 +27DE +2464 +27D4 +F214 +2114 +27D4 +2214 +23C8 +3248 +C454 +0554 +08A2 +ENDCHAR +STARTCHAR uni74AD +ENCODING 29869 +BBX 15 14 0 -1 +BITMAP +04FE +FA92 +227C +2010 +207C +2654 +FA7C +2254 +227C +2210 +22FE +3A10 +E510 +08FE +ENDCHAR +STARTCHAR uni74AE +ENCODING 29870 +BBX 15 16 0 -2 +BITMAP +0020 +07FE +F800 +23FE +2202 +22FA +228A +FBFE +2000 +21FC +2104 +39FC +E104 +41FC +0000 +07FE +ENDCHAR +STARTCHAR uni74AF +ENCODING 29871 +BBX 15 16 0 -2 +BITMAP +0020 +0050 +FC88 +1174 +1202 +11FC +7D24 +11AC +1124 +11FC +1000 +1CF8 +E088 +40F8 +0088 +00F8 +ENDCHAR +STARTCHAR uni74B0 +ENCODING 29872 +BBX 15 14 1 -1 +BITMAP +03FC +FA94 +23FC +2000 +27FE +F800 +23FC +2204 +23FC +3842 +E0E4 +0158 +0646 +0040 +ENDCHAR +STARTCHAR uni74B1 +ENCODING 29873 +BBX 15 15 0 -2 +BITMAP +07BE +F108 +2108 +27BE +2108 +2108 +F7BE +2000 +2080 +2044 +2512 +3522 +C9C0 +0304 +0CFC +ENDCHAR +STARTCHAR uni74B2 +ENCODING 29874 +BBX 15 16 0 -2 +BITMAP +0088 +0448 +FA50 +20FC +2020 +2050 +2694 +FA38 +2250 +2298 +2234 +3A54 +E290 +4220 +05FE +0800 +ENDCHAR +STARTCHAR uni74B3 +ENCODING 29875 +BBX 15 16 0 -2 +BITMAP +00A0 +00FC +FD20 +13FE +10A8 +1124 +7E22 +11FC +1104 +11FC +1104 +1DFC +E104 +41FC +0088 +0104 +ENDCHAR +STARTCHAR uni74B4 +ENCODING 29876 +BBX 15 16 0 -2 +BITMAP +0088 +0088 +FBDE +2088 +21DC +22AA +2488 +F800 +23FE +2022 +2120 +393C +E120 +42A0 +047E +0800 +ENDCHAR +STARTCHAR uni74B5 +ENCODING 29877 +BBX 15 15 1 -1 +BITMAP +0100 +069C +F4E4 +2484 +268C +24E4 +F424 +26AC +24A4 +24A4 +2FFE +3000 +C208 +0404 +0802 +ENDCHAR +STARTCHAR uni74B6 +ENCODING 29878 +BBX 15 15 0 -1 +BITMAP +0040 +03F8 +F848 +27FE +2048 +23F8 +F840 +27FE +2000 +22A4 +2452 +3BF8 +E2A8 +42A8 +0FFE +ENDCHAR +STARTCHAR uni74B7 +ENCODING 29879 +BBX 15 16 0 -2 +BITMAP +0148 +07C8 +F908 +27D0 +255E +27E4 +FD54 +27D4 +2554 +2114 +27D4 +3A08 +E3C8 +4254 +0554 +08A2 +ENDCHAR +STARTCHAR uni74B8 +ENCODING 29880 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +21FC +2148 +FA50 +21FC +2304 +21FC +2104 +39FC +E104 +41FC +0088 +0104 +ENDCHAR +STARTCHAR uni74B9 +ENCODING 29881 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +2040 +23F8 +2000 +2FFE +F042 +27FC +2000 +2FFE +3004 +CF7E +0924 +0F0C +ENDCHAR +STARTCHAR uni74BA +ENCODING 29882 +BBX 14 15 1 -1 +BITMAP +1000 +67D8 +4448 +7758 +4448 +7758 +4548 +FFFC +8004 +BFF4 +0100 +1FE0 +0120 +0110 +7FFC +ENDCHAR +STARTCHAR uni74BB +ENCODING 29883 +BBX 15 14 1 -1 +BITMAP +0FBE +F28A +24B2 +238E +2CB2 +2040 +F7FC +2208 +2208 +2554 +3842 +CFFE +0040 +0040 +ENDCHAR +STARTCHAR uni74BC +ENCODING 29884 +BBX 15 15 0 -1 +BITMAP +0008 +03E8 +FA88 +23EE +2228 +23F4 +2282 +FBE2 +2000 +21FC +2154 +3954 +E154 +4154 +07FE +ENDCHAR +STARTCHAR uni74BD +ENCODING 29885 +BBX 15 14 1 -1 +BITMAP +FFFE +2108 +7FFC +D556 +4924 +5554 +4924 +5554 +0000 +7FFC +0100 +3FF8 +0110 +FFFE +ENDCHAR +STARTCHAR uni74BE +ENCODING 29886 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2088 +2052 +27AC +22AA +FAA8 +25AC +2000 +2104 +39FC +E104 +41FC +0104 +0204 +ENDCHAR +STARTCHAR uni74BF +ENCODING 29887 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F87C +2040 +27FC +2404 +20E0 +FA08 +25F4 +2208 +27FC +3A0A +C3F8 +0208 +03F8 +ENDCHAR +STARTCHAR uni74C0 +ENCODING 29888 +BBX 15 15 0 -2 +BITMAP +01FC +FC20 +13FE +1222 +11AC +7C20 +11AC +1000 +13FE +1020 +1DFC +E154 +4154 +0154 +010C +ENDCHAR +STARTCHAR uni74C1 +ENCODING 29889 +BBX 15 16 0 -2 +BITMAP +0088 +03FE +FCA8 +1090 +11FE +1320 +7DFC +1120 +11FC +1120 +11FE +1D00 +E3FC +4088 +0070 +038E +ENDCHAR +STARTCHAR uni74C2 +ENCODING 29890 +BBX 15 15 0 -1 +BITMAP +0088 +03FE +FC88 +1020 +11FC +1020 +13FE +7C40 +1088 +11FC +1000 +11FC +1D54 +E154 +47FE +ENDCHAR +STARTCHAR uni74C3 +ENCODING 29891 +BBX 15 16 0 -2 +BITMAP +03F8 +0248 +FA48 +23F8 +2248 +2248 +FBF8 +2000 +2FBE +2AAA +2AAA +3FBE +EAAA +4AAA +0FBE +08A2 +ENDCHAR +STARTCHAR uni74C4 +ENCODING 29892 +BBX 15 16 0 -2 +BITMAP +0020 +03FE +FC20 +11FC +1000 +13FE +7E52 +13FE +1104 +11FC +1104 +1DFC +E104 +41FC +0088 +0104 +ENDCHAR +STARTCHAR uni74C5 +ENCODING 29893 +BBX 15 16 0 -2 +BITMAP +0444 +04E4 +F8A8 +2AAA +2EEE +24A4 +2AAA +FEEE +2242 +2040 +2FFE +20E0 +3150 +C248 +0C46 +0040 +ENDCHAR +STARTCHAR uni74C6 +ENCODING 29894 +BBX 15 16 0 -2 +BITMAP +0042 +039C +FA10 +23DE +2294 +2294 +2420 +FBFC +2204 +23FC +2204 +3BFC +E204 +43FC +0108 +0204 +ENDCHAR +STARTCHAR uni74C7 +ENCODING 29895 +BBX 15 16 0 -2 +BITMAP +03FC +0040 +F9F8 +2108 +21F8 +2108 +27FE +FC42 +22A4 +228A +247A +3880 +E1F8 +4288 +0070 +038E +ENDCHAR +STARTCHAR uni74C8 +ENCODING 29896 +BBX 15 15 1 -1 +BITMAP +01A0 +0E20 +F27E +224A +3F92 +2A22 +2B82 +F24C +21B0 +2E4E +2040 +36EC +C150 +0248 +0CC6 +ENDCHAR +STARTCHAR uni74C9 +ENCODING 29897 +BBX 15 15 1 -1 +BITMAP +0208 +0208 +FFBE +2208 +2FBE +2514 +2BFA +F208 +23F8 +2208 +23F8 +3208 +C3F8 +0110 +060C +ENDCHAR +STARTCHAR uni74CA +ENCODING 29898 +BBX 15 15 1 -1 +BITMAP +0100 +01F0 +F220 +2FFC +24A4 +23F8 +F208 +23F8 +2208 +23F8 +3900 +E3FC +0D18 +00E0 +0F1E +ENDCHAR +STARTCHAR uni74CB +ENCODING 29899 +BBX 15 15 0 -1 +BITMAP +0020 +0010 +F4FE +2244 +2228 +20FE +2092 +F6FE +2292 +22BA +22AA +22BA +3286 +C500 +08FE +ENDCHAR +STARTCHAR uni74CC +ENCODING 29900 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FDFE +1000 +11FC +1154 +11FC +7C20 +1122 +108C +1122 +1054 +1CC8 +E144 +4252 +0060 +ENDCHAR +STARTCHAR uni74CD +ENCODING 29901 +BBX 15 16 0 -2 +BITMAP +0008 +073E +F590 +255E +2564 +265E +2500 +F5DE +2552 +255E +2552 +265E +3452 +C456 +04A0 +051E +ENDCHAR +STARTCHAR uni74CE +ENCODING 29902 +BBX 15 16 0 -2 +BITMAP +0108 +0108 +F7CE +2112 +2124 +27DE +2552 +F55E +27D2 +211E +2392 +255E +3940 +C114 +0112 +0122 +ENDCHAR +STARTCHAR uni74CF +ENCODING 29903 +BBX 15 15 1 -1 +BITMAP +0220 +0220 +FFFE +28A0 +253C +3FC4 +203C +FFA0 +28BC +2FA0 +28BC +3FA0 +C8BC +08A2 +099E +ENDCHAR +STARTCHAR uni74D0 +ENCODING 29904 +BBX 15 16 0 -2 +BITMAP +0040 +007C +F840 +23FC +2244 +23F0 +FA44 +22FC +22A8 +22F8 +22A8 +3AF8 +E200 +45FC +0554 +0BFE +ENDCHAR +STARTCHAR uni74D1 +ENCODING 29905 +BBX 15 15 0 -2 +BITMAP +07FE +F444 +2598 +2488 +27DE +2488 +F5DC +26AA +2488 +2420 +2520 +353C +C920 +0920 +17FE +ENDCHAR +STARTCHAR uni74D2 +ENCODING 29906 +BBX 16 16 0 -2 +BITMAP +0104 +0514 +F7DE +2924 +2FFF +210C +F355 +2DA7 +23FC +2204 +2224 +3A24 +E244 +00B0 +0108 +0604 +ENDCHAR +STARTCHAR uni74D3 +ENCODING 29907 +BBX 15 16 0 -2 +BITMAP +03DE +0252 +FBDE +2252 +23DE +2222 +22FA +FA22 +22FA +22AA +22FA +3AAA +E2FA +4272 +02AA +0226 +ENDCHAR +STARTCHAR uni74D4 +ENCODING 29908 +BBX 15 14 1 -1 +BITMAP +07BC +F4A4 +27BC +24A4 +27BC +24A4 +F7BC +22A8 +2544 +2FFE +3208 +C790 +0070 +078C +ENDCHAR +STARTCHAR uni74D5 +ENCODING 29909 +BBX 15 16 0 -2 +BITMAP +F7FC +1248 +17FC +FC46 +86EC +F554 +16EC +1554 +56EC +2444 +0000 +7FFC +0100 +3FF8 +0120 +FFFE +ENDCHAR +STARTCHAR uni74D6 +ENCODING 29910 +BBX 15 15 1 -1 +BITMAP +0040 +0FFE +F000 +27BC +24A4 +27BC +2110 +F7FC +2110 +27FC +2110 +3FFE +C192 +0F2C +01C6 +ENDCHAR +STARTCHAR uni74D7 +ENCODING 29911 +BBX 15 16 0 -2 +BITMAP +0222 +03FE +F890 +21FE +2310 +25FE +2110 +F9FE +2110 +21FE +2100 +23FE +3A8A +E376 +0252 +0276 +ENDCHAR +STARTCHAR uni74D8 +ENCODING 29912 +BBX 15 15 1 -1 +BITMAP +0110 +0FFE +F110 +27BC +24A4 +27BC +2108 +F110 +23FC +2620 +2BF8 +3220 +C3F8 +0220 +03FE +ENDCHAR +STARTCHAR uni74D9 +ENCODING 29913 +BBX 15 16 0 -2 +BITMAP +0040 +03FC +F840 +21F8 +2000 +23FC +F804 +21F0 +2040 +23FC +2008 +3BBC +E2A8 +4398 +0524 +0892 +ENDCHAR +STARTCHAR uni74DA +ENCODING 29914 +BBX 15 15 1 -1 +BITMAP +0528 +07FE +F548 +2FFE +22D4 +24A6 +23FC +F204 +23FC +2204 +23FC +3204 +C3FC +0108 +0606 +ENDCHAR +STARTCHAR uni74DB +ENCODING 29915 +BBX 15 16 0 -2 +BITMAP +0108 +01EC +F10A +2FEA +2928 +2BC8 +293E +FFE8 +2948 +2BE8 +2A28 +2B68 +3AA8 +CBF4 +0AB4 +12A2 +ENDCHAR +STARTCHAR uni74DC +ENCODING 29916 +BBX 15 15 1 -1 +BITMAP +0018 +01F0 +7E10 +4010 +4210 +4210 +4210 +4210 +4210 +4210 +4248 +4248 +43E4 +9E24 +8002 +ENDCHAR +STARTCHAR uni74DD +ENCODING 29917 +BBX 15 16 0 -2 +BITMAP +0220 +0720 +383C +2A44 +2A84 +2A24 +2A14 +2A14 +2A04 +2904 +2928 +2890 +2840 +4A30 +4D0E +8900 +ENDCHAR +STARTCHAR uni74DE +ENCODING 29918 +BBX 15 15 1 -1 +BITMAP +0E20 +74A0 +44A0 +44FC +5520 +5420 +57FE +5420 +5460 +5450 +5288 +5304 +5500 +9CC0 +B23E +ENDCHAR +STARTCHAR uni74DF +ENCODING 29919 +BBX 15 16 0 -2 +BITMAP +0240 +0740 +387C +2A84 +2B74 +2A54 +2A54 +2A74 +2A48 +2942 +2942 +28BE +2840 +4A30 +4D0E +8900 +ENDCHAR +STARTCHAR uni74E0 +ENCODING 29920 +BBX 15 15 1 -1 +BITMAP +1038 +11D0 +FD10 +2950 +2950 +4550 +8350 +3950 +0150 +FF48 +2148 +7D68 +8554 +0574 +1ACA +ENDCHAR +STARTCHAR uni74E1 +ENCODING 29921 +BBX 15 16 0 -2 +BITMAP +1008 +101C +7CE8 +10A8 +10A8 +FEA8 +44A8 +28A8 +7CA8 +10A4 +10A4 +FEA4 +10A2 +1128 +1134 +1224 +ENDCHAR +STARTCHAR uni74E2 +ENCODING 29922 +BBX 15 14 1 -1 +BITMAP +FE3C +28E8 +FEA8 +AAA8 +AAA8 +FEA8 +00A8 +7CA8 +00A8 +FEA8 +10A8 +552A +9576 +3204 +ENDCHAR +STARTCHAR uni74E3 +ENCODING 29923 +BBX 15 15 1 -1 +BITMAP +2068 +27C8 +FC7E +5554 +5554 +5554 +FD7E +2548 +2548 +FD7E +2548 +2528 +4528 +49E8 +9638 +ENDCHAR +STARTCHAR uni74E4 +ENCODING 29924 +BBX 15 16 0 -2 +BITMAP +1008 +FE1C +00E8 +EEA8 +AAA8 +EEA8 +44A8 +FEA8 +44A8 +FEA4 +44A4 +FEA4 +50A2 +CB28 +6534 +4224 +ENDCHAR +STARTCHAR uni74E5 +ENCODING 29925 +BBX 15 16 0 -2 +BITMAP +06FE +3820 +2C54 +2AB4 +2A58 +29B4 +5454 +5D92 +9030 +7EFC +52A4 +7EFC +1020 +1424 +FEFE +0202 +ENDCHAR +STARTCHAR uni74E6 +ENCODING 29926 +BBX 15 14 1 -1 +BITMAP +FFFE +0400 +0400 +0400 +07E0 +0820 +0820 +0A20 +0920 +1020 +1020 +13A2 +3C22 +C01E +ENDCHAR +STARTCHAR uni74E7 +ENCODING 29927 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +2020 +2020 +2020 +3DFC +2420 +2420 +3420 +2C20 +2420 +2420 +4C22 +7402 +C3FE +ENDCHAR +STARTCHAR uni74E8 +ENCODING 29928 +BBX 15 15 0 -2 +BITMAP +01FC +7C80 +1080 +1080 +10F8 +1088 +1088 +1148 +1128 +1128 +1D08 +E108 +414A +018A +0106 +ENDCHAR +STARTCHAR uni74E9 +ENCODING 29929 +BBX 15 14 1 -1 +BITMAP +FE18 +20E0 +2020 +2020 +3C20 +25FC +2420 +3420 +2C20 +2420 +2420 +4C22 +7402 +C3FE +ENDCHAR +STARTCHAR uni74EA +ENCODING 29930 +BBX 15 15 0 -1 +BITMAP +0004 +FC0E +20F0 +2080 +2080 +3CFC +2484 +24C4 +54A8 +4C90 +4528 +4544 +5602 +6402 +43FE +ENDCHAR +STARTCHAR uni74EB +ENCODING 29931 +BBX 15 15 1 -1 +BITMAP +0060 +0810 +3008 +CFF6 +0210 +0410 +18E0 +0000 +FFFE +0400 +0FE0 +0B20 +10A0 +1FE2 +F01E +ENDCHAR +STARTCHAR uni74EC +ENCODING 29932 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0080 +FE80 +2080 +20F8 +3C88 +2488 +2548 +2528 +2528 +2508 +4508 +554A +898A +0106 +ENDCHAR +STARTCHAR uni74ED +ENCODING 29933 +BBX 15 15 0 -2 +BITMAP +11FC +1080 +1080 +FE80 +92F8 +1088 +1088 +2948 +2928 +2928 +2908 +4B08 +4D4A +898A +0106 +ENDCHAR +STARTCHAR uni74EE +ENCODING 29934 +BBX 15 15 1 -1 +BITMAP +0820 +1010 +2208 +C426 +0870 +3F88 +0000 +FFFE +0800 +0FE0 +0A20 +1120 +1122 +1FE2 +F01E +ENDCHAR +STARTCHAR uni74EF +ENCODING 29935 +BBX 15 14 1 -1 +BITMAP +01FC +FE80 +8080 +8480 +84F8 +A488 +9488 +88C8 +88A8 +94A8 +E488 +8098 +FEEA +0186 +ENDCHAR +STARTCHAR uni74F0 +ENCODING 29936 +BBX 15 15 1 -1 +BITMAP +0018 +FE88 +2088 +2104 +2104 +3EFA +2448 +2448 +3448 +2C88 +2488 +2508 +4C32 +7402 +C3FE +ENDCHAR +STARTCHAR uni74F1 +ENCODING 29937 +BBX 15 15 1 -1 +BITMAP +0010 +FC60 +21C0 +2040 +21F0 +3C40 +2440 +27F8 +3440 +2C44 +2444 +243C +4C02 +7402 +C3FE +ENDCHAR +STARTCHAR uni74F2 +ENCODING 29938 +BBX 15 15 1 -1 +BITMAP +0040 +FE48 +2070 +23C0 +2040 +3D50 +2550 +2550 +35F0 +2C44 +2444 +243C +4C02 +7402 +C3FE +ENDCHAR +STARTCHAR uni74F3 +ENCODING 29939 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1080 +1080 +FE80 +10F8 +1088 +1088 +7D48 +4528 +4528 +4508 +4508 +7D4A +458A +0106 +ENDCHAR +STARTCHAR uni74F4 +ENCODING 29940 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2840 +2440 +4240 +9178 +0848 +0848 +FEA8 +0298 +4488 +2888 +10AA +08CA +088A +0006 +ENDCHAR +STARTCHAR uni74F5 +ENCODING 29941 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2080 +2880 +4480 +FEF8 +4288 +0088 +7D48 +4528 +4528 +4508 +4508 +7D4A +458A +0106 +ENDCHAR +STARTCHAR uni74F6 +ENCODING 29942 +BBX 15 15 1 -1 +BITMAP +4400 +25FE +2880 +FE80 +28F8 +2888 +2888 +FEC8 +28A8 +28A8 +2888 +2888 +488A +48EA +8986 +ENDCHAR +STARTCHAR uni74F7 +ENCODING 29943 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +78FE +0124 +0220 +1850 +6088 +0104 +FFFE +0800 +0FE0 +1220 +1122 +1FE2 +F01E +ENDCHAR +STARTCHAR uni74F8 +ENCODING 29944 +BBX 15 14 1 -1 +BITMAP +FDFE +2010 +2020 +20FC +3C84 +2484 +24FC +3484 +2C84 +2484 +24FC +4C02 +7402 +C3FE +ENDCHAR +STARTCHAR uni74F9 +ENCODING 29945 +BBX 14 15 1 -2 +BITMAP +FDF8 +8480 +8480 +FC80 +00F0 +FC90 +8490 +8550 +FD30 +8510 +8510 +FD54 +8594 +9514 +880C +ENDCHAR +STARTCHAR uni74FA +ENCODING 29946 +BBX 15 14 1 -1 +BITMAP +3DFE +2080 +3C80 +2080 +3CF8 +2088 +2088 +FEC8 +20A8 +20A8 +2488 +4C98 +F2EA +0186 +ENDCHAR +STARTCHAR uni74FB +ENCODING 29947 +BBX 15 16 0 -2 +BITMAP +4200 +24FC +1840 +2440 +5240 +1078 +FF48 +2048 +28A8 +7E98 +AA88 +2A88 +2AAA +2ECA +088A +0806 +ENDCHAR +STARTCHAR uni74FC +ENCODING 29948 +BBX 15 14 0 -1 +BITMAP +FDFC +2124 +2124 +21FC +3D24 +2524 +25FC +5420 +4DFC +4420 +4420 +55FE +6402 +43FE +ENDCHAR +STARTCHAR uni74FD +ENCODING 29949 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +7FFE +4002 +9FF4 +1010 +1FF0 +0000 +7FFC +0800 +0FE0 +0920 +10A4 +1624 +181C +ENDCHAR +STARTCHAR uni74FE +ENCODING 29950 +BBX 15 16 0 -2 +BITMAP +0C00 +71FC +1080 +FE80 +3880 +54F8 +9288 +0088 +1148 +FD28 +2528 +4508 +2908 +114A +298A +C506 +ENDCHAR +STARTCHAR uni74FF +ENCODING 29951 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE80 +4480 +2480 +08F8 +FE88 +0088 +00C8 +7CA8 +44A8 +4488 +448A +44EA +7D86 +ENDCHAR +STARTCHAR uni7500 +ENCODING 29952 +BBX 15 16 0 -2 +BITMAP +0200 +0F7C +7820 +0820 +FFA0 +2A38 +2A28 +FFA8 +2A58 +2A48 +FFC8 +0848 +085A +0F6A +F04A +4006 +ENDCHAR +STARTCHAR uni7501 +ENCODING 29953 +BBX 15 15 1 -1 +BITMAP +2200 +23FE +4480 +EE80 +2480 +24F8 +2488 +3488 +6EC8 +A4A8 +24A8 +2488 +248A +44EA +8586 +ENDCHAR +STARTCHAR uni7502 +ENCODING 29954 +BBX 15 16 0 -2 +BITMAP +1000 +087C +7E20 +4220 +4220 +7E38 +4228 +4028 +7F58 +5548 +5548 +7F48 +D55A +556A +554A +4306 +ENDCHAR +STARTCHAR uni7503 +ENCODING 29955 +BBX 15 15 1 -1 +BITMAP +0612 +7852 +0894 +FE94 +2828 +4C44 +8A82 +0900 +FFFE +0800 +0FE0 +1220 +1122 +1FE2 +F01E +ENDCHAR +STARTCHAR uni7504 +ENCODING 29956 +BBX 15 14 1 -1 +BITMAP +FFFE +1440 +1440 +7F40 +5578 +5548 +7F48 +0068 +0858 +7F48 +0848 +084A +0F7A +F0C6 +ENDCHAR +STARTCHAR uni7505 +ENCODING 29957 +BBX 15 14 1 -1 +BITMAP +FDFE +2100 +217C +2154 +3D7C +2554 +257C +3510 +2D7C +2610 +24FE +4C00 +7402 +C3FE +ENDCHAR +STARTCHAR uni7506 +ENCODING 29958 +BBX 13 16 1 -2 +BITMAP +1040 +0880 +FFF8 +2490 +79E0 +1040 +28A0 +7DF0 +0000 +FFF8 +1000 +1FC0 +1240 +2148 +2C48 +3038 +ENDCHAR +STARTCHAR uni7507 +ENCODING 29959 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +2CA8 +4920 +1450 +2288 +7FFE +4002 +8004 +7FFC +0800 +0FE0 +0920 +10A4 +1624 +181C +ENDCHAR +STARTCHAR uni7508 +ENCODING 29960 +BBX 15 16 0 -2 +BITMAP +0800 +10FC +7E40 +4240 +7E40 +4278 +7E48 +4248 +7EA8 +0898 +FF88 +1888 +2CAA +4ACA +888A +0806 +ENDCHAR +STARTCHAR uni7509 +ENCODING 29961 +BBX 15 16 0 -2 +BITMAP +2200 +147C +FFA0 +1420 +1420 +7F38 +1528 +FFA8 +1558 +7F48 +1448 +3648 +555A +94EA +144A +1406 +ENDCHAR +STARTCHAR uni750A +ENCODING 29962 +BBX 15 16 0 -2 +BITMAP +0800 +7F7C +4920 +FFA0 +4920 +7F38 +0828 +7F28 +4958 +7F48 +1048 +FF48 +215A +726A +0C4A +F306 +ENDCHAR +STARTCHAR uni750B +ENCODING 29963 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +FE40 +4440 +2840 +FE78 +8248 +9248 +FEA8 +9298 +BA88 +AA88 +AAAA +BACA +828A +8606 +ENDCHAR +STARTCHAR uni750C +ENCODING 29964 +BBX 15 14 1 -1 +BITMAP +FDFE +8080 +9C80 +9480 +94F8 +9C88 +8088 +BEC8 +AAA8 +AAA8 +BE88 +80AA +FECA +0186 +ENDCHAR +STARTCHAR uni750D +ENCODING 29965 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3FF8 +2448 +3FF8 +0000 +FFFE +8002 +BFFA +0800 +0FE0 +1220 +1FE2 +F03E +ENDCHAR +STARTCHAR uni750E +ENCODING 29966 +BBX 15 15 1 -1 +BITMAP +0800 +FFFE +0840 +7F40 +4940 +7F78 +4948 +7F48 +0A68 +1E58 +E148 +0248 +FFCA +227A +16C6 +ENDCHAR +STARTCHAR uni750F +ENCODING 29967 +BBX 13 16 1 -2 +BITMAP +1008 +FE10 +1020 +7CC8 +0010 +7C20 +44C8 +7C10 +2820 +FEC0 +0000 +FFF8 +1000 +1FC0 +2248 +3938 +ENDCHAR +STARTCHAR uni7510 +ENCODING 29968 +BBX 15 16 0 -2 +BITMAP +0800 +497C +2A20 +0820 +FF20 +2A38 +4928 +8828 +4258 +7748 +9248 +5A48 +2F5A +226A +424A +8206 +ENDCHAR +STARTCHAR uni7511 +ENCODING 29969 +BBX 15 15 1 -1 +BITMAP +0C00 +45FC +4240 +FF40 +9240 +D678 +BA48 +FE48 +0068 +7E58 +4248 +7E48 +424A +42EA +7F06 +ENDCHAR +STARTCHAR uni7512 +ENCODING 29970 +BBX 15 16 0 -2 +BITMAP +2000 +207C +7FA0 +D520 +5520 +5538 +FFA8 +5528 +5558 +5548 +FFC8 +0048 +6A5A +556A +954A +0006 +ENDCHAR +STARTCHAR uni7513 +ENCODING 29971 +BBX 15 15 1 -1 +BITMAP +0010 +7EFE +4244 +7E28 +40FE +7E10 +A2FE +3E10 +0010 +FFFC +1000 +1FE0 +1222 +1FE2 +E01E +ENDCHAR +STARTCHAR uni7514 +ENCODING 29972 +BBX 15 16 0 -2 +BITMAP +2000 +3E7C +4220 +FFA0 +5120 +64B8 +7FA8 +4028 +5F58 +4048 +5F48 +4048 +5F5A +516A +5F4A +9106 +ENDCHAR +STARTCHAR uni7515 +ENCODING 29973 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +2090 +49FE +D310 +25FC +FD10 +09FE +3000 +FFFE +0800 +1FF0 +1110 +3FF2 +C00E +ENDCHAR +STARTCHAR uni7516 +ENCODING 29974 +BBX 13 16 1 -2 +BITMAP +7DF0 +4510 +7DF0 +4510 +7DF0 +4510 +7DF0 +28A0 +4510 +FFF8 +1000 +1FC0 +1240 +2148 +2C48 +3038 +ENDCHAR +STARTCHAR uni7517 +ENCODING 29975 +BBX 15 15 1 -1 +BITMAP +0800 +0EFC +0840 +7F40 +4940 +7E78 +4948 +7F48 +5268 +7F58 +5548 +5748 +E148 +5D7A +4BC6 +ENDCHAR +STARTCHAR uni7518 +ENCODING 29976 +BBX 13 15 2 -1 +BITMAP +1040 +1040 +1040 +FFF8 +1040 +1040 +1040 +1040 +1FC0 +1040 +1040 +1040 +1040 +1040 +1FC0 +ENDCHAR +STARTCHAR uni7519 +ENCODING 29977 +BBX 15 16 0 -2 +BITMAP +0050 +0048 +0040 +FFFE +0040 +2240 +2240 +FF40 +2240 +2220 +3E20 +2212 +2212 +3E0A +2206 +0002 +ENDCHAR +STARTCHAR uni751A +ENCODING 29978 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +7FFC +0820 +0FE0 +0820 +0FE0 +0820 +FFFE +2240 +2240 +3C7C +2000 +2000 +3FFC +ENDCHAR +STARTCHAR uni751B +ENCODING 29979 +BBX 15 16 0 -2 +BITMAP +4404 +441E +44F0 +4410 +FE10 +44FE +4410 +4410 +4410 +7CFE +4482 +4482 +4482 +4482 +7CFE +4482 +ENDCHAR +STARTCHAR uni751C +ENCODING 29980 +BBX 15 15 1 -1 +BITMAP +0C88 +7088 +1088 +13FE +1088 +FE88 +1088 +1088 +10F8 +7C88 +4488 +4488 +4488 +4488 +7CF8 +ENDCHAR +STARTCHAR uni751D +ENCODING 29981 +BBX 15 16 0 -2 +BITMAP +0848 +0F48 +0848 +7F48 +49FE +4E48 +7848 +4948 +4778 +4048 +5E48 +5248 +527A +5202 +91FE +2000 +ENDCHAR +STARTCHAR uni751E +ENCODING 29982 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +1110 +7FFC +4004 +4FE4 +0820 +0FE0 +0000 +1010 +FFFE +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni751F +ENCODING 29983 +BBX 15 15 1 -1 +BITMAP +0100 +1100 +1100 +1100 +3FFC +2100 +4100 +8100 +0100 +3FF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni7520 +ENCODING 29984 +BBX 15 15 1 -1 +BITMAP +0040 +0240 +F240 +9240 +93FC +9440 +9040 +F040 +9040 +97FC +9040 +9040 +F040 +0040 +0FFE +ENDCHAR +STARTCHAR uni7521 +ENCODING 29985 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +4890 +4890 +7EFE +4890 +8910 +0810 +0810 +7EFE +0810 +0810 +0810 +0E10 +F1FE +4000 +ENDCHAR +STARTCHAR uni7522 +ENCODING 29986 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +0220 +01C0 +0220 +3FFE +2080 +2480 +27FC +2880 +3080 +27F8 +4080 +4080 +9FFE +ENDCHAR +STARTCHAR uni7523 +ENCODING 29987 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0820 +0440 +7FFC +4000 +4900 +4FF0 +5100 +4100 +4FF0 +8100 +8100 +3FFC +ENDCHAR +STARTCHAR uni7524 +ENCODING 29988 +BBX 15 15 1 -1 +BITMAP +0010 +FF50 +1050 +227E +E290 +1410 +3810 +C87C +0C10 +1C10 +2A10 +CAFE +0900 +1080 +707E +ENDCHAR +STARTCHAR uni7525 +ENCODING 29989 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +5124 +5124 +7DFC +9124 +9124 +11FC +7C20 +13FE +1042 +1C42 +3082 +C102 +061C +ENDCHAR +STARTCHAR uni7526 +ENCODING 29990 +BBX 15 15 1 -1 +BITMAP +0010 +FFD0 +0850 +7F7E +4990 +4910 +7F10 +497C +4910 +7F10 +0810 +68FE +1000 +2C00 +C3FE +ENDCHAR +STARTCHAR uni7527 +ENCODING 29991 +BBX 15 16 0 -2 +BITMAP +1010 +5050 +7E7E +9090 +7C7C +1010 +1EFE +E000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni7528 +ENCODING 29992 +BBX 14 14 1 -1 +BITMAP +3FFC +2104 +2104 +2104 +3FFC +2104 +2104 +2104 +3FFC +2104 +2104 +4104 +4104 +811C +ENDCHAR +STARTCHAR uni7529 +ENCODING 29993 +BBX 15 15 0 -2 +BITMAP +3FF8 +2108 +2108 +2108 +3FF8 +2108 +2108 +2108 +3FF8 +2108 +2108 +2128 +4112 +4102 +80FE +ENDCHAR +STARTCHAR uni752A +ENCODING 29994 +BBX 13 15 1 -1 +BITMAP +0200 +0200 +0400 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +2108 +3FF8 +2108 +2108 +4108 +8038 +ENDCHAR +STARTCHAR uni752B +ENCODING 29995 +BBX 15 15 1 -1 +BITMAP +0110 +0108 +FFFE +0100 +0100 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +2118 +ENDCHAR +STARTCHAR uni752C +ENCODING 29996 +BBX 11 14 3 -1 +BITMAP +FFC0 +0080 +1B00 +0400 +FFE0 +8420 +8420 +FFE0 +8420 +8420 +FFE0 +8420 +8420 +84E0 +ENDCHAR +STARTCHAR uni752D +ENCODING 29997 +BBX 15 16 0 -2 +BITMAP +7FFC +0100 +0770 +190C +E102 +0000 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +4108 +4128 +8110 +ENDCHAR +STARTCHAR uni752E +ENCODING 29998 +BBX 13 16 0 -2 +BITMAP +0800 +1FF8 +2248 +4488 +0950 +1220 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +4108 +4128 +8110 +ENDCHAR +STARTCHAR uni752F +ENCODING 29999 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8208 +A928 +4850 +8FC8 +0000 +7FF0 +4210 +7FF0 +4210 +7FF0 +4210 +4270 +ENDCHAR +STARTCHAR uni7530 +ENCODING 30000 +BBX 13 12 2 0 +BITMAP +FFF8 +8208 +8208 +8208 +8208 +FFF8 +8208 +8208 +8208 +8208 +8208 +FFF8 +ENDCHAR +STARTCHAR uni7531 +ENCODING 30001 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +0200 +FFF8 +8208 +8208 +8208 +8208 +FFF8 +8208 +8208 +8208 +8208 +FFF8 +ENDCHAR +STARTCHAR uni7532 +ENCODING 30002 +BBX 11 14 3 -1 +BITMAP +FFE0 +8420 +8420 +8420 +FFE0 +8420 +8420 +8420 +FFE0 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni7533 +ENCODING 30003 +BBX 11 15 3 -1 +BITMAP +0400 +0400 +0400 +FFE0 +8420 +8420 +FFE0 +8420 +8420 +8420 +FFE0 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni7534 +ENCODING 30004 +BBX 11 16 2 -2 +BITMAP +0400 +0400 +0400 +0400 +FFE0 +8420 +8420 +8420 +8420 +FFE0 +8020 +8020 +8020 +8020 +FFE0 +8020 +ENDCHAR +STARTCHAR uni7535 +ENCODING 30005 +BBX 13 16 2 -2 +BITMAP +0400 +0400 +0400 +FFE0 +8420 +8420 +8420 +FFE0 +8420 +8420 +8420 +FFE0 +8428 +0408 +0408 +03F8 +ENDCHAR +STARTCHAR uni7536 +ENCODING 30006 +BBX 11 15 2 -1 +BITMAP +0800 +0800 +1000 +FFE0 +8420 +8420 +8420 +8420 +FFE0 +8420 +8420 +8420 +8420 +FFE0 +8020 +ENDCHAR +STARTCHAR uni7537 +ENCODING 30007 +BBX 13 14 2 -1 +BITMAP +7FF0 +4210 +4210 +7FF0 +4210 +4210 +7FF0 +0400 +FFF8 +0408 +0808 +1010 +2010 +C0E0 +ENDCHAR +STARTCHAR uni7538 +ENCODING 30008 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +3FFC +2004 +4004 +BFE4 +2224 +2224 +3FE4 +2224 +2224 +2224 +3FE8 +0008 +0070 +ENDCHAR +STARTCHAR uni7539 +ENCODING 30009 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0000 +FFFE +0800 +1000 +1FF0 +0010 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni753A +ENCODING 30010 +BBX 15 14 1 -1 +BITMAP +FE00 +93FE +9210 +9210 +FE10 +9210 +9210 +9210 +FE10 +0010 +0010 +0010 +0010 +0070 +ENDCHAR +STARTCHAR uni753B +ENCODING 30011 +BBX 13 14 2 -1 +BITMAP +FFF8 +0200 +0200 +9FC8 +9248 +9248 +9FC8 +9248 +9248 +9248 +9FC8 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni753C +ENCODING 30012 +BBX 13 14 2 -1 +BITMAP +3FE0 +2220 +2220 +3FE0 +2220 +2220 +3FE0 +0000 +FFF8 +0200 +0200 +0200 +0200 +0E00 +ENDCHAR +STARTCHAR uni753D +ENCODING 30013 +BBX 14 15 1 -1 +BITMAP +0004 +0124 +F924 +A924 +A924 +A924 +F924 +A924 +A924 +A924 +A924 +F924 +0204 +0204 +0404 +ENDCHAR +STARTCHAR uni753E +ENCODING 30014 +BBX 12 15 2 -1 +BITMAP +2210 +2210 +4420 +8840 +4420 +2210 +2210 +0000 +7FF0 +4210 +4210 +7FF0 +4210 +4210 +7FF0 +ENDCHAR +STARTCHAR uni753F +ENCODING 30015 +BBX 14 15 1 -1 +BITMAP +0040 +0020 +F820 +A800 +ABFC +A900 +A900 +F900 +A900 +A900 +A900 +A900 +F900 +8900 +01F8 +ENDCHAR +STARTCHAR uni7540 +ENCODING 30016 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0000 +FFFE +0420 +0420 +0820 +1020 +6020 +ENDCHAR +STARTCHAR uni7541 +ENCODING 30017 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +0000 +FFFE +0820 +0820 +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni7542 +ENCODING 30018 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F900 +A9F0 +AA10 +AA10 +AA20 +FC20 +A840 +A840 +A8A0 +A8A0 +F910 +8A10 +0408 +0804 +ENDCHAR +STARTCHAR uni7543 +ENCODING 30019 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1040 +FE7C +9284 +9284 +FF04 +9244 +9224 +FE24 +9204 +1004 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni7544 +ENCODING 30020 +BBX 12 15 2 -1 +BITMAP +0810 +8810 +8420 +4420 +4040 +0080 +FFE0 +8420 +8420 +8420 +FFE0 +8420 +8420 +8420 +FFE0 +ENDCHAR +STARTCHAR uni7545 +ENCODING 30021 +BBX 13 16 1 -2 +BITMAP +2000 +23F0 +2020 +F840 +A880 +A900 +FBF8 +A8A8 +A8A8 +A928 +FA48 +A848 +2088 +2108 +2250 +2020 +ENDCHAR +STARTCHAR uni7546 +ENCODING 30022 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FE20 +0020 +7C20 +5420 +5440 +5440 +7C50 +5448 +5484 +5484 +7C9E +03E2 +ENDCHAR +STARTCHAR uni7547 +ENCODING 30023 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F900 +A9F8 +AA08 +AC08 +A908 +F888 +A888 +A828 +A848 +A888 +FB08 +8808 +0050 +0020 +ENDCHAR +STARTCHAR uni7548 +ENCODING 30024 +BBX 15 14 1 -1 +BITMAP +01FE +F900 +A900 +A900 +A9FC +A944 +F944 +A944 +A928 +A928 +AA10 +FA28 +0444 +0082 +ENDCHAR +STARTCHAR uni7549 +ENCODING 30025 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F840 +AFFC +A840 +A840 +F840 +AFFE +A840 +A840 +A8A0 +F8A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni754A +ENCODING 30026 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +F910 +AFFC +A910 +A910 +F910 +A910 +A910 +AFFE +A910 +FA10 +0210 +0410 +0810 +ENDCHAR +STARTCHAR uni754B +ENCODING 30027 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +0080 +F8FE +A908 +A908 +AB08 +FC88 +A888 +A850 +A850 +F820 +0050 +0088 +0306 +ENDCHAR +STARTCHAR uni754C +ENCODING 30028 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0440 +0820 +3838 +C826 +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni754D +ENCODING 30029 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F8A0 +A910 +AB18 +AD16 +F910 +A910 +A910 +A910 +A910 +FA10 +0210 +0410 +0810 +ENDCHAR +STARTCHAR uni754E +ENCODING 30030 +BBX 15 15 1 -1 +BITMAP +0040 +0050 +F848 +A844 +A840 +AFFE +F840 +A840 +A840 +A8A0 +A8A0 +F910 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni754F +ENCODING 30031 +BBX 15 14 1 -1 +BITMAP +1FF0 +1110 +1FF0 +1110 +1110 +1FF0 +0000 +FFFC +1210 +1110 +10A0 +1060 +1E18 +F006 +ENDCHAR +STARTCHAR uni7550 +ENCODING 30032 +BBX 13 14 2 -1 +BITMAP +FFF8 +0000 +3FE0 +2020 +2020 +3FE0 +0000 +7FF0 +4210 +4210 +7FF0 +4210 +4210 +7FF0 +ENDCHAR +STARTCHAR uni7551 +ENCODING 30033 +BBX 14 15 1 -1 +BITMAP +1000 +11FC +1524 +5524 +5524 +5524 +9924 +91FC +1124 +2924 +2924 +2524 +4324 +41FC +8000 +ENDCHAR +STARTCHAR uni7552 +ENCODING 30034 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FE20 +0020 +7C20 +5420 +5420 +5450 +7C50 +5450 +5488 +5488 +7D04 +0202 +ENDCHAR +STARTCHAR uni7553 +ENCODING 30035 +BBX 15 16 0 -2 +BITMAP +0100 +0104 +7D88 +0950 +1120 +2118 +C506 +0200 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni7554 +ENCODING 30036 +BBX 14 15 1 -1 +BITMAP +0248 +0148 +F950 +A840 +ABF8 +A840 +F840 +A840 +AFFC +A840 +A840 +F840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni7555 +ENCODING 30037 +BBX 11 16 2 -2 +BITMAP +7FC0 +4440 +4440 +7FC0 +4440 +4440 +7FC0 +0000 +FFE0 +8420 +8420 +FFE0 +8420 +8420 +FFE0 +8020 +ENDCHAR +STARTCHAR uni7556 +ENCODING 30038 +BBX 14 16 1 -2 +BITMAP +0010 +0038 +FBE0 +AAA0 +AAA0 +AAA0 +AAA0 +FAA0 +AAA0 +AA90 +AA90 +AAD0 +FAA8 +8CE8 +04A4 +0800 +ENDCHAR +STARTCHAR uni7557 +ENCODING 30039 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0000 +1FF0 +1010 +1FF0 +0000 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni7558 +ENCODING 30040 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F840 +ABF8 +AA48 +AA48 +ABF8 +FA48 +AA48 +AA48 +AFFC +AA08 +FA08 +8A08 +0228 +0210 +ENDCHAR +STARTCHAR uni7559 +ENCODING 30041 +BBX 15 15 1 -1 +BITMAP +0E00 +70FE +4012 +4412 +4422 +7A42 +C28C +0000 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni755A +ENCODING 30042 +BBX 15 15 1 -1 +BITMAP +0200 +0420 +0870 +3F88 +0200 +FFFE +0440 +0820 +3FF8 +D116 +1110 +1FF0 +1110 +1110 +1FF0 +ENDCHAR +STARTCHAR uni755B +ENCODING 30043 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F8A0 +A910 +AA08 +AC26 +F840 +A990 +A822 +A842 +A984 +F808 +0010 +0060 +0380 +ENDCHAR +STARTCHAR uni755C +ENCODING 30044 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0200 +0420 +3848 +0C84 +03FE +FE02 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +ENDCHAR +STARTCHAR uni755D +ENCODING 30045 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1078 +FE48 +0088 +7D08 +5608 +5410 +5410 +7C30 +5428 +5444 +5484 +7D02 +0202 +ENDCHAR +STARTCHAR uni755E +ENCODING 30046 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +FFFE +0120 +0120 +7D20 +5538 +5548 +5548 +7D88 +5510 +5510 +5528 +7D48 +4584 +0102 +ENDCHAR +STARTCHAR uni755F +ENCODING 30047 +BBX 15 15 0 -2 +BITMAP +3FF8 +2108 +3FF8 +2108 +3FF8 +1210 +2208 +47E4 +8822 +1440 +2280 +0100 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni7560 +ENCODING 30048 +BBX 13 15 2 -1 +BITMAP +0200 +0400 +3FE0 +2020 +3FE0 +2020 +3FE0 +0000 +FFF8 +8208 +8208 +FFF8 +8208 +8208 +FFF8 +ENDCHAR +STARTCHAR uni7561 +ENCODING 30049 +BBX 14 16 1 -2 +BITMAP +0040 +0020 +F820 +ABFC +A840 +A848 +A888 +F9F0 +A824 +A844 +A888 +AB10 +F820 +8850 +0088 +0304 +ENDCHAR +STARTCHAR uni7562 +ENCODING 30050 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +3FF8 +2108 +3FF8 +1110 +FFFE +1110 +1110 +7FFC +0100 +3FF8 +0100 +0100 +ENDCHAR +STARTCHAR uni7563 +ENCODING 30051 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0C60 +3018 +CFE6 +0000 +1FF0 +1010 +1FF0 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni7564 +ENCODING 30052 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +F820 +A9FC +A820 +A820 +FBFE +A808 +A808 +ABFE +A808 +F908 +0088 +0008 +0038 +ENDCHAR +STARTCHAR uni7565 +ENCODING 30053 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F8FC +A908 +AB08 +A890 +A860 +F998 +AE06 +A9F8 +A908 +A908 +F908 +0108 +01F8 +ENDCHAR +STARTCHAR uni7566 +ENCODING 30054 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FBFC +A840 +A840 +A840 +FFFE +A800 +A840 +A840 +ABFC +F840 +0040 +0040 +07FE +ENDCHAR +STARTCHAR uni7567 +ENCODING 30055 +BBX 15 15 1 -1 +BITMAP +3FF8 +2108 +3FF8 +2108 +3FF8 +0200 +07F0 +3820 +0440 +07C0 +F83E +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7568 +ENCODING 30056 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +FFFE +0540 +0920 +3118 +C006 +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +1010 +ENDCHAR +STARTCHAR uni7569 +ENCODING 30057 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +F820 +AFFE +A840 +A840 +F8A2 +A8A4 +A928 +AB10 +AD10 +F908 +0168 +0184 +0602 +ENDCHAR +STARTCHAR uni756A +ENCODING 30058 +BBX 15 15 1 -1 +BITMAP +00F8 +3F00 +1110 +0920 +FFFE +0540 +0920 +3118 +C006 +1FF0 +1110 +1FF0 +1110 +1110 +1FF0 +ENDCHAR +STARTCHAR uni756B +ENCODING 30059 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +FFFE +1110 +1FF0 +1110 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni756C +ENCODING 30060 +BBX 15 15 1 -1 +BITMAP +0100 +06C0 +1830 +EFEE +0100 +3FFC +0920 +3118 +C306 +3FF8 +2108 +3FF8 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni756D +ENCODING 30061 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F8A0 +A910 +AA08 +ADF4 +F842 +A840 +AFFC +A840 +AA48 +FA48 +0444 +0040 +01C0 +ENDCHAR +STARTCHAR uni756E +ENCODING 30062 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F9FC +AA00 +ADF8 +A908 +A948 +F928 +AFFC +A908 +AA48 +AA28 +FBFC +8808 +0050 +0020 +ENDCHAR +STARTCHAR uni756F +ENCODING 30063 +BBX 15 15 1 -1 +BITMAP +0040 +0090 +F918 +ABF4 +A890 +A910 +AE1E +F880 +A8FC +A908 +AB08 +A890 +F860 +0198 +0606 +ENDCHAR +STARTCHAR uni7570 +ENCODING 30064 +BBX 15 14 1 -1 +BITMAP +1FF0 +1110 +1FF0 +1110 +1110 +1FF0 +0440 +7FFC +0440 +0440 +FFFE +0200 +0C30 +700C +ENDCHAR +STARTCHAR uni7571 +ENCODING 30065 +BBX 14 14 1 -1 +BITMAP +FFFC +0480 +7CF8 +4488 +4488 +7CF8 +0480 +3FF0 +2210 +2210 +3FF0 +2210 +2210 +3FF0 +ENDCHAR +STARTCHAR uni7572 +ENCODING 30066 +BBX 15 15 1 -1 +BITMAP +0100 +06C0 +1830 +EFEE +0000 +3FFC +0100 +3118 +C306 +3FF8 +2108 +3FF8 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni7573 +ENCODING 30067 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +3FF8 +2108 +3FF8 +0000 +7FFC +4004 +5FF4 +1010 +1FF0 +1010 +1010 +FFFE +ENDCHAR +STARTCHAR uni7574 +ENCODING 30068 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFE +A840 +ABFC +A840 +FFFE +A880 +A888 +AFFE +A908 +FA88 +0448 +0808 +0038 +ENDCHAR +STARTCHAR uni7575 +ENCODING 30069 +BBX 15 16 0 -2 +BITMAP +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +FFFE +0000 +1FF0 +5114 +5FF4 +5114 +5FF4 +4004 +7FFC +ENDCHAR +STARTCHAR uni7576 +ENCODING 30070 +BBX 13 15 2 -1 +BITMAP +2220 +2220 +1240 +FFF8 +8008 +9FC8 +1040 +1FC0 +0000 +7FF0 +4210 +7FF0 +4210 +4210 +7FF0 +ENDCHAR +STARTCHAR uni7577 +ENCODING 30071 +BBX 15 14 1 -1 +BITMAP +03BC +F884 +AA94 +A908 +AA94 +FC22 +A800 +AFBE +A882 +AA92 +F914 +0188 +0294 +0C62 +ENDCHAR +STARTCHAR uni7578 +ENCODING 30072 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FBFE +A850 +A888 +A904 +F800 +AFFE +A804 +A9E4 +A924 +F924 +01E4 +0004 +001C +ENDCHAR +STARTCHAR uni7579 +ENCODING 30073 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFC +A804 +A804 +AA00 +ABBC +FAA4 +ACA4 +ACA4 +AAA4 +A9AC +F920 +0222 +0C1E +ENDCHAR +STARTCHAR uni757A +ENCODING 30074 +BBX 15 14 1 -1 +BITMAP +7FFC +0000 +1FF0 +1110 +1FF0 +1110 +7FFC +0000 +1FF0 +1110 +1FF0 +1110 +1110 +FFFE +ENDCHAR +STARTCHAR uni757B +ENCODING 30075 +BBX 14 15 1 -1 +BITMAP +0040 +0248 +F950 +A840 +ABF8 +A880 +AFFC +F910 +AA48 +AC44 +A840 +ABF8 +F840 +8840 +07FC +ENDCHAR +STARTCHAR uni757C +ENCODING 30076 +BBX 14 15 1 -2 +BITMAP +01F8 +F908 +A9F8 +A908 +A9F8 +A800 +FBFC +A900 +A9FC +AA54 +AC94 +F924 +8A44 +00A8 +0110 +ENDCHAR +STARTCHAR uni757D +ENCODING 30077 +BBX 15 15 1 -1 +BITMAP +0038 +03C0 +F840 +AFFE +A840 +ABFC +FA44 +ABFC +AA44 +ABFC +A840 +FBFC +0040 +0040 +07FE +ENDCHAR +STARTCHAR uni757E +ENCODING 30078 +BBX 15 14 1 -1 +BITMAP +1FF0 +1110 +1FF0 +1110 +1110 +1FF0 +0000 +FEFE +9292 +9292 +FEFE +9292 +9292 +FEFE +ENDCHAR +STARTCHAR uni757F +ENCODING 30079 +BBX 15 15 1 -1 +BITMAP +1090 +24A4 +68E8 +1290 +26A4 +79FA +0090 +FFFE +0040 +7F48 +4948 +7F30 +4922 +7F52 +018C +ENDCHAR +STARTCHAR uni7580 +ENCODING 30080 +BBX 15 16 0 -2 +BITMAP +0020 +5420 +55FE +A820 +55FC +5424 +03FE +7C24 +55FC +5420 +7CA0 +54BC +54A0 +7D60 +453E +0200 +ENDCHAR +STARTCHAR uni7581 +ENCODING 30081 +BBX 15 14 1 -1 +BITMAP +07BE +F98A +AA96 +ADAA +AA92 +FC40 +A9B0 +AE0E +A840 +AB90 +F864 +0388 +0030 +03C0 +ENDCHAR +STARTCHAR uni7582 +ENCODING 30082 +BBX 15 15 1 -1 +BITMAP +1FF0 +1110 +1FF0 +1110 +1FF0 +701C +0C60 +E00E +7FFC +4824 +4FE4 +0820 +0FE0 +0820 +FFFE +ENDCHAR +STARTCHAR uni7583 +ENCODING 30083 +BBX 14 15 1 -1 +BITMAP +0040 +03F8 +F910 +A8A0 +AFFC +A800 +ABF8 +FA48 +ABF8 +AA48 +ABF8 +A840 +FBF8 +8840 +07FC +ENDCHAR +STARTCHAR uni7584 +ENCODING 30084 +BBX 15 16 0 -2 +BITMAP +0020 +0124 +F8A8 +ABFE +A8A8 +A924 +FA22 +A904 +A904 +A9DE +AA44 +FD54 +889E +0104 +0204 +0404 +ENDCHAR +STARTCHAR uni7585 +ENCODING 30085 +BBX 15 15 0 -2 +BITMAP +03FE +F800 +A9FC +A924 +A9FC +F924 +ABFE +A800 +A9FC +A924 +F9FC +8924 +01FC +0000 +03FE +ENDCHAR +STARTCHAR uni7586 +ENCODING 30086 +BBX 15 14 1 -1 +BITMAP +FBFE +0800 +09FC +F924 +81FC +8124 +FBFE +0800 +49FC +E924 +49FC +6924 +C924 +33FE +ENDCHAR +STARTCHAR uni7587 +ENCODING 30087 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FBF8 +A840 +A9F0 +A800 +FFFE +A842 +ABF8 +A800 +AFFE +F804 +077E +0524 +070C +ENDCHAR +STARTCHAR uni7588 +ENCODING 30088 +BBX 15 16 0 -2 +BITMAP +0080 +F8BE +0080 +709C +5294 +729C +0280 +FABE +AAAA +ACAA +F8BE +A8AA +A8AA +F93E +8922 +0200 +ENDCHAR +STARTCHAR uni7589 +ENCODING 30089 +BBX 15 15 1 -1 +BITMAP +0FE0 +0920 +0FE0 +0920 +7FFC +5454 +7C7C +5454 +7D7C +0100 +7FFC +4204 +0FE0 +0220 +FFFE +ENDCHAR +STARTCHAR uni758A +ENCODING 30090 +BBX 15 15 1 -1 +BITMAP +0FE0 +0920 +0FE0 +0920 +3FF8 +2AA8 +3EF8 +2AA8 +FFFE +8812 +8FF2 +0810 +0FF0 +0810 +FFFE +ENDCHAR +STARTCHAR uni758B +ENCODING 30091 +BBX 15 14 1 -1 +BITMAP +7FFC +0104 +0108 +0110 +0100 +2100 +21F8 +2100 +2100 +6100 +5100 +4D00 +8380 +807E +ENDCHAR +STARTCHAR uni758C +ENCODING 30092 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +1FF0 +0110 +FFFE +0110 +1FF0 +0100 +1100 +11F0 +1900 +2700 +41FE +ENDCHAR +STARTCHAR uni758D +ENCODING 30093 +BBX 15 14 0 -1 +BITMAP +7FFC +0104 +1100 +11F0 +2900 +47FE +8000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni758E +ENCODING 30094 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +07FE +0820 +11FC +5124 +5124 +5D24 +51FC +50A8 +50A8 +5CA8 +7124 +C222 +0020 +ENDCHAR +STARTCHAR uni758F +ENCODING 30095 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +07FE +0840 +1048 +509C +53E2 +5C00 +5088 +50A8 +50A8 +5CA8 +712A +C12A +0206 +ENDCHAR +STARTCHAR uni7590 +ENCODING 30096 +BBX 15 16 0 -2 +BITMAP +0100 +3FF8 +0100 +7FFE +4002 +9FF4 +1110 +1FF0 +1110 +1FF0 +0000 +7FFC +0104 +11F0 +2900 +C7FE +ENDCHAR +STARTCHAR uni7591 +ENCODING 30097 +BBX 15 15 1 -1 +BITMAP +4000 +4DFC +7008 +4450 +4420 +3FFE +4024 +7C28 +9120 +113C +FF20 +1120 +29A0 +4260 +841E +ENDCHAR +STARTCHAR uni7592 +ENCODING 30098 +BBX 14 14 1 0 +BITMAP +0080 +0080 +3FFC +A000 +6000 +2000 +2000 +2000 +6000 +A000 +2000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni7593 +ENCODING 30099 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +57F8 +5108 +1110 +3120 +513C +9104 +1104 +2204 +2204 +4428 +8810 +ENDCHAR +STARTCHAR uni7594 +ENCODING 30100 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6000 +2FFE +2040 +2040 +6040 +A040 +2040 +4040 +4040 +8040 +01C0 +ENDCHAR +STARTCHAR uni7595 +ENCODING 30101 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +5200 +5208 +1210 +3260 +5380 +9200 +1204 +2204 +2204 +41FC +8000 +ENDCHAR +STARTCHAR uni7596 +ENCODING 30102 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +57FC +5084 +1084 +3084 +5084 +9094 +1088 +2080 +2080 +4080 +8080 +ENDCHAR +STARTCHAR uni7597 +ENCODING 30103 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +57FC +5008 +1010 +3020 +5040 +9040 +1040 +2040 +2040 +4140 +8080 +ENDCHAR +STARTCHAR uni7598 +ENCODING 30104 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +5000 +57FC +1040 +3040 +5040 +9040 +1040 +2040 +2040 +4FFE +8000 +ENDCHAR +STARTCHAR uni7599 +ENCODING 30105 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1100 +9100 +53FC +5400 +1800 +33F8 +5010 +9060 +1080 +2100 +2202 +4202 +81FE +ENDCHAR +STARTCHAR uni759A +ENCODING 30106 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A100 +6100 +23E0 +2220 +2420 +6840 +A040 +2080 +4140 +4220 +8C18 +3006 +ENDCHAR +STARTCHAR uni759B +ENCODING 30107 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9010 +5010 +57FE +1010 +3010 +5210 +9110 +1110 +2010 +2010 +4050 +8020 +ENDCHAR +STARTCHAR uni759C +ENCODING 30108 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +5000 +57FE +1040 +3040 +5050 +9048 +1044 +2040 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni759D +ENCODING 30109 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6000 +2040 +2040 +2040 +6444 +A444 +2444 +4444 +4444 +8444 +07FC +ENDCHAR +STARTCHAR uni759E +ENCODING 30110 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +53F8 +5000 +1000 +37FE +5080 +9100 +13F8 +2008 +2008 +4050 +8020 +ENDCHAR +STARTCHAR uni759F +ENCODING 30111 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +53FC +5200 +1200 +3200 +5FFE +9200 +1200 +2200 +23FC +4000 +8000 +ENDCHAR +STARTCHAR uni75A0 +ENCODING 30112 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +57FC +5100 +1100 +31F8 +5108 +9108 +1208 +2208 +2408 +4850 +9020 +ENDCHAR +STARTCHAR uni75A1 +ENCODING 30113 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +93F0 +5020 +50C0 +1100 +33FC +5124 +9124 +1224 +2244 +2444 +48A8 +8110 +ENDCHAR +STARTCHAR uni75A2 +ENCODING 30114 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6080 +2080 +2484 +2488 +6890 +A880 +2140 +4140 +4220 +8C18 +3006 +ENDCHAR +STARTCHAR uni75A3 +ENCODING 30115 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A080 +6090 +2088 +2FFE +2080 +6080 +A0C0 +2140 +4140 +4242 +8C42 +303E +ENDCHAR +STARTCHAR uni75A4 +ENCODING 30116 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +53F8 +5248 +1248 +3248 +5248 +93F8 +1200 +2202 +2202 +41FE +8000 +ENDCHAR +STARTCHAR uni75A5 +ENCODING 30117 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6080 +2140 +2220 +2618 +7A16 +A210 +2210 +4410 +4410 +8810 +1010 +ENDCHAR +STARTCHAR uni75A6 +ENCODING 30118 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9040 +5040 +53F8 +1048 +3048 +5048 +97FE +10A0 +20A0 +2110 +4208 +8C06 +ENDCHAR +STARTCHAR uni75A7 +ENCODING 30119 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +903C +57C0 +5440 +1440 +3440 +57FE +9420 +1420 +2412 +250A +4606 +8402 +ENDCHAR +STARTCHAR uni75A8 +ENCODING 30120 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +57FC +5010 +1210 +3410 +57FE +9050 +1090 +2110 +2210 +4C50 +8020 +ENDCHAR +STARTCHAR uni75A9 +ENCODING 30121 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1080 +9080 +57F0 +5110 +1112 +3212 +544E +9040 +17FE +2040 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni75AA +ENCODING 30122 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1020 +9220 +5220 +5222 +1224 +33A8 +5230 +9220 +1222 +22A2 +2322 +421E +8000 +ENDCHAR +STARTCHAR uni75AB +ENCODING 30123 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +67E0 +2420 +2420 +283C +6000 +AFF8 +4010 +4220 +81C0 +0670 +380E +ENDCHAR +STARTCHAR uni75AC +ENCODING 30124 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +93FE +5200 +5220 +1220 +32FC +5224 +9224 +1244 +2244 +2484 +44A8 +8910 +ENDCHAR +STARTCHAR uni75AD +ENCODING 30125 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9110 +5110 +5110 +1110 +3110 +52A8 +9268 +1228 +2444 +2444 +4884 +9102 +ENDCHAR +STARTCHAR uni75AE +ENCODING 30126 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +90A0 +5110 +5208 +1406 +3BF0 +5210 +9210 +1250 +2220 +2204 +4204 +81FC +ENDCHAR +STARTCHAR uni75AF +ENCODING 30127 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +53F8 +5208 +1328 +32A8 +5248 +9248 +12A8 +252A +240A +4806 +9002 +ENDCHAR +STARTCHAR uni75B0 +ENCODING 30128 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +6080 +2080 +2FF8 +2080 +6080 +A080 +27F0 +4080 +4080 +8080 +0FFC +ENDCHAR +STARTCHAR uni75B1 +ENCODING 30129 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A200 +6200 +27FC +2404 +2FE4 +7424 +A424 +27E4 +4418 +4402 +8402 +03FE +ENDCHAR +STARTCHAR uni75B2 +ENCODING 30130 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A080 +67F8 +2488 +2490 +27F0 +6410 +A510 +28A0 +4840 +50A0 +A318 +0C06 +ENDCHAR +STARTCHAR uni75B3 +ENCODING 30131 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6210 +2210 +3FFE +2210 +6210 +A210 +23F0 +4210 +4210 +8210 +03F0 +ENDCHAR +STARTCHAR uni75B4 +ENCODING 30132 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +57FE +5008 +1008 +33C8 +5248 +9248 +13C8 +2248 +2008 +4028 +8010 +ENDCHAR +STARTCHAR uni75B5 +ENCODING 30133 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6220 +2220 +2A20 +2A24 +6BB8 +AA20 +2A20 +4A20 +4A22 +8BA2 +1C1E +ENDCHAR +STARTCHAR uni75B6 +ENCODING 30134 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9048 +5248 +5248 +1248 +3FFE +5248 +9248 +1278 +2200 +2200 +43FE +8000 +ENDCHAR +STARTCHAR uni75B7 +ENCODING 30135 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +6030 +2FC0 +2840 +2840 +6FFC +A840 +2820 +4F20 +5810 +800A +1FC4 +ENDCHAR +STARTCHAR uni75B8 +ENCODING 30136 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6000 +27F0 +2410 +2410 +67F0 +A410 +2410 +47F0 +4000 +8000 +1FFC +ENDCHAR +STARTCHAR uni75B9 +ENCODING 30137 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A040 +60A0 +2318 +2C46 +2180 +6E10 +A060 +2184 +4608 +4030 +81C0 +1E00 +ENDCHAR +STARTCHAR uni75BA +ENCODING 30138 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9078 +5780 +5040 +1020 +37FC +5008 +9030 +10C0 +2300 +2480 +487E +9000 +ENDCHAR +STARTCHAR uni75BB +ENCODING 30139 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +53FC +5204 +1204 +3204 +5204 +93FC +1204 +2090 +2108 +4204 +8402 +ENDCHAR +STARTCHAR uni75BC +ENCODING 30140 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A100 +63F8 +2610 +2920 +20C0 +6130 +A68E +3840 +4000 +4010 +8060 +0180 +ENDCHAR +STARTCHAR uni75BD +ENCODING 30141 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6000 +27F0 +2410 +2410 +67F0 +A410 +2410 +47F0 +4410 +8410 +3FFE +ENDCHAR +STARTCHAR uni75BE +ENCODING 30142 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFE +A400 +6400 +27FC +2880 +3080 +6080 +BFFE +4080 +4140 +8220 +0C18 +3006 +ENDCHAR +STARTCHAR uni75BF +ENCODING 30143 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +3FFC +A120 +6FF8 +2128 +2128 +2FF8 +6920 +A920 +2FFC +4224 +4224 +842C +1820 +ENDCHAR +STARTCHAR uni75C0 +ENCODING 30144 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +6200 +2200 +27FC +2404 +6BE4 +A224 +2224 +43E4 +4008 +8008 +0070 +ENDCHAR +STARTCHAR uni75C1 +ENCODING 30145 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1080 +9080 +5080 +50FC +1080 +3080 +57F8 +9408 +1408 +2408 +2408 +47F8 +8408 +ENDCHAR +STARTCHAR uni75C2 +ENCODING 30146 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +6400 +243C +3FA4 +24A4 +64A4 +A4A4 +24A4 +48A4 +48A4 +90A4 +233C +ENDCHAR +STARTCHAR uni75C3 +ENCODING 30147 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A080 +6080 +2FFC +2080 +2100 +6220 +A440 +2280 +4110 +4208 +8474 +3F82 +ENDCHAR +STARTCHAR uni75C4 +ENCODING 30148 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1200 +9200 +53FE +5500 +1900 +31F8 +5100 +9100 +11FC +2100 +2100 +4100 +8100 +ENDCHAR +STARTCHAR uni75C5 +ENCODING 30149 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A000 +6FFC +2080 +2080 +2FFC +6884 +A944 +2924 +2A14 +4A04 +4804 +881C +ENDCHAR +STARTCHAR uni75C6 +ENCODING 30150 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +6FF8 +2808 +2808 +2FF8 +6800 +AA08 +2A30 +4BC0 +5200 +9204 +21FC +ENDCHAR +STARTCHAR uni75C7 +ENCODING 30151 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +2000 +AFFC +6040 +2040 +2240 +6278 +A240 +2240 +4240 +4240 +8240 +1FFE +ENDCHAR +STARTCHAR uni75C8 +ENCODING 30152 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +57FC +5444 +1444 +37FC +5444 +9444 +17FC +2444 +2844 +4854 +9008 +ENDCHAR +STARTCHAR uni75C9 +ENCODING 30153 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +97F8 +5010 +5020 +10D8 +3304 +5C02 +93F8 +1040 +2040 +2040 +4FFE +8000 +ENDCHAR +STARTCHAR uni75CA +ENCODING 30154 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A080 +6140 +2220 +2C18 +3006 +6FF8 +A080 +2080 +47F0 +4080 +8080 +3FFE +ENDCHAR +STARTCHAR uni75CB +ENCODING 30155 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9040 +5040 +57FC +1444 +3444 +5444 +97FC +1040 +2048 +207C +4F82 +8402 +ENDCHAR +STARTCHAR uni75CC +ENCODING 30156 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +57FC +5404 +15F4 +3404 +55F4 +9514 +1514 +25F4 +2404 +4414 +8408 +ENDCHAR +STARTCHAR uni75CD +ENCODING 30157 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A080 +7FFE +2080 +2FFC +2084 +6FFC +A880 +2FFE +4142 +4226 +8C18 +3006 +ENDCHAR +STARTCHAR uni75CE +ENCODING 30158 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A040 +6040 +2FFE +2080 +2100 +6620 +A144 +2188 +4E10 +4028 +80C4 +0F02 +ENDCHAR +STARTCHAR uni75CF +ENCODING 30159 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A080 +6080 +2FFE +2100 +23F8 +6608 +ABF8 +2208 +43F8 +4208 +8208 +0218 +ENDCHAR +STARTCHAR uni75D0 +ENCODING 30160 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +57FC +5404 +1404 +35F4 +5514 +9514 +15F4 +2404 +2404 +47FC +8404 +ENDCHAR +STARTCHAR uni75D1 +ENCODING 30161 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1080 +91F8 +5210 +5D20 +10C0 +31A0 +567C +9084 +1108 +2690 +2060 +40C0 +8700 +ENDCHAR +STARTCHAR uni75D2 +ENCODING 30162 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A410 +6220 +2FFC +2080 +2080 +67F8 +A080 +2080 +5FFE +4080 +8080 +0080 +ENDCHAR +STARTCHAR uni75D3 +ENCODING 30163 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +6FF8 +2100 +2120 +2270 +6F88 +A080 +27F0 +4080 +4080 +8080 +1FFC +ENDCHAR +STARTCHAR uni75D4 +ENCODING 30164 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFE +2080 +A7F8 +6080 +2080 +2FFE +2010 +6010 +AFFE +2210 +4110 +4010 +0070 +ENDCHAR +STARTCHAR uni75D5 +ENCODING 30165 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +2000 +A7F8 +6408 +27F8 +2408 +6408 +A7FA +2484 +4448 +4420 +8718 +1806 +ENDCHAR +STARTCHAR uni75D6 +ENCODING 30166 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9000 +53FC +5090 +1090 +3492 +5292 +9294 +1098 +2090 +2090 +47FE +8000 +ENDCHAR +STARTCHAR uni75D7 +ENCODING 30167 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1200 +9200 +53FE +5400 +1BF8 +3288 +5248 +9FFE +1488 +2448 +27FC +4008 +8030 +ENDCHAR +STARTCHAR uni75D8 +ENCODING 30168 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A000 +6FFC +2000 +27F8 +2408 +6408 +A408 +27F8 +4210 +4110 +8120 +1FFE +ENDCHAR +STARTCHAR uni75D9 +ENCODING 30169 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6FFC +2248 +2490 +2920 +6490 +A248 +2000 +4FF8 +4080 +8080 +3FFE +ENDCHAR +STARTCHAR uni75DA +ENCODING 30170 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2088 +A7F0 +60A0 +3FFE +2080 +6FF0 +A620 +3840 +27FC +4040 +4140 +8080 +ENDCHAR +STARTCHAR uni75DB +ENCODING 30171 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A000 +6FF8 +2210 +2120 +2FFC +2884 +6FFC +A884 +2FFC +4884 +4884 +888C +ENDCHAR +STARTCHAR uni75DC +ENCODING 30172 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9038 +53C0 +5040 +17FC +3150 +5248 +9446 +11F0 +2110 +2110 +4212 +8C0E +ENDCHAR +STARTCHAR uni75DD +ENCODING 30173 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A440 +6420 +3FFC +2410 +2424 +66C8 +AA30 +2AC2 +4A0C +4A70 +9202 +21FE +ENDCHAR +STARTCHAR uni75DE +ENCODING 30174 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6FFC +2080 +21A0 +2290 +6488 +B886 +27F8 +4408 +4408 +8408 +07F8 +ENDCHAR +STARTCHAR uni75DF +ENCODING 30175 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +6490 +2490 +2888 +27F0 +6410 +A7F0 +2410 +47F0 +4410 +8410 +0430 +ENDCHAR +STARTCHAR uni75E0 +ENCODING 30176 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A220 +6470 +2FC8 +2220 +3C3E +6400 +A7F0 +2C10 +5220 +41C0 +8730 +380E +ENDCHAR +STARTCHAR uni75E1 +ENCODING 30177 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1050 +9048 +5FFE +5040 +17FC +3444 +57FC +9444 +17FC +2444 +2444 +4454 +8448 +ENDCHAR +STARTCHAR uni75E2 +ENCODING 30178 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A100 +6204 +2E24 +2224 +3FA4 +2224 +6224 +A724 +26A4 +4A84 +5204 +821C +ENDCHAR +STARTCHAR uni75E3 +ENCODING 30179 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A080 +6080 +2FF8 +2080 +2080 +67F0 +A080 +2240 +4A48 +4A04 +9112 +20F0 +ENDCHAR +STARTCHAR uni75E4 +ENCODING 30180 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A000 +6490 +2490 +2490 +2AA8 +71C4 +A080 +2080 +4FF8 +4080 +8080 +3FFE +ENDCHAR +STARTCHAR uni75E5 +ENCODING 30181 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9210 +5120 +57F8 +1408 +3408 +5408 +97F8 +1120 +2120 +2222 +4422 +981E +ENDCHAR +STARTCHAR uni75E6 +ENCODING 30182 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +97FC +5080 +53F8 +1088 +3108 +5FFE +9000 +13F8 +2208 +2208 +43F8 +8208 +ENDCHAR +STARTCHAR uni75E7 +ENCODING 30183 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +6820 +2420 +22A8 +3124 +6A22 +A420 +20E4 +4208 +4410 +8860 +3380 +ENDCHAR +STARTCHAR uni75E8 +ENCODING 30184 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1108 +9108 +57FE +5108 +1000 +37FE +5402 +9040 +17FC +2084 +2104 +4228 +8C10 +ENDCHAR +STARTCHAR uni75E9 +ENCODING 30185 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +2040 +A7FC +6444 +27FC +2444 +27FC +6040 +AFFC +4208 +4110 +80E0 +0F1E +ENDCHAR +STARTCHAR uni75EA +ENCODING 30186 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1100 +91F0 +5210 +5420 +1BF8 +3248 +5248 +9248 +1FFE +20A0 +2110 +4208 +8C06 +ENDCHAR +STARTCHAR uni75EB +ENCODING 30187 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +9200 +517C +5404 +1444 +35F4 +5444 +94E4 +1554 +2644 +2444 +4454 +8408 +ENDCHAR +STARTCHAR uni75EC +ENCODING 30188 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +67F8 +2408 +27F8 +2408 +67F8 +A200 +27FC +4924 +5244 +8484 +0018 +ENDCHAR +STARTCHAR uni75ED +ENCODING 30189 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +97BC +54A4 +54A4 +17BC +34A4 +54A4 +97BC +14A4 +24A4 +24A4 +4AA4 +914C +ENDCHAR +STARTCHAR uni75EE +ENCODING 30190 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +67F8 +2400 +27F0 +2400 +67F0 +A400 +3FFC +4488 +4450 +8720 +1C1C +ENDCHAR +STARTCHAR uni75EF +ENCODING 30191 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1080 +9040 +57FC +5404 +13F0 +3210 +5210 +93F0 +1200 +23F8 +2208 +4208 +83F8 +ENDCHAR +STARTCHAR uni75F0 +ENCODING 30192 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6244 +2448 +24A0 +2318 +6C06 +A240 +2444 +44A8 +4110 +8208 +0C06 +ENDCHAR +STARTCHAR uni75F1 +ENCODING 30193 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +6120 +2120 +2F3C +2120 +6120 +AF3C +2120 +4720 +593E +8220 +0420 +ENDCHAR +STARTCHAR uni75F2 +ENCODING 30194 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6220 +2220 +3FFC +2220 +6AA8 +AAA8 +2AAA +4AAA +4A26 +9220 +0220 +ENDCHAR +STARTCHAR uni75F3 +ENCODING 30195 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6410 +2410 +3F7E +2410 +6410 +AE38 +2D38 +54D4 +5492 +A510 +0410 +ENDCHAR +STARTCHAR uni75F4 +ENCODING 30196 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +A400 +6400 +27BC +2A24 +2224 +6224 +BFE4 +2224 +4524 +4524 +88BC +1000 +ENDCHAR +STARTCHAR uni75F5 +ENCODING 30197 +BBX 15 16 0 -2 +BITMAP +0080 +1FFE +1000 +1038 +93C0 +5040 +17FC +3150 +5248 +9C46 +11F0 +1020 +2FFE +2040 +4140 +8080 +ENDCHAR +STARTCHAR uni75F6 +ENCODING 30198 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +10A0 +90A0 +57FC +54A4 +14A4 +37FC +54A4 +94A4 +1FFE +2000 +2110 +4208 +8404 +ENDCHAR +STARTCHAR uni75F7 +ENCODING 30199 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2080 +AFFC +6120 +2210 +2488 +6FF6 +B490 +27F0 +2490 +47F2 +4082 +807E +ENDCHAR +STARTCHAR uni75F8 +ENCODING 30200 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2100 +2504 +A7C4 +6914 +3FF4 +2114 +67D4 +A554 +2554 +2554 +45C4 +4114 +8108 +ENDCHAR +STARTCHAR uni75F9 +ENCODING 30201 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +67F0 +2490 +27F0 +2490 +67F0 +A000 +3FFC +4220 +4220 +8420 +1820 +ENDCHAR +STARTCHAR uni75FA +ENCODING 30202 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A040 +6080 +27FC +2444 +27FC +6484 +A7FC +2220 +5FFE +4020 +8020 +0020 +ENDCHAR +STARTCHAR uni75FB +ENCODING 30203 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +2038 +AFC0 +6840 +2FFC +2820 +6B1A +AC06 +27F8 +2408 +27F8 +4408 +47F8 +8408 +ENDCHAR +STARTCHAR uni75FC +ENCODING 30204 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6FFE +2802 +2842 +2BFA +6842 +A9F2 +2912 +4912 +49F2 +8802 +0FFE +ENDCHAR +STARTCHAR uni75FD +ENCODING 30205 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1120 +9110 +53FE +5220 +1620 +3BFC +5220 +9220 +13FC +2220 +2220 +43FE +8200 +ENDCHAR +STARTCHAR uni75FE +ENCODING 30206 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6F7E +2904 +2904 +2A74 +6A54 +A954 +2954 +4974 +4B04 +8804 +081C +ENDCHAR +STARTCHAR uni75FF +ENCODING 30207 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +67FC +2040 +2FFE +2358 +6C46 +A080 +2FFE +4208 +4790 +8078 +0F86 +ENDCHAR +STARTCHAR uni7600 +ENCODING 30208 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A410 +6410 +3F28 +2844 +2882 +6F20 +A918 +2900 +4904 +5108 +9110 +2660 +ENDCHAR +STARTCHAR uni7601 +ENCODING 30209 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A080 +6080 +2FFC +2210 +2210 +6528 +A844 +2080 +5FFE +4080 +8080 +0080 +ENDCHAR +STARTCHAR uni7602 +ENCODING 30210 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A000 +6000 +2FFC +2120 +2120 +6738 +A408 +2408 +4738 +4120 +8120 +1FFE +ENDCHAR +STARTCHAR uni7603 +ENCODING 30211 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6FFC +2080 +2342 +2C64 +62A8 +A330 +2D70 +40A8 +4324 +9C42 +00C0 +ENDCHAR +STARTCHAR uni7604 +ENCODING 30212 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2210 +2FFC +A210 +6210 +3FFE +2000 +67F8 +A408 +2408 +27F8 +4408 +4408 +87F8 +ENDCHAR +STARTCHAR uni7605 +ENCODING 30213 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1208 +9110 +57FC +5444 +17FC +3444 +57FC +9444 +1040 +2FFE +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni7606 +ENCODING 30214 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1090 +9108 +53FC +5040 +17FE +3110 +5268 +9D86 +1030 +21C0 +2018 +4060 +8380 +ENDCHAR +STARTCHAR uni7607 +ENCODING 30215 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A030 +67C0 +2080 +3FFC +2080 +6FF8 +A888 +2FF8 +4888 +4FF8 +8080 +3FFE +ENDCHAR +STARTCHAR uni7608 +ENCODING 30216 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A200 +63BE +2E12 +2392 +2E12 +63A2 +AE4E +2280 +5FFE +4140 +8630 +380E +ENDCHAR +STARTCHAR uni7609 +ENCODING 30217 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A080 +6770 +380E +27F0 +2000 +6F24 +AD24 +2B48 +4D48 +4B24 +8924 +0B24 +ENDCHAR +STARTCHAR uni760A +ENCODING 30218 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +22F8 +A208 +6408 +2DFE +3480 +64F8 +A520 +2420 +25FE +4450 +4488 +8506 +ENDCHAR +STARTCHAR uni760B +ENCODING 30219 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +6FF8 +2808 +2BE8 +2888 +6BE8 +AAA8 +2BE8 +4888 +48AA +90EA +2716 +ENDCHAR +STARTCHAR uni760C +ENCODING 30220 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1100 +9104 +57C4 +5114 +17D4 +3554 +57D4 +9114 +1394 +2554 +2944 +4114 +8108 +ENDCHAR +STARTCHAR uni760D +ENCODING 30221 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +67F0 +2410 +27F0 +2410 +67F0 +A000 +3FFE +4400 +4FFC +9124 +024C +ENDCHAR +STARTCHAR uni760E +ENCODING 30222 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1110 +97FC +5110 +51F0 +1110 +31F0 +5110 +97FE +1200 +2290 +2308 +4200 +83FC +ENDCHAR +STARTCHAR uni760F +ENCODING 30223 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A090 +6090 +2FF0 +20A0 +3FFE +6110 +A7F8 +2C08 +77F8 +4408 +8408 +07F8 +ENDCHAR +STARTCHAR uni7610 +ENCODING 30224 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2280 +ACB8 +6888 +2888 +2EB8 +6888 +A888 +2FF8 +2140 +4220 +4C18 +B006 +ENDCHAR +STARTCHAR uni7611 +ENCODING 30225 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +23F0 +A210 +63D0 +2250 +2250 +6FFC +A804 +29E4 +2924 +49E4 +4814 +8808 +ENDCHAR +STARTCHAR uni7612 +ENCODING 30226 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +97FE +5442 +5BFC +1040 +33F8 +5248 +93F8 +1248 +23F8 +2040 +4FFE +8040 +ENDCHAR +STARTCHAR uni7613 +ENCODING 30227 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +3FFC +A200 +63F0 +2420 +3FF8 +2548 +6678 +A408 +2080 +5FFC +4140 +8630 +180C +ENDCHAR +STARTCHAR uni7614 +ENCODING 30228 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1110 +9110 +5FFE +5110 +1040 +3FFE +5040 +9040 +17FC +2404 +2404 +47FC +8404 +ENDCHAR +STARTCHAR uni7615 +ENCODING 30229 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A000 +6F7C +2904 +2904 +2F7C +6800 +AF7C +2844 +4844 +4F28 +8838 +08C6 +ENDCHAR +STARTCHAR uni7616 +ENCODING 30230 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A040 +6040 +2FFC +2408 +2210 +7FFE +A000 +27F8 +4408 +47F8 +8408 +07F8 +ENDCHAR +STARTCHAR uni7617 +ENCODING 30231 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2FF8 +A490 +62A0 +3FFE +2140 +6220 +AC98 +3086 +2FF8 +4080 +4080 +9FFC +ENDCHAR +STARTCHAR uni7618 +ENCODING 30232 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A888 +6490 +3FFC +22A0 +2490 +788C +A200 +3FFE +4210 +4C20 +83F0 +1E0C +ENDCHAR +STARTCHAR uni7619 +ENCODING 30233 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A000 +6FF8 +2490 +2BE0 +2630 +788E +AFF8 +2888 +4FF8 +4088 +81FC +1E02 +ENDCHAR +STARTCHAR uni761A +ENCODING 30234 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2890 +2510 +AFBE +6222 +2244 +2A90 +6A90 +AF90 +2210 +2228 +4428 +4444 +8882 +ENDCHAR +STARTCHAR uni761B +ENCODING 30235 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A400 +677C +3C24 +2724 +3C24 +6744 +BC44 +2498 +4100 +5488 +9414 +23F2 +ENDCHAR +STARTCHAR uni761C +ENCODING 30236 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A100 +67F0 +2410 +27F0 +2410 +67F0 +A410 +27F0 +4080 +4A48 +9214 +21F2 +ENDCHAR +STARTCHAR uni761D +ENCODING 30237 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +97FC +54A4 +54A4 +17FC +3040 +5150 +9248 +1444 +2150 +2248 +4444 +8040 +ENDCHAR +STARTCHAR uni761E +ENCODING 30238 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A040 +6FFE +2248 +2248 +2554 +60A0 +A318 +2C46 +43F8 +4040 +8040 +1FFE +ENDCHAR +STARTCHAR uni761F +ENCODING 30239 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +67F0 +2490 +2490 +2550 +6630 +A7F0 +2000 +4FFC +4924 +8924 +1FFE +ENDCHAR +STARTCHAR uni7620 +ENCODING 30240 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6C98 +2080 +2D58 +2220 +67F8 +BA16 +23F0 +4210 +43F0 +8210 +0230 +ENDCHAR +STARTCHAR uni7621 +ENCODING 30241 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A080 +6140 +27F8 +3A16 +23F0 +6210 +A3F0 +2400 +4BF8 +5208 +8208 +03F8 +ENDCHAR +STARTCHAR uni7622 +ENCODING 30242 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A200 +643C +2FA4 +28A4 +2AA6 +68C0 +BFBE +2892 +4A94 +4A88 +8894 +11A2 +ENDCHAR +STARTCHAR uni7623 +ENCODING 30243 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2100 +AFFC +6884 +2FFC +2884 +6FFC +A148 +2154 +225C +4446 +4842 +B03E +ENDCHAR +STARTCHAR uni7624 +ENCODING 30244 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6F7C +2824 +2A24 +2A24 +6D4C +B800 +2FF8 +4888 +4FF8 +8888 +0FF8 +ENDCHAR +STARTCHAR uni7625 +ENCODING 30245 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A410 +6220 +2FFC +2080 +27F8 +6080 +BFFE +2100 +47FC +5840 +8040 +0FFE +ENDCHAR +STARTCHAR uni7626 +ENCODING 30246 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +1FFE +9140 +565C +1444 +175C +1444 +375C +5040 +97F8 +2208 +2110 +40E0 +0F1E +ENDCHAR +STARTCHAR uni7627 +ENCODING 30247 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A080 +60FC +2080 +2FFC +2884 +6BF0 +A882 +2BFE +4A00 +57FC +A200 +03FC +ENDCHAR +STARTCHAR uni7628 +ENCODING 30248 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A200 +63F0 +2204 +21FC +2800 +6BF8 +AA08 +2BF8 +4A08 +4FFE +8110 +0E0E +ENDCHAR +STARTCHAR uni7629 +ENCODING 30249 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1110 +9110 +57FC +5150 +10A0 +3110 +52E8 +9C06 +13F8 +2208 +2208 +43F8 +8208 +ENDCHAR +STARTCHAR uni762A +ENCODING 30250 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2100 +27F8 +A408 +67F8 +2408 +27F8 +6408 +A7F8 +2120 +2618 +3A66 +4388 +4208 +81F8 +ENDCHAR +STARTCHAR uni762B +ENCODING 30251 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2050 +2048 +BEFE +7290 +2A90 +2BFE +6490 +A490 +2AFE +2A90 +5290 +40FE +8080 +ENDCHAR +STARTCHAR uni762C +ENCODING 30252 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +973C +5120 +513C +1720 +343C +5420 +977E +1128 +212A +2124 +4524 +8232 +ENDCHAR +STARTCHAR uni762D +ENCODING 30253 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A000 +7FFE +2120 +2FFC +2924 +6FFC +A000 +27F8 +4000 +5FFE +8448 +18C6 +ENDCHAR +STARTCHAR uni762E +ENCODING 30254 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1110 +93F8 +5210 +54A4 +17FC +30A0 +5318 +9C46 +1390 +2064 +2398 +4060 +8380 +ENDCHAR +STARTCHAR uni762F +ENCODING 30255 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1420 +9220 +5F7E +5440 +14A0 +373C +5550 +9510 +15FE +2510 +2928 +4B44 +9082 +ENDCHAR +STARTCHAR uni7630 +ENCODING 30256 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +67FC +2444 +27FC +2444 +67FC +A090 +2320 +40C4 +4FFE +8252 +1C4E +ENDCHAR +STARTCHAR uni7631 +ENCODING 30257 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +2FFE +A248 +6248 +2554 +28A2 +6318 +AC06 +2080 +2A44 +4A4A +520A +81F8 +ENDCHAR +STARTCHAR uni7632 +ENCODING 30258 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2200 +2448 +A848 +7054 +22A4 +2500 +6C10 +B490 +249C +2490 +4550 +463E +8400 +ENDCHAR +STARTCHAR uni7633 +ENCODING 30259 +BBX 15 15 1 -1 +BITMAP +0100 +3FFC +2000 +BF7C +6514 +2B2C +2514 +28A4 +6370 +BCCE +2710 +4060 +478C +8070 +0F80 +ENDCHAR +STARTCHAR uni7634 +ENCODING 30260 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFC +A080 +6FFC +2210 +3FFE +2410 +67F0 +A410 +27F0 +4080 +5FFE +8080 +0080 +ENDCHAR +STARTCHAR uni7635 +ENCODING 30261 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A200 +67BC +38A4 +2518 +2608 +7BF6 +A000 +2FFC +4040 +4448 +8844 +01C0 +ENDCHAR +STARTCHAR uni7636 +ENCODING 30262 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2220 +2220 +AFA0 +623E +2FC2 +2A94 +6A90 +AF90 +2210 +2728 +4AA8 +5244 +8282 +ENDCHAR +STARTCHAR uni7637 +ENCODING 30263 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2210 +2210 +AF90 +623E +2FA4 +2AD4 +6A94 +AF94 +2208 +2708 +4A94 +5224 +8242 +ENDCHAR +STARTCHAR uni7638 +ENCODING 30264 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1200 +97BC +52A4 +54A4 +15BC +3840 +57FC +94A4 +1554 +2444 +24A4 +4514 +840C +ENDCHAR +STARTCHAR uni7639 +ENCODING 30265 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2210 +2520 +A8BC +7744 +2204 +2224 +6F94 +A214 +2A84 +2704 +43C4 +5C28 +8010 +ENDCHAR +STARTCHAR uni763A +ENCODING 30266 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +2FFC +A804 +6FFC +2800 +2FFE +6820 +ABFE +2B32 +2AAA +4B32 +4AAA +9206 +ENDCHAR +STARTCHAR uni763B +ENCODING 30267 +BBX 15 15 1 -1 +BITMAP +0100 +3FFC +2080 +A7F8 +6488 +3FFE +2488 +27F8 +6080 +A7F8 +2488 +5FFE +4208 +83F0 +0F1E +ENDCHAR +STARTCHAR uni763C +ENCODING 30268 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A210 +6FFC +2210 +27F8 +2408 +67F8 +A408 +27F8 +4080 +5FFE +8120 +1E1E +ENDCHAR +STARTCHAR uni763D +ENCODING 30269 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2208 +3FFE +A208 +63F8 +2040 +27FC +6444 +A7FC +2040 +2FFE +2040 +47FC +4040 +9FFE +ENDCHAR +STARTCHAR uni763E +ENCODING 30270 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2040 +2E78 +AA88 +6B10 +2CFC +2A04 +6AFC +AA04 +2BFC +2E20 +2814 +4952 +494A +8A38 +ENDCHAR +STARTCHAR uni763F +ENCODING 30271 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +2FBE +A8A2 +6AAA +2AAA +2AAA +6514 +A8A2 +3FFE +2208 +2710 +40E0 +431C +9C02 +ENDCHAR +STARTCHAR uni7640 +ENCODING 30272 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2220 +2FF8 +A220 +7FFC +2080 +2FF8 +6888 +AFF8 +2888 +2FF8 +4220 +4410 +8808 +ENDCHAR +STARTCHAR uni7641 +ENCODING 30273 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FFE +A480 +65FE +2A84 +30FC +2484 +68FC +B840 +28FC +4B08 +4890 +8870 +0B8E +ENDCHAR +STARTCHAR uni7642 +ENCODING 30274 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +2080 +BFFC +6220 +37F4 +2C18 +37F4 +6410 +A7F0 +4080 +4490 +988C +0180 +ENDCHAR +STARTCHAR uni7643 +ENCODING 30275 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A040 +6E7C +2B84 +2A78 +2B86 +6C78 +AC50 +2AFC +4A90 +4F7C +8810 +09FE +ENDCHAR +STARTCHAR uni7644 +ENCODING 30276 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1120 +9110 +53FE +5620 +1BFC +3220 +53FC +9220 +13FE +2200 +2524 +4492 +8892 +ENDCHAR +STARTCHAR uni7645 +ENCODING 30277 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +97FE +50A0 +57BC +14A4 +37BC +50A0 +97FC +1444 +27FC +2444 +47FC +8404 +ENDCHAR +STARTCHAR uni7646 +ENCODING 30278 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A208 +6AAA +2514 +28A2 +2000 +6FFE +A802 +2882 +47FC +4084 +8304 +0C18 +ENDCHAR +STARTCHAR uni7647 +ENCODING 30279 +BBX 15 15 1 -1 +BITMAP +0080 +3FFE +A000 +6FBE +28A2 +2FBE +28A2 +6FBE +A802 +29F2 +4912 +49F2 +8912 +09F2 +0A16 +ENDCHAR +STARTCHAR uni7648 +ENCODING 30280 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A004 +6FC8 +3132 +2A14 +2778 +794E +AF48 +2886 +4F7C +4124 +8118 +0EE6 +ENDCHAR +STARTCHAR uni7649 +ENCODING 30281 +BBX 15 15 1 -1 +BITMAP +0100 +3FFC +2000 +AF78 +6948 +2F78 +2000 +2FF8 +6888 +AFF8 +2888 +4FF8 +4080 +BFFE +0080 +ENDCHAR +STARTCHAR uni764A +ENCODING 30282 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2010 +2F28 +A944 +6A92 +2C7C +2A08 +6910 +A97E +2D00 +2AFE +4820 +4844 +88FE +ENDCHAR +STARTCHAR uni764B +ENCODING 30283 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A000 +6FFC +2120 +2738 +2408 +6738 +A120 +3FFE +4088 +4A44 +920A +21F8 +ENDCHAR +STARTCHAR uni764C +ENCODING 30284 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +2000 +A3E0 +6220 +23E0 +2000 +6F78 +A948 +2F78 +4080 +5084 +9084 +1FFC +ENDCHAR +STARTCHAR uni764D +ENCODING 30285 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2080 +2E4E +A444 +65F4 +2424 +2524 +6EAE +A444 +2444 +24A4 +46A4 +590E +8200 +ENDCHAR +STARTCHAR uni764E +ENCODING 30286 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +97BC +54A4 +57BC +14A4 +37BC +5404 +95F4 +1514 +25F4 +2514 +45F4 +840C +ENDCHAR +STARTCHAR uni764F +ENCODING 30287 +BBX 15 16 0 -2 +BITMAP +0080 +1FFE +1000 +17FC +94A4 +57FC +1000 +3FFE +5000 +93F8 +1208 +13F8 +2144 +2328 +4D10 +818C +ENDCHAR +STARTCHAR uni7650 +ENCODING 30288 +BBX 15 16 0 -2 +BITMAP +0080 +1FFE +10A0 +1318 +9DF6 +5000 +17FC +3554 +54E4 +97FC +1000 +13F8 +2208 +23F8 +4208 +83F8 +ENDCHAR +STARTCHAR uni7651 +ENCODING 30289 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2120 +27F8 +A528 +67F8 +2528 +2FFE +6800 +ABFC +2800 +2FFE +2A44 +4A28 +5298 +A306 +ENDCHAR +STARTCHAR uni7652 +ENCODING 30290 +BBX 15 15 1 -1 +BITMAP +0080 +3FFE +20C0 +A330 +7DEE +2000 +2F92 +2892 +6F92 +A892 +2F92 +4886 +4280 +8A54 +11F2 +ENDCHAR +STARTCHAR uni7653 +ENCODING 30291 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2510 +2950 +B550 +67DE +2824 +3B94 +6814 +AB94 +2A94 +2A88 +4AC8 +4A94 +8C22 +ENDCHAR +STARTCHAR uni7654 +ENCODING 30292 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1040 +97FC +5110 +5FFE +1000 +33F8 +5208 +93F8 +1208 +23F8 +2544 +452A +88FA +ENDCHAR +STARTCHAR uni7655 +ENCODING 30293 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A040 +6FFE +2224 +2428 +297E +6AC8 +A47C +2948 +5F7C +4248 +8448 +187E +ENDCHAR +STARTCHAR uni7656 +ENCODING 30294 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A010 +6F10 +297C +2944 +2F28 +68FE +A810 +2F10 +597C +5910 +A910 +0F10 +ENDCHAR +STARTCHAR uni7657 +ENCODING 30295 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +27FC +A040 +6FFE +2842 +2358 +6040 +A358 +2000 +27FC +2444 +47FC +4444 +87FC +ENDCHAR +STARTCHAR uni7658 +ENCODING 30296 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A220 +7FFC +2220 +2FF8 +2888 +6FF8 +A888 +2FF8 +4080 +5FFE +9092 +17EA +ENDCHAR +STARTCHAR uni7659 +ENCODING 30297 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2100 +2E78 +A808 +6F78 +2808 +2FF8 +6888 +ACC8 +2AA8 +2CCA +4AAA +4CC6 +8882 +ENDCHAR +STARTCHAR uni765A +ENCODING 30298 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2200 +23F8 +A410 +6FFE +3524 +26FA +6400 +A5FC +2400 +25FC +2400 +49FC +4904 +91FC +ENDCHAR +STARTCHAR uni765B +ENCODING 30299 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2040 +2FFE +A000 +67FC +2404 +25F4 +6514 +A7FC +2008 +23F0 +2040 +4FFE +4150 +8E4E +ENDCHAR +STARTCHAR uni765C +ENCODING 30300 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A000 +6FDC +2854 +2FD4 +2AA6 +6FC0 +AABC +2A94 +4FD4 +4A08 +948C +0852 +ENDCHAR +STARTCHAR uni765D +ENCODING 30301 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2040 +2FFE +A000 +67FC +2404 +25F4 +6514 +A7FC +2000 +27FC +2000 +4FFE +4248 +84C4 +ENDCHAR +STARTCHAR uni765E +ENCODING 30302 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2210 +2F9C +A224 +6248 +2FBE +2AA2 +6AAA +AFAA +222A +272A +2AAA +5294 +4222 +8242 +ENDCHAR +STARTCHAR uni765F +ENCODING 30303 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2100 +27F8 +A648 +6528 +2498 +27F8 +6210 +A5E8 +3806 +27F8 +2548 +47F8 +4548 +8558 +ENDCHAR +STARTCHAR uni7660 +ENCODING 30304 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2040 +2FFE +A0A0 +6F5E +2554 +2554 +6B5A +A208 +23F8 +2208 +43F8 +4408 +8808 +ENDCHAR +STARTCHAR uni7661 +ENCODING 30305 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A000 +693C +2E04 +2898 +2F88 +647E +A78A +2A08 +4FAC +4228 +8538 +194E +ENDCHAR +STARTCHAR uni7662 +ENCODING 30306 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A220 +6FF8 +2080 +27F0 +2080 +7FFE +A618 +2BF4 +7212 +43F4 +C218 +0F86 +ENDCHAR +STARTCHAR uni7663 +ENCODING 30307 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2400 +2744 +A928 +727E +2F90 +2A90 +6FBC +AA90 +2F90 +207E +4390 +5C10 +8010 +ENDCHAR +STARTCHAR uni7664 +ENCODING 30308 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A420 +6F7E +3288 +2FBE +28A2 +6FA2 +A8A2 +2FA2 +4822 +4F2E +88A0 +07A0 +ENDCHAR +STARTCHAR uni7665 +ENCODING 30309 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A488 +66A8 +2AAE +33F4 +2434 +65D4 +A814 +3BE8 +4888 +4BF4 +8894 +0BE2 +ENDCHAR +STARTCHAR uni7666 +ENCODING 30310 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +27FC +A554 +64E4 +27FC +2040 +67FC +A040 +2FFE +24A4 +2852 +47FC +4040 +8FFE +ENDCHAR +STARTCHAR uni7667 +ENCODING 30311 +BBX 15 15 1 -1 +BITMAP +0080 +3FFC +A000 +6FFC +2998 +2F70 +2910 +6FFE +A9B4 +2B52 +5510 +5040 +A278 +0240 +1FFE +ENDCHAR +STARTCHAR uni7668 +ENCODING 30312 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A000 +67FC +2040 +2FFE +2842 +6B5A +A040 +23FC +4220 +47FC +8A20 +03FC +ENDCHAR +STARTCHAR uni7669 +ENCODING 30313 +BBX 15 15 1 -1 +BITMAP +0080 +3FFE +A000 +627E +3F92 +2226 +2FBC +6AA4 +AFBC +2224 +463C +4724 +8ABC +1224 +0242 +ENDCHAR +STARTCHAR uni766A +ENCODING 30314 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A010 +6310 +3C7C +2410 +3FFE +6444 +A67C +2D44 +4D7C +5444 +847C +0482 +ENDCHAR +STARTCHAR uni766B +ENCODING 30315 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2400 +3FBE +A408 +6F10 +293E +2F22 +692A +AF2A +292A +2F2A +292A +7F94 +4912 +90A2 +ENDCHAR +STARTCHAR uni766C +ENCODING 30316 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A400 +6722 +2914 +323E +2F88 +6A9C +AF88 +2A88 +4FFE +4008 +9548 +2528 +ENDCHAR +STARTCHAR uni766D +ENCODING 30317 +BBX 15 15 1 -1 +BITMAP +0080 +3FFE +2924 +AF3C +6924 +2F3C +2924 +2F3C +79E6 +A080 +3FFE +4108 +4630 +81E0 +1E1C +ENDCHAR +STARTCHAR uni766E +ENCODING 30318 +BBX 15 15 1 -1 +BITMAP +0100 +3FF8 +2004 +AF7C +6952 +29A2 +2A7C +2A20 +69FE +A904 +297E +4B04 +48FC +8954 +0A3E +ENDCHAR +STARTCHAR uni766F +ENCODING 30319 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A924 +6F3C +2924 +2F3C +2924 +6F3C +A420 +2FFC +5840 +4FF8 +8840 +0FFE +ENDCHAR +STARTCHAR uni7670 +ENCODING 30320 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +AA8A +750A +2A9E +2F94 +28B4 +6F9E +A014 +2F94 +4A9E +4F94 +8854 +07DE +ENDCHAR +STARTCHAR uni7671 +ENCODING 30321 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +A514 +7FD4 +253E +2728 +2268 +6FBC +AAA8 +2FA8 +423C +5FA8 +8528 +38FE +ENDCHAR +STARTCHAR uni7672 +ENCODING 30322 +BBX 15 15 1 -1 +BITMAP +0080 +3FFC +2900 +AE7E +6890 +27BE +2022 +27BE +64A2 +A7BE +34A2 +57A2 +54BE +9FD4 +08A2 +ENDCHAR +STARTCHAR uni7673 +ENCODING 30323 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2444 +27FC +A444 +6FFE +2AAA +2FBE +6AAA +AFBE +2208 +27F0 +20C4 +4FFE +4248 +84C4 +ENDCHAR +STARTCHAR uni7674 +ENCODING 30324 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2444 +2AEA +AE0E +64E4 +2AAA +2EEE +6000 +A7FC +2040 +27FC +2040 +4FFE +4040 +80C0 +ENDCHAR +STARTCHAR uni7675 +ENCODING 30325 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2444 +28E8 +AE0E +64E4 +2A0A +2EEE +60A0 +AAEA +2040 +2FFE +28A2 +4912 +4842 +88A6 +ENDCHAR +STARTCHAR uni7676 +ENCODING 30326 +BBX 15 7 1 3 +BITMAP +7F90 +02A0 +4444 +2828 +1010 +2008 +C006 +ENDCHAR +STARTCHAR uni7677 +ENCODING 30327 +BBX 15 16 0 -2 +BITMAP +0090 +7EA0 +0244 +4448 +2830 +1010 +2008 +DFF6 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7678 +ENCODING 30328 +BBX 15 14 1 -1 +BITMAP +1F90 +02A0 +4444 +2828 +1010 +2FE8 +C106 +0100 +7FFE +0100 +0280 +0440 +1830 +600C +ENDCHAR +STARTCHAR uni7679 +ENCODING 30329 +BBX 15 16 0 -2 +BITMAP +0090 +7EA0 +0244 +4448 +2830 +1010 +2FE8 +C826 +0820 +101C +2FE0 +0020 +0C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni767A +ENCODING 30330 +BBX 15 14 1 -1 +BITMAP +3F10 +02A0 +4444 +2828 +1010 +3FF8 +C446 +0440 +7FFC +0440 +0440 +0842 +1042 +E03E +ENDCHAR +STARTCHAR uni767B +ENCODING 30331 +BBX 15 14 1 -1 +BITMAP +3F08 +02B0 +4442 +282C +1FF0 +3018 +CFE6 +0820 +0820 +0FE0 +0840 +0440 +0080 +FFFE +ENDCHAR +STARTCHAR uni767C +ENCODING 30332 +BBX 15 14 1 -1 +BITMAP +1F10 +42A4 +2448 +1830 +E00E +7CF0 +0490 +7D0C +4200 +7DF8 +0488 +0850 +0870 +738E +ENDCHAR +STARTCHAR uni767D +ENCODING 30333 +BBX 11 15 3 -1 +BITMAP +0800 +0800 +1000 +FFE0 +8020 +8020 +8020 +8020 +FFE0 +8020 +8020 +8020 +8020 +8020 +FFE0 +ENDCHAR +STARTCHAR uni767E +ENCODING 30334 +BBX 15 14 1 -1 +BITMAP +FFFE +0200 +0200 +0400 +3FF8 +2008 +2008 +2008 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni767F +ENCODING 30335 +BBX 13 15 2 -1 +BITMAP +2080 +2080 +4080 +FC80 +8480 +8480 +8480 +8480 +FC80 +8480 +8480 +8488 +8488 +FC88 +8478 +ENDCHAR +STARTCHAR uni7680 +ENCODING 30336 +BBX 12 15 2 -1 +BITMAP +0400 +0800 +FFE0 +8020 +FFE0 +8020 +8020 +FFE0 +0000 +8000 +83C0 +FC00 +8010 +8010 +7FF0 +ENDCHAR +STARTCHAR uni7681 +ENCODING 30337 +BBX 15 15 1 -1 +BITMAP +0080 +0100 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0100 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7682 +ENCODING 30338 +BBX 14 16 0 -2 +BITMAP +0100 +0200 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0200 +0200 +03FC +FE00 +0204 +0204 +01FC +ENDCHAR +STARTCHAR uni7683 +ENCODING 30339 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +3FF8 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +0840 +1042 +2042 +C03E +ENDCHAR +STARTCHAR uni7684 +ENCODING 30340 +BBX 14 15 1 -1 +BITMAP +2100 +2100 +4100 +F9FC +8A04 +8A04 +8C04 +F804 +8904 +8884 +8844 +8804 +F808 +0008 +0070 +ENDCHAR +STARTCHAR uni7685 +ENCODING 30341 +BBX 14 15 1 -1 +BITMAP +2000 +2000 +43F8 +FA48 +8A48 +8A48 +8A48 +8A48 +FBF8 +8A00 +8A00 +8A00 +8A04 +FA04 +89FC +ENDCHAR +STARTCHAR uni7686 +ENCODING 30342 +BBX 15 15 1 -1 +BITMAP +2040 +204C +3E70 +2040 +2042 +2642 +393E +C200 +1FF8 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni7687 +ENCODING 30343 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0000 +3FF8 +0100 +1FF0 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni7688 +ENCODING 30344 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +4200 +FA00 +8A00 +8BF8 +8A88 +FA88 +8A88 +8A50 +8C50 +FC20 +0850 +1188 +0606 +ENDCHAR +STARTCHAR uni7689 +ENCODING 30345 +BBX 14 15 1 -1 +BITMAP +2120 +2120 +4120 +F520 +9524 +95A8 +9530 +9520 +F520 +9520 +9520 +9524 +95A4 +FE24 +941C +ENDCHAR +STARTCHAR uni768A +ENCODING 30346 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +40A0 +F8A0 +8910 +8A48 +8C24 +8820 +FBF8 +8808 +8810 +8910 +88A0 +F840 +8820 +0020 +ENDCHAR +STARTCHAR uni768B +ENCODING 30347 +BBX 15 15 1 -1 +BITMAP +0080 +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0440 +1930 +EFEE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni768C +ENCODING 30348 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +4040 +FBFC +8840 +8840 +8840 +8BF8 +F8E0 +8950 +8950 +8A48 +8A48 +FC44 +8840 +0040 +ENDCHAR +STARTCHAR uni768D +ENCODING 30349 +BBX 11 16 2 -2 +BITMAP +0800 +1000 +7FC0 +4040 +7FC0 +4040 +7FC0 +8000 +83E0 +FA20 +8220 +8220 +9AA0 +E240 +0200 +0200 +ENDCHAR +STARTCHAR uni768E +ENCODING 30350 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +4040 +FFFE +8800 +8910 +8A08 +FC04 +8910 +8910 +88A0 +8840 +F8A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni768F +ENCODING 30351 +BBX 14 16 1 -2 +BITMAP +2108 +2090 +4000 +F9F8 +8890 +8890 +8890 +8890 +FBFC +8890 +8890 +8890 +8890 +F910 +8910 +0210 +ENDCHAR +STARTCHAR uni7690 +ENCODING 30352 +BBX 13 15 2 -1 +BITMAP +0400 +7FF0 +4010 +7FF0 +4010 +7FF0 +0000 +7270 +0200 +7270 +0200 +FFF8 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni7691 +ENCODING 30353 +BBX 14 15 1 -1 +BITMAP +2040 +2248 +4248 +FA48 +8BF8 +8800 +8BF8 +8808 +F808 +8BF8 +8A00 +8A00 +8A04 +FA04 +89FC +ENDCHAR +STARTCHAR uni7692 +ENCODING 30354 +BBX 14 16 1 -2 +BITMAP +2020 +21B0 +4728 +F128 +9120 +97FC +9120 +9128 +F128 +91B0 +9730 +9120 +9154 +F194 +950C +0204 +ENDCHAR +STARTCHAR uni7693 +ENCODING 30355 +BBX 15 15 1 -1 +BITMAP +2040 +2240 +4240 +F7FC +9440 +9040 +9040 +FFFE +9000 +93F8 +9208 +9208 +F208 +0208 +03F8 +ENDCHAR +STARTCHAR uni7694 +ENCODING 30356 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +4208 +FBF8 +8A08 +8BF8 +8800 +8800 +FBF8 +8840 +8840 +8FFC +8840 +F840 +8840 +0040 +ENDCHAR +STARTCHAR uni7695 +ENCODING 30357 +BBX 15 14 1 -1 +BITMAP +FEFE +1020 +1020 +2040 +7EFC +4284 +4284 +4284 +7EFC +4284 +4284 +4284 +4284 +7EFC +ENDCHAR +STARTCHAR uni7696 +ENCODING 30358 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +47FC +F404 +9404 +93F8 +9000 +F000 +9FFE +9120 +9120 +9120 +F222 +0222 +041E +ENDCHAR +STARTCHAR uni7697 +ENCODING 30359 +BBX 13 16 1 -2 +BITMAP +2000 +23F8 +4248 +F248 +92E8 +9248 +93F8 +9208 +F2E8 +92A8 +92A8 +92E8 +9208 +F408 +9428 +0810 +ENDCHAR +STARTCHAR uni7698 +ENCODING 30360 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +47FC +F840 +8BF8 +8840 +8FFC +8800 +FBF8 +8A08 +8BF8 +8A08 +8BF8 +FA08 +8A28 +0210 +ENDCHAR +STARTCHAR uni7699 +ENCODING 30361 +BBX 15 15 1 -1 +BITMAP +100C +1070 +FF40 +107E +3848 +3448 +5288 +9088 +1208 +0400 +3FF8 +2008 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni769A +ENCODING 30362 +BBX 15 15 1 -1 +BITMAP +2040 +2444 +4444 +F7FC +9000 +9FFE +9000 +F3F8 +9208 +9208 +93F8 +9110 +F110 +00A0 +0FFE +ENDCHAR +STARTCHAR uni769B +ENCODING 30363 +BBX 14 15 1 -1 +BITMAP +0200 +0400 +1FE0 +1020 +1FE0 +1020 +1FE0 +0000 +1010 +2020 +FCFC +8484 +FCFC +8484 +FCFC +ENDCHAR +STARTCHAR uni769C +ENCODING 30364 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +47FE +F000 +91F8 +9108 +91F8 +F000 +97FE +9402 +94F2 +9492 +F492 +04F2 +040E +ENDCHAR +STARTCHAR uni769D +ENCODING 30365 +BBX 15 15 1 -1 +BITMAP +1020 +2124 +7D24 +44A8 +7CA8 +4420 +4420 +7DFE +0050 +FE50 +1050 +FE90 +1092 +1F12 +F20E +ENDCHAR +STARTCHAR uni769E +ENCODING 30366 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +43F8 +F208 +93F8 +9208 +93F8 +F040 +9FFE +9110 +9248 +9444 +FBFA +0040 +0040 +ENDCHAR +STARTCHAR uni769F +ENCODING 30367 +BBX 14 16 1 -2 +BITMAP +2040 +27FC +4040 +FBF8 +8840 +8FFC +8800 +8BF8 +FA08 +8BF8 +8A08 +8BF8 +8A08 +FBF8 +8910 +0208 +ENDCHAR +STARTCHAR uni76A0 +ENCODING 30368 +BBX 15 15 1 -1 +BITMAP +2020 +2222 +4222 +F3FE +9110 +9120 +93FE +F220 +97FC +9A20 +9220 +93FC +F220 +0220 +03FE +ENDCHAR +STARTCHAR uni76A1 +ENCODING 30369 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +43F8 +F208 +93F8 +9208 +93F8 +F000 +975C +9040 +975C +9040 +FFFE +0040 +0040 +ENDCHAR +STARTCHAR uni76A2 +ENCODING 30370 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +43F8 +F040 +97FC +9210 +9738 +9210 +F310 +9C7C +9000 +97FC +9120 +F120 +9224 +041C +ENDCHAR +STARTCHAR uni76A3 +ENCODING 30371 +BBX 14 16 1 -2 +BITMAP +2110 +27FC +4110 +F000 +93F8 +9150 +9150 +97FC +F150 +9150 +93F8 +9040 +97FC +F040 +9040 +0040 +ENDCHAR +STARTCHAR uni76A4 +ENCODING 30372 +BBX 14 16 1 -2 +BITMAP +2078 +27C0 +4248 +F150 +97FC +9150 +9248 +9404 +F3F8 +9248 +9248 +93F8 +9248 +F248 +93F8 +0208 +ENDCHAR +STARTCHAR uni76A5 +ENCODING 30373 +BBX 14 16 1 -2 +BITMAP +2080 +23F8 +4208 +F3F8 +9208 +93F8 +9208 +93F8 +F040 +9248 +9150 +9248 +9040 +F7FC +9040 +0040 +ENDCHAR +STARTCHAR uni76A6 +ENCODING 30374 +BBX 15 15 1 -1 +BITMAP +2110 +2210 +4790 +F49E +97A4 +94A4 +97E4 +F114 +9FD4 +9414 +9788 +9488 +F494 +08A4 +1142 +ENDCHAR +STARTCHAR uni76A7 +ENCODING 30375 +BBX 15 15 1 -1 +BITMAP +200E +27F0 +4284 +F148 +97FE +9442 +92A4 +928A +F478 +9080 +91FC +9704 +9088 +F070 +078E +ENDCHAR +STARTCHAR uni76A8 +ENCODING 30376 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +0FE0 +0820 +0FE0 +2820 +7FFC +4284 +7EFC +4284 +7EFC +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni76A9 +ENCODING 30377 +BBX 15 16 0 -2 +BITMAP +1000 +21FC +7D04 +45FC +7D04 +45FC +7C20 +0124 +FCA8 +1020 +13FE +7C90 +1090 +1D12 +E212 +440E +ENDCHAR +STARTCHAR uni76AA +ENCODING 30378 +BBX 15 15 1 -1 +BITMAP +2040 +2444 +48E8 +FAAA +94E4 +98A8 +9AAA +FEEE +9040 +9FFE +9150 +9248 +F444 +0842 +0040 +ENDCHAR +STARTCHAR uni76AB +ENCODING 30379 +BBX 14 16 1 -2 +BITMAP +2080 +2040 +47FC +F4A0 +97FC +94A4 +97FC +9400 +F528 +95B0 +9520 +95A4 +951C +F800 +92A8 +0454 +ENDCHAR +STARTCHAR uni76AC +ENCODING 30380 +BBX 14 16 1 -2 +BITMAP +23F8 +2040 +47FC +F444 +9B58 +9040 +9358 +9120 +F3FC +9640 +9BF8 +9240 +93F8 +F240 +93FC +0200 +ENDCHAR +STARTCHAR uni76AD +ENCODING 30381 +BBX 14 16 1 -2 +BITMAP +203C +27C0 +4244 +F128 +97FC +94A4 +97FC +9008 +F788 +94FC +9788 +94A8 +9798 +F508 +95A8 +0690 +ENDCHAR +STARTCHAR uni76AE +ENCODING 30382 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +2082 +2084 +2080 +2FF8 +2008 +2408 +2210 +2120 +40C0 +4120 +8618 +1806 +ENDCHAR +STARTCHAR uni76AF +ENCODING 30383 +BBX 15 15 1 -1 +BITMAP +0800 +09FE +7E20 +4A20 +4A20 +4820 +7E20 +43FE +4220 +6420 +5420 +8820 +8C20 +1220 +6120 +ENDCHAR +STARTCHAR uni76B0 +ENCODING 30384 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +7E7C +4A84 +4884 +49F4 +7E94 +4294 +4294 +64F4 +5488 +8880 +9480 +2482 +427E +ENDCHAR +STARTCHAR uni76B1 +ENCODING 30385 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +3E10 +42FE +8492 +0894 +FE90 +02FC +02A4 +7EA4 +02A8 +02A8 +0290 +FF28 +0244 +0082 +ENDCHAR +STARTCHAR uni76B2 +ENCODING 30386 +BBX 15 16 0 -2 +BITMAP +0010 +FF10 +9110 +10FE +FE92 +2094 +2890 +48FC +7EA4 +08A4 +08A8 +0EA8 +F890 +4928 +0944 +0A82 +ENDCHAR +STARTCHAR uni76B3 +ENCODING 30387 +BBX 15 16 0 -2 +BITMAP +1010 +1410 +1210 +10FE +FE92 +1094 +1090 +92FC +54A4 +10A4 +38A8 +54A8 +9290 +1128 +5144 +2282 +ENDCHAR +STARTCHAR uni76B4 +ENCODING 30388 +BBX 15 15 1 -1 +BITMAP +2010 +2810 +4C10 +FAFE +2892 +4894 +8E90 +20FC +3CC4 +44A4 +C4A8 +2890 +1128 +2844 +C482 +ENDCHAR +STARTCHAR uni76B5 +ENCODING 30389 +BBX 15 16 0 -2 +BITMAP +2410 +2410 +7E10 +24FE +2492 +FF94 +0090 +7EFC +42A4 +42A4 +7EA8 +42A8 +4290 +7F28 +4244 +0082 +ENDCHAR +STARTCHAR uni76B6 +ENCODING 30390 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FF10 +08FE +1C92 +2A94 +4990 +88FC +7EA4 +42A4 +7EA4 +42A8 +7F10 +4628 +F8C6 +ENDCHAR +STARTCHAR uni76B7 +ENCODING 30391 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FE20 +11FE +7D22 +0124 +7D20 +45FC +4544 +7D44 +0128 +4910 +4A28 +3C44 +C182 +ENDCHAR +STARTCHAR uni76B8 +ENCODING 30392 +BBX 15 15 1 -1 +BITMAP +0010 +FE10 +8210 +92FE +7C92 +1094 +7C90 +54FC +7CA4 +54A4 +7CA8 +1090 +FF28 +1044 +1082 +ENDCHAR +STARTCHAR uni76B9 +ENCODING 30393 +BBX 15 15 1 -1 +BITMAP +0800 +08FE +0882 +7F92 +497C +4A10 +487C +7E54 +527C +5254 +547C +4810 +94FE +2210 +4110 +ENDCHAR +STARTCHAR uni76BA +ENCODING 30394 +BBX 15 15 1 -1 +BITMAP +2010 +2010 +7F10 +917E +5552 +7D54 +1150 +267C +2064 +7F64 +9154 +5554 +7D88 +1114 +6662 +ENDCHAR +STARTCHAR uni76BB +ENCODING 30395 +BBX 15 16 0 -2 +BITMAP +1010 +1E10 +1010 +7EFE +5292 +5C94 +7290 +4EFC +40A4 +5CA4 +54A8 +5CA8 +5490 +5D28 +9644 +3882 +ENDCHAR +STARTCHAR uni76BC +ENCODING 30396 +BBX 15 16 0 -2 +BITMAP +1010 +FE10 +1010 +7CFE +0092 +FE94 +8290 +7CFC +00A4 +7CA4 +44A8 +7CA8 +4490 +2928 +0F44 +F282 +ENDCHAR +STARTCHAR uni76BD +ENCODING 30397 +BBX 15 16 0 -2 +BITMAP +1010 +FE10 +0010 +FEFE +8292 +BA94 +AA90 +FEFC +00A4 +7CA4 +44A8 +7CA8 +4490 +7D28 +0044 +FE82 +ENDCHAR +STARTCHAR uni76BE +ENCODING 30398 +BBX 15 16 0 -2 +BITMAP +1010 +FE10 +1010 +7CFE +0092 +FE94 +AA90 +FEFC +44A4 +7CA4 +44A8 +7CA8 +4490 +7D28 +2844 +4482 +ENDCHAR +STARTCHAR uni76BF +ENCODING 30399 +BBX 15 12 1 0 +BITMAP +3FF8 +2448 +2448 +2448 +2448 +2448 +2448 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76C0 +ENCODING 30400 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0180 +0140 +0120 +0110 +0108 +0100 +0100 +3FF8 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76C1 +ENCODING 30401 +BBX 15 14 0 -1 +BITMAP +3FF0 +0810 +0820 +083C +1004 +1004 +2014 +4008 +3FF8 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76C2 +ENCODING 30402 +BBX 15 14 1 -1 +BITMAP +1FF0 +0100 +0100 +7FFC +0100 +0100 +0100 +0700 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76C3 +ENCODING 30403 +BBX 15 14 1 -1 +BITMAP +3FF8 +0080 +0100 +0760 +1918 +6106 +0100 +0100 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76C4 +ENCODING 30404 +BBX 15 14 0 -1 +BITMAP +7FF8 +0108 +3FF8 +2100 +3FFC +0104 +0114 +0108 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76C5 +ENCODING 30405 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +2108 +2108 +2108 +3FF8 +0100 +0100 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76C6 +ENCODING 30406 +BBX 15 15 1 -1 +BITMAP +0440 +0820 +1010 +2008 +DFF6 +0210 +0410 +1810 +60E0 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76C7 +ENCODING 30407 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +7FFC +0280 +0440 +0A20 +3118 +C006 +0000 +3FF8 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76C8 +ENCODING 30408 +BBX 15 14 1 -1 +BITMAP +7FE0 +1020 +1020 +1FBC +1084 +2484 +2304 +4CDC +8000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76C9 +ENCODING 30409 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +0100 +0100 +FFFE +0540 +0920 +3118 +C106 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76CA +ENCODING 30410 +BBX 14 15 1 -1 +BITMAP +1020 +0820 +0840 +0000 +FFFC +0840 +1020 +2010 +C00C +3FF0 +2490 +2490 +2490 +2490 +FFFC +ENDCHAR +STARTCHAR uni76CB +ENCODING 30411 +BBX 15 15 0 -1 +BITMAP +0240 +0220 +7FFC +0400 +0BF0 +1120 +20C0 +4330 +1C0E +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76CC +ENCODING 30412 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +1E84 +2284 +629C +9280 +0C82 +0882 +107E +E000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76CD +ENCODING 30413 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +0100 +FFFE +0200 +0420 +08D0 +7F08 +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76CE +ENCODING 30414 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +2108 +2108 +FFFE +0440 +0820 +3018 +C006 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76CF +ENCODING 30415 +BBX 15 16 0 -2 +BITMAP +0240 +0220 +03F8 +7E00 +03FC +FE10 +0160 +0382 +1C62 +E01E +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76D0 +ENCODING 30416 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +7F20 +0828 +0824 +0F22 +F020 +4020 +0000 +3FF8 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76D1 +ENCODING 30417 +BBX 15 15 0 -1 +BITMAP +0440 +2440 +247C +2440 +2490 +2488 +2508 +0400 +0000 +3FF8 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76D2 +ENCODING 30418 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0280 +0C60 +3018 +C7E6 +0000 +0FF0 +0810 +0FF0 +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76D3 +ENCODING 30419 +BBX 15 15 0 -1 +BITMAP +1000 +09FC +4020 +2020 +0BFE +1020 +7020 +1020 +10A0 +0040 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76D4 +ENCODING 30420 +BBX 15 15 1 -1 +BITMAP +2000 +FFFE +2000 +2080 +248C +2890 +2940 +2220 +4410 +580C +8000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76D5 +ENCODING 30421 +BBX 15 15 0 -1 +BITMAP +1000 +09F0 +4110 +2590 +0550 +0950 +7112 +1112 +120E +1400 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76D6 +ENCODING 30422 +BBX 15 15 1 -1 +BITMAP +0820 +0440 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76D7 +ENCODING 30423 +BBX 15 15 1 -1 +BITMAP +0100 +4100 +23FE +1242 +0444 +1040 +20A0 +4118 +8606 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76D8 +ENCODING 30424 +BBX 15 15 0 -1 +BITMAP +0200 +0400 +1FF0 +1110 +1090 +FFFE +1010 +1210 +2150 +4020 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76D9 +ENCODING 30425 +BBX 15 15 0 -1 +BITMAP +0120 +0110 +7FFC +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +2108 +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76DA +ENCODING 30426 +BBX 15 15 0 -1 +BITMAP +0110 +0108 +7FFC +0100 +2118 +11A0 +0740 +1920 +E118 +4506 +0200 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76DB +ENCODING 30427 +BBX 15 15 1 -1 +BITMAP +0090 +0088 +7FFC +4080 +7C44 +4428 +4410 +442A +98C4 +8000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76DC +ENCODING 30428 +BBX 15 15 1 -1 +BITMAP +2080 +1080 +89FC +4104 +2228 +0020 +1050 +2088 +4306 +8000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76DD +ENCODING 30429 +BBX 15 15 0 -1 +BITMAP +3FF0 +0010 +1FF0 +0010 +FFFE +1110 +09A0 +0540 +1930 +E50E +0200 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76DE +ENCODING 30430 +BBX 15 15 1 -1 +BITMAP +0840 +0420 +7FFE +0440 +0388 +3C78 +0420 +7FFC +0440 +0384 +3C78 +0000 +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni76DF +ENCODING 30431 +BBX 15 14 1 -1 +BITMAP +7CFC +4484 +44FC +7C84 +4484 +44FC +7C84 +0104 +020C +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76E0 +ENCODING 30432 +BBX 15 16 0 -2 +BITMAP +0800 +0FE0 +1020 +1FC0 +0040 +7FFC +0600 +1920 +06C0 +39B0 +068C +3980 +0000 +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni76E1 +ENCODING 30433 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +FFFE +2448 +4224 +BFFA +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76E2 +ENCODING 30434 +BBX 15 15 0 -1 +BITMAP +0020 +7C28 +5424 +55FE +7C20 +5450 +5450 +7C88 +0104 +0202 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76E3 +ENCODING 30435 +BBX 15 15 1 -1 +BITMAP +0020 +7F20 +483E +7E40 +4240 +7E80 +4800 +483C +7F00 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76E4 +ENCODING 30436 +BBX 15 15 1 -1 +BITMAP +0800 +1078 +3E48 +2A4E +2280 +FF7C +2A24 +2A28 +4210 +866E +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76E5 +ENCODING 30437 +BBX 15 15 1 -1 +BITMAP +1800 +611C +4124 +775C +4184 +4384 +755C +4924 +4304 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76E6 +ENCODING 30438 +BBX 15 15 1 -1 +BITMAP +0100 +06C0 +1BB0 +E00E +0FF0 +0020 +7FFC +0280 +1FF0 +1290 +1CF0 +1010 +7FFC +4444 +FFFE +ENDCHAR +STARTCHAR uni76E7 +ENCODING 30439 +BBX 15 15 1 -1 +BITMAP +0200 +03F0 +0200 +3FFC +2204 +3FE0 +2208 +2FF8 +2910 +2FF0 +4910 +5FF8 +9248 +1248 +7FFE +ENDCHAR +STARTCHAR uni76E8 +ENCODING 30440 +BBX 15 15 1 -1 +BITMAP +0BFE +3020 +C1FC +0904 +31FC +C104 +05FC +0904 +31FC +C088 +0306 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76E9 +ENCODING 30441 +BBX 15 15 0 -1 +BITMAP +0820 +7F20 +083E +FF44 +22A4 +7F28 +0828 +FF10 +0828 +0846 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76EA +ENCODING 30442 +BBX 15 14 1 -1 +BITMAP +63F0 +1210 +03F0 +C210 +23F0 +0000 +3FFE +4200 +47FC +8924 +824C +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni76EB +ENCODING 30443 +BBX 15 16 0 -2 +BITMAP +0100 +06C0 +1830 +EFEE +0000 +1FF0 +1010 +7FFC +0440 +1FF0 +1450 +1BB0 +1010 +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni76EC +ENCODING 30444 +BBX 15 15 1 -1 +BITMAP +0080 +FCFC +9120 +9020 +FDFE +8420 +FCFC +9084 +9084 +FCFC +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76ED +ENCODING 30445 +BBX 15 16 0 -2 +BITMAP +1020 +2220 +7C3E +0A44 +7FA4 +0824 +7F28 +1428 +7F10 +0828 +7F44 +0882 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni76EE +ENCODING 30446 +BBX 10 14 3 -1 +BITMAP +FFC0 +8040 +8040 +8040 +FFC0 +8040 +8040 +8040 +FFC0 +8040 +8040 +8040 +8040 +FFC0 +ENDCHAR +STARTCHAR uni76EF +ENCODING 30447 +BBX 14 14 1 -2 +BITMAP +F7FC +9040 +9040 +F040 +9040 +9040 +F040 +9040 +9040 +9040 +F040 +9040 +0140 +0080 +ENDCHAR +STARTCHAR uni76F0 +ENCODING 30448 +BBX 14 15 1 -2 +BITMAP +03F8 +F840 +8840 +8840 +F840 +8840 +8FFC +F840 +8840 +8840 +8840 +F840 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni76F1 +ENCODING 30449 +BBX 15 14 1 -1 +BITMAP +F7FC +9040 +9040 +9040 +F040 +9040 +9FFE +9040 +F040 +9040 +9040 +9040 +F040 +01C0 +ENDCHAR +STARTCHAR uni76F2 +ENCODING 30450 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +FFFC +2000 +2000 +1FF0 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni76F3 +ENCODING 30451 +BBX 14 15 1 -1 +BITMAP +0040 +0020 +F820 +8800 +8BFC +F900 +8900 +8900 +F900 +8900 +8900 +8900 +F900 +8900 +01F8 +ENDCHAR +STARTCHAR uni76F4 +ENCODING 30452 +BBX 13 15 2 -1 +BITMAP +0100 +0100 +FFF8 +0200 +1FE0 +9020 +9FE0 +9020 +9020 +9FE0 +9020 +9020 +9FE0 +8000 +FFF8 +ENDCHAR +STARTCHAR uni76F5 +ENCODING 30453 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +F900 +89FC +8A00 +FC00 +89F8 +8810 +F820 +8840 +8880 +8900 +FA04 +8A04 +01FC +ENDCHAR +STARTCHAR uni76F6 +ENCODING 30454 +BBX 14 14 1 -2 +BITMAP +FBF8 +8800 +8800 +F800 +8FFC +8920 +F920 +8920 +8920 +8920 +FA24 +8A24 +041C +0800 +ENDCHAR +STARTCHAR uni76F7 +ENCODING 30455 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F900 +89F8 +8A08 +FC08 +8908 +8888 +F888 +8828 +8848 +8888 +FB08 +8808 +0050 +0020 +ENDCHAR +STARTCHAR uni76F8 +ENCODING 30456 +BBX 14 15 1 -1 +BITMAP +1000 +11FC +1104 +FD04 +1104 +31FC +3904 +5504 +5104 +91FC +1104 +1104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni76F9 +ENCODING 30457 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +F040 +97FC +9040 +F248 +9248 +9248 +F248 +93F8 +9048 +9040 +F044 +9044 +003C +ENDCHAR +STARTCHAR uni76FA +ENCODING 30458 +BBX 14 16 1 -2 +BITMAP +0010 +0038 +F9C0 +8900 +8900 +F900 +89FC +8910 +F910 +8910 +8910 +8910 +FA10 +8A10 +0410 +0810 +ENDCHAR +STARTCHAR uni76FB +ENCODING 30459 +BBX 15 15 1 -1 +BITMAP +0030 +F110 +9108 +9208 +95F4 +F882 +9080 +9100 +93F8 +F208 +9008 +9008 +9010 +F010 +00E0 +ENDCHAR +STARTCHAR uni76FC +ENCODING 30460 +BBX 15 15 1 -1 +BITMAP +0020 +F110 +9110 +9208 +9208 +F404 +9BFA +9088 +9088 +F088 +9088 +9108 +9108 +F208 +0430 +ENDCHAR +STARTCHAR uni76FD +ENCODING 30461 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F840 +8BF8 +8840 +F840 +8840 +8BF8 +F840 +8840 +8840 +8FFC +F840 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni76FE +ENCODING 30462 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +2080 +3FFE +2080 +2FF0 +2810 +2810 +2FF0 +2810 +4810 +4FF0 +8810 +0810 +0FF0 +ENDCHAR +STARTCHAR uni76FF +ENCODING 30463 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F840 +8FFC +8910 +F910 +8910 +8910 +F910 +88A0 +88A0 +8840 +F8A0 +8910 +0208 +0C04 +ENDCHAR +STARTCHAR uni7700 +ENCODING 30464 +BBX 13 15 1 -2 +BITMAP +01F8 +F908 +8908 +8908 +F9F8 +8908 +8908 +F908 +89F8 +8908 +8908 +FA08 +8A08 +0428 +0810 +ENDCHAR +STARTCHAR uni7701 +ENCODING 30465 +BBX 14 15 2 -1 +BITMAP +0200 +1220 +2210 +C24C +0680 +0100 +1FE0 +F020 +1FE0 +1020 +1020 +1FE0 +1020 +1020 +1FE0 +ENDCHAR +STARTCHAR uni7702 +ENCODING 30466 +BBX 14 16 1 -2 +BITMAP +0008 +003C +FBE0 +8A20 +8A20 +FA20 +8A20 +8BFC +FA20 +8A20 +8A20 +8A10 +FA14 +8A94 +030C +0204 +ENDCHAR +STARTCHAR uni7703 +ENCODING 30467 +BBX 14 13 1 -1 +BITMAP +F3F8 +9000 +9000 +F000 +97FC +9040 +F040 +9080 +9080 +9110 +F208 +97FC +0204 +ENDCHAR +STARTCHAR uni7704 +ENCODING 30468 +BBX 15 14 1 -1 +BITMAP +F7FE +9040 +9040 +9240 +F27C +9244 +9244 +9244 +F3FC +9004 +9004 +9008 +F008 +0070 +ENDCHAR +STARTCHAR uni7705 +ENCODING 30469 +BBX 14 16 1 -2 +BITMAP +0010 +0038 +F3C0 +9200 +9200 +F3F8 +9288 +9288 +F288 +9250 +9250 +9220 +F220 +9450 +0488 +0904 +ENDCHAR +STARTCHAR uni7706 +ENCODING 30470 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F840 +8BFC +8880 +F880 +8880 +88F8 +F888 +8888 +8888 +8888 +F908 +8908 +0250 +0420 +ENDCHAR +STARTCHAR uni7707 +ENCODING 30471 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +9040 +9248 +9248 +F444 +9442 +9840 +9048 +F1C8 +9010 +9020 +9040 +F180 +0E00 +ENDCHAR +STARTCHAR uni7708 +ENCODING 30472 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +9040 +97FC +9444 +F444 +9444 +9040 +9060 +F0A0 +90A0 +90A0 +9122 +F222 +0C1E +ENDCHAR +STARTCHAR uni7709 +ENCODING 30473 +BBX 14 14 1 -1 +BITMAP +7FFC +4104 +4104 +7FFC +4000 +4FF8 +4808 +4FF8 +4808 +4808 +8FF8 +8808 +0808 +0FF8 +ENDCHAR +STARTCHAR uni770A +ENCODING 30474 +BBX 15 15 1 -1 +BITMAP +0018 +F060 +9780 +9080 +9080 +F0F8 +9780 +9080 +9080 +F0FC +9F80 +9080 +9082 +F082 +007E +ENDCHAR +STARTCHAR uni770B +ENCODING 30475 +BBX 15 15 1 -1 +BITMAP +0038 +3FC0 +0100 +7FFC +0200 +FFFE +0400 +0FF8 +1808 +2FF8 +C808 +0FF8 +0808 +0808 +0FF8 +ENDCHAR +STARTCHAR uni770C +ENCODING 30476 +BBX 15 14 1 -1 +BITMAP +0FF0 +0810 +4FF0 +4810 +4810 +4FF0 +4810 +4810 +4FF0 +4000 +7FFE +1110 +2108 +C106 +ENDCHAR +STARTCHAR uni770D +ENCODING 30477 +BBX 14 14 1 -1 +BITMAP +03FC +FA00 +8A08 +8A88 +FA50 +8A50 +8A20 +FA20 +8A50 +8A50 +8A88 +FB08 +8A00 +03FC +ENDCHAR +STARTCHAR uni770E +ENCODING 30478 +BBX 14 15 1 -2 +BITMAP +03F8 +F000 +9000 +9000 +F7FC +9040 +9040 +F250 +9248 +9448 +9444 +F844 +9040 +0140 +0080 +ENDCHAR +STARTCHAR uni770F +ENCODING 30479 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F840 +8BF8 +8A48 +FA48 +8A48 +8A48 +FA48 +8FFC +8840 +88A0 +F8A0 +8910 +0208 +0404 +ENDCHAR +STARTCHAR uni7710 +ENCODING 30480 +BBX 14 13 1 -1 +BITMAP +F7FC +9040 +9040 +F040 +9240 +9240 +F278 +9240 +9240 +9240 +F240 +9240 +0FFC +ENDCHAR +STARTCHAR uni7711 +ENCODING 30481 +BBX 14 16 1 -2 +BITMAP +0020 +0120 +F120 +9220 +92FC +F4A4 +9724 +9124 +F224 +9224 +94A4 +97A4 +F0C4 +9044 +0094 +0108 +ENDCHAR +STARTCHAR uni7712 +ENCODING 30482 +BBX 13 16 1 -2 +BITMAP +0040 +0040 +F840 +8BF8 +8A48 +FA48 +8A48 +8BF8 +FA48 +8A48 +8A48 +8BF8 +FA48 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni7713 +ENCODING 30483 +BBX 14 16 1 -2 +BITMAP +0050 +0048 +F048 +9040 +97FC +F440 +9448 +9448 +F448 +9450 +9450 +9520 +F624 +9454 +008C +0104 +ENDCHAR +STARTCHAR uni7714 +ENCODING 30484 +BBX 13 15 1 -2 +BITMAP +FFF8 +8888 +8888 +FFF8 +0200 +1240 +2220 +4210 +8208 +1240 +2220 +4210 +8208 +0200 +0200 +ENDCHAR +STARTCHAR uni7715 +ENCODING 30485 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F8A0 +8910 +8A08 +FC24 +8840 +8880 +FB10 +8820 +8840 +8888 +FB10 +8820 +00C0 +0700 +ENDCHAR +STARTCHAR uni7716 +ENCODING 30486 +BBX 14 15 1 -2 +BITMAP +03F8 +FA08 +8A08 +8A08 +FA08 +8BF8 +88A0 +F8A0 +88A0 +88A0 +8924 +F924 +8A24 +041C +0800 +ENDCHAR +STARTCHAR uni7717 +ENCODING 30487 +BBX 14 15 1 -1 +BITMAP +0100 +F100 +9100 +93FC +9204 +F404 +91E4 +9124 +9124 +F124 +9124 +91E4 +9008 +F008 +0070 +ENDCHAR +STARTCHAR uni7718 +ENCODING 30488 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +FFFE +0100 +2288 +1450 +0820 +3018 +DFF6 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni7719 +ENCODING 30489 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8880 +8888 +8904 +F93C +8FC2 +8800 +8800 +F9FC +8904 +8904 +8904 +F904 +01FC +ENDCHAR +STARTCHAR uni771A +ENCODING 30490 +BBX 13 15 2 -1 +BITMAP +2200 +2200 +7FF0 +8200 +3FE0 +0200 +FFF8 +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +ENDCHAR +STARTCHAR uni771B +ENCODING 30491 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +9040 +97FC +9040 +F040 +9040 +9FFE +9150 +F150 +9248 +9248 +9444 +F842 +0040 +ENDCHAR +STARTCHAR uni771C +ENCODING 30492 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F840 +8FFC +8840 +F840 +8840 +8BF8 +F8E0 +8950 +8950 +8A48 +FA48 +8C44 +0040 +0040 +ENDCHAR +STARTCHAR uni771D +ENCODING 30493 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F040 +97FC +9404 +F808 +9000 +9000 +F7FC +9040 +9040 +9040 +F040 +9040 +0140 +0080 +ENDCHAR +STARTCHAR uni771E +ENCODING 30494 +BBX 14 15 2 -1 +BITMAP +21C0 +3E08 +2008 +1FF8 +0000 +9FE0 +9020 +9FE0 +9020 +9FE0 +9020 +FFFC +0800 +3020 +C018 +ENDCHAR +STARTCHAR uni771F +ENCODING 30495 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +0400 +1810 +600C +ENDCHAR +STARTCHAR uni7720 +ENCODING 30496 +BBX 15 14 1 -1 +BITMAP +07F8 +F408 +9408 +9408 +F7F8 +9440 +9440 +F7FC +9440 +9420 +9420 +F492 +070A +0C04 +ENDCHAR +STARTCHAR uni7721 +ENCODING 30497 +BBX 14 16 1 -2 +BITMAP +0008 +003C +FBE0 +8A20 +8A20 +FA20 +8A20 +8BFC +FA20 +8A20 +8A20 +8A10 +FA14 +8A94 +034C +0224 +ENDCHAR +STARTCHAR uni7722 +ENCODING 30498 +BBX 15 16 0 -2 +BITMAP +1000 +1EF8 +2288 +62A8 +9492 +0882 +307E +C000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni7723 +ENCODING 30499 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +FA40 +8A40 +8BF8 +FA40 +8C40 +8840 +FBFC +8840 +88A0 +88A0 +F910 +8910 +0208 +0404 +ENDCHAR +STARTCHAR uni7724 +ENCODING 30500 +BBX 15 14 1 -1 +BITMAP +F7FC +9404 +9404 +97FC +F400 +9500 +9500 +951C +F5E0 +9500 +9500 +9502 +F902 +00FE +ENDCHAR +STARTCHAR uni7725 +ENCODING 30501 +BBX 15 15 1 -1 +BITMAP +0880 +0880 +088C +4EF0 +4882 +4882 +4E7E +F000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7726 +ENCODING 30502 +BBX 15 15 1 -1 +BITMAP +0110 +F110 +9110 +9510 +9510 +F516 +95D8 +9510 +9510 +F510 +9510 +9510 +9510 +F5D2 +0E0E +ENDCHAR +STARTCHAR uni7727 +ENCODING 30503 +BBX 13 15 1 -2 +BITMAP +03F8 +F888 +8888 +8888 +F888 +8928 +8910 +FA00 +89F8 +8908 +8908 +F908 +8908 +01F8 +0108 +ENDCHAR +STARTCHAR uni7728 +ENCODING 30504 +BBX 14 15 1 -1 +BITMAP +0010 +0078 +F780 +9000 +9080 +F040 +97F8 +9010 +F020 +9040 +9080 +9100 +F200 +9500 +08FC +ENDCHAR +STARTCHAR uni7729 +ENCODING 30505 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +9040 +97FE +9080 +F080 +9110 +9110 +9220 +F120 +90C0 +9048 +9088 +F134 +0FC2 +ENDCHAR +STARTCHAR uni772A +ENCODING 30506 +BBX 14 15 1 -2 +BITMAP +03FC +F840 +8840 +8840 +FBFC +8A44 +8A44 +FAA4 +8A94 +8B14 +8A04 +FA04 +8A04 +0214 +0208 +ENDCHAR +STARTCHAR uni772B +ENCODING 30507 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +FA48 +8948 +8950 +F840 +8BF8 +8840 +F840 +8840 +8FFC +8840 +F840 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni772C +ENCODING 30508 +BBX 14 16 1 -2 +BITMAP +0120 +0110 +F110 +9100 +97FC +F140 +9140 +9148 +F148 +9250 +9250 +9264 +F444 +94C4 +093C +1000 +ENDCHAR +STARTCHAR uni772D +ENCODING 30509 +BBX 14 15 1 -1 +BITMAP +0080 +F080 +97F8 +9080 +9080 +F080 +9FFC +9000 +9080 +F080 +97F8 +9080 +9080 +F080 +0FFC +ENDCHAR +STARTCHAR uni772E +ENCODING 30510 +BBX 14 15 1 -2 +BITMAP +03FC +FA04 +8A04 +8AF4 +FA04 +8A04 +8AF4 +FA94 +8A94 +8A94 +8AF4 +FA04 +8A04 +0214 +0208 +ENDCHAR +STARTCHAR uni772F +ENCODING 30511 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F248 +9148 +9150 +F040 +9040 +97FC +F0E0 +9150 +9150 +9248 +F248 +9444 +0040 +0040 +ENDCHAR +STARTCHAR uni7730 +ENCODING 30512 +BBX 14 14 1 -1 +BITMAP +03FC +F840 +8880 +8910 +FA08 +8BFC +8844 +F840 +8840 +8BFC +8840 +F840 +8840 +07FC +ENDCHAR +STARTCHAR uni7731 +ENCODING 30513 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +F048 +93F8 +9240 +F3FC +9044 +9054 +90A8 +F0A0 +9110 +0208 +0404 +ENDCHAR +STARTCHAR uni7732 +ENCODING 30514 +BBX 14 15 1 -2 +BITMAP +07FC +F910 +8910 +89F0 +F910 +8910 +89F0 +F910 +8910 +891C +8FF0 +F810 +8810 +0010 +0010 +ENDCHAR +STARTCHAR uni7733 +ENCODING 30515 +BBX 13 16 1 -2 +BITMAP +0080 +0080 +F9F8 +8A08 +8D10 +F8A0 +8840 +8880 +F900 +8BF8 +8D08 +8908 +F908 +8908 +01F8 +0108 +ENDCHAR +STARTCHAR uni7734 +ENCODING 30516 +BBX 14 15 1 -1 +BITMAP +0200 +F200 +93FC +9404 +9404 +FBE4 +9224 +9224 +93E4 +F224 +9224 +93E4 +9008 +F008 +0070 +ENDCHAR +STARTCHAR uni7735 +ENCODING 30517 +BBX 15 15 1 -1 +BITMAP +0040 +F0F8 +9108 +9708 +9090 +F060 +90D0 +971E +9022 +F062 +9194 +900C +9008 +F030 +03C0 +ENDCHAR +STARTCHAR uni7736 +ENCODING 30518 +BBX 15 14 1 -1 +BITMAP +F7FE +9400 +95FC +9420 +F420 +9420 +94F8 +9420 +F420 +9420 +9420 +95FC +F400 +07FE +ENDCHAR +STARTCHAR uni7737 +ENCODING 30519 +BBX 15 15 1 -1 +BITMAP +0920 +0910 +1110 +3FF8 +0280 +0440 +FFFE +0820 +1FF0 +2828 +CFE6 +0820 +0FE0 +0820 +0FE0 +ENDCHAR +STARTCHAR uni7738 +ENCODING 30520 +BBX 15 15 1 -1 +BITMAP +0080 +F080 +9110 +9238 +9FC4 +F000 +9040 +9240 +93FC +F440 +9040 +9FFE +9040 +F040 +0040 +ENDCHAR +STARTCHAR uni7739 +ENCODING 30521 +BBX 14 16 1 -2 +BITMAP +0110 +0090 +F8A0 +8800 +8BF8 +F840 +8840 +8840 +FFFC +8840 +88A0 +88A0 +F910 +8910 +0208 +0404 +ENDCHAR +STARTCHAR uni773A +ENCODING 30522 +BBX 15 15 1 -1 +BITMAP +0120 +F120 +9124 +9528 +F330 +9120 +9120 +9130 +F328 +9D26 +9120 +9220 +F222 +0422 +181E +ENDCHAR +STARTCHAR uni773B +ENCODING 30523 +BBX 14 16 1 -2 +BITMAP +0208 +0108 +F910 +8800 +8FFC +F840 +8840 +8BF8 +F840 +8840 +8FFC +8840 +F840 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni773C +ENCODING 30524 +BBX 15 14 1 -1 +BITMAP +03F8 +F208 +9208 +93F8 +F208 +9208 +93FA +F242 +9244 +9228 +9230 +F210 +0388 +0E06 +ENDCHAR +STARTCHAR uni773D +ENCODING 30525 +BBX 14 16 1 -2 +BITMAP +0008 +003C +FBC0 +8A00 +8A0C +FAF0 +8AA0 +8AA0 +FAA4 +8AA8 +8A90 +8A90 +FA88 +8CA8 +04C4 +0880 +ENDCHAR +STARTCHAR uni773E +ENCODING 30526 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +00FC +7F00 +1110 +1110 +1110 +2928 +2528 +4544 +8182 +0100 +ENDCHAR +STARTCHAR uni773F +ENCODING 30527 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F020 +93C0 +9044 +F068 +9770 +9160 +F150 +9150 +9250 +9248 +F448 +9844 +0140 +0080 +ENDCHAR +STARTCHAR uni7740 +ENCODING 30528 +BBX 15 15 1 -1 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +0400 +0FF8 +1808 +2FF8 +C808 +0FF8 +0808 +0FF8 +ENDCHAR +STARTCHAR uni7741 +ENCODING 30529 +BBX 14 16 1 -2 +BITMAP +0200 +0200 +F3E0 +9420 +9840 +F7F0 +9090 +9090 +F7FC +9090 +9090 +97F0 +F090 +9080 +0280 +0100 +ENDCHAR +STARTCHAR uni7742 +ENCODING 30530 +BBX 13 16 0 -2 +BITMAP +0208 +0508 +0888 +1248 +0508 +0888 +3FF8 +2000 +2FF8 +2808 +2FF8 +2808 +2FF8 +4808 +4FF8 +8808 +ENDCHAR +STARTCHAR uni7743 +ENCODING 30531 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F110 +9208 +97FC +F004 +9110 +9288 +F484 +91F0 +9310 +94A0 +F040 +90A0 +0310 +0C0C +ENDCHAR +STARTCHAR uni7744 +ENCODING 30532 +BBX 13 16 1 -2 +BITMAP +0040 +0248 +F948 +8950 +8840 +FBF8 +8A08 +8A08 +FBF8 +8A08 +8A08 +8BF8 +FA08 +8A08 +0228 +0210 +ENDCHAR +STARTCHAR uni7745 +ENCODING 30533 +BBX 14 15 1 -2 +BITMAP +03F8 +FA08 +8BF8 +8A08 +FBF8 +8800 +8800 +FBF8 +8840 +8840 +8FFC +F840 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni7746 +ENCODING 30534 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +97FC +9404 +9404 +F3F8 +9000 +9000 +9FFE +F120 +9120 +9220 +9222 +F422 +081E +ENDCHAR +STARTCHAR uni7747 +ENCODING 30535 +BBX 15 15 1 -1 +BITMAP +0208 +F110 +97FC +9044 +9044 +F7FC +9440 +9440 +97FE +F0C2 +90C2 +9142 +925C +FC40 +0040 +ENDCHAR +STARTCHAR uni7748 +ENCODING 30536 +BBX 14 14 1 -1 +BITMAP +03F8 +FA08 +8A08 +8A08 +FBF8 +8800 +8800 +FBFC +8840 +8840 +8BF8 +F840 +8840 +07FC +ENDCHAR +STARTCHAR uni7749 +ENCODING 30537 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +F248 +9248 +9248 +F248 +9554 +98E4 +F040 +9040 +93F8 +9040 +F040 +9040 +07FC +ENDCHAR +STARTCHAR uni774A +ENCODING 30538 +BBX 14 15 1 -2 +BITMAP +01F8 +F908 +8908 +89F8 +F800 +8BFC +8A04 +FA04 +8BFC +8A04 +8A04 +FBFC +8A04 +0214 +0208 +ENDCHAR +STARTCHAR uni774B +ENCODING 30539 +BBX 14 16 1 -2 +BITMAP +0020 +01B0 +F728 +9128 +9120 +F7FC +9120 +9128 +F128 +91B0 +9730 +9120 +F154 +9194 +050C +0204 +ENDCHAR +STARTCHAR uni774C +ENCODING 30540 +BBX 14 16 1 -2 +BITMAP +0100 +0100 +F3F0 +9410 +9820 +F7F8 +9488 +9488 +F488 +97F8 +9140 +9140 +F244 +9244 +043C +0800 +ENDCHAR +STARTCHAR uni774D +ENCODING 30541 +BBX 15 14 1 -1 +BITMAP +F3FC +9204 +9204 +93FC +F204 +9204 +93FC +9204 +F204 +93FC +9090 +9110 +F212 +0C0E +ENDCHAR +STARTCHAR uni774E +ENCODING 30542 +BBX 15 15 1 -1 +BITMAP +0008 +F190 +9060 +90D0 +930C +F040 +97FE +90A0 +91FC +F324 +9524 +9124 +912C +F020 +0020 +ENDCHAR +STARTCHAR uni774F +ENCODING 30543 +BBX 14 15 1 -2 +BITMAP +07FC +F444 +9444 +9444 +F7FC +9444 +94C4 +F4E4 +9554 +9644 +9444 +F444 +9404 +07FC +0404 +ENDCHAR +STARTCHAR uni7750 +ENCODING 30544 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F040 +97FC +9040 +F248 +9148 +9150 +F7FC +90E0 +9150 +9150 +F248 +9444 +0840 +0040 +ENDCHAR +STARTCHAR uni7751 +ENCODING 30545 +BBX 14 15 1 -1 +BITMAP +0080 +0080 +F140 +9140 +9220 +F410 +9BEC +9000 +F110 +9090 +9490 +92A0 +F220 +9040 +0FFC +ENDCHAR +STARTCHAR uni7752 +ENCODING 30546 +BBX 14 16 1 -2 +BITMAP +0040 +0244 +F244 +9448 +90A0 +F110 +9608 +9044 +F040 +9248 +9248 +9450 +F0A0 +9110 +0208 +0C04 +ENDCHAR +STARTCHAR uni7753 +ENCODING 30547 +BBX 14 16 1 -2 +BITMAP +0120 +0120 +F120 +97F8 +9528 +F528 +9528 +97F8 +F528 +9528 +9528 +9FFC +F000 +9120 +0210 +0408 +ENDCHAR +STARTCHAR uni7754 +ENCODING 30548 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F0A0 +9110 +9208 +F5F4 +9000 +93F8 +F2A8 +92A8 +93F8 +92A8 +F2A8 +92A8 +0208 +0218 +ENDCHAR +STARTCHAR uni7755 +ENCODING 30549 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9404 +9A08 +F200 +93BC +94A4 +F4A4 +96A4 +9934 +9128 +F220 +9224 +0424 +081C +ENDCHAR +STARTCHAR uni7756 +ENCODING 30550 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F3F8 +9040 +9040 +F7FC +9110 +9288 +F484 +91F0 +9310 +94A0 +F040 +90A0 +0310 +0C0C +ENDCHAR +STARTCHAR uni7757 +ENCODING 30551 +BBX 13 15 1 -2 +BITMAP +03F0 +F210 +9210 +93F0 +F210 +9210 +93F0 +F100 +93F8 +94A8 +9928 +F248 +9488 +0128 +0210 +ENDCHAR +STARTCHAR uni7758 +ENCODING 30552 +BBX 14 14 1 -1 +BITMAP +3FF0 +2490 +3FF0 +0000 +FFFC +0000 +3FF0 +2010 +3FF0 +0D08 +3890 +C860 +0F30 +380C +ENDCHAR +STARTCHAR uni7759 +ENCODING 30553 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7F8 +9408 +9408 +F7F8 +9400 +9450 +F448 +97FC +9440 +94A0 +F4A0 +9910 +0A08 +1404 +ENDCHAR +STARTCHAR uni775A +ENCODING 30554 +BBX 15 14 1 -1 +BITMAP +F7FE +9420 +9420 +95FC +F420 +9420 +97FE +9420 +F420 +95FC +9420 +9420 +F820 +03FE +ENDCHAR +STARTCHAR uni775B +ENCODING 30555 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +97FC +9040 +93F8 +F040 +9FFE +9000 +93F8 +F248 +9248 +93F8 +9208 +F208 +0238 +ENDCHAR +STARTCHAR uni775C +ENCODING 30556 +BBX 15 15 1 -1 +BITMAP +003C +F7C8 +9244 +9424 +97FC +F044 +9044 +9FFE +9044 +F044 +97FC +9040 +9040 +F040 +01C0 +ENDCHAR +STARTCHAR uni775D +ENCODING 30557 +BBX 14 16 0 -2 +BITMAP +0C80 +70FC +1124 +FE24 +3844 +54A8 +9110 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni775E +ENCODING 30558 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F040 +97FC +9040 +F248 +9248 +9248 +F554 +90E0 +9150 +9150 +F248 +9444 +0840 +0040 +ENDCHAR +STARTCHAR uni775F +ENCODING 30559 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +97FC +9000 +9110 +F110 +92A8 +94A4 +9000 +F040 +9FFE +9040 +9040 +F040 +0040 +ENDCHAR +STARTCHAR uni7760 +ENCODING 30560 +BBX 15 15 1 -1 +BITMAP +0248 +F248 +9444 +97FC +90A0 +F0A0 +9FFE +9110 +9208 +F7F4 +9A12 +9270 +9200 +F204 +01FC +ENDCHAR +STARTCHAR uni7761 +ENCODING 30561 +BBX 15 15 1 -1 +BITMAP +0038 +F7C0 +9040 +97FC +9248 +F248 +9248 +9FFE +9248 +F248 +9248 +97FC +9040 +F040 +0FFE +ENDCHAR +STARTCHAR uni7762 +ENCODING 30562 +BBX 15 15 1 -1 +BITMAP +0108 +F108 +9110 +93FE +9220 +F620 +9BFC +9220 +9220 +F220 +93FC +9220 +9220 +F220 +03FE +ENDCHAR +STARTCHAR uni7763 +ENCODING 30563 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +1E44 +1048 +FF28 +5430 +5248 +B086 +3FF0 +2010 +3FF0 +2010 +3FF0 +2010 +3FF0 +ENDCHAR +STARTCHAR uni7764 +ENCODING 30564 +BBX 14 15 1 -2 +BITMAP +03F8 +F248 +9248 +93F8 +F248 +9248 +93F8 +F000 +9000 +97FC +9110 +F110 +9110 +0210 +0410 +ENDCHAR +STARTCHAR uni7765 +ENCODING 30565 +BBX 15 15 1 -1 +BITMAP +0040 +F080 +97FC +9444 +9444 +F7FC +9444 +9484 +97FC +F120 +9220 +9FFE +9020 +F020 +0020 +ENDCHAR +STARTCHAR uni7766 +ENCODING 30566 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +97FC +9040 +9040 +FFFE +9110 +9210 +9C5E +F040 +97FC +9040 +9040 +F040 +0FFE +ENDCHAR +STARTCHAR uni7767 +ENCODING 30567 +BBX 14 16 1 -2 +BITMAP +0038 +07C0 +F440 +97FC +9440 +F524 +9614 +940C +F3F8 +9208 +9208 +93F8 +F208 +9208 +03F8 +0208 +ENDCHAR +STARTCHAR uni7768 +ENCODING 30568 +BBX 15 15 1 -1 +BITMAP +0180 +F63C +9404 +9404 +97BC +F404 +9404 +97FC +9120 +F120 +9120 +9220 +9222 +F422 +081E +ENDCHAR +STARTCHAR uni7769 +ENCODING 30569 +BBX 14 15 1 -2 +BITMAP +03F0 +F010 +9010 +93F0 +F010 +9010 +97FC +F040 +9444 +92E8 +9150 +F248 +9444 +0140 +0080 +ENDCHAR +STARTCHAR uni776A +ENCODING 30570 +BBX 13 14 2 -1 +BITMAP +FFF8 +8888 +FFF8 +0200 +7FF0 +0200 +FFF8 +2020 +1040 +FFF8 +0200 +7FF0 +0200 +0200 +ENDCHAR +STARTCHAR uni776B +ENCODING 30571 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +9FFE +9040 +93F8 +F048 +9FFE +9048 +93F8 +F040 +9240 +927C +9540 +F4C0 +083E +ENDCHAR +STARTCHAR uni776C +ENCODING 30572 +BBX 14 16 1 -2 +BITMAP +0010 +0078 +F780 +9088 +9448 +F250 +9200 +9040 +F7FC +90E0 +9150 +9150 +F248 +9444 +0840 +0040 +ENDCHAR +STARTCHAR uni776D +ENCODING 30573 +BBX 13 15 1 -2 +BITMAP +03F8 +F248 +9248 +92E8 +F248 +93F8 +9208 +F2E8 +92A8 +92A8 +92E8 +F208 +9408 +0428 +0810 +ENDCHAR +STARTCHAR uni776E +ENCODING 30574 +BBX 14 16 1 -2 +BITMAP +0080 +0140 +F220 +9410 +9BEC +F000 +9788 +94A8 +F4A8 +97A8 +94A8 +94A8 +F7A8 +9488 +04A8 +0590 +ENDCHAR +STARTCHAR uni776F +ENCODING 30575 +BBX 14 16 1 -2 +BITMAP +0040 +FC40 +84FC +FD48 +9048 +FE50 +9020 +CA50 +868C +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +ENDCHAR +STARTCHAR uni7770 +ENCODING 30576 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9150 +F040 +97FC +9080 +F100 +91F8 +9308 +9508 +F108 +9108 +01F8 +0108 +ENDCHAR +STARTCHAR uni7771 +ENCODING 30577 +BBX 14 15 1 -2 +BITMAP +07BC +F484 +9484 +9484 +F7BC +9400 +947C +F7A4 +9424 +9428 +97A8 +F410 +9428 +0448 +0484 +ENDCHAR +STARTCHAR uni7772 +ENCODING 30578 +BBX 15 14 1 -1 +BITMAP +F3F8 +9208 +93F8 +9208 +F208 +93F8 +9240 +93FC +F440 +9840 +93F8 +9040 +F040 +0FFE +ENDCHAR +STARTCHAR uni7773 +ENCODING 30579 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +90A0 +9110 +F64C +93F8 +9040 +F040 +97FC +9000 +9040 +F3F8 +9040 +0040 +07FC +ENDCHAR +STARTCHAR uni7774 +ENCODING 30580 +BBX 14 15 1 -2 +BITMAP +07FC +F444 +9040 +97FC +F040 +93F8 +9248 +F3F8 +9248 +93F8 +9040 +F7FC +9040 +0040 +0040 +ENDCHAR +STARTCHAR uni7775 +ENCODING 30581 +BBX 14 16 1 -2 +BITMAP +0250 +0248 +F748 +9240 +9240 +FFFC +9040 +9048 +F748 +9550 +9550 +9520 +F724 +9054 +008C +0104 +ENDCHAR +STARTCHAR uni7776 +ENCODING 30582 +BBX 14 16 1 -2 +BITMAP +0080 +0080 +F7F8 +9080 +93F0 +F100 +97F8 +9220 +F410 +9BEC +9220 +9220 +F3E0 +9220 +0220 +03E0 +ENDCHAR +STARTCHAR uni7777 +ENCODING 30583 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +F0FC +9E24 +93FE +F224 +94FC +9420 +FEFC +9220 +9220 +9BFE +F420 +9620 +09FE +1000 +ENDCHAR +STARTCHAR uni7778 +ENCODING 30584 +BBX 13 15 1 -2 +BITMAP +07F8 +F448 +9448 +97F8 +F400 +95F8 +9508 +F508 +95F8 +9508 +95F8 +F508 +9508 +09F8 +1108 +ENDCHAR +STARTCHAR uni7779 +ENCODING 30585 +BBX 15 15 1 -1 +BITMAP +0080 +F084 +9084 +93F8 +9088 +F090 +9FFE +9050 +91F8 +F708 +9108 +91F8 +9108 +F108 +01F8 +ENDCHAR +STARTCHAR uni777A +ENCODING 30586 +BBX 15 15 1 -1 +BITMAP +0200 +F2F8 +9208 +9208 +95FE +F400 +9C80 +94FC +9510 +F410 +95FE +9410 +9428 +F444 +0582 +ENDCHAR +STARTCHAR uni777B +ENCODING 30587 +BBX 14 15 1 -1 +BITMAP +0080 +0040 +F7FC +9404 +9808 +F3F8 +9000 +93F8 +F208 +93F8 +9208 +93F8 +F208 +9000 +07FC +ENDCHAR +STARTCHAR uni777C +ENCODING 30588 +BBX 15 14 1 -1 +BITMAP +F3F8 +9208 +93F8 +9208 +F208 +93F8 +9000 +9FFE +F040 +9240 +927C +9340 +F4C0 +087E +ENDCHAR +STARTCHAR uni777D +ENCODING 30589 +BBX 15 15 1 -1 +BITMAP +0004 +F7E8 +98A2 +94A4 +9318 +F208 +9C06 +93F8 +9040 +F040 +9FFE +90A0 +9110 +F208 +0C06 +ENDCHAR +STARTCHAR uni777E +ENCODING 30590 +BBX 15 15 1 -1 +BITMAP +0200 +3FF8 +2448 +3FF8 +0100 +1FF0 +0100 +FFFE +0820 +0440 +3FF8 +0100 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni777F +ENCODING 30591 +BBX 15 15 1 -1 +BITMAP +0100 +01F8 +0100 +7FFC +4004 +17D0 +610C +06C0 +3FF8 +D016 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7780 +ENCODING 30592 +BBX 15 15 1 -1 +BITMAP +0040 +7E40 +047E +2844 +FFC4 +1A28 +2810 +C868 +1FF6 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7781 +ENCODING 30593 +BBX 14 15 1 -2 +BITMAP +07F8 +F408 +97F8 +9408 +F7F8 +9408 +97F8 +F0A0 +9090 +9FFC +9080 +F140 +9220 +0410 +180C +ENDCHAR +STARTCHAR uni7782 +ENCODING 30594 +BBX 15 16 0 -2 +BITMAP +0228 +0724 +3C24 +2420 +24FE +3F20 +2420 +2F3C +2934 +2F54 +2954 +2F54 +2988 +4988 +4F14 +8922 +ENDCHAR +STARTCHAR uni7783 +ENCODING 30595 +BBX 14 16 1 -2 +BITMAP +0010 +0038 +F3E0 +9220 +9220 +F3FC +9220 +92F8 +F288 +92F8 +9288 +92F8 +F288 +9488 +04F8 +0888 +ENDCHAR +STARTCHAR uni7784 +ENCODING 30596 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9110 +F000 +93F8 +9248 +F248 +9248 +93F8 +9248 +F248 +9248 +03F8 +0208 +ENDCHAR +STARTCHAR uni7785 +ENCODING 30597 +BBX 15 16 0 -2 +BITMAP +0088 +01C8 +F708 +9108 +912A +F12A +97AC +9148 +F308 +9388 +9554 +9514 +F914 +9124 +0124 +0142 +ENDCHAR +STARTCHAR uni7786 +ENCODING 30598 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F3F8 +9248 +93F8 +F040 +9FFC +9000 +F3F8 +9208 +9248 +9248 +F248 +90A0 +0110 +0608 +ENDCHAR +STARTCHAR uni7787 +ENCODING 30599 +BBX 14 15 1 -1 +BITMAP +0020 +0124 +F4A4 +92A8 +9220 +F0FC +9020 +9670 +F2A8 +9324 +9220 +9220 +F220 +9500 +08FC +ENDCHAR +STARTCHAR uni7788 +ENCODING 30600 +BBX 14 16 1 -2 +BITMAP +0120 +0110 +F208 +9484 +9910 +F3F8 +9008 +9000 +F7BC +9084 +94A4 +9294 +F4A4 +9084 +0294 +0108 +ENDCHAR +STARTCHAR uni7789 +ENCODING 30601 +BBX 15 16 0 -2 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FE86 +8200 +7CFC +0044 +7C44 +4428 +7C28 +4410 +7C28 +4444 +7D82 +ENDCHAR +STARTCHAR uni778A +ENCODING 30602 +BBX 14 16 1 -2 +BITMAP +0040 +0020 +F7FC +9440 +95F8 +F448 +97FC +9448 +F5F8 +9440 +95F8 +9508 +F508 +9908 +09F8 +1108 +ENDCHAR +STARTCHAR uni778B +ENCODING 30603 +BBX 15 15 1 -1 +BITMAP +0238 +F3C0 +9208 +91F8 +9000 +F1F8 +9508 +95F8 +9508 +F5F8 +9508 +97FE +9080 +F110 +060C +ENDCHAR +STARTCHAR uni778C +ENCODING 30604 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +F3F8 +9040 +9040 +F7FC +9100 +9208 +F7FC +9004 +97F8 +9528 +F528 +9528 +0FFC +ENDCHAR +STARTCHAR uni778D +ENCODING 30605 +BBX 15 16 0 -2 +BITMAP +0140 +065C +F444 +9444 +975C +F444 +9444 +97FC +F040 +97FC +9208 +9110 +F0A0 +9040 +01B0 +0E0E +ENDCHAR +STARTCHAR uni778E +ENCODING 30606 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +97FC +9404 +9444 +F3F8 +9040 +93F8 +9040 +FFFE +9000 +93F8 +9208 +F208 +03F8 +ENDCHAR +STARTCHAR uni778F +ENCODING 30607 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +7FFC +0100 +1FF0 +0100 +7FFC +0000 +1FF0 +1010 +1FF0 +0488 +0850 +3820 +CB18 +0C06 +ENDCHAR +STARTCHAR uni7790 +ENCODING 30608 +BBX 14 16 1 -2 +BITMAP +3FF0 +2010 +3FF0 +2010 +3FF0 +2010 +3FF0 +0000 +FCFC +8484 +FCFC +8484 +FCFC +8484 +FCFC +8484 +ENDCHAR +STARTCHAR uni7791 +ENCODING 30609 +BBX 15 14 1 -1 +BITMAP +F7FE +9402 +95FA +9108 +F1F8 +9108 +9108 +91F8 +F040 +97FE +9000 +9080 +F318 +0C06 +ENDCHAR +STARTCHAR uni7792 +ENCODING 30610 +BBX 15 16 0 -2 +BITMAP +0108 +0108 +F7FE +9108 +9000 +F7FE +9090 +9090 +F7FE +9492 +9492 +956A +F646 +9402 +040A +0404 +ENDCHAR +STARTCHAR uni7793 +ENCODING 30611 +BBX 14 16 1 -2 +BITMAP +0404 +0244 +F054 +9FD4 +9054 +F754 +9054 +9754 +F054 +9754 +9554 +9554 +F754 +9554 +0084 +0104 +ENDCHAR +STARTCHAR uni7794 +ENCODING 30612 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +97FC +9040 +93F8 +F040 +9FFE +9208 +93F8 +F208 +93F8 +9208 +93F8 +F110 +060C +ENDCHAR +STARTCHAR uni7795 +ENCODING 30613 +BBX 14 16 1 -2 +BITMAP +0040 +03F8 +F110 +90A0 +97FC +F000 +93F8 +9208 +F3F8 +9208 +93F8 +9040 +F7FC +9040 +0040 +0040 +ENDCHAR +STARTCHAR uni7796 +ENCODING 30614 +BBX 13 16 1 -2 +BITMAP +FEF0 +9090 +BE98 +C900 +BEF0 +9490 +A260 +FE98 +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +ENDCHAR +STARTCHAR uni7797 +ENCODING 30615 +BBX 14 16 1 -2 +BITMAP +0080 +0100 +F3F8 +9208 +93F8 +F208 +93F8 +9200 +F3FC +9200 +93FC +9004 +F554 +9554 +0404 +0018 +ENDCHAR +STARTCHAR uni7798 +ENCODING 30616 +BBX 14 14 1 -1 +BITMAP +07FC +F400 +94F8 +9488 +F488 +94F8 +9400 +F5DC +9554 +9554 +9554 +F5DC +9400 +07FC +ENDCHAR +STARTCHAR uni7799 +ENCODING 30617 +BBX 14 16 1 -2 +BITMAP +0110 +0110 +F7FC +9110 +9000 +F3F8 +9208 +93F8 +F208 +93F8 +9040 +97FC +F0A0 +9110 +0208 +0404 +ENDCHAR +STARTCHAR uni779A +ENCODING 30618 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +97FE +9402 +95FA +F040 +93FC +9244 +9244 +F3FC +9244 +9244 +93FC +F108 +0606 +ENDCHAR +STARTCHAR uni779B +ENCODING 30619 +BBX 15 16 0 -2 +BITMAP +0124 +0124 +F224 +9424 +9954 +F14A +9292 +9610 +FA10 +9250 +925C +9250 +F250 +92B0 +029E +0300 +ENDCHAR +STARTCHAR uni779C +ENCODING 30620 +BBX 14 16 1 -2 +BITMAP +0040 +03F8 +F248 +97FC +9248 +F3F8 +9040 +93F8 +F248 +93F8 +9080 +97FC +F110 +93A0 +00E0 +0718 +ENDCHAR +STARTCHAR uni779D +ENCODING 30621 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9000 +92A8 +F248 +92A8 +93F8 +F040 +97FC +9484 +9524 +F5F4 +9414 +0404 +040C +ENDCHAR +STARTCHAR uni779E +ENCODING 30622 +BBX 15 15 1 -1 +BITMAP +0110 +F110 +9FFE +9110 +9110 +F1F0 +9040 +97FC +9444 +F774 +9554 +9554 +96EC +F444 +044C +ENDCHAR +STARTCHAR uni779F +ENCODING 30623 +BBX 15 14 1 -1 +BITMAP +F7FE +9090 +97FE +9492 +F492 +97FE +9000 +93FC +F000 +97FE +9020 +9128 +F626 +00E0 +ENDCHAR +STARTCHAR uni77A0 +ENCODING 30624 +BBX 15 15 1 -1 +BITMAP +0444 +F444 +9248 +97FC +9404 +F5F4 +9110 +9110 +91F0 +F040 +9040 +93F8 +9040 +F040 +0FFE +ENDCHAR +STARTCHAR uni77A1 +ENCODING 30625 +BBX 15 16 0 -2 +BITMAP +0200 +027C +F244 +9744 +927C +F244 +9244 +977C +F244 +9244 +927C +9228 +F528 +954A +084A +1086 +ENDCHAR +STARTCHAR uni77A2 +ENCODING 30626 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +3FF0 +2490 +3FF0 +0000 +FFFC +9014 +9FF4 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni77A3 +ENCODING 30627 +BBX 14 15 1 -1 +BITMAP +0040 +0040 +F3F8 +9248 +93F8 +F040 +97FC +9444 +F7FC +9040 +9080 +9048 +F544 +9514 +08F0 +ENDCHAR +STARTCHAR uni77A4 +ENCODING 30628 +BBX 15 14 1 -1 +BITMAP +F7BE +94A2 +97BE +94A2 +F7BE +9402 +95F2 +9442 +F442 +95F2 +9442 +9442 +F5FA +0406 +ENDCHAR +STARTCHAR uni77A5 +ENCODING 30629 +BBX 15 15 1 -1 +BITMAP +5440 +9240 +107E +FE88 +9388 +BA50 +D620 +9258 +9686 +0000 +3FF0 +2010 +3FF0 +2010 +3FF0 +ENDCHAR +STARTCHAR uni77A6 +ENCODING 30630 +BBX 14 16 1 -2 +BITMAP +0040 +07FC +F040 +93F8 +9000 +F3F8 +9208 +93F8 +F110 +97FC +9000 +93F8 +F208 +9208 +03F8 +0208 +ENDCHAR +STARTCHAR uni77A7 +ENCODING 30631 +BBX 14 16 1 -2 +BITMAP +0140 +0120 +F3FC +9220 +9620 +FBFC +9220 +9220 +F3FC +9220 +9220 +93FC +F200 +9548 +04A4 +08A4 +ENDCHAR +STARTCHAR uni77A8 +ENCODING 30632 +BBX 15 16 0 -2 +BITMAP +00A0 +04A4 +F2A8 +90A0 +97FC +F110 +90A0 +97FC +F040 +93F8 +9040 +97FC +F0A0 +9110 +0208 +0C06 +ENDCHAR +STARTCHAR uni77A9 +ENCODING 30633 +BBX 15 14 1 -1 +BITMAP +F7FE +9402 +97FE +9400 +F5FC +9420 +95FC +9524 +F5FC +9420 +9BFE +9A2A +F23A +02C6 +ENDCHAR +STARTCHAR uni77AA +ENCODING 30634 +BBX 15 15 1 -1 +BITMAP +03D0 +F462 +9294 +9308 +9CF6 +F000 +93F8 +9208 +9208 +F3F8 +9000 +9208 +9108 +F110 +0FFE +ENDCHAR +STARTCHAR uni77AB +ENCODING 30635 +BBX 14 15 1 -2 +BITMAP +07FC +F0A0 +97FC +94A4 +F7FC +9000 +93F8 +F208 +93F8 +9208 +93F8 +F040 +97FC +0040 +0040 +ENDCHAR +STARTCHAR uni77AC +ENCODING 30636 +BBX 15 15 1 -1 +BITMAP +001E +F7E4 +9244 +9128 +97FE +F402 +9502 +91C4 +927E +F254 +9554 +9094 +90BE +F104 +0604 +ENDCHAR +STARTCHAR uni77AD +ENCODING 30637 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFE +90A0 +9514 +F208 +97FC +9A0A +F3F8 +9208 +93F8 +9040 +F248 +0C46 +01C0 +ENDCHAR +STARTCHAR uni77AE +ENCODING 30638 +BBX 15 16 0 -2 +BITMAP +0208 +0108 +F7C8 +9210 +949E +FFD4 +9064 +9794 +F494 +9794 +9494 +9788 +F488 +9494 +04A4 +05C2 +ENDCHAR +STARTCHAR uni77AF +ENCODING 30639 +BBX 14 16 1 -2 +BITMAP +07BC +F4A4 +97BC +94A4 +97BC +F404 +95E4 +9524 +F5E4 +9524 +95E4 +9524 +F524 +9664 +0404 +040C +ENDCHAR +STARTCHAR uni77B0 +ENCODING 30640 +BBX 15 15 1 -1 +BITMAP +0010 +F790 +9210 +921E +9FE4 +F4A4 +97A4 +94A4 +94A8 +F798 +9490 +9490 +97A8 +FCA4 +00C2 +ENDCHAR +STARTCHAR uni77B1 +ENCODING 30641 +BBX 14 16 1 -2 +BITMAP +0110 +07FC +F110 +9000 +93F8 +F150 +9150 +97FC +F150 +9150 +93F8 +9040 +F7FC +9040 +0040 +0040 +ENDCHAR +STARTCHAR uni77B2 +ENCODING 30642 +BBX 14 15 1 -2 +BITMAP +07F8 +F090 +9060 +97FC +F0A4 +9128 +96A0 +F040 +97FC +94A4 +9514 +F6EC +94A4 +04E4 +040C +ENDCHAR +STARTCHAR uni77B3 +ENCODING 30643 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +97FC +9110 +9FFE +F000 +93F8 +9248 +93F8 +F248 +93F8 +9040 +97FC +F040 +0FFE +ENDCHAR +STARTCHAR uni77B4 +ENCODING 30644 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +F3FC +96A8 +9AA8 +F2A8 +97FC +92A8 +F2A8 +92A8 +9FFC +9000 +F2A8 +9254 +0454 +ENDCHAR +STARTCHAR uni77B5 +ENCODING 30645 +BBX 15 16 0 -2 +BITMAP +0040 +0248 +F150 +97FC +9150 +F248 +9444 +9208 +F208 +93BE +9488 +9AA8 +F13E +9208 +0408 +0808 +ENDCHAR +STARTCHAR uni77B6 +ENCODING 30646 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +93F8 +9248 +93F8 +F040 +9FFE +9208 +93F8 +F208 +93F8 +9208 +93F8 +F110 +060C +ENDCHAR +STARTCHAR uni77B7 +ENCODING 30647 +BBX 14 15 1 -2 +BITMAP +F7BC +94A4 +97BC +94A4 +F7BC +9404 +95F4 +F514 +95F4 +9514 +95F4 +F514 +9404 +0414 +0408 +ENDCHAR +STARTCHAR uni77B8 +ENCODING 30648 +BBX 14 16 1 -2 +BITMAP +0110 +07FC +F110 +9000 +9290 +F7FC +9290 +92F0 +F200 +93F8 +9040 +97FC +F0E0 +9150 +064C +0040 +ENDCHAR +STARTCHAR uni77B9 +ENCODING 30649 +BBX 15 15 1 -1 +BITMAP +001C +F7E8 +9488 +9250 +9FFE +F882 +9554 +99F2 +9200 +F3F8 +9408 +9B10 +90E0 +F318 +0C06 +ENDCHAR +STARTCHAR uni77BA +ENCODING 30650 +BBX 15 16 0 -2 +BITMAP +0040 +00A0 +F318 +9DF6 +9000 +F7FC +9554 +94E4 +F7FC +9000 +93F8 +9208 +F3F8 +9208 +03F8 +0208 +ENDCHAR +STARTCHAR uni77BB +ENCODING 30651 +BBX 15 15 1 -1 +BITMAP +0080 +F1F0 +9220 +9FFE +9488 +F70E +94F8 +9400 +97FE +F400 +94F8 +9400 +95FC +F904 +01FC +ENDCHAR +STARTCHAR uni77BC +ENCODING 30652 +BBX 15 15 1 -1 +BITMAP +0040 +F0A0 +9110 +9208 +9DF6 +F000 +97BC +94A4 +94A4 +F7BC +9000 +9208 +9208 +F514 +08A2 +ENDCHAR +STARTCHAR uni77BD +ENCODING 30653 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +FEFE +1010 +FEFC +4444 +7C28 +2838 +3FF6 +E010 +3FF0 +2010 +3FF0 +2010 +3FF0 +ENDCHAR +STARTCHAR uni77BE +ENCODING 30654 +BBX 13 15 1 -2 +BITMAP +7DF0 +4510 +7DF0 +4510 +7DF0 +4510 +7DF0 +0200 +FFF8 +9048 +2020 +5FD0 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni77BF +ENCODING 30655 +BBX 15 15 1 -1 +BITMAP +3EF8 +2288 +3EF8 +2288 +3EF8 +2288 +3EF8 +0840 +1FFC +3080 +DFF8 +1080 +1FF8 +1080 +1FFE +ENDCHAR +STARTCHAR uni77C0 +ENCODING 30656 +BBX 15 16 0 -2 +BITMAP +0288 +02A8 +F6A8 +9BF0 +901E +F224 +95D4 +9C14 +F414 +95D4 +9554 +9548 +F568 +9554 +0614 +0422 +ENDCHAR +STARTCHAR uni77C1 +ENCODING 30657 +BBX 15 16 0 -2 +BITMAP +00C8 +0708 +F12A +912C +9FC8 +F108 +9388 +9554 +F914 +9122 +9040 +9024 +F522 +950A +0908 +00F8 +ENDCHAR +STARTCHAR uni77C2 +ENCODING 30658 +BBX 14 16 1 -2 +BITMAP +03F8 +0208 +F208 +93F8 +9000 +F7BC +94A4 +94A4 +F7BC +9040 +97FC +90E0 +F150 +9248 +0C44 +0040 +ENDCHAR +STARTCHAR uni77C3 +ENCODING 30659 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9444 +92A8 +F294 +9474 +9000 +F3F8 +92A8 +97FC +9000 +F3F8 +9040 +0140 +0080 +ENDCHAR +STARTCHAR uni77C4 +ENCODING 30660 +BBX 14 16 1 -2 +BITMAP +0038 +03C0 +F040 +97FC +9040 +F3F8 +9358 +92E8 +F3F8 +9040 +93F8 +9040 +F7FC +9000 +02A8 +0454 +ENDCHAR +STARTCHAR uni77C5 +ENCODING 30661 +BBX 14 15 1 -2 +BITMAP +07BC +F084 +94A4 +9294 +F4A4 +9120 +9210 +F7FC +9A20 +93FC +9220 +F3FC +9220 +03FC +0200 +ENDCHAR +STARTCHAR uni77C6 +ENCODING 30662 +BBX 14 16 1 -2 +BITMAP +0110 +07FC +F150 +9120 +93FC +F640 +93F8 +9240 +F3F8 +9240 +93FC +9200 +F7F8 +9110 +00E0 +071C +ENDCHAR +STARTCHAR uni77C7 +ENCODING 30663 +BBX 15 15 1 -1 +BITMAP +0090 +F7FE +9090 +97FE +9402 +F5FA +9000 +97FE +9080 +F746 +90A8 +9720 +90F8 +F726 +00E0 +ENDCHAR +STARTCHAR uni77C8 +ENCODING 30664 +BBX 14 16 1 -2 +BITMAP +0080 +03F8 +F208 +93F8 +9208 +F3F8 +9040 +97FC +F514 +9248 +97FC +9100 +F1F8 +9108 +0228 +0410 +ENDCHAR +STARTCHAR uni77C9 +ENCODING 30665 +BBX 14 16 1 -2 +BITMAP +0080 +0040 +F7FC +9404 +93F8 +F290 +94A0 +93F8 +F608 +93F8 +9208 +93F8 +F208 +93F8 +0110 +0208 +ENDCHAR +STARTCHAR uni77CA +ENCODING 30666 +BBX 15 16 0 -2 +BITMAP +0108 +0110 +F23E +9222 +94BE +F722 +913E +9208 +F4BE +97AA +902A +90AA +F56A +952E +0408 +0008 +ENDCHAR +STARTCHAR uni77CB +ENCODING 30667 +BBX 14 15 1 -2 +BITMAP +07FC +F490 +97FC +9490 +F5F8 +9548 +95F8 +F548 +95F8 +9440 +97FC +F654 +9AF4 +0A14 +120C +ENDCHAR +STARTCHAR uni77CC +ENCODING 30668 +BBX 14 16 1 -2 +BITMAP +0040 +0020 +F7FC +9488 +95FC +F488 +97FC +9420 +F5FC +9524 +95FC +9524 +F5FC +9400 +0488 +0904 +ENDCHAR +STARTCHAR uni77CD +ENCODING 30669 +BBX 14 14 1 -1 +BITMAP +7CF8 +4488 +7CF8 +4488 +7FFC +2100 +3FF8 +E100 +3FF8 +2100 +FFFC +1860 +0780 +F87C +ENDCHAR +STARTCHAR uni77CE +ENCODING 30670 +BBX 14 16 1 -2 +BITMAP +0200 +03F0 +F410 +9FFC +94C4 +F524 +93F8 +9208 +F3F8 +9208 +93F8 +9100 +F3F0 +9510 +00E0 +071C +ENDCHAR +STARTCHAR uni77CF +ENCODING 30671 +BBX 14 16 1 -2 +BITMAP +0080 +03F8 +F248 +9328 +9298 +F248 +93F8 +9040 +F7FC +9514 +9248 +97FC +F100 +91F8 +0208 +0418 +ENDCHAR +STARTCHAR uni77D0 +ENCODING 30672 +BBX 14 16 1 -2 +BITMAP +03F8 +F040 +97FC +9444 +9B58 +F040 +9358 +9120 +F3FC +9640 +9BF8 +9240 +F3F8 +9240 +03FC +0200 +ENDCHAR +STARTCHAR uni77D1 +ENCODING 30673 +BBX 14 16 1 -2 +BITMAP +0080 +00F8 +F080 +97F8 +9488 +F7E0 +9488 +95F8 +F550 +95F0 +9550 +95F0 +F400 +9BF8 +0AA8 +17FC +ENDCHAR +STARTCHAR uni77D2 +ENCODING 30674 +BBX 14 16 1 -2 +BITMAP +0210 +0FFC +F210 +97F8 +9528 +F7F8 +9000 +9FFC +F804 +93F0 +9210 +93F0 +F210 +93F0 +0210 +03F0 +ENDCHAR +STARTCHAR uni77D3 +ENCODING 30675 +BBX 14 16 1 -2 +BITMAP +0220 +F120 +97BC +9020 +94BC +F304 +97BC +9020 +F7BC +94A0 +97BC +94A0 +F7BC +94A0 +04A4 +059C +ENDCHAR +STARTCHAR uni77D4 +ENCODING 30676 +BBX 14 16 1 -2 +BITMAP +0110 +F7FC +9110 +97BC +94A4 +F7BC +9140 +9120 +F3FC +9240 +97F8 +9A40 +F3F8 +9240 +03FC +0200 +ENDCHAR +STARTCHAR uni77D5 +ENCODING 30677 +BBX 15 16 0 -2 +BITMAP +2108 +4FD2 +F03C +2388 +4812 +FBBE +0280 +ABAA +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni77D6 +ENCODING 30678 +BBX 14 16 1 -2 +BITMAP +07BC +F000 +97BC +94A4 +96B4 +F4A4 +9040 +97FC +F4A0 +97FC +94A4 +97FC +F524 +95B8 +0524 +099C +ENDCHAR +STARTCHAR uni77D7 +ENCODING 30679 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +4FE0 +4820 +7FFC +0810 +7EFE +0810 +BD7C +A544 +BD7C +A544 +FFFE +ENDCHAR +STARTCHAR uni77D8 +ENCODING 30680 +BBX 15 16 0 -2 +BITMAP +0248 +0150 +F7FC +9404 +91F0 +F110 +97FC +9554 +F4E4 +97FC +9040 +97FC +F040 +9FFE +02A4 +0452 +ENDCHAR +STARTCHAR uni77D9 +ENCODING 30681 +BBX 15 16 0 -2 +BITMAP +0FBE +08A2 +EFBE +A8A2 +AFBE +E802 +AB92 +A892 +EFDE +AAAA +ABCA +AAAA +EB92 +AAD2 +0FAA +08C4 +ENDCHAR +STARTCHAR uni77DA +ENCODING 30682 +BBX 15 15 1 -1 +BITMAP +0FFC +E804 +AFFC +A840 +AB58 +E840 +ABFC +AA94 +ABFE +E942 +AFFA +AA4A +ABFA +F052 +07EC +ENDCHAR +STARTCHAR uni77DB +ENCODING 30683 +BBX 15 14 1 -1 +BITMAP +3FF8 +0018 +0460 +0380 +0100 +FFFE +0182 +0184 +0288 +0480 +0880 +3080 +C080 +0380 +ENDCHAR +STARTCHAR uni77DC +ENCODING 30684 +BBX 15 15 1 -1 +BITMAP +0020 +7F20 +0250 +3450 +0888 +FF88 +0974 +1A02 +1800 +28FC +2804 +4804 +8808 +0810 +3860 +ENDCHAR +STARTCHAR uni77DD +ENCODING 30685 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +0450 +2850 +1088 +0924 +FE12 +1A10 +29FC +2804 +4808 +4888 +8850 +0820 +2810 +1010 +ENDCHAR +STARTCHAR uni77DE +ENCODING 30686 +BBX 15 14 1 -1 +BITMAP +1FF0 +0660 +0180 +FFFE +0C84 +7088 +0180 +7FFC +4244 +4474 +5804 +4FE4 +4824 +4FEC +ENDCHAR +STARTCHAR uni77DF +ENCODING 30687 +BBX 14 15 1 -1 +BITMAP +0020 +FEA8 +44A8 +2924 +1020 +FFFC +1504 +3904 +31FC +5104 +5104 +91FC +1104 +1104 +311C +ENDCHAR +STARTCHAR uni77E0 +ENCODING 30688 +BBX 15 15 1 -1 +BITMAP +0088 +FC88 +07FE +2888 +3088 +1088 +FFFE +1200 +35FC +3104 +5104 +51FC +9104 +1104 +71FC +ENDCHAR +STARTCHAR uni77E1 +ENCODING 30689 +BBX 15 16 0 -2 +BITMAP +03DE +FA52 +0BDE +5252 +23DE +10A0 +FDFE +3720 +35FC +5120 +51FE +5000 +91FC +1088 +5070 +278E +ENDCHAR +STARTCHAR uni77E2 +ENCODING 30690 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +1FF8 +1100 +2100 +4100 +0100 +FFFE +0100 +0280 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni77E3 +ENCODING 30691 +BBX 15 15 1 -1 +BITMAP +0200 +0220 +0410 +08E8 +7F04 +0800 +0800 +1FF8 +2100 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni77E4 +ENCODING 30692 +BBX 15 15 1 -1 +BITMAP +0100 +F100 +1100 +13FC +1240 +7440 +4040 +4FFE +7040 +1040 +10A0 +10A0 +1110 +1208 +6C06 +ENDCHAR +STARTCHAR uni77E5 +ENCODING 30693 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +3F7E +4842 +8842 +0842 +0842 +FFC2 +0842 +0842 +1442 +1442 +2242 +417E +8000 +ENDCHAR +STARTCHAR uni77E6 +ENCODING 30694 +BBX 14 15 1 -1 +BITMAP +0200 +07F0 +0820 +3040 +FFFC +2200 +2200 +27F8 +2880 +2080 +2FFC +4080 +4140 +8630 +180C +ENDCHAR +STARTCHAR uni77E7 +ENCODING 30695 +BBX 14 15 1 -1 +BITMAP +2004 +23E4 +2024 +7C24 +51E4 +9104 +1104 +FF04 +11E4 +1024 +1024 +2824 +2424 +4424 +81C4 +ENDCHAR +STARTCHAR uni77E8 +ENCODING 30696 +BBX 15 16 0 -2 +BITMAP +2008 +203C +21E0 +7C20 +5020 +9020 +13FE +FC20 +1020 +1050 +1050 +2850 +2488 +4488 +4104 +8202 +ENDCHAR +STARTCHAR uni77E9 +ENCODING 30697 +BBX 15 15 1 -1 +BITMAP +2000 +21FE +2100 +7D00 +5100 +91FC +1104 +1104 +FF04 +11FC +1900 +2500 +2300 +4100 +81FE +ENDCHAR +STARTCHAR uni77EA +ENCODING 30698 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +3C40 +51F8 +9108 +1148 +1128 +FD08 +13FE +1108 +2948 +2548 +4648 +8208 +0438 +ENDCHAR +STARTCHAR uni77EB +ENCODING 30699 +BBX 15 16 0 -2 +BITMAP +2008 +203C +21E0 +7C20 +5020 +93FE +1050 +FC88 +1104 +128A +1088 +2888 +2488 +4508 +4108 +8208 +ENDCHAR +STARTCHAR uni77EC +ENCODING 30700 +BBX 15 15 1 -1 +BITMAP +4040 +4040 +7A48 +A248 +A248 +2554 +2D54 +F8E2 +2040 +2040 +37FC +4840 +4840 +8040 +0FFE +ENDCHAR +STARTCHAR uni77ED +ENCODING 30701 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2000 +7C00 +51FC +9104 +1104 +1104 +FDFC +1008 +2908 +2888 +4490 +4010 +83FE +ENDCHAR +STARTCHAR uni77EE +ENCODING 30702 +BBX 15 15 1 -1 +BITMAP +4000 +4030 +41C0 +7840 +A7FE +2150 +2248 +FC86 +2080 +27FC +5110 +4B10 +48A0 +80F0 +870C +ENDCHAR +STARTCHAR uni77EF +ENCODING 30703 +BBX 15 15 1 -1 +BITMAP +4018 +43E0 +4040 +7FFE +A110 +23F8 +2D16 +21F0 +F800 +27FC +3404 +2DF4 +4514 +45F4 +840C +ENDCHAR +STARTCHAR uni77F0 +ENCODING 30704 +BBX 15 15 1 -1 +BITMAP +2030 +2088 +3904 +57FE +9326 +12AA +1222 +FBFE +1000 +11FC +2904 +25FC +4504 +8104 +01FC +ENDCHAR +STARTCHAR uni77F1 +ENCODING 30705 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +20A8 +7C90 +51FE +9320 +11FC +FD20 +11FC +1120 +11FE +2900 +27FC +4488 +4070 +838E +ENDCHAR +STARTCHAR uni77F2 +ENCODING 30706 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +4252 +7A52 +A3FE +2110 +2252 +23DC +F812 +23CE +2240 +23D2 +525C +4BD0 +4A52 +82CE +ENDCHAR +STARTCHAR uni77F3 +ENCODING 30707 +BBX 14 14 1 -1 +BITMAP +FFFC +0400 +0400 +0800 +0800 +1000 +3FF8 +5008 +9008 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni77F4 +ENCODING 30708 +BBX 15 14 1 -1 +BITMAP +01FE +FC10 +2010 +2010 +2010 +7810 +4810 +4810 +4810 +C810 +4810 +7810 +0010 +0070 +ENDCHAR +STARTCHAR uni77F5 +ENCODING 30709 +BBX 14 16 0 -2 +BITMAP +0004 +0004 +FE04 +1044 +1044 +2044 +3E44 +6244 +6244 +A244 +2244 +2204 +3E04 +2204 +0014 +0008 +ENDCHAR +STARTCHAR uni77F6 +ENCODING 30710 +BBX 15 15 0 -2 +BITMAP +01F0 +F910 +2110 +2110 +4110 +7910 +C910 +4910 +4910 +4910 +4912 +7A12 +4212 +040E +0800 +ENDCHAR +STARTCHAR uni77F7 +ENCODING 30711 +BBX 15 15 0 -2 +BITMAP +01FC +FC04 +1008 +1010 +2020 +3C20 +67FE +6420 +A420 +2420 +2420 +3C20 +2420 +20A0 +0040 +ENDCHAR +STARTCHAR uni77F8 +ENCODING 30712 +BBX 15 15 0 -2 +BITMAP +01FC +FC20 +1020 +1020 +2020 +3C20 +67FE +6420 +A420 +2420 +2420 +3C20 +2420 +2020 +0020 +ENDCHAR +STARTCHAR uni77F9 +ENCODING 30713 +BBX 15 14 0 -2 +BITMAP +FDFC +1090 +1090 +2090 +3C90 +6490 +6490 +A490 +2490 +2492 +3C92 +2492 +210E +0200 +ENDCHAR +STARTCHAR uni77FA +ENCODING 30714 +BBX 15 15 0 -1 +BITMAP +0008 +003C +FDE0 +1020 +1020 +2020 +3C20 +643E +65E0 +A420 +2420 +2422 +3C22 +2422 +201E +ENDCHAR +STARTCHAR uni77FB +ENCODING 30715 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +FCFE +2100 +2200 +2000 +79FE +480C +C830 +4840 +4880 +4900 +7900 +0102 +00FE +ENDCHAR +STARTCHAR uni77FC +ENCODING 30716 +BBX 15 12 1 0 +BITMAP +F9FC +2020 +2020 +2020 +7820 +4820 +C820 +4820 +4820 +4820 +7820 +03FE +ENDCHAR +STARTCHAR uni77FD +ENCODING 30717 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FC40 +107E +1082 +2082 +3D42 +6624 +6414 +A408 +2408 +2410 +3C20 +2440 +2080 +0300 +ENDCHAR +STARTCHAR uni77FE +ENCODING 30718 +BBX 15 15 0 -2 +BITMAP +01F0 +F910 +2110 +2110 +4110 +7990 +C950 +4950 +4910 +4910 +4912 +7A12 +4212 +040E +0800 +ENDCHAR +STARTCHAR uni77FF +ENCODING 30719 +BBX 15 16 0 -2 +BITMAP +0020 +0010 +FC10 +10FE +1080 +2080 +3C80 +6480 +6480 +A480 +2480 +2480 +3C80 +2500 +2100 +0200 +ENDCHAR +STARTCHAR uni7800 +ENCODING 30720 +BBX 15 15 0 -2 +BITMAP +01F8 +FC10 +1020 +1040 +2080 +3DFE +6492 +6492 +A492 +2512 +2522 +3E22 +2442 +2094 +0108 +ENDCHAR +STARTCHAR uni7801 +ENCODING 30721 +BBX 15 15 0 -2 +BITMAP +01F8 +FC08 +1008 +1088 +2088 +3C88 +64FE +6402 +A402 +2402 +25FA +3C02 +2402 +2014 +0008 +ENDCHAR +STARTCHAR uni7802 +ENCODING 30722 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FA48 +2248 +2244 +2244 +7C42 +4C48 +C8C8 +4808 +4810 +4810 +7820 +00C0 +0300 +ENDCHAR +STARTCHAR uni7803 +ENCODING 30723 +BBX 15 15 0 -2 +BITMAP +00FC +FC84 +1084 +10A4 +2094 +3C94 +6484 +65FE +A484 +2484 +2484 +3C84 +2504 +2114 +0208 +ENDCHAR +STARTCHAR uni7804 +ENCODING 30724 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC20 +11FC +1024 +2024 +3C24 +6424 +65FE +A420 +2450 +2450 +3C88 +2488 +2104 +0202 +ENDCHAR +STARTCHAR uni7805 +ENCODING 30725 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F840 +2044 +2744 +2168 +7968 +4950 +C950 +4A48 +4A48 +4C44 +7842 +0040 +00C0 +ENDCHAR +STARTCHAR uni7806 +ENCODING 30726 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FC20 +21FC +2020 +2020 +7820 +4BFE +C820 +4820 +4850 +4850 +7888 +0104 +0202 +ENDCHAR +STARTCHAR uni7807 +ENCODING 30727 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FC20 +13FE +1088 +2088 +3C88 +6488 +6488 +A450 +2450 +2420 +3C50 +2488 +2104 +0602 +ENDCHAR +STARTCHAR uni7808 +ENCODING 30728 +BBX 15 15 0 -2 +BITMAP +01FE +FD00 +1100 +1178 +2148 +3D48 +6548 +6548 +A568 +2550 +2542 +3D42 +2542 +223E +0400 +ENDCHAR +STARTCHAR uni7809 +ENCODING 30729 +BBX 15 15 1 -1 +BITMAP +0100 +01FC +7F00 +01F8 +3F00 +01FC +7F00 +0100 +0000 +FFFE +0400 +0FF8 +3808 +C808 +0FF8 +ENDCHAR +STARTCHAR uni780A +ENCODING 30730 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FC00 +11FC +1000 +2000 +3CF0 +6490 +6490 +A490 +2490 +2492 +3C92 +2512 +210E +0200 +ENDCHAR +STARTCHAR uni780B +ENCODING 30731 +BBX 15 15 0 -1 +BITMAP +0010 +0010 +FC10 +1090 +1090 +2090 +3C9E +6490 +6490 +A490 +2490 +2490 +3C90 +2490 +23FE +ENDCHAR +STARTCHAR uni780C +ENCODING 30732 +BBX 15 15 1 -1 +BITMAP +0200 +027E +FE12 +2212 +22D2 +2712 +7A12 +4A12 +CA12 +4A52 +4A52 +49E2 +7822 +0042 +008C +ENDCHAR +STARTCHAR uni780D +ENCODING 30733 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +F900 +21FC +2204 +2244 +7C48 +4840 +4840 +C8A0 +48A0 +4910 +7910 +0208 +0C06 +ENDCHAR +STARTCHAR uni780E +ENCODING 30734 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1050 +1088 +2104 +3E02 +6488 +6488 +A488 +2488 +2488 +3C88 +2508 +2108 +0208 +ENDCHAR +STARTCHAR uni780F +ENCODING 30735 +BBX 15 16 0 -2 +BITMAP +0010 +0050 +FC50 +1050 +1088 +2088 +3D04 +66FA +6448 +A448 +2448 +2448 +3C88 +2488 +2128 +0210 +ENDCHAR +STARTCHAR uni7810 +ENCODING 30736 +BBX 15 15 0 -2 +BITMAP +03FC +F884 +2088 +2088 +4090 +789C +C884 +4944 +4944 +4928 +4928 +7A10 +4228 +0444 +0182 +ENDCHAR +STARTCHAR uni7811 +ENCODING 30737 +BBX 15 15 0 -2 +BITMAP +03FC +F810 +2110 +2110 +4110 +7A10 +CBFE +4830 +4850 +4890 +4910 +7A10 +4410 +0050 +0020 +ENDCHAR +STARTCHAR uni7812 +ENCODING 30738 +BBX 15 15 1 -1 +BITMAP +0220 +0220 +FA20 +2220 +2224 +2228 +7BB0 +4A20 +CA20 +4A20 +4A20 +4A20 +7A22 +03A2 +0E1E +ENDCHAR +STARTCHAR uni7813 +ENCODING 30739 +BBX 15 15 0 -2 +BITMAP +00F8 +FC88 +1088 +1088 +2106 +3E00 +65FC +6484 +A484 +2448 +2450 +3C20 +2450 +2088 +0306 +ENDCHAR +STARTCHAR uni7814 +ENCODING 30740 +BBX 15 14 1 -1 +BITMAP +07FC +F910 +2110 +2110 +2110 +7910 +4FFE +C910 +4910 +4910 +4A10 +7A10 +0410 +0810 +ENDCHAR +STARTCHAR uni7815 +ENCODING 30741 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FBF0 +2050 +2090 +2092 +7912 +4A4E +C840 +4FFC +4840 +4840 +7840 +0040 +0040 +ENDCHAR +STARTCHAR uni7816 +ENCODING 30742 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC20 +11FC +1020 +2040 +3DFE +6440 +6480 +A5FC +2404 +2488 +3C50 +2420 +2010 +0010 +ENDCHAR +STARTCHAR uni7817 +ENCODING 30743 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FC40 +13FE +1080 +20A0 +3D20 +65FC +6420 +A420 +2420 +27FE +3C20 +2420 +2020 +0020 +ENDCHAR +STARTCHAR uni7818 +ENCODING 30744 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FC20 +13FE +1020 +2124 +3D24 +6524 +6524 +A5FC +2424 +2420 +3C22 +2422 +201E +ENDCHAR +STARTCHAR uni7819 +ENCODING 30745 +BBX 15 14 1 -1 +BITMAP +03FC +FD00 +2100 +2100 +21F8 +7908 +4908 +C948 +4928 +4928 +4908 +790A +01CA +0706 +ENDCHAR +STARTCHAR uni781A +ENCODING 30746 +BBX 15 15 0 -2 +BITMAP +01FC +FD04 +1104 +1124 +2124 +3D24 +6524 +6524 +A554 +2450 +2490 +3C90 +2512 +2212 +040E +ENDCHAR +STARTCHAR uni781B +ENCODING 30747 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1050 +1088 +2144 +3E22 +6420 +6400 +A5FC +2404 +2408 +3C08 +2410 +2010 +0020 +ENDCHAR +STARTCHAR uni781C +ENCODING 30748 +BBX 15 15 0 -2 +BITMAP +03F8 +FA08 +2208 +2328 +42A8 +7AA8 +CA48 +4A48 +4AA8 +4AA8 +4B2A +7C0A +440A +0806 +1002 +ENDCHAR +STARTCHAR uni781D +ENCODING 30749 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FC20 +11FC +1020 +2020 +3C20 +65FE +6420 +A420 +2440 +2448 +3C84 +25FE +2082 +ENDCHAR +STARTCHAR uni781E +ENCODING 30750 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC20 +13FE +1020 +2020 +3C20 +65FC +6470 +A4A8 +24A8 +2524 +3D24 +2622 +2020 +0020 +ENDCHAR +STARTCHAR uni781F +ENCODING 30751 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +FC80 +10FE +1140 +2140 +3E40 +647C +6440 +A440 +2440 +247E +3C40 +2440 +2040 +0040 +ENDCHAR +STARTCHAR uni7820 +ENCODING 30752 +BBX 15 14 1 -1 +BITMAP +01F8 +FD08 +2108 +2108 +21F8 +7908 +4908 +C908 +49F8 +4908 +4908 +7908 +0108 +07FE +ENDCHAR +STARTCHAR uni7821 +ENCODING 30753 +BBX 15 14 1 -1 +BITMAP +01FC +FC20 +2020 +2020 +2020 +7820 +49FC +C820 +4820 +4828 +4824 +7824 +0020 +03FE +ENDCHAR +STARTCHAR uni7822 +ENCODING 30754 +BBX 15 14 0 -2 +BITMAP +FDFE +1008 +1008 +21E8 +3D28 +6528 +6528 +A528 +25E8 +2528 +3C08 +2408 +2028 +0010 +ENDCHAR +STARTCHAR uni7823 +ENCODING 30755 +BBX 15 15 0 -1 +BITMAP +0020 +0010 +FC10 +11FE +1102 +2204 +3C80 +6488 +6490 +A4A0 +24C0 +2482 +3C82 +2482 +207E +ENDCHAR +STARTCHAR uni7824 +ENCODING 30756 +BBX 15 15 0 -1 +BITMAP +0080 +0080 +FCFE +1100 +1220 +2120 +3D2C +6574 +67A4 +A524 +2534 +2528 +3D22 +2502 +20FE +ENDCHAR +STARTCHAR uni7825 +ENCODING 30757 +BBX 15 15 1 -1 +BITMAP +0018 +03E0 +FA20 +2220 +2220 +2220 +7BFE +4A20 +CA20 +4A10 +4A10 +4B90 +7E0A +000A +07E4 +ENDCHAR +STARTCHAR uni7826 +ENCODING 30758 +BBX 15 15 1 -1 +BITMAP +0840 +484C +4F70 +4840 +4842 +4F42 +F03E +0000 +FFFE +0200 +1FF8 +3008 +D008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni7827 +ENCODING 30759 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +7E20 +103E +1020 +2020 +3C20 +6420 +A5FC +2504 +2504 +2504 +3D04 +0104 +01FC +ENDCHAR +STARTCHAR uni7828 +ENCODING 30760 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FDFC +1104 +1104 +21FC +3D00 +6500 +657C +A508 +2510 +2520 +3D42 +2682 +227E +0400 +ENDCHAR +STARTCHAR uni7829 +ENCODING 30761 +BBX 15 16 0 -2 +BITMAP +0090 +0090 +F890 +23FC +2094 +4094 +7BFC +4A90 +CA90 +4BFE +4892 +4892 +791A +4914 +0210 +0410 +ENDCHAR +STARTCHAR uni782A +ENCODING 30762 +BBX 15 15 0 -2 +BITMAP +00FC +FC84 +10A4 +1094 +2084 +3C84 +67FE +6504 +A544 +2524 +2504 +3DFE +2404 +2028 +0010 +ENDCHAR +STARTCHAR uni782B +ENCODING 30763 +BBX 15 15 0 -1 +BITMAP +0040 +0020 +FC00 +13FE +1020 +2020 +3C20 +6420 +65FC +A420 +2420 +2420 +3C20 +2420 +23FE +ENDCHAR +STARTCHAR uni782C +ENCODING 30764 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FC40 +23FC +2000 +2108 +7908 +4908 +C908 +4888 +4890 +4890 +7890 +0010 +07FE +ENDCHAR +STARTCHAR uni782D +ENCODING 30765 +BBX 15 15 1 -1 +BITMAP +001C +03E0 +FC40 +2040 +2040 +2040 +7BFC +4804 +C808 +4810 +4820 +4B40 +7C80 +0860 +081E +ENDCHAR +STARTCHAR uni782E +ENCODING 30766 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +FEFC +2244 +6428 +1810 +2428 +C2C6 +0000 +FFFE +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni782F +ENCODING 30767 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FD20 +10A0 +1032 +21B2 +3CB4 +64A8 +64A8 +A4A8 +2524 +2524 +3E22 +2420 +20A0 +0040 +ENDCHAR +STARTCHAR uni7830 +ENCODING 30768 +BBX 15 15 0 -2 +BITMAP +01FC +FC20 +1020 +1124 +20A4 +3CA8 +6420 +67FE +A420 +2420 +2420 +3C20 +2420 +2020 +0020 +ENDCHAR +STARTCHAR uni7831 +ENCODING 30769 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1050 +1088 +2124 +3E12 +6410 +65FC +A404 +2408 +2488 +3C50 +2420 +2010 +0010 +ENDCHAR +STARTCHAR uni7832 +ENCODING 30770 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +F9FC +2204 +2204 +45F4 +7814 +C814 +4814 +49F4 +4908 +4900 +7902 +0102 +00FE +ENDCHAR +STARTCHAR uni7833 +ENCODING 30771 +BBX 15 13 0 -1 +BITMAP +FEFE +1020 +1020 +2040 +3E7C +62C4 +62C4 +A344 +2244 +2244 +2244 +3E7C +2244 +ENDCHAR +STARTCHAR uni7834 +ENCODING 30772 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FBFE +2222 +2224 +2220 +7BFC +CA84 +4A84 +4A48 +4A48 +4A30 +7C30 +0448 +0186 +ENDCHAR +STARTCHAR uni7835 +ENCODING 30773 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC20 +1020 +11FE +2020 +3C70 +6470 +64A8 +A4A8 +2524 +26FA +3C20 +2420 +2020 +0020 +ENDCHAR +STARTCHAR uni7836 +ENCODING 30774 +BBX 14 16 0 -2 +BITMAP +0020 +0020 +FC40 +11FC +1104 +2104 +3D04 +6504 +65FC +A504 +2504 +2504 +3D04 +2504 +21FC +0104 +ENDCHAR +STARTCHAR uni7837 +ENCODING 30775 +BBX 14 16 0 -2 +BITMAP +0020 +0020 +FC20 +11FC +1124 +2124 +3D24 +65FC +6524 +A524 +2524 +25FC +3D24 +2420 +2020 +0020 +ENDCHAR +STARTCHAR uni7838 +ENCODING 30776 +BBX 15 14 0 -1 +BITMAP +03FE +FA10 +2210 +2210 +42FE +7A92 +4A92 +CA92 +4A92 +4A9A +4A94 +7A10 +4A10 +03FE +ENDCHAR +STARTCHAR uni7839 +ENCODING 30777 +BBX 15 16 0 -2 +BITMAP +0110 +0110 +FBFC +2110 +2110 +4000 +7A08 +CA08 +4910 +4910 +48A0 +4840 +78A0 +4110 +0208 +0C06 +ENDCHAR +STARTCHAR uni783A +ENCODING 30778 +BBX 15 14 1 -1 +BITMAP +01FE +FD00 +2100 +21FE +2120 +7920 +493E +C922 +4922 +4922 +4A22 +7A42 +0442 +008C +ENDCHAR +STARTCHAR uni783B +ENCODING 30779 +BBX 15 16 0 -2 +BITMAP +0440 +0420 +FFFC +0910 +1160 +2184 +4F04 +80FC +0000 +FFFE +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni783C +ENCODING 30780 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FC50 +1050 +1088 +2104 +3E02 +6400 +65FC +A420 +2420 +2420 +3C20 +2420 +23FE +ENDCHAR +STARTCHAR uni783D +ENCODING 30781 +BBX 14 15 0 -2 +BITMAP +01FC +FD24 +1124 +1124 +21FC +3D24 +6524 +6524 +A5FC +2524 +2524 +3D24 +2524 +2104 +020C +ENDCHAR +STARTCHAR uni783E +ENCODING 30782 +BBX 15 16 0 -2 +BITMAP +0008 +001C +FDE0 +1100 +1120 +2120 +3D20 +65FE +6420 +A420 +24A8 +24A4 +3D22 +2622 +20A0 +0040 +ENDCHAR +STARTCHAR uni783F +ENCODING 30783 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FDFE +2100 +2120 +2120 +7920 +C920 +4920 +4928 +4944 +4944 +7A46 +027A +05C2 +ENDCHAR +STARTCHAR uni7840 +ENCODING 30784 +BBX 14 16 0 -2 +BITMAP +0020 +0020 +FD24 +1124 +1124 +2124 +3DFC +6420 +6420 +A524 +2524 +2524 +3D24 +2524 +21FC +0004 +ENDCHAR +STARTCHAR uni7841 +ENCODING 30785 +BBX 15 14 0 -1 +BITMAP +01FC +FC08 +1010 +1030 +2048 +3C84 +6702 +6400 +A5FC +2420 +2420 +3C20 +2420 +23FE +ENDCHAR +STARTCHAR uni7842 +ENCODING 30786 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FC50 +1088 +1104 +2202 +3DFC +6420 +6420 +A420 +25FC +2420 +3C20 +2420 +23FE +ENDCHAR +STARTCHAR uni7843 +ENCODING 30787 +BBX 15 15 1 -1 +BITMAP +0020 +0120 +FD20 +1120 +13FC +2220 +3C20 +2420 +67FE +64A8 +A4A8 +2524 +2524 +3E22 +0020 +ENDCHAR +STARTCHAR uni7844 +ENCODING 30788 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FD24 +10A4 +10A8 +2020 +3DFE +6490 +6490 +A490 +2490 +2492 +3D12 +2512 +220E +0400 +ENDCHAR +STARTCHAR uni7845 +ENCODING 30789 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FBFC +2040 +2040 +2040 +7FFE +4800 +C840 +4840 +4BFC +4840 +7840 +0040 +07FE +ENDCHAR +STARTCHAR uni7846 +ENCODING 30790 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1050 +1088 +2104 +3EFA +6400 +6400 +A4F8 +2488 +2488 +3C88 +2488 +20F8 +0088 +ENDCHAR +STARTCHAR uni7847 +ENCODING 30791 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FC80 +2100 +23FE +2202 +7A0A +4A8A +CA52 +4A22 +4A52 +4B8A +7A02 +0202 +03FE +ENDCHAR +STARTCHAR uni7848 +ENCODING 30792 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC20 +13FE +1020 +2020 +3DFC +6400 +6400 +A5FC +2504 +2504 +3D04 +2504 +21FC +0104 +ENDCHAR +STARTCHAR uni7849 +ENCODING 30793 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FDFC +1024 +13FE +2024 +21FC +7C20 +6420 +A5FC +2420 +2420 +27FE +3C20 +2420 +0020 +ENDCHAR +STARTCHAR uni784A +ENCODING 30794 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FCFC +1104 +1208 +21FE +3D00 +657C +6544 +A544 +2554 +2548 +3D42 +2542 +213E +0200 +ENDCHAR +STARTCHAR uni784B +ENCODING 30795 +BBX 15 16 0 -2 +BITMAP +0020 +0010 +FC10 +13FE +1020 +2042 +3C84 +65F8 +6410 +A422 +24C4 +2708 +3C10 +2428 +20C4 +0302 +ENDCHAR +STARTCHAR uni784C +ENCODING 30796 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FC78 +1088 +1150 +2020 +3C50 +6488 +6506 +A4F8 +2488 +2488 +3C88 +2488 +20F8 +0088 +ENDCHAR +STARTCHAR uni784D +ENCODING 30797 +BBX 15 15 0 -2 +BITMAP +01F8 +FD08 +1108 +11F8 +2108 +3D08 +65F8 +6544 +A548 +2530 +2520 +3D10 +2548 +2186 +0100 +ENDCHAR +STARTCHAR uni784E +ENCODING 30798 +BBX 14 14 1 -1 +BITMAP +07C4 +FA84 +22A4 +22A4 +22A4 +7FE4 +4AA4 +4AA4 +CAA4 +4AA4 +4A84 +7C84 +0484 +088C +ENDCHAR +STARTCHAR uni784F +ENCODING 30799 +BBX 15 14 1 -1 +BITMAP +03DE +7C88 +1088 +1088 +2088 +3CC8 +65BE +A688 +2488 +2488 +2508 +3D08 +0208 +0408 +ENDCHAR +STARTCHAR uni7850 +ENCODING 30800 +BBX 15 15 0 -2 +BITMAP +01FE +FD02 +1102 +117A +2102 +3D02 +657A +654A +A54A +254A +257A +3D02 +2502 +210A +0104 +ENDCHAR +STARTCHAR uni7851 +ENCODING 30801 +BBX 15 15 1 -1 +BITMAP +0208 +0108 +F910 +27FC +2110 +2110 +7910 +4910 +CFFE +4910 +4910 +4A10 +7A10 +0410 +0810 +ENDCHAR +STARTCHAR uni7852 +ENCODING 30802 +BBX 15 15 0 -2 +BITMAP +03FE +FC50 +1050 +11FC +2154 +3D54 +6554 +6554 +A554 +258C +2504 +3D04 +2504 +21FC +0104 +ENDCHAR +STARTCHAR uni7853 +ENCODING 30803 +BBX 15 15 0 -1 +BITMAP +0040 +0040 +FC44 +11F4 +1048 +2050 +23FE +7C40 +6480 +A584 +2698 +24E0 +2482 +3C82 +247E +ENDCHAR +STARTCHAR uni7854 +ENCODING 30804 +BBX 15 16 0 -2 +BITMAP +0088 +0088 +FC88 +1088 +13FE +2088 +3C88 +6488 +6488 +A7FE +2400 +2488 +3C84 +2504 +2202 +0402 +ENDCHAR +STARTCHAR uni7855 +ENCODING 30805 +BBX 15 15 0 -2 +BITMAP +03FE +FC20 +1040 +11FC +2104 +3D04 +6524 +6524 +A524 +2524 +2544 +3C50 +2488 +2104 +0204 +ENDCHAR +STARTCHAR uni7856 +ENCODING 30806 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC20 +11FC +1020 +2124 +3CA4 +64A8 +6420 +A7FE +2450 +2450 +3C88 +2488 +2104 +0202 +ENDCHAR +STARTCHAR uni7857 +ENCODING 30807 +BBX 15 16 0 -2 +BITMAP +0080 +0080 +F8BC +23C0 +2050 +4024 +78D4 +4B0C +C800 +4BFE +4890 +4890 +7912 +4912 +020E +0400 +ENDCHAR +STARTCHAR uni7858 +ENCODING 30808 +BBX 14 13 0 -1 +BITMAP +FDFC +1104 +1104 +2174 +3D54 +6554 +6554 +A554 +2574 +2504 +3D04 +25FC +2104 +ENDCHAR +STARTCHAR uni7859 +ENCODING 30809 +BBX 15 15 0 -1 +BITMAP +0020 +0124 +FD24 +1124 +11FC +2000 +3DFC +6404 +6404 +A5FC +2500 +2500 +3D02 +2502 +20FE +ENDCHAR +STARTCHAR uni785A +ENCODING 30810 +BBX 15 16 0 -2 +BITMAP +0008 +003C +FDE0 +1020 +1020 +23FE +3C50 +6488 +6504 +A68A +2488 +2488 +3C88 +2508 +2108 +0208 +ENDCHAR +STARTCHAR uni785B +ENCODING 30811 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +F820 +27FE +2090 +4090 +7890 +4A94 +CA92 +4A92 +4C92 +4890 +7910 +4910 +0250 +0420 +ENDCHAR +STARTCHAR uni785C +ENCODING 30812 +BBX 15 14 0 -1 +BITMAP +01FE +FC00 +1092 +1124 +2248 +3D24 +6492 +6400 +A5FE +2420 +2420 +3C20 +2420 +23FE +ENDCHAR +STARTCHAR uni785D +ENCODING 30813 +BBX 14 15 1 -1 +BITMAP +0124 +00A4 +FCA8 +2020 +21FC +2104 +7904 +49FC +C904 +4904 +49FC +4904 +7904 +0104 +011C +ENDCHAR +STARTCHAR uni785E +ENCODING 30814 +BBX 15 16 0 -2 +BITMAP +0020 +0120 +FD20 +11FC +1120 +2220 +3C20 +67FE +6400 +A400 +25FC +2504 +3D04 +2504 +21FC +0104 +ENDCHAR +STARTCHAR uni785F +ENCODING 30815 +BBX 15 16 0 -2 +BITMAP +0004 +000E +FBB8 +2088 +2088 +4128 +792E +4BA8 +C8A8 +4AA8 +4AA8 +493E +7900 +4A80 +047E +0800 +ENDCHAR +STARTCHAR uni7860 +ENCODING 30816 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FDFC +1104 +1104 +21FC +3D04 +6504 +65FC +A520 +2522 +2514 +3D08 +2544 +2182 +0100 +ENDCHAR +STARTCHAR uni7861 +ENCODING 30817 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2444 +4040 +7BFE +4840 +C890 +4890 +4910 +4920 +7A24 +4A42 +04FE +0842 +ENDCHAR +STARTCHAR uni7862 +ENCODING 30818 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1088 +1104 +22FA +3C20 +6420 +67FE +A420 +2528 +2524 +3E22 +2422 +20A0 +0040 +ENDCHAR +STARTCHAR uni7863 +ENCODING 30819 +BBX 15 16 0 -2 +BITMAP +0020 +0022 +FDFA +1024 +1024 +23FE +3C10 +6420 +65FC +A488 +2510 +26FE +3C10 +2410 +2050 +0020 +ENDCHAR +STARTCHAR uni7864 +ENCODING 30820 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FBFE +2020 +2124 +2124 +7924 +4AAA +CAAA +4820 +4850 +4850 +7888 +0104 +0202 +ENDCHAR +STARTCHAR uni7865 +ENCODING 30821 +BBX 15 16 0 -2 +BITMAP +0090 +0088 +FC80 +13FE +10A0 +20A8 +3CB0 +64A4 +64A8 +A4B0 +2524 +252A +3D32 +2222 +02DE +0400 +ENDCHAR +STARTCHAR uni7866 +ENCODING 30822 +BBX 15 15 0 -2 +BITMAP +03FE +FC20 +1020 +11FC +2020 +3C20 +67FE +6488 +A488 +27FE +2488 +3C88 +2508 +2108 +0208 +ENDCHAR +STARTCHAR uni7867 +ENCODING 30823 +BBX 14 15 0 -2 +BITMAP +01F8 +FC08 +10D0 +1020 +21FC +3D24 +6524 +65FC +A524 +2524 +25FC +3D24 +2524 +2124 +010C +ENDCHAR +STARTCHAR uni7868 +ENCODING 30824 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FBFE +2020 +21FC +2124 +7924 +49FC +C924 +4924 +49FC +4820 +7BFE +0020 +0020 +ENDCHAR +STARTCHAR uni7869 +ENCODING 30825 +BBX 15 16 0 -2 +BITMAP +080C +08F0 +7E80 +0880 +0EFE +7888 +0888 +2908 +1208 +FFFE +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni786A +ENCODING 30826 +BBX 15 15 1 -1 +BITMAP +00A8 +0128 +FB24 +2120 +2120 +27FE +7920 +4924 +C924 +49A8 +4F28 +4910 +7912 +012A +0344 +ENDCHAR +STARTCHAR uni786B +ENCODING 30827 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FFFE +2080 +2088 +2134 +7BC4 +4800 +CA48 +4A48 +4A48 +4A48 +7C4A +044A +0806 +ENDCHAR +STARTCHAR uni786C +ENCODING 30828 +BBX 15 14 1 -1 +BITMAP +07FC +F840 +23F8 +2248 +2248 +7BF8 +4A48 +CA48 +4BF8 +4A40 +4940 +78C0 +01B0 +060E +ENDCHAR +STARTCHAR uni786D +ENCODING 30829 +BBX 15 15 0 -1 +BITMAP +0048 +0048 +FDFE +1048 +1048 +2020 +3C10 +65FE +6480 +A480 +2480 +2480 +3C80 +2480 +20FC +ENDCHAR +STARTCHAR uni786E +ENCODING 30830 +BBX 14 15 1 -1 +BITMAP +0080 +00F8 +FC88 +2110 +23FC +2124 +7924 +49FC +C924 +4924 +49FC +4904 +7A04 +0204 +041C +ENDCHAR +STARTCHAR uni786F +ENCODING 30831 +BBX 15 14 1 -1 +BITMAP +01F8 +F908 +21F8 +2108 +2108 +79F8 +4908 +C908 +49F8 +48A0 +48A0 +7922 +0222 +041E +ENDCHAR +STARTCHAR uni7870 +ENCODING 30832 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +40A8 +24A4 +092A +7230 +10C0 +1700 +0000 +FFFE +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni7871 +ENCODING 30833 +BBX 14 15 0 -2 +BITMAP +01FC +FD24 +1124 +1124 +21FC +3D24 +6564 +6574 +A5AC +2524 +2524 +3D24 +2504 +21FC +0104 +ENDCHAR +STARTCHAR uni7872 +ENCODING 30834 +BBX 15 15 1 -1 +BITMAP +0088 +0088 +FD04 +2202 +2020 +2050 +7888 +4904 +CA02 +49FC +4904 +4904 +7904 +0104 +01FC +ENDCHAR +STARTCHAR uni7873 +ENCODING 30835 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +F9FC +2020 +2020 +4020 +7BFE +4848 +C848 +494C +494A +4A4A +7888 +4888 +0128 +0210 +ENDCHAR +STARTCHAR uni7874 +ENCODING 30836 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +FFFE +2110 +2110 +20A0 +78A0 +4926 +CB38 +4D20 +4920 +4920 +7922 +0122 +011E +ENDCHAR +STARTCHAR uni7875 +ENCODING 30837 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC3E +1020 +1020 +21FE +3D02 +654A +652A +A512 +2512 +252A +3D4A +2502 +21FE +0102 +ENDCHAR +STARTCHAR uni7876 +ENCODING 30838 +BBX 15 16 0 -2 +BITMAP +0020 +0124 +FD24 +1124 +11FC +2020 +3C50 +6488 +6544 +A622 +2420 +25F8 +3C08 +2410 +2010 +0020 +ENDCHAR +STARTCHAR uni7877 +ENCODING 30839 +BBX 15 15 0 -1 +BITMAP +0040 +0040 +F8A0 +20A0 +2110 +4208 +7DF6 +4800 +C888 +4848 +4A48 +4950 +7910 +4820 +07FE +ENDCHAR +STARTCHAR uni7878 +ENCODING 30840 +BBX 15 16 0 -2 +BITMAP +0020 +0124 +FD24 +1124 +11FC +2000 +3DFE +6500 +657C +A510 +2510 +25FE +3D10 +2210 +0210 +0410 +ENDCHAR +STARTCHAR uni7879 +ENCODING 30841 +BBX 15 16 0 -2 +BITMAP +0208 +0228 +F228 +2228 +2FA4 +4244 +7254 +D692 +5710 +5AA0 +5A20 +5228 +7244 +52FC +0244 +0200 +ENDCHAR +STARTCHAR uni787A +ENCODING 30842 +BBX 15 15 0 -2 +BITMAP +01FE +FC20 +1040 +10A2 +2112 +3C34 +6558 +6498 +A554 +2434 +2452 +3C90 +2510 +2050 +0020 +ENDCHAR +STARTCHAR uni787B +ENCODING 30843 +BBX 15 15 0 -2 +BITMAP +7EFC +4844 +7E44 +4228 +7E10 +4828 +7EC6 +0000 +FFFE +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni787C +ENCODING 30844 +BBX 15 14 1 -1 +BITMAP +03DE +FA52 +2252 +2252 +23DE +7A52 +4A52 +CA52 +4BDE +4A52 +4A52 +7A52 +02D2 +0426 +ENDCHAR +STARTCHAR uni787D +ENCODING 30845 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +FBFC +2110 +2248 +4446 +7BF8 +4A48 +CA48 +4BF8 +4A48 +4A48 +7BF8 +4842 +0042 +003E +ENDCHAR +STARTCHAR uni787E +ENCODING 30846 +BBX 15 15 0 -1 +BITMAP +0008 +003C +FDE0 +1020 +13FE +20A8 +3CA8 +64A8 +67FE +A4A8 +24A8 +27FE +3C20 +2420 +21FC +ENDCHAR +STARTCHAR uni787F +ENCODING 30847 +BBX 15 15 0 -1 +BITMAP +0040 +0020 +F820 +23FE +2202 +4494 +7908 +4A04 +C800 +49FC +4820 +4820 +7820 +4820 +07FE +ENDCHAR +STARTCHAR uni7880 +ENCODING 30848 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +FCF8 +1108 +1010 +21FC +3C24 +6424 +67FE +A424 +2424 +25FC +3C24 +2420 +20A0 +0040 +ENDCHAR +STARTCHAR uni7881 +ENCODING 30849 +BBX 14 15 1 -1 +BITMAP +0820 +3FF8 +0820 +0FE0 +0820 +0FE0 +0820 +FFFC +1020 +3FF0 +4808 +9FF4 +3010 +5010 +1FF0 +ENDCHAR +STARTCHAR uni7882 +ENCODING 30850 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2000 +41FC +7800 +4800 +CBFE +4820 +4928 +4924 +7A22 +4C22 +00A0 +0040 +ENDCHAR +STARTCHAR uni7883 +ENCODING 30851 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FBFE +2020 +21FC +4020 +7BFE +4800 +C9FC +4904 +49FC +4904 +79FC +4904 +0114 +0108 +ENDCHAR +STARTCHAR uni7884 +ENCODING 30852 +BBX 15 16 0 -2 +BITMAP +0110 +0110 +F910 +2110 +27BC +4110 +7910 +4B38 +CBB8 +4D54 +4D54 +4992 +7910 +4910 +0110 +0110 +ENDCHAR +STARTCHAR uni7885 +ENCODING 30853 +BBX 15 15 0 -2 +BITMAP +03FE +FA02 +221A +22E2 +4222 +7A22 +4BFE +CA22 +4A72 +4AAA +4B26 +7A22 +4A22 +03FE +0202 +ENDCHAR +STARTCHAR uni7886 +ENCODING 30854 +BBX 15 15 1 -1 +BITMAP +6020 +13FC +C224 +23F8 +1288 +2488 +4470 +898E +0000 +FFFE +0400 +1FF8 +F008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni7887 +ENCODING 30855 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FBFE +2202 +2202 +21FC +7820 +4820 +C920 +493C +4920 +4920 +7AA0 +0260 +041E +ENDCHAR +STARTCHAR uni7888 +ENCODING 30856 +BBX 15 16 0 -2 +BITMAP +001C +03E0 +FA20 +23FE +2220 +4292 +7B0A +4A06 +C9FC +4904 +4904 +49FC +7904 +4904 +01FC +0104 +ENDCHAR +STARTCHAR uni7889 +ENCODING 30857 +BBX 14 15 0 -2 +BITMAP +01FC +FD24 +1124 +1174 +2124 +3DFC +6504 +6574 +A554 +2554 +2574 +3D04 +2204 +0214 +0408 +ENDCHAR +STARTCHAR uni788A +ENCODING 30858 +BBX 15 15 1 -1 +BITMAP +0090 +0088 +FCFC +2380 +2048 +2032 +78CC +4B10 +C888 +489E +4FE0 +4844 +782A +0072 +078C +ENDCHAR +STARTCHAR uni788B +ENCODING 30859 +BBX 15 16 0 -2 +BITMAP +0020 +0124 +FD24 +1124 +11FC +2000 +3DFE +6408 +65E8 +A528 +2528 +25E8 +3D28 +2408 +2028 +0010 +ENDCHAR +STARTCHAR uni788C +ENCODING 30860 +BBX 15 15 1 -1 +BITMAP +0100 +01F8 +FA08 +23F8 +2010 +27FE +7840 +4A44 +C948 +4968 +48F0 +4950 +7A48 +0446 +01C0 +ENDCHAR +STARTCHAR uni788D +ENCODING 30861 +BBX 15 14 1 -1 +BITMAP +01F8 +FD08 +21F8 +2108 +2108 +79F8 +4800 +CFFE +4808 +4FFE +4908 +7888 +0088 +0038 +ENDCHAR +STARTCHAR uni788E +ENCODING 30862 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +2000 +2110 +2110 +72A8 +54A4 +D000 +5040 +5FFE +5040 +7040 +0040 +0040 +ENDCHAR +STARTCHAR uni788F +ENCODING 30863 +BBX 15 16 0 -2 +BITMAP +0048 +0048 +FC48 +11FE +1048 +2048 +3DFE +6400 +64FC +A484 +2484 +24FC +3C84 +2484 +20FC +0084 +ENDCHAR +STARTCHAR uni7890 +ENCODING 30864 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +F9FC +2020 +2020 +43FE +7888 +4944 +CA42 +48F8 +4988 +4A50 +7820 +4850 +0188 +0606 +ENDCHAR +STARTCHAR uni7891 +ENCODING 30865 +BBX 15 15 1 -1 +BITMAP +0020 +0040 +FFFC +2244 +2244 +23FC +7A44 +4A44 +CBFC +4890 +4910 +4FFE +7810 +0010 +0010 +ENDCHAR +STARTCHAR uni7892 +ENCODING 30866 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FC50 +1088 +1104 +2202 +3CF8 +6420 +6420 +A5FC +2420 +2524 +3CA4 +24A8 +23FE +ENDCHAR +STARTCHAR uni7893 +ENCODING 30867 +BBX 15 15 1 -1 +BITMAP +0088 +0088 +FC90 +21FE +2310 +2510 +79FC +4910 +C910 +4910 +49FC +4910 +7910 +0110 +01FE +ENDCHAR +STARTCHAR uni7894 +ENCODING 30868 +BBX 15 15 1 -1 +BITMAP +0014 +03D4 +F812 +2010 +27FE +2010 +7890 +4A90 +CAF0 +4A90 +4A90 +4A90 +7A8A +02EA +0704 +ENDCHAR +STARTCHAR uni7895 +ENCODING 30869 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FBFC +20A0 +2110 +220C +7800 +4FFE +C808 +4BC8 +4A48 +4A48 +7BC8 +0008 +0038 +ENDCHAR +STARTCHAR uni7896 +ENCODING 30870 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1088 +1104 +22FA +3C00 +65FC +6554 +A554 +25FC +2554 +3D54 +2554 +2104 +010C +ENDCHAR +STARTCHAR uni7897 +ENCODING 30871 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFC +2404 +2404 +2200 +7BBC +4CA4 +CCA4 +4BA4 +492C +4920 +7A22 +0422 +081E +ENDCHAR +STARTCHAR uni7898 +ENCODING 30872 +BBX 15 16 0 -2 +BITMAP +0050 +0050 +FC50 +11FC +1154 +2154 +3D54 +65FC +6554 +A554 +2554 +27FE +3C00 +2488 +2104 +0202 +ENDCHAR +STARTCHAR uni7899 +ENCODING 30873 +BBX 15 15 0 -2 +BITMAP +03FE +FA02 +228A +2252 +43FE +7A22 +4A22 +CAAA +4AAA +4AAA +4AFA +7A02 +4A02 +020A +0204 +ENDCHAR +STARTCHAR uni789A +ENCODING 30874 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFC +2108 +2088 +2090 +7890 +4FFE +C800 +49F8 +4908 +4908 +7908 +0108 +01F8 +ENDCHAR +STARTCHAR uni789B +ENCODING 30875 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FBFE +2020 +21FC +4020 +7BFE +4800 +C9FC +4904 +4924 +4924 +7924 +4850 +0088 +0304 +ENDCHAR +STARTCHAR uni789C +ENCODING 30876 +BBX 15 16 0 -2 +BITMAP +0080 +0090 +F908 +23FC +2040 +47FE +7910 +4A48 +CC86 +4B10 +4820 +48C4 +7B08 +4830 +00C0 +0700 +ENDCHAR +STARTCHAR uni789D +ENCODING 30877 +BBX 15 14 1 -1 +BITMAP +03FE +F840 +2080 +23FE +2292 +7A92 +4A96 +C840 +4840 +4FFE +4840 +78A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni789E +ENCODING 30878 +BBX 15 14 1 -1 +BITMAP +0FE0 +0820 +0FE0 +0000 +7EFC +4284 +7EFC +0000 +FFFE +0400 +0FF8 +3808 +C808 +0FF8 +ENDCHAR +STARTCHAR uni789F +ENCODING 30879 +BBX 15 15 1 -1 +BITMAP +0248 +0248 +FFFE +2248 +2248 +2278 +7A00 +4BFC +C840 +4FFE +4950 +4950 +7A48 +0444 +0040 +ENDCHAR +STARTCHAR uni78A0 +ENCODING 30880 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2000 +21FC +4104 +79FC +4800 +CBFE +4A02 +49FC +4820 +7820 +4820 +00A0 +0040 +ENDCHAR +STARTCHAR uni78A1 +ENCODING 30881 +BBX 15 16 0 -2 +BITMAP +0020 +01FE +FC20 +10FC +1020 +21FE +3C00 +64FC +64A4 +A494 +25FE +24A4 +3D14 +25FE +2004 +0018 +ENDCHAR +STARTCHAR uni78A2 +ENCODING 30882 +BBX 15 15 0 -2 +BITMAP +00FC +FC84 +1084 +10F4 +2094 +3C94 +65FE +6502 +A57A +254A +254A +3D7A +2502 +210A +0104 +ENDCHAR +STARTCHAR uni78A3 +ENCODING 30883 +BBX 15 14 1 -1 +BITMAP +01F8 +FD08 +21F8 +2108 +2108 +79F8 +4880 +C9FE +4A42 +4E42 +4AA2 +7B12 +03F2 +000C +ENDCHAR +STARTCHAR uni78A4 +ENCODING 30884 +BBX 15 15 1 -1 +BITMAP +0088 +0088 +FBFE +2088 +2088 +2020 +79FC +4924 +C924 +4924 +4BFE +4820 +7850 +0088 +0306 +ENDCHAR +STARTCHAR uni78A5 +ENCODING 30885 +BBX 14 16 0 -2 +BITMAP +0080 +0040 +FBFC +2204 +2204 +43FC +7A00 +CA00 +4BFC +4B54 +4B54 +4DFC +7D54 +4554 +0944 +010C +ENDCHAR +STARTCHAR uni78A6 +ENCODING 30886 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2080 +40F8 +7908 +4A90 +C860 +4998 +4E06 +49F8 +7908 +4908 +01F8 +0108 +ENDCHAR +STARTCHAR uni78A7 +ENCODING 30887 +BBX 15 15 1 -1 +BITMAP +0010 +FE20 +10FE +1082 +7CFE +1082 +1E82 +F0FE +0000 +FFFE +0200 +1FF8 +F008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni78A8 +ENCODING 30888 +BBX 15 15 0 -2 +BITMAP +01FC +FD24 +1124 +11FC +2124 +3D24 +65FC +6400 +A7FE +2520 +2522 +3D14 +2548 +2184 +0102 +ENDCHAR +STARTCHAR uni78A9 +ENCODING 30889 +BBX 15 14 1 -1 +BITMAP +03FE +F820 +21FC +2104 +21FC +7904 +4904 +C9FC +4904 +4904 +49FC +7840 +018C +0602 +ENDCHAR +STARTCHAR uni78AA +ENCODING 30890 +BBX 15 15 1 -1 +BITMAP +0108 +0108 +FFFE +2108 +21F8 +2108 +79F8 +4908 +CFFE +4A90 +4A90 +4B1E +7A00 +0200 +03FE +ENDCHAR +STARTCHAR uni78AB +ENCODING 30891 +BBX 15 16 0 -2 +BITMAP +0080 +0338 +FA28 +2228 +23A8 +4246 +7A00 +4A7C +CBA4 +4A24 +4A28 +4BA8 +7E10 +4A28 +0244 +0282 +ENDCHAR +STARTCHAR uni78AC +ENCODING 30892 +BBX 15 15 0 -2 +BITMAP +03DE +FA42 +2242 +2242 +43DE +7A00 +4A3E +CBD2 +4A12 +4A14 +4BD4 +7A08 +4A14 +0224 +0242 +ENDCHAR +STARTCHAR uni78AD +ENCODING 30893 +BBX 15 14 1 -1 +BITMAP +01FC +F904 +21FC +2104 +21FC +7800 +4FFE +4900 +C9FE +4A52 +4C92 +7922 +0242 +008C +ENDCHAR +STARTCHAR uni78AE +ENCODING 30894 +BBX 15 15 0 -2 +BITMAP +01FC +FD04 +1104 +11FC +2104 +3D04 +65FC +6400 +A7FE +2420 +2520 +3D3C +2520 +22A0 +047E +ENDCHAR +STARTCHAR uni78AF +ENCODING 30895 +BBX 15 15 1 -1 +BITMAP +0092 +0124 +FE48 +2124 +2092 +2000 +7BFE +4A0A +CA8A +4A52 +4A22 +4A52 +7B8A +0202 +03FE +ENDCHAR +STARTCHAR uni78B0 +ENCODING 30896 +BBX 15 15 1 -1 +BITMAP +0108 +0088 +FC90 +2000 +23FC +2090 +7890 +4A94 +CA94 +4A94 +4B9C +4890 +7890 +0090 +07FE +ENDCHAR +STARTCHAR uni78B1 +ENCODING 30897 +BBX 15 16 0 -2 +BITMAP +0014 +0012 +F010 +27FE +2410 +4410 +75D0 +D412 +5412 +55D4 +5554 +5548 +75DA +542A +0846 +1082 +ENDCHAR +STARTCHAR uni78B2 +ENCODING 30898 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +F9FC +2000 +2088 +4050 +7BFE +4A22 +CC24 +49FC +4924 +4924 +7934 +4928 +0020 +0020 +ENDCHAR +STARTCHAR uni78B3 +ENCODING 30899 +BBX 15 16 0 -2 +BITMAP +0020 +0124 +F924 +2124 +21FC +4080 +7880 +4BFE +C890 +4910 +4952 +4A54 +7AA8 +4C28 +0844 +0082 +ENDCHAR +STARTCHAR uni78B4 +ENCODING 30900 +BBX 15 15 0 -1 +BITMAP +0020 +0020 +FBFE +2070 +20A8 +4124 +7A22 +49FC +C904 +49FC +4904 +49FC +7904 +4800 +03FE +ENDCHAR +STARTCHAR uni78B5 +ENCODING 30901 +BBX 15 15 1 -1 +BITMAP +0040 +007E +FC40 +21FC +2104 +2104 +79FC +4904 +C904 +49FC +4904 +4904 +79FC +0088 +0306 +ENDCHAR +STARTCHAR uni78B6 +ENCODING 30902 +BBX 15 16 0 -2 +BITMAP +0080 +009E +FBEA +208A +21CA +408A +7BEA +4892 +C8A6 +4820 +4BFE +4820 +7850 +4888 +0104 +0602 +ENDCHAR +STARTCHAR uni78B7 +ENCODING 30903 +BBX 15 16 0 -2 +BITMAP +0008 +001C +FDF0 +1110 +1110 +21FE +3D10 +657C +6544 +A57C +2544 +257C +3D44 +2244 +027C +0444 +ENDCHAR +STARTCHAR uni78B8 +ENCODING 30904 +BBX 15 15 0 -2 +BITMAP +07FC +F404 +2434 +25C4 +4444 +75F4 +D554 +5554 +55F4 +5444 +5454 +75F4 +5494 +0806 +1002 +ENDCHAR +STARTCHAR uni78B9 +ENCODING 30905 +BBX 15 15 0 -1 +BITMAP +0040 +0020 +FBFE +2202 +2404 +41FC +7800 +49FC +C904 +49FC +4904 +49FC +7904 +4800 +03FE +ENDCHAR +STARTCHAR uni78BA +ENCODING 30906 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FBFE +224A +2090 +21FC +7B20 +4D20 +C9FC +4920 +4920 +49FC +7920 +0120 +01FE +ENDCHAR +STARTCHAR uni78BB +ENCODING 30907 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FBFE +2000 +21FC +2104 +79FC +4800 +CBFE +4A02 +4AFA +4A8A +7A8A +02FA +0206 +ENDCHAR +STARTCHAR uni78BC +ENCODING 30908 +BBX 15 14 1 -1 +BITMAP +01FE +FD10 +2110 +21FC +2110 +7910 +49FC +C910 +4910 +49FE +4802 +7AAA +02AA +0406 +ENDCHAR +STARTCHAR uni78BD +ENCODING 30909 +BBX 15 15 0 -2 +BITMAP +01FC +FC20 +1020 +13FE +2000 +3DFC +6504 +65FC +A504 +25FC +2504 +3DFC +2488 +2104 +0202 +ENDCHAR +STARTCHAR uni78BE +ENCODING 30910 +BBX 15 14 1 -1 +BITMAP +03FC +FA04 +2204 +23FC +2250 +7A50 +4BFC +CA50 +4A50 +4FFE +4C94 +7888 +00E4 +0302 +ENDCHAR +STARTCHAR uni78BF +ENCODING 30911 +BBX 15 15 0 -2 +BITMAP +03FE +FA02 +2202 +23FE +4210 +7A92 +CA54 +4AFE +4A82 +4AFE +4A82 +7AFE +4482 +048A +0884 +ENDCHAR +STARTCHAR uni78C0 +ENCODING 30912 +BBX 15 15 0 -1 +BITMAP +0244 +0124 +F928 +207E +2010 +4354 +7954 +4954 +C97C +4914 +4920 +4920 +7940 +4A80 +047E +ENDCHAR +STARTCHAR uni78C1 +ENCODING 30913 +BBX 15 15 1 -1 +BITMAP +0208 +0108 +F110 +2FFE +2210 +2420 +7420 +5948 +D528 +5210 +5210 +5528 +74A4 +09CE +1E72 +ENDCHAR +STARTCHAR uni78C2 +ENCODING 30914 +BBX 15 16 0 -2 +BITMAP +0040 +03BE +FA12 +2292 +2252 +42AA +7B24 +4840 +CBFE +4A22 +4A22 +4BFE +7A22 +4A22 +03FE +0202 +ENDCHAR +STARTCHAR uni78C3 +ENCODING 30915 +BBX 15 16 0 -2 +BITMAP +0004 +001E +FBF0 +221E +2210 +42FE +7A92 +CA98 +4AF2 +4A8E +4A80 +4AB8 +7AA8 +44AA +054A +0A86 +ENDCHAR +STARTCHAR uni78C4 +ENCODING 30916 +BBX 15 16 0 -2 +BITMAP +0020 +0010 +FDFE +1110 +117C +2114 +3DFE +6514 +657C +A510 +257C +2544 +3D44 +2244 +027C +0444 +ENDCHAR +STARTCHAR uni78C5 +ENCODING 30917 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FBFE +2104 +2088 +23FE +7A02 +4820 +CBFE +4840 +487C +4844 +7884 +0104 +0238 +ENDCHAR +STARTCHAR uni78C6 +ENCODING 30918 +BBX 15 14 1 -1 +BITMAP +00F8 +FC88 +20B8 +20A8 +23FE +7A02 +4AFA +C888 +48F8 +4888 +48F8 +7888 +0088 +0098 +ENDCHAR +STARTCHAR uni78C7 +ENCODING 30919 +BBX 15 16 0 -2 +BITMAP +0020 +0040 +FDFC +1104 +1154 +2124 +3D54 +6504 +65FC +A400 +2512 +25D4 +3D18 +2552 +2192 +010E +ENDCHAR +STARTCHAR uni78C8 +ENCODING 30920 +BBX 15 15 1 -1 +BITMAP +0040 +0080 +FBFC +2244 +2244 +23FC +7A44 +4A44 +CBFC +4928 +492A +493E +7A20 +0222 +041E +ENDCHAR +STARTCHAR uni78C9 +ENCODING 30921 +BBX 15 16 0 -2 +BITMAP +03F0 +0110 +F0E0 +2318 +2000 +47BC +74A4 +D318 +54A4 +5040 +57FC +50E0 +7150 +5248 +0C46 +0040 +ENDCHAR +STARTCHAR uni78CA +ENCODING 30922 +BBX 15 14 1 -1 +BITMAP +3FF8 +0400 +0FF0 +3410 +0410 +07F0 +0000 +FEFE +1020 +2040 +7EFC +A344 +2244 +3E7C +ENDCHAR +STARTCHAR uni78CB +ENCODING 30923 +BBX 15 15 1 -1 +BITMAP +0108 +0090 +FFF8 +2040 +2040 +21F0 +7840 +4840 +CFFC +4880 +49F8 +4A40 +7C40 +0040 +03FE +ENDCHAR +STARTCHAR uni78CC +ENCODING 30924 +BBX 15 15 1 -1 +BITMAP +0118 +01E0 +FD04 +20FC +2000 +22FC +7A84 +4AFC +CA84 +4AFC +4A84 +4BFE +7800 +0088 +0306 +ENDCHAR +STARTCHAR uni78CD +ENCODING 30925 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +2424 +41FC +7820 +49FC +C820 +4BFE +4820 +49FC +7904 +4904 +01FC +0104 +ENDCHAR +STARTCHAR uni78CE +ENCODING 30926 +BBX 15 15 1 -1 +BITMAP +003C +03C4 +FA22 +2422 +2440 +2048 +7890 +49A4 +C87A +4B82 +4840 +4FFE +78A0 +0118 +0606 +ENDCHAR +STARTCHAR uni78CF +ENCODING 30927 +BBX 15 16 0 -2 +BITMAP +0088 +0050 +FC00 +13FE +1050 +21FC +3C54 +67FE +6454 +A5FC +2450 +24D8 +3D54 +2652 +2050 +0050 +ENDCHAR +STARTCHAR uni78D0 +ENCODING 30928 +BBX 15 15 1 -1 +BITMAP +0800 +1078 +3E48 +2A4E +2280 +FF7E +2A24 +4A18 +8666 +FFFE +0800 +1FF8 +7008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni78D1 +ENCODING 30929 +BBX 15 15 1 -1 +BITMAP +0040 +0444 +FC44 +27FC +2000 +27FE +7800 +4BFC +CA04 +4A04 +4BFC +4908 +7888 +0090 +07FE +ENDCHAR +STARTCHAR uni78D2 +ENCODING 30930 +BBX 15 15 0 -2 +BITMAP +00FC +FC84 +1084 +10FC +2000 +3DFE +6502 +65FE +A502 +25FE +2502 +3DFE +2448 +2084 +0102 +ENDCHAR +STARTCHAR uni78D3 +ENCODING 30931 +BBX 15 15 0 -1 +BITMAP +0010 +0220 +F97C +2144 +2044 +407C +7B40 +4940 +C97C +4944 +4944 +497C +7944 +4A80 +047E +ENDCHAR +STARTCHAR uni78D4 +ENCODING 30932 +BBX 15 15 1 -1 +BITMAP +0208 +0388 +FABE +24A8 +2BA8 +2128 +797E +4A08 +CC08 +4840 +4FFE +4950 +7A48 +0446 +0040 +ENDCHAR +STARTCHAR uni78D5 +ENCODING 30933 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FBFC +2040 +2040 +27FE +7880 +4888 +C934 +4BC2 +4800 +4BFC +7AA4 +02A4 +07FE +ENDCHAR +STARTCHAR uni78D6 +ENCODING 30934 +BBX 15 15 0 -2 +BITMAP +01DE +FC42 +1152 +10CA +2152 +3C42 +6420 +64FC +A484 +2484 +24FC +3C84 +2484 +20FC +0084 +ENDCHAR +STARTCHAR uni78D7 +ENCODING 30935 +BBX 15 16 0 -2 +BITMAP +0028 +0024 +FBFE +2020 +21FC +4124 +79FC +4924 +C9FC +4924 +4808 +4BFE +7888 +4848 +0048 +0018 +ENDCHAR +STARTCHAR uni78D8 +ENCODING 30936 +BBX 15 16 0 -2 +BITMAP +0008 +003C +FBC0 +2004 +2244 +4128 +79FC +4A20 +C820 +4BFE +4820 +4924 +7924 +4924 +01FC +0004 +ENDCHAR +STARTCHAR uni78D9 +ENCODING 30937 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2088 +2124 +4242 +7890 +49F8 +C808 +4844 +48A8 +4990 +7A88 +4CA4 +00C2 +0080 +ENDCHAR +STARTCHAR uni78DA +ENCODING 30938 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFE +2040 +23FC +2244 +7BFC +4A44 +CBFC +4848 +4FFC +480A +7FFE +0108 +00B8 +ENDCHAR +STARTCHAR uni78DB +ENCODING 30939 +BBX 14 16 1 -2 +BITMAP +1008 +FEF0 +1080 +FE80 +92FC +FE90 +9290 +FE90 +1090 +FE90 +1110 +FFF8 +1000 +3FF0 +D010 +1FF0 +ENDCHAR +STARTCHAR uni78DC +ENCODING 30940 +BBX 15 16 0 -2 +BITMAP +0100 +0110 +FBDC +2254 +2554 +4288 +7908 +4AF4 +CC02 +4800 +4BFC +4840 +7950 +4A48 +0544 +0080 +ENDCHAR +STARTCHAR uni78DD +ENCODING 30941 +BBX 15 16 0 -2 +BITMAP +0088 +0088 +F888 +23D0 +209E +43E4 +7894 +4FD4 +C914 +49D4 +4954 +4948 +7948 +4A54 +02D4 +0422 +ENDCHAR +STARTCHAR uni78DE +ENCODING 30942 +BBX 15 16 0 -2 +BITMAP +0020 +0222 +FA22 +23FE +2000 +43DE +7A52 +4A52 +CBDE +4A52 +4A52 +4BDE +7A52 +4A52 +055A +08A4 +ENDCHAR +STARTCHAR uni78DF +ENCODING 30943 +BBX 15 15 0 -2 +BITMAP +07BC +F884 +24A4 +2294 +44A4 +7850 +4988 +CE26 +48C0 +4B10 +4864 +7B88 +4830 +00C0 +0700 +ENDCHAR +STARTCHAR uni78E0 +ENCODING 30944 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FC3E +2020 +2020 +23FE +7A22 +4A8A +4A52 +CB26 +4A22 +4A52 +7A8A +0222 +03FE +ENDCHAR +STARTCHAR uni78E1 +ENCODING 30945 +BBX 15 15 1 -1 +BITMAP +0248 +0248 +FFE8 +2248 +23DE +224A +73CA +524A +D7EA +554A +554A +556A +7612 +0412 +07E6 +ENDCHAR +STARTCHAR uni78E2 +ENCODING 30946 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FBFE +2020 +22AA +4124 +7AAA +4820 +CAAA +4924 +4AAA +4850 +7850 +4888 +0104 +0602 +ENDCHAR +STARTCHAR uni78E3 +ENCODING 30947 +BBX 15 16 0 -2 +BITMAP +0040 +0088 +F9FC +2108 +2252 +43FE +7850 +4988 +CE26 +48C0 +4B10 +4864 +7B88 +4830 +00C0 +0700 +ENDCHAR +STARTCHAR uni78E4 +ENCODING 30948 +BBX 15 15 1 -1 +BITMAP +0180 +063C +F424 +27A4 +24A4 +27C6 +7480 +54FC +57A4 +D424 +57A8 +54A8 +7490 +08A8 +0946 +ENDCHAR +STARTCHAR uni78E5 +ENCODING 30949 +BBX 15 15 0 -2 +BITMAP +01FC +FD24 +11FC +1124 +21FC +3C40 +6488 +65F0 +A420 +2444 +27FE +3C22 +2524 +2222 +0060 +ENDCHAR +STARTCHAR uni78E6 +ENCODING 30950 +BBX 15 14 1 -1 +BITMAP +07FE +F890 +23FE +2292 +2292 +7BFE +4800 +CBFC +4800 +4FFE +4820 +7928 +0626 +00E0 +ENDCHAR +STARTCHAR uni78E7 +ENCODING 30951 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FFFC +2040 +23F8 +2040 +7FFE +4A08 +CBF8 +4A08 +4BF8 +4A08 +7BF8 +0110 +060C +ENDCHAR +STARTCHAR uni78E8 +ENCODING 30952 +BBX 15 15 1 -1 +BITMAP +0100 +7FFE +4410 +5F7E +4410 +4E38 +5554 +4412 +4000 +7FFE +4400 +8FFC +B804 +8804 +0FFC +ENDCHAR +STARTCHAR uni78E9 +ENCODING 30953 +BBX 15 16 0 -2 +BITMAP +000C +000A +F808 +23FE +2208 +4248 +7A6A +CA4A +4BFA +4A4C +4A4C +4AEC +7B5A +444A +04D6 +0822 +ENDCHAR +STARTCHAR uni78EA +ENCODING 30954 +BBX 15 16 0 -2 +BITMAP +0020 +0222 +FBFE +2090 +2088 +41FE +7B10 +4D10 +C9FE +4910 +4910 +49FE +7910 +4910 +01FE +0100 +ENDCHAR +STARTCHAR uni78EB +ENCODING 30955 +BBX 15 16 0 -2 +BITMAP +0124 +0124 +F224 +2424 +2954 +414A +7292 +D610 +5A10 +5250 +525C +5250 +7250 +52B0 +029E +0300 +ENDCHAR +STARTCHAR uni78EC +ENCODING 30956 +BBX 15 15 1 -1 +BITMAP +0800 +FFB8 +0828 +7F46 +0000 +7F7C +4924 +7F18 +40E6 +8000 +7FFE +0800 +1FF8 +F008 +1FF8 +ENDCHAR +STARTCHAR uni78ED +ENCODING 30957 +BBX 15 16 0 -2 +BITMAP +03FE +0200 +FAFC +2200 +23FE +4294 +7AA8 +CAC4 +4A00 +4AFC +4A84 +4AFC +7A84 +44FC +0484 +088C +ENDCHAR +STARTCHAR uni78EE +ENCODING 30958 +BBX 15 16 0 -2 +BITMAP +0020 +0124 +FD24 +11FC +1020 +2050 +3C88 +6574 +6602 +A5FC +2554 +2554 +3DFC +2554 +2154 +010C +ENDCHAR +STARTCHAR uni78EF +ENCODING 30959 +BBX 15 15 1 -1 +BITMAP +0248 +0248 +F450 +2D74 +2248 +2554 +7EFA +5044 +D7FE +5424 +5428 +5610 +792A +084A +1184 +ENDCHAR +STARTCHAR uni78F0 +ENCODING 30960 +BBX 15 16 0 -2 +BITMAP +0088 +0050 +FBFE +2020 +21FC +4020 +7BFE +4924 +C8A8 +4BFE +4800 +49FC +7904 +4904 +01FC +0104 +ENDCHAR +STARTCHAR uni78F1 +ENCODING 30961 +BBX 15 16 0 -2 +BITMAP +0088 +02AA +FADC +2488 +2154 +4222 +7800 +4BFE +CA42 +4C44 +4BFC +4844 +7844 +4884 +0114 +0208 +ENDCHAR +STARTCHAR uni78F2 +ENCODING 30962 +BBX 15 15 1 -1 +BITMAP +0400 +02FE +F940 +247C +2244 +207C +7940 +4AFE +4C00 +C840 +4FFE +4950 +7A48 +0C46 +0040 +ENDCHAR +STARTCHAR uni78F3 +ENCODING 30963 +BBX 15 16 0 -2 +BITMAP +0104 +0088 +F800 +23FE +2222 +42AA +7A72 +4A22 +CBFE +4800 +49FC +4904 +79FC +4904 +01FC +0104 +ENDCHAR +STARTCHAR uni78F4 +ENCODING 30964 +BBX 15 14 1 -1 +BITMAP +03E4 +F8AA +2514 +2208 +25F4 +7802 +4BF8 +CA08 +4A08 +4BF8 +4910 +7890 +00A0 +07FE +ENDCHAR +STARTCHAR uni78F5 +ENCODING 30965 +BBX 15 15 0 -2 +BITMAP +03DE +FA52 +23DE +2252 +43DE +7A02 +4AFA +CA8A +4AFA +4A8A +4AFA +7A8A +4A02 +020A +0204 +ENDCHAR +STARTCHAR uni78F6 +ENCODING 30966 +BBX 15 16 0 -2 +BITMAP +0080 +031C +FA04 +2204 +239C +4204 +7A04 +CBFC +4900 +4BFE +4C02 +4AAA +7AAA +4402 +0014 +0008 +ENDCHAR +STARTCHAR uni78F7 +ENCODING 30967 +BBX 15 15 1 -1 +BITMAP +0224 +0128 +FC20 +23FC +20B0 +2128 +7A24 +4C22 +4BC4 +CA7E +4A54 +4D54 +78BE +0104 +0604 +ENDCHAR +STARTCHAR uni78F8 +ENCODING 30968 +BBX 15 16 0 -2 +BITMAP +0088 +0050 +FBFE +2050 +21FC +4154 +798C +4974 +C904 +49FC +4820 +4BFE +7850 +4888 +0104 +0202 +ENDCHAR +STARTCHAR uni78F9 +ENCODING 30969 +BBX 15 14 1 -1 +BITMAP +07FE +F890 +23FC +2294 +23FC +7800 +49FC +C904 +49FC +4904 +49FC +7820 +07FE +0020 +ENDCHAR +STARTCHAR uni78FA +ENCODING 30970 +BBX 15 15 1 -1 +BITMAP +0090 +03FC +F890 +20F0 +2000 +27FE +7840 +4BFC +CA44 +4BFC +4A44 +4A44 +7BFC +0108 +0606 +ENDCHAR +STARTCHAR uni78FB +ENCODING 30971 +BBX 15 15 1 -1 +BITMAP +001C +03E0 +FD24 +20A8 +23FE +20A8 +7924 +4A22 +C800 +49FC +4924 +49FC +7924 +0124 +01FC +ENDCHAR +STARTCHAR uni78FC +ENCODING 30972 +BBX 15 16 0 -2 +BITMAP +00A0 +0090 +FDFE +1320 +11FC +2120 +3DFC +6520 +65FE +A500 +2420 +27FE +3C70 +24A8 +2326 +0020 +ENDCHAR +STARTCHAR uni78FD +ENCODING 30973 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FBFC +2040 +27FE +2108 +7FBE +4908 +C9C8 +4F3E +4800 +4FFE +7890 +0112 +060E +ENDCHAR +STARTCHAR uni78FE +ENCODING 30974 +BBX 15 14 1 -1 +BITMAP +03DE +FE52 +23DE +2000 +21FC +7924 +49FC +C924 +4924 +49FC +4820 +7BFE +0020 +0020 +ENDCHAR +STARTCHAR uni78FF +ENCODING 30975 +BBX 15 16 0 -2 +BITMAP +3FFE +2104 +2E38 +2210 +2FBC +2718 +2AB4 +3252 +2000 +2FFC +2100 +23F8 +2608 +5A08 +43F8 +8208 +ENDCHAR +STARTCHAR uni7900 +ENCODING 30976 +BBX 14 14 1 -1 +BITMAP +07BC +FCA4 +27BC +24A4 +27BC +7404 +55E4 +5524 +D5E4 +5524 +55E4 +7524 +0664 +040C +ENDCHAR +STARTCHAR uni7901 +ENCODING 30977 +BBX 15 15 1 -1 +BITMAP +0110 +0120 +FBFE +2620 +2BFC +2220 +7A20 +4BFC +CA20 +4A20 +4BFE +4800 +7AA4 +0452 +0452 +ENDCHAR +STARTCHAR uni7902 +ENCODING 30978 +BBX 15 16 0 -2 +BITMAP +0020 +03FE +FC20 +11FC +1000 +21FC +3D04 +65FC +6488 +A7FE +2400 +25FC +3D04 +2504 +21FC +0104 +ENDCHAR +STARTCHAR uni7903 +ENCODING 30979 +BBX 15 16 0 -2 +BITMAP +0124 +00A8 +FBFE +2202 +20F8 +4088 +78F8 +480C +C9F0 +4820 +49FC +4820 +7BFE +4820 +00A0 +0040 +ENDCHAR +STARTCHAR uni7904 +ENCODING 30980 +BBX 15 16 0 -2 +BITMAP +0018 +01E0 +FC40 +13FE +1088 +2174 +3E52 +6470 +6400 +A5FC +2504 +2574 +3D54 +2574 +2104 +010C +ENDCHAR +STARTCHAR uni7905 +ENCODING 30981 +BBX 15 16 0 -2 +BITMAP +0208 +0108 +F7C8 +2010 +279E +4494 +77A4 +D014 +5794 +5094 +5114 +51C8 +7708 +5114 +0524 +0242 +ENDCHAR +STARTCHAR uni7906 +ENCODING 30982 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FC50 +1088 +1104 +22FA +3C00 +6400 +65DC +A554 +2554 +25DC +3C88 +2488 +2154 +0222 +ENDCHAR +STARTCHAR uni7907 +ENCODING 30983 +BBX 15 15 1 -1 +BITMAP +0040 +0080 +F7FC +2434 +27C4 +254C +74D4 +57FC +D554 +564C +5444 +5FFE +70A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni7908 +ENCODING 30984 +BBX 15 16 0 -2 +BITMAP +0044 +0224 +F928 +207E +2010 +4028 +7B4A +491C +C928 +494C +491A +492A +7948 +4910 +02FE +0400 +ENDCHAR +STARTCHAR uni7909 +ENCODING 30985 +BBX 15 16 0 -2 +BITMAP +0108 +0208 +F7C8 +2450 +27DE +4464 +77D4 +D214 +5114 +57D4 +5214 +53C8 +7248 +5454 +0554 +08A2 +ENDCHAR +STARTCHAR uni790A +ENCODING 30986 +BBX 15 16 0 -2 +BITMAP +0878 +FFC8 +0848 +3E86 +2B78 +3E48 +2A28 +FF90 +4928 +7F46 +0000 +7FFC +0800 +1FF8 +6808 +0FF8 +ENDCHAR +STARTCHAR uni790B +ENCODING 30987 +BBX 15 15 0 -2 +BITMAP +01FC +FD54 +11FC +1020 +21FC +3C20 +67FE +6488 +A450 +25FC +2420 +3FFE +2420 +2020 +0020 +ENDCHAR +STARTCHAR uni790C +ENCODING 30988 +BBX 15 15 0 -2 +BITMAP +01FC +FC20 +13FE +1222 +21AC +3C20 +65AC +6400 +A5FC +2524 +2524 +3DFC +2524 +2124 +01FC +ENDCHAR +STARTCHAR uni790D +ENCODING 30989 +BBX 15 16 0 -2 +BITMAP +0088 +03FE +FC88 +11FC +1104 +21FC +3D04 +65FC +6480 +A5FE +2622 +2552 +3D02 +25FA +200A +0004 +ENDCHAR +STARTCHAR uni790E +ENCODING 30990 +BBX 15 15 1 -1 +BITMAP +0108 +0108 +FFFE +2108 +239C +256A +7900 +4FFE +C842 +4A40 +4A7C +4A40 +7D40 +04C0 +083E +ENDCHAR +STARTCHAR uni790F +ENCODING 30991 +BBX 15 16 0 -2 +BITMAP +0050 +0252 +F954 +2050 +23FE +4088 +7850 +4BFE +C820 +49FC +4820 +4BFE +78A8 +4924 +0622 +0020 +ENDCHAR +STARTCHAR uni7910 +ENCODING 30992 +BBX 14 15 1 -1 +BITMAP +0A80 +3138 +2288 +3838 +2288 +3938 +2288 +7FFC +4004 +5FF4 +0400 +0FF0 +3810 +C810 +0FF0 +ENDCHAR +STARTCHAR uni7911 +ENCODING 30993 +BBX 15 15 1 -1 +BITMAP +0124 +0124 +FCA8 +23FE +2202 +22FA +7888 +48F8 +C800 +4BFE +4A22 +4BFE +7A22 +0222 +03FE +ENDCHAR +STARTCHAR uni7912 +ENCODING 30994 +BBX 15 15 1 -1 +BITMAP +0110 +07FC +F840 +23F8 +2040 +27FE +7808 +4B94 +C910 +4FFE +4B50 +4D32 +7BCC +004A +01D6 +ENDCHAR +STARTCHAR uni7913 +ENCODING 30995 +BBX 15 15 0 -2 +BITMAP +03FE +FC00 +11FC +1124 +21FC +3D24 +67FE +6400 +A5FC +2524 +25FC +3D24 +25FC +2000 +03FE +ENDCHAR +STARTCHAR uni7914 +ENCODING 30996 +BBX 15 16 0 -2 +BITMAP +0010 +03C8 +FA7E +2240 +2262 +43D4 +7A00 +4A3E +CBC8 +4A48 +4E7E +4A48 +7A48 +4BC8 +0248 +0008 +ENDCHAR +STARTCHAR uni7915 +ENCODING 30997 +BBX 15 16 0 -2 +BITMAP +3E10 +22FE +3E44 +2028 +7EFE +A210 +3EFC +2210 +0000 +FFFE +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni7916 +ENCODING 30998 +BBX 15 16 0 -2 +BITMAP +0140 +024C +FA64 +2244 +234C +4264 +7AA4 +4BAC +CAA4 +4AA4 +4FFE +4800 +7910 +4908 +0204 +0404 +ENDCHAR +STARTCHAR uni7917 +ENCODING 30999 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2202 +21FC +4148 +7A50 +49FC +CB04 +49FC +4904 +49FC +7904 +49FC +0088 +0104 +ENDCHAR +STARTCHAR uni7918 +ENCODING 31000 +BBX 15 15 0 -2 +BITMAP +03FE +FA02 +23FE +2202 +43FE +7908 +4A52 +CB9C +4908 +4A52 +4BDE +7800 +4AA4 +0252 +0452 +ENDCHAR +STARTCHAR uni7919 +ENCODING 31001 +BBX 15 15 1 -1 +BITMAP +0400 +04BE +FF02 +2414 +2488 +23BE +740A +5788 +5A28 +D22C +5FA8 +5228 +7328 +04B8 +084E +ENDCHAR +STARTCHAR uni791A +ENCODING 31002 +BBX 15 15 0 -1 +BITMAP +0088 +03FE +F888 +2020 +21FC +4020 +7BFE +4840 +C888 +49FC +4800 +49FC +7954 +4954 +07FE +ENDCHAR +STARTCHAR uni791B +ENCODING 31003 +BBX 15 15 1 -1 +BITMAP +0008 +03E8 +FA88 +23EE +2230 +23E0 +7A80 +4A9E +4BE0 +C800 +49FC +4954 +7954 +0154 +07FE +ENDCHAR +STARTCHAR uni791C +ENCODING 31004 +BBX 15 15 1 -1 +BITMAP +0D00 +31B8 +2108 +39B8 +2288 +3AB8 +2288 +FFFE +1010 +2FF8 +4404 +8FFA +1808 +6808 +0FF8 +ENDCHAR +STARTCHAR uni791D +ENCODING 31005 +BBX 15 15 0 -2 +BITMAP +01FC +FC20 +13FE +1222 +21AC +3C20 +65AC +6400 +A7FE +2420 +25FC +3D54 +2554 +2154 +010C +ENDCHAR +STARTCHAR uni791E +ENCODING 31006 +BBX 15 16 0 -2 +BITMAP +0088 +03FE +F888 +23FE +2202 +41FC +7800 +4BFE +C840 +48A2 +4B54 +48B8 +7B54 +4892 +0350 +0020 +ENDCHAR +STARTCHAR uni791F +ENCODING 31007 +BBX 15 15 0 -2 +BITMAP +07C4 +F514 +27C8 +2508 +47D4 +7514 +D500 +57D4 +5054 +5554 +5548 +7548 +5454 +0054 +01A2 +ENDCHAR +STARTCHAR uni7920 +ENCODING 31008 +BBX 15 15 0 -1 +BITMAP +0108 +0090 +FBFE +2108 +2108 +4252 +7B9C +4908 +CA52 +4BDE +4840 +48A4 +7AAA +4A8A +0478 +ENDCHAR +STARTCHAR uni7921 +ENCODING 31009 +BBX 15 16 0 -2 +BITMAP +0088 +03FE +FC88 +1024 +13FE +2020 +3DFC +6524 +65FC +A524 +25FC +2524 +3C08 +25FE +2088 +0058 +ENDCHAR +STARTCHAR uni7922 +ENCODING 31010 +BBX 15 16 0 -2 +BITMAP +0108 +0090 +FBFC +2040 +21F8 +4080 +7BFC +4948 +C9FC +4B0A +4DF8 +4908 +79FA +4934 +018C +0102 +ENDCHAR +STARTCHAR uni7923 +ENCODING 31011 +BBX 15 16 0 -2 +BITMAP +0048 +01FE +FC48 +1000 +11FE +214A +3D4A +65FE +6414 +A5FE +2510 +2592 +3D4C +254A +2116 +0222 +ENDCHAR +STARTCHAR uni7924 +ENCODING 31012 +BBX 15 16 0 -2 +BITMAP +0088 +0088 +FBFE +2088 +2110 +41DE +7A52 +4D54 +CA88 +4974 +4A02 +49FC +7820 +4924 +0222 +0060 +ENDCHAR +STARTCHAR uni7925 +ENCODING 31013 +BBX 15 15 1 -1 +BITMAP +07C0 +051E +FF82 +2494 +2788 +2514 +7FFA +4A08 +CBF8 +4A08 +4BF8 +4A08 +7BF8 +0110 +0E0E +ENDCHAR +STARTCHAR uni7926 +ENCODING 31014 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +F7FE +2488 +25FC +2488 +77FE +5420 +D5FC +5524 +55FC +5524 +75FC +0888 +0306 +ENDCHAR +STARTCHAR uni7927 +ENCODING 31015 +BBX 15 15 0 -2 +BITMAP +01FC +F924 +21FC +2124 +41FC +7904 +4800 +CBFE +4AAA +4AAA +4BFE +7AAA +4AAA +03FE +0222 +ENDCHAR +STARTCHAR uni7928 +ENCODING 31016 +BBX 13 15 1 -2 +BITMAP +3FE0 +2220 +3FE0 +2220 +7FF0 +5550 +7DF0 +5550 +7DF0 +0000 +FFF8 +1000 +3FF0 +D010 +1FF0 +ENDCHAR +STARTCHAR uni7929 +ENCODING 31017 +BBX 15 16 0 -2 +BITMAP +0042 +039C +FA10 +23DE +2294 +4294 +7C20 +4BFC +CA04 +4BFC +4A04 +4BFC +7A04 +4BFC +0108 +0204 +ENDCHAR +STARTCHAR uni792A +ENCODING 31018 +BBX 15 14 1 -1 +BITMAP +07FE +F488 +27FE +2488 +25FC +7524 +55FC +D524 +55FC +5420 +55FE +752A +093A +016E +ENDCHAR +STARTCHAR uni792B +ENCODING 31019 +BBX 15 15 1 -1 +BITMAP +0448 +0488 +F9F0 +2B34 +25E8 +2930 +7B24 +5DFA +D040 +5FFE +5150 +5150 +7248 +0C46 +0040 +ENDCHAR +STARTCHAR uni792C +ENCODING 31020 +BBX 15 15 1 -1 +BITMAP +2288 +2108 +FABE +2008 +729C +A92A +2288 +0100 +FFFE +0440 +3FF8 +C206 +0FF8 +7808 +0FF8 +ENDCHAR +STARTCHAR uni792D +ENCODING 31021 +BBX 15 16 0 -2 +BITMAP +01FC +0020 +FBFE +2222 +25AC +4020 +79AC +4890 +C9FE +4B20 +4DFC +4920 +79FC +4920 +01FE +0100 +ENDCHAR +STARTCHAR uni792E +ENCODING 31022 +BBX 15 15 1 -1 +BITMAP +0008 +07C8 +FD3E +2514 +2794 +2522 +7500 +5794 +5514 +D514 +57C8 +5148 +74C8 +0854 +01A2 +ENDCHAR +STARTCHAR uni792F +ENCODING 31023 +BBX 15 16 0 -2 +BITMAP +0088 +02AA +FADC +2488 +2154 +4222 +7BFE +4A42 +C888 +49F0 +4824 +4BFE +7822 +4924 +02A2 +0040 +ENDCHAR +STARTCHAR uni7930 +ENCODING 31024 +BBX 15 14 1 -1 +BITMAP +07FE +F444 +2598 +27FE +2488 +75DC +56AA +5488 +D420 +5520 +553C +7520 +0920 +03FE +ENDCHAR +STARTCHAR uni7931 +ENCODING 31025 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +7F7E +2240 +FFFC +2204 +3E7C +2242 +267E +0000 +FFFE +0400 +1FFC +F004 +1FFC +ENDCHAR +STARTCHAR uni7932 +ENCODING 31026 +BBX 15 16 0 -2 +BITMAP +0110 +0090 +FBDE +2010 +225E +4182 +7BDE +4810 +CBDE +4A50 +4BDE +4A50 +7BDE +4A50 +0252 +02CE +ENDCHAR +STARTCHAR uni7933 +ENCODING 31027 +BBX 15 16 0 -2 +BITMAP +0040 +0020 +FBFE +2248 +23FE +4248 +7AEC +4B5A +CA48 +4BFE +4A20 +4A7C +7AC4 +4B44 +047C +0844 +ENDCHAR +STARTCHAR uni7934 +ENCODING 31028 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +FFFE +2114 +20FE +2410 +7AFE +4892 +4CFE +CA92 +48FE +4892 +79FE +0244 +042C +ENDCHAR +STARTCHAR uni7935 +ENCODING 31029 +BBX 15 16 0 -2 +BITMAP +01FC +0020 +FBFE +2222 +21AC +4020 +79AC +4800 +C89E +4BF2 +489E +49D2 +7ABE +4C92 +009E +0092 +ENDCHAR +STARTCHAR uni7936 +ENCODING 31030 +BBX 15 16 0 -2 +BITMAP +0088 +03FE +F888 +23DE +2252 +43DE +78A0 +4890 +C9FE +4920 +4BFC +4D20 +79FC +4920 +01FE +0100 +ENDCHAR +STARTCHAR uni7937 +ENCODING 31031 +BBX 15 15 0 -1 +BITMAP +0090 +07FE +F890 +23E8 +2288 +43CE +7A50 +4BD4 +CAA2 +4BE2 +4800 +4BFC +7A94 +4A94 +07FE +ENDCHAR +STARTCHAR uni7938 +ENCODING 31032 +BBX 15 16 0 -2 +BITMAP +0528 +07BE +F948 +27BE +2318 +45AA +7946 +4BFC +CA04 +4BFC +4A04 +4BFC +7A04 +4BFC +0108 +0204 +ENDCHAR +STARTCHAR uni7939 +ENCODING 31033 +BBX 15 16 0 -2 +BITMAP +07BC +04A4 +F7BC +2000 +27FE +4400 +7590 +D49E +57D4 +5564 +55D4 +5554 +75D4 +5568 +0BC8 +1054 +ENDCHAR +STARTCHAR uni793A +ENCODING 31034 +BBX 15 14 1 -1 +BITMAP +3FF8 +0000 +0000 +0000 +FFFE +0100 +0100 +1100 +1110 +2108 +4104 +8102 +0100 +0700 +ENDCHAR +STARTCHAR uni793B +ENCODING 31035 +BBX 11 15 3 -1 +BITMAP +0400 +0400 +0400 +7FC0 +0040 +0080 +0100 +0200 +0500 +0C80 +3440 +C420 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni793C +ENCODING 31036 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FC40 +0440 +0440 +0840 +1040 +3840 +5440 +9040 +1040 +1042 +1042 +103E +ENDCHAR +STARTCHAR uni793D +ENCODING 31037 +BBX 14 16 0 -2 +BITMAP +2000 +1000 +13F8 +F888 +0890 +1090 +10A0 +38BC +5484 +9484 +1104 +1104 +1104 +1204 +1228 +1410 +ENDCHAR +STARTCHAR uni793E +ENCODING 31038 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FC20 +0420 +05FC +0820 +1020 +3820 +5420 +9020 +1020 +1020 +1020 +13FE +ENDCHAR +STARTCHAR uni793F +ENCODING 31039 +BBX 14 16 0 -2 +BITMAP +2040 +1040 +1080 +F8FC +0904 +1204 +1004 +3904 +5484 +9444 +1044 +1004 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni7940 +ENCODING 31040 +BBX 15 14 1 -1 +BITMAP +79FC +0104 +0104 +0104 +FD04 +1104 +11FC +5500 +5500 +5500 +9500 +9102 +1102 +10FE +ENDCHAR +STARTCHAR uni7941 +ENCODING 31041 +BBX 14 14 1 -1 +BITMAP +7CFC +0084 +0084 +0088 +FE88 +1090 +1088 +5488 +5484 +5284 +9284 +9298 +1080 +1080 +ENDCHAR +STARTCHAR uni7942 +ENCODING 31042 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +F920 +092C +1134 +1164 +3BA4 +5524 +9534 +1128 +1122 +1122 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni7943 +ENCODING 31043 +BBX 14 16 0 -2 +BITMAP +2000 +13F0 +1010 +F810 +0910 +1110 +1110 +39FC +5404 +9404 +1004 +13F4 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni7944 +ENCODING 31044 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1050 +F850 +0888 +1104 +1202 +3888 +5488 +9488 +1088 +1088 +1088 +1108 +1108 +1208 +ENDCHAR +STARTCHAR uni7945 +ENCODING 31045 +BBX 15 15 1 -1 +BITMAP +001C +79E0 +0020 +0020 +0020 +FC20 +13FE +1020 +5420 +5450 +5450 +9488 +9088 +1104 +1202 +ENDCHAR +STARTCHAR uni7946 +ENCODING 31046 +BBX 15 14 1 -1 +BITMAP +7BFE +0020 +0020 +0020 +FC20 +11FC +1020 +5420 +5450 +5450 +9488 +9088 +1104 +1202 +ENDCHAR +STARTCHAR uni7947 +ENCODING 31047 +BBX 15 15 1 -1 +BITMAP +000C +7DF0 +0110 +0110 +0110 +FD10 +11FE +1110 +5510 +5510 +5510 +9508 +910A +11EA +1704 +ENDCHAR +STARTCHAR uni7948 +ENCODING 31048 +BBX 15 15 1 -1 +BITMAP +1018 +11E0 +1100 +FD00 +0500 +05FE +0910 +1110 +3910 +5510 +9110 +1210 +1210 +1410 +1010 +ENDCHAR +STARTCHAR uni7949 +ENCODING 31049 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FC20 +0520 +053C +0920 +1120 +3920 +5520 +9120 +1120 +1120 +1120 +17FE +ENDCHAR +STARTCHAR uni794A +ENCODING 31050 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +0040 +03FE +0080 +FC80 +1080 +10FC +5484 +5484 +5484 +9504 +9104 +1204 +1438 +ENDCHAR +STARTCHAR uni794B +ENCODING 31051 +BBX 15 16 0 -2 +BITMAP +2000 +10F8 +1088 +F888 +0888 +1106 +1200 +39FC +5484 +9484 +1048 +1050 +1020 +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni794C +ENCODING 31052 +BBX 14 16 0 -2 +BITMAP +2020 +1020 +1020 +F820 +09FC +1124 +1124 +3924 +5524 +95FC +1124 +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni794D +ENCODING 31053 +BBX 15 16 0 -2 +BITMAP +2008 +103C +11E0 +F820 +0820 +1020 +1020 +3BFE +5420 +9420 +1020 +1020 +1020 +1020 +11FC +1000 +ENDCHAR +STARTCHAR uni794E +ENCODING 31054 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +FBFE +0820 +1020 +19FE +3420 +5020 +93FE +1022 +1022 +102A +1024 +1020 +1020 +ENDCHAR +STARTCHAR uni794F +ENCODING 31055 +BBX 15 16 0 -2 +BITMAP +2000 +1000 +13FE +F820 +0820 +1040 +1840 +34FC +5184 +9284 +1484 +1084 +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni7950 +ENCODING 31056 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FDFE +0440 +0440 +0880 +1080 +39FC +5584 +9284 +1084 +1084 +1084 +10FC +ENDCHAR +STARTCHAR uni7951 +ENCODING 31057 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1120 +F920 +09FC +1120 +1220 +3820 +57FE +9420 +1050 +1050 +1088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni7952 +ENCODING 31058 +BBX 14 16 0 -2 +BITMAP +2000 +13FC +1084 +F884 +0884 +1104 +1114 +3A08 +5400 +95FC +1104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni7953 +ENCODING 31059 +BBX 15 15 1 -1 +BITMAP +0090 +7888 +0088 +03FE +0080 +F880 +1088 +1148 +5550 +5650 +5420 +9420 +9850 +1088 +1306 +ENDCHAR +STARTCHAR uni7954 +ENCODING 31060 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +1088 +F908 +097E +1308 +1508 +3948 +5528 +9528 +1108 +1108 +1108 +1108 +1128 +1110 +ENDCHAR +STARTCHAR uni7955 +ENCODING 31061 +BBX 15 15 1 -1 +BITMAP +0040 +7820 +0020 +0084 +0084 +F884 +2088 +2288 +AA94 +AA92 +AAA2 +AAC0 +A084 +2144 +263C +ENDCHAR +STARTCHAR uni7956 +ENCODING 31062 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1108 +FD08 +0508 +05F8 +0908 +1108 +3908 +55F8 +9108 +1108 +1108 +1108 +17FE +ENDCHAR +STARTCHAR uni7957 +ENCODING 31063 +BBX 15 15 1 -1 +BITMAP +0018 +7BE0 +0220 +0220 +0220 +FE20 +23FE +2220 +AA20 +AA10 +AA10 +ABD0 +AE0A +200A +27E4 +ENDCHAR +STARTCHAR uni7958 +ENCODING 31064 +BBX 15 14 1 -1 +BITMAP +7CFC +0000 +0000 +0000 +FDFE +1010 +1010 +5494 +5494 +5494 +9512 +9112 +1212 +1030 +ENDCHAR +STARTCHAR uni7959 +ENCODING 31065 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +F9FC +0820 +1020 +1020 +3BFE +5470 +94A8 +10A8 +1124 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni795A +ENCODING 31066 +BBX 15 15 1 -1 +BITMAP +0040 +7C40 +0040 +00FE +00A0 +FD20 +1220 +103C +5420 +5420 +5420 +943C +9020 +1020 +1020 +ENDCHAR +STARTCHAR uni795B +ENCODING 31067 +BBX 15 15 1 -1 +BITMAP +0040 +7040 +0040 +03FC +0040 +F840 +2040 +2040 +AFFE +A880 +A880 +A890 +A108 +2134 +27C4 +ENDCHAR +STARTCHAR uni795C +ENCODING 31068 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +0020 +0020 +01FE +FE20 +1020 +1020 +5420 +55FC +5504 +9504 +9104 +1104 +11FC +ENDCHAR +STARTCHAR uni795D +ENCODING 31069 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1104 +FD04 +0504 +0504 +0904 +11FC +3850 +5450 +9050 +1090 +1092 +1112 +120E +ENDCHAR +STARTCHAR uni795E +ENCODING 31070 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +2040 +FBFC +0A44 +0A44 +13FC +1244 +3244 +6A44 +A3FC +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni795F +ENCODING 31071 +BBX 15 15 1 -1 +BITMAP +0100 +1110 +1110 +1FF0 +4104 +4104 +7FFC +0000 +1FF0 +0000 +FFFE +0100 +1930 +610C +0700 +ENDCHAR +STARTCHAR uni7960 +ENCODING 31072 +BBX 14 14 1 -1 +BITMAP +7BFC +0004 +0004 +01E4 +FC04 +1004 +11E4 +5524 +5524 +5524 +95E4 +9004 +1004 +101C +ENDCHAR +STARTCHAR uni7961 +ENCODING 31073 +BBX 15 16 0 -2 +BITMAP +0880 +0888 +2E90 +28E0 +2884 +2E84 +F07C +0000 +3FF8 +0000 +FFFE +0100 +1110 +2108 +4504 +0200 +ENDCHAR +STARTCHAR uni7962 +ENCODING 31074 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +F9FE +0A24 +0C28 +1020 +1124 +3124 +6924 +A222 +2222 +2020 +2020 +20E0 +ENDCHAR +STARTCHAR uni7963 +ENCODING 31075 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +10FE +F900 +0A00 +101C +11E0 +3920 +5522 +9524 +1128 +1110 +1110 +1148 +1184 +1102 +ENDCHAR +STARTCHAR uni7964 +ENCODING 31076 +BBX 15 16 0 -2 +BITMAP +2000 +13DE +1042 +F842 +0A52 +114A +114A +3842 +54C6 +914A +1252 +1042 +1042 +1042 +114A +1084 +ENDCHAR +STARTCHAR uni7965 +ENCODING 31077 +BBX 15 15 1 -1 +BITMAP +1108 +1088 +1090 +FBFC +0840 +0840 +13F8 +1040 +3840 +5440 +97FE +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni7966 +ENCODING 31078 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1104 +F904 +09FC +1000 +1000 +39FC +5420 +9020 +13FE +1020 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni7967 +ENCODING 31079 +BBX 15 15 1 -1 +BITMAP +0050 +7C50 +0052 +0354 +00D8 +FE50 +1050 +1050 +5458 +54D6 +5750 +9490 +9090 +1112 +120E +ENDCHAR +STARTCHAR uni7968 +ENCODING 31080 +BBX 15 14 1 -1 +BITMAP +FFFE +0440 +3FF8 +2448 +2448 +3FF8 +0000 +3FF8 +0000 +FFFE +0080 +1898 +E086 +0380 +ENDCHAR +STARTCHAR uni7969 +ENCODING 31081 +BBX 15 16 0 -2 +BITMAP +2020 +1120 +1120 +F9FC +0920 +1220 +1020 +3BFE +5470 +94A8 +10A8 +1124 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni796A +ENCODING 31082 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +10FC +F904 +0A08 +11FE +1100 +397C +5544 +9544 +1154 +1148 +1142 +1242 +123E +1400 +ENDCHAR +STARTCHAR uni796B +ENCODING 31083 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1050 +F888 +0904 +1202 +11FC +3800 +5400 +95FC +1104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni796C +ENCODING 31084 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +1020 +F840 +0888 +1104 +13FE +3822 +5420 +9020 +13FE +1020 +1020 +1020 +17FE +1000 +ENDCHAR +STARTCHAR uni796D +ENCODING 31085 +BBX 15 15 1 -1 +BITMAP +1000 +3EFC +5284 +CA48 +2430 +1818 +37E6 +C000 +0000 +7FFE +0100 +0920 +3118 +C106 +0700 +ENDCHAR +STARTCHAR uni796E +ENCODING 31086 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +FBFE +0820 +1020 +11FC +3800 +5400 +95FC +1104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni796F +ENCODING 31087 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +103E +F820 +0820 +11FC +1104 +3924 +5524 +9524 +1124 +1124 +1050 +1048 +1084 +1104 +ENDCHAR +STARTCHAR uni7970 +ENCODING 31088 +BBX 15 16 0 -2 +BITMAP +2020 +1120 +1120 +F9FC +0920 +1220 +1020 +3BFE +5400 +9400 +11FC +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni7971 +ENCODING 31089 +BBX 15 16 0 -2 +BITMAP +2104 +1084 +1088 +F810 +09FC +1104 +1104 +3904 +55FC +9450 +1050 +1090 +1092 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni7972 +ENCODING 31090 +BBX 15 14 1 -1 +BITMAP +71F8 +0008 +07FE +0008 +F9F8 +2000 +27FE +A402 +ADFA +A908 +A890 +A060 +2198 +2606 +ENDCHAR +STARTCHAR uni7973 +ENCODING 31091 +BBX 15 16 0 -2 +BITMAP +2000 +13FC +1200 +FA00 +0AF8 +1200 +1200 +3BFC +56A0 +92A4 +12A8 +1290 +1290 +1488 +14A4 +18C2 +ENDCHAR +STARTCHAR uni7974 +ENCODING 31092 +BBX 15 16 0 -2 +BITMAP +2010 +1014 +1012 +F810 +0BFE +1010 +1150 +3954 +57F4 +9554 +1154 +1148 +124A +125A +1426 +1042 +ENDCHAR +STARTCHAR uni7975 +ENCODING 31093 +BBX 15 16 0 -2 +BITMAP +4000 +23FE +2222 +FA22 +1222 +13FE +2222 +3262 +6A72 +AAAA +2322 +2222 +2222 +2202 +23FE +2202 +ENDCHAR +STARTCHAR uni7976 +ENCODING 31094 +BBX 15 16 0 -2 +BITMAP +4108 +2088 +2090 +FBFC +1024 +1024 +23FC +3220 +6A20 +ABFE +2062 +20A2 +212A +2224 +2420 +2020 +ENDCHAR +STARTCHAR uni7977 +ENCODING 31095 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FE +F840 +09FC +0840 +13FE +1080 +2888 +67FE +A208 +2488 +2848 +2008 +2018 +ENDCHAR +STARTCHAR uni7978 +ENCODING 31096 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1104 +F904 +0904 +11FC +1820 +3420 +53FE +9222 +1252 +128A +130A +1202 +120A +1204 +ENDCHAR +STARTCHAR uni7979 +ENCODING 31097 +BBX 15 15 1 -1 +BITMAP +0080 +7C80 +01FE +0102 +0282 +FCF2 +1142 +1042 +55FA +5442 +5552 +9552 +91F4 +1004 +1038 +ENDCHAR +STARTCHAR uni797A +ENCODING 31098 +BBX 15 15 1 -1 +BITMAP +0088 +7888 +03FE +0088 +0088 +FCF8 +1088 +1088 +54F8 +5488 +5488 +93FE +9000 +1088 +1306 +ENDCHAR +STARTCHAR uni797B +ENCODING 31099 +BBX 14 16 0 -2 +BITMAP +2000 +11FC +1104 +F924 +0924 +11FC +1124 +3924 +5574 +9554 +1154 +1174 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni797C +ENCODING 31100 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1124 +F924 +09FC +1124 +1924 +35FC +5020 +93FE +1070 +10A8 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni797D +ENCODING 31101 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +13FE +F800 +0888 +1088 +1154 +3A22 +5400 +9020 +13FE +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni797E +ENCODING 31102 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +11FC +F820 +0820 +13FE +1888 +3544 +5242 +90F8 +1188 +1250 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni797F +ENCODING 31103 +BBX 15 15 1 -1 +BITMAP +0100 +79F8 +0108 +0210 +03F0 +F810 +17FE +1040 +5644 +5548 +54E8 +9550 +9248 +1446 +11C0 +ENDCHAR +STARTCHAR uni7980 +ENCODING 31104 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +1010 +17D0 +1450 +17D0 +1010 +1FF0 +0000 +3FFC +0000 +FFFE +0920 +731C +ENDCHAR +STARTCHAR uni7981 +ENCODING 31105 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FEFE +2850 +2C58 +4A94 +8912 +3FF8 +0000 +FFFE +0100 +1110 +2108 +C106 +0700 +ENDCHAR +STARTCHAR uni7982 +ENCODING 31106 +BBX 14 16 0 -2 +BITMAP +2000 +11FC +1124 +F924 +0974 +1124 +11FC +3904 +5574 +9554 +1154 +1174 +1104 +1204 +1214 +1408 +ENDCHAR +STARTCHAR uni7983 +ENCODING 31107 +BBX 15 16 0 -2 +BITMAP +4040 +2040 +27FC +F840 +1040 +13F8 +2208 +33F8 +6A08 +ABF8 +2208 +23F8 +2208 +2208 +2FFE +2000 +ENDCHAR +STARTCHAR uni7984 +ENCODING 31108 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2008 +F9F8 +0808 +0FFE +1040 +1244 +3148 +6970 +A0E0 +2150 +2248 +2446 +21C0 +ENDCHAR +STARTCHAR uni7985 +ENCODING 31109 +BBX 15 15 1 -1 +BITMAP +2084 +2444 +2208 +FBFC +0A44 +0BFC +1244 +1244 +2BFC +6440 +A040 +27FE +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni7986 +ENCODING 31110 +BBX 15 16 0 -2 +BITMAP +2040 +1080 +13FC +FA24 +0A24 +13FC +1A24 +3644 +53FC +9090 +1110 +17FE +1010 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni7987 +ENCODING 31111 +BBX 15 16 0 -2 +BITMAP +2040 +1044 +13F4 +F848 +0850 +17FE +1040 +3880 +55F8 +9308 +1508 +11F8 +1108 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni7988 +ENCODING 31112 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +1222 +F820 +0BFE +1020 +11FC +3924 +55FC +9524 +11FC +1020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni7989 +ENCODING 31113 +BBX 15 16 0 -2 +BITMAP +2088 +1048 +1050 +FBFE +0850 +1050 +11FC +3954 +5554 +958C +1104 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni798A +ENCODING 31114 +BBX 15 15 1 -1 +BITMAP +0100 +7900 +03BC +0114 +0114 +FB94 +1124 +11A4 +564C +5440 +57FE +94A0 +9110 +1208 +1C06 +ENDCHAR +STARTCHAR uni798B +ENCODING 31115 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +1050 +F850 +09FC +1154 +1154 +3954 +55FC +9420 +1020 +11FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni798C +ENCODING 31116 +BBX 15 16 0 -2 +BITMAP +4084 +2044 +2048 +FBFE +1084 +1084 +2108 +314A +6A52 +AB9C +2084 +2108 +2108 +2252 +23DE +2042 +ENDCHAR +STARTCHAR uni798D +ENCODING 31117 +BBX 14 15 1 -1 +BITMAP +2000 +23F8 +2208 +FA78 +0A48 +0A48 +17FC +1404 +35F4 +6D14 +A514 +2514 +25F4 +2404 +241C +ENDCHAR +STARTCHAR uni798E +ENCODING 31118 +BBX 14 15 1 -1 +BITMAP +2040 +207C +2040 +FBF8 +0A08 +0A08 +13F8 +1208 +3208 +6BF8 +A208 +2208 +23F8 +2110 +260C +ENDCHAR +STARTCHAR uni798F +ENCODING 31119 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2000 +F9FC +0904 +0904 +11FC +1000 +33FE +6A22 +A622 +23FE +2222 +2222 +23FE +ENDCHAR +STARTCHAR uni7990 +ENCODING 31120 +BBX 15 16 0 -2 +BITMAP +203C +17C0 +1244 +F928 +0800 +13FC +1080 +3880 +57FE +9500 +11F8 +1288 +1250 +1420 +18D8 +1306 +ENDCHAR +STARTCHAR uni7991 +ENCODING 31121 +BBX 15 16 0 -2 +BITMAP +21FC +1124 +1124 +F9FC +0924 +1124 +19FC +3420 +5020 +93FE +1222 +122A +12FA +120A +1202 +1206 +ENDCHAR +STARTCHAR uni7992 +ENCODING 31122 +BBX 15 16 0 -2 +BITMAP +2100 +11F8 +1208 +FBF0 +0810 +17FE +1080 +3944 +5668 +94B0 +1128 +1668 +10A4 +1122 +16A0 +1040 +ENDCHAR +STARTCHAR uni7993 +ENCODING 31123 +BBX 15 16 0 -2 +BITMAP +2000 +11F8 +1108 +F9F8 +0908 +11F8 +1000 +3BFE +5500 +95FC +1254 +1494 +1124 +1244 +10A8 +1110 +ENDCHAR +STARTCHAR uni7994 +ENCODING 31124 +BBX 15 14 1 -1 +BITMAP +79F8 +0108 +01F8 +0108 +FD08 +21F8 +2000 +AFFE +A840 +AA40 +AA7C +A340 +24C0 +247E +ENDCHAR +STARTCHAR uni7995 +ENCODING 31125 +BBX 15 15 1 -1 +BITMAP +0040 +79F8 +0088 +03FE +0000 +FDF8 +1108 +11F8 +5410 +57FC +5510 +9110 +97FE +1010 +1010 +ENDCHAR +STARTCHAR uni7996 +ENCODING 31126 +BBX 15 15 1 -1 +BITMAP +0088 +7C88 +03FE +0088 +00F8 +FE88 +1088 +10F8 +5420 +57FE +54A8 +94A8 +9124 +1222 +1020 +ENDCHAR +STARTCHAR uni7997 +ENCODING 31127 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1124 +F924 +09FC +1124 +1124 +39FC +5400 +9440 +1024 +12A2 +128A +1488 +1078 +1000 +ENDCHAR +STARTCHAR uni7998 +ENCODING 31128 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +0088 +0048 +FC50 +13FE +1222 +5222 +55FC +5524 +9524 +9124 +112C +1020 +ENDCHAR +STARTCHAR uni7999 +ENCODING 31129 +BBX 15 16 0 -2 +BITMAP +2050 +1052 +13DC +F850 +08D2 +134E +1000 +39FC +5504 +95FC +1104 +11FC +1104 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni799A +ENCODING 31130 +BBX 15 16 0 -2 +BITMAP +2104 +1084 +1088 +F800 +0BFE +1020 +1820 +35FC +5020 +9020 +13FE +1000 +12A4 +1252 +1452 +1000 +ENDCHAR +STARTCHAR uni799B +ENCODING 31131 +BBX 15 15 1 -1 +BITMAP +010C +79F0 +0102 +00FE +0000 +FAFC +2284 +22FC +AA84 +AAFC +AA84 +ABFE +A000 +2088 +2306 +ENDCHAR +STARTCHAR uni799C +ENCODING 31132 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +4D28 +1450 +2288 +7FFE +4002 +8004 +3FF8 +0000 +FFFE +0100 +1110 +2108 +4504 +0200 +ENDCHAR +STARTCHAR uni799D +ENCODING 31133 +BBX 15 14 1 -1 +BITMAP +7BFC +0244 +03FC +0244 +FBFC +1110 +115E +5640 +54FC +5708 +94D0 +9060 +1198 +1606 +ENDCHAR +STARTCHAR uni799E +ENCODING 31134 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +13FE +F800 +09FC +1104 +19FC +3400 +53FE +9202 +12FA +128A +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni799F +ENCODING 31135 +BBX 15 16 0 -2 +BITMAP +2020 +1010 +11FE +F910 +097C +1114 +11FE +3914 +557C +9510 +117C +1144 +1144 +1244 +127C +1444 +ENDCHAR +STARTCHAR uni79A0 +ENCODING 31136 +BBX 15 16 0 -2 +BITMAP +4004 +201E +23F0 +FA1E +1210 +12FE +2292 +3298 +6AF2 +AA8E +2280 +22B8 +22A8 +24AA +254A +2A86 +ENDCHAR +STARTCHAR uni79A1 +ENCODING 31137 +BBX 15 14 1 -1 +BITMAP +7DFC +0110 +0110 +01FC +FD10 +1110 +11FC +5510 +5510 +55FE +9402 +9156 +1252 +1204 +ENDCHAR +STARTCHAR uni79A2 +ENCODING 31138 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1104 +F9FC +0904 +11FC +1800 +3400 +53DE +9042 +1252 +114A +1252 +1042 +114A +1084 +ENDCHAR +STARTCHAR uni79A3 +ENCODING 31139 +BBX 15 16 0 -2 +BITMAP +2028 +1024 +13FE +F820 +09FC +1124 +11FC +3924 +55FC +9524 +1008 +13FE +1088 +1048 +1048 +1018 +ENDCHAR +STARTCHAR uni79A4 +ENCODING 31140 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +1252 +FA52 +0BFE +1000 +13DE +3842 +5652 +954A +10C6 +135A +1042 +1042 +114A +1084 +ENDCHAR +STARTCHAR uni79A5 +ENCODING 31141 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +13FE +F888 +08F8 +1088 +10F8 +3888 +57FE +9488 +1124 +12FA +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni79A6 +ENCODING 31142 +BBX 15 15 1 -1 +BITMAP +2400 +4FBC +9224 +2FA4 +4224 +CBA4 +4A24 +4FAC +5820 +7FF8 +0000 +FFFE +0100 +3118 +C706 +ENDCHAR +STARTCHAR uni79A7 +ENCODING 31143 +BBX 15 15 1 -1 +BITMAP +0020 +7BFE +0020 +01FC +0000 +FDFC +1104 +11FC +5488 +57FE +5400 +95FC +9104 +1104 +11FC +ENDCHAR +STARTCHAR uni79A8 +ENCODING 31144 +BBX 15 16 0 -2 +BITMAP +4124 +2124 +22AA +FBAE +1124 +12AA +23AE +3124 +6FFE +A910 +2114 +2114 +228A +224A +2216 +2422 +ENDCHAR +STARTCHAR uni79A9 +ENCODING 31145 +BBX 15 14 1 -1 +BITMAP +7DFC +0124 +01FC +0124 +FD24 +11FC +1088 +55FC +5488 +5488 +97FE +9040 +1088 +1306 +ENDCHAR +STARTCHAR uni79AA +ENCODING 31146 +BBX 15 14 1 -1 +BITMAP +7BDE +0252 +03DE +0000 +FDFC +1124 +11FC +5524 +55FC +5420 +97FE +9020 +1020 +1020 +ENDCHAR +STARTCHAR uni79AB +ENCODING 31147 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +1050 +FBFE +0A52 +13FE +1000 +39FC +5504 +95FC +1104 +11FC +1020 +13FE +1020 +1020 +ENDCHAR +STARTCHAR uni79AC +ENCODING 31148 +BBX 15 16 0 -2 +BITMAP +2020 +1050 +1088 +F974 +0A02 +11FC +1124 +39AC +5524 +95FC +1000 +10F8 +1088 +10F8 +1088 +10F8 +ENDCHAR +STARTCHAR uni79AD +ENCODING 31149 +BBX 15 16 0 -2 +BITMAP +4088 +2448 +2250 +F8FC +1020 +1050 +2694 +3238 +6A50 +AA98 +2234 +2254 +2290 +2220 +25FE +2800 +ENDCHAR +STARTCHAR uni79AE +ENCODING 31150 +BBX 15 15 1 -1 +BITMAP +0090 +7BFC +0294 +03FC +0294 +FBFC +1000 +13FE +5400 +55F8 +5508 +95F8 +9108 +1090 +17FE +ENDCHAR +STARTCHAR uni79AF +ENCODING 31151 +BBX 15 16 0 -2 +BITMAP +4090 +23FC +2294 +FBFC +1294 +13FC +2000 +33FC +6A00 +AAF8 +2200 +23FE +2520 +2514 +2548 +2986 +ENDCHAR +STARTCHAR uni79B0 +ENCODING 31152 +BBX 15 14 1 -1 +BITMAP +6FFE +0248 +0444 +0FFE +F444 +26EC +2554 +B6EC +AC44 +A6EC +A554 +26EC +2444 +240C +ENDCHAR +STARTCHAR uni79B1 +ENCODING 31153 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +0020 +01FC +FC00 +13FE +1442 +57FC +5400 +57FE +9004 +93FE +12A4 +138C +ENDCHAR +STARTCHAR uni79B2 +ENCODING 31154 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +1248 +FBFE +0A48 +12FC +12A4 +3AFC +56A4 +92FC +1220 +13FE +132A +157A +150A +1906 +ENDCHAR +STARTCHAR uni79B3 +ENCODING 31155 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +07FE +0000 +03B8 +FAA8 +23B8 +2090 +ABFC +A890 +AFFE +A894 +A718 +21C8 +2706 +ENDCHAR +STARTCHAR uni79B4 +ENCODING 31156 +BBX 15 15 1 -1 +BITMAP +0020 +7850 +0088 +0376 +0000 +FDFE +1152 +11FE +5400 +55FE +5552 +95FE +9152 +1152 +1156 +ENDCHAR +STARTCHAR uni79B5 +ENCODING 31157 +BBX 15 16 0 -2 +BITMAP +4000 +23BE +2288 +FB90 +12BE +13A2 +203E +37E2 +693E +A922 +25BE +2514 +2522 +2500 +2BFE +3000 +ENDCHAR +STARTCHAR uni79B6 +ENCODING 31158 +BBX 15 16 0 -2 +BITMAP +4528 +27BE +2948 +FFBE +1318 +15AA +2946 +33FC +6A04 +ABFC +2204 +23FC +2204 +23FC +2108 +2204 +ENDCHAR +STARTCHAR uni79B7 +ENCODING 31159 +BBX 15 16 0 -2 +BITMAP +4100 +255E +2384 +F908 +17DE +1112 +2392 +355E +6912 +A81E +2152 +2FF2 +211E +2280 +244C +2812 +ENDCHAR +STARTCHAR uni79B8 +ENCODING 31160 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0200 +FFFC +8204 +8204 +8284 +8444 +84E4 +8714 +B814 +8004 +8004 +8004 +801C +ENDCHAR +STARTCHAR uni79B9 +ENCODING 31161 +BBX 13 15 2 -1 +BITMAP +00E0 +3F00 +0200 +3FE0 +2220 +2220 +3FE0 +0200 +FFF8 +8288 +8248 +83A8 +BC28 +8008 +8018 +ENDCHAR +STARTCHAR uni79BA +ENCODING 31162 +BBX 13 14 2 -1 +BITMAP +3FE0 +2220 +3FE0 +2220 +2220 +3FE0 +0200 +FFF8 +8288 +8248 +83A8 +BC28 +8008 +8018 +ENDCHAR +STARTCHAR uni79BB +ENCODING 31163 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +1450 +1290 +1110 +1ED0 +1010 +1FF0 +0200 +7FFC +4244 +4244 +45A4 +4E1C +ENDCHAR +STARTCHAR uni79BC +ENCODING 31164 +BBX 13 16 1 -2 +BITMAP +0200 +03F8 +0200 +3FE0 +28A0 +2720 +28A0 +3FE0 +0200 +FFF8 +8408 +8888 +9FC8 +8848 +8028 +8010 +ENDCHAR +STARTCHAR uni79BD +ENCODING 31165 +BBX 13 15 2 -1 +BITMAP +0200 +0D80 +3260 +CF98 +2520 +2220 +2520 +3FE0 +0400 +FFF8 +8488 +8448 +89A8 +BE08 +8018 +ENDCHAR +STARTCHAR uni79BE +ENCODING 31166 +BBX 15 15 1 -1 +BITMAP +00F0 +3F00 +0100 +0100 +0100 +FFFE +0540 +0920 +0920 +1110 +2108 +4104 +8102 +0100 +0100 +ENDCHAR +STARTCHAR uni79BF +ENCODING 31167 +BBX 15 15 1 -1 +BITMAP +00F0 +3F00 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +0440 +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni79C0 +ENCODING 31168 +BBX 15 15 1 -1 +BITMAP +00F0 +1F00 +0100 +7FFC +0540 +0920 +3118 +C006 +1FE0 +0220 +0238 +0408 +0808 +1010 +6060 +ENDCHAR +STARTCHAR uni79C1 +ENCODING 31169 +BBX 15 15 1 -1 +BITMAP +0C40 +F040 +1040 +1040 +FC40 +1040 +1080 +3080 +3890 +5488 +9108 +1104 +113C +17C2 +1002 +ENDCHAR +STARTCHAR uni79C2 +ENCODING 31170 +BBX 15 15 1 -1 +BITMAP +00F8 +3F00 +0100 +0100 +FFFE +0540 +0920 +3018 +C106 +0100 +0280 +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni79C3 +ENCODING 31171 +BBX 15 16 0 -2 +BITMAP +0070 +1F80 +0100 +0100 +7FFC +0540 +0920 +3118 +C006 +0FC0 +0840 +0840 +0844 +1044 +203C +4000 +ENDCHAR +STARTCHAR uni79C4 +ENCODING 31172 +BBX 15 16 0 -2 +BITMAP +0400 +0EFC +7804 +0808 +0810 +FF20 +0820 +19FE +1C20 +2A20 +2A20 +4820 +8820 +0820 +08A0 +0840 +ENDCHAR +STARTCHAR uni79C5 +ENCODING 31173 +BBX 15 16 0 -2 +BITMAP +0808 +1C3C +F3C0 +1040 +1040 +FC40 +1040 +307E +3BC0 +5440 +5040 +9042 +1042 +1042 +103E +1000 +ENDCHAR +STARTCHAR uni79C6 +ENCODING 31174 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +F020 +1020 +1020 +FC20 +1020 +33FE +3820 +5420 +5420 +9020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni79C7 +ENCODING 31175 +BBX 15 15 1 -1 +BITMAP +1880 +E080 +2080 +2080 +FBF0 +2090 +2090 +7290 +6990 +A890 +A150 +2150 +2112 +2212 +240E +ENDCHAR +STARTCHAR uni79C8 +ENCODING 31176 +BBX 14 15 1 -1 +BITMAP +0C20 +F020 +1020 +1020 +FD24 +1124 +1124 +3924 +3524 +5524 +5124 +9124 +1124 +11FC +1000 +ENDCHAR +STARTCHAR uni79C9 +ENCODING 31177 +BBX 15 15 1 -1 +BITMAP +0070 +3F80 +0100 +FFFE +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni79CA +ENCODING 31178 +BBX 15 15 1 -1 +BITMAP +00F8 +3F00 +0100 +FFFE +0540 +0920 +3118 +C106 +00F0 +3F00 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni79CB +ENCODING 31179 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +2044 +2244 +FA44 +2248 +2448 +7450 +6840 +A8A0 +A0A0 +2110 +2208 +2404 +2802 +ENDCHAR +STARTCHAR uni79CC +ENCODING 31180 +BBX 15 15 1 -1 +BITMAP +1018 +10E0 +1020 +5220 +5220 +95FE +9020 +1070 +1070 +2868 +28A8 +24A4 +4522 +4020 +8020 +ENDCHAR +STARTCHAR uni79CD +ENCODING 31181 +BBX 15 15 1 -1 +BITMAP +1820 +E020 +2020 +23FE +FA22 +2222 +2222 +7222 +6BFE +A820 +A020 +2020 +2020 +2020 +2020 +ENDCHAR +STARTCHAR uni79CE +ENCODING 31182 +BBX 15 16 0 -2 +BITMAP +0810 +1C90 +F090 +1088 +1108 +FD04 +1204 +35FA +3888 +5488 +5488 +9088 +1108 +1108 +1228 +1410 +ENDCHAR +STARTCHAR uni79CF +ENCODING 31183 +BBX 15 16 0 -2 +BITMAP +0808 +1C3C +F1E0 +1020 +1020 +FC3C +11E0 +3820 +3420 +503E +53E0 +9020 +1022 +1022 +1022 +101E +ENDCHAR +STARTCHAR uni79D0 +ENCODING 31184 +BBX 15 16 0 -2 +BITMAP +0800 +1C00 +F1FC +1000 +1000 +FC00 +13FE +3020 +3820 +5440 +5440 +9088 +1104 +13FE +1102 +1000 +ENDCHAR +STARTCHAR uni79D1 +ENCODING 31185 +BBX 15 15 1 -1 +BITMAP +0C08 +7108 +1088 +1048 +FC08 +1108 +3088 +3048 +5808 +540E +9078 +1388 +1008 +1008 +1008 +ENDCHAR +STARTCHAR uni79D2 +ENCODING 31186 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +2150 +2148 +FA44 +2442 +2040 +7044 +6844 +A8C8 +A008 +2010 +2020 +20C0 +2300 +ENDCHAR +STARTCHAR uni79D3 +ENCODING 31187 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F020 +13FE +1020 +FC20 +1020 +31FC +3884 +5488 +5448 +9050 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni79D4 +ENCODING 31188 +BBX 15 15 1 -1 +BITMAP +0C40 +F040 +13FE +1000 +FC00 +10F0 +1090 +3890 +3490 +5490 +5090 +9110 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni79D5 +ENCODING 31189 +BBX 15 15 1 -1 +BITMAP +1A20 +E220 +2220 +2220 +FA24 +23A8 +2230 +7220 +6A20 +AA20 +A220 +2220 +2222 +23A2 +2E1E +ENDCHAR +STARTCHAR uni79D6 +ENCODING 31190 +BBX 15 15 1 -1 +BITMAP +1818 +E3E0 +2220 +2220 +FA20 +2220 +23FE +7220 +6A20 +AA10 +A210 +2210 +220A +23CA +2E04 +ENDCHAR +STARTCHAR uni79D7 +ENCODING 31191 +BBX 15 16 0 -2 +BITMAP +0808 +1C3C +F1E0 +1020 +1020 +FC20 +13FE +3020 +3820 +5450 +5450 +9050 +1088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni79D8 +ENCODING 31192 +BBX 15 15 1 -1 +BITMAP +1880 +E040 +20A8 +2088 +FC90 +2090 +22A0 +72A8 +6AC4 +A4C2 +A480 +2180 +2284 +2C44 +203C +ENDCHAR +STARTCHAR uni79D9 +ENCODING 31193 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F020 +1020 +13FE +FC20 +1020 +3020 +39FC +5504 +5504 +9104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni79DA +ENCODING 31194 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F124 +10A4 +10A8 +FC20 +11FC +3820 +3420 +5020 +53FE +9020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni79DB +ENCODING 31195 +BBX 15 16 0 -2 +BITMAP +0810 +1C10 +F010 +11FE +1112 +FD14 +1110 +31FC +3944 +5544 +5528 +9128 +1110 +1228 +1244 +1482 +ENDCHAR +STARTCHAR uni79DC +ENCODING 31196 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +F104 +1104 +1104 +FDFC +1100 +3140 +3944 +5548 +5570 +9140 +1142 +1242 +123E +1400 +ENDCHAR +STARTCHAR uni79DD +ENCODING 31197 +BBX 15 16 0 -2 +BITMAP +0838 +1DE0 +F020 +1020 +1020 +FDFC +1020 +3070 +3870 +54A8 +54A8 +9124 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni79DE +ENCODING 31198 +BBX 15 15 1 -1 +BITMAP +0C20 +F020 +1020 +1020 +FFFE +1222 +1222 +3222 +3A22 +57FE +5222 +9222 +1222 +1222 +13FE +ENDCHAR +STARTCHAR uni79DF +ENCODING 31199 +BBX 15 15 1 -1 +BITMAP +1800 +E1F8 +2108 +2108 +F908 +21F8 +2108 +7108 +6908 +A9F8 +A108 +2108 +2108 +2108 +27FE +ENDCHAR +STARTCHAR uni79E0 +ENCODING 31200 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F010 +1010 +1020 +FC20 +1068 +38A4 +3522 +5222 +5020 +9020 +1020 +1000 +13FE +1000 +ENDCHAR +STARTCHAR uni79E1 +ENCODING 31201 +BBX 15 15 1 -1 +BITMAP +1890 +E088 +2088 +27FE +F880 +2080 +2088 +7148 +6950 +A950 +A220 +2420 +2850 +2088 +2306 +ENDCHAR +STARTCHAR uni79E2 +ENCODING 31202 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F050 +1050 +1088 +FD24 +1212 +3010 +39FC +5404 +5408 +9088 +1050 +1020 +1010 +1010 +ENDCHAR +STARTCHAR uni79E3 +ENCODING 31203 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +2040 +2FFE +F840 +2040 +2040 +77FC +6950 +A950 +A248 +2444 +2842 +2040 +2040 +ENDCHAR +STARTCHAR uni79E4 +ENCODING 31204 +BBX 15 15 1 -1 +BITMAP +0C00 +F1FC +1020 +10A8 +FCA8 +1124 +1222 +3820 +37FE +5420 +9020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni79E5 +ENCODING 31205 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F020 +1020 +103E +FC20 +1020 +3020 +39FC +5504 +5504 +9104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni79E6 +ENCODING 31206 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0280 +FFFE +3030 +CFCE +0100 +7FFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni79E7 +ENCODING 31207 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +2040 +23F8 +FA48 +2248 +2248 +7248 +6FFE +A840 +A0A0 +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni79E8 +ENCODING 31208 +BBX 15 16 0 -2 +BITMAP +0880 +1C80 +F080 +10FE +1140 +FD40 +1240 +307C +3840 +5440 +5440 +907C +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni79E9 +ENCODING 31209 +BBX 15 15 1 -1 +BITMAP +1840 +E240 +2240 +23FC +F440 +2440 +2040 +77FE +6840 +A840 +A0A0 +2090 +2108 +2204 +2402 +ENDCHAR +STARTCHAR uni79EA +ENCODING 31210 +BBX 15 16 0 -2 +BITMAP +0804 +1C1E +F1F0 +1110 +1110 +FD10 +1110 +31FE +3910 +5510 +5510 +9108 +110A +114A +11A6 +1112 +ENDCHAR +STARTCHAR uni79EB +ENCODING 31211 +BBX 15 15 1 -1 +BITMAP +0C48 +F044 +1044 +13FE +FC40 +1040 +1248 +3A48 +3648 +5248 +524A +944A +144E +1040 +1040 +ENDCHAR +STARTCHAR uni79EC +ENCODING 31212 +BBX 14 15 1 -1 +BITMAP +1800 +E3FC +2200 +2200 +FA00 +23F8 +2208 +7208 +6A08 +ABF8 +A200 +2200 +2200 +2200 +23FC +ENDCHAR +STARTCHAR uni79ED +ENCODING 31213 +BBX 15 15 1 -1 +BITMAP +0C20 +F020 +1026 +11F8 +FD20 +1120 +1120 +39FE +3422 +5462 +5062 +90A2 +1122 +1224 +1020 +ENDCHAR +STARTCHAR uni79EE +ENCODING 31214 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F040 +1040 +1088 +FD04 +13FE +3002 +3800 +55FC +5504 +9104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni79EF +ENCODING 31215 +BBX 15 16 0 -2 +BITMAP +0400 +0E00 +78FC +0884 +0884 +FF84 +0884 +1884 +1CFC +2A84 +2A00 +4848 +8844 +0884 +0882 +0902 +ENDCHAR +STARTCHAR uni79F0 +ENCODING 31216 +BBX 15 15 1 -1 +BITMAP +1880 +E080 +2080 +21FE +FA22 +2424 +2020 +7128 +6928 +A924 +A224 +2222 +2422 +2020 +20E0 +ENDCHAR +STARTCHAR uni79F1 +ENCODING 31217 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F102 +1102 +117A +FD02 +1102 +317A +394A +554A +554A +917A +1102 +1102 +110A +1104 +ENDCHAR +STARTCHAR uni79F2 +ENCODING 31218 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F020 +11FC +1020 +FC20 +13FE +3008 +3808 +55FE +5408 +9088 +1048 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni79F3 +ENCODING 31219 +BBX 15 16 0 -2 +BITMAP +0808 +1C3C +F1E0 +1020 +1020 +FDFE +1020 +3020 +3820 +55FC +5504 +9104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni79F4 +ENCODING 31220 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F050 +1088 +1104 +FE02 +11FC +3000 +3800 +55FC +5504 +9104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni79F5 +ENCODING 31221 +BBX 14 16 0 -2 +BITMAP +0800 +1DFC +F104 +1124 +1124 +FD24 +11FC +3124 +3924 +5554 +554C +918C +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni79F6 +ENCODING 31222 +BBX 15 16 0 -2 +BITMAP +0100 +4100 +21FC +0A44 +1448 +E0A0 +2110 +2608 +00E0 +1F00 +0100 +7FFC +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni79F7 +ENCODING 31223 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F020 +1040 +1088 +FD04 +11FE +3022 +3820 +5420 +55FE +9020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni79F8 +ENCODING 31224 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F020 +13FE +1020 +FC20 +11FC +3000 +3800 +55FC +5504 +9104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni79F9 +ENCODING 31225 +BBX 15 16 0 -2 +BITMAP +0080 +1888 +709C +1170 +1110 +FB10 +1510 +3110 +39FE +5510 +5110 +9110 +1110 +1110 +117C +1100 +ENDCHAR +STARTCHAR uni79FA +ENCODING 31226 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F3FE +1202 +1000 +FC38 +13C0 +3840 +3440 +507C +53C0 +9040 +1042 +1042 +103E +1000 +ENDCHAR +STARTCHAR uni79FB +ENCODING 31227 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +20F8 +2310 +F890 +2060 +20D0 +731E +6822 +A044 +A1A4 +2018 +2010 +2060 +2380 +ENDCHAR +STARTCHAR uni79FC +ENCODING 31228 +BBX 15 16 0 -2 +BITMAP +0820 +1D20 +F120 +11FC +1120 +FE20 +1020 +33FE +3870 +54A8 +50A8 +9124 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni79FD +ENCODING 31229 +BBX 14 16 0 -2 +BITMAP +0820 +1D24 +F124 +1124 +11FC +FC40 +1040 +38FC +3504 +5284 +5048 +9050 +1020 +1040 +1080 +1300 +ENDCHAR +STARTCHAR uni79FE +ENCODING 31230 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F020 +13FE +1242 +FC44 +10A0 +38A2 +35A4 +5298 +5490 +9088 +1084 +10A2 +10C0 +1080 +ENDCHAR +STARTCHAR uni79FF +ENCODING 31231 +BBX 15 16 0 -2 +BITMAP +0828 +1C24 +F3FE +1020 +1020 +FDFC +1124 +3124 +39FC +5524 +5524 +91FC +1124 +1124 +1124 +110C +ENDCHAR +STARTCHAR uni7A00 +ENCODING 31232 +BBX 15 15 1 -1 +BITMAP +1908 +E090 +2060 +219C +FE80 +2080 +27FE +7120 +6BFC +A524 +A924 +2124 +212C +2020 +2020 +ENDCHAR +STARTCHAR uni7A01 +ENCODING 31233 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0000 +1FF0 +1010 +1FF0 +0000 +7FFE +4002 +8074 +1F80 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni7A02 +ENCODING 31234 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F1FC +1104 +1104 +FDFC +1104 +3104 +39FC +5520 +5522 +9114 +1108 +1144 +1182 +1100 +ENDCHAR +STARTCHAR uni7A03 +ENCODING 31235 +BBX 15 15 1 -1 +BITMAP +0C1C +F1E8 +1144 +1222 +FE22 +11FC +1008 +3810 +3420 +57FE +5020 +9020 +1020 +1020 +10E0 +ENDCHAR +STARTCHAR uni7A04 +ENCODING 31236 +BBX 15 16 0 -2 +BITMAP +0840 +1C40 +F088 +1104 +13FE +FC02 +1088 +3144 +3A42 +54F8 +5188 +9250 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni7A05 +ENCODING 31237 +BBX 15 16 0 -2 +BITMAP +0810 +1C90 +F088 +1108 +1204 +FDFA +1108 +3108 +3908 +55F8 +5490 +9090 +1090 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni7A06 +ENCODING 31238 +BBX 15 16 0 -2 +BITMAP +0800 +1CFC +F084 +1084 +1084 +FC84 +10FC +3800 +3400 +55FE +5102 +9102 +1102 +1102 +11FE +1102 +ENDCHAR +STARTCHAR uni7A07 +ENCODING 31239 +BBX 14 16 0 -2 +BITMAP +0800 +1DFC +F124 +1124 +1124 +FDFC +1124 +3164 +3974 +55AC +5524 +9124 +1124 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni7A08 +ENCODING 31240 +BBX 15 15 1 -1 +BITMAP +1800 +E3F8 +2208 +23F8 +FA08 +2208 +23F8 +7000 +6FFC +A040 +A040 +2FFE +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni7A09 +ENCODING 31241 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F020 +1020 +11FC +FD24 +1124 +31FC +3924 +5524 +55FC +9120 +10A0 +1040 +10B0 +130E +ENDCHAR +STARTCHAR uni7A0A +ENCODING 31242 +BBX 15 15 1 -1 +BITMAP +0D08 +F088 +1090 +13FC +FC44 +13FC +1240 +3A40 +37FE +54C2 +50C2 +9142 +1242 +145C +1040 +ENDCHAR +STARTCHAR uni7A0B +ENCODING 31243 +BBX 15 15 1 -1 +BITMAP +1800 +E3F8 +2208 +2208 +FA08 +23F8 +2000 +7000 +6FFC +A840 +A040 +23F8 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni7A0C +ENCODING 31244 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F050 +1088 +1104 +FEFA +1020 +3020 +3BFE +5420 +5528 +9124 +1222 +1422 +10A0 +1040 +ENDCHAR +STARTCHAR uni7A0D +ENCODING 31245 +BBX 14 15 1 -1 +BITMAP +1840 +E148 +2144 +2244 +F840 +23FC +2204 +7204 +6BFC +AA04 +A204 +23FC +2204 +2204 +221C +ENDCHAR +STARTCHAR uni7A0E +ENCODING 31246 +BBX 15 15 1 -1 +BITMAP +1908 +E088 +2090 +23FC +FA04 +2204 +2204 +73FC +6890 +A890 +A090 +2110 +2112 +2212 +240E +ENDCHAR +STARTCHAR uni7A0F +ENCODING 31247 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F048 +1048 +1048 +FDCE +1102 +3102 +3902 +55CE +5048 +9048 +1048 +1048 +13FE +1000 +ENDCHAR +STARTCHAR uni7A10 +ENCODING 31248 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F050 +1088 +1104 +FEFA +1000 +31FC +3954 +5554 +55FC +9154 +1154 +1154 +1104 +110C +ENDCHAR +STARTCHAR uni7A11 +ENCODING 31249 +BBX 15 15 1 -1 +BITMAP +0C20 +F020 +11FC +1020 +FC20 +13FE +1088 +3088 +3B0E +5420 +5020 +91FC +1020 +1020 +13FE +ENDCHAR +STARTCHAR uni7A12 +ENCODING 31250 +BBX 14 16 0 -2 +BITMAP +0800 +1DFC +F104 +1124 +1124 +FDFC +1124 +3124 +3974 +5554 +5554 +9174 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni7A13 +ENCODING 31251 +BBX 15 16 0 -2 +BITMAP +0888 +1C88 +F088 +13FE +1088 +FC88 +17FE +3000 +39FC +5504 +5504 +91FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni7A14 +ENCODING 31252 +BBX 15 15 1 -1 +BITMAP +1840 +E0A0 +2118 +2606 +F9F0 +2000 +23FC +6008 +7010 +A840 +A840 +22A4 +2284 +248A +2478 +ENDCHAR +STARTCHAR uni7A15 +ENCODING 31253 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +27FE +2000 +F9F8 +2108 +21F8 +7000 +6BFC +A818 +A020 +27FE +2020 +2020 +20E0 +ENDCHAR +STARTCHAR uni7A16 +ENCODING 31254 +BBX 15 16 0 -2 +BITMAP +0880 +1C40 +F1FC +1000 +1108 +FC88 +1090 +33FE +3800 +5400 +55FC +9104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni7A17 +ENCODING 31255 +BBX 15 15 1 -1 +BITMAP +1820 +E040 +23FC +2244 +FA44 +23FC +2244 +7284 +6BFC +A110 +A210 +27FE +2010 +2010 +2010 +ENDCHAR +STARTCHAR uni7A18 +ENCODING 31256 +BBX 15 15 1 -1 +BITMAP +1908 +E108 +27FE +2108 +F908 +21F8 +2108 +7108 +69F8 +A908 +A108 +27FE +2080 +2108 +2606 +ENDCHAR +STARTCHAR uni7A19 +ENCODING 31257 +BBX 15 15 1 -1 +BITMAP +1820 +E020 +23FE +2020 +F8F8 +2288 +22F8 +7288 +6A88 +AAF8 +A288 +2288 +22F8 +2200 +23FE +ENDCHAR +STARTCHAR uni7A1A +ENCODING 31258 +BBX 15 15 1 -1 +BITMAP +0C88 +F088 +1090 +11FE +FF10 +1110 +11FC +3910 +3510 +5510 +51FC +9110 +1110 +1110 +11FE +ENDCHAR +STARTCHAR uni7A1B +ENCODING 31259 +BBX 15 15 1 -1 +BITMAP +0C00 +F3FE +1202 +121A +FEE2 +1222 +12FA +3A22 +3672 +56AA +52AA +9222 +1222 +1202 +13FE +ENDCHAR +STARTCHAR uni7A1C +ENCODING 31260 +BBX 15 15 1 -1 +BITMAP +1040 +E040 +23F8 +2040 +FBFC +2090 +2090 +711E +6A80 +A8F8 +A108 +2690 +2060 +2090 +270E +ENDCHAR +STARTCHAR uni7A1D +ENCODING 31261 +BBX 15 16 0 -2 +BITMAP +1000 +3BDE +E252 +2252 +2252 +FBDE +2252 +3252 +6A52 +63DE +A252 +2252 +2252 +2252 +2552 +28A6 +ENDCHAR +STARTCHAR uni7A1E +ENCODING 31262 +BBX 15 15 1 -1 +BITMAP +0C00 +F1FC +1124 +1124 +FDFC +1124 +1124 +31FC +3820 +57FE +54A8 +90A8 +1124 +1222 +1020 +ENDCHAR +STARTCHAR uni7A1F +ENCODING 31263 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +1010 +17D0 +1450 +17D0 +1010 +1FF0 +000C +7FF0 +0100 +FFFE +0920 +711C +ENDCHAR +STARTCHAR uni7A20 +ENCODING 31264 +BBX 14 15 1 -1 +BITMAP +1800 +E7FC +2444 +2444 +FDF4 +2444 +6444 +75F4 +6C44 +ADF4 +A514 +2514 +25F4 +2404 +281C +ENDCHAR +STARTCHAR uni7A21 +ENCODING 31265 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F3FE +1000 +1088 +FC88 +1154 +3222 +3800 +5420 +53FE +9020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni7A22 +ENCODING 31266 +BBX 15 16 0 -2 +BITMAP +1014 +3812 +E010 +27FE +2010 +F810 +23D2 +3252 +6A52 +6254 +A3D4 +2008 +20EA +271A +2226 +2042 +ENDCHAR +STARTCHAR uni7A23 +ENCODING 31267 +BBX 15 16 0 -2 +BITMAP +2008 +203C +7DE0 +4420 +8820 +7C20 +55FE +5420 +7C70 +5468 +54A8 +7CA4 +0122 +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni7A24 +ENCODING 31268 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F3FE +1000 +1000 +FDFC +1104 +3104 +39FC +5420 +5528 +9124 +1222 +1422 +10A0 +1040 +ENDCHAR +STARTCHAR uni7A25 +ENCODING 31269 +BBX 15 16 0 -2 +BITMAP +0070 +1F80 +0100 +7FFC +0540 +0920 +3118 +C006 +1490 +2248 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni7A26 +ENCODING 31270 +BBX 15 16 0 -2 +BITMAP +0840 +1C40 +F1FC +1084 +13FE +FC00 +11FC +3904 +35FC +5020 +53FE +9020 +1220 +13FE +1020 +1020 +ENDCHAR +STARTCHAR uni7A27 +ENCODING 31271 +BBX 15 16 0 -2 +BITMAP +0880 +1C9E +F3EA +108A +11CA +FC8A +13EA +3892 +34A6 +5020 +53FE +9020 +1050 +1088 +1104 +1602 +ENDCHAR +STARTCHAR uni7A28 +ENCODING 31272 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F1FE +1102 +1102 +FDFE +1100 +3900 +35FE +55AA +51AA +92FE +12AA +12AA +14A2 +1086 +ENDCHAR +STARTCHAR uni7A29 +ENCODING 31273 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F122 +11FE +1122 +FDFE +1000 +30FC +3884 +54FC +5484 +90FC +1084 +1084 +1094 +1088 +ENDCHAR +STARTCHAR uni7A2A +ENCODING 31274 +BBX 15 16 0 -2 +BITMAP +0900 +1D00 +F1FE +1200 +15FC +FD04 +11FC +3104 +39FC +5480 +54FC +9108 +1290 +1060 +1198 +1606 +ENDCHAR +STARTCHAR uni7A2B +ENCODING 31275 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F000 +10FC +1084 +FC84 +10FC +3000 +39FE +5522 +5522 +91FE +1122 +1122 +11FE +1102 +ENDCHAR +STARTCHAR uni7A2C +ENCODING 31276 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +F020 +1040 +11FC +FD54 +1154 +3954 +3544 +552C +5020 +93FE +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni7A2D +ENCODING 31277 +BBX 15 15 1 -1 +BITMAP +1A10 +E216 +2398 +2210 +FA10 +2212 +23AE +6640 +73FC +AA04 +AA04 +23FC +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni7A2E +ENCODING 31278 +BBX 15 15 1 -1 +BITMAP +1838 +E3C0 +2040 +27FC +F840 +23F8 +2248 +73F8 +6A48 +A3F8 +A040 +23F8 +2040 +2040 +2FFE +ENDCHAR +STARTCHAR uni7A2F +ENCODING 31279 +BBX 15 16 0 -2 +BITMAP +0800 +1C88 +F252 +1222 +1252 +FE8A +1202 +3BFE +3488 +5144 +527A +9088 +1150 +1020 +10D8 +1706 +ENDCHAR +STARTCHAR uni7A30 +ENCODING 31280 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +F012 +1090 +109C +FC90 +117E +3200 +38FC +5484 +50FC +9084 +10FC +1084 +1094 +1088 +ENDCHAR +STARTCHAR uni7A31 +ENCODING 31281 +BBX 15 15 1 -1 +BITMAP +1838 +E7C8 +2244 +2422 +FC22 +2040 +23FC +7244 +6BFC +AA44 +A244 +2FFE +2204 +2204 +223C +ENDCHAR +STARTCHAR uni7A32 +ENCODING 31282 +BBX 15 15 1 -1 +BITMAP +181C +E3E0 +2000 +2242 +F922 +2124 +6008 +727C +AA44 +A244 +A27C +2244 +2244 +2244 +227C +ENDCHAR +STARTCHAR uni7A33 +ENCODING 31283 +BBX 15 16 0 -2 +BITMAP +0840 +1CF8 +F108 +1210 +11FC +FC04 +1004 +39FC +3404 +5404 +51FC +9040 +1024 +12A2 +128A +1478 +ENDCHAR +STARTCHAR uni7A34 +ENCODING 31284 +BBX 15 16 0 -2 +BITMAP +0888 +1C50 +F000 +11FE +1050 +FDFC +1054 +33FE +3854 +55FC +5450 +90D8 +1154 +1252 +1050 +1050 +ENDCHAR +STARTCHAR uni7A35 +ENCODING 31285 +BBX 15 16 0 -2 +BITMAP +0884 +1C44 +F048 +13FE +1084 +FC84 +1108 +314A +3A52 +579C +5084 +9108 +1108 +1252 +13DE +1042 +ENDCHAR +STARTCHAR uni7A36 +ENCODING 31286 +BBX 15 16 0 -2 +BITMAP +0814 +1C12 +F010 +13FE +1014 +FC18 +1390 +32B4 +3A98 +5690 +53B2 +900C +10CA +171A +1066 +1002 +ENDCHAR +STARTCHAR uni7A37 +ENCODING 31287 +BBX 15 15 1 -1 +BITMAP +1800 +E1FC +2124 +21FC +F924 +21FC +2090 +711E +6A80 +A8FC +A108 +2390 +2060 +20D8 +2706 +ENDCHAR +STARTCHAR uni7A38 +ENCODING 31288 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +27FE +2040 +F890 +23E4 +204C +67F2 +7000 +ABFC +A244 +23FC +2244 +2244 +23FC +ENDCHAR +STARTCHAR uni7A39 +ENCODING 31289 +BBX 15 15 1 -1 +BITMAP +0D18 +F1E0 +1102 +10FE +FC00 +12FC +1284 +3AFC +3684 +52FC +5284 +93FE +1040 +1088 +1306 +ENDCHAR +STARTCHAR uni7A3A +ENCODING 31290 +BBX 15 16 0 -2 +BITMAP +1000 +3BFC +E204 +2204 +23FC +FA40 +2220 +33FC +6A88 +6250 +A3FE +2220 +25FC +2420 +2820 +2020 +ENDCHAR +STARTCHAR uni7A3B +ENCODING 31291 +BBX 15 15 1 -1 +BITMAP +1838 +E3C4 +2242 +2422 +FC20 +2000 +2040 +7080 +6B1C +AA04 +A204 +239C +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni7A3C +ENCODING 31292 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +27FC +2404 +FBF8 +2040 +20C4 +7324 +6868 +A9A0 +A630 +2068 +21A6 +2620 +20C0 +ENDCHAR +STARTCHAR uni7A3D +ENCODING 31293 +BBX 15 15 1 -1 +BITMAP +18A0 +E090 +27FC +20A0 +F922 +231E +25E0 +7104 +69FC +A800 +A3FC +2204 +23FC +2204 +23FC +ENDCHAR +STARTCHAR uni7A3E +ENCODING 31294 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +0FE0 +0000 +7FFC +4824 +4FEC +0000 +1FF0 +0100 +FFFE +0920 +711C +ENDCHAR +STARTCHAR uni7A3F +ENCODING 31295 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +27FE +2000 +F9F8 +2108 +21F8 +7000 +6BFC +AA04 +A2F4 +2294 +22F4 +2204 +220C +ENDCHAR +STARTCHAR uni7A40 +ENCODING 31296 +BBX 15 15 1 -1 +BITMAP +0800 +0878 +FF48 +084A +7E4A +008E +FF00 +817C +BD44 +0844 +7E28 +2C28 +2A10 +4828 +88C6 +ENDCHAR +STARTCHAR uni7A41 +ENCODING 31297 +BBX 15 16 0 -2 +BITMAP +0888 +1C88 +F1FE +1088 +1000 +FDFE +1088 +3088 +38F8 +5488 +54F8 +9088 +109E +11E8 +1008 +1008 +ENDCHAR +STARTCHAR uni7A42 +ENCODING 31298 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +27FE +2040 +FBFC +2244 +23FC +7244 +6A44 +ABFC +A040 +22A4 +2282 +248A +2478 +ENDCHAR +STARTCHAR uni7A43 +ENCODING 31299 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +27FC +2404 +FD14 +2208 +2444 +70A0 +6910 +AA08 +A7FE +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni7A44 +ENCODING 31300 +BBX 15 16 0 -2 +BITMAP +1100 +3910 +E3DC +2254 +2554 +FA88 +2108 +32F4 +6C02 +6000 +A3FC +2040 +2150 +2248 +2544 +2080 +ENDCHAR +STARTCHAR uni7A45 +ENCODING 31301 +BBX 15 16 0 -2 +BITMAP +0820 +1C10 +F1FE +1110 +117C +FD14 +11FE +3914 +357C +5510 +5192 +9154 +1138 +1254 +1292 +1430 +ENDCHAR +STARTCHAR uni7A46 +ENCODING 31302 +BBX 15 15 1 -1 +BITMAP +1840 +E080 +23FC +2204 +FBFC +2204 +23FC +7148 +6E56 +A0E0 +A708 +2072 +238C +2070 +27C0 +ENDCHAR +STARTCHAR uni7A47 +ENCODING 31303 +BBX 15 15 1 -1 +BITMAP +0C40 +70B0 +10D0 +1108 +FAD6 +177A +1050 +3888 +3726 +5440 +5190 +9064 +1188 +1030 +13C0 +ENDCHAR +STARTCHAR uni7A48 +ENCODING 31304 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2210 +2F7C +2638 +2B54 +3292 +2038 +27C0 +2040 +2FFE +2150 +4248 +4C46 +8040 +ENDCHAR +STARTCHAR uni7A49 +ENCODING 31305 +BBX 15 15 1 -1 +BITMAP +1800 +E3FE +2202 +23FE +FA00 +22D6 +2210 +72D6 +6A00 +AA50 +A2FC +2210 +24FE +2010 +2010 +ENDCHAR +STARTCHAR uni7A4A +ENCODING 31306 +BBX 15 16 0 -2 +BITMAP +1000 +E7BE +2488 +2488 +27A8 +FCA8 +24A8 +37BE +6C10 +6518 +A498 +25A8 +26AA +244A +2046 +2080 +ENDCHAR +STARTCHAR uni7A4B +ENCODING 31307 +BBX 15 16 0 -2 +BITMAP +1000 +3BDE +E042 +2252 +214A +FA52 +2028 +30C4 +6B12 +6060 +A188 +2032 +21C4 +2018 +2060 +2380 +ENDCHAR +STARTCHAR uni7A4C +ENCODING 31308 +BBX 15 15 1 -1 +BITMAP +200C +3CF0 +2410 +4810 +FEFE +5210 +5210 +7E30 +5238 +5254 +7E52 +0092 +5510 +5410 +9410 +ENDCHAR +STARTCHAR uni7A4D +ENCODING 31309 +BBX 15 15 1 -1 +BITMAP +1820 +E020 +23FE +2020 +F9FC +2020 +23FE +7104 +69FC +A904 +A1FC +2104 +21FC +2088 +2306 +ENDCHAR +STARTCHAR uni7A4E +ENCODING 31310 +BBX 15 15 1 -1 +BITMAP +4000 +49FC +7020 +40F8 +4488 +3CF8 +0488 +7888 +10F8 +FE88 +3088 +58F8 +5440 +9098 +1306 +ENDCHAR +STARTCHAR uni7A4F +ENCODING 31311 +BBX 15 15 1 -1 +BITMAP +181C +E7E0 +2484 +2244 +F248 +27FC +2004 +77FC +6804 +A7FC +A048 +2524 +2522 +288A +2878 +ENDCHAR +STARTCHAR uni7A50 +ENCODING 31312 +BBX 15 15 1 -1 +BITMAP +18F0 +E120 +27F8 +2248 +FBF8 +2248 +23F8 +7040 +6FFC +A444 +A7FC +2444 +27FC +2042 +203E +ENDCHAR +STARTCHAR uni7A51 +ENCODING 31313 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F3FE +1020 +1124 +FCA8 +13FE +3000 +39FC +5504 +5574 +9154 +1174 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni7A52 +ENCODING 31314 +BBX 15 16 0 -2 +BITMAP +0070 +1F80 +0100 +FFFE +0540 +1930 +E20E +1FF0 +1010 +1FF0 +1010 +1FFC +1000 +1FFC +0004 +492C +ENDCHAR +STARTCHAR uni7A53 +ENCODING 31315 +BBX 15 16 0 -2 +BITMAP +1000 +3BFE +E222 +23FE +2222 +FBFE +2088 +3088 +6BFE +6088 +A088 +27FE +2000 +2088 +2104 +2202 +ENDCHAR +STARTCHAR uni7A54 +ENCODING 31316 +BBX 15 16 0 -2 +BITMAP +0088 +1888 +71FC +1088 +1088 +FBFE +1020 +31FC +3924 +55FC +5124 +91FC +1000 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni7A55 +ENCODING 31317 +BBX 15 16 0 -2 +BITMAP +08A0 +1C90 +F1FE +1320 +11FC +FD20 +11FC +3920 +35FE +5500 +5020 +93FE +1070 +10A8 +1326 +1020 +ENDCHAR +STARTCHAR uni7A56 +ENCODING 31318 +BBX 15 15 1 -1 +BITMAP +1A48 +E248 +2450 +2D74 +F248 +2554 +2EFA +6048 +77FE +AC40 +A624 +2528 +2912 +286A +3184 +ENDCHAR +STARTCHAR uni7A57 +ENCODING 31319 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +27FC +2040 +FBF8 +2248 +23F8 +7248 +6BF8 +A848 +A3FC +2044 +22A4 +228A +2478 +ENDCHAR +STARTCHAR uni7A58 +ENCODING 31320 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +F1FC +1020 +13FE +FD08 +139C +3108 +3988 +563E +5000 +93FE +1090 +1090 +1112 +120E +ENDCHAR +STARTCHAR uni7A59 +ENCODING 31321 +BBX 15 15 1 -1 +BITMAP +18A0 +E4A4 +22A8 +27FC +F910 +20A0 +27FC +7040 +6BF8 +A040 +AFFE +A0A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni7A5A +ENCODING 31322 +BBX 15 16 0 -2 +BITMAP +0818 +1DE0 +F040 +13FE +1088 +FD74 +1252 +3070 +3800 +55FC +5504 +9174 +1154 +1174 +1104 +110C +ENDCHAR +STARTCHAR uni7A5B +ENCODING 31323 +BBX 15 16 0 -2 +BITMAP +0890 +1C88 +F1FE +1110 +1310 +FDFE +1110 +3910 +35FE +5510 +5110 +91FE +1100 +12A4 +1252 +1452 +ENDCHAR +STARTCHAR uni7A5C +ENCODING 31324 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +23F8 +2110 +F7FC +2000 +23F8 +7248 +6BF8 +AA48 +A3F8 +2040 +23F8 +2040 +2FFE +ENDCHAR +STARTCHAR uni7A5D +ENCODING 31325 +BBX 15 15 1 -1 +BITMAP +0C00 +F3FC +1204 +13FC +FE04 +13FC +1000 +37FE +3A40 +57FE +5252 +93D2 +124C +13C8 +1656 +ENDCHAR +STARTCHAR uni7A5E +ENCODING 31326 +BBX 15 16 0 -2 +BITMAP +0880 +1CF8 +F110 +13FC +1524 +FDFC +1124 +31FC +3800 +57FE +5400 +91FC +1104 +11FC +1104 +11FC +ENDCHAR +STARTCHAR uni7A5F +ENCODING 31327 +BBX 15 15 1 -1 +BITMAP +1830 +E488 +2504 +22FA +FC20 +24C4 +2228 +6050 +7698 +AA34 +A2D2 +2210 +2230 +2500 +28FE +ENDCHAR +STARTCHAR uni7A60 +ENCODING 31328 +BBX 15 15 1 -1 +BITMAP +18A0 +E3F8 +22A8 +23F8 +FAA8 +23F8 +2000 +67FC +7400 +ADF8 +A400 +27FE +2524 +29D8 +2306 +ENDCHAR +STARTCHAR uni7A61 +ENCODING 31329 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +2FFE +2248 +F248 +2554 +2FFE +7000 +6FFC +A404 +A5F4 +2514 +25F4 +2404 +27FC +ENDCHAR +STARTCHAR uni7A62 +ENCODING 31330 +BBX 15 15 1 -1 +BITMAP +1840 +E27C +2240 +2240 +FFFE +2014 +27FE +7410 +77F4 +AC94 +A6A8 +24B8 +24DA +272A +28C4 +ENDCHAR +STARTCHAR uni7A63 +ENCODING 31331 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +27FE +2108 +FE06 +2090 +23FC +7090 +6BFC +A890 +A7FE +2090 +2714 +21C8 +2706 +ENDCHAR +STARTCHAR uni7A64 +ENCODING 31332 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +F020 +13FE +1222 +FDAC +1020 +31AC +3800 +57FE +5020 +91FC +1154 +1154 +1154 +110C +ENDCHAR +STARTCHAR uni7A65 +ENCODING 31333 +BBX 15 16 0 -2 +BITMAP +1140 +3A4C +E264 +2244 +234C +FA64 +22A4 +33AC +6AA4 +62A4 +A7FE +2000 +2110 +2108 +2204 +2404 +ENDCHAR +STARTCHAR uni7A66 +ENCODING 31334 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F3FE +1202 +11FC +FD48 +1250 +39FC +3704 +55FC +5104 +91FC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni7A67 +ENCODING 31335 +BBX 15 15 1 -1 +BITMAP +1840 +E040 +2FFE +20A0 +FF5E +2554 +2554 +6B5A +7208 +A3F8 +A208 +23F8 +2208 +2408 +2808 +ENDCHAR +STARTCHAR uni7A68 +ENCODING 31336 +BBX 15 16 0 -2 +BITMAP +0C20 +71FC +1124 +FDFC +1020 +3BFE +5400 +91FC +0104 +39FC +2904 +29FC +2904 +4DFC +4888 +8104 +ENDCHAR +STARTCHAR uni7A69 +ENCODING 31337 +BBX 15 15 1 -1 +BITMAP +3038 +E7C8 +2444 +2822 +F7FC +2040 +2FFE +7008 +6BF8 +A808 +A3F8 +2000 +2544 +252A +28FA +ENDCHAR +STARTCHAR uni7A6A +ENCODING 31338 +BBX 15 15 1 -1 +BITMAP +3000 +EFFE +2248 +2444 +FFFE +2444 +26EC +6554 +76EC +AC44 +A6EC +2554 +26EC +2444 +244C +ENDCHAR +STARTCHAR uni7A6B +ENCODING 31339 +BBX 15 15 1 -1 +BITMAP +1888 +E7FE +2120 +23FE +FA20 +23FC +2220 +73FC +6A20 +ABFE +A000 +27FC +2108 +20F0 +270E +ENDCHAR +STARTCHAR uni7A6C +ENCODING 31340 +BBX 15 16 0 -2 +BITMAP +1040 +3820 +E7FE +2488 +25FC +FC88 +27FE +3420 +6DFC +6524 +A5FC +2524 +25FC +2400 +2488 +2904 +ENDCHAR +STARTCHAR uni7A6D +ENCODING 31341 +BBX 15 15 1 -1 +BITMAP +0C40 +F0F8 +1310 +11FC +FD24 +11FC +1124 +31FC +3954 +5652 +55FC +9104 +11FC +1104 +11FC +ENDCHAR +STARTCHAR uni7A6E +ENCODING 31342 +BBX 15 16 0 -2 +BITMAP +0840 +1C20 +F3FE +1250 +13FE +FE52 +13FE +3200 +3A94 +56D8 +5290 +92D2 +128E +1400 +1554 +1A2A +ENDCHAR +STARTCHAR uni7A6F +ENCODING 31343 +BBX 15 16 0 -2 +BITMAP +0020 +1BFE +7020 +13AE +12AA +FBAE +1020 +33FE +3800 +57FE +5202 +92FA +128A +12FA +1202 +13FE +ENDCHAR +STARTCHAR uni7A70 +ENCODING 31344 +BBX 15 15 1 -1 +BITMAP +3040 +E040 +2FFE +2000 +F7BC +24A4 +27BC +7110 +6FFC +A910 +A7FE +2190 +2F14 +21C8 +2706 +ENDCHAR +STARTCHAR uni7A71 +ENCODING 31345 +BBX 15 16 0 -2 +BITMAP +001E +1BE0 +7122 +1094 +13FE +FA52 +13FE +3004 +3BC4 +567E +53C4 +9254 +13CC +1284 +12D4 +1348 +ENDCHAR +STARTCHAR uni7A72 +ENCODING 31346 +BBX 15 16 0 -2 +BITMAP +13DE +3800 +E3DE +2252 +235A +FA52 +2020 +33FE +6A50 +63FE +A252 +23FE +2292 +22DC +2292 +24CE +ENDCHAR +STARTCHAR uni7A73 +ENCODING 31347 +BBX 15 16 0 -2 +BITMAP +1528 +E7BE +2948 +27BE +2318 +FDAA +2946 +33FC +6A04 +63FC +A204 +23FC +2204 +23FC +2108 +2204 +ENDCHAR +STARTCHAR uni7A74 +ENCODING 31348 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0200 +FFFC +8004 +8004 +8004 +0840 +0840 +1020 +1020 +2010 +2010 +4008 +8004 +ENDCHAR +STARTCHAR uni7A75 +ENCODING 31349 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +307E +C000 +1FF0 +0060 +0380 +0C00 +1000 +2004 +2004 +1FFC +ENDCHAR +STARTCHAR uni7A76 +ENCODING 31350 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8888 +8888 +1080 +E0F8 +0400 +0400 +FFC0 +0440 +0840 +0844 +3044 +C03C +ENDCHAR +STARTCHAR uni7A77 +ENCODING 31351 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8824 +1010 +2208 +0200 +7FF0 +0210 +0410 +0410 +0810 +1010 +20A0 +4040 +ENDCHAR +STARTCHAR uni7A78 +ENCODING 31352 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +317E +C100 +03F8 +0C08 +3408 +0210 +0120 +00C0 +0700 +7800 +ENDCHAR +STARTCHAR uni7A79 +ENCODING 31353 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +307E +C000 +1FF0 +0010 +1FF0 +1000 +3FF8 +2008 +0008 +00F0 +ENDCHAR +STARTCHAR uni7A7A +ENCODING 31354 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8008 +8908 +0900 +1108 +E0F0 +0000 +0000 +3FE0 +0200 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni7A7B +ENCODING 31355 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8824 +1010 +2FE8 +0100 +0100 +0100 +7FFC +0100 +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni7A7C +ENCODING 31356 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4002 +8824 +1010 +2108 +0100 +7FFC +0540 +0920 +1110 +2108 +C106 +0100 +0100 +ENDCHAR +STARTCHAR uni7A7D +ENCODING 31357 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +307E +C000 +0440 +7FFC +0440 +0440 +FFFE +0440 +1840 +6040 +ENDCHAR +STARTCHAR uni7A7E +ENCODING 31358 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2008 +00F0 +3F00 +0100 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni7A7F +ENCODING 31359 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4444 +187C +E000 +1FF8 +0820 +1020 +3FFC +2220 +0C20 +3020 +C0E0 +ENDCHAR +STARTCHAR uni7A80 +ENCODING 31360 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9114 +2108 +FFFE +0100 +2108 +2108 +2108 +3FF8 +010A +0102 +0102 +00FE +ENDCHAR +STARTCHAR uni7A81 +ENCODING 31361 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4444 +0840 +103E +6100 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni7A82 +ENCODING 31362 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +307E +C900 +1FF8 +2100 +C100 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7A83 +ENCODING 31363 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +103E +E000 +23FC +2C44 +F044 +2044 +2484 +2484 +1D04 +0238 +ENDCHAR +STARTCHAR uni7A84 +ENCODING 31364 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +1840 +E27E +0200 +07FC +1900 +61F8 +0100 +01F8 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7A85 +ENCODING 31365 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4444 +0840 +307E +C000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7A86 +ENCODING 31366 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +01F0 +3E00 +0200 +0100 +7FF8 +0060 +0180 +0E00 +3000 +4800 +87FE +ENDCHAR +STARTCHAR uni7A87 +ENCODING 31367 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +0800 +1FF0 +2010 +5F90 +1090 +1090 +1F90 +1050 +1024 +1004 +0FFC +ENDCHAR +STARTCHAR uni7A88 +ENCODING 31368 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +307E +D020 +1020 +24FC +6824 +1424 +1224 +2D44 +F044 +0198 +ENDCHAR +STARTCHAR uni7A89 +ENCODING 31369 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2008 +1FF0 +0100 +0100 +3FF8 +2108 +2288 +2448 +2808 +2028 +2010 +ENDCHAR +STARTCHAR uni7A8A +ENCODING 31370 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +307E +C000 +007C +1F88 +1108 +1108 +1148 +2124 +21D4 +4E12 +ENDCHAR +STARTCHAR uni7A8B +ENCODING 31371 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2108 +1110 +1110 +1110 +1FF0 +0100 +2108 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni7A8C +ENCODING 31372 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2008 +0C00 +70FC +4084 +4484 +4484 +5C84 +6494 +4888 +0880 +1080 +ENDCHAR +STARTCHAR uni7A8D +ENCODING 31373 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2008 +0000 +7DFE +1040 +1080 +11FC +1004 +1E04 +E004 +4028 +0010 +ENDCHAR +STARTCHAR uni7A8E +ENCODING 31374 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9114 +2208 +1FF0 +1010 +1210 +1150 +1020 +1FFC +0004 +0004 +7FD4 +0008 +ENDCHAR +STARTCHAR uni7A8F +ENCODING 31375 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +1000 +09FC +4820 +2020 +2020 +0BFE +1020 +7020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni7A90 +ENCODING 31376 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +307E +C100 +1FF0 +0100 +7FFC +0100 +1FF8 +0100 +0100 +7FFC +ENDCHAR +STARTCHAR uni7A91 +ENCODING 31377 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2008 +0800 +1FF8 +2100 +0100 +FFFE +0100 +2108 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni7A92 +ENCODING 31378 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4844 +F07E +0000 +7FFC +0420 +08D0 +3F08 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni7A93 +ENCODING 31379 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4840 +123E +E200 +0420 +08F0 +3F08 +0200 +2908 +2894 +4412 +83F0 +ENDCHAR +STARTCHAR uni7A94 +ENCODING 31380 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9214 +0100 +7FFC +0820 +1010 +2448 +4444 +0280 +0100 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni7A95 +ENCODING 31381 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +307E +C080 +2498 +14A0 +0480 +34E0 +C498 +0882 +3082 +C07E +ENDCHAR +STARTCHAR uni7A96 +ENCODING 31382 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +5844 +E17E +1100 +3FF8 +0100 +FFFE +0100 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7A97 +ENCODING 31383 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +317E +C200 +3FF8 +2108 +25E8 +2E28 +21C8 +3E38 +2008 +3FF8 +ENDCHAR +STARTCHAR uni7A98 +ENCODING 31384 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +587E +F000 +1FF8 +0108 +FFFE +0208 +3FF8 +0800 +3FFC +D004 +1FFC +ENDCHAR +STARTCHAR uni7A99 +ENCODING 31385 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +911C +0FD0 +0120 +FFFE +0100 +1FF0 +0820 +30C0 +CFFC +0080 +0280 +0100 +ENDCHAR +STARTCHAR uni7A9A +ENCODING 31386 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9094 +0088 +3FFC +2080 +2088 +3E88 +2250 +2250 +2A24 +4454 +418C +8604 +ENDCHAR +STARTCHAR uni7A9B +ENCODING 31387 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2008 +3E20 +01FE +0024 +7E44 +14E8 +1410 +146A +2586 +2402 +43FE +ENDCHAR +STARTCHAR uni7A9C +ENCODING 31388 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9114 +0100 +3FF8 +2108 +3FF8 +0100 +7FFC +4104 +7FFC +4104 +0100 +0100 +ENDCHAR +STARTCHAR uni7A9D +ENCODING 31389 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2FE8 +0820 +0820 +0FE0 +0100 +3FF8 +2108 +2288 +2448 +2008 +2018 +ENDCHAR +STARTCHAR uni7A9E +ENCODING 31390 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9414 +27E8 +0820 +1040 +2678 +1808 +1008 +1E78 +1008 +1008 +1FF8 +1008 +ENDCHAR +STARTCHAR uni7A9F +ENCODING 31391 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +7FFC +4844 +1040 +FFFE +2008 +3FF8 +2100 +2910 +2FF0 +4100 +5108 +9108 +1FF8 +ENDCHAR +STARTCHAR uni7AA0 +ENCODING 31392 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +FFFE +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni7AA1 +ENCODING 31393 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +3EF8 +0208 +14D0 +0820 +1450 +6288 +3EF8 +0288 +1450 +0820 +3458 +C286 +ENDCHAR +STARTCHAR uni7AA2 +ENCODING 31394 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +0050 +0048 +FFFE +0040 +3E40 +2224 +3E28 +0012 +0E2A +70C6 +0302 +ENDCHAR +STARTCHAR uni7AA3 +ENCODING 31395 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +317E +C100 +3FF8 +0820 +0820 +1550 +2148 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni7AA4 +ENCODING 31396 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +3FF8 +1008 +1FF8 +1008 +1FF8 +2080 +208C +3EF0 +2082 +2682 +387E +ENDCHAR +STARTCHAR uni7AA5 +ENCODING 31397 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +0000 +11FC +7D04 +1124 +1124 +FD24 +1154 +2850 +2490 +4112 +860E +ENDCHAR +STARTCHAR uni7AA6 +ENCODING 31398 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9114 +2FE8 +0100 +7FFC +0484 +1288 +0900 +FFFE +0260 +0410 +1808 +6004 +ENDCHAR +STARTCHAR uni7AA7 +ENCODING 31399 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9114 +01FC +0100 +3FF8 +2008 +3FF8 +2008 +3FF8 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni7AA8 +ENCODING 31400 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4A22 +9114 +3FF8 +0820 +0440 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni7AA9 +ENCODING 31401 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4844 +3FFE +C820 +09E0 +0920 +7FFC +4004 +47C4 +4444 +47C4 +401C +ENDCHAR +STARTCHAR uni7AAA +ENCODING 31402 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4484 +1880 +E07C +2040 +13F8 +C040 +27FC +0040 +13F8 +2040 +4040 +87FC +ENDCHAR +STARTCHAR uni7AAB +ENCODING 31403 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +0800 +7F7C +0824 +3E24 +0844 +7F54 +0888 +0200 +FFFE +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7AAC +ENCODING 31404 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +4844 +F13E +0EE0 +F01E +07C0 +3E24 +3224 +2E48 +3290 +2E48 +2224 +2624 +ENDCHAR +STARTCHAR uni7AAD +ENCODING 31405 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9114 +0920 +7FFC +0540 +1930 +610C +0400 +FFFE +0820 +1E40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni7AAE +ENCODING 31406 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +187E +E400 +3EF8 +2208 +3E78 +2240 +3EFC +2284 +FE04 +0A04 +3204 +C638 +ENDCHAR +STARTCHAR uni7AAF +ENCODING 31407 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +4844 +F07E +0820 +7FFC +0100 +3FF8 +0100 +FFFE +0000 +2888 +4444 +8442 +ENDCHAR +STARTCHAR uni7AB0 +ENCODING 31408 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +5944 +E7FE +7920 +04C0 +0FF8 +F100 +1100 +7FFC +0100 +2108 +3FF8 +ENDCHAR +STARTCHAR uni7AB1 +ENCODING 31409 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9094 +11F8 +2288 +6870 +ABAE +2820 +29FC +2820 +28A8 +2924 +22A4 +2040 +ENDCHAR +STARTCHAR uni7AB2 +ENCODING 31410 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +0800 +4948 +2A28 +0808 +FF48 +182E +2CF8 +4A08 +8808 +0808 +0808 +ENDCHAR +STARTCHAR uni7AB3 +ENCODING 31411 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +F87E +060C +3AF0 +2AA8 +2AA8 +2AA8 +29A8 +2AA8 +4F3A +71C6 +8204 +ENDCHAR +STARTCHAR uni7AB4 +ENCODING 31412 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +0100 +7FFC +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +FFFE +1010 +2008 +ENDCHAR +STARTCHAR uni7AB5 +ENCODING 31413 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9414 +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFC +1000 +1FFC +4924 +8494 +0008 +ENDCHAR +STARTCHAR uni7AB6 +ENCODING 31414 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4824 +F13E +3FF8 +2108 +FFFE +2108 +3FF8 +1110 +FFFE +1820 +07C0 +783C +ENDCHAR +STARTCHAR uni7AB7 +ENCODING 31415 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +0040 +FD9E +4952 +4952 +7952 +4952 +7952 +49DA +5D54 +E890 +0890 +0910 +ENDCHAR +STARTCHAR uni7AB8 +ENCODING 31416 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +00F8 +3F00 +1110 +0920 +FFFE +0920 +3118 +C206 +0900 +2908 +2824 +47E4 +ENDCHAR +STARTCHAR uni7AB9 +ENCODING 31417 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +F87E +0000 +4BFC +4840 +49F8 +7888 +0BFE +F800 +29FC +2904 +4904 +89FC +ENDCHAR +STARTCHAR uni7ABA +ENCODING 31418 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8888 +B0E8 +1000 +11F0 +7910 +11F0 +1110 +FDF0 +2910 +25F0 +40A4 +871C +ENDCHAR +STARTCHAR uni7ABB +ENCODING 31419 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +FFFE +2108 +25E8 +2E28 +2148 +2F88 +2048 +3FF8 +0900 +4894 +87F2 +ENDCHAR +STARTCHAR uni7ABC +ENCODING 31420 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +F97E +2220 +1110 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +7FFC +0D60 +711C +ENDCHAR +STARTCHAR uni7ABD +ENCODING 31421 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +2220 +3C20 +213E +1F42 +2094 +3F10 +4810 +FFA8 +1428 +2244 +4182 +ENDCHAR +STARTCHAR uni7ABE +ENCODING 31422 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +F844 +103E +FE40 +107E +7C42 +0094 +7D10 +0010 +FE10 +1028 +5444 +B282 +ENDCHAR +STARTCHAR uni7ABF +ENCODING 31423 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +F87E +0040 +78FC +4B88 +4850 +50F8 +5726 +49FC +4A20 +59FC +4020 +43FE +ENDCHAR +STARTCHAR uni7AC0 +ENCODING 31424 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9014 +01F8 +FD08 +11F8 +1108 +51F8 +5D08 +51F8 +5090 +5C90 +F112 +060E +ENDCHAR +STARTCHAR uni7AC1 +ENCODING 31425 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +01F0 +3E00 +03F0 +3E00 +03FA +7E02 +01FE +0C20 +703C +1DE2 +F022 +1C1E +ENDCHAR +STARTCHAR uni7AC2 +ENCODING 31426 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9114 +7FFC +0440 +2828 +1FF0 +2828 +CFE6 +0820 +0FE0 +0100 +1110 +2508 +0200 +ENDCHAR +STARTCHAR uni7AC3 +ENCODING 31427 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4864 +1118 +FFFE +1110 +1FF0 +1110 +3FF8 +2108 +3FF8 +2108 +3FF8 +0102 +00FE +ENDCHAR +STARTCHAR uni7AC4 +ENCODING 31428 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +0720 +FCFE +2008 +3CF8 +2008 +3FF8 +2210 +3BD0 +2210 +3BCA +C606 +ENDCHAR +STARTCHAR uni7AC5 +ENCODING 31429 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4844 +FE7E +4240 +7E40 +427E +7E84 +0084 +FF48 +1128 +1E10 +2228 +CEC6 +ENDCHAR +STARTCHAR uni7AC6 +ENCODING 31430 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +0800 +3E7C +2244 +3E44 +227C +3E00 +22FE +FE82 +1282 +2282 +CAFE +0482 +ENDCHAR +STARTCHAR uni7AC7 +ENCODING 31431 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +F87E +0100 +FFFE +0100 +7FFC +4444 +7FFC +1010 +1FF0 +1010 +1FF0 +E00E +ENDCHAR +STARTCHAR uni7AC8 +ENCODING 31432 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4924 +F7DE +0100 +FFFE +2288 +7EFC +4284 +7EFC +4284 +7EFC +0202 +01FE +ENDCHAR +STARTCHAR uni7AC9 +ENCODING 31433 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4822 +9014 +0840 +7E7C +2440 +FF7C +0004 +7E7C +4240 +7E7C +4240 +7E7C +4242 +463E +ENDCHAR +STARTCHAR uni7ACA +ENCODING 31434 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +F87E +0C20 +703C +9220 +55FC +FF24 +1154 +3BFE +3642 +5292 +92EA +1206 +ENDCHAR +STARTCHAR uni7ACB +ENCODING 31435 +BBX 15 14 1 0 +BITMAP +0100 +0100 +0100 +7FFC +0000 +0810 +0810 +0810 +0420 +0420 +0420 +0440 +0040 +FFFE +ENDCHAR +STARTCHAR uni7ACC +ENCODING 31436 +BBX 15 15 1 -1 +BITMAP +1000 +11F0 +1110 +FD10 +0110 +4910 +4910 +4910 +4910 +5110 +1110 +1A10 +E212 +0412 +080E +ENDCHAR +STARTCHAR uni7ACD +ENCODING 31437 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +1020 +FE20 +0020 +4420 +45FC +4420 +2420 +2820 +2820 +1E20 +E020 +0020 +0020 +ENDCHAR +STARTCHAR uni7ACE +ENCODING 31438 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +0420 +0040 +FFFE +0000 +0820 +0820 +FFFE +0820 +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni7ACF +ENCODING 31439 +BBX 14 15 1 -1 +BITMAP +1018 +10E0 +1020 +FE20 +0020 +4420 +45FC +4420 +2420 +2820 +2820 +1E20 +E020 +0020 +0020 +ENDCHAR +STARTCHAR uni7AD0 +ENCODING 31440 +BBX 15 16 0 -2 +BITMAP +1000 +08F8 +0888 +7E88 +0088 +0506 +4600 +45FC +2484 +2884 +2848 +0E50 +F020 +4050 +0088 +0306 +ENDCHAR +STARTCHAR uni7AD1 +ENCODING 31441 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FDFE +0040 +4840 +4850 +4850 +4890 +5090 +1090 +1924 +E124 +023A +00C2 +ENDCHAR +STARTCHAR uni7AD2 +ENCODING 31442 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0810 +0410 +0420 +FFFE +0008 +1F88 +1088 +1088 +1F88 +0008 +0008 +0038 +ENDCHAR +STARTCHAR uni7AD3 +ENCODING 31443 +BBX 15 15 1 -1 +BITMAP +1018 +10E0 +1020 +FE20 +00F8 +4420 +4420 +4420 +25FC +2820 +2820 +1E20 +E022 +0022 +001E +ENDCHAR +STARTCHAR uni7AD4 +ENCODING 31444 +BBX 15 16 0 -2 +BITMAP +2008 +1068 +1388 +FC88 +0088 +0888 +8888 +8BFE +4888 +4888 +5088 +5088 +1D08 +E108 +4208 +0408 +ENDCHAR +STARTCHAR uni7AD5 +ENCODING 31445 +BBX 15 15 1 -1 +BITMAP +1048 +1048 +1048 +FE48 +0084 +4484 +4502 +44FC +2444 +2844 +2844 +1E84 +E084 +0104 +0218 +ENDCHAR +STARTCHAR uni7AD6 +ENCODING 31446 +BBX 15 15 0 -1 +BITMAP +0800 +4BF8 +4A08 +4910 +48A0 +4840 +48B0 +4B0C +0A00 +0100 +3FF8 +0000 +0820 +0440 +FFFE +ENDCHAR +STARTCHAR uni7AD7 +ENCODING 31447 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +0820 +7EA8 +00A4 +04A2 +4522 +4520 +2624 +2824 +2828 +0E08 +F010 +4020 +00C0 +0300 +ENDCHAR +STARTCHAR uni7AD8 +ENCODING 31448 +BBX 15 16 0 -2 +BITMAP +1040 +0840 +0880 +7EFE +0102 +0602 +44F2 +4492 +2492 +2892 +28F2 +0E92 +F002 +4002 +0014 +0008 +ENDCHAR +STARTCHAR uni7AD9 +ENCODING 31449 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +1020 +FE3C +0020 +4420 +4420 +4420 +24FC +2884 +2884 +1E84 +E084 +0084 +00FC +ENDCHAR +STARTCHAR uni7ADA +ENCODING 31450 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +11FC +FF04 +0104 +4400 +45FC +4420 +2420 +2820 +2820 +1E20 +E020 +0020 +0060 +ENDCHAR +STARTCHAR uni7ADB +ENCODING 31451 +BBX 15 16 0 -2 +BITMAP +1020 +0820 +0850 +7E50 +0088 +0524 +4612 +4410 +25FC +2804 +2808 +0E88 +F050 +4020 +0010 +0010 +ENDCHAR +STARTCHAR uni7ADC +ENCODING 31452 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +0440 +FFFE +0000 +1FF0 +1110 +1FF0 +1110 +1110 +1FF2 +0102 +00FE +ENDCHAR +STARTCHAR uni7ADD +ENCODING 31453 +BBX 15 14 1 0 +BITMAP +1020 +1020 +1020 +FEFC +0000 +4488 +4488 +4488 +2488 +2848 +2850 +1E50 +E010 +03FE +ENDCHAR +STARTCHAR uni7ADE +ENCODING 31454 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +3FF8 +0820 +0440 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni7ADF +ENCODING 31455 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0820 +0440 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0442 +1842 +E03E +ENDCHAR +STARTCHAR uni7AE0 +ENCODING 31456 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni7AE1 +ENCODING 31457 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1020 +FE40 +0040 +44FC +4484 +4484 +2484 +28FC +2884 +1E84 +E084 +0084 +00FC +ENDCHAR +STARTCHAR uni7AE2 +ENCODING 31458 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1090 +FD18 +03E4 +4880 +4880 +49F8 +4A40 +5040 +13FE +1CA0 +E110 +0208 +0C06 +ENDCHAR +STARTCHAR uni7AE3 +ENCODING 31459 +BBX 15 15 1 -1 +BITMAP +2080 +2090 +2118 +FBE4 +0050 +4890 +4B1E +4880 +48FC +5108 +1308 +1890 +3060 +C190 +060E +ENDCHAR +STARTCHAR uni7AE4 +ENCODING 31460 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +13FE +0202 +FC44 +0040 +0BFE +8840 +8890 +4890 +5110 +5120 +1A24 +E242 +04FE +0842 +ENDCHAR +STARTCHAR uni7AE5 +ENCODING 31461 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +FFFE +0000 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni7AE6 +ENCODING 31462 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FC20 +0020 +49FC +4924 +4924 +49FC +50A8 +10A8 +1D24 +E222 +0020 +0020 +ENDCHAR +STARTCHAR uni7AE7 +ENCODING 31463 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +10F8 +FC88 +00F8 +4888 +4888 +48F8 +488A +508C +13F8 +1828 +E0C8 +0708 +0018 +ENDCHAR +STARTCHAR uni7AE8 +ENCODING 31464 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +103E +FC20 +01FC +4904 +49FC +4904 +4904 +51FC +1020 +1BFE +E020 +0020 +0020 +ENDCHAR +STARTCHAR uni7AE9 +ENCODING 31465 +BBX 15 15 0 -1 +BITMAP +2020 +1010 +11FE +FD02 +0204 +08F8 +8888 +8888 +48F8 +4888 +5088 +50F8 +1C88 +E088 +43FE +ENDCHAR +STARTCHAR uni7AEA +ENCODING 31466 +BBX 15 14 1 -1 +BITMAP +7EFC +4844 +7E44 +4228 +7E10 +4828 +7EC6 +0100 +0100 +7FFC +0820 +0420 +0440 +FFFE +ENDCHAR +STARTCHAR uni7AEB +ENCODING 31467 +BBX 15 15 1 -1 +BITMAP +101E +11E8 +1144 +FE24 +01FC +4824 +4824 +4BFE +4824 +5024 +11FC +1C20 +3020 +C020 +0060 +ENDCHAR +STARTCHAR uni7AEC +ENCODING 31468 +BBX 15 16 0 -2 +BITMAP +2004 +101E +13E0 +FC20 +01FC +0924 +8924 +89FC +4820 +4BFE +5222 +522A +1EFA +E202 +420A +0204 +ENDCHAR +STARTCHAR uni7AED +ENCODING 31469 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1108 +F9F8 +0108 +4908 +49F8 +4880 +49FE +5642 +1242 +1AA2 +E312 +03F2 +000C +ENDCHAR +STARTCHAR uni7AEE +ENCODING 31470 +BBX 15 16 0 -2 +BITMAP +2000 +13FC +1204 +FE04 +03FC +0A00 +8A84 +8A48 +4AFC +4A48 +5248 +53FE +1C48 +E448 +4888 +1108 +ENDCHAR +STARTCHAR uni7AEF +ENCODING 31471 +BBX 15 15 1 -1 +BITMAP +0020 +2020 +2222 +2222 +FBFE +0000 +4BFE +4820 +4840 +53FE +1292 +3A92 +C292 +0292 +0296 +ENDCHAR +STARTCHAR uni7AF0 +ENCODING 31472 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2400 +FDFC +0524 +55FC +5524 +5524 +55FC +5420 +1420 +1DFC +E420 +0820 +03FE +ENDCHAR +STARTCHAR uni7AF1 +ENCODING 31473 +BBX 15 16 0 -2 +BITMAP +2020 +13FE +1020 +FDFC +0124 +09FC +8924 +89FC +4822 +4BFE +5008 +53FE +1D08 +E088 +4028 +0010 +ENDCHAR +STARTCHAR uni7AF2 +ENCODING 31474 +BBX 15 16 0 -2 +BITMAP +2104 +1088 +1000 +03FE +FA22 +02AA +0A72 +8A22 +8BFE +4800 +51FC +5104 +19FC +E104 +01FC +0104 +ENDCHAR +STARTCHAR uni7AF3 +ENCODING 31475 +BBX 15 15 0 -1 +BITMAP +2010 +13D2 +1054 +FD48 +008A +0904 +8AFA +8C00 +49FC +4904 +5104 +51FC +1D04 +E088 +47FE +ENDCHAR +STARTCHAR uni7AF4 +ENCODING 31476 +BBX 15 15 1 -1 +BITMAP +1070 +1108 +16F6 +F890 +03FC +4A94 +4B1C +4A04 +4BFC +5204 +13FC +1808 +E7FE +0108 +0098 +ENDCHAR +STARTCHAR uni7AF5 +ENCODING 31477 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +1008 +03BE +FA88 +02A8 +0ABE +8B88 +8808 +4BFE +528A +5252 +1BFE +E222 +022A +0224 +ENDCHAR +STARTCHAR uni7AF6 +ENCODING 31478 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FFFE +4484 +2848 +FFFE +0000 +7EFC +4284 +4284 +7EFC +2850 +2852 +4A92 +8D0E +ENDCHAR +STARTCHAR uni7AF7 +ENCODING 31479 +BBX 15 16 0 -2 +BITMAP +1020 +FE7C +44A4 +2818 +FEE6 +0010 +7CFE +4410 +7C90 +44FE +7C10 +1020 +FE7C +10C8 +1030 +11CE +ENDCHAR +STARTCHAR uni7AF8 +ENCODING 31480 +BBX 15 15 1 -1 +BITMAP +1010 +7EFC +2448 +FEFE +0000 +7EFC +4284 +7EFC +4284 +7EFC +2850 +2850 +4A92 +4C92 +890E +ENDCHAR +STARTCHAR uni7AF9 +ENCODING 31481 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +3E7E +5090 +5090 +9110 +1010 +1010 +1010 +1010 +1010 +1010 +1010 +1070 +ENDCHAR +STARTCHAR uni7AFA +ENCODING 31482 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +3FFE +28A0 +4920 +8410 +0000 +0000 +3FF8 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uni7AFB +ENCODING 31483 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1F7E +2890 +2488 +4508 +8200 +0200 +7FF8 +0208 +0408 +0408 +0808 +1008 +2050 +4020 +ENDCHAR +STARTCHAR uni7AFC +ENCODING 31484 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1F7E +2890 +2488 +4508 +8000 +0FE0 +0820 +0820 +0A20 +0920 +0922 +1022 +2022 +401E +ENDCHAR +STARTCHAR uni7AFD +ENCODING 31485 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4890 +8508 +0000 +3FF8 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni7AFE +ENCODING 31486 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1F7E +2890 +2488 +4508 +8100 +1170 +1390 +1D10 +F110 +1150 +1122 +1102 +1002 +0FFE +ENDCHAR +STARTCHAR uni7AFF +ENCODING 31487 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +4910 +8408 +1FF0 +0100 +0100 +0100 +7FFC +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7B00 +ENCODING 31488 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0200 +0100 +FFFE +0800 +0800 +0800 +0800 +0800 +0800 +0FFC +ENDCHAR +STARTCHAR uni7B01 +ENCODING 31489 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +1F7E +2890 +2488 +4508 +8000 +0000 +3FF8 +0100 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni7B02 +ENCODING 31490 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4920 +8410 +0210 +0200 +7FE0 +0220 +1220 +0C20 +0420 +0A22 +1122 +601E +ENDCHAR +STARTCHAR uni7B03 +ENCODING 31491 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +BFF0 +0010 +1010 +1010 +1FFC +0004 +0004 +7FE4 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni7B04 +ENCODING 31492 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4920 +8410 +0000 +3FFC +0420 +0420 +0420 +7FFE +0420 +0820 +1020 +6020 +ENDCHAR +STARTCHAR uni7B05 +ENCODING 31493 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +9810 +0660 +0180 +0660 +1818 +6C24 +0240 +0180 +0660 +1818 +E006 +ENDCHAR +STARTCHAR uni7B06 +ENCODING 31494 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4920 +8410 +0410 +7FF8 +4108 +4108 +4108 +7FF8 +4000 +4004 +4004 +3FFC +ENDCHAR +STARTCHAR uni7B07 +ENCODING 31495 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0508 +0100 +FFFE +0100 +0100 +01C0 +0130 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7B08 +ENCODING 31496 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +9110 +0808 +3FE0 +0440 +0480 +07F8 +0A08 +0910 +10A0 +60C0 +0330 +1C0C +ENDCHAR +STARTCHAR uni7B09 +ENCODING 31497 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +9508 +1000 +1FF8 +2008 +4C08 +8208 +0068 +0188 +1E08 +0808 +0050 +0020 +ENDCHAR +STARTCHAR uni7B0A +ENCODING 31498 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +49A0 +8410 +04FC +1F10 +1010 +1010 +1110 +1110 +2108 +2108 +4104 +8002 +ENDCHAR +STARTCHAR uni7B0B +ENCODING 31499 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4920 +8410 +3FF8 +0108 +FFFE +0108 +0108 +3FF8 +0100 +0100 +0200 +0C00 +ENDCHAR +STARTCHAR uni7B0C +ENCODING 31500 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +3FFC +0020 +1020 +2020 +3FFE +0120 +0220 +0C20 +3020 +C0A0 +0040 +ENDCHAR +STARTCHAR uni7B0D +ENCODING 31501 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0100 +3FF8 +2108 +2108 +2288 +2448 +2828 +2008 +2008 +2028 +2010 +ENDCHAR +STARTCHAR uni7B0E +ENCODING 31502 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0000 +1FF0 +0000 +0000 +7FFC +0440 +0440 +0444 +0844 +1044 +603C +ENDCHAR +STARTCHAR uni7B0F +ENCODING 31503 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4920 +9410 +1010 +3FFC +6224 +8224 +0444 +1844 +6084 +0308 +0C08 +0070 +ENDCHAR +STARTCHAR uni7B10 +ENCODING 31504 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8A08 +0100 +7FFC +0000 +0000 +0FE0 +0820 +0820 +0822 +1022 +201E +C000 +ENDCHAR +STARTCHAR uni7B11 +ENCODING 31505 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3E7E +4890 +8508 +003C +3FC0 +0100 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni7B12 +ENCODING 31506 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4890 +8508 +0100 +0280 +0C60 +3398 +C006 +1FF0 +0010 +0020 +0040 +0080 +ENDCHAR +STARTCHAR uni7B13 +ENCODING 31507 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +3F7E +4890 +8508 +2080 +2080 +2088 +3C90 +20A0 +20C0 +2084 +2484 +2884 +307C +ENDCHAR +STARTCHAR uni7B14 +ENCODING 31508 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +00F8 +3F00 +0100 +01F8 +3F00 +0100 +01FC +7F02 +0102 +0102 +00FE +ENDCHAR +STARTCHAR uni7B15 +ENCODING 31509 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8000 +1FF0 +1010 +1110 +1110 +1110 +1290 +1490 +0882 +3082 +C07E +ENDCHAR +STARTCHAR uni7B16 +ENCODING 31510 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8000 +2410 +2210 +2110 +2110 +2010 +2420 +2830 +3048 +2184 +0602 +ENDCHAR +STARTCHAR uni7B17 +ENCODING 31511 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8800 +1FF0 +2820 +4440 +0380 +1C70 +E30E +00C0 +0E00 +0180 +0040 +ENDCHAR +STARTCHAR uni7B18 +ENCODING 31512 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0508 +0100 +01FC +0100 +0100 +3FF8 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni7B19 +ENCODING 31513 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0408 +1100 +1100 +3FF8 +4100 +0100 +1FF0 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni7B1A +ENCODING 31514 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0000 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +2108 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7B1B +ENCODING 31515 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +3E7E +4890 +8508 +0100 +3FF8 +2108 +2108 +2108 +3FF8 +2108 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni7B1C +ENCODING 31516 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8000 +0100 +2108 +2108 +3FF8 +0100 +0100 +4104 +4104 +7FFC +0004 +ENDCHAR +STARTCHAR uni7B1D +ENCODING 31517 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +3FF8 +2008 +2FC8 +2048 +2688 +2108 +2288 +2C48 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni7B1E +ENCODING 31518 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0200 +0220 +0410 +08F8 +7F04 +0000 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni7B1F +ENCODING 31519 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8078 +1FA0 +1220 +1220 +1220 +1210 +1290 +2248 +22A8 +4324 +8202 +ENDCHAR +STARTCHAR uni7B20 +ENCODING 31520 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +9110 +0A08 +0100 +0100 +7FFC +0000 +1010 +1010 +0820 +0820 +0040 +FFFE +ENDCHAR +STARTCHAR uni7B21 +ENCODING 31521 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8000 +1FF0 +1010 +1010 +1FF0 +1010 +1FF0 +1010 +1010 +FFFE +ENDCHAR +STARTCHAR uni7B22 +ENCODING 31522 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +3FF8 +2008 +2008 +3FF8 +2080 +2080 +3FFC +2040 +2024 +2C14 +300C +ENDCHAR +STARTCHAR uni7B23 +ENCODING 31523 +BBX 15 15 0 -1 +BITMAP +2040 +3F7E +4890 +8508 +0800 +1FF0 +2010 +5F90 +1090 +1090 +1F90 +1050 +1024 +1004 +0FFC +ENDCHAR +STARTCHAR uni7B24 +ENCODING 31524 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0000 +7FF8 +0408 +0808 +1050 +2020 +DFF8 +1008 +1008 +1008 +1FF8 +1008 +ENDCHAR +STARTCHAR uni7B25 +ENCODING 31525 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +0408 +7FFC +0004 +1FC4 +0004 +1FC4 +1044 +1044 +1FC4 +0004 +001C +ENDCHAR +STARTCHAR uni7B26 +ENCODING 31526 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3E7E +4890 +8508 +0010 +1010 +2FFE +6010 +A410 +2210 +2110 +2010 +2010 +2070 +ENDCHAR +STARTCHAR uni7B27 +ENCODING 31527 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0408 +3FF8 +2488 +2488 +2488 +FFFE +2488 +2488 +2488 +2498 +ENDCHAR +STARTCHAR uni7B28 +ENCODING 31528 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0508 +0100 +FFFE +0380 +0540 +0920 +3118 +CFE6 +0100 +0100 +ENDCHAR +STARTCHAR uni7B29 +ENCODING 31529 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8850 +0848 +1040 +307C +57C0 +9040 +1020 +1020 +1014 +100C +1004 +ENDCHAR +STARTCHAR uni7B2A +ENCODING 31530 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0408 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0000 +7FFC +ENDCHAR +STARTCHAR uni7B2B +ENCODING 31531 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8170 +1F80 +1100 +2100 +3FFC +0304 +0504 +0904 +3128 +C110 +0100 +ENDCHAR +STARTCHAR uni7B2C +ENCODING 31532 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +7F7E +8490 +7FF8 +0108 +3FF8 +2100 +7FFC +4304 +0504 +0904 +1104 +6118 +0100 +ENDCHAR +STARTCHAR uni7B2D +ENCODING 31533 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4890 +8508 +0280 +0C60 +3398 +C006 +1FF0 +0210 +0210 +0210 +0270 +0200 +ENDCHAR +STARTCHAR uni7B2E +ENCODING 31534 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0400 +0400 +0FFC +3100 +C1F0 +0100 +01F0 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7B2F +ENCODING 31535 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0800 +08FC +FE04 +1284 +1288 +2448 +7850 +0C20 +30D8 +C306 +ENDCHAR +STARTCHAR uni7B30 +ENCODING 31536 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0440 +3FF8 +0448 +0448 +1FF8 +1440 +2440 +3FFC +0844 +1054 +2048 +4040 +ENDCHAR +STARTCHAR uni7B31 +ENCODING 31537 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +1408 +1000 +1FFC +2004 +4F84 +8884 +0884 +0884 +0F88 +0008 +0070 +ENDCHAR +STARTCHAR uni7B32 +ENCODING 31538 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8820 +1010 +3FF8 +0008 +0820 +0820 +FFFE +0820 +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni7B33 +ENCODING 31539 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +1408 +1000 +7F7C +1144 +1144 +1144 +2144 +2244 +4244 +8C7C +ENDCHAR +STARTCHAR uni7B34 +ENCODING 31540 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0000 +FFFE +0010 +0010 +1F90 +1090 +1090 +1F90 +0010 +0050 +0020 +ENDCHAR +STARTCHAR uni7B35 +ENCODING 31541 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4990 +8408 +0408 +61FC +1104 +0104 +C104 +213C +0900 +1102 +2102 +C0FE +ENDCHAR +STARTCHAR uni7B36 +ENCODING 31542 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0408 +0800 +1FF8 +2100 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7B37 +ENCODING 31543 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0C00 +70FC +4084 +4484 +4484 +5C84 +6494 +4888 +0880 +1080 +6080 +ENDCHAR +STARTCHAR uni7B38 +ENCODING 31544 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8000 +3FFC +2000 +2000 +27F8 +2408 +2408 +27F8 +2000 +2000 +3FFE +ENDCHAR +STARTCHAR uni7B39 +ENCODING 31545 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3F7E +4890 +8910 +0408 +1110 +1110 +FFFE +1110 +1110 +11F0 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uni7B3A +ENCODING 31546 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0240 +0220 +03F8 +7E00 +0200 +03FC +FE10 +0120 +00C0 +0744 +3834 +000C +ENDCHAR +STARTCHAR uni7B3B +ENCODING 31547 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +0000 +00FC +FE84 +1084 +1084 +1084 +1084 +1E9C +E080 +0080 +ENDCHAR +STARTCHAR uni7B3C +ENCODING 31548 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8040 +0420 +7FFC +0480 +0488 +0890 +08A0 +10C2 +2382 +4C82 +807E +ENDCHAR +STARTCHAR uni7B3D +ENCODING 31549 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0408 +0000 +0000 +3FF8 +2448 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni7B3E +ENCODING 31550 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +2080 +1080 +17F8 +0088 +7088 +1108 +1108 +1228 +1410 +2800 +47FE +ENDCHAR +STARTCHAR uni7B3F +ENCODING 31551 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0800 +0FF0 +1020 +2C40 +0380 +1C70 +E00E +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni7B40 +ENCODING 31552 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8100 +3FF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni7B41 +ENCODING 31553 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0448 +0440 +3FF8 +2448 +2448 +3FF8 +2448 +2448 +2448 +3FF8 +ENDCHAR +STARTCHAR uni7B42 +ENCODING 31554 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8548 +2040 +1258 +9268 +43C8 +4E48 +0A48 +125A +E242 +2202 +21FE +2000 +ENDCHAR +STARTCHAR uni7B43 +ENCODING 31555 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +3FF8 +2108 +2108 +2FE8 +2108 +2288 +2448 +2828 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni7B44 +ENCODING 31556 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0440 +4448 +2450 +2460 +0C40 +3460 +C852 +084A +1042 +203E +4000 +ENDCHAR +STARTCHAR uni7B45 +ENCODING 31557 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8508 +0900 +1FF8 +2100 +0100 +FFFE +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni7B46 +ENCODING 31558 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7FFE +8910 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +3FF8 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni7B47 +ENCODING 31559 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +0000 +00FC +FE84 +1088 +1090 +1088 +1684 +1884 +E098 +0080 +ENDCHAR +STARTCHAR uni7B48 +ENCODING 31560 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +0438 +1FC0 +0100 +FFFE +0100 +0100 +1FF0 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7B49 +ENCODING 31561 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +0508 +3FF8 +0100 +FFFE +0020 +7FFC +0020 +0820 +0420 +0420 +00E0 +ENDCHAR +STARTCHAR uni7B4A +ENCODING 31562 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8A08 +0100 +7FFC +0820 +1010 +2448 +4444 +0280 +0100 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni7B4B +ENCODING 31563 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +7FFE +4910 +8628 +3C20 +2420 +25FC +3C24 +2424 +2444 +3C44 +2484 +4504 +8E38 +ENDCHAR +STARTCHAR uni7B4C +ENCODING 31564 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4890 +8508 +0280 +0C60 +3018 +CFE6 +0100 +0100 +1FF0 +0100 +0100 +7FFC +ENDCHAR +STARTCHAR uni7B4D +ENCODING 31565 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +9408 +1000 +3FFC +4004 +8FC4 +0844 +0FC4 +0844 +0FC8 +0008 +0070 +ENDCHAR +STARTCHAR uni7B4E +ENCODING 31566 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +0800 +0800 +FF7C +1144 +1144 +2244 +7C44 +0A44 +317C +C000 +ENDCHAR +STARTCHAR uni7B4F +ENCODING 31567 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4890 +8508 +1120 +1110 +217C +6F80 +A090 +20A0 +2040 +21A2 +2E12 +200C +ENDCHAR +STARTCHAR uni7B50 +ENCODING 31568 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4920 +8410 +7FFC +4000 +4FF8 +4080 +47F0 +4080 +4080 +5FFC +4000 +7FFC +ENDCHAR +STARTCHAR uni7B51 +ENCODING 31569 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0000 +01F8 +7D08 +1108 +1148 +1128 +1E18 +E20A +040A +0806 +ENDCHAR +STARTCHAR uni7B52 +ENCODING 31570 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +0408 +7FF8 +4008 +4FC8 +4008 +4FC8 +4848 +4848 +4FC8 +4008 +4038 +ENDCHAR +STARTCHAR uni7B53 +ENCODING 31571 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8000 +7EFC +0820 +0820 +0820 +FEFE +0820 +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni7B54 +ENCODING 31572 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +4890 +8508 +0280 +0C60 +3018 +CFE6 +0000 +1FF0 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7B55 +ENCODING 31573 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +08FC +3000 +C400 +09FE +3010 +D010 +1010 +1010 +1010 +1070 +ENDCHAR +STARTCHAR uni7B56 +ENCODING 31574 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7F7E +8890 +0508 +FFFE +0100 +3FF8 +2108 +2108 +2398 +0D60 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni7B57 +ENCODING 31575 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +1040 +1040 +27FC +6444 +A444 +2444 +27FC +2444 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni7B58 +ENCODING 31576 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8800 +0800 +7EFC +0884 +0884 +0E84 +7884 +0884 +08FC +2884 +1000 +ENDCHAR +STARTCHAR uni7B59 +ENCODING 31577 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0100 +7FFC +0100 +3FF8 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni7B5A +ENCODING 31578 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2080 +2088 +3EB0 +20C4 +2084 +267C +3900 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7B5B +ENCODING 31579 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0800 +4BFE +4820 +4820 +49FC +4924 +4924 +4924 +1134 +1128 +2020 +4020 +ENDCHAR +STARTCHAR uni7B5C +ENCODING 31580 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +9110 +0920 +0100 +7FF8 +0008 +0008 +3FF8 +0008 +0008 +7FF8 +0008 +ENDCHAR +STARTCHAR uni7B5D +ENCODING 31581 +BBX 15 15 1 -1 +BITMAP +2040 +3EFE +5110 +8A08 +07E0 +1840 +0080 +3FF8 +0088 +FFFE +0088 +3FF8 +0080 +0080 +0380 +ENDCHAR +STARTCHAR uni7B5E +ENCODING 31582 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8A08 +0100 +3FFC +2004 +4108 +0100 +7FFC +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni7B5F +ENCODING 31583 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +00F8 +7F00 +2210 +1120 +3FE0 +0040 +0080 +FFFE +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni7B60 +ENCODING 31584 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +1100 +11FC +1204 +7C04 +11E4 +1004 +1034 +1CC4 +E308 +0030 +ENDCHAR +STARTCHAR uni7B61 +ENCODING 31585 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8A88 +0440 +0820 +37D8 +C106 +0100 +3FF8 +0100 +1110 +2108 +4504 +0200 +ENDCHAR +STARTCHAR uni7B62 +ENCODING 31586 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +1000 +11FC +FD24 +1124 +1124 +1DFC +F100 +1100 +1102 +5102 +20FE +ENDCHAR +STARTCHAR uni7B63 +ENCODING 31587 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8808 +0608 +7808 +0848 +0848 +FF48 +1C48 +2A48 +4948 +8808 +0828 +0810 +ENDCHAR +STARTCHAR uni7B64 +ENCODING 31588 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0200 +1FF0 +1010 +1FF0 +1010 +1FF4 +1088 +1050 +1E30 +F00E +ENDCHAR +STARTCHAR uni7B65 +ENCODING 31589 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +1FF0 +1010 +1010 +1FF0 +0100 +0200 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni7B66 +ENCODING 31590 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8508 +3FF8 +2008 +1FF0 +0000 +7FFC +0440 +0440 +0842 +1042 +603E +ENDCHAR +STARTCHAR uni7B67 +ENCODING 31591 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0442 +1842 +E03E +ENDCHAR +STARTCHAR uni7B68 +ENCODING 31592 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0280 +0C60 +3118 +CFE6 +0040 +0080 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni7B69 +ENCODING 31593 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +1FF0 +0020 +0440 +3FF8 +2108 +3FF8 +2108 +3FF8 +2108 +4118 +ENDCHAR +STARTCHAR uni7B6A +ENCODING 31594 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +3F7E +2890 +4508 +BFFC +2000 +2FF8 +2888 +2FF8 +2888 +2FF8 +2080 +2080 +3FFE +ENDCHAR +STARTCHAR uni7B6B +ENCODING 31595 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8000 +3FF8 +2008 +3FF8 +2008 +3FF8 +2008 +3FF8 +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni7B6C +ENCODING 31596 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4908 +8494 +0488 +3FFC +2080 +2088 +3E88 +2250 +2250 +4222 +4E52 +818C +ENDCHAR +STARTCHAR uni7B6D +ENCODING 31597 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +7FFC +0100 +3FF8 +0100 +FFFE +0810 +FFFE +0810 +1010 +6010 +ENDCHAR +STARTCHAR uni7B6E +ENCODING 31598 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +0408 +7FFC +0100 +1110 +1110 +2928 +4544 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni7B6F +ENCODING 31599 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +3C20 +2420 +3DFC +2424 +2424 +3C24 +2444 +2444 +2E84 +F118 +ENDCHAR +STARTCHAR uni7B70 +ENCODING 31600 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +3F7E +4890 +8488 +0880 +11FE +3240 +5440 +907C +1040 +1040 +107C +1040 +1040 +ENDCHAR +STARTCHAR uni7B71 +ENCODING 31601 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8488 +1080 +10FE +2488 +6508 +A690 +2450 +2420 +2450 +2088 +2106 +ENDCHAR +STARTCHAR uni7B72 +ENCODING 31602 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +0920 +1110 +2108 +3FF8 +2008 +3FF8 +2008 +3FF8 +2008 +2038 +ENDCHAR +STARTCHAR uni7B73 +ENCODING 31603 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +001C +79E0 +0820 +1020 +7BFC +0820 +2820 +11FC +2C00 +C3FE +ENDCHAR +STARTCHAR uni7B74 +ENCODING 31604 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +0100 +7FFC +0100 +1110 +1110 +2AA8 +4AA4 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7B75 +ENCODING 31605 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +0408 +F838 +13C0 +2040 +7A78 +0A40 +8A40 +5240 +33FC +4800 +87FE +ENDCHAR +STARTCHAR uni7B76 +ENCODING 31606 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +1100 +1FF8 +2100 +0100 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni7B77 +ENCODING 31607 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +1040 +11F8 +1848 +5448 +5048 +53FE +9040 +10A0 +1110 +1208 +1406 +ENDCHAR +STARTCHAR uni7B78 +ENCODING 31608 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +3FF8 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7B79 +ENCODING 31609 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8508 +3FFC +0100 +1FF8 +0200 +7FFC +0410 +FFFE +1A10 +6110 +0070 +ENDCHAR +STARTCHAR uni7B7A +ENCODING 31610 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4920 +8410 +7FFC +4000 +4FF8 +4080 +47F0 +40A0 +4090 +5FFC +4000 +7FFC +ENDCHAR +STARTCHAR uni7B7B +ENCODING 31611 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFC +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +2100 +1A00 +0600 +19C0 +603E +ENDCHAR +STARTCHAR uni7B7C +ENCODING 31612 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1FF0 +1010 +1010 +1FF0 +0000 +3FF8 +2008 +2108 +2208 +04E0 +1818 +E004 +ENDCHAR +STARTCHAR uni7B7D +ENCODING 31613 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +1FF0 +1010 +1FF0 +0000 +3FF8 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7B7E +ENCODING 31614 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +3F7E +2890 +4508 +8280 +0440 +0820 +37D8 +C006 +0210 +1110 +0920 +0840 +7FFC +ENDCHAR +STARTCHAR uni7B7F +ENCODING 31615 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8208 +07E0 +3820 +0440 +0380 +7C7C +0100 +7FFC +0540 +1930 +610C +ENDCHAR +STARTCHAR uni7B80 +ENCODING 31616 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1000 +0BF8 +2008 +27C8 +2448 +2448 +27C8 +2448 +2448 +27C8 +2008 +2018 +ENDCHAR +STARTCHAR uni7B81 +ENCODING 31617 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8A08 +0100 +3FF8 +0820 +0440 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni7B82 +ENCODING 31618 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0100 +7FFC +1110 +1110 +2928 +4544 +0380 +0540 +0920 +3118 +C106 +ENDCHAR +STARTCHAR uni7B83 +ENCODING 31619 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0000 +7F00 +22FC +3E44 +2244 +3E44 +2228 +2228 +2F10 +F228 +4244 +0282 +ENDCHAR +STARTCHAR uni7B84 +ENCODING 31620 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8A08 +0400 +3FF8 +2108 +3FF8 +2208 +3FF8 +0880 +1080 +FFFE +0080 +0080 +ENDCHAR +STARTCHAR uni7B85 +ENCODING 31621 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +3FF8 +2108 +3FF8 +2108 +3FF8 +0000 +FFFE +0820 +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni7B86 +ENCODING 31622 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8908 +3FFC +2104 +22C4 +2C34 +0000 +2084 +3E98 +20E0 +2082 +3E82 +E07E +ENDCHAR +STARTCHAR uni7B87 +ENCODING 31623 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +0408 +7FFC +4104 +5FF4 +4104 +4FE4 +4824 +4824 +4FE4 +4004 +7FFC +ENDCHAR +STARTCHAR uni7B88 +ENCODING 31624 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2080 +1110 +1208 +87FC +4204 +5000 +13F8 +2208 +E208 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni7B89 +ENCODING 31625 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1000 +11F8 +FD08 +1108 +15F8 +1840 +33FC +D044 +1084 +1084 +5114 +2208 +ENDCHAR +STARTCHAR uni7B8A +ENCODING 31626 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +9528 +0820 +7E50 +1050 +1088 +1F06 +1260 +1210 +2200 +22C0 +4A30 +8408 +ENDCHAR +STARTCHAR uni7B8B +ENCODING 31627 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +0240 +7FFC +0120 +00C2 +1F3C +0240 +7FFE +0120 +03C2 +7C3C +ENDCHAR +STARTCHAR uni7B8C +ENCODING 31628 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7F84 +1004 +2224 +7F24 +0924 +0824 +7F24 +0824 +0824 +0F04 +F014 +4008 +ENDCHAR +STARTCHAR uni7B8D +ENCODING 31629 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +27FE +2200 +FA20 +22FC +22A4 +3AA4 +E2AC +2220 +2200 +63FE +ENDCHAR +STARTCHAR uni7B8E +ENCODING 31630 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +01F8 +0100 +3FFE +2102 +21F0 +2F04 +20FC +2000 +27E0 +4422 +4822 +B01E +ENDCHAR +STARTCHAR uni7B8F +ENCODING 31631 +BBX 15 15 1 -1 +BITMAP +2020 +3EFE +4910 +84E8 +1F20 +0910 +1088 +3FF8 +0088 +FFFE +0088 +3FF8 +0080 +0080 +0380 +ENDCHAR +STARTCHAR uni7B90 +ENCODING 31632 +BBX 15 15 1 -1 +BITMAP +2040 +3EFE +4910 +8508 +3FF8 +0100 +1FF0 +0100 +7FFC +0000 +1FF0 +1110 +1FF0 +1010 +1070 +ENDCHAR +STARTCHAR uni7B91 +ENCODING 31633 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8908 +FFFE +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +2100 +21F8 +5900 +87FE +ENDCHAR +STARTCHAR uni7B92 +ENCODING 31634 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8908 +1FF0 +0010 +7FFC +0010 +1FF0 +0000 +7FFC +4104 +5FF4 +1110 +1130 +0100 +ENDCHAR +STARTCHAR uni7B93 +ENCODING 31635 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3FF0 +0010 +1FF0 +0010 +FFFE +1110 +09A0 +0540 +1930 +E10E +0500 +0200 +ENDCHAR +STARTCHAR uni7B94 +ENCODING 31636 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +7EFE +8910 +4448 +2080 +13FC +8204 +4204 +2204 +03FC +1204 +2204 +4204 +83FC +ENDCHAR +STARTCHAR uni7B95 +ENCODING 31637 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +0820 +3FF8 +0820 +0FE0 +0820 +0FE0 +0820 +7FFC +0400 +1810 +600C +ENDCHAR +STARTCHAR uni7B96 +ENCODING 31638 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0820 +0820 +7EFC +0820 +0C70 +1A68 +2AA4 +4922 +8820 +0820 +0820 +ENDCHAR +STARTCHAR uni7B97 +ENCODING 31639 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8510 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0420 +FFFE +0820 +3020 +ENDCHAR +STARTCHAR uni7B98 +ENCODING 31640 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +0408 +7FFC +40C4 +4F04 +4104 +5FF4 +4544 +4924 +5114 +4004 +7FFC +ENDCHAR +STARTCHAR uni7B99 +ENCODING 31641 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +3CFC +2484 +2488 +3CFC +24C4 +24A4 +3CA8 +2490 +44A8 +4C46 +ENDCHAR +STARTCHAR uni7B9A +ENCODING 31642 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +0804 +1444 +2244 +C1C4 +3E44 +0044 +7F44 +4144 +4104 +7F1C +ENDCHAR +STARTCHAR uni7B9B +ENCODING 31643 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +003C +FBC8 +0A08 +1288 +2288 +3A88 +E288 +22A8 +24A8 +24D4 +6B12 +ENDCHAR +STARTCHAR uni7B9C +ENCODING 31644 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +0100 +7FFC +4444 +0840 +F07E +0000 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni7B9D +ENCODING 31645 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +2488 +2088 +FBFE +2088 +2088 +38F8 +E088 +2088 +2088 +60F8 +ENDCHAR +STARTCHAR uni7B9E +ENCODING 31646 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +9108 +3FF8 +0280 +FFFE +0820 +3FF8 +C826 +0820 +08E0 +0808 +07F8 +ENDCHAR +STARTCHAR uni7B9F +ENCODING 31647 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +1FF0 +1010 +1FF0 +1010 +1FF0 +104C +1F70 +1040 +1F42 +F03E +ENDCHAR +STARTCHAR uni7BA0 +ENCODING 31648 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +80F8 +3F00 +0100 +7FFC +0920 +0920 +FFFE +0920 +0920 +7FFC +0100 +0100 +3FF8 +ENDCHAR +STARTCHAR uni7BA1 +ENCODING 31649 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +0608 +7FF8 +4008 +5FE8 +1020 +1FE0 +1000 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7BA2 +ENCODING 31650 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8A08 +0100 +7FFE +4002 +9004 +1EF8 +2288 +24A8 +5490 +0884 +1084 +607C +ENDCHAR +STARTCHAR uni7BA3 +ENCODING 31651 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8808 +0804 +FFA4 +0824 +7F24 +4924 +4B24 +1C24 +2A24 +4904 +8814 +0808 +ENDCHAR +STARTCHAR uni7BA4 +ENCODING 31652 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8A08 +0100 +7FFC +0820 +0820 +1450 +2288 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7BA5 +ENCODING 31653 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2020 +1020 +13FC +8224 +4220 +4BF8 +0A88 +1288 +E250 +2420 +2450 +298C +ENDCHAR +STARTCHAR uni7BA6 +ENCODING 31654 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3FF8 +0100 +1FF0 +0100 +7FFC +0000 +1FF0 +1010 +1110 +02C0 +0C30 +7008 +ENDCHAR +STARTCHAR uni7BA7 +ENCODING 31655 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0000 +3FFC +2080 +2080 +2FF8 +2490 +22A0 +2FFC +2140 +2220 +2410 +3FFE +ENDCHAR +STARTCHAR uni7BA8 +ENCODING 31656 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1000 +11FC +1088 +FC70 +138E +1020 +1DFC +3020 +D3FE +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni7BA9 +ENCODING 31657 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3FF8 +2448 +2448 +3FF8 +0200 +07F0 +0810 +3420 +0240 +0180 +0E00 +7000 +ENDCHAR +STARTCHAR uni7BAA +ENCODING 31658 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +7F7E +8888 +2108 +1090 +3FF8 +2108 +3FF8 +2108 +3FF8 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni7BAB +ENCODING 31659 +BBX 15 16 0 -2 +BITMAP +1040 +1F7C +28A0 +4510 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +2548 +2528 +2528 +2928 +2108 +4108 +ENDCHAR +STARTCHAR uni7BAC +ENCODING 31660 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +7FFC +0820 +0200 +FFFE +0400 +0800 +1FF0 +2810 +C810 +0FF0 +0810 +ENDCHAR +STARTCHAR uni7BAD +ENCODING 31661 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +7EFC +9120 +2210 +1020 +FFFC +0000 +7E08 +4248 +7E48 +4248 +7E48 +4208 +4E38 +ENDCHAR +STARTCHAR uni7BAE +ENCODING 31662 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +5090 +8A08 +0100 +7FFE +4002 +9FF4 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni7BAF +ENCODING 31663 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +3F7E +4488 +9000 +1FFE +2040 +27FC +2444 +67FC +A444 +27FC +2240 +21C0 +2F3E +ENDCHAR +STARTCHAR uni7BB0 +ENCODING 31664 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +9FF8 +2008 +5FC8 +9048 +1FC8 +1068 +1FD0 +0000 +1FE0 +0040 +FFFE +0100 +0300 +ENDCHAR +STARTCHAR uni7BB1 +ENCODING 31665 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +1408 +10FC +FE84 +1084 +38FC +3484 +5284 +90FC +1084 +1084 +10FC +ENDCHAR +STARTCHAR uni7BB2 +ENCODING 31666 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8528 +1120 +0920 +09FC +4220 +2020 +2BFE +0890 +1090 +7090 +1112 +1112 +120E +ENDCHAR +STARTCHAR uni7BB3 +ENCODING 31667 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3FF8 +2008 +3FF8 +2410 +2220 +2FF8 +2220 +2220 +2FFC +4220 +4420 +8820 +ENDCHAR +STARTCHAR uni7BB4 +ENCODING 31668 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4908 +8404 +0490 +0088 +3FFE +2040 +3E48 +2048 +3E30 +5220 +5E5A +8186 +ENDCHAR +STARTCHAR uni7BB5 +ENCODING 31669 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7E7E +8988 +0100 +3108 +C726 +00C0 +0FF8 +F808 +0FF8 +0808 +0FF8 +0808 +0FF8 +ENDCHAR +STARTCHAR uni7BB6 +ENCODING 31670 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8808 +087C +7F44 +0844 +087C +3E44 +2244 +227C +2244 +3E84 +2294 +0108 +ENDCHAR +STARTCHAR uni7BB7 +ENCODING 31671 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +A548 +1040 +FEFE +2120 +20AC +3CB4 +25E4 +24AC +24A0 +44A2 +5482 +887E +ENDCHAR +STARTCHAR uni7BB8 +ENCODING 31672 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8914 +0508 +3FF8 +0110 +FFFE +0110 +0FF8 +F808 +0FF8 +0808 +0808 +0FF8 +ENDCHAR +STARTCHAR uni7BB9 +ENCODING 31673 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1040 +1440 +247C +7884 +1104 +2444 +7E24 +0024 +5404 +4A04 +8A28 +0010 +ENDCHAR +STARTCHAR uni7BBA +ENCODING 31674 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFC +0100 +3FF8 +0200 +FFFE +0820 +1FF0 +2828 +CFE6 +0820 +0FE0 +0820 +ENDCHAR +STARTCHAR uni7BBB +ENCODING 31675 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0040 +13F8 +2048 +47FE +8848 +13F8 +3040 +53FC +9040 +17FE +1040 +1040 +ENDCHAR +STARTCHAR uni7BBC +ENCODING 31676 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +3FF8 +2008 +3FF8 +2000 +3FFC +2220 +24F0 +5F88 +4080 +8FF8 +0080 +3FFC +ENDCHAR +STARTCHAR uni7BBD +ENCODING 31677 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +9FF0 +0100 +7FFC +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni7BBE +ENCODING 31678 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0800 +4904 +2A24 +7F24 +4124 +7F24 +4124 +7F24 +4124 +4104 +4514 +4208 +ENDCHAR +STARTCHAR uni7BBF +ENCODING 31679 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1FF0 +1010 +1FF0 +0000 +7FFC +1010 +1FF0 +1010 +1FF0 +103E +FFD0 +0010 +ENDCHAR +STARTCHAR uni7BC0 +ENCODING 31680 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3F7E +4890 +8508 +3E7C +2244 +3E44 +2244 +3E44 +2444 +2444 +2A5C +3140 +6040 +ENDCHAR +STARTCHAR uni7BC1 +ENCODING 31681 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +9FF0 +1010 +1FF0 +1010 +1FF0 +0000 +7FFC +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni7BC2 +ENCODING 31682 +BBX 15 15 0 -1 +BITMAP +2040 +3F7E +4890 +8508 +1FF0 +1010 +1FF0 +1010 +1FF0 +2100 +3FF8 +4100 +9FF0 +0100 +FFFE +ENDCHAR +STARTCHAR uni7BC3 +ENCODING 31683 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3FF8 +2108 +3FF8 +2000 +2FF8 +2808 +2FF8 +2808 +4FF8 +4808 +8FF8 +0808 +ENDCHAR +STARTCHAR uni7BC4 +ENCODING 31684 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +7F7E +8490 +1208 +FEFC +1084 +7C84 +5484 +7C9C +5480 +7C80 +1082 +FE82 +107E +ENDCHAR +STARTCHAR uni7BC5 +ENCODING 31685 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0100 +2108 +3FF8 +0000 +7FFC +0200 +3FF8 +2448 +2448 +2458 +ENDCHAR +STARTCHAR uni7BC6 +ENCODING 31686 +BBX 15 15 1 -1 +BITMAP +1040 +3EFE +4910 +8408 +0FF0 +0810 +1FE0 +0040 +7FFE +0688 +3950 +06C0 +3960 +0658 +F986 +ENDCHAR +STARTCHAR uni7BC7 +ENCODING 31687 +BBX 15 15 1 -1 +BITMAP +2040 +7F7E +8890 +0478 +3F80 +2000 +3FF8 +2008 +3FF8 +2000 +3FFC +5244 +5FFC +9244 +124C +ENDCHAR +STARTCHAR uni7BC8 +ENCODING 31688 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0800 +0808 +7F08 +08FE +FF08 +0848 +0828 +7F28 +0808 +0F08 +F028 +4010 +ENDCHAR +STARTCHAR uni7BC9 +ENCODING 31689 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8510 +7EF8 +1088 +10A8 +1E9A +F106 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni7BCA +ENCODING 31690 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +4110 +3110 +07FC +8110 +6110 +0110 +17FE +2000 +4108 +8606 +ENDCHAR +STARTCHAR uni7BCB +ENCODING 31691 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +3FFC +2080 +2FF8 +2490 +2490 +2AA8 +2360 +2C18 +2000 +3FFC +ENDCHAR +STARTCHAR uni7BCC +ENCODING 31692 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +11F0 +1010 +27FE +6200 +A3FC +2440 +2FFE +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni7BCD +ENCODING 31693 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0C20 +7020 +10A4 +10A4 +FCA8 +3120 +3820 +5450 +5050 +9088 +1104 +1202 +ENDCHAR +STARTCHAR uni7BCE +ENCODING 31694 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0020 +7C20 +44A8 +7CA4 +4522 +7D22 +4628 +4410 +7C60 +0180 +0600 +ENDCHAR +STARTCHAR uni7BCF +ENCODING 31695 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +0040 +2240 +227C +FF84 +22A8 +2220 +3E50 +2250 +2288 +3F06 +ENDCHAR +STARTCHAR uni7BD0 +ENCODING 31696 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1000 +13FE +FE20 +1220 +32FC +3AA4 +56A4 +92A4 +12B4 +12A8 +1220 +13FE +ENDCHAR +STARTCHAR uni7BD1 +ENCODING 31697 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1FF0 +1110 +1FF0 +0100 +FFFE +0000 +1FF0 +1010 +1110 +02C0 +0C30 +7008 +ENDCHAR +STARTCHAR uni7BD2 +ENCODING 31698 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7EFE +5110 +8A88 +0E60 +3118 +DFE6 +1020 +1FE0 +1020 +1FE0 +1008 +1190 +1460 +1810 +ENDCHAR +STARTCHAR uni7BD3 +ENCODING 31699 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1110 +0920 +7FFC +0540 +1930 +610C +0400 +FFFE +0820 +1E40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni7BD4 +ENCODING 31700 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +1FF0 +1010 +1FF0 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +701C +ENDCHAR +STARTCHAR uni7BD5 +ENCODING 31701 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0100 +3FF8 +0100 +7FFC +0800 +1010 +3FF8 +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni7BD6 +ENCODING 31702 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +0508 +3FFC +2080 +2FF8 +2088 +3FFE +2088 +2FF8 +4080 +4FF8 +8808 +0FF8 +ENDCHAR +STARTCHAR uni7BD7 +ENCODING 31703 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +9048 +1FFC +3080 +DFF8 +1080 +1FF8 +1080 +FFFC +1830 +07C0 +F83E +ENDCHAR +STARTCHAR uni7BD8 +ENCODING 31704 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +9000 +1FFC +2104 +5114 +1FF4 +0208 +1400 +1FFC +2104 +5114 +1FF4 +0414 +3808 +ENDCHAR +STARTCHAR uni7BD9 +ENCODING 31705 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4890 +8508 +0100 +7FFE +0000 +0FE0 +0820 +7FFC +4004 +4FE4 +4824 +4FEC +ENDCHAR +STARTCHAR uni7BDA +ENCODING 31706 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +3FFC +2140 +2F78 +2140 +2F78 +2140 +2F78 +2140 +2240 +3FFC +ENDCHAR +STARTCHAR uni7BDB +ENCODING 31707 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0000 +7EFC +0204 +7EFC +4080 +7EFC +0204 +2244 +1A34 +62C4 +1428 +0810 +ENDCHAR +STARTCHAR uni7BDC +ENCODING 31708 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1FC0 +0044 +7D88 +0550 +0920 +3118 +C506 +0200 +3FF8 +0000 +2488 +4244 +ENDCHAR +STARTCHAR uni7BDD +ENCODING 31709 +BBX 15 15 1 -1 +BITMAP +1040 +3EFE +4910 +8448 +3FF8 +0440 +3FF8 +0440 +FFFE +1110 +FFFE +1110 +FFFE +1010 +1070 +ENDCHAR +STARTCHAR uni7BDE +ENCODING 31710 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2000 +17FC +1404 +87FC +4404 +57FC +1040 +27FC +E040 +2040 +2FFE +2000 +ENDCHAR +STARTCHAR uni7BDF +ENCODING 31711 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0840 +0FFC +1040 +33F8 +5040 +97FE +1208 +13F8 +1208 +13F8 +1208 +1218 +ENDCHAR +STARTCHAR uni7BE0 +ENCODING 31712 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +1448 +10FC +2B88 +2870 +698C +A820 +2BFE +28A8 +2924 +2A22 +2020 +ENDCHAR +STARTCHAR uni7BE1 +ENCODING 31713 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +9FF8 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +7FFC +0440 +1A30 +E44E +0FE0 +ENDCHAR +STARTCHAR uni7BE2 +ENCODING 31714 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +BFF8 +0100 +7FFC +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni7BE3 +ENCODING 31715 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3FF8 +0820 +0440 +7FFE +4202 +8104 +3FF8 +0400 +07F0 +0810 +1050 +2020 +ENDCHAR +STARTCHAR uni7BE4 +ENCODING 31716 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4908 +9FFC +1080 +1FF8 +1080 +1FF8 +1080 +1FFE +0002 +2492 +424A +400C +ENDCHAR +STARTCHAR uni7BE5 +ENCODING 31717 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +0408 +7FFC +0440 +3FF8 +2448 +3FF8 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni7BE6 +ENCODING 31718 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4890 +8508 +3FF8 +2448 +2388 +2448 +3FF8 +1080 +1E8C +10F0 +1E82 +707E +ENDCHAR +STARTCHAR uni7BE7 +ENCODING 31719 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0400 +7FFC +4504 +0880 +1FFC +3080 +5FF8 +1080 +1FF8 +1080 +1FFC +1000 +ENDCHAR +STARTCHAR uni7BE8 +ENCODING 31720 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7840 +48A0 +5110 +6208 +55F6 +4840 +4BFC +6840 +5150 +4248 +4544 +4080 +ENDCHAR +STARTCHAR uni7BE9 +ENCODING 31721 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4910 +8408 +1000 +7DFC +4420 +45FC +7D24 +4124 +7D24 +4524 +452C +7C20 +ENDCHAR +STARTCHAR uni7BEA +ENCODING 31722 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +04FC +7F80 +40F8 +4080 +5FFC +5104 +51F0 +5704 +51FC +9142 +A242 +0C3E +ENDCHAR +STARTCHAR uni7BEB +ENCODING 31723 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7DF0 +1110 +1190 +1D52 +E20E +5FF0 +0100 +1FF0 +0100 +7FFC +0100 +0300 +ENDCHAR +STARTCHAR uni7BEC +ENCODING 31724 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +06C0 +1A30 +E10E +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +2FF8 +4808 +8FF8 +ENDCHAR +STARTCHAR uni7BED +ENCODING 31725 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8510 +3FF8 +0820 +FFFE +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +0102 +00FE +ENDCHAR +STARTCHAR uni7BEE +ENCODING 31726 +BBX 15 15 0 -1 +BITMAP +2040 +3F7E +4890 +8508 +0480 +2480 +24FC +24A0 +2510 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni7BEF +ENCODING 31727 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +9528 +1024 +3C3E +41E0 +BC20 +102E +13F4 +FC28 +1012 +106A +1586 +1802 +ENDCHAR +STARTCHAR uni7BF0 +ENCODING 31728 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +3EFE +4910 +8408 +0800 +7F7C +2244 +1448 +FF50 +0048 +3E44 +2244 +2258 +3E40 +ENDCHAR +STARTCHAR uni7BF1 +ENCODING 31729 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0080 +FFFE +0440 +1390 +1450 +1FF0 +0100 +7FFC +4444 +4FE4 +4424 +400C +ENDCHAR +STARTCHAR uni7BF2 +ENCODING 31730 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1010 +FEFE +1010 +7C7C +1010 +FEFE +1010 +3FF8 +0008 +1FF8 +0008 +3FF8 +ENDCHAR +STARTCHAR uni7BF3 +ENCODING 31731 +BBX 15 15 1 -1 +BITMAP +2020 +7F7E +8888 +3FF8 +2108 +3FF8 +2108 +3FF8 +0920 +FFFE +0920 +7FFC +0100 +3FF8 +0100 +ENDCHAR +STARTCHAR uni7BF4 +ENCODING 31732 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +23FC +1080 +1144 +0668 +70B0 +1128 +1668 +10A4 +1124 +16A0 +2840 +47FE +ENDCHAR +STARTCHAR uni7BF5 +ENCODING 31733 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1110 +2110 +4110 +8AA8 +1444 +3040 +5240 +927C +1240 +1540 +14FE +1800 +ENDCHAR +STARTCHAR uni7BF6 +ENCODING 31734 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +0408 +7FFC +0100 +11F0 +1100 +FFFE +1000 +1FF8 +1000 +5FFE +4922 +8494 +ENDCHAR +STARTCHAR uni7BF7 +ENCODING 31735 +BBX 15 15 1 -1 +BITMAP +2080 +7EFE +9110 +08F8 +2710 +90E0 +4318 +2C46 +03F8 +E040 +21F0 +2040 +27FE +5040 +8FFE +ENDCHAR +STARTCHAR uni7BF8 +ENCODING 31736 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +8820 +1FF0 +1020 +2548 +7EFC +0440 +1930 +E64E +1990 +0620 +18C0 +0700 +3800 +ENDCHAR +STARTCHAR uni7BF9 +ENCODING 31737 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1FF0 +1490 +1250 +1FF0 +0200 +FFFE +0820 +3FD8 +C846 +08C0 +0808 +07F8 +ENDCHAR +STARTCHAR uni7BFA +ENCODING 31738 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +9528 +1040 +11FC +7D24 +11FC +1144 +1DFC +7050 +1090 +13FE +5010 +2010 +ENDCHAR +STARTCHAR uni7BFB +ENCODING 31739 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFC +0440 +3FF8 +2448 +3FF8 +0000 +3FF8 +0000 +FFFE +1110 +2508 +0200 +ENDCHAR +STARTCHAR uni7BFC +ENCODING 31740 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1200 +67DC +4444 +47C4 +4444 +57DC +6000 +0440 +0440 +0842 +1042 +603E +ENDCHAR +STARTCHAR uni7BFD +ENCODING 31741 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1400 +27DE +4912 +8112 +17D2 +2112 +6112 +A5D2 +251A +25D4 +2E10 +2410 +ENDCHAR +STARTCHAR uni7BFE +ENCODING 31742 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3FF8 +2448 +2448 +3FF8 +0090 +3FFC +2080 +3048 +2850 +2424 +40D4 +830C +ENDCHAR +STARTCHAR uni7BFF +ENCODING 31743 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +FFFC +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0104 +7FFC +0020 +FFFE +0820 +0460 +ENDCHAR +STARTCHAR uni7C00 +ENCODING 31744 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8890 +0508 +3FF8 +0100 +1FF0 +0100 +FFFE +1010 +1FF0 +1010 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uni7C01 +ENCODING 31745 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +1448 +2040 +4278 +8240 +17FE +2040 +6040 +A278 +2240 +25C0 +287E +ENDCHAR +STARTCHAR uni7C02 +ENCODING 31746 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFC +40A4 +7FFC +4084 +5E94 +5294 +5E64 +4054 +46B4 +5914 +7FFC +4004 +ENDCHAR +STARTCHAR uni7C03 +ENCODING 31747 +BBX 15 15 1 -1 +BITMAP +2040 +3EFE +4908 +8410 +063C +78C4 +0828 +7E10 +08F0 +181E +1C22 +2AE2 +4814 +0818 +09E0 +ENDCHAR +STARTCHAR uni7C04 +ENCODING 31748 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +BFF8 +2008 +3FF8 +2000 +27F0 +2410 +27F0 +2000 +2FF8 +2888 +4FF8 +4802 +87FE +ENDCHAR +STARTCHAR uni7C05 +ENCODING 31749 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0080 +3FFC +0410 +0220 +3FFE +2080 +2480 +2FFC +3080 +47F8 +4080 +9FFE +ENDCHAR +STARTCHAR uni7C06 +ENCODING 31750 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +5090 +8A08 +0100 +7FFE +4022 +BE3C +0020 +7EF8 +1408 +1450 +1424 +24D4 +4404 +83FC +ENDCHAR +STARTCHAR uni7C07 +ENCODING 31751 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8488 +10FC +1080 +FF40 +207C +3C90 +2410 +25FE +4428 +4444 +9982 +ENDCHAR +STARTCHAR uni7C08 +ENCODING 31752 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3FFC +2004 +3FFC +2208 +2410 +2F78 +2410 +2410 +3F7C +4410 +4410 +8810 +ENDCHAR +STARTCHAR uni7C09 +ENCODING 31753 +BBX 15 15 0 -1 +BITMAP +2040 +3F7E +4890 +8548 +2240 +13F8 +1440 +0040 +77FC +1000 +13F8 +1208 +13F8 +2800 +47FE +ENDCHAR +STARTCHAR uni7C0A +ENCODING 31754 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +7FFC +0820 +0FE0 +0820 +0FE0 +0820 +FFFE +1110 +2FE8 +C106 +3FF8 +ENDCHAR +STARTCHAR uni7C0B +ENCODING 31755 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8508 +1FF0 +1010 +1FF0 +1010 +1FF0 +10C8 +1E30 +F00E +3FF8 +2488 +2488 +FFFE +ENDCHAR +STARTCHAR uni7C0C +ENCODING 31756 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +FFA0 +083E +7F42 +4994 +4910 +7F10 +1C10 +2A28 +4928 +8844 +0882 +ENDCHAR +STARTCHAR uni7C0D +ENCODING 31757 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8510 +3FF8 +2108 +FFFE +2108 +3FF8 +0100 +1FF0 +1110 +FFFE +1820 +07C0 +783C +ENDCHAR +STARTCHAR uni7C0E +ENCODING 31758 +BBX 15 15 1 -1 +BITMAP +2040 +3EFE +4910 +8408 +1088 +11FC +FC88 +1088 +13FE +1000 +1DFC +F104 +11FC +1104 +31FC +ENDCHAR +STARTCHAR uni7C0F +ENCODING 31759 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +0100 +3FFC +2480 +3FF8 +2488 +3FF8 +2844 +4F78 +4840 +8F42 +383E +ENDCHAR +STARTCHAR uni7C10 +ENCODING 31760 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +7F20 +083E +7F42 +4984 +7F10 +4910 +7F10 +0828 +FFA8 +0844 +0882 +ENDCHAR +STARTCHAR uni7C11 +ENCODING 31761 +BBX 15 15 1 -1 +BITMAP +2040 +3E7E +4890 +8508 +7FFC +0000 +1FF0 +1010 +FFFE +1010 +1FF0 +0C84 +3848 +CF30 +180E +ENDCHAR +STARTCHAR uni7C12 +ENCODING 31762 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFC +8920 +1FF0 +1010 +1FF0 +1010 +1FF0 +0200 +FFFE +0820 +3498 +C926 +33D0 +ENDCHAR +STARTCHAR uni7C13 +ENCODING 31763 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +3EFE +4990 +8408 +3F80 +2484 +2E88 +24B0 +2E84 +2488 +2E92 +4A84 +4E88 +81B0 +ENDCHAR +STARTCHAR uni7C14 +ENCODING 31764 +BBX 15 15 1 -1 +BITMAP +2040 +3E7E +4890 +8508 +7FFC +0000 +7FFC +1010 +FFFE +1010 +7FFC +0C84 +3848 +CF30 +180E +ENDCHAR +STARTCHAR uni7C15 +ENCODING 31765 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2220 +7F20 +2220 +3EFC +0824 +7F24 +4924 +7F24 +0844 +FF44 +0894 +0908 +ENDCHAR +STARTCHAR uni7C16 +ENCODING 31766 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +040C +5570 +4E40 +4440 +5F7E +4448 +4E48 +5548 +4448 +7F88 +0088 +0108 +ENDCHAR +STARTCHAR uni7C17 +ENCODING 31767 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +2408 +11F0 +8090 +4294 +1512 +2110 +C270 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni7C18 +ENCODING 31768 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3FF0 +0110 +FFFC +0110 +3FF0 +0920 +2548 +2FE8 +2388 +2548 +2928 +4108 +ENDCHAR +STARTCHAR uni7C19 +ENCODING 31769 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4950 +8048 +27FC +2040 +23F8 +FA48 +23F8 +2248 +23F8 +2248 +2010 +2FFE +2110 +20B0 +ENDCHAR +STARTCHAR uni7C1A +ENCODING 31770 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFC +4444 +4444 +7FFC +0028 +FFFE +0820 +7F24 +4928 +4D10 +4A2A +0846 +ENDCHAR +STARTCHAR uni7C1B +ENCODING 31771 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +220C +2270 +FF40 +2240 +3E40 +227E +3E48 +2248 +FF48 +2248 +4148 +8088 +ENDCHAR +STARTCHAR uni7C1C +ENCODING 31772 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +23F8 +1208 +93F8 +4208 +43F8 +1000 +2FFE +E200 +27FC +2924 +2254 +0488 +ENDCHAR +STARTCHAR uni7C1D +ENCODING 31773 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFC +0440 +2828 +1FF0 +2828 +CFE6 +0820 +0FE0 +0100 +1110 +2508 +0200 +ENDCHAR +STARTCHAR uni7C1E +ENCODING 31774 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +7EFC +4284 +7EFC +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni7C1F +ENCODING 31775 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +FFFE +0440 +3FF8 +2448 +3FF8 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni7C20 +ENCODING 31776 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7FFE +850C +7FFE +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +2108 +7FFC +4444 +FFFE +ENDCHAR +STARTCHAR uni7C21 +ENCODING 31777 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +7EFC +4284 +7EFC +4284 +7EFC +4004 +4FE4 +4824 +4FE4 +4824 +4FE4 +400C +ENDCHAR +STARTCHAR uni7C22 +ENCODING 31778 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +3E7C +2244 +3E7C +2244 +3F7C +2084 +2FF4 +2044 +2244 +2184 +2654 +2008 +ENDCHAR +STARTCHAR uni7C23 +ENCODING 31779 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8890 +0508 +3FF8 +2108 +3FF8 +0100 +FFFE +1010 +1FF0 +1010 +1FF0 +0820 +3018 +ENDCHAR +STARTCHAR uni7C24 +ENCODING 31780 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +BFF8 +2448 +3FF8 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni7C25 +ENCODING 31781 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0070 +1F80 +0200 +FFFE +0820 +37D8 +C446 +3FF8 +2008 +27C8 +2448 +27D8 +ENDCHAR +STARTCHAR uni7C26 +ENCODING 31782 +BBX 15 15 1 -1 +BITMAP +2040 +3F7E +4890 +8508 +3F88 +02B0 +6442 +2FEC +3018 +CFE6 +0820 +0FE0 +0440 +0280 +7FFC +ENDCHAR +STARTCHAR uni7C27 +ENCODING 31783 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +0440 +3FF8 +0440 +FFFE +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uni7C28 +ENCODING 31784 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7CF8 +4488 +7CF8 +4284 +3E7C +0440 +3FF8 +0440 +FFFE +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni7C29 +ENCODING 31785 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +2AA8 +0820 +1450 +2288 +7FFC +4004 +0200 +3FF8 +0408 +0850 +3020 +ENDCHAR +STARTCHAR uni7C2A +ENCODING 31786 +BBX 15 15 1 -1 +BITMAP +2020 +7F7E +8890 +0808 +7E7C +4848 +FEFC +0D18 +162A +6446 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7C2B +ENCODING 31787 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8890 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +2548 +3FF8 +2108 +3D78 +2548 +4548 +ENDCHAR +STARTCHAR uni7C2C +ENCODING 31788 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0080 +78F8 +4908 +4A90 +7860 +1198 +1206 +5DF8 +5108 +5108 +5DF8 +E108 +ENDCHAR +STARTCHAR uni7C2D +ENCODING 31789 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFC +1110 +2928 +4544 +FFFE +0820 +3018 +DFF6 +1010 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni7C2E +ENCODING 31790 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +3EF8 +0820 +7EFC +1450 +2288 +5FF4 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni7C2F +ENCODING 31791 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1088 +1088 +13FE +FC88 +10F8 +3888 +34F8 +5088 +53FE +9088 +1104 +1202 +ENDCHAR +STARTCHAR uni7C30 +ENCODING 31792 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +4840 +49FC +7D24 +41FC +4144 +79FC +48A0 +4920 +4BFE +4820 +8820 +ENDCHAR +STARTCHAR uni7C31 +ENCODING 31793 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +1448 +1048 +FDFE +2048 +2078 +3C48 +2478 +2448 +45FE +4448 +9986 +ENDCHAR +STARTCHAR uni7C32 +ENCODING 31794 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0020 +3C40 +25FC +2524 +3DFC +2544 +25FC +3C50 +2490 +27FE +5410 +8810 +ENDCHAR +STARTCHAR uni7C33 +ENCODING 31795 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +1028 +FE50 +1088 +7D04 +44F8 +7C20 +4420 +7DFE +1020 +FE20 +1020 +ENDCHAR +STARTCHAR uni7C34 +ENCODING 31796 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +01F8 +0100 +3FFE +2102 +21F0 +2F04 +20FC +2924 +2528 +5FFE +4210 +8408 +ENDCHAR +STARTCHAR uni7C35 +ENCODING 31797 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1040 +FE78 +1088 +7D50 +5420 +7CD8 +5706 +7CF8 +1088 +FE88 +10F8 +1088 +ENDCHAR +STARTCHAR uni7C36 +ENCODING 31798 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +0480 +71F8 +0108 +03F8 +F810 +27FE +2240 +A944 +A8E8 +A958 +2646 +20C0 +ENDCHAR +STARTCHAR uni7C37 +ENCODING 31799 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +9110 +0FE8 +1840 +7FFC +2410 +39DC +2000 +3FFC +2000 +4FF8 +8808 +0FF8 +ENDCHAR +STARTCHAR uni7C38 +ENCODING 31800 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8920 +2410 +FE10 +25FE +3C92 +2490 +3CFC +24A4 +FEA8 +2110 +4528 +8246 +ENDCHAR +STARTCHAR uni7C39 +ENCODING 31801 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +9110 +0920 +3FFC +2004 +4FE8 +0820 +0FE0 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +ENDCHAR +STARTCHAR uni7C3A +ENCODING 31802 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFE +4442 +9FF4 +0440 +3FF8 +0440 +FFFE +0820 +1110 +2FE8 +C106 +1FF0 +ENDCHAR +STARTCHAR uni7C3B +ENCODING 31803 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +21F8 +1108 +11E8 +0128 +73FC +1204 +12F4 +1294 +12F4 +1214 +2A08 +47FE +ENDCHAR +STARTCHAR uni7C3C +ENCODING 31804 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2110 +27FC +F910 +27FC +2910 +37FE +E248 +23F8 +2248 +2FFE +A208 +4218 +ENDCHAR +STARTCHAR uni7C3D +ENCODING 31805 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7F7E +9090 +0908 +06C0 +1830 +E7CE +0000 +3EFC +2284 +3EFC +1010 +2828 +C6C6 +ENDCHAR +STARTCHAR uni7C3E +ENCODING 31806 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +7FFE +4420 +5FFC +4240 +5FF8 +4248 +7FFE +4248 +9FF8 +8A50 +1248 +6246 +ENDCHAR +STARTCHAR uni7C3F +ENCODING 31807 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8948 +47FE +2040 +07FC +8444 +47FC +0444 +07FC +0008 +2FFE +4208 +8138 +ENDCHAR +STARTCHAR uni7C40 +ENCODING 31808 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +7EFE +9120 +2990 +267C +2414 +F514 +26A4 +284C +33F8 +E248 +23F8 +2248 +63F8 +ENDCHAR +STARTCHAR uni7C41 +ENCODING 31809 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +7F3C +0844 +3E88 +2A7C +2A44 +3E54 +0854 +1C54 +2A28 +4844 +0882 +ENDCHAR +STARTCHAR uni7C42 +ENCODING 31810 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0840 +1440 +2AFE +7F10 +A210 +3EFE +2292 +3E92 +289A +2494 +2A10 +3010 +ENDCHAR +STARTCHAR uni7C43 +ENCODING 31811 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8920 +0410 +7F20 +487E +7E80 +4200 +7E7C +4800 +7F00 +0000 +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni7C44 +ENCODING 31812 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +BFFC +2080 +27F0 +2490 +27F0 +2080 +3FFC +2410 +27F0 +2410 +27F0 +2220 +3FFC +ENDCHAR +STARTCHAR uni7C45 +ENCODING 31813 +BBX 15 15 1 -1 +BITMAP +2040 +3EFE +4910 +8508 +0900 +31B8 +2108 +39B8 +2288 +3AB8 +2288 +FFFE +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni7C46 +ENCODING 31814 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +8820 +7FFC +0920 +1FF8 +3100 +5FF0 +9100 +1FFC +1000 +3FF0 +0820 +07C0 +F83E +ENDCHAR +STARTCHAR uni7C47 +ENCODING 31815 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +8080 +3FFC +0000 +0FF0 +0810 +7FFE +4002 +9FF4 +0100 +0698 +39E0 +0690 +398C +ENDCHAR +STARTCHAR uni7C48 +ENCODING 31816 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7F7C +1420 +7F20 +5538 +5528 +7F48 +0868 +0858 +7F4A +084A +0F6A +F046 +ENDCHAR +STARTCHAR uni7C49 +ENCODING 31817 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +FFFE +0100 +3FF8 +0000 +1FF0 +1010 +7FFE +4822 +9FF4 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni7C4A +ENCODING 31818 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +7EFC +162C +2A54 +1224 +6840 +1FF8 +3080 +DFF8 +1080 +1FF8 +1080 +1FFC +ENDCHAR +STARTCHAR uni7C4B +ENCODING 31819 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +8000 +7FFC +2108 +4104 +BFFA +2108 +3558 +2928 +3558 +2108 +3558 +2928 +3558 +ENDCHAR +STARTCHAR uni7C4C +ENCODING 31820 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +7FFC +0100 +3FFE +0002 +1FFA +0100 +FFFE +0004 +7DFE +4444 +7C2C +ENDCHAR +STARTCHAR uni7C4D +ENCODING 31821 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +3F7E +4488 +9048 +7DFE +1048 +7C48 +11FE +FE00 +30FC +3884 +54FC +9284 +10FC +ENDCHAR +STARTCHAR uni7C4E +ENCODING 31822 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +247C +3A04 +2228 +1E10 +20FE +3E12 +4850 +085E +7F50 +14B0 +229E +4100 +ENDCHAR +STARTCHAR uni7C4F +ENCODING 31823 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +1508 +13FE +FC48 +21FE +2048 +3C78 +2448 +2478 +2448 +45FE +4448 +9986 +ENDCHAR +STARTCHAR uni7C50 +ENCODING 31824 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +0488 +78A4 +4924 +49FC +7850 +4BFE +4888 +7924 +4AAA +4870 +88A8 +9B66 +ENDCHAR +STARTCHAR uni7C51 +ENCODING 31825 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8408 +1FF0 +1010 +1FF0 +1010 +FFFE +1010 +3FE8 +C826 +0FE8 +0890 +0E60 +701E +ENDCHAR +STARTCHAR uni7C52 +ENCODING 31826 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +27FE +20A0 +F7BC +24A4 +37BC +20A0 +67FC +A444 +27FC +2444 +A7FC +4404 +ENDCHAR +STARTCHAR uni7C53 +ENCODING 31827 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +A038 +17C0 +1248 +8150 +47FC +5248 +1404 +2BFA +E248 +23F8 +2248 +23F8 +2208 +ENDCHAR +STARTCHAR uni7C54 +ENCODING 31828 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8908 +3E20 +2A3E +FFA4 +2A44 +7FC4 +4928 +7F28 +1010 +FF90 +2228 +1C44 +E382 +ENDCHAR +STARTCHAR uni7C55 +ENCODING 31829 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1040 +11BC +1114 +FD54 +11AC +3040 +39FC +5524 +51FC +9124 +11FC +1104 +ENDCHAR +STARTCHAR uni7C56 +ENCODING 31830 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8940 +7F28 +0824 +FFFE +1420 +7724 +1424 +7728 +1410 +7710 +142A +1F4A +F084 +ENDCHAR +STARTCHAR uni7C57 +ENCODING 31831 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +7FFC +0100 +7FFC +4924 +4444 +1FF8 +3080 +DFF8 +1080 +1FF8 +1080 +1FFC +ENDCHAR +STARTCHAR uni7C58 +ENCODING 31832 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +0488 +78A4 +4924 +49FC +7850 +4BFE +48A8 +7B54 +4822 +49FC +88A8 +9B26 +ENDCHAR +STARTCHAR uni7C59 +ENCODING 31833 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3F7E +4890 +957C +2844 +44FC +FE08 +11FE +FC92 +1054 +9438 +5454 +5F92 +F030 +ENDCHAR +STARTCHAR uni7C5A +ENCODING 31834 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +81F8 +0100 +3FFC +2104 +2FE0 +2108 +27F8 +2490 +27F0 +2490 +4FF8 +4948 +9FFC +ENDCHAR +STARTCHAR uni7C5B +ENCODING 31835 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +1090 +1088 +2BFE +4448 +B832 +11CE +7C90 +1088 +97FE +5048 +1C32 +E1CE +ENDCHAR +STARTCHAR uni7C5C +ENCODING 31836 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +11FC +1154 +FDFC +1020 +15FC +1820 +33FE +D088 +11FC +1020 +53FE +2020 +ENDCHAR +STARTCHAR uni7C5D +ENCODING 31837 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +7FFC +1000 +1FF8 +0820 +0FE0 +7938 +4FA8 +7AA8 +4AB8 +792A +4AAA +9C46 +ENDCHAR +STARTCHAR uni7C5E +ENCODING 31838 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +27DE +C912 +1FD2 +2512 +E5D6 +2E10 +2010 +3FF8 +0000 +FFFE +1120 +E71E +ENDCHAR +STARTCHAR uni7C5F +ENCODING 31839 +BBX 15 15 1 -1 +BITMAP +2040 +7F7E +8890 +15FC +FC44 +1098 +7DFC +5484 +54FC +7C84 +10FC +3884 +54FC +9248 +1186 +ENDCHAR +STARTCHAR uni7C60 +ENCODING 31840 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8840 +7F78 +2240 +FFF8 +0008 +3E78 +2240 +3E78 +2240 +3E7A +2242 +263E +ENDCHAR +STARTCHAR uni7C61 +ENCODING 31841 +BBX 15 15 1 -1 +BITMAP +2040 +3EFE +4910 +8448 +20A0 +2110 +FA08 +25F6 +2000 +23BC +3AA4 +E3BC +2108 +2294 +6422 +ENDCHAR +STARTCHAR uni7C62 +ENCODING 31842 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +1420 +223E +5D44 +80A4 +7724 +5528 +7728 +2210 +2228 +5544 +8882 +ENDCHAR +STARTCHAR uni7C63 +ENCODING 31843 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +FD7C +4444 +7C7C +4444 +7C7C +4104 +5FF4 +4104 +5FF4 +5554 +5FF4 +4544 +592C +ENDCHAR +STARTCHAR uni7C64 +ENCODING 31844 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +9140 +2228 +5524 +FFFE +1420 +7724 +1424 +7728 +1410 +7710 +142A +1F4A +F084 +ENDCHAR +STARTCHAR uni7C65 +ENCODING 31845 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +9390 +0C48 +3BB8 +C006 +7BBC +4AA4 +7BBC +0000 +3FF8 +2448 +3FF8 +2448 +2458 +ENDCHAR +STARTCHAR uni7C66 +ENCODING 31846 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +85FC +1020 +2BFE +4420 +B9FC +1124 +7DFC +1124 +95FC +5020 +1DFE +E020 +47FE +ENDCHAR +STARTCHAR uni7C67 +ENCODING 31847 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +85F8 +4080 +2FFC +2884 +0BF0 +E888 +2BF8 +2940 +2AA8 +3170 +22A8 +5160 +8FFE +ENDCHAR +STARTCHAR uni7C68 +ENCODING 31848 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +0820 +1420 +223E +5D42 +8084 +7710 +5510 +7710 +2228 +2228 +5544 +8882 +ENDCHAR +STARTCHAR uni7C69 +ENCODING 31849 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8920 +03F8 +4208 +23F8 +C208 +2FFE +0912 +E248 +2FFE +2100 +21F8 +5208 +8FFE +ENDCHAR +STARTCHAR uni7C6A +ENCODING 31850 +BBX 15 16 0 -2 +BITMAP +2080 +3EFE +4910 +8882 +511C +5DD0 +4890 +5DD0 +445E +7FF4 +5114 +5DD4 +4894 +5DD4 +4454 +7FE4 +ENDCHAR +STARTCHAR uni7C6B +ENCODING 31851 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +2850 +3E7C +4890 +FEFE +1528 +264A +5FF6 +1490 +1250 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni7C6C +ENCODING 31852 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +0828 +FF24 +147E +49C8 +5548 +7F7C +0848 +FF48 +897C +9548 +FB48 +817E +ENDCHAR +STARTCHAR uni7C6D +ENCODING 31853 +BBX 15 15 1 -1 +BITMAP +2020 +3F7E +4488 +FEFE +5454 +4544 +7FFE +4440 +7FFC +4444 +7FFC +4840 +8F7A +8842 +3F3E +ENDCHAR +STARTCHAR uni7C6E +ENCODING 31854 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8508 +3FF8 +2448 +3FFC +1048 +24FE +6990 +14FC +FA90 +10FC +5490 +92FE +ENDCHAR +STARTCHAR uni7C6F +ENCODING 31855 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +0408 +7FFC +2000 +3FF8 +1010 +7FF8 +52A8 +73B8 +52EA +53AA +B466 +ENDCHAR +STARTCHAR uni7C70 +ENCODING 31856 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +7CF8 +4488 +7CF8 +4488 +7FFC +2100 +3FF8 +2100 +FFFE +1030 +0FC0 +F83E +ENDCHAR +STARTCHAR uni7C71 +ENCODING 31857 +BBX 15 16 0 -2 +BITMAP +2040 +3E7E +4890 +BFF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +4890 +7EFC +C990 +7EFC +4890 +7EFC +ENDCHAR +STARTCHAR uni7C72 +ENCODING 31858 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +8508 +18FE +2410 +7E7C +8144 +7F7C +5544 +7F7C +0044 +7F7C +5528 +7F44 +5582 +ENDCHAR +STARTCHAR uni7C73 +ENCODING 31859 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +1110 +0920 +0100 +FFFE +0500 +0540 +0920 +0910 +1108 +2104 +C102 +0100 +0100 +ENDCHAR +STARTCHAR uni7C74 +ENCODING 31860 +BBX 15 16 0 -2 +BITMAP +0600 +0100 +0280 +0440 +1830 +E10E +1110 +0920 +0540 +7FFC +0540 +0920 +1110 +2108 +C106 +0100 +ENDCHAR +STARTCHAR uni7C75 +ENCODING 31861 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +5220 +5220 +5420 +1020 +FFFE +1020 +3820 +3420 +5220 +5020 +9020 +1020 +1020 +ENDCHAR +STARTCHAR uni7C76 +ENCODING 31862 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +4AF0 +2A90 +2C90 +0890 +FE90 +1890 +1C90 +2A90 +2A90 +4892 +8892 +0912 +090E +0A00 +ENDCHAR +STARTCHAR uni7C77 +ENCODING 31863 +BBX 15 16 0 -2 +BITMAP +0808 +081C +4AE0 +2A20 +2C20 +0820 +FE20 +183E +1DE0 +2A20 +2A20 +4822 +8822 +0822 +081E +0800 +ENDCHAR +STARTCHAR uni7C78 +ENCODING 31864 +BBX 15 16 0 -2 +BITMAP +1000 +13F0 +9490 +5490 +5890 +1090 +FC90 +33F0 +3890 +5490 +5490 +9092 +108A +108A +1086 +1082 +ENDCHAR +STARTCHAR uni7C79 +ENCODING 31865 +BBX 15 15 1 -1 +BITMAP +1040 +5240 +5240 +3440 +13FE +FC88 +1088 +1088 +3088 +3910 +5510 +53E0 +9030 +10C8 +1704 +ENDCHAR +STARTCHAR uni7C7A +ENCODING 31866 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +4A40 +2AFE +2C80 +0900 +FE7C +1808 +1C10 +2A20 +2A40 +4880 +8902 +0902 +08FE +0800 +ENDCHAR +STARTCHAR uni7C7B +ENCODING 31867 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +0100 +7FFC +0540 +0920 +1110 +6008 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni7C7C +ENCODING 31868 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +9420 +5420 +5924 +1124 +FD24 +3124 +3924 +5524 +5524 +9124 +1124 +11FC +1004 +1000 +ENDCHAR +STARTCHAR uni7C7D +ENCODING 31869 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +9404 +5408 +5810 +1020 +FC20 +33FE +3820 +5420 +5420 +9020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni7C7E +ENCODING 31870 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +9444 +5444 +5844 +1144 +FEC4 +1044 +3864 +3454 +544E +5084 +9084 +1104 +1238 +ENDCHAR +STARTCHAR uni7C7F +ENCODING 31871 +BBX 15 16 0 -2 +BITMAP +0808 +0808 +4A08 +2A08 +2CFE +0808 +FE08 +1808 +1C88 +2A48 +2A48 +4808 +8808 +0808 +0828 +0810 +ENDCHAR +STARTCHAR uni7C80 +ENCODING 31872 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +9410 +5410 +5BFE +1010 +FC10 +3110 +3910 +5490 +5490 +9050 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni7C81 +ENCODING 31873 +BBX 15 15 1 -1 +BITMAP +1018 +10E0 +5420 +5420 +5820 +1020 +FDFE +1020 +3820 +3420 +5220 +5020 +9020 +1020 +1020 +ENDCHAR +STARTCHAR uni7C82 +ENCODING 31874 +BBX 15 15 1 -1 +BITMAP +0200 +07E0 +1840 +6180 +0660 +1818 +6106 +1110 +0920 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni7C83 +ENCODING 31875 +BBX 15 15 1 -1 +BITMAP +2220 +2220 +AA20 +AA20 +B226 +23B8 +FA20 +2220 +7220 +6A20 +A620 +A220 +2222 +23A2 +2E1E +ENDCHAR +STARTCHAR uni7C84 +ENCODING 31876 +BBX 15 16 0 -2 +BITMAP +1008 +101C +95E0 +5500 +5900 +11FC +FD44 +3144 +3944 +5528 +5528 +9110 +1110 +1228 +1244 +1482 +ENDCHAR +STARTCHAR uni7C85 +ENCODING 31877 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +9480 +54FC +5954 +1254 +FC54 +3094 +3894 +5524 +5624 +9044 +1044 +1084 +1128 +1010 +ENDCHAR +STARTCHAR uni7C86 +ENCODING 31878 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +9420 +54A8 +58A4 +10A2 +FD22 +3120 +3A24 +5424 +5428 +9008 +1010 +1020 +10C0 +1300 +ENDCHAR +STARTCHAR uni7C87 +ENCODING 31879 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +9440 +57FC +5800 +1000 +FDF0 +3110 +3910 +5510 +5510 +9112 +1112 +1212 +120E +1400 +ENDCHAR +STARTCHAR uni7C88 +ENCODING 31880 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +9448 +5448 +5848 +1048 +FC48 +31F8 +3888 +5488 +5488 +9088 +1088 +1088 +13FE +1000 +ENDCHAR +STARTCHAR uni7C89 +ENCODING 31881 +BBX 15 15 1 -1 +BITMAP +1030 +9010 +5488 +5488 +5904 +1202 +FDFC +1044 +3044 +3844 +5444 +5084 +9088 +1108 +1230 +ENDCHAR +STARTCHAR uni7C8A +ENCODING 31882 +BBX 15 16 0 -2 +BITMAP +2080 +2088 +3CB0 +20C0 +2084 +2C84 +307C +0000 +1110 +0920 +7FFC +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni7C8B +ENCODING 31883 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +95F8 +9448 +5848 +104A +FC8A +1306 +3820 +3420 +57FE +5020 +9020 +1020 +1020 +ENDCHAR +STARTCHAR uni7C8C +ENCODING 31884 +BBX 14 16 0 -2 +BITMAP +1004 +11E4 +9424 +5424 +5824 +11E4 +FD04 +3104 +3904 +55E4 +5424 +9024 +1024 +1024 +1144 +1084 +ENDCHAR +STARTCHAR uni7C8D +ENCODING 31885 +BBX 15 15 1 -1 +BITMAP +1030 +11C0 +5440 +5440 +587C +13C0 +FC40 +107C +33C0 +3840 +5440 +5040 +9042 +1042 +103E +ENDCHAR +STARTCHAR uni7C8E +ENCODING 31886 +BBX 15 16 0 -2 +BITMAP +0800 +08FC +4A84 +2A84 +2C84 +0884 +FEFC +18A0 +1CA0 +2AA0 +2A90 +4890 +8908 +0908 +0A04 +0C02 +ENDCHAR +STARTCHAR uni7C8F +ENCODING 31887 +BBX 15 15 1 -1 +BITMAP +1020 +5420 +5420 +3420 +1020 +FDFE +1020 +1050 +3850 +3450 +5488 +50C8 +9124 +1124 +1202 +ENDCHAR +STARTCHAR uni7C90 +ENCODING 31888 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +A800 +A800 +B1FC +2104 +F904 +2104 +71FC +6900 +A500 +A100 +2200 +2200 +2400 +ENDCHAR +STARTCHAR uni7C91 +ENCODING 31889 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +95FC +5524 +5924 +1124 +FD24 +3124 +39FC +5500 +5500 +9100 +1102 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni7C92 +ENCODING 31890 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +9440 +57FC +5800 +1008 +FD08 +1108 +3908 +3488 +5488 +9090 +1010 +1010 +17FE +ENDCHAR +STARTCHAR uni7C93 +ENCODING 31891 +BBX 15 16 0 -2 +BITMAP +0888 +0888 +4A88 +2A88 +2DFE +0888 +FE88 +1888 +1C88 +2AF8 +2A88 +4888 +8888 +0888 +08F8 +0888 +ENDCHAR +STARTCHAR uni7C94 +ENCODING 31892 +BBX 15 15 1 -1 +BITMAP +1000 +57FE +5500 +3500 +1100 +FDFC +1104 +1104 +3904 +35FC +5500 +5100 +9100 +1100 +13FE +ENDCHAR +STARTCHAR uni7C95 +ENCODING 31893 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +9440 +55FC +5904 +1104 +FF04 +1104 +39FC +3504 +5504 +5104 +9104 +1104 +11FC +ENDCHAR +STARTCHAR uni7C96 +ENCODING 31894 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +9420 +55FE +5820 +1020 +FC20 +31FC +3870 +54A8 +54A8 +9124 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni7C97 +ENCODING 31895 +BBX 15 15 1 -1 +BITMAP +1000 +10F8 +9488 +5488 +5888 +10F8 +FC88 +1088 +3888 +34F8 +5488 +5088 +9088 +1088 +13FE +ENDCHAR +STARTCHAR uni7C98 +ENCODING 31896 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +9420 +543E +5820 +1020 +FE20 +1020 +39FC +3504 +5104 +5104 +9104 +1104 +11FC +ENDCHAR +STARTCHAR uni7C99 +ENCODING 31897 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +9420 +5420 +59FC +1124 +FD24 +3124 +3924 +55FC +5524 +9124 +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni7C9A +ENCODING 31898 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +94FE +5500 +5A20 +1120 +FD2C +3174 +3BA4 +5524 +5534 +9128 +1122 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni7C9B +ENCODING 31899 +BBX 15 15 1 -1 +BITMAP +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +2928 +2548 +2FE8 +2108 +2388 +4548 +4928 +8108 +ENDCHAR +STARTCHAR uni7C9C +ENCODING 31900 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +1110 +1FF0 +4104 +4104 +7FFC +0000 +1110 +0920 +7FFC +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni7C9D +ENCODING 31901 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +9500 +5500 +5900 +11FE +FD20 +3120 +393C +5524 +5524 +9124 +1124 +1244 +1254 +1488 +ENDCHAR +STARTCHAR uni7C9E +ENCODING 31902 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +9450 +5450 +59FC +1154 +FD54 +3154 +3954 +5554 +558C +9104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni7C9F +ENCODING 31903 +BBX 15 14 1 -1 +BITMAP +FFFE +0440 +3FF8 +2448 +2448 +3FF8 +1110 +0920 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni7CA0 +ENCODING 31904 +BBX 15 15 1 -1 +BITMAP +1090 +9490 +9490 +5490 +13FC +FC90 +1090 +1090 +3890 +3490 +57FE +5000 +9090 +1108 +1204 +ENDCHAR +STARTCHAR uni7CA1 +ENCODING 31905 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +AA02 +AA02 +B2FA +2202 +FA02 +22FA +728A +6A8A +AA8A +A2FA +2202 +2202 +220E +ENDCHAR +STARTCHAR uni7CA2 +ENCODING 31906 +BBX 15 15 1 -1 +BITMAP +0100 +6100 +13FE +0444 +1040 +20A0 +4118 +8606 +1110 +0920 +FFFE +0540 +0920 +3118 +C106 +ENDCHAR +STARTCHAR uni7CA3 +ENCODING 31907 +BBX 15 16 0 -2 +BITMAP +1000 +11DC +9554 +5554 +5954 +1154 +FD54 +33FE +3954 +5554 +5554 +9154 +1154 +12D4 +1224 +144C +ENDCHAR +STARTCHAR uni7CA4 +ENCODING 31908 +BBX 15 15 1 -1 +BITMAP +0200 +0400 +3FF8 +2948 +2588 +2FE8 +2548 +2928 +3FF8 +0000 +FFFE +0400 +0FF8 +0808 +0038 +ENDCHAR +STARTCHAR uni7CA5 +ENCODING 31909 +BBX 15 14 1 -1 +BITMAP +F11E +1142 +1542 +F39E +8110 +8FF0 +8110 +F39E +1382 +1542 +1542 +1922 +1102 +E11C +ENDCHAR +STARTCHAR uni7CA6 +ENCODING 31910 +BBX 15 15 1 -1 +BITMAP +2108 +1110 +0100 +FFFE +0540 +0920 +3118 +D00E +1E08 +22FE +D248 +0A48 +0DFE +3008 +C008 +ENDCHAR +STARTCHAR uni7CA7 +ENCODING 31911 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +AFFE +AC00 +B420 +2420 +FC20 +25FC +7420 +6C20 +A420 +A420 +2820 +2820 +33FE +ENDCHAR +STARTCHAR uni7CA8 +ENCODING 31912 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +A840 +A840 +B080 +23FC +FA04 +2204 +7204 +6BFC +AA04 +A204 +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni7CA9 +ENCODING 31913 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +9444 +55F4 +5848 +1050 +FDFE +3040 +3880 +5584 +5698 +90E0 +1082 +1082 +107E +1000 +ENDCHAR +STARTCHAR uni7CAA +ENCODING 31914 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +7FFC +0540 +0920 +3118 +C446 +0440 +3FF8 +0440 +0440 +FFFE +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni7CAB +ENCODING 31915 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +A840 +A880 +B3FC +22A4 +FAA4 +22A4 +72A4 +6AA4 +AAA4 +A2A4 +22A4 +22A4 +22AC +ENDCHAR +STARTCHAR uni7CAC +ENCODING 31916 +BBX 14 16 0 -2 +BITMAP +1050 +1050 +9450 +5450 +59FC +1154 +FD54 +3154 +3954 +55FC +5554 +9154 +1154 +1154 +11FC +1104 +ENDCHAR +STARTCHAR uni7CAD +ENCODING 31917 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +A850 +A888 +B104 +2202 +F8F8 +2000 +7000 +69FC +A904 +A104 +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni7CAE +ENCODING 31918 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +ABF8 +AA08 +B208 +23F8 +FA08 +2208 +73F8 +6A42 +AA44 +A228 +2210 +23C8 +2E06 +ENDCHAR +STARTCHAR uni7CAF +ENCODING 31919 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +9508 +5508 +59F8 +1108 +FD08 +31F8 +3908 +5508 +55F8 +9090 +1090 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni7CB0 +ENCODING 31920 +BBX 15 16 0 -2 +BITMAP +1008 +103C +95C0 +5404 +5944 +10A8 +FC00 +31F8 +3810 +5420 +57FE +9020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni7CB1 +ENCODING 31921 +BBX 15 15 1 -1 +BITMAP +3000 +0BF0 +C090 +2294 +0492 +1512 +2130 +C300 +1110 +0920 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni7CB2 +ENCODING 31922 +BBX 15 15 1 -1 +BITMAP +0800 +0F00 +287C +7F88 +C150 +2620 +1858 +E106 +1110 +0920 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni7CB3 +ENCODING 31923 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +A840 +ABF8 +B248 +2248 +FBF8 +2248 +7248 +6BF8 +A840 +A140 +20C0 +2130 +260E +ENDCHAR +STARTCHAR uni7CB4 +ENCODING 31924 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +9524 +5524 +59FC +1124 +FD24 +31FC +3820 +5420 +55FC +9020 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni7CB5 +ENCODING 31925 +BBX 15 16 0 -2 +BITMAP +0400 +3FF8 +20C8 +2F28 +2548 +3FF8 +2548 +2928 +3FF8 +0000 +FFFE +1000 +1FF8 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni7CB6 +ENCODING 31926 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +A9F8 +A908 +B1F8 +2010 +FBFE +2020 +7324 +68A4 +A828 +A070 +20A8 +2326 +2060 +ENDCHAR +STARTCHAR uni7CB7 +ENCODING 31927 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +A9FE +AA02 +B442 +224A +F952 +23FA +7042 +68E2 +A8D2 +A14A +2144 +2244 +2018 +ENDCHAR +STARTCHAR uni7CB8 +ENCODING 31928 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +97FE +5488 +5888 +10F8 +FC88 +3088 +38F8 +5488 +5488 +93FE +1000 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni7CB9 +ENCODING 31929 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +AFFC +A800 +B110 +2110 +FAA8 +24A4 +7000 +6840 +AFFE +A040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni7CBA +ENCODING 31930 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +95FC +5524 +5924 +11FC +FD24 +3144 +39FC +5490 +5510 +93FE +1010 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni7CBB +ENCODING 31931 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +9480 +54F8 +5880 +10F8 +FC80 +33FE +3940 +5524 +5528 +9110 +1108 +1144 +1182 +1100 +ENDCHAR +STARTCHAR uni7CBC +ENCODING 31932 +BBX 15 15 1 -1 +BITMAP +4912 +2A12 +0824 +FFA4 +2A48 +4948 +8890 +4890 +7148 +D7C8 +9524 +5524 +2512 +4F92 +8112 +ENDCHAR +STARTCHAR uni7CBD +ENCODING 31933 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +ABFE +AA02 +B202 +21FC +F800 +2000 +73FE +6820 +A928 +A128 +2224 +2422 +20E0 +ENDCHAR +STARTCHAR uni7CBE +ENCODING 31934 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +AFFC +A840 +6BF8 +2040 +FFFE +2000 +73F8 +6A08 +6BF8 +A208 +A3F8 +2208 +2238 +ENDCHAR +STARTCHAR uni7CBF +ENCODING 31935 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +AA48 +AA48 +B3F8 +2248 +FA48 +23F8 +7040 +6FFE +A950 +A248 +2444 +2842 +2040 +ENDCHAR +STARTCHAR uni7CC0 +ENCODING 31936 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +AFFE +A910 +B110 +2080 +F8A0 +20A4 +7138 +6B20 +A520 +A120 +2122 +2122 +211E +ENDCHAR +STARTCHAR uni7CC1 +ENCODING 31937 +BBX 15 16 0 -2 +BITMAP +1040 +1048 +9484 +55FE +5820 +13FE +FC88 +3124 +3A42 +5588 +5410 +9062 +1184 +1018 +1060 +1380 +ENDCHAR +STARTCHAR uni7CC2 +ENCODING 31938 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +AFFE +A908 +B1F8 +2108 +F9F8 +2108 +77FE +6A90 +A290 +A31C +2200 +2200 +23FE +ENDCHAR +STARTCHAR uni7CC3 +ENCODING 31939 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +9484 +54FC +5884 +10FC +FC00 +31FE +3880 +54FE +552A +924A +1092 +1122 +1054 +1088 +ENDCHAR +STARTCHAR uni7CC4 +ENCODING 31940 +BBX 15 15 1 -1 +BITMAP +201C +23E0 +AA00 +ABFC +B204 +2204 +FBFC +2200 +73FE +6A92 +AA92 +A7FE +2692 +2A92 +2206 +ENDCHAR +STARTCHAR uni7CC5 +ENCODING 31941 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +A810 +A8A0 +B040 +23FC +F8A8 +2120 +7260 +6840 +A7FE +A0D0 +2148 +2646 +2040 +ENDCHAR +STARTCHAR uni7CC6 +ENCODING 31942 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +9420 +5440 +59FC +1154 +FD54 +3174 +3954 +5554 +5574 +9154 +1154 +1154 +11FC +1104 +ENDCHAR +STARTCHAR uni7CC7 +ENCODING 31943 +BBX 15 16 0 -2 +BITMAP +1080 +10BC +9484 +5508 +59FE +1320 +FD20 +317C +3990 +5510 +55FE +9110 +1128 +1128 +1144 +1182 +ENDCHAR +STARTCHAR uni7CC8 +ENCODING 31944 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +A822 +A93C +B120 +21A0 +FA7E +2000 +71FC +6904 +A9FC +A104 +21FC +2104 +210C +ENDCHAR +STARTCHAR uni7CC9 +ENCODING 31945 +BBX 15 16 0 -2 +BITMAP +2000 +2088 +2252 +AA22 +7252 +228A +FA02 +23FE +7088 +6944 +AA7A +2088 +2150 +2020 +20D8 +2706 +ENDCHAR +STARTCHAR uni7CCA +ENCODING 31946 +BBX 14 15 1 -1 +BITMAP +2200 +223C +AA24 +AFA4 +6224 +223C +FA24 +27A4 +74A4 +6CBC +64A4 +A4A4 +A7C4 +2044 +208C +ENDCHAR +STARTCHAR uni7CCB +ENCODING 31947 +BBX 15 16 0 -2 +BITMAP +2108 +2088 +2090 +ABFE +7000 +23C4 +FA54 +2254 +73D4 +6A54 +AA54 +23D4 +2254 +2244 +2254 +22C8 +ENDCHAR +STARTCHAR uni7CCC +ENCODING 31948 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +21EC +A92A +7228 +2548 +F888 +217E +7600 +69FC +A904 +2104 +21FC +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni7CCD +ENCODING 31949 +BBX 15 15 1 -1 +BITMAP +2108 +2088 +A890 +AFFE +B108 +2108 +FA10 +24A4 +7294 +6908 +A908 +A294 +2294 +23DA +2672 +ENDCHAR +STARTCHAR uni7CCE +ENCODING 31950 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +AC00 +ADFC +B524 +2524 +FDFC +2524 +6524 +75FC +AC20 +A5FC +2820 +2820 +23FE +ENDCHAR +STARTCHAR uni7CCF +ENCODING 31951 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +AA02 +73FE +2210 +FA92 +2254 +72FE +6A82 +AAFE +2282 +22FE +2482 +248A +2884 +ENDCHAR +STARTCHAR uni7CD0 +ENCODING 31952 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +97FE +5420 +59FC +1124 +FDFC +3124 +39FC +5524 +5408 +93FE +1088 +1048 +1048 +1018 +ENDCHAR +STARTCHAR uni7CD1 +ENCODING 31953 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2042 +A842 +73DE +2210 +FA10 +23DE +7042 +6A52 +A94A +214A +2252 +2042 +2294 +2108 +ENDCHAR +STARTCHAR uni7CD2 +ENCODING 31954 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +ABFE +A890 +B090 +27FE +FC00 +25FC +7524 +6DFC +A524 +A5FC +2524 +2924 +212C +ENDCHAR +STARTCHAR uni7CD3 +ENCODING 31955 +BBX 15 16 0 -2 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FE86 +8200 +7CFC +1044 +5444 +3828 +FE28 +1010 +3828 +5444 +9182 +ENDCHAR +STARTCHAR uni7CD4 +ENCODING 31956 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +94A4 +5488 +5850 +1020 +FCD8 +3326 +3820 +55FC +5524 +9124 +11FC +1022 +13FE +1002 +ENDCHAR +STARTCHAR uni7CD5 +ENCODING 31957 +BBX 15 15 1 -1 +BITMAP +1108 +9488 +9490 +55F8 +1040 +FC40 +11F8 +1040 +3840 +3440 +57FE +5000 +9294 +144A +144A +ENDCHAR +STARTCHAR uni7CD6 +ENCODING 31958 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +AFFE +AC20 +B5FC +2424 +FFFE +2424 +75FC +6C00 +A5FC +A504 +2904 +2904 +21FC +ENDCHAR +STARTCHAR uni7CD7 +ENCODING 31959 +BBX 15 15 1 -1 +BITMAP +2020 +2040 +A9FC +A904 +B1FC +2104 +F9FC +2104 +71FC +6828 +ABFE +A020 +2050 +2088 +2306 +ENDCHAR +STARTCHAR uni7CD8 +ENCODING 31960 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +ABFE +AA02 +B000 +21FC +F840 +20A2 +7324 +68D0 +AB30 +A058 +2094 +2312 +2060 +ENDCHAR +STARTCHAR uni7CD9 +ENCODING 31961 +BBX 15 15 1 -1 +BITMAP +2010 +AC50 +AA50 +22FC +2490 +FA10 +22FE +2010 +7600 +6A7C +AA44 +A244 +227C +2500 +28FE +ENDCHAR +STARTCHAR uni7CDA +ENCODING 31962 +BBX 15 16 0 -2 +BITMAP +1048 +1048 +95FE +5448 +5800 +1048 +FD48 +3148 +39FE +5448 +5448 +93C8 +1148 +1148 +117E +1240 +ENDCHAR +STARTCHAR uni7CDB +ENCODING 31963 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +94A8 +57FE +5A02 +10F8 +FC88 +3088 +38F8 +5420 +5420 +91FC +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni7CDC +ENCODING 31964 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4420 +7FFE +4E28 +556A +64A6 +4888 +4490 +7FFE +42A0 +8C98 +3086 +0080 +ENDCHAR +STARTCHAR uni7CDD +ENCODING 31965 +BBX 15 15 1 -1 +BITMAP +2080 +A920 +A9D0 +2208 +2494 +FF7A +2040 +21B0 +764E +6880 +AB20 +A0C4 +2308 +2030 +27C0 +ENDCHAR +STARTCHAR uni7CDE +ENCODING 31966 +BBX 15 15 1 -1 +BITMAP +1110 +0920 +FFFE +0920 +3FF8 +D116 +1FF0 +1110 +1FF0 +0440 +7FFC +0440 +FFFE +1010 +600C +ENDCHAR +STARTCHAR uni7CDF +ENCODING 31967 +BBX 15 15 1 -1 +BITMAP +2090 +27FE +A890 +AFFE +B492 +27FE +FC92 +27FE +7000 +6BFC +AA04 +A3FC +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni7CE0 +ENCODING 31968 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +AFFE +AC20 +B5FC +2424 +F7FE +2424 +65FC +7420 +ACA8 +A870 +28A8 +3326 +2060 +ENDCHAR +STARTCHAR uni7CE1 +ENCODING 31969 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +95FC +5488 +5850 +13FE +FC00 +31FC +3904 +55FC +5504 +91FC +1090 +1092 +1112 +160E +ENDCHAR +STARTCHAR uni7CE2 +ENCODING 31970 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +AFFE +A890 +B090 +23FC +FA04 +23FC +7204 +6BFC +A840 +A7FE +2090 +2108 +2606 +ENDCHAR +STARTCHAR uni7CE3 +ENCODING 31971 +BBX 15 16 0 -2 +BITMAP +2000 +27BC +2108 +AD28 +77BC +2318 +FDAA +2946 +7000 +6BF8 +AA08 +2208 +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni7CE4 +ENCODING 31972 +BBX 15 16 0 -2 +BITMAP +2288 +2288 +27C8 +AA90 +729E +27D4 +F824 +27D4 +7454 +6FD4 +AC54 +27C8 +2448 +2454 +2464 +24C2 +ENDCHAR +STARTCHAR uni7CE5 +ENCODING 31973 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +9420 +55FE +5952 +1152 +FD52 +3106 +3800 +55FE +5420 +91FE +1152 +1152 +1152 +1106 +ENDCHAR +STARTCHAR uni7CE6 +ENCODING 31974 +BBX 15 15 1 -1 +BITMAP +2020 +23FE +A820 +A9FC +B000 +21FC +F904 +21FC +7088 +6BFE +A800 +A1FC +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni7CE7 +ENCODING 31975 +BBX 15 15 1 -1 +BITMAP +23F8 +2208 +ABF8 +AA08 +B7FE +2000 +FBF8 +2248 +73F8 +6A48 +ABF8 +A040 +27FC +2040 +2FFE +ENDCHAR +STARTCHAR uni7CE8 +ENCODING 31976 +BBX 15 16 0 -2 +BITMAP +2000 +23BE +20A2 +A8A2 +70BE +2388 +FA08 +223E +722A +6BAA +A8AA +20BE +2088 +208A +257E +2202 +ENDCHAR +STARTCHAR uni7CE9 +ENCODING 31977 +BBX 15 16 0 -2 +BITMAP +1020 +1050 +9488 +5574 +5A02 +11FC +FD24 +31AC +3924 +55FC +5400 +90F8 +1088 +10F8 +1088 +10F8 +ENDCHAR +STARTCHAR uni7CEA +ENCODING 31978 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FC +4488 +7C50 +43FE +7C20 +A5FC +2420 +3C20 +1110 +0920 +7FFC +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni7CEB +ENCODING 31979 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +5554 +55FC +5800 +13FE +FC00 +11FC +3104 +39FC +5452 +5094 +9388 +10E4 +1382 +ENDCHAR +STARTCHAR uni7CEC +ENCODING 31980 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +24A4 +ACA4 +77FC +2048 +FBF8 +2050 +77FE +6840 +A9F8 +2308 +25F8 +2108 +21F8 +2108 +ENDCHAR +STARTCHAR uni7CED +ENCODING 31981 +BBX 15 16 0 -2 +BITMAP +2020 +2088 +2252 +AB26 +7252 +228A +FA22 +23FE +7088 +6944 +AA7A +2088 +2150 +2020 +20D8 +2706 +ENDCHAR +STARTCHAR uni7CEE +ENCODING 31982 +BBX 15 16 0 -2 +BITMAP +2010 +27D0 +2510 +AFDE +7450 +27E8 +FD04 +27C4 +7000 +6BF8 +AAA8 +22A8 +22A8 +22A8 +2FFE +2000 +ENDCHAR +STARTCHAR uni7CEF +ENCODING 31983 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +A820 +ABFE +B222 +22AA +FA22 +20A8 +7000 +6BFE +A040 +A3FE +2292 +2292 +2296 +ENDCHAR +STARTCHAR uni7CF0 +ENCODING 31984 +BBX 15 16 0 -2 +BITMAP +23FE +2222 +23FE +AA22 +72FA +22AA +FAFA +22AA +72FA +6A26 +ABFE +220A +23FE +228A +225A +23FE +ENDCHAR +STARTCHAR uni7CF1 +ENCODING 31985 +BBX 15 16 0 -2 +BITMAP +5210 +7EFE +2844 +7E28 +A2FE +3E10 +2010 +3E7C +2210 +3E10 +1110 +0920 +7FFC +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni7CF2 +ENCODING 31986 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +AC88 +AFFE +B488 +25FC +FD24 +25FC +7524 +6DFC +A420 +A5FE +252A +297A +2106 +ENDCHAR +STARTCHAR uni7CF3 +ENCODING 31987 +BBX 15 16 0 -2 +BITMAP +553C +1424 +FFA4 +2242 +7F00 +083C +FF84 +0828 +6B10 +4928 +7F44 +1010 +0920 +FFFE +0920 +711C +ENDCHAR +STARTCHAR uni7CF4 +ENCODING 31988 +BBX 15 14 1 -1 +BITMAP +73DE +114A +1252 +28C6 +454A +9252 +5490 +11FE +FF20 +11FC +3920 +55FC +9320 +11FE +ENDCHAR +STARTCHAR uni7CF5 +ENCODING 31989 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7E10 +42FE +7E44 +4028 +7EFE +4210 +7E7C +1110 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni7CF6 +ENCODING 31990 +BBX 15 15 1 -1 +BITMAP +1000 +57DE +7D4A +1252 +94C6 +FD4A +9252 +5490 +11FE +FF20 +11FC +3920 +55FC +9320 +11FE +ENDCHAR +STARTCHAR uni7CF7 +ENCODING 31991 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +2088 +ABDE +7252 +23DE +FA52 +23DE +7222 +6BFE +AAAA +22FA +2222 +2272 +22AA +2224 +ENDCHAR +STARTCHAR uni7CF8 +ENCODING 31992 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +0420 +0840 +1080 +0908 +0604 +043C +FFC2 +0102 +1110 +2108 +4104 +8102 +0100 +ENDCHAR +STARTCHAR uni7CF9 +ENCODING 31993 +BBX 8 15 0 -1 +BITMAP +08 +08 +10 +12 +22 +7C +08 +10 +24 +7E +02 +00 +52 +49 +89 +ENDCHAR +STARTCHAR uni7CFA +ENCODING 31994 +BBX 15 15 1 -1 +BITMAP +1080 +2080 +4480 +2880 +1080 +2480 +4C80 +F280 +1280 +5080 +5480 +9280 +9282 +1082 +107E +ENDCHAR +STARTCHAR uni7CFB +ENCODING 31995 +BBX 15 15 1 -1 +BITMAP +0030 +01C0 +3E00 +0420 +0840 +1088 +0D04 +023C +FFC2 +0102 +0920 +1110 +2108 +C106 +0100 +ENDCHAR +STARTCHAR uni7CFC +ENCODING 31996 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +2040 +2440 +45FC +F844 +1044 +2044 +4844 +FC84 +0484 +0084 +5504 +5504 +8228 +0410 +ENDCHAR +STARTCHAR uni7CFD +ENCODING 31997 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +10FE +1210 +2210 +7C10 +0810 +1010 +2410 +7E10 +0210 +0010 +5210 +4910 +8950 +0020 +ENDCHAR +STARTCHAR uni7CFE +ENCODING 31998 +BBX 15 15 1 -1 +BITMAP +1008 +2008 +4488 +2888 +1088 +2488 +4C88 +F288 +128E +50F8 +5788 +9208 +9208 +1008 +1008 +ENDCHAR +STARTCHAR uni7CFF +ENCODING 31999 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +21FC +2444 +4444 +F844 +1044 +2044 +4844 +FC44 +0444 +0084 +5484 +5504 +8228 +0410 +ENDCHAR +STARTCHAR uni7D00 +ENCODING 32000 +BBX 15 15 1 -1 +BITMAP +1000 +20FC +4404 +2804 +1004 +2404 +4CFC +F280 +1280 +5080 +5480 +9280 +9282 +1082 +107E +ENDCHAR +STARTCHAR uni7D01 +ENCODING 32001 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +2104 +2544 +4524 +F8A8 +1088 +2088 +4850 +FC50 +0420 +0020 +5450 +5488 +8104 +0602 +ENDCHAR +STARTCHAR uni7D02 +ENCODING 32002 +BBX 15 15 1 -1 +BITMAP +1008 +2008 +4408 +29FE +1008 +2408 +4C08 +F288 +1248 +5048 +5408 +9208 +9208 +1008 +1038 +ENDCHAR +STARTCHAR uni7D03 +ENCODING 32003 +BBX 14 15 1 -1 +BITMAP +1004 +2104 +4524 +2924 +1124 +2524 +4D24 +F324 +1324 +5124 +5524 +9224 +9204 +1404 +1004 +ENDCHAR +STARTCHAR uni7D04 +ENCODING 32004 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +4440 +28FE +1082 +2502 +4C02 +F242 +1222 +5012 +5402 +9202 +9204 +1004 +1038 +ENDCHAR +STARTCHAR uni7D05 +ENCODING 32005 +BBX 15 15 1 -1 +BITMAP +1000 +2000 +447C +2810 +1010 +2410 +4C10 +F210 +1210 +5010 +5410 +9210 +9210 +10FE +1000 +ENDCHAR +STARTCHAR uni7D06 +ENCODING 32006 +BBX 15 15 1 -1 +BITMAP +1000 +20F8 +4420 +2820 +1020 +2420 +4C20 +F3FE +1220 +5020 +5420 +9220 +9220 +1020 +1060 +ENDCHAR +STARTCHAR uni7D07 +ENCODING 32007 +BBX 15 15 1 -1 +BITMAP +1080 +2080 +4080 +29FE +1200 +2400 +4DFC +F218 +1020 +5040 +5880 +9500 +9502 +1102 +10FE +ENDCHAR +STARTCHAR uni7D08 +ENCODING 32008 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +4040 +29F8 +1048 +2448 +4C48 +F248 +10C8 +5048 +5868 +9498 +948A +110A +1206 +ENDCHAR +STARTCHAR uni7D09 +ENCODING 32009 +BBX 14 15 1 -1 +BITMAP +1000 +21FC +4424 +2824 +10A4 +24A4 +4D24 +F324 +1244 +5044 +5444 +9284 +9284 +1104 +1238 +ENDCHAR +STARTCHAR uni7D0A +ENCODING 32010 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0810 +0660 +0180 +1E70 +E20E +0440 +1890 +0518 +FFE4 +0102 +1930 +610C +ENDCHAR +STARTCHAR uni7D0B +ENCODING 32011 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4420 +2BFE +1088 +2488 +4C88 +F288 +1250 +5050 +5420 +9220 +9250 +1088 +1306 +ENDCHAR +STARTCHAR uni7D0C +ENCODING 32012 +BBX 15 16 0 -2 +BITMAP +1040 +1050 +2048 +2448 +4440 +F9FE +1050 +2050 +4850 +FC50 +0490 +0090 +5492 +5512 +810E +0200 +ENDCHAR +STARTCHAR uni7D0D +ENCODING 32013 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4420 +29FE +1122 +2522 +4D32 +F34A +1146 +5182 +5902 +9502 +9502 +1102 +110E +ENDCHAR +STARTCHAR uni7D0E +ENCODING 32014 +BBX 15 16 0 -2 +BITMAP +1040 +1048 +2044 +2444 +4440 +FBFE +1040 +2040 +4840 +FCA0 +04A0 +0090 +5510 +5508 +8204 +0402 +ENDCHAR +STARTCHAR uni7D0F +ENCODING 32015 +BBX 15 16 0 -2 +BITMAP +1008 +1088 +2048 +2448 +4408 +F888 +1048 +2048 +4808 +FC0E +05F8 +0008 +5408 +5408 +8008 +0008 +ENDCHAR +STARTCHAR uni7D10 +ENCODING 32016 +BBX 15 15 1 -1 +BITMAP +1000 +21F8 +4448 +2848 +1048 +2448 +4C48 +F3FE +1248 +5048 +5448 +9248 +9248 +1048 +11FE +ENDCHAR +STARTCHAR uni7D11 +ENCODING 32017 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +21FE +2410 +4410 +F820 +1020 +2068 +48A4 +FD22 +0622 +0020 +5420 +5420 +8020 +0020 +ENDCHAR +STARTCHAR uni7D12 +ENCODING 32018 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4450 +2888 +114C +264A +4C48 +F248 +1248 +5048 +5448 +9288 +9288 +1108 +1208 +ENDCHAR +STARTCHAR uni7D13 +ENCODING 32019 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +4008 +2890 +1060 +2420 +4DFE +F224 +1028 +5020 +5820 +9420 +9420 +1020 +10E0 +ENDCHAR +STARTCHAR uni7D14 +ENCODING 32020 +BBX 15 15 1 -1 +BITMAP +1020 +2024 +4038 +2BE0 +1020 +2524 +4D24 +F324 +1124 +5124 +55FC +9420 +9222 +1022 +101E +ENDCHAR +STARTCHAR uni7D15 +ENCODING 32021 +BBX 15 15 1 -1 +BITMAP +1110 +2110 +4510 +2910 +1112 +25DC +4D10 +F310 +1310 +5110 +5510 +9510 +9510 +11D2 +130E +ENDCHAR +STARTCHAR uni7D16 +ENCODING 32022 +BBX 14 16 0 -2 +BITMAP +1004 +11E4 +2024 +2424 +4424 +F9E4 +1104 +2104 +4904 +FDE4 +0424 +0024 +5424 +5424 +8144 +0084 +ENDCHAR +STARTCHAR uni7D17 +ENCODING 32023 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4420 +28A8 +10A4 +2522 +4D24 +F224 +1264 +5004 +5408 +9208 +9210 +1020 +10C0 +ENDCHAR +STARTCHAR uni7D18 +ENCODING 32024 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +4440 +29FC +1040 +2440 +4C50 +F290 +1290 +5090 +5524 +9224 +9224 +103A +11C2 +ENDCHAR +STARTCHAR uni7D19 +ENCODING 32025 +BBX 15 15 1 -1 +BITMAP +101C +20F0 +4490 +2890 +1090 +2490 +4CFE +F290 +1290 +5090 +5490 +9288 +928A +10EA +1384 +ENDCHAR +STARTCHAR uni7D1A +ENCODING 32026 +BBX 15 15 1 -1 +BITMAP +1000 +23F8 +4088 +2888 +1090 +249C +4D44 +F344 +1124 +5128 +5618 +9210 +9428 +1044 +1082 +ENDCHAR +STARTCHAR uni7D1B +ENCODING 32027 +BBX 15 15 1 -1 +BITMAP +1030 +2090 +4488 +2908 +1104 +2602 +4CFC +F244 +1244 +5044 +5444 +9284 +9284 +1104 +1238 +ENDCHAR +STARTCHAR uni7D1C +ENCODING 32028 +BBX 15 15 1 -1 +BITMAP +1000 +20FC +4400 +2800 +1000 +2400 +4DFE +F220 +1220 +5020 +5448 +9244 +9244 +109E +13E2 +ENDCHAR +STARTCHAR uni7D1D +ENCODING 32029 +BBX 15 15 1 -1 +BITMAP +101C +21E0 +4020 +2820 +1020 +2420 +4C20 +F3FE +1020 +5020 +5820 +9420 +9420 +1020 +11FC +ENDCHAR +STARTCHAR uni7D1E +ENCODING 32030 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4420 +29FC +1124 +2524 +4D24 +F230 +1250 +5050 +5450 +9290 +9292 +1112 +120E +ENDCHAR +STARTCHAR uni7D1F +ENCODING 32031 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2050 +2450 +4488 +F944 +1222 +2020 +4800 +FDFC +0404 +0008 +5408 +5410 +8010 +0020 +ENDCHAR +STARTCHAR uni7D20 +ENCODING 32032 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +7FF0 +0200 +3FE0 +0200 +FFF8 +0C00 +30C0 +0B18 +FFE4 +0200 +3260 +C218 +0200 +ENDCHAR +STARTCHAR uni7D21 +ENCODING 32033 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4420 +2BFE +1040 +2440 +4C40 +F27C +1244 +5044 +5444 +9284 +9284 +1104 +1238 +ENDCHAR +STARTCHAR uni7D22 +ENCODING 32034 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +7FFC +4204 +4444 +1880 +0510 +0238 +7FC4 +0102 +1930 +610C +0100 +ENDCHAR +STARTCHAR uni7D23 +ENCODING 32035 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +41F8 +2848 +1048 +248A +4D0A +F226 +1020 +5020 +5BFE +9420 +9420 +1020 +1020 +ENDCHAR +STARTCHAR uni7D24 +ENCODING 32036 +BBX 15 16 0 -2 +BITMAP +1004 +100E +20F0 +2480 +4480 +F880 +10FE +2088 +4888 +FC88 +0488 +0088 +5488 +5508 +8108 +0208 +ENDCHAR +STARTCHAR uni7D25 +ENCODING 32037 +BBX 13 16 1 -2 +BITMAP +1080 +1080 +FE80 +1080 +1C80 +F088 +1088 +5078 +2880 +1100 +3E00 +0420 +7FF0 +0210 +2A40 +4420 +ENDCHAR +STARTCHAR uni7D26 +ENCODING 32038 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +21FC +2524 +4524 +F924 +1124 +2124 +49FC +FD00 +0500 +0100 +5502 +5502 +80FE +ENDCHAR +STARTCHAR uni7D27 +ENCODING 32039 +BBX 13 16 1 -2 +BITMAP +0800 +4BF8 +4910 +48A0 +4840 +48A0 +0518 +0840 +3F80 +0300 +0C20 +7FF0 +0210 +2240 +4A20 +8410 +ENDCHAR +STARTCHAR uni7D28 +ENCODING 32040 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +2088 +2908 +497E +F308 +1508 +2148 +4928 +FD28 +0508 +0108 +5508 +5508 +8128 +0110 +ENDCHAR +STARTCHAR uni7D29 +ENCODING 32041 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2120 +2520 +45FC +F920 +1220 +2020 +4BFE +FC20 +0450 +0050 +5488 +5488 +8104 +0202 +ENDCHAR +STARTCHAR uni7D2A +ENCODING 32042 +BBX 15 15 0 -1 +BITMAP +1090 +1090 +2090 +2A90 +4A92 +F2D4 +1298 +2290 +4A90 +FA90 +0A90 +0292 +AAD2 +AF12 +820E +ENDCHAR +STARTCHAR uni7D2B +ENCODING 32043 +BBX 15 15 1 -1 +BITMAP +0840 +084C +4F70 +4840 +4842 +4F42 +793E +C620 +1848 +049C +FFE2 +0100 +0920 +3118 +C106 +ENDCHAR +STARTCHAR uni7D2C +ENCODING 32044 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4420 +2820 +11FE +2522 +4D22 +F322 +1122 +59FE +5522 +9522 +9122 +1122 +11FE +ENDCHAR +STARTCHAR uni7D2D +ENCODING 32045 +BBX 15 16 0 -2 +BITMAP +2008 +2788 +4088 +4088 +9088 +E788 +2408 +4410 +9410 +F790 +0094 +10A4 +A8A2 +A0BE +8502 +0200 +ENDCHAR +STARTCHAR uni7D2E +ENCODING 32046 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +FF40 +2840 +2C42 +4A42 +893E +0620 +18C0 +0504 +FFFC +0102 +1930 +610C +0100 +ENDCHAR +STARTCHAR uni7D2F +ENCODING 32047 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +3FF8 +2108 +2108 +3FF8 +0220 +0C48 +029C +FFE2 +0102 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni7D30 +ENCODING 32048 +BBX 14 15 1 -1 +BITMAP +1000 +2000 +45FC +2924 +1124 +2524 +4D24 +F3FC +1324 +5124 +5524 +9324 +9324 +11FC +1000 +ENDCHAR +STARTCHAR uni7D31 +ENCODING 32049 +BBX 15 15 1 -1 +BITMAP +1090 +2090 +4488 +2BFE +1080 +2480 +4C88 +F348 +1150 +5A50 +5420 +9420 +9050 +1088 +1306 +ENDCHAR +STARTCHAR uni7D32 +ENCODING 32050 +BBX 15 15 1 -1 +BITMAP +1000 +20A8 +44A8 +28A8 +11FE +24A8 +4CA8 +F2A8 +12A8 +50B8 +5480 +9280 +9280 +10FE +1000 +ENDCHAR +STARTCHAR uni7D33 +ENCODING 32051 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4420 +29FE +1122 +2522 +4DFE +F322 +1322 +5122 +55FE +9220 +9220 +1020 +1020 +ENDCHAR +STARTCHAR uni7D34 +ENCODING 32052 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +2010 +25FE +4512 +F914 +1110 +21FC +4944 +FD44 +0528 +0128 +A910 +AA28 +8244 +0482 +ENDCHAR +STARTCHAR uni7D35 +ENCODING 32053 +BBX 15 15 1 -1 +BITMAP +1010 +2010 +45FE +2902 +1102 +2400 +4DFE +F210 +1210 +5010 +5410 +9210 +9210 +1010 +1070 +ENDCHAR +STARTCHAR uni7D36 +ENCODING 32054 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +2020 +25FC +4420 +F820 +1020 +23FE +4820 +FC20 +0440 +0048 +5484 +55FE +8082 +ENDCHAR +STARTCHAR uni7D37 +ENCODING 32055 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2050 +2450 +4488 +F924 +1212 +2010 +49FC +FC04 +0408 +0088 +5450 +5420 +8010 +0010 +ENDCHAR +STARTCHAR uni7D38 +ENCODING 32056 +BBX 15 15 0 -1 +BITMAP +1040 +1020 +2000 +25FE +4420 +F820 +1020 +2020 +49FC +FC20 +0420 +0020 +5420 +5420 +83FE +ENDCHAR +STARTCHAR uni7D39 +ENCODING 32057 +BBX 14 15 1 -1 +BITMAP +1000 +21FC +4444 +2844 +1084 +2484 +4D18 +F200 +12FC +5084 +5484 +9284 +9284 +1084 +10FC +ENDCHAR +STARTCHAR uni7D3A +ENCODING 32058 +BBX 15 15 1 -1 +BITMAP +1088 +2088 +4488 +2BFE +1088 +2488 +4C88 +F288 +12F8 +5088 +5488 +9288 +9288 +1088 +10F8 +ENDCHAR +STARTCHAR uni7D3B +ENCODING 32059 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +25FC +4524 +F924 +1124 +2124 +4924 +FFFE +0420 +0050 +5450 +5488 +8104 +0202 +ENDCHAR +STARTCHAR uni7D3C +ENCODING 32060 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +2090 +2BFC +4894 +F094 +13FC +2290 +4A90 +FBFE +0892 +0092 +A91A +A914 +8210 +0410 +ENDCHAR +STARTCHAR uni7D3D +ENCODING 32061 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +45FE +2902 +1102 +2440 +4C44 +F258 +1260 +1040 +5440 +5440 +9442 +9042 +103E +ENDCHAR +STARTCHAR uni7D3E +ENCODING 32062 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4450 +2848 +1084 +2512 +4C20 +F2C8 +1210 +5020 +54C2 +9202 +9204 +1018 +10E0 +ENDCHAR +STARTCHAR uni7D3F +ENCODING 32063 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4420 +2848 +1044 +249A +4DE2 +F200 +1200 +50FC +5484 +9284 +9284 +1084 +10FC +ENDCHAR +STARTCHAR uni7D40 +ENCODING 32064 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4524 +2924 +1124 +2524 +4DFC +F220 +1020 +5122 +5922 +9522 +9522 +1122 +11FE +ENDCHAR +STARTCHAR uni7D41 +ENCODING 32065 +BBX 15 15 1 -1 +BITMAP +1100 +2100 +4500 +2BFE +1200 +2420 +4D2C +F334 +1164 +59A4 +572C +9520 +9122 +1102 +10FE +ENDCHAR +STARTCHAR uni7D42 +ENCODING 32066 +BBX 15 15 1 -1 +BITMAP +1040 +2078 +4488 +2908 +1050 +2420 +4C50 +F288 +1306 +5060 +5418 +9200 +92C0 +1030 +100C +ENDCHAR +STARTCHAR uni7D43 +ENCODING 32067 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4420 +2BFE +1020 +2440 +4C88 +F388 +1250 +5420 +5228 +9244 +9044 +10BA +13C2 +ENDCHAR +STARTCHAR uni7D44 +ENCODING 32068 +BBX 15 15 1 -1 +BITMAP +1000 +20F8 +4088 +2888 +1088 +24F8 +4C88 +F288 +1288 +50F8 +5488 +9288 +9288 +1088 +13FE +ENDCHAR +STARTCHAR uni7D45 +ENCODING 32069 +BBX 14 15 1 -1 +BITMAP +1000 +21FC +4504 +2904 +1104 +2574 +4D54 +F354 +1354 +5154 +5574 +9304 +9104 +1104 +111C +ENDCHAR +STARTCHAR uni7D46 +ENCODING 32070 +BBX 15 15 1 -1 +BITMAP +1020 +20A8 +44A4 +2924 +1020 +25FC +4C20 +F220 +1220 +53FE +5420 +9220 +9220 +1020 +1020 +ENDCHAR +STARTCHAR uni7D47 +ENCODING 32071 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +44FE +2882 +1102 +24F2 +4C92 +F292 +1292 +5092 +54F2 +9202 +9204 +1004 +1018 +ENDCHAR +STARTCHAR uni7D48 +ENCODING 32072 +BBX 14 15 1 -1 +BITMAP +1020 +2020 +4040 +29FC +1104 +2504 +4D04 +F304 +11FC +5104 +5904 +9504 +9504 +1104 +11FC +ENDCHAR +STARTCHAR uni7D49 +ENCODING 32073 +BBX 15 16 0 -2 +BITMAP +1020 +1028 +2024 +2420 +45FE +F820 +1070 +2070 +48A8 +FCA8 +0524 +0222 +5420 +5420 +8020 +0020 +ENDCHAR +STARTCHAR uni7D4A +ENCODING 32074 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +2420 +45FE +F870 +10A8 +20A8 +4924 +FD24 +0622 +00F8 +5420 +5420 +8020 +0020 +ENDCHAR +STARTCHAR uni7D4B +ENCODING 32075 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4420 +29FE +1100 +2510 +4D10 +F310 +1310 +5120 +5528 +9324 +9244 +124E +11F2 +ENDCHAR +STARTCHAR uni7D4C +ENCODING 32076 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +4484 +2888 +1050 +2420 +4CD8 +F306 +1220 +5020 +55FC +9220 +9220 +1020 +13FE +ENDCHAR +STARTCHAR uni7D4D +ENCODING 32077 +BBX 15 16 0 -2 +BITMAP +1080 +1088 +209C +2570 +4510 +FB10 +1510 +2110 +49FE +FD10 +0510 +0110 +5510 +5510 +817C +0100 +ENDCHAR +STARTCHAR uni7D4E +ENCODING 32078 +BBX 15 15 1 -1 +BITMAP +1100 +213C +4500 +2A00 +1280 +2480 +4D7E +F308 +1108 +5108 +5908 +9508 +9508 +1108 +1118 +ENDCHAR +STARTCHAR uni7D4F +ENCODING 32079 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +45FC +2924 +1124 +25FC +4D24 +F324 +13FC +5022 +5424 +9218 +9232 +10CA +1304 +ENDCHAR +STARTCHAR uni7D50 +ENCODING 32080 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +43FE +2820 +1020 +2420 +4DFC +F200 +1200 +55FC +5504 +9304 +9104 +1104 +11FC +ENDCHAR +STARTCHAR uni7D51 +ENCODING 32081 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +2120 +25FC +4520 +FA20 +1020 +23FE +4870 +FCA8 +04A8 +0124 +5524 +5622 +8020 +0020 +ENDCHAR +STARTCHAR uni7D52 +ENCODING 32082 +BBX 14 16 0 -2 +BITMAP +1104 +1124 +2124 +2924 +4924 +F124 +15B4 +256C +4924 +F924 +0924 +0124 +A924 +AA24 +8204 +0404 +ENDCHAR +STARTCHAR uni7D53 +ENCODING 32083 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +41FC +2820 +1020 +2420 +4DFE +F200 +1020 +5020 +59FC +9420 +9420 +1020 +13FE +ENDCHAR +STARTCHAR uni7D54 +ENCODING 32084 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2020 +2420 +4440 +F9FC +1104 +2104 +4904 +FDFC +0504 +0104 +5504 +5504 +81FC +0104 +ENDCHAR +STARTCHAR uni7D55 +ENCODING 32085 +BBX 15 15 0 -1 +BITMAP +1000 +13FC +2044 +2444 +4484 +F928 +1210 +21FC +4924 +FD24 +05FC +0100 +5502 +5502 +80FE +ENDCHAR +STARTCHAR uni7D56 +ENCODING 32086 +BBX 15 15 1 -1 +BITMAP +1020 +2124 +4524 +28A8 +10A8 +2420 +4DFE +F250 +1250 +5050 +5450 +9250 +9292 +1092 +110E +ENDCHAR +STARTCHAR uni7D57 +ENCODING 32087 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +21FE +2502 +4502 +F97A +114A +214A +494A +FD4A +057A +0102 +5502 +55FE +8102 +ENDCHAR +STARTCHAR uni7D58 +ENCODING 32088 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +2210 +293E +4922 +F044 +1010 +2090 +4890 +FB10 +0928 +0128 +A928 +A944 +8044 +0082 +ENDCHAR +STARTCHAR uni7D59 +ENCODING 32089 +BBX 15 15 1 -1 +BITMAP +1000 +21FE +4400 +2800 +10FC +2484 +4C84 +F2FC +1284 +5084 +5884 +94FC +9400 +1000 +11FE +ENDCHAR +STARTCHAR uni7D5A +ENCODING 32090 +BBX 15 15 1 -1 +BITMAP +1000 +21FE +4440 +2840 +107C +2444 +4C64 +F25C +1284 +50A4 +5898 +9408 +9410 +1010 +11FE +ENDCHAR +STARTCHAR uni7D5B +ENCODING 32091 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +13FC +2608 +2910 +68E0 +AB18 +2C96 +2B20 +294C +2FF2 +2840 +2948 +2646 +2040 +ENDCHAR +STARTCHAR uni7D5C +ENCODING 32092 +BBX 15 15 1 -1 +BITMAP +0800 +0800 +FF7E +0812 +7F12 +0822 +0F22 +F942 +0E2C +1840 +0498 +FFE4 +0100 +0920 +711C +ENDCHAR +STARTCHAR uni7D5D +ENCODING 32093 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2450 +4488 +F904 +12FA +2000 +4BFE +FC40 +0480 +01FC +5404 +5404 +8028 +0010 +ENDCHAR +STARTCHAR uni7D5E +ENCODING 32094 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4420 +2BFE +1088 +2104 +4E02 +F288 +1288 +5050 +5450 +9220 +9250 +1088 +1306 +ENDCHAR +STARTCHAR uni7D5F +ENCODING 32095 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +2050 +2488 +4504 +FA02 +11FC +2020 +4820 +FC20 +05FC +0020 +5420 +5420 +83FE +ENDCHAR +STARTCHAR uni7D60 +ENCODING 32096 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +21FE +2440 +4440 +F8FC +1084 +2184 +4AFC +FC84 +0484 +00FC +5484 +5484 +8094 +0088 +ENDCHAR +STARTCHAR uni7D61 +ENCODING 32097 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +447C +2888 +1188 +2450 +4C20 +F2D8 +1306 +50F8 +5488 +9288 +9288 +1088 +10F8 +ENDCHAR +STARTCHAR uni7D62 +ENCODING 32098 +BBX 15 15 1 -1 +BITMAP +1080 +2080 +4480 +29FE +1202 +2402 +4CF2 +F292 +12F2 +5092 +5492 +92F2 +9204 +1004 +1018 +ENDCHAR +STARTCHAR uni7D63 +ENCODING 32099 +BBX 15 15 1 -1 +BITMAP +1084 +2044 +4448 +29FE +1048 +2448 +4C48 +F248 +13FE +5048 +5448 +9248 +9288 +1088 +1108 +ENDCHAR +STARTCHAR uni7D64 +ENCODING 32100 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2050 +2450 +45FC +F954 +1154 +2154 +4954 +FD54 +058C +0104 +5504 +5504 +81FC +0104 +ENDCHAR +STARTCHAR uni7D65 +ENCODING 32101 +BBX 15 16 0 -2 +BITMAP +1090 +1094 +2092 +2912 +4910 +F37E +1510 +2110 +4910 +FD28 +0528 +0128 +5528 +5544 +8144 +0182 +ENDCHAR +STARTCHAR uni7D66 +ENCODING 32102 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4450 +2888 +1104 +2602 +4CF8 +F200 +1200 +55FC +5504 +9304 +9104 +1104 +11FC +ENDCHAR +STARTCHAR uni7D67 +ENCODING 32103 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2102 +2502 +457A +F902 +1102 +217A +494A +FD4A +054A +017A +5502 +5502 +810A +0104 +ENDCHAR +STARTCHAR uni7D68 +ENCODING 32104 +BBX 15 15 1 -1 +BITMAP +1014 +2012 +4412 +29FE +1010 +2450 +4C54 +F3F4 +1254 +5054 +5494 +9288 +931A +122A +10C4 +ENDCHAR +STARTCHAR uni7D69 +ENCODING 32105 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +2090 +2A92 +4994 +F098 +1090 +2198 +4A94 +FC92 +0890 +0090 +A912 +A912 +8212 +040E +ENDCHAR +STARTCHAR uni7D6A +ENCODING 32106 +BBX 15 15 1 -1 +BITMAP +1000 +21FE +4502 +2922 +1122 +25FA +4D22 +F322 +1322 +5152 +5952 +958A +9502 +1102 +11FE +ENDCHAR +STARTCHAR uni7D6B +ENCODING 32107 +BBX 13 16 1 -2 +BITMAP +0800 +1040 +3FE0 +2040 +4890 +FDF8 +0400 +0840 +3F80 +0300 +0C20 +7FF0 +0210 +2240 +4A20 +8410 +ENDCHAR +STARTCHAR uni7D6C +ENCODING 32108 +BBX 15 16 0 -2 +BITMAP +1008 +103C +21E0 +2420 +4420 +FBFE +1020 +2020 +4820 +FDFC +0504 +0104 +5504 +5504 +81FC +0104 +ENDCHAR +STARTCHAR uni7D6D +ENCODING 32109 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +7FFC +0200 +FFFE +0820 +3218 +C426 +1FC0 +0180 +0610 +3FF8 +0108 +1120 +2510 +4208 +ENDCHAR +STARTCHAR uni7D6E +ENCODING 32110 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +FEFC +2284 +4284 +7484 +0CFC +3200 +C440 +1890 +0518 +FFE4 +0102 +1930 +610C +ENDCHAR +STARTCHAR uni7D6F +ENCODING 32111 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +2010 +25FE +4420 +F824 +1044 +20F8 +4812 +FC22 +0444 +0188 +5410 +5428 +8044 +0182 +ENDCHAR +STARTCHAR uni7D70 +ENCODING 32112 +BBX 15 15 1 -1 +BITMAP +1000 +21FE +4420 +2820 +1048 +244C +4CF2 +F200 +1220 +5020 +58FC +9420 +9420 +1020 +11FE +ENDCHAR +STARTCHAR uni7D71 +ENCODING 32113 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +47FE +2840 +1048 +2488 +4C9C +F3F2 +1250 +5050 +5450 +9290 +9292 +1112 +120E +ENDCHAR +STARTCHAR uni7D72 +ENCODING 32114 +BBX 15 15 1 -1 +BITMAP +1010 +2020 +4444 +2828 +1010 +2424 +4C4C +F2F2 +1212 +5050 +5454 +9292 +9292 +1010 +1010 +ENDCHAR +STARTCHAR uni7D73 +ENCODING 32115 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +447C +2984 +1048 +2430 +4C68 +F386 +1208 +50FC +5448 +9248 +93FE +1008 +1008 +ENDCHAR +STARTCHAR uni7D74 +ENCODING 32116 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +2088 +2800 +4BFE +F020 +1020 +21FC +4820 +FC20 +07FE +0020 +5420 +5420 +8020 +0020 +ENDCHAR +STARTCHAR uni7D75 +ENCODING 32117 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +4450 +2888 +1104 +2602 +4CF8 +F200 +1000 +51FE +5420 +9248 +9244 +109E +13E2 +ENDCHAR +STARTCHAR uni7D76 +ENCODING 32118 +BBX 15 15 1 -1 +BITMAP +1040 +2078 +4488 +2B10 +11FC +2524 +4D24 +F324 +11FC +5500 +5500 +9300 +9102 +1102 +10FE +ENDCHAR +STARTCHAR uni7D77 +ENCODING 32119 +BBX 14 16 0 -2 +BITMAP +1080 +FBF0 +1090 +1990 +F094 +1154 +520C +2424 +1FC0 +0180 +0610 +3FF8 +0108 +1120 +2510 +4208 +ENDCHAR +STARTCHAR uni7D78 +ENCODING 32120 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +2108 +2508 +45F8 +F908 +1108 +21F8 +4908 +FD08 +05F8 +0090 +5490 +5512 +8212 +040E +ENDCHAR +STARTCHAR uni7D79 +ENCODING 32121 +BBX 14 15 1 -1 +BITMAP +1000 +21FC +4504 +2904 +11FC +2400 +4DFC +F304 +13FC +1104 +5504 +53FC +9104 +1104 +111C +ENDCHAR +STARTCHAR uni7D7A +ENCODING 32122 +BBX 15 15 1 -1 +BITMAP +1004 +20C8 +4430 +28C8 +1304 +2440 +4DFE +F280 +1120 +53FC +5924 +9524 +952C +1020 +1020 +ENDCHAR +STARTCHAR uni7D7B +ENCODING 32123 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +20F8 +2508 +4610 +F9FC +1124 +2124 +4924 +FDFC +0450 +0050 +5490 +5492 +8112 +020E +ENDCHAR +STARTCHAR uni7D7C +ENCODING 32124 +BBX 15 16 0 -2 +BITMAP +1008 +103C +21E0 +2496 +4448 +F830 +1048 +2194 +4824 +FC4C +0594 +0024 +5444 +5584 +8028 +0010 +ENDCHAR +STARTCHAR uni7D7D +ENCODING 32125 +BBX 15 15 1 -1 +BITMAP +1000 +20FC +4484 +2884 +1084 +2484 +4CFC +F220 +1240 +51FE +5502 +9302 +9102 +1102 +11FE +ENDCHAR +STARTCHAR uni7D7E +ENCODING 32126 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +2024 +2820 +4BFE +F220 +1224 +2224 +4BA4 +FAA8 +0AA8 +0290 +AA92 +ADAA +8446 +0882 +ENDCHAR +STARTCHAR uni7D7F +ENCODING 32127 +BBX 15 15 1 -1 +BITMAP +1028 +2028 +4424 +2BFE +1020 +2522 +4CA4 +F2A8 +1220 +5020 +58B0 +94A8 +9524 +1222 +10E0 +ENDCHAR +STARTCHAR uni7D80 +ENCODING 32128 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2420 +4420 +F9FC +1124 +2124 +49FC +FC20 +0470 +00A8 +5524 +5622 +8020 +0020 +ENDCHAR +STARTCHAR uni7D81 +ENCODING 32129 +BBX 15 16 0 -2 +BITMAP +2100 +211E +4112 +47D2 +9114 +E114 +27D8 +4114 +9112 +F7D2 +0112 +111A +A914 +A210 +8210 +0410 +ENDCHAR +STARTCHAR uni7D82 +ENCODING 32130 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2400 +4400 +F9FC +1104 +2104 +4904 +FDFC +0450 +0050 +5490 +5492 +8112 +020E +ENDCHAR +STARTCHAR uni7D83 +ENCODING 32131 +BBX 15 15 1 -1 +BITMAP +1020 +2124 +4124 +2A22 +11FC +2504 +4D04 +F3FC +1104 +5104 +59FC +9504 +9504 +1104 +111C +ENDCHAR +STARTCHAR uni7D84 +ENCODING 32132 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2A02 +4C04 +F1F8 +1000 +2000 +4BFE +FC90 +0490 +0090 +5512 +5512 +820E +0400 +ENDCHAR +STARTCHAR uni7D85 +ENCODING 32133 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2004 +24FC +4404 +F9FC +1000 +23FE +4A02 +FDF8 +0488 +0088 +5450 +5420 +80D8 +0306 +ENDCHAR +STARTCHAR uni7D86 +ENCODING 32134 +BBX 15 15 1 -1 +BITMAP +1000 +23FE +4420 +29FC +1124 +2524 +4DFC +F324 +1124 +51FC +5920 +94A0 +9460 +1098 +1306 +ENDCHAR +STARTCHAR uni7D87 +ENCODING 32135 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2050 +2450 +45FC +F954 +1154 +2154 +498C +FD04 +0504 +01FC +5504 +5504 +81FC +0104 +ENDCHAR +STARTCHAR uni7D88 +ENCODING 32136 +BBX 15 15 1 -1 +BITMAP +1084 +2048 +45FE +2822 +1022 +25FE +4D20 +F220 +13FE +5062 +5862 +94A2 +9522 +122C +1020 +ENDCHAR +STARTCHAR uni7D89 +ENCODING 32137 +BBX 15 15 1 -1 +BITMAP +1018 +21E0 +4420 +29FE +10A8 +24A4 +4D22 +F320 +12F8 +5048 +544C +9284 +9284 +1104 +1218 +ENDCHAR +STARTCHAR uni7D8A +ENCODING 32138 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +2BFE +4820 +F020 +1124 +2124 +4924 +FAAA +0820 +0050 +A850 +A888 +8104 +0202 +ENDCHAR +STARTCHAR uni7D8B +ENCODING 32139 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +41FC +2904 +1124 +2420 +4DFE +F240 +1050 +5090 +58A0 +9520 +9648 +1054 +11E2 +ENDCHAR +STARTCHAR uni7D8C +ENCODING 32140 +BBX 15 15 1 -1 +BITMAP +1088 +2088 +4484 +2922 +1020 +2450 +4C88 +F304 +1202 +51FC +5904 +9504 +9504 +1104 +11FC +ENDCHAR +STARTCHAR uni7D8D +ENCODING 32141 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2820 +4820 +F3FE +1202 +2404 +49F8 +FC10 +0420 +03FE +5420 +5420 +80A0 +0040 +ENDCHAR +STARTCHAR uni7D8E +ENCODING 32142 +BBX 15 16 0 -2 +BITMAP +1000 +1006 +23B8 +2888 +4888 +F108 +113E +2388 +4888 +FA88 +0A88 +013E +A900 +AA80 +847E +0800 +ENDCHAR +STARTCHAR uni7D8F +ENCODING 32143 +BBX 15 15 1 -1 +BITMAP +100C +21F4 +4522 +2A12 +1210 +2420 +4C20 +F3FE +1244 +5044 +5488 +93E8 +9218 +1064 +1382 +ENDCHAR +STARTCHAR uni7D90 +ENCODING 32144 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +2088 +2410 +45FC +F904 +1104 +2104 +49FC +FC50 +0450 +0090 +5492 +5512 +820E +0400 +ENDCHAR +STARTCHAR uni7D91 +ENCODING 32145 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2222 +2A22 +4A22 +F3FE +1222 +2262 +4A72 +FAAA +0B22 +0222 +AA22 +AA02 +83FE +0202 +ENDCHAR +STARTCHAR uni7D92 +ENCODING 32146 +BBX 15 16 0 -2 +BITMAP +1008 +103C +21C0 +2404 +4544 +F8A8 +1000 +21F8 +4810 +FC20 +07FE +0020 +5420 +5420 +80A0 +0040 +ENDCHAR +STARTCHAR uni7D93 +ENCODING 32147 +BBX 15 15 1 -1 +BITMAP +1000 +23FE +4400 +2924 +1124 +2648 +4D24 +F324 +1200 +51FC +5420 +9220 +9220 +1020 +13FE +ENDCHAR +STARTCHAR uni7D94 +ENCODING 32148 +BBX 15 16 0 -2 +BITMAP +1000 +100C +FEF0 +2820 +4444 +82F8 +7C10 +0024 +FEFE +2012 +4050 +7C54 +0492 +0512 +2850 +1020 +ENDCHAR +STARTCHAR uni7D95 +ENCODING 32149 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +2020 +2BFE +4820 +F020 +1020 +21FC +4840 +F820 +08A4 +0282 +AA8A +AA8A +8478 +ENDCHAR +STARTCHAR uni7D96 +ENCODING 32150 +BBX 15 16 0 -2 +BITMAP +1004 +100E +23B8 +2888 +4888 +F128 +112E +23A8 +48A8 +FAA8 +0AA8 +013E +A900 +AA80 +847E +0800 +ENDCHAR +STARTCHAR uni7D97 +ENCODING 32151 +BBX 15 15 1 -1 +BITMAP +1000 +21FE +4552 +2952 +1152 +254E +4D82 +F302 +117A +514A +594A +954A +957A +1102 +110E +ENDCHAR +STARTCHAR uni7D98 +ENCODING 32152 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +20FC +2488 +4550 +F820 +10D8 +2326 +48F8 +FC20 +04F8 +0020 +57FE +5420 +8020 +0020 +ENDCHAR +STARTCHAR uni7D99 +ENCODING 32153 +BBX 15 15 1 -1 +BITMAP +1010 +2112 +4512 +2994 +1158 +2510 +4DFE +F310 +1338 +5138 +5554 +9392 +9310 +1100 +11FE +ENDCHAR +STARTCHAR uni7D9A +ENCODING 32154 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +43FE +2820 +1020 +25FC +4C00 +F3FE +1202 +5292 +5490 +9290 +9292 +1112 +120E +ENDCHAR +STARTCHAR uni7D9B +ENCODING 32155 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +4424 +2824 +11A4 +2464 +4C54 +F284 +1318 +5040 +5554 +9352 +9142 +1244 +123C +ENDCHAR +STARTCHAR uni7D9C +ENCODING 32156 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +45FE +2902 +1102 +2478 +4C00 +F200 +13FE +5020 +54A4 +94A4 +9522 +1122 +1060 +ENDCHAR +STARTCHAR uni7D9D +ENCODING 32157 +BBX 15 15 1 -1 +BITMAP +1088 +2088 +4488 +2BFE +1088 +2488 +4DDC +F2DC +12AA +54AA +5488 +9488 +9088 +1088 +1088 +ENDCHAR +STARTCHAR uni7D9E +ENCODING 32158 +BBX 15 15 0 -1 +BITMAP +1008 +103C +21E0 +2820 +4BFE +F0A8 +10A8 +20A8 +4BFE +FCA8 +04A8 +03FE +5420 +5420 +81FC +ENDCHAR +STARTCHAR uni7D9F +ENCODING 32159 +BBX 15 15 1 -1 +BITMAP +1000 +23FE +4400 +29FE +1102 +2502 +4DFE +F310 +1110 +51FE +5510 +9210 +9228 +1044 +1182 +ENDCHAR +STARTCHAR uni7DA0 +ENCODING 32160 +BBX 15 15 1 -1 +BITMAP +1080 +20F8 +4508 +29F8 +1010 +25FE +4E20 +F224 +1124 +50A8 +5830 +9468 +94A4 +1322 +1060 +ENDCHAR +STARTCHAR uni7DA1 +ENCODING 32161 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2400 +4400 +F9FC +1104 +2104 +4904 +FDFC +0420 +00A8 +5524 +5622 +80A0 +0040 +ENDCHAR +STARTCHAR uni7DA2 +ENCODING 32162 +BBX 15 15 1 -1 +BITMAP +1000 +21FE +4522 +2922 +11FE +2522 +4D22 +F37A +1122 +517A +554A +934A +927A +1202 +140E +ENDCHAR +STARTCHAR uni7DA3 +ENCODING 32163 +BBX 15 15 1 -1 +BITMAP +10A8 +20A4 +4524 +29FC +1050 +2450 +4FFE +F288 +11F4 +5312 +5510 +9370 +9104 +1104 +10FC +ENDCHAR +STARTCHAR uni7DA4 +ENCODING 32164 +BBX 14 16 0 -2 +BITMAP +7E7C +1244 +2A48 +4444 +BE44 +2254 +2248 +3E00 +0440 +0880 +1F00 +0210 +3FF8 +0108 +1520 +2210 +ENDCHAR +STARTCHAR uni7DA5 +ENCODING 32165 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2124 +2924 +49FC +F124 +1124 +21FC +4800 +F800 +0BFE +0088 +A888 +A888 +8108 +0208 +ENDCHAR +STARTCHAR uni7DA6 +ENCODING 32166 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +7FFC +0820 +0FE0 +0820 +FFFE +08A0 +3118 +CA26 +0444 +FFFE +0102 +1930 +610C +ENDCHAR +STARTCHAR uni7DA7 +ENCODING 32167 +BBX 15 15 1 -1 +BITMAP +1010 +2010 +45FE +2800 +10FC +2484 +4CFC +F200 +12FC +5008 +5810 +95FE +9410 +1010 +1070 +ENDCHAR +STARTCHAR uni7DA8 +ENCODING 32168 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +23FE +2488 +4488 +F8F8 +1088 +2088 +48F8 +FC88 +0488 +03FE +5400 +5488 +8104 +0202 +ENDCHAR +STARTCHAR uni7DA9 +ENCODING 32169 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2A02 +4D04 +F100 +11DE +2252 +4A52 +FB52 +0C9A +0094 +A910 +A912 +8212 +040E +ENDCHAR +STARTCHAR uni7DAA +ENCODING 32170 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +45FE +2820 +10FC +2420 +4DFE +F200 +12FC +50A4 +58A4 +94FC +9484 +1084 +109C +ENDCHAR +STARTCHAR uni7DAB +ENCODING 32171 +BBX 15 15 1 -1 +BITMAP +1050 +2048 +447C +2BC0 +102C +2470 +4F8A +F204 +1288 +50BC +57C0 +9458 +9422 +10D2 +130C +ENDCHAR +STARTCHAR uni7DAC +ENCODING 32172 +BBX 15 15 1 -1 +BITMAP +100C +21F2 +44A2 +2854 +11FE +2502 +4D02 +F2FC +1244 +5044 +5428 +9210 +9228 +1044 +1182 +ENDCHAR +STARTCHAR uni7DAD +ENCODING 32173 +BBX 15 15 1 -1 +BITMAP +1048 +2048 +4490 +29FE +1290 +2490 +4CFC +F290 +1290 +5090 +54FC +9290 +9290 +1090 +10FE +ENDCHAR +STARTCHAR uni7DAE +ENCODING 32174 +BBX 15 15 1 -1 +BITMAP +0020 +FF20 +007E +7E44 +42C4 +4228 +7E10 +4028 +42C6 +8C40 +048C +FFF2 +0100 +1930 +610C +ENDCHAR +STARTCHAR uni7DAF +ENCODING 32175 +BBX 15 15 1 -1 +BITMAP +1080 +2080 +45FE +2902 +1242 +247A +4CA2 +F222 +13FE +5022 +54AA +92AA +92FA +1004 +1018 +ENDCHAR +STARTCHAR uni7DB0 +ENCODING 32176 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +47FE +2A02 +1202 +24F8 +4C88 +F288 +12F8 +5080 +5480 +92FC +9284 +1084 +10FC +ENDCHAR +STARTCHAR uni7DB1 +ENCODING 32177 +BBX 15 15 1 -1 +BITMAP +1000 +23FE +4202 +2A8A +1252 +22FA +4A22 +F622 +12AA +52AA +5AAA +96FA +9202 +1202 +120E +ENDCHAR +STARTCHAR uni7DB2 +ENCODING 32178 +BBX 14 15 1 -1 +BITMAP +1000 +21FC +4504 +298C +1154 +25FC +4D24 +F324 +11FC +5144 +5544 +9544 +9174 +1104 +111C +ENDCHAR +STARTCHAR uni7DB3 +ENCODING 32179 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +2252 +2A52 +4A52 +F3DE +1252 +2252 +4A52 +FBDE +0A52 +0252 +AA52 +AA52 +8552 +08A6 +ENDCHAR +STARTCHAR uni7DB4 +ENCODING 32180 +BBX 15 15 1 -1 +BITMAP +1000 +23DE +454A +2884 +114A +2612 +4C00 +F3DE +1042 +5642 +5594 +9494 +9148 +1254 +1422 +ENDCHAR +STARTCHAR uni7DB5 +ENCODING 32181 +BBX 15 15 1 -1 +BITMAP +1018 +21E8 +4544 +2A22 +1222 +2400 +4C20 +F220 +13FE +50A8 +54A8 +9524 +9524 +1222 +1020 +ENDCHAR +STARTCHAR uni7DB6 +ENCODING 32182 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +4524 +2924 +11FC +2524 +4D24 +F3FC +1020 +53FE +58A8 +94A8 +9524 +1222 +1020 +ENDCHAR +STARTCHAR uni7DB7 +ENCODING 32183 +BBX 14 15 1 -1 +BITMAP +1040 +2040 +47FC +2800 +1110 +2110 +4AA8 +F4A4 +1000 +5040 +5BFC +9440 +9440 +1040 +1040 +ENDCHAR +STARTCHAR uni7DB8 +ENCODING 32184 +BBX 15 15 1 -1 +BITMAP +1020 +2050 +4488 +2B06 +10F8 +2400 +4C00 +F3FE +1152 +5552 +53FE +9152 +9152 +1152 +1156 +ENDCHAR +STARTCHAR uni7DB9 +ENCODING 32185 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +20E8 +252C +452A +FAA8 +1048 +20A0 +491E +FE00 +04FC +0084 +5484 +5484 +80FC +0084 +ENDCHAR +STARTCHAR uni7DBA +ENCODING 32186 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +45FC +2850 +1088 +2504 +4C00 +F3FE +1204 +50F4 +5494 +9294 +92F4 +1004 +101C +ENDCHAR +STARTCHAR uni7DBB +ENCODING 32187 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +47FE +2A02 +1202 +25FC +4C20 +F320 +113C +5120 +5920 +9520 +95A0 +1260 +143E +ENDCHAR +STARTCHAR uni7DBC +ENCODING 32188 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +21FC +2524 +4524 +F9FC +1124 +2144 +49FC +FC90 +0510 +03FE +5410 +5410 +8010 +0010 +ENDCHAR +STARTCHAR uni7DBD +ENCODING 32189 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +443E +2820 +10FC +2484 +4CFC +F284 +1284 +50FC +5420 +97FE +9220 +1020 +1020 +ENDCHAR +STARTCHAR uni7DBE +ENCODING 32190 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +44F8 +2820 +13FE +2490 +4C90 +F35E +1240 +50FC +5588 +9250 +9230 +10CC +1302 +ENDCHAR +STARTCHAR uni7DBF +ENCODING 32191 +BBX 15 15 1 -1 +BITMAP +1020 +2040 +45FC +2904 +11FC +2504 +4DFC +F220 +13FE +5222 +5A22 +9622 +922E +1020 +1020 +ENDCHAR +STARTCHAR uni7DC0 +ENCODING 32192 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +47FE +2840 +11FC +2444 +4FFE +F244 +11FC +5040 +5BFE +9484 +95F8 +1028 +13C6 +ENDCHAR +STARTCHAR uni7DC1 +ENCODING 32193 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2420 +45FC +F824 +13FE +2024 +49FC +FC20 +0520 +013E +A920 +AAA0 +827E +0400 +ENDCHAR +STARTCHAR uni7DC2 +ENCODING 32194 +BBX 15 15 1 -1 +BITMAP +1020 +2122 +4122 +2A54 +1050 +2488 +4D06 +F220 +10A2 +50A2 +5924 +9550 +9450 +1088 +1306 +ENDCHAR +STARTCHAR uni7DC3 +ENCODING 32195 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +2088 +2488 +4554 +FA22 +1442 +2020 +4820 +FD20 +053C +0120 +AAA0 +AA60 +843E +0800 +ENDCHAR +STARTCHAR uni7DC4 +ENCODING 32196 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2104 +2504 +45FC +F904 +1104 +21FC +4800 +FD12 +05D4 +0118 +5510 +5552 +8192 +010E +ENDCHAR +STARTCHAR uni7DC5 +ENCODING 32197 +BBX 15 16 0 -2 +BITMAP +2000 +2FC0 +44BC +44A4 +94A4 +E7A4 +24A4 +44A8 +97A8 +F4A8 +0490 +15D0 +AEA8 +A0A8 +80C4 +0082 +ENDCHAR +STARTCHAR uni7DC6 +ENCODING 32198 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2104 +25FC +4504 +F9FC +1080 +2080 +49FE +FE4A +044A +0092 +A922 +AA42 +8094 +0108 +ENDCHAR +STARTCHAR uni7DC7 +ENCODING 32199 +BBX 15 15 1 -1 +BITMAP +1092 +2092 +4524 +2924 +1092 +2492 +4C00 +F2FE +1292 +5092 +54FE +9292 +9292 +1092 +10FE +ENDCHAR +STARTCHAR uni7DC8 +ENCODING 32200 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +21FC +2420 +4420 +FBFE +1088 +2050 +49FC +FC20 +0420 +03FE +5420 +5420 +8020 +0020 +ENDCHAR +STARTCHAR uni7DC9 +ENCODING 32201 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2020 +2820 +4BFE +F222 +1222 +2332 +4AAA +FAAA +0B76 +0266 +AA22 +AA22 +822A +0204 +ENDCHAR +STARTCHAR uni7DCA +ENCODING 32202 +BBX 14 14 1 -1 +BITMAP +7EF8 +4808 +7C48 +4450 +7C20 +4850 +7E8C +0200 +1440 +0898 +FFE4 +0200 +3260 +C21C +ENDCHAR +STARTCHAR uni7DCB +ENCODING 32203 +BBX 15 15 1 -1 +BITMAP +1050 +2050 +45DE +2850 +1050 +2450 +4DDE +F250 +1050 +54D0 +535E +9250 +9290 +1090 +1110 +ENDCHAR +STARTCHAR uni7DCC +ENCODING 32204 +BBX 15 15 1 -1 +BITMAP +101C +21E0 +4020 +2BFE +10A8 +2524 +4E22 +F240 +13FE +5048 +5888 +9590 +9470 +10C8 +1304 +ENDCHAR +STARTCHAR uni7DCD +ENCODING 32205 +BBX 15 16 0 -2 +BITMAP +101C +13E0 +2220 +2BFE +4A20 +F292 +130A +2206 +49FC +FD04 +0504 +01FC +5504 +5504 +81FC +0104 +ENDCHAR +STARTCHAR uni7DCE +ENCODING 32206 +BBX 15 16 0 -2 +BITMAP +1014 +1012 +2010 +2BFE +4810 +F010 +13D2 +2252 +4A52 +FA54 +0BD4 +000C +A86A +AB8A +8116 +0022 +ENDCHAR +STARTCHAR uni7DCF +ENCODING 32207 +BBX 15 15 1 -1 +BITMAP +1048 +2044 +44A2 +2920 +1048 +2448 +4CB4 +F3C2 +1020 +5020 +5450 +9544 +9542 +124A +1238 +ENDCHAR +STARTCHAR uni7DD0 +ENCODING 32208 +BBX 15 16 0 -2 +BITMAP +4000 +400C +7EF0 +8020 +7C44 +44F8 +6410 +5424 +FEFE +4412 +A450 +9454 +FE92 +0512 +2850 +1020 +ENDCHAR +STARTCHAR uni7DD1 +ENCODING 32209 +BBX 15 15 1 -1 +BITMAP +1000 +21F8 +4408 +29F8 +1008 +25FE +4C20 +F324 +1128 +50B0 +5470 +92A8 +9124 +1222 +1060 +ENDCHAR +STARTCHAR uni7DD2 +ENCODING 32210 +BBX 15 15 1 -1 +BITMAP +1040 +2048 +45F8 +2848 +1050 +2450 +4DFE +F240 +10FC +1384 +5884 +54FC +9484 +9084 +10FC +ENDCHAR +STARTCHAR uni7DD3 +ENCODING 32211 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +23FE +2888 +48A8 +F020 +11FC +2124 +4924 +F924 +0BFE +0020 +A850 +A888 +8104 +0202 +ENDCHAR +STARTCHAR uni7DD4 +ENCODING 32212 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +20A4 +28A8 +4820 +F3FE +1202 +2202 +4AFA +FA8A +0A8A +028A +AAFA +AA02 +820A +0204 +ENDCHAR +STARTCHAR uni7DD5 +ENCODING 32213 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +47FE +2904 +1088 +2470 +4C88 +F306 +11FC +5104 +5504 +95FC +9504 +1204 +1404 +ENDCHAR +STARTCHAR uni7DD6 +ENCODING 32214 +BBX 15 15 1 -1 +BITMAP +1044 +2044 +45F8 +2848 +1050 +27FE +4C28 +F244 +10FC +1384 +5884 +54FC +9484 +9084 +10FC +ENDCHAR +STARTCHAR uni7DD7 +ENCODING 32215 +BBX 15 15 1 -1 +BITMAP +1080 +209E +4492 +2BF2 +1092 +249E +4DD2 +F2D2 +12B2 +54BE +5492 +9492 +9092 +1092 +109E +ENDCHAR +STARTCHAR uni7DD8 +ENCODING 32216 +BBX 15 15 1 -1 +BITMAP +2018 +2014 +4810 +D7FE +2410 +25D0 +4C14 +F5D4 +2554 +3554 +6D48 +ADC8 +A41A +242A +28C4 +ENDCHAR +STARTCHAR uni7DD9 +ENCODING 32217 +BBX 15 15 1 -1 +BITMAP +1088 +2088 +47FE +2888 +1088 +24F8 +4C20 +F3FC +1124 +5124 +59FC +9420 +97FE +1020 +1020 +ENDCHAR +STARTCHAR uni7DDA +ENCODING 32218 +BBX 15 15 1 -1 +BITMAP +1020 +2040 +45FC +2904 +11FC +2504 +4D04 +F3FC +1222 +53B4 +58B8 +9528 +9524 +1222 +1060 +ENDCHAR +STARTCHAR uni7DDB +ENCODING 32219 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2020 +2440 +45FC +F954 +1154 +2154 +4954 +FD2C +0420 +03FE +5450 +5488 +8104 +0202 +ENDCHAR +STARTCHAR uni7DDC +ENCODING 32220 +BBX 15 15 1 -1 +BITMAP +100C +20F0 +7C20 +4440 +7C28 +4410 +4424 +7C4C +10F2 +FE12 +9254 +9254 +9292 +9692 +1010 +ENDCHAR +STARTCHAR uni7DDD +ENCODING 32221 +BBX 15 15 1 -1 +BITMAP +1000 +20F8 +4488 +2888 +10F8 +2400 +4DFE +F288 +12F8 +5088 +54F8 +928E +92F8 +1388 +1008 +ENDCHAR +STARTCHAR uni7DDE +ENCODING 32222 +BBX 15 15 1 -1 +BITMAP +1040 +21BC +4524 +2924 +11A4 +2526 +4D40 +F380 +117E +5122 +5522 +9394 +9108 +1114 +1162 +ENDCHAR +STARTCHAR uni7DDF +ENCODING 32223 +BBX 15 15 0 -1 +BITMAP +1008 +103C +21E0 +2820 +4BFE +F020 +11FC +2124 +49FC +FD24 +05FC +0020 +55FC +5420 +83FE +ENDCHAR +STARTCHAR uni7DE0 +ENCODING 32224 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +45FC +2888 +1048 +2450 +4FFE +F222 +1222 +51FC +5924 +9524 +952C +1020 +1020 +ENDCHAR +STARTCHAR uni7DE1 +ENCODING 32225 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +4504 +29FC +1110 +25FE +4D10 +F310 +11CA +5304 +55FC +9304 +93FC +1104 +11FC +ENDCHAR +STARTCHAR uni7DE2 +ENCODING 32226 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +23FE +2488 +4488 +F800 +11FC +2124 +4924 +FD24 +05FC +0124 +5524 +5524 +81FC +0104 +ENDCHAR +STARTCHAR uni7DE3 +ENCODING 32227 +BBX 15 15 1 -1 +BITMAP +1080 +20F8 +4508 +29F8 +1010 +27FE +4CA0 +F334 +1258 +5090 +5938 +9454 +9492 +1110 +1060 +ENDCHAR +STARTCHAR uni7DE4 +ENCODING 32228 +BBX 15 15 1 -1 +BITMAP +1148 +2148 +47FE +2948 +1148 +2578 +4D00 +F3FC +1220 +5BFE +54A8 +94A8 +9524 +1222 +1020 +ENDCHAR +STARTCHAR uni7DE5 +ENCODING 32229 +BBX 15 16 0 -2 +BITMAP +1100 +117C +2144 +2A44 +4A44 +F67C +1A10 +2210 +4AFE +FA38 +0A54 +0254 +AA94 +AB12 +8210 +0210 +ENDCHAR +STARTCHAR uni7DE6 +ENCODING 32230 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +4524 +2924 +11FC +2524 +4D24 +F3FC +1200 +5020 +5850 +9554 +9542 +124A +1238 +ENDCHAR +STARTCHAR uni7DE7 +ENCODING 32231 +BBX 15 16 0 -2 +BITMAP +1088 +1048 +2050 +2BFE +4850 +F050 +11FC +2154 +4954 +FD8C +0504 +01FC +5504 +5504 +81FC +0104 +ENDCHAR +STARTCHAR uni7DE8 +ENCODING 32232 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +4000 +D3FC +2204 +2A04 +4BFC +F600 +13FC +5554 +5554 +95FC +9554 +1154 +110C +ENDCHAR +STARTCHAR uni7DE9 +ENCODING 32233 +BBX 15 15 1 -1 +BITMAP +101C +23E4 +4144 +28A8 +13FE +2440 +4FFE +F240 +1278 +5488 +5388 +9250 +9020 +10D8 +1706 +ENDCHAR +STARTCHAR uni7DEA +ENCODING 32234 +BBX 15 16 0 -2 +BITMAP +1100 +117E +2110 +2510 +4590 +F95E +1322 +252A +4926 +FD42 +0552 +010C +5504 +5504 +817E +0100 +ENDCHAR +STARTCHAR uni7DEB +ENCODING 32235 +BBX 15 15 0 -1 +BITMAP +1080 +1080 +20FC +2954 +4AD4 +F0B4 +112C +2244 +4894 +F908 +0840 +00A4 +AAAA +AA8A +8478 +ENDCHAR +STARTCHAR uni7DEC +ENCODING 32236 +BBX 15 15 1 -1 +BITMAP +1000 +23FE +4020 +2840 +11FE +254A +4D4A +F37A +134A +514A +557A +934A +934A +114A +11FE +ENDCHAR +STARTCHAR uni7DED +ENCODING 32237 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2222 +2BFE +4A22 +F3FE +1000 +21FC +4904 +FDFC +0504 +01FC +5504 +5504 +8114 +0108 +ENDCHAR +STARTCHAR uni7DEE +ENCODING 32238 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +21FE +2A00 +4DFC +F104 +11FC +2104 +49FC +FC80 +04FC +0108 +5690 +5460 +8198 +0606 +ENDCHAR +STARTCHAR uni7DEF +ENCODING 32239 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +44FC +2844 +11FE +2400 +4CFC +F284 +12FC +5008 +54FC +9248 +93FE +1008 +1008 +ENDCHAR +STARTCHAR uni7DF0 +ENCODING 32240 +BBX 15 16 0 -2 +BITMAP +1040 +10A0 +2110 +2A08 +4DF6 +F000 +13C4 +2254 +4A54 +FBD4 +0A54 +0254 +ABD4 +AA44 +8254 +02C8 +ENDCHAR +STARTCHAR uni7DF1 +ENCODING 32241 +BBX 15 15 1 -1 +BITMAP +1100 +217C +4504 +2904 +12FE +2640 +4E40 +F2FC +1310 +5210 +5BFE +9610 +9228 +1244 +1282 +ENDCHAR +STARTCHAR uni7DF2 +ENCODING 32242 +BBX 15 15 1 -1 +BITMAP +1010 +2390 +4690 +2A94 +13B2 +26D2 +4E90 +F294 +1394 +5AB4 +5688 +9288 +9390 +1020 +1040 +ENDCHAR +STARTCHAR uni7DF3 +ENCODING 32243 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2200 +3FBC +2214 +2F94 +2214 +3FA4 +220C +2420 +2FC0 +4108 +5FFC +8888 +1184 +ENDCHAR +STARTCHAR uni7DF4 +ENCODING 32244 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +43FE +2820 +11FC +2524 +4DFC +F324 +1124 +51FC +58A8 +94A8 +9524 +1222 +1020 +ENDCHAR +STARTCHAR uni7DF5 +ENCODING 32245 +BBX 15 16 0 -2 +BITMAP +1000 +1088 +2252 +2A22 +4A52 +F28A +1202 +23FE +4888 +F944 +0A7A +0088 +A950 +A820 +80D8 +0306 +ENDCHAR +STARTCHAR uni7DF6 +ENCODING 32246 +BBX 15 16 0 -2 +BITMAP +1100 +11FE +2110 +2A10 +4AFE +F292 +1692 +22FE +4A92 +FA92 +0AFE +0290 +AA50 +AA20 +8258 +0286 +ENDCHAR +STARTCHAR uni7DF7 +ENCODING 32247 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2222 +2420 +45FE +F820 +11FC +2124 +49FC +FD24 +05FC +0020 +57FE +5420 +8020 +0020 +ENDCHAR +STARTCHAR uni7DF8 +ENCODING 32248 +BBX 15 15 0 -1 +BITMAP +1000 +13FE +2050 +2450 +45FC +F954 +1154 +2154 +49FC +FC20 +0420 +01FC +5420 +5420 +83FE +ENDCHAR +STARTCHAR uni7DF9 +ENCODING 32249 +BBX 15 15 1 -1 +BITMAP +1000 +21F8 +4508 +29F8 +1108 +2508 +4DF8 +F200 +13FC +5240 +5840 +9578 +9540 +12C0 +123E +ENDCHAR +STARTCHAR uni7DFA +ENCODING 32250 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2084 +2484 +44F4 +F894 +1094 +21FE +4902 +FD7A +054A +014A +557A +5502 +810A +0104 +ENDCHAR +STARTCHAR uni7DFB +ENCODING 32251 +BBX 15 15 1 -1 +BITMAP +2010 +27D0 +4910 +511E +2224 +22A4 +5F54 +E954 +2914 +2388 +6908 +A914 +A9D4 +2722 +2042 +ENDCHAR +STARTCHAR uni7DFC +ENCODING 32252 +BBX 15 15 0 -1 +BITMAP +1000 +10F8 +2088 +2488 +44F8 +F888 +1088 +20F8 +4800 +FDFC +0554 +0154 +5554 +5554 +83FE +ENDCHAR +STARTCHAR uni7DFD +ENCODING 32253 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +203E +2420 +4420 +F9FC +1104 +21FC +4904 +FDFC +0504 +01FC +5400 +5488 +8104 +0202 +ENDCHAR +STARTCHAR uni7DFE +ENCODING 32254 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2100 +257C +4554 +F954 +117C +2154 +4954 +FD7C +0510 +0110 +557C +5610 +8210 +04FE +ENDCHAR +STARTCHAR uni7DFF +ENCODING 32255 +BBX 15 16 0 -2 +BITMAP +1040 +1090 +2108 +2BFC +4804 +F000 +11F8 +2108 +4908 +F9F8 +0840 +0024 +AAA2 +AA8A +8488 +0078 +ENDCHAR +STARTCHAR uni7E00 +ENCODING 32256 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +2242 +2A42 +4A42 +F3DE +1200 +223E +4BD2 +FA12 +0A14 +03D4 +AA08 +AA14 +8224 +0242 +ENDCHAR +STARTCHAR uni7E01 +ENCODING 32257 +BBX 15 15 1 -1 +BITMAP +1000 +21F8 +4408 +29F8 +1008 +27FE +4CA0 +F334 +1258 +5090 +5938 +9454 +9492 +1110 +1060 +ENDCHAR +STARTCHAR uni7E02 +ENCODING 32258 +BBX 15 15 0 -1 +BITMAP +1088 +1048 +2050 +25FC +4504 +F904 +1104 +21FC +4820 +FC10 +0454 +0142 +5542 +554A +8238 +ENDCHAR +STARTCHAR uni7E03 +ENCODING 32259 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2022 +2520 +453C +F920 +12FE +2400 +49FC +FD04 +05FC +0104 +55FC +5504 +8114 +0108 +ENDCHAR +STARTCHAR uni7E04 +ENCODING 32260 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +4524 +29FC +1124 +25FC +4C20 +F3FC +1124 +59FC +5524 +9524 +95FC +1022 +101E +ENDCHAR +STARTCHAR uni7E05 +ENCODING 32261 +BBX 15 15 1 -1 +BITMAP +2014 +2014 +4812 +57FE +2410 +2DD0 +4C94 +F7F4 +1554 +5554 +5788 +9CC8 +951A +142A +18C4 +ENDCHAR +STARTCHAR uni7E06 +ENCODING 32262 +BBX 15 16 0 -2 +BITMAP +2100 +213C +4100 +4100 +91BC +E564 +2524 +453C +9524 +F124 +0124 +113C +A924 +A100 +817E +0100 +ENDCHAR +STARTCHAR uni7E07 +ENCODING 32263 +BBX 15 15 0 -1 +BITMAP +1040 +1020 +23FE +2A02 +4C04 +F1FC +1000 +21FC +4904 +FDFC +0504 +01FC +5504 +5400 +83FE +ENDCHAR +STARTCHAR uni7E08 +ENCODING 32264 +BBX 15 15 1 -1 +BITMAP +0810 +2952 +2A54 +1428 +2244 +0000 +7FFC +4104 +4624 +18C0 +0508 +FFFC +0102 +1930 +E10E +ENDCHAR +STARTCHAR uni7E09 +ENCODING 32265 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +4800 +5108 +2108 +2A94 +5F5A +E800 +27FE +2000 +6BFC +AA04 +ABFC +2204 +23FC +ENDCHAR +STARTCHAR uni7E0A +ENCODING 32266 +BBX 15 15 1 -1 +BITMAP +1030 +2088 +4504 +2AFA +1000 +2410 +4C88 +F288 +1104 +57FE +5554 +9554 +9154 +1154 +17FE +ENDCHAR +STARTCHAR uni7E0B +ENCODING 32267 +BBX 15 15 1 -1 +BITMAP +2210 +2120 +487C +5044 +2244 +2944 +587C +E740 +217C +2144 +6944 +A944 +AB7C +2280 +247E +ENDCHAR +STARTCHAR uni7E0C +ENCODING 32268 +BBX 15 15 0 -1 +BITMAP +1244 +1124 +2128 +247E +4410 +FB54 +1154 +2154 +497C +FD14 +0520 +0120 +A940 +AA80 +847E +ENDCHAR +STARTCHAR uni7E0D +ENCODING 32269 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +21FE +2484 +4448 +F9FE +1102 +2224 +4810 +FDFE +0440 +007C +5444 +5484 +8094 +0108 +ENDCHAR +STARTCHAR uni7E0E +ENCODING 32270 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2104 +25E4 +4524 +FBFE +1202 +21FC +4904 +FDFC +0504 +01FC +5504 +5504 +8114 +0108 +ENDCHAR +STARTCHAR uni7E0F +ENCODING 32271 +BBX 15 16 0 -2 +BITMAP +0878 +3E48 +228E +2A00 +7EF8 +2248 +2A30 +46CC +8440 +0880 +1F00 +0210 +3FF8 +0108 +1520 +2210 +ENDCHAR +STARTCHAR uni7E10 +ENCODING 32272 +BBX 15 15 1 -1 +BITMAP +1040 +20FE +4522 +28AA +10FA +2442 +4C8C +F240 +10FE +5122 +58AA +94AA +94FA +1042 +108C +ENDCHAR +STARTCHAR uni7E11 +ENCODING 32273 +BBX 15 15 1 -1 +BITMAP +1044 +2088 +43FE +2890 +13FC +2494 +4FFE +F294 +1094 +5BFC +5490 +9598 +9294 +1492 +1090 +ENDCHAR +STARTCHAR uni7E12 +ENCODING 32274 +BBX 15 15 1 -1 +BITMAP +2208 +2110 +4FFC +5040 +2040 +2BF8 +5840 +E440 +27FE +2100 +6BFC +AC20 +A820 +2020 +23FE +ENDCHAR +STARTCHAR uni7E13 +ENCODING 32275 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2110 +2520 +457C +F944 +117C +2144 +497C +FD10 +0510 +0154 +A952 +AA92 +8250 +0420 +ENDCHAR +STARTCHAR uni7E14 +ENCODING 32276 +BBX 15 16 0 -2 +BITMAP +11F8 +1088 +2070 +298C +4800 +F3DE +1252 +218C +4A52 +F820 +0BFE +0070 +A8A8 +A924 +8622 +0020 +ENDCHAR +STARTCHAR uni7E15 +ENCODING 32277 +BBX 15 15 1 -1 +BITMAP +1000 +21F8 +4148 +2948 +1148 +25B8 +4D08 +F3F8 +1000 +51FC +5954 +9554 +9554 +1154 +13FE +ENDCHAR +STARTCHAR uni7E16 +ENCODING 32278 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2A02 +4C24 +F1FC +1020 +21FC +4820 +FBFE +0820 +01FC +A904 +A904 +81FC +0104 +ENDCHAR +STARTCHAR uni7E17 +ENCODING 32279 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +47FC +2800 +11F8 +2508 +4FFE +F308 +11F8 +50A4 +59A8 +9690 +9488 +10E4 +1382 +ENDCHAR +STARTCHAR uni7E18 +ENCODING 32280 +BBX 15 16 0 -2 +BITMAP +101E +13E0 +2122 +2894 +4840 +F088 +11F0 +2020 +48C4 +F9FE +0822 +0020 +ABFE +A850 +8088 +0306 +ENDCHAR +STARTCHAR uni7E19 +ENCODING 32281 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +21FE +2488 +4400 +F9FE +1088 +2088 +48F8 +FC88 +04F8 +0088 +549E +55E8 +8008 +0008 +ENDCHAR +STARTCHAR uni7E1A +ENCODING 32282 +BBX 15 16 0 -2 +BITMAP +101E +11E0 +2022 +2512 +4494 +F880 +1020 +21CE +4902 +FD02 +05CE +0102 +5502 +5502 +81FE +0102 +ENDCHAR +STARTCHAR uni7E1B +ENCODING 32283 +BBX 15 15 1 -1 +BITMAP +1028 +2024 +47FE +2820 +11FC +2524 +4DFC +F324 +13FC +5408 +53FE +9288 +9248 +1008 +1038 +ENDCHAR +STARTCHAR uni7E1C +ENCODING 32284 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2084 +2484 +44FC +F800 +11FE +2102 +49FE +FD02 +05FE +0102 +55FE +5448 +8084 +0102 +ENDCHAR +STARTCHAR uni7E1D +ENCODING 32285 +BBX 15 15 1 -1 +BITMAP +108C +20F0 +4482 +287E +1000 +257C +4D44 +F37C +1144 +517C +5944 +95FE +9400 +1048 +1186 +ENDCHAR +STARTCHAR uni7E1E +ENCODING 32286 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +45FE +2800 +1078 +2448 +4C78 +F200 +13FE +5102 +557A +954A +954A +117A +1106 +ENDCHAR +STARTCHAR uni7E1F +ENCODING 32287 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +4A00 +52FC +2200 +2BFE +5AA8 +E690 +24C8 +2186 +6804 +ABFE +A884 +2044 +201C +ENDCHAR +STARTCHAR uni7E20 +ENCODING 32288 +BBX 15 15 1 -1 +BITMAP +1000 +1078 +FE48 +1048 +7C48 +008E +FE00 +82FC +BA44 +5044 +2C28 +F210 +1428 +5444 +9282 +ENDCHAR +STARTCHAR uni7E21 +ENCODING 32289 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +47FE +2A02 +1020 +25FC +4C88 +F250 +13FE +5020 +5420 +93FC +9220 +1020 +1020 +ENDCHAR +STARTCHAR uni7E22 +ENCODING 32290 +BBX 15 15 1 -1 +BITMAP +0150 +7948 +4A48 +4BFC +4890 +7FFE +4908 +4A44 +4D92 +78A0 +4848 +4BF4 +4844 +8950 +9E4C +ENDCHAR +STARTCHAR uni7E23 +ENCODING 32291 +BBX 15 15 1 -1 +BITMAP +000C +3EF0 +2220 +BE40 +A228 +BE10 +A224 +A24C +BEF2 +8012 +FF54 +0854 +4A92 +8912 +0810 +ENDCHAR +STARTCHAR uni7E24 +ENCODING 32292 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2420 +45FC +F820 +13FE +2040 +4888 +FDF0 +0424 +03FE +5422 +5524 +82A2 +0040 +ENDCHAR +STARTCHAR uni7E25 +ENCODING 32293 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2420 +45FC +F840 +13FE +2088 +4934 +FEE2 +0420 +01FC +5470 +54AC +8322 +0020 +ENDCHAR +STARTCHAR uni7E26 +ENCODING 32294 +BBX 15 15 1 -1 +BITMAP +1144 +2124 +4228 +28FE +1110 +2510 +4E10 +F250 +125C +5A50 +5650 +9250 +92B0 +1290 +130E +ENDCHAR +STARTCHAR uni7E27 +ENCODING 32295 +BBX 15 15 1 -1 +BITMAP +1140 +2140 +417E +2A44 +12A8 +2690 +4EA8 +F2C6 +1290 +52FE +5A90 +96B8 +9254 +1292 +1210 +ENDCHAR +STARTCHAR uni7E28 +ENCODING 32296 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +4104 +29FC +1104 +25FC +4D20 +F324 +10A8 +53FE +5850 +9450 +9452 +1092 +130E +ENDCHAR +STARTCHAR uni7E29 +ENCODING 32297 +BBX 15 16 0 -2 +BITMAP +1100 +1110 +23DC +2A54 +4D54 +F288 +1108 +22F4 +4C02 +F800 +0BFC +0040 +A950 +AA48 +8544 +0080 +ENDCHAR +STARTCHAR uni7E2A +ENCODING 32298 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2124 +25FC +4524 +F9FC +10A8 +20A8 +4BFE +FCA8 +04A8 +01FC +A820 +ABFE +8020 +0020 +ENDCHAR +STARTCHAR uni7E2B +ENCODING 32299 +BBX 15 15 1 -1 +BITMAP +1020 +2220 +417C +28C4 +1038 +2444 +4F92 +F57C +1510 +517C +5910 +95FE +9510 +1280 +147E +ENDCHAR +STARTCHAR uni7E2C +ENCODING 32300 +BBX 15 15 1 -1 +BITMAP +1028 +2028 +4424 +2FFC +1420 +24A4 +4CE4 +F4A4 +17E8 +5498 +5DD0 +96B0 +949A +19AA +1044 +ENDCHAR +STARTCHAR uni7E2D +ENCODING 32301 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2800 +4954 +F124 +1154 +21FC +4820 +FBFE +0A42 +0292 +AAFA +AA0A +8202 +0206 +ENDCHAR +STARTCHAR uni7E2E +ENCODING 32302 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +47FE +2A02 +1282 +24FE +4C88 +F310 +133E +5522 +5922 +953E +9522 +1122 +113E +ENDCHAR +STARTCHAR uni7E2F +ENCODING 32303 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2A02 +4800 +F1FC +1020 +21FC +4924 +FDFC +0524 +01FC +5400 +5488 +8104 +0202 +ENDCHAR +STARTCHAR uni7E30 +ENCODING 32304 +BBX 15 16 0 -2 +BITMAP +1108 +1108 +2228 +24AE +44A8 +F928 +137E +2500 +4908 +FD28 +052E +0128 +5558 +5548 +8186 +0100 +ENDCHAR +STARTCHAR uni7E31 +ENCODING 32305 +BBX 15 15 1 -1 +BITMAP +2244 +2244 +4444 +54AA +20AA +2910 +5A10 +E690 +269C +2290 +7290 +AA90 +A2D0 +22B0 +230E +ENDCHAR +STARTCHAR uni7E32 +ENCODING 32306 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +4524 +29FC +1124 +25FC +4C20 +F248 +1290 +1064 +55FA +5222 +92A8 +9126 +1020 +ENDCHAR +STARTCHAR uni7E33 +ENCODING 32307 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +2020 +25FC +4524 +F9FC +1124 +21FC +4822 +FDFE +0408 +01FE +5508 +5488 +8028 +0010 +ENDCHAR +STARTCHAR uni7E34 +ENCODING 32308 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +2048 +20F0 +4820 +FBFE +1242 +2090 +49F8 +F828 +0920 +11FC +AA20 +A7FE +8020 +0020 +ENDCHAR +STARTCHAR uni7E35 +ENCODING 32309 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +4908 +D1F8 +2108 +29F8 +5800 +E7FE +2492 +27FE +6800 +ABFC +A908 +20F0 +279E +ENDCHAR +STARTCHAR uni7E36 +ENCODING 32310 +BBX 15 16 0 -2 +BITMAP +0820 +7E20 +08F8 +FF28 +1428 +7F6A +082A +FF56 +0A82 +0420 +0FC0 +0210 +3FF8 +0108 +1520 +2210 +ENDCHAR +STARTCHAR uni7E37 +ENCODING 32311 +BBX 15 15 1 -1 +BITMAP +2020 +21FC +4924 +53FE +2124 +29FC +4C20 +F3FC +1124 +11FC +5440 +57FE +9484 +9078 +11E6 +ENDCHAR +STARTCHAR uni7E38 +ENCODING 32312 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +23FE +2488 +4400 +F9FC +1104 +21FC +4904 +FDFC +0420 +03FE +5450 +5488 +8104 +0202 +ENDCHAR +STARTCHAR uni7E39 +ENCODING 32313 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +4890 +D7FE +2492 +2492 +5FFE +E800 +23FC +2000 +6FFE +A820 +A928 +2626 +20E0 +ENDCHAR +STARTCHAR uni7E3A +ENCODING 32314 +BBX 15 15 1 -1 +BITMAP +2210 +2110 +48FE +D410 +227C +2154 +487C +F754 +2554 +217C +6910 +A9FE +A910 +2290 +247E +ENDCHAR +STARTCHAR uni7E3B +ENCODING 32315 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4420 +7FFE +4CA8 +56AA +6526 +4220 +4C48 +4494 +7FE2 +8080 +8C98 +3086 +ENDCHAR +STARTCHAR uni7E3C +ENCODING 32316 +BBX 15 16 0 -2 +BITMAP +1210 +1110 +2110 +27BE +4A40 +FA00 +13BE +228A +4A88 +FAA8 +0AAE +12A8 +ACA8 +A5A8 +885E +1080 +ENDCHAR +STARTCHAR uni7E3D +ENCODING 32317 +BBX 15 15 1 -1 +BITMAP +1020 +2040 +45FC +2924 +11B4 +2554 +4DA4 +F334 +134C +51FC +5410 +9554 +9542 +114A +1238 +ENDCHAR +STARTCHAR uni7E3E +ENCODING 32318 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +47FE +2820 +11FC +2420 +4FFE +F304 +11FC +5104 +59FC +9504 +95FC +1088 +1306 +ENDCHAR +STARTCHAR uni7E3F +ENCODING 32319 +BBX 15 16 0 -2 +BITMAP +1040 +1088 +21FC +2908 +4A52 +F3FE +1050 +2188 +4E26 +F8C0 +0B10 +0064 +AB88 +A830 +80C0 +0700 +ENDCHAR +STARTCHAR uni7E40 +ENCODING 32320 +BBX 15 16 0 -2 +BITMAP +1020 +1222 +23FE +2890 +4888 +F1FE +1310 +2510 +49FE +FD10 +0510 +01FE +5510 +5510 +81FE +0100 +ENDCHAR +STARTCHAR uni7E41 +ENCODING 32321 +BBX 15 15 1 -1 +BITMAP +2020 +3FA0 +407E +BEC4 +2A24 +FFA8 +5210 +7F28 +0AC6 +1080 +090C +FFF2 +0100 +1930 +610C +ENDCHAR +STARTCHAR uni7E42 +ENCODING 32322 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2820 +4848 +F2F2 +1124 +2252 +48F8 +FC08 +0420 +03FE +5420 +5420 +8020 +0020 +ENDCHAR +STARTCHAR uni7E43 +ENCODING 32323 +BBX 15 15 1 -1 +BITMAP +2020 +2222 +4A22 +D3FE +2000 +2BDE +5A52 +E652 +23DE +6252 +6A52 +ABDE +AA52 +2252 +24E6 +ENDCHAR +STARTCHAR uni7E44 +ENCODING 32324 +BBX 13 16 1 -2 +BITMAP +FEF0 +9090 +BE98 +C900 +BEF0 +9490 +A260 +FE98 +0880 +1100 +3E00 +0420 +7FF0 +0210 +2A40 +4420 +ENDCHAR +STARTCHAR uni7E45 +ENCODING 32325 +BBX 15 15 1 -1 +BITMAP +1092 +2124 +4492 +29FC +1124 +25FC +4D24 +F3FC +1020 +53FE +5870 +94A8 +9524 +1222 +1020 +ENDCHAR +STARTCHAR uni7E46 +ENCODING 32326 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +4294 +54A4 +218C +2AD4 +58A4 +E718 +2C46 +2390 +6860 +AB84 +A808 +2030 +23C0 +ENDCHAR +STARTCHAR uni7E47 +ENCODING 32327 +BBX 15 15 1 -1 +BITMAP +081C +0EF0 +1220 +6A44 +1428 +1810 +E024 +3E4C +48F2 +0810 +FF54 +0854 +4992 +4912 +7F10 +ENDCHAR +STARTCHAR uni7E48 +ENCODING 32328 +BBX 15 16 0 -2 +BITMAP +1008 +1388 +2090 +28A4 +48BE +F38A +1208 +223E +4A2A +FBAA +08AA +00BE +A888 +A88A +82BE +0102 +ENDCHAR +STARTCHAR uni7E49 +ENCODING 32329 +BBX 15 16 0 -2 +BITMAP +11FC +1104 +21FC +2504 +45FC +F904 +11FC +2050 +4954 +FCD8 +04D8 +0154 +5652 +5490 +8092 +010E +ENDCHAR +STARTCHAR uni7E4A +ENCODING 32330 +BBX 15 15 1 -1 +BITMAP +2114 +2114 +47D2 +D110 +2110 +2FFE +5A90 +E694 +2AB4 +AAD4 +B688 +AA88 +A3DA +2E2A +2044 +ENDCHAR +STARTCHAR uni7E4B +ENCODING 32331 +BBX 15 15 1 -1 +BITMAP +1000 +FE78 +1048 +7D8E +5400 +7CFE +5444 +FF38 +1846 +1490 +0338 +FFC4 +0102 +1930 +610C +ENDCHAR +STARTCHAR uni7E4C +ENCODING 32332 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +23FC +2A94 +4A64 +F294 +13FC +2090 +4908 +FA84 +0CFA +0108 +AA90 +A860 +8198 +0606 +ENDCHAR +STARTCHAR uni7E4D +ENCODING 32333 +BBX 15 15 1 -1 +BITMAP +1020 +21FC +4424 +2BFE +1024 +25FC +4C20 +F2AA +12AA +5A22 +56FA +9222 +9272 +12AA +1422 +ENDCHAR +STARTCHAR uni7E4E +ENCODING 32334 +BBX 15 16 0 -2 +BITMAP +1110 +1114 +21D2 +2A50 +4A7E +F550 +1090 +22A8 +4928 +F944 +0A44 +0482 +A808 +AAA4 +8252 +0452 +ENDCHAR +STARTCHAR uni7E4F +ENCODING 32335 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +2252 +2BDE +4A10 +F252 +11CE +2000 +4888 +FBFE +0888 +0088 +ABFE +A888 +8104 +0202 +ENDCHAR +STARTCHAR uni7E50 +ENCODING 32336 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2820 +49FC +F124 +11FC +2124 +49FC +F822 +0BFE +0042 +A824 +AAA2 +828A +0478 +ENDCHAR +STARTCHAR uni7E51 +ENCODING 32337 +BBX 15 16 0 -2 +BITMAP +1018 +11E0 +2040 +2BFE +4888 +F174 +1252 +2070 +4800 +FDFC +0504 +0174 +5554 +5574 +8104 +010C +ENDCHAR +STARTCHAR uni7E52 +ENCODING 32338 +BBX 15 15 1 -1 +BITMAP +11F0 +2010 +4108 +2A04 +17FE +2444 +4D54 +F554 +17FC +5000 +5BF8 +9608 +93F8 +1208 +13F8 +ENDCHAR +STARTCHAR uni7E53 +ENCODING 32339 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +2108 +21F8 +4908 +F9F8 +1000 +27FE +4A40 +FBDC +0A54 +13D4 +AA68 +A7C8 +8054 +0062 +ENDCHAR +STARTCHAR uni7E54 +ENCODING 32340 +BBX 15 15 1 -1 +BITMAP +2220 +2228 +4FA8 +D524 +2520 +2FFE +5820 +EFA4 +24A4 +24A8 +B798 +AC90 +A49A +27AA +2044 +ENDCHAR +STARTCHAR uni7E55 +ENCODING 32341 +BBX 15 15 1 -1 +BITMAP +1104 +2088 +43FE +2820 +11FC +2420 +4FFE +F324 +10A8 +53FE +5800 +95FC +9504 +1104 +11FC +ENDCHAR +STARTCHAR uni7E56 +ENCODING 32342 +BBX 15 15 1 -1 +BITMAP +2290 +2290 +4FD0 +D29E +22A4 +2FE4 +5814 +EBD4 +2A48 +23C8 +6A48 +ABD4 +AA54 +2254 +22E2 +ENDCHAR +STARTCHAR uni7E57 +ENCODING 32343 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +20A8 +2BFE +48A8 +F124 +1222 +2104 +4904 +F9DE +0A44 +0554 +A89E +A904 +8204 +0404 +ENDCHAR +STARTCHAR uni7E58 +ENCODING 32344 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +2048 +2830 +4BFE +F052 +1094 +2350 +4820 +FBFE +0A52 +028A +AB76 +AA52 +8272 +0206 +ENDCHAR +STARTCHAR uni7E59 +ENCODING 32345 +BBX 15 15 1 -1 +BITMAP +101C +21E0 +4622 +2924 +13FE +24A8 +4CA8 +F324 +1222 +51FC +5924 +95FC +9524 +1124 +11FC +ENDCHAR +STARTCHAR uni7E5A +ENCODING 32346 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +43FC +D090 +2294 +2908 +5BFC +E50A +25F8 +2108 +69F8 +A840 +A950 +264C +20C0 +ENDCHAR +STARTCHAR uni7E5B +ENCODING 32347 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +7F1E +0810 +3E7E +0842 +FF7E +2242 +7C7E +0852 +1210 +7F7E +0810 +2A10 +4910 +1810 +ENDCHAR +STARTCHAR uni7E5C +ENCODING 32348 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +23FE +2450 +45FC +F954 +118C +2174 +4904 +FDFC +0408 +03FE +5508 +5488 +80A8 +0010 +ENDCHAR +STARTCHAR uni7E5D +ENCODING 32349 +BBX 15 15 1 -1 +BITMAP +2000 +23DE +4252 +D3DE +2252 +2BDE +5A02 +E67A +224A +227A +6A4A +AA7A +AA8A +229A +2206 +ENDCHAR +STARTCHAR uni7E5E +ENCODING 32350 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +40F8 +D020 +23FE +2888 +4FDC +F488 +20E8 +239E +6800 +ABFE +A890 +2092 +230E +ENDCHAR +STARTCHAR uni7E5F +ENCODING 32351 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +2252 +2A52 +4BDE +F000 +11FC +2124 +49FC +FD24 +05FC +0020 +57FE +5420 +8020 +0020 +ENDCHAR +STARTCHAR uni7E60 +ENCODING 32352 +BBX 15 16 0 -2 +BITMAP +0100 +2488 +2424 +43E4 +0000 +2424 +1212 +A0A0 +A4A4 +1C1C +0420 +1FC0 +0210 +3FF8 +0920 +1310 +ENDCHAR +STARTCHAR uni7E61 +ENCODING 32353 +BBX 15 15 1 -1 +BITMAP +1020 +21FC +4024 +2BFE +1024 +25FC +4C20 +F2AA +13AE +5222 +5BFE +9622 +93AE +12AA +1422 +ENDCHAR +STARTCHAR uni7E62 +ENCODING 32354 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +2124 +25FC +4420 +FBFE +1000 +21FC +4904 +FDFC +0504 +01FC +5504 +55FC +8088 +0104 +ENDCHAR +STARTCHAR uni7E63 +ENCODING 32355 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +2024 +2BFE +4824 +F1FC +1020 +23FE +4800 +FDFC +0524 +01FC +5524 +55FC +8000 +03FE +ENDCHAR +STARTCHAR uni7E64 +ENCODING 32356 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1FF0 +1490 +1250 +1130 +1FF0 +0400 +FFFE +1250 +2F88 +C226 +1FF0 +0948 +1320 +ENDCHAR +STARTCHAR uni7E65 +ENCODING 32357 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +2020 +29FC +4800 +F1FC +1104 +21FC +4888 +FBFE +0800 +01FC +A904 +A904 +81FC +0104 +ENDCHAR +STARTCHAR uni7E66 +ENCODING 32358 +BBX 15 15 1 -1 +BITMAP +2000 +277C +4144 +5144 +217C +2B10 +5A7C +E654 +2254 +237C +6910 +A914 +A914 +219A +26E2 +ENDCHAR +STARTCHAR uni7E67 +ENCODING 32359 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +4420 +2BFE +1222 +23BA +4E22 +F398 +1200 +51FC +5400 +97FE +9448 +109C +11E2 +ENDCHAR +STARTCHAR uni7E68 +ENCODING 32360 +BBX 15 16 0 -2 +BITMAP +1010 +1210 +217C +2410 +44FE +F844 +1328 +21FE +4910 +FD7C +0510 +01FE +5510 +5510 +82FE +0400 +ENDCHAR +STARTCHAR uni7E69 +ENCODING 32361 +BBX 15 15 1 -1 +BITMAP +1000 +23F8 +42A8 +2AA8 +13B8 +24A0 +4FB8 +F2A8 +12A8 +53B8 +56A8 +92A8 +93B8 +1082 +107E +ENDCHAR +STARTCHAR uni7E6A +ENCODING 32362 +BBX 15 15 1 -1 +BITMAP +20E0 +2318 +4CE6 +D000 +27FC +2444 +5554 +EC44 +27FC +2000 +6BF8 +AA08 +ABF8 +2208 +23F8 +ENDCHAR +STARTCHAR uni7E6B +ENCODING 32363 +BBX 15 15 1 -1 +BITMAP +10F8 +FE88 +550E +7C00 +55FC +FE84 +1048 +5470 +7C8E +0B20 +0438 +FFC6 +0100 +1930 +610C +ENDCHAR +STARTCHAR uni7E6C +ENCODING 32364 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2924 +4924 +F2AA +17FE +2000 +49FC +FD04 +0574 +0154 +5574 +5504 +81FC +0104 +ENDCHAR +STARTCHAR uni7E6D +ENCODING 32365 +BBX 15 15 1 -1 +BITMAP +0410 +FFFE +0410 +7FFC +4944 +5144 +75F4 +4954 +5554 +7FF4 +4944 +6D54 +4B6C +49C4 +410C +ENDCHAR +STARTCHAR uni7E6E +ENCODING 32366 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2000 +25FC +4524 +F9FC +1124 +23FE +4800 +FDFC +0524 +01FC +5524 +55FC +8000 +03FE +ENDCHAR +STARTCHAR uni7E6F +ENCODING 32367 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +2294 +2A94 +4BFC +F000 +17FE +2000 +4BFC +FA04 +0BFC +00A2 +A914 +AB08 +8D44 +0182 +ENDCHAR +STARTCHAR uni7E70 +ENCODING 32368 +BBX 15 15 1 -1 +BITMAP +1000 +20F8 +4488 +28F8 +1000 +27DE +4E52 +F3DE +1220 +5BFE +54A8 +94A8 +9124 +1222 +1020 +ENDCHAR +STARTCHAR uni7E71 +ENCODING 32369 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +2088 +2900 +4BFC +F554 +10D4 +2324 +4854 +F894 +0B48 +0020 +A8A4 +AA8A +828A +0478 +ENDCHAR +STARTCHAR uni7E72 +ENCODING 32370 +BBX 15 16 0 -2 +BITMAP +1100 +11DE +224A +2C8A +4BEA +F2B6 +12A4 +23F4 +4ABE +FAA4 +0BE4 +02BE +AAA4 +AAA4 +8224 +0464 +ENDCHAR +STARTCHAR uni7E73 +ENCODING 32371 +BBX 15 15 1 -1 +BITMAP +1110 +2210 +4790 +2CBE +17A4 +24C4 +4FA4 +F224 +17D4 +5218 +5BC8 +9248 +9454 +1454 +19A2 +ENDCHAR +STARTCHAR uni7E74 +ENCODING 32372 +BBX 15 16 0 -2 +BITMAP +3E10 +22FE +3E44 +2028 +7EFE +A210 +3EFC +2210 +0450 +0880 +1F00 +0210 +3FF8 +0108 +1520 +2210 +ENDCHAR +STARTCHAR uni7E75 +ENCODING 32373 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +47FE +2904 +1174 +2554 +4D74 +F304 +11FC +5000 +58F8 +9488 +94F8 +1088 +13FE +ENDCHAR +STARTCHAR uni7E76 +ENCODING 32374 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +21FC +2488 +4450 +FBFE +1000 +21FC +4904 +FDFC +0504 +01FC +A820 +AA94 +828A +047A +ENDCHAR +STARTCHAR uni7E77 +ENCODING 32375 +BBX 15 16 0 -2 +BITMAP +1090 +13FC +2294 +23FC +4A94 +FBFC +1000 +23FC +4A00 +FAF8 +0A00 +13FE +AD20 +A514 +8548 +0986 +ENDCHAR +STARTCHAR uni7E78 +ENCODING 32376 +BBX 15 16 0 -2 +BITMAP +1088 +1448 +2250 +28FC +4820 +F050 +1694 +2238 +4A50 +FA98 +0A34 +0254 +AA90 +AA20 +85FE +0800 +ENDCHAR +STARTCHAR uni7E79 +ENCODING 32377 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +4554 +29FC +1020 +25FC +4C20 +F3FC +1088 +53FE +5420 +95FC +9420 +1020 +1020 +ENDCHAR +STARTCHAR uni7E7A +ENCODING 32378 +BBX 15 16 0 -2 +BITMAP +1210 +1210 +23D0 +2C5E +48A4 +F3D4 +1054 +2054 +4BC8 +F848 +0854 +07E2 +A800 +AAA4 +8252 +0452 +ENDCHAR +STARTCHAR uni7E7B +ENCODING 32379 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +4420 +2BFE +1222 +26AA +4E22 +F288 +1200 +51FC +5440 +97FE +9292 +1292 +1296 +ENDCHAR +STARTCHAR uni7E7C +ENCODING 32380 +BBX 15 15 1 -1 +BITMAP +1244 +22AA +4644 +2AAA +12EE +2600 +4FFE +F244 +1288 +52AA +5A44 +96AA +92EE +1200 +13FE +ENDCHAR +STARTCHAR uni7E7D +ENCODING 32381 +BBX 15 15 1 -1 +BITMAP +2040 +27FE +4C02 +D3FC +2148 +2E56 +5860 +EBFC +2604 +23FC +6A04 +ABFC +AA04 +23FC +2606 +ENDCHAR +STARTCHAR uni7E7E +ENCODING 32382 +BBX 15 15 1 -1 +BITMAP +1210 +2110 +457C +2A54 +117C +2110 +4CFE +F344 +117C +5140 +597C +9544 +957C +1280 +147E +ENDCHAR +STARTCHAR uni7E7F +ENCODING 32383 +BBX 15 15 1 -1 +BITMAP +1008 +23E8 +4688 +2BEE +1228 +27F0 +4E80 +F28E +13E0 +5000 +59FC +9554 +9554 +1154 +13FE +ENDCHAR +STARTCHAR uni7E80 +ENCODING 32384 +BBX 15 16 0 -2 +BITMAP +1128 +11AA +216C +2A28 +4AFE +F644 +1628 +2AFE +4A10 +FA7C +0A10 +02FE +AA10 +AA28 +8244 +0282 +ENDCHAR +STARTCHAR uni7E81 +ENCODING 32385 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +2020 +2BFE +4820 +F1FC +11AC +2174 +49FC +FC20 +05FC +0020 +57FE +5400 +8154 +022A +ENDCHAR +STARTCHAR uni7E82 +ENCODING 32386 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8908 +1FF0 +1010 +1FF0 +1010 +FFFE +1210 +6C4C +8892 +0538 +7FC4 +1110 +610C +ENDCHAR +STARTCHAR uni7E83 +ENCODING 32387 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +47FE +50A0 +2F5E +2554 +5D54 +EB5A +2A04 +23FC +6A04 +ABFC +AA04 +2204 +2404 +ENDCHAR +STARTCHAR uni7E84 +ENCODING 32388 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +2088 +2820 +4A3C +F144 +1038 +20D6 +4B38 +F910 +097C +0110 +A97E +A910 +8310 +04FE +ENDCHAR +STARTCHAR uni7E85 +ENCODING 32389 +BBX 15 16 0 -2 +BITMAP +2444 +24E4 +48A8 +4AAA +9EEE +E4A4 +2AAA +4EEE +9242 +F040 +0FFE +10E0 +A950 +A248 +8C46 +0040 +ENDCHAR +STARTCHAR uni7E86 +ENCODING 32390 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +45AC +2974 +11FC +2420 +4DFC +F220 +13FE +5154 +5A4A +9420 +93FC +1020 +17FE +ENDCHAR +STARTCHAR uni7E87 +ENCODING 32391 +BBX 15 15 1 -1 +BITMAP +1000 +92FE +5410 +FE7C +1044 +547C +9244 +2044 +C87C +5244 +2644 +F97C +1020 +5444 +9282 +ENDCHAR +STARTCHAR uni7E88 +ENCODING 32392 +BBX 15 15 1 -1 +BITMAP +2100 +217E +4110 +D7FC +2124 +293C +5FE4 +E424 +203C +23A4 +6AA4 +AABC +AA80 +23A4 +2042 +ENDCHAR +STARTCHAR uni7E89 +ENCODING 32393 +BBX 15 15 1 -1 +BITMAP +1088 +23DE +4088 +2BDE +1088 +2554 +4E02 +F1FC +1104 +51FC +5904 +95FC +9504 +11FC +1306 +ENDCHAR +STARTCHAR uni7E8A +ENCODING 32394 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +41FC +2948 +11FC +2548 +4DFE +F320 +11FC +51A4 +5AFC +96A4 +92FC +1048 +1186 +ENDCHAR +STARTCHAR uni7E8B +ENCODING 32395 +BBX 15 16 0 -2 +BITMAP +13FC +1040 +21F8 +2908 +49F8 +F108 +17FE +2442 +4AA4 +FA8A +0C7A +0080 +A9F8 +AA88 +8070 +038E +ENDCHAR +STARTCHAR uni7E8C +ENCODING 32396 +BBX 15 15 1 -1 +BITMAP +1020 +23FE +4420 +29FC +1000 +27FE +4E92 +F3FE +1104 +51FC +5504 +95FC +9504 +11FC +1306 +ENDCHAR +STARTCHAR uni7E8D +ENCODING 32397 +BBX 15 14 1 -1 +BITMAP +0FE0 +0920 +0FE0 +0920 +7FFC +5294 +7EFC +5294 +7FFC +0A20 +0448 +FFFC +0922 +711C +ENDCHAR +STARTCHAR uni7E8E +ENCODING 32398 +BBX 15 15 1 -1 +BITMAP +2088 +23EC +408A +D7FA +2008 +2FFE +5948 +E76A +254A +636C +B14C +AB68 +A95A +21EA +2644 +ENDCHAR +STARTCHAR uni7E8F +ENCODING 32399 +BBX 15 15 1 -1 +BITMAP +1020 +23FE +4200 +2AFC +12A4 +22FC +4EA4 +F2FC +1220 +53FE +56CC +9312 +92FC +1410 +11FE +ENDCHAR +STARTCHAR uni7E90 +ENCODING 32400 +BBX 15 15 1 -1 +BITMAP +1080 +209E +43E8 +281E +1152 +263E +4D52 +F352 +115E +5092 +5892 +955E +9540 +1234 +1022 +ENDCHAR +STARTCHAR uni7E91 +ENCODING 32401 +BBX 15 15 1 -1 +BITMAP +1040 +207C +4440 +2BFE +1242 +22F8 +4E42 +F2FE +12A4 +52FC +5AA4 +95FC +9554 +1154 +13FE +ENDCHAR +STARTCHAR uni7E92 +ENCODING 32402 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +4400 +D5FC +2524 +2DFC +5D24 +E5FC +2420 +27FE +7554 +AA22 +A8F8 +2020 +23FE +ENDCHAR +STARTCHAR uni7E93 +ENCODING 32403 +BBX 15 15 1 -1 +BITMAP +1000 +23DE +4652 +2BDE +1252 +27DE +4E52 +F3DE +1554 +5222 +5440 +97FE +9588 +1078 +13C6 +ENDCHAR +STARTCHAR uni7E94 +ENCODING 32404 +BBX 15 15 1 -1 +BITMAP +10F0 +2320 +45FC +2904 +11FC +2510 +4DDC +F312 +13CE +5000 +59FC +9524 +95FC +10AA +131E +ENDCHAR +STARTCHAR uni7E95 +ENCODING 32405 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +2000 +29DC +4954 +F1DC +1088 +23FE +4888 +FBFE +0888 +07FE +A894 +A988 +86A4 +00C2 +ENDCHAR +STARTCHAR uni7E96 +ENCODING 32406 +BBX 15 15 1 -1 +BITMAP +2228 +222C +455A +D55A +2008 +2FFE +5948 +E76A +254A +636C +B14C +AB68 +A95A +21EA +2724 +ENDCHAR +STARTCHAR uni7E97 +ENCODING 32407 +BBX 15 16 0 -2 +BITMAP +1222 +13FE +2090 +29FE +4B10 +F5FE +1110 +21FE +4910 +F9FE +0900 +03FE +AA8A +AB76 +8252 +0276 +ENDCHAR +STARTCHAR uni7E98 +ENCODING 32408 +BBX 15 15 1 -1 +BITMAP +1294 +23DE +44A4 +2BFE +114C +2554 +4FFE +F304 +11FC +5104 +59FC +9504 +95FC +1088 +1306 +ENDCHAR +STARTCHAR uni7E99 +ENCODING 32409 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +4252 +4252 +93FE +E108 +2154 +425E +97B4 +F11E +0254 +17DE +A814 +A554 +855E +0010 +ENDCHAR +STARTCHAR uni7E9A +ENCODING 32410 +BBX 15 15 1 -1 +BITMAP +2000 +27BE +4000 +2FBE +16AA +2040 +4FFE +F490 +27FC +7494 +6FFC +A510 +A5DC +2912 +23CE +ENDCHAR +STARTCHAR uni7E9B +ENCODING 32411 +BBX 15 15 1 -1 +BITMAP +0100 +3FF8 +0100 +1FF0 +0100 +FFFE +0920 +7FFC +1110 +3FF8 +A224 +FF1A +087C +4954 +8892 +ENDCHAR +STARTCHAR uni7E9C +ENCODING 32412 +BBX 15 15 1 -1 +BITMAP +2020 +27BE +4D40 +D7BC +2480 +2FBE +4D2A +F7FE +1208 +53F8 +5A08 +97F8 +90A0 +1122 +161E +ENDCHAR +STARTCHAR uni7E9D +ENCODING 32413 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +21FC +2924 +4BFE +F2AA +13FE +22AA +4BFE +F888 +09F0 +0064 +ABFE +A924 +8222 +0060 +ENDCHAR +STARTCHAR uni7E9E +ENCODING 32414 +BBX 15 16 0 -2 +BITMAP +4444 +44E4 +4A0A +4EEE +A404 +AAEA +CE0E +40E0 +4AAA +8AEA +A040 +E024 +0522 +A50A +A908 +00F8 +ENDCHAR +STARTCHAR uni7E9F +ENCODING 32415 +BBX 6 15 0 -1 +BITMAP +10 +10 +20 +24 +44 +F8 +10 +20 +40 +FC +40 +00 +1C +E0 +40 +ENDCHAR +STARTCHAR uni7EA0 +ENCODING 32416 +BBX 14 16 0 -2 +BITMAP +1004 +1004 +2084 +2484 +4484 +F884 +1084 +2084 +408C +FCB4 +40C4 +0084 +1C04 +E004 +4004 +0004 +ENDCHAR +STARTCHAR uni7EA1 +ENCODING 32417 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2020 +2420 +4420 +F820 +1020 +23FE +4020 +FC20 +4020 +0020 +1C20 +E020 +40A0 +0040 +ENDCHAR +STARTCHAR uni7EA2 +ENCODING 32418 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +21FC +2420 +4420 +F820 +1020 +2020 +4020 +FC20 +4020 +0020 +1C20 +E020 +43FE +ENDCHAR +STARTCHAR uni7EA3 +ENCODING 32419 +BBX 15 16 0 -2 +BITMAP +1008 +1008 +2008 +2408 +45FE +F808 +1008 +2008 +4088 +FC48 +4048 +0008 +1C08 +E008 +4028 +0010 +ENDCHAR +STARTCHAR uni7EA4 +ENCODING 32420 +BBX 15 16 0 -2 +BITMAP +1008 +103C +21E0 +2420 +4420 +F820 +1020 +23FE +4020 +FC20 +4020 +0020 +1C20 +E020 +4020 +0020 +ENDCHAR +STARTCHAR uni7EA5 +ENCODING 32421 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +2080 +24FE +4500 +FA00 +10FC +2008 +4010 +FC20 +4040 +0080 +1D02 +E102 +40FE +ENDCHAR +STARTCHAR uni7EA6 +ENCODING 32422 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +2080 +2104 +45FE +FA04 +1404 +2084 +4044 +FC24 +0024 +0004 +1C04 +E044 +4028 +0010 +ENDCHAR +STARTCHAR uni7EA7 +ENCODING 32423 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +2084 +2088 +4888 +F890 +109C +2084 +4144 +F944 +4128 +0128 +1A10 +E228 +4444 +0182 +ENDCHAR +STARTCHAR uni7EA8 +ENCODING 32424 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2040 +2440 +45F8 +F848 +1048 +2048 +4148 +FCC8 +4048 +00A8 +1CAA +E10A +4206 +0402 +ENDCHAR +STARTCHAR uni7EA9 +ENCODING 32425 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +2010 +25FE +4500 +F900 +1100 +2100 +4100 +FD00 +4100 +0100 +1D00 +E200 +4200 +0400 +ENDCHAR +STARTCHAR uni7EAA +ENCODING 32426 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +23F8 +2008 +4808 +F008 +1008 +23F8 +4208 +FA00 +4200 +0202 +1A02 +E202 +41FE +ENDCHAR +STARTCHAR uni7EAB +ENCODING 32427 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +23FC +2044 +4844 +FA44 +1244 +2244 +4484 +F884 +4084 +0104 +1904 +E204 +4428 +0810 +ENDCHAR +STARTCHAR uni7EAC +ENCODING 32428 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +25FE +4420 +F820 +10FC +2020 +4020 +FDFE +4022 +0022 +1C2A +E024 +4020 +0020 +ENDCHAR +STARTCHAR uni7EAD +ENCODING 32429 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +21FC +2400 +4400 +F800 +13FE +2020 +4020 +FC40 +4040 +0088 +1D04 +E3FE +4102 +ENDCHAR +STARTCHAR uni7EAE +ENCODING 32430 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2040 +2040 +4BFE +F840 +1080 +2090 +4090 +F920 +4120 +0248 +1A44 +E484 +41FE +0082 +ENDCHAR +STARTCHAR uni7EAF +ENCODING 32431 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +2040 +23FC +4840 +FA48 +1248 +2248 +4248 +FBF8 +4048 +0040 +1842 +E042 +403E +ENDCHAR +STARTCHAR uni7EB0 +ENCODING 32432 +BBX 15 15 0 -1 +BITMAP +1010 +1110 +2110 +2512 +4512 +F914 +11D8 +2110 +4110 +FD10 +4110 +0112 +1D52 +E192 +410E +ENDCHAR +STARTCHAR uni7EB1 +ENCODING 32433 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2040 +2148 +4944 +FA42 +1242 +2448 +4048 +F848 +4010 +0010 +1820 +E040 +4180 +0600 +ENDCHAR +STARTCHAR uni7EB2 +ENCODING 32434 +BBX 14 16 0 -2 +BITMAP +1000 +13FC +2204 +2204 +4A94 +FA54 +1224 +2224 +4254 +FA54 +4294 +0304 +1A04 +E204 +4214 +0208 +ENDCHAR +STARTCHAR uni7EB3 +ENCODING 32435 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +2020 +4BFE +F222 +1222 +2222 +4252 +FA4A +428A +0302 +1A02 +E202 +420A +0204 +ENDCHAR +STARTCHAR uni7EB4 +ENCODING 32436 +BBX 15 15 0 -1 +BITMAP +1008 +103C +21E0 +2420 +4420 +F820 +1020 +23FE +4020 +FC20 +4020 +0020 +1C20 +E020 +41FC +ENDCHAR +STARTCHAR uni7EB5 +ENCODING 32437 +BBX 15 16 0 -2 +BITMAP +1110 +1110 +2110 +2110 +4910 +F910 +1110 +2110 +4110 +FAA8 +4268 +0228 +1C44 +E444 +4884 +1102 +ENDCHAR +STARTCHAR uni7EB6 +ENCODING 32438 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +20A0 +20A0 +4910 +FA08 +1406 +2110 +4120 +F940 +4180 +0100 +1904 +E104 +40FC +ENDCHAR +STARTCHAR uni7EB7 +ENCODING 32439 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +2090 +2088 +4908 +F904 +1204 +25FA +4088 +F888 +4088 +0088 +1908 +E108 +4228 +0410 +ENDCHAR +STARTCHAR uni7EB8 +ENCODING 32440 +BBX 15 16 0 -2 +BITMAP +1008 +103C +23E0 +2220 +4A20 +FA20 +1220 +23FE +4220 +FA10 +4210 +0212 +1A0A +E28A +4306 +0202 +ENDCHAR +STARTCHAR uni7EB9 +ENCODING 32441 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +2040 +27FC +4910 +F110 +1110 +2110 +4110 +F8A0 +40A0 +0040 +18A0 +E110 +4208 +0C06 +ENDCHAR +STARTCHAR uni7EBA +ENCODING 32442 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2020 +27FE +4480 +F880 +1080 +20FC +4084 +FC84 +4084 +0084 +1D04 +E104 +4228 +0410 +ENDCHAR +STARTCHAR uni7EBB +ENCODING 32443 +BBX 15 15 0 -1 +BITMAP +1040 +1020 +2020 +2400 +45FE +F902 +1204 +2000 +4000 +FC00 +4000 +0000 +1C00 +E1FE +4000 +ENDCHAR +STARTCHAR uni7EBC +ENCODING 32444 +BBX 14 16 0 -2 +BITMAP +1004 +11E4 +2024 +2424 +4424 +F9E4 +1104 +2104 +4104 +FDE4 +4024 +0024 +1C24 +E024 +4144 +0084 +ENDCHAR +STARTCHAR uni7EBD +ENCODING 32445 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +2044 +2444 +4444 +F844 +1044 +21FC +4084 +FC84 +4084 +0084 +1C84 +E084 +47FE +ENDCHAR +STARTCHAR uni7EBE +ENCODING 32446 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +2008 +2450 +4420 +F810 +13FE +2022 +4024 +FC20 +4020 +0020 +1C20 +E020 +40A0 +0040 +ENDCHAR +STARTCHAR uni7EBF +ENCODING 32447 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +2040 +245C +45E0 +F840 +105E +23E0 +4044 +FC48 +4030 +0022 +1C52 +E08A +4306 +0002 +ENDCHAR +STARTCHAR uni7EC0 +ENCODING 32448 +BBX 15 16 0 -2 +BITMAP +1108 +1108 +2108 +2508 +47FE +F908 +1108 +2108 +4108 +FDF8 +4108 +0108 +1D08 +E108 +41F8 +0108 +ENDCHAR +STARTCHAR uni7EC1 +ENCODING 32449 +BBX 15 15 0 -1 +BITMAP +1048 +1248 +2248 +2248 +4A48 +F7FE +1248 +2248 +4248 +FA48 +4278 +0200 +1A00 +E200 +43FE +ENDCHAR +STARTCHAR uni7EC2 +ENCODING 32450 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +2048 +2040 +4BFE +F880 +1080 +20FC +4144 +F944 +4128 +0128 +1A10 +E228 +4444 +0182 +ENDCHAR +STARTCHAR uni7EC3 +ENCODING 32451 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +27FC +2080 +4880 +FBE0 +1120 +2220 +43FC +F820 +4128 +0124 +1A22 +E422 +40A0 +0040 +ENDCHAR +STARTCHAR uni7EC4 +ENCODING 32452 +BBX 15 15 0 -1 +BITMAP +1000 +11F8 +2108 +2108 +4908 +F9F8 +1108 +2108 +4108 +F9F8 +4108 +0108 +1908 +E108 +47FE +ENDCHAR +STARTCHAR uni7EC5 +ENCODING 32453 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +2020 +25FC +4524 +F924 +1124 +21FC +4124 +FD24 +4124 +01FC +1D24 +E020 +4020 +0020 +ENDCHAR +STARTCHAR uni7EC6 +ENCODING 32454 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +21FC +2524 +4524 +F924 +1124 +2124 +41FC +FD24 +4124 +0124 +1D24 +E124 +41FC +0104 +ENDCHAR +STARTCHAR uni7EC7 +ENCODING 32455 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +21FC +2504 +4504 +F904 +1104 +2104 +41FC +FD04 +4000 +0090 +1C88 +E104 +4202 +0402 +ENDCHAR +STARTCHAR uni7EC8 +ENCODING 32456 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +20F8 +2108 +4B10 +FCA0 +1040 +20A0 +4318 +FC06 +40C0 +0020 +1810 +E180 +4060 +0010 +ENDCHAR +STARTCHAR uni7EC9 +ENCODING 32457 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +20F8 +2108 +4A10 +FC20 +13FC +2004 +4004 +F804 +41FC +0004 +1804 +E004 +43FC +0004 +ENDCHAR +STARTCHAR uni7ECA +ENCODING 32458 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2124 +24A4 +44A8 +F820 +11FC +2020 +4020 +FC20 +43FE +0020 +1C20 +E020 +4020 +0020 +ENDCHAR +STARTCHAR uni7ECB +ENCODING 32459 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +2090 +23FC +4894 +F894 +13FC +2290 +4290 +FBFE +4092 +0092 +191A +E114 +4210 +0410 +ENDCHAR +STARTCHAR uni7ECC +ENCODING 32460 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +2124 +2524 +4524 +F924 +11FC +2020 +4020 +FD24 +4124 +0124 +1D24 +E124 +41FC +0004 +ENDCHAR +STARTCHAR uni7ECD +ENCODING 32461 +BBX 14 16 0 -2 +BITMAP +1000 +13FC +2084 +2084 +4884 +F904 +1114 +2208 +4400 +F9FC +4104 +0104 +1904 +E104 +41FC +0104 +ENDCHAR +STARTCHAR uni7ECE +ENCODING 32462 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +2104 +2088 +4850 +F820 +10D8 +2326 +4020 +F9FC +4020 +0020 +1BFE +E020 +4020 +0020 +ENDCHAR +STARTCHAR uni7ECF +ENCODING 32463 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +2008 +2410 +4430 +F848 +1084 +2302 +4000 +FDFC +4020 +0020 +1C20 +E020 +43FE +ENDCHAR +STARTCHAR uni7ED0 +ENCODING 32464 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2040 +2488 +4504 +FBFE +1002 +2000 +41FC +FD04 +4104 +0104 +1D04 +E104 +41FC +0104 +ENDCHAR +STARTCHAR uni7ED1 +ENCODING 32465 +BBX 15 16 0 -2 +BITMAP +2100 +211E +2112 +47D2 +5114 +F114 +27D8 +2114 +4112 +F7D2 +4112 +011A +3114 +C210 +0210 +0410 +ENDCHAR +STARTCHAR uni7ED2 +ENCODING 32466 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +2024 +2020 +4BFE +F820 +1124 +2124 +4124 +FBA8 +4128 +0110 +1A12 +E22A +4446 +0082 +ENDCHAR +STARTCHAR uni7ED3 +ENCODING 32467 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2020 +27FE +4420 +F820 +11FC +2000 +4000 +FDFC +4104 +0104 +1D04 +E104 +41FC +0104 +ENDCHAR +STARTCHAR uni7ED4 +ENCODING 32468 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +27FC +20A0 +4910 +FA08 +1DF6 +2000 +47FC +F880 +4100 +03F8 +1808 +E008 +4050 +0020 +ENDCHAR +STARTCHAR uni7ED5 +ENCODING 32469 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +20BC +23C0 +4850 +F824 +10D4 +230C +4000 +FBFE +4090 +0090 +1912 +E112 +420E +0400 +ENDCHAR +STARTCHAR uni7ED6 +ENCODING 32470 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +2020 +2440 +4488 +F904 +11FE +2022 +4020 +FC20 +41FE +0020 +1C20 +E020 +43FE +ENDCHAR +STARTCHAR uni7ED7 +ENCODING 32471 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +213C +2200 +4C80 +F080 +117E +2308 +4508 +F908 +4108 +0108 +1908 +E108 +4128 +0110 +ENDCHAR +STARTCHAR uni7ED8 +ENCODING 32472 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +20A0 +2110 +4A08 +F406 +11F0 +2000 +4000 +FBFC +4040 +0080 +1910 +E208 +47FC +0204 +ENDCHAR +STARTCHAR uni7ED9 +ENCODING 32473 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +20A0 +2110 +4A08 +F406 +13F8 +2000 +4000 +FBF8 +4208 +0208 +1A08 +E208 +43F8 +0208 +ENDCHAR +STARTCHAR uni7EDA +ENCODING 32474 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +2100 +21FC +4A04 +F404 +13E4 +2224 +4224 +FBE4 +4224 +0224 +1BE4 +E004 +4028 +0010 +ENDCHAR +STARTCHAR uni7EDB +ENCODING 32475 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +20FC +2108 +4A90 +F860 +1198 +2626 +4020 +F9FC +4020 +0220 +1BFE +E020 +4020 +0020 +ENDCHAR +STARTCHAR uni7EDC +ENCODING 32476 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +20F8 +2108 +4B10 +FCA0 +1040 +20A0 +4118 +FA06 +45F8 +0108 +1908 +E108 +41F8 +0108 +ENDCHAR +STARTCHAR uni7EDD +ENCODING 32477 +BBX 15 15 0 -1 +BITMAP +1080 +1080 +20F8 +2108 +4A10 +F5FC +1124 +2124 +4124 +F9FC +4100 +0100 +1902 +E102 +40FE +ENDCHAR +STARTCHAR uni7EDE +ENCODING 32478 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2020 +25FE +4400 +F888 +1104 +2202 +4088 +FC88 +4050 +0050 +1C20 +E050 +4088 +0306 +ENDCHAR +STARTCHAR uni7EDF +ENCODING 32479 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2020 +23FE +4840 +F888 +1104 +23FE +4092 +F890 +4090 +0090 +1912 +E112 +420E +0400 +ENDCHAR +STARTCHAR uni7EE0 +ENCODING 32480 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2020 +2420 +45FC +F924 +1124 +21FC +4124 +FD24 +41FC +0120 +1CA0 +E040 +40B0 +030E +ENDCHAR +STARTCHAR uni7EE1 +ENCODING 32481 +BBX 14 16 0 -2 +BITMAP +1020 +1124 +20A4 +24A8 +4420 +F9FC +1104 +2104 +41FC +FD04 +4104 +01FC +1D04 +E104 +4114 +0108 +ENDCHAR +STARTCHAR uni7EE2 +ENCODING 32482 +BBX 14 16 0 -2 +BITMAP +1000 +11F8 +2108 +2108 +49F8 +F800 +13FC +2204 +4204 +FBFC +4204 +0204 +1BFC +E204 +4214 +0208 +ENDCHAR +STARTCHAR uni7EE3 +ENCODING 32483 +BBX 15 16 0 -2 +BITMAP +1038 +13C0 +2040 +2040 +4FFC +F950 +1248 +2446 +43F0 +F910 +4120 +017C +1A04 +E204 +4428 +0810 +ENDCHAR +STARTCHAR uni7EE4 +ENCODING 32484 +BBX 15 16 0 -2 +BITMAP +1000 +1050 +2048 +2484 +4524 +F820 +1050 +2088 +4106 +FCF8 +4088 +0088 +1C88 +E088 +40F8 +0088 +ENDCHAR +STARTCHAR uni7EE5 +ENCODING 32485 +BBX 15 16 0 -2 +BITMAP +1008 +103C +23C0 +2044 +4A24 +F928 +1100 +2040 +43FE +F888 +4108 +0390 +1860 +E050 +4188 +0604 +ENDCHAR +STARTCHAR uni7EE6 +ENCODING 32486 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +21F8 +2308 +4C90 +F060 +1198 +2646 +4040 +FBFC +4040 +0248 +1A44 +E444 +4140 +0080 +ENDCHAR +STARTCHAR uni7EE7 +ENCODING 32487 +BBX 15 15 0 -1 +BITMAP +1020 +1220 +2220 +2324 +4AA8 +F220 +13FC +2220 +4270 +FAA8 +4324 +0220 +1A20 +E220 +43FE +ENDCHAR +STARTCHAR uni7EE8 +ENCODING 32488 +BBX 15 16 0 -2 +BITMAP +1108 +1088 +2090 +23FC +4824 +F824 +13FC +2220 +4220 +FBFE +4062 +00A2 +192A +E224 +4420 +0020 +ENDCHAR +STARTCHAR uni7EE9 +ENCODING 32489 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +27FC +2040 +4BF8 +F040 +17FE +2000 +43F8 +FA08 +4248 +0248 +1A48 +E0A0 +4110 +0608 +ENDCHAR +STARTCHAR uni7EEA +ENCODING 32490 +BBX 15 16 0 -2 +BITMAP +1040 +1044 +23F4 +2048 +4850 +F7FE +1040 +2080 +41F8 +FB08 +4508 +01F8 +1908 +E108 +41F8 +0108 +ENDCHAR +STARTCHAR uni7EEB +ENCODING 32491 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +21FC +2020 +4820 +FBFE +1088 +2144 +4242 +F8F8 +4188 +0250 +1820 +E050 +4188 +0606 +ENDCHAR +STARTCHAR uni7EEC +ENCODING 32492 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +23FE +2488 +44A8 +F820 +11FC +2124 +4124 +FD24 +43FE +0020 +1C50 +E088 +4104 +0202 +ENDCHAR +STARTCHAR uni7EED +ENCODING 32493 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +21FC +2420 +4420 +FBFE +1002 +2094 +4050 +FD10 +4090 +03FE +1C28 +E044 +4082 +0302 +ENDCHAR +STARTCHAR uni7EEE +ENCODING 32494 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +21FC +2450 +4488 +F904 +13FE +2008 +41E8 +FD28 +4128 +01E8 +1D28 +E008 +4028 +0010 +ENDCHAR +STARTCHAR uni7EEF +ENCODING 32495 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +2090 +279E +4890 +F890 +1090 +239C +4090 +F890 +4090 +079E +1890 +E090 +4090 +0090 +ENDCHAR +STARTCHAR uni7EF0 +ENCODING 32496 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +207E +2040 +4BFC +FA04 +13FC +2204 +43FC +FA44 +4040 +07FE +1840 +E040 +4040 +0040 +ENDCHAR +STARTCHAR uni7EF1 +ENCODING 32497 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +20A4 +20A8 +4820 +FBFE +1202 +2202 +42FA +FA8A +428A +028A +1AFA +E202 +420A +0204 +ENDCHAR +STARTCHAR uni7EF2 +ENCODING 32498 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2104 +2504 +45FC +F904 +1104 +21FC +4000 +FD12 +41D4 +0118 +1D10 +E152 +4192 +010E +ENDCHAR +STARTCHAR uni7EF3 +ENCODING 32499 +BBX 15 16 0 -2 +BITMAP +1000 +11F0 +2110 +2110 +49F0 +F840 +13F8 +2248 +4248 +FBF8 +4248 +0248 +1BFA +E042 +4042 +003E +ENDCHAR +STARTCHAR uni7EF4 +ENCODING 32500 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +2080 +25FE +4510 +FB10 +15FC +2110 +4110 +FDFC +4110 +0110 +1D10 +E1FE +4100 +0100 +ENDCHAR +STARTCHAR uni7EF5 +ENCODING 32501 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +21FC +2104 +49FC +F104 +11FC +2020 +4020 +FBFE +4222 +0222 +1A2A +E224 +4020 +0020 +ENDCHAR +STARTCHAR uni7EF6 +ENCODING 32502 +BBX 15 16 0 -2 +BITMAP +101C +13E0 +2084 +2244 +4948 +F910 +17FE +2402 +4000 +FBF8 +4108 +0110 +18A0 +E040 +41B0 +060E +ENDCHAR +STARTCHAR uni7EF7 +ENCODING 32503 +BBX 14 16 0 -2 +BITMAP +2000 +27BC +24A4 +44A4 +54A4 +F7BC +24A4 +24A4 +44A4 +F7BC +44A4 +04A4 +34A4 +C4A4 +0AA4 +114C +ENDCHAR +STARTCHAR uni7EF8 +ENCODING 32504 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2222 +2222 +4AFA +FA22 +1222 +23FE +4202 +FAFA +428A +028A +1AFA +E202 +420A +0404 +ENDCHAR +STARTCHAR uni7EF9 +ENCODING 32505 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +20FE +2502 +4682 +F8F2 +1142 +2042 +43FA +FC42 +4152 +0152 +1DF2 +E002 +4014 +0008 +ENDCHAR +STARTCHAR uni7EFA +ENCODING 32506 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +21EC +212A +4A28 +F548 +1088 +217E +4600 +F800 +41FC +0104 +1904 +E104 +41FC +0104 +ENDCHAR +STARTCHAR uni7EFB +ENCODING 32507 +BBX 15 16 0 -2 +BITMAP +1040 +1248 +2150 +2040 +4BF8 +F880 +17FC +2110 +4208 +FDF4 +4912 +0110 +1950 +E124 +4104 +00FC +ENDCHAR +STARTCHAR uni7EFC +ENCODING 32508 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2202 +4800 +F9FC +1000 +2000 +43FE +F820 +4128 +0124 +1A22 +E422 +40A0 +0040 +ENDCHAR +STARTCHAR uni7EFD +ENCODING 32509 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2202 +4C04 +F800 +13FE +2020 +4020 +F920 +413C +0120 +1AA0 +E260 +443E +0800 +ENDCHAR +STARTCHAR uni7EFE +ENCODING 32510 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2202 +4C04 +F9F8 +1108 +2108 +41F8 +F900 +4100 +01FC +1904 +E104 +41FC +0104 +ENDCHAR +STARTCHAR uni7EFF +ENCODING 32511 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +2008 +2008 +49F8 +F808 +1008 +23FE +4020 +FA22 +4174 +00A8 +1924 +E222 +40A0 +0040 +ENDCHAR +STARTCHAR uni7F00 +ENCODING 32512 +BBX 15 16 0 -2 +BITMAP +2000 +27BC +2084 +4294 +5108 +F294 +24A4 +2840 +4000 +F7BC +40A4 +02A4 +3128 +C290 +04A8 +0846 +ENDCHAR +STARTCHAR uni7F01 +ENCODING 32513 +BBX 14 16 0 -2 +BITMAP +1124 +1124 +2248 +2490 +4A48 +F924 +1124 +2000 +43FC +FA44 +4244 +03FC +1A44 +E244 +43FC +0204 +ENDCHAR +STARTCHAR uni7F02 +ENCODING 32514 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +23FE +2488 +44F8 +F820 +11FC +2124 +4124 +FDFC +4020 +03FE +1C20 +E020 +4020 +0020 +ENDCHAR +STARTCHAR uni7F03 +ENCODING 32515 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +213E +2122 +4FA2 +F122 +113E +23A2 +4362 +FD22 +493E +0122 +1922 +E122 +413E +0122 +ENDCHAR +STARTCHAR uni7F04 +ENCODING 32516 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +2010 +47FE +5410 +F410 +25D0 +2412 +4412 +F5D4 +4554 +0548 +35DA +C42A +0846 +1082 +ENDCHAR +STARTCHAR uni7F05 +ENCODING 32517 +BBX 15 16 0 -2 +BITMAP +1000 +17FE +2040 +2080 +4BFC +F294 +1294 +22F4 +4294 +FA94 +42F4 +0294 +1A94 +E294 +43FC +0204 +ENDCHAR +STARTCHAR uni7F06 +ENCODING 32518 +BBX 15 16 0 -2 +BITMAP +1090 +1290 +229E +22A8 +4AC4 +F880 +11FC +2104 +4124 +F924 +4124 +0154 +1850 +E090 +4112 +060E +ENDCHAR +STARTCHAR uni7F07 +ENCODING 32519 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2104 +2104 +49FC +F904 +1104 +21FC +4000 +FBFE +4020 +0120 +193C +E120 +42A0 +047E +ENDCHAR +STARTCHAR uni7F08 +ENCODING 32520 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +2710 +4510 +5514 +F752 +2552 +2592 +4710 +F514 +4508 +0710 +3520 +C040 +0080 +0300 +ENDCHAR +STARTCHAR uni7F09 +ENCODING 32521 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +2108 +2108 +49F8 +F000 +17FE +2108 +41F8 +F908 +41F8 +0108 +193E +E7C8 +4008 +0008 +ENDCHAR +STARTCHAR uni7F0A +ENCODING 32522 +BBX 15 15 0 -1 +BITMAP +1000 +11F8 +2108 +2108 +49F8 +F908 +1108 +21F8 +4000 +FBFC +4294 +0294 +1A94 +E294 +47FE +ENDCHAR +STARTCHAR uni7F0B +ENCODING 32523 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +21FC +2524 +45FC +F820 +13FE +2000 +41FC +FD04 +4124 +0124 +1D24 +E050 +4088 +0304 +ENDCHAR +STARTCHAR uni7F0C +ENCODING 32524 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +2124 +2124 +49FC +F924 +1124 +21FC +4000 +F840 +4024 +02A2 +1A8A +E488 +4078 +ENDCHAR +STARTCHAR uni7F0D +ENCODING 32525 +BBX 15 15 0 -1 +BITMAP +1008 +103C +21E0 +2020 +4820 +FBFE +1124 +2124 +47FE +F924 +4124 +03FE +1820 +E020 +43FE +ENDCHAR +STARTCHAR uni7F0E +ENCODING 32526 +BBX 15 16 0 -2 +BITMAP +1080 +1338 +2228 +2228 +4BA8 +FA46 +1200 +227C +43A4 +FA24 +4228 +03A8 +1E10 +E228 +4244 +0282 +ENDCHAR +STARTCHAR uni7F0F +ENCODING 32527 +BBX 15 16 0 -2 +BITMAP +1100 +11FE +2110 +2210 +4AFE +F292 +1692 +22FE +4292 +FA92 +42FE +0290 +1A50 +E220 +4258 +0286 +ENDCHAR +STARTCHAR uni7F10 +ENCODING 32528 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +21FC +2104 +49FC +F904 +11FC +2020 +4032 +FBB4 +40A8 +0128 +1924 +E224 +44A2 +0040 +ENDCHAR +STARTCHAR uni7F11 +ENCODING 32529 +BBX 15 16 0 -2 +BITMAP +1100 +1178 +2108 +2208 +4AFE +F640 +1A40 +227C +4290 +FA10 +42FE +0210 +1A28 +E228 +4244 +0282 +ENDCHAR +STARTCHAR uni7F12 +ENCODING 32530 +BBX 15 15 0 -1 +BITMAP +1010 +1220 +217C +2544 +4444 +F87C +1340 +2140 +417C +FD44 +4144 +017C +1D44 +E280 +447E +ENDCHAR +STARTCHAR uni7F13 +ENCODING 32531 +BBX 15 16 0 -2 +BITMAP +103C +17C0 +2244 +2128 +4800 +FBFC +1080 +2080 +47FE +F900 +41F8 +0288 +1A50 +E420 +48D8 +0306 +ENDCHAR +STARTCHAR uni7F14 +ENCODING 32532 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +21FC +2400 +4488 +F850 +13FE +2222 +4424 +FDFC +4124 +0124 +1D34 +E128 +4020 +0020 +ENDCHAR +STARTCHAR uni7F15 +ENCODING 32533 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +20A8 +2020 +4BFE +F8A8 +1124 +2202 +4040 +FBFE +4088 +0108 +1990 +E060 +4198 +0604 +ENDCHAR +STARTCHAR uni7F16 +ENCODING 32534 +BBX 14 16 0 -2 +BITMAP +1080 +1040 +23FC +2204 +4A04 +FBFC +1200 +2200 +43FC +FB54 +4354 +05FC +1D54 +E554 +4944 +010C +ENDCHAR +STARTCHAR uni7F17 +ENCODING 32535 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +2204 +23FC +4A20 +FBFE +1210 +228A +4306 +F800 +43FC +0204 +1BFC +E204 +43FC +0204 +ENDCHAR +STARTCHAR uni7F18 +ENCODING 32536 +BBX 15 16 0 -2 +BITMAP +1080 +10FC +2104 +21F8 +4808 +FBFE +1040 +20A2 +4334 +F858 +4094 +0334 +1852 +E090 +4350 +0020 +ENDCHAR +STARTCHAR uni7F19 +ENCODING 32537 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +2090 +2294 +4998 +F890 +17FE +2000 +41F8 +F908 +4108 +01F8 +1908 +E108 +41F8 +0108 +ENDCHAR +STARTCHAR uni7F1A +ENCODING 32538 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +27FE +2040 +4BFC +FA44 +13FC +2244 +43FC +FA44 +4008 +03FE +1908 +E088 +40A8 +0010 +ENDCHAR +STARTCHAR uni7F1B +ENCODING 32539 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2200 +22FC +4A00 +FBFE +12A8 +2290 +42C8 +FA86 +4208 +03FE +1A88 +E448 +4408 +0818 +ENDCHAR +STARTCHAR uni7F1C +ENCODING 32540 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +27FC +2040 +4BF8 +FA08 +13F8 +2208 +43F8 +FA08 +43F8 +0208 +1FFE +E110 +4208 +0404 +ENDCHAR +STARTCHAR uni7F1D +ENCODING 32541 +BBX 15 16 0 -2 +BITMAP +1020 +147C +2284 +2148 +4830 +F8CE +1610 +227C +4210 +FA7C +4210 +02FE +1A10 +E210 +45FE +0800 +ENDCHAR +STARTCHAR uni7F1E +ENCODING 32542 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2000 +49FC +F904 +17FE +2104 +41FC +F852 +4094 +0188 +1A88 +E4A4 +40C2 +0080 +ENDCHAR +STARTCHAR uni7F1F +ENCODING 32543 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2000 +49FC +F904 +11FC +2000 +43FE +FA02 +42FA +028A +1AFA +E202 +420A +0204 +ENDCHAR +STARTCHAR uni7F20 +ENCODING 32544 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +4400 +55FC +F524 +2524 +25FC +4524 +F524 +45FC +0420 +35FC +C820 +0820 +13FE +ENDCHAR +STARTCHAR uni7F21 +ENCODING 32545 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2000 +4954 +F924 +1154 +21FC +4020 +FBFE +4242 +0292 +1AFA +E20A +4202 +0206 +ENDCHAR +STARTCHAR uni7F22 +ENCODING 32546 +BBX 15 15 0 -1 +BITMAP +1104 +1084 +2088 +2000 +4BFE +F800 +1088 +2104 +4202 +F9FC +4154 +0154 +1954 +E154 +47FE +ENDCHAR +STARTCHAR uni7F23 +ENCODING 32547 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +2000 +25FE +4450 +F9FC +1054 +23FE +4054 +FDFC +4050 +00D8 +1D54 +E252 +4050 +0050 +ENDCHAR +STARTCHAR uni7F24 +ENCODING 32548 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +23FE +2202 +4C14 +F9E0 +1100 +2100 +41FC +F910 +4110 +07FE +1800 +E090 +4108 +0204 +ENDCHAR +STARTCHAR uni7F25 +ENCODING 32549 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2050 +25FC +4554 +F954 +11FC +2000 +41FC +FC00 +43FE +0020 +1CA8 +E124 +42A2 +0040 +ENDCHAR +STARTCHAR uni7F26 +ENCODING 32550 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +2108 +21F8 +4908 +F9F8 +1000 +23FC +4294 +FBFC +4000 +01F8 +1890 +E060 +4198 +0606 +ENDCHAR +STARTCHAR uni7F27 +ENCODING 32551 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2124 +25FC +4524 +F9FC +1040 +2088 +41F0 +FC20 +4044 +03FE +1C22 +E124 +4222 +0060 +ENDCHAR +STARTCHAR uni7F28 +ENCODING 32552 +BBX 15 16 0 -2 +BITMAP +2000 +2FBE +28A2 +4AAA +5AAA +FAAA +2514 +28A2 +4080 +F7FE +4110 +0210 +33A0 +C060 +0198 +0E04 +ENDCHAR +STARTCHAR uni7F29 +ENCODING 32553 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +27FE +4402 +5100 +F1FE +2210 +2620 +4A7C +F244 +4244 +027C +3244 +C244 +027C +0244 +ENDCHAR +STARTCHAR uni7F2A +ENCODING 32554 +BBX 15 16 0 -2 +BITMAP +1000 +17BC +2084 +24A4 +4A94 +F4A4 +1050 +2188 +4626 +F8C0 +4310 +0064 +1B88 +E030 +40C0 +0700 +ENDCHAR +STARTCHAR uni7F2B +ENCODING 32555 +BBX 15 16 0 -2 +BITMAP +1124 +1248 +2124 +2400 +45FC +F924 +11FC +2124 +41FC +FC20 +43FE +0070 +1CA8 +E124 +4622 +0020 +ENDCHAR +STARTCHAR uni7F2C +ENCODING 32556 +BBX 15 16 0 -2 +BITMAP +2200 +22FE +2210 +4FA0 +527C +F244 +2754 +2054 +4054 +F754 +4554 +0554 +3528 +C724 +0542 +0082 +ENDCHAR +STARTCHAR uni7F2D +ENCODING 32557 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2050 +4A8A +F904 +13FE +2504 +41FC +F904 +41FC +0020 +1924 +E222 +44A2 +0040 +ENDCHAR +STARTCHAR uni7F2E +ENCODING 32558 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +23FE +2020 +49FC +F820 +13FE +2124 +40A8 +FBFE +4000 +01FC +1904 +E104 +41FC +0104 +ENDCHAR +STARTCHAR uni7F2F +ENCODING 32559 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +2000 +23FE +4A22 +FAAA +1272 +2222 +43FE +F800 +41FC +0104 +19FC +E104 +41FC +0104 +ENDCHAR +STARTCHAR uni7F30 +ENCODING 32560 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2000 +25FC +4524 +F9FC +1124 +23FE +4000 +FDFC +4124 +01FC +1D24 +E1FC +4000 +03FE +ENDCHAR +STARTCHAR uni7F31 +ENCODING 32561 +BBX 15 16 0 -2 +BITMAP +1010 +14FE +2292 +22FE +4810 +F9FE +1000 +2EFE +4282 +FAFE +4280 +02FE +1A82 +E2FE +4500 +08FE +ENDCHAR +STARTCHAR uni7F32 +ENCODING 32562 +BBX 15 16 0 -2 +BITMAP +11FC +1104 +2104 +21FC +4800 +FBDE +1252 +2252 +43DE +F820 +47FE +0070 +18A8 +E124 +4622 +0020 +ENDCHAR +STARTCHAR uni7F33 +ENCODING 32563 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +2294 +2294 +4BFC +F800 +17FE +2000 +43FC +FA04 +43FC +00A2 +1914 +E308 +4D44 +0182 +ENDCHAR +STARTCHAR uni7F34 +ENCODING 32564 +BBX 15 16 0 -2 +BITMAP +2108 +2208 +27C8 +4450 +57DE +F464 +27D4 +2214 +4114 +F7D4 +4214 +03C8 +3248 +C454 +0554 +08A2 +ENDCHAR +STARTCHAR uni7F35 +ENCODING 32565 +BBX 15 16 0 -2 +BITMAP +2108 +2528 +27BE +4948 +57BE +F318 +25AA +2946 +4000 +F3F8 +4208 +0248 +3248 +C0B0 +0108 +0604 +ENDCHAR +STARTCHAR uni7F36 +ENCODING 32566 +BBX 13 14 2 0 +BITMAP +1000 +1000 +1000 +3FF0 +4200 +8200 +0200 +FFF8 +0200 +0200 +4210 +4210 +4210 +7FF0 +ENDCHAR +STARTCHAR uni7F37 +ENCODING 32567 +BBX 15 16 0 -2 +BITMAP +2000 +2000 +3F3E +4822 +8822 +0822 +FFA2 +0822 +0822 +4922 +492A +4924 +4F20 +7920 +0020 +0020 +ENDCHAR +STARTCHAR uni7F38 +ENCODING 32568 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +7C20 +9020 +1020 +1020 +FE20 +1020 +1020 +5420 +5420 +5420 +5420 +7C20 +03FE +ENDCHAR +STARTCHAR uni7F39 +ENCODING 32569 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +1FF8 +2100 +4100 +0100 +FFFE +0100 +2108 +2108 +2108 +3FF8 +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni7F3A +ENCODING 32570 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +7C20 +91FC +1024 +1024 +FE24 +1024 +11FE +5420 +5450 +5450 +5488 +7D04 +0202 +ENDCHAR +STARTCHAR uni7F3B +ENCODING 32571 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +7C40 +9040 +1040 +1078 +FE88 +1088 +10C8 +54A8 +5488 +5488 +549A +7CEA +0386 +ENDCHAR +STARTCHAR uni7F3C +ENCODING 32572 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +7C80 +91FE +1102 +1224 +FC28 +1020 +1020 +5420 +5450 +5450 +5488 +7D04 +0202 +ENDCHAR +STARTCHAR uni7F3D +ENCODING 32573 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +3C20 +5020 +91FE +1070 +FEA8 +10A8 +1124 +5524 +5622 +54F8 +5C20 +6420 +0420 +0020 +ENDCHAR +STARTCHAR uni7F3E +ENCODING 32574 +BBX 15 15 1 -1 +BITMAP +2104 +2084 +7888 +93FE +1088 +1088 +FC88 +1088 +13FE +5488 +5488 +5488 +5508 +7D08 +0208 +ENDCHAR +STARTCHAR uni7F3F +ENCODING 32575 +BBX 15 16 0 -2 +BITMAP +2008 +201C +3CE0 +5080 +9080 +10FE +FE80 +1080 +10BC +54A4 +54A4 +54A4 +5CA4 +653C +0524 +0200 +ENDCHAR +STARTCHAR uni7F40 +ENCODING 32576 +BBX 15 16 0 -2 +BITMAP +2050 +2050 +3C50 +5152 +90D4 +1058 +FE50 +1058 +10D4 +5552 +5650 +5450 +5C92 +6492 +0512 +020E +ENDCHAR +STARTCHAR uni7F41 +ENCODING 32577 +BBX 15 16 0 -2 +BITMAP +4000 +43FE +7A02 +A28A +2252 +23FE +FA22 +2222 +22AA +AAAA +AAAA +AAFA +BA02 +CA02 +020A +0204 +ENDCHAR +STARTCHAR uni7F42 +ENCODING 32578 +BBX 15 16 0 -2 +BITMAP +3EF8 +2288 +2AA8 +2AA8 +2AA8 +1450 +2288 +4904 +1FF8 +2100 +0100 +FFFE +0100 +2108 +3FF8 +0008 +ENDCHAR +STARTCHAR uni7F43 +ENCODING 32579 +BBX 15 15 1 -1 +BITMAP +0820 +29A4 +2AA8 +1450 +2288 +7FFC +4004 +5004 +1FF0 +2100 +0100 +FFFE +0100 +2108 +3FF8 +ENDCHAR +STARTCHAR uni7F44 +ENCODING 32580 +BBX 15 15 1 -1 +BITMAP +0800 +FF78 +0848 +7E8E +0000 +7EF8 +4A48 +7E30 +504E +9FF8 +2100 +FFFE +0100 +2108 +3FF8 +ENDCHAR +STARTCHAR uni7F45 +ENCODING 32581 +BBX 15 15 1 -1 +BITMAP +4020 +403C +7820 +A3FE +2242 +2278 +FBC2 +227E +2204 +AA78 +AB24 +AAA8 +ABFE +FA20 +0460 +ENDCHAR +STARTCHAR uni7F46 +ENCODING 32582 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +3D24 +53FE +9124 +11FC +FE00 +11FC +1104 +55FC +5504 +55FC +5D04 +65FC +0488 +0104 +ENDCHAR +STARTCHAR uni7F47 +ENCODING 32583 +BBX 15 15 1 -1 +BITMAP +4178 +4204 +7DFA +A0A0 +23FC +22A4 +FB3C +2204 +23FC +AA04 +ABFC +A808 +AFFE +F908 +0098 +ENDCHAR +STARTCHAR uni7F48 +ENCODING 32584 +BBX 15 16 0 -2 +BITMAP +4000 +43FE +7850 +A3FE +2252 +23FE +F800 +21FC +2104 +A9FC +A904 +A9FC +B820 +CBFE +0020 +0020 +ENDCHAR +STARTCHAR uni7F49 +ENCODING 32585 +BBX 15 16 0 -2 +BITMAP +4124 +40A8 +7BFE +A202 +20F8 +2088 +F8F8 +200C +21F0 +A820 +A9FC +A820 +BBFE +C820 +00A0 +0040 +ENDCHAR +STARTCHAR uni7F4A +ENCODING 32586 +BBX 15 16 0 -2 +BITMAP +0878 +7F48 +0848 +3E86 +2B78 +3E48 +2A28 +FF90 +4928 +7F46 +2000 +3FF8 +4100 +FFFE +2108 +3FF8 +ENDCHAR +STARTCHAR uni7F4B +ENCODING 32587 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +1048 +24FE +7990 +10FC +2290 +7CFC +0890 +30FE +C880 +3FF8 +4100 +FFFE +2108 +3FF8 +ENDCHAR +STARTCHAR uni7F4C +ENCODING 32588 +BBX 13 14 2 -1 +BITMAP +FDF8 +8508 +FDF8 +8508 +FDF8 +4890 +A508 +3FF0 +4200 +0200 +FFF8 +0200 +4210 +7FF0 +ENDCHAR +STARTCHAR uni7F4D +ENCODING 32589 +BBX 15 14 1 -1 +BITMAP +0FE0 +0920 +0FE0 +0920 +7FFC +5454 +7C7C +5454 +7FFC +2100 +FFFE +0100 +2104 +3FFC +ENDCHAR +STARTCHAR uni7F4E +ENCODING 32590 +BBX 15 15 1 -1 +BITMAP +4000 +43F8 +7A08 +A7FC +2040 +2FFE +F842 +2B5A +2040 +23F8 +A800 +ABFC +A890 +F8B8 +03C4 +ENDCHAR +STARTCHAR uni7F4F +ENCODING 32591 +BBX 15 15 1 -1 +BITMAP +4040 +407C +7840 +A3FE +2242 +23F8 +FE42 +22FE +22A4 +AAFC +AAA4 +ABFC +AD54 +F954 +03FE +ENDCHAR +STARTCHAR uni7F50 +ENCODING 32592 +BBX 15 15 1 -1 +BITMAP +4108 +4108 +77FE +A108 +27BC +24A4 +FFBC +2120 +23FC +AE20 +ABFC +AA20 +ABFC +FA20 +03FE +ENDCHAR +STARTCHAR uni7F51 +ENCODING 32593 +BBX 14 14 1 -1 +BITMAP +FFFC +8424 +8424 +8424 +A524 +94A4 +8844 +8844 +94A4 +9494 +A114 +C204 +8004 +801C +ENDCHAR +STARTCHAR uni7F52 +ENCODING 32594 +BBX 13 7 2 3 +BITMAP +FFF8 +8888 +8888 +8888 +8888 +8888 +FFF8 +ENDCHAR +STARTCHAR uni7F53 +ENCODING 32595 +BBX 11 8 2 5 +BITMAP +FFE0 +8020 +9120 +8A20 +8420 +8A20 +9120 +8020 +ENDCHAR +STARTCHAR uni7F54 +ENCODING 32596 +BBX 13 14 2 -1 +BITMAP +FFF8 +8848 +8448 +8488 +BFE8 +8208 +8208 +9FE8 +9008 +9008 +9008 +8FC8 +8008 +8038 +ENDCHAR +STARTCHAR uni7F55 +ENCODING 32597 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +4444 +0840 +303E +C000 +0000 +3FF8 +0100 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7F56 +ENCODING 32598 +BBX 15 14 0 -1 +BITMAP +3FF8 +2448 +2448 +2448 +3FF8 +0100 +0280 +0440 +0820 +3018 +C206 +0100 +0080 +0080 +ENDCHAR +STARTCHAR uni7F57 +ENCODING 32599 +BBX 13 15 0 -2 +BITMAP +3FF8 +2448 +2448 +2448 +3FF8 +0200 +0400 +0FF0 +1010 +6820 +0440 +0280 +0300 +1C00 +E000 +ENDCHAR +STARTCHAR uni7F58 +ENCODING 32600 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +FFFE +0100 +0380 +0340 +0520 +1918 +E106 +0100 +0100 +ENDCHAR +STARTCHAR uni7F59 +ENCODING 32601 +BBX 15 15 0 -2 +BITMAP +7FFE +4002 +8824 +1010 +2108 +0100 +0100 +FFFE +0380 +0540 +0920 +1110 +2108 +C106 +0100 +ENDCHAR +STARTCHAR uni7F5A +ENCODING 32602 +BBX 14 15 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +2008 +1088 +0088 +F088 +1088 +1088 +1488 +1808 +1028 +0010 +ENDCHAR +STARTCHAR uni7F5B +ENCODING 32603 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +0078 +1FA0 +1220 +1220 +1210 +1290 +1248 +22A8 +4324 +8202 +ENDCHAR +STARTCHAR uni7F5C +ENCODING 32604 +BBX 15 14 0 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0200 +0100 +7FFC +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni7F5D +ENCODING 32605 +BBX 15 14 0 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1FF0 +1010 +1010 +FFFE +ENDCHAR +STARTCHAR uni7F5E +ENCODING 32606 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +7FFC +0000 +3FF0 +0020 +0640 +0180 +FFFE +0282 +0484 +0880 +3080 +C280 +0100 +ENDCHAR +STARTCHAR uni7F5F +ENCODING 32607 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0100 +0100 +FFFE +0100 +0100 +1FF0 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7F60 +ENCODING 32608 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +3FF8 +2008 +3FF8 +2080 +3FFC +2040 +2040 +3E32 +E00C +ENDCHAR +STARTCHAR uni7F61 +ENCODING 32609 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +3FF8 +0100 +0100 +0100 +11F0 +1100 +1100 +1100 +FFFE +ENDCHAR +STARTCHAR uni7F62 +ENCODING 32610 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +0400 +0820 +1010 +3FF8 +1008 +ENDCHAR +STARTCHAR uni7F63 +ENCODING 32611 +BBX 13 14 2 -1 +BITMAP +FFF8 +8888 +8888 +FFF8 +0200 +3FE0 +0200 +FFF8 +0200 +0200 +3FF0 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni7F64 +ENCODING 32612 +BBX 14 14 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0810 +0420 +7FF8 +0108 +3FF8 +2100 +3FFC +0504 +1904 +E118 +ENDCHAR +STARTCHAR uni7F65 +ENCODING 32613 +BBX 13 16 1 -2 +BITMAP +FFF8 +8888 +FFF8 +0000 +3FE0 +2020 +3FE0 +0000 +7FF0 +4010 +7FF0 +4010 +7FF0 +4010 +4050 +4020 +ENDCHAR +STARTCHAR uni7F66 +ENCODING 32614 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +7FFC +0000 +00F8 +7F00 +2210 +1120 +3FE0 +0040 +0080 +FFFE +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni7F67 +ENCODING 32615 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0820 +0820 +FFFE +28A8 +2CA8 +2AA8 +4924 +4924 +8A22 +0820 +ENDCHAR +STARTCHAR uni7F68 +ENCODING 32616 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +7FFC +0100 +FFFE +0440 +0920 +3FF8 +D114 +1FF0 +1110 +1FF2 +0102 +00FE +ENDCHAR +STARTCHAR uni7F69 +ENCODING 32617 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +7FFC +0100 +01FC +0100 +1FF8 +1008 +1FF8 +1008 +1FF8 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni7F6A +ENCODING 32618 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +0440 +FC7C +0440 +FC7C +0440 +1C7E +E840 +1040 +6040 +ENDCHAR +STARTCHAR uni7F6B +ENCODING 32619 +BBX 15 15 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0410 +3F90 +0410 +0410 +7FD8 +0414 +3F92 +0410 +0410 +07D0 +F810 +ENDCHAR +STARTCHAR uni7F6C +ENCODING 32620 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +7FFC +0000 +3EF8 +0208 +14D0 +0820 +1450 +6288 +3EF8 +0288 +1450 +0820 +3458 +C286 +ENDCHAR +STARTCHAR uni7F6D +ENCODING 32621 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0090 +0088 +FFFE +0080 +3E88 +2248 +3E50 +0022 +0E52 +F18C +ENDCHAR +STARTCHAR uni7F6E +ENCODING 32622 +BBX 15 15 1 -1 +BITMAP +7FFC +4444 +7FFC +0080 +FFFE +0100 +0FF0 +4810 +4FF0 +4810 +4FF0 +4810 +4FF0 +4000 +7FFE +ENDCHAR +STARTCHAR uni7F6F +ENCODING 32623 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +7FFC +0100 +3FF8 +0820 +0440 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni7F70 +ENCODING 32624 +BBX 14 14 1 -1 +BITMAP +7FFC +4444 +7FFC +0000 +7E04 +0044 +FF44 +0044 +7E44 +0044 +7E44 +4204 +4204 +7E1C +ENDCHAR +STARTCHAR uni7F71 +ENCODING 32625 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +0100 +FFFE +0100 +3FF8 +2448 +2288 +2FE8 +2108 +3FF8 +2108 +2128 +2010 +ENDCHAR +STARTCHAR uni7F72 +ENCODING 32626 +BBX 15 14 1 -1 +BITMAP +3FF8 +2448 +3FF8 +0104 +3FF8 +0110 +FFFE +0080 +0FF8 +F808 +0FF8 +0808 +0808 +0FF8 +ENDCHAR +STARTCHAR uni7F73 +ENCODING 32627 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni7F74 +ENCODING 32628 +BBX 15 16 0 -2 +BITMAP +3FF8 +2448 +2448 +3FF8 +0100 +0100 +3FF8 +0100 +FFFE +0400 +0820 +1FF0 +0010 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uni7F75 +ENCODING 32629 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +7FFC +0000 +3FFC +2080 +3FF8 +2080 +3FF8 +2080 +3FFE +4922 +4492 +8004 +ENDCHAR +STARTCHAR uni7F76 +ENCODING 32630 +BBX 13 16 1 -2 +BITMAP +FFF8 +8888 +8888 +FFF8 +0800 +F3F8 +8088 +9088 +A8A8 +C510 +7FF0 +4210 +7FF0 +4210 +7FF0 +4010 +ENDCHAR +STARTCHAR uni7F77 +ENCODING 32631 +BBX 15 15 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +1048 +2670 +F942 +0042 +7E3E +4240 +7E4C +4270 +7E42 +4242 +463E +ENDCHAR +STARTCHAR uni7F78 +ENCODING 32632 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +7FFC +0000 +7808 +0008 +FDFE +0008 +7888 +0048 +7848 +4808 +4808 +7838 +ENDCHAR +STARTCHAR uni7F79 +ENCODING 32633 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +2110 +2220 +B7FE +AA20 +A3FC +A220 +23FC +2220 +2220 +23FE +ENDCHAR +STARTCHAR uni7F7A +ENCODING 32634 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +7FFC +1110 +2220 +1110 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +7FFC +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni7F7B +ENCODING 32635 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +3F08 +2108 +3F08 +20FE +2E08 +2048 +3F28 +4428 +5508 +A4A8 +0C10 +ENDCHAR +STARTCHAR uni7F7C +ENCODING 32636 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +7FFC +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +0920 +FFFE +0920 +3FF8 +0100 +7FFC +0100 +ENDCHAR +STARTCHAR uni7F7D +ENCODING 32637 +BBX 14 15 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +7FC4 +5484 +6524 +4A24 +71A4 +4424 +54A4 +A504 +8A04 +319C +ENDCHAR +STARTCHAR uni7F7E +ENCODING 32638 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +7FFC +0000 +0BE0 +1010 +3FF8 +692C +A54A +3FF8 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7F7F +ENCODING 32639 +BBX 15 15 0 -2 +BITMAP +7FFC +4444 +7FFC +0100 +3FF8 +0440 +FFFE +1110 +1FF0 +1110 +1FF0 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni7F80 +ENCODING 32640 +BBX 15 16 0 -2 +BITMAP +3FF8 +2AA8 +2448 +2AA8 +0000 +FFFE +0280 +3EF8 +2288 +3EF8 +0280 +3FF8 +2108 +3FF8 +2108 +3FF8 +ENDCHAR +STARTCHAR uni7F81 +ENCODING 32641 +BBX 14 15 0 -2 +BITMAP +7FFC +4444 +7FFC +2200 +7F78 +2208 +3E48 +0848 +7F7C +4904 +7F04 +08F4 +FF04 +0814 +0808 +ENDCHAR +STARTCHAR uni7F82 +ENCODING 32642 +BBX 14 14 1 -1 +BITMAP +7FFC +4444 +7FFC +1000 +20FC +4484 +28FC +1000 +24FC +FA84 +12FC +5484 +92FC +1084 +ENDCHAR +STARTCHAR uni7F83 +ENCODING 32643 +BBX 15 15 1 -1 +BITMAP +7FFC +4444 +7FFC +0820 +FFFE +1010 +1FF0 +1010 +1FF0 +0200 +FFFE +0920 +7FFC +1110 +1130 +ENDCHAR +STARTCHAR uni7F84 +ENCODING 32644 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +1020 +103C +2420 +7DFC +0904 +11FC +2504 +7DFC +0020 +55FE +5420 +8020 +ENDCHAR +STARTCHAR uni7F85 +ENCODING 32645 +BBX 15 15 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +1024 +2448 +48FC +3190 +24FC +4E90 +F190 +14FC +3290 +D090 +10FE +ENDCHAR +STARTCHAR uni7F86 +ENCODING 32646 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +7FFC +2040 +424C +FF70 +4242 +7E3E +4240 +7E78 +4242 +463E +2444 +C222 +ENDCHAR +STARTCHAR uni7F87 +ENCODING 32647 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +7FFC +4820 +FDFC +4850 +7888 +11FE +7C04 +54F4 +7C94 +10F4 +FE04 +101C +ENDCHAR +STARTCHAR uni7F88 +ENCODING 32648 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +7FFC +4800 +FDFE +4910 +79FC +1110 +7DFC +5510 +7DFE +1002 +FF2A +1206 +ENDCHAR +STARTCHAR uni7F89 +ENCODING 32649 +BBX 15 16 0 -2 +BITMAP +7FFC +4444 +4444 +7FFC +0000 +2108 +2390 +4824 +73B8 +2010 +4BA4 +783E +0388 +AAAC +ABCA +8298 +ENDCHAR +STARTCHAR uni7F8A +ENCODING 32650 +BBX 15 15 1 -1 +BITMAP +1010 +0810 +0820 +7FFC +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7F8B +ENCODING 32651 +BBX 15 16 0 -2 +BITMAP +0920 +0920 +0920 +F93E +0920 +0920 +0820 +0100 +7FFC +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7F8C +ENCODING 32652 +BBX 15 15 1 -1 +BITMAP +0820 +0420 +0440 +7FFC +0100 +3FF8 +0100 +0100 +FFFE +0440 +0440 +0440 +0842 +1042 +E03E +ENDCHAR +STARTCHAR uni7F8D +ENCODING 32653 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0820 +3018 +C826 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni7F8E +ENCODING 32654 +BBX 15 15 1 -1 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +0100 +7FFC +0100 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7F8F +ENCODING 32655 +BBX 15 16 0 -2 +BITMAP +2204 +1204 +1408 +FF90 +0820 +0844 +7F04 +0808 +0810 +FFA2 +0842 +0804 +1008 +1010 +2060 +C180 +ENDCHAR +STARTCHAR uni7F90 +ENCODING 32656 +BBX 15 15 1 -1 +BITMAP +0820 +F83E +0820 +0100 +3FF8 +0100 +0100 +FFFE +0200 +07F0 +1810 +6020 +00C0 +0730 +F80E +ENDCHAR +STARTCHAR uni7F91 +ENCODING 32657 +BBX 15 15 1 -1 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +0200 +07F0 +1810 +6020 +0040 +0180 +0E60 +F01E +ENDCHAR +STARTCHAR uni7F92 +ENCODING 32658 +BBX 15 16 0 -2 +BITMAP +4410 +2450 +2850 +FE50 +1088 +1088 +7D04 +12FA +1048 +FE48 +1048 +1048 +2088 +2088 +4128 +8210 +ENDCHAR +STARTCHAR uni7F93 +ENCODING 32659 +BBX 15 16 0 -2 +BITMAP +4400 +2400 +29FC +FD24 +1124 +1124 +7D24 +1124 +11FC +FD00 +1100 +1100 +2102 +2102 +40FE +8000 +ENDCHAR +STARTCHAR uni7F94 +ENCODING 32660 +BBX 15 15 1 -1 +BITMAP +0820 +0420 +0440 +7FFC +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0000 +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni7F95 +ENCODING 32661 +BBX 15 16 0 -2 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +0100 +0080 +1F00 +0104 +7D88 +0950 +1120 +2518 +C206 +ENDCHAR +STARTCHAR uni7F96 +ENCODING 32662 +BBX 15 15 1 -1 +BITMAP +4400 +24F8 +2888 +FC88 +1088 +1108 +7A0E +1000 +11F8 +1C88 +F088 +1050 +2020 +20D8 +4306 +ENDCHAR +STARTCHAR uni7F97 +ENCODING 32663 +BBX 15 15 1 -1 +BITMAP +0810 +0420 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +04A0 +04A8 +08A8 +08F4 +1082 +E07E +ENDCHAR +STARTCHAR uni7F98 +ENCODING 32664 +BBX 15 16 0 -2 +BITMAP +0104 +3C84 +2488 +2400 +27FE +3C20 +2420 +25FC +2420 +3C20 +27FE +2420 +2420 +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni7F99 +ENCODING 32665 +BBX 15 16 0 -2 +BITMAP +0820 +0440 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +0100 +1110 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7F9A +ENCODING 32666 +BBX 15 15 1 -1 +BITMAP +4420 +2420 +2850 +FE88 +1104 +10FA +7C00 +1000 +11FE +1E22 +F022 +2022 +202E +4020 +8020 +ENDCHAR +STARTCHAR uni7F9B +ENCODING 32667 +BBX 15 16 0 -2 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +0440 +7FF8 +0448 +3FF8 +2440 +3FFC +0844 +1054 +2048 +ENDCHAR +STARTCHAR uni7F9C +ENCODING 32668 +BBX 15 15 1 -1 +BITMAP +4420 +2420 +29FE +FF02 +1102 +1000 +7DFE +1010 +1010 +1E10 +F010 +1010 +2010 +2010 +4070 +ENDCHAR +STARTCHAR uni7F9D +ENCODING 32669 +BBX 15 15 1 -1 +BITMAP +441C +25F0 +2910 +FD10 +1110 +11FE +7910 +1110 +1110 +1D10 +F1D0 +2710 +200A +47EA +8004 +ENDCHAR +STARTCHAR uni7F9E +ENCODING 32670 +BBX 15 15 1 -1 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +1000 +17F0 +2110 +2110 +4FFC +8110 +0110 +3FFE +ENDCHAR +STARTCHAR uni7F9F +ENCODING 32671 +BBX 15 16 0 -2 +BITMAP +4400 +25FC +2808 +FC10 +1030 +1048 +7C84 +1302 +1000 +FDFC +1020 +1020 +2020 +2020 +43FE +8000 +ENDCHAR +STARTCHAR uni7FA0 +ENCODING 32672 +BBX 15 16 0 -2 +BITMAP +4420 +2420 +2BFE +FC20 +11FC +1024 +7DFC +1120 +11FE +FC22 +102A +1054 +2050 +2088 +4104 +8202 +ENDCHAR +STARTCHAR uni7FA1 +ENCODING 32673 +BBX 15 16 0 -2 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +4080 +2080 +09FC +1204 +2448 +E040 +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni7FA2 +ENCODING 32674 +BBX 15 16 0 -2 +BITMAP +4414 +2412 +2810 +FDFE +1010 +1090 +7C92 +1092 +13F2 +FC94 +1094 +1088 +208A +211A +4126 +8242 +ENDCHAR +STARTCHAR uni7FA3 +ENCODING 32675 +BBX 15 15 1 -1 +BITMAP +0200 +3FF0 +0410 +FFFE +0810 +1FF8 +6808 +0FF8 +0440 +3FF8 +0100 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni7FA4 +ENCODING 32676 +BBX 15 15 1 -1 +BITMAP +0044 +7E24 +1228 +12FE +FF10 +1210 +1210 +7E7C +2010 +7E10 +A210 +22FE +2210 +3E10 +0010 +ENDCHAR +STARTCHAR uni7FA5 +ENCODING 32677 +BBX 15 16 0 -2 +BITMAP +4400 +25FE +2800 +FC92 +1124 +1248 +7D24 +1092 +1000 +FDFE +1020 +1020 +2020 +2020 +43FE +8000 +ENDCHAR +STARTCHAR uni7FA6 +ENCODING 32678 +BBX 15 16 0 -2 +BITMAP +4420 +2410 +29FE +FD02 +1204 +10F8 +7C00 +1000 +11FE +FC50 +1050 +1050 +2092 +2092 +410E +8200 +ENDCHAR +STARTCHAR uni7FA7 +ENCODING 32679 +BBX 15 16 0 -2 +BITMAP +4440 +2440 +2888 +FD04 +13FE +1002 +7C88 +1144 +1242 +FCF8 +1188 +1250 +2020 +2050 +4188 +8606 +ENDCHAR +STARTCHAR uni7FA8 +ENCODING 32680 +BBX 15 15 1 -1 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +0100 +FFFE +2080 +10FC +C128 +2A20 +1050 +2088 +C306 +ENDCHAR +STARTCHAR uni7FA9 +ENCODING 32681 +BBX 14 15 2 -1 +BITMAP +1020 +0840 +7FF0 +0200 +3FE0 +0200 +FFF8 +0D20 +7110 +1080 +FFF8 +1088 +FE50 +1064 +7398 +ENDCHAR +STARTCHAR uni7FAA +ENCODING 32682 +BBX 15 16 0 -2 +BITMAP +4440 +2420 +29FC +FD04 +1104 +11FC +7D04 +1104 +11FC +FD20 +1122 +1114 +2108 +2144 +4182 +8100 +ENDCHAR +STARTCHAR uni7FAB +ENCODING 32683 +BBX 15 16 0 -2 +BITMAP +4440 +2420 +29FE +FD02 +1204 +1050 +7C88 +1104 +1000 +FDFC +1020 +1020 +2020 +2020 +43FE +8000 +ENDCHAR +STARTCHAR uni7FAC +ENCODING 32684 +BBX 15 16 0 -2 +BITMAP +8808 +480C +500A +FBFE +2208 +2208 +FAE8 +220A +220A +FAEC +22AC +22A8 +22EA +421A +4226 +8442 +ENDCHAR +STARTCHAR uni7FAD +ENCODING 32685 +BBX 15 15 1 -1 +BITMAP +9040 +50A0 +6110 +F208 +2DF6 +2000 +F792 +2492 +26A4 +35A4 +E4C8 +26A4 +45A4 +4492 +8592 +ENDCHAR +STARTCHAR uni7FAE +ENCODING 32686 +BBX 15 15 1 -1 +BITMAP +0440 +7FFC +0100 +3FF8 +0100 +FFFE +2448 +C226 +1FF0 +0100 +3FF8 +0100 +FFFE +06C0 +783C +ENDCHAR +STARTCHAR uni7FAF +ENCODING 32687 +BBX 15 15 1 -1 +BITMAP +4400 +25F8 +2908 +FFF8 +1108 +1108 +7DF8 +1080 +10FE +1F22 +F122 +2352 +218A +41F2 +800C +ENDCHAR +STARTCHAR uni7FB0 +ENCODING 32688 +BBX 15 16 0 -2 +BITMAP +4420 +2524 +2924 +FD24 +11FC +1080 +7C80 +13FE +1090 +FD10 +1152 +1254 +22A8 +2428 +4844 +8082 +ENDCHAR +STARTCHAR uni7FB1 +ENCODING 32689 +BBX 15 16 0 -2 +BITMAP +4400 +25FE +2910 +FD20 +117C +1144 +7D7C +1144 +117C +FD10 +1110 +1154 +2152 +2292 +4250 +8420 +ENDCHAR +STARTCHAR uni7FB2 +ENCODING 32690 +BBX 15 15 1 -1 +BITMAP +0820 +0440 +3FFC +0100 +3FF8 +0100 +FFFE +0844 +FFFE +2A40 +7D44 +9028 +1C12 +042A +38C4 +ENDCHAR +STARTCHAR uni7FB3 +ENCODING 32691 +BBX 15 16 0 -2 +BITMAP +443C +27E0 +2924 +FCA8 +13FE +10A8 +7D24 +1202 +11FC +FD24 +1124 +11FC +2124 +2124 +41FC +8104 +ENDCHAR +STARTCHAR uni7FB4 +ENCODING 32692 +BBX 15 16 0 -2 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +4544 +2928 +7CFE +1010 +7C7C +1010 +FEFE +1010 +2010 +ENDCHAR +STARTCHAR uni7FB5 +ENCODING 32693 +BBX 15 16 0 -2 +BITMAP +4420 +25FC +2820 +FC88 +13FE +1088 +7DFC +1104 +11FC +FD04 +11FC +1104 +21FC +2088 +4104 +8202 +ENDCHAR +STARTCHAR uni7FB6 +ENCODING 32694 +BBX 15 15 1 -1 +BITMAP +8840 +4840 +57FE +F800 +23FC +2204 +FAF4 +2294 +22F4 +3A04 +E3FC +2108 +41F8 +4108 +87FE +ENDCHAR +STARTCHAR uni7FB7 +ENCODING 32695 +BBX 15 16 0 -2 +BITMAP +4420 +2420 +2850 +FC88 +1104 +12FA +7C00 +1000 +11DC +FD54 +1154 +11DC +2088 +2088 +4154 +8222 +ENDCHAR +STARTCHAR uni7FB8 +ENCODING 32696 +BBX 15 15 1 -1 +BITMAP +0100 +3FFC +2000 +3FF8 +0000 +1FF0 +1010 +1FF0 +7000 +5578 +7248 +5768 +7258 +574A +B286 +ENDCHAR +STARTCHAR uni7FB9 +ENCODING 32697 +BBX 15 15 1 -1 +BITMAP +0440 +7FFC +0100 +3FF8 +0100 +FFFE +2248 +C826 +7FFC +0100 +3FF8 +0100 +FFFE +06C0 +783C +ENDCHAR +STARTCHAR uni7FBA +ENCODING 32698 +BBX 15 16 0 -2 +BITMAP +8800 +49FC +5020 +FBFE +2222 +21AC +F820 +21AC +2000 +FBFE +2020 +21FC +2154 +4154 +4154 +810C +ENDCHAR +STARTCHAR uni7FBB +ENCODING 32699 +BBX 15 16 0 -2 +BITMAP +8820 +4BFE +5250 +FBFE +2252 +23FE +FA00 +23FE +2292 +FB48 +223A +2240 +22FC +4548 +4430 +89CE +ENDCHAR +STARTCHAR uni7FBC +ENCODING 32700 +BBX 15 16 0 -2 +BITMAP +3FFC +2004 +3FFC +2220 +2FF8 +2080 +27F0 +2080 +3FFC +2AA8 +3F7C +2410 +5F7C +4410 +BF7E +0810 +ENDCHAR +STARTCHAR uni7FBD +ENCODING 32701 +BBX 14 14 1 -1 +BITMAP +FDFC +0404 +0404 +8484 +4444 +2424 +0404 +0C0C +1414 +2424 +4444 +8584 +0404 +1C1C +ENDCHAR +STARTCHAR uni7FBE +ENCODING 32702 +BBX 15 15 0 -2 +BITMAP +EE00 +227C +2210 +AA10 +6610 +2210 +2210 +2610 +6A10 +B210 +2210 +2210 +2210 +AAFE +4400 +ENDCHAR +STARTCHAR uni7FBF +ENCODING 32703 +BBX 15 14 1 -1 +BITMAP +FEFE +0A0A +3232 +C246 +0E1A +3262 +C202 +0820 +0820 +FFFE +0820 +0820 +1020 +6020 +ENDCHAR +STARTCHAR uni7FC0 +ENCODING 32704 +BBX 15 16 0 -2 +BITMAP +0010 +EE10 +2210 +2210 +AAFE +6692 +2292 +2292 +2692 +6AFE +B292 +2210 +2210 +2210 +AA10 +4410 +ENDCHAR +STARTCHAR uni7FC1 +ENCODING 32705 +BBX 15 15 1 -1 +BITMAP +00C0 +0820 +3218 +C246 +0420 +09F0 +3E08 +0000 +7EFC +2244 +1224 +0E1C +3264 +C384 +0E1C +ENDCHAR +STARTCHAR uni7FC2 +ENCODING 32706 +BBX 15 16 0 -2 +BITMAP +0008 +EE28 +2228 +2228 +AA44 +6644 +2282 +237C +2624 +6A24 +B224 +2224 +2244 +2244 +AA94 +4508 +ENDCHAR +STARTCHAR uni7FC3 +ENCODING 32707 +BBX 15 15 1 -1 +BITMAP +1000 +13DE +1042 +FC42 +2042 +20C6 +295A +2842 +4842 +48C6 +514A +9442 +1442 +1A42 +62CE +ENDCHAR +STARTCHAR uni7FC4 +ENCODING 32708 +BBX 15 16 0 -2 +BITMAP +0010 +EE10 +2210 +22FE +AA10 +6610 +22FC +2244 +2644 +6A44 +B228 +2228 +2210 +2228 +AA44 +4482 +ENDCHAR +STARTCHAR uni7FC5 +ENCODING 32709 +BBX 15 15 1 -1 +BITMAP +1000 +13DE +1042 +FC42 +114A +1252 +FC42 +44C6 +454A +2A72 +2842 +1042 +28C6 +4600 +81FE +ENDCHAR +STARTCHAR uni7FC6 +ENCODING 32710 +BBX 15 14 1 -1 +BITMAP +FEFE +1212 +6666 +1A1A +E262 +0100 +7FE0 +0220 +0C22 +701E +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni7FC7 +ENCODING 32711 +BBX 14 15 1 -2 +BITMAP +FDF8 +4488 +2448 +3468 +C588 +0448 +0220 +FFFC +0400 +0FE0 +1420 +2240 +C180 +0660 +381C +ENDCHAR +STARTCHAR uni7FC8 +ENCODING 32712 +BBX 13 15 1 -2 +BITMAP +FBB8 +A888 +A888 +AAA8 +F998 +A888 +A888 +A898 +F9A8 +AAC8 +2088 +2088 +2088 +22A8 +2110 +ENDCHAR +STARTCHAR uni7FC9 +ENCODING 32713 +BBX 14 16 0 -2 +BITMAP +1000 +11DC +1044 +FC44 +1154 +30CC +3844 +5444 +524C +90D4 +1164 +7C44 +1044 +1044 +1154 +1088 +ENDCHAR +STARTCHAR uni7FCA +ENCODING 32714 +BBX 15 15 1 -1 +BITMAP +2000 +23DE +2042 +F842 +00C6 +494A +4A52 +4842 +4842 +50C6 +114A +1252 +1842 +E042 +01CE +ENDCHAR +STARTCHAR uni7FCB +ENCODING 32715 +BBX 15 16 0 -2 +BITMAP +0020 +EE10 +2210 +22FE +AA00 +6604 +2244 +2244 +2624 +6A24 +B228 +2228 +2208 +2210 +AAFE +4400 +ENDCHAR +STARTCHAR uni7FCC +ENCODING 32716 +BBX 15 14 1 -1 +BITMAP +7EFC +2244 +1224 +060C +0A14 +1224 +674C +0100 +3FF8 +0820 +0820 +0440 +0040 +FFFE +ENDCHAR +STARTCHAR uni7FCD +ENCODING 32717 +BBX 15 16 0 -2 +BITMAP +0010 +EE10 +2210 +22FE +AA92 +6694 +2290 +22FC +26A4 +6AA4 +B2A8 +22A8 +2290 +2328 +AA44 +4482 +ENDCHAR +STARTCHAR uni7FCE +ENCODING 32718 +BBX 15 15 1 -1 +BITMAP +1000 +11EE +2822 +2822 +4422 +BA66 +00AA +0022 +FE22 +2222 +2266 +22AA +2E22 +2022 +20E6 +ENDCHAR +STARTCHAR uni7FCF +ENCODING 32719 +BBX 15 14 1 -1 +BITMAP +FCFC +1414 +E4E4 +1C1C +E4E4 +0504 +06C0 +18B0 +E30E +1C40 +0190 +0E20 +00C0 +3F00 +ENDCHAR +STARTCHAR uni7FD0 +ENCODING 32720 +BBX 15 16 0 -2 +BITMAP +0010 +EE10 +2250 +2250 +AA7C +6690 +2310 +2210 +26FE +6A10 +B228 +2228 +2228 +2244 +AA44 +4482 +ENDCHAR +STARTCHAR uni7FD1 +ENCODING 32721 +BBX 14 16 0 -2 +BITMAP +0040 +EE40 +2280 +22FC +AB04 +6604 +22F4 +2294 +2694 +6A94 +B2F4 +2294 +2204 +2204 +AA28 +4410 +ENDCHAR +STARTCHAR uni7FD2 +ENCODING 32722 +BBX 14 14 1 -1 +BITMAP +7CFC +2444 +1424 +0C1C +3464 +CD8C +0200 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni7FD3 +ENCODING 32723 +BBX 14 16 0 -2 +BITMAP +1000 +11DC +1044 +FE44 +1154 +10CC +7C44 +0044 +004C +7CD4 +4564 +4444 +4444 +7C44 +4554 +0088 +ENDCHAR +STARTCHAR uni7FD4 +ENCODING 32724 +BBX 15 15 1 -1 +BITMAP +4400 +27DE +2842 +FC42 +1252 +114A +794A +1042 +1042 +1CC6 +F35A +2042 +2042 +4042 +81CE +ENDCHAR +STARTCHAR uni7FD5 +ENCODING 32725 +BBX 15 15 1 -1 +BITMAP +0380 +1C70 +E00E +0FE0 +0000 +1FF0 +1010 +1FF0 +0000 +FEFE +1212 +6666 +1A1A +6262 +0E0E +ENDCHAR +STARTCHAR uni7FD6 +ENCODING 32726 +BBX 14 16 0 -2 +BITMAP +1000 +11DC +2844 +2444 +4354 +80CC +7C44 +0044 +004C +7CD4 +4564 +4444 +4444 +7C44 +4554 +0088 +ENDCHAR +STARTCHAR uni7FD7 +ENCODING 32727 +BBX 15 16 0 -2 +BITMAP +1000 +10EE +3E22 +4222 +A4AA +1866 +1022 +2422 +C826 +1F6A +21B2 +D222 +0C22 +0822 +30AA +C044 +ENDCHAR +STARTCHAR uni7FD8 +ENCODING 32728 +BBX 15 16 0 -2 +BITMAP +2000 +21DC +FE44 +2444 +2954 +12CC +2A44 +C6CC +0154 +FC44 +2844 +2954 +288A +4802 +47FE +8000 +ENDCHAR +STARTCHAR uni7FD9 +ENCODING 32729 +BBX 15 16 0 -2 +BITMAP +1000 +92EE +9222 +9222 +FEAA +2066 +2022 +3E22 +4226 +426A +A4B2 +1422 +0822 +1022 +20AA +C044 +ENDCHAR +STARTCHAR uni7FDA +ENCODING 32730 +BBX 15 16 0 -2 +BITMAP +7EFC +2244 +1224 +1A34 +62C4 +0000 +7FFE +4202 +9FF4 +0400 +0900 +1FF0 +0100 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni7FDB +ENCODING 32731 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +11FE +2108 +2A90 +6860 +A898 +2B06 +2800 +2BDE +294A +2A52 +28C6 +235A +20C6 +ENDCHAR +STARTCHAR uni7FDC +ENCODING 32732 +BBX 15 15 0 -2 +BITMAP +7EFC +2244 +1224 +1A34 +62C4 +0204 +0100 +7FFC +0920 +0920 +1550 +2288 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni7FDD +ENCODING 32733 +BBX 15 16 0 -2 +BITMAP +1000 +08EE +7F22 +4122 +92AA +1066 +7F22 +1022 +1426 +246A +24B2 +2822 +4A22 +5122 +BFAA +1144 +ENDCHAR +STARTCHAR uni7FDE +ENCODING 32734 +BBX 15 16 0 -2 +BITMAP +0020 +EE10 +22FE +2200 +AA00 +667C +2244 +2244 +267C +6A10 +B254 +2252 +2292 +2210 +AA50 +4420 +ENDCHAR +STARTCHAR uni7FDF +ENCODING 32735 +BBX 15 14 1 -1 +BITMAP +FEFE +1212 +E6E6 +1A1A +E2E2 +1222 +1040 +3FFC +6080 +BFF8 +2080 +3FF8 +2080 +3FFE +ENDCHAR +STARTCHAR uni7FE0 +ENCODING 32736 +BBX 15 14 1 -1 +BITMAP +FEFE +4242 +2626 +1A1A +E262 +0100 +7FFC +0820 +1450 +628C +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni7FE1 +ENCODING 32737 +BBX 15 15 1 -1 +BITMAP +0440 +FC7E +0440 +7C7C +0440 +FC7E +0840 +1040 +FEFE +1212 +6262 +0606 +1A1A +E2E2 +0E0E +ENDCHAR +STARTCHAR uni7FE2 +ENCODING 32738 +BBX 15 15 0 -2 +BITMAP +7F6E +4922 +4922 +5DAA +4966 +7F22 +4122 +5D26 +556A +55B2 +5D22 +4122 +4122 +452A +8264 +ENDCHAR +STARTCHAR uni7FE3 +ENCODING 32739 +BBX 15 15 1 -1 +BITMAP +7EFC +1214 +6664 +1A1C +6264 +0100 +7FFC +0820 +FFFE +0200 +FFFE +0410 +1E20 +01E0 +7E18 +ENDCHAR +STARTCHAR uni7FE4 +ENCODING 32740 +BBX 15 15 0 -2 +BITMAP +7CEE +4422 +4422 +7CAA +0066 +FE22 +AA22 +AA26 +AA6A +FEB2 +AA22 +AA22 +AA22 +A2AA +8644 +ENDCHAR +STARTCHAR uni7FE5 +ENCODING 32741 +BBX 15 15 1 -1 +BITMAP +0100 +0120 +1FF8 +0140 +7FFE +0220 +1FF0 +F010 +1FF0 +1010 +7FFC +0A24 +76CC +1A34 +66CC +ENDCHAR +STARTCHAR uni7FE6 +ENCODING 32742 +BBX 15 15 1 -1 +BITMAP +0420 +FFFE +0000 +7C44 +4444 +7C44 +4444 +7C04 +441C +0000 +FEFE +1212 +6666 +1A1A +6666 +ENDCHAR +STARTCHAR uni7FE7 +ENCODING 32743 +BBX 14 16 0 -2 +BITMAP +2000 +11DC +FE44 +8244 +0154 +7CCC +0044 +7C44 +444C +7CD4 +4564 +7C44 +0044 +1C44 +E154 +4088 +ENDCHAR +STARTCHAR uni7FE8 +ENCODING 32744 +BBX 14 16 1 -2 +BITMAP +FDF8 +4488 +3468 +C588 +0408 +3FE0 +2020 +3FE0 +2020 +3FE0 +0000 +FFF8 +2200 +23F0 +5200 +8FFC +ENDCHAR +STARTCHAR uni7FE9 +ENCODING 32745 +BBX 15 14 1 -1 +BITMAP +FEEE +0022 +7E22 +4226 +426A +7EB2 +4022 +7F22 +5566 +55BA +7F22 +D522 +5522 +4366 +ENDCHAR +STARTCHAR uni7FEA +ENCODING 32746 +BBX 15 16 0 -2 +BITMAP +0028 +EE92 +22AA +2282 +AAFE +6628 +2244 +22A2 +263C +6A44 +B244 +22A8 +2210 +2228 +AA44 +4482 +ENDCHAR +STARTCHAR uni7FEB +ENCODING 32747 +BBX 15 14 1 -1 +BITMAP +F7BC +5280 +9480 +3180 +52FE +84A8 +1028 +7F28 +4128 +4128 +7F28 +414A +414A +7F86 +ENDCHAR +STARTCHAR uni7FEC +ENCODING 32748 +BBX 15 15 1 -1 +BITMAP +FEFE +1212 +6666 +1A1A +6262 +FFFE +8102 +BFFA +0100 +3FF8 +2108 +3FF8 +2108 +FFFE +0100 +ENDCHAR +STARTCHAR uni7FED +ENCODING 32749 +BBX 15 16 0 -2 +BITMAP +0040 +EE5C +2244 +2284 +AABE +6690 +2390 +229E +26A8 +6A88 +B2BE +2288 +2288 +2294 +AA94 +44A2 +ENDCHAR +STARTCHAR uni7FEE +ENCODING 32750 +BBX 15 14 1 -1 +BITMAP +FDDE +0042 +7C42 +4442 +7CC6 +015A +FE42 +AA42 +AA42 +CEC6 +835A +BA42 +9242 +96CE +ENDCHAR +STARTCHAR uni7FEF +ENCODING 32751 +BBX 15 15 1 -1 +BITMAP +FEFE +1212 +E666 +1A1A +E262 +0100 +7FFC +0000 +0FE0 +0820 +7FFC +4004 +4FE4 +4824 +4FEC +ENDCHAR +STARTCHAR uni7FF0 +ENCODING 32752 +BBX 15 15 1 -1 +BITMAP +2020 +2050 +F888 +2306 +F800 +8BBC +F884 +8994 +8AA4 +F884 +208C +F994 +26E4 +2084 +219C +ENDCHAR +STARTCHAR uni7FF1 +ENCODING 32753 +BBX 14 16 0 -2 +BITMAP +1000 +21DC +7C44 +4444 +7D54 +44CC +7C44 +1044 +FE4C +28D4 +5564 +9244 +7C44 +1044 +1154 +1088 +ENDCHAR +STARTCHAR uni7FF2 +ENCODING 32754 +BBX 15 14 1 -1 +BITMAP +FEDE +2842 +FE42 +AA42 +AA46 +FEDA +0142 +7C42 +0042 +FEC6 +115A +5442 +9242 +30CE +ENDCHAR +STARTCHAR uni7FF3 +ENCODING 32755 +BBX 15 14 1 -1 +BITMAP +FF78 +A048 +BE4E +C880 +BE7C +9424 +A218 +FF66 +0000 +FEFE +1212 +6666 +1A1A +6666 +ENDCHAR +STARTCHAR uni7FF4 +ENCODING 32756 +BBX 15 16 0 -2 +BITMAP +0010 +EC10 +26FE +2510 +B57C +6C54 +247C +2754 +257C +6D10 +B5FE +2510 +2510 +2690 +B47E +4800 +ENDCHAR +STARTCHAR uni7FF5 +ENCODING 32757 +BBX 15 16 0 -2 +BITMAP +0010 +EE20 +227C +2244 +AA7C +6644 +227C +2240 +267E +6A40 +B27E +2202 +22AA +22AA +AB02 +440C +ENDCHAR +STARTCHAR uni7FF6 +ENCODING 32758 +BBX 14 16 0 -2 +BITMAP +1000 +21DC +7C44 +4444 +7D54 +44CC +7C44 +1044 +544C +38D4 +5564 +1044 +FE44 +1044 +1154 +1088 +ENDCHAR +STARTCHAR uni7FF7 +ENCODING 32759 +BBX 15 16 0 -2 +BITMAP +0800 +49EE +2A22 +0822 +FFAA +2A66 +4922 +8822 +4226 +776A +92B2 +5A22 +2F22 +2222 +42AA +8244 +ENDCHAR +STARTCHAR uni7FF8 +ENCODING 32760 +BBX 15 16 0 -2 +BITMAP +1000 +7EEE +1022 +2422 +FEAA +2466 +7E22 +4222 +7E26 +426A +7EB2 +4222 +7E22 +2422 +42AA +8144 +ENDCHAR +STARTCHAR uni7FF9 +ENCODING 32761 +BBX 15 15 1 -1 +BITMAP +1000 +11DC +7C44 +1044 +FECC +4554 +EE44 +4444 +64CC +CF54 +0044 +FE44 +28CC +4802 +87FE +ENDCHAR +STARTCHAR uni7FFA +ENCODING 32762 +BBX 15 15 1 -1 +BITMAP +1000 +7DDE +4442 +7C42 +44C6 +7D5A +4442 +7C42 +1042 +D6C6 +115A +D642 +1042 +FE42 +10CE +ENDCHAR +STARTCHAR uni7FFB +ENCODING 32763 +BBX 15 15 1 -1 +BITMAP +0C00 +F1EE +5222 +5422 +FEAA +3866 +5422 +9222 +0066 +7C66 +54AA +7D22 +5422 +5422 +7CE6 +ENDCHAR +STARTCHAR uni7FFC +ENCODING 32764 +BBX 15 15 1 -1 +BITMAP +FEFE +2222 +1E1E +7272 +3FF8 +2108 +3FF8 +2108 +3FF8 +0440 +7FFC +0440 +FFFE +1010 +600C +ENDCHAR +STARTCHAR uni7FFD +ENCODING 32765 +BBX 15 16 0 -2 +BITMAP +0800 +4E76 +4812 +FF12 +045A +0536 +7F92 +4412 +7C12 +5536 +555A +7512 +5A12 +9292 +25DA +C8A4 +ENDCHAR +STARTCHAR uni7FFE +ENCODING 32766 +BBX 15 15 0 -2 +BITMAP +FEEE +AA22 +AA22 +FEAA +0066 +FE22 +0022 +7C26 +446A +7CB2 +2A22 +6422 +A222 +31AA +2044 +ENDCHAR +STARTCHAR uni7FFF +ENCODING 32767 +BBX 15 16 0 -2 +BITMAP +1000 +FEEE +1022 +7C22 +00AA +FE66 +0222 +7C22 +1026 +FE6A +00B2 +FF22 +0222 +FF22 +AAAA +E644 +ENDCHAR +STARTCHAR uni8000 +ENCODING 32768 +BBX 15 15 1 -1 +BITMAP +2000 +23DE +A842 +ABDE +6842 +33DE +2088 +F910 +53FE +5510 +51FC +5510 +59FC +9110 +81FE +ENDCHAR +STARTCHAR uni8001 +ENCODING 32769 +BBX 15 15 1 -1 +BITMAP +0100 +0104 +3FFC +0108 +0110 +0120 +FFFE +0180 +0610 +0C60 +3780 +C400 +0404 +0404 +03FC +ENDCHAR +STARTCHAR uni8002 +ENCODING 32770 +BBX 15 13 1 0 +BITMAP +0108 +0108 +3FF8 +0108 +0110 +0120 +0140 +FFFE +0100 +0600 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni8003 +ENCODING 32771 +BBX 14 15 1 -1 +BITMAP +0200 +0210 +1FE0 +0220 +0240 +7FFC +0300 +0470 +0F80 +3400 +CFF0 +0810 +0010 +0010 +00E0 +ENDCHAR +STARTCHAR uni8004 +ENCODING 32772 +BBX 15 15 1 -1 +BITMAP +0204 +1FC8 +0230 +FFFE +0300 +1C18 +E7E2 +0402 +0FFE +0400 +1FF0 +0400 +7FFA +0402 +07FE +ENDCHAR +STARTCHAR uni8005 +ENCODING 32773 +BBX 13 15 2 -1 +BITMAP +0200 +0220 +3FE0 +0220 +0240 +0280 +FFF8 +0400 +1FE0 +3020 +D020 +1FE0 +1020 +1020 +1FE0 +ENDCHAR +STARTCHAR uni8006 +ENCODING 32774 +BBX 15 15 1 -1 +BITMAP +0204 +1FC8 +0230 +FFFE +0300 +1C18 +E7E2 +0402 +03FE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8007 +ENCODING 32775 +BBX 15 16 0 -2 +BITMAP +0200 +0208 +3FD0 +0220 +0240 +FFFE +0300 +1C00 +EFF8 +1008 +2FC8 +C848 +0FC8 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni8008 +ENCODING 32776 +BBX 15 15 1 -1 +BITMAP +0408 +3FF0 +0440 +FFFE +0230 +1FC0 +E204 +11FC +1000 +3FFC +4004 +8FC4 +0844 +0FC4 +0018 +ENDCHAR +STARTCHAR uni8009 +ENCODING 32777 +BBX 15 16 0 -2 +BITMAP +0200 +0210 +3FE0 +0240 +FFFE +0100 +07F8 +1C00 +E7F8 +0008 +1F88 +1088 +1088 +1F88 +0050 +0020 +ENDCHAR +STARTCHAR uni800A +ENCODING 32778 +BBX 15 15 1 -1 +BITMAP +0108 +0108 +1FF0 +0120 +0140 +7FFC +0400 +1FF8 +E240 +04E0 +3F10 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni800B +ENCODING 32779 +BBX 15 15 1 -1 +BITMAP +0204 +1FC8 +0230 +FFFE +0300 +1C18 +E7E2 +0402 +1FFE +0420 +0FD0 +0100 +1FF0 +0100 +7FFC +ENDCHAR +STARTCHAR uni800C +ENCODING 32780 +BBX 13 14 2 -1 +BITMAP +FFF8 +0800 +1000 +1000 +FFF8 +8908 +8908 +8908 +8908 +8908 +8908 +8908 +8908 +8938 +ENDCHAR +STARTCHAR uni800D +ENCODING 32781 +BBX 15 15 0 -2 +BITMAP +FFFE +0200 +0400 +3FF8 +2488 +2488 +24A8 +2210 +0200 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni800E +ENCODING 32782 +BBX 15 14 1 -1 +BITMAP +FFFE +0200 +7FFC +4444 +4444 +4444 +444C +0100 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni800F +ENCODING 32783 +BBX 15 16 0 -2 +BITMAP +0002 +FFE2 +0404 +0408 +0810 +7FC2 +4A42 +4A44 +4A48 +4A50 +4A42 +4A42 +4A44 +4848 +4150 +40A0 +ENDCHAR +STARTCHAR uni8010 +ENCODING 32784 +BBX 15 15 1 -1 +BITMAP +0008 +FE08 +1008 +2008 +FEFE +AA08 +AA08 +AA88 +AA48 +AA28 +AA08 +AA08 +AA08 +AA08 +8638 +ENDCHAR +STARTCHAR uni8011 +ENCODING 32785 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +4104 +4104 +7FFC +0000 +FFFE +0100 +0200 +7FFC +4444 +4444 +4444 +4444 +444C +ENDCHAR +STARTCHAR uni8012 +ENCODING 32786 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni8013 +ENCODING 32787 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FE +FE10 +1010 +7C10 +1010 +FE10 +1010 +3810 +3410 +5410 +5010 +9010 +1050 +1020 +ENDCHAR +STARTCHAR uni8014 +ENCODING 32788 +BBX 15 15 1 -1 +BITMAP +1000 +1EFE +F004 +1008 +1010 +7C10 +1010 +11FE +FE10 +1010 +3810 +3410 +5410 +9010 +1070 +ENDCHAR +STARTCHAR uni8015 +ENCODING 32789 +BBX 15 15 1 -1 +BITMAP +1048 +1048 +7C48 +11FE +1048 +7C48 +1048 +1048 +FE48 +11FE +3848 +3448 +5088 +9088 +1108 +ENDCHAR +STARTCHAR uni8016 +ENCODING 32790 +BBX 15 15 1 -1 +BITMAP +1020 +1E20 +F020 +10A8 +7CA8 +10A4 +1122 +FF20 +1024 +3024 +3868 +5408 +9410 +1020 +11C0 +ENDCHAR +STARTCHAR uni8017 +ENCODING 32791 +BBX 15 15 1 -1 +BITMAP +1030 +11C0 +FC40 +1040 +11F8 +7C40 +1040 +1040 +FDFC +1840 +3440 +5240 +9042 +1042 +103E +ENDCHAR +STARTCHAR uni8018 +ENCODING 32792 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +FEFC +1000 +1000 +7C00 +11FE +1020 +FE20 +1020 +3848 +3448 +5444 +909C +13E2 +ENDCHAR +STARTCHAR uni8019 +ENCODING 32793 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +FF24 +1124 +1124 +7D24 +1124 +11FC +FF00 +1100 +3900 +3500 +5502 +9102 +10FE +ENDCHAR +STARTCHAR uni801A +ENCODING 32794 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +1010 +FDFE +1112 +7914 +1110 +FDFC +1144 +3944 +3528 +5528 +9110 +1228 +1244 +1482 +ENDCHAR +STARTCHAR uni801B +ENCODING 32795 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FE40 +1048 +7C84 +11FE +FE82 +1000 +38FC +3484 +5484 +5084 +9084 +10FC +1084 +ENDCHAR +STARTCHAR uni801C +ENCODING 32796 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +FF04 +1104 +1104 +7D04 +11FC +1100 +FF00 +11FE +3902 +3502 +5502 +9102 +11FE +ENDCHAR +STARTCHAR uni801D +ENCODING 32797 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1088 +FE88 +1088 +7CF8 +1088 +FE88 +1088 +38F8 +3488 +5488 +5088 +9088 +13FE +1000 +ENDCHAR +STARTCHAR uni801E +ENCODING 32798 +BBX 14 16 0 -2 +BITMAP +1100 +1100 +1100 +FD1C +13D4 +7954 +1154 +FD54 +1154 +3954 +3554 +5554 +9154 +125C +1354 +1480 +ENDCHAR +STARTCHAR uni801F +ENCODING 32799 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1100 +FF00 +1100 +7DFC +1104 +FF04 +1104 +3904 +35FC +5500 +5100 +9100 +11FE +1000 +ENDCHAR +STARTCHAR uni8020 +ENCODING 32800 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +FC88 +1104 +7A02 +11FC +FC00 +1000 +39FC +3504 +5504 +9104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni8021 +ENCODING 32801 +BBX 15 15 1 -1 +BITMAP +2010 +2790 +FC90 +2490 +27FE +FC92 +2492 +2492 +FF92 +2492 +7492 +6CE2 +A722 +AC42 +208C +ENDCHAR +STARTCHAR uni8022 +ENCODING 32802 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +FC88 +1000 +7BFE +1202 +FC44 +1040 +3BFC +3444 +5484 +9084 +1104 +1228 +1410 +ENDCHAR +STARTCHAR uni8023 +ENCODING 32803 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +FC88 +1104 +7AFA +1000 +FDFC +1154 +3954 +35FC +5554 +9154 +1154 +1104 +110C +ENDCHAR +STARTCHAR uni8024 +ENCODING 32804 +BBX 15 15 1 -1 +BITMAP +1088 +1C88 +F1FC +1088 +7C88 +1088 +13FE +FC00 +11FC +3904 +3504 +55FC +9104 +1104 +11FC +ENDCHAR +STARTCHAR uni8025 +ENCODING 32805 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +10A4 +FCA8 +1020 +7BFE +1202 +FE02 +12FA +3A8A +368A +528A +52FA +9202 +120A +1204 +ENDCHAR +STARTCHAR uni8026 +ENCODING 32806 +BBX 15 15 1 -1 +BITMAP +1000 +1DFC +F124 +1124 +11FC +7D24 +1124 +11FC +FC20 +13FE +3A22 +362A +523A +92C6 +120E +ENDCHAR +STARTCHAR uni8027 +ENCODING 32807 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +10A8 +FC20 +13FE +78A8 +1124 +FE02 +1040 +3BFE +3488 +5108 +5190 +9060 +1198 +1604 +ENDCHAR +STARTCHAR uni8028 +ENCODING 32808 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +7E00 +12FC +1200 +7FFC +12A2 +1294 +FEE8 +1386 +3208 +3BFE +5288 +9448 +1018 +ENDCHAR +STARTCHAR uni8029 +ENCODING 32809 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +FC88 +11FC +7888 +13FE +FC20 +11FC +3924 +35FC +5124 +53FE +9104 +1114 +1108 +ENDCHAR +STARTCHAR uni802A +ENCODING 32810 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FC +FD08 +1090 +7BFE +1202 +FC44 +1020 +3BFC +3480 +54F8 +9088 +1108 +1128 +1210 +ENDCHAR +STARTCHAR uni802B +ENCODING 32811 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1020 +FDFC +1020 +7BFE +1000 +FDFC +1104 +39FC +3504 +55FC +9104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni802C +ENCODING 32812 +BBX 15 15 1 -1 +BITMAP +1020 +1DFC +F124 +13FE +7924 +11FC +1020 +FDFC +1124 +31FC +3820 +57FE +9484 +10F8 +138E +ENDCHAR +STARTCHAR uni802D +ENCODING 32813 +BBX 15 16 0 -2 +BITMAP +1124 +1124 +12AA +FFAE +1124 +7AAA +13AE +FD24 +13FE +3910 +3514 +5114 +528A +924A +1216 +1422 +ENDCHAR +STARTCHAR uni802E +ENCODING 32814 +BBX 15 16 0 -2 +BITMAP +1048 +116A +10DC +FE48 +10B4 +7D22 +11FE +FF02 +1020 +3820 +34FC +5424 +5044 +9044 +1094 +1108 +ENDCHAR +STARTCHAR uni802F +ENCODING 32815 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +10A8 +FC90 +11FE +7B20 +11FC +FD20 +11FC +3920 +35FE +5500 +93FC +1088 +1070 +138E +ENDCHAR +STARTCHAR uni8030 +ENCODING 32816 +BBX 15 15 1 -1 +BITMAP +13FE +1840 +F1F8 +1108 +79F8 +1108 +17FE +FC42 +12AC +3C7A +3480 +51F8 +5688 +9070 +178E +ENDCHAR +STARTCHAR uni8031 +ENCODING 32817 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +FE48 +13FE +7A48 +12EC +FF5A +1248 +3BFE +3620 +527C +52C4 +9344 +147C +1844 +ENDCHAR +STARTCHAR uni8032 +ENCODING 32818 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +FC00 +11FC +7954 +11FC +FC20 +1122 +388C +3522 +5454 +90C8 +1144 +1252 +1060 +ENDCHAR +STARTCHAR uni8033 +ENCODING 32819 +BBX 14 14 1 -1 +BITMAP +FFFC +1020 +1020 +1FE0 +1020 +1020 +1FE0 +1020 +1020 +103C +13E0 +FC20 +0020 +0020 +ENDCHAR +STARTCHAR uni8034 +ENCODING 32820 +BBX 15 16 0 -2 +BITMAP +0020 +FFA0 +2220 +2220 +3E20 +2220 +2220 +3E20 +2220 +2220 +27A0 +FA22 +4222 +0222 +021E +0200 +ENDCHAR +STARTCHAR uni8035 +ENCODING 32821 +BBX 15 14 1 -1 +BITMAP +FEFE +2410 +2410 +3C10 +2410 +2410 +3C10 +2410 +2410 +2410 +3C10 +C410 +0410 +0470 +ENDCHAR +STARTCHAR uni8036 +ENCODING 32822 +BBX 15 14 1 -1 +BITMAP +FF7E +2242 +2242 +3E44 +2244 +2248 +3E44 +2244 +2242 +2242 +3E42 +E24C +0240 +0240 +ENDCHAR +STARTCHAR uni8037 +ENCODING 32823 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0280 +0C60 +3018 +CFF6 +0810 +0FF0 +0810 +0FF0 +081E +7FF0 +0010 +0010 +ENDCHAR +STARTCHAR uni8038 +ENCODING 32824 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +7FFC +1010 +1FF0 +1010 +1FF0 +1010 +103E +FFD0 +0010 +0010 +ENDCHAR +STARTCHAR uni8039 +ENCODING 32825 +BBX 15 16 0 -2 +BITMAP +0020 +FF20 +2420 +2450 +3C50 +2488 +2544 +3E22 +2420 +24F8 +2E08 +F408 +4410 +0410 +0420 +0420 +ENDCHAR +STARTCHAR uni803A +ENCODING 32826 +BBX 15 15 0 -2 +BITMAP +FF00 +24FC +2400 +3C00 +2400 +25FE +3C20 +2420 +2440 +2E40 +F488 +4484 +05FE +0482 +0400 +ENDCHAR +STARTCHAR uni803B +ENCODING 32827 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +4820 +4820 +7820 +4920 +493C +4920 +7920 +4920 +4920 +4920 +7920 +C920 +0BFE +ENDCHAR +STARTCHAR uni803C +ENCODING 32828 +BBX 15 14 1 -1 +BITMAP +FDF8 +4908 +4908 +7908 +4BFE +4908 +7908 +4908 +4BFE +4908 +7908 +C908 +0908 +0938 +ENDCHAR +STARTCHAR uni803D +ENCODING 32829 +BBX 15 15 1 -1 +BITMAP +0020 +7E20 +2420 +25FE +3D22 +2522 +2420 +2420 +3C30 +2450 +2450 +2450 +3C92 +E492 +050E +ENDCHAR +STARTCHAR uni803E +ENCODING 32830 +BBX 15 16 0 -2 +BITMAP +0040 +FF40 +2440 +2440 +3DFE +2440 +2440 +3C50 +2490 +2490 +2EA0 +F528 +4544 +0644 +04FE +0442 +ENDCHAR +STARTCHAR uni803F +ENCODING 32831 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +4822 +4922 +7922 +4924 +4A24 +4A20 +7850 +4850 +4850 +4888 +7888 +C904 +0A02 +ENDCHAR +STARTCHAR uni8040 +ENCODING 32832 +BBX 15 16 0 -2 +BITMAP +0048 +FF44 +2444 +2440 +3C5E +25E0 +2440 +3C44 +2444 +2448 +2E30 +F422 +4452 +048A +0506 +0402 +ENDCHAR +STARTCHAR uni8041 +ENCODING 32833 +BBX 15 16 0 -2 +BITMAP +0010 +FC90 +4890 +4888 +7908 +4904 +4A04 +7DFA +4888 +4888 +4C88 +7888 +C908 +0908 +0A28 +0C10 +ENDCHAR +STARTCHAR uni8042 +ENCODING 32834 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +0FE0 +0820 +0FE0 +083E +FFE0 +0020 +3EF8 +0288 +2288 +1450 +0820 +34D8 +C306 +ENDCHAR +STARTCHAR uni8043 +ENCODING 32835 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +4820 +49FC +7924 +4924 +4BFE +7924 +4924 +4924 +4BFE +7904 +C904 +0904 +090C +ENDCHAR +STARTCHAR uni8044 +ENCODING 32836 +BBX 15 16 0 -2 +BITMAP +0020 +FC20 +4850 +4888 +7904 +4A12 +4820 +7840 +4988 +4810 +4C20 +7844 +C988 +0810 +0860 +0B80 +ENDCHAR +STARTCHAR uni8045 +ENCODING 32837 +BBX 15 16 0 -2 +BITMAP +0040 +FC40 +4880 +48FC +7920 +4A20 +4820 +7820 +4BFE +4820 +4C50 +7850 +C888 +0888 +0904 +0A02 +ENDCHAR +STARTCHAR uni8046 +ENCODING 32838 +BBX 15 15 1 -1 +BITMAP +0040 +FCA0 +4910 +4A08 +7C06 +49F0 +4800 +4800 +7BFC +4844 +4844 +4844 +785C +C840 +0840 +ENDCHAR +STARTCHAR uni8047 +ENCODING 32839 +BBX 15 15 0 -2 +BITMAP +FF00 +24FE +2410 +3C10 +2410 +2490 +3C90 +249E +2490 +2E90 +F490 +4490 +0490 +07FE +0400 +ENDCHAR +STARTCHAR uni8048 +ENCODING 32840 +BBX 15 16 0 -2 +BITMAP +0010 +FC90 +4890 +4910 +797E +4A52 +4B92 +7892 +4912 +4912 +4E52 +7BD2 +C862 +0822 +084A +0884 +ENDCHAR +STARTCHAR uni8049 +ENCODING 32841 +BBX 15 16 0 -2 +BITMAP +0010 +FF10 +2492 +2492 +3C92 +2492 +24FE +3C10 +2410 +2492 +2E92 +F492 +4492 +0492 +04FE +0402 +ENDCHAR +STARTCHAR uni804A +ENCODING 32842 +BBX 15 15 1 -1 +BITMAP +00C0 +FF1E +4A52 +4A52 +7A52 +4A52 +4A52 +4A52 +7A52 +4A52 +4BD2 +4E52 +7856 +C890 +0910 +ENDCHAR +STARTCHAR uni804B +ENCODING 32843 +BBX 15 16 0 -2 +BITMAP +0480 +0440 +FFFE +0940 +1184 +66FC +0000 +7FFC +0820 +0FE0 +0820 +0FE0 +083E +FFE0 +0020 +0020 +ENDCHAR +STARTCHAR uni804C +ENCODING 32844 +BBX 15 15 0 -2 +BITMAP +FF00 +24FC +2484 +3C84 +2484 +2484 +3C84 +24FC +2484 +2E00 +F448 +4444 +0484 +0482 +0502 +ENDCHAR +STARTCHAR uni804D +ENCODING 32845 +BBX 15 16 0 -2 +BITMAP +0040 +FC20 +4820 +4BFE +7A02 +4C04 +4800 +7800 +4BFE +4820 +4C20 +7820 +C820 +0820 +08A0 +0840 +ENDCHAR +STARTCHAR uni804E +ENCODING 32846 +BBX 15 16 0 -2 +BITMAP +0050 +FF50 +2450 +2552 +3CD4 +2458 +2450 +3C58 +24D4 +2552 +2E50 +F450 +4492 +0492 +0512 +060E +ENDCHAR +STARTCHAR uni804F +ENCODING 32847 +BBX 14 15 0 -2 +BITMAP +FDFC +4820 +4820 +7840 +49FC +4954 +7954 +4954 +4954 +4D54 +7954 +C954 +0944 +0914 +0908 +ENDCHAR +STARTCHAR uni8050 +ENCODING 32848 +BBX 15 16 0 -2 +BITMAP +0020 +FC20 +4820 +4BFE +7820 +4820 +49FC +7800 +4800 +49FC +4D04 +7904 +C904 +0904 +09FC +0904 +ENDCHAR +STARTCHAR uni8051 +ENCODING 32849 +BBX 15 15 0 -2 +BITMAP +FDFE +4888 +4888 +7888 +48F8 +4888 +7888 +48F8 +4888 +4C88 +789E +CBE8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uni8052 +ENCODING 32850 +BBX 15 15 1 -1 +BITMAP +001C +FDE0 +4820 +4820 +7820 +4BFE +4820 +4820 +7820 +49FC +4904 +4904 +7904 +C904 +09FC +ENDCHAR +STARTCHAR uni8053 +ENCODING 32851 +BBX 15 15 0 -2 +BITMAP +7DF0 +1110 +1190 +1D52 +F20E +0400 +7FFC +0820 +0FE0 +0820 +0FE0 +083E +FFE0 +0020 +0020 +ENDCHAR +STARTCHAR uni8054 +ENCODING 32852 +BBX 15 16 0 -2 +BITMAP +0088 +FC48 +4850 +4800 +79FC +4820 +4820 +7820 +4BFE +4820 +4C50 +7850 +C888 +0888 +0904 +0A02 +ENDCHAR +STARTCHAR uni8055 +ENCODING 32853 +BBX 15 16 0 -2 +BITMAP +0020 +FD20 +4920 +49FC +7920 +4A20 +4820 +7BFE +4800 +4800 +4DFC +7904 +C904 +0904 +09FC +0904 +ENDCHAR +STARTCHAR uni8056 +ENCODING 32854 +BBX 15 14 1 -1 +BITMAP +FF80 +227E +3E42 +2242 +3E42 +2242 +FE7E +0200 +3FF8 +0100 +1FF0 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni8057 +ENCODING 32855 +BBX 15 16 0 -2 +BITMAP +0020 +FC20 +4820 +4BFE +7820 +4820 +4924 +7924 +4924 +4AAA +4C20 +7850 +C850 +0888 +0904 +0A02 +ENDCHAR +STARTCHAR uni8058 +ENCODING 32856 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +49FC +4924 +79FC +4924 +4924 +49FC +7800 +4BFE +4880 +48FC +7904 +C804 +0838 +ENDCHAR +STARTCHAR uni8059 +ENCODING 32857 +BBX 15 16 0 -2 +BITMAP +0020 +FC20 +4BFE +4820 +79FC +4820 +4BFE +7800 +49FC +4904 +4DFC +7904 +C9FC +0904 +0914 +0908 +ENDCHAR +STARTCHAR uni805A +ENCODING 32858 +BBX 15 14 1 -1 +BITMAP +FEFC +2444 +3C44 +2428 +3C10 +2628 +3CC4 +C402 +00E0 +3700 +C20C +0390 +1A60 +E21E +ENDCHAR +STARTCHAR uni805B +ENCODING 32859 +BBX 15 16 0 -2 +BITMAP +0020 +FF40 +24FE +2492 +3C92 +24FE +2492 +3CA2 +24FE +2448 +2E88 +F5FE +4408 +0408 +0408 +0408 +ENDCHAR +STARTCHAR uni805C +ENCODING 32860 +BBX 15 16 0 -2 +BITMAP +0020 +FF10 +2410 +25FE +3D02 +2654 +2488 +3D04 +2400 +24FC +2E20 +F420 +4420 +0420 +05FE +0400 +ENDCHAR +STARTCHAR uni805D +ENCODING 32861 +BBX 15 16 0 -2 +BITMAP +0014 +FC12 +4810 +49FE +7810 +4810 +49D2 +7952 +4952 +4954 +4DD4 +7808 +C8CA +0B1A +0826 +0842 +ENDCHAR +STARTCHAR uni805E +ENCODING 32862 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +BFF4 +8844 +8FC4 +8844 +8FC4 +8844 +8FC4 +B85C +ENDCHAR +STARTCHAR uni805F +ENCODING 32863 +BBX 15 15 1 -1 +BITMAP +2000 +3F7E +4842 +0842 +FFC2 +227E +4100 +FFFE +0820 +0FE0 +0820 +0FE0 +083E +FFE0 +0020 +ENDCHAR +STARTCHAR uni8060 +ENCODING 32864 +BBX 15 16 0 -2 +BITMAP +0084 +FF48 +2400 +24FC +3C48 +2448 +2448 +3C48 +25FE +2448 +2E48 +F448 +4448 +0488 +0488 +0508 +ENDCHAR +STARTCHAR uni8061 +ENCODING 32865 +BBX 15 15 1 -1 +BITMAP +0088 +FD04 +4A42 +4840 +7848 +488C +48F2 +7B82 +4820 +4810 +4850 +7944 +C942 +0A4A +0A38 +ENDCHAR +STARTCHAR uni8062 +ENCODING 32866 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +4BFE +4A02 +7A02 +49FC +4820 +4820 +7920 +493C +4920 +4920 +79A0 +CA60 +0A1E +ENDCHAR +STARTCHAR uni8063 +ENCODING 32867 +BBX 15 15 0 -2 +BITMAP +FF20 +24CE +2482 +3C82 +24EE +2482 +3C82 +24FE +2428 +2E28 +F428 +4448 +044A +048A +0506 +ENDCHAR +STARTCHAR uni8064 +ENCODING 32868 +BBX 15 16 0 -2 +BITMAP +0040 +FC20 +4BFE +4800 +79FC +4904 +49FC +7800 +4BFE +4A02 +4DFC +7820 +C820 +0820 +08A0 +0840 +ENDCHAR +STARTCHAR uni8065 +ENCODING 32869 +BBX 15 16 0 -2 +BITMAP +0004 +FC1E +4BE0 +4820 +79FC +4924 +4924 +79FC +4820 +4BFE +4E22 +7A2A +CAFA +0A02 +0A0A +0A04 +ENDCHAR +STARTCHAR uni8066 +ENCODING 32870 +BBX 15 15 1 -1 +BITMAP +0100 +FD00 +49FC +4B54 +7A94 +4CE4 +4934 +7A48 +4898 +4840 +4820 +7AA0 +CA84 +0A8A +0C7A +ENDCHAR +STARTCHAR uni8067 +ENCODING 32871 +BBX 15 16 0 -2 +BITMAP +0010 +FDD4 +4858 +4A52 +798C +4888 +4904 +7AFA +4820 +4820 +4DFE +7820 +C850 +0888 +0904 +0A02 +ENDCHAR +STARTCHAR uni8068 +ENCODING 32872 +BBX 15 15 1 -1 +BITMAP +0088 +FC88 +4910 +4B54 +7888 +4954 +4AAC +4F32 +7888 +4888 +4FFE +4888 +7888 +C908 +0A08 +ENDCHAR +STARTCHAR uni8069 +ENCODING 32873 +BBX 15 16 0 -2 +BITMAP +0020 +FC20 +49FC +4924 +79FC +4820 +4BFE +7800 +49FC +4904 +4D24 +7924 +C924 +0850 +0888 +0B04 +ENDCHAR +STARTCHAR uni806A +ENCODING 32874 +BBX 15 16 0 -2 +BITMAP +0088 +FC48 +4850 +49FC +7904 +4904 +4904 +79FC +4820 +4810 +4C54 +7942 +C942 +094A +0A38 +0800 +ENDCHAR +STARTCHAR uni806B +ENCODING 32875 +BBX 15 16 0 -2 +BITMAP +0108 +FD4A +4A52 +4B9C +7908 +4A52 +4BDE +7842 +4820 +4820 +4FFE +7820 +C850 +0888 +0904 +0A02 +ENDCHAR +STARTCHAR uni806C +ENCODING 32876 +BBX 15 16 0 -2 +BITMAP +0090 +FC88 +4904 +4A42 +7C88 +49FC +4804 +7800 +4BDE +4842 +4E52 +794A +CA52 +0842 +094A +0884 +ENDCHAR +STARTCHAR uni806D +ENCODING 32877 +BBX 15 16 0 -2 +BITMAP +0010 +FF20 +24FE +2492 +3C92 +24FE +2492 +3C92 +24FE +2420 +2E24 +F45A +445E +0490 +0492 +050E +ENDCHAR +STARTCHAR uni806E +ENCODING 32878 +BBX 15 16 0 -2 +BITMAP +0084 +FC84 +4908 +494A +7A52 +4B9C +4884 +7908 +494A +4BDE +4C42 +7800 +C954 +092A +0A2A +0800 +ENDCHAR +STARTCHAR uni806F +ENCODING 32879 +BBX 15 15 1 -1 +BITMAP +0108 +F908 +5210 +56B4 +7108 +5294 +55AC +5672 +7000 +5492 +5492 +779E +D090 +1110 +1610 +ENDCHAR +STARTCHAR uni8070 +ENCODING 32880 +BBX 15 15 1 -1 +BITMAP +0010 +FC20 +49FC +4924 +79B4 +4954 +49A4 +4954 +7904 +49FC +4820 +4954 +7954 +CA4A +0A3A +ENDCHAR +STARTCHAR uni8071 +ENCODING 32881 +BBX 15 15 1 -1 +BITMAP +0820 +7F20 +087E +FF84 +1048 +1E30 +2228 +46C4 +FFFE +1020 +1FE0 +1020 +1FFE +F020 +0020 +ENDCHAR +STARTCHAR uni8072 +ENCODING 32882 +BBX 15 15 1 -1 +BITMAP +0878 +FFC8 +088E +7F00 +007C +7F44 +4938 +7F46 +4000 +FFFE +0820 +0FE0 +0820 +FFFE +0020 +ENDCHAR +STARTCHAR uni8073 +ENCODING 32883 +BBX 15 15 1 -1 +BITMAP +1110 +2110 +D2AC +2440 +E278 +2540 +28FE +2000 +FFFE +0820 +0FE0 +0820 +0FFE +F820 +0020 +ENDCHAR +STARTCHAR uni8074 +ENCODING 32884 +BBX 15 15 1 -1 +BITMAP +0040 +FC40 +4BFE +4840 +7BFC +4AA4 +4AA4 +7AA4 +4BFC +4820 +4890 +7A94 +CA82 +0C8A +0C78 +ENDCHAR +STARTCHAR uni8075 +ENCODING 32885 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +49FC +4924 +79FC +4820 +4FFE +7904 +49FC +4904 +49FC +7904 +C9FC +0888 +0B06 +ENDCHAR +STARTCHAR uni8076 +ENCODING 32886 +BBX 15 14 1 -1 +BITMAP +3FFC +0420 +07E0 +043C +3FE0 +0020 +FFFE +2244 +3E7C +2244 +3E7C +2246 +FEFC +0204 +ENDCHAR +STARTCHAR uni8077 +ENCODING 32887 +BBX 15 15 1 -1 +BITMAP +0110 +F914 +4FD4 +4A52 +7A90 +4FFE +4810 +4BD4 +7A54 +4A54 +4BC8 +4A48 +7A5A +CBEA +0844 +ENDCHAR +STARTCHAR uni8078 +ENCODING 32888 +BBX 15 16 0 -2 +BITMAP +0080 +FCF8 +4908 +4BFE +7944 +4992 +49FE +7900 +497C +4900 +4D7C +7900 +C97C +0A44 +0A7C +0C44 +ENDCHAR +STARTCHAR uni8079 +ENCODING 32889 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +4BFE +4A22 +7A52 +494C +4A3A +4800 +79FC +4954 +49FC +4800 +7BFE +C820 +08E0 +ENDCHAR +STARTCHAR uni807A +ENCODING 32890 +BBX 15 16 0 -2 +BITMAP +0040 +FC20 +4BFE +4A02 +7910 +49DE +4A52 +7D54 +4A88 +4974 +4E02 +79FC +C820 +0924 +0A22 +0860 +ENDCHAR +STARTCHAR uni807B +ENCODING 32891 +BBX 15 15 1 -1 +BITMAP +4206 +2FB8 +8220 +4FBE +0AA4 +2FA4 +4AA4 +DFE4 +0244 +FFFE +0810 +0FF0 +0810 +09FE +7E10 +ENDCHAR +STARTCHAR uni807C +ENCODING 32892 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +0BFE +1020 +FDFC +4954 +4954 +79FC +4800 +7BFE +4840 +5C24 +EAA2 +4A8A +0C88 +0878 +ENDCHAR +STARTCHAR uni807D +ENCODING 32893 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +4BFE +7820 +49FC +7954 +4954 +F9FC +0800 +EBFE +4820 +E950 +4944 +6A4A +CA38 +ENDCHAR +STARTCHAR uni807E +ENCODING 32894 +BBX 15 15 1 -1 +BITMAP +1040 +FF7E +2440 +FF7C +4204 +7E7C +4240 +7E7C +4242 +FFFE +1010 +1FF0 +101E +FFF0 +0010 +ENDCHAR +STARTCHAR uni807F +ENCODING 32895 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0108 +FFFE +0108 +0108 +3FF8 +0100 +3FF8 +0100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni8080 +ENCODING 32896 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0108 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni8081 +ENCODING 32897 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFC +2004 +3FFC +2080 +2FF8 +2088 +3FFE +2088 +2FF8 +2080 +4FFC +4080 +BFFE +0080 +ENDCHAR +STARTCHAR uni8082 +ENCODING 32898 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FDFC +2024 +23FE +3C24 +45FC +4420 +6420 +95FC +0820 +0820 +13FE +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni8083 +ENCODING 32899 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +2108 +2548 +2528 +2528 +2928 +4108 +4108 +8108 +ENDCHAR +STARTCHAR uni8084 +ENCODING 32900 +BBX 15 15 1 -1 +BITMAP +4020 +4C20 +71FC +4024 +43FE +3C24 +4024 +41FC +7C20 +91FC +1020 +FC20 +2BFE +4420 +8220 +ENDCHAR +STARTCHAR uni8085 +ENCODING 32901 +BBX 15 15 1 -1 +BITMAP +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +2548 +3D78 +2108 +3FF8 +2108 +7D78 +4548 +8108 +ENDCHAR +STARTCHAR uni8086 +ENCODING 32902 +BBX 15 15 1 -1 +BITMAP +0020 +3C20 +21FC +3824 +23FE +3824 +2024 +21FC +FC20 +21FC +2820 +4C20 +77FE +C020 +0020 +ENDCHAR +STARTCHAR uni8087 +ENCODING 32903 +BBX 15 15 1 -1 +BITMAP +0020 +FF20 +003E +7E44 +42A8 +7E18 +4126 +9FF8 +0108 +FFFE +0108 +1FF8 +0100 +7FFC +0100 +ENDCHAR +STARTCHAR uni8088 +ENCODING 32904 +BBX 15 16 0 -2 +BITMAP +0824 +3E3E +22E8 +3E12 +202A +4146 +9FF0 +0110 +FFFE +0110 +1FF0 +0100 +3FF8 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni8089 +ENCODING 32905 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +8208 +8208 +8508 +8888 +9248 +8208 +8208 +8508 +8888 +9048 +8008 +8038 +ENDCHAR +STARTCHAR uni808A +ENCODING 32906 +BBX 15 15 0 -2 +BITMAP +3E00 +22FC +2204 +2208 +3E10 +2220 +2220 +2240 +3E40 +2280 +2282 +2282 +4282 +4A7E +8400 +ENDCHAR +STARTCHAR uni808B +ENCODING 32907 +BBX 14 15 1 -1 +BITMAP +0040 +7840 +4840 +4BFC +4844 +7844 +4844 +4844 +4844 +7844 +4884 +4884 +4884 +8904 +9A38 +ENDCHAR +STARTCHAR uni808C +ENCODING 32908 +BBX 15 14 1 -1 +BITMAP +7CF0 +4490 +4490 +4490 +7C90 +4490 +4490 +4490 +7C90 +4490 +4490 +4492 +8492 +8D0E +ENDCHAR +STARTCHAR uni808D +ENCODING 32909 +BBX 15 16 0 -2 +BITMAP +0040 +3C40 +2440 +2440 +25F8 +3C48 +2448 +2448 +2448 +3C48 +2448 +244A +248A +448A +5506 +8A00 +ENDCHAR +STARTCHAR uni808E +ENCODING 32910 +BBX 15 15 0 -2 +BITMAP +7FFE +4002 +8004 +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni808F +ENCODING 32911 +BBX 15 16 0 -2 +BITMAP +0600 +0100 +0280 +0C60 +3118 +C106 +3FF8 +2288 +2448 +2928 +2108 +2288 +2448 +2008 +2028 +2010 +ENDCHAR +STARTCHAR uni8090 +ENCODING 32912 +BBX 15 16 0 -2 +BITMAP +0040 +3C40 +2480 +24FE +2500 +3E00 +24FC +2408 +2410 +3C20 +2440 +2480 +2502 +4502 +54FE +8800 +ENDCHAR +STARTCHAR uni8091 +ENCODING 32913 +BBX 14 16 0 -2 +BITMAP +0040 +3C40 +2480 +24FC +2504 +3E04 +2404 +2504 +2484 +3C44 +2444 +2404 +2404 +4404 +5428 +8810 +ENDCHAR +STARTCHAR uni8092 +ENCODING 32914 +BBX 15 16 0 -2 +BITMAP +0040 +3C40 +2440 +2440 +25F8 +3C48 +2448 +2548 +24C8 +3C48 +2468 +245A +248A +448A +5506 +8A02 +ENDCHAR +STARTCHAR uni8093 +ENCODING 32915 +BBX 12 15 3 -1 +BITMAP +0400 +0400 +FFF0 +8000 +8000 +7FE0 +0000 +7FC0 +4040 +7FC0 +4040 +7FC0 +4040 +4040 +40C0 +ENDCHAR +STARTCHAR uni8094 +ENCODING 32916 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2420 +2520 +252C +3D34 +2564 +27A4 +2524 +3D34 +2528 +2522 +2522 +4502 +54FE +8800 +ENDCHAR +STARTCHAR uni8095 +ENCODING 32917 +BBX 14 15 0 -2 +BITMAP +3C00 +24FC +2424 +2424 +3CA4 +24A4 +24A4 +24A4 +3D24 +2424 +2444 +2444 +4484 +5528 +8A10 +ENDCHAR +STARTCHAR uni8096 +ENCODING 32918 +BBX 11 15 3 -1 +BITMAP +8420 +4440 +4480 +0400 +7FC0 +4040 +4040 +7FC0 +4040 +4040 +7FC0 +4040 +4040 +4040 +41C0 +ENDCHAR +STARTCHAR uni8097 +ENCODING 32919 +BBX 15 16 0 -2 +BITMAP +0040 +3C40 +2440 +2440 +27FE +3C88 +2488 +2488 +2488 +3D08 +2490 +2450 +2420 +4450 +5488 +8B04 +ENDCHAR +STARTCHAR uni8098 +ENCODING 32920 +BBX 15 15 1 -1 +BITMAP +0010 +7810 +4810 +4BFE +4810 +7810 +4810 +4910 +4890 +7850 +4810 +4810 +4810 +8810 +9870 +ENDCHAR +STARTCHAR uni8099 +ENCODING 32921 +BBX 9 14 4 -1 +BITMAP +7F00 +4100 +4100 +7F00 +0000 +FF80 +8080 +FF80 +8080 +8080 +FF80 +8080 +8080 +8380 +ENDCHAR +STARTCHAR uni809A +ENCODING 32922 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4820 +4820 +4820 +79FC +4820 +4820 +4820 +7820 +4820 +4820 +4820 +8820 +9BFE +ENDCHAR +STARTCHAR uni809B +ENCODING 32923 +BBX 15 14 1 -1 +BITMAP +7800 +49FC +4820 +4820 +7820 +4820 +4820 +4820 +7820 +4820 +4820 +4820 +8BFE +9800 +ENDCHAR +STARTCHAR uni809C +ENCODING 32924 +BBX 15 15 1 -1 +BITMAP +0008 +7C10 +4420 +44C4 +4404 +7C08 +4410 +4420 +44C2 +7C02 +4404 +4408 +4410 +8460 +9D80 +ENDCHAR +STARTCHAR uni809D +ENCODING 32925 +BBX 15 14 1 -1 +BITMAP +79FC +4820 +4820 +4820 +7820 +4820 +4BFE +4820 +7820 +4820 +4820 +4820 +8820 +B820 +ENDCHAR +STARTCHAR uni809E +ENCODING 32926 +BBX 15 16 0 -2 +BITMAP +0040 +3C24 +2524 +2504 +2504 +3C88 +2488 +2488 +2450 +3C50 +2420 +2420 +2450 +4488 +5504 +8A02 +ENDCHAR +STARTCHAR uni809F +ENCODING 32927 +BBX 15 15 0 -2 +BITMAP +3CFC +2400 +2400 +2400 +3DFE +2440 +2440 +2480 +3CFC +2404 +2404 +2404 +4404 +5428 +8810 +ENDCHAR +STARTCHAR uni80A0 +ENCODING 32928 +BBX 15 15 0 -2 +BITMAP +3DF8 +2410 +2420 +2440 +3C80 +25FE +2492 +2492 +3C92 +2512 +2522 +2622 +4442 +5494 +8908 +ENDCHAR +STARTCHAR uni80A1 +ENCODING 32929 +BBX 15 14 1 -1 +BITMAP +78F8 +4888 +4888 +4908 +7A0E +4C00 +49FC +4804 +7884 +4888 +4850 +4820 +88D8 +9B06 +ENDCHAR +STARTCHAR uni80A2 +ENCODING 32930 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4820 +4BFE +4820 +7820 +49FC +4804 +4888 +7888 +4850 +4820 +4850 +8888 +9B06 +ENDCHAR +STARTCHAR uni80A3 +ENCODING 32931 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2450 +2450 +2488 +3D44 +2622 +2420 +2400 +3DFC +2404 +2408 +2408 +4410 +5410 +8820 +ENDCHAR +STARTCHAR uni80A4 +ENCODING 32932 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4840 +4BFC +4840 +7840 +4840 +4840 +4FFE +7840 +48A0 +48A0 +4910 +8A08 +9C06 +ENDCHAR +STARTCHAR uni80A5 +ENCODING 32933 +BBX 15 14 1 -1 +BITMAP +79FC +4924 +4924 +4924 +7924 +4924 +49FC +4900 +7900 +4900 +4900 +4902 +8902 +98FE +ENDCHAR +STARTCHAR uni80A6 +ENCODING 32934 +BBX 15 16 0 -2 +BITMAP +0010 +3C50 +2450 +2450 +3488 +2C88 +2504 +26FA +2C48 +3448 +2448 +2448 +2488 +4488 +5528 +8A10 +ENDCHAR +STARTCHAR uni80A7 +ENCODING 32935 +BBX 15 14 1 -1 +BITMAP +7FFE +4820 +4820 +4840 +7840 +48D0 +4948 +4A44 +7C42 +4840 +4840 +4840 +8840 +9840 +ENDCHAR +STARTCHAR uni80A8 +ENCODING 32936 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2420 +25FC +2420 +3C20 +2420 +25FC +2420 +3C20 +2420 +27FE +2420 +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni80A9 +ENCODING 32937 +BBX 14 14 1 -1 +BITMAP +7FFC +0000 +3FF8 +2008 +3FF8 +2000 +2FF8 +2808 +2FF8 +2808 +4FF8 +4808 +8808 +0838 +ENDCHAR +STARTCHAR uni80AA +ENCODING 32938 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4820 +4BFE +4840 +7840 +4840 +487C +4844 +7844 +4844 +4884 +4884 +8904 +9A38 +ENDCHAR +STARTCHAR uni80AB +ENCODING 32939 +BBX 15 16 0 -2 +BITMAP +0040 +7840 +4840 +4BFC +4840 +7A48 +4A48 +4A48 +4A48 +7BF8 +4848 +4840 +4842 +4842 +483E +9800 +ENDCHAR +STARTCHAR uni80AC +ENCODING 32940 +BBX 15 15 1 -1 +BITMAP +0028 +7824 +4824 +4820 +4BFE +7820 +4820 +4820 +4830 +7850 +4850 +4890 +4892 +8912 +9A0E +ENDCHAR +STARTCHAR uni80AD +ENCODING 32941 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4820 +4BFE +4A22 +7A22 +4A22 +4A52 +4A52 +7A8A +4A02 +4A02 +4A02 +8A02 +9A0E +ENDCHAR +STARTCHAR uni80AE +ENCODING 32942 +BBX 15 16 0 -2 +BITMAP +0040 +3C20 +2400 +25FC +2400 +3C00 +24F0 +2490 +2490 +3C90 +2490 +2492 +2492 +4512 +550E +8A00 +ENDCHAR +STARTCHAR uni80AF +ENCODING 32943 +BBX 13 15 2 -1 +BITMAP +0200 +2200 +23E0 +2200 +FFF8 +0000 +3FE0 +2020 +3FE0 +2020 +2020 +3FE0 +2020 +2020 +20E0 +ENDCHAR +STARTCHAR uni80B0 +ENCODING 32944 +BBX 15 16 0 -2 +BITMAP +0020 +3C28 +2424 +2424 +2420 +3DFE +2420 +2420 +2420 +3C50 +2450 +2450 +2488 +4488 +5504 +8A02 +ENDCHAR +STARTCHAR uni80B1 +ENCODING 32945 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4840 +4BFE +4840 +7880 +4890 +4890 +4910 +7920 +4A28 +4C44 +4844 +887A +99C2 +ENDCHAR +STARTCHAR uni80B2 +ENCODING 32946 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0420 +08F0 +7F0C +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1010 +1070 +ENDCHAR +STARTCHAR uni80B3 +ENCODING 32947 +BBX 14 16 0 -2 +BITMAP +0080 +3C80 +2480 +24FC +2554 +3E54 +2454 +2494 +2494 +3D24 +2624 +2444 +2444 +4484 +5528 +8810 +ENDCHAR +STARTCHAR uni80B4 +ENCODING 32948 +BBX 14 15 1 -1 +BITMAP +0410 +0260 +0380 +3C70 +0200 +3FFC +0800 +1FF0 +2810 +CFF0 +0810 +0FF0 +0810 +0810 +0870 +ENDCHAR +STARTCHAR uni80B5 +ENCODING 32949 +BBX 15 16 0 -2 +BITMAP +0004 +3C0E +24F0 +2480 +2480 +3C80 +24FE +2488 +2488 +3C88 +2488 +2488 +2488 +4508 +5508 +8A08 +ENDCHAR +STARTCHAR uni80B6 +ENCODING 32950 +BBX 15 16 0 -2 +BITMAP +0010 +3D10 +2510 +2512 +2512 +3D14 +25D8 +2510 +2510 +3D10 +2510 +2512 +2552 +4592 +550E +8800 +ENDCHAR +STARTCHAR uni80B7 +ENCODING 32951 +BBX 15 16 0 -2 +BITMAP +0040 +3C40 +2440 +247C +2484 +3C88 +2520 +2420 +2420 +3C50 +2450 +2450 +2488 +4488 +5504 +8A02 +ENDCHAR +STARTCHAR uni80B8 +ENCODING 32952 +BBX 15 15 1 -1 +BITMAP +0030 +7810 +4910 +4908 +4A08 +7A04 +4C02 +4840 +4840 +7840 +4BFC +4840 +4840 +8840 +9840 +ENDCHAR +STARTCHAR uni80B9 +ENCODING 32953 +BBX 15 16 0 -2 +BITMAP +0048 +3C48 +2484 +2484 +2502 +3E00 +25FE +2440 +2480 +3CFC +2404 +2404 +2404 +4404 +5428 +8810 +ENDCHAR +STARTCHAR uni80BA +ENCODING 32954 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4FFE +4840 +4840 +7BFC +4A44 +4A44 +4A44 +7A44 +4A44 +4A4C +4840 +8840 +B840 +ENDCHAR +STARTCHAR uni80BB +ENCODING 32955 +BBX 13 16 1 -2 +BITMAP +0200 +03F0 +0200 +0200 +7FF8 +4008 +8010 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +2020 +20A0 +2040 +ENDCHAR +STARTCHAR uni80BC +ENCODING 32956 +BBX 15 16 0 -2 +BITMAP +0088 +7888 +4888 +4888 +4BFE +7888 +4888 +4888 +4FFE +7888 +4888 +4888 +4888 +4908 +4908 +9A08 +ENDCHAR +STARTCHAR uni80BD +ENCODING 32957 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2420 +2420 +2420 +3DFE +2420 +2420 +2420 +3C50 +2450 +2450 +2488 +44C8 +5524 +8A02 +ENDCHAR +STARTCHAR uni80BE +ENCODING 32958 +BBX 13 16 2 -2 +BITMAP +1000 +97E0 +9220 +9140 +9080 +9360 +9C18 +1000 +7FC0 +4040 +7FC0 +4040 +7FC0 +4040 +4140 +4080 +ENDCHAR +STARTCHAR uni80BF +ENCODING 32959 +BBX 14 16 0 -2 +BITMAP +0020 +3C20 +2420 +2420 +25FC +3D24 +2524 +2524 +2524 +3DFC +2524 +2420 +2420 +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni80C0 +ENCODING 32960 +BBX 15 16 0 -2 +BITMAP +0080 +3C84 +2484 +2488 +2490 +3CA0 +2480 +27FE +24A0 +3C90 +2490 +2488 +2484 +44A2 +54C0 +8880 +ENDCHAR +STARTCHAR uni80C1 +ENCODING 32961 +BBX 15 16 0 -2 +BITMAP +0080 +7880 +4880 +4880 +4BF0 +7890 +4890 +4A98 +4A94 +7C92 +4892 +4890 +4910 +4910 +4A50 +9C20 +ENDCHAR +STARTCHAR uni80C2 +ENCODING 32962 +BBX 14 16 0 -2 +BITMAP +0020 +3C20 +2420 +25FC +2524 +3D24 +2524 +25FC +2524 +3D24 +2524 +25FC +2524 +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni80C3 +ENCODING 32963 +BBX 11 14 3 -1 +BITMAP +FFE0 +8420 +FFE0 +8420 +FFE0 +0000 +7FC0 +4040 +7FC0 +4040 +7FC0 +4040 +4040 +41C0 +ENDCHAR +STARTCHAR uni80C4 +ENCODING 32964 +BBX 11 15 3 -1 +BITMAP +0400 +0400 +FFE0 +8420 +FFE0 +8420 +FFE0 +0000 +7FC0 +4040 +7FC0 +4040 +7FC0 +4040 +40C0 +ENDCHAR +STARTCHAR uni80C5 +ENCODING 32965 +BBX 15 15 1 -1 +BITMAP +0020 +7920 +4920 +49FC +4A20 +7820 +4820 +4820 +4BFE +7820 +4850 +4850 +4888 +8904 +9A02 +ENDCHAR +STARTCHAR uni80C6 +ENCODING 32966 +BBX 15 14 1 -1 +BITMAP +79F8 +4908 +4908 +4908 +7908 +49F8 +4908 +4908 +7908 +4908 +49F8 +4800 +8800 +9BFE +ENDCHAR +STARTCHAR uni80C7 +ENCODING 32967 +BBX 15 16 0 -2 +BITMAP +0050 +3C50 +2450 +25FC +2454 +3C54 +25FC +2550 +2550 +3DFE +2452 +2452 +245A +4494 +5490 +8910 +ENDCHAR +STARTCHAR uni80C8 +ENCODING 32968 +BBX 15 16 0 -2 +BITMAP +0050 +3C48 +2448 +2440 +25FE +3C40 +2440 +247C +24A4 +3CA4 +24A8 +2528 +2510 +4628 +5444 +8882 +ENDCHAR +STARTCHAR uni80C9 +ENCODING 32969 +BBX 14 16 0 -2 +BITMAP +0010 +3C10 +2420 +24FC +2484 +3C84 +2484 +2484 +24FC +3C84 +2484 +2484 +2484 +4484 +54FC +8884 +ENDCHAR +STARTCHAR uni80CA +ENCODING 32970 +BBX 15 15 1 -1 +BITMAP +0100 +7900 +4900 +4BFE +4A02 +7C02 +49F2 +4912 +4912 +7912 +49F2 +4802 +4804 +8804 +9838 +ENDCHAR +STARTCHAR uni80CB +ENCODING 32971 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2420 +2420 +243E +3C20 +2420 +2420 +25FC +3D04 +2504 +2504 +2504 +4504 +55FC +8904 +ENDCHAR +STARTCHAR uni80CC +ENCODING 32972 +BBX 15 15 1 -1 +BITMAP +0480 +048C +FCF0 +0482 +1C82 +E47E +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1010 +1070 +ENDCHAR +STARTCHAR uni80CD +ENCODING 32973 +BBX 15 16 0 -2 +BITMAP +0008 +781C +49F0 +4950 +4950 +7950 +4950 +4950 +4950 +7948 +4948 +4968 +4954 +4A74 +4A52 +9C00 +ENDCHAR +STARTCHAR uni80CE +ENCODING 32974 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4840 +4888 +4884 +791E +4FE2 +4800 +4800 +79FC +4904 +4904 +4904 +8904 +99FC +ENDCHAR +STARTCHAR uni80CF +ENCODING 32975 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +242E +25F0 +2520 +3D20 +2520 +25FE +2422 +3C62 +24A2 +252A +2624 +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni80D0 +ENCODING 32976 +BBX 14 16 0 -2 +BITMAP +0020 +3C20 +2524 +2524 +3524 +2D24 +25FC +2420 +2C20 +3524 +2524 +2524 +2524 +4524 +55FC +8804 +ENDCHAR +STARTCHAR uni80D1 +ENCODING 32977 +BBX 15 15 0 -2 +BITMAP +3C00 +24FC +2484 +2484 +3C84 +2484 +2484 +24FC +3C84 +2400 +2448 +2444 +4484 +5482 +8902 +ENDCHAR +STARTCHAR uni80D2 +ENCODING 32978 +BBX 15 15 0 -2 +BITMAP +3CFC +2484 +2484 +2484 +3CFC +2480 +24A0 +24A2 +3CA4 +24B8 +24A0 +24A2 +4522 +551E +8A00 +ENDCHAR +STARTCHAR uni80D3 +ENCODING 32979 +BBX 15 15 0 -2 +BITMAP +3DFC +2420 +2420 +2524 +3CA4 +24A8 +2420 +27FE +3C20 +2420 +2420 +2420 +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni80D4 +ENCODING 32980 +BBX 14 16 0 -2 +BITMAP +0880 +0888 +2E90 +28E0 +2884 +2E84 +F07C +0100 +3FF8 +2288 +2448 +2928 +2108 +2288 +2448 +2018 +ENDCHAR +STARTCHAR uni80D5 +ENCODING 32981 +BBX 15 15 1 -1 +BITMAP +0088 +7888 +4888 +4908 +497E +7B08 +4D08 +4948 +4928 +7928 +4908 +4908 +4908 +8908 +9938 +ENDCHAR +STARTCHAR uni80D6 +ENCODING 32982 +BBX 15 15 1 -1 +BITMAP +0020 +7928 +4924 +4A22 +4820 +79FC +4820 +4820 +4820 +7BFE +4820 +4820 +4820 +8820 +9820 +ENDCHAR +STARTCHAR uni80D7 +ENCODING 32983 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +48A0 +4910 +4A08 +7C44 +4882 +4B10 +4820 +78C0 +4B04 +4808 +4810 +8860 +9B80 +ENDCHAR +STARTCHAR uni80D8 +ENCODING 32984 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4820 +4BFE +4820 +7840 +4848 +4888 +4890 +7850 +4820 +4824 +4844 +889A +9BE2 +ENDCHAR +STARTCHAR uni80D9 +ENCODING 32985 +BBX 15 15 1 -1 +BITMAP +0080 +7880 +4880 +49FE +4940 +7A40 +4C40 +487C +4840 +7840 +4840 +487C +4840 +8840 +9840 +ENDCHAR +STARTCHAR uni80DA +ENCODING 32986 +BBX 15 14 1 -1 +BITMAP +79FC +4810 +4810 +4820 +7820 +4868 +48A8 +4924 +7A22 +4820 +4820 +4820 +8800 +9BFE +ENDCHAR +STARTCHAR uni80DB +ENCODING 32987 +BBX 14 14 1 -1 +BITMAP +7BFC +4A44 +4A44 +4A44 +7BFC +4A44 +4A44 +4A44 +7BFC +4840 +4840 +4840 +8840 +9840 +ENDCHAR +STARTCHAR uni80DC +ENCODING 32988 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +4920 +4920 +49FC +7920 +4A20 +4820 +4820 +79FC +4820 +4820 +4820 +4820 +4BFE +9800 +ENDCHAR +STARTCHAR uni80DD +ENCODING 32989 +BBX 15 15 1 -1 +BITMAP +001C +79F0 +4910 +4910 +4910 +79FE +4910 +4910 +4910 +7910 +49D0 +4B08 +480A +8BEA +9804 +ENDCHAR +STARTCHAR uni80DE +ENCODING 32990 +BBX 15 15 1 -1 +BITMAP +0100 +7900 +49FC +4904 +4904 +7BE4 +4A24 +4C24 +4824 +79E4 +4918 +4900 +4902 +8902 +98FE +ENDCHAR +STARTCHAR uni80DF +ENCODING 32991 +BBX 15 15 0 -2 +BITMAP +3CFC +2484 +24A4 +2494 +3C84 +2484 +27FE +2504 +3D44 +2524 +2504 +25FE +4404 +5428 +8810 +ENDCHAR +STARTCHAR uni80E0 +ENCODING 32992 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4820 +4BFC +4820 +7820 +4820 +4FFE +4840 +7840 +4850 +4888 +4884 +891E +9BE2 +ENDCHAR +STARTCHAR uni80E1 +ENCODING 32993 +BBX 14 15 1 -1 +BITMAP +1000 +10FC +1084 +FE84 +1084 +10FC +1084 +1084 +7C84 +44FC +4484 +4484 +4504 +7D04 +021C +ENDCHAR +STARTCHAR uni80E2 +ENCODING 32994 +BBX 15 15 0 -2 +BITMAP +3C00 +25FE +2408 +2408 +3DE8 +2528 +2528 +2528 +3D28 +25E8 +2528 +2408 +4408 +5428 +8810 +ENDCHAR +STARTCHAR uni80E3 +ENCODING 32995 +BBX 15 16 0 -2 +BITMAP +0080 +7880 +48FE +4900 +4A20 +7920 +492C +4974 +4BA4 +7924 +4934 +4928 +4922 +4902 +48FE +9800 +ENDCHAR +STARTCHAR uni80E4 +ENCODING 32996 +BBX 15 15 1 -1 +BITMAP +2210 +2210 +2490 +2910 +2690 +24D0 +3F30 +2010 +27D0 +2450 +27D0 +2450 +47D2 +4452 +84CE +ENDCHAR +STARTCHAR uni80E5 +ENCODING 32997 +BBX 14 14 2 -1 +BITMAP +FFF8 +0208 +23D0 +2200 +5A00 +87FC +8000 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +20E0 +ENDCHAR +STARTCHAR uni80E6 +ENCODING 32998 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4820 +49FC +4924 +7924 +4924 +4924 +4924 +7BFE +4820 +4850 +4888 +8904 +9A02 +ENDCHAR +STARTCHAR uni80E7 +ENCODING 32999 +BBX 15 16 0 -2 +BITMAP +0090 +7888 +4888 +4880 +4BFE +78A0 +48A0 +48A4 +48A4 +78A8 +4928 +4932 +4922 +4A62 +4A9E +9C00 +ENDCHAR +STARTCHAR uni80E8 +ENCODING 33000 +BBX 15 16 0 -2 +BITMAP +0040 +7840 +4840 +4FFE +4880 +7920 +4920 +4A20 +4BFC +7820 +4928 +4924 +4A22 +4C22 +48A0 +9840 +ENDCHAR +STARTCHAR uni80E9 +ENCODING 33001 +BBX 15 16 0 -2 +BITMAP +0040 +3C40 +2440 +247C +2440 +3C40 +2440 +27FE +2440 +3C40 +2450 +2448 +2444 +4440 +5440 +8840 +ENDCHAR +STARTCHAR uni80EA +ENCODING 33002 +BBX 14 16 0 -2 +BITMAP +0020 +3C20 +243C +2420 +2420 +3CFC +2484 +2484 +2484 +3CFC +2484 +2480 +2480 +4500 +5500 +8A00 +ENDCHAR +STARTCHAR uni80EB +ENCODING 33003 +BBX 15 15 0 -2 +BITMAP +79FC +4808 +4810 +4830 +7848 +4884 +4B02 +4800 +79FC +4820 +4820 +4820 +4820 +4BFE +9800 +ENDCHAR +STARTCHAR uni80EC +ENCODING 33004 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +FEFC +2244 +6428 +1810 +2428 +C2C6 +0100 +3FF8 +2288 +2448 +2108 +2288 +2448 +2018 +ENDCHAR +STARTCHAR uni80ED +ENCODING 33005 +BBX 14 15 0 -2 +BITMAP +3DFC +2504 +2524 +2524 +3D24 +25FC +2524 +2524 +3D54 +254C +258C +2504 +4504 +55FC +8904 +ENDCHAR +STARTCHAR uni80EE +ENCODING 33006 +BBX 15 16 0 -2 +BITMAP +0080 +7880 +48FC +4908 +4A90 +7860 +4998 +4E26 +4820 +79FC +4820 +4A20 +4BFE +4820 +4820 +9820 +ENDCHAR +STARTCHAR uni80EF +ENCODING 33007 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4FFE +4890 +4908 +7E06 +49F8 +4800 +4FFE +7840 +48FC +4904 +4804 +8804 +9838 +ENDCHAR +STARTCHAR uni80F0 +ENCODING 33008 +BBX 15 16 0 -2 +BITMAP +0040 +7840 +4FFC +4840 +4BF8 +7848 +4BF8 +4A40 +4BFC +7844 +4854 +48A8 +48A0 +4910 +4A08 +9C06 +ENDCHAR +STARTCHAR uni80F1 +ENCODING 33009 +BBX 15 15 1 -1 +BITMAP +0020 +7922 +4922 +48A4 +48A4 +7820 +4820 +4BFE +4850 +7850 +4850 +4890 +4892 +8912 +9A0E +ENDCHAR +STARTCHAR uni80F2 +ENCODING 33010 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4840 +4890 +7890 +4924 +4BE4 +4844 +7848 +4888 +4910 +4A30 +4848 +4884 +9B04 +ENDCHAR +STARTCHAR uni80F3 +ENCODING 33011 +BBX 15 15 1 -1 +BITMAP +0080 +7880 +49F8 +4908 +4B10 +7CA0 +4840 +48A0 +4918 +7E06 +49F8 +4908 +4908 +8908 +99F8 +ENDCHAR +STARTCHAR uni80F4 +ENCODING 33012 +BBX 14 14 1 -1 +BITMAP +7BFC +4A04 +4A04 +4AF4 +7A04 +4A04 +4AF4 +4A94 +7A94 +4A94 +4AF4 +4A04 +8A04 +9A1C +ENDCHAR +STARTCHAR uni80F5 +ENCODING 33013 +BBX 15 14 1 -1 +BITMAP +7BFC +4840 +4848 +4888 +7934 +4BC4 +4800 +4840 +7840 +4BFC +4840 +4840 +8840 +9FFE +ENDCHAR +STARTCHAR uni80F6 +ENCODING 33014 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4820 +4BFE +4800 +7888 +4904 +4A02 +4888 +7888 +4850 +4850 +4820 +4850 +4888 +9B06 +ENDCHAR +STARTCHAR uni80F7 +ENCODING 33015 +BBX 14 16 0 -2 +BITMAP +1000 +1FFC +2004 +5454 +9394 +1454 +1FF4 +0008 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni80F8 +ENCODING 33016 +BBX 15 15 1 -1 +BITMAP +0100 +7900 +4900 +4BFE +4A22 +7CA2 +4AAA +4A4A +4A6A +7A9A +4B0A +4BFA +4804 +8804 +9838 +ENDCHAR +STARTCHAR uni80F9 +ENCODING 33017 +BBX 14 15 0 -2 +BITMAP +3DFC +2420 +2420 +2440 +3DFC +2554 +2554 +2554 +3D54 +2554 +2554 +2554 +4544 +5514 +8908 +ENDCHAR +STARTCHAR uni80FA +ENCODING 33018 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4820 +4BFE +4A02 +7C44 +4840 +4BFE +4888 +7888 +4908 +48D0 +4820 +4850 +4888 +9B04 +ENDCHAR +STARTCHAR uni80FB +ENCODING 33019 +BBX 15 15 1 -1 +BITMAP +0080 +789C +4900 +4A00 +4C00 +7880 +48BE +4908 +4B08 +7D08 +4908 +4908 +4908 +8908 +9918 +ENDCHAR +STARTCHAR uni80FC +ENCODING 33020 +BBX 15 15 1 -1 +BITMAP +0108 +7888 +4890 +4800 +4BFC +7890 +4890 +4890 +4FFE +7890 +4890 +4890 +4910 +8910 +9A10 +ENDCHAR +STARTCHAR uni80FD +ENCODING 33021 +BBX 15 15 1 -1 +BITMAP +2080 +248C +4EF0 +F180 +0082 +7E82 +427E +4280 +7E8C +42F0 +4280 +7E80 +4282 +4282 +467E +ENDCHAR +STARTCHAR uni80FE +ENCODING 33022 +BBX 15 16 0 -2 +BITMAP +0820 +0828 +7F24 +0820 +FFFE +0020 +0824 +7F24 +4924 +5528 +6B28 +4910 +5512 +632A +4546 +4282 +ENDCHAR +STARTCHAR uni80FF +ENCODING 33023 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +25FC +2420 +2420 +3C20 +27FE +2400 +2420 +3C20 +25FC +2420 +2420 +4420 +57FE +8800 +ENDCHAR +STARTCHAR uni8100 +ENCODING 33024 +BBX 15 16 0 -2 +BITMAP +1FC0 +0044 +7D88 +0550 +0920 +3518 +C206 +3FF8 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1030 +ENDCHAR +STARTCHAR uni8101 +ENCODING 33025 +BBX 15 16 0 -2 +BITMAP +0050 +3C50 +2450 +2552 +34D4 +2C58 +2450 +2458 +2CD4 +3552 +2450 +2450 +2492 +4492 +5512 +8A0E +ENDCHAR +STARTCHAR uni8102 +ENCODING 33026 +BBX 14 15 1 -1 +BITMAP +0100 +7900 +4918 +49E0 +4904 +7904 +48FC +4800 +49F8 +7908 +4908 +49F8 +4908 +8908 +99F8 +ENDCHAR +STARTCHAR uni8103 +ENCODING 33027 +BBX 15 16 0 -2 +BITMAP +0080 +3C80 +24F8 +2508 +2610 +3DFC +2524 +2524 +2524 +3DFC +2500 +2500 +2502 +4502 +54FE +8800 +ENDCHAR +STARTCHAR uni8104 +ENCODING 33028 +BBX 15 16 0 -2 +BITMAP +0040 +7840 +4840 +4BFE +4880 +7890 +4890 +4912 +4952 +7954 +4A90 +4A28 +4C28 +4844 +4884 +9902 +ENDCHAR +STARTCHAR uni8105 +ENCODING 33029 +BBX 15 15 1 -1 +BITMAP +0100 +3FF8 +0608 +3870 +2010 +FCFE +4422 +88CC +3FF0 +2010 +3FF0 +2010 +3FF0 +2010 +2030 +ENDCHAR +STARTCHAR uni8106 +ENCODING 33030 +BBX 15 15 1 -1 +BITMAP +0080 +78F8 +4910 +4A10 +4FFE +7A00 +4A00 +4AF8 +4A88 +7A88 +4A88 +4A98 +4A82 +8C82 +987E +ENDCHAR +STARTCHAR uni8107 +ENCODING 33031 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4BF8 +4888 +4888 +7908 +4A30 +4A10 +4FFE +7A52 +4A52 +4A52 +4A52 +8A52 +BDA4 +ENDCHAR +STARTCHAR uni8108 +ENCODING 33032 +BBX 15 15 1 -1 +BITMAP +0030 +7BC0 +4A08 +4A10 +4AE0 +7A88 +4AC8 +4AD0 +4AA0 +7AA0 +4A90 +4A90 +4A88 +8A84 +9C82 +ENDCHAR +STARTCHAR uni8109 +ENCODING 33033 +BBX 15 15 1 -1 +BITMAP +00C0 +7820 +4810 +4800 +49E0 +7820 +4822 +4BA2 +48B4 +78A8 +4928 +4924 +4A24 +8822 +98E0 +ENDCHAR +STARTCHAR uni810A +ENCODING 33034 +BBX 15 15 1 -1 +BITMAP +0100 +793C +0280 +744C +0820 +3FF8 +D016 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1070 +ENDCHAR +STARTCHAR uni810B +ENCODING 33035 +BBX 13 15 1 -2 +BITMAP +3FE0 +0820 +08A0 +1040 +FDF8 +2488 +5528 +8A10 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +2060 +ENDCHAR +STARTCHAR uni810C +ENCODING 33036 +BBX 15 16 0 -2 +BITMAP +0080 +3C80 +24FE +2510 +2610 +3C10 +24FC +2490 +2490 +3C90 +27FE +2410 +2410 +4410 +5410 +8810 +ENDCHAR +STARTCHAR uni810D +ENCODING 33037 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +48A0 +4910 +4A08 +7C06 +4BF8 +4800 +4800 +7BFC +4880 +4890 +4908 +8A34 +9FC4 +ENDCHAR +STARTCHAR uni810E +ENCODING 33038 +BBX 15 16 0 -2 +BITMAP +0004 +7988 +4850 +4820 +4850 +7888 +4924 +4820 +4BFE +7820 +48A8 +48A4 +4922 +4A22 +48A0 +9840 +ENDCHAR +STARTCHAR uni810F +ENCODING 33039 +BBX 15 16 0 -2 +BITMAP +0020 +7810 +4810 +49FE +4900 +7910 +4910 +4910 +497C +7910 +4910 +4910 +4910 +4A10 +4AFE +9C00 +ENDCHAR +STARTCHAR uni8110 +ENCODING 33040 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4904 +4888 +7850 +4820 +48D8 +4B06 +7888 +4888 +4888 +4888 +4908 +4908 +9A08 +ENDCHAR +STARTCHAR uni8111 +ENCODING 33041 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4820 +4FFE +4800 +7800 +4890 +4A54 +4A24 +7A24 +4A54 +4A94 +4A04 +4A04 +4BFC +9804 +ENDCHAR +STARTCHAR uni8112 +ENCODING 33042 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2524 +24A4 +24A8 +3C20 +2420 +27FE +2470 +3CA8 +24A8 +2524 +2524 +4622 +5420 +8820 +ENDCHAR +STARTCHAR uni8113 +ENCODING 33043 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +4820 +4BFE +4A42 +7C44 +48A0 +48A2 +49A4 +7A98 +4C90 +4888 +4884 +48A2 +48C0 +9880 +ENDCHAR +STARTCHAR uni8114 +ENCODING 33044 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0440 +1450 +2548 +4104 +3FF8 +2288 +2448 +2928 +2108 +2288 +2448 +2008 +2018 +ENDCHAR +STARTCHAR uni8115 +ENCODING 33045 +BBX 15 16 0 -2 +BITMAP +0080 +3C80 +24F8 +2508 +2610 +3DFC +2524 +2524 +2524 +3DFC +2450 +2450 +2490 +4492 +5512 +8A0E +ENDCHAR +STARTCHAR uni8116 +ENCODING 33046 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4FFE +4840 +4840 +7BFC +4A04 +4A04 +49F8 +7810 +4820 +4FFE +4820 +8820 +98E0 +ENDCHAR +STARTCHAR uni8117 +ENCODING 33047 +BBX 14 16 0 -2 +BITMAP +0080 +3C80 +24FC +2554 +2654 +3CA4 +2524 +2644 +2494 +3D08 +25FC +2504 +2504 +4504 +55FC +8904 +ENDCHAR +STARTCHAR uni8118 +ENCODING 33048 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4BFC +4A04 +4A04 +79F8 +4800 +4800 +4FFE +7890 +4890 +4890 +4912 +8912 +9A0E +ENDCHAR +STARTCHAR uni8119 +ENCODING 33049 +BBX 15 16 0 -2 +BITMAP +0028 +3C24 +2424 +2420 +27FE +3C20 +2520 +24B2 +24B4 +3C68 +24A8 +2524 +2622 +4420 +54A0 +8840 +ENDCHAR +STARTCHAR uni811A +ENCODING 33050 +BBX 15 14 1 -1 +BITMAP +791E +4912 +4912 +4FD2 +7912 +4912 +4FF2 +4912 +7952 +4A52 +4AD2 +4F36 +8810 +B810 +ENDCHAR +STARTCHAR uni811B +ENCODING 33051 +BBX 15 14 1 -1 +BITMAP +79FC +4800 +4924 +4924 +7A48 +4924 +4924 +4800 +79FC +4820 +4820 +4820 +8820 +9BFE +ENDCHAR +STARTCHAR uni811C +ENCODING 33052 +BBX 15 15 0 -2 +BITMAP +3DFE +2410 +2420 +24FC +3C84 +2484 +24FC +2484 +3C84 +24FC +2484 +2484 +4484 +54FC +8884 +ENDCHAR +STARTCHAR uni811D +ENCODING 33053 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4800 +49F8 +7908 +4908 +49F8 +4800 +7BFC +4808 +4830 +4820 +4820 +48A0 +9840 +ENDCHAR +STARTCHAR uni811E +ENCODING 33054 +BBX 15 15 1 -1 +BITMAP +0040 +7948 +4948 +4948 +4948 +7AD4 +4A54 +4C62 +4840 +7840 +4BFC +4840 +4840 +8840 +9FFE +ENDCHAR +STARTCHAR uni811F +ENCODING 33055 +BBX 15 16 0 -2 +BITMAP +0004 +3C1E +25E0 +2422 +2512 +3C94 +2480 +2408 +25FE +3C08 +2488 +2448 +2448 +4408 +5428 +8810 +ENDCHAR +STARTCHAR uni8120 +ENCODING 33056 +BBX 15 16 0 -2 +BITMAP +0004 +780E +4BB8 +4888 +4888 +7928 +492E +4BA8 +48A8 +7AA8 +4AA8 +493E +4900 +4A80 +4C7E +9800 +ENDCHAR +STARTCHAR uni8121 +ENCODING 33057 +BBX 15 15 0 -2 +BITMAP +7806 +4BB8 +4888 +4888 +7908 +493E +4B88 +4888 +7A88 +4A88 +493E +4900 +4A80 +4C7E +9800 +ENDCHAR +STARTCHAR uni8122 +ENCODING 33058 +BBX 15 16 0 -2 +BITMAP +0080 +3C80 +24FE +2500 +26FC +3C84 +24A4 +2494 +27FE +3C84 +2524 +2514 +25FE +4404 +5428 +8810 +ENDCHAR +STARTCHAR uni8123 +ENCODING 33059 +BBX 15 15 1 -1 +BITMAP +3FFC +2000 +2FF8 +2000 +3FFC +4888 +4E70 +B00E +1FF8 +1008 +1FF8 +1008 +1FF8 +1008 +1038 +ENDCHAR +STARTCHAR uni8124 +ENCODING 33060 +BBX 15 14 1 -1 +BITMAP +7BFE +4A00 +4A00 +4AFC +7A00 +4A00 +4BFE +4A90 +7A92 +4A94 +4A88 +4C88 +88E4 +9982 +ENDCHAR +STARTCHAR uni8125 +ENCODING 33061 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +4820 +4BFE +4820 +7820 +4924 +4924 +4924 +7AAA +4820 +4850 +4850 +4888 +4904 +9A02 +ENDCHAR +STARTCHAR uni8126 +ENCODING 33062 +BBX 15 16 0 -2 +BITMAP +0010 +7814 +4812 +4810 +4BFE +7810 +4890 +4850 +4848 +7808 +4888 +4AA8 +4A9A +4AAA +4C66 +9802 +ENDCHAR +STARTCHAR uni8127 +ENCODING 33063 +BBX 15 15 1 -1 +BITMAP +0080 +7890 +4918 +4FE4 +4924 +7920 +4A3E +4C80 +48F8 +7908 +4B08 +4890 +4860 +88D8 +9B06 +ENDCHAR +STARTCHAR uni8128 +ENCODING 33064 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +27FE +2420 +2420 +3DFC +2524 +2524 +25FC +3C20 +2470 +24A8 +2524 +4622 +5420 +8820 +ENDCHAR +STARTCHAR uni8129 +ENCODING 33065 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +13FC +2608 +2910 +68E0 +AB18 +2C06 +2BF8 +2A08 +2BF8 +2A08 +2BF8 +2208 +2218 +ENDCHAR +STARTCHAR uni812A +ENCODING 33066 +BBX 15 16 0 -2 +BITMAP +00C2 +3C34 +2418 +2464 +2582 +3C20 +25FE +2450 +2490 +3DFE +2692 +2492 +249A +4494 +5410 +8810 +ENDCHAR +STARTCHAR uni812B +ENCODING 33067 +BBX 15 16 0 -2 +BITMAP +0010 +7890 +4888 +4908 +4A04 +7DFA +4908 +4908 +4908 +79F8 +4890 +4890 +4890 +4912 +4A12 +9C0E +ENDCHAR +STARTCHAR uni812C +ENCODING 33068 +BBX 15 15 1 -1 +BITMAP +001C +79E8 +4948 +4A24 +4A24 +7BFC +4808 +4810 +4820 +7FFE +4820 +4820 +4820 +8820 +98E0 +ENDCHAR +STARTCHAR uni812D +ENCODING 33069 +BBX 15 15 0 -2 +BITMAP +79FC +4904 +4904 +4904 +79FC +4800 +4800 +4BFE +7820 +4820 +49FC +4820 +4820 +4BFE +9800 +ENDCHAR +STARTCHAR uni812E +ENCODING 33070 +BBX 15 16 0 -2 +BITMAP +0008 +783C +4BC0 +4844 +4A24 +7928 +4900 +4840 +4BFE +7888 +4908 +4B90 +4860 +4850 +4988 +9E04 +ENDCHAR +STARTCHAR uni812F +ENCODING 33071 +BBX 15 15 1 -1 +BITMAP +0028 +7824 +4BFE +4820 +4820 +79FC +4924 +4924 +49FC +7924 +4924 +49FC +4924 +8924 +992C +ENDCHAR +STARTCHAR uni8130 +ENCODING 33072 +BBX 15 15 0 -2 +BITMAP +3DFE +2400 +2400 +24FC +3C84 +2484 +2484 +24FC +3C00 +2484 +2444 +2448 +4400 +55FE +8800 +ENDCHAR +STARTCHAR uni8131 +ENCODING 33073 +BBX 15 15 1 -1 +BITMAP +0108 +7888 +4890 +4BFC +4A04 +7A04 +4A04 +4BFC +4890 +7890 +4890 +4890 +4912 +8912 +9A0E +ENDCHAR +STARTCHAR uni8132 +ENCODING 33074 +BBX 15 15 0 -2 +BITMAP +7BFC +4A04 +4A04 +4BFC +7A00 +4A20 +4A22 +4BB2 +7AB4 +4AA8 +4AA8 +4D24 +4D24 +4AA2 +9840 +ENDCHAR +STARTCHAR uni8133 +ENCODING 33075 +BBX 15 15 1 -1 +BITMAP +0482 +7C42 +4A44 +4A08 +4800 +7A0A +4A0A +4A92 +4A52 +7A22 +4A52 +4A8A +4B02 +8A02 +9BFE +ENDCHAR +STARTCHAR uni8134 +ENCODING 33076 +BBX 15 15 0 -2 +BITMAP +3DFE +2410 +2420 +2468 +3CA4 +2522 +2420 +2400 +3CFC +2484 +2484 +2484 +4484 +54FC +8884 +ENDCHAR +STARTCHAR uni8135 +ENCODING 33077 +BBX 15 14 1 -1 +BITMAP +79FC +4904 +4904 +4904 +79FC +4800 +49FC +4820 +7820 +4BFE +4820 +4850 +8888 +9B06 +ENDCHAR +STARTCHAR uni8136 +ENCODING 33078 +BBX 15 15 0 -2 +BITMAP +79FC +4904 +4904 +4904 +79FC +4820 +4820 +4BFE +7A22 +4A52 +4A8A +4B0A +4A02 +4A0A +9A04 +ENDCHAR +STARTCHAR uni8137 +ENCODING 33079 +BBX 15 16 0 -2 +BITMAP +0042 +78E2 +4B82 +488A +488A +788A +4FEA +488A +498A +79CA +4AAA +4A82 +4C82 +4882 +488A +9884 +ENDCHAR +STARTCHAR uni8138 +ENCODING 33080 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +4850 +4850 +4888 +7904 +4AFA +4800 +4844 +7824 +4924 +48A8 +4888 +4810 +4BFE +9800 +ENDCHAR +STARTCHAR uni8139 +ENCODING 33081 +BBX 15 14 1 -1 +BITMAP +79FC +4900 +49F8 +4900 +79F8 +4900 +4900 +4FFE +7924 +4928 +4910 +4910 +89C8 +9F06 +ENDCHAR +STARTCHAR uni813A +ENCODING 33082 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4800 +4888 +7888 +4954 +4A22 +4800 +7820 +4BFE +4820 +4820 +4820 +4820 +9820 +ENDCHAR +STARTCHAR uni813B +ENCODING 33083 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +4BFE +4820 +49FC +7824 +4BFE +4824 +49FC +7820 +4920 +493E +4920 +4AA0 +4A7E +9C00 +ENDCHAR +STARTCHAR uni813C +ENCODING 33084 +BBX 15 15 0 -2 +BITMAP +7BFE +4820 +4820 +4BFE +7A22 +4A22 +4B32 +4AAA +7AAA +4B76 +4A66 +4A22 +4A22 +4A2A +9A04 +ENDCHAR +STARTCHAR uni813D +ENCODING 33085 +BBX 15 15 1 -1 +BITMAP +0044 +7844 +4888 +49FE +4B10 +7D10 +49FC +4910 +4910 +7910 +49FC +4910 +4910 +8910 +99FE +ENDCHAR +STARTCHAR uni813E +ENCODING 33086 +BBX 14 15 1 -1 +BITMAP +0040 +7880 +4BF8 +4A48 +4A48 +7BF8 +4A88 +4A88 +4BF8 +7920 +4A20 +4FFC +4820 +8820 +9820 +ENDCHAR +STARTCHAR uni813F +ENCODING 33087 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +27FE +2420 +2420 +3DFC +2420 +2420 +27FE +3C40 +24A4 +25A8 +2690 +4488 +54C6 +8880 +ENDCHAR +STARTCHAR uni8140 +ENCODING 33088 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +2450 +2488 +2504 +3EFA +2400 +25FC +2554 +3D54 +25FC +2554 +2554 +4554 +5504 +890C +ENDCHAR +STARTCHAR uni8141 +ENCODING 33089 +BBX 15 16 0 -2 +BITMAP +0084 +788C +4908 +4FBE +4908 +7908 +4908 +4908 +4FBE +7908 +4908 +4908 +4908 +4A08 +AA08 +9408 +ENDCHAR +STARTCHAR uni8142 +ENCODING 33090 +BBX 15 15 0 -2 +BITMAP +3DFC +2524 +2524 +25FC +3D24 +2524 +25FC +2420 +3FFE +2470 +24A8 +2524 +4622 +5420 +8820 +ENDCHAR +STARTCHAR uni8143 +ENCODING 33091 +BBX 15 16 0 -2 +BITMAP +0020 +3D24 +24A8 +2420 +25FC +3C40 +27FE +2488 +2504 +3EFA +2488 +2488 +24A8 +4492 +5482 +887E +ENDCHAR +STARTCHAR uni8144 +ENCODING 33092 +BBX 15 16 0 -2 +BITMAP +0008 +3C3C +25E0 +2420 +27FE +3CA8 +24A8 +24A8 +27FE +3CA8 +24A8 +27FE +2420 +4420 +55FC +8800 +ENDCHAR +STARTCHAR uni8145 +ENCODING 33093 +BBX 15 16 0 -2 +BITMAP +0020 +3CA2 +24A2 +2524 +2450 +3C88 +2704 +2422 +2420 +3CA4 +24A4 +2528 +2450 +4488 +5504 +8A02 +ENDCHAR +STARTCHAR uni8146 +ENCODING 33094 +BBX 15 15 1 -1 +BITMAP +00A0 +78A0 +48A0 +4BF8 +4AA8 +7AA8 +4BF8 +4AA8 +4AA8 +7AA8 +4FFE +4800 +4910 +8A08 +9C04 +ENDCHAR +STARTCHAR uni8147 +ENCODING 33095 +BBX 15 16 0 -2 +BITMAP +001C +79E0 +4820 +4820 +4BFE +78A8 +4924 +4A42 +4840 +7BFE +4888 +4908 +48D0 +4830 +4848 +9984 +ENDCHAR +STARTCHAR uni8148 +ENCODING 33096 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +4BFE +4820 +49FC +7820 +4BFE +4800 +49FC +7904 +49FC +4904 +49FC +4904 +4914 +9908 +ENDCHAR +STARTCHAR uni8149 +ENCODING 33097 +BBX 15 15 0 -2 +BITMAP +7840 +4B9C +4A04 +4A04 +7B9C +4A04 +4A04 +4BFC +7890 +4890 +4890 +4890 +4912 +4A12 +9C0E +ENDCHAR +STARTCHAR uni814A +ENCODING 33098 +BBX 15 15 1 -1 +BITMAP +0090 +7890 +4BFC +4890 +4890 +7890 +4FFE +4800 +49F8 +7908 +4908 +49F8 +4908 +8908 +99F8 +ENDCHAR +STARTCHAR uni814B +ENCODING 33099 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4FFE +4920 +4920 +793C +4A24 +4A64 +4E54 +7AC8 +4A28 +4A10 +4A28 +8A44 +9A82 +ENDCHAR +STARTCHAR uni814C +ENCODING 33100 +BBX 15 16 0 -2 +BITMAP +0040 +7880 +4BFC +4910 +4A48 +7C46 +4BF8 +4A48 +4A48 +7BF8 +4A48 +4A48 +4BF8 +4842 +4842 +983E +ENDCHAR +STARTCHAR uni814D +ENCODING 33101 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +4850 +4888 +4944 +7A22 +49F8 +4808 +4850 +7820 +48A4 +4A82 +4A8A +4A8A +4C78 +9800 +ENDCHAR +STARTCHAR uni814E +ENCODING 33102 +BBX 15 14 1 -1 +BITMAP +FEFC +9044 +FC44 +8428 +FC30 +9048 +FFF6 +2010 +3FF0 +2010 +3FF0 +2010 +2010 +2070 +ENDCHAR +STARTCHAR uni814F +ENCODING 33103 +BBX 15 15 0 -2 +BITMAP +7BDE +4842 +494A +4884 +794A +4A52 +4C20 +4800 +7BDE +4852 +4952 +4894 +4948 +4A54 +9C22 +ENDCHAR +STARTCHAR uni8150 +ENCODING 33104 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +7FFE +4408 +49FE +7888 +4848 +4898 +5FFC +5144 +5224 +9084 +9144 +1224 +100C +ENDCHAR +STARTCHAR uni8151 +ENCODING 33105 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4BFE +4A00 +4A44 +7A44 +4AFE +4A84 +4BA4 +7A94 +4A94 +4A84 +4A84 +8A84 +8C9C +ENDCHAR +STARTCHAR uni8152 +ENCODING 33106 +BBX 15 15 0 -2 +BITMAP +3DFC +2504 +2504 +25FC +3D10 +2510 +25FE +2510 +3D10 +257C +2544 +2544 +4544 +557C +8A44 +ENDCHAR +STARTCHAR uni8153 +ENCODING 33107 +BBX 15 15 1 -1 +BITMAP +0090 +7890 +4890 +4F9E +4890 +7890 +4F9E +4890 +4890 +7990 +4E9E +4890 +4910 +8910 +9A10 +ENDCHAR +STARTCHAR uni8154 +ENCODING 33108 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4BFC +4A04 +4AA4 +7AA0 +4922 +4E1C +4800 +7800 +49F8 +4840 +4840 +8840 +9BFC +ENDCHAR +STARTCHAR uni8155 +ENCODING 33109 +BBX 15 15 1 -1 +BITMAP +0040 +7040 +57FC +5404 +5404 +7200 +53BC +54A4 +54A4 +7AA4 +51AC +5120 +5122 +9222 +B41E +ENDCHAR +STARTCHAR uni8156 +ENCODING 33110 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +4BFE +4820 +49FC +7924 +49FC +4924 +49FC +7820 +4870 +48A8 +4924 +4E22 +4820 +9820 +ENDCHAR +STARTCHAR uni8157 +ENCODING 33111 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +25FC +2524 +2524 +3DFC +2524 +2524 +25FC +3C00 +27FE +2488 +2488 +4488 +5508 +8A08 +ENDCHAR +STARTCHAR uni8158 +ENCODING 33112 +BBX 15 15 0 -2 +BITMAP +7BFE +4A02 +4A02 +4BFE +7A22 +4A22 +4AFA +4A22 +7A32 +4A2A +4BFE +4A02 +4A02 +4BFE +9A02 +ENDCHAR +STARTCHAR uni8159 +ENCODING 33113 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4A02 +4800 +79FC +4800 +4800 +4BFE +7820 +4928 +4924 +4A22 +4C22 +48A0 +9840 +ENDCHAR +STARTCHAR uni815A +ENCODING 33114 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4A02 +4C04 +7800 +4BFE +4820 +4820 +7920 +493C +4920 +4AA0 +4A60 +4C3E +9800 +ENDCHAR +STARTCHAR uni815B +ENCODING 33115 +BBX 15 15 0 -2 +BITMAP +3DFE +2502 +2502 +25FE +3D00 +25FC +2520 +2544 +3DFE +2512 +2510 +25FC +4510 +5610 +89FE +ENDCHAR +STARTCHAR uni815C +ENCODING 33116 +BBX 15 16 0 -2 +BITMAP +0088 +3C88 +27FE +2488 +2488 +3CF8 +2488 +2488 +24F8 +3C20 +27FE +2470 +24A8 +4524 +5622 +8820 +ENDCHAR +STARTCHAR uni815D +ENCODING 33117 +BBX 15 15 0 -2 +BITMAP +3DFC +2420 +2440 +25FC +3D54 +2554 +2554 +2544 +3D2C +2420 +27FE +2450 +4488 +5504 +8A02 +ENDCHAR +STARTCHAR uni815E +ENCODING 33118 +BBX 15 16 0 -2 +BITMAP +0040 +3C7C +2484 +24F8 +2408 +3DFE +2440 +24A4 +2538 +3C58 +2494 +2534 +2454 +4492 +5550 +8820 +ENDCHAR +STARTCHAR uni815F +ENCODING 33119 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4BFE +4A02 +4A02 +79FC +4840 +4888 +49F4 +7820 +4820 +49FC +4820 +8820 +9BFE +ENDCHAR +STARTCHAR uni8160 +ENCODING 33120 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4BFC +4840 +49F8 +78A0 +4FFE +4910 +4A08 +7DF6 +4840 +4FFC +48A0 +8918 +9E06 +ENDCHAR +STARTCHAR uni8161 +ENCODING 33121 +BBX 15 15 0 -2 +BITMAP +79FC +4904 +4904 +49E4 +7924 +4924 +4BFE +4A02 +7AFA +4A8A +4A8A +4AFA +4A02 +4A0A +9A04 +ENDCHAR +STARTCHAR uni8162 +ENCODING 33122 +BBX 15 16 0 -2 +BITMAP +01FC +7924 +4924 +49FC +4924 +7924 +49FC +4820 +4820 +7BFE +4A22 +4A2A +4AFA +4A0A +4A02 +9A06 +ENDCHAR +STARTCHAR uni8163 +ENCODING 33123 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +49FC +4800 +4888 +7850 +4BFE +4A22 +4C24 +79FC +4924 +4924 +4934 +4928 +4820 +9820 +ENDCHAR +STARTCHAR uni8164 +ENCODING 33124 +BBX 15 16 0 -2 +BITMAP +0020 +3C10 +25FE +2400 +2484 +3C48 +25FE +2400 +24FC +3C84 +2484 +24FC +2484 +4484 +54FC +8884 +ENDCHAR +STARTCHAR uni8165 +ENCODING 33125 +BBX 15 14 1 -1 +BITMAP +7BF8 +4A08 +4BF8 +4A08 +7A08 +4BF8 +4A40 +4BFC +7C40 +4840 +4BF8 +4840 +8840 +9FFE +ENDCHAR +STARTCHAR uni8166 +ENCODING 33126 +BBX 15 15 1 -1 +BITMAP +0092 +7924 +4A48 +4924 +4892 +7840 +4BFE +4A0A +4A8A +7A52 +4A22 +4A52 +4B8A +8A02 +9BFE +ENDCHAR +STARTCHAR uni8167 +ENCODING 33127 +BBX 15 15 1 -1 +BITMAP +01C0 +7860 +4890 +4908 +4E06 +79F8 +4800 +4BCA +4A4A +7B54 +4AD4 +4B54 +4AD4 +8A4A +9ACA +ENDCHAR +STARTCHAR uni8168 +ENCODING 33128 +BBX 15 15 1 -1 +BITMAP +0020 +7A22 +4A22 +4A22 +4BFE +7800 +4BFE +4820 +4840 +7BFE +4A52 +4A52 +4A52 +8A52 +9A56 +ENDCHAR +STARTCHAR uni8169 +ENCODING 33129 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4FFE +4840 +4840 +7BFC +4B14 +4AA4 +4BF4 +7A44 +4A44 +4BF4 +4A44 +8A44 +9A4C +ENDCHAR +STARTCHAR uni816A +ENCODING 33130 +BBX 15 15 0 -2 +BITMAP +7BFE +4A22 +4820 +4BFE +7820 +49FC +4924 +49FC +7924 +49FC +4820 +4BFE +4820 +4820 +9820 +ENDCHAR +STARTCHAR uni816B +ENCODING 33131 +BBX 15 15 1 -1 +BITMAP +001C +79E0 +4820 +4BFE +4820 +79FC +4924 +49FC +4924 +79FC +4820 +49FC +4820 +8820 +9BFE +ENDCHAR +STARTCHAR uni816C +ENCODING 33132 +BBX 15 15 0 -2 +BITMAP +3CFC +2448 +2430 +25FE +3C52 +2494 +2510 +2630 +3C20 +25FE +2470 +24A8 +4524 +5622 +8820 +ENDCHAR +STARTCHAR uni816D +ENCODING 33133 +BBX 15 14 1 -1 +BITMAP +7BDE +4A52 +4A52 +4BDE +7800 +49F8 +4800 +4FFE +7880 +49FC +4904 +4804 +8804 +9838 +ENDCHAR +STARTCHAR uni816E +ENCODING 33134 +BBX 15 14 1 -1 +BITMAP +79FC +4924 +4924 +49FC +7924 +4924 +4924 +49FC +7820 +4A94 +4A94 +4A82 +8C8A +9878 +ENDCHAR +STARTCHAR uni816F +ENCODING 33135 +BBX 15 16 0 -2 +BITMAP +0004 +3C1E +25F0 +2510 +2510 +3DFE +2510 +257C +2544 +3D7C +2544 +257C +2544 +4544 +557C +8A44 +ENDCHAR +STARTCHAR uni8170 +ENCODING 33136 +BBX 15 14 1 -1 +BITMAP +7BFE +4890 +4BFC +4A94 +7A94 +4BFC +4840 +4840 +7FFE +4888 +4908 +4BD0 +8870 +9B8C +ENDCHAR +STARTCHAR uni8171 +ENCODING 33137 +BBX 15 15 1 -1 +BITMAP +0010 +7710 +517C +5214 +54FE +7714 +517C +5110 +557C +7510 +52FE +5210 +5210 +9580 +B87E +ENDCHAR +STARTCHAR uni8172 +ENCODING 33138 +BBX 15 15 0 -2 +BITMAP +3DFC +2524 +2524 +25FC +3D24 +2524 +25FC +2400 +3FFE +2520 +2522 +2514 +4548 +5584 +8902 +ENDCHAR +STARTCHAR uni8173 +ENCODING 33139 +BBX 15 15 0 -2 +BITMAP +7A9E +4A52 +4A52 +4D52 +7912 +4A92 +4A52 +4C32 +7BD2 +4A5A +4A54 +4A50 +4A50 +4BD0 +9A50 +ENDCHAR +STARTCHAR uni8174 +ENCODING 33140 +BBX 15 15 1 -1 +BITMAP +0020 +78A0 +4B2E +4A22 +4A22 +7BAE +4A22 +4A22 +4BAE +7820 +4850 +4850 +4888 +8904 +9A02 +ENDCHAR +STARTCHAR uni8175 +ENCODING 33141 +BBX 15 15 0 -2 +BITMAP +7BDE +4A42 +4A42 +4A42 +7BDE +4A00 +4A3E +4BD2 +7A12 +4A14 +4BD4 +4A08 +4A14 +4A24 +9A42 +ENDCHAR +STARTCHAR uni8176 +ENCODING 33142 +BBX 15 16 0 -2 +BITMAP +0020 +3DDC +2514 +2514 +2514 +3DD4 +2526 +2500 +25DC +3D14 +2514 +25D4 +2708 +4508 +5514 +8922 +ENDCHAR +STARTCHAR uni8177 +ENCODING 33143 +BBX 14 15 0 -2 +BITMAP +3DFC +2400 +24F8 +2488 +3C88 +24F8 +2400 +25FC +3D24 +2524 +25FC +2524 +4524 +55FC +8904 +ENDCHAR +STARTCHAR uni8178 +ENCODING 33144 +BBX 15 14 1 -1 +BITMAP +79F8 +4908 +49F8 +4908 +79F8 +4800 +4FFE +4880 +79FE +4E4A +4992 +4E22 +8842 +999C +ENDCHAR +STARTCHAR uni8179 +ENCODING 33145 +BBX 15 15 1 -1 +BITMAP +0080 +7880 +49FE +4A00 +4DFC +7904 +49FC +4904 +49FC +7880 +48FC +4B04 +4888 +8870 +9B8E +ENDCHAR +STARTCHAR uni817A +ENCODING 33146 +BBX 15 15 1 -1 +BITMAP +0020 +7840 +4BF8 +4A08 +4BF8 +7A08 +4A08 +4BF8 +4844 +7B68 +4950 +4950 +4A48 +8C46 +98C0 +ENDCHAR +STARTCHAR uni817B +ENCODING 33147 +BBX 15 16 0 -2 +BITMAP +0018 +7814 +4FFE +4810 +4BD0 +7810 +4BF0 +4810 +4BE8 +7A28 +4AA8 +4AA8 +4AAA +494A +4A26 +9C22 +ENDCHAR +STARTCHAR uni817C +ENCODING 33148 +BBX 15 15 0 -2 +BITMAP +3DFE +2420 +2440 +25FC +3D54 +2554 +2574 +2554 +3D54 +2574 +2554 +2554 +4554 +55FC +8904 +ENDCHAR +STARTCHAR uni817D +ENCODING 33149 +BBX 15 15 0 -2 +BITMAP +3CF8 +2488 +2488 +24F8 +3C88 +2488 +24F8 +2400 +3DFC +2554 +2554 +2554 +4554 +57FE +8800 +ENDCHAR +STARTCHAR uni817E +ENCODING 33150 +BBX 15 16 0 -2 +BITMAP +0248 +7948 +4950 +4FFC +4840 +7FFE +4910 +4A08 +4DF6 +7810 +4910 +49FC +4804 +4BE4 +4814 +9808 +ENDCHAR +STARTCHAR uni817F +ENCODING 33151 +BBX 15 15 1 -1 +BITMAP +0200 +797C +48C4 +4C44 +4A7C +7944 +4844 +4F7C +4952 +7954 +4948 +4954 +4962 +8A80 +BC7E +ENDCHAR +STARTCHAR uni8180 +ENCODING 33152 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4BFE +4888 +4850 +7BFE +4A02 +4820 +4BFE +7840 +487C +4844 +4884 +8904 +9A38 +ENDCHAR +STARTCHAR uni8181 +ENCODING 33153 +BBX 15 15 1 -1 +BITMAP +0088 +7910 +4FFE +48A0 +4BFC +78A4 +4FFE +48A4 +48A4 +7BFC +48A0 +49B0 +4AA8 +8CA6 +98A0 +ENDCHAR +STARTCHAR uni8182 +ENCODING 33154 +BBX 15 15 1 -1 +BITMAP +1040 +FEFE +2100 +3CF8 +2492 +4494 +5CE8 +8184 +1FF2 +1010 +1FF0 +1010 +1FF0 +1010 +1070 +ENDCHAR +STARTCHAR uni8183 +ENCODING 33155 +BBX 15 14 1 -1 +BITMAP +79FC +4924 +4924 +4924 +7954 +498C +49FC +4800 +79FC +4954 +4954 +4954 +8954 +9FFE +ENDCHAR +STARTCHAR uni8184 +ENCODING 33156 +BBX 15 15 1 -1 +BITMAP +0020 +78A0 +4B2E +4A22 +4BAE +7A22 +4A22 +4BAE +4800 +7FFE +4904 +4888 +4870 +88D8 +9F06 +ENDCHAR +STARTCHAR uni8185 +ENCODING 33157 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4BFE +4A20 +4AFC +7A24 +4BFE +4A24 +4AFC +7A20 +4AFC +4A84 +4C84 +8884 +98FC +ENDCHAR +STARTCHAR uni8186 +ENCODING 33158 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +4BFE +4820 +49FC +7820 +4BFE +4840 +4888 +79F0 +4824 +4BFE +4822 +4924 +4AA2 +9840 +ENDCHAR +STARTCHAR uni8187 +ENCODING 33159 +BBX 15 16 0 -2 +BITMAP +0010 +7A20 +497C +4944 +4844 +787C +4B40 +4940 +497C +7944 +4944 +497C +4944 +4A80 +4C7E +9800 +ENDCHAR +STARTCHAR uni8188 +ENCODING 33160 +BBX 15 14 1 -1 +BITMAP +7BFE +4800 +49FC +4904 +79FC +4800 +4BFE +4A52 +7A92 +4B1E +4A02 +4AFA +8A22 +9A26 +ENDCHAR +STARTCHAR uni8189 +ENCODING 33161 +BBX 15 16 0 -2 +BITMAP +0104 +3C84 +2488 +2400 +27FE +3C00 +2488 +2504 +2602 +3DFC +2554 +2554 +2554 +4554 +57FE +8800 +ENDCHAR +STARTCHAR uni818A +ENCODING 33162 +BBX 15 15 1 -1 +BITMAP +0050 +7848 +4FFE +4840 +4BFC +7A44 +4BFC +4A44 +4BFC +7A44 +4808 +4FFE +4908 +8888 +9838 +ENDCHAR +STARTCHAR uni818B +ENCODING 33163 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +4D28 +1450 +2288 +7FFE +4002 +9FF4 +1010 +1FF0 +1010 +1FF0 +1010 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni818C +ENCODING 33164 +BBX 15 16 0 -2 +BITMAP +0020 +3D24 +24A8 +2554 +2488 +3D04 +26FA +2488 +2488 +3CF8 +2488 +2488 +24F8 +4488 +5488 +8898 +ENDCHAR +STARTCHAR uni818D +ENCODING 33165 +BBX 15 16 0 -2 +BITMAP +0020 +3C40 +25FC +2504 +2554 +3D24 +2554 +2504 +25FC +3C00 +2512 +25D4 +2518 +4552 +5592 +890E +ENDCHAR +STARTCHAR uni818E +ENCODING 33166 +BBX 15 16 0 -2 +BITMAP +001E +7BE0 +4922 +4894 +4840 +7888 +49F0 +4820 +48C4 +79FE +4822 +4820 +4BFE +4850 +4888 +9B06 +ENDCHAR +STARTCHAR uni818F +ENCODING 33167 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +FFFC +2010 +3FF0 +0000 +FFFC +A014 +BFF4 +0000 +3FF0 +2010 +3FF0 +2010 +2070 +ENDCHAR +STARTCHAR uni8190 +ENCODING 33168 +BBX 15 16 0 -2 +BITMAP +2040 +FEFE +2100 +3C1C +24E0 +4494 +54A8 +88C6 +0100 +3FF8 +2288 +2448 +2108 +2288 +2448 +2018 +ENDCHAR +STARTCHAR uni8191 +ENCODING 33169 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4A02 +4C14 +79E0 +4900 +4900 +49FC +7910 +4910 +4FFE +4800 +4890 +4908 +9A04 +ENDCHAR +STARTCHAR uni8192 +ENCODING 33170 +BBX 15 15 0 -2 +BITMAP +7BFE +4A00 +4A7C +4A44 +7A44 +4A7C +4A00 +4AEE +7AAA +4AAA +4AAA +4AEE +4A00 +4BFE +9800 +ENDCHAR +STARTCHAR uni8193 +ENCODING 33171 +BBX 15 15 1 -1 +BITMAP +0100 +7BFC +4C00 +49F8 +4908 +79F8 +4908 +49F8 +4800 +7FFE +4900 +4BFC +4C94 +8B24 +984C +ENDCHAR +STARTCHAR uni8194 +ENCODING 33172 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4A50 +4A50 +7BFE +4A52 +4A52 +4BFE +7A00 +4A92 +4AD4 +4A98 +4A92 +4AD2 +9C8E +ENDCHAR +STARTCHAR uni8195 +ENCODING 33173 +BBX 15 14 1 -1 +BITMAP +77FE +542A +542A +57FE +7422 +55EA +556A +555A +75DA +5412 +55D6 +542A +94CA +B7FE +ENDCHAR +STARTCHAR uni8196 +ENCODING 33174 +BBX 15 16 0 -2 +BITMAP +0020 +7A20 +497C +48A4 +4818 +78E6 +4B10 +497E +4910 +797C +4910 +49FE +4910 +4910 +4AFE +9C00 +ENDCHAR +STARTCHAR uni8197 +ENCODING 33175 +BBX 15 16 0 -2 +BITMAP +0020 +7A22 +4BFE +4890 +4888 +79FE +4B10 +4D10 +49FE +7910 +4910 +49FE +4910 +4910 +49FE +9900 +ENDCHAR +STARTCHAR uni8198 +ENCODING 33176 +BBX 15 14 1 -1 +BITMAP +7BFE +4850 +49FC +4954 +7954 +49FC +4800 +49FC +7800 +4BFE +4820 +48A8 +8B26 +9860 +ENDCHAR +STARTCHAR uni8199 +ENCODING 33177 +BBX 15 15 0 -2 +BITMAP +7BBE +48A2 +48A2 +48BE +7B88 +4A08 +4A3E +4A2A +7BAA +48AA +48BE +4888 +488A +4D7E +9A02 +ENDCHAR +STARTCHAR uni819A +ENCODING 33178 +BBX 15 15 1 -1 +BITMAP +0200 +03F8 +0200 +3FFC +220A +3FFE +2884 +2FFC +2884 +2FFC +4408 +47F8 +8408 +07F8 +0408 +ENDCHAR +STARTCHAR uni819B +ENCODING 33179 +BBX 15 16 0 -2 +BITMAP +0020 +7924 +48A8 +4BFE +4A02 +78F8 +4888 +4888 +48F8 +7820 +4820 +49FC +4820 +4820 +4BFE +9800 +ENDCHAR +STARTCHAR uni819C +ENCODING 33180 +BBX 15 15 1 -1 +BITMAP +0090 +7890 +4FFE +4890 +4BFC +7A04 +4BFC +4A04 +4A04 +7BFC +4840 +4FFE +4890 +8908 +9A06 +ENDCHAR +STARTCHAR uni819D +ENCODING 33181 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4FFE +4950 +4A48 +7C46 +48A0 +4B18 +4C06 +7840 +4B58 +48E0 +4958 +8E46 +98C0 +ENDCHAR +STARTCHAR uni819E +ENCODING 33182 +BBX 15 16 0 -2 +BITMAP +0020 +3DFE +2420 +25FC +2524 +3DFC +2524 +25FC +2422 +3DFE +2408 +25FE +2508 +4488 +5428 +8810 +ENDCHAR +STARTCHAR uni819F +ENCODING 33183 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4820 +4848 +7AF2 +4924 +4A52 +48F8 +7808 +4820 +4BFE +4820 +4820 +4820 +9820 +ENDCHAR +STARTCHAR uni81A0 +ENCODING 33184 +BBX 15 14 1 -1 +BITMAP +7BBC +4994 +4AA4 +498C +7AB4 +4844 +48A0 +4918 +7E46 +4990 +4864 +4988 +8830 +99C0 +ENDCHAR +STARTCHAR uni81A1 +ENCODING 33185 +BBX 15 16 0 -2 +BITMAP +0020 +7924 +48A8 +49FC +4840 +7BFE +4888 +4904 +4BFE +7D04 +49FC +4904 +49FC +4904 +49FC +9904 +ENDCHAR +STARTCHAR uni81A2 +ENCODING 33186 +BBX 15 16 0 -2 +BITMAP +0020 +79FC +4924 +4BFE +4924 +79FC +4820 +49FC +4924 +79FC +4840 +4BFE +4888 +49D0 +4870 +9B8C +ENDCHAR +STARTCHAR uni81A3 +ENCODING 33187 +BBX 15 15 1 -1 +BITMAP +0040 +7040 +57FC +5524 +5524 +723E +5400 +53FC +5090 +7128 +53C4 +5040 +53FC +9040 +B7FE +ENDCHAR +STARTCHAR uni81A4 +ENCODING 33188 +BBX 15 14 1 -1 +BITMAP +79FC +4820 +4BFE +4A22 +7BBA +4A22 +49B8 +4800 +78F8 +4808 +4BFE +4808 +8808 +98F8 +ENDCHAR +STARTCHAR uni81A5 +ENCODING 33189 +BBX 15 16 0 -2 +BITMAP +1014 +1010 +FDFE +1110 +7DD4 +3948 +554A +9296 +1122 +3FF8 +2288 +2448 +2108 +2288 +2448 +2018 +ENDCHAR +STARTCHAR uni81A6 +ENCODING 33190 +BBX 15 16 0 -2 +BITMAP +0020 +7924 +48A8 +4BFE +48A8 +7924 +4A22 +4904 +4904 +79DE +4A44 +4D54 +489E +4904 +4A04 +9C04 +ENDCHAR +STARTCHAR uni81A7 +ENCODING 33191 +BBX 15 16 0 -2 +BITMAP +0020 +3DFC +2488 +2450 +37FE +2C00 +25FC +2524 +2DFC +3524 +25FC +2420 +25FC +4420 +57FE +8800 +ENDCHAR +STARTCHAR uni81A8 +ENCODING 33192 +BBX 15 15 1 -1 +BITMAP +0104 +7104 +57C8 +5108 +57D2 +7002 +57C4 +5448 +57D0 +7000 +5442 +5242 +5284 +91C8 +B630 +ENDCHAR +STARTCHAR uni81A9 +ENCODING 33193 +BBX 15 15 1 -1 +BITMAP +0014 +7812 +4FFE +4810 +4990 +7810 +4BD0 +4810 +4BD0 +7A50 +4BD0 +4A48 +4BCA +894A +9E24 +ENDCHAR +STARTCHAR uni81AA +ENCODING 33194 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +49FC +4888 +4850 +7BFE +4A22 +4C24 +49FC +7924 +492C +4820 +49FC +4904 +49FC +9904 +ENDCHAR +STARTCHAR uni81AB +ENCODING 33195 +BBX 15 16 0 -2 +BITMAP +0020 +3C20 +25FC +2420 +2554 +3C88 +2504 +26FA +2488 +3CF8 +2488 +24F8 +2420 +44A8 +5524 +8860 +ENDCHAR +STARTCHAR uni81AC +ENCODING 33196 +BBX 15 16 0 -2 +BITMAP +0038 +7BC0 +4878 +4BC0 +4878 +7BC4 +483C +4800 +48C6 +7B38 +49CE +4F38 +49CE +4F38 +494A +9986 +ENDCHAR +STARTCHAR uni81AD +ENCODING 33197 +BBX 15 16 0 -2 +BITMAP +0020 +3DFC +2524 +25FC +2420 +3FFE +2400 +25FC +2504 +3DFC +2504 +25FC +2504 +45FC +5488 +8904 +ENDCHAR +STARTCHAR uni81AE +ENCODING 33198 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +49FC +4820 +4BFE +7908 +4B9C +4908 +4988 +7E3E +4800 +4BFE +4890 +4890 +4912 +9A0E +ENDCHAR +STARTCHAR uni81AF +ENCODING 33199 +BBX 15 16 0 -2 +BITMAP +0010 +7BD2 +4854 +4948 +488A +7904 +4AFA +4C00 +49FC +7904 +4904 +49FC +4904 +4888 +4FFE +9800 +ENDCHAR +STARTCHAR uni81B0 +ENCODING 33200 +BBX 15 15 1 -1 +BITMAP +001C +79E0 +4924 +48A8 +4FFE +78A8 +48A8 +4924 +4A02 +79FC +4924 +49FC +4924 +8924 +B9FC +ENDCHAR +STARTCHAR uni81B1 +ENCODING 33201 +BBX 15 16 0 -2 +BITMAP +0110 +7894 +4BD2 +4812 +4A50 +7990 +4FFE +4810 +4BD2 +7A52 +4A54 +4BD4 +4A4A +4A4A +4BD6 +9822 +ENDCHAR +STARTCHAR uni81B2 +ENCODING 33202 +BBX 15 15 1 -1 +BITMAP +0088 +7890 +49FC +4920 +4BF8 +7D20 +4920 +49F8 +4920 +7920 +49FC +4800 +4AA4 +8A52 +9C52 +ENDCHAR +STARTCHAR uni81B3 +ENCODING 33203 +BBX 15 15 1 -1 +BITMAP +0204 +7908 +4FFE +4840 +4BFC +7840 +4FFE +4A44 +4948 +7FFE +4800 +4BFC +4A04 +8A04 +9BFC +ENDCHAR +STARTCHAR uni81B4 +ENCODING 33204 +BBX 15 16 0 -2 +BITMAP +0080 +3C80 +25FE +2754 +2554 +3D54 +27FE +2554 +2554 +3D54 +27FE +2400 +2554 +452A +562A +8800 +ENDCHAR +STARTCHAR uni81B5 +ENCODING 33205 +BBX 15 15 1 -1 +BITMAP +0110 +7110 +5FFE +5110 +5040 +77FC +5000 +5248 +5248 +7554 +5040 +5FFE +5040 +9040 +B040 +ENDCHAR +STARTCHAR uni81B6 +ENCODING 33206 +BBX 15 15 0 -2 +BITMAP +7BDE +4A52 +4BDE +4A52 +7BDE +4A02 +4AFA +4A22 +7A72 +4A22 +4A22 +4AFA +4A02 +4A0A +9A04 +ENDCHAR +STARTCHAR uni81B7 +ENCODING 33207 +BBX 15 16 0 -2 +BITMAP +0280 +724E +54EA +55AA +59AA +7EEA +52AC +54AA +55EA +7F8A +528A +52AA +54AC +54E8 +58A8 +B008 +ENDCHAR +STARTCHAR uni81B8 +ENCODING 33208 +BBX 15 15 1 -1 +BITMAP +0220 +79FE +4840 +48FC +4D10 +7AFE +4800 +4E7C +4A44 +7A7C +4A44 +4A7C +4A44 +8D00 +98FE +ENDCHAR +STARTCHAR uni81B9 +ENCODING 33209 +BBX 15 16 0 -2 +BITMAP +0020 +3DFC +2420 +2488 +27FE +3C88 +25FC +2504 +25FC +3D04 +25FC +2504 +25FC +4488 +5504 +8A02 +ENDCHAR +STARTCHAR uni81BA +ENCODING 33210 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4910 +53FC +7620 +53FC +5220 +5FFE +5008 +5FF8 +9008 +9FF8 +1008 +1038 +ENDCHAR +STARTCHAR uni81BB +ENCODING 33211 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4FFE +4A04 +4AF4 +7A94 +4AF4 +4A04 +4BFC +7800 +49F8 +4908 +49F8 +8908 +9FFE +ENDCHAR +STARTCHAR uni81BC +ENCODING 33212 +BBX 15 15 0 -2 +BITMAP +7A7C +4944 +4974 +4854 +7854 +4EFE +4A82 +4ABA +7AAA +4ABA +4A82 +4A8A +4A84 +4D00 +98FE +ENDCHAR +STARTCHAR uni81BD +ENCODING 33213 +BBX 15 15 1 -1 +BITMAP +0040 +78F8 +4910 +4FFE +4A48 +7B8E +4A78 +4A00 +4BFE +7A00 +4A78 +4A00 +4AFC +8C84 +98FC +ENDCHAR +STARTCHAR uni81BE +ENCODING 33214 +BBX 15 15 1 -1 +BITMAP +0040 +70A0 +5318 +5CE6 +5000 +77FC +5444 +5554 +57FC +7000 +53F8 +5208 +53F8 +9208 +B3F8 +ENDCHAR +STARTCHAR uni81BF +ENCODING 33215 +BBX 15 15 1 -1 +BITMAP +0050 +79FC +4954 +49FC +4954 +79FC +4800 +4BFE +4A00 +7AFC +4A00 +4BFE +4A94 +8AE8 +9D86 +ENDCHAR +STARTCHAR uni81C0 +ENCODING 33216 +BBX 15 15 1 -1 +BITMAP +7F3C +4124 +7F46 +5200 +7F7C +5224 +FF98 +9266 +3FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1070 +ENDCHAR +STARTCHAR uni81C1 +ENCODING 33217 +BBX 15 15 1 -1 +BITMAP +0020 +7BFE +4A24 +4A48 +4BFE +7A50 +4AFC +4A54 +4BFE +7A54 +4AFC +4A50 +4CD8 +8954 +9A52 +ENDCHAR +STARTCHAR uni81C2 +ENCODING 33218 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +45FC +7C88 +43FE +7C20 +A5FC +A420 +3FF0 +2010 +3FF0 +2010 +3FF0 +2010 +2070 +ENDCHAR +STARTCHAR uni81C3 +ENCODING 33219 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4FFE +4892 +4894 +793E +4A24 +4EA4 +49BE +7924 +4A64 +4FFE +48A4 +8924 +9E3E +ENDCHAR +STARTCHAR uni81C4 +ENCODING 33220 +BBX 15 16 0 -2 +BITMAP +0040 +787C +4840 +4BFE +4A42 +7A78 +4BC4 +4A3C +4A00 +7BFE +4A40 +4BA4 +4A58 +4DB4 +4C52 +99B0 +ENDCHAR +STARTCHAR uni81C5 +ENCODING 33221 +BBX 15 15 0 -2 +BITMAP +3DFC +2554 +2554 +25FC +3C80 +25FE +2642 +25F2 +3D52 +2552 +25F2 +244A +47FA +540A +8804 +ENDCHAR +STARTCHAR uni81C6 +ENCODING 33222 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4BFC +4890 +4FFE +7800 +49F8 +4908 +49F8 +7908 +49F8 +4840 +4AA4 +8A8A +9C78 +ENDCHAR +STARTCHAR uni81C7 +ENCODING 33223 +BBX 15 16 0 -2 +BITMAP +00A0 +7890 +49FE +4B20 +49FC +7920 +49FC +4920 +49FE +7900 +4BDE +4A52 +4A52 +4A72 +4A02 +9A06 +ENDCHAR +STARTCHAR uni81C8 +ENCODING 33224 +BBX 15 15 1 -1 +BITMAP +0110 +7FFE +4910 +4BF8 +4A08 +7BF8 +4A08 +4BF8 +4900 +7BFE +4E42 +4AA2 +4B12 +8BF2 +980C +ENDCHAR +STARTCHAR uni81C9 +ENCODING 33225 +BBX 15 15 1 -1 +BITMAP +0040 +70A0 +5110 +5208 +5DF6 +7000 +57BC +54A4 +54A4 +77BC +5000 +5108 +5108 +9294 +B4A2 +ENDCHAR +STARTCHAR uni81CA +ENCODING 33226 +BBX 15 14 1 -1 +BITMAP +78F8 +4888 +4888 +48F8 +7800 +4BDE +4A52 +4A52 +7BDE +4820 +4BFE +48A8 +8924 +9A22 +ENDCHAR +STARTCHAR uni81CB +ENCODING 33227 +BBX 15 16 0 -2 +BITMAP +7E78 +4248 +7E48 +5486 +7E78 +5448 +7E30 +94CE +6300 +3FF8 +2288 +2448 +2108 +2288 +2448 +2018 +ENDCHAR +STARTCHAR uni81CC +ENCODING 33228 +BBX 15 16 0 -2 +BITMAP +0088 +7888 +4FC8 +48BE +4888 +7BC8 +481C +4BD4 +4A54 +7A54 +4BD4 +4A48 +4988 +48D4 +4F14 +9A22 +ENDCHAR +STARTCHAR uni81CD +ENCODING 33229 +BBX 15 15 1 -1 +BITMAP +0040 +7040 +5FFE +50A0 +5F5E +7554 +5554 +5B5A +5000 +7204 +53FC +5204 +53FC +9204 +B404 +ENDCHAR +STARTCHAR uni81CE +ENCODING 33230 +BBX 15 16 0 -2 +BITMAP +03DE +7842 +4A52 +494A +4A52 +7820 +4BFE +4888 +4888 +7954 +4A22 +4820 +4BFE +4820 +4820 +9820 +ENDCHAR +STARTCHAR uni81CF +ENCODING 33231 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4BFE +4A02 +49FC +78A8 +4BFC +4904 +4FFC +7904 +49FC +4904 +49FC +8888 +9B06 +ENDCHAR +STARTCHAR uni81D0 +ENCODING 33232 +BBX 15 16 0 -2 +BITMAP +001C +3DE0 +2420 +27FE +2420 +3DFC +25AC +2574 +25FC +3C20 +25FC +2420 +27FE +4400 +5554 +8A2A +ENDCHAR +STARTCHAR uni81D1 +ENCODING 33233 +BBX 15 14 1 -1 +BITMAP +7BFE +4820 +4BFE +4A22 +7BBA +4A22 +4998 +4800 +7BFE +4840 +4BFE +4A92 +8A92 +9A96 +ENDCHAR +STARTCHAR uni81D2 +ENCODING 33234 +BBX 15 16 0 -2 +BITMAP +0088 +7BFE +48A8 +4890 +49FE +7B20 +49FC +4920 +49FC +7920 +49FE +4900 +4BFC +4888 +4870 +9B8E +ENDCHAR +STARTCHAR uni81D3 +ENCODING 33235 +BBX 15 15 1 -1 +BITMAP +0210 +EFFE +A210 +A012 +AFFE +E810 +ABD4 +AA94 +ABD4 +EA48 +ABC8 +AA98 +ABEA +A82A +B044 +ENDCHAR +STARTCHAR uni81D4 +ENCODING 33236 +BBX 15 16 0 -2 +BITMAP +03DE +7A92 +4BD2 +4A54 +4BC8 +7A94 +4BE2 +4800 +49FC +7904 +49FC +4904 +49FC +4904 +49FC +9888 +ENDCHAR +STARTCHAR uni81D5 +ENCODING 33237 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4A50 +4BFE +7A52 +4BFE +4A00 +4A94 +7AD8 +4A90 +4AD2 +4A8E +4C00 +4954 +9A2A +ENDCHAR +STARTCHAR uni81D6 +ENCODING 33238 +BBX 15 15 1 -1 +BITMAP +17C0 +2458 +3748 +2458 +3748 +2548 +FFFE +1010 +3FF8 +5014 +9FF2 +1010 +1FF0 +1010 +1070 +ENDCHAR +STARTCHAR uni81D7 +ENCODING 33239 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4BFC +4A94 +49F8 +7890 +49F8 +4908 +49F8 +7908 +49F8 +4908 +49FC +8892 +9F0E +ENDCHAR +STARTCHAR uni81D8 +ENCODING 33240 +BBX 15 15 1 -1 +BITMAP +0224 +7448 +5224 +57F8 +5528 +74C8 +5528 +57F8 +5000 +7668 +5548 +5668 +5548 +976A +BCC6 +ENDCHAR +STARTCHAR uni81D9 +ENCODING 33241 +BBX 15 15 1 -1 +BITMAP +0110 +7110 +5FFE +5110 +51F0 +7208 +5EEA +52AC +52A8 +72A8 +56EA +5A06 +5024 +9292 +B492 +ENDCHAR +STARTCHAR uni81DA +ENCODING 33242 +BBX 15 15 1 -1 +BITMAP +0040 +7078 +5040 +57FE +5442 +75F0 +5444 +54FC +54A8 +74F8 +54A8 +55FC +5954 +9154 +B7FE +ENDCHAR +STARTCHAR uni81DB +ENCODING 33243 +BBX 15 14 1 -1 +BITMAP +7BFE +4820 +4BFE +4A22 +7BBA +4A20 +4888 +49FE +7B10 +4DFC +4910 +49FC +8910 +99FE +ENDCHAR +STARTCHAR uni81DC +ENCODING 33244 +BBX 15 16 0 -2 +BITMAP +0108 +7528 +57BE +5948 +57BE +7318 +55AA +5946 +5000 +73F8 +5208 +5248 +5248 +50B0 +5108 +B604 +ENDCHAR +STARTCHAR uni81DD +ENCODING 33245 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +2000 +3FF8 +0000 +3FF8 +2008 +3FF8 +0540 +77DC +5554 +77D4 +511C +7FF6 +5556 +B922 +ENDCHAR +STARTCHAR uni81DE +ENCODING 33246 +BBX 15 16 0 -2 +BITMAP +03DE +7A52 +4BDE +4A52 +4BDE +7A52 +4BDE +4890 +49FE +7910 +4BFE +4D10 +49FE +4910 +49FE +9900 +ENDCHAR +STARTCHAR uni81DF +ENCODING 33247 +BBX 15 15 1 -1 +BITMAP +0110 +7110 +57FC +5118 +5014 +75FE +5510 +57F4 +5154 +71F4 +5F2C +55E8 +554A +99FA +B224 +ENDCHAR +STARTCHAR uni81E0 +ENCODING 33248 +BBX 15 15 1 -1 +BITMAP +2108 +4110 +D7F4 +2008 +5B94 +E83A +2388 +AAAA +ABAA +0100 +7FFC +4244 +4D24 +4284 +4C6C +ENDCHAR +STARTCHAR uni81E1 +ENCODING 33249 +BBX 15 16 0 -2 +BITMAP +2450 +FF48 +24FE +3D90 +08FC +7E90 +52FC +7E90 +24FE +4280 +BFF8 +2288 +2448 +2928 +2288 +2458 +ENDCHAR +STARTCHAR uni81E2 +ENCODING 33250 +BBX 15 16 0 -2 +BITMAP +0528 +77BE +5948 +57BE +5318 +75AA +5946 +53FC +5204 +73FC +5204 +53FC +5204 +53FC +5108 +B204 +ENDCHAR +STARTCHAR uni81E3 +ENCODING 33251 +BBX 13 14 2 -1 +BITMAP +FFF8 +8200 +8200 +8200 +FFF0 +8010 +8010 +8010 +FFF0 +8200 +8200 +8200 +8200 +FFF8 +ENDCHAR +STARTCHAR uni81E4 +ENCODING 33252 +BBX 15 14 1 -1 +BITMAP +FDFC +9084 +9084 +9084 +FC84 +8488 +8448 +8450 +FC20 +9020 +9050 +9088 +FD04 +0202 +ENDCHAR +STARTCHAR uni81E5 +ENCODING 33253 +BBX 15 15 1 -1 +BITMAP +0040 +FC40 +9040 +9040 +9040 +F840 +8840 +88A0 +88A0 +F8A0 +9110 +9110 +9208 +FC04 +0802 +ENDCHAR +STARTCHAR uni81E6 +ENCODING 33254 +BBX 15 14 0 -1 +BITMAP +FE7E +1248 +1248 +1248 +7E7E +4242 +4242 +4242 +4242 +7E7E +1248 +1248 +1248 +FE7E +ENDCHAR +STARTCHAR uni81E7 +ENCODING 33255 +BBX 15 15 1 -1 +BITMAP +0028 +0024 +0020 +5FFE +5020 +77A0 +1524 +17A4 +F4A8 +5798 +5510 +5510 +97EA +204A +4184 +ENDCHAR +STARTCHAR uni81E8 +ENCODING 33256 +BBX 15 15 1 -1 +BITMAP +0080 +FC80 +91FE +9200 +90F8 +FC88 +8488 +84F8 +FC00 +93DE +9252 +9252 +9252 +FE52 +03DE +ENDCHAR +STARTCHAR uni81E9 +ENCODING 33257 +BBX 15 15 0 -2 +BITMAP +FEFE +1290 +7EFC +4284 +7EFC +1290 +FEFE +0200 +7FFC +0440 +1830 +E44E +0440 +0840 +1040 +ENDCHAR +STARTCHAR uni81EA +ENCODING 33258 +BBX 10 15 3 -1 +BITMAP +0800 +1000 +FFC0 +8040 +8040 +8040 +FFC0 +8040 +8040 +8040 +FFC0 +8040 +8040 +8040 +FFC0 +ENDCHAR +STARTCHAR uni81EB +ENCODING 33259 +BBX 14 15 1 -1 +BITMAP +1040 +1040 +2040 +FE40 +8240 +8240 +FE40 +8240 +8240 +FE40 +8240 +8244 +8244 +FE44 +823C +ENDCHAR +STARTCHAR uni81EC +ENCODING 33260 +BBX 15 15 1 -1 +BITMAP +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +7FFC +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni81ED +ENCODING 33261 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni81EE +ENCODING 33262 +BBX 13 16 1 -2 +BITMAP +0400 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +0000 +01F8 +FE00 +2220 +2220 +5250 +8A88 +0200 +ENDCHAR +STARTCHAR uni81EF +ENCODING 33263 +BBX 15 16 0 -2 +BITMAP +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +2108 +1110 +0920 +1110 +2108 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni81F0 +ENCODING 33264 +BBX 15 16 0 -2 +BITMAP +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +0840 +1F48 +6250 +1462 +1842 +E03E +ENDCHAR +STARTCHAR uni81F1 +ENCODING 33265 +BBX 15 16 0 -2 +BITMAP +0200 +1FF0 +1490 +1250 +1130 +1FF0 +0100 +7FFE +4A22 +9114 +3FF8 +0400 +07F0 +0810 +1050 +2020 +ENDCHAR +STARTCHAR uni81F2 +ENCODING 33266 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +7E7C +4284 +7F08 +42FE +7E80 +42BC +7EA4 +10A4 +FEB4 +18A8 +34A2 +5322 +911E +1200 +ENDCHAR +STARTCHAR uni81F3 +ENCODING 33267 +BBX 13 14 2 -1 +BITMAP +7FF0 +0400 +0480 +0840 +11E0 +7E10 +0010 +0200 +0200 +3FE0 +0200 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni81F4 +ENCODING 33268 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +1020 +107E +2444 +4E84 +F244 +1044 +1028 +FE28 +1010 +1010 +1628 +1844 +E182 +ENDCHAR +STARTCHAR uni81F5 +ENCODING 33269 +BBX 15 16 0 -2 +BITMAP +0040 +FE40 +1078 +2088 +2950 +4420 +FE50 +1288 +1106 +10F8 +7C88 +1088 +1088 +1E88 +F0F8 +4088 +ENDCHAR +STARTCHAR uni81F6 +ENCODING 33270 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +1020 +21FE +2840 +4440 +FEBC +1284 +1188 +1288 +7CFE +1088 +1088 +1E88 +F0A8 +4090 +ENDCHAR +STARTCHAR uni81F7 +ENCODING 33271 +BBX 15 16 0 -2 +BITMAP +0840 +0848 +7F44 +0844 +0840 +FFFE +0040 +7F44 +1044 +2244 +7F28 +092A +3E12 +082A +0F46 +F082 +ENDCHAR +STARTCHAR uni81F8 +ENCODING 33272 +BBX 15 15 0 -2 +BITMAP +FEFE +1010 +2020 +2844 +4482 +FEFE +1212 +1010 +1010 +7CFE +1010 +1010 +1E10 +F1FE +4000 +ENDCHAR +STARTCHAR uni81F9 +ENCODING 33273 +BBX 15 16 0 -2 +BITMAP +0028 +F824 +2024 +4020 +53FE +8A20 +FA24 +2A24 +23A4 +FAA8 +22A8 +2290 +3A92 +E5AA +4446 +0882 +ENDCHAR +STARTCHAR uni81FA +ENCODING 33274 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0000 +0FE0 +0820 +7FFC +4004 +5FF4 +0820 +1FD0 +0100 +FFFE +ENDCHAR +STARTCHAR uni81FB +ENCODING 33275 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +23FE +2020 +49FC +7450 +C7FE +1088 +1374 +7C22 +13FE +10A8 +1D24 +E222 +0020 +ENDCHAR +STARTCHAR uni81FC +ENCODING 33276 +BBX 12 15 2 -1 +BITMAP +0400 +0800 +3000 +C1F0 +8010 +8010 +8010 +8010 +F9F0 +8010 +8010 +8010 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni81FD +ENCODING 33277 +BBX 12 15 2 -1 +BITMAP +0800 +0800 +0FF0 +1010 +2010 +4020 +81C0 +0C00 +70F0 +4010 +4010 +79F0 +4010 +4010 +7FF0 +ENDCHAR +STARTCHAR uni81FE +ENCODING 33278 +BBX 15 15 1 -1 +BITMAP +0100 +0D00 +713C +4104 +4104 +793C +4104 +4104 +4104 +793C +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni81FF +ENCODING 33279 +BBX 13 14 2 -1 +BITMAP +7FF0 +0200 +0200 +FFF8 +0200 +1A00 +6270 +4210 +4210 +7A70 +4210 +4210 +4210 +7FF0 +ENDCHAR +STARTCHAR uni8200 +ENCODING 33280 +BBX 13 16 1 -2 +BITMAP +01F8 +FE00 +0410 +4210 +2220 +2040 +1800 +60F0 +4010 +4010 +78F0 +4010 +4010 +4010 +7FF0 +4010 +ENDCHAR +STARTCHAR uni8201 +ENCODING 33281 +BBX 15 15 1 -1 +BITMAP +0600 +3878 +2008 +2008 +3C78 +2008 +2008 +3FF8 +0420 +0420 +FFFE +0420 +0820 +1020 +6020 +ENDCHAR +STARTCHAR uni8202 +ENCODING 33282 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0280 +FFFE +0820 +1310 +3C78 +D016 +1C70 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8203 +ENCODING 33283 +BBX 14 16 0 -2 +BITMAP +0600 +38F8 +2008 +2008 +3EF8 +2008 +2008 +3FF8 +1000 +1FF8 +2000 +3FFC +0004 +4924 +8494 +0008 +ENDCHAR +STARTCHAR uni8204 +ENCODING 33284 +BBX 13 15 2 -1 +BITMAP +0400 +38F0 +2010 +3CF0 +2010 +2010 +3FF0 +1000 +3FF8 +4008 +8A48 +2548 +4528 +4008 +0030 +ENDCHAR +STARTCHAR uni8205 +ENCODING 33285 +BBX 13 15 2 -1 +BITMAP +0600 +38E0 +2020 +3DE0 +2020 +3FE0 +4210 +7FF0 +4210 +7FF0 +0200 +FFF8 +0808 +3008 +C070 +ENDCHAR +STARTCHAR uni8206 +ENCODING 33286 +BBX 15 16 0 -2 +BITMAP +1100 +611C +47C4 +4204 +751C +47C4 +4104 +77DC +4104 +4104 +FFFE +0000 +0820 +1010 +2008 +4004 +ENDCHAR +STARTCHAR uni8207 +ENCODING 33287 +BBX 15 15 1 -1 +BITMAP +0200 +1A00 +63BC +4204 +4204 +7BBC +4084 +4084 +7ABC +4284 +4284 +FFFE +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni8208 +ENCODING 33288 +BBX 15 15 1 -1 +BITMAP +0800 +1FE0 +683C +4BA4 +4824 +7BBC +4AA4 +4AA4 +7BBC +4824 +4824 +FFFE +0440 +1830 +600C +ENDCHAR +STARTCHAR uni8209 +ENCODING 33289 +BBX 15 15 1 -1 +BITMAP +0900 +31B8 +2108 +39B8 +2288 +2288 +FFFE +1010 +2108 +5FF4 +8102 +7FFC +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni820A +ENCODING 33290 +BBX 15 15 1 -1 +BITMAP +1020 +FFFE +1020 +2100 +3FF0 +E100 +3FF0 +2100 +3FFC +0000 +7CF8 +4008 +7CF8 +4008 +7FF8 +ENDCHAR +STARTCHAR uni820B +ENCODING 33291 +BBX 15 16 0 -2 +BITMAP +2FEC +4824 +4BA4 +682C +4BA4 +6AAC +4BA4 +FFFE +8002 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +FFFE +ENDCHAR +STARTCHAR uni820C +ENCODING 33292 +BBX 15 15 1 -1 +BITMAP +00E0 +1F00 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +1FF0 +1010 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni820D +ENCODING 33293 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0C60 +3018 +CFE6 +0100 +0100 +FFFE +0100 +0100 +1FF0 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni820E +ENCODING 33294 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0C60 +3118 +C106 +1FF0 +0100 +0100 +FFFE +0000 +1FF0 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni820F +ENCODING 33295 +BBX 14 16 0 -2 +BITMAP +0404 +0E04 +7844 +0844 +0844 +FF44 +0844 +0844 +3E4C +2254 +2264 +2244 +2204 +3E04 +2204 +0004 +ENDCHAR +STARTCHAR uni8210 +ENCODING 33296 +BBX 15 15 1 -1 +BITMAP +000C +0DF0 +7110 +1110 +1110 +FF10 +1110 +11FE +1110 +7D10 +4510 +4510 +450A +7DCA +0304 +ENDCHAR +STARTCHAR uni8211 +ENCODING 33297 +BBX 15 16 0 -2 +BITMAP +0820 +1C20 +7020 +11FC +1124 +FD24 +11FC +1124 +7D24 +4524 +47FE +4504 +4504 +7D04 +4514 +0108 +ENDCHAR +STARTCHAR uni8212 +ENCODING 33298 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +4408 +8090 +7C60 +1020 +11FE +FC22 +1024 +1028 +7C20 +4420 +4420 +4420 +7CE0 +ENDCHAR +STARTCHAR uni8213 +ENCODING 33299 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +7104 +11FC +1104 +FDFC +1080 +1080 +7DFE +464A +444A +4492 +4522 +7E42 +4494 +0108 +ENDCHAR +STARTCHAR uni8214 +ENCODING 33300 +BBX 15 16 0 -2 +BITMAP +0800 +1DFC +7020 +1020 +11FE +FC50 +1050 +1088 +7D24 +4622 +4424 +44B2 +44AA +7D2A +44A0 +0040 +ENDCHAR +STARTCHAR uni8215 +ENCODING 33301 +BBX 15 16 0 -2 +BITMAP +0820 +1CA2 +70A2 +1124 +1050 +FC88 +1304 +1022 +7C20 +44A4 +44A4 +4528 +4450 +7C88 +4504 +0202 +ENDCHAR +STARTCHAR uni8216 +ENCODING 33302 +BBX 15 15 1 -1 +BITMAP +1028 +2824 +47FE +FC20 +1020 +11FC +FD24 +1124 +11FC +7D24 +4524 +45FC +4524 +7D24 +012C +ENDCHAR +STARTCHAR uni8217 +ENCODING 33303 +BBX 15 15 1 -1 +BITMAP +1028 +1024 +29FE +4420 +9020 +79FC +1124 +1124 +FDFC +0124 +7D24 +45FC +4524 +4524 +7D2C +ENDCHAR +STARTCHAR uni8218 +ENCODING 33304 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +2BFE +4602 +FEFA +1088 +1088 +FEF8 +1080 +1080 +7CFC +4484 +4484 +4484 +7CFC +ENDCHAR +STARTCHAR uni8219 +ENCODING 33305 +BBX 15 15 1 -1 +BITMAP +0070 +1F80 +0100 +FFFE +0100 +1FF8 +1008 +1FFC +7870 +0810 +FEFE +0810 +7EFC +4284 +7EFC +ENDCHAR +STARTCHAR uni821A +ENCODING 33306 +BBX 15 16 0 -2 +BITMAP +0880 +1CF8 +7108 +13FE +1144 +FD92 +11FE +1100 +7D7C +4500 +457C +4500 +457C +7D44 +457C +0244 +ENDCHAR +STARTCHAR uni821B +ENCODING 33307 +BBX 15 15 1 -1 +BITMAP +2010 +2010 +3C10 +25FC +2410 +4490 +C490 +2490 +1510 +0BFE +0A10 +1010 +2010 +4010 +8010 +ENDCHAR +STARTCHAR uni821C +ENCODING 33308 +BBX 15 15 1 -1 +BITMAP +007C +7F90 +2210 +1120 +FFFE +8002 +A012 +3DFC +4490 +C490 +2890 +1BFE +1010 +2010 +C010 +ENDCHAR +STARTCHAR uni821D +ENCODING 33309 +BBX 15 16 0 -2 +BITMAP +0200 +3FF0 +0410 +FFFE +1110 +2220 +1110 +7FFE +4402 +8824 +1FF0 +0100 +1FF0 +2100 +3FF8 +0100 +ENDCHAR +STARTCHAR uni821E +ENCODING 33310 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +3FFC +5248 +FFFE +1248 +1248 +7FFC +1010 +1EFC +6250 +1250 +0DFE +1810 +E010 +ENDCHAR +STARTCHAR uni821F +ENCODING 33311 +BBX 15 15 1 -1 +BITMAP +0080 +0100 +1FF0 +1010 +1210 +1110 +1090 +1010 +FFFE +1010 +1110 +2110 +2110 +4010 +8070 +ENDCHAR +STARTCHAR uni8220 +ENCODING 33312 +BBX 14 16 0 -2 +BITMAP +0800 +1000 +3EFC +2224 +3224 +2A24 +2A24 +FE24 +2224 +3224 +2A24 +2A44 +2244 +4284 +4B28 +8610 +ENDCHAR +STARTCHAR uni8221 +ENCODING 33313 +BBX 15 15 1 -1 +BITMAP +1000 +2000 +7DFC +4420 +5420 +5420 +4420 +FE20 +4420 +5420 +5420 +5420 +5420 +8420 +8FFE +ENDCHAR +STARTCHAR uni8222 +ENCODING 33314 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +7C20 +4420 +5420 +5420 +4522 +FF22 +4522 +5522 +5522 +5522 +5522 +8522 +8DFE +ENDCHAR +STARTCHAR uni8223 +ENCODING 33315 +BBX 15 16 0 -2 +BITMAP +1040 +2024 +7D24 +4504 +6504 +5488 +5488 +FC88 +4450 +6450 +5420 +5420 +4450 +4488 +5504 +8A02 +ENDCHAR +STARTCHAR uni8224 +ENCODING 33316 +BBX 15 16 0 -2 +BITMAP +0800 +1000 +3E78 +2248 +3248 +2A48 +2A48 +FE68 +2258 +3248 +2A48 +2A4A +224A +428A +4A86 +8500 +ENDCHAR +STARTCHAR uni8225 +ENCODING 33317 +BBX 15 16 0 -2 +BITMAP +1000 +2000 +7DFC +4524 +6524 +5524 +5524 +FD24 +45FC +6500 +5500 +5500 +4502 +4502 +54FE +8800 +ENDCHAR +STARTCHAR uni8226 +ENCODING 33318 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +7C20 +4420 +6420 +55FE +5420 +FC20 +4420 +6450 +5450 +5450 +4488 +44C8 +5524 +8A02 +ENDCHAR +STARTCHAR uni8227 +ENCODING 33319 +BBX 15 16 0 -2 +BITMAP +0810 +1020 +3E78 +2248 +3248 +2A48 +2A48 +FE68 +2258 +3248 +2A48 +2A4A +224A +428A +4A86 +8500 +ENDCHAR +STARTCHAR uni8228 +ENCODING 33320 +BBX 15 16 0 -2 +BITMAP +1004 +200E +7CF0 +4480 +6480 +54FC +54A4 +FCA4 +44A4 +64A8 +54A8 +5490 +4510 +4528 +5644 +8882 +ENDCHAR +STARTCHAR uni8229 +ENCODING 33321 +BBX 15 15 1 -1 +BITMAP +0890 +1090 +7C90 +4490 +5488 +5548 +4544 +FE42 +4440 +5440 +5450 +5488 +4488 +84F4 +8D82 +ENDCHAR +STARTCHAR uni822A +ENCODING 33322 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +7DFE +4400 +5400 +5478 +4448 +FE48 +4448 +5448 +5448 +5448 +548A +848A +8D06 +ENDCHAR +STARTCHAR uni822B +ENCODING 33323 +BBX 15 15 1 -1 +BITMAP +0820 +1020 +7C20 +45FE +5440 +5440 +4440 +FE7C +4444 +5444 +5444 +5484 +4484 +8504 +8E18 +ENDCHAR +STARTCHAR uni822C +ENCODING 33324 +BBX 15 15 1 -1 +BITMAP +1000 +2078 +7C48 +4448 +5488 +5506 +4400 +FEFC +4404 +5484 +5488 +5450 +4420 +8458 +8D86 +ENDCHAR +STARTCHAR uni822D +ENCODING 33325 +BBX 15 16 0 -2 +BITMAP +1010 +2110 +7D10 +4512 +6512 +5514 +55D8 +FD10 +4510 +6510 +5510 +5512 +4552 +4592 +550E +8800 +ENDCHAR +STARTCHAR uni822E +ENCODING 33326 +BBX 15 15 1 -1 +BITMAP +0800 +10FE +7C00 +4400 +54FE +5482 +4482 +FE82 +44FE +5480 +5480 +5480 +4500 +8500 +8E00 +ENDCHAR +STARTCHAR uni822F +ENCODING 33327 +BBX 14 16 0 -2 +BITMAP +1020 +2020 +7C20 +4420 +65FC +5524 +5524 +FD24 +4524 +65FC +5524 +5420 +4420 +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni8230 +ENCODING 33328 +BBX 15 16 0 -2 +BITMAP +1000 +21FC +7D04 +4504 +6524 +5524 +5524 +FD24 +4524 +6554 +5450 +5450 +4490 +4492 +5512 +8A0E +ENDCHAR +STARTCHAR uni8231 +ENCODING 33329 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +7C50 +4450 +6488 +5504 +5602 +FCF8 +4488 +6488 +54A8 +5490 +4482 +4482 +547E +8800 +ENDCHAR +STARTCHAR uni8232 +ENCODING 33330 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +7C50 +4488 +5504 +56FA +4400 +FE00 +45FC +5444 +5444 +5444 +545C +8440 +8C40 +ENDCHAR +STARTCHAR uni8233 +ENCODING 33331 +BBX 15 15 1 -1 +BITMAP +0810 +1010 +7C10 +4410 +54FE +5492 +4492 +FE92 +4492 +54FE +5492 +5492 +4492 +8492 +8CFE +ENDCHAR +STARTCHAR uni8234 +ENCODING 33332 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +7C40 +447E +54A0 +54A0 +4520 +FE3C +4420 +5420 +5420 +543C +5420 +8420 +8C20 +ENDCHAR +STARTCHAR uni8235 +ENCODING 33333 +BBX 15 15 1 -1 +BITMAP +0820 +1020 +7DFE +4502 +5502 +5480 +4484 +FE98 +44E0 +5480 +5480 +5480 +5482 +8482 +8C7E +ENDCHAR +STARTCHAR uni8236 +ENCODING 33334 +BBX 14 15 1 -1 +BITMAP +1020 +2020 +7C40 +45FC +5504 +5504 +4504 +FF04 +45FC +5504 +5504 +5504 +4504 +8504 +8DFC +ENDCHAR +STARTCHAR uni8237 +ENCODING 33335 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +7C20 +47FE +5440 +5440 +4488 +FF88 +4450 +5420 +5428 +5444 +4444 +849A +8DE2 +ENDCHAR +STARTCHAR uni8238 +ENCODING 33336 +BBX 15 15 1 -1 +BITMAP +0800 +1000 +7DFE +4404 +5404 +54F4 +4494 +FE94 +4494 +5494 +54F4 +5404 +4404 +8404 +8C1C +ENDCHAR +STARTCHAR uni8239 +ENCODING 33337 +BBX 15 15 1 -1 +BITMAP +1050 +1050 +7C50 +4488 +5488 +5504 +4502 +FE00 +44F8 +5488 +5488 +5488 +5488 +8488 +8CF8 +ENDCHAR +STARTCHAR uni823A +ENCODING 33338 +BBX 14 16 0 -2 +BITMAP +1000 +21FC +7D24 +4524 +6524 +55FC +5524 +FD24 +4524 +65FC +5524 +5420 +4420 +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni823B +ENCODING 33339 +BBX 14 16 0 -2 +BITMAP +1020 +2020 +7C3C +4420 +6420 +54FC +5484 +FC84 +4484 +64FC +5484 +5480 +4480 +4500 +5500 +8A00 +ENDCHAR +STARTCHAR uni823C +ENCODING 33340 +BBX 15 15 1 -1 +BITMAP +1090 +2090 +7C90 +4490 +55FC +5490 +4490 +FE90 +4490 +5490 +57FE +5400 +5488 +8504 +8E02 +ENDCHAR +STARTCHAR uni823D +ENCODING 33341 +BBX 15 16 0 -2 +BITMAP +0820 +1020 +3E3C +2244 +32A8 +2A10 +2A28 +FED6 +2210 +32FC +2A10 +2A90 +22FE +4210 +4A10 +8410 +ENDCHAR +STARTCHAR uni823E +ENCODING 33342 +BBX 15 16 0 -2 +BITMAP +1000 +23FE +7C50 +4450 +65FC +5554 +5554 +FD54 +4554 +6554 +558C +5504 +4504 +4504 +55FC +8904 +ENDCHAR +STARTCHAR uni823F +ENCODING 33343 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +7BFE +4850 +6888 +5904 +4AFA +F800 +4BFE +4840 +6880 +59FC +4804 +4804 +4828 +9810 +ENDCHAR +STARTCHAR uni8240 +ENCODING 33344 +BBX 15 15 1 -1 +BITMAP +081C +11E8 +7D44 +4622 +5422 +5400 +47FC +FC08 +4410 +5420 +57FE +5420 +4420 +8420 +8CE0 +ENDCHAR +STARTCHAR uni8241 +ENCODING 33345 +BBX 15 16 0 -2 +BITMAP +0810 +1050 +3E50 +227C +3250 +2A90 +2A10 +FEFE +2200 +3200 +2A7C +2A44 +2244 +4244 +4A7C +8444 +ENDCHAR +STARTCHAR uni8242 +ENCODING 33346 +BBX 15 16 0 -2 +BITMAP +1040 +2040 +7CFC +4488 +6550 +5420 +54D8 +FF26 +44F8 +6420 +54F8 +5420 +47FE +4420 +5420 +8820 +ENDCHAR +STARTCHAR uni8243 +ENCODING 33347 +BBX 15 16 0 -2 +BITMAP +1000 +21FC +7D24 +4524 +65FC +5524 +5524 +FDFC +4420 +6420 +55FC +5420 +4420 +4420 +57FE +8800 +ENDCHAR +STARTCHAR uni8244 +ENCODING 33348 +BBX 14 16 0 -2 +BITMAP +1020 +2124 +7CA4 +44A8 +6420 +55FC +5504 +FD04 +45FC +6504 +5504 +55FC +4504 +4504 +5514 +8908 +ENDCHAR +STARTCHAR uni8245 +ENCODING 33349 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +7C50 +4488 +5504 +56FA +4420 +FE20 +45FE +5420 +54A4 +54A4 +5522 +8522 +8C60 +ENDCHAR +STARTCHAR uni8246 +ENCODING 33350 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +7DFC +4504 +5504 +55FC +4504 +FF04 +45FC +5522 +5524 +5518 +5510 +85C8 +8F06 +ENDCHAR +STARTCHAR uni8247 +ENCODING 33351 +BBX 15 15 1 -1 +BITMAP +0804 +1018 +7DC8 +4448 +5488 +5488 +45FE +FE48 +4548 +5548 +5548 +549C +4480 +8560 +8D1E +ENDCHAR +STARTCHAR uni8248 +ENCODING 33352 +BBX 15 16 0 -2 +BITMAP +1020 +2010 +7DFE +4420 +6448 +5484 +55FE +FC02 +44A8 +64A8 +54A8 +54A8 +44A8 +44AA +552A +8A06 +ENDCHAR +STARTCHAR uni8249 +ENCODING 33353 +BBX 15 15 1 -1 +BITMAP +1000 +21FC +7D04 +45FC +5500 +5518 +45E0 +FF20 +453C +55E0 +553E +55E0 +5522 +8622 +8C1E +ENDCHAR +STARTCHAR uni824A +ENCODING 33354 +BBX 15 16 0 -2 +BITMAP +0810 +1020 +3E7C +2244 +327C +2A44 +2A7C +FE10 +2210 +32FE +2A92 +2A92 +2292 +4296 +4A10 +8410 +ENDCHAR +STARTCHAR uni824B +ENCODING 33355 +BBX 15 15 1 -1 +BITMAP +1000 +21F8 +7C10 +4420 +5420 +57FE +4420 +FE20 +44E0 +5400 +55FC +5554 +5554 +8554 +8FFE +ENDCHAR +STARTCHAR uni824C +ENCODING 33356 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +7850 +4888 +6944 +5A22 +49F8 +F808 +4850 +4820 +68A4 +5A82 +4A8A +4A8A +4C78 +9800 +ENDCHAR +STARTCHAR uni824D +ENCODING 33357 +BBX 15 16 0 -2 +BITMAP +1000 +21FC +7D04 +4504 +65FC +5510 +5510 +FDFE +4510 +6510 +557C +5544 +4544 +4544 +557C +8A44 +ENDCHAR +STARTCHAR uni824E +ENCODING 33358 +BBX 15 16 0 -2 +BITMAP +1020 +2040 +7DFC +4504 +65FC +5504 +55FC +FC00 +47FE +6420 +5420 +55FC +4420 +4420 +57FE +8800 +ENDCHAR +STARTCHAR uni824F +ENCODING 33359 +BBX 15 15 1 -1 +BITMAP +1084 +2044 +7C48 +45FE +5420 +54FC +4484 +FE84 +44FC +5484 +5484 +54FC +5484 +8484 +8CFC +ENDCHAR +STARTCHAR uni8250 +ENCODING 33360 +BBX 15 16 0 -2 +BITMAP +1050 +2124 +7D54 +4504 +65FC +5450 +5488 +FD44 +4478 +6488 +5488 +5550 +4420 +4450 +5488 +8906 +ENDCHAR +STARTCHAR uni8251 +ENCODING 33361 +BBX 15 16 0 -2 +BITMAP +1020 +2010 +7DFE +4502 +6502 +55FE +5500 +FD00 +45FE +65AA +56AA +54FE +44AA +44AA +54AA +8886 +ENDCHAR +STARTCHAR uni8252 +ENCODING 33362 +BBX 15 16 0 -2 +BITMAP +1000 +21FE +7D02 +457A +6502 +557A +5502 +FC00 +44FC +6484 +54FC +5484 +44FC +4484 +54FC +8884 +ENDCHAR +STARTCHAR uni8253 +ENCODING 33363 +BBX 15 16 0 -2 +BITMAP +1048 +2148 +7D48 +47FE +6548 +5548 +5578 +FD00 +45FE +6420 +57FE +5470 +44A8 +4524 +5622 +8820 +ENDCHAR +STARTCHAR uni8254 +ENCODING 33364 +BBX 15 16 0 -2 +BITMAP +1040 +2020 +7DFE +4548 +6548 +55FE +5548 +FD78 +4500 +65FC +5544 +5548 +4528 +4510 +5528 +8AC6 +ENDCHAR +STARTCHAR uni8255 +ENCODING 33365 +BBX 15 16 0 -2 +BITMAP +1020 +2010 +7DFE +4484 +6448 +55FE +5502 +FE24 +4410 +65FE +5440 +547C +4444 +4484 +5494 +8908 +ENDCHAR +STARTCHAR uni8256 +ENCODING 33366 +BBX 15 16 0 -2 +BITMAP +1084 +2044 +7C48 +45FE +6420 +54FC +5420 +FDFE +4440 +6480 +54FE +5510 +4610 +4410 +55FE +8800 +ENDCHAR +STARTCHAR uni8257 +ENCODING 33367 +BBX 15 15 1 -1 +BITMAP +1030 +2088 +7D04 +467A +5400 +5478 +4488 +FD04 +4602 +5400 +55FC +5554 +5554 +8554 +8FFE +ENDCHAR +STARTCHAR uni8258 +ENCODING 33368 +BBX 15 15 1 -1 +BITMAP +0820 +10A0 +7D2C +4524 +55AC +5524 +4524 +FFAC +4420 +57FC +5404 +5488 +4470 +84D8 +8F06 +ENDCHAR +STARTCHAR uni8259 +ENCODING 33369 +BBX 15 15 1 -1 +BITMAP +0820 +1050 +7C88 +4776 +5400 +54FC +4484 +FEFC +4484 +54FC +5500 +55FE +5682 +8482 +8CFE +ENDCHAR +STARTCHAR uni825A +ENCODING 33370 +BBX 15 15 1 -1 +BITMAP +0848 +1048 +7DFE +4448 +55FE +554A +45FE +FF4A +45FE +5400 +54FC +5484 +44FC +8484 +8CFC +ENDCHAR +STARTCHAR uni825B +ENCODING 33371 +BBX 15 16 0 -2 +BITMAP +1020 +21FC +7D24 +47FE +6524 +55FC +5420 +FDFC +4524 +65FC +5440 +57FE +4488 +45D0 +5470 +8B8C +ENDCHAR +STARTCHAR uni825C +ENCODING 33372 +BBX 15 15 1 -1 +BITMAP +1154 +2154 +7FFE +4554 +5554 +5676 +4400 +FFFE +4622 +5622 +55FC +5524 +5524 +852C +8C20 +ENDCHAR +STARTCHAR uni825D +ENCODING 33373 +BBX 15 15 1 -1 +BITMAP +0800 +11FC +7C20 +45FE +5522 +55BA +4522 +FE98 +4400 +54FC +5404 +55FE +4404 +8404 +8CFC +ENDCHAR +STARTCHAR uni825E +ENCODING 33374 +BBX 15 16 0 -2 +BITMAP +1110 +2110 +7DDE +46A8 +6444 +5450 +5554 +FCD8 +4450 +64D8 +5554 +5652 +4490 +4492 +5512 +8A0E +ENDCHAR +STARTCHAR uni825F +ENCODING 33375 +BBX 15 15 1 -1 +BITMAP +0820 +1020 +7DFC +4488 +57FE +5400 +45FC +FF24 +45FC +5524 +55FC +5420 +45FC +8420 +8FFE +ENDCHAR +STARTCHAR uni8260 +ENCODING 33376 +BBX 15 15 1 -1 +BITMAP +0808 +11D0 +7E62 +4594 +5508 +56F6 +4400 +FDF8 +4508 +5508 +55F8 +5400 +4508 +8490 +8FFE +ENDCHAR +STARTCHAR uni8261 +ENCODING 33377 +BBX 15 16 0 -2 +BITMAP +1020 +2124 +78A8 +4BFE +6A02 +58F8 +4888 +F888 +48F8 +4800 +69FC +5924 +49FC +4924 +49FC +9904 +ENDCHAR +STARTCHAR uni8262 +ENCODING 33378 +BBX 15 15 1 -1 +BITMAP +0820 +1020 +7C20 +47FE +5524 +5524 +46AA +FC20 +47FE +5504 +5574 +5554 +4574 +8504 +8DFC +ENDCHAR +STARTCHAR uni8263 +ENCODING 33379 +BBX 15 15 1 -1 +BITMAP +1020 +203C +7C20 +45FE +5522 +55FC +4522 +FF7E +4554 +55FE +5554 +55FE +5522 +8642 +8C8C +ENDCHAR +STARTCHAR uni8264 +ENCODING 33380 +BBX 15 15 1 -1 +BITMAP +0884 +1048 +7DFC +4420 +54F8 +5420 +45FE +FE04 +45EA +5448 +57FE +544A +45EC +844A +8DD6 +ENDCHAR +STARTCHAR uni8265 +ENCODING 33381 +BBX 15 16 0 -2 +BITMAP +1010 +23D4 +7A52 +4A52 +6BD0 +5810 +4FFE +FA50 +4BD2 +4A52 +6BD4 +5A54 +4AEA +4F4A +4856 +9862 +ENDCHAR +STARTCHAR uni8266 +ENCODING 33382 +BBX 15 15 1 -1 +BITMAP +1008 +11E8 +7D48 +45FE +5520 +55E0 +4540 +FF4E +45E0 +5400 +55FC +5554 +4554 +8554 +8FFE +ENDCHAR +STARTCHAR uni8267 +ENCODING 33383 +BBX 15 16 0 -2 +BITMAP +1088 +23FE +7CA8 +4490 +65FE +5720 +55FC +FD20 +45FC +6520 +55FE +5500 +47FC +4488 +5470 +8B8E +ENDCHAR +STARTCHAR uni8268 +ENCODING 33384 +BBX 15 15 1 -1 +BITMAP +0848 +11FE +7C48 +45FE +5502 +557A +4400 +FFFE +4420 +55D4 +5438 +54D8 +4434 +8452 +8DB0 +ENDCHAR +STARTCHAR uni8269 +ENCODING 33385 +BBX 15 16 0 -2 +BITMAP +1040 +2020 +7BFE +4888 +6852 +5FAC +4AAA +FAA8 +4DAC +4800 +6904 +59FC +4904 +49FC +4904 +9A04 +ENDCHAR +STARTCHAR uni826A +ENCODING 33386 +BBX 15 15 1 -1 +BITMAP +0880 +11F0 +7F20 +45FC +5524 +55FC +4524 +FFFC +4554 +5652 +55FC +5504 +45FC +8504 +8DFC +ENDCHAR +STARTCHAR uni826B +ENCODING 33387 +BBX 15 15 1 -1 +BITMAP +1020 +203C +7820 +4BFE +6A22 +5AF8 +4A24 +FEFC +4AA8 +6AF8 +5AA8 +5AF8 +4D54 +8954 +9BFE +ENDCHAR +STARTCHAR uni826C +ENCODING 33388 +BBX 15 16 0 -2 +BITMAP +11F0 +2210 +7BFC +4E04 +6BFC +5A24 +4BB8 +FA22 +49FE +4A10 +6FFC +5A44 +4BFC +48D0 +494A +9A3E +ENDCHAR +STARTCHAR uni826D +ENCODING 33389 +BBX 15 16 0 -2 +BITMAP +1108 +2294 +7BDE +4EB4 +6BDE +5A94 +4BDE +FA94 +4BDE +4A10 +6FFC +5908 +4890 +4860 +4998 +9E06 +ENDCHAR +STARTCHAR uni826E +ENCODING 33390 +BBX 14 14 1 -1 +BITMAP +3FF0 +2010 +2010 +3FF0 +2010 +2010 +3FF4 +2108 +2110 +20A0 +20C0 +2640 +3830 +E00C +ENDCHAR +STARTCHAR uni826F +ENCODING 33391 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1108 +1110 +10A0 +1340 +1C30 +E00E +ENDCHAR +STARTCHAR uni8270 +ENCODING 33392 +BBX 15 15 0 -2 +BITMAP +01F8 +FD08 +0508 +45F8 +4508 +2908 +29F8 +1144 +1148 +2930 +2920 +4510 +4548 +8186 +0100 +ENDCHAR +STARTCHAR uni8271 +ENCODING 33393 +BBX 15 15 1 -1 +BITMAP +2200 +FF7C +2244 +3E44 +087C +7F44 +4944 +7F7C +0848 +7F4A +084C +FFC8 +1444 +2274 +C1C2 +ENDCHAR +STARTCHAR uni8272 +ENCODING 33394 +BBX 15 15 1 -1 +BITMAP +0800 +0FE0 +1020 +2040 +FFF8 +2108 +2108 +2108 +2108 +3FF8 +2000 +2000 +2002 +2002 +1FFE +ENDCHAR +STARTCHAR uni8273 +ENCODING 33395 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10F8 +FD08 +1210 +15FC +1124 +7D24 +1124 +11FC +1100 +FD00 +1102 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni8274 +ENCODING 33396 +BBX 15 15 1 -1 +BITMAP +2840 +287C +FE44 +2A88 +2B08 +FEFE +A892 +A892 +A892 +FEFE +2A80 +2A80 +4A82 +4E82 +887E +ENDCHAR +STARTCHAR uni8275 +ENCODING 33397 +BBX 15 16 0 -2 +BITMAP +4240 +2440 +00FC +7E88 +2510 +24FC +24A4 +24A4 +FFA4 +24FC +2480 +2480 +2482 +4482 +447E +8400 +ENDCHAR +STARTCHAR uni8276 +ENCODING 33398 +BBX 15 15 1 -1 +BITMAP +1420 +7F3E +5524 +7F44 +5588 +7F7E +0052 +FFD2 +0052 +7F7E +4140 +7F40 +2242 +1442 +FFBE +ENDCHAR +STARTCHAR uni8277 +ENCODING 33399 +BBX 15 15 1 -1 +BITMAP +AA90 +FF9C +AAA4 +FFE8 +AABE +FFAA +002A +FFAA +002A +7F3E +4120 +7F20 +2122 +1222 +FF9E +ENDCHAR +STARTCHAR uni8278 +ENCODING 33400 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +1010 +9292 +9292 +9292 +9292 +9292 +9292 +FEFE +1010 +2010 +2010 +4010 +8010 +ENDCHAR +STARTCHAR uni8279 +ENCODING 33401 +BBX 15 9 1 2 +BITMAP +0820 +0820 +0820 +0820 +FFFE +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uni827A +ENCODING 33402 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +3FE0 +00C0 +0300 +0400 +0800 +1000 +2004 +2004 +1FFC +ENDCHAR +STARTCHAR uni827B +ENCODING 33403 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0A20 +0200 +0200 +7FF8 +0208 +0408 +0408 +0808 +0808 +1008 +2050 +4020 +ENDCHAR +STARTCHAR uni827C +ENCODING 33404 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +7FFC +0100 +0100 +0100 +0100 +0100 +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni827D +ENCODING 33405 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0400 +0400 +7FE0 +0420 +0420 +0820 +0820 +1022 +2022 +C01E +ENDCHAR +STARTCHAR uni827E +ENCODING 33406 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +1010 +1010 +0820 +0440 +0280 +0100 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni827F +ENCODING 33407 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +3FE0 +0420 +0420 +043C +0404 +0804 +0804 +1004 +6038 +ENDCHAR +STARTCHAR uni8280 +ENCODING 33408 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +3FF8 +0208 +0208 +0208 +0208 +0408 +0408 +0808 +1050 +6020 +ENDCHAR +STARTCHAR uni8281 +ENCODING 33409 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +0FE0 +0820 +0820 +0820 +0820 +1022 +1022 +2022 +401E +8000 +ENDCHAR +STARTCHAR uni8282 +ENCODING 33410 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +7FF8 +0208 +0208 +0208 +0208 +0250 +0220 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni8283 +ENCODING 33411 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +0FE0 +0820 +0820 +0A20 +0920 +08A0 +1022 +2022 +C01E +ENDCHAR +STARTCHAR uni8284 +ENCODING 33412 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0200 +0200 +7FE0 +0220 +0A20 +0420 +0620 +0922 +1022 +201E +4000 +ENDCHAR +STARTCHAR uni8285 +ENCODING 33413 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0A20 +0210 +0210 +02FE +FF00 +0200 +0100 +0100 +0080 +0042 +0032 +000E +ENDCHAR +STARTCHAR uni8286 +ENCODING 33414 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF0 +1210 +1120 +0820 +0440 +0280 +0100 +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni8287 +ENCODING 33415 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0100 +0100 +3FF8 +2108 +2108 +2108 +2108 +2128 +2110 +0100 +0100 +ENDCHAR +STARTCHAR uni8288 +ENCODING 33416 +BBX 15 16 0 -2 +BITMAP +0920 +0920 +F93E +0920 +0920 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni8289 +ENCODING 33417 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +3FF8 +0100 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni828A +ENCODING 33418 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +00F8 +3F00 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni828B +ENCODING 33419 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +0840 +0000 +3FF0 +0100 +0100 +FFFC +0100 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni828C +ENCODING 33420 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +3FF8 +0000 +0000 +FFFE +0400 +0800 +0FF0 +0010 +0010 +0010 +00A0 +0040 +ENDCHAR +STARTCHAR uni828D +ENCODING 33421 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1820 +1000 +1FF8 +2008 +4008 +0808 +0408 +0208 +0010 +0010 +00E0 +ENDCHAR +STARTCHAR uni828E +ENCODING 33422 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7FF8 +0008 +0008 +1FF8 +1000 +2000 +3FFC +2004 +0008 +0008 +0070 +ENDCHAR +STARTCHAR uni828F +ENCODING 33423 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +0100 +0100 +3FF8 +0100 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni8290 +ENCODING 33424 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +FFFE +0200 +0200 +0240 +0220 +0210 +0208 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni8291 +ENCODING 33425 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF0 +0010 +0010 +0010 +3FF0 +2000 +2004 +2004 +2004 +1FFC +ENDCHAR +STARTCHAR uni8292 +ENCODING 33426 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0100 +0100 +3FFC +2000 +2000 +2000 +2000 +2000 +2000 +1FF8 +ENDCHAR +STARTCHAR uni8293 +ENCODING 33427 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FFFE +0810 +0000 +1FF0 +0060 +0080 +0100 +FFFE +0100 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni8294 +ENCODING 33428 +BBX 15 16 0 -2 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0100 +1110 +1010 +9292 +9292 +9292 +FEFE +2212 +2010 +4010 +8010 +ENDCHAR +STARTCHAR uni8295 +ENCODING 33429 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0A20 +0200 +07F8 +0808 +1010 +6420 +0240 +0280 +0100 +0600 +1800 +E000 +ENDCHAR +STARTCHAR uni8296 +ENCODING 33430 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +0100 +FFFE +0100 +0280 +0280 +0440 +0820 +1010 +2008 +C006 +ENDCHAR +STARTCHAR uni8297 +ENCODING 33431 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0400 +0810 +1FE0 +00C0 +0304 +0C08 +3FF0 +1020 +0040 +0180 +0E00 +7000 +ENDCHAR +STARTCHAR uni8298 +ENCODING 33432 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +2080 +2080 +2088 +3C90 +20A0 +20C0 +2084 +2484 +2884 +307C +ENDCHAR +STARTCHAR uni8299 +ENCODING 33433 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +3FF8 +0100 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni829A +ENCODING 33434 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +FFFE +0100 +2108 +2108 +2108 +3FF8 +010A +0102 +0102 +00FE +ENDCHAR +STARTCHAR uni829B +ENCODING 33435 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF0 +0210 +0210 +FFFE +0210 +0410 +3FF0 +0810 +1000 +2000 +C000 +ENDCHAR +STARTCHAR uni829C +ENCODING 33436 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF0 +0200 +0200 +7FFC +0280 +0480 +0480 +0884 +1084 +207C +C000 +ENDCHAR +STARTCHAR uni829D +ENCODING 33437 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +0100 +3FF8 +0020 +0040 +0180 +1600 +2800 +4600 +8180 +807E +ENDCHAR +STARTCHAR uni829E +ENCODING 33438 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1000 +1FFC +2000 +5FF8 +8000 +3FF0 +0010 +0010 +0010 +000A +0006 +0002 +ENDCHAR +STARTCHAR uni829F +ENCODING 33439 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +07E0 +0820 +703C +0000 +3FF0 +0020 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni82A0 +ENCODING 33440 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0200 +0100 +7FFC +0820 +0820 +0440 +0280 +0100 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni82A1 +ENCODING 33441 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +1000 +1FFE +2004 +4108 +8110 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni82A2 +ENCODING 33442 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0800 +0800 +13FC +3000 +5000 +9000 +1000 +1000 +17FE +1000 +1000 +ENDCHAR +STARTCHAR uni82A3 +ENCODING 33443 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +FFFE +0080 +0180 +0340 +0D20 +3118 +C106 +0100 +0100 +ENDCHAR +STARTCHAR uni82A4 +ENCODING 33444 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +7E40 +0440 +0840 +0B40 +1C40 +E840 +0842 +0842 +383E +ENDCHAR +STARTCHAR uni82A5 +ENCODING 33445 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +FFFE +1010 +1110 +0280 +0440 +0820 +3838 +C826 +0820 +1020 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni82A6 +ENCODING 33446 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0870 +1F80 +1000 +1FF0 +1010 +1010 +1FF0 +2000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni82A7 +ENCODING 33447 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FFFE +0810 +0000 +1FF0 +0060 +0480 +0300 +FFFE +0104 +0108 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni82A8 +ENCODING 33448 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +3FE0 +0420 +0420 +07F8 +0508 +0908 +0890 +1070 +638E +ENDCHAR +STARTCHAR uni82A9 +ENCODING 33449 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0280 +0440 +0820 +37D8 +C006 +1FF0 +0010 +0020 +0040 +0080 +ENDCHAR +STARTCHAR uni82AA +ENCODING 33450 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0078 +3F80 +2080 +2080 +2080 +3FFE +2040 +2040 +2024 +2814 +300C +2004 +ENDCHAR +STARTCHAR uni82AB +ENCODING 33451 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +0000 +0000 +7FFC +0440 +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni82AC +ENCODING 33452 +BBX 15 15 1 -1 +BITMAP +0420 +0420 +FFFE +0420 +0000 +0440 +0820 +3018 +C006 +0FF0 +0210 +0210 +0410 +1810 +60E0 +ENDCHAR +STARTCHAR uni82AD +ENCODING 33453 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +3FF8 +2108 +2108 +2108 +3FF8 +2000 +2000 +2002 +2002 +1FFE +ENDCHAR +STARTCHAR uni82AE +ENCODING 33454 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0700 +0100 +7FFC +4104 +4284 +4284 +4444 +5834 +4004 +4004 +401C +ENDCHAR +STARTCHAR uni82AF +ENCODING 33455 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FFFC +1020 +1420 +0200 +0100 +0880 +2810 +2808 +2804 +4802 +4810 +8410 +03F0 +ENDCHAR +STARTCHAR uni82B0 +ENCODING 33456 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0100 +7FFC +0100 +0100 +3FF0 +0820 +0440 +0280 +0100 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni82B1 +ENCODING 33457 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0880 +1080 +108C +30F0 +5080 +9080 +1080 +1082 +1082 +107E +ENDCHAR +STARTCHAR uni82B2 +ENCODING 33458 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +FFFE +1010 +1110 +0280 +0440 +0820 +3818 +C866 +0F80 +0800 +0808 +0808 +07F8 +ENDCHAR +STARTCHAR uni82B3 +ENCODING 33459 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +FFFE +0200 +0200 +03F8 +0408 +0408 +0808 +1010 +60E0 +ENDCHAR +STARTCHAR uni82B4 +ENCODING 33460 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +1000 +1000 +3FFC +4224 +8424 +1844 +6084 +0304 +0C08 +0078 +ENDCHAR +STARTCHAR uni82B5 +ENCODING 33461 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +3FF0 +0110 +0110 +0110 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni82B6 +ENCODING 33462 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1000 +1FF8 +2008 +4408 +8408 +0908 +1088 +3FC8 +1048 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni82B7 +ENCODING 33463 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0100 +0100 +1100 +11F8 +1100 +1100 +1100 +1100 +1100 +FFFE +ENDCHAR +STARTCHAR uni82B8 +ENCODING 33464 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +0000 +7FF8 +0000 +0000 +FFFC +0400 +0440 +0820 +0830 +11C8 +7E08 +ENDCHAR +STARTCHAR uni82B9 +ENCODING 33465 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +0030 +1FC0 +1000 +1000 +1FFC +1040 +2040 +2040 +4040 +8040 +0040 +ENDCHAR +STARTCHAR uni82BA +ENCODING 33466 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0078 +3F80 +0100 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni82BB +ENCODING 33467 +BBX 14 15 1 -1 +BITMAP +1000 +1FF8 +2208 +D228 +1FE8 +0410 +1860 +E800 +1FFC +3004 +D224 +1224 +1FE8 +0808 +F070 +ENDCHAR +STARTCHAR uni82BC +ENCODING 33468 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +00E0 +0F00 +0100 +01F0 +3F00 +01FC +7F00 +0100 +0102 +00FE +ENDCHAR +STARTCHAR uni82BD +ENCODING 33469 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +0840 +7FFC +1020 +1020 +FFFE +00A0 +0120 +0620 +1820 +E020 +00E0 +ENDCHAR +STARTCHAR uni82BE +ENCODING 33470 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +FFFE +0100 +0100 +3FF8 +2108 +2108 +2108 +2138 +0100 +ENDCHAR +STARTCHAR uni82BF +ENCODING 33471 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0800 +0BF0 +1090 +3090 +509C +9084 +1104 +1104 +1204 +1438 +ENDCHAR +STARTCHAR uni82C0 +ENCODING 33472 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0A20 +0100 +7FFC +0000 +0000 +0FE0 +0820 +0820 +0822 +1022 +201E +C000 +ENDCHAR +STARTCHAR uni82C1 +ENCODING 33473 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +0820 +0820 +0820 +0820 +0820 +1450 +1250 +2288 +4104 +8202 +ENDCHAR +STARTCHAR uni82C2 +ENCODING 33474 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +1108 +1108 +1110 +2120 +0280 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni82C3 +ENCODING 33475 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0A20 +0200 +FFFE +0400 +0400 +0FF0 +0810 +1420 +2240 +4180 +8670 +380E +ENDCHAR +STARTCHAR uni82C4 +ENCODING 33476 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0A20 +0100 +0100 +FFFE +0200 +0200 +0240 +0220 +0210 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni82C5 +ENCODING 33477 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +0844 +0204 +4244 +2444 +1444 +0844 +0C44 +1244 +2104 +4004 +801C +ENDCHAR +STARTCHAR uni82C6 +ENCODING 33478 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +2000 +21FC +2C44 +3044 +E044 +2044 +2244 +2284 +1E84 +0118 +ENDCHAR +STARTCHAR uni82C7 +ENCODING 33479 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0100 +7FFC +0100 +0100 +1FF0 +0100 +0100 +7FFC +0104 +0104 +0114 +0108 +ENDCHAR +STARTCHAR uni82C8 +ENCODING 33480 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FFC +2100 +2100 +2FF8 +2108 +2108 +2208 +2208 +4408 +4850 +9020 +ENDCHAR +STARTCHAR uni82C9 +ENCODING 33481 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FFC +2240 +2240 +2240 +2244 +2444 +243C +2800 +2000 +3FFC +ENDCHAR +STARTCHAR uni82CA +ENCODING 33482 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FFC +2000 +2000 +27E0 +2420 +2420 +24A0 +2444 +4404 +4404 +83FC +ENDCHAR +STARTCHAR uni82CB +ENCODING 33483 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +1FF0 +1010 +1110 +1110 +1110 +1290 +0280 +0482 +1882 +607E +ENDCHAR +STARTCHAR uni82CC +ENCODING 33484 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0800 +0830 +09C0 +0E00 +0800 +FFFE +0900 +0880 +0840 +0A30 +0C0E +0800 +ENDCHAR +STARTCHAR uni82CD +ENCODING 33485 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0280 +0440 +0820 +3018 +CFE6 +0820 +0820 +08A8 +0848 +0808 +07F8 +ENDCHAR +STARTCHAR uni82CE +ENCODING 33486 +BBX 15 14 0 0 +BITMAP +0820 +0820 +FFFE +0820 +0A20 +0100 +7FFE +4002 +8004 +0000 +0000 +0000 +0000 +7FFC +ENDCHAR +STARTCHAR uni82CF +ENCODING 33487 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0A20 +0200 +7FF0 +0210 +0214 +2212 +2212 +2412 +4410 +0810 +10A0 +2040 +ENDCHAR +STARTCHAR uni82D0 +ENCODING 33488 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +3FF8 +0108 +0108 +3FF8 +2100 +2100 +3FFC +0304 +0504 +1928 +E110 +0100 +ENDCHAR +STARTCHAR uni82D1 +ENCODING 33489 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +1000 +1EFC +2284 +2284 +6284 +9C9C +0480 +0882 +3082 +C07E +ENDCHAR +STARTCHAR uni82D2 +ENCODING 33490 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +FFFE +2008 +2008 +2038 +ENDCHAR +STARTCHAR uni82D3 +ENCODING 33491 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +0280 +0C60 +3018 +CFE6 +0000 +3FF8 +0208 +0208 +0208 +0238 +0200 +ENDCHAR +STARTCHAR uni82D4 +ENCODING 33492 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +FFFC +1020 +0400 +0420 +0810 +11F8 +7E04 +0000 +1FF0 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni82D5 +ENCODING 33493 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +0204 +0404 +1818 +E000 +3FF8 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni82D6 +ENCODING 33494 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +3FF8 +2108 +2108 +2108 +3FF8 +2108 +2108 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni82D7 +ENCODING 33495 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +FFFE +1010 +1010 +0000 +3FF8 +2108 +2108 +2108 +3FF8 +2108 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni82D8 +ENCODING 33496 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0000 +3FF8 +2008 +2008 +27C8 +2448 +2448 +2448 +27C8 +2008 +2028 +2010 +ENDCHAR +STARTCHAR uni82D9 +ENCODING 33497 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0100 +0100 +7FFC +0000 +0820 +0820 +0440 +0440 +0080 +FFFE +ENDCHAR +STARTCHAR uni82DA +ENCODING 33498 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +2108 +4108 +4128 +8010 +ENDCHAR +STARTCHAR uni82DB +ENCODING 33499 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FFFE +0810 +0810 +0000 +FFFE +0008 +1F88 +1088 +1088 +1088 +1F88 +0008 +0038 +ENDCHAR +STARTCHAR uni82DC +ENCODING 33500 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni82DD +ENCODING 33501 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +0440 +0444 +7C48 +0470 +0440 +0442 +0C42 +3442 +C43E +0400 +ENDCHAR +STARTCHAR uni82DE +ENCODING 33502 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1000 +1FF8 +2008 +7FC8 +9048 +1048 +1FC8 +1008 +1072 +1002 +0FFE +ENDCHAR +STARTCHAR uni82DF +ENCODING 33503 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1820 +1000 +1FFC +2004 +4F84 +8884 +0884 +0884 +0F88 +0008 +0070 +ENDCHAR +STARTCHAR uni82E0 +ENCODING 33504 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +3FF8 +2008 +2008 +3FF8 +2080 +2080 +3FFC +2040 +2024 +2414 +280C +3004 +ENDCHAR +STARTCHAR uni82E1 +ENCODING 33505 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +1210 +1110 +1090 +1010 +1010 +1028 +1628 +3844 +C182 +ENDCHAR +STARTCHAR uni82E2 +ENCODING 33506 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +1010 +1010 +1FF0 +1000 +1FF8 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni82E3 +ENCODING 33507 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +4000 +4000 +7FF8 +4008 +4008 +7FF8 +4000 +4000 +7FFC +ENDCHAR +STARTCHAR uni82E4 +ENCODING 33508 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +0080 +0100 +0360 +0510 +1908 +6104 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni82E5 +ENCODING 33509 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +FFFC +1020 +0200 +0200 +FFFC +0400 +0800 +1FF0 +3010 +D010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni82E6 +ENCODING 33510 +BBX 13 15 2 -1 +BITMAP +1040 +1040 +FFF8 +1040 +1240 +0200 +FFF8 +0200 +0200 +3FE0 +2020 +2020 +2020 +2020 +3FE0 +ENDCHAR +STARTCHAR uni82E7 +ENCODING 33511 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FFFE +0810 +0910 +0100 +7FFC +4004 +0000 +FFFE +0100 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni82E8 +ENCODING 33512 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +2008 +3FF8 +2000 +2800 +2830 +4FC0 +4800 +8804 +07FC +ENDCHAR +STARTCHAR uni82E9 +ENCODING 33513 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0200 +3FF8 +2008 +2008 +2008 +3FF8 +2008 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni82EA +ENCODING 33514 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +0100 +0100 +3FF8 +2108 +2288 +2448 +2828 +2008 +2028 +2010 +ENDCHAR +STARTCHAR uni82EB +ENCODING 33515 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0A20 +0200 +03FC +0200 +0200 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni82EC +ENCODING 33516 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +2108 +2108 +2108 +2108 +2288 +2448 +2828 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni82ED +ENCODING 33517 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1040 +1040 +21FC +2444 +4444 +F844 +1044 +2044 +4884 +FC84 +4528 +0210 +ENDCHAR +STARTCHAR uni82EE +ENCODING 33518 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0820 +0820 +1020 +3124 +5124 +9124 +1124 +1124 +1124 +11FC +1004 +ENDCHAR +STARTCHAR uni82EF +ENCODING 33519 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +0100 +7FFC +0380 +0540 +0920 +1110 +2FE8 +C106 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni82F0 +ENCODING 33520 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7E10 +0210 +0210 +3E10 +2020 +4028 +7E24 +0244 +02FE +1442 +0800 +ENDCHAR +STARTCHAR uni82F1 +ENCODING 33521 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +1FF0 +1110 +1110 +1110 +7FFC +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni82F2 +ENCODING 33522 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0800 +0800 +1FFC +2400 +4400 +87F0 +0400 +0400 +07F8 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni82F3 +ENCODING 33523 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0200 +07F0 +1820 +6440 +0380 +1C70 +E30E +0080 +0000 +01C0 +0E00 +ENDCHAR +STARTCHAR uni82F4 +ENCODING 33524 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +FFFE +ENDCHAR +STARTCHAR uni82F5 +ENCODING 33525 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +1100 +1FF8 +2100 +0100 +FFFE +0100 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni82F6 +ENCODING 33526 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0280 +0440 +0920 +3118 +C106 +0100 +0920 +1110 +2108 +0500 +0200 +ENDCHAR +STARTCHAR uni82F7 +ENCODING 33527 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0820 +0820 +FFFE +0820 +0820 +0FE0 +0820 +0820 +0820 +0FE0 +ENDCHAR +STARTCHAR uni82F8 +ENCODING 33528 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0010 +00F8 +3F00 +1110 +0920 +0100 +FFFE +0100 +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni82F9 +ENCODING 33529 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +0000 +7FF8 +0200 +1220 +1210 +2210 +FFFC +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni82FA +ENCODING 33530 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0FF8 +0908 +0888 +FFFE +1108 +1088 +1088 +1FFE +0010 +0070 +ENDCHAR +STARTCHAR uni82FB +ENCODING 33531 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +1008 +1008 +27FE +6008 +A108 +2088 +2088 +2008 +2008 +2038 +ENDCHAR +STARTCHAR uni82FC +ENCODING 33532 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0920 +1100 +1100 +3FFC +4100 +8100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni82FD +ENCODING 33533 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0078 +1F80 +1010 +1110 +1110 +1110 +2148 +2148 +41A4 +9E12 +ENDCHAR +STARTCHAR uni82FE +ENCODING 33534 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0200 +0120 +04A0 +2420 +2448 +4444 +8482 +0308 +0E08 +F1F8 +ENDCHAR +STARTCHAR uni82FF +ENCODING 33535 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +3FF8 +0100 +0100 +FFFE +0380 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni8300 +ENCODING 33536 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0440 +7FFC +0444 +7FFC +4440 +4440 +7FFE +0442 +0842 +104E +6040 +ENDCHAR +STARTCHAR uni8301 +ENCODING 33537 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0100 +2108 +2108 +3FF8 +0100 +0100 +4104 +4104 +4104 +7FFC +ENDCHAR +STARTCHAR uni8302 +ENCODING 33538 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +08A8 +0084 +7FFE +4080 +4080 +4048 +4050 +4020 +80D2 +830A +9C04 +ENDCHAR +STARTCHAR uni8303 +ENCODING 33539 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +4820 +2000 +11FC +8104 +4104 +2104 +091C +1100 +2102 +4102 +80FE +ENDCHAR +STARTCHAR uni8304 +ENCODING 33540 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +1000 +1000 +FE7C +1244 +1244 +1244 +2244 +2244 +4244 +8C7C +ENDCHAR +STARTCHAR uni8305 +ENCODING 33541 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0840 +7FE0 +0040 +0880 +0500 +FFFC +0508 +0910 +1100 +2100 +C100 +0100 +0700 +ENDCHAR +STARTCHAR uni8306 +ENCODING 33542 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0700 +387C +2044 +2244 +2244 +3E44 +E244 +044C +1840 +6040 +ENDCHAR +STARTCHAR uni8307 +ENCODING 33543 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0220 +0210 +7FFC +0200 +0210 +0410 +0A20 +3140 +C180 +0660 +381C +ENDCHAR +STARTCHAR uni8308 +ENCODING 33544 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0840 +0840 +484C +4F70 +4840 +4840 +4840 +4B42 +5C42 +E03E +ENDCHAR +STARTCHAR uni8309 +ENCODING 33545 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +7FFC +0100 +0100 +3FF8 +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni830A +ENCODING 33546 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +FFFE +0440 +0010 +0078 +1F80 +1000 +1000 +1FFC +1040 +1040 +1040 +1040 +FFFE +ENDCHAR +STARTCHAR uni830B +ENCODING 33547 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0878 +3F80 +2080 +2080 +2080 +3FFE +2040 +2040 +2224 +2914 +308C +2084 +ENDCHAR +STARTCHAR uni830C +ENCODING 33548 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0840 +0840 +1040 +37FE +5040 +9040 +1040 +1040 +1040 +13FC +ENDCHAR +STARTCHAR uni830D +ENCODING 33549 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FC7E +0440 +1440 +1000 +1FF8 +2008 +4008 +9F88 +1088 +1088 +1F88 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni830E +ENCODING 33550 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3FF0 +1020 +0C40 +0380 +1C70 +E10E +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni830F +ENCODING 33551 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0040 +0420 +7FFC +0480 +0488 +0890 +08A0 +10C2 +2382 +4C82 +807E +ENDCHAR +STARTCHAR uni8310 +ENCODING 33552 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1000 +1000 +1FF8 +2248 +4A48 +8488 +0A88 +1108 +2288 +4408 +0850 +1020 +ENDCHAR +STARTCHAR uni8311 +ENCODING 33553 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0200 +1FF0 +1210 +1110 +1150 +1020 +1FFC +0004 +7FE4 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni8312 +ENCODING 33554 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1000 +1E7C +1244 +2248 +2250 +5248 +8C44 +0444 +0854 +1048 +2040 +4040 +ENDCHAR +STARTCHAR uni8313 +ENCODING 33555 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0A20 +0100 +7FFE +4002 +8004 +0440 +0440 +0820 +0820 +1010 +2008 +C006 +ENDCHAR +STARTCHAR uni8314 +ENCODING 33556 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFE +4002 +8104 +0100 +3FF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni8315 +ENCODING 33557 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFE +4002 +8004 +1FE0 +0420 +0420 +3FA0 +0420 +0414 +040C +0404 +ENDCHAR +STARTCHAR uni8316 +ENCODING 33558 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0400 +0FF0 +1820 +6440 +0380 +1C70 +E00E +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8317 +ENCODING 33559 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0200 +07E0 +0820 +1840 +6680 +0100 +07F8 +1C08 +E408 +0408 +07F8 +ENDCHAR +STARTCHAR uni8318 +ENCODING 33560 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3FF0 +0210 +0410 +0810 +30E0 +0000 +FEFE +2222 +2222 +4242 +8C8C +ENDCHAR +STARTCHAR uni8319 +ENCODING 33561 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0090 +0088 +FFFE +0080 +1088 +1088 +7E50 +1050 +1024 +2054 +418C +8604 +ENDCHAR +STARTCHAR uni831A +ENCODING 33562 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0600 +78FC +4084 +4084 +7E84 +4084 +4084 +4094 +4E88 +7080 +0080 +0080 +ENDCHAR +STARTCHAR uni831B +ENCODING 33563 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1048 +1050 +1020 +1F18 +7006 +ENDCHAR +STARTCHAR uni831C +ENCODING 33564 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +0840 +FFFC +0480 +7FF8 +4488 +4488 +48F8 +7008 +4008 +4008 +7FF8 +ENDCHAR +STARTCHAR uni831D +ENCODING 33565 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FFC +2080 +2080 +24F8 +2408 +2408 +24F8 +2080 +2080 +3FFC +ENDCHAR +STARTCHAR uni831E +ENCODING 33566 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FFC +2100 +2100 +3FF8 +2008 +2008 +3FF8 +2100 +2100 +3FFC +ENDCHAR +STARTCHAR uni831F +ENCODING 33567 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +3FF0 +0110 +FFFE +0110 +3FF0 +0100 +3FF8 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni8320 +ENCODING 33568 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0000 +0840 +0840 +1040 +37FC +50E0 +9150 +1150 +1248 +1444 +1842 +1040 +ENDCHAR +STARTCHAR uni8321 +ENCODING 33569 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0100 +7FFC +4004 +8008 +1FE0 +0040 +0080 +FFFE +0100 +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni8322 +ENCODING 33570 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0004 +FF04 +1044 +1044 +3E44 +2244 +6244 +9444 +0C04 +1804 +E01C +ENDCHAR +STARTCHAR uni8323 +ENCODING 33571 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +27F0 +2410 +2410 +27F0 +2000 +3FF8 +0108 +FFFE +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni8324 +ENCODING 33572 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0200 +07E0 +1840 +6480 +0320 +0C40 +71F8 +0608 +1A10 +0120 +00C0 +0700 +7800 +ENDCHAR +STARTCHAR uni8325 +ENCODING 33573 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +3FF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni8326 +ENCODING 33574 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0100 +FFFE +0100 +3FF8 +2108 +2108 +2128 +2390 +0560 +1918 +E106 +0100 +ENDCHAR +STARTCHAR uni8327 +ENCODING 33575 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +3FF8 +2108 +2108 +2108 +3FF8 +0100 +0110 +01F8 +7F04 +2004 +ENDCHAR +STARTCHAR uni8328 +ENCODING 33576 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +F1FC +0204 +0248 +0440 +1040 +10A0 +2110 +4208 +8C06 +ENDCHAR +STARTCHAR uni8329 +ENCODING 33577 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0078 +1F80 +1000 +1000 +1FFC +1000 +1000 +17F8 +2408 +2408 +47F8 +8408 +ENDCHAR +STARTCHAR uni832A +ENCODING 33578 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +1110 +0910 +0920 +FFFE +0440 +0440 +0440 +0842 +1042 +203E +C000 +ENDCHAR +STARTCHAR uni832B +ENCODING 33579 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +4820 +2040 +1040 +83FC +4200 +2200 +0A00 +1200 +2200 +4200 +81FC +ENDCHAR +STARTCHAR uni832C +ENCODING 33580 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0200 +0400 +FFFE +0800 +1040 +3040 +53FC +9040 +1040 +1040 +17FE +1000 +ENDCHAR +STARTCHAR uni832D +ENCODING 33581 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +FFFE +0440 +1830 +701C +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni832E +ENCODING 33582 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0200 +03F8 +0200 +0200 +FFFE +0000 +0100 +1110 +1108 +2104 +4504 +0200 +ENDCHAR +STARTCHAR uni832F +ENCODING 33583 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1048 +1044 +2044 +2FFE +6040 +A0A0 +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni8330 +ENCODING 33584 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0900 +0500 +0300 +1CE0 +E01E +ENDCHAR +STARTCHAR uni8331 +ENCODING 33585 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +0900 +1FF8 +2100 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni8332 +ENCODING 33586 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1020 +1020 +2448 +64C8 +1830 +0810 +1224 +1224 +2D5A +F0E2 +ENDCHAR +STARTCHAR uni8333 +ENCODING 33587 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +2000 +17FC +9040 +4040 +4840 +0840 +1040 +E040 +2040 +2FFE +2000 +ENDCHAR +STARTCHAR uni8334 +ENCODING 33588 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +4004 +4004 +4FE4 +4824 +4824 +4FE4 +4004 +4004 +7FFC +ENDCHAR +STARTCHAR uni8335 +ENCODING 33589 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +4104 +4104 +4FE4 +4104 +4284 +4444 +4824 +4004 +7FFC +ENDCHAR +STARTCHAR uni8336 +ENCODING 33590 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0280 +0C60 +3118 +C106 +1FF0 +0100 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni8337 +ENCODING 33591 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +08A0 +0890 +1080 +30FC +5780 +9048 +1050 +1024 +1054 +118C +1604 +ENDCHAR +STARTCHAR uni8338 +ENCODING 33592 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +FFFE +0820 +0FE0 +0820 +0FE0 +0820 +0820 +0FFE +F820 +0020 +ENDCHAR +STARTCHAR uni8339 +ENCODING 33593 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0800 +FF7E +1142 +1142 +2242 +2242 +7C42 +0A42 +317E +C000 +ENDCHAR +STARTCHAR uni833A +ENCODING 33594 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +FFFE +0200 +0440 +08F0 +3F88 +0440 +0842 +1042 +E03E +ENDCHAR +STARTCHAR uni833B +ENCODING 33595 +BBX 15 16 0 -2 +BITMAP +1010 +9292 +9292 +9292 +FEFE +2010 +4010 +8000 +1010 +9292 +9292 +9292 +FEFE +2212 +2010 +4010 +ENDCHAR +STARTCHAR uni833C +ENCODING 33596 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +4004 +4FE4 +4004 +4FE4 +4824 +4824 +4FE4 +4004 +401C +ENDCHAR +STARTCHAR uni833D +ENCODING 33597 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1040 +1040 +27FC +6444 +A444 +2444 +27FC +2444 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni833E +ENCODING 33598 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +7FFC +0820 +0820 +0820 +FFFE +0820 +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni833F +ENCODING 33599 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +7DF0 +1110 +1110 +1190 +1150 +1D12 +E212 +4212 +040E +0800 +ENDCHAR +STARTCHAR uni8340 +ENCODING 33600 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1820 +1000 +1FFC +2004 +4F84 +8884 +0F84 +0884 +0F88 +0008 +0070 +ENDCHAR +STARTCHAR uni8341 +ENCODING 33601 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +0000 +FFFE +ENDCHAR +STARTCHAR uni8342 +ENCODING 33602 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0200 +7FFC +0440 +0820 +37D8 +C006 +3FF8 +0800 +0FE0 +0020 +0020 +0140 +0080 +ENDCHAR +STARTCHAR uni8343 +ENCODING 33603 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0B20 +0100 +0280 +0460 +1818 +EFE6 +0100 +0FE0 +0100 +0100 +7FFC +ENDCHAR +STARTCHAR uni8344 +ENCODING 33604 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +0100 +7FFC +0400 +0880 +3110 +0A20 +0C40 +7080 +0340 +0C30 +700C +ENDCHAR +STARTCHAR uni8345 +ENCODING 33605 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0280 +0440 +0820 +37D8 +C006 +1FF0 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8346 +ENCODING 33606 +BBX 14 16 0 -2 +BITMAP +1204 +1204 +FFC4 +1224 +0024 +7FA4 +1224 +1224 +1224 +FFE4 +1224 +1224 +2204 +2204 +4214 +8208 +ENDCHAR +STARTCHAR uni8347 +ENCODING 33607 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +1000 +21FC +C000 +0800 +13FE +2010 +E010 +2010 +2010 +2070 +ENDCHAR +STARTCHAR uni8348 +ENCODING 33608 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1010 +1010 +3E10 +22FC +4210 +A490 +1490 +08FE +1010 +2010 +4010 +8010 +ENDCHAR +STARTCHAR uni8349 +ENCODING 33609 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni834A +ENCODING 33610 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +7F84 +1224 +1224 +1224 +FFA4 +1224 +1224 +2204 +2204 +421C +ENDCHAR +STARTCHAR uni834B +ENCODING 33611 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +0100 +0200 +3FF8 +2488 +2488 +2488 +2488 +2488 +24A8 +2010 +ENDCHAR +STARTCHAR uni834C +ENCODING 33612 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0100 +7FFE +4002 +8204 +0200 +FFFE +0420 +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni834D +ENCODING 33613 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0440 +4440 +4480 +44FE +4508 +4688 +5C90 +6450 +4420 +0450 +0488 +0506 +ENDCHAR +STARTCHAR uni834E +ENCODING 33614 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +0400 +0820 +1FF0 +0110 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni834F +ENCODING 33615 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +1038 +13C0 +2040 +6040 +A040 +2FFE +2040 +2040 +2040 +27FC +ENDCHAR +STARTCHAR uni8350 +ENCODING 33616 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0400 +FFFE +0800 +11F8 +1010 +3020 +57FE +1020 +1020 +1020 +10E0 +ENDCHAR +STARTCHAR uni8351 +ENCODING 33617 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +FFFE +0100 +7FF8 +0108 +3FF8 +2100 +3FFC +0284 +044C +1830 +E00E +ENDCHAR +STARTCHAR uni8352 +ENCODING 33618 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +FFFE +1010 +0100 +7FFC +1000 +1000 +0FF8 +0000 +0920 +0920 +0922 +1122 +601E +ENDCHAR +STARTCHAR uni8353 +ENCODING 33619 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1010 +0820 +7FFC +0820 +0820 +0820 +FFFE +0820 +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni8354 +ENCODING 33620 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +1FF0 +0210 +0410 +18E0 +1010 +FEFE +2222 +2222 +4242 +9C8C +ENDCHAR +STARTCHAR uni8355 +ENCODING 33621 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0840 +3E40 +23FC +2244 +3E44 +2244 +2244 +3E44 +2244 +4284 +4718 +ENDCHAR +STARTCHAR uni8356 +ENCODING 33622 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0208 +3FD0 +0220 +0240 +FFFE +0100 +0610 +18E0 +2F00 +C808 +0808 +07F8 +ENDCHAR +STARTCHAR uni8357 +ENCODING 33623 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0890 +0088 +3FFE +2080 +2088 +2848 +2450 +2420 +4062 +4192 +860C +ENDCHAR +STARTCHAR uni8358 +ENCODING 33624 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1000 +1040 +9040 +5040 +1FFE +1040 +3040 +5040 +9040 +1040 +17FC +ENDCHAR +STARTCHAR uni8359 +ENCODING 33625 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2040 +1040 +1040 +07FC +7040 +10A0 +1090 +1108 +1204 +1404 +2800 +47FE +ENDCHAR +STARTCHAR uni835A +ENCODING 33626 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +0100 +3FF8 +0100 +1110 +0920 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni835B +ENCODING 33627 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +02FC +7F20 +0140 +0084 +0764 +381C +0000 +7FFC +0440 +0842 +1042 +603E +ENDCHAR +STARTCHAR uni835C +ENCODING 33628 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2080 +2088 +3EB0 +20C4 +2084 +267C +3900 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni835D +ENCODING 33629 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0004 +7F04 +4124 +4924 +4924 +4924 +4924 +4924 +1424 +2204 +4114 +8088 +ENDCHAR +STARTCHAR uni835E +ENCODING 33630 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +00F0 +3F00 +0200 +FFFE +0440 +0820 +3458 +C446 +0440 +0440 +0840 +1040 +ENDCHAR +STARTCHAR uni835F +ENCODING 33631 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0280 +0440 +0820 +37D8 +C006 +0000 +3FF8 +0200 +0440 +0820 +1FF0 +0810 +ENDCHAR +STARTCHAR uni8360 +ENCODING 33632 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0100 +7FFC +0820 +0440 +0380 +0C60 +3018 +C446 +0440 +0440 +0840 +1040 +ENDCHAR +STARTCHAR uni8361 +ENCODING 33633 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +23F0 +1020 +1040 +8080 +4BFC +48A4 +1124 +E244 +2484 +2128 +2210 +ENDCHAR +STARTCHAR uni8362 +ENCODING 33634 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +7FFC +4004 +5FF4 +0100 +0100 +FFFE +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni8363 +ENCODING 33635 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7FFC +4004 +4104 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +0100 +ENDCHAR +STARTCHAR uni8364 +ENCODING 33636 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7FFE +4202 +8204 +3FF8 +0900 +1100 +1FF0 +0100 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni8365 +ENCODING 33637 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFE +4002 +8104 +0104 +7D88 +0550 +0920 +1110 +2108 +C506 +0200 +ENDCHAR +STARTCHAR uni8366 +ENCODING 33638 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFE +4002 +8104 +1100 +1FF8 +2100 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni8367 +ENCODING 33639 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFE +4002 +8104 +1110 +1110 +22A0 +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni8368 +ENCODING 33640 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +3FF0 +0010 +1FF0 +0010 +3FF0 +0020 +FFFE +0820 +0420 +0420 +00A0 +0040 +ENDCHAR +STARTCHAR uni8369 +ENCODING 33641 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1FF0 +1010 +1010 +1FF0 +1080 +1040 +1620 +2110 +2088 +4606 +8180 +0040 +ENDCHAR +STARTCHAR uni836A +ENCODING 33642 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0000 +7C20 +0420 +0820 +10A8 +10A4 +1D24 +F122 +1222 +1020 +50A0 +2040 +ENDCHAR +STARTCHAR uni836B +ENCODING 33643 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0000 +7CFC +4484 +4884 +50FC +4884 +4484 +44FC +5484 +4884 +4114 +4208 +ENDCHAR +STARTCHAR uni836C +ENCODING 33644 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0000 +7FFC +0404 +0288 +1280 +0880 +0900 +FFFE +0240 +0420 +1810 +6008 +ENDCHAR +STARTCHAR uni836D +ENCODING 33645 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1000 +1000 +21FC +4420 +F820 +1020 +2020 +FC20 +4020 +1C20 +E3FE +4000 +ENDCHAR +STARTCHAR uni836E +ENCODING 33646 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1008 +1008 +2008 +45FE +F808 +1088 +2048 +FC48 +4008 +1C08 +E028 +4010 +ENDCHAR +STARTCHAR uni836F +ENCODING 33647 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1080 +1080 +20FC +4504 +FA04 +1084 +2044 +FC44 +0004 +1C04 +E028 +4010 +ENDCHAR +STARTCHAR uni8370 +ENCODING 33648 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1020 +1020 +FC20 +31FC +3820 +5420 +5020 +9020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni8371 +ENCODING 33649 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +3FF8 +2008 +3FF8 +2000 +2070 +2F80 +20F0 +2F80 +20F8 +5F82 +4082 +807E +ENDCHAR +STARTCHAR uni8372 +ENCODING 33650 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0000 +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni8373 +ENCODING 33651 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +0000 +1FF0 +1010 +1010 +1FF0 +0820 +0820 +0440 +FFFE +ENDCHAR +STARTCHAR uni8374 +ENCODING 33652 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1020 +FDFC +1020 +1420 +1820 +33FE +D050 +1050 +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni8375 +ENCODING 33653 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +0108 +1208 +0C08 +1310 +6060 +0908 +2884 +4412 +83F0 +ENDCHAR +STARTCHAR uni8376 +ENCODING 33654 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0040 +0040 +78A0 +4910 +4A88 +4C46 +4840 +4BF0 +7810 +4820 +0020 +0040 +ENDCHAR +STARTCHAR uni8377 +ENCODING 33655 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +17FE +1008 +23C8 +2248 +6248 +A248 +2248 +23C8 +2008 +2038 +ENDCHAR +STARTCHAR uni8378 +ENCODING 33656 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0100 +3FF8 +0100 +7FFE +4002 +9FE4 +0040 +0180 +FFFE +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni8379 +ENCODING 33657 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +11F8 +1100 +1100 +FFFE +0100 +0908 +1110 +6060 +0180 +0E00 +F000 +ENDCHAR +STARTCHAR uni837A +ENCODING 33658 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +1080 +10FC +7D04 +1204 +1084 +1054 +1C24 +E044 +4184 +0028 +0010 +ENDCHAR +STARTCHAR uni837B +ENCODING 33659 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +8840 +5040 +2244 +D244 +3448 +54A0 +90A0 +1110 +2208 +CC06 +ENDCHAR +STARTCHAR uni837C +ENCODING 33660 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +06C0 +1830 +EFEE +0100 +7FFC +0100 +0920 +3118 +C106 +0700 +ENDCHAR +STARTCHAR uni837D +ENCODING 33661 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +00F8 +1F10 +1208 +2108 +0200 +FFFE +0420 +0840 +1FC0 +0630 +780C +ENDCHAR +STARTCHAR uni837E +ENCODING 33662 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0400 +0820 +1010 +3FF8 +0448 +0820 +1210 +67E8 +0820 +1440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni837F +ENCODING 33663 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0890 +0088 +3FFE +2080 +2088 +3E48 +2450 +2420 +4462 +5892 +830C +ENDCHAR +STARTCHAR uni8380 +ENCODING 33664 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +2000 +2FF0 +2000 +3FFC +2488 +2450 +4420 +4518 +8606 +0400 +ENDCHAR +STARTCHAR uni8381 +ENCODING 33665 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +0100 +1110 +1110 +1110 +2928 +4544 +8584 +0100 +FFFE +ENDCHAR +STARTCHAR uni8382 +ENCODING 33666 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +3F04 +2104 +2124 +3F24 +0824 +0824 +7FA4 +08A4 +10A4 +1084 +2294 +4108 +ENDCHAR +STARTCHAR uni8383 +ENCODING 33667 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +3010 +0CE0 +0300 +0CC0 +3230 +FFFE +0800 +1100 +3FF0 +D110 +1150 +1120 +0100 +ENDCHAR +STARTCHAR uni8384 +ENCODING 33668 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7FFC +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +2100 +1A00 +0600 +19C0 +603E +ENDCHAR +STARTCHAR uni8385 +ENCODING 33669 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1040 +1040 +27FC +2000 +6208 +A208 +2108 +2110 +2010 +2FFE +ENDCHAR +STARTCHAR uni8386 +ENCODING 33670 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0110 +FFFE +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +2108 +2108 +2138 +ENDCHAR +STARTCHAR uni8387 +ENCODING 33671 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3C40 +2440 +27FC +3C44 +2444 +2444 +3C44 +2484 +2684 +3904 +C238 +ENDCHAR +STARTCHAR uni8388 +ENCODING 33672 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +21F0 +1110 +1110 +820C +4400 +53F0 +1110 +2110 +E0A0 +2040 +21B0 +2E0E +ENDCHAR +STARTCHAR uni8389 +ENCODING 33673 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0704 +7844 +0844 +FF44 +2844 +2C44 +4A44 +4904 +8804 +081C +ENDCHAR +STARTCHAR uni838A +ENCODING 33674 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +4820 +4820 +7820 +0BFE +0820 +F820 +2820 +2820 +4820 +89FC +ENDCHAR +STARTCHAR uni838B +ENCODING 33675 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0880 +0880 +10FE +1140 +3240 +547C +9040 +1040 +107E +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni838C +ENCODING 33676 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0820 +0440 +1FF0 +1010 +1010 +1010 +1FF0 +0440 +0440 +0842 +1042 +603E +ENDCHAR +STARTCHAR uni838D +ENCODING 33677 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0110 +0108 +FFFE +0100 +3118 +09A0 +0540 +0920 +3118 +C106 +0700 +ENDCHAR +STARTCHAR uni838E +ENCODING 33678 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +4040 +2040 +1148 +8244 +4442 +2040 +08C8 +1010 +2020 +40C0 +8700 +ENDCHAR +STARTCHAR uni838F +ENCODING 33679 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1000 +1020 +FC20 +10A8 +14A4 +1922 +3122 +D228 +1010 +1060 +5180 +2600 +ENDCHAR +STARTCHAR uni8390 +ENCODING 33680 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2040 +1040 +13FC +8244 +4448 +10A0 +10A0 +E120 +2120 +2222 +2422 +281E +ENDCHAR +STARTCHAR uni8391 +ENCODING 33681 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0800 +1FF0 +2820 +07C0 +1830 +E10E +1FF0 +0100 +1FF0 +0100 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni8392 +ENCODING 33682 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +1010 +1010 +1FF0 +0200 +3FF8 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8393 +ENCODING 33683 +BBX 15 15 1 -1 +BITMAP +0420 +0420 +FFFE +0420 +1000 +1FFC +2000 +4FF8 +0888 +FFFE +1108 +1088 +1FFC +0010 +0070 +ENDCHAR +STARTCHAR uni8394 +ENCODING 33684 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +4444 +4444 +4844 +707C +4004 +47C4 +4444 +4444 +7FFC +ENDCHAR +STARTCHAR uni8395 +ENCODING 33685 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +FFFE +0540 +0920 +3118 +DFF6 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8396 +ENCODING 33686 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFC +0888 +1110 +2220 +1110 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni8397 +ENCODING 33687 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +7FFC +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni8398 +ENCODING 33688 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +7FFC +0820 +0440 +FFFE +0100 +0100 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni8399 +ENCODING 33689 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +0408 +FFFE +0408 +3FF8 +0800 +1FF8 +2808 +4808 +8FF8 +0808 +ENDCHAR +STARTCHAR uni839A +ENCODING 33690 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +F81C +13E0 +2020 +7920 +093C +9120 +5120 +2120 +27FE +5800 +87FE +ENDCHAR +STARTCHAR uni839B +ENCODING 33691 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +001C +7DE0 +0820 +1020 +7BFE +0820 +0820 +51FC +3000 +4C00 +83FE +ENDCHAR +STARTCHAR uni839C +ENCODING 33692 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1040 +1040 +247E +2488 +6488 +A548 +2450 +2420 +2050 +2088 +2306 +ENDCHAR +STARTCHAR uni839D +ENCODING 33693 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +1110 +1110 +2928 +4544 +8102 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni839E +ENCODING 33694 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +3FF8 +2008 +1FF0 +0000 +7FFC +0440 +0440 +0842 +1042 +603E +ENDCHAR +STARTCHAR uni839F +ENCODING 33695 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +06C0 +1830 +E3CE +0000 +1FF8 +0010 +0020 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni83A0 +ENCODING 33696 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +00F0 +1F00 +0100 +FFFE +0540 +1930 +EFEE +0220 +043C +1804 +601C +ENDCHAR +STARTCHAR uni83A1 +ENCODING 33697 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0000 +1FF0 +1010 +1010 +1FF0 +0100 +1100 +11F8 +1100 +2900 +47FE +8000 +ENDCHAR +STARTCHAR uni83A2 +ENCODING 33698 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0100 +7FFC +0100 +1110 +1110 +2AA8 +4AA4 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni83A3 +ENCODING 33699 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0920 +0080 +7FFC +0800 +0800 +0FF8 +0000 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni83A4 +ENCODING 33700 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +FFFE +0440 +3FF8 +2448 +2448 +2838 +3008 +3FF8 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni83A5 +ENCODING 33701 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +4400 +2BF8 +1048 +2848 +4848 +9BF8 +2848 +4888 +8888 +0888 +57FE +2000 +ENDCHAR +STARTCHAR uni83A6 +ENCODING 33702 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +1110 +0920 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni83A7 +ENCODING 33703 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0440 +1842 +E07E +ENDCHAR +STARTCHAR uni83A8 +ENCODING 33704 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +1088 +1050 +1E30 +E00E +ENDCHAR +STARTCHAR uni83A9 +ENCODING 33705 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0078 +1F90 +1208 +2108 +1FF0 +00C0 +0100 +FFFE +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni83AA +ENCODING 33706 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0C88 +7084 +1084 +FFFE +1040 +1048 +1E30 +F020 +1052 +118A +7604 +ENDCHAR +STARTCHAR uni83AB +ENCODING 33707 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +0100 +FFFE +0280 +0C60 +F01E +ENDCHAR +STARTCHAR uni83AC +ENCODING 33708 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0400 +07E0 +0820 +1040 +3FF8 +5108 +1108 +1FF8 +0280 +0482 +1882 +607E +ENDCHAR +STARTCHAR uni83AD +ENCODING 33709 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7E7C +4244 +7E44 +4244 +7E44 +4044 +5054 +4848 +5440 +6240 +4040 +ENDCHAR +STARTCHAR uni83AE +ENCODING 33710 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +0200 +7FFC +0404 +0804 +1028 +6010 +ENDCHAR +STARTCHAR uni83AF +ENCODING 33711 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +2040 +1040 +97FE +40E0 +4150 +1150 +2248 +E444 +2842 +2040 +2040 +ENDCHAR +STARTCHAR uni83B0 +ENCODING 33712 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1080 +1080 +10FC +7D04 +1248 +1040 +1040 +1CA0 +E0A0 +4110 +0208 +0C06 +ENDCHAR +STARTCHAR uni83B1 +ENCODING 33713 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +7FFC +1110 +1110 +0120 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni83B2 +ENCODING 33714 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +2080 +17FC +1140 +0240 +73FC +1040 +1040 +17FE +1040 +2840 +47FE +ENDCHAR +STARTCHAR uni83B3 +ENCODING 33715 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0010 +7C10 +4410 +45FE +4410 +7D10 +4490 +4490 +4410 +7C10 +4450 +0020 +ENDCHAR +STARTCHAR uni83B4 +ENCODING 33716 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1FF0 +1010 +1010 +1FF0 +0100 +7FFC +4104 +4284 +4444 +4844 +4014 +4008 +ENDCHAR +STARTCHAR uni83B5 +ENCODING 33717 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +08A0 +0100 +3FF8 +2108 +2108 +2208 +3FF8 +0440 +0450 +0848 +3042 +C03E +ENDCHAR +STARTCHAR uni83B6 +ENCODING 33718 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0280 +0440 +0820 +37D8 +C006 +0210 +1110 +0920 +0840 +7FFC +ENDCHAR +STARTCHAR uni83B7 +ENCODING 33719 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +4440 +2850 +1048 +2840 +4FFE +9840 +28A0 +48A0 +8910 +0910 +5208 +2406 +ENDCHAR +STARTCHAR uni83B8 +ENCODING 33720 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +4490 +2888 +1088 +2BFE +48A0 +98A0 +28A0 +4920 +8920 +0A22 +5222 +241E +ENDCHAR +STARTCHAR uni83B9 +ENCODING 33721 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFE +4002 +8004 +3FF8 +0100 +0100 +1FF0 +0100 +0140 +0120 +7FFC +ENDCHAR +STARTCHAR uni83BA +ENCODING 33722 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7FFE +4202 +9FF4 +1010 +1210 +1150 +1020 +1FFC +0004 +0004 +7FD4 +0008 +ENDCHAR +STARTCHAR uni83BB +ENCODING 33723 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0000 +3FE0 +0420 +047C +0804 +3014 +C008 +3E44 +2258 +2262 +3E42 +223E +ENDCHAR +STARTCHAR uni83BC +ENCODING 33724 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1020 +23FE +4420 +7924 +1124 +2124 +7DFC +0022 +1C22 +E022 +401E +ENDCHAR +STARTCHAR uni83BD +ENCODING 33725 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +7FFC +0280 +0440 +1830 +E44E +0440 +7FFC +0840 +1040 +2040 +ENDCHAR +STARTCHAR uni83BE +ENCODING 33726 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0200 +7FFC +0440 +0920 +37D8 +C106 +0920 +0820 +7FFC +0820 +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni83BF +ENCODING 33727 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0000 +0804 +FF24 +0824 +7F24 +4924 +4924 +5B24 +2C04 +4A04 +8904 +081C +ENDCHAR +STARTCHAR uni83C0 +ENCODING 33728 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +7FFC +4004 +5004 +1EF8 +2288 +C288 +3498 +0880 +1082 +E07E +ENDCHAR +STARTCHAR uni83C1 +ENCODING 33729 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +7FFC +0100 +3FF8 +0100 +FFFE +0000 +1FF0 +1110 +1FF0 +1010 +1030 +ENDCHAR +STARTCHAR uni83C2 +ENCODING 33730 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1040 +2040 +7E7C +4284 +4304 +4244 +7E24 +4224 +4204 +4204 +7E28 +4210 +ENDCHAR +STARTCHAR uni83C3 +ENCODING 33731 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2000 +13FE +9200 +4200 +4BFC +0A04 +1204 +E3FC +2200 +2200 +23FE +2000 +ENDCHAR +STARTCHAR uni83C4 +ENCODING 33732 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +FFFE +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0380 +0D60 +3118 +C106 +ENDCHAR +STARTCHAR uni83C5 +ENCODING 33733 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +FFFC +1020 +0200 +FFFC +8004 +9FE4 +1020 +1FE0 +1000 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni83C6 +ENCODING 33734 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7F00 +22FC +2244 +3E44 +2244 +2228 +3E28 +2210 +2790 +FA28 +4244 +0282 +ENDCHAR +STARTCHAR uni83C7 +ENCODING 33735 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +1020 +1020 +FDFE +2420 +2420 +44FC +F884 +1484 +2284 +C0FC +ENDCHAR +STARTCHAR uni83C8 +ENCODING 33736 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1040 +1020 +FC20 +11FC +1400 +1808 +3108 +D090 +1090 +1020 +53FE +2000 +ENDCHAR +STARTCHAR uni83C9 +ENCODING 33737 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0400 +07F0 +0810 +1FE0 +0040 +FFFE +310C +0DB0 +0940 +3130 +C70E +ENDCHAR +STARTCHAR uni83CA +ENCODING 33738 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0800 +0FFC +1004 +2244 +5244 +0A84 +1FE4 +0684 +0A44 +1228 +2208 +0030 +ENDCHAR +STARTCHAR uni83CB +ENCODING 33739 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0040 +0040 +7BF8 +4840 +4840 +4FFC +48E0 +7950 +4A48 +0444 +0842 +0040 +ENDCHAR +STARTCHAR uni83CC +ENCODING 33740 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7FFC +4004 +40C4 +4F04 +4104 +5FF4 +4544 +4924 +5114 +4004 +7FFC +ENDCHAR +STARTCHAR uni83CD +ENCODING 33741 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0920 +0280 +0440 +0920 +3098 +CFE6 +0040 +0280 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uni83CE +ENCODING 33742 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +2008 +3FF8 +2008 +3FF8 +1080 +1E98 +10E2 +1E82 +F07E +ENDCHAR +STARTCHAR uni83CF +ENCODING 33743 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +4000 +27FE +1008 +83C8 +4248 +2248 +0248 +13C8 +2008 +4008 +8038 +ENDCHAR +STARTCHAR uni83D0 +ENCODING 33744 +BBX 15 15 1 -1 +BITMAP +0240 +2248 +1250 +FFFE +0810 +0420 +7FFC +0100 +3FF8 +0100 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni83D1 +ENCODING 33745 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1084 +2108 +4210 +2108 +3FFC +2108 +2108 +3FF8 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni83D2 +ENCODING 33746 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +2008 +3FF8 +2008 +3FF8 +0100 +FFFE +0540 +0920 +3118 +C106 +ENDCHAR +STARTCHAR uni83D3 +ENCODING 33747 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3FF8 +2108 +3FF8 +2108 +2108 +3FF8 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni83D4 +ENCODING 33748 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7DFC +4504 +450C +6500 +5DFC +4544 +6544 +5D28 +4510 +8528 +9D46 +ENDCHAR +STARTCHAR uni83D5 +ENCODING 33749 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0280 +0C60 +37D8 +C006 +3FF8 +2488 +2488 +3FF8 +2488 +2488 +24A8 +2010 +ENDCHAR +STARTCHAR uni83D6 +ENCODING 33750 +BBX 14 15 1 -1 +BITMAP +1040 +FFFC +1040 +3FF0 +2010 +3FF0 +2010 +3FF0 +0000 +7FF8 +4008 +7FF8 +4008 +4008 +7FF8 +ENDCHAR +STARTCHAR uni83D7 +ENCODING 33751 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1020 +11FC +FD24 +1124 +1124 +1DFC +F124 +1124 +1124 +51FC +2104 +ENDCHAR +STARTCHAR uni83D8 +ENCODING 33752 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1090 +1090 +FD08 +1204 +3442 +3840 +5440 +5488 +9088 +1134 +17C2 +ENDCHAR +STARTCHAR uni83D9 +ENCODING 33753 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +00F8 +3F00 +0100 +7FFC +0920 +0920 +FFFE +0920 +0920 +7FFC +0100 +0100 +3FF8 +ENDCHAR +STARTCHAR uni83DA +ENCODING 33754 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0210 +02FC +7F40 +0084 +0764 +781C +0210 +02FC +7F40 +0084 +0764 +781C +ENDCHAR +STARTCHAR uni83DB +ENCODING 33755 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7C7C +4444 +7C7C +4444 +7C7C +4004 +4004 +4004 +4004 +4014 +4008 +ENDCHAR +STARTCHAR uni83DC +ENCODING 33756 +BBX 15 15 1 -1 +BITMAP +0420 +FFFE +0420 +0038 +3FC0 +0108 +2110 +18A0 +0120 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni83DD +ENCODING 33757 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +2088 +2084 +27FE +F880 +2108 +2108 +3A90 +E4A0 +2040 +21B0 +660E +ENDCHAR +STARTCHAR uni83DE +ENCODING 33758 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0C80 +7080 +10FC +1124 +FD24 +3224 +3844 +5444 +5084 +9104 +1228 +1010 +ENDCHAR +STARTCHAR uni83DF +ENCODING 33759 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FFFE +0810 +0400 +0FF0 +1040 +7FF8 +2108 +2108 +3FF8 +04A0 +0892 +3082 +C07E +ENDCHAR +STARTCHAR uni83E0 +ENCODING 33760 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +4020 +23FE +1222 +8220 +43FC +2204 +0A88 +1450 +2420 +4850 +818C +ENDCHAR +STARTCHAR uni83E1 +ENCODING 33761 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1FE0 +00C0 +4104 +5934 +4544 +4104 +4584 +4944 +7334 +4004 +7FFC +ENDCHAR +STARTCHAR uni83E2 +ENCODING 33762 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1080 +1080 +FDFC +1204 +15F4 +1114 +1D14 +F1F4 +110C +1102 +5102 +20FE +ENDCHAR +STARTCHAR uni83E3 +ENCODING 33763 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7F7C +4844 +4844 +7F44 +4128 +4128 +7F10 +4810 +4828 +7F44 +0082 +ENDCHAR +STARTCHAR uni83E4 +ENCODING 33764 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0540 +1110 +0920 +3FF8 +0200 +7FFC +0820 +1010 +2FE8 +C826 +0868 +0808 +07F8 +ENDCHAR +STARTCHAR uni83E5 +ENCODING 33765 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1018 +11E0 +FD00 +1100 +39FE +3508 +5508 +5208 +9208 +1408 +1008 +ENDCHAR +STARTCHAR uni83E6 +ENCODING 33766 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +FFFE +0440 +2018 +13E0 +1200 +0200 +73FC +1220 +1220 +1220 +1420 +2820 +47FE +ENDCHAR +STARTCHAR uni83E7 +ENCODING 33767 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0080 +3FFE +2000 +2078 +2F80 +2880 +2880 +2FFC +2840 +4824 +4A94 +8C4C +ENDCHAR +STARTCHAR uni83E8 +ENCODING 33768 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0100 +3FF8 +0820 +0440 +FFFE +0400 +7FFC +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni83E9 +ENCODING 33769 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +0100 +7FFC +0820 +0440 +FFFE +0000 +1FF0 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni83EA +ENCODING 33770 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +7FFC +4004 +0000 +FFFE +0200 +0400 +1FF8 +F008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni83EB +ENCODING 33771 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7FFC +0100 +1FF0 +1110 +1FF0 +0100 +3FF8 +0100 +1FF0 +0100 +FFFE +ENDCHAR +STARTCHAR uni83EC +ENCODING 33772 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +23FC +1084 +1084 +8084 +4914 +4A08 +15FC +E104 +2104 +2104 +21FC +2104 +ENDCHAR +STARTCHAR uni83ED +ENCODING 33773 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2080 +1110 +1208 +87FC +4204 +5000 +13F8 +2208 +E208 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni83EE +ENCODING 33774 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0080 +3FFE +2080 +2FF8 +2088 +3FFE +2088 +2FF8 +2140 +4220 +4C18 +B006 +ENDCHAR +STARTCHAR uni83EF +ENCODING 33775 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7FFC +1110 +FFFE +1110 +1110 +7FFC +0100 +7FFC +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni83F0 +ENCODING 33776 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0828 +F070 +1790 +2410 +2490 +2490 +3490 +E488 +24A8 +28E8 +2B14 +7004 +ENDCHAR +STARTCHAR uni83F1 +ENCODING 33777 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +1FF0 +0100 +7FFC +0420 +1A3E +E7E0 +0C20 +3440 +0380 +0E60 +701C +ENDCHAR +STARTCHAR uni83F2 +ENCODING 33778 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0440 +7C7C +0440 +0440 +7C7C +0440 +1C40 +E47E +0840 +1040 +ENDCHAR +STARTCHAR uni83F3 +ENCODING 33779 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +0280 +0C60 +3018 +CFE6 +0100 +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni83F4 +ENCODING 33780 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0200 +FFFE +0440 +0920 +3FF8 +D116 +1FF0 +1110 +1FF0 +0104 +00FC +ENDCHAR +STARTCHAR uni83F5 +ENCODING 33781 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +7FFC +4824 +4444 +5FF4 +4104 +4084 +5FF4 +4404 +4404 +47E4 +4014 +4008 +ENDCHAR +STARTCHAR uni83F6 +ENCODING 33782 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0100 +7FFC +0100 +3FF8 +0200 +FFFE +0920 +17D0 +2108 +DFF6 +0100 +0100 +ENDCHAR +STARTCHAR uni83F7 +ENCODING 33783 +BBX 15 15 1 -1 +BITMAP +0420 +FFFE +0420 +1FF0 +0010 +7FFC +0010 +1FF0 +0000 +7FFC +4104 +5FF4 +1110 +1130 +0100 +ENDCHAR +STARTCHAR uni83F8 +ENCODING 33784 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +0820 +7E50 +1050 +1088 +1F06 +1260 +1210 +2200 +22C0 +4A30 +8408 +ENDCHAR +STARTCHAR uni83F9 +ENCODING 33785 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +4000 +21F8 +1108 +8108 +41F8 +2108 +0908 +09F8 +1108 +2108 +C7FE +ENDCHAR +STARTCHAR uni83FA +ENCODING 33786 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +0080 +1FFC +1004 +1FFC +1000 +17F8 +1408 +17F8 +2408 +27F8 +4408 +8428 +0410 +ENDCHAR +STARTCHAR uni83FB +ENCODING 33787 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0820 +0820 +FFFE +0820 +1C70 +2AA8 +4924 +8A22 +0820 +0820 +ENDCHAR +STARTCHAR uni83FC +ENCODING 33788 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +0910 +0920 +12C0 +0430 +1908 +6914 +0910 +12A0 +0440 +1830 +600C +ENDCHAR +STARTCHAR uni83FD +ENCODING 33789 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0E00 +08FC +0804 +FF44 +0844 +2A28 +2910 +48A8 +8844 +1882 +ENDCHAR +STARTCHAR uni83FE +ENCODING 33790 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +3FF8 +0100 +0200 +FFFE +0820 +3118 +C106 +0990 +1148 +2148 +0500 +0200 +ENDCHAR +STARTCHAR uni83FF +ENCODING 33791 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7F84 +1004 +2224 +7F24 +0924 +0824 +7F24 +0824 +0824 +0F04 +F014 +4008 +ENDCHAR +STARTCHAR uni8400 +ENCODING 33792 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +01F8 +0100 +3FFE +2102 +21F0 +2F04 +20FC +2000 +27E0 +4422 +4822 +B01E +ENDCHAR +STARTCHAR uni8401 +ENCODING 33793 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0000 +0820 +3FF8 +0820 +0FE0 +0820 +0FE0 +0820 +FFFE +0440 +1830 +600C +ENDCHAR +STARTCHAR uni8402 +ENCODING 33794 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0E00 +787C +0844 +0844 +FF44 +1844 +1C44 +2A44 +4A44 +887C +0844 +0800 +ENDCHAR +STARTCHAR uni8403 +ENCODING 33795 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +0100 +7FFC +0820 +0820 +1550 +2108 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni8404 +ENCODING 33796 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0FFC +1404 +17E4 +2904 +4104 +1FF4 +0104 +0924 +0FE8 +0008 +0070 +ENDCHAR +STARTCHAR uni8405 +ENCODING 33797 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0100 +FFFE +0100 +2108 +3FFA +0102 +00FE +0000 +3FF8 +2008 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8406 +ENCODING 33798 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +0200 +3FF8 +2108 +3FF8 +2108 +2208 +3FF8 +0840 +FFFE +0040 +0040 +ENDCHAR +STARTCHAR uni8407 +ENCODING 33799 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1FF8 +1000 +1FF0 +1000 +1FF0 +1000 +FFFE +1108 +10D0 +1E30 +700E +ENDCHAR +STARTCHAR uni8408 +ENCODING 33800 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0450 +084A +1042 +603E +ENDCHAR +STARTCHAR uni8409 +ENCODING 33801 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3EFC +22A4 +22A4 +3EA4 +22FC +2280 +3E80 +2282 +2282 +4A7E +8400 +ENDCHAR +STARTCHAR uni840A +ENCODING 33802 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +FFFE +1110 +1110 +2928 +4544 +8382 +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni840B +ENCODING 33803 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +7FFC +0100 +1FF0 +0110 +FFFE +0110 +1FF0 +0200 +FFFE +0820 +07C0 +3C3C +ENDCHAR +STARTCHAR uni840C +ENCODING 33804 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +7CFC +4484 +4484 +7CFC +4484 +4484 +44FC +7C84 +0104 +061C +ENDCHAR +STARTCHAR uni840D +ENCODING 33805 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +4000 +27FC +1040 +8248 +4244 +2444 +0FFE +1040 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni840E +ENCODING 33806 +BBX 13 15 2 -1 +BITMAP +1040 +1040 +FFF8 +1040 +3FE0 +0200 +7FF8 +0A40 +7238 +0400 +FFF8 +0840 +3C80 +07C0 +F838 +ENDCHAR +STARTCHAR uni840F +ENCODING 33807 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0800 +0FF8 +1008 +2010 +4260 +0C00 +30F8 +2008 +3CF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8410 +ENCODING 33808 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0100 +7FFC +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +1100 +11F8 +2900 +47FE +8000 +ENDCHAR +STARTCHAR uni8411 +ENCODING 33809 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0420 +0840 +1FFC +3080 +DFF8 +1080 +1FF8 +1080 +1080 +1FFE +ENDCHAR +STARTCHAR uni8412 +ENCODING 33810 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0100 +7FFC +0820 +1210 +2448 +0820 +1FF0 +0440 +0440 +0844 +1044 +603C +ENDCHAR +STARTCHAR uni8413 +ENCODING 33811 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +7FFC +4004 +4FE4 +0820 +0FE0 +0820 +0FE0 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uni8414 +ENCODING 33812 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1000 +11FC +FC44 +1044 +1494 +1908 +32FC +D084 +1084 +1084 +50FC +2084 +ENDCHAR +STARTCHAR uni8415 +ENCODING 33813 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +FFFE +0820 +07C0 +F83E +1010 +1FF0 +1010 +1FF0 +2010 +4070 +ENDCHAR +STARTCHAR uni8416 +ENCODING 33814 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0600 +38F8 +2008 +2008 +3CF8 +2008 +2008 +3FF8 +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni8417 +ENCODING 33815 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +7FFC +4004 +5FF4 +0000 +FFFE +0100 +1110 +2108 +4104 +0700 +ENDCHAR +STARTCHAR uni8418 +ENCODING 33816 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0200 +7FFC +0440 +0820 +37D8 +C006 +3FF8 +0100 +0920 +1110 +2508 +0200 +ENDCHAR +STARTCHAR uni8419 +ENCODING 33817 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1020 +FDFE +1122 +3224 +3850 +5450 +5490 +9090 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni841A +ENCODING 33818 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1000 +11FC +1088 +FC70 +138E +1020 +1DFC +3020 +D3FE +1020 +5020 +2020 +ENDCHAR +STARTCHAR uni841B +ENCODING 33819 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +3FF8 +2008 +3FF8 +2008 +3FF8 +2008 +3FF8 +0820 +FFFE +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni841C +ENCODING 33820 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1020 +FE3E +9220 +9220 +92FC +9284 +9A84 +9484 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni841D +ENCODING 33821 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +3FF8 +2448 +2448 +3FF8 +0200 +07F0 +0810 +3420 +0240 +0180 +0E00 +7000 +ENDCHAR +STARTCHAR uni841E +ENCODING 33822 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +3FF8 +2108 +2288 +2448 +0000 +2084 +3E98 +20E0 +2084 +2684 +387C +ENDCHAR +STARTCHAR uni841F +ENCODING 33823 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0640 +3840 +09F8 +0848 +7E48 +18C8 +1C48 +2A68 +289A +488A +0906 +0A02 +ENDCHAR +STARTCHAR uni8420 +ENCODING 33824 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3E7C +2244 +2244 +3264 +2A54 +2244 +3264 +2A54 +4244 +4284 +868C +ENDCHAR +STARTCHAR uni8421 +ENCODING 33825 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0020 +1040 +09FC +4904 +2104 +2504 +05FC +0904 +7104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni8422 +ENCODING 33826 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0900 +4100 +23FC +1404 +83E4 +4024 +2024 +0BE4 +1218 +2202 +4202 +81FE +ENDCHAR +STARTCHAR uni8423 +ENCODING 33827 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0100 +7FFE +4002 +8004 +1FF0 +0100 +1100 +11F8 +1100 +2900 +47FE +8000 +ENDCHAR +STARTCHAR uni8424 +ENCODING 33828 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFE +4102 +8104 +1FF0 +1110 +1110 +1FF0 +0100 +0108 +7FFC +0004 +ENDCHAR +STARTCHAR uni8425 +ENCODING 33829 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7FFE +4002 +9FF4 +1010 +1010 +1FF0 +0000 +3FF8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni8426 +ENCODING 33830 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFE +4402 +8844 +1F80 +0320 +0C10 +3FF8 +0108 +1120 +2510 +4208 +ENDCHAR +STARTCHAR uni8427 +ENCODING 33831 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +2548 +2528 +2928 +4108 +8108 +ENDCHAR +STARTCHAR uni8428 +ENCODING 33832 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0020 +7DFC +4488 +4850 +51FE +4900 +4500 +4500 +5500 +4900 +4200 +4400 +ENDCHAR +STARTCHAR uni8429 +ENCODING 33833 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +FFFE +0810 +0C20 +70A2 +10A2 +FD24 +1128 +3820 +3450 +5050 +9088 +1104 +1202 +ENDCHAR +STARTCHAR uni842A +ENCODING 33834 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0608 +7848 +0828 +FF08 +28C8 +2C28 +4A1E +4AE8 +8808 +0808 +ENDCHAR +STARTCHAR uni842B +ENCODING 33835 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +00F8 +3F00 +0100 +FFFE +0540 +0920 +3118 +DFF6 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni842C +ENCODING 33836 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +7FFC +4144 +41A4 +5E24 +401C +ENDCHAR +STARTCHAR uni842D +ENCODING 33837 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +00F0 +3F00 +0100 +1FF0 +1110 +1FF0 +0100 +7FFC +4124 +41F4 +5E14 +4008 +ENDCHAR +STARTCHAR uni842E +ENCODING 33838 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0280 +0C60 +37D8 +C006 +3E08 +2248 +3E48 +2248 +3E48 +2208 +2228 +2610 +ENDCHAR +STARTCHAR uni842F +ENCODING 33839 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0400 +0FE0 +1020 +3FF8 +5008 +1FF8 +1008 +1FF8 +1008 +1FF8 +0420 +0810 +1008 +ENDCHAR +STARTCHAR uni8430 +ENCODING 33840 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0100 +7FFC +0100 +3FF8 +2928 +2548 +3FF8 +0380 +0560 +1918 +E106 +0100 +ENDCHAR +STARTCHAR uni8431 +ENCODING 33841 +BBX 14 15 1 -1 +BITMAP +1020 +FFFC +1020 +0200 +7FF8 +4008 +5FE8 +0000 +1FE0 +1020 +1FE0 +1020 +1FE0 +0000 +FFFC +ENDCHAR +STARTCHAR uni8432 +ENCODING 33842 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +00FC +7F00 +2208 +1110 +3FF8 +0200 +FFFE +0400 +0FF0 +1220 +21C0 +CE3C +ENDCHAR +STARTCHAR uni8433 +ENCODING 33843 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0100 +FFFE +0100 +3FF8 +2448 +2288 +2FE8 +2108 +3FF8 +2108 +2128 +2010 +ENDCHAR +STARTCHAR uni8434 +ENCODING 33844 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3F04 +2104 +2124 +3F24 +2124 +3F24 +2124 +2124 +3F24 +0024 +1204 +2114 +4088 +ENDCHAR +STARTCHAR uni8435 +ENCODING 33845 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1FF0 +1010 +11F0 +1110 +7FFC +4004 +4FE4 +4824 +4824 +4FE4 +401C +ENDCHAR +STARTCHAR uni8436 +ENCODING 33846 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0100 +7FFC +0100 +3FF8 +0200 +FFFE +0820 +1FF0 +2828 +CFE6 +0820 +0FE0 +0820 +ENDCHAR +STARTCHAR uni8437 +ENCODING 33847 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0800 +4904 +2A24 +7F24 +4124 +7F24 +4124 +7F24 +4124 +4104 +4514 +4208 +ENDCHAR +STARTCHAR uni8438 +ENCODING 33848 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0D00 +3178 +2108 +3D78 +2108 +2108 +3D78 +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni8439 +ENCODING 33849 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +001C +3FE0 +2000 +3FFC +2004 +3FFC +2000 +2FFC +4924 +4FFC +8924 +092C +ENDCHAR +STARTCHAR uni843A +ENCODING 33850 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7FFC +4004 +5FF4 +4004 +5FF4 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni843B +ENCODING 33851 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0100 +3FF8 +0820 +0440 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni843C +ENCODING 33852 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3EF8 +2288 +3EF8 +0000 +1FF0 +0000 +FFFE +0400 +0FF8 +0808 +0038 +ENDCHAR +STARTCHAR uni843D +ENCODING 33853 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +40A0 +20F8 +1108 +0690 +4060 +2198 +0606 +11F8 +2108 +4108 +81F8 +ENDCHAR +STARTCHAR uni843E +ENCODING 33854 +BBX 15 15 0 -1 +BITMAP +0820 +FFFE +0820 +0000 +3FE0 +0820 +0BF8 +0A88 +1128 +2290 +5FF8 +1248 +1248 +1248 +FFFE +ENDCHAR +STARTCHAR uni843F +ENCODING 33855 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +2038 +13C0 +1040 +8040 +47FC +5040 +1040 +23F8 +E208 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uni8440 +ENCODING 33856 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1038 +13C0 +FC40 +1040 +17FC +1840 +3040 +D3F8 +1208 +1208 +53F8 +2208 +ENDCHAR +STARTCHAR uni8441 +ENCODING 33857 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +0200 +FFFE +0820 +1C40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni8442 +ENCODING 33858 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +2020 +3E20 +4420 +88FC +7F24 +4924 +4924 +7F44 +1454 +248A +4502 +83FE +ENDCHAR +STARTCHAR uni8443 +ENCODING 33859 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0080 +7C80 +44FE +4540 +4640 +7C7C +4440 +4440 +447E +7C40 +4440 +0040 +ENDCHAR +STARTCHAR uni8444 +ENCODING 33860 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0040 +3E40 +227E +22A0 +3EA0 +233C +2220 +3E20 +223E +2220 +4A20 +8420 +ENDCHAR +STARTCHAR uni8445 +ENCODING 33861 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +FFFE +0440 +0000 +11F8 +1108 +2908 +45F8 +9108 +1108 +29F8 +2508 +4108 +87FE +ENDCHAR +STARTCHAR uni8446 +ENCODING 33862 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +13F8 +1208 +2208 +63F8 +A040 +2FFE +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni8447 +ENCODING 33863 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1FF0 +0220 +0140 +7FFC +0484 +1888 +6280 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni8448 +ENCODING 33864 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0220 +0430 +1FCC +7000 +1FF0 +1010 +1FF0 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni8449 +ENCODING 33865 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1110 +7FFC +1110 +11F0 +1000 +1FF8 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni844A +ENCODING 33866 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +06C0 +1830 +EFEE +0000 +1FF0 +1010 +1FF0 +0420 +FFFE +0420 +1820 +ENDCHAR +STARTCHAR uni844B +ENCODING 33867 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0080 +3C80 +24FC +2504 +3EF4 +2494 +2494 +3CF4 +2494 +2404 +5428 +8810 +ENDCHAR +STARTCHAR uni844C +ENCODING 33868 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0400 +FFFE +0820 +1E40 +03C0 +3C38 +1010 +FEFE +2224 +6464 +1818 +2434 +C2C2 +ENDCHAR +STARTCHAR uni844D +ENCODING 33869 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +7FFC +0000 +1FF0 +1010 +1FF0 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni844E +ENCODING 33870 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +2040 +47FC +8044 +1FFE +2044 +67FC +A040 +27FC +2040 +2FFE +2040 +2040 +ENDCHAR +STARTCHAR uni844F +ENCODING 33871 +BBX 15 15 1 -1 +BITMAP +0810 +FFFE +0810 +4040 +27FC +0044 +8FFE +4044 +27FC +0040 +17FC +1040 +2FFE +4040 +8040 +ENDCHAR +STARTCHAR uni8450 +ENCODING 33872 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0440 +0820 +3018 +CFE6 +0420 +18A0 +6040 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni8451 +ENCODING 33873 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0808 +7E08 +08FE +0808 +FF88 +0848 +7E48 +0808 +0808 +0E08 +F038 +ENDCHAR +STARTCHAR uni8452 +ENCODING 33874 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1820 +2000 +44FC +2820 +1220 +2620 +F920 +1120 +5420 +5220 +91FE +ENDCHAR +STARTCHAR uni8453 +ENCODING 33875 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +2090 +1090 +13FC +8090 +4890 +4890 +17FE +E000 +2090 +2108 +2204 +ENDCHAR +STARTCHAR uni8454 +ENCODING 33876 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +09F0 +0810 +1010 +37FC +5100 +91F8 +1240 +1040 +17FC +10A0 +1110 +120C +ENDCHAR +STARTCHAR uni8455 +ENCODING 33877 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1200 +213C +4900 +9400 +247E +6108 +A208 +2E08 +2208 +2208 +2228 +2010 +ENDCHAR +STARTCHAR uni8456 +ENCODING 33878 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0100 +7FFE +4822 +9114 +2128 +0110 +7FFC +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni8457 +ENCODING 33879 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0210 +3FF0 +0220 +0240 +FFFE +0100 +0FF0 +3810 +CFF0 +0810 +0810 +0FF0 +ENDCHAR +STARTCHAR uni8458 +ENCODING 33880 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0888 +1110 +FFFE +1110 +0888 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni8459 +ENCODING 33881 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1000 +10FC +FE84 +1084 +30FC +3884 +5484 +52FC +9084 +1084 +10FC +ENDCHAR +STARTCHAR uni845A +ENCODING 33882 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7FFC +0820 +0FE0 +0820 +0FE0 +0820 +FFFE +2240 +3C7C +2000 +3FFC +ENDCHAR +STARTCHAR uni845B +ENCODING 33883 +BBX 15 15 1 -1 +BITMAP +0420 +7FFE +0420 +1FF8 +1008 +1FF8 +1008 +1FF8 +0800 +1FFE +3102 +D282 +1442 +1FF2 +000C +ENDCHAR +STARTCHAR uni845C +ENCODING 33884 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1000 +FEFC +1024 +7E24 +1024 +1E44 +F098 +1100 +FFFE +0280 +1C70 +E00E +ENDCHAR +STARTCHAR uni845D +ENCODING 33885 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0020 +7F20 +2A20 +54FC +2A24 +0024 +7E24 +0824 +0844 +0E44 +F094 +4108 +ENDCHAR +STARTCHAR uni845E +ENCODING 33886 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7DFC +0488 +0488 +7CF8 +4088 +4088 +7CF8 +0488 +049E +05E8 +2808 +1008 +ENDCHAR +STARTCHAR uni845F +ENCODING 33887 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +3FF8 +0100 +1FF0 +0100 +FFFE +ENDCHAR +STARTCHAR uni8460 +ENCODING 33888 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0BF8 +0808 +11F8 +3008 +53F8 +9000 +17FC +1404 +13F8 +1110 +10E0 +171C +ENDCHAR +STARTCHAR uni8461 +ENCODING 33889 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3FFC +C244 +7FF4 +0204 +3FE4 +2224 +3FE4 +2224 +3FE8 +2228 +2270 +ENDCHAR +STARTCHAR uni8462 +ENCODING 33890 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +7FFC +0280 +0C60 +3218 +C186 +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni8463 +ENCODING 33891 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0070 +1F80 +0100 +FFFE +2108 +3FF8 +2108 +3FF8 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni8464 +ENCODING 33892 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1008 +1008 +2408 +7DFE +0808 +1088 +2448 +7E48 +0008 +5408 +4A28 +8A10 +ENDCHAR +STARTCHAR uni8465 +ENCODING 33893 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1010 +0820 +FFFE +0000 +3E08 +2248 +3A48 +2648 +3248 +2E08 +2208 +2618 +ENDCHAR +STARTCHAR uni8466 +ENCODING 33894 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0840 +1FE0 +0220 +7FFC +0000 +1FE0 +1020 +1FE0 +0040 +1FF8 +1040 +FFFC +0040 +ENDCHAR +STARTCHAR uni8467 +ENCODING 33895 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0810 +7F10 +0810 +7F7E +4112 +3E12 +0412 +0F12 +7822 +0822 +284A +1084 +ENDCHAR +STARTCHAR uni8468 +ENCODING 33896 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1FF0 +1110 +1FF0 +1110 +1FF0 +0000 +FFFE +1110 +10A0 +1440 +1830 +100E +ENDCHAR +STARTCHAR uni8469 +ENCODING 33897 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1000 +21FC +7D24 +4524 +4524 +7D24 +45FC +4500 +4500 +7D02 +00FE +ENDCHAR +STARTCHAR uni846A +ENCODING 33898 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1004 +1F04 +2224 +7FA4 +A4A4 +3FA4 +24A4 +3FA4 +24A4 +2484 +4294 +8108 +ENDCHAR +STARTCHAR uni846B +ENCODING 33899 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0800 +087C +7F44 +0844 +087C +3E44 +2244 +227C +2284 +3E84 +011C +ENDCHAR +STARTCHAR uni846C +ENCODING 33900 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7FFC +1080 +3E8C +C2F0 +2482 +1882 +E07E +0820 +FFFE +0820 +1020 +6020 +ENDCHAR +STARTCHAR uni846D +ENCODING 33901 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7EFC +4204 +4204 +7EFC +4000 +7EFC +4044 +7E28 +4038 +41C6 +ENDCHAR +STARTCHAR uni846E +ENCODING 33902 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0C78 +7048 +4048 +7D8E +4000 +7DFE +4088 +5C88 +E050 +4070 +438E +ENDCHAR +STARTCHAR uni846F +ENCODING 33903 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +1820 +2040 +4440 +28FC +1104 +2C04 +F284 +1244 +5444 +5208 +9208 +9030 +ENDCHAR +STARTCHAR uni8470 +ENCODING 33904 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0090 +0918 +0BF4 +1090 +211E +6680 +A1FC +2708 +2090 +20F0 +270E +ENDCHAR +STARTCHAR uni8471 +ENCODING 33905 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1FFC +3114 +CE24 +05C4 +38A4 +0318 +0000 +2908 +2884 +4422 +83E2 +ENDCHAR +STARTCHAR uni8472 +ENCODING 33906 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0400 +1FF0 +1010 +1FF0 +1010 +1FF0 +0104 +7D88 +0950 +1120 +2118 +C506 +0200 +ENDCHAR +STARTCHAR uni8473 +ENCODING 33907 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0828 +0044 +3FFE +2020 +2FE4 +2224 +2FE8 +2498 +2F10 +41AA +4E4A +8184 +ENDCHAR +STARTCHAR uni8474 +ENCODING 33908 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0028 +0024 +3FFE +2020 +2FA4 +2024 +2FA8 +2898 +2892 +4FAA +4046 +8082 +ENDCHAR +STARTCHAR uni8475 +ENCODING 33909 +BBX 14 15 1 -1 +BITMAP +0820 +0820 +FFFC +0820 +1F10 +84A4 +4848 +3FF0 +C10C +0100 +7FFC +0280 +0440 +1830 +600C +ENDCHAR +STARTCHAR uni8476 +ENCODING 33910 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +7FFC +0000 +1FF0 +1010 +1FF0 +0000 +7FFC +4004 +1FF0 +0080 +0380 +ENDCHAR +STARTCHAR uni8477 +ENCODING 33911 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7FFC +4104 +5FF4 +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni8478 +ENCODING 33912 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +1FF0 +1110 +1FF0 +1110 +1110 +1FF0 +0200 +2908 +4824 +87E2 +ENDCHAR +STARTCHAR uni8479 +ENCODING 33913 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1080 +10FE +FD20 +22A0 +20BC +3CE4 +27A4 +24AC +44A2 +4482 +987E +ENDCHAR +STARTCHAR uni847A +ENCODING 33914 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +0000 +FFFE +1010 +1FF0 +1010 +1FFE +F010 +0010 +ENDCHAR +STARTCHAR uni847B +ENCODING 33915 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0000 +1FF0 +1010 +10D0 +1710 +1110 +17D0 +1550 +27CA +212A +4FE6 +8022 +ENDCHAR +STARTCHAR uni847C +ENCODING 33916 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +26C8 +2108 +26C8 +3FF8 +0240 +0C7E +F400 +0FF8 +7460 +03C0 +FC3E +ENDCHAR +STARTCHAR uni847D +ENCODING 33917 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7FFC +0440 +3FF8 +2448 +3FF8 +0400 +FFFE +0820 +1C40 +0380 +0C70 +3008 +ENDCHAR +STARTCHAR uni847E +ENCODING 33918 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1000 +1EF8 +2288 +62A8 +9492 +0882 +307E +C100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni847F +ENCODING 33919 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +3FF8 +2108 +3FF8 +2000 +2FF8 +2808 +2FF8 +2808 +4FF8 +4808 +8FF8 +0808 +ENDCHAR +STARTCHAR uni8480 +ENCODING 33920 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +FFFE +0440 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni8481 +ENCODING 33921 +BBX 15 15 1 -1 +BITMAP +8110 +4110 +2FFE +8110 +4110 +2048 +0044 +EFFE +2150 +2248 +2444 +2842 +2040 +5000 +8FFE +ENDCHAR +STARTCHAR uni8482 +ENCODING 33922 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +3FF8 +0820 +0440 +7FFC +4104 +5FF4 +1110 +1110 +1130 +0100 +ENDCHAR +STARTCHAR uni8483 +ENCODING 33923 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0800 +0FE0 +1020 +1FC0 +0040 +FFFE +0600 +3B08 +04B0 +19C0 +62A0 +0C98 +7306 +ENDCHAR +STARTCHAR uni8484 +ENCODING 33924 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7FFC +4004 +3C08 +01FE +FE08 +2888 +2848 +2808 +483A +4802 +87FE +ENDCHAR +STARTCHAR uni8485 +ENCODING 33925 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3080 +CBF0 +2090 +0890 +3112 +C60E +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni8486 +ENCODING 33926 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7DF0 +1110 +1190 +1D52 +F20E +0400 +FFFE +0820 +1C40 +0380 +0C70 +7008 +ENDCHAR +STARTCHAR uni8487 +ENCODING 33927 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0448 +0024 +3FFE +2020 +2FA4 +28A4 +2AA8 +2AA8 +2A90 +2A92 +452A +4946 +9082 +ENDCHAR +STARTCHAR uni8488 +ENCODING 33928 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +2088 +3C90 +20E4 +2C84 +307C +0400 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni8489 +ENCODING 33929 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0100 +1FF0 +1110 +1FF0 +0100 +FFFE +0000 +1FF0 +1010 +1110 +02C0 +0C30 +7008 +ENDCHAR +STARTCHAR uni848A +ENCODING 33930 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0880 +1098 +30E0 +5784 +9084 +107C +0000 +7C88 +44B0 +44C4 +7C84 +447C +ENDCHAR +STARTCHAR uni848B +ENCODING 33931 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +103C +97C2 +5244 +5220 +1108 +1008 +37FE +D008 +1108 +1088 +1038 +ENDCHAR +STARTCHAR uni848C +ENCODING 33932 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1110 +0920 +7FFC +0540 +1930 +610C +0400 +FFFE +0820 +1E40 +03C0 +3C38 +ENDCHAR +STARTCHAR uni848D +ENCODING 33933 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +2400 +1400 +7FE0 +0420 +0820 +0FF8 +0808 +1008 +1FFE +2002 +2552 +4954 +8008 +ENDCHAR +STARTCHAR uni848E +ENCODING 33934 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +201C +13E0 +920E +42F0 +4A90 +0A90 +1292 +E294 +2288 +2488 +24A4 +28C2 +ENDCHAR +STARTCHAR uni848F +ENCODING 33935 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7FFE +4002 +BFF4 +0480 +3FF8 +2488 +2878 +3008 +3FF8 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni8490 +ENCODING 33936 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +0200 +3FF0 +2110 +3FF0 +2110 +3FF0 +0520 +0528 +0978 +3082 +C07E +ENDCHAR +STARTCHAR uni8491 +ENCODING 33937 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0600 +3878 +2048 +3E48 +2286 +3F00 +22FC +3E44 +2044 +3E28 +2210 +4A28 +84C6 +ENDCHAR +STARTCHAR uni8492 +ENCODING 33938 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1000 +23FE +7C20 +4420 +45FC +7D24 +4124 +7D24 +4524 +4534 +7D28 +4420 +0020 +ENDCHAR +STARTCHAR uni8493 +ENCODING 33939 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1020 +25FE +7C20 +0924 +1124 +2524 +7DFC +0022 +5422 +5422 +801E +ENDCHAR +STARTCHAR uni8494 +ENCODING 33940 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0840 +7BFC +4840 +4840 +4FFE +7808 +4FFE +4908 +4888 +7808 +0038 +ENDCHAR +STARTCHAR uni8495 +ENCODING 33941 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +FFFE +0440 +1FF0 +1110 +1290 +1450 +1FF0 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni8496 +ENCODING 33942 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +7FFC +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +FFFE +0820 +1010 +ENDCHAR +STARTCHAR uni8497 +ENCODING 33943 +BBX 15 15 1 -1 +BITMAP +0810 +FFFE +0810 +4040 +2040 +03F8 +8208 +43F8 +2208 +03FA +1244 +1238 +2210 +4388 +8C06 +ENDCHAR +STARTCHAR uni8498 +ENCODING 33944 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0800 +7F7C +1144 +3244 +0C7C +3220 +DFC0 +0100 +3FF8 +0100 +7FFC +0100 +0300 +ENDCHAR +STARTCHAR uni8499 +ENCODING 33945 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3FF8 +2008 +0FE0 +0000 +7FFC +0708 +3990 +0640 +78E0 +0358 +0C46 +7180 +ENDCHAR +STARTCHAR uni849A +ENCODING 33946 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7FFC +0000 +1FF0 +1010 +1FF0 +0000 +7FFC +4824 +4444 +5FF4 +4104 +410C +ENDCHAR +STARTCHAR uni849B +ENCODING 33947 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +2020 +2020 +3DFC +5024 +1024 +FC24 +11FE +5420 +5450 +5C50 +7488 +0506 +ENDCHAR +STARTCHAR uni849C +ENCODING 33948 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +7C7C +0000 +0000 +FEFE +1010 +5454 +5454 +9292 +9292 +3030 +ENDCHAR +STARTCHAR uni849D +ENCODING 33949 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0000 +3FFC +2080 +2100 +27F0 +2410 +27F0 +2410 +27F0 +4080 +4490 +8A88 +1104 +ENDCHAR +STARTCHAR uni849E +ENCODING 33950 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +4000 +2210 +1210 +82FE +4400 +2484 +0C84 +1448 +2448 +4410 +85FE +ENDCHAR +STARTCHAR uni849F +ENCODING 33951 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1040 +1040 +FCFE +0102 +44F2 +4492 +2492 +2892 +0EF4 +3004 +C038 +ENDCHAR +STARTCHAR uni84A0 +ENCODING 33952 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0200 +3FF8 +2008 +3FF8 +2008 +3FF8 +2008 +3FF8 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni84A1 +ENCODING 33953 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +3FF8 +0440 +7FFC +4104 +0100 +FFFE +0400 +07F8 +0808 +1008 +6070 +ENDCHAR +STARTCHAR uni84A2 +ENCODING 33954 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7840 +48A0 +5110 +6208 +55F6 +4840 +4BFC +6840 +5150 +4248 +4544 +4080 +ENDCHAR +STARTCHAR uni84A3 +ENCODING 33955 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1040 +20A0 +4110 +8A08 +15F6 +3040 +53FC +9040 +1150 +1248 +1544 +1080 +ENDCHAR +STARTCHAR uni84A4 +ENCODING 33956 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2040 +10A0 +9110 +4208 +4DF6 +1040 +27FC +E040 +2248 +2444 +2942 +2080 +ENDCHAR +STARTCHAR uni84A5 +ENCODING 33957 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0400 +79FC +4044 +4844 +5454 +6288 +3FF8 +2108 +3FF8 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uni84A6 +ENCODING 33958 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3FFC +6080 +BFF8 +2080 +3FF8 +2080 +3FFE +0000 +7FF8 +0810 +07E0 +FC1E +ENDCHAR +STARTCHAR uni84A7 +ENCODING 33959 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0028 +0024 +3FFE +2220 +23A4 +2224 +2FA8 +2898 +2892 +4FAA +4046 +8082 +ENDCHAR +STARTCHAR uni84A8 +ENCODING 33960 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +13F8 +1040 +23F8 +2040 +6FFE +A000 +23F8 +2208 +23F8 +2208 +23F8 +2208 +2218 +ENDCHAR +STARTCHAR uni84A9 +ENCODING 33961 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0C00 +71F8 +1108 +1108 +FDF8 +3108 +3908 +55F8 +5108 +9108 +17FE +1000 +ENDCHAR +STARTCHAR uni84AA +ENCODING 33962 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +0110 +7FFC +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +2108 +0020 +FFFE +0820 +0460 +ENDCHAR +STARTCHAR uni84AB +ENCODING 33963 +BBX 15 15 0 -1 +BITMAP +0440 +FFFE +0440 +0820 +0440 +7FFC +0100 +3FF8 +0200 +FFFE +0800 +17F8 +2080 +4080 +9FFC +ENDCHAR +STARTCHAR uni84AC +ENCODING 33964 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7FFE +4402 +8FE4 +1020 +3FF8 +5108 +1108 +1FF8 +0280 +0492 +188A +E07E +ENDCHAR +STARTCHAR uni84AD +ENCODING 33965 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1FFC +6204 +1224 +1FE4 +0818 +7400 +0FFE +1102 +6912 +0FF2 +0602 +781C +ENDCHAR +STARTCHAR uni84AE +ENCODING 33966 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0400 +7FFC +4504 +0880 +1FFC +3080 +5FF8 +1080 +1FF8 +1080 +1FFC +1000 +ENDCHAR +STARTCHAR uni84AF +ENCODING 33967 +BBX 15 15 1 -1 +BITMAP +1102 +110A +FFEA +110A +000A +79EA +492A +69AA +596A +492A +69AA +5962 +4922 +4922 +9A66 +ENDCHAR +STARTCHAR uni84B0 +ENCODING 33968 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1078 +3E48 +2248 +2A86 +2300 +FEFC +2244 +2A44 +2228 +4210 +4A28 +84C6 +ENDCHAR +STARTCHAR uni84B1 +ENCODING 33969 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1028 +1024 +FDFE +1020 +15FC +1924 +31FC +D124 +11FC +1124 +5124 +210C +ENDCHAR +STARTCHAR uni84B2 +ENCODING 33970 +BBX 15 15 1 -1 +BITMAP +0840 +FFFE +0848 +4044 +2FFE +1040 +87FC +4444 +27FC +0444 +07FC +1444 +2444 +4444 +844C +ENDCHAR +STARTCHAR uni84B3 +ENCODING 33971 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1020 +25FC +7D24 +0924 +1154 +254C +7D84 +0104 +5504 +5514 +8108 +ENDCHAR +STARTCHAR uni84B4 +ENCODING 33972 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +4100 +223E +FFA2 +0822 +493E +4922 +4922 +7F3E +0842 +1042 +608E +ENDCHAR +STARTCHAR uni84B5 +ENCODING 33973 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0038 +7FC0 +2208 +1510 +0840 +1F80 +0120 +1FF0 +0210 +7FFC +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni84B6 +ENCODING 33974 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1010 +1090 +2488 +7D04 +0A02 +11F8 +2448 +7C48 +0088 +5488 +5528 +8210 +ENDCHAR +STARTCHAR uni84B7 +ENCODING 33975 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +0000 +3FF8 +2008 +3FF8 +2008 +3FF8 +2008 +3FF8 +0820 +1010 +ENDCHAR +STARTCHAR uni84B8 +ENCODING 33976 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3FF8 +0062 +7D84 +0548 +0930 +3118 +C706 +0000 +FFFE +2888 +4444 +8442 +ENDCHAR +STARTCHAR uni84B9 +ENCODING 33977 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0A20 +0440 +7FFC +0440 +3FF8 +0448 +FFFE +0448 +3FF8 +0C60 +1450 +2448 +C446 +ENDCHAR +STARTCHAR uni84BA +ENCODING 33978 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0080 +3FFE +A200 +67FC +2880 +6080 +BFFE +2140 +4220 +8C18 +3006 +ENDCHAR +STARTCHAR uni84BB +ENCODING 33979 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +FDF8 +0408 +7CF8 +4080 +7CFC +1424 +64CC +0C14 +3464 +C584 +1818 +ENDCHAR +STARTCHAR uni84BC +ENCODING 33980 +BBX 14 15 1 -1 +BITMAP +1020 +FFFC +17A0 +0860 +37B0 +C00C +3FF0 +2010 +3FF0 +2010 +7FF0 +4000 +9FF8 +9008 +1FF8 +ENDCHAR +STARTCHAR uni84BD +ENCODING 33981 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +3FF8 +2108 +2FE8 +2288 +2448 +2828 +3FF8 +0100 +0884 +4892 +4812 +87F0 +ENDCHAR +STARTCHAR uni84BE +ENCODING 33982 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +4000 +2248 +8148 +4150 +2040 +07FC +E150 +2150 +2248 +2444 +5000 +8FFE +ENDCHAR +STARTCHAR uni84BF +ENCODING 33983 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +7FFC +0000 +0FE0 +0820 +0FE0 +0000 +7FFC +4004 +4FE4 +4824 +4FEC +ENDCHAR +STARTCHAR uni84C0 +ENCODING 33984 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0038 +7BC0 +0880 +1110 +1220 +1140 +188C +F7F2 +1040 +1248 +1C46 +7040 +ENDCHAR +STARTCHAR uni84C1 +ENCODING 33985 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +3FF8 +0100 +1FF0 +0280 +7FFC +0820 +37D8 +C106 +3FF8 +0D60 +711C +0100 +ENDCHAR +STARTCHAR uni84C2 +ENCODING 33986 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7FFC +4004 +5FF4 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0440 +1830 +600E +ENDCHAR +STARTCHAR uni84C3 +ENCODING 33987 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0500 +3978 +2108 +3D78 +2108 +3FF8 +0100 +3FF0 +0820 +0440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni84C4 +ENCODING 33988 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +7FFC +0400 +1848 +069C +FFE2 +0000 +3FF8 +2108 +3FF8 +2108 +3FF8 +ENDCHAR +STARTCHAR uni84C5 +ENCODING 33989 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +2020 +17FE +1080 +8108 +43FC +5004 +1150 +2150 +E150 +2252 +2252 +244E +ENDCHAR +STARTCHAR uni84C6 +ENCODING 33990 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0080 +3FFE +2220 +3FFC +2220 +23E0 +2080 +5FFC +5084 +9084 +108C +0080 +ENDCHAR +STARTCHAR uni84C7 +ENCODING 33991 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1FF0 +1010 +1F90 +1090 +7FFE +4002 +9FF4 +1010 +1FF0 +1010 +1FF0 +1010 +1030 +ENDCHAR +STARTCHAR uni84C8 +ENCODING 33992 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0400 +3F7C +2144 +3F48 +2150 +3F48 +2844 +2444 +2A54 +3248 +2040 +0040 +ENDCHAR +STARTCHAR uni84C9 +ENCODING 33993 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0920 +7FFC +4824 +1120 +629C +0C60 +3018 +DFF6 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni84CA +ENCODING 33994 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0440 +1930 +E24E +0460 +1F90 +0000 +FEFE +4242 +2626 +1A1A +6262 +0E0E +ENDCHAR +STARTCHAR uni84CB +ENCODING 33995 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +3FF8 +0100 +7FFC +0420 +09D0 +3E08 +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni84CC +ENCODING 33996 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1110 +1110 +2928 +7FFC +0100 +FFFE +0800 +1FF0 +2820 +4440 +0380 +1C70 +E00E +ENDCHAR +STARTCHAR uni84CD +ENCODING 33997 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0924 +3FF8 +0110 +FFFE +0080 +1FF0 +F004 +1FFC +1008 +1FF8 +1008 +1FF8 +ENDCHAR +STARTCHAR uni84CE +ENCODING 33998 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +3FFE +2080 +27F8 +2088 +3FFE +2088 +27F8 +4000 +47F8 +8408 +07F8 +ENDCHAR +STARTCHAR uni84CF +ENCODING 33999 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +030C +3EF8 +2AA8 +2AA8 +2AA8 +2AA8 +29A8 +2BA8 +4AA8 +4D3A +B166 +ENDCHAR +STARTCHAR uni84D0 +ENCODING 34000 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7FFC +4000 +4FF8 +4000 +7FFE +4848 +4F30 +580E +4010 +9FFE +8410 +0270 +ENDCHAR +STARTCHAR uni84D1 +ENCODING 34001 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +7FFC +0000 +1FF0 +1010 +FFFE +1010 +1FF0 +0284 +0C48 +F830 +0F18 +3806 +ENDCHAR +STARTCHAR uni84D2 +ENCODING 34002 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0800 +7F7C +0810 +7F10 +4910 +7F10 +49FE +7F10 +0810 +FF90 +0810 +0810 +ENDCHAR +STARTCHAR uni84D3 +ENCODING 34003 +BBX 15 15 1 -1 +BITMAP +0420 +0420 +FFFE +0420 +1040 +17FC +1208 +2110 +6FFE +A000 +23F8 +2208 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uni84D4 +ENCODING 34004 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0820 +0440 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +2488 +2244 +4244 +ENDCHAR +STARTCHAR uni84D5 +ENCODING 34005 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1020 +11FC +FC20 +1020 +33FE +3800 +5420 +51FC +9020 +1020 +13FE +ENDCHAR +STARTCHAR uni84D6 +ENCODING 34006 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +0200 +1FF0 +1490 +1310 +1490 +1010 +1FF0 +1080 +1E98 +10E2 +1E82 +F07E +ENDCHAR +STARTCHAR uni84D7 +ENCODING 34007 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1040 +23F8 +4040 +8840 +17FC +3040 +5240 +9278 +1240 +1540 +18FE +1000 +ENDCHAR +STARTCHAR uni84D8 +ENCODING 34008 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +7FFC +0820 +1210 +2448 +4824 +1FF0 +0510 +0888 +1850 +2920 +CA18 +0C06 +ENDCHAR +STARTCHAR uni84D9 +ENCODING 34009 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +7FFE +4000 +4490 +4490 +4AA8 +5084 +8FF8 +8080 +0080 +3FFE +ENDCHAR +STARTCHAR uni84DA +ENCODING 34010 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1080 +10FE +2308 +2C90 +6860 +A998 +2E26 +28C8 +2830 +28C4 +2018 +21E0 +ENDCHAR +STARTCHAR uni84DB +ENCODING 34011 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0820 +0820 +FFBE +0844 +7FA4 +4924 +4B28 +1C28 +2A10 +4928 +8844 +0882 +ENDCHAR +STARTCHAR uni84DC +ENCODING 34012 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +FF7C +1404 +7F04 +5504 +557C +6740 +4140 +7F42 +4142 +7F3E +ENDCHAR +STARTCHAR uni84DD +ENCODING 34013 +BBX 15 15 0 -1 +BITMAP +0820 +0820 +FFFE +0820 +0480 +2480 +24FC +24A0 +2510 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni84DE +ENCODING 34014 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +00FC +7F00 +2208 +1110 +0C20 +3078 +2008 +3C78 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni84DF +ENCODING 34015 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1004 +1F04 +2224 +7FA4 +A4A4 +3FA4 +24A4 +3FA4 +0004 +0784 +7814 +2008 +ENDCHAR +STARTCHAR uni84E0 +ENCODING 34016 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0080 +FFFE +0440 +1390 +1450 +1FF0 +0100 +7FFC +4444 +4FE4 +4424 +400C +ENDCHAR +STARTCHAR uni84E1 +ENCODING 34017 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +23F8 +1008 +11F8 +8008 +43F8 +5000 +17FC +2404 +E3F8 +2110 +20E0 +271C +ENDCHAR +STARTCHAR uni84E2 +ENCODING 34018 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +1440 +0800 +3E7C +2244 +3E44 +227C +3E44 +2244 +287C +2444 +2A44 +3294 +2108 +ENDCHAR +STARTCHAR uni84E3 +ENCODING 34019 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7DFC +0420 +2840 +11FC +FD04 +1524 +1124 +1124 +1124 +1050 +5088 +2304 +ENDCHAR +STARTCHAR uni84E4 +ENCODING 34020 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +4040 +23F8 +2040 +0FFE +1110 +1288 +24F4 +E110 +22A0 +2040 +21B0 +2E0E +ENDCHAR +STARTCHAR uni84E5 +ENCODING 34021 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7FFE +4102 +8284 +0C60 +3018 +DFF6 +0100 +3FF8 +1110 +0920 +7FFC +ENDCHAR +STARTCHAR uni84E6 +ENCODING 34022 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1FF0 +1010 +1FF0 +1010 +FFFE +1010 +2FC8 +C046 +0840 +0FF8 +0008 +7FA8 +0010 +ENDCHAR +STARTCHAR uni84E7 +ENCODING 34023 +BBX 15 15 1 -1 +BITMAP +0420 +0420 +FFFE +0420 +1080 +11FE +2B04 +2888 +6870 +AB8E +2820 +2BFE +28A8 +2B26 +2020 +ENDCHAR +STARTCHAR uni84E8 +ENCODING 34024 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1080 +11FC +2288 +2870 +6B8E +A800 +29FC +2904 +29FC +2904 +29FC +2104 +210C +ENDCHAR +STARTCHAR uni84E9 +ENCODING 34025 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0080 +7CF8 +0508 +2A90 +1060 +FD98 +1606 +3040 +53F8 +9048 +1088 +5150 +2620 +ENDCHAR +STARTCHAR uni84EA +ENCODING 34026 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +4000 +2FFC +8118 +40A0 +27FC +0444 +E7FC +2444 +27FC +2444 +544C +8FFE +ENDCHAR +STARTCHAR uni84EB +ENCODING 34027 +BBX 15 15 0 -1 +BITMAP +0820 +FFFE +0820 +23FC +1080 +1144 +0668 +70B0 +1128 +1668 +10A4 +1124 +16A0 +2840 +47FE +ENDCHAR +STARTCHAR uni84EC +ENCODING 34028 +BBX 15 15 1 -1 +BITMAP +0840 +FFFE +0A40 +43F8 +2510 +90E0 +471C +2040 +03F8 +E040 +23F8 +2040 +27FC +5040 +8FFE +ENDCHAR +STARTCHAR uni84ED +ENCODING 34029 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +0080 +3FFC +2080 +3FFC +2220 +2490 +2FF8 +3494 +27F0 +2490 +47F2 +4082 +807E +ENDCHAR +STARTCHAR uni84EE +ENCODING 34030 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +8840 +4FFE +2040 +07FC +0444 +E7FC +2444 +27FC +2040 +2FFE +5040 +8FFE +ENDCHAR +STARTCHAR uni84EF +ENCODING 34031 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +2208 +4208 +8514 +18A2 +2000 +6040 +A27C +2240 +2540 +28FE +ENDCHAR +STARTCHAR uni84F0 +ENCODING 34032 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0040 +2278 +4240 +8A40 +17FC +2000 +6040 +A27C +2240 +2540 +28FE +ENDCHAR +STARTCHAR uni84F1 +ENCODING 34033 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +4820 +2104 +0208 +8FBE +4208 +2208 +0388 +0E3E +1208 +2208 +4408 +8808 +ENDCHAR +STARTCHAR uni84F2 +ENCODING 34034 +BBX 15 15 0 -1 +BITMAP +0820 +FFFE +0820 +0000 +3FF8 +2000 +27F0 +2410 +27F0 +2000 +2F78 +2948 +2F78 +2000 +3FFC +ENDCHAR +STARTCHAR uni84F3 +ENCODING 34035 +BBX 15 15 0 -1 +BITMAP +0440 +FFFE +0440 +0820 +7FFC +0820 +0FE0 +0100 +3FF8 +2108 +3FF8 +0100 +7FFC +0100 +FFFE +ENDCHAR +STARTCHAR uni84F4 +ENCODING 34036 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +7FFC +0100 +1FF0 +1110 +1FF0 +1118 +7FE4 +0100 +FFFE +0010 +0810 +0470 +ENDCHAR +STARTCHAR uni84F5 +ENCODING 34037 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +13FE +1020 +FDFC +1024 +13FE +1C24 +F1FC +1020 +113C +5120 +22FE +ENDCHAR +STARTCHAR uni84F6 +ENCODING 34038 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +00A0 +0090 +79FE +4920 +4B20 +4DFC +4920 +49FC +7920 +4920 +01FE +0100 +ENDCHAR +STARTCHAR uni84F7 +ENCODING 34039 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +10A0 +1090 +F9FE +1120 +1B20 +15FC +3120 +D1FC +1120 +1120 +51FE +2100 +ENDCHAR +STARTCHAR uni84F8 +ENCODING 34040 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +7FFC +0440 +3FF8 +2448 +3FF8 +2448 +3FF8 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni84F9 +ENCODING 34041 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1400 +27DE +4912 +8112 +17D2 +2112 +6112 +A5D2 +251A +25D4 +2E10 +2410 +ENDCHAR +STARTCHAR uni84FA +ENCODING 34042 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0000 +0820 +7E20 +08F8 +FF28 +2428 +5728 +BCC8 +104A +1EAA +E126 +ENDCHAR +STARTCHAR uni84FB +ENCODING 34043 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1040 +1040 +7C40 +11F8 +FE48 +4448 +28C8 +7C48 +10AA +FEAA +1106 +1202 +ENDCHAR +STARTCHAR uni84FC +ENCODING 34044 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7EFC +0A24 +36CC +0A14 +3120 +0EE0 +F09E +0F00 +00C0 +0710 +00E0 +1F00 +ENDCHAR +STARTCHAR uni84FD +ENCODING 34045 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3FF8 +2108 +3FF8 +2108 +3FF8 +0920 +FFFE +0920 +7FFC +0100 +3FF8 +0100 +ENDCHAR +STARTCHAR uni84FE +ENCODING 34046 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +01FC +0100 +3FF8 +2928 +2448 +2288 +2928 +2288 +2448 +2928 +3FF8 +2008 +ENDCHAR +STARTCHAR uni84FF +ENCODING 34047 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +7FFC +5004 +17FE +2080 +63FC +A204 +23FC +2204 +2204 +23FC +ENDCHAR +STARTCHAR uni8500 +ENCODING 34048 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0800 +7F7C +2244 +1248 +1450 +FFC8 +0048 +7E44 +4244 +4258 +7E40 +ENDCHAR +STARTCHAR uni8501 +ENCODING 34049 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +3FF8 +0440 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni8502 +ENCODING 34050 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1FF0 +1110 +1FF0 +1110 +1FF0 +0400 +0820 +1FC0 +0310 +3FF8 +1120 +2510 +4208 +ENDCHAR +STARTCHAR uni8503 +ENCODING 34051 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7CF8 +0488 +04F8 +7C20 +41FC +4124 +7D24 +05FC +0420 +0424 +2BFE +1002 +ENDCHAR +STARTCHAR uni8504 +ENCODING 34052 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7C7C +4444 +7C7C +4444 +7C7C +4004 +4FE4 +4824 +4824 +4FE4 +4014 +4008 +ENDCHAR +STARTCHAR uni8505 +ENCODING 34053 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7C7C +4444 +7C7C +4444 +7C7C +4104 +4FF4 +4244 +4644 +4184 +4244 +4C24 +400C +ENDCHAR +STARTCHAR uni8506 +ENCODING 34054 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +4040 +27FC +1040 +8FFE +4110 +221E +0480 +01F8 +1710 +20E0 +41B0 +8E0E +ENDCHAR +STARTCHAR uni8507 +ENCODING 34055 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0000 +7DFC +4420 +7D20 +4520 +45FE +7C50 +5050 +4892 +5492 +610E +4200 +ENDCHAR +STARTCHAR uni8508 +ENCODING 34056 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7FFC +0440 +3FF8 +2448 +3FF8 +0000 +3FF8 +0000 +FFFE +1110 +2508 +0200 +ENDCHAR +STARTCHAR uni8509 +ENCODING 34057 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0100 +FFFE +1010 +2008 +5FF4 +1010 +1010 +1FF0 +0488 +0850 +3820 +CB18 +0C06 +ENDCHAR +STARTCHAR uni850A +ENCODING 34058 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +11FC +1104 +15FC +5504 +59FC +5000 +91FC +1020 +2BFE +2420 +4420 +8020 +ENDCHAR +STARTCHAR uni850B +ENCODING 34059 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2200 +13BE +9212 +4212 +5FD2 +1014 +2214 +EA88 +3248 +2214 +2A24 +2442 +ENDCHAR +STARTCHAR uni850C +ENCODING 34060 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +FF3E +0842 +7F42 +4994 +7F10 +0810 +1C28 +2A28 +C944 +0882 +ENDCHAR +STARTCHAR uni850D +ENCODING 34061 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0080 +3FFE +2220 +3FFC +2224 +3FFC +2840 +2848 +2F70 +4844 +4B44 +8C3C +ENDCHAR +STARTCHAR uni850E +ENCODING 34062 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +2440 +10F8 +FC88 +0088 +7906 +0200 +79F8 +0088 +7888 +4850 +4820 +78D8 +4B06 +ENDCHAR +STARTCHAR uni850F +ENCODING 34063 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +7FFC +0820 +0440 +7FFC +4444 +4824 +57D4 +644C +4444 +47C4 +4014 +4008 +ENDCHAR +STARTCHAR uni8510 +ENCODING 34064 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +7FFC +0820 +0440 +7FFC +4104 +5FF4 +4104 +4FE4 +4824 +4FE4 +4004 +400C +ENDCHAR +STARTCHAR uni8511 +ENCODING 34065 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3FF8 +2448 +2448 +3FF8 +0044 +3FFE +2040 +2044 +4F28 +4072 +838C +ENDCHAR +STARTCHAR uni8512 +ENCODING 34066 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +3FF8 +0208 +FFFE +0408 +3FF8 +0800 +1FF8 +2808 +CFF8 +0000 +2444 +4222 +ENDCHAR +STARTCHAR uni8513 +ENCODING 34067 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +7FFC +4444 +7FFC +0000 +3FF8 +0C30 +03C0 +FC3E +ENDCHAR +STARTCHAR uni8514 +ENCODING 34068 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +2820 +3FFC +4004 +9FE4 +0004 +1FC4 +1044 +3FE4 +2224 +3FE4 +2224 +3FE4 +0018 +ENDCHAR +STARTCHAR uni8515 +ENCODING 34069 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +2448 +FFFE +2448 +47CE +0000 +7FFC +4104 +5FF4 +1110 +1110 +1170 +0100 +ENDCHAR +STARTCHAR uni8516 +ENCODING 34070 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +01F8 +0100 +3FFC +2104 +2FE0 +2108 +27F8 +2410 +27F0 +2410 +47F0 +4410 +9FFC +ENDCHAR +STARTCHAR uni8517 +ENCODING 34071 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +0100 +3FFC +2000 +2420 +3FFC +2420 +4420 +47E0 +8000 +0A48 +1124 +2122 +ENDCHAR +STARTCHAR uni8518 +ENCODING 34072 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0A20 +0420 +1FD8 +0100 +FFFE +0820 +3198 +CE06 +00C0 +0710 +00E0 +1F00 +ENDCHAR +STARTCHAR uni8519 +ENCODING 34073 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2040 +1040 +FEFE +2100 +2000 +3DFE +2422 +2420 +24BC +44A0 +5560 +8A3E +ENDCHAR +STARTCHAR uni851A +ENCODING 34074 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +7E08 +4208 +7EFE +4008 +5E48 +4028 +5F28 +8408 +9508 +2CB8 +ENDCHAR +STARTCHAR uni851B +ENCODING 34075 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +2820 +3E88 +4468 +FE08 +4A88 +7E68 +4A08 +4A0E +7FF8 +4208 +4208 +8E08 +ENDCHAR +STARTCHAR uni851C +ENCODING 34076 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0820 +0820 +7F3E +0844 +3EA4 +0824 +FF28 +1028 +1E10 +2228 +4A44 +8482 +ENDCHAR +STARTCHAR uni851D +ENCODING 34077 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0020 +7924 +48A8 +4820 +7BFE +4870 +78A8 +48A8 +4924 +7A22 +4820 +0020 +ENDCHAR +STARTCHAR uni851E +ENCODING 34078 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +1FF0 +1110 +FFFE +1110 +3FF8 +2108 +FFFE +0810 +1F20 +00F0 +7F0C +ENDCHAR +STARTCHAR uni851F +ENCODING 34079 +BBX 15 15 1 -1 +BITMAP +0420 +0420 +FFFE +0420 +1080 +10FE +FD00 +2280 +20FC +3D20 +2420 +25FE +4450 +4488 +9906 +ENDCHAR +STARTCHAR uni8520 +ENCODING 34080 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1040 +10FC +2488 +7D50 +0820 +10D8 +2706 +7C60 +0010 +54C0 +5430 +8008 +ENDCHAR +STARTCHAR uni8521 +ENCODING 34081 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0800 +3EFE +C244 +1428 +4810 +37E8 +C006 +3FF8 +0100 +3118 +C106 +0700 +ENDCHAR +STARTCHAR uni8522 +ENCODING 34082 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +2020 +13FC +8224 +4BF8 +1288 +2450 +E470 +298C +2400 +FFFE +0820 +07C0 +7838 +ENDCHAR +STARTCHAR uni8523 +ENCODING 34083 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +487C +49A4 +78B8 +0BC0 +F808 +4BFE +4888 +4848 +8808 +0838 +ENDCHAR +STARTCHAR uni8524 +ENCODING 34084 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +7FFC +4104 +44A0 +2448 +6596 +0E10 +F1F0 +0100 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni8525 +ENCODING 34085 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +0200 +3FF8 +2108 +25E8 +2E28 +2148 +2F88 +2048 +3FF8 +0500 +2494 +C3F2 +ENDCHAR +STARTCHAR uni8526 +ENCODING 34086 +BBX 15 15 1 -1 +BITMAP +1020 +FFFC +1220 +3FF0 +2010 +3FF0 +2010 +3FF0 +2000 +3FFE +2000 +3FFC +4004 +5244 +892C +ENDCHAR +STARTCHAR uni8527 +ENCODING 34087 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1010 +FEFE +1010 +7C7C +1010 +FEFE +1010 +3FF8 +0008 +1FF8 +0008 +3FF8 +0008 +ENDCHAR +STARTCHAR uni8528 +ENCODING 34088 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7FFC +4544 +5FF4 +4204 +7FFC +4824 +57D4 +644C +44C4 +4424 +43E4 +4004 +7FFC +ENDCHAR +STARTCHAR uni8529 +ENCODING 34089 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +7FFE +4002 +BFFC +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +1010 +2008 +4004 +ENDCHAR +STARTCHAR uni852A +ENCODING 34090 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0806 +7F78 +0840 +7F40 +497E +7F48 +4948 +7F48 +0848 +7F48 +0888 +0908 +ENDCHAR +STARTCHAR uni852B +ENCODING 34091 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7FFC +0100 +11F8 +1100 +FFFE +1000 +1FF8 +1000 +1FFE +4922 +8494 +ENDCHAR +STARTCHAR uni852C +ENCODING 34092 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0010 +FDFE +0840 +1088 +51FC +5C02 +50A8 +50A8 +50A8 +5D2A +E206 +ENDCHAR +STARTCHAR uni852D +ENCODING 34093 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +78A0 +4950 +4E0C +51F0 +5020 +49F8 +4800 +4BFC +7088 +4138 +43C4 +ENDCHAR +STARTCHAR uni852E +ENCODING 34094 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +7FFC +40A4 +7FFC +4084 +5E94 +5294 +5E64 +4054 +46B4 +5914 +7FFC +4004 +ENDCHAR +STARTCHAR uni852F +ENCODING 34095 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0040 +7FFC +4840 +53F8 +5248 +53F8 +4A48 +4BF8 +4950 +7248 +4C46 +4040 +ENDCHAR +STARTCHAR uni8530 +ENCODING 34096 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +3FF8 +2008 +3FF8 +2000 +27F0 +2410 +27F0 +2000 +2FF8 +2888 +4FF8 +4802 +87FE +ENDCHAR +STARTCHAR uni8531 +ENCODING 34097 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +2200 +1478 +0848 +1448 +2A86 +0900 +7EFC +0844 +2A44 +4928 +8910 +2828 +10C6 +ENDCHAR +STARTCHAR uni8532 +ENCODING 34098 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +7FFC +4044 +0040 +7E7C +0088 +FF50 +2420 +2452 +448A +83FE +ENDCHAR +STARTCHAR uni8533 +ENCODING 34099 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +23F8 +1040 +13F8 +8040 +47FE +5000 +13F8 +2208 +E3F8 +2208 +23F8 +2208 +2218 +ENDCHAR +STARTCHAR uni8534 +ENCODING 34100 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0100 +7FFE +4000 +4410 +7F7E +4410 +5554 +5554 +9554 +A496 +0410 +ENDCHAR +STARTCHAR uni8535 +ENCODING 34101 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0828 +0024 +7FFE +4020 +5FA4 +5224 +5FA8 +50A8 +5F90 +5210 +9FAA +804A +8184 +ENDCHAR +STARTCHAR uni8536 +ENCODING 34102 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +7FFC +0100 +3FF8 +0100 +FFFE +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni8537 +ENCODING 34103 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0100 +3FF8 +1110 +0920 +FFFE +0000 +3FF8 +2008 +27C8 +2448 +27C8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8538 +ENCODING 34104 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +1200 +67DC +4444 +47C4 +4444 +57DC +6000 +0440 +0440 +0842 +1042 +603E +ENDCHAR +STARTCHAR uni8539 +ENCODING 34105 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0820 +0820 +143E +2244 +5DA4 +8024 +1128 +0928 +4A10 +27A8 +F844 +4082 +ENDCHAR +STARTCHAR uni853A +ENCODING 34106 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +2000 +17FC +0504 +4484 +4FF4 +5904 +6FE4 +4904 +4FE4 +4904 +4FF4 +4814 +4008 +ENDCHAR +STARTCHAR uni853B +ENCODING 34107 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +7FFE +4002 +8024 +3E38 +0020 +7EF8 +1408 +1450 +1424 +2454 +2484 +43FC +ENDCHAR +STARTCHAR uni853C +ENCODING 34108 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +43F8 +2208 +23F8 +0208 +E3F8 +2100 +23FC +2444 +22A4 +2A04 +33F4 +2014 +0008 +ENDCHAR +STARTCHAR uni853D +ENCODING 34109 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +5420 +9220 +107E +FE44 +92C4 +9228 +BA28 +D610 +9228 +9244 +9682 +ENDCHAR +STARTCHAR uni853E +ENCODING 34110 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0E40 +70FC +1114 +FE24 +3844 +5484 +9418 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni853F +ENCODING 34111 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +00F8 +7F00 +2210 +1120 +1FE0 +1020 +1FF0 +1010 +1FFC +2004 +2AA4 +4AA4 +800C +ENDCHAR +STARTCHAR uni8540 +ENCODING 34112 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1020 +FEFE +1020 +7EFC +52A4 +52A4 +56AC +3870 +3468 +52A4 +9122 +1020 +ENDCHAR +STARTCHAR uni8541 +ENCODING 34113 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1FF0 +0010 +7FFC +0010 +3FFC +1084 +7EFC +0010 +FFFE +0810 +0410 +0070 +ENDCHAR +STARTCHAR uni8542 +ENCODING 34114 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0020 +3D24 +24A8 +25FC +3C40 +27FE +2488 +3D24 +26FA +2448 +4448 +54A8 +8910 +ENDCHAR +STARTCHAR uni8543 +ENCODING 34115 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +08F0 +3F10 +0920 +FFFE +0540 +0920 +3FF8 +D116 +1FF0 +1110 +1FF0 +ENDCHAR +STARTCHAR uni8544 +ENCODING 34116 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7C7C +4444 +7C7C +4444 +7C7C +4104 +4084 +4AA4 +4A14 +4A54 +51C4 +4014 +4008 +ENDCHAR +STARTCHAR uni8545 +ENCODING 34117 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +23F8 +1248 +93F8 +4248 +4BF8 +0840 +17FC +E444 +2454 +25F4 +2414 +040C +ENDCHAR +STARTCHAR uni8546 +ENCODING 34118 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0448 +0024 +3FFE +2020 +2FA4 +28A4 +2FA8 +28A8 +2F90 +2892 +4FAA +4546 +8882 +ENDCHAR +STARTCHAR uni8547 +ENCODING 34119 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3EF8 +2288 +3EF8 +0000 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni8548 +ENCODING 34120 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7FFC +0440 +3FF8 +2448 +3FF8 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni8549 +ENCODING 34121 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1080 +1FF8 +3080 +DFF0 +1080 +1FF0 +1080 +1FFC +4000 +8444 +8222 +ENDCHAR +STARTCHAR uni854A +ENCODING 34122 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +0500 +2488 +2424 +43E4 +1000 +0810 +1208 +5152 +5050 +9292 +0E0E +ENDCHAR +STARTCHAR uni854B +ENCODING 34123 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +0100 +09F0 +0900 +7FFC +0000 +0810 +2E10 +285C +2850 +3F50 +E0FE +ENDCHAR +STARTCHAR uni854C +ENCODING 34124 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +7EFC +4284 +7EFC +4284 +7EFC +4284 +ENDCHAR +STARTCHAR uni854D +ENCODING 34125 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +20A0 +1110 +1208 +85F6 +4000 +5784 +14A4 +27A4 +E4A4 +27A4 +2484 +2494 +2588 +ENDCHAR +STARTCHAR uni854E +ENCODING 34126 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +3FF0 +0400 +FFFC +1860 +2FD0 +C84C +7FF8 +4008 +4FC8 +4848 +4FD8 +ENDCHAR +STARTCHAR uni854F +ENCODING 34127 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0840 +8844 +53FC +2044 +57FE +9048 +31F8 +5708 +91F8 +1108 +2108 +C1F8 +ENDCHAR +STARTCHAR uni8550 +ENCODING 34128 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +7FFC +1110 +2928 +4544 +1110 +2928 +4544 +7FFC +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni8551 +ENCODING 34129 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7EFC +4284 +7EFC +4284 +7EFC +47C4 +4444 +47C4 +4444 +47C4 +4844 +48CC +ENDCHAR +STARTCHAR uni8552 +ENCODING 34130 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3FF8 +2448 +3FF8 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni8553 +ENCODING 34131 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3FF8 +0100 +7FFC +4924 +5554 +0820 +3FF8 +0000 +FFFE +0810 +11E8 +7E04 +ENDCHAR +STARTCHAR uni8554 +ENCODING 34132 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1000 +10FC +7C84 +1094 +FE88 +4480 +28FC +7CA4 +10A4 +FEA8 +1090 +10A8 +10C6 +ENDCHAR +STARTCHAR uni8555 +ENCODING 34133 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0130 +8A0C +55FA +20A0 +53FC +9AA4 +2B3C +4A04 +8BFC +1204 +63FC +ENDCHAR +STARTCHAR uni8556 +ENCODING 34134 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +23FC +1200 +43F8 +2A08 +0BF8 +7200 +13FC +1100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni8557 +ENCODING 34135 +BBX 15 15 1 -1 +BITMAP +0420 +0420 +FFFE +0420 +0040 +7C7C +44C4 +4528 +7C10 +106C +5D82 +50FC +5084 +5C84 +E0FC +ENDCHAR +STARTCHAR uni8558 +ENCODING 34136 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +3FF8 +0100 +FFFE +1010 +7C7C +1010 +FEFE +0000 +7FFE +0420 +1822 +E01E +ENDCHAR +STARTCHAR uni8559 +ENCODING 34137 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +7FFC +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0110 +7FEC +0100 +4894 +87F2 +ENDCHAR +STARTCHAR uni855A +ENCODING 34138 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +07C0 +0440 +3FF8 +2288 +3EF8 +0000 +FFFE +0400 +0FF8 +0808 +0038 +ENDCHAR +STARTCHAR uni855B +ENCODING 34139 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0C88 +7050 +11FC +1024 +FDFC +3120 +39FE +5462 +50AA +9124 +1220 +1020 +ENDCHAR +STARTCHAR uni855C +ENCODING 34140 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0440 +7C7C +0440 +3C78 +0440 +7C7C +0440 +0200 +0908 +4924 +4824 +87E0 +ENDCHAR +STARTCHAR uni855D +ENCODING 34141 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1080 +10F8 +2508 +7E10 +09FC +1124 +2524 +7DFC +0100 +5502 +5502 +80FE +ENDCHAR +STARTCHAR uni855E +ENCODING 34142 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +FFFE +2200 +3EFC +2244 +3E28 +2210 +3E28 +E2C6 +ENDCHAR +STARTCHAR uni855F +ENCODING 34143 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +08A0 +3E90 +0464 +2828 +1010 +3EF8 +C296 +1E90 +110C +20F0 +3E90 +0260 +1490 +0908 +ENDCHAR +STARTCHAR uni8560 +ENCODING 34144 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0800 +7F7C +1144 +3244 +0C44 +367C +C880 +1F00 +0210 +3FF8 +0108 +1520 +2210 +ENDCHAR +STARTCHAR uni8561 +ENCODING 34145 +BBX 15 15 1 -1 +BITMAP +0420 +FFFE +0520 +3FF8 +0920 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +701C +ENDCHAR +STARTCHAR uni8562 +ENCODING 34146 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +1FF0 +1110 +1FF0 +0100 +FFFE +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +701C +ENDCHAR +STARTCHAR uni8563 +ENCODING 34147 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0078 +1F80 +2208 +1110 +7FFC +4804 +5E14 +23F8 +6290 +15FE +1810 +E010 +ENDCHAR +STARTCHAR uni8564 +ENCODING 34148 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +FE10 +1050 +127E +2290 +D410 +187C +2810 +D810 +2C10 +CAFE +1100 +60FE +ENDCHAR +STARTCHAR uni8565 +ENCODING 34149 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0050 +7E48 +04FE +2490 +2590 +44FE +7E90 +0C90 +14FE +2490 +4490 +94FE +0880 +ENDCHAR +STARTCHAR uni8566 +ENCODING 34150 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +0BFE +1020 +21FC +4904 +11FC +2104 +45FC +0904 +11FC +2000 +C088 +0104 +ENDCHAR +STARTCHAR uni8567 +ENCODING 34151 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0200 +13FC +2400 +43F8 +8A08 +13F8 +3208 +53F8 +9100 +13F8 +1510 +10E0 +171C +ENDCHAR +STARTCHAR uni8568 +ENCODING 34152 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7FFE +5120 +4A20 +7FBE +4452 +5594 +5510 +5F28 +8428 +8844 +1082 +ENDCHAR +STARTCHAR uni8569 +ENCODING 34153 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +47F8 +2408 +07F8 +8408 +47F8 +0000 +1FFE +2400 +2FFC +5124 +4244 +8498 +ENDCHAR +STARTCHAR uni856A +ENCODING 34154 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +2820 +7FFC +9248 +1248 +FFFE +1248 +1248 +7FFC +0000 +2888 +4444 +8442 +ENDCHAR +STARTCHAR uni856B +ENCODING 34155 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +1FF0 +0440 +7FFC +0000 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni856C +ENCODING 34156 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1020 +1020 +2440 +7C88 +09F0 +1020 +2448 +7DFC +0020 +54A8 +5524 +8060 +ENDCHAR +STARTCHAR uni856D +ENCODING 34157 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +2548 +3FF8 +2108 +3D78 +2548 +4548 +ENDCHAR +STARTCHAR uni856E +ENCODING 34158 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0200 +1CF0 +1010 +1EF0 +1010 +1FF0 +0800 +1FFC +2004 +4924 +2494 +2494 +4008 +ENDCHAR +STARTCHAR uni856F +ENCODING 34159 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +08A0 +78F8 +4908 +4A90 +5060 +50D8 +4B76 +48A0 +49FE +5220 +41FC +4020 +47FE +ENDCHAR +STARTCHAR uni8570 +ENCODING 34160 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +FFFE +0440 +23F8 +1208 +93F8 +4208 +4BF8 +0800 +17FC +E524 +2524 +2524 +2FFE +ENDCHAR +STARTCHAR uni8571 +ENCODING 34161 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0C20 +7124 +10A8 +1020 +FDFC +3104 +39FC +5504 +51FC +9104 +1114 +1108 +ENDCHAR +STARTCHAR uni8572 +ENCODING 34162 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +220C +1470 +7F40 +4940 +7F40 +497E +7F48 +0848 +FF48 +0848 +0888 +0888 +0908 +ENDCHAR +STARTCHAR uni8573 +ENCODING 34163 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7C7C +4444 +7C7C +4444 +7C7C +4004 +4FE4 +4824 +4FE4 +4824 +4FE4 +400C +ENDCHAR +STARTCHAR uni8574 +ENCODING 34164 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +21F8 +2108 +45F8 +8908 +F1F8 +2000 +43FC +FA94 +0294 +1A94 +E7FE +4000 +ENDCHAR +STARTCHAR uni8575 +ENCODING 34165 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +2040 +20A0 +2158 +3A26 +4DF8 +4908 +49F8 +A908 +11F8 +1144 +2128 +4150 +8188 +ENDCHAR +STARTCHAR uni8576 +ENCODING 34166 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +06C0 +1930 +EFEE +0040 +0680 +0100 +ENDCHAR +STARTCHAR uni8577 +ENCODING 34167 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0000 +FDFE +0420 +28FC +1084 +FEFC +1284 +14FC +1084 +10FC +1048 +7186 +ENDCHAR +STARTCHAR uni8578 +ENCODING 34168 +BBX 15 15 0 -1 +BITMAP +0820 +FFFE +0820 +0000 +47BC +2484 +27BC +0400 +E7BC +2404 +27A8 +2410 +2428 +5444 +8FFE +ENDCHAR +STARTCHAR uni8579 +ENCODING 34169 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +FFFE +10A0 +2090 +45FE +7B20 +11FC +2520 +7DFC +0920 +1120 +21FE +C100 +ENDCHAR +STARTCHAR uni857A +ENCODING 34170 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3E00 +2228 +3E24 +003E +FFE0 +2224 +3E24 +2228 +3E10 +2230 +3E4A +C384 +ENDCHAR +STARTCHAR uni857B +ENCODING 34171 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3C48 +2048 +3C48 +21FE +3C48 +2048 +FE48 +21FE +2448 +4C84 +F302 +ENDCHAR +STARTCHAR uni857C +ENCODING 34172 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0020 +3EFC +2024 +3DFE +2024 +3CFC +2020 +FEFC +1020 +25FE +7E20 +2220 +0020 +ENDCHAR +STARTCHAR uni857D +ENCODING 34173 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0A60 +1FF8 +1248 +1FF8 +1248 +3FFC +2000 +2FF8 +2000 +3FFE +4448 +8730 +1C0E +ENDCHAR +STARTCHAR uni857E +ENCODING 34174 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3FF8 +0100 +7FFC +4104 +5D74 +0100 +3FF8 +2108 +3FF8 +2108 +2108 +3FF8 +ENDCHAR +STARTCHAR uni857F +ENCODING 34175 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +082C +10F0 +14A8 +5514 +55FC +9020 +93FE +1040 +28F8 +2B88 +4450 +4430 +83CE +ENDCHAR +STARTCHAR uni8580 +ENCODING 34176 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +43F8 +2248 +1248 +82A8 +4318 +23F8 +0800 +17F8 +2528 +4528 +9FFE +ENDCHAR +STARTCHAR uni8581 +ENCODING 34177 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +3FF8 +2068 +2FA8 +2548 +3FF8 +2548 +2928 +0100 +FFFE +0280 +1C70 +E00E +ENDCHAR +STARTCHAR uni8582 +ENCODING 34178 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1000 +3E20 +2220 +3E3E +2244 +3EA4 +0824 +7F28 +1028 +1E10 +2228 +2A44 +4482 +ENDCHAR +STARTCHAR uni8583 +ENCODING 34179 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +2020 +17FE +1000 +81F8 +4108 +51F8 +1000 +27FE +E402 +25FA +250A +25FA +2406 +ENDCHAR +STARTCHAR uni8584 +ENCODING 34180 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0828 +4044 +2FFE +1040 +87FC +4444 +27FC +0444 +17FC +1008 +2FFE +4208 +8138 +ENDCHAR +STARTCHAR uni8585 +ENCODING 34181 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +23FE +2200 +FAFC +4A00 +4BFE +4AA4 +9298 +52C6 +2208 +53FE +4A88 +8448 +0818 +ENDCHAR +STARTCHAR uni8586 +ENCODING 34182 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0038 +3FC4 +0908 +7FFC +5114 +2498 +43F6 +0800 +1FF8 +6810 +07E0 +FC3E +ENDCHAR +STARTCHAR uni8587 +ENCODING 34183 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +2220 +2AA0 +4ABE +8FA4 +2044 +2F24 +4928 +C918 +4990 +5128 +4046 +ENDCHAR +STARTCHAR uni8588 +ENCODING 34184 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +03C0 +0C30 +FFFE +2928 +2548 +3FF8 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8589 +ENCODING 34185 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +11F8 +1100 +FFFE +0024 +3FFE +2020 +2FA4 +2224 +2A18 +2A90 +512A +4646 +9882 +ENDCHAR +STARTCHAR uni858A +ENCODING 34186 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +2820 +3C04 +4424 +FF24 +4924 +7F24 +4924 +7F24 +0004 +5504 +8A84 +801C +ENDCHAR +STARTCHAR uni858B +ENCODING 34187 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +4920 +21FC +0A44 +F0B0 +230E +3FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni858C +ENCODING 34188 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +2200 +27BE +44A2 +97A2 +54A4 +27A8 +4024 +F4A2 +1722 +2422 +44AC +83A0 +ENDCHAR +STARTCHAR uni858D +ENCODING 34189 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +7F10 +2A10 +7F10 +1210 +0C10 +7F90 +4A90 +5E90 +4090 +5E92 +4A92 +4492 +4B8E +ENDCHAR +STARTCHAR uni858E +ENCODING 34190 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7FFC +4444 +7FFC +0000 +7FFE +4922 +9114 +31FC +5F10 +90A0 +1044 +11A4 +161C +ENDCHAR +STARTCHAR uni858F +ENCODING 34191 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +0100 +3FF8 +0820 +7FFC +1010 +1FF0 +1010 +1FF0 +0200 +2908 +4424 +83E2 +ENDCHAR +STARTCHAR uni8590 +ENCODING 34192 +BBX 15 15 1 -1 +BITMAP +0820 +FFFC +0820 +0040 +1BF8 +E040 +23FC +F910 +261C +7080 +69FC +A310 +A0E0 +21B0 +2E0E +ENDCHAR +STARTCHAR uni8591 +ENCODING 34193 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7FFC +1110 +1FF0 +1110 +7FFC +0000 +1FF0 +1110 +1FF0 +1110 +FFFE +ENDCHAR +STARTCHAR uni8592 +ENCODING 34194 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0800 +0F78 +2808 +7F28 +A110 +1628 +38C4 +D110 +0920 +7FFC +0540 +1930 +610C +ENDCHAR +STARTCHAR uni8593 +ENCODING 34195 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +43F8 +2008 +1FFE +8008 +4FFE +2842 +0BFA +0248 +17FC +2318 +40E0 +8F1E +ENDCHAR +STARTCHAR uni8594 +ENCODING 34196 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +7FFC +1110 +1110 +2928 +FFFE +2008 +27C8 +2448 +27C8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8595 +ENCODING 34197 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0100 +3FFC +2220 +3FFC +2240 +2FF8 +2248 +3FFC +2248 +2FF8 +4660 +4A50 +B24C +ENDCHAR +STARTCHAR uni8596 +ENCODING 34198 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +21F8 +1108 +11E8 +0128 +73FC +1204 +12F4 +1294 +12F4 +1214 +2A08 +47FE +ENDCHAR +STARTCHAR uni8597 +ENCODING 34199 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0840 +7FF8 +4208 +5FE8 +4208 +7FF8 +5028 +5FE8 +4628 +5BC8 +6238 +4208 +7FF8 +ENDCHAR +STARTCHAR uni8598 +ENCODING 34200 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0040 +23F8 +1040 +17FC +0110 +F7FC +1040 +13F8 +1040 +17FC +1040 +2840 +47FE +ENDCHAR +STARTCHAR uni8599 +ENCODING 34201 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +28A8 +2090 +21FE +7F10 +5110 +91FC +1110 +FF10 +11FC +2910 +4510 +81FE +ENDCHAR +STARTCHAR uni859A +ENCODING 34202 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +00FC +7E84 +10FC +1084 +3CFC +2400 +47FE +A480 +19FE +0A52 +1092 +212A +4044 +ENDCHAR +STARTCHAR uni859B +ENCODING 34203 +BBX 15 15 1 -1 +BITMAP +0840 +FFFE +0840 +1020 +2020 +79FC +4888 +4850 +7BFE +4020 +7C20 +45FC +4420 +7C20 +0020 +ENDCHAR +STARTCHAR uni859C +ENCODING 34204 +BBX 15 15 1 -1 +BITMAP +0840 +FFFE +0840 +0020 +7820 +49FC +4888 +7850 +43FE +7C20 +C420 +45FC +4420 +7C20 +0020 +ENDCHAR +STARTCHAR uni859D +ENCODING 34205 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +07F0 +0820 +7FFE +4410 +4BD0 +700E +4FF0 +4000 +4FF8 +8808 +8808 +0FF8 +ENDCHAR +STARTCHAR uni859E +ENCODING 34206 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0040 +7EA0 +1198 +1246 +3DF8 +2508 +45F8 +A508 +19F8 +0944 +1128 +2190 +4108 +ENDCHAR +STARTCHAR uni859F +ENCODING 34207 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +0280 +0440 +1830 +E7CE +0000 +3EF8 +2288 +3EF8 +0820 +1450 +2288 +C106 +ENDCHAR +STARTCHAR uni85A0 +ENCODING 34208 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +13FC +1040 +15F8 +5508 +59F8 +5108 +91F8 +1108 +29F8 +2490 +4508 +8204 +ENDCHAR +STARTCHAR uni85A1 +ENCODING 34209 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +5FF4 +5014 +5FF4 +4004 +7C7C +0440 +FC7C +2444 +4444 +ENDCHAR +STARTCHAR uni85A2 +ENCODING 34210 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +2000 +3CFC +4824 +FE44 +4A98 +7E50 +4AFC +7E10 +43FE +8210 +8610 +ENDCHAR +STARTCHAR uni85A3 +ENCODING 34211 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0810 +FF10 +08FE +7E10 +0010 +7EFE +4242 +7E44 +4228 +2410 +0E28 +F044 +4182 +ENDCHAR +STARTCHAR uni85A4 +ENCODING 34212 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0050 +FDDC +2050 +2050 +3DDC +4450 +C450 +29DC +1050 +2050 +C7FE +ENDCHAR +STARTCHAR uni85A5 +ENCODING 34213 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3FF8 +2448 +3FF8 +0800 +1FFC +2204 +DFC4 +1244 +1FC4 +0224 +3FE4 +1028 +0010 +ENDCHAR +STARTCHAR uni85A6 +ENCODING 34214 +BBX 15 15 1 -1 +BITMAP +0810 +FFFE +0910 +7FFE +4440 +7FFC +4444 +7FFC +4800 +4FFE +4800 +8FFE +9002 +1492 +2246 +ENDCHAR +STARTCHAR uni85A7 +ENCODING 34215 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +7FFC +0000 +1FF0 +1010 +7FFE +4002 +BFF4 +0840 +1F48 +6250 +1462 +1842 +E03E +ENDCHAR +STARTCHAR uni85A8 +ENCODING 34216 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0840 +3FF0 +2490 +3FF0 +0000 +FFFC +8004 +BFF4 +1080 +3EB0 +E2C0 +2C84 +F07C +ENDCHAR +STARTCHAR uni85A9 +ENCODING 34217 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0820 +7BFC +4888 +4870 +5088 +53FE +4AA0 +4AFC +4B20 +72FC +4420 +4BFE +ENDCHAR +STARTCHAR uni85AA +ENCODING 34218 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +080C +7FF0 +2280 +14FE +FF88 +0888 +FF88 +2A88 +4908 +8908 +0808 +ENDCHAR +STARTCHAR uni85AB +ENCODING 34219 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3FF0 +0100 +FFFE +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0000 +4444 +8222 +ENDCHAR +STARTCHAR uni85AC +ENCODING 34220 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +47C4 +2448 +07C0 +3458 +C7C6 +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni85AD +ENCODING 34221 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0010 +1C20 +F1FC +1124 +11FC +FD24 +11FC +3850 +3490 +53FE +9010 +1010 +ENDCHAR +STARTCHAR uni85AE +ENCODING 34222 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +9220 +543E +FE44 +3844 +54C4 +9328 +1028 +FF10 +2210 +6428 +1C44 +E282 +ENDCHAR +STARTCHAR uni85AF +ENCODING 34223 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3FF8 +2448 +3FF8 +0110 +3FF0 +0120 +FFFE +0808 +1FF8 +6808 +0FF8 +ENDCHAR +STARTCHAR uni85B0 +ENCODING 34224 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3FF8 +0100 +FFFE +2928 +2548 +3FF8 +0100 +7FFC +0100 +FFFE +4844 +8422 +ENDCHAR +STARTCHAR uni85B1 +ENCODING 34225 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +1408 +5508 +3608 +147E +7F08 +1448 +7F28 +0828 +3E08 +0808 +0F28 +7810 +ENDCHAR +STARTCHAR uni85B2 +ENCODING 34226 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +7FFE +4002 +9FF4 +0920 +11C0 +0600 +1FF8 +6808 +0FF8 +0808 +0FF8 +0410 +0808 +ENDCHAR +STARTCHAR uni85B3 +ENCODING 34227 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0040 +23F8 +1040 +17FC +0000 +73F8 +1208 +13F8 +10C4 +11A8 +1290 +2C88 +47FE +ENDCHAR +STARTCHAR uni85B4 +ENCODING 34228 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +7FFC +4204 +A928 +47E4 +0000 +3FF8 +2448 +FFFE +0000 +7FFC +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni85B5 +ENCODING 34229 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +7FFC +0100 +3FF8 +0000 +FFFE +0002 +3FF0 +0100 +FFFE +0010 +7DFC +4490 +7C30 +ENDCHAR +STARTCHAR uni85B6 +ENCODING 34230 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0800 +31FC +CB24 +2D24 +31FC +C924 +1524 +25FC +CC20 +15FC +2420 +D420 +0BFE +ENDCHAR +STARTCHAR uni85B7 +ENCODING 34231 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7FFC +0100 +7FFC +4104 +5D74 +0000 +7FFC +0400 +7FFC +4444 +4444 +444C +ENDCHAR +STARTCHAR uni85B8 +ENCODING 34232 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +2000 +17FC +10A0 +87FC +44A4 +57FC +1000 +27FC +E000 +2FFE +2040 +2248 +24C4 +ENDCHAR +STARTCHAR uni85B9 +ENCODING 34233 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +7FFC +0100 +3FF8 +0820 +7FFC +4004 +5FF4 +0820 +1FD0 +0100 +FFFE +ENDCHAR +STARTCHAR uni85BA +ENCODING 34234 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +FFFE +0440 +7ABC +2928 +5934 +2008 +3FF8 +2008 +3FF8 +4008 +8008 +ENDCHAR +STARTCHAR uni85BB +ENCODING 34235 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +2248 +1490 +1248 +83F8 +4248 +53F8 +1248 +23F8 +E040 +2FFE +2150 +2248 +2444 +ENDCHAR +STARTCHAR uni85BC +ENCODING 34236 +BBX 15 15 1 -1 +BITMAP +1020 +FFFE +1120 +7FFE +4440 +7FFC +4444 +7FFC +4842 +BE3E +8100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni85BD +ENCODING 34237 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7F7C +1420 +7F20 +5538 +5528 +7F48 +0868 +0858 +7F4A +084A +0F6A +F046 +ENDCHAR +STARTCHAR uni85BE +ENCODING 34238 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7FFC +1110 +2108 +7FFC +B55A +2928 +3558 +2108 +3558 +2928 +3558 +2008 +2018 +ENDCHAR +STARTCHAR uni85BF +ENCODING 34239 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +247C +3A04 +2228 +1E10 +20FE +3E12 +4850 +085E +7F50 +14B0 +229E +4100 +ENDCHAR +STARTCHAR uni85C0 +ENCODING 34240 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0820 +2AA4 +4D28 +1450 +2288 +7FFE +4102 +9114 +1120 +2280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni85C1 +ENCODING 34241 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +7FFC +0820 +0FE0 +0000 +7FFC +4824 +4FEC +0100 +FFFE +0D60 +F11E +0100 +ENDCHAR +STARTCHAR uni85C2 +ENCODING 34242 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7F00 +227C +3E04 +2228 +3E10 +23A8 +FE44 +03F8 +7F04 +1188 +6370 +0D18 +F106 +ENDCHAR +STARTCHAR uni85C3 +ENCODING 34243 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0820 +7F20 +0020 +3E3E +2242 +3E84 +0010 +7F10 +4110 +5D28 +5528 +5D44 +4382 +ENDCHAR +STARTCHAR uni85C4 +ENCODING 34244 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0820 +7FFC +0820 +0FE0 +0820 +FFFE +1450 +2F88 +4124 +1FF0 +0110 +0920 +1310 +ENDCHAR +STARTCHAR uni85C5 +ENCODING 34245 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7FFC +4444 +7FFC +0800 +FF84 +0024 +7F24 +0024 +7F24 +0024 +7F04 +4114 +7F08 +ENDCHAR +STARTCHAR uni85C6 +ENCODING 34246 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +7FFE +4442 +BFFC +0440 +FFFE +0820 +31D8 +CF06 +0100 +7FFC +0100 +0300 +ENDCHAR +STARTCHAR uni85C7 +ENCODING 34247 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1800 +623C +4384 +7A3C +4384 +78BC +4284 +4284 +FFFE +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni85C8 +ENCODING 34248 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0020 +F7A4 +90A8 +9292 +F114 +9208 +95F4 +F842 +93F8 +9040 +F0A0 +9110 +0608 +ENDCHAR +STARTCHAR uni85C9 +ENCODING 34249 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1048 +7CFC +1048 +7C48 +11FE +FE00 +10FC +3884 +34FC +5484 +9084 +10FC +ENDCHAR +STARTCHAR uni85CA +ENCODING 34250 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +082C +1DF0 +F100 +11FC +1104 +FDFC +1100 +39FE +3552 +53FE +9352 +1552 +1156 +ENDCHAR +STARTCHAR uni85CB +ENCODING 34251 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +FEFE +1212 +E666 +1A1A +E262 +3FFC +6100 +BFF8 +2100 +3FF8 +2100 +3FFE +ENDCHAR +STARTCHAR uni85CC +ENCODING 34252 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +7FFC +4244 +2B90 +4C28 +37E0 +C100 +1FF0 +1110 +1FF0 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni85CD +ENCODING 34253 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7F40 +487E +7E40 +4280 +7E00 +483C +7F00 +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni85CE +ENCODING 34254 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +FFFE +2444 +C222 +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni85CF +ENCODING 34255 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0828 +0014 +5FFE +5010 +57D0 +7494 +17D4 +F448 +57C8 +549A +A7EA +A044 +ENDCHAR +STARTCHAR uni85D0 +ENCODING 34256 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1010 +2A20 +C5FC +2904 +11FC +E904 +09FC +3490 +CC90 +1490 +E512 +1A0E +ENDCHAR +STARTCHAR uni85D1 +ENCODING 34257 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +1440 +1FE0 +2020 +7FF8 +A308 +2488 +1FF0 +1110 +1FF0 +0800 +1FF0 +2820 +07C0 +F83E +ENDCHAR +STARTCHAR uni85D2 +ENCODING 34258 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0DFC +7104 +11FC +1104 +FDFC +3080 +39FE +5622 +5552 +9102 +11FA +1006 +ENDCHAR +STARTCHAR uni85D3 +ENCODING 34259 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2044 +3E28 +44FE +FF10 +4910 +7F7C +4910 +7F10 +00FE +0F10 +F010 +4010 +ENDCHAR +STARTCHAR uni85D4 +ENCODING 34260 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +7FFC +4104 +BFF8 +0440 +2828 +1FF0 +2828 +CFE6 +0820 +0FE0 +0100 +1510 +2208 +ENDCHAR +STARTCHAR uni85D5 +ENCODING 34261 +BBX 15 15 1 -1 +BITMAP +0840 +FFFE +0840 +1000 +79FC +1124 +79FC +1124 +FDFC +1020 +3BFE +362A +523A +92CA +1206 +ENDCHAR +STARTCHAR uni85D6 +ENCODING 34262 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3F7C +2444 +3F28 +2110 +3F28 +2446 +3FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni85D7 +ENCODING 34263 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +4210 +2F90 +2210 +0F9E +0AA2 +EA88 +2F88 +2208 +2714 +2A94 +3222 +5242 +8FFE +ENDCHAR +STARTCHAR uni85D8 +ENCODING 34264 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0920 +3FF8 +2208 +3FE0 +2208 +2FF8 +2920 +4FE0 +4920 +9FE8 +2414 +43F2 +ENDCHAR +STARTCHAR uni85D9 +ENCODING 34265 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +083C +7F24 +2424 +FF46 +3000 +C97C +1A44 +EC44 +1628 +E510 +04A8 +1846 +ENDCHAR +STARTCHAR uni85DA +ENCODING 34266 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +7FFC +0100 +3FF8 +2448 +3FF8 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni85DB +ENCODING 34267 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +0100 +7FFE +4202 +9CF4 +1010 +1EF0 +1010 +1FF0 +0800 +1FFC +2004 +0AA4 +12AC +ENDCHAR +STARTCHAR uni85DC +ENCODING 34268 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7C40 +10FE +FF12 +3822 +5442 +910C +06C0 +1930 +E54E +0380 +0D60 +731C +ENDCHAR +STARTCHAR uni85DD +ENCODING 34269 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +1020 +7E20 +10F8 +FF28 +44A8 +96A8 +7C48 +104A +FEA6 +0000 +FFFE +0810 +3FE8 +ENDCHAR +STARTCHAR uni85DE +ENCODING 34270 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7FFC +0800 +1FF0 +2810 +CFF0 +0000 +7EFE +2040 +7EFC +A344 +3E7C +2244 +ENDCHAR +STARTCHAR uni85DF +ENCODING 34271 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0000 +0FE0 +0920 +0FE0 +0920 +0FE0 +0000 +7EFC +4AA4 +7EFC +4AA4 +7EFC +ENDCHAR +STARTCHAR uni85E0 +ENCODING 34272 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +2040 +7EFC +4284 +7EFC +4284 +7EFC +4284 +ENDCHAR +STARTCHAR uni85E1 +ENCODING 34273 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +4040 +2FFE +8110 +47FC +2444 +05F4 +E444 +25F4 +2514 +25F4 +540C +8FFE +ENDCHAR +STARTCHAR uni85E2 +ENCODING 34274 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +2220 +4AA0 +8ABE +1FC4 +20A4 +6F24 +A028 +2FA8 +2210 +2FA8 +2244 +2F82 +ENDCHAR +STARTCHAR uni85E3 +ENCODING 34275 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7FFC +4444 +7FFC +2498 +7EE0 +0084 +7E7C +4200 +7E98 +42E0 +7E84 +4284 +467C +ENDCHAR +STARTCHAR uni85E4 +ENCODING 34276 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0924 +78A8 +49FC +4850 +7BFE +4888 +4924 +7AAA +4870 +48A8 +8B26 +9860 +ENDCHAR +STARTCHAR uni85E5 +ENCODING 34277 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1108 +27D0 +6C74 +17C8 +2C54 +4C64 +F7FA +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni85E6 +ENCODING 34278 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +7FFC +4410 +7F7E +5554 +647A +4F80 +4080 +9FFE +8080 +3FFE +0080 +0380 +ENDCHAR +STARTCHAR uni85E7 +ENCODING 34279 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +103C +13C0 +2544 +7CA8 +09FC +1040 +27FE +7C80 +00F8 +5548 +5630 +80CE +ENDCHAR +STARTCHAR uni85E8 +ENCODING 34280 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +3FFC +2440 +3FF8 +2448 +3FF8 +2840 +2F78 +2844 +2F3C +4000 +4A48 +9124 +ENDCHAR +STARTCHAR uni85E9 +ENCODING 34281 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +403C +37C8 +0150 +8FFE +6150 +0248 +0FFE +1248 +23F8 +4248 +83F8 +ENDCHAR +STARTCHAR uni85EA +ENCODING 34282 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7F10 +4910 +FFBE +4924 +7F44 +2AC4 +3E28 +1028 +FF90 +2228 +1C44 +6382 +ENDCHAR +STARTCHAR uni85EB +ENCODING 34283 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +27FC +10A0 +17FC +84A4 +47FC +5208 +13F8 +2208 +E3F8 +2040 +27FC +2040 +ENDCHAR +STARTCHAR uni85EC +ENCODING 34284 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7DFC +4524 +49FC +4820 +53FE +4904 +45FC +4504 +55FC +4904 +41FC +4088 +4104 +ENDCHAR +STARTCHAR uni85ED +ENCODING 34285 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +7FFC +4844 +F47E +3E00 +22FC +3E04 +22FC +3E80 +22FC +FE04 +1204 +E638 +ENDCHAR +STARTCHAR uni85EE +ENCODING 34286 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +10A0 +1090 +11FE +FD20 +13FC +3120 +39FC +5520 +51FE +9000 +12A4 +1252 +1452 +ENDCHAR +STARTCHAR uni85EF +ENCODING 34287 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3F08 +2108 +3F7E +2008 +2F48 +2028 +5FA8 +4408 +9528 +2C90 +0100 +4894 +87F2 +ENDCHAR +STARTCHAR uni85F0 +ENCODING 34288 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7784 +4284 +62A4 +54A4 +69A4 +1424 +2224 +DD24 +0824 +7F24 +4A04 +2F94 +F008 +ENDCHAR +STARTCHAR uni85F1 +ENCODING 34289 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0920 +0080 +3FFC +2100 +AFF8 +6888 +2FF8 +6888 +AFF8 +2150 +42F8 +4C8A +B07E +ENDCHAR +STARTCHAR uni85F2 +ENCODING 34290 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +1000 +13FE +1200 +FE7C +1244 +327C +3A00 +56EE +52AA +92EE +1200 +13FE +ENDCHAR +STARTCHAR uni85F3 +ENCODING 34291 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0540 +7FFC +0820 +0FE0 +0000 +7FFC +4824 +4FEC +0000 +3FF8 +0100 +FFFE +0920 +711C +ENDCHAR +STARTCHAR uni85F4 +ENCODING 34292 +BBX 15 15 0 -1 +BITMAP +0440 +0440 +FFFE +1440 +10F8 +2488 +7CF8 +0888 +10F8 +2400 +7DFC +0154 +5554 +5554 +83FE +ENDCHAR +STARTCHAR uni85F5 +ENCODING 34293 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0BF8 +1208 +33F8 +5040 +97FE +1150 +1248 +0100 +FFFE +0680 +1C48 +E530 +060E +ENDCHAR +STARTCHAR uni85F6 +ENCODING 34294 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7FFC +4000 +7F7C +4410 +7F7E +4E38 +5554 +6492 +80F8 +8880 +0880 +7FFE +ENDCHAR +STARTCHAR uni85F7 +ENCODING 34295 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7844 +01FC +FC48 +0050 +7BFE +0028 +78FC +0384 +78FC +4884 +4884 +78FC +ENDCHAR +STARTCHAR uni85F8 +ENCODING 34296 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0022 +FCFA +2024 +6028 +95FE +3440 +58FC +9484 +35FC +5684 +90FC +2084 +ENDCHAR +STARTCHAR uni85F9 +ENCODING 34297 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +79F8 +0108 +FDF8 +0108 +79F8 +0080 +79FE +0322 +7922 +4952 +49F2 +780C +ENDCHAR +STARTCHAR uni85FA +ENCODING 34298 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0840 +FCFC +8484 +FCFC +8484 +FCFC +8904 +9FE4 +B104 +9FE4 +9104 +9FE4 +800C +ENDCHAR +STARTCHAR uni85FB +ENCODING 34299 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +61F0 +1110 +01F0 +C000 +27BC +04A4 +17BC +1040 +2FFE +2150 +4248 +8C46 +ENDCHAR +STARTCHAR uni85FC +ENCODING 34300 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +7FFC +4104 +3FF8 +0100 +1FF0 +0100 +7FFC +2448 +3FF8 +0100 +4884 +4892 +87F2 +ENDCHAR +STARTCHAR uni85FD +ENCODING 34301 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0800 +7F7C +2244 +147C +FF44 +087C +7F44 +087C +2A28 +492A +A94A +1086 +ENDCHAR +STARTCHAR uni85FE +ENCODING 34302 +BBX 15 15 1 -1 +BITMAP +0420 +FFFE +0420 +10FC +FF24 +1044 +7C98 +5400 +54FC +7C84 +10FC +3884 +54FC +9248 +1186 +ENDCHAR +STARTCHAR uni85FF +ENCODING 34303 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +3FF8 +0100 +7FFC +4104 +5D74 +0840 +1FFC +2100 +FFF8 +2100 +3FFE +ENDCHAR +STARTCHAR uni8600 +ENCODING 34304 +BBX 15 15 1 -1 +BITMAP +0840 +FFFE +0840 +27FC +2524 +27FC +F040 +27FC +2040 +2FFE +3208 +EFFE +2040 +27FC +6040 +ENDCHAR +STARTCHAR uni8601 +ENCODING 34305 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7FFC +0100 +3D78 +2548 +3D78 +0100 +7FFC +0100 +3D78 +2548 +3D78 +0100 +FFFE +ENDCHAR +STARTCHAR uni8602 +ENCODING 34306 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +1288 +1224 +23E0 +0820 +5494 +534A +9E78 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni8603 +ENCODING 34307 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +11F8 +1100 +FFFE +0810 +2E5C +2850 +2E50 +F0FE +0100 +7FFC +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni8604 +ENCODING 34308 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +F786 +94B8 +F7A0 +0020 +7F3E +4924 +7F24 +4924 +7F24 +0844 +FF44 +0884 +ENDCHAR +STARTCHAR uni8605 +ENCODING 34309 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +13DC +2240 +4C80 +97DE +1544 +27C4 +6544 +A7C4 +2104 +2FE4 +2284 +2C6C +ENDCHAR +STARTCHAR uni8606 +ENCODING 34310 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0C20 +07F0 +0400 +7FFC +4204 +5FE0 +4208 +4FF8 +4920 +5FF8 +9248 +1248 +7FFE +ENDCHAR +STARTCHAR uni8607 +ENCODING 34311 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +2820 +3E0C +4470 +FF10 +49FE +7F10 +4938 +7F54 +0052 +5590 +9510 +ENDCHAR +STARTCHAR uni8608 +ENCODING 34312 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0600 +38FE +0810 +7F7C +1C44 +2A7C +4944 +1C7C +1444 +157C +2628 +2444 +4082 +ENDCHAR +STARTCHAR uni8609 +ENCODING 34313 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3FF8 +2448 +FFFE +9012 +13F0 +2010 +2FFC +6804 +A7F0 +2210 +2120 +20C0 +2738 +ENDCHAR +STARTCHAR uni860A +ENCODING 34314 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +11FC +2124 +4524 +2954 +118C +25FC +FC00 +15FC +5154 +5554 +9554 +93FE +ENDCHAR +STARTCHAR uni860B +ENCODING 34315 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1000 +5DFE +5020 +50FC +FE84 +10FC +5284 +92FC +3484 +08FC +3048 +C186 +ENDCHAR +STARTCHAR uni860C +ENCODING 34316 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0A20 +27DE +4912 +97D2 +2112 +65DA +A514 +2FD0 +0000 +3FF8 +0000 +FFFE +1110 +2308 +ENDCHAR +STARTCHAR uni860D +ENCODING 34317 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +08A0 +3F10 +0410 +7FD0 +043E +7FD2 +5552 +7FD2 +0412 +7FD2 +0412 +FFE2 +2AAA +4544 +ENDCHAR +STARTCHAR uni860E +ENCODING 34318 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3FF8 +0100 +7FFE +4102 +9D74 +0000 +3EF8 +22A8 +3EA8 +22F8 +3E84 +4284 +867C +ENDCHAR +STARTCHAR uni860F +ENCODING 34319 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +4000 +49FE +7420 +44FC +3C84 +00FC +7C84 +00FC +FE84 +10FC +5400 +D248 +2084 +ENDCHAR +STARTCHAR uni8610 +ENCODING 34320 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +082C +79F0 +0148 +FA24 +03FC +7840 +07FE +7880 +00F8 +7908 +4A90 +4860 +7F9E +ENDCHAR +STARTCHAR uni8611 +ENCODING 34321 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0100 +7FFC +4410 +7F7E +5414 +5554 +6556 +7FFC +4200 +8FFC +3804 +0FFC +ENDCHAR +STARTCHAR uni8612 +ENCODING 34322 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1C40 +F0F8 +1310 +10F8 +FCA8 +11FC +3924 +35FC +5524 +91FC +1022 +103E +ENDCHAR +STARTCHAR uni8613 +ENCODING 34323 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +08A0 +1CF0 +7110 +13FC +FD24 +11FC +3924 +3924 +55FC +5400 +9154 +122A +ENDCHAR +STARTCHAR uni8614 +ENCODING 34324 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +4800 +75FE +4420 +3CFC +0084 +0CFC +7084 +10FC +FE84 +10FC +3800 +5448 +9084 +ENDCHAR +STARTCHAR uni8615 +ENCODING 34325 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +2020 +247C +4AA4 +F818 +10E6 +2610 +4AFE +FA10 +027C +AA10 +AAFE +0510 +08FE +ENDCHAR +STARTCHAR uni8616 +ENCODING 34326 +BBX 15 15 1 -1 +BITMAP +0420 +FFFE +1420 +7EFE +4244 +7E28 +40FE +7E10 +427C +7E10 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni8617 +ENCODING 34327 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7EFE +4244 +7E28 +40FE +7E10 +C27C +7E10 +0100 +FFFE +0540 +3930 +C10E +ENDCHAR +STARTCHAR uni8618 +ENCODING 34328 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +FFFE +1290 +1EF0 +0440 +7FFC +0440 +3FF8 +0440 +FFFE +1884 +EB68 +1C1E +ENDCHAR +STARTCHAR uni8619 +ENCODING 34329 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7F78 +4848 +5E86 +6478 +5F48 +4A30 +7F4C +0000 +7EFC +2244 +1A34 +62C4 +060C +ENDCHAR +STARTCHAR uni861A +ENCODING 34330 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +2044 +3C28 +447C +FF10 +4910 +7F7C +4910 +7F10 +00FE +5510 +9510 +8010 +ENDCHAR +STARTCHAR uni861B +ENCODING 34331 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +2410 +24FE +FF20 +2444 +3CFE +2402 +3C7C +2444 +FF7C +5444 +627C +4044 +7E4C +ENDCHAR +STARTCHAR uni861C +ENCODING 34332 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +2900 +7DFC +2904 +3A44 +1154 +7CE4 +55F4 +7C44 +10E4 +FD54 +1054 +1008 +ENDCHAR +STARTCHAR uni861D +ENCODING 34333 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +0820 +1420 +223E +5D42 +8084 +7710 +5510 +7710 +2228 +2228 +5544 +8882 +ENDCHAR +STARTCHAR uni861E +ENCODING 34334 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +1420 +223E +DD24 +0044 +77C4 +5528 +7728 +0010 +2228 +5544 +8A82 +ENDCHAR +STARTCHAR uni861F +ENCODING 34335 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +01FC +7CA8 +45FC +4820 +51FC +4804 +45FC +4404 +55FC +4840 +42A4 +428A +447A +ENDCHAR +STARTCHAR uni8620 +ENCODING 34336 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1040 +57FC +5248 +5554 +7FFE +1000 +17FC +F404 +55F4 +5514 +55F4 +9404 +17FC +ENDCHAR +STARTCHAR uni8621 +ENCODING 34337 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7EFC +4284 +7EFC +4284 +7EFC +2448 +FFFE +0810 +1E20 +01E0 +7E18 +ENDCHAR +STARTCHAR uni8622 +ENCODING 34338 +BBX 15 15 1 -1 +BITMAP +0840 +FFFE +0840 +1040 +7E7E +2440 +FF7C +0004 +7E7C +4240 +7E7C +4240 +7E7C +4242 +463E +ENDCHAR +STARTCHAR uni8623 +ENCODING 34339 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +2220 +7F10 +227E +FF90 +0810 +7F10 +497C +7F10 +4910 +7F10 +22FE +4100 +ENDCHAR +STARTCHAR uni8624 +ENCODING 34340 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +2030 +47C8 +F484 +97FC +9A08 +93FC +F204 +93FE +942A +9A96 +F442 +080C +ENDCHAR +STARTCHAR uni8625 +ENCODING 34341 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +0280 +0C60 +37D8 +C006 +3BB8 +2AA8 +3BB8 +0000 +3FF8 +2488 +3FF8 +2488 +24B8 +ENDCHAR +STARTCHAR uni8626 +ENCODING 34342 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +3BB8 +2AA8 +3BB8 +2AA8 +ENDCHAR +STARTCHAR uni8627 +ENCODING 34343 +BBX 15 15 1 -1 +BITMAP +0840 +FFFE +0840 +407C +2040 +87FE +4442 +25F0 +0444 +E7FE +24E4 +2B58 +20B4 +5150 +8FFE +ENDCHAR +STARTCHAR uni8628 +ENCODING 34344 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +070C +F870 +5110 +2A24 +2078 +3E10 +4824 +FF7E +0812 +4954 +4F52 +7192 +0030 +ENDCHAR +STARTCHAR uni8629 +ENCODING 34345 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +2820 +7FA0 +807E +3E88 +2A48 +FFB0 +5248 +7F86 +0A00 +0428 +FFFC +0922 +711C +ENDCHAR +STARTCHAR uni862A +ENCODING 34346 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0920 +3FFC +2440 +3FF8 +2448 +3FF8 +2840 +2F78 +2844 +2F3C +4490 +5FFC +82A0 +1C9C +ENDCHAR +STARTCHAR uni862B +ENCODING 34347 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +27D0 +1510 +179E +84A0 +47A8 +5544 +17C4 +2000 +E7F8 +2528 +2528 +2FFE +ENDCHAR +STARTCHAR uni862C +ENCODING 34348 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1000 +7DFC +4404 +7CFC +4004 +7DFC +4400 +7DFE +1122 +5CFC +50A4 +5EAC +F020 +ENDCHAR +STARTCHAR uni862D +ENCODING 34349 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +7EFC +4284 +7EFC +4284 +7EFC +4104 +5FF4 +4544 +47C4 +4384 +5D74 +410C +ENDCHAR +STARTCHAR uni862E +ENCODING 34350 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3FF8 +2448 +3FF8 +0000 +3FFE +2204 +2A94 +2514 +2894 +2254 +4A84 +4514 +8888 +ENDCHAR +STARTCHAR uni862F +ENCODING 34351 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +23F0 +9210 +43F0 +0210 +3FFE +4200 +47FC +8924 +824C +3FF8 +2448 +FFFE +ENDCHAR +STARTCHAR uni8630 +ENCODING 34352 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +10F8 +2088 +44F8 +2888 +11FC +2D54 +F3FC +1200 +51FC +5484 +9478 +91CE +ENDCHAR +STARTCHAR uni8631 +ENCODING 34353 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1000 +93FE +5420 +FEFC +3884 +54FC +9284 +00FC +1484 +FEFC +2800 +4448 +8084 +ENDCHAR +STARTCHAR uni8632 +ENCODING 34354 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1FF0 +1110 +1FF0 +1110 +3FF8 +2AA8 +3EF8 +2AA8 +3EF8 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni8633 +ENCODING 34355 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +2210 +7F7C +2210 +FF90 +087E +7F00 +4910 +7F10 +497C +7F10 +227E +4100 +ENDCHAR +STARTCHAR uni8634 +ENCODING 34356 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1D70 +4924 +5D74 +4924 +5D74 +4924 +7FFC +0000 +7FFC +1010 +1FF0 +0820 +FFFE +ENDCHAR +STARTCHAR uni8635 +ENCODING 34357 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0094 +FDD2 +4812 +4950 +7BFE +4810 +49D4 +7954 +49D4 +4F48 +F9CA +0956 +0822 +ENDCHAR +STARTCHAR uni8636 +ENCODING 34358 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +0C20 +7040 +11FC +FD24 +39FC +5524 +93FC +FC24 +245A +685E +1090 +2912 +C60E +ENDCHAR +STARTCHAR uni8637 +ENCODING 34359 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +FFFE +1100 +13DE +5A52 +53DE +5250 +5BD2 +E40E +0FE0 +5444 +8382 +1C70 +E00E +ENDCHAR +STARTCHAR uni8638 +ENCODING 34360 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +FE44 +2848 +FEFE +AB90 +CEFC +8290 +FEFC +8290 +FEFE +2448 +4224 +8222 +ENDCHAR +STARTCHAR uni8639 +ENCODING 34361 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +27FE +2000 +27FC +A524 +B7FC +A840 +A75C +2040 +265E +21A4 +3E18 +23C6 +ENDCHAR +STARTCHAR uni863A +ENCODING 34362 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +1000 +0828 +7F24 +147E +4948 +55C8 +7F7E +0848 +7F7E +5148 +5548 +5D7E +4340 +ENDCHAR +STARTCHAR uni863B +ENCODING 34363 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7F3C +2A24 +3E42 +2A3C +FFA4 +4918 +7F66 +0840 +1F80 +0210 +3FF8 +1110 +2308 +ENDCHAR +STARTCHAR uni863C +ENCODING 34364 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +7FFE +4410 +7F7E +5634 +6552 +4240 +5E7C +4240 +5E7C +8240 +BE7E +0440 +ENDCHAR +STARTCHAR uni863D +ENCODING 34365 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1FF0 +1110 +1FF0 +1110 +3FF8 +2AA8 +3EF8 +2AA8 +3EF8 +0100 +7FFC +0920 +711C +ENDCHAR +STARTCHAR uni863E +ENCODING 34366 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +08A0 +2040 +27FC +2000 +23F8 +FAA8 +23F8 +2244 +2118 +2244 +38A8 +E190 +46A8 +00C6 +ENDCHAR +STARTCHAR uni863F +ENCODING 34367 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3FF8 +2448 +3FF8 +1024 +2448 +68FE +1590 +26FC +FA90 +54FC +9290 +90FE +ENDCHAR +STARTCHAR uni8640 +ENCODING 34368 +BBX 15 15 1 -1 +BITMAP +0810 +FFFE +0910 +FFFE +0440 +7ABC +2928 +D936 +7EFC +0280 +3EF8 +0280 +3EF8 +0280 +FFFE +ENDCHAR +STARTCHAR uni8641 +ENCODING 34369 +BBX 15 15 1 -1 +BITMAP +0440 +FC7E +0440 +FFFE +1100 +13BC +5EA4 +53BC +5EA2 +E39E +0840 +1FF0 +6840 +0780 +F87E +ENDCHAR +STARTCHAR uni8642 +ENCODING 34370 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +3FF8 +0100 +7FFE +4102 +9D74 +0040 +3EFC +2348 +3E30 +09CE +2E78 +2848 +7E78 +ENDCHAR +STARTCHAR uni8643 +ENCODING 34371 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +2294 +1292 +1550 +8FFE +4290 +5EF4 +1294 +2EF4 +E294 +2EE8 +228A +22F6 +2F22 +ENDCHAR +STARTCHAR uni8644 +ENCODING 34372 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +08A0 +21F8 +2288 +2070 +FBAE +A8F8 +A850 +FBFE +22A0 +2AFC +3B20 +CA78 +0420 +09FE +ENDCHAR +STARTCHAR uni8645 +ENCODING 34373 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0124 +3CA8 +25FC +2440 +3FFE +2488 +25FC +3EA2 +24F8 +24A0 +44FC +5404 +8AAC +ENDCHAR +STARTCHAR uni8646 +ENCODING 34374 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1FF0 +1110 +1FF0 +1110 +7FFC +4AA4 +7EFC +4AA4 +7EFC +2008 +7FFC +1110 +2308 +ENDCHAR +STARTCHAR uni8647 +ENCODING 34375 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +08A8 +7BFE +0888 +0BDE +7A52 +43DE +40A0 +79FE +0920 +0BFC +0D20 +09FC +5120 +21FE +ENDCHAR +STARTCHAR uni8648 +ENCODING 34376 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +0000 +7BDE +4892 +4912 +4BD2 +7A5E +03C0 +7A5E +4BD2 +4A52 +4BD2 +799E +4A52 +ENDCHAR +STARTCHAR uni8649 +ENCODING 34377 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +7F10 +007C +3E44 +227C +3E44 +007C +7F40 +557E +4940 +7F7E +4902 +49AA +4306 +ENDCHAR +STARTCHAR uni864A +ENCODING 34378 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +2108 +4FD2 +F03C +2388 +4812 +FBBE +0280 +ABAA +0100 +7FFC +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni864B +ENCODING 34379 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +77DC +4444 +77DC +4444 +FFFE +9292 +1C70 +1010 +1FF0 +0820 +1FF0 +642C +0860 +ENDCHAR +STARTCHAR uni864C +ENCODING 34380 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +4920 +2A3E +7F48 +4948 +5DA8 +6B10 +4928 +5FF6 +1290 +3EF8 +2288 +3EF8 +228A +3DFE +ENDCHAR +STARTCHAR uni864D +ENCODING 34381 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +03F8 +0200 +0200 +3FFC +2004 +2208 +2200 +223C +3FC0 +4200 +4202 +8202 +01FE +ENDCHAR +STARTCHAR uni864E +ENCODING 34382 +BBX 15 15 1 -1 +BITMAP +0200 +03F0 +0200 +7FFE +4404 +47F0 +7C00 +4404 +43FC +4000 +4440 +8440 +8442 +8842 +303E +ENDCHAR +STARTCHAR uni864F +ENCODING 34383 +BBX 14 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFC +2104 +2160 +2F88 +2108 +20F8 +2100 +2FF8 +2108 +2108 +4208 +4450 +9820 +ENDCHAR +STARTCHAR uni8650 +ENCODING 34384 +BBX 14 15 1 -1 +BITMAP +0200 +03F0 +0200 +3FFC +2408 +27E0 +3C00 +2408 +23F8 +2000 +2FF8 +4800 +4FF8 +8800 +0FF8 +ENDCHAR +STARTCHAR uni8651 +ENCODING 34385 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFC +2104 +2160 +2F88 +2108 +20F8 +2000 +2080 +2044 +2A42 +4A12 +5210 +81F0 +ENDCHAR +STARTCHAR uni8652 +ENCODING 34386 +BBX 15 16 0 -2 +BITMAP +0008 +007C +3F80 +2080 +20F8 +2080 +2FFE +2882 +28F0 +2F84 +287C +2800 +4BE0 +5222 +9422 +281E +ENDCHAR +STARTCHAR uni8653 +ENCODING 34387 +BBX 15 15 1 -1 +BITMAP +2020 +203C +2020 +FDFE +2502 +2520 +253C +25E0 +2522 +251E +2700 +2548 +4948 +424A +8086 +ENDCHAR +STARTCHAR uni8654 +ENCODING 34388 +BBX 15 15 1 -1 +BITMAP +0100 +01F8 +0100 +7FFE +4204 +5FF0 +4204 +41FC +4080 +7FFE +4410 +4220 +81C0 +8630 +380E +ENDCHAR +STARTCHAR uni8655 +ENCODING 34389 +BBX 15 15 1 -1 +BITMAP +0200 +03F0 +0200 +7FFC +4408 +47C0 +5C10 +47F0 +5000 +5E78 +5248 +6A4A +8486 +8B00 +30FE +ENDCHAR +STARTCHAR uni8656 +ENCODING 34390 +BBX 15 15 1 -1 +BITMAP +0100 +01FC +0100 +7FFE +4202 +43F4 +5E04 +41FC +4060 +4F90 +44A0 +7FFE +8080 +8080 +0380 +ENDCHAR +STARTCHAR uni8657 +ENCODING 34391 +BBX 15 15 1 -1 +BITMAP +0100 +01FC +0100 +3FFE +2202 +23F4 +3E04 +21FC +2040 +2780 +4400 +47FC +8420 +0420 +3FFE +ENDCHAR +STARTCHAR uni8658 +ENCODING 34392 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFE +2102 +21F0 +2F04 +20FC +2000 +27F8 +2408 +27F8 +2408 +47F8 +4408 +BFFE +ENDCHAR +STARTCHAR uni8659 +ENCODING 34393 +BBX 14 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFC +2104 +2160 +2F88 +2108 +20F8 +2100 +2088 +2A24 +2A44 +5380 +4608 +99F8 +ENDCHAR +STARTCHAR uni865A +ENCODING 34394 +BBX 14 15 1 -1 +BITMAP +0200 +03F0 +0200 +3FF8 +2408 +27D0 +3C00 +2408 +23F8 +2000 +5248 +4A48 +8A50 +0240 +3FFC +ENDCHAR +STARTCHAR uni865B +ENCODING 34395 +BBX 15 15 1 -1 +BITMAP +0200 +03F8 +0200 +3FFC +2204 +23F0 +3E00 +2204 +21FC +2000 +5224 +5224 +9E3C +0220 +3FFE +ENDCHAR +STARTCHAR uni865C +ENCODING 34396 +BBX 15 15 1 -1 +BITMAP +0200 +03F0 +0200 +3FFC +2202 +2FFE +2888 +2FF8 +2888 +2FF8 +4080 +4FFC +8104 +0604 +181C +ENDCHAR +STARTCHAR uni865D +ENCODING 34397 +BBX 15 16 0 -2 +BITMAP +0820 +0F20 +0820 +7F7E +496A +4EAA +782A +492A +474A +4092 +4E22 +4A54 +4A0A +5202 +91FE +2000 +ENDCHAR +STARTCHAR uni865E +ENCODING 34398 +BBX 15 15 1 -1 +BITMAP +0200 +03F8 +0200 +7FFC +4204 +5FF0 +4204 +47FC +5410 +5FF8 +4008 +7FFE +8200 +8C30 +300C +ENDCHAR +STARTCHAR uni865F +ENCODING 34399 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +443C +4420 +7DFE +0102 +FD20 +213C +21E2 +7D3E +4500 +0528 +0528 +064A +3886 +ENDCHAR +STARTCHAR uni8660 +ENCODING 34400 +BBX 15 16 0 -2 +BITMAP +2010 +101E +0010 +FEFE +0092 +289C +44F0 +8292 +048E +4480 +28B8 +10A8 +28A8 +452A +852A +0246 +ENDCHAR +STARTCHAR uni8661 +ENCODING 34401 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFE +2102 +21F0 +2F04 +20FC +2000 +2120 +2924 +2528 +2120 +5FFE +4210 +8408 +ENDCHAR +STARTCHAR uni8662 +ENCODING 34402 +BBX 15 15 1 -1 +BITMAP +0C20 +703C +4020 +45FE +9302 +8920 +893C +05E0 +FF22 +051E +4500 +2548 +2548 +064A +1C86 +ENDCHAR +STARTCHAR uni8663 +ENCODING 34403 +BBX 15 16 0 -2 +BITMAP +0810 +0C1E +EA10 +0AFE +0892 +FE9C +28F0 +2892 +B88E +A880 +AAB8 +AAA8 +B6A8 +C32A +812A +0246 +ENDCHAR +STARTCHAR uni8664 +ENCODING 34404 +BBX 15 16 0 -2 +BITMAP +1010 +1E1E +1010 +7EFE +5292 +5C9C +70F0 +5292 +4E8E +4080 +5CB8 +54A8 +54A8 +972A +952A +2246 +ENDCHAR +STARTCHAR uni8665 +ENCODING 34405 +BBX 15 16 0 -2 +BITMAP +1028 +1E24 +102E +7EF0 +5228 +5C12 +702A +52D6 +4E28 +402E +5CF0 +5424 +5428 +5612 +942A +20C6 +ENDCHAR +STARTCHAR uni8666 +ENCODING 34406 +BBX 15 16 0 -2 +BITMAP +2810 +241E +2E10 +F0FE +2892 +129C +2AF0 +D692 +288E +2E80 +F0B8 +24A8 +28A8 +12AA +2B2A +C646 +ENDCHAR +STARTCHAR uni8667 +ENCODING 34407 +BBX 15 15 1 -1 +BITMAP +0800 +083C +0F10 +0810 +7FFE +48A0 +4E20 +78A0 +4FFC +4944 +5F84 +7204 +5F84 +9204 +9F98 +ENDCHAR +STARTCHAR uni8668 +ENCODING 34408 +BBX 15 16 0 -2 +BITMAP +0802 +0F82 +0804 +7FC8 +4850 +4F02 +7882 +4784 +4008 +4890 +7DE2 +4882 +5DC4 +6AA8 +4890 +88A0 +ENDCHAR +STARTCHAR uni8669 +ENCODING 34409 +BBX 15 16 0 -2 +BITMAP +1020 +923E +5220 +55FE +1122 +7D38 +45E0 +7D22 +451E +7D00 +1178 +5948 +5548 +964A +524A +2486 +ENDCHAR +STARTCHAR uni866A +ENCODING 34410 +BBX 15 16 0 -2 +BITMAP +2120 +213C +3964 +2318 +FA66 +AABE +B2AA +E6BE +AAAA +9ABE +8288 +BABE +AA88 +AE7E +2A00 +42AA +ENDCHAR +STARTCHAR uni866B +ENCODING 34411 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +3FF8 +2108 +2108 +2108 +2108 +3FF8 +0100 +0110 +0108 +013C +03C2 +FC02 +ENDCHAR +STARTCHAR uni866C +ENCODING 34412 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FE40 +9240 +9240 +9240 +9240 +FE40 +1040 +1240 +1240 +1D42 +E142 +003E +ENDCHAR +STARTCHAR uni866D +ENCODING 34413 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +08FE +7F22 +4922 +4922 +4922 +4922 +7F22 +4822 +0822 +0A42 +0F42 +F182 +4114 +0208 +ENDCHAR +STARTCHAR uni866E +ENCODING 34414 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +10F0 +7C90 +5490 +5490 +5490 +5490 +7C90 +5090 +1090 +1492 +1C92 +E512 +410E +0200 +ENDCHAR +STARTCHAR uni866F +ENCODING 34415 +BBX 14 15 1 -1 +BITMAP +1004 +1004 +1044 +7C44 +5444 +5444 +5444 +5444 +7C44 +1044 +147C +15C4 +1C04 +E204 +0004 +ENDCHAR +STARTCHAR uni8670 +ENCODING 34416 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +08FE +7F10 +4910 +4910 +4910 +4910 +7F10 +4810 +0810 +0A10 +0F10 +F110 +4050 +0020 +ENDCHAR +STARTCHAR uni8671 +ENCODING 34417 +BBX 14 14 2 -1 +BITMAP +FFE0 +0020 +03A0 +3C20 +0420 +3FA0 +24A0 +24A0 +3FA0 +0420 +0490 +07D4 +7854 +0008 +ENDCHAR +STARTCHAR uni8672 +ENCODING 34418 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +7F20 +4920 +4930 +4928 +4924 +7F22 +4822 +0820 +0A20 +0F20 +F120 +4020 +0020 +ENDCHAR +STARTCHAR uni8673 +ENCODING 34419 +BBX 14 16 0 -2 +BITMAP +0820 +0820 +0820 +7F7C +4944 +4984 +4904 +4944 +7F24 +4814 +0814 +0A04 +0F04 +F104 +4028 +0010 +ENDCHAR +STARTCHAR uni8674 +ENCODING 34420 +BBX 15 15 0 -1 +BITMAP +1008 +101C +10E0 +7C20 +5420 +5420 +5420 +543E +7DE0 +5020 +1020 +1422 +1E22 +E222 +401E +ENDCHAR +STARTCHAR uni8675 +ENCODING 34421 +BBX 15 15 1 -1 +BITMAP +2020 +2120 +2120 +F920 +A93C +A964 +A9A4 +AF24 +F924 +2124 +292C +2920 +3502 +C502 +00FE +ENDCHAR +STARTCHAR uni8676 +ENCODING 34422 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +7C20 +5420 +5420 +5420 +57FE +7C20 +5020 +1020 +1420 +1E20 +E220 +40A0 +0040 +ENDCHAR +STARTCHAR uni8677 +ENCODING 34423 +BBX 15 15 1 -1 +BITMAP +1000 +10F8 +1020 +7C20 +5420 +5420 +5420 +55FE +7C20 +1020 +1420 +1420 +1C20 +E220 +0020 +ENDCHAR +STARTCHAR uni8678 +ENCODING 34424 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1004 +7C08 +5410 +5420 +5420 +57FE +7C20 +5020 +1020 +1420 +1E20 +E220 +40A0 +0040 +ENDCHAR +STARTCHAR uni8679 +ENCODING 34425 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +10FC +7C20 +5420 +5420 +5420 +5420 +7C20 +1020 +1420 +1420 +1620 +1A20 +E1FE +ENDCHAR +STARTCHAR uni867A +ENCODING 34426 +BBX 15 15 1 -1 +BITMAP +0040 +FC40 +2840 +2BF8 +2A48 +2A48 +2A48 +2BF8 +2840 +2848 +2858 +2864 +4B82 +4802 +87FE +ENDCHAR +STARTCHAR uni867B +ENCODING 34427 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +7DFE +5500 +5500 +5500 +7D00 +1100 +1500 +1500 +1D00 +3300 +C100 +00FC +ENDCHAR +STARTCHAR uni867C +ENCODING 34428 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +1080 +7CFE +5500 +5600 +54FC +5408 +7C10 +5020 +1040 +1480 +1D02 +E502 +40FE +ENDCHAR +STARTCHAR uni867D +ENCODING 34429 +BBX 13 15 1 -2 +BITMAP +3FE0 +2020 +2020 +3FE0 +0200 +0200 +7FF0 +4210 +4210 +7FF0 +0240 +0220 +03F0 +FE08 +4008 +ENDCHAR +STARTCHAR uni867E +ENCODING 34430 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1040 +7C40 +5440 +5440 +5450 +5448 +7C44 +5044 +1040 +1440 +1E40 +E240 +4040 +0040 +ENDCHAR +STARTCHAR uni867F +ENCODING 34431 +BBX 15 15 0 -2 +BITMAP +FFFE +0400 +07F0 +0810 +1010 +20A0 +4140 +3FF8 +2108 +2108 +3FF8 +0100 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni8680 +ENCODING 34432 +BBX 15 15 0 -1 +BITMAP +2020 +2020 +2020 +3DFC +4524 +4924 +A124 +2124 +21FC +2124 +2020 +2028 +2824 +33FE +2102 +ENDCHAR +STARTCHAR uni8681 +ENCODING 34433 +BBX 15 16 0 -2 +BITMAP +1040 +1024 +1124 +7D04 +5504 +5488 +5488 +5488 +7C50 +5050 +1020 +1420 +1C50 +E488 +4104 +0602 +ENDCHAR +STARTCHAR uni8682 +ENCODING 34434 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1008 +7C08 +5488 +5488 +5488 +54FE +7C02 +5002 +1002 +15FA +1C02 +E402 +4014 +0008 +ENDCHAR +STARTCHAR uni8683 +ENCODING 34435 +BBX 13 16 1 -2 +BITMAP +0800 +1080 +3F00 +0610 +1820 +7FC0 +0180 +0E00 +F200 +3FE0 +2220 +2220 +3FE0 +0210 +FFF8 +4008 +ENDCHAR +STARTCHAR uni8684 +ENCODING 34436 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1020 +7DFE +5440 +5440 +5440 +547C +7C44 +5044 +1044 +1444 +1E84 +E284 +4128 +0210 +ENDCHAR +STARTCHAR uni8685 +ENCODING 34437 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1100 +7D00 +5578 +5548 +5548 +5548 +7D48 +5168 +1150 +1542 +1D42 +E542 +423E +0400 +ENDCHAR +STARTCHAR uni8686 +ENCODING 34438 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +11FC +7D24 +5524 +5524 +5524 +5524 +7DFC +5100 +1100 +1500 +1D02 +E502 +40FE +ENDCHAR +STARTCHAR uni8687 +ENCODING 34439 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +1084 +7C84 +5484 +5484 +54FC +5490 +7C90 +1090 +1488 +1488 +1C84 +F304 +0102 +ENDCHAR +STARTCHAR uni8688 +ENCODING 34440 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1088 +7C88 +5488 +5488 +5488 +57FE +7C88 +5088 +1088 +1488 +1C88 +E508 +4108 +0208 +ENDCHAR +STARTCHAR uni8689 +ENCODING 34441 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0820 +0440 +0380 +1C70 +E10E +3FF8 +2108 +2108 +3FF8 +0108 +013C +FFC2 +ENDCHAR +STARTCHAR uni868A +ENCODING 34442 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +FBFE +A888 +A888 +A888 +A888 +F850 +2050 +2020 +2820 +3850 +C488 +0306 +ENDCHAR +STARTCHAR uni868B +ENCODING 34443 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +7DFE +5522 +5522 +5552 +5552 +7D8A +1106 +1502 +1502 +1B02 +E302 +010E +ENDCHAR +STARTCHAR uni868C +ENCODING 34444 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +7DFC +5420 +5420 +55FC +5420 +7C20 +1020 +17FE +1420 +1A20 +E220 +0020 +ENDCHAR +STARTCHAR uni868D +ENCODING 34445 +BBX 15 15 1 -1 +BITMAP +2220 +2220 +2220 +FA24 +AA28 +ABB0 +AA20 +AA20 +FA20 +2220 +2A20 +2A20 +3620 +C3A2 +061E +ENDCHAR +STARTCHAR uni868E +ENCODING 34446 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +10FC +7C84 +5484 +5484 +5484 +5484 +7CFC +5084 +1084 +1484 +1E84 +E284 +40FC +0084 +ENDCHAR +STARTCHAR uni868F +ENCODING 34447 +BBX 14 16 0 -2 +BITMAP +1000 +10FC +1084 +7C84 +5484 +54FC +5484 +5484 +7C84 +50FC +1084 +1484 +1E84 +E284 +4114 +0208 +ENDCHAR +STARTCHAR uni8690 +ENCODING 34448 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1080 +7CFC +5504 +5604 +5484 +5444 +7C44 +5014 +1024 +1444 +1D84 +E404 +4028 +0010 +ENDCHAR +STARTCHAR uni8691 +ENCODING 34449 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +7FFE +5420 +5420 +55FC +5484 +7C88 +1048 +1450 +1420 +1C50 +E288 +0106 +ENDCHAR +STARTCHAR uni8692 +ENCODING 34450 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +7C84 +54A4 +5494 +5494 +5484 +7DFE +5084 +1084 +1484 +1C84 +E504 +4114 +0208 +ENDCHAR +STARTCHAR uni8693 +ENCODING 34451 +BBX 14 15 1 -1 +BITMAP +1004 +11E4 +1024 +7C24 +5424 +55E4 +5504 +5504 +7DE4 +1024 +1424 +1424 +1A44 +E244 +0184 +ENDCHAR +STARTCHAR uni8694 +ENCODING 34452 +BBX 15 16 0 -2 +BITMAP +1004 +101E +11F0 +7D10 +5510 +5510 +5510 +55FE +7D10 +5110 +1110 +1508 +1D0A +E54A +4186 +0102 +ENDCHAR +STARTCHAR uni8695 +ENCODING 34453 +BBX 13 14 2 -1 +BITMAP +FFF8 +0200 +7FF0 +0500 +0880 +3260 +C218 +3FE0 +2220 +2220 +3FE0 +0210 +03E8 +FC08 +ENDCHAR +STARTCHAR uni8696 +ENCODING 34454 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +7C00 +5400 +5400 +57FE +5490 +7C90 +5090 +1090 +1490 +1D12 +E512 +420E +0400 +ENDCHAR +STARTCHAR uni8697 +ENCODING 34455 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +7DFC +5424 +5424 +5424 +5424 +7DFE +5020 +1050 +1450 +1E88 +E288 +4104 +0202 +ENDCHAR +STARTCHAR uni8698 +ENCODING 34456 +BBX 15 15 1 -1 +BITMAP +2028 +2028 +2024 +F820 +ABFE +A820 +A820 +A830 +F850 +2050 +2850 +2890 +3492 +C512 +020E +ENDCHAR +STARTCHAR uni8699 +ENCODING 34457 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +7C50 +5488 +5544 +5622 +5420 +7C00 +51FC +1004 +1408 +1E08 +E210 +4010 +0020 +ENDCHAR +STARTCHAR uni869A +ENCODING 34458 +BBX 15 16 0 -2 +BITMAP +1008 +101C +10E0 +7C80 +5480 +5480 +54FE +5488 +7C88 +5088 +1088 +1488 +1D08 +E508 +4208 +0408 +ENDCHAR +STARTCHAR uni869B +ENCODING 34459 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1020 +7C20 +55FC +5524 +5524 +5524 +7D24 +51FC +1124 +1420 +1E20 +E220 +4020 +0020 +ENDCHAR +STARTCHAR uni869C +ENCODING 34460 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2088 +F888 +A888 +A888 +A888 +ABFE +F848 +2048 +2848 +2888 +3888 +E508 +0238 +ENDCHAR +STARTCHAR uni869D +ENCODING 34461 +BBX 15 15 1 -1 +BITMAP +201C +23E0 +2040 +F840 +A87C +ABC0 +A840 +A840 +F87E +23C0 +2840 +2840 +3840 +C442 +003E +ENDCHAR +STARTCHAR uni869E +ENCODING 34462 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +7C20 +55FE +5420 +5470 +5470 +7CA8 +50A8 +1124 +1524 +1E22 +E420 +4020 +0020 +ENDCHAR +STARTCHAR uni869F +ENCODING 34463 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +11FC +7C20 +5420 +5420 +5420 +5420 +7DFC +5020 +1020 +1420 +1C20 +E420 +43FE +ENDCHAR +STARTCHAR uni86A0 +ENCODING 34464 +BBX 15 16 0 -2 +BITMAP +0440 +0820 +3018 +DFE6 +0420 +0420 +08A0 +1040 +2100 +1FF0 +1110 +1110 +1FF0 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni86A1 +ENCODING 34465 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +1090 +7C88 +5508 +5504 +5604 +55FA +7C88 +5088 +1088 +1488 +1D08 +E508 +4228 +0410 +ENDCHAR +STARTCHAR uni86A2 +ENCODING 34466 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1000 +7DFC +5400 +5400 +54F0 +5490 +7C90 +5090 +1090 +1492 +1C92 +E512 +410E +0200 +ENDCHAR +STARTCHAR uni86A3 +ENCODING 34467 +BBX 15 15 1 -1 +BITMAP +1048 +1048 +1048 +7C84 +5484 +5484 +5522 +5420 +7C20 +1028 +1428 +1444 +1A44 +E25C +01E2 +ENDCHAR +STARTCHAR uni86A4 +ENCODING 34468 +BBX 15 14 1 -1 +BITMAP +3FF0 +0920 +46C0 +2180 +06C0 +1930 +E10E +1FF0 +1110 +1110 +1FF0 +0108 +01F4 +FF02 +ENDCHAR +STARTCHAR uni86A5 +ENCODING 34469 +BBX 15 16 0 -2 +BITMAP +1010 +1088 +1084 +7C84 +5502 +5602 +5488 +5488 +7C88 +5050 +1050 +1420 +1E50 +E288 +4104 +0202 +ENDCHAR +STARTCHAR uni86A6 +ENCODING 34470 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +7C84 +5484 +55FE +5484 +5484 +7C84 +51FE +1084 +1484 +1E84 +E284 +4094 +0088 +ENDCHAR +STARTCHAR uni86A7 +ENCODING 34471 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +7C50 +5488 +5504 +5602 +5488 +7C88 +5088 +1088 +1488 +1C88 +E508 +4108 +0208 +ENDCHAR +STARTCHAR uni86A8 +ENCODING 34472 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +F9FC +A820 +A820 +A820 +A820 +FBFE +2020 +2850 +2850 +3888 +E504 +0202 +ENDCHAR +STARTCHAR uni86A9 +ENCODING 34473 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0400 +FFFE +0100 +3FF8 +2108 +2108 +3FF8 +0110 +0108 +01F4 +FE04 +ENDCHAR +STARTCHAR uni86AA +ENCODING 34474 +BBX 15 15 1 -1 +BITMAP +1008 +1088 +1048 +7C28 +5408 +5508 +5488 +5448 +7C08 +100E +1478 +1588 +1A08 +E208 +0008 +ENDCHAR +STARTCHAR uni86AB +ENCODING 34475 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +10FC +7C84 +5504 +55F4 +5694 +5494 +7C94 +10F4 +1484 +1498 +1A82 +E282 +007E +ENDCHAR +STARTCHAR uni86AC +ENCODING 34476 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +7D04 +5524 +5524 +5524 +5524 +7D24 +5154 +1050 +1490 +1C90 +E512 +4212 +040E +ENDCHAR +STARTCHAR uni86AD +ENCODING 34477 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +7D04 +5504 +55FC +5500 +5540 +7D44 +5148 +1170 +1540 +1D42 +E642 +423E +0400 +ENDCHAR +STARTCHAR uni86AE +ENCODING 34478 +BBX 15 16 0 -2 +BITMAP +1050 +1054 +1052 +7C92 +5490 +559E +55F0 +5690 +7C90 +5090 +1090 +1490 +1E8A +E28A +4086 +0082 +ENDCHAR +STARTCHAR uni86AF +ENCODING 34479 +BBX 15 15 1 -1 +BITMAP +1018 +10E0 +1080 +7C80 +5480 +5480 +54FC +5488 +7C88 +1088 +1488 +1488 +1A88 +E288 +03FE +ENDCHAR +STARTCHAR uni86B0 +ENCODING 34480 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +1020 +7C20 +55FC +5524 +5524 +5524 +7D24 +11FC +1524 +1524 +1B24 +E324 +01FC +ENDCHAR +STARTCHAR uni86B1 +ENCODING 34481 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +F9FE +A940 +AA40 +A840 +A87C +F840 +2040 +2840 +287C +3840 +E440 +0040 +ENDCHAR +STARTCHAR uni86B2 +ENCODING 34482 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +7C20 +5524 +54A4 +54A8 +5420 +7FFE +5020 +1020 +1420 +1E20 +E220 +4020 +0020 +ENDCHAR +STARTCHAR uni86B3 +ENCODING 34483 +BBX 15 15 1 -1 +BITMAP +200C +21F0 +2110 +F910 +A910 +A910 +A9FE +A910 +F910 +2110 +2910 +29C8 +3B0A +E40A +03E4 +ENDCHAR +STARTCHAR uni86B4 +ENCODING 34484 +BBX 15 16 0 -2 +BITMAP +2010 +2090 +2090 +F910 +A97E +AA52 +AB92 +A892 +F912 +A112 +2252 +2BD2 +3862 +E822 +404A +0084 +ENDCHAR +STARTCHAR uni86B5 +ENCODING 34485 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FE +7C08 +5408 +55E8 +5528 +5528 +7D28 +5128 +11E8 +1528 +1C08 +E408 +4028 +0010 +ENDCHAR +STARTCHAR uni86B6 +ENCODING 34486 +BBX 15 15 1 -1 +BITMAP +1088 +1088 +1088 +7C88 +57FE +5488 +5488 +5488 +7C88 +10F8 +1488 +1488 +1A88 +E288 +00F8 +ENDCHAR +STARTCHAR uni86B7 +ENCODING 34487 +BBX 15 15 0 -1 +BITMAP +1000 +10FE +1080 +7C80 +5480 +54FC +5484 +5484 +7C84 +5084 +10FC +1480 +1E80 +E280 +40FE +ENDCHAR +STARTCHAR uni86B8 +ENCODING 34488 +BBX 15 15 1 -1 +BITMAP +201C +21E0 +2100 +F900 +A9FE +A910 +A910 +A970 +F91C +2112 +2A10 +2A10 +3410 +C410 +0010 +ENDCHAR +STARTCHAR uni86B9 +ENCODING 34489 +BBX 15 16 0 -2 +BITMAP +1044 +1044 +1044 +7C84 +54BE +5584 +5684 +54A4 +7C94 +5094 +1084 +1484 +1E84 +E284 +4094 +0088 +ENDCHAR +STARTCHAR uni86BA +ENCODING 34490 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +7DFC +5524 +5524 +55FC +5524 +7D24 +5124 +17FE +1504 +1D04 +E504 +4114 +0108 +ENDCHAR +STARTCHAR uni86BB +ENCODING 34491 +BBX 14 16 1 -2 +BITMAP +0840 +0840 +FF40 +1C40 +2A44 +4944 +883C +0200 +3FE0 +2220 +2220 +3FE0 +2200 +0210 +FFF8 +4008 +ENDCHAR +STARTCHAR uni86BC +ENCODING 34492 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +1080 +7DFC +5504 +5604 +55E4 +5524 +7D24 +5124 +1124 +15E4 +1D24 +E404 +4028 +0010 +ENDCHAR +STARTCHAR uni86BD +ENCODING 34493 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +1010 +7C10 +5420 +5420 +5468 +54A4 +7D22 +5222 +1020 +1420 +1C20 +E400 +43FE +ENDCHAR +STARTCHAR uni86BE +ENCODING 34494 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +1010 +7DFE +5512 +5514 +5510 +55FC +7D44 +5144 +1128 +1528 +1D10 +E628 +4244 +0482 +ENDCHAR +STARTCHAR uni86BF +ENCODING 34495 +BBX 15 15 0 -1 +BITMAP +1020 +1010 +1010 +7DFE +5420 +5420 +5444 +5484 +7DF8 +5010 +1020 +1444 +1C82 +E5FE +4082 +ENDCHAR +STARTCHAR uni86C0 +ENCODING 34496 +BBX 15 15 0 -1 +BITMAP +1040 +1020 +1000 +7DFE +5420 +5420 +5420 +5420 +7DFC +5020 +1020 +1420 +1C20 +E420 +43FE +ENDCHAR +STARTCHAR uni86C1 +ENCODING 34497 +BBX 14 15 1 -1 +BITMAP +2000 +27FC +2084 +F884 +A884 +A904 +A904 +AA38 +F800 +23FC +2A04 +2A04 +3A04 +E604 +03FC +ENDCHAR +STARTCHAR uni86C2 +ENCODING 34498 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +1048 +7C40 +55FE +5440 +5440 +547C +7CA4 +50A4 +10A8 +1528 +1D10 +E628 +4044 +0082 +ENDCHAR +STARTCHAR uni86C3 +ENCODING 34499 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2040 +F840 +ABFC +AA44 +AA44 +AAC4 +FAA4 +22A4 +2B14 +2A04 +3A04 +E604 +021C +ENDCHAR +STARTCHAR uni86C4 +ENCODING 34500 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +7C20 +57FE +5420 +5420 +5420 +7C20 +11FC +1504 +1504 +1B04 +E304 +01FC +ENDCHAR +STARTCHAR uni86C5 +ENCODING 34501 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +7C20 +543E +5420 +5420 +5420 +7DFC +5104 +1104 +1504 +1D04 +E504 +41FC +0104 +ENDCHAR +STARTCHAR uni86C6 +ENCODING 34502 +BBX 15 15 1 -1 +BITMAP +1000 +10F8 +1088 +7C88 +5488 +54F8 +5488 +5488 +7C88 +10F8 +1488 +1488 +1A88 +E288 +03FE +ENDCHAR +STARTCHAR uni86C7 +ENCODING 34503 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +10FE +FE82 +9282 +9240 +9240 +924C +FE70 +1040 +1240 +1242 +1742 +1942 +E03E +ENDCHAR +STARTCHAR uni86C8 +ENCODING 34504 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1120 +7D20 +55FC +5520 +5620 +5420 +7DFE +5020 +1050 +1450 +1E88 +E288 +4104 +0202 +ENDCHAR +STARTCHAR uni86C9 +ENCODING 34505 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1050 +7C88 +5706 +54F8 +5400 +5400 +7DFC +1044 +1444 +1444 +1A5C +E240 +0040 +ENDCHAR +STARTCHAR uni86CA +ENCODING 34506 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +3FF8 +2108 +2108 +3FF8 +0100 +0108 +7FFC +0004 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni86CB +ENCODING 34507 +BBX 15 14 1 -1 +BITMAP +FFFE +0102 +21F8 +3100 +4F00 +81FE +0100 +3FF8 +2108 +2108 +3FF8 +0108 +01F4 +FF02 +ENDCHAR +STARTCHAR uni86CC +ENCODING 34508 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11F0 +7D50 +5550 +5550 +5550 +5550 +7D50 +5148 +1148 +1568 +1D54 +E674 +4252 +0400 +ENDCHAR +STARTCHAR uni86CD +ENCODING 34509 +BBX 13 15 2 -1 +BITMAP +4410 +2210 +0020 +FFF8 +8208 +8208 +3FE0 +2220 +2220 +2220 +3FE0 +0220 +0230 +03C8 +FE08 +ENDCHAR +STARTCHAR uni86CE +ENCODING 34510 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2200 +2200 +FBFE +AA40 +AA40 +AA7C +FA44 +2244 +2A44 +2A44 +3A84 +C484 +0518 +ENDCHAR +STARTCHAR uni86CF +ENCODING 34511 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +1084 +7C88 +5450 +5420 +5450 +5488 +7F26 +5020 +11FC +1420 +1C20 +E420 +43FE +ENDCHAR +STARTCHAR uni86D0 +ENCODING 34512 +BBX 14 16 0 -2 +BITMAP +1050 +1050 +1050 +7C50 +55FC +5554 +5554 +5554 +7D54 +51FC +1154 +1554 +1D54 +E554 +41FC +0104 +ENDCHAR +STARTCHAR uni86D1 +ENCODING 34513 +BBX 15 15 1 -1 +BITMAP +2080 +2090 +2090 +F928 +ABC4 +A800 +A820 +A920 +F9FC +2220 +2820 +2BFE +3420 +C420 +0020 +ENDCHAR +STARTCHAR uni86D2 +ENCODING 34514 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1078 +7C88 +5550 +5420 +5450 +5488 +7D06 +50F8 +1088 +1488 +1E88 +E288 +40F8 +0088 +ENDCHAR +STARTCHAR uni86D3 +ENCODING 34515 +BBX 15 16 0 -2 +BITMAP +0820 +0828 +7F24 +0820 +FFFE +0020 +0824 +7F24 +4924 +4928 +7F28 +4810 +0912 +0FAA +F046 +4082 +ENDCHAR +STARTCHAR uni86D4 +ENCODING 34516 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1102 +7D02 +5502 +557A +554A +554A +7D4A +114A +157A +1502 +1B02 +E302 +01FE +ENDCHAR +STARTCHAR uni86D5 +ENCODING 34517 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +27FE +F880 +A880 +A9FC +A904 +AB04 +FDFC +2104 +2904 +29FC +3904 +E504 +011C +ENDCHAR +STARTCHAR uni86D6 +ENCODING 34518 +BBX 15 16 0 -2 +BITMAP +1090 +1088 +1080 +7DFE +54A0 +54A8 +54B0 +54A4 +7CA8 +50B0 +1124 +152A +1D32 +E622 +42DE +0400 +ENDCHAR +STARTCHAR uni86D7 +ENCODING 34519 +BBX 15 15 1 -1 +BITMAP +0200 +3FF8 +2008 +3FF8 +2000 +3FF8 +2008 +3FF8 +0100 +3FF8 +2108 +3FF8 +0104 +013A +FFC2 +ENDCHAR +STARTCHAR uni86D8 +ENCODING 34520 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +7C00 +57FE +5420 +5420 +55FC +7C20 +5020 +13FE +1420 +1E20 +E220 +4020 +0020 +ENDCHAR +STARTCHAR uni86D9 +ENCODING 34521 +BBX 15 14 1 0 +BITMAP +2020 +2020 +21FC +F820 +A820 +A820 +ABFE +A820 +F820 +21FC +2820 +2820 +3C20 +C7FE +ENDCHAR +STARTCHAR uni86DA +ENCODING 34522 +BBX 15 16 0 -2 +BITMAP +2002 +2002 +23E2 +F90A +A90A +A9EA +A92A +AA2A +FB2A +A2AA +244A +284A +3882 +E902 +420A +0404 +ENDCHAR +STARTCHAR uni86DB +ENCODING 34523 +BBX 15 15 1 -1 +BITMAP +1020 +10A0 +10A0 +7DFC +5520 +5620 +5420 +57FE +7CA8 +10A8 +14A8 +1524 +1B24 +E222 +0020 +ENDCHAR +STARTCHAR uni86DC +ENCODING 34524 +BBX 15 16 0 -2 +BITMAP +2100 +217C +2124 +FA24 +AA24 +AEFE +AA24 +AA24 +FA24 +A27C +2224 +2A20 +3A20 +EA20 +4240 +0280 +ENDCHAR +STARTCHAR uni86DD +ENCODING 34525 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +1108 +7D08 +55F8 +5508 +5508 +55F8 +7D44 +5148 +1130 +1520 +1D10 +E548 +4186 +0100 +ENDCHAR +STARTCHAR uni86DE +ENCODING 34526 +BBX 15 15 1 -1 +BITMAP +100C +11F0 +1020 +7C20 +5420 +57FE +5420 +5420 +7C20 +11FC +1504 +1504 +1B04 +E304 +01FC +ENDCHAR +STARTCHAR uni86DF +ENCODING 34527 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +7FFE +5488 +5504 +5602 +5488 +7C88 +1050 +1420 +1420 +1A50 +E288 +0306 +ENDCHAR +STARTCHAR uni86E0 +ENCODING 34528 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +21FC +F844 +A884 +A884 +A928 +AA10 +F908 +A3DE +214A +294A +394A +EA52 +435A +04A4 +ENDCHAR +STARTCHAR uni86E1 +ENCODING 34529 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +1042 +7C42 +5652 +554A +554A +5442 +7CC6 +514A +1252 +1442 +1C42 +E442 +414A +0084 +ENDCHAR +STARTCHAR uni86E2 +ENCODING 34530 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +7C00 +55FE +5488 +5488 +5488 +7C88 +53FE +1088 +1488 +1D08 +E508 +4208 +0408 +ENDCHAR +STARTCHAR uni86E3 +ENCODING 34531 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +FBFE +A820 +A820 +A820 +A9FC +F800 +21FC +2904 +2904 +3904 +C504 +01FC +ENDCHAR +STARTCHAR uni86E4 +ENCODING 34532 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2050 +F888 +A904 +AA02 +A8F8 +A800 +F800 +21FC +2904 +2904 +3504 +E504 +01FC +ENDCHAR +STARTCHAR uni86E5 +ENCODING 34533 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +107C +7C84 +5548 +5430 +5420 +5448 +7D90 +503E +1042 +15A4 +1E18 +E210 +4060 +0180 +ENDCHAR +STARTCHAR uni86E6 +ENCODING 34534 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F840 +ABFC +A844 +ABFC +AA40 +FBFE +2242 +28A2 +28A6 +3910 +E508 +0204 +ENDCHAR +STARTCHAR uni86E7 +ENCODING 34535 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1104 +7D04 +5504 +55AC +5554 +5554 +7D54 +5154 +11AC +1504 +1D04 +E504 +4114 +0108 +ENDCHAR +STARTCHAR uni86E8 +ENCODING 34536 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1020 +7C20 +5440 +54FC +5484 +5484 +7C84 +50FC +1084 +1484 +1E84 +E284 +40FC +0084 +ENDCHAR +STARTCHAR uni86E9 +ENCODING 34537 +BBX 15 14 1 -1 +BITMAP +7DF0 +1110 +1190 +1152 +1E12 +E40E +0100 +3FF8 +2108 +2108 +3FF8 +0104 +01FC +FE02 +ENDCHAR +STARTCHAR uni86EA +ENCODING 34538 +BBX 13 16 1 -2 +BITMAP +1000 +1000 +FEF8 +1048 +7C48 +1088 +FEA8 +1110 +1200 +3FE0 +2220 +2220 +3FE0 +0210 +FFF8 +4008 +ENDCHAR +STARTCHAR uni86EB +ENCODING 34539 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10FC +7D04 +5608 +55FE +5500 +557C +7D44 +5144 +1154 +1548 +1D42 +E542 +413E +0200 +ENDCHAR +STARTCHAR uni86EC +ENCODING 34540 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +7FFC +0440 +0440 +FFFE +0820 +1110 +3FF8 +D116 +1110 +1FF0 +0108 +01F8 +7E04 +ENDCHAR +STARTCHAR uni86ED +ENCODING 34541 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1040 +7C50 +5488 +549C +55E4 +5400 +7C20 +1020 +15FC +1420 +1E20 +E220 +01FE +ENDCHAR +STARTCHAR uni86EE +ENCODING 34542 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +2448 +4844 +90C2 +0100 +3FF8 +2108 +2108 +3FF8 +0108 +01F4 +FF02 +ENDCHAR +STARTCHAR uni86EF +ENCODING 34543 +BBX 15 15 1 -1 +BITMAP +1044 +1044 +11FC +7C48 +5448 +5450 +57FE +5420 +7C40 +10D8 +1760 +1440 +1A40 +E242 +003E +ENDCHAR +STARTCHAR uni86F0 +ENCODING 34544 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +FBF0 +1090 +1990 +F094 +1154 +520C +2504 +1FF0 +1110 +1110 +1FF0 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni86F1 +ENCODING 34545 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +7DFC +5420 +5524 +54A4 +54A8 +7C20 +53FE +1050 +1450 +1E88 +E288 +4104 +0202 +ENDCHAR +STARTCHAR uni86F2 +ENCODING 34546 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +20BC +FBC0 +A850 +A824 +A8D4 +AB0C +F800 +A3FE +2090 +2890 +3912 +E912 +420E +0400 +ENDCHAR +STARTCHAR uni86F3 +ENCODING 34547 +BBX 15 16 0 -2 +BITMAP +2080 +20BE +2088 +FA88 +AABE +AAAA +AAAA +AAAA +FAAA +A2AA +22AA +28AA +392E +E908 +4208 +0408 +ENDCHAR +STARTCHAR uni86F4 +ENCODING 34548 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +7C88 +5450 +5420 +5450 +5488 +7D06 +5088 +1088 +1488 +1C88 +E508 +4108 +0208 +ENDCHAR +STARTCHAR uni86F5 +ENCODING 34549 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +1000 +7C92 +5524 +5648 +5524 +5492 +7C00 +51FE +1020 +1420 +1C20 +E420 +43FE +ENDCHAR +STARTCHAR uni86F6 +ENCODING 34550 +BBX 15 16 0 -2 +BITMAP +1004 +101E +11E0 +7C22 +5512 +5494 +5480 +5408 +7DFE +5008 +1088 +1448 +1E48 +E208 +4028 +0010 +ENDCHAR +STARTCHAR uni86F7 +ENCODING 34551 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +1024 +7C20 +55FE +5420 +5520 +54B2 +7CB4 +5068 +10A8 +1524 +1E22 +E420 +40A0 +0040 +ENDCHAR +STARTCHAR uni86F8 +ENCODING 34552 +BBX 15 15 1 -1 +BITMAP +1020 +10A8 +1124 +7E22 +55FC +5504 +5504 +7DFC +1104 +1104 +15FC +1504 +3B04 +C104 +011C +ENDCHAR +STARTCHAR uni86F9 +ENCODING 34553 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1004 +7C88 +5450 +55FE +5522 +5522 +7DFE +1122 +1522 +15FE +1B22 +E322 +0126 +ENDCHAR +STARTCHAR uni86FA +ENCODING 34554 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +F820 +A924 +A924 +A924 +AAAA +FAAA +2050 +2850 +2888 +3488 +C504 +0202 +ENDCHAR +STARTCHAR uni86FB +ENCODING 34555 +BBX 15 15 1 -1 +BITMAP +1010 +1088 +1088 +7D04 +57FE +5504 +5504 +5504 +7DFC +1050 +1450 +1450 +1A92 +E312 +020E +ENDCHAR +STARTCHAR uni86FC +ENCODING 34556 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +7C20 +55FC +5524 +5524 +55FC +7D24 +1124 +15FC +1420 +1BFE +E220 +0020 +ENDCHAR +STARTCHAR uni86FD +ENCODING 34557 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1104 +7D04 +55FC +5504 +5504 +55FC +7D04 +1104 +1504 +15FC +1A40 +E288 +0306 +ENDCHAR +STARTCHAR uni86FE +ENCODING 34558 +BBX 15 15 1 -1 +BITMAP +20A0 +2128 +2724 +F920 +A920 +AFFE +A920 +A924 +F924 +21A8 +2728 +2910 +3912 +C52A +0344 +ENDCHAR +STARTCHAR uni86FF +ENCODING 34559 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +7C88 +5544 +5622 +54F8 +5408 +7C10 +5020 +11FC +1504 +1D04 +E504 +41FC +0104 +ENDCHAR +STARTCHAR uni8700 +ENCODING 34560 +BBX 14 14 1 -1 +BITMAP +7FF8 +4488 +4488 +7FF8 +1000 +1FFC +2204 +FFE4 +2224 +2224 +3FE4 +0244 +03A4 +7C18 +ENDCHAR +STARTCHAR uni8701 +ENCODING 34561 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +21FE +FA00 +AC00 +A9FE +A822 +A824 +F920 +A13C +2120 +2920 +3920 +EAA0 +447E +0800 +ENDCHAR +STARTCHAR uni8702 +ENCODING 34562 +BBX 15 15 1 -1 +BITMAP +2040 +207C +2084 +F948 +AA30 +A8D8 +AB06 +A820 +F9FC +2020 +21FC +2820 +3BFE +C420 +0020 +ENDCHAR +STARTCHAR uni8703 +ENCODING 34563 +BBX 14 14 1 -1 +BITMAP +7FF8 +4000 +5FF0 +4000 +7FFC +4910 +BEE0 +821C +3FF0 +2210 +3FF0 +0210 +03E8 +FC04 +ENDCHAR +STARTCHAR uni8704 +ENCODING 34564 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1100 +7D00 +557C +5500 +5500 +55FE +7D50 +5152 +1154 +1548 +1D48 +E644 +4252 +0460 +ENDCHAR +STARTCHAR uni8705 +ENCODING 34565 +BBX 15 15 1 -1 +BITMAP +2048 +2044 +27FE +F840 +A840 +ABFC +AA44 +AA44 +FBFC +2244 +2A44 +2BFC +3A44 +C644 +024C +ENDCHAR +STARTCHAR uni8706 +ENCODING 34566 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1108 +7DF8 +5508 +5508 +55F8 +5508 +7D08 +11F8 +14A0 +14A0 +1AA2 +E322 +021E +ENDCHAR +STARTCHAR uni8707 +ENCODING 34567 +BBX 15 15 1 -1 +BITMAP +1038 +11C0 +FD00 +11FE +1110 +1D10 +F210 +1210 +0100 +3FF8 +2108 +3FF8 +0108 +01FC +7F02 +ENDCHAR +STARTCHAR uni8708 +ENCODING 34568 +BBX 15 15 1 -1 +BITMAP +1000 +1078 +1148 +7D48 +5578 +5500 +5500 +55FC +7C24 +1024 +17FE +1450 +1A88 +E304 +0202 +ENDCHAR +STARTCHAR uni8709 +ENCODING 34569 +BBX 15 15 1 -1 +BITMAP +101C +11E4 +1122 +7D12 +5610 +5400 +55FC +5408 +7C10 +1020 +17FE +1420 +1A20 +E220 +00E0 +ENDCHAR +STARTCHAR uni870A +ENCODING 34570 +BBX 15 15 1 -1 +BITMAP +2062 +2382 +2092 +F892 +A892 +AFF2 +A892 +A892 +F9D2 +21B2 +2A92 +2A92 +3482 +C482 +0086 +ENDCHAR +STARTCHAR uni870B +ENCODING 34571 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23F8 +FA08 +AA08 +ABF8 +AA08 +AA08 +FBFA +2224 +2A28 +2A10 +3610 +C3C8 +0606 +ENDCHAR +STARTCHAR uni870C +ENCODING 34572 +BBX 15 15 0 -1 +BITMAP +1110 +1112 +1114 +7DD8 +5510 +5512 +5552 +558E +7D20 +5020 +11FC +1420 +1C20 +E420 +43FE +ENDCHAR +STARTCHAR uni870D +ENCODING 34573 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1050 +7C88 +5504 +56FA +5420 +5420 +7FFE +1020 +1528 +1528 +1A24 +E222 +00E0 +ENDCHAR +STARTCHAR uni870E +ENCODING 34574 +BBX 14 15 1 -1 +BITMAP +2000 +21FC +2104 +F904 +A9FC +A800 +A9FC +A904 +F9FC +2104 +2904 +29FC +3904 +E504 +011C +ENDCHAR +STARTCHAR uni870F +ENCODING 34575 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +1020 +7C20 +57FE +54A8 +5524 +5622 +7DF8 +5088 +1090 +14BE +1D02 +E502 +4214 +0408 +ENDCHAR +STARTCHAR uni8710 +ENCODING 34576 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2110 +FF90 +A97E +A912 +A912 +A912 +FFD2 +2112 +2912 +2952 +3E62 +E2A2 +072C +ENDCHAR +STARTCHAR uni8711 +ENCODING 34577 +BBX 15 15 1 -1 +BITMAP +001C +F9E0 +1020 +393C +4920 +31FC +4C00 +83FE +0100 +3FF8 +2108 +3FF8 +0104 +01FC +FE02 +ENDCHAR +STARTCHAR uni8712 +ENCODING 34578 +BBX 15 15 1 -1 +BITMAP +200C +27B8 +2088 +F888 +A928 +A92E +ABA8 +A8A8 +FAA8 +22A8 +2AA8 +293E +3500 +C5C0 +023E +ENDCHAR +STARTCHAR uni8713 +ENCODING 34579 +BBX 15 15 1 -1 +BITMAP +200C +2070 +2710 +F910 +AA10 +AA10 +AFFE +A890 +F890 +2290 +2A90 +2910 +397C +E6C0 +023E +ENDCHAR +STARTCHAR uni8714 +ENCODING 34580 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FE +7D02 +5502 +56FA +54AA +54AA +7CFA +50AA +10AA +14FA +1E8A +E202 +4014 +0008 +ENDCHAR +STARTCHAR uni8715 +ENCODING 34581 +BBX 15 16 0 -2 +BITMAP +1104 +1084 +1088 +7C10 +55FC +5504 +5504 +5504 +7DFC +5050 +1050 +1490 +1C92 +E512 +420E +0400 +ENDCHAR +STARTCHAR uni8716 +ENCODING 34582 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +114A +7D4A +554A +557A +554A +554A +7D4A +517A +114A +154A +1D4A +E5FE +4102 +ENDCHAR +STARTCHAR uni8717 +ENCODING 34583 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2104 +F904 +A904 +A9FC +A820 +A820 +FBFE +A222 +2252 +2A8A +3B0A +EA02 +420A +0204 +ENDCHAR +STARTCHAR uni8718 +ENCODING 34584 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +23DE +FA92 +AC92 +A892 +A892 +FFF2 +2092 +2092 +2952 +3952 +CA32 +041E +0800 +ENDCHAR +STARTCHAR uni8719 +ENCODING 34585 +BBX 15 15 1 -1 +BITMAP +210C +2124 +2124 +FFA4 +A924 +A942 +A942 +AB90 +FB10 +2510 +2910 +2924 +3924 +E52E +01F2 +ENDCHAR +STARTCHAR uni871A +ENCODING 34586 +BBX 15 15 1 -1 +BITMAP +0440 +FC7E +0440 +7C7C +0440 +FC7E +0840 +1140 +3FF8 +2108 +2108 +3FF8 +0104 +01FC +FE02 +ENDCHAR +STARTCHAR uni871B +ENCODING 34587 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +7D04 +55FC +5510 +5510 +55FE +7D10 +5110 +117C +1544 +1D44 +E544 +417C +0244 +ENDCHAR +STARTCHAR uni871C +ENCODING 34588 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4204 +1548 +2294 +0712 +78F0 +0100 +3FF8 +2108 +3FF8 +0108 +01F4 +FE02 +ENDCHAR +STARTCHAR uni871D +ENCODING 34589 +BBX 15 16 0 -2 +BITMAP +0820 +7FFC +0820 +0FE0 +0820 +0FE0 +0820 +FFFE +1010 +2108 +DFF6 +1110 +1FF0 +0108 +7FFC +0004 +ENDCHAR +STARTCHAR uni871E +ENCODING 34590 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +11FC +7C88 +5488 +54F8 +5488 +5488 +7CF8 +5088 +1088 +15FE +1C00 +E488 +4104 +0202 +ENDCHAR +STARTCHAR uni871F +ENCODING 34591 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +F848 +A89C +ABE2 +A800 +A9FC +F904 +21FC +2904 +29FC +3904 +C504 +010C +ENDCHAR +STARTCHAR uni8720 +ENCODING 34592 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +FA1A +AAE2 +AA22 +AA22 +ABFE +FA22 +A272 +22AA +2B26 +3A22 +EA22 +43FE +0202 +ENDCHAR +STARTCHAR uni8721 +ENCODING 34593 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +23FC +F890 +A890 +A890 +ABFE +A800 +F9F8 +2108 +2908 +29F8 +3908 +E508 +01F8 +ENDCHAR +STARTCHAR uni8722 +ENCODING 34594 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +1008 +7C10 +5420 +57FE +5420 +54A0 +7C40 +51FC +1154 +1554 +1D54 +E554 +43FE +ENDCHAR +STARTCHAR uni8723 +ENCODING 34595 +BBX 15 15 1 -1 +BITMAP +2088 +2050 +23FE +F820 +A820 +A9FC +A820 +A820 +FFFE +2090 +2890 +2890 +3912 +E512 +020E +ENDCHAR +STARTCHAR uni8724 +ENCODING 34596 +BBX 15 16 0 -2 +BITMAP +080C +08F0 +7E80 +1880 +2CFE +2A88 +4888 +8888 +0908 +1FF0 +1110 +1110 +1FF0 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni8725 +ENCODING 34597 +BBX 15 15 1 -1 +BITMAP +210C +2130 +2120 +F920 +AFE0 +A93E +A924 +ABA4 +FB64 +2524 +2924 +2924 +3524 +C544 +0104 +ENDCHAR +STARTCHAR uni8726 +ENCODING 34598 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +7C88 +5504 +56FA +5400 +55FC +7D54 +5154 +11FC +1554 +1D54 +E554 +4104 +010C +ENDCHAR +STARTCHAR uni8727 +ENCODING 34599 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FC +FA04 +AA04 +ABFC +AA00 +AA28 +FA24 +A3FE +2220 +2A50 +3A50 +EC88 +4504 +0A02 +ENDCHAR +STARTCHAR uni8728 +ENCODING 34600 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +7C20 +55FC +5424 +57FE +5424 +7DFC +5020 +1120 +153E +1D20 +E6A0 +427E +0400 +ENDCHAR +STARTCHAR uni8729 +ENCODING 34601 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2222 +FA22 +AAFA +AA22 +AA22 +AAFA +FA22 +22FA +2A8A +2A8A +34FA +C402 +080E +ENDCHAR +STARTCHAR uni872A +ENCODING 34602 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FE +7D02 +5682 +54F2 +5542 +5442 +7FFA +5042 +1152 +1552 +1DF2 +E402 +4014 +0008 +ENDCHAR +STARTCHAR uni872B +ENCODING 34603 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +7D04 +55FC +5504 +5504 +55FC +7C00 +5112 +11D4 +1518 +1D10 +E552 +4192 +010E +ENDCHAR +STARTCHAR uni872C +ENCODING 34604 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2008 +F810 +AA22 +AAAA +AA72 +AA22 +FA72 +A2AA +2326 +2AA2 +3A42 +EA02 +43FE +0002 +ENDCHAR +STARTCHAR uni872D +ENCODING 34605 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +107C +7C84 +5508 +5600 +5420 +55CE +7D02 +5102 +11CE +1502 +1D02 +E502 +41FE +0102 +ENDCHAR +STARTCHAR uni872E +ENCODING 34606 +BBX 15 16 0 -2 +BITMAP +2014 +2012 +2010 +FBFE +A810 +A810 +ABD2 +AA52 +FA52 +A254 +23D4 +280C +386A +EB8A +4116 +0022 +ENDCHAR +STARTCHAR uni872F +ENCODING 34607 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FE +7C20 +54FC +5440 +55FE +5488 +7D24 +5222 +10F8 +1420 +1DFE +E420 +4020 +0020 +ENDCHAR +STARTCHAR uni8730 +ENCODING 34608 +BBX 15 15 0 -2 +BITMAP +3EFC +22A4 +3EA4 +22FC +3E80 +2282 +2282 +4A7E +8500 +3FF8 +2108 +3FF8 +0108 +7FFC +0004 +ENDCHAR +STARTCHAR uni8731 +ENCODING 34609 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23FC +FA44 +AA44 +ABFC +AA44 +AA84 +FBFC +2120 +2A20 +2FFE +3820 +C420 +0020 +ENDCHAR +STARTCHAR uni8732 +ENCODING 34610 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +1020 +7C20 +57FE +54A8 +5524 +5642 +7C40 +53FE +1088 +1508 +1CD0 +E430 +4048 +0184 +ENDCHAR +STARTCHAR uni8733 +ENCODING 34611 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +7C00 +54FC +5484 +54FC +5400 +7CFC +5008 +1010 +15FE +1E10 +E210 +4050 +0020 +ENDCHAR +STARTCHAR uni8734 +ENCODING 34612 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +F908 +A9F8 +A908 +A908 +A9F8 +F880 +21FE +2A2A +2C4A +3592 +C622 +00DC +ENDCHAR +STARTCHAR uni8735 +ENCODING 34613 +BBX 14 16 0 -2 +BITMAP +1050 +1154 +1154 +7D54 +55DC +5504 +5504 +55FC +7D04 +5104 +11DC +1554 +1D54 +E554 +4254 +0404 +ENDCHAR +STARTCHAR uni8736 +ENCODING 34614 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FE +7C00 +5488 +5488 +5554 +5622 +7C00 +5020 +13FE +1420 +1E20 +E220 +4020 +0020 +ENDCHAR +STARTCHAR uni8737 +ENCODING 34615 +BBX 15 15 1 -1 +BITMAP +2150 +2148 +2248 +FBF8 +A8A0 +A8A0 +AFFC +A910 +FA08 +23FC +2D12 +2930 +3504 +C504 +00FC +ENDCHAR +STARTCHAR uni8738 +ENCODING 34616 +BBX 14 15 1 -2 +BITMAP +FDF8 +9088 +FC88 +8450 +FC20 +9050 +FD8C +0200 +3FE0 +2220 +2220 +3FE0 +0210 +FFF8 +4008 +ENDCHAR +STARTCHAR uni8739 +ENCODING 34617 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +7C88 +54A8 +5420 +55FC +5524 +7D24 +5154 +114C +1584 +1D04 +E504 +4114 +0108 +ENDCHAR +STARTCHAR uni873A +ENCODING 34618 +BBX 15 15 1 -1 +BITMAP +2040 +239C +2204 +FA04 +AB9C +AA04 +AA04 +AA04 +FBFC +2090 +2890 +2890 +3912 +C512 +020E +ENDCHAR +STARTCHAR uni873B +ENCODING 34619 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +7C20 +55FC +5420 +57FE +5400 +7DFC +1124 +1524 +15FC +1B04 +E304 +011C +ENDCHAR +STARTCHAR uni873C +ENCODING 34620 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +1080 +7DFE +5510 +5710 +55FC +5510 +7D10 +51FC +1110 +1510 +1D10 +E5FE +4100 +0100 +ENDCHAR +STARTCHAR uni873D +ENCODING 34621 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2020 +F820 +ABFE +AA22 +AA22 +AB32 +FAAA +A2AA +2376 +2A66 +3A22 +EA22 +422A +0204 +ENDCHAR +STARTCHAR uni873E +ENCODING 34622 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2124 +F924 +A9FC +A924 +A924 +A9FC +F820 +23FE +28A8 +28A8 +3924 +C524 +0222 +ENDCHAR +STARTCHAR uni873F +ENCODING 34623 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +FC04 +AA00 +ABBC +AAA4 +AAA4 +FCA4 +26AC +2920 +2920 +3522 +C622 +041E +ENDCHAR +STARTCHAR uni8740 +ENCODING 34624 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +F820 +A9FC +A924 +A9FC +A924 +F924 +21FC +28A8 +28A8 +3924 +C622 +0020 +ENDCHAR +STARTCHAR uni8741 +ENCODING 34625 +BBX 15 15 0 -2 +BITMAP +7FFC +0440 +3C78 +2008 +3C78 +0440 +FFFE +0100 +1FF0 +1110 +1110 +1FF0 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni8742 +ENCODING 34626 +BBX 15 16 0 -2 +BITMAP +2080 +2286 +22B8 +FAA0 +ABE0 +AA3E +AA2A +AA2A +FBAA +A2AA +22A4 +2AA4 +3AA4 +ECCA +448A +0892 +ENDCHAR +STARTCHAR uni8743 +ENCODING 34627 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +2084 +FEB4 +A908 +AA94 +AC22 +A800 +FFBC +2084 +2C84 +2B28 +3910 +C298 +0426 +ENDCHAR +STARTCHAR uni8744 +ENCODING 34628 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +FA8A +AA52 +ABFE +AA42 +AA22 +FBFE +A282 +2282 +2A82 +3AFA +EA02 +420A +0204 +ENDCHAR +STARTCHAR uni8745 +ENCODING 34629 +BBX 15 16 0 -2 +BITMAP +3EF8 +0820 +0820 +7EFC +0820 +1450 +2288 +4104 +9FF2 +1110 +1110 +1FF0 +1100 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni8746 +ENCODING 34630 +BBX 15 16 0 -2 +BITMAP +10A8 +10A8 +13AE +7CA8 +54A8 +5420 +55FC +5420 +7C20 +5020 +13FE +1420 +1E20 +E220 +4020 +0020 +ENDCHAR +STARTCHAR uni8747 +ENCODING 34631 +BBX 15 16 0 -2 +BITMAP +2000 +21F0 +2110 +F910 +A9F0 +A840 +ABF8 +AA48 +FA48 +A3F8 +2248 +2A48 +3BFA +E842 +4042 +003E +ENDCHAR +STARTCHAR uni8748 +ENCODING 34632 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +FA02 +ABFE +AA22 +AA22 +AAFA +FA22 +A232 +222A +2BFE +3A02 +EA02 +43FE +0202 +ENDCHAR +STARTCHAR uni8749 +ENCODING 34633 +BBX 15 15 1 -1 +BITMAP +2244 +2124 +2008 +F9FC +A924 +A9FC +A924 +A924 +F9FC +2020 +2820 +2BFE +3420 +C420 +0020 +ENDCHAR +STARTCHAR uni874A +ENCODING 34634 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +FA02 +AC04 +A800 +ABFE +A820 +F820 +A120 +213C +2920 +3AA0 +EA60 +443E +0800 +ENDCHAR +STARTCHAR uni874B +ENCODING 34635 +BBX 15 15 1 -1 +BITMAP +2484 +2248 +2010 +FBF8 +AA48 +AA48 +ABF8 +FA48 +2248 +23F8 +2A48 +2A48 +3E4A +E64A +0246 +ENDCHAR +STARTCHAR uni874C +ENCODING 34636 +BBX 15 15 1 -1 +BITMAP +20C4 +2384 +20A4 +F894 +AFC4 +A884 +A8A4 +A994 +F9C4 +2186 +2ABC +2A84 +3484 +C484 +0084 +ENDCHAR +STARTCHAR uni874D +ENCODING 34637 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2252 +FA52 +AA52 +ABD2 +AA52 +AA52 +FA52 +A3D2 +221A +2A94 +3A50 +EAB0 +4310 +0010 +ENDCHAR +STARTCHAR uni874E +ENCODING 34638 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +F9F8 +A908 +A908 +A9F8 +A880 +F9FE +2642 +2A42 +2AA2 +3B12 +C7F2 +001C +ENDCHAR +STARTCHAR uni874F +ENCODING 34639 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +F800 +A9FC +A904 +A9FC +A800 +FBFE +A202 +21FC +2820 +3820 +E820 +40A0 +0040 +ENDCHAR +STARTCHAR uni8750 +ENCODING 34640 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1102 +7D7A +5502 +557A +5502 +5400 +7CFC +5084 +10FC +1484 +1EFC +E284 +40FC +0084 +ENDCHAR +STARTCHAR uni8751 +ENCODING 34641 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2022 +F93C +A9A0 +AA7E +A800 +A9FC +F904 +21FC +2904 +29FC +3904 +C504 +011C +ENDCHAR +STARTCHAR uni8752 +ENCODING 34642 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +7C40 +55FC +5554 +5554 +5574 +7D54 +5154 +1174 +1554 +1D54 +E554 +41FC +0104 +ENDCHAR +STARTCHAR uni8753 +ENCODING 34643 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2110 +FA08 +ADF6 +A800 +ABCA +AA4A +FB54 +22D4 +2A68 +2B54 +36D4 +C64A +02CA +ENDCHAR +STARTCHAR uni8754 +ENCODING 34644 +BBX 15 16 0 -2 +BITMAP +1110 +1112 +11D4 +7D18 +5552 +5592 +552E +5440 +7DFC +5104 +1104 +15FC +1D04 +E504 +41FC +0104 +ENDCHAR +STARTCHAR uni8755 +ENCODING 34645 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +59FC +8124 +7D24 +4524 +7D24 +45FC +7C20 +4028 +7C24 +402C +7C32 +43C2 +ENDCHAR +STARTCHAR uni8756 +ENCODING 34646 +BBX 15 15 0 -1 +BITMAP +1040 +1020 +13FE +7E02 +5404 +55FC +5400 +55FC +7D04 +51FC +1104 +15FC +1D04 +E400 +43FE +ENDCHAR +STARTCHAR uni8757 +ENCODING 34647 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +11FC +7D04 +55FC +5504 +5504 +55FC +7C00 +11FC +1420 +15FC +1A20 +E220 +03FE +ENDCHAR +STARTCHAR uni8758 +ENCODING 34648 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2200 +FAFC +AA84 +AAFC +AA84 +AAFC +FA20 +23FE +2A44 +2AC8 +3A38 +C6E4 +03FE +ENDCHAR +STARTCHAR uni8759 +ENCODING 34649 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2000 +F9FC +A904 +A904 +A9FC +A900 +F9FE +2152 +2B52 +2BFE +3552 +C552 +0156 +ENDCHAR +STARTCHAR uni875A +ENCODING 34650 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1048 +7C30 +55FE +5452 +5494 +5510 +7E30 +5020 +11FE +1470 +1CA8 +E524 +4222 +0020 +ENDCHAR +STARTCHAR uni875B +ENCODING 34651 +BBX 15 16 0 -2 +BITMAP +200C +200A +2008 +FBFE +AA08 +ABF8 +AA4A +AA4A +FBEA +A2AC +22AC +2A4C +3AAA +EB0A +4216 +0422 +ENDCHAR +STARTCHAR uni875C +ENCODING 34652 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10F8 +7D08 +5610 +55FC +5504 +55FC +7D04 +51FC +1104 +15FC +1C00 +E488 +4104 +0202 +ENDCHAR +STARTCHAR uni875D +ENCODING 34653 +BBX 15 16 0 -2 +BITMAP +1040 +107C +1084 +7CF8 +5408 +55FE +5440 +54A4 +7D38 +5058 +1094 +1534 +1C54 +E492 +4150 +0020 +ENDCHAR +STARTCHAR uni875E +ENCODING 34654 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1124 +7D24 +55FC +5500 +557C +5544 +7D44 +517C +1144 +157C +1D44 +E644 +427C +0444 +ENDCHAR +STARTCHAR uni875F +ENCODING 34655 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1122 +7DFE +5522 +55FE +5400 +54FC +7C84 +10FC +1484 +14FC +1A84 +E284 +008C +ENDCHAR +STARTCHAR uni8760 +ENCODING 34656 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1000 +7CFC +5484 +5484 +54FC +5400 +7DFE +1122 +1522 +15FE +1B22 +E322 +01FE +ENDCHAR +STARTCHAR uni8761 +ENCODING 34657 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +7C40 +55FC +5554 +5554 +5554 +7D54 +512C +1020 +15FE +1C50 +E488 +4104 +0202 +ENDCHAR +STARTCHAR uni8762 +ENCODING 34658 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1020 +7C40 +55FC +5504 +5504 +55FC +7D04 +51FC +1104 +1504 +1DFC +E400 +4088 +0104 +ENDCHAR +STARTCHAR uni8763 +ENCODING 34659 +BBX 15 15 1 -1 +BITMAP +2120 +2120 +2120 +FFBE +AA40 +AA00 +AA3C +AB84 +FA88 +2288 +2AFE +2A88 +3488 +C488 +0998 +ENDCHAR +STARTCHAR uni8764 +ENCODING 34660 +BBX 15 15 1 -1 +BITMAP +2130 +2208 +2404 +FBFA +A8A0 +A8A0 +ABFC +AAA4 +FAA4 +22A4 +2B3C +2A04 +3BFC +C604 +03FC +ENDCHAR +STARTCHAR uni8765 +ENCODING 34661 +BBX 15 15 1 -1 +BITMAP +7F40 +127E +0C44 +FFC4 +1528 +2410 +4428 +0CC6 +0100 +3FF8 +2108 +3FF8 +0104 +013C +FFC2 +ENDCHAR +STARTCHAR uni8766 +ENCODING 34662 +BBX 15 15 1 -1 +BITMAP +2000 +23DE +2242 +FA42 +ABDE +AA00 +AA3E +FBD2 +2212 +2A14 +2BDC +3A08 +E614 +0224 +0242 +ENDCHAR +STARTCHAR uni8767 +ENCODING 34663 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +13FE +7C88 +54A8 +5420 +55FC +5524 +7D24 +5124 +13FE +1420 +1E50 +E288 +4104 +0202 +ENDCHAR +STARTCHAR uni8768 +ENCODING 34664 +BBX 15 14 1 -1 +BITMAP +7FE0 +0420 +7FA0 +0812 +100A +E004 +1020 +7CF8 +54A8 +54A8 +7CF8 +1424 +1A3C +E3C2 +ENDCHAR +STARTCHAR uni8769 +ENCODING 34665 +BBX 15 15 0 -1 +BITMAP +1008 +103C +11E0 +7C20 +57FE +5420 +55FC +5524 +7DFC +5124 +11FC +1420 +1DFC +E420 +43FE +ENDCHAR +STARTCHAR uni876A +ENCODING 34666 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +F9F8 +A908 +A908 +A9F8 +A800 +FFFE +2100 +2BFE +2C4A +3592 +C662 +019C +ENDCHAR +STARTCHAR uni876B +ENCODING 34667 +BBX 15 16 0 -2 +BITMAP +1020 +1022 +11FA +7C24 +5428 +57FE +5420 +5440 +7CFC +5184 +1284 +14FC +1E84 +E284 +40FC +0084 +ENDCHAR +STARTCHAR uni876C +ENCODING 34668 +BBX 15 16 0 -2 +BITMAP +2000 +2088 +2252 +FA22 +AA52 +AA8A +AA02 +ABFE +F888 +A144 +227A +2888 +3950 +E820 +40D8 +0706 +ENDCHAR +STARTCHAR uni876D +ENCODING 34669 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +7D04 +55FC +5504 +5504 +55FC +7C00 +53FE +1020 +1520 +1D3C +E520 +42A0 +047E +ENDCHAR +STARTCHAR uni876E +ENCODING 34670 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +23FC +FA00 +ADF8 +A908 +A9F8 +A908 +F9F8 +2080 +28F8 +2B08 +3490 +C470 +038E +ENDCHAR +STARTCHAR uni876F +ENCODING 34671 +BBX 15 16 0 -2 +BITMAP +101E +13E0 +1044 +7D24 +5488 +55FC +5440 +5440 +7DFE +5080 +10FC +1544 +1D28 +E610 +4068 +0186 +ENDCHAR +STARTCHAR uni8770 +ENCODING 34672 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +7C50 +5488 +5726 +55FC +5420 +7C20 +53FE +1000 +1420 +1DFC +E420 +4020 +03FE +ENDCHAR +STARTCHAR uni8771 +ENCODING 34673 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +4000 +4000 +4000 +3FF8 +1020 +7CFC +54A4 +54A4 +7CFC +1428 +1A34 +E3C2 +ENDCHAR +STARTCHAR uni8772 +ENCODING 34674 +BBX 15 15 1 -1 +BITMAP +2082 +2082 +208A +FBEA +A88A +ABEA +AAAA +AAAA +FAAA +23EA +288A +29C2 +3AA2 +C4A2 +008E +ENDCHAR +STARTCHAR uni8773 +ENCODING 34675 +BBX 15 16 0 -2 +BITMAP +1020 +11FE +1020 +7CFC +5420 +55FE +5400 +54FC +7CA4 +5094 +11FE +14A4 +1D14 +E5FE +4004 +0018 +ENDCHAR +STARTCHAR uni8774 +ENCODING 34676 +BBX 14 15 1 -1 +BITMAP +2100 +213C +2124 +F924 +AFE4 +A93C +A924 +A924 +FBA4 +22BC +2AA4 +2AA4 +37A4 +C424 +004C +ENDCHAR +STARTCHAR uni8775 +ENCODING 34677 +BBX 13 16 1 -2 +BITMAP +0C40 +7040 +1148 +FD50 +3240 +58A0 +9510 +1208 +0200 +3FE0 +2220 +2220 +3FE0 +0210 +FFF8 +4008 +ENDCHAR +STARTCHAR uni8776 +ENCODING 34678 +BBX 15 15 1 -1 +BITMAP +2148 +2148 +23FE +F948 +A948 +A978 +A900 +A9FC +F820 +23FE +28A8 +28A8 +3524 +C222 +0020 +ENDCHAR +STARTCHAR uni8777 +ENCODING 34679 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +7D00 +5544 +5528 +55FE +5510 +7D54 +5154 +1154 +157C +1D14 +E520 +4240 +0080 +ENDCHAR +STARTCHAR uni8778 +ENCODING 34680 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +1084 +7CBC +54A4 +54A4 +54A4 +55FE +7D02 +117A +154A +154A +1B7A +E302 +0106 +ENDCHAR +STARTCHAR uni8779 +ENCODING 34681 +BBX 15 15 0 -1 +BITMAP +1000 +10F8 +1088 +7C88 +54F8 +5488 +5488 +54F8 +7C00 +51FC +1154 +1554 +1D54 +E554 +43FE +ENDCHAR +STARTCHAR uni877A +ENCODING 34682 +BBX 15 16 0 -2 +BITMAP +2004 +201E +23E0 +F820 +A9FC +A924 +A924 +A9FC +F820 +A3FE +2222 +2A2A +3AFA +EA02 +420A +0204 +ENDCHAR +STARTCHAR uni877B +ENCODING 34683 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +23FE +F820 +A820 +ABFE +AA8A +AA52 +FAFA +A222 +2222 +2AFA +3A22 +EA22 +422A +0204 +ENDCHAR +STARTCHAR uni877C +ENCODING 34684 +BBX 15 15 1 -1 +BITMAP +2224 +2128 +2020 +FBFE +A8A8 +A8A8 +A924 +AA22 +F840 +23FE +2888 +2908 +39F0 +C458 +0384 +ENDCHAR +STARTCHAR uni877D +ENCODING 34685 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +7C20 +55FC +5440 +57FE +5488 +7D04 +52FA +1088 +1488 +1CF8 +E488 +4088 +00F8 +ENDCHAR +STARTCHAR uni877E +ENCODING 34686 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +23FE +F888 +A800 +ABFE +AA02 +AC24 +F820 +A3FE +2070 +28A8 +38A8 +E924 +4222 +0020 +ENDCHAR +STARTCHAR uni877F +ENCODING 34687 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2248 +FBF8 +AA48 +ABF8 +A840 +ABFC +FA44 +23FC +2A44 +2A44 +3FFC +C442 +003E +ENDCHAR +STARTCHAR uni8780 +ENCODING 34688 +BBX 15 16 0 -2 +BITMAP +0880 +49F8 +2A90 +2860 +0890 +1FFE +2A10 +C950 +0920 +0100 +3FF8 +2108 +3FF8 +0108 +7FFC +0004 +ENDCHAR +STARTCHAR uni8781 +ENCODING 34689 +BBX 15 16 0 -2 +BITMAP +1000 +127C +1144 +7D44 +547C +5444 +5744 +557C +7D50 +514A +1144 +1554 +1D62 +E542 +4280 +047E +ENDCHAR +STARTCHAR uni8782 +ENCODING 34690 +BBX 15 15 1 -1 +BITMAP +2100 +211E +23D2 +FA52 +AA52 +ABD4 +AA54 +AA54 +FBD2 +2212 +2AB2 +2AD2 +3694 +C750 +0250 +ENDCHAR +STARTCHAR uni8783 +ENCODING 34691 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FC +F908 +A890 +ABFE +AA02 +AC44 +F820 +A3FC +2080 +28F8 +3888 +E908 +4128 +0210 +ENDCHAR +STARTCHAR uni8784 +ENCODING 34692 +BBX 15 16 0 -2 +BITMAP +2100 +227E +2388 +FA88 +AABE +AAAA +ABAA +AA2A +FA2A +A3AA +22AA +2AAE +3A88 +EB88 +4288 +0008 +ENDCHAR +STARTCHAR uni8785 +ENCODING 34693 +BBX 15 15 0 -1 +BITMAP +2020 +2040 +21FC +F904 +A9FC +A904 +A9FC +A904 +F9FC +A040 +2020 +28A4 +3A8A +EA8A +4478 +ENDCHAR +STARTCHAR uni8786 +ENCODING 34694 +BBX 15 16 0 -2 +BITMAP +2084 +2044 +2048 +FBFE +A884 +A884 +A908 +A94A +FA52 +A39C +2084 +2908 +3908 +EA52 +43DE +0042 +ENDCHAR +STARTCHAR uni8787 +ENCODING 34695 +BBX 15 15 1 -1 +BITMAP +203C +21E4 +2112 +FA12 +AA40 +A848 +A890 +A9A8 +F87C +21C2 +2820 +2BFE +3450 +C488 +0306 +ENDCHAR +STARTCHAR uni8788 +ENCODING 34696 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2210 +FA20 +AAFC +AA84 +AAFC +AA84 +FA84 +22FC +2A10 +2A10 +3494 +C512 +0030 +ENDCHAR +STARTCHAR uni8789 +ENCODING 34697 +BBX 15 15 1 -1 +BITMAP +2030 +2110 +2208 +FC86 +A890 +A930 +ABC8 +A800 +FFBE +228A +2492 +29A6 +3A8A +C4B2 +038E +ENDCHAR +STARTCHAR uni878A +ENCODING 34698 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +1000 +7DFE +5450 +55FC +5454 +57FE +7C54 +51FC +1050 +14D8 +1D54 +E652 +4050 +0050 +ENDCHAR +STARTCHAR uni878B +ENCODING 34699 +BBX 15 15 1 -1 +BITMAP +2020 +20A0 +232E +FA22 +ABAE +AA22 +AA22 +ABAE +F820 +27FE +2904 +2888 +3870 +C4D8 +0706 +ENDCHAR +STARTCHAR uni878C +ENCODING 34700 +BBX 15 16 0 -2 +BITMAP +1078 +3E48 +2248 +2A86 +FF78 +2248 +2A28 +4210 +4A28 +8546 +3FF8 +2108 +3FF8 +0108 +7FFC +0004 +ENDCHAR +STARTCHAR uni878D +ENCODING 34701 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +0020 +7CFC +44A4 +7CA4 +00A4 +FEA4 +AAFC +AA20 +CE28 +8224 +BA24 +923E +96C2 +ENDCHAR +STARTCHAR uni878E +ENCODING 34702 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2000 +F9FC +A904 +A904 +A9FC +A800 +FBFE +A28A +2252 +2BFE +3A22 +EA22 +422A +0204 +ENDCHAR +STARTCHAR uni878F +ENCODING 34703 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +21FE +F900 +A920 +AD20 +AB3C +A950 +F990 +A310 +25FE +2910 +3928 +EA28 +4244 +0482 +ENDCHAR +STARTCHAR uni8790 +ENCODING 34704 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +21FC +F904 +A904 +A9FC +A900 +A9FE +F900 +A1FE +2002 +2AAA +3AAA +EC02 +4014 +0008 +ENDCHAR +STARTCHAR uni8791 +ENCODING 34705 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +7D04 +55FC +5504 +55FC +5504 +7DFC +5028 +1024 +15FE +1C50 +E488 +4104 +0202 +ENDCHAR +STARTCHAR uni8792 +ENCODING 34706 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +FE88 +1126 +7C20 +45FC +7D24 +4524 +7D24 +11FC +FE20 +1028 +103C +13C4 +1104 +ENDCHAR +STARTCHAR uni8793 +ENCODING 34707 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +F840 +A9F8 +A8A0 +AFFE +A910 +FA08 +25F6 +2840 +2BFC +3950 +E64C +0040 +ENDCHAR +STARTCHAR uni8794 +ENCODING 34708 +BBX 15 16 0 -2 +BITMAP +2004 +201E +23F0 +FA1E +AA10 +AAFE +AA92 +AA98 +FAF2 +A28E +2280 +2AB8 +3AA8 +ECAA +454A +0A86 +ENDCHAR +STARTCHAR uni8795 +ENCODING 34709 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +7D04 +5554 +5524 +5554 +5504 +7DFC +5000 +1112 +15D4 +1D18 +E552 +4192 +010E +ENDCHAR +STARTCHAR uni8796 +ENCODING 34710 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +7CF4 +5494 +55FE +5502 +54FC +7C84 +50FC +1084 +14FC +1E84 +E284 +4094 +0088 +ENDCHAR +STARTCHAR uni8797 +ENCODING 34711 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +7D10 +557C +5514 +55FE +5514 +7D7C +5110 +117C +1544 +1D44 +E644 +427C +0444 +ENDCHAR +STARTCHAR uni8798 +ENCODING 34712 +BBX 15 15 0 -1 +BITMAP +1020 +1124 +1124 +7D24 +55FC +5400 +57FE +5400 +7DFC +5104 +1104 +15FC +1C88 +E450 +43FE +ENDCHAR +STARTCHAR uni8799 +ENCODING 34713 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0380 +0540 +1930 +E10E +0820 +7EFC +4AA4 +4AA4 +7EFC +0820 +0A24 +FEFE +0202 +ENDCHAR +STARTCHAR uni879A +ENCODING 34714 +BBX 15 16 0 -2 +BITMAP +2044 +4258 +FF62 +0142 +7E3E +4200 +7E4C +4272 +7E42 +423E +0100 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni879B +ENCODING 34715 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +FA02 +AC24 +A9FC +A820 +A9FC +F820 +A3FE +2020 +29FC +3904 +E904 +41FC +0104 +ENDCHAR +STARTCHAR uni879C +ENCODING 34716 +BBX 14 16 1 -2 +BITMAP +1000 +FEF0 +1090 +7C90 +010C +FEF0 +8290 +0060 +7D9C +0200 +7FF0 +4210 +7FF0 +0210 +FFF8 +0008 +ENDCHAR +STARTCHAR uni879D +ENCODING 34717 +BBX 15 16 0 -2 +BITMAP +2020 +2040 +23FC +FA24 +AA24 +ABFC +AA24 +AA44 +FBFC +A040 +20A8 +28B4 +393C +E922 +4222 +041E +ENDCHAR +STARTCHAR uni879E +ENCODING 34718 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +2120 +F9FC +A920 +A9FC +A920 +A920 +F9FE +A002 +22AA +2AAA +3AAA +EA02 +4014 +0008 +ENDCHAR +STARTCHAR uni879F +ENCODING 34719 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2202 +FAFA +A888 +A888 +A8F8 +A888 +F888 +20F8 +2820 +2BFE +3480 +C508 +0206 +ENDCHAR +STARTCHAR uni87A0 +ENCODING 34720 +BBX 15 15 1 -1 +BITMAP +2030 +2108 +2204 +FCF2 +A800 +A830 +A908 +AE06 +F800 +21FC +2954 +2954 +3954 +C554 +07FE +ENDCHAR +STARTCHAR uni87A1 +ENCODING 34721 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +0820 +07C0 +1830 +E00E +0820 +7EFC +4AA4 +4AA4 +7EFC +0820 +0A24 +FEFE +0202 +ENDCHAR +STARTCHAR uni87A2 +ENCODING 34722 +BBX 15 15 1 -1 +BITMAP +0A20 +2AA4 +28A8 +1450 +2288 +FFFC +4104 +5FF4 +5114 +1110 +1FF0 +0100 +0118 +01E4 +7E02 +ENDCHAR +STARTCHAR uni87A3 +ENCODING 34723 +BBX 15 16 0 -2 +BITMAP +0020 +3D24 +24A8 +2420 +25FC +3C40 +27FE +24A8 +2524 +3EFA +24A8 +24A8 +24F8 +4424 +55FC +8804 +ENDCHAR +STARTCHAR uni87A4 +ENCODING 34724 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +FE20 +05FC +6924 +1124 +29FC +D524 +1124 +7DFC +5524 +7C50 +1050 +1C88 +E504 +4202 +ENDCHAR +STARTCHAR uni87A5 +ENCODING 34725 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +7C48 +54A4 +55FE +5684 +54FC +7C84 +50FC +1080 +14FC +1D44 +E544 +427C +0044 +ENDCHAR +STARTCHAR uni87A6 +ENCODING 34726 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +7C20 +55FC +5420 +57FE +5440 +7C88 +51F0 +1024 +17FE +1C22 +E524 +42A2 +0040 +ENDCHAR +STARTCHAR uni87A7 +ENCODING 34727 +BBX 15 15 1 -1 +BITMAP +2080 +2088 +23E8 +F890 +AFFE +A840 +A998 +AEE0 +F882 +23FE +2A08 +2BF8 +3A08 +C608 +03F8 +ENDCHAR +STARTCHAR uni87A8 +ENCODING 34728 +BBX 15 16 0 -2 +BITMAP +1048 +1048 +11FE +7C48 +5400 +55FE +5448 +5448 +7DFE +514A +114A +15B6 +1D22 +E502 +410A +0104 +ENDCHAR +STARTCHAR uni87A9 +ENCODING 34729 +BBX 15 16 0 -2 +BITMAP +2110 +211E +2122 +FA54 +AA08 +AE94 +AAE2 +AA88 +FA88 +A2BE +2288 +2AAC +3A2A +EA4A +4228 +0210 +ENDCHAR +STARTCHAR uni87AA +ENCODING 34730 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +F888 +A850 +ABFE +AA52 +AA8A +FB06 +A2FA +228A +2A8A +3AFA +EA02 +420A +0204 +ENDCHAR +STARTCHAR uni87AB +ENCODING 34731 +BBX 15 15 1 -1 +BITMAP +0810 +7F10 +083E +FFC4 +1424 +5618 +A524 +4CC2 +0100 +3FF8 +2108 +3FF8 +0104 +01FC +FE02 +ENDCHAR +STARTCHAR uni87AC +ENCODING 34732 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +27FE +F890 +ABFC +AA94 +ABFC +AA94 +FBFC +2000 +29FC +2904 +35FC +C504 +01FC +ENDCHAR +STARTCHAR uni87AD +ENCODING 34733 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +F810 +A954 +A924 +A9D4 +A904 +F9FC +2020 +2BFE +2A42 +3652 +C6EA +0206 +ENDCHAR +STARTCHAR uni87AE +ENCODING 34734 +BBX 15 16 0 -2 +BITMAP +2154 +2154 +23FE +F954 +A954 +AA72 +AC00 +ABFE +FA22 +A020 +21FC +2924 +3924 +E924 +412C +0020 +ENDCHAR +STARTCHAR uni87AF +ENCODING 34735 +BBX 15 15 1 -1 +BITMAP +0820 +7F20 +087E +FFC4 +0824 +FF98 +1010 +3F28 +4144 +BFFA +2108 +3FF8 +0108 +01F4 +FE02 +ENDCHAR +STARTCHAR uni87B0 +ENCODING 34736 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +FA50 +AA50 +ABFE +AA52 +AA52 +FBFE +A200 +2292 +2AD4 +3A98 +EC92 +44D2 +088E +ENDCHAR +STARTCHAR uni87B1 +ENCODING 34737 +BBX 15 16 0 -2 +BITMAP +3F08 +2108 +3F7E +2008 +2F48 +2028 +5FA8 +4408 +9528 +2C90 +0100 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni87B2 +ENCODING 34738 +BBX 15 15 0 -1 +BITMAP +2040 +2020 +23FE +FA8A +A904 +ABFE +A840 +A888 +F9FC +A024 +2020 +29FC +3820 +E820 +43FE +ENDCHAR +STARTCHAR uni87B3 +ENCODING 34739 +BBX 15 15 1 -1 +BITMAP +2124 +2124 +20A8 +FBFE +AA02 +AAFA +A888 +A888 +F8F8 +2020 +29FC +2820 +3420 +C420 +03FE +ENDCHAR +STARTCHAR uni87B4 +ENCODING 34740 +BBX 14 16 1 -2 +BITMAP +0040 +F7FC +9040 +A3F8 +C248 +A3F8 +9248 +93F8 +D0E0 +A150 +8248 +7FF4 +4210 +7FF0 +0208 +FFFC +ENDCHAR +STARTCHAR uni87B5 +ENCODING 34741 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2090 +FBFC +AA94 +AA94 +ABFC +A800 +F9F8 +2000 +2BFE +2820 +34A8 +C726 +0060 +ENDCHAR +STARTCHAR uni87B6 +ENCODING 34742 +BBX 15 15 0 -2 +BITMAP +3FFC +2000 +3FF8 +2008 +3FF8 +2000 +3FFC +1020 +7EFC +52A4 +7EFC +1020 +1424 +FEFE +0202 +ENDCHAR +STARTCHAR uni87B7 +ENCODING 34743 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2200 +2FF8 +2888 +2FF8 +2908 +2FF8 +2220 +3FFC +20A0 +2FF8 +4888 +4FF8 +8084 +3FFE +ENDCHAR +STARTCHAR uni87B8 +ENCODING 34744 +BBX 15 16 0 -2 +BITMAP +1420 +2220 +493E +1442 +2294 +4110 +BE28 +2228 +2244 +3E82 +0100 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni87B9 +ENCODING 34745 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +208E +FBE8 +A888 +ABE8 +AAAE +ABEA +FAAA +A3EA +208A +2BEA +388A +E892 +4092 +00A2 +ENDCHAR +STARTCHAR uni87BA +ENCODING 34746 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2124 +F9FC +A924 +A9FC +A890 +A920 +F8C8 +209C +2BE2 +28A8 +3524 +C622 +0020 +ENDCHAR +STARTCHAR uni87BB +ENCODING 34747 +BBX 15 15 1 -1 +BITMAP +2020 +21FC +2124 +FBFE +A924 +A9FC +A820 +A9FC +F924 +21FC +2840 +2BFE +3488 +C4F0 +039E +ENDCHAR +STARTCHAR uni87BC +ENCODING 34748 +BBX 15 15 0 -1 +BITMAP +1088 +1088 +13FE +7C88 +54F8 +5420 +55FC +5524 +7DFC +5020 +13FE +1420 +1DFC +E420 +43FE +ENDCHAR +STARTCHAR uni87BD +ENCODING 34749 +BBX 15 15 1 -1 +BITMAP +0200 +07F8 +1810 +6620 +01C0 +0E70 +F18E +0640 +11A0 +7EF8 +52A8 +7EF8 +1424 +1E3C +E1C2 +ENDCHAR +STARTCHAR uni87BE +ENCODING 34750 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +FA02 +A8FA +A820 +A9FC +A924 +F924 +21FC +2924 +2924 +39FC +C488 +0306 +ENDCHAR +STARTCHAR uni87BF +ENCODING 34751 +BBX 15 16 0 -2 +BITMAP +0440 +247C +24A8 +3D50 +0428 +7DFE +2488 +4448 +8418 +0100 +3FF8 +2108 +3FF8 +0108 +7FFC +0004 +ENDCHAR +STARTCHAR uni87C0 +ENCODING 34752 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +F820 +AA42 +A954 +A820 +A944 +FA92 +20E8 +2820 +2BFE +3420 +C420 +0020 +ENDCHAR +STARTCHAR uni87C1 +ENCODING 34753 +BBX 15 15 1 -1 +BITMAP +3FF8 +2008 +3FF8 +2080 +3FFE +2040 +3F32 +E00C +1010 +7E7E +5252 +7E7E +1414 +1E1E +E2E2 +ENDCHAR +STARTCHAR uni87C2 +ENCODING 34754 +BBX 15 16 0 -2 +BITMAP +1040 +11FC +1104 +7DFC +5504 +55FC +5500 +55FE +7D00 +51FE +1022 +15FA +1C76 +E4A8 +4326 +0020 +ENDCHAR +STARTCHAR uni87C3 +ENCODING 34755 +BBX 15 16 0 -2 +BITMAP +2000 +21F8 +2108 +F9F8 +A908 +A9F8 +A800 +ABFC +FA94 +A3FC +2000 +29F8 +3890 +E860 +4198 +0606 +ENDCHAR +STARTCHAR uni87C4 +ENCODING 34756 +BBX 15 15 1 -1 +BITMAP +0820 +7F20 +0878 +FFA8 +2268 +FFA8 +0828 +7F5A +0896 +3FF8 +2108 +3FF8 +0104 +01FC +FE02 +ENDCHAR +STARTCHAR uni87C5 +ENCODING 34757 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FE +7D00 +5548 +5548 +55FE +5548 +7D48 +1148 +1578 +1D00 +E6D4 +42AA +052A +0800 +ENDCHAR +STARTCHAR uni87C6 +ENCODING 34758 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +27FE +F890 +ABFC +AA04 +ABFC +AA04 +FA04 +23FC +2840 +2FFE +3490 +C308 +0C06 +ENDCHAR +STARTCHAR uni87C7 +ENCODING 34759 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +1010 +1FF0 +1010 +1FF0 +0200 +FFFE +0920 +3FF8 +C926 +0FE0 +0108 +7FF4 +ENDCHAR +STARTCHAR uni87C8 +ENCODING 34760 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +221A +FA16 +ABFE +AA12 +AAEA +AAAA +FAAA +A2EA +220E +2A6A +3B9A +EA26 +43FE +0202 +ENDCHAR +STARTCHAR uni87C9 +ENCODING 34761 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2042 +FA52 +A94A +AA52 +A828 +A8C4 +FB12 +A060 +2188 +2832 +39C4 +E818 +4060 +0380 +ENDCHAR +STARTCHAR uni87CA +ENCODING 34762 +BBX 15 16 0 -2 +BITMAP +1FF0 +0220 +0140 +7FFC +0484 +1888 +6280 +0100 +1020 +7EFC +52A4 +7EFC +1020 +1424 +FEFE +0202 +ENDCHAR +STARTCHAR uni87CB +ENCODING 34763 +BBX 15 15 1 -1 +BITMAP +2018 +21E0 +2222 +F924 +AFFE +A8A8 +A8A8 +A924 +FA02 +2020 +2810 +2954 +3542 +C64A +0238 +ENDCHAR +STARTCHAR uni87CC +ENCODING 34764 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +11FC +7D24 +557C +558C +5554 +5524 +7D54 +51FC +1020 +1410 +1D54 +E542 +414A +0238 +ENDCHAR +STARTCHAR uni87CD +ENCODING 34765 +BBX 15 16 0 -2 +BITMAP +2062 +238A +208A +FFEA +A88A +A9CA +AAA2 +AC8A +F8A4 +A020 +23FE +2870 +38A8 +E924 +4222 +0020 +ENDCHAR +STARTCHAR uni87CE +ENCODING 34766 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +23FE +F890 +A890 +A8F0 +A820 +ABFE +FA22 +23BA +2AAA +2AAA +3B76 +C622 +0206 +ENDCHAR +STARTCHAR uni87CF +ENCODING 34767 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +23FE +F888 +A820 +ABFC +A824 +AFFE +F824 +A3FC +2020 +2AB4 +3AAC +EB2C +4224 +0424 +ENDCHAR +STARTCHAR uni87D0 +ENCODING 34768 +BBX 15 15 1 -1 +BITMAP +2124 +2124 +20A8 +FBFE +AA02 +AAFA +A888 +A888 +F8F8 +2020 +29FC +2924 +3524 +C52C +0020 +ENDCHAR +STARTCHAR uni87D1 +ENCODING 34769 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1088 +7C50 +57FE +5400 +55FC +5504 +7DFC +5104 +11FC +1420 +1FFE +E420 +4020 +0020 +ENDCHAR +STARTCHAR uni87D2 +ENCODING 34770 +BBX 15 15 1 -1 +BITMAP +2088 +23FE +2088 +F820 +ABFE +A850 +A888 +AB06 +F888 +2088 +2BFE +2888 +3488 +C508 +0208 +ENDCHAR +STARTCHAR uni87D3 +ENCODING 34771 +BBX 15 16 0 -2 +BITMAP +2080 +20F8 +2108 +FBFE +AD12 +A922 +A9FE +A840 +F8A2 +A354 +2098 +2B34 +3854 +E892 +4350 +0020 +ENDCHAR +STARTCHAR uni87D4 +ENCODING 34772 +BBX 15 15 0 -1 +BITMAP +2000 +21FC +2124 +F9AC +A974 +A924 +A9FC +A820 +F9FC +A020 +23FE +2800 +3AA4 +EA52 +4452 +ENDCHAR +STARTCHAR uni87D5 +ENCODING 34773 +BBX 15 16 0 -2 +BITMAP +2090 +2294 +22D8 +FA92 +AAD2 +AF0E +A9F0 +AA10 +FFFC +AA44 +23FC +2A44 +3BFC +EC44 +4454 +0808 +ENDCHAR +STARTCHAR uni87D6 +ENCODING 34774 +BBX 15 15 1 -1 +BITMAP +2286 +22B8 +22A0 +FFE0 +AABE +ABA4 +AAA4 +AAA4 +FBA4 +22A4 +2AA4 +2FE4 +3AA4 +C444 +0444 +ENDCHAR +STARTCHAR uni87D7 +ENCODING 34775 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +1110 +1FF0 +0100 +FFFE +9112 +1FF0 +4104 +7FFC +0100 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni87D8 +ENCODING 34776 +BBX 15 16 0 -2 +BITMAP +1054 +1092 +119E +7EF0 +548A +5486 +5402 +54FC +7C84 +50FC +1084 +14FC +1E84 +E2FC +4048 +0084 +ENDCHAR +STARTCHAR uni87D9 +ENCODING 34777 +BBX 15 16 0 -2 +BITMAP +2110 +2094 +23D2 +F812 +AA50 +A990 +AFFE +A810 +FBD2 +A252 +2254 +2BD4 +3A4A +EA4A +43D6 +0022 +ENDCHAR +STARTCHAR uni87DA +ENCODING 34778 +BBX 14 16 1 -2 +BITMAP +1008 +FE10 +1020 +7CC8 +0010 +7C20 +44C8 +7C10 +2820 +FEC0 +0200 +7FF0 +4210 +7FF0 +0208 +FFFC +ENDCHAR +STARTCHAR uni87DB +ENCODING 34779 +BBX 15 16 0 -2 +BITMAP +2082 +2082 +27F4 +F888 +A880 +ABE2 +A802 +ABE4 +FA28 +A220 +23E0 +2A22 +3942 +E874 +4788 +0210 +ENDCHAR +STARTCHAR uni87DC +ENCODING 34780 +BBX 15 16 0 -2 +BITMAP +1018 +11E0 +1040 +7FFE +5488 +5574 +5652 +5470 +7C00 +51FC +1104 +1574 +1D54 +E574 +4104 +010C +ENDCHAR +STARTCHAR uni87DD +ENCODING 34781 +BBX 15 16 0 -2 +BITMAP +2200 +217E +2040 +FC7C +AA44 +A8FC +A940 +AE7E +FA20 +A020 +23FE +2870 +38A8 +E924 +4222 +0020 +ENDCHAR +STARTCHAR uni87DE +ENCODING 34782 +BBX 14 16 1 -2 +BITMAP +1040 +9240 +547C +FE90 +9290 +BB50 +D620 +9250 +828C +3FE0 +2220 +2220 +3FE0 +0210 +FFF8 +4008 +ENDCHAR +STARTCHAR uni87DF +ENCODING 34783 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F890 +AA94 +A908 +A9FC +AB0A +FDF8 +2108 +29F8 +2820 +3928 +C624 +0462 +ENDCHAR +STARTCHAR uni87E0 +ENCODING 34784 +BBX 15 15 1 -1 +BITMAP +201C +27E0 +2248 +F950 +AFFE +A950 +AA48 +AC46 +F800 +23F8 +2A48 +2BF8 +3648 +C648 +03F8 +ENDCHAR +STARTCHAR uni87E1 +ENCODING 34785 +BBX 15 16 0 -2 +BITMAP +200E +23F0 +2044 +FA24 +A908 +ABF8 +AA08 +ABFC +FA04 +A3FE +2202 +2AAA +3AAA +ED02 +4414 +0808 +ENDCHAR +STARTCHAR uni87E2 +ENCODING 34786 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1020 +7DFC +5400 +55FC +5504 +55FC +7C88 +53FE +1000 +15FC +1D04 +E504 +41FC +0104 +ENDCHAR +STARTCHAR uni87E3 +ENCODING 34787 +BBX 15 15 1 -1 +BITMAP +2248 +2248 +2450 +FD74 +AA48 +AD54 +AEFA +A844 +FFFE +2440 +2C24 +2E28 +3510 +E82A +08C6 +ENDCHAR +STARTCHAR uni87E4 +ENCODING 34788 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2252 +FBDE +AA10 +AA52 +A9CE +A800 +F888 +A3FE +2088 +2888 +3BFE +E888 +4104 +0202 +ENDCHAR +STARTCHAR uni87E5 +ENCODING 34789 +BBX 15 15 1 -1 +BITMAP +2110 +23FC +2110 +F9F0 +A800 +AFFE +A840 +ABFC +FA44 +23FC +2A44 +2A44 +3BFC +C508 +0206 +ENDCHAR +STARTCHAR uni87E6 +ENCODING 34790 +BBX 15 15 1 -1 +BITMAP +2040 +23FC +2040 +F908 +AFFE +A908 +ABFC +AA04 +FBFC +2204 +2BFC +2A04 +3BFC +E508 +0606 +ENDCHAR +STARTCHAR uni87E7 +ENCODING 34791 +BBX 15 16 0 -2 +BITMAP +2088 +22AA +22DC +FC88 +A954 +AA22 +A800 +ABFE +FA42 +A444 +23FC +2844 +3844 +E884 +4114 +0208 +ENDCHAR +STARTCHAR uni87E8 +ENCODING 34792 +BBX 15 16 0 -2 +BITMAP +3FFE +2890 +2510 +3FDE +2222 +2A88 +2F88 +2294 +2422 +2840 +27FC +2444 +27FC +4044 +4FFE +8002 +ENDCHAR +STARTCHAR uni87E9 +ENCODING 34793 +BBX 15 16 0 -2 +BITMAP +2000 +2FFE +2800 +FA28 +A948 +ABEE +A892 +A884 +FAA0 +AAA8 +2BE8 +2888 +3894 +E914 +4924 +1242 +ENDCHAR +STARTCHAR uni87EA +ENCODING 34794 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F840 +ABFC +AA44 +ABFC +AA44 +FBFC +2048 +2FF4 +2842 +3AA4 +C68A +047A +ENDCHAR +STARTCHAR uni87EB +ENCODING 34795 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +20A0 +FBFC +AAA4 +AAE4 +A800 +ABFC +FA04 +23FC +2A04 +2BFC +3840 +C7FE +0040 +ENDCHAR +STARTCHAR uni87EC +ENCODING 34796 +BBX 15 15 1 -1 +BITMAP +2000 +23DE +2252 +FBDE +A800 +A9FC +A924 +A9FC +F924 +21FC +2820 +2BFE +3420 +C420 +0020 +ENDCHAR +STARTCHAR uni87ED +ENCODING 34797 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2220 +FFFC +AA20 +ABFC +AA20 +ABFC +FA20 +2220 +2BFE +2800 +3AA4 +C452 +0852 +ENDCHAR +STARTCHAR uni87EE +ENCODING 34798 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +13FE +7C20 +55FC +5420 +57FE +5524 +7CA8 +53FE +1000 +15FC +1D04 +E504 +41FC +0104 +ENDCHAR +STARTCHAR uni87EF +ENCODING 34799 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +21FC +F820 +ABFE +A888 +ABDE +A888 +F8C8 +233E +2800 +2BFE +3490 +C512 +020E +ENDCHAR +STARTCHAR uni87F0 +ENCODING 34800 +BBX 15 16 0 -2 +BITMAP +2020 +21FC +2024 +FBFE +A824 +A9FC +A820 +AAAA +FBAE +A222 +23FE +2A22 +3BAE +EAAA +42AA +0422 +ENDCHAR +STARTCHAR uni87F1 +ENCODING 34801 +BBX 15 15 0 -1 +BITMAP +2080 +2080 +21FE +FB54 +AD54 +A954 +ABFE +A954 +F954 +A154 +27FE +2800 +3954 +E92A +422A +ENDCHAR +STARTCHAR uni87F2 +ENCODING 34802 +BBX 15 15 1 -1 +BITMAP +0100 +1FF0 +1110 +1FF0 +0110 +01F0 +3F08 +1020 +7EFC +52A4 +52A4 +7EFC +1428 +1E3C +E1C2 +ENDCHAR +STARTCHAR uni87F3 +ENCODING 34803 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1004 +7CFC +5404 +55FC +5400 +55DC +7C94 +53DC +1008 +17FE +1D08 +E488 +40A8 +0010 +ENDCHAR +STARTCHAR uni87F4 +ENCODING 34804 +BBX 15 16 0 -2 +BITMAP +240C +FF70 +2440 +3C40 +247E +3C48 +2448 +FF48 +2448 +4288 +0100 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni87F5 +ENCODING 34805 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2200 +FA04 +ABF4 +AA04 +AAEE +AAA4 +FAA4 +22F4 +2A0C +2AA4 +3AA4 +C4B4 +01CC +ENDCHAR +STARTCHAR uni87F6 +ENCODING 34806 +BBX 15 15 1 -1 +BITMAP +2000 +27E0 +225E +FBD2 +AA52 +ABD2 +AA5E +AFC0 +F84C +21F0 +2820 +29FC +3420 +C420 +03FE +ENDCHAR +STARTCHAR uni87F7 +ENCODING 34807 +BBX 15 15 1 -1 +BITMAP +2124 +2124 +20A8 +FBFE +AA02 +AAFA +A888 +A8F8 +F800 +21FC +2924 +29FC +3524 +C524 +01FC +ENDCHAR +STARTCHAR uni87F8 +ENCODING 34808 +BBX 15 16 0 -2 +BITMAP +7FFC +0600 +3B08 +04B0 +19C0 +62A0 +0C98 +7286 +1120 +7EFC +52A4 +7EFC +1020 +1424 +FEFE +0202 +ENDCHAR +STARTCHAR uni87F9 +ENCODING 34809 +BBX 15 15 1 -1 +BITMAP +0800 +1EF8 +6448 +3E48 +2A90 +3EF8 +2A50 +3EFC +4210 +3FF8 +2108 +3FF8 +0108 +03FC +FC02 +ENDCHAR +STARTCHAR uni87FA +ENCODING 34810 +BBX 15 16 0 -2 +BITMAP +1010 +11FE +1000 +7DFE +5502 +557A +554A +55FE +7C00 +50FC +1084 +14FC +1E84 +E2FC +4000 +01FE +ENDCHAR +STARTCHAR uni87FB +ENCODING 34811 +BBX 15 15 1 -1 +BITMAP +2110 +20A0 +27FC +F840 +ABF8 +A840 +AFFE +F888 +2324 +2120 +2FFE +2924 +37A8 +C112 +036C +ENDCHAR +STARTCHAR uni87FC +ENCODING 34812 +BBX 15 16 0 -2 +BITMAP +2420 +FF20 +247E +7EC4 +8228 +7A10 +4A28 +7AC6 +0500 +1FF0 +1110 +1110 +1FF0 +0108 +7FFC +2004 +ENDCHAR +STARTCHAR uni87FD +ENCODING 34813 +BBX 15 16 0 -2 +BITMAP +1010 +1210 +117C +7C10 +54FE +5444 +5728 +55FE +7D10 +517C +1110 +15FE +1D10 +E510 +42FE +0400 +ENDCHAR +STARTCHAR uni87FE +ENCODING 34814 +BBX 15 15 1 -1 +BITMAP +2080 +21F8 +2610 +FBFE +AA48 +AB8E +AA78 +AA00 +FBFE +2200 +2A78 +2A00 +34FC +C484 +00FC +ENDCHAR +STARTCHAR uni87FF +ENCODING 34815 +BBX 15 16 0 -2 +BITMAP +0878 +FFC8 +0848 +3E86 +2B78 +3E48 +2A28 +FF90 +4928 +7F46 +0100 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni8800 +ENCODING 34816 +BBX 15 16 0 -2 +BITMAP +1220 +113E +1042 +7C94 +5710 +5528 +5446 +55FC +7D04 +51FC +1104 +15FC +1D04 +E5FC +4088 +0104 +ENDCHAR +STARTCHAR uni8801 +ENCODING 34817 +BBX 15 15 1 -1 +BITMAP +1100 +17DE +2452 +CFD2 +5454 +27D2 +F412 +1796 +2450 +FFF8 +2108 +3FF8 +0108 +0134 +FFC2 +ENDCHAR +STARTCHAR uni8802 +ENCODING 34818 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +7C00 +5548 +57FE +5548 +5578 +7D00 +51FC +1020 +17FE +1C70 +E4A8 +4326 +0020 +ENDCHAR +STARTCHAR uni8803 +ENCODING 34819 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4000 +7FF8 +0000 +1FF0 +1010 +1FF0 +7278 +5FA8 +72A8 +5FF8 +722A +53AA +BE46 +ENDCHAR +STARTCHAR uni8804 +ENCODING 34820 +BBX 15 16 0 -2 +BITMAP +2020 +2050 +2088 +F924 +AEFA +A850 +A924 +A954 +F9FC +A020 +23FE +2A42 +3A92 +EAFA +420A +0206 +ENDCHAR +STARTCHAR uni8805 +ENCODING 34821 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +22A8 +FAA8 +ABB8 +A8A0 +A9B8 +AAA8 +FAA8 +23B8 +2AA8 +2AA8 +37B8 +C482 +007E +ENDCHAR +STARTCHAR uni8806 +ENCODING 34822 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1FF0 +1110 +7FFC +4124 +5FF4 +400C +3FF8 +2108 +3FF8 +0110 +01E8 +FE06 +ENDCHAR +STARTCHAR uni8807 +ENCODING 34823 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +23FE +F888 +A9FC +A924 +A9FC +A924 +F9FC +A020 +23FE +2A22 +3A2A +EAFA +420A +0206 +ENDCHAR +STARTCHAR uni8808 +ENCODING 34824 +BBX 14 16 1 -2 +BITMAP +0020 +F828 +8BFC +F920 +8928 +FBA8 +8914 +F914 +522C +8A44 +7FF0 +4210 +7FF0 +0210 +FFF8 +0008 +ENDCHAR +STARTCHAR uni8809 +ENCODING 34825 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1154 +7D54 +55FC +5400 +57FE +5400 +7DFC +5104 +11FC +1462 +1C94 +E588 +42A4 +00C2 +ENDCHAR +STARTCHAR uni880A +ENCODING 34826 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +FA28 +ABFE +AA50 +AAFC +AA54 +FBFE +2254 +2AFC +2A50 +34D8 +C554 +0050 +ENDCHAR +STARTCHAR uni880B +ENCODING 34827 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +22A4 +FAA4 +ABFC +A900 +ABFE +AA42 +FFFA +214A +29FA +2852 +3872 +C5CA +000C +ENDCHAR +STARTCHAR uni880C +ENCODING 34828 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1154 +7DFC +5420 +55FC +5420 +57FE +7C88 +5050 +11FC +1420 +1FFE +E420 +4020 +0020 +ENDCHAR +STARTCHAR uni880D +ENCODING 34829 +BBX 15 15 1 -1 +BITMAP +2010 +23D0 +225E +FBD2 +AA6A +AA6C +ABC8 +A908 +FBC8 +2448 +2D54 +2554 +3ED4 +C752 +00E2 +ENDCHAR +STARTCHAR uni880E +ENCODING 34830 +BBX 15 15 1 -1 +BITMAP +2088 +23FE +2088 +F820 +ABFE +A850 +A888 +AB26 +F8F8 +2020 +2888 +2BFE +3488 +C508 +0208 +ENDCHAR +STARTCHAR uni880F +ENCODING 34831 +BBX 15 15 1 -1 +BITMAP +2200 +23BE +2492 +F912 +AF92 +AAA2 +AAC6 +AF88 +FAA8 +2ABE +2FC8 +2888 +38BE +C888 +1188 +ENDCHAR +STARTCHAR uni8810 +ENCODING 34832 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F8A0 +AF5E +AD54 +A954 +AB5A +F800 +2108 +29F8 +2908 +35F8 +C208 +0408 +ENDCHAR +STARTCHAR uni8811 +ENCODING 34833 +BBX 15 15 1 -1 +BITMAP +2088 +22AA +22AA +F954 +AA22 +A800 +ABFE +AA02 +F820 +23FE +28A8 +28A8 +3524 +C622 +0020 +ENDCHAR +STARTCHAR uni8812 +ENCODING 34834 +BBX 15 16 0 -2 +BITMAP +7FFC +2108 +7FFC +B55A +2928 +3558 +2108 +3558 +2928 +3558 +0100 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni8813 +ENCODING 34835 +BBX 15 15 1 -1 +BITMAP +2088 +23FE +2088 +FBFE +AA02 +AAFA +A800 +ABFE +F840 +23A2 +2874 +2B98 +3878 +C794 +0062 +ENDCHAR +STARTCHAR uni8814 +ENCODING 34836 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +27FE +F908 +A9F8 +A800 +ABFC +AA04 +FAF4 +2060 +29B2 +2854 +35B8 +C454 +03B2 +ENDCHAR +STARTCHAR uni8815 +ENCODING 34837 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2020 +FBFE +AA22 +ABBA +AA22 +A800 +FBFE +2040 +2BFE +2A92 +3692 +C692 +0296 +ENDCHAR +STARTCHAR uni8816 +ENCODING 34838 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +27FE +F908 +A920 +ABFE +AE20 +ABFC +FA20 +23FE +2800 +2BFC +3508 +C4F0 +070E +ENDCHAR +STARTCHAR uni8817 +ENCODING 34839 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2042 +FA52 +A94A +AA52 +A890 +A908 +FBFE +A510 +21FE +2910 +39FE +E910 +41FE +0100 +ENDCHAR +STARTCHAR uni8818 +ENCODING 34840 +BBX 15 16 0 -2 +BITMAP +2110 +2114 +23F2 +F910 +AFFE +AA90 +AA50 +AFF4 +FA94 +A3F4 +2294 +2BE8 +3A8A +EBFA +4226 +0042 +ENDCHAR +STARTCHAR uni8819 +ENCODING 34841 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +FA02 +A9FC +A948 +AA50 +A9FC +FB04 +A1FC +2104 +29FC +3904 +E9FC +4088 +0104 +ENDCHAR +STARTCHAR uni881A +ENCODING 34842 +BBX 15 16 0 -2 +BITMAP +0820 +7FFC +0820 +0200 +FFFE +0800 +1FF0 +2810 +C810 +0FF0 +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni881B +ENCODING 34843 +BBX 15 16 0 -2 +BITMAP +1048 +11FE +1048 +7C00 +55FE +554A +554A +55FE +7C14 +51FE +1110 +1592 +1D4C +E54A +4116 +0222 +ENDCHAR +STARTCHAR uni881C +ENCODING 34844 +BBX 15 16 0 -2 +BITMAP +2288 +2108 +FABE +2008 +729C +A92A +2288 +FFFE +0820 +3018 +C106 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni881D +ENCODING 34845 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2124 +F9FC +A924 +A9FC +A904 +A800 +FBFE +A2AA +22AA +2BFE +3AAA +EAAA +43FE +0222 +ENDCHAR +STARTCHAR uni881E +ENCODING 34846 +BBX 15 16 0 -2 +BITMAP +2040 +3F7E +4890 +BF7C +2144 +3F44 +2144 +3F54 +2448 +3A40 +0100 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni881F +ENCODING 34847 +BBX 15 15 1 -1 +BITMAP +2124 +2248 +2124 +FBF8 +AAA8 +AA48 +AAA8 +ABF8 +F800 +2368 +2AD8 +2B68 +3AD8 +C76A +0446 +ENDCHAR +STARTCHAR uni8820 +ENCODING 34848 +BBX 14 15 0 -2 +BITMAP +7FFC +0200 +3FF8 +2448 +27C8 +2448 +27C8 +2448 +3FF8 +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni8821 +ENCODING 34849 +BBX 15 15 1 -1 +BITMAP +0400 +0FF0 +0820 +FFFE +0600 +3908 +0690 +3960 +0658 +19D6 +7E7C +5254 +7E7C +1414 +FAFA +ENDCHAR +STARTCHAR uni8822 +ENCODING 34850 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0200 +3FF8 +0440 +FFFE +0820 +3FF8 +C816 +7FFC +5254 +7E7C +1414 +FAFA +ENDCHAR +STARTCHAR uni8823 +ENCODING 34851 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1144 +7DFE +5544 +557C +5554 +557C +7D54 +117C +1510 +16FE +1A92 +E29A +00A6 +ENDCHAR +STARTCHAR uni8824 +ENCODING 34852 +BBX 15 16 0 -2 +BITMAP +0820 +0440 +FFFE +0440 +3FF8 +2848 +3038 +27C8 +2008 +3FF8 +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni8825 +ENCODING 34853 +BBX 15 16 0 -2 +BITMAP +5210 +7EFE +2844 +7E28 +A2FE +3E10 +2010 +3E7C +2210 +3E10 +0100 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni8826 +ENCODING 34854 +BBX 15 16 0 -2 +BITMAP +2040 +207C +2040 +FBFC +AA44 +ABF0 +AA44 +AAFC +FAA8 +A2F8 +22A8 +2AF8 +3A00 +EDFC +4554 +0BFE +ENDCHAR +STARTCHAR uni8827 +ENCODING 34855 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +0100 +1FF8 +0000 +7FFC +4404 +1FF8 +6408 +7FFE +5252 +7E7E +1414 +FAFA +ENDCHAR +STARTCHAR uni8828 +ENCODING 34856 +BBX 15 15 1 -1 +BITMAP +2110 +2FFE +2110 +FBFC +A844 +AFFE +A844 +ABFC +F840 +2554 +27FC +2C44 +375C +C554 +0844 +ENDCHAR +STARTCHAR uni8829 +ENCODING 34857 +BBX 15 16 0 -2 +BITMAP +2210 +2110 +203A +FB92 +A814 +ABBE +A808 +AB90 +F83C +A3E4 +22A4 +2ABC +3AA4 +EBA4 +42BC +0024 +ENDCHAR +STARTCHAR uni882A +ENCODING 34858 +BBX 15 16 0 -2 +BITMAP +0840 +7F7C +1440 +FF7C +2204 +3E7C +2240 +3E7C +2242 +263E +0100 +3FF8 +2108 +3FF8 +0104 +7FFE +ENDCHAR +STARTCHAR uni882B +ENCODING 34859 +BBX 14 16 0 -2 +BITMAP +0704 +7824 +2524 +1E24 +6424 +1A24 +6524 +1904 +6514 +0208 +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni882C +ENCODING 34860 +BBX 15 16 0 -2 +BITMAP +2110 +2090 +23DE +F810 +AA5E +A982 +ABDE +A810 +FBDE +A250 +23DE +2A50 +3BDE +EA50 +4252 +02CE +ENDCHAR +STARTCHAR uni882D +ENCODING 34861 +BBX 15 16 0 -2 +BITMAP +2100 +13F0 +1510 +00E0 +775C +11F0 +1040 +13FC +2840 +47FE +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni882E +ENCODING 34862 +BBX 15 15 1 -1 +BITMAP +2000 +23DC +2294 +FAF6 +AB40 +AAFC +AA54 +AAA8 +FBF6 +2000 +2BDE +294A +38C6 +C75A +00C6 +ENDCHAR +STARTCHAR uni882F +ENCODING 34863 +BBX 15 16 0 -2 +BITMAP +0080 +7FFE +4200 +4FF8 +4888 +4FF8 +4908 +4FF8 +4280 +7FFC +4490 +5F7C +5554 +5F7C +4492 +BFFE +ENDCHAR +STARTCHAR uni8830 +ENCODING 34864 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +1000 +7DDC +5554 +55DC +5488 +57FE +7C88 +53FE +1088 +17FE +1C94 +E588 +42A4 +00C2 +ENDCHAR +STARTCHAR uni8831 +ENCODING 34865 +BBX 15 15 1 -1 +BITMAP +0100 +0FF0 +0910 +0FF0 +0108 +3FF4 +1010 +7E7E +5252 +7E7E +1414 +FFFA +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni8832 +ENCODING 34866 +BBX 15 15 1 -1 +BITMAP +0800 +45FC +4354 +BD54 +01FC +2880 +24FE +4322 +81FA +7D2A +55FA +542A +543A +5FC4 +E00C +ENDCHAR +STARTCHAR uni8833 +ENCODING 34867 +BBX 15 16 0 -2 +BITMAP +23DE +2252 +23DE +FA52 +ABDE +AA52 +ABDE +A98C +FA52 +A040 +27FE +2888 +3990 +E860 +40D8 +0304 +ENDCHAR +STARTCHAR uni8834 +ENCODING 34868 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +7DFC +5554 +55FC +5422 +55FC +7C28 +53FE +1040 +15FC +1E84 +E4FC +4084 +00FC +ENDCHAR +STARTCHAR uni8835 +ENCODING 34869 +BBX 15 16 0 -2 +BITMAP +2222 +23FE +2090 +F9FE +AB10 +ADFE +A910 +A9FE +F910 +A1FE +2100 +2BFE +3A8A +EB76 +4252 +0276 +ENDCHAR +STARTCHAR uni8836 +ENCODING 34870 +BBX 15 14 1 -1 +BITMAP +3E7C +2448 +FFFE +1428 +264A +FFFE +2008 +3FF8 +1008 +7FFC +5254 +7E7C +1414 +FAFA +ENDCHAR +STARTCHAR uni8837 +ENCODING 34871 +BBX 15 16 0 -2 +BITMAP +23DE +2252 +23DE +FA52 +ABDE +AA52 +ABDE +A890 +F9FE +A110 +23FE +2D10 +39FE +E910 +41FE +0100 +ENDCHAR +STARTCHAR uni8838 +ENCODING 34872 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +2088 +FBDE +AA52 +ABDE +A8A0 +A890 +F9FE +A120 +23FC +2D20 +39FC +E920 +41FE +0100 +ENDCHAR +STARTCHAR uni8839 +ENCODING 34873 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +0100 +1FF8 +1108 +7FFC +4404 +1FF8 +6408 +7FFE +5252 +7E7E +1414 +FAFA +ENDCHAR +STARTCHAR uni883A +ENCODING 34874 +BBX 15 16 0 -2 +BITMAP +7CF8 +1020 +FDFC +2850 +4488 +BFF6 +2010 +3FF0 +2010 +3FF0 +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni883B +ENCODING 34875 +BBX 15 15 1 -1 +BITMAP +2108 +47D0 +D034 +2388 +5816 +EBBA +2288 +6AAC +A7CA +0100 +3FF8 +2108 +3FF8 +0104 +FFFA +ENDCHAR +STARTCHAR uni883C +ENCODING 34876 +BBX 15 15 1 -1 +BITMAP +2000 +23BC +22A4 +FBBC +AAA4 +ABFE +AE20 +ABFC +FA20 +23FC +2A20 +2BFE +3F08 +C4F0 +030E +ENDCHAR +STARTCHAR uni883D +ENCODING 34877 +BBX 15 16 0 -2 +BITMAP +0828 +2A24 +4D2E +0870 +1424 +3F24 +6428 +BF12 +242A +3F46 +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni883E +ENCODING 34878 +BBX 15 16 0 -2 +BITMAP +23FE +2202 +23FE +FA92 +AA54 +AA92 +AAFE +AAAA +FAFE +A322 +22FA +2AAA +3AFA +EA22 +45FA +0004 +ENDCHAR +STARTCHAR uni883F +ENCODING 34879 +BBX 14 16 0 -2 +BITMAP +2490 +79E4 +1454 +7DFC +0004 +FFFC +2494 +79E4 +1454 +FFFC +1020 +7CF8 +54A8 +7CF8 +1224 +FEFC +ENDCHAR +STARTCHAR uni8840 +ENCODING 34880 +BBX 15 14 1 0 +BITMAP +0100 +0200 +0200 +3FF8 +2448 +2448 +2448 +2448 +2448 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni8841 +ENCODING 34881 +BBX 15 15 0 -1 +BITMAP +0200 +0100 +FFFE +1000 +1000 +1000 +1FF8 +0100 +0200 +3FF8 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni8842 +ENCODING 34882 +BBX 15 15 1 -1 +BITMAP +0800 +08FC +1024 +7F24 +5524 +55A4 +5564 +5524 +5524 +5534 +554C +57C4 +F846 +0084 +0118 +ENDCHAR +STARTCHAR uni8843 +ENCODING 34883 +BBX 15 16 0 -2 +BITMAP +0800 +0800 +10FE +7F10 +5510 +5520 +5530 +5558 +5554 +5592 +5512 +5510 +5790 +FC10 +0010 +0010 +ENDCHAR +STARTCHAR uni8844 +ENCODING 34884 +BBX 15 14 1 0 +BITMAP +0800 +08FC +1024 +7F24 +5524 +5524 +5524 +55FE +5524 +5524 +5524 +57A4 +F824 +01FE +ENDCHAR +STARTCHAR uni8845 +ENCODING 34885 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +1094 +7F54 +5558 +5510 +55FC +5510 +5510 +5510 +55FE +5510 +5790 +FC10 +0010 +0010 +ENDCHAR +STARTCHAR uni8846 +ENCODING 34886 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +3FF8 +2448 +2448 +FFFE +0040 +1088 +2310 +CDA0 +0140 +1120 +2118 +C106 +0100 +ENDCHAR +STARTCHAR uni8847 +ENCODING 34887 +BBX 15 16 0 -2 +BITMAP +0804 +080E +1070 +7F40 +5546 +5558 +5554 +5554 +5556 +5554 +5554 +5554 +57D2 +FC92 +0098 +0110 +ENDCHAR +STARTCHAR uni8848 +ENCODING 34888 +BBX 15 16 0 -2 +BITMAP +0800 +087E +1024 +7F24 +553C +5524 +5524 +553C +5524 +5524 +5526 +557C +5784 +FC04 +0004 +0004 +ENDCHAR +STARTCHAR uni8849 +ENCODING 34889 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +103C +7F44 +55A8 +5510 +5528 +5544 +5582 +557C +5544 +5544 +57C4 +FC44 +007C +0044 +ENDCHAR +STARTCHAR uni884A +ENCODING 34890 +BBX 15 15 1 -1 +BITMAP +0848 +0848 +11FE +7F48 +55FC +5554 +5554 +55FC +550A +55FE +5508 +57CC +7D28 +C11A +0266 +ENDCHAR +STARTCHAR uni884B +ENCODING 34891 +BBX 15 16 0 -2 +BITMAP +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +7D7C +1110 +7D7C +4444 +7C7C +4544 +7FFC +2448 +FFFE +ENDCHAR +STARTCHAR uni884C +ENCODING 34892 +BBX 15 15 1 -1 +BITMAP +1000 +23FC +4000 +8000 +1000 +17FE +2010 +6010 +A010 +2010 +2010 +2010 +2010 +2010 +2070 +ENDCHAR +STARTCHAR uni884D +ENCODING 34893 +BBX 15 15 1 -1 +BITMAP +1200 +213C +4080 +8000 +0400 +127E +2108 +6008 +A088 +2088 +2108 +2108 +2208 +2208 +2438 +ENDCHAR +STARTCHAR uni884E +ENCODING 34894 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +27DC +4100 +8100 +1100 +213E +6108 +AFE8 +2108 +2108 +2108 +2108 +2108 +2128 +2110 +ENDCHAR +STARTCHAR uni884F +ENCODING 34895 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +2F9C +4000 +8000 +1FC0 +253E +6508 +A508 +2508 +2548 +2988 +2908 +3008 +2028 +2010 +ENDCHAR +STARTCHAR uni8850 +ENCODING 34896 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +27DC +4400 +8400 +1780 +24BE +6488 +A488 +2788 +2408 +2408 +27C8 +2008 +2028 +2010 +ENDCHAR +STARTCHAR uni8851 +ENCODING 34897 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +229C +4240 +8420 +1900 +20BE +6008 +AFC8 +2048 +2088 +2508 +2208 +2108 +2128 +2010 +ENDCHAR +STARTCHAR uni8852 +ENCODING 34898 +BBX 15 15 1 -1 +BITMAP +1100 +211E +4100 +8FE0 +0100 +121E +2204 +6C84 +A284 +2104 +2104 +2244 +2244 +25A4 +2E2C +ENDCHAR +STARTCHAR uni8853 +ENCODING 34899 +BBX 15 15 1 -1 +BITMAP +1100 +219C +4140 +8100 +1780 +213E +6108 +A508 +2588 +2548 +2948 +2908 +2108 +2108 +2138 +ENDCHAR +STARTCHAR uni8854 +ENCODING 34900 +BBX 15 16 0 -2 +BITMAP +1200 +1200 +239C +4200 +8400 +1780 +2A3E +6208 +AF88 +2208 +2208 +2208 +2288 +2308 +2228 +2010 +ENDCHAR +STARTCHAR uni8855 +ENCODING 34901 +BBX 15 16 0 -2 +BITMAP +2000 +2FE0 +482E +4820 +8BA0 +1820 +283E +6BA4 +AAA4 +2AA4 +2AA4 +2BA4 +2824 +2824 +28B4 +2848 +ENDCHAR +STARTCHAR uni8856 +ENCODING 34902 +BBX 15 16 0 -2 +BITMAP +1480 +1480 +249C +4480 +9FE0 +1480 +24BE +6488 +A488 +2FE8 +2008 +2488 +2448 +2848 +3008 +2018 +ENDCHAR +STARTCHAR uni8857 +ENCODING 34903 +BBX 15 15 1 -1 +BITMAP +1200 +221C +4FC0 +8200 +1200 +223E +6FC8 +A208 +2208 +2FC8 +2208 +2208 +22C8 +2308 +2C38 +ENDCHAR +STARTCHAR uni8858 +ENCODING 34904 +BBX 15 15 1 -1 +BITMAP +1200 +121E +23C0 +4500 +8900 +1100 +17DE +2104 +6104 +A5E4 +2504 +2504 +2564 +2584 +2E1C +ENDCHAR +STARTCHAR uni8859 +ENCODING 34905 +BBX 15 15 1 -1 +BITMAP +1000 +27DE +4100 +8100 +07C0 +125E +2244 +6FE4 +A004 +27E4 +2424 +2424 +2424 +27E4 +200C +ENDCHAR +STARTCHAR uni885A +ENCODING 34906 +BBX 15 16 0 -2 +BITMAP +1400 +14E0 +24AE +4EA0 +84A0 +14E0 +24BE +6EA4 +AAA4 +2AE4 +2AA4 +2AA4 +2EA4 +2124 +2134 +2268 +ENDCHAR +STARTCHAR uni885B +ENCODING 34907 +BBX 15 15 1 -1 +BITMAP +1100 +211C +47C0 +8240 +1FE0 +201E +67C8 +A448 +27C8 +2088 +2FE8 +2488 +3FF8 +2088 +2098 +ENDCHAR +STARTCHAR uni885C +ENCODING 34908 +BBX 15 16 0 -2 +BITMAP +1440 +1280 +2FEE +4100 +8200 +17C0 +245E +6444 +A7C4 +2444 +2444 +27C4 +2444 +2444 +27D4 +2448 +ENDCHAR +STARTCHAR uni885D +ENCODING 34909 +BBX 15 15 1 -1 +BITMAP +10C0 +273C +4100 +8FC0 +1100 +2FFE +6948 +AFC8 +2948 +2FC8 +2108 +2FC8 +2108 +21C8 +3E18 +ENDCHAR +STARTCHAR uni885E +ENCODING 34910 +BBX 15 15 1 -1 +BITMAP +1100 +27DE +4240 +8FE0 +0000 +17DE +2444 +67C4 +A004 +2FF4 +2104 +27E4 +2524 +2564 +210C +ENDCHAR +STARTCHAR uni885F +ENCODING 34911 +BBX 15 15 1 -1 +BITMAP +1540 +255C +4A80 +8A80 +1540 +155E +2FE8 +6208 +A7C8 +2448 +27C8 +2448 +27C8 +2448 +27D8 +ENDCHAR +STARTCHAR uni8860 +ENCODING 34912 +BBX 15 16 0 -2 +BITMAP +1100 +1100 +2FEE +4100 +87C0 +1440 +27DE +6444 +A7C4 +2444 +27C4 +2444 +2FE4 +2284 +2454 +2828 +ENDCHAR +STARTCHAR uni8861 +ENCODING 34913 +BBX 15 15 1 -1 +BITMAP +1200 +23BC +4480 +8900 +17FE +2548 +67C8 +A548 +2548 +27C8 +2108 +2FC8 +2288 +2448 +2818 +ENDCHAR +STARTCHAR uni8862 +ENCODING 34914 +BBX 15 15 1 -1 +BITMAP +2000 +4EEE +8AA0 +0EE0 +0AA0 +2EEE +4AA4 +CEE4 +4484 +4FE4 +5904 +6FC4 +4904 +4FE4 +400C +ENDCHAR +STARTCHAR uni8863 +ENCODING 34915 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +FFFE +0280 +0480 +0884 +1848 +2850 +C820 +0820 +0810 +0B08 +0C04 +7002 +ENDCHAR +STARTCHAR uni8864 +ENCODING 34916 +BBX 12 15 3 -1 +BITMAP +0400 +0400 +0400 +7FC0 +0040 +0080 +0100 +0240 +0680 +1D00 +E4C0 +0430 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni8865 +ENCODING 34917 +BBX 13 16 1 -2 +BITMAP +2080 +1080 +0080 +FC80 +0480 +08C0 +10A0 +3490 +5888 +9488 +1480 +1080 +1080 +1080 +1080 +1080 +ENDCHAR +STARTCHAR uni8866 +ENCODING 34918 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0020 +F820 +0820 +1020 +1420 +3BFE +5420 +9020 +1020 +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni8867 +ENCODING 34919 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0020 +F820 +0820 +1020 +1420 +3BFE +5420 +9020 +1020 +1020 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni8868 +ENCODING 34920 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0100 +FFFE +0280 +0C84 +3848 +C850 +0820 +0810 +0F08 +7806 +ENDCHAR +STARTCHAR uni8869 +ENCODING 34921 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1104 +FD44 +0524 +0524 +0888 +1088 +3A50 +5450 +9220 +1050 +1088 +1104 +1602 +ENDCHAR +STARTCHAR uni886A +ENCODING 34922 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +F920 +092C +1134 +1164 +37A4 +5924 +9534 +1528 +1122 +1122 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni886B +ENCODING 34923 +BBX 15 15 1 -1 +BITMAP +1008 +1010 +1060 +FD80 +0404 +0408 +0830 +10C0 +3A00 +5402 +9204 +1008 +1010 +1060 +1380 +ENDCHAR +STARTCHAR uni886C +ENCODING 34924 +BBX 15 16 0 -2 +BITMAP +2010 +1010 +0010 +FC10 +09FE +1010 +1010 +3410 +5910 +9490 +1490 +1010 +1010 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni886D +ENCODING 34925 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FC20 +09FC +1020 +1020 +3420 +5BFE +9420 +1450 +1050 +1088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni886E +ENCODING 34926 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0000 +0820 +1210 +2448 +4824 +1FF0 +0290 +0444 +0C28 +3410 +C508 +0606 +0400 +ENDCHAR +STARTCHAR uni886F +ENCODING 34927 +BBX 15 15 1 -1 +BITMAP +2030 +2090 +2090 +F908 +0908 +0A04 +1402 +11F8 +3488 +6888 +A488 +2088 +2108 +2108 +2270 +ENDCHAR +STARTCHAR uni8870 +ENCODING 34928 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0000 +1FF0 +1010 +FFFE +1010 +1FF4 +0D08 +3890 +C8A0 +0840 +0F30 +780E +ENDCHAR +STARTCHAR uni8871 +ENCODING 34929 +BBX 15 16 0 -2 +BITMAP +2000 +13FC +0084 +F888 +0888 +1090 +109C +3484 +5944 +9544 +1528 +1128 +1210 +1228 +1444 +1182 +ENDCHAR +STARTCHAR uni8872 +ENCODING 34930 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +1020 +FDFC +0524 +0524 +0924 +1154 +3B54 +558C +9304 +1104 +1104 +1104 +110C +ENDCHAR +STARTCHAR uni8873 +ENCODING 34931 +BBX 15 16 0 -2 +BITMAP +2010 +1090 +0090 +F888 +0888 +1124 +1524 +3A22 +5440 +9040 +1088 +1084 +1104 +13FE +1102 +1000 +ENDCHAR +STARTCHAR uni8874 +ENCODING 34932 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FDFE +0922 +1224 +1020 +3420 +5850 +9450 +1450 +1050 +1090 +1092 +1112 +120E +ENDCHAR +STARTCHAR uni8875 +ENCODING 34933 +BBX 14 15 1 -1 +BITMAP +1000 +11FC +1104 +FD04 +0504 +0504 +0904 +11FC +3B04 +5504 +9304 +1104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni8876 +ENCODING 34934 +BBX 14 16 0 -2 +BITMAP +2020 +1020 +0020 +FC20 +09FC +1124 +1124 +3524 +5924 +95FC +1524 +1020 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni8877 +ENCODING 34935 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +2108 +2108 +3FF8 +0282 +0C84 +3848 +C850 +0820 +0F18 +7806 +ENDCHAR +STARTCHAR uni8878 +ENCODING 34936 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +00A0 +F8A0 +0910 +1208 +1406 +3110 +5510 +9910 +1510 +1110 +1110 +1210 +1210 +1410 +ENDCHAR +STARTCHAR uni8879 +ENCODING 34937 +BBX 15 16 0 -2 +BITMAP +2004 +101E +01F0 +FD10 +0910 +1110 +1110 +35FE +5910 +9510 +1510 +1108 +110A +114A +1186 +1102 +ENDCHAR +STARTCHAR uni887A +ENCODING 34938 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0000 +7FFC +2040 +3FFE +0240 +0D40 +7080 +0308 +0490 +0C60 +3518 +C606 +0400 +ENDCHAR +STARTCHAR uni887B +ENCODING 34939 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +0084 +FC84 +0884 +11FE +1084 +3484 +5884 +95FE +1484 +1084 +1084 +1084 +1094 +1088 +ENDCHAR +STARTCHAR uni887C +ENCODING 34940 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FBFE +0820 +1020 +1020 +35FC +5884 +9488 +1448 +1050 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni887D +ENCODING 34941 +BBX 15 15 1 -1 +BITMAP +1000 +101C +11E0 +FC20 +0420 +0420 +0820 +13FE +3A20 +5420 +9220 +1020 +1020 +1020 +11FC +ENDCHAR +STARTCHAR uni887E +ENCODING 34942 +BBX 15 15 1 -1 +BITMAP +0100 +06C0 +1830 +E7CE +0000 +1FF0 +0020 +0040 +0100 +FFFE +0444 +1848 +E830 +0F18 +7806 +ENDCHAR +STARTCHAR uni887F +ENCODING 34943 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1050 +FC88 +0504 +067A +0800 +1000 +3AFC +5404 +9204 +1008 +1008 +1010 +1020 +ENDCHAR +STARTCHAR uni8880 +ENCODING 34944 +BBX 14 16 0 -2 +BITMAP +2040 +1040 +0080 +FCFC +0904 +1204 +1084 +3444 +5844 +9414 +1424 +1044 +1184 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni8881 +ENCODING 34945 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +0484 +1888 +E850 +0F30 +380E +ENDCHAR +STARTCHAR uni8882 +ENCODING 34946 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FDFC +0424 +0424 +0824 +1224 +3BFE +5420 +9250 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni8883 +ENCODING 34947 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2C44 +F044 +2084 +2484 +2914 +3208 +0100 +FFFE +0500 +0C88 +3450 +C530 +060E +0400 +ENDCHAR +STARTCHAR uni8884 +ENCODING 34948 +BBX 15 16 0 -2 +BITMAP +2008 +103C +01E0 +FC20 +0820 +1020 +11FE +3420 +5820 +9450 +1450 +1050 +1088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni8885 +ENCODING 34949 +BBX 15 16 0 -2 +BITMAP +0400 +1FE0 +1420 +12A0 +1040 +1FFC +0004 +0214 +0108 +FFFE +0500 +0C88 +3450 +C530 +060E +0400 +ENDCHAR +STARTCHAR uni8886 +ENCODING 34950 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FDFE +0820 +1020 +10FC +3420 +5820 +95FE +1422 +1022 +102A +1024 +1020 +1020 +ENDCHAR +STARTCHAR uni8887 +ENCODING 34951 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +0084 +FC84 +08A4 +1094 +1094 +3484 +59FE +9484 +1484 +1084 +1084 +1104 +1114 +1208 +ENDCHAR +STARTCHAR uni8888 +ENCODING 34952 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +FE7C +2244 +2244 +4244 +8E7C +0200 +FFFC +0900 +3108 +D090 +1060 +1E30 +F00C +ENDCHAR +STARTCHAR uni8889 +ENCODING 34953 +BBX 15 16 0 -2 +BITMAP +2020 +1010 +0010 +F9FE +0902 +1204 +1080 +3488 +5890 +94A0 +14C0 +1082 +1082 +1082 +107E +1000 +ENDCHAR +STARTCHAR uni888A +ENCODING 34954 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0050 +F850 +0888 +1124 +1212 +3010 +55FC +9804 +1408 +1088 +1050 +1020 +1010 +1010 +ENDCHAR +STARTCHAR uni888B +ENCODING 34955 +BBX 15 15 1 -1 +BITMAP +0848 +1044 +307E +D7C0 +1022 +1012 +110C +0100 +FFFE +0280 +0C44 +3828 +C810 +0F08 +3806 +ENDCHAR +STARTCHAR uni888C +ENCODING 34956 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0800 +1FF0 +2010 +5F90 +10D0 +1FA0 +1004 +0FFC +0300 +0488 +0C50 +3530 +C60E +0400 +ENDCHAR +STARTCHAR uni888D +ENCODING 34957 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +10FC +FC84 +0504 +05F4 +0A14 +1014 +3AF4 +5484 +9298 +1080 +1082 +1082 +107E +ENDCHAR +STARTCHAR uni888E +ENCODING 34958 +BBX 14 16 0 -2 +BITMAP +2020 +1120 +0120 +F220 +12FC +24A4 +2724 +6924 +B224 +2A24 +24A4 +27A4 +20C4 +2044 +2094 +2108 +ENDCHAR +STARTCHAR uni888F +ENCODING 34959 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +0040 +FC40 +0BFE +1040 +1080 +3480 +58FE +9510 +1510 +1210 +1210 +1410 +11FE +1000 +ENDCHAR +STARTCHAR uni8890 +ENCODING 34960 +BBX 15 16 0 -2 +BITMAP +2000 +1040 +0020 +F828 +0808 +1088 +1490 +3A94 +56A2 +92A2 +14C2 +1088 +1188 +1288 +1478 +1000 +ENDCHAR +STARTCHAR uni8891 +ENCODING 34961 +BBX 14 16 0 -2 +BITMAP +2000 +13FC +0084 +F884 +0884 +1104 +1514 +3A08 +5400 +91FC +1104 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni8892 +ENCODING 34962 +BBX 15 15 1 -1 +BITMAP +1000 +10F8 +1088 +FC88 +0488 +0488 +08F8 +1088 +3A88 +5488 +9288 +10F8 +1000 +1000 +13FE +ENDCHAR +STARTCHAR uni8893 +ENCODING 34963 +BBX 15 16 0 -2 +BITMAP +2000 +11F8 +0108 +FD08 +0908 +11F8 +1108 +3508 +5908 +95F8 +1508 +1108 +1108 +1108 +17FE +1000 +ENDCHAR +STARTCHAR uni8894 +ENCODING 34964 +BBX 15 16 0 -2 +BITMAP +2000 +1000 +03FE +F808 +0808 +11E8 +1128 +3528 +5928 +9528 +15E8 +1128 +1008 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni8895 +ENCODING 34965 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +0020 +FBFE +0A02 +1404 +1000 +3490 +5890 +9490 +1488 +1108 +1108 +1104 +1204 +1402 +ENDCHAR +STARTCHAR uni8896 +ENCODING 34966 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2020 +F820 +0BFE +0A22 +1222 +1222 +3622 +6BFE +A622 +2222 +2222 +2222 +23FE +ENDCHAR +STARTCHAR uni8897 +ENCODING 34967 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2050 +F888 +0904 +0A22 +1040 +1188 +3410 +6860 +A584 +2008 +2010 +2060 +2380 +ENDCHAR +STARTCHAR uni8898 +ENCODING 34968 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +2100 +FBFE +0A00 +0A20 +152C +1134 +35E4 +6B24 +A52C +2120 +2122 +2102 +20FE +ENDCHAR +STARTCHAR uni8899 +ENCODING 34969 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +1040 +FDFC +0504 +0504 +0904 +1104 +3BFC +5504 +9304 +1104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni889A +ENCODING 34970 +BBX 15 16 0 -2 +BITMAP +2050 +1048 +0048 +FC40 +0BFE +1080 +1080 +34FC +5944 +9544 +1528 +1128 +1210 +1228 +1444 +1182 +ENDCHAR +STARTCHAR uni889B +ENCODING 34971 +BBX 15 16 0 -2 +BITMAP +2004 +101E +01F0 +FD10 +0910 +1110 +1110 +35FE +5910 +9510 +1510 +1108 +110A +114A +11A6 +1112 +ENDCHAR +STARTCHAR uni889C +ENCODING 34972 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FDFE +0820 +1020 +1020 +35FC +5870 +94A8 +14A8 +1124 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni889D +ENCODING 34973 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +0088 +F908 +097E +1308 +1508 +3148 +5528 +9928 +1508 +1108 +1108 +1108 +1128 +1110 +ENDCHAR +STARTCHAR uni889E +ENCODING 34974 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0820 +3018 +DFF6 +1010 +1010 +1FF0 +0484 +0888 +3850 +C820 +0F18 +3806 +ENDCHAR +STARTCHAR uni889F +ENCODING 34975 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0120 +F920 +09FC +1120 +1220 +3020 +55FE +9820 +1450 +1050 +1088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni88A0 +ENCODING 34976 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +1100 +1FF8 +2100 +FFFE +0440 +1830 +E28E +0C80 +3844 +C828 +0F10 +380E +ENDCHAR +STARTCHAR uni88A1 +ENCODING 34977 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +F9FC +0924 +1124 +15FC +3924 +5524 +9124 +13FE +1104 +1104 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni88A2 +ENCODING 34978 +BBX 15 15 1 -1 +BITMAP +1020 +1124 +10A4 +FCA8 +05FC +0420 +0820 +1220 +3BFE +5420 +9220 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni88A3 +ENCODING 34979 +BBX 15 16 0 -2 +BITMAP +2048 +1148 +0148 +F948 +0948 +13FE +1148 +3548 +5948 +9548 +1578 +1100 +1100 +1100 +11FE +1000 +ENDCHAR +STARTCHAR uni88A4 +ENCODING 34980 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0000 +3FF8 +0230 +0140 +FFFE +0284 +0C88 +7380 +0108 +0690 +F860 +0F18 +7806 +ENDCHAR +STARTCHAR uni88A5 +ENCODING 34981 +BBX 15 16 0 -2 +BITMAP +2000 +1000 +03FE +F820 +0820 +1040 +1440 +38FC +5584 +9284 +1484 +1084 +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni88A6 +ENCODING 34982 +BBX 14 16 0 -2 +BITMAP +2020 +1020 +0124 +FD24 +0924 +1124 +11FC +3420 +5820 +9524 +1524 +1124 +1124 +1124 +11FC +1004 +ENDCHAR +STARTCHAR uni88A7 +ENCODING 34983 +BBX 14 16 0 -2 +BITMAP +2080 +1080 +0100 +F9FC +0A04 +1404 +11E4 +3524 +5924 +9524 +15E4 +1124 +1004 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni88A8 +ENCODING 34984 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +0020 +FBFE +0840 +1040 +1088 +3508 +5BF0 +9420 +1440 +1088 +1104 +13FC +1104 +1000 +ENDCHAR +STARTCHAR uni88A9 +ENCODING 34985 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FC20 +083E +1020 +1020 +3420 +59FC +9504 +1504 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni88AA +ENCODING 34986 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +2040 +FBF8 +0840 +0840 +1040 +1440 +37FC +6880 +A4A0 +2090 +2108 +217C +2784 +ENDCHAR +STARTCHAR uni88AB +ENCODING 34987 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +FA22 +0A24 +0A20 +13FC +1284 +3684 +6A88 +A448 +2450 +2820 +2058 +2186 +ENDCHAR +STARTCHAR uni88AC +ENCODING 34988 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0800 +1010 +3FF8 +0008 +1FF0 +1010 +1010 +1FF0 +0488 +0850 +3820 +CB18 +0C06 +ENDCHAR +STARTCHAR uni88AD +ENCODING 34989 +BBX 15 16 0 -2 +BITMAP +0440 +0420 +FFFE +0910 +1160 +2184 +4F04 +82FC +0100 +FFFE +0500 +0C88 +3450 +C530 +060E +0400 +ENDCHAR +STARTCHAR uni88AE +ENCODING 34990 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +FDFE +0520 +0620 +0820 +1124 +3B24 +5524 +9222 +1222 +1020 +1020 +10E0 +ENDCHAR +STARTCHAR uni88AF +ENCODING 34991 +BBX 15 16 0 -2 +BITMAP +2040 +1048 +0244 +FA40 +0BFE +1080 +1480 +38FC +5544 +9144 +1148 +1250 +1220 +1450 +1888 +1306 +ENDCHAR +STARTCHAR uni88B0 +ENCODING 34992 +BBX 15 14 1 -1 +BITMAP +1FF0 +1090 +FFFE +2210 +2110 +3FFC +0020 +0260 +FFFE +0508 +0890 +F060 +1F18 +7006 +ENDCHAR +STARTCHAR uni88B1 +ENCODING 34993 +BBX 15 15 1 -1 +BITMAP +2090 +2094 +2094 +F912 +0910 +0B7E +1510 +1110 +3510 +6928 +A528 +2128 +2144 +2144 +2182 +ENDCHAR +STARTCHAR uni88B2 +ENCODING 34994 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0200 +0FE0 +34C0 +0700 +3880 +03F8 +1D30 +01C0 +3F00 +0488 +0C50 +3530 +C60E +0400 +ENDCHAR +STARTCHAR uni88B3 +ENCODING 34995 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +007C +FC84 +0948 +1030 +1020 +3448 +5990 +943E +1442 +11A4 +1018 +1010 +1060 +1180 +ENDCHAR +STARTCHAR uni88B4 +ENCODING 34996 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +F850 +0888 +0B06 +10F8 +1400 +37FE +6840 +A4FC +2104 +2004 +2004 +2038 +ENDCHAR +STARTCHAR uni88B5 +ENCODING 34997 +BBX 15 15 1 -1 +BITMAP +208C +20B0 +2090 +F910 +0910 +0B10 +15FE +1110 +3510 +6910 +A510 +2110 +2110 +2110 +217C +ENDCHAR +STARTCHAR uni88B6 +ENCODING 34998 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +00FC +F908 +0A90 +1060 +1198 +3626 +5820 +95FC +1420 +1220 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni88B7 +ENCODING 34999 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2050 +F888 +0B06 +0800 +10F8 +1000 +3400 +69FC +A504 +2104 +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni88B8 +ENCODING 35000 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +0040 +FBFE +0880 +1080 +1178 +3508 +5B10 +9510 +15FE +1110 +1110 +1110 +1150 +1120 +ENDCHAR +STARTCHAR uni88B9 +ENCODING 35001 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0020 +FC20 +0840 +11FC +1104 +3504 +5904 +95FC +1504 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni88BA +ENCODING 35002 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FBFE +0820 +1020 +11FC +3400 +5800 +95FC +1504 +1104 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni88BB +ENCODING 35003 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0020 +FC20 +0840 +11FC +1154 +3554 +5954 +9554 +1554 +1154 +1154 +1144 +1114 +1108 +ENDCHAR +STARTCHAR uni88BC +ENCODING 35004 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +10F8 +FC88 +0588 +0650 +0820 +1050 +3A88 +5506 +93FC +1104 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni88BD +ENCODING 35005 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +209E +FBD2 +0952 +0952 +1152 +1252 +3652 +6A92 +A792 +20D2 +2132 +221E +2400 +ENDCHAR +STARTCHAR uni88BE +ENCODING 35006 +BBX 15 15 1 -1 +BITMAP +2020 +20A0 +20A0 +F8FC +0920 +0A20 +1020 +13FE +34A8 +68A8 +A4A8 +2124 +2124 +2222 +2020 +ENDCHAR +STARTCHAR uni88BF +ENCODING 35007 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +11FC +FC20 +0420 +0420 +0BFE +1000 +3A20 +5420 +93FC +1020 +1020 +1020 +13FE +ENDCHAR +STARTCHAR uni88C0 +ENCODING 35008 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2202 +FA22 +0A22 +0AFA +1222 +1222 +3622 +6A52 +A652 +228A +2202 +2202 +23FE +ENDCHAR +STARTCHAR uni88C1 +ENCODING 35009 +BBX 15 15 1 -1 +BITMAP +0420 +0428 +7F28 +0424 +0420 +FFFE +0820 +0824 +7FA4 +1928 +3518 +D210 +112A +1CCA +3084 +ENDCHAR +STARTCHAR uni88C2 +ENCODING 35010 +BBX 15 15 1 -1 +BITMAP +0004 +7F44 +0844 +1644 +7244 +0A44 +0C04 +F11C +0100 +FFFE +0288 +0C50 +F820 +0F18 +3806 +ENDCHAR +STARTCHAR uni88C3 +ENCODING 35011 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +103C +FC20 +0420 +05FE +0800 +1200 +3BFE +5420 +9230 +102C +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni88C4 +ENCODING 35012 +BBX 15 15 1 -1 +BITMAP +2080 +209C +2100 +F900 +0A00 +0880 +10BE +1108 +3508 +6B08 +A508 +2108 +2108 +2108 +2118 +ENDCHAR +STARTCHAR uni88C5 +ENCODING 35013 +BBX 15 15 1 -1 +BITMAP +0820 +4820 +2BFE +0820 +3820 +C9FC +0800 +0100 +FFFE +0284 +0C84 +F848 +0830 +0F18 +7806 +ENDCHAR +STARTCHAR uni88C6 +ENCODING 35014 +BBX 14 16 0 -2 +BITMAP +2020 +1124 +00A4 +FCA4 +08A8 +1020 +13FC +3404 +5804 +9404 +15FC +1004 +1004 +1004 +13FC +1004 +ENDCHAR +STARTCHAR uni88C7 +ENCODING 35015 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0040 +F880 +09FC +1154 +1154 +3554 +5954 +9554 +1554 +1154 +1154 +1154 +13FE +1000 +ENDCHAR +STARTCHAR uni88C8 +ENCODING 35016 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0202 +FC44 +0840 +13FC +1080 +34A0 +5920 +95FC +1420 +1020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni88C9 +ENCODING 35017 +BBX 15 16 0 -2 +BITMAP +2000 +11F8 +0108 +F908 +09F8 +1108 +1108 +35F8 +5944 +9548 +1530 +1120 +1110 +1148 +1186 +1100 +ENDCHAR +STARTCHAR uni88CA +ENCODING 35018 +BBX 15 15 1 -1 +BITMAP +0200 +3FF0 +2010 +3FF0 +2010 +3FFE +2000 +3FFC +0004 +010C +FFFE +0488 +F850 +0F30 +780E +ENDCHAR +STARTCHAR uni88CB +ENCODING 35019 +BBX 15 16 0 -2 +BITMAP +2000 +13FC +0000 +FC00 +09F8 +1108 +1108 +3508 +59F8 +9400 +1508 +1088 +1090 +1000 +17FE +1000 +ENDCHAR +STARTCHAR uni88CC +ENCODING 35020 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FBFE +0820 +1020 +1124 +3524 +5924 +96AA +1420 +1050 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni88CD +ENCODING 35021 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0222 +FA22 +0A22 +13FE +1622 +3A62 +5672 +92AA +1322 +1222 +1222 +1202 +13FE +1202 +ENDCHAR +STARTCHAR uni88CE +ENCODING 35022 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +F908 +0908 +09F8 +1000 +141C +37E0 +6820 +A420 +21F8 +2020 +2020 +27FE +ENDCHAR +STARTCHAR uni88CF +ENCODING 35023 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0000 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0884 +F048 +1F30 +700E +ENDCHAR +STARTCHAR uni88D0 +ENCODING 35024 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +0084 +FC84 +08FC +1000 +11FE +3502 +5902 +95FE +1502 +1102 +11FE +1102 +110A +1104 +ENDCHAR +STARTCHAR uni88D1 +ENCODING 35025 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +21F8 +F908 +09F8 +0908 +1108 +11F8 +3508 +690E +A7F8 +2038 +20C8 +2708 +2038 +ENDCHAR +STARTCHAR uni88D2 +ENCODING 35026 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0000 +0600 +38F8 +2008 +3EF8 +2008 +3EF8 +0402 +1884 +E848 +0830 +0F18 +7806 +ENDCHAR +STARTCHAR uni88D3 +ENCODING 35027 +BBX 15 15 1 -1 +BITMAP +2028 +2024 +2020 +FBFE +0820 +0AA0 +12A4 +12A4 +37E8 +6AA8 +A690 +2290 +242A +20CA +2304 +ENDCHAR +STARTCHAR uni88D4 +ENCODING 35028 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0448 +1850 +E820 +0F18 +7806 +0000 +7FFC +4444 +487C +77C4 +4444 +47CC +ENDCHAR +STARTCHAR uni88D5 +ENCODING 35029 +BBX 15 15 1 -1 +BITMAP +2088 +2088 +2104 +FA22 +0820 +0850 +1088 +1306 +3400 +69FC +A504 +2104 +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni88D6 +ENCODING 35030 +BBX 15 16 0 -2 +BITMAP +2000 +11FE +0100 +FD00 +097C +1100 +1100 +35FE +5950 +9552 +1554 +1148 +1148 +1244 +1252 +1460 +ENDCHAR +STARTCHAR uni88D7 +ENCODING 35031 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FC +F840 +0890 +1108 +13FC +3004 +5550 +9950 +1550 +1150 +1250 +1252 +1452 +180E +ENDCHAR +STARTCHAR uni88D8 +ENCODING 35032 +BBX 15 15 1 -1 +BITMAP +0110 +0108 +FFFE +2108 +1190 +0740 +1930 +E30E +0100 +FFFE +0444 +1828 +E810 +0F08 +7806 +ENDCHAR +STARTCHAR uni88D9 +ENCODING 35033 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2048 +F848 +0FFE +0848 +1048 +13F8 +3480 +69FC +A304 +2504 +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni88DA +ENCODING 35034 +BBX 15 16 0 -2 +BITMAP +080C +08F0 +7E80 +0880 +0EFE +7888 +0888 +2908 +1208 +0100 +FFFE +0488 +0C50 +3420 +C518 +0606 +ENDCHAR +STARTCHAR uni88DB +ENCODING 35035 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0000 +1FF0 +1010 +3FF8 +2108 +3FF8 +2004 +1FFC +0284 +0C48 +F830 +0F18 +7806 +ENDCHAR +STARTCHAR uni88DC +ENCODING 35036 +BBX 15 15 1 -1 +BITMAP +2048 +2044 +27FE +F840 +0840 +0BFC +1244 +1244 +37FC +6A44 +A644 +23FC +2244 +2244 +224C +ENDCHAR +STARTCHAR uni88DD +ENCODING 35037 +BBX 15 15 1 -1 +BITMAP +4410 +4410 +7CFE +0410 +FC10 +2410 +447C +8400 +0100 +FFFE +0288 +0C50 +F820 +0F18 +7806 +ENDCHAR +STARTCHAR uni88DE +ENCODING 35038 +BBX 15 16 0 -2 +BITMAP +2104 +1084 +0088 +FC10 +09FC +1104 +1104 +3504 +59FC +9450 +1450 +1090 +1092 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni88DF +ENCODING 35039 +BBX 15 15 1 -1 +BITMAP +6020 +1128 +0224 +C422 +20E0 +0808 +3030 +C3C0 +0100 +FFFE +0484 +1898 +F040 +1E30 +700E +ENDCHAR +STARTCHAR uni88E0 +ENCODING 35040 +BBX 15 16 0 -2 +BITMAP +3FF8 +0208 +FFFE +0408 +3FF8 +0800 +1FF8 +2808 +CFF8 +0100 +FFFE +0488 +0C50 +3420 +C518 +0606 +ENDCHAR +STARTCHAR uni88E1 +ENCODING 35041 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2124 +F924 +09FC +0924 +1124 +11FC +3420 +6820 +A5FC +2020 +2020 +2020 +23FE +ENDCHAR +STARTCHAR uni88E2 +ENCODING 35042 +BBX 15 16 0 -2 +BITMAP +2010 +1210 +0110 +F97E +0820 +1028 +1748 +357E +5908 +9508 +15FE +1108 +1108 +1288 +147E +1000 +ENDCHAR +STARTCHAR uni88E3 +ENCODING 35043 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0050 +F888 +0904 +1202 +11FC +3400 +5844 +9424 +1124 +10A8 +1088 +1010 +13FE +1000 +ENDCHAR +STARTCHAR uni88E4 +ENCODING 35044 +BBX 15 16 0 -2 +BITMAP +2010 +1008 +01FE +FD10 +0910 +11FE +1120 +3528 +5948 +957E +1508 +1108 +11FE +1208 +1208 +1408 +ENDCHAR +STARTCHAR uni88E5 +ENCODING 35045 +BBX 15 16 0 -2 +BITMAP +2100 +10BE +0282 +F202 +1202 +22FA +228A +6A8A +B2FA +2A8A +228A +22FA +2202 +2202 +220A +2204 +ENDCHAR +STARTCHAR uni88E6 +ENCODING 35046 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0000 +19F8 +6090 +4060 +7BFC +40A4 +4128 +7A60 +0300 +0488 +0C50 +3530 +C60E +0400 +ENDCHAR +STARTCHAR uni88E7 +ENCODING 35047 +BBX 15 16 0 -2 +BITMAP +2020 +10A2 +00A2 +F924 +0850 +1088 +1304 +3022 +5420 +98A4 +14A4 +1128 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni88E8 +ENCODING 35048 +BBX 15 15 1 -1 +BITMAP +1010 +1020 +11FC +FD24 +0524 +05FC +0924 +1144 +3BFC +5490 +9310 +13FE +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni88E9 +ENCODING 35049 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0104 +FD04 +09FC +1104 +1104 +35FC +5800 +9512 +15D4 +1118 +1110 +1152 +1192 +110E +ENDCHAR +STARTCHAR uni88EA +ENCODING 35050 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +00FE +FD02 +0A82 +10F2 +1142 +3442 +5BFA +9442 +1552 +1152 +11F2 +1002 +1014 +1008 +ENDCHAR +STARTCHAR uni88EB +ENCODING 35051 +BBX 15 16 0 -2 +BITMAP +2050 +1252 +0252 +F252 +13DE +2202 +2202 +6BFE +B202 +2A02 +23DE +2252 +2252 +2252 +2452 +2802 +ENDCHAR +STARTCHAR uni88EC +ENCODING 35052 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +01FC +FC20 +0820 +13FE +1088 +3544 +5A42 +94F8 +1588 +1250 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni88ED +ENCODING 35053 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +003E +FC20 +09FE +1122 +1138 +35E0 +5922 +951E +1500 +1178 +1248 +124A +148A +1906 +ENDCHAR +STARTCHAR uni88EE +ENCODING 35054 +BBX 15 16 0 -2 +BITMAP +20FC +1084 +0084 +FCFC +0884 +1084 +10FC +3400 +59FE +9502 +1502 +11FE +1102 +1102 +11FE +1102 +ENDCHAR +STARTCHAR uni88EF +ENCODING 35055 +BBX 14 16 0 -2 +BITMAP +2000 +11FC +0124 +FD24 +0974 +1124 +11FC +3504 +5974 +9554 +1554 +1174 +1104 +1204 +1214 +1408 +ENDCHAR +STARTCHAR uni88F0 +ENCODING 35056 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +2084 +FAB4 +0908 +1294 +1422 +2800 +37BC +6884 +A4A4 +2318 +2108 +2294 +2C62 +ENDCHAR +STARTCHAR uni88F1 +ENCODING 35057 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23F8 +F840 +0BF8 +0840 +1040 +17FC +34A0 +68A4 +A528 +2310 +2510 +21C8 +2706 +ENDCHAR +STARTCHAR uni88F2 +ENCODING 35058 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2020 +F820 +0BFE +0A22 +1222 +13BA +36AA +6AAA +A2AA +2376 +2222 +2222 +2226 +ENDCHAR +STARTCHAR uni88F3 +ENCODING 35059 +BBX 15 15 1 -1 +BITMAP +2108 +1110 +7FFC +4004 +4FE4 +0820 +0FE0 +0100 +FFFE +0910 +30A0 +D040 +1020 +1E18 +7006 +ENDCHAR +STARTCHAR uni88F4 +ENCODING 35060 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +FC7E +0440 +7C7C +0440 +FC7E +0840 +3140 +0100 +FFFE +0C84 +F848 +0F30 +780E +ENDCHAR +STARTCHAR uni88F5 +ENCODING 35061 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +FC7E +0440 +7C7C +0440 +FC7E +0840 +12C8 +0C50 +F820 +0F18 +7806 +ENDCHAR +STARTCHAR uni88F6 +ENCODING 35062 +BBX 15 16 0 -2 +BITMAP +2090 +1090 +0090 +F79E +1090 +2090 +2090 +6B9C +B090 +2890 +2090 +279E +2090 +2090 +2090 +2090 +ENDCHAR +STARTCHAR uni88F7 +ENCODING 35063 +BBX 15 16 0 -2 +BITMAP +2020 +1124 +00A8 +F820 +09FC +1040 +17FE +3888 +5504 +92FA +1488 +1088 +10A8 +1092 +1082 +107E +ENDCHAR +STARTCHAR uni88F8 +ENCODING 35064 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2244 +FA44 +0BFC +0A44 +1244 +13FC +3440 +6BFE +A4E0 +2150 +2248 +2446 +2040 +ENDCHAR +STARTCHAR uni88F9 +ENCODING 35065 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0000 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +1290 +6488 +3854 +CF30 +380E +ENDCHAR +STARTCHAR uni88FA +ENCODING 35066 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +F850 +0888 +1124 +1222 +31FC +5524 +99FC +1524 +11FC +1022 +1022 +101E +1000 +ENDCHAR +STARTCHAR uni88FB +ENCODING 35067 +BBX 15 16 0 -2 +BITMAP +0800 +0E7C +0804 +7F44 +0828 +2A10 +4928 +1A44 +0100 +FFFE +0500 +0C88 +3450 +C530 +060E +0400 +ENDCHAR +STARTCHAR uni88FC +ENCODING 35068 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1108 +F908 +09F8 +0908 +1108 +11F8 +3A80 +55FE +9652 +1092 +1322 +1042 +119C +ENDCHAR +STARTCHAR uni88FD +ENCODING 35069 +BBX 15 15 1 -1 +BITMAP +2804 +7F24 +4824 +FFA4 +0824 +7F04 +4904 +4B1C +0100 +FFFE +0484 +1848 +F030 +1F18 +7006 +ENDCHAR +STARTCHAR uni88FE +ENCODING 35070 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +FA04 +0BFC +0A20 +1220 +13FE +3620 +6A20 +A4FC +2484 +2884 +2084 +20FC +ENDCHAR +STARTCHAR uni88FF +ENCODING 35071 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +01FC +FC50 +0888 +1104 +13FE +3408 +59E8 +9528 +1528 +11E8 +1128 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni8900 +ENCODING 35072 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +03FE +FC88 +0888 +10F8 +1088 +3488 +58F8 +9488 +1488 +13FE +1000 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni8901 +ENCODING 35073 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +3FF8 +2108 +3FF8 +0100 +7FFC +0540 +1930 +E28E +0C50 +F820 +0F18 +7806 +ENDCHAR +STARTCHAR uni8902 +ENCODING 35074 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +27C8 +F108 +1108 +1108 +2FEC +200A +690A +7108 +AFC8 +2108 +2108 +21E8 +2F08 +ENDCHAR +STARTCHAR uni8903 +ENCODING 35075 +BBX 15 16 0 -2 +BITMAP +2020 +1120 +013C +FD20 +0920 +13FE +1000 +35FC +5904 +95FC +1504 +11FC +1104 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni8904 +ENCODING 35076 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +F840 +0BFC +0844 +17FE +1044 +37FC +6840 +AFFE +2088 +2310 +20F0 +270E +ENDCHAR +STARTCHAR uni8905 +ENCODING 35077 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +01FC +F800 +0888 +1050 +13FE +3222 +5424 +99FC +1524 +1124 +1134 +1128 +1020 +1020 +ENDCHAR +STARTCHAR uni8906 +ENCODING 35078 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0104 +FD04 +09FC +1104 +1104 +35FC +5800 +97FE +1420 +1120 +113C +1120 +12A0 +147E +ENDCHAR +STARTCHAR uni8907 +ENCODING 35079 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +23FE +FC00 +09FC +0904 +11FC +1104 +35FC +6880 +A4FC +2304 +2088 +2070 +278E +ENDCHAR +STARTCHAR uni8908 +ENCODING 35080 +BBX 15 16 0 -2 +BITMAP +2008 +103C +01E0 +F820 +0BFE +1020 +11FC +3524 +59FC +9524 +15FC +1020 +11FC +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni8909 +ENCODING 35081 +BBX 15 16 0 -2 +BITMAP +2100 +113C +07D4 +F114 +1394 +2114 +27D4 +6924 +B14C +2840 +27FE +2040 +20A0 +2110 +2208 +2C06 +ENDCHAR +STARTCHAR uni890A +ENCODING 35082 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2000 +FBFC +0A04 +0A04 +13FC +1200 +37FE +6A92 +A692 +27FE +2A92 +3292 +2296 +ENDCHAR +STARTCHAR uni890B +ENCODING 35083 +BBX 15 16 0 -2 +BITMAP +2048 +1148 +0148 +FBFE +0948 +1148 +1578 +3900 +55FE +9020 +13FE +1070 +10A8 +1124 +1622 +1020 +ENDCHAR +STARTCHAR uni890C +ENCODING 35084 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2202 +FA22 +09FC +0820 +11FC +1124 +35FC +6924 +A5FC +2020 +23FE +2020 +2020 +ENDCHAR +STARTCHAR uni890D +ENCODING 35085 +BBX 15 16 0 -2 +BITMAP +2020 +1124 +0124 +FD24 +09FC +1000 +13FE +3420 +5840 +95FC +1554 +1154 +1154 +1154 +1154 +110C +ENDCHAR +STARTCHAR uni890E +ENCODING 35086 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0018 +0CE0 +3020 +21FC +3CA8 +2124 +3C20 +0308 +0490 +0C60 +3518 +C606 +0400 +ENDCHAR +STARTCHAR uni890F +ENCODING 35087 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0020 +0C20 +31FC +2124 +3DFC +2124 +2124 +3DFC +0300 +0488 +0C50 +3530 +C60E +0400 +ENDCHAR +STARTCHAR uni8910 +ENCODING 35088 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2104 +F9FC +0904 +0904 +11FC +1080 +35FE +6A02 +A662 +2382 +2212 +21F2 +200C +ENDCHAR +STARTCHAR uni8911 +ENCODING 35089 +BBX 15 16 0 -2 +BITMAP +201E +13E0 +0044 +FD24 +0888 +11FC +1040 +3440 +5BFE +9480 +14FC +1144 +1128 +1210 +1068 +1186 +ENDCHAR +STARTCHAR uni8912 +ENCODING 35090 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0800 +13F8 +2208 +63F8 +A040 +2FFE +2248 +2C46 +0210 +1D20 +F0C0 +1E30 +300E +ENDCHAR +STARTCHAR uni8913 +ENCODING 35091 +BBX 15 15 1 -1 +BITMAP +2100 +217C +2144 +FA44 +0A44 +0E7C +1210 +1210 +36FE +6A10 +A638 +2254 +2292 +2210 +2210 +ENDCHAR +STARTCHAR uni8914 +ENCODING 35092 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0000 +F9FC +0904 +1104 +15FC +3800 +57FE +9222 +1222 +13FE +1222 +1222 +13FE +1202 +ENDCHAR +STARTCHAR uni8915 +ENCODING 35093 +BBX 15 16 0 -2 +BITMAP +2040 +10A0 +0110 +F208 +15F6 +2000 +23C4 +6A54 +B254 +2BD4 +2254 +2254 +23D4 +2244 +2254 +22C8 +ENDCHAR +STARTCHAR uni8916 +ENCODING 35094 +BBX 15 16 0 -2 +BITMAP +2080 +10FC +0104 +FDF8 +0808 +13FE +1040 +34A2 +5B34 +9458 +1494 +1334 +1052 +1090 +1350 +1020 +ENDCHAR +STARTCHAR uni8917 +ENCODING 35095 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0200 +FAFC +0A84 +12FC +1684 +3AFC +5620 +93FE +1248 +12C8 +1230 +1248 +1284 +13FE +ENDCHAR +STARTCHAR uni8918 +ENCODING 35096 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +21F8 +F888 +0BFE +0800 +11FC +1104 +35FC +6810 +A5FC +2110 +27FE +2010 +2010 +ENDCHAR +STARTCHAR uni8919 +ENCODING 35097 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +239C +F890 +0992 +0E8E +1000 +11F8 +3508 +69F8 +A508 +21F8 +2108 +2108 +2118 +ENDCHAR +STARTCHAR uni891A +ENCODING 35098 +BBX 15 15 1 -1 +BITMAP +2040 +2048 +23FC +F848 +0850 +0850 +17FE +1028 +35FC +6B04 +A504 +21FC +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni891B +ENCODING 35099 +BBX 15 16 0 -2 +BITMAP +2020 +1124 +00A8 +F020 +13FE +20A8 +2124 +6A02 +B040 +2BFE +2088 +2108 +2190 +2060 +2198 +2604 +ENDCHAR +STARTCHAR uni891C +ENCODING 35100 +BBX 15 15 1 -1 +BITMAP +0080 +7CFC +4504 +7DF4 +4694 +7CF4 +448C +8482 +9C7E +0100 +FFFE +0488 +F850 +0F30 +780E +ENDCHAR +STARTCHAR uni891D +ENCODING 35101 +BBX 15 15 1 -1 +BITMAP +2284 +2144 +2148 +FBF8 +0A48 +0A48 +13F8 +1248 +3648 +6BF8 +A440 +2FFE +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni891E +ENCODING 35102 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2248 +FA48 +0A48 +0AA8 +1318 +17F8 +3400 +6FFC +A524 +2524 +2524 +2524 +2FFE +ENDCHAR +STARTCHAR uni891F +ENCODING 35103 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0104 +F9FC +0904 +11FC +1400 +3BDE +5442 +9252 +114A +10C6 +135A +1042 +114A +1084 +ENDCHAR +STARTCHAR uni8920 +ENCODING 35104 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +03FE +FC88 +09FC +1088 +13FE +3420 +59FC +9524 +15FC +1124 +13FE +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni8921 +ENCODING 35105 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +03FE +F888 +0820 +1050 +1488 +3904 +56FA +9000 +1000 +11FC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni8922 +ENCODING 35106 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0200 +1FF0 +1110 +1FF0 +1210 +1FF0 +04A8 +08BA +3382 +C4FE +0C50 +3530 +C60E +0400 +ENDCHAR +STARTCHAR uni8923 +ENCODING 35107 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +FA02 +0850 +1088 +1524 +3850 +5488 +9104 +12FA +1088 +1088 +1088 +10F8 +1088 +ENDCHAR +STARTCHAR uni8924 +ENCODING 35108 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +01FC +F820 +0BFE +1000 +11FC +3504 +5904 +95FC +1452 +1094 +1188 +16A4 +10C2 +1080 +ENDCHAR +STARTCHAR uni8925 +ENCODING 35109 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +2200 +FAFC +0A00 +0BFE +12A4 +12A8 +36D8 +6B86 +A608 +23FE +2288 +2448 +2018 +ENDCHAR +STARTCHAR uni8926 +ENCODING 35110 +BBX 15 16 0 -2 +BITMAP +2110 +1212 +0454 +F7D8 +1010 +2012 +27D2 +6C4E +B440 +2FD2 +2454 +2458 +27D0 +2452 +2552 +248E +ENDCHAR +STARTCHAR uni8927 +ENCODING 35111 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +24A2 +3CA2 +2524 +3C50 +2450 +3C88 +C506 +0100 +FFFE +0488 +F850 +0F30 +780E +ENDCHAR +STARTCHAR uni8928 +ENCODING 35112 +BBX 15 16 0 -2 +BITMAP +2108 +1088 +0090 +FBFC +0840 +11F8 +1440 +3BFE +5480 +9100 +11FC +1220 +1420 +1820 +13FE +1000 +ENDCHAR +STARTCHAR uni8929 +ENCODING 35113 +BBX 15 16 0 -2 +BITMAP +1000 +3E78 +2248 +2A48 +FE86 +2378 +2A48 +4230 +4A48 +8684 +0100 +FFFE +0680 +1C48 +E530 +060E +ENDCHAR +STARTCHAR uni892A +ENCODING 35114 +BBX 15 15 1 -1 +BITMAP +2200 +217C +2044 +F844 +0C7C +0A44 +1044 +167C +2A52 +6654 +A248 +2268 +22C6 +2500 +28FE +ENDCHAR +STARTCHAR uni892B +ENCODING 35115 +BBX 15 15 1 -1 +BITMAP +201C +23E0 +2238 +FA20 +0AFE +0A92 +129C +16F0 +3692 +6A8E +A550 +2550 +2A52 +2492 +210E +ENDCHAR +STARTCHAR uni892C +ENCODING 35116 +BBX 15 16 0 -2 +BITMAP +21F8 +1088 +0070 +F18C +1000 +23DE +2252 +698C +B252 +2820 +23FE +2070 +20A8 +2124 +2622 +2020 +ENDCHAR +STARTCHAR uni892D +ENCODING 35117 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0000 +3FFC +2100 +3FF8 +2100 +3FFE +2922 +4496 +0300 +0488 +0C50 +3530 +C60E +0400 +ENDCHAR +STARTCHAR uni892E +ENCODING 35118 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +4D28 +1450 +2288 +7FFE +4002 +8204 +0100 +FFFE +0500 +0C88 +3450 +C530 +060E +0400 +ENDCHAR +STARTCHAR uni892F +ENCODING 35119 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +07FE +F488 +1488 +27FE +2488 +6CF8 +B420 +2DFC +2524 +2524 +2934 +2928 +3020 +2020 +ENDCHAR +STARTCHAR uni8930 +ENCODING 35120 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +3FF8 +0440 +3FF8 +0440 +FFFE +0820 +3118 +DFF6 +0488 +F850 +0F30 +780E +ENDCHAR +STARTCHAR uni8931 +ENCODING 35121 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0000 +3FF8 +2448 +3FF8 +1110 +0920 +1110 +2308 +0490 +0C60 +3518 +C606 +0400 +ENDCHAR +STARTCHAR uni8932 +ENCODING 35122 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +FA20 +0BFE +0A20 +12FC +12A4 +36FC +6AA4 +A4FC +2420 +2BFE +2020 +2020 +ENDCHAR +STARTCHAR uni8933 +ENCODING 35123 +BBX 15 16 0 -2 +BITMAP +2010 +1010 +02FE +F910 +097C +1054 +147C +3B54 +557C +9110 +11FE +1110 +1110 +1290 +147E +1000 +ENDCHAR +STARTCHAR uni8934 +ENCODING 35124 +BBX 15 16 0 -2 +BITMAP +2048 +1148 +014E +F950 +0968 +1144 +1144 +3440 +5800 +95FC +1554 +1154 +1154 +1154 +17FE +1000 +ENDCHAR +STARTCHAR uni8935 +ENCODING 35125 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +F800 +0954 +1124 +1554 +39FC +5420 +93FE +1242 +1292 +12FA +120A +1202 +1206 +ENDCHAR +STARTCHAR uni8936 +ENCODING 35126 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +214A +FA52 +08C6 +094A +1252 +1000 +3440 +69FC +A504 +21FC +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni8937 +ENCODING 35127 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +225C +FA50 +0C50 +0950 +11FE +1210 +3610 +6A50 +A65C +2250 +2250 +22B0 +231E +ENDCHAR +STARTCHAR uni8938 +ENCODING 35128 +BBX 15 15 1 -1 +BITMAP +2040 +23FC +2244 +FFFE +0A44 +0BFC +1040 +13FC +3644 +6BFC +A440 +27FE +2084 +21F8 +278E +ENDCHAR +STARTCHAR uni8939 +ENCODING 35129 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27D0 +F910 +093C +0FD4 +1294 +1294 +34D4 +6934 +A51C +27D4 +2124 +2124 +2FC2 +ENDCHAR +STARTCHAR uni893A +ENCODING 35130 +BBX 15 16 0 -2 +BITMAP +0820 +7E20 +08F8 +FF28 +1428 +7F6A +082A +FF56 +0A82 +0100 +FFFE +0488 +0C50 +3420 +C518 +0606 +ENDCHAR +STARTCHAR uni893B +ENCODING 35131 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +1020 +7E20 +10F8 +FF28 +24A8 +D748 +3C4A +10A6 +FF00 +0484 +F848 +0F30 +780E +ENDCHAR +STARTCHAR uni893C +ENCODING 35132 +BBX 15 16 0 -2 +BITMAP +4000 +23FE +2050 +03FE +F252 +13FE +2020 +6FFE +B088 +2904 +23FA +2508 +21F8 +2102 +2102 +20FE +ENDCHAR +STARTCHAR uni893D +ENCODING 35133 +BBX 15 16 0 -2 +BITMAP +3F08 +2108 +3F7E +2008 +2F48 +2028 +5FA8 +4408 +9528 +2E90 +0100 +FFFE +0680 +1C48 +E530 +060E +ENDCHAR +STARTCHAR uni893E +ENCODING 35134 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0050 +FDFC +0954 +1154 +11FC +3400 +59FC +9400 +17FE +1020 +10A8 +1124 +12A2 +1040 +ENDCHAR +STARTCHAR uni893F +ENCODING 35135 +BBX 15 16 0 -2 +BITMAP +2090 +1090 +07FE +F890 +0BFC +1294 +13FC +3694 +5BFC +9400 +15F8 +1108 +11F8 +1108 +11F8 +1108 +ENDCHAR +STARTCHAR uni8940 +ENCODING 35136 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +F840 +09F8 +0840 +17FE +1108 +35F8 +6908 +A5F8 +2108 +21F8 +2090 +230C +ENDCHAR +STARTCHAR uni8941 +ENCODING 35137 +BBX 15 15 1 -1 +BITMAP +2020 +2728 +2144 +F95A +09F2 +0F10 +147C +1454 +3754 +6954 +A57C +2110 +2114 +211C +26E2 +ENDCHAR +STARTCHAR uni8942 +ENCODING 35138 +BBX 15 15 1 -1 +BITMAP +2040 +20B0 +20D0 +F908 +0AD6 +0B7A +1050 +1588 +3626 +6840 +A590 +2064 +2188 +2030 +23C0 +ENDCHAR +STARTCHAR uni8943 +ENCODING 35139 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0000 +0CF8 +7088 +40F8 +7C20 +41FE +4068 +7DA4 +02A2 +0C48 +F830 +0F18 +7806 +ENDCHAR +STARTCHAR uni8944 +ENCODING 35140 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0000 +3EF8 +2288 +3EF8 +0440 +3FF8 +0440 +3FF8 +0440 +FFFE +0C88 +7970 +0E0E +ENDCHAR +STARTCHAR uni8945 +ENCODING 35141 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2244 +FBFC +0A44 +0BFC +1040 +1548 +37FE +6948 +A7FC +2040 +27FE +2040 +2040 +ENDCHAR +STARTCHAR uni8946 +ENCODING 35142 +BBX 15 16 0 -2 +BITMAP +2050 +1252 +0154 +F850 +0BFE +1088 +1450 +3BFE +5420 +91FC +1020 +13FE +1050 +1088 +1104 +1602 +ENDCHAR +STARTCHAR uni8947 +ENCODING 35143 +BBX 15 16 0 -2 +BITMAP +2000 +13DE +0252 +FBDE +0A52 +13DE +1602 +3AFA +568A +92FA +128A +12FA +128A +1202 +120A +1204 +ENDCHAR +STARTCHAR uni8948 +ENCODING 35144 +BBX 15 16 0 -2 +BITMAP +2000 +13DE +0252 +FBDE +0A10 +1252 +11CE +3400 +5888 +97FE +1488 +1088 +17FE +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni8949 +ENCODING 35145 +BBX 14 15 1 -1 +BITMAP +2000 +27BC +24A4 +F7BC +14A4 +17BC +1404 +25F4 +2D14 +75F4 +AD14 +25F4 +2514 +2534 +240C +ENDCHAR +STARTCHAR uni894A +ENCODING 35146 +BBX 15 16 0 -2 +BITMAP +2000 +13F8 +0208 +F3F8 +1208 +23F8 +2000 +6FFE +B480 +2FBC +2494 +2794 +24D4 +2F88 +2094 +20A2 +ENDCHAR +STARTCHAR uni894B +ENCODING 35147 +BBX 15 16 0 -2 +BITMAP +4208 +2208 +0FBE +E208 +2208 +2FBE +4AAA +5AAA +EAAA +5BAE +4208 +471C +4AAA +5248 +4208 +4208 +ENDCHAR +STARTCHAR uni894C +ENCODING 35148 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +24A4 +FFBC +0800 +0BF8 +1248 +13F8 +3648 +6A48 +A7F8 +2040 +2FFE +2040 +2040 +ENDCHAR +STARTCHAR uni894D +ENCODING 35149 +BBX 15 15 1 -1 +BITMAP +2110 +2120 +23FC +FE20 +0BF8 +0A20 +13F8 +2620 +6BFC +B040 +2FFE +2550 +2248 +2444 +2040 +ENDCHAR +STARTCHAR uni894E +ENCODING 35150 +BBX 15 16 0 -2 +BITMAP +203C +13E0 +0124 +F8A8 +0BFE +10A8 +1124 +3602 +59FC +9524 +1524 +11FC +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni894F +ENCODING 35151 +BBX 15 16 0 -2 +BITMAP +2024 +13A8 +0092 +F514 +1208 +2404 +23BA +68A8 +B0C6 +2B80 +223C +2384 +20A8 +2090 +22A8 +2144 +ENDCHAR +STARTCHAR uni8950 +ENCODING 35152 +BBX 15 16 0 -2 +BITMAP +2080 +10F8 +0108 +FBFE +0D12 +1122 +15FE +3840 +54A2 +9354 +1098 +1334 +1054 +1092 +1350 +1020 +ENDCHAR +STARTCHAR uni8951 +ENCODING 35153 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0004 +FCFC +0804 +11FC +1000 +35DC +5894 +97DC +1408 +13FE +1108 +1088 +10A8 +1010 +ENDCHAR +STARTCHAR uni8952 +ENCODING 35154 +BBX 15 16 0 -2 +BITMAP +2108 +1108 +0548 +F390 +111E +27D4 +2564 +6D54 +B554 +2F54 +25D4 +2548 +2548 +2554 +2464 +24C2 +ENDCHAR +STARTCHAR uni8953 +ENCODING 35155 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +01FC +F820 +0BFE +1108 +139C +3508 +5988 +963E +1400 +13FE +1090 +1090 +1112 +120E +ENDCHAR +STARTCHAR uni8954 +ENCODING 35156 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +03FE +F888 +0888 +10F8 +1420 +3BFE +5622 +9332 +12AA +1376 +1222 +1222 +122A +1224 +ENDCHAR +STARTCHAR uni8955 +ENCODING 35157 +BBX 15 16 0 -2 +BITMAP +2100 +10BE +0282 +F222 +12FA +2222 +22FA +6AAA +B2BA +2AEA +22AA +22FA +2272 +22AA +2222 +2226 +ENDCHAR +STARTCHAR uni8956 +ENCODING 35158 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +27FC +F434 +17C4 +1554 +14E4 +2FFC +3554 +6E4C +A484 +2FFE +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni8957 +ENCODING 35159 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0154 +F9FC +0820 +11FC +1420 +3BFE +5488 +9050 +11FC +1020 +13FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni8958 +ENCODING 35160 +BBX 15 16 0 -2 +BITMAP +2020 +1050 +0088 +FD74 +0A02 +11FC +1124 +35AC +5924 +95FC +1400 +10F8 +1088 +10F8 +1088 +10F8 +ENDCHAR +STARTCHAR uni8959 +ENCODING 35161 +BBX 15 16 0 -2 +BITMAP +20F8 +1088 +0088 +FCF8 +0800 +11DC +1154 +3554 +59DC +9420 +15FE +1070 +10A8 +1124 +1222 +1020 +ENDCHAR +STARTCHAR uni895A +ENCODING 35162 +BBX 15 16 0 -2 +BITMAP +2044 +1224 +0128 +FC7E +0810 +1028 +134A +351C +5928 +954C +151A +112A +1148 +1110 +12FE +1400 +ENDCHAR +STARTCHAR uni895B +ENCODING 35163 +BBX 15 16 0 -2 +BITMAP +2090 +13FC +0294 +FBFC +0A94 +13FC +1400 +3BFC +5600 +92F8 +1200 +13FE +1520 +1514 +1548 +1986 +ENDCHAR +STARTCHAR uni895C +ENCODING 35164 +BBX 15 16 0 -2 +BITMAP +2080 +10F8 +0108 +FBFE +0944 +1192 +11FE +3500 +597C +9500 +157C +1100 +117C +1244 +127C +1444 +ENDCHAR +STARTCHAR uni895D +ENCODING 35165 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0050 +FC88 +0904 +12FA +1000 +3400 +59DC +9554 +1554 +11DC +1088 +1088 +1154 +1222 +ENDCHAR +STARTCHAR uni895E +ENCODING 35166 +BBX 15 15 1 -1 +BITMAP +0010 +7EFE +4244 +7E28 +40FE +7E10 +A2FE +A210 +3E10 +0100 +FFFE +0488 +F850 +0F30 +780E +ENDCHAR +STARTCHAR uni895F +ENCODING 35167 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27FE +F910 +0BB8 +0D54 +1110 +13F8 +3400 +6FFE +A440 +2248 +2444 +2842 +20C0 +ENDCHAR +STARTCHAR uni8960 +ENCODING 35168 +BBX 15 15 1 -1 +BITMAP +2124 +2124 +20A8 +FBFE +0A02 +0AFA +1088 +10F8 +3400 +69FC +A524 +21FC +2124 +2124 +21FC +ENDCHAR +STARTCHAR uni8961 +ENCODING 35169 +BBX 14 16 0 -2 +BITMAP +2000 +13F8 +02A8 +F2A8 +13F8 +2100 +23FC +6C84 +B3E4 +2AA4 +22A4 +23E4 +2094 +27F4 +2014 +2008 +ENDCHAR +STARTCHAR uni8962 +ENCODING 35170 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +27FC +FA08 +0AE8 +0AA8 +12E8 +1208 +37F8 +6800 +A5F0 +2110 +21F0 +2110 +27FC +ENDCHAR +STARTCHAR uni8963 +ENCODING 35171 +BBX 15 16 0 -2 +BITMAP +2040 +10F8 +0088 +FCF8 +0888 +10F8 +1000 +35FC +5924 +95FC +1524 +11FC +1000 +13FE +1088 +1108 +ENDCHAR +STARTCHAR uni8964 +ENCODING 35172 +BBX 15 15 1 -1 +BITMAP +2008 +23E8 +2288 +FBCE +0A50 +0BC0 +1280 +128E +37E0 +6800 +A5FC +2154 +2154 +2154 +23FE +ENDCHAR +STARTCHAR uni8965 +ENCODING 35173 +BBX 15 16 0 -2 +BITMAP +2128 +11AA +016C +F228 +12FE +2644 +2628 +6AFE +B210 +2A7C +2210 +22FE +2210 +2228 +2244 +2282 +ENDCHAR +STARTCHAR uni8966 +ENCODING 35174 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2020 +FBFE +0A22 +0BBA +1222 +1198 +3400 +6BFE +A420 +23FE +2252 +2252 +2256 +ENDCHAR +STARTCHAR uni8967 +ENCODING 35175 +BBX 15 16 0 -2 +BITMAP +2000 +17FC +0248 +F444 +1FFE +2444 +26EC +6D54 +B6EC +2C44 +26EC +2554 +26EC +2444 +2454 +2408 +ENDCHAR +STARTCHAR uni8968 +ENCODING 35176 +BBX 15 16 0 -2 +BITMAP +2144 +1144 +0554 +F364 +115E +27E4 +2004 +6A34 +B14C +2BE4 +2084 +23E4 +2084 +20E4 +2714 +2008 +ENDCHAR +STARTCHAR uni8969 +ENCODING 35177 +BBX 15 16 0 -2 +BITMAP +2020 +13FE +0020 +FDFC +0800 +13FE +1252 +37FE +5904 +95FC +1504 +11FC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni896A +ENCODING 35178 +BBX 15 15 1 -1 +BITMAP +2108 +27FE +2108 +FBFC +0A94 +0A94 +13FC +1004 +3412 +6BFE +A610 +2214 +23C8 +221A +2424 +ENDCHAR +STARTCHAR uni896B +ENCODING 35179 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +07FE +F020 +13AE +2124 +23AE +6AAA +B3AE +2AAA +23AE +2050 +2050 +2088 +2104 +2602 +ENDCHAR +STARTCHAR uni896C +ENCODING 35180 +BBX 15 16 0 -2 +BITMAP +2000 +13FC +0294 +F294 +13FC +2110 +2252 +6BDC +B012 +2BCE +2240 +23D2 +225C +23D0 +2252 +22CE +ENDCHAR +STARTCHAR uni896D +ENCODING 35181 +BBX 15 15 1 -1 +BITMAP +2100 +217E +2110 +FFFC +0924 +093C +17E4 +1024 +343C +6BA4 +A6A4 +22BC +2280 +23A4 +2042 +ENDCHAR +STARTCHAR uni896E +ENCODING 35182 +BBX 15 16 0 -2 +BITMAP +21FC +1104 +01FC +FD04 +09FC +1088 +11FC +3488 +5BFE +9488 +1524 +12AA +1070 +10A8 +1124 +1060 +ENDCHAR +STARTCHAR uni896F +ENCODING 35183 +BBX 15 15 1 -1 +BITMAP +2100 +213C +27E4 +FABC +0AA4 +0AA4 +17FC +1124 +3524 +6FFC +A928 +23A8 +2568 +292A +2146 +ENDCHAR +STARTCHAR uni8970 +ENCODING 35184 +BBX 15 16 0 -2 +BITMAP +2108 +1108 +07CE +F112 +1124 +27DE +2552 +6D5E +B7D2 +291E +2392 +255E +2940 +2114 +2112 +2122 +ENDCHAR +STARTCHAR uni8971 +ENCODING 35185 +BBX 15 16 0 -2 +BITMAP +2210 +1110 +07DE +F010 +145E +2282 +27DE +6810 +B7DE +2C50 +27DE +2450 +27DE +2450 +2452 +24CE +ENDCHAR +STARTCHAR uni8972 +ENCODING 35186 +BBX 15 15 1 -1 +BITMAP +0840 +7F7E +2240 +FF7E +2204 +3E7C +2240 +3E42 +223E +0100 +FFFE +0908 +FE90 +0870 +780E +ENDCHAR +STARTCHAR uni8973 +ENCODING 35187 +BBX 15 16 0 -2 +BITMAP +4148 +214C +22AA +0008 +F7FE +1148 +2368 +694A +B36A +294C +236C +2148 +216A +239A +2026 +2042 +ENDCHAR +STARTCHAR uni8974 +ENCODING 35188 +BBX 15 15 1 -1 +BITMAP +2000 +23DE +2252 +FBDE +0A52 +0BDE +1222 +12FA +3622 +6AFA +A6AA +22FA +2272 +22AA +2226 +ENDCHAR +STARTCHAR uni8975 +ENCODING 35189 +BBX 15 16 0 -2 +BITMAP +23FC +1108 +01F8 +F108 +11F8 +210E +27F8 +6808 +B7FE +2A94 +239C +2294 +239C +22D6 +27BC +2084 +ENDCHAR +STARTCHAR uni8976 +ENCODING 35190 +BBX 15 16 0 -2 +BITMAP +4114 +27D2 +2110 +0FFE +F010 +17D0 +2552 +6FD2 +B552 +2FD4 +2294 +27C8 +228A +2FFA +22A6 +2442 +ENDCHAR +STARTCHAR uni8977 +ENCODING 35191 +BBX 15 15 1 -1 +BITMAP +2140 +226C +2344 +FA6C +0BA4 +0AA4 +17FE +1A14 +35E2 +6820 +A3FC +2020 +27FE +2020 +20E0 +ENDCHAR +STARTCHAR uni8978 +ENCODING 35192 +BBX 15 16 0 -2 +BITMAP +2528 +17BE +0948 +F7BE +1318 +25AA +2946 +6BFC +B204 +2BFC +2204 +23FC +2204 +23FC +2108 +2204 +ENDCHAR +STARTCHAR uni8979 +ENCODING 35193 +BBX 15 16 0 -2 +BITMAP +27BE +1000 +07BC +F4A4 +16B4 +24A4 +2040 +6FFE +B4A0 +2FFC +24A4 +27FC +2512 +29DC +2912 +31CE +ENDCHAR +STARTCHAR uni897A +ENCODING 35194 +BBX 15 16 0 -2 +BITMAP +2110 +17FE +0110 +F000 +17FE +254A +254A +6EFE +B7EA +2D6A +267E +27CA +244E +2572 +2542 +2406 +ENDCHAR +STARTCHAR uni897B +ENCODING 35195 +BBX 15 16 0 -2 +BITMAP +22A8 +1248 +07BE +F2A8 +175C +2AAA +2288 +6FFE +B218 +2DE4 +2842 +23F8 +2040 +27FC +2040 +20C0 +ENDCHAR +STARTCHAR uni897C +ENCODING 35196 +BBX 15 16 0 -2 +BITMAP +2108 +17FE +0108 +F390 +113C +27D4 +22B4 +6D5C +B396 +2922 +23FC +2000 +27FE +2080 +2104 +23FE +ENDCHAR +STARTCHAR uni897D +ENCODING 35197 +BBX 15 16 0 -2 +BITMAP +2110 +17FE +0110 +F7BC +14A4 +27BC +24A4 +6FBC +B444 +2FFC +2554 +25F4 +2444 +24E4 +2554 +2448 +ENDCHAR +STARTCHAR uni897E +ENCODING 35198 +BBX 15 14 1 -1 +BITMAP +FFFE +0440 +0440 +0440 +7FFC +4444 +4444 +4444 +4444 +47C4 +4004 +4004 +4004 +4004 +ENDCHAR +STARTCHAR uni897F +ENCODING 35199 +BBX 14 14 1 -1 +BITMAP +FFFC +0480 +0480 +0480 +7FF8 +4488 +4488 +4888 +7078 +4008 +4008 +4008 +4008 +7FF8 +ENDCHAR +STARTCHAR uni8980 +ENCODING 35200 +BBX 15 9 1 2 +BITMAP +FFFE +0440 +0440 +7FFC +4444 +4444 +4444 +4444 +7FFC +ENDCHAR +STARTCHAR uni8981 +ENCODING 35201 +BBX 15 14 1 -1 +BITMAP +7FFC +0440 +3FF8 +2448 +2448 +3FF8 +0200 +0200 +FFFE +0420 +0820 +1E40 +01E0 +7E18 +ENDCHAR +STARTCHAR uni8982 +ENCODING 35202 +BBX 15 15 0 -1 +BITMAP +FFFE +0440 +3FF8 +2448 +3FF8 +0000 +01F0 +3E00 +0100 +7FF8 +0060 +0180 +0600 +1800 +E7FE +ENDCHAR +STARTCHAR uni8983 +ENCODING 35203 +BBX 15 14 1 -1 +BITMAP +FFFE +0440 +3FF8 +2448 +27C8 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni8984 +ENCODING 35204 +BBX 15 15 0 -2 +BITMAP +7FFC +0440 +3FF8 +2448 +2448 +3FF8 +0850 +1048 +37FE +5040 +90A0 +10A0 +1110 +1208 +1406 +ENDCHAR +STARTCHAR uni8985 +ENCODING 35205 +BBX 15 16 0 -2 +BITMAP +0040 +FE40 +2840 +287E +FEAA +AB2A +AA2A +FE4A +104A +FE92 +2512 +4422 +2822 +1042 +2894 +C408 +ENDCHAR +STARTCHAR uni8986 +ENCODING 35206 +BBX 15 14 1 -1 +BITMAP +FFFE +0440 +7FFC +4444 +7FFC +1100 +23FE +4508 +91F8 +3080 +63FC +A108 +20F0 +279E +ENDCHAR +STARTCHAR uni8987 +ENCODING 35207 +BBX 15 14 1 -1 +BITMAP +FFFE +0440 +7FFC +4444 +7FFC +2200 +FFBC +2224 +7F3C +4924 +7F3C +0824 +FFA4 +084C +ENDCHAR +STARTCHAR uni8988 +ENCODING 35208 +BBX 15 15 1 -1 +BITMAP +FFFE +0440 +7FFC +4444 +47C4 +0820 +3E20 +227E +3E44 +22C4 +FF28 +1010 +1E28 +2244 +4E82 +ENDCHAR +STARTCHAR uni8989 +ENCODING 35209 +BBX 15 15 1 -1 +BITMAP +FFFE +0440 +7FFC +4444 +27D0 +FE7E +2428 +3CC6 +0800 +7EFE +4A04 +7E74 +0854 +FF74 +080C +ENDCHAR +STARTCHAR uni898A +ENCODING 35210 +BBX 15 15 1 -1 +BITMAP +FFFE +0440 +7FFC +4444 +47C4 +2800 +FEFE +2890 +7CFC +5490 +7CFE +1002 +FEAA +112A +1106 +ENDCHAR +STARTCHAR uni898B +ENCODING 35211 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0440 +0440 +0842 +1042 +E03E +ENDCHAR +STARTCHAR uni898C +ENCODING 35212 +BBX 15 15 0 -2 +BITMAP +01F8 +FD08 +0508 +05F8 +4908 +2908 +11F8 +1108 +2908 +25F8 +4490 +8090 +0112 +0212 +0C0E +ENDCHAR +STARTCHAR uni898D +ENCODING 35213 +BBX 14 16 1 -2 +BITMAP +0200 +1240 +2220 +4210 +8208 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +0880 +1084 +2084 +C07C +ENDCHAR +STARTCHAR uni898E +ENCODING 35214 +BBX 15 15 0 -2 +BITMAP +7E7C +4204 +4208 +7E10 +4210 +42FE +7E10 +4210 +4210 +7E10 +2450 +2422 +2402 +43FE +8000 +ENDCHAR +STARTCHAR uni898F +ENCODING 35215 +BBX 15 15 1 -1 +BITMAP +1000 +11F8 +1108 +7DF8 +1108 +1108 +11F8 +FF08 +1108 +11F8 +18A0 +24A0 +2122 +4222 +841E +ENDCHAR +STARTCHAR uni8990 +ENCODING 35216 +BBX 15 15 1 -1 +BITMAP +0044 +7E28 +4210 +7E28 +4244 +4280 +7E00 +4244 +4228 +7E10 +2428 +2444 +2482 +4402 +83FE +ENDCHAR +STARTCHAR uni8991 +ENCODING 35217 +BBX 15 16 0 -2 +BITMAP +0800 +48FC +4884 +4884 +48FC +7E84 +4084 +40FC +4084 +7C84 +44FC +4450 +4450 +4492 +4492 +850E +ENDCHAR +STARTCHAR uni8992 +ENCODING 35218 +BBX 15 16 0 -2 +BITMAP +0400 +0EFC +7084 +1084 +10FC +1C84 +7084 +10FC +1084 +1E84 +F0FC +1050 +1450 +1892 +1092 +010E +ENDCHAR +STARTCHAR uni8993 +ENCODING 35219 +BBX 15 15 1 -1 +BITMAP +0078 +1F88 +2108 +4084 +9FFA +1008 +1FF8 +1008 +1FF8 +1008 +1FF8 +0420 +0822 +1022 +E01E +ENDCHAR +STARTCHAR uni8994 +ENCODING 35220 +BBX 15 14 1 -1 +BITMAP +FFFE +0920 +1110 +2108 +DFF6 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0440 +1842 +E03E +ENDCHAR +STARTCHAR uni8995 +ENCODING 35221 +BBX 15 16 0 -2 +BITMAP +1000 +087C +0A44 +0244 +127C +1344 +54C4 +54FC +5444 +9844 +197C +1128 +3128 +4F4A +804A +0086 +ENDCHAR +STARTCHAR uni8996 +ENCODING 35222 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2208 +FBF8 +0A08 +0A08 +13F8 +1208 +3208 +6BF8 +A0A0 +20A0 +2122 +2222 +2C1E +ENDCHAR +STARTCHAR uni8997 +ENCODING 35223 +BBX 15 14 1 -1 +BITMAP +FDF8 +0508 +05F8 +F508 +0508 +05F8 +F508 +9508 +9508 +95F8 +F490 +0492 +0512 +1E0E +ENDCHAR +STARTCHAR uni8998 +ENCODING 35224 +BBX 15 15 1 -1 +BITMAP +2000 +21F8 +2108 +3DF8 +2108 +2108 +21F8 +FD08 +8508 +85F8 +8490 +8490 +8490 +FD12 +020E +ENDCHAR +STARTCHAR uni8999 +ENCODING 35225 +BBX 15 16 0 -2 +BITMAP +2000 +20FC +2084 +7E84 +42FC +4484 +9084 +10FC +5484 +5484 +52FC +5250 +9250 +1092 +5092 +210E +ENDCHAR +STARTCHAR uni899A +ENCODING 35226 +BBX 15 15 1 -1 +BITMAP +1210 +0910 +0020 +7FFC +4004 +4FE4 +0820 +0FE0 +0820 +0FE0 +0820 +0FE0 +0442 +1842 +E03E +ENDCHAR +STARTCHAR uni899B +ENCODING 35227 +BBX 15 16 0 -2 +BITMAP +0200 +077C +3844 +2044 +237C +2C44 +2844 +28FC +2D44 +2A44 +2A7C +2928 +2928 +494A +4C4A +8886 +ENDCHAR +STARTCHAR uni899C +ENCODING 35228 +BBX 15 16 0 -2 +BITMAP +2800 +28FC +2884 +2884 +AAFC +6C84 +2884 +28FC +6C84 +AA84 +28FC +2850 +2A50 +4C92 +4892 +810E +ENDCHAR +STARTCHAR uni899D +ENCODING 35229 +BBX 15 15 0 -2 +BITMAP +7CFC +1084 +1084 +FEFC +1084 +1084 +00FC +1084 +5284 +52FC +9450 +2850 +2492 +4492 +810E +ENDCHAR +STARTCHAR uni899E +ENCODING 35230 +BBX 15 15 0 -2 +BITMAP +7CFC +4484 +4484 +7CFC +4484 +4484 +7CFC +4484 +4484 +7CFC +2850 +2A50 +2C92 +4892 +810E +ENDCHAR +STARTCHAR uni899F +ENCODING 35231 +BBX 15 15 1 -1 +BITMAP +0800 +087C +0844 +FF7C +0844 +0844 +087C +7E44 +0044 +087C +4528 +54A8 +50AA +924A +8E86 +ENDCHAR +STARTCHAR uni89A0 +ENCODING 35232 +BBX 15 15 0 -2 +BITMAP +7E7C +1244 +1244 +FF7C +1244 +1244 +7E7C +2044 +2044 +7E7C +6228 +A228 +224A +3E4A +2286 +ENDCHAR +STARTCHAR uni89A1 +ENCODING 35233 +BBX 15 14 1 -1 +BITMAP +01FC +FD04 +11FC +1104 +5504 +55FC +5504 +BB04 +91FC +1090 +1C90 +E092 +0112 +060E +ENDCHAR +STARTCHAR uni89A2 +ENCODING 35234 +BBX 15 16 0 -2 +BITMAP +1000 +52FC +5484 +9084 +28FC +4484 +8284 +10FC +1084 +5284 +54FC +9050 +2850 +2492 +4292 +810E +ENDCHAR +STARTCHAR uni89A3 +ENCODING 35235 +BBX 15 16 0 -2 +BITMAP +0C00 +70FC +1084 +FE84 +38FC +5484 +9284 +00FC +1084 +FC84 +24FC +4450 +2850 +1092 +2892 +C50E +ENDCHAR +STARTCHAR uni89A4 +ENCODING 35236 +BBX 15 16 0 -2 +BITMAP +1000 +1EFC +1084 +7E84 +52FC +5C84 +7084 +52FC +4E84 +4084 +5CFC +5450 +5450 +9692 +9492 +210E +ENDCHAR +STARTCHAR uni89A5 +ENCODING 35237 +BBX 15 16 0 -2 +BITMAP +1400 +147C +1444 +7F44 +557C +5544 +5544 +7F7C +5544 +5544 +557C +FFA8 +2428 +224A +424A +8086 +ENDCHAR +STARTCHAR uni89A6 +ENCODING 35238 +BBX 15 15 1 -1 +BITMAP +0800 +147C +2244 +C17C +3EC4 +0044 +F27C +92C4 +D2C4 +B57C +D528 +B528 +92AA +92CA +B286 +ENDCHAR +STARTCHAR uni89A7 +ENCODING 35239 +BBX 15 14 1 -1 +BITMAP +7E40 +487E +7E80 +4200 +7E7C +4800 +7FF0 +1010 +1FF0 +1010 +1FF0 +0442 +1842 +E03E +ENDCHAR +STARTCHAR uni89A8 +ENCODING 35240 +BBX 15 15 0 -2 +BITMAP +777C +5544 +5544 +777C +0044 +7F44 +007C +FFC4 +2044 +3F7C +0128 +0128 +014A +0A4A +0486 +ENDCHAR +STARTCHAR uni89A9 +ENCODING 35241 +BBX 15 15 1 -1 +BITMAP +1000 +12FC +7E84 +14FC +1884 +FF84 +14FC +3E84 +2284 +62FC +BE50 +2250 +2252 +3E92 +010E +ENDCHAR +STARTCHAR uni89AA +ENCODING 35242 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +FE84 +44FC +2484 +2884 +FEFC +1084 +FE84 +30FC +3850 +5450 +5252 +9092 +130E +ENDCHAR +STARTCHAR uni89AB +ENCODING 35243 +BBX 14 16 1 -2 +BITMAP +2000 +10F8 +FE88 +0088 +44F8 +2888 +FE88 +A2F8 +1088 +FE88 +20F8 +3C50 +2450 +4494 +5494 +890C +ENDCHAR +STARTCHAR uni89AC +ENCODING 35244 +BBX 15 15 1 -1 +BITMAP +0800 +4AFC +4A84 +7EFC +0084 +FF84 +00FC +7E84 +4284 +7EFC +0050 +4250 +2452 +1E92 +E10E +ENDCHAR +STARTCHAR uni89AD +ENCODING 35245 +BBX 15 15 0 -2 +BITMAP +FF7C +8144 +0044 +7E7C +4244 +7E44 +427C +7E44 +1044 +087C +FF28 +0028 +244A +424A +8186 +ENDCHAR +STARTCHAR uni89AE +ENCODING 35246 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +4D28 +1450 +2288 +7FFE +4002 +9FF4 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0842 +F03E +ENDCHAR +STARTCHAR uni89AF +ENCODING 35247 +BBX 15 15 1 -1 +BITMAP +2200 +7F7C +2244 +7F7C +2244 +FFC4 +087C +7F44 +4944 +7F7C +4928 +FFA8 +4128 +414A +4386 +ENDCHAR +STARTCHAR uni89B0 +ENCODING 35248 +BBX 15 15 1 -1 +BITMAP +0800 +087C +0E44 +087C +7F44 +4944 +7C7C +4944 +5F44 +527C +5E28 +5228 +9E28 +924A +3F46 +ENDCHAR +STARTCHAR uni89B1 +ENCODING 35249 +BBX 15 16 0 -2 +BITMAP +0804 +7F78 +0840 +3E40 +2A7E +3E48 +2A48 +FF48 +0888 +1FF0 +1010 +1FF0 +1010 +1FF0 +0442 +783E +ENDCHAR +STARTCHAR uni89B2 +ENCODING 35250 +BBX 15 15 1 -1 +BITMAP +2200 +FF7C +2244 +3E7C +0844 +7F44 +497C +7F44 +0844 +7F7C +0828 +7F28 +082A +0F4A +F086 +ENDCHAR +STARTCHAR uni89B3 +ENCODING 35251 +BBX 15 15 1 -1 +BITMAP +2000 +20FC +7E84 +90FC +1084 +FF84 +28FC +7E84 +C884 +7EFC +4850 +7E50 +4852 +4892 +7F0E +ENDCHAR +STARTCHAR uni89B4 +ENCODING 35252 +BBX 15 16 0 -2 +BITMAP +0A00 +747C +1544 +5244 +227C +2144 +5D44 +807C +7E44 +4244 +427C +7E28 +4228 +244A +0F4A +F086 +ENDCHAR +STARTCHAR uni89B5 +ENCODING 35253 +BBX 15 16 0 -2 +BITMAP +E700 +A57C +E744 +A544 +E77C +8144 +BD44 +A57C +BD44 +A544 +BD7C +A528 +A528 +CD4A +814A +8386 +ENDCHAR +STARTCHAR uni89B6 +ENCODING 35254 +BBX 15 16 0 -2 +BITMAP +0F00 +F07C +4944 +2244 +FE7C +1444 +0844 +FF7C +9544 +BD44 +837C +BD28 +9528 +894A +954A +A386 +ENDCHAR +STARTCHAR uni89B7 +ENCODING 35255 +BBX 15 15 1 -1 +BITMAP +1000 +1E7C +1044 +7F7C +5144 +5E44 +717C +4F44 +4044 +547C +5528 +5528 +7728 +942A +7F46 +ENDCHAR +STARTCHAR uni89B8 +ENCODING 35256 +BBX 14 15 1 -2 +BITMAP +EEF8 +AA88 +EE88 +AAF8 +EE88 +8288 +BAF8 +AA88 +BA88 +AAF8 +BA50 +AA50 +8294 +8A94 +850C +ENDCHAR +STARTCHAR uni89B9 +ENCODING 35257 +BBX 15 16 0 -2 +BITMAP +0144 +F954 +8B54 +8DF8 +F80E +8912 +8AEA +FE0A +8A0A +8AEA +FAAA +52A4 +52B4 +56AA +5B0A +9210 +ENDCHAR +STARTCHAR uni89BA +ENCODING 35258 +BBX 15 15 1 -1 +BITMAP +3AB8 +2108 +3AB8 +2108 +3AB8 +2008 +7FFC +4824 +4FE4 +0820 +0FE0 +0820 +0FE2 +1842 +E03E +ENDCHAR +STARTCHAR uni89BB +ENCODING 35259 +BBX 15 16 0 -2 +BITMAP +0800 +0F7C +0844 +7F44 +497C +4C44 +7944 +477C +4044 +5F44 +407C +5F28 +5128 +5F4A +8A4A +3F86 +ENDCHAR +STARTCHAR uni89BC +ENCODING 35260 +BBX 15 15 0 -2 +BITMAP +FF7C +5244 +9144 +FFFC +9144 +DB44 +B57C +DB44 +9144 +DB7C +B528 +DB28 +914A +954A +8286 +ENDCHAR +STARTCHAR uni89BD +ENCODING 35261 +BBX 15 15 1 -1 +BITMAP +0040 +7E7E +4880 +7E7C +4200 +7EFE +48AA +7FFE +1010 +1FF0 +1010 +1FF0 +0442 +1842 +E03E +ENDCHAR +STARTCHAR uni89BE +ENCODING 35262 +BBX 15 16 0 -2 +BITMAP +1000 +087C +7F44 +4144 +867C +7844 +4944 +2A7C +FF44 +2A44 +417C +BE28 +2A28 +3E4A +2A4A +3E86 +ENDCHAR +STARTCHAR uni89BF +ENCODING 35263 +BBX 15 15 1 -1 +BITMAP +0800 +087C +FF44 +087C +7E44 +0044 +FF7C +A544 +FF44 +427C +7E28 +4228 +7E28 +244A +C286 +ENDCHAR +STARTCHAR uni89C0 +ENCODING 35264 +BBX 15 15 1 -1 +BITMAP +2200 +227C +FF44 +227C +7744 +5544 +777C +2444 +7FC4 +C87C +7F28 +4828 +7F28 +484A +7F86 +ENDCHAR +STARTCHAR uni89C1 +ENCODING 35265 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1010 +1110 +1110 +1110 +1110 +1110 +1290 +1290 +0480 +0480 +0882 +3082 +C07E +ENDCHAR +STARTCHAR uni89C2 +ENCODING 35266 +BBX 15 15 0 -2 +BITMAP +01FC +0104 +FD04 +0524 +0524 +4924 +2924 +1124 +1154 +2850 +2490 +4490 +8112 +0212 +040E +ENDCHAR +STARTCHAR uni89C3 +ENCODING 35267 +BBX 15 15 0 -2 +BITMAP +3E7C +2204 +2208 +2A10 +2A10 +2AFE +2A10 +2A10 +2A10 +0810 +1450 +1422 +2402 +43FE +8000 +ENDCHAR +STARTCHAR uni89C4 +ENCODING 35268 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +7D04 +1124 +1124 +1124 +FF24 +1124 +1154 +1050 +2890 +2490 +4512 +8212 +040E +ENDCHAR +STARTCHAR uni89C5 +ENCODING 35269 +BBX 14 16 1 -2 +BITMAP +03F0 +FC00 +2420 +1220 +1240 +0000 +3FE0 +2020 +2220 +2220 +2220 +2520 +0500 +0904 +3104 +C0FC +ENDCHAR +STARTCHAR uni89C6 +ENCODING 35270 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1104 +F904 +0924 +1124 +1124 +3924 +5524 +9554 +1050 +1090 +1090 +1112 +1212 +140E +ENDCHAR +STARTCHAR uni89C7 +ENCODING 35271 +BBX 14 16 1 -2 +BITMAP +2000 +23F8 +2208 +3E08 +2248 +2248 +2248 +2248 +FA48 +8AA8 +88A0 +8920 +8920 +FA24 +8C24 +081C +ENDCHAR +STARTCHAR uni89C8 +ENCODING 35272 +BBX 13 16 1 -2 +BITMAP +0880 +4880 +48F8 +4920 +4A10 +0800 +3FE0 +2020 +2220 +2220 +2220 +2520 +0500 +0908 +3108 +C0F8 +ENDCHAR +STARTCHAR uni89C9 +ENCODING 35273 +BBX 15 16 0 -2 +BITMAP +2208 +1110 +0020 +7FFE +4002 +8004 +1FF0 +1010 +1110 +1110 +1110 +1290 +0280 +0484 +1884 +607C +ENDCHAR +STARTCHAR uni89CA +ENCODING 35274 +BBX 14 16 1 -2 +BITMAP +1000 +92F8 +9288 +9288 +FEA8 +00A8 +FEA8 +02A8 +02A8 +7EA8 +4020 +4050 +4650 +5894 +6114 +020C +ENDCHAR +STARTCHAR uni89CB +ENCODING 35275 +BBX 15 15 0 -2 +BITMAP +007C +7F44 +0844 +0854 +2A54 +2A54 +2A54 +5D54 +4954 +8810 +0828 +0F28 +F04A +408A +0106 +ENDCHAR +STARTCHAR uni89CC +ENCODING 35276 +BBX 15 16 0 -2 +BITMAP +0800 +087C +7E44 +0844 +0854 +FF54 +0154 +2A54 +1854 +4854 +2810 +FF28 +1428 +224A +414A +8186 +ENDCHAR +STARTCHAR uni89CD +ENCODING 35277 +BBX 15 16 0 -2 +BITMAP +1400 +147C +1444 +7F44 +5554 +5554 +5554 +7F54 +5554 +5554 +5510 +FFA8 +2428 +224A +428A +8106 +ENDCHAR +STARTCHAR uni89CE +ENCODING 35278 +BBX 15 16 0 -2 +BITMAP +1000 +287C +4444 +8244 +7D54 +0054 +F154 +9554 +9554 +F554 +9510 +9528 +F528 +914A +954A +B286 +ENDCHAR +STARTCHAR uni89CF +ENCODING 35279 +BBX 15 16 0 -2 +BITMAP +2400 +247C +FF44 +2444 +7E54 +2454 +FF54 +0854 +7E54 +4A54 +7E10 +4A28 +FF28 +424A +4A4A +4486 +ENDCHAR +STARTCHAR uni89D0 +ENCODING 35280 +BBX 15 16 0 -2 +BITMAP +2200 +227C +FFC4 +2244 +3E54 +0854 +7F54 +4954 +7F54 +0854 +7F10 +0828 +7F28 +084A +0F4A +F086 +ENDCHAR +STARTCHAR uni89D1 +ENCODING 35281 +BBX 15 16 0 -2 +BITMAP +1000 +1E7C +1044 +7F44 +5154 +5C54 +7254 +4E54 +4054 +4A54 +6A90 +5B28 +4A28 +8F4A +784A +0086 +ENDCHAR +STARTCHAR uni89D2 +ENCODING 35282 +BBX 12 15 2 -1 +BITMAP +0800 +0F80 +1080 +2100 +FFF0 +2210 +2210 +3FF0 +2210 +2210 +3FF0 +2010 +4010 +4010 +8070 +ENDCHAR +STARTCHAR uni89D3 +ENCODING 35283 +BBX 14 16 0 -2 +BITMAP +1004 +1004 +1F24 +2124 +4224 +BFA4 +24A4 +24A4 +3FA4 +24AC +24B4 +3FA4 +2484 +4484 +4284 +8104 +ENDCHAR +STARTCHAR uni89D4 +ENCODING 35284 +BBX 14 15 1 -1 +BITMAP +2040 +3C40 +2440 +4840 +FDFC +5444 +5444 +7C44 +5444 +5444 +7C44 +4484 +4484 +8504 +9E38 +ENDCHAR +STARTCHAR uni89D5 +ENCODING 35285 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +50F8 +5108 +7E10 +55FC +9124 +1124 +1DFC +F124 +5124 +11FC +1124 +1224 +1214 +1408 +ENDCHAR +STARTCHAR uni89D6 +ENCODING 35286 +BBX 15 15 1 -1 +BITMAP +2040 +3C40 +2440 +49FC +FC44 +5444 +5444 +7C44 +57FE +5450 +7C50 +4448 +4488 +8484 +8D02 +ENDCHAR +STARTCHAR uni89D7 +ENCODING 35287 +BBX 15 16 0 -2 +BITMAP +1004 +101E +3CF0 +2490 +4890 +BE90 +2A90 +2AFE +3E90 +2A90 +2A90 +3E88 +2A8A +4AAA +42C6 +8682 +ENDCHAR +STARTCHAR uni89D8 +ENCODING 35288 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +2420 +48A8 +FCA8 +5524 +5524 +7E22 +5460 +5404 +7C04 +4408 +4410 +8460 +8D80 +ENDCHAR +STARTCHAR uni89D9 +ENCODING 35289 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +3C44 +2448 +4848 +BE50 +2A5C +2A44 +3E44 +2A44 +2A68 +3EA8 +2A90 +4A98 +4324 +8642 +ENDCHAR +STARTCHAR uni89DA +ENCODING 35290 +BBX 15 15 1 -1 +BITMAP +101C +3CE8 +2488 +48A8 +FCA8 +54A8 +54A8 +7CA4 +54A4 +54A4 +7CA4 +44AA +44BA +8566 +8D02 +ENDCHAR +STARTCHAR uni89DB +ENCODING 35291 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +3CFC +2484 +4884 +BE84 +2AFC +2A84 +3E84 +2A84 +2AFC +3E84 +2A00 +4A00 +43FE +8600 +ENDCHAR +STARTCHAR uni89DC +ENCODING 35292 +BBX 15 15 1 -1 +BITMAP +0840 +084C +2E70 +2842 +2F42 +F83E +0FC0 +1080 +7FF8 +1108 +1FF8 +1108 +1FF8 +2008 +4018 +ENDCHAR +STARTCHAR uni89DD +ENCODING 35293 +BBX 15 15 1 -1 +BITMAP +1018 +3CF0 +2490 +4890 +FC90 +5490 +54FE +7C90 +5490 +5490 +7CD0 +4588 +440A +85EA +9C04 +ENDCHAR +STARTCHAR uni89DE +ENCODING 35294 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3C7E +2480 +497C +BE08 +2A10 +2A20 +3EFE +2A4A +2A4A +3E92 +2B12 +4A22 +4254 +8688 +ENDCHAR +STARTCHAR uni89DF +ENCODING 35295 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +3C7C +2410 +4810 +BE10 +2AFE +2A00 +3E10 +2A10 +2A7C +3E10 +2A10 +4A10 +42FE +8600 +ENDCHAR +STARTCHAR uni89E0 +ENCODING 35296 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +7FFC +0200 +FFFE +0820 +3818 +CFC6 +1080 +3FF8 +5108 +1FF8 +1108 +1FF8 +1108 +2118 +ENDCHAR +STARTCHAR uni89E1 +ENCODING 35297 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3C78 +2488 +4950 +BE20 +2A50 +2A88 +3F06 +2AF8 +2A88 +3E88 +2A88 +4A88 +42F8 +8688 +ENDCHAR +STARTCHAR uni89E2 +ENCODING 35298 +BBX 13 16 1 -2 +BITMAP +1000 +FEF8 +1048 +7C48 +1088 +FEA8 +1110 +1F80 +2100 +7FF0 +A210 +3FF0 +2210 +3FF0 +2210 +4230 +ENDCHAR +STARTCHAR uni89E3 +ENCODING 35299 +BBX 15 15 1 -1 +BITMAP +2000 +3DFC +4844 +4844 +FC84 +5738 +5520 +7D20 +55FC +5620 +7C20 +47FE +4420 +8420 +9C20 +ENDCHAR +STARTCHAR uni89E4 +ENCODING 35300 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +78FC +4904 +9208 +7DFE +5500 +557C +7D44 +5544 +5554 +7D48 +5542 +5542 +453E +8E00 +ENDCHAR +STARTCHAR uni89E5 +ENCODING 35301 +BBX 15 15 1 -1 +BITMAP +2020 +3924 +2924 +50A8 +FCA8 +5420 +5420 +7FFE +5450 +5450 +7C50 +4490 +4490 +8512 +9E0E +ENDCHAR +STARTCHAR uni89E6 +ENCODING 35302 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +4820 +91FC +7D24 +5524 +5524 +7D24 +55FC +5420 +7C20 +4428 +442C +8472 +9F82 +ENDCHAR +STARTCHAR uni89E7 +ENCODING 35303 +BBX 15 15 1 -1 +BITMAP +1084 +3C44 +2448 +49FC +FC20 +5420 +5420 +7DFC +5420 +5420 +7C20 +47FE +4420 +8420 +8C20 +ENDCHAR +STARTCHAR uni89E8 +ENCODING 35304 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7820 +4820 +93FE +7C00 +5420 +5422 +7FB2 +54B4 +54A8 +7D28 +5524 +5624 +44A2 +8C40 +ENDCHAR +STARTCHAR uni89E9 +ENCODING 35305 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +7824 +4820 +93FE +7C20 +5520 +54B2 +7CB4 +5468 +54A8 +7D24 +5622 +5420 +44A0 +8C40 +ENDCHAR +STARTCHAR uni89EA +ENCODING 35306 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +3CFC +2400 +4888 +BE50 +2BFE +2A20 +3E20 +2A20 +2AFC +3E20 +2A20 +4A20 +4220 +8620 +ENDCHAR +STARTCHAR uni89EB +ENCODING 35307 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +27FE +4820 +FDFC +5524 +5524 +7D24 +55FC +54A8 +7CA8 +4524 +4524 +8622 +8C20 +ENDCHAR +STARTCHAR uni89EC +ENCODING 35308 +BBX 15 16 0 -2 +BITMAP +2000 +2040 +799C +4904 +9104 +7DDC +5504 +5504 +7DFC +5450 +5450 +7C50 +5490 +5492 +4512 +8E0E +ENDCHAR +STARTCHAR uni89ED +ENCODING 35309 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +79FC +4850 +9088 +7D04 +57FE +5408 +7DE8 +5528 +5528 +7DE8 +5528 +5408 +4428 +8C10 +ENDCHAR +STARTCHAR uni89EE +ENCODING 35310 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +3C04 +2404 +487C +BE04 +2A04 +2AFE +3E10 +2A92 +2A54 +3E38 +2A54 +4A92 +4250 +8620 +ENDCHAR +STARTCHAR uni89EF +ENCODING 35311 +BBX 15 16 0 -2 +BITMAP +2104 +2088 +7850 +49FC +9124 +7D24 +55FC +5524 +7D24 +55FC +5420 +7C20 +57FE +5420 +4420 +8C20 +ENDCHAR +STARTCHAR uni89F0 +ENCODING 35312 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3CFA +2424 +4828 +BFFE +2A20 +2A40 +3EFC +2B44 +2A44 +3E7C +2A44 +4A44 +427C +8644 +ENDCHAR +STARTCHAR uni89F1 +ENCODING 35313 +BBX 15 15 1 -1 +BITMAP +0048 +7FFE +4040 +5E44 +4028 +5E30 +53F2 +9C4A +9FFC +3108 +1FF8 +1108 +1FF8 +2008 +4038 +ENDCHAR +STARTCHAR uni89F2 +ENCODING 35314 +BBX 15 16 0 -2 +BITMAP +2088 +2050 +7BFE +4820 +91FC +7C20 +57FE +5400 +7CA0 +54FC +5520 +7C20 +57FE +5420 +4420 +8C20 +ENDCHAR +STARTCHAR uni89F3 +ENCODING 35315 +BBX 15 15 1 -1 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FF8E +8100 +7EFC +2444 +7E44 +4A28 +7E10 +4A28 +7E44 +8282 +ENDCHAR +STARTCHAR uni89F4 +ENCODING 35316 +BBX 15 15 1 -1 +BITMAP +2080 +39FE +4A00 +50F8 +FC88 +54F8 +5488 +7CF8 +5400 +57FE +7C80 +45FE +4652 +85A2 +9C4C +ENDCHAR +STARTCHAR uni89F5 +ENCODING 35317 +BBX 15 16 0 -2 +BITMAP +2048 +2048 +79FC +4848 +9048 +7DFE +5420 +55FC +7D24 +55FC +5524 +7DFC +5400 +5448 +4484 +8D02 +ENDCHAR +STARTCHAR uni89F6 +ENCODING 35318 +BBX 15 15 1 -1 +BITMAP +2000 +3BDE +2A52 +53DE +FC00 +55FC +5524 +7DFC +5524 +5524 +7DFC +4420 +47FE +8420 +9C20 +ENDCHAR +STARTCHAR uni89F7 +ENCODING 35319 +BBX 15 16 0 -2 +BITMAP +0A80 +3138 +2288 +3938 +2288 +FFFE +8802 +0FC0 +1080 +3FF8 +5108 +1FF8 +1108 +1FF8 +1108 +2118 +ENDCHAR +STARTCHAR uni89F8 +ENCODING 35320 +BBX 15 15 1 -1 +BITMAP +2000 +3DFC +2554 +4954 +FDFC +5480 +55FE +7F22 +54FA +54AA +7CFA +4422 +442A +843A +8DC4 +ENDCHAR +STARTCHAR uni89F9 +ENCODING 35321 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +3CFE +2590 +48FC +BE90 +2AFC +2A90 +3EFE +2A00 +2AEE +3EAA +2AAA +4ABA +4282 +8686 +ENDCHAR +STARTCHAR uni89FA +ENCODING 35322 +BBX 15 16 0 -2 +BITMAP +48F8 +7050 +4420 +3DFC +2024 +7CB8 +90A0 +7D7E +2A00 +4FF0 +1020 +2FF8 +4888 +0FF8 +0888 +1098 +ENDCHAR +STARTCHAR uni89FB +ENCODING 35323 +BBX 15 16 0 -2 +BITMAP +2124 +2174 +7A58 +4ADA +93FE +7D54 +56DA +57FE +7CA2 +5420 +57FE +7C70 +54A8 +5524 +4622 +8C20 +ENDCHAR +STARTCHAR uni89FC +ENCODING 35324 +BBX 15 16 0 -2 +BITMAP +2080 +20F8 +7908 +4BFE +9122 +7D52 +54FC +5484 +7CFC +5484 +54FC +7C40 +54FC +5544 +4438 +8CEE +ENDCHAR +STARTCHAR uni89FD +ENCODING 35325 +BBX 15 15 1 -1 +BITMAP +2020 +3A22 +2BFE +5088 +FCFE +5590 +56FC +7C90 +54FC +5490 +7DFE +454A +457A +8502 +9D06 +ENDCHAR +STARTCHAR uni89FE +ENCODING 35326 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +7BFE +4888 +90F8 +7D04 +5574 +5756 +7D54 +5554 +5774 +7D06 +5400 +5554 +452A +8E2A +ENDCHAR +STARTCHAR uni89FF +ENCODING 35327 +BBX 15 15 1 -1 +BITMAP +2020 +3A22 +2BFE +5088 +FCFE +5590 +56FC +7C90 +54FC +5490 +7DFE +454A +457E +85CA +9D7A +ENDCHAR +STARTCHAR uni8A00 +ENCODING 35328 +BBX 13 14 2 -1 +BITMAP +1FC0 +0000 +FFF8 +0000 +3FE0 +0000 +3FE0 +0000 +0000 +3FE0 +2020 +2020 +2020 +3FE0 +ENDCHAR +STARTCHAR uni8A01 +ENCODING 35329 +BBX 7 15 0 -1 +BITMAP +20 +10 +10 +FE +00 +7C +00 +7C +00 +7C +44 +44 +44 +7C +44 +ENDCHAR +STARTCHAR uni8A02 +ENCODING 35330 +BBX 15 14 1 -1 +BITMAP +7800 +01FE +FC10 +0010 +7810 +0010 +7810 +0010 +0010 +7810 +4810 +4810 +4810 +7870 +ENDCHAR +STARTCHAR uni8A03 +ENCODING 35331 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +0020 +FE20 +0020 +7C20 +0038 +7C24 +0022 +0020 +7C20 +4420 +4420 +4420 +7C20 +ENDCHAR +STARTCHAR uni8A04 +ENCODING 35332 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FC +2000 +FDF8 +2400 +25F8 +2400 +25F8 +2508 +2508 +25FA +250A +4402 +43FE +8000 +ENDCHAR +STARTCHAR uni8A05 +ENCODING 35333 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +1040 +FE40 +01F8 +7C48 +0048 +7C48 +0048 +7C48 +4448 +444A +448A +7C8A +4506 +0200 +ENDCHAR +STARTCHAR uni8A06 +ENCODING 35334 +BBX 14 16 0 -2 +BITMAP +2004 +1004 +1084 +FE84 +0084 +7C84 +0084 +7C84 +008C +7C94 +44E4 +4484 +4404 +7C04 +4404 +0004 +ENDCHAR +STARTCHAR uni8A07 +ENCODING 35335 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +1FFC +2004 +4204 +BFE4 +0004 +1FC4 +0004 +1FC4 +0004 +1FC4 +1044 +1FC4 +1054 +0008 +ENDCHAR +STARTCHAR uni8A08 +ENCODING 35336 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +0020 +FE20 +0020 +7C20 +01FE +7C20 +0020 +0020 +7C20 +4420 +4420 +4420 +7C20 +ENDCHAR +STARTCHAR uni8A09 +ENCODING 35337 +BBX 15 16 0 -2 +BITMAP +2000 +11F0 +0110 +FD10 +0110 +7910 +0190 +7950 +0150 +7910 +4910 +4912 +4912 +7A12 +4A0E +0400 +ENDCHAR +STARTCHAR uni8A0A +ENCODING 35338 +BBX 15 14 1 -1 +BITMAP +7BF8 +0088 +FC88 +0088 +7888 +0088 +7BE8 +0088 +0088 +7888 +4888 +490A +490A +7A06 +ENDCHAR +STARTCHAR uni8A0B +ENCODING 35339 +BBX 14 16 0 -2 +BITMAP +2040 +1040 +1040 +FEFC +0084 +7D04 +0004 +7D04 +0084 +7C44 +4444 +4404 +4404 +7C04 +4428 +0010 +ENDCHAR +STARTCHAR uni8A0C +ENCODING 35340 +BBX 15 14 1 -1 +BITMAP +7C00 +007C +FE10 +0010 +7C10 +0010 +7C10 +0010 +0010 +7C10 +4410 +4410 +45FE +7C00 +ENDCHAR +STARTCHAR uni8A0D +ENCODING 35341 +BBX 15 16 0 -2 +BITMAP +2000 +11F8 +1088 +FEC8 +00A8 +7CA8 +0088 +7C50 +0050 +7C50 +4420 +4420 +4450 +7C88 +4504 +0202 +ENDCHAR +STARTCHAR uni8A0E +ENCODING 35342 +BBX 15 15 1 -1 +BITMAP +0008 +7808 +0008 +FDFE +0008 +7808 +0008 +7908 +0088 +0048 +7808 +4808 +4808 +4808 +7838 +ENDCHAR +STARTCHAR uni8A0F +ENCODING 35343 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +1020 +FE20 +0020 +7C20 +0020 +7DFE +0020 +7C20 +4420 +4420 +4420 +7C20 +44A0 +0040 +ENDCHAR +STARTCHAR uni8A10 +ENCODING 35344 +BBX 15 14 1 -1 +BITMAP +7C7C +0010 +FE10 +0010 +7C10 +0010 +7DFE +0010 +0010 +7C10 +4410 +4410 +4410 +7C10 +ENDCHAR +STARTCHAR uni8A11 +ENCODING 35345 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +0120 +FD20 +013C +79E4 +0324 +7924 +0124 +012C +7920 +4900 +4900 +4902 +78FE +ENDCHAR +STARTCHAR uni8A12 +ENCODING 35346 +BBX 14 14 1 -1 +BITMAP +79FC +0044 +FC44 +0044 +7944 +0144 +7A44 +0244 +0284 +7884 +4884 +4904 +4904 +7A38 +ENDCHAR +STARTCHAR uni8A13 +ENCODING 35347 +BBX 14 15 1 -1 +BITMAP +0004 +7924 +0124 +FD24 +0124 +7924 +0124 +7924 +0124 +0124 +7924 +4924 +4A24 +4A04 +7C04 +ENDCHAR +STARTCHAR uni8A14 +ENCODING 35348 +BBX 14 15 1 -1 +BITMAP +0100 +4104 +7FFC +0000 +1FF0 +0000 +FFFC +0000 +1FF0 +0000 +1FF0 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8A15 +ENCODING 35349 +BBX 14 15 1 -1 +BITMAP +0020 +7820 +0020 +FC20 +0124 +7924 +0124 +7924 +0124 +0124 +7924 +4924 +4924 +4924 +79FC +ENDCHAR +STARTCHAR uni8A16 +ENCODING 35350 +BBX 15 15 1 -1 +BITMAP +0080 +7880 +0080 +FDFE +0100 +7A00 +00FC +7810 +0020 +0040 +7880 +4902 +4902 +4902 +78FE +ENDCHAR +STARTCHAR uni8A17 +ENCODING 35351 +BBX 15 15 1 -1 +BITMAP +0038 +79C0 +0040 +FC40 +0040 +7840 +03FE +7840 +0040 +0040 +7840 +4840 +4842 +4842 +783E +ENDCHAR +STARTCHAR uni8A18 +ENCODING 35352 +BBX 15 14 1 -1 +BITMAP +7DF8 +0008 +FE08 +0008 +7C08 +01F8 +7D00 +0100 +0100 +7D00 +4500 +4502 +4502 +7CFE +ENDCHAR +STARTCHAR uni8A19 +ENCODING 35353 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +1040 +FDF8 +0048 +7C48 +0048 +7D48 +00C8 +7C48 +44A8 +44A8 +448A +7D0A +4506 +0202 +ENDCHAR +STARTCHAR uni8A1A +ENCODING 35354 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0408 +8208 +BFE8 +8008 +9FC8 +8008 +9FC8 +8008 +9FC8 +9048 +9048 +9FC8 +9048 +8018 +ENDCHAR +STARTCHAR uni8A1B +ENCODING 35355 +BBX 15 15 1 -1 +BITMAP +0050 +7850 +0050 +FC90 +0092 +799C +0290 +7890 +0090 +0090 +7890 +4890 +4892 +4892 +788E +ENDCHAR +STARTCHAR uni8A1C +ENCODING 35356 +BBX 15 16 0 -2 +BITMAP +2010 +1050 +1050 +FE50 +0088 +7C88 +0104 +7EFA +0048 +7C48 +4448 +4448 +4488 +7C88 +4528 +0210 +ENDCHAR +STARTCHAR uni8A1D +ENCODING 35357 +BBX 15 14 1 -1 +BITMAP +79FC +0008 +FC88 +0088 +7908 +01FE +7908 +0018 +0018 +7828 +4848 +4888 +4B08 +7838 +ENDCHAR +STARTCHAR uni8A1E +ENCODING 35358 +BBX 15 16 0 -2 +BITMAP +2008 +103C +11E0 +FE20 +0020 +7C20 +03FE +7C20 +0020 +7C50 +4450 +4450 +4488 +7C88 +4504 +0202 +ENDCHAR +STARTCHAR uni8A1F +ENCODING 35359 +BBX 15 15 1 -1 +BITMAP +0020 +7910 +0110 +F908 +0208 +7A44 +0442 +7840 +0040 +0090 +7888 +4888 +491C +49E4 +7F04 +ENDCHAR +STARTCHAR uni8A20 +ENCODING 35360 +BBX 14 16 0 -2 +BITMAP +2004 +11E4 +0024 +FC24 +0024 +79E4 +0104 +7904 +0104 +79E4 +4824 +4824 +4824 +7824 +4944 +0084 +ENDCHAR +STARTCHAR uni8A21 +ENCODING 35361 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +0050 +FE88 +0104 +7EFA +0000 +7C00 +01FC +0004 +7C04 +4408 +4408 +4410 +7C20 +ENDCHAR +STARTCHAR uni8A22 +ENCODING 35362 +BBX 15 15 1 -1 +BITMAP +001C +79E0 +0100 +FD00 +0100 +79FE +0110 +7910 +0110 +0110 +7910 +4A10 +4A10 +4C10 +7810 +ENDCHAR +STARTCHAR uni8A23 +ENCODING 35363 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +0040 +FDF8 +0048 +7848 +0048 +7848 +03FE +0050 +7850 +4888 +4888 +4904 +7E02 +ENDCHAR +STARTCHAR uni8A24 +ENCODING 35364 +BBX 15 16 0 -2 +BITMAP +2008 +1088 +1050 +FE20 +0050 +7C88 +0100 +7C08 +0088 +7C88 +4450 +4450 +4420 +7C50 +4488 +0306 +ENDCHAR +STARTCHAR uni8A25 +ENCODING 35365 +BBX 14 15 1 -1 +BITMAP +0060 +7820 +0020 +FDFC +0124 +7924 +0154 +7954 +0154 +018C +7904 +4904 +4904 +4904 +791C +ENDCHAR +STARTCHAR uni8A26 +ENCODING 35366 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FDFE +0122 +7A24 +0020 +7820 +0050 +7850 +4850 +4850 +4890 +7892 +4912 +020E +ENDCHAR +STARTCHAR uni8A27 +ENCODING 35367 +BBX 15 16 0 -2 +BITMAP +2040 +1050 +1048 +FE48 +0040 +7DFE +0050 +7C50 +0050 +7C50 +4490 +4490 +4492 +7D12 +450E +0200 +ENDCHAR +STARTCHAR uni8A28 +ENCODING 35368 +BBX 15 15 0 -1 +BITMAP +2010 +1010 +1010 +FE90 +0090 +7C90 +009E +7C90 +0090 +7C90 +4490 +4490 +4490 +7C90 +45FE +ENDCHAR +STARTCHAR uni8A29 +ENCODING 35369 +BBX 15 15 0 -1 +BITMAP +2000 +1008 +0108 +FC88 +0252 +7A52 +0222 +7A22 +0252 +7A92 +4B0A +4A0A +4A02 +7BFE +4802 +ENDCHAR +STARTCHAR uni8A2A +ENCODING 35370 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +0020 +FFFE +0040 +7C40 +0040 +7C7C +0044 +0044 +7C44 +4484 +4484 +4504 +7E38 +ENDCHAR +STARTCHAR uni8A2B +ENCODING 35371 +BBX 15 15 0 -1 +BITMAP +2000 +1040 +0020 +FC10 +0090 +7880 +0080 +7A84 +0282 +7A82 +4A82 +4C88 +4888 +7888 +4878 +ENDCHAR +STARTCHAR uni8A2C +ENCODING 35372 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +FEA8 +00A4 +7CA2 +0122 +7D20 +0224 +7C24 +4428 +4408 +4410 +7C20 +44C0 +0300 +ENDCHAR +STARTCHAR uni8A2D +ENCODING 35373 +BBX 15 14 1 -1 +BITMAP +79F0 +0110 +FD10 +0110 +7A10 +041E +7800 +03F8 +0108 +7910 +4890 +4860 +4998 +7E06 +ENDCHAR +STARTCHAR uni8A2E +ENCODING 35374 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0088 +FC88 +0088 +7888 +0088 +7BFE +0088 +7888 +4888 +4888 +4888 +7908 +4908 +0208 +ENDCHAR +STARTCHAR uni8A2F +ENCODING 35375 +BBX 15 16 0 -2 +BITMAP +2000 +13FC +0084 +FC88 +0088 +7890 +009C +7884 +0144 +7944 +4928 +4928 +4A10 +7A28 +4444 +0182 +ENDCHAR +STARTCHAR uni8A30 +ENCODING 35376 +BBX 15 15 0 -1 +BITMAP +2020 +1020 +0020 +FBFE +0020 +7924 +0124 +7924 +0124 +79FC +4824 +4820 +4822 +7822 +481E +ENDCHAR +STARTCHAR uni8A31 +ENCODING 35377 +BBX 15 15 1 -1 +BITMAP +0080 +7880 +01FC +FD20 +0220 +7820 +0020 +7BFE +0020 +0020 +7820 +4820 +4820 +4820 +7820 +ENDCHAR +STARTCHAR uni8A32 +ENCODING 35378 +BBX 14 16 0 -2 +BITMAP +2020 +1020 +0020 +FC20 +01FC +7924 +0124 +7924 +0124 +79FC +4924 +4820 +4820 +7820 +4820 +0020 +ENDCHAR +STARTCHAR uni8A33 +ENCODING 35379 +BBX 15 14 1 -1 +BITMAP +7CFC +0084 +FE84 +0084 +7C84 +00FC +7C90 +0090 +0090 +7C90 +4488 +4508 +4504 +7E02 +ENDCHAR +STARTCHAR uni8A34 +ENCODING 35380 +BBX 15 14 1 -1 +BITMAP +781C +01E0 +FD00 +0100 +79FE +0110 +7910 +0110 +0170 +791C +4A12 +4A10 +4C10 +7810 +ENDCHAR +STARTCHAR uni8A35 +ENCODING 35381 +BBX 15 14 1 -1 +BITMAP +7800 +03FE +FE52 +0252 +7A52 +0252 +7A92 +029E +0302 +7A02 +4A02 +4A02 +4BFE +7800 +ENDCHAR +STARTCHAR uni8A36 +ENCODING 35382 +BBX 15 14 1 -1 +BITMAP +7BFE +0004 +FC04 +0004 +79E4 +0124 +7924 +0124 +0124 +79E4 +4804 +4804 +4804 +781C +ENDCHAR +STARTCHAR uni8A37 +ENCODING 35383 +BBX 14 15 1 -1 +BITMAP +0020 +7820 +0020 +FDFC +0124 +7924 +0124 +79FC +0124 +0124 +7924 +49FC +4820 +4820 +7820 +ENDCHAR +STARTCHAR uni8A38 +ENCODING 35384 +BBX 15 16 0 -2 +BITMAP +201C +10E0 +1020 +FE20 +0020 +7DFE +0020 +7C70 +0070 +7CA8 +44A8 +4524 +4622 +7C20 +4420 +0020 +ENDCHAR +STARTCHAR uni8A39 +ENCODING 35385 +BBX 15 16 0 -2 +BITMAP +2020 +1028 +1024 +FC20 +03FE +7C20 +0070 +7C70 +00A8 +7CA8 +4524 +4622 +4420 +7C20 +4420 +0020 +ENDCHAR +STARTCHAR uni8A3A +ENCODING 35386 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +0050 +FC88 +0306 +7820 +0040 +7988 +0010 +0060 +7982 +4804 +4808 +4830 +79C0 +ENDCHAR +STARTCHAR uni8A3B +ENCODING 35387 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +0020 +FDFC +0020 +7820 +0020 +7820 +01FC +0020 +7820 +4820 +4820 +4820 +7BFE +ENDCHAR +STARTCHAR uni8A3C +ENCODING 35388 +BBX 15 14 1 -1 +BITMAP +7BFC +0020 +FC20 +0020 +7920 +0120 +793C +0120 +0120 +7920 +4920 +4920 +4920 +7BFE +ENDCHAR +STARTCHAR uni8A3D +ENCODING 35389 +BBX 14 16 0 -2 +BITMAP +2080 +1080 +0100 +FDFC +0204 +7C04 +01E4 +7924 +0124 +7924 +49E4 +4924 +4804 +7804 +4828 +0010 +ENDCHAR +STARTCHAR uni8A3E +ENCODING 35390 +BBX 15 15 1 -1 +BITMAP +0880 +4898 +4EE0 +4882 +4882 +5E7E +E3C0 +0000 +3FF8 +0000 +0FE0 +0000 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8A3F +ENCODING 35391 +BBX 15 15 0 -1 +BITMAP +2090 +1090 +0090 +FA90 +0292 +7AD4 +0298 +7A90 +0290 +7A90 +4A90 +4A92 +4AD2 +7F12 +4A0E +ENDCHAR +STARTCHAR uni8A40 +ENCODING 35392 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1020 +FE20 +003E +7C20 +0020 +7C20 +01FC +7D04 +4504 +4504 +4504 +7D04 +45FC +0104 +ENDCHAR +STARTCHAR uni8A41 +ENCODING 35393 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +0020 +FC20 +03FE +7820 +0020 +7820 +01FC +0104 +7904 +4904 +4904 +4904 +79FC +ENDCHAR +STARTCHAR uni8A42 +ENCODING 35394 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +0088 +FD08 +017E +7B08 +0508 +7948 +0128 +7928 +4908 +4908 +4908 +7908 +4928 +0110 +ENDCHAR +STARTCHAR uni8A43 +ENCODING 35395 +BBX 15 15 0 -1 +BITMAP +2020 +1010 +1010 +FDFE +0020 +7C20 +0044 +7C84 +01F8 +7C10 +4420 +4444 +4482 +7DFE +4482 +ENDCHAR +STARTCHAR uni8A44 +ENCODING 35396 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0120 +FD20 +01FC +7920 +0220 +7820 +03FE +7820 +4850 +4850 +4888 +7888 +4904 +0202 +ENDCHAR +STARTCHAR uni8A45 +ENCODING 35397 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +0050 +FE88 +0104 +7EFA +0000 +7C00 +01FC +0044 +7C44 +4444 +445C +4440 +7C40 +ENDCHAR +STARTCHAR uni8A46 +ENCODING 35398 +BBX 15 15 1 -1 +BITMAP +001C +79F0 +0110 +FD10 +0110 +7910 +01FE +7910 +0110 +0110 +7910 +49C8 +4B0A +480A +7BE4 +ENDCHAR +STARTCHAR uni8A47 +ENCODING 35399 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +0020 +FDFC +0124 +7924 +0124 +7924 +03FE +0020 +7850 +4850 +4888 +4904 +7A02 +ENDCHAR +STARTCHAR uni8A48 +ENCODING 35400 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +7FFC +0000 +1FF0 +0000 +FFFE +0000 +1FF0 +0000 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8A49 +ENCODING 35401 +BBX 15 16 0 -2 +BITMAP +4100 +2100 +013E +F912 +07D2 +7252 +0252 +7254 +0254 +7494 +5288 +5108 +5294 +74A4 +5842 +0080 +ENDCHAR +STARTCHAR uni8A4A +ENCODING 35402 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1124 +FEA4 +00A8 +7C20 +01FC +7C20 +0020 +7C20 +47FE +4420 +4420 +7C20 +4420 +0020 +ENDCHAR +STARTCHAR uni8A4B +ENCODING 35403 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0104 +FD04 +0104 +7904 +01FC +7850 +0050 +7850 +4850 +4892 +4892 +7912 +4A0E +0400 +ENDCHAR +STARTCHAR uni8A4C +ENCODING 35404 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +1088 +FE88 +01FE +7C88 +0088 +7C88 +0088 +7CF8 +4488 +4488 +4488 +7C88 +44F8 +0088 +ENDCHAR +STARTCHAR uni8A4D +ENCODING 35405 +BBX 15 14 1 -1 +BITMAP +7948 +0148 +FD48 +0148 +7BFE +0148 +7948 +0148 +0148 +7978 +4900 +4900 +4900 +79FC +ENDCHAR +STARTCHAR uni8A4E +ENCODING 35406 +BBX 15 14 1 -1 +BITMAP +79FE +0080 +FC80 +0080 +78FC +0084 +7884 +0084 +00FC +7880 +4880 +4880 +4880 +79FE +ENDCHAR +STARTCHAR uni8A4F +ENCODING 35407 +BBX 15 16 0 -2 +BITMAP +2010 +1090 +0090 +FD10 +017E +7A52 +0392 +7892 +0112 +7912 +4A52 +4BD2 +4862 +7822 +484A +0084 +ENDCHAR +STARTCHAR uni8A50 +ENCODING 35408 +BBX 15 15 1 -1 +BITMAP +0040 +7C40 +0040 +FEFE +00A0 +7D20 +0020 +7C3C +0020 +0020 +7C20 +443C +4420 +4420 +7C20 +ENDCHAR +STARTCHAR uni8A51 +ENCODING 35409 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FE02 +0202 +7880 +0084 +7898 +00E0 +0080 +7880 +4880 +4882 +4882 +787E +ENDCHAR +STARTCHAR uni8A52 +ENCODING 35410 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +0040 +FC88 +0084 +791A +03E2 +7800 +0000 +01FC +7904 +4904 +4904 +4904 +79FC +ENDCHAR +STARTCHAR uni8A53 +ENCODING 35411 +BBX 15 15 0 -1 +BITMAP +2020 +1020 +1020 +FDFC +0020 +7C20 +0020 +7DFE +0020 +7C20 +4440 +4448 +4484 +7DFE +4482 +ENDCHAR +STARTCHAR uni8A54 +ENCODING 35412 +BBX 14 14 1 -1 +BITMAP +7DFC +0044 +FC44 +0044 +7C84 +0084 +7D18 +0000 +01FC +7D04 +4504 +4504 +4504 +7DFC +ENDCHAR +STARTCHAR uni8A55 +ENCODING 35413 +BBX 15 14 1 -1 +BITMAP +79FC +0020 +FD24 +0124 +78A8 +00A8 +7820 +03FE +0020 +7820 +4820 +4820 +4820 +7820 +ENDCHAR +STARTCHAR uni8A56 +ENCODING 35414 +BBX 15 16 0 -2 +BITMAP +2010 +1010 +0010 +FDFE +0112 +7914 +0110 +79FC +0144 +7944 +4928 +4928 +4910 +7A28 +4A44 +0482 +ENDCHAR +STARTCHAR uni8A57 +ENCODING 35415 +BBX 15 16 0 -2 +BITMAP +2000 +11FE +1102 +FF02 +0102 +7D7A +014A +7D4A +014A +7D4A +457A +454A +4502 +7D02 +450A +0104 +ENDCHAR +STARTCHAR uni8A58 +ENCODING 35416 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +0124 +FD24 +0124 +7924 +01FC +7820 +0020 +0222 +7A22 +4A22 +4A22 +4A22 +7BFE +ENDCHAR +STARTCHAR uni8A59 +ENCODING 35417 +BBX 15 16 0 -2 +BITMAP +2050 +1048 +0048 +FC40 +03FE +7880 +0080 +78FC +0144 +7944 +4928 +4928 +4A10 +7A28 +4444 +0182 +ENDCHAR +STARTCHAR uni8A5A +ENCODING 35418 +BBX 15 15 0 -1 +BITMAP +2000 +1000 +10FC +FE84 +0084 +7C84 +00FC +7C84 +0084 +7C84 +44FC +4484 +4400 +7C00 +45FE +ENDCHAR +STARTCHAR uni8A5B +ENCODING 35419 +BBX 15 14 1 -1 +BITMAP +78F8 +0088 +FC88 +0088 +78F8 +0088 +7888 +0088 +00F8 +7888 +4888 +4888 +4888 +7BFE +ENDCHAR +STARTCHAR uni8A5C +ENCODING 35420 +BBX 15 16 0 -2 +BITMAP +2020 +1124 +0124 +FD24 +01FC +7820 +0020 +7BFC +0104 +7888 +4888 +4850 +4820 +7850 +4988 +0606 +ENDCHAR +STARTCHAR uni8A5D +ENCODING 35421 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FE02 +0202 +7800 +03FE +7820 +0020 +0020 +7820 +4820 +4820 +4820 +78E0 +ENDCHAR +STARTCHAR uni8A5E +ENCODING 35422 +BBX 14 14 1 -1 +BITMAP +7DFC +0004 +FE04 +00F4 +7C04 +0004 +7CF4 +0094 +0094 +7C94 +44F4 +4404 +4404 +7C1C +ENDCHAR +STARTCHAR uni8A5F +ENCODING 35423 +BBX 15 16 0 -2 +BITMAP +0480 +0440 +FFFE +0940 +1184 +66FC +0100 +7FFC +0000 +3FF8 +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8A60 +ENCODING 35424 +BBX 15 15 1 -1 +BITMAP +0080 +7840 +0030 +FC00 +00E0 +7820 +0032 +7BB4 +00B4 +00A8 +78A8 +4924 +4924 +4A22 +7860 +ENDCHAR +STARTCHAR uni8A61 +ENCODING 35425 +BBX 15 14 1 -1 +BITMAP +7BDE +0042 +FC42 +0042 +78C6 +035A +7842 +0042 +00C6 +7B5A +4842 +4842 +4842 +79CE +ENDCHAR +STARTCHAR uni8A62 +ENCODING 35426 +BBX 15 15 1 -1 +BITMAP +0080 +7880 +01FE +FD02 +0202 +78F2 +0092 +7892 +00F2 +0092 +7892 +48F2 +4804 +4804 +7818 +ENDCHAR +STARTCHAR uni8A63 +ENCODING 35427 +BBX 15 15 1 -1 +BITMAP +0080 +7C80 +008C +FEF0 +0080 +7C82 +007E +7C00 +00FC +0084 +7C84 +44FC +4484 +4484 +7CFC +ENDCHAR +STARTCHAR uni8A64 +ENCODING 35428 +BBX 15 16 0 -2 +BITMAP +2010 +1110 +1110 +FF28 +0144 +7D00 +01FE +7C00 +00A8 +7CA8 +44A8 +44A8 +44A8 +7CAA +452A +0206 +ENDCHAR +STARTCHAR uni8A65 +ENCODING 35429 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1050 +FE50 +0088 +7D04 +02FA +7C00 +0000 +7CF8 +4488 +4488 +4488 +7C88 +44F8 +0088 +ENDCHAR +STARTCHAR uni8A66 +ENCODING 35430 +BBX 15 15 1 -1 +BITMAP +0010 +7814 +0012 +FC10 +03FE +7810 +0010 +7BD0 +0090 +0090 +7890 +4888 +48EA +4B8A +7804 +ENDCHAR +STARTCHAR uni8A67 +ENCODING 35431 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +3EFC +6244 +9448 +4830 +3110 +2FE8 +C006 +1FF0 +0000 +1FF0 +0000 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8A68 +ENCODING 35432 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +0020 +FDFE +0000 +7888 +0104 +7A02 +0088 +7888 +4850 +4850 +4820 +7850 +4888 +0306 +ENDCHAR +STARTCHAR uni8A69 +ENCODING 35433 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +01FC +FC20 +0020 +7BFE +0008 +7808 +07FE +0008 +7908 +4888 +4848 +4808 +7838 +ENDCHAR +STARTCHAR uni8A6A +ENCODING 35434 +BBX 15 16 0 -2 +BITMAP +2000 +11F8 +0108 +FD08 +01F8 +7908 +0108 +79F8 +0144 +7948 +4930 +4920 +4910 +7948 +4986 +0100 +ENDCHAR +STARTCHAR uni8A6B +ENCODING 35435 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FE02 +023A +79C0 +0040 +7840 +03FE +0040 +7840 +4840 +4842 +4842 +783E +ENDCHAR +STARTCHAR uni8A6C +ENCODING 35436 +BBX 15 15 1 -1 +BITMAP +000C +79F0 +0100 +FD00 +0100 +79FE +0100 +7900 +01FC +0184 +7A84 +4A84 +4C84 +4884 +78FC +ENDCHAR +STARTCHAR uni8A6D +ENCODING 35437 +BBX 15 15 1 -1 +BITMAP +0080 +78F8 +0088 +FD10 +03FE +7900 +0100 +797C +0144 +0144 +794C +4A40 +4A40 +4C42 +783E +ENDCHAR +STARTCHAR uni8A6E +ENCODING 35438 +BBX 15 15 1 -1 +BITMAP +00E0 +7820 +0050 +FC88 +0306 +7800 +01FC +7820 +0020 +0020 +79FC +4820 +4820 +4820 +7BFE +ENDCHAR +STARTCHAR uni8A6F +ENCODING 35439 +BBX 14 16 0 -2 +BITMAP +2020 +1020 +0040 +FDFC +0104 +7904 +0104 +79FC +0104 +7904 +49FC +4904 +4904 +7904 +49FC +0104 +ENDCHAR +STARTCHAR uni8A70 +ENCODING 35440 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +0020 +FFFE +0020 +7820 +0020 +79FC +0000 +01FC +7904 +4904 +4904 +4904 +79FC +ENDCHAR +STARTCHAR uni8A71 +ENCODING 35441 +BBX 15 15 1 -1 +BITMAP +0018 +79E0 +0020 +FC20 +0020 +7BFE +0020 +7820 +0020 +01FC +7904 +4904 +4904 +4904 +79FC +ENDCHAR +STARTCHAR uni8A72 +ENCODING 35442 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +0020 +FDFE +0020 +7C48 +0088 +7C50 +0024 +0044 +7C88 +4410 +4428 +4444 +7D82 +ENDCHAR +STARTCHAR uni8A73 +ENCODING 35443 +BBX 15 15 1 -1 +BITMAP +0088 +7848 +0050 +FDFC +0020 +7820 +01FC +7820 +0020 +0020 +7BFE +4820 +4820 +4820 +7820 +ENDCHAR +STARTCHAR uni8A74 +ENCODING 35444 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +11FE +FE40 +0040 +7CFC +0084 +7D84 +02FC +7C84 +4484 +44FC +4484 +7C84 +4494 +0088 +ENDCHAR +STARTCHAR uni8A75 +ENCODING 35445 +BBX 15 15 1 -1 +BITMAP +0020 +7920 +0120 +FDFC +0220 +7A20 +0020 +7BFE +0090 +0090 +7890 +4910 +4912 +4A12 +7C0E +ENDCHAR +STARTCHAR uni8A76 +ENCODING 35446 +BBX 15 16 0 -2 +BITMAP +2082 +1092 +0092 +FC92 +0092 +7892 +02DA +7AB6 +0492 +7892 +4892 +4892 +4892 +7912 +4902 +0202 +ENDCHAR +STARTCHAR uni8A77 +ENCODING 35447 +BBX 15 16 0 -2 +BITMAP +2000 +11FE +1102 +FF02 +017A +7D02 +0102 +7D7A +014A +7D4A +454A +457A +4502 +7D02 +450A +0104 +ENDCHAR +STARTCHAR uni8A78 +ENCODING 35448 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0124 +FCA4 +00A8 +7820 +0020 +7BFE +0070 +78A8 +48A8 +4924 +4924 +7A22 +4820 +0020 +ENDCHAR +STARTCHAR uni8A79 +ENCODING 35449 +BBX 15 15 1 -1 +BITMAP +0400 +0FE0 +1080 +FFFE +2220 +241E +3BE0 +2000 +3FFC +2000 +47F0 +4000 +8FF8 +0808 +0FF8 +ENDCHAR +STARTCHAR uni8A7A +ENCODING 35450 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +107E +FE82 +0144 +7C28 +0010 +7C20 +0040 +7CFE +4542 +4442 +4442 +7C42 +447E +0042 +ENDCHAR +STARTCHAR uni8A7B +ENCODING 35451 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +00F8 +FD08 +0310 +7CA0 +0040 +78A0 +0118 +7A06 +4DF8 +4908 +4908 +7908 +49F8 +0108 +ENDCHAR +STARTCHAR uni8A7C +ENCODING 35452 +BBX 15 15 1 -1 +BITMAP +0080 +7880 +03FE +FC80 +0090 +7890 +0092 +7952 +0152 +0254 +7A10 +4C28 +4828 +4844 +7882 +ENDCHAR +STARTCHAR uni8A7D +ENCODING 35453 +BBX 15 16 0 -2 +BITMAP +2000 +11DC +0088 +FC88 +0088 +7888 +0088 +7BDE +0088 +7888 +4888 +4888 +4888 +7908 +4908 +0208 +ENDCHAR +STARTCHAR uni8A7E +ENCODING 35454 +BBX 15 16 0 -2 +BITMAP +2100 +1100 +0100 +FDFE +0202 +7A02 +0512 +78A2 +024A +7AAA +4B1A +4A0A +4BFA +7802 +4814 +0008 +ENDCHAR +STARTCHAR uni8A7F +ENCODING 35455 +BBX 15 15 0 -1 +BITMAP +2020 +1020 +01FC +FC20 +0020 +7820 +03FE +7800 +0020 +7820 +49FC +4820 +4820 +7820 +4BFE +ENDCHAR +STARTCHAR uni8A80 +ENCODING 35456 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +1088 +FE88 +00F8 +7C88 +0088 +7CF8 +0088 +7C88 +448E +47F8 +4408 +7C08 +4408 +0008 +ENDCHAR +STARTCHAR uni8A81 +ENCODING 35457 +BBX 15 16 0 -2 +BITMAP +2104 +1084 +0088 +FC00 +01FE +7888 +0088 +7888 +0088 +7BFE +4888 +4888 +4908 +7908 +4A08 +0408 +ENDCHAR +STARTCHAR uni8A82 +ENCODING 35458 +BBX 15 15 1 -1 +BITMAP +0090 +7890 +0292 +FD94 +0098 +7890 +0090 +7898 +0194 +0292 +7890 +4890 +4912 +4912 +7A0E +ENDCHAR +STARTCHAR uni8A83 +ENCODING 35459 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +107C +FE84 +0148 +7C30 +0020 +7C48 +0190 +7C3E +4442 +45A4 +4418 +7C10 +4460 +0180 +ENDCHAR +STARTCHAR uni8A84 +ENCODING 35460 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +01FC +FC20 +0020 +79FC +0020 +7820 +03FE +0070 +78A8 +4924 +4A22 +4820 +7820 +ENDCHAR +STARTCHAR uni8A85 +ENCODING 35461 +BBX 15 15 1 -1 +BITMAP +0020 +78A0 +00A0 +FDFC +0120 +7A20 +0020 +7BFE +00A8 +00A8 +78A8 +4924 +4924 +4A22 +7820 +ENDCHAR +STARTCHAR uni8A86 +ENCODING 35462 +BBX 15 15 0 -1 +BITMAP +2000 +13FE +0200 +FE00 +03FC +7A20 +0220 +7AF8 +0220 +7A20 +4A20 +4BFC +4A00 +7A00 +4BFE +ENDCHAR +STARTCHAR uni8A87 +ENCODING 35463 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FC50 +0088 +7B06 +00F8 +7800 +01FE +0040 +78FC +4904 +4804 +4804 +7838 +ENDCHAR +STARTCHAR uni8A88 +ENCODING 35464 +BBX 15 15 0 -1 +BITMAP +2000 +11FE +0020 +FC40 +0088 +7904 +01FE +7822 +0020 +7820 +49FE +4820 +4820 +7820 +4BFE +ENDCHAR +STARTCHAR uni8A89 +ENCODING 35465 +BBX 14 14 1 -1 +BITMAP +2210 +1120 +FFFC +1020 +17A0 +2010 +7FF8 +8004 +1FE0 +0000 +3FF0 +2010 +2010 +3FF0 +ENDCHAR +STARTCHAR uni8A8A +ENCODING 35466 +BBX 15 16 0 -2 +BITMAP +1110 +0910 +0920 +7FFC +0200 +FFFE +0920 +3FF8 +C006 +1FF0 +0000 +1FF0 +0000 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8A8B +ENCODING 35467 +BBX 15 15 0 -1 +BITMAP +2000 +11F8 +0008 +FC08 +01F8 +7900 +0104 +7904 +00FC +7840 +4820 +48A4 +4A8A +7A8A +4478 +ENDCHAR +STARTCHAR uni8A8C +ENCODING 35468 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +0020 +FDFE +0020 +7820 +0020 +79FC +0040 +0020 +7A20 +4A84 +4C82 +4C4A +7838 +ENDCHAR +STARTCHAR uni8A8D +ENCODING 35469 +BBX 15 14 1 -1 +BITMAP +7BFC +0044 +FD44 +0084 +7884 +0144 +7A18 +0040 +0020 +78A4 +4A82 +4A82 +4C88 +7878 +ENDCHAR +STARTCHAR uni8A8E +ENCODING 35470 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FC20 +0020 +79FC +0124 +7924 +01FC +7820 +4870 +48A8 +4924 +7A22 +4820 +0020 +ENDCHAR +STARTCHAR uni8A8F +ENCODING 35471 +BBX 15 16 0 -2 +BITMAP +2020 +1010 +10FC +FE84 +0084 +7CFC +0084 +7C84 +00FC +7CA2 +44A4 +4498 +4490 +7C88 +44C4 +0082 +ENDCHAR +STARTCHAR uni8A90 +ENCODING 35472 +BBX 15 15 1 -1 +BITMAP +0054 +7894 +0392 +FC90 +0090 +7BFE +0090 +7894 +0094 +00D4 +7B88 +4888 +489A +48AA +79C4 +ENDCHAR +STARTCHAR uni8A91 +ENCODING 35473 +BBX 15 15 1 -1 +BITMAP +0480 +7AFC +0110 +FD10 +0290 +7C90 +0090 +79FC +0290 +0490 +7890 +4890 +4890 +4910 +7A7E +ENDCHAR +STARTCHAR uni8A92 +ENCODING 35474 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +0088 +FD04 +03FE +7882 +0080 +79FC +0220 +7820 +4BFE +4820 +4850 +7888 +4904 +0602 +ENDCHAR +STARTCHAR uni8A93 +ENCODING 35475 +BBX 15 15 1 -1 +BITMAP +101C +FEE0 +1080 +1EFE +F108 +1008 +37E8 +0000 +FFFE +0000 +1FF0 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8A94 +ENCODING 35476 +BBX 15 16 0 -2 +BITMAP +2000 +1006 +03B8 +FC88 +0088 +7908 +013E +7B88 +0088 +7A88 +4A88 +493E +4900 +7A80 +447E +0800 +ENDCHAR +STARTCHAR uni8A95 +ENCODING 35477 +BBX 15 15 1 -1 +BITMAP +0004 +7018 +0770 +FA10 +0250 +725C +0750 +7150 +0550 +0550 +7550 +52FC +5200 +5580 +787E +ENDCHAR +STARTCHAR uni8A96 +ENCODING 35478 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FC20 +0020 +7BFE +0202 +7C04 +01F8 +7810 +4820 +4BFE +4820 +7820 +48A0 +0040 +ENDCHAR +STARTCHAR uni8A97 +ENCODING 35479 +BBX 15 16 0 -2 +BITMAP +2042 +10E2 +0382 +FC8A +008A +788A +03EA +788A +018A +79CA +4AAA +4A82 +4C82 +7882 +488A +0084 +ENDCHAR +STARTCHAR uni8A98 +ENCODING 35480 +BBX 15 15 1 -1 +BITMAP +001C +79E0 +0020 +FC20 +03FE +78A8 +0124 +7A22 +0000 +01F8 +7848 +484E +4882 +4902 +7A1C +ENDCHAR +STARTCHAR uni8A99 +ENCODING 35481 +BBX 15 15 0 -1 +BITMAP +2000 +11FE +0000 +FC92 +0124 +7A48 +0124 +7892 +0000 +79FE +4820 +4820 +4820 +7820 +4BFE +ENDCHAR +STARTCHAR uni8A9A +ENCODING 35482 +BBX 15 15 1 -1 +BITMAP +0020 +7924 +0122 +FE22 +0020 +79FC +0104 +7904 +01FC +0104 +7904 +49FC +4904 +4904 +791C +ENDCHAR +STARTCHAR uni8A9B +ENCODING 35483 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0004 +FCFC +0004 +79FC +0000 +7BFE +0202 +79F8 +4888 +4888 +4850 +7820 +48D8 +0306 +ENDCHAR +STARTCHAR uni8A9C +ENCODING 35484 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +0088 +FD04 +03FE +7802 +0088 +7944 +0242 +78F8 +4988 +4A50 +4820 +7850 +4988 +0606 +ENDCHAR +STARTCHAR uni8A9D +ENCODING 35485 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +1050 +FE88 +0144 +7E22 +00F8 +7C08 +0010 +7C20 +45FC +4504 +4504 +7D04 +45FC +0104 +ENDCHAR +STARTCHAR uni8A9E +ENCODING 35486 +BBX 15 14 1 -1 +BITMAP +7CFC +0020 +FE20 +00F8 +7C48 +0048 +7C48 +01FE +0000 +7CFC +4484 +4484 +4484 +7CFC +ENDCHAR +STARTCHAR uni8A9F +ENCODING 35487 +BBX 15 16 0 -2 +BITMAP +2020 +1022 +11FA +FE24 +0024 +7DFE +0010 +7C20 +01FC +7C88 +4510 +46FE +4410 +7C10 +4450 +0020 +ENDCHAR +STARTCHAR uni8AA0 +ENCODING 35488 +BBX 15 15 1 -1 +BITMAP +0014 +7812 +0010 +FBFE +0210 +7A10 +0214 +7BD4 +0254 +0254 +7A54 +4A48 +4ADA +4A2A +7CC4 +ENDCHAR +STARTCHAR uni8AA1 +ENCODING 35489 +BBX 15 15 1 -1 +BITMAP +0014 +7812 +0010 +FBFE +0010 +7950 +0154 +7954 +03F4 +0154 +7958 +4948 +4A5A +4A2A +78C4 +ENDCHAR +STARTCHAR uni8AA2 +ENCODING 35490 +BBX 15 16 0 -2 +BITMAP +2000 +11F8 +0108 +FD08 +01F8 +7908 +0108 +79F8 +0108 +7908 +49F8 +4890 +4890 +7912 +4A12 +040E +ENDCHAR +STARTCHAR uni8AA3 +ENCODING 35491 +BBX 15 14 1 -1 +BITMAP +7800 +01FE +FC20 +0020 +7924 +0124 +7924 +02AA +02AA +7C32 +4820 +4820 +4820 +7BFE +ENDCHAR +STARTCHAR uni8AA4 +ENCODING 35492 +BBX 15 14 1 -1 +BITMAP +787C +0144 +FD44 +0144 +797C +0100 +7900 +01FC +0004 +7804 +4BFE +4840 +4888 +7B06 +ENDCHAR +STARTCHAR uni8AA5 +ENCODING 35493 +BBX 15 15 1 -1 +BITMAP +0020 +7920 +0120 +FDFC +0220 +7A20 +0020 +7BFE +0020 +0000 +79FC +4904 +4904 +4904 +79FC +ENDCHAR +STARTCHAR uni8AA6 +ENCODING 35494 +BBX 15 14 1 -1 +BITMAP +7BFE +0004 +FC88 +0050 +7BFE +0222 +7A22 +03FE +0222 +7A22 +4BFE +4A22 +4A22 +7A26 +ENDCHAR +STARTCHAR uni8AA7 +ENCODING 35495 +BBX 15 15 1 -1 +BITMAP +0028 +7824 +03FE +FC20 +0020 +79FC +0124 +7924 +01FC +0124 +7924 +49FC +4924 +4924 +792C +ENDCHAR +STARTCHAR uni8AA8 +ENCODING 35496 +BBX 15 15 1 -1 +BITMAP +0080 +7880 +01FE +FD00 +0200 +78FC +00A4 +7894 +03FE +0144 +7924 +4924 +49FE +4808 +7838 +ENDCHAR +STARTCHAR uni8AA9 +ENCODING 35497 +BBX 15 15 0 -1 +BITMAP +2020 +1010 +1010 +FEFE +0000 +7C7C +0000 +7C7C +0000 +7C7C +4444 +4444 +4444 +7C7C +4444 +ENDCHAR +STARTCHAR uni8AAA +ENCODING 35498 +BBX 15 16 0 -2 +BITMAP +2010 +1090 +0088 +FD08 +0204 +7DFA +0108 +7908 +0108 +79F8 +4890 +4890 +4890 +7912 +4A12 +040E +ENDCHAR +STARTCHAR uni8AAB +ENCODING 35499 +BBX 15 16 0 -2 +BITMAP +2000 +11FE +0100 +FD00 +017C +7900 +0100 +79FE +0150 +7952 +4954 +4948 +4948 +7A44 +4A52 +0460 +ENDCHAR +STARTCHAR uni8AAC +ENCODING 35500 +BBX 15 15 1 -1 +BITMAP +0108 +7888 +0090 +FDFC +0104 +7904 +0104 +79FC +0050 +0050 +7850 +4890 +4892 +4912 +7A0E +ENDCHAR +STARTCHAR uni8AAD +ENCODING 35501 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FC20 +0020 +79FC +0000 +7BFE +0202 +0292 +7890 +4890 +4892 +4912 +7A0E +ENDCHAR +STARTCHAR uni8AAE +ENCODING 35502 +BBX 15 15 1 -1 +BITMAP +0090 +7890 +07FE +F890 +0090 +7800 +00A0 +78A4 +0128 +0130 +7B60 +4D20 +4922 +4922 +791E +ENDCHAR +STARTCHAR uni8AAF +ENCODING 35503 +BBX 15 16 0 -2 +BITMAP +20FC +1084 +1084 +FEFC +0084 +7C84 +00FC +7C00 +01FE +7D02 +4502 +45FE +4502 +7D02 +45FE +0102 +ENDCHAR +STARTCHAR uni8AB0 +ENCODING 35504 +BBX 15 15 1 -1 +BITMAP +0088 +7888 +0090 +FDFE +0110 +7B10 +05FC +7910 +0110 +0110 +79FC +4910 +4910 +4910 +79FE +ENDCHAR +STARTCHAR uni8AB1 +ENCODING 35505 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FC20 +01FC +7824 +03FE +7824 +01FC +7820 +4920 +493E +4920 +7AA0 +4A7E +0400 +ENDCHAR +STARTCHAR uni8AB2 +ENCODING 35506 +BBX 15 14 1 -1 +BITMAP +79FC +0124 +FD24 +01FC +7924 +0124 +79FC +0020 +03FE +78A8 +48A8 +4924 +4A22 +7820 +ENDCHAR +STARTCHAR uni8AB3 +ENCODING 35507 +BBX 15 16 0 -2 +BITMAP +4000 +23FE +0202 +FA02 +03FE +7210 +0292 +7292 +0292 +72FE +5210 +5292 +5292 +7492 +54FE +0802 +ENDCHAR +STARTCHAR uni8AB4 +ENCODING 35508 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +FA02 +0000 +79FC +0000 +7800 +03FE +7820 +4928 +4924 +4A22 +7C22 +48A0 +0040 +ENDCHAR +STARTCHAR uni8AB5 +ENCODING 35509 +BBX 15 16 0 -2 +BITMAP +2184 +1068 +0030 +FCC8 +0324 +7820 +03FE +7840 +00FC +7984 +4AFC +4884 +48FC +7884 +4894 +0088 +ENDCHAR +STARTCHAR uni8AB6 +ENCODING 35510 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +FC00 +0088 +7888 +0154 +7A22 +0000 +7820 +4BFE +4820 +4820 +7820 +4820 +0020 +ENDCHAR +STARTCHAR uni8AB7 +ENCODING 35511 +BBX 15 14 1 -1 +BITMAP +7BFE +0202 +FE8A +0252 +7BFE +0222 +7A22 +02FE +0282 +7A82 +4AFA +4A02 +4A02 +7A0E +ENDCHAR +STARTCHAR uni8AB8 +ENCODING 35512 +BBX 15 16 0 -2 +BITMAP +2010 +1388 +0088 +FCFE +0090 +7B90 +0224 +7A24 +0238 +7B88 +4890 +4890 +48A4 +78BE +4A82 +0100 +ENDCHAR +STARTCHAR uni8AB9 +ENCODING 35513 +BBX 15 15 1 -1 +BITMAP +0090 +7890 +039E +FC90 +0090 +7890 +039E +7890 +0090 +00D0 +7B9E +4890 +4910 +4910 +7A10 +ENDCHAR +STARTCHAR uni8ABA +ENCODING 35514 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0020 +FBFE +0020 +7924 +0124 +7924 +02AA +7870 +48A8 +48A8 +4924 +7A22 +4C20 +0020 +ENDCHAR +STARTCHAR uni8ABB +ENCODING 35515 +BBX 15 16 0 -2 +BITMAP +2020 +1022 +03B4 +FCA8 +00A8 +7924 +02A2 +7840 +01FC +7904 +4904 +49FC +4904 +7904 +49FC +0104 +ENDCHAR +STARTCHAR uni8ABC +ENCODING 35516 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FE02 +0202 +78F8 +0088 +7888 +00F8 +0088 +7888 +48F8 +4888 +4888 +7BFE +ENDCHAR +STARTCHAR uni8ABD +ENCODING 35517 +BBX 15 16 0 -2 +BITMAP +2000 +1040 +039C +FA04 +0204 +7B9C +0204 +7A04 +03FC +7890 +4890 +4890 +4890 +7912 +4A12 +040E +ENDCHAR +STARTCHAR uni8ABE +ENCODING 35518 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8784 +8004 +BFF4 +8004 +8FC4 +8004 +9FE4 +9024 +9FEC +ENDCHAR +STARTCHAR uni8ABF +ENCODING 35519 +BBX 15 14 1 -1 +BITMAP +7BFE +0202 +FE22 +02FA +7A22 +0222 +7AFA +0202 +02FA +7A8A +4A8A +4AFA +4A02 +7C0E +ENDCHAR +STARTCHAR uni8AC0 +ENCODING 35520 +BBX 15 16 0 -2 +BITMAP +2040 +1080 +01FC +FD24 +0124 +79FC +0124 +7944 +01FC +7890 +4910 +4BFE +4810 +7810 +4810 +0010 +ENDCHAR +STARTCHAR uni8AC1 +ENCODING 35521 +BBX 15 16 0 -2 +BITMAP +2000 +13DE +0042 +FD4A +0084 +794A +0252 +7C20 +0000 +7BDE +4852 +4952 +4894 +7948 +4A54 +0422 +ENDCHAR +STARTCHAR uni8AC2 +ENCODING 35522 +BBX 14 15 1 -1 +BITMAP +0040 +7840 +007C +FC84 +0084 +7908 +0230 +7800 +0040 +019C +7904 +49DC +4904 +4904 +79FC +ENDCHAR +STARTCHAR uni8AC3 +ENCODING 35523 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +0088 +FC88 +03DE +7888 +0088 +799C +01DC +7AAA +4AAA +4CC8 +4888 +7888 +4888 +0088 +ENDCHAR +STARTCHAR uni8AC4 +ENCODING 35524 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FC00 +00F8 +7888 +00F8 +7800 +01FC +0018 +7820 +4BFE +4820 +4820 +7860 +ENDCHAR +STARTCHAR uni8AC5 +ENCODING 35525 +BBX 15 16 0 -2 +BITMAP +0820 +7FFC +0820 +0FE0 +0820 +0FE0 +0820 +FFFE +1110 +3FF8 +C006 +1FF0 +0000 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8AC6 +ENCODING 35526 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +13FE +FC88 +0088 +7CF8 +0088 +7C88 +00F8 +7C88 +4488 +47FE +4400 +7C88 +4504 +0202 +ENDCHAR +STARTCHAR uni8AC7 +ENCODING 35527 +BBX 15 15 1 -1 +BITMAP +0020 +7922 +0122 +FE24 +0050 +7888 +0306 +7820 +0122 +0122 +7A24 +4A50 +4850 +4888 +7B06 +ENDCHAR +STARTCHAR uni8AC8 +ENCODING 35528 +BBX 15 15 0 -1 +BITMAP +2008 +103C +01E0 +FC20 +03FE +78A8 +00A8 +78A8 +03FE +78A8 +48A8 +4BFE +4820 +7820 +49FC +ENDCHAR +STARTCHAR uni8AC9 +ENCODING 35529 +BBX 15 16 0 -2 +BITMAP +201C +11E0 +0020 +FC20 +03FE +78A8 +0124 +7A42 +0040 +7BFE +4888 +4908 +48D0 +7830 +4848 +0184 +ENDCHAR +STARTCHAR uni8ACA +ENCODING 35530 +BBX 15 16 0 -2 +BITMAP +2080 +1080 +00FE +FD02 +0242 +7A4A +0152 +7842 +03FE +7842 +48E2 +4952 +4A4A +7842 +4854 +0008 +ENDCHAR +STARTCHAR uni8ACB +ENCODING 35531 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FC20 +01FC +7820 +03FE +7800 +01FC +0104 +79FC +4904 +49FC +4904 +791C +ENDCHAR +STARTCHAR uni8ACC +ENCODING 35532 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FC20 +01FC +7924 +01FC +7924 +0124 +01FC +78A8 +48A8 +4924 +4A22 +7820 +ENDCHAR +STARTCHAR uni8ACD +ENCODING 35533 +BBX 15 15 1 -1 +BITMAP +001C +7BE4 +0122 +FE12 +01FC +7824 +0024 +7BFE +0024 +0024 +79FC +4820 +4820 +4820 +7860 +ENDCHAR +STARTCHAR uni8ACE +ENCODING 35534 +BBX 15 16 0 -2 +BITMAP +2048 +1048 +1048 +FDFE +0048 +7C48 +01FE +7C00 +00FC +7C84 +4484 +44FC +4484 +7C84 +44FC +0084 +ENDCHAR +STARTCHAR uni8ACF +ENCODING 35535 +BBX 15 14 1 -1 +BITMAP +77FC +0280 +FAFC +03A4 +7AA4 +02A4 +7AA8 +03A8 +0290 +7A90 +4AA8 +4BA8 +4EC4 +7882 +ENDCHAR +STARTCHAR uni8AD0 +ENCODING 35536 +BBX 15 15 1 -1 +BITMAP +0800 +0BFC +1204 +13FC +2000 +6248 +A248 +244A +2FE6 +0000 +FFFE +0000 +3FFC +2004 +3FFC +ENDCHAR +STARTCHAR uni8AD1 +ENCODING 35537 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0040 +FC80 +0144 +7A24 +0068 +7AB0 +0130 +7AA8 +4868 +48A4 +4922 +7A20 +48A0 +0040 +ENDCHAR +STARTCHAR uni8AD2 +ENCODING 35538 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FC00 +01FC +7904 +0104 +7904 +01FC +0020 +7924 +4924 +4A22 +4C22 +7860 +ENDCHAR +STARTCHAR uni8AD3 +ENCODING 35539 +BBX 15 16 0 -2 +BITMAP +2048 +1044 +105E +FDE0 +0028 +7C12 +006A +7D96 +0048 +7C5E +45E0 +4424 +4428 +7C12 +446A +0186 +ENDCHAR +STARTCHAR uni8AD4 +ENCODING 35540 +BBX 15 16 0 -2 +BITMAP +4100 +2100 +01DC +F914 +0114 +7114 +07D4 +7014 +0114 +7114 +5588 +5548 +5948 +7114 +5514 +0222 +ENDCHAR +STARTCHAR uni8AD5 +ENCODING 35541 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +003E +FC20 +01FE +7922 +0138 +79E0 +0122 +791E +4900 +4978 +4A48 +7A4A +448A +0906 +ENDCHAR +STARTCHAR uni8AD6 +ENCODING 35542 +BBX 15 15 1 -1 +BITMAP +0040 +78A0 +0110 +FA08 +05F6 +7800 +0000 +7BFC +02A4 +02A4 +7BFC +4AA4 +4AA4 +4AA4 +7AAC +ENDCHAR +STARTCHAR uni8AD7 +ENCODING 35543 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +0050 +FC88 +0306 +78F8 +0000 +79FC +0008 +0010 +7820 +4950 +4954 +4A4A +7A3A +ENDCHAR +STARTCHAR uni8AD8 +ENCODING 35544 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FC20 +0020 +79FC +0020 +7820 +03FE +7840 +48A4 +49A8 +4A90 +7C88 +48C6 +0080 +ENDCHAR +STARTCHAR uni8AD9 +ENCODING 35545 +BBX 15 16 0 -2 +BITMAP +201C +13E0 +0220 +FBFE +0220 +7A92 +030A +7A06 +01FC +7904 +4904 +49FC +4904 +7904 +49FC +0104 +ENDCHAR +STARTCHAR uni8ADA +ENCODING 35546 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FE02 +0202 +79FC +0020 +7820 +0120 +013C +7920 +4920 +4920 +4AE0 +7C3E +ENDCHAR +STARTCHAR uni8ADB +ENCODING 35547 +BBX 15 15 1 -1 +BITMAP +0020 +78A0 +032E +FE22 +0222 +7BAE +0222 +7A22 +0222 +03AE +7850 +4850 +4888 +4904 +7A02 +ENDCHAR +STARTCHAR uni8ADC +ENCODING 35548 +BBX 15 15 1 -1 +BITMAP +0248 +7A48 +07FE +FA48 +0248 +7A78 +0200 +7BFC +0040 +07FE +7950 +4950 +4A48 +4C46 +7840 +ENDCHAR +STARTCHAR uni8ADD +ENCODING 35549 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0022 +FD20 +013C +7920 +02FE +7C00 +01FC +7904 +49FC +4904 +49FC +7904 +4914 +0108 +ENDCHAR +STARTCHAR uni8ADE +ENCODING 35550 +BBX 15 14 1 -1 +BITMAP +7BFE +0000 +FDFC +0104 +7904 +01FC +7900 +01FE +0352 +7D52 +49FE +4952 +4952 +7956 +ENDCHAR +STARTCHAR uni8ADF +ENCODING 35551 +BBX 15 14 1 -1 +BITMAP +79F8 +0108 +FDF8 +0108 +7908 +01F8 +7800 +07FC +0040 +7A40 +4A78 +4B40 +4CC0 +783E +ENDCHAR +STARTCHAR uni8AE0 +ENCODING 35552 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FE02 +02FA +7800 +00F8 +7888 +0088 +00F8 +7888 +4888 +48F8 +4800 +7BFE +ENDCHAR +STARTCHAR uni8AE1 +ENCODING 35553 +BBX 15 15 1 -1 +BITMAP +0090 +7890 +0088 +FDFC +0242 +78F8 +0008 +7808 +0030 +0000 +79FC +4954 +4954 +4954 +7BFE +ENDCHAR +STARTCHAR uni8AE2 +ENCODING 35554 +BBX 15 14 1 -1 +BITMAP +7BFE +0202 +FE22 +01FC +7820 +01FC +7924 +01FC +0124 +79FC +4820 +4BFE +4820 +7820 +ENDCHAR +STARTCHAR uni8AE3 +ENCODING 35555 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +1084 +FE84 +00F4 +7C94 +0094 +7DFE +0102 +7D7A +454A +454A +457A +7D02 +450A +0104 +ENDCHAR +STARTCHAR uni8AE4 +ENCODING 35556 +BBX 15 14 1 -1 +BITMAP +7BDE +0252 +FE52 +03DE +7800 +01FC +7800 +03FE +0040 +78FC +4904 +4804 +4804 +7838 +ENDCHAR +STARTCHAR uni8AE5 +ENCODING 35557 +BBX 15 15 0 -1 +BITMAP +2008 +103C +01E0 +FC20 +03FE +7820 +01FC +7924 +01FC +7924 +49FC +4820 +49FC +7820 +4BFE +ENDCHAR +STARTCHAR uni8AE6 +ENCODING 35558 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FC88 +0048 +7850 +03FE +7A22 +0222 +01FC +7924 +4924 +4924 +492C +7820 +ENDCHAR +STARTCHAR uni8AE7 +ENCODING 35559 +BBX 15 15 1 -1 +BITMAP +0220 +7A2C +03B0 +FE20 +0222 +7BA2 +065E +7880 +03FC +0204 +7A04 +4BFC +4A04 +4A04 +7BFC +ENDCHAR +STARTCHAR uni8AE8 +ENCODING 35560 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0000 +FDFC +0104 +7904 +01FC +7800 +03FE +7A22 +4A22 +4BFE +4A22 +7A22 +4BFE +0202 +ENDCHAR +STARTCHAR uni8AE9 +ENCODING 35561 +BBX 15 15 0 -1 +BITMAP +2084 +1048 +0000 +FDFE +0048 +7848 +0048 +7A48 +014A +794C +4848 +4848 +4848 +7848 +4BFE +ENDCHAR +STARTCHAR uni8AEA +ENCODING 35562 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +FC00 +01FC +7904 +01FC +7800 +03FE +7A02 +49FC +4820 +4820 +7820 +48A0 +0040 +ENDCHAR +STARTCHAR uni8AEB +ENCODING 35563 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FC20 +01FC +7924 +01AC +7974 +0124 +01FC +78A8 +48A8 +4924 +4A22 +7820 +ENDCHAR +STARTCHAR uni8AEC +ENCODING 35564 +BBX 15 16 0 -2 +BITMAP +0C28 +7024 +11FE +FE50 +3852 +548E +9100 +7FFC +0000 +3FF8 +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8AED +ENCODING 35565 +BBX 15 15 1 -1 +BITMAP +0020 +7850 +0088 +FB76 +0000 +7BC2 +0252 +7A52 +03D2 +0252 +7A52 +4BC2 +4A42 +4A42 +7ACE +ENDCHAR +STARTCHAR uni8AEE +ENCODING 35566 +BBX 15 15 1 -1 +BITMAP +0020 +7A20 +017E +FC92 +0014 +7910 +0128 +7A44 +0482 +0000 +79FC +4904 +4904 +4904 +79FC +ENDCHAR +STARTCHAR uni8AEF +ENCODING 35567 +BBX 15 16 0 -2 +BITMAP +2020 +1124 +0124 +FD24 +01FC +7800 +03FE +7820 +0040 +79FC +4954 +4954 +4954 +7954 +4954 +010C +ENDCHAR +STARTCHAR uni8AF0 +ENCODING 35568 +BBX 15 15 0 -1 +BITMAP +2000 +11FC +0124 +FD24 +01FC +7924 +0124 +79FC +0000 +7840 +4824 +4AA2 +4A8A +7C88 +4878 +ENDCHAR +STARTCHAR uni8AF1 +ENCODING 35569 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +01F8 +FC88 +03FE +7800 +01FC +7904 +01FC +0010 +79FC +4890 +4BFE +4810 +7810 +ENDCHAR +STARTCHAR uni8AF2 +ENCODING 35570 +BBX 15 15 0 -1 +BITMAP +2000 +13FE +0050 +FC50 +01FC +7954 +0154 +7954 +01FC +7820 +4820 +49FC +4820 +7820 +4BFE +ENDCHAR +STARTCHAR uni8AF3 +ENCODING 35571 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +03FC +FD08 +0088 +7890 +07FE +7800 +01F8 +0108 +7908 +49F8 +4908 +4908 +79F8 +ENDCHAR +STARTCHAR uni8AF4 +ENCODING 35572 +BBX 15 15 1 -1 +BITMAP +0014 +7012 +0012 +FFFE +0410 +75D4 +0414 +75D4 +0554 +0554 +7548 +55C8 +541A +582A +71C4 +ENDCHAR +STARTCHAR uni8AF5 +ENCODING 35573 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FC20 +0020 +7BFE +028A +7A52 +02FA +7A22 +4A22 +4AFA +4A22 +7A22 +4A2A +0204 +ENDCHAR +STARTCHAR uni8AF6 +ENCODING 35574 +BBX 15 15 1 -1 +BITMAP +0108 +7908 +03FE +FD08 +01F8 +7908 +01F8 +7908 +07FE +0250 +7A50 +4A9E +4B00 +4A00 +7BFE +ENDCHAR +STARTCHAR uni8AF7 +ENCODING 35575 +BBX 15 14 1 -1 +BITMAP +77FC +0404 +FC24 +05C4 +7444 +05F4 +7554 +0554 +05F4 +7444 +5454 +5474 +5B8C +7006 +ENDCHAR +STARTCHAR uni8AF8 +ENCODING 35576 +BBX 15 15 1 -1 +BITMAP +0040 +7C48 +01FC +FE48 +0048 +7C50 +03FE +7C40 +00FC +0384 +7C84 +44FC +4484 +4484 +7CFC +ENDCHAR +STARTCHAR uni8AF9 +ENCODING 35577 +BBX 15 16 0 -2 +BITMAP +2000 +11F8 +0108 +FDF8 +0108 +79F8 +0000 +7BFE +0100 +79FC +4A54 +4C94 +4924 +7A44 +48A8 +0110 +ENDCHAR +STARTCHAR uni8AFA +ENCODING 35578 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FC88 +0070 +7888 +03FE +7A10 +02E4 +0208 +7A30 +4AC2 +4A04 +4C18 +78E0 +ENDCHAR +STARTCHAR uni8AFB +ENCODING 35579 +BBX 15 15 0 -1 +BITMAP +2020 +1040 +01FC +FD04 +01FC +7904 +01FC +7800 +03FE +7820 +4820 +49FC +4820 +7820 +4BFE +ENDCHAR +STARTCHAR uni8AFC +ENCODING 35580 +BBX 15 15 1 -1 +BITMAP +003C +7BC0 +0244 +FC28 +03FC +7880 +07FE +7880 +00F8 +0088 +7988 +4A50 +4820 +48D8 +7B06 +ENDCHAR +STARTCHAR uni8AFD +ENCODING 35581 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +03FE +FC88 +00F8 +7820 +01FC +7924 +0124 +79FC +4820 +4BFE +4820 +7820 +4820 +0020 +ENDCHAR +STARTCHAR uni8AFE +ENCODING 35582 +BBX 15 15 1 -1 +BITMAP +0088 +7888 +03FE +FC88 +0088 +7840 +0040 +7BFE +0080 +0080 +79FC +4A84 +4884 +4884 +78FC +ENDCHAR +STARTCHAR uni8AFF +ENCODING 35583 +BBX 15 16 0 -2 +BITMAP +2000 +10F8 +1088 +FE88 +00F8 +7C00 +01FE +7C88 +00F8 +7C88 +44F8 +4488 +449E +7DE8 +4408 +0008 +ENDCHAR +STARTCHAR uni8B00 +ENCODING 35584 +BBX 15 15 1 -1 +BITMAP +0088 +7888 +03FE +FC88 +00F8 +7888 +0088 +78F8 +0020 +03FE +78A8 +48A8 +4924 +4A22 +7820 +ENDCHAR +STARTCHAR uni8B01 +ENCODING 35585 +BBX 15 14 1 -1 +BITMAP +79FC +0104 +FDFC +0104 +79FC +0080 +78FE +0102 +0732 +79C2 +4902 +4912 +48F2 +780C +ENDCHAR +STARTCHAR uni8B02 +ENCODING 35586 +BBX 15 14 1 -1 +BITMAP +7BFE +0222 +FFFE +0222 +7BFE +0000 +79FC +0104 +01FC +7904 +49FC +4904 +4904 +790C +ENDCHAR +STARTCHAR uni8B03 +ENCODING 35587 +BBX 15 15 0 -1 +BITMAP +2000 +11FC +0104 +FDFC +0104 +79FC +0020 +7920 +01FE +7A20 +4820 +49FC +4820 +7820 +4BFE +ENDCHAR +STARTCHAR uni8B04 +ENCODING 35588 +BBX 15 15 1 -1 +BITMAP +0040 +7A48 +4950 +4BFC +4890 +7890 +4FFE +4908 +4AF4 +7C02 +4BFC +4800 +4BFC +8A04 +BBFC +ENDCHAR +STARTCHAR uni8B05 +ENCODING 35589 +BBX 15 15 1 -1 +BITMAP +0080 +79FE +0242 +FD52 +01F2 +7882 +011C +7880 +01FE +0242 +7952 +4952 +49F2 +4882 +791C +ENDCHAR +STARTCHAR uni8B06 +ENCODING 35590 +BBX 15 16 0 -2 +BITMAP +2020 +1010 +01FE +FD02 +0102 +79FE +0100 +79EE +0122 +79AA +4966 +4922 +4966 +7AAA +4A22 +0466 +ENDCHAR +STARTCHAR uni8B07 +ENCODING 35591 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +5FF4 +0440 +1FF0 +0440 +FFFE +0820 +1FF0 +E00E +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8B08 +ENCODING 35592 +BBX 15 16 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +7FFC +0820 +FFFE +0A20 +3118 +DFF6 +0000 +0FE0 +0820 +0FE0 +ENDCHAR +STARTCHAR uni8B09 +ENCODING 35593 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +03FC +FE24 +0224 +7BFC +0224 +7A44 +03FC +7840 +48A8 +48B4 +493C +7922 +4A22 +041E +ENDCHAR +STARTCHAR uni8B0A +ENCODING 35594 +BBX 15 15 1 -1 +BITMAP +0108 +7908 +07FE +F908 +0040 +7BFE +0200 +7A00 +01FC +0000 +7948 +4948 +4948 +4A4A +7C06 +ENDCHAR +STARTCHAR uni8B0B +ENCODING 35595 +BBX 15 16 0 -2 +BITMAP +4208 +2208 +03BE +F488 +0AA8 +713E +0208 +7448 +0848 +77FC +50E0 +5150 +5248 +7C46 +5040 +0040 +ENDCHAR +STARTCHAR uni8B0C +ENCODING 35596 +BBX 15 14 1 -1 +BITMAP +7BFE +0004 +FDE4 +0124 +79E4 +000C +7800 +03FE +0004 +79E4 +4924 +4924 +49E4 +780C +ENDCHAR +STARTCHAR uni8B0D +ENCODING 35597 +BBX 14 15 1 -1 +BITMAP +52A4 +54A8 +2850 +4488 +FFFC +8004 +8FC4 +0000 +7FF8 +0000 +1FE0 +0000 +3FF0 +2010 +3FF0 +ENDCHAR +STARTCHAR uni8B0E +ENCODING 35598 +BBX 15 15 1 -1 +BITMAP +0210 +7992 +0152 +FC54 +0210 +79FE +0010 +7F38 +0138 +0154 +7954 +4992 +4910 +4A90 +7C7E +ENDCHAR +STARTCHAR uni8B0F +ENCODING 35599 +BBX 15 16 0 -2 +BITMAP +20A0 +112C +1124 +FD24 +01AC +7D24 +0124 +7DFC +0020 +7DFC +4488 +4450 +4420 +7C50 +4488 +0306 +ENDCHAR +STARTCHAR uni8B10 +ENCODING 35600 +BBX 15 15 1 -1 +BITMAP +0040 +7820 +00A8 +FC88 +0294 +7AA2 +00CA +7988 +0278 +0000 +79FC +4954 +4954 +4954 +7BFE +ENDCHAR +STARTCHAR uni8B11 +ENCODING 35601 +BBX 15 16 0 -2 +BITMAP +201E +13E0 +0122 +FC94 +0040 +7888 +01F0 +7820 +00C4 +79FE +4822 +4820 +4BFE +7850 +4888 +0306 +ENDCHAR +STARTCHAR uni8B12 +ENCODING 35602 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0050 +FC48 +00A4 +79FE +0284 +78FC +0084 +78FC +4880 +48FC +4944 +7944 +4A7C +0044 +ENDCHAR +STARTCHAR uni8B13 +ENCODING 35603 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FC20 +01FC +7904 +01FC +7904 +01FC +7904 +49FC +4904 +4BFE +7888 +4904 +0202 +ENDCHAR +STARTCHAR uni8B14 +ENCODING 35604 +BBX 15 15 1 -1 +BITMAP +0020 +783C +0020 +FFFE +0202 +7A44 +0270 +7BC4 +023C +0200 +7AFC +4A80 +4CFC +4880 +78FC +ENDCHAR +STARTCHAR uni8B15 +ENCODING 35605 +BBX 15 16 0 -2 +BITMAP +4004 +201E +03F0 +FA1E +0210 +72FE +0292 +7298 +02F2 +728E +5280 +52B8 +52A8 +74AA +554A +0A86 +ENDCHAR +STARTCHAR uni8B16 +ENCODING 35606 +BBX 15 14 1 -1 +BITMAP +79FC +0124 +FDFC +0124 +79FC +0090 +791E +0640 +00FE +7904 +4E88 +4870 +4858 +7B86 +ENDCHAR +STARTCHAR uni8B17 +ENCODING 35607 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FD04 +0088 +7BFE +0202 +7820 +03FE +0040 +787C +4844 +4884 +4904 +7A38 +ENDCHAR +STARTCHAR uni8B18 +ENCODING 35608 +BBX 15 16 0 -2 +BITMAP +2000 +13FC +0204 +FA04 +03FC +7A40 +0220 +7BFC +0288 +7A50 +4BFE +4A20 +4DFC +7C20 +4820 +0020 +ENDCHAR +STARTCHAR uni8B19 +ENCODING 35609 +BBX 15 15 1 -1 +BITMAP +0108 +7890 +03FC +FCA0 +03F8 +78A8 +03FE +78A8 +00A8 +03F8 +78A0 +49B0 +4AA8 +4CA6 +78A0 +ENDCHAR +STARTCHAR uni8B1A +ENCODING 35610 +BBX 15 15 1 -1 +BITMAP +0030 +7888 +0104 +FE02 +01FC +7800 +0018 +7888 +0104 +03FE +7954 +4954 +4954 +4954 +7BFE +ENDCHAR +STARTCHAR uni8B1B +ENCODING 35611 +BBX 15 15 1 -1 +BITMAP +0088 +7888 +03FE +FC88 +01FC +7888 +03FE +7820 +01FC +0124 +79FC +4924 +4BFE +4904 +790C +ENDCHAR +STARTCHAR uni8B1C +ENCODING 35612 +BBX 15 14 1 -1 +BITMAP +7BFC +0220 +FE40 +02FC +7A84 +02FC +7A84 +0284 +02FC +7A20 +4CA8 +4924 +4922 +7860 +ENDCHAR +STARTCHAR uni8B1D +ENCODING 35613 +BBX 15 15 1 -1 +BITMAP +0084 +7904 +03C4 +FA44 +03FE +7A44 +0244 +7BD4 +0254 +024C +7FC4 +4944 +4A44 +4C44 +79CC +ENDCHAR +STARTCHAR uni8B1E +ENCODING 35614 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +FC00 +01FC +7904 +01FC +7800 +03FE +7A02 +4AFA +4A8A +4AFA +7A02 +4A0A +0204 +ENDCHAR +STARTCHAR uni8B1F +ENCODING 35615 +BBX 15 15 1 -1 +BITMAP +0038 +7BC8 +0244 +FA24 +0422 +7C02 +00C0 +7B1C +0204 +0204 +7B9C +4A04 +4A04 +4A04 +7BFC +ENDCHAR +STARTCHAR uni8B20 +ENCODING 35616 +BBX 15 15 1 -1 +BITMAP +0020 +783C +00C4 +FFA4 +0058 +7830 +01C0 +78FC +0120 +0020 +7BFE +4820 +4924 +4924 +79FC +ENDCHAR +STARTCHAR uni8B21 +ENCODING 35617 +BBX 15 15 1 -1 +BITMAP +000C +79F0 +0044 +FE44 +0228 +7900 +01FC +7820 +0020 +03FE +7820 +4924 +4924 +4924 +79FC +ENDCHAR +STARTCHAR uni8B22 +ENCODING 35618 +BBX 15 16 0 -2 +BITMAP +20A0 +1090 +01FE +FB20 +01FC +7920 +01FC +7920 +01FE +7900 +4BF8 +4908 +4890 +7860 +4998 +0606 +ENDCHAR +STARTCHAR uni8B23 +ENCODING 35619 +BBX 15 16 0 -2 +BITMAP +21FC +1020 +03FE +FE22 +01AC +7820 +01AC +7800 +01FC +7800 +4BFE +4880 +48FC +7804 +4828 +0010 +ENDCHAR +STARTCHAR uni8B24 +ENCODING 35620 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0050 +FDFC +0154 +7954 +01FC +7800 +01FC +7800 +4BFE +4820 +48A8 +7924 +4AA2 +0040 +ENDCHAR +STARTCHAR uni8B25 +ENCODING 35621 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +01FC +FD24 +017C +798C +0154 +7924 +0154 +79FC +4820 +4810 +4954 +7942 +494A +0238 +ENDCHAR +STARTCHAR uni8B26 +ENCODING 35622 +BBX 15 15 1 -1 +BITMAP +0800 +0878 +FFC8 +088E +7F00 +2A7C +3E24 +4018 +8FE6 +0000 +FFFE +0000 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8B27 +ENCODING 35623 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +FC00 +0154 +7924 +0154 +79FC +0020 +7BFE +4A42 +4A92 +4AFA +7A0A +4A02 +0206 +ENDCHAR +STARTCHAR uni8B28 +ENCODING 35624 +BBX 15 15 1 -1 +BITMAP +0088 +7888 +03FE +FC88 +01FC +7904 +01FC +7904 +0104 +01FC +7820 +4BFE +4850 +4888 +7B06 +ENDCHAR +STARTCHAR uni8B29 +ENCODING 35625 +BBX 15 16 0 -2 +BITMAP +0440 +7FFC +0440 +1FF0 +1010 +1FF0 +1010 +1FF0 +0400 +FFFE +1110 +2FE8 +C006 +0FE0 +0820 +0FE0 +ENDCHAR +STARTCHAR uni8B2A +ENCODING 35626 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +03FE +FC88 +0050 +7BFE +0252 +7A8A +0306 +7AFA +4A8A +4A8A +4AFA +7A02 +4A0A +0204 +ENDCHAR +STARTCHAR uni8B2B +ENCODING 35627 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FC88 +0050 +7BFE +0202 +7A22 +02FA +0222 +7AFA +4A8A +4A8A +4AFA +7A06 +ENDCHAR +STARTCHAR uni8B2C +ENCODING 35628 +BBX 15 14 1 -1 +BITMAP +7BDE +014A +FE52 +00C6 +792A +0050 +7888 +0326 +00D0 +7820 +49C2 +4804 +4818 +79E0 +ENDCHAR +STARTCHAR uni8B2D +ENCODING 35629 +BBX 15 15 1 -1 +BITMAP +0090 +7BFE +0000 +FBC4 +0354 +7AD4 +0354 +7AC4 +0244 +02DC +7800 +4BFC +4884 +4904 +7A18 +ENDCHAR +STARTCHAR uni8B2E +ENCODING 35630 +BBX 15 16 0 -2 +BITMAP +2020 +13FE +0020 +FDFC +0020 +7BFE +0000 +79FC +0104 +79FC +4904 +49FC +4904 +79FC +4888 +0104 +ENDCHAR +STARTCHAR uni8B2F +ENCODING 35631 +BBX 15 16 0 -2 +BITMAP +2020 +103C +0020 +FDFE +0122 +7938 +01E4 +791C +0100 +797C +4944 +497C +4944 +797C +4944 +02FE +ENDCHAR +STARTCHAR uni8B30 +ENCODING 35632 +BBX 15 15 0 -1 +BITMAP +2010 +1010 +02FE +FD10 +017C +7854 +007C +7B54 +017C +7910 +49FE +4910 +4910 +7A90 +447E +ENDCHAR +STARTCHAR uni8B31 +ENCODING 35633 +BBX 15 16 0 -2 +BITMAP +2020 +11FC +0124 +FBFE +0124 +79FC +0020 +79FC +0124 +79FC +4840 +4BFE +4888 +79D0 +4870 +038C +ENDCHAR +STARTCHAR uni8B32 +ENCODING 35634 +BBX 15 16 0 -2 +BITMAP +2040 +1088 +01FC +FD08 +0252 +7BFE +0050 +7988 +0626 +78C0 +4B10 +4864 +4B88 +7830 +48C0 +0700 +ENDCHAR +STARTCHAR uni8B33 +ENCODING 35635 +BBX 15 14 1 -1 +BITMAP +7BFE +0200 +FE7C +0244 +7A44 +027C +7A00 +02EE +02AA +7AAA +4AAA +4AEE +4A00 +7BFE +ENDCHAR +STARTCHAR uni8B34 +ENCODING 35636 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0124 +FBFE +0124 +79FC +0000 +79FC +0104 +79FC +4904 +49FC +4904 +79FC +4888 +0104 +ENDCHAR +STARTCHAR uni8B35 +ENCODING 35637 +BBX 15 16 0 -2 +BITMAP +2000 +13DE +0042 +FA52 +014A +7A52 +0042 +7820 +01FC +7904 +4904 +49FC +4904 +7904 +49FC +0104 +ENDCHAR +STARTCHAR uni8B36 +ENCODING 35638 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +01FE +FD00 +0148 +7948 +01FE +7948 +0148 +7948 +4978 +4900 +4AD4 +7AAA +452A +0800 +ENDCHAR +STARTCHAR uni8B37 +ENCODING 35639 +BBX 15 16 0 -2 +BITMAP +0820 +7E20 +087E +FEC4 +1028 +1E10 +2228 +46C6 +8100 +FFFE +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8B38 +ENCODING 35640 +BBX 15 16 0 -2 +BITMAP +4108 +2108 +0108 +F7D0 +011E +7794 +0124 +7FD4 +0214 +73D4 +5254 +5248 +5248 +74D4 +5424 +0842 +ENDCHAR +STARTCHAR uni8B39 +ENCODING 35641 +BBX 15 15 1 -1 +BITMAP +0088 +7BFE +0088 +FC00 +01FC +7924 +0124 +79FC +0020 +01FC +7820 +49FC +4820 +4820 +7BFE +ENDCHAR +STARTCHAR uni8B3A +ENCODING 35642 +BBX 15 16 0 -2 +BITMAP +0820 +7E20 +08F8 +FF28 +1428 +7F6A +082A +FF56 +0982 +FFFE +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8B3B +ENCODING 35643 +BBX 15 16 0 -2 +BITMAP +4010 +2190 +061E +FA22 +0254 +7208 +0F90 +7264 +0208 +771E +5AA2 +5242 +5214 +7208 +5210 +0260 +ENDCHAR +STARTCHAR uni8B3C +ENCODING 35644 +BBX 15 16 0 -2 +BITMAP +2040 +107C +0040 +FDFC +0144 +7978 +01C4 +793C +0104 +7978 +4994 +4958 +4AFE +7A10 +4450 +0020 +ENDCHAR +STARTCHAR uni8B3D +ENCODING 35645 +BBX 15 16 0 -2 +BITMAP +7CF8 +0488 +7CF8 +4020 +7DFC +0524 +15FC +0A22 +FFFE +0000 +3FF8 +0000 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uni8B3E +ENCODING 35646 +BBX 15 14 1 -1 +BITMAP +79F8 +0108 +FDF8 +0108 +79F8 +0000 +7FFE +0492 +07FE +7800 +4BFC +4908 +48F0 +7B0E +ENDCHAR +STARTCHAR uni8B3F +ENCODING 35647 +BBX 15 16 0 -2 +BITMAP +4100 +211E +07D2 +F912 +0112 +77DE +0452 +77D2 +0452 +77DE +5112 +5112 +5FD2 +7122 +512A +0144 +ENDCHAR +STARTCHAR uni8B40 +ENCODING 35648 +BBX 15 16 0 -2 +BITMAP +2008 +1388 +0088 +F910 +07DE +7A94 +02A4 +7B94 +0294 +7B94 +4A94 +4AC8 +4B88 +7E94 +48A4 +00C2 +ENDCHAR +STARTCHAR uni8B41 +ENCODING 35649 +BBX 15 15 1 -1 +BITMAP +0088 +7888 +03FE +FC88 +03FE +7924 +0124 +7BFE +0124 +0124 +7BFE +4820 +4FFE +4820 +7820 +ENDCHAR +STARTCHAR uni8B42 +ENCODING 35650 +BBX 15 16 0 -2 +BITMAP +2000 +13DE +0252 +FE52 +03DE +7800 +01FC +7924 +01FC +7924 +49FC +4820 +4BFE +7820 +4820 +0020 +ENDCHAR +STARTCHAR uni8B43 +ENCODING 35651 +BBX 15 15 1 -1 +BITMAP +0040 +787C +0040 +FBFE +0242 +7BFA +0244 +7A3C +0200 +0228 +7AAA +4AAA +4CEE +4828 +79FE +ENDCHAR +STARTCHAR uni8B44 +ENCODING 35652 +BBX 15 16 0 -2 +BITMAP +2104 +1088 +0000 +FBFE +0222 +7AAA +0272 +7A22 +03FE +7800 +49FC +4904 +49FC +7904 +49FC +0104 +ENDCHAR +STARTCHAR uni8B45 +ENCODING 35653 +BBX 15 15 0 -1 +BITMAP +4000 +27DE +014A +FB5A +056A +7252 +02D6 +7420 +0084 +7084 +52D4 +5296 +5294 +72D4 +573E +ENDCHAR +STARTCHAR uni8B46 +ENCODING 35654 +BBX 15 15 1 -1 +BITMAP +0020 +7BFE +0020 +FDFC +0000 +79FC +0104 +79FC +0088 +03FE +7800 +49FC +4904 +4904 +79FC +ENDCHAR +STARTCHAR uni8B47 +ENCODING 35655 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FC88 +0124 +7A22 +01FC +7828 +03FE +7840 +49FC +4E84 +48FC +7884 +48FC +0084 +ENDCHAR +STARTCHAR uni8B48 +ENCODING 35656 +BBX 15 16 0 -2 +BITMAP +4208 +2108 +07C8 +F810 +079E +7494 +07A4 +7014 +0794 +7094 +5114 +51C8 +5708 +7114 +5524 +0242 +ENDCHAR +STARTCHAR uni8B49 +ENCODING 35657 +BBX 15 15 1 -1 +BITMAP +01C8 +7A50 +02A2 +FD14 +0208 +7CF6 +0000 +79F8 +0108 +0108 +79F8 +4800 +4908 +4890 +7BFE +ENDCHAR +STARTCHAR uni8B4A +ENCODING 35658 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +01FC +FC20 +03FE +7908 +039C +7908 +0188 +7E3E +4800 +4BFE +4890 +7890 +4912 +020E +ENDCHAR +STARTCHAR uni8B4B +ENCODING 35659 +BBX 14 16 0 -2 +BITMAP +239C +1294 +039C +FE94 +039C +7A04 +02F4 +7A94 +02F4 +7A94 +4AF4 +4A94 +4A94 +7B34 +4A04 +020C +ENDCHAR +STARTCHAR uni8B4C +ENCODING 35660 +BBX 15 15 1 -1 +BITMAP +001C +79E8 +0124 +FE14 +01F8 +7908 +0108 +79FC +0104 +0104 +7BFE +4A02 +4CAA +48AA +7906 +ENDCHAR +STARTCHAR uni8B4D +ENCODING 35661 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2290 +25FE +2E90 +34FE +2490 +24FE +2440 +2FFE +2000 +27FC +4000 +47FC +8404 +07FC +ENDCHAR +STARTCHAR uni8B4E +ENCODING 35662 +BBX 15 14 1 -1 +BITMAP +79FC +0088 +FC50 +03FE +78A4 +0128 +7A60 +03FE +0252 +7A92 +4B7E +4A52 +4A52 +7A76 +ENDCHAR +STARTCHAR uni8B4F +ENCODING 35663 +BBX 15 15 1 -1 +BITMAP +0128 +7928 +0230 +FEB4 +0128 +7AB4 +037A +7824 +03FE +0220 +7B24 +4A98 +4A12 +4A2A +7CC4 +ENDCHAR +STARTCHAR uni8B50 +ENCODING 35664 +BBX 15 16 0 -2 +BITMAP +2088 +1050 +03FE +FC50 +01FC +7954 +018C +7974 +0104 +79FC +4808 +4BFE +4908 +7888 +48A8 +0010 +ENDCHAR +STARTCHAR uni8B51 +ENCODING 35665 +BBX 15 15 1 -1 +BITMAP +0038 +79C0 +0040 +FFFE +0110 +7BF8 +0516 +79F0 +0000 +03FC +7A04 +4AF4 +4A94 +4AF4 +7A0C +ENDCHAR +STARTCHAR uni8B52 +ENCODING 35666 +BBX 15 16 0 -2 +BITMAP +203C +13E0 +0124 +FCA8 +03FE +78A8 +0124 +7A02 +01FC +7924 +4924 +49FC +4924 +7924 +49FC +0104 +ENDCHAR +STARTCHAR uni8B53 +ENCODING 35667 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FC20 +01FC +7924 +01FC +7924 +01FC +7822 +4BFE +4842 +4824 +7AA2 +4A8A +0478 +ENDCHAR +STARTCHAR uni8B54 +ENCODING 35668 +BBX 15 14 1 -1 +BITMAP +7BDE +0252 +FBDE +0210 +7A52 +01CE +7800 +0090 +03FC +7890 +4890 +4FFE +4908 +7E06 +ENDCHAR +STARTCHAR uni8B55 +ENCODING 35669 +BBX 15 15 0 -1 +BITMAP +2080 +1080 +01FE +FB54 +0554 +7954 +03FE +7954 +0154 +7954 +4FFE +4800 +4954 +792A +4A2A +ENDCHAR +STARTCHAR uni8B56 +ENCODING 35670 +BBX 15 15 1 -1 +BITMAP +0044 +7BFE +0154 +FD54 +03FE +78CC +0154 +7A46 +0000 +01FC +7904 +49FC +4904 +4904 +79FC +ENDCHAR +STARTCHAR uni8B57 +ENCODING 35671 +BBX 15 16 0 -2 +BITMAP +2210 +1210 +03DE +FA28 +0544 +78A0 +0110 +7A08 +05F6 +7800 +4800 +4BF8 +4A08 +7A08 +4BF8 +0208 +ENDCHAR +STARTCHAR uni8B58 +ENCODING 35672 +BBX 15 15 1 -1 +BITMAP +0110 +7914 +07D4 +FA92 +0290 +7FFE +0010 +7BD0 +0254 +0254 +7BD4 +4A48 +4A4A +4BDA +7824 +ENDCHAR +STARTCHAR uni8B59 +ENCODING 35673 +BBX 15 15 1 -1 +BITMAP +0088 +7890 +01FE +FD10 +03FC +7910 +0110 +79FC +0110 +0110 +79FE +4800 +4954 +4A2A +7C2A +ENDCHAR +STARTCHAR uni8B5A +ENCODING 35674 +BBX 15 14 1 -1 +BITMAP +7BFE +0050 +FDFC +0154 +79FC +0000 +78F8 +0088 +00F8 +7888 +48F8 +4820 +4BFE +7820 +ENDCHAR +STARTCHAR uni8B5B +ENCODING 35675 +BBX 15 15 1 -1 +BITMAP +0088 +7888 +03DE +FC88 +0088 +7BDE +0088 +7954 +0202 +01FC +7904 +49FC +4904 +4904 +79FC +ENDCHAR +STARTCHAR uni8B5C +ENCODING 35676 +BBX 15 15 1 -1 +BITMAP +0108 +7890 +03FC +FC90 +0294 +7998 +0090 +7FFE +0000 +01F8 +7908 +49F8 +4908 +4908 +79F8 +ENDCHAR +STARTCHAR uni8B5D +ENCODING 35677 +BBX 15 16 0 -2 +BITMAP +4000 +27FC +04A4 +FCA4 +07BC +70A0 +07BC +74A4 +04A4 +77BC +54A4 +54A4 +57BC +74A2 +50A2 +007E +ENDCHAR +STARTCHAR uni8B5E +ENCODING 35678 +BBX 15 14 1 -1 +BITMAP +79FC +0154 +FDFC +0000 +7BFE +0000 +79FC +0104 +01FC +7852 +4894 +4B88 +48E4 +7982 +ENDCHAR +STARTCHAR uni8B5F +ENCODING 35679 +BBX 15 14 1 -1 +BITMAP +78F8 +0088 +FC88 +00F8 +7800 +03DE +7A52 +0252 +03DE +7820 +4BFE +48A8 +4B26 +7820 +ENDCHAR +STARTCHAR uni8B60 +ENCODING 35680 +BBX 15 16 0 -2 +BITMAP +2020 +17FE +0000 +FBFE +0202 +7AFA +028A +7BFE +0000 +79FC +4904 +49FC +4904 +79FC +4800 +07FE +ENDCHAR +STARTCHAR uni8B61 +ENCODING 35681 +BBX 15 16 0 -2 +BITMAP +2020 +1124 +00A8 +FBFE +0202 +78F8 +0088 +7888 +00F8 +7800 +49FC +4924 +49FC +7924 +49FC +0104 +ENDCHAR +STARTCHAR uni8B62 +ENCODING 35682 +BBX 15 16 0 -2 +BITMAP +2044 +1224 +0128 +FC7E +0010 +7828 +034A +791C +0128 +794C +491A +492A +4948 +7910 +4AFE +0400 +ENDCHAR +STARTCHAR uni8B63 +ENCODING 35683 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +0050 +FC88 +0104 +7AFA +0000 +7800 +01DC +7954 +4954 +49DC +4888 +7888 +4954 +0222 +ENDCHAR +STARTCHAR uni8B64 +ENCODING 35684 +BBX 15 16 0 -2 +BITMAP +4108 +2208 +07C8 +F450 +07DE +7464 +07D4 +7214 +0114 +77D4 +5214 +53C8 +5248 +7454 +5554 +08A2 +ENDCHAR +STARTCHAR uni8B65 +ENCODING 35685 +BBX 15 16 0 -2 +BITMAP +1020 +7E20 +4A7E +7EC4 +1028 +FF10 +2028 +3EC6 +4300 +FFFE +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8B66 +ENCODING 35686 +BBX 15 15 1 -1 +BITMAP +2420 +FF20 +247E +7EC4 +C228 +7A10 +4A68 +7C06 +07C0 +0000 +FFFE +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8B67 +ENCODING 35687 +BBX 15 16 0 -2 +BITMAP +4020 +23FE +0288 +FA50 +03FE +7250 +02FC +7254 +03FE +7254 +52FC +5250 +52D8 +7554 +5652 +0850 +ENDCHAR +STARTCHAR uni8B68 +ENCODING 35688 +BBX 15 16 0 -2 +BITMAP +4090 +23FC +0294 +FBFC +0294 +73FC +0000 +73FC +0200 +72F8 +5200 +53FE +5520 +7514 +5548 +0986 +ENDCHAR +STARTCHAR uni8B69 +ENCODING 35689 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +01FC +FC88 +03FE +7800 +01F8 +7908 +01F8 +0108 +79F8 +4820 +4A94 +4A4A +7C38 +ENDCHAR +STARTCHAR uni8B6A +ENCODING 35690 +BBX 15 16 0 -2 +BITMAP +2088 +13FE +0088 +FDFC +0104 +79FC +0104 +79FC +0080 +79FE +4A22 +4D52 +4902 +79FA +480A +0004 +ENDCHAR +STARTCHAR uni8B6B +ENCODING 35691 +BBX 15 15 1 -1 +BITMAP +0040 +78F0 +0120 +FFFE +0248 +7B8E +0278 +7A00 +03FE +0200 +7A78 +4A00 +4AFC +4C84 +78FC +ENDCHAR +STARTCHAR uni8B6C +ENCODING 35692 +BBX 15 15 1 -1 +BITMAP +0010 +7E10 +42FE +7E44 +40FE +7E10 +A2FE +2210 +3E10 +0100 +FFFE +0000 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8B6D +ENCODING 35693 +BBX 15 16 0 -2 +BITMAP +4100 +26DC +0454 +FC54 +06D4 +7454 +0466 +77C0 +001C +7014 +57D4 +5114 +5108 +71C8 +5714 +0222 +ENDCHAR +STARTCHAR uni8B6E +ENCODING 35694 +BBX 15 16 0 -2 +BITMAP +2020 +1050 +1088 +FD74 +0202 +7DFC +0124 +7DAC +0124 +7DFC +4400 +44F8 +4488 +7CF8 +4488 +00F8 +ENDCHAR +STARTCHAR uni8B6F +ENCODING 35695 +BBX 15 14 1 -1 +BITMAP +79FC +0154 +FDFC +0020 +79FC +0020 +7BFE +0088 +03FE +7820 +49FC +4820 +4820 +7820 +ENDCHAR +STARTCHAR uni8B70 +ENCODING 35696 +BBX 15 15 1 -1 +BITMAP +0208 +7110 +07FC +F840 +03F8 +7040 +0FFE +7088 +0F24 +0120 +7FFE +5124 +5FA8 +5112 +776C +ENDCHAR +STARTCHAR uni8B71 +ENCODING 35697 +BBX 15 15 1 -1 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +0100 +3938 +0100 +FD7E +0100 +7D7C +4544 +7D7C +ENDCHAR +STARTCHAR uni8B72 +ENCODING 35698 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +07FE +F908 +0606 +7890 +03FC +7890 +03FC +0090 +7FFE +4890 +4F14 +49C8 +7F06 +ENDCHAR +STARTCHAR uni8B73 +ENCODING 35699 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +0020 +FBFE +0222 +79AC +0020 +79AC +0000 +7BFE +4820 +49FC +4954 +7954 +4954 +010C +ENDCHAR +STARTCHAR uni8B74 +ENCODING 35700 +BBX 15 15 1 -1 +BITMAP +0210 +7910 +007C +FC54 +027C +7910 +007E +7B48 +0178 +0140 +797C +4944 +497C +4A80 +7C7E +ENDCHAR +STARTCHAR uni8B75 +ENCODING 35701 +BBX 15 16 0 -2 +BITMAP +4144 +2144 +0554 +FB64 +015E +77E4 +0004 +7234 +014C +77E4 +5084 +53E4 +5084 +70E4 +5714 +0008 +ENDCHAR +STARTCHAR uni8B76 +ENCODING 35702 +BBX 15 15 1 -1 +BITMAP +1FF0 +0000 +FFFE +0000 +0FE0 +0000 +1FF0 +1010 +FFFE +0000 +3C78 +0000 +7EFC +4284 +7EFC +ENDCHAR +STARTCHAR uni8B77 +ENCODING 35703 +BBX 15 15 1 -1 +BITMAP +0048 +79FE +0090 +FDFC +0310 +7DFC +0110 +79FC +0110 +01FE +7800 +4BFE +4888 +4870 +7B8E +ENDCHAR +STARTCHAR uni8B78 +ENCODING 35704 +BBX 15 16 0 -2 +BITMAP +2020 +13FE +0020 +FDFC +0000 +7BFE +0002 +79FC +0020 +7BFE +4800 +4BFE +4804 +7BBE +4AA4 +038C +ENDCHAR +STARTCHAR uni8B79 +ENCODING 35705 +BBX 15 16 0 -2 +BITMAP +2020 +13FE +0000 +FDFC +0104 +79FC +0000 +7BFE +0202 +79FC +4840 +4BA4 +48D8 +7B34 +48D2 +0330 +ENDCHAR +STARTCHAR uni8B7A +ENCODING 35706 +BBX 15 16 0 -2 +BITMAP +2200 +12BE +0302 +FA54 +01C8 +783E +020A +7BCA +0528 +7928 +4FEE +4928 +4AA8 +7A58 +4C4E +0080 +ENDCHAR +STARTCHAR uni8B7B +ENCODING 35707 +BBX 15 16 0 -2 +BITMAP +3EF8 +2288 +3EF8 +2288 +3EF8 +2288 +3EF8 +1450 +2288 +FFFE +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8B7C +ENCODING 35708 +BBX 15 16 0 -2 +BITMAP +7E40 +487E +7E90 +4308 +7EFE +48AA +7EFE +0200 +0100 +FFFE +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8B7D +ENCODING 35709 +BBX 15 15 1 -1 +BITMAP +0800 +3138 +2188 +3938 +2188 +3AB8 +2288 +FFFE +0820 +1110 +3FF8 +C006 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8B7E +ENCODING 35710 +BBX 15 16 0 -2 +BITMAP +2088 +13FE +0000 +FDE2 +012A +79EA +012A +79EA +0122 +7966 +4800 +4BDE +4A52 +794A +4A52 +00C6 +ENDCHAR +STARTCHAR uni8B7F +ENCODING 35711 +BBX 15 15 1 -1 +BITMAP +0108 +7BDE +0108 +FB9C +0108 +79DE +0608 +7BFC +0004 +07FE +7804 +4BFC +4A44 +4CAA +7C7A +ENDCHAR +STARTCHAR uni8B80 +ENCODING 35712 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +03FE +FC20 +01FC +7800 +03FE +7A52 +03FE +0104 +79FC +4904 +49FC +4888 +7B06 +ENDCHAR +STARTCHAR uni8B81 +ENCODING 35713 +BBX 15 15 1 -1 +BITMAP +0010 +7410 +04FE +FA44 +0428 +74FE +0292 +70FE +0692 +02BA +72AA +52BA +5286 +5500 +78FE +ENDCHAR +STARTCHAR uni8B82 +ENCODING 35714 +BBX 15 16 0 -2 +BITMAP +2100 +11F8 +0208 +FFFE +0262 +7A92 +01FC +7904 +01FC +7904 +49FC +4880 +49F8 +7A88 +4870 +038E +ENDCHAR +STARTCHAR uni8B83 +ENCODING 35715 +BBX 15 15 1 -1 +BITMAP +0088 +7BDE +0088 +FBDE +0088 +7B54 +01FE +7904 +01FC +0104 +79FC +4904 +49FC +4888 +7B06 +ENDCHAR +STARTCHAR uni8B84 +ENCODING 35716 +BBX 15 16 0 -2 +BITMAP +83F8 +4248 +0248 +E3F8 +0248 +E248 +03F8 +E000 +0FBE +EAAA +AAAA +AFBE +AAAA +EAAA +AFBE +08A2 +ENDCHAR +STARTCHAR uni8B85 +ENCODING 35717 +BBX 15 16 0 -2 +BITMAP +2020 +13FE +0202 +FC1C +03E0 +7924 +00A8 +7BFE +0124 +7A02 +4DFC +4924 +49FC +7924 +49FC +0104 +ENDCHAR +STARTCHAR uni8B86 +ENCODING 35718 +BBX 15 16 0 -2 +BITMAP +2200 +4F9C +9480 +2FDE +6108 +AFC8 +2508 +27D8 +0100 +FFFE +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8B87 +ENCODING 35719 +BBX 15 16 0 -2 +BITMAP +23DE +1252 +03DE +FE52 +03DE +7A42 +027A +7A8A +0312 +7ADA +4A8A +4ADA +4A8A +7AFA +4A0A +0204 +ENDCHAR +STARTCHAR uni8B88 +ENCODING 35720 +BBX 15 16 0 -2 +BITMAP +4000 +27FE +0444 +FD98 +0488 +75FE +0488 +75DC +06AA +7488 +5420 +5520 +553C +7520 +5520 +0BFE +ENDCHAR +STARTCHAR uni8B89 +ENCODING 35721 +BBX 15 16 0 -2 +BITMAP +2010 +107C +0254 +FD7C +0110 +78FE +0044 +7B7C +0144 +797C +4944 +497C +4928 +7944 +4A80 +047E +ENDCHAR +STARTCHAR uni8B8A +ENCODING 35722 +BBX 15 15 1 -1 +BITMAP +2008 +4390 +D034 +27C8 +5816 +EFBA +2008 +B3AC +AAAA +2388 +1000 +3FFE +C810 +07E0 +F81E +ENDCHAR +STARTCHAR uni8B8B +ENCODING 35723 +BBX 15 15 1 -1 +BITMAP +087C +7F40 +227C +FF84 +227C +3E40 +227C +2642 +FFFE +0000 +1FF0 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8B8C +ENCODING 35724 +BBX 15 15 1 -1 +BITMAP +0110 +7110 +07FE +F910 +01F0 +7208 +0EEA +72AC +02A8 +0EEA +7206 +5000 +52A4 +5492 +7492 +ENDCHAR +STARTCHAR uni8B8D +ENCODING 35725 +BBX 15 16 0 -2 +BITMAP +2000 +13FE +0020 +FBAE +02AA +7AAA +03AE +7820 +03FE +7820 +4BAE +4AAA +4AAA +7BAE +4820 +03FE +ENDCHAR +STARTCHAR uni8B8E +ENCODING 35726 +BBX 15 15 1 -1 +BITMAP +2812 +2B92 +5024 +7FFE +D028 +53A8 +783E +53A8 +5028 +5028 +7BBE +52A8 +52A8 +52A8 +7BBE +ENDCHAR +STARTCHAR uni8B8F +ENCODING 35727 +BBX 15 16 0 -2 +BITMAP +2200 +4F9C +9480 +2FDE +6208 +AFC8 +2A48 +2AD8 +0100 +FFFE +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8B90 +ENCODING 35728 +BBX 15 15 1 -1 +BITMAP +2448 +2448 +7EFE +C990 +7EFC +4890 +7EFC +4890 +FFFE +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8B91 +ENCODING 35729 +BBX 15 16 0 -2 +BITMAP +8040 +40A0 +0110 +E208 +0DF6 +E000 +0EEE +EAAA +0EEE +E000 +AFFE +A922 +AFFE +E922 +A92A +0804 +ENDCHAR +STARTCHAR uni8B92 +ENCODING 35730 +BBX 15 15 1 -1 +BITMAP +0078 +7890 +03FC +FD04 +01FC +7910 +01DC +7912 +03CE +0000 +79FC +4924 +49FC +48AA +7B1E +ENDCHAR +STARTCHAR uni8B93 +ENCODING 35731 +BBX 15 15 1 -1 +BITMAP +0020 +7BFE +0000 +FDDC +0154 +79DC +0088 +79FC +0088 +01FC +7888 +4BFE +4892 +4BAC +78C2 +ENDCHAR +STARTCHAR uni8B94 +ENCODING 35732 +BBX 15 15 1 -1 +BITMAP +001C +7764 +0592 +FD7C +0610 +76FE +0500 +757C +0504 +05FE +7604 +547C +5554 +554A +7538 +ENDCHAR +STARTCHAR uni8B95 +ENCODING 35733 +BBX 15 14 1 -1 +BITMAP +EFBE +08A2 +FFBE +08A2 +EFBE +0842 +EBFA +0842 +0BFA +EB5A +AAEA +ABFA +A952 +EA4E +ENDCHAR +STARTCHAR uni8B96 +ENCODING 35734 +BBX 15 15 1 -1 +BITMAP +0290 +7294 +0554 +FD52 +0010 +77FE +0290 +76D4 +0294 +06D4 +7294 +56C8 +529A +5FEA +7044 +ENDCHAR +STARTCHAR uni8B97 +ENCODING 35735 +BBX 15 16 0 -2 +BITMAP +2222 +13FE +0090 +F9FE +0310 +7DFE +0110 +79FE +0110 +79FE +4900 +4BFE +4A8A +7B76 +4A52 +0276 +ENDCHAR +STARTCHAR uni8B98 +ENCODING 35736 +BBX 15 16 0 -2 +BITMAP +43FC +2108 +01F8 +F908 +01F8 +710E +07F8 +7008 +07FE +7294 +539C +5294 +539C +72D6 +57BC +0084 +ENDCHAR +STARTCHAR uni8B99 +ENCODING 35737 +BBX 15 15 1 -1 +BITMAP +0088 +7888 +03FE +FC88 +01DC +7954 +01DC +7908 +01FE +0310 +7DFC +4910 +49FC +4910 +79FE +ENDCHAR +STARTCHAR uni8B9A +ENCODING 35738 +BBX 15 15 1 -1 +BITMAP +0088 +7AA8 +03FE +FCA8 +03FE +7954 +0174 +7A56 +01FC +0104 +79FC +4904 +49FC +4848 +7986 +ENDCHAR +STARTCHAR uni8B9B +ENCODING 35739 +BBX 15 16 0 -2 +BITMAP +4108 +27FE +0108 +FB90 +013C +77D4 +02B4 +755C +0396 +7122 +53FC +5000 +57FE +7080 +5104 +03FE +ENDCHAR +STARTCHAR uni8B9C +ENCODING 35740 +BBX 15 15 1 -1 +BITMAP +0444 +7248 +0FFE +FA0A +0BFA +7000 +07FC +764C +0554 +07FC +7040 +5FFE +5000 +5524 +7892 +ENDCHAR +STARTCHAR uni8B9D +ENCODING 35741 +BBX 15 14 1 -1 +BITMAP +739C +0294 +FFFE +0410 +75D0 +049E +77D4 +0564 +05D4 +7548 +55C8 +5954 +53D4 +7062 +ENDCHAR +STARTCHAR uni8B9E +ENCODING 35742 +BBX 15 15 1 -1 +BITMAP +0208 +E3CC +020A +FFE8 +0A28 +EFDE +0A28 +EFE8 +0A48 +1FE8 +EAA8 +AC74 +ABA4 +A922 +E962 +ENDCHAR +STARTCHAR uni8B9F +ENCODING 35743 +BBX 15 16 0 -2 +BITMAP +8108 +4FE4 +0100 +E7CE +0000 +EFEE +0AA0 +EFEE +0440 +E7CE +A44A +A7CA +A44A +E7CE +A28A +0440 +ENDCHAR +STARTCHAR uni8BA0 +ENCODING 35744 +BBX 6 14 0 -1 +BITMAP +20 +10 +10 +00 +00 +F0 +10 +10 +10 +10 +10 +14 +18 +10 +ENDCHAR +STARTCHAR uni8BA1 +ENCODING 35745 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +1040 +0040 +0040 +F7FE +1040 +1040 +1040 +1040 +1040 +1440 +1840 +1040 +0040 +ENDCHAR +STARTCHAR uni8BA2 +ENCODING 35746 +BBX 15 15 0 -2 +BITMAP +2000 +13FE +1020 +0020 +0020 +F020 +1020 +1020 +1020 +1020 +1020 +1420 +1820 +10A0 +0040 +ENDCHAR +STARTCHAR uni8BA3 +ENCODING 35747 +BBX 14 16 0 -2 +BITMAP +0080 +2080 +1080 +1080 +0080 +00A0 +F090 +1088 +1084 +1084 +1080 +1080 +1480 +1880 +1080 +0080 +ENDCHAR +STARTCHAR uni8BA4 +ENCODING 35748 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +1040 +0040 +0040 +F040 +1040 +10A0 +10A0 +10A0 +1510 +1910 +1208 +0404 +0802 +ENDCHAR +STARTCHAR uni8BA5 +ENCODING 35749 +BBX 15 15 0 -2 +BITMAP +21F0 +1110 +1110 +0110 +0110 +F110 +1110 +1110 +1110 +1110 +1512 +1912 +1212 +020E +0400 +ENDCHAR +STARTCHAR uni8BA6 +ENCODING 35750 +BBX 15 15 0 -2 +BITMAP +2000 +13FC +1040 +0040 +0040 +F040 +1040 +17FE +1040 +1040 +1040 +1440 +1840 +1040 +0040 +ENDCHAR +STARTCHAR uni8BA7 +ENCODING 35751 +BBX 15 14 0 -1 +BITMAP +2000 +13FE +1020 +0020 +0020 +F020 +1020 +1020 +1020 +1020 +1420 +1820 +1020 +07FE +ENDCHAR +STARTCHAR uni8BA8 +ENCODING 35752 +BBX 15 16 0 -2 +BITMAP +0010 +2010 +1010 +1010 +03FE +0010 +F010 +1010 +1110 +1090 +1090 +1010 +1410 +1810 +1050 +0020 +ENDCHAR +STARTCHAR uni8BA9 +ENCODING 35753 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +1040 +1040 +0040 +0040 +F07C +1040 +1040 +1040 +1040 +1440 +1840 +1040 +0FFE +ENDCHAR +STARTCHAR uni8BAA +ENCODING 35754 +BBX 14 15 0 -1 +BITMAP +0020 +2020 +1020 +1020 +0124 +0124 +F124 +1124 +1124 +1124 +1124 +1124 +1524 +19FC +1004 +ENDCHAR +STARTCHAR uni8BAB +ENCODING 35755 +BBX 15 15 0 -1 +BITMAP +0080 +2080 +1100 +11FE +0200 +0400 +F1F8 +1008 +1010 +1060 +1080 +1500 +1A02 +1202 +01FE +ENDCHAR +STARTCHAR uni8BAC +ENCODING 35756 +BBX 15 15 0 -1 +BITMAP +0010 +2078 +13C0 +1040 +0040 +0040 +F040 +107E +17C0 +1040 +1040 +1442 +1842 +1042 +003E +ENDCHAR +STARTCHAR uni8BAD +ENCODING 35757 +BBX 14 16 0 -2 +BITMAP +0104 +2124 +1124 +1124 +0124 +0124 +F124 +1124 +1124 +1124 +1124 +1524 +1924 +1224 +0204 +0404 +ENDCHAR +STARTCHAR uni8BAE +ENCODING 35758 +BBX 15 16 0 -2 +BITMAP +0080 +2048 +1248 +1208 +0208 +0110 +F110 +1110 +10A0 +10A0 +1040 +1440 +18A0 +1110 +0208 +0C06 +ENDCHAR +STARTCHAR uni8BAF +ENCODING 35759 +BBX 15 15 0 -2 +BITMAP +27F0 +1110 +1110 +0110 +0110 +F110 +17D0 +1110 +1110 +1110 +1112 +150A +190A +1106 +0102 +ENDCHAR +STARTCHAR uni8BB0 +ENCODING 35760 +BBX 15 14 0 -1 +BITMAP +2000 +11F8 +1008 +0008 +0008 +F008 +11F8 +1108 +1100 +1100 +1100 +1502 +1902 +10FE +ENDCHAR +STARTCHAR uni8BB1 +ENCODING 35761 +BBX 14 15 0 -2 +BITMAP +2000 +13FC +1044 +0044 +0244 +F244 +1244 +1484 +1084 +1084 +1504 +1904 +1204 +0428 +0810 +ENDCHAR +STARTCHAR uni8BB2 +ENCODING 35762 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +1110 +1110 +07FC +0110 +F110 +1110 +1FFE +1110 +1110 +1510 +1910 +1210 +0210 +0410 +ENDCHAR +STARTCHAR uni8BB3 +ENCODING 35763 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +17FE +0040 +0040 +F3FC +1040 +1040 +17FE +1042 +1042 +144A +1844 +1040 +0040 +ENDCHAR +STARTCHAR uni8BB4 +ENCODING 35764 +BBX 15 14 0 -1 +BITMAP +23FC +1200 +1208 +0288 +0250 +F250 +1220 +1220 +1250 +1250 +1288 +1708 +1A00 +13FE +ENDCHAR +STARTCHAR uni8BB5 +ENCODING 35765 +BBX 15 14 0 -1 +BITMAP +23FE +1200 +1200 +0200 +03FC +F204 +1204 +1204 +1204 +13FC +1200 +1600 +1A00 +13FE +ENDCHAR +STARTCHAR uni8BB6 +ENCODING 35766 +BBX 15 15 0 -2 +BITMAP +23FC +1010 +1110 +0110 +0110 +F210 +13FE +1030 +1050 +1090 +1510 +1A10 +1410 +0050 +0020 +ENDCHAR +STARTCHAR uni8BB7 +ENCODING 35767 +BBX 15 16 0 -2 +BITMAP +0020 +2020 +1020 +1020 +03FE +0222 +F222 +1222 +1252 +124A +128A +1302 +1602 +1A02 +120A +0204 +ENDCHAR +STARTCHAR uni8BB8 +ENCODING 35768 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +1080 +11FC +0120 +0220 +F020 +1020 +13FE +1020 +1020 +1020 +1420 +1820 +1020 +0020 +ENDCHAR +STARTCHAR uni8BB9 +ENCODING 35769 +BBX 15 16 0 -2 +BITMAP +00A0 +20A0 +10A0 +1124 +0124 +0328 +F530 +1120 +1160 +11A0 +1120 +1122 +1522 +1922 +111E +0100 +ENDCHAR +STARTCHAR uni8BBA +ENCODING 35770 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +10A0 +10A0 +0110 +0208 +F406 +1110 +1120 +1140 +1180 +1100 +1504 +1904 +10FC +ENDCHAR +STARTCHAR uni8BBB +ENCODING 35771 +BBX 15 14 0 -1 +BITMAP +2008 +1108 +1088 +0252 +0252 +F222 +1222 +1252 +1292 +130A +160A +1A02 +13FE +0002 +ENDCHAR +STARTCHAR uni8BBC +ENCODING 35772 +BBX 15 15 0 -1 +BITMAP +0020 +2120 +1120 +1110 +0110 +0248 +F248 +1444 +1882 +1080 +1110 +1508 +1A08 +17FC +0204 +ENDCHAR +STARTCHAR uni8BBD +ENCODING 35773 +BBX 15 15 0 -2 +BITMAP +43F8 +2208 +2208 +0328 +02A8 +E2A8 +2248 +2248 +22A8 +22A8 +2B2A +340A +240A +0806 +1002 +ENDCHAR +STARTCHAR uni8BBE +ENCODING 35774 +BBX 15 15 0 -2 +BITMAP +21F0 +1110 +1110 +0110 +020E +F400 +13F8 +1108 +1110 +1090 +14A0 +1840 +10A0 +0318 +0C06 +ENDCHAR +STARTCHAR uni8BBF +ENCODING 35775 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +1040 +17FE +0100 +0100 +F100 +11F8 +1108 +1108 +1108 +1508 +1A08 +1208 +0450 +0820 +ENDCHAR +STARTCHAR uni8BC0 +ENCODING 35776 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +13FC +0044 +0044 +F044 +1044 +17FE +1040 +10A0 +14A0 +1910 +1208 +0404 +0802 +ENDCHAR +STARTCHAR uni8BC1 +ENCODING 35777 +BBX 15 14 0 -1 +BITMAP +2000 +13FE +1020 +0020 +0020 +F120 +1120 +113C +1120 +1120 +1520 +1920 +1120 +07FE +ENDCHAR +STARTCHAR uni8BC2 +ENCODING 35778 +BBX 15 16 0 -2 +BITMAP +0020 +2020 +1020 +1020 +03FE +0020 +F020 +1020 +11FC +1104 +1104 +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni8BC3 +ENCODING 35779 +BBX 15 15 0 -2 +BITMAP +2000 +17FE +1008 +0008 +03C8 +F248 +1248 +1248 +1248 +13C8 +1248 +1408 +1808 +1028 +0010 +ENDCHAR +STARTCHAR uni8BC4 +ENCODING 35780 +BBX 15 15 0 -2 +BITMAP +23F8 +1040 +1040 +0248 +0148 +F150 +1040 +17FE +1040 +1040 +1440 +1840 +1040 +0040 +0040 +ENDCHAR +STARTCHAR uni8BC5 +ENCODING 35781 +BBX 15 14 0 -1 +BITMAP +21F8 +1108 +1108 +0108 +01F8 +F108 +1108 +1108 +11F8 +1108 +1508 +1908 +1108 +07FE +ENDCHAR +STARTCHAR uni8BC6 +ENCODING 35782 +BBX 15 15 0 -2 +BITMAP +2000 +11FC +1104 +0104 +0104 +F104 +1104 +11FC +1104 +1000 +1490 +1888 +1104 +0202 +0402 +ENDCHAR +STARTCHAR uni8BC7 +ENCODING 35783 +BBX 14 15 0 -2 +BITMAP +23FC +1204 +1204 +0204 +02F4 +F294 +1294 +1294 +1294 +12F4 +1694 +1A04 +1204 +0214 +0208 +ENDCHAR +STARTCHAR uni8BC8 +ENCODING 35784 +BBX 15 16 0 -2 +BITMAP +0100 +2100 +1100 +11FE +0280 +0280 +F480 +10F8 +1080 +1080 +1080 +14FC +1880 +1080 +0080 +0080 +ENDCHAR +STARTCHAR uni8BC9 +ENCODING 35785 +BBX 15 16 0 -2 +BITMAP +0008 +201C +11E0 +1100 +0100 +0100 +F1FE +1110 +1110 +1130 +1118 +1514 +1912 +1210 +0210 +0410 +ENDCHAR +STARTCHAR uni8BCA +ENCODING 35786 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +20A0 +2110 +0208 +0426 +E040 +2080 +2310 +2020 +2040 +2888 +3310 +2020 +00C0 +0700 +ENDCHAR +STARTCHAR uni8BCB +ENCODING 35787 +BBX 15 16 0 -2 +BITMAP +0008 +203C +13E0 +1220 +0220 +0220 +F220 +13FE +1220 +1210 +1210 +1212 +160A +1A8A +1326 +0212 +ENDCHAR +STARTCHAR uni8BCC +ENCODING 35788 +BBX 14 16 0 -2 +BITMAP +0080 +2080 +10F8 +1108 +0210 +0420 +F3FC +1004 +1004 +1004 +11FC +1004 +1404 +1804 +13FC +0004 +ENDCHAR +STARTCHAR uni8BCD +ENCODING 35789 +BBX 14 15 0 -2 +BITMAP +23FC +1004 +1004 +07F4 +0004 +F004 +13E4 +1224 +1224 +1224 +13E4 +1404 +1804 +1014 +0008 +ENDCHAR +STARTCHAR uni8BCE +ENCODING 35790 +BBX 14 16 0 -2 +BITMAP +0020 +2020 +1124 +1124 +0124 +0124 +F1FC +1020 +1020 +1124 +1124 +1124 +1524 +1924 +11FC +0004 +ENDCHAR +STARTCHAR uni8BCF +ENCODING 35791 +BBX 14 15 0 -2 +BITMAP +23FC +1084 +1084 +0084 +0104 +F114 +1208 +1400 +11FC +1104 +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni8BD0 +ENCODING 35792 +BBX 15 16 0 -2 +BITMAP +0020 +2020 +1020 +13FE +0222 +0224 +F220 +13FC +1284 +1288 +1248 +1650 +1A20 +1450 +0488 +0906 +ENDCHAR +STARTCHAR uni8BD1 +ENCODING 35793 +BBX 15 15 0 -2 +BITMAP +23FC +1104 +1088 +0050 +0020 +F0D8 +1326 +1020 +11FC +1020 +1420 +1BFE +1020 +0020 +0020 +ENDCHAR +STARTCHAR uni8BD2 +ENCODING 35794 +BBX 15 16 0 -2 +BITMAP +0020 +2020 +1040 +1088 +0104 +03FE +F002 +1000 +11FC +1104 +1104 +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni8BD3 +ENCODING 35795 +BBX 15 14 0 -1 +BITMAP +23FE +1200 +1200 +03FC +0220 +F220 +12F8 +1220 +1220 +1220 +13FC +1600 +1A00 +13FE +ENDCHAR +STARTCHAR uni8BD4 +ENCODING 35796 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +27FC +2040 +0040 +03F8 +E040 +2040 +27FE +20E0 +2150 +2950 +3248 +2444 +0842 +0040 +ENDCHAR +STARTCHAR uni8BD5 +ENCODING 35797 +BBX 15 16 0 -2 +BITMAP +0028 +2024 +1024 +1020 +07FE +0020 +F020 +17E0 +1120 +1110 +1110 +1510 +19CA +170A +0206 +0002 +ENDCHAR +STARTCHAR uni8BD6 +ENCODING 35798 +BBX 15 15 0 -1 +BITMAP +0020 +2020 +11FC +1020 +0020 +0020 +F3FE +1000 +1020 +1020 +11FC +1020 +1420 +1820 +13FE +ENDCHAR +STARTCHAR uni8BD7 +ENCODING 35799 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +13FC +0040 +0040 +F7FE +1010 +1010 +17FE +1010 +1210 +1510 +1910 +1050 +0020 +ENDCHAR +STARTCHAR uni8BD8 +ENCODING 35800 +BBX 15 16 0 -2 +BITMAP +0020 +2020 +1020 +17FE +0020 +0020 +F3FE +1000 +1000 +11FC +1104 +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni8BD9 +ENCODING 35801 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +1080 +17FE +0100 +0120 +F220 +12A4 +14A4 +1528 +1A50 +1050 +1488 +1908 +1204 +0402 +ENDCHAR +STARTCHAR uni8BDA +ENCODING 35802 +BBX 15 16 0 -2 +BITMAP +0028 +4024 +2020 +27FE +0420 +0420 +E424 +27A4 +24A4 +24A8 +24A8 +2C90 +3692 +292A +0846 +1082 +ENDCHAR +STARTCHAR uni8BDB +ENCODING 35803 +BBX 15 16 0 -2 +BITMAP +0020 +2120 +1120 +11FC +0120 +0220 +F020 +13FE +1070 +10A8 +10A8 +1524 +1924 +1222 +0020 +0020 +ENDCHAR +STARTCHAR uni8BDC +ENCODING 35804 +BBX 15 16 0 -2 +BITMAP +0020 +2120 +1120 +11FC +0120 +0220 +F020 +13FE +1090 +1090 +1090 +1090 +1512 +1912 +1212 +040E +ENDCHAR +STARTCHAR uni8BDD +ENCODING 35805 +BBX 15 16 0 -2 +BITMAP +0008 +203C +11E0 +1020 +0020 +03FE +F020 +1020 +1020 +11FC +1104 +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni8BDE +ENCODING 35806 +BBX 15 16 0 -2 +BITMAP +0008 +401C +2F70 +2110 +0210 +0450 +EF5C +2150 +2950 +2950 +2550 +2A7C +3300 +2480 +087E +1000 +ENDCHAR +STARTCHAR uni8BDF +ENCODING 35807 +BBX 15 16 0 -2 +BITMAP +0008 +403C +23C0 +2200 +0200 +03FE +E200 +2200 +2200 +22FC +2284 +2A84 +3484 +2484 +08FC +0084 +ENDCHAR +STARTCHAR uni8BE0 +ENCODING 35808 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +10A0 +1110 +0208 +0406 +F3F8 +1040 +1040 +1040 +13F8 +1040 +1440 +1840 +17FE +ENDCHAR +STARTCHAR uni8BE1 +ENCODING 35809 +BBX 15 16 0 -2 +BITMAP +0100 +4100 +23F8 +2208 +0410 +0BFE +E200 +22F8 +2288 +2288 +22A8 +2290 +2A82 +3482 +247E +0800 +ENDCHAR +STARTCHAR uni8BE2 +ENCODING 35810 +BBX 14 16 0 -2 +BITMAP +0200 +4200 +23FC +2404 +0404 +0BE4 +E224 +2224 +23E4 +2224 +2224 +23E4 +2A24 +3004 +2014 +0008 +ENDCHAR +STARTCHAR uni8BE3 +ENCODING 35811 +BBX 15 16 0 -2 +BITMAP +0100 +2104 +1138 +11C0 +0102 +0102 +F0FE +1000 +11FC +1104 +1104 +15FC +1904 +1104 +01FC +0104 +ENDCHAR +STARTCHAR uni8BE4 +ENCODING 35812 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +11F0 +1210 +0020 +03FC +F044 +1044 +17FE +1044 +1044 +13FC +1444 +1840 +1140 +0080 +ENDCHAR +STARTCHAR uni8BE5 +ENCODING 35813 +BBX 15 16 0 -2 +BITMAP +0080 +4040 +2FFE +2080 +0110 +0110 +E224 +27E4 +2048 +2088 +2110 +2A20 +3450 +2088 +0304 +0C04 +ENDCHAR +STARTCHAR uni8BE6 +ENCODING 35814 +BBX 15 16 0 -2 +BITMAP +0208 +2108 +1110 +1000 +07FC +0040 +F040 +13F8 +1040 +1040 +17FE +1040 +1440 +1840 +1040 +0040 +ENDCHAR +STARTCHAR uni8BE7 +ENCODING 35815 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +1020 +13FE +0202 +0404 +F038 +13C0 +1040 +1040 +107E +17C0 +1440 +1842 +1042 +003E +ENDCHAR +STARTCHAR uni8BE8 +ENCODING 35816 +BBX 15 15 0 -2 +BITMAP +23FE +1202 +1444 +0040 +03FC +F080 +10A0 +1120 +11FC +1020 +1420 +1BFE +1020 +0020 +0020 +ENDCHAR +STARTCHAR uni8BE9 +ENCODING 35817 +BBX 14 15 0 -2 +BITMAP +47BC +2084 +2084 +04A4 +0294 +E294 +2084 +218C +2294 +24A4 +2084 +2884 +3084 +2294 +0108 +ENDCHAR +STARTCHAR uni8BEA +ENCODING 35818 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +27FC +2040 +03F8 +0080 +E7FE +2090 +2110 +21FE +2210 +2A90 +3450 +2810 +0050 +0020 +ENDCHAR +STARTCHAR uni8BEB +ENCODING 35819 +BBX 15 16 0 -2 +BITMAP +0014 +4012 +2010 +2FFE +0010 +0290 +E292 +2292 +2FD2 +2294 +2294 +2A88 +328A +249A +0426 +0842 +ENDCHAR +STARTCHAR uni8BEC +ENCODING 35820 +BBX 15 14 0 -1 +BITMAP +47FC +2040 +2040 +0248 +0248 +E248 +2554 +24D2 +2862 +2040 +2840 +3040 +2040 +0FFE +ENDCHAR +STARTCHAR uni8BED +ENCODING 35821 +BBX 15 15 0 -2 +BITMAP +47FC +2040 +2040 +03F8 +0088 +E088 +27FE +2000 +2000 +23F8 +2208 +2A08 +3208 +23F8 +0208 +ENDCHAR +STARTCHAR uni8BEE +ENCODING 35822 +BBX 14 16 0 -2 +BITMAP +0020 +2124 +10A4 +10A8 +0020 +01FC +F104 +1104 +11FC +1104 +1104 +11FC +1504 +1904 +1114 +0108 +ENDCHAR +STARTCHAR uni8BEF +ENCODING 35823 +BBX 15 15 0 -2 +BITMAP +43F8 +2208 +2208 +03F8 +0000 +E7FC +2040 +2040 +2FFE +2040 +20A0 +28A0 +3110 +2208 +0406 +ENDCHAR +STARTCHAR uni8BF0 +ENCODING 35824 +BBX 15 16 0 -2 +BITMAP +0020 +2120 +1120 +11FE +0220 +0420 +F020 +13FE +1000 +1000 +11FC +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni8BF1 +ENCODING 35825 +BBX 15 16 0 -2 +BITMAP +001C +47E0 +2040 +2040 +0FFE +0150 +E248 +2C46 +23F0 +2110 +2120 +217C +2A04 +3204 +2428 +0810 +ENDCHAR +STARTCHAR uni8BF2 +ENCODING 35826 +BBX 15 16 0 -2 +BITMAP +0100 +2100 +11FC +1200 +05F8 +0108 +F148 +1128 +17FE +1108 +1248 +1228 +17FC +1808 +1050 +0020 +ENDCHAR +STARTCHAR uni8BF3 +ENCODING 35827 +BBX 15 15 0 -2 +BITMAP +4440 +22BE +2108 +0288 +0488 +E088 +20BE +2188 +2288 +2488 +2088 +2888 +3088 +253E +0200 +ENDCHAR +STARTCHAR uni8BF4 +ENCODING 35828 +BBX 15 16 0 -2 +BITMAP +0208 +2108 +1110 +1020 +03F8 +0208 +F208 +1208 +13F8 +10A0 +10A0 +1520 +1922 +1222 +041E +0800 +ENDCHAR +STARTCHAR uni8BF5 +ENCODING 35829 +BBX 14 15 0 -2 +BITMAP +47F8 +2010 +21A0 +0040 +07FC +E444 +2444 +27FC +2444 +2444 +27FC +2C44 +3444 +2454 +0408 +ENDCHAR +STARTCHAR uni8BF6 +ENCODING 35830 +BBX 15 16 0 -2 +BITMAP +0040 +4080 +2110 +2208 +07FC +0104 +E100 +23F8 +2440 +2040 +2FFE +2040 +28A0 +3110 +2208 +0C06 +ENDCHAR +STARTCHAR uni8BF7 +ENCODING 35831 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +27FC +2040 +03F8 +0040 +E7FE +2000 +23F8 +2208 +23F8 +2208 +2BF8 +3208 +2228 +0210 +ENDCHAR +STARTCHAR uni8BF8 +ENCODING 35832 +BBX 15 16 0 -2 +BITMAP +0040 +4044 +23F4 +2048 +0050 +07FE +E040 +2080 +21F8 +2308 +2508 +21F8 +2908 +3108 +21F8 +0108 +ENDCHAR +STARTCHAR uni8BF9 +ENCODING 35833 +BBX 15 15 0 -2 +BITMAP +4FC0 +24BC +24A4 +04A4 +07A4 +E4A4 +24A8 +27A8 +24A8 +2490 +25D0 +2EA8 +30A8 +20C4 +0082 +ENDCHAR +STARTCHAR uni8BFA +ENCODING 35834 +BBX 15 16 0 -2 +BITMAP +0108 +4108 +27FE +2108 +0148 +0040 +E7FE +2080 +2100 +23FC +2504 +2904 +2904 +3104 +21FC +0104 +ENDCHAR +STARTCHAR uni8BFB +ENCODING 35835 +BBX 15 16 0 -2 +BITMAP +0020 +2020 +11FC +1020 +0020 +03FE +F002 +1094 +1050 +1110 +1090 +13FE +1428 +1844 +1082 +0302 +ENDCHAR +STARTCHAR uni8BFC +ENCODING 35836 +BBX 15 15 0 -2 +BITMAP +4FFE +2080 +2184 +0244 +0468 +EAB0 +2130 +22A8 +2468 +28A4 +2124 +2A22 +3420 +20A0 +0040 +ENDCHAR +STARTCHAR uni8BFD +ENCODING 35837 +BBX 15 16 0 -2 +BITMAP +0090 +2090 +1090 +179E +0090 +0090 +F090 +139C +1090 +1090 +1090 +179E +1890 +1090 +0090 +0090 +ENDCHAR +STARTCHAR uni8BFE +ENCODING 35838 +BBX 15 15 0 -2 +BITMAP +43F8 +2248 +2248 +03F8 +0248 +E248 +23F8 +2040 +27FC +20E0 +2950 +3248 +2446 +0040 +0040 +ENDCHAR +STARTCHAR uni8BFF +ENCODING 35839 +BBX 15 16 0 -2 +BITMAP +0038 +43C0 +2040 +2040 +07FC +0150 +E248 +2486 +2080 +27FC +2110 +2A10 +31A0 +2060 +0090 +0308 +ENDCHAR +STARTCHAR uni8C00 +ENCODING 35840 +BBX 15 16 0 -2 +BITMAP +0040 +4140 +265C +2444 +0444 +075C +E444 +2444 +27FC +2444 +20A0 +20A0 +2910 +3208 +2404 +0802 +ENDCHAR +STARTCHAR uni8C01 +ENCODING 35841 +BBX 15 16 0 -2 +BITMAP +0140 +4120 +2120 +23FE +0220 +0620 +EBFC +2220 +2220 +23FC +2220 +2220 +2A20 +33FE +2200 +0200 +ENDCHAR +STARTCHAR uni8C02 +ENCODING 35842 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +20A0 +2110 +0288 +0446 +E800 +23F0 +2010 +2020 +2040 +2924 +3522 +250A +0908 +00F8 +ENDCHAR +STARTCHAR uni8C03 +ENCODING 35843 +BBX 14 15 0 -2 +BITMAP +47FC +2444 +2444 +05F4 +0444 +E444 +27FC +2404 +25F4 +2514 +2D14 +35F4 +2404 +0414 +0808 +ENDCHAR +STARTCHAR uni8C04 +ENCODING 35844 +BBX 14 16 0 -2 +BITMAP +0080 +4080 +20F8 +2108 +0210 +0400 +E040 +239C +2204 +2204 +239C +2204 +2A04 +3204 +23FC +0204 +ENDCHAR +STARTCHAR uni8C05 +ENCODING 35845 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +13FE +1000 +0000 +01FC +F104 +1104 +1104 +11FC +1020 +14A8 +1924 +1222 +00A0 +0040 +ENDCHAR +STARTCHAR uni8C06 +ENCODING 35846 +BBX 14 16 0 -2 +BITMAP +0080 +2040 +17FC +1000 +03F8 +0208 +F3F8 +1000 +13F8 +1010 +1020 +17FC +1840 +1040 +0140 +0080 +ENDCHAR +STARTCHAR uni8C07 +ENCODING 35847 +BBX 15 16 0 -2 +BITMAP +0080 +4040 +27FC +2000 +0110 +0110 +E2A8 +2444 +2000 +2040 +27FE +2040 +2840 +3040 +2040 +0040 +ENDCHAR +STARTCHAR uni8C08 +ENCODING 35848 +BBX 15 16 0 -2 +BITMAP +0040 +2244 +1244 +1448 +00A0 +0110 +F608 +1044 +1040 +1248 +1248 +1450 +18A0 +1110 +0208 +0C06 +ENDCHAR +STARTCHAR uni8C09 +ENCODING 35849 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +13FE +1222 +0020 +01FC +F124 +1124 +11FC +1124 +1124 +15FC +1924 +1020 +0020 +0020 +ENDCHAR +STARTCHAR uni8C0A +ENCODING 35850 +BBX 15 15 0 -1 +BITMAP +0040 +2020 +13FE +1202 +0404 +01F8 +F108 +1108 +11F8 +1108 +1108 +15F8 +1908 +1108 +07FE +ENDCHAR +STARTCHAR uni8C0B +ENCODING 35851 +BBX 15 16 0 -2 +BITMAP +0208 +4208 +2FFE +2208 +0208 +03F8 +E208 +2208 +23F8 +2040 +2FFE +20E0 +2950 +3248 +2C46 +0040 +ENDCHAR +STARTCHAR uni8C0C +ENCODING 35852 +BBX 15 15 0 -1 +BITMAP +0110 +4110 +27FC +2110 +01F0 +0110 +E1F0 +2110 +2110 +27FE +2200 +2290 +2B08 +3200 +23FC +ENDCHAR +STARTCHAR uni8C0D +ENCODING 35853 +BBX 15 16 0 -2 +BITMAP +0090 +4290 +2290 +27FE +0290 +0290 +E2F0 +2200 +23FC +2040 +27FE +20E0 +2950 +3248 +2C46 +0040 +ENDCHAR +STARTCHAR uni8C0E +ENCODING 35854 +BBX 15 16 0 -2 +BITMAP +0108 +4108 +27FE +2148 +0020 +07FE +E200 +2200 +23FC +2000 +2248 +2248 +2A48 +344A +244A +0846 +ENDCHAR +STARTCHAR uni8C0F +ENCODING 35855 +BBX 15 16 0 -2 +BITMAP +0040 +4040 +2FFE +2040 +07FC +0444 +E554 +24E4 +2444 +27FC +20E0 +2950 +3248 +2446 +0040 +0040 +ENDCHAR +STARTCHAR uni8C10 +ENCODING 35856 +BBX 15 16 0 -2 +BITMAP +0220 +2224 +13A8 +1230 +02A2 +0322 +F25E +1080 +13FC +1204 +1204 +13FC +1604 +1A04 +13FC +0204 +ENDCHAR +STARTCHAR uni8C11 +ENCODING 35857 +BBX 15 16 0 -2 +BITMAP +0040 +207C +1040 +13FE +0242 +0278 +F3C0 +1244 +123C +1200 +12FC +1680 +1BFE +1480 +0480 +08FC +ENDCHAR +STARTCHAR uni8C12 +ENCODING 35858 +BBX 14 15 0 -2 +BITMAP +43F8 +2208 +23F8 +0208 +03F8 +E100 +23FC +2444 +2244 +22A4 +2204 +2BF4 +3004 +2028 +0010 +ENDCHAR +STARTCHAR uni8C13 +ENCODING 35859 +BBX 14 15 0 -2 +BITMAP +47FC +2444 +27FC +0444 +07FC +E000 +23F8 +2208 +23F8 +2208 +23F8 +2A08 +3208 +2228 +0210 +ENDCHAR +STARTCHAR uni8C14 +ENCODING 35860 +BBX 15 15 0 -2 +BITMAP +47BC +24A4 +24A4 +07BC +0000 +E3F8 +2000 +2FFE +2100 +2200 +23F8 +2808 +3008 +2050 +0020 +ENDCHAR +STARTCHAR uni8C15 +ENCODING 35861 +BBX 15 16 0 -2 +BITMAP +0040 +20A0 +1110 +1208 +05F6 +0000 +F3C4 +1254 +1254 +13D4 +1254 +1254 +17D4 +1A44 +1254 +02C8 +ENDCHAR +STARTCHAR uni8C16 +ENCODING 35862 +BBX 15 16 0 -2 +BITMAP +003C +47C0 +2244 +2128 +0000 +03FC +E080 +2080 +27FE +2100 +21F8 +2A88 +3250 +2420 +08D8 +0306 +ENDCHAR +STARTCHAR uni8C17 +ENCODING 35863 +BBX 15 16 0 -2 +BITMAP +0100 +21F0 +1210 +1420 +03FC +0244 +F244 +13FC +10A0 +1122 +161E +10C0 +1430 +1980 +1060 +0010 +ENDCHAR +STARTCHAR uni8C18 +ENCODING 35864 +BBX 15 16 0 -2 +BITMAP +0040 +2240 +117C +1084 +0108 +0620 +F220 +1250 +1288 +1106 +11F8 +1108 +1508 +1908 +11F8 +0108 +ENDCHAR +STARTCHAR uni8C19 +ENCODING 35865 +BBX 15 16 0 -2 +BITMAP +0080 +4040 +27FC +2000 +0208 +0110 +EFFE +2000 +23F8 +2208 +2208 +23F8 +2A08 +3208 +23F8 +0208 +ENDCHAR +STARTCHAR uni8C1A +ENCODING 35866 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +13FC +1000 +0108 +0090 +F3FE +1210 +1220 +12C8 +1210 +1624 +1AC8 +1410 +0460 +0980 +ENDCHAR +STARTCHAR uni8C1B +ENCODING 35867 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +11FC +1000 +0088 +0050 +F3FE +1222 +1424 +11FC +1124 +1124 +1534 +1928 +1020 +0020 +ENDCHAR +STARTCHAR uni8C1C +ENCODING 35868 +BBX 15 15 0 -1 +BITMAP +0010 +4092 +2452 +2254 +0210 +00FE +E010 +2638 +2254 +2292 +2310 +2210 +2A10 +3500 +28FE +ENDCHAR +STARTCHAR uni8C1D +ENCODING 35869 +BBX 14 16 0 -2 +BITMAP +0080 +4040 +27FC +2404 +0404 +07FC +E400 +2400 +27FC +26A4 +2AA4 +2BFC +3AA4 +2AA4 +12A4 +020C +ENDCHAR +STARTCHAR uni8C1E +ENCODING 35870 +BBX 15 15 0 -2 +BITMAP +23FE +1022 +1120 +013C +0120 +F2FE +1400 +11FC +1104 +11FC +1504 +19FC +1104 +0114 +0108 +ENDCHAR +STARTCHAR uni8C1F +ENCODING 35871 +BBX 15 16 0 -2 +BITMAP +0110 +4110 +27FC +2110 +0000 +03F8 +E208 +23F8 +2208 +23F8 +2040 +27FC +28A0 +3110 +2208 +0C06 +ENDCHAR +STARTCHAR uni8C20 +ENCODING 35872 +BBX 15 16 0 -2 +BITMAP +0040 +4248 +2150 +2040 +07FE +0402 +E804 +23F8 +2208 +2208 +23F8 +20A0 +2920 +3124 +2224 +041C +ENDCHAR +STARTCHAR uni8C21 +ENCODING 35873 +BBX 15 15 0 -2 +BITMAP +47FC +2444 +27FC +0444 +07FC +E110 +2208 +2484 +21F8 +2208 +2508 +3090 +2060 +0198 +0E06 +ENDCHAR +STARTCHAR uni8C22 +ENCODING 35874 +BBX 15 16 0 -2 +BITMAP +0108 +4208 +2788 +2488 +07BE +0488 +E788 +24C8 +24A8 +2FA8 +2188 +2A88 +3488 +2888 +02A8 +0110 +ENDCHAR +STARTCHAR uni8C23 +ENCODING 35875 +BBX 15 16 0 -2 +BITMAP +0008 +203C +13C0 +1004 +0244 +0128 +F1FC +1220 +1020 +13FE +1020 +1124 +1524 +1924 +11FC +0004 +ENDCHAR +STARTCHAR uni8C24 +ENCODING 35876 +BBX 15 16 0 -2 +BITMAP +0040 +2020 +13FC +1108 +0090 +03FE +F202 +1444 +1020 +13FC +1080 +10F8 +1488 +1908 +1128 +0210 +ENDCHAR +STARTCHAR uni8C25 +ENCODING 35877 +BBX 15 15 0 -1 +BITMAP +0208 +4108 +2110 +2000 +07FC +0000 +E110 +2208 +2404 +23F8 +22A8 +22A8 +2AA8 +32A8 +2FFE +ENDCHAR +STARTCHAR uni8C26 +ENCODING 35878 +BBX 15 16 0 -2 +BITMAP +0208 +4110 +2000 +27FE +00A0 +07FC +E0A4 +2FFE +20A4 +27FC +20A0 +29B0 +32A8 +2CA6 +00A0 +00A0 +ENDCHAR +STARTCHAR uni8C27 +ENCODING 35879 +BBX 15 15 0 -1 +BITMAP +0040 +4028 +2090 +22A4 +02C2 +048A +E188 +2678 +2000 +23FC +2294 +2294 +2A94 +3294 +27FE +ENDCHAR +STARTCHAR uni8C28 +ENCODING 35880 +BBX 15 15 0 -1 +BITMAP +0110 +4110 +2FFE +2110 +01F0 +0040 +E7FC +2444 +27FC +2040 +2FFE +2040 +2FFC +3040 +2FFE +ENDCHAR +STARTCHAR uni8C29 +ENCODING 35881 +BBX 15 16 0 -2 +BITMAP +03F8 +4208 +23F8 +2208 +03F8 +0000 +E7FC +24A4 +24A4 +27FC +2000 +23F8 +2910 +30E0 +2318 +0C06 +ENDCHAR +STARTCHAR uni8C2A +ENCODING 35882 +BBX 14 16 0 -2 +BITMAP +0080 +4040 +27FC +2110 +00A0 +07FC +E444 +25F4 +2444 +25F4 +2514 +2514 +2DF4 +3404 +2414 +0408 +ENDCHAR +STARTCHAR uni8C2B +ENCODING 35883 +BBX 15 16 0 -2 +BITMAP +0108 +2090 +17FE +1000 +03C4 +0254 +F3D4 +1254 +13D4 +1244 +12CC +1400 +1BFC +1084 +0114 +0608 +ENDCHAR +STARTCHAR uni8C2C +ENCODING 35884 +BBX 15 15 0 -2 +BITMAP +47BC +2084 +24A4 +0294 +04A4 +E050 +2188 +2626 +20C0 +2310 +2064 +2B88 +3030 +20C0 +0700 +ENDCHAR +STARTCHAR uni8C2D +ENCODING 35885 +BBX 15 15 0 -2 +BITMAP +23FE +1050 +13FE +0252 +03FE +F000 +11FC +1104 +11FC +1104 +15FC +1820 +13FE +0020 +0020 +ENDCHAR +STARTCHAR uni8C2E +ENCODING 35886 +BBX 15 15 0 -2 +BITMAP +47BC +2108 +2528 +07BC +0318 +E5AA +2946 +2000 +23F8 +2208 +2208 +2BF8 +3208 +2208 +03F8 +ENDCHAR +STARTCHAR uni8C2F +ENCODING 35887 +BBX 15 16 0 -2 +BITMAP +0140 +4120 +23FE +2220 +0620 +0BFC +E220 +2220 +23FC +2220 +2220 +2BFE +3200 +2524 +0492 +0892 +ENDCHAR +STARTCHAR uni8C30 +ENCODING 35888 +BBX 14 16 0 -2 +BITMAP +0200 +417C +2504 +2444 +05F4 +0444 +E5F4 +2554 +2574 +25D4 +2554 +25F4 +2CE4 +3554 +2444 +044C +ENDCHAR +STARTCHAR uni8C31 +ENCODING 35889 +BBX 15 16 0 -2 +BITMAP +0208 +4110 +27FC +20A0 +04A4 +02A8 +EFFE +2000 +23F8 +2208 +2208 +23F8 +2A08 +3208 +23F8 +0208 +ENDCHAR +STARTCHAR uni8C32 +ENCODING 35890 +BBX 14 15 0 -2 +BITMAP +47F8 +2090 +2060 +07FC +00A4 +E128 +26A0 +2040 +27FC +24A4 +2514 +2EEC +34A4 +24E4 +040C +ENDCHAR +STARTCHAR uni8C33 +ENCODING 35891 +BBX 15 16 0 -2 +BITMAP +0108 +4108 +27CC +210A +0108 +07DE +E448 +26C8 +2548 +27C8 +2554 +27D4 +2D54 +3554 +2454 +04E2 +ENDCHAR +STARTCHAR uni8C34 +ENCODING 35892 +BBX 15 16 0 -2 +BITMAP +0010 +44FE +2292 +22FE +0010 +01FE +E000 +2EFE +2282 +22FE +2280 +22FE +2A82 +32FE +2500 +08FE +ENDCHAR +STARTCHAR uni8C35 +ENCODING 35893 +BBX 15 16 0 -2 +BITMAP +0200 +43F8 +2410 +27FE +0D48 +1624 +E7FE +2400 +25FC +2400 +25FC +2C00 +35FC +2904 +09FC +1104 +ENDCHAR +STARTCHAR uni8C36 +ENCODING 35894 +BBX 15 16 0 -2 +BITMAP +0448 +444C +2AAA +2008 +0FFE +0288 +EEE8 +228A +2EEA +228C +2EEC +2A88 +32EA +2F1A +0426 +0042 +ENDCHAR +STARTCHAR uni8C37 +ENCODING 35895 +BBX 15 15 1 -1 +BITMAP +0440 +0820 +1010 +610C +0280 +0440 +1830 +E00E +0000 +1FF0 +1010 +1010 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni8C38 +ENCODING 35896 +BBX 15 16 0 -2 +BITMAP +0888 +1C84 +F102 +1222 +1020 +1050 +FC88 +1104 +1202 +11FC +1104 +1104 +2104 +2104 +41FC +8104 +ENDCHAR +STARTCHAR uni8C39 +ENCODING 35897 +BBX 15 15 1 -1 +BITMAP +2820 +2820 +4420 +82FE +1020 +1020 +2840 +4450 +8290 +7C90 +4524 +4624 +4444 +447A +7DC2 +ENDCHAR +STARTCHAR uni8C3A +ENCODING 35898 +BBX 15 15 1 -1 +BITMAP +2800 +28FC +4408 +8248 +1048 +1088 +28FE +4528 +8228 +0048 +7C48 +4488 +4508 +4408 +7C38 +ENDCHAR +STARTCHAR uni8C3B +ENCODING 35899 +BBX 15 15 0 -2 +BITMAP +25F8 +2248 +4A48 +8848 +15F8 +2248 +4148 +BC48 +25F8 +2448 +2448 +248A +3C8A +250A +0206 +ENDCHAR +STARTCHAR uni8C3C +ENCODING 35900 +BBX 15 16 0 -2 +BITMAP +0048 +2448 +2248 +4A48 +89FE +1448 +2248 +4148 +BC48 +25FE +2400 +2448 +2444 +3C84 +2482 +0102 +ENDCHAR +STARTCHAR uni8C3D +ENCODING 35901 +BBX 15 15 1 -1 +BITMAP +2810 +2810 +4428 +8244 +10BA +1000 +287C +4404 +8208 +7C10 +447C +4444 +4444 +4444 +7C7C +ENDCHAR +STARTCHAR uni8C3E +ENCODING 35902 +BBX 15 15 0 -1 +BITMAP +0040 +4820 +45FE +9502 +1204 +2850 +4488 +8104 +7800 +49FC +4820 +4820 +4820 +7820 +4BFE +ENDCHAR +STARTCHAR uni8C3F +ENCODING 35903 +BBX 15 15 1 -1 +BITMAP +0644 +7A44 +9144 +8882 +2010 +4410 +2828 +1244 +2D82 +F100 +107C +FF44 +1444 +2244 +C17C +ENDCHAR +STARTCHAR uni8C40 +ENCODING 35904 +BBX 15 16 0 -2 +BITMAP +001E +4BE0 +4522 +9494 +1040 +2888 +45F0 +8020 +78C4 +49FE +4822 +4820 +4BFE +7850 +4888 +0306 +ENDCHAR +STARTCHAR uni8C41 +ENCODING 35905 +BBX 15 15 1 -1 +BITMAP +1050 +1050 +FE88 +9304 +7C20 +1020 +7C50 +1088 +FF04 +00FA +7C88 +4488 +4488 +4488 +7CF8 +ENDCHAR +STARTCHAR uni8C42 +ENCODING 35906 +BBX 15 15 0 -2 +BITMAP +24EE +2222 +4AAA +8866 +14AA +2210 +4128 +BC44 +2592 +2420 +24C8 +2432 +3CC4 +2418 +00E0 +ENDCHAR +STARTCHAR uni8C43 +ENCODING 35907 +BBX 15 16 0 -2 +BITMAP +0008 +5388 +4888 +8910 +27DE +3294 +4AA4 +8794 +7A94 +4B94 +4A94 +4AC8 +4B88 +7E94 +48A4 +00C2 +ENDCHAR +STARTCHAR uni8C44 +ENCODING 35908 +BBX 15 16 0 -2 +BITMAP +0020 +4BFE +4420 +95FC +1000 +2BFE +4652 +83FE +7904 +49FC +4904 +49FC +4904 +79FC +4888 +0104 +ENDCHAR +STARTCHAR uni8C45 +ENCODING 35909 +BBX 15 15 1 -1 +BITMAP +2890 +2890 +47FE +8550 +115E +13E2 +281E +47D0 +825E +7BD0 +4A5E +4BD0 +4A5C +4A52 +7ACE +ENDCHAR +STARTCHAR uni8C46 +ENCODING 35910 +BBX 15 14 1 -1 +BITMAP +7FFC +0000 +0000 +1FF0 +1010 +1010 +1010 +1FF0 +0000 +0810 +0410 +0420 +0020 +FFFE +ENDCHAR +STARTCHAR uni8C47 +ENCODING 35911 +BBX 15 14 1 -1 +BITMAP +FE00 +01FC +7C20 +4420 +4420 +4420 +7C20 +0020 +4420 +2420 +2820 +0C20 +31FE +C000 +ENDCHAR +STARTCHAR uni8C48 +ENCODING 35912 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +0820 +0420 +0440 +FFFE +ENDCHAR +STARTCHAR uni8C49 +ENCODING 35913 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +0020 +7DFC +4420 +4420 +45F8 +7C88 +0088 +4450 +4450 +2820 +2050 +3C88 +C306 +ENDCHAR +STARTCHAR uni8C4A +ENCODING 35914 +BBX 15 15 1 -1 +BITMAP +0440 +3FF8 +2448 +3FF8 +2448 +3FF8 +0000 +FFFE +0000 +1FF0 +1010 +1FF0 +0820 +0440 +FFFE +ENDCHAR +STARTCHAR uni8C4B +ENCODING 35915 +BBX 15 15 0 -1 +BITMAP +1080 +1080 +3EFC +6244 +9448 +4830 +3010 +2FE8 +C006 +1FF0 +1010 +1FF0 +0820 +0440 +FFFE +ENDCHAR +STARTCHAR uni8C4C +ENCODING 35916 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +03FE +7A02 +4A02 +4900 +49DE +7952 +0152 +4A52 +49D6 +2890 +2092 +3912 +C60E +ENDCHAR +STARTCHAR uni8C4D +ENCODING 35917 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +00FE +0092 +7C92 +44FE +4492 +44A2 +7CFE +0048 +4488 +29FE +2E08 +F008 +4008 +0008 +ENDCHAR +STARTCHAR uni8C4E +ENCODING 35918 +BBX 15 15 1 -1 +BITMAP +FEFC +9044 +FC44 +8428 +FC10 +9028 +FEC6 +0000 +FFFE +0000 +1FF0 +1010 +1FF0 +0440 +FFFE +ENDCHAR +STARTCHAR uni8C4F +ENCODING 35919 +BBX 15 15 1 -1 +BITMAP +0044 +FC88 +03FE +7890 +4BFC +4894 +4BFE +7894 +0094 +4BFC +4890 +2998 +2A94 +3C92 +C090 +ENDCHAR +STARTCHAR uni8C50 +ENCODING 35920 +BBX 15 15 1 -1 +BITMAP +4924 +5D74 +4924 +5D74 +4924 +7FFC +0000 +7FFC +0000 +1FF0 +1010 +1FF0 +0820 +0440 +FFFE +ENDCHAR +STARTCHAR uni8C51 +ENCODING 35921 +BBX 15 16 0 -2 +BITMAP +2844 +FE28 +AA00 +FEFC +AA14 +FE14 +00FC +FE90 +0090 +7CFE +4432 +7C32 +445A +2854 +1E90 +E110 +ENDCHAR +STARTCHAR uni8C52 +ENCODING 35922 +BBX 15 16 0 -2 +BITMAP +2A22 +7F14 +AABE +FF8A +AA8A +FFBE +AAA8 +FFA8 +003E +FF9A +001A +7F2A +412E +7F48 +2208 +FF88 +ENDCHAR +STARTCHAR uni8C53 +ENCODING 35923 +BBX 15 16 0 -2 +BITMAP +2A10 +7F10 +AA90 +FFBC +AA90 +FFA8 +AAA8 +FFA4 +0054 +FF82 +007C +7F54 +4154 +7F54 +2254 +FFFE +ENDCHAR +STARTCHAR uni8C54 +ENCODING 35924 +BBX 15 15 1 -1 +BITMAP +5510 +5510 +7F7C +5510 +7FFE +5528 +7F4C +00F2 +FF00 +00FE +7EAA +42AA +7EAA +24AA +FFFE +ENDCHAR +STARTCHAR uni8C55 +ENCODING 35925 +BBX 15 14 1 -1 +BITMAP +FFFE +0100 +0204 +0404 +1A08 +E310 +0520 +1880 +E180 +02C0 +0CA0 +3098 +C086 +0700 +ENDCHAR +STARTCHAR uni8C56 +ENCODING 35926 +BBX 15 15 0 -2 +BITMAP +7FFC +0200 +0600 +0908 +1190 +62A0 +14C0 +08C0 +15A0 +6290 +0488 +0886 +3080 +C280 +0100 +ENDCHAR +STARTCHAR uni8C57 +ENCODING 35927 +BBX 15 14 1 -1 +BITMAP +FC00 +2BF8 +2840 +2888 +2988 +2A50 +28A0 +2920 +2A70 +28A8 +2924 +4A20 +48C2 +87FE +ENDCHAR +STARTCHAR uni8C58 +ENCODING 35928 +BBX 15 16 0 -2 +BITMAP +0020 +FC20 +1020 +23FE +6020 +9524 +3924 +5124 +9924 +35FC +5424 +9020 +1022 +1022 +501E +2000 +ENDCHAR +STARTCHAR uni8C59 +ENCODING 35929 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +3FF8 +0820 +0440 +FFFE +0200 +0D08 +7190 +02A0 +0CC0 +71A0 +0698 +1886 +E280 +0100 +ENDCHAR +STARTCHAR uni8C5A +ENCODING 35930 +BBX 15 14 1 -1 +BITMAP +7BFC +4880 +4880 +4944 +7E48 +48A8 +4920 +4E20 +7870 +48B0 +4928 +4E24 +8822 +B8C0 +ENDCHAR +STARTCHAR uni8C5B +ENCODING 35931 +BBX 15 15 0 -2 +BITMAP +FCF8 +1088 +2088 +6088 +9506 +3A00 +51FC +9884 +3484 +5448 +9050 +1020 +1050 +5088 +2306 +ENDCHAR +STARTCHAR uni8C5C +ENCODING 35932 +BBX 15 15 0 -2 +BITMAP +FDFE +1048 +2048 +6048 +9448 +3848 +53FE +9848 +3448 +5448 +9048 +1088 +1088 +5108 +2208 +ENDCHAR +STARTCHAR uni8C5D +ENCODING 35933 +BBX 15 15 0 -2 +BITMAP +FDFC +1124 +2124 +6124 +9524 +3924 +51FC +9904 +3500 +5500 +9100 +1102 +1102 +50FE +2000 +ENDCHAR +STARTCHAR uni8C5E +ENCODING 35934 +BBX 14 16 0 -2 +BITMAP +0040 +FE40 +0880 +10FC +3104 +4A04 +9CF4 +2894 +4C94 +9A94 +2AF4 +4894 +8804 +0804 +2828 +1010 +ENDCHAR +STARTCHAR uni8C5F +ENCODING 35935 +BBX 15 16 0 -2 +BITMAP +0040 +FC20 +11FC +2104 +6104 +95FC +3900 +5100 +997C +3508 +5510 +9120 +1142 +1282 +527E +2400 +ENDCHAR +STARTCHAR uni8C60 +ENCODING 35936 +BBX 15 15 0 -2 +BITMAP +FEF8 +0888 +1088 +3088 +4AF8 +9C88 +2888 +4C88 +9AF8 +2A88 +4888 +8888 +0888 +2BFE +1000 +ENDCHAR +STARTCHAR uni8C61 +ENCODING 35937 +BBX 15 15 1 -1 +BITMAP +0400 +0FE0 +1080 +7FF0 +1110 +1110 +1FF0 +0384 +7CC8 +0350 +3CC0 +0160 +0E58 +F086 +0300 +ENDCHAR +STARTCHAR uni8C62 +ENCODING 35938 +BBX 15 15 1 -1 +BITMAP +0540 +0920 +3FF8 +0280 +FFFE +0440 +0820 +3FF8 +C606 +3908 +07B0 +38C0 +07B0 +788E +0380 +ENDCHAR +STARTCHAR uni8C63 +ENCODING 35939 +BBX 15 15 0 -2 +BITMAP +FDDC +1088 +2088 +6088 +9488 +3888 +53DE +9888 +3488 +5488 +9088 +1088 +1108 +5108 +2208 +ENDCHAR +STARTCHAR uni8C64 +ENCODING 35940 +BBX 15 15 0 -2 +BITMAP +FDF8 +1108 +2108 +61F8 +9508 +3908 +51F8 +9944 +3548 +5530 +9120 +1110 +1148 +5186 +2100 +ENDCHAR +STARTCHAR uni8C65 +ENCODING 35941 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +0810 +11FE +3020 +4A24 +9C44 +28F8 +4C12 +9A22 +2A44 +4988 +8810 +0828 +2844 +1182 +ENDCHAR +STARTCHAR uni8C66 +ENCODING 35942 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFE +2102 +21F0 +2F04 +20FC +2000 +2FF8 +2300 +2C90 +2360 +5CD8 +4346 +9CC0 +ENDCHAR +STARTCHAR uni8C67 +ENCODING 35943 +BBX 15 16 0 -2 +BITMAP +0028 +FC24 +13FE +2020 +6020 +95FC +3924 +5124 +99FC +3524 +5524 +91FC +1124 +1124 +5124 +210C +ENDCHAR +STARTCHAR uni8C68 +ENCODING 35944 +BBX 15 15 1 -1 +BITMAP +0008 +FC88 +1050 +1470 +258C +D440 +1BFE +2880 +C920 +1DFC +2B24 +CD24 +0924 +112C +6020 +ENDCHAR +STARTCHAR uni8C69 +ENCODING 35945 +BBX 15 14 1 -1 +BITMAP +FDFC +1020 +1224 +2244 +D5A8 +1830 +2850 +CD98 +1A34 +1852 +2890 +CB10 +1020 +60C0 +ENDCHAR +STARTCHAR uni8C6A +ENCODING 35946 +BBX 14 15 2 -1 +BITMAP +0200 +0200 +FFF8 +1040 +1FC0 +0000 +FFF8 +8008 +BFE8 +0710 +7B20 +0CC0 +F3B0 +0C8C +7300 +ENDCHAR +STARTCHAR uni8C6B +ENCODING 35947 +BBX 15 15 1 -1 +BITMAP +0080 +F8F8 +0F10 +53FC +2244 +2244 +FFFC +24C2 +2924 +2654 +21B0 +2658 +2194 +2E22 +60C0 +ENDCHAR +STARTCHAR uni8C6C +ENCODING 35948 +BBX 15 15 1 -1 +BITMAP +0044 +FE44 +11FC +1248 +2248 +D450 +2BFE +4828 +9C7C +2A84 +4984 +8AFC +0884 +0884 +30FC +ENDCHAR +STARTCHAR uni8C6D +ENCODING 35949 +BBX 15 14 1 -1 +BITMAP +FBDE +1242 +2242 +4642 +ABDE +3200 +523E +9BD2 +3612 +5214 +93D4 +1208 +2214 +C262 +ENDCHAR +STARTCHAR uni8C6E +ENCODING 35950 +BBX 15 16 0 -2 +BITMAP +0020 +FDFC +1020 +2088 +63FE +9488 +3800 +51FC +9904 +3524 +5524 +9124 +1124 +1050 +5088 +2304 +ENDCHAR +STARTCHAR uni8C6F +ENCODING 35951 +BBX 15 16 0 -2 +BITMAP +000E +FEF0 +0822 +1092 +3044 +4A20 +9C44 +28F8 +4C10 +9A24 +2AFE +4810 +88FE +0828 +2844 +1082 +ENDCHAR +STARTCHAR uni8C70 +ENCODING 35952 +BBX 15 16 0 -2 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FE86 +8200 +7CFC +0044 +FE44 +2028 +5428 +2810 +DC28 +2A44 +D982 +ENDCHAR +STARTCHAR uni8C71 +ENCODING 35953 +BBX 15 15 0 -2 +BITMAP +FCF8 +1088 +2088 +60F8 +9488 +3888 +50F8 +9800 +35FC +5554 +9154 +1154 +1154 +53FE +2000 +ENDCHAR +STARTCHAR uni8C72 +ENCODING 35954 +BBX 15 15 0 -2 +BITMAP +FDFE +1110 +2120 +617C +9544 +397C +5144 +997C +3510 +5510 +9154 +1152 +1292 +5250 +2420 +ENDCHAR +STARTCHAR uni8C73 +ENCODING 35955 +BBX 13 14 2 -1 +BITMAP +0200 +8208 +FEF8 +9248 +A288 +D758 +AAA8 +CB28 +9E78 +AAA8 +CB28 +9A68 +8208 +FFF8 +ENDCHAR +STARTCHAR uni8C74 +ENCODING 35956 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +08FE +1044 +3028 +4AFE +9C82 +2892 +4CFE +9A92 +2ABA +48AA +88AA +08BA +2882 +1086 +ENDCHAR +STARTCHAR uni8C75 +ENCODING 35957 +BBX 15 16 0 -2 +BITMAP +0124 +F924 +2224 +44A4 +A154 +154A +3B92 +5508 +9908 +3528 +512E +9128 +1128 +1158 +514E +2180 +ENDCHAR +STARTCHAR uni8C76 +ENCODING 35958 +BBX 15 16 0 -2 +BITMAP +0020 +FDFC +1020 +2088 +63FE +9488 +39FC +5104 +99FC +3504 +55FC +9104 +11FC +1088 +5104 +2202 +ENDCHAR +STARTCHAR uni8C77 +ENCODING 35959 +BBX 15 16 0 -2 +BITMAP +0020 +FBFE +2020 +41FC +A000 +17FE +3A02 +51FC +9800 +35FC +5104 +91FC +1104 +1088 +53FE +2000 +ENDCHAR +STARTCHAR uni8C78 +ENCODING 35960 +BBX 12 15 2 -1 +BITMAP +0380 +7E00 +1130 +09C0 +0F00 +F900 +0380 +0480 +19C0 +E240 +0440 +1840 +E040 +0080 +0700 +ENDCHAR +STARTCHAR uni8C79 +ENCODING 35961 +BBX 14 15 1 -1 +BITMAP +0840 +3240 +CC40 +28FC +3084 +C904 +1A04 +2404 +CCF4 +1404 +2404 +C404 +0408 +0808 +3070 +ENDCHAR +STARTCHAR uni8C7A +ENCODING 35962 +BBX 15 15 1 -1 +BITMAP +0808 +3008 +CA08 +2408 +0BFE +3028 +C828 +0828 +3448 +C448 +0C88 +3508 +C408 +0808 +3038 +ENDCHAR +STARTCHAR uni8C7B +ENCODING 35963 +BBX 15 16 0 -2 +BITMAP +0C00 +30FC +C220 +1420 +4820 +3020 +C820 +15FE +2420 +CC20 +1420 +2420 +C420 +0420 +2820 +1020 +ENDCHAR +STARTCHAR uni8C7C +ENCODING 35964 +BBX 15 15 1 -1 +BITMAP +0910 +3110 +CB10 +2510 +0912 +31DC +C910 +0910 +3510 +C510 +0D10 +3510 +C512 +09D2 +370E +ENDCHAR +STARTCHAR uni8C7D +ENCODING 35965 +BBX 15 16 0 -2 +BITMAP +0C20 +3020 +C220 +15FE +4922 +3122 +C922 +1522 +2552 +CD4A +158A +2502 +C502 +0502 +290A +1104 +ENDCHAR +STARTCHAR uni8C7E +ENCODING 35966 +BBX 15 16 0 -2 +BITMAP +0C00 +31FE +C210 +1410 +4820 +3020 +C868 +14A4 +2522 +CE22 +1420 +2420 +C420 +0400 +2BFE +1000 +ENDCHAR +STARTCHAR uni8C7F +ENCODING 35967 +BBX 14 16 0 -2 +BITMAP +0C80 +3080 +C280 +15FC +4904 +3204 +C9E4 +1524 +2524 +CD24 +1524 +25E4 +C524 +0404 +2828 +1010 +ENDCHAR +STARTCHAR uni8C80 +ENCODING 35968 +BBX 14 16 0 -2 +BITMAP +0C20 +3020 +C324 +1524 +4924 +3124 +C9FC +1420 +2420 +CD24 +1524 +2524 +C524 +0524 +29FC +1004 +ENDCHAR +STARTCHAR uni8C81 +ENCODING 35969 +BBX 15 16 0 -2 +BITMAP +1040 +2020 +D420 +0BFE +5202 +2404 +D000 +1890 +2890 +C890 +1888 +2908 +C908 +0904 +5204 +2402 +ENDCHAR +STARTCHAR uni8C82 +ENCODING 35970 +BBX 15 15 1 -1 +BITMAP +0800 +31FE +CA22 +2422 +0842 +3042 +C882 +090C +3400 +C4FC +0C84 +3484 +C484 +0884 +30FC +ENDCHAR +STARTCHAR uni8C83 +ENCODING 35971 +BBX 14 16 0 -2 +BITMAP +0C20 +3020 +C240 +15FC +4904 +3104 +C904 +1504 +25FC +CD04 +1504 +2504 +C504 +0504 +29FC +1104 +ENDCHAR +STARTCHAR uni8C84 +ENCODING 35972 +BBX 15 16 0 -2 +BITMAP +0C20 +3020 +C3FC +1424 +4BFE +3024 +C9FC +1420 +2420 +CDFC +1420 +2420 +C7FE +0420 +2820 +1020 +ENDCHAR +STARTCHAR uni8C85 +ENCODING 35973 +BBX 15 15 1 -1 +BITMAP +0890 +3090 +CA90 +2490 +09FE +3110 +CB10 +0938 +3538 +C554 +0D54 +3592 +C510 +0910 +3110 +ENDCHAR +STARTCHAR uni8C86 +ENCODING 35974 +BBX 15 16 0 -2 +BITMAP +0C00 +31FE +C200 +1400 +48FC +3084 +C884 +14FC +2484 +CC84 +14FC +2484 +C400 +0400 +29FE +1000 +ENDCHAR +STARTCHAR uni8C87 +ENCODING 35975 +BBX 15 16 0 -2 +BITMAP +0C00 +31F8 +C308 +1508 +49F8 +3108 +C908 +15F8 +2544 +CD48 +1530 +2520 +C510 +0548 +2986 +1100 +ENDCHAR +STARTCHAR uni8C88 +ENCODING 35976 +BBX 15 16 0 -2 +BITMAP +0C10 +3020 +C2FC +1484 +48A4 +3094 +C894 +15FE +2484 +CCA4 +1494 +2494 +C484 +0504 +2914 +1208 +ENDCHAR +STARTCHAR uni8C89 +ENCODING 35977 +BBX 15 15 1 -1 +BITMAP +0840 +3040 +CAFC +2504 +0A88 +3050 +C820 +08D8 +3706 +C4FC +0C84 +3484 +C484 +0884 +30FC +ENDCHAR +STARTCHAR uni8C8A +ENCODING 35978 +BBX 15 15 1 -1 +BITMAP +0800 +33FE +CA40 +2440 +0880 +31FC +C904 +0904 +3504 +C5FC +0D04 +3504 +C504 +0904 +31FC +ENDCHAR +STARTCHAR uni8C8B +ENCODING 35979 +BBX 15 16 0 -2 +BITMAP +0C00 +31FC +C304 +15FC +4904 +31FC +C800 +1400 +25FC +CC20 +1420 +27FE +C420 +0420 +2820 +1020 +ENDCHAR +STARTCHAR uni8C8C +ENCODING 35980 +BBX 15 15 1 -1 +BITMAP +2040 +5440 +89FC +5104 +2104 +51FC +9104 +2904 +49FC +9890 +2890 +4890 +8892 +1112 +620E +ENDCHAR +STARTCHAR uni8C8D +ENCODING 35981 +BBX 15 15 1 -1 +BITMAP +0800 +31FC +CB24 +2524 +09FC +3124 +C924 +09FC +3420 +C420 +0CF8 +3420 +C420 +0820 +33FE +ENDCHAR +STARTCHAR uni8C8E +ENCODING 35982 +BBX 15 15 1 -1 +BITMAP +0820 +3040 +CB8C +2504 +0904 +31DC +C904 +0904 +35FC +C490 +0C90 +3490 +C492 +0912 +320E +ENDCHAR +STARTCHAR uni8C8F +ENCODING 35983 +BBX 15 16 0 -2 +BITMAP +1040 +2080 +D5FC +0924 +5124 +21FC +D124 +1944 +29FC +C890 +1910 +2BFE +C810 +0810 +5010 +2010 +ENDCHAR +STARTCHAR uni8C90 +ENCODING 35984 +BBX 15 16 0 -2 +BITMAP +1040 +20A0 +D510 +0A08 +55F6 +2000 +D3C4 +1A54 +2A54 +CBD4 +1A54 +2A54 +CBD4 +0A44 +5254 +22C8 +ENDCHAR +STARTCHAR uni8C91 +ENCODING 35985 +BBX 15 16 0 -2 +BITMAP +1000 +23DE +D642 +0A42 +5242 +23DE +D200 +1A3E +2BD2 +CA12 +1A14 +2BD4 +CA08 +0A14 +5224 +2242 +ENDCHAR +STARTCHAR uni8C92 +ENCODING 35986 +BBX 15 15 1 -1 +BITMAP +0820 +3222 +CA22 +27FE +0800 +33FE +C820 +1840 +25FE +CD52 +1552 +2552 +C552 +0952 +3156 +ENDCHAR +STARTCHAR uni8C93 +ENCODING 35987 +BBX 15 15 1 -1 +BITMAP +0888 +3088 +CBFE +2488 +0888 +3000 +C9FC +1924 +2524 +CD24 +15FC +2524 +C524 +0924 +31FC +ENDCHAR +STARTCHAR uni8C94 +ENCODING 35988 +BBX 15 15 1 -1 +BITMAP +0820 +3040 +CBFC +2514 +0954 +3124 +C9D4 +0904 +35FC +C400 +0D12 +35DC +C510 +09D2 +330E +ENDCHAR +STARTCHAR uni8C95 +ENCODING 35989 +BBX 15 16 0 -2 +BITMAP +101E +23E0 +D522 +0894 +5040 +2088 +D1F0 +1820 +28C4 +C9FE +1822 +2820 +CBFE +0850 +5088 +2306 +ENDCHAR +STARTCHAR uni8C96 +ENCODING 35990 +BBX 15 16 0 -2 +BITMAP +1104 +2084 +D488 +0800 +53FE +2000 +D088 +1904 +2A02 +C9FC +1954 +2954 +C954 +0954 +57FE +2000 +ENDCHAR +STARTCHAR uni8C97 +ENCODING 35991 +BBX 15 16 0 -2 +BITMAP +1020 +21FC +D524 +0BFE +5124 +21FC +D020 +19FC +2924 +C9FC +1840 +2BFE +C888 +09D0 +5070 +238C +ENDCHAR +STARTCHAR uni8C98 +ENCODING 35992 +BBX 15 15 1 -1 +BITMAP +1088 +2088 +57FE +8888 +51FC +2104 +D1FC +1104 +2904 +C9FC +1820 +2BFE +C850 +1088 +6306 +ENDCHAR +STARTCHAR uni8C99 +ENCODING 35993 +BBX 15 15 1 -1 +BITMAP +1000 +23FC +D200 +4A78 +1248 +2248 +D278 +3200 +4AEE +9AAA +2AAA +4AAA +8AEE +1200 +63FE +ENDCHAR +STARTCHAR uni8C9A +ENCODING 35994 +BBX 15 16 0 -2 +BITMAP +1000 +23DE +D652 +0A52 +53DE +2000 +D1FC +1924 +29FC +C924 +19FC +2820 +CBFE +0820 +5020 +2020 +ENDCHAR +STARTCHAR uni8C9B +ENCODING 35995 +BBX 15 15 1 -1 +BITMAP +0888 +33FE +CA88 +25DC +0954 +31DC +C888 +19FC +2710 +CDFC +1510 +25FC +C510 +0910 +31FE +ENDCHAR +STARTCHAR uni8C9C +ENCODING 35996 +BBX 15 16 0 -2 +BITMAP +13DE +2252 +D7DE +0A52 +53DE +20A0 +D1FE +1B20 +2DFC +C920 +19FE +2800 +C9FC +0888 +5070 +278E +ENDCHAR +STARTCHAR uni8C9D +ENCODING 35997 +BBX 14 14 1 -1 +BITMAP +1FE0 +1020 +1020 +1FE0 +1020 +1020 +1FE0 +1020 +1020 +1020 +1FE0 +0C00 +3030 +C00C +ENDCHAR +STARTCHAR uni8C9E +ENCODING 35998 +BBX 14 15 1 -1 +BITMAP +0200 +03F8 +0200 +3FF0 +2010 +2010 +3FF0 +2010 +2010 +3FF0 +2010 +2010 +3FF0 +1020 +E01C +ENDCHAR +STARTCHAR uni8C9F +ENCODING 35999 +BBX 13 16 1 -2 +BITMAP +1000 +2020 +4010 +FFF8 +4008 +0000 +7FF0 +4010 +7FF0 +4010 +7FF0 +4010 +7FF0 +1040 +2020 +4010 +ENDCHAR +STARTCHAR uni8CA0 +ENCODING 36000 +BBX 13 15 2 -1 +BITMAP +0400 +0FC0 +3080 +C100 +3FE0 +2020 +3FE0 +2020 +2020 +3FE0 +2020 +2020 +3FE0 +1040 +E038 +ENDCHAR +STARTCHAR uni8CA1 +ENCODING 36001 +BBX 15 15 1 -1 +BITMAP +0008 +7C08 +4408 +4408 +7DFE +4418 +4418 +7C28 +4428 +4448 +4488 +7D08 +2008 +4808 +8438 +ENDCHAR +STARTCHAR uni8CA2 +ENCODING 36002 +BBX 13 14 2 -1 +BITMAP +3FE0 +0200 +0200 +FFF8 +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +3060 +C018 +ENDCHAR +STARTCHAR uni8CA3 +ENCODING 36003 +BBX 15 16 0 -2 +BITMAP +0420 +0210 +013E +FFC0 +0022 +001A +3FF6 +2010 +3FF0 +2010 +3FF0 +2010 +3FF0 +0840 +1020 +2010 +ENDCHAR +STARTCHAR uni8CA4 +ENCODING 36004 +BBX 15 15 1 -1 +BITMAP +0020 +7D20 +4520 +4520 +7D2C +4574 +45A4 +7F24 +4524 +4524 +452C +7D20 +2902 +4502 +84FE +ENDCHAR +STARTCHAR uni8CA5 +ENCODING 36005 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +4400 +45FC +7C00 +4400 +44F0 +7C90 +4490 +4490 +7C90 +0092 +2892 +2512 +450E +8200 +ENDCHAR +STARTCHAR uni8CA6 +ENCODING 36006 +BBX 15 15 0 -2 +BITMAP +7C00 +45FC +4400 +7C00 +4400 +47FE +7C90 +4490 +4490 +7C90 +0090 +2892 +2512 +4512 +820E +ENDCHAR +STARTCHAR uni8CA7 +ENCODING 36007 +BBX 15 15 1 -1 +BITMAP +00C0 +0420 +0810 +3FF8 +C226 +0420 +18C0 +6000 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uni8CA8 +ENCODING 36008 +BBX 15 15 1 -1 +BITMAP +0440 +084E +3870 +C842 +083E +0000 +1FF8 +1008 +1FF8 +1008 +1FF8 +1008 +1FF8 +0810 +700E +ENDCHAR +STARTCHAR uni8CA9 +ENCODING 36009 +BBX 15 14 1 -1 +BITMAP +79FE +4900 +4900 +7900 +49FC +4944 +7944 +4944 +4928 +4928 +7910 +2228 +4A44 +8482 +ENDCHAR +STARTCHAR uni8CAA +ENCODING 36010 +BBX 15 15 1 -1 +BITMAP +0380 +0C60 +F39E +0000 +1FF0 +0040 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uni8CAB +ENCODING 36011 +BBX 13 14 2 -1 +BITMAP +3FE0 +2220 +FFF8 +2220 +3FE0 +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +E038 +ENDCHAR +STARTCHAR uni8CAC +ENCODING 36012 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +1FF0 +0100 +FFFE +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uni8CAD +ENCODING 36013 +BBX 15 15 1 -1 +BITMAP +00F8 +7F00 +4080 +7FFE +4080 +4FF8 +4808 +4FF8 +4808 +4FF8 +8808 +8808 +0FF8 +0810 +300C +ENDCHAR +STARTCHAR uni8CAE +ENCODING 36014 +BBX 15 15 1 -1 +BITMAP +0020 +3F28 +0024 +0020 +FFFE +0020 +3F20 +2120 +3F20 +2110 +3F10 +2110 +3F0A +120A +6184 +ENDCHAR +STARTCHAR uni8CAF +ENCODING 36015 +BBX 15 15 1 -1 +BITMAP +0010 +7C10 +45FE +4502 +7D02 +4400 +45FE +7C10 +4410 +4410 +4410 +7C10 +2810 +4410 +8270 +ENDCHAR +STARTCHAR uni8CB0 +ENCODING 36016 +BBX 14 15 1 -1 +BITMAP +2210 +2210 +FFFC +2210 +23F0 +2000 +3FF8 +0000 +3FF0 +2010 +3FF0 +2010 +3FF0 +1020 +E01C +ENDCHAR +STARTCHAR uni8CB1 +ENCODING 36017 +BBX 15 16 0 -2 +BITMAP +0010 +7810 +4810 +49FE +7912 +4914 +4910 +79FC +4944 +4944 +7928 +0128 +5110 +4A28 +8A44 +0482 +ENDCHAR +STARTCHAR uni8CB2 +ENCODING 36018 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +284C +2F70 +2842 +2842 +3FFE +F010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0C60 +701C +ENDCHAR +STARTCHAR uni8CB3 +ENCODING 36019 +BBX 15 15 1 -1 +BITMAP +0028 +0024 +FFFE +0020 +3F20 +0020 +FFE0 +2120 +3F20 +2110 +3F10 +2110 +3F0A +120A +6184 +ENDCHAR +STARTCHAR uni8CB4 +ENCODING 36020 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +3FE0 +2220 +3FE0 +0200 +FFF8 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +1040 +E038 +ENDCHAR +STARTCHAR uni8CB5 +ENCODING 36021 +BBX 15 16 0 -2 +BITMAP +0400 +0820 +1FF0 +0210 +FFFE +0820 +3018 +DFF6 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni8CB6 +ENCODING 36022 +BBX 15 15 1 -1 +BITMAP +001C +7DE0 +4400 +4420 +7C20 +4420 +45FC +7C04 +4408 +4408 +4410 +7D20 +22C0 +4A30 +840E +ENDCHAR +STARTCHAR uni8CB7 +ENCODING 36023 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +7FFC +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0800 +3018 +C006 +ENDCHAR +STARTCHAR uni8CB8 +ENCODING 36024 +BBX 15 15 1 -1 +BITMAP +0890 +1088 +30BC +D7C0 +1040 +1022 +3FFC +2010 +3FF0 +2010 +3FF0 +2010 +3FF0 +1020 +E01C +ENDCHAR +STARTCHAR uni8CB9 +ENCODING 36025 +BBX 15 16 0 -2 +BITMAP +0010 +7C10 +4490 +4490 +7CFE +4490 +4510 +7C10 +4410 +44FE +7C10 +0010 +2810 +2410 +45FE +8000 +ENDCHAR +STARTCHAR uni8CBA +ENCODING 36026 +BBX 15 15 0 -2 +BITMAP +7DFC +4504 +4504 +7D04 +4504 +45FC +7C50 +4450 +4450 +7C50 +0050 +2892 +2492 +450E +8200 +ENDCHAR +STARTCHAR uni8CBB +ENCODING 36027 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +FFFC +0444 +7FFC +4440 +7FFE +0842 +1FF6 +F010 +1FF0 +1010 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uni8CBC +ENCODING 36028 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +4420 +443E +7C20 +4420 +4420 +7C20 +45FC +4504 +4504 +7D04 +2104 +4904 +85FC +ENDCHAR +STARTCHAR uni8CBD +ENCODING 36029 +BBX 15 15 1 -1 +BITMAP +0040 +7C40 +4440 +4488 +7C84 +451A +47E2 +7C00 +4400 +45FC +4504 +7D04 +2104 +4904 +85FC +ENDCHAR +STARTCHAR uni8CBE +ENCODING 36030 +BBX 15 16 0 -2 +BITMAP +0004 +7C1E +45F0 +4510 +7D10 +4510 +4510 +7DFE +4510 +4510 +7D10 +0108 +290A +254A +45A6 +8112 +ENDCHAR +STARTCHAR uni8CBF +ENCODING 36031 +BBX 15 15 1 -1 +BITMAP +0600 +78FE +4022 +4422 +4E42 +728C +DFF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uni8CC0 +ENCODING 36032 +BBX 14 15 1 -1 +BITMAP +2000 +FEFC +2284 +4284 +8EFC +0000 +3FF0 +2010 +3FF0 +2010 +3FF0 +2010 +3FF0 +1860 +E01C +ENDCHAR +STARTCHAR uni8CC1 +ENCODING 36033 +BBX 15 15 1 -1 +BITMAP +0100 +1FF0 +0100 +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uni8CC2 +ENCODING 36034 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +48F8 +4908 +7A88 +4850 +4820 +7850 +4988 +4FFE +4908 +7908 +2108 +4908 +85F8 +ENDCHAR +STARTCHAR uni8CC3 +ENCODING 36035 +BBX 15 15 1 -1 +BITMAP +1018 +13E0 +2040 +6FFE +A040 +2040 +1FFC +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uni8CC4 +ENCODING 36036 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4BFE +4840 +7840 +48FC +4884 +7984 +4AFC +4884 +4884 +78FC +2084 +4884 +849C +ENDCHAR +STARTCHAR uni8CC5 +ENCODING 36037 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +4410 +45FE +7C20 +4424 +4444 +7CF8 +4412 +4422 +7C44 +0188 +2810 +2428 +4444 +8182 +ENDCHAR +STARTCHAR uni8CC6 +ENCODING 36038 +BBX 15 16 0 -2 +BITMAP +0082 +7C42 +4444 +4400 +7CFE +4444 +4444 +7C44 +4444 +45FE +7C44 +0044 +2884 +2484 +4504 +8204 +ENDCHAR +STARTCHAR uni8CC7 +ENCODING 36039 +BBX 14 15 1 -1 +BITMAP +0100 +C100 +33FC +0444 +00A8 +1120 +7FF0 +A01C +3FF0 +2010 +3FF0 +2010 +3FF0 +1020 +E01C +ENDCHAR +STARTCHAR uni8CC8 +ENCODING 36040 +BBX 15 15 1 -1 +BITMAP +FFFE +0440 +7FFC +4444 +7FFC +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1020 +6018 +ENDCHAR +STARTCHAR uni8CC9 +ENCODING 36041 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4440 +4480 +7DFC +4554 +4554 +7D54 +4554 +4554 +7D54 +0154 +2954 +2554 +47FE +8000 +ENDCHAR +STARTCHAR uni8CCA +ENCODING 36042 +BBX 15 15 1 -1 +BITMAP +0028 +7824 +4820 +4BFE +7820 +4920 +4924 +7924 +4FE4 +4928 +4910 +7910 +202A +484A +8584 +ENDCHAR +STARTCHAR uni8CCB +ENCODING 36043 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +4420 +45FE +7C00 +4488 +4504 +7E02 +4488 +4488 +7C50 +0050 +2820 +2450 +4488 +8306 +ENDCHAR +STARTCHAR uni8CCC +ENCODING 36044 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0840 +1F90 +0620 +38D0 +0708 +7FF4 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni8CCD +ENCODING 36045 +BBX 15 15 1 -1 +BITMAP +0010 +7810 +4810 +49FE +7900 +4910 +4910 +7910 +497C +4910 +4910 +7A10 +2210 +4810 +85FE +ENDCHAR +STARTCHAR uni8CCE +ENCODING 36046 +BBX 15 15 1 -1 +BITMAP +0050 +7848 +4BFC +4840 +7840 +4BFC +4840 +7840 +4FFE +4828 +4828 +7810 +2072 +4B8A +8404 +ENDCHAR +STARTCHAR uni8CCF +ENCODING 36047 +BBX 15 15 0 -2 +BITMAP +7CFC +4484 +4484 +7CFC +4484 +4484 +7CFC +4484 +4484 +7CFC +0000 +2848 +2444 +4482 +8102 +ENDCHAR +STARTCHAR uni8CD0 +ENCODING 36048 +BBX 15 16 0 -2 +BITMAP +0040 +7840 +4888 +4904 +7BFE +4802 +4888 +7944 +4A42 +48F8 +7988 +0250 +5020 +4850 +8988 +0606 +ENDCHAR +STARTCHAR uni8CD1 +ENCODING 36049 +BBX 15 14 1 -1 +BITMAP +7BFE +4A00 +4A00 +7AFC +4A00 +4A00 +7BFE +4A90 +4A92 +4A94 +7A88 +2288 +4AE4 +8582 +ENDCHAR +STARTCHAR uni8CD2 +ENCODING 36050 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4450 +4488 +7D04 +46FA +4400 +7C00 +47FE +4420 +7D28 +0124 +2A22 +2422 +44A0 +8040 +ENDCHAR +STARTCHAR uni8CD3 +ENCODING 36051 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +5FF4 +0920 +715C +0380 +1FF0 +F010 +1FF0 +1010 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uni8CD4 +ENCODING 36052 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4002 +BFFC +2108 +3FF8 +2000 +2FF8 +2808 +2FF8 +2808 +2FF8 +2808 +4FF8 +4410 +8808 +ENDCHAR +STARTCHAR uni8CD5 +ENCODING 36053 +BBX 15 15 1 -1 +BITMAP +0028 +7C24 +4424 +47FE +7C20 +4524 +44A4 +7CA8 +4420 +4420 +44B0 +7D28 +2A24 +4422 +84E0 +ENDCHAR +STARTCHAR uni8CD6 +ENCODING 36054 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +4450 +4488 +7D04 +46FA +4420 +7C20 +47FE +4420 +4524 +7D24 +2A22 +4422 +8460 +ENDCHAR +STARTCHAR uni8CD7 +ENCODING 36055 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +49FC +4924 +7924 +49FC +4820 +7820 +4BFE +4A22 +7A22 +03FE +5222 +4820 +8820 +0020 +ENDCHAR +STARTCHAR uni8CD8 +ENCODING 36056 +BBX 15 16 0 -2 +BITMAP +0020 +7810 +4810 +49FE +7900 +4910 +4910 +7910 +497C +4910 +7914 +0112 +5112 +4A10 +8AFE +0400 +ENDCHAR +STARTCHAR uni8CD9 +ENCODING 36057 +BBX 15 14 1 -1 +BITMAP +7DFE +4502 +4522 +7D7A +4522 +457A +7D22 +4502 +457A +454A +7D4A +297A +4602 +820E +ENDCHAR +STARTCHAR uni8CDA +ENCODING 36058 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +1110 +2928 +4BA4 +0540 +3FF8 +D016 +1FF0 +1010 +1FF0 +1010 +1FF0 +701C +ENDCHAR +STARTCHAR uni8CDB +ENCODING 36059 +BBX 14 15 1 -1 +BITMAP +1020 +FDFC +1020 +FDFC +2850 +4488 +BFF4 +2010 +3FF0 +2010 +3FF0 +2010 +3FF0 +1020 +E01C +ENDCHAR +STARTCHAR uni8CDC +ENCODING 36060 +BBX 15 14 1 -1 +BITMAP +79F8 +4908 +49F8 +7908 +4908 +49F8 +7880 +49FE +4E52 +4892 +7B22 +2044 +4984 +8418 +ENDCHAR +STARTCHAR uni8CDD +ENCODING 36061 +BBX 15 15 0 -2 +BITMAP +7BFE +4A02 +4A52 +7888 +4904 +4820 +7820 +4BFE +4820 +7870 +00A8 +5124 +4E22 +8820 +0020 +ENDCHAR +STARTCHAR uni8CDE +ENCODING 36062 +BBX 13 15 2 -1 +BITMAP +4210 +2220 +FFF8 +9048 +9FC8 +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +2020 +3FE0 +18C0 +E038 +ENDCHAR +STARTCHAR uni8CDF +ENCODING 36063 +BBX 15 16 0 -2 +BITMAP +0050 +7C50 +4450 +45FC +7D54 +4554 +4554 +7DFC +4554 +4554 +7D54 +03FE +2800 +2488 +4504 +8202 +ENDCHAR +STARTCHAR uni8CE0 +ENCODING 36064 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4BFC +4908 +7888 +4890 +4810 +7FFE +4800 +49F8 +4908 +7908 +2108 +4908 +85F8 +ENDCHAR +STARTCHAR uni8CE1 +ENCODING 36065 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFE +2080 +2FF8 +2088 +3FFE +2148 +2FF8 +2410 +2FF8 +7416 +47F0 +8220 +0C18 +ENDCHAR +STARTCHAR uni8CE2 +ENCODING 36066 +BBX 15 14 1 -1 +BITMAP +7EFC +4844 +7C44 +4428 +7C10 +4828 +7FF6 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +E01C +ENDCHAR +STARTCHAR uni8CE3 +ENCODING 36067 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0100 +3FF8 +0000 +7FFC +4444 +7FFC +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +701C +ENDCHAR +STARTCHAR uni8CE4 +ENCODING 36068 +BBX 15 15 1 -1 +BITMAP +0090 +7C88 +44FC +4780 +7C48 +4432 +47CC +7C10 +4488 +44FC +4780 +7C58 +2022 +48D2 +870C +ENDCHAR +STARTCHAR uni8CE5 +ENCODING 36069 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FE +4400 +7C88 +4488 +4554 +7E22 +4400 +4420 +7DFE +0020 +2820 +2420 +4420 +8020 +ENDCHAR +STARTCHAR uni8CE6 +ENCODING 36070 +BBX 15 15 1 -1 +BITMAP +0014 +7BD4 +4812 +4810 +7FFE +4890 +4890 +7A90 +4AF0 +4A90 +4A90 +7A88 +22EA +4B8A +8604 +ENDCHAR +STARTCHAR uni8CE7 +ENCODING 36071 +BBX 15 16 0 -2 +BITMAP +0020 +7CA2 +44A2 +4524 +7C50 +4488 +4704 +7C22 +4420 +44A4 +7CA4 +0128 +2850 +2488 +4504 +8202 +ENDCHAR +STARTCHAR uni8CE8 +ENCODING 36072 +BBX 13 16 1 -2 +BITMAP +0200 +FFF8 +8008 +3FE0 +0000 +FFF8 +2220 +4A10 +8408 +3FE0 +2020 +3FE0 +2020 +3FE0 +1040 +2020 +ENDCHAR +STARTCHAR uni8CE9 +ENCODING 36073 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4A02 +7800 +49FC +4800 +7800 +4BFE +4820 +7928 +0124 +5222 +4C22 +88A0 +0040 +ENDCHAR +STARTCHAR uni8CEA +ENCODING 36074 +BBX 14 15 1 -1 +BITMAP +0C18 +70E0 +4080 +7FFC +4890 +8910 +3FF0 +2010 +3FF0 +2010 +3FF0 +2010 +3FF0 +1020 +E01C +ENDCHAR +STARTCHAR uni8CEB +ENCODING 36075 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0920 +0920 +1550 +7FFE +4002 +9FF4 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni8CEC +ENCODING 36076 +BBX 15 15 0 -2 +BITMAP +7CFC +4480 +44F8 +7C80 +44F8 +4480 +7FFE +4540 +4524 +7D28 +0110 +2908 +2544 +4582 +8100 +ENDCHAR +STARTCHAR uni8CED +ENCODING 36077 +BBX 15 15 1 -1 +BITMAP +0040 +7848 +4BF8 +4848 +7850 +4850 +4FFE +7848 +49FC +4F04 +4904 +79FC +2104 +4904 +85FC +ENDCHAR +STARTCHAR uni8CEE +ENCODING 36078 +BBX 15 16 0 -2 +BITMAP +0100 +3FF8 +0108 +FFFE +0108 +3FF8 +0100 +7FFC +2488 +5FF4 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni8CEF +ENCODING 36079 +BBX 15 16 0 -2 +BITMAP +0100 +79FE +4A02 +4DF2 +7912 +49F2 +4912 +79FA +4804 +4BF8 +7810 +0020 +57FE +4820 +88A0 +0040 +ENDCHAR +STARTCHAR uni8CF0 +ENCODING 36080 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4BFC +4840 +79F8 +48A0 +4FFE +7890 +49F8 +4B0C +4D0A +79F8 +2908 +4508 +85F8 +ENDCHAR +STARTCHAR uni8CF1 +ENCODING 36081 +BBX 15 14 1 -1 +BITMAP +7BFE +4A02 +4A22 +79FC +4820 +49FC +7924 +49FC +4924 +49FC +7820 +2BFE +4420 +8420 +ENDCHAR +STARTCHAR uni8CF2 +ENCODING 36082 +BBX 14 16 0 -2 +BITMAP +13F8 +1208 +23F8 +6040 +A7FC +2150 +2248 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni8CF3 +ENCODING 36083 +BBX 15 16 0 -2 +BITMAP +0128 +7924 +4BA4 +4920 +7920 +4FFE +4820 +7824 +4BA4 +4AA8 +7AA8 +0290 +5392 +482A +8846 +0082 +ENDCHAR +STARTCHAR uni8CF4 +ENCODING 36084 +BBX 14 15 1 -1 +BITMAP +1000 +11FC +FE44 +1084 +1118 +7C00 +55F8 +5508 +7DF8 +1108 +39F8 +3508 +51F8 +5090 +930C +ENDCHAR +STARTCHAR uni8CF5 +ENCODING 36085 +BBX 15 15 0 -2 +BITMAP +7DFE +4502 +457A +7D02 +457A +4502 +7C00 +44FC +4484 +7CFC +0084 +28FC +2484 +44FC +8084 +ENDCHAR +STARTCHAR uni8CF6 +ENCODING 36086 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4450 +4448 +7CA4 +45FE +4684 +7CFC +4484 +44FC +7C80 +00FC +2944 +2544 +467C +8044 +ENDCHAR +STARTCHAR uni8CF7 +ENCODING 36087 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0100 +3D78 +2548 +3D78 +0100 +7FFE +5012 +9FF4 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni8CF8 +ENCODING 36088 +BBX 15 15 1 -1 +BITMAP +0040 +7950 +4A48 +4BFC +48A0 +68A0 +5FFE +4910 +4BF8 +6D0E +59F8 +4908 +49F8 +8890 +9B0C +ENDCHAR +STARTCHAR uni8CF9 +ENCODING 36089 +BBX 15 15 0 -1 +BITMAP +0104 +7884 +4888 +4800 +7BFE +4800 +4888 +7904 +4A02 +49FC +7954 +0154 +5154 +4954 +8FFE +ENDCHAR +STARTCHAR uni8CFA +ENCODING 36090 +BBX 15 15 1 -1 +BITMAP +0044 +7888 +4BFE +4890 +7BFC +4894 +4FFE +7894 +4894 +4BFC +4890 +7998 +2294 +4892 +8490 +ENDCHAR +STARTCHAR uni8CFB +ENCODING 36091 +BBX 15 15 1 -1 +BITMAP +0028 +7824 +4BFE +4820 +79FC +4924 +49FC +7924 +49FC +4924 +4808 +7BFE +2088 +4848 +8418 +ENDCHAR +STARTCHAR uni8CFC +ENCODING 36092 +BBX 14 15 1 -1 +BITMAP +0110 +7910 +4FFC +4910 +7BF8 +4910 +4FFC +7840 +4BF8 +4A48 +4BF8 +7A48 +07FC +4A08 +8618 +ENDCHAR +STARTCHAR uni8CFD +ENCODING 36093 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +5FF4 +0440 +1FF0 +0440 +FFFE +0820 +1FF0 +E82E +0FE0 +0820 +0FE0 +3838 +ENDCHAR +STARTCHAR uni8CFE +ENCODING 36094 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +89FC +8820 +88FC +AC20 +A7FE +A504 +A5FC +AD04 +89FC +8904 +89FC +FC88 +0306 +ENDCHAR +STARTCHAR uni8CFF +ENCODING 36095 +BBX 15 15 0 -2 +BITMAP +7BDE +4842 +4A52 +794A +4A52 +4828 +78C4 +4B12 +4860 +7988 +0032 +51C4 +4818 +8860 +0380 +ENDCHAR +STARTCHAR uni8D00 +ENCODING 36096 +BBX 13 16 1 -2 +BITMAP +FEF0 +9090 +BE98 +C900 +BEF0 +9490 +A260 +FE98 +0000 +3FE0 +2020 +3FE0 +2020 +3FE0 +1040 +2020 +ENDCHAR +STARTCHAR uni8D01 +ENCODING 36097 +BBX 14 16 1 -2 +BITMAP +FC40 +8440 +FC40 +847C +FC88 +8488 +FC88 +4948 +8450 +FC50 +8420 +FC20 +8450 +FC90 +4908 +8604 +ENDCHAR +STARTCHAR uni8D02 +ENCODING 36098 +BBX 15 16 0 -2 +BITMAP +0040 +7888 +49FC +4908 +7A52 +4BFE +4850 +7988 +4E26 +48C0 +7B10 +0064 +5388 +4830 +88C0 +0700 +ENDCHAR +STARTCHAR uni8D03 +ENCODING 36099 +BBX 15 15 0 -1 +BITMAP +0020 +7820 +49FC +4924 +79FC +4820 +4BFE +7A22 +4BFE +4820 +7840 +0024 +52A2 +4A8A +8C78 +ENDCHAR +STARTCHAR uni8D04 +ENCODING 36100 +BBX 15 15 1 -1 +BITMAP +0820 +7F20 +0878 +FFA8 +2268 +FF2A +085A +7F86 +0800 +1FF0 +1010 +1FF0 +1010 +1FF0 +701C +ENDCHAR +STARTCHAR uni8D05 +ENCODING 36101 +BBX 15 15 1 -1 +BITMAP +0810 +7F10 +083E +FFE4 +1024 +1F18 +2124 +5FF2 +9010 +1FF0 +1010 +1FF0 +1010 +1FF0 +701C +ENDCHAR +STARTCHAR uni8D06 +ENCODING 36102 +BBX 15 16 0 -2 +BITMAP +0028 +7824 +4BFE +4850 +7888 +4904 +4A02 +7998 +4954 +4910 +7BBE +0110 +52A8 +4AA8 +8C44 +0882 +ENDCHAR +STARTCHAR uni8D07 +ENCODING 36103 +BBX 15 15 1 -1 +BITMAP +1014 +10D2 +FC10 +45FE +2850 +3168 +494A +9FF4 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +701C +ENDCHAR +STARTCHAR uni8D08 +ENCODING 36104 +BBX 15 15 1 -1 +BITMAP +0104 +7884 +4888 +4BFE +7A22 +4BFE +4A22 +7BFE +4800 +49FC +4904 +79FC +2104 +4904 +85FC +ENDCHAR +STARTCHAR uni8D09 +ENCODING 36105 +BBX 15 15 1 -1 +BITMAP +03FC +7890 +4BFC +4A94 +7AF4 +4800 +49F8 +7908 +49F8 +4908 +49F8 +7820 +2BFE +4420 +8420 +ENDCHAR +STARTCHAR uni8D0A +ENCODING 36106 +BBX 15 15 1 -1 +BITMAP +2850 +3E7C +4890 +FFFE +1428 +252A +C74E +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +701C +ENDCHAR +STARTCHAR uni8D0B +ENCODING 36107 +BBX 15 14 1 -1 +BITMAP +7FFE +4910 +53FE +7620 +5BFC +5220 +53FC +5220 +47FE +4410 +47F0 +8410 +87F0 +3C1E +ENDCHAR +STARTCHAR uni8D0C +ENCODING 36108 +BBX 15 16 0 -2 +BITMAP +0050 +7A52 +4954 +4850 +7BFE +4888 +4850 +7BFE +4820 +49FC +7820 +03FE +5050 +4888 +8904 +0602 +ENDCHAR +STARTCHAR uni8D0D +ENCODING 36109 +BBX 15 15 1 -1 +BITMAP +0080 +78F8 +4910 +4FFE +7A48 +4B8E +4A78 +7A00 +4BFE +4A00 +4A78 +7A00 +24FC +4884 +84FC +ENDCHAR +STARTCHAR uni8D0E +ENCODING 36110 +BBX 15 15 1 -1 +BITMAP +0088 +7888 +4BFE +4888 +79FC +4924 +49FC +7924 +49FC +4820 +4BFE +7A22 +2A2A +463A +82C6 +ENDCHAR +STARTCHAR uni8D0F +ENCODING 36111 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +1000 +0FF8 +0000 +1FF0 +1010 +7FFC +4AA4 +7BA4 +4AB4 +7BAC +4924 +9AA6 +ENDCHAR +STARTCHAR uni8D10 +ENCODING 36112 +BBX 15 15 1 -1 +BITMAP +0020 +79FC +4824 +4BFE +7824 +49FC +4820 +7BFE +4954 +4A52 +4800 +79FC +2154 +4954 +87FE +ENDCHAR +STARTCHAR uni8D11 +ENCODING 36113 +BBX 15 16 0 -2 +BITMAP +1000 +FEFC +4420 +2820 +FEFE +0000 +7CFC +4484 +7CFC +4484 +7CFC +1084 +FEFC +1048 +1084 +1102 +ENDCHAR +STARTCHAR uni8D12 +ENCODING 36114 +BBX 15 15 1 -1 +BITMAP +0020 +FFFC +9124 +FD24 +85FC +FC2A +9144 +FFFC +2010 +3FF0 +2010 +3FF0 +2010 +3FF0 +E01C +ENDCHAR +STARTCHAR uni8D13 +ENCODING 36115 +BBX 15 15 1 -1 +BITMAP +0014 +7812 +4810 +49FE +7D10 +4DF0 +4F54 +79F4 +4914 +49F4 +4F48 +7DE8 +051A +522A +8C44 +ENDCHAR +STARTCHAR uni8D14 +ENCODING 36116 +BBX 15 14 1 -1 +BITMAP +0FE0 +0820 +0FE0 +0820 +0FE0 +1830 +7EFC +4284 +7EFC +4284 +7EFC +4284 +7EFC +C386 +ENDCHAR +STARTCHAR uni8D15 +ENCODING 36117 +BBX 15 16 0 -2 +BITMAP +2010 +CEFE +8A10 +AA7C +AA00 +EEFE +AAAA +AAFE +AA44 +AA7C +EE44 +A87C +2844 +487C +4828 +8844 +ENDCHAR +STARTCHAR uni8D16 +ENCODING 36118 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4BFE +4820 +79FC +4800 +4BFE +7A92 +4BFE +4904 +49FC +7904 +29FC +4888 +8706 +ENDCHAR +STARTCHAR uni8D17 +ENCODING 36119 +BBX 15 16 0 -2 +BITMAP +3FFE +2240 +25F8 +2D08 +35F8 +2508 +25FE +26AA +2406 +27F8 +2408 +27F8 +4408 +47F8 +8210 +0408 +ENDCHAR +STARTCHAR uni8D18 +ENCODING 36120 +BBX 15 16 0 -2 +BITMAP +0124 +78A8 +4BFE +4A02 +78F8 +4888 +49FC +7904 +49FC +4904 +79FC +0104 +51FC +4800 +8888 +0104 +ENDCHAR +STARTCHAR uni8D19 +ENCODING 36121 +BBX 15 16 0 -2 +BITMAP +0E1C +0810 +7EFC +4A94 +5CB8 +4A94 +5CB8 +952A +2246 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni8D1A +ENCODING 36122 +BBX 15 16 0 -2 +BITMAP +0110 +7890 +4BDE +4810 +7A5E +4982 +4BDE +7810 +4BDE +4A50 +7BDE +0250 +53DE +4A50 +8A52 +02CE +ENDCHAR +STARTCHAR uni8D1B +ENCODING 36123 +BBX 15 15 1 -1 +BITMAP +1020 +107C +7DC8 +2830 +FDCE +0000 +7DFC +4420 +7FFE +4504 +7DFC +1104 +FDFC +1088 +1306 +ENDCHAR +STARTCHAR uni8D1C +ENCODING 36124 +BBX 15 16 0 -2 +BITMAP +0090 +7090 +57FE +5094 +700A +51FE +5508 +77E8 +514A +51EA +7F2A +05EA +554C +49EA +8216 +0462 +ENDCHAR +STARTCHAR uni8D1D +ENCODING 36125 +BBX 11 15 2 -2 +BITMAP +7FC0 +4040 +4040 +4040 +4440 +4440 +4440 +4440 +4440 +4840 +0A00 +1100 +2080 +4040 +8020 +ENDCHAR +STARTCHAR uni8D1E +ENCODING 36126 +BBX 14 16 0 -2 +BITMAP +0100 +0100 +01FC +0100 +0100 +3FF8 +2008 +2108 +2108 +2108 +2208 +2208 +04C0 +0830 +3008 +C004 +ENDCHAR +STARTCHAR uni8D1F +ENCODING 36127 +BBX 12 16 1 -2 +BITMAP +0800 +0800 +1FC0 +2040 +4080 +BFE0 +2020 +2220 +2220 +2220 +2220 +2420 +0580 +0840 +3020 +C010 +ENDCHAR +STARTCHAR uni8D20 +ENCODING 36128 +BBX 12 16 1 -2 +BITMAP +0400 +0800 +1040 +2020 +7FF0 +0010 +0000 +3FE0 +2020 +2220 +2220 +2220 +2420 +0980 +3060 +C010 +ENDCHAR +STARTCHAR uni8D21 +ENCODING 36129 +BBX 13 15 1 -2 +BITMAP +7FF0 +0200 +0200 +FFF8 +0000 +0000 +3FE0 +2020 +2220 +2220 +2220 +2420 +0980 +3060 +C010 +ENDCHAR +STARTCHAR uni8D22 +ENCODING 36130 +BBX 15 16 0 -2 +BITMAP +0010 +7C10 +4410 +5410 +55FE +5410 +5430 +5430 +5450 +5450 +5490 +1110 +2810 +2410 +4450 +8020 +ENDCHAR +STARTCHAR uni8D23 +ENCODING 36131 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0100 +FFFE +0000 +1FF0 +1010 +1110 +1110 +1110 +0260 +0C18 +7004 +ENDCHAR +STARTCHAR uni8D24 +ENCODING 36132 +BBX 14 16 1 -2 +BITMAP +0800 +4BF0 +4910 +48A0 +4840 +49B0 +4E0C +0800 +3FE0 +2020 +2220 +2220 +2220 +04C0 +1830 +E008 +ENDCHAR +STARTCHAR uni8D25 +ENCODING 36133 +BBX 15 16 0 -2 +BITMAP +0040 +7C40 +4440 +5480 +54FE +5508 +5688 +5488 +5488 +5450 +5450 +1020 +2850 +2488 +4504 +8202 +ENDCHAR +STARTCHAR uni8D26 +ENCODING 36134 +BBX 15 16 0 -2 +BITMAP +0080 +7C84 +4484 +5488 +5490 +54A0 +5480 +55FE +54A0 +54A0 +5490 +1090 +2888 +24A4 +44C2 +8080 +ENDCHAR +STARTCHAR uni8D27 +ENCODING 36135 +BBX 14 16 0 -2 +BITMAP +0880 +0880 +1098 +30E0 +5784 +9084 +107C +0000 +1FF0 +1010 +1110 +1110 +1110 +0260 +0C18 +7004 +ENDCHAR +STARTCHAR uni8D28 +ENCODING 36136 +BBX 15 16 0 -2 +BITMAP +007C +3FC0 +2040 +2040 +3FFE +2040 +2040 +27FC +2404 +2444 +2444 +2444 +24B4 +4108 +4604 +9802 +ENDCHAR +STARTCHAR uni8D29 +ENCODING 36137 +BBX 15 16 0 -2 +BITMAP +0004 +7C0E +44F0 +4480 +5480 +54FC +54A4 +54A4 +54A4 +54A8 +54A8 +1090 +2910 +2528 +4244 +8082 +ENDCHAR +STARTCHAR uni8D2A +ENCODING 36138 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0440 +0920 +3098 +CFE6 +0040 +0080 +1FF0 +1010 +1110 +1110 +1110 +0260 +0C18 +7004 +ENDCHAR +STARTCHAR uni8D2B +ENCODING 36139 +BBX 15 16 0 -2 +BITMAP +0440 +0820 +3018 +DFE6 +0420 +0420 +08A0 +1040 +3FF0 +1010 +1110 +1110 +1110 +0260 +0C18 +7004 +ENDCHAR +STARTCHAR uni8D2C +ENCODING 36140 +BBX 15 16 0 -2 +BITMAP +0008 +7C3C +45C0 +4400 +5420 +5410 +55FC +5404 +5408 +5410 +5420 +1040 +2880 +2540 +423E +8000 +ENDCHAR +STARTCHAR uni8D2D +ENCODING 36141 +BBX 14 16 0 -2 +BITMAP +0080 +7C80 +4480 +54FC +5504 +5504 +5644 +5444 +5484 +54A4 +5514 +11F4 +2814 +2404 +4428 +8010 +ENDCHAR +STARTCHAR uni8D2E +ENCODING 36142 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +4420 +5400 +55FE +5502 +5604 +5400 +5400 +5400 +5400 +1000 +2800 +25FE +4400 +8000 +ENDCHAR +STARTCHAR uni8D2F +ENCODING 36143 +BBX 15 16 0 -2 +BITMAP +1FF0 +1110 +1110 +FFFE +1110 +1110 +1FF0 +0000 +1FF0 +1010 +1110 +1110 +1110 +0260 +0C18 +7004 +ENDCHAR +STARTCHAR uni8D30 +ENCODING 36144 +BBX 15 16 0 -2 +BITMAP +0028 +0024 +FFFE +0020 +3FA0 +0020 +7FA0 +0020 +3FA0 +2090 +2490 +2490 +248A +0A0A +1106 +6082 +ENDCHAR +STARTCHAR uni8D31 +ENCODING 36145 +BBX 15 16 0 -2 +BITMAP +0050 +7C48 +4440 +445C +55E0 +5440 +545E +57E0 +5444 +5448 +5430 +1022 +2852 +248A +4306 +8002 +ENDCHAR +STARTCHAR uni8D32 +ENCODING 36146 +BBX 15 16 0 -2 +BITMAP +0100 +3FF8 +0100 +0820 +FFFE +0820 +0000 +1FF0 +1010 +1110 +1110 +1110 +1210 +04C0 +1830 +6008 +ENDCHAR +STARTCHAR uni8D33 +ENCODING 36147 +BBX 15 16 0 -2 +BITMAP +1220 +1220 +FFFE +1220 +13E0 +1000 +1FF8 +0000 +1FF0 +1010 +1110 +1110 +1110 +0260 +0C18 +7004 +ENDCHAR +STARTCHAR uni8D34 +ENCODING 36148 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +5420 +543E +5420 +5420 +5420 +55FC +5504 +5504 +1104 +2904 +2504 +45FC +8104 +ENDCHAR +STARTCHAR uni8D35 +ENCODING 36149 +BBX 15 16 0 -2 +BITMAP +0100 +1FF0 +1110 +1110 +1FF0 +0100 +FFFE +0000 +1FF0 +1010 +1110 +1110 +1110 +0260 +0C18 +7004 +ENDCHAR +STARTCHAR uni8D36 +ENCODING 36150 +BBX 15 15 0 -2 +BITMAP +7DFC +4504 +4504 +5504 +5504 +55FC +5450 +5450 +5450 +5450 +1092 +2892 +2512 +420E +8400 +ENDCHAR +STARTCHAR uni8D37 +ENCODING 36151 +BBX 15 16 0 -2 +BITMAP +0890 +1088 +307E +D7C0 +1022 +101A +0006 +1FF0 +1010 +1110 +1110 +1110 +1210 +04C0 +1830 +6008 +ENDCHAR +STARTCHAR uni8D38 +ENCODING 36152 +BBX 13 16 1 -2 +BITMAP +0C00 +F1F8 +8088 +9088 +8888 +B528 +C210 +0000 +3FE0 +2020 +2220 +2220 +2220 +04C0 +1830 +E008 +ENDCHAR +STARTCHAR uni8D39 +ENCODING 36153 +BBX 13 16 1 -2 +BITMAP +0880 +FFF0 +0890 +7FF0 +4880 +7FF8 +1088 +20A8 +4010 +BFE0 +2020 +2220 +2220 +0580 +1860 +6010 +ENDCHAR +STARTCHAR uni8D3A +ENCODING 36154 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +7E7C +1244 +2244 +2A7C +4400 +9FF0 +1010 +1110 +1110 +1110 +1210 +04C0 +1830 +6008 +ENDCHAR +STARTCHAR uni8D3B +ENCODING 36155 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +5440 +5448 +5484 +55FE +5482 +5400 +54FC +5484 +1084 +2884 +2484 +44FC +8084 +ENDCHAR +STARTCHAR uni8D3C +ENCODING 36156 +BBX 15 16 0 -2 +BITMAP +0014 +7C12 +4410 +45FE +5410 +5490 +5492 +5492 +57F2 +5494 +5494 +1088 +288A +251A +4126 +8242 +ENDCHAR +STARTCHAR uni8D3D +ENCODING 36157 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +FBF0 +1090 +1990 +F094 +1154 +520C +2404 +1FF0 +1010 +1110 +1110 +02C0 +0C30 +3008 +ENDCHAR +STARTCHAR uni8D3E +ENCODING 36158 +BBX 13 15 1 -2 +BITMAP +FFF8 +0880 +7FF0 +4890 +4890 +7FF0 +0000 +3FE0 +2020 +2220 +2220 +2220 +04C0 +1830 +E008 +ENDCHAR +STARTCHAR uni8D3F +ENCODING 36159 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +45FE +5440 +5440 +54FC +5484 +5584 +56FC +5484 +5484 +10FC +2884 +2484 +4494 +8088 +ENDCHAR +STARTCHAR uni8D40 +ENCODING 36160 +BBX 14 16 0 -2 +BITMAP +0880 +0888 +2E90 +28E0 +2884 +2E84 +F07C +0000 +1FF0 +1010 +1110 +1110 +1110 +0260 +0C18 +7004 +ENDCHAR +STARTCHAR uni8D41 +ENCODING 36161 +BBX 14 16 0 -2 +BITMAP +0838 +13C0 +3040 +5040 +97FC +1040 +1040 +13F8 +0000 +1FF0 +1010 +1110 +1110 +02C0 +0C30 +3008 +ENDCHAR +STARTCHAR uni8D42 +ENCODING 36162 +BBX 15 16 0 -2 +BITMAP +0040 +7C40 +4478 +5488 +5550 +5420 +5450 +5488 +5506 +54F8 +5488 +1088 +2888 +2488 +44F8 +8088 +ENDCHAR +STARTCHAR uni8D43 +ENCODING 36163 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +4410 +45FE +5500 +5510 +5510 +5510 +557C +5510 +5510 +1110 +2910 +2610 +42FE +8400 +ENDCHAR +STARTCHAR uni8D44 +ENCODING 36164 +BBX 14 16 0 -2 +BITMAP +0100 +4100 +21FC +0A44 +1448 +E0A0 +2110 +260C +1FF0 +1010 +1110 +1110 +1110 +0260 +0C18 +7004 +ENDCHAR +STARTCHAR uni8D45 +ENCODING 36165 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +4410 +47FE +5420 +5442 +5484 +55F8 +5410 +5422 +54C4 +1308 +2810 +2428 +40C4 +8302 +ENDCHAR +STARTCHAR uni8D46 +ENCODING 36166 +BBX 15 15 0 -2 +BITMAP +7CFC +4484 +5484 +54FC +5490 +5490 +5488 +5484 +5532 +5508 +1200 +2860 +2418 +4404 +8000 +ENDCHAR +STARTCHAR uni8D47 +ENCODING 36167 +BBX 15 16 0 -2 +BITMAP +0028 +7C24 +4424 +5420 +55FE +5420 +5520 +54B2 +54B4 +5468 +54A8 +1124 +2A22 +2420 +44A0 +8040 +ENDCHAR +STARTCHAR uni8D48 +ENCODING 36168 +BBX 15 15 0 -2 +BITMAP +7DFE +4500 +4500 +557C +5500 +5500 +55FE +5550 +5552 +5554 +1148 +2948 +2644 +4252 +8460 +ENDCHAR +STARTCHAR uni8D49 +ENCODING 36169 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +1110 +0920 +FFFE +0540 +0920 +3018 +DFF6 +1010 +1110 +1110 +02C0 +0C30 +3008 +ENDCHAR +STARTCHAR uni8D4A +ENCODING 36170 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4450 +5488 +5504 +56FA +5400 +5400 +57FE +5420 +5528 +1124 +2A22 +2422 +44A0 +8040 +ENDCHAR +STARTCHAR uni8D4B +ENCODING 36171 +BBX 15 16 0 -2 +BITMAP +0008 +7C0C +44EA +440A +5408 +55FE +5448 +5448 +5548 +5568 +5548 +1148 +294A +256A +4386 +8102 +ENDCHAR +STARTCHAR uni8D4C +ENCODING 36172 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +7C44 +45FC +4448 +5450 +57FE +5440 +54F8 +5588 +5688 +54F8 +2888 +2488 +44F8 +8088 +ENDCHAR +STARTCHAR uni8D4D +ENCODING 36173 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0920 +0920 +1550 +7FFE +4002 +8004 +1FF0 +1010 +1110 +1110 +1110 +0260 +0C18 +7004 +ENDCHAR +STARTCHAR uni8D4E +ENCODING 36174 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +45FC +4420 +5420 +57FE +5402 +5494 +5450 +5510 +5490 +13FE +2828 +2444 +4082 +8302 +ENDCHAR +STARTCHAR uni8D4F +ENCODING 36175 +BBX 13 16 1 -2 +BITMAP +2220 +1240 +7FF8 +4008 +9FD0 +1040 +1FC0 +0000 +3FE0 +2020 +2220 +2220 +2220 +04C0 +1830 +E008 +ENDCHAR +STARTCHAR uni8D50 +ENCODING 36176 +BBX 15 15 0 -2 +BITMAP +7CFC +4484 +5484 +54FC +5484 +5484 +54FC +5440 +54FE +552A +124A +2892 +2522 +444A +8084 +ENDCHAR +STARTCHAR uni8D51 +ENCODING 36177 +BBX 13 16 1 -2 +BITMAP +3FE0 +2020 +2220 +2220 +0580 +1860 +E010 +0000 +7DF0 +4510 +5550 +5550 +5550 +28A0 +4510 +8208 +ENDCHAR +STARTCHAR uni8D52 +ENCODING 36178 +BBX 14 15 0 -2 +BITMAP +7DFC +4524 +4524 +5574 +5524 +55FC +5504 +5574 +5554 +5554 +1174 +2904 +2604 +4214 +8408 +ENDCHAR +STARTCHAR uni8D53 +ENCODING 36179 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2080 +2FF8 +2088 +3FFE +2108 +2FF8 +2410 +2FF8 +3416 +2490 +4490 +4160 +8210 +0C08 +ENDCHAR +STARTCHAR uni8D54 +ENCODING 36180 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FC +5400 +5508 +5490 +5400 +57FE +5400 +5400 +55FC +1104 +2904 +2504 +45FC +8104 +ENDCHAR +STARTCHAR uni8D55 +ENCODING 36181 +BBX 15 16 0 -2 +BITMAP +0020 +7CA2 +44A2 +4524 +5450 +5488 +5704 +5422 +5420 +54A4 +54A4 +1128 +2850 +2488 +4104 +8202 +ENDCHAR +STARTCHAR uni8D56 +ENCODING 36182 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +FEF8 +1108 +1210 +7DFC +5504 +5524 +5524 +7D24 +1124 +3924 +5450 +9088 +1104 +1202 +ENDCHAR +STARTCHAR uni8D57 +ENCODING 36183 +BBX 15 15 0 -2 +BITMAP +7DFE +4502 +457A +5502 +557A +5502 +5400 +54FC +5484 +54FC +1084 +28FC +2484 +40FC +8084 +ENDCHAR +STARTCHAR uni8D58 +ENCODING 36184 +BBX 15 16 0 -2 +BITMAP +0820 +7F20 +087E +7E44 +08A4 +FF28 +1010 +1E28 +2244 +4682 +9FF0 +1010 +1110 +02C0 +0C30 +7008 +ENDCHAR +STARTCHAR uni8D59 +ENCODING 36185 +BBX 15 16 0 -2 +BITMAP +0028 +7C24 +47FE +5420 +55FC +5524 +55FC +5524 +55FC +5524 +5408 +13FE +2888 +2448 +4448 +8018 +ENDCHAR +STARTCHAR uni8D5A +ENCODING 36186 +BBX 15 16 0 -2 +BITMAP +0088 +7C50 +4400 +55FE +5450 +55FC +5454 +57FE +5454 +55FC +5450 +10D8 +2954 +2652 +4450 +8050 +ENDCHAR +STARTCHAR uni8D5B +ENCODING 36187 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4442 +9FF4 +0440 +3FF8 +0440 +FFFE +0820 +1FF0 +2928 +C926 +0920 +0AA0 +0440 +1820 +ENDCHAR +STARTCHAR uni8D5C +ENCODING 36188 +BBX 14 16 1 -2 +BITMAP +0040 +FBFC +9040 +91F8 +9040 +BBFC +A800 +ABF8 +AA08 +BA48 +9248 +9248 +9248 +FCA0 +0110 +0608 +ENDCHAR +STARTCHAR uni8D5D +ENCODING 36189 +BBX 15 16 0 -2 +BITMAP +3FFE +2250 +24FE +2D90 +36FC +2490 +24FC +2490 +24FE +2000 +27FC +2444 +4444 +40B0 +830C +1C02 +ENDCHAR +STARTCHAR uni8D5E +ENCODING 36190 +BBX 15 16 0 -2 +BITMAP +0810 +2850 +3E7C +4890 +7EFE +1428 +2548 +468A +8106 +1FF0 +1010 +1110 +1110 +02C0 +0C30 +3008 +ENDCHAR +STARTCHAR uni8D5F +ENCODING 36191 +BBX 15 16 0 -2 +BITMAP +41D4 +2010 +FBFE +1090 +52C8 +228A +57E6 +8002 +1FF0 +1010 +1110 +1110 +1110 +0260 +0C18 +7004 +ENDCHAR +STARTCHAR uni8D60 +ENCODING 36192 +BBX 14 16 0 -2 +BITMAP +0088 +7C48 +4450 +55FC +5524 +55AC +5574 +5524 +55FC +5400 +54F8 +1088 +28F8 +2488 +44F8 +8088 +ENDCHAR +STARTCHAR uni8D61 +ENCODING 36193 +BBX 15 16 0 -2 +BITMAP +0080 +7CF8 +4508 +47FE +5544 +5592 +55FE +5500 +557C +5500 +557C +1100 +297C +2644 +427C +8444 +ENDCHAR +STARTCHAR uni8D62 +ENCODING 36194 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +2000 +3FF8 +0000 +3FF8 +2008 +3FF8 +0000 +77DC +5454 +7554 +555C +7556 +5296 +B462 +ENDCHAR +STARTCHAR uni8D63 +ENCODING 36195 +BBX 15 16 0 -2 +BITMAP +1040 +FE78 +44D0 +2920 +FE58 +0186 +7CF8 +4420 +7DFC +4400 +7CF8 +1088 +FEA8 +10A8 +1050 +1188 +ENDCHAR +STARTCHAR uni8D64 +ENCODING 36196 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0440 +2448 +2448 +4444 +4444 +8842 +0840 +11C0 +ENDCHAR +STARTCHAR uni8D65 +ENCODING 36197 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0810 +7E10 +083E +0822 +FF44 +1490 +1410 +5610 +5510 +9528 +2428 +2424 +5444 +8882 +ENDCHAR +STARTCHAR uni8D66 +ENCODING 36198 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +0840 +7EFE +0888 +0988 +FE88 +1488 +5488 +5650 +9550 +2420 +2450 +4488 +8F06 +ENDCHAR +STARTCHAR uni8D67 +ENCODING 36199 +BBX 15 15 1 -1 +BITMAP +0800 +08FC +3E84 +0884 +08FC +0880 +FF80 +14FC +14A4 +54A4 +5698 +9590 +24A8 +24C4 +4C82 +ENDCHAR +STARTCHAR uni8D68 +ENCODING 36200 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0810 +7EFE +0892 +0892 +FF92 +1492 +14FE +5692 +5510 +9514 +2412 +241E +54F2 +8800 +ENDCHAR +STARTCHAR uni8D69 +ENCODING 36201 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0878 +7E48 +0890 +087C +FF54 +1454 +1454 +567C +5540 +9540 +2442 +2442 +543E +8800 +ENDCHAR +STARTCHAR uni8D6A +ENCODING 36202 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +081E +7E10 +0810 +08FE +FF82 +1492 +1492 +5692 +5592 +9492 +2428 +2424 +5442 +8882 +ENDCHAR +STARTCHAR uni8D6B +ENCODING 36203 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +3EFC +0820 +0820 +FFFE +1450 +5454 +56D4 +9552 +9452 +1450 +2490 +2490 +4D30 +ENDCHAR +STARTCHAR uni8D6C +ENCODING 36204 +BBX 15 15 1 -1 +BITMAP +1020 +103E +7C20 +10FC +1084 +1084 +FEFC +2884 +2884 +6CFC +AA84 +2884 +48FC +4848 +9986 +ENDCHAR +STARTCHAR uni8D6D +ENCODING 36205 +BBX 15 15 1 -1 +BITMAP +1024 +1024 +7DFC +1028 +1028 +1030 +FFFE +2848 +28FC +2884 +6D84 +AAFC +4884 +4884 +98FC +ENDCHAR +STARTCHAR uni8D6E +ENCODING 36206 +BBX 15 16 0 -2 +BITMAP +1000 +11DC +1144 +7D44 +1144 +11DC +FF00 +2900 +29DC +6D14 +AB14 +29D4 +2908 +4908 +4914 +9922 +ENDCHAR +STARTCHAR uni8D6F +ENCODING 36207 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +7D10 +117C +1114 +FDFE +2914 +297C +6D10 +AB7C +2944 +2944 +4A44 +4A7C +9C44 +ENDCHAR +STARTCHAR uni8D70 +ENCODING 36208 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0100 +1100 +11F8 +1100 +2900 +2500 +4300 +80FE +ENDCHAR +STARTCHAR uni8D71 +ENCODING 36209 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +0010 +1020 +0840 +0080 +3100 +4A00 +8700 +80FE +ENDCHAR +STARTCHAR uni8D72 +ENCODING 36210 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +7E20 +08FC +0824 +FF24 +0824 +2824 +2844 +2E44 +2894 +2908 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D73 +ENCODING 36211 +BBX 15 15 1 -1 +BITMAP +0808 +0808 +7E08 +0848 +0848 +0848 +FF48 +0848 +4848 +4E4E +4878 +4988 +6808 +9808 +87FE +ENDCHAR +STARTCHAR uni8D74 +ENCODING 36212 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +7E20 +1020 +1020 +FF38 +1026 +1020 +5E20 +5020 +5020 +5020 +B020 +9C00 +83FE +ENDCHAR +STARTCHAR uni8D75 +ENCODING 36213 +BBX 15 16 0 -2 +BITMAP +0800 +0804 +0884 +7E44 +0828 +0828 +FE10 +0810 +2828 +2828 +2E44 +2884 +2800 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D76 +ENCODING 36214 +BBX 15 16 0 -2 +BITMAP +0800 +08FC +0820 +7E20 +0820 +0820 +FE20 +09FE +2820 +2820 +2E20 +2820 +2820 +5820 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D77 +ENCODING 36215 +BBX 15 15 1 -1 +BITMAP +1000 +1000 +7DF8 +1008 +1008 +FE08 +11F8 +5100 +5D00 +5104 +5104 +70FC +5000 +8800 +87FE +ENDCHAR +STARTCHAR uni8D78 +ENCODING 36216 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0810 +7E10 +0892 +0892 +FE92 +0892 +2892 +2892 +2E92 +28FE +2802 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D79 +ENCODING 36217 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0840 +7EFE +0902 +0842 +FE22 +0822 +280A +2832 +2EC2 +2802 +2814 +5808 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D7A +ENCODING 36218 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0850 +7E50 +0888 +0944 +FE22 +08F8 +2808 +2810 +2E10 +2820 +2820 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D7B +ENCODING 36219 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0810 +7E54 +0852 +0852 +FE90 +0812 +2804 +2808 +2E10 +2860 +2980 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D7C +ENCODING 36220 +BBX 15 16 0 -2 +BITMAP +0420 +0420 +0420 +3F3E +0442 +0404 +7F90 +0410 +0410 +2428 +27A4 +2442 +2482 +5400 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D7D +ENCODING 36221 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +7EFC +0824 +0824 +FE24 +09FE +2820 +2850 +2E48 +2884 +2904 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D7E +ENCODING 36222 +BBX 15 16 0 -2 +BITMAP +0800 +080C +0870 +7E40 +0840 +087E +FF48 +0848 +2848 +2848 +2E88 +2888 +2908 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D7F +ENCODING 36223 +BBX 15 16 0 -2 +BITMAP +1004 +101E +11F0 +7D10 +1110 +1110 +FDFE +1110 +1110 +5110 +5D10 +514A +5186 +7102 +5000 +8FFE +ENDCHAR +STARTCHAR uni8D80 +ENCODING 36224 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0816 +7EF8 +0890 +0890 +FEFE +0812 +2832 +2852 +2E96 +2910 +2810 +5810 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D81 +ENCODING 36225 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +7E28 +0844 +0882 +0808 +FF30 +0804 +4808 +4E70 +4802 +480C +6870 +9800 +87FE +ENDCHAR +STARTCHAR uni8D82 +ENCODING 36226 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0840 +7EFE +0882 +0924 +FE20 +08A8 +28A4 +2922 +2E22 +28A0 +2840 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D83 +ENCODING 36227 +BBX 15 16 0 -2 +BITMAP +0820 +08A0 +08A0 +7EFC +08A0 +0920 +FE20 +09FE +2820 +2850 +2E48 +2884 +2904 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D84 +ENCODING 36228 +BBX 15 15 1 -1 +BITMAP +1000 +10F8 +7C88 +1088 +10F8 +FE88 +1088 +5088 +5CF8 +5088 +5088 +5088 +73FE +9800 +87FE +ENDCHAR +STARTCHAR uni8D85 +ENCODING 36229 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +7C44 +1044 +1084 +FC84 +1118 +5000 +5DFC +5104 +5104 +5104 +71FC +9C00 +83FE +ENDCHAR +STARTCHAR uni8D86 +ENCODING 36230 +BBX 15 16 0 -2 +BITMAP +0800 +081C +08F0 +7E90 +0890 +08FE +FE90 +0890 +2890 +28AA +2ECA +28A6 +2812 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D87 +ENCODING 36231 +BBX 15 16 0 -2 +BITMAP +0820 +0810 +0810 +7EFE +0804 +0844 +FF44 +0828 +2828 +2828 +2E10 +28FE +2800 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D88 +ENCODING 36232 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +7E3E +0820 +0820 +FF20 +08FC +2884 +2884 +2E84 +28FC +2884 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D89 +ENCODING 36233 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0892 +7E92 +0892 +08FE +FF10 +0892 +2892 +2892 +2E92 +28FE +2802 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D8A +ENCODING 36234 +BBX 15 15 1 -1 +BITMAP +1014 +1012 +7C10 +11FE +1110 +FF10 +1114 +1114 +5D18 +5150 +51AA +734A +5084 +4C00 +83FE +ENDCHAR +STARTCHAR uni8D8B +ENCODING 36235 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +0878 +7E88 +0910 +08FC +FE04 +0804 +28FC +2804 +2E04 +29FC +2800 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D8C +ENCODING 36236 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0810 +7EFE +0810 +087C +FF00 +087C +2844 +2844 +2E44 +287C +2844 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D8D +ENCODING 36237 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +107C +7C88 +1350 +1024 +FCC8 +131E +1022 +50E4 +5C18 +5010 +5060 +7380 +5000 +8FFE +ENDCHAR +STARTCHAR uni8D8E +ENCODING 36238 +BBX 15 16 0 -2 +BITMAP +0810 +0850 +0850 +7EFC +0910 +0810 +FEFE +0830 +2838 +2854 +2E94 +2910 +2810 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D8F +ENCODING 36239 +BBX 15 16 0 -2 +BITMAP +081C +08E0 +0820 +7E20 +09FE +0820 +FE20 +08FC +2884 +2884 +2E84 +28FC +2884 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D90 +ENCODING 36240 +BBX 15 16 0 -2 +BITMAP +0800 +09DC +0844 +7E44 +0954 +08CC +FE44 +08CC +2954 +2844 +2E44 +2854 +28C8 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D91 +ENCODING 36241 +BBX 15 16 0 -2 +BITMAP +1020 +1220 +1120 +7D3E +1042 +1084 +FC90 +1090 +1310 +5110 +5D28 +5124 +5142 +7082 +5000 +8FFE +ENDCHAR +STARTCHAR uni8D92 +ENCODING 36242 +BBX 15 16 0 -2 +BITMAP +0810 +0850 +0850 +7E50 +0954 +08D8 +FE50 +08D8 +2954 +2852 +2E92 +2892 +290E +5A00 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D93 +ENCODING 36243 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1088 +7C88 +1088 +1088 +FD26 +1220 +11FE +5020 +5C70 +50A8 +5124 +7222 +5020 +8FFE +ENDCHAR +STARTCHAR uni8D94 +ENCODING 36244 +BBX 15 16 0 -2 +BITMAP +1002 +13F2 +1082 +7C8A +108A +11EA +FD2A +112A +12AA +504A +5C4A +5082 +510A +7204 +5000 +8FFE +ENDCHAR +STARTCHAR uni8D95 +ENCODING 36245 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +7C84 +10FC +1084 +FEFC +1000 +51FE +5C20 +5020 +51FE +5020 +7020 +9800 +87FE +ENDCHAR +STARTCHAR uni8D96 +ENCODING 36246 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +0854 +7E54 +0854 +08BA +FF10 +0810 +287C +2810 +2E10 +28FE +2800 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D97 +ENCODING 36247 +BBX 15 16 0 -2 +BITMAP +0800 +08F8 +0888 +7E88 +0888 +08F8 +FE20 +08A0 +28BC +28A0 +2EA0 +2960 +2A3C +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D98 +ENCODING 36248 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +0882 +7EFE +0880 +088C +FEF0 +089C +28F0 +289E +2EF0 +2912 +290E +5A00 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D99 +ENCODING 36249 +BBX 15 15 1 -1 +BITMAP +08A4 +08A2 +7D22 +08FC +0884 +0884 +FEFC +0884 +4884 +4EFC +4884 +4884 +688C +9800 +87FE +ENDCHAR +STARTCHAR uni8D9A +ENCODING 36250 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +09FE +7E20 +0820 +09FC +FF24 +0924 +29FC +2870 +2EA8 +2924 +2A22 +5820 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D9B +ENCODING 36251 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0850 +7E88 +0904 +0AFA +FE20 +0820 +29FC +2820 +2EA8 +2870 +2BFE +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D9C +ENCODING 36252 +BBX 15 16 0 -2 +BITMAP +0880 +0880 +09FE +7E22 +08AA +0872 +FE22 +09FE +2822 +2872 +2EAA +2922 +282A +5804 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D9D +ENCODING 36253 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +7C88 +1144 +1222 +FDF8 +1008 +1050 +5020 +5CA4 +528A +528A +7478 +5000 +8FFE +ENDCHAR +STARTCHAR uni8D9E +ENCODING 36254 +BBX 15 16 0 -2 +BITMAP +0848 +0848 +08FC +7E48 +0848 +09FE +FE00 +08FC +2884 +28FC +2E84 +28FC +2884 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8D9F +ENCODING 36255 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +10A4 +7CA8 +11FC +1104 +FD04 +1174 +1154 +5154 +5D74 +5104 +710C +5000 +4FFE +8000 +ENDCHAR +STARTCHAR uni8DA0 +ENCODING 36256 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +103E +7C20 +11FC +1104 +FDFC +1104 +11FC +5124 +5C20 +53FE +5020 +7020 +5020 +8FFE +ENDCHAR +STARTCHAR uni8DA1 +ENCODING 36257 +BBX 15 16 0 -2 +BITMAP +0850 +0848 +0880 +7EFE +0990 +0A90 +FEFC +0890 +2890 +28FC +2E90 +2890 +28FE +5880 +4FFE +8000 +ENDCHAR +STARTCHAR uni8DA2 +ENCODING 36258 +BBX 15 16 0 -2 +BITMAP +11F8 +1008 +10F8 +7C08 +13FE +1020 +FC24 +1124 +10A8 +5070 +5CA8 +5324 +5024 +70A0 +5040 +8FFE +ENDCHAR +STARTCHAR uni8DA3 +ENCODING 36259 +BBX 15 15 1 -1 +BITMAP +1000 +17FE +1140 +7D5C +11C4 +1144 +FF54 +11C8 +1148 +5D4C +51D4 +7262 +5042 +8C40 +83FE +ENDCHAR +STARTCHAR uni8DA4 +ENCODING 36260 +BBX 15 16 0 -2 +BITMAP +0820 +0810 +08FE +7E82 +0800 +08FE +FF20 +0840 +28FC +2944 +2E44 +287C +2844 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni8DA5 +ENCODING 36261 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +13FE +7C50 +1050 +11FC +FD54 +118C +1104 +51FC +5D04 +5104 +51FC +7104 +5000 +8FFE +ENDCHAR +STARTCHAR uni8DA6 +ENCODING 36262 +BBX 15 15 1 -1 +BITMAP +1220 +1120 +7C7E +1084 +1010 +FC90 +1128 +5244 +5DFE +5104 +5104 +5104 +71FC +9800 +87FE +ENDCHAR +STARTCHAR uni8DA7 +ENCODING 36263 +BBX 15 16 0 -2 +BITMAP +0800 +08FC +0884 +7EFC +0884 +08FC +FE00 +09FE +2810 +289C +2E90 +2890 +297E +5A00 +4FFE +8000 +ENDCHAR +STARTCHAR uni8DA8 +ENCODING 36264 +BBX 15 15 1 -1 +BITMAP +1100 +11FC +1244 +7D54 +11F4 +1044 +FE88 +1100 +11FC +5A44 +5154 +71F4 +5048 +8C80 +83FE +ENDCHAR +STARTCHAR uni8DA9 +ENCODING 36265 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +7DFC +1124 +11FC +FC88 +1088 +11FC +5088 +5C88 +53FE +5088 +7104 +5000 +8FFE +ENDCHAR +STARTCHAR uni8DAA +ENCODING 36266 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +11FC +7C88 +1088 +13FE +FC20 +11FC +1124 +51FC +5D24 +51FC +5000 +7088 +5104 +8FFE +ENDCHAR +STARTCHAR uni8DAB +ENCODING 36267 +BBX 15 16 0 -2 +BITMAP +103C +13C0 +1040 +7BFE +1090 +1108 +FAF4 +1492 +13FC +5204 +5AF4 +5294 +52F4 +720C +5000 +8FFE +ENDCHAR +STARTCHAR uni8DAC +ENCODING 36268 +BBX 15 16 0 -2 +BITMAP +0810 +087C +0810 +7EFE +0844 +08EE +FE44 +08EE +2800 +28FE +2E28 +282A +2846 +5880 +4FFE +8000 +ENDCHAR +STARTCHAR uni8DAD +ENCODING 36269 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +11FE +7D20 +13FC +1120 +FDFC +1120 +1120 +51FE +5C00 +52A4 +5252 +7452 +5000 +8FFE +ENDCHAR +STARTCHAR uni8DAE +ENCODING 36270 +BBX 15 16 0 -2 +BITMAP +0800 +087C +0844 +7E7C +0800 +08EE +FEAA +08EE +2810 +28FE +2E38 +2854 +2892 +5810 +4FFE +8000 +ENDCHAR +STARTCHAR uni8DAF +ENCODING 36271 +BBX 15 15 1 -1 +BITMAP +1000 +13DE +7D4A +12D6 +114A +1252 +FCC6 +1110 +53FE +5D10 +51FE +7110 +51FE +8D10 +83FE +ENDCHAR +STARTCHAR uni8DB0 +ENCODING 36272 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1124 +7A22 +17FE +1376 +FAAA +1376 +1222 +5376 +5AAA +5376 +5222 +7206 +5000 +8FFE +ENDCHAR +STARTCHAR uni8DB1 +ENCODING 36273 +BBX 15 16 0 -2 +BITMAP +1108 +1528 +17BE +7948 +17BE +1318 +FDAA +1946 +13F8 +5208 +5A48 +5248 +50A0 +7110 +5208 +8FFE +ENDCHAR +STARTCHAR uni8DB2 +ENCODING 36274 +BBX 15 16 0 -2 +BITMAP +1528 +17BE +1948 +7FBE +1318 +15AA +F946 +13FC +1204 +53FC +5A04 +53FC +5204 +73FC +5108 +8FFE +ENDCHAR +STARTCHAR uni8DB3 +ENCODING 36275 +BBX 15 14 1 -1 +BITMAP +1FF0 +1010 +1010 +1010 +1FF0 +0100 +0100 +0100 +11F8 +1100 +1100 +2D00 +4300 +80FE +ENDCHAR +STARTCHAR uni8DB4 +ENCODING 36276 +BBX 15 15 0 -2 +BITMAP +7C20 +4520 +4520 +4520 +7D20 +1120 +1120 +5D20 +5110 +5110 +5210 +5E08 +E408 +0804 +1002 +ENDCHAR +STARTCHAR uni8DB5 +ENCODING 36277 +BBX 14 16 0 -2 +BITMAP +0040 +7C40 +4440 +44FC +4484 +7D04 +1004 +1104 +5C84 +5044 +5044 +5004 +5C04 +E004 +0028 +0010 +ENDCHAR +STARTCHAR uni8DB6 +ENCODING 36278 +BBX 15 15 0 -2 +BITMAP +7DFC +4420 +4420 +4420 +7C20 +1020 +13FE +5C20 +5020 +5020 +5020 +5C20 +E020 +00A0 +0040 +ENDCHAR +STARTCHAR uni8DB7 +ENCODING 36279 +BBX 15 15 0 -1 +BITMAP +0040 +7C40 +4480 +44FE +4500 +7E00 +10FC +1008 +5C10 +5020 +5040 +5080 +5D02 +E102 +00FE +ENDCHAR +STARTCHAR uni8DB8 +ENCODING 36280 +BBX 15 15 0 -2 +BITMAP +FFFE +0400 +07F0 +0810 +10A0 +6040 +0000 +1FF0 +1010 +1FF0 +0100 +11F8 +1100 +2900 +47FE +ENDCHAR +STARTCHAR uni8DB9 +ENCODING 36281 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +45FC +4424 +7C24 +1024 +1024 +5DFE +5020 +5050 +5050 +5C88 +E088 +0104 +0202 +ENDCHAR +STARTCHAR uni8DBA +ENCODING 36282 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +4420 +44F8 +4420 +7C20 +1020 +1020 +51FC +5C20 +5050 +5050 +5088 +5D04 +E202 +ENDCHAR +STARTCHAR uni8DBB +ENCODING 36283 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4450 +4450 +4488 +7D44 +1222 +1020 +5C00 +51FC +5004 +5008 +5C08 +E010 +0010 +0020 +ENDCHAR +STARTCHAR uni8DBC +ENCODING 36284 +BBX 15 15 0 -2 +BITMAP +7DFE +4448 +4448 +4448 +7C48 +1048 +13FE +5C48 +5048 +5048 +5048 +5C88 +E088 +0108 +0208 +ENDCHAR +STARTCHAR uni8DBD +ENCODING 36285 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +4420 +47FE +4480 +7C80 +1080 +10FC +5C84 +5084 +5084 +5084 +5D04 +E104 +0228 +0410 +ENDCHAR +STARTCHAR uni8DBE +ENCODING 36286 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +4420 +4420 +4420 +7D20 +113C +1120 +5120 +5D20 +5120 +5120 +5120 +5D20 +E3FE +ENDCHAR +STARTCHAR uni8DBF +ENCODING 36287 +BBX 15 15 0 -2 +BITMAP +7BFC +4884 +4888 +4888 +7890 +109C +1084 +5144 +5D44 +5128 +5128 +5A10 +E228 +0444 +0182 +ENDCHAR +STARTCHAR uni8DC0 +ENCODING 36288 +BBX 14 15 0 -2 +BITMAP +7CFC +4484 +4484 +4484 +7CFC +1084 +1084 +5C84 +50FC +5084 +5084 +5D04 +E104 +0214 +0408 +ENDCHAR +STARTCHAR uni8DC1 +ENCODING 36289 +BBX 15 14 0 -1 +BITMAP +7DFC +4524 +4524 +4524 +7D24 +1124 +11FC +1104 +5D00 +5100 +5100 +5102 +5D02 +E0FE +ENDCHAR +STARTCHAR uni8DC2 +ENCODING 36290 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +4420 +47FE +4420 +7C20 +11FC +1084 +5084 +5C88 +5048 +5050 +5020 +5CD8 +E306 +ENDCHAR +STARTCHAR uni8DC3 +ENCODING 36291 +BBX 15 16 0 -2 +BITMAP +0008 +7C3C +45E0 +4420 +4420 +7C20 +13FE +1020 +5C20 +5050 +5050 +5050 +5C88 +E088 +0104 +0202 +ENDCHAR +STARTCHAR uni8DC4 +ENCODING 36292 +BBX 15 15 0 -1 +BITMAP +0020 +7C20 +4450 +4450 +4488 +7D04 +1202 +10F8 +5C88 +5088 +50A8 +5090 +5C82 +E082 +007E +ENDCHAR +STARTCHAR uni8DC5 +ENCODING 36293 +BBX 15 16 0 -2 +BITMAP +0008 +7C1C +45E0 +4500 +4500 +7D00 +11FE +1110 +5D10 +5130 +5118 +5114 +5D12 +E210 +0210 +0410 +ENDCHAR +STARTCHAR uni8DC6 +ENCODING 36294 +BBX 15 15 1 -1 +BITMAP +0040 +7C40 +4440 +4488 +4488 +7D34 +13C2 +1000 +5C00 +51FC +5104 +5104 +5104 +5D04 +E1FC +ENDCHAR +STARTCHAR uni8DC7 +ENCODING 36295 +BBX 15 15 0 -1 +BITMAP +0048 +7D48 +4548 +4548 +4548 +7FFE +1148 +1148 +5D48 +5148 +5178 +5100 +5D00 +E100 +01FE +ENDCHAR +STARTCHAR uni8DC8 +ENCODING 36296 +BBX 15 15 1 -1 +BITMAP +0020 +7C50 +4488 +4504 +4622 +7C40 +1180 +1010 +5C20 +50C0 +5000 +5004 +5008 +5C30 +E1C0 +ENDCHAR +STARTCHAR uni8DC9 +ENCODING 36297 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4450 +4450 +4488 +7D24 +1212 +1010 +5DFC +5004 +5008 +5088 +5C50 +E020 +0010 +0010 +ENDCHAR +STARTCHAR uni8DCA +ENCODING 36298 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +45FC +4420 +7C20 +1020 +13FE +5C70 +50A8 +50A8 +5124 +5D24 +E222 +0020 +0020 +ENDCHAR +STARTCHAR uni8DCB +ENCODING 36299 +BBX 15 15 1 -1 +BITMAP +0048 +7C44 +4444 +45FE +4440 +7C80 +1088 +1088 +5150 +5D50 +5220 +5020 +5050 +5C88 +E106 +ENDCHAR +STARTCHAR uni8DCC +ENCODING 36300 +BBX 15 15 1 -1 +BITMAP +0020 +7D20 +4520 +45FC +4520 +7E20 +1220 +1020 +53FE +5C20 +5050 +5050 +5088 +5D04 +E202 +ENDCHAR +STARTCHAR uni8DCD +ENCODING 36301 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +4420 +47FE +7C20 +1020 +1020 +11FC +5D04 +5104 +5104 +5104 +5D04 +E1FC +0104 +ENDCHAR +STARTCHAR uni8DCE +ENCODING 36302 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +45FE +4502 +4502 +7C40 +1044 +5048 +5C70 +5040 +5040 +5040 +5C42 +7042 +C03E +ENDCHAR +STARTCHAR uni8DCF +ENCODING 36303 +BBX 15 15 1 -1 +BITMAP +0100 +7900 +4900 +491E +4FD2 +7952 +1152 +1152 +5152 +5D52 +5152 +5152 +5252 +5A5E +E480 +ENDCHAR +STARTCHAR uni8DD0 +ENCODING 36304 +BBX 15 15 0 -1 +BITMAP +0048 +7C48 +4448 +4548 +454A +7D6C +1148 +1148 +5D48 +5148 +5148 +514A +5D6A +E38A +0106 +ENDCHAR +STARTCHAR uni8DD1 +ENCODING 36305 +BBX 15 15 1 -1 +BITMAP +0080 +7C80 +44FC +4484 +4504 +7DF4 +1314 +5114 +5D14 +51F4 +510C +5100 +5D00 +7102 +C0FE +ENDCHAR +STARTCHAR uni8DD2 +ENCODING 36306 +BBX 15 15 0 -2 +BITMAP +7C00 +45FE +4408 +4408 +7DE8 +1128 +1128 +1128 +5D28 +51E8 +5128 +5008 +5C08 +E028 +0010 +ENDCHAR +STARTCHAR uni8DD3 +ENCODING 36307 +BBX 15 15 0 -1 +BITMAP +0040 +7C20 +4400 +47FE +4420 +7C20 +1020 +1020 +5DFC +5020 +5020 +5020 +5C20 +E020 +03FE +ENDCHAR +STARTCHAR uni8DD4 +ENCODING 36308 +BBX 14 16 0 -2 +BITMAP +0080 +7C80 +4500 +45FC +4604 +7C04 +11E4 +1124 +5D24 +5124 +51E4 +5124 +5C04 +E004 +0028 +0010 +ENDCHAR +STARTCHAR uni8DD5 +ENCODING 36309 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +4420 +443E +7C20 +1020 +1020 +11FC +5D04 +5104 +5104 +5104 +5D04 +E1FC +0104 +ENDCHAR +STARTCHAR uni8DD6 +ENCODING 36310 +BBX 15 14 1 -1 +BITMAP +7DFE +4440 +4440 +4440 +7C40 +1080 +10FC +5084 +5D84 +5284 +5084 +5084 +5C84 +E0FC +ENDCHAR +STARTCHAR uni8DD7 +ENCODING 36311 +BBX 15 15 1 -1 +BITMAP +0084 +7884 +4884 +497E +4904 +7B04 +1504 +5124 +5914 +5114 +5104 +5104 +5904 +7104 +C11C +ENDCHAR +STARTCHAR uni8DD8 +ENCODING 36312 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4524 +44A4 +44A8 +7C20 +11FC +1020 +5C20 +5020 +53FE +5020 +5C20 +E020 +0020 +0020 +ENDCHAR +STARTCHAR uni8DD9 +ENCODING 36313 +BBX 15 14 1 -1 +BITMAP +7CF8 +4488 +4488 +4488 +7CF8 +1088 +1088 +5C88 +50F8 +5088 +5088 +5088 +5C88 +E3FE +ENDCHAR +STARTCHAR uni8DDA +ENCODING 36314 +BBX 15 14 1 -1 +BITMAP +7DFC +4554 +4554 +4554 +7D54 +1154 +13FE +5154 +5D54 +5154 +5154 +5154 +5D54 +E10C +ENDCHAR +STARTCHAR uni8DDB +ENCODING 36315 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +4420 +45FE +4522 +7D24 +1120 +11FC +5144 +5D44 +5128 +5128 +5110 +5D28 +E246 +ENDCHAR +STARTCHAR uni8DDC +ENCODING 36316 +BBX 15 15 0 -2 +BITMAP +7DFC +4504 +4504 +4504 +7DFC +1100 +1140 +5D44 +5148 +5170 +5140 +5D42 +E242 +023E +0400 +ENDCHAR +STARTCHAR uni8DDD +ENCODING 36317 +BBX 15 14 1 -1 +BITMAP +7DFC +4500 +4500 +4500 +7DFC +1104 +1104 +5104 +5DFC +5100 +5100 +5D00 +7100 +C1FE +ENDCHAR +STARTCHAR uni8DDE +ENCODING 36318 +BBX 15 16 0 -2 +BITMAP +0008 +7C1C +45E0 +4500 +4520 +7D20 +1120 +11FE +5C20 +5020 +50A8 +50A4 +5D22 +E222 +00A0 +0040 +ENDCHAR +STARTCHAR uni8DDF +ENCODING 36319 +BBX 15 14 1 -1 +BITMAP +7DFC +4504 +4504 +45FC +7D04 +1104 +11FC +5122 +5D24 +5128 +5110 +5110 +5DE8 +E306 +ENDCHAR +STARTCHAR uni8DE0 +ENCODING 36320 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +47FE +4420 +45FC +7C24 +11FC +1120 +11FE +5C22 +502A +5054 +5050 +5C88 +E104 +0202 +ENDCHAR +STARTCHAR uni8DE1 +ENCODING 36321 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +4420 +47FE +4450 +7C50 +1154 +1154 +5E52 +5252 +5050 +5050 +5090 +5C90 +E130 +ENDCHAR +STARTCHAR uni8DE2 +ENCODING 36322 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +447C +4484 +4548 +7C30 +1020 +1048 +5D90 +503E +5042 +51A4 +5C18 +E010 +0060 +0180 +ENDCHAR +STARTCHAR uni8DE3 +ENCODING 36323 +BBX 15 15 1 -1 +BITMAP +0020 +7CA0 +44A0 +45FE +4520 +7C20 +1020 +13FE +5090 +5C90 +5090 +5090 +5110 +5D12 +E20E +ENDCHAR +STARTCHAR uni8DE4 +ENCODING 36324 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +4420 +45FE +4400 +7C88 +1104 +1202 +1088 +5C88 +5050 +5050 +5020 +5C50 +E088 +0306 +ENDCHAR +STARTCHAR uni8DE5 +ENCODING 36325 +BBX 15 15 0 -2 +BITMAP +7DFC +4444 +4448 +445E +7C82 +108A +1124 +5C20 +53FE +5020 +5070 +5CA8 +E124 +0222 +0020 +ENDCHAR +STARTCHAR uni8DE6 +ENCODING 36326 +BBX 15 16 0 -2 +BITMAP +0020 +7D20 +4520 +45FC +4520 +7E20 +1020 +13FE +5C70 +50A8 +50A8 +5124 +5D24 +E222 +0020 +0020 +ENDCHAR +STARTCHAR uni8DE7 +ENCODING 36327 +BBX 15 15 0 -1 +BITMAP +0020 +7C20 +4450 +4488 +4504 +7E02 +11FC +1020 +5C20 +5020 +51FC +5020 +5C20 +E020 +03FE +ENDCHAR +STARTCHAR uni8DE8 +ENCODING 36328 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +47FE +4450 +4488 +7F06 +10F8 +1000 +5DFE +5040 +50FC +5104 +5C04 +7004 +C038 +ENDCHAR +STARTCHAR uni8DE9 +ENCODING 36329 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +45FC +4524 +4524 +7DFC +1124 +1124 +5DFC +5020 +5024 +5018 +5C32 +E0CA +0306 +0002 +ENDCHAR +STARTCHAR uni8DEA +ENCODING 36330 +BBX 15 15 1 -1 +BITMAP +0080 +7CF8 +4488 +4510 +47FE +7D00 +1100 +117C +5144 +5D44 +514C +5140 +5142 +5D42 +E23E +ENDCHAR +STARTCHAR uni8DEB +ENCODING 36331 +BBX 15 14 1 -1 +BITMAP +7DF8 +1108 +1148 +1128 +1D2A +E206 +1FF0 +1010 +1010 +1FF0 +0900 +19F8 +2700 +C0FE +ENDCHAR +STARTCHAR uni8DEC +ENCODING 36332 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +44FC +4420 +4420 +7C20 +11FE +1000 +5C20 +5020 +50FC +5020 +5020 +5C20 +E3FE +ENDCHAR +STARTCHAR uni8DED +ENCODING 36333 +BBX 15 16 0 -2 +BITMAP +0080 +7880 +48FC +4908 +4A90 +7860 +1198 +1626 +1020 +5DFC +5020 +5220 +53FE +5C20 +E020 +0020 +ENDCHAR +STARTCHAR uni8DEE +ENCODING 36334 +BBX 15 14 0 -1 +BITMAP +7DFE +4420 +4440 +4488 +7D04 +11FE +1022 +5C20 +5020 +51FE +5020 +5C20 +E020 +03FE +ENDCHAR +STARTCHAR uni8DEF +ENCODING 36335 +BBX 15 15 1 -1 +BITMAP +0040 +7C40 +44F8 +4508 +4708 +7C90 +1060 +1090 +5D08 +57FE +5108 +5108 +5D08 +7108 +C1F8 +ENDCHAR +STARTCHAR uni8DF0 +ENCODING 36336 +BBX 15 16 0 -2 +BITMAP +0104 +7C84 +4488 +4400 +45FE +7C88 +1088 +1088 +5C88 +53FE +5088 +5088 +5D08 +E108 +0208 +0408 +ENDCHAR +STARTCHAR uni8DF1 +ENCODING 36337 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +45FC +4420 +7C20 +13FE +1008 +1008 +5DFE +5008 +5088 +5048 +5C08 +E028 +0010 +ENDCHAR +STARTCHAR uni8DF2 +ENCODING 36338 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4450 +4488 +4504 +7E02 +11FC +1000 +1000 +5DFC +5104 +5104 +5104 +5D04 +E1FC +0104 +ENDCHAR +STARTCHAR uni8DF3 +ENCODING 36339 +BBX 15 15 1 -1 +BITMAP +0090 +7C90 +4492 +4694 +4598 +7C90 +1090 +1090 +5098 +5D94 +5292 +5090 +5112 +5D12 +E20E +ENDCHAR +STARTCHAR uni8DF4 +ENCODING 36340 +BBX 15 15 0 -2 +BITMAP +7BFE +4850 +4850 +4850 +79FC +1154 +1154 +1D54 +5154 +515C +5184 +5104 +5D04 +E1FC +0104 +ENDCHAR +STARTCHAR uni8DF5 +ENCODING 36341 +BBX 15 15 1 -1 +BITMAP +0050 +7C48 +47FC +4440 +4440 +47FC +7C40 +1040 +13FE +5C24 +5028 +5030 +5C52 +618A +8E04 +ENDCHAR +STARTCHAR uni8DF6 +ENCODING 36342 +BBX 15 15 0 -1 +BITMAP +0010 +7A10 +4910 +4910 +48FE +7810 +1310 +1128 +5124 +5D44 +5142 +5182 +5900 +E280 +047E +ENDCHAR +STARTCHAR uni8DF7 +ENCODING 36343 +BBX 15 16 0 -2 +BITMAP +0080 +7C80 +44BC +47C0 +4450 +7C24 +10D4 +130C +5C00 +53FE +5090 +5090 +5D12 +E112 +020E +0400 +ENDCHAR +STARTCHAR uni8DF8 +ENCODING 36344 +BBX 15 16 0 -2 +BITMAP +0110 +7D12 +4514 +45D8 +4510 +7D12 +1152 +118E +1120 +5C20 +53FE +5020 +5020 +5C20 +E020 +0020 +ENDCHAR +STARTCHAR uni8DF9 +ENCODING 36345 +BBX 15 14 0 -1 +BITMAP +7A0C +4970 +4910 +4810 +7810 +10FE +1710 +5110 +5D10 +5110 +5110 +5910 +E280 +047E +ENDCHAR +STARTCHAR uni8DFA +ENCODING 36346 +BBX 15 15 0 -2 +BITMAP +7CF8 +4488 +4488 +4488 +7C88 +1126 +1220 +5DFE +5020 +5070 +50A8 +5D24 +E222 +0020 +0020 +ENDCHAR +STARTCHAR uni8DFB +ENCODING 36347 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FE +4488 +4450 +7C20 +1050 +1088 +1106 +5C88 +5088 +5088 +5088 +5D08 +E108 +0208 +ENDCHAR +STARTCHAR uni8DFC +ENCODING 36348 +BBX 15 14 1 -1 +BITMAP +7DFC +4504 +4504 +45FC +7D00 +11FE +1102 +517A +5D4A +514A +524A +527A +5C02 +E00C +ENDCHAR +STARTCHAR uni8DFD +ENCODING 36349 +BBX 15 14 1 -1 +BITMAP +7DF8 +4408 +4408 +45F8 +7D00 +1104 +1104 +5CFC +5000 +5020 +5154 +5142 +5E4A +E238 +ENDCHAR +STARTCHAR uni8DFE +ENCODING 36350 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +24FE +6488 +A550 +2420 +2450 +2088 +1FF4 +1010 +1FF0 +0100 +11F8 +1100 +2900 +47FE +ENDCHAR +STARTCHAR uni8DFF +ENCODING 36351 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +45FC +4420 +4420 +7C20 +13FE +1020 +5020 +5D3C +5120 +5120 +51A0 +5D60 +E21E +ENDCHAR +STARTCHAR uni8E00 +ENCODING 36352 +BBX 15 15 0 -2 +BITMAP +7DFC +4504 +4504 +4504 +7DFC +1020 +1020 +5D20 +513C +5120 +5120 +5EA0 +E260 +043E +0800 +ENDCHAR +STARTCHAR uni8E01 +ENCODING 36353 +BBX 15 14 0 -1 +BITMAP +7DFE +4400 +4492 +4524 +7E48 +1124 +1092 +1000 +5DFE +5020 +5020 +5020 +5C20 +E3FE +ENDCHAR +STARTCHAR uni8E02 +ENCODING 36354 +BBX 15 15 0 -2 +BITMAP +7BFE +4920 +4928 +4928 +79E8 +1128 +1128 +5128 +5DE8 +5128 +512A +593A +E3EA +0026 +0020 +ENDCHAR +STARTCHAR uni8E03 +ENCODING 36355 +BBX 14 16 0 -2 +BITMAP +0020 +7D24 +44A4 +44A8 +4420 +7DFC +1104 +1104 +5DFC +5104 +5104 +51FC +5D04 +E104 +0114 +0108 +ENDCHAR +STARTCHAR uni8E04 +ENCODING 36356 +BBX 15 16 0 -2 +BITMAP +0010 +7C10 +4490 +449E +4490 +7C90 +13FE +1000 +5C10 +5092 +5092 +5114 +5E08 +E010 +0060 +0380 +ENDCHAR +STARTCHAR uni8E05 +ENCODING 36357 +BBX 15 16 0 -2 +BITMAP +080C +08F0 +7E80 +0880 +0EFE +7888 +0888 +2908 +1208 +1FF0 +1010 +1FF0 +0100 +11F8 +3100 +CFFE +ENDCHAR +STARTCHAR uni8E06 +ENCODING 36358 +BBX 15 15 1 -1 +BITMAP +0040 +7C48 +4484 +45FA +444A +7C88 +110E +1040 +5C78 +5088 +5188 +5050 +5020 +5CD8 +F306 +ENDCHAR +STARTCHAR uni8E07 +ENCODING 36359 +BBX 15 16 0 -2 +BITMAP +0080 +7C80 +44FE +4500 +46FC +7C84 +10A4 +1094 +5DFE +5084 +5124 +5114 +5DFE +E004 +0028 +0010 +ENDCHAR +STARTCHAR uni8E08 +ENCODING 36360 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +47FE +4420 +45FC +7D24 +1124 +1124 +51FC +5CA8 +50A8 +5124 +5124 +5E22 +E020 +ENDCHAR +STARTCHAR uni8E09 +ENCODING 36361 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +45F8 +4508 +4508 +7DF8 +1108 +1108 +51FA +5D24 +5128 +5110 +5110 +5DE8 +E306 +ENDCHAR +STARTCHAR uni8E0A +ENCODING 36362 +BBX 14 14 1 -1 +BITMAP +7BFC +4808 +4910 +48A0 +7BFC +1244 +1244 +5BFC +5244 +5244 +53FC +5E44 +7244 +C24C +ENDCHAR +STARTCHAR uni8E0B +ENCODING 36363 +BBX 15 16 0 -2 +BITMAP +0100 +F100 +911E +9392 +9112 +F112 +2112 +27D2 +A112 +B912 +A21A +A294 +A7D0 +B250 +C010 +0010 +ENDCHAR +STARTCHAR uni8E0C +ENCODING 36364 +BBX 15 15 1 -1 +BITMAP +0040 +7C40 +47FC +4440 +47F8 +7C40 +17FC +1080 +5888 +57FE +5108 +5248 +5428 +5808 +E038 +ENDCHAR +STARTCHAR uni8E0D +ENCODING 36365 +BBX 15 16 0 -2 +BITMAP +0020 +7C22 +45FA +4424 +4424 +7DFE +1010 +1020 +11FC +5C88 +5110 +52FE +5410 +5C10 +E050 +0020 +ENDCHAR +STARTCHAR uni8E0E +ENCODING 36366 +BBX 15 15 0 -2 +BITMAP +7DFE +4410 +4420 +4468 +7CA4 +1122 +1020 +1000 +5CFC +5084 +5084 +5084 +5C84 +E0FC +0084 +ENDCHAR +STARTCHAR uni8E0F +ENCODING 36367 +BBX 15 15 1 -1 +BITMAP +0020 +7C24 +45B8 +44B0 +44A8 +7D26 +1060 +5000 +5DFC +5104 +5104 +51FC +5D04 +7104 +C1FC +ENDCHAR +STARTCHAR uni8E10 +ENCODING 36368 +BBX 15 15 1 -1 +BITMAP +0090 +7C88 +44FC +4780 +444C +7C72 +139C +1090 +5088 +5CFC +5380 +504C +5030 +5CD2 +E30C +ENDCHAR +STARTCHAR uni8E11 +ENCODING 36369 +BBX 15 16 0 -2 +BITMAP +0088 +7C88 +47FE +4488 +4488 +7CF8 +1088 +1088 +5CF8 +5088 +5088 +53FE +5C00 +E088 +0104 +0202 +ENDCHAR +STARTCHAR uni8E12 +ENCODING 36370 +BBX 15 16 0 -2 +BITMAP +001C +7DE0 +4420 +4420 +47FE +7CA8 +1124 +1242 +5C40 +53FE +5088 +5108 +5CD0 +E030 +0048 +0184 +ENDCHAR +STARTCHAR uni8E13 +ENCODING 36371 +BBX 15 16 0 -2 +BITMAP +00A0 +7C90 +4490 +45FE +4520 +7D20 +13FC +1120 +1120 +5DFC +5120 +5120 +5120 +5DFE +E100 +0100 +ENDCHAR +STARTCHAR uni8E14 +ENCODING 36372 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +443C +4420 +45FC +7D04 +11FC +1104 +5D04 +51FC +5020 +53FE +5020 +5C20 +E020 +ENDCHAR +STARTCHAR uni8E15 +ENCODING 36373 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +47FE +4420 +45FC +7C24 +13FE +1024 +5DFC +5020 +5120 +513E +5D20 +E2A0 +027E +0400 +ENDCHAR +STARTCHAR uni8E16 +ENCODING 36374 +BBX 15 15 1 -1 +BITMAP +0090 +7C90 +45FC +4490 +4490 +7C90 +13FE +1000 +5DF8 +5108 +5108 +51F8 +5108 +5D08 +E1F8 +ENDCHAR +STARTCHAR uni8E17 +ENCODING 36375 +BBX 15 15 0 -1 +BITMAP +0020 +7C20 +4450 +4488 +4544 +7E22 +11F8 +1008 +5C50 +5020 +50A4 +5282 +5E8A +E28A +0478 +ENDCHAR +STARTCHAR uni8E18 +ENCODING 36376 +BBX 14 16 0 -2 +BITMAP +0100 +7D00 +45FC +4604 +4444 +7D54 +10E4 +1044 +13FC +5C44 +50E4 +5154 +5244 +5C44 +E014 +0008 +ENDCHAR +STARTCHAR uni8E19 +ENCODING 36377 +BBX 15 15 0 -2 +BITMAP +7BE0 +495C +4954 +49D4 +7954 +1154 +11D4 +5154 +5D54 +5168 +53C8 +5848 +E054 +0054 +0062 +ENDCHAR +STARTCHAR uni8E1A +ENCODING 36378 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4450 +4488 +4504 +7EFA +1000 +11FC +1154 +5D54 +51FC +5154 +5154 +5D54 +E104 +010C +ENDCHAR +STARTCHAR uni8E1B +ENCODING 36379 +BBX 15 15 0 -1 +BITMAP +0020 +7C20 +45FC +4420 +4420 +7DFE +1088 +1104 +5E22 +5020 +51FC +5020 +5C20 +E020 +03FE +ENDCHAR +STARTCHAR uni8E1C +ENCODING 36380 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +49FC +4820 +4820 +7BFE +1088 +1144 +1242 +5CF8 +5188 +5250 +5020 +5C50 +E188 +0606 +ENDCHAR +STARTCHAR uni8E1D +ENCODING 36381 +BBX 15 14 1 -1 +BITMAP +7DFC +4524 +4524 +45FC +7D24 +1124 +11FC +5C20 +53FE +50A8 +50A8 +5124 +5E22 +E020 +ENDCHAR +STARTCHAR uni8E1E +ENCODING 36382 +BBX 15 14 1 -1 +BITMAP +7DFC +4504 +4504 +45FC +7D10 +1110 +11FE +5110 +5D10 +52FE +5282 +5082 +5C82 +E0FE +ENDCHAR +STARTCHAR uni8E1F +ENCODING 36383 +BBX 15 14 1 -1 +BITMAP +7D00 +4500 +451E +45D2 +7E92 +1092 +1092 +53F2 +5C92 +5092 +5152 +5132 +5E1E +E400 +ENDCHAR +STARTCHAR uni8E20 +ENCODING 36384 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4BFC +4A04 +4A04 +7900 +11BC +52A4 +5AA4 +52A4 +55AC +5120 +5922 +7222 +C41E +ENDCHAR +STARTCHAR uni8E21 +ENCODING 36385 +BBX 15 15 1 -1 +BITMAP +00A8 +7CA4 +4524 +45FC +4450 +7C50 +13FE +1088 +5CF8 +518C +528A +5098 +5080 +5C82 +E07E +ENDCHAR +STARTCHAR uni8E22 +ENCODING 36386 +BBX 15 14 1 -1 +BITMAP +7DF8 +4508 +45F8 +4508 +7D08 +11F8 +1080 +5CFE +512A +564A +5092 +5324 +5C44 +E198 +ENDCHAR +STARTCHAR uni8E23 +ENCODING 36387 +BBX 15 15 1 -1 +BITMAP +0040 +7C40 +47FC +4508 +4488 +7C90 +13FE +5000 +5C00 +51F8 +5108 +5108 +5D08 +7108 +C1F8 +ENDCHAR +STARTCHAR uni8E24 +ENCODING 36388 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FE +4400 +4488 +7C88 +1154 +1222 +1000 +5C20 +53FE +5020 +5020 +5C20 +E020 +0020 +ENDCHAR +STARTCHAR uni8E25 +ENCODING 36389 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FC +4400 +4488 +7C50 +13FE +1040 +5C40 +53FE +5088 +5188 +5C50 +E030 +00C8 +0304 +ENDCHAR +STARTCHAR uni8E26 +ENCODING 36390 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +45FC +4450 +4488 +7D04 +13FE +1008 +5DE8 +5128 +5128 +51E8 +5D28 +E008 +0028 +0010 +ENDCHAR +STARTCHAR uni8E27 +ENCODING 36391 +BBX 15 15 1 -1 +BITMAP +0100 +793E +49E2 +4922 +4922 +7922 +17E4 +1114 +5914 +5548 +5548 +5554 +5554 +5922 +E342 +ENDCHAR +STARTCHAR uni8E28 +ENCODING 36392 +BBX 15 16 0 -2 +BITMAP +0088 +7888 +4888 +4888 +4954 +7A22 +1442 +1020 +5020 +5D20 +513C +5120 +5AA0 +E260 +043E +0800 +ENDCHAR +STARTCHAR uni8E29 +ENCODING 36393 +BBX 15 16 0 -2 +BITMAP +0008 +7C3C +45C0 +4444 +4524 +7CA8 +1080 +1020 +5DFE +5070 +50A8 +50A8 +5D24 +E222 +0420 +0020 +ENDCHAR +STARTCHAR uni8E2A +ENCODING 36394 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4BFE +4A02 +4A02 +79FC +1000 +1000 +53FE +5820 +5124 +5124 +5222 +5A22 +E060 +ENDCHAR +STARTCHAR uni8E2B +ENCODING 36395 +BBX 15 15 0 -1 +BITMAP +0108 +7C90 +4400 +45FC +4490 +7C90 +1092 +1292 +1194 +5D98 +5090 +5090 +5090 +5C90 +E3FE +ENDCHAR +STARTCHAR uni8E2C +ENCODING 36396 +BBX 15 16 0 -2 +BITMAP +001C +7DE0 +4510 +4510 +45FE +7D10 +1110 +117C +5D44 +5154 +5154 +5154 +5D54 +E228 +0244 +0482 +ENDCHAR +STARTCHAR uni8E2D +ENCODING 36397 +BBX 15 16 0 -2 +BITMAP +0080 +7C80 +44F8 +4508 +4610 +7DFC +1024 +1024 +5DFE +5024 +5024 +51FC +5C24 +E020 +00A0 +0040 +ENDCHAR +STARTCHAR uni8E2E +ENCODING 36398 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +45FE +4500 +4520 +7D20 +113C +1120 +5D20 +517C +5144 +5144 +5D44 +E244 +027C +0444 +ENDCHAR +STARTCHAR uni8E2F +ENCODING 36399 +BBX 15 16 0 -2 +BITMAP +0440 +F25E +9292 +9012 +97D4 +F114 +2118 +2114 +A7F2 +B912 +A112 +A11A +BA94 +E250 +0450 +0810 +ENDCHAR +STARTCHAR uni8E30 +ENCODING 36400 +BBX 15 15 1 -1 +BITMAP +0020 +7C50 +4488 +4706 +44F8 +7C00 +13CA +124A +5354 +5ED4 +5368 +52D4 +5254 +5E4A +E2CA +ENDCHAR +STARTCHAR uni8E31 +ENCODING 36401 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FE +4548 +4548 +7DFE +1148 +1178 +5D00 +51FC +5144 +5148 +5D28 +E210 +0228 +04C6 +ENDCHAR +STARTCHAR uni8E32 +ENCODING 36402 +BBX 15 16 0 -2 +BITMAP +0008 +7C1C +45F0 +4510 +4510 +7DFE +1110 +117C +5D44 +517C +5144 +517C +5D44 +E244 +027C +0444 +ENDCHAR +STARTCHAR uni8E33 +ENCODING 36403 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +47FE +4420 +45FC +7C40 +13FE +1088 +5D04 +52FA +5088 +5088 +5CF8 +E088 +0088 +00F8 +ENDCHAR +STARTCHAR uni8E34 +ENCODING 36404 +BBX 15 14 1 -1 +BITMAP +7DFC +4408 +4450 +45FC +7D24 +11FC +1124 +5124 +5DFC +5020 +53FE +5042 +5C82 +E31C +ENDCHAR +STARTCHAR uni8E35 +ENCODING 36405 +BBX 15 15 1 -1 +BITMAP +001C +7DE0 +4420 +47FE +4420 +7DFC +1124 +11FC +5124 +5DFC +5020 +51FC +5020 +5C20 +E3FE +ENDCHAR +STARTCHAR uni8E36 +ENCODING 36406 +BBX 15 14 1 -1 +BITMAP +7CFC +4484 +44FC +4484 +7C84 +10FC +1000 +5DFE +5020 +5120 +513C +51A0 +5D60 +E23E +ENDCHAR +STARTCHAR uni8E37 +ENCODING 36407 +BBX 15 16 0 -2 +BITMAP +0020 +7C22 +45FA +4424 +4428 +7FFE +1020 +1040 +10FC +5D84 +5284 +50FC +5084 +5C84 +E0FC +0084 +ENDCHAR +STARTCHAR uni8E38 +ENCODING 36408 +BBX 15 15 0 -1 +BITMAP +0088 +7C88 +47FE +4488 +44F8 +7C88 +10F8 +1088 +5C88 +53FE +5100 +5148 +5D84 +E100 +01FE +ENDCHAR +STARTCHAR uni8E39 +ENCODING 36409 +BBX 15 15 1 -1 +BITMAP +0020 +7D22 +4522 +4522 +45FE +7C00 +11FE +1020 +5C40 +51FE +5152 +5152 +5152 +5D52 +E156 +ENDCHAR +STARTCHAR uni8E3A +ENCODING 36410 +BBX 15 15 0 -1 +BITMAP +0010 +7810 +4F7C +4914 +49FE +7A14 +127C +1710 +517C +5D10 +55FE +5210 +5A10 +E500 +08FE +ENDCHAR +STARTCHAR uni8E3B +ENCODING 36411 +BBX 15 15 0 -2 +BITMAP +7CFC +4484 +4484 +44F4 +7C94 +1094 +11FE +5D02 +517A +514A +514A +5D7A +E102 +010A +0104 +ENDCHAR +STARTCHAR uni8E3C +ENCODING 36412 +BBX 15 15 0 -2 +BITMAP +7CFC +4484 +44FC +4484 +7CFC +1000 +11FE +5C80 +50FE +512A +524A +5C92 +E122 +0054 +0088 +ENDCHAR +STARTCHAR uni8E3D +ENCODING 36413 +BBX 15 15 1 -1 +BITMAP +001C +7DE0 +4420 +45FC +4524 +7D24 +11FC +5020 +5FFE +5222 +522A +5236 +5EC6 +7202 +C206 +ENDCHAR +STARTCHAR uni8E3E +ENCODING 36414 +BBX 15 15 0 -2 +BITMAP +7DFE +4400 +44FC +4484 +7C84 +10FC +1000 +11FE +5D22 +5122 +51FE +5122 +5D22 +E1FE +0102 +ENDCHAR +STARTCHAR uni8E3F +ENCODING 36415 +BBX 15 16 0 -2 +BITMAP +0008 +78C8 +4B08 +4908 +492A +792A +13AC +1148 +1D08 +5388 +5554 +5114 +5114 +5D24 +E124 +0142 +ENDCHAR +STARTCHAR uni8E40 +ENCODING 36416 +BBX 15 16 0 -2 +BITMAP +0048 +7D48 +4548 +47FE +4548 +7D48 +1178 +1100 +5DFE +5020 +53FE +5070 +5CA8 +E124 +0622 +0020 +ENDCHAR +STARTCHAR uni8E41 +ENCODING 36417 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FE +4502 +4502 +7DFE +1100 +1100 +5DFE +51AA +51AA +52FE +5EAA +E2AA +04A2 +0086 +ENDCHAR +STARTCHAR uni8E42 +ENCODING 36418 +BBX 15 14 1 -1 +BITMAP +7CFC +4448 +4430 +45FE +7CA4 +10A8 +1120 +5060 +5C20 +53FE +50A8 +5124 +5E22 +E020 +ENDCHAR +STARTCHAR uni8E43 +ENCODING 36419 +BBX 15 16 0 -2 +BITMAP +0088 +7C88 +47FE +4488 +44A8 +7C20 +13FE +1040 +1080 +5CFC +5184 +5284 +5084 +5C84 +E0FC +0084 +ENDCHAR +STARTCHAR uni8E44 +ENCODING 36420 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4BFE +4888 +4848 +7850 +13FE +5222 +5E22 +51FC +5124 +5124 +5D24 +712C +C020 +ENDCHAR +STARTCHAR uni8E45 +ENCODING 36421 +BBX 15 15 0 -1 +BITMAP +0020 +7C20 +47FE +4470 +44A8 +7D24 +1222 +11FC +5D04 +51FC +5104 +51FC +5D04 +E000 +03FE +ENDCHAR +STARTCHAR uni8E46 +ENCODING 36422 +BBX 15 15 0 -2 +BITMAP +7A7C +4944 +4944 +487C +7844 +1744 +117C +1150 +5D4A +5144 +5154 +5162 +5D42 +E280 +047E +ENDCHAR +STARTCHAR uni8E47 +ENCODING 36423 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +5FF4 +0440 +1FF0 +0440 +FFFE +2828 +CFE6 +0900 +09FC +1780 +607E +ENDCHAR +STARTCHAR uni8E48 +ENCODING 36424 +BBX 15 15 1 -1 +BITMAP +001C +7DE4 +4524 +4512 +4612 +7C00 +1020 +1040 +519C +5D04 +5104 +51DC +5104 +5D04 +E1FC +ENDCHAR +STARTCHAR uni8E49 +ENCODING 36425 +BBX 15 15 1 -1 +BITMAP +0108 +7C90 +47FC +4440 +45F0 +7C40 +1040 +13FC +5040 +5C80 +51FC +5220 +5020 +5C20 +E3FE +ENDCHAR +STARTCHAR uni8E4A +ENCODING 36426 +BBX 15 15 1 -1 +BITMAP +001C +7DE4 +4522 +4612 +4440 +7C90 +1120 +10C8 +5C74 +53C4 +5020 +53FE +5050 +5C88 +E306 +ENDCHAR +STARTCHAR uni8E4B +ENCODING 36427 +BBX 15 14 1 -1 +BITMAP +7DFC +4504 +45FC +4504 +7DFC +1000 +11DE +5CC6 +534A +5052 +50C6 +534A +5C52 +E0C6 +ENDCHAR +STARTCHAR uni8E4C +ENCODING 36428 +BBX 15 15 1 -1 +BITMAP +0020 +7C50 +4488 +4776 +4400 +7CF8 +1088 +10F8 +5088 +5CF8 +5100 +51FC +5284 +5C84 +E0FC +ENDCHAR +STARTCHAR uni8E4D +ENCODING 36429 +BBX 15 15 0 -2 +BITMAP +7BFC +4A04 +4A04 +4BFC +7A48 +1248 +12FC +1248 +5E48 +53FE +52A4 +52A8 +5C90 +E4C8 +0886 +ENDCHAR +STARTCHAR uni8E4E +ENCODING 36430 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +47FE +4420 +45FC +7D04 +11FC +1104 +11FC +5D04 +51FC +5104 +53FE +5C88 +E104 +0202 +ENDCHAR +STARTCHAR uni8E4F +ENCODING 36431 +BBX 15 16 0 -2 +BITMAP +0004 +781E +4BF0 +4A1E +4A10 +7AFE +1292 +1298 +52F2 +5E8E +5280 +52B8 +5AA8 +E4AA +054A +0A86 +ENDCHAR +STARTCHAR uni8E50 +ENCODING 36432 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +47AE +4420 +4756 +7C50 +1088 +10F8 +518C +5AFA +5088 +50F8 +5088 +5C88 +E098 +ENDCHAR +STARTCHAR uni8E51 +ENCODING 36433 +BBX 15 15 0 -2 +BITMAP +7DFE +4484 +44FC +4484 +7CFC +1086 +13FC +5C04 +53DE +5052 +5152 +5C94 +E148 +0254 +0422 +ENDCHAR +STARTCHAR uni8E52 +ENCODING 36434 +BBX 15 16 0 -2 +BITMAP +0048 +7C48 +45FE +4448 +4400 +7DFE +1048 +1048 +5DFE +514A +514A +51B6 +5D22 +E102 +010A +0104 +ENDCHAR +STARTCHAR uni8E53 +ENCODING 36435 +BBX 14 16 0 -2 +BITMAP +0040 +7DBC +4514 +4594 +4554 +7DA4 +114C +1000 +11FC +5D24 +5124 +51FC +5124 +5D24 +E1FC +0104 +ENDCHAR +STARTCHAR uni8E54 +ENCODING 36436 +BBX 15 15 1 -1 +BITMAP +080C +FF70 +0840 +7E7E +4A48 +7E48 +4A88 +FFF8 +1010 +1FF0 +0100 +09F0 +0900 +1700 +60FE +ENDCHAR +STARTCHAR uni8E55 +ENCODING 36437 +BBX 15 14 1 -1 +BITMAP +7DFC +4524 +45FC +4524 +7DFC +10A8 +13FE +50A8 +5CA8 +51FC +5020 +51FC +5C20 +E020 +ENDCHAR +STARTCHAR uni8E56 +ENCODING 36438 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +47FE +4420 +45FC +7C40 +13FE +1088 +5D04 +5242 +559C +5104 +5DDC +E104 +01FC +0104 +ENDCHAR +STARTCHAR uni8E57 +ENCODING 36439 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4A50 +4A50 +7BFE +1252 +1252 +53FE +5E00 +5292 +52D4 +5A98 +E492 +04D2 +088E +ENDCHAR +STARTCHAR uni8E58 +ENCODING 36440 +BBX 15 15 0 -2 +BITMAP +7BDE +4842 +4A52 +494A +7A52 +1028 +10C4 +5312 +5C60 +5188 +5032 +59C4 +E018 +0060 +0380 +ENDCHAR +STARTCHAR uni8E59 +ENCODING 36441 +BBX 15 15 1 -1 +BITMAP +0050 +3FFC +2440 +2748 +2430 +3FA0 +5554 +A488 +1FF0 +1010 +1FF0 +1100 +11F8 +2F00 +C0FE +ENDCHAR +STARTCHAR uni8E5A +ENCODING 36442 +BBX 15 15 0 -1 +BITMAP +0020 +7924 +48A8 +4BFE +4A02 +78F8 +1088 +1088 +1CF8 +5020 +5020 +51FC +5020 +5C20 +E3FE +ENDCHAR +STARTCHAR uni8E5B +ENCODING 36443 +BBX 15 16 0 -2 +BITMAP +02A8 +F2A8 +97FC +92A8 +92AA +F4E6 +2800 +27FC +A444 +B840 +A3F8 +A248 +A248 +B248 +C258 +0040 +ENDCHAR +STARTCHAR uni8E5C +ENCODING 36444 +BBX 15 16 0 -2 +BITMAP +0020 +7810 +4BFE +4A02 +4880 +78FE +1110 +1320 +1D7C +5144 +5144 +517C +5144 +5D44 +E17C +0144 +ENDCHAR +STARTCHAR uni8E5D +ENCODING 36445 +BBX 15 16 0 -2 +BITMAP +0108 +7908 +4A28 +4CAE +48A8 +7928 +137E +1500 +1D08 +5128 +512E +5128 +5158 +5D48 +E186 +0100 +ENDCHAR +STARTCHAR uni8E5E +ENCODING 36446 +BBX 15 15 0 -2 +BITMAP +78FE +4810 +4A20 +4A7C +7A44 +13C4 +127C +5244 +5E7C +52C4 +5344 +5A7C +E028 +0044 +0082 +ENDCHAR +STARTCHAR uni8E5F +ENCODING 36447 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +47FE +4420 +45FC +7C20 +13FE +1104 +5DFC +5104 +51FC +5104 +51FC +5C88 +E306 +ENDCHAR +STARTCHAR uni8E60 +ENCODING 36448 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +45FE +4500 +4548 +7D48 +11FE +1148 +5148 +5D78 +5200 +5200 +5154 +5D2A +E22A +ENDCHAR +STARTCHAR uni8E61 +ENCODING 36449 +BBX 15 16 0 -2 +BITMAP +0048 +7D48 +455E +456A +4554 +7DC8 +1050 +1064 +13C4 +5D7E +5144 +5164 +5154 +5D44 +E254 +0448 +ENDCHAR +STARTCHAR uni8E62 +ENCODING 36450 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4BFE +4904 +4888 +7BFE +1202 +1222 +5AFA +5222 +52FA +528A +528A +5AFA +E206 +ENDCHAR +STARTCHAR uni8E63 +ENCODING 36451 +BBX 15 15 1 -1 +BITMAP +0088 +7C88 +47FE +4488 +4488 +7CF8 +1020 +13FE +5222 +5FBA +52AA +52AA +5376 +5E22 +E226 +ENDCHAR +STARTCHAR uni8E64 +ENCODING 36452 +BBX 15 15 1 -1 +BITMAP +0144 +7944 +4A44 +4CAA +48AA +7910 +1110 +1210 +5650 +5A5C +5250 +5250 +5250 +5AB0 +E28E +ENDCHAR +STARTCHAR uni8E65 +ENCODING 36453 +BBX 15 15 0 -1 +BITMAP +0010 +7C10 +46FE +4510 +457C +7C54 +107C +1354 +5D7C +5110 +51FE +5110 +5D10 +E290 +047E +ENDCHAR +STARTCHAR uni8E66 +ENCODING 36454 +BBX 15 16 0 -2 +BITMAP +0020 +7A22 +4A22 +4BFE +4800 +7BDE +1252 +1252 +53DE +5E52 +5252 +53DE +5A52 +E252 +055A +08A4 +ENDCHAR +STARTCHAR uni8E67 +ENCODING 36455 +BBX 15 16 0 -2 +BITMAP +0090 +7890 +4FFE +4890 +4BFC +7A94 +13FC +1294 +53FC +5C00 +51F8 +5108 +59F8 +E108 +01F8 +0108 +ENDCHAR +STARTCHAR uni8E68 +ENCODING 36456 +BBX 15 16 0 -2 +BITMAP +0110 +7914 +49D2 +4A50 +4A7E +7D50 +1090 +12A8 +5128 +5D44 +5244 +5482 +5808 +E2A4 +0252 +0452 +ENDCHAR +STARTCHAR uni8E69 +ENCODING 36457 +BBX 14 16 1 -2 +BITMAP +9240 +547C +FE90 +9290 +BB50 +D620 +9250 +828C +3FE0 +2020 +3FE0 +0200 +23F0 +2200 +5200 +8FFC +ENDCHAR +STARTCHAR uni8E6A +ENCODING 36458 +BBX 15 16 0 -2 +BITMAP +0020 +79FC +4924 +49FC +4820 +7BFE +1000 +11FC +1104 +5DFC +5104 +51FC +5104 +5DFC +E088 +0104 +ENDCHAR +STARTCHAR uni8E6B +ENCODING 36459 +BBX 15 15 0 -2 +BITMAP +79FC +4848 +4830 +4BFE +7852 +1094 +1350 +1C20 +53FE +5252 +528A +5376 +5E52 +E272 +0206 +ENDCHAR +STARTCHAR uni8E6C +ENCODING 36460 +BBX 15 15 1 -1 +BITMAP +01E4 +7E2A +4554 +4488 +4504 +7EFA +1000 +11FC +5D04 +5104 +51FC +5088 +5088 +5C50 +E3FE +ENDCHAR +STARTCHAR uni8E6D +ENCODING 36461 +BBX 15 15 1 -1 +BITMAP +0030 +7888 +4904 +4A02 +4BFE +7AAA +12AA +1222 +5BFE +5000 +51FC +5104 +51FC +5904 +E1FC +ENDCHAR +STARTCHAR uni8E6E +ENCODING 36462 +BBX 15 15 0 -2 +BITMAP +7DFC +4450 +45FC +4554 +7DFC +1020 +13FE +5C48 +5084 +51FA +5288 +5CF8 +E084 +0084 +007C +ENDCHAR +STARTCHAR uni8E6F +ENCODING 36463 +BBX 15 15 1 -1 +BITMAP +0018 +7CE0 +4524 +44A8 +47FE +7CA8 +10A8 +1124 +5E22 +51FC +5124 +51FC +5124 +5D24 +E1FC +ENDCHAR +STARTCHAR uni8E70 +ENCODING 36464 +BBX 15 14 1 -1 +BITMAP +F7FE +9400 +9404 +97E4 +F404 +25DE +A544 +B554 +A554 +A5D4 +A404 +B544 +C4E4 +8B9C +ENDCHAR +STARTCHAR uni8E71 +ENCODING 36465 +BBX 15 15 0 -1 +BITMAP +0020 +7DFC +4488 +4450 +47FE +7C00 +11FC +1124 +5DFC +5124 +51FC +5020 +5DFC +E020 +03FE +ENDCHAR +STARTCHAR uni8E72 +ENCODING 36466 +BBX 15 15 1 -1 +BITMAP +0098 +7D04 +46FA +4450 +45FC +7D54 +119C +1104 +51FC +5D04 +51FC +5008 +53FE +5C88 +E018 +ENDCHAR +STARTCHAR uni8E73 +ENCODING 36467 +BBX 15 16 0 -2 +BITMAP +0024 +7BA8 +4892 +4D14 +4A08 +7C04 +13BA +10A8 +1CC6 +5380 +523C +5384 +50A8 +5C90 +E2A8 +0144 +ENDCHAR +STARTCHAR uni8E74 +ENCODING 36468 +BBX 15 15 1 -1 +BITMAP +0114 +7912 +4F90 +487E +4B90 +7A90 +1290 +1290 +5B98 +5128 +53A8 +5328 +554A +794A +C386 +ENDCHAR +STARTCHAR uni8E75 +ENCODING 36469 +BBX 15 16 0 -2 +BITMAP +0828 +7F24 +00FE +3E20 +2250 +3E50 +4952 +988E +0000 +1FF0 +1010 +1FF0 +0100 +11F8 +3100 +CFFE +ENDCHAR +STARTCHAR uni8E76 +ENCODING 36470 +BBX 15 14 1 -1 +BITMAP +7BFE +4A10 +4B30 +4A5E +7BF2 +1292 +12A8 +52A8 +5AA8 +53E8 +5494 +5094 +5D22 +E242 +ENDCHAR +STARTCHAR uni8E77 +ENCODING 36471 +BBX 15 16 0 -2 +BITMAP +3FFE +2890 +2510 +3FDE +2222 +2A88 +2F88 +2294 +2422 +2BF8 +2208 +23F8 +2040 +427C +4540 +88FE +ENDCHAR +STARTCHAR uni8E78 +ENCODING 36472 +BBX 15 16 0 -2 +BITMAP +0020 +7924 +48A8 +4BFE +48A8 +7924 +1222 +1104 +1104 +5DDE +5244 +5554 +509E +5D04 +E204 +0404 +ENDCHAR +STARTCHAR uni8E79 +ENCODING 36473 +BBX 15 16 0 -2 +BITMAP +0020 +7C50 +4488 +4574 +4602 +7CF8 +1088 +10F8 +1000 +5DDC +5044 +5154 +50CC +5D54 +E044 +00CC +ENDCHAR +STARTCHAR uni8E7A +ENCODING 36474 +BBX 15 16 0 -2 +BITMAP +0020 +7820 +49FC +4820 +4BFE +7908 +139C +1108 +1D88 +563E +5000 +53FE +5090 +5C90 +E112 +020E +ENDCHAR +STARTCHAR uni8E7B +ENCODING 36475 +BBX 15 15 1 -1 +BITMAP +0018 +7DE0 +4420 +47FE +4490 +7DF8 +1296 +50F0 +5C00 +53FC +5204 +52F4 +5E94 +72F4 +C20C +ENDCHAR +STARTCHAR uni8E7C +ENCODING 36476 +BBX 15 15 1 -1 +BITMAP +0050 +7E52 +4554 +47FE +4504 +7C88 +11FC +1020 +51FC +5C20 +53FE +5020 +5050 +5C88 +E306 +ENDCHAR +STARTCHAR uni8E7D +ENCODING 36477 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +45FC +4420 +4554 +7C88 +1104 +12FA +1088 +5CF8 +5088 +50F8 +5020 +5CA8 +E124 +0060 +ENDCHAR +STARTCHAR uni8E7E +ENCODING 36478 +BBX 15 16 0 -2 +BITMAP +0108 +7888 +4BC8 +4810 +4BDE +7A64 +13D4 +1014 +13D4 +5C54 +5094 +50E8 +5388 +5C94 +E294 +0122 +ENDCHAR +STARTCHAR uni8E7F +ENCODING 36479 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4A8A +4924 +7A22 +11FC +1124 +51FC +5C20 +53FE +5222 +5BFE +E222 +0020 +0020 +ENDCHAR +STARTCHAR uni8E80 +ENCODING 36480 +BBX 15 15 0 -2 +BITMAP +7DFC +4524 +47FE +4524 +7DFC +1000 +11FC +5D04 +51FC +5104 +51FC +5D04 +E1FC +0088 +0104 +ENDCHAR +STARTCHAR uni8E81 +ENCODING 36481 +BBX 15 14 1 -1 +BITMAP +78F8 +4888 +48F8 +4800 +7BDE +1252 +1252 +5BDE +5020 +53FE +5070 +50A8 +5B26 +E020 +ENDCHAR +STARTCHAR uni8E82 +ENCODING 36482 +BBX 15 16 0 -2 +BITMAP +0010 +7A10 +497C +4810 +48FE +7844 +1328 +11FE +1110 +5D7C +5110 +51FE +5110 +5D10 +E2FE +0400 +ENDCHAR +STARTCHAR uni8E83 +ENCODING 36483 +BBX 15 16 0 -2 +BITMAP +0010 +7808 +4BC8 +4A7E +4A40 +7A54 +13C8 +127E +5208 +5FC8 +537E +5548 +5D48 +E5C8 +0948 +0008 +ENDCHAR +STARTCHAR uni8E84 +ENCODING 36484 +BBX 15 15 1 -1 +BITMAP +0010 +7EFE +4244 +7E28 +40FE +BE10 +A27C +2210 +3FF0 +1010 +1FF0 +1100 +11F8 +2F00 +C1FE +ENDCHAR +STARTCHAR uni8E85 +ENCODING 36485 +BBX 15 14 1 -1 +BITMAP +7DFC +4554 +4554 +45FC +7C80 +10FE +1142 +53F2 +5D52 +5152 +51F2 +504A +5C7A +E384 +ENDCHAR +STARTCHAR uni8E86 +ENCODING 36486 +BBX 15 16 0 -2 +BITMAP +0040 +787C +4840 +4BFE +4A42 +7A78 +13C4 +123C +1E00 +53FE +5240 +53A4 +5258 +5DB4 +E452 +09B0 +ENDCHAR +STARTCHAR uni8E87 +ENCODING 36487 +BBX 15 15 1 -1 +BITMAP +0088 +7FFE +4488 +4444 +45FC +7C48 +1050 +13FE +5048 +5CFC +5384 +50FC +5084 +5C84 +E0FC +ENDCHAR +STARTCHAR uni8E88 +ENCODING 36488 +BBX 15 16 0 -2 +BITMAP +0088 +7908 +4BC8 +4A50 +4BDE +7A64 +13D4 +1114 +5094 +5FF4 +5114 +51C8 +5948 +E254 +0354 +04A2 +ENDCHAR +STARTCHAR uni8E89 +ENCODING 36489 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +0820 +1FF0 +1110 +1FF0 +1110 +7FFC +4124 +5FFC +1010 +1FF0 +0100 +11F8 +3100 +CFFE +ENDCHAR +STARTCHAR uni8E8A +ENCODING 36490 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +45FC +4420 +44F8 +7C00 +13FE +1022 +51FA +5C00 +53FE +5004 +51FE +5D54 +E1CC +ENDCHAR +STARTCHAR uni8E8B +ENCODING 36491 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +4BFE +4850 +4FA6 +7AAC +12AA +14AA +5000 +5904 +51FC +5104 +51FC +5A04 +E404 +ENDCHAR +STARTCHAR uni8E8C +ENCODING 36492 +BBX 15 16 0 -2 +BITMAP +0080 +7900 +4BFE +4D54 +4954 +7BFE +1154 +1154 +13FE +5D04 +51DE +5244 +5154 +5C9E +E104 +0204 +ENDCHAR +STARTCHAR uni8E8D +ENCODING 36493 +BBX 15 14 1 -1 +BITMAP +7DDE +4442 +45DE +4442 +7DDE +1110 +13FE +5E10 +53FC +5210 +53FC +5210 +5E10 +E3FE +ENDCHAR +STARTCHAR uni8E8E +ENCODING 36494 +BBX 15 15 0 -2 +BITMAP +F7FC +9248 +9444 +9FFE +F444 +26EC +2554 +A6EC +BC44 +A6EC +A554 +A6EC +B444 +C454 +0408 +ENDCHAR +STARTCHAR uni8E8F +ENCODING 36495 +BBX 15 16 0 -2 +BITMAP +0048 +7DFE +4448 +4500 +44BE +7C82 +1152 +117E +11D2 +5D7E +5152 +517E +5152 +5D7E +E142 +0106 +ENDCHAR +STARTCHAR uni8E90 +ENCODING 36496 +BBX 15 16 0 -2 +BITMAP +0124 +7A48 +4924 +4800 +4BFC +7A94 +1264 +1294 +13FC +5E48 +5368 +5248 +536A +5E4A +E246 +0362 +ENDCHAR +STARTCHAR uni8E91 +ENCODING 36497 +BBX 15 15 1 -1 +BITMAP +0280 +F45E +9BB2 +9112 +97D2 +F552 +26D4 +2454 +A7D2 +B452 +A7D2 +A112 +AFF4 +B290 +CC70 +ENDCHAR +STARTCHAR uni8E92 +ENCODING 36498 +BBX 15 16 0 -2 +BITMAP +0124 +7974 +4A58 +4ADA +4BFE +7954 +12DA +13FE +10A2 +5C20 +53FE +5070 +50A8 +5D24 +E222 +0020 +ENDCHAR +STARTCHAR uni8E93 +ENCODING 36499 +BBX 15 15 1 -1 +BITMAP +0044 +7D98 +4510 +45FE +4554 +7E54 +10FC +1084 +50FC +5C84 +50FC +5084 +50FC +5C48 +E186 +ENDCHAR +STARTCHAR uni8E94 +ENCODING 36500 +BBX 15 15 1 -1 +BITMAP +0020 +F7FE +9400 +95FC +9524 +F5FC +2524 +25FC +A420 +B7FE +A588 +A626 +A5FC +B820 +C3FE +ENDCHAR +STARTCHAR uni8E95 +ENCODING 36501 +BBX 15 16 0 -2 +BITMAP +0040 +7820 +4BFE +4A44 +4BF4 +7A44 +12EE +1204 +52F4 +5EAC +52E4 +5214 +5AA4 +E474 +0594 +0808 +ENDCHAR +STARTCHAR uni8E96 +ENCODING 36502 +BBX 15 16 0 -2 +BITMAP +0110 +7A12 +4BAA +493A +4A92 +7BBA +108A +13FE +1D12 +5212 +53AA +513A +5292 +5FBA +E08A +03FE +ENDCHAR +STARTCHAR uni8E97 +ENCODING 36503 +BBX 15 16 0 -2 +BITMAP +2200 +4F9C +9480 +2FDE +6108 +AFC8 +2508 +27D8 +0100 +1FF0 +1010 +1FF0 +0100 +11F8 +3100 +CFFE +ENDCHAR +STARTCHAR uni8E98 +ENCODING 36504 +BBX 15 15 1 -1 +BITMAP +0220 +F220 +9FFE +94A0 +953C +FFC4 +203C +2FA0 +B8BC +AFA0 +A8BC +AFA0 +A8BC +B8A2 +C99E +ENDCHAR +STARTCHAR uni8E99 +ENCODING 36505 +BBX 15 14 1 -1 +BITMAP +7BDE +4A52 +4BDE +4A52 +7BDE +12A2 +12FA +53A2 +5EF2 +52A2 +52F2 +52A2 +5EFA +E206 +ENDCHAR +STARTCHAR uni8E9A +ENCODING 36506 +BBX 15 15 0 -2 +BITMAP +F0FE +9428 +92FE +92AA +F0FE +2010 +21FE +A644 +BAFE +A344 +A27C +BA42 +E23E +0500 +08FE +ENDCHAR +STARTCHAR uni8E9B +ENCODING 36507 +BBX 15 16 0 -2 +BITMAP +2200 +4F9C +9480 +2FDE +6208 +AFC8 +2A48 +2AD8 +0000 +1FF0 +1010 +1FF0 +0100 +11F8 +3100 +CFFE +ENDCHAR +STARTCHAR uni8E9C +ENCODING 36508 +BBX 15 16 0 -2 +BITMAP +0108 +F528 +97BE +9948 +97BE +F318 +25AA +2946 +A000 +BBF8 +A208 +A248 +BA48 +E0B0 +0108 +0604 +ENDCHAR +STARTCHAR uni8E9D +ENCODING 36509 +BBX 15 16 0 -2 +BITMAP +03DE +7A52 +4BDE +4A52 +4BDE +7A22 +12FA +1222 +52FA +5EAA +52FA +52AA +5AFA +E272 +02AA +0226 +ENDCHAR +STARTCHAR uni8E9E +ENCODING 36510 +BBX 15 15 1 -1 +BITMAP +04C8 +F40A +95EA +9E1C +94C8 +F408 +2BF4 +2924 +B1E4 +A002 +AFF8 +A208 +A110 +B0E0 +CF1E +ENDCHAR +STARTCHAR uni8E9F +ENCODING 36511 +BBX 15 16 0 -2 +BITMAP +0020 +7BFE +4800 +49DC +4954 +79DC +1088 +13FE +1C88 +53FE +5088 +53FE +5094 +5D88 +E2A4 +00C2 +ENDCHAR +STARTCHAR uni8EA0 +ENCODING 36512 +BBX 15 16 0 -2 +BITMAP +0820 +FFFE +2820 +7DFC +4488 +7DFE +4020 +7DFC +4420 +7FF0 +1010 +1FF0 +0100 +11F8 +3100 +CFFE +ENDCHAR +STARTCHAR uni8EA1 +ENCODING 36513 +BBX 15 14 1 -1 +BITMAP +7BFC +4890 +48F0 +489C +7BF0 +1010 +17FE +5294 +5B9C +5294 +539C +5294 +5FFE +E084 +ENDCHAR +STARTCHAR uni8EA2 +ENCODING 36514 +BBX 15 16 0 -2 +BITMAP +079E +F492 +979E +9492 +97FE +F512 +25F2 +2512 +A5F2 +BC02 +A7BA +A6AA +A59A +B6AA +C59A +0406 +ENDCHAR +STARTCHAR uni8EA3 +ENCODING 36515 +BBX 15 16 0 -2 +BITMAP +03DE +7A52 +4BDE +4A52 +4BDE +7A52 +13DE +1090 +11FE +5D10 +53FE +5510 +51FE +5D10 +E1FE +0100 +ENDCHAR +STARTCHAR uni8EA4 +ENCODING 36516 +BBX 15 16 0 -2 +BITMAP +0108 +F7FE +9108 +9000 +9114 +F7BE +2114 +2794 +B17E +AF80 +A13E +A3A2 +B57E +C922 +013E +0122 +ENDCHAR +STARTCHAR uni8EA5 +ENCODING 36517 +BBX 15 16 0 -2 +BITMAP +0040 +F7FE +9492 +9108 +9080 +F31C +2204 +239C +A204 +BBFC +A248 +A368 +A248 +B36A +C246 +0362 +ENDCHAR +STARTCHAR uni8EA6 +ENCODING 36518 +BBX 15 16 0 -2 +BITMAP +0528 +F7BE +9948 +97BE +9318 +F5AA +2946 +23FC +A204 +BBFC +A204 +A3FC +BA04 +E3FC +0108 +0204 +ENDCHAR +STARTCHAR uni8EA7 +ENCODING 36519 +BBX 15 16 0 -2 +BITMAP +03DE +7800 +4BDE +4A52 +4B5A +7A52 +1020 +13FE +1E50 +53FE +5252 +53FE +5292 +5EDC +E292 +04CE +ENDCHAR +STARTCHAR uni8EA8 +ENCODING 36520 +BBX 15 16 0 -2 +BITMAP +0110 +F7FE +9040 +92EE +92AA +FBEA +2AAE +2AE8 +ABAA +BCE6 +A288 +A5F4 +A290 +B060 +C198 +0606 +ENDCHAR +STARTCHAR uni8EA9 +ENCODING 36521 +BBX 15 16 0 -2 +BITMAP +03DE +7A52 +4BDE +4A52 +4BDE +78A0 +11FE +1320 +15FC +5D20 +51FE +5000 +51FC +5C88 +E070 +078E +ENDCHAR +STARTCHAR uni8EAA +ENCODING 36522 +BBX 15 15 1 -1 +BITMAP +0088 +7BFE +4888 +4BDE +4A52 +7BDE +1252 +13DE +52A2 +5EFA +53A2 +52F2 +52A2 +5EFA +E206 +ENDCHAR +STARTCHAR uni8EAB +ENCODING 36523 +BBX 15 15 1 -1 +BITMAP +0200 +0400 +1FF0 +1010 +1FF0 +1010 +1010 +1FF2 +1014 +1018 +FFF0 +0050 +0390 +1C10 +E070 +ENDCHAR +STARTCHAR uni8EAC +ENCODING 36524 +BBX 14 15 1 -1 +BITMAP +0400 +0878 +3E08 +2208 +3E78 +2240 +2240 +3EFC +2284 +2204 +FE04 +0A04 +3208 +C208 +0E70 +ENDCHAR +STARTCHAR uni8EAD +ENCODING 36525 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +7C20 +45FE +7D22 +4624 +7C20 +4420 +4450 +FC50 +0C50 +1450 +2490 +4492 +9512 +0A0E +ENDCHAR +STARTCHAR uni8EAE +ENCODING 36526 +BBX 15 15 1 -1 +BITMAP +1030 +2090 +7890 +4908 +7908 +4A04 +4C02 +79F8 +4848 +4848 +F848 +2888 +4888 +8908 +1A30 +ENDCHAR +STARTCHAR uni8EAF +ENCODING 36527 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +7D00 +4504 +7D04 +4504 +4548 +7D28 +4510 +4718 +FD24 +1540 +2580 +4500 +9DFE +ENDCHAR +STARTCHAR uni8EB0 +ENCODING 36528 +BBX 15 15 1 -1 +BITMAP +0820 +1020 +3C20 +27FE +3C20 +2470 +2470 +3CA8 +24A8 +2524 +FE22 +14F8 +2420 +C420 +0C20 +ENDCHAR +STARTCHAR uni8EB1 +ENCODING 36529 +BBX 15 15 1 -1 +BITMAP +1000 +23F0 +7890 +489C +7904 +4904 +4A2C +7820 +4BFE +48A8 +F8A8 +2924 +4924 +8A22 +1820 +ENDCHAR +STARTCHAR uni8EB2 +ENCODING 36530 +BBX 15 16 0 -2 +BITMAP +1000 +20F8 +7C88 +4488 +7C88 +4488 +7D26 +4620 +45FE +FC20 +0C70 +14A8 +2524 +4622 +9420 +0820 +ENDCHAR +STARTCHAR uni8EB3 +ENCODING 36531 +BBX 14 15 1 -1 +BITMAP +1000 +21F8 +7D08 +4508 +7D08 +4508 +45F8 +7C40 +4480 +45FC +FD04 +1504 +2504 +C504 +1DFC +ENDCHAR +STARTCHAR uni8EB4 +ENCODING 36532 +BBX 15 16 0 -2 +BITMAP +0820 +1010 +3EFC +2284 +3E84 +22FC +3E84 +2284 +22FC +FEA2 +06A4 +0A98 +1290 +2288 +4AC4 +0482 +ENDCHAR +STARTCHAR uni8EB5 +ENCODING 36533 +BBX 15 15 1 -1 +BITMAP +1000 +23FC +7844 +4944 +7A44 +4884 +4904 +7A18 +4840 +4820 +F8A4 +2A82 +4A8A +8A88 +1A78 +ENDCHAR +STARTCHAR uni8EB6 +ENCODING 36534 +BBX 15 15 1 -1 +BITMAP +0800 +11FC +3D24 +2524 +3DFC +2524 +2524 +3DFC +2420 +27FE +FCA8 +14A8 +2524 +C622 +0C20 +ENDCHAR +STARTCHAR uni8EB7 +ENCODING 36535 +BBX 15 16 0 -2 +BITMAP +101C +21E0 +7C20 +4420 +7FFE +44A8 +7D24 +4642 +4440 +FFFE +0C88 +1508 +24D0 +4430 +9448 +0984 +ENDCHAR +STARTCHAR uni8EB8 +ENCODING 36536 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +7DFC +4450 +7C88 +4504 +7FFE +4408 +45E8 +FD28 +0D28 +15E8 +2528 +4408 +9428 +0810 +ENDCHAR +STARTCHAR uni8EB9 +ENCODING 36537 +BBX 15 16 0 -2 +BITMAP +1080 +2080 +7CFE +4502 +7E22 +44AA +7C72 +4422 +45FE +FC22 +0C72 +14AA +2522 +4422 +940A +0804 +ENDCHAR +STARTCHAR uni8EBA +ENCODING 36538 +BBX 14 16 0 -2 +BITMAP +1020 +2124 +7CA4 +44A8 +7C20 +45FC +7D04 +4504 +4574 +FD54 +0D54 +1554 +2574 +4504 +9514 +0908 +ENDCHAR +STARTCHAR uni8EBB +ENCODING 36539 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +7BFE +4A52 +7A52 +4890 +491E +7A00 +4800 +49FC +F820 +2820 +4820 +8820 +1BFE +ENDCHAR +STARTCHAR uni8EBC +ENCODING 36540 +BBX 15 16 0 -2 +BITMAP +1000 +20FC +7C80 +44F8 +7C80 +44F8 +7C80 +47FE +4540 +FD24 +0D28 +1510 +2508 +4544 +9582 +0900 +ENDCHAR +STARTCHAR uni8EBD +ENCODING 36541 +BBX 15 16 0 -2 +BITMAP +1000 +23FE +7A00 +4AFC +7A84 +4AFC +7A84 +4AFC +4A20 +FBFE +1A48 +2AC8 +4A30 +8A48 +2A84 +13FE +ENDCHAR +STARTCHAR uni8EBE +ENCODING 36542 +BBX 15 15 1 -1 +BITMAP +1088 +2050 +79FC +4820 +79FC +4820 +4820 +7BFE +4820 +4820 +FBFE +2850 +4888 +8904 +1A02 +ENDCHAR +STARTCHAR uni8EBF +ENCODING 36543 +BBX 15 16 0 -2 +BITMAP +1020 +2010 +79FE +4910 +797C +4914 +79FE +4914 +497C +F910 +1992 +2954 +4938 +8A54 +2A92 +1430 +ENDCHAR +STARTCHAR uni8EC0 +ENCODING 36544 +BBX 15 15 1 -1 +BITMAP +1000 +23FE +7A00 +4A78 +7A48 +4A48 +4A78 +7A00 +4AEE +4AAA +FAAA +2AAA +4AEE +8A00 +1BFE +ENDCHAR +STARTCHAR uni8EC1 +ENCODING 36545 +BBX 15 16 0 -2 +BITMAP +1020 +21FC +7D24 +47FE +7D24 +45FC +7C20 +45FC +4524 +FDFC +0C40 +17FE +2488 +45D0 +9470 +0B8C +ENDCHAR +STARTCHAR uni8EC2 +ENCODING 36546 +BBX 15 16 0 -2 +BITMAP +1048 +216A +7CDC +4448 +7CB4 +4522 +7DFE +4502 +4420 +FC20 +0CFC +1424 +2444 +4444 +9494 +0908 +ENDCHAR +STARTCHAR uni8EC3 +ENCODING 36547 +BBX 15 16 0 -2 +BITMAP +1000 +21DC +7D54 +4554 +7DDC +4400 +7DFC +4524 +45FC +FD24 +0DFC +1420 +27FE +4420 +9420 +0820 +ENDCHAR +STARTCHAR uni8EC4 +ENCODING 36548 +BBX 15 16 0 -2 +BITMAP +1110 +2094 +7BD2 +4812 +7A50 +4990 +7FFE +4810 +4BD2 +FA52 +1A54 +2BD4 +4A4A +8A4A +2BD6 +1022 +ENDCHAR +STARTCHAR uni8EC5 +ENCODING 36549 +BBX 15 15 1 -1 +BITMAP +1000 +23FE +7A40 +4A54 +7A94 +4ABE +4BA8 +7AE8 +4ABC +4AA8 +FAA8 +2ABC +4CA8 +88A8 +18BE +ENDCHAR +STARTCHAR uni8EC6 +ENCODING 36550 +BBX 15 15 1 -1 +BITMAP +1050 +21FC +7954 +49FC +7954 +49FC +4800 +7BFE +4800 +49FC +F904 +29FC +4888 +8850 +1BFE +ENDCHAR +STARTCHAR uni8EC7 +ENCODING 36551 +BBX 15 16 0 -2 +BITMAP +1020 +23FE +7820 +49FC +7800 +4BFE +7802 +49FC +4820 +FBFE +1800 +2BFE +4804 +8BBE +2AA4 +138C +ENDCHAR +STARTCHAR uni8EC8 +ENCODING 36552 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +7BFE +4A54 +7ABE +4BE8 +4ABC +7AA8 +4ABC +4AA8 +FCBE +2814 +4952 +894A +1A38 +ENDCHAR +STARTCHAR uni8EC9 +ENCODING 36553 +BBX 15 16 0 -2 +BITMAP +1020 +23FE +7A12 +49DC +78A8 +49DC +78AA +4BFE +4800 +F9FC +1904 +29FC +4904 +89FC +2888 +1104 +ENDCHAR +STARTCHAR uni8ECA +ENCODING 36554 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni8ECB +ENCODING 36555 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +FFC0 +0840 +7F40 +4940 +7F40 +4940 +4940 +7F40 +0840 +FFC0 +0842 +0842 +083E +ENDCHAR +STARTCHAR uni8ECC +ENCODING 36556 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FE40 +1040 +7DF8 +5448 +7C48 +5448 +5448 +7C48 +1048 +FE48 +108A +108A +1106 +ENDCHAR +STARTCHAR uni8ECD +ENCODING 36557 +BBX 15 14 1 -1 +BITMAP +7FFC +4004 +4104 +3FF8 +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni8ECE +ENCODING 36558 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0100 +FFFE +0100 +3FF8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni8ECF +ENCODING 36559 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +13FC +FC90 +1090 +7C90 +5490 +7C90 +5490 +7C90 +1090 +FE92 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni8ED0 +ENCODING 36560 +BBX 15 16 0 -2 +BITMAP +1000 +11F0 +1090 +FE90 +1090 +7C90 +5490 +7DF0 +5490 +7C90 +1090 +FE92 +108A +108A +1086 +1082 +ENDCHAR +STARTCHAR uni8ED1 +ENCODING 36561 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FE20 +11FE +7C20 +5420 +7C20 +5420 +5450 +7C50 +1050 +FE88 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni8ED2 +ENCODING 36562 +BBX 15 15 1 -1 +BITMAP +1000 +10F8 +FE20 +1020 +7C20 +5420 +7C20 +55FE +5420 +7C20 +1020 +FE20 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni8ED3 +ENCODING 36563 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +10F0 +FE90 +1090 +7C90 +5490 +7CD0 +54B0 +7C90 +1090 +FE92 +1092 +1112 +110E +1200 +ENDCHAR +STARTCHAR uni8ED4 +ENCODING 36564 +BBX 14 15 1 -1 +BITMAP +1000 +11FC +FE24 +1024 +7C24 +54A4 +7CA4 +54A4 +5524 +7D24 +1044 +FE44 +1084 +1104 +1238 +ENDCHAR +STARTCHAR uni8ED5 +ENCODING 36565 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +1020 +FC20 +1124 +7D24 +5524 +7D24 +5524 +7D24 +1124 +FF24 +1124 +11FC +1004 +1000 +ENDCHAR +STARTCHAR uni8ED6 +ENCODING 36566 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +11FC +FE20 +1020 +7C20 +5420 +7C20 +55FC +7C20 +1020 +FE20 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni8ED7 +ENCODING 36567 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1088 +FE88 +1088 +7D06 +5600 +7DFC +5484 +7C84 +1048 +FE50 +1020 +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni8ED8 +ENCODING 36568 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FDFE +1020 +7D24 +5524 +7D24 +5524 +7DFC +1024 +FE20 +1022 +1022 +101E +1000 +ENDCHAR +STARTCHAR uni8ED9 +ENCODING 36569 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FE3E +1020 +7C20 +5420 +7DFC +5484 +7C88 +1048 +FE50 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uni8EDA +ENCODING 36570 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FE20 +1020 +7DFE +5420 +7C20 +5420 +7C50 +1050 +FE50 +1088 +10C8 +1124 +1202 +ENDCHAR +STARTCHAR uni8EDB +ENCODING 36571 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FF00 +1100 +7D7C +5544 +7D44 +5544 +5544 +7D5C +1140 +FF40 +1240 +1042 +103E +ENDCHAR +STARTCHAR uni8EDC +ENCODING 36572 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FDFE +1122 +7D22 +5522 +7D22 +5552 +7D4A +118A +FF02 +1102 +1102 +110A +1104 +ENDCHAR +STARTCHAR uni8EDD +ENCODING 36573 +BBX 15 16 0 -2 +BITMAP +1004 +101E +10F0 +FE90 +1090 +7C90 +5490 +7CFE +5490 +7C90 +1090 +FE88 +108A +10AA +10C6 +1082 +ENDCHAR +STARTCHAR uni8EDE +ENCODING 36574 +BBX 15 16 0 -2 +BITMAP +1008 +101C +10E0 +FE20 +1020 +7C3C +54E0 +7C20 +5420 +7C3E +11E0 +FE20 +1024 +1024 +1024 +101C +ENDCHAR +STARTCHAR uni8EDF +ENCODING 36575 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FE40 +107E +7C84 +54A8 +7D20 +5420 +5420 +7C20 +1050 +FE50 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni8EE0 +ENCODING 36576 +BBX 15 16 0 -2 +BITMAP +1008 +103C +11E0 +FE20 +1020 +7C20 +5420 +7DFE +5420 +7C20 +1020 +FE20 +1020 +1020 +11FC +1000 +ENDCHAR +STARTCHAR uni8EE1 +ENCODING 36577 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +FE50 +1088 +7D44 +5622 +7C20 +5400 +7DFC +1004 +FE08 +1008 +1010 +1010 +1020 +ENDCHAR +STARTCHAR uni8EE2 +ENCODING 36578 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +FE00 +1000 +7C00 +55FE +7C20 +5420 +5428 +7C44 +1044 +FE44 +109A +11E2 +1000 +ENDCHAR +STARTCHAR uni8EE3 +ENCODING 36579 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0100 +381C +0000 +1C70 +E00E +ENDCHAR +STARTCHAR uni8EE4 +ENCODING 36580 +BBX 15 16 0 -2 +BITMAP +1008 +103C +13E0 +FC20 +1124 +7CA4 +54A8 +7C20 +57FE +7C20 +1020 +FE20 +1020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni8EE5 +ENCODING 36581 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1040 +FEFC +1084 +7D04 +54F4 +7C94 +5494 +7C94 +1094 +FEF4 +1094 +1004 +1028 +1010 +ENDCHAR +STARTCHAR uni8EE6 +ENCODING 36582 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +FD04 +1104 +7D04 +55FC +7C50 +5450 +7C50 +1050 +FE92 +1092 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni8EE7 +ENCODING 36583 +BBX 15 16 0 -2 +BITMAP +1004 +101E +10F0 +FE90 +1090 +7C90 +5490 +7CFE +5490 +7C90 +1090 +FE88 +108A +10AA +10D6 +108A +ENDCHAR +STARTCHAR uni8EE8 +ENCODING 36584 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +FE50 +1088 +7D24 +5612 +7C10 +55FC +7C04 +1008 +FE88 +1050 +1020 +1010 +1010 +ENDCHAR +STARTCHAR uni8EE9 +ENCODING 36585 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FE40 +1048 +7C84 +55FE +7C82 +5400 +7CFC +1084 +FE84 +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni8EEA +ENCODING 36586 +BBX 15 16 0 -2 +BITMAP +2010 +2090 +2090 +F910 +217E +FA52 +AB92 +F892 +A912 +F912 +2252 +FBD2 +2062 +2022 +204A +2084 +ENDCHAR +STARTCHAR uni8EEB +ENCODING 36587 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FE50 +1088 +7D04 +5622 +7C40 +5488 +5410 +7C20 +10C2 +FE04 +1008 +1030 +11C0 +ENDCHAR +STARTCHAR uni8EEC +ENCODING 36588 +BBX 15 16 0 -2 +BITMAP +0400 +0820 +1FF0 +0210 +FFFE +0920 +3FF8 +C106 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni8EED +ENCODING 36589 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +1080 +FE80 +10FE +7C90 +5490 +7CBC +5490 +7C90 +1090 +FEFE +1080 +1080 +10FE +1000 +ENDCHAR +STARTCHAR uni8EEE +ENCODING 36590 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FDFC +1124 +7D24 +5524 +7D24 +5524 +7FFE +1020 +FE50 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni8EEF +ENCODING 36591 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1020 +FC20 +1124 +7CA4 +54A8 +7C20 +57FE +7C20 +1020 +FE20 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni8EF0 +ENCODING 36592 +BBX 15 16 0 -2 +BITMAP +0444 +7C58 +0462 +1C42 +E43E +0100 +7FFC +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni8EF1 +ENCODING 36593 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11F0 +FD50 +1150 +7D50 +5550 +7D50 +5550 +7D48 +1148 +FD68 +1154 +1274 +1252 +1400 +ENDCHAR +STARTCHAR uni8EF2 +ENCODING 36594 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FE20 +11FE +7C20 +5420 +7C20 +54FC +7C84 +1084 +FE84 +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni8EF3 +ENCODING 36595 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +10FC +FE84 +1104 +7EF4 +5494 +7C94 +54F4 +7C84 +1094 +FE88 +1082 +1082 +107E +1000 +ENDCHAR +STARTCHAR uni8EF4 +ENCODING 36596 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +1000 +FDFE +1020 +7C20 +5420 +7C20 +55FC +7C20 +1020 +FE20 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni8EF5 +ENCODING 36597 +BBX 15 16 0 -2 +BITMAP +1044 +1044 +1044 +FE84 +10BE +7D84 +5684 +7CA4 +5494 +7C94 +1084 +FE84 +1084 +1084 +1094 +1088 +ENDCHAR +STARTCHAR uni8EF6 +ENCODING 36598 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +11FC +FD04 +1104 +7DFC +5500 +7D00 +557C +7D08 +1110 +FD20 +1142 +1282 +127E +1400 +ENDCHAR +STARTCHAR uni8EF7 +ENCODING 36599 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +1048 +FC40 +13FE +7C80 +5480 +7CFC +5544 +7D44 +1128 +FD28 +1210 +1228 +1444 +1182 +ENDCHAR +STARTCHAR uni8EF8 +ENCODING 36600 +BBX 14 15 1 -1 +BITMAP +1020 +1020 +FE20 +1020 +7C20 +55FC +7D24 +5524 +5524 +7DFC +1124 +FF24 +1124 +1124 +11FC +ENDCHAR +STARTCHAR uni8EF9 +ENCODING 36601 +BBX 15 15 1 -1 +BITMAP +0800 +08FC +FF84 +0884 +7E84 +4A84 +7E84 +4AFC +4A00 +7E48 +0848 +FF48 +0884 +0884 +0902 +ENDCHAR +STARTCHAR uni8EFA +ENCODING 36602 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE22 +1022 +7C42 +5442 +7C82 +550C +5400 +7CFC +1084 +FE84 +1084 +1084 +10FC +ENDCHAR +STARTCHAR uni8EFB +ENCODING 36603 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE04 +1004 +7CF4 +5494 +7C94 +5494 +5494 +7C94 +10F4 +FE04 +1004 +1004 +101C +ENDCHAR +STARTCHAR uni8EFC +ENCODING 36604 +BBX 15 15 1 -1 +BITMAP +1020 +10A0 +FEA0 +10FC +7CA0 +5520 +7C20 +55FE +5420 +7C20 +1050 +FE50 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni8EFD +ENCODING 36605 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +FE84 +1088 +7C50 +5420 +7CD8 +5706 +5420 +7C20 +11FC +FE20 +1020 +1020 +13FE +ENDCHAR +STARTCHAR uni8EFE +ENCODING 36606 +BBX 15 15 1 -1 +BITMAP +1014 +1014 +FE12 +1010 +7FFE +5410 +7C10 +57F0 +5490 +7C90 +1090 +FC90 +10EA +138A +1004 +ENDCHAR +STARTCHAR uni8EFF +ENCODING 36607 +BBX 15 16 0 -2 +BITMAP +1084 +1048 +1000 +FEFC +1048 +7C48 +5448 +7C48 +55FE +7C48 +1048 +FE48 +1048 +1088 +1088 +1108 +ENDCHAR +STARTCHAR uni8F00 +ENCODING 36608 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE40 +1080 +7DFE +5552 +7D52 +5552 +5552 +7D52 +1152 +FF52 +1152 +1152 +1156 +ENDCHAR +STARTCHAR uni8F01 +ENCODING 36609 +BBX 15 16 0 -2 +BITMAP +1048 +1048 +1048 +FE48 +11FE +7C48 +5448 +7C48 +5448 +7DFE +1000 +FE48 +1044 +1084 +1082 +1102 +ENDCHAR +STARTCHAR uni8F02 +ENCODING 36610 +BBX 15 16 0 -2 +BITMAP +0820 +7FFC +0820 +FFFE +1010 +2108 +5FF4 +8102 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni8F03 +ENCODING 36611 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FE20 +11FE +7C48 +5484 +7D8A +5488 +5488 +7C50 +1050 +FE20 +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni8F04 +ENCODING 36612 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1124 +FEA4 +10A8 +7C20 +57FE +7C90 +5490 +7C90 +1090 +FE92 +1112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni8F05 +ENCODING 36613 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FE7C +1084 +7F88 +5450 +7C30 +54C8 +5706 +7CFC +1084 +FE84 +1084 +1084 +10FC +ENDCHAR +STARTCHAR uni8F06 +ENCODING 36614 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1010 +FDFE +1020 +7C24 +5444 +7CF8 +5412 +7C22 +1044 +FD88 +1010 +1028 +1044 +1182 +ENDCHAR +STARTCHAR uni8F07 +ENCODING 36615 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1050 +FE88 +1104 +7E02 +55FC +7C20 +5420 +7C20 +11FC +FE20 +1020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni8F08 +ENCODING 36616 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +FDF8 +1108 +7D48 +5528 +7D28 +5508 +57FE +7D08 +1148 +FD48 +1248 +1248 +1418 +ENDCHAR +STARTCHAR uni8F09 +ENCODING 36617 +BBX 15 15 1 -1 +BITMAP +0848 +7F44 +0840 +FFFE +0840 +FF44 +0844 +7F24 +4928 +7F28 +4910 +7F10 +082A +FF4A +0884 +ENDCHAR +STARTCHAR uni8F0A +ENCODING 36618 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +FE40 +1050 +7C48 +54B4 +7DC4 +5420 +5420 +7C20 +11FC +FE20 +1020 +1020 +13FE +ENDCHAR +STARTCHAR uni8F0B +ENCODING 36619 +BBX 15 16 0 -2 +BITMAP +0100 +4104 +7FFC +0200 +FFFE +0920 +3FF8 +C106 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni8F0C +ENCODING 36620 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +F820 +2020 +FBFE +AA22 +FA22 +AAAA +AAAA +FAAA +22AA +FAAA +22FA +2202 +2206 +ENDCHAR +STARTCHAR uni8F0D +ENCODING 36621 +BBX 15 16 0 -2 +BITMAP +1000 +1050 +1048 +FE84 +1124 +7C20 +5450 +7C88 +5506 +7EF8 +1088 +FE88 +1088 +1088 +10F8 +1088 +ENDCHAR +STARTCHAR uni8F0E +ENCODING 36622 +BBX 15 16 0 -2 +BITMAP +1010 +1092 +1052 +FE54 +1010 +7CFE +5482 +7C82 +54FE +7C82 +1082 +FEFE +1082 +1082 +108A +1084 +ENDCHAR +STARTCHAR uni8F0F +ENCODING 36623 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1050 +FC50 +11FC +7D54 +5554 +7D54 +558C +7D04 +1104 +FDFC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni8F10 +ENCODING 36624 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +FD02 +1204 +7CF8 +5400 +7C00 +55FE +7C50 +1050 +FE50 +1092 +1092 +110E +1200 +ENDCHAR +STARTCHAR uni8F11 +ENCODING 36625 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1024 +FE24 +11FE +7C24 +5424 +7CFC +5440 +7C40 +10FC +FEC4 +1144 +1044 +107C +1044 +ENDCHAR +STARTCHAR uni8F12 +ENCODING 36626 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +FA50 +2250 +FBD0 +AA50 +FA50 +ABD0 +AA50 +FA50 +2250 +FBD2 +2652 +2052 +204E +ENDCHAR +STARTCHAR uni8F13 +ENCODING 36627 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FEF8 +1108 +7F10 +55FC +7D24 +5524 +5544 +7DFC +1050 +FE90 +1090 +1112 +120E +ENDCHAR +STARTCHAR uni8F14 +ENCODING 36628 +BBX 15 15 1 -1 +BITMAP +1028 +1024 +FDFE +1020 +7C20 +55FC +7D24 +5524 +55FC +7D24 +1124 +FDFC +1124 +1124 +112C +ENDCHAR +STARTCHAR uni8F15 +ENCODING 36629 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +FC00 +1124 +FD24 +9648 +FD24 +9524 +9400 +FDFC +1020 +FC20 +1020 +1020 +13FE +ENDCHAR +STARTCHAR uni8F16 +ENCODING 36630 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +1092 +FE92 +10BA +7C92 +54FE +7C82 +54BA +7CAA +10AA +FEBA +1082 +1102 +110A +1204 +ENDCHAR +STARTCHAR uni8F17 +ENCODING 36631 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +FD9C +1104 +7D04 +55DC +7D04 +5504 +55FC +7C90 +1090 +FC90 +1112 +1112 +120E +ENDCHAR +STARTCHAR uni8F18 +ENCODING 36632 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +10FC +FC20 +1020 +7DFE +5448 +7C84 +5522 +7C78 +1088 +FD48 +1050 +1020 +1050 +118C +ENDCHAR +STARTCHAR uni8F19 +ENCODING 36633 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +FA80 +2280 +FBFC +AAA4 +FAA4 +AAA4 +ABA8 +FAB8 +2290 +FA98 +27A4 +20C2 +2080 +ENDCHAR +STARTCHAR uni8F1A +ENCODING 36634 +BBX 15 16 0 -2 +BITMAP +1048 +1044 +105E +FDE0 +1028 +7C12 +546A +7D96 +5448 +7C5E +11E0 +FE24 +1028 +1012 +106A +1186 +ENDCHAR +STARTCHAR uni8F1B +ENCODING 36635 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +F820 +2020 +FBFE +AA22 +FA22 +ABBA +AAAA +FAAA +22AA +FB76 +2222 +2222 +2226 +ENDCHAR +STARTCHAR uni8F1C +ENCODING 36636 +BBX 14 15 1 -1 +BITMAP +1124 +1124 +FE48 +1248 +7D24 +5524 +7C00 +55FC +5524 +7D24 +11FC +FF24 +1124 +1124 +11FC +ENDCHAR +STARTCHAR uni8F1D +ENCODING 36637 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +5622 +55FC +5420 +59FC +1124 +FDFC +2924 +2924 +29FC +2C20 +4FFE +4820 +8020 +ENDCHAR +STARTCHAR uni8F1E +ENCODING 36638 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FF02 +118A +7D52 +55FE +7D22 +5522 +55FE +7D42 +1142 +FF7A +1102 +1102 +110E +ENDCHAR +STARTCHAR uni8F1F +ENCODING 36639 +BBX 15 15 1 -1 +BITMAP +2000 +27BC +F884 +26B4 +F908 +AA94 +FC22 +A800 +AFBC +F884 +2484 +FB28 +2110 +22A8 +2C46 +ENDCHAR +STARTCHAR uni8F20 +ENCODING 36640 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1124 +FD24 +11FC +7D24 +5524 +7DFC +5420 +7DFE +1070 +FEA8 +1124 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni8F21 +ENCODING 36641 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +107C +FC84 +1108 +7E00 +5420 +7DCE +5502 +7D02 +11CE +FD02 +1102 +1102 +11FE +1102 +ENDCHAR +STARTCHAR uni8F22 +ENCODING 36642 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +FC50 +1088 +7D04 +57FE +7C08 +55E8 +7D28 +1128 +FDE8 +1128 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni8F23 +ENCODING 36643 +BBX 14 16 0 -2 +BITMAP +1000 +11DC +1154 +FD54 +1154 +7DDC +5554 +7D54 +5554 +7DDC +1154 +FD54 +1154 +12D4 +1224 +144C +ENDCHAR +STARTCHAR uni8F24 +ENCODING 36644 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FE +FE20 +10FC +7C20 +55FE +7C00 +54FC +7C84 +10FC +FE84 +10FC +1084 +1094 +1088 +ENDCHAR +STARTCHAR uni8F25 +ENCODING 36645 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +1104 +FD04 +11FC +7D04 +5504 +7DFC +5400 +7D12 +11D4 +FD18 +1110 +1152 +1192 +110E +ENDCHAR +STARTCHAR uni8F26 +ENCODING 36646 +BBX 15 15 1 -1 +BITMAP +1010 +7C7C +1010 +FEFE +2928 +7FFC +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni8F27 +ENCODING 36647 +BBX 15 16 0 -2 +BITMAP +1044 +1044 +1088 +FDDC +1088 +7C88 +5488 +7C88 +55DE +7C88 +1088 +FE88 +1088 +1088 +1088 +1108 +ENDCHAR +STARTCHAR uni8F28 +ENCODING 36648 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +11FE +FD02 +1000 +7CF8 +5488 +7C88 +54F8 +7C80 +1080 +FEFC +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni8F29 +ENCODING 36649 +BBX 15 15 1 -1 +BITMAP +0440 +FC7E +0440 +7C7C +0440 +FC7E +0940 +FFFE +2108 +3FF8 +2108 +3FF8 +0100 +FFFE +0100 +ENDCHAR +STARTCHAR uni8F2A +ENCODING 36650 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +F8A0 +2110 +FA08 +ADF6 +F800 +ABFC +AAA4 +FAA4 +23FC +FAA4 +22A4 +22A4 +22AC +ENDCHAR +STARTCHAR uni8F2B +ENCODING 36651 +BBX 15 15 1 -1 +BITMAP +1090 +1090 +FC90 +139E +7C90 +5490 +7F9E +5490 +5490 +7D90 +129E +FC90 +1110 +1110 +1210 +ENDCHAR +STARTCHAR uni8F2C +ENCODING 36652 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +13FE +FC00 +1000 +7DFC +5504 +7D04 +5504 +7DFC +1020 +FEA8 +1124 +1222 +10A0 +1040 +ENDCHAR +STARTCHAR uni8F2D +ENCODING 36653 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE20 +1040 +7DFE +5552 +7D52 +5552 +5556 +7C00 +1020 +FFFE +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni8F2E +ENCODING 36654 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1048 +FE30 +11FE +7C52 +5494 +7D10 +5630 +7C20 +11FE +FE70 +10A8 +1124 +1222 +1020 +ENDCHAR +STARTCHAR uni8F2F +ENCODING 36655 +BBX 15 15 1 -1 +BITMAP +1000 +10F8 +FE88 +10F8 +7C00 +57FE +5488 +7CF8 +5488 +54F8 +7C88 +108E +FCF8 +1388 +1008 +ENDCHAR +STARTCHAR uni8F30 +ENCODING 36656 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +FEFC +1084 +7CFC +5400 +7DFE +5480 +7CFE +112A +FE4A +1092 +1122 +1054 +1088 +ENDCHAR +STARTCHAR uni8F31 +ENCODING 36657 +BBX 15 16 0 -2 +BITMAP +2008 +200C +200A +FBFE +2208 +FA08 +AAE8 +FA0A +AA0A +FAEC +22AC +FAA8 +22EA +221A +2226 +2442 +ENDCHAR +STARTCHAR uni8F32 +ENCODING 36658 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +1124 +FD24 +11FC +7C00 +57FE +7C20 +5440 +7DFC +1154 +FF54 +1154 +1154 +1154 +110C +ENDCHAR +STARTCHAR uni8F33 +ENCODING 36659 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +F9FC +2020 +F8F8 +A850 +FBFE +A888 +A904 +FA72 +2020 +F9FE +2050 +2088 +2306 +ENDCHAR +STARTCHAR uni8F34 +ENCODING 36660 +BBX 15 16 0 -2 +BITMAP +1008 +101C +11F0 +FD10 +1110 +7DFE +5510 +7D7C +5544 +7D7C +1144 +FD7C +1144 +1244 +127C +1444 +ENDCHAR +STARTCHAR uni8F35 +ENCODING 36661 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1084 +FEFC +1084 +7CFC +5440 +7CFE +5512 +7C92 +10AA +FE82 +10FA +1002 +1014 +1008 +ENDCHAR +STARTCHAR uni8F36 +ENCODING 36662 +BBX 15 15 1 -1 +BITMAP +1030 +1088 +FF04 +11FA +7C50 +5450 +7DFC +5554 +5554 +7D9C +1104 +FF04 +11FC +1104 +11FC +ENDCHAR +STARTCHAR uni8F37 +ENCODING 36663 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FE +FD02 +1242 +7DFA +5402 +7DF2 +5402 +7DF2 +1002 +FDF2 +1112 +11F2 +1014 +1008 +ENDCHAR +STARTCHAR uni8F38 +ENCODING 36664 +BBX 15 15 1 -1 +BITMAP +2020 +2050 +F888 +2376 +F800 +ABC2 +FA52 +AA52 +ABD2 +FA52 +2252 +FBC2 +2242 +2242 +22CE +ENDCHAR +STARTCHAR uni8F39 +ENCODING 36665 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +F9FE +2600 +F9FC +A904 +F9FC +A904 +A9FC +F840 +20FC +FB04 +2088 +2070 +238E +ENDCHAR +STARTCHAR uni8F3A +ENCODING 36666 +BBX 15 16 0 -2 +BITMAP +1052 +1052 +10A4 +FDFE +10A4 +7C52 +5452 +7C00 +54FE +7C92 +1092 +FEFE +1092 +1092 +10FE +1082 +ENDCHAR +STARTCHAR uni8F3B +ENCODING 36667 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE00 +10FC +7C84 +5484 +7CFC +5400 +55FE +7D22 +1122 +FFFE +1122 +1122 +11FE +ENDCHAR +STARTCHAR uni8F3C +ENCODING 36668 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1088 +FE88 +10F8 +7C88 +5488 +7CF8 +5400 +7DFC +1154 +FF54 +1154 +1154 +13FE +1000 +ENDCHAR +STARTCHAR uni8F3D +ENCODING 36669 +BBX 15 16 0 -2 +BITMAP +1040 +1048 +1084 +FDFE +1020 +7FFE +5488 +7D04 +57FE +7D24 +1124 +FDFC +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni8F3E +ENCODING 36670 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +FA04 +2204 +FBFC +AA48 +FA48 +ABFE +AA48 +FA48 +23FE +FC94 +2488 +20E4 +2382 +ENDCHAR +STARTCHAR uni8F3F +ENCODING 36671 +BBX 15 15 1 -1 +BITMAP +0100 +17C0 +611C +47C4 +4544 +77DC +4544 +47C4 +711C +47C4 +4104 +FFFE +0400 +1830 +E00E +ENDCHAR +STARTCHAR uni8F40 +ENCODING 36672 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +FD24 +1124 +7D54 +558C +7D04 +55FC +5400 +7DFC +1154 +FD54 +1154 +1154 +13FE +ENDCHAR +STARTCHAR uni8F41 +ENCODING 36673 +BBX 15 16 0 -2 +BITMAP +101E +11E0 +1022 +FD12 +1094 +7C80 +5420 +7DCE +5502 +7D02 +11CE +FF02 +1102 +1102 +11FE +1102 +ENDCHAR +STARTCHAR uni8F42 +ENCODING 36674 +BBX 15 15 1 -1 +BITMAP +1000 +1078 +FE48 +1048 +7C48 +018E +FE00 +82FC +1044 +FE44 +5428 +7C28 +5410 +FE68 +1186 +ENDCHAR +STARTCHAR uni8F43 +ENCODING 36675 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +13FE +FC20 +11FC +7C40 +57FE +7C88 +5534 +7EE2 +1020 +FDFC +1070 +10AC +1322 +1020 +ENDCHAR +STARTCHAR uni8F44 +ENCODING 36676 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +FBFE +2202 +FA22 +A9FC +F820 +A9FC +A820 +FBFE +2000 +F9FC +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni8F45 +ENCODING 36677 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +F9FC +2020 +FBFE +A800 +F9FC +A904 +A904 +F9FC +2052 +F894 +2388 +20E4 +2382 +ENDCHAR +STARTCHAR uni8F46 +ENCODING 36678 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +FBFE +2290 +FA90 +ABFC +FA94 +AA94 +ABFC +FA90 +22F4 +FA98 +2290 +24F2 +218E +ENDCHAR +STARTCHAR uni8F47 +ENCODING 36679 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2042 +FA52 +214A +FA52 +A828 +F8C4 +AB12 +F860 +2188 +F832 +21C4 +2018 +2060 +2380 +ENDCHAR +STARTCHAR uni8F48 +ENCODING 36680 +BBX 15 16 0 -2 +BITMAP +1124 +1248 +1124 +FC00 +11FC +7D24 +55FC +7D24 +55FC +7C20 +13FE +FC70 +10A8 +1124 +1622 +1020 +ENDCHAR +STARTCHAR uni8F49 +ENCODING 36681 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +FBFE +2020 +F9FC +A924 +F9FC +A924 +A9FC +F828 +21FC +F80A +27FE +2088 +2058 +ENDCHAR +STARTCHAR uni8F4A +ENCODING 36682 +BBX 15 15 1 -1 +BITMAP +2088 +2088 +FBDE +2088 +F9DC +A888 +F8DE +AB88 +A888 +F9FC +2004 +FBFE +2004 +2004 +21FC +ENDCHAR +STARTCHAR uni8F4B +ENCODING 36683 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +12FE +FD10 +117C +7C54 +547C +7F54 +557C +7D10 +11FE +FD10 +1110 +1290 +147E +1000 +ENDCHAR +STARTCHAR uni8F4C +ENCODING 36684 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +F820 +23FE +FA22 +ABBA +FA22 +A998 +A800 +F9F8 +2008 +FBFE +2008 +2008 +21F8 +ENDCHAR +STARTCHAR uni8F4D +ENCODING 36685 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +FFD0 +223E +FAA4 +AF44 +F814 +AB94 +AA94 +FB88 +2288 +FB98 +2294 +22A4 +22C2 +ENDCHAR +STARTCHAR uni8F4E +ENCODING 36686 +BBX 15 15 1 -1 +BITMAP +101C +11E0 +FC20 +13FE +7C88 +55FC +7E8A +54F8 +5400 +7DFC +1104 +FD74 +1154 +1174 +110C +ENDCHAR +STARTCHAR uni8F4F +ENCODING 36687 +BBX 15 16 0 -2 +BITMAP +23FE +2202 +23FE +FA00 +22FC +FA08 +ABFE +FA10 +AA30 +FBCE +2242 +FA84 +24EE +2784 +2884 +218C +ENDCHAR +STARTCHAR uni8F50 +ENCODING 36688 +BBX 15 16 0 -2 +BITMAP +1050 +1152 +10D4 +FC50 +11FE +7C88 +5450 +7DFE +5420 +7CFC +1020 +FDFE +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni8F51 +ENCODING 36689 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +11FC +FC20 +1154 +7C88 +5504 +7EFA +5488 +7CF8 +1088 +FEF8 +1020 +10A8 +1124 +1060 +ENDCHAR +STARTCHAR uni8F52 +ENCODING 36690 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1020 +FC88 +13FE +7C88 +55FC +7D04 +55FC +7D04 +11FC +FD04 +11FC +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni8F53 +ENCODING 36691 +BBX 15 16 0 -2 +BITMAP +103C +13E0 +1124 +FCA8 +13FE +7CA8 +5524 +7E02 +55FC +7D24 +1124 +FDFC +1124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni8F54 +ENCODING 36692 +BBX 15 15 1 -1 +BITMAP +2248 +2148 +F950 +27FC +F950 +AA48 +FC46 +A840 +AB88 +FABC +24A8 +FAA8 +217E +2208 +2C08 +ENDCHAR +STARTCHAR uni8F55 +ENCODING 36693 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +1088 +FDFC +1104 +7DFC +5504 +7DFC +5480 +7DFE +1222 +FD52 +1102 +11FA +100A +1004 +ENDCHAR +STARTCHAR uni8F56 +ENCODING 36694 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +23FE +F924 +2124 +FAAA +AFFE +F800 +A9FC +F904 +2174 +F954 +2174 +2104 +21FC +2104 +ENDCHAR +STARTCHAR uni8F57 +ENCODING 36695 +BBX 15 15 1 -1 +BITMAP +2014 +2012 +FBFE +2210 +FAF2 +AA12 +FAEC +AAA8 +AAEA +FC14 +2040 +F8A0 +2284 +228A +247A +ENDCHAR +STARTCHAR uni8F58 +ENCODING 36696 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +FAA8 +23F8 +F800 +AFFC +F800 +ABF8 +AA08 +FBFA +20A4 +F928 +2710 +21C8 +2306 +ENDCHAR +STARTCHAR uni8F59 +ENCODING 36697 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +13FE +FC20 +11FC +7C20 +57FE +7C54 +5592 +7C90 +13FE +FC90 +10D4 +138A +1096 +11A2 +ENDCHAR +STARTCHAR uni8F5A +ENCODING 36698 +BBX 15 16 0 -2 +BITMAP +0800 +7F3C +2A24 +3E42 +2A3C +FFA4 +4918 +7F66 +0100 +7FFC +1110 +1FF0 +1110 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni8F5B +ENCODING 36699 +BBX 15 16 0 -2 +BITMAP +2144 +2144 +2554 +FB64 +215E +FBE4 +A804 +FA34 +A94C +FBE4 +2084 +FBE4 +2084 +20E4 +2714 +2008 +ENDCHAR +STARTCHAR uni8F5C +ENCODING 36700 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +F820 +23FE +FA22 +ABBA +FA22 +A998 +A800 +FBFE +2020 +FBFE +2292 +2292 +2296 +ENDCHAR +STARTCHAR uni8F5D +ENCODING 36701 +BBX 15 16 0 -2 +BITMAP +1A38 +2388 +3A38 +2388 +38B8 +2288 +FFFE +1110 +3FF8 +C106 +1FF0 +1110 +1FF0 +1110 +FFFE +0100 +ENDCHAR +STARTCHAR uni8F5E +ENCODING 36702 +BBX 15 16 0 -2 +BITMAP +2008 +23E8 +2288 +FBEE +2228 +FBF4 +AA82 +FBE2 +A800 +F9FC +2154 +F954 +2154 +2154 +27FE +2000 +ENDCHAR +STARTCHAR uni8F5F +ENCODING 36703 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0920 +0FE0 +0920 +7FFC +1110 +FEFE +5454 +7C7C +5454 +FEFE +1010 +1010 +ENDCHAR +STARTCHAR uni8F60 +ENCODING 36704 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2124 +F9FC +2124 +F9FC +A904 +F800 +ABFE +FAAA +22AA +FBFE +22AA +22AA +23FE +2222 +ENDCHAR +STARTCHAR uni8F61 +ENCODING 36705 +BBX 15 15 1 -1 +BITMAP +2108 +47D0 +9124 +67D8 +4D52 +F7DE +2548 +B7DA +A12A +A7CA +2108 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uni8F62 +ENCODING 36706 +BBX 15 15 1 -1 +BITMAP +2248 +2248 +FCF0 +2594 +FAF8 +AA98 +FD94 +AEFA +A840 +FBFE +2150 +F948 +2244 +2442 +2040 +ENDCHAR +STARTCHAR uni8F63 +ENCODING 36707 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +FA24 +23D8 +FA48 +ABFE +FA48 +AAEC +AB5A +FA10 +2290 +FA9C +2490 +2090 +23FE +ENDCHAR +STARTCHAR uni8F64 +ENCODING 36708 +BBX 15 15 1 -1 +BITMAP +2040 +2078 +F840 +23FC +FA24 +AAF8 +FA24 +AAFC +AAA8 +FAF8 +24A8 +F9FC +2154 +2154 +23FE +ENDCHAR +STARTCHAR uni8F65 +ENCODING 36709 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +2088 +FBDE +2252 +FBDE +AA52 +FBDE +AA4A +FAFE +2392 +FAFE +2292 +22FE +2282 +2206 +ENDCHAR +STARTCHAR uni8F66 +ENCODING 36710 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +0200 +7FFC +0400 +0900 +1100 +2100 +3FF8 +0100 +0100 +FFFE +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni8F67 +ENCODING 36711 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +FE40 +2040 +2840 +4840 +7E40 +0840 +0840 +0E40 +F842 +4842 +0842 +083E +0800 +ENDCHAR +STARTCHAR uni8F68 +ENCODING 36712 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +2080 +FC80 +43F0 +5090 +9090 +FC90 +1090 +1090 +1C90 +F092 +5112 +1112 +120E +1400 +ENDCHAR +STARTCHAR uni8F69 +ENCODING 36713 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +10FE +FE10 +2010 +2810 +4810 +7E10 +09FE +0810 +0E10 +F810 +4810 +0810 +0810 +0810 +ENDCHAR +STARTCHAR uni8F6A +ENCODING 36714 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FE20 +2020 +29FE +4820 +7E20 +0820 +0850 +0E50 +F850 +4888 +0888 +0904 +0A02 +ENDCHAR +STARTCHAR uni8F6B +ENCODING 36715 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +10FC +FE24 +2024 +28A4 +48A4 +7EA4 +08A4 +0924 +0E24 +F844 +4844 +0884 +0928 +0A10 +ENDCHAR +STARTCHAR uni8F6C +ENCODING 36716 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2020 +FDFC +4020 +5040 +93FE +FC40 +1080 +11FC +1C04 +F088 +5050 +1020 +1010 +1010 +ENDCHAR +STARTCHAR uni8F6D +ENCODING 36717 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +2100 +FD00 +4178 +5148 +9148 +FD48 +1148 +1168 +1D50 +F142 +5142 +1142 +123E +1400 +ENDCHAR +STARTCHAR uni8F6E +ENCODING 36718 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +20A0 +FCA0 +4110 +5208 +9406 +FD10 +1120 +1140 +1D80 +F100 +5104 +1104 +10FC +1000 +ENDCHAR +STARTCHAR uni8F6F +ENCODING 36719 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1040 +FE7C +2084 +2888 +4920 +7E20 +0820 +0850 +0E50 +F850 +4888 +0888 +0904 +0A02 +ENDCHAR +STARTCHAR uni8F70 +ENCODING 36720 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0800 +1100 +3FF8 +0100 +FFFE +0100 +0100 +3EF8 +0288 +1450 +0820 +3458 +C286 +ENDCHAR +STARTCHAR uni8F71 +ENCODING 36721 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FE20 +21FE +2820 +4820 +7E20 +08FC +0884 +0E84 +F884 +4884 +0884 +08FC +0884 +ENDCHAR +STARTCHAR uni8F72 +ENCODING 36722 +BBX 15 16 0 -2 +BITMAP +2000 +2000 +21FE +FC08 +4008 +51E8 +9128 +FD28 +1128 +1128 +1DE8 +F128 +5008 +1008 +1028 +1010 +ENDCHAR +STARTCHAR uni8F73 +ENCODING 36723 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +203E +FC20 +4020 +51FC +9104 +FD04 +1104 +11FC +1D04 +F100 +5100 +1200 +1200 +1400 +ENDCHAR +STARTCHAR uni8F74 +ENCODING 36724 +BBX 14 16 0 -2 +BITMAP +2020 +2020 +2020 +FC20 +41FC +5124 +9124 +FD24 +1124 +11FC +1D24 +F124 +5124 +1124 +11FC +1104 +ENDCHAR +STARTCHAR uni8F75 +ENCODING 36725 +BBX 15 16 0 -2 +BITMAP +2000 +2000 +21FC +FD04 +4104 +5104 +9104 +FD04 +11FC +1104 +1C00 +F090 +5088 +1104 +1202 +1402 +ENDCHAR +STARTCHAR uni8F76 +ENCODING 36726 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2120 +FD20 +41FC +5120 +9220 +FC20 +13FE +1020 +1C50 +F050 +5088 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni8F77 +ENCODING 36727 +BBX 15 16 0 -2 +BITMAP +2008 +203C +23E0 +FC20 +4124 +50A4 +90A8 +FC20 +13FE +1020 +1C20 +F020 +5020 +1020 +10A0 +1040 +ENDCHAR +STARTCHAR uni8F78 +ENCODING 36728 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2050 +FC88 +4104 +5212 +9020 +FC40 +1188 +1010 +1C20 +F044 +5188 +1010 +1060 +1380 +ENDCHAR +STARTCHAR uni8F79 +ENCODING 36729 +BBX 15 16 0 -2 +BITMAP +2008 +201C +21E0 +FD00 +4120 +5120 +9120 +FDFE +1020 +1020 +1CA8 +F0A4 +5122 +1222 +10A0 +1040 +ENDCHAR +STARTCHAR uni8F7A +ENCODING 36730 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1044 +FE44 +2044 +2844 +4894 +7E88 +0900 +08FC +0E84 +F884 +4884 +0884 +08FC +0884 +ENDCHAR +STARTCHAR uni8F7B +ENCODING 36731 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2008 +FC10 +4030 +5048 +9084 +FF02 +1000 +11FC +1C20 +F020 +5020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni8F7C +ENCODING 36732 +BBX 15 16 0 -2 +BITMAP +2010 +2014 +2012 +FC10 +41FE +5010 +9010 +FDD0 +1090 +1090 +1C90 +F088 +50EA +138A +1006 +1002 +ENDCHAR +STARTCHAR uni8F7D +ENCODING 36733 +BBX 15 16 0 -2 +BITMAP +0820 +0828 +7F24 +0820 +FFFE +1020 +1024 +FF24 +2024 +4828 +7F28 +0810 +0F12 +F82A +0846 +0882 +ENDCHAR +STARTCHAR uni8F7E +ENCODING 36734 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +1010 +FE20 +2044 +2882 +48FE +7E12 +0810 +0810 +0EFE +F810 +4810 +0810 +09FE +0800 +ENDCHAR +STARTCHAR uni8F7F +ENCODING 36735 +BBX 15 16 0 -2 +BITMAP +2008 +203C +21E0 +FC20 +4020 +53FE +9050 +FC88 +1104 +128A +1C88 +F088 +5088 +1108 +1108 +1208 +ENDCHAR +STARTCHAR uni8F80 +ENCODING 36736 +BBX 15 16 0 -2 +BITMAP +2010 +2020 +20FC +FC84 +40A4 +5094 +9094 +FDFE +1084 +10A4 +1C94 +F094 +5084 +1104 +1114 +1208 +ENDCHAR +STARTCHAR uni8F81 +ENCODING 36737 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2050 +FC88 +4104 +5202 +91FC +FC20 +1020 +1020 +1DFC +F020 +5020 +1020 +13FE +1000 +ENDCHAR +STARTCHAR uni8F82 +ENCODING 36738 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1078 +FE88 +2150 +2820 +4850 +7E88 +0906 +08F8 +0E88 +F888 +4888 +0888 +08F8 +0888 +ENDCHAR +STARTCHAR uni8F83 +ENCODING 36739 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +2020 +FDFE +4000 +5088 +9104 +FE02 +1088 +1088 +1C50 +F050 +5020 +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni8F84 +ENCODING 36740 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2120 +FD28 +4128 +51E8 +9128 +FD28 +1128 +11E8 +1D28 +F12A +513A +13EA +1026 +1020 +ENDCHAR +STARTCHAR uni8F85 +ENCODING 36741 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +23FE +FC20 +4020 +51FC +9124 +FD24 +11FC +1124 +1D24 +F1FC +5124 +1124 +1124 +110C +ENDCHAR +STARTCHAR uni8F86 +ENCODING 36742 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2050 +FC50 +4050 +53FE +9252 +FE52 +1252 +12AA +1EA6 +F302 +5202 +1202 +120A +1204 +ENDCHAR +STARTCHAR uni8F87 +ENCODING 36743 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7EFC +0820 +FEFE +1450 +2288 +4206 +BFF8 +0500 +0900 +1FF0 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni8F88 +ENCODING 36744 +BBX 15 16 0 -2 +BITMAP +0440 +7C7C +0440 +3C78 +0440 +7C7C +0640 +0200 +3FF8 +0500 +0900 +1FF0 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni8F89 +ENCODING 36745 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +9202 +5444 +5840 +13FC +FC80 +28A0 +2920 +29FC +2820 +2820 +2BFE +4C20 +4820 +8020 +ENDCHAR +STARTCHAR uni8F8A +ENCODING 36746 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2104 +FD04 +41FC +5104 +9104 +FDFC +1000 +1112 +1DD4 +F118 +5110 +1152 +1192 +110E +ENDCHAR +STARTCHAR uni8F8B +ENCODING 36747 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2202 +FA8A +4252 +53FE +9242 +FE22 +13FE +1282 +1E82 +F282 +52FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uni8F8C +ENCODING 36748 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +FC00 +4000 +51FC +9104 +FD04 +11FC +1020 +1D28 +F124 +5222 +1422 +10A0 +1040 +ENDCHAR +STARTCHAR uni8F8D +ENCODING 36749 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2042 +FD4A +4084 +514A +9252 +FC20 +1000 +13DE +1C52 +F152 +5094 +1148 +1254 +1422 +ENDCHAR +STARTCHAR uni8F8E +ENCODING 36750 +BBX 15 16 0 -2 +BITMAP +2092 +2092 +2124 +FA48 +4124 +5092 +9092 +FC00 +11FE +1122 +1D22 +F1FE +5122 +1122 +11FE +1102 +ENDCHAR +STARTCHAR uni8F8F +ENCODING 36751 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +23FE +FC20 +41FC +5040 +93FE +FC88 +1104 +12FA +1C20 +F1FC +5020 +1050 +1088 +1304 +ENDCHAR +STARTCHAR uni8F90 +ENCODING 36752 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +2000 +FCFC +4084 +5084 +90FC +FC00 +11FE +1122 +1D22 +F1FE +5122 +1122 +11FE +1102 +ENDCHAR +STARTCHAR uni8F91 +ENCODING 36753 +BBX 15 16 0 -2 +BITMAP +2000 +21F8 +2108 +FD08 +41F8 +5000 +97FE +FD08 +11F8 +1108 +1DF8 +F108 +513E +17C8 +1008 +1008 +ENDCHAR +STARTCHAR uni8F92 +ENCODING 36754 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1088 +FE88 +20F8 +2888 +4888 +7EF8 +0800 +09FC +0F54 +F954 +4954 +0954 +0BFE +0800 +ENDCHAR +STARTCHAR uni8F93 +ENCODING 36755 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2110 +FA08 +25F6 +4000 +53C4 +9254 +FA54 +13D4 +1A54 +F254 +53D4 +1244 +1254 +12C8 +ENDCHAR +STARTCHAR uni8F94 +ENCODING 36756 +BBX 15 16 0 -2 +BITMAP +2208 +2208 +47D0 +8A22 +F53C +27C8 +4110 +F93E +07C0 +193E +E100 +3FF8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni8F95 +ENCODING 36757 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +21FC +FC20 +43FE +5000 +91FC +FD04 +1104 +11FC +1C52 +F094 +5188 +16A4 +10C2 +1080 +ENDCHAR +STARTCHAR uni8F96 +ENCODING 36758 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +FE02 +4424 +51FC +9020 +FDFC +1020 +13FE +1C20 +F1FC +5104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni8F97 +ENCODING 36759 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2204 +FA04 +43FC +5248 +9248 +FEFC +1248 +1248 +1FFE +F2A4 +52A8 +1490 +14C8 +1886 +ENDCHAR +STARTCHAR uni8F98 +ENCODING 36760 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +FA50 +4250 +53FE +9252 +FE52 +13FE +1200 +1E92 +F2D4 +5298 +1492 +14D2 +188E +ENDCHAR +STARTCHAR uni8F99 +ENCODING 36761 +BBX 15 16 0 -2 +BITMAP +2208 +2108 +27C8 +FA10 +249E +4FD4 +5064 +9794 +FC94 +1794 +1C94 +F788 +5488 +1494 +14A4 +15C2 +ENDCHAR +STARTCHAR uni8F9A +ENCODING 36762 +BBX 15 16 0 -2 +BITMAP +2020 +2124 +20A8 +FBFE +20A8 +4124 +5222 +9104 +F904 +11DE +1A44 +F554 +509E +1104 +1204 +1404 +ENDCHAR +STARTCHAR uni8F9B +ENCODING 36763 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +0420 +0440 +FFFE +0100 +0100 +0100 +7FFC +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni8F9C +ENCODING 36764 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +1FF0 +1010 +1FF0 +0100 +3FF8 +0820 +FFFE +0100 +3FF8 +0100 +0100 +ENDCHAR +STARTCHAR uni8F9D +ENCODING 36765 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2020 +29FC +4400 +FE88 +4250 +01FE +7C20 +4420 +45FC +4420 +4420 +7C20 +4420 +0020 +ENDCHAR +STARTCHAR uni8F9E +ENCODING 36766 +BBX 15 15 1 -1 +BITMAP +0C20 +7020 +13FE +1104 +1084 +FC88 +13FE +1020 +1020 +7FFE +4420 +4420 +4420 +7C20 +0020 +ENDCHAR +STARTCHAR uni8F9F +ENCODING 36767 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +45FC +4488 +4488 +7C50 +4010 +43FE +4020 +BE20 +A3FC +2220 +2220 +2220 +3E20 +ENDCHAR +STARTCHAR uni8FA0 +ENCODING 36768 +BBX 15 16 0 -2 +BITMAP +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0100 +3FF8 +0820 +FFFE +0100 +3FF8 +0100 +0100 +ENDCHAR +STARTCHAR uni8FA1 +ENCODING 36769 +BBX 15 16 0 -2 +BITMAP +2040 +1020 +1020 +FDFC +0000 +4488 +2850 +FDFE +1020 +1020 +FDFC +1020 +2020 +2020 +4020 +8020 +ENDCHAR +STARTCHAR uni8FA2 +ENCODING 36770 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +FE20 +11FC +1000 +FE88 +9250 +93FE +FE20 +1020 +39FC +5420 +9220 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni8FA3 +ENCODING 36771 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FFFE +4420 +45FC +2924 +FF24 +1124 +11FC +1CA8 +F0A8 +1124 +2124 +2222 +4020 +ENDCHAR +STARTCHAR uni8FA4 +ENCODING 36772 +BBX 15 15 1 -1 +BITMAP +0E10 +F410 +4AFE +2A44 +FF24 +8128 +81FE +7E10 +0210 +2210 +14FE +0810 +1410 +2210 +C010 +ENDCHAR +STARTCHAR uni8FA5 +ENCODING 36773 +BBX 15 16 0 -2 +BITMAP +0820 +4A10 +5210 +7EFE +2400 +4844 +BE28 +22FE +2210 +3E10 +207C +3E10 +2210 +2210 +3E10 +2210 +ENDCHAR +STARTCHAR uni8FA6 +ENCODING 36774 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +F93E +57D4 +5154 +5154 +F97E +2148 +2148 +F97E +2248 +2248 +4248 +4448 +88C8 +ENDCHAR +STARTCHAR uni8FA7 +ENCODING 36775 +BBX 15 15 1 -1 +BITMAP +1010 +1790 +FAFE +4AA4 +4AA4 +2AA8 +FEFE +1290 +1290 +FEFE +1290 +1290 +2490 +2490 +4990 +ENDCHAR +STARTCHAR uni8FA8 +ENCODING 36776 +BBX 15 15 1 -1 +BITMAP +1090 +1090 +FEFE +4AA4 +4AA4 +2AA8 +FEFE +1290 +1290 +FEFE +1290 +1090 +2110 +2110 +4210 +ENDCHAR +STARTCHAR uni8FA9 +ENCODING 36777 +BBX 15 16 0 -2 +BITMAP +2010 +1208 +1108 +7D3E +0000 +2B14 +1108 +FD3E +1108 +1108 +7D1C +1148 +1188 +2108 +2008 +4008 +ENDCHAR +STARTCHAR uni8FAA +ENCODING 36778 +BBX 15 16 0 -2 +BITMAP +0820 +4F10 +4810 +48FE +FF00 +0844 +1028 +7EFE +4210 +7E10 +407C +7F10 +4110 +7F10 +4110 +0010 +ENDCHAR +STARTCHAR uni8FAB +ENCODING 36779 +BBX 15 16 0 -2 +BITMAP +2010 +1088 +1088 +7D3E +0140 +2BD4 +1088 +FCBE +1108 +13C8 +7C1C +1008 +10C8 +2308 +2008 +4008 +ENDCHAR +STARTCHAR uni8FAC +ENCODING 36780 +BBX 15 16 0 -2 +BITMAP +4010 +2208 +2108 +F93E +0000 +57D4 +2088 +FCBE +2288 +2108 +711C +2288 +2288 +4488 +4808 +8008 +ENDCHAR +STARTCHAR uni8FAD +ENCODING 36781 +BBX 15 15 1 -1 +BITMAP +0610 +7A10 +49FE +FF44 +2244 +1428 +FF28 +91FE +A510 +BB10 +817C +FD10 +A510 +9910 +A510 +ENDCHAR +STARTCHAR uni8FAE +ENCODING 36782 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +FA7E +5694 +5114 +5154 +FAFE +2728 +2108 +F93E +2548 +2528 +4928 +4108 +8108 +ENDCHAR +STARTCHAR uni8FAF +ENCODING 36783 +BBX 15 15 1 -1 +BITMAP +2008 +2388 +F83E +57D4 +5014 +5394 +F83E +2388 +2008 +F83E +2388 +2288 +4288 +4288 +8388 +ENDCHAR +STARTCHAR uni8FB0 +ENCODING 36784 +BBX 15 14 1 -1 +BITMAP +7FFE +4000 +4000 +4FF8 +4000 +4000 +7FFE +4880 +4884 +4888 +8850 +8820 +8F10 +380E +ENDCHAR +STARTCHAR uni8FB1 +ENCODING 36785 +BBX 14 14 1 -1 +BITMAP +7FFC +4000 +5FF8 +4000 +7FFC +4888 +4850 +8F30 +380C +0020 +FFFC +1020 +0820 +00E0 +ENDCHAR +STARTCHAR uni8FB2 +ENCODING 36786 +BBX 15 15 1 -1 +BITMAP +0240 +1FF8 +1248 +1FF8 +1248 +1FF8 +0000 +3FFC +2000 +2FF8 +2000 +3FFE +4448 +8730 +1C0E +ENDCHAR +STARTCHAR uni8FB3 +ENCODING 36787 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +7EFC +0820 +1C70 +2AA8 +C824 +3FFC +2000 +2FF8 +2000 +3FFE +2888 +4850 +4A30 +8C0E +ENDCHAR +STARTCHAR uni8FB4 +ENCODING 36788 +BBX 15 15 1 -1 +BITMAP +F700 +95FE +F700 +0100 +7D7C +5500 +5500 +7DFE +5550 +5552 +7D52 +1154 +FF48 +1164 +12C2 +ENDCHAR +STARTCHAR uni8FB5 +ENCODING 36789 +BBX 15 15 1 -1 +BITMAP +00E0 +0708 +7830 +00C2 +070C +7830 +01C0 +0F00 +F100 +0100 +11F8 +1100 +2900 +4700 +80FE +ENDCHAR +STARTCHAR uni8FB6 +ENCODING 36790 +BBX 15 15 1 -1 +BITMAP +4000 +2000 +1000 +8000 +4000 +2000 +0000 +E000 +2000 +2000 +2000 +2000 +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FB7 +ENCODING 36791 +BBX 15 15 1 -1 +BITMAP +4000 +2000 +1000 +8000 +4000 +2000 +0FFE +E000 +2000 +2000 +2000 +2000 +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FB8 +ENCODING 36792 +BBX 15 14 0 -1 +BITMAP +2000 +17F8 +1108 +0110 +0120 +F13C +1104 +1104 +1204 +1204 +1428 +1810 +2800 +47FE +ENDCHAR +STARTCHAR uni8FB9 +ENCODING 36793 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +1040 +13FC +0044 +0044 +F044 +1084 +1084 +1104 +1104 +1228 +1410 +2800 +47FE +ENDCHAR +STARTCHAR uni8FBA +ENCODING 36794 +BBX 15 14 1 -1 +BITMAP +8000 +4FFC +2084 +0084 +0084 +0084 +E104 +2104 +2204 +2408 +2808 +2030 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FBB +ENCODING 36795 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +8040 +4040 +2FFE +0040 +E040 +2040 +2040 +2040 +2040 +2040 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FBC +ENCODING 36796 +BBX 15 14 1 -1 +BITMAP +83C0 +4040 +2040 +0040 +0040 +E0A0 +20A0 +2110 +2110 +2208 +2C06 +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FBD +ENCODING 36797 +BBX 15 14 0 -1 +BITMAP +23F8 +1010 +1020 +0040 +0040 +F040 +1040 +1040 +1040 +1040 +1140 +1080 +2800 +47FE +ENDCHAR +STARTCHAR uni8FBE +ENCODING 36798 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +1040 +1040 +07FE +0040 +F040 +10A0 +1090 +1108 +1204 +1404 +1000 +2800 +47FE +ENDCHAR +STARTCHAR uni8FBF +ENCODING 36799 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +8444 +4444 +2444 +0444 +E444 +2444 +2444 +2444 +27FC +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FC0 +ENCODING 36800 +BBX 15 14 0 -1 +BITMAP +21FC +1020 +1020 +0020 +0020 +F3FE +1020 +1020 +1020 +1020 +1020 +1020 +2800 +47FE +ENDCHAR +STARTCHAR uni8FC1 +ENCODING 36801 +BBX 15 15 1 -1 +BITMAP +4038 +27C0 +1040 +8040 +4040 +2040 +0FFE +E040 +2040 +2040 +2040 +2040 +2040 +5040 +8FFE +ENDCHAR +STARTCHAR uni8FC2 +ENCODING 36802 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1040 +8040 +4040 +2040 +0FFE +E040 +2040 +2040 +2040 +2040 +21C0 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FC3 +ENCODING 36803 +BBX 15 14 0 -1 +BITMAP +23F8 +1000 +1000 +07FE +0080 +F100 +11F8 +1008 +1008 +1008 +1050 +1020 +2800 +47FE +ENDCHAR +STARTCHAR uni8FC4 +ENCODING 36804 +BBX 15 15 1 -1 +BITMAP +4100 +2100 +13FE +8400 +4800 +23F8 +0060 +E080 +2100 +2200 +2204 +2204 +21FC +5000 +8FFE +ENDCHAR +STARTCHAR uni8FC5 +ENCODING 36805 +BBX 15 14 1 -1 +BITMAP +8FF0 +4010 +2110 +0110 +0110 +0110 +EFF0 +2110 +2110 +210A +210A +2104 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FC6 +ENCODING 36806 +BBX 15 15 1 -1 +BITMAP +4040 +2240 +1240 +8258 +4268 +23C8 +0E48 +E248 +2258 +2240 +2202 +2202 +21FE +5000 +8FFE +ENDCHAR +STARTCHAR uni8FC7 +ENCODING 36807 +BBX 15 15 0 -1 +BITMAP +0010 +2010 +1010 +17FE +0010 +0010 +F210 +1110 +1110 +1010 +1010 +1050 +1020 +2800 +47FE +ENDCHAR +STARTCHAR uni8FC8 +ENCODING 36808 +BBX 15 14 0 -1 +BITMAP +2000 +17FE +1080 +0080 +00FC +F084 +1084 +1084 +1104 +1104 +1228 +1410 +2800 +47FE +ENDCHAR +STARTCHAR uni8FC9 +ENCODING 36809 +BBX 15 14 0 -1 +BITMAP +21FC +1104 +1104 +0104 +01FC +F104 +1100 +1100 +1100 +1100 +1200 +1400 +2800 +47FE +ENDCHAR +STARTCHAR uni8FCA +ENCODING 36810 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1040 +8040 +47FC +2444 +0444 +E444 +2444 +2444 +245C +2040 +2040 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FCB +ENCODING 36811 +BBX 15 14 0 -1 +BITMAP +27FC +1040 +1040 +0040 +0040 +F3F8 +1040 +1040 +1040 +1040 +17FC +1000 +2800 +47FE +ENDCHAR +STARTCHAR uni8FCC +ENCODING 36812 +BBX 15 14 0 -1 +BITMAP +21FC +1104 +1104 +01FC +0104 +F104 +11FC +1104 +1104 +1104 +1214 +1408 +2800 +47FE +ENDCHAR +STARTCHAR uni8FCD +ENCODING 36813 +BBX 15 15 1 -1 +BITMAP +4080 +2098 +10E0 +8F80 +4080 +2488 +0488 +E488 +2488 +27F8 +2082 +2082 +207E +5000 +8FFE +ENDCHAR +STARTCHAR uni8FCE +ENCODING 36814 +BBX 15 14 1 -1 +BITMAP +8180 +467C +2444 +0444 +0444 +0444 +E444 +2444 +2444 +2744 +2C4C +2040 +5040 +8FFE +ENDCHAR +STARTCHAR uni8FCF +ENCODING 36815 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +1040 +1040 +07FE +0040 +F040 +10A0 +1090 +1108 +1244 +1424 +1020 +2800 +47FE +ENDCHAR +STARTCHAR uni8FD0 +ENCODING 36816 +BBX 15 14 0 -1 +BITMAP +23F8 +1000 +1000 +0000 +07FC +F040 +1080 +1110 +1208 +17FC +1204 +1000 +2800 +47FE +ENDCHAR +STARTCHAR uni8FD1 +ENCODING 36817 +BBX 15 15 1 -1 +BITMAP +0038 +83C0 +4200 +2200 +0200 +03FE +0210 +E210 +2210 +2410 +2410 +2810 +2010 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FD2 +ENCODING 36818 +BBX 15 15 0 -1 +BITMAP +0080 +2040 +1040 +17FE +0000 +0000 +F1F0 +1110 +1110 +1110 +1212 +1212 +140E +2800 +47FE +ENDCHAR +STARTCHAR uni8FD3 +ENCODING 36819 +BBX 15 15 1 -1 +BITMAP +4000 +23FC +1110 +8110 +4110 +2110 +07FE +E050 +2090 +2110 +2210 +2C10 +2030 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FD4 +ENCODING 36820 +BBX 15 14 1 -1 +BITMAP +87FC +4400 +2400 +07F8 +0508 +0508 +E490 +2890 +2860 +3060 +2198 +2606 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FD5 +ENCODING 36821 +BBX 15 15 1 -1 +BITMAP +4100 +2100 +13FC +8440 +4840 +2040 +0040 +EFFE +2040 +2040 +2040 +2040 +2040 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FD6 +ENCODING 36822 +BBX 15 15 0 -1 +BITMAP +0050 +2048 +1048 +1040 +07FE +0040 +F040 +10A0 +1090 +1108 +1204 +1404 +1000 +2800 +47FE +ENDCHAR +STARTCHAR uni8FD7 +ENCODING 36823 +BBX 15 14 0 -1 +BITMAP +23FC +1040 +1040 +0040 +0040 +F7FE +1040 +10A0 +1090 +1108 +1204 +1404 +2800 +47FE +ENDCHAR +STARTCHAR uni8FD8 +ENCODING 36824 +BBX 15 14 0 -1 +BITMAP +23FC +1020 +1020 +0040 +0040 +F0D0 +1148 +1244 +1444 +1040 +1040 +1040 +2800 +47FE +ENDCHAR +STARTCHAR uni8FD9 +ENCODING 36825 +BBX 15 15 0 -1 +BITMAP +0080 +2040 +1040 +17FC +0010 +0210 +F120 +10A0 +1040 +10A0 +1110 +1208 +1408 +2800 +47FE +ENDCHAR +STARTCHAR uni8FDA +ENCODING 36826 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +87FC +4444 +2444 +0444 +E444 +27FC +2040 +2040 +2040 +2040 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FDB +ENCODING 36827 +BBX 15 15 0 -1 +BITMAP +0090 +2090 +1090 +13FC +0090 +0090 +F090 +17FE +1090 +1090 +1110 +1110 +1210 +2800 +47FE +ENDCHAR +STARTCHAR uni8FDC +ENCODING 36828 +BBX 15 15 0 -2 +BITMAP +23F8 +1000 +1000 +0000 +07FC +F120 +1120 +1120 +1120 +1124 +1224 +1224 +141C +2800 +47FE +ENDCHAR +STARTCHAR uni8FDD +ENCODING 36829 +BBX 15 15 0 -1 +BITMAP +0080 +4080 +2FFC +2080 +0080 +07F8 +E080 +2080 +2FFC +2084 +2084 +2094 +2088 +5080 +8FFE +ENDCHAR +STARTCHAR uni8FDE +ENCODING 36830 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +17FE +1080 +00A0 +0120 +F3FC +1020 +1020 +1020 +17FE +1020 +1020 +2820 +47FE +ENDCHAR +STARTCHAR uni8FDF +ENCODING 36831 +BBX 15 14 0 -1 +BITMAP +21F8 +1108 +1108 +0108 +01F8 +F108 +1120 +1110 +1208 +1204 +1404 +1000 +2800 +47FE +ENDCHAR +STARTCHAR uni8FE0 +ENCODING 36832 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +1080 +80FC +4080 +2080 +0080 +E7F8 +2408 +2408 +2408 +2408 +27F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FE1 +ENCODING 36833 +BBX 15 14 0 -1 +BITMAP +23FC +1204 +1204 +03FC +0200 +F280 +1284 +1298 +12E0 +1282 +1282 +147E +2800 +47FE +ENDCHAR +STARTCHAR uni8FE2 +ENCODING 36834 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1084 +8084 +4104 +2204 +0C18 +E000 +23F8 +2208 +2208 +2208 +23F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FE3 +ENCODING 36835 +BBX 15 15 0 -1 +BITMAP +0048 +2248 +1248 +1248 +07FE +0248 +F248 +1248 +1278 +1200 +1200 +13FE +1000 +2800 +47FE +ENDCHAR +STARTCHAR uni8FE4 +ENCODING 36836 +BBX 15 15 1 -1 +BITMAP +0200 +8200 +43FE +2400 +8840 +4258 +2268 +03C8 +EE48 +2258 +2242 +2202 +21FE +5000 +8FFE +ENDCHAR +STARTCHAR uni8FE5 +ENCODING 36837 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1404 +8404 +45F4 +2514 +0514 +E514 +25F4 +2404 +2404 +2404 +241C +5000 +8FFE +ENDCHAR +STARTCHAR uni8FE6 +ENCODING 36838 +BBX 15 15 1 -1 +BITMAP +4200 +2200 +123C +8FA4 +42A4 +22A4 +02A4 +E2A4 +22A4 +24A4 +24A4 +28A4 +233C +5000 +8FFE +ENDCHAR +STARTCHAR uni8FE7 +ENCODING 36839 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +17FC +1444 +0444 +07FC +F444 +1444 +17FC +1444 +1040 +1040 +1040 +2800 +47FE +ENDCHAR +STARTCHAR uni8FE8 +ENCODING 36840 +BBX 15 15 1 -1 +BITMAP +0100 +8100 +4210 +2208 +8474 +4F84 +2000 +07F8 +E408 +2408 +2408 +2408 +27F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FE9 +ENCODING 36841 +BBX 15 15 1 -1 +BITMAP +0200 +8200 +47FC +2440 +0840 +0040 +E248 +2248 +2444 +2444 +2842 +2040 +21C0 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FEA +ENCODING 36842 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +87FC +4444 +2444 +0444 +E7FC +2444 +2444 +2444 +27FC +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FEB +ENCODING 36843 +BBX 15 15 1 -1 +BITMAP +0080 +8100 +47F8 +2408 +0408 +0408 +E7F8 +2408 +2408 +2408 +2408 +27F8 +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FEC +ENCODING 36844 +BBX 15 15 0 -1 +BITMAP +0080 +2040 +1000 +17FC +0040 +0040 +F040 +13F8 +1040 +1040 +1040 +1FFE +1000 +2800 +47FE +ENDCHAR +STARTCHAR uni8FED +ENCODING 36845 +BBX 15 15 1 -1 +BITMAP +0040 +8240 +4240 +23FC +0440 +0440 +E040 +2FFE +20C0 +20A0 +2110 +2208 +2404 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FEE +ENCODING 36846 +BBX 15 15 1 -1 +BITMAP +0100 +8100 +4100 +23FE +8440 +4840 +207C +0040 +E040 +207C +2040 +2040 +2040 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FEF +ENCODING 36847 +BBX 15 15 1 -1 +BITMAP +4410 +2410 +0790 +8490 +4890 +2C9C +1292 +E110 +2110 +2210 +2410 +2810 +2010 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FF0 +ENCODING 36848 +BBX 15 15 1 -1 +BITMAP +0048 +8044 +4040 +2FFE +0040 +0040 +0248 +E248 +2444 +2444 +2842 +2040 +2040 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FF1 +ENCODING 36849 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FE +8402 +4502 +2108 +0130 +E1C0 +2100 +2100 +2102 +2102 +20FE +5000 +8FFE +ENDCHAR +STARTCHAR uni8FF2 +ENCODING 36850 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +1040 +13FC +0040 +0040 +F7FE +1040 +1080 +1110 +1208 +17FC +1204 +2800 +47FE +ENDCHAR +STARTCHAR uni8FF3 +ENCODING 36851 +BBX 15 14 0 -1 +BITMAP +23F8 +1010 +1020 +0050 +0188 +F604 +13F8 +1040 +1040 +1040 +17FC +1000 +2800 +47FE +ENDCHAR +STARTCHAR uni8FF4 +ENCODING 36852 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1404 +8404 +45F4 +2514 +0514 +E514 +25F4 +2404 +2404 +27FC +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FF5 +ENCODING 36853 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1404 +8404 +45F4 +2404 +05F4 +E514 +2514 +25F4 +2404 +2404 +241C +5000 +8FFE +ENDCHAR +STARTCHAR uni8FF6 +ENCODING 36854 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +17FE +1080 +0100 +03FC +F504 +19FC +1104 +11FC +1104 +1114 +1108 +2800 +47FE +ENDCHAR +STARTCHAR uni8FF7 +ENCODING 36855 +BBX 15 15 1 -1 +BITMAP +0040 +8444 +4244 +2148 +0150 +0040 +EFFE +2150 +2150 +2248 +2446 +2840 +2040 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FF8 +ENCODING 36856 +BBX 15 15 1 -1 +BITMAP +4208 +2108 +1110 +87FC +4110 +2110 +0110 +EFFE +2110 +2110 +2110 +2210 +2210 +5410 +8FFE +ENDCHAR +STARTCHAR uni8FF9 +ENCODING 36857 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1040 +87FE +4090 +2090 +0294 +E294 +2492 +2492 +2110 +2110 +2230 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FFA +ENCODING 36858 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1120 +8120 +4FFC +2924 +0924 +EE24 +283C +2804 +2804 +2FFC +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FFB +ENCODING 36859 +BBX 15 15 1 -1 +BITMAP +4040 +20F8 +1308 +8090 +4060 +20C0 +0720 +E07E +2382 +2044 +2038 +2060 +2780 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FFC +ENCODING 36860 +BBX 15 16 0 -2 +BITMAP +0040 +2040 +1040 +17FC +0040 +0040 +F3F8 +1000 +1000 +13F8 +1208 +1208 +13F8 +1208 +2800 +47FE +ENDCHAR +STARTCHAR uni8FFD +ENCODING 36861 +BBX 15 15 1 -1 +BITMAP +0080 +8100 +47F0 +2410 +0410 +0410 +E7F0 +2400 +27F8 +2408 +2408 +2408 +27F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni8FFE +ENCODING 36862 +BBX 15 16 0 -2 +BITMAP +0004 +27E4 +1104 +1114 +0114 +03D4 +F254 +1254 +1554 +1094 +1094 +1104 +1214 +1408 +2800 +47FE +ENDCHAR +STARTCHAR uni8FFF +ENCODING 36863 +BBX 15 16 0 -2 +BITMAP +0100 +2100 +11FC +1204 +0404 +03E4 +F224 +1224 +13E4 +1224 +1224 +13E4 +1004 +1028 +2810 +47FE +ENDCHAR +STARTCHAR uni9000 +ENCODING 36864 +BBX 15 14 1 -1 +BITMAP +83F8 +4208 +2208 +03F8 +0208 +020A +E3FC +2248 +2220 +2210 +23C8 +2E06 +5000 +8FFE +ENDCHAR +STARTCHAR uni9001 +ENCODING 36865 +BBX 15 14 1 -1 +BITMAP +8208 +4108 +2110 +07FC +0040 +E040 +2040 +2FFE +20A0 +2110 +2208 +2404 +5000 +8FFE +ENDCHAR +STARTCHAR uni9002 +ENCODING 36866 +BBX 15 15 1 -1 +BITMAP +4038 +23C0 +1040 +8040 +4FFE +2040 +0040 +E040 +23FC +2204 +2204 +2204 +23FC +5000 +8FFE +ENDCHAR +STARTCHAR uni9003 +ENCODING 36867 +BBX 15 15 1 -1 +BITMAP +0120 +8924 +4528 +2528 +0120 +0120 +E330 +2D28 +2124 +2220 +2224 +2424 +281C +5000 +8FFE +ENDCHAR +STARTCHAR uni9004 +ENCODING 36868 +BBX 15 16 0 -2 +BITMAP +0080 +2080 +10FC +1108 +0290 +0060 +F198 +1626 +1020 +11FC +1020 +1220 +13FE +1020 +2820 +47FE +ENDCHAR +STARTCHAR uni9005 +ENCODING 36869 +BBX 15 15 1 -1 +BITMAP +401C +27E0 +1400 +8400 +47FE +2400 +0400 +E5FC +2504 +2904 +2904 +3104 +21FC +5000 +8FFE +ENDCHAR +STARTCHAR uni9006 +ENCODING 36870 +BBX 15 15 1 -1 +BITMAP +0208 +8108 +4110 +2FFE +0040 +0444 +0444 +E444 +27FC +2040 +2040 +2080 +2300 +5800 +87FE +ENDCHAR +STARTCHAR uni9007 +ENCODING 36871 +BBX 15 15 0 -1 +BITMAP +0210 +4250 +2250 +225C +0F74 +02D4 +E254 +2254 +225C +2350 +2E42 +2442 +203E +5000 +8FFE +ENDCHAR +STARTCHAR uni9008 +ENCODING 36872 +BBX 15 15 1 -1 +BITMAP +0040 +8040 +4080 +27FC +8404 +4404 +25F4 +0514 +E514 +2514 +25F4 +2404 +241C +5000 +8FFE +ENDCHAR +STARTCHAR uni9009 +ENCODING 36873 +BBX 15 15 0 -1 +BITMAP +0040 +2240 +1240 +13F8 +0440 +0040 +F7FC +1120 +1120 +1120 +1224 +1224 +141C +2800 +47FE +ENDCHAR +STARTCHAR uni900A +ENCODING 36874 +BBX 15 16 0 -2 +BITMAP +0010 +4F90 +2090 +2110 +0210 +02D8 +E354 +2254 +2692 +2A92 +2312 +2210 +2A50 +2420 +5000 +8FFE +ENDCHAR +STARTCHAR uni900B +ENCODING 36875 +BBX 15 15 1 -1 +BITMAP +4048 +2044 +1FFE +8040 +47FC +2444 +07FC +E444 +2444 +27FC +2444 +2444 +244C +5000 +8FFE +ENDCHAR +STARTCHAR uni900C +ENCODING 36876 +BBX 15 15 1 -1 +BITMAP +4080 +2080 +10FE +8080 +47FC +2404 +07E4 +E424 +2424 +27E4 +2404 +2404 +27FC +5000 +8FFE +ENDCHAR +STARTCHAR uni900D +ENCODING 36877 +BBX 15 15 1 -1 +BITMAP +4248 +2248 +1444 +8040 +43F8 +2208 +03F8 +E208 +2208 +23F8 +2208 +2208 +2238 +5000 +8FFE +ENDCHAR +STARTCHAR uni900E +ENCODING 36878 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +10A0 +80A0 +47FC +24A4 +04A4 +E73C +2404 +27FC +2404 +2404 +27FC +5000 +8FFE +ENDCHAR +STARTCHAR uni900F +ENCODING 36879 +BBX 15 15 1 -1 +BITMAP +0038 +87C0 +4040 +2FFE +0150 +0248 +EC46 +23F0 +2110 +211C +2204 +2404 +281C +5000 +8FFE +ENDCHAR +STARTCHAR uni9010 +ENCODING 36880 +BBX 15 14 1 -1 +BITMAP +8FFE +4080 +2344 +0CA8 +0130 +E220 +2C60 +20B0 +2128 +2E26 +2020 +21C0 +5000 +8FFE +ENDCHAR +STARTCHAR uni9011 +ENCODING 36881 +BBX 15 15 1 -1 +BITMAP +4050 +2048 +1048 +8FFE +4040 +2444 +0248 +E250 +2060 +2150 +2248 +2C46 +21C0 +5000 +8FFE +ENDCHAR +STARTCHAR uni9012 +ENCODING 36882 +BBX 15 15 0 -1 +BITMAP +0110 +20A0 +13F8 +1048 +0048 +03F8 +F240 +1240 +13FC +10C4 +1144 +1254 +1448 +2840 +47FE +ENDCHAR +STARTCHAR uni9013 +ENCODING 36883 +BBX 15 15 1 -1 +BITMAP +0038 +8FC0 +4840 +2FFC +0840 +0FFC +0840 +EBF8 +2A48 +2A48 +3248 +2258 +2040 +5000 +8FFE +ENDCHAR +STARTCHAR uni9014 +ENCODING 36884 +BBX 15 15 1 -1 +BITMAP +0040 +80A0 +4318 +2C06 +03F8 +0040 +E040 +2FFE +2040 +2248 +2444 +2842 +21C0 +5000 +8FFE +ENDCHAR +STARTCHAR uni9015 +ENCODING 36885 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1000 +8248 +4490 +2490 +0248 +E000 +27FC +2040 +2040 +2040 +2FFE +5000 +8FFE +ENDCHAR +STARTCHAR uni9016 +ENCODING 36886 +BBX 15 15 1 -1 +BITMAP +4110 +2912 +0A52 +8454 +4494 +2A90 +0210 +E610 +2A10 +2228 +2228 +2244 +2C82 +5000 +8FFE +ENDCHAR +STARTCHAR uni9017 +ENCODING 36887 +BBX 15 15 1 -1 +BITMAP +4000 +2FFC +1000 +87F8 +4408 +2408 +0408 +E7F8 +2010 +2210 +2120 +2120 +2FFC +5000 +8FFE +ENDCHAR +STARTCHAR uni9018 +ENCODING 36888 +BBX 15 15 0 -1 +BITMAP +0080 +2100 +1208 +17FC +0104 +0100 +F3F8 +1440 +1040 +17FE +1040 +10A0 +1110 +2A08 +47FE +ENDCHAR +STARTCHAR uni9019 +ENCODING 36889 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1000 +8FFE +4000 +23F8 +0000 +E3F8 +2000 +23F8 +2208 +2208 +23F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni901A +ENCODING 36890 +BBX 15 14 1 -1 +BITMAP +8FFC +4118 +20A0 +07FC +0444 +E7FC +2444 +2444 +27FC +2444 +2444 +244C +5000 +8FFE +ENDCHAR +STARTCHAR uni901B +ENCODING 36891 +BBX 15 14 0 -1 +BITMAP +4880 +257C +2210 +0D10 +0110 +E17C +2310 +2D10 +2110 +2110 +2A7E +2400 +5000 +8FFE +ENDCHAR +STARTCHAR uni901C +ENCODING 36892 +BBX 15 14 0 -1 +BITMAP +4FF8 +2080 +2080 +07F0 +0110 +E110 +2FFC +2000 +27F8 +2408 +2408 +27F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni901D +ENCODING 36893 +BBX 15 15 1 -1 +BITMAP +040C +8470 +4440 +3F40 +047E +0448 +E448 +2748 +3C48 +2448 +2488 +2488 +2D08 +5000 +8FFE +ENDCHAR +STARTCHAR uni901E +ENCODING 36894 +BBX 15 15 1 -1 +BITMAP +4000 +23F0 +1210 +8210 +43F0 +2000 +07FC +E040 +2040 +23F8 +2040 +2040 +2FFE +5000 +8FFE +ENDCHAR +STARTCHAR uni901F +ENCODING 36895 +BBX 15 15 1 -1 +BITMAP +0080 +8080 +4FFC +2080 +07F8 +0488 +E488 +27F8 +21C0 +22A0 +2490 +288C +2080 +5000 +8FFE +ENDCHAR +STARTCHAR uni9020 +ENCODING 36896 +BBX 15 15 1 -1 +BITMAP +0240 +8240 +47FC +2440 +0840 +0040 +EFFE +2000 +23F8 +2208 +2208 +2208 +23F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni9021 +ENCODING 36897 +BBX 15 15 1 -1 +BITMAP +4100 +2108 +1234 +8FE2 +4120 +223E +0D00 +E1FC +2208 +2D10 +20E0 +2190 +2E0E +5000 +8FFE +ENDCHAR +STARTCHAR uni9022 +ENCODING 36898 +BBX 15 15 1 -1 +BITMAP +4100 +2100 +13F8 +8D10 +40E0 +2318 +0C46 +E3F8 +2040 +23F8 +2040 +27FC +2040 +5040 +8FFE +ENDCHAR +STARTCHAR uni9023 +ENCODING 36899 +BBX 15 15 1 -1 +BITMAP +0040 +8040 +4FFE +2040 +07FC +0444 +E7FC +2444 +2444 +27FC +2040 +2FFE +2040 +5040 +8FFE +ENDCHAR +STARTCHAR uni9024 +ENCODING 36900 +BBX 15 15 0 -1 +BITMAP +0010 +2210 +1110 +1454 +0252 +0092 +F010 +1114 +1604 +1208 +1210 +1220 +10C0 +2800 +47FE +ENDCHAR +STARTCHAR uni9025 +ENCODING 36901 +BBX 15 14 0 -1 +BITMAP +23FC +1294 +1294 +02F4 +0294 +F294 +12F4 +1294 +1294 +1294 +13FC +1204 +2800 +47FE +ENDCHAR +STARTCHAR uni9026 +ENCODING 36902 +BBX 15 14 0 -1 +BITMAP +4FFE +2000 +2000 +07BC +04A4 +E4A4 +26B4 +25AC +24A4 +24A4 +24A4 +25AC +5000 +8FFE +ENDCHAR +STARTCHAR uni9027 +ENCODING 36903 +BBX 15 15 1 -1 +BITMAP +4110 +2208 +1444 +8040 +40A0 +2110 +0208 +EC06 +23F8 +2208 +2208 +2208 +23F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni9028 +ENCODING 36904 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +17FC +1040 +0150 +0150 +F2E8 +1444 +10E0 +1150 +1248 +1444 +1040 +2800 +47FE +ENDCHAR +STARTCHAR uni9029 +ENCODING 36905 +BBX 15 15 0 -2 +BITMAP +2080 +17FC +1110 +0248 +0C46 +F3F8 +1040 +1150 +1110 +17FE +1110 +1210 +1410 +2810 +47FE +ENDCHAR +STARTCHAR uni902A +ENCODING 36906 +BBX 15 15 0 -1 +BITMAP +0110 +2110 +17FC +1110 +0110 +0FFE +F000 +13F8 +1208 +13F8 +1208 +13F8 +1208 +2800 +47FE +ENDCHAR +STARTCHAR uni902B +ENCODING 36907 +BBX 15 14 0 -1 +BITMAP +47BC +2084 +2528 +0210 +0528 +E840 +27BC +2084 +2528 +2210 +2528 +2844 +5000 +8FFE +ENDCHAR +STARTCHAR uni902C +ENCODING 36908 +BBX 15 15 0 -1 +BITMAP +0084 +2084 +1108 +17BC +0108 +0108 +F108 +1108 +17BE +1108 +1108 +1108 +1108 +2A08 +47FE +ENDCHAR +STARTCHAR uni902D +ENCODING 36909 +BBX 15 15 1 -1 +BITMAP +0080 +8080 +4FFC +2804 +8BF4 +4210 +2210 +03F0 +E200 +23F8 +2208 +2208 +23F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni902E +ENCODING 36910 +BBX 15 15 1 -1 +BITMAP +0040 +8040 +47FC +2044 +0FFE +0044 +07FC +E040 +2644 +2168 +20D0 +2348 +2C46 +50C0 +8FFE +ENDCHAR +STARTCHAR uni902F +ENCODING 36911 +BBX 15 14 0 -1 +BITMAP +47F8 +2008 +23F8 +0008 +0FFE +E040 +2444 +22E8 +2150 +2248 +2444 +2140 +5080 +8FFE +ENDCHAR +STARTCHAR uni9030 +ENCODING 36912 +BBX 15 16 0 -2 +BITMAP +0220 +4220 +223E +2F40 +0280 +027C +E304 +2208 +2E7E +2208 +2208 +2208 +2A28 +2410 +5000 +8FFE +ENDCHAR +STARTCHAR uni9031 +ENCODING 36913 +BBX 15 14 1 -1 +BITMAP +87FC +4404 +2444 +05F4 +0444 +05F4 +E404 +25F4 +2514 +2514 +25F4 +280C +5000 +8FFE +ENDCHAR +STARTCHAR uni9032 +ENCODING 36914 +BBX 15 15 1 -1 +BITMAP +0210 +8220 +47FC +2C40 +1440 +07F8 +E440 +2440 +27F8 +2440 +2440 +27FC +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uni9033 +ENCODING 36915 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FE +1100 +0208 +07FC +F004 +13F8 +1208 +13F8 +1208 +13F8 +1208 +1228 +2A10 +47FE +ENDCHAR +STARTCHAR uni9034 +ENCODING 36916 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +107E +1040 +03F8 +0208 +F3F8 +1208 +13F8 +1040 +1FFE +1040 +1040 +2840 +47FE +ENDCHAR +STARTCHAR uni9035 +ENCODING 36917 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +8040 +4040 +2FFE +0110 +EE5E +2040 +27FC +2040 +2040 +2FFE +5000 +8FFE +ENDCHAR +STARTCHAR uni9036 +ENCODING 36918 +BBX 15 15 1 -1 +BITMAP +4038 +27C0 +1040 +8FFE +4150 +2248 +0C46 +E080 +2FFE +2108 +2790 +2078 +2784 +5000 +8FFE +ENDCHAR +STARTCHAR uni9037 +ENCODING 36919 +BBX 15 15 1 -1 +BITMAP +47F8 +2408 +17F8 +8408 +4408 +27F8 +0200 +E3FE +2492 +2912 +3222 +2442 +208C +5000 +8FFE +ENDCHAR +STARTCHAR uni9038 +ENCODING 36920 +BBX 15 15 1 -1 +BITMAP +8100 +4100 +21F0 +0220 +0C40 +07FC +E444 +2444 +27FC +2120 +2222 +2422 +281E +5000 +8FFE +ENDCHAR +STARTCHAR uni9039 +ENCODING 36921 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +8040 +4040 +2FFE +0208 +E110 +2FFE +2040 +2040 +2FFE +2040 +5040 +8FFE +ENDCHAR +STARTCHAR uni903A +ENCODING 36922 +BBX 15 15 0 -1 +BITMAP +0040 +2040 +13F8 +1040 +07FE +0080 +F110 +13E0 +1044 +11A8 +1690 +1088 +10C4 +2800 +47FE +ENDCHAR +STARTCHAR uni903B +ENCODING 36923 +BBX 15 14 0 -1 +BITMAP +47FC +24A4 +24A4 +07FC +0080 +E1F8 +2208 +2510 +20A0 +2040 +2180 +2E00 +5000 +8FFE +ENDCHAR +STARTCHAR uni903C +ENCODING 36924 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1000 +83F8 +4208 +23F8 +0000 +E7FC +2444 +27FC +2444 +2444 +27FC +5000 +8FFE +ENDCHAR +STARTCHAR uni903D +ENCODING 36925 +BBX 15 15 0 -1 +BITMAP +0108 +2108 +17FE +1108 +0040 +07FE +F080 +1100 +13FC +1504 +1904 +11FC +1104 +2800 +47FE +ENDCHAR +STARTCHAR uni903E +ENCODING 36926 +BBX 15 15 1 -1 +BITMAP +4040 +20A0 +1318 +8DF6 +4000 +2792 +0492 +E6A4 +25A4 +26A4 +2592 +2492 +2592 +5000 +8FFE +ENDCHAR +STARTCHAR uni903F +ENCODING 36927 +BBX 15 15 0 -1 +BITMAP +01F8 +2108 +11F8 +1108 +01F8 +0000 +F7FE +1100 +13FC +14A4 +1124 +1254 +1088 +2800 +47FE +ENDCHAR +STARTCHAR uni9040 +ENCODING 36928 +BBX 15 16 0 -2 +BITMAP +0080 +27FC +1100 +13F8 +0440 +0BFC +F000 +13F8 +1208 +13F8 +1208 +13F8 +1208 +1228 +2A10 +47FE +ENDCHAR +STARTCHAR uni9041 +ENCODING 36929 +BBX 15 15 1 -1 +BITMAP +401C +27E0 +1420 +87FE +4420 +25FC +0504 +E5FC +2504 +25FC +2504 +2904 +21FC +5000 +8FFE +ENDCHAR +STARTCHAR uni9042 +ENCODING 36930 +BBX 15 15 1 -1 +BITMAP +0408 +8210 +4FFE +2080 +0344 +0C68 +E0B0 +2320 +2C70 +20A8 +2324 +2C22 +20C0 +5000 +8FFE +ENDCHAR +STARTCHAR uni9043 +ENCODING 36931 +BBX 15 15 1 -1 +BITMAP +4040 +27FE +1110 +80E0 +4110 +27FE +0430 +E5C4 +2418 +25E2 +2404 +2418 +29E0 +5000 +8FFE +ENDCHAR +STARTCHAR uni9044 +ENCODING 36932 +BBX 15 15 1 -1 +BITMAP +4040 +2444 +1444 +87FC +4000 +2FFE +0080 +E7FC +2524 +2524 +2524 +2524 +252C +5000 +8FFE +ENDCHAR +STARTCHAR uni9045 +ENCODING 36933 +BBX 15 14 1 -1 +BITMAP +8FFC +4804 +2FFC +0A08 +0910 +0BFC +E840 +2BFC +2840 +2840 +37FE +2040 +5040 +8FFE +ENDCHAR +STARTCHAR uni9046 +ENCODING 36934 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FC +1110 +00A0 +07FC +F444 +1040 +13F8 +1248 +1248 +1268 +1250 +1040 +2840 +47FE +ENDCHAR +STARTCHAR uni9047 +ENCODING 36935 +BBX 15 14 1 -1 +BITMAP +87F8 +4488 +27F8 +0488 +07F8 +E080 +2FFC +2884 +28A4 +28B4 +2BD4 +280C +5000 +8FFE +ENDCHAR +STARTCHAR uni9048 +ENCODING 36936 +BBX 15 14 0 -1 +BITMAP +43F8 +2208 +23F8 +0208 +03F8 +E000 +2FFC +2040 +2278 +2240 +2540 +28FE +5000 +8FFE +ENDCHAR +STARTCHAR uni9049 +ENCODING 36937 +BBX 15 15 1 -1 +BITMAP +4080 +20FC +1080 +87F8 +4408 +27F8 +0408 +E7F8 +2408 +2408 +27F8 +2210 +2C0C +5000 +8FFE +ENDCHAR +STARTCHAR uni904A +ENCODING 36938 +BBX 15 15 1 -1 +BITMAP +0420 +8420 +443E +3FC0 +047C +0784 +E488 +2488 +24FE +2488 +2888 +2888 +3338 +5800 +87FE +ENDCHAR +STARTCHAR uni904B +ENCODING 36939 +BBX 15 14 1 -1 +BITMAP +8FFE +4842 +27FC +0040 +07FC +E444 +27FC +2444 +27FC +2040 +2FFE +2040 +5040 +8FFE +ENDCHAR +STARTCHAR uni904C +ENCODING 36940 +BBX 15 14 0 -1 +BITMAP +27BC +14A4 +17BC +0000 +03F8 +F000 +17FE +1100 +11F8 +1008 +1008 +1050 +2820 +47FE +ENDCHAR +STARTCHAR uni904D +ENCODING 36941 +BBX 15 14 1 -1 +BITMAP +8FFC +4000 +27F8 +0408 +07F8 +0400 +E7FC +26A4 +2BFC +2AA4 +32A4 +22AC +5000 +8FFE +ENDCHAR +STARTCHAR uni904E +ENCODING 36942 +BBX 15 14 1 -1 +BITMAP +83F8 +4208 +2278 +0248 +0248 +E7FC +2404 +25F4 +2514 +2514 +25F4 +240C +5000 +8FFE +ENDCHAR +STARTCHAR uni904F +ENCODING 36943 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1408 +87F8 +4408 +27F8 +0200 +E3FC +2444 +2C44 +24A4 +2514 +27E4 +5008 +8FFE +ENDCHAR +STARTCHAR uni9050 +ENCODING 36944 +BBX 15 15 1 -1 +BITMAP +4000 +2F3C +1904 +8904 +4904 +2F3C +0800 +E87C +2F24 +2824 +2828 +2F10 +2828 +5846 +8FFE +ENDCHAR +STARTCHAR uni9051 +ENCODING 36945 +BBX 15 15 1 -1 +BITMAP +4040 +2080 +13F8 +8208 +43F8 +2208 +03F8 +E000 +27FC +2040 +23F8 +2040 +2FFE +5000 +8FFE +ENDCHAR +STARTCHAR uni9052 +ENCODING 36946 +BBX 15 15 1 -1 +BITMAP +4218 +2404 +0BFA +80A0 +40A0 +27FC +04A4 +E4A4 +273C +2404 +27FC +2404 +27FC +5000 +8FFE +ENDCHAR +STARTCHAR uni9053 +ENCODING 36947 +BBX 15 15 1 -1 +BITMAP +0408 +8210 +4FFC +2080 +03F8 +0208 +E3F8 +2208 +2208 +23F8 +2208 +2208 +23F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni9054 +ENCODING 36948 +BBX 15 15 1 -1 +BITMAP +0040 +8040 +47FC +2040 +0FFE +0208 +0110 +EFFE +2040 +27FC +2040 +2FFE +2040 +5040 +8FFE +ENDCHAR +STARTCHAR uni9055 +ENCODING 36949 +BBX 15 15 1 -1 +BITMAP +0080 +8080 +47F0 +2110 +0FFE +0000 +03F0 +E210 +23F0 +2040 +27F8 +2240 +2FFC +5040 +8FFE +ENDCHAR +STARTCHAR uni9056 +ENCODING 36950 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +0FFE +8040 +4040 +27FC +0514 +E4A4 +25F4 +2444 +25F4 +2444 +244C +5000 +8FFE +ENDCHAR +STARTCHAR uni9057 +ENCODING 36951 +BBX 15 15 0 -1 +BITMAP +0040 +23F8 +1248 +13F8 +0040 +0FFE +F000 +13F8 +1208 +1248 +1248 +10A0 +1110 +2A08 +47FE +ENDCHAR +STARTCHAR uni9058 +ENCODING 36952 +BBX 15 15 1 -1 +BITMAP +4110 +27FC +1110 +83F8 +4110 +2FFE +0040 +E3F8 +2248 +23F8 +2248 +2FFE +2208 +5218 +8FFE +ENDCHAR +STARTCHAR uni9059 +ENCODING 36953 +BBX 15 15 1 -1 +BITMAP +0040 +40FC +2748 +0130 +41C0 +2E00 +03F8 +E440 +2040 +2FFE +2040 +2248 +23F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni905A +ENCODING 36954 +BBX 15 16 0 -2 +BITMAP +0040 +2140 +165C +1444 +075C +0444 +F7FC +1040 +17FC +1008 +1190 +1060 +1198 +1604 +2800 +47FE +ENDCHAR +STARTCHAR uni905B +ENCODING 36955 +BBX 15 15 0 -1 +BITMAP +0080 +477C +2424 +2524 +04A4 +0554 +E648 +2080 +27FC +2444 +27FC +2444 +27FC +5000 +8FFE +ENDCHAR +STARTCHAR uni905C +ENCODING 36956 +BBX 15 15 1 -1 +BITMAP +400C +2F70 +1120 +8224 +4448 +2430 +0710 +EC24 +34FA +2410 +2454 +2492 +2C10 +5000 +8FFE +ENDCHAR +STARTCHAR uni905D +ENCODING 36957 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1524 +8524 +47FC +2000 +0150 +E248 +2C46 +2040 +2150 +2248 +2C46 +5040 +8FFE +ENDCHAR +STARTCHAR uni905E +ENCODING 36958 +BBX 15 15 1 -1 +BITMAP +401C +2FE0 +183C +8820 +4BFE +2A42 +0A70 +EBC4 +2A7C +2A00 +3250 +2492 +210E +5000 +8FFE +ENDCHAR +STARTCHAR uni905F +ENCODING 36959 +BBX 15 15 0 -2 +BITMAP +23FC +1204 +1204 +03FC +0240 +F220 +13FC +1288 +1250 +13FE +1220 +15FC +1420 +2820 +47FE +ENDCHAR +STARTCHAR uni9060 +ENCODING 36960 +BBX 15 15 1 -1 +BITMAP +0080 +8080 +47F8 +2080 +0FFC +0000 +E7F0 +2410 +27F4 +2098 +25E0 +22B0 +2C8E +5080 +8FFE +ENDCHAR +STARTCHAR uni9061 +ENCODING 36961 +BBX 15 15 1 -1 +BITMAP +4000 +28BC +14A4 +8524 +4FBC +2224 +0AA4 +EAA4 +2ABC +2FA4 +2224 +2224 +2C4C +5000 +8FFE +ENDCHAR +STARTCHAR uni9062 +ENCODING 36962 +BBX 15 15 0 -2 +BITMAP +23F8 +1208 +13F8 +0208 +03F8 +F000 +17BC +1084 +14A4 +1294 +14A4 +1294 +1108 +2800 +47FE +ENDCHAR +STARTCHAR uni9063 +ENCODING 36963 +BBX 15 15 1 -1 +BITMAP +0040 +8040 +47FC +2444 +07FC +0040 +EFFE +2208 +23F8 +2200 +23FC +2204 +23FC +5000 +8FFE +ENDCHAR +STARTCHAR uni9064 +ENCODING 36964 +BBX 15 14 0 -1 +BITMAP +23FC +1240 +13F8 +0240 +03F8 +F240 +13FC +1004 +1554 +1554 +1554 +1428 +2810 +47FE +ENDCHAR +STARTCHAR uni9065 +ENCODING 36965 +BBX 15 15 1 -1 +BITMAP +003C +87C4 +4404 +2288 +0240 +07FC +E040 +2040 +2FFE +2040 +2444 +2444 +27FC +5000 +8FFE +ENDCHAR +STARTCHAR uni9066 +ENCODING 36966 +BBX 15 16 0 -2 +BITMAP +03FC +2244 +17FE +1244 +03FC +0000 +F3FC +1204 +13FC +1204 +13FC +1204 +13FC +1108 +2A04 +47FE +ENDCHAR +STARTCHAR uni9067 +ENCODING 36967 +BBX 15 15 0 -1 +BITMAP +0040 +47FC +2110 +2FFE +0000 +03F8 +E208 +23F8 +2208 +23F8 +2040 +2FFE +2040 +5040 +8FFE +ENDCHAR +STARTCHAR uni9068 +ENCODING 36968 +BBX 15 15 1 -1 +BITMAP +4210 +2210 +0F90 +823E +4FA4 +2214 +1FD4 +E414 +2788 +2488 +2494 +2494 +29A2 +5000 +8FFE +ENDCHAR +STARTCHAR uni9069 +ENCODING 36969 +BBX 15 15 1 -1 +BITMAP +0080 +8080 +4FF8 +2410 +0220 +0FF8 +0888 +EBE8 +2888 +2BE8 +2A28 +2BE8 +2818 +5000 +8FFE +ENDCHAR +STARTCHAR uni906A +ENCODING 36970 +BBX 15 16 0 -2 +BITMAP +0080 +2110 +13F8 +1210 +04A4 +07FC +F0A0 +1318 +1C46 +1390 +1064 +1398 +1060 +1380 +2800 +47FE +ENDCHAR +STARTCHAR uni906B +ENCODING 36971 +BBX 15 15 0 -1 +BITMAP +0210 +4210 +2F90 +223E +0FA4 +0AC4 +EAA4 +2F94 +2208 +2708 +2A94 +3224 +2244 +5000 +8FFE +ENDCHAR +STARTCHAR uni906C +ENCODING 36972 +BBX 15 15 0 -1 +BITMAP +0220 +4220 +2FA0 +223C +0FC4 +0A90 +EA90 +2F90 +2210 +2728 +2AA8 +3244 +2284 +5000 +8FFE +ENDCHAR +STARTCHAR uni906D +ENCODING 36973 +BBX 15 15 1 -1 +BITMAP +0120 +8120 +5FFE +2120 +0FFC +0924 +EFFC +2924 +2FFC +2408 +27F8 +2408 +27F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni906E +ENCODING 36974 +BBX 15 15 1 -1 +BITMAP +0020 +8020 +47FE +2400 +0488 +07FE +0488 +E488 +24F8 +2400 +2AA8 +2454 +2452 +5000 +8FFE +ENDCHAR +STARTCHAR uni906F +ENCODING 36975 +BBX 15 15 1 -1 +BITMAP +4000 +2F7E +1910 +8920 +4F62 +2994 +0914 +E950 +2F90 +2938 +2954 +2992 +3330 +5000 +8FFE +ENDCHAR +STARTCHAR uni9070 +ENCODING 36976 +BBX 15 15 0 -1 +BITMAP +02A8 +22A8 +17FC +12AA +04E6 +0800 +F7FC +1444 +1040 +13F8 +1248 +1248 +1258 +2840 +47FE +ENDCHAR +STARTCHAR uni9071 +ENCODING 36977 +BBX 15 16 0 -2 +BITMAP +0040 +43F8 +2248 +2FFE +0248 +03F8 +E040 +23F8 +2248 +23F8 +2080 +2FFE +2110 +20E0 +5318 +8FFE +ENDCHAR +STARTCHAR uni9072 +ENCODING 36978 +BBX 15 15 1 -1 +BITMAP +4000 +27FC +1404 +87FC +4400 +25AC +0420 +E58C +24A0 +24FC +2920 +23FE +2020 +5020 +8FFE +ENDCHAR +STARTCHAR uni9073 +ENCODING 36979 +BBX 15 15 0 -1 +BITMAP +0110 +2110 +17FC +1110 +0040 +0248 +F248 +1554 +1040 +13F8 +1040 +1040 +17FC +2800 +47FE +ENDCHAR +STARTCHAR uni9074 +ENCODING 36980 +BBX 15 16 0 -2 +BITMAP +0040 +2248 +1150 +17FC +0150 +0248 +F444 +1210 +1390 +14BC +1A90 +1150 +117E +1210 +2A10 +47FE +ENDCHAR +STARTCHAR uni9075 +ENCODING 36981 +BBX 15 15 1 -1 +BITMAP +0110 +8FFE +4120 +27FC +0524 +063C +0404 +E7FC +2404 +27FC +2008 +2FFE +2208 +5118 +8FFE +ENDCHAR +STARTCHAR uni9076 +ENCODING 36982 +BBX 15 15 1 -1 +BITMAP +4040 +23F8 +1040 +87FC +4208 +2FBE +0208 +E388 +2E3E +2000 +27FC +2112 +2E0E +5000 +8FFE +ENDCHAR +STARTCHAR uni9077 +ENCODING 36983 +BBX 15 14 1 -1 +BITMAP +9FFE +4120 +2FFC +0924 +1FFE +0210 +E7F8 +3816 +27F0 +2400 +2404 +23FC +5000 +8FFE +ENDCHAR +STARTCHAR uni9078 +ENCODING 36984 +BBX 15 14 1 -1 +BITMAP +8F7C +4104 +2F7C +0840 +0944 +E73C +2120 +27F8 +2120 +2120 +2FFC +2210 +5408 +8FFE +ENDCHAR +STARTCHAR uni9079 +ENCODING 36985 +BBX 15 15 0 -2 +BITMAP +23F8 +1090 +1060 +07FC +0124 +F6A8 +1040 +17FC +14A4 +1514 +16EC +14A4 +14EC +2800 +47FE +ENDCHAR +STARTCHAR uni907A +ENCODING 36986 +BBX 15 15 1 -1 +BITMAP +0040 +8040 +43F8 +2248 +03F8 +0040 +0FFE +E208 +23F8 +2208 +23F8 +2208 +23F8 +5404 +8FFE +ENDCHAR +STARTCHAR uni907B +ENCODING 36987 +BBX 15 15 0 -2 +BITMAP +27BC +14A4 +14A4 +07BC +0110 +F0A0 +17FC +1040 +1248 +1248 +13F8 +1040 +1080 +2900 +47FE +ENDCHAR +STARTCHAR uni907C +ENCODING 36988 +BBX 15 15 1 -1 +BITMAP +0040 +8040 +4FFE +2514 +0208 +07FC +0A0A +E3F8 +2208 +23F8 +2040 +2248 +2C46 +50C0 +8FFE +ENDCHAR +STARTCHAR uni907D +ENCODING 36989 +BBX 15 15 1 -1 +BITMAP +4040 +207C +1040 +87FE +4442 +25F0 +0444 +E7FE +2440 +248C +2570 +28B8 +2356 +50B0 +8FFE +ENDCHAR +STARTCHAR uni907E +ENCODING 36990 +BBX 15 15 0 -1 +BITMAP +0210 +4210 +23DE +2528 +0884 +07FC +E040 +2248 +2248 +2554 +28E2 +2040 +2FFE +5000 +8FFE +ENDCHAR +STARTCHAR uni907F +ENCODING 36991 +BBX 15 15 1 -1 +BITMAP +0010 +8F10 +497C +2900 +0944 +0F28 +E87E +2810 +2F90 +38FC +2890 +2890 +2F90 +5000 +8FFE +ENDCHAR +STARTCHAR uni9080 +ENCODING 36992 +BBX 15 15 1 -1 +BITMAP +4110 +2210 +0F90 +88BE +4FA4 +28E4 +0FA4 +E214 +3FD4 +2408 +2788 +2498 +24A4 +59C2 +8FFE +ENDCHAR +STARTCHAR uni9081 +ENCODING 36993 +BBX 15 15 1 -1 +BITMAP +4110 +2FFE +1110 +87FC +4444 +27FC +0444 +E7FC +2040 +2FFE +2852 +287A +2B86 +5000 +8FFE +ENDCHAR +STARTCHAR uni9082 +ENCODING 36994 +BBX 15 15 1 -1 +BITMAP +4400 +27BC +0494 +8914 +5FA4 +2AC8 +0FA8 +EABC +2AC8 +2F88 +28FE +2888 +3188 +5000 +8FFE +ENDCHAR +STARTCHAR uni9083 +ENCODING 36995 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +84A4 +4F3E +2090 +07FC +F144 +16A4 +1138 +1668 +10A4 +2B22 +4440 +83FE +ENDCHAR +STARTCHAR uni9084 +ENCODING 36996 +BBX 15 14 1 -1 +BITMAP +8FF8 +4A48 +2FF8 +0000 +1FFC +0000 +E7F0 +2410 +27F0 +2188 +22D0 +2CB0 +508C +8FFE +ENDCHAR +STARTCHAR uni9085 +ENCODING 36997 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +1FFE +8404 +45F4 +2514 +05F4 +E404 +27FC +2208 +23F8 +2208 +2FFE +5000 +8FFE +ENDCHAR +STARTCHAR uni9086 +ENCODING 36998 +BBX 15 15 0 -1 +BITMAP +0024 +23A8 +1092 +1514 +0208 +05F4 +F002 +13F8 +1208 +13F8 +1208 +1110 +17FC +2800 +47FE +ENDCHAR +STARTCHAR uni9087 +ENCODING 36999 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1248 +8444 +4FFE +26EC +0554 +E6EC +2444 +26EC +2554 +26EC +2444 +544C +8FFE +ENDCHAR +STARTCHAR uni9088 +ENCODING 37000 +BBX 15 15 1 -1 +BITMAP +0110 +8620 +5AFC +2944 +867C +5A44 +2344 +057C +F928 +2328 +2528 +392A +224A +5486 +8FFE +ENDCHAR +STARTCHAR uni9089 +ENCODING 37001 +BBX 15 15 1 -1 +BITMAP +4040 +2080 +13F8 +8208 +43F8 +2208 +03F8 +E208 +2FFE +2912 +23F8 +2E0E +23F8 +5000 +8FFE +ENDCHAR +STARTCHAR uni908A +ENCODING 37002 +BBX 15 15 1 -1 +BITMAP +4040 +2080 +13F8 +8208 +43F8 +2208 +0FFE +E912 +265C +2040 +2FFE +2100 +21F8 +5208 +8FFE +ENDCHAR +STARTCHAR uni908B +ENCODING 37003 +BBX 15 16 0 -2 +BITMAP +0248 +4490 +2248 +27F8 +0528 +04C8 +E528 +27F8 +2490 +26D0 +2490 +26D4 +248C +26C4 +5000 +8FFE +ENDCHAR +STARTCHAR uni908C +ENCODING 37004 +BBX 15 15 1 -1 +BITMAP +41A0 +2E20 +127E +8F8A +4612 +2BA2 +124C +E1B0 +3E4E +2350 +20E0 +2158 +2646 +5840 +8FFE +ENDCHAR +STARTCHAR uni908D +ENCODING 37005 +BBX 15 16 0 -2 +BITMAP +0100 +43F0 +2510 +20E0 +071C +03F8 +E248 +23F8 +2248 +23F8 +2008 +2FFE +2248 +2150 +5248 +8FFE +ENDCHAR +STARTCHAR uni908E +ENCODING 37006 +BBX 15 15 0 -1 +BITMAP +0400 +4F8C +3570 +2A20 +0444 +1A78 +EF90 +2024 +2F7E +2010 +2F54 +2992 +2F30 +5000 +8FFE +ENDCHAR +STARTCHAR uni908F +ENCODING 37007 +BBX 15 15 1 -1 +BITMAP +4000 +2FFC +1924 +8FFC +4428 +2828 +1A7E +E4C8 +2B7C +3CC8 +247C +3548 +247E +5000 +8FFE +ENDCHAR +STARTCHAR uni9090 +ENCODING 37008 +BBX 15 15 1 -1 +BITMAP +4FBE +2000 +1FBE +8AAA +4AAA +2040 +0FFE +E924 +2FFC +2A20 +2BBC +3222 +279E +5000 +8FFE +ENDCHAR +STARTCHAR uni9091 +ENCODING 37009 +BBX 13 14 2 -1 +BITMAP +3FC0 +2040 +2040 +3FC0 +0000 +FFF0 +8410 +8410 +8410 +FFF0 +8000 +8008 +8008 +7FF8 +ENDCHAR +STARTCHAR uni9092 +ENCODING 37010 +BBX 14 15 0 -2 +BITMAP +FF7C +0844 +0848 +0848 +0850 +0848 +0848 +0844 +0844 +0844 +0868 +0850 +2840 +1040 +0040 +ENDCHAR +STARTCHAR uni9093 +ENCODING 37011 +BBX 14 15 0 -2 +BITMAP +7E7C +0244 +0248 +4248 +2450 +1448 +0848 +0844 +1444 +1444 +2268 +4250 +8040 +0040 +0040 +ENDCHAR +STARTCHAR uni9094 +ENCODING 37012 +BBX 13 15 1 -2 +BITMAP +FEF8 +0288 +0290 +0290 +02A0 +7E90 +4290 +4088 +4088 +4088 +42D0 +4CA0 +7080 +4080 +0080 +ENDCHAR +STARTCHAR uni9095 +ENCODING 37013 +BBX 14 15 2 -1 +BITMAP +4210 +8420 +4210 +2108 +7FF0 +4010 +7FF0 +0000 +FFF8 +8208 +8208 +FFF8 +8000 +8004 +7FFC +ENDCHAR +STARTCHAR uni9096 +ENCODING 37014 +BBX 14 16 1 -2 +BITMAP +1000 +107C +1044 +1048 +9248 +9250 +9248 +9248 +9244 +9244 +9244 +9E68 +F250 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni9097 +ENCODING 37015 +BBX 15 14 1 -1 +BITMAP +7E7E +0842 +0842 +0844 +0844 +FF48 +0844 +0844 +0842 +0842 +0842 +084C +0840 +0840 +ENDCHAR +STARTCHAR uni9098 +ENCODING 37016 +BBX 14 15 0 -2 +BITMAP +7F7C +0844 +0848 +0848 +0850 +0848 +FFC8 +0844 +0844 +0844 +0868 +0850 +0840 +2840 +1040 +ENDCHAR +STARTCHAR uni9099 +ENCODING 37017 +BBX 15 14 1 -1 +BITMAP +107E +1042 +1042 +FF44 +4044 +4048 +4044 +4044 +4042 +4042 +3F42 +004C +0040 +0040 +ENDCHAR +STARTCHAR uni909A +ENCODING 37018 +BBX 14 16 0 -2 +BITMAP +1000 +107C +1044 +1048 +FE48 +2250 +2248 +2248 +4244 +2444 +1444 +0868 +1450 +2240 +4240 +8040 +ENDCHAR +STARTCHAR uni909B +ENCODING 37019 +BBX 15 14 1 -1 +BITMAP +007E +7E42 +1042 +1044 +1044 +1048 +1044 +1044 +1342 +1C42 +E042 +004C +0040 +0040 +ENDCHAR +STARTCHAR uni909C +ENCODING 37020 +BBX 14 16 0 -2 +BITMAP +1000 +107C +1044 +1F48 +2148 +2150 +5148 +8A48 +0A44 +0444 +0444 +0868 +1050 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uni909D +ENCODING 37021 +BBX 15 16 0 -2 +BITMAP +0800 +043E +0422 +3FA4 +2024 +2028 +2024 +2024 +2022 +2022 +2022 +2034 +2028 +4020 +4020 +8020 +ENDCHAR +STARTCHAR uni909E +ENCODING 37022 +BBX 14 16 0 -2 +BITMAP +0800 +087C +0844 +7F48 +0848 +0850 +0848 +FFC8 +0844 +1444 +1244 +2268 +2150 +4140 +8040 +0040 +ENDCHAR +STARTCHAR uni909F +ENCODING 37023 +BBX 14 16 0 -2 +BITMAP +1000 +087C +0844 +FF48 +0048 +0050 +3C48 +2448 +2444 +2444 +2444 +2568 +4650 +4440 +8040 +0040 +ENDCHAR +STARTCHAR uni90A0 +ENCODING 37024 +BBX 14 15 0 -2 +BITMAP +147C +1244 +1248 +2148 +2150 +4048 +BE48 +1244 +1244 +1244 +1268 +2250 +2240 +4A40 +8440 +ENDCHAR +STARTCHAR uni90A1 +ENCODING 37025 +BBX 15 15 1 -1 +BITMAP +0800 +087E +0842 +FFC2 +1044 +1044 +1F48 +1144 +1144 +1142 +1142 +2142 +214C +4140 +8640 +ENDCHAR +STARTCHAR uni90A2 +ENCODING 37026 +BBX 15 14 1 -1 +BITMAP +FF7E +2442 +2442 +2444 +2444 +FF48 +2444 +2444 +2442 +2442 +2442 +444C +4440 +8440 +ENDCHAR +STARTCHAR uni90A3 +ENCODING 37027 +BBX 15 14 1 -1 +BITMAP +FE7E +1242 +1242 +1244 +FE44 +1248 +1244 +1244 +FE42 +1242 +2242 +224C +4240 +8C40 +ENDCHAR +STARTCHAR uni90A4 +ENCODING 37028 +BBX 14 16 0 -2 +BITMAP +0200 +077C +3844 +2048 +2048 +2050 +3FC8 +2448 +2444 +2444 +2444 +2468 +2450 +4440 +4440 +8440 +ENDCHAR +STARTCHAR uni90A5 +ENCODING 37029 +BBX 14 16 0 -2 +BITMAP +0800 +087C +0844 +7F48 +4948 +0850 +0848 +1448 +1444 +1444 +1444 +2568 +2650 +4440 +8040 +0040 +ENDCHAR +STARTCHAR uni90A6 +ENCODING 37030 +BBX 15 15 1 -1 +BITMAP +0800 +087E +7F42 +0842 +0844 +7F44 +0848 +0844 +0844 +FF42 +0842 +1042 +105C +2040 +C040 +ENDCHAR +STARTCHAR uni90A7 +ENCODING 37031 +BBX 15 15 0 -2 +BITMAP +3F3E +0022 +0024 +0024 +FFA8 +1224 +1224 +1222 +1222 +1222 +22B4 +2328 +4220 +8020 +0020 +ENDCHAR +STARTCHAR uni90A8 +ENCODING 37032 +BBX 15 15 1 -1 +BITMAP +0800 +09BE +0E22 +F822 +0824 +0824 +4928 +4924 +4924 +7F22 +0822 +0822 +08AC +08A0 +07A0 +ENDCHAR +STARTCHAR uni90A9 +ENCODING 37033 +BBX 14 16 0 -2 +BITMAP +0800 +087C +0844 +0948 +4948 +4A50 +4C48 +8848 +0844 +0844 +1444 +1268 +2150 +2140 +4040 +8040 +ENDCHAR +STARTCHAR uni90AA +ENCODING 37034 +BBX 14 14 1 -1 +BITMAP +7F7C +2444 +2448 +2448 +2450 +FF48 +1448 +1444 +2444 +2444 +4444 +8458 +0440 +1C40 +ENDCHAR +STARTCHAR uni90AB +ENCODING 37035 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1088 +FC88 +10F8 +1000 +7DFC +1124 +1124 +FF24 +11FC +1100 +2100 +2102 +4102 +80FE +ENDCHAR +STARTCHAR uni90AC +ENCODING 37036 +BBX 15 16 0 -2 +BITMAP +1000 +203E +7E22 +4224 +4224 +4A28 +4424 +4024 +7F22 +0122 +0122 +1D34 +E128 +4120 +0A20 +0420 +ENDCHAR +STARTCHAR uni90AD +ENCODING 37037 +BBX 15 16 0 -2 +BITMAP +1000 +103E +2022 +3F24 +4124 +8128 +3D24 +2524 +2522 +2522 +3D22 +2534 +0128 +0120 +0A20 +0420 +ENDCHAR +STARTCHAR uni90AE +ENCODING 37038 +BBX 13 16 1 -2 +BITMAP +1000 +10F8 +1088 +FE90 +9290 +92A0 +9290 +9290 +FE88 +9288 +9288 +92D0 +92A0 +FE80 +8280 +0080 +ENDCHAR +STARTCHAR uni90AF +ENCODING 37039 +BBX 15 15 1 -1 +BITMAP +2200 +227E +2242 +FFC2 +2244 +2244 +2248 +3E44 +2244 +2242 +2242 +2242 +224C +3E40 +0040 +ENDCHAR +STARTCHAR uni90B0 +ENCODING 37040 +BBX 15 15 1 -1 +BITMAP +1000 +103E +1022 +2222 +2124 +46A4 +F8A8 +0024 +0024 +7F22 +4122 +4122 +412C +4120 +7F20 +ENDCHAR +STARTCHAR uni90B1 +ENCODING 37041 +BBX 15 15 1 -1 +BITMAP +0600 +387E +2042 +2042 +2044 +3F44 +2248 +2244 +2244 +2242 +2242 +23C2 +3C4C +E040 +0040 +ENDCHAR +STARTCHAR uni90B2 +ENCODING 37042 +BBX 15 16 0 -2 +BITMAP +1000 +083E +0A22 +0224 +1224 +1328 +54A4 +54A4 +5422 +9822 +1922 +1134 +3128 +4F20 +8020 +0020 +ENDCHAR +STARTCHAR uni90B3 +ENCODING 37043 +BBX 15 14 1 -1 +BITMAP +FF7E +0442 +0442 +0844 +0844 +1848 +2A44 +4944 +88C2 +0842 +0842 +084C +FF40 +0040 +ENDCHAR +STARTCHAR uni90B4 +ENCODING 37044 +BBX 14 15 1 -2 +BITMAP +FF7C +1044 +1048 +1048 +FF50 +9148 +9148 +A944 +A544 +C544 +8168 +8150 +8140 +8540 +8240 +ENDCHAR +STARTCHAR uni90B5 +ENCODING 37045 +BBX 15 14 1 -1 +BITMAP +FF7E +2142 +2142 +4144 +4144 +8E48 +0044 +7E44 +4242 +4242 +4242 +424C +7E40 +0040 +ENDCHAR +STARTCHAR uni90B6 +ENCODING 37046 +BBX 15 15 1 -1 +BITMAP +1400 +143E +1422 +1422 +15A4 +F624 +1428 +1424 +1424 +1422 +1422 +1422 +34AC +D4A0 +13A0 +ENDCHAR +STARTCHAR uni90B7 +ENCODING 37047 +BBX 14 15 0 -2 +BITMAP +FF7C +2044 +2048 +3C48 +2450 +2448 +3448 +4C44 +4C44 +4444 +4568 +5550 +6540 +4340 +0040 +ENDCHAR +STARTCHAR uni90B8 +ENCODING 37048 +BBX 15 15 1 -1 +BITMAP +0600 +787E +4842 +4842 +4844 +7F44 +4848 +4844 +4844 +4842 +6442 +C442 +02CC +F940 +0040 +ENDCHAR +STARTCHAR uni90B9 +ENCODING 37049 +BBX 14 16 0 -2 +BITMAP +2000 +207C +3E44 +4248 +8448 +0850 +FE48 +0248 +0244 +7E44 +0244 +0268 +0250 +FE40 +0240 +0040 +ENDCHAR +STARTCHAR uni90BA +ENCODING 37050 +BBX 15 16 0 -2 +BITMAP +1400 +143E +1422 +14A4 +94A4 +5528 +5524 +5624 +1422 +1422 +1422 +17B4 +F828 +4020 +0020 +0020 +ENDCHAR +STARTCHAR uni90BB +ENCODING 37051 +BBX 14 16 0 -2 +BITMAP +0800 +087C +1444 +1248 +2148 +48D0 +8448 +0448 +7F44 +0144 +2244 +1468 +0850 +0440 +0440 +0040 +ENDCHAR +STARTCHAR uni90BC +ENCODING 37052 +BBX 14 15 1 -2 +BITMAP +FF7C +8044 +8048 +FF48 +8850 +8848 +BE48 +8844 +8844 +FF44 +8068 +8050 +FF40 +0040 +0040 +ENDCHAR +STARTCHAR uni90BD +ENCODING 37053 +BBX 14 16 0 -2 +BITMAP +0800 +087C +7F44 +0848 +0848 +0850 +FFC8 +0048 +0844 +0844 +7F44 +0868 +0850 +0F40 +F040 +4040 +ENDCHAR +STARTCHAR uni90BE +ENCODING 37054 +BBX 15 15 1 -1 +BITMAP +0400 +247E +2442 +3F42 +4444 +8444 +0448 +FFC4 +1544 +1542 +24C2 +24C2 +444C +8440 +0440 +ENDCHAR +STARTCHAR uni90BF +ENCODING 37055 +BBX 15 16 0 -2 +BITMAP +0800 +083E +0822 +7F24 +0824 +0828 +FFA4 +0224 +0222 +7FA2 +0222 +2234 +1228 +0220 +0A20 +0420 +ENDCHAR +STARTCHAR uni90C0 +ENCODING 37056 +BBX 15 16 0 -2 +BITMAP +0800 +083E +FFA2 +1424 +2224 +4128 +BEA4 +0024 +FFA2 +1022 +2022 +7F34 +0128 +0120 +0A20 +0420 +ENDCHAR +STARTCHAR uni90C1 +ENCODING 37057 +BBX 14 15 1 -1 +BITMAP +0800 +087C +FF44 +1044 +1048 +3E48 +2250 +6248 +BE48 +2244 +2244 +3E44 +2258 +2240 +2640 +ENDCHAR +STARTCHAR uni90C2 +ENCODING 37058 +BBX 15 16 0 -2 +BITMAP +1000 +083E +0022 +FFA4 +0824 +1128 +2124 +7E24 +0422 +0922 +1222 +2434 +CC28 +1220 +2120 +C0A0 +ENDCHAR +STARTCHAR uni90C3 +ENCODING 37059 +BBX 15 15 1 -1 +BITMAP +0800 +083E +1422 +1422 +2224 +4124 +BEA8 +0024 +0024 +7F22 +4122 +4122 +412C +4120 +7F20 +ENDCHAR +STARTCHAR uni90C4 +ENCODING 37060 +BBX 15 15 1 -1 +BITMAP +0200 +247E +1842 +3642 +C144 +1044 +FF48 +1044 +1044 +2842 +2842 +5042 +924C +2640 +7940 +ENDCHAR +STARTCHAR uni90C5 +ENCODING 37061 +BBX 15 14 1 -1 +BITMAP +FF7E +1042 +1442 +2244 +4F44 +F948 +0844 +0844 +7E42 +0842 +0842 +0B4C +1C40 +E040 +ENDCHAR +STARTCHAR uni90C6 +ENCODING 37062 +BBX 15 16 0 -2 +BITMAP +0800 +083E +0822 +FFA4 +0824 +0828 +7F24 +0024 +0022 +7F22 +4122 +4134 +4128 +7F20 +4120 +0020 +ENDCHAR +STARTCHAR uni90C7 +ENCODING 37063 +BBX 15 15 1 -1 +BITMAP +2000 +207E +3F42 +4142 +8144 +7D44 +4548 +4544 +7D44 +4542 +4542 +7D42 +014C +0140 +0640 +ENDCHAR +STARTCHAR uni90C8 +ENCODING 37064 +BBX 15 15 1 -1 +BITMAP +0380 +7C3E +4022 +4022 +7FA4 +4024 +4028 +5F24 +5124 +5122 +5122 +9122 +112C +1120 +1F20 +ENDCHAR +STARTCHAR uni90C9 +ENCODING 37065 +BBX 15 15 0 -2 +BITMAP +773E +2222 +2224 +2224 +2228 +2224 +F7A4 +2222 +2222 +2222 +2234 +2228 +4220 +4220 +8220 +ENDCHAR +STARTCHAR uni90CA +ENCODING 37066 +BBX 15 15 1 -1 +BITMAP +0800 +087E +0842 +FF42 +2444 +4244 +A148 +2244 +1444 +1442 +0842 +1442 +224C +4140 +8040 +ENDCHAR +STARTCHAR uni90CB +ENCODING 37067 +BBX 14 16 1 -2 +BITMAP +1000 +107C +2044 +FE48 +8248 +8250 +FE48 +8248 +8244 +FE44 +8244 +8268 +8250 +FE40 +8240 +0040 +ENDCHAR +STARTCHAR uni90CC +ENCODING 37068 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +1088 +7C88 +10F8 +1000 +FDFC +0124 +1124 +1124 +7DFC +1100 +1100 +1D02 +E102 +40FE +ENDCHAR +STARTCHAR uni90CD +ENCODING 37069 +BBX 15 16 0 -2 +BITMAP +0800 +103E +3F22 +2124 +2924 +2528 +2524 +FF24 +2122 +2922 +2522 +2534 +2128 +4120 +4520 +8220 +ENDCHAR +STARTCHAR uni90CE +ENCODING 37070 +BBX 15 15 1 -1 +BITMAP +1000 +107E +7E42 +4242 +4244 +7E48 +4244 +4244 +7E42 +4042 +4442 +4642 +494C +7140 +C040 +ENDCHAR +STARTCHAR uni90CF +ENCODING 37071 +BBX 15 16 0 -2 +BITMAP +0800 +083E +0822 +FFA4 +0824 +4928 +2924 +2A24 +FFA2 +0822 +0822 +1434 +1228 +2120 +4120 +8020 +ENDCHAR +STARTCHAR uni90D0 +ENCODING 37072 +BBX 15 16 0 -2 +BITMAP +0800 +083E +1422 +2224 +4124 +BEA8 +0024 +0024 +FFA2 +1022 +1022 +2234 +4128 +FF20 +4120 +0020 +ENDCHAR +STARTCHAR uni90D1 +ENCODING 37073 +BBX 15 16 0 -2 +BITMAP +2200 +123E +1422 +7F24 +0824 +0828 +0824 +FFA4 +0822 +0822 +1422 +1234 +2128 +4120 +8020 +0020 +ENDCHAR +STARTCHAR uni90D2 +ENCODING 37074 +BBX 14 15 1 -2 +BITMAP +41F0 +2110 +F910 +89F0 +8800 +FBF8 +8A48 +8A48 +FA48 +83F8 +A200 +9200 +AA04 +CA04 +81FC +ENDCHAR +STARTCHAR uni90D3 +ENCODING 37075 +BBX 15 15 0 -2 +BITMAP +7FBE +48A2 +0824 +7FA4 +1028 +1424 +2424 +7FA2 +0422 +0422 +07B4 +FC28 +4420 +0420 +0420 +ENDCHAR +STARTCHAR uni90D4 +ENCODING 37076 +BBX 15 16 0 -2 +BITMAP +0080 +01DE +7712 +1112 +1114 +2514 +25D8 +7514 +1512 +5512 +5512 +27DA +2014 +5010 +8FF0 +0010 +ENDCHAR +STARTCHAR uni90D5 +ENCODING 37077 +BBX 15 16 0 -2 +BITMAP +0400 +053E +04A2 +0424 +7FA4 +4428 +4424 +7524 +5522 +5522 +5522 +5234 +52A8 +A6A0 +89A0 +10A0 +ENDCHAR +STARTCHAR uni90D6 +ENCODING 37078 +BBX 14 15 1 -2 +BITMAP +FF7C +0044 +0048 +7E48 +4250 +4248 +4248 +7E44 +0044 +4244 +2268 +2450 +0F40 +F040 +4040 +ENDCHAR +STARTCHAR uni90D7 +ENCODING 37079 +BBX 15 15 1 -1 +BITMAP +2200 +147E +0842 +3442 +C344 +0844 +FFC8 +1044 +2844 +7F42 +A942 +2942 +294C +2B40 +0840 +ENDCHAR +STARTCHAR uni90D8 +ENCODING 37080 +BBX 14 15 1 -2 +BITMAP +7C7C +4444 +4448 +4448 +4450 +7C48 +0048 +0044 +FE44 +8244 +8268 +8250 +8240 +FE40 +8240 +ENDCHAR +STARTCHAR uni90D9 +ENCODING 37081 +BBX 15 16 0 -2 +BITMAP +0A00 +093E +FFA2 +0824 +0824 +7F28 +4924 +4924 +7F22 +4922 +4922 +7F34 +4928 +4920 +4920 +4320 +ENDCHAR +STARTCHAR uni90DA +ENCODING 37082 +BBX 15 15 0 -2 +BITMAP +FFBE +0822 +0824 +7F24 +1128 +1124 +FFE4 +0022 +0022 +7F22 +4134 +4128 +4120 +7F20 +4120 +ENDCHAR +STARTCHAR uni90DB +ENCODING 37083 +BBX 15 15 1 -1 +BITMAP +0E00 +F27E +5142 +8942 +8944 +0044 +7E48 +0444 +0844 +0F42 +F842 +0842 +084C +0840 +3840 +ENDCHAR +STARTCHAR uni90DC +ENCODING 37084 +BBX 15 15 1 -1 +BITMAP +0800 +483E +4822 +7F22 +8824 +0824 +0828 +FFA4 +0824 +0022 +7F22 +4122 +412C +4120 +7F20 +ENDCHAR +STARTCHAR uni90DD +ENCODING 37085 +BBX 15 15 1 -1 +BITMAP +0800 +087E +7F42 +0842 +0844 +0844 +FFC8 +1444 +5644 +5542 +94C2 +9442 +244C +2440 +4C40 +ENDCHAR +STARTCHAR uni90DE +ENCODING 37086 +BBX 15 15 1 -1 +BITMAP +0800 +087E +7E42 +4242 +4244 +7E44 +4248 +4244 +7E44 +40C2 +4542 +4642 +494C +7140 +C040 +ENDCHAR +STARTCHAR uni90DF +ENCODING 37087 +BBX 15 15 1 -1 +BITMAP +0800 +087E +FFC2 +0842 +4944 +4944 +4948 +AAC4 +AAC4 +8842 +1442 +1442 +224C +4140 +80C0 +ENDCHAR +STARTCHAR uni90E0 +ENCODING 37088 +BBX 15 15 0 -2 +BITMAP +7FBE +0822 +0824 +7F24 +4928 +4924 +7F24 +4922 +4922 +7F22 +0834 +6828 +1820 +2620 +C120 +ENDCHAR +STARTCHAR uni90E1 +ENCODING 37089 +BBX 14 14 1 -1 +BITMAP +7E7C +1244 +1244 +FFC8 +1248 +1250 +7E48 +2048 +7E44 +A244 +2244 +2258 +2240 +3E40 +ENDCHAR +STARTCHAR uni90E2 +ENCODING 37090 +BBX 15 14 1 -1 +BITMAP +7F7E +4142 +4142 +4144 +7F44 +0048 +FFC4 +0844 +0842 +7F42 +0842 +084C +0FC0 +F040 +ENDCHAR +STARTCHAR uni90E3 +ENCODING 37091 +BBX 14 16 0 -2 +BITMAP +0800 +087C +7F44 +0848 +0848 +7F50 +4148 +8248 +3C44 +0444 +0844 +0F68 +7850 +0840 +2840 +1040 +ENDCHAR +STARTCHAR uni90E4 +ENCODING 37092 +BBX 15 15 1 -1 +BITMAP +2200 +227E +4142 +88C2 +0844 +1444 +2248 +C1C4 +0044 +3E42 +2242 +2242 +224C +2240 +3E40 +ENDCHAR +STARTCHAR uni90E5 +ENCODING 37093 +BBX 14 15 0 -2 +BITMAP +7E7C +4244 +4248 +7E48 +4250 +4248 +7E48 +4244 +4244 +7E44 +0068 +2450 +2240 +4140 +8140 +ENDCHAR +STARTCHAR uni90E6 +ENCODING 37094 +BBX 14 15 1 -2 +BITMAP +FFBC +0024 +0024 +F7A8 +94A8 +94B0 +94A8 +D6A4 +B5A4 +94A4 +94B4 +94A8 +94A0 +94A0 +B5A0 +ENDCHAR +STARTCHAR uni90E7 +ENCODING 37095 +BBX 15 15 0 -2 +BITMAP +3E3E +2222 +2224 +3E24 +0028 +7F24 +4124 +4922 +4922 +4922 +4934 +1428 +1220 +2120 +C120 +ENDCHAR +STARTCHAR uni90E8 +ENCODING 37096 +BBX 15 15 1 -1 +BITMAP +0800 +087E +FF42 +4242 +2244 +2444 +0448 +FF44 +0044 +7E42 +4242 +4242 +424C +4240 +7E40 +ENDCHAR +STARTCHAR uni90E9 +ENCODING 37097 +BBX 15 16 0 -2 +BITMAP +6100 +1A3E +0C22 +3224 +C924 +0828 +FFA4 +1024 +3F22 +6122 +BF22 +2134 +3F28 +2120 +2520 +2220 +ENDCHAR +STARTCHAR uni90EA +ENCODING 37098 +BBX 15 16 0 -2 +BITMAP +0800 +083E +FFA2 +0824 +7F24 +0928 +FFA4 +0924 +7F22 +1022 +FF22 +2134 +7228 +0C20 +3320 +C0A0 +ENDCHAR +STARTCHAR uni90EB +ENCODING 37099 +BBX 15 15 1 -1 +BITMAP +0800 +107E +7F42 +4942 +4944 +7F44 +4948 +5144 +7F44 +2442 +4442 +FF42 +044C +0440 +0440 +ENDCHAR +STARTCHAR uni90EC +ENCODING 37100 +BBX 15 16 0 -2 +BITMAP +0800 +083E +FFA2 +0824 +7F24 +0828 +FFA4 +0024 +7F22 +4122 +7F22 +4134 +7F28 +4120 +4520 +4220 +ENDCHAR +STARTCHAR uni90ED +ENCODING 37101 +BBX 14 15 1 -1 +BITMAP +1000 +107C +FF44 +0044 +7E48 +4248 +7E50 +0048 +7E48 +0444 +0844 +FF44 +0858 +0840 +3840 +ENDCHAR +STARTCHAR uni90EE +ENCODING 37102 +BBX 15 15 0 -2 +BITMAP +3FBE +24A2 +24A4 +2EA4 +24A8 +3FA4 +20A4 +2EA2 +2AA2 +2AA2 +2EB4 +20A8 +40A0 +42A0 +8120 +ENDCHAR +STARTCHAR uni90EF +ENCODING 37103 +BBX 15 15 1 -1 +BITMAP +0800 +48BE +48A2 +8922 +1424 +1224 +21A8 +C824 +0824 +48A2 +48A2 +9522 +142C +2220 +C1A0 +ENDCHAR +STARTCHAR uni90F0 +ENCODING 37104 +BBX 15 15 0 -2 +BITMAP +FC1E +4812 +4BD2 +7854 +4A54 +4958 +7954 +4892 +4892 +5C92 +E95A +4954 +0A50 +0810 +0810 +ENDCHAR +STARTCHAR uni90F1 +ENCODING 37105 +BBX 15 16 0 -2 +BITMAP +2100 +113E +1222 +0024 +7FA4 +1228 +1224 +1224 +1222 +FFA2 +1222 +1234 +1228 +1220 +2220 +4220 +ENDCHAR +STARTCHAR uni90F2 +ENCODING 37106 +BBX 15 15 1 -1 +BITMAP +0800 +087E +FFC2 +0842 +2A44 +2A44 +2A48 +5A44 +4D44 +88C2 +1C42 +2A42 +494C +88C0 +0840 +ENDCHAR +STARTCHAR uni90F3 +ENCODING 37107 +BBX 14 16 0 -2 +BITMAP +1000 +677C +4144 +4148 +7748 +4150 +4148 +7F48 +1444 +1444 +1444 +1468 +2550 +2640 +4440 +8040 +ENDCHAR +STARTCHAR uni90F4 +ENCODING 37108 +BBX 15 15 1 -1 +BITMAP +1100 +113E +1122 +1122 +FFE4 +1124 +3BA8 +3764 +3324 +5522 +5522 +9922 +112C +1120 +1120 +ENDCHAR +STARTCHAR uni90F5 +ENCODING 37109 +BBX 15 14 1 -1 +BITMAP +03BE +7C22 +0422 +7FE4 +24A4 +24A8 +FFE4 +24A2 +24A2 +7FE2 +0422 +042C +07A0 +F820 +ENDCHAR +STARTCHAR uni90F6 +ENCODING 37110 +BBX 15 15 1 -1 +BITMAP +1000 +10F8 +FE88 +4488 +24F8 +2800 +09FC +FF24 +0124 +7D24 +45FC +4500 +4502 +4502 +7CFE +ENDCHAR +STARTCHAR uni90F7 +ENCODING 37111 +BBX 15 15 1 -1 +BITMAP +2200 +223E +47A2 +44A2 +94A4 +57A4 +24A8 +24A4 +57A4 +F422 +1522 +15A2 +266C +4C20 +8020 +ENDCHAR +STARTCHAR uni90F8 +ENCODING 37112 +BBX 15 16 0 -2 +BITMAP +4100 +223E +1422 +7F24 +4924 +4928 +7F24 +4924 +4922 +7F22 +0822 +0834 +FFA8 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uni90F9 +ENCODING 37113 +BBX 14 15 0 -2 +BITMAP +7E7C +4244 +7E48 +4248 +7E50 +4248 +7E48 +1444 +1244 +FF44 +1068 +2850 +2440 +4240 +8040 +ENDCHAR +STARTCHAR uni90FA +ENCODING 37114 +BBX 14 16 0 -2 +BITMAP +2124 +2248 +3D24 +4400 +A8F8 +1088 +20F8 +C800 +11FC +3D24 +4524 +85FC +2900 +1104 +2104 +C0FC +ENDCHAR +STARTCHAR uni90FB +ENCODING 37115 +BBX 15 16 0 -2 +BITMAP +3F00 +A13E +BF22 +A124 +BF24 +A128 +BF24 +8024 +FFA2 +0022 +4922 +4934 +9228 +9220 +4920 +4920 +ENDCHAR +STARTCHAR uni90FC +ENCODING 37116 +BBX 15 16 0 -2 +BITMAP +1000 +103E +7F22 +2124 +FFE4 +0028 +7F24 +4124 +7F22 +0822 +FFA2 +0834 +8828 +FFE0 +0820 +0820 +ENDCHAR +STARTCHAR uni90FD +ENCODING 37117 +BBX 15 15 1 -1 +BITMAP +0800 +093E +7F22 +0A22 +0A24 +0C24 +FFA8 +1024 +3F24 +6122 +A122 +3F22 +212C +2120 +3F20 +ENDCHAR +STARTCHAR uni90FE +ENCODING 37118 +BBX 15 14 1 -1 +BITMAP +FFBE +4022 +5FA2 +50A4 +5FA4 +50A8 +5FA4 +4424 +5FE2 +4922 +5A22 +462C +59A0 +3FE0 +ENDCHAR +STARTCHAR uni90FF +ENCODING 37119 +BBX 15 14 1 -1 +BITMAP +7FBE +44A2 +44A2 +7FA4 +4024 +5F28 +5124 +5F24 +5122 +5122 +5F22 +912C +1120 +1F20 +ENDCHAR +STARTCHAR uni9100 +ENCODING 37120 +BBX 15 15 1 -1 +BITMAP +2200 +227E +FFC2 +2242 +1044 +1044 +FFC8 +1044 +2044 +3F42 +6142 +A142 +214C +2140 +3F40 +ENDCHAR +STARTCHAR uni9101 +ENCODING 37121 +BBX 15 16 0 -2 +BITMAP +1400 +14BE +F722 +1424 +34A4 +D3A8 +0024 +7F24 +4122 +7F22 +4122 +7F34 +4128 +4120 +4520 +4220 +ENDCHAR +STARTCHAR uni9102 +ENCODING 37122 +BBX 15 14 1 -1 +BITMAP +F7BE +94A2 +94A2 +F7A4 +0024 +7F28 +0024 +FFA4 +1022 +3F22 +4122 +012C +0120 +0E20 +ENDCHAR +STARTCHAR uni9103 +ENCODING 37123 +BBX 15 16 0 -2 +BITMAP +0800 +143E +2222 +4124 +BEA4 +0028 +78A4 +4AA4 +4AA2 +7AA2 +4AA2 +4AB4 +7AA8 +48A0 +4AA0 +5920 +ENDCHAR +STARTCHAR uni9104 +ENCODING 37124 +BBX 15 14 1 -1 +BITMAP +FF7E +1442 +1442 +7F44 +5544 +6748 +4144 +7F44 +0842 +7E42 +0842 +084C +0F40 +F040 +ENDCHAR +STARTCHAR uni9105 +ENCODING 37125 +BBX 15 16 0 -2 +BITMAP +0100 +07BE +F822 +0824 +7F24 +4928 +4924 +7F24 +0822 +FFA2 +88A2 +8AB4 +BEA8 +80A0 +82A0 +8120 +ENDCHAR +STARTCHAR uni9106 +ENCODING 37126 +BBX 15 14 1 -1 +BITMAP +FF7E +8942 +8942 +7E44 +0844 +7F48 +4944 +7F44 +4942 +7F42 +0842 +FF4C +0840 +0840 +ENDCHAR +STARTCHAR uni9107 +ENCODING 37127 +BBX 15 16 0 -2 +BITMAP +1000 +179E +1092 +2092 +2FF4 +6414 +A418 +27D4 +2912 +2112 +2FF2 +211A +2294 +2250 +2450 +2810 +ENDCHAR +STARTCHAR uni9108 +ENCODING 37128 +BBX 14 16 0 -2 +BITMAP +0A00 +747C +1544 +5248 +2248 +2150 +4148 +BE48 +0844 +0844 +7F44 +0868 +1450 +1240 +2240 +4040 +ENDCHAR +STARTCHAR uni9109 +ENCODING 37129 +BBX 15 16 0 -2 +BITMAP +2100 +209E +23D2 +4A52 +4A54 +F3D4 +1258 +2254 +4BD2 +FA12 +0A92 +125A +12D4 +2350 +4210 +8010 +ENDCHAR +STARTCHAR uni910A +ENCODING 37130 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2252 +4A52 +4BD4 +F254 +1258 +23D4 +4A52 +FA52 +0A72 +17DA +1054 +2050 +4050 +8050 +ENDCHAR +STARTCHAR uni910B +ENCODING 37131 +BBX 13 16 1 -2 +BITMAP +5000 +96F8 +9288 +9290 +D690 +92A0 +9290 +FE90 +1088 +FE88 +0288 +64D0 +18A0 +2480 +C280 +0080 +ENDCHAR +STARTCHAR uni910C +ENCODING 37132 +BBX 15 16 0 -2 +BITMAP +0800 +043E +7FA2 +4424 +5F24 +4528 +7FA4 +4524 +5F22 +4422 +5F22 +5134 +5128 +5120 +5F20 +9120 +ENDCHAR +STARTCHAR uni910D +ENCODING 37133 +BBX 15 15 0 -2 +BITMAP +FFBE +80A2 +0024 +7F24 +4128 +7F24 +4124 +7F22 +1022 +0822 +FFB4 +0028 +2220 +4120 +80A0 +ENDCHAR +STARTCHAR uni910E +ENCODING 37134 +BBX 15 16 0 -2 +BITMAP +0800 +103E +7F22 +4124 +7F24 +4128 +7F24 +4124 +7F22 +1022 +0822 +2934 +A2A8 +A2A0 +1E20 +0020 +ENDCHAR +STARTCHAR uni910F +ENCODING 37135 +BBX 15 15 0 -2 +BITMAP +7FBE +4022 +5F24 +4024 +7FA8 +5524 +5224 +5922 +50A2 +4222 +7FB4 +5228 +4A20 +8220 +0620 +ENDCHAR +STARTCHAR uni9110 +ENCODING 37136 +BBX 15 16 0 -2 +BITMAP +1000 +083E +FFA2 +1024 +2224 +7C28 +0824 +1124 +7FA2 +00A2 +7F22 +4934 +7F28 +4920 +7F20 +4120 +ENDCHAR +STARTCHAR uni9111 +ENCODING 37137 +BBX 15 15 0 -2 +BITMAP +7FBE +1222 +52A4 +3324 +1228 +FFE4 +0024 +3F22 +2122 +2122 +3F34 +2128 +2120 +3F20 +2120 +ENDCHAR +STARTCHAR uni9112 +ENCODING 37138 +BBX 15 15 1 -1 +BITMAP +2000 +7F7E +9142 +5542 +5544 +7D44 +2148 +C244 +7F44 +9142 +5542 +5542 +7D4C +2140 +4640 +ENDCHAR +STARTCHAR uni9113 +ENCODING 37139 +BBX 15 16 0 -2 +BITMAP +0800 +103E +7F22 +4124 +7F24 +4128 +7F24 +4124 +7F22 +0A22 +0922 +FFB4 +0828 +1420 +2220 +4120 +ENDCHAR +STARTCHAR uni9114 +ENCODING 37140 +BBX 15 15 1 -1 +BITMAP +0800 +103E +7F22 +4122 +4124 +4124 +7F28 +4024 +7FA4 +4022 +7FA2 +00A2 +55AC +54A0 +8320 +ENDCHAR +STARTCHAR uni9115 +ENCODING 37141 +BBX 15 15 1 -1 +BITMAP +2200 +223E +47A2 +44A2 +94A4 +57A4 +24A8 +24A4 +57A4 +F422 +17A2 +1422 +242C +47A0 +8420 +ENDCHAR +STARTCHAR uni9116 +ENCODING 37142 +BBX 15 14 1 -1 +BITMAP +7F7E +4142 +4142 +7F44 +0044 +7F48 +4144 +7F44 +4142 +7F42 +4142 +7F4C +2240 +C140 +ENDCHAR +STARTCHAR uni9117 +ENCODING 37143 +BBX 14 16 0 -2 +BITMAP +1000 +087C +FF44 +0048 +7E48 +4250 +7E48 +0048 +FF44 +8144 +BD44 +A568 +BD50 +8140 +8540 +8240 +ENDCHAR +STARTCHAR uni9118 +ENCODING 37144 +BBX 15 15 1 -1 +BITMAP +0400 +7FBE +4422 +5FA2 +44A4 +7FE4 +44A8 +5FA4 +4424 +7FA2 +A4A2 +BFA2 +24AC +3FA0 +24A0 +ENDCHAR +STARTCHAR uni9119 +ENCODING 37145 +BBX 15 14 1 -1 +BITMAP +3F3E +2122 +2122 +3F24 +0824 +FFE8 +0024 +7FA4 +40A2 +5EA2 +52A2 +5EAC +40A0 +7FA0 +ENDCHAR +STARTCHAR uni911A +ENCODING 37146 +BBX 15 16 0 -2 +BITMAP +2200 +223E +FFA2 +2224 +7F24 +4128 +7F24 +4124 +7F22 +0822 +FFA2 +0834 +1428 +2220 +4120 +8120 +ENDCHAR +STARTCHAR uni911B +ENCODING 37147 +BBX 14 16 0 -2 +BITMAP +4900 +927C +4944 +0048 +7F48 +4950 +7F48 +4948 +7F44 +0844 +FFC4 +1C68 +2A50 +4940 +8840 +0840 +ENDCHAR +STARTCHAR uni911C +ENCODING 37148 +BBX 15 15 1 -1 +BITMAP +0400 +043E +7FA2 +4A22 +4A24 +7FA4 +4AA8 +4AA4 +7FA4 +6422 +BDA2 +A622 +242C +3CA0 +63A0 +ENDCHAR +STARTCHAR uni911D +ENCODING 37149 +BBX 15 15 0 -2 +BITMAP +773E +1122 +5524 +3324 +5528 +0C24 +3324 +C4A2 +1822 +6222 +0CB4 +7128 +0620 +1820 +E020 +ENDCHAR +STARTCHAR uni911E +ENCODING 37150 +BBX 15 15 1 -1 +BITMAP +2200 +FFFE +2242 +3E42 +0844 +7F44 +4948 +7F44 +0844 +7F42 +0842 +7F42 +084C +0F40 +F040 +ENDCHAR +STARTCHAR uni911F +ENCODING 37151 +BBX 15 16 0 -2 +BITMAP +0800 +FFBE +0822 +7F24 +4924 +7F28 +4924 +7F24 +08A2 +FFA2 +0222 +FFB4 +4228 +2220 +0A20 +0420 +ENDCHAR +STARTCHAR uni9120 +ENCODING 37152 +BBX 15 16 0 -2 +BITMAP +7F00 +083E +FFA2 +88A4 +6B24 +0828 +6B24 +0024 +7F22 +0022 +FFA2 +2034 +3F28 +0120 +0A20 +0420 +ENDCHAR +STARTCHAR uni9121 +ENCODING 37153 +BBX 15 16 0 -2 +BITMAP +1000 +7F3E +4122 +7F24 +4124 +7F28 +4024 +7FA4 +4022 +7FA2 +08A2 +7EB4 +1DA8 +2A20 +C920 +0820 +ENDCHAR +STARTCHAR uni9122 +ENCODING 37154 +BBX 15 14 1 -1 +BITMAP +7FBE +0422 +27A2 +2424 +2424 +FFE8 +1024 +1F24 +2022 +3FA2 +00A2 +55AC +94A0 +81A0 +ENDCHAR +STARTCHAR uni9123 +ENCODING 37155 +BBX 15 15 1 -1 +BITMAP +0800 +087E +7F42 +2242 +FFC4 +0044 +7F48 +4144 +7F44 +4142 +7F42 +0842 +FFCC +0840 +0840 +ENDCHAR +STARTCHAR uni9124 +ENCODING 37156 +BBX 14 16 0 -2 +BITMAP +7E00 +427C +7E44 +4248 +7E48 +0050 +FF48 +A548 +FF44 +0044 +7E44 +0268 +3450 +0840 +1440 +6240 +ENDCHAR +STARTCHAR uni9125 +ENCODING 37157 +BBX 15 16 0 -2 +BITMAP +1000 +203E +7F22 +4124 +7F24 +4128 +7F24 +4024 +7FA2 +4022 +7FA2 +00B4 +AAA8 +AAA0 +80A0 +0320 +ENDCHAR +STARTCHAR uni9126 +ENCODING 37158 +BBX 15 16 0 -2 +BITMAP +2000 +203E +7FA2 +D524 +5524 +5528 +FFA4 +5524 +5522 +5522 +FFA2 +0034 +6A28 +5520 +9520 +0020 +ENDCHAR +STARTCHAR uni9127 +ENCODING 37159 +BBX 15 15 1 -1 +BITMAP +0100 +7A3E +8C62 +52A2 +2124 +DEE4 +0028 +3F24 +2124 +2122 +3F22 +1122 +13AC +0C20 +F020 +ENDCHAR +STARTCHAR uni9128 +ENCODING 37160 +BBX 14 16 1 -2 +BITMAP +9240 +547C +FE88 +9350 +BA20 +D650 +928C +3FE0 +2020 +3FE0 +0000 +7FF0 +4210 +7FF0 +4004 +3FFC +ENDCHAR +STARTCHAR uni9129 +ENCODING 37161 +BBX 15 15 0 -2 +BITMAP +7F3E +0122 +3F24 +0124 +7F28 +0024 +7724 +2522 +F722 +0222 +FFB4 +4228 +2220 +2A20 +0420 +ENDCHAR +STARTCHAR uni912A +ENCODING 37162 +BBX 15 16 0 -2 +BITMAP +1200 +FF9E +1292 +7F92 +5214 +7FD4 +2258 +7F54 +A1D2 +3F12 +2112 +3F1A +2114 +3F10 +1210 +2110 +ENDCHAR +STARTCHAR uni912B +ENCODING 37163 +BBX 15 16 0 -2 +BITMAP +4100 +223E +0022 +FFA4 +88A4 +AAA8 +9CA4 +88A4 +FFA2 +0022 +7F22 +4134 +7F28 +4120 +7F20 +4120 +ENDCHAR +STARTCHAR uni912C +ENCODING 37164 +BBX 15 16 0 -2 +BITMAP +03C0 +7C1E +2892 +1512 +3F14 +2114 +2118 +3F94 +2092 +2092 +3FD2 +205A +5554 +5550 +A150 +0090 +ENDCHAR +STARTCHAR uni912D +ENCODING 37165 +BBX 15 15 1 -1 +BITMAP +2300 +40BE +BF62 +1222 +7FA4 +52A4 +63A8 +40A4 +7FA4 +40A2 +7FA2 +0822 +FFEC +3220 +C1A0 +ENDCHAR +STARTCHAR uni912E +ENCODING 37166 +BBX 15 16 0 -2 +BITMAP +1000 +EFBE +A4A2 +94A4 +AAA4 +C928 +1024 +7F24 +4122 +7F22 +4122 +7F34 +4128 +7F20 +2220 +4120 +ENDCHAR +STARTCHAR uni912F +ENCODING 37167 +BBX 15 15 1 -1 +BITMAP +1100 +0A3E +7FE2 +0422 +3FA4 +0424 +7FE8 +24A4 +1524 +FFE2 +0022 +3FA2 +20AC +20A0 +3FA0 +ENDCHAR +STARTCHAR uni9130 +ENCODING 37168 +BBX 15 15 1 -1 +BITMAP +4900 +293E +2A22 +FFA2 +2A24 +4924 +88A8 +4924 +77A4 +5522 +5522 +BFE2 +212C +4120 +8120 +ENDCHAR +STARTCHAR uni9131 +ENCODING 37169 +BBX 15 15 1 -1 +BITMAP +0380 +7C3E +24A2 +1522 +FFE4 +1524 +24A8 +4464 +8024 +3FA2 +24A2 +3FA2 +24AC +24A0 +3FA0 +ENDCHAR +STARTCHAR uni9132 +ENCODING 37170 +BBX 15 14 1 -1 +BITMAP +F7BE +94A2 +F7A2 +0024 +7F24 +4928 +7F24 +4924 +4922 +7F22 +0822 +FFAC +0820 +0820 +ENDCHAR +STARTCHAR uni9133 +ENCODING 37171 +BBX 14 15 1 -2 +BITMAP +FE7C +AA44 +AA48 +EE48 +2850 +EE48 +AA48 +AA44 +EE44 +AA44 +AA68 +EE50 +A840 +2940 +1F40 +ENDCHAR +STARTCHAR uni9134 +ENCODING 37172 +BBX 15 15 1 -1 +BITMAP +0A00 +4A7E +2AA2 +FFE2 +1124 +0A24 +7FE8 +0424 +3FA4 +0422 +FFE2 +1522 +24AC +C460 +0420 +ENDCHAR +STARTCHAR uni9135 +ENCODING 37173 +BBX 15 15 0 -2 +BITMAP +7F3E +4122 +7F24 +0024 +F7A8 +94A4 +F7A4 +0822 +0822 +FFA2 +1C34 +2A28 +4920 +88A0 +0820 +ENDCHAR +STARTCHAR uni9136 +ENCODING 37174 +BBX 15 16 0 -2 +BITMAP +0400 +0B1E +30D2 +DF32 +0014 +7FD4 +5558 +4E54 +7FD2 +0012 +3F92 +209A +3F94 +2090 +3F90 +2090 +ENDCHAR +STARTCHAR uni9137 +ENCODING 37175 +BBX 15 15 1 -1 +BITMAP +1400 +7F7E +5542 +7F42 +5544 +7F44 +0048 +FFC4 +0044 +7F42 +4142 +7F42 +224C +17C0 +F840 +ENDCHAR +STARTCHAR uni9138 +ENCODING 37176 +BBX 15 16 0 -2 +BITMAP +2200 +FFBE +2222 +7F24 +5524 +5528 +7F24 +0024 +FFA2 +90A2 +3E22 +2234 +5228 +0C20 +1820 +E020 +ENDCHAR +STARTCHAR uni9139 +ENCODING 37177 +BBX 15 14 1 -1 +BITMAP +FC3E +4BE2 +7862 +4AA4 +7AA4 +4928 +7AA4 +C864 +22A2 +CD22 +0622 +152C +E4E0 +0420 +ENDCHAR +STARTCHAR uni913A +ENCODING 37178 +BBX 15 15 1 -1 +BITMAP +0200 +023E +7FE2 +4922 +5FA4 +4924 +7FE8 +4224 +5FA4 +52A2 +5FA2 +52A2 +5FAC +8920 +30E0 +ENDCHAR +STARTCHAR uni913B +ENCODING 37179 +BBX 15 16 0 -2 +BITMAP +2200 +F7BE +2222 +F7A4 +5524 +88A8 +7F24 +0824 +7F22 +4922 +7F22 +4934 +7F28 +0820 +FFA0 +0820 +ENDCHAR +STARTCHAR uni913C +ENCODING 37180 +BBX 15 16 0 -2 +BITMAP +2200 +773E +2222 +F7A4 +2224 +5528 +88A4 +7F24 +4122 +7F22 +4122 +7F34 +4128 +7F20 +2220 +4120 +ENDCHAR +STARTCHAR uni913D +ENCODING 37181 +BBX 15 15 1 -1 +BITMAP +0800 +083E +7FE2 +54A2 +5FA4 +54A4 +5FA8 +4424 +7FE4 +4A22 +73E2 +8422 +9F2C +0420 +3FA0 +ENDCHAR +STARTCHAR uni913E +ENCODING 37182 +BBX 14 16 1 -2 +BITMAP +FF00 +107C +7E44 +4248 +7E48 +4250 +FF48 +9148 +4A44 +A544 +1C44 +2068 +7E50 +A240 +1C40 +E240 +ENDCHAR +STARTCHAR uni913F +ENCODING 37183 +BBX 15 16 0 -2 +BITMAP +2200 +FFBE +2222 +7724 +5524 +7728 +0024 +7F24 +4922 +7F22 +4922 +7F34 +0828 +FFA0 +0820 +0820 +ENDCHAR +STARTCHAR uni9140 +ENCODING 37184 +BBX 15 16 0 -2 +BITMAP +2200 +221E +FF92 +2212 +3E14 +4114 +5D58 +D594 +5512 +5552 +DD52 +40DA +0014 +5490 +4A50 +8A50 +ENDCHAR +STARTCHAR uni9141 +ENCODING 37185 +BBX 15 16 0 -2 +BITMAP +3E00 +421E +FF92 +4092 +7F94 +4494 +7718 +4454 +3FD2 +4212 +FF92 +489A +7F94 +1A10 +2950 +C7D0 +ENDCHAR +STARTCHAR uni9142 +ENCODING 37186 +BBX 15 16 0 -2 +BITMAP +1080 +529E +7BD2 +9492 +FBF4 +3194 +5AD8 +9494 +0012 +3F92 +2092 +249A +2494 +0B10 +1090 +6050 +ENDCHAR +STARTCHAR uni9143 +ENCODING 37187 +BBX 15 15 0 -2 +BITMAP +7FCE +040A +FFEA +842A +358A +040C +358A +000A +000A +EEEA +AAAA +AAAC +AAA8 +EEE8 +AAA8 +ENDCHAR +STARTCHAR uni9144 +ENCODING 37188 +BBX 15 16 0 -2 +BITMAP +1100 +7FDE +1112 +7BD2 +4A54 +7BD4 +1418 +1214 +3FD2 +2412 +7F92 +A41A +3F94 +2410 +3FD0 +2010 +ENDCHAR +STARTCHAR uni9145 +ENCODING 37189 +BBX 15 16 0 -2 +BITMAP +4440 +7FDE +1212 +3FD2 +6214 +BFD4 +2218 +3FD4 +2212 +3FD2 +2012 +7FDA +5154 +6ED0 +4A50 +4ED0 +ENDCHAR +STARTCHAR uni9146 +ENCODING 37190 +BBX 15 15 1 -1 +BITMAP +AA80 +FFBE +AAA2 +FFA2 +AAA4 +FFA4 +0028 +FFA4 +0024 +7F22 +4122 +7F22 +222C +17A0 +F820 +ENDCHAR +STARTCHAR uni9147 +ENCODING 37191 +BBX 15 15 1 -1 +BITMAP +5500 +7FFE +9522 +7BE2 +52A4 +54A4 +FFE8 +40A4 +7FA4 +40A2 +7FA2 +40A2 +7FAC +2120 +C0E0 +ENDCHAR +STARTCHAR uni9148 +ENCODING 37192 +BBX 15 14 1 -1 +BITMAP +77BE +0022 +77A2 +54A4 +2924 +7FA8 +5224 +7FA4 +52A2 +7FA2 +5222 +5B2C +92A0 +39A0 +ENDCHAR +STARTCHAR uni9149 +ENCODING 37193 +BBX 14 14 1 -1 +BITMAP +FFFC +0480 +0480 +7FF8 +4488 +4488 +4488 +48F8 +7008 +4008 +7FF8 +4008 +4008 +7FF8 +ENDCHAR +STARTCHAR uni914A +ENCODING 37194 +BBX 15 14 1 -1 +BITMAP +FEFE +2810 +2810 +FE10 +AA10 +AA10 +AA10 +CE10 +8210 +8210 +FE10 +8210 +8210 +FE30 +ENDCHAR +STARTCHAR uni914B +ENCODING 37195 +BBX 13 15 2 -1 +BITMAP +0180 +1040 +2020 +7FF0 +8888 +7FF0 +4890 +4890 +70F0 +4010 +4010 +7FF0 +4010 +4010 +7FF0 +ENDCHAR +STARTCHAR uni914C +ENCODING 37196 +BBX 15 15 1 -1 +BITMAP +0040 +FE40 +2840 +287E +FE82 +AA82 +AB02 +AA42 +CE22 +8212 +8202 +FE02 +8204 +8204 +FE38 +ENDCHAR +STARTCHAR uni914D +ENCODING 37197 +BBX 15 14 1 -1 +BITMAP +FEFC +2804 +2804 +FE04 +AA04 +AAFC +AA80 +CE80 +8280 +8280 +FE80 +8282 +8282 +FE7E +ENDCHAR +STARTCHAR uni914E +ENCODING 37198 +BBX 15 15 1 -1 +BITMAP +0008 +FE08 +2808 +29FE +FE08 +AA08 +AA88 +AA48 +CE28 +8208 +8208 +FE08 +8208 +8208 +FE38 +ENDCHAR +STARTCHAR uni914F +ENCODING 37199 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +2820 +28A0 +FEAC +AAB4 +AAE4 +ABA4 +AEA4 +C2B4 +82A8 +FEA2 +82A2 +8282 +FE7E +8200 +ENDCHAR +STARTCHAR uni9150 +ENCODING 37200 +BBX 15 15 0 -2 +BITMAP +FE7C +2810 +2810 +FE10 +AA10 +AA10 +AAFE +AE10 +C210 +8210 +FE10 +8210 +8210 +FE10 +8210 +ENDCHAR +STARTCHAR uni9151 +ENCODING 37201 +BBX 15 15 0 -2 +BITMAP +FEFC +2820 +2820 +FE20 +AA20 +AA20 +ABFE +AE20 +C220 +8220 +FE20 +8220 +8220 +FEA0 +8240 +ENDCHAR +STARTCHAR uni9152 +ENCODING 37202 +BBX 15 15 1 -1 +BITMAP +4000 +2FFE +1120 +0120 +8FFC +4924 +2924 +0924 +0A24 +1C3C +1804 +2FFC +2804 +4804 +8FFC +ENDCHAR +STARTCHAR uni9153 +ENCODING 37203 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0C60 +3118 +CFE6 +0040 +0080 +FFFE +0480 +3FF8 +2488 +2878 +3008 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni9154 +ENCODING 37204 +BBX 15 15 1 -1 +BITMAP +0040 +FE40 +29F8 +2848 +FE48 +AA8A +AA8A +AB06 +CE20 +8220 +83FE +FE20 +8220 +8220 +FE20 +ENDCHAR +STARTCHAR uni9155 +ENCODING 37205 +BBX 15 16 0 -2 +BITMAP +0008 +FE1C +28F0 +2810 +FE10 +AA1C +AAF0 +AA10 +AE10 +C21E +82F0 +FE10 +8212 +8212 +FE12 +820E +ENDCHAR +STARTCHAR uni9156 +ENCODING 37206 +BBX 15 15 1 -1 +BITMAP +0010 +FE10 +2810 +28FE +FE92 +AA92 +AA10 +AA10 +CE10 +8218 +8228 +FE28 +824A +824A +FE86 +ENDCHAR +STARTCHAR uni9157 +ENCODING 37207 +BBX 15 14 1 -1 +BITMAP +FE00 +288A +28CA +FEAA +AAAA +AA92 +AA92 +CE92 +82AA +82AA +FECA +8282 +8282 +FEFE +ENDCHAR +STARTCHAR uni9158 +ENCODING 37208 +BBX 15 14 1 -1 +BITMAP +FE78 +2848 +2848 +FE48 +AA8E +AA00 +AAFC +CE44 +8244 +8228 +FE28 +8210 +8228 +FEC6 +ENDCHAR +STARTCHAR uni9159 +ENCODING 37209 +BBX 15 15 1 -1 +BITMAP +0008 +FE88 +2848 +2828 +FE08 +AA88 +AA48 +AA28 +CE08 +820E +8238 +FEC8 +8208 +8208 +FE08 +ENDCHAR +STARTCHAR uni915A +ENCODING 37210 +BBX 15 16 0 -2 +BITMAP +0008 +FE28 +2828 +2828 +FE44 +AA44 +AA82 +AB7C +AE24 +C224 +8224 +FE24 +8244 +8244 +FE94 +8308 +ENDCHAR +STARTCHAR uni915B +ENCODING 37211 +BBX 15 14 1 -1 +BITMAP +FEFC +2800 +2800 +FE00 +AA00 +ABFE +CE48 +8248 +8248 +FE48 +8248 +8288 +FE8A +0106 +ENDCHAR +STARTCHAR uni915C +ENCODING 37212 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +2820 +28FC +FE20 +AA20 +AA20 +ABFE +AE20 +C250 +8250 +FE48 +8288 +8284 +FF04 +8202 +ENDCHAR +STARTCHAR uni915D +ENCODING 37213 +BBX 15 15 0 -2 +BITMAP +FE00 +287C +2800 +FE00 +AA00 +AAFE +AA10 +AE10 +C220 +8220 +FE44 +8242 +82FE +FE42 +8200 +ENDCHAR +STARTCHAR uni915E +ENCODING 37214 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +2820 +2820 +FE20 +ABFE +AA20 +AA20 +AE20 +C250 +8250 +FE50 +8288 +82C8 +FF24 +8202 +ENDCHAR +STARTCHAR uni915F +ENCODING 37215 +BBX 15 16 0 -2 +BITMAP +0010 +FF90 +1410 +1410 +7F1E +5510 +5510 +5510 +577C +6144 +4144 +7F44 +4144 +4144 +7F7C +4144 +ENDCHAR +STARTCHAR uni9160 +ENCODING 37216 +BBX 15 15 0 -2 +BITMAP +FE00 +28FE +2804 +FE04 +AAF4 +AA94 +AA94 +AE94 +C294 +82F4 +FE94 +8204 +8204 +FE14 +8208 +ENDCHAR +STARTCHAR uni9161 +ENCODING 37217 +BBX 15 15 1 -1 +BITMAP +0010 +FE10 +2810 +28FE +FE82 +AA82 +AA40 +AA42 +CE4C +8270 +8240 +FE40 +8242 +8242 +FE3E +ENDCHAR +STARTCHAR uni9162 +ENCODING 37218 +BBX 15 15 1 -1 +BITMAP +0020 +FF20 +2820 +287E +FEA0 +AB20 +AA20 +AA3C +CE20 +8220 +8220 +FE3C +8220 +8220 +FE20 +ENDCHAR +STARTCHAR uni9163 +ENCODING 37219 +BBX 15 15 1 -1 +BITMAP +0048 +FE48 +2848 +29FE +FE48 +AA48 +AA48 +AA48 +CE78 +8248 +8248 +FE48 +8248 +8248 +FE78 +ENDCHAR +STARTCHAR uni9164 +ENCODING 37220 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +2820 +29FE +FE20 +AA20 +AA20 +AA20 +CEFC +8284 +8284 +FE84 +8284 +8284 +FEFC +ENDCHAR +STARTCHAR uni9165 +ENCODING 37221 +BBX 15 15 1 -1 +BITMAP +000E +FEF0 +2810 +2810 +FEFE +AA10 +AA10 +AA38 +CE38 +8254 +8254 +FE92 +8210 +8210 +FE10 +ENDCHAR +STARTCHAR uni9166 +ENCODING 37222 +BBX 15 16 0 -2 +BITMAP +0020 +FE28 +28A4 +28A0 +FEFE +AA40 +AA40 +AA7C +AEA4 +C2A4 +82A8 +FEA8 +8290 +8328 +FE44 +8282 +ENDCHAR +STARTCHAR uni9167 +ENCODING 37223 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +28FE +2882 +FF0C +AA08 +AA08 +AAFE +AE08 +C248 +8228 +FE28 +8208 +8208 +FE28 +8210 +ENDCHAR +STARTCHAR uni9168 +ENCODING 37224 +BBX 15 16 0 -2 +BITMAP +0820 +0828 +7F24 +0820 +FFFE +0020 +FFA4 +1424 +7F24 +5528 +6328 +4110 +7F12 +412A +7F46 +4182 +ENDCHAR +STARTCHAR uni9169 +ENCODING 37225 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +287C +2844 +FEC4 +AB28 +AA10 +AA20 +CE7E +83C2 +8242 +FE42 +8242 +8242 +FE7E +ENDCHAR +STARTCHAR uni916A +ENCODING 37226 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +283C +2844 +FF84 +AA28 +AA10 +AA28 +CE44 +83FE +8244 +FE44 +8244 +8244 +FE7C +ENDCHAR +STARTCHAR uni916B +ENCODING 37227 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +2828 +2828 +FE44 +AA82 +AA7C +AA10 +AE10 +C210 +827C +FE10 +8210 +8210 +FEFE +8200 +ENDCHAR +STARTCHAR uni916C +ENCODING 37228 +BBX 15 15 1 -1 +BITMAP +0082 +FE92 +2892 +2892 +FEDA +AAB6 +AAB6 +CE92 +8392 +8292 +FE92 +8292 +8292 +FF02 +0102 +ENDCHAR +STARTCHAR uni916D +ENCODING 37229 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +28FE +2820 +FE40 +AA7C +AA44 +AAC4 +AF7C +C244 +8244 +FE7C +8244 +8244 +FE44 +824C +ENDCHAR +STARTCHAR uni916E +ENCODING 37230 +BBX 15 15 0 -2 +BITMAP +FEFE +2882 +2882 +FEBA +AA82 +AA82 +AABA +AEAA +C2AA +82AA +FEBA +8282 +8282 +FE8A +8284 +ENDCHAR +STARTCHAR uni916F +ENCODING 37231 +BBX 15 16 0 -2 +BITMAP +0080 +FE82 +288C +28F0 +FE82 +AA82 +AA7E +AA00 +AEFC +C284 +8284 +FEFC +8284 +8284 +FEFC +8284 +ENDCHAR +STARTCHAR uni9170 +ENCODING 37232 +BBX 15 16 0 -2 +BITMAP +0010 +FE50 +2850 +287C +FE90 +AA10 +AA10 +AAFE +AE28 +C228 +8228 +FE28 +824A +824A +FE86 +8300 +ENDCHAR +STARTCHAR uni9171 +ENCODING 37233 +BBX 15 16 0 -2 +BITMAP +0840 +4880 +29FC +1A48 +2830 +C9C0 +0800 +FFFE +0480 +3FF8 +2488 +2878 +3008 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni9172 +ENCODING 37234 +BBX 15 14 1 -1 +BITMAP +FEFC +2884 +2884 +FE84 +AAFC +AA00 +AA00 +CEFC +8220 +8220 +FEFC +8220 +8220 +FEFE +ENDCHAR +STARTCHAR uni9173 +ENCODING 37235 +BBX 15 15 1 -1 +BITMAP +0020 +FE40 +2888 +2850 +FE24 +AA4C +ABF2 +AA02 +CEFC +8284 +82FC +FE84 +82FC +8284 +FE8C +ENDCHAR +STARTCHAR uni9174 +ENCODING 37236 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +2850 +2888 +FF04 +AAFA +AA20 +AA20 +CFFC +8220 +82A8 +FEA8 +8324 +8222 +FE60 +ENDCHAR +STARTCHAR uni9175 +ENCODING 37237 +BBX 15 15 1 -1 +BITMAP +0020 +FE24 +28FE +2824 +FE28 +ABFE +AA10 +AA7C +AE48 +C390 +8210 +FEFE +8210 +8210 +FE70 +ENDCHAR +STARTCHAR uni9176 +ENCODING 37238 +BBX 15 16 0 -2 +BITMAP +0040 +FE40 +287E +2880 +FF7C +AA44 +AA64 +AA54 +AEFE +C244 +82A4 +FE94 +82FE +8204 +FE28 +8210 +ENDCHAR +STARTCHAR uni9177 +ENCODING 37239 +BBX 15 15 1 -1 +BITMAP +0010 +FE50 +2850 +28FC +FE90 +AA10 +AA10 +ABFE +CE00 +82FC +8284 +FE84 +8284 +8284 +FEFC +ENDCHAR +STARTCHAR uni9178 +ENCODING 37240 +BBX 15 15 1 -1 +BITMAP +0020 +FE24 +284C +28FA +FE48 +AA48 +AAAE +CF20 +823C +8244 +FFC4 +8228 +8230 +FE48 +0186 +ENDCHAR +STARTCHAR uni9179 +ENCODING 37241 +BBX 15 15 1 -1 +BITMAP +000C +FE34 +29E4 +28A2 +FE92 +AA92 +AB04 +AA04 +CFFE +8204 +82C4 +FE24 +8204 +8204 +FE1C +ENDCHAR +STARTCHAR uni917A +ENCODING 37242 +BBX 15 16 0 -2 +BITMAP +0014 +FE12 +28FE +2810 +FE10 +AAFE +AA92 +AA92 +AEFE +C292 +8292 +FEFE +8292 +8292 +FE92 +8286 +ENDCHAR +STARTCHAR uni917B +ENCODING 37243 +BBX 15 16 0 -2 +BITMAP +000E +FEF0 +2822 +2892 +FE54 +AA00 +AA7C +AA08 +AE10 +C210 +82FE +FE10 +8210 +8210 +FE50 +8220 +ENDCHAR +STARTCHAR uni917C +ENCODING 37244 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +29FE +2820 +FE48 +AA84 +ABFE +AA02 +AEA8 +C2A8 +82A8 +FEA8 +82A8 +82AA +FF2A +8206 +ENDCHAR +STARTCHAR uni917D +ENCODING 37245 +BBX 15 15 0 -2 +BITMAP +FEFE +2828 +28AA +FE6C +AA28 +AAFE +AA80 +AE80 +C280 +8280 +FE80 +8280 +8300 +FF00 +8200 +ENDCHAR +STARTCHAR uni917E +ENCODING 37246 +BBX 15 15 0 -2 +BITMAP +FBFE +2000 +2000 +FBDE +AA52 +AA52 +AA52 +DB5A +8AD6 +8A52 +FA52 +8A52 +8A52 +FA52 +8AD6 +ENDCHAR +STARTCHAR uni917F +ENCODING 37247 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +28FC +2884 +FE84 +AAFC +AA84 +AA84 +AEFC +C2A2 +82A4 +FE98 +8290 +8288 +FEC4 +8282 +ENDCHAR +STARTCHAR uni9180 +ENCODING 37248 +BBX 15 16 0 -2 +BITMAP +0050 +FE48 +2880 +28FE +FF90 +AA90 +AAFC +AA90 +AE90 +C2FC +8290 +FE90 +8290 +82FE +FE80 +8280 +ENDCHAR +STARTCHAR uni9181 +ENCODING 37249 +BBX 15 15 0 -2 +BITMAP +FEFC +2804 +2804 +FE7C +AA04 +AA04 +AAFE +AE10 +C292 +8254 +FE38 +8254 +8292 +FE50 +8220 +ENDCHAR +STARTCHAR uni9182 +ENCODING 37250 +BBX 15 15 1 -1 +BITMAP +0088 +FE88 +2888 +29FE +FE88 +AA88 +AA88 +ABDC +CEDC +82AA +82AA +FE88 +8288 +8288 +FE88 +ENDCHAR +STARTCHAR uni9183 +ENCODING 37251 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +29FE +2848 +FE68 +AAA4 +AAFC +CFA6 +82FC +82A4 +FEA4 +82FC +8222 +FE22 +001E +ENDCHAR +STARTCHAR uni9184 +ENCODING 37252 +BBX 15 16 0 -2 +BITMAP +0040 +FE40 +28FE +2882 +FF42 +AA7A +AAA2 +AA22 +AFFE +C222 +82AA +FEAA +82FA +8202 +FE14 +8208 +ENDCHAR +STARTCHAR uni9185 +ENCODING 37253 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +29FE +2884 +FE84 +AA48 +AA08 +ABFE +CE00 +82FC +8284 +FE84 +8284 +8284 +FEFC +ENDCHAR +STARTCHAR uni9186 +ENCODING 37254 +BBX 15 16 0 -2 +BITMAP +0028 +FE24 +282E +28F0 +FE28 +AA12 +AA2A +AAD6 +AE28 +C22E +82F0 +FE24 +8228 +8212 +FE2A +82C6 +ENDCHAR +STARTCHAR uni9187 +ENCODING 37255 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +29FE +2800 +FEFC +AA84 +AAFC +AA00 +CEFC +8208 +8210 +FEFE +8210 +8210 +FE70 +ENDCHAR +STARTCHAR uni9188 +ENCODING 37256 +BBX 15 16 0 -2 +BITMAP +0020 +FEA2 +28A2 +2924 +FE50 +AA88 +AB04 +AA22 +AE20 +C2A4 +82A4 +FF28 +8250 +8288 +FF04 +8202 +ENDCHAR +STARTCHAR uni9189 +ENCODING 37257 +BBX 15 15 1 -1 +BITMAP +0010 +FE10 +28FE +2800 +FE44 +AA44 +AAAA +AAAA +CE00 +8210 +82FE +FE10 +8210 +8210 +FE10 +ENDCHAR +STARTCHAR uni918A +ENCODING 37258 +BBX 15 15 0 -2 +BITMAP +FEEE +2822 +28AA +FE44 +AAAA +AB12 +AA00 +AEEE +C22A +82AA +FE4A +8244 +82A4 +FF2A +8210 +ENDCHAR +STARTCHAR uni918B +ENCODING 37259 +BBX 15 15 1 -1 +BITMAP +0048 +FE48 +29FE +2848 +FE48 +AA48 +ABFE +AA00 +CEFC +8284 +8284 +FEFC +8284 +8284 +FEFC +ENDCHAR +STARTCHAR uni918C +ENCODING 37260 +BBX 15 15 0 -2 +BITMAP +FEFC +2884 +2884 +FEFC +AA84 +AA84 +AAFC +AE00 +C290 +8292 +FEF4 +8298 +8292 +FED2 +828E +ENDCHAR +STARTCHAR uni918D +ENCODING 37261 +BBX 15 14 1 -1 +BITMAP +FEFC +2884 +28FC +FE84 +AA84 +AAFC +AA00 +CFFE +8220 +82A0 +FEBC +82A0 +8360 +FE1E +ENDCHAR +STARTCHAR uni918E +ENCODING 37262 +BBX 15 15 1 -1 +BITMAP +000C +FF0A +2808 +28FE +FE88 +AAE8 +AA88 +AAEA +CEAA +82AC +82AC +FEE8 +828A +8294 +FF24 +ENDCHAR +STARTCHAR uni918F +ENCODING 37263 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +28FA +2824 +FE28 +ABFE +AA20 +AA40 +AEFC +C344 +8244 +FE7C +8244 +8244 +FE7C +8244 +ENDCHAR +STARTCHAR uni9190 +ENCODING 37264 +BBX 15 14 1 -1 +BITMAP +FE4E +284A +284A +FFFA +AA4E +AA4A +AA4A +CEEA +82AE +FEAA +82AA +82AA +FEEA +0016 +ENDCHAR +STARTCHAR uni9191 +ENCODING 37265 +BBX 15 15 0 -2 +BITMAP +FEFC +2814 +2850 +FE5C +AA50 +AA7E +AA80 +AE7C +C244 +827C +FE44 +827C +8244 +FE44 +824C +ENDCHAR +STARTCHAR uni9192 +ENCODING 37266 +BBX 15 14 1 -1 +BITMAP +FEFC +2884 +28FC +FE84 +AA84 +AAFC +AA50 +CE7C +8290 +8210 +FEFC +8210 +8210 +FFFE +ENDCHAR +STARTCHAR uni9193 +ENCODING 37267 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +28FE +2892 +FE92 +AA28 +AA28 +AA4A +AE86 +C300 +82FE +FEAA +82AA +82AA +FEAA +83FE +ENDCHAR +STARTCHAR uni9194 +ENCODING 37268 +BBX 15 16 0 -2 +BITMAP +0620 +3820 +08A4 +7EA8 +1920 +2C50 +4A88 +0904 +FFFE +0440 +3FF8 +2848 +3038 +27C8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni9195 +ENCODING 37269 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +29FE +2800 +FE7C +AA44 +AA7C +AA00 +AEFE +C282 +8282 +FEFE +8282 +8282 +FEFE +8282 +ENDCHAR +STARTCHAR uni9196 +ENCODING 37270 +BBX 15 15 0 -2 +BITMAP +FE7C +2844 +2844 +FE7C +AA44 +AA44 +AA7C +AE00 +C2FE +82AA +FEAA +82AA +82AA +FFFE +8200 +ENDCHAR +STARTCHAR uni9197 +ENCODING 37271 +BBX 15 14 1 -1 +BITMAP +FEF4 +2828 +28AA +FE44 +AA84 +ABFE +AA50 +CE50 +82FC +FE50 +8250 +8292 +FE92 +010E +ENDCHAR +STARTCHAR uni9198 +ENCODING 37272 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +287E +2810 +FE10 +AAFE +AA20 +AA42 +AEFE +C200 +82FE +FEAA +82AA +82AA +FFFE +8200 +ENDCHAR +STARTCHAR uni9199 +ENCODING 37273 +BBX 15 16 0 -2 +BITMAP +0050 +FE96 +2892 +2892 +FED6 +AA92 +AA92 +AAFE +AE10 +C2FC +8244 +FE44 +8228 +8210 +FE28 +82C6 +ENDCHAR +STARTCHAR uni919A +ENCODING 37274 +BBX 15 16 0 -2 +BITMAP +0008 +FE4A +292A +28AC +FE88 +AA3E +AA08 +AB98 +AE9C +C2AA +82CA +FE88 +8288 +8340 +FE3E +8200 +ENDCHAR +STARTCHAR uni919B +ENCODING 37275 +BBX 15 16 0 -2 +BITMAP +0044 +FE44 +28FE +2844 +FE10 +AA28 +AA44 +AA82 +AE7C +C210 +8210 +FE7C +8210 +8210 +FEFE +8200 +ENDCHAR +STARTCHAR uni919C +ENCODING 37276 +BBX 15 15 1 -1 +BITMAP +0010 +FE20 +28FC +28A4 +FEA4 +AAFC +AAA4 +CEA4 +82FC +8254 +FE5A +825E +8290 +FE92 +010E +ENDCHAR +STARTCHAR uni919D +ENCODING 37277 +BBX 15 16 0 -2 +BITMAP +0044 +FE24 +2828 +28FE +FE10 +AA7C +AA10 +AAFE +AE20 +C220 +827C +FE50 +8290 +8310 +FEFE +8200 +ENDCHAR +STARTCHAR uni919E +ENCODING 37278 +BBX 15 14 1 -1 +BITMAP +FEF8 +28A8 +28A8 +FEA8 +AAD8 +AA88 +CEF8 +8200 +82F8 +FEA8 +82A8 +82A8 +FEA8 +03FE +ENDCHAR +STARTCHAR uni919F +ENCODING 37279 +BBX 15 16 0 -2 +BITMAP +0820 +2AA4 +4D28 +1450 +2288 +7FFE +4002 +BFF4 +0480 +3FF8 +2488 +2878 +3008 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni91A0 +ENCODING 37280 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +287C +2854 +FE54 +AAFE +AA28 +AA44 +AE82 +C300 +82FE +FEAA +82AA +82AA +FFFE +8200 +ENDCHAR +STARTCHAR uni91A1 +ENCODING 37281 +BBX 15 16 0 -2 +BITMAP +0040 +FE20 +29FE +2902 +FE50 +AA88 +AB44 +AA40 +AEFE +C320 +823C +FE20 +823E +8220 +FE20 +8220 +ENDCHAR +STARTCHAR uni91A2 +ENCODING 37282 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +29FE +2840 +FE40 +AAFC +AB44 +AA44 +CE7C +8200 +82FE +FEAA +82AA +82AA +FFFE +ENDCHAR +STARTCHAR uni91A3 +ENCODING 37283 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +28FE +2890 +FEBC +AA94 +AAFE +AA94 +AEBC +C290 +82BC +FEA4 +82A4 +82A4 +FEBC +8324 +ENDCHAR +STARTCHAR uni91A4 +ENCODING 37284 +BBX 15 15 1 -1 +BITMAP +901C +57E4 +1128 +3FFE +D208 +1118 +FFFE +0480 +3FF8 +2488 +38F8 +2008 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni91A5 +ENCODING 37285 +BBX 15 15 0 -2 +BITMAP +FEFE +2828 +28FE +FEAA +AAAA +AAFE +AA00 +AE7C +C200 +82FE +FE10 +8254 +8292 +FE50 +8220 +ENDCHAR +STARTCHAR uni91A6 +ENCODING 37286 +BBX 15 16 0 -2 +BITMAP +0010 +FE20 +2844 +28FE +FE44 +AAAA +AAEE +AA10 +AE28 +C254 +82AA +FE50 +8224 +8248 +FE10 +8260 +ENDCHAR +STARTCHAR uni91A7 +ENCODING 37287 +BBX 15 15 0 -2 +BITMAP +FBFE +2200 +227C +FA44 +AA44 +AA7C +AA00 +DAEE +8AAA +8AAA +FAAA +8AEE +8A00 +FBFE +8800 +ENDCHAR +STARTCHAR uni91A8 +ENCODING 37288 +BBX 15 15 1 -1 +BITMAP +0010 +FE10 +28FE +2800 +FEAA +AA92 +AAAA +AAFE +CE10 +82FE +8292 +FEAA +82F6 +8282 +FE86 +ENDCHAR +STARTCHAR uni91A9 +ENCODING 37289 +BBX 15 16 0 -2 +BITMAP +0028 +FE28 +28FE +2828 +FEFE +AAAA +AAFE +AAAA +AEFE +C200 +827C +FE44 +827C +8244 +FE7C +8244 +ENDCHAR +STARTCHAR uni91AA +ENCODING 37290 +BBX 15 14 1 -1 +BITMAP +FEEE +2866 +28AA +FE66 +AAAA +AA10 +AA28 +CFC6 +8210 +8264 +FE18 +8262 +820C +FEF0 +ENDCHAR +STARTCHAR uni91AB +ENCODING 37291 +BBX 15 14 1 -1 +BITMAP +7F78 +4848 +4E8E +5478 +7F48 +4A38 +5144 +FFFE +0480 +3FF8 +2488 +38F8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni91AC +ENCODING 37292 +BBX 15 15 1 -1 +BITMAP +483C +4864 +49A8 +78B0 +0BC8 +F808 +4BFE +8848 +FFFE +0440 +3FF8 +2448 +3878 +2008 +3FF8 +ENDCHAR +STARTCHAR uni91AD +ENCODING 37293 +BBX 15 16 0 -2 +BITMAP +0028 +FEAA +286C +2828 +FEFE +AA44 +AA28 +AAFE +AE10 +C27C +8210 +FEFE +8210 +8228 +FE44 +8282 +ENDCHAR +STARTCHAR uni91AE +ENCODING 37294 +BBX 15 15 1 -1 +BITMAP +0044 +FE48 +28FE +2888 +FFFC +AA88 +AA88 +AAFC +CE88 +8288 +82FE +FE00 +8354 +832A +FE2A +ENDCHAR +STARTCHAR uni91AF +ENCODING 37295 +BBX 15 15 1 -1 +BITMAP +0010 +FE10 +28FE +2828 +FE4C +AAF2 +AA00 +AAA8 +CEAA +82A6 +8300 +FEFE +82AA +82AA +FFFE +ENDCHAR +STARTCHAR uni91B0 +ENCODING 37296 +BBX 15 15 0 -2 +BITMAP +FEFE +2828 +28FE +FEAA +AAFE +AA00 +AA7C +AE44 +C27C +8244 +FE7C +8210 +82FE +FE10 +8210 +ENDCHAR +STARTCHAR uni91B1 +ENCODING 37297 +BBX 15 15 1 -1 +BITMAP +01E4 +FC28 +2B52 +288C +FF06 +ABDC +AA54 +CFD4 +8226 +8200 +FFFE +8262 +8254 +FE9C +01A2 +ENDCHAR +STARTCHAR uni91B2 +ENCODING 37298 +BBX 15 16 0 -2 +BITMAP +0028 +FEFE +28AA +28FE +FEAA +AAFE +AA00 +AAFE +AE80 +C2BE +8280 +FEFE +82A8 +82AA +FEA4 +8332 +ENDCHAR +STARTCHAR uni91B3 +ENCODING 37299 +BBX 15 14 1 -1 +BITMAP +FFFE +2952 +29FE +FE20 +AAFC +AA20 +ABFE +CE84 +83FE +8220 +FEFC +8220 +8220 +FE20 +ENDCHAR +STARTCHAR uni91B4 +ENCODING 37300 +BBX 15 15 1 -1 +BITMAP +0028 +FEFE +28AA +28FE +FEAA +AAFE +AA00 +AAFE +CE00 +82FE +8282 +FEFE +8244 +8228 +FEFE +ENDCHAR +STARTCHAR uni91B5 +ENCODING 37301 +BBX 15 15 1 -1 +BITMAP +0010 +FE1C +2810 +28FE +FE92 +AA9C +AAF2 +AA9E +CE80 +82FE +8290 +FEBA +82DC +82AA +FF58 +ENDCHAR +STARTCHAR uni91B6 +ENCODING 37302 +BBX 15 15 1 -1 +BITMAP +0010 +FE10 +2828 +2844 +FE82 +AA7C +AA00 +AAEE +CEAA +82AA +82EE +FE44 +8244 +82AA +FF2A +ENDCHAR +STARTCHAR uni91B7 +ENCODING 37303 +BBX 15 16 0 -2 +BITMAP +0010 +FEFE +2844 +2828 +FEFE +AA00 +AA7C +AA44 +AE7C +C244 +827C +FE20 +8294 +8342 +FE44 +823C +ENDCHAR +STARTCHAR uni91B8 +ENCODING 37304 +BBX 15 15 1 -1 +BITMAP +0020 +FE20 +29FE +2848 +FF86 +AA48 +AAFC +AA48 +CEFC +8248 +83FE +FE48 +838A +82E4 +FF82 +ENDCHAR +STARTCHAR uni91B9 +ENCODING 37305 +BBX 15 15 0 -2 +BITMAP +FE7C +2810 +28FE +FE92 +AA54 +AA10 +AA54 +AE00 +C2FE +8210 +FEFE +82AA +82AA +FEAA +8286 +ENDCHAR +STARTCHAR uni91BA +ENCODING 37306 +BBX 15 15 1 -1 +BITMAP +000C +FEF0 +2810 +29FE +FE10 +AAFE +AAD6 +AABA +CEFE +8210 +82FE +FE10 +82FE +82A4 +FF12 +ENDCHAR +STARTCHAR uni91BB +ENCODING 37307 +BBX 15 16 0 -2 +BITMAP +0020 +FBFE +2020 +21FC +F800 +ABFE +A802 +A9FC +D820 +8BFE +8800 +FBFE +8804 +8BBE +FAA4 +8B8C +ENDCHAR +STARTCHAR uni91BC +ENCODING 37308 +BBX 15 15 1 -1 +BITMAP +0048 +FE48 +29FE +2848 +FE78 +AA88 +AAEE +CFA8 +82A8 +82E8 +FF8E +8200 +8354 +FE52 +0202 +ENDCHAR +STARTCHAR uni91BD +ENCODING 37309 +BBX 15 15 0 -2 +BITMAP +F9FC +2020 +23FE +FA22 +A9AC +A820 +A9AC +D800 +8BEE +8AAA +FAAA +8AAA +8AAA +FBEE +8AAA +ENDCHAR +STARTCHAR uni91BE +ENCODING 37310 +BBX 15 16 0 -2 +BITMAP +0040 +F820 +23FE +2248 +FBFE +AA48 +AAEC +AB5A +DA48 +8B24 +8AA8 +FBFE +8A70 +8AA8 +FD26 +8820 +ENDCHAR +STARTCHAR uni91BF +ENCODING 37311 +BBX 15 16 0 -2 +BITMAP +0020 +FBFE +2248 +23FE +FA48 +AAEC +AB5A +AA48 +DA20 +8A44 +8A78 +FA14 +8AFE +8A10 +FA54 +8CB2 +ENDCHAR +STARTCHAR uni91C0 +ENCODING 37312 +BBX 15 15 1 -1 +BITMAP +0010 +FEFE +2800 +28EE +FEAA +AAEE +AA44 +AAFE +CE44 +82FE +8244 +FFFE +82CA +8374 +FEC2 +ENDCHAR +STARTCHAR uni91C1 +ENCODING 37313 +BBX 15 15 1 -1 +BITMAP +77DC +4444 +775C +4544 +FFFE +8242 +3FF8 +2448 +3878 +2008 +3FF8 +1010 +3FF8 +C616 +1870 +ENDCHAR +STARTCHAR uni91C2 +ENCODING 37314 +BBX 15 16 0 -2 +BITMAP +001E +FBE0 +2122 +2094 +FBFE +AA52 +ABFE +A804 +DBC4 +8A7E +8BC4 +FA54 +8BCC +8A84 +FAD4 +8B48 +ENDCHAR +STARTCHAR uni91C3 +ENCODING 37315 +BBX 15 15 1 -1 +BITMAP +00EE +FE00 +28EE +28AA +FEAA +AA10 +AAFE +AAA8 +CEFE +82AA +82FE +FEA8 +82BC +832A +FE76 +ENDCHAR +STARTCHAR uni91C4 +ENCODING 37316 +BBX 15 15 1 -1 +BITMAP +0010 +FFFE +2A48 +2BFE +FE48 +AAEA +AB5E +AA48 +CE28 +82EE +8228 +FEEE +8228 +82EE +FE48 +ENDCHAR +STARTCHAR uni91C5 +ENCODING 37317 +BBX 15 16 0 -2 +BITMAP +03DE +FA52 +23DE +2000 +FBFE +AA00 +AAC8 +AA4E +DBEA +8AB2 +8AEA +FAAA +8AEA +8AB4 +FDE4 +882A +ENDCHAR +STARTCHAR uni91C6 +ENCODING 37318 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +1110 +1110 +0920 +0100 +FFFE +0540 +0540 +0920 +1110 +2108 +C106 +0100 +0100 +ENDCHAR +STARTCHAR uni91C7 +ENCODING 37319 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +0104 +2084 +1088 +1010 +0100 +FFFE +0540 +0540 +0920 +1110 +2108 +C106 +0100 +ENDCHAR +STARTCHAR uni91C8 +ENCODING 37320 +BBX 15 15 1 -1 +BITMAP +0C00 +F0FC +1084 +9284 +5484 +1084 +FEFC +1090 +3090 +3890 +5488 +5088 +9104 +1104 +1202 +ENDCHAR +STARTCHAR uni91C9 +ENCODING 37321 +BBX 15 15 1 -1 +BITMAP +0C10 +F010 +1010 +9210 +54FE +1092 +FE92 +1092 +3092 +38FE +5492 +5292 +9092 +1092 +10FE +ENDCHAR +STARTCHAR uni91CA +ENCODING 37322 +BBX 15 16 0 -2 +BITMAP +0C00 +F3FC +1104 +5488 +3850 +1020 +FCD8 +1326 +3020 +39FC +5420 +5020 +93FE +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni91CB +ENCODING 37323 +BBX 15 15 1 -1 +BITMAP +0C00 +F1FC +1154 +95FC +5420 +11FC +FC20 +13FE +3088 +3BFE +5420 +55FC +9020 +1020 +1020 +ENDCHAR +STARTCHAR uni91CC +ENCODING 37324 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0100 +0100 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni91CD +ENCODING 37325 +BBX 15 15 1 -1 +BITMAP +0078 +3F80 +0100 +FFFE +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni91CE +ENCODING 37326 +BBX 15 14 1 -1 +BITMAP +FEFE +9204 +FE48 +9230 +9210 +FFFE +1012 +1014 +FE10 +1010 +1010 +1E10 +F010 +0070 +ENDCHAR +STARTCHAR uni91CF +ENCODING 37327 +BBX 15 15 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +FFFE +0000 +1FF0 +1110 +1FF0 +1110 +1FF0 +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni91D0 +ENCODING 37328 +BBX 15 15 1 -1 +BITMAP +1040 +7EFE +1184 +FE48 +5438 +92C6 +FFFE +4888 +4FF8 +4888 +4FF8 +4080 +8FF8 +8080 +3FFE +ENDCHAR +STARTCHAR uni91D1 +ENCODING 37329 +BBX 15 15 1 -1 +BITMAP +0100 +0280 +0440 +0820 +3018 +CFE6 +0100 +0100 +7FFC +0100 +1110 +1110 +0910 +0920 +FFFE +ENDCHAR +STARTCHAR uni91D2 +ENCODING 37330 +BBX 7 16 0 -2 +BITMAP +10 +10 +28 +24 +42 +BC +10 +10 +FE +10 +94 +58 +50 +1E +F0 +40 +ENDCHAR +STARTCHAR uni91D3 +ENCODING 37331 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +2880 +2480 +4280 +BC80 +1080 +1080 +FE80 +1080 +9480 +5884 +5084 +1E84 +F07C +4000 +ENDCHAR +STARTCHAR uni91D4 +ENCODING 37332 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +28FE +2404 +4208 +BC10 +1020 +1020 +FE40 +1040 +9480 +5882 +5082 +1E82 +F07E +4000 +ENDCHAR +STARTCHAR uni91D5 +ENCODING 37333 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +2804 +2408 +4210 +BC20 +1020 +1020 +FE20 +1020 +9420 +5820 +5020 +1E20 +F0A0 +4040 +ENDCHAR +STARTCHAR uni91D6 +ENCODING 37334 +BBX 14 15 1 -1 +BITMAP +1000 +2BFC +2444 +4044 +FC44 +1044 +1044 +FE44 +1084 +9484 +5484 +5104 +1704 +1A04 +E418 +ENDCHAR +STARTCHAR uni91D7 +ENCODING 37335 +BBX 14 15 1 -1 +BITMAP +1004 +2804 +2404 +4044 +FE44 +1044 +1044 +FE44 +1044 +9444 +5404 +5004 +1604 +3804 +C01C +ENDCHAR +STARTCHAR uni91D8 +ENCODING 37336 +BBX 15 15 1 -1 +BITMAP +0800 +14FE +1210 +2110 +7E10 +8810 +0810 +7F10 +0810 +4A10 +2A10 +2810 +0F10 +3810 +C070 +ENDCHAR +STARTCHAR uni91D9 +ENCODING 37337 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +2840 +2440 +4240 +BC50 +1048 +1044 +FE44 +1040 +9440 +5840 +5040 +1E40 +F040 +4040 +ENDCHAR +STARTCHAR uni91DA +ENCODING 37338 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +2480 +4080 +FDF0 +1090 +1090 +FE90 +1090 +9490 +5490 +5090 +1D12 +3112 +C20E +ENDCHAR +STARTCHAR uni91DB +ENCODING 37339 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +41FE +FC22 +1022 +1022 +FE22 +1042 +9442 +5442 +5082 +1E84 +3104 +C238 +ENDCHAR +STARTCHAR uni91DC +ENCODING 37340 +BBX 15 15 1 -1 +BITMAP +0440 +0820 +1850 +6688 +0100 +06C0 +1830 +E7CE +0100 +0100 +7FFC +1110 +0920 +0920 +FFFE +ENDCHAR +STARTCHAR uni91DD +ENCODING 37341 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +4020 +FC20 +13FE +1020 +FE20 +1020 +9420 +5420 +5220 +1C20 +3020 +C020 +ENDCHAR +STARTCHAR uni91DE +ENCODING 37342 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +2840 +2420 +4220 +BC20 +1020 +1050 +FE50 +1050 +9448 +5888 +5088 +1E84 +F104 +4202 +ENDCHAR +STARTCHAR uni91DF +ENCODING 37343 +BBX 15 15 1 -1 +BITMAP +1030 +2890 +2490 +4090 +FC90 +1090 +1090 +FC90 +1108 +9508 +5508 +5108 +1E04 +3204 +C402 +ENDCHAR +STARTCHAR uni91E0 +ENCODING 37344 +BBX 15 16 0 -2 +BITMAP +1000 +10F0 +2890 +2490 +4290 +BC90 +1090 +1090 +FE90 +1090 +9490 +5892 +5092 +1F12 +F10E +4200 +ENDCHAR +STARTCHAR uni91E1 +ENCODING 37345 +BBX 15 15 1 -1 +BITMAP +0280 +0440 +1830 +610C +0280 +0440 +1830 +E7CE +0100 +0100 +7FFC +1110 +0920 +0920 +FFFE +ENDCHAR +STARTCHAR uni91E2 +ENCODING 37346 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +29FC +2444 +4248 +BC48 +1050 +105E +FE42 +1042 +9482 +5882 +5082 +1F02 +F114 +4208 +ENDCHAR +STARTCHAR uni91E3 +ENCODING 37347 +BBX 15 15 1 -1 +BITMAP +1040 +2840 +247E +4282 +FC82 +1102 +1002 +FE42 +1022 +9412 +5402 +5002 +1E04 +3004 +C038 +ENDCHAR +STARTCHAR uni91E4 +ENCODING 37348 +BBX 15 15 1 -1 +BITMAP +1008 +2810 +2420 +40C0 +FC04 +1008 +1010 +FE20 +10C2 +9402 +5404 +5008 +1E10 +3060 +C180 +ENDCHAR +STARTCHAR uni91E5 +ENCODING 37349 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +4020 +FCA8 +10A8 +10A8 +FD24 +1124 +9622 +5420 +5020 +1C20 +3020 +C060 +ENDCHAR +STARTCHAR uni91E6 +ENCODING 37350 +BBX 14 15 1 -1 +BITMAP +1000 +29FC +2504 +4104 +FD04 +1104 +1104 +FF04 +1104 +9504 +5504 +5104 +1F04 +31FC +C000 +ENDCHAR +STARTCHAR uni91E7 +ENCODING 37351 +BBX 14 15 1 -1 +BITMAP +1004 +2924 +2524 +4124 +FD24 +1124 +1124 +FF24 +1124 +9524 +5524 +5124 +1E04 +3204 +C404 +ENDCHAR +STARTCHAR uni91E8 +ENCODING 37352 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2804 +2408 +4210 +BC20 +1020 +11FE +FE20 +1020 +9420 +5820 +5020 +1E20 +F0A0 +4040 +ENDCHAR +STARTCHAR uni91E9 +ENCODING 37353 +BBX 15 16 0 -2 +BITMAP +1000 +11F0 +2910 +2510 +4110 +B910 +1190 +1150 +FD50 +1110 +9510 +5912 +5112 +1E12 +E20E +4400 +ENDCHAR +STARTCHAR uni91EA +ENCODING 37354 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2820 +2420 +4220 +BC20 +1020 +11FE +FE20 +1020 +9420 +5820 +5020 +1E20 +F0A0 +4040 +ENDCHAR +STARTCHAR uni91EB +ENCODING 37355 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2800 +2400 +4200 +BDFE +1040 +1040 +FE80 +10FC +9404 +5804 +5004 +1E04 +F028 +4010 +ENDCHAR +STARTCHAR uni91EC +ENCODING 37356 +BBX 15 15 1 -1 +BITMAP +1000 +29FE +2420 +4020 +FC20 +1020 +1020 +FDFE +1020 +9420 +5420 +5020 +1C20 +3020 +C020 +ENDCHAR +STARTCHAR uni91ED +ENCODING 37357 +BBX 15 15 1 -1 +BITMAP +1000 +2800 +2400 +41FC +FC20 +1020 +1020 +FC20 +1020 +9420 +5420 +5020 +1C20 +33FE +C000 +ENDCHAR +STARTCHAR uni91EE +ENCODING 37358 +BBX 15 15 1 -1 +BITMAP +1008 +2808 +2408 +4008 +FDFE +1008 +1018 +FC18 +1028 +9448 +5488 +5108 +1C08 +3008 +C038 +ENDCHAR +STARTCHAR uni91EF +ENCODING 37359 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2820 +2400 +43FE +BC80 +1080 +1080 +FE80 +1080 +9480 +5880 +5080 +1E80 +F0FC +4000 +ENDCHAR +STARTCHAR uni91F0 +ENCODING 37360 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +29FC +2424 +4024 +B8A4 +10A4 +10A4 +FD24 +1024 +9424 +5844 +5044 +1C84 +E114 +4208 +ENDCHAR +STARTCHAR uni91F1 +ENCODING 37361 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +4020 +FDFC +1020 +1020 +FC20 +1020 +9420 +5450 +5050 +1C88 +3104 +C202 +ENDCHAR +STARTCHAR uni91F2 +ENCODING 37362 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +28FC +2484 +4284 +BC84 +1084 +10FC +FE84 +1080 +9480 +5882 +5082 +1E82 +F07E +4000 +ENDCHAR +STARTCHAR uni91F3 +ENCODING 37363 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2880 +24FE +4100 +BA00 +10FC +1008 +FC10 +1020 +9440 +5880 +5102 +1D02 +E0FE +4000 +ENDCHAR +STARTCHAR uni91F4 +ENCODING 37364 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +2848 +2440 +425E +BDE0 +1040 +1040 +FE40 +1040 +9420 +5822 +5012 +1E0A +F006 +4002 +ENDCHAR +STARTCHAR uni91F5 +ENCODING 37365 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2484 +40A4 +FC94 +1094 +1088 +FE48 +1050 +9450 +5420 +5020 +1E50 +3088 +C306 +ENDCHAR +STARTCHAR uni91F6 +ENCODING 37366 +BBX 15 15 1 -1 +BITMAP +1020 +2920 +252C +4134 +FD64 +11A4 +1324 +FD24 +1124 +952C +5520 +5100 +1D02 +3102 +C0FE +ENDCHAR +STARTCHAR uni91F7 +ENCODING 37367 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +2420 +4020 +B820 +11FC +1020 +FC20 +1020 +9420 +5820 +5020 +1C20 +E3FE +4000 +ENDCHAR +STARTCHAR uni91F8 +ENCODING 37368 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +2840 +247C +4244 +BC84 +10C4 +1124 +FE18 +1008 +9410 +5810 +5020 +1E40 +F080 +4100 +ENDCHAR +STARTCHAR uni91F9 +ENCODING 37369 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2840 +2440 +43FE +B888 +1088 +1088 +FC88 +1108 +9490 +5850 +5020 +1C50 +E088 +4304 +ENDCHAR +STARTCHAR uni91FA +ENCODING 37370 +BBX 15 16 0 -2 +BITMAP +1008 +103C +29E0 +2420 +4020 +B820 +1020 +13FE +FC20 +1020 +9420 +5820 +5020 +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni91FB +ENCODING 37371 +BBX 15 15 1 -1 +BITMAP +1040 +2840 +2440 +41F8 +FC48 +1048 +1048 +FD48 +10C8 +9448 +54A8 +50A8 +1D0A +310A +C206 +ENDCHAR +STARTCHAR uni91FC +ENCODING 37372 +BBX 15 15 1 -1 +BITMAP +1000 +29FE +2422 +4022 +FC22 +1022 +1022 +FEA2 +1062 +945A +5446 +5082 +1E84 +3104 +C238 +ENDCHAR +STARTCHAR uni91FD +ENCODING 37373 +BBX 15 16 0 -2 +BITMAP +1008 +101C +29F0 +2550 +4150 +B950 +1150 +1150 +FD50 +1148 +9548 +5948 +5144 +1E44 +E242 +4400 +ENDCHAR +STARTCHAR uni91FE +ENCODING 37374 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2808 +2488 +4088 +B888 +1108 +11FE +FC18 +1028 +9448 +5888 +5108 +1E08 +E028 +4010 +ENDCHAR +STARTCHAR uni91FF +ENCODING 37375 +BBX 15 15 1 -1 +BITMAP +1018 +28E0 +2480 +4080 +FCFE +1088 +1088 +FE88 +1088 +9488 +5488 +5108 +1D08 +3208 +C008 +ENDCHAR +STARTCHAR uni9200 +ENCODING 37376 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +29FC +2524 +4124 +B924 +1124 +1124 +FDFC +1100 +9500 +5900 +5102 +1D02 +E0FE +4000 +ENDCHAR +STARTCHAR uni9201 +ENCODING 37377 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +43FE +FC40 +1040 +1040 +FC7C +1044 +9444 +5444 +5084 +1C84 +3104 +C218 +ENDCHAR +STARTCHAR uni9202 +ENCODING 37378 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +25FE +4122 +BA24 +1020 +1020 +FC50 +1050 +9450 +5850 +5090 +1C92 +E112 +420E +ENDCHAR +STARTCHAR uni9203 +ENCODING 37379 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2848 +2448 +4248 +BC48 +1048 +11FE +FE48 +1048 +9448 +5848 +5048 +1E48 +F088 +4108 +ENDCHAR +STARTCHAR uni9204 +ENCODING 37380 +BBX 15 16 0 -2 +BITMAP +1008 +1088 +2848 +2448 +4208 +BC88 +1048 +1048 +FE08 +100E +95F8 +5808 +5008 +1E08 +F008 +4008 +ENDCHAR +STARTCHAR uni9205 +ENCODING 37381 +BBX 14 16 0 -2 +BITMAP +1000 +10FC +2884 +2484 +4284 +BCFC +1084 +1084 +FE84 +10FC +9484 +5884 +5084 +1E84 +F114 +4208 +ENDCHAR +STARTCHAR uni9206 +ENCODING 37382 +BBX 15 16 0 -2 +BITMAP +1008 +1048 +2848 +2448 +4044 +B884 +10A4 +1122 +FC20 +1040 +9440 +5848 +5084 +1DFE +E082 +4000 +ENDCHAR +STARTCHAR uni9207 +ENCODING 37383 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +41FC +FC20 +1020 +1020 +FC20 +13FE +9420 +5450 +5050 +1C88 +3104 +C202 +ENDCHAR +STARTCHAR uni9208 +ENCODING 37384 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +29FE +2410 +4210 +BC20 +1020 +1068 +FE64 +10A2 +9522 +5820 +5020 +1E20 +F020 +4020 +ENDCHAR +STARTCHAR uni9209 +ENCODING 37385 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +25FE +4122 +B922 +1122 +1122 +FD52 +114A +958A +5902 +5102 +1D02 +E10A +4104 +ENDCHAR +STARTCHAR uni920A +ENCODING 37386 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2410 +4210 +FC40 +1040 +1040 +FC44 +1144 +9542 +5542 +5140 +1C44 +3044 +C03C +ENDCHAR +STARTCHAR uni920B +ENCODING 37387 +BBX 15 16 0 -2 +BITMAP +10A0 +10A0 +28A0 +2524 +4124 +BB28 +1530 +1120 +FD60 +11A0 +9520 +5922 +5122 +1D22 +E11E +4100 +ENDCHAR +STARTCHAR uni920C +ENCODING 37388 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +25FC +4024 +B824 +1024 +1024 +FDFE +1020 +9450 +5850 +5088 +1C88 +E104 +4202 +ENDCHAR +STARTCHAR uni920D +ENCODING 37389 +BBX 15 15 1 -1 +BITMAP +1020 +2824 +2438 +41E0 +FC20 +1124 +1124 +FD24 +1124 +9524 +55FC +5020 +1C22 +3022 +C01E +ENDCHAR +STARTCHAR uni920E +ENCODING 37390 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +24FE +4102 +FD02 +1242 +1042 +FE42 +1092 +9492 +54EA +518A +1E04 +3004 +C038 +ENDCHAR +STARTCHAR uni920F +ENCODING 37391 +BBX 14 16 0 -2 +BITMAP +1004 +11E4 +2824 +2424 +4024 +B9E4 +1104 +1104 +FD04 +11E4 +9424 +5824 +5024 +1C24 +E144 +4084 +ENDCHAR +STARTCHAR uni9210 +ENCODING 37392 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2450 +4088 +FD06 +10F8 +1000 +FE00 +10FC +9404 +5404 +5008 +1C08 +3010 +C010 +ENDCHAR +STARTCHAR uni9211 +ENCODING 37393 +BBX 15 15 1 -1 +BITMAP +1000 +29FE +2500 +4100 +FD00 +11FC +1144 +FD44 +1144 +9528 +5528 +5210 +1E28 +3044 +C082 +ENDCHAR +STARTCHAR uni9212 +ENCODING 37394 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +2884 +2488 +4088 +B890 +109C +1084 +FD44 +1144 +9528 +5928 +5210 +1E28 +E444 +4182 +ENDCHAR +STARTCHAR uni9213 +ENCODING 37395 +BBX 15 16 0 -2 +BITMAP +1008 +103C +29E0 +2420 +4020 +B820 +1020 +13FE +FC20 +1020 +9420 +5820 +5020 +1C20 +E1FC +4000 +ENDCHAR +STARTCHAR uni9214 +ENCODING 37396 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +40A8 +FCA4 +1122 +1120 +FE24 +1024 +9468 +5408 +5010 +1E20 +3040 +C180 +ENDCHAR +STARTCHAR uni9215 +ENCODING 37397 +BBX 15 15 1 -1 +BITMAP +1000 +29F8 +2488 +4088 +FC88 +1088 +1088 +FDFE +1088 +9488 +5488 +5088 +1C88 +3088 +C3FE +ENDCHAR +STARTCHAR uni9216 +ENCODING 37398 +BBX 15 15 1 -1 +BITMAP +1030 +2810 +2490 +4088 +FD08 +1104 +1202 +FCFC +1044 +9444 +5444 +5084 +1C84 +3104 +C218 +ENDCHAR +STARTCHAR uni9217 +ENCODING 37399 +BBX 15 15 1 -1 +BITMAP +1040 +2840 +2440 +4090 +FC88 +1134 +13C2 +FC00 +1090 +9490 +5490 +5090 +1D12 +3112 +C20E +ENDCHAR +STARTCHAR uni9218 +ENCODING 37400 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +25FE +4020 +B820 +1020 +11FC +FC84 +1088 +9448 +5850 +5020 +1C50 +E188 +4606 +ENDCHAR +STARTCHAR uni9219 +ENCODING 37401 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +243E +4220 +BC20 +1020 +11FC +FE84 +1088 +9448 +5850 +5020 +1E50 +F188 +4606 +ENDCHAR +STARTCHAR uni921A +ENCODING 37402 +BBX 15 16 0 -2 +BITMAP +1010 +1110 +2910 +2512 +4112 +B914 +11D8 +1110 +FD10 +1110 +9510 +5912 +5152 +1D92 +E10E +4000 +ENDCHAR +STARTCHAR uni921B +ENCODING 37403 +BBX 15 16 0 -2 +BITMAP +1048 +1044 +2844 +2440 +425E +BDE0 +1040 +1044 +FE44 +1048 +9430 +5822 +5052 +1E8A +F106 +4002 +ENDCHAR +STARTCHAR uni921C +ENCODING 37404 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2840 +2440 +43FE +B840 +1080 +1090 +FC90 +1120 +9520 +5A48 +5244 +1C84 +E1FE +4082 +ENDCHAR +STARTCHAR uni921D +ENCODING 37405 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +2890 +2490 +42FE +BC90 +1110 +1010 +FE10 +11FE +9410 +5810 +5010 +1E10 +F010 +4010 +ENDCHAR +STARTCHAR uni921E +ENCODING 37406 +BBX 15 15 1 -1 +BITMAP +1040 +2840 +24FE +4082 +FD02 +1002 +1072 +FC02 +1002 +941A +54E2 +5002 +1C04 +3004 +C038 +ENDCHAR +STARTCHAR uni921F +ENCODING 37407 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2824 +2424 +4224 +BDFC +1120 +1120 +FF20 +11FE +9422 +5822 +502A +1E24 +F020 +4020 +ENDCHAR +STARTCHAR uni9220 +ENCODING 37408 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +2888 +2488 +4288 +BD06 +1200 +11FC +FE84 +1084 +9448 +5850 +5020 +1E50 +F088 +4306 +ENDCHAR +STARTCHAR uni9221 +ENCODING 37409 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +2820 +2420 +41FC +B924 +1124 +1124 +FD24 +11FC +9524 +5820 +5020 +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni9222 +ENCODING 37410 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +2420 +41FE +B820 +1070 +1070 +FCA8 +10A8 +9524 +5924 +5222 +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni9223 +ENCODING 37411 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +2810 +2410 +4290 +BC9E +1090 +1090 +FE90 +10FE +9402 +5802 +5002 +1E02 +F014 +4008 +ENDCHAR +STARTCHAR uni9224 +ENCODING 37412 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +28FC +2484 +4284 +BC84 +1084 +1084 +FEFC +1084 +9484 +5884 +5084 +1E84 +F0FC +4084 +ENDCHAR +STARTCHAR uni9225 +ENCODING 37413 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +2424 +42A4 +BCA4 +10A8 +1120 +FE20 +1050 +9450 +5850 +5088 +1E88 +F104 +4202 +ENDCHAR +STARTCHAR uni9226 +ENCODING 37414 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +2420 +4220 +BDFE +1020 +1020 +FE20 +1050 +9450 +5850 +5088 +1EC8 +F124 +4202 +ENDCHAR +STARTCHAR uni9227 +ENCODING 37415 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2800 +25FC +4000 +B800 +10F0 +1090 +FC90 +1090 +9490 +5892 +5092 +1D12 +E10E +4200 +ENDCHAR +STARTCHAR uni9228 +ENCODING 37416 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +29FC +2400 +4000 +B800 +13FE +1090 +FC90 +1090 +9490 +5890 +5112 +1D12 +E20E +4400 +ENDCHAR +STARTCHAR uni9229 +ENCODING 37417 +BBX 15 15 1 -1 +BITMAP +1000 +29FE +2400 +4000 +FCFE +1082 +1082 +FE82 +10FE +9480 +5480 +5080 +1D00 +3100 +C200 +ENDCHAR +STARTCHAR uni922A +ENCODING 37418 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2900 +2500 +4178 +B948 +1148 +1148 +FD48 +1168 +9550 +5942 +5142 +1D42 +E23E +4400 +ENDCHAR +STARTCHAR uni922B +ENCODING 37419 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2820 +25FE +4288 +BC88 +1088 +1088 +FE50 +1050 +9420 +5820 +5050 +1E88 +F104 +4202 +ENDCHAR +STARTCHAR uni922C +ENCODING 37420 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2504 +4104 +FD04 +1104 +11FC +FD10 +1110 +9510 +5508 +5108 +1E08 +3204 +C402 +ENDCHAR +STARTCHAR uni922D +ENCODING 37421 +BBX 15 15 0 -1 +BITMAP +0880 +0888 +2E90 +28E0 +2884 +2E84 +F17C +06C0 +1830 +EFEE +0100 +3FF8 +0920 +0540 +FFFE +ENDCHAR +STARTCHAR uni922E +ENCODING 37422 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +2504 +4104 +B9FC +1100 +1140 +FD44 +1148 +9570 +5940 +5142 +1E42 +E23E +4400 +ENDCHAR +STARTCHAR uni922F +ENCODING 37423 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +2924 +2524 +4124 +B924 +11FC +1020 +FC20 +1124 +9524 +5924 +5124 +1D24 +E1FC +4004 +ENDCHAR +STARTCHAR uni9230 +ENCODING 37424 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2800 +25FE +4020 +B820 +11FC +1124 +FD24 +1124 +9524 +5924 +5134 +1D28 +E020 +4020 +ENDCHAR +STARTCHAR uni9231 +ENCODING 37425 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +2504 +4104 +B9FC +1120 +1120 +FDFE +1120 +9520 +5910 +5112 +1D4A +E186 +4102 +ENDCHAR +STARTCHAR uni9232 +ENCODING 37426 +BBX 15 16 0 -2 +BITMAP +1008 +101C +29F0 +2550 +4150 +B950 +1150 +1150 +FD50 +1148 +9548 +5968 +5154 +1E74 +E252 +4400 +ENDCHAR +STARTCHAR uni9233 +ENCODING 37427 +BBX 15 15 1 -1 +BITMAP +1000 +2BFE +2408 +4008 +FDE8 +1128 +1128 +FD28 +1128 +9528 +55E8 +5008 +1C08 +3008 +C038 +ENDCHAR +STARTCHAR uni9234 +ENCODING 37428 +BBX 14 15 1 -1 +BITMAP +1020 +2850 +2488 +4104 +FCF8 +1000 +1000 +FDFC +1044 +9444 +5444 +5044 +1C5C +3040 +C040 +ENDCHAR +STARTCHAR uni9235 +ENCODING 37429 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2820 +2420 +4020 +B9FE +1122 +1122 +FD52 +114A +958A +5902 +5102 +1D02 +E10A +4104 +ENDCHAR +STARTCHAR uni9236 +ENCODING 37430 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +2440 +4248 +BC84 +11FE +1082 +FE00 +10FC +9484 +5884 +5084 +1E84 +F0FC +4084 +ENDCHAR +STARTCHAR uni9237 +ENCODING 37431 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +41FE +FC20 +1020 +1020 +FE20 +11FC +9504 +5504 +5104 +1F04 +3104 +C1FC +ENDCHAR +STARTCHAR uni9238 +ENCODING 37432 +BBX 15 15 1 -1 +BITMAP +1048 +2844 +2444 +43FE +FC40 +1040 +1044 +FCC4 +10A8 +9528 +5510 +5210 +1C28 +30C4 +C302 +ENDCHAR +STARTCHAR uni9239 +ENCODING 37433 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4222 +FE24 +1220 +13FC +FE84 +1284 +9648 +5248 +5230 +1C30 +3048 +C186 +ENDCHAR +STARTCHAR uni923A +ENCODING 37434 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2420 +4020 +FC20 +1020 +1020 +FDFC +1020 +9420 +5428 +5024 +1C24 +3020 +C3FE +ENDCHAR +STARTCHAR uni923B +ENCODING 37435 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2884 +2484 +4284 +BC84 +10FC +1080 +FE80 +10FE +9482 +5882 +5082 +1E82 +F0FE +4082 +ENDCHAR +STARTCHAR uni923C +ENCODING 37436 +BBX 15 15 1 -1 +BITMAP +1040 +2840 +2440 +40FE +FCA0 +1120 +1020 +FE3C +1020 +9420 +543C +5020 +1E20 +3020 +C020 +ENDCHAR +STARTCHAR uni923D +ENCODING 37437 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +25FE +4040 +B850 +1090 +10FE +FD92 +1292 +9492 +5892 +509A +1C94 +E010 +4010 +ENDCHAR +STARTCHAR uni923E +ENCODING 37438 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +2820 +2420 +41FC +B924 +1124 +1124 +FD24 +11FC +9524 +5924 +5124 +1D24 +E1FC +4104 +ENDCHAR +STARTCHAR uni923F +ENCODING 37439 +BBX 14 15 1 -1 +BITMAP +1000 +2800 +25FC +4124 +FD24 +1124 +1124 +FDFC +1124 +9524 +5524 +5124 +1D24 +31FC +C000 +ENDCHAR +STARTCHAR uni9240 +ENCODING 37440 +BBX 14 15 1 -1 +BITMAP +1000 +29FC +2524 +4124 +FD24 +11FC +1124 +FD24 +1124 +95FC +5420 +5020 +1C20 +3020 +C020 +ENDCHAR +STARTCHAR uni9241 +ENCODING 37441 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2850 +2488 +4104 +BA12 +1020 +1040 +FD88 +1010 +9420 +5844 +5188 +1C10 +E060 +4380 +ENDCHAR +STARTCHAR uni9242 +ENCODING 37442 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +41FC +FD24 +1124 +1124 +FDFC +1020 +9520 +54A0 +5040 +1C60 +3098 +C306 +ENDCHAR +STARTCHAR uni9243 +ENCODING 37443 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +2480 +41FC +FD20 +1220 +1020 +FC20 +13FE +9420 +5450 +5050 +1C88 +3104 +C202 +ENDCHAR +STARTCHAR uni9244 +ENCODING 37444 +BBX 15 15 1 -1 +BITMAP +1020 +28A0 +24A0 +40A0 +FCFC +1120 +1120 +FC20 +11FE +9420 +5450 +5050 +1C88 +3104 +C202 +ENDCHAR +STARTCHAR uni9245 +ENCODING 37445 +BBX 15 15 1 -1 +BITMAP +1000 +28FE +2480 +4080 +FC80 +10FC +1084 +FE84 +1084 +94FC +5480 +5080 +1E80 +3080 +C0FE +ENDCHAR +STARTCHAR uni9246 +ENCODING 37446 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +2420 +403E +B820 +1020 +1020 +FDFC +1104 +9504 +5904 +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni9247 +ENCODING 37447 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +2480 +41FE +FD00 +1220 +112C +FD34 +1164 +95A4 +552C +5120 +1D22 +3102 +C0FE +ENDCHAR +STARTCHAR uni9248 +ENCODING 37448 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +43FE +FE02 +1282 +1080 +FC84 +1098 +94E0 +5480 +5080 +1C82 +3082 +C07E +ENDCHAR +STARTCHAR uni9249 +ENCODING 37449 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +43FE +FC40 +1040 +1080 +FD10 +1090 +9460 +5428 +5044 +1C84 +311A +C7E2 +ENDCHAR +STARTCHAR uni924A +ENCODING 37450 +BBX 15 15 1 -1 +BITMAP +1000 +29FE +2422 +4222 +FC42 +1042 +1082 +FD1C +1000 +94FC +5484 +5084 +1C84 +3084 +C0FC +ENDCHAR +STARTCHAR uni924B +ENCODING 37451 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +25FC +4204 +FC04 +11E4 +1124 +FD24 +1124 +95E4 +5518 +5100 +1F02 +3102 +C0FE +ENDCHAR +STARTCHAR uni924C +ENCODING 37452 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +2820 +2420 +4020 +BBFE +1020 +1070 +FC70 +10A8 +94A8 +5924 +5222 +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni924D +ENCODING 37453 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2828 +2408 +4008 +B848 +1054 +1152 +FD52 +1160 +9660 +5844 +50C4 +1D44 +E23C +4000 +ENDCHAR +STARTCHAR uni924E +ENCODING 37454 +BBX 15 15 1 -1 +BITMAP +1020 +28A0 +24A0 +40A0 +FDFE +1120 +1220 +FC20 +1020 +95FC +5420 +5020 +1C20 +3020 +C3FE +ENDCHAR +STARTCHAR uni924F +ENCODING 37455 +BBX 15 15 1 -1 +BITMAP +1000 +28F8 +2488 +4088 +FC88 +10F8 +1088 +FE88 +1088 +94F8 +5488 +5088 +1E88 +3088 +C3FE +ENDCHAR +STARTCHAR uni9250 +ENCODING 37456 +BBX 14 15 1 -1 +BITMAP +1000 +29FC +2420 +4220 +FC20 +1040 +1040 +FCFC +1184 +9484 +5484 +5084 +1C84 +3084 +C0FC +ENDCHAR +STARTCHAR uni9251 +ENCODING 37457 +BBX 14 15 1 -1 +BITMAP +1020 +2820 +2440 +41FC +FD04 +1104 +1104 +FD04 +11FC +9504 +5504 +5104 +1D04 +3104 +C1FC +ENDCHAR +STARTCHAR uni9252 +ENCODING 37458 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2800 +25FE +4020 +B820 +1020 +1020 +FDFC +1020 +9420 +5820 +5020 +1C20 +E3FE +4000 +ENDCHAR +STARTCHAR uni9253 +ENCODING 37459 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +2880 +24FE +4120 +BA20 +1020 +11FC +FD24 +1124 +9524 +5924 +5134 +1D28 +E020 +4020 +ENDCHAR +STARTCHAR uni9254 +ENCODING 37460 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2910 +2510 +4110 +B97C +1154 +1154 +FD54 +1154 +9554 +595C +5110 +1D10 +E1FE +4000 +ENDCHAR +STARTCHAR uni9255 +ENCODING 37461 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +2880 +2480 +42BC +BCA4 +10A4 +10A4 +FEA4 +10A4 +94BC +58A4 +5080 +1E80 +F0FE +4000 +ENDCHAR +STARTCHAR uni9256 +ENCODING 37462 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +247C +4184 +FE88 +1050 +1020 +FCD8 +1306 +9460 +5418 +5000 +1C0C +3030 +C0C0 +ENDCHAR +STARTCHAR uni9257 +ENCODING 37463 +BBX 15 15 1 -1 +BITMAP +1088 +2888 +2488 +43FE +FC88 +1088 +1088 +FC88 +10F8 +9488 +5488 +5088 +1C88 +3088 +C0F8 +ENDCHAR +STARTCHAR uni9258 +ENCODING 37464 +BBX 15 16 0 -2 +BITMAP +1050 +1050 +2850 +25FC +4054 +B854 +11FC +1150 +FD50 +11FE +9452 +5852 +505A +1C94 +E090 +4110 +ENDCHAR +STARTCHAR uni9259 +ENCODING 37465 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2504 +4304 +FD04 +1104 +1104 +FD04 +11FC +9400 +5488 +5088 +1D04 +3104 +C202 +ENDCHAR +STARTCHAR uni925A +ENCODING 37466 +BBX 15 15 1 -1 +BITMAP +2040 +5080 +4B1E +8252 +FA52 +2252 +2252 +FA52 +2252 +AA52 +ABD2 +665E +2850 +3090 +C310 +ENDCHAR +STARTCHAR uni925B +ENCODING 37467 +BBX 15 15 1 -1 +BITMAP +1018 +2848 +2448 +4084 +FC84 +1102 +1000 +FE00 +10FC +9484 +5484 +5084 +1684 +1884 +E0FC +ENDCHAR +STARTCHAR uni925C +ENCODING 37468 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +2888 +2508 +417E +BB08 +1508 +1148 +FD28 +1128 +9508 +5908 +5108 +1D08 +E128 +4110 +ENDCHAR +STARTCHAR uni925D +ENCODING 37469 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +2810 +2400 +41FE +B800 +1004 +1084 +FC84 +1048 +9448 +5848 +5050 +1C10 +E1FE +4000 +ENDCHAR +STARTCHAR uni925E +ENCODING 37470 +BBX 15 15 1 -1 +BITMAP +1028 +2824 +2424 +41FE +FD20 +1124 +1124 +FD28 +1128 +9510 +5510 +5190 +1E2A +304A +C084 +ENDCHAR +STARTCHAR uni925F +ENCODING 37471 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +2810 +2410 +4220 +BC20 +1068 +1064 +FEA2 +1122 +9420 +5820 +5020 +1E00 +F1FE +4000 +ENDCHAR +STARTCHAR uni9260 +ENCODING 37472 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +41FC +FD24 +1124 +1124 +FD24 +13FE +9420 +5450 +5050 +1C88 +3104 +C202 +ENDCHAR +STARTCHAR uni9261 +ENCODING 37473 +BBX 15 15 1 -1 +BITMAP +1020 +28A8 +24A4 +4122 +FDFC +1020 +1020 +FC20 +13FE +9420 +5420 +5020 +1C20 +3020 +C020 +ENDCHAR +STARTCHAR uni9262 +ENCODING 37474 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +43FE +FC20 +1070 +1070 +FCA8 +10A8 +9524 +5622 +50F8 +1C20 +3020 +C020 +ENDCHAR +STARTCHAR uni9263 +ENCODING 37475 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +25FC +4020 +B820 +1020 +13FE +FC20 +1020 +9440 +5848 +5084 +1DFE +E082 +4000 +ENDCHAR +STARTCHAR uni9264 +ENCODING 37476 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +2480 +41FE +FD02 +1202 +10F2 +FC92 +1092 +9492 +5492 +50F2 +1C04 +3004 +C038 +ENDCHAR +STARTCHAR uni9265 +ENCODING 37477 +BBX 15 15 1 -1 +BITMAP +1028 +2828 +2424 +43FE +FC20 +1020 +10A8 +FCA8 +10A8 +94A8 +54A8 +512A +1D26 +3220 +C020 +ENDCHAR +STARTCHAR uni9266 +ENCODING 37478 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2420 +4020 +FC20 +1120 +1120 +FD3C +1120 +9520 +5520 +5120 +1D20 +3120 +C3FE +ENDCHAR +STARTCHAR uni9267 +ENCODING 37479 +BBX 15 15 1 -1 +BITMAP +1000 +28FC +2484 +40A4 +FC94 +1084 +13FE +FD04 +1144 +9524 +5514 +5104 +1DFE +3008 +C038 +ENDCHAR +STARTCHAR uni9268 +ENCODING 37480 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +2480 +41FE +FD22 +1224 +1020 +FD28 +1128 +9524 +5524 +5222 +1C20 +3020 +C0E0 +ENDCHAR +STARTCHAR uni9269 +ENCODING 37481 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2850 +2450 +4088 +B904 +1222 +1020 +FCA8 +10A4 +9524 +5922 +5222 +1C20 +E0A0 +4040 +ENDCHAR +STARTCHAR uni926A +ENCODING 37482 +BBX 15 16 0 -2 +BITMAP +1024 +10A4 +28A4 +24A4 +42A4 +BDFE +10A4 +10A4 +FEA4 +10A4 +94BC +5880 +5080 +1E80 +F0FE +4000 +ENDCHAR +STARTCHAR uni926B +ENCODING 37483 +BBX 14 16 0 -2 +BITMAP +1100 +1100 +2900 +251C +43D4 +B954 +1154 +1154 +FD54 +1154 +9554 +5954 +5154 +1E5C +E354 +4480 +ENDCHAR +STARTCHAR uni926C +ENCODING 37484 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +2904 +2504 +4104 +B9FC +1104 +1104 +FD04 +11FC +9504 +5904 +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni926D +ENCODING 37485 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +28FC +2484 +4284 +BC84 +10FC +1084 +FE84 +1084 +94FC +5884 +5000 +1E00 +F1FE +4000 +ENDCHAR +STARTCHAR uni926E +ENCODING 37486 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +2820 +25FC +4124 +B924 +1124 +11FC +FD24 +1124 +9524 +59FC +5124 +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni926F +ENCODING 37487 +BBX 15 16 0 -2 +BITMAP +1008 +1048 +2928 +2528 +4128 +B908 +1108 +1108 +FD08 +1108 +9548 +5994 +5114 +1C22 +E042 +4082 +ENDCHAR +STARTCHAR uni9270 +ENCODING 37488 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +2804 +2404 +43F4 +B804 +1004 +11E4 +FD24 +1124 +9524 +59E4 +5004 +1C04 +E014 +4008 +ENDCHAR +STARTCHAR uni9271 +ENCODING 37489 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FE +4100 +FD20 +1120 +1120 +FD20 +1120 +9528 +5544 +5144 +1E46 +327A +C5C2 +ENDCHAR +STARTCHAR uni9272 +ENCODING 37490 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +243C +4220 +BC20 +1020 +11FE +FE20 +1020 +9428 +5824 +5022 +1E20 +F020 +4020 +ENDCHAR +STARTCHAR uni9273 +ENCODING 37491 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +2890 +2490 +4090 +BB92 +1094 +1098 +FC90 +1090 +9490 +5992 +5292 +1C92 +E08E +4080 +ENDCHAR +STARTCHAR uni9274 +ENCODING 37492 +BBX 15 15 0 -1 +BITMAP +0440 +2440 +247C +2490 +2488 +2508 +0280 +0C60 +3018 +CFE6 +0100 +3FF8 +0920 +0540 +7FFC +ENDCHAR +STARTCHAR uni9275 +ENCODING 37493 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +25FC +4124 +B924 +1124 +1124 +FDFC +1124 +9420 +5828 +5024 +1DFE +E082 +4000 +ENDCHAR +STARTCHAR uni9276 +ENCODING 37494 +BBX 15 16 0 -2 +BITMAP +1002 +13E2 +2942 +254A +414A +B94A +114A +13EA +FD4A +114A +954A +594A +5142 +1E42 +E24A +4444 +ENDCHAR +STARTCHAR uni9277 +ENCODING 37495 +BBX 15 16 0 -2 +BITMAP +1048 +1048 +2848 +2448 +41FE +B848 +1048 +1048 +FC48 +11FE +9400 +5848 +5044 +1C84 +E082 +4102 +ENDCHAR +STARTCHAR uni9278 +ENCODING 37496 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +43FE +FC88 +1104 +1202 +FC88 +1088 +9450 +5450 +5020 +1C50 +3088 +C306 +ENDCHAR +STARTCHAR uni9279 +ENCODING 37497 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +287C +2484 +4148 +B830 +1020 +1048 +FD90 +103E +9442 +59A4 +5018 +1C10 +E060 +4180 +ENDCHAR +STARTCHAR uni927A +ENCODING 37498 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2888 +2488 +40F8 +B888 +1088 +10F8 +FC88 +1088 +948E +5BF8 +5008 +1C08 +E008 +4008 +ENDCHAR +STARTCHAR uni927B +ENCODING 37499 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2878 +2488 +4150 +B820 +1050 +1088 +FD06 +10F8 +9488 +5888 +5088 +1C88 +E0F8 +4088 +ENDCHAR +STARTCHAR uni927C +ENCODING 37500 +BBX 15 15 1 -1 +BITMAP +1084 +2844 +2448 +41FE +FC48 +1048 +1048 +FC48 +11FE +9448 +5448 +5048 +1C88 +3088 +C108 +ENDCHAR +STARTCHAR uni927D +ENCODING 37501 +BBX 15 15 1 -1 +BITMAP +1014 +2812 +2410 +41FE +FC10 +1010 +11D0 +FC90 +1090 +9490 +5490 +50E8 +1D8A +300A +C004 +ENDCHAR +STARTCHAR uni927E +ENCODING 37502 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2448 +409C +FDE2 +1020 +10A0 +FEFC +1120 +9420 +55FE +5020 +1C20 +3020 +C020 +ENDCHAR +STARTCHAR uni927F +ENCODING 37503 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2450 +4088 +FD04 +1202 +10F8 +FC00 +1000 +95FC +5504 +5104 +1D04 +3104 +C1FC +ENDCHAR +STARTCHAR uni9280 +ENCODING 37504 +BBX 15 15 1 -1 +BITMAP +1000 +29F8 +2508 +4108 +FDF8 +1108 +1108 +FFF8 +1144 +9544 +5528 +5330 +1D10 +31C8 +C306 +ENDCHAR +STARTCHAR uni9281 +ENCODING 37505 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2880 +24FE +4102 +BA02 +11F2 +1112 +FD12 +11F2 +9512 +5912 +51F2 +1C02 +E014 +4008 +ENDCHAR +STARTCHAR uni9282 +ENCODING 37506 +BBX 15 16 0 -2 +BITMAP +1082 +1092 +2892 +2492 +4092 +B892 +12DA +12B6 +FC92 +1092 +9492 +5892 +5092 +1D12 +E102 +4202 +ENDCHAR +STARTCHAR uni9283 +ENCODING 37507 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FE +4240 +FC50 +1048 +10B4 +FFD0 +1050 +9450 +5450 +5090 +1E92 +3112 +C20E +ENDCHAR +STARTCHAR uni9284 +ENCODING 37508 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +2840 +25FC +4104 +B904 +1174 +1154 +FD54 +1154 +9554 +5974 +5104 +1D04 +E114 +4108 +ENDCHAR +STARTCHAR uni9285 +ENCODING 37509 +BBX 15 15 1 -1 +BITMAP +1000 +29FE +2502 +4102 +FD7A +1102 +1102 +FF7A +114A +954A +554A +517A +1D02 +3102 +C10E +ENDCHAR +STARTCHAR uni9286 +ENCODING 37510 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2820 +2420 +4040 +B9FC +1104 +1104 +FD04 +11FC +9504 +5904 +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni9287 +ENCODING 37511 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +29FE +2420 +4020 +B8FC +1020 +1020 +FDFE +1070 +94A8 +58A8 +5124 +1E22 +E420 +4020 +ENDCHAR +STARTCHAR uni9288 +ENCODING 37512 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FC +4020 +FC20 +1020 +13FE +FC00 +1020 +9420 +55FC +5020 +1C20 +3020 +C3FE +ENDCHAR +STARTCHAR uni9289 +ENCODING 37513 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FC +4024 +FDFE +1024 +11FC +FC20 +11FC +9420 +5420 +53FE +1C20 +3020 +C020 +ENDCHAR +STARTCHAR uni928A +ENCODING 37514 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +5024 +4820 +83FE +7A20 +2224 +2224 +FA24 +23A8 +2A28 +B210 +6212 +3C2A +E446 +0882 +ENDCHAR +STARTCHAR uni928B +ENCODING 37515 +BBX 15 16 0 -2 +BITMAP +1080 +1088 +289C +2570 +4110 +BB10 +1510 +1110 +FDFE +1110 +9510 +5910 +5110 +1D10 +E17C +4100 +ENDCHAR +STARTCHAR uni928C +ENCODING 37516 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +25FE +4040 +B840 +10BC +1084 +FD88 +1288 +94FE +5888 +5088 +1C88 +E0A8 +4090 +ENDCHAR +STARTCHAR uni928D +ENCODING 37517 +BBX 15 15 1 -1 +BITMAP +1000 +29FE +2440 +4048 +FC88 +10B4 +11C2 +FC00 +1020 +9420 +55FC +5020 +1C20 +3020 +C3FE +ENDCHAR +STARTCHAR uni928E +ENCODING 37518 +BBX 15 15 0 -2 +BITMAP +7DF0 +1110 +1190 +1152 +1D12 +E20E +4500 +06C0 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni928F +ENCODING 37519 +BBX 15 16 0 -2 +BITMAP +1000 +11DC +2954 +2554 +4154 +B954 +1154 +13FE +FD54 +1154 +9554 +5954 +5154 +1ED4 +E224 +444C +ENDCHAR +STARTCHAR uni9290 +ENCODING 37520 +BBX 15 16 0 -2 +BITMAP +0004 +7F84 +0824 +1F24 +2124 +5224 +0C24 +3104 +C6CC +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni9291 +ENCODING 37521 +BBX 15 15 1 -1 +BITMAP +1020 +28A0 +24A0 +40FC +FD20 +1120 +1020 +FDFE +1050 +9450 +5450 +5090 +1C92 +3112 +C20E +ENDCHAR +STARTCHAR uni9292 +ENCODING 37522 +BBX 15 16 0 -2 +BITMAP +1000 +11DC +2888 +2488 +4088 +B888 +1088 +13DE +FC88 +1088 +9488 +5888 +5088 +1D08 +E108 +4208 +ENDCHAR +STARTCHAR uni9293 +ENCODING 37523 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2450 +4088 +FD04 +1202 +11FC +FC20 +1020 +9420 +54F8 +5020 +1C20 +3020 +C3FE +ENDCHAR +STARTCHAR uni9294 +ENCODING 37524 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2810 +2420 +4068 +B8A4 +1322 +1020 +FC00 +1020 +9420 +5BFE +5020 +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni9295 +ENCODING 37525 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4020 +FDFC +1024 +11FC +FD20 +11FE +9422 +5422 +5056 +1E50 +3088 +C306 +ENDCHAR +STARTCHAR uni9296 +ENCODING 37526 +BBX 15 15 1 -1 +BITMAP +1020 +2920 +2520 +41FC +FE20 +1220 +1020 +FBFE +10A8 +94A8 +5524 +5124 +1E22 +3020 +C020 +ENDCHAR +STARTCHAR uni9297 +ENCODING 37527 +BBX 15 15 1 -1 +BITMAP +100C +29F0 +2500 +4100 +FDFE +1100 +1100 +FD7C +1144 +9544 +5544 +5144 +1E44 +3044 +C07C +ENDCHAR +STARTCHAR uni9298 +ENCODING 37528 +BBX 15 15 1 -1 +BITMAP +1040 +2840 +247C +4084 +FD84 +1248 +1010 +FC20 +107E +94C2 +5742 +5042 +1C42 +3042 +C07E +ENDCHAR +STARTCHAR uni9299 +ENCODING 37529 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4050 +FC88 +1306 +10F8 +FC00 +13FE +9440 +54FC +5084 +1C04 +3004 +C038 +ENDCHAR +STARTCHAR uni929A +ENCODING 37530 +BBX 15 15 1 -1 +BITMAP +10A0 +28A0 +24A4 +42A8 +FDB0 +10A0 +10A0 +FCA0 +10B0 +95A8 +56A4 +50A0 +1D22 +3122 +C21E +ENDCHAR +STARTCHAR uni929B +ENCODING 37531 +BBX 15 15 1 -1 +BITMAP +101C +29E0 +2420 +4020 +FC20 +13FE +1020 +FC20 +1020 +95FC +5504 +5104 +1D04 +3104 +C1FC +ENDCHAR +STARTCHAR uni929C +ENCODING 37532 +BBX 15 15 1 -1 +BITMAP +2200 +451C +8480 +0840 +3F80 +423E +4208 +DFC8 +4208 +4248 +5248 +4A88 +4AC8 +4308 +5C18 +ENDCHAR +STARTCHAR uni929D +ENCODING 37533 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +2890 +2510 +41FE +BB10 +1510 +1138 +FD38 +1154 +9554 +5992 +5110 +1D10 +E110 +4110 +ENDCHAR +STARTCHAR uni929E +ENCODING 37534 +BBX 15 16 0 -2 +BITMAP +1000 +1FF8 +2008 +5FC8 +9048 +1FC8 +1048 +1FE8 +0110 +06C0 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni929F +ENCODING 37535 +BBX 15 15 1 -1 +BITMAP +1020 +2922 +2522 +41FE +FC00 +1020 +1020 +FDFE +1122 +9522 +5522 +5122 +1D2E +3020 +C020 +ENDCHAR +STARTCHAR uni92A0 +ENCODING 37536 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2844 +25F4 +4048 +B850 +13FE +1040 +FC80 +1184 +9698 +58E0 +5082 +1C82 +E07E +4000 +ENDCHAR +STARTCHAR uni92A1 +ENCODING 37537 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +27FE +4020 +B820 +11FC +1000 +FC00 +11FC +9504 +5904 +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni92A2 +ENCODING 37538 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +5000 +4800 +83FE +7800 +2020 +2022 +FBB2 +20B4 +28A8 +B128 +6124 +3A24 +E4A2 +0040 +ENDCHAR +STARTCHAR uni92A3 +ENCODING 37539 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +5100 +491E +87D2 +7A52 +2252 +2252 +FA52 +2492 +2A92 +B112 +6292 +3A5E +E452 +0800 +ENDCHAR +STARTCHAR uni92A4 +ENCODING 37540 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2924 +24A4 +40A8 +B820 +1020 +13FE +FC70 +10A8 +94A8 +5924 +5124 +1E22 +E020 +4020 +ENDCHAR +STARTCHAR uni92A5 +ENCODING 37541 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2820 +25FE +4040 +B840 +10A0 +10A2 +FDA4 +1298 +9490 +5888 +5088 +1CA4 +E0C2 +4080 +ENDCHAR +STARTCHAR uni92A6 +ENCODING 37542 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2902 +2522 +4122 +B922 +11FE +1122 +FD22 +1152 +954A +598A +5102 +1D02 +E1FE +4102 +ENDCHAR +STARTCHAR uni92A7 +ENCODING 37543 +BBX 15 15 1 -1 +BITMAP +1020 +2924 +2524 +40A8 +FCA8 +1020 +1020 +FDFE +1050 +9450 +5450 +5090 +1C92 +3112 +C60E +ENDCHAR +STARTCHAR uni92A8 +ENCODING 37544 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2820 +27FE +4202 +BC44 +1040 +13FE +FC88 +1088 +9508 +58D0 +5020 +1C50 +E088 +4304 +ENDCHAR +STARTCHAR uni92A9 +ENCODING 37545 +BBX 15 16 0 -2 +BITMAP +1008 +103C +29E0 +2420 +4020 +B9FC +1020 +1020 +FC20 +13FE +9420 +5840 +5088 +1D04 +E3FE +4102 +ENDCHAR +STARTCHAR uni92AA +ENCODING 37546 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +29FE +2440 +4240 +BCFC +1084 +1184 +FEFC +1084 +9484 +58FC +5084 +1E84 +F094 +4088 +ENDCHAR +STARTCHAR uni92AB +ENCODING 37547 +BBX 15 15 1 -1 +BITMAP +1040 +287C +2444 +4088 +FDFE +1322 +1122 +FD22 +11FE +9500 +5500 +5100 +1D02 +3102 +C0FE +ENDCHAR +STARTCHAR uni92AC +ENCODING 37548 +BBX 15 16 0 -2 +BITMAP +1040 +1044 +29F4 +2448 +4050 +BBFE +1040 +1080 +FDFE +1240 +9480 +58FC +5004 +1C04 +E028 +4010 +ENDCHAR +STARTCHAR uni92AD +ENCODING 37549 +BBX 15 15 1 -1 +BITMAP +1050 +2848 +27FC +4040 +F840 +13FC +1040 +F840 +17FE +9424 +5428 +5030 +1C52 +318A +C604 +ENDCHAR +STARTCHAR uni92AE +ENCODING 37550 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0440 +1450 +2448 +4444 +0100 +06C0 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni92AF +ENCODING 37551 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2848 +2488 +41F0 +B820 +1040 +1088 +FDFC +1024 +9420 +58A8 +5124 +1E22 +E0A0 +4040 +ENDCHAR +STARTCHAR uni92B0 +ENCODING 37552 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +29FE +2488 +4088 +B800 +1104 +1104 +FC88 +1088 +9450 +5820 +5050 +1C88 +E104 +4202 +ENDCHAR +STARTCHAR uni92B1 +ENCODING 37553 +BBX 14 16 0 -2 +BITMAP +1000 +10F8 +2888 +2488 +40F8 +B820 +1020 +11FC +FD24 +1124 +9524 +5924 +5134 +1D28 +E020 +4020 +ENDCHAR +STARTCHAR uni92B2 +ENCODING 37554 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2504 +41FC +FD04 +1104 +11FC +FC00 +11FC +9420 +5420 +53FE +1C20 +3020 +C020 +ENDCHAR +STARTCHAR uni92B3 +ENCODING 37555 +BBX 15 16 0 -2 +BITMAP +1010 +1090 +2888 +2508 +4204 +BDFA +1108 +1108 +FD08 +11F8 +9490 +5890 +5090 +1D12 +E212 +440E +ENDCHAR +STARTCHAR uni92B4 +ENCODING 37556 +BBX 15 16 0 -2 +BITMAP +080C +08F0 +7E80 +0880 +0EFE +7888 +0888 +2908 +16C8 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni92B5 +ENCODING 37557 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +28F8 +2488 +40F8 +B888 +10F8 +108A +FC8C +13F8 +9418 +5828 +5048 +1C88 +E328 +4010 +ENDCHAR +STARTCHAR uni92B6 +ENCODING 37558 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +2824 +2420 +43FE +B820 +1120 +10B2 +FCB4 +1068 +94A8 +5924 +5222 +1C20 +E0A0 +4040 +ENDCHAR +STARTCHAR uni92B7 +ENCODING 37559 +BBX 15 15 1 -1 +BITMAP +1020 +28A8 +2524 +4122 +FC20 +11FC +1104 +FD04 +11FC +9504 +5504 +51FC +1D04 +3104 +C11C +ENDCHAR +STARTCHAR uni92B8 +ENCODING 37560 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2920 +2528 +4128 +B9E8 +1128 +1128 +FD28 +11E8 +9528 +592A +513A +1FEA +E026 +4020 +ENDCHAR +STARTCHAR uni92B9 +ENCODING 37561 +BBX 15 15 1 -1 +BITMAP +101C +29E0 +2420 +43FE +F8A8 +1124 +1222 +F800 +11F8 +9448 +544E +5042 +1C82 +3102 +C21C +ENDCHAR +STARTCHAR uni92BA +ENCODING 37562 +BBX 15 15 0 -1 +BITMAP +2420 +2420 +3DFC +0420 +FC20 +24F8 +4500 +06C0 +1830 +EFEE +0100 +3FF8 +0920 +0540 +FFFE +ENDCHAR +STARTCHAR uni92BB +ENCODING 37563 +BBX 15 16 0 -2 +BITMAP +1108 +1088 +2890 +25FC +4024 +B824 +11FC +1120 +FD20 +11FE +9462 +58A2 +512A +1E24 +E420 +4020 +ENDCHAR +STARTCHAR uni92BC +ENCODING 37564 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +28A8 +24A8 +40A8 +B974 +1222 +1020 +FC20 +11FC +9420 +5820 +5020 +1C20 +E3FE +4000 +ENDCHAR +STARTCHAR uni92BD +ENCODING 37565 +BBX 15 16 0 -2 +BITMAP +101C +13E0 +2A20 +2620 +43FE +BA20 +1290 +130A +FE06 +11FA +9508 +5908 +5108 +1D08 +E1F8 +4108 +ENDCHAR +STARTCHAR uni92BE +ENCODING 37566 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +5020 +4820 +83FE +7800 +2020 +2022 +FBB2 +20B4 +28A8 +B128 +6124 +3A24 +E4A2 +0040 +ENDCHAR +STARTCHAR uni92BF +ENCODING 37567 +BBX 14 15 1 -1 +BITMAP +1000 +29FC +2408 +4050 +FDFC +1124 +1124 +FDFC +1124 +9524 +55FC +5124 +1D24 +3124 +C12C +ENDCHAR +STARTCHAR uni92C0 +ENCODING 37568 +BBX 15 15 1 -1 +BITMAP +1000 +29FE +2400 +4000 +FCFC +1084 +1084 +FC84 +10FC +9400 +5484 +5044 +1C48 +3010 +C1FE +ENDCHAR +STARTCHAR uni92C1 +ENCODING 37569 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2884 +2484 +4284 +BC84 +10FC +1000 +FE00 +11FE +9502 +5902 +5102 +1F02 +F1FE +4102 +ENDCHAR +STARTCHAR uni92C2 +ENCODING 37570 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +24FE +4100 +FE00 +10FC +10A4 +FC94 +13FE +9504 +5544 +5124 +1DFE +3008 +C038 +ENDCHAR +STARTCHAR uni92C3 +ENCODING 37571 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +29FC +2504 +4104 +B9FC +1104 +1104 +FDFC +1120 +9522 +5914 +5108 +1D44 +E182 +4100 +ENDCHAR +STARTCHAR uni92C4 +ENCODING 37572 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2820 +24A4 +4128 +B850 +1088 +1104 +FC00 +10FC +9484 +5888 +5050 +1C20 +E0D8 +4706 +ENDCHAR +STARTCHAR uni92C5 +ENCODING 37573 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +29FC +2400 +4088 +B850 +13FE +1020 +FC20 +1020 +95FC +5820 +5020 +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni92C6 +ENCODING 37574 +BBX 15 15 1 -1 +BITMAP +2100 +21FC +FA04 +24E4 +2004 +39F4 +E104 +06C8 +1830 +EFCE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni92C7 +ENCODING 37575 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +2504 +41FC +B904 +1104 +11FC +FD04 +1104 +95FC +5800 +5088 +1C84 +E102 +4202 +ENDCHAR +STARTCHAR uni92C8 +ENCODING 37576 +BBX 15 16 0 -2 +BITMAP +101C +09E0 +4020 +2420 +0BFE +7050 +1088 +1104 +06C0 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni92C9 +ENCODING 37577 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2BFE +2420 +4020 +B9FC +1124 +1124 +FDFC +1020 +9470 +58A8 +5124 +1E22 +E020 +4020 +ENDCHAR +STARTCHAR uni92CA +ENCODING 37578 +BBX 15 16 0 -2 +BITMAP +1088 +1084 +2902 +2622 +4020 +B850 +1088 +1104 +FE02 +10FC +9484 +5884 +5084 +1C84 +E0FC +4084 +ENDCHAR +STARTCHAR uni92CB +ENCODING 37579 +BBX 15 15 1 -1 +BITMAP +1002 +2B8C +24B8 +4108 +F908 +13A8 +10AE +FEA8 +12A8 +96A8 +53A8 +5128 +1D3E +3280 +C47E +ENDCHAR +STARTCHAR uni92CC +ENCODING 37580 +BBX 15 15 1 -1 +BITMAP +1002 +2B8C +24B8 +4108 +F908 +1388 +10BE +FE88 +1288 +9688 +5388 +5108 +1D3E +3280 +C47E +ENDCHAR +STARTCHAR uni92CD +ENCODING 37581 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +53FE +4820 +8020 +7BFE +2202 +2404 +F9F8 +2010 +2820 +B3FE +6020 +3820 +E0A0 +0040 +ENDCHAR +STARTCHAR uni92CE +ENCODING 37582 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FE +4102 +FD02 +10FC +1000 +FC00 +11FE +9450 +5450 +5090 +1C92 +3112 +C20E +ENDCHAR +STARTCHAR uni92CF +ENCODING 37583 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +43FE +FC20 +1124 +1124 +FD24 +12AA +94AA +5450 +5050 +1C88 +3104 +C202 +ENDCHAR +STARTCHAR uni92D0 +ENCODING 37584 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FE +4102 +FD42 +1040 +11FE +FC40 +1050 +9450 +5490 +50A4 +1D24 +325A +C0E2 +ENDCHAR +STARTCHAR uni92D1 +ENCODING 37585 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +2888 +2504 +43FE +B802 +1088 +1144 +FE42 +10F8 +9588 +5A50 +5020 +1C50 +E188 +4606 +ENDCHAR +STARTCHAR uni92D2 +ENCODING 37586 +BBX 15 15 1 -1 +BITMAP +1040 +28FC +2584 +4248 +FC30 +10C8 +1326 +FC20 +11FC +9420 +55FC +5020 +1DFE +3020 +C020 +ENDCHAR +STARTCHAR uni92D3 +ENCODING 37587 +BBX 15 15 1 -1 +BITMAP +2062 +5382 +4892 +8092 +FBF2 +2092 +2092 +F9D2 +21B2 +AAB2 +AA92 +6492 +2882 +3082 +C086 +ENDCHAR +STARTCHAR uni92D4 +ENCODING 37588 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +28F8 +2508 +4210 +B9FC +1124 +1124 +FD24 +11FC +9450 +5850 +5090 +1C92 +E112 +420E +ENDCHAR +STARTCHAR uni92D5 +ENCODING 37589 +BBX 15 15 0 -1 +BITMAP +2020 +2020 +5020 +4BFE +8020 +7820 +2020 +21FC +F840 +2020 +28A4 +B282 +628A +3A8A +E478 +ENDCHAR +STARTCHAR uni92D6 +ENCODING 37590 +BBX 15 16 0 -2 +BITMAP +1004 +101E +29E0 +2422 +4112 +B894 +1080 +1020 +FDFE +1044 +9484 +59C8 +5030 +1C28 +E0C4 +4302 +ENDCHAR +STARTCHAR uni92D7 +ENCODING 37591 +BBX 14 15 1 -1 +BITMAP +1000 +29FC +2504 +4104 +FDFC +1000 +11FC +FD04 +11FC +9504 +5504 +51FC +1D04 +3104 +C11C +ENDCHAR +STARTCHAR uni92D8 +ENCODING 37592 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +2504 +41FC +B800 +1000 +11FC +FC20 +1020 +97FE +5820 +5050 +1C88 +E104 +4202 +ENDCHAR +STARTCHAR uni92D9 +ENCODING 37593 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2440 +4040 +FDF8 +1088 +1088 +FC88 +13FE +9400 +54FC +5084 +1C84 +3084 +C0FC +ENDCHAR +STARTCHAR uni92DA +ENCODING 37594 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +24FE +6488 +A550 +2420 +2450 +2188 +06C4 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni92DB +ENCODING 37595 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +51FC +4924 +8124 +79FC +2020 +2020 +FBFE +2222 +2A22 +B3FE +6222 +3820 +E020 +0020 +ENDCHAR +STARTCHAR uni92DC +ENCODING 37596 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +2504 +4104 +B904 +11FC +1020 +FC20 +1120 +953E +5920 +5120 +1EA0 +E47E +4800 +ENDCHAR +STARTCHAR uni92DD +ENCODING 37597 +BBX 15 16 0 -2 +BITMAP +1004 +101E +29E0 +2422 +4112 +B894 +1080 +1008 +FDFE +1008 +9488 +5848 +5048 +1C08 +E028 +4010 +ENDCHAR +STARTCHAR uni92DE +ENCODING 37598 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2800 +2492 +4124 +BA48 +1124 +1092 +FC00 +11FE +9420 +5820 +5020 +1C20 +E3FE +4000 +ENDCHAR +STARTCHAR uni92DF +ENCODING 37599 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2804 +24FC +4004 +B9FC +1000 +13FE +FE02 +11F8 +9488 +5888 +5050 +1C20 +E0D8 +4306 +ENDCHAR +STARTCHAR uni92E0 +ENCODING 37600 +BBX 15 15 1 -1 +BITMAP +1000 +29FE +2500 +417C +FD00 +1100 +11FE +FD50 +1152 +9552 +5154 +5248 +1E48 +3464 +C182 +ENDCHAR +STARTCHAR uni92E1 +ENCODING 37601 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2850 +2488 +4144 +BA22 +10F8 +1008 +FC10 +1020 +95FC +5904 +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni92E2 +ENCODING 37602 +BBX 15 16 0 -2 +BITMAP +1008 +103C +29C0 +2404 +4144 +B8A8 +1000 +11F8 +FC10 +1020 +97FE +5820 +5020 +1C20 +E0A0 +4040 +ENDCHAR +STARTCHAR uni92E3 +ENCODING 37603 +BBX 15 16 0 -2 +BITMAP +2000 +27DE +5092 +4C92 +8494 +7C94 +27D8 +2094 +F992 +2192 +2A92 +B29A +6494 +3890 +E290 +0110 +ENDCHAR +STARTCHAR uni92E4 +ENCODING 37604 +BBX 15 15 1 -1 +BITMAP +1010 +13D0 +2A50 +427E +BA52 +13D2 +1252 +7E52 +1252 +97D2 +5A52 +5252 +1AE2 +2722 +C04C +ENDCHAR +STARTCHAR uni92E5 +ENCODING 37605 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2504 +4104 +FD04 +11FC +1000 +FC1C +11E0 +9420 +5420 +51FC +1C20 +3020 +C3FE +ENDCHAR +STARTCHAR uni92E6 +ENCODING 37606 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +2504 +41FC +B900 +1100 +11FE +FD02 +117A +954A +594A +527A +1E02 +E414 +4008 +ENDCHAR +STARTCHAR uni92E7 +ENCODING 37607 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2504 +41FC +FD04 +1104 +11FC +FD04 +1104 +95FC +5450 +5050 +1C52 +3092 +C30E +ENDCHAR +STARTCHAR uni92E8 +ENCODING 37608 +BBX 15 16 0 -2 +BITMAP +2010 +20D8 +5394 +4894 +8090 +7BFE +2090 +2094 +F894 +20D8 +2B98 +B090 +60AA +38CA +E286 +0102 +ENDCHAR +STARTCHAR uni92E9 +ENCODING 37609 +BBX 15 15 1 -1 +BITMAP +1088 +2888 +27FE +4088 +FC88 +1020 +1020 +FDFE +1080 +9480 +5480 +5080 +1C80 +3080 +C07C +ENDCHAR +STARTCHAR uni92EA +ENCODING 37610 +BBX 15 15 1 -1 +BITMAP +1028 +2824 +25FE +4020 +FC20 +11FC +1124 +FF24 +11FC +9524 +5524 +51FC +1724 +1924 +E12C +ENDCHAR +STARTCHAR uni92EB +ENCODING 37611 +BBX 15 16 0 -2 +BITMAP +0304 +3C04 +0424 +7FA4 +0E24 +1524 +6484 +050C +06C0 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni92EC +ENCODING 37612 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +FD00 +11FC +1D04 +F168 +1210 +3128 +06C4 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni92ED +ENCODING 37613 +BBX 15 15 1 -1 +BITMAP +1108 +2888 +2490 +43FC +FD04 +1104 +1104 +FDFC +1050 +9450 +5450 +5090 +1C92 +3112 +C20E +ENDCHAR +STARTCHAR uni92EE +ENCODING 37614 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +5024 +4820 +83FE +7A20 +2224 +2224 +FBA4 +22A8 +2AA8 +B290 +6292 +3DAA +E446 +0882 +ENDCHAR +STARTCHAR uni92EF +ENCODING 37615 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +2920 +25FC +4120 +BA20 +1020 +13FE +FC00 +1000 +95FC +5904 +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni92F0 +ENCODING 37616 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2924 +2524 +41FC +B924 +1124 +11FC +FC20 +1020 +95FC +5820 +5020 +1C20 +E3FE +4000 +ENDCHAR +STARTCHAR uni92F1 +ENCODING 37617 +BBX 15 16 0 -2 +BITMAP +2010 +2014 +5012 +4810 +83FE +7810 +2090 +2050 +F848 +2008 +2888 +B2A8 +629A +3AAA +E466 +0002 +ENDCHAR +STARTCHAR uni92F2 +ENCODING 37618 +BBX 15 15 1 -1 +BITMAP +1018 +28E0 +2480 +4080 +FCFC +1088 +1088 +FE88 +1088 +95FE +5400 +5000 +1C88 +3104 +C202 +ENDCHAR +STARTCHAR uni92F3 +ENCODING 37619 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FE +4020 +FCFC +1020 +11FE +FC44 +1044 +95FE +5484 +50A4 +1D14 +3204 +C01C +ENDCHAR +STARTCHAR uni92F4 +ENCODING 37620 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2BFE +2420 +4020 +B9FC +1104 +1104 +FD04 +11FC +9450 +5850 +5092 +1C92 +E112 +420E +ENDCHAR +STARTCHAR uni92F5 +ENCODING 37621 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +2820 +2420 +43FE +B8A8 +1124 +1222 +FC00 +10F8 +9488 +5888 +5088 +1C8A +E10A +4206 +ENDCHAR +STARTCHAR uni92F6 +ENCODING 37622 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +29FE +2420 +4248 +BC84 +11FE +1002 +FEA8 +10A8 +94A8 +58A8 +50A8 +1EAA +F12A +4206 +ENDCHAR +STARTCHAR uni92F7 +ENCODING 37623 +BBX 15 15 1 -1 +BITMAP +1000 +2FFC +2280 +42FC +FB84 +12A4 +12A4 +FAA8 +13A8 +9690 +5A90 +52A8 +1BA8 +36C4 +C082 +ENDCHAR +STARTCHAR uni92F8 +ENCODING 37624 +BBX 15 15 1 -1 +BITMAP +1000 +2BFC +2604 +4204 +FFFC +1220 +13FE +FE20 +1220 +93FC +5504 +5504 +1D04 +3104 +C1FC +ENDCHAR +STARTCHAR uni92F9 +ENCODING 37625 +BBX 15 15 1 -1 +BITMAP +1000 +28FC +2480 +40F8 +FC80 +10F8 +1080 +FC80 +13FE +9492 +5494 +5088 +1C88 +30E4 +C382 +ENDCHAR +STARTCHAR uni92FA +ENCODING 37626 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4202 +FE02 +1100 +11DE +FD52 +1252 +9552 +5496 +5090 +1C92 +3112 +C20E +ENDCHAR +STARTCHAR uni92FB +ENCODING 37627 +BBX 15 14 1 -1 +BITMAP +7EFC +4844 +7E44 +4228 +7E10 +4928 +7EC6 +1830 +EFCE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni92FC +ENCODING 37628 +BBX 15 15 1 -1 +BITMAP +1000 +2BFE +2602 +428A +FE4A +1212 +12FA +FE22 +1222 +96AA +56AA +52AA +1EFA +3202 +C20E +ENDCHAR +STARTCHAR uni92FD +ENCODING 37629 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +283E +2420 +41FC +B904 +11FC +1104 +FDFC +1124 +9420 +5BFE +5020 +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni92FE +ENCODING 37630 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +28FE +2482 +4142 +B87A +10A2 +1022 +FDFE +1022 +94AA +58AA +50FA +1C02 +E014 +4008 +ENDCHAR +STARTCHAR uni92FF +ENCODING 37631 +BBX 15 15 1 -1 +BITMAP +1020 +28A8 +24A8 +4124 +FE22 +13FE +1202 +FE02 +12FA +968A +528A +52FA +1E02 +3202 +C20E +ENDCHAR +STARTCHAR uni9300 +ENCODING 37632 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2850 +2488 +4104 +BAFA +1000 +11FC +FD54 +1154 +95FC +5954 +5154 +1D54 +E104 +410C +ENDCHAR +STARTCHAR uni9301 +ENCODING 37633 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2924 +2524 +41FC +B924 +1124 +11FC +FC20 +11FE +9470 +58A8 +5124 +1E22 +E020 +4020 +ENDCHAR +STARTCHAR uni9302 +ENCODING 37634 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FC +4020 +FFFE +1048 +1088 +FD0E +1040 +947C +5584 +5048 +1C30 +30C8 +C306 +ENDCHAR +STARTCHAR uni9303 +ENCODING 37635 +BBX 15 16 0 -2 +BITMAP +1020 +09FE +4122 +2520 +09FC +1104 +7268 +1410 +1128 +06C4 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni9304 +ENCODING 37636 +BBX 15 15 1 -1 +BITMAP +1080 +28F8 +2488 +4108 +FDF0 +1010 +13FE +FC20 +1124 +94A8 +5470 +5068 +1CA4 +3322 +C060 +ENDCHAR +STARTCHAR uni9305 +ENCODING 37637 +BBX 15 15 0 -1 +BITMAP +0640 +387C +0894 +7E24 +1C44 +2A94 +4908 +06C0 +1830 +EFEE +0100 +3FF8 +0920 +0540 +FFFE +ENDCHAR +STARTCHAR uni9306 +ENCODING 37638 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4020 +FDFC +1020 +13FE +FC00 +11FC +9524 +5524 +51FC +1D04 +3104 +C10C +ENDCHAR +STARTCHAR uni9307 +ENCODING 37639 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +29FC +2400 +4108 +B888 +1090 +13FE +FC00 +1000 +95FC +5904 +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni9308 +ENCODING 37640 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +28A8 +2420 +41FC +B840 +13FE +1088 +FD04 +12FA +9488 +5888 +50A8 +1C92 +E082 +407E +ENDCHAR +STARTCHAR uni9309 +ENCODING 37641 +BBX 15 16 0 -2 +BITMAP +101C +13E0 +2A20 +27FE +4220 +BA92 +130A +1206 +FDFC +1104 +9504 +59FC +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni930A +ENCODING 37642 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +29FE +2400 +4088 +B888 +1154 +1222 +FC00 +1020 +95FE +5820 +5020 +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni930B +ENCODING 37643 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +5252 +4A52 +8252 +7BDE +2252 +2252 +FA52 +23DE +2A52 +B252 +6252 +3A52 +E552 +08A6 +ENDCHAR +STARTCHAR uni930C +ENCODING 37644 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +2924 +2524 +41FC +B800 +11FE +1100 +FD7C +1110 +9510 +59FE +5110 +1E10 +E210 +4410 +ENDCHAR +STARTCHAR uni930D +ENCODING 37645 +BBX 15 15 1 -1 +BITMAP +1020 +2840 +25FC +4124 +FD24 +11FC +1124 +FD24 +11FC +9448 +5488 +53FE +1C08 +3008 +C008 +ENDCHAR +STARTCHAR uni930E +ENCODING 37646 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +287C +2484 +4108 +BA00 +1020 +11CE +FD02 +1102 +95CE +5902 +5102 +1D02 +E1FE +4102 +ENDCHAR +STARTCHAR uni930F +ENCODING 37647 +BBX 15 15 1 -1 +BITMAP +1000 +2BFC +2490 +4090 +FC90 +139C +1204 +FE04 +1204 +979C +5490 +5090 +1C90 +3090 +C7FE +ENDCHAR +STARTCHAR uni9310 +ENCODING 37648 +BBX 15 15 1 -1 +BITMAP +1048 +2848 +2490 +40FE +FD90 +1290 +10FC +FE90 +1090 +9490 +54FC +5090 +1690 +1890 +E0FE +ENDCHAR +STARTCHAR uni9311 +ENCODING 37649 +BBX 15 15 1 -1 +BITMAP +100C +29F0 +2500 +41FC +FD04 +1104 +11FC +FD28 +1124 +95FE +5520 +5220 +1E50 +3088 +C306 +ENDCHAR +STARTCHAR uni9312 +ENCODING 37650 +BBX 15 16 0 -2 +BITMAP +2000 +277E +5504 +4D04 +8574 +7554 +2654 +2554 +F554 +2554 +A574 +7554 +2604 +3404 +C414 +0408 +ENDCHAR +STARTCHAR uni9313 +ENCODING 37651 +BBX 15 16 0 -2 +BITMAP +1088 +1048 +2850 +25FC +4020 +B820 +11FC +1020 +FC20 +13FE +9450 +5850 +5090 +1C92 +E112 +420E +ENDCHAR +STARTCHAR uni9314 +ENCODING 37652 +BBX 15 16 0 -2 +BITMAP +1020 +1022 +2BB4 +24A8 +40A8 +B924 +12A2 +1040 +FDFC +1104 +9504 +59FC +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni9315 +ENCODING 37653 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2504 +41FC +FD04 +1104 +11FC +FC00 +1110 +9512 +55DC +5110 +1D12 +31D2 +C60E +ENDCHAR +STARTCHAR uni9316 +ENCODING 37654 +BBX 15 16 0 -2 +BITMAP +0800 +0E7C +0804 +7F44 +0828 +2A10 +4928 +1944 +06C0 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni9317 +ENCODING 37655 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +2820 +2420 +43FE +B8A8 +1124 +1242 +FC40 +13FE +9488 +5908 +50D0 +1C30 +E048 +4184 +ENDCHAR +STARTCHAR uni9318 +ENCODING 37656 +BBX 15 15 1 -1 +BITMAP +100C +28F0 +2420 +4220 +FDFE +1124 +1124 +FBFE +1124 +9524 +5524 +53FE +1C20 +3020 +C3FE +ENDCHAR +STARTCHAR uni9319 +ENCODING 37657 +BBX 15 15 1 -1 +BITMAP +1122 +2922 +2644 +4244 +FD22 +1122 +1000 +FDFC +1124 +9524 +55FC +5124 +1D24 +3124 +C1FC +ENDCHAR +STARTCHAR uni931A +ENCODING 37658 +BBX 15 15 1 -1 +BITMAP +1018 +29E4 +2542 +4222 +FDFC +1024 +1024 +FDFE +1024 +9424 +55FC +5020 +1C20 +3020 +C0E0 +ENDCHAR +STARTCHAR uni931B +ENCODING 37659 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2BFE +2450 +40A8 +B924 +12FA +1020 +FCA8 +1088 +97FE +5888 +5088 +1C88 +E108 +4208 +ENDCHAR +STARTCHAR uni931C +ENCODING 37660 +BBX 15 15 0 -1 +BITMAP +2020 +2020 +5050 +4888 +8144 +7A22 +21F8 +2008 +F850 +2020 +28A4 +B282 +628A +3A8A +E478 +ENDCHAR +STARTCHAR uni931D +ENCODING 37661 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4202 +FE02 +11FC +1000 +FC00 +13FE +9420 +5420 +5124 +1E22 +3022 +C0E0 +ENDCHAR +STARTCHAR uni931E +ENCODING 37662 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FC +4000 +FCF8 +1088 +10F8 +FC00 +10F8 +9410 +5420 +53FE +1C20 +3020 +C0E0 +ENDCHAR +STARTCHAR uni931F +ENCODING 37663 +BBX 15 15 1 -1 +BITMAP +1020 +2922 +2522 +4224 +FE50 +1050 +1088 +FF26 +1020 +9522 +5522 +5254 +1C50 +3088 +C306 +ENDCHAR +STARTCHAR uni9320 +ENCODING 37664 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4202 +FE02 +11FC +1020 +FE20 +1120 +953C +5520 +5120 +1DA0 +3260 +C41E +ENDCHAR +STARTCHAR uni9321 +ENCODING 37665 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FC +4050 +FC88 +1104 +1000 +FFFE +1004 +95E4 +5524 +5124 +1DE4 +3004 +C01C +ENDCHAR +STARTCHAR uni9322 +ENCODING 37666 +BBX 15 15 1 -1 +BITMAP +1090 +2888 +247C +43C8 +FC32 +10CA +1304 +FC90 +1088 +94FC +5788 +5050 +1C22 +30D2 +C70C +ENDCHAR +STARTCHAR uni9323 +ENCODING 37667 +BBX 15 15 1 -1 +BITMAP +2000 +57BC +4884 +82B4 +F908 +2294 +2420 +F800 +27BC +A884 +A8A4 +6318 +2108 +3294 +CC62 +ENDCHAR +STARTCHAR uni9324 +ENCODING 37668 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +2BFE +2488 +4288 +BCF8 +1088 +1088 +FEF8 +1088 +9488 +5BFE +5000 +1E88 +F104 +4202 +ENDCHAR +STARTCHAR uni9325 +ENCODING 37669 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4048 +FC9C +11E2 +1000 +FDFC +1104 +95FC +5504 +51FC +1D04 +3104 +C10C +ENDCHAR +STARTCHAR uni9326 +ENCODING 37670 +BBX 15 15 1 -1 +BITMAP +1010 +2820 +24FC +4084 +FCFC +1084 +10FC +FE20 +11FE +9522 +5522 +5122 +1D2E +3020 +C020 +ENDCHAR +STARTCHAR uni9327 +ENCODING 37671 +BBX 14 15 1 -1 +BITMAP +1040 +2840 +27FC +4204 +FE04 +11F8 +1108 +FD08 +11F8 +9500 +55FC +5104 +1D04 +3104 +C1FC +ENDCHAR +STARTCHAR uni9328 +ENCODING 37672 +BBX 15 15 1 -1 +BITMAP +1088 +2888 +27FE +4088 +FC88 +1000 +11FC +FF24 +1124 +9524 +55FC +5124 +1D24 +3124 +C1FC +ENDCHAR +STARTCHAR uni9329 +ENCODING 37673 +BBX 14 15 1 -1 +BITMAP +1000 +29F8 +2508 +41F8 +FD08 +1108 +11F8 +FC00 +13FC +9204 +5604 +53FC +1E04 +3204 +C3FC +ENDCHAR +STARTCHAR uni932A +ENCODING 37674 +BBX 15 16 0 -2 +BITMAP +1050 +1050 +2850 +25FC +4154 +B954 +1154 +11FC +FD54 +1154 +9554 +5BFE +5000 +1C50 +E088 +4104 +ENDCHAR +STARTCHAR uni932B +ENCODING 37675 +BBX 15 15 1 -1 +BITMAP +1000 +28FC +2484 +40FC +FC84 +1084 +10FC +FE40 +10FE +952A +544A +5192 +1C22 +30C2 +C00C +ENDCHAR +STARTCHAR uni932C +ENCODING 37676 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4020 +FDFC +1124 +11FC +FD24 +1124 +95FC +54A8 +50A8 +1D24 +3222 +C020 +ENDCHAR +STARTCHAR uni932D +ENCODING 37677 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +2924 +2524 +4174 +B924 +11FC +1104 +FD74 +1154 +9554 +5974 +5104 +1E04 +E214 +4408 +ENDCHAR +STARTCHAR uni932E +ENCODING 37678 +BBX 15 15 1 -1 +BITMAP +1000 +2BFE +2602 +4222 +FE22 +12FA +1222 +FE22 +12FA +968A +568A +52FA +1E02 +3202 +C3FE +ENDCHAR +STARTCHAR uni932F +ENCODING 37679 +BBX 15 15 1 -1 +BITMAP +1048 +2848 +25FE +4048 +FC48 +1048 +11FE +FE00 +10FC +9484 +5484 +50FC +1C84 +3084 +C0FC +ENDCHAR +STARTCHAR uni9330 +ENCODING 37680 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2820 +25FE +4020 +B870 +10A8 +10A8 +FD24 +1222 +9420 +5800 +5154 +1D2A +E22A +4000 +ENDCHAR +STARTCHAR uni9331 +ENCODING 37681 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0C60 +3018 +DFF6 +0100 +3FF8 +1110 +0920 +7FFC +0000 +7EFE +0810 +3E7C +0810 +7EFE +ENDCHAR +STARTCHAR uni9332 +ENCODING 37682 +BBX 15 15 1 -1 +BITMAP +1000 +29F8 +2408 +40F8 +FC08 +13FE +1020 +FD24 +10A8 +9430 +5470 +50A8 +1D24 +E222 +00E0 +ENDCHAR +STARTCHAR uni9333 +ENCODING 37683 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2808 +2410 +4020 +BBFE +1020 +10A0 +FC40 +11FC +9554 +5954 +5154 +1D54 +E3FE +4000 +ENDCHAR +STARTCHAR uni9334 +ENCODING 37684 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +29FC +2420 +4020 +BBFE +1088 +1104 +FE22 +1020 +95FC +5820 +5020 +1C20 +E3FE +4000 +ENDCHAR +STARTCHAR uni9335 +ENCODING 37685 +BBX 15 15 1 -1 +BITMAP +1088 +2888 +27FE +4088 +FC88 +1050 +1050 +FC92 +109C +9590 +5490 +5090 +1C92 +3092 +C08E +ENDCHAR +STARTCHAR uni9336 +ENCODING 37686 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +53FE +4820 +8020 +79FC +2020 +2020 +FBFE +2040 +28A4 +B1A8 +6290 +3C88 +E0C6 +0080 +ENDCHAR +STARTCHAR uni9337 +ENCODING 37687 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +2088 +57E8 +8888 +73E8 +22A8 +23E8 +FAA8 +23E8 +2888 +B7E8 +608A +388A +E08A +0086 +ENDCHAR +STARTCHAR uni9338 +ENCODING 37688 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +5020 +4BFE +8020 +7924 +2124 +2124 +FAAA +2070 +28A8 +B0A8 +6124 +3A22 +E420 +0020 +ENDCHAR +STARTCHAR uni9339 +ENCODING 37689 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +293C +2520 +4120 +BBFE +1000 +11FC +FD04 +11FC +9504 +59FC +5104 +1D04 +E114 +4108 +ENDCHAR +STARTCHAR uni933A +ENCODING 37690 +BBX 15 15 1 -1 +BITMAP +1088 +2888 +27FE +4088 +FCA0 +1020 +13FE +FC40 +1040 +947C +5444 +5084 +1C84 +3104 +C238 +ENDCHAR +STARTCHAR uni933B +ENCODING 37691 +BBX 15 15 1 -1 +BITMAP +1014 +29D4 +2412 +4210 +FFFE +1050 +1050 +FD50 +1170 +9550 +5550 +5148 +1D5A +316A +C384 +ENDCHAR +STARTCHAR uni933C +ENCODING 37692 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +53FE +4850 +8088 +7904 +22FA +2000 +F800 +23FE +2820 +B124 +6122 +3A22 +E0A0 +0040 +ENDCHAR +STARTCHAR uni933D +ENCODING 37693 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2820 +24A4 +4128 +B850 +1088 +1144 +FC40 +10FC +9584 +5A88 +5050 +1C20 +E0D8 +4706 +ENDCHAR +STARTCHAR uni933E +ENCODING 37694 +BBX 15 16 0 -2 +BITMAP +1004 +FF78 +2840 +7F7E +0848 +0F48 +F888 +0908 +06C0 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni933F +ENCODING 37695 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +283E +2420 +41FE +B922 +1138 +11E0 +FD22 +111E +9500 +5978 +5248 +1E4A +E48A +4906 +ENDCHAR +STARTCHAR uni9340 +ENCODING 37696 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +25FC +4104 +B9FC +1000 +11FE +FC08 +13FE +9408 +5908 +5088 +1C08 +E028 +4010 +ENDCHAR +STARTCHAR uni9341 +ENCODING 37697 +BBX 15 16 0 -2 +BITMAP +2010 +2090 +5710 +4C3E +8422 +7444 +2790 +2510 +F510 +2510 +A528 +7528 +2528 +3944 +C944 +1082 +ENDCHAR +STARTCHAR uni9342 +ENCODING 37698 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2850 +2488 +4104 +BA02 +10F8 +1020 +FC20 +11FC +9420 +5924 +50A4 +1CA8 +E3FE +4000 +ENDCHAR +STARTCHAR uni9343 +ENCODING 37699 +BBX 15 15 0 -1 +BITMAP +2080 +2080 +50FC +4954 +8254 +78A4 +2124 +2244 +F894 +2108 +2840 +B0A4 +62AA +3A8A +E478 +ENDCHAR +STARTCHAR uni9344 +ENCODING 37700 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4000 +FDFC +1104 +1104 +FD04 +11FC +9420 +5524 +5124 +1E22 +3222 +C0E0 +ENDCHAR +STARTCHAR uni9345 +ENCODING 37701 +BBX 15 15 0 -1 +BITMAP +2210 +2110 +2110 +547C +8A10 +7210 +2010 +217E +F910 +2210 +2E20 +B224 +6242 +3AFE +E242 +ENDCHAR +STARTCHAR uni9346 +ENCODING 37702 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +5252 +4A52 +83DE +7A52 +2252 +23DE +FA02 +2202 +2A02 +B202 +6202 +3A02 +E20A +0204 +ENDCHAR +STARTCHAR uni9347 +ENCODING 37703 +BBX 15 15 1 -1 +BITMAP +1110 +2914 +25D8 +4110 +FD12 +11D2 +132E +FC40 +11FC +9504 +5504 +51FC +1D04 +3104 +C1FC +ENDCHAR +STARTCHAR uni9348 +ENCODING 37704 +BBX 15 15 1 -1 +BITMAP +1088 +2888 +27FE +4088 +FC88 +1020 +11FC +FD24 +1124 +9524 +57FE +5020 +1C50 +3088 +C306 +ENDCHAR +STARTCHAR uni9349 +ENCODING 37705 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2504 +41FC +F904 +11FC +1000 +FBFE +1020 +9520 +553C +5120 +1AA0 +3260 +C41E +ENDCHAR +STARTCHAR uni934A +ENCODING 37706 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4020 +FDFC +1124 +11AC +FD74 +1124 +95FC +54A8 +50A8 +1D24 +3222 +C020 +ENDCHAR +STARTCHAR uni934B +ENCODING 37707 +BBX 15 15 1 -1 +BITMAP +1000 +28FC +2484 +40BC +FCA4 +10A4 +11FE +FD02 +117A +954A +554A +517A +1D02 +3102 +C10E +ENDCHAR +STARTCHAR uni934C +ENCODING 37708 +BBX 15 16 0 -2 +BITMAP +0020 +1120 +49FC +2220 +0BFE +1090 +7092 +110E +16C0 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni934D +ENCODING 37709 +BBX 15 15 1 -1 +BITMAP +1010 +2810 +25FE +4100 +FD44 +11FE +1144 +FD7C +1100 +95FC +5544 +5128 +1D10 +3268 +C186 +ENDCHAR +STARTCHAR uni934E +ENCODING 37710 +BBX 15 16 0 -2 +BITMAP +1008 +101C +29F0 +2510 +4110 +B9FE +1110 +117C +FD44 +117C +9544 +597C +5144 +1E44 +E27C +4444 +ENDCHAR +STARTCHAR uni934F +ENCODING 37711 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +28FC +2444 +41FE +B800 +10FC +1084 +FCFC +1020 +95FE +5820 +5120 +1DFE +E020 +4020 +ENDCHAR +STARTCHAR uni9350 +ENCODING 37712 +BBX 15 16 0 -2 +BITMAP +2000 +2088 +5252 +4A22 +8252 +7A8A +2202 +23FE +F888 +2144 +2A7A +B088 +6150 +3820 +E0D8 +0706 +ENDCHAR +STARTCHAR uni9351 +ENCODING 37713 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +25FE +4200 +FCFC +1084 +10FC +FC84 +10FC +9440 +54FC +5184 +1C48 +3070 +C38E +ENDCHAR +STARTCHAR uni9352 +ENCODING 37714 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2848 +2430 +41FE +B852 +1094 +1110 +FE30 +1020 +95FE +5870 +50A8 +1D24 +E222 +4020 +ENDCHAR +STARTCHAR uni9353 +ENCODING 37715 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +2888 +2488 +40F8 +B800 +13FE +1088 +FCF8 +1088 +94F8 +5888 +509E +1DE8 +E008 +4008 +ENDCHAR +STARTCHAR uni9354 +ENCODING 37716 +BBX 15 15 1 -1 +BITMAP +1000 +2BDE +2652 +4252 +FFDE +1000 +10FC +FC00 +13FE +9440 +54FC +5084 +1C04 +3004 +C018 +ENDCHAR +STARTCHAR uni9355 +ENCODING 37717 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2A22 +2420 +43FE +B820 +11FC +1124 +FDFC +1124 +95FC +5820 +53FE +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni9356 +ENCODING 37718 +BBX 15 15 1 -1 +BITMAP +1084 +2884 +25FE +4284 +FCFC +1084 +10FC +FC84 +13FE +9548 +5548 +518E +1D00 +3100 +C1FE +ENDCHAR +STARTCHAR uni9357 +ENCODING 37719 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4088 +FC48 +1050 +13FE +FE22 +1222 +95FC +5524 +5124 +1D2C +3020 +C020 +ENDCHAR +STARTCHAR uni9358 +ENCODING 37720 +BBX 15 16 0 -2 +BITMAP +2002 +23C2 +5242 +4A52 +83D2 +7A52 +2252 +23D2 +FA52 +2252 +2BD2 +B002 +6182 +3942 +E24A +0404 +ENDCHAR +STARTCHAR uni9359 +ENCODING 37721 +BBX 15 16 0 -2 +BITMAP +1090 +0890 +43FC +2090 +0890 +17FE +7090 +1108 +16C4 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni935A +ENCODING 37722 +BBX 15 15 1 -1 +BITMAP +1000 +29F8 +2508 +41F8 +FD08 +11F8 +1000 +FBFE +1080 +95FE +5652 +5092 +1D22 +3042 +C09C +ENDCHAR +STARTCHAR uni935B +ENCODING 37723 +BBX 15 15 1 -1 +BITMAP +2080 +3378 +4C48 +4448 +F748 +248E +2400 +F77C +2404 +AC44 +B428 +6790 +2C28 +3444 +C482 +ENDCHAR +STARTCHAR uni935C +ENCODING 37724 +BBX 15 15 1 -1 +BITMAP +1000 +2BDE +2642 +4242 +FA42 +13DE +1200 +FA3E +13D2 +9612 +5214 +53C8 +1E08 +3214 +C222 +ENDCHAR +STARTCHAR uni935D +ENCODING 37725 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +2924 +25FC +4124 +B924 +11FC +1020 +FC20 +13FE +9622 +5A2A +52FA +1E0A +E202 +4206 +ENDCHAR +STARTCHAR uni935E +ENCODING 37726 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +283E +2420 +4020 +B9FC +1104 +11FC +FD04 +11FC +9504 +59FC +5000 +1C88 +E104 +4202 +ENDCHAR +STARTCHAR uni935F +ENCODING 37727 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +25FC +4104 +B9FC +1020 +1120 +FDFE +1220 +9420 +59FC +5020 +1C20 +E3FE +4000 +ENDCHAR +STARTCHAR uni9360 +ENCODING 37728 +BBX 15 15 1 -1 +BITMAP +1020 +2840 +25FC +4304 +FDFC +1104 +1104 +FDFC +1000 +95FC +5420 +51FC +1C20 +3020 +C3FE +ENDCHAR +STARTCHAR uni9361 +ENCODING 37729 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2924 +2524 +41FC +B924 +1124 +11FC +FC00 +13FE +9520 +5922 +5114 +1D48 +E184 +4102 +ENDCHAR +STARTCHAR uni9362 +ENCODING 37730 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +2800 +247C +4244 +BC44 +107C +1000 +FEFE +1092 +9492 +58FE +5092 +1E92 +F0FE +4082 +ENDCHAR +STARTCHAR uni9363 +ENCODING 37731 +BBX 15 16 0 -2 +BITMAP +1048 +1048 +29FE +2448 +4200 +BDFC +1044 +1044 +FE94 +1108 +96FC +5884 +5084 +1E84 +F0FC +4084 +ENDCHAR +STARTCHAR uni9364 +ENCODING 37732 +BBX 15 15 1 -1 +BITMAP +100C +2830 +25E0 +4020 +FC20 +13FE +1020 +FCA0 +132E +9622 +5222 +53AE +1E22 +3222 +C3FE +ENDCHAR +STARTCHAR uni9365 +ENCODING 37733 +BBX 15 15 1 -1 +BITMAP +1080 +289E +27EA +408A +FBEA +108A +10EA +FF92 +1092 +9424 +5420 +53FE +1C50 +3088 +C306 +ENDCHAR +STARTCHAR uni9366 +ENCODING 37734 +BBX 15 16 0 -2 +BITMAP +2210 +2110 +2110 +57BE +8A28 +7248 +23AA +22AE +FABA +22EA +2AAE +B2A8 +64AA +3CA2 +E9A2 +101E +ENDCHAR +STARTCHAR uni9367 +ENCODING 37735 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +28FE +2502 +4242 +B9FA +1002 +11F2 +FC02 +11F2 +9402 +59F2 +5112 +1DF2 +E014 +4008 +ENDCHAR +STARTCHAR uni9368 +ENCODING 37736 +BBX 15 16 0 -2 +BITMAP +1010 +11D4 +2858 +2652 +418C +B888 +1104 +12FA +FC20 +1020 +95FE +5820 +5050 +1C88 +E104 +4202 +ENDCHAR +STARTCHAR uni9369 +ENCODING 37737 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +2BFE +2488 +40A8 +B820 +13FE +1040 +FC80 +10FC +9584 +5A84 +5084 +1C84 +E0FC +4084 +ENDCHAR +STARTCHAR uni936A +ENCODING 37738 +BBX 15 15 1 -1 +BITMAP +0040 +7E40 +04FE +2884 +FF48 +1A30 +2848 +C906 +0EC0 +1830 +E7CE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni936B +ENCODING 37739 +BBX 15 15 1 -1 +BITMAP +0620 +78A4 +08A4 +FF28 +2C50 +2A48 +4984 +8EC2 +1830 +EFCE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni936C +ENCODING 37740 +BBX 15 15 1 -1 +BITMAP +1048 +2B88 +2488 +40AA +FBEA +10AA +10AC +FDC8 +11A8 +96A8 +5488 +5098 +1E94 +30A4 +C0C2 +ENDCHAR +STARTCHAR uni936D +ENCODING 37741 +BBX 15 16 0 -2 +BITMAP +1080 +10BC +2884 +2508 +41FE +BB20 +1520 +117C +FD90 +1110 +95FE +5910 +5128 +1D28 +E144 +4182 +ENDCHAR +STARTCHAR uni936E +ENCODING 37742 +BBX 15 15 1 -1 +BITMAP +1020 +2850 +2488 +4376 +FC00 +13CA +124A +FF4A +12D4 +9654 +5768 +52D4 +1E54 +324A +C2CA +ENDCHAR +STARTCHAR uni936F +ENCODING 37743 +BBX 15 15 0 -1 +BITMAP +2080 +2080 +50FC +4954 +82D4 +78B4 +212C +2244 +F894 +2108 +2840 +B0A4 +62AA +3A8A +E478 +ENDCHAR +STARTCHAR uni9370 +ENCODING 37744 +BBX 15 15 1 -1 +BITMAP +1078 +29C8 +2544 +4224 +FBFE +1080 +13FE +F880 +10F8 +9488 +5588 +5150 +1A20 +3458 +C186 +ENDCHAR +STARTCHAR uni9371 +ENCODING 37745 +BBX 15 15 1 -1 +BITMAP +1128 +2928 +27FE +4128 +FD28 +1138 +1100 +FDFC +1020 +97FE +54A8 +50A8 +1D24 +3222 +C020 +ENDCHAR +STARTCHAR uni9372 +ENCODING 37746 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +25FC +4110 +B9FE +1110 +114A +FD86 +1000 +95FC +5904 +51FC +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni9373 +ENCODING 37747 +BBX 15 15 1 -1 +BITMAP +0040 +7E40 +487E +7E80 +4300 +7E7C +4900 +7EC0 +1830 +EFCE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni9374 +ENCODING 37748 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +2924 +2524 +41FC +B800 +13FE +1020 +FC40 +11FC +9554 +5954 +5154 +1D54 +E154 +410C +ENDCHAR +STARTCHAR uni9375 +ENCODING 37749 +BBX 15 15 1 -1 +BITMAP +1010 +2810 +27FC +4114 +F97E +1214 +13BC +F890 +12BC +9290 +557E +5110 +1D10 +32D0 +C43E +ENDCHAR +STARTCHAR uni9376 +ENCODING 37750 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2924 +2524 +41FC +B924 +1124 +11FC +FC20 +1010 +9454 +5942 +5142 +1D4A +E238 +4000 +ENDCHAR +STARTCHAR uni9377 +ENCODING 37751 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2BFE +2450 +4088 +BB26 +11FC +1020 +FC20 +13FE +9400 +5820 +51FC +1C20 +E020 +43FE +ENDCHAR +STARTCHAR uni9378 +ENCODING 37752 +BBX 15 16 0 -2 +BITMAP +1080 +109E +2892 +25D2 +4092 +B89E +1092 +11D2 +FD52 +115E +9552 +5952 +51D2 +1C22 +E02A +4044 +ENDCHAR +STARTCHAR uni9379 +ENCODING 37753 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2BFE +2602 +4404 +B9FC +1000 +11FC +FD04 +11FC +9504 +59FC +5104 +1C00 +E3FE +4000 +ENDCHAR +STARTCHAR uni937A +ENCODING 37754 +BBX 15 16 0 -2 +BITMAP +1020 +1022 +29FA +2424 +4028 +BBFE +1020 +1040 +FCFC +1184 +9684 +58FC +5084 +1C84 +E0FC +4084 +ENDCHAR +STARTCHAR uni937B +ENCODING 37755 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +25FC +4104 +B9FC +1080 +11FE +FE22 +1122 +9552 +5902 +51FA +1C02 +E014 +4008 +ENDCHAR +STARTCHAR uni937C +ENCODING 37756 +BBX 15 15 1 -1 +BITMAP +1014 +2812 +2410 +43FE +FE10 +1212 +12F2 +FE14 +12F4 +96A8 +5AA8 +52E8 +1E1A +322A +C4C4 +ENDCHAR +STARTCHAR uni937D +ENCODING 37757 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +29FE +2502 +4102 +B9FE +1100 +1100 +FDFE +11AA +96AA +5AFE +54AA +1CAA +E0A2 +4086 +ENDCHAR +STARTCHAR uni937E +ENCODING 37758 +BBX 15 15 1 -1 +BITMAP +1018 +29E0 +2420 +41FC +FC20 +11FC +1124 +FDFC +1124 +95FC +5420 +51FC +1C20 +3020 +C3FE +ENDCHAR +STARTCHAR uni937F +ENCODING 37759 +BBX 15 16 0 -2 +BITMAP +1052 +1052 +28A4 +25FE +42A4 +BC52 +1052 +1000 +FEFE +1092 +9492 +58FE +5092 +1E92 +F0FE +4082 +ENDCHAR +STARTCHAR uni9380 +ENCODING 37760 +BBX 15 16 0 -2 +BITMAP +1090 +109E +28A2 +2554 +4108 +BB54 +1562 +1140 +FD44 +1158 +9542 +5944 +5118 +1D02 +E10C +4130 +ENDCHAR +STARTCHAR uni9381 +ENCODING 37761 +BBX 15 16 0 -2 +BITMAP +2000 +2FDE +5492 +4C92 +8494 +7794 +2498 +2494 +F792 +2492 +A492 +75DA +2E94 +3090 +C090 +0090 +ENDCHAR +STARTCHAR uni9382 +ENCODING 37762 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +2BFE +2420 +4020 +B9FC +1020 +1020 +FDFE +1000 +9420 +5BFE +5020 +1C50 +E088 +4306 +ENDCHAR +STARTCHAR uni9383 +ENCODING 37763 +BBX 15 16 0 -2 +BITMAP +2008 +241C +52E0 +4A80 +888C +74B0 +24A8 +22AA +F2AC +24A8 +ACA8 +74A8 +24A4 +3524 +C532 +0220 +ENDCHAR +STARTCHAR uni9384 +ENCODING 37764 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2BFE +2400 +41FC +B904 +1104 +1104 +FDFC +1052 +9494 +5988 +5288 +1CA4 +E0C2 +4080 +ENDCHAR +STARTCHAR uni9385 +ENCODING 37765 +BBX 15 16 0 -2 +BITMAP +11FC +1124 +2924 +25FC +4124 +B924 +11FC +1050 +FC88 +1104 +968A +5888 +5088 +1C88 +E108 +4208 +ENDCHAR +STARTCHAR uni9386 +ENCODING 37766 +BBX 15 16 0 -2 +BITMAP +2108 +2088 +5090 +4BFE +8000 +7BC4 +2254 +2254 +FBD4 +2254 +2A54 +B3D4 +6254 +3A44 +E254 +02C8 +ENDCHAR +STARTCHAR uni9387 +ENCODING 37767 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +2924 +2524 +41FC +B900 +117C +1144 +FD44 +117C +9544 +597C +5144 +1E44 +E27C +4444 +ENDCHAR +STARTCHAR uni9388 +ENCODING 37768 +BBX 15 15 1 -1 +BITMAP +1088 +2850 +25FC +4020 +FC20 +10F8 +1020 +FC20 +11FE +9440 +54FC +5110 +1C10 +3010 +C1FE +ENDCHAR +STARTCHAR uni9389 +ENCODING 37769 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +25FC +4104 +B9FC +1000 +13DE +FC42 +1252 +954A +58C6 +535A +1C42 +E14A +4084 +ENDCHAR +STARTCHAR uni938A +ENCODING 37770 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +29FE +2484 +4048 +B9FE +1102 +1224 +FC10 +11FE +9440 +587C +5044 +1C84 +E094 +4108 +ENDCHAR +STARTCHAR uni938B +ENCODING 37771 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4222 +FE3A +11E0 +103C +FDE0 +103E +97E0 +5420 +51FC +1D04 +3104 +C1FC +ENDCHAR +STARTCHAR uni938C +ENCODING 37772 +BBX 15 15 1 -1 +BITMAP +1108 +2890 +27FC +40A0 +FDF8 +10A8 +13FE +FCA8 +10A8 +93F8 +54A0 +51B0 +1AA8 +34A6 +C0A0 +ENDCHAR +STARTCHAR uni938D +ENCODING 37773 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +53FE +4820 +83FE +7A42 +248C +21F0 +F820 +2044 +2BFE +B022 +6128 +3A24 +E4A4 +0040 +ENDCHAR +STARTCHAR uni938E +ENCODING 37774 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +51FC +4A00 +85F8 +7800 +23F8 +2088 +FAA8 +21C8 +2BF8 +B08A +61CA +3AAA +E086 +0082 +ENDCHAR +STARTCHAR uni938F +ENCODING 37775 +BBX 15 15 1 -1 +BITMAP +6040 +17FE +C048 +209C +03E2 +0928 +312A +C6C6 +1830 +EFCE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni9390 +ENCODING 37776 +BBX 15 16 0 -2 +BITMAP +1008 +103C +2BC0 +2404 +4244 +B928 +11FC +1220 +FC20 +13FE +9420 +5924 +5124 +1D24 +E1FC +4004 +ENDCHAR +STARTCHAR uni9391 +ENCODING 37777 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +28FC +2420 +4020 +B9FE +1040 +1084 +FDFE +1002 +95FC +5954 +5154 +1D54 +E3FE +4000 +ENDCHAR +STARTCHAR uni9392 +ENCODING 37778 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2900 +257E +4100 +B9FE +1154 +1148 +FD64 +1142 +9504 +59FE +5144 +1E24 +E204 +440C +ENDCHAR +STARTCHAR uni9393 +ENCODING 37779 +BBX 15 16 0 -2 +BITMAP +2090 +2088 +5104 +4A42 +8488 +79FC +2004 +2000 +FBDE +2042 +2A52 +B14A +6252 +3842 +E14A +0084 +ENDCHAR +STARTCHAR uni9394 +ENCODING 37780 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4202 +FE8A +1104 +1222 +FC50 +1088 +9706 +55FC +5104 +1D04 +3104 +C1FC +ENDCHAR +STARTCHAR uni9395 +ENCODING 37781 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +29FE +2510 +417C +B914 +11FE +1114 +FD7C +1110 +957C +5944 +5144 +1E44 +E27C +4444 +ENDCHAR +STARTCHAR uni9396 +ENCODING 37782 +BBX 15 15 1 -1 +BITMAP +1124 +28A4 +24A8 +41FC +FD04 +1104 +11FC +FF04 +1104 +95FC +5504 +5104 +1DFC +3088 +C306 +ENDCHAR +STARTCHAR uni9397 +ENCODING 37783 +BBX 15 15 1 -1 +BITMAP +1010 +2828 +2644 +41BA +FC00 +10FC +1084 +FEFC +1084 +94FC +5480 +517E +1D42 +3242 +C07E +ENDCHAR +STARTCHAR uni9398 +ENCODING 37784 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +5000 +49FC +8104 +7904 +21FC +2000 +FBFE +228A +2A52 +B3FE +6222 +3A22 +E22A +0204 +ENDCHAR +STARTCHAR uni9399 +ENCODING 37785 +BBX 15 16 0 -2 +BITMAP +2440 +225E +5292 +4812 +87D2 +791E +2552 +2552 +FD52 +27DE +2952 +B112 +6212 +3A22 +E42A +0844 +ENDCHAR +STARTCHAR uni939A +ENCODING 37786 +BBX 15 15 1 -1 +BITMAP +1210 +2920 +2478 +4048 +FA48 +1148 +1078 +FB40 +117C +9544 +5544 +5144 +1D7C +3280 +C47E +ENDCHAR +STARTCHAR uni939B +ENCODING 37787 +BBX 15 15 1 -1 +BITMAP +1028 +2824 +27FE +4020 +FDFC +1124 +11FC +FD24 +11FC +9524 +5408 +53FE +1C88 +3048 +C018 +ENDCHAR +STARTCHAR uni939C +ENCODING 37788 +BBX 15 16 0 -2 +BITMAP +1000 +3E78 +2A48 +2248 +FE86 +2B78 +4248 +4A30 +8548 +06C4 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni939D +ENCODING 37789 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +2BFE +2488 +4020 +B850 +1088 +1104 +FEFA +1000 +9400 +59FC +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni939E +ENCODING 37790 +BBX 15 15 1 -1 +BITMAP +1020 +2840 +25FC +4154 +FD24 +1154 +1104 +FDFC +1000 +9510 +55D6 +5118 +1D10 +31D2 +C70E +ENDCHAR +STARTCHAR uni939F +ENCODING 37791 +BBX 15 16 0 -2 +BITMAP +21F8 +2088 +5070 +498C +8000 +7BDE +2252 +218C +FA52 +2020 +2BFE +B070 +60A8 +3924 +E622 +0020 +ENDCHAR +STARTCHAR uni93A0 +ENCODING 37792 +BBX 15 15 0 -1 +BITMAP +2000 +23FE +5252 +4A52 +83FE +7800 +2000 +23FE +F820 +2020 +293C +B120 +6120 +3920 +E7FE +ENDCHAR +STARTCHAR uni93A1 +ENCODING 37793 +BBX 15 15 1 -1 +BITMAP +1108 +2888 +2490 +43FE +FC88 +1088 +1110 +FE64 +1154 +9488 +5488 +5154 +1D54 +31DE +C662 +ENDCHAR +STARTCHAR uni93A2 +ENCODING 37794 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +29FC +2504 +4104 +B9FC +1100 +11FE +FD00 +11FE +9402 +5AAA +52AA +1C02 +E014 +4008 +ENDCHAR +STARTCHAR uni93A3 +ENCODING 37795 +BBX 15 15 1 -1 +BITMAP +1020 +52A4 +54A8 +2850 +4488 +0000 +7FFC +4104 +46C4 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni93A4 +ENCODING 37796 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +25FC +4104 +B9FC +1020 +1124 +FCA8 +1020 +97FE +5890 +5090 +1D12 +E212 +440E +ENDCHAR +STARTCHAR uni93A5 +ENCODING 37797 +BBX 15 16 0 -2 +BITMAP +1080 +11F8 +2288 +6870 +AB8E +2820 +29FC +28A8 +2164 +06C0 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni93A6 +ENCODING 37798 +BBX 15 16 0 -2 +BITMAP +2040 +23BE +5212 +4A92 +8252 +7AAA +2324 +2040 +FBFE +2222 +2A22 +B3FE +6222 +3A22 +E3FE +0202 +ENDCHAR +STARTCHAR uni93A7 +ENCODING 37799 +BBX 15 15 1 -1 +BITMAP +1020 +2924 +25FC +4000 +FDFC +1000 +11FC +FD04 +1104 +95FC +5488 +5088 +1C50 +3010 +C3FE +ENDCHAR +STARTCHAR uni93A8 +ENCODING 37800 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +29FE +2720 +41FC +B920 +11FC +1120 +FDFE +1100 +9420 +5BFE +5020 +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni93A9 +ENCODING 37801 +BBX 15 16 0 -2 +BITMAP +2000 +245C +5294 +4914 +8294 +7454 +2126 +2100 +F7DC +2114 +A594 +7554 +2948 +3108 +C514 +0222 +ENDCHAR +STARTCHAR uni93AA +ENCODING 37802 +BBX 15 16 0 -2 +BITMAP +10A0 +112C +2924 +2524 +41AC +B924 +1124 +11FC +FC20 +11FC +9488 +5850 +5020 +1C50 +E088 +4306 +ENDCHAR +STARTCHAR uni93AB +ENCODING 37803 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +29FC +2504 +4154 +B924 +1154 +1104 +FC88 +1144 +967A +5888 +5150 +1C20 +E0D8 +4706 +ENDCHAR +STARTCHAR uni93AC +ENCODING 37804 +BBX 15 15 1 -1 +BITMAP +1040 +2840 +27FE +4000 +FDF8 +1108 +11F8 +FC00 +13FC +9604 +5AF4 +5294 +1E94 +32F4 +C20C +ENDCHAR +STARTCHAR uni93AD +ENCODING 37805 +BBX 15 15 1 -1 +BITMAP +1098 +28E0 +2484 +407C +FC00 +107C +1144 +FD7C +1144 +957C +5544 +51FE +1C20 +30C8 +C306 +ENDCHAR +STARTCHAR uni93AE +ENCODING 37806 +BBX 15 15 1 -1 +BITMAP +1020 +29FE +2420 +40FC +FC84 +10FC +1084 +FEFC +1084 +94FC +5400 +53FE +1C40 +3088 +C306 +ENDCHAR +STARTCHAR uni93AF +ENCODING 37807 +BBX 15 16 0 -2 +BITMAP +2100 +209E +53D2 +4A52 +8254 +7BD4 +2258 +2254 +FBD2 +2212 +2A92 +B25A +62D4 +3B50 +E210 +0010 +ENDCHAR +STARTCHAR uni93B0 +ENCODING 37808 +BBX 15 15 1 -1 +BITMAP +1030 +2888 +2504 +42FA +FC00 +1030 +1088 +FD04 +1202 +95FC +5554 +5154 +1D54 +3154 +C3FE +ENDCHAR +STARTCHAR uni93B1 +ENCODING 37809 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +29FC +2420 +43FE +B800 +11FC +1104 +FD04 +11FC +9452 +5894 +5188 +1EA4 +E0C2 +4080 +ENDCHAR +STARTCHAR uni93B2 +ENCODING 37810 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +28A8 +2420 +43FE +BA02 +1000 +11FC +FD04 +1104 +95FC +5850 +5050 +1C92 +E112 +420E +ENDCHAR +STARTCHAR uni93B3 +ENCODING 37811 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +29FC +2504 +41FC +B904 +11FC +1104 +FDFC +1020 +95FE +5870 +50A8 +1D24 +E222 +4020 +ENDCHAR +STARTCHAR uni93B4 +ENCODING 37812 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +29FC +2504 +41FC +B904 +11FC +1104 +FDFC +1040 +9420 +58A4 +528A +1E8A +E478 +4000 +ENDCHAR +STARTCHAR uni93B5 +ENCODING 37813 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +53FE +4A02 +8000 +79FC +2040 +20A2 +FB34 +2058 +2894 +B334 +6052 +3890 +E350 +0020 +ENDCHAR +STARTCHAR uni93B6 +ENCODING 37814 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2808 +25E8 +4128 +B9E8 +1000 +13FE +FC08 +11E8 +9528 +5928 +51E8 +1C08 +E028 +4010 +ENDCHAR +STARTCHAR uni93B7 +ENCODING 37815 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +5120 +49FC +8120 +79FC +2120 +2120 +F9FE +2002 +2AAA +B2AA +62AA +3A02 +E014 +0008 +ENDCHAR +STARTCHAR uni93B8 +ENCODING 37816 +BBX 15 16 0 -2 +BITMAP +20A0 +2090 +51FE +4B20 +85FC +7920 +21FC +2120 +F9FE +2100 +2BFC +B088 +609E +3902 +E20A +0404 +ENDCHAR +STARTCHAR uni93B9 +ENCODING 37817 +BBX 15 15 1 -1 +BITMAP +1208 +2924 +2442 +4080 +FE7C +1110 +1010 +FF10 +117E +9510 +5528 +5144 +1D82 +3280 +C47E +ENDCHAR +STARTCHAR uni93BA +ENCODING 37818 +BBX 15 15 1 -1 +BITMAP +2000 +573C +4024 +8024 +F024 +2FBC +2224 +F224 +22A4 +AABC +AAA4 +6AA4 +3A24 +2224 +C27E +ENDCHAR +STARTCHAR uni93BB +ENCODING 37819 +BBX 15 16 0 -2 +BITMAP +1092 +1124 +2A48 +2524 +4092 +B800 +11FC +1104 +FDFC +1104 +95FC +5904 +51FC +1C88 +E104 +4202 +ENDCHAR +STARTCHAR uni93BC +ENCODING 37820 +BBX 15 16 0 -2 +BITMAP +1020 +103C +2820 +25FE +4122 +B938 +11E2 +111E +FD04 +1178 +9510 +597C +5110 +1EFE +E210 +4430 +ENDCHAR +STARTCHAR uni93BD +ENCODING 37821 +BBX 15 16 0 -2 +BITMAP +2020 +2222 +53FE +4880 +81F8 +7A88 +2070 +238E +F820 +21FC +2820 +B1FC +6020 +3BFE +E020 +0020 +ENDCHAR +STARTCHAR uni93BE +ENCODING 37822 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +2888 +2488 +40F8 +B888 +1088 +10F8 +FC00 +11FC +9554 +5954 +5154 +1D54 +E3FE +4000 +ENDCHAR +STARTCHAR uni93BF +ENCODING 37823 +BBX 15 16 0 -2 +BITMAP +1020 +1050 +2888 +2574 +4202 +B8F8 +1088 +10F8 +FC0C +11F0 +9420 +59FC +5020 +1DFE +E020 +4060 +ENDCHAR +STARTCHAR uni93C0 +ENCODING 37824 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +503E +4820 +8020 +7BFE +2202 +2326 +FA8A +2252 +2B26 +B252 +628A +3B26 +E3FE +0202 +ENDCHAR +STARTCHAR uni93C1 +ENCODING 37825 +BBX 15 15 1 -1 +BITMAP +1124 +2A48 +2524 +41FC +FD24 +11FC +1124 +FDFC +1020 +97FE +54A8 +50A8 +1D24 +3222 +C020 +ENDCHAR +STARTCHAR uni93C2 +ENCODING 37826 +BBX 15 15 0 -1 +BITMAP +2000 +23FE +5200 +4A7C +8244 +7A44 +227C +2200 +FAEE +22AA +2AAA +B2AA +62EE +3A00 +E3FE +ENDCHAR +STARTCHAR uni93C3 +ENCODING 37827 +BBX 15 15 1 -1 +BITMAP +2110 +5110 +4910 +87FE +FA20 +2210 +239E +FAA8 +2288 +AABE +AA88 +6288 +2C94 +3494 +C922 +ENDCHAR +STARTCHAR uni93C4 +ENCODING 37828 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +2820 +25FC +4124 +B9FC +1124 +11FC +FC22 +13FE +9408 +5BFE +5108 +1C88 +E028 +4010 +ENDCHAR +STARTCHAR uni93C5 +ENCODING 37829 +BBX 15 16 0 -2 +BITMAP +2120 +213C +2144 +52A8 +8A10 +76A8 +2AC6 +22BC +FAA4 +22BC +2AA4 +B2BC +6224 +3A24 +E224 +022C +ENDCHAR +STARTCHAR uni93C6 +ENCODING 37830 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2524 +43FE +FD24 +11FC +1000 +FDFC +1104 +95FC +5504 +51FC +1D04 +31FC +C706 +ENDCHAR +STARTCHAR uni93C7 +ENCODING 37831 +BBX 15 15 1 -1 +BITMAP +2120 +5120 +493E +87A0 +FA40 +223E +238A +FA8A +22A8 +AAA8 +AAAE +62A8 +2CA8 +34B8 +C9CE +ENDCHAR +STARTCHAR uni93C8 +ENCODING 37832 +BBX 15 15 1 -1 +BITMAP +1210 +2910 +24FE +4010 +FE7C +1154 +107C +FF54 +1154 +957C +5510 +51FE +1D10 +3290 +C47E +ENDCHAR +STARTCHAR uni93C9 +ENCODING 37833 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +57C8 +4908 +811E +77D2 +2564 +2540 +F7C8 +2108 +A388 +7548 +2954 +3114 +C124 +0142 +ENDCHAR +STARTCHAR uni93CA +ENCODING 37834 +BBX 15 16 0 -2 +BITMAP +0820 +7F20 +083E +7E44 +0884 +FF28 +2010 +3E28 +4344 +86C2 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni93CB +ENCODING 37835 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +53FE +4888 +8088 +78F8 +2020 +23FE +FA22 +2332 +2AAA +B376 +6222 +3A22 +E22A +0224 +ENDCHAR +STARTCHAR uni93CC +ENCODING 37836 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +2BFE +2488 +4000 +B9FC +1104 +11FC +FD04 +11FC +9420 +5BFE +5050 +1C88 +E104 +4202 +ENDCHAR +STARTCHAR uni93CD +ENCODING 37837 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2924 +25FC +4124 +B9FC +1040 +1088 +FDF0 +1020 +9444 +5BFE +5022 +1D24 +E222 +4060 +ENDCHAR +STARTCHAR uni93CE +ENCODING 37838 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +5124 +49FC +8124 +79FC +20A8 +20A8 +FBFE +20A8 +28A8 +B1FC +6020 +3BFE +E020 +0020 +ENDCHAR +STARTCHAR uni93CF +ENCODING 37839 +BBX 15 16 0 -2 +BITMAP +2088 +23DE +5088 +49DC +8088 +7BDE +2088 +2000 +FBFC +2004 +2804 +B1FC +6004 +3804 +E3FC +0004 +ENDCHAR +STARTCHAR uni93D0 +ENCODING 37840 +BBX 15 15 1 -1 +BITMAP +1000 +2BDE +254A +4252 +FCC6 +135A +1062 +FC50 +1088 +9726 +54C8 +5032 +1CC4 +3018 +C1E0 +ENDCHAR +STARTCHAR uni93D1 +ENCODING 37841 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4084 +FC48 +13FE +1222 +FE22 +12FA +9622 +5AFA +528A +1E8A +32FA +C206 +ENDCHAR +STARTCHAR uni93D2 +ENCODING 37842 +BBX 15 16 0 -2 +BITMAP +2040 +2088 +51FC +4908 +8252 +7BFE +2050 +2188 +FE26 +20C0 +2B10 +B064 +6388 +3830 +E0C0 +0700 +ENDCHAR +STARTCHAR uni93D3 +ENCODING 37843 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +29FC +2524 +417C +B98C +1154 +1124 +FD54 +11FC +9420 +5810 +5154 +1D42 +E14A +4238 +ENDCHAR +STARTCHAR uni93D4 +ENCODING 37844 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2BFE +2602 +4000 +B9FC +1020 +11FC +FD24 +11FC +9524 +59FC +5000 +1C88 +E104 +4202 +ENDCHAR +STARTCHAR uni93D5 +ENCODING 37845 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +53FE +4A50 +8250 +7BFE +2252 +2252 +FBFE +2200 +2A92 +B2D4 +6298 +3C92 +E4D2 +088E +ENDCHAR +STARTCHAR uni93D6 +ENCODING 37846 +BBX 15 15 1 -1 +BITMAP +0100 +7FFE +4440 +7FFC +4444 +7FFC +5040 +9E7C +9042 +3D3E +07C0 +F93E +0FE0 +1110 +FFFE +ENDCHAR +STARTCHAR uni93D7 +ENCODING 37847 +BBX 15 15 1 -1 +BITMAP +1000 +2BFE +2692 +43D2 +FE54 +13CC +1288 +FE94 +13E2 +9420 +5420 +51FC +1C20 +3020 +C3FE +ENDCHAR +STARTCHAR uni93D8 +ENCODING 37848 +BBX 15 15 1 -1 +BITMAP +1120 +2D3C +2564 +45D4 +FD28 +1718 +1110 +F964 +1104 +9F7E +5504 +5524 +1914 +3104 +C10C +ENDCHAR +STARTCHAR uni93D9 +ENCODING 37849 +BBX 15 16 0 -2 +BITMAP +1020 +1222 +2BFE +2490 +4088 +B9FE +1310 +1510 +FDFE +1110 +9510 +59FE +5110 +1D10 +E1FE +4100 +ENDCHAR +STARTCHAR uni93DA +ENCODING 37850 +BBX 15 16 0 -2 +BITMAP +200C +200A +5008 +4BFE +8208 +7A48 +226A +224A +FBFA +224C +2A4C +B2EC +635A +3C4A +E4D6 +0822 +ENDCHAR +STARTCHAR uni93DB +ENCODING 37851 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +28A8 +27FE +4202 +B8F8 +1088 +1088 +FCF8 +1020 +95FC +5924 +5124 +1D34 +E128 +4020 +ENDCHAR +STARTCHAR uni93DC +ENCODING 37852 +BBX 15 15 1 -1 +BITMAP +1124 +2924 +24A8 +43FE +FE02 +12FA +1088 +FC88 +10F8 +9420 +5420 +51FC +1C20 +3020 +C3FE +ENDCHAR +STARTCHAR uni93DD +ENCODING 37853 +BBX 15 15 1 -1 +BITMAP +1000 +29F8 +2508 +41F8 +FF08 +11F8 +1000 +FFFE +1492 +97FE +5400 +53FC +1D08 +30F0 +C70E +ENDCHAR +STARTCHAR uni93DE +ENCODING 37854 +BBX 15 15 1 -1 +BITMAP +2020 +57FE +4C20 +85FC +FC24 +27FE +2424 +FDFC +2524 +A5FC +A924 +69FC +2124 +3924 +C12C +ENDCHAR +STARTCHAR uni93DF +ENCODING 37855 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4088 +FC70 +1088 +13FE +FE20 +12A0 +96FE +5320 +54FC +1C20 +3020 +C1FE +ENDCHAR +STARTCHAR uni93E0 +ENCODING 37856 +BBX 15 16 0 -2 +BITMAP +2020 +247C +5284 +4948 +8030 +78CE +2610 +227C +FA10 +227C +2A10 +B2FE +6210 +3A10 +E5FE +0800 +ENDCHAR +STARTCHAR uni93E1 +ENCODING 37857 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FC +4088 +FC50 +13FE +1000 +FDF8 +1108 +95F8 +5508 +51F8 +1C90 +3112 +C60E +ENDCHAR +STARTCHAR uni93E2 +ENCODING 37858 +BBX 15 15 1 -1 +BITMAP +1000 +2BFE +2490 +43FC +FE94 +1294 +13FC +FC00 +11F8 +9400 +57FE +5020 +1CA8 +3326 +C060 +ENDCHAR +STARTCHAR uni93E3 +ENCODING 37859 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +29FE +2500 +4148 +B948 +11FE +1148 +FD48 +1148 +9578 +5900 +52D4 +1EAA +E52A +4800 +ENDCHAR +STARTCHAR uni93E4 +ENCODING 37860 +BBX 15 15 1 -1 +BITMAP +1020 +29FC +2524 +43FE +FD24 +11FC +1020 +FDFC +1124 +95FC +5440 +57FE +1C84 +30F8 +C38E +ENDCHAR +STARTCHAR uni93E5 +ENCODING 37861 +BBX 15 15 1 -1 +BITMAP +1040 +2840 +27FC +4204 +FE84 +10FE +1110 +FD20 +137C +9544 +5544 +517C +1D44 +3144 +C17C +ENDCHAR +STARTCHAR uni93E6 +ENCODING 37862 +BBX 15 16 0 -2 +BITMAP +1124 +1124 +2A24 +24A4 +4154 +7D4A +9392 +1508 +7908 +1128 +952E +5928 +5128 +1D58 +E14E +4180 +ENDCHAR +STARTCHAR uni93E7 +ENCODING 37863 +BBX 15 15 1 -1 +BITMAP +0800 +FF7C +0844 +7E86 +0000 +7F7C +4944 +7F38 +42CE +8C30 +F7CE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni93E8 +ENCODING 37864 +BBX 15 15 1 -1 +BITMAP +080C +0870 +FFC0 +4940 +7F7E +4948 +7F48 +0848 +FF88 +0888 +07C0 +1930 +EFEE +1110 +FFFE +ENDCHAR +STARTCHAR uni93E9 +ENCODING 37865 +BBX 15 16 0 -2 +BITMAP +2100 +2102 +511C +4FD0 +8110 +77D0 +255E +27D4 +F554 +27D4 +A114 +77D4 +2114 +3124 +C124 +0144 +ENDCHAR +STARTCHAR uni93EA +ENCODING 37866 +BBX 15 16 0 -2 +BITMAP +2090 +2090 +57FE +4890 +83FC +7A94 +23FC +2294 +FBFC +2000 +29F8 +B108 +61F8 +3908 +E1F8 +0108 +ENDCHAR +STARTCHAR uni93EB +ENCODING 37867 +BBX 15 16 0 -2 +BITMAP +2062 +238A +208A +57EA +888A +71CA +22A2 +248A +F8A4 +2020 +2BFE +B070 +60A8 +3924 +E222 +0020 +ENDCHAR +STARTCHAR uni93EC +ENCODING 37868 +BBX 15 16 0 -2 +BITMAP +2040 +207C +5040 +4BFE +8242 +7A78 +23C4 +223C +FA08 +22F0 +2B24 +B2A8 +65FE +3C20 +E8A0 +0040 +ENDCHAR +STARTCHAR uni93ED +ENCODING 37869 +BBX 15 16 0 -2 +BITMAP +201C +21E0 +5020 +4924 +80A8 +7BFE +2070 +20A8 +F924 +2222 +2840 +B024 +62A2 +3A8A +E488 +0078 +ENDCHAR +STARTCHAR uni93EE +ENCODING 37870 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +29FE +2510 +417C +B914 +11FE +1114 +FD7C +1110 +9592 +5954 +5138 +1E54 +E292 +4430 +ENDCHAR +STARTCHAR uni93EF +ENCODING 37871 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +53FE +4820 +82AA +7924 +22AA +2020 +FAAA +2124 +2AAA +B050 +6050 +3888 +E104 +0602 +ENDCHAR +STARTCHAR uni93F0 +ENCODING 37872 +BBX 15 16 0 -2 +BITMAP +2020 +2222 +5222 +4BFE +8000 +7BDE +2252 +2252 +FBDE +2252 +2A52 +B3DE +6252 +3A52 +E55A +08A4 +ENDCHAR +STARTCHAR uni93F1 +ENCODING 37873 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FC +4088 +FFFE +1000 +11FC +FD04 +11FC +9504 +55FC +5020 +1FFE +3020 +C020 +ENDCHAR +STARTCHAR uni93F2 +ENCODING 37874 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +5048 +48F0 +8020 +7BFE +2242 +2090 +F9F8 +2028 +2920 +B1FC +6220 +3BFE +E020 +0020 +ENDCHAR +STARTCHAR uni93F3 +ENCODING 37875 +BBX 15 16 0 -2 +BITMAP +2104 +2088 +5000 +4BFE +8222 +7AAA +2272 +2222 +FBFE +2000 +29FC +B104 +61FC +3904 +E1FC +0104 +ENDCHAR +STARTCHAR uni93F4 +ENCODING 37876 +BBX 15 16 0 -2 +BITMAP +2010 +2790 +54BC +4CA4 +84C4 +77A8 +2110 +2128 +F146 +25C0 +A53C +7524 +2524 +35A4 +CE3C +0024 +ENDCHAR +STARTCHAR uni93F5 +ENCODING 37877 +BBX 15 15 1 -1 +BITMAP +1090 +2890 +27FE +4090 +FBFC +1148 +1148 +FFFE +1148 +9548 +5BFC +5040 +1FFE +3040 +C040 +ENDCHAR +STARTCHAR uni93F6 +ENCODING 37878 +BBX 15 16 0 -2 +BITMAP +10A0 +1090 +29FE +2720 +41FC +B920 +11FC +1120 +FDFE +1100 +9420 +5BFE +5070 +1CA8 +E326 +4020 +ENDCHAR +STARTCHAR uni93F7 +ENCODING 37879 +BBX 15 16 0 -2 +BITMAP +1050 +1252 +2954 +2450 +43FE +B888 +1050 +13FE +FC20 +11FC +9420 +5BFE +5050 +1C88 +E104 +4602 +ENDCHAR +STARTCHAR uni93F8 +ENCODING 37880 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +53FE +4820 +81FC +7924 +21FC +2124 +F9FC +2022 +2BFE +B042 +6024 +3AA2 +E28A +0478 +ENDCHAR +STARTCHAR uni93F9 +ENCODING 37881 +BBX 15 16 0 -2 +BITMAP +2000 +23BE +50A2 +48A2 +80BE +7B88 +2208 +223E +FA2A +23AA +28AA +B0BE +6088 +388A +E57E +0202 +ENDCHAR +STARTCHAR uni93FA +ENCODING 37882 +BBX 15 16 0 -2 +BITMAP +2024 +23A8 +2092 +5514 +8A08 +7404 +23BA +20A8 +F8C6 +2380 +2A3C +B384 +60A8 +3890 +E2A8 +0144 +ENDCHAR +STARTCHAR uni93FB +ENCODING 37883 +BBX 15 15 1 -1 +BITMAP +1124 +28A8 +2420 +43FE +FCA8 +1124 +1222 +FD20 +11C4 +957E +5654 +5154 +1CBE +3104 +C604 +ENDCHAR +STARTCHAR uni93FC +ENCODING 37884 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +53DE +4D28 +80A4 +7820 +23FE +2020 +FBFE +2222 +2A2A +B274 +60A8 +3924 +E622 +0020 +ENDCHAR +STARTCHAR uni93FD +ENCODING 37885 +BBX 15 15 1 -1 +BITMAP +2040 +53F8 +4848 +87FE +F848 +23F8 +2040 +FD54 +275C +AC44 +B7FC +6444 +3F5C +2554 +C954 +ENDCHAR +STARTCHAR uni93FE +ENCODING 37886 +BBX 15 16 0 -2 +BITMAP +2288 +2288 +57C8 +4A90 +829E +77D4 +2024 +27D4 +F454 +27D4 +A454 +77C8 +2448 +3454 +C464 +04C2 +ENDCHAR +STARTCHAR uni93FF +ENCODING 37887 +BBX 15 16 0 -2 +BITMAP +2020 +2124 +50A8 +4BFE +8202 +78F8 +2088 +2088 +F8F8 +2020 +2BFE +B070 +60A8 +3924 +E222 +0020 +ENDCHAR +STARTCHAR uni9400 +ENCODING 37888 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +2924 +25FC +4020 +BBFE +1000 +11FC +FD04 +11FC +9504 +59FC +5104 +1DFC +E088 +4104 +ENDCHAR +STARTCHAR uni9401 +ENCODING 37889 +BBX 15 16 0 -2 +BITMAP +2240 +2242 +525C +4FF0 +8250 +7BD0 +225E +23D4 +FA54 +2254 +2FF4 +B014 +6294 +3C64 +E824 +0044 +ENDCHAR +STARTCHAR uni9402 +ENCODING 37890 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +5050 +4BDE +8252 +7A52 +23DE +2050 +FBFE +2222 +2A22 +B3FE +6222 +3A22 +E3FE +0202 +ENDCHAR +STARTCHAR uni9403 +ENCODING 37891 +BBX 15 15 1 -1 +BITMAP +1020 +28F8 +2420 +41FC +FC00 +1108 +13DE +FD08 +11C8 +971E +5400 +57FE +1090 +3912 +C60E +ENDCHAR +STARTCHAR uni9404 +ENCODING 37892 +BBX 15 15 1 -1 +BITMAP +1088 +2888 +27FE +4088 +FCF8 +1000 +11FC +FC20 +11FC +9524 +55FC +5124 +1DFC +3088 +C306 +ENDCHAR +STARTCHAR uni9405 +ENCODING 37893 +BBX 15 16 0 -2 +BITMAP +4920 +2A3E +7F48 +4948 +5DA8 +6B10 +4928 +4144 +06C0 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni9406 +ENCODING 37894 +BBX 15 16 0 -2 +BITMAP +0108 +7890 +4BFC +5040 +49A4 +4458 +55B4 +4852 +41B0 +46C0 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni9407 +ENCODING 37895 +BBX 15 15 1 -1 +BITMAP +101C +29E0 +2524 +40A8 +FFFE +10A8 +10A8 +F924 +1202 +95FC +5524 +51FC +1D24 +3124 +C1FC +ENDCHAR +STARTCHAR uni9408 +ENCODING 37896 +BBX 15 16 0 -2 +BITMAP +1018 +11E0 +2840 +27FE +4088 +B974 +1252 +1070 +FC00 +11FC +9504 +5974 +5154 +1D74 +E104 +410C +ENDCHAR +STARTCHAR uni9409 +ENCODING 37897 +BBX 15 15 1 -1 +BITMAP +1000 +2BDE +2652 +43DE +FE10 +1252 +11CE +FC88 +11FC +9488 +5488 +53FE +1C40 +3088 +C306 +ENDCHAR +STARTCHAR uni940A +ENCODING 37898 +BBX 15 16 0 -2 +BITMAP +2000 +277C +5544 +4D7C +8544 +757C +2600 +25FE +F540 +257E +A5AA +752A +264A +3492 +C42A +0444 +ENDCHAR +STARTCHAR uni940B +ENCODING 37899 +BBX 15 16 0 -2 +BITMAP +2000 +227C +5144 +497C +8444 +7A7C +2200 +21FE +F940 +227E +2EAA +B32A +624A +3A92 +E22A +0044 +ENDCHAR +STARTCHAR uni940C +ENCODING 37900 +BBX 15 16 0 -2 +BITMAP +2080 +20F8 +5108 +4BFE +8512 +7922 +21FE +2040 +F8A2 +2354 +2898 +B334 +6054 +3892 +E350 +0020 +ENDCHAR +STARTCHAR uni940D +ENCODING 37901 +BBX 14 16 0 -2 +BITMAP +11F8 +1050 +2820 +27FC +40A4 +B928 +12A0 +1040 +FDFC +1154 +958C +5974 +5154 +1D74 +E104 +410C +ENDCHAR +STARTCHAR uni940E +ENCODING 37902 +BBX 15 16 0 -2 +BITMAP +1090 +1088 +29FE +2510 +4310 +BDFE +1110 +1110 +FDFE +1110 +9510 +59FE +5100 +1EA4 +E252 +4452 +ENDCHAR +STARTCHAR uni940F +ENCODING 37903 +BBX 15 15 1 -1 +BITMAP +1098 +2904 +22FA +4050 +FDFC +1154 +119C +FD04 +11FC +9504 +55FC +5008 +1DFE +3088 +C058 +ENDCHAR +STARTCHAR uni9410 +ENCODING 37904 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4050 +FD54 +1088 +11FC +FF06 +11FC +9504 +55FC +5020 +1CA8 +3326 +C060 +ENDCHAR +STARTCHAR uni9411 +ENCODING 37905 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +5108 +493E +8248 +7B88 +209C +2100 +FA40 +23DC +2814 +B054 +62B4 +3A94 +E21C +0014 +ENDCHAR +STARTCHAR uni9412 +ENCODING 37906 +BBX 15 16 0 -2 +BITMAP +2088 +22AA +22DC +5488 +8954 +7222 +2000 +23FE +FA42 +2444 +2BFC +B044 +6044 +3884 +E114 +0208 +ENDCHAR +STARTCHAR uni9413 +ENCODING 37907 +BBX 15 15 1 -1 +BITMAP +2110 +5110 +4FD0 +801E +FFD4 +2464 +27D4 +F014 +27D4 +A894 +A908 +67C8 +2914 +3124 +C742 +ENDCHAR +STARTCHAR uni9414 +ENCODING 37908 +BBX 15 15 1 -1 +BITMAP +1000 +2BFE +2450 +41FC +FD54 +11FC +1000 +FCF8 +1088 +94F8 +5488 +50F8 +1C20 +33FE +C020 +ENDCHAR +STARTCHAR uni9415 +ENCODING 37909 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +5088 +4AA8 +83FE +7988 +22DA +24A6 +F9F8 +2108 +2908 +B1F8 +6108 +3908 +E1F8 +0108 +ENDCHAR +STARTCHAR uni9416 +ENCODING 37910 +BBX 15 15 1 -1 +BITMAP +1128 +2928 +2630 +42B4 +FD28 +12F6 +137A +FC24 +13FE +9620 +5624 +5318 +1E92 +322A +C444 +ENDCHAR +STARTCHAR uni9417 +ENCODING 37911 +BBX 15 15 1 -1 +BITMAP +1000 +2BDE +2652 +43DE +FE52 +13DE +1202 +FEFA +128A +96FA +568A +52FA +1E8A +329A +C206 +ENDCHAR +STARTCHAR uni9418 +ENCODING 37912 +BBX 15 15 1 -1 +BITMAP +1020 +29FC +2488 +4050 +FDFE +1000 +11FC +FD24 +11FC +9524 +55FC +5020 +1DFC +3020 +C3FE +ENDCHAR +STARTCHAR uni9419 +ENCODING 37913 +BBX 15 15 1 -1 +BITMAP +1064 +292A +24B4 +4048 +FC84 +117A +1000 +FEFC +1084 +9484 +54FC +5048 +1C48 +3010 +C3FE +ENDCHAR +STARTCHAR uni941A +ENCODING 37914 +BBX 15 15 1 -1 +BITMAP +1000 +2BFE +2450 +4050 +FDDC +1104 +1104 +FDDC +1050 +9450 +57FE +5024 +1D52 +324A +C238 +ENDCHAR +STARTCHAR uni941B +ENCODING 37915 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2904 +25FC +4104 +B9FC +1020 +13FE +FC00 +11FC +9504 +59FC +5020 +1D24 +E222 +4060 +ENDCHAR +STARTCHAR uni941C +ENCODING 37916 +BBX 15 16 0 -2 +BITMAP +0820 +7F20 +223E +3E44 +0084 +3E28 +0410 +7E28 +0944 +2EC2 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni941D +ENCODING 37917 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +5400 +4E28 +8548 +77EE +2492 +2484 +F6A0 +26A8 +A7E8 +7488 +2494 +3514 +C924 +1242 +ENDCHAR +STARTCHAR uni941E +ENCODING 37918 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2804 +24FC +4004 +B9FC +1000 +11DC +FC94 +13DC +9408 +5BFE +5108 +1C88 +E0A8 +4010 +ENDCHAR +STARTCHAR uni941F +ENCODING 37919 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +2BDE +2488 +47FE +B888 +1154 +1222 +FDFC +1104 +9504 +59FC +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni9420 +ENCODING 37920 +BBX 15 16 0 -2 +BITMAP +2108 +2090 +53FC +4890 +8294 +7998 +2090 +27FE +F800 +21F8 +2908 +B108 +61F8 +3908 +E108 +01F8 +ENDCHAR +STARTCHAR uni9421 +ENCODING 37921 +BBX 15 15 1 -1 +BITMAP +1110 +2914 +27D2 +4110 +FFFE +1010 +13D0 +FE52 +1252 +97D4 +5454 +5248 +129A +39EA +C704 +ENDCHAR +STARTCHAR uni9422 +ENCODING 37922 +BBX 15 16 0 -2 +BITMAP +2288 +2108 +FABE +2008 +729C +A92A +2288 +2108 +06C0 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni9423 +ENCODING 37923 +BBX 15 16 0 -2 +BITMAP +1124 +10A8 +2BFE +2602 +40F8 +B888 +10F8 +100C +FDF0 +1020 +95FC +5820 +53FE +1C20 +E0A0 +4040 +ENDCHAR +STARTCHAR uni9424 +ENCODING 37924 +BBX 15 16 0 -2 +BITMAP +21F8 +2108 +51F8 +4D0A +85FA +750A +25FA +2402 +F79E +2090 +A090 +7F9E +2492 +3492 +C492 +0892 +ENDCHAR +STARTCHAR uni9425 +ENCODING 37925 +BBX 15 16 0 -2 +BITMAP +1088 +1050 +2BFE +2420 +41FC +B820 +13FE +1124 +FCA8 +13FE +9400 +59FC +5104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni9426 +ENCODING 37926 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +5252 +4BDE +8252 +7BDE +2202 +22FA +FA52 +2252 +2BFE +B252 +6252 +3A92 +E20A +0204 +ENDCHAR +STARTCHAR uni9427 +ENCODING 37927 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +5252 +4BDE +8252 +7BDE +2202 +22FA +FA8A +22FA +2A8A +B2FA +628A +3A02 +E20A +0204 +ENDCHAR +STARTCHAR uni9428 +ENCODING 37928 +BBX 15 16 0 -2 +BITMAP +1090 +17FC +2894 +27FC +4290 +BBFE +1112 +13FA +FD0E +11F8 +9508 +59F8 +5108 +1DF8 +E090 +4108 +ENDCHAR +STARTCHAR uni9429 +ENCODING 37929 +BBX 15 16 0 -2 +BITMAP +1044 +1224 +2928 +247E +4010 +B828 +134A +111C +FD28 +114C +951A +592A +5148 +1D10 +E2FE +4400 +ENDCHAR +STARTCHAR uni942A +ENCODING 37930 +BBX 15 16 0 -2 +BITMAP +1020 +103E +2820 +25FE +4122 +B9FC +1122 +117E +FD54 +117C +9554 +597C +5110 +1EFE +E222 +44C6 +ENDCHAR +STARTCHAR uni942B +ENCODING 37931 +BBX 15 15 1 -1 +BITMAP +1088 +2890 +25FE +4310 +FDFC +1110 +11FC +FD10 +11FE +9400 +55CE +514A +1D7A +3102 +C106 +ENDCHAR +STARTCHAR uni942C +ENCODING 37932 +BBX 15 16 0 -2 +BITMAP +2020 +213C +5120 +4BFE +8010 +7814 +23FE +2210 +FBF0 +2254 +2A54 +B2D4 +6368 +3C4A +E896 +0322 +ENDCHAR +STARTCHAR uni942D +ENCODING 37933 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +53FE +4A22 +82AA +7A22 +23FE +2272 +FAAA +2202 +2820 +B3FE +6050 +3888 +E104 +0602 +ENDCHAR +STARTCHAR uni942E +ENCODING 37934 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +5288 +4A50 +83FE +7A50 +22FC +2254 +FBFE +2254 +2AFC +B250 +62D8 +3D54 +E652 +0850 +ENDCHAR +STARTCHAR uni942F +ENCODING 37935 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +2BFE +24A8 +4022 +7DFA +9024 +1028 +7BFE +1040 +94FC +5984 +52FC +1C84 +E0FC +4084 +ENDCHAR +STARTCHAR uni9430 +ENCODING 37936 +BBX 15 16 0 -2 +BITMAP +10F8 +1088 +2888 +24F8 +4000 +B9DC +1154 +1154 +FDDC +1020 +95FE +5870 +50A8 +1D24 +E222 +4020 +ENDCHAR +STARTCHAR uni9431 +ENCODING 37937 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2850 +2488 +4104 +BAFA +1000 +1000 +FDDC +1154 +9554 +59DC +5088 +1C88 +E154 +4222 +ENDCHAR +STARTCHAR uni9432 +ENCODING 37938 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2554 +4154 +FDFC +1080 +11FE +FE42 +11FA +954A +55FA +5052 +1C7A +3384 +C018 +ENDCHAR +STARTCHAR uni9433 +ENCODING 37939 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2420 +43FE +FE22 +13BA +1222 +FDB8 +1000 +95FC +5524 +51FC +1D24 +3124 +C1FC +ENDCHAR +STARTCHAR uni9434 +ENCODING 37940 +BBX 15 15 1 -1 +BITMAP +1008 +2B88 +26BE +4280 +FEA2 +1392 +1214 +FE3E +13C8 +9648 +5A7E +5248 +1E48 +33C8 +C008 +ENDCHAR +STARTCHAR uni9435 +ENCODING 37941 +BBX 15 15 1 -1 +BITMAP +1110 +2914 +27D2 +4110 +FFFE +1010 +13D0 +FE52 +13D2 +9414 +57D4 +5108 +17DA +392A +C7C4 +ENDCHAR +STARTCHAR uni9436 +ENCODING 37942 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2554 +41FC +FC00 +13FE +1000 +FDFC +1104 +95FC +5452 +5094 +1D88 +30E4 +C182 +ENDCHAR +STARTCHAR uni9437 +ENCODING 37943 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +2888 +2400 +4148 +BBFE +1148 +1178 +FD00 +11FC +9420 +5BFE +5070 +1CA8 +E326 +4020 +ENDCHAR +STARTCHAR uni9438 +ENCODING 37944 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2554 +41FC +FC20 +11FC +1020 +FDFE +1088 +95FE +5420 +51FC +1C20 +3020 +C020 +ENDCHAR +STARTCHAR uni9439 +ENCODING 37945 +BBX 15 16 0 -2 +BITMAP +2000 +227C +5144 +4974 +8054 +7854 +26FE +2282 +FABA +22AA +2ABA +B282 +628A +3A84 +E500 +08FE +ENDCHAR +STARTCHAR uni943A +ENCODING 37946 +BBX 15 15 1 -1 +BITMAP +1124 +2924 +24A8 +43FE +FE02 +12FA +1088 +FCF8 +1000 +95FC +5524 +51FC +1D24 +3124 +C1FC +ENDCHAR +STARTCHAR uni943B +ENCODING 37947 +BBX 15 15 1 -1 +BITMAP +1040 +287C +2440 +43FE +FEB4 +13C2 +127E +FE00 +13FE +9660 +5BB2 +5254 +1DB8 +3454 +C1B2 +ENDCHAR +STARTCHAR uni943C +ENCODING 37948 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +2820 +2488 +43FE +B888 +11FC +1104 +FDFC +1104 +95FC +5904 +51FC +1C88 +E104 +4202 +ENDCHAR +STARTCHAR uni943D +ENCODING 37949 +BBX 15 16 0 -2 +BITMAP +1010 +1210 +297C +2410 +40FE +B844 +1328 +11FE +FD10 +117C +9510 +59FE +5110 +1D10 +E2FE +4400 +ENDCHAR +STARTCHAR uni943E +ENCODING 37950 +BBX 15 16 0 -2 +BITMAP +3E10 +22FE +3E44 +2028 +7EFE +A210 +3EFC +2310 +06C0 +1830 +EFEE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni943F +ENCODING 37951 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +29FC +2488 +4050 +BBFE +1000 +11FC +FD04 +11FC +9504 +59FC +5020 +1E94 +E28A +447A +ENDCHAR +STARTCHAR uni9440 +ENCODING 37952 +BBX 15 16 0 -2 +BITMAP +100E +11F0 +28A2 +2454 +41FE +B922 +1014 +1152 +FD4A +1238 +9440 +587C +5084 +1D48 +E030 +41CE +ENDCHAR +STARTCHAR uni9441 +ENCODING 37953 +BBX 15 15 1 -1 +BITMAP +1028 +2A8A +2652 +4326 +FE52 +138A +1222 +FFFE +1088 +970E +5480 +51FE +1E84 +3078 +C3CE +ENDCHAR +STARTCHAR uni9442 +ENCODING 37954 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +2820 +27FE +4020 +B9FC +11AC +1174 +FDFC +1020 +95FC +5820 +53FE +1C00 +E154 +422A +ENDCHAR +STARTCHAR uni9443 +ENCODING 37955 +BBX 15 16 0 -2 +BITMAP +1000 +11DC +2844 +2554 +40CC +B954 +1000 +1048 +FCFE +1190 +96FC +5890 +50FC +1C90 +E0FE +4080 +ENDCHAR +STARTCHAR uni9444 +ENCODING 37956 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4020 +FDFC +1000 +13FE +FC22 +11F8 +9400 +57FE +5004 +1FFE +32A4 +C38C +ENDCHAR +STARTCHAR uni9445 +ENCODING 37957 +BBX 15 15 1 -1 +BITMAP +1110 +2D54 +2954 +42A8 +FC46 +1000 +13FC +FA04 +1040 +97FE +5950 +5148 +1A44 +3442 +C040 +ENDCHAR +STARTCHAR uni9446 +ENCODING 37958 +BBX 15 16 0 -2 +BITMAP +2144 +2144 +5554 +4B64 +814E +7BE4 +2004 +222C +F944 +23E4 +2884 +B3E4 +6084 +38E4 +E714 +0008 +ENDCHAR +STARTCHAR uni9447 +ENCODING 37959 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +53FE +4888 +8052 +77AC +22AA +22A8 +F5AC +2000 +A104 +71FC +2104 +31FC +C104 +0204 +ENDCHAR +STARTCHAR uni9448 +ENCODING 37960 +BBX 15 16 0 -2 +BITMAP +2000 +27FC +2248 +5444 +8FFE +7444 +26EC +2554 +FEEC +2444 +2EEC +B554 +66EC +3C44 +E454 +0408 +ENDCHAR +STARTCHAR uni9449 +ENCODING 37961 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +2888 +2420 +41FC +B820 +13FE +1040 +FC88 +11FC +9400 +59FC +5154 +1D54 +E7FE +4000 +ENDCHAR +STARTCHAR uni944A +ENCODING 37962 +BBX 15 15 1 -1 +BITMAP +1084 +2BFE +2488 +41FE +FD10 +13FC +1110 +FDFC +1110 +95FE +5400 +53FE +1C88 +3070 +C38E +ENDCHAR +STARTCHAR uni944B +ENCODING 37963 +BBX 15 16 0 -2 +BITMAP +1000 +FEFE +1054 +7CA8 +5454 +7C7C +5410 +FEFE +1100 +06C0 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni944C +ENCODING 37964 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +53FE +4A02 +81FC +7948 +2250 +21FC +FB04 +21FC +2904 +B1FC +6104 +39FC +E088 +0104 +ENDCHAR +STARTCHAR uni944D +ENCODING 37965 +BBX 15 16 0 -2 +BITMAP +3EF8 +2288 +3EF8 +2288 +3EF8 +2288 +3EF8 +1450 +2388 +06C0 +1830 +EFEE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni944E +ENCODING 37966 +BBX 15 16 0 -2 +BITMAP +23FE +2220 +52FC +4AA4 +82FC +7A20 +23FE +2284 +FAFC +2284 +2AFC +B284 +62FC +3A48 +E284 +03FE +ENDCHAR +STARTCHAR uni944F +ENCODING 37967 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2BFE +2622 +4154 +B94A +123A +1000 +FDFC +1154 +97FE +5800 +51FC +1C20 +E0A0 +4040 +ENDCHAR +STARTCHAR uni9450 +ENCODING 37968 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +2820 +27FE +4222 +B9AC +1020 +11AC +FC00 +13FE +9420 +59FC +5154 +1D54 +E154 +410C +ENDCHAR +STARTCHAR uni9451 +ENCODING 37969 +BBX 15 15 1 -1 +BITMAP +1008 +2BE8 +269E +43F0 +FE20 +13E0 +129E +FE80 +13E0 +9400 +55FC +5154 +1D54 +3154 +C3FE +ENDCHAR +STARTCHAR uni9452 +ENCODING 37970 +BBX 15 15 1 -1 +BITMAP +0040 +7EFE +4900 +7E7C +4200 +7EFE +48AA +7EFE +0380 +0C60 +F7DE +0100 +3FF8 +0920 +FFFE +ENDCHAR +STARTCHAR uni9453 +ENCODING 37971 +BBX 15 15 1 -1 +BITMAP +1210 +2910 +247C +4054 +FEFE +1100 +107C +FF44 +117C +9540 +557C +5144 +1D7C +3280 +C47E +ENDCHAR +STARTCHAR uni9454 +ENCODING 37972 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +53FE +4A02 +8514 +79DE +2252 +2554 +FA88 +2174 +2A02 +B1FC +6020 +3924 +E222 +0060 +ENDCHAR +STARTCHAR uni9455 +ENCODING 37973 +BBX 15 16 0 -2 +BITMAP +2042 +239C +5210 +4BDE +8294 +7A94 +2420 +23FC +FA04 +23FC +2A04 +B3FC +6204 +3BFC +E108 +0204 +ENDCHAR +STARTCHAR uni9456 +ENCODING 37974 +BBX 15 16 0 -2 +BITMAP +2108 +27FE +5108 +4800 +83FC +7A94 +2294 +23FC +F828 +23FE +2A20 +B324 +62A8 +3A92 +E42A +08C6 +ENDCHAR +STARTCHAR uni9457 +ENCODING 37975 +BBX 15 16 0 -2 +BITMAP +1050 +1190 +289E +27EA +408A +B9D2 +128A +10A4 +FC50 +1088 +9726 +58A8 +5070 +1CA8 +E124 +4060 +ENDCHAR +STARTCHAR uni9458 +ENCODING 37976 +BBX 15 16 0 -2 +BITMAP +23F8 +2248 +5248 +4BF8 +8248 +7248 +23F8 +2000 +FFBE +2AAA +AAAA +7FBE +2AAA +3AAA +CFBE +08A2 +ENDCHAR +STARTCHAR uni9459 +ENCODING 37977 +BBX 15 16 0 -2 +BITMAP +2394 +2110 +27BE +5118 +8BAA +7546 +2218 +23E0 +FA04 +21FC +2800 +B3F8 +6208 +3BF8 +E208 +03F8 +ENDCHAR +STARTCHAR uni945A +ENCODING 37978 +BBX 15 15 1 -1 +BITMAP +2108 +57BE +4908 +8FFE +FB18 +22A4 +2442 +FBFC +2204 +ABFC +AA04 +63FC +2E04 +33FC +C606 +ENDCHAR +STARTCHAR uni945B +ENCODING 37979 +BBX 15 15 1 -1 +BITMAP +2020 +5020 +4FFE +8488 +FDFC +2488 +27FE +FC20 +25FC +A524 +ADFC +6524 +29FC +3088 +C306 +ENDCHAR +STARTCHAR uni945C +ENCODING 37980 +BBX 15 16 0 -2 +BITMAP +1124 +10A8 +2BFE +2602 +40F8 +B888 +11FC +1104 +FDFC +1104 +95FC +5904 +51FC +1C00 +E088 +4104 +ENDCHAR +STARTCHAR uni945D +ENCODING 37981 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +5088 +4820 +823C +7944 +2038 +20D6 +FB38 +2110 +297C +B110 +617E +3910 +E310 +04FE +ENDCHAR +STARTCHAR uni945E +ENCODING 37982 +BBX 15 15 1 -1 +BITMAP +2244 +5488 +4A44 +83F8 +FAA8 +2248 +22A8 +FBF8 +2000 +AB68 +AAD8 +6368 +2ED8 +336A +C6C6 +ENDCHAR +STARTCHAR uni945F +ENCODING 37983 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +2820 +25FC +4000 +BBFE +1252 +13FE +FD04 +11FC +9504 +59FC +5104 +1DFC +E088 +4104 +ENDCHAR +STARTCHAR uni9460 +ENCODING 37984 +BBX 15 15 1 -1 +BITMAP +1248 +1290 +2CE0 +45A8 +FAF0 +24A4 +2BAC +FCF2 +2040 +A7FE +A950 +6948 +2244 +3442 +C040 +ENDCHAR +STARTCHAR uni9461 +ENCODING 37985 +BBX 15 16 0 -2 +BITMAP +2020 +2120 +513C +4920 +87FE +7890 +2294 +236C +FA04 +23FC +2A94 +B294 +636C +3A04 +E3FC +0004 +ENDCHAR +STARTCHAR uni9462 +ENCODING 37986 +BBX 15 15 1 -1 +BITMAP +1020 +283C +2420 +43FE +FE42 +13F8 +1242 +FEFE +12A8 +96F8 +56A8 +52F8 +1D20 +3254 +C23A +ENDCHAR +STARTCHAR uni9463 +ENCODING 37987 +BBX 15 15 1 -1 +BITMAP +1020 +2BFE +2690 +43FE +FE92 +13FE +1200 +FE94 +12F8 +9690 +5AF2 +538E +1D00 +3254 +C42A +ENDCHAR +STARTCHAR uni9464 +ENCODING 37988 +BBX 15 16 0 -2 +BITMAP +11FC +1104 +29FC +2504 +41FC +7C88 +91FC +1088 +7BFE +1088 +9524 +5AAA +5070 +1CA8 +E124 +4060 +ENDCHAR +STARTCHAR uni9465 +ENCODING 37989 +BBX 15 16 0 -2 +BITMAP +1080 +11F8 +2A08 +25FC +4124 +B9FC +1124 +11FC +FD54 +122A +95FC +5904 +51FC +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni9466 +ENCODING 37990 +BBX 15 16 0 -2 +BITMAP +27DE +2512 +27D2 +5454 +8FC8 +7514 +27E2 +2000 +FBFC +2204 +2BFC +B204 +63FC +3A04 +E3FC +0108 +ENDCHAR +STARTCHAR uni9467 +ENCODING 37991 +BBX 15 16 0 -2 +BITMAP +1020 +13FE +2A8A +25FC +4088 +B9FC +1104 +11FC +FD04 +11FC +9504 +59FC +5090 +1C94 +E112 +420E +ENDCHAR +STARTCHAR uni9468 +ENCODING 37992 +BBX 15 16 0 -2 +BITMAP +2110 +2090 +53DE +4810 +825E +7982 +23DE +2010 +FBDE +2250 +2BDE +B250 +63DE +3A50 +E252 +02CE +ENDCHAR +STARTCHAR uni9469 +ENCODING 37993 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +5020 +4BAE +82AA +7AAA +23AE +2020 +FBFE +2020 +2BAE +B2AA +62AA +3BAE +E020 +03FE +ENDCHAR +STARTCHAR uni946A +ENCODING 37994 +BBX 15 15 1 -1 +BITMAP +1020 +283C +2420 +43FE +FE42 +13F8 +1242 +FEFE +12A8 +96F8 +52A8 +55FC +1954 +3154 +C3FE +ENDCHAR +STARTCHAR uni946B +ENCODING 37995 +BBX 15 15 1 -1 +BITMAP +0100 +06C0 +1830 +EFEE +0100 +3FFC +0920 +7FFE +1010 +2828 +FEFE +1010 +FEFE +5454 +FFFE +ENDCHAR +STARTCHAR uni946C +ENCODING 37996 +BBX 15 16 0 -2 +BITMAP +13D0 +1290 +2BDE +2668 +43C4 +BA84 +13F8 +1108 +FDF8 +1108 +95F8 +5908 +51F8 +1C90 +E112 +460E +ENDCHAR +STARTCHAR uni946D +ENCODING 37997 +BBX 14 15 1 -1 +BITMAP +27BC +54A4 +4FBC +84A4 +F7BC +2444 +25F4 +F444 +25F4 +2D54 +B5F4 +6554 +2DF4 +3554 +C64C +ENDCHAR +STARTCHAR uni946E +ENCODING 37998 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +2088 +5412 +8AFE +7010 +24FE +2292 +FAFE +2092 +29FE +B292 +6604 +3AFE +E244 +022C +ENDCHAR +STARTCHAR uni946F +ENCODING 37999 +BBX 15 15 1 -1 +BITMAP +1150 +2954 +22B4 +42B2 +F810 +17FE +1290 +FED4 +1294 +9ED4 +5A98 +56C8 +1A9A +33EA +CE44 +ENDCHAR +STARTCHAR uni9470 +ENCODING 38000 +BBX 15 15 1 -1 +BITMAP +1040 +28A0 +2518 +4606 +F9F8 +2000 +2EEE +FAAA +2EEE +A000 +AFFC +6524 +2FFC +3524 +C52C +ENDCHAR +STARTCHAR uni9471 +ENCODING 38001 +BBX 15 15 1 -1 +BITMAP +10F0 +2920 +27FC +4204 +FFFC +1110 +11DC +FD12 +13CE +9400 +57FC +5244 +1FFC +312A +C61E +ENDCHAR +STARTCHAR uni9472 +ENCODING 38002 +BBX 15 15 1 -1 +BITMAP +2040 +5040 +4FFE +84A4 +FFBC +2110 +27FC +F910 +27FC +A910 +AFFC +6090 +2F94 +30E8 +C386 +ENDCHAR +STARTCHAR uni9473 +ENCODING 38003 +BBX 15 16 0 -2 +BITMAP +2040 +27FE +5492 +4BFC +8090 +7BFC +2090 +27FE +F908 +23FC +2D0A +B1F8 +6240 +3A7C +E540 +08FE +ENDCHAR +STARTCHAR uni9474 +ENCODING 38004 +BBX 15 16 0 -2 +BITMAP +2222 +23FE +2090 +51FE +8B10 +75FE +2110 +21FE +F910 +21FE +2900 +B3FE +628A +3B76 +E252 +0276 +ENDCHAR +STARTCHAR uni9475 +ENCODING 38005 +BBX 15 15 1 -1 +BITMAP +1088 +2BFE +2488 +41DC +FD54 +11DC +1088 +FC90 +11FC +9720 +55FC +5120 +1DFC +3120 +C1FE +ENDCHAR +STARTCHAR uni9476 +ENCODING 38006 +BBX 15 16 0 -2 +BITMAP +2090 +2090 +57FE +4894 +800A +71FE +2508 +27E8 +F14A +21EA +AF2A +75EA +254C +39EA +C216 +0462 +ENDCHAR +STARTCHAR uni9477 +ENCODING 38007 +BBX 15 15 1 -1 +BITMAP +2000 +53FC +4890 +80F0 +F89C +23F0 +2010 +FFFE +2294 +AB9C +AA94 +639C +2AD6 +37BC +C084 +ENDCHAR +STARTCHAR uni9478 +ENCODING 38008 +BBX 15 16 0 -2 +BITMAP +27FC +2444 +57FC +4C44 +87FC +7000 +2FBE +2AAA +FFBE +2AAA +AFBE +7040 +2040 +37FC +C040 +0FFE +ENDCHAR +STARTCHAR uni9479 +ENCODING 38009 +BBX 15 16 0 -2 +BITMAP +2040 +27FE +5492 +4908 +8080 +7B1C +2204 +239C +FA04 +23FC +2A48 +B368 +6248 +3B6A +E246 +0362 +ENDCHAR +STARTCHAR uni947A +ENCODING 38010 +BBX 15 16 0 -2 +BITMAP +23DE +2252 +53DE +4A52 +83DE +7A52 +23DE +2090 +F9FE +2110 +2BFE +B510 +61FE +3910 +E1FE +0100 +ENDCHAR +STARTCHAR uni947B +ENCODING 38011 +BBX 15 16 0 -2 +BITMAP +22A8 +2248 +57BE +4AA8 +875C +7AAA +2288 +2FFE +F218 +25E4 +A842 +73F8 +2040 +37FC +C040 +00C0 +ENDCHAR +STARTCHAR uni947C +ENCODING 38012 +BBX 15 15 1 -1 +BITMAP +2000 +57FE +4C92 +8492 +FFFE +2224 +247E +FD48 +22FC +A548 +AEC8 +6A7C +26C8 +3A48 +C27E +ENDCHAR +STARTCHAR uni947D +ENCODING 38013 +BBX 15 15 1 -1 +BITMAP +2528 +57BE +4948 +8FFE +FA94 +22D4 +24A6 +FBFC +2204 +ABFC +AA04 +63FC +2E04 +33FC +C606 +ENDCHAR +STARTCHAR uni947E +ENCODING 38014 +BBX 15 15 1 -1 +BITMAP +2108 +2108 +47D0 +D034 +2388 +5816 +EBBA +2288 +6AAC +A38A +0D60 +F11E +0FE0 +1110 +FFFE +ENDCHAR +STARTCHAR uni947F +ENCODING 38015 +BBX 15 15 1 -1 +BITMAP +94B8 +5528 +FFA8 +224E +7F00 +2A7C +4944 +6B28 +4938 +7FC6 +1960 +E11E +0FE0 +1110 +FFFE +ENDCHAR +STARTCHAR uni9480 +ENCODING 38016 +BBX 15 16 0 -2 +BITMAP +2108 +21EC +510A +4FEA +8928 +7BC8 +293E +2FE8 +F948 +2BE8 +AA28 +7B68 +2AA8 +3BF4 +CAB4 +12A2 +ENDCHAR +STARTCHAR uni9481 +ENCODING 38017 +BBX 15 15 1 -1 +BITMAP +2000 +57BC +4CA4 +87BC +FCA4 +27FE +2220 +FFFC +2220 +ABFC +AA20 +63FE +2D08 +30F0 +C70E +ENDCHAR +STARTCHAR uni9482 +ENCODING 38018 +BBX 15 16 0 -2 +BITMAP +2248 +2150 +57FC +4C04 +81F0 +7110 +27FC +2554 +F4E4 +27FC +A040 +77FC +2040 +3FFE +C2A4 +0452 +ENDCHAR +STARTCHAR uni9483 +ENCODING 38019 +BBX 15 16 0 -2 +BITMAP +23FE +2202 +53FE +4A92 +8254 +7A92 +22FE +22AA +FAFE +2322 +2AFA +B2AA +62FA +3A22 +E5FA +0004 +ENDCHAR +STARTCHAR uni9484 +ENCODING 38020 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +5088 +4BDE +8252 +7BDE +2252 +23DE +FA22 +23FE +2AAA +B2FA +6222 +3A72 +E2AA +0224 +ENDCHAR +STARTCHAR uni9485 +ENCODING 38021 +BBX 7 15 0 -1 +BITMAP +10 +10 +1E +20 +20 +7C +90 +10 +FE +10 +10 +12 +14 +18 +10 +ENDCHAR +STARTCHAR uni9486 +ENCODING 38022 +BBX 14 15 0 -1 +BITMAP +1080 +1080 +1E80 +2080 +2080 +7C80 +9080 +1080 +FE80 +1080 +1080 +1284 +1484 +1884 +107C +ENDCHAR +STARTCHAR uni9487 +ENCODING 38023 +BBX 14 15 0 -1 +BITMAP +1000 +1000 +3DFC +2008 +4010 +BC20 +1040 +1040 +FC80 +1080 +1100 +1104 +1504 +1904 +10FC +ENDCHAR +STARTCHAR uni9488 +ENCODING 38024 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1E20 +2020 +2020 +7C20 +93FE +1020 +FE20 +1020 +1020 +1220 +1420 +1820 +1020 +0020 +ENDCHAR +STARTCHAR uni9489 +ENCODING 38025 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +3DFE +2020 +4020 +BC20 +1020 +1020 +FC20 +1020 +1020 +1020 +1420 +1820 +10A0 +0040 +ENDCHAR +STARTCHAR uni948A +ENCODING 38026 +BBX 14 16 0 -2 +BITMAP +1004 +1004 +1E04 +2044 +2044 +7C44 +9044 +1044 +FE44 +1044 +1044 +1204 +1404 +1804 +1014 +0008 +ENDCHAR +STARTCHAR uni948B +ENCODING 38027 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +1E40 +2040 +2040 +7C60 +9050 +1048 +FE44 +1044 +1040 +1240 +1440 +1840 +1040 +0040 +ENDCHAR +STARTCHAR uni948C +ENCODING 38028 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +1E04 +2008 +2010 +7C20 +9020 +1020 +FE20 +1020 +1020 +1220 +1420 +1820 +10A0 +0040 +ENDCHAR +STARTCHAR uni948D +ENCODING 38029 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +3C20 +2020 +4020 +BC20 +11FC +1020 +FC20 +1020 +1020 +1020 +1420 +1820 +13FE +ENDCHAR +STARTCHAR uni948E +ENCODING 38030 +BBX 15 16 0 -2 +BITMAP +1008 +103C +3DE0 +2020 +4020 +BC20 +1020 +13FE +FC20 +1020 +1020 +1020 +1420 +1820 +1020 +0020 +ENDCHAR +STARTCHAR uni948F +ENCODING 38031 +BBX 14 16 0 -2 +BITMAP +1104 +1124 +3D24 +2124 +4124 +BD24 +1124 +1124 +FD24 +1124 +1124 +1124 +1524 +1A24 +1204 +0404 +ENDCHAR +STARTCHAR uni9490 +ENCODING 38032 +BBX 14 16 0 -2 +BITMAP +1008 +1008 +1E10 +2020 +2040 +7C88 +9008 +1010 +FE20 +1044 +1084 +1208 +1410 +1820 +10C0 +0300 +ENDCHAR +STARTCHAR uni9491 +ENCODING 38033 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +3C84 +2088 +4088 +BC90 +109C +1084 +FD44 +1144 +1128 +1128 +1610 +1A28 +1444 +0182 +ENDCHAR +STARTCHAR uni9492 +ENCODING 38034 +BBX 15 16 0 -2 +BITMAP +1000 +11F0 +3D10 +2110 +4110 +BD10 +1190 +1150 +FD50 +1110 +1110 +1112 +1512 +1A12 +120E +0400 +ENDCHAR +STARTCHAR uni9493 +ENCODING 38035 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +3C80 +20FC +4104 +BE04 +1004 +1104 +FC84 +1044 +1044 +1004 +1404 +1804 +1028 +0010 +ENDCHAR +STARTCHAR uni9494 +ENCODING 38036 +BBX 15 16 0 -2 +BITMAP +1080 +1040 +3C5E +2102 +4102 +BD02 +1102 +1102 +FD02 +1102 +1102 +1102 +1502 +1902 +110A +0104 +ENDCHAR +STARTCHAR uni9495 +ENCODING 38037 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3C40 +2040 +43FE +BC88 +1088 +1088 +FC88 +1108 +1090 +1050 +1420 +1850 +1088 +0304 +ENDCHAR +STARTCHAR uni9496 +ENCODING 38038 +BBX 14 16 0 -2 +BITMAP +1000 +11F8 +3C10 +2020 +4040 +BC80 +11FC +1054 +FC54 +1094 +1124 +1024 +1444 +1884 +1128 +0010 +ENDCHAR +STARTCHAR uni9497 +ENCODING 38039 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +3D04 +2144 +4124 +BCA8 +1088 +1088 +FC50 +1050 +1020 +1020 +1450 +1888 +1104 +0602 +ENDCHAR +STARTCHAR uni9498 +ENCODING 38040 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +3C88 +2088 +4088 +BC88 +1088 +13FE +FC88 +1088 +1088 +1088 +1488 +1908 +1108 +0208 +ENDCHAR +STARTCHAR uni9499 +ENCODING 38041 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +3C20 +2020 +4120 +BD3E +1120 +1120 +FD20 +11FE +1002 +1002 +1402 +1802 +1014 +0008 +ENDCHAR +STARTCHAR uni949A +ENCODING 38042 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +3DFE +2010 +4010 +BC20 +1020 +1068 +FCA4 +1122 +1222 +1020 +1420 +1820 +1020 +0020 +ENDCHAR +STARTCHAR uni949B +ENCODING 38043 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1E20 +2020 +2020 +7DFE +9020 +1020 +FE20 +1050 +1050 +1250 +1488 +18C8 +1124 +0202 +ENDCHAR +STARTCHAR uni949C +ENCODING 38044 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +3D00 +2100 +4100 +BDFC +1104 +1104 +FD04 +1104 +11FC +1100 +1500 +1900 +11FE +ENDCHAR +STARTCHAR uni949D +ENCODING 38045 +BBX 15 15 0 -1 +BITMAP +2040 +2040 +3840 +27FC +4040 +7A48 +A248 +2248 +FA48 +23F8 +2048 +2040 +2842 +3042 +203E +ENDCHAR +STARTCHAR uni949E +ENCODING 38046 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3C20 +20A8 +40A4 +BCA2 +1122 +1120 +FE24 +1024 +1028 +1008 +1410 +1820 +10C0 +0300 +ENDCHAR +STARTCHAR uni949F +ENCODING 38047 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +3C20 +2020 +41FC +BD24 +1124 +1124 +FD24 +11FC +1124 +1020 +1420 +1820 +1020 +0020 +ENDCHAR +STARTCHAR uni94A0 +ENCODING 38048 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3C20 +21FE +4122 +BD22 +1122 +1122 +FD52 +114A +118A +1102 +1502 +1902 +110A +0104 +ENDCHAR +STARTCHAR uni94A1 +ENCODING 38049 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +3D04 +2104 +4124 +BD24 +1124 +1124 +FD24 +1124 +1124 +1050 +1448 +1884 +1102 +0602 +ENDCHAR +STARTCHAR uni94A2 +ENCODING 38050 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +3D04 +2104 +4194 +BD54 +1154 +1124 +FD24 +1154 +1154 +1194 +1504 +1904 +1114 +0108 +ENDCHAR +STARTCHAR uni94A3 +ENCODING 38051 +BBX 15 16 0 -2 +BITMAP +1008 +101C +3DE0 +2100 +4100 +BDFC +1144 +1144 +FD44 +1128 +1128 +1110 +1510 +1A28 +1244 +0482 +ENDCHAR +STARTCHAR uni94A4 +ENCODING 38052 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3C50 +2050 +4088 +BD44 +1222 +1020 +FC00 +11FC +1004 +1008 +1408 +1810 +1010 +0020 +ENDCHAR +STARTCHAR uni94A5 +ENCODING 38053 +BBX 14 16 0 -2 +BITMAP +1000 +10FC +3C84 +2084 +4084 +BCFC +1084 +1084 +FC84 +10FC +1084 +1084 +1504 +1904 +1214 +0408 +ENDCHAR +STARTCHAR uni94A6 +ENCODING 38054 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3C40 +207C +4084 +BC88 +1120 +1020 +FC20 +1050 +1050 +1050 +1488 +1888 +1104 +0202 +ENDCHAR +STARTCHAR uni94A7 +ENCODING 38055 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +3C80 +20FC +4104 +BE04 +1084 +1044 +FC44 +1014 +1024 +1044 +1584 +1804 +1028 +0010 +ENDCHAR +STARTCHAR uni94A8 +ENCODING 38056 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +3CFC +2084 +4084 +BC84 +1094 +1088 +FC80 +10FE +1002 +1002 +15FA +1802 +1014 +0008 +ENDCHAR +STARTCHAR uni94A9 +ENCODING 38057 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +3C80 +20FC +4104 +BD04 +1244 +1044 +FC84 +10A4 +1114 +11F4 +1414 +1804 +1028 +0010 +ENDCHAR +STARTCHAR uni94AA +ENCODING 38058 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +3C00 +21FC +4000 +BC00 +10F0 +1090 +FC90 +1090 +1090 +1092 +1492 +1912 +110E +0200 +ENDCHAR +STARTCHAR uni94AB +ENCODING 38059 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +3C20 +23FE +4080 +BC80 +1080 +10FC +FC84 +1084 +1084 +1084 +1504 +1904 +1228 +0410 +ENDCHAR +STARTCHAR uni94AC +ENCODING 38060 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1E20 +2024 +20A4 +7CA4 +90A8 +1120 +FE20 +1050 +1050 +1250 +1488 +1888 +1104 +0202 +ENDCHAR +STARTCHAR uni94AD +ENCODING 38061 +BBX 15 16 0 -2 +BITMAP +1010 +1110 +3C90 +2090 +4010 +BD10 +1090 +1090 +FC10 +101E +13F0 +1010 +1410 +1810 +1010 +0010 +ENDCHAR +STARTCHAR uni94AE +ENCODING 38062 +BBX 15 15 0 -1 +BITMAP +1000 +11F8 +3C48 +2048 +4048 +BC48 +1048 +11F8 +FC88 +1088 +1088 +1088 +1488 +1888 +13FE +ENDCHAR +STARTCHAR uni94AF +ENCODING 38063 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +3D24 +2124 +4124 +BD24 +1124 +11FC +FD04 +1100 +1100 +1100 +1502 +1902 +10FE +ENDCHAR +STARTCHAR uni94B0 +ENCODING 38064 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +3DFC +2020 +4020 +BC20 +1020 +1020 +FDFC +1020 +1028 +1024 +1424 +1820 +13FE +ENDCHAR +STARTCHAR uni94B1 +ENCODING 38065 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +3C40 +205C +41E0 +BC40 +105E +11E0 +FC44 +1048 +1030 +1022 +1452 +188A +1306 +0002 +ENDCHAR +STARTCHAR uni94B2 +ENCODING 38066 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +3DFE +2010 +4010 +BC10 +1090 +1090 +FC9E +1090 +1090 +1090 +1490 +1890 +13FE +ENDCHAR +STARTCHAR uni94B3 +ENCODING 38067 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +3C88 +2088 +43FE +BC88 +1088 +1088 +FC88 +10F8 +1088 +1088 +1488 +1888 +10F8 +0088 +ENDCHAR +STARTCHAR uni94B4 +ENCODING 38068 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3C20 +2020 +43FE +BC20 +1020 +1020 +FDFC +1104 +1104 +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni94B5 +ENCODING 38069 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3C20 +2020 +41FE +BC70 +10A8 +10A8 +FD24 +1124 +1222 +10F8 +1420 +1820 +1020 +0020 +ENDCHAR +STARTCHAR uni94B6 +ENCODING 38070 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +3DFE +2008 +4008 +BDE8 +1128 +1128 +FD28 +1128 +11E8 +1128 +1408 +1808 +1028 +0010 +ENDCHAR +STARTCHAR uni94B7 +ENCODING 38071 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +3D00 +2100 +417C +BD44 +1144 +1144 +FD44 +1144 +117C +1144 +1500 +1900 +11FE +ENDCHAR +STARTCHAR uni94B8 +ENCODING 38072 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +3840 +23FE +4080 +78A0 +A120 +21FC +FB24 +2524 +2124 +2124 +2934 +3128 +2020 +0020 +ENDCHAR +STARTCHAR uni94B9 +ENCODING 38073 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +3C48 +2040 +43FE +BC80 +1080 +10FC +FD44 +1144 +1128 +1128 +1610 +1A28 +1444 +0182 +ENDCHAR +STARTCHAR uni94BA +ENCODING 38074 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +3824 +2020 +43FE +7A20 +A224 +2224 +FA24 +2228 +2228 +2290 +2B12 +322A +2046 +0082 +ENDCHAR +STARTCHAR uni94BB +ENCODING 38075 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3C20 +2020 +403E +BC20 +1020 +1020 +FDFC +1104 +1104 +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni94BC +ENCODING 38076 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +3D04 +2104 +4104 +BDFC +1104 +1104 +FD04 +11FC +1104 +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni94BD +ENCODING 38077 +BBX 15 15 0 -1 +BITMAP +1000 +1000 +3DFC +2104 +4104 +BD04 +11FC +1104 +FD04 +1104 +11FC +1104 +1400 +1800 +13FE +ENDCHAR +STARTCHAR uni94BE +ENCODING 38078 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +3D24 +2124 +4124 +BDFC +1124 +1124 +FD24 +11FC +1124 +1020 +1420 +1820 +1020 +0020 +ENDCHAR +STARTCHAR uni94BF +ENCODING 38079 +BBX 14 16 0 -2 +BITMAP +1000 +1000 +3DFC +2124 +4124 +BD24 +1124 +1124 +FDFC +1124 +1124 +1124 +1524 +1924 +11FC +0104 +ENDCHAR +STARTCHAR uni94C0 +ENCODING 38080 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +3C20 +2020 +41FC +BD24 +1124 +1124 +FD24 +11FC +1124 +1124 +1524 +1924 +11FC +0104 +ENDCHAR +STARTCHAR uni94C1 +ENCODING 38081 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3D20 +2120 +41FC +BD20 +1220 +1020 +FDFE +1020 +1050 +1050 +1488 +1888 +1104 +0202 +ENDCHAR +STARTCHAR uni94C2 +ENCODING 38082 +BBX 14 16 0 -2 +BITMAP +1020 +1020 +3C40 +21FC +4104 +BD04 +1104 +1104 +FDFC +1104 +1104 +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni94C3 +ENCODING 38083 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +38A0 +20A0 +4110 +7A48 +A426 +2020 +FBF8 +2008 +2010 +2110 +28A0 +3040 +2020 +0020 +ENDCHAR +STARTCHAR uni94C4 +ENCODING 38084 +BBX 15 16 0 -2 +BITMAP +2008 +203C +3BC0 +2200 +4220 +7A20 +A220 +23FE +F820 +2020 +2128 +2124 +2A22 +3422 +20A0 +0040 +ENDCHAR +STARTCHAR uni94C5 +ENCODING 38085 +BBX 15 16 0 -2 +BITMAP +1000 +10F8 +3C88 +2088 +4088 +BC88 +1106 +1200 +FC00 +11FC +1104 +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni94C6 +ENCODING 38086 +BBX 15 16 0 -2 +BITMAP +2000 +2080 +3B1E +2252 +4252 +7A52 +A252 +2252 +FA52 +22D2 +235A +2254 +2890 +3090 +2110 +0210 +ENDCHAR +STARTCHAR uni94C7 +ENCODING 38087 +BBX 15 15 0 -1 +BITMAP +1080 +1080 +3DFC +2104 +4204 +BDF4 +1114 +1114 +FD14 +11F4 +1104 +1128 +1512 +1902 +10FE +ENDCHAR +STARTCHAR uni94C8 +ENCODING 38088 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +3C00 +23FE +4020 +BC20 +11FC +1124 +FD24 +1124 +1124 +1124 +1534 +1928 +1020 +0020 +ENDCHAR +STARTCHAR uni94C9 +ENCODING 38089 +BBX 15 15 0 -1 +BITMAP +1020 +1010 +3C10 +21FE +4020 +BC20 +1044 +1084 +FDF8 +1010 +1020 +1044 +1482 +19FE +1082 +ENDCHAR +STARTCHAR uni94CA +ENCODING 38090 +BBX 15 15 0 -1 +BITMAP +1020 +1010 +3C10 +21FE +4102 +BE04 +1080 +1088 +FC90 +10A0 +10C0 +1082 +1482 +1882 +107E +ENDCHAR +STARTCHAR uni94CB +ENCODING 38091 +BBX 15 15 0 -1 +BITMAP +1040 +1020 +3C28 +2008 +4008 +BC48 +1054 +1152 +FD52 +1160 +1260 +1044 +14C4 +1944 +123C +ENDCHAR +STARTCHAR uni94CC +ENCODING 38092 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +3D04 +2104 +4104 +BDFC +1100 +1140 +FD44 +1148 +1170 +1140 +1542 +1A42 +123E +0400 +ENDCHAR +STARTCHAR uni94CD +ENCODING 38093 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +3C10 +21FE +4112 +BD14 +1110 +11FC +FD44 +1144 +1128 +1128 +1510 +1A28 +1244 +0482 +ENDCHAR +STARTCHAR uni94CE +ENCODING 38094 +BBX 15 16 0 -2 +BITMAP +1000 +13FC +3D04 +2088 +4050 +BC20 +10D8 +1326 +FC20 +11FC +1020 +1020 +17FE +1820 +1020 +0020 +ENDCHAR +STARTCHAR uni94CF +ENCODING 38095 +BBX 14 16 0 -2 +BITMAP +2004 +27C4 +3A84 +2294 +4294 +7A94 +A294 +27D4 +FA94 +2294 +2294 +2294 +2A84 +3484 +2494 +0888 +ENDCHAR +STARTCHAR uni94D0 +ENCODING 38096 +BBX 15 16 0 -2 +BITMAP +1040 +1044 +3DF4 +2048 +4050 +BDFE +1040 +1080 +FDFE +1240 +1480 +10FC +1404 +1804 +1028 +0010 +ENDCHAR +STARTCHAR uni94D1 +ENCODING 38097 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +3C44 +21F4 +4048 +BC50 +13FE +1040 +FC80 +1184 +1298 +10E0 +1482 +1882 +107E +ENDCHAR +STARTCHAR uni94D2 +ENCODING 38098 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +3C88 +2088 +4088 +BCF8 +1088 +1088 +FCF8 +1088 +1088 +109E +15E8 +1808 +1008 +0008 +ENDCHAR +STARTCHAR uni94D3 +ENCODING 38099 +BBX 15 15 0 -1 +BITMAP +1048 +1048 +3DFE +2048 +4048 +BC20 +1010 +11FE +FC80 +1080 +1080 +1080 +1480 +1880 +10FC +ENDCHAR +STARTCHAR uni94D4 +ENCODING 38100 +BBX 15 15 0 -1 +BITMAP +2000 +23FC +3890 +2090 +4090 +7892 +A492 +2294 +FA94 +2298 +2090 +2090 +2890 +3090 +27FE +ENDCHAR +STARTCHAR uni94D5 +ENCODING 38101 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3DFE +2040 +4040 +BCFC +1084 +1184 +FEFC +1084 +1084 +10FC +1484 +1884 +1094 +0088 +ENDCHAR +STARTCHAR uni94D6 +ENCODING 38102 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +3824 +2020 +43FE +7A20 +A224 +2224 +FBA4 +22A8 +22A8 +2290 +2A92 +35AA +2446 +0882 +ENDCHAR +STARTCHAR uni94D7 +ENCODING 38103 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3C20 +21FC +4020 +BD24 +10A4 +10A8 +FC20 +13FE +1050 +1050 +1488 +1888 +1104 +0202 +ENDCHAR +STARTCHAR uni94D8 +ENCODING 38104 +BBX 15 16 0 -2 +BITMAP +2000 +27DE +3892 +4492 +4494 +7C94 +A7D8 +2094 +F992 +2192 +2292 +2A9A +3494 +2890 +0290 +0110 +ENDCHAR +STARTCHAR uni94D9 +ENCODING 38105 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +38BC +23C0 +4050 +7824 +A0D4 +230C +F800 +23FE +2090 +2090 +2912 +3112 +220E +0400 +ENDCHAR +STARTCHAR uni94DA +ENCODING 38106 +BBX 15 15 0 -1 +BITMAP +1000 +11FE +3C20 +2040 +4088 +BD04 +11FE +1022 +FC20 +1020 +11FE +1020 +1420 +1820 +13FE +ENDCHAR +STARTCHAR uni94DB +ENCODING 38107 +BBX 14 16 0 -2 +BITMAP +1020 +1124 +3CA4 +20A4 +40A8 +BC20 +13FC +1004 +FC04 +1004 +11FC +1004 +1404 +1804 +13FC +0004 +ENDCHAR +STARTCHAR uni94DC +ENCODING 38108 +BBX 14 16 0 -2 +BITMAP +2000 +23FC +3A04 +2204 +42F4 +7A04 +A204 +22F4 +FA94 +2294 +2294 +22F4 +2A04 +3204 +2214 +0208 +ENDCHAR +STARTCHAR uni94DD +ENCODING 38109 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +3C84 +2084 +4084 +BC84 +10FC +1000 +FC00 +11FE +1102 +1102 +1502 +1902 +11FE +0102 +ENDCHAR +STARTCHAR uni94DE +ENCODING 38110 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +3904 +2104 +41FC +7820 +A020 +23FE +FA22 +2222 +2222 +2222 +2A2A +3224 +2020 +0020 +ENDCHAR +STARTCHAR uni94DF +ENCODING 38111 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +3A02 +2222 +4222 +7A22 +A3FE +2222 +FA22 +2252 +224A +228A +2B02 +3202 +23FE +0202 +ENDCHAR +STARTCHAR uni94E0 +ENCODING 38112 +BBX 15 15 0 -1 +BITMAP +1020 +1124 +3D24 +2124 +41FC +BC00 +11FC +1004 +FC04 +11FC +1100 +1100 +1502 +1902 +10FE +ENDCHAR +STARTCHAR uni94E1 +ENCODING 38113 +BBX 15 16 0 -2 +BITMAP +2002 +23E2 +3A22 +222A +42AA +7AAA +A2AA +22AA +FAAA +22AA +22AA +2082 +2942 +3122 +220A +0404 +ENDCHAR +STARTCHAR uni94E2 +ENCODING 38114 +BBX 15 16 0 -2 +BITMAP +2020 +2120 +3920 +21FC +4120 +7A20 +A020 +23FE +F870 +20A8 +20A8 +2124 +2924 +3222 +2020 +0020 +ENDCHAR +STARTCHAR uni94E3 +ENCODING 38115 +BBX 15 16 0 -2 +BITMAP +1020 +1120 +3D20 +21FC +4120 +BE20 +1020 +13FE +FC90 +1090 +1090 +1090 +1512 +1912 +1212 +040E +ENDCHAR +STARTCHAR uni94E4 +ENCODING 38116 +BBX 15 16 0 -2 +BITMAP +2000 +2006 +3BB8 +2088 +4088 +7908 +A13E +2388 +F888 +2288 +2288 +213E +2900 +3280 +247E +0800 +ENDCHAR +STARTCHAR uni94E5 +ENCODING 38117 +BBX 15 16 0 -2 +BITMAP +1008 +103C +3DE0 +2020 +4020 +BDFC +1020 +1020 +FC20 +13FE +1020 +1040 +1488 +1904 +13FE +0102 +ENDCHAR +STARTCHAR uni94E6 +ENCODING 38118 +BBX 15 16 0 -2 +BITMAP +1008 +103C +3DE0 +2020 +4020 +BDFE +1020 +1020 +FC20 +11FC +1104 +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni94E7 +ENCODING 38119 +BBX 15 16 0 -2 +BITMAP +1090 +1094 +3D14 +2118 +4310 +BD32 +1152 +110E +FD20 +1020 +13FE +1020 +1420 +1820 +1020 +0020 +ENDCHAR +STARTCHAR uni94E8 +ENCODING 38120 +BBX 15 15 0 -1 +BITMAP +2040 +2040 +38A0 +2110 +4208 +7C06 +A3F8 +2040 +F840 +2040 +23F8 +2040 +2840 +3040 +27FE +ENDCHAR +STARTCHAR uni94E9 +ENCODING 38121 +BBX 15 16 0 -2 +BITMAP +1004 +1188 +3C50 +2020 +4050 +BC88 +1124 +1020 +FFFE +1020 +10A8 +10A4 +1522 +1A22 +10A0 +0040 +ENDCHAR +STARTCHAR uni94EA +ENCODING 38122 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +38A0 +2110 +4208 +7C06 +A3F8 +2000 +F800 +23F8 +2208 +2208 +2A08 +3208 +23F8 +0208 +ENDCHAR +STARTCHAR uni94EB +ENCODING 38123 +BBX 15 16 0 -2 +BITMAP +1050 +1050 +3C50 +2152 +40D4 +BC58 +1050 +1058 +FCD4 +1152 +1250 +1050 +1492 +1892 +1112 +020E +ENDCHAR +STARTCHAR uni94EC +ENCODING 38124 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3C78 +2088 +4150 +BC20 +1050 +1088 +FD06 +10F8 +1088 +1088 +1488 +1888 +10F8 +0088 +ENDCHAR +STARTCHAR uni94ED +ENCODING 38125 +BBX 14 16 0 -2 +BITMAP +1040 +1040 +3CFC +2104 +4288 +BC50 +1020 +1040 +FC80 +11FC +1284 +1084 +1484 +1884 +10FC +0084 +ENDCHAR +STARTCHAR uni94EE +ENCODING 38126 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +39F8 +2208 +4010 +7BFC +A024 +2024 +FBFE +2024 +2024 +23FC +2824 +3020 +20A0 +0040 +ENDCHAR +STARTCHAR uni94EF +ENCODING 38127 +BBX 15 15 0 -1 +BITMAP +1080 +1080 +3CF8 +2108 +4210 +BDFC +1124 +1124 +FD24 +11FC +1100 +1100 +1502 +1902 +10FE +ENDCHAR +STARTCHAR uni94F0 +ENCODING 38128 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +3C20 +21FE +4000 +BC88 +1104 +1202 +FC88 +1088 +1050 +1050 +1420 +1850 +1088 +0306 +ENDCHAR +STARTCHAR uni94F1 +ENCODING 38129 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +3C20 +23FE +4040 +BC40 +10A0 +10A2 +FDA4 +1298 +1490 +1088 +1484 +18A2 +10C0 +0080 +ENDCHAR +STARTCHAR uni94F2 +ENCODING 38130 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFC +2000 +4108 +7890 +A3FE +2200 +FA00 +2200 +2200 +2200 +2A00 +3400 +2400 +0800 +ENDCHAR +STARTCHAR uni94F3 +ENCODING 38131 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +3C20 +23FE +4040 +BC88 +1104 +13FE +FC92 +1090 +1090 +1090 +1512 +1912 +120E +0400 +ENDCHAR +STARTCHAR uni94F4 +ENCODING 38132 +BBX 15 16 0 -2 +BITMAP +2200 +217C +3904 +2408 +4210 +7A20 +A07E +212A +F92A +222A +264A +2252 +2A92 +3322 +224A +0084 +ENDCHAR +STARTCHAR uni94F5 +ENCODING 38133 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3820 +23FE +4202 +7C44 +A040 +23FE +F888 +2088 +2108 +20D0 +2820 +3050 +2088 +0304 +ENDCHAR +STARTCHAR uni94F6 +ENCODING 38134 +BBX 15 16 0 -2 +BITMAP +1000 +11F8 +3D08 +2108 +41F8 +BD08 +1108 +11F8 +FD44 +1148 +1130 +1120 +1510 +1948 +1186 +0100 +ENDCHAR +STARTCHAR uni94F7 +ENCODING 38135 +BBX 15 16 0 -2 +BITMAP +2100 +2100 +3900 +211E +47D2 +7A52 +A252 +2252 +FA52 +2492 +2292 +2112 +2A92 +325E +2452 +0800 +ENDCHAR +STARTCHAR uni94F8 +ENCODING 38136 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3DFC +2020 +40FC +BC20 +11FE +1048 +FC48 +10FE +1088 +1148 +1528 +1A08 +1028 +0010 +ENDCHAR +STARTCHAR uni94F9 +ENCODING 38137 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +3BFE +2088 +4000 +7BFE +A202 +2444 +F840 +23FC +2044 +2084 +2884 +3104 +2228 +0410 +ENDCHAR +STARTCHAR uni94FA +ENCODING 38138 +BBX 15 16 0 -2 +BITMAP +2048 +2044 +3BFE +2040 +4040 +7BFC +A244 +2244 +FBFC +2244 +2244 +23FC +2A44 +3244 +2254 +0208 +ENDCHAR +STARTCHAR uni94FB +ENCODING 38139 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +3C40 +2040 +41FC +BC84 +1084 +13FE +FC00 +1000 +11FC +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni94FC +ENCODING 38140 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +3820 +23FE +4020 +7924 +A0A4 +20A8 +FBFE +2070 +20A8 +20A8 +2924 +3222 +2420 +0020 +ENDCHAR +STARTCHAR uni94FD +ENCODING 38141 +BBX 15 16 0 -2 +BITMAP +2010 +2014 +3812 +2010 +43FE +7810 +A090 +2050 +F848 +2008 +2088 +22A8 +2A9A +32AA +2466 +0002 +ENDCHAR +STARTCHAR uni94FE +ENCODING 38142 +BBX 15 15 0 -1 +BITMAP +2010 +2210 +3910 +217E +4020 +7828 +A748 +217E +F908 +2108 +21FE +2108 +2908 +3288 +247E +ENDCHAR +STARTCHAR uni94FF +ENCODING 38143 +BBX 15 15 0 -1 +BITMAP +2080 +22FC +3AA4 +22A4 +42A8 +7A90 +A2A8 +20C6 +F820 +2020 +21FC +2020 +2820 +3020 +23FE +ENDCHAR +STARTCHAR uni9500 +ENCODING 38144 +BBX 14 16 0 -2 +BITMAP +1020 +1124 +3CA4 +20A8 +4020 +BDFC +1104 +1104 +FDFC +1104 +1104 +11FC +1504 +1904 +1114 +0108 +ENDCHAR +STARTCHAR uni9501 +ENCODING 38145 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +3CA4 +20A8 +4020 +BDFC +1104 +1124 +FD24 +1124 +1124 +1124 +1450 +1888 +1104 +0202 +ENDCHAR +STARTCHAR uni9502 +ENCODING 38146 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +3D24 +2124 +41FC +BD24 +1124 +11FC +FC20 +1020 +11FC +1020 +1420 +1820 +13FE +ENDCHAR +STARTCHAR uni9503 +ENCODING 38147 +BBX 15 15 0 -1 +BITMAP +1000 +11FC +3D04 +2104 +4104 +BDFC +1000 +1000 +FDFE +1020 +1020 +11FC +1420 +1820 +13FE +ENDCHAR +STARTCHAR uni9504 +ENCODING 38148 +BBX 15 16 0 -2 +BITMAP +2008 +2008 +3BC8 +2248 +425E +7A4A +A3CA +224A +FA4A +23CA +224A +224A +2A6A +33D2 +2612 +0026 +ENDCHAR +STARTCHAR uni9505 +ENCODING 38149 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +3904 +2104 +4104 +79FC +A020 +2020 +FBFE +2222 +2252 +228A +2B0A +3202 +220A +0204 +ENDCHAR +STARTCHAR uni9506 +ENCODING 38150 +BBX 15 16 0 -2 +BITMAP +2020 +2120 +3920 +21FC +4120 +7A20 +A020 +23FE +F800 +2000 +21FC +2104 +2904 +3104 +21FC +0104 +ENDCHAR +STARTCHAR uni9507 +ENCODING 38151 +BBX 15 16 0 -2 +BITMAP +2010 +20D8 +3B94 +2094 +4090 +7BFE +A090 +2094 +F894 +20D8 +2398 +2090 +28AA +30CA +2286 +0102 +ENDCHAR +STARTCHAR uni9508 +ENCODING 38152 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +3C20 +2020 +43FE +BCA8 +1124 +1222 +FDF8 +1088 +1090 +10BE +1502 +1902 +1214 +0408 +ENDCHAR +STARTCHAR uni9509 +ENCODING 38153 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +3D24 +2124 +4124 +BD24 +12AA +1472 +FC20 +1020 +11FC +1020 +1420 +1820 +13FE +ENDCHAR +STARTCHAR uni950A +ENCODING 38154 +BBX 15 16 0 -2 +BITMAP +1004 +101E +3DE0 +2022 +4112 +BC94 +1080 +1008 +FDFE +1008 +1088 +1048 +1448 +1808 +1028 +0010 +ENDCHAR +STARTCHAR uni950B +ENCODING 38155 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3CFC +2088 +4150 +BC20 +10D8 +1326 +FCF8 +1020 +10F8 +1020 +17FE +1820 +1020 +0020 +ENDCHAR +STARTCHAR uni950C +ENCODING 38156 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +3DFC +2000 +4088 +BC50 +13FE +1020 +FC20 +1020 +11FC +1020 +1420 +1820 +1020 +0020 +ENDCHAR +STARTCHAR uni950D +ENCODING 38157 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFC +2040 +4090 +7908 +A3FC +2004 +F950 +2150 +2150 +2150 +2A50 +3252 +2452 +080E +ENDCHAR +STARTCHAR uni950E +ENCODING 38158 +BBX 15 16 0 -2 +BITMAP +2100 +20BE +3A82 +2202 +42FA +7A52 +A252 +2252 +FBFE +2252 +2252 +2292 +2B12 +3202 +220A +0204 +ENDCHAR +STARTCHAR uni950F +ENCODING 38159 +BBX 15 16 0 -2 +BITMAP +2100 +20BE +3A82 +2202 +4202 +7AFA +A28A +228A +FAFA +228A +228A +22FA +2A02 +3202 +220A +0204 +ENDCHAR +STARTCHAR uni9510 +ENCODING 38160 +BBX 14 16 0 -2 +BITMAP +2208 +2108 +3910 +4020 +43F8 +7A08 +A208 +2208 +FBF8 +20A0 +20A0 +2920 +3124 +2224 +041C +0800 +ENDCHAR +STARTCHAR uni9511 +ENCODING 38161 +BBX 15 16 0 -2 +BITMAP +2108 +2088 +3890 +23FC +4024 +7824 +A3FC +2220 +FA20 +23FE +2062 +20A2 +292A +3224 +2420 +0020 +ENDCHAR +STARTCHAR uni9512 +ENCODING 38162 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +3DFC +2104 +4104 +BDFC +1104 +1104 +FDFC +1120 +1122 +1114 +1508 +1944 +1182 +0100 +ENDCHAR +STARTCHAR uni9513 +ENCODING 38163 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +3C04 +20FC +4004 +BDFC +1000 +13FE +FE02 +11F8 +1088 +1088 +1450 +1820 +10D8 +0306 +ENDCHAR +STARTCHAR uni9514 +ENCODING 38164 +BBX 14 16 0 -2 +BITMAP +2000 +23F8 +3A08 +4208 +43F8 +7A00 +A200 +23FC +FA04 +22F4 +2294 +2A94 +34F4 +2404 +0828 +0010 +ENDCHAR +STARTCHAR uni9515 +ENCODING 38165 +BBX 15 16 0 -2 +BITMAP +2000 +277E +3D04 +2504 +4574 +7D54 +A654 +2554 +FD54 +2554 +2574 +2554 +2E04 +3404 +2414 +0408 +ENDCHAR +STARTCHAR uni9516 +ENCODING 38166 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +3BFE +2020 +41FC +7820 +A3FE +2000 +F9FC +2104 +21FC +2104 +29FC +3104 +2114 +0108 +ENDCHAR +STARTCHAR uni9517 +ENCODING 38167 +BBX 15 16 0 -2 +BITMAP +2020 +2022 +39FA +2024 +4028 +7BFE +A020 +2040 +F8FC +2184 +2284 +20FC +2884 +3084 +20FC +0084 +ENDCHAR +STARTCHAR uni9518 +ENCODING 38168 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +3BFE +2088 +40A8 +7820 +A3FE +2040 +F880 +20FC +2184 +2284 +2884 +3084 +20FC +0084 +ENDCHAR +STARTCHAR uni9519 +ENCODING 38169 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +3910 +27FC +4110 +7910 +AFFE +2000 +FBF8 +2208 +2208 +23F8 +2A08 +3208 +23F8 +0208 +ENDCHAR +STARTCHAR uni951A +ENCODING 38170 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +3BFE +2088 +4088 +7800 +A1FC +2124 +F924 +2124 +21FC +2124 +2924 +3124 +21FC +0104 +ENDCHAR +STARTCHAR uni951B +ENCODING 38171 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +3BFE +2050 +40A8 +7924 +A2FA +2020 +F8A8 +2088 +23FE +2088 +2888 +3088 +2108 +0208 +ENDCHAR +STARTCHAR uni951C +ENCODING 38172 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3DFC +2050 +4088 +BD04 +13FE +1008 +FDE8 +1128 +1128 +11E8 +1528 +1808 +1028 +0010 +ENDCHAR +STARTCHAR uni951D +ENCODING 38173 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +3D04 +21FC +4104 +BDFC +1000 +11FE +FC08 +13FE +1008 +1108 +1488 +1808 +1028 +0010 +ENDCHAR +STARTCHAR uni951E +ENCODING 38174 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +3D24 +2124 +41FC +BD24 +1124 +11FC +FC20 +13FE +1070 +10A8 +1524 +1A22 +1020 +0020 +ENDCHAR +STARTCHAR uni951F +ENCODING 38175 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +3D04 +2104 +41FC +BD04 +1104 +11FC +FC00 +1112 +11D4 +1118 +1510 +1952 +1192 +010E +ENDCHAR +STARTCHAR uni9520 +ENCODING 38176 +BBX 15 16 0 -2 +BITMAP +10FC +1084 +3C84 +20FC +4084 +BC84 +10FC +1000 +FDFE +1102 +1102 +11FE +1502 +1902 +11FE +0102 +ENDCHAR +STARTCHAR uni9521 +ENCODING 38177 +BBX 14 16 0 -2 +BITMAP +1000 +11F8 +3D08 +2108 +41F8 +BD08 +1108 +11F8 +FC80 +11FC +1254 +1094 +1524 +1A44 +1094 +0108 +ENDCHAR +STARTCHAR uni9522 +ENCODING 38178 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +3D04 +2124 +4124 +BDFC +1124 +1124 +FD74 +1154 +1154 +1174 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni9523 +ENCODING 38179 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +3A52 +2252 +4252 +7BFE +A020 +2040 +F8FC +2104 +2288 +2050 +2820 +3040 +2180 +0600 +ENDCHAR +STARTCHAR uni9524 +ENCODING 38180 +BBX 15 15 0 -1 +BITMAP +2008 +203C +39E0 +2020 +4020 +7BFE +A124 +2124 +FBFE +2124 +2124 +23FE +2820 +3020 +23FE +ENDCHAR +STARTCHAR uni9525 +ENCODING 38181 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +3C80 +20FE +4190 +BE90 +10FC +1090 +FC90 +10FC +1090 +1090 +1490 +18FE +1080 +0080 +ENDCHAR +STARTCHAR uni9526 +ENCODING 38182 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +3DFC +2104 +41FC +BD04 +11FC +1020 +FC20 +13FE +1222 +1222 +162A +1A24 +1020 +0020 +ENDCHAR +STARTCHAR uni9527 +ENCODING 38183 +BBX 15 16 0 -2 +BITMAP +101C +11E0 +3D10 +2110 +41FE +BD10 +1110 +117C +FD44 +1154 +1154 +1154 +1554 +1A28 +1244 +0482 +ENDCHAR +STARTCHAR uni9528 +ENCODING 38184 +BBX 15 16 0 -2 +BITMAP +2010 +2050 +3B90 +221E +4212 +7A24 +A3C8 +2288 +FA88 +2288 +2288 +2294 +2A94 +3494 +2494 +0822 +ENDCHAR +STARTCHAR uni9529 +ENCODING 38185 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +3CA8 +2020 +41FC +BC40 +13FE +1088 +FD04 +12FA +1488 +1088 +14A8 +1892 +1082 +007E +ENDCHAR +STARTCHAR uni952A +ENCODING 38186 +BBX 15 15 0 -1 +BITMAP +2080 +2080 +38FC +2154 +4254 +78A4 +A124 +2244 +F894 +2108 +2040 +20A4 +2AAA +328A +2478 +ENDCHAR +STARTCHAR uni952B +ENCODING 38187 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +3DFC +2000 +4108 +BC90 +1000 +13FE +FC00 +1000 +11FC +1104 +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni952C +ENCODING 38188 +BBX 15 16 0 -2 +BITMAP +2040 +2244 +3A44 +2448 +40A0 +7910 +A608 +2044 +F840 +2248 +2248 +2450 +28A0 +3110 +2208 +0C06 +ENDCHAR +STARTCHAR uni952D +ENCODING 38189 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFE +2202 +4404 +7800 +A3FE +2020 +F820 +2120 +213C +2120 +2AA0 +3260 +243E +0800 +ENDCHAR +STARTCHAR uni952E +ENCODING 38190 +BBX 15 15 0 -1 +BITMAP +2010 +2010 +3B7C +2114 +41FE +7A14 +A27C +2710 +F97C +2510 +25FE +2210 +2A10 +3500 +28FE +ENDCHAR +STARTCHAR uni952F +ENCODING 38191 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +3A04 +2204 +43FC +7A20 +A220 +23FE +FA20 +2220 +22FC +2284 +2A84 +3484 +24FC +0884 +ENDCHAR +STARTCHAR uni9530 +ENCODING 38192 +BBX 15 15 0 -1 +BITMAP +2000 +21FC +3808 +2010 +4020 +7BFE +A020 +20A0 +F840 +21FC +2154 +2154 +2954 +3154 +27FE +ENDCHAR +STARTCHAR uni9531 +ENCODING 38193 +BBX 15 16 0 -2 +BITMAP +1092 +1092 +3D24 +2248 +4124 +BC92 +1092 +1000 +FDFE +1122 +1122 +11FE +1522 +1922 +11FE +0102 +ENDCHAR +STARTCHAR uni9532 +ENCODING 38194 +BBX 15 16 0 -2 +BITMAP +2100 +213C +3BD4 +2114 +4394 +7914 +A7D4 +2124 +F94C +2040 +27FE +2040 +28A0 +3110 +2208 +0C06 +ENDCHAR +STARTCHAR uni9533 +ENCODING 38195 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +3BFE +2088 +40A8 +7820 +A1FC +2124 +F924 +2124 +27FE +2020 +2850 +3088 +2104 +0202 +ENDCHAR +STARTCHAR uni9534 +ENCODING 38196 +BBX 15 16 0 -2 +BITMAP +1110 +1112 +3DD4 +2118 +4152 +BD92 +112E +1040 +FDFC +1104 +1104 +11FC +1504 +1904 +11FC +0104 +ENDCHAR +STARTCHAR uni9535 +ENCODING 38197 +BBX 15 16 0 -2 +BITMAP +1090 +1090 +3C9E +22A2 +41D4 +BC88 +1094 +10A4 +FDFE +1284 +14A4 +1094 +1494 +1884 +1094 +0088 +ENDCHAR +STARTCHAR uni9536 +ENCODING 38198 +BBX 15 15 0 -1 +BITMAP +2000 +21FC +3924 +2124 +41FC +7924 +A124 +21FC +F800 +2040 +2024 +22A2 +2A8A +3488 +2078 +ENDCHAR +STARTCHAR uni9537 +ENCODING 38199 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +3A52 +2252 +43DE +7800 +A1FC +2000 +FBFE +2080 +2100 +21FC +2804 +3004 +2028 +0010 +ENDCHAR +STARTCHAR uni9538 +ENCODING 38200 +BBX 15 16 0 -2 +BITMAP +1008 +103C +3DE0 +2020 +4020 +BDFE +1020 +10A0 +FD2C +1124 +1124 +11AC +1524 +1924 +11FC +0104 +ENDCHAR +STARTCHAR uni9539 +ENCODING 38201 +BBX 15 16 0 -2 +BITMAP +2008 +20C8 +3B08 +2108 +412A +792A +A3AC +2148 +F908 +2388 +2554 +2114 +2914 +3124 +2124 +0142 +ENDCHAR +STARTCHAR uni953A +ENCODING 38202 +BBX 15 15 0 -1 +BITMAP +1008 +103C +3DE0 +2020 +43FE +BC20 +11FC +1124 +FDFC +1124 +11FC +1020 +15FC +1820 +13FE +ENDCHAR +STARTCHAR uni953B +ENCODING 38203 +BBX 15 16 0 -2 +BITMAP +2080 +2338 +3A28 +2228 +43A8 +7A46 +A200 +227C +FBA4 +2224 +2228 +23A8 +2E10 +3228 +2244 +0282 +ENDCHAR +STARTCHAR uni953C +ENCODING 38204 +BBX 15 16 0 -2 +BITMAP +10A0 +112C +3D24 +2124 +41AC +BD24 +1124 +11FC +FC20 +11FC +1088 +1050 +1420 +1850 +1088 +0306 +ENDCHAR +STARTCHAR uni953D +ENCODING 38205 +BBX 15 15 0 -1 +BITMAP +1020 +1040 +3CFC +2084 +40FC +BC84 +10FC +1000 +FDFE +1020 +1020 +10FC +1420 +1820 +11FE +ENDCHAR +STARTCHAR uni953E +ENCODING 38206 +BBX 15 16 0 -2 +BITMAP +101E +13E0 +3C44 +2124 +4088 +BDFC +1040 +1040 +FDFE +1080 +10FC +1144 +1528 +1A10 +1068 +0186 +ENDCHAR +STARTCHAR uni953F +ENCODING 38207 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFE +2000 +41FC +7904 +A104 +2104 +F9FC +2052 +2094 +2188 +2A88 +34A4 +20C2 +0080 +ENDCHAR +STARTCHAR uni9540 +ENCODING 38208 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFE +2248 +4248 +7BFE +A248 +2278 +FA00 +22FC +2244 +2248 +2A28 +3410 +2468 +0986 +ENDCHAR +STARTCHAR uni9541 +ENCODING 38209 +BBX 15 16 0 -2 +BITMAP +2104 +2088 +3BFE +2020 +4020 +79FC +A020 +2020 +FBFE +2000 +2020 +23FE +2820 +3050 +2088 +0306 +ENDCHAR +STARTCHAR uni9542 +ENCODING 38210 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +3CA8 +2020 +43FE +BCA8 +1124 +1202 +FC40 +13FE +1088 +1108 +1590 +1860 +1198 +0604 +ENDCHAR +STARTCHAR uni9543 +ENCODING 38211 +BBX 15 16 0 -2 +BITMAP +2084 +2044 +3848 +23FE +4084 +7884 +A108 +214A +FA52 +239C +2084 +2108 +2908 +3252 +23DE +0042 +ENDCHAR +STARTCHAR uni9544 +ENCODING 38212 +BBX 15 16 0 -2 +BITMAP +2090 +27FC +3894 +23FC +4290 +7BFE +A112 +2216 +FDFC +2104 +2124 +2124 +2924 +3050 +2088 +0304 +ENDCHAR +STARTCHAR uni9545 +ENCODING 38213 +BBX 14 16 0 -2 +BITMAP +2000 +23FC +3A24 +4224 +43FC +7A00 +A2FC +2284 +FA84 +22FC +2284 +2AFC +3484 +2484 +08FC +1084 +ENDCHAR +STARTCHAR uni9546 +ENCODING 38214 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +3BFE +2088 +4000 +79FC +A104 +21FC +F904 +21FC +2020 +23FE +2850 +3088 +2104 +0202 +ENDCHAR +STARTCHAR uni9547 +ENCODING 38215 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +3BFE +4020 +41FC +7904 +A1FC +2104 +F9FC +2104 +21FC +2904 +37FE +2088 +0104 +0202 +ENDCHAR +STARTCHAR uni9548 +ENCODING 38216 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +3BFE +2020 +41FC +7924 +A1FC +2124 +F9FC +2124 +2008 +23FE +2888 +3048 +2048 +0018 +ENDCHAR +STARTCHAR uni9549 +ENCODING 38217 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +3800 +21FC +4104 +7904 +A1FC +2000 +FBFE +228A +2252 +23FE +2A22 +3222 +222A +0204 +ENDCHAR +STARTCHAR uni954A +ENCODING 38218 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +3908 +21F8 +4108 +79F8 +A10E +27F8 +F808 +27BC +20A4 +22A4 +2928 +3290 +24A8 +0846 +ENDCHAR +STARTCHAR uni954B +ENCODING 38219 +BBX 15 16 0 -2 +BITMAP +2020 +2124 +38A8 +2020 +43FE +7A02 +A000 +21FC +F904 +2104 +21FC +2050 +2850 +3092 +2112 +020E +ENDCHAR +STARTCHAR uni954C +ENCODING 38220 +BBX 15 16 0 -2 +BITMAP +20A0 +2090 +39FE +2320 +45FC +7920 +A1FC +2120 +F9FE +2100 +23FC +2088 +289E +3102 +220A +0404 +ENDCHAR +STARTCHAR uni954D +ENCODING 38221 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +3BF8 +2208 +43F8 +7A08 +A3F8 +2208 +FBF8 +2040 +27FE +20E0 +2950 +3248 +2446 +0040 +ENDCHAR +STARTCHAR uni954E +ENCODING 38222 +BBX 15 16 0 -2 +BITMAP +1020 +1050 +3C88 +2174 +4202 +BCF8 +1088 +10F8 +FC0C +11F0 +1020 +11FC +1420 +1BFE +1020 +0060 +ENDCHAR +STARTCHAR uni954F +ENCODING 38223 +BBX 15 16 0 -2 +BITMAP +2040 +23BE +3A12 +2292 +4252 +7AAA +A324 +2040 +FBFE +2222 +2222 +23FE +2A22 +3222 +23FE +0202 +ENDCHAR +STARTCHAR uni9550 +ENCODING 38224 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFE +2000 +41FC +7904 +A1FC +2000 +FBFE +2202 +22FA +228A +2AFA +3202 +220A +0204 +ENDCHAR +STARTCHAR uni9551 +ENCODING 38225 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFC +2108 +4090 +7BFE +A202 +2444 +F820 +23FC +2080 +20F8 +2888 +3108 +2128 +0210 +ENDCHAR +STARTCHAR uni9552 +ENCODING 38226 +BBX 15 15 0 -1 +BITMAP +2104 +2084 +3888 +2000 +43FE +7800 +A088 +2104 +FA02 +21FC +2154 +2154 +2954 +3154 +27FE +ENDCHAR +STARTCHAR uni9553 +ENCODING 38227 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFE +2202 +4000 +79FC +A040 +20A2 +FB34 +2058 +2094 +2334 +2852 +3090 +2350 +0020 +ENDCHAR +STARTCHAR uni9554 +ENCODING 38228 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFE +2202 +4414 +79E0 +A100 +2100 +F9FC +2110 +2110 +27FE +2800 +3090 +2108 +0204 +ENDCHAR +STARTCHAR uni9555 +ENCODING 38229 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFE +2202 +4050 +7888 +A124 +2050 +F888 +2104 +22FA +2088 +2888 +3088 +20F8 +0088 +ENDCHAR +STARTCHAR uni9556 +ENCODING 38230 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +3C50 +21FC +4154 +BD54 +11FC +1000 +FDFC +1000 +13FE +1020 +14A8 +1924 +12A2 +0040 +ENDCHAR +STARTCHAR uni9557 +ENCODING 38231 +BBX 15 15 0 -1 +BITMAP +2020 +2124 +38A8 +23FE +4202 +78F8 +A088 +2088 +F8F8 +2020 +2020 +21FC +2820 +3020 +23FE +ENDCHAR +STARTCHAR uni9558 +ENCODING 38232 +BBX 15 16 0 -2 +BITMAP +2000 +21F8 +3908 +21F8 +4108 +79F8 +A000 +23FC +FA94 +23FC +2000 +21F8 +2890 +3060 +2198 +0606 +ENDCHAR +STARTCHAR uni9559 +ENCODING 38233 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +3D24 +21FC +4124 +BDFC +1040 +1088 +FDF0 +1020 +1044 +13FE +1422 +1924 +1222 +0060 +ENDCHAR +STARTCHAR uni955A +ENCODING 38234 +BBX 15 16 0 -2 +BITMAP +2020 +2222 +3A22 +23FE +4000 +7BDE +A252 +2252 +FBDE +2252 +2252 +23DE +2A52 +3252 +255A +08A4 +ENDCHAR +STARTCHAR uni955B +ENCODING 38235 +BBX 15 16 0 -2 +BITMAP +2020 +27FE +3C20 +25FC +4424 +77FE +A424 +25FC +FC20 +25FC +2524 +25FC +2D24 +39FC +2924 +112C +ENDCHAR +STARTCHAR uni955C +ENCODING 38236 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +3BF8 +2110 +40A0 +77FE +A000 +23F8 +FA08 +23F8 +2208 +23F8 +2920 +3122 +2222 +0C1E +ENDCHAR +STARTCHAR uni955D +ENCODING 38237 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFE +2088 +4050 +7BFE +A222 +22FA +FA22 +22FA +228A +228A +2AFA +3202 +220A +0204 +ENDCHAR +STARTCHAR uni955E +ENCODING 38238 +BBX 15 16 0 -2 +BITMAP +2220 +2120 +3920 +47BE +4240 +7A20 +A3BC +22D0 +FA90 +2290 +22FE +2A90 +34A8 +25A8 +0844 +1082 +ENDCHAR +STARTCHAR uni955F +ENCODING 38239 +BBX 15 16 0 -2 +BITMAP +2210 +2110 +3910 +47BE +4240 +7A00 +A3BE +228A +FA88 +22A8 +22AE +2AA8 +34A8 +25A8 +085E +1080 +ENDCHAR +STARTCHAR uni9560 +ENCODING 38240 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +3842 +2252 +414A +7A52 +A028 +20C4 +FB12 +2060 +2188 +2032 +29C4 +3018 +2060 +0380 +ENDCHAR +STARTCHAR uni9561 +ENCODING 38241 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +3850 +23FE +4252 +7BFE +A000 +21FC +F904 +21FC +2104 +21FC +2820 +33FE +2020 +0020 +ENDCHAR +STARTCHAR uni9562 +ENCODING 38242 +BBX 15 16 0 -2 +BITMAP +2000 +2FFE +3800 +4A28 +4948 +7BEE +A892 +2884 +FAA0 +2AA8 +2BE8 +2888 +3894 +2914 +0924 +1242 +ENDCHAR +STARTCHAR uni9563 +ENCODING 38243 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +3BFE +2050 +428A +7904 +A3FE +2504 +F9FC +2104 +21FC +2020 +2924 +3222 +24A2 +0040 +ENDCHAR +STARTCHAR uni9564 +ENCODING 38244 +BBX 15 16 0 -2 +BITMAP +20A0 +24A4 +3AA8 +20A0 +47FC +7910 +A0A0 +27FC +F840 +23F8 +2040 +27FC +28A0 +3110 +2208 +0C06 +ENDCHAR +STARTCHAR uni9565 +ENCODING 38245 +BBX 15 16 0 -2 +BITMAP +2080 +20F8 +3910 +23FC +4524 +79FC +A124 +21FC +F800 +23FE +2000 +21FC +2904 +31FC +2104 +01FC +ENDCHAR +STARTCHAR uni9566 +ENCODING 38246 +BBX 15 16 0 -2 +BITMAP +2108 +2088 +3BC8 +2010 +43DE +7A64 +A3D4 +2014 +FBD4 +2054 +2094 +20E8 +2B88 +3094 +2294 +0122 +ENDCHAR +STARTCHAR uni9567 +ENCODING 38247 +BBX 14 16 0 -2 +BITMAP +2200 +217C +3D04 +2444 +45F4 +7C44 +A5F4 +2554 +FD74 +25D4 +2554 +25F4 +2CE4 +3554 +2444 +044C +ENDCHAR +STARTCHAR uni9568 +ENCODING 38248 +BBX 15 16 0 -2 +BITMAP +2108 +2090 +3BFC +2090 +4294 +7998 +A090 +27FE +F800 +21F8 +2108 +2108 +29F8 +3108 +2108 +01F8 +ENDCHAR +STARTCHAR uni9569 +ENCODING 38249 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFE +228A +4124 +7A22 +A1FC +2124 +F9FC +2020 +23FE +2222 +2BFE +3222 +2020 +0020 +ENDCHAR +STARTCHAR uni956A +ENCODING 38250 +BBX 15 16 0 -2 +BITMAP +2000 +23BE +38A2 +20A2 +40BE +7B88 +A208 +223E +FA2A +23AA +20AA +20BE +2888 +308A +257E +0202 +ENDCHAR +STARTCHAR uni956B +ENCODING 38251 +BBX 15 15 0 -1 +BITMAP +2020 +27A4 +38A8 +2292 +4114 +7A08 +A5F4 +2802 +FBF8 +2208 +2208 +23F8 +2A08 +3110 +2FFE +ENDCHAR +STARTCHAR uni956C +ENCODING 38252 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +38A8 +2090 +41FE +7B20 +A1FC +2120 +F9FC +2120 +21FE +2100 +2BFC +3088 +2070 +038E +ENDCHAR +STARTCHAR uni956D +ENCODING 38253 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +3C20 +23FE +4222 +BDAC +1020 +11AC +FC00 +11FC +1124 +1124 +15FC +1924 +1124 +01FC +ENDCHAR +STARTCHAR uni956E +ENCODING 38254 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +3A94 +2294 +43FC +7800 +A7FE +2000 +FBFC +2204 +23FC +20A2 +2914 +3308 +2D44 +0182 +ENDCHAR +STARTCHAR uni956F +ENCODING 38255 +BBX 14 16 0 -2 +BITMAP +2000 +23F8 +3AA8 +22A8 +43F8 +7900 +A3FC +2484 +FBE4 +22A4 +22A4 +23E4 +2894 +37F4 +2014 +0008 +ENDCHAR +STARTCHAR uni9570 +ENCODING 38256 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +3A88 +2250 +43FE +7A50 +A2FC +2254 +FBFE +2254 +22FC +2250 +2AD8 +3554 +2652 +0850 +ENDCHAR +STARTCHAR uni9571 +ENCODING 38257 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +39FC +2088 +4050 +7BFE +A000 +21FC +F904 +21FC +2104 +21FC +2820 +3294 +228A +047A +ENDCHAR +STARTCHAR uni9572 +ENCODING 38258 +BBX 15 16 0 -2 +BITMAP +2080 +2040 +37FE +4402 +4A24 +73BC +A4A4 +2AA8 +F510 +22E8 +2404 +23F8 +2840 +3248 +2444 +00C0 +ENDCHAR +STARTCHAR uni9573 +ENCODING 38259 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3BFE +2250 +43FE +7A52 +A3FE +2200 +FA94 +22D8 +2290 +22D2 +2A8E +3400 +2554 +0A2A +ENDCHAR +STARTCHAR uni9574 +ENCODING 38260 +BBX 15 16 0 -2 +BITMAP +2124 +2248 +3924 +2000 +43FC +7A94 +A264 +2294 +FBFC +2248 +2368 +2248 +2B6A +324A +2246 +0362 +ENDCHAR +STARTCHAR uni9575 +ENCODING 38261 +BBX 15 16 0 -2 +BITMAP +21F0 +2210 +3BFC +2604 +43FC +7A24 +A3B8 +2222 +F9FE +2210 +27FC +2244 +2BFC +30D0 +214A +063E +ENDCHAR +STARTCHAR uni9576 +ENCODING 38262 +BBX 15 16 0 -2 +BITMAP +2040 +27FC +3800 +23B8 +42A8 +7BB8 +A110 +27FC +F910 +27FC +2110 +27FE +2928 +3310 +2548 +0186 +ENDCHAR +STARTCHAR uni9577 +ENCODING 38263 +BBX 15 14 1 -1 +BITMAP +1FF8 +1000 +1FF0 +1000 +1FF0 +1000 +1000 +FFFE +1104 +1108 +1090 +1060 +1F30 +700E +ENDCHAR +STARTCHAR uni9578 +ENCODING 38264 +BBX 15 14 1 -1 +BITMAP +1FF8 +1000 +1FF0 +1000 +1FF0 +1000 +1000 +FFFE +0400 +0420 +0810 +0818 +11E4 +7E04 +ENDCHAR +STARTCHAR uni9579 +ENCODING 38265 +BBX 15 15 1 -1 +BITMAP +0020 +3E20 +203C +3C24 +2044 +3C44 +2088 +2008 +FE08 +2010 +2818 +2424 +5A44 +E282 +0102 +ENDCHAR +STARTCHAR uni957A +ENCODING 38266 +BBX 15 16 0 -2 +BITMAP +0008 +3E3C +21E0 +2020 +3C20 +2020 +3DFE +2020 +2020 +FE50 +1050 +2050 +4488 +FE88 +0304 +0202 +ENDCHAR +STARTCHAR uni957B +ENCODING 38267 +BBX 15 16 0 -2 +BITMAP +0020 +3E20 +20A0 +20A0 +3CFC +20A0 +3D20 +2020 +21FE +FE20 +1030 +2050 +4448 +FE88 +0304 +0202 +ENDCHAR +STARTCHAR uni957C +ENCODING 38268 +BBX 15 15 0 -2 +BITMAP +3EFE +2082 +20FE +3C88 +20AA +3CAA +20AA +20BE +FE88 +10AA +20AA +44AA +FEAA +02BE +0102 +ENDCHAR +STARTCHAR uni957D +ENCODING 38269 +BBX 15 16 0 -2 +BITMAP +0020 +3E20 +21FC +2020 +3D54 +2088 +3D04 +22FA +2088 +FEF8 +1088 +20F8 +4420 +FEA8 +0324 +0060 +ENDCHAR +STARTCHAR uni957E +ENCODING 38270 +BBX 15 15 0 -2 +BITMAP +3BFE +2124 +3A22 +27FE +3A22 +2376 +22AA +FB76 +2222 +2376 +4AAA +FB76 +4A22 +022A +0204 +ENDCHAR +STARTCHAR uni957F +ENCODING 38271 +BBX 15 16 0 -2 +BITMAP +0800 +0810 +0820 +0840 +0880 +0900 +0800 +FFFE +0A00 +0900 +0880 +0840 +0920 +0A18 +0C06 +0800 +ENDCHAR +STARTCHAR uni9580 +ENCODING 38272 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +801C +ENDCHAR +STARTCHAR uni9581 +ENCODING 38273 +BBX 12 15 1 -2 +BITMAP +F9F0 +8910 +F9F0 +8910 +F9F0 +8010 +8110 +8110 +8210 +8210 +8410 +8810 +9010 +8050 +8020 +ENDCHAR +STARTCHAR uni9582 +ENCODING 38274 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +8484 +FCFC +8004 +8004 +8004 +9FE4 +8004 +8004 +8004 +801C +ENDCHAR +STARTCHAR uni9583 +ENCODING 38275 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8204 +8204 +8204 +8504 +8884 +B064 +8004 +801C +ENDCHAR +STARTCHAR uni9584 +ENCODING 38276 +BBX 14 16 1 -2 +BITMAP +0020 +EE20 +AA20 +AA20 +EE20 +AA20 +AA20 +EE20 +8220 +8250 +8250 +8250 +8250 +8288 +8A88 +8504 +ENDCHAR +STARTCHAR uni9585 +ENCODING 38277 +BBX 13 15 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +BFE8 +8208 +8208 +8208 +8208 +8208 +8A08 +8428 +8010 +ENDCHAR +STARTCHAR uni9586 +ENCODING 38278 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8FC4 +8004 +8004 +8FC4 +8004 +8004 +9FE4 +800C +ENDCHAR +STARTCHAR uni9587 +ENCODING 38279 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +9FE4 +8204 +8304 +8284 +8204 +8204 +8204 +801C +ENDCHAR +STARTCHAR uni9588 +ENCODING 38280 +BBX 13 15 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +9FC8 +8208 +8208 +BFE8 +8208 +8208 +8208 +8228 +8010 +ENDCHAR +STARTCHAR uni9589 +ENCODING 38281 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8104 +8104 +9FE4 +8304 +8504 +8904 +9104 +831C +ENDCHAR +STARTCHAR uni958A +ENCODING 38282 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8204 +8204 +9244 +9244 +9244 +9244 +9FC4 +801C +ENDCHAR +STARTCHAR uni958B +ENCODING 38283 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +9FE4 +8484 +8484 +BFF4 +8484 +8484 +8884 +909C +ENDCHAR +STARTCHAR uni958C +ENCODING 38284 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +8204 +BFE4 +8004 +8F84 +8884 +8884 +88A4 +B06C +ENDCHAR +STARTCHAR uni958D +ENCODING 38285 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +8204 +BFE4 +8404 +87C4 +8444 +8444 +8844 +919C +ENDCHAR +STARTCHAR uni958E +ENCODING 38286 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +8204 +BFE4 +8404 +8504 +8904 +9284 +A4C4 +8F5C +ENDCHAR +STARTCHAR uni958F +ENCODING 38287 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +9FC4 +8204 +8F84 +8204 +8204 +BFE4 +8004 +801C +ENDCHAR +STARTCHAR uni9590 +ENCODING 38288 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +8388 +BC08 +8788 +BC08 +87C8 +BC08 +8448 +83C8 +8028 +8010 +ENDCHAR +STARTCHAR uni9591 +ENCODING 38289 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +8204 +9FE4 +8304 +8684 +8A44 +9224 +8204 +801C +ENDCHAR +STARTCHAR uni9592 +ENCODING 38290 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +8FC8 +8848 +8FC8 +8848 +8FC8 +8848 +9148 +A088 +8028 +8010 +ENDCHAR +STARTCHAR uni9593 +ENCODING 38291 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8FC4 +8844 +8844 +8FC4 +8844 +8844 +8FC4 +801C +ENDCHAR +STARTCHAR uni9594 +ENCODING 38292 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +8204 +BFE4 +8884 +8884 +8504 +8204 +8D84 +B06C +ENDCHAR +STARTCHAR uni9595 +ENCODING 38293 +BBX 13 15 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +9FC8 +8108 +9108 +9FE8 +8508 +8908 +B108 +8328 +8010 +ENDCHAR +STARTCHAR uni9596 +ENCODING 38294 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8204 +BA24 +8B44 +8A84 +9244 +A234 +8604 +801C +ENDCHAR +STARTCHAR uni9597 +ENCODING 38295 +BBX 13 15 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8108 +8908 +8508 +9108 +8908 +81E8 +BF08 +8108 +8128 +8110 +ENDCHAR +STARTCHAR uni9598 +ENCODING 38296 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +9FE4 +9224 +9FE4 +9224 +9FE4 +8204 +8204 +821C +ENDCHAR +STARTCHAR uni9599 +ENCODING 38297 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +8204 +BFF4 +8204 +9FE4 +9224 +9224 +9264 +821C +ENDCHAR +STARTCHAR uni959A +ENCODING 38298 +BBX 13 15 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8408 +8208 +9FC8 +8888 +8488 +8508 +BFE8 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni959B +ENCODING 38299 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +BFE8 +8208 +9248 +8A88 +BFE8 +8208 +8208 +8208 +8228 +8010 +ENDCHAR +STARTCHAR uni959C +ENCODING 38300 +BBX 12 15 1 -2 +BITMAP +F9F0 +8910 +F9F0 +8910 +F9F0 +8010 +BFD0 +8090 +9E90 +9290 +9E90 +8090 +8290 +8150 +8020 +ENDCHAR +STARTCHAR uni959D +ENCODING 38301 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FAF8 +8208 +8508 +8888 +9448 +A238 +DFC8 +8048 +8088 +8508 +8228 +8110 +ENDCHAR +STARTCHAR uni959E +ENCODING 38302 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8808 +9048 +BFE8 +88A8 +8888 +BFE8 +8888 +8888 +8888 +90A8 +8010 +ENDCHAR +STARTCHAR uni959F +ENCODING 38303 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8244 +8544 +9444 +94A4 +A514 +A614 +8424 +8A24 +B1DC +ENDCHAR +STARTCHAR uni95A0 +ENCODING 38304 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +9FE4 +8204 +8204 +8FC4 +8284 +8244 +9FE4 +801C +ENDCHAR +STARTCHAR uni95A1 +ENCODING 38305 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FCF8 +8208 +BFE8 +8408 +8888 +9F08 +8248 +8C88 +B108 +8688 +9868 +8010 +ENDCHAR +STARTCHAR uni95A2 +ENCODING 38306 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8844 +8484 +9FC4 +8204 +8204 +BFE4 +8504 +8884 +905C +ENDCHAR +STARTCHAR uni95A3 +ENCODING 38307 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8404 +8FC4 +9884 +8704 +8CC4 +B034 +8FC4 +8844 +8FDC +ENDCHAR +STARTCHAR uni95A4 +ENCODING 38308 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8304 +8484 +8844 +B7B4 +8004 +8FC4 +8844 +8844 +8FDC +ENDCHAR +STARTCHAR uni95A5 +ENCODING 38309 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8044 +8924 +9FF4 +B104 +D144 +9084 +9184 +9654 +902C +ENDCHAR +STARTCHAR uni95A6 +ENCODING 38310 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8304 +8CC4 +B034 +8844 +8844 +8844 +94A4 +A4A4 +A31C +ENDCHAR +STARTCHAR uni95A7 +ENCODING 38311 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8484 +9FE4 +8484 +8484 +BFF4 +8484 +8844 +902C +ENDCHAR +STARTCHAR uni95A8 +ENCODING 38312 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +9FC4 +8204 +BFE4 +8204 +9FC4 +8204 +BFE4 +801C +ENDCHAR +STARTCHAR uni95A9 +ENCODING 38313 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FEFC +8204 +9FE4 +9224 +9224 +9FE4 +8244 +8244 +83A4 +BC1C +ENDCHAR +STARTCHAR uni95AA +ENCODING 38314 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +BFE8 +8508 +9FC8 +9548 +9548 +99C8 +9048 +9FC8 +9048 +8018 +ENDCHAR +STARTCHAR uni95AB +ENCODING 38315 +BBX 13 15 2 -1 +BITMAP +FDF8 +8508 +FDF8 +8508 +FDF8 +8008 +BFE8 +A228 +BFE8 +A728 +AAA8 +B268 +A228 +BFE8 +8018 +ENDCHAR +STARTCHAR uni95AC +ENCODING 38316 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +9FC4 +9044 +9FC4 +9044 +9FC4 +9164 +9684 +B86C +ENDCHAR +STARTCHAR uni95AD +ENCODING 38317 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8FC4 +8844 +8FC4 +8204 +9FE4 +9024 +9024 +9FEC +ENDCHAR +STARTCHAR uni95AE +ENCODING 38318 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8068 +BB88 +8888 +9088 +BBE8 +8888 +A888 +93E8 +AC08 +C3E8 +8018 +ENDCHAR +STARTCHAR uni95AF +ENCODING 38319 +BBX 13 15 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +A108 +9108 +C548 +A528 +9908 +E048 +A088 +A308 +AC28 +8010 +ENDCHAR +STARTCHAR uni95B0 +ENCODING 38320 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +8408 +99C8 +9048 +9048 +9DC8 +9048 +9048 +9FC8 +8008 +8018 +ENDCHAR +STARTCHAR uni95B1 +ENCODING 38321 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8888 +9048 +BFE8 +D058 +9048 +9FC8 +8508 +8508 +8928 +90E8 +A018 +ENDCHAR +STARTCHAR uni95B2 +ENCODING 38322 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8844 +8484 +9FC4 +9044 +9044 +9FC4 +8504 +8924 +B0EC +ENDCHAR +STARTCHAR uni95B3 +ENCODING 38323 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FAF8 +8208 +BFE8 +8208 +9FC8 +9248 +9FC8 +9248 +9FC8 +8208 +BFE8 +8218 +ENDCHAR +STARTCHAR uni95B4 +ENCODING 38324 +BBX 14 15 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8FC4 +8844 +8FC4 +8844 +8FC4 +8844 +8FC4 +8484 +986C +ENDCHAR +STARTCHAR uni95B5 +ENCODING 38325 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8A08 +8908 +9FE8 +B208 +DFC8 +9208 +9FC8 +9208 +9FE8 +9008 +8018 +ENDCHAR +STARTCHAR uni95B6 +ENCODING 38326 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FFFC +8844 +8FC4 +8844 +9FE4 +9024 +9FE4 +9024 +9FE4 +801C +ENDCHAR +STARTCHAR uni95B7 +ENCODING 38327 +BBX 15 16 0 -2 +BITMAP +0800 +8BDE +5252 +23DE +5252 +8BDE +2202 +2222 +FA22 +2222 +B252 +AA4A +2A8A +2202 +A20A +4204 +ENDCHAR +STARTCHAR uni95B8 +ENCODING 38328 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +BFE8 +8508 +9DC8 +9048 +9048 +9DC8 +8508 +8508 +BFE8 +8018 +ENDCHAR +STARTCHAR uni95B9 +ENCODING 38329 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +BFE4 +8A84 +9FC4 +AAA4 +8A84 +8F84 +8224 +81EC +ENDCHAR +STARTCHAR uni95BA +ENCODING 38330 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +9FC8 +9048 +9FC8 +9048 +9FC8 +8208 +BFE8 +8888 +8708 +B8D8 +ENDCHAR +STARTCHAR uni95BB +ENCODING 38331 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8804 +8F84 +9084 +A304 +9CE4 +9024 +9CE4 +9024 +9FEC +ENDCHAR +STARTCHAR uni95BC +ENCODING 38332 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8844 +88A4 +FF14 +900C +9EC4 +9224 +A204 +A2C4 +CC2C +ENDCHAR +STARTCHAR uni95BD +ENCODING 38333 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FDFC +9F04 +91C4 +9F04 +90A4 +BFE4 +9044 +9FC4 +9044 +9FDC +ENDCHAR +STARTCHAR uni95BE +ENCODING 38334 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8124 +BFF4 +8104 +9D14 +94A4 +9CC4 +8044 +8CD4 +B12C +ENDCHAR +STARTCHAR uni95BF +ENCODING 38335 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +81C8 +BE48 +9288 +BFE8 +A028 +8F88 +8088 +8D08 +8208 +8508 +9898 +ENDCHAR +STARTCHAR uni95C0 +ENCODING 38336 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8888 +BFE8 +8888 +FFF8 +9048 +AFA8 +C898 +8F88 +8848 +87C8 +8018 +ENDCHAR +STARTCHAR uni95C1 +ENCODING 38337 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +9DC8 +9548 +9DC8 +9548 +9DC8 +9048 +9048 +9048 +90C8 +8018 +ENDCHAR +STARTCHAR uni95C2 +ENCODING 38338 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +9248 +8A88 +BFE8 +8408 +FFF8 +9048 +AFA8 +C898 +8988 +8848 +87D8 +ENDCHAR +STARTCHAR uni95C3 +ENCODING 38339 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8FC4 +8844 +8FC4 +8844 +8FC4 +8224 +BFF4 +8484 +986C +ENDCHAR +STARTCHAR uni95C4 +ENCODING 38340 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +BFE8 +8508 +9FC8 +9548 +9FC8 +8408 +BFE8 +8888 +8708 +B8D8 +ENDCHAR +STARTCHAR uni95C5 +ENCODING 38341 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FFF8 +9048 +9FC8 +9048 +9FC8 +8408 +87E8 +8408 +BFC8 +8888 +8708 +B8D8 +ENDCHAR +STARTCHAR uni95C6 +ENCODING 38342 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +8F88 +8888 +8F88 +8008 +9DC8 +9548 +9548 +9DC8 +8028 +8010 +ENDCHAR +STARTCHAR uni95C7 +ENCODING 38343 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +9FE4 +8484 +BFF4 +8844 +8FC4 +8844 +8FC4 +801C +ENDCHAR +STARTCHAR uni95C8 +ENCODING 38344 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FFFC +8444 +BFF4 +8844 +8FC4 +8084 +8FE4 +8884 +BFF4 +808C +ENDCHAR +STARTCHAR uni95C9 +ENCODING 38345 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8008 +BFE8 +8508 +BFE8 +A528 +BFE8 +8208 +9FC8 +8208 +BFE8 +8018 +ENDCHAR +STARTCHAR uni95CA +ENCODING 38346 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +9064 +8B84 +A084 +97F4 +8084 +8BE4 +9224 +A3EC +ENDCHAR +STARTCHAR uni95CB +ENCODING 38347 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FEFC +9794 +8864 +B7B4 +8204 +BFE4 +8204 +8D84 +B064 +801C +ENDCHAR +STARTCHAR uni95CC +ENCODING 38348 +BBX 14 15 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +BFE4 +8204 +9FC4 +9AC4 +9744 +9FC4 +8A84 +9244 +A22C +ENDCHAR +STARTCHAR uni95CD +ENCODING 38349 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +8244 +9FE4 +8284 +BFF4 +8844 +BFC4 +8844 +8FCC +ENDCHAR +STARTCHAR uni95CE +ENCODING 38350 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FAF8 +8408 +9FC8 +9048 +9FC8 +9048 +9FC8 +8228 +BB48 +8A88 +9248 +A638 +ENDCHAR +STARTCHAR uni95CF +ENCODING 38351 +BBX 15 16 0 -2 +BITMAP +FC7E +8442 +FC7E +8442 +FC7E +8002 +BFE2 +A022 +AFA2 +A222 +AFA2 +AAAA +AFAA +A25A +DFCA +8046 +ENDCHAR +STARTCHAR uni95D0 +ENCODING 38352 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FDFC +9E04 +9064 +8FC4 +A844 +AFC4 +A844 +BFF4 +8484 +986C +ENDCHAR +STARTCHAR uni95D1 +ENCODING 38353 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +FAF8 +8C88 +FFF8 +9048 +9FC8 +9048 +9FC8 +9048 +9FC8 +8208 +BFE8 +8A88 +9248 +8218 +ENDCHAR +STARTCHAR uni95D2 +ENCODING 38354 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8F88 +8888 +8F88 +8888 +8F88 +8008 +9DC8 +9548 +8CC8 +9548 +8CD8 +ENDCHAR +STARTCHAR uni95D3 +ENCODING 38355 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +9224 +9FE4 +8004 +9FE4 +8844 +8FC4 +8484 +BFFC +ENDCHAR +STARTCHAR uni95D4 +ENCODING 38356 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8204 +9FC4 +8204 +BFE4 +8444 +89A4 +9FC4 +9544 +BFEC +ENDCHAR +STARTCHAR uni95D5 +ENCODING 38357 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +A204 +9484 +BEF4 +8994 +AA44 +BE44 +88A4 +9094 +A10C +ENDCHAR +STARTCHAR uni95D6 +ENCODING 38358 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8FE4 +8904 +8FC4 +8904 +8FC4 +8904 +8FF4 +9554 +A2AC +ENDCHAR +STARTCHAR uni95D7 +ENCODING 38359 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +9088 +9088 +A528 +B9C8 +9088 +A528 +BDE8 +8008 +9548 +A2A8 +8018 +ENDCHAR +STARTCHAR uni95D8 +ENCODING 38360 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +BE24 +81F4 +BE24 +A2A4 +BEA4 +9424 +8E24 +B06C +ENDCHAR +STARTCHAR uni95D9 +ENCODING 38361 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +9008 +8888 +BCF8 +A528 +BD28 +A2A8 +BC48 +D4A8 +9D18 +8008 +8018 +ENDCHAR +STARTCHAR uni95DA +ENCODING 38362 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FDFC +8914 +BDF4 +8914 +89F4 +BD14 +89F4 +94A4 +9524 +A23C +ENDCHAR +STARTCHAR uni95DB +ENCODING 38363 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +9248 +8A88 +BFE8 +A028 +8F88 +8888 +8F88 +8208 +9FC8 +8208 +BFD8 +ENDCHAR +STARTCHAR uni95DC +ENCODING 38364 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +9084 +94A4 +AB44 +94A4 +BBD4 +94A4 +9CE4 +8484 +B88C +ENDCHAR +STARTCHAR uni95DD +ENCODING 38365 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8048 +BE48 +A2F8 +BF28 +A228 +BEA8 +A248 +BE48 +94A8 +A328 +8018 +ENDCHAR +STARTCHAR uni95DE +ENCODING 38366 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8084 +BC84 +89F4 +FEA4 +A2A4 +BE44 +A244 +FEA4 +829C +ENDCHAR +STARTCHAR uni95DF +ENCODING 38367 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FAF8 +8D88 +B068 +8F88 +8888 +8F88 +8008 +9DC8 +9548 +8CC8 +9548 +8CD8 +ENDCHAR +STARTCHAR uni95E0 +ENCODING 38368 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FAF8 +9FC8 +9248 +9FC8 +8208 +FFF8 +9048 +9FC8 +9048 +9FC8 +8888 +9058 +ENDCHAR +STARTCHAR uni95E1 +ENCODING 38369 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FDFC +A524 +BFE4 +9244 +9FC4 +9244 +9FC4 +8204 +BFE4 +820C +ENDCHAR +STARTCHAR uni95E2 +ENCODING 38370 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8044 +BDF4 +A4A4 +BCA4 +A1F4 +BC44 +B5F4 +D444 +9C5C +ENDCHAR +STARTCHAR uni95E3 +ENCODING 38371 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +9248 +8A88 +BFE8 +A028 +8F88 +8888 +9FC8 +9248 +9FC8 +9248 +9FD8 +ENDCHAR +STARTCHAR uni95E4 +ENCODING 38372 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +FFF8 +9548 +9FC8 +8008 +BFE8 +8008 +9F88 +9088 +9F88 +8A48 +9988 +AC58 +ENDCHAR +STARTCHAR uni95E5 +ENCODING 38373 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +93E4 +A084 +97F4 +8144 +B7F4 +9084 +97F4 +9084 +AFF4 +ENDCHAR +STARTCHAR uni95E6 +ENCODING 38374 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8508 +9FC8 +9548 +9FC8 +9548 +BFE8 +8888 +8F88 +8888 +8508 +9FD8 +ENDCHAR +STARTCHAR uni95E7 +ENCODING 38375 +BBX 13 16 1 -2 +BITMAP +F8F8 +8888 +F8F8 +8888 +F8F8 +8108 +C7C8 +A108 +8FE8 +E448 +A7C8 +A2A8 +A648 +AA28 +DFE8 +8018 +ENDCHAR +STARTCHAR uni95E8 +ENCODING 38376 +BBX 13 16 1 -2 +BITMAP +4000 +27F8 +2008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni95E9 +ENCODING 38377 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8008 +8008 +8008 +8008 +BFE8 +8008 +8008 +8008 +8008 +8008 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni95EA +ENCODING 38378 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8008 +8208 +8208 +8208 +8208 +8508 +8488 +8848 +9048 +8008 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni95EB +ENCODING 38379 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8008 +BFE8 +8008 +8008 +8008 +9FC8 +8008 +8008 +8008 +BFE8 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni95EC +ENCODING 38380 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8008 +9FC8 +8208 +8208 +8208 +BFE8 +8208 +8208 +8208 +8208 +8208 +8028 +8010 +ENDCHAR +STARTCHAR uni95ED +ENCODING 38381 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8108 +8108 +BFE8 +8108 +8308 +8508 +8908 +9108 +A108 +8508 +8208 +8028 +8010 +ENDCHAR +STARTCHAR uni95EE +ENCODING 38382 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8008 +8008 +8F88 +8888 +8888 +8888 +8888 +8888 +8F88 +8888 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni95EF +ENCODING 38383 +BBX 13 16 1 -2 +BITMAP +4000 +27F8 +2008 +8008 +BF08 +8108 +9108 +9108 +9FC8 +8048 +8048 +BF48 +8048 +8288 +8128 +8010 +ENDCHAR +STARTCHAR uni95F0 +ENCODING 38384 +BBX 13 16 1 -2 +BITMAP +4000 +27F8 +2008 +8008 +8008 +BFE8 +8208 +8208 +9FC8 +8208 +8208 +8208 +BFE8 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni95F1 +ENCODING 38385 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0208 +8208 +BFE8 +8208 +8208 +9FC8 +8208 +8208 +BFE8 +8228 +8228 +82A8 +8248 +8018 +ENDCHAR +STARTCHAR uni95F2 +ENCODING 38386 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8208 +8208 +8208 +BFE8 +8208 +8708 +8A88 +9248 +A228 +8208 +8208 +8028 +8010 +ENDCHAR +STARTCHAR uni95F3 +ENCODING 38387 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0408 +8408 +8408 +BFE8 +8808 +8908 +9108 +9208 +A288 +A448 +CFE8 +8428 +8028 +8010 +ENDCHAR +STARTCHAR uni95F4 +ENCODING 38388 +BBX 13 16 1 -2 +BITMAP +4000 +27F8 +2008 +8008 +8F88 +8888 +8888 +8888 +8F88 +8888 +8888 +8888 +8F88 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni95F5 +ENCODING 38389 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8408 +8208 +BFE8 +8088 +8888 +8508 +8208 +8508 +8888 +9088 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni95F6 +ENCODING 38390 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8408 +8208 +BFE8 +8008 +8008 +8F88 +8888 +8888 +88A8 +9068 +A008 +8028 +8010 +ENDCHAR +STARTCHAR uni95F7 +ENCODING 38391 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8408 +8208 +8208 +8808 +A848 +A828 +C8A8 +8888 +8788 +8008 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni95F8 +ENCODING 38392 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8008 +9FC8 +9248 +9248 +9FC8 +9248 +9248 +9FC8 +9248 +8208 +8208 +8228 +8010 +ENDCHAR +STARTCHAR uni95F9 +ENCODING 38393 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8408 +8208 +BFE8 +8208 +8208 +9FC8 +9248 +9248 +9348 +9288 +8208 +8228 +8010 +ENDCHAR +STARTCHAR uni95FA +ENCODING 38394 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8208 +9FC8 +8208 +8208 +BFE8 +8008 +8208 +9FC8 +8208 +8208 +BFE8 +8008 +8018 +ENDCHAR +STARTCHAR uni95FB +ENCODING 38395 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8008 +BFE8 +8888 +8F88 +8888 +8F88 +8888 +88E8 +BF88 +8088 +8088 +80A8 +8010 +ENDCHAR +STARTCHAR uni95FC +ENCODING 38396 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +9088 +8888 +8BE8 +8088 +B888 +8948 +8928 +8A28 +9408 +A3E8 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni95FD +ENCODING 38397 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8208 +8208 +9FC8 +9248 +9248 +9248 +9FC8 +9208 +8248 +83E8 +BC28 +9008 +8018 +ENDCHAR +STARTCHAR uni95FE +ENCODING 38398 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8008 +8F88 +8888 +8888 +8F88 +8008 +9FC8 +9048 +9048 +9FC8 +8008 +8028 +8010 +ENDCHAR +STARTCHAR uni95FF +ENCODING 38399 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0208 +9248 +9248 +9FC8 +8008 +9FC8 +8048 +8048 +9FC8 +9008 +9028 +8FE8 +8008 +8018 +ENDCHAR +STARTCHAR uni9600 +ENCODING 38400 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8A88 +8A48 +9208 +B3E8 +DE08 +9248 +9248 +9188 +9128 +92A8 +9468 +9028 +8010 +ENDCHAR +STARTCHAR uni9601 +ENCODING 38401 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0408 +8408 +8FC8 +9888 +A508 +8208 +8508 +98C8 +EFB8 +8888 +8888 +8F88 +8028 +8010 +ENDCHAR +STARTCHAR uni9602 +ENCODING 38402 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8408 +8208 +BFE8 +8408 +8888 +9F08 +8248 +8C88 +B108 +8688 +9848 +8008 +8018 +ENDCHAR +STARTCHAR uni9603 +ENCODING 38403 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8008 +BFE8 +A228 +A228 +BFE8 +A228 +A728 +AAA8 +B268 +A228 +BFE8 +8008 +8018 +ENDCHAR +STARTCHAR uni9604 +ENCODING 38404 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8808 +8F88 +9108 +A208 +DFC8 +9248 +9FC8 +9248 +9FC8 +8228 +8228 +81E8 +8018 +ENDCHAR +STARTCHAR uni9605 +ENCODING 38405 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8888 +8508 +8008 +9FC8 +9048 +9048 +9FC8 +8508 +8508 +8908 +9128 +A0E8 +8010 +ENDCHAR +STARTCHAR uni9606 +ENCODING 38406 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0408 +8208 +9FC8 +9048 +9FC8 +9048 +9FC8 +9228 +9148 +9488 +9848 +9028 +8008 +8018 +ENDCHAR +STARTCHAR uni9607 +ENCODING 38407 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0208 +8228 +9FC8 +8288 +BFE8 +8408 +9FC8 +E848 +8FC8 +8848 +8FC8 +8848 +8028 +8010 +ENDCHAR +STARTCHAR uni9608 +ENCODING 38408 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0108 +8148 +8128 +BFE8 +8108 +9D48 +9548 +9D48 +8188 +8CA8 +B168 +8228 +8408 +8018 +ENDCHAR +STARTCHAR uni9609 +ENCODING 38409 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8408 +BFE8 +8888 +9248 +E238 +9FC8 +9248 +9FC8 +9248 +9FC8 +8228 +81E8 +8010 +ENDCHAR +STARTCHAR uni960A +ENCODING 38410 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +9FC8 +9048 +9FC8 +9048 +9FC8 +8008 +BFE8 +A028 +BFE8 +A028 +BFE8 +8008 +8018 +ENDCHAR +STARTCHAR uni960B +ENCODING 38411 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8408 +99C8 +9048 +9DC8 +9048 +9FC8 +8508 +8508 +8928 +8928 +90E8 +A008 +8018 +ENDCHAR +STARTCHAR uni960C +ENCODING 38412 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +81C8 +BE08 +9448 +8A88 +BFE8 +A028 +8F88 +8088 +8D08 +8208 +8508 +8888 +9058 +ENDCHAR +STARTCHAR uni960D +ENCODING 38413 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +80C8 +BF08 +A208 +BFE8 +A108 +B8A8 +A068 +9FC8 +9048 +9FC8 +9048 +9FC8 +9058 +ENDCHAR +STARTCHAR uni960E +ENCODING 38414 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0408 +8408 +8FC8 +9048 +A488 +99C8 +9048 +9048 +9DC8 +9048 +9048 +9FC8 +8028 +8010 +ENDCHAR +STARTCHAR uni960F +ENCODING 38415 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +9088 +8888 +BD48 +9148 +9228 +9C18 +9488 +9448 +9408 +9508 +A488 +AC48 +C018 +ENDCHAR +STARTCHAR uni9610 +ENCODING 38416 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8888 +8508 +9FC8 +9248 +9FC8 +9248 +9FC8 +8208 +BFE8 +8208 +8208 +8028 +8010 +ENDCHAR +STARTCHAR uni9611 +ENCODING 38417 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0208 +8208 +BFE8 +8208 +BFE8 +A228 +AAA8 +A728 +BFE8 +8A88 +9248 +A248 +8208 +8218 +ENDCHAR +STARTCHAR uni9612 +ENCODING 38418 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +9FC8 +9048 +9FC8 +9048 +9FC8 +9048 +9FC8 +8288 +BFE8 +8208 +8508 +8888 +9058 +ENDCHAR +STARTCHAR uni9613 +ENCODING 38419 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0208 +9FC8 +9248 +9FC8 +8208 +FFF8 +8008 +9FC8 +9048 +9248 +9248 +8508 +8888 +9058 +ENDCHAR +STARTCHAR uni9614 +ENCODING 38420 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +9068 +8B88 +C888 +A088 +A3E8 +8888 +9088 +F3E8 +9228 +9228 +93E8 +8008 +8018 +ENDCHAR +STARTCHAR uni9615 +ENCODING 38421 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +8108 +BD28 +8548 +9498 +88A8 +9048 +AFA8 +C218 +9FC8 +8208 +8508 +8888 +B058 +ENDCHAR +STARTCHAR uni9616 +ENCODING 38422 +BBX 13 16 1 -2 +BITMAP +4000 +27F8 +2208 +9FC8 +8208 +BFE8 +8408 +8888 +9FC8 +8008 +9FC8 +9548 +9548 +BFE8 +8028 +8010 +ENDCHAR +STARTCHAR uni9617 +ENCODING 38423 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0208 +BFE8 +8208 +9FC8 +9048 +9FC8 +9048 +9FC8 +9048 +9FC8 +9048 +FFF8 +8888 +9058 +ENDCHAR +STARTCHAR uni9618 +ENCODING 38424 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +9FC8 +9048 +9FC8 +9048 +9FC8 +8008 +BDE8 +8428 +A528 +94A8 +A528 +94A8 +8858 +ENDCHAR +STARTCHAR uni9619 +ENCODING 38425 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +A288 +9488 +BEE8 +8928 +AA48 +AA88 +BE88 +8888 +9148 +9228 +A408 +8028 +8010 +ENDCHAR +STARTCHAR uni961A +ENCODING 38426 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +B888 +88F8 +FEA8 +A528 +BC28 +A4A8 +BC48 +A748 +FCA8 +8528 +8608 +8028 +8010 +ENDCHAR +STARTCHAR uni961B +ENCODING 38427 +BBX 13 16 1 -2 +BITMAP +4000 +2FF8 +0008 +BFE8 +A528 +BFE8 +8008 +FFF8 +8008 +9FC8 +9048 +9FC8 +8A28 +9948 +E888 +8C58 +ENDCHAR +STARTCHAR uni961C +ENCODING 38428 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +1FE0 +1020 +1FE0 +1000 +1FF0 +1010 +1010 +1FF0 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni961D +ENCODING 38429 +BBX 6 14 6 -1 +BITMAP +FC +84 +84 +88 +88 +90 +88 +84 +84 +84 +98 +80 +80 +80 +ENDCHAR +STARTCHAR uni961E +ENCODING 38430 +BBX 13 16 1 -2 +BITMAP +0080 +F880 +8880 +9080 +97F8 +A088 +9088 +9088 +8888 +8908 +8908 +D108 +A208 +8208 +8450 +8820 +ENDCHAR +STARTCHAR uni961F +ENCODING 38431 +BBX 14 16 1 -2 +BITMAP +0080 +F880 +8880 +9080 +9080 +A080 +9080 +9080 +8940 +8940 +8940 +D220 +A220 +8410 +8808 +9004 +ENDCHAR +STARTCHAR uni9620 +ENCODING 38432 +BBX 14 15 1 -2 +BITMAP +FBE0 +8920 +9120 +9120 +A120 +9120 +93E0 +8920 +8920 +8920 +D124 +A114 +8114 +810C +8104 +ENDCHAR +STARTCHAR uni9621 +ENCODING 38433 +BBX 15 15 1 -1 +BITMAP +0038 +F9E0 +8820 +8820 +9020 +A020 +93FE +9020 +8820 +8820 +8820 +B020 +8020 +8020 +8020 +ENDCHAR +STARTCHAR uni9622 +ENCODING 38434 +BBX 14 15 1 -2 +BITMAP +F800 +8FF8 +9120 +9120 +A120 +9120 +9120 +8920 +8920 +8920 +D124 +A224 +8224 +841C +8800 +ENDCHAR +STARTCHAR uni9623 +ENCODING 38435 +BBX 14 16 1 -2 +BITMAP +0080 +F880 +8900 +91FC +9200 +A400 +91F8 +9010 +8820 +8840 +8880 +D100 +A204 +8204 +81FC +8000 +ENDCHAR +STARTCHAR uni9624 +ENCODING 38436 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +8840 +9240 +9258 +A268 +92C8 +9748 +8A48 +8A68 +8A50 +D244 +A244 +8204 +81FC +8000 +ENDCHAR +STARTCHAR uni9625 +ENCODING 38437 +BBX 14 16 1 -2 +BITMAP +0080 +F080 +9080 +A088 +A0D0 +CEE0 +A2C0 +92A0 +92A0 +9490 +D490 +A888 +9084 +8080 +8280 +8100 +ENDCHAR +STARTCHAR uni9626 +ENCODING 38438 +BBX 14 16 1 -2 +BITMAP +0080 +F880 +8880 +9080 +9288 +A288 +9290 +94A0 +8880 +8940 +8940 +D120 +A220 +8210 +8408 +8804 +ENDCHAR +STARTCHAR uni9627 +ENCODING 38439 +BBX 14 16 1 -2 +BITMAP +0020 +FA20 +8920 +9120 +9020 +A220 +9120 +9120 +8820 +883C +8BE0 +D020 +A020 +8020 +8020 +8020 +ENDCHAR +STARTCHAR uni9628 +ENCODING 38440 +BBX 15 14 1 -1 +BITMAP +FBFE +8A00 +8A00 +927C +A244 +9244 +9244 +8A44 +8A4C +8A40 +B240 +8242 +8442 +803E +ENDCHAR +STARTCHAR uni9629 +ENCODING 38441 +BBX 14 16 1 -2 +BITMAP +0010 +F8D0 +8F10 +9110 +9110 +A110 +9110 +97FC +8910 +8910 +8910 +D110 +A210 +8210 +8410 +8810 +ENDCHAR +STARTCHAR uni962A +ENCODING 38442 +BBX 15 14 1 -1 +BITMAP +FBFE +8A00 +9200 +9200 +A3FC +9284 +9284 +8A88 +8A48 +B450 +8420 +8850 +9088 +8306 +ENDCHAR +STARTCHAR uni962B +ENCODING 38443 +BBX 14 15 1 -2 +BITMAP +F800 +8BFC +9020 +9020 +A040 +9040 +90D0 +8948 +8A44 +8C44 +D040 +A040 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni962C +ENCODING 38444 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8840 +8FFE +9000 +A000 +91F0 +9110 +8910 +8910 +8910 +B210 +8212 +8412 +880E +ENDCHAR +STARTCHAR uni962D +ENCODING 38445 +BBX 14 16 1 -2 +BITMAP +0080 +F880 +8900 +9110 +9208 +A7FC +9004 +9120 +8920 +8920 +8920 +D120 +A224 +8224 +841C +8800 +ENDCHAR +STARTCHAR uni962E +ENCODING 38446 +BBX 15 14 1 -1 +BITMAP +FBFC +8800 +8800 +9000 +A7FE +9090 +9090 +8890 +8890 +8890 +B110 +8112 +8212 +840E +ENDCHAR +STARTCHAR uni962F +ENCODING 38447 +BBX 15 15 1 -1 +BITMAP +0020 +F820 +8820 +8820 +9120 +A120 +913C +9120 +8920 +8920 +8920 +B120 +8120 +8120 +87FE +ENDCHAR +STARTCHAR uni9630 +ENCODING 38448 +BBX 14 16 1 -2 +BITMAP +0020 +FA20 +8A20 +9224 +9224 +A228 +93B0 +9220 +8A20 +8A20 +8A20 +D224 +A2A4 +8324 +821C +8000 +ENDCHAR +STARTCHAR uni9631 +ENCODING 38449 +BBX 14 16 1 -2 +BITMAP +0110 +F910 +8910 +9110 +97FC +A110 +9110 +9110 +8910 +8FFC +8910 +D110 +A110 +8210 +8210 +8410 +ENDCHAR +STARTCHAR uni9632 +ENCODING 38450 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8840 +97FE +9080 +A080 +9080 +90FC +8884 +8884 +8904 +B104 +8104 +8204 +8438 +ENDCHAR +STARTCHAR uni9633 +ENCODING 38451 +BBX 14 14 1 -1 +BITMAP +FBFC +8A04 +8A04 +9204 +A204 +9204 +93FC +8A04 +8A04 +8A04 +B204 +8204 +8204 +83FC +ENDCHAR +STARTCHAR uni9634 +ENCODING 38452 +BBX 14 14 1 -1 +BITMAP +F8FC +8884 +8884 +9084 +A0FC +9084 +9084 +8884 +88FC +8884 +B104 +8104 +8204 +841C +ENDCHAR +STARTCHAR uni9635 +ENCODING 38453 +BBX 14 16 1 -2 +BITMAP +0080 +F880 +8880 +97FC +9100 +A140 +9240 +93F8 +8840 +8840 +8840 +D7FC +A040 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni9636 +ENCODING 38454 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +88A0 +90A0 +9110 +A208 +9404 +9110 +8910 +8910 +8910 +D110 +A110 +8210 +8210 +8410 +ENDCHAR +STARTCHAR uni9637 +ENCODING 38455 +BBX 14 15 1 -2 +BITMAP +F800 +8BFC +9040 +9040 +A040 +9240 +9240 +8A78 +8A40 +8A40 +D240 +A240 +8240 +8FFC +8000 +ENDCHAR +STARTCHAR uni9638 +ENCODING 38456 +BBX 14 16 1 -2 +BITMAP +0080 +F840 +8BF8 +9208 +9208 +A3F8 +9200 +9200 +8AF8 +8A10 +8A20 +D240 +A284 +8504 +84FC +8800 +ENDCHAR +STARTCHAR uni9639 +ENCODING 38457 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +8840 +93F8 +9040 +A040 +9040 +97FC +8840 +8880 +8880 +D110 +A208 +87FC +8204 +8000 +ENDCHAR +STARTCHAR uni963A +ENCODING 38458 +BBX 14 16 1 -2 +BITMAP +0008 +F83C +8BE0 +9220 +9220 +A220 +9220 +93FC +8A20 +8A20 +8A20 +D210 +A214 +8294 +834C +8224 +ENDCHAR +STARTCHAR uni963B +ENCODING 38459 +BBX 15 14 1 -1 +BITMAP +F9F8 +8908 +9108 +9108 +A1F8 +9108 +9108 +8908 +89F8 +8908 +B108 +8108 +8108 +87FE +ENDCHAR +STARTCHAR uni963C +ENCODING 38460 +BBX 15 15 1 -1 +BITMAP +0100 +F900 +8900 +89FE +9240 +A440 +9040 +907C +8840 +8840 +8840 +B07C +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni963D +ENCODING 38461 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +8840 +9040 +907C +A040 +9040 +9040 +8BF8 +8A08 +8A08 +D208 +A208 +8208 +83F8 +8208 +ENDCHAR +STARTCHAR uni963E +ENCODING 38462 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +88A0 +90A0 +9110 +A248 +9424 +9020 +8BF8 +8808 +8810 +D110 +A0A0 +8040 +8020 +8020 +ENDCHAR +STARTCHAR uni963F +ENCODING 38463 +BBX 15 14 1 -1 +BITMAP +FBFE +8804 +9004 +91E4 +A124 +9124 +9124 +8924 +8924 +89E4 +B004 +8004 +8004 +801C +ENDCHAR +STARTCHAR uni9640 +ENCODING 38464 +BBX 15 15 1 -1 +BITMAP +0020 +F820 +8BFE +9202 +9202 +A080 +9084 +9098 +88E0 +8880 +8880 +B080 +8082 +8082 +807E +ENDCHAR +STARTCHAR uni9641 +ENCODING 38465 +BBX 15 15 1 -1 +BITMAP +0100 +F900 +8900 +8BFE +9200 +A420 +9120 +913C +89E4 +8F24 +892C +B120 +8120 +8102 +80FE +ENDCHAR +STARTCHAR uni9642 +ENCODING 38466 +BBX 15 15 1 -1 +BITMAP +0020 +F820 +8820 +8BFE +9222 +A224 +9220 +93FC +8A84 +8A84 +8A48 +B450 +8420 +80D8 +8306 +ENDCHAR +STARTCHAR uni9643 +ENCODING 38467 +BBX 14 15 1 -2 +BITMAP +FBFC +8840 +9040 +9040 +A3FC +9244 +9244 +8AA4 +8A94 +8B14 +D204 +A204 +8204 +8214 +8208 +ENDCHAR +STARTCHAR uni9644 +ENCODING 38468 +BBX 15 15 1 -1 +BITMAP +0108 +F108 +9108 +92FE +9208 +A608 +AA48 +9248 +9228 +9208 +9208 +A208 +8208 +8208 +8238 +ENDCHAR +STARTCHAR uni9645 +ENCODING 38469 +BBX 14 15 1 -2 +BITMAP +F3F8 +9000 +A000 +A000 +C7FC +A040 +9040 +9250 +9248 +D448 +A444 +8844 +8040 +8140 +8080 +ENDCHAR +STARTCHAR uni9646 +ENCODING 38470 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +8840 +93F8 +9040 +A040 +9040 +97FC +8840 +8840 +8A48 +D248 +A248 +8248 +83F8 +8008 +ENDCHAR +STARTCHAR uni9647 +ENCODING 38471 +BBX 14 16 1 -2 +BITMAP +0120 +F910 +8910 +9100 +97FC +A140 +9140 +9148 +8948 +8A50 +8A50 +D264 +A444 +84C4 +893C +9000 +ENDCHAR +STARTCHAR uni9648 +ENCODING 38472 +BBX 14 16 1 -2 +BITMAP +0080 +F080 +9080 +AFFC +A100 +C240 +A240 +9440 +97F8 +9040 +D250 +A248 +8444 +8844 +8140 +8080 +ENDCHAR +STARTCHAR uni9649 +ENCODING 38473 +BBX 14 15 1 -2 +BITMAP +FBF8 +8810 +9020 +9060 +A090 +9108 +9604 +8800 +8BF8 +8840 +D040 +A040 +8040 +87FC +8000 +ENDCHAR +STARTCHAR uni964A +ENCODING 38474 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +88F8 +9108 +9290 +A060 +9040 +9090 +8B20 +887C +8884 +D348 +A030 +8020 +80C0 +8300 +ENDCHAR +STARTCHAR uni964B +ENCODING 38475 +BBX 15 14 1 -1 +BITMAP +F3FE +9020 +9020 +A1FC +A524 +A524 +9554 +9554 +958C +9504 +A504 +850C +8400 +87FE +ENDCHAR +STARTCHAR uni964C +ENCODING 38476 +BBX 15 14 1 -1 +BITMAP +FBFE +8820 +8840 +9040 +A1FC +9104 +9104 +8904 +89FC +8904 +B104 +8104 +8104 +81FC +ENDCHAR +STARTCHAR uni964D +ENCODING 38477 +BBX 15 15 1 -1 +BITMAP +0080 +F880 +89F8 +9308 +9490 +A060 +9198 +9606 +8810 +8BFC +8910 +B110 +87FE +8010 +8010 +ENDCHAR +STARTCHAR uni964E +ENCODING 38478 +BBX 14 16 1 -2 +BITMAP +0040 +FA40 +8A40 +93F8 +9240 +A440 +9040 +97FC +88E0 +8950 +8950 +D248 +A248 +8444 +8040 +8040 +ENDCHAR +STARTCHAR uni964F +ENCODING 38479 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8BFE +8840 +9040 +A0FC +9084 +9184 +8AFC +8C84 +8884 +B0FC +8084 +8084 +809C +ENDCHAR +STARTCHAR uni9650 +ENCODING 38480 +BBX 15 14 1 -1 +BITMAP +FBF8 +8A08 +9208 +93F8 +A208 +9208 +93F8 +8A42 +8A44 +8A28 +B220 +8210 +83C8 +8E06 +ENDCHAR +STARTCHAR uni9651 +ENCODING 38481 +BBX 14 15 1 -2 +BITMAP +FBFC +8840 +9040 +9080 +A3FC +92A4 +92A4 +8AA4 +8AA4 +8AA4 +D2A4 +A2A4 +8284 +8214 +8208 +ENDCHAR +STARTCHAR uni9652 +ENCODING 38482 +BBX 14 16 1 -2 +BITMAP +0080 +F880 +89F8 +9208 +9410 +A3FC +9200 +92F8 +8A88 +8A88 +8AA8 +D290 +A284 +8484 +847C +8800 +ENDCHAR +STARTCHAR uni9653 +ENCODING 38483 +BBX 14 16 1 -2 +BITMAP +0040 +F040 +97FC +90A0 +A110 +A208 +C5F4 +A000 +97FC +9080 +9100 +D3F8 +A008 +8008 +8050 +8020 +ENDCHAR +STARTCHAR uni9654 +ENCODING 38484 +BBX 14 16 1 -2 +BITMAP +0080 +F040 +9040 +AFFC +A080 +C108 +A210 +97E0 +9044 +9088 +D310 +AC20 +8040 +80A0 +8310 +8C08 +ENDCHAR +STARTCHAR uni9655 +ENCODING 38485 +BBX 14 16 1 -2 +BITMAP +0080 +F080 +9080 +AFF8 +A080 +C490 +A2A0 +9080 +9FFC +9140 +D140 +A220 +8220 +8410 +8808 +9004 +ENDCHAR +STARTCHAR uni9656 +ENCODING 38486 +BBX 14 16 1 -2 +BITMAP +0080 +F880 +8910 +9208 +97FC +A004 +9110 +9288 +8C84 +89F0 +8B10 +D4A0 +A040 +80A0 +8310 +8C0C +ENDCHAR +STARTCHAR uni9657 +ENCODING 38487 +BBX 13 16 1 -2 +BITMAP +0040 +FA48 +8948 +9150 +9040 +A3F8 +9208 +9208 +8BF8 +8A08 +8A08 +D3F8 +A208 +8208 +8228 +8210 +ENDCHAR +STARTCHAR uni9658 +ENCODING 38488 +BBX 15 14 1 -1 +BITMAP +FBFC +8800 +8924 +9124 +9248 +A248 +9124 +9124 +8800 +8BFC +B040 +8040 +8040 +87FE +ENDCHAR +STARTCHAR uni9659 +ENCODING 38489 +BBX 14 15 1 -2 +BITMAP +FBFC +8A00 +9200 +92F8 +A200 +9200 +93FC +8AA0 +8AA4 +8AA8 +D290 +A290 +8488 +84A4 +88C0 +ENDCHAR +STARTCHAR uni965A +ENCODING 38490 +BBX 14 16 1 -2 +BITMAP +0020 +F030 +97A8 +A028 +A020 +CFFC +A020 +9120 +9120 +95A0 +D520 +A520 +8514 +85D4 +8E0C +8404 +ENDCHAR +STARTCHAR uni965B +ENCODING 38491 +BBX 15 15 1 -1 +BITMAP +0220 +FA20 +8A24 +93B8 +9220 +A220 +9222 +93A2 +8E1E +8840 +8BF8 +B040 +8040 +8040 +8FFE +ENDCHAR +STARTCHAR uni965C +ENCODING 38492 +BBX 15 15 1 -1 +BITMAP +0020 +F820 +8BFE +8820 +9124 +A124 +9124 +92AA +8AAA +8C20 +8850 +B050 +8088 +8104 +8202 +ENDCHAR +STARTCHAR uni965D +ENCODING 38493 +BBX 15 15 1 -1 +BITMAP +0020 +F820 +8BFE +8820 +932C +A124 +9124 +92AA +8AAA +8850 +8850 +B088 +8088 +8104 +8202 +ENDCHAR +STARTCHAR uni965E +ENCODING 38494 +BBX 15 15 1 -1 +BITMAP +0048 +F888 +8B88 +8888 +93FE +A088 +9088 +9108 +8A08 +8840 +8840 +B3FC +8040 +8040 +87FE +ENDCHAR +STARTCHAR uni965F +ENCODING 38495 +BBX 15 15 1 -1 +BITMAP +0020 +F920 +893C +8920 +9120 +A7FE +9020 +90A0 +8920 +8A24 +8864 +B008 +8010 +8060 +8380 +ENDCHAR +STARTCHAR uni9660 +ENCODING 38496 +BBX 14 16 1 -2 +BITMAP +0050 +F848 +8BFC +9040 +9040 +A3F8 +9248 +9248 +8BF8 +8A48 +8A48 +D3F8 +A248 +8248 +8248 +8218 +ENDCHAR +STARTCHAR uni9661 +ENCODING 38497 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8BFC +8840 +9040 +A040 +97FE +9040 +8840 +8A40 +8A7C +B240 +8540 +84C0 +887E +ENDCHAR +STARTCHAR uni9662 +ENCODING 38498 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +97FC +9404 +9404 +A3F8 +9000 +9000 +8FFE +8920 +8920 +B220 +8222 +8422 +881E +ENDCHAR +STARTCHAR uni9663 +ENCODING 38499 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8FFC +9040 +93F8 +A248 +9248 +93F8 +8A48 +8A48 +8BF8 +B040 +8FFE +8040 +8040 +ENDCHAR +STARTCHAR uni9664 +ENCODING 38500 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +88A0 +9110 +9208 +ADF6 +9040 +9040 +8FFC +8840 +8A48 +B248 +8444 +8842 +81C0 +ENDCHAR +STARTCHAR uni9665 +ENCODING 38501 +BBX 14 15 1 -1 +BITMAP +0040 +F878 +8888 +9310 +9020 +A040 +927C +9244 +8A44 +8A44 +8A7C +B244 +8244 +8244 +827C +ENDCHAR +STARTCHAR uni9666 +ENCODING 38502 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8FFE +8840 +93FC +A040 +97FE +9080 +8888 +8FFE +8908 +B248 +8428 +8008 +8038 +ENDCHAR +STARTCHAR uni9667 +ENCODING 38503 +BBX 14 15 1 -2 +BITMAP +FBF8 +8A08 +9208 +93F8 +A208 +9208 +93F8 +8840 +8840 +8BF8 +D040 +A040 +8040 +87FC +8000 +ENDCHAR +STARTCHAR uni9668 +ENCODING 38504 +BBX 13 15 1 -2 +BITMAP +F9F0 +8910 +9110 +91F0 +A000 +93F8 +9208 +8A48 +8A48 +8A48 +D248 +A0A0 +8090 +8108 +8608 +ENDCHAR +STARTCHAR uni9669 +ENCODING 38505 +BBX 14 16 1 -2 +BITMAP +0080 +F080 +9140 +A140 +A220 +C410 +ABEC +9000 +9110 +9090 +D490 +A2A0 +8220 +8040 +8FFC +8000 +ENDCHAR +STARTCHAR uni966A +ENCODING 38506 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8BFC +9108 +9088 +A090 +9010 +97FE +8800 +89F8 +8908 +B108 +8108 +8108 +81F8 +ENDCHAR +STARTCHAR uni966B +ENCODING 38507 +BBX 14 16 1 -2 +BITMAP +0120 +F920 +8920 +973C +9120 +A120 +9120 +9738 +8920 +8920 +8920 +D73C +A120 +8120 +8120 +8120 +ENDCHAR +STARTCHAR uni966C +ENCODING 38508 +BBX 15 14 1 -1 +BITMAP +FFFC +9480 +9480 +A7FC +A4A4 +A4A4 +94A4 +97A8 +94A8 +9490 +E490 +87A8 +8CA4 +80C2 +ENDCHAR +STARTCHAR uni966D +ENCODING 38509 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +8BF8 +90A0 +9110 +A208 +97FC +9010 +8BD0 +8A50 +8A50 +D3D0 +A250 +8010 +8050 +8020 +ENDCHAR +STARTCHAR uni966E +ENCODING 38510 +BBX 14 16 1 -2 +BITMAP +0140 +F920 +8900 +93FC +9220 +A620 +9BF8 +9220 +8A20 +8BF8 +8A20 +D220 +A220 +83FC +8200 +8200 +ENDCHAR +STARTCHAR uni966F +ENCODING 38511 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +88A0 +9110 +9208 +A5F4 +9000 +93F8 +8AA8 +8AA8 +8BF8 +D2A8 +A2A8 +82A8 +8208 +8218 +ENDCHAR +STARTCHAR uni9670 +ENCODING 38512 +BBX 14 15 1 -1 +BITMAP +0040 +F840 +88A0 +9110 +96EC +A000 +91F0 +9020 +8BF8 +8800 +8FFC +B080 +8090 +8168 +8784 +ENDCHAR +STARTCHAR uni9671 +ENCODING 38513 +BBX 14 16 1 -2 +BITMAP +0100 +F900 +89FC +9204 +9484 +A494 +92A4 +9084 +8FFC +8884 +89C4 +D2A4 +A494 +8084 +80A8 +8010 +ENDCHAR +STARTCHAR uni9672 +ENCODING 38514 +BBX 15 15 1 -1 +BITMAP +0038 +FBC0 +8840 +8840 +97FC +A248 +9248 +9FFE +8A48 +8A48 +8A48 +B7FC +8040 +8040 +8FFE +ENDCHAR +STARTCHAR uni9673 +ENCODING 38515 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8FFE +9040 +93F8 +A248 +93F8 +9248 +8A48 +8BF8 +8950 +B248 +8444 +8842 +8040 +ENDCHAR +STARTCHAR uni9674 +ENCODING 38516 +BBX 14 16 1 -2 +BITMAP +0080 +F100 +97F8 +A448 +A448 +C7F8 +A448 +9488 +97F8 +9120 +D220 +AFFC +8020 +8020 +8020 +8020 +ENDCHAR +STARTCHAR uni9675 +ENCODING 38517 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8BFC +9040 +97FE +A110 +9210 +949E +8880 +89F8 +8A08 +B590 +8060 +81B0 +8E0E +ENDCHAR +STARTCHAR uni9676 +ENCODING 38518 +BBX 15 15 1 -1 +BITMAP +0100 +F900 +8BFE +8C02 +9102 +A1F2 +9282 +9082 +8FFA +8882 +8A92 +B292 +83F4 +8004 +8038 +ENDCHAR +STARTCHAR uni9677 +ENCODING 38519 +BBX 14 15 1 -1 +BITMAP +0080 +F880 +88FC +8904 +9104 +A208 +9430 +9000 +88C0 +8B1C +8A04 +B39C +8204 +8204 +83FC +ENDCHAR +STARTCHAR uni9678 +ENCODING 38520 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8BFC +9040 +9040 +A7FE +9110 +9110 +8E1E +8840 +8840 +B3FC +8040 +8040 +87FE +ENDCHAR +STARTCHAR uni9679 +ENCODING 38521 +BBX 14 16 1 -2 +BITMAP +0050 +FB90 +8910 +9110 +97FC +A110 +9110 +9210 +8C00 +8BF8 +8A08 +D208 +A3F8 +8208 +8208 +83F8 +ENDCHAR +STARTCHAR uni967A +ENCODING 38522 +BBX 15 15 1 -1 +BITMAP +0040 +F8A0 +8910 +9208 +9DF6 +A040 +93F8 +9248 +8A48 +8BF8 +8840 +B0A0 +8110 +8208 +8C06 +ENDCHAR +STARTCHAR uni967B +ENCODING 38523 +BBX 14 15 1 -2 +BITMAP +F7FC +90A0 +A0A0 +A7FC +C4A4 +A4A4 +94A4 +97FC +9040 +D040 +A7FC +8040 +8040 +8FFC +8000 +ENDCHAR +STARTCHAR uni967C +ENCODING 38524 +BBX 14 16 1 -2 +BITMAP +0040 +F844 +8BF4 +9048 +9050 +A7FC +9040 +9080 +89F8 +8B08 +8D08 +D1F8 +A108 +8108 +81F8 +8108 +ENDCHAR +STARTCHAR uni967D +ENCODING 38525 +BBX 15 14 1 -1 +BITMAP +FBF8 +8A08 +93F8 +9208 +A208 +93F8 +9000 +8FFE +8A00 +8BFC +B4A4 +8124 +8644 +8098 +ENDCHAR +STARTCHAR uni967E +ENCODING 38526 +BBX 14 15 1 -2 +BITMAP +F7FC +9040 +A080 +A3F8 +C2A8 +A2A8 +92A8 +92A8 +9258 +D040 +A7FC +80A0 +8110 +8208 +8404 +ENDCHAR +STARTCHAR uni967F +ENCODING 38527 +BBX 14 15 1 -2 +BITMAP +FBFC +8A20 +9220 +93F8 +A220 +92A8 +92A8 +8B74 +8A20 +8A50 +D248 +A284 +8300 +83FC +8000 +ENDCHAR +STARTCHAR uni9680 +ENCODING 38528 +BBX 14 16 1 -2 +BITMAP +0010 +F878 +8BC0 +9040 +97FC +A040 +93F8 +9248 +8BF8 +8A48 +8BF8 +D040 +A3F8 +8040 +87FC +8000 +ENDCHAR +STARTCHAR uni9681 +ENCODING 38529 +BBX 14 15 1 -2 +BITMAP +F7FC +9400 +A5F8 +A508 +C5F8 +A508 +95F8 +9440 +97FC +D490 +A590 +8460 +8490 +8508 +87FC +ENDCHAR +STARTCHAR uni9682 +ENCODING 38530 +BBX 15 15 1 -1 +BITMAP +0040 +F8A0 +8918 +8E06 +91F8 +A100 +91F8 +9100 +89F8 +8900 +8FFE +B100 +8108 +8234 +87C2 +ENDCHAR +STARTCHAR uni9683 +ENCODING 38531 +BBX 14 16 1 -2 +BITMAP +0080 +F140 +9220 +A410 +ABEC +C000 +A788 +94A8 +94A8 +97A8 +D4A8 +A4A8 +87A8 +8488 +84A8 +8590 +ENDCHAR +STARTCHAR uni9684 +ENCODING 38532 +BBX 15 14 1 -1 +BITMAP +FBF8 +8A08 +8BF8 +9208 +9208 +A3F8 +9000 +9FFE +8840 +8A40 +B27C +8240 +85C0 +987E +ENDCHAR +STARTCHAR uni9685 +ENCODING 38533 +BBX 15 14 1 -1 +BITMAP +F7FC +9444 +97FC +9444 +A444 +A7FC +9040 +97FE +9442 +9452 +A45A +85E6 +8402 +840E +ENDCHAR +STARTCHAR uni9686 +ENCODING 38534 +BBX 15 15 1 -1 +BITMAP +0100 +F900 +8BF8 +9208 +9510 +A0E0 +91B8 +9606 +8940 +8BFC +8C40 +B3F8 +8040 +8040 +8FFE +ENDCHAR +STARTCHAR uni9687 +ENCODING 38535 +BBX 14 16 1 -2 +BITMAP +0018 +F014 +9010 +97FC +A410 +A7F0 +C494 +A494 +97D4 +9558 +9558 +D498 +A554 +8614 +842C +8844 +ENDCHAR +STARTCHAR uni9688 +ENCODING 38536 +BBX 15 14 1 -1 +BITMAP +FBF8 +8A48 +93F8 +9248 +A248 +93F8 +9000 +8FFE +8A44 +8A44 +B228 +8210 +8388 +8E06 +ENDCHAR +STARTCHAR uni9689 +ENCODING 38537 +BBX 14 16 1 -2 +BITMAP +0080 +FB38 +8A08 +9208 +93B8 +A208 +9208 +93F8 +8800 +8800 +8BF8 +D040 +A040 +8040 +87FC +8000 +ENDCHAR +STARTCHAR uni968A +ENCODING 38538 +BBX 15 15 1 -1 +BITMAP +0208 +F908 +8910 +9FFE +9080 +A140 +9644 +90A4 +8928 +8E70 +88B0 +B128 +8224 +8C22 +81C0 +ENDCHAR +STARTCHAR uni968B +ENCODING 38539 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8BFE +9080 +91FC +A620 +91FE +9000 +89FC +8904 +89FC +B104 +81FC +8104 +811C +ENDCHAR +STARTCHAR uni968C +ENCODING 38540 +BBX 14 16 1 -2 +BITMAP +0080 +F840 +8BFC +9000 +9108 +A090 +97FC +9000 +89F8 +8908 +8908 +D1F8 +A108 +8108 +81F8 +8108 +ENDCHAR +STARTCHAR uni968D +ENCODING 38541 +BBX 15 15 1 -1 +BITMAP +0020 +F840 +89F8 +8908 +91F8 +A108 +9108 +91F8 +8800 +8BFC +8840 +B3F8 +8040 +8040 +87FE +ENDCHAR +STARTCHAR uni968E +ENCODING 38542 +BBX 15 15 1 -1 +BITMAP +0220 +FA26 +8BB8 +9220 +9222 +A39E +9620 +9040 +8BFC +8A04 +8A04 +B3FC +8204 +8204 +83FC +ENDCHAR +STARTCHAR uni968F +ENCODING 38543 +BBX 15 15 1 -1 +BITMAP +0020 +F420 +92FE +9220 +907C +A044 +90C4 +967C +8A44 +8A44 +8A7C +B244 +824C +8500 +88FE +ENDCHAR +STARTCHAR uni9690 +ENCODING 38544 +BBX 14 16 1 -2 +BITMAP +0100 +F100 +93F0 +9410 +A820 +A7F8 +C008 +A3F8 +9008 +97F8 +9008 +D080 +A248 +8A54 +8A14 +91F0 +ENDCHAR +STARTCHAR uni9691 +ENCODING 38545 +BBX 14 16 1 -2 +BITMAP +0040 +FA48 +8A48 +9248 +93F8 +A000 +97FC +9000 +8BF8 +8A08 +8A08 +D3F8 +A110 +80A0 +87FC +8000 +ENDCHAR +STARTCHAR uni9692 +ENCODING 38546 +BBX 14 16 1 -2 +BITMAP +0110 +F8A0 +8800 +93FC +90A0 +A3F8 +90A8 +97FC +88A8 +8BF8 +88A0 +D1B0 +A2A8 +84A4 +80A0 +80A0 +ENDCHAR +STARTCHAR uni9693 +ENCODING 38547 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +8BFC +9080 +91F8 +A220 +95FC +9000 +8840 +8BFC +8880 +D1F8 +A220 +8420 +83FC +8000 +ENDCHAR +STARTCHAR uni9694 +ENCODING 38548 +BBX 15 14 1 -1 +BITMAP +FBFE +8800 +91FC +9104 +A1FC +9000 +93FE +8A52 +8A92 +8B0E +B202 +82FA +8222 +8226 +ENDCHAR +STARTCHAR uni9695 +ENCODING 38549 +BBX 15 14 1 -1 +BITMAP +FBFC +8A04 +8A04 +93FC +A000 +93FC +9204 +8BFC +8A04 +8BFC +B204 +83FC +8108 +8606 +ENDCHAR +STARTCHAR uni9696 +ENCODING 38550 +BBX 14 16 1 -2 +BITMAP +0080 +F900 +8BF8 +9208 +9208 +A3F8 +9200 +93FC +8A00 +8BFC +8804 +D554 +A554 +8804 +8028 +8010 +ENDCHAR +STARTCHAR uni9697 +ENCODING 38551 +BBX 15 15 1 -1 +BITMAP +0040 +F880 +8BF8 +8A48 +9248 +A3F8 +9248 +9248 +8BF8 +88A0 +88AA +B0BE +8120 +8222 +8C1E +ENDCHAR +STARTCHAR uni9698 +ENCODING 38552 +BBX 15 15 1 -1 +BITMAP +0010 +F888 +8904 +8AFA +9000 +A010 +9088 +9104 +8A02 +89FC +8954 +B154 +8154 +8154 +83FE +ENDCHAR +STARTCHAR uni9699 +ENCODING 38553 +BBX 15 15 1 -1 +BITMAP +0040 +FA48 +8A44 +9442 +9BFA +A208 +93F8 +9208 +8BF8 +8840 +8A48 +B248 +8444 +8842 +81C0 +ENDCHAR +STARTCHAR uni969A +ENCODING 38554 +BBX 15 15 1 -1 +BITMAP +0444 +F444 +9248 +97FC +A404 +A5F4 +9110 +9110 +89F0 +8840 +8840 +B3F8 +8040 +8040 +8FFE +ENDCHAR +STARTCHAR uni969B +ENCODING 38555 +BBX 15 15 1 -1 +BITMAP +0200 +FBBC +8A44 +9544 +92A8 +A110 +9228 +9DF6 +8800 +8800 +8FFC +B040 +8248 +8C46 +81C0 +ENDCHAR +STARTCHAR uni969C +ENCODING 38556 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8BF8 +9110 +97FC +A000 +93F8 +9208 +8BF8 +8A08 +8BF8 +B040 +8FFE +8040 +8040 +ENDCHAR +STARTCHAR uni969D +ENCODING 38557 +BBX 15 15 1 -1 +BITMAP +0040 +F880 +8BF8 +8A08 +93F8 +9208 +A3F8 +9200 +93FE +8A00 +8BFC +B004 +8554 +8954 +8808 +ENDCHAR +STARTCHAR uni969E +ENCODING 38558 +BBX 14 16 1 -2 +BITMAP +0210 +F210 +9210 +AFA0 +A23C +CF28 +A248 +9FA8 +9428 +97A8 +D4A8 +A490 +8490 +89A8 +8848 +9084 +ENDCHAR +STARTCHAR uni969F +ENCODING 38559 +BBX 14 16 1 -2 +BITMAP +0248 +F490 +9248 +A000 +A3F8 +C248 +A3F8 +9248 +93F8 +9040 +D7FC +A0E0 +8150 +8248 +8C44 +8040 +ENDCHAR +STARTCHAR uni96A0 +ENCODING 38560 +BBX 15 15 1 -1 +BITMAP +001C +FBE0 +8A84 +9144 +9148 +A3FC +9004 +93FC +8804 +8BFC +8848 +B524 +8522 +888A +8878 +ENDCHAR +STARTCHAR uni96A1 +ENCODING 38561 +BBX 14 16 1 -2 +BITMAP +0080 +F040 +97F8 +A000 +A210 +C120 +A7FC +9440 +9540 +95F8 +D640 +A440 +85F8 +8840 +8840 +93FC +ENDCHAR +STARTCHAR uni96A2 +ENCODING 38562 +BBX 14 16 1 -2 +BITMAP +0040 +F840 +8BF8 +9040 +97FC +A210 +9738 +9210 +8B10 +8C7C +8800 +D7FC +A120 +8120 +8224 +841C +ENDCHAR +STARTCHAR uni96A3 +ENCODING 38563 +BBX 15 15 1 -1 +BITMAP +0248 +F948 +8950 +9FFE +9150 +A248 +9C46 +9240 +8B88 +8AFE +8CA8 +B328 +817E +8208 +8C08 +ENDCHAR +STARTCHAR uni96A4 +ENCODING 38564 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8BFC +8A44 +93FC +9040 +A7FE +9204 +93FC +8A04 +8BFC +B204 +83FC +8108 +8606 +ENDCHAR +STARTCHAR uni96A5 +ENCODING 38565 +BBX 15 15 1 -1 +BITMAP +0010 +F3A0 +98C4 +9528 +9210 +ADEE +A000 +93F8 +9208 +8A08 +8BF8 +B010 +8210 +8120 +9FFE +ENDCHAR +STARTCHAR uni96A6 +ENCODING 38566 +BBX 14 16 1 -2 +BITMAP +0020 +F790 +94FC +A480 +A4C4 +C7A8 +A400 +947C +9790 +9490 +DCFC +A490 +8490 +8790 +8490 +8010 +ENDCHAR +STARTCHAR uni96A7 +ENCODING 38567 +BBX 15 15 1 -1 +BITMAP +0418 +FA88 +8884 +917A +9420 +A242 +90A2 +9654 +8A90 +8A38 +8A54 +B292 +8230 +8500 +88FE +ENDCHAR +STARTCHAR uni96A8 +ENCODING 38568 +BBX 15 15 1 -1 +BITMAP +0420 +FBFE +8840 +98FC +9510 +A2FE +9000 +967C +8A44 +8A7C +8A44 +B27C +8244 +854C +88FE +ENDCHAR +STARTCHAR uni96A9 +ENCODING 38569 +BBX 15 15 1 -1 +BITMAP +0040 +F080 +97FC +9424 +A5D4 +A554 +A444 +A5F4 +94E4 +9554 +9040 +9FFE +A0A0 +8318 +8C06 +ENDCHAR +STARTCHAR uni96AA +ENCODING 38570 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +88A0 +8910 +960C +A1F0 +A000 +97BC +94A4 +94A4 +97BC +A208 +8208 +8514 +88A2 +ENDCHAR +STARTCHAR uni96AB +ENCODING 38571 +BBX 14 16 1 -2 +BITMAP +0040 +FBF8 +8840 +9110 +97FC +A110 +93F8 +9208 +8BF8 +8A08 +8BF8 +D208 +A3F8 +8110 +8208 +8404 +ENDCHAR +STARTCHAR uni96AC +ENCODING 38572 +BBX 14 15 1 -2 +BITMAP +F7FC +9248 +9444 +AFFC +A444 +C6EC +A554 +96EC +9444 +96EC +D554 +A6EC +8444 +8454 +8408 +ENDCHAR +STARTCHAR uni96AD +ENCODING 38573 +BBX 14 15 1 -2 +BITMAP +F3F8 +9040 +97FC +A444 +A358 +C040 +A358 +9000 +97FC +9040 +D3F8 +A2A8 +82A8 +82A8 +8218 +ENDCHAR +STARTCHAR uni96AE +ENCODING 38574 +BBX 14 16 1 -2 +BITMAP +0080 +F040 +97FC +9110 +A0A4 +AF58 +C554 +A550 +9B58 +9000 +9208 +D3F8 +A208 +83F8 +8208 +8408 +ENDCHAR +STARTCHAR uni96AF +ENCODING 38575 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8FFE +8840 +93FC +A000 +9FFE +9042 +8FFC +8800 +8FFE +B004 +8F7E +8944 +8F2C +ENDCHAR +STARTCHAR uni96B0 +ENCODING 38576 +BBX 15 14 1 -1 +BITMAP +FBFC +8A04 +8BFC +9204 +A3FC +9108 +9210 +8EB4 +8908 +8AD6 +B77A +8200 +84A4 +8892 +ENDCHAR +STARTCHAR uni96B1 +ENCODING 38577 +BBX 15 15 1 -1 +BITMAP +0038 +FBC8 +8924 +97FC +9040 +AFFE +9000 +93F8 +8808 +8BF8 +8808 +B3F8 +8544 +852A +88F8 +ENDCHAR +STARTCHAR uni96B2 +ENCODING 38578 +BBX 15 15 1 -1 +BITMAP +0040 +F948 +8A44 +8CD2 +9060 +A1FE +9720 +91FC +8920 +89FC +8920 +B1FE +8452 +84AA +88A6 +ENDCHAR +STARTCHAR uni96B3 +ENCODING 38579 +BBX 15 15 1 -1 +BITMAP +0020 +7DFE +4440 +48FC +5310 +48FE +4444 +447C +4444 +597C +42C4 +4C6C +F11E +1144 +6322 +ENDCHAR +STARTCHAR uni96B4 +ENCODING 38580 +BBX 15 15 1 -1 +BITMAP +0120 +F120 +9FFE +9460 +92BC +AFC4 +A03C +97A0 +94BC +97A0 +94BC +A7A0 +84BC +84A2 +85BE +ENDCHAR +STARTCHAR uni96B5 +ENCODING 38581 +BBX 15 16 0 -2 +BITMAP +0108 +F1EC +910A +A7E8 +A528 +C5DE +A728 +94EA +940A +97EA +D40C +A7EC +8A2A +8BEA +9156 +87E2 +ENDCHAR +STARTCHAR uni96B6 +ENCODING 38582 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +3FF8 +0108 +FFFE +0108 +0108 +3FF8 +6102 +1104 +0198 +0D60 +3118 +C106 +0700 +ENDCHAR +STARTCHAR uni96B7 +ENCODING 38583 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FDFC +1024 +7DFE +0024 +7DFC +0020 +FEA4 +1068 +5430 +5270 +92A8 +9126 +3060 +ENDCHAR +STARTCHAR uni96B8 +ENCODING 38584 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FDFC +1024 +3BFE +5424 +9224 +7DFC +0124 +FEA8 +1030 +5470 +54A8 +9326 +3060 +ENDCHAR +STARTCHAR uni96B9 +ENCODING 38585 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1080 +3FFC +2080 +6080 +BFF8 +2080 +2080 +2080 +3FF8 +2080 +2080 +2080 +3FFE +ENDCHAR +STARTCHAR uni96BA +ENCODING 38586 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +7FFC +4844 +4884 +1FF8 +3080 +5080 +9FF0 +1080 +1080 +1FF0 +1080 +1080 +1FFC +ENDCHAR +STARTCHAR uni96BB +ENCODING 38587 +BBX 14 15 1 -1 +BITMAP +1040 +1080 +3FF8 +6080 +BFF0 +2080 +3FF0 +2080 +3FFC +0000 +7FF8 +1010 +0C60 +0780 +F87C +ENDCHAR +STARTCHAR uni96BC +ENCODING 38588 +BBX 15 15 1 -1 +BITMAP +0840 +1080 +3FFC +6080 +BFF8 +2080 +3FF8 +2080 +3FFC +0100 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni96BD +ENCODING 38589 +BBX 15 15 1 -1 +BITMAP +1040 +1080 +3FFC +6080 +BFF8 +2080 +3FF8 +2080 +3FFE +0000 +7FF0 +0410 +081C +1004 +607C +ENDCHAR +STARTCHAR uni96BE +ENCODING 38590 +BBX 15 16 0 -2 +BITMAP +00A0 +0090 +FC80 +05FE +0510 +4B10 +2DFC +2910 +1110 +11FC +2910 +2510 +4510 +81FE +0100 +0100 +ENDCHAR +STARTCHAR uni96BF +ENCODING 38591 +BBX 15 16 0 -2 +BITMAP +2850 +2448 +2480 +20FE +3D90 +E290 +20FC +2090 +2090 +20FC +2090 +2090 +1490 +14FE +0C80 +0480 +ENDCHAR +STARTCHAR uni96C0 +ENCODING 38592 +BBX 15 15 1 -1 +BITMAP +0100 +0910 +1128 +2124 +4742 +0190 +0620 +1FF8 +F080 +1FF0 +1080 +1FF0 +1080 +1080 +1FFC +ENDCHAR +STARTCHAR uni96C1 +ENCODING 38593 +BBX 15 14 1 -1 +BITMAP +7FFC +4000 +4488 +4490 +49FE +4B20 +5D20 +69FC +4920 +4920 +49FC +8920 +8920 +09FE +ENDCHAR +STARTCHAR uni96C2 +ENCODING 38594 +BBX 15 16 0 -2 +BITMAP +0850 +0848 +1480 +14FE +2390 +5290 +88FC +0890 +0090 +7EFC +0290 +0490 +0490 +08FE +0880 +0080 +ENDCHAR +STARTCHAR uni96C3 +ENCODING 38595 +BBX 15 16 0 -2 +BITMAP +0050 +7E48 +2480 +24FE +2590 +2690 +24FC +FF90 +2490 +24FC +2490 +2490 +2490 +24FE +4480 +8480 +ENDCHAR +STARTCHAR uni96C4 +ENCODING 38596 +BBX 15 15 1 -1 +BITMAP +1088 +1088 +1090 +11FE +FD10 +1310 +11FC +2910 +2910 +4910 +51FC +9510 +1D10 +6310 +01FE +ENDCHAR +STARTCHAR uni96C5 +ENCODING 38597 +BBX 15 15 1 -1 +BITMAP +0020 +7E24 +2448 +24FE +2590 +2490 +FEFC +1490 +1490 +1490 +24FC +2490 +4490 +8490 +1CFE +ENDCHAR +STARTCHAR uni96C6 +ENCODING 38598 +BBX 15 15 1 -1 +BITMAP +0840 +1080 +3FFC +E080 +3FF8 +2080 +3FF8 +2080 +3FFC +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni96C7 +ENCODING 38599 +BBX 15 14 1 -1 +BITMAP +7FFC +0000 +3FFC +2004 +3FFC +2420 +2FFC +2840 +3FF8 +4840 +4FF8 +8840 +0840 +0FFE +ENDCHAR +STARTCHAR uni96C8 +ENCODING 38600 +BBX 15 16 0 -2 +BITMAP +0440 +FC7E +0440 +0100 +0880 +1FFC +1080 +3080 +5FF8 +9080 +1080 +1FF8 +1080 +1080 +1FFC +1000 +ENDCHAR +STARTCHAR uni96C9 +ENCODING 38601 +BBX 15 15 1 -1 +BITMAP +2084 +2084 +3C88 +51FE +9310 +1510 +11FC +FF10 +1110 +1110 +29FC +2910 +4510 +4510 +81FE +ENDCHAR +STARTCHAR uni96CA +ENCODING 38602 +BBX 15 16 0 -2 +BITMAP +2050 +2048 +2080 +7EFE +4390 +8290 +7AFC +4A90 +4A90 +4AFC +4A90 +7A90 +4A90 +02FE +1480 +0880 +ENDCHAR +STARTCHAR uni96CB +ENCODING 38603 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +7FFC +4100 +FFF8 +4100 +7FF8 +4100 +7FFE +0000 +7C7C +4444 +47C4 +4004 +401C +ENDCHAR +STARTCHAR uni96CC +ENCODING 38604 +BBX 15 15 1 -1 +BITMAP +0048 +1448 +1450 +14FE +5590 +5E90 +54FC +5490 +5490 +5490 +54FC +5C90 +6590 +8390 +00FE +ENDCHAR +STARTCHAR uni96CD +ENCODING 38605 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +FFFE +1088 +2088 +45FE +8910 +5310 +25FC +2D10 +F510 +09FC +1110 +2110 +C1FE +ENDCHAR +STARTCHAR uni96CE +ENCODING 38606 +BBX 15 15 1 -1 +BITMAP +0084 +7884 +4888 +49FE +4B10 +7D10 +49FC +4910 +4910 +7910 +49FC +4910 +4F10 +7110 +C1FE +ENDCHAR +STARTCHAR uni96CF +ENCODING 38607 +BBX 15 16 0 -2 +BITMAP +2050 +2048 +3E80 +42FE +8590 +0A90 +FEFC +0290 +0290 +7EFC +0290 +0290 +0290 +FEFE +0280 +0080 +ENDCHAR +STARTCHAR uni96D0 +ENCODING 38608 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +0100 +3FFE +2102 +21F0 +2F04 +22FC +2240 +27FE +2C40 +37FC +2440 +47FC +4440 +87FE +ENDCHAR +STARTCHAR uni96D1 +ENCODING 38609 +BBX 15 15 1 -1 +BITMAP +2048 +2048 +F850 +2AFE +2A90 +4F90 +90FC +1090 +FE90 +1090 +38FC +3490 +5290 +9090 +10FE +ENDCHAR +STARTCHAR uni96D2 +ENCODING 38610 +BBX 15 15 1 -1 +BITMAP +1088 +1088 +3C90 +45FE +C510 +2B10 +15FC +2910 +4510 +8310 +7DFC +4510 +4510 +4510 +7DFE +ENDCHAR +STARTCHAR uni96D3 +ENCODING 38611 +BBX 15 16 0 -2 +BITMAP +1050 +1048 +2880 +44FE +8390 +7E90 +10FC +1090 +FE90 +10FC +5490 +5290 +9290 +10FE +5080 +2080 +ENDCHAR +STARTCHAR uni96D4 +ENCODING 38612 +BBX 15 16 0 -2 +BITMAP +1428 +1224 +2040 +3F7E +64C8 +A548 +3F7E +2448 +2448 +3F7E +2448 +2448 +2448 +3F7E +2040 +2040 +ENDCHAR +STARTCHAR uni96D5 +ENCODING 38613 +BBX 15 15 1 -1 +BITMAP +0024 +7F24 +4928 +497E +5D48 +49C8 +497C +5D48 +4948 +5D48 +557C +5548 +5D48 +8148 +837E +ENDCHAR +STARTCHAR uni96D6 +ENCODING 38614 +BBX 15 15 1 -1 +BITMAP +0048 +7C48 +4490 +44FE +7D90 +1290 +10FC +FE90 +9290 +9290 +FEFC +1490 +1690 +1A90 +E2FE +ENDCHAR +STARTCHAR uni96D7 +ENCODING 38615 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +107E +FE80 +1150 +7C48 +44FE +7D90 +4690 +7CFC +1090 +FEFC +1090 +1090 +10FE +1080 +ENDCHAR +STARTCHAR uni96D8 +ENCODING 38616 +BBX 15 15 1 -1 +BITMAP +0088 +7DFE +5490 +55FE +5710 +55FC +5510 +5DFC +E510 +45FE +4400 +47FC +4488 +8470 +8F8E +ENDCHAR +STARTCHAR uni96D9 +ENCODING 38617 +BBX 15 15 1 -1 +BITMAP +1224 +2428 +7F7E +A4C8 +3F7C +2448 +3F7C +2448 +3F7E +0000 +7FF8 +1010 +0820 +07C0 +F83E +ENDCHAR +STARTCHAR uni96DA +ENCODING 38618 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +3EF8 +2288 +3EF8 +0840 +1FF8 +F080 +1FF0 +1080 +1FF0 +1080 +1080 +1FFC +ENDCHAR +STARTCHAR uni96DB +ENCODING 38619 +BBX 15 15 1 -1 +BITMAP +2024 +7F24 +9148 +557E +7DC8 +2148 +467C +2048 +7F48 +9148 +557C +5548 +7D48 +2148 +467E +ENDCHAR +STARTCHAR uni96DC +ENCODING 38620 +BBX 15 15 1 -1 +BITMAP +1088 +1088 +FE90 +01FE +4710 +4510 +ABFC +1110 +FF10 +1110 +39FC +3510 +5310 +9110 +11FE +ENDCHAR +STARTCHAR uni96DD +ENCODING 38621 +BBX 15 15 1 -1 +BITMAP +24A4 +4924 +9228 +497E +24C8 +7E48 +427E +7E48 +0048 +FF48 +897E +FF48 +8048 +8148 +7F7E +ENDCHAR +STARTCHAR uni96DE +ENCODING 38622 +BBX 15 15 1 -1 +BITMAP +0648 +7C48 +5450 +8AFE +8A90 +1190 +24FC +6890 +1490 +FE90 +11FC +FE90 +2890 +4490 +82FE +ENDCHAR +STARTCHAR uni96DF +ENCODING 38623 +BBX 15 16 0 -2 +BITMAP +0100 +4204 +7FFC +0880 +3440 +CFFC +1880 +2FF8 +4880 +0FFE +0800 +3FFC +2424 +2BD4 +2244 +23CC +ENDCHAR +STARTCHAR uni96E0 +ENCODING 38624 +BBX 15 16 0 -2 +BITMAP +3018 +2A14 +4120 +7D3E +D068 +5328 +7D3E +5128 +5128 +7D3E +5128 +5168 +51A8 +7D3E +4020 +4020 +ENDCHAR +STARTCHAR uni96E1 +ENCODING 38625 +BBX 15 16 0 -2 +BITMAP +0028 +EE24 +2240 +AA7E +66C8 +AB48 +187E +6648 +8948 +307E +C448 +1948 +E248 +0C7E +3040 +C040 +ENDCHAR +STARTCHAR uni96E2 +ENCODING 38626 +BBX 15 15 1 -1 +BITMAP +1048 +1048 +FE50 +00FE +AB90 +9290 +AAFC +FE90 +1090 +FE90 +92FC +AA90 +F690 +8290 +86FE +ENDCHAR +STARTCHAR uni96E3 +ENCODING 38627 +BBX 15 15 1 -1 +BITMAP +2448 +2448 +FF50 +24FE +7E90 +4B90 +4AFC +7E90 +0890 +7F90 +08FC +FF90 +1490 +2290 +C1FE +ENDCHAR +STARTCHAR uni96E4 +ENCODING 38628 +BBX 15 16 0 -2 +BITMAP +3AB8 +2108 +3AB8 +2288 +3938 +2288 +7FFE +4882 +9FFC +3080 +5FF8 +9080 +1FF8 +1080 +1FFC +1000 +ENDCHAR +STARTCHAR uni96E5 +ENCODING 38629 +BBX 15 16 0 -2 +BITMAP +0880 +1FFC +3080 +5FF8 +9080 +1FF8 +1080 +1FFC +2448 +3F7E +64C8 +BF7E +2448 +3F7E +2448 +3F7E +ENDCHAR +STARTCHAR uni96E6 +ENCODING 38630 +BBX 15 16 0 -2 +BITMAP +318C +294A +2210 +7BDE +56B4 +D294 +7BDE +5294 +5294 +7BDE +5294 +5294 +5294 +7BDE +4210 +4210 +ENDCHAR +STARTCHAR uni96E7 +ENCODING 38631 +BBX 15 16 0 -2 +BITMAP +0880 +1FFC +3080 +DFF8 +1080 +1FFC +1428 +3F7E +64C8 +BF7E +2448 +3F7E +0100 +FFFE +0920 +711C +ENDCHAR +STARTCHAR uni96E8 +ENCODING 38632 +BBX 15 14 1 -1 +BITMAP +FFFE +0100 +0100 +7FFC +4104 +5144 +4924 +4514 +4104 +5144 +4924 +4514 +4104 +401C +ENDCHAR +STARTCHAR uni96E9 +ENCODING 38633 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +7FFC +4104 +1D70 +0000 +3FF8 +0000 +FFFE +0400 +0FF0 +1010 +0010 +01E0 +ENDCHAR +STARTCHAR uni96EA +ENCODING 38634 +BBX 14 14 1 -1 +BITMAP +FFFC +0200 +FFFC +8204 +BAF4 +8204 +BAF4 +0000 +3FF0 +0010 +3FF0 +0010 +0010 +3FF0 +ENDCHAR +STARTCHAR uni96EB +ENCODING 38635 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +FFFE +8102 +9D72 +8102 +1D70 +0000 +FFFE +0100 +01C0 +0130 +0100 +0100 +ENDCHAR +STARTCHAR uni96EC +ENCODING 38636 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +0100 +7FFC +0380 +0560 +1918 +E106 +0100 +ENDCHAR +STARTCHAR uni96ED +ENCODING 38637 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +3FE0 +0840 +0CF8 +1210 +1120 +20C0 +4330 +9C0E +ENDCHAR +STARTCHAR uni96EE +ENCODING 38638 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +01F0 +3E00 +03F0 +3E00 +03FA +7E02 +01FE +ENDCHAR +STARTCHAR uni96EF +ENCODING 38639 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +7FFC +4104 +5D74 +4104 +1D70 +0100 +FFFE +0820 +0440 +0380 +0EE0 +F01E +ENDCHAR +STARTCHAR uni96F0 +ENCODING 38640 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +7FFC +4104 +5D74 +4104 +5D74 +0420 +0810 +3FF8 +C216 +0410 +1810 +60E0 +ENDCHAR +STARTCHAR uni96F1 +ENCODING 38641 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0200 +0100 +7FFC +0400 +07F0 +0410 +0810 +10A0 +6040 +ENDCHAR +STARTCHAR uni96F2 +ENCODING 38642 +BBX 14 14 1 -1 +BITMAP +7FF8 +0200 +FFFC +8204 +BA74 +8204 +3A70 +0000 +3FF8 +0000 +FFFC +0420 +08F0 +7F0C +ENDCHAR +STARTCHAR uni96F3 +ENCODING 38643 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +3FFC +2000 +2100 +2FF8 +2108 +4208 +4450 +9820 +ENDCHAR +STARTCHAR uni96F4 +ENCODING 38644 +BBX 15 14 0 -1 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0200 +0100 +3FF8 +0000 +0820 +0440 +FFFE +ENDCHAR +STARTCHAR uni96F5 +ENCODING 38645 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +0100 +1FF0 +1110 +1110 +FFFE +0280 +1C70 +E00E +ENDCHAR +STARTCHAR uni96F6 +ENCODING 38646 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +7FFC +4104 +5D74 +0380 +0C60 +3018 +C7C6 +0000 +3FF8 +0108 +0138 +0100 +ENDCHAR +STARTCHAR uni96F7 +ENCODING 38647 +BBX 13 14 2 -1 +BITMAP +7FF0 +0200 +FFF8 +8208 +BAE8 +8208 +3AE0 +0000 +7FF0 +4210 +7FF0 +4210 +4210 +7FF0 +ENDCHAR +STARTCHAR uni96F8 +ENCODING 38648 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +0820 +7FFC +0820 +0FE0 +0820 +0FE0 +0820 +ENDCHAR +STARTCHAR uni96F9 +ENCODING 38649 +BBX 14 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +B974 +0800 +0FF0 +1010 +3F90 +5090 +1FB0 +1004 +1004 +0FFC +ENDCHAR +STARTCHAR uni96FA +ENCODING 38650 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +1FF0 +0220 +0140 +7FFC +0484 +1888 +6280 +0100 +ENDCHAR +STARTCHAR uni96FB +ENCODING 38651 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +FFFE +8102 +B972 +0000 +3FF8 +2108 +3FF8 +2108 +2108 +3FFA +0102 +00FE +ENDCHAR +STARTCHAR uni96FC +ENCODING 38652 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +7FFC +0400 +0800 +1FF8 +2808 +C808 +0FF8 +0808 +ENDCHAR +STARTCHAR uni96FD +ENCODING 38653 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +00F8 +7F00 +1110 +0920 +FFFE +0100 +0500 +0200 +ENDCHAR +STARTCHAR uni96FE +ENCODING 38654 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0400 +0FE0 +1440 +0380 +1C70 +E20E +0FE0 +0420 +1860 +ENDCHAR +STARTCHAR uni96FF +ENCODING 38655 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +2448 +1450 +0C60 +1450 +6448 +0842 +1042 +603E +ENDCHAR +STARTCHAR uni9700 +ENCODING 38656 +BBX 13 14 2 -1 +BITMAP +FFF8 +0200 +FFF8 +8208 +BAE8 +8208 +3AE0 +0000 +FFF8 +0400 +FFF8 +8888 +8888 +8898 +ENDCHAR +STARTCHAR uni9701 +ENCODING 38657 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0080 +7FFC +0820 +07C0 +1830 +E44E +0440 +0840 +1040 +ENDCHAR +STARTCHAR uni9702 +ENCODING 38658 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +2040 +1040 +87FE +50E0 +2150 +E248 +2444 +2842 +ENDCHAR +STARTCHAR uni9703 +ENCODING 38659 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +2040 +13FC +8244 +54A8 +10A0 +E122 +2222 +241E +2800 +ENDCHAR +STARTCHAR uni9704 +ENCODING 38660 +BBX 15 14 1 -1 +BITMAP +3FFC +0100 +7FFC +4104 +1C70 +1110 +2108 +DFFE +1008 +1FF8 +1008 +1FF8 +1008 +1038 +ENDCHAR +STARTCHAR uni9705 +ENCODING 38661 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +0100 +7FFC +0000 +3FF8 +0000 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni9706 +ENCODING 38662 +BBX 14 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +B974 +0000 +F030 +21C0 +7040 +17FC +9040 +63F8 +3000 +4FFC +ENDCHAR +STARTCHAR uni9707 +ENCODING 38663 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +7FFC +4104 +5D74 +0000 +7FFC +4000 +5FF8 +4000 +7FFE +8848 +8F30 +380E +ENDCHAR +STARTCHAR uni9708 +ENCODING 38664 +BBX 14 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +B974 +0000 +6040 +17FC +C040 +23F8 +0248 +0A48 +3258 +C040 +ENDCHAR +STARTCHAR uni9709 +ENCODING 38665 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +1000 +1FFC +2000 +5FF0 +1210 +FFFE +2090 +3FFC +0030 +ENDCHAR +STARTCHAR uni970A +ENCODING 38666 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +7FFC +4104 +5D74 +4104 +1D70 +0000 +3FF8 +0000 +7FFC +2448 +1450 +FFFE +ENDCHAR +STARTCHAR uni970B +ENCODING 38667 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0200 +1FF0 +0210 +7FFC +0210 +1FF0 +0400 +7FFC +0820 +07C0 +7838 +ENDCHAR +STARTCHAR uni970C +ENCODING 38668 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +3FF8 +2108 +27C8 +2108 +2FE8 +2008 +27C8 +4448 +47C8 +8018 +ENDCHAR +STARTCHAR uni970D +ENCODING 38669 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +FFFE +8102 +B972 +0100 +0840 +3FFE +2080 +FFFC +2080 +3FFC +2080 +3FFE +ENDCHAR +STARTCHAR uni970E +ENCODING 38670 +BBX 14 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +3974 +0100 +3FF0 +0840 +7FF8 +0200 +FFFC +1040 +0F80 +7878 +ENDCHAR +STARTCHAR uni970F +ENCODING 38671 +BBX 15 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +B974 +0000 +0440 +7C7C +0440 +7C7C +0440 +FC7E +0840 +3040 +ENDCHAR +STARTCHAR uni9710 +ENCODING 38672 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +2788 +1088 +8788 +5410 +2790 +E0A4 +22BE +2102 +ENDCHAR +STARTCHAR uni9711 +ENCODING 38673 +BBX 15 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +B974 +0040 +6040 +107E +C040 +23FC +0204 +0A04 +3204 +C3FC +ENDCHAR +STARTCHAR uni9712 +ENCODING 38674 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +0810 +FFA8 +88A8 +6B44 +08A2 +6B10 +0010 +7E7C +0004 +FF04 +1008 +2208 +7F10 +0110 +ENDCHAR +STARTCHAR uni9713 +ENCODING 38675 +BBX 14 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +B974 +0000 +3CF0 +2010 +3CF0 +2010 +3FF0 +0884 +3084 +C07C +ENDCHAR +STARTCHAR uni9714 +ENCODING 38676 +BBX 15 15 1 -1 +BITMAP +7FFC +0100 +FFFE +8102 +BD7A +8102 +BC7A +4080 +2040 +93FC +4040 +21F8 +0840 +3040 +C7FE +ENDCHAR +STARTCHAR uni9715 +ENCODING 38677 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +087E +FF90 +8890 +6B54 +0854 +6B54 +0054 +7F7C +0014 +FF90 +1012 +2212 +7F12 +210E +ENDCHAR +STARTCHAR uni9716 +ENCODING 38678 +BBX 15 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +B974 +0000 +1020 +FDFE +1020 +3870 +3668 +50A4 +9122 +1020 +ENDCHAR +STARTCHAR uni9717 +ENCODING 38679 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +2040 +10A0 +0158 +4626 +29F0 +0810 +70A0 +1040 +1020 +ENDCHAR +STARTCHAR uni9718 +ENCODING 38680 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +2000 +13FC +0204 +42F4 +2A04 +0AF4 +7294 +12F4 +120C +ENDCHAR +STARTCHAR uni9719 +ENCODING 38681 +BBX 15 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +3970 +1020 +FFFC +1020 +0100 +1FF0 +1110 +FFFE +0820 +701C +ENDCHAR +STARTCHAR uni971A +ENCODING 38682 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0020 +7E20 +247E +18A4 +FF28 +2910 +4A28 +98C6 +ENDCHAR +STARTCHAR uni971B +ENCODING 38683 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +7BDE +0842 +7BDE +4210 +7BDE +0842 +294A +1084 +ENDCHAR +STARTCHAR uni971C +ENCODING 38684 +BBX 13 14 2 -1 +BITMAP +7FF0 +0200 +FFF8 +8208 +BAE8 +0200 +3AF8 +1088 +FEF8 +3088 +38F8 +5488 +9088 +10F8 +ENDCHAR +STARTCHAR uni971D +ENCODING 38685 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0000 +7BBC +4AA4 +4AA4 +4AA4 +4AA4 +7BBC +4AA4 +ENDCHAR +STARTCHAR uni971E +ENCODING 38686 +BBX 14 14 2 -1 +BITMAP +FFF8 +0200 +FFF8 +8208 +BAE8 +0000 +FDF0 +8410 +FDF0 +8000 +FDF8 +8090 +FC60 +839C +ENDCHAR +STARTCHAR uni971F +ENCODING 38687 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +1090 +0890 +43FC +2090 +0890 +17FE +7090 +1108 +1204 +ENDCHAR +STARTCHAR uni9720 +ENCODING 38688 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +2020 +1050 +FC88 +4944 +4A22 +10F8 +1E08 +F010 +4020 +ENDCHAR +STARTCHAR uni9721 +ENCODING 38689 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0020 +3C10 +24E0 +3C22 +25B4 +3CA8 +2524 +26A2 +4C40 +ENDCHAR +STARTCHAR uni9722 +ENCODING 38690 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +000C +7DF0 +4508 +7D70 +4544 +7D68 +4550 +5548 +8A66 +ENDCHAR +STARTCHAR uni9723 +ENCODING 38691 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +7FFC +4104 +1D70 +0000 +1FF0 +1010 +3FF8 +2008 +3FF8 +2008 +3FF8 +E00E +ENDCHAR +STARTCHAR uni9724 +ENCODING 38692 +BBX 14 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +B974 +0400 +38FC +2024 +2244 +7FFC +2108 +3FF8 +2108 +3FF8 +ENDCHAR +STARTCHAR uni9725 +ENCODING 38693 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +7FFE +4002 +9FF4 +0600 +3B08 +04B0 +19C0 +62A0 +0C98 +7306 +ENDCHAR +STARTCHAR uni9726 +ENCODING 38694 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +2204 +2208 +F7B0 +2204 +7708 +AAB2 +2244 +2218 +2260 +ENDCHAR +STARTCHAR uni9727 +ENCODING 38695 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +FFFE +8102 +BD7A +0140 +7E7E +04A4 +2818 +FEE6 +1A10 +28FE +C822 +18CE +ENDCHAR +STARTCHAR uni9728 +ENCODING 38696 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +3F08 +2108 +3F7E +2008 +2F48 +2028 +5F88 +4408 +9528 +2C90 +ENDCHAR +STARTCHAR uni9729 +ENCODING 38697 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +087C +7F44 +2248 +3E50 +0048 +3E44 +0464 +7F58 +0840 +1840 +ENDCHAR +STARTCHAR uni972A +ENCODING 38698 +BBX 15 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +B974 +0018 +67E8 +1244 +C424 +23FC +0040 +0FFE +3040 +C3FC +ENDCHAR +STARTCHAR uni972B +ENCODING 38699 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +7EFC +2244 +1A34 +62C4 +0400 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni972C +ENCODING 38700 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +8414 +3FF8 +2108 +3FF8 +2108 +3FF8 +0440 +3FF8 +0440 +FFFE +0820 +1010 +ENDCHAR +STARTCHAR uni972D +ENCODING 38701 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +8414 +23F8 +1208 +03F8 +7208 +13F8 +1100 +13FC +1444 +1AA4 +13F4 +000C +ENDCHAR +STARTCHAR uni972E +ENCODING 38702 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +8414 +2110 +17FC +9110 +41F0 +4110 +11F0 +2110 +E7FC +2250 +2288 +23FC +ENDCHAR +STARTCHAR uni972F +ENCODING 38703 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +0090 +7EA0 +0444 +2BA8 +1010 +2FE8 +C826 +0FE0 +0440 +7FFC +ENDCHAR +STARTCHAR uni9730 +ENCODING 38704 +BBX 15 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +B974 +2440 +FE7E +24C8 +FF28 +4428 +7C10 +4428 +7C44 +4482 +ENDCHAR +STARTCHAR uni9731 +ENCODING 38705 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +9FF4 +0220 +7FFC +0488 +7A80 +0100 +3FF8 +2828 +37D8 +2448 +27C8 +2018 +ENDCHAR +STARTCHAR uni9732 +ENCODING 38706 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +FFFE +8102 +BD7A +0020 +7C7C +45C4 +7C38 +106C +5D82 +50FC +5C84 +E0FC +ENDCHAR +STARTCHAR uni9733 +ENCODING 38707 +BBX 14 15 2 -1 +BITMAP +7FF0 +0200 +FFF8 +8208 +B8E8 +0100 +F3F8 +9610 +91E0 +AE9C +93F0 +9480 +A7F0 +8080 +8FF8 +ENDCHAR +STARTCHAR uni9734 +ENCODING 38708 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +10FC +FE24 +93FE +5424 +10FC +5420 +0124 +7CA8 +0070 +FEA8 +2124 +4822 +FCA0 +0440 +ENDCHAR +STARTCHAR uni9735 +ENCODING 38709 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +3E28 +2224 +3E24 +0020 +FFFE +2224 +3E28 +2392 +FE2A +0246 +ENDCHAR +STARTCHAR uni9736 +ENCODING 38710 +BBX 15 15 1 -1 +BITMAP +7FFC +0100 +FFFE +8102 +BD7A +C020 +33FE +0888 +C3FE +2242 +01FC +1080 +20FC +4104 +861C +ENDCHAR +STARTCHAR uni9737 +ENCODING 38711 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +8414 +01F8 +7908 +49F8 +4908 +4BFE +7900 +4BFC +4CA4 +4924 +7A54 +4888 +ENDCHAR +STARTCHAR uni9738 +ENCODING 38712 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +FFFE +8102 +BD7A +2500 +FF7C +2244 +7F7C +4944 +7F7C +0844 +FFC4 +088C +ENDCHAR +STARTCHAR uni9739 +ENCODING 38713 +BBX 15 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +B974 +0020 +7DFC +4488 +7C50 +43FE +7C20 +A5FC +A420 +3C20 +ENDCHAR +STARTCHAR uni973A +ENCODING 38714 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +2010 +4550 +97DE +2024 +6FD4 +A014 +2788 +24D4 +28A2 +ENDCHAR +STARTCHAR uni973B +ENCODING 38715 +BBX 14 15 1 -1 +BITMAP +7FF8 +0200 +FFFC +8204 +B874 +0480 +3FF0 +2490 +3FF0 +2490 +FFFC +2010 +3FF0 +1020 +FFFC +ENDCHAR +STARTCHAR uni973C +ENCODING 38716 +BBX 15 16 0 -2 +BITMAP +0080 +7C80 +10FC +FF00 +92F8 +5400 +11F8 +5448 +0168 +7CC8 +01F8 +FE4A +20EA +495A +FC46 +0442 +ENDCHAR +STARTCHAR uni973D +ENCODING 38717 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +7FFC +4104 +5C74 +0100 +FFFE +26A8 +CD26 +1010 +1FF0 +1010 +1FF0 +2010 +ENDCHAR +STARTCHAR uni973E +ENCODING 38718 +BBX 15 14 1 -1 +BITMAP +7FF8 +0100 +FFFC +8104 +B974 +0000 +2BF8 +D248 +23F8 +D248 +2A48 +DFFC +2840 +D7FE +ENDCHAR +STARTCHAR uni973F +ENCODING 38719 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0080 +7DF8 +0688 +2870 +1088 +FD06 +34F8 +5088 +90F8 +5088 +20F8 +ENDCHAR +STARTCHAR uni9740 +ENCODING 38720 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0820 +7FFC +0820 +7FFE +4002 +9FF4 +0600 +1920 +06C0 +38A0 +0318 +ENDCHAR +STARTCHAR uni9741 +ENCODING 38721 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +FFFE +8102 +B83A +0FE0 +0920 +0FE0 +0920 +FFFE +9292 +FEFE +9292 +FEFE +ENDCHAR +STARTCHAR uni9742 +ENCODING 38722 +BBX 15 15 1 -1 +BITMAP +7FFC +0100 +FFFE +9932 +8102 +7FFC +4618 +5CE0 +4420 +7FFC +5568 +6524 +89F0 +0900 +7FFE +ENDCHAR +STARTCHAR uni9743 +ENCODING 38723 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0100 +1D70 +0810 +2448 +3F7E +64C8 +BF7E +2448 +3F7E +2448 +3F7E +ENDCHAR +STARTCHAR uni9744 +ENCODING 38724 +BBX 15 14 1 -1 +BITMAP +7FF8 +0100 +7FFC +4104 +78FC +0088 +FEF8 +0088 +7DFE +0322 +7D22 +4552 +45FA +7C04 +ENDCHAR +STARTCHAR uni9745 +ENCODING 38725 +BBX 15 16 0 -2 +BITMAP +0028 +7CFE +102A +FEFE +92A8 +54FE +104A +54FE +0082 +7CFE +0082 +FEFE +2082 +48FE +FC44 +0482 +ENDCHAR +STARTCHAR uni9746 +ENCODING 38726 +BBX 15 15 1 -1 +BITMAP +0210 +FD10 +107C +FE14 +92FE +DB14 +927C +4990 +00D2 +7CB4 +0098 +FED4 +24B2 +4D80 +F27E +ENDCHAR +STARTCHAR uni9747 +ENCODING 38727 +BBX 15 15 1 -1 +BITMAP +3FF8 +0100 +7FFC +4104 +5D74 +0840 +FF7E +2440 +FF7C +4204 +7E7C +4240 +7E7C +4242 +867E +ENDCHAR +STARTCHAR uni9748 +ENCODING 38728 +BBX 15 14 1 -1 +BITMAP +7FFC +0100 +FFFE +8102 +B972 +0000 +7BBC +4AA4 +7BBC +0000 +7FFC +1110 +2928 +FFFE +ENDCHAR +STARTCHAR uni9749 +ENCODING 38729 +BBX 15 15 1 -1 +BITMAP +000C +FCF4 +1044 +FCA8 +95FE +DD22 +94D4 +4B7A +0040 +787C +0084 +FF48 +2430 +4C48 +F386 +ENDCHAR +STARTCHAR uni974A +ENCODING 38730 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +0000 +4924 +5D74 +4924 +7FFC +0000 +3FF8 +0820 +0FE0 +0440 +7FFC +ENDCHAR +STARTCHAR uni974B +ENCODING 38731 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4102 +9D74 +2000 +17FE +8400 +47DC +1488 +27FE +E5CC +26AA +293C +2920 +13FE +ENDCHAR +STARTCHAR uni974C +ENCODING 38732 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +8514 +7FFC +4084 +3CF8 +0928 +3CB0 +0928 +7FF0 +1110 +1FF0 +0820 +1010 +ENDCHAR +STARTCHAR uni974D +ENCODING 38733 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +FFFE +8102 +3C78 +2220 +24FC +7E84 +48FC +FE84 +48FE +7E80 +48FE +7F2A +ENDCHAR +STARTCHAR uni974E +ENCODING 38734 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +FFFE +8102 +3C78 +1220 +28FC +4484 +B8FC +1084 +7CFE +5480 +3EFE +E12A +ENDCHAR +STARTCHAR uni974F +ENCODING 38735 +BBX 15 14 1 -1 +BITMAP +3FF8 +0100 +FFFE +8102 +3C78 +2220 +FEFC +A284 +A8FC +7E84 +48FE +7E80 +48FE +7F2A +ENDCHAR +STARTCHAR uni9750 +ENCODING 38736 +BBX 15 16 0 -2 +BITMAP +3FF8 +0100 +7FFE +4922 +9FF4 +1110 +1FF0 +0000 +7C7C +1010 +FEFE +9292 +5454 +7C7C +5454 +7C7C +ENDCHAR +STARTCHAR uni9751 +ENCODING 38737 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0100 +FFFE +0000 +1FF0 +1110 +1110 +1FF0 +1010 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni9752 +ENCODING 38738 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0100 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1070 +ENDCHAR +STARTCHAR uni9753 +ENCODING 38739 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +FE84 +1084 +7CA4 +10A4 +FEA4 +00A4 +7CA4 +44A4 +7C50 +4450 +7C50 +4492 +5492 +490E +ENDCHAR +STARTCHAR uni9754 +ENCODING 38740 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +FE7E +1080 +7D00 +107C +FE00 +0000 +7CF8 +4408 +7C08 +4408 +7C0A +440A +5406 +4802 +ENDCHAR +STARTCHAR uni9755 +ENCODING 38741 +BBX 15 15 1 -1 +BITMAP +0020 +0020 +FBFE +1020 +11FC +1020 +53FE +5800 +51FC +5124 +5124 +5DFC +7104 +C104 +011C +ENDCHAR +STARTCHAR uni9756 +ENCODING 38742 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +FC20 +01FC +4820 +4FFE +4800 +49FC +5104 +1DFC +3104 +C1FC +0104 +011C +ENDCHAR +STARTCHAR uni9757 +ENCODING 38743 +BBX 15 15 1 -1 +BITMAP +1020 +1124 +FF24 +10A8 +7CA8 +1020 +FE20 +01FE +7C50 +5450 +5450 +7C50 +4492 +4492 +4D0E +ENDCHAR +STARTCHAR uni9758 +ENCODING 38744 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +FCFC +1088 +7D10 +10FC +FEA4 +00A4 +7CA4 +44FC +7C80 +4480 +7C82 +4482 +447E +4C00 +ENDCHAR +STARTCHAR uni9759 +ENCODING 38745 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FE78 +1088 +7D10 +10FC +FE24 +01FE +7C24 +4424 +7CFC +4420 +7C20 +4420 +4C60 +ENDCHAR +STARTCHAR uni975A +ENCODING 38746 +BBX 15 15 1 -1 +BITMAP +1000 +10F8 +FE88 +10F8 +7C88 +1088 +FEF8 +0088 +7C88 +54F8 +5450 +7C50 +4492 +4492 +4D0E +ENDCHAR +STARTCHAR uni975B +ENCODING 38747 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +FDFE +1102 +7D02 +10FC +FE10 +0010 +7C90 +549E +5490 +7C90 +44D0 +44B0 +4D1E +ENDCHAR +STARTCHAR uni975C +ENCODING 38748 +BBX 15 15 1 -1 +BITMAP +101C +11E4 +FF42 +1222 +7FFC +1024 +FE24 +03FE +7C24 +4424 +7DFC +4420 +7C20 +4420 +4CE0 +ENDCHAR +STARTCHAR uni975D +ENCODING 38749 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +FCFC +1100 +7EF8 +1000 +FDF8 +0048 +7D68 +44C8 +7DF8 +444A +7CEA +475A +5446 +4842 +ENDCHAR +STARTCHAR uni975E +ENCODING 38750 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +FC7E +0440 +0440 +0440 +7C7C +0440 +0640 +1C40 +E47E +0440 +0840 +3040 +C040 +ENDCHAR +STARTCHAR uni975F +ENCODING 38751 +BBX 14 16 1 -2 +BITMAP +0880 +0880 +F8F8 +0880 +78F0 +0880 +F8F8 +0880 +01E0 +7E00 +03E0 +7E00 +03F0 +FE04 +0204 +01FC +ENDCHAR +STARTCHAR uni9760 +ENCODING 38752 +BBX 15 15 1 -1 +BITMAP +0100 +2100 +3FF8 +4100 +FFFE +0100 +3FF8 +2008 +7FFC +0440 +7C7C +0440 +FC7E +0840 +3040 +ENDCHAR +STARTCHAR uni9761 +ENCODING 38753 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4820 +7FFE +4AA8 +5AAA +6B66 +4240 +7E7C +4240 +7E7C +4240 +BE7E +0440 +1840 +ENDCHAR +STARTCHAR uni9762 +ENCODING 38754 +BBX 13 14 2 -1 +BITMAP +FFF8 +0200 +0400 +FFF8 +8888 +8888 +8F88 +8888 +8888 +8F88 +8888 +8888 +8888 +FFF8 +ENDCHAR +STARTCHAR uni9763 +ENCODING 38755 +BBX 15 15 0 -2 +BITMAP +FFFE +0200 +0200 +0400 +3FF8 +2008 +2008 +27C8 +2448 +2448 +27C8 +2008 +2008 +3FF8 +2008 +ENDCHAR +STARTCHAR uni9764 +ENCODING 38756 +BBX 15 15 1 -1 +BITMAP +0040 +FE40 +107C +2084 +FE84 +ABF4 +AA94 +BA94 +AA94 +AAF4 +BA84 +AA98 +AA80 +AA82 +FE7E +ENDCHAR +STARTCHAR uni9765 +ENCODING 38757 +BBX 14 16 0 -2 +BITMAP +3FFC +2090 +3FFC +2140 +2630 +380C +27F0 +2080 +2FF8 +2A28 +2BE8 +2A28 +4BE8 +4A28 +8FF8 +0808 +ENDCHAR +STARTCHAR uni9766 +ENCODING 38758 +BBX 15 14 1 -1 +BITMAP +FEF8 +1088 +20F8 +FE88 +AA88 +AAF8 +BA88 +AA88 +AAF8 +BA50 +AA50 +AA50 +AA92 +FF0E +ENDCHAR +STARTCHAR uni9767 +ENCODING 38759 +BBX 15 16 0 -2 +BITMAP +0010 +FEFE +1092 +20FE +FE10 +ABFE +AA00 +BAFE +AA82 +AAFE +BA82 +AAFE +AA82 +FEFE +8244 +0082 +ENDCHAR +STARTCHAR uni9768 +ENCODING 38760 +BBX 15 14 1 -1 +BITMAP +7FFE +5114 +5F12 +517E +5F28 +9144 +1102 +FFFE +0100 +7FFC +4444 +47C4 +4444 +7FFC +ENDCHAR +STARTCHAR uni9769 +ENCODING 38761 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0FE0 +0100 +3FF8 +2108 +2108 +3FF8 +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni976A +ENCODING 38762 +BBX 15 15 1 -1 +BITMAP +2200 +227E +FF88 +2208 +3E08 +0808 +7F08 +4908 +4908 +7F08 +0808 +FF88 +0808 +0808 +0838 +ENDCHAR +STARTCHAR uni976B +ENCODING 38763 +BBX 15 15 1 -1 +BITMAP +2200 +227C +FF84 +2224 +3E54 +0854 +7F44 +4944 +4944 +7F28 +0828 +FF90 +0828 +0844 +0882 +ENDCHAR +STARTCHAR uni976C +ENCODING 38764 +BBX 15 16 0 -2 +BITMAP +2200 +227C +FF10 +2210 +3E10 +0810 +7F10 +49FE +4910 +7F10 +0810 +FF90 +0810 +0810 +0810 +0810 +ENDCHAR +STARTCHAR uni976D +ENCODING 38765 +BBX 15 15 1 -1 +BITMAP +2200 +22FE +FF22 +2222 +3E22 +0822 +7FA2 +4962 +4932 +7F4A +0842 +FF82 +0884 +0904 +0A18 +ENDCHAR +STARTCHAR uni976E +ENCODING 38766 +BBX 15 15 1 -1 +BITMAP +2440 +2440 +FE40 +247E +3C82 +1082 +7D02 +5402 +547A +7C02 +1002 +FE02 +1004 +1004 +1038 +ENDCHAR +STARTCHAR uni976F +ENCODING 38767 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +FF10 +2210 +3E10 +087C +7F10 +4910 +4910 +7F10 +0810 +FF90 +0810 +08FE +0800 +0800 +ENDCHAR +STARTCHAR uni9770 +ENCODING 38768 +BBX 15 16 0 -2 +BITMAP +2800 +2800 +FDFC +2890 +3890 +1090 +7C90 +5490 +5490 +7C90 +1090 +FC92 +1092 +1092 +110E +1200 +ENDCHAR +STARTCHAR uni9771 +ENCODING 38769 +BBX 15 15 1 -1 +BITMAP +2200 +22FC +FF24 +2224 +3E24 +0824 +7F64 +493C +4926 +7F24 +0824 +FFC4 +0844 +0884 +0918 +ENDCHAR +STARTCHAR uni9772 +ENCODING 38770 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +FE20 +2850 +3850 +1088 +7D44 +5622 +5420 +7CF8 +1008 +FE08 +1010 +1010 +1020 +1020 +ENDCHAR +STARTCHAR uni9773 +ENCODING 38771 +BBX 15 15 1 -1 +BITMAP +280C +28F0 +FE80 +2880 +3880 +10FE +7C88 +5488 +5488 +7C88 +1088 +FE88 +1108 +1108 +1008 +ENDCHAR +STARTCHAR uni9774 +ENCODING 38772 +BBX 15 15 1 -1 +BITMAP +28A0 +28A0 +FEA0 +2924 +3928 +1330 +7D20 +5520 +5520 +7D20 +1120 +FF20 +1122 +1122 +111E +ENDCHAR +STARTCHAR uni9775 +ENCODING 38773 +BBX 15 16 0 -2 +BITMAP +2800 +29F8 +FE48 +2848 +3848 +1048 +7C48 +55F8 +5488 +7C88 +1088 +FE88 +1088 +1088 +13FE +1000 +ENDCHAR +STARTCHAR uni9776 +ENCODING 38774 +BBX 15 16 0 -2 +BITMAP +2800 +29FC +FD24 +2924 +3924 +1124 +7D24 +55FC +5504 +7D00 +1100 +FD00 +1102 +1102 +10FE +1000 +ENDCHAR +STARTCHAR uni9777 +ENCODING 38775 +BBX 14 16 0 -2 +BITMAP +2804 +29E4 +FE24 +2824 +3824 +11E4 +7D04 +5504 +5504 +7DE4 +1024 +FE24 +1024 +1024 +1144 +1084 +ENDCHAR +STARTCHAR uni9778 +ENCODING 38776 +BBX 15 16 0 -2 +BITMAP +2800 +2BFC +FC84 +2888 +3888 +1090 +7C9C +5484 +5544 +7D44 +1128 +FD28 +1210 +1228 +1444 +1182 +ENDCHAR +STARTCHAR uni9779 +ENCODING 38777 +BBX 14 15 1 -1 +BITMAP +2820 +2820 +FE20 +29FC +3924 +1124 +7D54 +5554 +5554 +7D8C +1104 +FF04 +1104 +1104 +111C +ENDCHAR +STARTCHAR uni977A +ENCODING 38778 +BBX 15 15 1 -1 +BITMAP +2820 +2820 +FC20 +2BFE +3820 +1020 +7C20 +55FC +5420 +7C70 +10A8 +FD24 +1222 +1020 +1020 +ENDCHAR +STARTCHAR uni977B +ENCODING 38779 +BBX 15 16 0 -2 +BITMAP +2800 +28F8 +FE88 +2888 +3888 +10F8 +7C88 +5488 +5488 +7CF8 +1088 +FE88 +1088 +1088 +13FE +1000 +ENDCHAR +STARTCHAR uni977C +ENCODING 38780 +BBX 15 15 1 -1 +BITMAP +2800 +28FC +FE84 +2884 +3884 +1084 +7CFC +5484 +5484 +7C84 +1084 +FEFC +1000 +1000 +11FE +ENDCHAR +STARTCHAR uni977D +ENCODING 38781 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +FD24 +28A4 +38A8 +1020 +7DFC +5420 +5420 +7C20 +13FE +FC20 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni977E +ENCODING 38782 +BBX 15 16 0 -2 +BITMAP +2828 +28A8 +FEA8 +28A8 +38A8 +13FE +7CA8 +54A8 +54A8 +7CA8 +10B8 +FE80 +1080 +1080 +10FE +1000 +ENDCHAR +STARTCHAR uni977F +ENCODING 38783 +BBX 15 16 0 -2 +BITMAP +5010 +5090 +F890 +5110 +717E +2252 +FB92 +A892 +A912 +F912 +2252 +FBD2 +2062 +2022 +204A +2084 +ENDCHAR +STARTCHAR uni9780 +ENCODING 38784 +BBX 14 16 0 -2 +BITMAP +2800 +29FC +FE44 +2844 +3844 +1044 +7C94 +5488 +5500 +7CFC +1084 +FE84 +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni9781 +ENCODING 38785 +BBX 15 15 1 -1 +BITMAP +2820 +2820 +FE20 +29FE +3922 +1124 +7D20 +55FC +5544 +7D44 +1144 +FD28 +1210 +1468 +1186 +ENDCHAR +STARTCHAR uni9782 +ENCODING 38786 +BBX 15 16 0 -2 +BITMAP +2808 +283C +FDE0 +2820 +3820 +1020 +7DFE +5420 +5470 +7C68 +10A8 +FCA4 +1122 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni9783 +ENCODING 38787 +BBX 15 16 0 -2 +BITMAP +2808 +29C8 +FE48 +2848 +3848 +11C8 +7D08 +5508 +5510 +7DD0 +1054 +FE54 +1052 +105E +1282 +1100 +ENDCHAR +STARTCHAR uni9784 +ENCODING 38788 +BBX 15 15 1 -1 +BITMAP +2840 +2840 +FEFC +2884 +39F4 +1314 +7D14 +5514 +55F4 +7D04 +1118 +FF00 +1102 +1102 +10FE +ENDCHAR +STARTCHAR uni9785 +ENCODING 38789 +BBX 15 15 1 -1 +BITMAP +2820 +2820 +FE20 +29FC +3924 +1124 +7D24 +5524 +57FE +7C50 +1050 +FE88 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni9786 +ENCODING 38790 +BBX 15 15 1 -1 +BITMAP +2800 +29FE +FE20 +2820 +39FC +1124 +7D24 +5554 +5554 +7D8C +1104 +FF04 +1104 +1104 +111C +ENDCHAR +STARTCHAR uni9787 +ENCODING 38791 +BBX 14 16 0 -2 +BITMAP +2800 +29FC +FD04 +2924 +3924 +1124 +7DFC +5524 +5524 +7D54 +114C +FD8C +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni9788 +ENCODING 38792 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +FE50 +2848 +3884 +1102 +7CFC +5400 +5400 +7CFC +1084 +FE84 +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni9789 +ENCODING 38793 +BBX 15 16 0 -2 +BITMAP +2850 +2850 +FE50 +2952 +38D4 +1058 +7C50 +5458 +54D4 +7D52 +1050 +FE50 +1092 +1092 +1112 +120E +ENDCHAR +STARTCHAR uni978A +ENCODING 38794 +BBX 15 16 0 -2 +BITMAP +2820 +2820 +FC20 +2BFE +3820 +1020 +7DFC +5400 +5400 +7DFC +1104 +FD04 +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni978B +ENCODING 38795 +BBX 15 15 1 -1 +BITMAP +2820 +2820 +FE20 +29FC +3820 +1020 +7C20 +55FE +5420 +7C20 +11FC +FC20 +1020 +1020 +13FE +ENDCHAR +STARTCHAR uni978C +ENCODING 38796 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +4404 +3FF8 +0820 +07C0 +7838 +0440 +7FFC +0440 +07C0 +0100 +1FF0 +1110 +FFFE +0100 +ENDCHAR +STARTCHAR uni978D +ENCODING 38797 +BBX 15 15 1 -1 +BITMAP +2820 +2820 +FFFC +2904 +3944 +1040 +7DFE +5448 +5448 +7C90 +11D0 +FE20 +1050 +1088 +1304 +ENDCHAR +STARTCHAR uni978E +ENCODING 38798 +BBX 15 16 0 -2 +BITMAP +2800 +28FC +FE84 +2884 +38FC +1084 +7C84 +54FC +54A2 +7CA4 +1098 +FE90 +1088 +10A4 +10C2 +1080 +ENDCHAR +STARTCHAR uni978F +ENCODING 38799 +BBX 15 15 1 -1 +BITMAP +01F0 +FD10 +1150 +1D32 +E20E +0440 +7FFC +0440 +1FF0 +1110 +1FF0 +0100 +FFFE +0100 +0100 +ENDCHAR +STARTCHAR uni9790 +ENCODING 38800 +BBX 15 15 1 -1 +BITMAP +2820 +2820 +FE20 +283C +3820 +1020 +7DFE +5400 +55FE +7C20 +1020 +FE30 +102C +1020 +1020 +ENDCHAR +STARTCHAR uni9791 +ENCODING 38801 +BBX 15 16 0 -2 +BITMAP +2810 +2910 +FC90 +2890 +387E +1010 +7D90 +5490 +5498 +7CA8 +10A4 +FCC4 +1080 +1140 +123E +1000 +ENDCHAR +STARTCHAR uni9792 +ENCODING 38802 +BBX 15 16 0 -2 +BITMAP +2808 +281C +FEE0 +2820 +3820 +11FE +7C50 +5488 +5504 +7E8A +1088 +FE88 +1088 +1088 +1088 +1108 +ENDCHAR +STARTCHAR uni9793 +ENCODING 38803 +BBX 15 16 0 -2 +BITMAP +2800 +28FC +FE84 +2884 +3884 +10FC +7C00 +5400 +55FE +7C20 +1020 +FEFC +1020 +1020 +11FE +1000 +ENDCHAR +STARTCHAR uni9794 +ENCODING 38804 +BBX 15 16 0 -2 +BITMAP +2880 +2880 +FCF8 +2908 +3A10 +11FC +7D24 +5524 +5524 +7DFC +1050 +FC50 +1090 +1092 +1112 +120E +ENDCHAR +STARTCHAR uni9795 +ENCODING 38805 +BBX 15 15 1 -1 +BITMAP +2800 +2BFE +FC20 +29FC +3924 +1124 +7DFC +5524 +5524 +7DFC +1020 +FCA0 +1060 +1098 +1306 +ENDCHAR +STARTCHAR uni9796 +ENCODING 38806 +BBX 15 15 1 -1 +BITMAP +2838 +29E4 +FD24 +2912 +3A12 +1222 +7C20 +55FE +5448 +7C48 +1088 +FDD0 +1030 +1048 +1184 +ENDCHAR +STARTCHAR uni9797 +ENCODING 38807 +BBX 15 16 0 -2 +BITMAP +1080 +11F8 +1288 +2070 +2B8E +6888 +6BFE +A888 +28F8 +2820 +29FC +2924 +29FC +2020 +23FE +2020 +ENDCHAR +STARTCHAR uni9798 +ENCODING 38808 +BBX 15 15 1 -1 +BITMAP +2820 +28A8 +FEA4 +2922 +38FC +1084 +7C84 +54FC +5484 +7C84 +10FC +FE84 +1084 +1084 +108C +ENDCHAR +STARTCHAR uni9799 +ENCODING 38809 +BBX 14 16 0 -2 +BITMAP +2800 +28F8 +FE88 +2888 +38F8 +1000 +7DFC +5504 +5504 +7DFC +1104 +FF04 +11FC +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni979A +ENCODING 38810 +BBX 15 15 1 -1 +BITMAP +5020 +5020 +FBFE +5252 +7252 +2090 +F91E +AE00 +A800 +F9FC +2020 +F820 +2020 +2020 +23FE +ENDCHAR +STARTCHAR uni979B +ENCODING 38811 +BBX 15 16 0 -2 +BITMAP +2820 +2810 +FEFC +2800 +3888 +1050 +7C00 +55FE +5400 +7C00 +10FC +FE84 +1084 +1084 +10FC +1084 +ENDCHAR +STARTCHAR uni979C +ENCODING 38812 +BBX 15 15 1 -1 +BITMAP +2820 +2824 +FFA8 +28B0 +38B0 +1128 +7E26 +5460 +5400 +7DFC +1104 +FFFC +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni979D +ENCODING 38813 +BBX 14 16 0 -2 +BITMAP +2820 +2924 +FCA4 +28A8 +3820 +11FC +7D04 +5504 +5574 +7D54 +1154 +FD54 +1174 +1104 +1114 +1108 +ENDCHAR +STARTCHAR uni979E +ENCODING 38814 +BBX 15 15 1 -1 +BITMAP +2820 +2840 +FDFC +2924 +3924 +11FC +7D24 +5544 +55FC +7C50 +1090 +FDFE +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni979F +ENCODING 38815 +BBX 15 16 0 -2 +BITMAP +2820 +2810 +FDFE +2800 +38FC +1084 +7CFC +5400 +54FC +7C08 +1010 +FDFE +1010 +1010 +1050 +1020 +ENDCHAR +STARTCHAR uni97A0 +ENCODING 38816 +BBX 15 15 1 -1 +BITMAP +2900 +2900 +FDFE +2A02 +2C42 +3A4A +124A +7D52 +57FA +54E2 +7D52 +124A +FC44 +1044 +1018 +ENDCHAR +STARTCHAR uni97A1 +ENCODING 38817 +BBX 15 16 0 -2 +BITMAP +2890 +2888 +FC88 +28BE +3BC0 +1082 +7CA2 +54E2 +5492 +7D92 +1294 +FC94 +1084 +1088 +12BE +1100 +ENDCHAR +STARTCHAR uni97A2 +ENCODING 38818 +BBX 15 15 1 -1 +BITMAP +28A8 +28A8 +FDFE +28A8 +38A8 +10B8 +7C80 +54FC +5420 +7FFE +10A8 +FCA8 +1124 +1222 +1020 +ENDCHAR +STARTCHAR uni97A3 +ENCODING 38819 +BBX 15 15 1 -1 +BITMAP +2800 +29FC +FC88 +2850 +3BFE +10A4 +7D28 +5620 +5460 +7C20 +13FE +FCA8 +1124 +1222 +1020 +ENDCHAR +STARTCHAR uni97A4 +ENCODING 38820 +BBX 15 16 0 -2 +BITMAP +0808 +7F08 +08FE +FF08 +0848 +7F28 +0808 +0F28 +F010 +0440 +7FFC +0440 +1FF0 +1110 +FFFE +0100 +ENDCHAR +STARTCHAR uni97A5 +ENCODING 38821 +BBX 15 16 0 -2 +BITMAP +2820 +2830 +FE48 +2884 +397A +1000 +7CFC +5484 +5484 +7CFC +1048 +FE48 +11FE +1048 +1088 +1108 +ENDCHAR +STARTCHAR uni97A6 +ENCODING 38822 +BBX 15 15 1 -1 +BITMAP +50D0 +5310 +FD10 +5152 +7152 +27D2 +F954 +A910 +AB90 +FD50 +2110 +F928 +2128 +2144 +2182 +ENDCHAR +STARTCHAR uni97A7 +ENCODING 38823 +BBX 15 16 0 -2 +BITMAP +2888 +2848 +FC50 +2BFE +3850 +1050 +7DFC +5554 +5554 +7D8C +1104 +FDFC +1104 +1104 +11FC +1104 +ENDCHAR +STARTCHAR uni97A8 +ENCODING 38824 +BBX 15 15 1 -1 +BITMAP +2800 +28F8 +FE88 +28F8 +3888 +1088 +7CF8 +5440 +54FE +7F92 +1092 +FEAA +10C6 +10F2 +100C +ENDCHAR +STARTCHAR uni97A9 +ENCODING 38825 +BBX 15 16 0 -2 +BITMAP +5082 +5082 +FAA2 +51CA +708A +23EA +FA2A +AA2A +ABEA +FA2A +222A +FBEA +2222 +2222 +22AA +2244 +ENDCHAR +STARTCHAR uni97AA +ENCODING 38826 +BBX 15 16 0 -2 +BITMAP +7E20 +243E +1848 +FFA8 +2910 +4A28 +9846 +0440 +7FFC +0440 +07C0 +0100 +1FF0 +1110 +FFFE +0100 +ENDCHAR +STARTCHAR uni97AB +ENCODING 38827 +BBX 15 15 1 -1 +BITMAP +2900 +2900 +FFFE +2A02 +38F2 +1002 +7DFA +5402 +54F2 +7C02 +10F2 +FE92 +10F4 +1004 +1018 +ENDCHAR +STARTCHAR uni97AC +ENCODING 38828 +BBX 15 16 0 -2 +BITMAP +5010 +5010 +F87C +5714 +71FE +2114 +FA7C +AA10 +AF7C +F910 +21FE +FD10 +2210 +2300 +24FE +2800 +ENDCHAR +STARTCHAR uni97AD +ENCODING 38829 +BBX 15 15 1 -1 +BITMAP +5100 +51FE +FA10 +52FE +7692 +2292 +FAFE +AA92 +AA92 +FAFE +2210 +FA50 +2230 +2248 +2286 +ENDCHAR +STARTCHAR uni97AE +ENCODING 38830 +BBX 15 15 1 -1 +BITMAP +2800 +28FC +FE84 +28FC +3884 +1084 +7CFC +5400 +55FE +7C20 +1120 +FF3C +11A0 +1260 +121E +ENDCHAR +STARTCHAR uni97AF +ENCODING 38831 +BBX 15 16 0 -2 +BITMAP +2848 +2848 +FDFE +2848 +3820 +11FE +7C40 +5440 +54BC +7D84 +1288 +FCBE +1088 +1088 +10A8 +1090 +ENDCHAR +STARTCHAR uni97B0 +ENCODING 38832 +BBX 15 16 0 -2 +BITMAP +2800 +28F8 +FE88 +2888 +38F8 +1088 +7C88 +54F8 +5400 +7DFC +1154 +FF54 +1154 +1154 +13FE +1000 +ENDCHAR +STARTCHAR uni97B1 +ENCODING 38833 +BBX 15 15 1 -1 +BITMAP +281C +29E4 +FD24 +2912 +3A12 +1222 +7C40 +558E +5502 +7D02 +11CE +FD02 +1102 +1102 +11FE +ENDCHAR +STARTCHAR uni97B2 +ENCODING 38834 +BBX 15 15 1 -1 +BITMAP +5090 +5090 +FFFE +5090 +73FC +2090 +FFFE +A840 +ABFC +FA44 +27FE +FA44 +27FE +2204 +221C +ENDCHAR +STARTCHAR uni97B3 +ENCODING 38835 +BBX 15 15 1 -1 +BITMAP +2888 +2888 +FFFE +2888 +3820 +1050 +7C88 +5706 +54F8 +7C00 +11FC +FD04 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni97B4 +ENCODING 38836 +BBX 15 15 1 -1 +BITMAP +5090 +5090 +FBFE +5090 +7090 +23FE +FA00 +AAFC +AAA4 +FAFC +22A4 +FAFC +22A4 +24A4 +20AC +ENDCHAR +STARTCHAR uni97B5 +ENCODING 38837 +BBX 15 16 0 -2 +BITMAP +281E +2BE0 +FD22 +2894 +3840 +1088 +7DF0 +5420 +54C4 +7DFE +1022 +FC20 +13FE +1050 +1088 +1306 +ENDCHAR +STARTCHAR uni97B6 +ENCODING 38838 +BBX 15 16 0 -2 +BITMAP +0878 +3E48 +228E +2A00 +7EF8 +2248 +2A30 +46CC +7FFC +0440 +07C0 +0100 +1FF0 +1110 +FFFE +0100 +ENDCHAR +STARTCHAR uni97B7 +ENCODING 38839 +BBX 15 16 0 -2 +BITMAP +7FFC +0820 +0FE0 +0000 +3FF8 +2448 +2FE8 +2108 +2118 +0440 +7FFC +0440 +1FF0 +1110 +FFFE +0100 +ENDCHAR +STARTCHAR uni97B8 +ENCODING 38840 +BBX 15 16 0 -2 +BITMAP +2800 +29FC +FD24 +29FC +3924 +11FC +7CA8 +54A8 +57FE +7CA8 +10A8 +FDFC +1020 +13FE +1020 +1020 +ENDCHAR +STARTCHAR uni97B9 +ENCODING 38841 +BBX 15 16 0 -2 +BITMAP +5100 +509E +FBD2 +5012 +73D4 +2254 +FBD8 +A814 +ABD2 +F852 +2092 +F8DA +2394 +2090 +2290 +2110 +ENDCHAR +STARTCHAR uni97BA +ENCODING 38842 +BBX 15 15 1 -1 +BITMAP +2924 +2924 +FEA8 +2BFE +3A02 +12FA +7C88 +5488 +54F8 +7C20 +1020 +FDFC +1020 +1020 +13FE +ENDCHAR +STARTCHAR uni97BB +ENCODING 38843 +BBX 15 16 0 -2 +BITMAP +2820 +29FC +FD24 +2BFE +3924 +11FC +7C20 +55FC +5524 +7DFC +1040 +FDFE +1088 +11D0 +1070 +138C +ENDCHAR +STARTCHAR uni97BC +ENCODING 38844 +BBX 15 16 0 -2 +BITMAP +2820 +29FC +FD24 +29FC +3820 +13FE +7C00 +55FC +5504 +7DFC +1104 +FDFC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni97BD +ENCODING 38845 +BBX 15 16 0 -2 +BITMAP +2818 +29E0 +FC40 +2BFE +3888 +1174 +7E52 +5470 +5400 +7DFC +1104 +FD74 +1154 +1174 +1104 +110C +ENDCHAR +STARTCHAR uni97BE +ENCODING 38846 +BBX 15 15 1 -1 +BITMAP +5090 +5090 +FBFC +5090 +73FC +2148 +F948 +AFFE +A948 +F948 +23FC +F840 +27FE +2040 +2040 +ENDCHAR +STARTCHAR uni97BF +ENCODING 38847 +BBX 15 16 0 -2 +BITMAP +5124 +5124 +FAAA +53AE +7124 +22AA +FBAE +A924 +AFFE +F910 +2114 +F914 +228A +224A +2216 +2422 +ENDCHAR +STARTCHAR uni97C0 +ENCODING 38848 +BBX 15 16 0 -2 +BITMAP +5040 +5020 +FBFE +5250 +73FE +2252 +FBFE +AA80 +AAFE +FA80 +22FE +FA02 +2556 +2556 +2A02 +2006 +ENDCHAR +STARTCHAR uni97C1 +ENCODING 38849 +BBX 15 15 1 -1 +BITMAP +2800 +2BFE +FC00 +29FC +3924 +11FC +7D24 +57FE +5400 +7DFC +1124 +FDFC +1124 +1124 +17FE +ENDCHAR +STARTCHAR uni97C2 +ENCODING 38850 +BBX 15 16 0 -2 +BITMAP +2880 +28F8 +FD08 +2BFE +3944 +1192 +7DFE +5500 +557C +7D00 +117C +FD00 +117C +1244 +127C +1444 +ENDCHAR +STARTCHAR uni97C3 +ENCODING 38851 +BBX 15 15 1 -1 +BITMAP +5420 +5220 +F9FC +5020 +75FE +2288 +F850 +A9FC +AE20 +FAFC +2220 +FBFE +2220 +2520 +28FE +ENDCHAR +STARTCHAR uni97C4 +ENCODING 38852 +BBX 15 16 0 -2 +BITMAP +2888 +2BFE +FCA8 +2890 +39FE +1320 +7DFC +5520 +55FC +7D20 +11FE +FD00 +13FC +1088 +1070 +138E +ENDCHAR +STARTCHAR uni97C5 +ENCODING 38853 +BBX 14 16 0 -2 +BITMAP +2800 +29FC +FD04 +29FC +3904 +11FC +7C88 +5554 +55DC +7C88 +1154 +FDDC +1000 +11A8 +1154 +1254 +ENDCHAR +STARTCHAR uni97C6 +ENCODING 38854 +BBX 15 15 1 -1 +BITMAP +5400 +54FE +FA28 +50FE +74AA +24FE +FA20 +A9FE +AE48 +FACC +2372 +FA44 +227C +2500 +28FE +ENDCHAR +STARTCHAR uni97C7 +ENCODING 38855 +BBX 15 16 0 -2 +BITMAP +2820 +2BFE +FC20 +29FC +3800 +13FE +7E52 +57FE +5504 +7DFC +1104 +FDFC +1104 +11FC +1088 +1104 +ENDCHAR +STARTCHAR uni97C8 +ENCODING 38856 +BBX 15 15 1 -1 +BITMAP +2888 +2888 +FFFE +2888 +39FC +1154 +7DFC +5414 +55FE +7D10 +1114 +FF94 +1148 +111A +1264 +ENDCHAR +STARTCHAR uni97C9 +ENCODING 38857 +BBX 15 15 1 -1 +BITMAP +5108 +57FE +F908 +5040 +57FE +7490 +27FC +FC94 +A7FC +A500 +FDFE +2500 +FDFE +2952 +2256 +ENDCHAR +STARTCHAR uni97CA +ENCODING 38858 +BBX 15 16 0 -2 +BITMAP +5088 +53FE +F888 +53DE +7252 +23DE +FA52 +ABDE +AA22 +FBFE +22AA +FAFA +2222 +2272 +22AA +2224 +ENDCHAR +STARTCHAR uni97CB +ENCODING 38859 +BBX 15 15 1 -1 +BITMAP +0200 +1FF0 +0410 +FFFE +0000 +1FF0 +1010 +1FF0 +0020 +3FFC +0820 +0820 +FFFE +0020 +0020 +ENDCHAR +STARTCHAR uni97CC +ENCODING 38860 +BBX 14 15 1 -1 +BITMAP +1000 +11FC +7C24 +2424 +FE24 +00A4 +7CA4 +44A4 +7D24 +0924 +7E44 +4844 +FE84 +0904 +0A38 +ENDCHAR +STARTCHAR uni97CD +ENCODING 38861 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +7E24 +2220 +FF7E +0020 +7E20 +423C +7E34 +0854 +7E54 +0854 +4888 +7E88 +0914 +0822 +ENDCHAR +STARTCHAR uni97CE +ENCODING 38862 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +7E10 +22FE +FF10 +0010 +7E10 +427C +7E10 +0838 +7E38 +0854 +4854 +7E92 +0810 +0810 +ENDCHAR +STARTCHAR uni97CF +ENCODING 38863 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +7FFC +0400 +FFFE +1210 +2FE8 +C426 +3FF8 +1010 +1FF0 +0100 +1FF0 +2100 +3FF8 +0100 +ENDCHAR +STARTCHAR uni97D0 +ENCODING 38864 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +7C50 +2450 +FE88 +0104 +7EFA +4400 +7C00 +10F8 +7C88 +1088 +5088 +7C88 +10F8 +1088 +ENDCHAR +STARTCHAR uni97D1 +ENCODING 38865 +BBX 15 15 1 -1 +BITMAP +1040 +11F8 +9488 +57FC +5400 +11F8 +1108 +FDF8 +2820 +2BF8 +2920 +2FFC +4820 +4822 +87FE +ENDCHAR +STARTCHAR uni97D2 +ENCODING 38866 +BBX 15 16 0 -2 +BITMAP +1010 +1092 +7E52 +2254 +FF10 +00FE +7E82 +4282 +7EFE +0882 +7E82 +08FE +4882 +7E82 +088A +0884 +ENDCHAR +STARTCHAR uni97D3 +ENCODING 38867 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FEF8 +1048 +7DFE +4400 +7CFC +4484 +44FC +7C00 +10FC +FC90 +13FE +1010 +1010 +ENDCHAR +STARTCHAR uni97D4 +ENCODING 38868 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +7C80 +24F8 +FE80 +00F8 +7C80 +4480 +7FFE +08A4 +7EA8 +4890 +FE90 +08C8 +0B86 +ENDCHAR +STARTCHAR uni97D5 +ENCODING 38869 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +7EFE +2200 +FF7C +0044 +7E7C +4200 +7E7C +0808 +7E10 +08FE +4810 +7E10 +0850 +0820 +ENDCHAR +STARTCHAR uni97D6 +ENCODING 38870 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +7C48 +2430 +FEFE +0052 +7C94 +4550 +7C20 +1010 +7DFE +1038 +5054 +7C92 +1110 +1010 +ENDCHAR +STARTCHAR uni97D7 +ENCODING 38871 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +7D02 +2420 +FEFC +0020 +7DFC +4524 +7DFC +1124 +7DFC +1020 +53FE +7C20 +1020 +1020 +ENDCHAR +STARTCHAR uni97D8 +ENCODING 38872 +BBX 15 15 1 -1 +BITMAP +10A8 +10A8 +7DFE +24A8 +FEA8 +00B8 +7C80 +44FC +7C20 +09FE +7EA8 +28A8 +FF24 +0A22 +0820 +ENDCHAR +STARTCHAR uni97D9 +ENCODING 38873 +BBX 15 15 1 -1 +BITMAP +0020 +7CFC +4444 +7DFE +4400 +44FC +7C84 +00FC +FE10 +08FC +4890 +4DFE +6810 +9810 +87FE +ENDCHAR +STARTCHAR uni97DA +ENCODING 38874 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +7DFE +2488 +FEF8 +0020 +7DFC +4524 +7D24 +11FC +7C20 +13FE +5020 +7C20 +1020 +1020 +ENDCHAR +STARTCHAR uni97DB +ENCODING 38875 +BBX 15 15 1 -1 +BITMAP +1090 +1090 +7BFE +2890 +FC90 +03FE +7A00 +4AFC +7AA4 +12FC +7AA4 +52FC +FEA4 +14A4 +10AC +ENDCHAR +STARTCHAR uni97DC +ENCODING 38876 +BBX 15 15 1 -1 +BITMAP +100C +7EF4 +22A2 +FF12 +0102 +7E10 +4220 +7ECE +0482 +7F82 +24EE +2482 +FF82 +0482 +04FE +ENDCHAR +STARTCHAR uni97DD +ENCODING 38877 +BBX 15 16 0 -2 +BITMAP +1048 +1048 +7DFE +2448 +FEFC +0048 +7DFE +4410 +7CFC +1094 +7CFC +1094 +51FE +7C84 +1094 +1088 +ENDCHAR +STARTCHAR uni97DE +ENCODING 38878 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +7D24 +2524 +FF54 +0154 +7D8C +45FC +7C00 +09FC +7F54 +4954 +FF54 +0954 +0BFE +ENDCHAR +STARTCHAR uni97DF +ENCODING 38879 +BBX 15 16 0 -2 +BITMAP +1010 +1020 +7E7C +2244 +FF7C +0044 +7E7C +4210 +7EFE +0828 +7E54 +0892 +487C +7E10 +0810 +0810 +ENDCHAR +STARTCHAR uni97E0 +ENCODING 38880 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +7E92 +22FE +FF92 +00FE +7E54 +4254 +7EFE +0854 +7E54 +08FE +4810 +7EFE +0810 +0810 +ENDCHAR +STARTCHAR uni97E1 +ENCODING 38881 +BBX 15 15 1 -1 +BITMAP +1050 +1050 +7DFC +2450 +FFFC +00A8 +7CA8 +47FE +7CA8 +08A8 +7DFC +4820 +FFFE +0820 +0820 +ENDCHAR +STARTCHAR uni97E2 +ENCODING 38882 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +7DFE +2410 +FEFC +0094 +7CFC +4494 +7CFC +1012 +7DFE +1022 +5014 +7D52 +114A +1238 +ENDCHAR +STARTCHAR uni97E3 +ENCODING 38883 +BBX 14 16 0 -2 +BITMAP +1000 +11FC +7D54 +2554 +FFFC +0080 +7DFC +4644 +7DF4 +1154 +7D54 +11F4 +5044 +7DF4 +1014 +1008 +ENDCHAR +STARTCHAR uni97E4 +ENCODING 38884 +BBX 15 16 0 -2 +BITMAP +1048 +11FE +7C48 +2400 +FFFE +014A +7D4A +45FE +7C14 +11FE +7D10 +1192 +514C +7D4A +1116 +1222 +ENDCHAR +STARTCHAR uni97E5 +ENCODING 38885 +BBX 15 16 0 -2 +BITMAP +1010 +10FE +7E10 +227C +FF00 +00FE +7EAA +42FE +7E44 +087C +7E44 +087C +4844 +7E7C +0828 +0844 +ENDCHAR +STARTCHAR uni97E6 +ENCODING 38886 +BBX 14 16 1 -2 +BITMAP +0200 +0200 +0200 +FFFC +0200 +0200 +7FF0 +0200 +0200 +FFF8 +0208 +0208 +0208 +0250 +0220 +0200 +ENDCHAR +STARTCHAR uni97E7 +ENCODING 38887 +BBX 14 16 0 -2 +BITMAP +2000 +2000 +21FC +FC24 +2024 +20A4 +F8A4 +20A4 +2124 +FC24 +2424 +2444 +3444 +2884 +2114 +2208 +ENDCHAR +STARTCHAR uni97E8 +ENCODING 38888 +BBX 15 16 0 -2 +BITMAP +2050 +2048 +2048 +FC40 +21FE +2040 +F840 +207C +20A4 +FCA4 +24A8 +2528 +3510 +2A28 +2044 +2082 +ENDCHAR +STARTCHAR uni97E9 +ENCODING 38889 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1020 +FEFE +1020 +7C20 +44FC +7C20 +4420 +7DFE +1022 +FE22 +102A +1024 +1020 +1020 +ENDCHAR +STARTCHAR uni97EA +ENCODING 38890 +BBX 15 16 0 -2 +BITMAP +0020 +3E20 +22FC +3E20 +2220 +3EF8 +0020 +FF20 +08FC +0824 +2F24 +2834 +2828 +5820 +4FFE +8000 +ENDCHAR +STARTCHAR uni97EB +ENCODING 38891 +BBX 15 16 0 -2 +BITMAP +2000 +20F8 +2088 +FC88 +20F8 +2088 +F888 +20F8 +2000 +FDFC +2554 +2554 +3554 +2954 +23FE +2000 +ENDCHAR +STARTCHAR uni97EC +ENCODING 38892 +BBX 15 16 0 -2 +BITMAP +201E +21E0 +2022 +FD12 +2094 +2080 +F820 +21CE +2102 +FD02 +25CE +2502 +3502 +2902 +21FE +2102 +ENDCHAR +STARTCHAR uni97ED +ENCODING 38893 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +7C7C +0440 +0440 +0440 +3C78 +0440 +0440 +0440 +3C78 +0440 +0440 +0440 +FFFE +ENDCHAR +STARTCHAR uni97EE +ENCODING 38894 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0440 +7C7C +0440 +0440 +7C7C +0440 +0440 +7C7C +0440 +0440 +FFFE +ENDCHAR +STARTCHAR uni97EF +ENCODING 38895 +BBX 15 16 0 -2 +BITMAP +0820 +0828 +7F24 +0820 +FFFE +0020 +1224 +73A4 +1224 +73A8 +1228 +7390 +1212 +17AA +F846 +4082 +ENDCHAR +STARTCHAR uni97F0 +ENCODING 38896 +BBX 15 15 0 -1 +BITMAP +0800 +0F7C +2844 +7F28 +A110 +1628 +38C6 +C280 +7EFC +0280 +3EF8 +0280 +7EFC +0280 +FFFE +ENDCHAR +STARTCHAR uni97F1 +ENCODING 38897 +BBX 15 15 1 -1 +BITMAP +2220 +2228 +5528 +8CA4 +0020 +FFFE +1420 +7724 +1424 +7728 +1428 +7710 +1432 +1F4A +E084 +ENDCHAR +STARTCHAR uni97F2 +ENCODING 38898 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +FABE +4924 +9932 +0440 +7C7C +0440 +3C78 +0440 +3C78 +0440 +FFFE +ENDCHAR +STARTCHAR uni97F3 +ENCODING 38899 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +0420 +0440 +FFFE +0000 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni97F4 +ENCODING 38900 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE20 +4420 +25FC +2924 +FF24 +0124 +7D24 +4524 +4524 +7D24 +452C +4420 +7C20 +ENDCHAR +STARTCHAR uni97F5 +ENCODING 38901 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FE40 +44FE +2482 +2902 +FE72 +0002 +7C02 +4412 +4462 +7D82 +4404 +4404 +7C38 +ENDCHAR +STARTCHAR uni97F6 +ENCODING 38902 +BBX 15 15 1 -1 +BITMAP +1000 +10FE +FE22 +4422 +2442 +2842 +FE82 +010C +7C00 +44FC +4484 +7C84 +4484 +4484 +7CFC +ENDCHAR +STARTCHAR uni97F7 +ENCODING 38903 +BBX 15 16 0 -2 +BITMAP +2010 +1010 +7C92 +0092 +4492 +2892 +FEFE +0010 +7C10 +4492 +4492 +7C92 +4492 +4492 +7CFE +4402 +ENDCHAR +STARTCHAR uni97F8 +ENCODING 38904 +BBX 15 16 0 -2 +BITMAP +2040 +1040 +7CFC +0088 +4550 +2820 +FED8 +0326 +7CF8 +4420 +44F8 +7C20 +47FE +4420 +7C20 +4420 +ENDCHAR +STARTCHAR uni97F9 +ENCODING 38905 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +7CFC +0084 +44FC +2884 +FEFC +0000 +7DFE +4420 +4420 +7CFC +4420 +4420 +7DFE +4400 +ENDCHAR +STARTCHAR uni97FA +ENCODING 38906 +BBX 14 16 0 -2 +BITMAP +2088 +1088 +7DFC +0088 +44A8 +2820 +FEF8 +00A8 +7CA8 +44A8 +44A8 +7DFC +4420 +4450 +7C88 +4504 +ENDCHAR +STARTCHAR uni97FB +ENCODING 38907 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +FE84 +44FC +2800 +FEFC +0084 +7CFC +4484 +44FC +7C84 +44FC +4420 +7CC8 +0306 +ENDCHAR +STARTCHAR uni97FC +ENCODING 38908 +BBX 15 16 0 -2 +BITMAP +2020 +1220 +797C +00A4 +4818 +30E6 +FB10 +017E +7910 +497C +4910 +79FE +4910 +4910 +7AFE +4C00 +ENDCHAR +STARTCHAR uni97FD +ENCODING 38909 +BBX 15 16 0 -2 +BITMAP +1020 +2810 +44FE +9200 +7C44 +0828 +FEFE +2800 +FE7C +AA44 +CE44 +827C +FE44 +8244 +FE7C +8244 +ENDCHAR +STARTCHAR uni97FE +ENCODING 38910 +BBX 15 16 0 -2 +BITMAP +0800 +7F78 +0848 +3E48 +0086 +3E78 +2A48 +3E30 +414E +BFFC +0440 +FFFE +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni97FF +ENCODING 38911 +BBX 15 15 1 -1 +BITMAP +1100 +27DE +CC52 +37D4 +2452 +FF92 +145C +E110 +7FFC +0820 +FFFE +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni9800 +ENCODING 38912 +BBX 15 16 0 -2 +BITMAP +2044 +11FE +7C54 +0048 +44FE +2990 +FEFE +0090 +7CFE +4490 +44FE +7C80 +45FE +4444 +7C38 +45C6 +ENDCHAR +STARTCHAR uni9801 +ENCODING 38913 +BBX 15 14 1 -1 +BITMAP +7FFC +0200 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +1010 +1010 +1FF0 +0400 +1870 +E00E +ENDCHAR +STARTCHAR uni9802 +ENCODING 38914 +BBX 15 14 1 -1 +BITMAP +0FFC +F080 +23F0 +2210 +23F0 +2210 +2210 +23F0 +2210 +2210 +23F0 +6080 +0318 +1C06 +ENDCHAR +STARTCHAR uni9803 +ENCODING 38915 +BBX 14 14 2 -1 +BITMAP +8FF8 +8080 +87F0 +9410 +E7F0 +8410 +8410 +87F0 +9410 +9410 +77F0 +0100 +0630 +180C +ENDCHAR +STARTCHAR uni9804 +ENCODING 38916 +BBX 15 15 1 -1 +BITMAP +2000 +21FE +2020 +F8FC +2884 +28FC +2884 +2884 +28FC +2884 +4A84 +4AFC +8620 +0048 +0186 +ENDCHAR +STARTCHAR uni9805 +ENCODING 38917 +BBX 15 14 1 -1 +BITMAP +07FC +0080 +FBF8 +2208 +23F8 +2208 +2208 +23F8 +3A08 +E208 +03F8 +0080 +0318 +1C06 +ENDCHAR +STARTCHAR uni9806 +ENCODING 38918 +BBX 15 14 1 -1 +BITMAP +03FC +4040 +55F8 +5508 +55F8 +5508 +5508 +55F8 +5508 +5508 +55F8 +8480 +8108 +0206 +ENDCHAR +STARTCHAR uni9807 +ENCODING 38919 +BBX 15 15 0 -2 +BITMAP +7CFE +1010 +1020 +10FC +1084 +1084 +FEFC +1084 +10FC +1084 +1084 +10FC +1048 +1084 +1102 +ENDCHAR +STARTCHAR uni9808 +ENCODING 38920 +BBX 15 15 1 -1 +BITMAP +0800 +0BFE +1020 +21FC +C104 +09FC +0904 +1104 +21FC +4504 +0504 +09FC +1080 +2108 +C206 +ENDCHAR +STARTCHAR uni9809 +ENCODING 38921 +BBX 15 16 0 -2 +BITMAP +0800 +09FE +0810 +0820 +48FC +4E84 +4884 +48FC +4884 +48FC +4884 +4E84 +58FC +E048 +0084 +0102 +ENDCHAR +STARTCHAR uni980A +ENCODING 38922 +BBX 15 14 1 -1 +BITMAP +07FE +F820 +21FC +2104 +21FC +2104 +F904 +21FC +2104 +2104 +39FC +C040 +0188 +0606 +ENDCHAR +STARTCHAR uni980B +ENCODING 38923 +BBX 15 15 0 -2 +BITMAP +7EFE +4010 +4020 +5EFC +5284 +5284 +52FC +5A84 +54FC +5084 +5284 +54FC +5848 +5084 +8102 +ENDCHAR +STARTCHAR uni980C +ENCODING 38924 +BBX 15 14 1 -1 +BITMAP +1DFE +0420 +24FC +2284 +42FC +9184 +1084 +10FC +1484 +2484 +2EFC +7220 +00C8 +0306 +ENDCHAR +STARTCHAR uni980D +ENCODING 38925 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE20 +10FC +1084 +FCFC +0484 +0484 +48FC +2884 +1084 +18FC +2440 +4088 +8306 +ENDCHAR +STARTCHAR uni980E +ENCODING 38926 +BBX 15 15 1 -1 +BITMAP +0800 +73FE +4040 +41FC +7D04 +49FC +4904 +4904 +49FC +4904 +4904 +49FC +8840 +8888 +0B06 +ENDCHAR +STARTCHAR uni980F +ENCODING 38927 +BBX 15 15 1 -1 +BITMAP +0800 +09FE +0820 +FEFC +0084 +3CFC +2484 +2484 +24FC +2484 +2484 +25FC +4620 +44CC +8302 +ENDCHAR +STARTCHAR uni9810 +ENCODING 38928 +BBX 15 14 1 -1 +BITMAP +7DFE +0420 +28FC +1084 +10FC +FE84 +1284 +14FC +1484 +1084 +10FC +1040 +108C +3302 +ENDCHAR +STARTCHAR uni9811 +ENCODING 38929 +BBX 15 14 1 -1 +BITMAP +01FC +7C40 +00F8 +0088 +FEF8 +2888 +2888 +28F8 +2888 +2A88 +4CF8 +4840 +8198 +0606 +ENDCHAR +STARTCHAR uni9812 +ENCODING 38930 +BBX 15 15 1 -1 +BITMAP +0800 +24FE +2410 +427C +8144 +007C +7E44 +1244 +127C +1244 +2244 +227C +4220 +8C4C +0182 +ENDCHAR +STARTCHAR uni9813 +ENCODING 38931 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1E20 +F0FC +1084 +54FC +5484 +5484 +54FC +5484 +7C84 +12FC +1220 +0E4C +0182 +ENDCHAR +STARTCHAR uni9814 +ENCODING 38932 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1020 +10FC +FE84 +92FC +9284 +9284 +FEFC +9284 +9284 +92FC +9240 +FE88 +0306 +ENDCHAR +STARTCHAR uni9815 +ENCODING 38933 +BBX 14 16 1 -2 +BITMAP +2000 +21FC +2020 +3C40 +21F8 +2108 +2108 +21F8 +FD08 +85F8 +8508 +8508 +85F8 +FC90 +8508 +0204 +ENDCHAR +STARTCHAR uni9816 +ENCODING 38934 +BBX 15 15 1 -1 +BITMAP +1000 +55FE +5420 +92FC +1084 +FEFC +1084 +1084 +10FC +FE84 +1084 +10FC +1020 +1048 +1186 +ENDCHAR +STARTCHAR uni9817 +ENCODING 38935 +BBX 15 15 1 -1 +BITMAP +0800 +08FE +7F10 +497C +4844 +7E7C +4244 +6244 +547C +5444 +4844 +887C +9420 +224C +0082 +ENDCHAR +STARTCHAR uni9818 +ENCODING 38936 +BBX 15 15 1 -1 +BITMAP +1000 +29FE +4420 +80FC +3884 +00FC +0084 +FC84 +24FC +2484 +2484 +24FC +2C20 +20CC +2302 +ENDCHAR +STARTCHAR uni9819 +ENCODING 38937 +BBX 15 15 0 -2 +BITMAP +01FE +FC20 +1040 +11FC +1104 +5104 +5DFC +5104 +51FC +5104 +5104 +5DFC +F088 +0104 +0202 +ENDCHAR +STARTCHAR uni981A +ENCODING 38938 +BBX 15 14 1 -1 +BITMAP +FDFE +4420 +44FC +2884 +10FC +2884 +C684 +10FC +1084 +7C84 +10FC +1020 +1E4C +E182 +ENDCHAR +STARTCHAR uni981B +ENCODING 38939 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +1010 +FE20 +10FC +7C84 +1084 +FEFC +3084 +38FC +5484 +5484 +90FC +1048 +1084 +1102 +ENDCHAR +STARTCHAR uni981C +ENCODING 38940 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2820 +2440 +43FC +8104 +7D04 +01FC +0104 +7DFC +4504 +4504 +45FC +7C88 +4504 +0202 +ENDCHAR +STARTCHAR uni981D +ENCODING 38941 +BBX 15 16 0 -2 +BITMAP +2000 +10FE +0010 +FE20 +00FC +2884 +4484 +82FC +0484 +44FC +2884 +1084 +28FC +4448 +8484 +0102 +ENDCHAR +STARTCHAR uni981E +ENCODING 38942 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE20 +82FC +A284 +20FC +FE84 +2484 +24FC +4484 +4484 +F8FC +1440 +2288 +C106 +ENDCHAR +STARTCHAR uni981F +ENCODING 38943 +BBX 15 16 0 -2 +BITMAP +2000 +20FE +3C10 +4420 +C4FC +2884 +1084 +28FC +4484 +82FC +7C84 +4484 +44FC +4448 +7C84 +4502 +ENDCHAR +STARTCHAR uni9820 +ENCODING 38944 +BBX 15 16 0 -2 +BITMAP +1000 +107E +3F10 +2120 +427C +BFC4 +2044 +2F7C +2944 +297C +2D44 +2A44 +287C +4A00 +4C28 +8844 +ENDCHAR +STARTCHAR uni9821 +ENCODING 38945 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1020 +FEFC +1084 +10FC +7C84 +0084 +00FC +7C84 +4484 +44FC +4420 +444C +7D82 +ENDCHAR +STARTCHAR uni9822 +ENCODING 38946 +BBX 15 16 0 -2 +BITMAP +0800 +1DFE +7020 +1040 +11FC +FD04 +1104 +11FC +7D04 +45FC +4504 +4504 +45FC +7C88 +4504 +0202 +ENDCHAR +STARTCHAR uni9823 +ENCODING 38947 +BBX 15 14 1 -1 +BITMAP +FDFE +9020 +90FC +9084 +FCFC +8484 +8484 +84FC +FC84 +9084 +90FC +9040 +FE88 +0306 +ENDCHAR +STARTCHAR uni9824 +ENCODING 38948 +BBX 15 14 1 -1 +BITMAP +FEFE +8810 +887C +A844 +AE7C +A244 +A244 +A27C +AE44 +A844 +887C +8820 +FE4C +0182 +ENDCHAR +STARTCHAR uni9825 +ENCODING 38949 +BBX 15 14 1 -1 +BITMAP +BDFE +A820 +A8FC +A884 +BCFC +A484 +A484 +A4FC +BC84 +A884 +A8FC +A840 +BE88 +0306 +ENDCHAR +STARTCHAR uni9826 +ENCODING 38950 +BBX 15 16 0 -2 +BITMAP +1000 +08FE +0810 +FF20 +08FC +1084 +2284 +7CFC +0984 +12FC +2484 +C884 +14FC +2248 +C084 +0102 +ENDCHAR +STARTCHAR uni9827 +ENCODING 38951 +BBX 14 16 1 -2 +BITMAP +1000 +23FC +F840 +8880 +8BF8 +8A08 +FA08 +83F8 +8208 +FBF8 +8A08 +8A08 +8BF8 +F910 +8A08 +0404 +ENDCHAR +STARTCHAR uni9828 +ENCODING 38952 +BBX 15 15 0 -2 +BITMAP +EEFE +2210 +2220 +AAFC +6684 +2284 +22FC +2684 +6AFC +B284 +2284 +22FC +2248 +AA84 +4502 +ENDCHAR +STARTCHAR uni9829 +ENCODING 38953 +BBX 15 16 0 -2 +BITMAP +4200 +24FE +0010 +7E20 +24FC +2484 +2484 +24FC +FF84 +24FC +2484 +2484 +24FC +4448 +4484 +8502 +ENDCHAR +STARTCHAR uni982A +ENCODING 38954 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +4A10 +2A20 +2CFC +0884 +FE84 +18FC +1C84 +2AFC +2A84 +4884 +88FC +0848 +0884 +0902 +ENDCHAR +STARTCHAR uni982B +ENCODING 38955 +BBX 15 15 1 -1 +BITMAP +1400 +14FE +1410 +D57C +3644 +147C +1444 +1444 +167C +3544 +D444 +257C +2520 +4348 +8086 +ENDCHAR +STARTCHAR uni982C +ENCODING 38956 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1020 +FEFC +1084 +92FC +5484 +1084 +FEFC +1084 +1884 +24FC +2220 +40CC +8302 +ENDCHAR +STARTCHAR uni982D +ENCODING 38957 +BBX 15 14 1 -1 +BITMAP +FDFE +0020 +7CFC +4484 +44FC +4484 +7C84 +00FC +4484 +4484 +28FC +3E40 +E08C +0302 +ENDCHAR +STARTCHAR uni982E +ENCODING 38958 +BBX 15 16 0 -2 +BITMAP +0800 +097E +EA10 +2C20 +4A7C +4944 +A844 +107C +2444 +247C +FF44 +2444 +247C +4400 +4428 +8444 +ENDCHAR +STARTCHAR uni982F +ENCODING 38959 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +3E10 +6220 +94FC +4884 +3084 +C0FC +2484 +24FC +FF84 +2484 +24FC +4448 +4484 +8502 +ENDCHAR +STARTCHAR uni9830 +ENCODING 38960 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1020 +FEFC +1084 +54FC +5484 +BA84 +92FC +9084 +1884 +24FC +2240 +4088 +8306 +ENDCHAR +STARTCHAR uni9831 +ENCODING 38961 +BBX 15 16 0 -2 +BITMAP +0400 +1EFE +E010 +2220 +92FC +5484 +4084 +04FC +FF84 +04FC +4484 +2484 +24FC +0448 +1484 +0902 +ENDCHAR +STARTCHAR uni9832 +ENCODING 38962 +BBX 15 15 1 -1 +BITMAP +0300 +0CFE +E410 +247C +4444 +447C +9FC4 +E444 +247C +A444 +A444 +447C +4F20 +A048 +9F86 +ENDCHAR +STARTCHAR uni9833 +ENCODING 38963 +BBX 15 15 1 -1 +BITMAP +0800 +09FE +7E20 +08FC +0884 +08FC +FF84 +1484 +56FC +5584 +9484 +94FC +2420 +2448 +4D86 +ENDCHAR +STARTCHAR uni9834 +ENCODING 38964 +BBX 15 15 1 -1 +BITMAP +4000 +4DFC +7020 +40F8 +4288 +3EF8 +0088 +7C88 +00F8 +FE88 +1088 +54F8 +5240 +9098 +B306 +ENDCHAR +STARTCHAR uni9835 +ENCODING 38965 +BBX 15 15 0 -2 +BITMAP +7EFE +1210 +1220 +FF7C +1244 +1244 +7E7C +2044 +207C +7E44 +6244 +A27C +2200 +3E28 +2244 +ENDCHAR +STARTCHAR uni9836 +ENCODING 38966 +BBX 15 16 0 -2 +BITMAP +0800 +28FE +2810 +3E20 +48FC +0884 +FF84 +00FC +0084 +3EFC +2284 +2284 +22FC +3E48 +2284 +0102 +ENDCHAR +STARTCHAR uni9837 +ENCODING 38967 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +2840 +45F8 +BB08 +01F8 +7D08 +0508 +09F8 +7D08 +4508 +45F8 +4440 +7C98 +0306 +ENDCHAR +STARTCHAR uni9838 +ENCODING 38968 +BBX 15 14 1 -1 +BITMAP +FDFE +0020 +54FC +5484 +A8FC +5484 +5484 +00FC +7C84 +1084 +10FC +1020 +1CCC +E302 +ENDCHAR +STARTCHAR uni9839 +ENCODING 38969 +BBX 15 16 0 -2 +BITMAP +0C00 +70FE +1010 +FE20 +10FC +3884 +5484 +92FC +0084 +28FC +2884 +2884 +2AFC +4C48 +4884 +8102 +ENDCHAR +STARTCHAR uni983A +ENCODING 38970 +BBX 15 16 0 -2 +BITMAP +0C00 +70FE +1010 +FE20 +10FC +3884 +5484 +92FC +7C84 +24FC +2884 +2E84 +22FC +4248 +4A84 +8502 +ENDCHAR +STARTCHAR uni983B +ENCODING 38971 +BBX 15 15 1 -1 +BITMAP +1000 +51FE +5E20 +50FC +5084 +FFFC +1084 +5484 +52FC +9584 +9484 +34FC +0840 +308C +C302 +ENDCHAR +STARTCHAR uni983C +ENCODING 38972 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE20 +10FC +7C84 +54FC +5484 +5484 +7CFC +1084 +3884 +34FC +5240 +908C +1302 +ENDCHAR +STARTCHAR uni983D +ENCODING 38973 +BBX 15 14 1 -1 +BITMAP +09FE +7020 +10FC +FE84 +38FC +3484 +5284 +90FC +3884 +2884 +2AFC +4C20 +484C +8182 +ENDCHAR +STARTCHAR uni983E +ENCODING 38974 +BBX 15 16 0 -2 +BITMAP +0BFE +1040 +61FC +0904 +11FC +6104 +05FC +0904 +31FC +C088 +0904 +2880 +2E98 +28E2 +2E82 +F07E +ENDCHAR +STARTCHAR uni983F +ENCODING 38975 +BBX 15 16 0 -2 +BITMAP +0600 +18FE +6210 +0C20 +737C +0C44 +F444 +147C +5544 +5E7C +5444 +5544 +557C +5D00 +F328 +0044 +ENDCHAR +STARTCHAR uni9840 +ENCODING 38976 +BBX 15 16 0 -2 +BITMAP +1400 +12FE +2010 +3F20 +647C +A444 +3F44 +247C +2444 +3F7C +2444 +2444 +247C +3F00 +2028 +2044 +ENDCHAR +STARTCHAR uni9841 +ENCODING 38977 +BBX 15 16 0 -2 +BITMAP +1000 +087E +7F10 +4120 +827C +0044 +7F44 +087C +0844 +287C +2E44 +2844 +287C +5800 +4F28 +8044 +ENDCHAR +STARTCHAR uni9842 +ENCODING 38978 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +1010 +FE20 +10FC +5484 +5484 +54FC +BA84 +10FC +3884 +5484 +92FC +1048 +1084 +1102 +ENDCHAR +STARTCHAR uni9843 +ENCODING 38979 +BBX 15 16 0 -2 +BITMAP +1000 +52FE +5410 +9020 +28FC +4484 +8284 +10FC +1084 +52FC +5484 +9084 +28FC +2448 +4284 +8102 +ENDCHAR +STARTCHAR uni9844 +ENCODING 38980 +BBX 14 15 1 -2 +BITMAP +FEFC +0420 +0840 +92F8 +D688 +BA88 +92F8 +BA88 +D6F8 +9288 +D288 +A2F8 +8E00 +F250 +0088 +ENDCHAR +STARTCHAR uni9845 +ENCODING 38981 +BBX 15 16 0 -2 +BITMAP +1000 +08FE +7E10 +4220 +42FC +7E84 +4084 +5EFC +5284 +5EFC +5284 +5E84 +52FC +5248 +9284 +1702 +ENDCHAR +STARTCHAR uni9846 +ENCODING 38982 +BBX 15 14 1 -1 +BITMAP +7F7E +4910 +497C +7F44 +497C +4944 +7F44 +087C +FF44 +2A44 +2A7C +4920 +884C +0982 +ENDCHAR +STARTCHAR uni9847 +ENCODING 38983 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE20 +00FC +4484 +44FC +AA84 +AA84 +10FC +FE84 +1084 +10FC +1040 +1088 +1306 +ENDCHAR +STARTCHAR uni9848 +ENCODING 38984 +BBX 15 16 0 -2 +BITMAP +4000 +4CFE +7010 +4220 +42FC +3E84 +2084 +44FC +7884 +10FC +2484 +FE84 +10FC +5448 +9284 +3102 +ENDCHAR +STARTCHAR uni9849 +ENCODING 38985 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +2810 +2420 +42FC +BC84 +1084 +10FC +FE84 +10FC +9484 +5884 +50FC +1E48 +F084 +4102 +ENDCHAR +STARTCHAR uni984A +ENCODING 38986 +BBX 15 16 0 -2 +BITMAP +1000 +20FE +7E10 +4220 +7EFC +4084 +7E84 +42FC +7E84 +10FC +1084 +FE84 +10FC +1048 +1084 +1102 +ENDCHAR +STARTCHAR uni984B +ENCODING 38987 +BBX 15 14 1 -1 +BITMAP +7FFE +4910 +497C +7F44 +497C +4944 +4944 +7F7C +0844 +0444 +557C +52A0 +92CC +8E82 +ENDCHAR +STARTCHAR uni984C +ENCODING 38988 +BBX 15 14 1 -1 +BITMAP +7DFE +4420 +7CFC +4484 +7CFC +0084 +FE84 +10FC +5084 +5E84 +50FC +5048 +B884 +87FE +ENDCHAR +STARTCHAR uni984D +ENCODING 38989 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE20 +A2FC +3C84 +44FC +A884 +1084 +28FC +C684 +7C84 +44FC +4440 +7C88 +0306 +ENDCHAR +STARTCHAR uni984E +ENCODING 38990 +BBX 15 14 1 -1 +BITMAP +EEFE +AA20 +AAFC +EE84 +00FC +7C84 +0084 +FEFC +2084 +7C84 +44FC +0440 +048C +3B02 +ENDCHAR +STARTCHAR uni984F +ENCODING 38991 +BBX 15 15 1 -1 +BITMAP +0800 +08FE +7F20 +12FC +0C84 +12FC +7F84 +4884 +72FC +4484 +5884 +82FC +8440 +188C +6302 +ENDCHAR +STARTCHAR uni9850 +ENCODING 38992 +BBX 15 15 0 -2 +BITMAP +FEFE +9210 +1020 +FEFC +1084 +7C84 +54FC +7C84 +54FC +7C84 +1084 +FEFC +1048 +1084 +1102 +ENDCHAR +STARTCHAR uni9851 +ENCODING 38993 +BBX 15 16 0 -2 +BITMAP +0200 +02BE +0208 +7F90 +423E +4222 +5E22 +42BE +42A2 +5EBE +56A2 +5522 +5D7E +4140 +42D4 +8462 +ENDCHAR +STARTCHAR uni9852 +ENCODING 38994 +BBX 15 14 1 -1 +BITMAP +7FFE +4910 +497C +7F44 +497C +4944 +7F44 +087C +FF44 +9144 +957C +BB20 +8148 +8386 +ENDCHAR +STARTCHAR uni9853 +ENCODING 38995 +BBX 15 15 1 -1 +BITMAP +1000 +92FE +9210 +927C +FE44 +007C +FE44 +2044 +407C +FE44 +AA44 +AA7C +AA20 +AA48 +8686 +ENDCHAR +STARTCHAR uni9854 +ENCODING 38996 +BBX 15 15 1 -1 +BITMAP +0800 +08FE +7F10 +227C +1444 +7F7C +4444 +5844 +427C +4444 +5844 +417C +8220 +8C4C +3182 +ENDCHAR +STARTCHAR uni9855 +ENCODING 38997 +BBX 15 14 1 -1 +BITMAP +7DFE +4420 +44FC +7C84 +44FC +4484 +7C84 +00FC +2A84 +AC84 +68FC +2E40 +388C +E302 +ENDCHAR +STARTCHAR uni9856 +ENCODING 38998 +BBX 15 15 1 -1 +BITMAP +0800 +10FE +7F10 +457C +5544 +497C +5544 +6144 +417C +7F44 +1044 +4A7C +5110 +9224 +8EC2 +ENDCHAR +STARTCHAR uni9857 +ENCODING 38999 +BBX 15 15 1 -1 +BITMAP +0800 +49FE +4910 +7F7C +0044 +FFFC +0044 +7F44 +417C +7F44 +2244 +227C +1720 +1C48 +E186 +ENDCHAR +STARTCHAR uni9858 +ENCODING 39000 +BBX 15 14 1 -1 +BITMAP +7F7E +4410 +487C +5F44 +517C +5F44 +5144 +517C +5F44 +4444 +557C +9520 +A4CC +0C82 +ENDCHAR +STARTCHAR uni9859 +ENCODING 39001 +BBX 15 14 1 -1 +BITMAP +7EFE +2210 +1C7C +2344 +FFFC +5544 +2244 +D5FC +0844 +FFC4 +2A7C +4920 +88C8 +0886 +ENDCHAR +STARTCHAR uni985A +ENCODING 39002 +BBX 15 15 1 -1 +BITMAP +4C00 +71FE +4220 +3EFC +0084 +BEFC +A284 +BE84 +A2FC +BE84 +A284 +FFFC +1020 +2248 +C186 +ENDCHAR +STARTCHAR uni985B +ENCODING 39003 +BBX 15 15 1 -1 +BITMAP +1000 +FEFE +1010 +7C7C +4444 +7C7C +4444 +7C44 +447C +7C44 +0044 +FE7C +2020 +444C +8282 +ENDCHAR +STARTCHAR uni985C +ENCODING 39004 +BBX 15 16 0 -2 +BITMAP +2200 +223E +FF88 +2210 +7F3E +2222 +FFA2 +083E +7F22 +493E +7F22 +4922 +FFBE +4100 +4514 +4222 +ENDCHAR +STARTCHAR uni985D +ENCODING 39005 +BBX 15 15 0 -2 +BITMAP +7CFE +4410 +7420 +54FC +FE84 +8284 +7CFC +4484 +7CFC +4484 +7C84 +44FC +4448 +5484 +4902 +ENDCHAR +STARTCHAR uni985E +ENCODING 39006 +BBX 15 15 1 -1 +BITMAP +1000 +53FE +5420 +34FC +FE84 +38FC +5484 +9284 +00FC +1084 +FE84 +10FC +2820 +44CC +8302 +ENDCHAR +STARTCHAR uni985F +ENCODING 39007 +BBX 15 15 0 -2 +BITMAP +777E +1110 +5520 +337C +5544 +0C44 +337C +C4C4 +187C +6244 +0CC4 +717C +0600 +1828 +E044 +ENDCHAR +STARTCHAR uni9860 +ENCODING 39008 +BBX 15 15 0 -2 +BITMAP +FEFE +2810 +FE20 +AAFC +AA84 +FE84 +00FC +7C84 +00FC +FE84 +1084 +54FC +9248 +5084 +2102 +ENDCHAR +STARTCHAR uni9861 +ENCODING 39009 +BBX 15 16 0 -2 +BITMAP +1000 +08FE +7F10 +2220 +147C +FF44 +1044 +297C +CE44 +147C +2644 +CD44 +157C +2400 +D428 +0844 +ENDCHAR +STARTCHAR uni9862 +ENCODING 39010 +BBX 15 16 0 -2 +BITMAP +2200 +223E +FF88 +2210 +223E +3E22 +0822 +FFBE +88A2 +CCBE +AAA2 +DDA2 +88BE +8880 +8A94 +8922 +ENDCHAR +STARTCHAR uni9863 +ENCODING 39011 +BBX 15 16 0 -2 +BITMAP +0200 +029E +0204 +7FC8 +421E +4A12 +4E12 +4A9E +7E92 +4A9E +4A92 +5D12 +6B5E +4940 +5ACC +8452 +ENDCHAR +STARTCHAR uni9864 +ENCODING 39012 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +7C10 +1020 +FEFC +4484 +EE84 +44FC +6484 +DEFC +0084 +FE84 +28FC +2A48 +4C84 +8902 +ENDCHAR +STARTCHAR uni9865 +ENCODING 39013 +BBX 15 15 1 -1 +BITMAP +7F00 +41FE +7F20 +417C +7F44 +087C +FFC4 +0044 +7F7C +4144 +7F44 +2A7C +4920 +8848 +1886 +ENDCHAR +STARTCHAR uni9866 +ENCODING 39014 +BBX 15 15 1 -1 +BITMAP +2400 +29FE +7E20 +C8FC +7C84 +48FC +4884 +7C84 +48FC +4884 +7E84 +00FC +5520 +5448 +8186 +ENDCHAR +STARTCHAR uni9867 +ENCODING 39015 +BBX 15 14 1 -1 +BITMAP +FEFE +0020 +7EFC +4284 +7EFC +5484 +5E84 +74FC +5E84 +5484 +5EFC +9420 +9448 +1F86 +ENDCHAR +STARTCHAR uni9868 +ENCODING 39016 +BBX 15 16 0 -2 +BITMAP +FEFE +1020 +7EFC +4284 +7EFC +4284 +7EFC +4284 +7EFC +2448 +4284 +0000 +FFFE +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni9869 +ENCODING 39017 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +1410 +2220 +417C +BE44 +0044 +007C +7744 +557C +5544 +7744 +227C +2200 +5528 +8844 +ENDCHAR +STARTCHAR uni986A +ENCODING 39018 +BBX 15 16 0 -2 +BITMAP +0400 +27BE +2408 +FFD0 +023E +02A2 +7FE2 +423E +7E22 +4ABE +4AA2 +5AA2 +6D3E +8940 +12D4 +6462 +ENDCHAR +STARTCHAR uni986B +ENCODING 39019 +BBX 15 15 1 -1 +BITMAP +0800 +08FE +FF10 +007C +7F44 +417C +5D44 +5544 +5D7C +4144 +7F44 +227C +3E20 +224C +FF82 +ENDCHAR +STARTCHAR uni986C +ENCODING 39020 +BBX 15 14 1 -1 +BITMAP +7EFE +0810 +FF7C +8944 +EB7C +8944 +6A44 +007C +FFC4 +1044 +FF7C +A920 +A948 +AB86 +ENDCHAR +STARTCHAR uni986D +ENCODING 39021 +BBX 15 16 0 -2 +BITMAP +2200 +FFBE +2208 +7F10 +553E +5522 +7F22 +003E +FFA2 +90BE +3E22 +2222 +523E +0C00 +1814 +E022 +ENDCHAR +STARTCHAR uni986E +ENCODING 39022 +BBX 15 16 0 -2 +BITMAP +1000 +087E +FF90 +80A0 +7F7C +5244 +9444 +7F7C +C144 +7F7C +4144 +7F44 +417C +7F00 +2228 +4144 +ENDCHAR +STARTCHAR uni986F +ENCODING 39023 +BBX 15 14 1 -1 +BITMAP +7F7E +4110 +7F7C +4144 +7F7C +2244 +CC44 +557C +2244 +5544 +EEFC +4020 +954C +9482 +ENDCHAR +STARTCHAR uni9870 +ENCODING 39024 +BBX 15 15 1 -1 +BITMAP +0800 +2F7E +2820 +FFFC +4944 +9AFC +0444 +1FFC +F116 +1FF0 +1110 +1FF0 +0440 +FFFE +0040 +ENDCHAR +STARTCHAR uni9871 +ENCODING 39025 +BBX 15 15 1 -1 +BITMAP +0800 +0F7E +0810 +7FBC +48A4 +7E3C +48A4 +5FA4 +553C +5F24 +5524 +BFBC +AA90 +2AA4 +7FC2 +ENDCHAR +STARTCHAR uni9872 +ENCODING 39026 +BBX 15 16 0 -2 +BITMAP +2900 +4A7E +1410 +6220 +097C +2A44 +5444 +227C +4844 +FF7C +0044 +7F44 +417C +5D00 +5528 +7F44 +ENDCHAR +STARTCHAR uni9873 +ENCODING 39027 +BBX 15 14 1 -1 +BITMAP +7F7E +2210 +3E7C +2344 +7E7C +0244 +FFC4 +557C +7744 +5544 +777C +5510 +FFA4 +1142 +ENDCHAR +STARTCHAR uni9874 +ENCODING 39028 +BBX 15 15 1 -1 +BITMAP +2200 +22FE +FF10 +227C +7744 +557C +7744 +2444 +7F7C +C844 +7F44 +487C +7F20 +484C +7F82 +ENDCHAR +STARTCHAR uni9875 +ENCODING 39029 +BBX 13 15 1 -2 +BITMAP +FFF8 +0400 +0800 +3FE0 +2020 +2220 +2220 +2220 +2220 +2220 +2520 +0480 +0840 +3020 +C010 +ENDCHAR +STARTCHAR uni9876 +ENCODING 39030 +BBX 15 15 0 -2 +BITMAP +01FE +FE20 +1040 +11FC +1104 +1124 +1124 +1124 +1124 +1124 +1144 +1050 +5088 +2104 +0202 +ENDCHAR +STARTCHAR uni9877 +ENCODING 39031 +BBX 13 15 2 -2 +BITMAP +87F8 +8080 +8100 +87F0 +F410 +8490 +8490 +8490 +9490 +A490 +C510 +8140 +0220 +0410 +0808 +ENDCHAR +STARTCHAR uni9878 +ENCODING 39032 +BBX 15 15 0 -2 +BITMAP +79FE +1020 +1040 +11FC +1104 +1124 +FD24 +1124 +1124 +1124 +1144 +1050 +1088 +1104 +1202 +ENDCHAR +STARTCHAR uni9879 +ENCODING 39033 +BBX 15 15 0 -2 +BITMAP +01FE +0020 +FC40 +11FC +1104 +1124 +1124 +1124 +1124 +1124 +1D44 +E050 +4088 +0104 +0202 +ENDCHAR +STARTCHAR uni987A +ENCODING 39034 +BBX 15 16 0 -2 +BITMAP +0400 +45FE +5420 +5440 +55FC +5504 +5524 +5524 +5524 +5524 +5524 +5544 +5450 +5488 +8504 +0602 +ENDCHAR +STARTCHAR uni987B +ENCODING 39035 +BBX 15 16 0 -2 +BITMAP +0800 +09FE +1020 +2040 +41FC +8904 +0924 +1124 +2124 +4524 +8524 +0944 +1050 +2088 +4104 +8202 +ENDCHAR +STARTCHAR uni987C +ENCODING 39036 +BBX 15 15 0 -2 +BITMAP +01FE +7C20 +1040 +11FC +1104 +7D24 +1124 +1124 +1124 +1124 +1D44 +E050 +4088 +0104 +0202 +ENDCHAR +STARTCHAR uni987D +ENCODING 39037 +BBX 15 15 0 -2 +BITMAP +7CFE +0020 +0040 +00FC +FE84 +2894 +2894 +2894 +2894 +2894 +2AA4 +4C30 +4848 +8084 +0302 +ENDCHAR +STARTCHAR uni987E +ENCODING 39038 +BBX 15 15 0 -2 +BITMAP +7EFE +4020 +4040 +5EFC +5284 +5294 +5294 +5A94 +5494 +5094 +52A4 +5430 +5848 +5084 +8302 +ENDCHAR +STARTCHAR uni987F +ENCODING 39039 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +1020 +FE40 +11FC +5504 +5524 +5524 +5524 +7D24 +1124 +1144 +1450 +1888 +1104 +0202 +ENDCHAR +STARTCHAR uni9880 +ENCODING 39040 +BBX 15 16 0 -2 +BITMAP +0800 +1CFE +6020 +4040 +40FC +4084 +7E94 +4894 +4894 +4894 +4894 +48A4 +4830 +4848 +8884 +0B02 +ENDCHAR +STARTCHAR uni9881 +ENCODING 39041 +BBX 15 15 0 -2 +BITMAP +29FE +2820 +2440 +45FC +4504 +8124 +7D24 +2524 +2524 +2524 +2544 +2450 +4488 +5504 +8A02 +ENDCHAR +STARTCHAR uni9882 +ENCODING 39042 +BBX 15 15 0 -2 +BITMAP +28FE +2420 +2440 +42FC +5284 +9094 +1094 +2094 +2094 +4894 +44A4 +FC30 +4448 +0084 +0302 +ENDCHAR +STARTCHAR uni9883 +ENCODING 39043 +BBX 15 16 0 -2 +BITMAP +1000 +08FE +0820 +FF40 +00FC +0084 +3C94 +2494 +2494 +2494 +2494 +25A4 +4630 +4448 +8084 +0302 +ENDCHAR +STARTCHAR uni9884 +ENCODING 39044 +BBX 15 15 0 -2 +BITMAP +F9FE +0820 +5040 +21FC +1104 +FD24 +2524 +2924 +2124 +2124 +2144 +2050 +2088 +A104 +4202 +ENDCHAR +STARTCHAR uni9885 +ENCODING 39045 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +1E20 +1040 +10FC +7C84 +4494 +4494 +4494 +7C94 +4494 +40A4 +4030 +4048 +8084 +0302 +ENDCHAR +STARTCHAR uni9886 +ENCODING 39046 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +2820 +2440 +43FC +9104 +0924 +0124 +FD24 +0524 +0924 +5144 +2050 +1088 +1104 +0202 +ENDCHAR +STARTCHAR uni9887 +ENCODING 39047 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +0810 +7F20 +497C +4A44 +4854 +7F54 +4154 +5254 +4A54 +4454 +4A28 +9124 +2142 +0082 +ENDCHAR +STARTCHAR uni9888 +ENCODING 39048 +BBX 15 15 0 -2 +BITMAP +7EFE +0410 +0820 +187C +2444 +4254 +8154 +0054 +7E54 +0854 +0854 +0828 +0E24 +F042 +4082 +ENDCHAR +STARTCHAR uni9889 +ENCODING 39049 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +1020 +FE40 +10FC +1084 +7C94 +0094 +0094 +7C94 +4494 +44A4 +4430 +7C48 +4484 +0302 +ENDCHAR +STARTCHAR uni988A +ENCODING 39050 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +0820 +7E40 +08FC +4A84 +2A94 +2C94 +0894 +FE94 +0894 +14A4 +1230 +2248 +4084 +8302 +ENDCHAR +STARTCHAR uni988B +ENCODING 39051 +BBX 15 15 0 -2 +BITMAP +037E +EC10 +2420 +247C +4444 +4F54 +E454 +2454 +A454 +A454 +4F54 +4020 +A028 +1F44 +0082 +ENDCHAR +STARTCHAR uni988C +ENCODING 39052 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +2820 +2440 +42FC +8084 +7C94 +0094 +0094 +7C94 +4494 +44A4 +4430 +7C48 +4484 +0302 +ENDCHAR +STARTCHAR uni988D +ENCODING 39053 +BBX 15 16 0 -2 +BITMAP +2000 +24FE +3820 +2240 +22FC +1E84 +0094 +0894 +0A94 +EC94 +2894 +2CA4 +4A30 +4A48 +A884 +1302 +ENDCHAR +STARTCHAR uni988E +ENCODING 39054 +BBX 15 16 0 -2 +BITMAP +4000 +44FE +7820 +4240 +42FC +3E84 +0094 +1094 +5294 +5294 +5494 +90A4 +2830 +2448 +4484 +8302 +ENDCHAR +STARTCHAR uni988F +ENCODING 39055 +BBX 15 16 0 -2 +BITMAP +1000 +08FE +0820 +FF40 +08FC +1084 +2294 +7C94 +0994 +1294 +2494 +C8A4 +1430 +2248 +C084 +0302 +ENDCHAR +STARTCHAR uni9890 +ENCODING 39056 +BBX 14 15 1 -2 +BITMAP +FBFC +9040 +9080 +93F8 +BA08 +AA48 +AA48 +AA48 +BA48 +9248 +9288 +90A0 +FD10 +0208 +0404 +ENDCHAR +STARTCHAR uni9891 +ENCODING 39057 +BBX 15 16 0 -2 +BITMAP +1000 +11FE +5020 +5C40 +51FC +5104 +FF24 +0124 +1124 +5524 +5524 +5544 +8450 +0888 +3104 +C202 +ENDCHAR +STARTCHAR uni9892 +ENCODING 39058 +BBX 15 16 0 -2 +BITMAP +0800 +09FE +EA10 +2C20 +4A7C +4944 +A854 +1054 +2454 +2454 +FF54 +2454 +2428 +4424 +4442 +8482 +ENDCHAR +STARTCHAR uni9893 +ENCODING 39059 +BBX 15 16 0 -2 +BITMAP +0C00 +71FE +1020 +FE40 +11FC +3904 +5524 +9324 +0124 +3924 +2924 +2944 +2A50 +4C88 +4904 +8202 +ENDCHAR +STARTCHAR uni9894 +ENCODING 39060 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +1410 +2220 +517C +8844 +7E54 +0254 +0454 +0854 +7E54 +4254 +4228 +7E24 +4242 +0082 +ENDCHAR +STARTCHAR uni9895 +ENCODING 39061 +BBX 15 16 0 -2 +BITMAP +4000 +4CFE +7020 +4240 +42FC +3E84 +0094 +7C94 +0094 +FE94 +1094 +54A4 +5230 +9248 +5084 +2302 +ENDCHAR +STARTCHAR uni9896 +ENCODING 39062 +BBX 15 16 0 -2 +BITMAP +4000 +4DFE +7020 +4440 +45FC +3D04 +0124 +0D24 +7124 +1124 +FF24 +1144 +3850 +5488 +9104 +1202 +ENDCHAR +STARTCHAR uni9897 +ENCODING 39063 +BBX 15 15 0 -2 +BITMAP +7F7E +4910 +4920 +7F7C +4944 +4954 +7F54 +0854 +FF54 +1C54 +2A54 +4920 +8828 +0844 +0882 +ENDCHAR +STARTCHAR uni9898 +ENCODING 39064 +BBX 15 15 0 -2 +BITMAP +3EFE +2210 +3E20 +227C +3E44 +0054 +FF54 +0854 +0854 +2F28 +2844 +2882 +5800 +4FFE +8000 +ENDCHAR +STARTCHAR uni9899 +ENCODING 39065 +BBX 14 15 1 -2 +BITMAP +7DFC +5420 +5440 +7CF8 +5488 +54A8 +7CA8 +10A8 +FEA8 +92A8 +96A8 +BE50 +8248 +8A84 +8504 +ENDCHAR +STARTCHAR uni989A +ENCODING 39066 +BBX 15 15 0 -2 +BITMAP +EEFE +AA10 +AA20 +EE7C +0044 +FE54 +0054 +FF54 +4054 +7E54 +0254 +0228 +0224 +1442 +0882 +ENDCHAR +STARTCHAR uni989B +ENCODING 39067 +BBX 15 16 0 -2 +BITMAP +0800 +497E +4910 +4920 +7F7C +0044 +FFD4 +0854 +1054 +7F54 +5554 +5554 +5520 +5528 +5544 +4382 +ENDCHAR +STARTCHAR uni989C +ENCODING 39068 +BBX 15 16 0 -2 +BITMAP +1000 +08FE +7F10 +2220 +147C +7F44 +4454 +4854 +5254 +4454 +4854 +5154 +4228 +4424 +8842 +3082 +ENDCHAR +STARTCHAR uni989D +ENCODING 39069 +BBX 15 16 0 -2 +BITMAP +1000 +08FE +7F10 +4120 +107C +1E44 +2254 +5454 +0854 +1454 +2254 +7F54 +A228 +2224 +3E42 +2282 +ENDCHAR +STARTCHAR uni989E +ENCODING 39070 +BBX 15 15 0 -2 +BITMAP +7F7E +2210 +3E20 +227C +3E44 +23D4 +FE54 +0254 +F754 +1154 +5554 +2220 +5528 +8944 +1082 +ENDCHAR +STARTCHAR uni989F +ENCODING 39071 +BBX 15 16 0 -2 +BITMAP +2400 +24FE +FF10 +2420 +007C +FF44 +2454 +2454 +FF54 +A554 +A554 +DB54 +9128 +8124 +8542 +8282 +ENDCHAR +STARTCHAR uni98A0 +ENCODING 39072 +BBX 14 16 1 -2 +BITMAP +1000 +11FC +FE20 +1040 +7CF8 +4488 +7CA8 +44A8 +7CA8 +44A8 +7CA8 +44A8 +FE50 +2848 +4484 +8304 +ENDCHAR +STARTCHAR uni98A1 +ENCODING 39073 +BBX 15 15 0 -2 +BITMAP +7EFE +2210 +1C20 +227C +7744 +5554 +2254 +5554 +0854 +7F54 +1C54 +2A28 +4924 +8842 +0882 +ENDCHAR +STARTCHAR uni98A2 +ENCODING 39074 +BBX 15 15 0 -2 +BITMAP +7F7E +4110 +7F20 +417C +7F44 +0854 +FFD4 +0054 +7F54 +4154 +7F54 +0820 +4928 +88C4 +1882 +ENDCHAR +STARTCHAR uni98A3 +ENCODING 39075 +BBX 15 16 0 -2 +BITMAP +9200 +54FE +FE10 +3020 +547C +9244 +2054 +4454 +7854 +1054 +2454 +FE54 +1028 +5424 +9242 +3082 +ENDCHAR +STARTCHAR uni98A4 +ENCODING 39076 +BBX 15 16 0 -2 +BITMAP +0800 +FF7E +0010 +FF20 +817C +BD44 +A554 +FF54 +0054 +7E54 +4254 +7E54 +4220 +7E28 +0044 +FE82 +ENDCHAR +STARTCHAR uni98A5 +ENCODING 39077 +BBX 15 15 0 -2 +BITMAP +7F7E +0810 +FFA0 +88FC +6B44 +0854 +6B54 +0054 +FFD4 +0854 +7F54 +5520 +5528 +5544 +4382 +ENDCHAR +STARTCHAR uni98A6 +ENCODING 39078 +BBX 15 16 0 -2 +BITMAP +0800 +2EFE +2820 +FF7C +2A54 +4C54 +3228 +C444 +3FF8 +2108 +3FF8 +2208 +3FF8 +0880 +FFFE +0080 +ENDCHAR +STARTCHAR uni98A7 +ENCODING 39079 +BBX 15 16 0 -2 +BITMAP +2200 +227E +FF90 +2220 +777C +5544 +7754 +1254 +3F54 +6454 +BF54 +2454 +3F20 +2428 +3F44 +2082 +ENDCHAR +STARTCHAR uni98A8 +ENCODING 39080 +BBX 15 14 1 -1 +BITMAP +7FF0 +4010 +41D0 +5E10 +4210 +5FD0 +5250 +5250 +5FD0 +4210 +4248 +83EA +BC2A +0004 +ENDCHAR +STARTCHAR uni98A9 +ENCODING 39081 +BBX 15 15 0 -1 +BITMAP +0002 +7FC2 +4044 +4348 +5C52 +4442 +5F44 +5548 +5550 +5F42 +4444 +4548 +5F50 +4922 +801E +ENDCHAR +STARTCHAR uni98AA +ENCODING 39082 +BBX 15 14 1 -1 +BITMAP +FFFE +0200 +03FC +0200 +3FF8 +2068 +2F88 +2108 +2FE8 +2928 +2FE8 +412A +41EA +9E14 +ENDCHAR +STARTCHAR uni98AB +ENCODING 39083 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +4110 +4D7C +7110 +5110 +7D10 +55FE +5510 +7D28 +5128 +5544 +5D82 +B302 +80FE +ENDCHAR +STARTCHAR uni98AC +ENCODING 39084 +BBX 15 14 0 -1 +BITMAP +7FDE +4044 +4354 +5C54 +4464 +5F7E +5544 +554C +5F54 +4464 +4554 +5F48 +4922 +801E +ENDCHAR +STARTCHAR uni98AD +ENCODING 39085 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +4110 +4D1C +7110 +5110 +7D10 +557C +5544 +7D44 +5144 +5544 +5D7E +B302 +80FE +ENDCHAR +STARTCHAR uni98AE +ENCODING 39086 +BBX 15 15 0 -1 +BITMAP +0040 +7F40 +417C +4D84 +7174 +5154 +7D54 +5574 +7D48 +5142 +5542 +7D3E +4480 +4042 +803E +ENDCHAR +STARTCHAR uni98AF +ENCODING 39087 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2404 +FC34 +05C4 +5444 +55F4 +5554 +5554 +55F4 +1444 +3C54 +C474 +098A +1002 +ENDCHAR +STARTCHAR uni98B0 +ENCODING 39088 +BBX 15 15 1 -1 +BITMAP +0028 +7F24 +4124 +4DFE +7120 +5124 +7D44 +5568 +55A8 +7D10 +5128 +55C6 +5D00 +B302 +80FE +ENDCHAR +STARTCHAR uni98B1 +ENCODING 39089 +BBX 15 15 1 -1 +BITMAP +0008 +7FC8 +4048 +4350 +5C54 +4454 +5F7E +5542 +555C +5F54 +4454 +4554 +475C +9942 +803E +ENDCHAR +STARTCHAR uni98B2 +ENCODING 39090 +BBX 15 16 0 -2 +BITMAP +0002 +7DF2 +4482 +4C8A +748A +55EA +552A +7D2A +56AA +7C4A +544A +5482 +530A +7D04 +4482 +807E +ENDCHAR +STARTCHAR uni98B3 +ENCODING 39091 +BBX 15 15 0 -1 +BITMAP +0004 +7FD8 +4048 +4348 +5C7E +4448 +5F48 +555C +5554 +5F54 +4454 +455C +5F40 +4922 +801E +ENDCHAR +STARTCHAR uni98B4 +ENCODING 39092 +BBX 15 15 0 -1 +BITMAP +0020 +7F20 +413E +4D40 +7180 +517E +7D12 +5550 +7D5C +5150 +5550 +7DBE +4480 +4042 +803E +ENDCHAR +STARTCHAR uni98B5 +ENCODING 39093 +BBX 15 15 0 -1 +BITMAP +0010 +7F54 +4138 +4D10 +717C +5144 +7D7C +5544 +7D7C +5144 +5544 +7D4C +4480 +4042 +803E +ENDCHAR +STARTCHAR uni98B6 +ENCODING 39094 +BBX 15 14 1 -1 +BITMAP +7FDC +4054 +435C +5C54 +445C +5F54 +555C +5554 +5F7E +4440 +4554 +4762 +9942 +803E +ENDCHAR +STARTCHAR uni98B7 +ENCODING 39095 +BBX 15 15 1 -1 +BITMAP +0010 +7F52 +4154 +4DA8 +7128 +5144 +7D82 +5510 +5554 +7D94 +5128 +5548 +5D84 +B302 +80FE +ENDCHAR +STARTCHAR uni98B8 +ENCODING 39096 +BBX 15 14 1 -1 +BITMAP +7F7C +4154 +4D7C +7154 +5154 +7D7C +5514 +554A +7D42 +51A4 +551C +5D02 +B302 +80FE +ENDCHAR +STARTCHAR uni98B9 +ENCODING 39097 +BBX 15 15 0 -1 +BITMAP +0010 +7F7C +4124 +4DFE +7100 +517C +7D44 +557C +7D10 +513C +5550 +7D7E +4490 +4052 +803E +ENDCHAR +STARTCHAR uni98BA +ENCODING 39098 +BBX 15 14 1 -1 +BITMAP +7F7C +4144 +4D7C +7144 +517C +7D00 +55FE +5520 +7D7E +51AA +554A +5D12 +F306 +80FE +ENDCHAR +STARTCHAR uni98BB +ENCODING 39099 +BBX 15 15 1 -1 +BITMAP +1000 +3DFC +6504 +9534 +49C4 +3144 +C1F4 +3D54 +5154 +11F4 +FF44 +1154 +5574 +55CC +7E02 +ENDCHAR +STARTCHAR uni98BC +ENCODING 39100 +BBX 15 15 1 -1 +BITMAP +0010 +7F76 +4152 +4D76 +7152 +5176 +7D10 +55FE +5542 +7D24 +5118 +5524 +5DC2 +B302 +80FE +ENDCHAR +STARTCHAR uni98BD +ENCODING 39101 +BBX 15 16 0 -2 +BITMAP +1000 +55FC +5504 +5534 +7DC4 +0144 +7DF4 +0154 +7D54 +45F4 +7D44 +4554 +29F4 +1D16 +E206 +4402 +ENDCHAR +STARTCHAR uni98BE +ENCODING 39102 +BBX 15 15 0 -2 +BITMAP +7DF8 +44A8 +4C88 +7450 +5420 +54D8 +7F26 +54F8 +7CA8 +54F8 +5424 +53FC +7D04 +4482 +807E +ENDCHAR +STARTCHAR uni98BF +ENCODING 39103 +BBX 15 14 1 -1 +BITMAP +7DFC +4904 +4934 +7DC4 +4944 +49F4 +7D54 +4954 +49F4 +7D44 +0554 +AD74 +A5CC +8A06 +ENDCHAR +STARTCHAR uni98C0 +ENCODING 39104 +BBX 15 16 0 -2 +BITMAP +0040 +7DBC +4514 +4D54 +75A4 +552C +5440 +7DFC +5524 +7DFC +5524 +55FC +5200 +7D00 +4482 +807E +ENDCHAR +STARTCHAR uni98C1 +ENCODING 39105 +BBX 15 15 0 -2 +BITMAP +FDFC +2504 +B534 +6DC4 +B544 +25F4 +1154 +7D54 +45F4 +4544 +7D54 +45F4 +4516 +7E06 +4402 +ENDCHAR +STARTCHAR uni98C2 +ENCODING 39106 +BBX 15 15 1 -1 +BITMAP +00EE +7F66 +41AA +4D66 +71AA +5110 +7D28 +55D6 +5524 +7D08 +5172 +5504 +5D78 +B302 +80FE +ENDCHAR +STARTCHAR uni98C3 +ENCODING 39107 +BBX 15 14 1 -1 +BITMAP +7F7C +4128 +4D7C +7154 +517C +7D00 +557C +5500 +7DFE +5110 +5554 +5DB2 +7502 +80FE +ENDCHAR +STARTCHAR uni98C4 +ENCODING 39108 +BBX 15 14 1 -1 +BITMAP +FFF8 +2A08 +FE68 +AB88 +AA88 +FFE8 +02A8 +7EA8 +03E8 +FE88 +1288 +56AA +93DA +3404 +ENDCHAR +STARTCHAR uni98C5 +ENCODING 39109 +BBX 15 15 0 -2 +BITMAP +7DFE +4450 +4DDC +7554 +55DC +5450 +7DFC +5524 +7DFC +5524 +55FC +5200 +7D00 +4482 +807E +ENDCHAR +STARTCHAR uni98C6 +ENCODING 39110 +BBX 15 15 1 -1 +BITMAP +1800 +15FC +1104 +FF34 +29C4 +2544 +41F4 +B754 +2554 +FFF4 +2544 +2554 +5B74 +4992 +9202 +ENDCHAR +STARTCHAR uni98C7 +ENCODING 39111 +BBX 15 15 1 -1 +BITMAP +0014 +7F12 +417C +4D10 +7128 +5144 +7D24 +555A +5548 +7DFE +5148 +55B4 +5D22 +B302 +80FE +ENDCHAR +STARTCHAR uni98C8 +ENCODING 39112 +BBX 15 15 1 -1 +BITMAP +0020 +7CA2 +4524 +4D20 +7450 +5488 +7F06 +5488 +56BA +7DAC +5488 +5554 +5E22 +F202 +81FE +ENDCHAR +STARTCHAR uni98C9 +ENCODING 39113 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +45FC +4D54 +7488 +55FC +568A +7CF8 +5488 +7CF8 +54A8 +5524 +5260 +7D00 +4482 +807E +ENDCHAR +STARTCHAR uni98CA +ENCODING 39114 +BBX 15 16 0 -2 +BITMAP +0800 +2AF8 +2C88 +4898 +14E8 +22A8 +41F8 +24A8 +2DF8 +B6A8 +64A8 +24BA +54CA +4A8A +9106 +0202 +ENDCHAR +STARTCHAR uni98CB +ENCODING 39115 +BBX 15 15 1 -1 +BITMAP +00EE +7F44 +41EE +4D44 +7164 +51CE +7D20 +5514 +5522 +7DA2 +51A8 +5534 +5D4C +B382 +80FE +ENDCHAR +STARTCHAR uni98CC +ENCODING 39116 +BBX 15 16 0 -2 +BITMAP +4400 +FEF8 +4488 +0098 +EEE8 +AAA8 +EEF8 +24A8 +7EF8 +C8A8 +7EA8 +48BA +7ECA +488A +7F06 +4202 +ENDCHAR +STARTCHAR uni98CD +ENCODING 39117 +BBX 15 16 0 -2 +BITMAP +1FF0 +10D0 +1710 +1110 +17D0 +1550 +27CA +212A +4FE6 +8022 +7CF8 +54A8 +7CF8 +54AA +7DFE +8202 +ENDCHAR +STARTCHAR uni98CE +ENCODING 39118 +BBX 15 15 0 -2 +BITMAP +3FF0 +2010 +2010 +2850 +2450 +2290 +2290 +2110 +2110 +2290 +2292 +244A +484A +4006 +8002 +ENDCHAR +STARTCHAR uni98CF +ENCODING 39119 +BBX 15 15 0 -2 +BITMAP +7DF8 +4410 +4420 +44C0 +4DFC +6C54 +5494 +5524 +5444 +6C84 +4528 +4410 +4202 +41FE +8000 +ENDCHAR +STARTCHAR uni98D0 +ENCODING 39120 +BBX 15 16 0 -2 +BITMAP +0010 +3F10 +211E +2110 +2510 +357C +2944 +2944 +2944 +297C +3544 +2500 +2082 +4062 +401E +8000 +ENDCHAR +STARTCHAR uni98D1 +ENCODING 39121 +BBX 15 16 0 -2 +BITMAP +0040 +7C40 +44FC +4504 +46F4 +4C94 +6CF4 +5484 +5494 +548A +6C82 +447E +4400 +4202 +41FE +8000 +ENDCHAR +STARTCHAR uni98D2 +ENCODING 39122 +BBX 15 16 0 -2 +BITMAP +2000 +13F8 +1208 +FE08 +0328 +0AA8 +8AA8 +8A48 +4A48 +4AA8 +52A8 +532A +1C0A +E40A +4806 +1002 +ENDCHAR +STARTCHAR uni98D3 +ENCODING 39123 +BBX 15 15 0 -2 +BITMAP +7CF8 +4488 +44F8 +4488 +4CF8 +6C88 +54F8 +5488 +55FC +6C00 +4450 +4488 +4202 +41FE +8000 +ENDCHAR +STARTCHAR uni98D4 +ENCODING 39124 +BBX 15 15 0 -2 +BITMAP +7DFC +4524 +45FC +4524 +4DFC +6C20 +5414 +5552 +5542 +6E48 +4438 +4400 +4202 +41FE +8000 +ENDCHAR +STARTCHAR uni98D5 +ENCODING 39125 +BBX 15 16 0 -2 +BITMAP +00A0 +7D2C +4524 +45AC +4524 +4DFC +6C20 +55FC +5404 +54C8 +6C30 +4448 +4584 +4202 +41FE +8000 +ENDCHAR +STARTCHAR uni98D6 +ENCODING 39126 +BBX 15 16 0 -2 +BITMAP +0E00 +F0F8 +2288 +9288 +4488 +2098 +3CD8 +50A8 +10A8 +FEA8 +10D8 +548A +548A +5D0A +6506 +0202 +ENDCHAR +STARTCHAR uni98D7 +ENCODING 39127 +BBX 15 16 0 -2 +BITMAP +0040 +7DBC +4514 +4554 +45A4 +4D2C +6C40 +55FC +5524 +55FC +6D24 +45FC +4400 +4202 +41FE +8000 +ENDCHAR +STARTCHAR uni98D8 +ENCODING 39128 +BBX 15 15 0 -2 +BITMAP +FEF8 +2888 +FE88 +AA88 +AA98 +FED8 +00A8 +7CA8 +00A8 +FED8 +108A +548A +930A +5106 +2202 +ENDCHAR +STARTCHAR uni98D9 +ENCODING 39129 +BBX 15 15 0 -2 +BITMAP +14F8 +1088 +FE88 +2888 +4498 +82D8 +24A8 +36A8 +24A8 +FFD8 +248A +548A +4B0A +8906 +1202 +ENDCHAR +STARTCHAR uni98DA +ENCODING 39130 +BBX 15 16 0 -2 +BITMAP +0020 +7CA4 +44A4 +4528 +4450 +4C88 +6D04 +5488 +56AA +55DC +6C88 +4554 +4622 +4202 +41FE +8000 +ENDCHAR +STARTCHAR uni98DB +ENCODING 39131 +BBX 15 14 1 -1 +BITMAP +3FE4 +0028 +0538 +1924 +7110 +110A +FFE6 +1120 +1128 +1130 +2128 +2124 +4112 +810E +ENDCHAR +STARTCHAR uni98DC +ENCODING 39132 +BBX 15 15 1 -1 +BITMAP +0C00 +71FA +924C +54AA +FFA8 +38AA +54A6 +92A0 +01F8 +7CAA +54AC +7CAA +5528 +552A +7E26 +ENDCHAR +STARTCHAR uni98DD +ENCODING 39133 +BBX 15 16 0 -2 +BITMAP +0004 +7FE8 +0824 +7212 +120E +FFD0 +122A +221E +FDF8 +2448 +D5AA +56AC +FDFA +54A8 +55AA +9326 +ENDCHAR +STARTCHAR uni98DE +ENCODING 39134 +BBX 15 15 0 -2 +BITMAP +FFC0 +0040 +0044 +0048 +0050 +0060 +0050 +0048 +0044 +0020 +0020 +0012 +000A +0006 +0002 +ENDCHAR +STARTCHAR uni98DF +ENCODING 39135 +BBX 14 15 1 -1 +BITMAP +0200 +0500 +08C0 +3230 +C20C +3FE0 +2020 +3FE0 +2020 +3FE8 +2110 +2120 +24C0 +3860 +E01C +ENDCHAR +STARTCHAR uni98E0 +ENCODING 39136 +BBX 12 15 3 -1 +BITMAP +0400 +0B00 +34C0 +E470 +3FC0 +2040 +3FC0 +2040 +3FC0 +2000 +2100 +2100 +2680 +3840 +E020 +ENDCHAR +STARTCHAR uni98E1 +ENCODING 39137 +BBX 15 15 1 -1 +BITMAP +0040 +40A0 +2110 +1248 +0C46 +03F8 +0208 +13F8 +1208 +23FA +2244 +4228 +4210 +83C8 +1E06 +ENDCHAR +STARTCHAR uni98E2 +ENCODING 39138 +BBX 15 15 1 -1 +BITMAP +0800 +0878 +1448 +2B48 +4848 +BE48 +2248 +3E48 +2248 +3E48 +2048 +2448 +2C8A +328A +6106 +ENDCHAR +STARTCHAR uni98E3 +ENCODING 39139 +BBX 15 15 1 -1 +BITMAP +1000 +29FE +2410 +5A10 +8010 +7C10 +4410 +7C10 +4410 +7C10 +4010 +7C10 +4010 +7C10 +4070 +ENDCHAR +STARTCHAR uni98E4 +ENCODING 39140 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1420 +1220 +2920 +7E20 +A220 +3E20 +2250 +3E50 +2050 +2850 +2448 +2A88 +3284 +2102 +ENDCHAR +STARTCHAR uni98E5 +ENCODING 39141 +BBX 15 15 1 -1 +BITMAP +101C +29E0 +2420 +5A20 +8020 +7C20 +443E +7DE0 +4420 +7C20 +4020 +7C20 +4022 +7C22 +401E +ENDCHAR +STARTCHAR uni98E6 +ENCODING 39142 +BBX 15 16 0 -2 +BITMAP +0800 +087C +1410 +1210 +2910 +7E10 +A210 +3EFE +2210 +3E10 +2010 +2810 +2410 +2A10 +3210 +2010 +ENDCHAR +STARTCHAR uni98E7 +ENCODING 39143 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +2050 +3C88 +2724 +25FE +2504 +55FC +4D04 +89FC +0922 +1114 +1108 +21E4 +4702 +ENDCHAR +STARTCHAR uni98E8 +ENCODING 39144 +BBX 14 16 1 -2 +BITMAP +2040 +2040 +20A0 +4890 +4948 +F3F4 +1510 +21F0 +4910 +F9F0 +0944 +1128 +1110 +2148 +4188 +8100 +ENDCHAR +STARTCHAR uni98E9 +ENCODING 39145 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +243C +59E0 +8020 +7C20 +4524 +7D24 +4524 +7D24 +41FC +7C20 +4022 +7C22 +401E +ENDCHAR +STARTCHAR uni98EA +ENCODING 39146 +BBX 15 15 1 -1 +BITMAP +101C +29E0 +2420 +5A20 +8020 +7C20 +45FE +7C20 +4420 +7C20 +4020 +7C20 +4020 +7C20 +40FC +ENDCHAR +STARTCHAR uni98EB +ENCODING 39147 +BBX 15 15 1 -1 +BITMAP +1018 +28E0 +2420 +5820 +8020 +7C20 +47FE +7C20 +4420 +7C20 +4050 +7C50 +4088 +7D04 +4202 +ENDCHAR +STARTCHAR uni98EC +ENCODING 39148 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +3FF8 +0200 +7FFC +0820 +1110 +2FE8 +C826 +0FE0 +0820 +0FE8 +08D0 +0A30 +0C08 +ENDCHAR +STARTCHAR uni98ED +ENCODING 39149 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +2480 +59FE +4100 +FE40 +4440 +7DFC +4444 +7C44 +4044 +7C84 +4084 +7D04 +4218 +ENDCHAR +STARTCHAR uni98EE +ENCODING 39150 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +2680 +58FE +C102 +7D24 +4424 +7C20 +4420 +7C50 +4050 +7C88 +4088 +7D04 +4002 +ENDCHAR +STARTCHAR uni98EF +ENCODING 39151 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +2900 +5500 +9100 +7DFC +4544 +7D44 +4528 +7D28 +4110 +4910 +5A28 +6644 +C482 +ENDCHAR +STARTCHAR uni98F0 +ENCODING 39152 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +5BFE +8020 +7C20 +4420 +7C38 +4424 +7C20 +4020 +7C20 +4020 +7C20 +4020 +ENDCHAR +STARTCHAR uni98F1 +ENCODING 39153 +BBX 15 15 1 -1 +BITMAP +0040 +FCA0 +2110 +2248 +2446 +7BF8 +4A08 +4BF8 +CA08 +2BFA +1244 +1228 +2210 +4388 +8E06 +ENDCHAR +STARTCHAR uni98F2 +ENCODING 39154 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +2820 +567E +9042 +7C94 +4510 +7C10 +4410 +7C10 +4018 +4428 +4C28 +7244 +C282 +ENDCHAR +STARTCHAR uni98F3 +ENCODING 39155 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +5BFE +8020 +7C20 +4420 +7C20 +45FC +7C20 +4020 +7C20 +4020 +7C20 +43FE +ENDCHAR +STARTCHAR uni98F4 +ENCODING 39156 +BBX 15 15 1 -1 +BITMAP +1040 +2840 +2448 +5884 +8084 +7D1A +47E2 +7C00 +4400 +7CFC +4084 +7C84 +4084 +7C84 +40FC +ENDCHAR +STARTCHAR uni98F5 +ENCODING 39157 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +1440 +127E +29A0 +7EA0 +A320 +3E3C +2220 +3E20 +2020 +283E +2420 +2A20 +3220 +2020 +ENDCHAR +STARTCHAR uni98F6 +ENCODING 39158 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2828 +2408 +5208 +FC48 +4454 +7D52 +4552 +7D60 +4260 +5044 +48C4 +5544 +663C +4000 +ENDCHAR +STARTCHAR uni98F7 +ENCODING 39159 +BBX 15 16 0 -2 +BITMAP +0800 +087C +1444 +1244 +2944 +7E7C +A244 +3E44 +2244 +3E7C +2044 +2844 +2444 +2A44 +32FE +2000 +ENDCHAR +STARTCHAR uni98F8 +ENCODING 39160 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4450 +4448 +44A4 +7DFA +0288 +FEF8 +2088 +40F8 +7CA2 +0494 +0488 +04A4 +28C4 +1080 +ENDCHAR +STARTCHAR uni98F9 +ENCODING 39161 +BBX 15 16 0 -2 +BITMAP +1000 +1080 +2B1E +2652 +5252 +FA52 +4A52 +7A52 +4A52 +7AD2 +435A +5254 +4890 +5890 +6910 +4210 +ENDCHAR +STARTCHAR uni98FA +ENCODING 39162 +BBX 15 16 0 -2 +BITMAP +0880 +2888 +2EF0 +2884 +2E84 +F17C +0280 +0D60 +3FF8 +C826 +0FE0 +0820 +0FE8 +08D0 +0A30 +0C08 +ENDCHAR +STARTCHAR uni98FB +ENCODING 39163 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2850 +2488 +5304 +FE12 +4420 +7C40 +4588 +7C10 +4020 +5044 +4988 +5410 +6460 +4380 +ENDCHAR +STARTCHAR uni98FC +ENCODING 39164 +BBX 14 15 1 -1 +BITMAP +1000 +11FC +2804 +5404 +91E4 +7C04 +4404 +7DE4 +4524 +7D24 +4124 +45E4 +4C04 +7204 +C21C +ENDCHAR +STARTCHAR uni98FD +ENCODING 39165 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +28FC +5484 +9304 +7DF4 +4414 +7C14 +4414 +7CF4 +4088 +4480 +4C82 +7282 +C27E +ENDCHAR +STARTCHAR uni98FE +ENCODING 39166 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +29FE +5520 +9220 +7DFC +4524 +7D24 +4524 +7D24 +4124 +4924 +592C +6420 +C420 +ENDCHAR +STARTCHAR uni98FF +ENCODING 39167 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +1492 +1292 +2992 +7E92 +A2FE +3E10 +2210 +3E92 +2092 +2892 +2492 +2A92 +32FE +2002 +ENDCHAR +STARTCHAR uni9900 +ENCODING 39168 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +29FE +2488 +5288 +FC00 +4504 +7D04 +4488 +7C88 +4050 +5020 +4850 +5488 +6504 +4202 +ENDCHAR +STARTCHAR uni9901 +ENCODING 39169 +BBX 15 16 0 -2 +BITMAP +1040 +1044 +284E +24B8 +5288 +FD88 +4688 +7C88 +44FE +7C88 +4088 +5088 +4888 +5488 +64BE +4080 +ENDCHAR +STARTCHAR uni9902 +ENCODING 39170 +BBX 15 16 0 -2 +BITMAP +1008 +103C +29E0 +2420 +5220 +FDFE +4420 +7C20 +4420 +7DFC +4104 +5104 +4904 +5504 +65FC +4104 +ENDCHAR +STARTCHAR uni9903 +ENCODING 39171 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2420 +5BFE +8088 +7D04 +4602 +7C88 +4488 +7C50 +4050 +7C20 +4050 +7C88 +4306 +ENDCHAR +STARTCHAR uni9904 +ENCODING 39172 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +1428 +1228 +2944 +7E82 +A27C +3E00 +2200 +3E7C +2044 +2844 +2444 +2A44 +327C +2044 +ENDCHAR +STARTCHAR uni9905 +ENCODING 39173 +BBX 15 15 1 -1 +BITMAP +1084 +2844 +2448 +5800 +81FE +7C48 +4448 +7C48 +45FE +7C48 +4048 +7C48 +4088 +7C88 +4108 +ENDCHAR +STARTCHAR uni9906 +ENCODING 39174 +BBX 15 16 0 -2 +BITMAP +1050 +1050 +2850 +2552 +52D4 +FC58 +4450 +7C58 +44D4 +7D52 +4050 +5050 +4892 +5492 +6512 +420E +ENDCHAR +STARTCHAR uni9907 +ENCODING 39175 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +1482 +1282 +29BA +7E82 +A282 +3EBA +22AA +3EAA +20AA +28BA +2482 +2A82 +328A +2084 +ENDCHAR +STARTCHAR uni9908 +ENCODING 39176 +BBX 15 15 1 -1 +BITMAP +6080 +18FE +0124 +0220 +0850 +3188 +C6C6 +1930 +EFFE +0810 +0FF0 +0810 +0FF4 +0848 +7E3E +ENDCHAR +STARTCHAR uni9909 +ENCODING 39177 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2440 +59FE +8102 +7D02 +457A +7D4A +454A +7D4A +417A +7D02 +4102 +7D02 +410E +ENDCHAR +STARTCHAR uni990A +ENCODING 39178 +BBX 15 15 1 -1 +BITMAP +0440 +7FFC +0100 +3FF8 +0100 +FFFE +0920 +1FF0 +2828 +CFE4 +0820 +0FE4 +0848 +0F30 +700E +ENDCHAR +STARTCHAR uni990B +ENCODING 39179 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +7FFC +0400 +FFFE +1110 +22C8 +CD36 +3FE8 +C824 +0FE0 +0820 +0FE8 +08D0 +0A30 +0C08 +ENDCHAR +STARTCHAR uni990C +ENCODING 39180 +BBX 15 15 1 -1 +BITMAP +1000 +2BFC +2488 +5888 +80F8 +7C88 +4488 +7CF8 +4488 +7C88 +408E +7CF8 +4388 +7C08 +4008 +ENDCHAR +STARTCHAR uni990D +ENCODING 39181 +BBX 15 15 0 -2 +BITMAP +3FFE +2108 +3FFC +2410 +2888 +3364 +2C98 +37F6 +2410 +27F0 +2410 +27F4 +4468 +4518 +8604 +ENDCHAR +STARTCHAR uni990E +ENCODING 39182 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +1478 +1288 +2950 +7E20 +A250 +3E88 +2306 +3EF8 +2088 +2888 +2488 +2A88 +32F8 +2088 +ENDCHAR +STARTCHAR uni990F +ENCODING 39183 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2820 +25FE +5240 +FC40 +44A0 +7CA2 +45A4 +7E98 +4490 +5088 +4888 +54A4 +64C2 +4080 +ENDCHAR +STARTCHAR uni9910 +ENCODING 39184 +BBX 15 15 1 -1 +BITMAP +1000 +1EFC +1044 +7E48 +C430 +3848 +E306 +0CC0 +3230 +DFCC +1040 +1FC0 +1050 +1FE0 +701C +ENDCHAR +STARTCHAR uni9911 +ENCODING 39185 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +29FE +2420 +5220 +FDFE +4502 +7E04 +44F8 +7C10 +4020 +51FE +4820 +5420 +64A0 +4040 +ENDCHAR +STARTCHAR uni9912 +ENCODING 39186 +BBX 15 15 1 -1 +BITMAP +101C +29E4 +2642 +5A22 +8422 +7C40 +4440 +7FFE +4448 +7C48 +4088 +7DD0 +4030 +7CCC +4302 +ENDCHAR +STARTCHAR uni9913 +ENCODING 39187 +BBX 15 15 1 -1 +BITMAP +10A0 +1128 +2F24 +4920 +A120 +7FFE +4920 +7924 +4924 +79A8 +4728 +4910 +5912 +652A +C744 +ENDCHAR +STARTCHAR uni9914 +ENCODING 39188 +BBX 15 15 1 -1 +BITMAP +1028 +2824 +27FE +5820 +8020 +7DFC +4524 +7D24 +45FC +7D24 +4124 +7DFC +4124 +7D24 +412C +ENDCHAR +STARTCHAR uni9915 +ENCODING 39189 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +1420 +1244 +29FE +7E28 +A244 +3EA2 +223C +3E44 +2044 +28A8 +2410 +2A28 +3244 +2082 +ENDCHAR +STARTCHAR uni9916 +ENCODING 39190 +BBX 15 15 1 -1 +BITMAP +1000 +29FE +2400 +5A00 +40FC +FC84 +4484 +7C84 +44FC +7C00 +4044 +7C44 +4028 +7C08 +41FE +ENDCHAR +STARTCHAR uni9917 +ENCODING 39191 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +5820 +41FC +FD24 +4524 +7D24 +45FC +7CA8 +40A8 +7D24 +4222 +7C20 +4020 +ENDCHAR +STARTCHAR uni9918 +ENCODING 39192 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +2450 +5888 +8306 +7CF8 +4420 +7C20 +45FC +7C20 +4020 +7CA8 +4326 +7C20 +4060 +ENDCHAR +STARTCHAR uni9919 +ENCODING 39193 +BBX 15 16 0 -2 +BITMAP +10C2 +1034 +2818 +2464 +5382 +FC20 +45FE +7C50 +4490 +7DFE +4292 +5092 +489A +5494 +6410 +4010 +ENDCHAR +STARTCHAR uni991A +ENCODING 39194 +BBX 15 15 1 -1 +BITMAP +1004 +2988 +2470 +598C +4020 +FFFE +4440 +7CFC +4584 +7EFC +4084 +7CFC +4084 +7C84 +409C +ENDCHAR +STARTCHAR uni991B +ENCODING 39195 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2504 +59FC +4104 +FD04 +45FC +7C00 +4510 +7D14 +41D8 +7D10 +4112 +7DD2 +430E +ENDCHAR +STARTCHAR uni991C +ENCODING 39196 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2524 +5924 +41FC +FD24 +4524 +7DFC +4420 +7FFE +40A8 +7CA8 +4124 +7E22 +4020 +ENDCHAR +STARTCHAR uni991D +ENCODING 39197 +BBX 15 15 1 -1 +BITMAP +1088 +2888 +27FE +5888 +80A8 +7C20 +47FE +7C40 +4440 +7C7C +4044 +7C84 +4084 +7D04 +4618 +ENDCHAR +STARTCHAR uni991E +ENCODING 39198 +BBX 15 15 1 -1 +BITMAP +1048 +2844 +247E +59E0 +802C +7C72 +458E +7C48 +4444 +7C7E +43C0 +7C2C +4010 +7C6A +4186 +ENDCHAR +STARTCHAR uni991F +ENCODING 39199 +BBX 15 16 0 -2 +BITMAP +1000 +13DE +2842 +254A +5084 +F94A +4A52 +7C20 +4800 +7BDE +4052 +5152 +4894 +5948 +6A54 +4422 +ENDCHAR +STARTCHAR uni9920 +ENCODING 39200 +BBX 15 15 1 -1 +BITMAP +1044 +2844 +2488 +5BDE +8088 +7C88 +4488 +7CA8 +44C8 +7D9E +4288 +7C88 +4108 +7D08 +4208 +ENDCHAR +STARTCHAR uni9921 +ENCODING 39201 +BBX 15 15 1 -1 +BITMAP +1040 +2840 +247E +5882 +8082 +7D04 +4418 +7C40 +459E +7D02 +4102 +7DDE +4102 +7D02 +41FE +ENDCHAR +STARTCHAR uni9922 +ENCODING 39202 +BBX 15 16 0 -2 +BITMAP +0820 +0810 +147C +1200 +2944 +7E24 +A228 +3EFE +2200 +3E00 +207C +2844 +2444 +2A44 +327C +2044 +ENDCHAR +STARTCHAR uni9923 +ENCODING 39203 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2BFE +2450 +5288 +FD24 +4622 +7DFC +4524 +7DFC +4124 +51FC +4822 +5422 +641E +4000 +ENDCHAR +STARTCHAR uni9924 +ENCODING 39204 +BBX 15 15 1 -1 +BITMAP +1020 +2922 +2522 +5A54 +8250 +7C88 +4706 +7C20 +4522 +7D22 +4224 +7C70 +4050 +7C88 +4306 +ENDCHAR +STARTCHAR uni9925 +ENCODING 39205 +BBX 15 16 0 -2 +BITMAP +0440 +7C7C +0440 +3C78 +0440 +7D7C +06C0 +0D60 +3FF8 +C826 +0FE0 +0820 +0FE8 +08D0 +0A30 +0C08 +ENDCHAR +STARTCHAR uni9926 +ENCODING 39206 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2880 +24F8 +5280 +FCF8 +4480 +7FFE +4540 +7D24 +4128 +5110 +4908 +5544 +6582 +4100 +ENDCHAR +STARTCHAR uni9927 +ENCODING 39207 +BBX 15 16 0 -2 +BITMAP +1038 +10E0 +2820 +25FC +5270 +FCA8 +4524 +7C20 +4440 +7DFE +4048 +5088 +4850 +5420 +6450 +4188 +ENDCHAR +STARTCHAR uni9928 +ENCODING 39208 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +2BFE +5602 +92FA +7C88 +4488 +7CF8 +4480 +7C80 +40FC +4484 +4C84 +7284 +C2FC +ENDCHAR +STARTCHAR uni9929 +ENCODING 39209 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +1450 +1288 +2926 +7E10 +A3FE +3E20 +2244 +3EF8 +2012 +2864 +2588 +2A18 +3264 +2182 +ENDCHAR +STARTCHAR uni992A +ENCODING 39210 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2820 +2440 +53FC +FD54 +4554 +7D54 +4554 +7D2C +4020 +53FE +4850 +5488 +6504 +4202 +ENDCHAR +STARTCHAR uni992B +ENCODING 39211 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2A22 +2420 +53FE +FC20 +45FC +7D24 +45FC +7D24 +41FC +5020 +4BFE +5420 +6420 +4020 +ENDCHAR +STARTCHAR uni992C +ENCODING 39212 +BBX 15 15 1 -1 +BITMAP +1080 +289E +2492 +5892 +83F2 +7C9E +4492 +7DD2 +4552 +7D5E +4152 +7D52 +41D2 +7C12 +4026 +ENDCHAR +STARTCHAR uni992D +ENCODING 39213 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +28FC +2484 +52FC +FC84 +44FC +7C00 +45FE +7C20 +4020 +50FC +4820 +5420 +65FE +4000 +ENDCHAR +STARTCHAR uni992E +ENCODING 39214 +BBX 15 15 1 -1 +BITMAP +0010 +FF28 +10C6 +3E20 +D2C8 +0C32 +F7CC +1930 +EFEE +0820 +0FE0 +0820 +0FE4 +0848 +7E3E +ENDCHAR +STARTCHAR uni992F +ENCODING 39215 +BBX 15 16 0 -2 +BITMAP +1040 +107C +2884 +24F8 +5208 +FDFE +4440 +7CA4 +4538 +7C58 +4094 +5134 +4854 +5492 +6550 +4020 +ENDCHAR +STARTCHAR uni9930 +ENCODING 39216 +BBX 15 16 0 -2 +BITMAP +1080 +108E +2920 +2610 +54C0 +F8AE +4904 +7B14 +4D24 +7964 +4124 +5124 +4924 +5904 +6914 +4108 +ENDCHAR +STARTCHAR uni9931 +ENCODING 39217 +BBX 15 15 1 -1 +BITMAP +1080 +28BC +2484 +5904 +41FE +FF20 +4520 +7D7C +4550 +7D10 +417E +7D28 +4128 +7D44 +4182 +ENDCHAR +STARTCHAR uni9932 +ENCODING 39218 +BBX 15 15 1 -1 +BITMAP +1000 +28FC +2484 +58FC +4084 +FC84 +44FC +7C40 +44FE +7F22 +4122 +7D52 +418A +7DF2 +400C +ENDCHAR +STARTCHAR uni9933 +ENCODING 39219 +BBX 15 15 1 -1 +BITMAP +1000 +28FC +2484 +58FC +4084 +FCFC +4400 +7FFE +4480 +7DFE +424A +7C92 +4122 +7C42 +408C +ENDCHAR +STARTCHAR uni9934 +ENCODING 39220 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +2BFE +2450 +50A8 +F924 +4AFA +7820 +48A8 +7888 +43FE +5088 +4888 +5888 +6908 +4208 +ENDCHAR +STARTCHAR uni9935 +ENCODING 39221 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +28A4 +24A4 +52FC +FCA4 +44A4 +7CFC +4400 +7DFE +4090 +5094 +4888 +54A8 +64C4 +4082 +ENDCHAR +STARTCHAR uni9936 +ENCODING 39222 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +2884 +24F4 +5294 +FDFE +4502 +7CFC +4484 +7CFC +4084 +50FC +4884 +5484 +6494 +4088 +ENDCHAR +STARTCHAR uni9937 +ENCODING 39223 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +14FE +1238 +2954 +7E92 +A200 +3E7C +2244 +3E7C +2044 +287C +2444 +2A00 +32FE +2000 +ENDCHAR +STARTCHAR uni9938 +ENCODING 39224 +BBX 15 16 0 -2 +BITMAP +1022 +1012 +2914 +2480 +52BE +FC08 +4408 +7DBE +4488 +7C88 +4094 +5092 +48A2 +5540 +663E +4000 +ENDCHAR +STARTCHAR uni9939 +ENCODING 39225 +BBX 15 16 0 -2 +BITMAP +0820 +0810 +14FE +1290 +29BC +7E94 +A2FE +3E94 +22BC +3E90 +20BC +28A4 +24A4 +2AA4 +32BC +2124 +ENDCHAR +STARTCHAR uni993A +ENCODING 39226 +BBX 15 15 1 -1 +BITMAP +1028 +2824 +27FE +5820 +41FC +FD24 +45FC +7D24 +45FC +7D24 +4008 +7DFE +4088 +7C48 +4018 +ENDCHAR +STARTCHAR uni993B +ENCODING 39227 +BBX 15 15 1 -1 +BITMAP +1104 +2884 +2488 +5BFE +4020 +FC20 +45FC +7C20 +4420 +7C20 +43FE +7C00 +4154 +7E2A +422A +ENDCHAR +STARTCHAR uni993C +ENCODING 39228 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +24FC +5900 +42F0 +FC00 +45F8 +7C08 +4548 +7CD8 +4048 +7DF8 +40EA +7D5A +4244 +ENDCHAR +STARTCHAR uni993D +ENCODING 39229 +BBX 15 15 1 -1 +BITMAP +1040 +2880 +25FC +5B24 +8124 +7DFC +4524 +7D24 +45FC +7CA8 +40AA +7CBE +4120 +7D22 +421E +ENDCHAR +STARTCHAR uni993E +ENCODING 39230 +BBX 15 15 1 -1 +BITMAP +10C0 +2B3E +2612 +5A12 +8292 +7AA2 +4F4C +7800 +49FC +7924 +4124 +79FC +4124 +7D24 +41FC +ENDCHAR +STARTCHAR uni993F +ENCODING 39231 +BBX 15 16 0 -2 +BITMAP +10A0 +112C +2924 +2524 +53AC +FD24 +4524 +7DFC +4420 +7DFC +4088 +5050 +4820 +5450 +6488 +4306 +ENDCHAR +STARTCHAR uni9940 +ENCODING 39232 +BBX 15 15 1 -1 +BITMAP +101C +29E4 +2522 +5912 +4212 +FC20 +4440 +7D9C +4504 +7D04 +41DC +7D04 +4104 +7D04 +41FC +ENDCHAR +STARTCHAR uni9941 +ENCODING 39233 +BBX 15 15 1 -1 +BITMAP +1020 +29FC +2420 +7820 +43FE +FC80 +4488 +7D34 +47C2 +7C00 +41FC +7D54 +4154 +7D54 +43FE +ENDCHAR +STARTCHAR uni9942 +ENCODING 39234 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2524 +5B24 +8154 +7D8C +4504 +7DFC +4400 +7DFC +4154 +7D54 +4154 +7D54 +43FE +ENDCHAR +STARTCHAR uni9943 +ENCODING 39235 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +2BFE +2488 +5200 +FDFC +4504 +7DFC +4504 +7DFC +4020 +53FE +4850 +5488 +6504 +4202 +ENDCHAR +STARTCHAR uni9944 +ENCODING 39236 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +28A8 +27FE +5202 +FCF8 +4488 +7C88 +44F8 +7C20 +4020 +51FC +4820 +5420 +67FE +4000 +ENDCHAR +STARTCHAR uni9945 +ENCODING 39237 +BBX 15 15 1 -1 +BITMAP +1000 +28FC +2484 +5AFC +8084 +7CFC +4400 +7DFE +454A +7DFE +4000 +7DFE +4084 +7C78 +4186 +ENDCHAR +STARTCHAR uni9946 +ENCODING 39238 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2524 +59FC +4124 +FDFC +4420 +7CA8 +47FE +7CA8 +41FC +7C20 +43FE +7C20 +4020 +ENDCHAR +STARTCHAR uni9947 +ENCODING 39239 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +2A00 +267C +5244 +FA44 +4A7C +7A00 +4AEE +7AAA +42AA +52AA +4AEE +5A00 +6BFE +4000 +ENDCHAR +STARTCHAR uni9948 +ENCODING 39240 +BBX 15 16 0 -2 +BITMAP +1084 +1048 +29FE +2410 +52FC +FC20 +45FE +7C40 +447C +7CA4 +4124 +50FC +4844 +5444 +65FE +4000 +ENDCHAR +STARTCHAR uni9949 +ENCODING 39241 +BBX 15 15 1 -1 +BITMAP +1088 +2BFE +2488 +5AF8 +8020 +7DFC +4524 +7D24 +45FC +7C20 +41FC +7C20 +41FC +7C20 +43FE +ENDCHAR +STARTCHAR uni994A +ENCODING 39242 +BBX 15 16 0 -2 +BITMAP +1148 +1148 +2BE8 +2550 +515E +FBE4 +4814 +7BD4 +4A54 +7BD4 +4254 +53C8 +4A48 +5A54 +6A54 +42E2 +ENDCHAR +STARTCHAR uni994B +ENCODING 39243 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FC +5924 +81FC +7C20 +47FE +7D04 +45FC +7D04 +41FC +7D04 +41FC +7C88 +4306 +ENDCHAR +STARTCHAR uni994C +ENCODING 39244 +BBX 15 15 1 -1 +BITMAP +1000 +2BDC +2444 +5BDC +8210 +7E52 +45CE +7C88 +45FC +7C88 +4088 +7BFE +4000 +7C88 +4306 +ENDCHAR +STARTCHAR uni994D +ENCODING 39245 +BBX 15 15 1 -1 +BITMAP +1104 +2888 +27FE +5820 +41FC +FC20 +47FE +7D24 +44A8 +7FFE +4000 +7DFC +4104 +7D04 +41FC +ENDCHAR +STARTCHAR uni994E +ENCODING 39246 +BBX 15 15 1 -1 +BITMAP +1020 +2BFE +2420 +59FC +4000 +FDFC +4504 +7DFC +4488 +7FFE +4000 +7DFC +4104 +7D04 +41FC +ENDCHAR +STARTCHAR uni994F +ENCODING 39247 +BBX 15 16 0 -2 +BITMAP +3C20 +043E +FF44 +22A8 +3E10 +2328 +7E44 +0380 +0660 +1FF8 +E816 +0FF0 +0810 +0FF4 +0868 +0C1C +ENDCHAR +STARTCHAR uni9950 +ENCODING 39248 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +5820 +81FC +7800 +4BFE +7A02 +48F8 +7800 +41FC +7904 +41FC +7888 +47FE +ENDCHAR +STARTCHAR uni9951 +ENCODING 39249 +BBX 15 15 1 -1 +BITMAP +1148 +2948 +2650 +5AF4 +8148 +7A50 +4AD4 +7F7A +4844 +7BFE +4240 +7A44 +4328 +7C9A +4464 +ENDCHAR +STARTCHAR uni9952 +ENCODING 39250 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +24F8 +5820 +83FE +7D08 +47DE +7D08 +45C8 +7F1E +4000 +7BFE +4050 +7C92 +410E +ENDCHAR +STARTCHAR uni9953 +ENCODING 39251 +BBX 15 16 0 -2 +BITMAP +1020 +1124 +28A8 +27FE +5202 +FCF8 +4488 +7C88 +44F8 +7C20 +43FE +5070 +48A8 +5524 +6622 +4020 +ENDCHAR +STARTCHAR uni9954 +ENCODING 39252 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +10A0 +25FE +7B20 +15FC +7920 +11FE +E660 +1FF8 +E816 +0FF0 +0810 +0FF4 +0868 +0C1C +ENDCHAR +STARTCHAR uni9955 +ENCODING 39253 +BBX 15 15 1 -1 +BITMAP +0020 +7C3C +4420 +7DFE +0122 +FFFC +2122 +393E +0BA8 +1D6E +3FF8 +D016 +1FF0 +1044 +7E3E +ENDCHAR +STARTCHAR uni9956 +ENCODING 39254 +BBX 15 16 0 -2 +BITMAP +1020 +113C +2920 +27FE +5010 +F814 +4BFE +7A10 +4BF0 +7A54 +4254 +52D4 +4B68 +544A +6896 +4322 +ENDCHAR +STARTCHAR uni9957 +ENCODING 39255 +BBX 15 15 1 -1 +BITMAP +1100 +27DE +CC52 +57D4 +2454 +FFD2 +1492 +27D4 +CC50 +1FF0 +F02E +1FE0 +1208 +11D0 +FE3E +ENDCHAR +STARTCHAR uni9958 +ENCODING 39256 +BBX 15 15 1 -1 +BITMAP +1020 +1820 +27FE +5904 +C174 +7D54 +4574 +7D04 +45FC +7C88 +40F8 +7C88 +40F8 +7C00 +43FE +ENDCHAR +STARTCHAR uni9959 +ENCODING 39257 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +2820 +2488 +53FE +FC88 +45FC +7D04 +45FC +7D04 +41FC +5104 +49FC +5488 +6504 +4202 +ENDCHAR +STARTCHAR uni995A +ENCODING 39258 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +2888 +2420 +53FC +FC20 +47FE +7C40 +4488 +7DFC +4000 +51FC +4954 +5554 +67FE +4000 +ENDCHAR +STARTCHAR uni995B +ENCODING 39259 +BBX 15 16 0 -2 +BITMAP +1088 +13FE +2888 +27FE +5202 +F9FC +4800 +7BFE +4840 +78A2 +4354 +50B8 +4B54 +5892 +6B50 +4020 +ENDCHAR +STARTCHAR uni995C +ENCODING 39260 +BBX 15 14 1 -1 +BITMAP +7FFE +5124 +5F22 +51FE +5F50 +5150 +5F88 +9284 +0542 +3FF0 +C81E +0FF4 +0848 +7E3E +ENDCHAR +STARTCHAR uni995D +ENCODING 39261 +BBX 15 16 0 -2 +BITMAP +1040 +1020 +2BFE +2648 +53FE +FA48 +4AEC +7B5A +4A48 +7BFE +4220 +527C +4AC4 +5344 +647C +4844 +ENDCHAR +STARTCHAR uni995E +ENCODING 39262 +BBX 15 16 0 -2 +BITMAP +11F0 +1210 +2BFC +2604 +53FC +FA24 +4BB8 +7A22 +49FE +7A10 +47FC +5244 +4BFC +58D0 +694A +423E +ENDCHAR +STARTCHAR uni995F +ENCODING 39263 +BBX 15 15 1 -1 +BITMAP +1020 +2BFE +2400 +79DC +4154 +FDDC +4488 +7DFC +4488 +7DFC +4088 +7FFE +4092 +7DAC +40C2 +ENDCHAR +STARTCHAR uni9960 +ENCODING 39264 +BBX 15 15 1 -1 +BITMAP +13FE +2A92 +2692 +5BFE +408A +FD1E +46B4 +7D14 +465E +7FB4 +4094 +79DE +42B4 +7C94 +409E +ENDCHAR +STARTCHAR uni9961 +ENCODING 39265 +BBX 15 16 0 -2 +BITMAP +1528 +17BE +2948 +27BE +5318 +FDAA +4946 +7BFC +4A04 +7BFC +4204 +53FC +4A04 +5BFC +6908 +4204 +ENDCHAR +STARTCHAR uni9962 +ENCODING 39266 +BBX 15 16 0 -2 +BITMAP +1040 +17FC +2A48 +27F8 +5040 +FFFE +4AAA +7BB8 +4910 +7BFC +4110 +57FE +4928 +5310 +6D48 +4186 +ENDCHAR +STARTCHAR uni9963 +ENCODING 39267 +BBX 7 15 0 -1 +BITMAP +20 +20 +20 +3E +44 +48 +80 +10 +10 +10 +10 +12 +14 +18 +10 +ENDCHAR +STARTCHAR uni9964 +ENCODING 39268 +BBX 15 16 0 -2 +BITMAP +2000 +2000 +20FE +3E10 +4410 +4810 +8010 +1010 +1010 +1010 +1010 +1210 +1410 +1810 +1050 +0020 +ENDCHAR +STARTCHAR uni9965 +ENCODING 39269 +BBX 15 16 0 -2 +BITMAP +2000 +21F0 +2110 +3D10 +4510 +4910 +A110 +2110 +2110 +2110 +2110 +2112 +2912 +3212 +220E +0400 +ENDCHAR +STARTCHAR uni9966 +ENCODING 39270 +BBX 15 15 0 -1 +BITMAP +2010 +2078 +23C0 +3C40 +4440 +4840 +8040 +207E +27C0 +2040 +2040 +2442 +2842 +3042 +203E +ENDCHAR +STARTCHAR uni9967 +ENCODING 39271 +BBX 15 16 0 -2 +BITMAP +2000 +21F8 +2010 +3C20 +4440 +4880 +A1FE +2092 +2092 +2092 +2112 +2122 +2A22 +3442 +2094 +0108 +ENDCHAR +STARTCHAR uni9968 +ENCODING 39272 +BBX 15 15 0 -1 +BITMAP +2040 +2040 +2040 +3BFC +4840 +5248 +8248 +2248 +2248 +23F8 +2048 +2040 +2842 +3042 +203E +ENDCHAR +STARTCHAR uni9969 +ENCODING 39273 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +20FC +3D00 +4600 +48F8 +8000 +2000 +21F8 +2008 +2008 +2408 +280A +300A +2006 +0002 +ENDCHAR +STARTCHAR uni996A +ENCODING 39274 +BBX 15 15 0 -1 +BITMAP +2008 +203C +21E0 +3C20 +4420 +4820 +8020 +23FE +2020 +2020 +2020 +2420 +2820 +3020 +21FC +ENDCHAR +STARTCHAR uni996B +ENCODING 39275 +BBX 15 16 0 -2 +BITMAP +2008 +203C +21E0 +3C20 +4420 +4820 +83FE +2020 +2020 +2050 +2050 +2450 +2888 +3088 +2104 +0202 +ENDCHAR +STARTCHAR uni996C +ENCODING 39276 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +2100 +39FE +4A00 +5440 +8040 +23FC +2044 +2044 +2084 +2084 +2904 +3104 +2228 +0410 +ENDCHAR +STARTCHAR uni996D +ENCODING 39277 +BBX 15 16 0 -2 +BITMAP +2008 +201C +21E0 +3D00 +4500 +49FC +A144 +2144 +2144 +2128 +2128 +2110 +2910 +3228 +2244 +0482 +ENDCHAR +STARTCHAR uni996E +ENCODING 39278 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +2040 +3E7C +4484 +4888 +8120 +1020 +1020 +1050 +1050 +1250 +1488 +1888 +1104 +0202 +ENDCHAR +STARTCHAR uni996F +ENCODING 39279 +BBX 15 16 0 -2 +BITMAP +2050 +2048 +2040 +3C5C +45E0 +4840 +A05E +23E0 +2044 +2048 +2030 +2022 +2852 +308A +2306 +0002 +ENDCHAR +STARTCHAR uni9970 +ENCODING 39280 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +2080 +3CFE +4520 +4A20 +8020 +21FC +2124 +2124 +2124 +2524 +2934 +3128 +2020 +0020 +ENDCHAR +STARTCHAR uni9971 +ENCODING 39281 +BBX 15 15 0 -1 +BITMAP +2080 +2080 +21FC +3904 +4A04 +55F4 +8114 +2114 +2114 +21F4 +2104 +2128 +2912 +3102 +20FE +ENDCHAR +STARTCHAR uni9972 +ENCODING 39282 +BBX 14 16 0 -2 +BITMAP +2000 +23FC +2004 +3C04 +47F4 +4804 +A004 +23E4 +2224 +2224 +2224 +23E4 +2804 +3004 +2014 +0008 +ENDCHAR +STARTCHAR uni9973 +ENCODING 39283 +BBX 14 16 0 -2 +BITMAP +2020 +2020 +2124 +3D24 +4524 +4924 +81FC +2020 +2020 +2124 +2124 +2524 +2924 +3124 +21FC +0004 +ENDCHAR +STARTCHAR uni9974 +ENCODING 39284 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2040 +3C88 +4504 +4BFE +8002 +2000 +21FC +2104 +2104 +2504 +2904 +3104 +21FC +0104 +ENDCHAR +STARTCHAR uni9975 +ENCODING 39285 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +2108 +3D08 +4508 +49F8 +A108 +2108 +21F8 +2108 +2108 +211E +2BE8 +3008 +2008 +0008 +ENDCHAR +STARTCHAR uni9976 +ENCODING 39286 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +20BC +3BC0 +4850 +5024 +80D4 +230C +2000 +27FE +2090 +2090 +2912 +3112 +220E +0400 +ENDCHAR +STARTCHAR uni9977 +ENCODING 39287 +BBX 14 16 0 -2 +BITMAP +2040 +2040 +2080 +3BFC +4A04 +5204 +82F4 +2294 +2294 +2294 +2294 +22F4 +2A04 +3204 +2214 +0208 +ENDCHAR +STARTCHAR uni9978 +ENCODING 39288 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2050 +3C88 +4504 +4A02 +81FC +2000 +2000 +21FC +2104 +2504 +2904 +3104 +21FC +0104 +ENDCHAR +STARTCHAR uni9979 +ENCODING 39289 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +20F8 +3908 +4B10 +54A0 +8040 +20A0 +2118 +2206 +25F8 +2108 +2908 +3108 +21F8 +0108 +ENDCHAR +STARTCHAR uni997A +ENCODING 39290 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +2020 +3DFE +4400 +4888 +A104 +2202 +2088 +2088 +2050 +2050 +2820 +3050 +2088 +0306 +ENDCHAR +STARTCHAR uni997B +ENCODING 39291 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +2020 +3BFE +4840 +5040 +80A0 +20A2 +21A4 +2298 +2490 +2088 +2884 +30A2 +20C0 +0080 +ENDCHAR +STARTCHAR uni997C +ENCODING 39292 +BBX 15 16 0 -2 +BITMAP +2104 +2084 +2088 +3800 +4BFE +5088 +8088 +2088 +2088 +27FE +2088 +2088 +2908 +3108 +2208 +0408 +ENDCHAR +STARTCHAR uni997D +ENCODING 39293 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +23FE +3C20 +4420 +4BFE +A202 +2404 +21F8 +2010 +2020 +23FE +2820 +3020 +20A0 +0040 +ENDCHAR +STARTCHAR uni997E +ENCODING 39294 +BBX 15 15 0 -1 +BITMAP +2000 +23FC +2000 +3C00 +45F8 +4908 +8108 +2108 +21F8 +2000 +2108 +2488 +2890 +3000 +27FE +ENDCHAR +STARTCHAR uni997F +ENCODING 39295 +BBX 15 16 0 -2 +BITMAP +2010 +20D8 +2394 +3C94 +4490 +4BFE +A090 +2094 +2094 +20D8 +2398 +2090 +28AA +30CA +2286 +0102 +ENDCHAR +STARTCHAR uni9980 +ENCODING 39296 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +2050 +3C88 +4504 +4AFA +A020 +2020 +23FE +2020 +2128 +2124 +2A22 +3422 +20A0 +0040 +ENDCHAR +STARTCHAR uni9981 +ENCODING 39297 +BBX 15 16 0 -2 +BITMAP +2008 +203C +23C0 +3844 +4A24 +5128 +8100 +2040 +23FE +2088 +2108 +2390 +2860 +3050 +2188 +0604 +ENDCHAR +STARTCHAR uni9982 +ENCODING 39298 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +2088 +3D04 +47FE +4802 +A088 +2144 +2242 +20F8 +2188 +2250 +2820 +3050 +2188 +0606 +ENDCHAR +STARTCHAR uni9983 +ENCODING 39299 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2124 +3D24 +45FC +4924 +8124 +21FC +2020 +23FE +2070 +24A8 +2924 +3222 +2020 +0020 +ENDCHAR +STARTCHAR uni9984 +ENCODING 39300 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2104 +3D04 +45FC +4904 +A104 +21FC +2000 +2112 +21D4 +2118 +2910 +3152 +2192 +010E +ENDCHAR +STARTCHAR uni9985 +ENCODING 39301 +BBX 14 16 0 -2 +BITMAP +2080 +2080 +20F8 +3908 +4A10 +5400 +8040 +239C +2204 +2204 +239C +2204 +2A04 +3204 +23FC +0204 +ENDCHAR +STARTCHAR uni9986 +ENCODING 39302 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +23FE +3A02 +4C04 +51F8 +8108 +2108 +21F8 +2100 +2100 +21FC +2904 +3104 +21FC +0104 +ENDCHAR +STARTCHAR uni9987 +ENCODING 39303 +BBX 15 15 0 -1 +BITMAP +2040 +2040 +27FC +38E0 +4950 +5248 +8446 +23F8 +2208 +23F8 +2208 +23F8 +2A08 +3000 +27FE +ENDCHAR +STARTCHAR uni9988 +ENCODING 39304 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +21FC +3D24 +45FC +4820 +83FE +2000 +21FC +2104 +2124 +2524 +2924 +3050 +2088 +0304 +ENDCHAR +STARTCHAR uni9989 +ENCODING 39305 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +2104 +3DE4 +4524 +4BFE +8202 +21FC +2104 +21FC +2104 +25FC +2904 +3104 +2114 +0108 +ENDCHAR +STARTCHAR uni998A +ENCODING 39306 +BBX 15 16 0 -2 +BITMAP +20A0 +232E +2222 +3E22 +47AE +4A22 +A222 +23FE +2020 +23FE +2104 +2088 +2850 +3020 +20D8 +0706 +ENDCHAR +STARTCHAR uni998B +ENCODING 39307 +BBX 15 16 0 -2 +BITMAP +2100 +21F0 +2210 +3C20 +4BFC +5244 +8244 +23FC +20A0 +2122 +261E +20C0 +2830 +3180 +2060 +0010 +ENDCHAR +STARTCHAR uni998C +ENCODING 39308 +BBX 15 15 0 -1 +BITMAP +2020 +2020 +21FC +3C20 +4420 +4BFE +A080 +2104 +23FE +2002 +23FC +2294 +2A94 +3294 +27FE +ENDCHAR +STARTCHAR uni998D +ENCODING 39309 +BBX 15 16 0 -2 +BITMAP +2110 +2110 +27FC +3910 +4800 +53F8 +8208 +23F8 +2208 +23F8 +2040 +23FC +28A0 +3110 +2208 +0406 +ENDCHAR +STARTCHAR uni998E +ENCODING 39310 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +23FE +3C20 +45FC +4924 +A1FC +2124 +21FC +2124 +2008 +23FE +2888 +3048 +2048 +0018 +ENDCHAR +STARTCHAR uni998F +ENCODING 39311 +BBX 15 16 0 -2 +BITMAP +2040 +23BE +2212 +3A92 +4A52 +52AA +8324 +2040 +23FE +2222 +2222 +23FE +2A22 +3222 +23FE +0202 +ENDCHAR +STARTCHAR uni9990 +ENCODING 39312 +BBX 15 15 0 -1 +BITMAP +2208 +2110 +27FC +3840 +4BF8 +5080 +87FC +2100 +23F8 +2488 +2888 +23F8 +2908 +3108 +27FE +ENDCHAR +STARTCHAR uni9991 +ENCODING 39313 +BBX 15 15 0 -1 +BITMAP +2088 +2088 +23FE +3C88 +44F8 +4820 +A1FC +2124 +21FC +2020 +23FE +2020 +29FC +3020 +23FE +ENDCHAR +STARTCHAR uni9992 +ENCODING 39314 +BBX 15 16 0 -2 +BITMAP +23F8 +2208 +23F8 +3A08 +4BF8 +5000 +87FC +24A4 +24A4 +27FC +2000 +23F8 +2910 +30E0 +2318 +0C06 +ENDCHAR +STARTCHAR uni9993 +ENCODING 39315 +BBX 15 16 0 -2 +BITMAP +2288 +2288 +27C8 +3A90 +4A9E +57D4 +8024 +27D4 +2454 +27D4 +2454 +27C8 +2C48 +3454 +2464 +04C2 +ENDCHAR +STARTCHAR uni9994 +ENCODING 39316 +BBX 15 16 0 -2 +BITMAP +2000 +23DE +2252 +3BDE +4A10 +5252 +81CE +2000 +2088 +23FE +2088 +2088 +2BFE +3088 +2104 +0202 +ENDCHAR +STARTCHAR uni9995 +ENCODING 39317 +BBX 15 16 0 -2 +BITMAP +2040 +27FC +2248 +3BF8 +4840 +5FFE +8AAA +23B8 +2110 +27FC +2110 +2FFE +2928 +3310 +2D48 +0186 +ENDCHAR +STARTCHAR uni9996 +ENCODING 39318 +BBX 13 15 2 -1 +BITMAP +2020 +1020 +1040 +FFF8 +0200 +3FE0 +2020 +2020 +3FE0 +2020 +2020 +3FE0 +2020 +2020 +3FE0 +ENDCHAR +STARTCHAR uni9997 +ENCODING 39319 +BBX 15 15 1 -1 +BITMAP +2108 +2090 +23FC +2040 +FDF8 +2508 +25F8 +2508 +2508 +25F8 +2508 +4508 +45F8 +4202 +81FE +ENDCHAR +STARTCHAR uni9998 +ENCODING 39320 +BBX 15 15 1 -1 +BITMAP +4414 +2412 +2810 +FDFE +1010 +7C10 +45D2 +7D52 +4554 +4554 +7DC8 +4408 +45DA +7C6A +0384 +ENDCHAR +STARTCHAR uni9999 +ENCODING 39321 +BBX 15 15 1 -1 +BITMAP +0070 +3F80 +0100 +0100 +FFFE +0540 +0920 +3118 +C106 +1FF0 +1010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni999A +ENCODING 39322 +BBX 15 16 0 -2 +BITMAP +0410 +7850 +1050 +FE50 +1088 +3888 +5504 +92FA +7C48 +4448 +4448 +7C48 +4488 +4488 +7D28 +4610 +ENDCHAR +STARTCHAR uni999B +ENCODING 39323 +BBX 15 16 0 -2 +BITMAP +0450 +7848 +1048 +FE40 +11FE +3840 +5440 +907C +7CA4 +44A4 +44A8 +7D28 +4510 +4628 +7C44 +4482 +ENDCHAR +STARTCHAR uni999C +ENCODING 39324 +BBX 15 16 0 -2 +BITMAP +0400 +78FC +1084 +FE84 +1084 +38FC +5480 +90A0 +7CA4 +44A8 +44B0 +7CA0 +44A2 +4522 +7D1E +4600 +ENDCHAR +STARTCHAR uni999D +ENCODING 39325 +BBX 15 16 0 -2 +BITMAP +0440 +7820 +1028 +FE08 +1008 +3848 +5454 +9152 +7D52 +4560 +4660 +7C44 +44C4 +4544 +7E3C +4400 +ENDCHAR +STARTCHAR uni999E +ENCODING 39326 +BBX 15 15 1 -1 +BITMAP +0C20 +7020 +11FE +FE20 +1020 +39FE +3502 +50FC +FC08 +4410 +45FE +7C10 +4410 +4410 +7C70 +ENDCHAR +STARTCHAR uni999F +ENCODING 39327 +BBX 15 16 0 -2 +BITMAP +0408 +783C +11C0 +FE04 +1144 +38A8 +5400 +91F8 +7C10 +4420 +47FE +7C20 +4420 +4420 +7CA0 +4440 +ENDCHAR +STARTCHAR uni99A0 +ENCODING 39328 +BBX 15 16 0 -2 +BITMAP +0420 +7820 +1050 +FE88 +1144 +3A22 +54F8 +9008 +7C10 +4420 +45FC +7D04 +4504 +4504 +7DFC +4504 +ENDCHAR +STARTCHAR uni99A1 +ENCODING 39329 +BBX 15 16 0 -2 +BITMAP +0448 +7848 +1048 +FDCE +1048 +3848 +5448 +91CE +7C48 +4448 +4448 +7DCE +4448 +4448 +7C48 +4448 +ENDCHAR +STARTCHAR uni99A2 +ENCODING 39330 +BBX 15 16 0 -2 +BITMAP +0448 +7844 +105E +FDE0 +1028 +3812 +546A +9196 +7C48 +445E +45E0 +7C24 +4428 +4412 +7C6A +4586 +ENDCHAR +STARTCHAR uni99A3 +ENCODING 39331 +BBX 15 15 1 -1 +BITMAP +0C40 +7040 +13FC +FC90 +1148 +39F8 +574C +9548 +7DF8 +4548 +4548 +7D48 +45FA +4442 +7C3E +ENDCHAR +STARTCHAR uni99A4 +ENCODING 39332 +BBX 15 16 0 -2 +BITMAP +0400 +79FC +1104 +FDFC +1104 +39FC +5480 +91FE +7E22 +4522 +4552 +7D02 +45FA +4402 +7C14 +4408 +ENDCHAR +STARTCHAR uni99A5 +ENCODING 39333 +BBX 15 15 1 -1 +BITMAP +0C80 +7080 +11FE +FE00 +10F8 +3888 +54F8 +9288 +7CF8 +4440 +4478 +7C88 +4590 +4470 +7F8E +ENDCHAR +STARTCHAR uni99A6 +ENCODING 39334 +BBX 15 15 1 -1 +BITMAP +0C24 +7048 +11FE +FE50 +10FC +3854 +55FE +9254 +7C54 +44FC +4450 +7CD8 +4554 +4652 +7C50 +ENDCHAR +STARTCHAR uni99A7 +ENCODING 39335 +BBX 15 16 0 -2 +BITMAP +0400 +78F8 +1088 +FE88 +10F8 +3888 +5488 +90F8 +7C00 +45FC +4554 +7D54 +4554 +4554 +7FFE +4400 +ENDCHAR +STARTCHAR uni99A8 +ENCODING 39336 +BBX 15 15 1 -1 +BITMAP +1078 +FE4A +10C6 +7C7C +5424 +7C18 +87E6 +0100 +FFFE +0920 +3FF8 +D016 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni99A9 +ENCODING 39337 +BBX 15 16 0 -2 +BITMAP +0420 +79FC +1020 +FC88 +13FE +3888 +55FC +9104 +7DFC +4504 +45FC +7D04 +45FC +4488 +7D04 +4602 +ENDCHAR +STARTCHAR uni99AA +ENCODING 39338 +BBX 15 16 0 -2 +BITMAP +0420 +7810 +11FE +FF02 +10FC +38A8 +5530 +90FC +7D84 +44FC +4484 +7CFC +4484 +44FC +7C48 +4484 +ENDCHAR +STARTCHAR uni99AB +ENCODING 39339 +BBX 15 16 0 -2 +BITMAP +1FE0 +0100 +7FFC +0920 +3FF8 +C826 +0FE0 +0824 +7FF8 +1010 +FEFE +5454 +9292 +7C7C +4444 +7C7C +ENDCHAR +STARTCHAR uni99AC +ENCODING 39340 +BBX 15 14 1 -1 +BITMAP +1FFC +1080 +1080 +1FF8 +1080 +1080 +1FF8 +1080 +1080 +1FFE +0002 +4922 +8492 +800C +ENDCHAR +STARTCHAR uni99AD +ENCODING 39341 +BBX 15 14 1 -1 +BITMAP +7EFE +4842 +4842 +7E42 +4844 +4824 +7E28 +4828 +4810 +7F10 +0128 +AB28 +A944 +8382 +ENDCHAR +STARTCHAR uni99AE +ENCODING 39342 +BBX 15 14 1 -1 +BITMAP +07FC +4440 +2440 +17F8 +0440 +0440 +07F8 +0440 +1440 +27FE +4002 +8AA2 +0A92 +1006 +ENDCHAR +STARTCHAR uni99AF +ENCODING 39343 +BBX 15 15 0 -2 +BITMAP +7F7C +4810 +7F10 +4810 +7F10 +4810 +487E +7F90 +0090 +AA90 +AA90 +AA90 +8090 +0510 +0210 +ENDCHAR +STARTCHAR uni99B0 +ENCODING 39344 +BBX 14 16 0 -2 +BITMAP +0010 +7F10 +4810 +7F3C +4824 +7F44 +4804 +4824 +7F94 +0094 +AA84 +AA84 +AA84 +8084 +0528 +0210 +ENDCHAR +STARTCHAR uni99B1 +ENCODING 39345 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +4810 +7F10 +487E +7F10 +4810 +4810 +7F90 +00A8 +AAA8 +AAA8 +AAA8 +80C4 +0544 +0282 +ENDCHAR +STARTCHAR uni99B2 +ENCODING 39346 +BBX 15 16 0 -2 +BITMAP +0008 +7F1C +4870 +7F10 +4810 +7F10 +4810 +481E +7FF0 +0090 +AA90 +AA92 +AA92 +8092 +050E +0200 +ENDCHAR +STARTCHAR uni99B3 +ENCODING 39347 +BBX 15 15 1 -1 +BITMAP +0020 +7EA0 +48A0 +48A0 +7CBC +48E4 +49A4 +7CA4 +48A4 +48AC +7EA0 +02A0 +AA82 +AA82 +847E +ENDCHAR +STARTCHAR uni99B4 +ENCODING 39348 +BBX 14 15 1 -1 +BITMAP +0004 +7E84 +48A4 +48A4 +7CA4 +48A4 +48A4 +7CA4 +48A4 +48A4 +7EA4 +02A4 +AAA4 +AB04 +8504 +ENDCHAR +STARTCHAR uni99B5 +ENCODING 39349 +BBX 15 16 0 -2 +BITMAP +3FF8 +2100 +3FF0 +2100 +3FF0 +2100 +3FFC +4924 +8494 +0828 +0820 +FFFE +0820 +1020 +2020 +4020 +ENDCHAR +STARTCHAR uni99B6 +ENCODING 39350 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +4810 +7EFE +4810 +7E10 +48FC +4844 +7E44 +0244 +AA28 +AA28 +AA10 +8228 +1444 +0882 +ENDCHAR +STARTCHAR uni99B7 +ENCODING 39351 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4808 +7F3E +4808 +7F08 +483E +482A +7FAA +00AA +AAAA +AAAA +AAAE +8088 +0508 +0208 +ENDCHAR +STARTCHAR uni99B8 +ENCODING 39352 +BBX 15 15 0 -2 +BITMAP +7F0C +4830 +7F20 +4820 +7F20 +483E +4824 +7FA4 +00A4 +AAA4 +AAA4 +AAA4 +80A4 +0544 +0284 +ENDCHAR +STARTCHAR uni99B9 +ENCODING 39353 +BBX 14 14 1 -1 +BITMAP +7EFC +4884 +4884 +7E84 +4884 +4884 +7EFC +4884 +4884 +7E84 +0284 +AA84 +AA84 +84FC +ENDCHAR +STARTCHAR uni99BA +ENCODING 39354 +BBX 15 15 0 -2 +BITMAP +7EFC +4844 +7E48 +4848 +7E50 +485C +4844 +7E44 +0244 +AA68 +AAA8 +AA90 +8298 +1524 +0842 +ENDCHAR +STARTCHAR uni99BB +ENCODING 39355 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +4820 +7F28 +4844 +7F7C +4804 +4828 +7FA8 +00A8 +AAA8 +AAA8 +AAAA +80CA +0546 +0280 +ENDCHAR +STARTCHAR uni99BC +ENCODING 39356 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +4810 +48FE +7E44 +4844 +4844 +7E44 +4828 +4828 +7F10 +0110 +AB28 +A944 +8382 +ENDCHAR +STARTCHAR uni99BD +ENCODING 39357 +BBX 14 15 1 -1 +BITMAP +3FF8 +2100 +3FF0 +2100 +3FF0 +2100 +3FFC +5244 +892C +0100 +7FFC +4104 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni99BE +ENCODING 39358 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +4810 +7E10 +48FE +7E92 +4892 +4810 +7E28 +0228 +AA28 +AA28 +AA48 +824A +148A +0906 +ENDCHAR +STARTCHAR uni99BF +ENCODING 39359 +BBX 15 15 1 -1 +BITMAP +0006 +7F78 +4840 +4840 +7E7E +4842 +4842 +7E42 +487E +4840 +7F40 +0140 +AB40 +A940 +8280 +ENDCHAR +STARTCHAR uni99C0 +ENCODING 39360 +BBX 15 16 0 -2 +BITMAP +0048 +7E44 +4844 +7E40 +49FE +7E50 +4850 +4850 +7E50 +0250 +AA50 +AA52 +AA52 +8292 +148E +0900 +ENDCHAR +STARTCHAR uni99C1 +ENCODING 39361 +BBX 15 14 1 -1 +BITMAP +7E88 +4850 +4820 +7C50 +4888 +4904 +7C00 +4844 +4848 +7F28 +0110 +AB28 +A944 +8682 +ENDCHAR +STARTCHAR uni99C2 +ENCODING 39362 +BBX 15 16 0 -2 +BITMAP +4000 +49FC +5120 +6120 +45FC +4520 +3DFC +1120 +1120 +11FE +FC02 +12AA +12AA +1202 +1014 +1008 +ENDCHAR +STARTCHAR uni99C3 +ENCODING 39363 +BBX 15 15 1 -1 +BITMAP +0020 +7E20 +4820 +48FC +7C24 +4824 +4824 +7C24 +49FE +4850 +7E50 +0248 +AA88 +AA84 +8502 +ENDCHAR +STARTCHAR uni99C4 +ENCODING 39364 +BBX 15 15 1 -1 +BITMAP +0020 +7E20 +4820 +49FE +7E20 +4820 +4820 +7E50 +4850 +4850 +7E88 +02C8 +AB24 +AB24 +8602 +ENDCHAR +STARTCHAR uni99C5 +ENCODING 39365 +BBX 15 14 1 -1 +BITMAP +7EFC +4884 +4884 +7C84 +4884 +48FC +7C90 +4890 +4890 +7E90 +0288 +AB08 +AB04 +8602 +ENDCHAR +STARTCHAR uni99C6 +ENCODING 39366 +BBX 15 14 1 -1 +BITMAP +7EFC +4880 +4884 +7E84 +4884 +48A4 +7E98 +4888 +4894 +7E92 +02A0 +AAC0 +AA80 +84FE +ENDCHAR +STARTCHAR uni99C7 +ENCODING 39367 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +4810 +7F20 +483E +7F44 +48A4 +4824 +7FA8 +00A8 +AA90 +AA90 +AAA8 +80A8 +0544 +0282 +ENDCHAR +STARTCHAR uni99C8 +ENCODING 39368 +BBX 15 15 1 -1 +BITMAP +000C +7F70 +4840 +4840 +7E40 +487E +4848 +7E48 +4848 +4848 +7F48 +0148 +AB48 +A948 +86FE +ENDCHAR +STARTCHAR uni99C9 +ENCODING 39369 +BBX 15 14 1 -1 +BITMAP +7EFE +4882 +4882 +7E82 +48BA +48AA +7EAA +48AA +48AA +7EBA +0282 +AA82 +AA82 +848E +ENDCHAR +STARTCHAR uni99CA +ENCODING 39370 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +4810 +7EFE +4892 +7E94 +4890 +48FC +7EA4 +02A4 +AAA8 +AAA8 +AA90 +8328 +1544 +0A82 +ENDCHAR +STARTCHAR uni99CB +ENCODING 39371 +BBX 15 15 0 -2 +BITMAP +7F7E +4812 +7F12 +4812 +7F22 +482A +4844 +7F80 +00BE +AAA2 +AAA2 +AAA2 +80A2 +053E +0222 +ENDCHAR +STARTCHAR uni99CC +ENCODING 39372 +BBX 15 16 0 -2 +BITMAP +1000 +3EF8 +4288 +A2AA +1492 +187E +E000 +1FF0 +1100 +1FF0 +1100 +1FF0 +1100 +1FFC +2A44 +492C +ENDCHAR +STARTCHAR uni99CD +ENCODING 39373 +BBX 15 15 0 -2 +BITMAP +7F7C +4810 +7F10 +4854 +7F34 +4838 +4810 +7FFE +0090 +AA90 +AA90 +AA90 +8090 +0510 +0210 +ENDCHAR +STARTCHAR uni99CE +ENCODING 39374 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4808 +7F08 +483E +7F2A +482A +482A +7FAA +00BE +AAAA +AAAA +AAAA +80AA +053E +0222 +ENDCHAR +STARTCHAR uni99CF +ENCODING 39375 +BBX 15 15 0 -2 +BITMAP +7F3E +4820 +7F20 +4820 +7F3E +4822 +4822 +7FA2 +00A2 +AABE +AAA0 +AAA0 +80A0 +053E +0200 +ENDCHAR +STARTCHAR uni99D0 +ENCODING 39376 +BBX 15 15 1 -1 +BITMAP +0020 +7F10 +4810 +48FE +7E10 +4810 +4810 +7E10 +48FE +4810 +7F10 +0110 +AB10 +A910 +86FE +ENDCHAR +STARTCHAR uni99D1 +ENCODING 39377 +BBX 15 15 1 -1 +BITMAP +0800 +08FC +FF44 +1144 +2228 +7C10 +0A28 +3146 +FFF8 +2080 +3FF0 +2080 +3FFC +4924 +849C +ENDCHAR +STARTCHAR uni99D2 +ENCODING 39378 +BBX 15 15 1 -1 +BITMAP +0040 +7E40 +487E +4882 +7E82 +497A +484A +7E4A +484A +484A +7F7A +0102 +AB04 +A904 +8618 +ENDCHAR +STARTCHAR uni99D3 +ENCODING 39379 +BBX 15 15 0 -2 +BITMAP +7F3E +4808 +7F08 +4808 +7F18 +481C +482A +7FAA +00CA +AA88 +AA88 +AA88 +8080 +053E +0200 +ENDCHAR +STARTCHAR uni99D4 +ENCODING 39380 +BBX 15 14 1 -1 +BITMAP +7F7C +4844 +4844 +7E44 +487C +4844 +7E44 +4844 +487C +7F44 +0144 +AB44 +A944 +82FE +ENDCHAR +STARTCHAR uni99D5 +ENCODING 39381 +BBX 14 15 1 -1 +BITMAP +2000 +FEFC +2284 +2284 +4284 +BFFC +2100 +3FF0 +2100 +3FF0 +2100 +3FFC +4924 +4484 +8018 +ENDCHAR +STARTCHAR uni99D6 +ENCODING 39382 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +4828 +7F28 +4844 +7F92 +4808 +4800 +7FBC +0084 +AA88 +AAA8 +AA90 +8088 +0504 +0200 +ENDCHAR +STARTCHAR uni99D7 +ENCODING 39383 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +4828 +7F28 +4844 +7F92 +4820 +4840 +7F88 +0090 +AAA0 +AA84 +AA88 +8090 +0520 +0240 +ENDCHAR +STARTCHAR uni99D8 +ENCODING 39384 +BBX 15 15 1 -1 +BITMAP +0020 +7F20 +4828 +4824 +7E44 +485A +48E2 +7E00 +487C +4844 +7F44 +0144 +AB44 +A944 +827C +ENDCHAR +STARTCHAR uni99D9 +ENCODING 39385 +BBX 15 15 1 -1 +BITMAP +0044 +7E44 +5044 +5084 +7CBE +5184 +5284 +7CA4 +5094 +5094 +7E84 +0284 +AA84 +AA84 +849C +ENDCHAR +STARTCHAR uni99DA +ENCODING 39386 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +5020 +7DFC +5124 +7D24 +5124 +5124 +7D24 +07FE +5420 +5450 +5450 +8488 +1504 +0A02 +ENDCHAR +STARTCHAR uni99DB +ENCODING 39387 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +4810 +48FE +7E92 +4892 +4892 +7EFE +4810 +4810 +7F50 +0130 +AB10 +A928 +82C6 +ENDCHAR +STARTCHAR uni99DC +ENCODING 39388 +BBX 15 16 0 -2 +BITMAP +0010 +7E08 +4808 +7E02 +4822 +7E24 +4824 +48A8 +7EAC +02B2 +AB32 +AA20 +AA62 +82A2 +151E +0800 +ENDCHAR +STARTCHAR uni99DD +ENCODING 39389 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +4810 +48FE +7E82 +4882 +4840 +7E40 +484C +4870 +7F40 +0140 +AB42 +A942 +823E +ENDCHAR +STARTCHAR uni99DE +ENCODING 39390 +BBX 15 15 1 -1 +BITMAP +0040 +7E40 +4840 +48FE +7E80 +4910 +4890 +7E9E +48F2 +4992 +7E96 +0290 +AA80 +AA82 +847E +ENDCHAR +STARTCHAR uni99DF +ENCODING 39391 +BBX 15 14 1 -1 +BITMAP +7E00 +48FE +48AA +7EAA +48AA +48AA +7EAA +48AA +48CE +7E82 +0282 +AA82 +AAFE +8600 +ENDCHAR +STARTCHAR uni99E0 +ENCODING 39392 +BBX 15 15 0 -2 +BITMAP +7E20 +48CE +7EAA +48AA +7EAA +48AA +48AA +7EAA +02AA +AAEA +AAAC +AA28 +8248 +1448 +0888 +ENDCHAR +STARTCHAR uni99E1 +ENCODING 39393 +BBX 13 15 1 -2 +BITMAP +7DF0 +4510 +7DF0 +0000 +3FF0 +2200 +3FE0 +2200 +3FE0 +2200 +3FF8 +0008 +5248 +8928 +0010 +ENDCHAR +STARTCHAR uni99E2 +ENCODING 39394 +BBX 15 15 1 -1 +BITMAP +0084 +7E44 +4848 +49FE +7C48 +4848 +4848 +7DFE +4848 +4848 +7F48 +0148 +AB48 +A948 +8388 +ENDCHAR +STARTCHAR uni99E3 +ENCODING 39395 +BBX 15 16 0 -2 +BITMAP +0050 +7E50 +4850 +7F52 +48D4 +7E58 +4850 +4858 +7ED4 +0352 +AA50 +AA50 +AA92 +8292 +1512 +0A0E +ENDCHAR +STARTCHAR uni99E4 +ENCODING 39396 +BBX 15 15 0 -2 +BITMAP +7F7E +4810 +7F10 +4824 +7F22 +487E +480A +7F88 +0088 +AABE +AA88 +AA88 +8088 +057E +0200 +ENDCHAR +STARTCHAR uni99E5 +ENCODING 39397 +BBX 15 16 0 -2 +BITMAP +0014 +7E12 +4812 +7E10 +48FE +7E10 +4852 +4852 +7E52 +02F4 +AA54 +AA54 +AA8A +828A +1516 +0822 +ENDCHAR +STARTCHAR uni99E6 +ENCODING 39398 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +7FFC +0200 +FFFE +0820 +3018 +DFF6 +1100 +1FF0 +1100 +1FF0 +1100 +1FFC +2A44 +492C +ENDCHAR +STARTCHAR uni99E7 +ENCODING 39399 +BBX 15 15 0 -2 +BITMAP +7EFE +4882 +7E82 +48BA +7E82 +4882 +48BA +7EAA +02AA +AAAA +AABA +AA82 +8282 +148A +0884 +ENDCHAR +STARTCHAR uni99E8 +ENCODING 39400 +BBX 15 16 0 -2 +BITMAP +0010 +7F10 +4810 +7F3E +4822 +7F42 +483A +482A +7FAA +00BA +AAAA +AAAA +AABA +8082 +0514 +0208 +ENDCHAR +STARTCHAR uni99E9 +ENCODING 39401 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4814 +7F14 +4822 +7F40 +483E +4808 +7F88 +0088 +AABE +AA88 +AA88 +8088 +057E +0200 +ENDCHAR +STARTCHAR uni99EA +ENCODING 39402 +BBX 15 16 0 -2 +BITMAP +0010 +7E50 +4850 +7E7C +4890 +7E10 +4810 +48FE +7E28 +0228 +AA28 +AA28 +AA4A +824A +1486 +0900 +ENDCHAR +STARTCHAR uni99EB +ENCODING 39403 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +4924 +7EA4 +48A8 +7E20 +49FE +4850 +7E50 +0250 +AA50 +AA52 +AA52 +8292 +148E +0900 +ENDCHAR +STARTCHAR uni99EC +ENCODING 39404 +BBX 15 15 0 -2 +BITMAP +7F7E +4824 +7F24 +4824 +7F3C +4824 +4824 +7FBC +00A4 +AAA4 +AAAE +AAF4 +8084 +0504 +0204 +ENDCHAR +STARTCHAR uni99ED +ENCODING 39405 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +4810 +48FE +7E20 +4844 +4888 +7E68 +4810 +4822 +7F44 +0108 +AB18 +A924 +83C2 +ENDCHAR +STARTCHAR uni99EE +ENCODING 39406 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +4810 +48FE +7E28 +4844 +4882 +7E44 +4844 +4828 +7F28 +0110 +AB28 +A944 +8282 +ENDCHAR +STARTCHAR uni99EF +ENCODING 39407 +BBX 15 16 0 -2 +BITMAP +0010 +7E50 +4850 +7E7C +4890 +7E10 +4810 +48FE +7E10 +0238 +AA38 +AA54 +AA54 +8292 +1410 +0810 +ENDCHAR +STARTCHAR uni99F0 +ENCODING 39408 +BBX 15 14 1 -1 +BITMAP +7EFE +4882 +4892 +7E92 +48FE +4892 +7E92 +4892 +48AA +7EAA +02C6 +AA82 +AA82 +84FE +ENDCHAR +STARTCHAR uni99F1 +ENCODING 39409 +BBX 15 15 1 -1 +BITMAP +0020 +7F20 +487C +4844 +7EC4 +4828 +4810 +7E28 +4844 +4882 +7F7C +0144 +AB44 +A944 +837C +ENDCHAR +STARTCHAR uni99F2 +ENCODING 39410 +BBX 15 15 1 -1 +BITMAP +0002 +7E92 +4892 +4892 +7E92 +4892 +49B6 +7EDA +4892 +4892 +7E92 +0292 +AA92 +AA82 +8702 +ENDCHAR +STARTCHAR uni99F3 +ENCODING 39411 +BBX 15 16 0 -2 +BITMAP +0004 +F80E +A3B8 +F888 +A088 +F928 +A12E +A3A8 +F8A8 +0AA8 +AAA8 +A93E +A900 +8A80 +0C7E +3800 +ENDCHAR +STARTCHAR uni99F4 +ENCODING 39412 +BBX 15 16 0 -2 +BITMAP +0010 +F814 +A012 +F810 +A3FE +F810 +A150 +A154 +FFF4 +0954 +A954 +A948 +AA4A +8A5A +0C26 +3042 +ENDCHAR +STARTCHAR uni99F5 +ENCODING 39413 +BBX 15 15 0 -2 +BITMAP +7EFE +4828 +7E28 +4828 +7EEE +48AA +48AA +7EAA +02AA +AAEE +AA28 +AA28 +8228 +1448 +0888 +ENDCHAR +STARTCHAR uni99F6 +ENCODING 39414 +BBX 15 15 0 -2 +BITMAP +7EFC +4884 +7E84 +48FC +7E80 +48FE +4882 +7EBA +02AA +AAAA +AABA +AA82 +8282 +1494 +0908 +ENDCHAR +STARTCHAR uni99F7 +ENCODING 39415 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +48FE +7E10 +4810 +7EFE +4892 +4892 +7EFE +0210 +AA38 +AA54 +AA92 +8310 +1410 +0810 +ENDCHAR +STARTCHAR uni99F8 +ENCODING 39416 +BBX 15 14 1 -1 +BITMAP +7EFC +4804 +49FE +7C04 +48FC +4800 +7DFE +4902 +48FC +7E84 +0248 +AA30 +AA48 +8786 +ENDCHAR +STARTCHAR uni99F9 +ENCODING 39417 +BBX 15 15 1 -1 +BITMAP +0050 +7E48 +4848 +49FE +7C44 +4848 +4852 +7E44 +4868 +48A0 +7EA2 +02A4 +AAA8 +AAA2 +851E +ENDCHAR +STARTCHAR uni99FA +ENCODING 39418 +BBX 15 16 0 -2 +BITMAP +0020 +7E10 +48FC +7E84 +4884 +7EFC +4884 +4884 +7EFC +02A2 +AAA4 +AA98 +AA90 +8288 +14C4 +0882 +ENDCHAR +STARTCHAR uni99FB +ENCODING 39419 +BBX 15 14 1 -1 +BITMAP +7F7C +4844 +487C +7E44 +4844 +487C +7E00 +487C +4810 +7F10 +01FE +AB10 +A910 +8310 +ENDCHAR +STARTCHAR uni99FC +ENCODING 39420 +BBX 15 15 1 -1 +BITMAP +0020 +7E20 +4850 +4888 +7F04 +48FA +4820 +7E20 +49FE +4820 +7EA8 +02A8 +AAA4 +AB24 +8460 +ENDCHAR +STARTCHAR uni99FD +ENCODING 39421 +BBX 15 15 0 -2 +BITMAP +7F3E +4822 +7F22 +483E +7F00 +483E +4822 +7FA2 +00BE +AAA2 +AABE +AAA2 +80A2 +052A +0224 +ENDCHAR +STARTCHAR uni99FE +ENCODING 39422 +BBX 15 16 0 -2 +BITMAP +0084 +7E44 +4848 +7E00 +48FC +7E84 +4884 +4884 +7EFC +0248 +AA48 +AA48 +AA48 +828A +148A +0906 +ENDCHAR +STARTCHAR uni99FF +ENCODING 39423 +BBX 15 15 1 -1 +BITMAP +0040 +7E48 +489C +49F2 +7C50 +4850 +489E +7D40 +487C +4844 +7FA8 +0128 +AB10 +A938 +86C6 +ENDCHAR +STARTCHAR uni9A00 +ENCODING 39424 +BBX 15 16 0 -2 +BITMAP +0010 +F8D8 +A394 +F894 +A090 +FBFE +A090 +A094 +F894 +08D8 +AB98 +A890 +A8AA +88CA +0A86 +3102 +ENDCHAR +STARTCHAR uni9A01 +ENCODING 39425 +BBX 15 15 1 -1 +BITMAP +0010 +7E10 +48FE +4892 +7CFE +4892 +48FE +7C00 +48FE +4820 +7F3C +0144 +AB04 +A904 +8318 +ENDCHAR +STARTCHAR uni9A02 +ENCODING 39426 +BBX 15 15 1 -1 +BITMAP +0010 +7E10 +48FE +4800 +7E44 +4824 +4828 +7EFE +4810 +4810 +7FFE +0090 +AA90 +A890 +8110 +ENDCHAR +STARTCHAR uni9A03 +ENCODING 39427 +BBX 15 15 1 -1 +BITMAP +0020 +7F28 +4848 +485C +7EE2 +4820 +4820 +7E7C +4890 +4810 +7FFE +0128 +AB28 +A944 +8382 +ENDCHAR +STARTCHAR uni9A04 +ENCODING 39428 +BBX 15 15 0 -2 +BITMAP +7EFC +4804 +7E04 +487C +7E04 +4804 +48FE +7E10 +0292 +AA54 +AA38 +AA54 +8292 +1450 +0820 +ENDCHAR +STARTCHAR uni9A05 +ENCODING 39429 +BBX 15 15 1 -1 +BITMAP +0048 +7E48 +4850 +48FE +7E90 +4990 +48FC +7E90 +4890 +4890 +7EFC +0290 +AA90 +AA90 +86FE +ENDCHAR +STARTCHAR uni9A06 +ENCODING 39430 +BBX 15 15 0 -2 +BITMAP +7EFE +4892 +7E92 +48BA +7E92 +48FE +4882 +7EBA +02AA +AAAA +AABA +AA82 +8282 +148A +0904 +ENDCHAR +STARTCHAR uni9A07 +ENCODING 39431 +BBX 15 16 0 -2 +BITMAP +0020 +F820 +A050 +F888 +A104 +FAFA +A020 +A020 +FBFE +0820 +A820 +A9FC +A904 +8904 +09FC +3104 +ENDCHAR +STARTCHAR uni9A08 +ENCODING 39432 +BBX 15 16 0 -2 +BITMAP +0022 +7E22 +4844 +7EEE +4844 +7E44 +4844 +4844 +7EEE +0244 +AA44 +AA44 +AA44 +8244 +1444 +0884 +ENDCHAR +STARTCHAR uni9A09 +ENCODING 39433 +BBX 15 15 0 -2 +BITMAP +7EFC +4884 +7E84 +48FC +7E84 +4884 +48FC +7E00 +0290 +AA92 +AAF4 +AA98 +8292 +14D2 +088E +ENDCHAR +STARTCHAR uni9A0A +ENCODING 39434 +BBX 15 15 1 -1 +BITMAP +0080 +7E80 +48FE +4902 +7E82 +48FA +4922 +7E22 +49FA +4822 +7EAA +02AA +AAFC +AA04 +8418 +ENDCHAR +STARTCHAR uni9A0B +ENCODING 39435 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +4810 +7EFE +4810 +7E54 +4854 +4854 +7EBA +0210 +AA38 +AA54 +AA92 +8210 +1410 +0810 +ENDCHAR +STARTCHAR uni9A0C +ENCODING 39436 +BBX 15 16 0 -2 +BITMAP +0020 +7E10 +48FE +7E82 +4800 +7E7C +4800 +4800 +7EFE +0210 +AA10 +AA54 +AA52 +8292 +1450 +0820 +ENDCHAR +STARTCHAR uni9A0D +ENCODING 39437 +BBX 15 15 0 -2 +BITMAP +7E7C +4854 +7E54 +487C +7E54 +4854 +487C +7E10 +02FE +AA10 +AA38 +AA54 +8292 +1410 +0810 +ENDCHAR +STARTCHAR uni9A0E +ENCODING 39438 +BBX 15 15 1 -1 +BITMAP +0020 +7E20 +49FE +4820 +7C50 +4888 +4800 +7DFE +4804 +4874 +7F54 +0154 +AB74 +A904 +861C +ENDCHAR +STARTCHAR uni9A0F +ENCODING 39439 +BBX 15 15 1 -1 +BITMAP +0048 +7F48 +48FC +4848 +7E48 +4878 +4848 +7E48 +4878 +4848 +7F48 +01FE +AB20 +A948 +8386 +ENDCHAR +STARTCHAR uni9A10 +ENCODING 39440 +BBX 15 16 0 -2 +BITMAP +0020 +F820 +A050 +F888 +A144 +FA22 +A1F8 +A008 +F850 +0820 +A8A4 +AA82 +AA8A +8A8A +0C78 +3000 +ENDCHAR +STARTCHAR uni9A11 +ENCODING 39441 +BBX 15 15 1 -1 +BITMAP +0048 +7E48 +4848 +49CE +7C48 +4848 +4848 +7DCE +4848 +4848 +7EC8 +034E +AA48 +AA88 +8508 +ENDCHAR +STARTCHAR uni9A12 +ENCODING 39442 +BBX 15 14 1 -1 +BITMAP +7DFC +4884 +4848 +7C30 +48C8 +4B26 +7DFC +4924 +4924 +7FFC +0220 +AA24 +AA3A +85C2 +ENDCHAR +STARTCHAR uni9A13 +ENCODING 39443 +BBX 15 15 1 -1 +BITMAP +0020 +7E50 +4888 +4904 +7EFA +4820 +49FC +7D24 +4924 +49FC +7E20 +0250 +AA88 +AB04 +8602 +ENDCHAR +STARTCHAR uni9A14 +ENCODING 39444 +BBX 15 15 0 -2 +BITMAP +7EFC +4884 +7EFC +4884 +7EFC +4840 +48FE +7F12 +0292 +AAAA +AA82 +AAFA +8202 +1414 +0808 +ENDCHAR +STARTCHAR uni9A15 +ENCODING 39445 +BBX 15 15 0 -2 +BITMAP +7EFE +4828 +7E28 +48FE +7EAA +48AA +48FE +7E10 +03FE +AA24 +AA44 +AA68 +8218 +1464 +0982 +ENDCHAR +STARTCHAR uni9A16 +ENCODING 39446 +BBX 15 15 1 -1 +BITMAP +FE20 +247E +18C4 +FF28 +3218 +5464 +9FFA +3080 +1FF0 +1080 +1FF0 +1080 +5FFC +4A44 +852C +ENDCHAR +STARTCHAR uni9A17 +ENCODING 39447 +BBX 14 16 0 -2 +BITMAP +1000 +087C +7E50 +427C +4250 +7E7C +4250 +4050 +7F7C +5504 +5554 +7F54 +D554 +5584 +5514 +4308 +ENDCHAR +STARTCHAR uni9A18 +ENCODING 39448 +BBX 15 16 0 -2 +BITMAP +0040 +7E40 +487E +7EAA +496A +7E5A +4896 +4922 +7E4A +0284 +AA20 +AA94 +AB42 +8244 +143C +0800 +ENDCHAR +STARTCHAR uni9A19 +ENCODING 39449 +BBX 15 15 1 -1 +BITMAP +000C +7EF0 +4880 +48FC +7E84 +4884 +48FC +7E80 +48FE +49AA +7EAA +02FE +AAAA +AAAA +8686 +ENDCHAR +STARTCHAR uni9A1A +ENCODING 39450 +BBX 15 15 1 -1 +BITMAP +0084 +7C44 +4848 +49FE +7C00 +49E2 +492A +7DAA +496A +492A +7DAA +056A +AD22 +A522 +8966 +ENDCHAR +STARTCHAR uni9A1B +ENCODING 39451 +BBX 15 15 0 -2 +BITMAP +7DFA +500C +7C4A +5188 +7CAA +50A6 +50A2 +7DF8 +04AA +54AC +54AA +54A8 +852A +1526 +0A22 +ENDCHAR +STARTCHAR uni9A1C +ENCODING 39452 +BBX 15 16 0 -2 +BITMAP +0010 +7E20 +487C +7E44 +487C +7E44 +487C +4800 +7EFE +0210 +AA10 +AA7C +AA10 +8210 +14FE +0800 +ENDCHAR +STARTCHAR uni9A1D +ENCODING 39453 +BBX 15 16 0 -2 +BITMAP +0010 +F810 +A03C +FB94 +A0FE +F894 +A13C +A110 +FBBC +0890 +A8FE +AA90 +A910 +8980 +0A7E +3400 +ENDCHAR +STARTCHAR uni9A1E +ENCODING 39454 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +48FE +7E10 +48FC +7E10 +48FE +4810 +7EFE +0220 +AA40 +AAFC +AB44 +8244 +147C +0844 +ENDCHAR +STARTCHAR uni9A1F +ENCODING 39455 +BBX 15 16 0 -2 +BITMAP +0020 +7C50 +5088 +7D04 +52FA +7C00 +51E2 +512A +7D2A +05EA +552A +552A +55EA +8522 +152A +0964 +ENDCHAR +STARTCHAR uni9A20 +ENCODING 39456 +BBX 15 14 1 -1 +BITMAP +7EFC +4884 +48FC +7E84 +4884 +48FC +7E00 +49FE +4820 +7EA0 +02BC +AAE0 +AAA0 +851E +ENDCHAR +STARTCHAR uni9A21 +ENCODING 39457 +BBX 15 16 0 -2 +BITMAP +0010 +7E20 +48FE +7E82 +48FE +7E82 +48FE +4810 +7E12 +02D4 +AA58 +AA54 +AA94 +8292 +1550 +0820 +ENDCHAR +STARTCHAR uni9A22 +ENCODING 39458 +BBX 15 15 0 -2 +BITMAP +7DDC +5144 +7D44 +5144 +7DDC +5100 +5100 +7DDC +0514 +5514 +55D4 +5508 +8508 +1514 +0922 +ENDCHAR +STARTCHAR uni9A23 +ENCODING 39459 +BBX 15 16 0 -2 +BITMAP +0028 +7E92 +48AA +7E82 +48FE +7E28 +4844 +48A2 +7E3C +0244 +AA44 +AAA8 +AA10 +8228 +1444 +0882 +ENDCHAR +STARTCHAR uni9A24 +ENCODING 39460 +BBX 15 14 1 -1 +BITMAP +7DE4 +4838 +4950 +7C8A +4904 +4A02 +7CF8 +4820 +4820 +7FFC +0220 +AA50 +A288 +8D04 +ENDCHAR +STARTCHAR uni9A25 +ENCODING 39461 +BBX 15 15 0 -2 +BITMAP +7CFC +5048 +7C30 +51FE +7C52 +5094 +5110 +7E30 +0420 +55FE +5470 +54A8 +8524 +1622 +0820 +ENDCHAR +STARTCHAR uni9A26 +ENCODING 39462 +BBX 15 15 0 -2 +BITMAP +7DFC +5124 +7D24 +51FC +7D24 +5124 +51FC +7C20 +0410 +5454 +5542 +5542 +854A +1638 +0800 +ENDCHAR +STARTCHAR uni9A27 +ENCODING 39463 +BBX 15 15 0 -2 +BITMAP +7E7C +4844 +7E44 +4874 +7E54 +4854 +48FE +7E82 +02BA +AAAA +AAAA +AABA +8282 +148A +0884 +ENDCHAR +STARTCHAR uni9A28 +ENCODING 39464 +BBX 15 15 1 -1 +BITMAP +0244 +7D24 +4908 +49FC +7D24 +49FC +4924 +7D24 +49FC +4820 +7E20 +03FE +AA20 +AA20 +8620 +ENDCHAR +STARTCHAR uni9A29 +ENCODING 39465 +BBX 15 16 0 -2 +BITMAP +0010 +7E20 +48FE +7E92 +4892 +7EFE +4892 +4892 +7EFE +0220 +AA24 +AA5A +AA5E +8290 +1492 +090E +ENDCHAR +STARTCHAR uni9A2A +ENCODING 39466 +BBX 15 16 0 -2 +BITMAP +0050 +7E96 +4892 +7E92 +48D6 +7E92 +4892 +48FE +7E10 +02FC +AA44 +AA44 +AA28 +8210 +1428 +08C6 +ENDCHAR +STARTCHAR uni9A2B +ENCODING 39467 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +1FF0 +0440 +1FF0 +0440 +FFFE +0890 +3FF8 +C886 +2FFC +2924 +449C +ENDCHAR +STARTCHAR uni9A2C +ENCODING 39468 +BBX 15 16 0 -2 +BITMAP +001C +F9E0 +A020 +FBFE +A0A8 +F8AA +A3AC +A0AA +F9AA +0AA6 +A870 +A8A8 +A924 +8A22 +0C20 +3020 +ENDCHAR +STARTCHAR uni9A2D +ENCODING 39469 +BBX 15 15 1 -1 +BITMAP +0010 +7C9C +4490 +4BFE +4450 +4592 +5834 +4008 +5FF8 +1080 +1FF8 +1080 +5FFC +4924 +8498 +ENDCHAR +STARTCHAR uni9A2E +ENCODING 39470 +BBX 15 15 1 -1 +BITMAP +0060 +7D9E +510A +514A +794A +51EA +5316 +7800 +51FC +5124 +7D24 +05FC +AD24 +A524 +89FC +ENDCHAR +STARTCHAR uni9A2F +ENCODING 39471 +BBX 15 16 0 -2 +BITMAP +0020 +7E10 +48FE +7E00 +4844 +7E28 +48FE +48A2 +7E10 +02FE +AA20 +AA3C +AA24 +8244 +1454 +0888 +ENDCHAR +STARTCHAR uni9A30 +ENCODING 39472 +BBX 15 15 1 -1 +BITMAP +0248 +7950 +4BFC +4890 +4FFE +7908 +4BFC +4D22 +49FC +7920 +49FC +4920 +49FE +8AAA +BC56 +ENDCHAR +STARTCHAR uni9A31 +ENCODING 39473 +BBX 15 15 1 -1 +BITMAP +0038 +7DE4 +5112 +5212 +7E40 +5090 +5120 +7CC8 +5074 +53C2 +7C20 +07FE +AC50 +A488 +8B06 +ENDCHAR +STARTCHAR uni9A32 +ENCODING 39474 +BBX 15 16 0 -2 +BITMAP +0088 +7C88 +53FE +7C88 +5000 +7DFC +5104 +51FC +7D04 +05FC +5524 +5420 +57FE +8420 +1420 +0820 +ENDCHAR +STARTCHAR uni9A33 +ENCODING 39475 +BBX 15 15 0 -2 +BITMAP +7EFE +4890 +7EFC +4890 +7EFC +4890 +4890 +7EFE +0202 +AAAA +AAAA +AAAA +8282 +1414 +0808 +ENDCHAR +STARTCHAR uni9A34 +ENCODING 39476 +BBX 15 15 0 -2 +BITMAP +7E7C +4844 +7E7C +4844 +7E7C +4810 +48FE +7E82 +0220 +AAFE +AA44 +AA68 +8210 +1428 +0844 +ENDCHAR +STARTCHAR uni9A35 +ENCODING 39477 +BBX 15 15 0 -2 +BITMAP +7EFE +4888 +7E90 +48BE +7EA2 +48BE +48A2 +7EBE +0288 +AAAC +AAAA +AACA +828A +1528 +0A10 +ENDCHAR +STARTCHAR uni9A36 +ENCODING 39478 +BBX 15 15 1 -1 +BITMAP +0040 +7EFE +4922 +48AA +7EFA +4842 +488C +7E40 +48FE +4922 +7EAA +02AA +AAFA +AA42 +848C +ENDCHAR +STARTCHAR uni9A37 +ENCODING 39479 +BBX 15 14 1 -1 +BITMAP +7EFC +4854 +4928 +7E90 +4868 +4896 +7E7C +4854 +4854 +7F7C +0110 +AB14 +A91A +83E2 +ENDCHAR +STARTCHAR uni9A38 +ENCODING 39480 +BBX 15 15 1 -1 +BITMAP +000C +7EF0 +4880 +48FC +7E84 +48FC +4880 +7EFE +4892 +48B6 +7EDA +02B6 +AADA +AB12 +8436 +ENDCHAR +STARTCHAR uni9A39 +ENCODING 39481 +BBX 15 16 0 -2 +BITMAP +0088 +7C88 +53FE +7C88 +50F8 +7C20 +51FC +5124 +7DFC +0420 +55FC +5420 +55FC +8420 +17FE +0800 +ENDCHAR +STARTCHAR uni9A3A +ENCODING 39482 +BBX 15 16 0 -2 +BITMAP +0820 +7E20 +08F8 +FF28 +1428 +7F6A +082A +FF56 +0882 +3FF8 +2100 +3FF8 +2100 +3FFE +2922 +4496 +ENDCHAR +STARTCHAR uni9A3B +ENCODING 39483 +BBX 15 16 0 -2 +BITMAP +0010 +7E10 +48FE +7E10 +48BA +7E54 +48BA +4810 +7EBA +0254 +AABA +AA10 +AA28 +8228 +1444 +0882 +ENDCHAR +STARTCHAR uni9A3C +ENCODING 39484 +BBX 15 16 0 -2 +BITMAP +0020 +7E10 +48FE +7EA8 +48A8 +7EFE +48AA +48AA +7EFE +0280 +AACA +AAEC +AB48 +824A +146A +0846 +ENDCHAR +STARTCHAR uni9A3D +ENCODING 39485 +BBX 15 15 0 -2 +BITMAP +7DDE +5042 +7D52 +50CA +7D52 +5042 +5020 +7CFC +0484 +5484 +54FC +5484 +8484 +14FC +0884 +ENDCHAR +STARTCHAR uni9A3E +ENCODING 39486 +BBX 15 14 1 -1 +BITMAP +7EFE +4892 +48FE +7E92 +48FE +4820 +7E48 +48D0 +4824 +7FFA +0112 +AB54 +A952 +8312 +ENDCHAR +STARTCHAR uni9A3F +ENCODING 39487 +BBX 15 16 0 -2 +BITMAP +0010 +7EFE +4844 +7E28 +48FE +7E00 +487C +4844 +7E7C +0244 +AA7C +AA10 +AAFE +8210 +1410 +0810 +ENDCHAR +STARTCHAR uni9A40 +ENCODING 39488 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +7FFC +0820 +1FF0 +1010 +1FF0 +1010 +FFFE +0920 +3FF8 +C906 +2FFC +2924 +449C +ENDCHAR +STARTCHAR uni9A41 +ENCODING 39489 +BBX 15 16 0 -2 +BITMAP +0820 +7F20 +087E +7E44 +08A4 +FF28 +1010 +1E28 +2244 +7FFA +A100 +3FF8 +2100 +3FFE +2922 +4496 +ENDCHAR +STARTCHAR uni9A42 +ENCODING 39490 +BBX 15 15 1 -1 +BITMAP +0020 +7E28 +484C +48F2 +7C88 +4954 +4BBA +7C48 +4894 +4962 +7E08 +0272 +AA04 +AA18 +86E0 +ENDCHAR +STARTCHAR uni9A43 +ENCODING 39491 +BBX 15 14 1 -1 +BITMAP +7EFE +4828 +48FE +7EAA +48AA +48FE +7E00 +487C +4800 +7FFE +0110 +AB54 +A952 +8332 +ENDCHAR +STARTCHAR uni9A44 +ENCODING 39492 +BBX 15 15 1 -1 +BITMAP +0010 +7C20 +51FE +5122 +7DBA +514A +51AA +7D12 +512A +51FE +7C00 +0554 +AD52 +A54A +8A38 +ENDCHAR +STARTCHAR uni9A45 +ENCODING 39493 +BBX 15 14 1 -1 +BITMAP +7EFC +4880 +48BC +7EA4 +48A4 +48BC +7E80 +48EE +48AA +7EAA +02AA +AAEE +AA80 +86FE +ENDCHAR +STARTCHAR uni9A46 +ENCODING 39494 +BBX 15 15 0 -2 +BITMAP +7EFE +4892 +7EFE +4892 +7EFE +4854 +4854 +7EFE +0254 +AA54 +AAFE +AA10 +82FE +1410 +0810 +ENDCHAR +STARTCHAR uni9A47 +ENCODING 39495 +BBX 14 16 1 -2 +BITMAP +1040 +7C40 +11F0 +FE50 +54D0 +BA54 +10AC +7D04 +0000 +7FF0 +4200 +7FF0 +4200 +7FFC +5244 +892C +ENDCHAR +STARTCHAR uni9A48 +ENCODING 39496 +BBX 15 16 0 -2 +BITMAP +00FC +7E28 +4810 +7FFE +4852 +7E94 +4950 +4820 +7EFE +02AA +AAC6 +AABA +AAAA +82BA +1482 +0886 +ENDCHAR +STARTCHAR uni9A49 +ENCODING 39497 +BBX 15 16 0 -2 +BITMAP +0020 +7C3C +5020 +7DFE +5122 +7D38 +51E4 +511C +7D00 +0528 +55AA +556C +5528 +8628 +14FE +0800 +ENDCHAR +STARTCHAR uni9A4A +ENCODING 39498 +BBX 15 15 1 -1 +BITMAP +0088 +7C88 +4BFE +4888 +7FFE +4924 +4924 +7FFE +4924 +4924 +7FFE +0420 +AFFE +A420 +8820 +ENDCHAR +STARTCHAR uni9A4B +ENCODING 39499 +BBX 15 16 0 -2 +BITMAP +0024 +FBA8 +A092 +FD14 +A208 +FC04 +A3BA +A0A8 +F8C6 +0B80 +AA3C +AB84 +A8A8 +8890 +0AA8 +3144 +ENDCHAR +STARTCHAR uni9A4C +ENCODING 39500 +BBX 15 15 1 -1 +BITMAP +0020 +7DFC +5024 +53FE +7824 +51FC +5020 +7AAA +53AE +5222 +7BFE +0A22 +ABAE +AAAA +94AA +ENDCHAR +STARTCHAR uni9A4D +ENCODING 39501 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +48F8 +4820 +7DFC +4908 +4BDE +7D08 +49C8 +4B1E +7C00 +07FE +AC90 +A512 +8E0E +ENDCHAR +STARTCHAR uni9A4E +ENCODING 39502 +BBX 15 15 1 -1 +BITMAP +0124 +7EA8 +4820 +49FE +7EA8 +4924 +4822 +7F20 +49C4 +497E +7F54 +02D4 +AA9E +AA84 +8D04 +ENDCHAR +STARTCHAR uni9A4F +ENCODING 39503 +BBX 15 16 0 -2 +BITMAP +03FE +FA02 +A3FE +FA00 +A2FC +FA08 +A3FE +A210 +FA30 +0BCE +AA42 +AA84 +ACEE +8F84 +0884 +318C +ENDCHAR +STARTCHAR uni9A50 +ENCODING 39504 +BBX 15 16 0 -2 +BITMAP +0108 +F888 +A3C8 +F810 +A3DE +FA64 +A3D4 +A014 +FBD4 +0854 +A894 +A8E8 +AB88 +8894 +0A94 +3122 +ENDCHAR +STARTCHAR uni9A51 +ENCODING 39505 +BBX 15 15 0 -2 +BITMAP +7EFE +4828 +7EEE +48AA +7EAA +48EE +4828 +7EFE +0292 +AA92 +AAFE +AA92 +8292 +14FE +0882 +ENDCHAR +STARTCHAR uni9A52 +ENCODING 39506 +BBX 15 14 1 -1 +BITMAP +7FDE +4A52 +4BDE +7C00 +49FC +4924 +7DFC +4924 +49FC +7E20 +03FE +AA20 +AA20 +8420 +ENDCHAR +STARTCHAR uni9A53 +ENCODING 39507 +BBX 15 16 0 -2 +BITMAP +0044 +7E24 +4828 +7EFE +4892 +7ED6 +48BA +4892 +7EFE +0200 +AA7C +AA44 +AA7C +8244 +147C +0844 +ENDCHAR +STARTCHAR uni9A54 +ENCODING 39508 +BBX 15 15 0 -2 +BITMAP +7EFE +4828 +7EFE +48AA +7EFE +4800 +487C +7E44 +027C +AA44 +AA7C +AA10 +82FE +1410 +0810 +ENDCHAR +STARTCHAR uni9A55 +ENCODING 39509 +BBX 15 15 1 -1 +BITMAP +0018 +7DE0 +4820 +49FE +7C48 +48FC +494A +7C78 +4800 +49FE +7D02 +057A +AD4A +A57A +8D06 +ENDCHAR +STARTCHAR uni9A56 +ENCODING 39510 +BBX 15 16 0 -2 +BITMAP +008C +FBEA +A088 +FBFE +A008 +FBE8 +A22A +A3EA +F80A +0BEC +A88C +ABEC +A88A +88EA +0B96 +3022 +ENDCHAR +STARTCHAR uni9A57 +ENCODING 39511 +BBX 15 15 1 -1 +BITMAP +0010 +7F28 +4844 +4882 +7E7C +4800 +48EE +7EAA +48AA +48EE +7F00 +0144 +AB44 +A9AA +86AA +ENDCHAR +STARTCHAR uni9A58 +ENCODING 39512 +BBX 15 15 1 -1 +BITMAP +0100 +7FFE +4000 +7FF8 +0000 +1FF8 +1008 +7FFC +5514 +7794 +551C +77F4 +5054 +9554 +B8E2 +ENDCHAR +STARTCHAR uni9A59 +ENCODING 39513 +BBX 15 16 0 -2 +BITMAP +0010 +7EFE +4800 +7EFE +4882 +7EBA +48AA +48FE +7E00 +027C +AA44 +AA7C +AA44 +827C +1400 +08FE +ENDCHAR +STARTCHAR uni9A5A +ENCODING 39514 +BBX 15 15 1 -1 +BITMAP +2420 +2420 +FF7E +24A4 +7E18 +8228 +3A46 +3FF0 +2100 +3FF0 +2100 +3FFC +4004 +5244 +892C +ENDCHAR +STARTCHAR uni9A5B +ENCODING 39515 +BBX 15 14 1 -1 +BITMAP +7DFC +4954 +49FC +7C20 +49FC +4820 +7DFE +4888 +49FE +7E20 +03FC +AA20 +AA20 +8620 +ENDCHAR +STARTCHAR uni9A5C +ENCODING 39516 +BBX 15 16 0 -2 +BITMAP +0050 +7D52 +50D4 +7C50 +51FE +7C88 +5050 +51FE +7C20 +04FC +5420 +55FE +54A8 +8524 +1622 +0820 +ENDCHAR +STARTCHAR uni9A5D +ENCODING 39517 +BBX 15 16 0 -2 +BITMAP +0010 +7EFE +4810 +7E7C +4800 +7EFE +4882 +487C +7E20 +027C +AAC4 +AB7C +AA10 +82FE +1454 +0992 +ENDCHAR +STARTCHAR uni9A5E +ENCODING 39518 +BBX 15 16 0 -2 +BITMAP +0040 +F820 +A3FE +FA02 +A1FC +F948 +A250 +A1FC +FB04 +09FC +A904 +A9FC +A904 +89FC +0888 +3104 +ENDCHAR +STARTCHAR uni9A5F +ENCODING 39519 +BBX 15 14 1 -1 +BITMAP +7FE0 +495C +49C4 +7D54 +49C8 +4948 +7DD4 +4B42 +4810 +7CA4 +0528 +ACB8 +A526 +8C20 +ENDCHAR +STARTCHAR uni9A60 +ENCODING 39520 +BBX 15 16 0 -2 +BITMAP +0110 +F910 +A7FC +F910 +A1F0 +FA08 +A2EA +A6AC +FAA8 +0AAA +AEEA +AA06 +A800 +8AA4 +0A52 +3452 +ENDCHAR +STARTCHAR uni9A61 +ENCODING 39521 +BBX 15 16 0 -2 +BITMAP +1040 +7E7C +2440 +FF7C +4204 +7E7C +4240 +7E78 +4242 +3FFE +2100 +3FF8 +2100 +3FFE +2922 +4496 +ENDCHAR +STARTCHAR uni9A62 +ENCODING 39522 +BBX 15 15 1 -1 +BITMAP +0040 +7C78 +5040 +53FC +7A44 +53F0 +5244 +7AFC +52A8 +52F8 +7EA8 +05FC +AD54 +A554 +8FFE +ENDCHAR +STARTCHAR uni9A63 +ENCODING 39523 +BBX 15 16 0 -2 +BITMAP +0124 +7CA8 +51FC +7C40 +53FE +7D08 +53FC +5522 +7DFC +0520 +55FC +5520 +55FE +8402 +16AA +0804 +ENDCHAR +STARTCHAR uni9A64 +ENCODING 39524 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +4BFE +4800 +7DDC +4954 +49FE +7C88 +49FC +4888 +7FFE +0254 +AB88 +AAA4 +86C2 +ENDCHAR +STARTCHAR uni9A65 +ENCODING 39525 +BBX 15 15 1 -1 +BITMAP +0052 +7DDC +4852 +49DE +7C00 +48FC +48A4 +7CFC +48A4 +48FC +7E48 +02FC +AA48 +ABFE +8684 +ENDCHAR +STARTCHAR uni9A66 +ENCODING 39526 +BBX 15 16 0 -2 +BITMAP +01FC +F820 +A3FE +FA22 +A1AC +F820 +A1AC +A000 +F89E +0BF2 +A89E +A9D2 +AABE +8C92 +089E +3092 +ENDCHAR +STARTCHAR uni9A67 +ENCODING 39527 +BBX 15 16 0 -2 +BITMAP +0290 +FA90 +A7D0 +FABE +A3CA +F92E +A7DA +A54A +FD7E +0FCA +A91E +AFEA +A90A +8902 +090A +3104 +ENDCHAR +STARTCHAR uni9A68 +ENCODING 39528 +BBX 15 16 0 -2 +BITMAP +0222 +FBFE +A090 +F9FE +A310 +FDFE +A110 +A1FE +F910 +09FE +A900 +ABFE +AA8A +8B76 +0A52 +3276 +ENDCHAR +STARTCHAR uni9A69 +ENCODING 39529 +BBX 15 15 1 -1 +BITMAP +0088 +7C88 +4BFE +4888 +7DDC +4954 +49DC +7C48 +48FE +4990 +7EFC +0290 +AAFC +AA90 +86FE +ENDCHAR +STARTCHAR uni9A6A +ENCODING 39530 +BBX 15 14 1 -1 +BITMAP +7DDC +4800 +49DC +7D54 +4820 +49FC +7D50 +49FC +4954 +7DFC +0548 +AD6C +A64A +8CE6 +ENDCHAR +STARTCHAR uni9A6B +ENCODING 39531 +BBX 15 14 1 -1 +BITMAP +1FF8 +1080 +1FF0 +1080 +1FF8 +1008 +2558 +7FFE +4890 +7EFC +4890 +7FFE +5502 +8B56 +ENDCHAR +STARTCHAR uni9A6C +ENCODING 39532 +BBX 14 15 0 -2 +BITMAP +7FE0 +0020 +0020 +1020 +1020 +1020 +1FFC +0004 +0004 +0004 +FFE4 +0004 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni9A6D +ENCODING 39533 +BBX 15 15 0 -2 +BITMAP +7C00 +05FC +2484 +2484 +2484 +2488 +3E88 +0250 +0250 +1A20 +E220 +4250 +0288 +1504 +0A02 +ENDCHAR +STARTCHAR uni9A6E +ENCODING 39534 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +0420 +2420 +2420 +25FE +2420 +3E20 +0220 +0250 +1A50 +E250 +4288 +0288 +1504 +0A02 +ENDCHAR +STARTCHAR uni9A6F +ENCODING 39535 +BBX 14 16 0 -2 +BITMAP +0104 +F924 +0924 +4924 +4924 +4924 +4924 +7D24 +0524 +0524 +1D24 +E524 +4524 +0624 +2A04 +1404 +ENDCHAR +STARTCHAR uni9A70 +ENCODING 39536 +BBX 15 16 0 -2 +BITMAP +0020 +F820 +0820 +4920 +492C +4934 +4964 +7FA4 +0524 +0534 +1D28 +E522 +4522 +0502 +28FE +1000 +ENDCHAR +STARTCHAR uni9A71 +ENCODING 39537 +BBX 15 15 0 -2 +BITMAP +F9FE +0900 +4904 +4944 +4928 +4928 +7D10 +0510 +0528 +1D28 +E544 +4584 +0500 +29FE +1000 +ENDCHAR +STARTCHAR uni9A72 +ENCODING 39538 +BBX 14 15 0 -2 +BITMAP +7CFC +0484 +2484 +2484 +2484 +2484 +3EFC +0284 +0284 +1A84 +E284 +4284 +0284 +14FC +0884 +ENDCHAR +STARTCHAR uni9A73 +ENCODING 39539 +BBX 15 16 0 -2 +BITMAP +0008 +F888 +0850 +4820 +4850 +4888 +4900 +7C08 +0488 +0488 +1C50 +E450 +4420 +0450 +2888 +1306 +ENDCHAR +STARTCHAR uni9A74 +ENCODING 39540 +BBX 14 16 0 -2 +BITMAP +0040 +F820 +0820 +48FC +4884 +4884 +4884 +7CFC +0484 +0480 +1C80 +E480 +4480 +0500 +2900 +1200 +ENDCHAR +STARTCHAR uni9A75 +ENCODING 39541 +BBX 15 15 0 -2 +BITMAP +F8F8 +0888 +4888 +4888 +48F8 +4888 +7C88 +0488 +04F8 +1C88 +E488 +4488 +0488 +2BFE +1000 +ENDCHAR +STARTCHAR uni9A76 +ENCODING 39542 +BBX 15 16 0 -2 +BITMAP +0020 +F820 +0820 +49FC +4924 +4924 +4924 +7D24 +05FC +0420 +1CA0 +E460 +4460 +0490 +2908 +1206 +ENDCHAR +STARTCHAR uni9A77 +ENCODING 39543 +BBX 14 15 0 -2 +BITMAP +F9FC +0954 +4954 +4954 +4954 +4954 +7D54 +0594 +058C +1D04 +E504 +4504 +05FC +2904 +1000 +ENDCHAR +STARTCHAR uni9A78 +ENCODING 39544 +BBX 15 16 0 -2 +BITMAP +0088 +F888 +0888 +4908 +497E +4B08 +4D08 +7D48 +0528 +0528 +1D08 +E508 +4508 +0508 +2928 +1110 +ENDCHAR +STARTCHAR uni9A79 +ENCODING 39545 +BBX 14 16 0 -2 +BITMAP +0080 +F880 +0900 +49FC +4A04 +4C04 +49E4 +7D24 +0524 +0524 +1DE4 +E524 +4404 +0404 +2828 +1010 +ENDCHAR +STARTCHAR uni9A7A +ENCODING 39546 +BBX 14 16 0 -2 +BITMAP +0080 +F880 +08F8 +4908 +4A10 +4C20 +4BFC +7C04 +0404 +0404 +1DFC +E404 +4404 +0404 +2BFC +1004 +ENDCHAR +STARTCHAR uni9A7B +ENCODING 39547 +BBX 15 16 0 -2 +BITMAP +0040 +F820 +0800 +4BFE +4820 +4820 +4820 +7C20 +05FC +0420 +1C20 +E420 +4420 +0420 +2BFE +1000 +ENDCHAR +STARTCHAR uni9A7C +ENCODING 39548 +BBX 15 16 0 -2 +BITMAP +0020 +F810 +0810 +49FE +4902 +4A04 +4880 +7C88 +0490 +04A0 +1CC0 +E482 +4482 +0482 +287E +1000 +ENDCHAR +STARTCHAR uni9A7D +ENCODING 39549 +BBX 14 16 1 -2 +BITMAP +1000 +FEF8 +2288 +6450 +1820 +2450 +C28C +3FC0 +0040 +1040 +1040 +1FF8 +0008 +FF88 +0028 +0010 +ENDCHAR +STARTCHAR uni9A7E +ENCODING 39550 +BBX 13 16 1 -2 +BITMAP +1000 +1000 +FEF8 +2288 +2288 +4AF8 +8400 +3FC0 +0040 +1040 +1040 +1FF8 +0008 +FF88 +0028 +0010 +ENDCHAR +STARTCHAR uni9A7F +ENCODING 39551 +BBX 15 15 0 -2 +BITMAP +FBFC +0904 +4888 +4850 +4820 +48D8 +7F26 +0420 +05FC +1C20 +E420 +47FE +0420 +2820 +1020 +ENDCHAR +STARTCHAR uni9A80 +ENCODING 39552 +BBX 15 16 0 -2 +BITMAP +0020 +F820 +0840 +4888 +4904 +4BFE +4802 +7C00 +05FC +0504 +1D04 +E504 +4504 +0504 +29FC +1104 +ENDCHAR +STARTCHAR uni9A81 +ENCODING 39553 +BBX 15 16 0 -2 +BITMAP +0080 +F880 +08BC +4BC0 +4850 +4824 +48D4 +7F0C +0400 +07FE +1C90 +E490 +4512 +0512 +2A0E +1400 +ENDCHAR +STARTCHAR uni9A82 +ENCODING 39554 +BBX 13 15 1 -2 +BITMAP +F9F0 +8910 +8910 +F9F0 +0000 +7FC0 +0040 +1040 +1040 +1FF8 +0008 +FFC8 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni9A83 +ENCODING 39555 +BBX 14 15 0 -2 +BITMAP +F9FC +0904 +4924 +4924 +4924 +49FC +7D24 +0524 +0554 +1D4C +E58C +4504 +0504 +29FC +1104 +ENDCHAR +STARTCHAR uni9A84 +ENCODING 39556 +BBX 15 16 0 -2 +BITMAP +0008 +F83C +09E0 +4820 +4820 +4BFE +4850 +7C88 +0504 +068A +1C88 +E488 +4488 +0508 +2908 +1208 +ENDCHAR +STARTCHAR uni9A85 +ENCODING 39557 +BBX 15 16 0 -2 +BITMAP +0090 +F894 +0914 +4918 +4B10 +4D32 +4952 +7D0E +0520 +0420 +1FFE +E420 +4420 +0420 +2820 +1020 +ENDCHAR +STARTCHAR uni9A86 +ENCODING 39558 +BBX 15 16 0 -2 +BITMAP +0080 +F880 +08F8 +4908 +4B10 +4CA0 +4840 +7CA0 +0518 +0606 +1DF8 +E508 +4508 +0508 +29F8 +1108 +ENDCHAR +STARTCHAR uni9A87 +ENCODING 39559 +BBX 15 16 0 -2 +BITMAP +0020 +F810 +0810 +49FE +4820 +4824 +4844 +7CF8 +0412 +0422 +1C44 +E588 +4410 +0428 +2844 +1182 +ENDCHAR +STARTCHAR uni9A88 +ENCODING 39560 +BBX 15 16 0 -2 +BITMAP +0084 +F844 +0848 +4800 +49FE +4848 +4848 +7C48 +0448 +07FE +1C48 +E448 +4448 +0448 +2888 +1108 +ENDCHAR +STARTCHAR uni9A89 +ENCODING 39561 +BBX 15 16 0 -2 +BITMAP +3FF0 +0010 +1010 +1FFC +0004 +7FE4 +0028 +0010 +FCFC +0404 +4444 +7E7E +0202 +F2F2 +0A0A +0404 +ENDCHAR +STARTCHAR uni9A8A +ENCODING 39562 +BBX 15 15 0 -2 +BITMAP +F3FE +1000 +5000 +53DE +5252 +5252 +7A52 +0B5A +0AD6 +3A52 +CA52 +0A52 +0A52 +2A52 +12D6 +ENDCHAR +STARTCHAR uni9A8B +ENCODING 39563 +BBX 15 16 0 -2 +BITMAP +0020 +F820 +09FC +4924 +49FC +4924 +49FC +7C00 +07FE +0480 +1D00 +E5FC +4404 +0404 +2828 +1010 +ENDCHAR +STARTCHAR uni9A8C +ENCODING 39564 +BBX 15 16 0 -2 +BITMAP +0020 +F820 +0850 +4850 +4888 +4904 +4AFA +7C00 +0444 +0424 +1D24 +E4A8 +4488 +0410 +2BFE +1000 +ENDCHAR +STARTCHAR uni9A8D +ENCODING 39565 +BBX 15 16 0 -2 +BITMAP +0040 +F820 +09FC +4800 +4888 +4850 +4BFE +7C20 +0420 +0420 +1DFC +E420 +4420 +0420 +2820 +1020 +ENDCHAR +STARTCHAR uni9A8E +ENCODING 39566 +BBX 15 15 0 -2 +BITMAP +F8FC +0804 +487C +4804 +48FC +4800 +7DFE +0502 +04FC +1C44 +E444 +4428 +0410 +2868 +1186 +ENDCHAR +STARTCHAR uni9A8F +ENCODING 39567 +BBX 15 16 0 -2 +BITMAP +0040 +F840 +0888 +4904 +4BFE +4802 +4888 +7D44 +0642 +04F8 +1D88 +E650 +4420 +0450 +2988 +1606 +ENDCHAR +STARTCHAR uni9A90 +ENCODING 39568 +BBX 15 16 0 -2 +BITMAP +0088 +F888 +0BFE +4888 +4888 +48F8 +4888 +7C88 +04F8 +0488 +1C88 +E7FE +4400 +0488 +2884 +1104 +ENDCHAR +STARTCHAR uni9A91 +ENCODING 39569 +BBX 15 16 0 -2 +BITMAP +0020 +F820 +09FC +4850 +4888 +4904 +4BFE +7C08 +05E8 +0528 +1D28 +E5E8 +4528 +0408 +2828 +1010 +ENDCHAR +STARTCHAR uni9A92 +ENCODING 39570 +BBX 15 15 0 -2 +BITMAP +F9FC +0924 +4924 +49FC +4924 +4924 +7DFC +0420 +07FE +1C70 +E4A8 +4524 +0622 +2820 +1020 +ENDCHAR +STARTCHAR uni9A93 +ENCODING 39571 +BBX 15 16 0 -2 +BITMAP +0050 +F848 +0880 +48FE +4990 +4A90 +48FC +7C90 +0490 +04FC +1C90 +E490 +4490 +04FE +2880 +1080 +ENDCHAR +STARTCHAR uni9A94 +ENCODING 39572 +BBX 15 16 0 -2 +BITMAP +0040 +F820 +0BFE +4A02 +4C04 +48F8 +4800 +7C00 +05FE +0420 +1CA8 +E4A4 +4522 +0622 +28A0 +1040 +ENDCHAR +STARTCHAR uni9A95 +ENCODING 39573 +BBX 15 16 0 -2 +BITMAP +0020 +F820 +09FC +4824 +4BFE +4824 +49FC +7C20 +0524 +0524 +1D74 +E5AC +4524 +0524 +2A24 +1424 +ENDCHAR +STARTCHAR uni9A96 +ENCODING 39574 +BBX 15 16 0 -2 +BITMAP +0040 +F848 +0884 +49FE +4820 +4BFE +4888 +7D24 +0642 +0588 +1C10 +E462 +4584 +0418 +2860 +1380 +ENDCHAR +STARTCHAR uni9A97 +ENCODING 39575 +BBX 15 16 0 -2 +BITMAP +0040 +F820 +09FE +4902 +4902 +49FE +4900 +7D00 +05FE +05AA +1EAA +E6FE +44AA +04AA +28A2 +1086 +ENDCHAR +STARTCHAR uni9A98 +ENCODING 39576 +BBX 14 16 1 -2 +BITMAP +0040 +F278 +9240 +A7FC +9148 +D650 +A0E0 +8700 +3FC0 +0040 +1040 +1FF8 +0008 +FF88 +0028 +0010 +ENDCHAR +STARTCHAR uni9A99 +ENCODING 39577 +BBX 15 16 0 -2 +BITMAP +0010 +FBD4 +0858 +4A52 +498C +4888 +4904 +7EFA +0420 +0420 +1DFE +E420 +4450 +0488 +2904 +1202 +ENDCHAR +STARTCHAR uni9A9A +ENCODING 39578 +BBX 15 15 0 -2 +BITMAP +F9FC +08A4 +4888 +4850 +4820 +48D8 +7F26 +0420 +05FC +1D24 +E524 +45FC +0422 +2BFE +1002 +ENDCHAR +STARTCHAR uni9A9B +ENCODING 39579 +BBX 15 16 0 -2 +BITMAP +7E20 +243E +1848 +FFA8 +2910 +4A28 +9846 +0000 +1FE0 +0020 +0820 +0FFC +0004 +7FC4 +0014 +0008 +ENDCHAR +STARTCHAR uni9A9C +ENCODING 39580 +BBX 15 16 0 -2 +BITMAP +0820 +7F20 +087E +7E44 +08A4 +FF28 +1010 +1E28 +2244 +5FE2 +8020 +0820 +0FFC +0004 +7FD4 +0008 +ENDCHAR +STARTCHAR uni9A9D +ENCODING 39581 +BBX 14 16 0 -2 +BITMAP +0040 +F9BC +0914 +4994 +4954 +49A4 +494C +7C00 +05FC +0524 +1D24 +E5FC +4524 +0524 +29FC +1104 +ENDCHAR +STARTCHAR uni9A9E +ENCODING 39582 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4442 +9FF4 +0440 +3FF8 +0440 +FFFE +0820 +1FD0 +2048 +C846 +0FF8 +0008 +7FA8 +0010 +ENDCHAR +STARTCHAR uni9A9F +ENCODING 39583 +BBX 15 16 0 -2 +BITMAP +0020 +F810 +09FE +4902 +4902 +49FE +4900 +7DEE +0522 +05AA +1D66 +E522 +4566 +06AA +2A22 +1466 +ENDCHAR +STARTCHAR uni9AA0 +ENCODING 39584 +BBX 15 15 0 -2 +BITMAP +FBFE +0850 +49FC +4954 +4954 +49FC +7C00 +05FC +0400 +1FFE +E420 +44A8 +0524 +2AA2 +1040 +ENDCHAR +STARTCHAR uni9AA1 +ENCODING 39585 +BBX 15 15 0 -2 +BITMAP +F9FC +0924 +49FC +4924 +49FC +4840 +7C88 +05F0 +0420 +1C44 +E7FE +4422 +0524 +2A22 +1060 +ENDCHAR +STARTCHAR uni9AA2 +ENCODING 39586 +BBX 15 16 0 -2 +BITMAP +0020 +F840 +09FC +4924 +497C +498C +4954 +7D24 +0554 +05FC +1C20 +E410 +4554 +0542 +294A +1238 +ENDCHAR +STARTCHAR uni9AA3 +ENCODING 39587 +BBX 15 16 0 -2 +BITMAP +03FE +F202 +13FE +5200 +52FC +5208 +53FE +7A10 +0A30 +0BCE +3A42 +CA84 +0CEE +0F84 +2884 +118C +ENDCHAR +STARTCHAR uni9AA4 +ENCODING 39588 +BBX 15 16 0 -2 +BITMAP +07E0 +F25C +13C4 +5254 +53C8 +5268 +57D4 +7864 +083C +0FC0 +3944 +CA68 +08D0 +0948 +2E46 +1040 +ENDCHAR +STARTCHAR uni9AA5 +ENCODING 39589 +BBX 15 16 0 -2 +BITMAP +0094 +FB98 +0892 +498E +4A80 +49FC +4924 +7DFC +0524 +05FC +1C88 +E5FC +4488 +07FE +2888 +1104 +ENDCHAR +STARTCHAR uni9AA6 +ENCODING 39590 +BBX 15 16 0 -2 +BITMAP +01FC +F820 +0BFE +4A22 +49AC +4820 +49AC +7C00 +049E +07F2 +1C9E +E5D2 +46BE +0492 +289E +1092 +ENDCHAR +STARTCHAR uni9AA7 +ENCODING 39591 +BBX 15 16 0 -2 +BITMAP +0020 +F3FE +1000 +51DC +5154 +51DC +5088 +7BFE +0888 +0BFE +3888 +CBFE +0894 +0988 +2AA4 +10C2 +ENDCHAR +STARTCHAR uni9AA8 +ENCODING 39592 +BBX 14 14 1 -1 +BITMAP +1FE0 +1020 +13E0 +1220 +FFFC +8004 +9FE4 +1020 +1FE0 +1020 +1FE0 +1020 +1020 +10E0 +ENDCHAR +STARTCHAR uni9AA9 +ENCODING 39593 +BBX 15 16 0 -2 +BITMAP +0040 +7C40 +4440 +7440 +55F8 +FE48 +8248 +7C48 +4448 +7C48 +4448 +7C4A +448A +448A +5506 +4A00 +ENDCHAR +STARTCHAR uni9AAA +ENCODING 39594 +BBX 15 15 0 -2 +BITMAP +7C00 +44F0 +7490 +5490 +FE90 +8290 +7CD0 +44B0 +7C90 +4490 +7C92 +4492 +4512 +550E +4A00 +ENDCHAR +STARTCHAR uni9AAB +ENCODING 39595 +BBX 15 16 0 -2 +BITMAP +0040 +7C40 +4440 +75F8 +5448 +FE48 +8248 +7D48 +44C8 +7C48 +44A8 +7CA8 +448A +450A +5506 +4A02 +ENDCHAR +STARTCHAR uni9AAC +ENCODING 39596 +BBX 15 15 0 -2 +BITMAP +7CFC +4420 +7420 +5420 +FE20 +8220 +7DFE +4420 +7C20 +4420 +7C20 +4420 +4420 +54A0 +4840 +ENDCHAR +STARTCHAR uni9AAD +ENCODING 39597 +BBX 15 14 1 -1 +BITMAP +7E7C +4210 +5E10 +5210 +FF10 +8110 +7EFE +4210 +7E10 +4210 +7E10 +4210 +4210 +4610 +ENDCHAR +STARTCHAR uni9AAE +ENCODING 39598 +BBX 15 16 0 -2 +BITMAP +3F10 +2114 +3D12 +2512 +2510 +7F96 +40B8 +BF10 +2110 +3F10 +2110 +3F10 +210A +210A +2506 +2202 +ENDCHAR +STARTCHAR uni9AAF +ENCODING 39599 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +4420 +5DFE +5400 +FE00 +8278 +7C48 +4448 +7C48 +4448 +7C48 +448A +448A +4D06 +ENDCHAR +STARTCHAR uni9AB0 +ENCODING 39600 +BBX 15 14 1 -1 +BITMAP +7E78 +4248 +5E48 +5248 +FF4E +8180 +7E00 +42FC +7E44 +4244 +7E28 +4210 +4228 +46C6 +ENDCHAR +STARTCHAR uni9AB1 +ENCODING 39601 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +7450 +5450 +FE88 +8306 +7C48 +4448 +7C48 +4448 +7C48 +4448 +4488 +5488 +4908 +ENDCHAR +STARTCHAR uni9AB2 +ENCODING 39602 +BBX 15 16 0 -2 +BITMAP +0040 +7C40 +44FC +7484 +5504 +FEF4 +8294 +7C94 +44F4 +7C84 +4494 +7C88 +4482 +4482 +547E +4800 +ENDCHAR +STARTCHAR uni9AB3 +ENCODING 39603 +BBX 15 16 0 -2 +BITMAP +0010 +7C10 +4410 +74FE +5492 +FE94 +8290 +7CFC +44A4 +7CA4 +44A8 +7CA8 +4490 +4528 +5544 +4A82 +ENDCHAR +STARTCHAR uni9AB4 +ENCODING 39604 +BBX 15 16 0 -2 +BITMAP +0008 +7C28 +4428 +7428 +54A8 +FEAA +82BC +7CA8 +44A8 +7CA8 +44A8 +7CA8 +44AA +44BA +54EA +4986 +ENDCHAR +STARTCHAR uni9AB5 +ENCODING 39605 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +4420 +7420 +55FE +FE70 +82A8 +7CA8 +4524 +7D24 +4622 +7CF8 +4420 +4420 +5420 +4820 +ENDCHAR +STARTCHAR uni9AB6 +ENCODING 39606 +BBX 15 15 1 -1 +BITMAP +000C +7CF0 +4490 +5C90 +5490 +FE90 +82FE +7C90 +4490 +7C90 +4490 +7CE8 +458A +440A +4DF4 +ENDCHAR +STARTCHAR uni9AB7 +ENCODING 39607 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +4420 +5C20 +55FE +FE20 +8220 +7C20 +4420 +7CFC +4484 +7C84 +4484 +4484 +4CFC +ENDCHAR +STARTCHAR uni9AB8 +ENCODING 39608 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +4420 +5DFE +5420 +FE40 +8290 +7C54 +4424 +7C48 +4488 +7C10 +4428 +4444 +4D82 +ENDCHAR +STARTCHAR uni9AB9 +ENCODING 39609 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +4420 +5FFE +5488 +FF04 +828A +7C88 +4450 +7C50 +4420 +7C20 +4450 +4488 +4F06 +ENDCHAR +STARTCHAR uni9ABA +ENCODING 39610 +BBX 15 16 0 -2 +BITMAP +0008 +7C1C +44E0 +7480 +5480 +FEFE +8280 +7C80 +44BC +7CA4 +44A4 +7CA4 +44A4 +453C +5524 +4A00 +ENDCHAR +STARTCHAR uni9ABB +ENCODING 39611 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +45FC +7450 +5488 +FF04 +82FA +7C00 +47FE +7C40 +4480 +7DFC +4404 +4404 +5428 +4810 +ENDCHAR +STARTCHAR uni9ABC +ENCODING 39612 +BBX 15 15 1 -1 +BITMAP +0020 +7E20 +427C +5E44 +52C4 +FF28 +8110 +7E28 +4244 +7EFE +4244 +7E44 +4244 +4244 +467C +ENDCHAR +STARTCHAR uni9ABD +ENCODING 39613 +BBX 15 16 0 -2 +BITMAP +0004 +7C1E +45E0 +7422 +5512 +FE94 +8280 +7C20 +45FE +7C44 +4484 +7DC8 +4430 +4428 +54C4 +4B02 +ENDCHAR +STARTCHAR uni9ABE +ENCODING 39614 +BBX 15 15 0 -2 +BITMAP +7DFE +4420 +7420 +55FC +FF24 +8324 +7DFC +4524 +7D24 +45FC +7D20 +44A0 +4440 +54B0 +4B0E +ENDCHAR +STARTCHAR uni9ABF +ENCODING 39615 +BBX 15 16 0 -2 +BITMAP +0084 +7C48 +4400 +74FC +5448 +FE48 +8248 +7C48 +45FE +7C48 +4448 +7C48 +4448 +4488 +5488 +4908 +ENDCHAR +STARTCHAR uni9AC0 +ENCODING 39616 +BBX 15 15 1 -1 +BITMAP +0010 +7C20 +44FE +5C92 +5492 +FEFE +8292 +7CA2 +44FE +7C48 +4488 +7DFE +4408 +4408 +4C08 +ENDCHAR +STARTCHAR uni9AC1 +ENCODING 39617 +BBX 15 14 1 -1 +BITMAP +7CFC +44A4 +5CA4 +54FC +FEA4 +82A4 +7CFC +4420 +7DFE +44A8 +7CA8 +4524 +4622 +4C20 +ENDCHAR +STARTCHAR uni9AC2 +ENCODING 39618 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FC +7504 +5440 +FE78 +8288 +7D50 +4420 +7CD8 +4706 +7CF8 +4488 +4488 +54F8 +4888 +ENDCHAR +STARTCHAR uni9AC3 +ENCODING 39619 +BBX 15 14 1 -1 +BITMAP +7CFC +44A4 +5CA4 +54FC +FEA4 +82A4 +7CFC +4420 +7DFE +452A +7D3A +45E6 +4502 +4D06 +ENDCHAR +STARTCHAR uni9AC4 +ENCODING 39620 +BBX 15 15 1 -1 +BITMAP +0010 +7D10 +44FE +5C90 +543C +FE24 +8264 +7DBC +44A4 +7CA4 +44BC +7CA4 +44AC +4480 +4D7E +ENDCHAR +STARTCHAR uni9AC5 +ENCODING 39621 +BBX 15 16 0 -2 +BITMAP +0020 +7D24 +44A8 +7420 +55FE +FE68 +82A4 +7D02 +4420 +7DFE +4448 +7C88 +44D0 +4430 +544C +4982 +ENDCHAR +STARTCHAR uni9AC6 +ENCODING 39622 +BBX 15 15 1 -1 +BITMAP +0028 +7C24 +45FE +5C20 +54FC +FEA4 +82FC +7CA4 +44FC +7CA4 +4408 +7DFE +4488 +4448 +4C18 +ENDCHAR +STARTCHAR uni9AC7 +ENCODING 39623 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +45FE +7400 +54FC +FE84 +82FC +7C00 +45FE +7D02 +457A +7D4A +457A +4502 +550A +4904 +ENDCHAR +STARTCHAR uni9AC8 +ENCODING 39624 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +44FE +7400 +5444 +FE28 +82FE +7CA2 +4410 +7CFE +4420 +7C3C +4424 +4444 +5454 +4888 +ENDCHAR +STARTCHAR uni9AC9 +ENCODING 39625 +BBX 15 16 0 -2 +BITMAP +0020 +7C20 +45FE +7552 +5448 +FEFE +8290 +7D90 +44FE +7C90 +4490 +7CFE +4490 +4490 +54FE +4880 +ENDCHAR +STARTCHAR uni9ACA +ENCODING 39626 +BBX 15 16 0 -2 +BITMAP +0084 +7C44 +4448 +75FE +5420 +FEFC +8220 +7DFE +4440 +7C80 +44FE +7D10 +4610 +4410 +55FE +4800 +ENDCHAR +STARTCHAR uni9ACB +ENCODING 39627 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +45FE +7502 +5448 +FEFC +8248 +7C00 +44FC +7C84 +44A4 +7CA4 +44A4 +4450 +5492 +4B0E +ENDCHAR +STARTCHAR uni9ACC +ENCODING 39628 +BBX 15 16 0 -2 +BITMAP +0040 +7C20 +45FE +7502 +5418 +FEE0 +8280 +7CFC +4490 +7C90 +4490 +7DFE +4400 +4488 +5504 +4A02 +ENDCHAR +STARTCHAR uni9ACD +ENCODING 39629 +BBX 15 16 0 -2 +BITMAP +0020 +7C10 +45FE +7548 +5548 +FF48 +83FE +7D48 +4548 +7DEC +455A +7D68 +4548 +4548 +5648 +4848 +ENDCHAR +STARTCHAR uni9ACE +ENCODING 39630 +BBX 15 14 1 -1 +BITMAP +7DDE +4442 +5CC6 +554A +FEE6 +835A +7C88 +4706 +7C40 +4590 +7C64 +4588 +4430 +4DC0 +ENDCHAR +STARTCHAR uni9ACF +ENCODING 39631 +BBX 15 15 1 -1 +BITMAP +0020 +7DFC +4524 +5FFE +5524 +FFFC +8220 +7DFC +4524 +7DFC +4440 +7FFE +4488 +44F8 +4F86 +ENDCHAR +STARTCHAR uni9AD0 +ENCODING 39632 +BBX 15 15 1 -1 +BITMAP +0020 +7CF8 +4420 +5DFC +5400 +FE88 +83DE +7C88 +44C8 +7F1E +4400 +7FFE +4490 +4512 +4E0E +ENDCHAR +STARTCHAR uni9AD1 +ENCODING 39633 +BBX 15 14 1 -1 +BITMAP +7DFC +4554 +5D54 +55FC +FE40 +82FE +7D42 +47F2 +7D52 +4552 +7DF2 +4452 +447A +4D8C +ENDCHAR +STARTCHAR uni9AD2 +ENCODING 39634 +BBX 15 15 1 -1 +BITMAP +0088 +7FFE +4488 +5FFE +5510 +FFD4 +8258 +7D52 +4492 +7F0E +4448 +7DFE +4448 +4488 +4D08 +ENDCHAR +STARTCHAR uni9AD3 +ENCODING 39635 +BBX 15 15 1 -1 +BITMAP +0110 +7D7E +4490 +5C3C +5548 +FEBE +8200 +7DBC +44A4 +7CBC +44A4 +7CBC +44A4 +4544 +4D3E +ENDCHAR +STARTCHAR uni9AD4 +ENCODING 39636 +BBX 15 15 1 -1 +BITMAP +0050 +7DFC +4554 +5DFC +5554 +FFFC +8200 +7FFE +4400 +7DFC +4504 +7DFC +4488 +4450 +4FFE +ENDCHAR +STARTCHAR uni9AD5 +ENCODING 39637 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +45FE +5D02 +54FC +FEA8 +8330 +7C60 +47FC +7D04 +45FC +7D04 +45FC +4488 +4F06 +ENDCHAR +STARTCHAR uni9AD6 +ENCODING 39638 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +45FC +5D54 +54F8 +FE50 +82F8 +7C88 +44F8 +7C88 +44F8 +7C88 +44FC +4452 +4D8E +ENDCHAR +STARTCHAR uni9AD7 +ENCODING 39639 +BBX 15 16 0 -2 +BITMAP +0020 +7C3E +4420 +75FE +5522 +FFF8 +8322 +7D7E +4554 +7D7C +4554 +7D7C +4500 +46FE +54AA +49FE +ENDCHAR +STARTCHAR uni9AD8 +ENCODING 39640 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +FFF8 +0000 +1FC0 +1040 +1FC0 +0000 +FFF8 +8008 +9FC8 +9048 +9048 +9FC8 +8038 +ENDCHAR +STARTCHAR uni9AD9 +ENCODING 39641 +BBX 13 16 1 -2 +BITMAP +0400 +0200 +FFF8 +2020 +3FE0 +2020 +3FE0 +2020 +FFF8 +8008 +9FC8 +9048 +9048 +9FC8 +8008 +8018 +ENDCHAR +STARTCHAR uni9ADA +ENCODING 39642 +BBX 15 16 0 -2 +BITMAP +2020 +1010 +FE10 +01FE +7C00 +4400 +7C78 +0048 +FE48 +8248 +BA48 +AA4A +AA4A +BA8A +8286 +8700 +ENDCHAR +STARTCHAR uni9ADB +ENCODING 39643 +BBX 15 16 0 -2 +BITMAP +2000 +10FC +FE84 +0084 +7CFC +44A0 +7CA0 +00A0 +FEF8 +82A8 +BAA8 +AAA8 +AAA8 +BAAA +834A +8686 +ENDCHAR +STARTCHAR uni9ADC +ENCODING 39644 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +FE84 +00FC +7C84 +44FC +7C00 +0028 +FEC8 +8248 +BBFE +AA48 +AA48 +BA88 +8708 +ENDCHAR +STARTCHAR uni9ADD +ENCODING 39645 +BBX 15 16 0 -2 +BITMAP +2048 +116A +FEDC +0048 +7CB4 +4522 +7DFE +0102 +FE20 +8220 +BAFC +AA24 +AA44 +BA44 +8294 +8708 +ENDCHAR +STARTCHAR uni9ADE +ENCODING 39646 +BBX 15 15 1 -1 +BITMAP +1000 +107C +FE44 +007C +7C00 +44EE +7CAA +00AA +FEEE +8210 +BAFE +AA38 +AA54 +BA92 +8610 +ENDCHAR +STARTCHAR uni9ADF +ENCODING 39647 +BBX 15 15 1 -1 +BITMAP +0004 +7E08 +4010 +7C20 +40C0 +7C04 +4008 +4010 +FF60 +2000 +2402 +2404 +4408 +5A30 +E2C0 +ENDCHAR +STARTCHAR uni9AE0 +ENCODING 39648 +BBX 15 15 1 -1 +BITMAP +3F08 +2030 +3EC4 +2018 +3E62 +2004 +FF98 +2260 +7D00 +0000 +0FE0 +0820 +0820 +1022 +E01E +ENDCHAR +STARTCHAR uni9AE1 +ENCODING 39649 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0000 +7FFC +0440 +0440 +0842 +3042 +C03E +ENDCHAR +STARTCHAR uni9AE2 +ENCODING 39650 +BBX 15 14 1 -1 +BITMAP +3E08 +2030 +3CC4 +2018 +3C62 +2004 +FF18 +2460 +7A80 +11F8 +FE88 +1098 +1002 +0FFE +ENDCHAR +STARTCHAR uni9AE3 +ENCODING 39651 +BBX 15 14 1 -1 +BITMAP +7E0C +4070 +7C08 +4030 +FF02 +200C +44F0 +FA00 +0100 +FFFE +0200 +03F8 +0C08 +7078 +ENDCHAR +STARTCHAR uni9AE4 +ENCODING 39652 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0100 +7FFC +0380 +0540 +0920 +3118 +C106 +ENDCHAR +STARTCHAR uni9AE5 +ENCODING 39653 +BBX 15 15 1 -1 +BITMAP +3F08 +2010 +3E64 +2008 +FFB2 +220C +7D30 +0000 +1FF0 +1010 +FFFE +1010 +FFFE +1010 +1070 +ENDCHAR +STARTCHAR uni9AE6 +ENCODING 39654 +BBX 15 14 1 -1 +BITMAP +7E08 +4030 +7CC4 +4018 +FF62 +4C0C +F270 +1FE0 +0200 +7FF0 +0200 +FFF8 +0202 +01FE +ENDCHAR +STARTCHAR uni9AE7 +ENCODING 39655 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0100 +7FFC +4104 +0280 +0482 +1882 +E07E +ENDCHAR +STARTCHAR uni9AE8 +ENCODING 39656 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0000 +3FF8 +0000 +FFFE +0440 +1842 +E03E +ENDCHAR +STARTCHAR uni9AE9 +ENCODING 39657 +BBX 15 15 1 -1 +BITMAP +3F08 +2010 +3E64 +2008 +FFB2 +220C +7D30 +0000 +FFFE +0100 +21FC +2104 +3FFC +0004 +0038 +ENDCHAR +STARTCHAR uni9AEA +ENCODING 39658 +BBX 15 15 1 -1 +BITMAP +0008 +3E30 +20C4 +3E18 +2060 +FF82 +220C +7D70 +0200 +FFFE +0400 +0FF8 +3210 +C1E0 +0E1E +ENDCHAR +STARTCHAR uni9AEB +ENCODING 39659 +BBX 15 14 1 -1 +BITMAP +7E08 +4030 +7CC4 +4018 +FF62 +440C +FA70 +0000 +FFFC +0204 +0C0C +7FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni9AEC +ENCODING 39660 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0000 +7FFC +0300 +0D70 +710C +0100 +FFFE +ENDCHAR +STARTCHAR uni9AED +ENCODING 39661 +BBX 15 15 1 -1 +BITMAP +0008 +3E30 +20C4 +3E18 +2060 +FF82 +221C +7D60 +0840 +484C +4F70 +4840 +4842 +7F42 +C03C +ENDCHAR +STARTCHAR uni9AEE +ENCODING 39662 +BBX 15 14 1 -1 +BITMAP +3E10 +2064 +3E18 +2062 +FF84 +2218 +7970 +0208 +FFFE +0400 +1C10 +E220 +01C0 +3E3E +ENDCHAR +STARTCHAR uni9AEF +ENCODING 39663 +BBX 15 14 1 -1 +BITMAP +7E30 +40C4 +7C18 +4062 +FF0C +4C70 +F300 +1FF0 +1110 +1FF0 +1110 +FFFE +1010 +1070 +ENDCHAR +STARTCHAR uni9AF0 +ENCODING 39664 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0000 +1220 +FFFE +1220 +13E0 +1000 +1FFC +ENDCHAR +STARTCHAR uni9AF1 +ENCODING 39665 +BBX 15 14 1 -1 +BITMAP +7E18 +40E4 +7C18 +4062 +FF0C +4C70 +F200 +1FF8 +2008 +FFC8 +1048 +1FD0 +1002 +0FFE +ENDCHAR +STARTCHAR uni9AF2 +ENCODING 39666 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0080 +3FFC +2084 +27F0 +2220 +41C0 +9E3C +ENDCHAR +STARTCHAR uni9AF3 +ENCODING 39667 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0000 +3FE0 +0440 +FFFC +0484 +1888 +E180 +ENDCHAR +STARTCHAR uni9AF4 +ENCODING 39668 +BBX 15 14 1 -1 +BITMAP +7E30 +40C4 +7C18 +4062 +FF0C +2470 +2C80 +FFF8 +0488 +7FF8 +4480 +7FFC +0884 +709C +ENDCHAR +STARTCHAR uni9AF5 +ENCODING 39669 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0000 +FFFE +0200 +3FF8 +2488 +24A8 +2010 +ENDCHAR +STARTCHAR uni9AF6 +ENCODING 39670 +BBX 15 16 0 -2 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +0000 +3FF8 +0820 +0FE0 +0820 +0FE0 +083E +FFE0 +0020 +ENDCHAR +STARTCHAR uni9AF7 +ENCODING 39671 +BBX 15 15 1 -1 +BITMAP +0008 +3E30 +20C4 +3E18 +2062 +FF84 +2218 +7D60 +0440 +3FF8 +2448 +3FF8 +2448 +2448 +3FF8 +ENDCHAR +STARTCHAR uni9AF8 +ENCODING 39672 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0440 +3FF8 +0440 +FFFE +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni9AF9 +ENCODING 39673 +BBX 15 15 1 -1 +BITMAP +3F08 +2030 +3EC4 +2018 +FFE2 +220C +7D70 +0840 +0840 +17FC +30E0 +D150 +1248 +1C46 +1040 +ENDCHAR +STARTCHAR uni9AFA +ENCODING 39674 +BBX 15 16 0 -2 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +0000 +00F8 +3F00 +0100 +FFFE +0100 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni9AFB +ENCODING 39675 +BBX 15 15 1 -1 +BITMAP +0008 +7E30 +40C4 +7C18 +4062 +FF0C +4470 +4B00 +FFFE +0100 +3FF8 +0000 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni9AFC +ENCODING 39676 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0800 +1FF0 +2820 +07C0 +1830 +E10E +1FF0 +0100 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni9AFD +ENCODING 39677 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +1110 +1110 +2928 +4544 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni9AFE +ENCODING 39678 +BBX 15 16 0 -2 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +1110 +0920 +3FF8 +2008 +3FF8 +2008 +3FF8 +2008 +2018 +ENDCHAR +STARTCHAR uni9AFF +ENCODING 39679 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +1020 +48A8 +2524 +0A22 +7028 +1030 +17C0 +ENDCHAR +STARTCHAR uni9B00 +ENCODING 39680 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0820 +0440 +7FF8 +0108 +3FF8 +2100 +3FFC +0304 +0514 +1908 +6100 +ENDCHAR +STARTCHAR uni9B01 +ENCODING 39681 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0008 +3E48 +0848 +7F48 +1C48 +2A08 +4918 +ENDCHAR +STARTCHAR uni9B02 +ENCODING 39682 +BBX 15 15 1 -1 +BITMAP +3F08 +2030 +3EC4 +2018 +FFE2 +260C +7970 +0FC0 +0800 +0FF8 +0820 +0820 +FFFE +1010 +600C +ENDCHAR +STARTCHAR uni9B03 +ENCODING 39683 +BBX 15 15 1 -1 +BITMAP +3F08 +2010 +3E64 +2008 +FFB2 +220C +7D30 +0100 +7FFC +4004 +4FE4 +0000 +7FFC +1110 +630C +ENDCHAR +STARTCHAR uni9B04 +ENCODING 39684 +BBX 15 16 0 -2 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +0000 +1FF0 +1010 +1FF0 +1010 +1FFC +6444 +0894 +3308 +ENDCHAR +STARTCHAR uni9B05 +ENCODING 39685 +BBX 15 16 0 -2 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +0000 +3E7C +2244 +3E7C +2244 +3E7C +2244 +4A94 +8508 +ENDCHAR +STARTCHAR uni9B06 +ENCODING 39686 +BBX 15 15 1 -1 +BITMAP +0008 +3E30 +20C4 +3E18 +2062 +FF04 +2218 +7D60 +0848 +FE84 +2902 +2C40 +4A48 +8894 +09E2 +ENDCHAR +STARTCHAR uni9B07 +ENCODING 39687 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0800 +1FF0 +2020 +5FF8 +0108 +FFFE +0108 +1FF8 +0108 +0500 +0200 +ENDCHAR +STARTCHAR uni9B08 +ENCODING 39688 +BBX 15 15 1 -1 +BITMAP +3F08 +2030 +3EC4 +2018 +FFE2 +220C +7D70 +0920 +3FFC +0440 +FFFE +2828 +C8E6 +0808 +07F8 +ENDCHAR +STARTCHAR uni9B09 +ENCODING 39689 +BBX 15 16 0 -2 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +0440 +2388 +2448 +3FF8 +1410 +2FE8 +1440 +0380 +7C78 +ENDCHAR +STARTCHAR uni9B0A +ENCODING 39690 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0100 +7FFC +0100 +3FF8 +0200 +FFFE +0820 +1FF0 +2828 +CFE6 +0820 +ENDCHAR +STARTCHAR uni9B0B +ENCODING 39691 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +1010 +0820 +FFFE +0000 +3E08 +2248 +3E48 +2248 +3E48 +2208 +2618 +ENDCHAR +STARTCHAR uni9B0C +ENCODING 39692 +BBX 15 15 1 -1 +BITMAP +3F08 +2010 +3E64 +2008 +FFB2 +220C +FFFE +0800 +1FF8 +3080 +DFFE +1010 +1FF0 +1010 +2070 +ENDCHAR +STARTCHAR uni9B0D +ENCODING 39693 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +107C +FF44 +107C +7E44 +427C +7E44 +428C +ENDCHAR +STARTCHAR uni9B0E +ENCODING 39694 +BBX 15 16 0 -2 +BITMAP +3F08 +2030 +3EC4 +2018 +FF62 +220C +7F70 +0404 +7FC4 +0424 +3FA4 +24A4 +3FA4 +1504 +2494 +4408 +ENDCHAR +STARTCHAR uni9B0F +ENCODING 39695 +BBX 15 16 0 -2 +BITMAP +3E04 +2018 +3E60 +2004 +3E18 +2062 +FF04 +2218 +7F60 +0000 +7C10 +1052 +FE94 +3828 +5444 +9282 +ENDCHAR +STARTCHAR uni9B10 +ENCODING 39696 +BBX 15 15 1 -1 +BITMAP +3F04 +2018 +3E64 +201A +FFE4 +2528 +7FF8 +0140 +FFF8 +0202 +1FFE +3010 +DFF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni9B11 +ENCODING 39697 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0840 +7FFC +0480 +3FF0 +0490 +FFFE +0490 +3FF0 +0CA0 +3498 +C486 +ENDCHAR +STARTCHAR uni9B12 +ENCODING 39698 +BBX 15 15 1 -1 +BITMAP +3F08 +2010 +3E64 +2018 +FFE2 +220C +7FF0 +1004 +4FFC +4810 +4FF0 +4810 +7FFE +1010 +600E +ENDCHAR +STARTCHAR uni9B13 +ENCODING 39699 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0200 +0100 +7FFE +4022 +9FC4 +1000 +1FF8 +1080 +FFFE +1020 +2010 +ENDCHAR +STARTCHAR uni9B14 +ENCODING 39700 +BBX 15 15 0 -1 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +2100 +13F0 +1510 +00E0 +775C +11F0 +1040 +13FC +2840 +47FE +ENDCHAR +STARTCHAR uni9B15 +ENCODING 39701 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +FFFE +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni9B16 +ENCODING 39702 +BBX 15 15 1 -1 +BITMAP +3F10 +2064 +3E08 +2032 +FF8C +2630 +7AD0 +9766 +E93A +06C0 +1B30 +E0CE +0710 +0060 +1F80 +ENDCHAR +STARTCHAR uni9B17 +ENCODING 39703 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0820 +7FFC +0820 +0FE0 +0100 +7FFC +5144 +4924 +5554 +6184 +410C +ENDCHAR +STARTCHAR uni9B18 +ENCODING 39704 +BBX 15 15 1 -1 +BITMAP +0030 +3CC4 +2018 +FF62 +240C +7FF0 +0820 +0FE0 +0820 +3FF8 +2448 +7FF8 +1020 +0FC0 +F87C +ENDCHAR +STARTCHAR uni9B19 +ENCODING 39705 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0820 +7FFC +5114 +4924 +7FFC +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni9B1A +ENCODING 39706 +BBX 15 15 1 -1 +BITMAP +0008 +3F70 +2008 +3E32 +200C +FFF0 +2200 +7DFE +0110 +18FC +6084 +0CFC +3084 +06FC +7986 +ENDCHAR +STARTCHAR uni9B1B +ENCODING 39707 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0200 +3FF8 +2448 +2388 +2448 +3FF8 +2948 +2528 +294A +2526 +3182 +ENDCHAR +STARTCHAR uni9B1C +ENCODING 39708 +BBX 15 15 1 -1 +BITMAP +3E30 +20C4 +FF18 +2262 +250C +7EFC +C284 +7EFC +4284 +7FFC +4444 +47C4 +4444 +47C4 +485C +ENDCHAR +STARTCHAR uni9B1D +ENCODING 39709 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F7C +4444 +7C7C +4444 +7C7C +4004 +4FE4 +4824 +4FE4 +4824 +4FE4 +400C +ENDCHAR +STARTCHAR uni9B1E +ENCODING 39710 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0240 +1FF8 +1248 +1FF8 +1248 +3FFC +2000 +3FFC +2888 +4A70 +8C0E +ENDCHAR +STARTCHAR uni9B1F +ENCODING 39711 +BBX 15 15 1 -1 +BITMAP +0018 +7CE4 +4018 +FF62 +440C +FFF8 +2448 +3FF8 +0000 +FFFE +1010 +1FF0 +0920 +F0C0 +1C3C +ENDCHAR +STARTCHAR uni9B20 +ENCODING 39712 +BBX 15 15 1 -1 +BITMAP +3F08 +2030 +3EC4 +2018 +FF64 +2A98 +7440 +3FF8 +E92E +2548 +3FF8 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni9B21 +ENCODING 39713 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0100 +7FFC +4204 +A928 +47E4 +0000 +3FF8 +2448 +FFFE +0100 +0300 +ENDCHAR +STARTCHAR uni9B22 +ENCODING 39714 +BBX 15 15 1 -1 +BITMAP +0018 +7CE4 +4018 +FF62 +420C +FD30 +0200 +FFFC +A244 +5FF0 +3010 +DFF0 +1010 +1FF0 +701C +ENDCHAR +STARTCHAR uni9B23 +ENCODING 39715 +BBX 15 15 1 -1 +BITMAP +0018 +3CE0 +200C +FF72 +240C +7E70 +0910 +7FFC +4924 +7FFC +2108 +3DE8 +210A +3DEA +E306 +ENDCHAR +STARTCHAR uni9B24 +ENCODING 39716 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0100 +FFFE +2288 +3EF8 +0440 +3FF8 +0440 +FFFE +0490 +1C60 +671C +ENDCHAR +STARTCHAR uni9B25 +ENCODING 39717 +BBX 14 14 1 -1 +BITMAP +BCF4 +8844 +BCF4 +8844 +BCF4 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +801C +ENDCHAR +STARTCHAR uni9B26 +ENCODING 39718 +BBX 14 15 1 -2 +BITMAP +BCF4 +8844 +BCF4 +8844 +BCF4 +8104 +8904 +8504 +9104 +8904 +81E4 +BF04 +8104 +8114 +8108 +ENDCHAR +STARTCHAR uni9B27 +ENCODING 39719 +BBX 14 14 1 -1 +BITMAP +BCF4 +8844 +BCF4 +8844 +BCF4 +8004 +8204 +BFF4 +8204 +9FE4 +9224 +9224 +9264 +821C +ENDCHAR +STARTCHAR uni9B28 +ENCODING 39720 +BBX 14 14 1 -1 +BITMAP +BCF4 +8844 +BCF4 +8844 +BCF4 +8004 +8484 +9FE4 +8484 +8484 +BFF4 +8484 +8844 +902C +ENDCHAR +STARTCHAR uni9B29 +ENCODING 39721 +BBX 14 14 1 -1 +BITMAP +BCF4 +8844 +BCF4 +8844 +BCF4 +8604 +98E4 +9024 +9CE4 +9024 +9FE4 +8484 +8894 +B06C +ENDCHAR +STARTCHAR uni9B2A +ENCODING 39722 +BBX 15 14 1 -1 +BITMAP +BEFA +8822 +BEFA +8822 +BEFA +8002 +9E12 +8012 +9EFA +9212 +9E92 +8452 +9612 +B836 +ENDCHAR +STARTCHAR uni9B2B +ENCODING 39723 +BBX 15 14 1 -1 +BITMAP +BEFA +8822 +BEFA +8822 +BEFA +8042 +BE42 +887A +BE92 +9352 +9E52 +9222 +9E52 +B28E +ENDCHAR +STARTCHAR uni9B2C +ENCODING 39724 +BBX 15 16 0 -2 +BITMAP +BEFA +8822 +BEFA +8822 +BEFA +8806 +B3BA +AAA2 +BBA2 +8A3E +BBAA +A0AA +BBAA +8A2A +8BAA +BC46 +ENDCHAR +STARTCHAR uni9B2D +ENCODING 39725 +BBX 14 14 1 -1 +BITMAP +BCF4 +8844 +BCF4 +8844 +FFF4 +9514 +F7E4 +9484 +B6F4 +A2A4 +B6A4 +94A4 +96A4 +B92C +ENDCHAR +STARTCHAR uni9B2E +ENCODING 39726 +BBX 15 14 1 -1 +BITMAP +BEFA +8822 +BEFA +8822 +BEFA +87C2 +8882 +BFE2 +8AA2 +BFF2 +8A92 +BFF2 +8A0A +B1FA +ENDCHAR +STARTCHAR uni9B2F +ENCODING 39727 +BBX 13 15 2 -1 +BITMAP +0400 +8210 +8890 +C510 +A250 +8D30 +B490 +8210 +FFF0 +4000 +40E0 +7F00 +4008 +4008 +3FF8 +ENDCHAR +STARTCHAR uni9B30 +ENCODING 39728 +BBX 15 16 0 -2 +BITMAP +2288 +F93E +2288 +729C +A92A +2288 +0000 +7FFE +4A12 +A4A4 +2AC8 +3F90 +1024 +1F48 +1010 +1F20 +ENDCHAR +STARTCHAR uni9B31 +ENCODING 39729 +BBX 15 15 1 -1 +BITMAP +1208 +17E8 +F91E +57AC +5D3A +97E8 +1008 +FFFE +9402 +490C +7F70 +200C +3C70 +2106 +1F78 +ENDCHAR +STARTCHAR uni9B32 +ENCODING 39730 +BBX 15 14 1 -1 +BITMAP +FFFE +0000 +1FF0 +1010 +1FF0 +0000 +7FFC +4444 +4444 +487C +5004 +4FE4 +4104 +410C +ENDCHAR +STARTCHAR uni9B33 +ENCODING 39731 +BBX 14 15 1 -1 +BITMAP +0200 +03F8 +0200 +7FFC +4204 +5FF0 +4204 +5FFC +4810 +5FF8 +5248 +5478 +9B88 +9108 +1118 +ENDCHAR +STARTCHAR uni9B34 +ENCODING 39732 +BBX 15 16 0 -2 +BITMAP +0014 +FE12 +00FE +7C10 +4410 +7CFE +0092 +FE92 +82FE +AA92 +9292 +FEFE +9292 +9292 +9292 +8686 +ENDCHAR +STARTCHAR uni9B35 +ENCODING 39733 +BBX 15 16 0 -2 +BITMAP +3E7C +4890 +7EFC +142A +66C6 +0400 +FFFE +0000 +1FF0 +1010 +1FF0 +0000 +7FFC +4444 +4FE4 +410C +ENDCHAR +STARTCHAR uni9B36 +ENCODING 39734 +BBX 15 16 0 -2 +BITMAP +10F8 +7CA8 +10A8 +FE52 +288E +4500 +FFFE +0000 +1FF0 +1010 +1FF0 +0000 +7FFC +4444 +4FE4 +410C +ENDCHAR +STARTCHAR uni9B37 +ENCODING 39735 +BBX 15 16 0 -2 +BITMAP +0028 +FE92 +00AA +7C82 +44FE +7C28 +0044 +FEA2 +823C +AA44 +9244 +FEA8 +9210 +9228 +9244 +8682 +ENDCHAR +STARTCHAR uni9B38 +ENCODING 39736 +BBX 15 16 0 -2 +BITMAP +0020 +FEDE +008A +7CCA +44AA +7CD2 +00A6 +FE00 +82FE +AA92 +9292 +FEFE +9292 +9292 +92FE +8682 +ENDCHAR +STARTCHAR uni9B39 +ENCODING 39737 +BBX 15 16 0 -2 +BITMAP +08F8 +3E88 +08F8 +7E88 +08F8 +1452 +228E +4100 +FFFE +1010 +1FF0 +0000 +7FFC +4444 +4FE4 +410C +ENDCHAR +STARTCHAR uni9B3A +ENCODING 39738 +BBX 15 16 0 -2 +BITMAP +0040 +FE7E +0080 +7D7C +4444 +7C7C +0044 +FE7C +8200 +AAFE +9240 +FEFE +932A +924A +9292 +8626 +ENDCHAR +STARTCHAR uni9B3B +ENCODING 39739 +BBX 15 15 1 -1 +BITMAP +F55C +1104 +77DC +4110 +739C +1544 +FFFE +1010 +1FF0 +0000 +7FFC +4444 +5834 +47C4 +410C +ENDCHAR +STARTCHAR uni9B3C +ENCODING 39740 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0490 +0494 +08BC +1082 +2082 +C07E +ENDCHAR +STARTCHAR uni9B3D +ENCODING 39741 +BBX 15 15 1 -1 +BITMAP +0804 +1008 +7F10 +4960 +4904 +7F08 +4910 +4960 +7F02 +2804 +2A08 +2AB0 +4F82 +4802 +87FE +ENDCHAR +STARTCHAR uni9B3E +ENCODING 39742 +BBX 15 16 0 -2 +BITMAP +0810 +1010 +7F7E +4910 +4910 +7F10 +497C +4904 +7F44 +1028 +1A10 +2CA8 +2FC4 +4884 +4802 +87FE +ENDCHAR +STARTCHAR uni9B3F +ENCODING 39743 +BBX 15 16 0 -2 +BITMAP +0808 +101C +7F60 +4940 +4940 +7F7E +4948 +4948 +7F48 +1048 +1A48 +2C88 +2F88 +4800 +4802 +87FE +ENDCHAR +STARTCHAR uni9B40 +ENCODING 39744 +BBX 15 16 0 -2 +BITMAP +0810 +1010 +7F28 +4928 +4944 +7F82 +4928 +4928 +7F28 +1028 +1A28 +2CA8 +2FA8 +4848 +4802 +87FE +ENDCHAR +STARTCHAR uni9B41 +ENCODING 39745 +BBX 15 15 1 -1 +BITMAP +1008 +2088 +FE48 +9228 +9208 +FE88 +9248 +9228 +FE0E +28F8 +2A08 +2A88 +4FCA +4802 +87FE +ENDCHAR +STARTCHAR uni9B42 +ENCODING 39746 +BBX 15 15 1 -1 +BITMAP +0080 +7080 +07FC +0444 +0444 +FFFC +2444 +2444 +27FC +2928 +492A +5E3E +E620 +0422 +181E +ENDCHAR +STARTCHAR uni9B43 +ENCODING 39747 +BBX 15 15 1 -1 +BITMAP +1028 +2024 +FE24 +93FE +9220 +FE24 +9244 +9244 +FEA8 +2928 +2A10 +2AA8 +4FC6 +4400 +83FE +ENDCHAR +STARTCHAR uni9B44 +ENCODING 39748 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +47FC +F444 +9444 +97FC +9444 +F444 +97FC +9128 +912A +913E +F220 +0422 +181E +ENDCHAR +STARTCHAR uni9B45 +ENCODING 39749 +BBX 15 15 1 -1 +BITMAP +1010 +2010 +FE10 +927C +9210 +FE10 +92FE +9210 +FE38 +5254 +5492 +5510 +5712 +8802 +87FE +ENDCHAR +STARTCHAR uni9B46 +ENCODING 39750 +BBX 15 15 0 -1 +BITMAP +1014 +2012 +7C10 +54FE +5490 +7C94 +5494 +5488 +7C8A +10DA +2AA6 +2D42 +4F00 +4802 +87FE +ENDCHAR +STARTCHAR uni9B47 +ENCODING 39751 +BBX 15 16 0 -2 +BITMAP +3FFC +2090 +3FFC +2140 +2630 +388C +2100 +2FF8 +2888 +2FF8 +2888 +2FF8 +4150 +42FA +8C8A +307E +ENDCHAR +STARTCHAR uni9B48 +ENCODING 39752 +BBX 15 16 0 -2 +BITMAP +0810 +1054 +7F38 +4910 +497C +7F44 +4944 +497C +7F44 +1044 +1A7C +2CC4 +2FC4 +484C +4802 +87FE +ENDCHAR +STARTCHAR uni9B49 +ENCODING 39753 +BBX 15 15 0 -1 +BITMAP +1000 +21FC +7C50 +5450 +55FC +7D54 +5554 +5554 +7DAC +1104 +2B04 +2D14 +4F08 +4802 +87FE +ENDCHAR +STARTCHAR uni9B4A +ENCODING 39754 +BBX 15 15 0 -1 +BITMAP +1010 +2014 +7C12 +57FE +5410 +7DD4 +5554 +55D4 +7C18 +10CA +2B16 +2D22 +4F40 +4802 +87FE +ENDCHAR +STARTCHAR uni9B4B +ENCODING 39755 +BBX 15 15 1 -1 +BITMAP +0848 +1048 +7EFE +4B90 +4A90 +7EFC +4A90 +4A90 +7EFC +2890 +2A90 +2AFE +4F80 +4802 +87FE +ENDCHAR +STARTCHAR uni9B4C +ENCODING 39756 +BBX 15 16 0 -2 +BITMAP +0824 +1024 +7F7E +4924 +4924 +7F3C +4924 +493C +7F24 +1024 +1A7E +2C80 +2FA8 +4844 +4802 +87FE +ENDCHAR +STARTCHAR uni9B4D +ENCODING 39757 +BBX 15 15 1 -1 +BITMAP +1000 +20FE +FE82 +92AA +92AA +FEFE +9292 +9292 +FEFE +50A2 +54A2 +55BA +5F82 +9086 +8FFE +ENDCHAR +STARTCHAR uni9B4E +ENCODING 39758 +BBX 15 15 1 -1 +BITMAP +2000 +43FE +F820 +A820 +ABFE +FA22 +ABBA +AAAA +FAAA +5376 +5222 +5622 +5E26 +9000 +8FFE +ENDCHAR +STARTCHAR uni9B4F +ENCODING 39759 +BBX 15 15 1 -1 +BITMAP +0C40 +F080 +13FC +FE44 +5244 +5BFC +9644 +1244 +13FC +FEA8 +24AA +44BE +28A0 +1922 +E61E +ENDCHAR +STARTCHAR uni9B50 +ENCODING 39760 +BBX 15 15 0 -1 +BITMAP +1088 +2050 +7DFE +5450 +55FC +7C54 +57FE +5454 +7DFC +1050 +2AD8 +2D54 +4F52 +4852 +87FE +ENDCHAR +STARTCHAR uni9B51 +ENCODING 39761 +BBX 15 15 1 -1 +BITMAP +1020 +23FE +F800 +A954 +A924 +F954 +A904 +A9FC +F840 +53FE +5642 +5E92 +52EA +8A06 +87FE +ENDCHAR +STARTCHAR uni9B52 +ENCODING 39762 +BBX 15 15 0 -1 +BITMAP +1000 +21FC +7C50 +55FC +5554 +7DFC +5400 +54F8 +7C00 +11FC +2AA8 +2D24 +4F60 +4802 +87FE +ENDCHAR +STARTCHAR uni9B53 +ENCODING 39763 +BBX 15 15 0 -1 +BITMAP +11FC +2124 +7DFC +5524 +55FC +7CA8 +55FC +54A8 +7CA8 +11FC +2A20 +2DFC +4F20 +4822 +87FE +ENDCHAR +STARTCHAR uni9B54 +ENCODING 39764 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4410 +7F7E +4C18 +5634 +6492 +5FF0 +5110 +5FF0 +5110 +5FF4 +849C +8882 +307E +ENDCHAR +STARTCHAR uni9B55 +ENCODING 39765 +BBX 15 15 0 -1 +BITMAP +1094 +2118 +7DDE +5494 +555A +7DDE +5494 +55FE +7C90 +10D4 +2AAA +2D16 +4F20 +4802 +87FE +ENDCHAR +STARTCHAR uni9B56 +ENCODING 39766 +BBX 15 15 0 -1 +BITMAP +1020 +203E +7C20 +55FE +5522 +7D3C +55E2 +551E +7D28 +11AA +2A6C +2D28 +4F7C +4802 +87FE +ENDCHAR +STARTCHAR uni9B57 +ENCODING 39767 +BBX 15 16 0 -2 +BITMAP +1020 +FE40 +10FC +7C94 +0094 +FEFC +02A4 +7CA4 +10FC +FE20 +0044 +FF6A +026E +FFA0 +AAA2 +E71E +ENDCHAR +STARTCHAR uni9B58 +ENCODING 39768 +BBX 15 14 1 -1 +BITMAP +7FFE +5128 +5FFC +5120 +5F58 +5186 +4FF0 +4910 +4FF0 +4910 +8FF4 +825C +0C42 +703E +ENDCHAR +STARTCHAR uni9B59 +ENCODING 39769 +BBX 15 16 0 -2 +BITMAP +4204 +3FD8 +8A90 +4F9E +2A94 +5FD4 +8224 +1FF0 +1110 +1FF0 +1210 +1FF0 +04A8 +08BA +3082 +C07E +ENDCHAR +STARTCHAR uni9B5A +ENCODING 39770 +BBX 15 15 1 -1 +BITMAP +0400 +0FC0 +1040 +6080 +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +0000 +2488 +4244 +8242 +ENDCHAR +STARTCHAR uni9B5B +ENCODING 39771 +BBX 15 16 0 -2 +BITMAP +2000 +2000 +7CFE +4422 +8822 +7E22 +5222 +5222 +7E22 +5222 +5222 +7E42 +0042 +AA82 +AA94 +0108 +ENDCHAR +STARTCHAR uni9B5C +ENCODING 39772 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7C20 +4420 +8820 +7E20 +5220 +5220 +7E50 +5250 +5250 +7E50 +0048 +AA88 +AA84 +0102 +ENDCHAR +STARTCHAR uni9B5D +ENCODING 39773 +BBX 14 16 0 -2 +BITMAP +1004 +1004 +3E04 +4224 +8424 +7F24 +4924 +4924 +7F24 +4924 +4924 +7F24 +0004 +5504 +4A94 +8A88 +ENDCHAR +STARTCHAR uni9B5E +ENCODING 39774 +BBX 15 15 1 -1 +BITMAP +2000 +3CE0 +2420 +4820 +FC20 +5420 +5420 +7C20 +5450 +5450 +7C50 +0048 +AA88 +A884 +8102 +ENDCHAR +STARTCHAR uni9B5F +ENCODING 39775 +BBX 15 15 0 -1 +BITMAP +2000 +2000 +7C7C +4410 +8810 +7E10 +5210 +5210 +7E10 +5210 +5210 +7E10 +0010 +AA10 +AAFE +ENDCHAR +STARTCHAR uni9B60 +ENCODING 39776 +BBX 15 15 0 -1 +BITMAP +2008 +203C +79E0 +4820 +9020 +7C20 +5420 +543E +7DE0 +5420 +5420 +7C22 +0022 +AA22 +AA1E +ENDCHAR +STARTCHAR uni9B61 +ENCODING 39777 +BBX 14 16 0 -2 +BITMAP +2040 +2040 +7C40 +447C +8884 +7E84 +5304 +5244 +7E24 +5224 +5204 +7E04 +0004 +AA04 +AA28 +0010 +ENDCHAR +STARTCHAR uni9B62 +ENCODING 39778 +BBX 15 15 0 -1 +BITMAP +2000 +2000 +7CFC +4404 +8804 +7E04 +5204 +52FC +7E84 +5280 +5280 +7E80 +0082 +AA82 +AA7E +ENDCHAR +STARTCHAR uni9B63 +ENCODING 39779 +BBX 15 15 1 -1 +BITMAP +2000 +39FC +4804 +9088 +7C50 +5420 +57FE +7C22 +5424 +5420 +7C20 +0020 +AA20 +A820 +80E0 +ENDCHAR +STARTCHAR uni9B64 +ENCODING 39780 +BBX 15 16 0 -2 +BITMAP +2050 +2050 +7850 +4892 +9092 +7D94 +5698 +5490 +7CB0 +54D0 +5490 +7C90 +0092 +AA92 +AA8E +0080 +ENDCHAR +STARTCHAR uni9B65 +ENCODING 39781 +BBX 15 15 1 -1 +BITMAP +2000 +3BF8 +4888 +9088 +7C90 +54FC +5484 +7C84 +5544 +5528 +7D10 +0110 +AA28 +AC44 +8182 +ENDCHAR +STARTCHAR uni9B66 +ENCODING 39782 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +2420 +48A8 +FCA8 +5524 +5622 +7C20 +5424 +5424 +7CE8 +0008 +AA10 +A820 +81C0 +ENDCHAR +STARTCHAR uni9B67 +ENCODING 39783 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +7C10 +44FE +8800 +7E00 +5278 +5248 +7E48 +5248 +5248 +7E4A +004A +AA8A +AA86 +0100 +ENDCHAR +STARTCHAR uni9B68 +ENCODING 39784 +BBX 15 15 0 -1 +BITMAP +2020 +2020 +7C20 +45FC +8820 +7EA8 +52A8 +52A8 +7EA8 +52A8 +52F8 +7E22 +0022 +AA22 +AA1E +ENDCHAR +STARTCHAR uni9B69 +ENCODING 39785 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7C40 +447E +88AA +7F2A +522A +524A +7E4A +5292 +5312 +7E22 +0022 +AA42 +AA94 +0008 +ENDCHAR +STARTCHAR uni9B6A +ENCODING 39786 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7C10 +4428 +8828 +7E44 +5282 +5248 +7E48 +5248 +5248 +7E48 +0048 +AA88 +AA88 +0108 +ENDCHAR +STARTCHAR uni9B6B +ENCODING 39787 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +4820 +91FE +7D22 +5522 +5420 +7C20 +5430 +5450 +7C50 +0050 +AA92 +A892 +810E +ENDCHAR +STARTCHAR uni9B6C +ENCODING 39788 +BBX 15 15 1 -1 +BITMAP +2000 +39FE +4900 +9100 +7D00 +55FC +5544 +7D44 +5544 +5528 +7D28 +0110 +AA28 +AA44 +8082 +ENDCHAR +STARTCHAR uni9B6D +ENCODING 39789 +BBX 15 16 0 -2 +BITMAP +2000 +20FC +7C00 +4400 +8800 +7EFE +5250 +5250 +7E50 +5250 +5250 +7E52 +0052 +AA92 +AA8E +0100 +ENDCHAR +STARTCHAR uni9B6E +ENCODING 39790 +BBX 15 15 0 -1 +BITMAP +2010 +2090 +7C90 +4492 +8892 +7E94 +52F4 +5298 +7E90 +5290 +5290 +7E92 +00B2 +AAD2 +AA8E +ENDCHAR +STARTCHAR uni9B6F +ENCODING 39791 +BBX 15 15 1 -1 +BITMAP +0800 +1FC0 +6080 +3FF8 +2108 +3FF8 +2108 +3FF8 +4444 +8222 +3FF8 +2008 +3FF8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni9B70 +ENCODING 39792 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +7C20 +45FE +8888 +7E88 +5288 +5288 +7E88 +5250 +5250 +7E20 +0020 +AA50 +AA88 +0106 +ENDCHAR +STARTCHAR uni9B71 +ENCODING 39793 +BBX 15 15 0 -1 +BITMAP +2000 +21FE +7C20 +4420 +8820 +7E3C +5244 +5244 +7E44 +5284 +52FC +7E08 +0008 +AA08 +ABFE +ENDCHAR +STARTCHAR uni9B72 +ENCODING 39794 +BBX 14 15 1 -1 +BITMAP +200C +3DF0 +2500 +4900 +FDFC +5504 +5504 +7DFC +5500 +5500 +7D00 +0100 +AB00 +A900 +8200 +ENDCHAR +STARTCHAR uni9B73 +ENCODING 39795 +BBX 15 15 1 -1 +BITMAP +2000 +3BFE +4820 +9020 +7DFC +5524 +5524 +7D24 +5524 +5524 +7D24 +0124 +AB2C +A820 +8020 +ENDCHAR +STARTCHAR uni9B74 +ENCODING 39796 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +2420 +49FE +FC40 +5440 +547C +7C44 +5444 +5444 +7C44 +0084 +AA84 +A904 +8238 +ENDCHAR +STARTCHAR uni9B75 +ENCODING 39797 +BBX 15 15 1 -1 +BITMAP +2070 +3C10 +2490 +4888 +FD08 +5504 +5602 +7CF8 +5448 +5448 +7C48 +0088 +AA88 +A908 +8230 +ENDCHAR +STARTCHAR uni9B76 +ENCODING 39798 +BBX 15 15 1 -1 +BITMAP +2060 +3820 +4820 +91FE +7D22 +5522 +5522 +7D52 +5552 +558A +7D06 +0102 +AB02 +A902 +8106 +ENDCHAR +STARTCHAR uni9B77 +ENCODING 39799 +BBX 15 15 1 -1 +BITMAP +2028 +3824 +4824 +91FE +7C20 +5420 +5420 +7C20 +5430 +5450 +7C50 +0050 +AA92 +A892 +810E +ENDCHAR +STARTCHAR uni9B78 +ENCODING 39800 +BBX 15 16 0 -2 +BITMAP +2010 +2090 +7890 +4890 +9090 +7CFE +5480 +5480 +7C80 +54F8 +5488 +7C88 +0088 +AA88 +AA88 +0108 +ENDCHAR +STARTCHAR uni9B79 +ENCODING 39801 +BBX 15 15 1 -1 +BITMAP +2018 +3DE0 +2440 +4840 +FC40 +547C +55C0 +7C40 +5440 +547E +7FC0 +0040 +AA42 +A842 +803E +ENDCHAR +STARTCHAR uni9B7A +ENCODING 39802 +BBX 15 16 0 -2 +BITMAP +2000 +2000 +7DFE +4404 +8804 +7EF4 +5294 +5294 +7E94 +5294 +52F4 +7E94 +0004 +AA04 +AA14 +0008 +ENDCHAR +STARTCHAR uni9B7B +ENCODING 39803 +BBX 14 16 0 -2 +BITMAP +2000 +21FC +7924 +4924 +9124 +7DFC +5524 +5524 +7D24 +55FC +5524 +7C20 +0020 +AA20 +AA20 +0020 +ENDCHAR +STARTCHAR uni9B7C +ENCODING 39804 +BBX 15 15 0 -1 +BITMAP +2020 +2020 +7820 +49FC +9020 +7C20 +5420 +55FE +7C20 +5420 +5440 +7C48 +0084 +ABFE +AA82 +ENDCHAR +STARTCHAR uni9B7D +ENCODING 39805 +BBX 15 16 0 -2 +BITMAP +2044 +2044 +7C44 +4444 +88FE +7E44 +5244 +5244 +7E44 +527C +5244 +7E44 +0044 +AA44 +AA7C +0044 +ENDCHAR +STARTCHAR uni9B7E +ENCODING 39806 +BBX 15 15 0 -1 +BITMAP +2000 +21FE +7C10 +4410 +8820 +7E20 +5268 +52A4 +7F22 +5222 +5220 +7E20 +0020 +AA00 +ABFE +ENDCHAR +STARTCHAR uni9B7F +ENCODING 39807 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7850 +4850 +9088 +7D24 +5612 +5410 +7DFC +5404 +5408 +7C88 +0050 +AA20 +AA10 +0010 +ENDCHAR +STARTCHAR uni9B80 +ENCODING 39808 +BBX 15 15 0 -1 +BITMAP +2020 +2010 +7C10 +44FE +8882 +7E84 +5240 +5244 +7E48 +5250 +5260 +7E42 +0042 +AA42 +AA3E +ENDCHAR +STARTCHAR uni9B81 +ENCODING 39809 +BBX 15 16 0 -2 +BITMAP +2050 +2048 +7848 +4840 +91FE +7C40 +5440 +547C +7CA4 +54A4 +54A8 +7D28 +0110 +AA28 +AA44 +0082 +ENDCHAR +STARTCHAR uni9B82 +ENCODING 39810 +BBX 15 16 0 -2 +BITMAP +2000 +20FE +7C82 +4492 +8892 +7E92 +5292 +5292 +7E92 +52AA +52A6 +7EC6 +0082 +AA82 +AAFE +0082 +ENDCHAR +STARTCHAR uni9B83 +ENCODING 39811 +BBX 15 15 1 -1 +BITMAP +2000 +3DFC +2420 +48A8 +FCA4 +5522 +5622 +7C20 +57FE +5420 +7C20 +0020 +AA20 +A820 +8020 +ENDCHAR +STARTCHAR uni9B84 +ENCODING 39812 +BBX 15 15 1 -1 +BITMAP +2050 +3C50 +25FC +4854 +FC54 +55FC +5550 +7D50 +55FE +5452 +7C52 +0052 +AA92 +A916 +8210 +ENDCHAR +STARTCHAR uni9B85 +ENCODING 39813 +BBX 15 15 0 -1 +BITMAP +2010 +2008 +7C08 +4402 +8822 +7E24 +5224 +52A8 +7EAC +52B2 +5332 +7E20 +0062 +AAA2 +AB1E +ENDCHAR +STARTCHAR uni9B86 +ENCODING 39814 +BBX 14 16 0 -2 +BITMAP +0880 +2888 +2EF0 +2884 +2E84 +F07C +0800 +0FE0 +1040 +3FF0 +5110 +1FF0 +1110 +1FF0 +2488 +4244 +ENDCHAR +STARTCHAR uni9B87 +ENCODING 39815 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7820 +49FC +9020 +7C20 +5420 +57FE +7C70 +54A8 +54A8 +7D24 +0124 +AA22 +AA20 +0020 +ENDCHAR +STARTCHAR uni9B88 +ENCODING 39816 +BBX 14 16 0 -2 +BITMAP +2040 +2040 +7C40 +44FC +8884 +7F04 +52F4 +5294 +7E94 +5294 +5294 +7EF4 +0094 +AA04 +AA28 +0010 +ENDCHAR +STARTCHAR uni9B89 +ENCODING 39817 +BBX 14 16 0 -2 +BITMAP +2000 +21FC +7C44 +4444 +8844 +7E44 +5294 +5288 +7F00 +52FC +5284 +7E84 +0084 +AA84 +AAFC +0084 +ENDCHAR +STARTCHAR uni9B8A +ENCODING 39818 +BBX 14 15 1 -1 +BITMAP +2020 +3C20 +2440 +49FC +FD04 +5504 +5504 +7D04 +55FC +5504 +7D04 +0104 +AB04 +A904 +81FC +ENDCHAR +STARTCHAR uni9B8B +ENCODING 39819 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7C10 +4410 +88FE +7E92 +5292 +5292 +7E92 +52FE +5292 +7E92 +0092 +AA92 +AAFE +0082 +ENDCHAR +STARTCHAR uni9B8C +ENCODING 39820 +BBX 15 15 0 -1 +BITMAP +2010 +2008 +7C08 +44FE +8810 +7E10 +5220 +5242 +7EFC +5248 +5210 +7E20 +0044 +AAFE +AA42 +ENDCHAR +STARTCHAR uni9B8D +ENCODING 39821 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7810 +49FE +9112 +7D14 +5510 +55FC +7D44 +5544 +5528 +7D28 +0110 +AA28 +AA44 +0482 +ENDCHAR +STARTCHAR uni9B8E +ENCODING 39822 +BBX 14 15 1 -1 +BITMAP +2020 +3C20 +4420 +8820 +7C3C +5420 +5420 +7C20 +55FC +5504 +7D04 +0104 +AB04 +A904 +81FC +ENDCHAR +STARTCHAR uni9B8F +ENCODING 39823 +BBX 15 15 1 -1 +BITMAP +2020 +3D20 +2520 +4920 +FDFC +5520 +5620 +7C20 +5420 +54F8 +7C20 +0020 +AA20 +A820 +83FE +ENDCHAR +STARTCHAR uni9B90 +ENCODING 39824 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7C20 +4440 +8848 +7E84 +53FE +5282 +7E00 +52FC +5284 +7E84 +0084 +AA84 +AAFC +0084 +ENDCHAR +STARTCHAR uni9B91 +ENCODING 39825 +BBX 15 15 1 -1 +BITMAP +2080 +3C80 +24FC +4884 +FD04 +57F4 +5514 +7D14 +55F4 +5504 +7D18 +0100 +AB00 +A902 +80FE +ENDCHAR +STARTCHAR uni9B92 +ENCODING 39826 +BBX 15 15 1 -1 +BITMAP +2044 +3844 +4884 +90BE +7D84 +5584 +56A4 +7C94 +5494 +5484 +7C84 +0084 +AA84 +A884 +809C +ENDCHAR +STARTCHAR uni9B93 +ENCODING 39827 +BBX 15 15 1 -1 +BITMAP +2080 +3C80 +2480 +49FE +FD20 +5620 +5420 +7C3C +5420 +5420 +7C20 +003C +AA20 +AA20 +8020 +ENDCHAR +STARTCHAR uni9B94 +ENCODING 39828 +BBX 15 15 0 -1 +BITMAP +2000 +20FE +7C80 +4480 +8880 +7EFC +5284 +5284 +7E84 +5284 +52FC +7E80 +0080 +AA80 +AAFE +ENDCHAR +STARTCHAR uni9B95 +ENCODING 39829 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7C10 +4410 +88FE +7E10 +5210 +5210 +7E7C +5244 +5244 +7E44 +0044 +AA44 +AA7C +0044 +ENDCHAR +STARTCHAR uni9B96 +ENCODING 39830 +BBX 15 15 1 -1 +BITMAP +2000 +3DFE +2440 +4840 +FC40 +5440 +5480 +7CFC +5584 +5584 +7E84 +0084 +AA84 +A884 +80FC +ENDCHAR +STARTCHAR uni9B97 +ENCODING 39831 +BBX 15 15 1 -1 +BITMAP +2040 +3C40 +247C +4884 +FD88 +5450 +5420 +7C58 +5586 +5420 +7C10 +0000 +AA60 +A810 +8008 +ENDCHAR +STARTCHAR uni9B98 +ENCODING 39832 +BBX 15 16 0 -2 +BITMAP +2050 +2054 +7852 +4892 +9090 +7D96 +55F8 +5690 +7C90 +5490 +5490 +7C90 +008A +AA8A +AA86 +0082 +ENDCHAR +STARTCHAR uni9B99 +ENCODING 39833 +BBX 15 16 0 -2 +BITMAP +2000 +20EE +7C22 +4422 +88AA +7E66 +5222 +5222 +7E26 +526A +52B2 +7E22 +0022 +AA22 +AAAA +0044 +ENDCHAR +STARTCHAR uni9B9A +ENCODING 39834 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7C10 +44FE +8810 +7E10 +527C +5200 +7E00 +527C +5244 +7E44 +0044 +AA44 +AA7C +0044 +ENDCHAR +STARTCHAR uni9B9B +ENCODING 39835 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7820 +483C +9020 +7C20 +55FE +5400 +7C20 +5420 +54A8 +7CA4 +0122 +AA22 +AAA0 +0040 +ENDCHAR +STARTCHAR uni9B9C +ENCODING 39836 +BBX 15 16 0 -2 +BITMAP +2008 +201C +79E0 +4900 +9100 +7DFE +5500 +5500 +7D7C +5544 +5544 +7D44 +0144 +AA7C +AA44 +0400 +ENDCHAR +STARTCHAR uni9B9D +ENCODING 39837 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +7FFC +0200 +FFFE +0820 +3418 +CFE6 +1040 +3FF0 +5110 +1FF0 +1110 +1FF0 +2488 +4244 +ENDCHAR +STARTCHAR uni9B9E +ENCODING 39838 +BBX 15 15 1 -1 +BITMAP +2000 +3FFE +2420 +4840 +FDFC +5554 +5554 +7D54 +5554 +5554 +7D54 +0154 +AB54 +A954 +810C +ENDCHAR +STARTCHAR uni9B9F +ENCODING 39839 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +25FC +4904 +FD44 +5440 +57FE +7C48 +5448 +5488 +7D90 +0050 +AA30 +A848 +8184 +ENDCHAR +STARTCHAR uni9BA0 +ENCODING 39840 +BBX 15 15 1 -1 +BITMAP +2040 +3C7C +2488 +4B10 +FDFE +5500 +5500 +7D7C +5544 +5544 +7D4C +0140 +AA42 +AA42 +803E +ENDCHAR +STARTCHAR uni9BA1 +ENCODING 39841 +BBX 15 16 0 -2 +BITMAP +2050 +2050 +7850 +4952 +90D4 +7C58 +5450 +5458 +7CD4 +5552 +5450 +7C50 +0092 +AA92 +AB12 +020E +ENDCHAR +STARTCHAR uni9BA2 +ENCODING 39842 +BBX 15 16 0 -2 +BITMAP +2020 +2120 +7920 +49FC +9120 +7E20 +5420 +57FE +7C70 +54A8 +54A8 +7D24 +0124 +AA22 +AA20 +0020 +ENDCHAR +STARTCHAR uni9BA3 +ENCODING 39843 +BBX 15 16 0 -2 +BITMAP +2000 +2040 +799E +4912 +9112 +7D12 +55D2 +5512 +7D12 +5512 +555A +7D94 +0110 +AA10 +AA10 +0010 +ENDCHAR +STARTCHAR uni9BA4 +ENCODING 39844 +BBX 14 16 0 -2 +BITMAP +7F84 +0824 +1F24 +2124 +5624 +1804 +E414 +0FE8 +1040 +3FF0 +5110 +1FF0 +1110 +1FF0 +2488 +4244 +ENDCHAR +STARTCHAR uni9BA5 +ENCODING 39845 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7C78 +4488 +8950 +7E20 +5250 +5288 +7F06 +52F8 +5288 +7E88 +0088 +AA88 +AAF8 +0088 +ENDCHAR +STARTCHAR uni9BA6 +ENCODING 39846 +BBX 15 15 1 -1 +BITMAP +2000 +39FE +4902 +9102 +7D7A +5502 +5502 +7D7A +554A +554A +7D4A +017A +AB02 +A902 +810E +ENDCHAR +STARTCHAR uni9BA7 +ENCODING 39847 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +27FE +4820 +FDFC +5424 +55FC +7D20 +5520 +55FE +7C22 +0052 +AA96 +A908 +8206 +ENDCHAR +STARTCHAR uni9BA8 +ENCODING 39848 +BBX 15 15 1 -1 +BITMAP +2100 +3D00 +250C +49F0 +FD02 +5502 +54FE +7C00 +54FC +5484 +7C84 +00FC +AA84 +A884 +80FC +ENDCHAR +STARTCHAR uni9BA9 +ENCODING 39849 +BBX 15 16 0 -2 +BITMAP +2084 +2048 +7C00 +44FC +8848 +7E48 +5248 +5248 +7FFE +5248 +5248 +7E48 +0048 +AA88 +AA88 +0108 +ENDCHAR +STARTCHAR uni9BAA +ENCODING 39850 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +4BFE +9040 +7C40 +54FC +5584 +7E84 +54FC +5484 +7C84 +00FC +AA84 +A884 +809C +ENDCHAR +STARTCHAR uni9BAB +ENCODING 39851 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +4820 +93FE +7C88 +5504 +5602 +7C88 +5488 +5450 +7C50 +0020 +AA50 +A888 +8306 +ENDCHAR +STARTCHAR uni9BAC +ENCODING 39852 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +4BFE +9050 +7C88 +5706 +54F8 +7C00 +57FE +5440 +7C7C +0084 +AA04 +A804 +8018 +ENDCHAR +STARTCHAR uni9BAD +ENCODING 39853 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +4820 +91FC +7C20 +5420 +55FE +7C20 +5420 +5420 +7DFC +0020 +AA20 +A820 +83FE +ENDCHAR +STARTCHAR uni9BAE +ENCODING 39854 +BBX 15 15 1 -1 +BITMAP +2084 +3844 +4848 +93FE +7C20 +5420 +55FC +7C20 +5420 +5420 +7FFE +0020 +AA20 +A820 +8020 +ENDCHAR +STARTCHAR uni9BAF +ENCODING 39855 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7850 +4850 +9088 +7D04 +56FA +5400 +7C00 +54F8 +5488 +7C88 +0088 +AA88 +AAF8 +0088 +ENDCHAR +STARTCHAR uni9BB0 +ENCODING 39856 +BBX 15 15 0 -1 +BITMAP +2000 +2000 +7CFE +4482 +8882 +7EBA +52AA +52AA +7EAA +52AA +52BA +7E82 +0082 +AAFE +AA82 +ENDCHAR +STARTCHAR uni9BB1 +ENCODING 39857 +BBX 15 15 1 -1 +BITMAP +2044 +3844 +49FC +9044 +7C48 +5448 +57FE +7C20 +5440 +54CC +7F70 +0040 +AA40 +A842 +803E +ENDCHAR +STARTCHAR uni9BB2 +ENCODING 39858 +BBX 15 15 1 -1 +BITMAP +2090 +3894 +4892 +9112 +7D10 +57FE +5510 +7D10 +5510 +5528 +7D28 +0128 +AB44 +A944 +8182 +ENDCHAR +STARTCHAR uni9BB3 +ENCODING 39859 +BBX 15 16 0 -2 +BITMAP +2040 +2044 +79F4 +4848 +9050 +7DFE +5440 +5480 +7DFE +5640 +5480 +7CFC +0004 +AA04 +AA28 +0010 +ENDCHAR +STARTCHAR uni9BB4 +ENCODING 39860 +BBX 15 15 1 -1 +BITMAP +2090 +3C90 +2490 +4910 +FDFE +5710 +5510 +7D38 +5538 +5554 +7D54 +0192 +AB10 +A910 +8110 +ENDCHAR +STARTCHAR uni9BB5 +ENCODING 39861 +BBX 15 16 0 -2 +BITMAP +2084 +2044 +7C48 +4400 +88FC +7E84 +5284 +5284 +7EFC +5248 +5248 +7E48 +0048 +AA8A +AA8A +0106 +ENDCHAR +STARTCHAR uni9BB6 +ENCODING 39862 +BBX 15 16 0 -2 +BITMAP +2000 +20FC +7C24 +4424 +89FE +7E24 +5224 +52FC +7E40 +5240 +52FC +7EC4 +0144 +AA44 +AA7C +0044 +ENDCHAR +STARTCHAR uni9BB7 +ENCODING 39863 +BBX 15 16 0 -2 +BITMAP +2088 +2048 +7850 +49FC +9024 +7C24 +55FC +5520 +7D20 +55FE +5422 +7C22 +006A +AAA4 +AB20 +0020 +ENDCHAR +STARTCHAR uni9BB8 +ENCODING 39864 +BBX 15 15 1 -1 +BITMAP +2040 +3878 +4848 +9090 +7DFC +5724 +5524 +7D44 +55FC +5450 +7C50 +0090 +AA92 +A912 +820E +ENDCHAR +STARTCHAR uni9BB9 +ENCODING 39865 +BBX 15 15 1 -1 +BITMAP +2124 +3D22 +2622 +4820 +FDFC +5504 +5504 +7DFC +5504 +5504 +7DFC +0104 +AB04 +A904 +811C +ENDCHAR +STARTCHAR uni9BBA +ENCODING 39866 +BBX 15 16 0 -2 +BITMAP +0440 +7FFC +0100 +3FF8 +0400 +FFFE +1400 +2FE0 +D040 +3FF0 +5110 +1FF0 +1110 +1FF0 +2488 +4244 +ENDCHAR +STARTCHAR uni9BBB +ENCODING 39867 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7C20 +4444 +88FE +7E28 +5244 +52A2 +7E3C +5244 +5244 +7EA8 +0010 +AA28 +AA44 +0082 +ENDCHAR +STARTCHAR uni9BBC +ENCODING 39868 +BBX 15 16 0 -2 +BITMAP +2000 +20FC +7804 +487C +9004 +7CFC +5400 +55FE +7D02 +54FC +5444 +7C44 +0028 +AA10 +AA68 +0186 +ENDCHAR +STARTCHAR uni9BBD +ENCODING 39869 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7C28 +4428 +8844 +7EBA +5210 +5210 +7EFE +5210 +5258 +7E54 +0092 +AB12 +AA50 +0020 +ENDCHAR +STARTCHAR uni9BBE +ENCODING 39870 +BBX 15 15 1 -1 +BITMAP +2018 +39E8 +4944 +9124 +7D22 +5602 +5440 +7DFE +5448 +5488 +7C90 +01D0 +AA30 +A8C8 +8304 +ENDCHAR +STARTCHAR uni9BBF +ENCODING 39871 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +7920 +4928 +9128 +7DE8 +5528 +5528 +7D28 +55E8 +5528 +7D2A +013A +ABEA +AA26 +0020 +ENDCHAR +STARTCHAR uni9BC0 +ENCODING 39872 +BBX 15 15 1 -1 +BITMAP +2018 +3DE0 +2440 +4848 +FD90 +5460 +5428 +7C4C +55F2 +5420 +7C20 +00A8 +AAA8 +A924 +8020 +ENDCHAR +STARTCHAR uni9BC1 +ENCODING 39873 +BBX 15 15 1 -1 +BITMAP +2000 +3FFE +2420 +49FC +FD24 +5524 +55FC +7D24 +5524 +55FC +7C20 +00A0 +AA40 +A8B0 +830E +ENDCHAR +STARTCHAR uni9BC2 +ENCODING 39874 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +7C28 +4428 +88FE +7EAA +52AA +52AA +7EC6 +5282 +5282 +7EFE +0082 +AA82 +AAFE +0082 +ENDCHAR +STARTCHAR uni9BC3 +ENCODING 39875 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +7820 +4820 +90FC +7C44 +5444 +55FE +7C00 +5400 +54FC +7C84 +0084 +AA84 +AAFC +0084 +ENDCHAR +STARTCHAR uni9BC4 +ENCODING 39876 +BBX 15 16 0 -2 +BITMAP +2028 +2024 +7824 +4820 +91FE +7C20 +5520 +54B2 +7CB4 +5468 +54A8 +7D24 +0222 +AA20 +AAA0 +0040 +ENDCHAR +STARTCHAR uni9BC5 +ENCODING 39877 +BBX 15 15 0 -1 +BITMAP +2004 +200E +7BB8 +4888 +9088 +7D28 +552E +57A8 +7CA8 +56A8 +56A8 +7D3E +0100 +AA80 +AA7E +ENDCHAR +STARTCHAR uni9BC6 +ENCODING 39878 +BBX 15 15 1 -1 +BITMAP +2028 +3C24 +27FE +4820 +FC20 +55FC +5524 +7D24 +55FC +5524 +7D24 +01FC +AB24 +A924 +812C +ENDCHAR +STARTCHAR uni9BC7 +ENCODING 39879 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +49FE +9102 +7D02 +54FC +5400 +7C00 +55FE +5490 +7C90 +0090 +AA92 +A912 +820E +ENDCHAR +STARTCHAR uni9BC8 +ENCODING 39880 +BBX 15 16 0 -2 +BITMAP +1080 +11F8 +1288 +2070 +2B8E +6880 +68F8 +A910 +2BFC +2D24 +29FC +2924 +29FC +2000 +2154 +222A +ENDCHAR +STARTCHAR uni9BC9 +ENCODING 39881 +BBX 15 15 1 -1 +BITMAP +2000 +39FC +4924 +9124 +7DFC +5524 +5524 +7D24 +55FC +5420 +7C20 +01FC +AA20 +A820 +83FE +ENDCHAR +STARTCHAR uni9BCA +ENCODING 39882 +BBX 15 15 1 -1 +BITMAP +3020 +08A8 +C124 +2262 +0808 +3030 +CFC0 +1080 +7FF0 +1110 +1FF0 +1110 +1FF0 +2448 +C226 +ENDCHAR +STARTCHAR uni9BCB +ENCODING 39883 +BBX 15 16 0 -2 +BITMAP +2008 +2108 +7888 +4808 +912C +7CAA +54AA +5448 +7C48 +548A +558A +7C84 +0084 +AA88 +AA90 +0060 +ENDCHAR +STARTCHAR uni9BCC +ENCODING 39884 +BBX 15 16 0 -2 +BITMAP +2010 +2050 +7C50 +447C +8850 +7E90 +5210 +52FE +7E00 +5200 +527C +7E44 +0044 +AA44 +AA7C +0044 +ENDCHAR +STARTCHAR uni9BCD +ENCODING 39885 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +79FE +4820 +9048 +7C84 +55FE +5402 +7CA8 +54A8 +54A8 +7CA8 +00A8 +AAAA +AB2A +0206 +ENDCHAR +STARTCHAR uni9BCE +ENCODING 39886 +BBX 15 15 1 -1 +BITMAP +2014 +3C12 +2410 +49FE +FD10 +5510 +5510 +7DF4 +5554 +5554 +7D58 +0148 +ABDA +A92A +8244 +ENDCHAR +STARTCHAR uni9BCF +ENCODING 39887 +BBX 15 15 1 -1 +BITMAP +2032 +3DC2 +244A +484A +FC4A +55FA +544A +7C4A +54EA +54DA +7D4A +004A +AA42 +A842 +8046 +ENDCHAR +STARTCHAR uni9BD0 +ENCODING 39888 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7C7C +4410 +8810 +7E10 +52FE +5210 +7E10 +5250 +525C +7E50 +0070 +AA90 +AA8E +0100 +ENDCHAR +STARTCHAR uni9BD1 +ENCODING 39889 +BBX 15 15 1 -1 +BITMAP +2088 +3C50 +2460 +4998 +FC40 +57FE +5480 +7CA0 +55FC +5724 +7D24 +0124 +AB2C +A820 +8020 +ENDCHAR +STARTCHAR uni9BD2 +ENCODING 39890 +BBX 14 15 1 -1 +BITMAP +2000 +3DFC +2408 +48D0 +FC20 +55FC +5524 +7D24 +55FC +5524 +7D24 +01FC +AB24 +A924 +812C +ENDCHAR +STARTCHAR uni9BD3 +ENCODING 39891 +BBX 15 16 0 -2 +BITMAP +2020 +2040 +78F8 +4888 +90F8 +7C88 +54F8 +548A +7C8C +55F8 +5418 +7C28 +0048 +AA88 +AB28 +0010 +ENDCHAR +STARTCHAR uni9BD4 +ENCODING 39892 +BBX 14 15 1 -1 +BITMAP +2124 +3D24 +2648 +4A48 +FD24 +5524 +5400 +7DFC +5524 +5524 +7DFC +0124 +AB24 +A924 +81FC +ENDCHAR +STARTCHAR uni9BD5 +ENCODING 39893 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +79FC +4888 +9088 +7CF8 +5488 +5488 +7CF8 +5488 +5488 +7DFE +0000 +AA50 +AA88 +0104 +ENDCHAR +STARTCHAR uni9BD6 +ENCODING 39894 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +4BFE +9020 +7DFC +5420 +57FE +7C00 +55FC +5524 +7D24 +01FC +AB04 +A904 +811C +ENDCHAR +STARTCHAR uni9BD7 +ENCODING 39895 +BBX 15 16 0 -2 +BITMAP +0440 +7FFC +0100 +3FF8 +0400 +FFFE +1410 +2FE8 +D046 +3FF0 +5110 +1FF0 +1110 +1FF0 +2488 +4244 +ENDCHAR +STARTCHAR uni9BD8 +ENCODING 39896 +BBX 15 15 1 -1 +BITMAP +1018 +3DE0 +4420 +8BFE +7CA8 +5524 +5622 +7C40 +57FE +5448 +7C88 +01D0 +A830 +A868 +8384 +ENDCHAR +STARTCHAR uni9BD9 +ENCODING 39897 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +79FE +4800 +90FC +7C84 +54FC +5400 +7CFC +5408 +5410 +7DFE +0010 +AA10 +AA50 +0020 +ENDCHAR +STARTCHAR uni9BDA +ENCODING 39898 +BBX 15 16 0 -2 +BITMAP +201C +20E0 +7820 +49FE +9070 +7CA8 +5524 +5622 +7CF8 +5410 +5420 +7DFE +0020 +AA20 +AAA0 +0040 +ENDCHAR +STARTCHAR uni9BDB +ENCODING 39899 +BBX 15 15 1 -1 +BITMAP +2000 +3DFE +2522 +4922 +FDFA +5522 +5522 +7D7A +5502 +557A +7D4A +014A +AB7A +A902 +8206 +ENDCHAR +STARTCHAR uni9BDC +ENCODING 39900 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +7CFE +4400 +8844 +7E28 +53FE +5220 +7E20 +53FE +5244 +7EC4 +0028 +AA18 +AA64 +0182 +ENDCHAR +STARTCHAR uni9BDD +ENCODING 39901 +BBX 15 15 1 -1 +BITMAP +2000 +39FE +4902 +9122 +7D22 +55FE +5522 +7D22 +557A +554A +7D4A +014A +AB7A +A902 +81FE +ENDCHAR +STARTCHAR uni9BDE +ENCODING 39902 +BBX 15 16 0 -2 +BITMAP +2000 +20FC +7804 +487C +9004 +7CFC +5400 +55FE +7D22 +5420 +54FC +7CA4 +00A4 +AAB4 +AAA8 +0020 +ENDCHAR +STARTCHAR uni9BDF +ENCODING 39903 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7CFE +4410 +8810 +7EFE +5292 +52FE +7E92 +52FE +5210 +7E38 +0054 +AA92 +AA10 +0010 +ENDCHAR +STARTCHAR uni9BE0 +ENCODING 39904 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7C10 +44FE +8810 +7E54 +5254 +5254 +7EBA +5210 +5238 +7E54 +0092 +AA10 +AA10 +0010 +ENDCHAR +STARTCHAR uni9BE1 +ENCODING 39905 +BBX 15 15 1 -1 +BITMAP +2048 +3C48 +2448 +49CE +FC48 +5448 +5448 +7DCE +5448 +5448 +7CC8 +014E +AA88 +A888 +8108 +ENDCHAR +STARTCHAR uni9BE2 +ENCODING 39906 +BBX 15 15 1 -1 +BITMAP +2040 +3C80 +251C +4904 +FD04 +55DC +5504 +7D04 +55FC +5490 +7C90 +0090 +AB12 +A912 +820E +ENDCHAR +STARTCHAR uni9BE3 +ENCODING 39907 +BBX 15 15 1 -1 +BITMAP +2000 +3CF8 +2488 +48F8 +FC88 +5488 +54F8 +7C80 +54FE +552A +7E2A +004A +AA92 +A922 +804C +ENDCHAR +STARTCHAR uni9BE4 +ENCODING 39908 +BBX 15 15 1 -1 +BITMAP +2000 +3DFC +2504 +49FC +FD04 +5504 +55FC +7D10 +5510 +5512 +7DDC +0110 +AB10 +A9D2 +830E +ENDCHAR +STARTCHAR uni9BE5 +ENCODING 39909 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +25FC +4820 +FC20 +57FE +5488 +7C88 +570E +5420 +7C20 +01FC +AA20 +A820 +83FE +ENDCHAR +STARTCHAR uni9BE6 +ENCODING 39910 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +78E8 +492C +912A +7EA8 +5448 +54A0 +7D1E +5600 +54FC +7C84 +0084 +AA84 +AAFC +0084 +ENDCHAR +STARTCHAR uni9BE7 +ENCODING 39911 +BBX 15 15 1 -1 +BITMAP +2000 +38FC +4884 +90FC +7C84 +5484 +54FC +7C00 +55FE +5502 +7D02 +01FE +AB02 +A902 +81FE +ENDCHAR +STARTCHAR uni9BE8 +ENCODING 39912 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +4BFE +9000 +7CF8 +5488 +5488 +7C88 +54F8 +5420 +7CA8 +0124 +AA22 +A820 +8060 +ENDCHAR +STARTCHAR uni9BE9 +ENCODING 39913 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7C28 +4444 +8882 +7F7C +5200 +52FE +7EAA +52AA +52FE +7EAA +00AA +AAAA +AA82 +0086 +ENDCHAR +STARTCHAR uni9BEA +ENCODING 39914 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +49FC +9020 +7FFE +5488 +5488 +7D0E +5640 +547C +7C84 +0388 +A850 +A870 +838E +ENDCHAR +STARTCHAR uni9BEB +ENCODING 39915 +BBX 15 15 1 -1 +BITMAP +2000 +3FE0 +455E +8942 +7DD2 +5552 +5552 +7DD4 +5554 +5554 +7D48 +01C8 +AB54 +A854 +8062 +ENDCHAR +STARTCHAR uni9BEC +ENCODING 39916 +BBX 13 16 1 -2 +BITMAP +0C80 +70F8 +1128 +FC48 +3888 +5528 +9010 +1FC0 +2080 +7FE0 +A220 +3FE0 +2220 +3FE0 +4910 +8488 +ENDCHAR +STARTCHAR uni9BED +ENCODING 39917 +BBX 15 15 0 -1 +BITMAP +2000 +20FC +7C08 +4410 +88FE +7E10 +5210 +5250 +7E20 +52FE +52AA +7EAA +00AA +AAAA +ABFE +ENDCHAR +STARTCHAR uni9BEE +ENCODING 39918 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +4BFE +9202 +7E02 +55FC +5400 +7C00 +57FE +5420 +7C20 +0124 +AA22 +AA22 +80E0 +ENDCHAR +STARTCHAR uni9BEF +ENCODING 39919 +BBX 15 15 1 -1 +BITMAP +2082 +3A8A +4A8A +93EA +FA8A +AC8A +ABFA +F88A +ABEA +AAAA +FAAA +02AA +AAA2 +AAE2 +8086 +ENDCHAR +STARTCHAR uni9BF0 +ENCODING 39920 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +2450 +4888 +FF76 +5400 +55FC +7C08 +5410 +5420 +7C10 +0050 +A944 +AA4A +823A +ENDCHAR +STARTCHAR uni9BF1 +ENCODING 39921 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +243C +4820 +FDFE +5522 +5538 +7DE2 +551E +5500 +7D28 +0128 +AA28 +AA4A +8086 +ENDCHAR +STARTCHAR uni9BF2 +ENCODING 39922 +BBX 15 15 1 -1 +BITMAP +2108 +3D08 +2508 +4BD4 +FD14 +5522 +5500 +7DC0 +5548 +5544 +7D40 +0140 +AA50 +AA48 +84C4 +ENDCHAR +STARTCHAR uni9BF3 +ENCODING 39923 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +49FE +9100 +7D0C +5570 +5550 +7D50 +557E +5548 +7D48 +0168 +ABCA +AA04 +8074 +ENDCHAR +STARTCHAR uni9BF4 +ENCODING 39924 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7804 +4834 +91C4 +7C44 +5444 +55F4 +7D54 +5554 +55F4 +7C44 +0054 +AA76 +AB96 +0002 +ENDCHAR +STARTCHAR uni9BF5 +ENCODING 39925 +BBX 15 15 1 -1 +BITMAP +2040 +3C48 +2498 +49E4 +FC20 +57FE +5448 +7C94 +5762 +5410 +7C60 +0004 +AA08 +A830 +80C0 +ENDCHAR +STARTCHAR uni9BF6 +ENCODING 39926 +BBX 15 16 0 -2 +BITMAP +2000 +20FE +7C92 +4410 +88FE +7E10 +527C +5254 +7E7C +5254 +527C +7E10 +00FE +AA10 +AA10 +0010 +ENDCHAR +STARTCHAR uni9BF7 +ENCODING 39927 +BBX 15 15 1 -1 +BITMAP +2000 +38F8 +4888 +90F8 +7C88 +5488 +54F8 +7C00 +57FE +5420 +7D20 +013C +ABA0 +A960 +821E +ENDCHAR +STARTCHAR uni9BF8 +ENCODING 39928 +BBX 15 15 1 -1 +BITMAP +2080 +3CBC +2484 +4884 +FD7E +5520 +5720 +7D3C +5550 +5510 +7DFE +0110 +AB28 +A924 +8142 +ENDCHAR +STARTCHAR uni9BF9 +ENCODING 39929 +BBX 15 15 0 -1 +BITMAP +2000 +21FC +7904 +49FC +9104 +7DFC +5420 +5520 +7DFE +5620 +5420 +7DFC +0020 +AA20 +ABFE +ENDCHAR +STARTCHAR uni9BFA +ENCODING 39930 +BBX 15 15 1 -1 +BITMAP +2040 +3844 +49FC +9048 +7C48 +5450 +57FE +7C28 +54FC +5584 +7E84 +00FC +AA84 +A884 +80FC +ENDCHAR +STARTCHAR uni9BFB +ENCODING 39931 +BBX 15 16 0 -2 +BITMAP +2082 +2082 +73E2 +9082 +208A +FBEA +AAAA +AAAA +FBEA +A88A +A9CA +FAAA +04A2 +A882 +A88A +0084 +ENDCHAR +STARTCHAR uni9BFC +ENCODING 39932 +BBX 15 16 0 -2 +BITMAP +2028 +2092 +7CAA +4482 +88FE +7E28 +5244 +52A2 +7E3C +5244 +5244 +7EA8 +0010 +AA28 +AA44 +0082 +ENDCHAR +STARTCHAR uni9BFD +ENCODING 39933 +BBX 15 15 1 -1 +BITMAP +2080 +3C9E +25D2 +4952 +FD52 +55D2 +5552 +7D52 +55D2 +5412 +7D52 +0196 +AB10 +A950 +80D0 +ENDCHAR +STARTCHAR uni9BFE +ENCODING 39934 +BBX 15 16 0 -2 +BITMAP +2040 +207E +7848 +48BE +90AA +7DAA +56BE +54AA +7CAA +54BE +54C8 +7CA8 +0090 +AA98 +AAA4 +00C2 +ENDCHAR +STARTCHAR uni9BFF +ENCODING 39935 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +79FE +4902 +9102 +7DFE +5500 +5500 +7DFE +55AA +56AA +7CFE +00AA +AAAA +AAAA +0086 +ENDCHAR +STARTCHAR uni9C00 +ENCODING 39936 +BBX 15 15 1 -1 +BITMAP +203C +3DC8 +2544 +4A24 +FFFE +5480 +57FE +7C80 +54F8 +5488 +7D88 +0250 +AA20 +A8D8 +8306 +ENDCHAR +STARTCHAR uni9C01 +ENCODING 39937 +BBX 15 16 0 -2 +BITMAP +2010 +2020 +7CFE +4482 +88FE +7E82 +52FE +5210 +7E12 +52D4 +5258 +7E54 +0094 +AA92 +AB50 +0020 +ENDCHAR +STARTCHAR uni9C02 +ENCODING 39938 +BBX 15 16 0 -2 +BITMAP +2002 +21E2 +7922 +492A +91EA +7D2A +552A +55EA +7D2A +552A +55EA +7C02 +00C2 +AAA2 +AB2A +0204 +ENDCHAR +STARTCHAR uni9C03 +ENCODING 39939 +BBX 15 16 0 -2 +BITMAP +2000 +20FC +78A4 +48A4 +90FC +7CA4 +54A4 +54FC +7C00 +55FE +5490 +7C94 +0088 +AAA8 +AAC4 +0082 +ENDCHAR +STARTCHAR uni9C04 +ENCODING 39940 +BBX 15 15 1 -1 +BITMAP +200A +3C0A +2408 +49FE +FD08 +5578 +550A +7D2A +55FA +5556 +7DD4 +0124 +A954 +AA0E +8232 +ENDCHAR +STARTCHAR uni9C05 +ENCODING 39941 +BBX 15 16 0 -2 +BITMAP +2000 +207C +7C54 +4454 +887C +7E54 +5254 +527C +7E10 +52FE +5292 +7E96 +00BE +AA82 +AA8A +0084 +ENDCHAR +STARTCHAR uni9C06 +ENCODING 39942 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +25FC +4820 +FDFC +5450 +57FE +7C88 +55FC +568A +7C88 +00F8 +AA88 +A888 +80F8 +ENDCHAR +STARTCHAR uni9C07 +ENCODING 39943 +BBX 15 16 0 -2 +BITMAP +2000 +20FC +7848 +4830 +91FE +7C52 +5494 +5510 +7E30 +5420 +55FE +7C70 +00A8 +AB24 +AA22 +0020 +ENDCHAR +STARTCHAR uni9C08 +ENCODING 39944 +BBX 15 15 1 -1 +BITMAP +2128 +3D28 +27FE +4928 +FD28 +5538 +5500 +7DFC +5420 +57FE +7CA8 +00A8 +A924 +AA22 +8020 +ENDCHAR +STARTCHAR uni9C09 +ENCODING 39945 +BBX 15 15 1 -1 +BITMAP +2020 +3C40 +25FC +4904 +FDFC +5504 +5504 +7DFC +5400 +55FC +7C20 +01FC +AA20 +A820 +83FE +ENDCHAR +STARTCHAR uni9C0A +ENCODING 39946 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +27FE +4820 +FDFC +5524 +55AC +7D74 +5524 +55FC +7CA8 +00A8 +A924 +AA22 +8020 +ENDCHAR +STARTCHAR uni9C0B +ENCODING 39947 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +7900 +497E +9142 +7D7E +5542 +557E +7D10 +55FE +5524 +7D64 +0118 +AB24 +AB42 +01FE +ENDCHAR +STARTCHAR uni9C0C +ENCODING 39948 +BBX 15 15 1 -1 +BITMAP +2010 +3C88 +2504 +4BFA +FC50 +5450 +55FC +7D54 +5554 +559C +7D04 +01FC +AB04 +A904 +81FC +ENDCHAR +STARTCHAR uni9C0D +ENCODING 39949 +BBX 15 15 1 -1 +BITMAP +2190 +3F12 +4952 +9152 +7FD2 +5554 +5554 +7F10 +5590 +5550 +7D28 +0128 +AB24 +A944 +8142 +ENDCHAR +STARTCHAR uni9C0E +ENCODING 39950 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +783C +4B94 +90FE +7C94 +553C +5510 +7FBC +5490 +54FE +7E90 +0190 +AAC0 +AABE +0100 +ENDCHAR +STARTCHAR uni9C0F +ENCODING 39951 +BBX 15 16 0 -2 +BITMAP +2000 +20FE +7C00 +447C +8844 +7E44 +527C +5200 +7EFE +5292 +5292 +7EFE +0092 +AA92 +AAFE +0082 +ENDCHAR +STARTCHAR uni9C10 +ENCODING 39952 +BBX 15 15 1 -1 +BITMAP +2000 +39DC +4954 +9154 +7DDC +5400 +54FC +7C00 +55FE +5440 +7CFC +0084 +AA04 +A804 +8018 +ENDCHAR +STARTCHAR uni9C11 +ENCODING 39953 +BBX 15 16 0 -2 +BITMAP +2000 +20FC +7884 +48FC +9084 +7CFC +5400 +55FE +7C80 +54FE +552A +7E4A +0092 +AB22 +AA54 +0088 +ENDCHAR +STARTCHAR uni9C12 +ENCODING 39954 +BBX 15 15 1 -1 +BITMAP +2080 +3C80 +25FE +4B00 +FCFC +5484 +54FC +7C84 +54FC +5440 +7CFC +0384 +A848 +A870 +838E +ENDCHAR +STARTCHAR uni9C13 +ENCODING 39955 +BBX 15 15 1 -1 +BITMAP +2000 +3DFC +2524 +4924 +FDFC +5524 +5524 +7D24 +55FC +5420 +7C10 +0144 +A942 +AA4A +823A +ENDCHAR +STARTCHAR uni9C14 +ENCODING 39956 +BBX 15 15 1 -1 +BITMAP +4014 +7812 +4810 +93FE +FA10 +AA10 +AAF4 +FA14 +AAF4 +AAAC +FAA8 +02E8 +AA0A +A21A +8464 +ENDCHAR +STARTCHAR uni9C15 +ENCODING 39957 +BBX 15 15 1 -1 +BITMAP +2000 +3DDE +2542 +4942 +FD42 +55DE +5500 +7D1E +55C2 +5512 +7D14 +01C8 +AB08 +A914 +8122 +ENDCHAR +STARTCHAR uni9C16 +ENCODING 39958 +BBX 15 15 1 -1 +BITMAP +2040 +3840 +4BFE +9080 +7D7C +5610 +54FE +7C00 +54FC +5484 +7CFC +0084 +AAFC +A884 +808C +ENDCHAR +STARTCHAR uni9C17 +ENCODING 39959 +BBX 15 16 0 -2 +BITMAP +2080 +209E +7892 +4BF2 +9092 +7C9E +5492 +55D2 +7D52 +555E +5552 +7D52 +01D2 +AA22 +AA2A +0044 +ENDCHAR +STARTCHAR uni9C18 +ENCODING 39960 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +4BFE +9202 +7E02 +55FC +5440 +7C98 +55E4 +5420 +7C20 +01FC +AA20 +A820 +83FE +ENDCHAR +STARTCHAR uni9C19 +ENCODING 39961 +BBX 15 15 1 -1 +BITMAP +2088 +3888 +4BFE +9088 +7C40 +5440 +57FE +7C40 +5480 +54FE +7D82 +0282 +AA82 +A882 +80FE +ENDCHAR +STARTCHAR uni9C1A +ENCODING 39962 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +4BFE +9202 +7EFA +5400 +54F8 +7C88 +5488 +54F8 +7C88 +0088 +AAF8 +A800 +83FE +ENDCHAR +STARTCHAR uni9C1B +ENCODING 39963 +BBX 15 15 1 -1 +BITMAP +2000 +3CF8 +2488 +4888 +FCF8 +5488 +5488 +7CF8 +5400 +55FC +7D54 +0154 +AB54 +A954 +83FE +ENDCHAR +STARTCHAR uni9C1C +ENCODING 39964 +BBX 15 16 0 -2 +BITMAP +2088 +2050 +7800 +49FE +9050 +7DFC +5454 +57FE +7C54 +55FC +5450 +7CD8 +0154 +AA52 +AA50 +0050 +ENDCHAR +STARTCHAR uni9C1D +ENCODING 39965 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +49FE +9000 +7CFC +5484 +54FC +7C00 +55FE +5502 +7D7A +014A +AB4A +A97A +8106 +ENDCHAR +STARTCHAR uni9C1E +ENCODING 39966 +BBX 15 16 0 -2 +BITMAP +2020 +2040 +7CFC +4484 +8884 +7EFC +5280 +52FE +7E80 +52FE +5202 +7EAA +00AA +AA02 +AA14 +0008 +ENDCHAR +STARTCHAR uni9C1F +ENCODING 39967 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +7CFE +4400 +8844 +7E28 +52FE +52A2 +7E10 +52FE +5220 +7E3C +0024 +AA44 +AA54 +0088 +ENDCHAR +STARTCHAR uni9C20 +ENCODING 39968 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +78A4 +4888 +9050 +7C20 +54D8 +5726 +7C20 +55FC +5524 +7D24 +01FC +AA22 +ABFE +0002 +ENDCHAR +STARTCHAR uni9C21 +ENCODING 39969 +BBX 15 15 1 -1 +BITMAP +2040 +3D9E +250A +494A +FD4A +5552 +57A6 +7C00 +55FC +5524 +7D24 +01FC +AB24 +A924 +81FC +ENDCHAR +STARTCHAR uni9C22 +ENCODING 39970 +BBX 15 15 1 -1 +BITMAP +2000 +39FC +4920 +9120 +7DFC +5520 +5520 +7DFC +5520 +5520 +7DFE +000A +2AA6 +A912 +810C +ENDCHAR +STARTCHAR uni9C23 +ENCODING 39971 +BBX 15 15 1 -1 +BITMAP +2008 +3C08 +25DE +4948 +FD48 +5548 +557E +7DC4 +5544 +557E +7D44 +0164 +ABD4 +A804 +800C +ENDCHAR +STARTCHAR uni9C24 +ENCODING 39972 +BBX 15 15 1 -1 +BITMAP +4080 +793E +4B88 +9288 +FABE +AAAA +ABAA +FA2A +AA2A +ABAA +FAAA +02AE +AA88 +AB88 +8008 +ENDCHAR +STARTCHAR uni9C25 +ENCODING 39973 +BBX 15 15 1 -1 +BITMAP +2000 +3DFC +2554 +4954 +FD54 +55FC +5400 +7CA8 +5524 +5622 +7CA8 +00A8 +A924 +AA22 +8020 +ENDCHAR +STARTCHAR uni9C26 +ENCODING 39974 +BBX 15 16 0 -2 +BITMAP +2084 +2044 +7848 +4BFE +9084 +7C84 +5508 +554A +7E52 +579C +5484 +7D08 +0108 +AA52 +ABDE +0042 +ENDCHAR +STARTCHAR uni9C27 +ENCODING 39975 +BBX 15 15 1 -1 +BITMAP +0040 +7948 +4A44 +4BFC +4890 +6FFE +5890 +4978 +4AA4 +6FFA +5948 +49F8 +4948 +89F8 +9A54 +ENDCHAR +STARTCHAR uni9C28 +ENCODING 39976 +BBX 14 16 0 -2 +BITMAP +2000 +21F8 +7908 +49F8 +9108 +7DF8 +5400 +5400 +7DDC +5444 +5554 +7CCC +0154 +AA44 +AA54 +00C8 +ENDCHAR +STARTCHAR uni9C29 +ENCODING 39977 +BBX 15 15 1 -1 +BITMAP +2020 +387C +48C4 +93A8 +7C50 +5460 +5780 +7CFC +5520 +5420 +7DFE +0020 +AB24 +A924 +81FC +ENDCHAR +STARTCHAR uni9C2A +ENCODING 39978 +BBX 15 15 1 -1 +BITMAP +2020 +3820 +48F8 +9020 +7DFC +5440 +5448 +7C94 +55E4 +5400 +7DFC +0154 +AB54 +A954 +83FE +ENDCHAR +STARTCHAR uni9C2B +ENCODING 39979 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +79FE +4902 +9050 +7C88 +5524 +5450 +7C88 +5504 +56FA +7C88 +0088 +AA88 +AAF8 +0088 +ENDCHAR +STARTCHAR uni9C2C +ENCODING 39980 +BBX 15 16 0 -2 +BITMAP +2020 +203C +7820 +49FE +9122 +7D38 +55E4 +551C +7D20 +5510 +55FE +7D44 +0128 +AA10 +AA28 +04C6 +ENDCHAR +STARTCHAR uni9C2D +ENCODING 39981 +BBX 15 15 1 -1 +BITMAP +2044 +3DF8 +4850 +93FE +7C40 +548C +57F0 +7C82 +547E +5400 +7CFC +0084 +AAFC +A884 +80FC +ENDCHAR +STARTCHAR uni9C2E +ENCODING 39982 +BBX 15 15 1 -1 +BITMAP +2000 +3DFC +2524 +4924 +FD54 +558C +5504 +7DFC +5400 +55FC +7D54 +0154 +AB54 +A954 +83FE +ENDCHAR +STARTCHAR uni9C2F +ENCODING 39983 +BBX 15 15 1 -1 +BITMAP +2000 +3DDE +2442 +4842 +FDDE +5510 +55DE +7C42 +54CA +5552 +7C42 +00C6 +AB4A +A852 +818C +ENDCHAR +STARTCHAR uni9C30 +ENCODING 39984 +BBX 15 15 1 -1 +BITMAP +2008 +3DC8 +2408 +483E +FC2A +57EA +54AA +7CBE +54AA +55EA +7EAA +02BE +AA88 +A888 +8088 +ENDCHAR +STARTCHAR uni9C31 +ENCODING 39985 +BBX 15 15 1 -1 +BITMAP +2010 +3A10 +4AFE +9110 +7D7C +5654 +557C +7D54 +5454 +577C +7D10 +01FE +A910 +AA90 +847E +ENDCHAR +STARTCHAR uni9C32 +ENCODING 39986 +BBX 15 15 1 -1 +BITMAP +0820 +7F20 +087E +FF88 +1048 +3E30 +47C8 +8886 +3FF0 +1110 +1FF0 +1110 +1FF0 +2448 +C226 +ENDCHAR +STARTCHAR uni9C33 +ENCODING 39987 +BBX 15 16 0 -2 +BITMAP +2148 +2148 +73E8 +9148 +21DE +F88A +ABEA +AAAA +FAAA +ABEA +A88A +FBEA +0092 +A892 +A8AA +00C4 +ENDCHAR +STARTCHAR uni9C34 +ENCODING 39988 +BBX 15 16 0 -2 +BITMAP +1110 +1550 +2550 +47D0 +903E +17A4 +2254 +6394 +A494 +27D4 +2D54 +27C8 +2548 +27D4 +2014 +2AA2 +ENDCHAR +STARTCHAR uni9C35 +ENCODING 39989 +BBX 15 16 0 -2 +BITMAP +2020 +3F20 +403E +BE48 +2AA8 +FF28 +4A10 +7FE8 +1046 +3FF0 +5110 +1FF0 +1110 +1FF0 +2488 +4244 +ENDCHAR +STARTCHAR uni9C36 +ENCODING 39990 +BBX 15 15 1 -1 +BITMAP +2100 +39DE +4922 +92A2 +7D54 +5488 +5504 +7EFA +5400 +5400 +7DFE +0020 +A8A8 +AB26 +8060 +ENDCHAR +STARTCHAR uni9C37 +ENCODING 39991 +BBX 15 15 1 -1 +BITMAP +2120 +3920 +493E +9224 +FA44 +AAA8 +AE90 +FAA8 +AAC6 +AA90 +FAFE +0290 +AAB8 +AA54 +8212 +ENDCHAR +STARTCHAR uni9C38 +ENCODING 39992 +BBX 15 15 0 -1 +BITMAP +2000 +23FE +7200 +927C +2244 +FA44 +AA7C +AA00 +FAEE +AAAA +AAAA +FAAA +02EE +AA00 +ABFE +ENDCHAR +STARTCHAR uni9C39 +ENCODING 39993 +BBX 15 15 1 -1 +BITMAP +4000 +7BFE +4AA2 +93E2 +FA54 +ABC8 +AA88 +FA94 +ABE2 +A820 +F9FC +0020 +AA20 +A820 +83FE +ENDCHAR +STARTCHAR uni9C3A +ENCODING 39994 +BBX 15 15 1 -1 +BITMAP +2040 +3CB0 +24D0 +4908 +FED6 +575A +5420 +7CD8 +5726 +54C0 +7C10 +0064 +AA08 +A830 +81C0 +ENDCHAR +STARTCHAR uni9C3B +ENCODING 39995 +BBX 15 15 1 -1 +BITMAP +2000 +3CF8 +2488 +48F8 +FC88 +54F8 +5400 +7DFC +5554 +55FC +7C00 +01F8 +AA88 +A870 +838E +ENDCHAR +STARTCHAR uni9C3C +ENCODING 39996 +BBX 15 16 0 -2 +BITMAP +2000 +21DE +7842 +4952 +90CA +7D52 +5442 +5420 +7CFC +5484 +5484 +7CFC +0084 +AA84 +AAFC +0084 +ENDCHAR +STARTCHAR uni9C3D +ENCODING 39997 +BBX 15 16 0 -2 +BITMAP +2050 +2050 +79FE +4850 +91FC +7D54 +55FC +5554 +7DFC +5400 +54F8 +7C88 +00F8 +AA88 +AAF8 +0088 +ENDCHAR +STARTCHAR uni9C3E +ENCODING 39998 +BBX 15 15 1 -1 +BITMAP +2000 +3FFE +2450 +49FC +FD54 +5554 +55FC +7C00 +54F8 +5400 +7DFE +0020 +AAA8 +A926 +8060 +ENDCHAR +STARTCHAR uni9C3F +ENCODING 39999 +BBX 15 16 0 -2 +BITMAP +2010 +21FE +7810 +48FC +9010 +7DFE +5400 +54FC +7C84 +54FC +5484 +7CFC +0084 +AAFC +AA48 +0084 +ENDCHAR +STARTCHAR uni9C40 +ENCODING 40000 +BBX 14 16 1 -2 +BITMAP +FBF8 +8840 +FA40 +8BFC +F8A0 +90A4 +A924 +DFDC +2080 +7FE0 +A220 +3FE0 +2220 +3FE0 +4910 +8488 +ENDCHAR +STARTCHAR uni9C41 +ENCODING 40001 +BBX 15 15 1 -1 +BITMAP +2200 +3E78 +2520 +4A20 +FE32 +5554 +5498 +7C30 +5750 +5598 +7D34 +0152 +A990 +AAB0 +847E +ENDCHAR +STARTCHAR uni9C42 +ENCODING 40002 +BBX 15 16 0 -2 +BITMAP +2048 +2148 +795E +496A +9154 +7DC8 +5450 +5464 +7FC4 +557E +5544 +7D64 +0154 +AB44 +AA54 +0448 +ENDCHAR +STARTCHAR uni9C43 +ENCODING 40003 +BBX 15 15 0 -1 +BITMAP +2084 +2048 +79FE +4810 +90FC +7C20 +55FE +5440 +7C7C +54A4 +5524 +7CFC +0044 +AA44 +ABFE +ENDCHAR +STARTCHAR uni9C44 +ENCODING 40004 +BBX 15 16 0 -2 +BITMAP +2020 +23FE +7820 +49FC +9124 +7DFC +5524 +55FC +7C22 +55FE +5408 +7DFE +0108 +AA88 +AA28 +0010 +ENDCHAR +STARTCHAR uni9C45 +ENCODING 40005 +BBX 15 15 1 -1 +BITMAP +2020 +7BFE +4A20 +92FC +FA24 +ABFE +AA24 +FAFC +AAA4 +AAFC +FAA4 +04FC +A8A4 +ACA4 +80AC +ENDCHAR +STARTCHAR uni9C46 +ENCODING 40006 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +25FC +4888 +FFFE +5400 +54F8 +7C88 +54F8 +5488 +7CF8 +0020 +ABFE +A820 +8020 +ENDCHAR +STARTCHAR uni9C47 +ENCODING 40007 +BBX 15 15 1 -1 +BITMAP +2010 +3C10 +25FE +4910 +FD7C +5514 +55FE +7D14 +557C +5592 +7D54 +0138 +AA54 +AA92 +8030 +ENDCHAR +STARTCHAR uni9C48 +ENCODING 40008 +BBX 15 15 1 -1 +BITMAP +2000 +3DFE +4420 +89FE +7D22 +55BA +5522 +7D98 +5400 +55FC +7C04 +00FC +AA04 +A804 +81FC +ENDCHAR +STARTCHAR uni9C49 +ENCODING 40009 +BBX 15 15 1 -1 +BITMAP +2A20 +4920 +7F7E +4944 +5DA8 +6B10 +4FE8 +1086 +3FF0 +1110 +1FF0 +1110 +3FF8 +4444 +8222 +ENDCHAR +STARTCHAR uni9C4A +ENCODING 40010 +BBX 15 15 1 -1 +BITMAP +2000 +39FC +4848 +9030 +7DFE +5452 +5494 +7D30 +55FE +552A +7D4A +01FE +AB4A +A97A +8106 +ENDCHAR +STARTCHAR uni9C4B +ENCODING 40011 +BBX 15 15 0 -1 +BITMAP +2020 +203C +7820 +49FE +9122 +7D38 +55E4 +551C +7D00 +5528 +55AA +7D6C +0128 +AA28 +AAFE +ENDCHAR +STARTCHAR uni9C4C +ENCODING 40012 +BBX 15 16 0 -2 +BITMAP +2080 +20F0 +7910 +49FC +9324 +7D24 +55FC +5440 +7CA4 +5558 +5498 +7D34 +0054 +AA92 +AB50 +0020 +ENDCHAR +STARTCHAR uni9C4D +ENCODING 40013 +BBX 15 16 0 -2 +BITMAP +2012 +21D4 +7848 +4A8A +9104 +7E02 +55DC +5454 +7C62 +55C0 +551E +7DC2 +0054 +AA48 +AB54 +00A2 +ENDCHAR +STARTCHAR uni9C4E +ENCODING 40014 +BBX 15 16 0 -2 +BITMAP +2018 +21E0 +7840 +4BFE +9088 +7D74 +5652 +5470 +7C00 +55FC +5504 +7D74 +0154 +AB74 +AB04 +010C +ENDCHAR +STARTCHAR uni9C4F +ENCODING 40015 +BBX 15 15 1 -1 +BITMAP +2000 +3DFE +2450 +49FC +FD54 +5574 +5400 +7CF8 +5488 +54F8 +7C88 +00F8 +AA20 +ABFE +8020 +ENDCHAR +STARTCHAR uni9C50 +ENCODING 40016 +BBX 15 15 1 -1 +BITMAP +2040 +3FF8 +2448 +4BFE +FC48 +57F8 +5440 +7D54 +575C +5444 +7FFC +0444 +AF5C +A554 +8804 +ENDCHAR +STARTCHAR uni9C51 +ENCODING 40017 +BBX 15 16 0 -2 +BITMAP +2048 +2048 +78FC +4848 +9048 +7DFE +5420 +54FC +7CA4 +54FC +54A4 +7CFC +0000 +AA48 +AA84 +0102 +ENDCHAR +STARTCHAR uni9C52 +ENCODING 40018 +BBX 15 15 1 -1 +BITMAP +2104 +3AFA +2850 +51FC +FD54 +559C +5504 +7DFC +5504 +55FC +7C08 +01FE +AA88 +A848 +8018 +ENDCHAR +STARTCHAR uni9C53 +ENCODING 40019 +BBX 15 15 1 -1 +BITMAP +2000 +3DDC +2554 +49DC +FC00 +55FC +5524 +7DFC +5524 +55FC +7C20 +01FE +AA20 +A820 +8020 +ENDCHAR +STARTCHAR uni9C54 +ENCODING 40020 +BBX 15 15 1 -1 +BITMAP +2104 +3888 +4BFE +9020 +7DFC +5420 +57FE +7D24 +54A8 +57FE +7C00 +01FC +AB04 +A904 +81FC +ENDCHAR +STARTCHAR uni9C55 +ENCODING 40021 +BBX 15 16 0 -2 +BITMAP +201C +21E0 +78A4 +4868 +91FE +7CA8 +5524 +5602 +7CFC +54A4 +54A4 +7CFC +00A4 +AAA4 +AAFC +0084 +ENDCHAR +STARTCHAR uni9C56 +ENCODING 40022 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +7200 +9314 +22A4 +FBF6 +AA4A +AA42 +FB50 +AB54 +ABF4 +FA44 +024A +AA8A +AC92 +0920 +ENDCHAR +STARTCHAR uni9C57 +ENCODING 40023 +BBX 15 15 1 -1 +BITMAP +2124 +3CA4 +24A8 +4BFE +FCA8 +5524 +5622 +7D20 +55C4 +555E +7ED4 +0054 +AABE +A904 +8204 +ENDCHAR +STARTCHAR uni9C58 +ENCODING 40024 +BBX 15 15 1 -1 +BITMAP +20F8 +3C08 +45FE +8808 +7CF8 +5400 +55DC +7C94 +54D4 +559C +7C08 +01FE +AA88 +A848 +8018 +ENDCHAR +STARTCHAR uni9C59 +ENCODING 40025 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +78FC +4820 +91FE +7C88 +55DC +5488 +7CC8 +55BC +5400 +7DFE +0050 +AA50 +AA94 +010C +ENDCHAR +STARTCHAR uni9C5A +ENCODING 40026 +BBX 15 15 1 -1 +BITMAP +2020 +3FFE +2420 +49FC +FC00 +55FC +5504 +7DFC +5488 +57FE +7C00 +01FC +AB04 +A904 +81FC +ENDCHAR +STARTCHAR uni9C5B +ENCODING 40027 +BBX 15 15 1 -1 +BITMAP +2018 +3888 +4904 +97FE +FA22 +AAAA +AAAA +FBFE +A800 +A9FC +F904 +01FC +AB04 +A904 +81FC +ENDCHAR +STARTCHAR uni9C5C +ENCODING 40028 +BBX 15 15 1 -1 +BITMAP +2240 +3A4E +4AEA +94AA +FCEA +A9AA +AEAC +FAEC +AA0A +AC8A +FEEA +028A +AA8C +A4A8 +8868 +ENDCHAR +STARTCHAR uni9C5D +ENCODING 40029 +BBX 15 15 1 -1 +BITMAP +2020 +3DFC +4420 +8888 +7FFE +5488 +55FC +7D04 +55FC +5504 +7DFC +0104 +ABFC +A888 +8306 +ENDCHAR +STARTCHAR uni9C5E +ENCODING 40030 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7954 +4954 +91FC +7C00 +57FE +5400 +7DFC +5504 +55FC +7C62 +0094 +AB88 +AAA4 +00C2 +ENDCHAR +STARTCHAR uni9C5F +ENCODING 40031 +BBX 15 15 1 -1 +BITMAP +0A80 +3138 +2288 +3938 +2288 +7FFC +4444 +4884 +3FF0 +1110 +1FF0 +1110 +3FF0 +4444 +8222 +ENDCHAR +STARTCHAR uni9C60 +ENCODING 40032 +BBX 15 15 1 -1 +BITMAP +2020 +3C50 +2488 +4B76 +FC00 +55FC +5524 +7DB4 +55FC +5400 +7CF8 +0088 +AAF8 +A888 +80F8 +ENDCHAR +STARTCHAR uni9C61 +ENCODING 40033 +BBX 15 16 0 -2 +BITMAP +2008 +200C +738A +92FE +2288 +FBA8 +AAA8 +AAAA +FBFA +AAAA +AAAC +FBAC +002A +AAAA +AC56 +0022 +ENDCHAR +STARTCHAR uni9C62 +ENCODING 40034 +BBX 15 16 0 -2 +BITMAP +20F8 +2088 +7888 +48F8 +9000 +7DDC +5554 +5554 +7DDC +5420 +57FE +7C70 +00A8 +AB24 +AA22 +0020 +ENDCHAR +STARTCHAR uni9C63 +ENCODING 40035 +BBX 15 15 1 -1 +BITMAP +2020 +3C20 +27FE +4904 +FD74 +5554 +5574 +7D04 +55FC +5488 +7CF8 +0088 +AAF8 +A888 +83FE +ENDCHAR +STARTCHAR uni9C64 +ENCODING 40036 +BBX 15 15 0 -1 +BITMAP +2014 +2012 +73FE +9210 +22F0 +FA14 +AAF4 +AAB8 +FAEA +AA16 +AC42 +F824 +02A2 +AA8A +AC78 +ENDCHAR +STARTCHAR uni9C65 +ENCODING 40037 +BBX 15 15 1 -1 +BITMAP +2020 +3CA0 +24BE +48A0 +FDFE +5414 +55FE +7D10 +55F2 +552A +7D6A +01BC +AB24 +A96E +8212 +ENDCHAR +STARTCHAR uni9C66 +ENCODING 40038 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7954 +4954 +91DC +7C50 +55DC +5554 +7D54 +55DC +5554 +7D54 +01DC +AB50 +AA52 +003E +ENDCHAR +STARTCHAR uni9C67 +ENCODING 40039 +BBX 15 15 1 -1 +BITMAP +2050 +3C50 +25FC +4954 +FDFC +5554 +55FC +7C00 +57FE +5400 +7DFC +0104 +ABFC +A888 +83FE +ENDCHAR +STARTCHAR uni9C68 +ENCODING 40040 +BBX 15 16 0 -2 +BITMAP +2124 +20A8 +7BFE +4A8A +90F8 +7D0C +55F0 +5502 +7CFE +5400 +55FC +7D04 +01FC +AB04 +ABFC +0104 +ENDCHAR +STARTCHAR uni9C69 +ENCODING 40041 +BBX 15 15 1 -1 +BITMAP +2000 +3DFC +4420 +89FE +7D22 +55AA +5522 +7CA8 +5400 +55FC +7D24 +01FC +A924 +A924 +81FC +ENDCHAR +STARTCHAR uni9C6A +ENCODING 40042 +BBX 15 15 1 -1 +BITMAP +21F8 +3D08 +45F8 +8908 +7DF8 +5444 +57FC +7C48 +57FE +5424 +7DFC +0304 +A9FC +A904 +81FC +ENDCHAR +STARTCHAR uni9C6B +ENCODING 40043 +BBX 15 15 1 -1 +BITMAP +200C +3CF0 +4522 +8894 +7DFE +5522 +5454 +7D4A +5638 +5440 +7C7C +0184 +AA48 +A838 +81C6 +ENDCHAR +STARTCHAR uni9C6C +ENCODING 40044 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7820 +4BFE +9222 +7DAC +5420 +55AC +7C00 +57FE +5420 +7DFC +0154 +AB54 +AB54 +010C +ENDCHAR +STARTCHAR uni9C6D +ENCODING 40045 +BBX 15 15 1 -1 +BITMAP +2040 +3840 +4FFE +90A0 +7F5E +5554 +5754 +7D5A +5440 +5508 +7DF8 +0108 +ABF8 +A908 +8208 +ENDCHAR +STARTCHAR uni9C6E +ENCODING 40046 +BBX 15 15 1 -1 +BITMAP +2080 +3D4C +4544 +8974 +7DCC +5544 +5574 +7D9C +5554 +5554 +7D54 +03FE +AA80 +A908 +8206 +ENDCHAR +STARTCHAR uni9C6F +ENCODING 40047 +BBX 15 16 0 -2 +BITMAP +2044 +21FE +7854 +4848 +90FE +7D90 +54FE +5490 +7CFE +5490 +54FE +7C80 +01FE +AA44 +AA38 +01C6 +ENDCHAR +STARTCHAR uni9C70 +ENCODING 40048 +BBX 15 15 1 -1 +BITMAP +21FC +3D54 +4554 +89FC +7C22 +54FE +5424 +7C28 +55FE +5424 +7CFE +0182 +AAFE +A882 +80FE +ENDCHAR +STARTCHAR uni9C71 +ENCODING 40049 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +7928 +49FE +9128 +7D7C +5554 +557C +7D54 +557C +5510 +7DFE +0192 +AABA +AA8A +0484 +ENDCHAR +STARTCHAR uni9C72 +ENCODING 40050 +BBX 15 15 1 -1 +BITMAP +2124 +3A48 +4924 +91F8 +7DA8 +5548 +55A8 +7DF8 +5400 +5568 +7DD8 +0168 +ABD8 +A96A +82C6 +ENDCHAR +STARTCHAR uni9C73 +ENCODING 40051 +BBX 15 16 0 -2 +BITMAP +2124 +2174 +7258 +92DA +23FE +F954 +AADA +ABFE +F8A2 +A820 +ABFE +F870 +00A8 +A924 +AA22 +0020 +ENDCHAR +STARTCHAR uni9C74 +ENCODING 40052 +BBX 15 16 0 -2 +BITMAP +2044 +21FE +7C44 +4400 +88FE +7EAA +52AA +52FE +7E14 +52FE +5290 +7ED2 +00AC +AAAA +AA96 +0122 +ENDCHAR +STARTCHAR uni9C75 +ENCODING 40053 +BBX 15 15 1 -1 +BITMAP +2210 +3A10 +4BDE +92A4 +FC52 +A814 +ABFE +FA08 +AAE8 +AA0A +FAEA +02A4 +AAEC +AA16 +8462 +ENDCHAR +STARTCHAR uni9C76 +ENCODING 40054 +BBX 15 15 1 -1 +BITMAP +2088 +3C50 +25FC +4820 +FDFC +5420 +57FE +7CA8 +55FC +568A +7CF8 +0088 +AAFA +A894 +81EE +ENDCHAR +STARTCHAR uni9C77 +ENCODING 40055 +BBX 15 15 1 -1 +BITMAP +2000 +3FFE +2420 +4BAE +FEAA +57AE +5420 +7FFE +5420 +5420 +7FAE +02AA +ABAE +A820 +83FE +ENDCHAR +STARTCHAR uni9C78 +ENCODING 40056 +BBX 15 15 1 -1 +BITMAP +4020 +7838 +4820 +93FC +FA24 +AAF8 +AA24 +FAFC +AAA8 +AAF8 +FAA8 +02F8 +AD54 +A954 +83FE +ENDCHAR +STARTCHAR uni9C79 +ENCODING 40057 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +7888 +4800 +91DC +7D54 +55DC +5488 +7DFE +5690 +54FC +7C90 +00FC +AA90 +AAFE +0080 +ENDCHAR +STARTCHAR uni9C7A +ENCODING 40058 +BBX 15 15 1 -1 +BITMAP +21DE +3C00 +45DE +8952 +7D56 +5420 +55FE +7D48 +55FE +554A +7DFE +0148 +AA6C +AA4A +80E6 +ENDCHAR +STARTCHAR uni9C7B +ENCODING 40059 +BBX 15 16 0 -2 +BITMAP +0FE0 +1040 +3FF0 +5110 +1FF0 +1110 +1FF0 +24A8 +5E34 +2450 +7EFC +2A54 +3E7C +2A54 +BE7C +95AA +ENDCHAR +STARTCHAR uni9C7C +ENCODING 40060 +BBX 15 15 0 -1 +BITMAP +0400 +0400 +0FE0 +1020 +2040 +7FF8 +A108 +2108 +3FF8 +2108 +2108 +3FF8 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uni9C7D +ENCODING 40061 +BBX 14 16 0 -2 +BITMAP +2000 +2000 +7DFC +4444 +8844 +7C44 +5444 +5444 +7C44 +5444 +5444 +7C84 +0084 +1D04 +E128 +4210 +ENDCHAR +STARTCHAR uni9C7E +ENCODING 40062 +BBX 15 16 0 -2 +BITMAP +1000 +1000 +1EF8 +2208 +2408 +7E08 +AA08 +2AF8 +3E88 +2A80 +2A80 +3E80 +0082 +0E82 +707E +2000 +ENDCHAR +STARTCHAR uni9C7F +ENCODING 40063 +BBX 15 16 0 -2 +BITMAP +2040 +2050 +7C48 +4448 +8840 +7DFE +5450 +5450 +7C50 +5450 +5490 +7C90 +0092 +1D12 +E10E +4200 +ENDCHAR +STARTCHAR uni9C80 +ENCODING 40064 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7C20 +45FE +8820 +7D24 +5524 +5524 +7D24 +55FC +5424 +7C20 +0022 +1C22 +E01E +4000 +ENDCHAR +STARTCHAR uni9C81 +ENCODING 40065 +BBX 15 16 0 -2 +BITMAP +0800 +1FE0 +2020 +7FF8 +A108 +3FF8 +2108 +3FF8 +0000 +FFFE +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni9C82 +ENCODING 40066 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +1E10 +23FE +2440 +7E40 +AA40 +2A7C +3E44 +2A44 +2A44 +3E44 +0084 +0E84 +7128 +2210 +ENDCHAR +STARTCHAR uni9C83 +ENCODING 40067 +BBX 15 16 0 -2 +BITMAP +2000 +2000 +7DFC +4524 +8924 +7D24 +5524 +5524 +7DFC +5500 +5500 +7D00 +0102 +1D02 +E0FE +4000 +ENDCHAR +STARTCHAR uni9C84 +ENCODING 40068 +BBX 15 16 0 -2 +BITMAP +2000 +2000 +7DFE +4408 +8808 +7DE8 +5528 +5528 +7D28 +5528 +55E8 +7D28 +0008 +1C08 +E028 +4010 +ENDCHAR +STARTCHAR uni9C85 +ENCODING 40069 +BBX 15 16 0 -2 +BITMAP +2050 +2048 +7C48 +4440 +89FE +7C40 +5440 +547C +7CA4 +54A4 +54A8 +7D28 +0110 +1E28 +E044 +4082 +ENDCHAR +STARTCHAR uni9C86 +ENCODING 40070 +BBX 15 16 0 -2 +BITMAP +2000 +2000 +7DFC +4420 +8820 +7D24 +54A4 +54A8 +7C20 +57FE +5420 +7C20 +0020 +1C20 +E020 +4020 +ENDCHAR +STARTCHAR uni9C87 +ENCODING 40071 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +1E10 +2210 +241E +7E10 +AA10 +2A10 +3EFC +2A84 +2A84 +3E84 +0084 +0E84 +70FC +2084 +ENDCHAR +STARTCHAR uni9C88 +ENCODING 40072 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +1E1E +2210 +2410 +7EFE +AA82 +2A82 +3E82 +2AFE +2A82 +3E80 +0080 +0F00 +7100 +2200 +ENDCHAR +STARTCHAR uni9C89 +ENCODING 40073 +BBX 14 16 0 -2 +BITMAP +2020 +2020 +7C20 +4420 +89FC +7D24 +5524 +5524 +7D24 +55FC +5524 +7D24 +0124 +1D24 +E1FC +4104 +ENDCHAR +STARTCHAR uni9C8A +ENCODING 40074 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +1E40 +227E +24A0 +7EA0 +AB20 +2A3E +3E20 +2A20 +2A20 +3E3E +0020 +0E20 +7020 +2020 +ENDCHAR +STARTCHAR uni9C8B +ENCODING 40075 +BBX 15 16 0 -2 +BITMAP +2044 +2044 +7C44 +4484 +88BE +7D84 +5684 +54A4 +7C94 +5494 +5484 +7C84 +0084 +1C84 +E094 +4088 +ENDCHAR +STARTCHAR uni9C8C +ENCODING 40076 +BBX 14 16 0 -2 +BITMAP +1010 +1010 +1E20 +22FC +2484 +7E84 +AA84 +2A84 +3EFC +2A84 +2A84 +3E84 +0084 +0E84 +70FC +2084 +ENDCHAR +STARTCHAR uni9C8D +ENCODING 40077 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7CFC +4484 +8904 +7EF4 +5494 +5494 +7CF4 +5484 +5494 +7C88 +0082 +1C82 +E07E +4000 +ENDCHAR +STARTCHAR uni9C8E +ENCODING 40078 +BBX 15 15 0 -1 +BITMAP +2208 +1110 +0020 +7FFC +4404 +8408 +0FC0 +1040 +3FF0 +5110 +1FF0 +1110 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni9C8F +ENCODING 40079 +BBX 15 16 0 -2 +BITMAP +2010 +2010 +7C10 +45FE +8912 +7D14 +5510 +55FC +7D44 +5544 +5528 +7D28 +0110 +1E28 +E244 +4482 +ENDCHAR +STARTCHAR uni9C90 +ENCODING 40080 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1E20 +2240 +2448 +7E84 +ABFE +2A82 +3E00 +2AFC +2A84 +3E84 +0084 +0E84 +70FC +2084 +ENDCHAR +STARTCHAR uni9C91 +ENCODING 40081 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7DFC +4420 +8820 +7C20 +57FE +5400 +7C20 +5420 +55FC +7C20 +0020 +1C20 +E3FE +4000 +ENDCHAR +STARTCHAR uni9C92 +ENCODING 40082 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7C20 +47FE +8820 +7C20 +55FC +5400 +7C00 +55FC +5504 +7D04 +0104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni9C93 +ENCODING 40083 +BBX 15 16 0 -2 +BITMAP +2040 +2044 +7DF4 +4448 +8850 +7DFE +5440 +5480 +7DFE +5640 +5480 +7CFC +0004 +1C04 +E028 +4010 +ENDCHAR +STARTCHAR uni9C94 +ENCODING 40084 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7DFE +4440 +8840 +7CFC +5484 +5584 +7EFC +5484 +5484 +7CFC +0084 +1C84 +E094 +4088 +ENDCHAR +STARTCHAR uni9C95 +ENCODING 40085 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +7C20 +4420 +8840 +7DFC +5554 +5554 +7D54 +5554 +5554 +7D54 +0154 +1D54 +E104 +410C +ENDCHAR +STARTCHAR uni9C96 +ENCODING 40086 +BBX 14 16 0 -2 +BITMAP +2000 +21FC +7D04 +4504 +8974 +7D04 +5504 +5574 +7D54 +5554 +5554 +7D74 +0104 +1D04 +E114 +4108 +ENDCHAR +STARTCHAR uni9C97 +ENCODING 40087 +BBX 15 16 0 -2 +BITMAP +4002 +43E2 +7A22 +8A2A +12AA +FAAA +AAAA +AAAA +FAAA +AAAA +AAAA +F882 +0142 +1922 +E20A +4404 +ENDCHAR +STARTCHAR uni9C98 +ENCODING 40088 +BBX 15 16 0 -2 +BITMAP +2008 +201C +7DE0 +4500 +8900 +7DFE +5500 +5500 +7D7C +5544 +5544 +7D44 +0144 +1E7C +E244 +4400 +ENDCHAR +STARTCHAR uni9C99 +ENCODING 40089 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7C50 +4488 +8904 +7E02 +54F8 +5400 +7C00 +57FE +5420 +7C40 +0088 +1D04 +E3FE +4102 +ENDCHAR +STARTCHAR uni9C9A +ENCODING 40090 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +7DFE +4488 +8850 +7C20 +5450 +5488 +7D06 +5488 +5488 +7C88 +0088 +1D08 +E108 +4208 +ENDCHAR +STARTCHAR uni9C9B +ENCODING 40091 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +7C20 +45FE +8800 +7C88 +5504 +5602 +7C88 +5488 +5450 +7C50 +0020 +1C50 +E088 +4306 +ENDCHAR +STARTCHAR uni9C9C +ENCODING 40092 +BBX 15 16 0 -2 +BITMAP +1082 +1044 +1E28 +22FE +2410 +7E10 +AA10 +2A7C +3E10 +2A10 +2A10 +3EFE +0010 +0E10 +7010 +2010 +ENDCHAR +STARTCHAR uni9C9D +ENCODING 40093 +BBX 15 16 0 -2 +BITMAP +0440 +7FFC +0100 +3FF8 +0400 +FFFE +1400 +2FC0 +D040 +3FF0 +5110 +1FF0 +1110 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni9C9E +ENCODING 40094 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +7FFC +0200 +FFFE +0820 +3418 +CFC6 +1040 +3FF0 +5110 +1FF0 +1110 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni9C9F +ENCODING 40095 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7C04 +4404 +88FC +7C04 +5404 +55FC +7C08 +5408 +55FE +7C88 +0048 +1C48 +E008 +4018 +ENDCHAR +STARTCHAR uni9CA0 +ENCODING 40096 +BBX 15 16 0 -2 +BITMAP +2000 +21FE +7C20 +4420 +89FC +7D24 +5524 +55FC +7D24 +5524 +55FC +7D20 +00A0 +1C40 +E0B0 +430E +ENDCHAR +STARTCHAR uni9CA1 +ENCODING 40097 +BBX 15 16 0 -2 +BITMAP +4000 +43FE +7800 +8800 +13DE +FA52 +AA52 +AA52 +FB5A +AAD6 +AA52 +FA52 +0252 +1A52 +E252 +42D6 +ENDCHAR +STARTCHAR uni9CA2 +ENCODING 40098 +BBX 15 16 0 -2 +BITMAP +4010 +4210 +7910 +897E +1020 +F828 +AF48 +A97E +F908 +A908 +A9FE +F908 +0108 +1A88 +E47E +4000 +ENDCHAR +STARTCHAR uni9CA3 +ENCODING 40099 +BBX 15 16 0 -2 +BITMAP +2040 +217E +7D52 +4552 +8954 +7D48 +5554 +5462 +7C10 +5410 +54FE +7C10 +0010 +1C10 +E1FE +4000 +ENDCHAR +STARTCHAR uni9CA4 +ENCODING 40100 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7D24 +4524 +89FC +7D24 +5524 +55FC +7C20 +5420 +55FC +7C20 +0020 +1C20 +E3FE +4000 +ENDCHAR +STARTCHAR uni9CA5 +ENCODING 40101 +BBX 15 16 0 -2 +BITMAP +4004 +4004 +7BC4 +8A44 +127E +FA44 +AA44 +ABE4 +FA54 +AA54 +AA44 +FA44 +03C4 +1A44 +E014 +4008 +ENDCHAR +STARTCHAR uni9CA6 +ENCODING 40102 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7CF8 +4488 +8950 +7C20 +54D8 +5726 +7C20 +55FC +5420 +7D28 +0124 +1E24 +E0A0 +4040 +ENDCHAR +STARTCHAR uni9CA7 +ENCODING 40103 +BBX 15 16 0 -2 +BITMAP +200C +21F0 +7C20 +4444 +8888 +7DF0 +5420 +5444 +7DFE +5422 +5420 +7CA8 +0124 +1E22 +E0A0 +4040 +ENDCHAR +STARTCHAR uni9CA8 +ENCODING 40104 +BBX 15 16 0 -2 +BITMAP +2040 +1248 +4444 +2014 +0860 +7380 +2800 +0FC0 +1040 +3FF0 +5110 +1FF0 +1110 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni9CA9 +ENCODING 40105 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +7DFE +4502 +8A04 +7CF8 +5400 +5400 +7DFE +5450 +5450 +7C50 +0092 +1C92 +E10E +4200 +ENDCHAR +STARTCHAR uni9CAA +ENCODING 40106 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1E24 +2224 +25FE +7E24 +AA24 +2AFC +3E40 +2A40 +2AFC +3EC4 +0144 +0E44 +707C +2044 +ENDCHAR +STARTCHAR uni9CAB +ENCODING 40107 +BBX 15 16 0 -2 +BITMAP +4000 +43DE +7A52 +8A52 +1252 +FBD2 +AA52 +AA52 +FA52 +ABD2 +AA1A +FA94 +0250 +1AB0 +E310 +4010 +ENDCHAR +STARTCHAR uni9CAC +ENCODING 40108 +BBX 14 16 0 -2 +BITMAP +2000 +21F8 +7C08 +44D0 +8820 +7DFC +5524 +5524 +7DFC +5524 +5524 +7DFC +0124 +1D24 +E124 +410C +ENDCHAR +STARTCHAR uni9CAD +ENCODING 40109 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7DFE +4420 +88FC +7C20 +55FE +5400 +7CFC +5484 +54FC +7C84 +00FC +1C84 +E094 +4088 +ENDCHAR +STARTCHAR uni9CAE +ENCODING 40110 +BBX 15 16 0 -2 +BITMAP +2020 +2020 +7CFC +4420 +8820 +7DFE +5448 +5484 +7D22 +5478 +5488 +7D48 +0050 +1C20 +E050 +418C +ENDCHAR +STARTCHAR uni9CAF +ENCODING 40111 +BBX 15 16 0 -2 +BITMAP +2088 +2088 +7DFC +4488 +8888 +7CF8 +5488 +5488 +7CF8 +5488 +5488 +7DFE +0000 +1C88 +E104 +4202 +ENDCHAR +STARTCHAR uni9CB0 +ENCODING 40112 +BBX 15 16 0 -2 +BITMAP +2000 +23E0 +7D5C +4554 +8954 +7DD4 +5554 +5554 +7DD4 +5554 +5548 +7D68 +03C8 +1C54 +E054 +4062 +ENDCHAR +STARTCHAR uni9CB1 +ENCODING 40113 +BBX 15 16 0 -2 +BITMAP +2050 +2050 +7C50 +47DE +8850 +7C50 +5450 +55DC +7C50 +5450 +5450 +7C50 +03DE +1C50 +E050 +4050 +ENDCHAR +STARTCHAR uni9CB2 +ENCODING 40114 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7D04 +4504 +89FC +7D04 +5504 +55FC +7C00 +5512 +55D4 +7D18 +0110 +1D52 +E192 +410E +ENDCHAR +STARTCHAR uni9CB3 +ENCODING 40115 +BBX 15 16 0 -2 +BITMAP +20FC +2084 +7C84 +44FC +8884 +7C84 +54FC +5400 +7DFE +5502 +5502 +7DFE +0102 +1D02 +E1FE +4102 +ENDCHAR +STARTCHAR uni9CB4 +ENCODING 40116 +BBX 14 16 0 -2 +BITMAP +2000 +21FC +7D04 +4524 +8924 +7DFC +5524 +5524 +7D74 +5554 +5554 +7D74 +0104 +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni9CB5 +ENCODING 40117 +BBX 15 16 0 -2 +BITMAP +2000 +2040 +7D9C +4504 +8904 +7DDC +5504 +5504 +7DFC +5450 +5450 +7C50 +0090 +1C92 +E112 +420E +ENDCHAR +STARTCHAR uni9CB6 +ENCODING 40118 +BBX 15 16 0 -2 +BITMAP +4020 +4020 +7850 +8888 +1144 +FA22 +A9F8 +A808 +F850 +A820 +A8A4 +FA82 +028A +1A8A +E478 +4000 +ENDCHAR +STARTCHAR uni9CB7 +ENCODING 40119 +BBX 14 16 0 -2 +BITMAP +2000 +21FC +7D24 +4524 +8974 +7D24 +55FC +5504 +7D74 +5554 +5554 +7D74 +0104 +1E04 +E214 +4408 +ENDCHAR +STARTCHAR uni9CB8 +ENCODING 40120 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +7DFE +4400 +8800 +7CF8 +5488 +5488 +7C88 +54F8 +5420 +7CA8 +0124 +1E22 +E0A0 +4040 +ENDCHAR +STARTCHAR uni9CB9 +ENCODING 40121 +BBX 15 16 0 -2 +BITMAP +2040 +2048 +7C84 +45FE +8820 +7FFE +5488 +5524 +7E42 +5588 +5410 +7C62 +0184 +1C18 +E060 +4380 +ENDCHAR +STARTCHAR uni9CBA +ENCODING 40122 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7C04 +4434 +89C4 +7C44 +5444 +55F4 +7D54 +5554 +55F4 +7C44 +0054 +1C76 +E196 +4002 +ENDCHAR +STARTCHAR uni9CBB +ENCODING 40123 +BBX 15 16 0 -2 +BITMAP +2092 +2092 +7D24 +4648 +8924 +7C92 +5492 +5400 +7DFE +5522 +5522 +7DFE +0122 +1D22 +E1FE +4102 +ENDCHAR +STARTCHAR uni9CBC +ENCODING 40124 +BBX 15 16 0 -2 +BITMAP +2020 +21FC +7C20 +4488 +8BFE +7C88 +5400 +55FC +7D04 +5524 +5524 +7D24 +0124 +1C50 +E088 +4304 +ENDCHAR +STARTCHAR uni9CBD +ENCODING 40125 +BBX 15 16 0 -2 +BITMAP +4048 +4148 +7948 +8BFE +1148 +F948 +A978 +A900 +F9FE +A820 +ABFE +F870 +00A8 +1924 +E622 +4020 +ENDCHAR +STARTCHAR uni9CBE +ENCODING 40126 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +1E00 +227C +2444 +7E44 +AA7C +2A00 +3EFE +2A92 +2A92 +3EFE +0092 +0E92 +70FE +2082 +ENDCHAR +STARTCHAR uni9CBF +ENCODING 40127 +BBX 15 16 0 -2 +BITMAP +2020 +2124 +7CA8 +4420 +89FE +7D02 +5400 +54F8 +7C00 +5400 +55FE +7C20 +0040 +1C88 +E1FC +4084 +ENDCHAR +STARTCHAR uni9CC0 +ENCODING 40128 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +1E84 +2284 +24FC +7E84 +AA84 +2AFC +3E00 +2BFE +2A20 +3EA0 +00BC +0EA0 +7160 +223E +ENDCHAR +STARTCHAR uni9CC1 +ENCODING 40129 +BBX 15 16 0 -2 +BITMAP +2000 +20F8 +7C88 +4488 +88F8 +7C88 +5488 +54F8 +7C00 +55FC +5554 +7D54 +0154 +1D54 +E3FE +4000 +ENDCHAR +STARTCHAR uni9CC2 +ENCODING 40130 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7D24 +4524 +89FC +7D24 +5524 +55FC +7C00 +57FE +5520 +7D22 +0114 +1D48 +E184 +4102 +ENDCHAR +STARTCHAR uni9CC3 +ENCODING 40131 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7D24 +4524 +89FC +7D24 +5524 +55FC +7C20 +5410 +5454 +7D42 +0142 +1D4A +E238 +4000 +ENDCHAR +STARTCHAR uni9CC4 +ENCODING 40132 +BBX 15 16 0 -2 +BITMAP +2000 +21DC +7D54 +4554 +89DC +7C00 +55FC +5400 +7DFE +5480 +54FC +7C04 +0004 +1C04 +E028 +4010 +ENDCHAR +STARTCHAR uni9CC5 +ENCODING 40133 +BBX 15 16 0 -2 +BITMAP +4008 +40C8 +7B08 +8908 +112A +F92A +ABAC +A948 +F908 +AB88 +AD54 +F914 +0114 +1924 +E124 +4142 +ENDCHAR +STARTCHAR uni9CC6 +ENCODING 40134 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +7CFE +4480 +89FC +7E84 +54FC +5484 +7CFC +5440 +547C +7CC4 +0128 +1C10 +E068 +4186 +ENDCHAR +STARTCHAR uni9CC7 +ENCODING 40135 +BBX 15 16 0 -2 +BITMAP +2020 +2040 +7DFC +4504 +89FC +7D04 +55FC +5400 +7FFE +5420 +5420 +7DFC +0020 +1C20 +E3FE +4000 +ENDCHAR +STARTCHAR uni9CC8 +ENCODING 40136 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +7DFC +4504 +89FC +7D04 +55FC +5420 +7C32 +57B4 +54A8 +7D28 +0124 +1E24 +E4A2 +4040 +ENDCHAR +STARTCHAR uni9CC9 +ENCODING 40137 +BBX 15 16 0 -2 +BITMAP +2090 +2090 +7C9E +46A2 +89D4 +7C88 +5494 +54A4 +7DFE +5684 +54A4 +7C94 +0094 +1C84 +E094 +4088 +ENDCHAR +STARTCHAR uni9CCA +ENCODING 40138 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +7DFE +4502 +8902 +7DFE +5500 +5500 +7DFE +55AA +56AA +7CFE +00AA +1CAA +E0AA +4086 +ENDCHAR +STARTCHAR uni9CCB +ENCODING 40139 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7CA4 +4488 +8850 +7C20 +54D8 +5726 +7C20 +55FC +5524 +7D24 +01FC +1C22 +E3FE +4002 +ENDCHAR +STARTCHAR uni9CCC +ENCODING 40140 +BBX 15 16 0 -2 +BITMAP +0820 +7E20 +087E +FEC4 +1028 +1E10 +2228 +4FC6 +9040 +3FF0 +5110 +1FF0 +1110 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni9CCD +ENCODING 40141 +BBX 15 16 0 -2 +BITMAP +2040 +2044 +7DF8 +4450 +8BFE +7C40 +54F8 +5582 +7E7E +5400 +55FC +7D04 +01FC +1D04 +E1FC +4104 +ENDCHAR +STARTCHAR uni9CCE +ENCODING 40142 +BBX 14 16 0 -2 +BITMAP +2000 +20FC +7C84 +44FC +8884 +7CFC +5400 +5400 +7DDC +5444 +5554 +7CCC +0154 +1C44 +E154 +4088 +ENDCHAR +STARTCHAR uni9CCF +ENCODING 40143 +BBX 14 16 0 -2 +BITMAP +2000 +21FC +7D54 +4554 +8954 +7DFC +5420 +54A8 +7CA4 +5524 +5420 +7CA8 +00A4 +1D24 +E020 +4020 +ENDCHAR +STARTCHAR uni9CD0 +ENCODING 40144 +BBX 15 16 0 -2 +BITMAP +2004 +201E +7DE0 +4402 +8922 +7C94 +54FE +5510 +7C10 +55FE +5410 +7C92 +0092 +1C92 +E0FE +4002 +ENDCHAR +STARTCHAR uni9CD1 +ENCODING 40145 +BBX 15 16 0 -2 +BITMAP +2020 +2010 +7DFE +4484 +8848 +7DFE +5502 +5624 +7C10 +55FE +5440 +7C7C +0044 +1C84 +E094 +4108 +ENDCHAR +STARTCHAR uni9CD2 +ENCODING 40146 +BBX 15 16 0 -2 +BITMAP +2088 +2050 +7C00 +45FE +8850 +7DFC +5454 +57FE +7C54 +55FC +5450 +7CD8 +0154 +1E52 +E050 +4050 +ENDCHAR +STARTCHAR uni9CD3 +ENCODING 40147 +BBX 15 16 0 -2 +BITMAP +4148 +4148 +7BE8 +8948 +11DE +F88A +ABEA +AAAA +FAAA +ABEA +A88A +FBEA +0092 +1892 +E0AA +40C4 +ENDCHAR +STARTCHAR uni9CD4 +ENCODING 40148 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +7C50 +45FC +8954 +7D54 +55FC +5400 +7DFC +5400 +57FE +7C20 +00A8 +1D24 +E2A2 +4040 +ENDCHAR +STARTCHAR uni9CD5 +ENCODING 40149 +BBX 15 16 0 -2 +BITMAP +2000 +21FC +7C20 +47FE +8A22 +7DAC +5420 +55AC +7C00 +55FC +5404 +7DFC +0004 +1C04 +E1FC +4004 +ENDCHAR +STARTCHAR uni9CD6 +ENCODING 40150 +BBX 15 16 0 -2 +BITMAP +4920 +2A3E +7F48 +4948 +5DA8 +6B10 +4928 +4FC6 +1040 +3FF0 +5110 +1FF0 +1110 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni9CD7 +ENCODING 40151 +BBX 15 16 0 -2 +BITMAP +4000 +41F8 +7908 +89F8 +1108 +F9F8 +A800 +ABFC +FA94 +ABFC +A800 +F9F8 +0090 +1860 +E198 +4606 +ENDCHAR +STARTCHAR uni9CD8 +ENCODING 40152 +BBX 15 16 0 -2 +BITMAP +2020 +3F20 +407E +BEA8 +2A28 +FF10 +4A28 +7FC6 +1040 +3FF0 +5110 +1FF0 +1110 +1FF0 +0000 +FFFE +ENDCHAR +STARTCHAR uni9CD9 +ENCODING 40153 +BBX 15 16 0 -2 +BITMAP +2010 +21FE +7D10 +457C +8914 +7DFE +5514 +557C +7D10 +557C +5554 +7D7C +0154 +1E7C +E254 +444C +ENDCHAR +STARTCHAR uni9CDA +ENCODING 40154 +BBX 15 16 0 -2 +BITMAP +4004 +43E4 +7A24 +8A24 +13EE +FA04 +AAE4 +AA04 +FA0C +ABF4 +AA44 +FA64 +0554 +1D44 +EA54 +40C8 +ENDCHAR +STARTCHAR uni9CDB +ENCODING 40155 +BBX 15 16 0 -2 +BITMAP +2000 +21DE +7C42 +4552 +88CA +7D52 +5442 +5420 +7CFC +5484 +5484 +7CFC +0084 +1C84 +E0FC +4084 +ENDCHAR +STARTCHAR uni9CDC +ENCODING 40156 +BBX 15 16 0 -2 +BITMAP +4000 +43FE +7A00 +8B14 +12A4 +FBF6 +AA4A +AA42 +FB50 +AB54 +ABF4 +FA44 +024A +1A8A +E492 +4920 +ENDCHAR +STARTCHAR uni9CDD +ENCODING 40157 +BBX 15 16 0 -2 +BITMAP +4088 +4050 +7BFE +8820 +11FC +F820 +ABFE +A924 +F8A8 +ABFE +A800 +F9FC +0104 +1904 +E1FC +4104 +ENDCHAR +STARTCHAR uni9CDE +ENCODING 40158 +BBX 15 16 0 -2 +BITMAP +4020 +4124 +78A8 +8BFE +10A8 +F924 +AA22 +A904 +F904 +A9DE +AA44 +FD54 +009E +1904 +E204 +4404 +ENDCHAR +STARTCHAR uni9CDF +ENCODING 40159 +BBX 15 16 0 -2 +BITMAP +2088 +2050 +7DFE +4450 +89FC +7D54 +559C +5504 +7DFC +5504 +55FC +7C08 +01FE +1C88 +E048 +4018 +ENDCHAR +STARTCHAR uni9CE0 +ENCODING 40160 +BBX 15 16 0 -2 +BITMAP +2088 +23FE +7CA8 +4490 +89FE +7F20 +55FC +5520 +7DFC +5520 +55FE +7D00 +03FC +1C88 +E070 +438E +ENDCHAR +STARTCHAR uni9CE1 +ENCODING 40161 +BBX 15 16 0 -2 +BITMAP +4014 +4012 +7BFE +8A10 +12F0 +FA14 +AAF4 +AAB8 +FAEA +AA16 +AC42 +F824 +02A2 +1A8A +E478 +4000 +ENDCHAR +STARTCHAR uni9CE2 +ENCODING 40162 +BBX 15 16 0 -2 +BITMAP +2050 +21FC +7D54 +45FC +8954 +7DFC +5400 +55FC +7C00 +55FC +5504 +7DFC +0088 +1C50 +E3FE +4000 +ENDCHAR +STARTCHAR uni9CE3 +ENCODING 40163 +BBX 15 16 0 -2 +BITMAP +2010 +21FE +7C00 +45FE +8902 +7D7A +554A +55FE +7C00 +54FC +5484 +7CFC +0084 +1CFC +E000 +41FE +ENDCHAR +STARTCHAR uni9CE4 +ENCODING 40164 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +7DEE +4694 +8842 +7C10 +55FE +5502 +7CF8 +5488 +54F8 +7C80 +00FC +1C84 +E0FC +4084 +ENDCHAR +STARTCHAR uni9CE5 +ENCODING 40165 +BBX 15 15 1 -1 +BITMAP +0200 +0400 +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFE +1000 +1FFE +0002 +4922 +4492 +800C +ENDCHAR +STARTCHAR uni9CE6 +ENCODING 40166 +BBX 15 15 1 -1 +BITMAP +1000 +20FC +7E04 +4208 +7E08 +4210 +7E10 +4020 +7F20 +4040 +7F40 +0142 +AB42 +A942 +863E +ENDCHAR +STARTCHAR uni9CE7 +ENCODING 40167 +BBX 15 15 1 -1 +BITMAP +0100 +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFE +1000 +5FFC +4924 +8494 +8FEC +0822 +703E +ENDCHAR +STARTCHAR uni9CE8 +ENCODING 40168 +BBX 15 16 0 -2 +BITMAP +1010 +2010 +7F10 +4110 +7F7E +4112 +7F12 +4012 +7F92 +4012 +7F92 +0092 +AAA2 +AAA2 +814A +0684 +ENDCHAR +STARTCHAR uni9CE9 +ENCODING 40169 +BBX 15 15 1 -1 +BITMAP +2020 +2040 +21F8 +F908 +29F8 +2908 +29F8 +2900 +29FE +2900 +29FE +4A02 +4D56 +8252 +040C +ENDCHAR +STARTCHAR uni9CEA +ENCODING 40170 +BBX 13 16 2 -2 +BITMAP +8100 +8200 +87F0 +8410 +87F0 +A410 +97F0 +9400 +97F8 +8400 +87F8 +8008 +8AA8 +8AA8 +8808 +8030 +ENDCHAR +STARTCHAR uni9CEB +ENCODING 40171 +BBX 15 14 1 -1 +BITMAP +7FFC +4100 +4FF0 +4810 +4FF0 +4810 +4FF0 +4800 +4FFE +4800 +4FFC +8004 +9294 +2148 +ENDCHAR +STARTCHAR uni9CEC +ENCODING 40172 +BBX 15 15 1 -1 +BITMAP +0200 +3FF0 +2010 +3FF0 +2010 +3FF0 +2000 +3FFE +2000 +3FFC +0004 +1FE4 +102C +1022 +E03E +ENDCHAR +STARTCHAR uni9CED +ENCODING 40173 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +F9FC +2904 +29FC +2904 +29FC +2900 +29FE +2900 +29FE +2802 +4AAA +4AAA +9A02 +000C +ENDCHAR +STARTCHAR uni9CEE +ENCODING 40174 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +01FC +FD04 +05FC +0504 +49FC +2900 +11FE +1100 +29FE +2402 +46AA +82AA +0202 +000C +ENDCHAR +STARTCHAR uni9CEF +ENCODING 40175 +BBX 15 15 0 -2 +BITMAP +7FF8 +4408 +5FC8 +5048 +5FC8 +5048 +5FC8 +5008 +5FE8 +5008 +5FEA +402A +AAAA +AAA6 +0042 +ENDCHAR +STARTCHAR uni9CF0 +ENCODING 40176 +BBX 15 15 1 -1 +BITMAP +0040 +0080 +63F8 +2208 +23F8 +2208 +23F8 +2200 +23FE +3200 +53FE +4812 +454A +84A2 +080C +ENDCHAR +STARTCHAR uni9CF1 +ENCODING 40177 +BBX 15 16 0 -2 +BITMAP +0040 +7C80 +11FC +1104 +11FC +1104 +11FC +FF00 +11FE +1100 +11FE +1002 +12AA +12AA +1202 +100C +ENDCHAR +STARTCHAR uni9CF2 +ENCODING 40178 +BBX 15 15 1 -1 +BITMAP +0020 +7C40 +45FC +4504 +45FC +4504 +7DFC +4100 +41FE +4100 +41FE +4002 +42AA +82AA +8404 +ENDCHAR +STARTCHAR uni9CF3 +ENCODING 40179 +BBX 15 14 1 -1 +BITMAP +7FF8 +4008 +5FE8 +4208 +4FC8 +4848 +4FC8 +4848 +4FC8 +4808 +4FF8 +552A +92AA +A064 +ENDCHAR +STARTCHAR uni9CF4 +ENCODING 40180 +BBX 15 15 1 -1 +BITMAP +0080 +0100 +F7F8 +9408 +97F8 +9408 +97F8 +9400 +97FE +9400 +97FC +F024 +0A94 +0944 +1018 +ENDCHAR +STARTCHAR uni9CF5 +ENCODING 40181 +BBX 15 16 0 -2 +BITMAP +0040 +F880 +49FC +4904 +49FC +4904 +49FC +F900 +49FE +4900 +49FE +4802 +4AAA +4AAA +4602 +420C +ENDCHAR +STARTCHAR uni9CF6 +ENCODING 40182 +BBX 15 15 1 -1 +BITMAP +0240 +013C +FFC0 +0242 +1FFE +1008 +1FF8 +1008 +1FF8 +1000 +1FFE +1000 +5FFE +4922 +8496 +ENDCHAR +STARTCHAR uni9CF7 +ENCODING 40183 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +FF04 +11FC +1104 +FDFC +0500 +05FE +4900 +29FE +1002 +2AAA +46AA +8202 +000C +ENDCHAR +STARTCHAR uni9CF8 +ENCODING 40184 +BBX 14 16 0 -2 +BITMAP +0100 +7FFC +4004 +7FFC +4200 +5FF0 +5010 +5FF0 +5010 +5FF0 +5000 +5FFC +5000 +5FFC +AA44 +452C +ENDCHAR +STARTCHAR uni9CF9 +ENCODING 40185 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +29FC +2904 +45FC +A504 +11FC +1100 +01FE +FD00 +05FE +0802 +0AAA +12AA +1202 +000C +ENDCHAR +STARTCHAR uni9CFA +ENCODING 40186 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +7D04 +11FC +1104 +11FC +FD00 +11FE +1100 +11FE +2802 +26AA +42AA +8202 +000C +ENDCHAR +STARTCHAR uni9CFB +ENCODING 40187 +BBX 15 16 0 -2 +BITMAP +0020 +2840 +24FC +2484 +42FC +4284 +80FC +7C80 +24FE +2480 +24FE +2402 +44AA +44AA +9502 +080C +ENDCHAR +STARTCHAR uni9CFC +ENCODING 40188 +BBX 15 16 0 -2 +BITMAP +0040 +2080 +11FC +0104 +FDFC +0904 +09FC +4900 +29FE +1100 +11FE +2802 +2AAA +4AAA +8202 +000C +ENDCHAR +STARTCHAR uni9CFD +ENCODING 40189 +BBX 15 16 0 -2 +BITMAP +0040 +7C80 +29FC +2904 +29FC +2904 +29FC +FF00 +29FE +2900 +29FE +2802 +2AAA +2AAA +4A02 +880C +ENDCHAR +STARTCHAR uni9CFE +ENCODING 40190 +BBX 15 16 0 -2 +BITMAP +0040 +FE80 +11FC +1104 +7DFC +5504 +55FC +5500 +55FE +5500 +55FE +5C02 +12AA +12AA +1202 +100C +ENDCHAR +STARTCHAR uni9CFF +ENCODING 40191 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +7DFC +1104 +11FC +1104 +7DFC +1100 +11FE +1100 +11FE +1C02 +E2AA +42AA +0202 +000C +ENDCHAR +STARTCHAR uni9D00 +ENCODING 40192 +BBX 15 16 0 -2 +BITMAP +0040 +FC80 +11FC +1104 +21FC +3104 +69FC +6500 +A5FE +2100 +21FE +2002 +22AA +22AA +2202 +200C +ENDCHAR +STARTCHAR uni9D01 +ENCODING 40193 +BBX 15 16 0 -2 +BITMAP +0040 +0C80 +71FC +1104 +11FC +1104 +FDFC +1100 +11FE +1100 +29FE +2802 +42AA +42AA +8202 +000C +ENDCHAR +STARTCHAR uni9D02 +ENCODING 40194 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +11FC +7D04 +15FC +1504 +15FC +1500 +FFFE +1100 +11FE +2802 +26AA +42AA +8404 +ENDCHAR +STARTCHAR uni9D03 +ENCODING 40195 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +7C20 +44FC +7C24 +4424 +7C24 +4024 +7EFE +4020 +7F20 +0150 +AB50 +A948 +8686 +ENDCHAR +STARTCHAR uni9D04 +ENCODING 40196 +BBX 15 16 0 -2 +BITMAP +0020 +0040 +FEFC +A884 +A8FC +A884 +A8FC +A880 +AAFE +AA80 +A6FE +C002 +82AA +FAAA +0202 +000C +ENDCHAR +STARTCHAR uni9D05 +ENCODING 40197 +BBX 15 16 0 -2 +BITMAP +0040 +7880 +49FC +4904 +69FC +5904 +49FC +FD00 +49FE +4900 +49FE +4802 +4AAA +4AAA +4A02 +980C +ENDCHAR +STARTCHAR uni9D06 +ENCODING 40198 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +10FC +FE84 +92FC +9284 +10FC +1880 +28FE +2880 +2AFE +4C02 +4956 +8152 +0204 +ENDCHAR +STARTCHAR uni9D07 +ENCODING 40199 +BBX 14 15 1 -1 +BITMAP +4040 +4080 +5BF8 +6208 +43F8 +4A08 +3BF8 +0200 +23FC +2200 +FBFC +2004 +2554 +2544 +281C +ENDCHAR +STARTCHAR uni9D08 +ENCODING 40200 +BBX 15 14 1 -1 +BITMAP +7FFC +4840 +4BF8 +4A08 +53F8 +5208 +73F8 +5200 +53FE +5200 +53FE +9002 +92AA +1454 +ENDCHAR +STARTCHAR uni9D09 +ENCODING 40201 +BBX 15 15 1 -1 +BITMAP +0040 +7C80 +09F8 +2908 +29F8 +4908 +7DF8 +8900 +19FC +1900 +29FE +2802 +4AAA +8AA2 +1A0C +ENDCHAR +STARTCHAR uni9D0A +ENCODING 40202 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +FDFC +1104 +11FC +1104 +51FC +5D00 +51FE +5100 +51FE +5002 +5EAA +F2AA +0202 +000C +ENDCHAR +STARTCHAR uni9D0B +ENCODING 40203 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +11FC +FD04 +21FC +2104 +3DFC +2500 +25FE +2500 +25FE +2402 +4556 +4552 +9A0C +ENDCHAR +STARTCHAR uni9D0C +ENCODING 40204 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +7FFC +0440 +1830 +E20E +1FF0 +1010 +1FF0 +1010 +1FFC +1000 +1FFC +0004 +492C +ENDCHAR +STARTCHAR uni9D0D +ENCODING 40205 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +0820 +07C0 +1830 +E20E +1FF0 +1010 +1FF0 +1010 +1FFC +1000 +1FFC +0004 +492C +ENDCHAR +STARTCHAR uni9D0E +ENCODING 40206 +BBX 15 15 1 -1 +BITMAP +0020 +0040 +FDFC +8104 +85FC +A504 +A9FC +9100 +99FE +A500 +C1FE +8002 +FAAA +02A2 +040C +ENDCHAR +STARTCHAR uni9D0F +ENCODING 40207 +BBX 15 16 0 -2 +BITMAP +1050 +2054 +7C52 +4492 +7C90 +459E +7DF0 +4290 +7E90 +4090 +7E90 +0290 +AA8A +AA8A +8286 +0C82 +ENDCHAR +STARTCHAR uni9D10 +ENCODING 40208 +BBX 14 16 0 -2 +BITMAP +1000 +7E78 +1248 +2678 +C200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFC +1000 +1FFC +2A44 +452C +ENDCHAR +STARTCHAR uni9D11 +ENCODING 40209 +BBX 15 15 1 -1 +BITMAP +1000 +FFFC +1144 +2228 +7C10 +1328 +2FF6 +C810 +0FF0 +0810 +0FFE +0800 +2FFE +2922 +4494 +ENDCHAR +STARTCHAR uni9D12 +ENCODING 40210 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +28FC +4484 +82FC +7C84 +00FC +0080 +FCFE +2480 +24FE +2402 +2D56 +2152 +220C +ENDCHAR +STARTCHAR uni9D13 +ENCODING 40211 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +14FC +0484 +24FC +2484 +AAFC +AA80 +A8FE +3080 +32FE +2202 +22AA +5EAA +8102 +000C +ENDCHAR +STARTCHAR uni9D14 +ENCODING 40212 +BBX 15 16 0 -2 +BITMAP +0840 +1C80 +E1FC +0104 +21FC +1104 +FDFC +0500 +09FE +0900 +11FE +2002 +42AA +A2AA +1E02 +000C +ENDCHAR +STARTCHAR uni9D15 +ENCODING 40213 +BBX 15 15 1 -1 +BITMAP +0810 +1010 +7EFE +4282 +7E82 +4240 +7E40 +404C +7F70 +4040 +7F40 +0140 +AB42 +A942 +863E +ENDCHAR +STARTCHAR uni9D16 +ENCODING 40214 +BBX 14 16 1 -2 +BITMAP +0040 +FC80 +85F8 +8508 +FDF8 +9108 +91F8 +9100 +FDFC +9100 +91FC +9004 +9554 +9554 +CE04 +8418 +ENDCHAR +STARTCHAR uni9D17 +ENCODING 40215 +BBX 15 15 1 -1 +BITMAP +2020 +2040 +21FC +FD04 +01FC +8904 +89FC +8900 +49FE +5100 +51FE +1C02 +32AA +C2A2 +040C +ENDCHAR +STARTCHAR uni9D18 +ENCODING 40216 +BBX 15 15 1 -1 +BITMAP +2020 +2040 +49FC +5904 +E5FC +0304 +29FC +2900 +FDFE +2900 +29FE +2802 +4AAA +4AA2 +8A0C +ENDCHAR +STARTCHAR uni9D19 +ENCODING 40217 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +21FC +7D04 +51FC +9104 +11FC +1100 +FDFE +1100 +11FE +2802 +26AA +42AA +8202 +000C +ENDCHAR +STARTCHAR uni9D1A +ENCODING 40218 +BBX 15 16 0 -2 +BITMAP +1000 +2000 +7DFE +4404 +7C04 +44F4 +7C94 +4094 +7E94 +4094 +7EF4 +0294 +AA04 +AA04 +8214 +0C08 +ENDCHAR +STARTCHAR uni9D1B +ENCODING 40219 +BBX 15 15 1 -1 +BITMAP +2000 +7EF8 +C288 +2C9A +3282 +FFFE +2010 +3FF0 +2010 +3FF0 +2000 +3FFE +0004 +4924 +849C +ENDCHAR +STARTCHAR uni9D1C +ENCODING 40220 +BBX 15 16 0 -2 +BITMAP +0844 +2F78 +2842 +2F3E +F200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFC +1000 +1FFC +2A44 +452C +ENDCHAR +STARTCHAR uni9D1D +ENCODING 40221 +BBX 15 15 1 -1 +BITMAP +2010 +2020 +20FC +7E84 +42FC +8284 +7AFC +4A80 +4AFE +4A80 +7AFE +0202 +0556 +0552 +1A04 +ENDCHAR +STARTCHAR uni9D1E +ENCODING 40222 +BBX 15 15 1 -1 +BITMAP +0010 +7C20 +44FC +4484 +7CFC +0084 +FEFC +1080 +20FE +7C80 +44FE +0402 +0556 +0552 +1A04 +ENDCHAR +STARTCHAR uni9D1F +ENCODING 40223 +BBX 15 15 1 -1 +BITMAP +0620 +7840 +48FC +4884 +48FC +7E84 +48FC +4880 +48FE +4480 +74FE +C402 +0356 +F252 +000C +ENDCHAR +STARTCHAR uni9D20 +ENCODING 40224 +BBX 15 16 0 -2 +BITMAP +0040 +0080 +7DFC +4504 +45FC +7D04 +45FC +4500 +7DFE +0100 +01FE +1C02 +E2AA +42AA +0202 +000C +ENDCHAR +STARTCHAR uni9D21 +ENCODING 40225 +BBX 15 16 0 -2 +BITMAP +0040 +7880 +49FC +4904 +49FC +7904 +49FC +4900 +79FE +4900 +49FE +4802 +4EAA +F2AA +0202 +000C +ENDCHAR +STARTCHAR uni9D22 +ENCODING 40226 +BBX 15 16 0 -2 +BITMAP +0408 +2410 +243C +4424 +5FBC +94A4 +E4BC +24A0 +44BE +44A0 +94BE +F482 +18AA +08AA +1282 +210C +ENDCHAR +STARTCHAR uni9D23 +ENCODING 40227 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +11FC +FF04 +11FC +1104 +11FC +7D00 +45FE +4500 +45FE +4402 +7EAA +02A6 +040C +ENDCHAR +STARTCHAR uni9D24 +ENCODING 40228 +BBX 15 16 0 -2 +BITMAP +1020 +2020 +7F3C +4144 +7F68 +41A8 +7F10 +4028 +7FC4 +4082 +7FA0 +0090 +AA88 +AAA0 +8110 +0608 +ENDCHAR +STARTCHAR uni9D25 +ENCODING 40229 +BBX 15 16 0 -2 +BITMAP +1020 +2010 +7C10 +44FE +7C82 +4504 +7C00 +4028 +7E28 +4028 +7E28 +0228 +AA44 +AA44 +8244 +0C82 +ENDCHAR +STARTCHAR uni9D26 +ENCODING 40230 +BBX 15 15 1 -1 +BITMAP +0100 +1FF0 +1110 +FFFE +0920 +3FF8 +C816 +0FF0 +0810 +0FF0 +0800 +0FFE +2004 +2924 +4498 +ENDCHAR +STARTCHAR uni9D27 +ENCODING 40231 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +10FC +FE84 +82FC +8484 +00FC +7880 +48FE +4880 +48FE +4A02 +4EAA +4AAA +8202 +000C +ENDCHAR +STARTCHAR uni9D28 +ENCODING 40232 +BBX 15 15 1 -1 +BITMAP +0020 +0040 +FDFC +9504 +95FC +FD04 +95FC +9500 +95FE +FD00 +11FE +1002 +12AA +12A2 +140C +ENDCHAR +STARTCHAR uni9D29 +ENCODING 40233 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +51FC +5104 +7DFC +9104 +11FC +1100 +FDFE +1100 +11FE +2802 +26AA +42AA +8202 +000C +ENDCHAR +STARTCHAR uni9D2A +ENCODING 40234 +BBX 15 15 1 -1 +BITMAP +0020 +1040 +10FC +1084 +FEFC +8284 +82FC +2880 +28FE +2880 +24FE +4402 +4156 +8152 +0204 +ENDCHAR +STARTCHAR uni9D2B +ENCODING 40235 +BBX 15 15 1 -1 +BITMAP +0040 +0080 +FBF8 +AA08 +ABF8 +AA08 +FBF8 +AA00 +ABFE +AA00 +ABFC +F804 +0554 +04A4 +0818 +ENDCHAR +STARTCHAR uni9D2C +ENCODING 40236 +BBX 14 15 1 -1 +BITMAP +2208 +1110 +7FFC +4204 +5FF4 +1010 +1FF0 +1010 +1FF0 +1000 +1FFC +0004 +5244 +4924 +8018 +ENDCHAR +STARTCHAR uni9D2D +ENCODING 40237 +BBX 14 16 1 -2 +BITMAP +2080 +4100 +F3F8 +9208 +93F8 +9208 +F3F8 +8200 +83FC +F200 +93FC +9004 +9554 +F554 +9404 +0018 +ENDCHAR +STARTCHAR uni9D2E +ENCODING 40238 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FEFC +2884 +44FC +8284 +7CFC +0080 +FEFE +2080 +40FE +7C02 +04AA +04AA +2902 +100C +ENDCHAR +STARTCHAR uni9D2F +ENCODING 40239 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +10FC +1084 +20FC +FE84 +AAFC +AA80 +AAFE +AA80 +AAFE +AA02 +AAAA +A2AA +8B02 +840C +ENDCHAR +STARTCHAR uni9D30 +ENCODING 40240 +BBX 15 16 0 -2 +BITMAP +0820 +1C40 +70FC +1084 +10FC +FC84 +10FC +1080 +7CFE +4480 +44FE +4402 +44AA +7CAA +4502 +000C +ENDCHAR +STARTCHAR uni9D31 +ENCODING 40241 +BBX 15 16 0 -2 +BITMAP +2840 +2880 +FDFC +2904 +29FC +0104 +05FC +4500 +29FE +2900 +11FE +1002 +2AAA +2AAA +4A02 +800C +ENDCHAR +STARTCHAR uni9D32 +ENCODING 40242 +BBX 15 15 1 -1 +BITMAP +8020 +8C40 +F1FC +8104 +85FC +8504 +7DFC +0100 +FDFE +8500 +85FE +FC02 +86AA +84AA +FC0C +ENDCHAR +STARTCHAR uni9D33 +ENCODING 40243 +BBX 15 16 0 -2 +BITMAP +1020 +0840 +7EFC +4284 +94FC +1084 +10FC +FE80 +24FE +2480 +48FE +2802 +12AA +2AAA +4602 +800C +ENDCHAR +STARTCHAR uni9D34 +ENCODING 40244 +BBX 15 16 0 -2 +BITMAP +1010 +1020 +277C +4044 +907C +1044 +2FFC +6240 +A27E +2240 +227E +2202 +22AA +22AA +2B02 +240C +ENDCHAR +STARTCHAR uni9D35 +ENCODING 40245 +BBX 15 16 0 -2 +BITMAP +2820 +2840 +28FC +2884 +AAFC +6C84 +28FC +2880 +6CFE +AA80 +28FE +2802 +2AAA +4CAA +4902 +800C +ENDCHAR +STARTCHAR uni9D36 +ENCODING 40246 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +10FC +FE84 +10FC +1084 +7CFC +0080 +00FE +7C80 +44FE +4402 +44AA +7CAA +4502 +000C +ENDCHAR +STARTCHAR uni9D37 +ENCODING 40247 +BBX 14 16 0 -2 +BITMAP +7F04 +0844 +1E44 +2244 +5444 +0844 +320C +DFF0 +1010 +1FF0 +1010 +1FFC +1000 +1FFC +0004 +492C +ENDCHAR +STARTCHAR uni9D38 +ENCODING 40248 +BBX 15 16 0 -2 +BITMAP +1040 +5080 +51FC +7D04 +91FC +1104 +11FC +FF00 +31FE +3900 +55FE +5402 +92AA +12AA +1202 +100C +ENDCHAR +STARTCHAR uni9D39 +ENCODING 40249 +BBX 15 16 0 -2 +BITMAP +4440 +2480 +29FC +FF04 +11FC +1104 +7DFC +1100 +11FE +FF00 +11FE +1002 +22AA +22AA +4202 +800C +ENDCHAR +STARTCHAR uni9D3A +ENCODING 40250 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FEFC +1084 +7CFC +1484 +7CFC +5080 +7EFE +1280 +12FE +1602 +28AA +24AA +4502 +800C +ENDCHAR +STARTCHAR uni9D3B +ENCODING 40251 +BBX 15 15 1 -1 +BITMAP +4020 +2020 +00FC +0E84 +84FC +4484 +24FC +0480 +04FE +2480 +26FE +2802 +42AA +42A2 +840C +ENDCHAR +STARTCHAR uni9D3C +ENCODING 40252 +BBX 15 16 0 -2 +BITMAP +1010 +2010 +7F3C +4124 +7F44 +4128 +7F10 +4028 +7FC6 +4000 +7FBC +00A4 +AAA4 +AAA4 +813C +0624 +ENDCHAR +STARTCHAR uni9D3D +ENCODING 40253 +BBX 14 16 0 -2 +BITMAP +1000 +FE7C +2244 +1C7C +E200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1000 +1FFC +1000 +1FFC +2A44 +452C +ENDCHAR +STARTCHAR uni9D3E +ENCODING 40254 +BBX 15 15 1 -1 +BITMAP +2020 +2040 +28FC +4C84 +F2FC +1084 +50FC +7C80 +90FE +1080 +FEFE +1002 +1156 +1152 +120C +ENDCHAR +STARTCHAR uni9D3F +ENCODING 40255 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +29FC +4504 +83FC +7D04 +01FC +0100 +7DFE +4500 +45FE +4402 +46AA +7CA2 +040C +ENDCHAR +STARTCHAR uni9D40 +ENCODING 40256 +BBX 14 16 0 -2 +BITMAP +0818 +13E0 +3040 +57FC +9040 +13F8 +0200 +1FF0 +1010 +1FF0 +1010 +1FFC +1000 +1FFC +0004 +492C +ENDCHAR +STARTCHAR uni9D41 +ENCODING 40257 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +11FC +FF04 +29FC +2504 +43FC +A500 +25FE +2900 +11FE +2802 +42AA +82A2 +040C +ENDCHAR +STARTCHAR uni9D42 +ENCODING 40258 +BBX 15 15 1 -1 +BITMAP +1420 +1440 +14FC +2484 +3FFC +6484 +A4FC +2E80 +2DFE +3480 +24FE +2402 +24AA +24AA +2504 +ENDCHAR +STARTCHAR uni9D43 +ENCODING 40259 +BBX 15 15 1 -1 +BITMAP +0810 +1020 +7CFC +4484 +54FC +5484 +44FC +FE80 +44FE +5480 +54FE +5402 +5556 +8552 +8D04 +ENDCHAR +STARTCHAR uni9D44 +ENCODING 40260 +BBX 15 15 1 -1 +BITMAP +0010 +FE20 +20FC +2884 +24FC +4A84 +F2FC +1080 +10FE +7C80 +10FE +1002 +1156 +1D2A +E20C +ENDCHAR +STARTCHAR uni9D45 +ENCODING 40261 +BBX 15 16 0 -2 +BITMAP +2040 +2080 +39FC +4904 +49FC +A904 +11FC +2900 +45FE +8500 +79FE +4802 +4AAA +4AAA +7A02 +480C +ENDCHAR +STARTCHAR uni9D46 +ENCODING 40262 +BBX 15 15 1 -1 +BITMAP +2100 +421E +8FC0 +0840 +2FC0 +285E +4FC4 +C804 +4FE4 +4804 +4FE4 +4024 +5564 +54A4 +60CC +ENDCHAR +STARTCHAR uni9D47 +ENCODING 40263 +BBX 15 15 1 -1 +BITMAP +2010 +2020 +3EFC +4884 +48FC +8884 +7EFC +0880 +48FE +4880 +FEFE +0802 +0956 +0952 +0904 +ENDCHAR +STARTCHAR uni9D48 +ENCODING 40264 +BBX 15 15 1 -1 +BITMAP +0020 +FC40 +49FC +4904 +79FC +4904 +49FC +7900 +49FE +4900 +49FE +782A +CA96 +0A42 +0C0C +ENDCHAR +STARTCHAR uni9D49 +ENCODING 40265 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0440 +1450 +2448 +4204 +1FF0 +1010 +1FF0 +1010 +1FFC +1000 +1FFC +0004 +492C +ENDCHAR +STARTCHAR uni9D4A +ENCODING 40266 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +10FC +FE84 +10FC +5484 +54FC +5480 +BAFE +9280 +10FE +2802 +2956 +4552 +820C +ENDCHAR +STARTCHAR uni9D4B +ENCODING 40267 +BBX 15 16 0 -2 +BITMAP +0010 +7E20 +027C +0244 +7E7C +4044 +417C +4140 +3F7E +1040 +087E +2902 +A2AA +A2AA +1F02 +000C +ENDCHAR +STARTCHAR uni9D4C +ENCODING 40268 +BBX 15 16 0 -2 +BITMAP +1010 +2010 +7C28 +4428 +7C44 +44BA +7C10 +4010 +7EFE +4010 +7E58 +0254 +AA92 +AB12 +8250 +0C20 +ENDCHAR +STARTCHAR uni9D4D +ENCODING 40269 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +FEFC +8284 +00FC +7C84 +00FC +0080 +FEFE +2880 +28FE +2802 +28AA +4AAA +4D02 +800C +ENDCHAR +STARTCHAR uni9D4E +ENCODING 40270 +BBX 15 16 0 -2 +BITMAP +0420 +1E40 +E0FC +2284 +92FC +5484 +48FC +1080 +FCFE +2480 +44FE +2802 +10AA +28AA +4502 +800C +ENDCHAR +STARTCHAR uni9D4F +ENCODING 40271 +BBX 15 16 0 -2 +BITMAP +1020 +1440 +10FC +FE84 +10FC +7C84 +54FC +5480 +7CFE +5480 +54FE +7C02 +54AA +54AA +5502 +4C0C +ENDCHAR +STARTCHAR uni9D50 +ENCODING 40272 +BBX 15 15 1 -1 +BITMAP +0010 +FE20 +10FC +1084 +54FC +5484 +54FC +5480 +BAFE +9280 +10FE +1002 +1D56 +E152 +020C +ENDCHAR +STARTCHAR uni9D51 +ENCODING 40273 +BBX 15 15 1 -1 +BITMAP +0020 +F840 +89FC +8904 +F9FC +0104 +F9FC +8900 +F9FE +8900 +89FE +F802 +8AAA +8AA2 +9A04 +ENDCHAR +STARTCHAR uni9D52 +ENCODING 40274 +BBX 15 15 1 -1 +BITMAP +2810 +2420 +42FC +9084 +10FC +2884 +24FC +4280 +80FE +7C80 +44FE +4402 +4556 +4552 +7D0C +ENDCHAR +STARTCHAR uni9D53 +ENCODING 40275 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FEFC +1084 +10FC +FE84 +82FC +0480 +78FE +0880 +10FE +1E02 +F0AA +10AA +5102 +200C +ENDCHAR +STARTCHAR uni9D54 +ENCODING 40276 +BBX 15 16 0 -2 +BITMAP +1010 +2010 +7C20 +4444 +7CFE +4428 +7C44 +40A2 +7E3C +4044 +7E44 +02A8 +AA10 +AA28 +8244 +0C82 +ENDCHAR +STARTCHAR uni9D55 +ENCODING 40277 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +20FC +4484 +FEFC +2884 +44FC +A280 +3CFE +4480 +44FE +A802 +12AA +2AAA +4602 +800C +ENDCHAR +STARTCHAR uni9D56 +ENCODING 40278 +BBX 14 16 1 -2 +BITMAP +0080 +0100 +FBF8 +8A08 +8BF8 +FA08 +8BF8 +8A00 +FBFC +8200 +A3FC +9004 +AD54 +C554 +8404 +0018 +ENDCHAR +STARTCHAR uni9D57 +ENCODING 40279 +BBX 15 16 0 -2 +BITMAP +4210 +2420 +187C +2444 +527C +1044 +FF7C +2040 +287E +7E40 +AA7E +2A02 +2AAA +2EAA +0902 +080C +ENDCHAR +STARTCHAR uni9D58 +ENCODING 40280 +BBX 15 16 0 -2 +BITMAP +0010 +7E20 +127C +1244 +FF7C +1244 +127C +7E40 +207E +2040 +7E7E +6202 +A2AA +22AA +3F02 +220C +ENDCHAR +STARTCHAR uni9D59 +ENCODING 40281 +BBX 15 15 1 -1 +BITMAP +0020 +7840 +49FC +4904 +79FC +4904 +49FC +7900 +49FE +4900 +49FE +7802 +22AA +4AAA +840C +ENDCHAR +STARTCHAR uni9D5A +ENCODING 40282 +BBX 15 16 0 -2 +BITMAP +0C20 +7040 +10FC +FE84 +10FC +3884 +54FC +9280 +00FE +3880 +28FE +2802 +2AAA +4CAA +4902 +800C +ENDCHAR +STARTCHAR uni9D5B +ENCODING 40283 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +54FC +5484 +A8FC +5484 +54FC +0080 +FEFE +1080 +10FE +1002 +1EAA +F2AA +4202 +000C +ENDCHAR +STARTCHAR uni9D5C +ENCODING 40284 +BBX 15 15 1 -1 +BITMAP +4420 +2840 +FDFC +1504 +15FC +7D04 +51FC +5100 +7DFE +1500 +35FE +3412 +5AAA +92A2 +140C +ENDCHAR +STARTCHAR uni9D5D +ENCODING 40285 +BBX 15 15 1 -1 +BITMAP +1410 +2420 +E6FC +2584 +24FC +FF84 +24FC +2580 +26FE +6680 +A4FE +2D02 +36AA +22AA +6204 +ENDCHAR +STARTCHAR uni9D5E +ENCODING 40286 +BBX 15 15 1 -1 +BITMAP +7C50 +1048 +FFFE +1024 +7EA8 +1112 +7FFE +1010 +1FF0 +1010 +1FFE +1000 +5FFC +5244 +8928 +ENDCHAR +STARTCHAR uni9D5F +ENCODING 40287 +BBX 15 15 1 -1 +BITMAP +5BF8 +2040 +D1F0 +3040 +D7FC +2200 +DFE0 +1020 +1FE0 +1020 +1FFE +1000 +5FFC +5244 +8928 +ENDCHAR +STARTCHAR uni9D60 +ENCODING 40288 +BBX 15 15 1 -1 +BITMAP +1020 +5040 +51FC +7D04 +91FC +1104 +11FC +FF00 +11FE +7D00 +45FE +4402 +4556 +7D52 +020C +ENDCHAR +STARTCHAR uni9D61 +ENCODING 40289 +BBX 15 15 1 -1 +BITMAP +0620 +7540 +04FC +0484 +FFFC +0484 +14FC +5480 +5CFE +5480 +54FE +5502 +5D56 +7242 +C20C +ENDCHAR +STARTCHAR uni9D62 +ENCODING 40290 +BBX 15 15 1 -1 +BITMAP +0820 +1040 +3DFC +2504 +3DFC +2504 +25FC +3D00 +25FE +2500 +FDFE +1402 +2556 +C552 +0D04 +ENDCHAR +STARTCHAR uni9D63 +ENCODING 40291 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +FDFC +1104 +7DFC +5504 +55FC +7D00 +11FE +3100 +39FE +5402 +52AA +92AA +1404 +ENDCHAR +STARTCHAR uni9D64 +ENCODING 40292 +BBX 15 15 1 -1 +BITMAP +2010 +3C20 +24FC +4884 +FCFC +5484 +54FC +7C80 +54FE +5480 +7CFE +4402 +4556 +8552 +8D04 +ENDCHAR +STARTCHAR uni9D65 +ENCODING 40293 +BBX 14 16 0 -2 +BITMAP +4904 +2A24 +7F24 +0824 +FFA4 +080C +0200 +1FF0 +1010 +1FF0 +1010 +1FFC +1000 +1FFC +0004 +492C +ENDCHAR +STARTCHAR uni9D66 +ENCODING 40294 +BBX 15 16 0 -2 +BITMAP +1000 +20FC +7C04 +4404 +7C7C +4404 +7C04 +40FE +7E10 +4092 +7E54 +0238 +AA54 +AA92 +8250 +0C20 +ENDCHAR +STARTCHAR uni9D67 +ENCODING 40295 +BBX 15 16 0 -2 +BITMAP +4440 +2880 +01FC +7D04 +29FC +2904 +29FC +2900 +FDFE +2900 +29FE +2802 +2AAA +4AAA +4A02 +880C +ENDCHAR +STARTCHAR uni9D68 +ENCODING 40296 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +28FC +2484 +42FC +B884 +10FC +1080 +FEFE +1080 +10FE +7C02 +44AA +44AA +7D02 +440C +ENDCHAR +STARTCHAR uni9D69 +ENCODING 40297 +BBX 15 15 1 -1 +BITMAP +0008 +F790 +94BC +94A4 +95BC +D424 +B43C +97A0 +94BE +D4A0 +B6BE +9502 +9556 +96D2 +9444 +ENDCHAR +STARTCHAR uni9D6A +ENCODING 40298 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FEFC +2884 +54FC +9284 +7CFC +5480 +7CFE +5480 +7CFE +1002 +16AA +1AAA +1202 +000C +ENDCHAR +STARTCHAR uni9D6B +ENCODING 40299 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +1DFC +1104 +7DFC +4504 +7DFC +4500 +45FE +7D00 +11FE +FC02 +12AA +12AA +1404 +ENDCHAR +STARTCHAR uni9D6C +ENCODING 40300 +BBX 15 15 1 -1 +BITMAP +0008 +7710 +557C +5544 +557C +7744 +557C +5540 +557E +7740 +557E +5502 +5556 +9952 +BB46 +ENDCHAR +STARTCHAR uni9D6D +ENCODING 40301 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +28FC +2484 +42FC +BC84 +10FC +1080 +FEFE +1080 +94FE +5802 +52AA +1EAA +F202 +400C +ENDCHAR +STARTCHAR uni9D6E +ENCODING 40302 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +3EFC +2284 +44FC +8084 +10FC +6680 +42FE +4280 +66FE +4202 +42AA +7EAA +4302 +000C +ENDCHAR +STARTCHAR uni9D6F +ENCODING 40303 +BBX 15 15 1 -1 +BITMAP +0810 +1020 +7EFC +4A84 +4AFC +7E84 +52FC +5280 +7EFE +2880 +48FE +FE02 +0956 +0952 +0A04 +ENDCHAR +STARTCHAR uni9D70 +ENCODING 40304 +BBX 15 15 1 -1 +BITMAP +0010 +7F20 +417C +4944 +5D7C +4944 +5D7C +4940 +417E +5D40 +557E +5502 +5556 +9D52 +8384 +ENDCHAR +STARTCHAR uni9D71 +ENCODING 40305 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +7CFC +1084 +10FC +FE84 +00FC +4480 +92FE +1080 +7CFE +1002 +12AA +1EAA +E202 +400C +ENDCHAR +STARTCHAR uni9D72 +ENCODING 40306 +BBX 15 15 1 -1 +BITMAP +2810 +2820 +FEFC +2884 +28FC +2884 +FEFC +0080 +7CFE +4480 +44FE +7C02 +4556 +4552 +7D0C +ENDCHAR +STARTCHAR uni9D73 +ENCODING 40307 +BBX 15 15 1 -1 +BITMAP +0620 +7840 +40FC +7E84 +42FC +7E84 +40FC +5E80 +52FE +5E80 +52FE +5E02 +92AA +12AA +1704 +ENDCHAR +STARTCHAR uni9D74 +ENCODING 40308 +BBX 15 16 0 -2 +BITMAP +4020 +4040 +7EFC +8284 +22FC +AA84 +72FC +2280 +FEFE +2280 +72FE +AA02 +22AA +22AA +0B02 +040C +ENDCHAR +STARTCHAR uni9D75 +ENCODING 40309 +BBX 15 16 0 -2 +BITMAP +2020 +2040 +3CFC +4484 +88FC +7E84 +52FC +5280 +7EFE +1080 +2CFE +2A02 +28AA +4AAA +4B02 +860C +ENDCHAR +STARTCHAR uni9D76 +ENCODING 40310 +BBX 15 15 1 -1 +BITMAP +0020 +7C40 +29FC +2904 +29FC +6D04 +45FC +4500 +45FE +6D00 +29FE +2802 +2EAA +F2AA +0404 +ENDCHAR +STARTCHAR uni9D77 +ENCODING 40311 +BBX 15 15 1 -1 +BITMAP +1010 +1020 +FF7C +8144 +407C +7744 +557C +5540 +957E +5540 +277E +2402 +44AA +44AA +8384 +ENDCHAR +STARTCHAR uni9D78 +ENCODING 40312 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FEFC +1084 +28FC +4484 +FEFC +0480 +74FE +5480 +54FE +7402 +54AA +04AA +1502 +080C +ENDCHAR +STARTCHAR uni9D79 +ENCODING 40313 +BBX 13 16 1 -2 +BITMAP +0C80 +70F8 +1128 +FC48 +3888 +5528 +9410 +3FE0 +2020 +3FE0 +2020 +3FF8 +2000 +3FF8 +0008 +9258 +ENDCHAR +STARTCHAR uni9D7A +ENCODING 40314 +BBX 15 15 1 -1 +BITMAP +1010 +1020 +FF7C +2444 +247C +2F44 +497C +5540 +CB7E +4A40 +467E +4402 +4AAA +50AA +4104 +ENDCHAR +STARTCHAR uni9D7B +ENCODING 40315 +BBX 15 16 0 -2 +BITMAP +1050 +2048 +7C80 +44FE +7D90 +4690 +7CFC +4090 +7E90 +40FC +7E90 +0290 +AA90 +AAFE +8280 +0C80 +ENDCHAR +STARTCHAR uni9D7C +ENCODING 40316 +BBX 15 15 1 -1 +BITMAP +1010 +1020 +FEFC +AA84 +AAFC +4884 +8EFC +0080 +7CFE +1080 +10FE +1C02 +3156 +C152 +0204 +ENDCHAR +STARTCHAR uni9D7D +ENCODING 40317 +BBX 15 16 0 -2 +BITMAP +0010 +F720 +117C +5544 +227C +5544 +897C +1040 +007E +F740 +117E +5502 +222A +552A +8942 +100C +ENDCHAR +STARTCHAR uni9D7E +ENCODING 40318 +BBX 15 15 1 -1 +BITMAP +0010 +7C20 +44FC +7C84 +44FC +4484 +7CFC +0080 +48FE +4880 +6AFE +4C02 +4956 +6952 +8704 +ENDCHAR +STARTCHAR uni9D7F +ENCODING 40319 +BBX 15 16 0 -2 +BITMAP +1000 +20FE +7C82 +44FE +7C82 +44FE +7C00 +4014 +7EE4 +4044 +7E44 +03FE +AA44 +AA44 +8284 +0D04 +ENDCHAR +STARTCHAR uni9D80 +ENCODING 40320 +BBX 15 16 0 -2 +BITMAP +1024 +2024 +7F7E +4124 +7F24 +413C +7F24 +4024 +7FBC +4024 +7FA4 +00FE +AA80 +AAA4 +8122 +0642 +ENDCHAR +STARTCHAR uni9D81 +ENCODING 40321 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +FEFC +0084 +00FC +7C84 +44FC +4480 +7CFE +1080 +54FE +5202 +92AA +10AA +5102 +200C +ENDCHAR +STARTCHAR uni9D82 +ENCODING 40322 +BBX 15 16 0 -2 +BITMAP +2020 +CE40 +82FC +8284 +EEFC +8284 +82FC +FE80 +28FE +2880 +28FE +2802 +4AAA +4CAA +8902 +000C +ENDCHAR +STARTCHAR uni9D83 +ENCODING 40323 +BBX 15 16 0 -2 +BITMAP +1000 +2020 +7CCE +4482 +7C82 +44EE +7C82 +4082 +7EFE +4028 +7E28 +0228 +AA48 +AA4A +828A +0D06 +ENDCHAR +STARTCHAR uni9D84 +ENCODING 40324 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +7DFC +1104 +7DFC +1104 +FDFC +0100 +7DFE +5500 +55FE +7C02 +4556 +4552 +4D04 +ENDCHAR +STARTCHAR uni9D85 +ENCODING 40325 +BBX 15 16 0 -2 +BITMAP +0040 +5480 +55FC +A904 +A9FC +5504 +55FC +0100 +F9FE +A900 +A9FE +F802 +AAAA +AAAA +FA02 +880C +ENDCHAR +STARTCHAR uni9D86 +ENCODING 40326 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +7D04 +11FC +5504 +55FC +5500 +BBFE +1100 +39FE +5402 +92AA +12AA +1202 +100C +ENDCHAR +STARTCHAR uni9D87 +ENCODING 40327 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +FDFC +1104 +7DFC +5504 +7DFC +5500 +7DFE +1100 +39FE +3402 +52AA +92A2 +140C +ENDCHAR +STARTCHAR uni9D88 +ENCODING 40328 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FEFC +1084 +7CFC +1484 +FEFC +1480 +7CFE +1080 +FCFE +2402 +44AA +28AA +3102 +C80C +ENDCHAR +STARTCHAR uni9D89 +ENCODING 40329 +BBX 15 15 1 -1 +BITMAP +1010 +1020 +FEFC +0084 +7CFC +4484 +7CFC +0080 +7CFE +0880 +10FE +1E02 +F156 +1152 +320C +ENDCHAR +STARTCHAR uni9D8A +ENCODING 40330 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +7DFC +5104 +7DFC +5504 +55FC +7F00 +55FE +5500 +7DFE +9002 +9956 +2552 +C20C +ENDCHAR +STARTCHAR uni9D8B +ENCODING 40331 +BBX 15 16 0 -2 +BITMAP +0020 +7E40 +42FC +4284 +7EFC +4884 +48FC +7E80 +48FE +4880 +5CFE +5402 +54AA +54AA +5D02 +940C +ENDCHAR +STARTCHAR uni9D8C +ENCODING 40332 +BBX 15 16 0 -2 +BITMAP +0010 +7F20 +417C +4144 +7F7C +4444 +557C +5540 +557E +5F40 +447E +5502 +552A +572A +9D42 +000C +ENDCHAR +STARTCHAR uni9D8D +ENCODING 40333 +BBX 15 15 1 -1 +BITMAP +0020 +7E40 +42FC +7E84 +42FC +4284 +7EFC +1080 +3EFE +5680 +AAFE +4A02 +12AA +22AA +0D04 +ENDCHAR +STARTCHAR uni9D8E +ENCODING 40334 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +FEFC +8284 +00FC +7C84 +00FC +0080 +FEFE +1080 +10FE +5402 +52AA +92AA +5102 +200C +ENDCHAR +STARTCHAR uni9D8F +ENCODING 40335 +BBX 15 15 1 -1 +BITMAP +0C20 +F440 +A5FC +4904 +41FC +1104 +79FC +1100 +11FE +FD00 +11FE +300A +2AA6 +4A52 +840C +ENDCHAR +STARTCHAR uni9D90 +ENCODING 40336 +BBX 15 16 0 -2 +BITMAP +0820 +8C40 +4AFC +4884 +3EFC +0884 +C8FC +5C80 +6AFE +4880 +48FE +4802 +4AAA +62AA +9A02 +000C +ENDCHAR +STARTCHAR uni9D91 +ENCODING 40337 +BBX 13 16 1 -2 +BITMAP +5548 +5950 +9240 +28A0 +4510 +BFE8 +2020 +3FE0 +2020 +3FE0 +2000 +3FF8 +2000 +3FF8 +5488 +8A58 +ENDCHAR +STARTCHAR uni9D92 +ENCODING 40338 +BBX 15 16 0 -2 +BITMAP +2208 +2210 +FA3C +2224 +27BC +FAA4 +AABC +AAA0 +FABE +22A0 +72BE +AA82 +2AAA +24AA +2482 +298C +ENDCHAR +STARTCHAR uni9D93 +ENCODING 40339 +BBX 15 16 0 -2 +BITMAP +5040 +5080 +F9FC +5104 +51FC +0104 +F9FC +A900 +A9FE +A900 +F9FE +A802 +AAAA +AAAA +FA02 +880C +ENDCHAR +STARTCHAR uni9D94 +ENCODING 40340 +BBX 15 16 0 -2 +BITMAP +0010 +7E20 +247C +1844 +7F7C +2944 +4A7C +A840 +107E +0840 +FF7E +1C02 +2A2A +492A +8842 +080C +ENDCHAR +STARTCHAR uni9D95 +ENCODING 40341 +BBX 15 16 0 -2 +BITMAP +2040 +1080 +79FC +0104 +49FC +3104 +FDFC +0100 +79FE +4900 +49FE +7802 +4AAA +4AAA +7A02 +480C +ENDCHAR +STARTCHAR uni9D96 +ENCODING 40342 +BBX 15 15 1 -1 +BITMAP +FC20 +10A2 +FCA4 +1130 +3848 +5586 +9FF0 +0810 +0FF0 +0810 +0FFC +0800 +2FFC +2924 +4498 +ENDCHAR +STARTCHAR uni9D97 +ENCODING 40343 +BBX 15 15 0 -1 +BITMAP +0040 +7CFC +4484 +7CFC +4484 +7CFC +0080 +FEFE +1080 +10FE +5E02 +52AA +52AA +B004 +9FFE +ENDCHAR +STARTCHAR uni9D98 +ENCODING 40344 +BBX 14 16 1 -2 +BITMAP +4020 +4E40 +4AF8 +EA88 +4AF8 +4E88 +4AF8 +EA80 +AAFC +AE80 +AAFC +AA04 +EA54 +9254 +1284 +2618 +ENDCHAR +STARTCHAR uni9D99 +ENCODING 40345 +BBX 15 15 1 -1 +BITMAP +1010 +1020 +FEFC +4484 +24FC +2884 +FEFC +9280 +92FE +7C80 +54FE +5402 +5D56 +1152 +1204 +ENDCHAR +STARTCHAR uni9D9A +ENCODING 40346 +BBX 15 15 1 -1 +BITMAP +0010 +EE20 +AAFC +AA84 +EEFC +0084 +7CFC +0080 +FEFE +1080 +3CFE +4402 +0556 +0552 +1904 +ENDCHAR +STARTCHAR uni9D9B +ENCODING 40347 +BBX 14 16 1 -2 +BITMAP +9040 +9480 +D9F8 +9108 +95F8 +D508 +ADF8 +4100 +FDFC +8500 +85FC +FC04 +8554 +8554 +FE04 +8418 +ENDCHAR +STARTCHAR uni9D9C +ENCODING 40348 +BBX 15 16 0 -2 +BITMAP +4420 +FE40 +44FC +0084 +7CFC +0484 +28FC +1080 +FEFE +3280 +54FE +9002 +12AA +12AA +5202 +200C +ENDCHAR +STARTCHAR uni9D9D +ENCODING 40349 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +00FC +7C84 +44FC +4484 +7CFC +0080 +FEFE +9280 +92FE +FE02 +92AA +92AA +FF02 +820C +ENDCHAR +STARTCHAR uni9D9E +ENCODING 40350 +BBX 15 16 0 -2 +BITMAP +0210 +0720 +3C7C +2444 +247C +3F44 +247C +2F40 +297E +2F40 +297E +2F02 +292A +492A +4F42 +890C +ENDCHAR +STARTCHAR uni9D9F +ENCODING 40351 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +FEFC +8284 +28FC +4484 +92FC +1480 +12FE +FE80 +10FE +1002 +2AAA +26AA +4202 +800C +ENDCHAR +STARTCHAR uni9DA0 +ENCODING 40352 +BBX 15 16 0 -2 +BITMAP +0010 +FFA0 +807C +BF44 +A17C +BF44 +A17C +BF40 +887E +FFC0 +927E +B202 +8CAA +92AA +A102 +FF8C +ENDCHAR +STARTCHAR uni9DA1 +ENCODING 40353 +BBX 15 15 1 -1 +BITMAP +0010 +7E20 +42FC +7E84 +42FC +7E84 +20FC +3E80 +52FE +D280 +6AFE +4602 +7AAA +02AA +0D04 +ENDCHAR +STARTCHAR uni9DA2 +ENCODING 40354 +BBX 15 16 0 -2 +BITMAP +0E20 +F040 +22FC +9284 +54FC +4884 +7CFC +1080 +FEFE +2080 +3EFE +4202 +54AA +88AA +1502 +620C +ENDCHAR +STARTCHAR uni9DA3 +ENCODING 40355 +BBX 15 16 0 -2 +BITMAP +1010 +0820 +7E7C +4244 +427C +7E44 +427C +4040 +7F7E +5540 +557E +7F02 +D52A +552A +5542 +430C +ENDCHAR +STARTCHAR uni9DA4 +ENCODING 40356 +BBX 15 15 1 -1 +BITMAP +0010 +FE20 +82FC +9284 +7CFC +1084 +7CFC +5480 +7CFE +5480 +7CFE +1002 +FF56 +1152 +1204 +ENDCHAR +STARTCHAR uni9DA5 +ENCODING 40357 +BBX 15 16 0 -2 +BITMAP +0010 +7F20 +497C +4944 +7F7C +4044 +5F7C +5140 +517E +5F40 +517E +5F02 +512A +512A +9F42 +110C +ENDCHAR +STARTCHAR uni9DA6 +ENCODING 40358 +BBX 14 16 0 -2 +BITMAP +107C +FF44 +107C +7E44 +427C +7E44 +028C +1FF0 +1010 +1FF0 +1010 +1FFC +1000 +1FFC +0004 +492C +ENDCHAR +STARTCHAR uni9DA7 +ENCODING 40359 +BBX 15 16 0 -2 +BITMAP +2210 +2220 +7F7C +2244 +2A7C +0844 +3E7C +2A40 +2A7E +2A40 +FF7E +0802 +142A +122A +2242 +400C +ENDCHAR +STARTCHAR uni9DA8 +ENCODING 40360 +BBX 15 16 0 -2 +BITMAP +2020 +3C40 +44FC +7884 +08FC +FE84 +20FC +5280 +9CFE +2C80 +4AFE +9802 +2AAA +4AAA +AA02 +100C +ENDCHAR +STARTCHAR uni9DA9 +ENCODING 40361 +BBX 15 15 1 -1 +BITMAP +0020 +FC20 +447E +28C4 +FF28 +3218 +54A6 +9FF0 +0810 +0FF0 +0810 +0FFE +2004 +2494 +4258 +ENDCHAR +STARTCHAR uni9DAA +ENCODING 40362 +BBX 15 16 0 -2 +BITMAP +0020 +7E40 +42FC +7E84 +42FC +7E84 +42FC +7E80 +14FE +1280 +FEFE +1002 +2AAA +26AA +4202 +800C +ENDCHAR +STARTCHAR uni9DAB +ENCODING 40363 +BBX 15 15 1 -1 +BITMAP +1010 +1020 +FEFC +1084 +FEFC +9284 +D6FC +BA80 +FEFE +1080 +38FE +3402 +5156 +9152 +120C +ENDCHAR +STARTCHAR uni9DAC +ENCODING 40364 +BBX 15 15 1 -1 +BITMAP +0810 +1420 +22FC +DD84 +00FC +7E84 +42FC +7E80 +42FE +7E80 +40FE +7E02 +A356 +2252 +3E04 +ENDCHAR +STARTCHAR uni9DAD +ENCODING 40365 +BBX 15 16 0 -2 +BITMAP +2020 +4410 +F9FE +1040 +247C +FE84 +0084 +5514 +8208 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9DAE +ENCODING 40366 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +FEFC +0084 +7CFC +4484 +7CFC +0080 +FEFE +8280 +BAFE +AA02 +BAAA +82AA +8B02 +840C +ENDCHAR +STARTCHAR uni9DAF +ENCODING 40367 +BBX 15 15 1 -1 +BITMAP +54A8 +2850 +4488 +FFFC +8204 +9FE4 +1020 +1FE0 +1020 +1FE0 +1000 +1FFE +4004 +4924 +8498 +ENDCHAR +STARTCHAR uni9DB0 +ENCODING 40368 +BBX 15 16 0 -2 +BITMAP +0020 +7C40 +44FC +4484 +7CFC +0084 +FEFC +8280 +FEFE +8280 +FEFE +8202 +FEAA +28AA +4502 +840C +ENDCHAR +STARTCHAR uni9DB1 +ENCODING 40369 +BBX 15 16 0 -2 +BITMAP +0100 +7FFE +4442 +9FF4 +0440 +3FF8 +0440 +FFFE +0A20 +1FF0 +2828 +CFE6 +0820 +0FF8 +0008 +1558 +ENDCHAR +STARTCHAR uni9DB2 +ENCODING 40370 +BBX 15 15 1 -1 +BITMAP +0C10 +2420 +427C +9144 +147C +2644 +7A7C +0040 +FF7E +5540 +997E +3302 +5556 +9952 +3384 +ENDCHAR +STARTCHAR uni9DB3 +ENCODING 40371 +BBX 15 16 0 -2 +BITMAP +2100 +427E +F388 +9288 +F2BE +92AA +F3AA +822A +FA2A +83AA +FAAA +0AAE +AA88 +AB88 +8A88 +3008 +ENDCHAR +STARTCHAR uni9DB4 +ENCODING 40372 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +FDFC +A504 +A9FC +3D04 +49FC +FD00 +49FE +4900 +7DFE +4802 +4AAA +7AA2 +040C +ENDCHAR +STARTCHAR uni9DB5 +ENCODING 40373 +BBX 15 15 1 -1 +BITMAP +2010 +7F20 +917C +5544 +7D7C +2144 +467C +2040 +7F7E +9140 +557E +5502 +7D56 +2152 +468C +ENDCHAR +STARTCHAR uni9DB6 +ENCODING 40374 +BBX 15 16 0 -2 +BITMAP +1010 +0820 +7F7C +4844 +5E7C +4A44 +7F7C +4A40 +5E7E +4840 +5E7E +5202 +52AA +52AA +5F02 +920C +ENDCHAR +STARTCHAR uni9DB7 +ENCODING 40375 +BBX 15 16 0 -2 +BITMAP +2020 +1040 +FEFC +8284 +10FC +7C84 +10FC +7C80 +10FE +FE80 +10FE +7C02 +44AA +44AA +7D02 +440C +ENDCHAR +STARTCHAR uni9DB8 +ENCODING 40376 +BBX 15 15 1 -1 +BITMAP +0010 +F720 +117C +1144 +777C +4444 +447C +7740 +557E +9940 +337E +5502 +9956 +1152 +6684 +ENDCHAR +STARTCHAR uni9DB9 +ENCODING 40377 +BBX 15 15 1 -1 +BITMAP +2020 +4E40 +AAFC +AA84 +AAFC +AA84 +EEFC +2880 +48FE +FE80 +92FE +FE02 +92AA +92AA +FE04 +ENDCHAR +STARTCHAR uni9DBA +ENCODING 40378 +BBX 15 15 1 -1 +BITMAP +1010 +D620 +10FC +D684 +10FC +2884 +44FC +FE80 +44FE +7C80 +44FE +7C02 +4556 +4552 +4D04 +ENDCHAR +STARTCHAR uni9DBB +ENCODING 40379 +BBX 15 15 1 -1 +BITMAP +0010 +7C20 +44FC +5C84 +54FC +FE84 +82FC +7C80 +44FE +7C80 +44FE +7C02 +4556 +4552 +4D04 +ENDCHAR +STARTCHAR uni9DBC +ENCODING 40380 +BBX 15 15 1 -1 +BITMAP +1210 +2420 +FF7C +1444 +7F7C +1544 +FFFC +1540 +157E +7F40 +147E +3402 +56AA +95AA +1404 +ENDCHAR +STARTCHAR uni9DBD +ENCODING 40381 +BBX 15 15 1 -1 +BITMAP +2410 +2420 +7F7C +C844 +7E7C +4844 +7E7C +4840 +7F7E +1040 +107E +FF02 +10AA +10AA +1104 +ENDCHAR +STARTCHAR uni9DBE +ENCODING 40382 +BBX 15 16 0 -2 +BITMAP +1080 +10FE +1140 +FEFC +1084 +7CFC +4484 +7CFC +4480 +7CFE +1080 +FEFE +1002 +12AA +12AA +1004 +ENDCHAR +STARTCHAR uni9DBF +ENCODING 40383 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1020 +2448 +68D0 +1224 +7FFA +1010 +1FFE +1000 +1FFC +4004 +4924 +8498 +ENDCHAR +STARTCHAR uni9DC0 +ENCODING 40384 +BBX 15 15 1 -1 +BITMAP +2210 +1220 +147C +FFC4 +227C +2244 +447C +8940 +557E +2240 +227E +5502 +55AA +EEAA +8804 +ENDCHAR +STARTCHAR uni9DC1 +ENCODING 40385 +BBX 15 15 1 -1 +BITMAP +0C10 +2220 +417C +BEC4 +007C +2644 +417C +80C0 +7F7E +5540 +557E +5782 +7D56 +C152 +0204 +ENDCHAR +STARTCHAR uni9DC2 +ENCODING 40386 +BBX 15 15 1 -1 +BITMAP +0810 +1E20 +32FC +CA84 +24FC +1884 +E0FC +3C80 +50FE +1080 +FEFE +1002 +5556 +5552 +7D0C +ENDCHAR +STARTCHAR uni9DC3 +ENCODING 40387 +BBX 15 15 1 -1 +BITMAP +0010 +7E20 +42FC +7E84 +42FC +7E84 +10FC +FE80 +92FE +7E80 +14FE +2402 +6956 +1952 +E604 +ENDCHAR +STARTCHAR uni9DC4 +ENCODING 40388 +BBX 15 15 1 -1 +BITMAP +0C10 +7420 +52FC +8984 +90FC +1084 +24FC +6880 +16FE +F980 +10FE +FE02 +2956 +4552 +8204 +ENDCHAR +STARTCHAR uni9DC5 +ENCODING 40389 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +28FC +2884 +FEFC +AA84 +AAFC +FE80 +10FE +1080 +FEFE +3802 +54AA +92AA +1102 +100C +ENDCHAR +STARTCHAR uni9DC6 +ENCODING 40390 +BBX 15 15 1 -1 +BITMAP +4C10 +7020 +42FC +3E84 +00FC +BC84 +A4FC +BC80 +A4FE +BC80 +A4FE +FE02 +0156 +2952 +C604 +ENDCHAR +STARTCHAR uni9DC7 +ENCODING 40391 +BBX 15 15 1 -1 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FE86 +8200 +10FC +7C44 +4444 +7E28 +4028 +7E10 +AA28 +94C6 +ENDCHAR +STARTCHAR uni9DC8 +ENCODING 40392 +BBX 15 16 0 -2 +BITMAP +2004 +401E +F3F0 +921E +F210 +92FE +F292 +8298 +FAF2 +828E +FA80 +0AB8 +AAA8 +ACAA +8D4A +3A86 +ENDCHAR +STARTCHAR uni9DC9 +ENCODING 40393 +BBX 15 15 1 -1 +BITMAP +0710 +F820 +8F7C +8844 +BF7C +A944 +AE7C +B940 +A77E +A040 +AA7E +4A02 +4AAA +92AA +2304 +ENDCHAR +STARTCHAR uni9DCA +ENCODING 40394 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +00FC +7C84 +44FC +7C84 +00FC +FE80 +82FE +AA80 +92FE +FE02 +92AA +92AA +9302 +860C +ENDCHAR +STARTCHAR uni9DCB +ENCODING 40395 +BBX 15 16 0 -2 +BITMAP +2208 +2210 +FFBC +2224 +2A3C +1424 +223C +5D20 +88BE +0820 +7F3E +0802 +2A2A +492A +A882 +100C +ENDCHAR +STARTCHAR uni9DCC +ENCODING 40396 +BBX 15 16 0 -2 +BITMAP +1000 +20FE +7C90 +44FC +7C90 +44FC +7C90 +4090 +7EFE +4002 +7EAA +02AA +AAAA +AA82 +8214 +0C08 +ENDCHAR +STARTCHAR uni9DCD +ENCODING 40397 +BBX 15 16 0 -2 +BITMAP +1040 +2080 +7DFC +4504 +7DFC +4504 +7DFC +4500 +7DFE +1100 +FDFE +1002 +3AAA +56AA +9202 +100C +ENDCHAR +STARTCHAR uni9DCE +ENCODING 40398 +BBX 15 16 0 -2 +BITMAP +1020 +2040 +7CFC +4484 +7CFC +4484 +7CFC +1080 +FEFE +2880 +54FE +9202 +7CAA +10AA +1102 +100C +ENDCHAR +STARTCHAR uni9DCF +ENCODING 40399 +BBX 15 15 1 -1 +BITMAP +1010 +1020 +FEFC +1084 +7CFC +4484 +7CFC +4480 +7CFE +4480 +7CFE +0002 +FD56 +2952 +C60C +ENDCHAR +STARTCHAR uni9DD0 +ENCODING 40400 +BBX 15 16 0 -2 +BITMAP +0010 +7E20 +427C +7E44 +427C +7E44 +007C +7F40 +407E +5E40 +407E +7F02 +552A +522A +5942 +910C +ENDCHAR +STARTCHAR uni9DD1 +ENCODING 40401 +BBX 15 16 0 -2 +BITMAP +4410 +4420 +777C +AA44 +117C +2044 +107C +FF40 +007E +0440 +447E +2402 +28AA +0EAA +F102 +400C +ENDCHAR +STARTCHAR uni9DD2 +ENCODING 40402 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FEFC +1084 +7CFC +5484 +7CFC +5480 +7CFE +1280 +FEFE +0802 +FEAA +48AA +2902 +180C +ENDCHAR +STARTCHAR uni9DD3 +ENCODING 40403 +BBX 15 15 1 -1 +BITMAP +1010 +1020 +7EFC +4084 +54FC +5484 +7EFC +5480 +54FE +5480 +9CFE +8002 +5556 +5552 +8204 +ENDCHAR +STARTCHAR uni9DD4 +ENCODING 40404 +BBX 15 16 0 -2 +BITMAP +0820 +7F20 +087E +7E44 +08A4 +FF28 +1010 +1E28 +2244 +5FF2 +9010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9DD5 +ENCODING 40405 +BBX 15 16 0 -2 +BITMAP +0090 +79FE +4B20 +4DFC +4920 +49FC +7920 +01FE +0200 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9DD6 +ENCODING 40406 +BBX 15 15 1 -1 +BITMAP +FF78 +9048 +9E4E +A880 +FF7E +9424 +FF38 +0246 +3FE0 +2020 +3FFC +2000 +7FFE +5242 +892C +ENDCHAR +STARTCHAR uni9DD7 +ENCODING 40407 +BBX 15 15 1 -1 +BITMAP +0020 +FE40 +80FC +BC84 +A4FC +A484 +BCFC +8080 +EEFE +AA80 +AAFE +EE02 +8156 +FF52 +010C +ENDCHAR +STARTCHAR uni9DD8 +ENCODING 40408 +BBX 15 16 0 -2 +BITMAP +0820 +FFA0 +083E +7F44 +49A8 +7F10 +2A28 +4946 +8200 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9DD9 +ENCODING 40409 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +7F20 +0878 +FFA8 +2268 +7F2A +0856 +7FF0 +0810 +0FF0 +0810 +2FFE +4944 +84AC +ENDCHAR +STARTCHAR uni9DDA +ENCODING 40410 +BBX 15 15 1 -1 +BITMAP +0010 +F720 +537C +9544 +537C +9544 +087C +3440 +CB7E +1040 +647E +1902 +62AA +0CAA +7104 +ENDCHAR +STARTCHAR uni9DDB +ENCODING 40411 +BBX 15 16 0 -2 +BITMAP +0208 +3FD0 +223C +2FA4 +22BC +3FE4 +22BC +2FA0 +223E +2FA0 +2ABE +2F82 +4AAA +4FAA +8A82 +098C +ENDCHAR +STARTCHAR uni9DDC +ENCODING 40412 +BBX 15 16 0 -2 +BITMAP +0810 +7F20 +497C +FFC4 +497C +7F44 +087C +7F40 +497E +7F40 +107E +FF02 +212A +722A +0C42 +F30C +ENDCHAR +STARTCHAR uni9DDD +ENCODING 40413 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +92FC +FE84 +92FC +FE84 +54FC +5480 +FEFE +5480 +54FE +FE02 +10AA +FEAA +1102 +100C +ENDCHAR +STARTCHAR uni9DDE +ENCODING 40414 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FEFC +1084 +BAFC +5484 +BAFC +1080 +BAFE +5480 +BAFE +1002 +2AAA +26AA +4202 +800C +ENDCHAR +STARTCHAR uni9DDF +ENCODING 40415 +BBX 15 15 1 -1 +BITMAP +1080 +FCFE +2340 +3C7C +2490 +45FE +8C48 +0186 +1FF0 +1010 +1FFE +1000 +5FFE +4922 +8494 +ENDCHAR +STARTCHAR uni9DE0 +ENCODING 40416 +BBX 15 15 1 -1 +BITMAP +2020 +3840 +49FC +9104 +7DFC +5504 +55FC +7D00 +55FE +5500 +7DFE +0002 +AAAA +AAAA +8404 +ENDCHAR +STARTCHAR uni9DE1 +ENCODING 40417 +BBX 15 16 0 -2 +BITMAP +2008 +2010 +7FBC +D524 +553C +5524 +FFBC +5520 +553E +5520 +FFBE +0002 +6A2A +552A +9502 +000C +ENDCHAR +STARTCHAR uni9DE2 +ENCODING 40418 +BBX 15 16 0 -2 +BITMAP +3FFE +2890 +2510 +3FDE +2222 +2A88 +2F88 +2294 +2522 +2FF0 +2410 +27F0 +2410 +47FC +4004 +8AAC +ENDCHAR +STARTCHAR uni9DE3 +ENCODING 40419 +BBX 15 15 1 -1 +BITMAP +0010 +FFA0 +147C +7F44 +557C +7F44 +007C +3E40 +227E +3E40 +227E +3E02 +08AA +FFAA +0804 +ENDCHAR +STARTCHAR uni9DE4 +ENCODING 40420 +BBX 15 16 0 -2 +BITMAP +0020 +EE40 +AAFC +AA84 +EEFC +0084 +7CFC +5480 +7CFE +5480 +7CFE +1002 +FEAA +12AA +1202 +100C +ENDCHAR +STARTCHAR uni9DE5 +ENCODING 40421 +BBX 14 16 0 -2 +BITMAP +1020 +2448 +78F0 +1428 +7EFC +0020 +54A8 +5564 +0200 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9DE6 +ENCODING 40422 +BBX 15 15 1 -1 +BITMAP +2410 +2820 +7EFC +C884 +7CFC +4884 +48FC +7C80 +48FE +4880 +7EFE +0002 +5556 +5552 +8204 +ENDCHAR +STARTCHAR uni9DE7 +ENCODING 40423 +BBX 15 15 1 -1 +BITMAP +1010 +FE20 +10FC +7C84 +00FC +FE84 +82FC +7C80 +00FE +7C80 +44FE +7C02 +4556 +2F52 +F004 +ENDCHAR +STARTCHAR uni9DE8 +ENCODING 40424 +BBX 15 16 0 -2 +BITMAP +4420 +4440 +FEFC +4484 +00FC +FE84 +54FC +5480 +FEFE +5480 +54FE +FE02 +10AA +FEAA +1102 +100C +ENDCHAR +STARTCHAR uni9DE9 +ENCODING 40425 +BBX 15 16 0 -2 +BITMAP +4920 +2A3E +7F48 +4948 +5DA8 +6B10 +4928 +4146 +0200 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9DEA +ENCODING 40426 +BBX 15 15 0 -2 +BITMAP +3EF8 +2288 +3EF8 +2288 +3EF8 +2288 +7FFE +4202 +9FF4 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9DEB +ENCODING 40427 +BBX 15 16 0 -2 +BITMAP +0808 +7F10 +093C +FFA4 +093C +7F24 +083C +AAA0 +EBBE +88A0 +FFBE +8882 +EBAA +AAAA +AA82 +088C +ENDCHAR +STARTCHAR uni9DEC +ENCODING 40428 +BBX 15 16 0 -2 +BITMAP +2820 +2840 +7CFC +2884 +28FC +FE84 +10FC +7C80 +54FE +7C80 +54FE +7C02 +00AA +28AA +4502 +820C +ENDCHAR +STARTCHAR uni9DED +ENCODING 40429 +BBX 15 15 1 -1 +BITMAP +0610 +7820 +92FC +5484 +FEFC +3884 +54FC +9280 +00FE +7C80 +54FE +7C02 +5556 +5552 +7D04 +ENDCHAR +STARTCHAR uni9DEE +ENCODING 40430 +BBX 15 16 0 -2 +BITMAP +0610 +7820 +107C +FFC4 +227C +5D44 +94FC +1C40 +007E +7F40 +417E +5D02 +552A +5D2A +4142 +430C +ENDCHAR +STARTCHAR uni9DEF +ENCODING 40431 +BBX 15 15 1 -1 +BITMAP +1010 +1020 +FEFC +2884 +AAFC +4484 +FEFC +4480 +7CFE +4480 +7CFE +1002 +5556 +9152 +3204 +ENDCHAR +STARTCHAR uni9DF0 +ENCODING 40432 +BBX 15 16 0 -2 +BITMAP +0440 +FFFE +0440 +17D2 +F01C +17D0 +3452 +D7CE +0200 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9DF1 +ENCODING 40433 +BBX 15 16 0 -2 +BITMAP +2020 +FE40 +82FC +FE84 +82FC +FE84 +82FC +FE80 +10FE +9280 +54FE +9202 +10AA +FEAA +1102 +100C +ENDCHAR +STARTCHAR uni9DF2 +ENCODING 40434 +BBX 15 15 1 -1 +BITMAP +1024 +FEFE +4428 +7C48 +4A8A +9D0E +3FE0 +2020 +3FE0 +2020 +3FFE +2000 +3FFC +5244 +892C +ENDCHAR +STARTCHAR uni9DF3 +ENCODING 40435 +BBX 15 16 0 -2 +BITMAP +EE20 +AA40 +EEFC +AA84 +EEFC +8284 +BAFC +AA80 +BAFE +AA80 +BAFE +AA02 +AAAA +DAAA +8302 +860C +ENDCHAR +STARTCHAR uni9DF4 +ENCODING 40436 +BBX 15 15 1 -1 +BITMAP +0010 +F720 +957C +F744 +957C +F744 +817C +8940 +BF7E +8940 +9D7E +AB02 +C956 +8952 +8B44 +ENDCHAR +STARTCHAR uni9DF5 +ENCODING 40437 +BBX 15 16 0 -2 +BITMAP +0010 +7F20 +417C +4144 +7F7C +4844 +5D7C +4A40 +7F7E +4840 +5E7E +7202 +5EAA +52AA +5F02 +920C +ENDCHAR +STARTCHAR uni9DF6 +ENCODING 40438 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +AAFC +AA84 +FEFC +0084 +7CFC +4480 +7CFE +4480 +7CFE +4402 +7CAA +00AA +2902 +440C +ENDCHAR +STARTCHAR uni9DF7 +ENCODING 40439 +BBX 15 16 0 -2 +BITMAP +2210 +1420 +FF7C +1444 +7F7C +5544 +637C +5D40 +417E +7F40 +047E +FF02 +44AA +24AA +2502 +0C0C +ENDCHAR +STARTCHAR uni9DF8 +ENCODING 40440 +BBX 15 15 1 -1 +BITMAP +0010 +FE20 +247C +1844 +FF7C +2944 +4A7C +9840 +FF7E +A540 +C77E +BD02 +A556 +BD52 +8304 +ENDCHAR +STARTCHAR uni9DF9 +ENCODING 40441 +BBX 15 15 1 -1 +BITMAP +0080 +7FFE +4244 +4488 +49FC +5B10 +69FC +4910 +4BFE +4410 +47F0 +4410 +87FE +9544 +22AC +ENDCHAR +STARTCHAR uni9DFA +ENCODING 40442 +BBX 15 15 1 -1 +BITMAP +0010 +7E3C +42C4 +7E38 +10C6 +5E7C +5144 +7FFC +D008 +1FF8 +1008 +1FFE +2004 +4924 +8498 +ENDCHAR +STARTCHAR uni9DFB +ENCODING 40443 +BBX 15 16 0 -2 +BITMAP +2108 +4088 +F3C8 +9010 +F3DE +9264 +F3D4 +8014 +FBD4 +8054 +F894 +08E8 +AB88 +A894 +8A94 +3122 +ENDCHAR +STARTCHAR uni9DFC +ENCODING 40444 +BBX 15 16 0 -2 +BITMAP +0020 +EE40 +AAFC +EE84 +AAFC +EE84 +82FC +BA80 +AAFE +BA80 +AAFE +BA02 +AAAA +82AA +8B02 +840C +ENDCHAR +STARTCHAR uni9DFD +ENCODING 40445 +BBX 15 15 1 -1 +BITMAP +1480 +6338 +4488 +7338 +4488 +FFFC +8204 +9FE4 +1020 +1FE0 +1020 +1FFE +4024 +4914 +84B8 +ENDCHAR +STARTCHAR uni9DFE +ENCODING 40446 +BBX 15 16 0 -2 +BITMAP +1020 +FE40 +44FC +2884 +FEFC +0084 +7CFC +4480 +7CFE +4480 +7CFE +1002 +0AAA +A9AA +A502 +1C0C +ENDCHAR +STARTCHAR uni9DFF +ENCODING 40447 +BBX 15 16 0 -2 +BITMAP +3E10 +22FE +3E44 +2028 +7EFE +A210 +3EFC +2210 +0200 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9E00 +ENCODING 40448 +BBX 15 16 0 -2 +BITMAP +0010 +7F20 +557C +5544 +7F7C +2044 +7F7C +9140 +7D7E +5540 +557E +7D02 +112A +7D2A +0542 +020C +ENDCHAR +STARTCHAR uni9E01 +ENCODING 40449 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +2000 +3FF8 +0000 +3FF8 +2008 +3FF8 +0200 +779C +5494 +7794 +549C +77D6 +5056 +B562 +ENDCHAR +STARTCHAR uni9E02 +ENCODING 40450 +BBX 15 15 1 -1 +BITMAP +8710 +7A20 +297C +24C4 +047C +8844 +4A7C +2440 +097E +1EC0 +247E +2F02 +44AA +4AAA +9104 +ENDCHAR +STARTCHAR uni9E03 +ENCODING 40451 +BBX 15 16 0 -2 +BITMAP +2104 +4088 +F3FE +9020 +F1FC +9020 +F3FE +8054 +F992 +8090 +FBFE +0890 +A8D4 +AB8A +8896 +31A2 +ENDCHAR +STARTCHAR uni9E04 +ENCODING 40452 +BBX 15 16 0 -2 +BITMAP +1020 +7E20 +4A7E +7EC4 +1028 +FF10 +2028 +3EC6 +4200 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9E05 +ENCODING 40453 +BBX 15 16 0 -2 +BITMAP +0010 +7F20 +557C +7F44 +087C +7F44 +087C +FFC0 +227E +1440 +7F7E +0802 +FFAA +08AA +0902 +080C +ENDCHAR +STARTCHAR uni9E06 +ENCODING 40454 +BBX 15 16 0 -2 +BITMAP +0810 +0F20 +087C +7F44 +497C +7C44 +497C +5F40 +527E +5E40 +407E +5E02 +482A +7F2A +5242 +A10C +ENDCHAR +STARTCHAR uni9E07 +ENCODING 40455 +BBX 15 15 1 -1 +BITMAP +0810 +0820 +FF7C +4144 +5D7C +5544 +5D7C +4140 +7F7E +2240 +3E7E +2202 +3EAA +232A +FC04 +ENDCHAR +STARTCHAR uni9E08 +ENCODING 40456 +BBX 15 16 0 -2 +BITMAP +1410 +5520 +367C +1444 +FF7C +2244 +147C +7F40 +087E +7F40 +087E +FF02 +1CAA +2AAA +4902 +080C +ENDCHAR +STARTCHAR uni9E09 +ENCODING 40457 +BBX 15 16 0 -2 +BITMAP +11FC +1104 +FDFC +3104 +59FC +9480 +11FE +1252 +02AA +1FF4 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9E0A +ENCODING 40458 +BBX 15 15 1 -1 +BITMAP +0210 +7220 +5FFC +5044 +54FC +74C4 +417C +4FC0 +727E +5240 +DFFE +5202 +52AA +72A2 +020C +ENDCHAR +STARTCHAR uni9E0B +ENCODING 40459 +BBX 15 16 0 -2 +BITMAP +0810 +FF20 +917C +4A44 +A57C +1C44 +007C +7F40 +557E +FFC0 +007E +7F02 +08AA +08AA +2902 +100C +ENDCHAR +STARTCHAR uni9E0C +ENCODING 40460 +BBX 15 16 0 -2 +BITMAP +1044 +21FE +7C54 +4448 +7CFE +4590 +7CFE +4090 +7EFE +4090 +7EFE +0280 +ABFE +AA44 +8238 +0DC6 +ENDCHAR +STARTCHAR uni9E0D +ENCODING 40461 +BBX 15 15 1 -1 +BITMAP +0010 +FF20 +4A7C +8944 +FFFC +8944 +DD7C +AB40 +DD7E +8940 +DD7E +AB02 +DDAA +892A +8304 +ENDCHAR +STARTCHAR uni9E0E +ENCODING 40462 +BBX 14 16 0 -2 +BITMAP +3EF8 +2288 +3EF8 +2288 +3EF8 +2288 +3EF8 +1450 +2288 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9E0F +ENCODING 40463 +BBX 15 16 0 -2 +BITMAP +2410 +FF20 +247C +FF44 +817C +7E44 +007C +FF40 +107E +28C0 +D57E +2E02 +D5AA +24AA +D502 +080C +ENDCHAR +STARTCHAR uni9E10 +ENCODING 40464 +BBX 15 16 0 -2 +BITMAP +0010 +EE20 +227C +AA44 +667C +AA44 +007C +2440 +7F7E +C840 +7E7E +4802 +7EAA +48AA +7F02 +400C +ENDCHAR +STARTCHAR uni9E11 +ENCODING 40465 +BBX 15 16 0 -2 +BITMAP +510C +278A +5008 +97BE +3008 +5788 +9494 +57A4 +2202 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9E12 +ENCODING 40466 +BBX 15 16 0 -2 +BITMAP +1A38 +2388 +3A38 +2388 +38B8 +2288 +FFFE +1010 +2208 +DFF6 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9E13 +ENCODING 40467 +BBX 15 16 0 -2 +BITMAP +0008 +7F10 +493C +7F24 +493C +7F24 +413C +0020 +FFBE +AAA0 +AABE +FF82 +AAAA +AAAA +FF82 +888C +ENDCHAR +STARTCHAR uni9E14 +ENCODING 40468 +BBX 15 16 0 -2 +BITMAP +21FC +4104 +F9FC +8904 +F9FC +8888 +F9FC +8088 +FDFE +8088 +FD24 +06AA +5470 +54A8 +8524 +1860 +ENDCHAR +STARTCHAR uni9E15 +ENCODING 40469 +BBX 15 15 1 -1 +BITMAP +0808 +0F10 +083C +7FA4 +48BC +7F24 +48BC +5FA0 +553E +5F20 +553E +7F82 +AA56 +ABD2 +7C84 +ENDCHAR +STARTCHAR uni9E16 +ENCODING 40470 +BBX 15 16 0 -2 +BITMAP +7F08 +0810 +FFBC +88A4 +6B3C +0824 +6B3C +2420 +7FBE +C820 +7F3E +4802 +7F2A +482A +7F82 +400C +ENDCHAR +STARTCHAR uni9E17 +ENCODING 40471 +BBX 15 16 0 -2 +BITMAP +0840 +3E7C +1440 +FF78 +2208 +3E78 +2242 +263E +0200 +1FF0 +1010 +1FF0 +1010 +1FFC +5244 +892C +ENDCHAR +STARTCHAR uni9E18 +ENCODING 40472 +BBX 15 16 0 -2 +BITMAP +FE20 +1040 +FEFC +9284 +54FC +1084 +54FC +0080 +2EFE +FA80 +2EFE +7A02 +AEAA +2AAA +2F02 +2A0C +ENDCHAR +STARTCHAR uni9E19 +ENCODING 40473 +BBX 15 15 1 -1 +BITMAP +0808 +1410 +223C +C1A4 +3E3C +0024 +EEFC +AAA0 +EEFE +0020 +FF3E +9502 +FF56 +9552 +9584 +ENDCHAR +STARTCHAR uni9E1A +ENCODING 40474 +BBX 15 15 1 -1 +BITMAP +0010 +7720 +557C +7744 +557C +7744 +557C +7740 +88FE +1040 +FFFE +2202 +4556 +3D52 +C304 +ENDCHAR +STARTCHAR uni9E1B +ENCODING 40475 +BBX 15 15 1 -1 +BITMAP +2210 +2220 +FFFC +2244 +777C +5544 +777C +2440 +7F7E +C840 +7E7E +4802 +7EAA +48AA +7F04 +ENDCHAR +STARTCHAR uni9E1C +ENCODING 40476 +BBX 15 15 1 -1 +BITMAP +F710 +9520 +F77C +9544 +F77C +9544 +F77C +2840 +7F7E +C840 +7E7E +4802 +7EAA +48AA +7F04 +ENDCHAR +STARTCHAR uni9E1D +ENCODING 40477 +BBX 15 15 1 -1 +BITMAP +EF10 +0020 +F77C +9544 +D57C +0844 +FF7C +9440 +FF7E +9540 +FF7E +AA02 +BC56 +A952 +7704 +ENDCHAR +STARTCHAR uni9E1E +ENCODING 40478 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +47D0 +D034 +2388 +4812 +FBBE +2288 +BBBA +A10A +1FF0 +1010 +5FFE +4924 +849C +ENDCHAR +STARTCHAR uni9E1F +ENCODING 40479 +BBX 13 16 1 -2 +BITMAP +0200 +0400 +3FE0 +2020 +2420 +2220 +22A0 +2040 +2000 +3FF8 +0008 +0008 +FFC8 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uni9E20 +ENCODING 40480 +BBX 15 16 0 -2 +BITMAP +2020 +2040 +20FC +2084 +FCA4 +2484 +2494 +2488 +2480 +24FE +2502 +2602 +45FA +4002 +8014 +0008 +ENDCHAR +STARTCHAR uni9E21 +ENCODING 40481 +BBX 15 16 0 -2 +BITMAP +0020 +0040 +00FC +FC84 +04A4 +0484 +4894 +2888 +1080 +10FE +2802 +2402 +45FA +8002 +0014 +0008 +ENDCHAR +STARTCHAR uni9E22 +ENCODING 40482 +BBX 15 16 0 -2 +BITMAP +0420 +0410 +023E +FFC0 +0080 +0042 +0232 +1FEE +1420 +1260 +1000 +1FF8 +0008 +7F88 +0028 +0010 +ENDCHAR +STARTCHAR uni9E23 +ENCODING 40483 +BBX 14 16 1 -2 +BITMAP +0040 +0080 +F3F8 +9208 +9288 +9248 +9248 +9218 +9200 +93FC +F004 +9004 +07F4 +0004 +0028 +0010 +ENDCHAR +STARTCHAR uni9E24 +ENCODING 40484 +BBX 15 16 0 -2 +BITMAP +0020 +0040 +3EFC +2284 +22A4 +2284 +3E94 +2288 +2080 +20FE +2002 +2002 +21FA +4002 +4014 +8008 +ENDCHAR +STARTCHAR uni9E25 +ENCODING 40485 +BBX 14 16 1 -2 +BITMAP +0040 +FC80 +81F8 +8908 +C948 +A908 +9128 +9110 +A900 +A9FC +C804 +8004 +83F4 +FC04 +0028 +0010 +ENDCHAR +STARTCHAR uni9E26 +ENCODING 40486 +BBX 15 16 0 -2 +BITMAP +0020 +7E40 +04FC +2484 +24A4 +2484 +4494 +7F88 +0C80 +14FE +1402 +2402 +45FA +8402 +1414 +0808 +ENDCHAR +STARTCHAR uni9E27 +ENCODING 40487 +BBX 15 16 0 -2 +BITMAP +0810 +0820 +147C +1244 +2164 +4054 +BE44 +224C +2240 +227E +2A02 +2402 +217A +2102 +1F0A +0004 +ENDCHAR +STARTCHAR uni9E28 +ENCODING 40488 +BBX 15 16 0 -2 +BITMAP +4020 +4840 +50FC +6084 +44A4 +4484 +3C94 +1088 +1080 +10FE +FE02 +1002 +11FA +1002 +1014 +1008 +ENDCHAR +STARTCHAR uni9E29 +ENCODING 40489 +BBX 15 16 0 -2 +BITMAP +0810 +0820 +087C +7F44 +4964 +0854 +0844 +144C +1440 +147E +1402 +2502 +267A +4402 +800A +0004 +ENDCHAR +STARTCHAR uni9E2A +ENCODING 40490 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +10FC +1084 +FEA4 +1084 +1094 +1088 +7C80 +44FE +4402 +4402 +45FA +7C02 +4414 +0008 +ENDCHAR +STARTCHAR uni9E2B +ENCODING 40491 +BBX 15 16 0 -2 +BITMAP +1010 +1020 +107C +FF44 +2064 +2854 +4844 +484C +7E40 +087E +2C02 +2A02 +497A +8902 +280A +1004 +ENDCHAR +STARTCHAR uni9E2C +ENCODING 40492 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +1EFC +1084 +10A4 +7C84 +4494 +4488 +4480 +7CFE +4402 +4002 +41FA +4002 +8014 +0008 +ENDCHAR +STARTCHAR uni9E2D +ENCODING 40493 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +92FC +9284 +92A4 +FE84 +9294 +9288 +9280 +FEFE +9202 +1002 +11FA +1002 +1014 +1008 +ENDCHAR +STARTCHAR uni9E2E +ENCODING 40494 +BBX 15 16 0 -2 +BITMAP +0020 +7E40 +42FC +4284 +42A4 +7E84 +0094 +FF88 +2080 +40FE +7E02 +0202 +03FA +0202 +1414 +0808 +ENDCHAR +STARTCHAR uni9E2F +ENCODING 40495 +BBX 15 16 0 -2 +BITMAP +0100 +1FF0 +1110 +1110 +FFFE +0280 +1C70 +E20E +0400 +1FE0 +1220 +1160 +1FFC +0004 +7FD4 +0008 +ENDCHAR +STARTCHAR uni9E30 +ENCODING 40496 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +28FC +2484 +42A4 +9184 +0894 +0888 +FE80 +02FE +4402 +2802 +11FA +0802 +0814 +0008 +ENDCHAR +STARTCHAR uni9E31 +ENCODING 40497 +BBX 14 16 1 -2 +BITMAP +0220 +0F40 +F8F8 +8888 +88C8 +88A8 +8888 +FE98 +8880 +88FC +8804 +8404 +85F4 +A504 +D314 +8908 +ENDCHAR +STARTCHAR uni9E32 +ENCODING 40498 +BBX 15 16 0 -2 +BITMAP +2020 +2040 +40FC +7E84 +82A4 +0284 +7A94 +4A88 +4A80 +4AFE +7A02 +4A02 +03FA +0202 +1414 +0808 +ENDCHAR +STARTCHAR uni9E33 +ENCODING 40499 +BBX 15 16 0 -2 +BITMAP +1000 +3EF8 +4288 +A2AA +1492 +187E +E200 +1FE0 +1420 +1260 +1000 +1FF8 +0008 +7F88 +0028 +0010 +ENDCHAR +STARTCHAR uni9E34 +ENCODING 40500 +BBX 15 16 0 -2 +BITMAP +2208 +1110 +0020 +7FFE +4102 +8204 +1FF0 +1010 +1210 +1150 +1020 +1FFC +0004 +0004 +7FD4 +0008 +ENDCHAR +STARTCHAR uni9E35 +ENCODING 40501 +BBX 15 16 0 -2 +BITMAP +1020 +2010 +7C10 +44FE +5482 +4504 +5440 +4848 +4050 +7E60 +0240 +0242 +FA42 +0242 +143E +0800 +ENDCHAR +STARTCHAR uni9E36 +ENCODING 40502 +BBX 15 16 0 -2 +BITMAP +1020 +2448 +78F0 +1020 +7EFC +0000 +FFFE +0200 +0400 +1FE0 +1220 +1160 +1FFC +0004 +7FD4 +0008 +ENDCHAR +STARTCHAR uni9E37 +ENCODING 40503 +BBX 14 16 0 -2 +BITMAP +1080 +1080 +FBF0 +1090 +1990 +F094 +1154 +520C +2404 +1FE0 +1220 +1160 +1FFC +0004 +7FD4 +0008 +ENDCHAR +STARTCHAR uni9E38 +ENCODING 40504 +BBX 14 16 1 -2 +BITMAP +0020 +FE40 +10F8 +1088 +20C8 +FEA8 +AA88 +AA98 +AA80 +AAFC +AA04 +AA04 +AAF4 +A204 +8A14 +8408 +ENDCHAR +STARTCHAR uni9E39 +ENCODING 40505 +BBX 15 16 0 -2 +BITMAP +0420 +0E40 +38FC +0884 +08A4 +FF84 +0894 +0888 +3E80 +22FE +2202 +2202 +23FA +3E02 +2214 +0008 +ENDCHAR +STARTCHAR uni9E3A +ENCODING 40506 +BBX 15 16 0 -2 +BITMAP +1208 +1210 +123E +2222 +2FB2 +622A +A622 +2726 +2AA0 +2ABE +3202 +2202 +227A +2202 +220A +2204 +ENDCHAR +STARTCHAR uni9E3B +ENCODING 40507 +BBX 15 16 0 -2 +BITMAP +1010 +1020 +277C +4044 +9064 +1054 +2FC4 +624C +A240 +227E +2202 +2202 +227A +2202 +2A0A +2404 +ENDCHAR +STARTCHAR uni9E3C +ENCODING 40508 +BBX 15 16 0 -2 +BITMAP +0820 +1040 +3EFC +2284 +32A4 +2A84 +2A94 +FE88 +2280 +32FE +2A02 +2A02 +23FA +4202 +4A14 +8408 +ENDCHAR +STARTCHAR uni9E3D +ENCODING 40509 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +28FC +2484 +42A4 +8084 +7C94 +0088 +0080 +7CFE +4402 +4402 +45FA +7C02 +4414 +0008 +ENDCHAR +STARTCHAR uni9E3E +ENCODING 40510 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0440 +1450 +2448 +4204 +1FE0 +1420 +1260 +1000 +1FF8 +0008 +7F88 +0028 +0010 +ENDCHAR +STARTCHAR uni9E3F +ENCODING 40511 +BBX 15 16 0 -2 +BITMAP +0010 +8020 +407C +1F44 +8464 +4454 +4444 +044C +2440 +447E +C402 +4702 +5C7A +4802 +400A +0004 +ENDCHAR +STARTCHAR uni9E40 +ENCODING 40512 +BBX 15 16 0 -2 +BITMAP +0010 +0020 +7F7C +0844 +0864 +2A54 +2A44 +2A4C +5D40 +497E +8802 +0802 +0F7A +F002 +400A +0004 +ENDCHAR +STARTCHAR uni9E41 +ENCODING 40513 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FEFC +1084 +10A4 +FE84 +8294 +0488 +7880 +08FE +1002 +1E02 +F1FA +1002 +5014 +2008 +ENDCHAR +STARTCHAR uni9E42 +ENCODING 40514 +BBX 15 16 0 -2 +BITMAP +0008 +FF90 +003E +0022 +F7B2 +94AA +94A2 +94A6 +D6A0 +B5BE +9482 +9482 +94FA +9482 +948A +B584 +ENDCHAR +STARTCHAR uni9E43 +ENCODING 40515 +BBX 14 16 1 -2 +BITMAP +0020 +7C40 +44F8 +4488 +7CC8 +00A8 +FE88 +8298 +8280 +FEFC +8204 +8204 +FEF4 +8204 +8A14 +8408 +ENDCHAR +STARTCHAR uni9E44 +ENCODING 40516 +BBX 15 16 0 -2 +BITMAP +0810 +4820 +487C +7F44 +8864 +0854 +0844 +FF4C +0040 +007E +7E02 +4202 +427A +4202 +7E0A +4204 +ENDCHAR +STARTCHAR uni9E45 +ENCODING 40517 +BBX 15 16 0 -2 +BITMAP +0410 +3620 +E57C +2544 +2464 +FFD4 +2444 +254C +2540 +367E +E602 +2402 +2AFA +3282 +A18A +4084 +ENDCHAR +STARTCHAR uni9E46 +ENCODING 40518 +BBX 15 16 0 -2 +BITMAP +2820 +2440 +42FC +9284 +10A4 +2884 +4494 +8288 +7C80 +44FE +4402 +4402 +45FA +7C02 +4414 +0008 +ENDCHAR +STARTCHAR uni9E47 +ENCODING 40519 +BBX 14 16 1 -2 +BITMAP +8020 +5E40 +02F8 +9288 +92C8 +92A8 +FE88 +9298 +BA80 +D6FC +9204 +9204 +92F4 +8204 +8A14 +8408 +ENDCHAR +STARTCHAR uni9E48 +ENCODING 40520 +BBX 15 16 0 -2 +BITMAP +4420 +2440 +28FC +FC84 +14A4 +1484 +FC94 +9088 +9080 +FEFE +3202 +3202 +53FA +9602 +1014 +1008 +ENDCHAR +STARTCHAR uni9E49 +ENCODING 40521 +BBX 15 16 0 -2 +BITMAP +0410 +0620 +757C +0544 +0464 +FF54 +0444 +144C +1440 +5C7E +5402 +5402 +557A +5D02 +E30A +4104 +ENDCHAR +STARTCHAR uni9E4A +ENCODING 40522 +BBX 15 16 0 -2 +BITMAP +2410 +2420 +247C +FF44 +2464 +2454 +FFC4 +004C +7E40 +427E +4202 +7E02 +427A +4202 +7E0A +4204 +ENDCHAR +STARTCHAR uni9E4B +ENCODING 40523 +BBX 15 16 0 -2 +BITMAP +2208 +2210 +FFBE +2222 +2232 +002A +7F22 +4926 +4920 +493E +7F02 +4902 +497A +4902 +7F0A +4104 +ENDCHAR +STARTCHAR uni9E4C +ENCODING 40524 +BBX 15 16 0 -2 +BITMAP +0808 +0810 +FFBE +1422 +2232 +492A +88A2 +7F26 +4920 +7F3E +4902 +7F02 +087A +0A02 +0C0A +0804 +ENDCHAR +STARTCHAR uni9E4D +ENCODING 40525 +BBX 14 16 1 -2 +BITMAP +0020 +FC40 +84F8 +8488 +FCC8 +84A8 +8488 +FC98 +0080 +88FC +EE04 +8804 +88F4 +AA04 +CC14 +8808 +ENDCHAR +STARTCHAR uni9E4E +ENCODING 40526 +BBX 15 16 0 -2 +BITMAP +1010 +2020 +7F7C +4944 +4964 +7F54 +4944 +514C +7F40 +247E +4402 +FF82 +047A +0402 +040A +0404 +ENDCHAR +STARTCHAR uni9E4F +ENCODING 40527 +BBX 15 16 0 -2 +BITMAP +0010 +7720 +557C +5544 +5564 +7754 +5544 +554C +5540 +777E +5502 +5502 +557A +B502 +890A +1304 +ENDCHAR +STARTCHAR uni9E50 +ENCODING 40528 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +3EFC +2284 +44A4 +8084 +1094 +6688 +4280 +42FE +6602 +4202 +43FA +7E02 +4214 +0008 +ENDCHAR +STARTCHAR uni9E51 +ENCODING 40529 +BBX 15 16 0 -2 +BITMAP +1010 +0820 +FF7C +0044 +7E64 +4254 +7E44 +004C +7E40 +047E +0802 +0F02 +F87A +0802 +280A +1004 +ENDCHAR +STARTCHAR uni9E52 +ENCODING 40530 +BBX 15 16 0 -2 +BITMAP +1010 +0820 +7F7C +4844 +5E64 +4A54 +4A44 +7F4C +4A40 +4A7E +5E02 +4802 +547A +9202 +220A +4004 +ENDCHAR +STARTCHAR uni9E53 +ENCODING 40531 +BBX 15 16 0 -2 +BITMAP +1010 +0820 +FF7C +8144 +4064 +7754 +5544 +554C +5540 +B57E +9702 +1402 +247A +2502 +460A +8404 +ENDCHAR +STARTCHAR uni9E54 +ENCODING 40532 +BBX 15 16 0 -2 +BITMAP +0810 +0820 +7F7C +0944 +FFE4 +0954 +7F44 +084C +4940 +497E +5D02 +6B02 +497A +4902 +890A +0904 +ENDCHAR +STARTCHAR uni9E55 +ENCODING 40533 +BBX 15 16 0 -2 +BITMAP +2008 +2790 +24BE +FCA2 +24B2 +27AA +24A2 +74A6 +54A0 +57BE +5482 +5482 +74FA +0882 +0A8A +1104 +ENDCHAR +STARTCHAR uni9E56 +ENCODING 40534 +BBX 15 16 0 -2 +BITMAP +0010 +7E20 +427C +7E44 +4264 +7E54 +2044 +7F4C +8940 +497E +5502 +4102 +7D7A +0102 +0A0A +0404 +ENDCHAR +STARTCHAR uni9E57 +ENCODING 40535 +BBX 15 16 0 -2 +BITMAP +0010 +7720 +557C +5544 +7764 +0054 +7F44 +004C +FFC0 +207E +3F02 +0102 +017A +0102 +0A0A +0404 +ENDCHAR +STARTCHAR uni9E58 +ENCODING 40536 +BBX 15 16 0 -2 +BITMAP +0020 +7C40 +44FC +7484 +54A4 +FE94 +8294 +7C8C +4480 +7CFE +4402 +7C02 +45FA +4402 +5414 +4808 +ENDCHAR +STARTCHAR uni9E59 +ENCODING 40537 +BBX 13 16 1 -2 +BITMAP +0C40 +7040 +1148 +FD50 +3240 +58A0 +9510 +3FC8 +2840 +24C0 +2000 +3FF0 +0010 +FF10 +0050 +0020 +ENDCHAR +STARTCHAR uni9E5A +ENCODING 40538 +BBX 15 16 0 -2 +BITMAP +2108 +1110 +123E +FFE2 +2132 +212A +4222 +52A6 +94A0 +E73E +2102 +4202 +427A +9482 +F78A +1084 +ENDCHAR +STARTCHAR uni9E5B +ENCODING 40539 +BBX 15 16 0 -2 +BITMAP +0010 +7F20 +497C +4944 +7F64 +4054 +5F44 +514C +5140 +5F7E +5102 +5F02 +517A +5102 +9F0A +1104 +ENDCHAR +STARTCHAR uni9E5C +ENCODING 40540 +BBX 15 16 0 -2 +BITMAP +0020 +7E20 +247E +18A4 +FF28 +2910 +4A28 +9AC6 +0400 +1FE0 +1220 +1160 +1FFC +0004 +7FD4 +0008 +ENDCHAR +STARTCHAR uni9E5D +ENCODING 40541 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +00FC +7C84 +44A4 +7C84 +0094 +FE88 +8280 +AAFE +9202 +FE02 +93FA +9202 +9214 +8608 +ENDCHAR +STARTCHAR uni9E5E +ENCODING 40542 +BBX 15 16 0 -2 +BITMAP +0E20 +F040 +22FC +9284 +44A4 +2084 +3C94 +5088 +1080 +FEFE +1002 +5402 +55FA +5C02 +6414 +0008 +ENDCHAR +STARTCHAR uni9E5F +ENCODING 40543 +BBX 15 16 0 -2 +BITMAP +2820 +4440 +92FC +2084 +48A4 +FC84 +0494 +0088 +EE80 +22FE +AA02 +6602 +ABFA +2202 +AA14 +4408 +ENDCHAR +STARTCHAR uni9E60 +ENCODING 40544 +BBX 15 16 0 -2 +BITMAP +2020 +DE40 +8AFC +CA84 +AAA4 +D284 +A694 +0088 +FE80 +92FE +9202 +FE02 +93FA +9202 +FE14 +8208 +ENDCHAR +STARTCHAR uni9E61 +ENCODING 40545 +BBX 15 16 0 -2 +BITMAP +1020 +9240 +54FC +AA84 +44A4 +8284 +7C94 +4488 +4480 +7CFE +4402 +4402 +7DFA +4402 +4414 +4C08 +ENDCHAR +STARTCHAR uni9E62 +ENCODING 40546 +BBX 15 16 0 -2 +BITMAP +2210 +1420 +007C +7F44 +0064 +1454 +2244 +414C +0040 +7F7E +5502 +5502 +557A +5782 +FC0A +0004 +ENDCHAR +STARTCHAR uni9E63 +ENCODING 40547 +BBX 15 16 0 -2 +BITMAP +2210 +1420 +007C +7FC4 +1464 +7F54 +1544 +FFCC +1540 +7F7E +1402 +3602 +557A +9482 +140A +1404 +ENDCHAR +STARTCHAR uni9E64 +ENCODING 40548 +BBX 15 16 0 -2 +BITMAP +0810 +0820 +7F7C +5544 +1264 +3F54 +6444 +A44C +3F40 +247E +2402 +3F02 +247A +2402 +3F0A +2004 +ENDCHAR +STARTCHAR uni9E65 +ENCODING 40549 +BBX 13 16 1 -2 +BITMAP +FEF0 +9090 +BE98 +C900 +BEF0 +9490 +A260 +FE98 +0800 +3FC0 +2440 +22C0 +3FF8 +0008 +FFA8 +0010 +ENDCHAR +STARTCHAR uni9E66 +ENCODING 40550 +BBX 15 16 0 -2 +BITMAP +0010 +7720 +557C +5544 +5564 +5554 +2244 +554C +0840 +FF7E +1202 +2202 +347A +0C02 +320A +C104 +ENDCHAR +STARTCHAR uni9E67 +ENCODING 40551 +BBX 15 16 0 -2 +BITMAP +1010 +0820 +7F7C +4044 +5264 +5254 +7F44 +524C +5240 +5E7E +4002 +5502 +557A +5502 +800A +0004 +ENDCHAR +STARTCHAR uni9E68 +ENCODING 40552 +BBX 15 16 0 -2 +BITMAP +0010 +7720 +117C +5544 +3364 +5554 +0C44 +334C +C4C0 +187E +6202 +0C82 +717A +0602 +180A +E004 +ENDCHAR +STARTCHAR uni9E69 +ENCODING 40553 +BBX 15 16 0 -2 +BITMAP +0810 +0820 +7F7C +0844 +5564 +2254 +4144 +BECC +2240 +3E7E +2202 +3E02 +087A +2A02 +490A +1804 +ENDCHAR +STARTCHAR uni9E6A +ENCODING 40554 +BBX 15 16 0 -2 +BITMAP +2820 +2440 +7EFC +C884 +48A4 +7E84 +4894 +4888 +7E80 +48FE +4802 +7E02 +41FA +AA02 +AA14 +0008 +ENDCHAR +STARTCHAR uni9E6B +ENCODING 40555 +BBX 15 16 0 -2 +BITMAP +0828 +7F24 +00FE +3E20 +2250 +3E50 +4952 +9A8E +0400 +1FE0 +1220 +1160 +1FFC +0004 +7FD4 +0008 +ENDCHAR +STARTCHAR uni9E6C +ENCODING 40556 +BBX 15 16 0 -2 +BITMAP +7E10 +1420 +087C +FF44 +2964 +4A54 +A844 +104C +7F40 +557E +6302 +5D02 +557A +5D02 +410A +4304 +ENDCHAR +STARTCHAR uni9E6D +ENCODING 40557 +BBX 14 16 1 -2 +BITMAP +0080 +7DF8 +4690 +7C60 +139C +5CF0 +5090 +FCF0 +0800 +3FC0 +2440 +22C0 +3FF8 +0008 +FFA8 +0010 +ENDCHAR +STARTCHAR uni9E6E +ENCODING 40558 +BBX 15 16 0 -2 +BITMAP +0020 +FE40 +AAFC +AA84 +FEA4 +0084 +FE94 +0088 +7C80 +44FE +7C02 +2A02 +65FA +A202 +3114 +2008 +ENDCHAR +STARTCHAR uni9E6F +ENCODING 40559 +BBX 15 16 0 -2 +BITMAP +1020 +FE40 +00FC +FE84 +82A4 +BA84 +AA94 +FE88 +0080 +7CFE +4402 +7C02 +45FA +7C02 +0014 +FE08 +ENDCHAR +STARTCHAR uni9E70 +ENCODING 40560 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2250 +24FC +2D90 +36FC +2490 +24FC +2100 +27F0 +2490 +2420 +47FC +4004 +9FD4 +0008 +ENDCHAR +STARTCHAR uni9E71 +ENCODING 40561 +BBX 15 16 0 -2 +BITMAP +1044 +21FE +7C54 +4448 +64FE +5590 +44FE +4C90 +40FE +7C90 +04FE +0480 +F5FE +0444 +1438 +09C6 +ENDCHAR +STARTCHAR uni9E72 +ENCODING 40562 +BBX 15 16 0 -2 +BITMAP +2410 +FF20 +247C +FF44 +8164 +7E54 +0044 +FF4C +1040 +28FE +D502 +2E02 +D57A +2482 +D40A +0804 +ENDCHAR +STARTCHAR uni9E73 +ENCODING 40563 +BBX 15 16 0 -2 +BITMAP +2208 +FF90 +223E +F7A2 +94B2 +F7AA +2822 +2426 +7FA0 +483E +FF02 +4802 +7F7A +4802 +7F8A +4004 +ENDCHAR +STARTCHAR uni9E74 +ENCODING 40564 +BBX 15 16 0 -2 +BITMAP +7F10 +0820 +7F7C +4944 +2A64 +0854 +2A44 +004C +2740 +FD7E +2702 +7502 +AF7A +2502 +270A +2504 +ENDCHAR +STARTCHAR uni9E75 +ENCODING 40565 +BBX 14 15 2 -1 +BITMAP +0400 +0400 +07FC +0400 +0400 +FFF0 +8410 +9290 +C910 +A650 +8930 +9090 +8410 +8210 +FFF0 +ENDCHAR +STARTCHAR uni9E76 +ENCODING 40566 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1E20 +1050 +1050 +FE88 +9344 +C622 +AA20 +D6F8 +AA08 +C608 +9210 +FE10 +8220 +0020 +ENDCHAR +STARTCHAR uni9E77 +ENCODING 40567 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +1E50 +1050 +1088 +FF24 +9212 +C610 +ABFC +D604 +AA08 +C688 +9250 +FE20 +8210 +0010 +ENDCHAR +STARTCHAR uni9E78 +ENCODING 40568 +BBX 15 15 1 -1 +BITMAP +1020 +1050 +1C88 +1104 +12FA +FE20 +92FC +82A4 +AAA4 +D6FC +9220 +AA50 +8288 +9304 +FE02 +ENDCHAR +STARTCHAR uni9E79 +ENCODING 40569 +BBX 15 15 1 -1 +BITMAP +1014 +1012 +1E10 +10FE +1090 +FE90 +92F4 +8294 +AAEC +92A8 +D6A8 +AAE8 +828A +929A +FF64 +ENDCHAR +STARTCHAR uni9E7A +ENCODING 40570 +BBX 15 15 0 -1 +BITMAP +1044 +1024 +1E28 +10FE +1010 +FE7C +9210 +C6FE +AA20 +D620 +AA7C +C650 +9290 +FF10 +82FE +ENDCHAR +STARTCHAR uni9E7B +ENCODING 40571 +BBX 15 15 1 -1 +BITMAP +1048 +1090 +1DFC +1050 +11FC +FE54 +93FE +8254 +AA54 +D7FC +9250 +AAD8 +8354 +9252 +FE50 +ENDCHAR +STARTCHAR uni9E7C +ENCODING 40572 +BBX 15 15 1 -1 +BITMAP +1020 +1050 +1E88 +1106 +1078 +FE00 +92EE +82AA +AAAA +D6EE +9200 +AA44 +8244 +92AA +FEAA +ENDCHAR +STARTCHAR uni9E7D +ENCODING 40573 +BBX 15 15 1 -1 +BITMAP +0080 +FDFE +9220 +F83C +8820 +89FC +F954 +9124 +9154 +FDFC +0000 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni9E7E +ENCODING 40574 +BBX 15 15 0 -1 +BITMAP +2084 +2044 +3C48 +21FE +2020 +FCFC +8420 +95FE +D440 +A480 +D4FE +9510 +8610 +FC10 +85FE +ENDCHAR +STARTCHAR uni9E7F +ENCODING 40575 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4440 +4440 +7FFC +4444 +4444 +7FFC +4840 +4F4C +8870 +8842 +0F42 +383E +ENDCHAR +STARTCHAR uni9E80 +ENCODING 40576 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4440 +7FFC +4444 +7FFC +4840 +4F78 +4842 +7F3E +4800 +4878 +BF80 +8802 +07FE +ENDCHAR +STARTCHAR uni9E81 +ENCODING 40577 +BBX 15 15 1 -1 +BITMAP +0400 +0FF0 +1820 +2640 +C180 +7FFE +4440 +7FFC +4444 +7FFC +5080 +5E98 +90E0 +9E84 +307C +ENDCHAR +STARTCHAR uni9E82 +ENCODING 40578 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2220 +3FFC +2224 +3FFC +2840 +2F78 +2842 +2F3E +2000 +23F0 +4210 +4412 +980E +ENDCHAR +STARTCHAR uni9E83 +ENCODING 40579 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2220 +3FFC +2224 +3FFC +2844 +2F48 +2874 +2B44 +2C3C +4000 +4A48 +8924 +1124 +ENDCHAR +STARTCHAR uni9E84 +ENCODING 40580 +BBX 15 16 0 -2 +BITMAP +0440 +0820 +3018 +DFF6 +0410 +0950 +10A0 +3FFC +2240 +3FF8 +2248 +3FF8 +2844 +2F78 +4842 +8F3E +ENDCHAR +STARTCHAR uni9E85 +ENCODING 40581 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4440 +7FFC +4444 +7FFC +4842 +7F3E +8800 +9FF8 +3088 +DF88 +1070 +1002 +0FFE +ENDCHAR +STARTCHAR uni9E86 +ENCODING 40582 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2422 +27BE +2000 +27F8 +2408 +27F8 +2408 +47F8 +4408 +BFFE +ENDCHAR +STARTCHAR uni9E87 +ENCODING 40583 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2420 +27BC +2422 +279E +2008 +23F0 +2040 +4FFE +4150 +8E4E +ENDCHAR +STARTCHAR uni9E88 +ENCODING 40584 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4440 +7FFC +4444 +7FFC +5042 +7E7E +4100 +5FF8 +8100 +8FF0 +0100 +7FFE +ENDCHAR +STARTCHAR uni9E89 +ENCODING 40585 +BBX 15 15 0 -2 +BITMAP +7C7C +1010 +1010 +FEFE +1110 +1090 +3FFC +2240 +3FF8 +2248 +3FF8 +2844 +2F78 +4842 +8F3E +ENDCHAR +STARTCHAR uni9E8A +ENCODING 40586 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +7FFC +0540 +1930 +610C +0080 +3FFC +2240 +3FF8 +2248 +3FF8 +2844 +2F78 +4842 +8F3E +ENDCHAR +STARTCHAR uni9E8B +ENCODING 40587 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4440 +7FFC +4444 +7FFC +5042 +7E7E +5110 +4920 +BFFE +8540 +1930 +610E +ENDCHAR +STARTCHAR uni9E8C +ENCODING 40588 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4440 +7FFC +4444 +7FFC +5042 +5FFE +A820 +BFF8 +0108 +FFFE +0C60 +F01E +ENDCHAR +STARTCHAR uni9E8D +ENCODING 40589 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2422 +27BE +2040 +3FFE +2200 +2408 +2FFC +4494 +4892 +908E +ENDCHAR +STARTCHAR uni9E8E +ENCODING 40590 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2422 +27BE +2000 +2FFC +2800 +2BFC +2800 +4FFE +4A28 +939E +ENDCHAR +STARTCHAR uni9E8F +ENCODING 40591 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2000 +2FFC +2104 +3FFE +2104 +2FFC +2200 +47FC +4A04 +93FC +ENDCHAR +STARTCHAR uni9E90 +ENCODING 40592 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2422 +27BE +2040 +2FFE +2110 +20E0 +2F1E +43F8 +4208 +83F8 +ENDCHAR +STARTCHAR uni9E91 +ENCODING 40593 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4440 +7FFC +4444 +7FFC +9042 +BEFE +2010 +3CF0 +2010 +3FF0 +0882 +F07E +ENDCHAR +STARTCHAR uni9E92 +ENCODING 40594 +BBX 15 15 1 -1 +BITMAP +0844 +0844 +7FFE +5444 +5444 +7F7C +5544 +5544 +7F7C +4844 +6944 +BEFE +A820 +2948 +7786 +ENDCHAR +STARTCHAR uni9E93 +ENCODING 40595 +BBX 15 15 1 -1 +BITMAP +1010 +FEFE +3838 +5554 +9192 +7FFC +4440 +7FFC +4444 +7FFC +5040 +9E78 +9042 +1F42 +703E +ENDCHAR +STARTCHAR uni9E94 +ENCODING 40596 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2220 +27B0 +2D28 +3224 +2DFE +3000 +27F8 +4408 +4408 +87F8 +ENDCHAR +STARTCHAR uni9E95 +ENCODING 40597 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4440 +7FFC +4444 +BFFC +9042 +FFFE +47C4 +4104 +5FF4 +4544 +4924 +7FFC +ENDCHAR +STARTCHAR uni9E96 +ENCODING 40598 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2080 +3FFE +2000 +2FF8 +2808 +2FF8 +2080 +4888 +5284 +8100 +ENDCHAR +STARTCHAR uni9E97 +ENCODING 40599 +BBX 15 14 1 -1 +BITMAP +FEFE +0000 +7C7C +5454 +0100 +7FFE +4440 +7FFC +4444 +7FFC +4840 +4F78 +8842 +BF7E +ENDCHAR +STARTCHAR uni9E98 +ENCODING 40600 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2010 +2FE0 +2080 +3FFC +2490 +2FF8 +3416 +47F0 +4410 +87F0 +ENDCHAR +STARTCHAR uni9E99 +ENCODING 40601 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2000 +2028 +2FFE +2820 +2BA4 +2828 +2BAC +4A94 +4BAC +9044 +ENDCHAR +STARTCHAR uni9E9A +ENCODING 40602 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2000 +2F7C +2904 +2F7C +2800 +2F7C +2844 +4F28 +4830 +88CE +ENDCHAR +STARTCHAR uni9E9B +ENCODING 40603 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4440 +7FFC +4444 +7FFC +4880 +5FFA +7282 +5E7E +5044 +5E7C +8244 +82FC +0C04 +ENDCHAR +STARTCHAR uni9E9C +ENCODING 40604 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2000 +2FFE +2110 +27FC +2514 +27FC +2040 +4FFE +4150 +864C +ENDCHAR +STARTCHAR uni9E9D +ENCODING 40605 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4440 +7FFC +4444 +FFFC +9042 +3F7E +2208 +3FFE +2288 +FE48 +2208 +CE18 +ENDCHAR +STARTCHAR uni9E9E +ENCODING 40606 +BBX 15 15 1 -1 +BITMAP +0100 +7FFE +4440 +7FFC +4444 +7FFC +9040 +9E78 +1142 +3FFE +0440 +7FFC +0820 +7FFC +0100 +ENDCHAR +STARTCHAR uni9E9F +ENCODING 40607 +BBX 15 15 1 -1 +BITMAP +1122 +10A4 +FCA8 +A9FE +FEA8 +AB24 +AA22 +FF20 +A9C4 +AD5E +BB54 +A8D4 +AA7E +3A84 +C704 +ENDCHAR +STARTCHAR uni9EA0 +ENCODING 40608 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2888 +2FF8 +2888 +3FFE +2000 +2FF8 +2888 +4FF8 +4888 +BFFE +ENDCHAR +STARTCHAR uni9EA1 +ENCODING 40609 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2040 +2FFE +20A0 +2F5E +2554 +2554 +2B5A +4408 +47F8 +8808 +ENDCHAR +STARTCHAR uni9EA2 +ENCODING 40610 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2220 +3FFC +2224 +3FFC +2000 +27FC +2040 +2FFE +2842 +2358 +2000 +4EEE +4AAA +8EEE +ENDCHAR +STARTCHAR uni9EA3 +ENCODING 40611 +BBX 15 16 0 -2 +BITMAP +13DE +FE52 +ABDE +A800 +FFFE +AA00 +AAC8 +FE4E +ABEA +AAB2 +BEEA +AAAA +AAEA +BAB4 +ADE4 +002A +ENDCHAR +STARTCHAR uni9EA4 +ENCODING 40612 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4440 +7FFC +4444 +7FFC +9042 +FFFE +A8A8 +FEFE +AAAA +FEFE +A948 +AD6E +ENDCHAR +STARTCHAR uni9EA5 +ENCODING 40613 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +1110 +1110 +2AA8 +4444 +1A30 +E20E +0FF0 +3820 +0640 +01C0 +0630 +7808 +ENDCHAR +STARTCHAR uni9EA6 +ENCODING 40614 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0100 +FFFE +0200 +07F0 +1810 +6420 +0240 +0180 +0EE0 +F01E +ENDCHAR +STARTCHAR uni9EA7 +ENCODING 40615 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FF40 +2A7E +2A80 +5D00 +887C +1C04 +2A08 +5010 +1E20 +2240 +5442 +0842 +143E +6000 +ENDCHAR +STARTCHAR uni9EA8 +ENCODING 40616 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FEA8 +54A4 +54A2 +BB20 +5424 +9224 +2068 +3C08 +4410 +A820 +10C0 +2C00 +C3FE +ENDCHAR +STARTCHAR uni9EA9 +ENCODING 40617 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FDFC +5420 +5420 +BA20 +57FE +9220 +2020 +3850 +4850 +A888 +1306 +2C00 +C3FE +ENDCHAR +STARTCHAR uni9EAA +ENCODING 40618 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE10 +5410 +549E +BA92 +5492 +9292 +2092 +3CFE +4402 +A802 +100C +2C00 +C3FE +ENDCHAR +STARTCHAR uni9EAB +ENCODING 40619 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +FF10 +2A10 +2A50 +5D5E +8850 +1C50 +2A50 +507E +1E02 +2202 +5402 +0802 +1414 +6008 +ENDCHAR +STARTCHAR uni9EAC +ENCODING 40620 +BBX 15 15 1 -1 +BITMAP +1010 +1010 +FFFE +5512 +5510 +BBFC +5544 +9344 +2144 +3928 +4928 +A910 +1210 +2828 +C4C6 +ENDCHAR +STARTCHAR uni9EAD +ENCODING 40621 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FE7C +5484 +55F4 +BA94 +5494 +92F4 +2084 +3C98 +4480 +A882 +107E +2C00 +C3FE +ENDCHAR +STARTCHAR uni9EAE +ENCODING 40622 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +FF10 +2A7E +2A10 +5D10 +8810 +1CFE +2A10 +5010 +1E20 +2228 +5444 +08FE +1442 +6000 +ENDCHAR +STARTCHAR uni9EAF +ENCODING 40623 +BBX 15 15 1 -1 +BITMAP +1050 +1050 +FE50 +55FC +5554 +BB54 +5554 +93FC +2154 +3D54 +4554 +A954 +19FC +2600 +C1FE +ENDCHAR +STARTCHAR uni9EB0 +ENCODING 40624 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +FE48 +5484 +55FE +BA12 +1090 +3890 +54FE +A310 +3C10 +45FE +A810 +1010 +2810 +C010 +ENDCHAR +STARTCHAR uni9EB1 +ENCODING 40625 +BBX 15 16 0 -2 +BITMAP +1014 +1012 +FEFE +5410 +5410 +BAFE +1092 +3892 +54FE +A292 +3C92 +44FE +A892 +1092 +2892 +C086 +ENDCHAR +STARTCHAR uni9EB2 +ENCODING 40626 +BBX 15 16 0 -2 +BITMAP +0800 +08FC +FF84 +2A84 +2AFC +5D84 +8884 +1CFC +2A84 +5084 +1EFC +2250 +5450 +0852 +1492 +610E +ENDCHAR +STARTCHAR uni9EB3 +ENCODING 40627 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +FF10 +2AFE +2A10 +5D54 +8854 +1C54 +2ABA +5010 +1E38 +2254 +5492 +0810 +1410 +6010 +ENDCHAR +STARTCHAR uni9EB4 +ENCODING 40628 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FEFE +5502 +54AA +BAAA +5422 +91FA +2022 +3C72 +44AA +A922 +182C +2600 +C1FE +ENDCHAR +STARTCHAR uni9EB5 +ENCODING 40629 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +FE20 +5440 +55FC +BB54 +5574 +9354 +2154 +3D74 +4554 +A954 +19FC +2600 +C1FE +ENDCHAR +STARTCHAR uni9EB6 +ENCODING 40630 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +FEFE +5428 +5492 +BAAA +1082 +38FE +5410 +A2FE +3CA2 +44AA +A8BA +1082 +288A +C084 +ENDCHAR +STARTCHAR uni9EB7 +ENCODING 40631 +BBX 15 16 0 -2 +BITMAP +10A8 +11FC +FEAA +57FE +56AA +BBFE +12AA +3BFE +5400 +A3FE +3C00 +45FC +A904 +11FC +2888 +C3FE +ENDCHAR +STARTCHAR uni9EB8 +ENCODING 40632 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FDFC +1020 +FC20 +1020 +FDFE +2020 +3C20 +4450 +4450 +A888 +1906 +2600 +C1FE +ENDCHAR +STARTCHAR uni9EB9 +ENCODING 40633 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +FEFE +1102 +FEAA +10B2 +FE22 +20FA +3C22 +2472 +44AC +A924 +1818 +2700 +C0FE +ENDCHAR +STARTCHAR uni9EBA +ENCODING 40634 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +FE20 +1040 +7DFC +1154 +FF74 +2154 +3D54 +4574 +4554 +A954 +19FC +2600 +C1FE +ENDCHAR +STARTCHAR uni9EBB +ENCODING 40635 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4000 +4410 +4410 +5F7E +4410 +4C38 +4E38 +5554 +9454 +8492 +8410 +0410 +ENDCHAR +STARTCHAR uni9EBC +ENCODING 40636 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4420 +5FFC +4428 +56AA +5526 +6510 +4220 +4C40 +4290 +8108 +83F4 +3C02 +ENDCHAR +STARTCHAR uni9EBD +ENCODING 40637 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4820 +7EFC +4820 +5AA8 +6AAA +4826 +4280 +4480 +5920 +8110 +8238 +3FC4 +ENDCHAR +STARTCHAR uni9EBE +ENCODING 40638 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +7FFC +4420 +7EFC +54A8 +552A +64E6 +4F00 +4100 +5FF8 +4100 +BFFC +8102 +00FE +ENDCHAR +STARTCHAR uni9EBF +ENCODING 40639 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4410 +7F7E +4C18 +5634 +6552 +4FF0 +4810 +4FF0 +4100 +9FF8 +9008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni9EC0 +ENCODING 40640 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2210 +2F7C +2638 +2B54 +3292 +3F80 +297C +2F24 +2924 +2F28 +4990 +5F28 +8146 +ENDCHAR +STARTCHAR uni9EC1 +ENCODING 40641 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2410 +3F7C +2638 +2D54 +3412 +2FE0 +2080 +3FFC +2490 +2FF8 +3416 +47F0 +4410 +87F0 +ENDCHAR +STARTCHAR uni9EC2 +ENCODING 40642 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2410 +3F7C +2638 +2D54 +3492 +2FF8 +22A0 +2FFC +2220 +2FF8 +2888 +4FF8 +4410 +8808 +ENDCHAR +STARTCHAR uni9EC3 +ENCODING 40643 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +7FFC +0440 +07C0 +0000 +FFFE +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uni9EC4 +ENCODING 40644 +BBX 15 15 1 -1 +BITMAP +0440 +0440 +7FFC +0440 +0440 +FFFE +0100 +1FF0 +1110 +1FF0 +1110 +1110 +1FF0 +0C20 +7018 +ENDCHAR +STARTCHAR uni9EC5 +ENCODING 40645 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +7F10 +2228 +2228 +FFC4 +0844 +7FA2 +4910 +7F10 +497C +7F04 +0008 +2208 +2110 +4110 +ENDCHAR +STARTCHAR uni9EC6 +ENCODING 40646 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +7F10 +2210 +22FE +FF92 +0892 +7F10 +4928 +7F28 +4928 +7F28 +0048 +224A +218A +4106 +ENDCHAR +STARTCHAR uni9EC7 +ENCODING 40647 +BBX 15 16 0 -2 +BITMAP +2210 +2210 +7F10 +2210 +221E +FF90 +0810 +7F10 +497C +7F44 +4944 +7F44 +0044 +2244 +217C +4144 +ENDCHAR +STARTCHAR uni9EC8 +ENCODING 40648 +BBX 15 16 0 -2 +BITMAP +2220 +2210 +7F00 +22FE +2210 +FF90 +0810 +7F10 +497C +7F10 +4910 +7F10 +0010 +2210 +21FE +4100 +ENDCHAR +STARTCHAR uni9EC9 +ENCODING 40649 +BBX 15 16 0 -2 +BITMAP +1108 +0890 +7FFE +4442 +9FF4 +0440 +7FFC +0100 +1FF0 +1110 +1FF0 +1110 +1FF0 +0440 +0820 +1010 +ENDCHAR +STARTCHAR uni9ECA +ENCODING 40650 +BBX 14 16 0 -2 +BITMAP +2820 +2820 +7CF8 +2820 +2820 +FE20 +11FC +7C00 +5420 +5420 +7CF8 +5420 +5420 +7C20 +29FC +4400 +ENDCHAR +STARTCHAR uni9ECB +ENCODING 40651 +BBX 15 16 0 -2 +BITMAP +1088 +1088 +95FC +5488 +5888 +13FE +FC20 +29FC +2924 +29FC +2924 +29FC +2888 +4904 +4A02 +87FE +ENDCHAR +STARTCHAR uni9ECC +ENCODING 40652 +BBX 15 15 1 -1 +BITMAP +0A80 +3138 +2288 +3938 +2288 +7FFC +4444 +5FF4 +0440 +FFFE +1110 +1FF0 +1110 +1FF0 +701C +ENDCHAR +STARTCHAR uni9ECD +ENCODING 40653 +BBX 15 15 1 -1 +BITMAP +00F0 +3F00 +0100 +FFFE +0540 +1930 +E28E +0C60 +3018 +C106 +1930 +07C0 +1938 +6106 +0700 +ENDCHAR +STARTCHAR uni9ECE +ENCODING 40654 +BBX 15 15 1 -1 +BITMAP +0620 +787E +0892 +FF12 +2822 +4E42 +891C +0A80 +0C60 +F11E +1938 +07C0 +1930 +E10E +0300 +ENDCHAR +STARTCHAR uni9ECF +ENCODING 40655 +BBX 15 15 1 -1 +BITMAP +0610 +7810 +0810 +FF9E +1C10 +2A10 +C910 +1410 +22FE +C982 +2A82 +1C82 +2A82 +C982 +18FE +ENDCHAR +STARTCHAR uni9ED0 +ENCODING 40656 +BBX 15 15 1 -1 +BITMAP +0C10 +7010 +11FE +FE00 +38AC +5494 +92AC +2884 +44FC +9220 +55FE +3922 +552A +937A +3106 +ENDCHAR +STARTCHAR uni9ED1 +ENCODING 40657 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +2928 +2548 +2108 +3FF8 +0100 +3FF8 +0100 +FFFE +0000 +2888 +4444 +8442 +ENDCHAR +STARTCHAR uni9ED2 +ENCODING 40658 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +3FF8 +2108 +2108 +3FF8 +0100 +3FF8 +0100 +0100 +FFFE +0000 +4444 +8222 +ENDCHAR +STARTCHAR uni9ED3 +ENCODING 40659 +BBX 15 16 0 -2 +BITMAP +0028 +7F24 +4924 +6B20 +5D2E +49F0 +7F20 +0820 +7F20 +0820 +0FA0 +F010 +0012 +550A +4A86 +8002 +ENDCHAR +STARTCHAR uni9ED4 +ENCODING 40660 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +4928 +6B28 +5D44 +4982 +7F3C +0800 +7F00 +087E +0F82 +F104 +0084 +5288 +9210 +ENDCHAR +STARTCHAR uni9ED5 +ENCODING 40661 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +9210 +D610 +BAFE +9292 +FE92 +1010 +FE28 +1028 +1E28 +E028 +0248 +AA4A +A88A +8106 +ENDCHAR +STARTCHAR uni9ED6 +ENCODING 40662 +BBX 15 15 0 -2 +BITMAP +FEFE +9210 +D610 +BA90 +9290 +FE90 +10FE +FE10 +1010 +1E28 +E028 +0248 +AA4A +A88A +8106 +ENDCHAR +STARTCHAR uni9ED7 +ENCODING 40663 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +9220 +D7FC +BA20 +92A8 +FEA8 +10A8 +FEA8 +10A8 +1EF8 +E022 +0222 +AA22 +A81E +8000 +ENDCHAR +STARTCHAR uni9ED8 +ENCODING 40664 +BBX 15 15 1 -1 +BITMAP +0010 +7F14 +4912 +6B12 +5D10 +49FE +7F10 +0810 +7E10 +0828 +0F28 +F028 +4544 +9544 +9082 +ENDCHAR +STARTCHAR uni9ED9 +ENCODING 40665 +BBX 15 15 1 -1 +BITMAP +0014 +7F12 +4910 +7FFE +4910 +7F10 +0810 +7F28 +0828 +0F44 +F082 +0000 +2888 +4444 +8442 +ENDCHAR +STARTCHAR uni9EDA +ENCODING 40666 +BBX 15 16 0 -2 +BITMAP +0044 +FE44 +9244 +D644 +BAFE +9244 +FE44 +1044 +FE44 +107C +1E44 +E044 +0244 +AA44 +A87C +8044 +ENDCHAR +STARTCHAR uni9EDB +ENCODING 40667 +BBX 15 15 1 -1 +BITMAP +0850 +307C +D7C0 +1022 +3FFA +210E +3FF8 +2108 +3FF8 +0100 +3FF8 +0100 +FFFE +2448 +C226 +ENDCHAR +STARTCHAR uni9EDC +ENCODING 40668 +BBX 15 15 1 -1 +BITMAP +0010 +7E10 +5292 +7692 +5A92 +5292 +7EFE +1010 +7E10 +1092 +1E92 +E292 +0592 +5292 +92FE +ENDCHAR +STARTCHAR uni9EDD +ENCODING 40669 +BBX 15 15 1 -1 +BITMAP +0088 +FE88 +9308 +D708 +BA5E +934A +FF4A +108A +FE8A +108A +1D12 +E552 +0BB2 +AA22 +A04C +ENDCHAR +STARTCHAR uni9EDE +ENCODING 40670 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +4910 +6B10 +5D1E +4910 +7F10 +0810 +7F7E +0842 +0FC2 +F042 +04C2 +5242 +88FE +ENDCHAR +STARTCHAR uni9EDF +ENCODING 40671 +BBX 15 15 1 -1 +BITMAP +0010 +7F1C +4964 +6B14 +5D08 +4910 +7F60 +0808 +7F0E +0812 +0F62 +F014 +0A08 +5510 +9460 +ENDCHAR +STARTCHAR uni9EE0 +ENCODING 40672 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +4910 +6BFE +5D10 +4910 +7F10 +087C +7E00 +087C +0F44 +F044 +0544 +54C4 +907C +ENDCHAR +STARTCHAR uni9EE1 +ENCODING 40673 +BBX 14 16 0 -2 +BITMAP +3FFC +2090 +3FFC +2140 +2630 +380C +2FF8 +2AA8 +29C8 +2FF8 +2080 +2FF8 +4080 +5FFC +8A48 +1124 +ENDCHAR +STARTCHAR uni9EE2 +ENCODING 40674 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +9220 +D644 +BAFE +9228 +FE44 +10A2 +FE3C +1044 +1E44 +E0A8 +0210 +AA28 +A844 +8082 +ENDCHAR +STARTCHAR uni9EE3 +ENCODING 40675 +BBX 15 16 0 -2 +BITMAP +0040 +FE40 +927E +D680 +BB7C +9244 +FE64 +1054 +FEFE +1044 +1EA4 +E094 +02FE +AA04 +A828 +8010 +ENDCHAR +STARTCHAR uni9EE4 +ENCODING 40676 +BBX 15 16 0 -2 +BITMAP +0020 +FE20 +93FE +D650 +BAA8 +9326 +FEF8 +10A8 +FEA8 +10F8 +1EA8 +E0A8 +02F8 +AAAA +A822 +801E +ENDCHAR +STARTCHAR uni9EE5 +ENCODING 40677 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +49FE +6B00 +5D7C +4944 +7F44 +0844 +7F7C +0810 +0F54 +F054 +0592 +5492 +9030 +ENDCHAR +STARTCHAR uni9EE6 +ENCODING 40678 +BBX 15 16 0 -2 +BITMAP +0020 +FE10 +92FE +D682 +BA40 +924E +FE6A +10AA +FEAA +10AA +1F6C +E028 +024A +AA4A +A88A +8106 +ENDCHAR +STARTCHAR uni9EE7 +ENCODING 40679 +BBX 15 15 1 -1 +BITMAP +0620 +787E +0892 +FF22 +2A42 +5FFC +9550 +1390 +1FF0 +0100 +3FF8 +0100 +7FFE +4444 +8222 +ENDCHAR +STARTCHAR uni9EE8 +ENCODING 40680 +BBX 15 15 1 -1 +BITMAP +1110 +0920 +7FFC +4004 +4FE4 +0820 +1FF0 +1550 +1390 +3FF8 +0100 +FFFE +0000 +4444 +8222 +ENDCHAR +STARTCHAR uni9EE9 +ENCODING 40681 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +92FC +D610 +BA10 +93FE +FE02 +1054 +FE30 +1090 +1E50 +E1FE +0228 +AA44 +A882 +8102 +ENDCHAR +STARTCHAR uni9EEA +ENCODING 40682 +BBX 15 16 0 -2 +BITMAP +0020 +FE28 +9244 +D6FE +BA20 +93FE +FE88 +1114 +FE22 +1048 +1E10 +E022 +02C4 +AA18 +A860 +8180 +ENDCHAR +STARTCHAR uni9EEB +ENCODING 40683 +BBX 15 15 0 -2 +BITMAP +FEFE +9228 +D628 +BAFE +92AA +FEAA +10AA +FEFE +1010 +1E10 +E0FE +0210 +AA10 +A9FE +8000 +ENDCHAR +STARTCHAR uni9EEC +ENCODING 40684 +BBX 15 16 0 -2 +BITMAP +000C +FE0A +9208 +D6FE +BA88 +9288 +FEFA +108A +FE8A +10EC +1EAC +E0AC +02EA +AA8A +A896 +8122 +ENDCHAR +STARTCHAR uni9EED +ENCODING 40685 +BBX 15 16 0 -2 +BITMAP +0020 +FE30 +9248 +D684 +BB7A +9200 +FEFC +1084 +FE84 +10FC +1E48 +E048 +03FE +AA48 +A888 +8108 +ENDCHAR +STARTCHAR uni9EEE +ENCODING 40686 +BBX 15 15 1 -1 +BITMAP +0048 +7F48 +49FC +6B48 +5D78 +4948 +7F78 +0848 +7E48 +09FE +0EA8 +F0AC +0AC0 +5580 +94FC +ENDCHAR +STARTCHAR uni9EEF +ENCODING 40687 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +49FE +6B44 +5D24 +4928 +7FFE +0800 +7F7C +0844 +0F44 +F07C +0544 +54C4 +907C +ENDCHAR +STARTCHAR uni9EF0 +ENCODING 40688 +BBX 15 16 0 -2 +BITMAP +0010 +FE10 +92FE +D610 +BA7C +9244 +FE7C +1044 +FE7C +1044 +1E7C +E044 +02FE +AA28 +A844 +8082 +ENDCHAR +STARTCHAR uni9EF1 +ENCODING 40689 +BBX 15 16 0 -2 +BITMAP +0124 +78A8 +49FC +4840 +4BFE +7908 +4BFC +4DAE +4974 +79FC +4820 +49FC +4820 +4BFE +4954 +9A2A +ENDCHAR +STARTCHAR uni9EF2 +ENCODING 40690 +BBX 15 16 0 -2 +BITMAP +0010 +FE20 +9244 +D6FE +BA44 +92AA +FEEE +1010 +FE28 +1054 +1EAA +E050 +0224 +AA48 +A810 +8060 +ENDCHAR +STARTCHAR uni9EF3 +ENCODING 40691 +BBX 15 16 0 -2 +BITMAP +7F78 +4848 +5E86 +6478 +5F48 +4A30 +7F4C +0000 +3FF8 +2928 +2548 +3FF8 +0100 +FFFE +2448 +4224 +ENDCHAR +STARTCHAR uni9EF4 +ENCODING 40692 +BBX 15 15 1 -1 +BITMAP +2210 +2A90 +4F90 +801E +2FA4 +2AE4 +4F94 +4A94 +CF94 +4208 +4F88 +4208 +5FD4 +4954 +52A2 +ENDCHAR +STARTCHAR uni9EF5 +ENCODING 40693 +BBX 15 16 0 -2 +BITMAP +0040 +FE7C +9284 +D7FE +BAA2 +92C8 +FEFE +1080 +FEBE +1080 +1EBE +E080 +02BE +AAA2 +A8BE +8122 +ENDCHAR +STARTCHAR uni9EF6 +ENCODING 40694 +BBX 15 14 1 -1 +BITMAP +7FFE +5114 +5F7E +5110 +9F28 +9146 +3FF8 +2928 +2548 +7FFC +0100 +FFFE +2444 +4222 +ENDCHAR +STARTCHAR uni9EF7 +ENCODING 40695 +BBX 15 15 1 -1 +BITMAP +0010 +7E10 +4AFE +6E10 +5A7C +4A00 +7EFE +08AA +7EFE +0844 +0F7C +F144 +04FC +5228 +88C6 +ENDCHAR +STARTCHAR uni9EF8 +ENCODING 40696 +BBX 15 16 0 -2 +BITMAP +0040 +F87C +A840 +ABFC +FA44 +ABF0 +FA44 +22FC +FAA8 +22F8 +3AA8 +E2F8 +0A00 +A5FC +A554 +0BFE +ENDCHAR +STARTCHAR uni9EF9 +ENCODING 40697 +BBX 15 15 1 -1 +BITMAP +2448 +1448 +1450 +FFFE +0920 +1110 +2108 +FFFE +2108 +2548 +2548 +2548 +2548 +2948 +2118 +ENDCHAR +STARTCHAR uni9EFA +ENCODING 40698 +BBX 15 16 0 -2 +BITMAP +1408 +5528 +3628 +1428 +FF44 +4944 +2A82 +7F7C +4924 +4924 +5D24 +6B24 +4944 +4944 +4994 +4B08 +ENDCHAR +STARTCHAR uni9EFB +ENCODING 40699 +BBX 15 15 1 -1 +BITMAP +9494 +5492 +5510 +FFBE +2A10 +C990 +0814 +FF94 +8894 +AAAC +AAA8 +AAA8 +CAC8 +8894 +89A2 +ENDCHAR +STARTCHAR uni9EFC +ENCODING 40700 +BBX 15 15 1 -1 +BITMAP +948C +548A +557E +FF88 +2A08 +C9BE +082A +FFAA +88BE +AAAA +AAAA +AABE +CAAA +88AA +89AA +ENDCHAR +STARTCHAR uni9EFD +ENCODING 40701 +BBX 15 14 1 -1 +BITMAP +7FF8 +4488 +4488 +7CF8 +0480 +FCFC +8484 +FCFC +8484 +8484 +FCFC +0402 +0402 +03FE +ENDCHAR +STARTCHAR uni9EFE +ENCODING 40702 +BBX 13 16 2 -2 +BITMAP +7FC0 +4040 +4040 +7FC0 +0400 +FFE0 +8420 +8420 +FFE0 +8420 +8420 +FFE0 +8428 +0408 +0408 +03F8 +ENDCHAR +STARTCHAR uni9EFF +ENCODING 40703 +BBX 15 15 1 -1 +BITMAP +3FF0 +0000 +FFFC +0842 +303E +C000 +3FF8 +2288 +7EFC +4284 +7EFC +4284 +7EFC +0282 +01FE +ENDCHAR +STARTCHAR uni9F00 +ENCODING 40704 +BBX 15 16 0 -2 +BITMAP +0100 +3FF8 +0100 +FFFE +1010 +3FF8 +5294 +1EF0 +0280 +3EF8 +2288 +3EF8 +2288 +3EFA +0282 +01FE +ENDCHAR +STARTCHAR uni9F01 +ENCODING 40705 +BBX 15 16 0 -2 +BITMAP +0100 +3FF8 +0100 +FFFE +0420 +1FF0 +0000 +1FF0 +1290 +3EF8 +2288 +3EF8 +2288 +3EF8 +0282 +01FE +ENDCHAR +STARTCHAR uni9F02 +ENCODING 40706 +BBX 14 15 2 -1 +BITMAP +3FE0 +2020 +3FE0 +2020 +FFF8 +0000 +7FF0 +4510 +FDF8 +8508 +FDF8 +8508 +FDF8 +0504 +03FC +ENDCHAR +STARTCHAR uni9F03 +ENCODING 40707 +BBX 15 15 1 -1 +BITMAP +0100 +1FF0 +0100 +7FFC +0100 +FFFE +2288 +7EFC +4284 +7EFC +4284 +4284 +7EFC +0282 +01FE +ENDCHAR +STARTCHAR uni9F04 +ENCODING 40708 +BBX 15 16 0 -2 +BITMAP +0900 +0FF0 +1100 +7FFC +0540 +1930 +E10E +1FF0 +1290 +3EF8 +2288 +3EF8 +2288 +3EF8 +0282 +01FE +ENDCHAR +STARTCHAR uni9F05 +ENCODING 40709 +BBX 15 16 0 -2 +BITMAP +2000 +3F7C +4844 +FFC4 +147C +2244 +4100 +1FF0 +1290 +3EF8 +2288 +3EF8 +2288 +3EF8 +0282 +01FE +ENDCHAR +STARTCHAR uni9F06 +ENCODING 40710 +BBX 15 15 0 -2 +BITMAP +FDFC +8554 +0154 +79DC +4850 +79DC +4954 +7954 +21DC +1154 +FD54 +01DC +5150 +4852 +883E +ENDCHAR +STARTCHAR uni9F07 +ENCODING 40711 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +7E7E +08C8 +FF48 +1030 +3EC8 +C206 +7FF8 +4488 +FCFC +8484 +FCFC +0402 +07FE +ENDCHAR +STARTCHAR uni9F08 +ENCODING 40712 +BBX 15 15 1 -1 +BITMAP +2A20 +2920 +493E +FFE4 +88A4 +AA98 +AAE8 +8986 +7FF8 +4488 +FCFC +8484 +FCFC +0402 +03FE +ENDCHAR +STARTCHAR uni9F09 +ENCODING 40713 +BBX 15 15 0 -2 +BITMAP +3EF8 +2288 +3FF8 +1110 +1FF0 +1110 +FFFE +1290 +3EF8 +2288 +3EF8 +2288 +3EF8 +0282 +01FE +ENDCHAR +STARTCHAR uni9F0A +ENCODING 40714 +BBX 15 16 0 -2 +BITMAP +0010 +7E7C +4228 +7EFE +4010 +7E7C +A210 +3FF0 +1290 +3EF8 +2288 +3EF8 +2288 +3EF8 +0282 +01FE +ENDCHAR +STARTCHAR uni9F0B +ENCODING 40715 +BBX 15 16 0 -2 +BITMAP +1FF0 +0000 +FFFE +0844 +303C +DFF0 +1010 +1FF0 +0100 +3FF8 +2108 +3FF8 +2108 +3FFA +0102 +00FE +ENDCHAR +STARTCHAR uni9F0C +ENCODING 40716 +BBX 15 15 0 -2 +BITMAP +1FF0 +1010 +1FF0 +1010 +FFFE +0000 +1FF0 +1010 +3FF8 +2108 +3FF8 +2108 +3FFA +0102 +00FE +ENDCHAR +STARTCHAR uni9F0D +ENCODING 40717 +BBX 15 15 0 -2 +BITMAP +3EF8 +2288 +3FF8 +1110 +1FF0 +1110 +FFFE +0100 +3FF8 +2108 +3FF8 +2108 +3FFA +0102 +00FE +ENDCHAR +STARTCHAR uni9F0E +ENCODING 40718 +BBX 15 15 1 -1 +BITMAP +1FE0 +5028 +5FE8 +5028 +5FE8 +5028 +5FE8 +4008 +7CF8 +0480 +FCFE +4488 +4488 +8488 +8488 +ENDCHAR +STARTCHAR uni9F0F +ENCODING 40719 +BBX 15 16 0 -2 +BITMAP +7FFE +4002 +8FE4 +0820 +0FE0 +0820 +4FE4 +4824 +4FE4 +4004 +7C7C +0440 +FC7C +2444 +4444 +8444 +ENDCHAR +STARTCHAR uni9F10 +ENCODING 40720 +BBX 15 15 1 -1 +BITMAP +7FE0 +083E +3FE2 +E826 +2FE8 +2828 +2FE8 +2828 +2FE8 +2008 +3FF8 +0280 +FEFE +1288 +6288 +ENDCHAR +STARTCHAR uni9F11 +ENCODING 40721 +BBX 14 16 0 -2 +BITMAP +0100 +01FC +0100 +1FF0 +1010 +1FF0 +1010 +5FF4 +5014 +5FF4 +4004 +7C7C +0440 +FC7C +2444 +4444 +ENDCHAR +STARTCHAR uni9F12 +ENCODING 40722 +BBX 14 16 0 -2 +BITMAP +0080 +7FFC +0480 +1980 +6FE0 +0820 +0FE0 +4824 +4FE4 +4824 +4FE4 +7C7C +0440 +FC7C +2444 +C444 +ENDCHAR +STARTCHAR uni9F13 +ENCODING 40723 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FDFE +1020 +7C20 +00F8 +7C08 +4488 +4488 +7C50 +0050 +4420 +2650 +1888 +E306 +ENDCHAR +STARTCHAR uni9F14 +ENCODING 40724 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +FF10 +081E +0810 +7E10 +00FC +7E44 +4244 +4244 +7E28 +4228 +2410 +0F28 +F044 +4082 +ENDCHAR +STARTCHAR uni9F15 +ENCODING 40725 +BBX 15 15 1 -1 +BITMAP +1010 +FE10 +11FE +FE10 +44FC +7C44 +2838 +FEC6 +07F0 +7820 +07C0 +FA3E +0180 +1E00 +01E0 +ENDCHAR +STARTCHAR uni9F16 +ENCODING 40726 +BBX 15 16 0 -2 +BITMAP +0100 +7FFC +0920 +FFFE +0820 +0810 +FF10 +08FE +7E10 +00FC +7E44 +4248 +7E28 +2410 +1E28 +E0C6 +ENDCHAR +STARTCHAR uni9F17 +ENCODING 40727 +BBX 15 15 1 -1 +BITMAP +6498 +1CE0 +6498 +0882 +F07E +1010 +FEFE +1010 +7CFC +0044 +7C44 +4428 +7C10 +2F28 +F0C6 +ENDCHAR +STARTCHAR uni9F18 +ENCODING 40728 +BBX 15 16 0 -2 +BITMAP +0810 +FF7E +0810 +7E7C +4244 +7E28 +2418 +FEE6 +2448 +3C78 +2008 +3FF8 +2008 +3C78 +2448 +4448 +ENDCHAR +STARTCHAR uni9F19 +ENCODING 40729 +BBX 15 15 1 -1 +BITMAP +0810 +FF10 +08FE +7F10 +22FE +3E44 +1438 +FFF6 +1110 +1FF0 +1210 +1FF0 +0480 +7FFC +0080 +ENDCHAR +STARTCHAR uni9F1A +ENCODING 40730 +BBX 15 16 0 -2 +BITMAP +0810 +FF7E +0810 +7E7C +4204 +7E48 +2438 +1E44 +EFF0 +0800 +0FF0 +0800 +FFFE +1110 +14E0 +181C +ENDCHAR +STARTCHAR uni9F1B +ENCODING 40731 +BBX 15 16 0 -2 +BITMAP +0810 +FF7E +0810 +7E7C +4244 +7E38 +2444 +7EA2 +2238 +5424 +0820 +37FE +C000 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uni9F1C +ENCODING 40732 +BBX 15 16 0 -2 +BITMAP +0810 +FF7E +0810 +7E7C +4244 +7E38 +2444 +7FF2 +0920 +07C0 +F93E +1FF0 +1110 +1FF0 +0108 +7FFC +ENDCHAR +STARTCHAR uni9F1D +ENCODING 40733 +BBX 15 16 0 -2 +BITMAP +24A4 +14A4 +87BC +4404 +17FC +2404 +4FBC +90A4 +0810 +FF7E +0810 +7E7C +4244 +7E28 +2418 +FEE6 +ENDCHAR +STARTCHAR uni9F1E +ENCODING 40734 +BBX 15 16 0 -2 +BITMAP +0810 +FF7E +0810 +7E7C +4244 +7E28 +2418 +FEE6 +1110 +7FFE +4822 +8FE4 +0100 +1FF0 +0100 +7FFC +ENDCHAR +STARTCHAR uni9F1F +ENCODING 40735 +BBX 15 16 0 -2 +BITMAP +0810 +FF7E +0810 +7E7C +4244 +7E38 +24D4 +7EA2 +0444 +2BA8 +1010 +2FE8 +C826 +0FE0 +0440 +7FFC +ENDCHAR +STARTCHAR uni9F20 +ENCODING 40736 +BBX 15 15 1 -1 +BITMAP +0600 +787C +4004 +7E7C +4004 +7FFC +0000 +2108 +2948 +2528 +2108 +2948 +252A +39C6 +E702 +ENDCHAR +STARTCHAR uni9F21 +ENCODING 40737 +BBX 15 15 1 -1 +BITMAP +0404 +4204 +2108 +1010 +1FF0 +1110 +1110 +1FF0 +1110 +1110 +1FF0 +2108 +210A +410A +8104 +ENDCHAR +STARTCHAR uni9F22 +ENCODING 40738 +BBX 15 16 0 -2 +BITMAP +2008 +CE28 +8228 +EE28 +8244 +8244 +FE82 +017C +9224 +9224 +DA24 +9224 +DA44 +9244 +9394 +D908 +ENDCHAR +STARTCHAR uni9F23 +ENCODING 40739 +BBX 15 16 0 -2 +BITMAP +2010 +CE14 +8212 +EE12 +8210 +82FE +FE10 +0010 +9210 +9228 +DA28 +9228 +DA28 +9244 +9344 +D982 +ENDCHAR +STARTCHAR uni9F24 +ENCODING 40740 +BBX 15 16 0 -2 +BITMAP +2020 +CE10 +8210 +EEFE +8244 +8244 +FE44 +0044 +9244 +9228 +DA28 +9210 +DA10 +9228 +9344 +D982 +ENDCHAR +STARTCHAR uni9F25 +ENCODING 40741 +BBX 15 16 0 -2 +BITMAP +2028 +CE24 +8224 +EE20 +82FE +8220 +FE20 +003C +9234 +9254 +DA54 +9254 +DA88 +9288 +9314 +D922 +ENDCHAR +STARTCHAR uni9F26 +ENCODING 40742 +BBX 14 16 0 -2 +BITMAP +2000 +CEFC +8224 +EE24 +8224 +8224 +FE54 +0048 +9280 +927C +DA44 +9244 +DA44 +9244 +937C +D944 +ENDCHAR +STARTCHAR uni9F27 +ENCODING 40743 +BBX 15 16 0 -2 +BITMAP +2020 +CE10 +8210 +EEFE +8282 +8284 +FE40 +0044 +9248 +9250 +DA60 +9242 +DA42 +9242 +933E +D900 +ENDCHAR +STARTCHAR uni9F28 +ENCODING 40744 +BBX 15 16 0 -2 +BITMAP +2020 +CE20 +823E +EE42 +82C4 +8328 +FE10 +0028 +9244 +9382 +DA30 +9208 +DA04 +9260 +9310 +D908 +ENDCHAR +STARTCHAR uni9F29 +ENCODING 40745 +BBX 14 16 0 -2 +BITMAP +2040 +CE40 +8240 +EEFC +8284 +8304 +FEF4 +0094 +9294 +9294 +DA94 +92F4 +DA94 +9204 +9328 +D910 +ENDCHAR +STARTCHAR uni9F2A +ENCODING 40746 +BBX 15 16 0 -2 +BITMAP +2010 +CE10 +8250 +EE50 +827C +8250 +FE90 +0010 +9210 +927C +DA10 +9210 +DA10 +9210 +93FE +D900 +ENDCHAR +STARTCHAR uni9F2B +ENCODING 40747 +BBX 15 16 0 -2 +BITMAP +2000 +CE00 +82FE +EE10 +8210 +8220 +FE20 +007C +9244 +92C4 +DB44 +9244 +DA44 +9244 +937C +D944 +ENDCHAR +STARTCHAR uni9F2C +ENCODING 40748 +BBX 15 15 1 -1 +BITMAP +2010 +4E10 +4210 +6EFE +4292 +7E92 +0092 +4AFE +6E92 +4A92 +6E92 +4AFE +4A00 +6D02 +D0FE +ENDCHAR +STARTCHAR uni9F2D +ENCODING 40749 +BBX 15 16 0 -2 +BITMAP +2010 +CE10 +8210 +EE7C +8210 +8210 +FEFE +0008 +9208 +92FE +DA08 +9248 +DA28 +9208 +9328 +D910 +ENDCHAR +STARTCHAR uni9F2E +ENCODING 40750 +BBX 15 16 0 -2 +BITMAP +2000 +CC06 +85D8 +EC48 +8448 +8488 +FC9E +01C8 +A848 +F948 +A948 +F89E +A880 +A940 +FA3E +A400 +ENDCHAR +STARTCHAR uni9F2F +ENCODING 40751 +BBX 15 15 1 -1 +BITMAP +107C +6720 +4120 +777C +4124 +7F24 +00FE +4900 +6D7C +5B44 +6D44 +5B44 +497C +6D02 +D8FE +ENDCHAR +STARTCHAR uni9F30 +ENCODING 40752 +BBX 15 16 0 -2 +BITMAP +2000 +CE7C +8244 +EE44 +827C +8244 +FE44 +007C +9244 +9244 +DA7C +9200 +DA28 +9224 +9342 +D982 +ENDCHAR +STARTCHAR uni9F31 +ENCODING 40753 +BBX 15 16 0 -2 +BITMAP +2010 +CE10 +82FE +EE10 +827C +8210 +FEFE +0000 +927C +9244 +DA7C +9244 +DA7C +9244 +9354 +D948 +ENDCHAR +STARTCHAR uni9F32 +ENCODING 40754 +BBX 15 16 0 -2 +BITMAP +2000 +CEFE +8292 +EE10 +82FE +8210 +FE7C +0054 +927C +9254 +DA7C +9210 +DAFE +9210 +9310 +D910 +ENDCHAR +STARTCHAR uni9F33 +ENCODING 40755 +BBX 15 16 0 -2 +BITMAP +2000 +CEFE +8282 +EEFE +8282 +82FE +FE82 +00FE +9214 +9212 +DAFE +9210 +DA28 +9228 +9344 +D982 +ENDCHAR +STARTCHAR uni9F34 +ENCODING 40756 +BBX 15 16 0 -2 +BITMAP +2000 +CDFE +8500 +ED7E +8542 +857E +FD42 +017E +A910 +F9FE +A924 +F964 +A918 +A924 +FB42 +A5FE +ENDCHAR +STARTCHAR uni9F35 +ENCODING 40757 +BBX 15 16 0 -2 +BITMAP +2020 +CE10 +82FE +EE82 +8244 +8292 +FE14 +0012 +92FE +9210 +DA28 +9228 +DA28 +9244 +9344 +D982 +ENDCHAR +STARTCHAR uni9F36 +ENCODING 40758 +BBX 15 16 0 -2 +BITMAP +2008 +CC3C +85D0 +ED1C +8510 +857C +FD54 +0158 +A970 +F954 +A94C +F940 +AA78 +A8A8 +FA2A +A446 +ENDCHAR +STARTCHAR uni9F37 +ENCODING 40759 +BBX 15 15 1 -1 +BITMAP +100C +66F0 +42A4 +7712 +4220 +7EC8 +0054 +4A3A +6BE2 +5E20 +6BFE +5E50 +4B8C +6D02 +D0FE +ENDCHAR +STARTCHAR uni9F38 +ENCODING 40760 +BBX 15 16 0 -2 +BITMAP +2088 +CC50 +8400 +EDFE +8450 +85FC +FC54 +03FE +A854 +F9FC +A850 +F8D8 +A954 +AA52 +FA50 +A450 +ENDCHAR +STARTCHAR uni9F39 +ENCODING 40761 +BBX 15 15 1 -1 +BITMAP +21FC +CD04 +85FC +ED04 +85FC +FC20 +03FE +9642 +D5FC +BC48 +D490 +BC70 +958C +DA02 +B1FE +ENDCHAR +STARTCHAR uni9F3A +ENCODING 40762 +BBX 15 15 1 -1 +BITMAP +1000 +667C +4254 +767C +4254 +7E54 +007C +4A00 +6AFE +5EAA +6AAA +5EFE +4AAA +6EAA +C9FE +ENDCHAR +STARTCHAR uni9F3B +ENCODING 40763 +BBX 15 15 1 -1 +BITMAP +0200 +0400 +1FF0 +1010 +1FF0 +1010 +7FFC +4104 +7FFC +4104 +7FFC +0820 +FFFE +1020 +6020 +ENDCHAR +STARTCHAR uni9F3C +ENCODING 40764 +BBX 14 16 0 -2 +BITMAP +1004 +3E04 +2244 +3E44 +2244 +3E44 +0044 +7F44 +4944 +7F4C +4974 +7F44 +0004 +FF84 +2204 +4204 +ENDCHAR +STARTCHAR uni9F3D +ENCODING 40765 +BBX 15 15 1 -1 +BITMAP +0820 +1020 +3E20 +2220 +3E78 +2228 +7F28 +4928 +7F28 +4928 +7F28 +0028 +FFCA +224A +4286 +ENDCHAR +STARTCHAR uni9F3E +ENCODING 40766 +BBX 15 15 1 -1 +BITMAP +0800 +107C +3E10 +2210 +3E10 +2210 +7F10 +49FE +7F10 +4910 +7F10 +0010 +FF90 +2210 +4210 +ENDCHAR +STARTCHAR uni9F3F +ENCODING 40767 +BBX 15 16 0 -2 +BITMAP +1000 +3E00 +227C +3E28 +2228 +3E28 +0028 +7F28 +4928 +7F28 +4928 +7F2A +002A +FFAA +2246 +4280 +ENDCHAR +STARTCHAR uni9F40 +ENCODING 40768 +BBX 15 16 0 -2 +BITMAP +1000 +3E7C +2220 +3E20 +2220 +3E38 +0028 +7F28 +4958 +7F48 +4948 +7F48 +005A +FFEA +224A +4206 +ENDCHAR +STARTCHAR uni9F41 +ENCODING 40769 +BBX 15 15 1 -1 +BITMAP +0820 +1020 +3E7E +2242 +3E82 +227A +7F4A +494A +7F4A +494A +7F7A +0002 +FFC4 +2204 +4218 +ENDCHAR +STARTCHAR uni9F42 +ENCODING 40770 +BBX 15 16 0 -2 +BITMAP +2020 +7C20 +44FC +7C24 +45FE +7C24 +00FC +FE20 +9324 +FEA8 +9270 +FEA8 +0124 +FE22 +44A0 +8440 +ENDCHAR +STARTCHAR uni9F43 +ENCODING 40771 +BBX 15 16 0 -2 +BITMAP +2000 +7CFC +4484 +7CFC +4484 +7CFC +0040 +FEFE +9312 +FE92 +92AA +FE82 +00FA +FE02 +4414 +8408 +ENDCHAR +STARTCHAR uni9F44 +ENCODING 40772 +BBX 15 16 0 -2 +BITMAP +1010 +3E10 +22FE +3E38 +2254 +3E92 +0000 +7F7C +4944 +7F7C +4944 +7F7C +0044 +FF80 +22FE +4200 +ENDCHAR +STARTCHAR uni9F45 +ENCODING 40773 +BBX 15 15 1 -1 +BITMAP +0810 +1020 +3E7C +2244 +3E7C +2244 +7F7C +4944 +7F7C +4912 +7FFE +0010 +FFA8 +2244 +4282 +ENDCHAR +STARTCHAR uni9F46 +ENCODING 40774 +BBX 15 15 1 -1 +BITMAP +0852 +10A4 +3EA4 +2252 +3E7C +2244 +7F7C +4900 +7F7E +4952 +7F52 +007E +FFC0 +2242 +423E +ENDCHAR +STARTCHAR uni9F47 +ENCODING 40775 +BBX 15 16 0 -2 +BITMAP +2020 +7C3C +4420 +7CFE +44A2 +7CB8 +00E4 +FE9C +9280 +FEBC +92A4 +FEBC +00A4 +FEBC +44A4 +857E +ENDCHAR +STARTCHAR uni9F48 +ENCODING 40776 +BBX 15 16 0 -2 +BITMAP +2028 +7CFE +44AA +7CFE +44AA +7CFE +0000 +FEFE +9280 +FEBE +9280 +FEFE +00A8 +FEAA +44A4 +8532 +ENDCHAR +STARTCHAR uni9F49 +ENCODING 40777 +BBX 15 16 0 -2 +BITMAP +2020 +FBFE +8924 +F9FC +8820 +FBFE +0356 +F9DC +A888 +FBFE +A888 +FBFE +0094 +F988 +52A4 +90C2 +ENDCHAR +STARTCHAR uni9F4A +ENCODING 40778 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +7ABC +2928 +4924 +9932 +0100 +1008 +1FF8 +1008 +1FF8 +2008 +4008 +ENDCHAR +STARTCHAR uni9F4B +ENCODING 40779 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +FABE +2928 +4924 +9932 +17D0 +1010 +1FF0 +1110 +1550 +2930 +4310 +ENDCHAR +STARTCHAR uni9F4C +ENCODING 40780 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0284 +7D78 +2550 +2548 +4D64 +2008 +3FF8 +2008 +3FF8 +2008 +2528 +2948 +4288 +8C48 +ENDCHAR +STARTCHAR uni9F4D +ENCODING 40781 +BBX 15 16 0 -2 +BITMAP +0100 +FFFE +0284 +7D78 +2550 +2548 +4D64 +2008 +3FF8 +2008 +3FF8 +4008 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni9F4E +ENCODING 40782 +BBX 15 15 1 -1 +BITMAP +0100 +FFFE +0440 +7ABC +2928 +D936 +2008 +3FF8 +2008 +3FF8 +2828 +2FE8 +4828 +4FE8 +9838 +ENDCHAR +STARTCHAR uni9F4F +ENCODING 40783 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0440 +7ABC +2928 +D936 +2008 +3FF8 +2008 +3FF8 +2288 +2EE8 +4288 +4FE8 +ENDCHAR +STARTCHAR uni9F50 +ENCODING 40784 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +0820 +0440 +0380 +0C60 +3018 +C826 +0820 +0820 +0820 +0820 +1020 +1020 +2020 +ENDCHAR +STARTCHAR uni9F51 +ENCODING 40785 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFC +0820 +0440 +0380 +1C70 +E28E +2EE8 +2288 +2EE8 +2288 +2EE8 +2288 +5FF8 +8008 +ENDCHAR +STARTCHAR uni9F52 +ENCODING 40786 +BBX 15 15 1 -1 +BITMAP +0100 +1100 +11F8 +1100 +1100 +FFFE +2448 +2AA8 +2008 +3FF8 +2448 +2448 +2AA8 +2008 +3FF8 +ENDCHAR +STARTCHAR uni9F53 +ENCODING 40787 +BBX 15 15 1 -1 +BITMAP +0840 +0840 +2F40 +2840 +2840 +FFC0 +5540 +6B40 +4140 +7F40 +5540 +5540 +6B42 +4142 +7F3E +ENDCHAR +STARTCHAR uni9F54 +ENCODING 40788 +BBX 15 15 1 -1 +BITMAP +0840 +2840 +2F40 +2840 +2840 +FFCC +5570 +6B40 +4140 +7F40 +5540 +5540 +6B42 +4142 +7F3E +ENDCHAR +STARTCHAR uni9F55 +ENCODING 40789 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +2F20 +287E +2840 +FF80 +557C +6B08 +4110 +7F20 +5540 +5540 +6B42 +4142 +7F3E +ENDCHAR +STARTCHAR uni9F56 +ENCODING 40790 +BBX 15 16 0 -2 +BITMAP +1000 +50FC +5C08 +5048 +FE48 +2848 +AA88 +D6FE +8218 +FE28 +AA28 +AA48 +D688 +9F08 +E228 +0210 +ENDCHAR +STARTCHAR uni9F57 +ENCODING 40791 +BBX 15 15 1 -1 +BITMAP +080C +0870 +2F40 +2840 +2840 +FFFE +5548 +6B48 +4148 +7F48 +5548 +5548 +6B88 +4108 +7F08 +ENDCHAR +STARTCHAR uni9F58 +ENCODING 40792 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +5E50 +5048 +50CC +FF4A +AA48 +D648 +8248 +FE48 +AA48 +AA48 +D688 +8288 +FF08 +ENDCHAR +STARTCHAR uni9F59 +ENCODING 40793 +BBX 15 16 0 -2 +BITMAP +1040 +5040 +5CFC +5084 +FF04 +2AF4 +AA94 +D694 +82F4 +FE84 +AA94 +AA88 +D682 +9E82 +E27E +0200 +ENDCHAR +STARTCHAR uni9F5A +ENCODING 40794 +BBX 15 16 0 -2 +BITMAP +0820 +2820 +2F20 +283E +FF50 +1450 +5590 +6B1E +4110 +7F10 +5510 +551E +6B10 +4F10 +7110 +0110 +ENDCHAR +STARTCHAR uni9F5B +ENCODING 40795 +BBX 15 16 0 -2 +BITMAP +1028 +50A8 +5CA8 +50A8 +FEA8 +29FE +AAA8 +D6A8 +82A8 +FEA8 +AAB8 +AA80 +D680 +9E80 +E2FE +0200 +ENDCHAR +STARTCHAR uni9F5C +ENCODING 40796 +BBX 15 16 0 -2 +BITMAP +1008 +5028 +5C28 +5028 +FEA8 +28AA +AABC +D6A8 +82A8 +FEA8 +AAA8 +AAA8 +D6AA +9EBA +E2EA +0386 +ENDCHAR +STARTCHAR uni9F5D +ENCODING 40797 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +2F10 +2824 +2824 +FF4A +55F2 +6B00 +417C +7F44 +5544 +5544 +6B44 +4144 +7F7C +ENDCHAR +STARTCHAR uni9F5E +ENCODING 40798 +BBX 15 16 0 -2 +BITMAP +0800 +2800 +2F7C +2844 +FF44 +1444 +5544 +6B44 +417C +7F44 +5500 +5528 +6B24 +4F44 +7142 +0182 +ENDCHAR +STARTCHAR uni9F5F +ENCODING 40799 +BBX 15 15 1 -1 +BITMAP +0800 +283C +2F24 +2824 +2824 +FFBC +5524 +6B24 +4124 +7F24 +553C +5524 +6B24 +4124 +7F7E +ENDCHAR +STARTCHAR uni9F60 +ENCODING 40800 +BBX 15 15 1 -1 +BITMAP +0800 +28FE +2F22 +2822 +2822 +FFC2 +5542 +6B8C +4100 +7F7C +5544 +5544 +6B44 +4144 +7F7C +ENDCHAR +STARTCHAR uni9F61 +ENCODING 40801 +BBX 15 15 1 -1 +BITMAP +0810 +2810 +2F28 +2828 +2844 +FFBA +5500 +6B00 +417E +7F12 +5512 +5512 +6B16 +4110 +7F10 +ENDCHAR +STARTCHAR uni9F62 +ENCODING 40802 +BBX 15 15 1 -1 +BITMAP +0810 +2810 +2F28 +2844 +FFBA +4100 +6B00 +5D7E +4912 +7F12 +4912 +5D16 +6B10 +4110 +7F10 +ENDCHAR +STARTCHAR uni9F63 +ENCODING 40803 +BBX 15 15 1 -1 +BITMAP +0820 +2820 +2F3E +2842 +2842 +FFFA +554A +6B4A +414A +7F4A +557A +5502 +6B04 +4104 +7F18 +ENDCHAR +STARTCHAR uni9F64 +ENCODING 40804 +BBX 15 16 0 -2 +BITMAP +1110 +0920 +7FFC +0400 +FFFE +1110 +29E8 +C906 +7FFC +0440 +2AA8 +3FF8 +2448 +2AA8 +3FF8 +0008 +ENDCHAR +STARTCHAR uni9F65 +ENCODING 40805 +BBX 15 16 0 -2 +BITMAP +1020 +5020 +5CFC +50A4 +FEA4 +28FC +AAA4 +D6A4 +82FC +FE20 +AA24 +AA18 +D612 +9E6A +E386 +0202 +ENDCHAR +STARTCHAR uni9F66 +ENCODING 40806 +BBX 15 15 1 -1 +BITMAP +0800 +287C +2F44 +2844 +287C +FFC4 +5544 +6B7C +4148 +7F4A +554A +554C +6B44 +4174 +7FC2 +ENDCHAR +STARTCHAR uni9F67 +ENCODING 40807 +BBX 15 15 1 -1 +BITMAP +0800 +087E +7F12 +0812 +7F22 +084C +0F00 +F1FC +1100 +FFFE +2448 +3FF8 +2448 +2AA8 +3FF8 +ENDCHAR +STARTCHAR uni9F68 +ENCODING 40808 +BBX 14 16 0 -2 +BITMAP +0800 +2820 +2F4C +2844 +FF44 +1444 +5544 +6B6C +4144 +7F44 +5544 +5544 +6B44 +4F7C +7144 +0100 +ENDCHAR +STARTCHAR uni9F69 +ENCODING 40809 +BBX 15 15 1 -1 +BITMAP +0810 +0810 +2E10 +28FE +2828 +FF44 +5582 +6B44 +4144 +7F28 +5528 +5510 +6B28 +4144 +7F82 +ENDCHAR +STARTCHAR uni9F6A +ENCODING 40810 +BBX 15 15 1 -1 +BITMAP +0800 +287C +2F44 +2844 +2844 +FF7C +5510 +6B10 +4110 +7F5C +5550 +5550 +6B50 +4170 +7F9E +ENDCHAR +STARTCHAR uni9F6B +ENCODING 40811 +BBX 15 16 0 -2 +BITMAP +1000 +50FE +5C92 +5092 +FE92 +28FE +AA92 +D6B2 +82BA +FED6 +AA92 +AA92 +D692 +9E82 +E2FE +0282 +ENDCHAR +STARTCHAR uni9F6C +ENCODING 40812 +BBX 15 15 1 -1 +BITMAP +0800 +28FE +2F20 +2820 +28FC +FF24 +5524 +6B24 +41FE +7F00 +557C +5544 +6B44 +4144 +7F7C +ENDCHAR +STARTCHAR uni9F6D +ENCODING 40813 +BBX 15 15 1 -1 +BITMAP +1024 +10D8 +5C90 +5090 +50F0 +FE9E +AA94 +D694 +82F4 +FE94 +AA94 +AB14 +D724 +8224 +FE44 +ENDCHAR +STARTCHAR uni9F6E +ENCODING 40814 +BBX 15 16 0 -2 +BITMAP +1020 +5020 +5DFC +5020 +FE50 +2888 +ABFE +D608 +82E8 +FEA8 +AAA8 +AAE8 +D6A8 +9E08 +E228 +0210 +ENDCHAR +STARTCHAR uni9F6F +ENCODING 40815 +BBX 15 16 0 -2 +BITMAP +1000 +5020 +5CCE +5082 +FE82 +28EE +AA82 +D682 +82FE +FE28 +AA28 +AA28 +D648 +9E4A +E28A +0306 +ENDCHAR +STARTCHAR uni9F70 +ENCODING 40816 +BBX 15 15 1 -1 +BITMAP +1048 +1048 +5DFE +5048 +5048 +FE48 +ABFE +D600 +82FC +FE84 +AA84 +AAFC +D684 +8284 +FEFC +ENDCHAR +STARTCHAR uni9F71 +ENCODING 40817 +BBX 15 16 0 -2 +BITMAP +1000 +51F0 +5CAE +50AA +FEEA +28AA +AAAA +D6EA +82AA +FEAA +AAB4 +ABE4 +D624 +9E2A +E22A +0230 +ENDCHAR +STARTCHAR uni9F72 +ENCODING 40818 +BBX 15 15 1 -1 +BITMAP +080C +2870 +2F10 +287C +2854 +FFD4 +557C +6B10 +417E +7F52 +5556 +555E +6B62 +4142 +7F46 +ENDCHAR +STARTCHAR uni9F73 +ENCODING 40819 +BBX 15 16 0 -2 +BITMAP +1000 +50FE +5C92 +5010 +FEFE +2810 +AA7C +D654 +827C +FE54 +AA7C +AA10 +D6FE +9E10 +E210 +0210 +ENDCHAR +STARTCHAR uni9F74 +ENCODING 40820 +BBX 15 16 0 -2 +BITMAP +1020 +5010 +5CFE +5044 +FE28 +28FE +AA88 +D690 +82A4 +FE88 +AA90 +AAA2 +D684 +9E88 +E310 +0260 +ENDCHAR +STARTCHAR uni9F75 +ENCODING 40821 +BBX 15 15 1 -1 +BITMAP +1000 +10FC +5EA4 +50A4 +50FC +FFA4 +AAA4 +D6FC +8220 +FEFE +AAA2 +AAAA +D6B6 +82E2 +FE86 +ENDCHAR +STARTCHAR uni9F76 +ENCODING 40822 +BBX 15 15 1 -1 +BITMAP +0800 +28EE +2FAA +28AA +28EE +FF80 +553C +6B00 +41FE +7F10 +553C +5544 +6B04 +4104 +7F18 +ENDCHAR +STARTCHAR uni9F77 +ENCODING 40823 +BBX 15 15 1 -1 +BITMAP +0800 +287E +2F42 +2842 +287E +FFC0 +557E +6B50 +4154 +7F7A +554A +55BC +6B08 +4108 +7F7E +ENDCHAR +STARTCHAR uni9F78 +ENCODING 40824 +BBX 15 16 0 -2 +BITMAP +1044 +5028 +5C00 +50FE +FE00 +2828 +AA44 +D682 +8200 +FEFE +AAAA +AAAA +D6AA +9EAA +E3FE +0200 +ENDCHAR +STARTCHAR uni9F79 +ENCODING 40825 +BBX 15 16 0 -2 +BITMAP +0820 +0440 +7FFC +0100 +FFFE +0400 +1FF8 +E080 +1FFC +0100 +09F0 +0900 +7FFC +2448 +2AA8 +3FF8 +ENDCHAR +STARTCHAR uni9F7A +ENCODING 40826 +BBX 15 16 0 -2 +BITMAP +1040 +5040 +5CFE +5122 +FEAA +28FA +AA42 +D694 +8348 +FEFE +AB22 +AAAA +D6FA +9E42 +E294 +0308 +ENDCHAR +STARTCHAR uni9F7B +ENCODING 40827 +BBX 15 16 0 -2 +BITMAP +1010 +5010 +5CFE +5010 +FE7C +2844 +AA7C +D644 +827C +FE44 +AA7C +AA44 +D6FE +9E28 +E244 +0282 +ENDCHAR +STARTCHAR uni9F7C +ENCODING 40828 +BBX 15 16 0 -2 +BITMAP +1088 +5088 +5DFE +5088 +FEDC +29AA +AA88 +D600 +83FE +FE22 +AAA0 +AABC +D6A0 +9F60 +E23E +0200 +ENDCHAR +STARTCHAR uni9F7D +ENCODING 40829 +BBX 15 16 0 -2 +BITMAP +1044 +5044 +5DEE +5044 +FEEE +2954 +AA44 +D600 +827C +FE00 +AAFE +AA10 +D654 +9E92 +E250 +0220 +ENDCHAR +STARTCHAR uni9F7E +ENCODING 40830 +BBX 15 16 0 -2 +BITMAP +0F14 +0812 +7F10 +497E +7E10 +4928 +7F28 +5244 +9EFA +0480 +7FFE +0440 +2AA4 +3114 +3FFC +0004 +ENDCHAR +STARTCHAR uni9F7F +ENCODING 40831 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +11F8 +1100 +1100 +1100 +FFFE +0000 +2108 +2108 +2288 +2448 +2828 +2008 +3FF8 +0008 +ENDCHAR +STARTCHAR uni9F80 +ENCODING 40832 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +2820 +2F22 +2822 +2824 +FF28 +0030 +4920 +4960 +55A0 +6322 +4122 +4722 +791E +0100 +ENDCHAR +STARTCHAR uni9F81 +ENCODING 40833 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +2820 +2F7E +2840 +2880 +FF3C +0004 +4908 +4910 +5520 +6340 +4142 +4742 +793E +0100 +ENDCHAR +STARTCHAR uni9F82 +ENCODING 40834 +BBX 15 16 0 -2 +BITMAP +0800 +080C +2870 +2F40 +2840 +2840 +FF7E +0048 +4948 +4948 +5548 +6348 +4148 +4748 +7948 +0188 +ENDCHAR +STARTCHAR uni9F83 +ENCODING 40835 +BBX 15 16 0 -2 +BITMAP +0800 +087C +2844 +2F44 +2844 +287C +FF44 +0044 +4944 +497C +5544 +6344 +4144 +4744 +79FE +0100 +ENDCHAR +STARTCHAR uni9F84 +ENCODING 40836 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +5050 +5E50 +5088 +5124 +FE12 +0010 +93FC +9204 +AA08 +C688 +8250 +8E20 +F210 +0210 +ENDCHAR +STARTCHAR uni9F85 +ENCODING 40837 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +507C +5E84 +5084 +51F4 +FE94 +0094 +9294 +92F4 +AA84 +C6A8 +8292 +8E82 +F27E +0200 +ENDCHAR +STARTCHAR uni9F86 +ENCODING 40838 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +2822 +2F22 +2822 +2822 +FF4A +0044 +4980 +497E +5542 +6342 +4142 +4742 +797E +0142 +ENDCHAR +STARTCHAR uni9F87 +ENCODING 40839 +BBX 15 16 0 -2 +BITMAP +1008 +1028 +5028 +5E28 +50A8 +50AA +FEBC +00A8 +92A8 +92A8 +AAA8 +C6A8 +82AA +8EBA +F2EA +0386 +ENDCHAR +STARTCHAR uni9F88 +ENCODING 40840 +BBX 15 16 0 -2 +BITMAP +1000 +10FC +5084 +5E84 +50FC +5084 +FE84 +00FC +92A2 +92A4 +AA98 +C690 +8288 +8EA4 +F2C2 +0280 +ENDCHAR +STARTCHAR uni9F89 +ENCODING 40841 +BBX 15 16 0 -2 +BITMAP +1000 +11FC +5020 +5E20 +50FC +5044 +FE44 +01FE +9200 +9200 +AAFC +C684 +8284 +8E84 +F2FC +0284 +ENDCHAR +STARTCHAR uni9F8A +ENCODING 40842 +BBX 15 16 0 -2 +BITMAP +0800 +087C +2844 +2F44 +2844 +2844 +FF7C +0010 +4910 +4950 +555E +6350 +4150 +4770 +799E +0100 +ENDCHAR +STARTCHAR uni9F8B +ENCODING 40843 +BBX 15 16 0 -2 +BITMAP +100E +11F0 +5010 +5EFE +5092 +5092 +FEFE +0010 +92FE +9292 +AA9A +C696 +82FE +8E82 +F28A +0284 +ENDCHAR +STARTCHAR uni9F8C +ENCODING 40844 +BBX 15 16 0 -2 +BITMAP +1000 +10FE +5082 +5E82 +50FE +5080 +FEFE +0090 +92A4 +92FE +AA92 +C690 +82FC +8E90 +F310 +02FE +ENDCHAR +STARTCHAR uni9F8D +ENCODING 40845 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +FEF8 +4480 +28F8 +FE08 +00F8 +7C80 +44F8 +7C80 +44F8 +7C80 +44FA +4482 +4C7E +ENDCHAR +STARTCHAR uni9F8E +ENCODING 40846 +BBX 15 15 0 -2 +BITMAP +3FFE +2220 +2FBC +2520 +223C +3F84 +203C +2FA0 +28BC +2FA0 +28BC +2FA0 +48BC +48A2 +899E +ENDCHAR +STARTCHAR uni9F8F +ENCODING 40847 +BBX 15 16 0 -2 +BITMAP +0840 +7F7C +1440 +FF7C +2204 +3E7C +2240 +3E78 +2242 +263E +0820 +0820 +FFFE +0820 +1020 +2020 +ENDCHAR +STARTCHAR uni9F90 +ENCODING 40848 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4440 +7F7E +5240 +7F7C +4004 +5E7C +5240 +5E7C +9240 +9E7C +1242 +163E +ENDCHAR +STARTCHAR uni9F91 +ENCODING 40849 +BBX 15 16 0 -2 +BITMAP +0840 +7F7C +1440 +FF7C +2204 +3E7C +2240 +3E78 +2242 +263E +0000 +3FF8 +0200 +FFFE +0860 +701C +ENDCHAR +STARTCHAR uni9F92 +ENCODING 40850 +BBX 15 16 0 -2 +BITMAP +0840 +7F7C +1440 +FF7C +2204 +3E7C +2240 +3E7C +2242 +263E +0000 +3FF8 +0000 +FFFE +1110 +2308 +ENDCHAR +STARTCHAR uni9F93 +ENCODING 40851 +BBX 15 16 0 -2 +BITMAP +2110 +2090 +FBDE +2010 +425E +7982 +4BDE +C810 +7BDE +4A50 +4BDE +7A50 +4BDE +4A50 +4A52 +5ACE +ENDCHAR +STARTCHAR uni9F94 +ENCODING 40852 +BBX 15 15 1 -1 +BITMAP +0840 +7F7E +2240 +FFFC +2204 +3E7C +2240 +3E42 +223E +2640 +1FF0 +0440 +7FFC +0C30 +300C +ENDCHAR +STARTCHAR uni9F95 +ENCODING 40853 +BBX 15 15 1 -1 +BITMAP +0380 +1C70 +FFFE +1010 +1FF0 +0840 +7F7E +2240 +FFFC +2204 +3E7C +2240 +3E7C +2242 +2E3E +ENDCHAR +STARTCHAR uni9F96 +ENCODING 40854 +BBX 15 16 0 -2 +BITMAP +8888 +4E4E +F8F8 +A8A8 +4E4E +F2F2 +0E0E +E8E8 +AEAE +A8A8 +EEEE +A8A8 +EEEE +A8A8 +AAAA +A6A6 +ENDCHAR +STARTCHAR uni9F97 +ENCODING 40855 +BBX 15 15 1 -1 +BITMAP +3FF8 +0100 +7FFC +4104 +5D74 +0000 +3BB8 +0840 +7F7E +2240 +FFBC +2204 +3E7C +2242 +263E +ENDCHAR +STARTCHAR uni9F98 +ENCODING 40856 +BBX 15 16 0 -2 +BITMAP +0840 +3E7C +1440 +FF78 +2208 +3E78 +2242 +487E +E8E8 +AEAE +F8F8 +0E0E +E2E2 +AEAE +E8E8 +AEAE +ENDCHAR +STARTCHAR uni9F99 +ENCODING 40857 +BBX 15 16 0 -2 +BITMAP +0420 +0410 +0410 +0400 +FFFE +0480 +0488 +0488 +0490 +08A0 +08C0 +1082 +1182 +2282 +447E +8000 +ENDCHAR +STARTCHAR uni9F9A +ENCODING 40858 +BBX 15 16 0 -2 +BITMAP +0420 +0410 +7FFC +0920 +09C4 +1704 +20FC +C440 +0440 +3FF8 +0440 +0440 +FFFE +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni9F9B +ENCODING 40859 +BBX 15 16 0 -2 +BITMAP +0100 +06C0 +1830 +EFEE +0000 +1FF0 +1010 +1FF0 +0440 +0420 +FFFE +0910 +1160 +2184 +4F04 +80FC +ENDCHAR +STARTCHAR uni9F9C +ENCODING 40860 +BBX 15 15 1 -1 +BITMAP +0400 +1FE0 +E040 +3FF8 +2288 +7EF8 +1280 +FFFC +12AC +7294 +12AC +FFFC +1200 +7202 +01FE +ENDCHAR +STARTCHAR uni9F9D +ENCODING 40861 +BBX 15 15 1 -1 +BITMAP +33E0 +E440 +2FF8 +2548 +FF78 +2540 +2FFC +7544 +6D6C +A954 +AD6C +2544 +2FFC +2502 +2CFE +ENDCHAR +STARTCHAR uni9F9E +ENCODING 40862 +BBX 15 16 0 -2 +BITMAP +4920 +2A3E +7F48 +5DA8 +6B10 +456E +3FF8 +2008 +3EF8 +0280 +7AF8 +0AD8 +FEA8 +0AD8 +7A8A +01FE +ENDCHAR +STARTCHAR uni9F9F +ENCODING 40863 +BBX 15 16 0 -2 +BITMAP +0400 +0400 +0FE0 +1020 +2040 +7FF8 +A108 +2108 +3FF8 +2108 +2108 +3FF8 +2108 +0102 +0102 +00FE +ENDCHAR +STARTCHAR uni9FA0 +ENCODING 40864 +BBX 15 15 1 -1 +BITMAP +0380 +1C70 +E7CE +0000 +7BBC +4AA4 +7BBC +0000 +3FF8 +2448 +2448 +3FF8 +2448 +2448 +2458 +ENDCHAR +STARTCHAR uni9FA1 +ENCODING 40865 +BBX 15 16 0 -2 +BITMAP +0810 +0810 +1410 +2210 +5D3E +80A2 +7F44 +5590 +7F10 +0010 +7F10 +5528 +7F28 +5524 +5544 +4382 +ENDCHAR +STARTCHAR uni9FA2 +ENCODING 40866 +BBX 15 15 1 -1 +BITMAP +080E +14F0 +2210 +DD10 +00FE +7F10 +5538 +7F38 +0054 +7F54 +5554 +7F92 +5512 +5510 +4310 +ENDCHAR +STARTCHAR uni9FA3 +ENCODING 40867 +BBX 15 16 0 -2 +BITMAP +0800 +08FC +1404 +2204 +5D7C +8084 +7F04 +55FE +7F10 +0092 +7F54 +5538 +7F54 +5592 +5550 +4320 +ENDCHAR +STARTCHAR uni9FA4 +ENCODING 40868 +BBX 15 16 0 -2 +BITMAP +0848 +084A +146C +2248 +5D4A +80EA +7F56 +5520 +7F7E +0042 +7F42 +557E +7F42 +5542 +557E +4342 +ENDCHAR +STARTCHAR uni9FA5 +ENCODING 40869 +BBX 15 16 0 -2 +BITMAP +0800 +087E +1408 +2210 +5D7C +80C4 +7F44 +557C +7F44 +007C +7F44 +5544 +7F7C +5528 +5544 +4382 +ENDCHAR +STARTCHAR uni9FA6 +ENCODING 40870 +BBX 15 16 0 -2 +BITMAP +1124 +10A4 +10A8 +13FE +1602 +5AFA +5088 +90F8 +1020 +11FC +1124 +2924 +2524 +452C +4020 +8020 +ENDCHAR +STARTCHAR uni9FA7 +ENCODING 40871 +BBX 15 16 1 -2 +BITMAP +03F8 +0208 +F3F8 +9208 +93F8 +9088 +F3F0 +90A0 +9FFE +9100 +97F8 +FA08 +93F8 +0208 +03F8 +0208 +ENDCHAR +STARTCHAR uni9FA8 +ENCODING 40872 +BBX 12 14 2 -1 +BITMAP +FFF0 +8A00 +9100 +BFF0 +D100 +9100 +9FE0 +9100 +9FE0 +9100 +9100 +9FF0 +9000 +FFF0 +ENDCHAR +STARTCHAR uni9FA9 +ENCODING 40873 +BBX 16 16 0 -2 +BITMAP +0420 +0420 +FFFF +0420 +240C +FF70 +2440 +3C40 +087F +7E48 +4A48 +7E48 +0848 +FF88 +0888 +0908 +ENDCHAR +STARTCHAR uni9FAA +ENCODING 40874 +BBX 16 16 0 -2 +BITMAP +0820 +0820 +0820 +7E20 +0820 +0820 +FF20 +0850 +0850 +0E50 +2848 +2888 +2884 +5B02 +4800 +87FF +ENDCHAR +STARTCHAR uni9FAB +ENCODING 40875 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +FF10 +1028 +7E44 +5282 +537C +7E10 +5210 +5210 +7EFE +1010 +FF10 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni9FAC +ENCODING 40876 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1A02 +268A +2252 +7FFE +9242 +1222 +7FFE +1282 +1682 +5A82 +32FA +1E02 +E20A +0204 +ENDCHAR +STARTCHAR uni9FAD +ENCODING 40877 +BBX 15 16 0 -2 +BITMAP +7DFE +5122 +7DFE +5122 +5122 +7DFE +5048 +5048 +7EFC +0248 +5648 +53FE +8200 +0248 +1484 +0902 +ENDCHAR +STARTCHAR uni9FAE +ENCODING 40878 +BBX 15 16 0 -2 +BITMAP +7FDE +514A +7CC6 +514A +5252 +7CFC +50A4 +50FC +7EA4 +02FC +5648 +52FE +8248 +03FE +1484 +0902 +ENDCHAR +STARTCHAR uni9FAF +ENCODING 40879 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +2820 +25FE +4120 +B920 +1124 +1124 +7D28 +1118 +1510 +5910 +312A +1E2A +F246 +4482 +ENDCHAR +STARTCHAR uni9FB0 +ENCODING 40880 +BBX 14 13 0 -2 +BITMAP +0100 +0100 +0100 +0100 +0100 +11F0 +1100 +1100 +1100 +1100 +2D00 +4300 +80FC +ENDCHAR +STARTCHAR uni9FB1 +ENCODING 40881 +BBX 13 15 1 -2 +BITMAP +FFF8 +8008 +8048 +9048 +8848 +8488 +8288 +8108 +8288 +8448 +8828 +B028 +8008 +FFF8 +8008 +ENDCHAR +STARTCHAR uni9FB2 +ENCODING 40882 +BBX 15 16 0 -2 +BITMAP +1020 +1010 +29FE +2510 +41FE +BD10 +117C +1154 +7D7C +1154 +157C +5910 +31FE +1E10 +E210 +4410 +ENDCHAR +STARTCHAR uni9FB3 +ENCODING 40883 +BBX 15 15 0 -1 +BITMAP +1010 +1010 +7EFC +1010 +1010 +FEFE +2448 +5294 +1010 +7E7C +1010 +1010 +1010 +1E10 +E1FE +ENDCHAR +STARTCHAR uni9FB4 +ENCODING 40884 +BBX 13 7 1 3 +BITMAP +FFF8 +0010 +0020 +0640 +0180 +0040 +0020 +ENDCHAR +STARTCHAR uni9FB5 +ENCODING 40885 +BBX 15 11 0 3 +BITMAP +00F8 +7F00 +0100 +3FF8 +0100 +FFFE +0200 +0400 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni9FB6 +ENCODING 40886 +BBX 15 7 0 7 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uni9FB7 +ENCODING 40887 +BBX 15 6 0 8 +BITMAP +0820 +0820 +7FFC +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uni9FB8 +ENCODING 40888 +BBX 15 7 0 7 +BITMAP +0100 +1110 +0920 +0100 +7FFE +4004 +8008 +ENDCHAR +STARTCHAR uni9FB9 +ENCODING 40889 +BBX 15 11 0 3 +BITMAP +1110 +0920 +0100 +3FFC +0100 +0200 +7FFE +0820 +1010 +2008 +C006 +ENDCHAR +STARTCHAR uni9FBA +ENCODING 40890 +BBX 7 16 0 -2 +BITMAP +10 +10 +FE +10 +7C +44 +44 +7C +44 +7C +54 +10 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni9FBB +ENCODING 40891 +BBX 15 10 0 4 +BITMAP +2088 +27E8 +4812 +F3DC +2008 +4BD2 +F83E +03C0 +AA52 +ABD2 +ENDCHAR +STARTCHAR uni9FBC +ENCODING 40892 +BBX 15 16 0 -2 +BITMAP +0040 +207C +2040 +27FE +2402 +23FC +FA64 +2492 +2108 +23FC +250A +21F8 +3908 +C1F8 +0108 +01F8 +ENDCHAR +STARTCHAR uni9FBD +ENCODING 40893 +BBX 15 16 0 -2 +BITMAP +1080 +1080 +10FC +1108 +5610 +55FC +5524 +9924 +11FC +1124 +1124 +29FC +2400 +4554 +412A +822A +ENDCHAR +STARTCHAR uni9FBE +ENCODING 40894 +BBX 15 16 0 -2 +BITMAP +0840 +0840 +087E +7F42 +4AA2 +48AA +4872 +7EFE +4222 +6272 +54AA +4D22 +8822 +9402 +220A +4004 +ENDCHAR +STARTCHAR uni9FBF +ENCODING 40895 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0440 +0840 +0BF8 +1040 +3040 +57FC +9040 +13F8 +1040 +1040 +17FE +1000 +ENDCHAR +STARTCHAR uni9FC0 +ENCODING 40896 +BBX 15 16 0 -2 +BITMAP +0420 +FFFE +0420 +7F78 +5048 +5E86 +6578 +4A48 +7F30 +00C8 +FFFE +0440 +3FF8 +2448 +2BA8 +3FF8 +ENDCHAR +STARTCHAR uni9FC1 +ENCODING 40897 +BBX 15 16 0 -2 +BITMAP +2090 +1090 +0090 +FC90 +03FC +7890 +0090 +7890 +0090 +7BFE +4800 +4800 +4890 +7908 +4A04 +0404 +ENDCHAR +STARTCHAR uni9FC2 +ENCODING 40898 +BBX 15 16 0 -2 +BITMAP +1020 +1040 +FEFC +1084 +7CFC +5484 +7CFC +5480 +54FE +7C80 +54FE +1002 +FEAA +10AE +1152 +100C +ENDCHAR +STARTCHAR uni9FC3 +ENCODING 40899 +BBX 15 16 0 -2 +BITMAP +0040 +0040 +F7FC +9040 +9250 +F148 +9148 +92D4 +F460 +9040 +90A0 +90A0 +F110 +9208 +0404 +0802 +ENDCHAR +STARTCHAR uni9FC4 +ENCODING 40900 +BBX 15 16 0 -2 +BITMAP +1000 +0BFC +4044 +2244 +0984 +10C4 +6108 +2228 +2510 +0100 +FFFE +0540 +0920 +3118 +C106 +0100 +ENDCHAR +STARTCHAR uni9FC5 +ENCODING 40901 +BBX 15 16 0 -2 +BITMAP +21FC +1020 +03FE +FA22 +09AC +1020 +118C +3820 +5450 +9188 +1626 +11F8 +1008 +10D0 +1020 +1010 +ENDCHAR +STARTCHAR uni9FC6 +ENCODING 40902 +BBX 15 16 0 -2 +BITMAP +4040 +2040 +0040 +F840 +0BFE +1080 +2080 +30FC +6884 +A144 +2148 +2128 +2210 +2228 +2444 +2082 +ENDCHAR +STARTCHAR uni9FC7 +ENCODING 40903 +BBX 15 16 0 -2 +BITMAP +0880 +08F8 +1110 +1220 +35FC +5044 +9044 +17FE +1044 +1044 +13FC +1044 +1040 +1040 +1140 +1080 +ENDCHAR +STARTCHAR uni9FC8 +ENCODING 40904 +BBX 15 16 0 -2 +BITMAP +0800 +09FC +1104 +2104 +4904 +09FC +1124 +3120 +5120 +9110 +1110 +1110 +1208 +1208 +1404 +1802 +ENDCHAR +STARTCHAR uni9FC9 +ENCODING 40905 +BBX 15 16 0 -2 +BITMAP +0800 +0BFE +1040 +2040 +4840 +0840 +13F8 +3048 +5048 +9088 +1088 +1088 +1088 +1088 +17FE +1000 +ENDCHAR +STARTCHAR uni9FCA +ENCODING 40906 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +0820 +2000 +1020 +1020 +8120 +413C +4920 +1120 +1120 +6120 +2120 +27FE +ENDCHAR +STARTCHAR uni9FCB +ENCODING 40907 +BBX 15 16 0 -2 +BITMAP +2040 +17FE +0040 +FBFC +0800 +1BF8 +1608 +3BF8 +5510 +9FFE +1000 +13F8 +1208 +1208 +13F8 +1208 +ENDCHAR +STARTCHAR uni9FCC +ENCODING 40908 +BBX 15 16 0 -2 +BITMAP +0080 +4040 +2FFE +2000 +8000 +43F8 +4A08 +0BF8 +1208 +13F8 +E040 +2248 +2244 +2442 +2942 +0080 +ENDCHAR +STARTCHAR uni9FCD +ENCODING 40909 +BBX 15 16 0 -2 +BITMAP +2080 +2080 +20FC +2108 +2290 +F860 +2198 +2626 +2020 +21FC +3C20 +E220 +43FE +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni9FCE +ENCODING 40910 +BBX 15 15 0 -1 +BITMAP +0010 +0010 +FA10 +2110 +217E +4010 +7810 +4F28 +C928 +4924 +4944 +4942 +7902 +4A80 +447E +ENDCHAR +STARTCHAR uni9FCF +ENCODING 40911 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +3DFE +2020 +41FC +BC20 +1020 +13FE +FC40 +107C +1084 +1148 +1450 +1820 +10D8 +0706 +ENDCHAR +STARTCHAR uni9FD0 +ENCODING 40912 +BBX 15 16 0 -2 +BITMAP +2000 +24FE +7228 +5228 +A0FE +74AA +52AA +53AA +79AE +52C2 +5682 +7AFE +0282 +AA82 +AAFE +0082 +ENDCHAR +STARTCHAR uni9FD1 +ENCODING 40913 +BBX 15 14 0 -1 +BITMAP +47FE +2040 +2040 +0040 +0840 +0840 +13FC +1040 +E040 +2048 +2044 +2044 +2040 +27FE +ENDCHAR +STARTCHAR uni9FD2 +ENCODING 40914 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7FFC +0200 +1FF0 +1010 +1110 +1110 +1110 +1210 +0280 +0460 +1810 +6008 +ENDCHAR +STARTCHAR uni9FD3 +ENCODING 40915 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0820 +7FFC +0400 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +1010 +2008 +ENDCHAR +STARTCHAR uni9FD4 +ENCODING 40916 +BBX 15 16 0 -2 +BITMAP +2000 +23FE +3C08 +21E8 +4128 +7DE8 +9000 +13FE +FC08 +11E8 +1128 +1128 +15E8 +1808 +1028 +0010 +ENDCHAR +STARTCHAR uni9FD5 +ENCODING 40917 +BBX 15 16 0 -2 +BITMAP +2000 +20FC +7C84 +4484 +88A4 +7C94 +5494 +5484 +7FFE +5484 +5484 +7C84 +0104 +1D04 +E214 +4408 +ENDCHAR +STARTCHAR uni9FD6 +ENCODING 40918 +BBX 15 16 0 -2 +BITMAP +0100 +0100 +0280 +0440 +0820 +3018 +CFE6 +0000 +1FF0 +1010 +1010 +1010 +1FF0 +1010 +0000 +FFFE +ENDCHAR +STARTCHAR uni9FD7 +ENCODING 40919 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0440 +0820 +3018 +C806 +0BF0 +0890 +17FE +3090 +53F0 +9080 +1100 +1200 +0000 +FFFE +ENDCHAR +STARTCHAR uni9FD8 +ENCODING 40920 +BBX 15 16 0 -2 +BITMAP +1010 +1F10 +1528 +2528 +2544 +7F44 +A5BA +2500 +2500 +2F7C +2544 +2444 +2444 +2844 +287C +3044 +ENDCHAR +STARTCHAR uni9FD9 +ENCODING 40921 +BBX 15 16 0 -2 +BITMAP +1010 +1F10 +15FE +2510 +257C +7FC4 +A544 +2544 +257C +2F28 +2528 +2428 +2448 +284A +288A +3306 +ENDCHAR +STARTCHAR uni9FDA +ENCODING 40922 +BBX 15 16 0 -2 +BITMAP +2050 +3E50 +2A5C +4A54 +4AF4 +FF48 +4A48 +4A74 +4AD4 +5F62 +4A5C +4854 +4854 +5054 +505C +6054 +ENDCHAR +STARTCHAR uni9FDB +ENCODING 40923 +BBX 15 16 0 -2 +BITMAP +0400 +84FE +5E54 +4492 +05FE +3E92 +4AD6 +51BA +68D6 +CE92 +52D6 +6ABA +44D6 +4C92 +529A +2184 +ENDCHAR +STARTCHAR uni9FDC +ENCODING 40924 +BBX 15 16 0 -2 +BITMAP +4800 +44FE +4454 +4092 +FFFE +4092 +72D6 +52BA +52D6 +CA92 +4AD6 +4ABA +44D6 +4492 +5F9A +C084 +ENDCHAR +STARTCHAR uni9FDD +ENCODING 40925 +BBX 15 16 0 -2 +BITMAP +4000 +5FFE +5554 +5592 +F5FE +5F92 +48D6 +C4BA +FFD6 +C892 +4ED6 +4ABA +4AD6 +5292 +5A9A +6484 +ENDCHAR +STARTCHAR uni9FDE +ENCODING 40926 +BBX 15 16 0 -2 +BITMAP +0200 +E2FE +4254 +4A92 +6BFE +AA92 +AAD6 +AABA +EAD6 +AA92 +2AD6 +2ABA +42D6 +4292 +4A9A +8484 +ENDCHAR +STARTCHAR uni9FDF +ENCODING 40927 +BBX 15 16 0 -2 +BITMAP +1120 +3920 +E120 +253E +2542 +2544 +FD90 +2510 +6554 +7554 +6D52 +A592 +A192 +2110 +2550 +2220 +ENDCHAR +STARTCHAR uni9FE0 +ENCODING 40928 +BBX 15 16 0 -2 +BITMAP +1200 +32FE +E254 +2A92 +2BFE +2A92 +FAD6 +2ABA +6AD6 +7A92 +6AD6 +AABA +A2D6 +2292 +2A9A +2484 +ENDCHAR +STARTCHAR uni9FE1 +ENCODING 40929 +BBX 15 15 0 -2 +BITMAP +FEFE +AA54 +AA92 +FFFE +2492 +2AD6 +5FBA +DAD6 +2F92 +5AD6 +FFBA +0AD6 +AA92 +AF9A +8884 +ENDCHAR +STARTCHAR uni9FE2 +ENCODING 40930 +BBX 15 16 0 -2 +BITMAP +0010 +FF10 +5528 +5528 +7544 +5644 +56BA +7500 +5500 +557C +5544 +7D44 +D644 +1444 +147C +1444 +ENDCHAR +STARTCHAR uni9FE3 +ENCODING 40931 +BBX 15 16 0 -2 +BITMAP +0010 +FF10 +55FE +5510 +757C +5644 +5644 +7544 +557C +5528 +5528 +7D28 +D648 +144A +148A +1506 +ENDCHAR +STARTCHAR uni9FE4 +ENCODING 40932 +BBX 15 16 0 -2 +BITMAP +0050 +FF50 +555C +5554 +75F4 +5648 +5648 +7574 +55D4 +5562 +555C +7D54 +D654 +1454 +145C +1454 +ENDCHAR +STARTCHAR uni9FE5 +ENCODING 40933 +BBX 15 16 0 -2 +BITMAP +4000 +2EFE +EA54 +AA92 +ABFE +EC92 +ACD6 +AABA +EAD6 +9A92 +EAD6 +AABA +9CD6 +B892 +D89A +8884 +ENDCHAR +STARTCHAR uni9FE6 +ENCODING 40934 +BBX 15 16 0 -2 +BITMAP +5144 +5154 +FA54 +5254 +25FE +F91A +AA0A +AAFA +AE0A +FAEA +22AA +22A4 +52B4 +4AAA +4B0A +820A +ENDCHAR +STARTCHAR uni9FE7 +ENCODING 40935 +BBX 15 16 0 -2 +BITMAP +0400 +EEFE +AA54 +BA92 +A4FE +CA92 +D1D6 +AEBA +A4D6 +A492 +BFD6 +C4BA +8ED6 +8492 +9F9A +8084 +ENDCHAR +STARTCHAR uni9FE8 +ENCODING 40936 +BBX 15 15 0 -2 +BITMAP +7EFE +1054 +FE92 +91FE +5692 +10D6 +D6BA +00D6 +7E92 +4AD6 +4ABA +7ED6 +4A92 +4A9A +7E84 +ENDCHAR +STARTCHAR uni9FE9 +ENCODING 40937 +BBX 15 16 0 -2 +BITMAP +2000 +3CFE +2454 +7E92 +D3FE +7E92 +52D6 +7EBA +2AD6 +D592 +7ED6 +42BA +7ED6 +4292 +7E9A +4284 +ENDCHAR +STARTCHAR uni9FEA +ENCODING 40938 +BBX 15 16 0 -2 +BITMAP +2110 +10A0 +17FC +0080 +F148 +16D0 +1168 +16A8 +1124 +16A4 +2840 +47FE +0000 +2444 +2222 +4222 +ENDCHAR +STARTCHAR uni9FEB +ENCODING 40939 +BBX 15 16 0 -2 +BITMAP +2000 +3FFC +4000 +9FF0 +0000 +7FF0 +0810 +7FD0 +5550 +4E50 +7FD0 +4E52 +554A +FFEA +0A06 +F1E2 +ENDCHAR +STARTCHAR uni9FEC +ENCODING 40940 +BBX 16 12 0 0 +BITMAP +7DFF +1111 +1111 +2111 +3D11 +65FF +A511 +2511 +2511 +2511 +3DFF +2101 +ENDCHAR +STARTCHAR uni9FED +ENCODING 40941 +BBX 16 16 0 -2 +BITMAP +1040 +1040 +1C7F +2081 +2112 +7A10 +9010 +1054 +FC52 +1092 +1091 +1111 +1410 +1810 +1050 +0020 +ENDCHAR +STARTCHAR uni9FEE +ENCODING 40942 +BBX 15 16 0 -2 +BITMAP +0080 +3FFE +2000 +2444 +2FFE +2444 +27FC +2000 +27FE +2842 +23FC +2244 +424C +4240 +8040 +0040 +ENDCHAR +STARTCHAR uni9FEF +ENCODING 40943 +BBX 15 15 0 -2 +BITMAP +5080 +7EFE +50AA +952A +384A +D112 +1286 +0C60 +3118 +C926 +0540 +7FFC +0380 +0D60 +711C +ENDCHAR +STARTCHAR uni9FF0 +ENCODING 40944 +BBX 16 16 0 -2 +BITMAP +0108 +2108 +1108 +17DF +8108 +47C8 +545E +17C8 +2448 +27DF +C109 +47C9 +410D +410A +4108 +0108 +ENDCHAR +STARTCHAR uni9FF1 +ENCODING 40945 +BBX 15 13 0 -1 +BITMAP +FDFC +1124 +1124 +1124 +1124 +7DFC +1104 +1100 +1100 +1100 +1D02 +E102 +40FE +ENDCHAR +STARTCHAR uni9FF2 +ENCODING 40946 +BBX 16 15 0 -1 +BITMAP +0044 +FDFF +0044 +0000 +7CFF +4511 +4410 +44FE +7C12 +0012 +4412 +2822 +2E42 +F084 +4108 +ENDCHAR +STARTCHAR uni9FF3 +ENCODING 40947 +BBX 16 16 0 -2 +BITMAP +2044 +2082 +3DE2 +452F +4929 +7DAA +D568 +55E9 +7D2A +55AC +5568 +7D29 +5529 +B229 +2AA7 +0040 +ENDCHAR +STARTCHAR uni9FF4 +ENCODING 40948 +BBX 16 16 0 -2 +BITMAP +1020 +1020 +1E7E +2282 +2544 +7E28 +AA18 +2A24 +3E42 +2A81 +2A30 +3E08 +0004 +0E60 +7010 +2008 +ENDCHAR +STARTCHAR uni9FF5 +ENCODING 40949 +BBX 16 16 0 -2 +BITMAP +2020 +2020 +3C20 +45FE +4820 +7C20 +D420 +55FC +7C00 +5420 +5412 +7D51 +0145 +1A45 +E03C +4000 +ENDCHAR +STARTCHAR uni9FF6 +ENCODING 40950 +BBX 15 16 0 -2 +BITMAP +2040 +2020 +3DF8 +4508 +4908 +7DF8 +D508 +5508 +7DF8 +5544 +5548 +7D30 +0110 +1D48 +E186 +4100 +ENDCHAR +STARTCHAR uni9FF7 +ENCODING 40951 +BBX 14 16 1 -2 +BITMAP +2040 +2020 +3CF8 +4400 +4888 +7C50 +D5FC +5400 +7CF8 +5488 +5488 +7CF8 +0088 +1C88 +E0F8 +4088 +ENDCHAR +STARTCHAR uni9FF8 +ENCODING 40952 +BBX 16 16 0 -2 +BITMAP +2044 +2082 +3DE2 +452F +4929 +7DAA +D568 +55E9 +7D2A +55AC +5568 +7D29 +0129 +1E29 +E2A7 +4040 +ENDCHAR +STARTCHAR uni9FF9 +ENCODING 40953 +BBX 16 16 0 -2 +BITMAP +2020 +2010 +3CFF +4481 +494A +7C28 +D552 +5665 +7CC4 +553C +5410 +7C92 +0092 +1C92 +E0FE +4002 +ENDCHAR +STARTCHAR uni9FFA +ENCODING 40954 +BBX 14 16 0 -2 +BITMAP +1020 +1040 +FEF8 +1088 +7CC8 +10A8 +FE88 +2098 +3C80 +44FC +4804 +A804 +11F4 +2804 +4414 +8008 +ENDCHAR +STARTCHAR uni9FFB +ENCODING 40955 +BBX 16 16 0 -2 +BITMAP +2010 +CE10 +8210 +EEFE +8220 +8248 +FE48 +0088 +92FF +92C9 +DB49 +9249 +DA4D +924A +9308 +D908 +ENDCHAR +STARTCHAR uni9FFC +ENCODING 40956 +BBX 16 16 0 -2 +BITMAP +2040 +CE40 +8240 +EE47 +82F5 +8255 +FE55 +0055 +9255 +9255 +DA55 +9255 +DA95 +92D7 +93A5 +D900 +ENDCHAR +STARTCHAR uni9FFD +ENCODING 40957 +BBX 16 16 0 -2 +BITMAP +0100 +0880 +EFFF +AA22 +B220 +A51E +A500 +A9FE +A280 +A280 +A4FC +A480 +E880 +80FE +0080 +0080 +ENDCHAR +STARTCHAR uni9FFE +ENCODING 40958 +BBX 16 16 0 -2 +BITMAP +0200 +211F +27D1 +2452 +2452 +FFD4 +2452 +2452 +27D2 +2411 +2511 +2C91 +3559 +2616 +4410 +0010 +ENDCHAR +STARTCHAR uni9FFF +ENCODING 40959 +BBX 15 16 0 -2 +BITMAP +0110 +7FFC +0100 +3FF8 +2108 +3FF8 +2108 +3FF8 +2108 +06C0 +1930 +E92E +05C0 +1930 +6108 +0300 +ENDCHAR +STARTCHAR uniA000 +ENCODING 40960 +BBX 11 10 1 0 +BITMAP +2020 +3FE0 +2020 +2020 +2020 +2020 +F820 +2020 +1040 +0F80 +ENDCHAR +STARTCHAR uniA001 +ENCODING 40961 +BBX 11 13 1 0 +BITMAP +0700 +0880 +0000 +2020 +3FE0 +2020 +F820 +2420 +2420 +F820 +2020 +1040 +0F80 +ENDCHAR +STARTCHAR uniA002 +ENCODING 40962 +BBX 11 10 1 0 +BITMAP +2020 +3FE0 +2020 +F820 +2420 +2420 +F820 +2020 +1040 +0F80 +ENDCHAR +STARTCHAR uniA003 +ENCODING 40963 +BBX 11 10 2 0 +BITMAP +0180 +0140 +0120 +0100 +EF00 +1100 +2900 +2900 +1100 +EF00 +ENDCHAR +STARTCHAR uniA004 +ENCODING 40964 +BBX 9 10 3 0 +BITMAP +9C80 +A280 +6300 +3E00 +2200 +2200 +7200 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uniA005 +ENCODING 40965 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +18 +16 +10 +38 +44 +44 +38 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA006 +ENCODING 40966 +BBX 7 10 4 0 +BITMAP +18 +16 +10 +38 +44 +44 +38 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA007 +ENCODING 40967 +BBX 8 10 4 0 +BITMAP +71 +8F +99 +A8 +A8 +A8 +A8 +99 +8F +71 +ENDCHAR +STARTCHAR uniA008 +ENCODING 40968 +BBX 11 10 2 0 +BITMAP +0020 +0020 +0620 +C5A0 +3460 +0C00 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA009 +ENCODING 40969 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +1A +16 +12 +D2 +32 +12 +12 +12 +D2 +32 +ENDCHAR +STARTCHAR uniA00A +ENCODING 40970 +BBX 7 10 4 0 +BITMAP +1A +16 +12 +D2 +32 +12 +12 +12 +D2 +32 +ENDCHAR +STARTCHAR uniA00B +ENCODING 40971 +BBX 9 12 3 0 +BITMAP +0180 +0200 +1A00 +1600 +1200 +D180 +3000 +1000 +1000 +1000 +D000 +3000 +ENDCHAR +STARTCHAR uniA00C +ENCODING 40972 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8080 +8880 +8880 +8880 +8080 +FF80 +8080 +8880 +8880 +8880 +ENDCHAR +STARTCHAR uniA00D +ENCODING 40973 +BBX 9 10 3 0 +BITMAP +8080 +8880 +8880 +8880 +8080 +FF80 +8080 +8880 +8880 +8880 +ENDCHAR +STARTCHAR uniA00E +ENCODING 40974 +BBX 8 11 4 0 +BITMAP +42 +A5 +A5 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uniA00F +ENCODING 40975 +BBX 9 10 3 0 +BITMAP +7F00 +8880 +8880 +7F00 +0800 +3800 +4000 +3800 +4000 +3800 +ENDCHAR +STARTCHAR uniA010 +ENCODING 40976 +BBX 12 13 1 0 +BITMAP +0700 +0880 +0000 +18E0 +1510 +1310 +1110 +1150 +1150 +1150 +9110 +5110 +30E0 +ENDCHAR +STARTCHAR uniA011 +ENCODING 40977 +BBX 12 10 1 0 +BITMAP +18E0 +1510 +1310 +1110 +1150 +1150 +1150 +9110 +5110 +30E0 +ENDCHAR +STARTCHAR uniA012 +ENCODING 40978 +BBX 12 10 1 0 +BITMAP +18E0 +1510 +1310 +1110 +1110 +1110 +1110 +9110 +5110 +30E0 +ENDCHAR +STARTCHAR uniA013 +ENCODING 40979 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0180 +E160 +1100 +2100 +7F00 +2100 +1100 +E100 +0D00 +0300 +ENDCHAR +STARTCHAR uniA014 +ENCODING 40980 +BBX 11 10 2 0 +BITMAP +0180 +E160 +1100 +2100 +7F00 +2100 +1100 +E100 +0D00 +0300 +ENDCHAR +STARTCHAR uniA015 +ENCODING 40981 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +0000 +0000 +2200 +2200 +2200 +2200 +ENDCHAR +STARTCHAR uniA016 +ENCODING 40982 +BBX 7 10 5 0 +BITMAP +70 +88 +88 +AA +9C +9C +AA +88 +88 +70 +ENDCHAR +STARTCHAR uniA017 +ENCODING 40983 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8780 +8800 +9000 +9000 +9000 +FF80 +9000 +9000 +8800 +8780 +ENDCHAR +STARTCHAR uniA018 +ENCODING 40984 +BBX 9 10 3 0 +BITMAP +8780 +8800 +9000 +9000 +9000 +FF80 +9000 +9000 +8800 +8780 +ENDCHAR +STARTCHAR uniA019 +ENCODING 40985 +BBX 7 10 5 0 +BITMAP +C4 +B4 +8C +80 +9E +A0 +FE +A0 +9E +80 +ENDCHAR +STARTCHAR uniA01A +ENCODING 40986 +BBX 11 10 2 0 +BITMAP +7060 +8880 +8900 +8900 +8900 +8FE0 +8900 +8900 +8880 +7060 +ENDCHAR +STARTCHAR uniA01B +ENCODING 40987 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +3E80 +4100 +8280 +8480 +8880 +8880 +9080 +A080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA01C +ENCODING 40988 +BBX 9 10 3 0 +BITMAP +3E80 +4100 +8280 +8480 +8880 +8880 +9080 +A080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA01D +ENCODING 40989 +BBX 9 10 4 0 +BITMAP +7000 +8900 +8880 +8880 +8900 +8E00 +8900 +8880 +8880 +7100 +ENDCHAR +STARTCHAR uniA01E +ENCODING 40990 +BBX 7 10 4 0 +BITMAP +82 +82 +FE +82 +82 +38 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uniA01F +ENCODING 40991 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +4100 +4100 +7F00 +4100 +4100 +0000 +8880 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA020 +ENCODING 40992 +BBX 9 10 3 0 +BITMAP +4100 +4100 +7F00 +4100 +4100 +0000 +8880 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA021 +ENCODING 40993 +BBX 9 10 3 0 +BITMAP +4100 +4100 +7F00 +4100 +4100 +0000 +0000 +2200 +4100 +8080 +ENDCHAR +STARTCHAR uniA022 +ENCODING 40994 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +3E +41 +9D +09 +09 +1D +01 +E1 +99 +86 +ENDCHAR +STARTCHAR uniA023 +ENCODING 40995 +BBX 8 10 4 0 +BITMAP +3E +41 +9D +09 +09 +1D +01 +E1 +99 +86 +ENDCHAR +STARTCHAR uniA024 +ENCODING 40996 +BBX 7 10 4 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uniA025 +ENCODING 40997 +BBX 9 10 3 0 +BITMAP +0780 +B800 +4800 +A400 +8380 +A400 +4800 +B800 +0800 +0780 +ENDCHAR +STARTCHAR uniA026 +ENCODING 40998 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +7C +82 +82 +BA +92 +92 +BA +82 +82 +7C +ENDCHAR +STARTCHAR uniA027 +ENCODING 40999 +BBX 7 10 4 0 +BITMAP +7C +82 +82 +BA +92 +92 +BA +82 +82 +7C +ENDCHAR +STARTCHAR uniA028 +ENCODING 41000 +BBX 9 10 3 0 +BITMAP +FF80 +0800 +0800 +FF80 +0000 +0000 +FF80 +0800 +0800 +FF80 +ENDCHAR +STARTCHAR uniA029 +ENCODING 41001 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +7700 +8880 +8880 +0800 +0800 +0000 +8880 +8880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA02A +ENCODING 41002 +BBX 9 10 3 0 +BITMAP +7700 +8880 +8880 +0800 +0800 +0000 +8880 +8880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA02B +ENCODING 41003 +BBX 7 10 4 0 +BITMAP +FE +10 +92 +54 +38 +38 +54 +92 +10 +FE +ENDCHAR +STARTCHAR uniA02C +ENCODING 41004 +BBX 9 10 3 0 +BITMAP +7F00 +8080 +8080 +8080 +7F00 +0800 +0900 +0900 +0800 +0800 +ENDCHAR +STARTCHAR uniA02D +ENCODING 41005 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +10 +10 +10 +10 +12 +12 +12 +12 +D2 +30 +ENDCHAR +STARTCHAR uniA02E +ENCODING 41006 +BBX 7 10 4 0 +BITMAP +10 +10 +10 +10 +12 +12 +12 +12 +D2 +30 +ENDCHAR +STARTCHAR uniA02F +ENCODING 41007 +BBX 6 10 5 0 +BITMAP +3C +40 +9C +A0 +A0 +A0 +A0 +9C +40 +3C +ENDCHAR +STARTCHAR uniA030 +ENCODING 41008 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +86 +88 +88 +BE +88 +BE +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA031 +ENCODING 41009 +BBX 7 10 4 0 +BITMAP +86 +88 +88 +BE +88 +BE +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA032 +ENCODING 41010 +BBX 9 10 3 0 +BITMAP +1800 +1600 +1000 +1C80 +1280 +1100 +1100 +1280 +DC80 +3000 +ENDCHAR +STARTCHAR uniA033 +ENCODING 41011 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +18 +16 +10 +16 +18 +16 +11 +16 +D8 +36 +ENDCHAR +STARTCHAR uniA034 +ENCODING 41012 +BBX 8 10 4 0 +BITMAP +18 +16 +10 +16 +18 +16 +11 +16 +D8 +36 +ENDCHAR +STARTCHAR uniA035 +ENCODING 41013 +BBX 10 10 2 0 +BITMAP +3300 +2A80 +2640 +2200 +2200 +7200 +2200 +2200 +8A00 +7200 +ENDCHAR +STARTCHAR uniA036 +ENCODING 41014 +BBX 13 13 1 0 +BITMAP +0700 +0880 +0000 +0060 +0050 +0048 +3FC0 +4440 +9540 +8440 +9540 +4440 +3FC0 +ENDCHAR +STARTCHAR uniA037 +ENCODING 41015 +BBX 13 10 1 0 +BITMAP +0060 +0050 +0048 +3FC0 +4440 +9540 +8440 +9540 +4440 +3FC0 +ENDCHAR +STARTCHAR uniA038 +ENCODING 41016 +BBX 11 10 2 0 +BITMAP +0180 +0140 +0120 +3F00 +4100 +FF00 +8100 +FF00 +4100 +3F00 +ENDCHAR +STARTCHAR uniA039 +ENCODING 41017 +BBX 8 13 3 0 +BITMAP +1C +22 +00 +0E +11 +91 +91 +97 +B9 +D1 +11 +11 +0E +ENDCHAR +STARTCHAR uniA03A +ENCODING 41018 +BBX 8 10 3 0 +BITMAP +0E +11 +91 +91 +97 +B9 +D1 +11 +11 +0E +ENDCHAR +STARTCHAR uniA03B +ENCODING 41019 +BBX 9 9 3 0 +BITMAP +8800 +8800 +5280 +5280 +2280 +5280 +5280 +8800 +8800 +ENDCHAR +STARTCHAR uniA03C +ENCODING 41020 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +7000 +8800 +8800 +8A80 +8A80 +FA80 +8A80 +8A80 +8800 +7000 +ENDCHAR +STARTCHAR uniA03D +ENCODING 41021 +BBX 9 10 3 0 +BITMAP +7000 +8800 +8800 +8A80 +8A80 +FA80 +8A80 +8A80 +8800 +7000 +ENDCHAR +STARTCHAR uniA03E +ENCODING 41022 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8880 +8880 +4100 +3E00 +0800 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA03F +ENCODING 41023 +BBX 9 9 3 0 +BITMAP +8080 +8080 +8080 +8080 +FF80 +8080 +8080 +8080 +8080 +ENDCHAR +STARTCHAR uniA040 +ENCODING 41024 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +8880 +FF80 +8880 +8880 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA041 +ENCODING 41025 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +FF80 +8880 +8880 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA042 +ENCODING 41026 +BBX 8 10 4 0 +BITMAP +88 +89 +89 +89 +8F +89 +89 +89 +88 +70 +ENDCHAR +STARTCHAR uniA043 +ENCODING 41027 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +7F +80 +FF +80 +7F +08 +AA +AA +AA +08 +ENDCHAR +STARTCHAR uniA044 +ENCODING 41028 +BBX 8 10 4 0 +BITMAP +7F +80 +FF +80 +7F +08 +AA +AA +AA +08 +ENDCHAR +STARTCHAR uniA045 +ENCODING 41029 +BBX 8 10 4 0 +BITMAP +7F +91 +FF +91 +7F +01 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uniA046 +ENCODING 41030 +BBX 9 10 3 0 +BITMAP +3800 +4500 +4480 +4480 +E500 +4600 +E500 +4480 +4480 +3900 +ENDCHAR +STARTCHAR uniA047 +ENCODING 41031 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +92 +92 +92 +54 +38 +00 +FE +00 +00 +FE +ENDCHAR +STARTCHAR uniA048 +ENCODING 41032 +BBX 7 10 4 0 +BITMAP +92 +92 +92 +54 +38 +00 +FE +00 +00 +FE +ENDCHAR +STARTCHAR uniA049 +ENCODING 41033 +BBX 8 10 4 0 +BITMAP +7F +80 +FF +80 +7F +08 +7F +08 +7F +08 +ENDCHAR +STARTCHAR uniA04A +ENCODING 41034 +BBX 6 10 5 0 +BITMAP +C4 +B4 +8C +80 +80 +80 +80 +8C +B4 +C4 +ENDCHAR +STARTCHAR uniA04B +ENCODING 41035 +BBX 8 13 3 0 +BITMAP +1C +22 +00 +7F +81 +81 +7F +81 +81 +7F +81 +81 +7F +ENDCHAR +STARTCHAR uniA04C +ENCODING 41036 +BBX 8 10 4 0 +BITMAP +7F +81 +81 +7F +81 +81 +7F +81 +81 +7F +ENDCHAR +STARTCHAR uniA04D +ENCODING 41037 +BBX 8 11 4 0 +BITMAP +0C +0B +78 +88 +A8 +A8 +88 +78 +08 +68 +18 +ENDCHAR +STARTCHAR uniA04E +ENCODING 41038 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +7000 +8800 +8A80 +AA80 +AF80 +AA80 +8A80 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA04F +ENCODING 41039 +BBX 9 10 3 0 +BITMAP +7000 +8800 +8A80 +AA80 +AF80 +AA80 +8A80 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA050 +ENCODING 41040 +BBX 9 10 3 0 +BITMAP +0600 +0500 +0480 +3C00 +4400 +8400 +8400 +8400 +4400 +3C00 +ENDCHAR +STARTCHAR uniA051 +ENCODING 41041 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0000 +C060 +A0A0 +9120 +8AA0 +84A0 +8AA0 +9120 +A0A0 +C060 +ENDCHAR +STARTCHAR uniA052 +ENCODING 41042 +BBX 11 9 2 0 +BITMAP +C060 +A0A0 +9120 +8AA0 +84A0 +8AA0 +9120 +A0A0 +C060 +ENDCHAR +STARTCHAR uniA053 +ENCODING 41043 +BBX 10 10 2 0 +BITMAP +3300 +2A80 +2640 +2200 +7280 +2280 +2280 +2280 +8A00 +7200 +ENDCHAR +STARTCHAR uniA054 +ENCODING 41044 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +4600 +4500 +4480 +0400 +3C00 +4480 +8480 +8480 +4400 +3C00 +ENDCHAR +STARTCHAR uniA055 +ENCODING 41045 +BBX 9 10 3 0 +BITMAP +4600 +4500 +4480 +0400 +3C00 +4480 +8480 +8480 +4400 +3C00 +ENDCHAR +STARTCHAR uniA056 +ENCODING 41046 +BBX 9 10 3 0 +BITMAP +1C00 +2200 +3E00 +2200 +3E00 +2200 +1C00 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA057 +ENCODING 41047 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0800 +8880 +4900 +2A00 +1C00 +1C00 +2A00 +4900 +8880 +0800 +ENDCHAR +STARTCHAR uniA058 +ENCODING 41048 +BBX 9 10 3 0 +BITMAP +0800 +8880 +4900 +2A00 +1C00 +1C00 +2A00 +4900 +8880 +0800 +ENDCHAR +STARTCHAR uniA059 +ENCODING 41049 +BBX 11 10 2 0 +BITMAP +DF60 +2080 +5140 +4A40 +4A40 +4A40 +4A40 +5140 +2080 +DF60 +ENDCHAR +STARTCHAR uniA05A +ENCODING 41050 +BBX 9 11 3 -1 +BITMAP +3E00 +4100 +4100 +4100 +3E00 +8880 +7700 +0000 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA05B +ENCODING 41051 +BBX 12 13 1 0 +BITMAP +0700 +0880 +0000 +0000 +00F0 +0100 +1A30 +1640 +12F0 +1240 +1230 +D100 +30F0 +ENDCHAR +STARTCHAR uniA05C +ENCODING 41052 +BBX 12 10 2 0 +BITMAP +00F0 +0100 +0230 +1A40 +16F0 +1240 +1230 +1100 +D0F0 +3000 +ENDCHAR +STARTCHAR uniA05D +ENCODING 41053 +BBX 10 10 3 0 +BITMAP +C0C0 +2100 +1200 +1200 +1200 +7F80 +1200 +1200 +2100 +C0C0 +ENDCHAR +STARTCHAR uniA05E +ENCODING 41054 +BBX 12 9 2 0 +BITMAP +C030 +3FC0 +1080 +0900 +0F00 +0900 +1080 +3FC0 +C030 +ENDCHAR +STARTCHAR uniA05F +ENCODING 41055 +BBX 14 13 1 0 +BITMAP +0700 +0880 +0000 +0000 +080C +0414 +8E24 +5544 +2484 +5544 +8E24 +0414 +080C +ENDCHAR +STARTCHAR uniA060 +ENCODING 41056 +BBX 14 9 1 0 +BITMAP +080C +0414 +8E24 +5544 +2484 +5544 +8E24 +0414 +080C +ENDCHAR +STARTCHAR uniA061 +ENCODING 41057 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +0000 +0000 +7F00 +0000 +0000 +FF80 +ENDCHAR +STARTCHAR uniA062 +ENCODING 41058 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +CA +AA +9A +02 +FA +02 +FA +02 +1A +06 +ENDCHAR +STARTCHAR uniA063 +ENCODING 41059 +BBX 7 10 4 0 +BITMAP +CA +AA +9A +02 +FA +02 +FA +02 +1A +06 +ENDCHAR +STARTCHAR uniA064 +ENCODING 41060 +BBX 9 10 3 0 +BITMAP +1C00 +A280 +A280 +A280 +2200 +2200 +A280 +A280 +A280 +1C00 +ENDCHAR +STARTCHAR uniA065 +ENCODING 41061 +BBX 9 10 3 0 +BITMAP +0400 +0400 +3C80 +4480 +8480 +8480 +4480 +3C80 +0400 +0400 +ENDCHAR +STARTCHAR uniA066 +ENCODING 41062 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +10 +92 +54 +38 +54 +92 +10 +FE +10 +FE +ENDCHAR +STARTCHAR uniA067 +ENCODING 41063 +BBX 7 10 4 0 +BITMAP +10 +92 +54 +38 +54 +92 +10 +FE +10 +FE +ENDCHAR +STARTCHAR uniA068 +ENCODING 41064 +BBX 9 10 3 0 +BITMAP +7700 +8880 +0800 +3E00 +4100 +8880 +8880 +0800 +4100 +3E00 +ENDCHAR +STARTCHAR uniA069 +ENCODING 41065 +BBX 10 13 2 0 +BITMAP +0E00 +1100 +0000 +1900 +1500 +D340 +B040 +8C40 +8340 +80C0 +1E00 +0000 +1E00 +ENDCHAR +STARTCHAR uniA06A +ENCODING 41066 +BBX 10 10 3 0 +BITMAP +1900 +1500 +D340 +B040 +8C40 +8340 +80C0 +1E00 +0000 +1E00 +ENDCHAR +STARTCHAR uniA06B +ENCODING 41067 +BBX 12 10 2 0 +BITMAP +C500 +A510 +9520 +8D40 +0180 +FD00 +0100 +0900 +0500 +0300 +ENDCHAR +STARTCHAR uniA06C +ENCODING 41068 +BBX 12 10 2 0 +BITMAP +C130 +2140 +2140 +C130 +0D00 +0B00 +C830 +2840 +2840 +C830 +ENDCHAR +STARTCHAR uniA06D +ENCODING 41069 +BBX 10 13 2 0 +BITMAP +0E00 +1100 +0000 +0040 +0640 +0540 +34C0 +2C00 +2480 +2480 +A480 +6400 +0400 +ENDCHAR +STARTCHAR uniA06E +ENCODING 41070 +BBX 10 10 3 0 +BITMAP +0040 +0640 +0540 +34C0 +2C00 +2480 +2480 +A480 +6400 +0400 +ENDCHAR +STARTCHAR uniA06F +ENCODING 41071 +BBX 10 10 3 0 +BITMAP +0600 +C580 +B440 +8C00 +0480 +0480 +C480 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA070 +ENCODING 41072 +BBX 8 13 3 0 +BITMAP +1C +22 +00 +01 +01 +C1 +B1 +8D +83 +0E +11 +15 +15 +ENDCHAR +STARTCHAR uniA071 +ENCODING 41073 +BBX 8 10 3 0 +BITMAP +01 +01 +C1 +B1 +8D +83 +0E +11 +15 +15 +ENDCHAR +STARTCHAR uniA072 +ENCODING 41074 +BBX 9 10 3 0 +BITMAP +3300 +2E80 +2200 +2A00 +2A00 +2200 +3E00 +2200 +AA00 +6600 +ENDCHAR +STARTCHAR uniA073 +ENCODING 41075 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0C80 +0B80 +0880 +0800 +0800 +0800 +0800 +8800 +E800 +9800 +ENDCHAR +STARTCHAR uniA074 +ENCODING 41076 +BBX 9 10 3 0 +BITMAP +0C80 +0B80 +0880 +0800 +0800 +0800 +0800 +8800 +E800 +9800 +ENDCHAR +STARTCHAR uniA075 +ENCODING 41077 +BBX 7 10 4 0 +BITMAP +18 +16 +D0 +30 +10 +10 +18 +16 +D0 +30 +ENDCHAR +STARTCHAR uniA076 +ENCODING 41078 +BBX 8 10 4 0 +BITMAP +30 +AC +A3 +A0 +2A +2A +BE +AA +AA +20 +ENDCHAR +STARTCHAR uniA077 +ENCODING 41079 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +7C +92 +FE +92 +7C +10 +14 +15 +11 +0E +ENDCHAR +STARTCHAR uniA078 +ENCODING 41080 +BBX 8 10 4 0 +BITMAP +7C +92 +FE +92 +7C +10 +14 +15 +11 +0E +ENDCHAR +STARTCHAR uniA079 +ENCODING 41081 +BBX 10 10 3 0 +BITMAP +C300 +B280 +8E40 +8200 +8200 +8F80 +8200 +8F80 +8200 +8200 +ENDCHAR +STARTCHAR uniA07A +ENCODING 41082 +BBX 9 13 3 0 +BITMAP +3800 +4400 +0000 +FE00 +1100 +1080 +1000 +FE00 +1000 +1000 +FE00 +1000 +1000 +ENDCHAR +STARTCHAR uniA07B +ENCODING 41083 +BBX 9 10 3 0 +BITMAP +FE00 +1100 +1080 +1000 +FE00 +1000 +1000 +FE00 +1000 +1000 +ENDCHAR +STARTCHAR uniA07C +ENCODING 41084 +BBX 7 10 4 0 +BITMAP +10 +10 +FE +10 +10 +10 +10 +FE +10 +10 +ENDCHAR +STARTCHAR uniA07D +ENCODING 41085 +BBX 12 10 2 0 +BITMAP +3800 +4450 +4450 +8210 +83F0 +8210 +8250 +9250 +9200 +6C00 +ENDCHAR +STARTCHAR uniA07E +ENCODING 41086 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0000 +2200 +2200 +FF80 +1400 +0800 +1400 +FF80 +2200 +2200 +ENDCHAR +STARTCHAR uniA07F +ENCODING 41087 +BBX 9 9 3 0 +BITMAP +2200 +2200 +FF80 +1400 +0800 +1400 +FF80 +2200 +2200 +ENDCHAR +STARTCHAR uniA080 +ENCODING 41088 +BBX 9 11 3 0 +BITMAP +8080 +A280 +A280 +9480 +9480 +8880 +9480 +9480 +A280 +A280 +8080 +ENDCHAR +STARTCHAR uniA081 +ENCODING 41089 +BBX 11 10 2 0 +BITMAP +0E20 +09A0 +3860 +4900 +8900 +8900 +8900 +0860 +09A0 +0E20 +ENDCHAR +STARTCHAR uniA082 +ENCODING 41090 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +7700 +0000 +0800 +0800 +3E00 +0800 +0800 +8080 +7F00 +ENDCHAR +STARTCHAR uniA083 +ENCODING 41091 +BBX 9 11 3 0 +BITMAP +8880 +8880 +7700 +0000 +0800 +0800 +3E00 +0800 +0800 +8080 +7F00 +ENDCHAR +STARTCHAR uniA084 +ENCODING 41092 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +0000 +0800 +0800 +8880 +8080 +7F00 +ENDCHAR +STARTCHAR uniA085 +ENCODING 41093 +BBX 8 10 4 0 +BITMAP +3D +53 +91 +90 +9F +90 +90 +91 +52 +3C +ENDCHAR +STARTCHAR uniA086 +ENCODING 41094 +BBX 8 13 3 0 +BITMAP +1C +22 +00 +4E +51 +11 +71 +91 +91 +71 +11 +51 +4E +ENDCHAR +STARTCHAR uniA087 +ENCODING 41095 +BBX 8 10 3 0 +BITMAP +4E +51 +11 +71 +91 +91 +71 +11 +51 +4E +ENDCHAR +STARTCHAR uniA088 +ENCODING 41096 +BBX 9 10 3 0 +BITMAP +0800 +3E00 +4900 +8880 +8A80 +8A80 +8880 +4900 +3E00 +0800 +ENDCHAR +STARTCHAR uniA089 +ENCODING 41097 +BBX 13 13 1 0 +BITMAP +0700 +0880 +0000 +7070 +8A88 +8A88 +8888 +8888 +8F88 +8888 +8888 +8A88 +7270 +ENDCHAR +STARTCHAR uniA08A +ENCODING 41098 +BBX 13 10 1 0 +BITMAP +7070 +8A88 +8A88 +8888 +8888 +8F88 +8888 +8888 +8A88 +7270 +ENDCHAR +STARTCHAR uniA08B +ENCODING 41099 +BBX 8 11 4 0 +BITMAP +77 +88 +9A +AA +A8 +BE +A8 +AA +9A +88 +77 +ENDCHAR +STARTCHAR uniA08C +ENCODING 41100 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8A80 +8A80 +8880 +8A80 +FA80 +8880 +8A80 +8A80 +4900 +3E00 +ENDCHAR +STARTCHAR uniA08D +ENCODING 41101 +BBX 9 10 3 0 +BITMAP +8A80 +8A80 +8880 +8A80 +FA80 +8880 +8A80 +8A80 +4900 +3E00 +ENDCHAR +STARTCHAR uniA08E +ENCODING 41102 +BBX 14 10 1 0 +BITMAP +C6C0 +28B0 +268C +2880 +C680 +0080 +1880 +1680 +1180 +1000 +ENDCHAR +STARTCHAR uniA08F +ENCODING 41103 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +C460 +A4A0 +9520 +8E20 +FFE0 +8E20 +9520 +A4A0 +C460 +0400 +ENDCHAR +STARTCHAR uniA090 +ENCODING 41104 +BBX 11 11 2 0 +BITMAP +0400 +C460 +A4A0 +9520 +8E20 +FFE0 +8E20 +9520 +A4A0 +C460 +0400 +ENDCHAR +STARTCHAR uniA091 +ENCODING 41105 +BBX 7 10 4 0 +BITMAP +18 +16 +10 +92 +92 +92 +92 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA092 +ENCODING 41106 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +4900 +3E00 +0800 +FF80 +0800 +3E00 +4900 +8880 +8880 +ENDCHAR +STARTCHAR uniA093 +ENCODING 41107 +BBX 9 11 3 0 +BITMAP +8880 +8880 +4900 +3E00 +0800 +FF80 +0800 +3E00 +4900 +8880 +8880 +ENDCHAR +STARTCHAR uniA094 +ENCODING 41108 +BBX 9 10 3 0 +BITMAP +3E00 +4900 +8880 +9480 +9480 +9480 +9C80 +A280 +4100 +3E00 +ENDCHAR +STARTCHAR uniA095 +ENCODING 41109 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +AA80 +AA80 +8880 +4900 +3E00 +0800 +0800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA096 +ENCODING 41110 +BBX 9 10 3 0 +BITMAP +AA80 +AA80 +8880 +4900 +3E00 +0800 +0800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA097 +ENCODING 41111 +BBX 8 10 4 0 +BITMAP +01 +19 +15 +13 +10 +92 +92 +92 +10 +10 +ENDCHAR +STARTCHAR uniA098 +ENCODING 41112 +BBX 11 10 2 0 +BITMAP +1800 +1600 +1000 +1000 +1600 +1080 +1C40 +1200 +D120 +3120 +ENDCHAR +STARTCHAR uniA099 +ENCODING 41113 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +0000 +0040 +C040 +B040 +8C40 +8340 +80E0 +8110 +0110 +0110 +00E0 +ENDCHAR +STARTCHAR uniA09A +ENCODING 41114 +BBX 12 10 2 0 +BITMAP +0040 +C040 +B040 +8C40 +8340 +80E0 +8110 +0110 +0110 +00E0 +ENDCHAR +STARTCHAR uniA09B +ENCODING 41115 +BBX 12 10 2 0 +BITMAP +0300 +C2C0 +2230 +1200 +1200 +FE00 +1200 +1200 +2200 +C200 +ENDCHAR +STARTCHAR uniA09C +ENCODING 41116 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +1200 +1200 +9240 +5280 +2300 +0200 +6200 +5A00 +4600 +4000 +ENDCHAR +STARTCHAR uniA09D +ENCODING 41117 +BBX 10 10 3 0 +BITMAP +1200 +1200 +9240 +5280 +2300 +0200 +6200 +5A00 +4600 +4000 +ENDCHAR +STARTCHAR uniA09E +ENCODING 41118 +BBX 11 10 2 0 +BITMAP +2600 +2580 +2460 +2400 +0600 +0580 +C460 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA09F +ENCODING 41119 +BBX 10 10 3 0 +BITMAP +0300 +0280 +0240 +3E00 +4200 +9200 +AA00 +9200 +4200 +3E00 +ENDCHAR +STARTCHAR uniA0A0 +ENCODING 41120 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0600 +4580 +4460 +0400 +3E20 +4520 +9480 +9400 +4400 +3C00 +ENDCHAR +STARTCHAR uniA0A1 +ENCODING 41121 +BBX 11 10 2 0 +BITMAP +0600 +4580 +4460 +0400 +3E20 +4520 +9480 +9400 +4400 +3C00 +ENDCHAR +STARTCHAR uniA0A2 +ENCODING 41122 +BBX 7 10 4 0 +BITMAP +3C +42 +40 +20 +18 +04 +12 +2A +92 +7C +ENDCHAR +STARTCHAR uniA0A3 +ENCODING 41123 +BBX 7 11 4 0 +BITMAP +FE +82 +44 +28 +2A +12 +2A +28 +44 +82 +FE +ENDCHAR +STARTCHAR uniA0A4 +ENCODING 41124 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +02 +92 +92 +02 +92 +92 +02 +62 +1A +06 +ENDCHAR +STARTCHAR uniA0A5 +ENCODING 41125 +BBX 7 10 4 0 +BITMAP +02 +92 +92 +02 +92 +92 +02 +62 +1A +06 +ENDCHAR +STARTCHAR uniA0A6 +ENCODING 41126 +BBX 9 10 3 0 +BITMAP +3E00 +4900 +AA80 +AA80 +8880 +8880 +AA80 +AA80 +4900 +3E00 +ENDCHAR +STARTCHAR uniA0A7 +ENCODING 41127 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +8080 +4100 +3E00 +0000 +4100 +4100 +4100 +4100 +ENDCHAR +STARTCHAR uniA0A8 +ENCODING 41128 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8080 +4100 +3E00 +0000 +4100 +4100 +4100 +4100 +ENDCHAR +STARTCHAR uniA0A9 +ENCODING 41129 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +10 +10 +12 +92 +92 +90 +1C +12 +D1 +31 +ENDCHAR +STARTCHAR uniA0AA +ENCODING 41130 +BBX 8 10 4 0 +BITMAP +10 +10 +12 +92 +92 +90 +1C +12 +D1 +31 +ENDCHAR +STARTCHAR uniA0AB +ENCODING 41131 +BBX 8 11 4 0 +BITMAP +85 +85 +01 +85 +85 +01 +85 +85 +31 +2D +23 +ENDCHAR +STARTCHAR uniA0AC +ENCODING 41132 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +3E00 +4900 +7F00 +4900 +3E00 +0800 +2A00 +AA80 +8880 +7700 +ENDCHAR +STARTCHAR uniA0AD +ENCODING 41133 +BBX 9 10 3 0 +BITMAP +3E00 +4900 +7F00 +4900 +3E00 +0800 +2A00 +AA80 +8880 +7700 +ENDCHAR +STARTCHAR uniA0AE +ENCODING 41134 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +B680 +9480 +8880 +BE80 +8080 +9C80 +4100 +3E00 +ENDCHAR +STARTCHAR uniA0AF +ENCODING 41135 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +1880 +1680 +1180 +1000 +1180 +1600 +1800 +9600 +5180 +3000 +ENDCHAR +STARTCHAR uniA0B0 +ENCODING 41136 +BBX 9 10 3 0 +BITMAP +1880 +1680 +1180 +1000 +1180 +1600 +1800 +9600 +5180 +3000 +ENDCHAR +STARTCHAR uniA0B1 +ENCODING 41137 +BBX 10 11 3 0 +BITMAP +0640 +0540 +04C0 +0400 +7FC0 +0400 +7FC0 +0400 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA0B2 +ENCODING 41138 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +1F00 +2080 +5140 +8A20 +84A0 +84A0 +8A20 +5140 +2080 +1F00 +ENDCHAR +STARTCHAR uniA0B3 +ENCODING 41139 +BBX 11 10 2 0 +BITMAP +1F00 +2080 +5140 +8A20 +84A0 +84A0 +8A20 +5140 +2080 +1F00 +ENDCHAR +STARTCHAR uniA0B4 +ENCODING 41140 +BBX 10 10 3 0 +BITMAP +0040 +0640 +0540 +84C0 +8400 +8480 +0480 +C480 +3400 +0C00 +ENDCHAR +STARTCHAR uniA0B5 +ENCODING 41141 +BBX 10 10 3 0 +BITMAP +C300 +BA80 +9640 +9200 +9200 +9200 +FE00 +9200 +9200 +9200 +ENDCHAR +STARTCHAR uniA0B6 +ENCODING 41142 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +1C00 +2200 +2200 +2200 +2200 +FF80 +2200 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uniA0B7 +ENCODING 41143 +BBX 9 10 3 0 +BITMAP +1C00 +2200 +2200 +2200 +2200 +FF80 +2200 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uniA0B8 +ENCODING 41144 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +0000 +0800 +3E00 +0800 +3E00 +0800 +ENDCHAR +STARTCHAR uniA0B9 +ENCODING 41145 +BBX 9 11 3 0 +BITMAP +9080 +8880 +8480 +9080 +8880 +8480 +9080 +8880 +8480 +4100 +3E00 +ENDCHAR +STARTCHAR uniA0BA +ENCODING 41146 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0600 +3580 +2C00 +2600 +2580 +A400 +6600 +0580 +3400 +0C00 +ENDCHAR +STARTCHAR uniA0BB +ENCODING 41147 +BBX 9 10 3 0 +BITMAP +0600 +3580 +2C00 +2600 +2580 +A400 +6600 +0580 +3400 +0C00 +ENDCHAR +STARTCHAR uniA0BC +ENCODING 41148 +BBX 12 10 2 0 +BITMAP +18E0 +1510 +1310 +1150 +7D50 +1150 +7D50 +1110 +D110 +30E0 +ENDCHAR +STARTCHAR uniA0BD +ENCODING 41149 +BBX 9 10 3 0 +BITMAP +0600 +0500 +0480 +0400 +3C00 +4400 +9400 +9400 +4400 +3C00 +ENDCHAR +STARTCHAR uniA0BE +ENCODING 41150 +BBX 9 13 4 0 +BITMAP +3800 +4400 +0000 +1800 +1600 +1180 +1C00 +1200 +1C00 +1000 +7C00 +9200 +9200 +ENDCHAR +STARTCHAR uniA0BF +ENCODING 41151 +BBX 9 10 4 0 +BITMAP +1800 +1600 +1180 +1C00 +1200 +1C00 +1000 +7C00 +9200 +9200 +ENDCHAR +STARTCHAR uniA0C0 +ENCODING 41152 +BBX 8 10 4 0 +BITMAP +3C +42 +81 +01 +01 +01 +01 +E1 +99 +86 +ENDCHAR +STARTCHAR uniA0C1 +ENCODING 41153 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +0000 +0400 +0460 +0490 +0490 +3F90 +0490 +0490 +C460 +3400 +0C00 +ENDCHAR +STARTCHAR uniA0C2 +ENCODING 41154 +BBX 12 10 2 0 +BITMAP +0400 +0460 +0490 +0490 +3F90 +0490 +0490 +C460 +3400 +0C00 +ENDCHAR +STARTCHAR uniA0C3 +ENCODING 41155 +BBX 10 10 3 0 +BITMAP +0480 +0440 +5440 +5480 +5700 +0480 +0440 +C440 +3480 +0C00 +ENDCHAR +STARTCHAR uniA0C4 +ENCODING 41156 +BBX 9 13 2 0 +BITMAP +0E00 +1100 +0000 +1080 +1080 +1080 +1080 +1F80 +1080 +1080 +9080 +5080 +3080 +ENDCHAR +STARTCHAR uniA0C5 +ENCODING 41157 +BBX 9 10 3 0 +BITMAP +1080 +1080 +1080 +1080 +1F80 +1080 +1080 +9080 +5080 +3080 +ENDCHAR +STARTCHAR uniA0C6 +ENCODING 41158 +BBX 10 10 3 0 +BITMAP +1C40 +2280 +1F00 +0200 +0F80 +1240 +0F80 +C200 +3200 +0C00 +ENDCHAR +STARTCHAR uniA0C7 +ENCODING 41159 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0400 +0400 +4780 +4400 +4400 +0400 +0780 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA0C8 +ENCODING 41160 +BBX 9 10 3 0 +BITMAP +0400 +0400 +4780 +4400 +4400 +0400 +0780 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA0C9 +ENCODING 41161 +BBX 8 10 4 0 +BITMAP +C2 +B2 +8E +80 +F7 +88 +94 +88 +F7 +80 +ENDCHAR +STARTCHAR uniA0CA +ENCODING 41162 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8080 +8080 +8080 +4100 +3E00 +0000 +4100 +4100 +4100 +4100 +ENDCHAR +STARTCHAR uniA0CB +ENCODING 41163 +BBX 9 10 3 0 +BITMAP +8080 +8080 +8080 +4100 +3E00 +0000 +4100 +4100 +4100 +4100 +ENDCHAR +STARTCHAR uniA0CC +ENCODING 41164 +BBX 8 10 4 0 +BITMAP +20 +22 +22 +22 +20 +FF +20 +22 +22 +22 +ENDCHAR +STARTCHAR uniA0CD +ENCODING 41165 +BBX 9 10 3 0 +BITMAP +1C00 +2200 +2200 +F780 +4100 +F780 +4100 +4900 +4900 +3600 +ENDCHAR +STARTCHAR uniA0CE +ENCODING 41166 +BBX 7 13 5 0 +BITMAP +70 +88 +00 +18 +16 +90 +F0 +90 +10 +10 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA0CF +ENCODING 41167 +BBX 7 10 5 0 +BITMAP +30 +16 +90 +F0 +90 +10 +10 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA0D0 +ENCODING 41168 +BBX 8 10 4 0 +BITMAP +0C +0B +88 +F8 +88 +08 +08 +E8 +98 +80 +ENDCHAR +STARTCHAR uniA0D1 +ENCODING 41169 +BBX 13 11 1 0 +BITMAP +1240 +1560 +1558 +1240 +1040 +1FC0 +1040 +1240 +1540 +D540 +3240 +ENDCHAR +STARTCHAR uniA0D2 +ENCODING 41170 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +C040 +B040 +8C40 +8340 +80C0 +0A00 +4A40 +4A40 +2080 +1F00 +ENDCHAR +STARTCHAR uniA0D3 +ENCODING 41171 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8340 +80C0 +0A00 +4A40 +4A40 +2080 +1F00 +ENDCHAR +STARTCHAR uniA0D4 +ENCODING 41172 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8340 +80C0 +1100 +5540 +4440 +2080 +1F00 +ENDCHAR +STARTCHAR uniA0D5 +ENCODING 41173 +BBX 8 13 3 0 +BITMAP +1C +22 +00 +09 +05 +C7 +29 +11 +11 +29 +C7 +05 +09 +ENDCHAR +STARTCHAR uniA0D6 +ENCODING 41174 +BBX 8 10 4 0 +BITMAP +09 +05 +C7 +29 +11 +11 +29 +C7 +05 +09 +ENDCHAR +STARTCHAR uniA0D7 +ENCODING 41175 +BBX 9 10 3 0 +BITMAP +4900 +2900 +3900 +4800 +8F80 +8800 +4900 +3900 +2900 +4800 +ENDCHAR +STARTCHAR uniA0D8 +ENCODING 41176 +BBX 9 10 3 0 +BITMAP +1800 +9600 +9180 +9000 +1100 +1100 +9100 +9000 +9000 +1000 +ENDCHAR +STARTCHAR uniA0D9 +ENCODING 41177 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +2080 +A0A0 +A0A0 +A0A0 +60C0 +2080 +3F80 +2080 +2080 +2080 +ENDCHAR +STARTCHAR uniA0DA +ENCODING 41178 +BBX 11 10 2 0 +BITMAP +2080 +A0A0 +A0A0 +A0A0 +60C0 +2080 +3F80 +2080 +2080 +2080 +ENDCHAR +STARTCHAR uniA0DB +ENCODING 41179 +BBX 9 9 3 0 +BITMAP +1200 +1200 +C080 +B300 +8C00 +B300 +C080 +1200 +1200 +ENDCHAR +STARTCHAR uniA0DC +ENCODING 41180 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0020 +0620 +E5A0 +1460 +8C00 +8C00 +1400 +E400 +0400 +0400 +ENDCHAR +STARTCHAR uniA0DD +ENCODING 41181 +BBX 11 10 2 0 +BITMAP +0020 +0620 +E5A0 +1460 +8C00 +8C00 +1400 +E400 +0400 +0400 +ENDCHAR +STARTCHAR uniA0DE +ENCODING 41182 +BBX 9 10 3 0 +BITMAP +0480 +0500 +0600 +0480 +0500 +0600 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA0DF +ENCODING 41183 +BBX 10 13 2 0 +BITMAP +0E00 +1100 +0000 +4440 +4440 +5440 +2480 +5F00 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA0E0 +ENCODING 41184 +BBX 10 10 2 0 +BITMAP +4440 +4440 +5440 +2480 +5F00 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA0E1 +ENCODING 41185 +BBX 10 10 2 0 +BITMAP +4040 +4040 +2080 +1F00 +0400 +0480 +C500 +B600 +8C00 +8000 +ENDCHAR +STARTCHAR uniA0E2 +ENCODING 41186 +BBX 9 9 3 1 +BITMAP +8880 +8880 +4100 +3E00 +0800 +C800 +A800 +9800 +8000 +ENDCHAR +STARTCHAR uniA0E3 +ENCODING 41187 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0060 +0080 +0100 +1900 +1700 +1100 +1100 +1100 +D080 +3060 +ENDCHAR +STARTCHAR uniA0E4 +ENCODING 41188 +BBX 11 10 2 0 +BITMAP +0060 +0080 +0100 +1900 +1700 +1100 +1100 +1100 +D080 +3060 +ENDCHAR +STARTCHAR uniA0E5 +ENCODING 41189 +BBX 9 10 3 0 +BITMAP +E080 +9C80 +8B80 +0800 +0E00 +4900 +4900 +4900 +0E00 +0800 +ENDCHAR +STARTCHAR uniA0E6 +ENCODING 41190 +BBX 10 10 2 0 +BITMAP +4440 +4440 +4440 +4440 +0440 +0480 +0700 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA0E7 +ENCODING 41191 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +4900 +2A00 +9C80 +9C80 +2A00 +4900 +0800 +7F00 +0800 +7F00 +ENDCHAR +STARTCHAR uniA0E8 +ENCODING 41192 +BBX 9 10 3 0 +BITMAP +4900 +2A00 +9C80 +9C80 +2A00 +4900 +0800 +7F00 +0800 +7F00 +ENDCHAR +STARTCHAR uniA0E9 +ENCODING 41193 +BBX 11 10 2 0 +BITMAP +FFE0 +0400 +0400 +2700 +2480 +2480 +2700 +0400 +0400 +FFE0 +ENDCHAR +STARTCHAR uniA0EA +ENCODING 41194 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8080 +FF80 +8080 +8080 +FF80 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA0EB +ENCODING 41195 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8080 +8080 +9C80 +A280 +4100 +A280 +9C80 +8080 +8080 +8080 +ENDCHAR +STARTCHAR uniA0EC +ENCODING 41196 +BBX 9 10 3 0 +BITMAP +8080 +8080 +9C80 +A280 +4100 +A280 +9C80 +8080 +8080 +8080 +ENDCHAR +STARTCHAR uniA0ED +ENCODING 41197 +BBX 11 10 2 0 +BITMAP +0C00 +0B00 +0800 +C8E0 +3B20 +0C20 +3B20 +C8E0 +6800 +1800 +ENDCHAR +STARTCHAR uniA0EE +ENCODING 41198 +BBX 10 10 3 0 +BITMAP +1200 +1200 +D240 +B240 +9E40 +9340 +92C0 +1200 +1200 +0C00 +ENDCHAR +STARTCHAR uniA0EF +ENCODING 41199 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +0400 +6440 +9480 +9500 +9600 +6400 +0400 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA0F0 +ENCODING 41200 +BBX 10 10 3 0 +BITMAP +0400 +6440 +9480 +9500 +9600 +6400 +0400 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA0F1 +ENCODING 41201 +BBX 12 11 2 0 +BITMAP +0090 +0690 +7DD0 +84B0 +8480 +4400 +3C00 +4400 +8400 +8400 +7C00 +ENDCHAR +STARTCHAR uniA0F2 +ENCODING 41202 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0F00 +0080 +6080 +8100 +8E00 +8100 +6080 +0080 +0080 +0F00 +ENDCHAR +STARTCHAR uniA0F3 +ENCODING 41203 +BBX 9 10 3 0 +BITMAP +0F00 +0080 +6080 +8100 +8E00 +8100 +6080 +0080 +0080 +0F00 +ENDCHAR +STARTCHAR uniA0F4 +ENCODING 41204 +BBX 12 10 2 0 +BITMAP +00C0 +00A0 +0890 +5080 +2280 +5480 +8880 +1480 +2280 +0100 +ENDCHAR +STARTCHAR uniA0F5 +ENCODING 41205 +BBX 10 14 2 0 +BITMAP +0E00 +1100 +0000 +71C0 +0E00 +1100 +2080 +F880 +2080 +F880 +2080 +1100 +0E00 +71C0 +ENDCHAR +STARTCHAR uniA0F6 +ENCODING 41206 +BBX 10 11 2 0 +BITMAP +71C0 +0E00 +1100 +2080 +F880 +2080 +F880 +2080 +1100 +0E00 +71C0 +ENDCHAR +STARTCHAR uniA0F7 +ENCODING 41207 +BBX 9 11 3 0 +BITMAP +0400 +0200 +7F00 +4100 +2200 +1400 +0800 +1400 +2200 +4900 +8880 +ENDCHAR +STARTCHAR uniA0F8 +ENCODING 41208 +BBX 8 13 3 0 +BITMAP +1C +22 +00 +01 +01 +01 +0F +11 +F9 +21 +F9 +11 +0F +ENDCHAR +STARTCHAR uniA0F9 +ENCODING 41209 +BBX 8 10 3 0 +BITMAP +01 +01 +01 +0F +11 +F9 +21 +F9 +11 +0F +ENDCHAR +STARTCHAR uniA0FA +ENCODING 41210 +BBX 13 11 1 0 +BITMAP +0300 +0280 +4250 +4210 +2220 +9FC8 +8208 +9FC8 +2220 +4210 +4210 +ENDCHAR +STARTCHAR uniA0FB +ENCODING 41211 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8080 +8080 +4100 +3E00 +0000 +4100 +4100 +4900 +0800 +0800 +ENDCHAR +STARTCHAR uniA0FC +ENCODING 41212 +BBX 9 10 3 0 +BITMAP +8080 +8080 +4100 +3E00 +0000 +4100 +4100 +4900 +0800 +0800 +ENDCHAR +STARTCHAR uniA0FD +ENCODING 41213 +BBX 12 10 2 0 +BITMAP +0600 +8520 +8420 +4440 +3F90 +0410 +3F90 +4440 +9420 +8C20 +ENDCHAR +STARTCHAR uniA0FE +ENCODING 41214 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +4900 +3E00 +8880 +8880 +0800 +FF80 +0800 +FF80 +ENDCHAR +STARTCHAR uniA0FF +ENCODING 41215 +BBX 9 10 3 0 +BITMAP +8880 +8880 +4900 +3E00 +8880 +8880 +0800 +FF80 +0800 +FF80 +ENDCHAR +STARTCHAR uniA100 +ENCODING 41216 +BBX 12 10 2 0 +BITMAP +0220 +CA10 +AA10 +9A20 +03C0 +0220 +CA10 +AA10 +9A20 +0200 +ENDCHAR +STARTCHAR uniA101 +ENCODING 41217 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0600 +2500 +1480 +9400 +6400 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA102 +ENCODING 41218 +BBX 9 10 3 0 +BITMAP +0600 +2500 +1480 +9400 +6400 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA103 +ENCODING 41219 +BBX 9 12 3 0 +BITMAP +0800 +1000 +0800 +0400 +8880 +8880 +7700 +2200 +2A00 +2A00 +2200 +1C00 +ENDCHAR +STARTCHAR uniA104 +ENCODING 41220 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +0000 +0070 +0080 +0130 +1940 +1740 +1140 +1140 +1130 +D080 +3070 +ENDCHAR +STARTCHAR uniA105 +ENCODING 41221 +BBX 12 10 2 0 +BITMAP +0070 +0080 +0130 +1940 +1740 +1140 +1140 +1130 +D080 +3070 +ENDCHAR +STARTCHAR uniA106 +ENCODING 41222 +BBX 14 10 1 0 +BITMAP +0840 +0840 +E484 +9C84 +8304 +84E4 +849C +0840 +0840 +0840 +ENDCHAR +STARTCHAR uniA107 +ENCODING 41223 +BBX 10 10 3 0 +BITMAP +8800 +8900 +8900 +8900 +8800 +FFC0 +8800 +8900 +8900 +7100 +ENDCHAR +STARTCHAR uniA108 +ENCODING 41224 +BBX 10 12 3 0 +BITMAP +1C00 +2200 +0000 +80C0 +4140 +2240 +9440 +8840 +9440 +2240 +4140 +80C0 +ENDCHAR +STARTCHAR uniA109 +ENCODING 41225 +BBX 10 9 3 0 +BITMAP +80C0 +4140 +2240 +9440 +8840 +9440 +2240 +4140 +80C0 +ENDCHAR +STARTCHAR uniA10A +ENCODING 41226 +BBX 13 9 1 0 +BITMAP +1018 +0828 +3448 +2A88 +2108 +A288 +6448 +0828 +1018 +ENDCHAR +STARTCHAR uniA10B +ENCODING 41227 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +02 +0A +0A +8A +EA +9A +02 +62 +1A +06 +ENDCHAR +STARTCHAR uniA10C +ENCODING 41228 +BBX 7 10 4 0 +BITMAP +02 +0A +0A +8A +EA +9A +02 +62 +1A +06 +ENDCHAR +STARTCHAR uniA10D +ENCODING 41229 +BBX 7 10 4 0 +BITMAP +10 +10 +7C +92 +92 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uniA10E +ENCODING 41230 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0600 +0580 +0460 +0400 +7FC0 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA10F +ENCODING 41231 +BBX 11 10 2 0 +BITMAP +0600 +0580 +0460 +0400 +7FC0 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA110 +ENCODING 41232 +BBX 11 10 2 0 +BITMAP +0600 +0580 +0460 +0400 +7FC0 +0400 +0400 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA111 +ENCODING 41233 +BBX 9 15 3 -1 +BITMAP +1C00 +2200 +0000 +0E00 +0980 +0800 +3E00 +2A00 +1C00 +1C00 +2A00 +3E00 +0800 +C800 +3800 +ENDCHAR +STARTCHAR uniA112 +ENCODING 41234 +BBX 9 12 3 0 +BITMAP +0E00 +0980 +0800 +3E00 +2A00 +1C00 +1C00 +2A00 +3E00 +0800 +C800 +3800 +ENDCHAR +STARTCHAR uniA113 +ENCODING 41235 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8740 +84C0 +0400 +1F00 +2480 +4440 +4440 +ENDCHAR +STARTCHAR uniA114 +ENCODING 41236 +BBX 8 10 4 0 +BITMAP +41 +89 +91 +71 +91 +89 +41 +01 +19 +07 +ENDCHAR +STARTCHAR uniA115 +ENCODING 41237 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +7880 +8480 +8700 +7A00 +03C0 +2200 +23C0 +2200 +0220 +01C0 +ENDCHAR +STARTCHAR uniA116 +ENCODING 41238 +BBX 11 10 2 0 +BITMAP +7880 +8480 +8700 +7A00 +03C0 +2200 +23C0 +2200 +0220 +01C0 +ENDCHAR +STARTCHAR uniA117 +ENCODING 41239 +BBX 9 10 3 0 +BITMAP +7F00 +8080 +8080 +8080 +7F00 +0800 +0F80 +0800 +0800 +0780 +ENDCHAR +STARTCHAR uniA118 +ENCODING 41240 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +0C00 +0B00 +08C0 +0800 +FF80 +0800 +2800 +2800 +2800 +0800 +ENDCHAR +STARTCHAR uniA119 +ENCODING 41241 +BBX 10 10 3 0 +BITMAP +0C00 +0B00 +08C0 +0800 +FF80 +0800 +2800 +2800 +2800 +0800 +ENDCHAR +STARTCHAR uniA11A +ENCODING 41242 +BBX 11 12 2 0 +BITMAP +3F80 +0000 +0600 +0580 +0460 +0400 +7FC0 +0400 +0400 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA11B +ENCODING 41243 +BBX 10 13 2 0 +BITMAP +0E00 +1100 +0000 +0200 +0200 +9FC0 +8200 +8200 +9FC0 +0200 +6200 +1A00 +0600 +ENDCHAR +STARTCHAR uniA11C +ENCODING 41244 +BBX 10 10 3 0 +BITMAP +0200 +0200 +9FC0 +8200 +8200 +9FC0 +0200 +6200 +1A00 +0600 +ENDCHAR +STARTCHAR uniA11D +ENCODING 41245 +BBX 10 10 3 0 +BITMAP +0040 +0C40 +0B40 +08C0 +0800 +0800 +FF80 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA11E +ENCODING 41246 +BBX 10 13 2 0 +BITMAP +0E00 +1100 +0000 +2300 +12C0 +9200 +6200 +0200 +1FC0 +0200 +0200 +1A00 +0600 +ENDCHAR +STARTCHAR uniA11F +ENCODING 41247 +BBX 10 10 2 0 +BITMAP +2300 +12C0 +9200 +6200 +0200 +1FC0 +0200 +0200 +1A00 +0600 +ENDCHAR +STARTCHAR uniA120 +ENCODING 41248 +BBX 8 10 4 0 +BITMAP +85 +85 +79 +01 +79 +85 +85 +31 +0D +03 +ENDCHAR +STARTCHAR uniA121 +ENCODING 41249 +BBX 8 10 4 0 +BITMAP +FE +01 +39 +41 +41 +41 +41 +39 +01 +FE +ENDCHAR +STARTCHAR uniA122 +ENCODING 41250 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +4100 +4100 +0000 +FF00 +0080 +0080 +FF00 +0000 +4200 +4200 +ENDCHAR +STARTCHAR uniA123 +ENCODING 41251 +BBX 9 10 3 0 +BITMAP +4100 +4100 +0000 +FF00 +0080 +0080 +FF00 +0000 +4200 +4200 +ENDCHAR +STARTCHAR uniA124 +ENCODING 41252 +BBX 8 11 4 0 +BITMAP +FE +01 +01 +F9 +01 +F9 +01 +F9 +01 +01 +FE +ENDCHAR +STARTCHAR uniA125 +ENCODING 41253 +BBX 13 10 1 0 +BITMAP +E238 +1240 +1240 +2020 +C018 +2020 +1240 +1240 +1240 +E038 +ENDCHAR +STARTCHAR uniA126 +ENCODING 41254 +BBX 8 14 4 0 +BITMAP +38 +44 +00 +01 +FF +01 +FF +01 +FF +01 +31 +2D +23 +20 +ENDCHAR +STARTCHAR uniA127 +ENCODING 41255 +BBX 8 11 4 0 +BITMAP +01 +FF +01 +FF +01 +FF +01 +31 +2D +23 +20 +ENDCHAR +STARTCHAR uniA128 +ENCODING 41256 +BBX 13 10 1 0 +BITMAP +1008 +1588 +1568 +1118 +1500 +1500 +1100 +9500 +5500 +3100 +ENDCHAR +STARTCHAR uniA129 +ENCODING 41257 +BBX 7 10 4 0 +BITMAP +18 +16 +10 +18 +16 +10 +18 +16 +D0 +30 +ENDCHAR +STARTCHAR uniA12A +ENCODING 41258 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0600 +4580 +4460 +4600 +0580 +0460 +C600 +B580 +8C60 +8000 +ENDCHAR +STARTCHAR uniA12B +ENCODING 41259 +BBX 11 10 2 0 +BITMAP +0600 +4580 +4460 +4600 +0580 +0460 +C600 +B580 +8C60 +8000 +ENDCHAR +STARTCHAR uniA12C +ENCODING 41260 +BBX 13 10 1 0 +BITMAP +78F0 +8208 +8208 +78F0 +8208 +8208 +78F0 +8208 +8208 +78F0 +ENDCHAR +STARTCHAR uniA12D +ENCODING 41261 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +9240 +5440 +3840 +3840 +5440 +9240 +7C40 +1040 +3C40 +03C0 +ENDCHAR +STARTCHAR uniA12E +ENCODING 41262 +BBX 10 10 3 0 +BITMAP +9240 +5440 +3840 +3840 +5440 +9240 +7C40 +1040 +3C40 +03C0 +ENDCHAR +STARTCHAR uniA12F +ENCODING 41263 +BBX 9 10 3 0 +BITMAP +1800 +1600 +1180 +1800 +1600 +1180 +1000 +7C00 +9200 +9200 +ENDCHAR +STARTCHAR uniA130 +ENCODING 41264 +BBX 9 10 3 0 +BITMAP +7000 +8B80 +8C00 +8800 +8900 +8900 +8800 +8C00 +8B80 +7000 +ENDCHAR +STARTCHAR uniA131 +ENCODING 41265 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +3E00 +4100 +8080 +8080 +8080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA132 +ENCODING 41266 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8080 +8080 +8080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA133 +ENCODING 41267 +BBX 10 10 3 0 +BITMAP +3F80 +4040 +4040 +4040 +3F80 +0200 +B280 +AA80 +A680 +2000 +ENDCHAR +STARTCHAR uniA134 +ENCODING 41268 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0600 +3580 +2C00 +24A0 +24A0 +A7E0 +64A0 +04A0 +3400 +0C00 +ENDCHAR +STARTCHAR uniA135 +ENCODING 41269 +BBX 11 10 2 0 +BITMAP +0600 +3580 +2C00 +24A0 +24A0 +A7E0 +64A0 +04A0 +3400 +0C00 +ENDCHAR +STARTCHAR uniA136 +ENCODING 41270 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8740 +84C0 +0400 +2480 +2480 +2480 +0400 +ENDCHAR +STARTCHAR uniA137 +ENCODING 41271 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8600 +4580 +2400 +8400 +4400 +2400 +0400 +0400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA138 +ENCODING 41272 +BBX 9 10 3 0 +BITMAP +8600 +4580 +2400 +8400 +4400 +2400 +0400 +0400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA139 +ENCODING 41273 +BBX 10 10 3 0 +BITMAP +C440 +B440 +8C40 +8740 +84C0 +0400 +7FC0 +0400 +0400 +7FC0 +ENDCHAR +STARTCHAR uniA13A +ENCODING 41274 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +8420 +8420 +FFE0 +8420 +8420 +0400 +3F80 +0400 +0400 +3F80 +ENDCHAR +STARTCHAR uniA13B +ENCODING 41275 +BBX 11 10 2 0 +BITMAP +8420 +8420 +FFE0 +8420 +8420 +0400 +3F80 +0400 +0400 +3F80 +ENDCHAR +STARTCHAR uniA13C +ENCODING 41276 +BBX 11 10 2 0 +BITMAP +0400 +8420 +FFE0 +8420 +0400 +1F00 +2480 +4440 +4440 +4440 +ENDCHAR +STARTCHAR uniA13D +ENCODING 41277 +BBX 9 10 3 0 +BITMAP +FF80 +0800 +3E00 +4900 +4900 +4900 +4900 +3E00 +0800 +FF80 +ENDCHAR +STARTCHAR uniA13E +ENCODING 41278 +BBX 12 14 2 0 +BITMAP +0E00 +1100 +0000 +7FC0 +0400 +C470 +3590 +0E10 +3590 +C470 +0400 +7FC0 +0400 +7FC0 +ENDCHAR +STARTCHAR uniA13F +ENCODING 41279 +BBX 12 11 2 0 +BITMAP +7FC0 +0400 +C470 +3590 +0E10 +3590 +C470 +0400 +7FC0 +0400 +7FC0 +ENDCHAR +STARTCHAR uniA140 +ENCODING 41280 +BBX 11 12 2 0 +BITMAP +3F80 +0400 +3F80 +0400 +E420 +9C20 +8720 +84E0 +0400 +3F80 +0400 +3F80 +ENDCHAR +STARTCHAR uniA141 +ENCODING 41281 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +FE +10 +38 +54 +92 +92 +92 +92 +54 +38 +ENDCHAR +STARTCHAR uniA142 +ENCODING 41282 +BBX 7 10 4 0 +BITMAP +FE +10 +38 +54 +92 +92 +92 +92 +54 +38 +ENDCHAR +STARTCHAR uniA143 +ENCODING 41283 +BBX 7 10 4 0 +BITMAP +FE +10 +FE +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uniA144 +ENCODING 41284 +BBX 7 10 4 0 +BITMAP +18 +14 +12 +10 +10 +92 +7C +00 +92 +92 +ENDCHAR +STARTCHAR uniA145 +ENCODING 41285 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +FF80 +8880 +8880 +4900 +3E00 +0000 +4900 +4900 +ENDCHAR +STARTCHAR uniA146 +ENCODING 41286 +BBX 9 10 3 0 +BITMAP +8880 +8880 +FF80 +8880 +8880 +4900 +3E00 +0000 +4900 +4900 +ENDCHAR +STARTCHAR uniA147 +ENCODING 41287 +BBX 9 11 3 0 +BITMAP +1880 +1680 +1180 +7C00 +1000 +1000 +8200 +7C00 +0000 +9200 +9200 +ENDCHAR +STARTCHAR uniA148 +ENCODING 41288 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +EE +10 +28 +44 +54 +54 +44 +28 +10 +EE +ENDCHAR +STARTCHAR uniA149 +ENCODING 41289 +BBX 7 10 4 0 +BITMAP +EE +10 +28 +44 +54 +54 +44 +28 +10 +EE +ENDCHAR +STARTCHAR uniA14A +ENCODING 41290 +BBX 11 10 2 0 +BITMAP +2180 +3F40 +A120 +6100 +0F00 +1100 +2100 +2100 +1100 +0F00 +ENDCHAR +STARTCHAR uniA14B +ENCODING 41291 +BBX 9 11 3 0 +BITMAP +FE00 +8200 +4400 +2880 +2880 +1F80 +2880 +2880 +4400 +8200 +FE00 +ENDCHAR +STARTCHAR uniA14C +ENCODING 41292 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +8880 +4900 +3E00 +0800 +8800 +8800 +8800 +0800 +ENDCHAR +STARTCHAR uniA14D +ENCODING 41293 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +4900 +3E00 +0800 +8800 +8800 +8800 +0800 +ENDCHAR +STARTCHAR uniA14E +ENCODING 41294 +BBX 10 10 3 0 +BITMAP +7C00 +8400 +8440 +4440 +3FC0 +4440 +8440 +8400 +8400 +7C00 +ENDCHAR +STARTCHAR uniA14F +ENCODING 41295 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +8880 +8880 +8880 +8880 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA150 +ENCODING 41296 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +8880 +8880 +8880 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA151 +ENCODING 41297 +BBX 10 10 3 0 +BITMAP +0400 +0400 +C040 +B040 +8C40 +8340 +80C0 +0000 +2480 +2480 +ENDCHAR +STARTCHAR uniA152 +ENCODING 41298 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +02 +82 +FE +82 +02 +02 +82 +E2 +9A +06 +ENDCHAR +STARTCHAR uniA153 +ENCODING 41299 +BBX 7 10 4 0 +BITMAP +02 +82 +FE +82 +02 +02 +82 +E2 +9A +06 +ENDCHAR +STARTCHAR uniA154 +ENCODING 41300 +BBX 7 10 4 0 +BITMAP +38 +44 +44 +92 +92 +82 +82 +92 +92 +6C +ENDCHAR +STARTCHAR uniA155 +ENCODING 41301 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0600 +0580 +8420 +5F40 +4440 +5F40 +8420 +0400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA156 +ENCODING 41302 +BBX 11 10 2 0 +BITMAP +0600 +0580 +8420 +5F40 +4440 +5F40 +8420 +0400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA157 +ENCODING 41303 +BBX 10 10 3 0 +BITMAP +6300 +9280 +9E40 +9200 +6200 +0200 +6200 +5A00 +4600 +4000 +ENDCHAR +STARTCHAR uniA158 +ENCODING 41304 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +6300 +9280 +9240 +6200 +0200 +FFC0 +0200 +3A00 +2600 +2000 +ENDCHAR +STARTCHAR uniA159 +ENCODING 41305 +BBX 10 10 3 0 +BITMAP +6300 +9280 +9240 +6200 +0200 +FFC0 +0200 +3A00 +2600 +2000 +ENDCHAR +STARTCHAR uniA15A +ENCODING 41306 +BBX 11 10 2 0 +BITMAP +6220 +92A0 +92A0 +92A0 +62A0 +03C0 +0280 +6280 +1A80 +0600 +ENDCHAR +STARTCHAR uniA15B +ENCODING 41307 +BBX 8 10 4 0 +BITMAP +04 +7F +84 +FF +84 +7F +04 +E4 +9C +80 +ENDCHAR +STARTCHAR uniA15C +ENCODING 41308 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +2000 +4C80 +9280 +9280 +9280 +8C80 +4080 +1880 +1680 +1180 +1000 +ENDCHAR +STARTCHAR uniA15D +ENCODING 41309 +BBX 9 11 3 0 +BITMAP +2000 +4C80 +9280 +9280 +9280 +8C80 +4080 +1880 +1680 +1180 +1000 +ENDCHAR +STARTCHAR uniA15E +ENCODING 41310 +BBX 9 12 3 0 +BITMAP +2000 +4000 +8080 +A280 +A280 +8880 +8880 +4080 +1880 +1680 +1180 +1000 +ENDCHAR +STARTCHAR uniA15F +ENCODING 41311 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +0000 +60C0 +90A0 +9090 +9080 +6780 +0880 +1080 +1080 +0880 +0780 +ENDCHAR +STARTCHAR uniA160 +ENCODING 41312 +BBX 12 10 2 0 +BITMAP +60C0 +90A0 +9090 +9080 +6780 +0880 +1080 +1080 +0880 +0780 +ENDCHAR +STARTCHAR uniA161 +ENCODING 41313 +BBX 11 10 2 0 +BITMAP +1980 +2560 +A500 +A500 +9900 +4100 +3F00 +0100 +0D00 +0300 +ENDCHAR +STARTCHAR uniA162 +ENCODING 41314 +BBX 7 9 4 0 +BITMAP +88 +88 +52 +52 +3E +52 +52 +88 +88 +ENDCHAR +STARTCHAR uniA163 +ENCODING 41315 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0900 +0900 +0900 +0900 +0900 +0E00 +0800 +8880 +8880 +7F00 +ENDCHAR +STARTCHAR uniA164 +ENCODING 41316 +BBX 9 10 3 0 +BITMAP +0900 +0900 +0900 +0900 +0900 +0E00 +0800 +8880 +8880 +7F00 +ENDCHAR +STARTCHAR uniA165 +ENCODING 41317 +BBX 9 10 3 0 +BITMAP +7F00 +8080 +8080 +8080 +7F00 +0800 +FF80 +0800 +FF80 +0800 +ENDCHAR +STARTCHAR uniA166 +ENCODING 41318 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +7F00 +8080 +8080 +8080 +7F00 +0800 +F900 +0900 +F900 +0800 +ENDCHAR +STARTCHAR uniA167 +ENCODING 41319 +BBX 9 10 3 0 +BITMAP +7F00 +8080 +8080 +8080 +7F00 +0800 +F900 +0900 +F900 +0800 +ENDCHAR +STARTCHAR uniA168 +ENCODING 41320 +BBX 10 10 3 0 +BITMAP +4C00 +8B00 +88C0 +4800 +0800 +FF80 +0800 +FF80 +0800 +0800 +ENDCHAR +STARTCHAR uniA169 +ENCODING 41321 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +0C00 +0B00 +08C0 +0800 +0800 +FF80 +0800 +FF80 +0800 +0800 +ENDCHAR +STARTCHAR uniA16A +ENCODING 41322 +BBX 10 10 3 0 +BITMAP +0C00 +0B00 +08C0 +0800 +0800 +FF80 +0800 +FF80 +0800 +0800 +ENDCHAR +STARTCHAR uniA16B +ENCODING 41323 +BBX 11 11 2 -1 +BITMAP +0600 +0500 +84A0 +8420 +4440 +3F80 +0400 +3F80 +4440 +8420 +8420 +ENDCHAR +STARTCHAR uniA16C +ENCODING 41324 +BBX 11 10 2 0 +BITMAP +0600 +0500 +0480 +0400 +7FC0 +0400 +3F80 +4040 +8420 +8420 +ENDCHAR +STARTCHAR uniA16D +ENCODING 41325 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +4900 +3E00 +0800 +C800 +A800 +9A00 +8200 +0C00 +ENDCHAR +STARTCHAR uniA16E +ENCODING 41326 +BBX 9 10 3 0 +BITMAP +8880 +8880 +4900 +3E00 +0800 +C800 +A800 +9A00 +8200 +0C00 +ENDCHAR +STARTCHAR uniA16F +ENCODING 41327 +BBX 14 11 1 0 +BITMAP +08C0 +4AB0 +4A8C +0880 +C880 +3880 +0080 +1880 +1680 +1180 +1000 +ENDCHAR +STARTCHAR uniA170 +ENCODING 41328 +BBX 10 10 3 0 +BITMAP +0080 +1880 +1680 +1180 +1000 +FE40 +1040 +FE40 +1000 +1000 +ENDCHAR +STARTCHAR uniA171 +ENCODING 41329 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0020 +0620 +05A0 +0460 +3400 +2E00 +A580 +6460 +0400 +0400 +ENDCHAR +STARTCHAR uniA172 +ENCODING 41330 +BBX 11 10 2 0 +BITMAP +0020 +0620 +05A0 +0460 +3400 +2E00 +A580 +6460 +0400 +0400 +ENDCHAR +STARTCHAR uniA173 +ENCODING 41331 +BBX 7 10 4 0 +BITMAP +FE +82 +44 +38 +44 +82 +18 +14 +50 +30 +ENDCHAR +STARTCHAR uniA174 +ENCODING 41332 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0E00 +1500 +1500 +D520 +BD20 +97A0 +9560 +1500 +1500 +0E00 +ENDCHAR +STARTCHAR uniA175 +ENCODING 41333 +BBX 11 10 2 0 +BITMAP +0E00 +1500 +1500 +D520 +BD20 +97A0 +9560 +1500 +1500 +0E00 +ENDCHAR +STARTCHAR uniA176 +ENCODING 41334 +BBX 13 10 1 0 +BITMAP +4460 +AA50 +AA48 +4440 +1040 +2840 +2840 +1340 +02C0 +0200 +ENDCHAR +STARTCHAR uniA177 +ENCODING 41335 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +0000 +0300 +8AC0 +8A30 +2200 +2200 +0200 +6200 +5A00 +4600 +4000 +ENDCHAR +STARTCHAR uniA178 +ENCODING 41336 +BBX 12 10 2 0 +BITMAP +0300 +8AC0 +8A30 +2200 +2200 +0200 +6200 +5A00 +4600 +4000 +ENDCHAR +STARTCHAR uniA179 +ENCODING 41337 +BBX 7 16 4 -2 +BITMAP +38 +44 +00 +18 +54 +30 +00 +EE +10 +28 +10 +EE +00 +18 +54 +30 +ENDCHAR +STARTCHAR uniA17A +ENCODING 41338 +BBX 7 13 4 0 +BITMAP +18 +54 +30 +00 +EE +10 +28 +10 +EE +00 +18 +54 +30 +ENDCHAR +STARTCHAR uniA17B +ENCODING 41339 +BBX 12 9 2 0 +BITMAP +8310 +4AA0 +4620 +2040 +3FC0 +2040 +4320 +4AA0 +8610 +ENDCHAR +STARTCHAR uniA17C +ENCODING 41340 +BBX 14 11 1 0 +BITMAP +06C0 +08B0 +668C +8080 +6680 +0880 +0680 +3080 +2C80 +2380 +2000 +ENDCHAR +STARTCHAR uniA17D +ENCODING 41341 +BBX 11 10 2 0 +BITMAP +0180 +0140 +0120 +0100 +8F20 +9120 +2100 +2100 +9120 +8F20 +ENDCHAR +STARTCHAR uniA17E +ENCODING 41342 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +09 +A9 +A9 +A9 +0F +E9 +09 +49 +29 +19 +ENDCHAR +STARTCHAR uniA17F +ENCODING 41343 +BBX 8 10 4 0 +BITMAP +09 +A9 +A9 +A9 +0F +E9 +09 +49 +29 +19 +ENDCHAR +STARTCHAR uniA180 +ENCODING 41344 +BBX 9 10 3 0 +BITMAP +0600 +0500 +0480 +0400 +3D00 +4600 +8C00 +9400 +6400 +3C00 +ENDCHAR +STARTCHAR uniA181 +ENCODING 41345 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0700 +0880 +0880 +3880 +2C80 +AA80 +6980 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uniA182 +ENCODING 41346 +BBX 9 10 3 0 +BITMAP +0700 +0880 +0880 +3880 +2C80 +AA80 +6980 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uniA183 +ENCODING 41347 +BBX 11 10 2 0 +BITMAP +1800 +1600 +1000 +1E60 +1180 +1700 +1900 +1E00 +D000 +3000 +ENDCHAR +STARTCHAR uniA184 +ENCODING 41348 +BBX 10 14 3 0 +BITMAP +1C00 +2200 +0000 +3300 +2A80 +A640 +6300 +0280 +0200 +0F80 +6200 +5A00 +4600 +4000 +ENDCHAR +STARTCHAR uniA185 +ENCODING 41349 +BBX 10 11 3 0 +BITMAP +3300 +2A80 +A640 +6300 +0280 +0200 +0F80 +6200 +5A00 +4600 +4000 +ENDCHAR +STARTCHAR uniA186 +ENCODING 41350 +BBX 10 10 3 0 +BITMAP +0C00 +0B00 +08C0 +BE00 +8800 +BE00 +0800 +6800 +5800 +4000 +ENDCHAR +STARTCHAR uniA187 +ENCODING 41351 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +7600 +0D80 +0460 +0400 +0C00 +7400 +0400 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA188 +ENCODING 41352 +BBX 11 10 2 0 +BITMAP +7600 +0D80 +0460 +0400 +0C00 +7400 +0400 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA189 +ENCODING 41353 +BBX 8 10 4 0 +BITMAP +8E +91 +91 +95 +95 +95 +95 +91 +91 +8E +ENDCHAR +STARTCHAR uniA18A +ENCODING 41354 +BBX 8 10 4 0 +BITMAP +70 +89 +89 +FF +89 +89 +FF +89 +89 +70 +ENDCHAR +STARTCHAR uniA18B +ENCODING 41355 +BBX 14 14 1 0 +BITMAP +0700 +0880 +0000 +7CC0 +82B0 +108C +7C80 +1080 +8280 +7C80 +0080 +1C80 +1380 +1000 +ENDCHAR +STARTCHAR uniA18C +ENCODING 41356 +BBX 14 11 1 0 +BITMAP +7CC0 +82B0 +108C +7C80 +1080 +8280 +7C80 +0080 +1C80 +1380 +1000 +ENDCHAR +STARTCHAR uniA18D +ENCODING 41357 +BBX 12 10 2 0 +BITMAP +9300 +62C0 +0230 +9200 +6200 +0200 +6200 +5A00 +4600 +4000 +ENDCHAR +STARTCHAR uniA18E +ENCODING 41358 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +18 +16 +D0 +30 +10 +D0 +30 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA18F +ENCODING 41359 +BBX 7 10 4 0 +BITMAP +18 +16 +D0 +30 +10 +D0 +30 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA190 +ENCODING 41360 +BBX 11 10 2 0 +BITMAP +C600 +3580 +0C60 +C400 +3400 +0C00 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA191 +ENCODING 41361 +BBX 8 10 4 0 +BITMAP +0C +0B +08 +A8 +A8 +A8 +08 +08 +68 +18 +ENDCHAR +STARTCHAR uniA192 +ENCODING 41362 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +9600 +6580 +0400 +9400 +6400 +0400 +9400 +6400 +0400 +E400 +1C00 +ENDCHAR +STARTCHAR uniA193 +ENCODING 41363 +BBX 9 11 3 0 +BITMAP +9600 +6580 +0400 +9400 +6400 +0400 +9400 +6400 +0400 +E400 +1C00 +ENDCHAR +STARTCHAR uniA194 +ENCODING 41364 +BBX 10 10 3 0 +BITMAP +0300 +52C0 +5200 +5200 +0200 +8A00 +7200 +0200 +1A00 +0600 +ENDCHAR +STARTCHAR uniA195 +ENCODING 41365 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0600 +A580 +A400 +A400 +0700 +E480 +0480 +0480 +3400 +0C00 +ENDCHAR +STARTCHAR uniA196 +ENCODING 41366 +BBX 9 10 3 0 +BITMAP +0600 +A580 +A400 +A400 +0700 +E480 +0480 +0480 +3400 +0C00 +ENDCHAR +STARTCHAR uniA197 +ENCODING 41367 +BBX 10 12 3 0 +BITMAP +2080 +2080 +1F00 +C440 +B440 +8C40 +8740 +84C0 +0400 +1F00 +2480 +2480 +ENDCHAR +STARTCHAR uniA198 +ENCODING 41368 +BBX 9 15 3 -1 +BITMAP +1C00 +2200 +0000 +4100 +4100 +3E00 +0880 +7F80 +8800 +8800 +7F80 +0800 +3E00 +4100 +4100 +ENDCHAR +STARTCHAR uniA199 +ENCODING 41369 +BBX 9 12 3 0 +BITMAP +4100 +4100 +3E00 +0880 +7F80 +8800 +8800 +7F80 +0800 +3E00 +4100 +4100 +ENDCHAR +STARTCHAR uniA19A +ENCODING 41370 +BBX 9 10 3 0 +BITMAP +BE80 +4100 +BE80 +8080 +8080 +8080 +4100 +3E00 +8080 +7F00 +ENDCHAR +STARTCHAR uniA19B +ENCODING 41371 +BBX 10 15 2 -1 +BITMAP +0E00 +1100 +0000 +0E00 +1100 +1100 +0E00 +C440 +B440 +8C40 +8740 +84C0 +0E00 +1500 +1500 +ENDCHAR +STARTCHAR uniA19C +ENCODING 41372 +BBX 10 12 3 0 +BITMAP +0E00 +1100 +1100 +0E00 +C440 +B440 +8C40 +8740 +84C0 +0E00 +1500 +1500 +ENDCHAR +STARTCHAR uniA19D +ENCODING 41373 +BBX 8 10 4 0 +BITMAP +89 +71 +01 +31 +2D +23 +20 +70 +A8 +A8 +ENDCHAR +STARTCHAR uniA19E +ENCODING 41374 +BBX 8 10 4 0 +BITMAP +70 +88 +88 +88 +B9 +AD +AB +88 +88 +70 +ENDCHAR +STARTCHAR uniA19F +ENCODING 41375 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0400 +3C80 +4480 +8400 +8480 +8480 +8400 +4480 +3C80 +0400 +ENDCHAR +STARTCHAR uniA1A0 +ENCODING 41376 +BBX 9 10 3 0 +BITMAP +0400 +3C80 +4480 +8400 +8480 +8480 +8400 +4480 +3C80 +0400 +ENDCHAR +STARTCHAR uniA1A1 +ENCODING 41377 +BBX 10 10 3 0 +BITMAP +3C00 +4200 +8100 +0540 +0540 +0540 +0380 +E100 +9900 +8600 +ENDCHAR +STARTCHAR uniA1A2 +ENCODING 41378 +BBX 7 15 4 -1 +BITMAP +38 +44 +00 +EE +10 +28 +44 +44 +FE +44 +54 +54 +28 +10 +EE +ENDCHAR +STARTCHAR uniA1A3 +ENCODING 41379 +BBX 7 12 4 0 +BITMAP +EE +10 +28 +44 +44 +FE +44 +54 +54 +28 +10 +EE +ENDCHAR +STARTCHAR uniA1A4 +ENCODING 41380 +BBX 11 10 2 0 +BITMAP +9F20 +A0A0 +4040 +60C0 +5F40 +4040 +4440 +4440 +2080 +1F00 +ENDCHAR +STARTCHAR uniA1A5 +ENCODING 41381 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +0000 +0400 +0490 +0490 +07E0 +0480 +0490 +0490 +C7E0 +3480 +0C80 +ENDCHAR +STARTCHAR uniA1A6 +ENCODING 41382 +BBX 12 10 2 0 +BITMAP +0400 +0490 +0490 +07E0 +0480 +0490 +0490 +C7E0 +3480 +0C80 +ENDCHAR +STARTCHAR uniA1A7 +ENCODING 41383 +BBX 11 10 2 0 +BITMAP +9F20 +A0A0 +4040 +60C0 +5F40 +4040 +4040 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uniA1A8 +ENCODING 41384 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +3E00 +4100 +8080 +F080 +8E80 +8180 +8E80 +F080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA1A9 +ENCODING 41385 +BBX 9 11 3 0 +BITMAP +3E00 +4100 +8080 +F080 +8E80 +8180 +8E80 +F080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA1AA +ENCODING 41386 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8080 +8080 +8080 +FF80 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA1AB +ENCODING 41387 +BBX 10 11 3 0 +BITMAP +0C00 +0B00 +08C0 +0800 +FF80 +0800 +FF80 +0800 +E800 +9800 +8000 +ENDCHAR +STARTCHAR uniA1AC +ENCODING 41388 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +4F +90 +90 +48 +07 +48 +90 +90 +90 +4F +ENDCHAR +STARTCHAR uniA1AD +ENCODING 41389 +BBX 8 10 4 0 +BITMAP +4F +90 +90 +48 +07 +48 +90 +90 +90 +4F +ENDCHAR +STARTCHAR uniA1AE +ENCODING 41390 +BBX 9 10 3 0 +BITMAP +7F00 +8080 +8080 +7F00 +0800 +4800 +4700 +0800 +4800 +4700 +ENDCHAR +STARTCHAR uniA1AF +ENCODING 41391 +BBX 11 14 2 -1 +BITMAP +0E00 +1100 +0000 +1F00 +2080 +4040 +4040 +4040 +4040 +4040 +5140 +2080 +5F40 +8020 +ENDCHAR +STARTCHAR uniA1B0 +ENCODING 41392 +BBX 11 11 2 -1 +BITMAP +1F00 +2080 +4040 +4040 +4040 +4040 +4040 +5140 +2080 +5F40 +8020 +ENDCHAR +STARTCHAR uniA1B1 +ENCODING 41393 +BBX 8 10 4 0 +BITMAP +11 +11 +0E +04 +34 +2C +20 +70 +88 +88 +ENDCHAR +STARTCHAR uniA1B2 +ENCODING 41394 +BBX 10 13 2 0 +BITMAP +0E00 +1100 +0000 +4440 +4440 +4440 +2480 +1F00 +0400 +E400 +9C00 +8400 +8400 +ENDCHAR +STARTCHAR uniA1B3 +ENCODING 41395 +BBX 10 10 3 0 +BITMAP +4440 +4440 +4440 +2480 +1F00 +0400 +E400 +9C00 +8400 +8400 +ENDCHAR +STARTCHAR uniA1B4 +ENCODING 41396 +BBX 10 10 3 0 +BITMAP +0E00 +1100 +3180 +2940 +2100 +2100 +2100 +2100 +A500 +6300 +ENDCHAR +STARTCHAR uniA1B5 +ENCODING 41397 +BBX 13 13 1 0 +BITMAP +0700 +0880 +0000 +0580 +3560 +2D18 +A700 +6500 +0500 +3100 +2D00 +2300 +2000 +ENDCHAR +STARTCHAR uniA1B6 +ENCODING 41398 +BBX 13 10 1 0 +BITMAP +0580 +3560 +2D18 +A700 +6500 +0500 +3100 +2D00 +2300 +2000 +ENDCHAR +STARTCHAR uniA1B7 +ENCODING 41399 +BBX 11 10 2 0 +BITMAP +0040 +0640 +05C0 +0400 +C520 +B520 +8F20 +85E0 +0500 +0400 +ENDCHAR +STARTCHAR uniA1B8 +ENCODING 41400 +BBX 6 13 4 0 +BITMAP +38 +44 +00 +04 +44 +44 +44 +44 +44 +04 +C4 +34 +0C +ENDCHAR +STARTCHAR uniA1B9 +ENCODING 41401 +BBX 6 10 4 0 +BITMAP +04 +44 +44 +44 +44 +44 +04 +C4 +34 +0C +ENDCHAR +STARTCHAR uniA1BA +ENCODING 41402 +BBX 9 10 3 0 +BITMAP +3E00 +4900 +8880 +8880 +8880 +FF80 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA1BB +ENCODING 41403 +BBX 7 10 4 0 +BITMAP +02 +22 +22 +AA +8A +8A +02 +62 +1A +06 +ENDCHAR +STARTCHAR uniA1BC +ENCODING 41404 +BBX 6 13 4 0 +BITMAP +38 +44 +00 +04 +44 +44 +44 +04 +44 +A4 +A4 +64 +98 +ENDCHAR +STARTCHAR uniA1BD +ENCODING 41405 +BBX 6 10 4 0 +BITMAP +04 +44 +44 +44 +04 +44 +A4 +A4 +64 +98 +ENDCHAR +STARTCHAR uniA1BE +ENCODING 41406 +BBX 7 10 4 0 +BITMAP +02 +62 +92 +92 +92 +62 +02 +62 +1A +06 +ENDCHAR +STARTCHAR uniA1BF +ENCODING 41407 +BBX 10 10 3 0 +BITMAP +8100 +8140 +8140 +8100 +8140 +FF40 +8100 +8140 +8140 +8100 +ENDCHAR +STARTCHAR uniA1C0 +ENCODING 41408 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +C2 +A2 +92 +82 +82 +82 +82 +92 +8A +86 +ENDCHAR +STARTCHAR uniA1C1 +ENCODING 41409 +BBX 7 10 4 0 +BITMAP +C2 +A2 +92 +82 +82 +82 +82 +92 +8A +86 +ENDCHAR +STARTCHAR uniA1C2 +ENCODING 41410 +BBX 12 11 2 0 +BITMAP +0300 +02C0 +6230 +8F80 +6200 +8F80 +6200 +0200 +3A00 +2600 +2000 +ENDCHAR +STARTCHAR uniA1C3 +ENCODING 41411 +BBX 8 13 4 0 +BITMAP +55 +55 +01 +3D +43 +81 +80 +80 +80 +80 +81 +42 +3C +ENDCHAR +STARTCHAR uniA1C4 +ENCODING 41412 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +0C00 +0B00 +08C0 +1C00 +2A00 +2A00 +9C80 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA1C5 +ENCODING 41413 +BBX 10 10 3 0 +BITMAP +0C00 +0B00 +08C0 +1C00 +2A00 +2A00 +9C80 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA1C6 +ENCODING 41414 +BBX 11 10 2 0 +BITMAP +1100 +1100 +3F80 +5140 +9120 +9120 +3F80 +5140 +9120 +8E20 +ENDCHAR +STARTCHAR uniA1C7 +ENCODING 41415 +BBX 9 10 3 0 +BITMAP +A280 +AA80 +8880 +4100 +3E00 +0800 +7F00 +0800 +4800 +3000 +ENDCHAR +STARTCHAR uniA1C8 +ENCODING 41416 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +18 +16 +10 +7C +92 +92 +7C +10 +D0 +30 +ENDCHAR +STARTCHAR uniA1C9 +ENCODING 41417 +BBX 7 10 4 0 +BITMAP +18 +16 +10 +7C +92 +92 +7C +10 +D0 +30 +ENDCHAR +STARTCHAR uniA1CA +ENCODING 41418 +BBX 7 10 4 0 +BITMAP +38 +54 +54 +92 +FE +92 +FE +92 +92 +6C +ENDCHAR +STARTCHAR uniA1CB +ENCODING 41419 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +42 +92 +92 +82 +42 +02 +62 +5A +46 +40 +ENDCHAR +STARTCHAR uniA1CC +ENCODING 41420 +BBX 7 10 4 0 +BITMAP +42 +92 +92 +82 +42 +02 +62 +5A +46 +40 +ENDCHAR +STARTCHAR uniA1CD +ENCODING 41421 +BBX 10 10 3 0 +BITMAP +C040 +B840 +8740 +80C0 +0800 +0800 +0000 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA1CE +ENCODING 41422 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +9480 +9480 +8080 +8080 +8880 +8880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA1CF +ENCODING 41423 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +8880 +7700 +2200 +2200 +2A00 +2A00 +2200 +1C00 +ENDCHAR +STARTCHAR uniA1D0 +ENCODING 41424 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +2200 +2200 +2A00 +2A00 +2200 +1C00 +ENDCHAR +STARTCHAR uniA1D1 +ENCODING 41425 +BBX 13 11 1 0 +BITMAP +2008 +1010 +3820 +4440 +9280 +9100 +9280 +4440 +3820 +1010 +2008 +ENDCHAR +STARTCHAR uniA1D2 +ENCODING 41426 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +8020 +4440 +2480 +1100 +0A00 +0400 +0A00 +1100 +2480 +4440 +8020 +ENDCHAR +STARTCHAR uniA1D3 +ENCODING 41427 +BBX 11 11 2 0 +BITMAP +8020 +4440 +2480 +1100 +0A00 +0400 +0A00 +1100 +2480 +4440 +8020 +ENDCHAR +STARTCHAR uniA1D4 +ENCODING 41428 +BBX 13 10 1 0 +BITMAP +2108 +2108 +1110 +0FE0 +0100 +1900 +1700 +1100 +D500 +3500 +ENDCHAR +STARTCHAR uniA1D5 +ENCODING 41429 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +C040 +B040 +8C40 +8740 +84C0 +0400 +0400 +0000 +2080 +1F00 +ENDCHAR +STARTCHAR uniA1D6 +ENCODING 41430 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8740 +84C0 +0400 +0400 +0000 +2080 +1F00 +ENDCHAR +STARTCHAR uniA1D7 +ENCODING 41431 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8740 +84C0 +0400 +0400 +3400 +2C00 +2000 +ENDCHAR +STARTCHAR uniA1D8 +ENCODING 41432 +BBX 6 13 5 0 +BITMAP +78 +84 +00 +78 +84 +80 +80 +40 +30 +08 +04 +84 +78 +ENDCHAR +STARTCHAR uniA1D9 +ENCODING 41433 +BBX 6 10 5 0 +BITMAP +78 +84 +80 +80 +40 +30 +08 +04 +84 +78 +ENDCHAR +STARTCHAR uniA1DA +ENCODING 41434 +BBX 11 10 2 0 +BITMAP +3C00 +4200 +8120 +0120 +0120 +01E0 +0120 +E120 +9920 +8600 +ENDCHAR +STARTCHAR uniA1DB +ENCODING 41435 +BBX 8 13 4 0 +BITMAP +7C +82 +00 +3C +42 +81 +11 +11 +11 +01 +E1 +99 +86 +ENDCHAR +STARTCHAR uniA1DC +ENCODING 41436 +BBX 8 10 4 0 +BITMAP +3C +42 +81 +11 +11 +11 +01 +E1 +99 +86 +ENDCHAR +STARTCHAR uniA1DD +ENCODING 41437 +BBX 11 10 2 0 +BITMAP +0020 +0620 +05A0 +0460 +0400 +1F00 +8420 +8420 +4040 +3F80 +ENDCHAR +STARTCHAR uniA1DE +ENCODING 41438 +BBX 9 10 3 0 +BITMAP +3E00 +4900 +8880 +8880 +0800 +3E00 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA1DF +ENCODING 41439 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +A280 +A280 +9C80 +4100 +3E00 +0800 +0800 +0800 +4800 +3000 +ENDCHAR +STARTCHAR uniA1E0 +ENCODING 41440 +BBX 9 10 3 0 +BITMAP +A280 +A280 +9C80 +4100 +3E00 +0800 +0800 +0800 +4800 +3000 +ENDCHAR +STARTCHAR uniA1E1 +ENCODING 41441 +BBX 11 10 2 0 +BITMAP +0620 +05A0 +0460 +0400 +7FC0 +0400 +9520 +9520 +4040 +3F80 +ENDCHAR +STARTCHAR uniA1E2 +ENCODING 41442 +BBX 9 10 3 0 +BITMAP +A280 +9C80 +4100 +3E00 +0000 +0000 +3E00 +4100 +9C80 +A280 +ENDCHAR +STARTCHAR uniA1E3 +ENCODING 41443 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8080 +8080 +4100 +3E00 +0000 +0000 +3E00 +4100 +8080 +8080 +ENDCHAR +STARTCHAR uniA1E4 +ENCODING 41444 +BBX 9 10 3 0 +BITMAP +8080 +8080 +4100 +3E00 +0000 +0000 +3E00 +4100 +8080 +8080 +ENDCHAR +STARTCHAR uniA1E5 +ENCODING 41445 +BBX 9 11 3 0 +BITMAP +3E00 +4100 +8080 +A280 +9C80 +8080 +9C80 +A280 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA1E6 +ENCODING 41446 +BBX 13 9 1 0 +BITMAP +80C0 +4140 +2258 +1460 +0860 +1460 +2260 +4158 +80C0 +ENDCHAR +STARTCHAR uniA1E7 +ENCODING 41447 +BBX 13 13 1 0 +BITMAP +0700 +0880 +0000 +0000 +80D8 +4160 +2260 +1458 +0840 +1458 +2260 +4160 +80D8 +ENDCHAR +STARTCHAR uniA1E8 +ENCODING 41448 +BBX 13 9 1 0 +BITMAP +80D8 +4160 +2260 +1458 +0840 +1458 +2260 +4160 +80D8 +ENDCHAR +STARTCHAR uniA1E9 +ENCODING 41449 +BBX 9 11 3 0 +BITMAP +3E00 +4100 +9480 +9480 +8080 +FF80 +8080 +8880 +8880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA1EA +ENCODING 41450 +BBX 13 10 1 0 +BITMAP +8888 +8888 +8888 +8888 +7770 +2220 +2AA0 +2AA0 +2220 +1DC0 +ENDCHAR +STARTCHAR uniA1EB +ENCODING 41451 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +C400 +3420 +0440 +C480 +3500 +0600 +0400 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA1EC +ENCODING 41452 +BBX 11 10 2 0 +BITMAP +C400 +3420 +0440 +C480 +3500 +0600 +0400 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA1ED +ENCODING 41453 +BBX 9 9 3 0 +BITMAP +4100 +4100 +4100 +0000 +FF80 +0000 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA1EE +ENCODING 41454 +BBX 11 10 2 0 +BITMAP +0600 +0580 +0460 +0400 +0440 +07C0 +C440 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA1EF +ENCODING 41455 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +18 +16 +10 +90 +90 +90 +10 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA1F0 +ENCODING 41456 +BBX 7 10 4 0 +BITMAP +18 +16 +10 +90 +90 +90 +10 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA1F1 +ENCODING 41457 +BBX 11 10 2 0 +BITMAP +0600 +2580 +2460 +2400 +0400 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA1F2 +ENCODING 41458 +BBX 9 11 3 0 +BITMAP +0700 +C880 +2A80 +1A80 +1880 +1F80 +1880 +1A80 +2A80 +C880 +0700 +ENDCHAR +STARTCHAR uniA1F3 +ENCODING 41459 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8080 +8080 +FF80 +8080 +8080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA1F4 +ENCODING 41460 +BBX 9 10 3 0 +BITMAP +8080 +8080 +FF80 +8080 +8080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA1F5 +ENCODING 41461 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8080 +A280 +BE80 +A280 +A280 +9C80 +4100 +3E00 +ENDCHAR +STARTCHAR uniA1F6 +ENCODING 41462 +BBX 11 14 2 -1 +BITMAP +0E00 +1100 +0000 +4040 +4040 +7FC0 +4040 +4040 +4040 +4040 +5140 +2080 +5F40 +8020 +ENDCHAR +STARTCHAR uniA1F7 +ENCODING 41463 +BBX 11 11 2 -1 +BITMAP +4040 +4040 +7FC0 +4040 +4040 +4040 +4040 +5140 +2080 +5F40 +8020 +ENDCHAR +STARTCHAR uniA1F8 +ENCODING 41464 +BBX 6 10 5 0 +BITMAP +80 +BC +80 +BC +80 +BC +80 +8C +B0 +C0 +ENDCHAR +STARTCHAR uniA1F9 +ENCODING 41465 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0E00 +1100 +1100 +2080 +F880 +2080 +2080 +2480 +2480 +1B00 +ENDCHAR +STARTCHAR uniA1FA +ENCODING 41466 +BBX 8 10 4 0 +BITMAP +1C +22 +22 +41 +F1 +41 +41 +49 +49 +36 +ENDCHAR +STARTCHAR uniA1FB +ENCODING 41467 +BBX 9 11 3 0 +BITMAP +FF80 +8080 +4900 +2A00 +1400 +0800 +1400 +2A00 +4900 +8080 +FF80 +ENDCHAR +STARTCHAR uniA1FC +ENCODING 41468 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0020 +0620 +05A0 +0460 +C400 +B420 +8E20 +85A0 +8460 +0400 +ENDCHAR +STARTCHAR uniA1FD +ENCODING 41469 +BBX 11 10 2 0 +BITMAP +0020 +0620 +05A0 +0460 +C400 +B420 +8E20 +85A0 +8460 +0400 +ENDCHAR +STARTCHAR uniA1FE +ENCODING 41470 +BBX 11 10 2 0 +BITMAP +0400 +C460 +A4A0 +9520 +8E20 +8E20 +9520 +A4A0 +C460 +0400 +ENDCHAR +STARTCHAR uniA1FF +ENCODING 41471 +BBX 10 10 3 0 +BITMAP +1C00 +1300 +90C0 +9200 +9200 +F200 +9200 +90C0 +9300 +1C00 +ENDCHAR +STARTCHAR uniA200 +ENCODING 41472 +BBX 10 12 3 0 +BITMAP +1C00 +2200 +0000 +80C0 +4140 +2240 +1440 +FFC0 +1440 +2240 +4140 +80C0 +ENDCHAR +STARTCHAR uniA201 +ENCODING 41473 +BBX 10 9 3 0 +BITMAP +80C0 +4140 +2240 +1440 +FFC0 +1440 +2240 +4140 +80C0 +ENDCHAR +STARTCHAR uniA202 +ENCODING 41474 +BBX 11 10 2 0 +BITMAP +0600 +2580 +2460 +2400 +0440 +07C0 +C440 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA203 +ENCODING 41475 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +0300 +8AC0 +8A00 +8A00 +2200 +2380 +2240 +0240 +1A40 +0600 +ENDCHAR +STARTCHAR uniA204 +ENCODING 41476 +BBX 10 10 3 0 +BITMAP +0300 +8AC0 +8A00 +8A00 +2200 +2380 +2240 +0240 +1A40 +0600 +ENDCHAR +STARTCHAR uniA205 +ENCODING 41477 +BBX 7 12 4 0 +BITMAP +18 +16 +10 +38 +54 +38 +10 +D0 +30 +7C +82 +82 +ENDCHAR +STARTCHAR uniA206 +ENCODING 41478 +BBX 9 10 3 0 +BITMAP +1880 +1680 +F180 +1000 +1000 +1E00 +1000 +F000 +1000 +1000 +ENDCHAR +STARTCHAR uniA207 +ENCODING 41479 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +C000 +3600 +0580 +C400 +3400 +0400 +C700 +3480 +0480 +3480 +0C00 +ENDCHAR +STARTCHAR uniA208 +ENCODING 41480 +BBX 9 11 3 0 +BITMAP +C000 +3600 +0580 +C400 +3400 +0400 +C700 +3480 +0480 +3480 +0C00 +ENDCHAR +STARTCHAR uniA209 +ENCODING 41481 +BBX 9 11 3 0 +BITMAP +1800 +1600 +1180 +1000 +7F80 +9000 +9000 +9000 +7F80 +1000 +1000 +ENDCHAR +STARTCHAR uniA20A +ENCODING 41482 +BBX 9 10 3 0 +BITMAP +2200 +2200 +9C80 +8880 +8880 +7700 +2200 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uniA20B +ENCODING 41483 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +82 +82 +82 +82 +00 +00 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA20C +ENCODING 41484 +BBX 7 10 4 0 +BITMAP +82 +82 +82 +82 +00 +00 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA20D +ENCODING 41485 +BBX 9 10 3 0 +BITMAP +8080 +8080 +8080 +4100 +3E00 +0000 +8880 +8880 +8880 +8880 +ENDCHAR +STARTCHAR uniA20E +ENCODING 41486 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +4900 +3E00 +0800 +0800 +FF80 +0800 +0800 +ENDCHAR +STARTCHAR uniA20F +ENCODING 41487 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0080 +D280 +B280 +9280 +9A80 +9680 +0080 +1880 +0680 +0180 +ENDCHAR +STARTCHAR uniA210 +ENCODING 41488 +BBX 9 11 3 0 +BITMAP +1080 +D280 +B280 +9280 +9A80 +9680 +1080 +0080 +1880 +0680 +0180 +ENDCHAR +STARTCHAR uniA211 +ENCODING 41489 +BBX 9 10 3 0 +BITMAP +1F00 +2480 +2480 +0400 +0400 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA212 +ENCODING 41490 +BBX 7 14 3 0 +BITMAP +1C +22 +00 +02 +32 +2A +22 +FA +22 +A2 +62 +02 +1A +06 +ENDCHAR +STARTCHAR uniA213 +ENCODING 41491 +BBX 7 11 4 0 +BITMAP +02 +32 +2A +22 +FA +22 +A2 +62 +02 +1A +06 +ENDCHAR +STARTCHAR uniA214 +ENCODING 41492 +BBX 9 11 3 0 +BITMAP +3E00 +4100 +8080 +8080 +8080 +6300 +8080 +8880 +8880 +6B00 +0800 +ENDCHAR +STARTCHAR uniA215 +ENCODING 41493 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +02 +8A +52 +52 +52 +8A +02 +62 +1A +06 +ENDCHAR +STARTCHAR uniA216 +ENCODING 41494 +BBX 7 10 4 0 +BITMAP +02 +8A +52 +52 +52 +8A +02 +62 +1A +06 +ENDCHAR +STARTCHAR uniA217 +ENCODING 41495 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +7B00 +8680 +B240 +4A00 +B200 +8200 +B200 +4A00 +B200 +0200 +ENDCHAR +STARTCHAR uniA218 +ENCODING 41496 +BBX 10 10 3 0 +BITMAP +7B00 +8680 +B240 +4A00 +B200 +8200 +B200 +4A00 +B200 +0200 +ENDCHAR +STARTCHAR uniA219 +ENCODING 41497 +BBX 10 10 3 0 +BITMAP +2000 +2000 +2000 +E040 +B040 +8C40 +8340 +81C0 +0100 +0100 +ENDCHAR +STARTCHAR uniA21A +ENCODING 41498 +BBX 10 10 3 0 +BITMAP +1040 +1040 +1040 +1040 +1FC0 +1040 +1040 +D040 +B040 +8040 +ENDCHAR +STARTCHAR uniA21B +ENCODING 41499 +BBX 8 15 4 -1 +BITMAP +38 +44 +00 +7E +81 +80 +7E +01 +81 +7E +08 +7F +08 +7F +08 +ENDCHAR +STARTCHAR uniA21C +ENCODING 41500 +BBX 8 12 4 -1 +BITMAP +7E +81 +80 +7E +01 +81 +7E +08 +7F +08 +7F +08 +ENDCHAR +STARTCHAR uniA21D +ENCODING 41501 +BBX 11 10 2 0 +BITMAP +84E0 +8500 +8600 +8600 +0600 +0500 +C4E0 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA21E +ENCODING 41502 +BBX 8 10 4 0 +BITMAP +84 +84 +84 +04 +C4 +34 +0C +1E +21 +21 +ENDCHAR +STARTCHAR uniA21F +ENCODING 41503 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +60C0 +9120 +1100 +1100 +1100 +1100 +3F80 +5140 +9120 +8E20 +ENDCHAR +STARTCHAR uniA220 +ENCODING 41504 +BBX 11 10 2 0 +BITMAP +60C0 +9120 +1100 +1100 +1100 +1100 +3F80 +5140 +9120 +8E20 +ENDCHAR +STARTCHAR uniA221 +ENCODING 41505 +BBX 9 12 3 0 +BITMAP +7F00 +8080 +8880 +8880 +8080 +7F00 +0800 +FF80 +0800 +FF80 +2800 +1800 +ENDCHAR +STARTCHAR uniA222 +ENCODING 41506 +BBX 11 10 2 0 +BITMAP +0600 +0580 +C420 +B420 +8E20 +85A0 +8460 +0400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA223 +ENCODING 41507 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +02 +02 +02 +02 +02 +82 +82 +E2 +9A +86 +ENDCHAR +STARTCHAR uniA224 +ENCODING 41508 +BBX 7 10 4 0 +BITMAP +02 +02 +02 +02 +02 +82 +82 +E2 +9A +86 +ENDCHAR +STARTCHAR uniA225 +ENCODING 41509 +BBX 6 10 4 0 +BITMAP +84 +84 +84 +84 +04 +04 +C4 +B4 +8C +80 +ENDCHAR +STARTCHAR uniA226 +ENCODING 41510 +BBX 9 10 3 0 +BITMAP +5600 +5580 +0400 +FC00 +0400 +5400 +5400 +0400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA227 +ENCODING 41511 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +8080 +8080 +8880 +8880 +8080 +8080 +8880 +8880 +ENDCHAR +STARTCHAR uniA228 +ENCODING 41512 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8080 +8080 +8880 +8880 +8080 +8080 +8880 +8880 +ENDCHAR +STARTCHAR uniA229 +ENCODING 41513 +BBX 11 10 2 0 +BITMAP +6580 +9560 +9100 +9F00 +9100 +9500 +9500 +6100 +0D00 +0300 +ENDCHAR +STARTCHAR uniA22A +ENCODING 41514 +BBX 10 10 3 0 +BITMAP +0040 +4C40 +AB40 +A8C0 +A800 +7800 +2800 +4800 +8800 +0800 +ENDCHAR +STARTCHAR uniA22B +ENCODING 41515 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +C180 +3680 +0880 +3680 +C180 +0000 +C180 +3680 +0880 +3680 +C180 +ENDCHAR +STARTCHAR uniA22C +ENCODING 41516 +BBX 9 11 3 0 +BITMAP +C180 +3680 +0880 +3680 +C180 +0000 +C180 +3680 +0880 +3680 +C180 +ENDCHAR +STARTCHAR uniA22D +ENCODING 41517 +BBX 9 10 3 0 +BITMAP +C180 +3680 +0880 +3680 +C180 +0800 +0800 +FF80 +0800 +0800 +ENDCHAR +STARTCHAR uniA22E +ENCODING 41518 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +7F00 +8080 +8080 +8080 +7F00 +0000 +7F00 +8080 +8080 +8080 +7F00 +ENDCHAR +STARTCHAR uniA22F +ENCODING 41519 +BBX 9 11 3 0 +BITMAP +7F00 +8080 +8080 +8080 +7F00 +0000 +7F00 +8080 +8080 +8080 +7F00 +ENDCHAR +STARTCHAR uniA230 +ENCODING 41520 +BBX 14 13 1 0 +BITMAP +0700 +0880 +0000 +0C30 +7B28 +88E4 +8820 +4820 +3820 +4820 +8820 +8820 +7820 +ENDCHAR +STARTCHAR uniA231 +ENCODING 41521 +BBX 14 10 1 0 +BITMAP +0C30 +7B28 +88E4 +8820 +4820 +3820 +4820 +8820 +8820 +7820 +ENDCHAR +STARTCHAR uniA232 +ENCODING 41522 +BBX 9 10 3 0 +BITMAP +1F00 +2080 +2080 +3F80 +2080 +2880 +3080 +6080 +A080 +1F00 +ENDCHAR +STARTCHAR uniA233 +ENCODING 41523 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +C300 +B2C0 +8200 +8200 +8200 +FE00 +9200 +9200 +9200 +9200 +ENDCHAR +STARTCHAR uniA234 +ENCODING 41524 +BBX 10 10 3 0 +BITMAP +C300 +B2C0 +8200 +8200 +8200 +FE00 +9200 +9200 +9200 +9200 +ENDCHAR +STARTCHAR uniA235 +ENCODING 41525 +BBX 12 10 2 0 +BITMAP +0430 +0440 +0480 +0480 +0780 +0480 +C480 +B440 +8C30 +8000 +ENDCHAR +STARTCHAR uniA236 +ENCODING 41526 +BBX 11 14 2 0 +BITMAP +0E00 +1100 +0400 +3F80 +4440 +4440 +3F80 +8420 +8420 +3F80 +4440 +4440 +3F80 +0400 +ENDCHAR +STARTCHAR uniA237 +ENCODING 41527 +BBX 11 12 2 0 +BITMAP +0400 +3F80 +4440 +4440 +3F80 +8420 +8420 +3F80 +4440 +4440 +3F80 +0400 +ENDCHAR +STARTCHAR uniA238 +ENCODING 41528 +BBX 7 9 4 0 +BITMAP +7C +82 +82 +82 +7C +10 +7C +92 +92 +ENDCHAR +STARTCHAR uniA239 +ENCODING 41529 +BBX 7 9 4 0 +BITMAP +7C +92 +FE +92 +7C +10 +7C +92 +92 +ENDCHAR +STARTCHAR uniA23A +ENCODING 41530 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +1F00 +2080 +2080 +2080 +1F00 +0400 +1C00 +1000 +7C00 +9200 +9200 +ENDCHAR +STARTCHAR uniA23B +ENCODING 41531 +BBX 9 11 3 0 +BITMAP +1F00 +2080 +2080 +2080 +1F00 +0400 +1C00 +1000 +7C00 +9200 +9200 +ENDCHAR +STARTCHAR uniA23C +ENCODING 41532 +BBX 10 10 3 0 +BITMAP +03C0 +0400 +1C00 +2200 +F1C0 +2200 +1C00 +0400 +0400 +03C0 +ENDCHAR +STARTCHAR uniA23D +ENCODING 41533 +BBX 9 16 3 -2 +BITMAP +1C00 +2200 +0000 +0380 +0400 +0480 +3C80 +4400 +9380 +9000 +9380 +4400 +3C80 +0480 +0400 +0380 +ENDCHAR +STARTCHAR uniA23E +ENCODING 41534 +BBX 9 13 3 0 +BITMAP +0380 +0400 +0480 +3C80 +4400 +9380 +9000 +9380 +4400 +3C80 +0480 +0400 +0380 +ENDCHAR +STARTCHAR uniA23F +ENCODING 41535 +BBX 11 10 2 0 +BITMAP +3EE0 +4100 +8280 +8280 +82E0 +8280 +8280 +8280 +4100 +3EE0 +ENDCHAR +STARTCHAR uniA240 +ENCODING 41536 +BBX 11 10 2 0 +BITMAP +2080 +AAA0 +6AC0 +64C0 +60C0 +6AC0 +6AC0 +A4A0 +2080 +1F00 +ENDCHAR +STARTCHAR uniA241 +ENCODING 41537 +BBX 7 12 4 0 +BITMAP +38 +44 +00 +6E +10 +2C +20 +FE +20 +2C +10 +6E +ENDCHAR +STARTCHAR uniA242 +ENCODING 41538 +BBX 7 9 4 0 +BITMAP +6E +10 +2C +20 +FE +20 +2C +10 +6E +ENDCHAR +STARTCHAR uniA243 +ENCODING 41539 +BBX 9 10 3 0 +BITMAP +2080 +2080 +1F00 +0400 +3F80 +0400 +3F80 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uniA244 +ENCODING 41540 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +A080 +A080 +A080 +AC80 +B480 +A480 +8480 +8480 +4500 +3E00 +ENDCHAR +STARTCHAR uniA245 +ENCODING 41541 +BBX 9 10 3 0 +BITMAP +A080 +A080 +A080 +AC80 +B480 +A480 +8480 +8480 +4500 +3E00 +ENDCHAR +STARTCHAR uniA246 +ENCODING 41542 +BBX 8 8 4 1 +BITMAP +E1 +99 +87 +00 +00 +E1 +99 +87 +ENDCHAR +STARTCHAR uniA247 +ENCODING 41543 +BBX 11 14 2 0 +BITMAP +0E00 +1100 +0000 +0400 +C460 +A4A0 +9120 +8A20 +8420 +8A20 +9120 +A4A0 +C460 +0400 +ENDCHAR +STARTCHAR uniA248 +ENCODING 41544 +BBX 11 11 2 0 +BITMAP +0400 +C460 +A4A0 +9120 +8A20 +8420 +8A20 +9120 +A4A0 +C460 +0400 +ENDCHAR +STARTCHAR uniA249 +ENCODING 41545 +BBX 9 11 3 0 +BITMAP +FF80 +0200 +3E00 +4200 +4200 +4200 +3E00 +4200 +4200 +4200 +3E00 +ENDCHAR +STARTCHAR uniA24A +ENCODING 41546 +BBX 6 10 4 0 +BITMAP +04 +94 +94 +94 +04 +F4 +04 +C4 +34 +0C +ENDCHAR +STARTCHAR uniA24B +ENCODING 41547 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0180 +0200 +0480 +1C80 +1780 +1400 +1400 +1200 +D180 +3000 +ENDCHAR +STARTCHAR uniA24C +ENCODING 41548 +BBX 9 10 3 0 +BITMAP +0180 +0200 +0480 +1C80 +1780 +1400 +1400 +1200 +D180 +3000 +ENDCHAR +STARTCHAR uniA24D +ENCODING 41549 +BBX 8 10 4 0 +BITMAP +70 +8A +8A +88 +8F +88 +8A +8A +88 +70 +ENDCHAR +STARTCHAR uniA24E +ENCODING 41550 +BBX 12 10 2 0 +BITMAP +4300 +82C0 +9230 +8A00 +4600 +0200 +1F80 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uniA24F +ENCODING 41551 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +0000 +4300 +82C0 +9230 +8A00 +4600 +0200 +0200 +6200 +1A00 +0600 +ENDCHAR +STARTCHAR uniA250 +ENCODING 41552 +BBX 12 10 2 0 +BITMAP +4300 +82C0 +9230 +8A00 +4600 +0200 +0200 +6200 +1A00 +0600 +ENDCHAR +STARTCHAR uniA251 +ENCODING 41553 +BBX 12 10 2 0 +BITMAP +4B00 +8AC0 +9230 +8A00 +4600 +0A00 +0A00 +6200 +1A00 +0600 +ENDCHAR +STARTCHAR uniA252 +ENCODING 41554 +BBX 11 10 2 0 +BITMAP +8A20 +8A20 +8A20 +71C0 +0000 +2080 +2080 +2080 +1100 +0E00 +ENDCHAR +STARTCHAR uniA253 +ENCODING 41555 +BBX 6 13 5 0 +BITMAP +70 +88 +00 +3C +40 +80 +80 +80 +80 +80 +80 +40 +3C +ENDCHAR +STARTCHAR uniA254 +ENCODING 41556 +BBX 6 10 5 0 +BITMAP +3C +40 +80 +80 +80 +80 +80 +80 +40 +3C +ENDCHAR +STARTCHAR uniA255 +ENCODING 41557 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +0000 +1C00 +2200 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uniA256 +ENCODING 41558 +BBX 7 10 4 0 +BITMAP +FC +02 +7A +82 +72 +0A +F2 +02 +02 +FC +ENDCHAR +STARTCHAR uniA257 +ENCODING 41559 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +18 +16 +90 +50 +30 +10 +10 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA258 +ENCODING 41560 +BBX 7 10 4 0 +BITMAP +18 +16 +90 +50 +30 +10 +10 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA259 +ENCODING 41561 +BBX 11 9 2 0 +BITMAP +C060 +A0A0 +9120 +8A20 +8420 +8A20 +9120 +A0A0 +C060 +ENDCHAR +STARTCHAR uniA25A +ENCODING 41562 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +4900 +4900 +3E00 +7F00 +8880 +8880 +8880 +7F00 +3E00 +4900 +4900 +ENDCHAR +STARTCHAR uniA25B +ENCODING 41563 +BBX 9 11 3 0 +BITMAP +4900 +4900 +3E00 +7F00 +8880 +8880 +8880 +7F00 +3E00 +4900 +4900 +ENDCHAR +STARTCHAR uniA25C +ENCODING 41564 +BBX 11 10 2 0 +BITMAP +0600 +C580 +B460 +8C00 +8400 +0400 +C400 +B400 +8C00 +8400 +ENDCHAR +STARTCHAR uniA25D +ENCODING 41565 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +0C00 +2B00 +28C0 +2800 +0A00 +4A00 +2A00 +9880 +8880 +7F00 +ENDCHAR +STARTCHAR uniA25E +ENCODING 41566 +BBX 10 10 3 0 +BITMAP +0C00 +2B00 +28C0 +2800 +0A00 +4A00 +2A00 +9880 +8880 +7F00 +ENDCHAR +STARTCHAR uniA25F +ENCODING 41567 +BBX 14 10 1 0 +BITMAP +0300 +02C0 +2210 +2210 +FA7C +2210 +2210 +0200 +1A00 +0600 +ENDCHAR +STARTCHAR uniA260 +ENCODING 41568 +BBX 11 10 2 0 +BITMAP +8080 +8080 +E0A0 +98A0 +86A0 +81C0 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA261 +ENCODING 41569 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +C440 +B440 +8C40 +8740 +84C0 +0400 +0400 +3400 +2C00 +2000 +ENDCHAR +STARTCHAR uniA262 +ENCODING 41570 +BBX 10 10 3 0 +BITMAP +C440 +B440 +8C40 +8740 +84C0 +0400 +0400 +3400 +2C00 +2000 +ENDCHAR +STARTCHAR uniA263 +ENCODING 41571 +BBX 11 10 2 0 +BITMAP +0200 +2380 +2240 +FA20 +2220 +2220 +0240 +6380 +1A00 +0600 +ENDCHAR +STARTCHAR uniA264 +ENCODING 41572 +BBX 11 10 2 0 +BITMAP +3F80 +4040 +9120 +8A20 +0400 +0400 +8A20 +9120 +4040 +3F80 +ENDCHAR +STARTCHAR uniA265 +ENCODING 41573 +BBX 5 14 5 0 +BITMAP +70 +88 +00 +70 +88 +A8 +A8 +88 +F8 +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uniA266 +ENCODING 41574 +BBX 5 11 5 0 +BITMAP +70 +88 +A8 +A8 +88 +F8 +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uniA267 +ENCODING 41575 +BBX 9 10 3 0 +BITMAP +E380 +1400 +0800 +0800 +0800 +0800 +0800 +0800 +1400 +E380 +ENDCHAR +STARTCHAR uniA268 +ENCODING 41576 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +38 +44 +44 +44 +7C +82 +92 +92 +82 +7C +ENDCHAR +STARTCHAR uniA269 +ENCODING 41577 +BBX 7 10 4 0 +BITMAP +38 +44 +44 +44 +7C +82 +92 +92 +82 +7C +ENDCHAR +STARTCHAR uniA26A +ENCODING 41578 +BBX 10 10 3 0 +BITMAP +0440 +1480 +1500 +1600 +9700 +6480 +0480 +C480 +3700 +0C00 +ENDCHAR +STARTCHAR uniA26B +ENCODING 41579 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +02 +22 +22 +FA +22 +22 +02 +62 +1A +06 +ENDCHAR +STARTCHAR uniA26C +ENCODING 41580 +BBX 7 10 4 0 +BITMAP +02 +22 +22 +FA +22 +22 +02 +62 +1A +06 +ENDCHAR +STARTCHAR uniA26D +ENCODING 41581 +BBX 9 10 3 0 +BITMAP +7000 +8800 +8800 +F900 +8A80 +FE80 +8A80 +F900 +8800 +7000 +ENDCHAR +STARTCHAR uniA26E +ENCODING 41582 +BBX 10 10 3 0 +BITMAP +4C00 +8B00 +88C0 +4800 +3800 +4800 +8800 +8800 +4800 +0800 +ENDCHAR +STARTCHAR uniA26F +ENCODING 41583 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +8C00 +8B00 +48C0 +3800 +4800 +8800 +8800 +0800 +6800 +1800 +ENDCHAR +STARTCHAR uniA270 +ENCODING 41584 +BBX 10 10 3 0 +BITMAP +8C00 +8B00 +48C0 +3800 +4800 +8800 +8800 +0800 +6800 +1800 +ENDCHAR +STARTCHAR uniA271 +ENCODING 41585 +BBX 9 10 3 0 +BITMAP +0280 +1A80 +1680 +1380 +1200 +1200 +1000 +7C00 +9200 +9200 +ENDCHAR +STARTCHAR uniA272 +ENCODING 41586 +BBX 10 13 2 0 +BITMAP +0E00 +1100 +0000 +0700 +0A80 +0F80 +0A80 +C700 +B200 +8F00 +0880 +1240 +1240 +ENDCHAR +STARTCHAR uniA273 +ENCODING 41587 +BBX 10 10 3 0 +BITMAP +0700 +0A80 +0F80 +0A80 +C700 +B200 +8F00 +0880 +1240 +1240 +ENDCHAR +STARTCHAR uniA274 +ENCODING 41588 +BBX 10 10 3 0 +BITMAP +0700 +0880 +0880 +0880 +C700 +B200 +8F00 +0880 +1240 +1240 +ENDCHAR +STARTCHAR uniA275 +ENCODING 41589 +BBX 10 10 3 0 +BITMAP +4C00 +AB00 +A8C0 +4800 +0800 +FF80 +0800 +FF80 +0800 +0800 +ENDCHAR +STARTCHAR uniA276 +ENCODING 41590 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0600 +6580 +1460 +4C00 +AC00 +AC00 +4C00 +1400 +6400 +0400 +ENDCHAR +STARTCHAR uniA277 +ENCODING 41591 +BBX 11 10 2 0 +BITMAP +0600 +6580 +1460 +4C00 +AC00 +AC00 +4C00 +1400 +6400 +0400 +ENDCHAR +STARTCHAR uniA278 +ENCODING 41592 +BBX 9 10 3 0 +BITMAP +0800 +FF00 +4880 +A880 +4880 +FF00 +0800 +3E00 +4900 +4900 +ENDCHAR +STARTCHAR uniA279 +ENCODING 41593 +BBX 10 10 3 0 +BITMAP +7800 +81C0 +8200 +4400 +3C00 +4400 +8200 +81C0 +8000 +7800 +ENDCHAR +STARTCHAR uniA27A +ENCODING 41594 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +3E00 +4100 +9C80 +A280 +A280 +A280 +A280 +9C80 +4100 +3E00 +ENDCHAR +STARTCHAR uniA27B +ENCODING 41595 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +9C80 +A280 +A280 +A280 +A280 +9C80 +4100 +3E00 +ENDCHAR +STARTCHAR uniA27C +ENCODING 41596 +BBX 11 9 2 0 +BITMAP +8080 +4100 +2240 +14A0 +08A0 +14A0 +2240 +4100 +8080 +ENDCHAR +STARTCHAR uniA27D +ENCODING 41597 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +0000 +30C0 +2CA0 +2390 +2080 +2080 +7080 +A880 +A880 +A880 +2080 +ENDCHAR +STARTCHAR uniA27E +ENCODING 41598 +BBX 12 10 2 0 +BITMAP +30C0 +2CA0 +2390 +2080 +2080 +7080 +A880 +A880 +A880 +2080 +ENDCHAR +STARTCHAR uniA27F +ENCODING 41599 +BBX 7 10 4 0 +BITMAP +38 +44 +E4 +44 +E4 +44 +38 +44 +92 +92 +ENDCHAR +STARTCHAR uniA280 +ENCODING 41600 +BBX 12 10 2 0 +BITMAP +0880 +0880 +3890 +2E90 +A9D0 +68B0 +0A80 +0A80 +0880 +0700 +ENDCHAR +STARTCHAR uniA281 +ENCODING 41601 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +C040 +B040 +8C40 +8340 +80C0 +0000 +3F00 +0000 +0000 +3F00 +ENDCHAR +STARTCHAR uniA282 +ENCODING 41602 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8340 +80C0 +0000 +3F00 +0000 +0000 +3F00 +ENDCHAR +STARTCHAR uniA283 +ENCODING 41603 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8340 +80C0 +0000 +2100 +2100 +2100 +2100 +ENDCHAR +STARTCHAR uniA284 +ENCODING 41604 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +E7 +18 +18 +25 +25 +25 +18 +58 +24 +D3 +ENDCHAR +STARTCHAR uniA285 +ENCODING 41605 +BBX 8 10 4 0 +BITMAP +E7 +18 +18 +25 +25 +25 +18 +58 +24 +D3 +ENDCHAR +STARTCHAR uniA286 +ENCODING 41606 +BBX 8 11 4 0 +BITMAP +1C +13 +F8 +14 +F4 +14 +F8 +10 +38 +54 +54 +ENDCHAR +STARTCHAR uniA287 +ENCODING 41607 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +71 +89 +8A +7C +08 +3E +08 +BE +88 +70 +ENDCHAR +STARTCHAR uniA288 +ENCODING 41608 +BBX 8 10 4 0 +BITMAP +71 +89 +8A +7C +08 +3E +08 +BE +88 +70 +ENDCHAR +STARTCHAR uniA289 +ENCODING 41609 +BBX 7 9 4 0 +BITMAP +44 +44 +28 +2A +12 +AA +68 +64 +54 +ENDCHAR +STARTCHAR uniA28A +ENCODING 41610 +BBX 10 14 3 0 +BITMAP +1C00 +2200 +0000 +C000 +3600 +0580 +C440 +3400 +0400 +C400 +3400 +1F00 +2480 +2480 +ENDCHAR +STARTCHAR uniA28B +ENCODING 41611 +BBX 10 12 3 0 +BITMAP +C000 +3600 +0580 +C440 +3400 +0400 +C400 +3400 +0400 +1F00 +2480 +2480 +ENDCHAR +STARTCHAR uniA28C +ENCODING 41612 +BBX 10 10 3 0 +BITMAP +0C00 +0B00 +08C0 +0A00 +0A00 +E880 +9C80 +8B80 +0800 +0800 +ENDCHAR +STARTCHAR uniA28D +ENCODING 41613 +BBX 9 11 3 0 +BITMAP +8880 +8880 +4900 +3E00 +0800 +A800 +A800 +F800 +A800 +A800 +0800 +ENDCHAR +STARTCHAR uniA28E +ENCODING 41614 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +2200 +2200 +2200 +9C80 +8880 +8880 +7700 +2200 +5500 +5500 +ENDCHAR +STARTCHAR uniA28F +ENCODING 41615 +BBX 9 10 3 0 +BITMAP +2200 +2200 +2200 +9C80 +8880 +8880 +7700 +2200 +5500 +5500 +ENDCHAR +STARTCHAR uniA290 +ENCODING 41616 +BBX 8 10 4 0 +BITMAP +3D +43 +81 +90 +90 +90 +90 +81 +42 +3C +ENDCHAR +STARTCHAR uniA291 +ENCODING 41617 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +A200 +A200 +A200 +FFC0 +A200 +A200 +A200 +0F80 +0200 +0F80 +ENDCHAR +STARTCHAR uniA292 +ENCODING 41618 +BBX 10 10 3 0 +BITMAP +A200 +A200 +A200 +FFC0 +A200 +A200 +A200 +0F80 +0200 +0F80 +ENDCHAR +STARTCHAR uniA293 +ENCODING 41619 +BBX 10 10 3 0 +BITMAP +0C00 +AB00 +A8C0 +A800 +FF00 +A800 +A800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA294 +ENCODING 41620 +BBX 10 11 3 0 +BITMAP +0040 +0C40 +EB40 +18C0 +5800 +5B80 +1C00 +ED00 +0D00 +0C00 +0B80 +ENDCHAR +STARTCHAR uniA295 +ENCODING 41621 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +03C0 +3C00 +4400 +83C0 +A400 +A400 +83C0 +4400 +3C00 +03C0 +ENDCHAR +STARTCHAR uniA296 +ENCODING 41622 +BBX 10 10 3 0 +BITMAP +03C0 +3C00 +4400 +83C0 +A400 +A400 +83C0 +4400 +3C00 +03C0 +ENDCHAR +STARTCHAR uniA297 +ENCODING 41623 +BBX 9 10 3 0 +BITMAP +2200 +2200 +2200 +9C80 +8880 +8880 +7700 +0000 +0000 +7700 +ENDCHAR +STARTCHAR uniA298 +ENCODING 41624 +BBX 6 13 4 0 +BITMAP +38 +44 +00 +38 +44 +44 +E4 +44 +44 +E4 +44 +44 +38 +ENDCHAR +STARTCHAR uniA299 +ENCODING 41625 +BBX 6 10 4 0 +BITMAP +38 +44 +44 +E4 +44 +44 +E4 +44 +44 +38 +ENDCHAR +STARTCHAR uniA29A +ENCODING 41626 +BBX 12 10 2 0 +BITMAP +0400 +0460 +0490 +04F0 +0490 +07F0 +0490 +C460 +3400 +0C00 +ENDCHAR +STARTCHAR uniA29B +ENCODING 41627 +BBX 7 10 4 0 +BITMAP +10 +28 +44 +82 +FE +10 +28 +44 +82 +FE +ENDCHAR +STARTCHAR uniA29C +ENCODING 41628 +BBX 13 13 1 0 +BITMAP +0700 +0880 +0000 +1008 +10E8 +1158 +1240 +1440 +1840 +1440 +D240 +B140 +80C0 +ENDCHAR +STARTCHAR uniA29D +ENCODING 41629 +BBX 13 10 1 0 +BITMAP +1008 +10E8 +1158 +1240 +1440 +1840 +1440 +D240 +B140 +80C0 +ENDCHAR +STARTCHAR uniA29E +ENCODING 41630 +BBX 9 10 3 0 +BITMAP +7F00 +8080 +8080 +7F00 +8080 +8080 +7F00 +8080 +8080 +7F00 +ENDCHAR +STARTCHAR uniA29F +ENCODING 41631 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +0C00 +0B00 +08C0 +0800 +BE80 +8880 +8880 +BE80 +0800 +0800 +ENDCHAR +STARTCHAR uniA2A0 +ENCODING 41632 +BBX 10 10 3 0 +BITMAP +0C00 +0B00 +08C0 +0800 +BE80 +8880 +8880 +BE80 +0800 +0800 +ENDCHAR +STARTCHAR uniA2A1 +ENCODING 41633 +BBX 7 11 4 0 +BITMAP +04 +C4 +B4 +8C +80 +BE +A2 +94 +88 +94 +22 +ENDCHAR +STARTCHAR uniA2A2 +ENCODING 41634 +BBX 7 10 4 0 +BITMAP +70 +8A +8A +8C +88 +8A +8A +8C +88 +70 +ENDCHAR +STARTCHAR uniA2A3 +ENCODING 41635 +BBX 5 12 5 0 +BITMAP +70 +88 +00 +C8 +38 +C8 +38 +00 +C8 +38 +C8 +38 +ENDCHAR +STARTCHAR uniA2A4 +ENCODING 41636 +BBX 5 9 5 0 +BITMAP +C8 +38 +C8 +38 +00 +C8 +38 +C8 +38 +ENDCHAR +STARTCHAR uniA2A5 +ENCODING 41637 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8880 +8880 +0000 +0000 +3E00 +4100 +8880 +8880 +ENDCHAR +STARTCHAR uniA2A6 +ENCODING 41638 +BBX 13 12 1 0 +BITMAP +0700 +0880 +0000 +C060 +A0A8 +9128 +0A30 +0420 +0A28 +1128 +20B0 +4060 +ENDCHAR +STARTCHAR uniA2A7 +ENCODING 41639 +BBX 13 9 1 0 +BITMAP +C060 +A0A8 +9128 +0A30 +0420 +0A28 +1128 +20B0 +4060 +ENDCHAR +STARTCHAR uniA2A8 +ENCODING 41640 +BBX 10 11 3 0 +BITMAP +1240 +0A80 +0700 +0A80 +1240 +1A00 +9600 +5400 +3800 +5400 +9200 +ENDCHAR +STARTCHAR uniA2A9 +ENCODING 41641 +BBX 6 12 4 0 +BITMAP +38 +44 +00 +44 +44 +28 +28 +10 +28 +A8 +84 +74 +ENDCHAR +STARTCHAR uniA2AA +ENCODING 41642 +BBX 6 9 4 0 +BITMAP +44 +44 +28 +28 +10 +28 +A8 +84 +74 +ENDCHAR +STARTCHAR uniA2AB +ENCODING 41643 +BBX 8 10 4 0 +BITMAP +0F +90 +90 +0F +90 +90 +0F +90 +90 +0F +ENDCHAR +STARTCHAR uniA2AC +ENCODING 41644 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +0000 +0F00 +9030 +9040 +0880 +8780 +8880 +1040 +9030 +9000 +0F00 +ENDCHAR +STARTCHAR uniA2AD +ENCODING 41645 +BBX 12 10 2 0 +BITMAP +0F00 +9030 +9040 +0880 +8780 +8880 +1040 +9030 +9000 +0F00 +ENDCHAR +STARTCHAR uniA2AE +ENCODING 41646 +BBX 10 10 3 0 +BITMAP +C300 +B280 +8E40 +8200 +9200 +9200 +9200 +8200 +8200 +8200 +ENDCHAR +STARTCHAR uniA2AF +ENCODING 41647 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +1800 +1600 +1180 +1000 +1000 +1000 +FE00 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uniA2B0 +ENCODING 41648 +BBX 9 10 3 0 +BITMAP +1800 +1600 +1180 +1000 +1000 +1000 +FE00 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uniA2B1 +ENCODING 41649 +BBX 7 11 4 0 +BITMAP +FE +82 +44 +28 +28 +10 +28 +28 +44 +82 +FE +ENDCHAR +STARTCHAR uniA2B2 +ENCODING 41650 +BBX 14 11 1 0 +BITMAP +3C10 +2398 +2074 +2310 +2290 +2210 +2210 +2210 +2A10 +A610 +6000 +ENDCHAR +STARTCHAR uniA2B3 +ENCODING 41651 +BBX 7 13 5 0 +BITMAP +70 +88 +00 +70 +88 +8A +8A +8A +8C +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA2B4 +ENCODING 41652 +BBX 7 10 5 0 +BITMAP +70 +88 +8A +8A +8A +8C +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA2B5 +ENCODING 41653 +BBX 9 10 3 0 +BITMAP +1800 +1600 +1180 +1000 +1000 +7C00 +8200 +FE00 +8200 +7C00 +ENDCHAR +STARTCHAR uniA2B6 +ENCODING 41654 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8480 +B480 +8C80 +8480 +B480 +8C80 +4100 +3E00 +ENDCHAR +STARTCHAR uniA2B7 +ENCODING 41655 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +3E00 +4100 +8080 +8C80 +8A80 +8880 +A880 +9880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA2B8 +ENCODING 41656 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8080 +8C80 +8A80 +8880 +A880 +9880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA2B9 +ENCODING 41657 +BBX 10 10 3 0 +BITMAP +3C00 +4200 +9940 +1540 +1140 +5180 +3100 +E100 +9900 +8600 +ENDCHAR +STARTCHAR uniA2BA +ENCODING 41658 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +0E00 +0980 +0800 +0E00 +0900 +3E00 +4800 +3800 +0800 +C800 +3800 +ENDCHAR +STARTCHAR uniA2BB +ENCODING 41659 +BBX 9 11 3 0 +BITMAP +0E00 +0980 +0800 +0E00 +0900 +3E00 +4800 +3800 +0800 +C800 +3800 +ENDCHAR +STARTCHAR uniA2BC +ENCODING 41660 +BBX 7 10 4 0 +BITMAP +C6 +28 +10 +28 +28 +44 +44 +92 +92 +92 +ENDCHAR +STARTCHAR uniA2BD +ENCODING 41661 +BBX 11 10 2 0 +BITMAP +0880 +0880 +08A0 +08A0 +3CA0 +ABA0 +68E0 +08A0 +08A0 +0700 +ENDCHAR +STARTCHAR uniA2BE +ENCODING 41662 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0700 +0880 +08A0 +08A0 +3CA0 +ABA0 +68E0 +08A0 +08A0 +0700 +ENDCHAR +STARTCHAR uniA2BF +ENCODING 41663 +BBX 11 10 2 0 +BITMAP +0700 +0880 +08A0 +08A0 +3CA0 +ABA0 +68E0 +08A0 +08A0 +0700 +ENDCHAR +STARTCHAR uniA2C0 +ENCODING 41664 +BBX 9 10 3 0 +BITMAP +3880 +4480 +4480 +4480 +4480 +FF80 +4480 +4480 +4480 +3880 +ENDCHAR +STARTCHAR uniA2C1 +ENCODING 41665 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +3E00 +4100 +9C80 +8280 +9C80 +8280 +9C80 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA2C2 +ENCODING 41666 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +9C80 +8280 +9C80 +8280 +9C80 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA2C3 +ENCODING 41667 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +0000 +2200 +AA80 +AA80 +8880 +7700 +ENDCHAR +STARTCHAR uniA2C4 +ENCODING 41668 +BBX 12 10 2 0 +BITMAP +4710 +8890 +8890 +4890 +38F0 +4890 +8890 +8890 +4890 +0710 +ENDCHAR +STARTCHAR uniA2C5 +ENCODING 41669 +BBX 13 12 1 0 +BITMAP +0700 +0880 +0000 +80C0 +4140 +2248 +9448 +8878 +9448 +2248 +4140 +80C0 +ENDCHAR +STARTCHAR uniA2C6 +ENCODING 41670 +BBX 13 9 1 0 +BITMAP +80C0 +4140 +2248 +9448 +8878 +9448 +2248 +4140 +80C0 +ENDCHAR +STARTCHAR uniA2C7 +ENCODING 41671 +BBX 9 10 3 0 +BITMAP +8600 +9D80 +8400 +4400 +3C00 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA2C8 +ENCODING 41672 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +70 +89 +89 +89 +8F +89 +89 +89 +88 +70 +ENDCHAR +STARTCHAR uniA2C9 +ENCODING 41673 +BBX 8 10 4 0 +BITMAP +70 +89 +89 +89 +8F +89 +89 +89 +88 +70 +ENDCHAR +STARTCHAR uniA2CA +ENCODING 41674 +BBX 7 10 4 0 +BITMAP +82 +42 +22 +12 +CA +A6 +90 +88 +84 +82 +ENDCHAR +STARTCHAR uniA2CB +ENCODING 41675 +BBX 6 12 5 0 +BITMAP +70 +88 +00 +88 +88 +50 +54 +24 +54 +50 +88 +88 +ENDCHAR +STARTCHAR uniA2CC +ENCODING 41676 +BBX 6 9 5 0 +BITMAP +88 +88 +50 +54 +24 +54 +50 +88 +88 +ENDCHAR +STARTCHAR uniA2CD +ENCODING 41677 +BBX 7 10 4 0 +BITMAP +18 +16 +10 +10 +10 +10 +10 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA2CE +ENCODING 41678 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +C180 +3600 +0800 +3600 +C180 +0800 +0800 +3E00 +0800 +0800 +ENDCHAR +STARTCHAR uniA2CF +ENCODING 41679 +BBX 9 10 3 0 +BITMAP +C180 +3600 +0800 +3600 +C180 +0800 +0800 +3E00 +0800 +0800 +ENDCHAR +STARTCHAR uniA2D0 +ENCODING 41680 +BBX 10 10 3 0 +BITMAP +C040 +B040 +AC40 +A340 +A2C0 +2200 +3E00 +2200 +2200 +2200 +ENDCHAR +STARTCHAR uniA2D1 +ENCODING 41681 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +4000 +2180 +9140 +4120 +2100 +0F00 +1100 +2100 +2100 +1100 +0F00 +ENDCHAR +STARTCHAR uniA2D2 +ENCODING 41682 +BBX 11 11 2 0 +BITMAP +4000 +2180 +9140 +4120 +2100 +0F00 +1100 +2100 +2100 +1100 +0F00 +ENDCHAR +STARTCHAR uniA2D3 +ENCODING 41683 +BBX 6 10 5 0 +BITMAP +04 +C4 +B4 +8C +80 +A4 +A4 +80 +A4 +A4 +ENDCHAR +STARTCHAR uniA2D4 +ENCODING 41684 +BBX 9 11 3 0 +BITMAP +7F00 +0800 +8A00 +4900 +2880 +8A00 +4900 +2880 +8A00 +4900 +2880 +ENDCHAR +STARTCHAR uniA2D5 +ENCODING 41685 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +3E00 +4100 +8080 +BE80 +0800 +0800 +2A00 +2A00 +2A00 +0800 +ENDCHAR +STARTCHAR uniA2D6 +ENCODING 41686 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8080 +BE80 +0800 +0800 +2A00 +2A00 +2A00 +0800 +ENDCHAR +STARTCHAR uniA2D7 +ENCODING 41687 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8340 +88C0 +0800 +0800 +2200 +2200 +2200 +ENDCHAR +STARTCHAR uniA2D8 +ENCODING 41688 +BBX 10 10 3 0 +BITMAP +FE00 +1000 +1000 +9340 +5540 +39C0 +5540 +9340 +1000 +FE00 +ENDCHAR +STARTCHAR uniA2D9 +ENCODING 41689 +BBX 9 12 3 0 +BITMAP +1C00 +2200 +0000 +8800 +8800 +5280 +5280 +2000 +5280 +5280 +8800 +8800 +ENDCHAR +STARTCHAR uniA2DA +ENCODING 41690 +BBX 9 9 3 0 +BITMAP +8800 +8800 +5280 +5280 +2000 +5280 +5280 +8800 +8800 +ENDCHAR +STARTCHAR uniA2DB +ENCODING 41691 +BBX 9 9 3 0 +BITMAP +8800 +8800 +5280 +5280 +2000 +5380 +5000 +8800 +8800 +ENDCHAR +STARTCHAR uniA2DC +ENCODING 41692 +BBX 8 14 4 0 +BITMAP +38 +44 +01 +31 +2D +23 +F8 +20 +F8 +20 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uniA2DD +ENCODING 41693 +BBX 8 12 4 0 +BITMAP +01 +31 +2D +23 +F8 +20 +F8 +20 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uniA2DE +ENCODING 41694 +BBX 9 10 3 0 +BITMAP +0800 +0800 +3E00 +8880 +8880 +4900 +3E00 +2200 +4100 +4100 +ENDCHAR +STARTCHAR uniA2DF +ENCODING 41695 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +7C +82 +FE +82 +FE +82 +7C +10 +11 +0E +ENDCHAR +STARTCHAR uniA2E0 +ENCODING 41696 +BBX 8 10 4 0 +BITMAP +7C +82 +FE +82 +FE +82 +7C +10 +11 +0E +ENDCHAR +STARTCHAR uniA2E1 +ENCODING 41697 +BBX 9 10 3 0 +BITMAP +7800 +8A00 +8A00 +7A00 +8A00 +8800 +7800 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uniA2E2 +ENCODING 41698 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +1800 +1600 +1180 +1000 +3800 +4400 +4400 +3800 +8200 +7C00 +ENDCHAR +STARTCHAR uniA2E3 +ENCODING 41699 +BBX 9 10 3 0 +BITMAP +1800 +1600 +1180 +1000 +3800 +4400 +4400 +3800 +8200 +7C00 +ENDCHAR +STARTCHAR uniA2E4 +ENCODING 41700 +BBX 10 12 3 0 +BITMAP +0C00 +0B00 +0800 +7940 +8940 +8FC0 +8940 +7940 +0800 +0800 +6800 +1800 +ENDCHAR +STARTCHAR uniA2E5 +ENCODING 41701 +BBX 6 13 5 0 +BITMAP +70 +88 +00 +C0 +B0 +8C +80 +94 +94 +FC +94 +94 +80 +ENDCHAR +STARTCHAR uniA2E6 +ENCODING 41702 +BBX 6 10 5 0 +BITMAP +C0 +B0 +8C +80 +94 +94 +FC +94 +94 +80 +ENDCHAR +STARTCHAR uniA2E7 +ENCODING 41703 +BBX 9 9 3 0 +BITMAP +2200 +4100 +8080 +2200 +4100 +8080 +2200 +4100 +8080 +ENDCHAR +STARTCHAR uniA2E8 +ENCODING 41704 +BBX 8 14 4 0 +BITMAP +38 +44 +00 +01 +31 +2D +23 +20 +A6 +6A +32 +6A +A6 +20 +ENDCHAR +STARTCHAR uniA2E9 +ENCODING 41705 +BBX 8 11 4 0 +BITMAP +01 +31 +2D +23 +20 +A6 +6A +32 +6A +A6 +20 +ENDCHAR +STARTCHAR uniA2EA +ENCODING 41706 +BBX 7 10 4 0 +BITMAP +1E +22 +42 +42 +22 +1E +06 +9A +E2 +82 +ENDCHAR +STARTCHAR uniA2EB +ENCODING 41707 +BBX 7 13 3 0 +BITMAP +1C +22 +00 +1C +22 +22 +22 +7E +A2 +A2 +A2 +A2 +22 +ENDCHAR +STARTCHAR uniA2EC +ENCODING 41708 +BBX 7 10 4 0 +BITMAP +1C +22 +22 +22 +7E +A2 +A2 +A2 +A2 +22 +ENDCHAR +STARTCHAR uniA2ED +ENCODING 41709 +BBX 8 10 4 0 +BITMAP +7F +08 +1C +13 +10 +12 +12 +12 +D0 +30 +ENDCHAR +STARTCHAR uniA2EE +ENCODING 41710 +BBX 7 12 4 0 +BITMAP +38 +44 +00 +44 +44 +44 +00 +FE +00 +44 +44 +44 +ENDCHAR +STARTCHAR uniA2EF +ENCODING 41711 +BBX 7 9 4 0 +BITMAP +44 +44 +44 +00 +FE +00 +44 +44 +44 +ENDCHAR +STARTCHAR uniA2F0 +ENCODING 41712 +BBX 8 10 4 0 +BITMAP +12 +91 +91 +92 +1C +12 +91 +91 +92 +10 +ENDCHAR +STARTCHAR uniA2F1 +ENCODING 41713 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8900 +A880 +A880 +8900 +FE00 +8900 +A880 +A880 +8900 +7000 +ENDCHAR +STARTCHAR uniA2F2 +ENCODING 41714 +BBX 9 10 3 0 +BITMAP +8900 +A880 +A880 +8900 +FE00 +8900 +A880 +A880 +8900 +7000 +ENDCHAR +STARTCHAR uniA2F3 +ENCODING 41715 +BBX 9 10 3 0 +BITMAP +8900 +8880 +8880 +8900 +8E00 +8900 +8880 +8880 +8900 +7000 +ENDCHAR +STARTCHAR uniA2F4 +ENCODING 41716 +BBX 7 10 4 0 +BITMAP +10 +7C +10 +00 +18 +16 +10 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA2F5 +ENCODING 41717 +BBX 7 13 4 0 +BITMAP +38 +44 +10 +7C +10 +00 +18 +16 +10 +7C +10 +D0 +30 +ENDCHAR +STARTCHAR uniA2F6 +ENCODING 41718 +BBX 7 11 4 0 +BITMAP +10 +7C +10 +00 +18 +16 +10 +7C +10 +D0 +30 +ENDCHAR +STARTCHAR uniA2F7 +ENCODING 41719 +BBX 10 10 3 0 +BITMAP +4C00 +8B00 +88C0 +4800 +3A40 +4A40 +8800 +8A40 +4A40 +0800 +ENDCHAR +STARTCHAR uniA2F8 +ENCODING 41720 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +2200 +2200 +1C00 +8880 +9C80 +6B00 +0800 +6B00 +1C00 +6B00 +ENDCHAR +STARTCHAR uniA2F9 +ENCODING 41721 +BBX 9 10 3 0 +BITMAP +2200 +2200 +1C00 +8880 +9C80 +6B00 +0800 +6B00 +1C00 +6B00 +ENDCHAR +STARTCHAR uniA2FA +ENCODING 41722 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0080 +1880 +1680 +1180 +1000 +7C00 +9200 +9200 +9200 +7C00 +ENDCHAR +STARTCHAR uniA2FB +ENCODING 41723 +BBX 9 10 3 0 +BITMAP +0080 +1880 +1680 +1180 +1000 +7C00 +9200 +9200 +9200 +7C00 +ENDCHAR +STARTCHAR uniA2FC +ENCODING 41724 +BBX 6 13 5 0 +BITMAP +70 +88 +00 +10 +7C +10 +C0 +B0 +8C +80 +88 +88 +80 +ENDCHAR +STARTCHAR uniA2FD +ENCODING 41725 +BBX 6 10 5 0 +BITMAP +10 +7C +10 +C0 +B0 +8C +80 +88 +88 +80 +ENDCHAR +STARTCHAR uniA2FE +ENCODING 41726 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0800 +3E00 +0800 +8880 +8880 +7700 +0000 +0800 +3E00 +0800 +ENDCHAR +STARTCHAR uniA2FF +ENCODING 41727 +BBX 9 10 3 0 +BITMAP +0800 +3E00 +0800 +8880 +8880 +7700 +0000 +0800 +3E00 +0800 +ENDCHAR +STARTCHAR uniA300 +ENCODING 41728 +BBX 13 12 1 0 +BITMAP +0200 +0F80 +8208 +98C8 +68B0 +0880 +0700 +0200 +0F80 +0200 +0F80 +0200 +ENDCHAR +STARTCHAR uniA301 +ENCODING 41729 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8080 +8080 +FF80 +8880 +8880 +8880 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA302 +ENCODING 41730 +BBX 9 10 3 0 +BITMAP +8080 +8080 +FF80 +8880 +8880 +8880 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA303 +ENCODING 41731 +BBX 9 9 3 0 +BITMAP +4F80 +9080 +9080 +4880 +0780 +4880 +9080 +9080 +4F80 +ENDCHAR +STARTCHAR uniA304 +ENCODING 41732 +BBX 6 13 5 0 +BITMAP +70 +88 +00 +48 +50 +60 +78 +44 +44 +78 +60 +50 +48 +ENDCHAR +STARTCHAR uniA305 +ENCODING 41733 +BBX 5 10 6 0 +BITMAP +90 +A0 +C0 +F0 +88 +88 +F0 +C0 +A0 +90 +ENDCHAR +STARTCHAR uniA306 +ENCODING 41734 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +A280 +FF80 +A280 +A280 +FF80 +A280 +4100 +3E00 +ENDCHAR +STARTCHAR uniA307 +ENCODING 41735 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8080 +A280 +A280 +A280 +8080 +8880 +8880 +8880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA308 +ENCODING 41736 +BBX 9 10 3 0 +BITMAP +8080 +A280 +A280 +A280 +8080 +8880 +8880 +8880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA309 +ENCODING 41737 +BBX 11 10 2 0 +BITMAP +0220 +0220 +0220 +0220 +3220 +43E0 +8220 +9220 +8A20 +4620 +ENDCHAR +STARTCHAR uniA30A +ENCODING 41738 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +3E00 +4100 +FF80 +8080 +FF80 +4100 +3E00 +4100 +8880 +8880 +ENDCHAR +STARTCHAR uniA30B +ENCODING 41739 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +FF80 +8080 +FF80 +4100 +3E00 +4100 +8880 +8880 +ENDCHAR +STARTCHAR uniA30C +ENCODING 41740 +BBX 9 10 3 0 +BITMAP +1800 +9600 +9180 +9000 +1000 +1000 +9000 +9000 +9000 +1000 +ENDCHAR +STARTCHAR uniA30D +ENCODING 41741 +BBX 13 13 1 0 +BITMAP +0700 +0880 +0000 +0888 +0888 +0490 +03E0 +3080 +4080 +8080 +9080 +8C80 +4300 +ENDCHAR +STARTCHAR uniA30E +ENCODING 41742 +BBX 13 10 1 0 +BITMAP +0888 +0888 +0490 +03E0 +3080 +4080 +8080 +9080 +8C80 +4300 +ENDCHAR +STARTCHAR uniA30F +ENCODING 41743 +BBX 9 10 3 0 +BITMAP +8880 +8880 +4900 +3E00 +0800 +0800 +3C00 +4A00 +3200 +0200 +ENDCHAR +STARTCHAR uniA310 +ENCODING 41744 +BBX 10 10 3 0 +BITMAP +05C0 +4600 +4600 +45C0 +4400 +05C0 +0600 +C600 +35C0 +0C00 +ENDCHAR +STARTCHAR uniA311 +ENCODING 41745 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0400 +4480 +4780 +4480 +4400 +0400 +0480 +C780 +3480 +0C00 +ENDCHAR +STARTCHAR uniA312 +ENCODING 41746 +BBX 9 10 3 0 +BITMAP +0400 +4480 +4780 +4480 +4400 +0400 +0480 +C780 +3480 +0C00 +ENDCHAR +STARTCHAR uniA313 +ENCODING 41747 +BBX 9 13 3 0 +BITMAP +7C80 +8280 +0080 +1E80 +2180 +4080 +4000 +4000 +4000 +4000 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uniA314 +ENCODING 41748 +BBX 6 13 5 0 +BITMAP +70 +88 +00 +C0 +B0 +8C +80 +A4 +A4 +A4 +A4 +80 +80 +ENDCHAR +STARTCHAR uniA315 +ENCODING 41749 +BBX 6 10 5 0 +BITMAP +C0 +B0 +8C +80 +A4 +A4 +A4 +A4 +80 +80 +ENDCHAR +STARTCHAR uniA316 +ENCODING 41750 +BBX 7 10 4 0 +BITMAP +C0 +B0 +8C +80 +A2 +94 +88 +94 +A2 +80 +ENDCHAR +STARTCHAR uniA317 +ENCODING 41751 +BBX 6 11 5 0 +BITMAP +78 +84 +A0 +90 +40 +30 +08 +44 +24 +84 +78 +ENDCHAR +STARTCHAR uniA318 +ENCODING 41752 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8C00 +4B00 +2800 +8800 +4A00 +2900 +0880 +0A00 +6900 +1880 +ENDCHAR +STARTCHAR uniA319 +ENCODING 41753 +BBX 9 10 3 0 +BITMAP +8C00 +4B00 +2800 +8800 +4A00 +2900 +0880 +0A00 +6900 +1880 +ENDCHAR +STARTCHAR uniA31A +ENCODING 41754 +BBX 7 11 4 0 +BITMAP +7C +82 +A8 +A8 +80 +7C +02 +2A +2A +82 +7C +ENDCHAR +STARTCHAR uniA31B +ENCODING 41755 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +8C +8A +09 +78 +88 +88 +78 +08 +88 +88 +ENDCHAR +STARTCHAR uniA31C +ENCODING 41756 +BBX 8 10 4 0 +BITMAP +8C +8A +09 +78 +88 +88 +78 +08 +88 +88 +ENDCHAR +STARTCHAR uniA31D +ENCODING 41757 +BBX 9 10 3 0 +BITMAP +0200 +8280 +8280 +9A80 +1600 +1000 +9080 +9080 +9080 +1000 +ENDCHAR +STARTCHAR uniA31E +ENCODING 41758 +BBX 9 11 3 0 +BITMAP +4100 +4100 +3E00 +0000 +8880 +8880 +7700 +0000 +3E00 +4100 +4100 +ENDCHAR +STARTCHAR uniA31F +ENCODING 41759 +BBX 8 13 3 0 +BITMAP +1C +22 +00 +12 +12 +12 +10 +1F +10 +12 +12 +D2 +30 +ENDCHAR +STARTCHAR uniA320 +ENCODING 41760 +BBX 8 10 4 0 +BITMAP +12 +12 +12 +10 +1F +10 +12 +12 +D2 +30 +ENDCHAR +STARTCHAR uniA321 +ENCODING 41761 +BBX 10 10 2 0 +BITMAP +0F00 +1080 +2040 +2040 +F840 +2040 +2040 +2040 +1080 +0F00 +ENDCHAR +STARTCHAR uniA322 +ENCODING 41762 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0800 +4900 +4900 +E900 +4800 +4F80 +0800 +0900 +6900 +1900 +ENDCHAR +STARTCHAR uniA323 +ENCODING 41763 +BBX 9 10 3 0 +BITMAP +0800 +4900 +4900 +E900 +4800 +4F80 +0800 +0900 +6900 +1900 +ENDCHAR +STARTCHAR uniA324 +ENCODING 41764 +BBX 9 10 3 0 +BITMAP +8080 +8080 +8080 +8080 +4100 +3E00 +0000 +0800 +3E00 +0800 +ENDCHAR +STARTCHAR uniA325 +ENCODING 41765 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8080 +8080 +8080 +8080 +4100 +3E00 +0800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA326 +ENCODING 41766 +BBX 9 10 3 0 +BITMAP +8080 +8080 +8080 +8080 +4100 +3E00 +0800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA327 +ENCODING 41767 +BBX 9 10 3 0 +BITMAP +0400 +3F80 +0400 +0400 +3F80 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA328 +ENCODING 41768 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8080 +8080 +8080 +4100 +3E00 +0000 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA329 +ENCODING 41769 +BBX 9 10 3 0 +BITMAP +8080 +8080 +8080 +4100 +3E00 +0000 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA32A +ENCODING 41770 +BBX 10 10 3 0 +BITMAP +0040 +8C40 +FB40 +88C0 +0800 +0880 +8880 +F880 +8880 +0800 +ENDCHAR +STARTCHAR uniA32B +ENCODING 41771 +BBX 7 13 5 0 +BITMAP +70 +88 +00 +04 +C4 +B4 +8C +80 +88 +88 +BE +88 +88 +ENDCHAR +STARTCHAR uniA32C +ENCODING 41772 +BBX 7 10 5 0 +BITMAP +04 +C4 +B4 +8C +80 +88 +88 +BE +88 +88 +ENDCHAR +STARTCHAR uniA32D +ENCODING 41773 +BBX 10 10 3 0 +BITMAP +0080 +1880 +F680 +1180 +1000 +1100 +1100 +F7C0 +1100 +1100 +ENDCHAR +STARTCHAR uniA32E +ENCODING 41774 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +C040 +B040 +8C40 +8B40 +A8C0 +2A00 +0A00 +2A00 +2880 +0700 +ENDCHAR +STARTCHAR uniA32F +ENCODING 41775 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8B40 +A8C0 +2A00 +0A00 +2A00 +2880 +0700 +ENDCHAR +STARTCHAR uniA330 +ENCODING 41776 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8740 +84C0 +0400 +1500 +1500 +0400 +3F80 +ENDCHAR +STARTCHAR uniA331 +ENCODING 41777 +BBX 9 10 3 0 +BITMAP +8880 +8880 +9C80 +6B00 +0800 +2A00 +AA80 +AA80 +8880 +7700 +ENDCHAR +STARTCHAR uniA332 +ENCODING 41778 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +3F80 +4040 +4040 +3F80 +8420 +8420 +3F80 +4040 +4040 +3F80 +ENDCHAR +STARTCHAR uniA333 +ENCODING 41779 +BBX 11 10 2 0 +BITMAP +3F80 +4040 +4040 +3F80 +8420 +8420 +3F80 +4040 +4040 +3F80 +ENDCHAR +STARTCHAR uniA334 +ENCODING 41780 +BBX 9 11 3 0 +BITMAP +7F00 +8080 +8080 +7F00 +0800 +FF80 +0800 +7F00 +8080 +8080 +7F00 +ENDCHAR +STARTCHAR uniA335 +ENCODING 41781 +BBX 10 10 3 0 +BITMAP +0040 +8C40 +FB40 +88C0 +8800 +8800 +F800 +8800 +0800 +0800 +ENDCHAR +STARTCHAR uniA336 +ENCODING 41782 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +3E00 +4100 +8080 +8080 +FF80 +8880 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA337 +ENCODING 41783 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8080 +8080 +FF80 +8880 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA338 +ENCODING 41784 +BBX 9 10 3 0 +BITMAP +C300 +B280 +8E00 +8200 +9200 +AA00 +AA00 +AA00 +9200 +8200 +ENDCHAR +STARTCHAR uniA339 +ENCODING 41785 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +18 +16 +10 +10 +10 +1C +12 +12 +D2 +30 +ENDCHAR +STARTCHAR uniA33A +ENCODING 41786 +BBX 7 10 4 0 +BITMAP +18 +16 +10 +10 +10 +1C +12 +12 +D2 +30 +ENDCHAR +STARTCHAR uniA33B +ENCODING 41787 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8C80 +8A80 +8880 +8C80 +AA80 +9A80 +4100 +3E00 +ENDCHAR +STARTCHAR uniA33C +ENCODING 41788 +BBX 10 10 3 0 +BITMAP +0200 +FFC0 +0200 +2200 +23C0 +0200 +6200 +5A00 +4600 +4000 +ENDCHAR +STARTCHAR uniA33D +ENCODING 41789 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +E300 +9A80 +8600 +1200 +7E00 +1200 +6200 +5A00 +4600 +4000 +ENDCHAR +STARTCHAR uniA33E +ENCODING 41790 +BBX 9 10 3 0 +BITMAP +E300 +9A80 +8600 +1200 +7E00 +1200 +6200 +5A00 +4600 +4000 +ENDCHAR +STARTCHAR uniA33F +ENCODING 41791 +BBX 9 11 3 0 +BITMAP +2480 +1F00 +0400 +2480 +1F00 +C400 +B400 +9F00 +A080 +2480 +2480 +ENDCHAR +STARTCHAR uniA340 +ENCODING 41792 +BBX 9 10 3 0 +BITMAP +8900 +A880 +A880 +8900 +AE00 +A900 +8880 +A880 +A880 +8900 +ENDCHAR +STARTCHAR uniA341 +ENCODING 41793 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0600 +0580 +1F60 +2400 +2700 +2400 +DF00 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA342 +ENCODING 41794 +BBX 11 10 2 0 +BITMAP +0600 +0580 +1F60 +2400 +2700 +2400 +DF00 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA343 +ENCODING 41795 +BBX 11 10 2 0 +BITMAP +3C00 +4220 +8920 +0900 +3F20 +0920 +0900 +E120 +9920 +8600 +ENDCHAR +STARTCHAR uniA344 +ENCODING 41796 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +7700 +8880 +8880 +8880 +0800 +0800 +7F00 +0000 +4900 +4900 +4900 +ENDCHAR +STARTCHAR uniA345 +ENCODING 41797 +BBX 9 11 3 0 +BITMAP +7700 +8880 +8880 +8880 +0800 +0800 +7F00 +0000 +4900 +4900 +4900 +ENDCHAR +STARTCHAR uniA346 +ENCODING 41798 +BBX 9 13 3 -1 +BITMAP +0380 +7400 +8D00 +8D00 +8C00 +AB80 +A800 +AB80 +8C00 +8D00 +8D00 +7400 +0380 +ENDCHAR +STARTCHAR uniA347 +ENCODING 41799 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0800 +0800 +2200 +2200 +C080 +B080 +8880 +8680 +8180 +2200 +2A00 +0800 +ENDCHAR +STARTCHAR uniA348 +ENCODING 41800 +BBX 9 12 3 0 +BITMAP +0800 +0800 +2200 +2200 +C080 +B080 +8880 +8680 +8180 +2200 +2A00 +0800 +ENDCHAR +STARTCHAR uniA349 +ENCODING 41801 +BBX 11 10 2 0 +BITMAP +0E20 +E9A0 +1860 +4800 +4800 +4800 +4800 +1860 +E9A0 +0E20 +ENDCHAR +STARTCHAR uniA34A +ENCODING 41802 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +1600 +1580 +9460 +6400 +0400 +0400 +FFE0 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA34B +ENCODING 41803 +BBX 11 10 2 0 +BITMAP +1600 +1580 +9460 +6400 +0400 +0400 +FFE0 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA34C +ENCODING 41804 +BBX 7 10 4 0 +BITMAP +7E +82 +82 +82 +7E +02 +12 +92 +82 +7C +ENDCHAR +STARTCHAR uniA34D +ENCODING 41805 +BBX 11 10 2 0 +BITMAP +1600 +1580 +9460 +6400 +0400 +0400 +1F00 +2480 +4440 +4440 +ENDCHAR +STARTCHAR uniA34E +ENCODING 41806 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +C300 +B280 +8E00 +8200 +9200 +9200 +8200 +FE00 +8200 +8200 +ENDCHAR +STARTCHAR uniA34F +ENCODING 41807 +BBX 9 10 3 0 +BITMAP +C300 +B280 +8E00 +8200 +9200 +9200 +8200 +FE00 +8200 +8200 +ENDCHAR +STARTCHAR uniA350 +ENCODING 41808 +BBX 9 11 3 -1 +BITMAP +0800 +2A00 +2200 +1400 +F480 +8880 +9780 +1400 +2200 +2A00 +0800 +ENDCHAR +STARTCHAR uniA351 +ENCODING 41809 +BBX 11 10 2 0 +BITMAP +0020 +0620 +05A0 +0460 +0400 +1500 +9520 +8420 +4440 +3F80 +ENDCHAR +STARTCHAR uniA352 +ENCODING 41810 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0400 +0400 +0400 +0400 +1500 +1500 +9520 +8420 +4440 +3F80 +ENDCHAR +STARTCHAR uniA353 +ENCODING 41811 +BBX 11 10 2 0 +BITMAP +0400 +0400 +0400 +0400 +1500 +1500 +9520 +8420 +4440 +3F80 +ENDCHAR +STARTCHAR uniA354 +ENCODING 41812 +BBX 9 10 3 0 +BITMAP +AA80 +AA80 +AA80 +8880 +AA80 +AA80 +AA80 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA355 +ENCODING 41813 +BBX 12 11 2 -1 +BITMAP +18E0 +1510 +1310 +1110 +1110 +1110 +1110 +9150 +5150 +30E0 +0040 +ENDCHAR +STARTCHAR uniA356 +ENCODING 41814 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +0C80 +7B40 +8940 +8940 +4880 +3800 +4800 +8800 +8800 +7800 +ENDCHAR +STARTCHAR uniA357 +ENCODING 41815 +BBX 10 10 3 0 +BITMAP +0C80 +7B40 +8940 +8940 +4880 +3800 +4800 +8800 +8800 +7800 +ENDCHAR +STARTCHAR uniA358 +ENCODING 41816 +BBX 7 9 4 0 +BITMAP +10 +28 +28 +10 +00 +44 +AA +AA +44 +ENDCHAR +STARTCHAR uniA359 +ENCODING 41817 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +1880 +1740 +D140 +3140 +1080 +D000 +3000 +1000 +D000 +3000 +ENDCHAR +STARTCHAR uniA35A +ENCODING 41818 +BBX 10 10 3 0 +BITMAP +1880 +1740 +D140 +3140 +1080 +D000 +3000 +1000 +D000 +3000 +ENDCHAR +STARTCHAR uniA35B +ENCODING 41819 +BBX 7 11 4 0 +BITMAP +7C +82 +80 +7C +02 +82 +7C +00 +FE +00 +FE +ENDCHAR +STARTCHAR uniA35C +ENCODING 41820 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +4900 +3E00 +0880 +0880 +3E00 +4900 +8880 +8880 +ENDCHAR +STARTCHAR uniA35D +ENCODING 41821 +BBX 9 10 3 0 +BITMAP +8880 +8880 +4900 +3E00 +0880 +0880 +3E00 +4900 +8880 +8880 +ENDCHAR +STARTCHAR uniA35E +ENCODING 41822 +BBX 8 11 4 0 +BITMAP +E1 +99 +87 +00 +E1 +99 +87 +00 +E1 +99 +87 +ENDCHAR +STARTCHAR uniA35F +ENCODING 41823 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +1C00 +1300 +90C0 +9000 +9F00 +9000 +9000 +90C0 +1300 +1C00 +ENDCHAR +STARTCHAR uniA360 +ENCODING 41824 +BBX 10 10 3 0 +BITMAP +1C00 +1300 +90C0 +9000 +9F00 +9000 +9000 +90C0 +1300 +1C00 +ENDCHAR +STARTCHAR uniA361 +ENCODING 41825 +BBX 7 10 4 0 +BITMAP +18 +16 +10 +FE +92 +54 +38 +38 +54 +92 +ENDCHAR +STARTCHAR uniA362 +ENCODING 41826 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +18 +16 +10 +7C +92 +7C +10 +7C +92 +92 +ENDCHAR +STARTCHAR uniA363 +ENCODING 41827 +BBX 7 10 4 0 +BITMAP +18 +16 +10 +7C +92 +7C +10 +7C +92 +92 +ENDCHAR +STARTCHAR uniA364 +ENCODING 41828 +BBX 7 11 4 0 +BITMAP +10 +38 +54 +44 +54 +38 +10 +38 +54 +92 +92 +ENDCHAR +STARTCHAR uniA365 +ENCODING 41829 +BBX 11 10 2 0 +BITMAP +C300 +B2A0 +8E60 +8220 +9200 +9200 +8200 +FE00 +8200 +8200 +ENDCHAR +STARTCHAR uniA366 +ENCODING 41830 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +30C0 +28A0 +2080 +A080 +6280 +3180 +2880 +2080 +A280 +6180 +ENDCHAR +STARTCHAR uniA367 +ENCODING 41831 +BBX 11 10 2 0 +BITMAP +30C0 +28A0 +2080 +A080 +6280 +3180 +2880 +2080 +A280 +6180 +ENDCHAR +STARTCHAR uniA368 +ENCODING 41832 +BBX 12 9 2 0 +BITMAP +88C0 +4940 +2240 +1440 +0870 +1440 +2240 +4940 +88C0 +ENDCHAR +STARTCHAR uniA369 +ENCODING 41833 +BBX 15 10 0 0 +BITMAP +1818 +1514 +1112 +1010 +1FF0 +1010 +1110 +9110 +5050 +3030 +ENDCHAR +STARTCHAR uniA36A +ENCODING 41834 +BBX 10 14 3 0 +BITMAP +1C00 +2200 +0000 +C040 +B040 +8C40 +8740 +84C0 +0400 +C440 +B440 +8C40 +8740 +84C0 +ENDCHAR +STARTCHAR uniA36B +ENCODING 41835 +BBX 10 11 3 0 +BITMAP +C040 +B040 +8C40 +8740 +84C0 +0400 +C440 +B440 +8C40 +8740 +84C0 +ENDCHAR +STARTCHAR uniA36C +ENCODING 41836 +BBX 13 10 1 0 +BITMAP +1860 +1658 +1040 +1040 +1FC0 +1040 +1040 +1040 +D340 +30C0 +ENDCHAR +STARTCHAR uniA36D +ENCODING 41837 +BBX 9 10 3 0 +BITMAP +FF80 +8880 +4900 +2A00 +9C80 +8880 +9C80 +2A00 +4900 +8880 +ENDCHAR +STARTCHAR uniA36E +ENCODING 41838 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +FF80 +8880 +4900 +2A00 +1C00 +FF80 +1400 +2200 +4900 +8880 +ENDCHAR +STARTCHAR uniA36F +ENCODING 41839 +BBX 9 10 3 0 +BITMAP +FF80 +8880 +4900 +2A00 +1C00 +FF80 +1400 +2200 +4900 +8880 +ENDCHAR +STARTCHAR uniA370 +ENCODING 41840 +BBX 11 10 2 0 +BITMAP +7FC0 +4440 +2480 +1500 +EE20 +9F20 +8AE0 +1100 +2480 +4440 +ENDCHAR +STARTCHAR uniA371 +ENCODING 41841 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +7000 +8940 +8940 +AFC0 +A940 +AFC0 +A940 +8940 +8800 +7000 +ENDCHAR +STARTCHAR uniA372 +ENCODING 41842 +BBX 10 10 3 0 +BITMAP +7000 +8940 +8940 +AFC0 +A940 +AFC0 +A940 +8940 +8800 +7000 +ENDCHAR +STARTCHAR uniA373 +ENCODING 41843 +BBX 8 10 4 0 +BITMAP +72 +8A +88 +AF +A8 +A8 +AF +88 +8A +72 +ENDCHAR +STARTCHAR uniA374 +ENCODING 41844 +BBX 13 13 1 0 +BITMAP +0700 +0880 +0000 +1808 +1668 +1058 +1040 +1040 +7C40 +1040 +1058 +D068 +3008 +ENDCHAR +STARTCHAR uniA375 +ENCODING 41845 +BBX 13 10 1 0 +BITMAP +1808 +1668 +1058 +1040 +1040 +7C40 +1040 +1058 +D068 +3008 +ENDCHAR +STARTCHAR uniA376 +ENCODING 41846 +BBX 10 12 3 0 +BITMAP +E080 +0E40 +2D40 +2CC0 +0C00 +7400 +0400 +7FC0 +0400 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA377 +ENCODING 41847 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +C040 +B040 +8C40 +8740 +84C0 +0400 +0E00 +1100 +1100 +0E00 +ENDCHAR +STARTCHAR uniA378 +ENCODING 41848 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8740 +84C0 +0400 +0E00 +1100 +1100 +0E00 +ENDCHAR +STARTCHAR uniA379 +ENCODING 41849 +BBX 8 10 4 0 +BITMAP +55 +55 +11 +7D +11 +55 +45 +C1 +39 +07 +ENDCHAR +STARTCHAR uniA37A +ENCODING 41850 +BBX 10 14 3 0 +BITMAP +1C00 +2200 +0000 +E040 +1C40 +5B40 +58C0 +1800 +E800 +0800 +FF80 +0800 +FF80 +0800 +ENDCHAR +STARTCHAR uniA37B +ENCODING 41851 +BBX 10 11 3 0 +BITMAP +E040 +1C40 +5B40 +58C0 +1800 +E800 +0800 +FF80 +0800 +FF80 +0800 +ENDCHAR +STARTCHAR uniA37C +ENCODING 41852 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +0000 +0CC0 +4BA0 +4890 +E880 +4880 +4880 +0880 +0880 +6880 +1880 +ENDCHAR +STARTCHAR uniA37D +ENCODING 41853 +BBX 12 10 2 0 +BITMAP +0CC0 +4BA0 +4890 +E880 +4880 +4880 +0880 +0880 +6880 +1880 +ENDCHAR +STARTCHAR uniA37E +ENCODING 41854 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0800 +0900 +4900 +A800 +AF80 +A800 +4900 +0900 +6800 +1800 +ENDCHAR +STARTCHAR uniA37F +ENCODING 41855 +BBX 9 10 3 0 +BITMAP +0800 +0900 +4900 +A800 +AF80 +A800 +4900 +0900 +6800 +1800 +ENDCHAR +STARTCHAR uniA380 +ENCODING 41856 +BBX 11 10 2 0 +BITMAP +0520 +4520 +44C0 +4400 +47E0 +0400 +04C0 +C520 +3520 +0C00 +ENDCHAR +STARTCHAR uniA381 +ENCODING 41857 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +38 +44 +7C +82 +FE +82 +82 +92 +92 +6C +ENDCHAR +STARTCHAR uniA382 +ENCODING 41858 +BBX 7 10 4 0 +BITMAP +38 +44 +7C +82 +FE +82 +82 +92 +92 +6C +ENDCHAR +STARTCHAR uniA383 +ENCODING 41859 +BBX 9 11 3 0 +BITMAP +3E00 +4100 +8080 +2280 +2280 +0880 +0880 +0080 +7080 +4C80 +4300 +ENDCHAR +STARTCHAR uniA384 +ENCODING 41860 +BBX 12 10 1 0 +BITMAP +0010 +0310 +02D0 +0230 +0200 +7FF0 +0200 +2200 +FA00 +2200 +ENDCHAR +STARTCHAR uniA385 +ENCODING 41861 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +FC +02 +02 +02 +FE +02 +02 +02 +02 +FC +ENDCHAR +STARTCHAR uniA386 +ENCODING 41862 +BBX 7 10 4 0 +BITMAP +FC +02 +02 +02 +FE +02 +02 +02 +02 +FC +ENDCHAR +STARTCHAR uniA387 +ENCODING 41863 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8740 +84C0 +0400 +1F00 +4400 +4400 +3800 +ENDCHAR +STARTCHAR uniA388 +ENCODING 41864 +BBX 9 10 3 0 +BITMAP +C080 +A080 +9080 +8080 +8880 +8880 +8080 +8480 +8280 +8180 +ENDCHAR +STARTCHAR uniA389 +ENCODING 41865 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +4100 +A280 +A280 +A280 +4100 +2A00 +1400 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uniA38A +ENCODING 41866 +BBX 9 10 3 0 +BITMAP +4100 +A280 +A280 +A280 +4100 +2A00 +1400 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uniA38B +ENCODING 41867 +BBX 11 10 2 0 +BITMAP +DB60 +2080 +5140 +5140 +5140 +FFE0 +5140 +5140 +2080 +DB60 +ENDCHAR +STARTCHAR uniA38C +ENCODING 41868 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +18 +04 +62 +82 +92 +92 +82 +62 +04 +18 +ENDCHAR +STARTCHAR uniA38D +ENCODING 41869 +BBX 7 10 4 0 +BITMAP +18 +04 +62 +82 +92 +92 +82 +62 +04 +18 +ENDCHAR +STARTCHAR uniA38E +ENCODING 41870 +BBX 10 10 3 0 +BITMAP +0400 +0540 +0540 +0540 +07C0 +0540 +C540 +B540 +8C00 +8000 +ENDCHAR +STARTCHAR uniA38F +ENCODING 41871 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +04 +04 +04 +04 +04 +05 +C5 +B5 +8D +80 +ENDCHAR +STARTCHAR uniA390 +ENCODING 41872 +BBX 8 10 4 0 +BITMAP +04 +04 +04 +04 +04 +05 +C5 +B5 +8D +80 +ENDCHAR +STARTCHAR uniA391 +ENCODING 41873 +BBX 8 10 4 0 +BITMAP +0C +7A +89 +88 +4A +3A +4A +88 +88 +78 +ENDCHAR +STARTCHAR uniA392 +ENCODING 41874 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +4040 +4C40 +EB40 +48C0 +4800 +0800 +3E00 +4900 +8880 +8880 +ENDCHAR +STARTCHAR uniA393 +ENCODING 41875 +BBX 10 10 3 0 +BITMAP +4040 +4C40 +EB40 +48C0 +4800 +0800 +3E00 +4900 +8880 +8880 +ENDCHAR +STARTCHAR uniA394 +ENCODING 41876 +BBX 9 11 3 0 +BITMAP +3E00 +4100 +8880 +8880 +8080 +FF80 +8080 +8880 +8880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA395 +ENCODING 41877 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +1C00 +A280 +A280 +2200 +7F00 +2200 +A280 +A280 +2200 +1C00 +ENDCHAR +STARTCHAR uniA396 +ENCODING 41878 +BBX 9 10 3 0 +BITMAP +1C00 +A280 +A280 +2200 +7F00 +2200 +A280 +A280 +2200 +1C00 +ENDCHAR +STARTCHAR uniA397 +ENCODING 41879 +BBX 8 10 4 0 +BITMAP +24 +25 +26 +24 +24 +24 +24 +64 +A4 +24 +ENDCHAR +STARTCHAR uniA398 +ENCODING 41880 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +3C +42 +91 +11 +7D +11 +11 +E1 +99 +86 +ENDCHAR +STARTCHAR uniA399 +ENCODING 41881 +BBX 8 10 4 0 +BITMAP +3C +42 +91 +11 +7D +11 +11 +E1 +99 +86 +ENDCHAR +STARTCHAR uniA39A +ENCODING 41882 +BBX 8 12 4 0 +BITMAP +22 +22 +3E +63 +A3 +1D +01 +01 +01 +E1 +99 +86 +ENDCHAR +STARTCHAR uniA39B +ENCODING 41883 +BBX 10 10 3 0 +BITMAP +0040 +0C40 +0B40 +08C0 +0800 +FF80 +0800 +4900 +4900 +0800 +ENDCHAR +STARTCHAR uniA39C +ENCODING 41884 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +0000 +1010 +10D0 +10B0 +1080 +1080 +1F80 +1080 +D080 +B080 +8080 +ENDCHAR +STARTCHAR uniA39D +ENCODING 41885 +BBX 12 10 2 0 +BITMAP +1010 +10D0 +10B0 +1080 +1080 +1F80 +1080 +D080 +B080 +8080 +ENDCHAR +STARTCHAR uniA39E +ENCODING 41886 +BBX 9 10 3 0 +BITMAP +0600 +0500 +0480 +0400 +3D80 +4600 +8780 +8600 +4580 +3C00 +ENDCHAR +STARTCHAR uniA39F +ENCODING 41887 +BBX 7 10 4 0 +BITMAP +70 +88 +BA +AE +88 +88 +BA +AE +88 +70 +ENDCHAR +STARTCHAR uniA3A0 +ENCODING 41888 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +4000 +A300 +BEC0 +A230 +4200 +0200 +4200 +A200 +BE00 +A200 +4200 +ENDCHAR +STARTCHAR uniA3A1 +ENCODING 41889 +BBX 12 11 2 0 +BITMAP +4000 +A300 +BEC0 +A230 +4200 +0200 +4200 +A200 +BE00 +A200 +4200 +ENDCHAR +STARTCHAR uniA3A2 +ENCODING 41890 +BBX 13 11 1 0 +BITMAP +1040 +1040 +0880 +2720 +2220 +FAF8 +2220 +2220 +1A00 +1600 +1000 +ENDCHAR +STARTCHAR uniA3A3 +ENCODING 41891 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +7F00 +8080 +8080 +8080 +7F00 +0800 +0800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA3A4 +ENCODING 41892 +BBX 9 10 3 0 +BITMAP +7F00 +8080 +8080 +8080 +7F00 +0800 +0800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA3A5 +ENCODING 41893 +BBX 8 10 4 0 +BITMAP +93 +55 +39 +39 +55 +93 +10 +D0 +B0 +80 +ENDCHAR +STARTCHAR uniA3A6 +ENCODING 41894 +BBX 10 13 2 0 +BITMAP +0E00 +1100 +0000 +2040 +2040 +2040 +3FC0 +2040 +2840 +3040 +6040 +A040 +2040 +ENDCHAR +STARTCHAR uniA3A7 +ENCODING 41895 +BBX 10 10 2 0 +BITMAP +2040 +2040 +2040 +3FC0 +2040 +2840 +3040 +6040 +A040 +2040 +ENDCHAR +STARTCHAR uniA3A8 +ENCODING 41896 +BBX 9 10 4 0 +BITMAP +0800 +8800 +8800 +F800 +8800 +8800 +0800 +0800 +0800 +FF80 +ENDCHAR +STARTCHAR uniA3A9 +ENCODING 41897 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +1800 +1600 +1000 +1000 +1F00 +1080 +1240 +1540 +D500 +3200 +ENDCHAR +STARTCHAR uniA3AA +ENCODING 41898 +BBX 10 10 3 0 +BITMAP +1800 +1600 +1000 +1000 +1F00 +1080 +1240 +1540 +D500 +3200 +ENDCHAR +STARTCHAR uniA3AB +ENCODING 41899 +BBX 10 9 3 0 +BITMAP +80C0 +4140 +2240 +1440 +0840 +1440 +2240 +4140 +80C0 +ENDCHAR +STARTCHAR uniA3AC +ENCODING 41900 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +0600 +0580 +A460 +A400 +A400 +FC00 +A400 +A400 +A400 +0400 +ENDCHAR +STARTCHAR uniA3AD +ENCODING 41901 +BBX 11 10 2 0 +BITMAP +0600 +0580 +A460 +A400 +A400 +FC00 +A400 +A400 +A400 +0400 +ENDCHAR +STARTCHAR uniA3AE +ENCODING 41902 +BBX 13 10 1 0 +BITMAP +1260 +1250 +1FC8 +1240 +1240 +1240 +1FC0 +9240 +5240 +3240 +ENDCHAR +STARTCHAR uniA3AF +ENCODING 41903 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +FE +10 +FE +10 +92 +54 +38 +38 +54 +92 +ENDCHAR +STARTCHAR uniA3B0 +ENCODING 41904 +BBX 7 10 4 0 +BITMAP +FE +10 +FE +10 +92 +54 +38 +38 +54 +92 +ENDCHAR +STARTCHAR uniA3B1 +ENCODING 41905 +BBX 10 10 3 0 +BITMAP +C040 +B040 +8C40 +8740 +84C0 +0400 +1500 +0E00 +0E00 +1500 +ENDCHAR +STARTCHAR uniA3B2 +ENCODING 41906 +BBX 9 10 3 0 +BITMAP +4E00 +8980 +8800 +4900 +3900 +4900 +8900 +8800 +4980 +0E00 +ENDCHAR +STARTCHAR uniA3B3 +ENCODING 41907 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +2A00 +2A00 +2200 +9C80 +8880 +8880 +7700 +2A00 +2A00 +2200 +1C00 +ENDCHAR +STARTCHAR uniA3B4 +ENCODING 41908 +BBX 9 11 3 0 +BITMAP +2A00 +2A00 +2200 +9C80 +8880 +8880 +7700 +2A00 +2A00 +2200 +1C00 +ENDCHAR +STARTCHAR uniA3B5 +ENCODING 41909 +BBX 12 9 2 0 +BITMAP +6430 +9450 +8890 +7510 +0210 +7510 +8890 +9450 +6430 +ENDCHAR +STARTCHAR uniA3B6 +ENCODING 41910 +BBX 9 10 3 0 +BITMAP +0400 +1500 +1500 +1500 +C400 +B400 +8E00 +9100 +2480 +2480 +ENDCHAR +STARTCHAR uniA3B7 +ENCODING 41911 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +8000 +8C00 +FB00 +88C0 +8A00 +0A00 +CA80 +B880 +8E80 +8980 +0800 +ENDCHAR +STARTCHAR uniA3B8 +ENCODING 41912 +BBX 10 11 3 0 +BITMAP +8000 +8C00 +FB00 +88C0 +8A00 +0A00 +CA80 +B880 +8E80 +8980 +0800 +ENDCHAR +STARTCHAR uniA3B9 +ENCODING 41913 +BBX 10 11 3 0 +BITMAP +E000 +1C00 +5B00 +58C0 +1A00 +EA00 +0A00 +C880 +B880 +8E80 +8980 +ENDCHAR +STARTCHAR uniA3BA +ENCODING 41914 +BBX 7 10 4 0 +BITMAP +10 +92 +54 +38 +92 +54 +38 +92 +54 +38 +ENDCHAR +STARTCHAR uniA3BB +ENCODING 41915 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +04A0 +04A0 +04A0 +04A0 +04A0 +04A0 +04C0 +C780 +3480 +0C80 +ENDCHAR +STARTCHAR uniA3BC +ENCODING 41916 +BBX 11 10 2 0 +BITMAP +04A0 +04A0 +04A0 +04A0 +04A0 +04A0 +04C0 +C780 +3480 +0C80 +ENDCHAR +STARTCHAR uniA3BD +ENCODING 41917 +BBX 8 10 4 0 +BITMAP +7E +81 +81 +81 +7E +08 +68 +90 +68 +08 +ENDCHAR +STARTCHAR uniA3BE +ENCODING 41918 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +79 +86 +86 +7A +02 +02 +7A +86 +86 +79 +ENDCHAR +STARTCHAR uniA3BF +ENCODING 41919 +BBX 8 10 4 0 +BITMAP +79 +86 +86 +7A +02 +02 +7A +86 +86 +79 +ENDCHAR +STARTCHAR uniA3C0 +ENCODING 41920 +BBX 10 10 3 0 +BITMAP +1100 +1100 +D140 +B140 +9D40 +9340 +91C0 +1100 +1100 +1100 +ENDCHAR +STARTCHAR uniA3C1 +ENCODING 41921 +BBX 6 13 5 0 +BITMAP +70 +88 +00 +7C +80 +80 +40 +3C +40 +80 +80 +80 +7C +ENDCHAR +STARTCHAR uniA3C2 +ENCODING 41922 +BBX 6 10 5 0 +BITMAP +7C +80 +80 +40 +3C +40 +80 +80 +80 +7C +ENDCHAR +STARTCHAR uniA3C3 +ENCODING 41923 +BBX 9 11 3 0 +BITMAP +2480 +2480 +1500 +0E00 +0400 +0400 +C400 +B400 +8C00 +8000 +8000 +ENDCHAR +STARTCHAR uniA3C4 +ENCODING 41924 +BBX 8 13 3 0 +BITMAP +1C +22 +80 +8F +90 +20 +A0 +BF +A0 +20 +A0 +90 +8F +ENDCHAR +STARTCHAR uniA3C5 +ENCODING 41925 +BBX 8 11 4 0 +BITMAP +80 +8F +90 +20 +A0 +BF +A0 +20 +A0 +90 +8F +ENDCHAR +STARTCHAR uniA3C6 +ENCODING 41926 +BBX 10 11 3 0 +BITMAP +0C00 +0B00 +08C0 +0800 +3E00 +4900 +8880 +BE80 +8880 +8880 +0800 +ENDCHAR +STARTCHAR uniA3C7 +ENCODING 41927 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +7000 +8A40 +8A40 +8980 +8FC0 +8980 +8A40 +8A40 +8800 +7000 +ENDCHAR +STARTCHAR uniA3C8 +ENCODING 41928 +BBX 10 10 3 0 +BITMAP +7000 +8A40 +8A40 +8980 +8FC0 +8980 +8A40 +8A40 +8800 +7000 +ENDCHAR +STARTCHAR uniA3C9 +ENCODING 41929 +BBX 7 10 4 0 +BITMAP +76 +88 +98 +A8 +A8 +A8 +A8 +98 +88 +76 +ENDCHAR +STARTCHAR uniA3CA +ENCODING 41930 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +C2 +A2 +82 +92 +AA +AA +92 +82 +8A +86 +ENDCHAR +STARTCHAR uniA3CB +ENCODING 41931 +BBX 7 10 4 0 +BITMAP +C2 +A2 +82 +92 +AA +AA +92 +82 +8A +86 +ENDCHAR +STARTCHAR uniA3CC +ENCODING 41932 +BBX 9 10 3 0 +BITMAP +8000 +9080 +8900 +8600 +FF80 +8600 +8900 +9080 +8000 +8000 +ENDCHAR +STARTCHAR uniA3CD +ENCODING 41933 +BBX 11 11 2 0 +BITMAP +1100 +0A00 +0400 +8A20 +5140 +2080 +5140 +8A20 +0400 +0A00 +1100 +ENDCHAR +STARTCHAR uniA3CE +ENCODING 41934 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +70 +88 +9C +AA +AA +AA +AA +9C +88 +70 +ENDCHAR +STARTCHAR uniA3CF +ENCODING 41935 +BBX 7 10 4 0 +BITMAP +70 +88 +9C +AA +AA +AA +AA +9C +88 +70 +ENDCHAR +STARTCHAR uniA3D0 +ENCODING 41936 +BBX 11 9 2 0 +BITMAP +1100 +1100 +4A40 +AAA0 +A4A0 +AAA0 +4A40 +1100 +1100 +ENDCHAR +STARTCHAR uniA3D1 +ENCODING 41937 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +38 +44 +44 +38 +93 +55 +39 +39 +55 +93 +ENDCHAR +STARTCHAR uniA3D2 +ENCODING 41938 +BBX 8 10 4 0 +BITMAP +38 +44 +44 +38 +93 +55 +39 +39 +55 +93 +ENDCHAR +STARTCHAR uniA3D3 +ENCODING 41939 +BBX 9 10 3 0 +BITMAP +0F00 +1080 +1080 +9680 +5A80 +3280 +5A80 +9680 +1080 +0F00 +ENDCHAR +STARTCHAR uniA3D4 +ENCODING 41940 +BBX 7 12 4 0 +BITMAP +92 +54 +38 +38 +54 +92 +54 +54 +10 +FE +10 +FE +ENDCHAR +STARTCHAR uniA3D5 +ENCODING 41941 +BBX 10 13 2 0 +BITMAP +0E00 +1100 +0000 +1F00 +C440 +B440 +8C40 +8740 +84C0 +0400 +1500 +1500 +0400 +ENDCHAR +STARTCHAR uniA3D6 +ENCODING 41942 +BBX 10 10 3 0 +BITMAP +1F00 +C440 +B440 +8C40 +8740 +84C0 +0400 +1500 +1500 +0400 +ENDCHAR +STARTCHAR uniA3D7 +ENCODING 41943 +BBX 9 10 3 0 +BITMAP +F000 +0800 +4980 +2A80 +1C80 +1C80 +2A80 +4980 +0800 +F000 +ENDCHAR +STARTCHAR uniA3D8 +ENCODING 41944 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +92 +54 +38 +38 +54 +92 +10 +54 +54 +10 +ENDCHAR +STARTCHAR uniA3D9 +ENCODING 41945 +BBX 7 10 4 0 +BITMAP +92 +54 +38 +38 +54 +92 +10 +54 +54 +10 +ENDCHAR +STARTCHAR uniA3DA +ENCODING 41946 +BBX 10 10 3 0 +BITMAP +1240 +1240 +0A80 +0700 +1A00 +1600 +3800 +5400 +9200 +9200 +ENDCHAR +STARTCHAR uniA3DB +ENCODING 41947 +BBX 7 13 5 0 +BITMAP +70 +88 +00 +C4 +B4 +8C +80 +A4 +FE +A4 +A4 +FE +A4 +ENDCHAR +STARTCHAR uniA3DC +ENCODING 41948 +BBX 7 10 5 0 +BITMAP +C4 +B4 +8C +80 +A4 +FE +A4 +A4 +FE +A4 +ENDCHAR +STARTCHAR uniA3DD +ENCODING 41949 +BBX 12 10 2 0 +BITMAP +00C0 +00A0 +9890 +5480 +3280 +FE80 +1880 +1480 +1280 +0180 +ENDCHAR +STARTCHAR uniA3DE +ENCODING 41950 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +03C0 +C400 +2400 +13C0 +1400 +1400 +13C0 +2400 +C400 +03C0 +ENDCHAR +STARTCHAR uniA3DF +ENCODING 41951 +BBX 10 10 3 0 +BITMAP +03C0 +C400 +2400 +13C0 +1400 +1400 +13C0 +2400 +C400 +03C0 +ENDCHAR +STARTCHAR uniA3E0 +ENCODING 41952 +BBX 7 10 4 0 +BITMAP +7C +82 +10 +D2 +B2 +9A +96 +10 +82 +7C +ENDCHAR +STARTCHAR uniA3E1 +ENCODING 41953 +BBX 10 13 2 0 +BITMAP +0E00 +1100 +0000 +0400 +0400 +C440 +B040 +8C40 +8340 +80C0 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA3E2 +ENCODING 41954 +BBX 10 10 3 0 +BITMAP +0400 +0400 +C440 +B040 +8C40 +8340 +80C0 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA3E3 +ENCODING 41955 +BBX 10 12 3 0 +BITMAP +FFC0 +0100 +0500 +0500 +3100 +2D00 +2300 +2000 +2400 +2400 +2000 +FFC0 +ENDCHAR +STARTCHAR uniA3E4 +ENCODING 41956 +BBX 12 11 2 0 +BITMAP +1CC0 +13A0 +1090 +D680 +3180 +1080 +D680 +3180 +1080 +D680 +3180 +ENDCHAR +STARTCHAR uniA3E5 +ENCODING 41957 +BBX 13 13 1 0 +BITMAP +0700 +0880 +0000 +1008 +1268 +1258 +1040 +1FC0 +1040 +1240 +D240 +B040 +8040 +ENDCHAR +STARTCHAR uniA3E6 +ENCODING 41958 +BBX 13 10 1 0 +BITMAP +1008 +1268 +1258 +1040 +1FC0 +1040 +1240 +D240 +B040 +8040 +ENDCHAR +STARTCHAR uniA3E7 +ENCODING 41959 +BBX 8 10 4 0 +BITMAP +EF +10 +28 +FE +28 +28 +FE +28 +10 +EF +ENDCHAR +STARTCHAR uniA3E8 +ENCODING 41960 +BBX 9 12 3 0 +BITMAP +8080 +BE80 +4100 +BE80 +8080 +8880 +8880 +8080 +BE80 +4100 +BE80 +8080 +ENDCHAR +STARTCHAR uniA3E9 +ENCODING 41961 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +2200 +2200 +9C80 +8880 +8880 +7700 +0000 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA3EA +ENCODING 41962 +BBX 9 10 3 0 +BITMAP +2200 +2200 +9C80 +8880 +8880 +7700 +0000 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA3EB +ENCODING 41963 +BBX 10 10 3 0 +BITMAP +7C00 +82C0 +9B00 +9600 +9200 +9200 +D200 +B300 +82C0 +7C00 +ENDCHAR +STARTCHAR uniA3EC +ENCODING 41964 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +0000 +0800 +0800 +3E00 +0800 +0800 +ENDCHAR +STARTCHAR uniA3ED +ENCODING 41965 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +8880 +7700 +0000 +0800 +0800 +4800 +4800 +3000 +ENDCHAR +STARTCHAR uniA3EE +ENCODING 41966 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +0000 +0800 +0800 +4800 +4800 +3000 +ENDCHAR +STARTCHAR uniA3EF +ENCODING 41967 +BBX 9 11 3 0 +BITMAP +2200 +2200 +1C00 +8880 +8880 +7700 +0000 +0800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA3F0 +ENCODING 41968 +BBX 9 11 3 0 +BITMAP +3E00 +4100 +8C80 +8A80 +8880 +BE80 +8880 +A880 +9880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA3F1 +ENCODING 41969 +BBX 6 13 5 0 +BITMAP +70 +88 +00 +3C +40 +88 +94 +94 +94 +94 +88 +40 +3C +ENDCHAR +STARTCHAR uniA3F2 +ENCODING 41970 +BBX 6 10 5 0 +BITMAP +3C +40 +88 +94 +94 +94 +94 +88 +40 +3C +ENDCHAR +STARTCHAR uniA3F3 +ENCODING 41971 +BBX 8 10 4 0 +BITMAP +3D +43 +91 +A8 +A8 +A8 +A8 +91 +42 +3C +ENDCHAR +STARTCHAR uniA3F4 +ENCODING 41972 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8080 +8C80 +8A80 +8880 +8880 +8880 +A880 +9880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA3F5 +ENCODING 41973 +BBX 9 10 3 0 +BITMAP +8080 +8C80 +8A80 +8880 +8880 +8880 +A880 +9880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA3F6 +ENCODING 41974 +BBX 10 10 3 0 +BITMAP +0C00 +0B00 +48C0 +8800 +8800 +BE00 +8800 +8800 +4800 +0800 +ENDCHAR +STARTCHAR uniA3F7 +ENCODING 41975 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +38 +26 +20 +A0 +A0 +A0 +A0 +A0 +26 +38 +ENDCHAR +STARTCHAR uniA3F8 +ENCODING 41976 +BBX 7 10 4 0 +BITMAP +38 +26 +20 +A0 +A0 +A0 +A0 +A0 +26 +38 +ENDCHAR +STARTCHAR uniA3F9 +ENCODING 41977 +BBX 7 11 4 0 +BITMAP +E0 +9C +80 +88 +88 +BE +88 +88 +80 +9C +E0 +ENDCHAR +STARTCHAR uniA3FA +ENCODING 41978 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +0040 +0C40 +4B40 +88C0 +8800 +B800 +8800 +8800 +4800 +0800 +ENDCHAR +STARTCHAR uniA3FB +ENCODING 41979 +BBX 10 10 3 0 +BITMAP +0040 +0C40 +4B40 +88C0 +8800 +B800 +8800 +8800 +4800 +0800 +ENDCHAR +STARTCHAR uniA3FC +ENCODING 41980 +BBX 12 10 2 0 +BITMAP +00C0 +00A0 +0090 +4080 +8F80 +9080 +7280 +9280 +9080 +4F80 +ENDCHAR +STARTCHAR uniA3FD +ENCODING 41981 +BBX 7 12 4 0 +BITMAP +38 +44 +00 +44 +44 +28 +AA +92 +AA +28 +44 +44 +ENDCHAR +STARTCHAR uniA3FE +ENCODING 41982 +BBX 7 9 4 0 +BITMAP +44 +44 +28 +AA +92 +AA +28 +44 +44 +ENDCHAR +STARTCHAR uniA3FF +ENCODING 41983 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8080 +8080 +8880 +8880 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA400 +ENCODING 41984 +BBX 12 9 2 0 +BITMAP +FE00 +8290 +4490 +2860 +1FE0 +2860 +4490 +8290 +FE00 +ENDCHAR +STARTCHAR uniA401 +ENCODING 41985 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +1000 +1220 +1220 +1140 +1080 +1FE0 +1080 +9140 +5220 +3220 +ENDCHAR +STARTCHAR uniA402 +ENCODING 41986 +BBX 11 10 2 0 +BITMAP +1000 +1220 +1220 +1140 +1080 +1FE0 +1080 +9140 +5220 +3220 +ENDCHAR +STARTCHAR uniA403 +ENCODING 41987 +BBX 10 9 3 0 +BITMAP +8800 +8A40 +8A40 +5180 +3FC0 +5180 +8A40 +8A40 +8800 +ENDCHAR +STARTCHAR uniA404 +ENCODING 41988 +BBX 8 10 4 0 +BITMAP +3F +41 +41 +3F +01 +3F +01 +BF +81 +7E +ENDCHAR +STARTCHAR uniA405 +ENCODING 41989 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8080 +8080 +8080 +8F80 +8080 +F880 +8080 +8080 +8F80 +8080 +ENDCHAR +STARTCHAR uniA406 +ENCODING 41990 +BBX 9 10 3 0 +BITMAP +8080 +8080 +8080 +8F80 +8080 +F880 +8080 +8080 +8F80 +8080 +ENDCHAR +STARTCHAR uniA407 +ENCODING 41991 +BBX 9 10 3 0 +BITMAP +8080 +8080 +8F80 +8080 +F880 +8080 +8F80 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA408 +ENCODING 41992 +BBX 9 10 3 0 +BITMAP +0800 +8800 +8800 +8880 +0880 +0880 +8880 +8800 +8800 +0800 +ENDCHAR +STARTCHAR uniA409 +ENCODING 41993 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +7000 +C800 +A800 +8900 +8A80 +BE80 +8A80 +A900 +C800 +7000 +ENDCHAR +STARTCHAR uniA40A +ENCODING 41994 +BBX 9 10 3 0 +BITMAP +7000 +C800 +A800 +8900 +8A80 +BE80 +8A80 +A900 +C800 +7000 +ENDCHAR +STARTCHAR uniA40B +ENCODING 41995 +BBX 9 10 3 0 +BITMAP +3E00 +4900 +8880 +8080 +8080 +8080 +9480 +A280 +4100 +3E00 +ENDCHAR +STARTCHAR uniA40C +ENCODING 41996 +BBX 8 10 4 0 +BITMAP +70 +88 +8F +88 +8F +88 +8F +88 +88 +70 +ENDCHAR +STARTCHAR uniA40D +ENCODING 41997 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +3E00 +4100 +8080 +8080 +8080 +8080 +8080 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA40E +ENCODING 41998 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8080 +8080 +8080 +8080 +8080 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uniA40F +ENCODING 41999 +BBX 9 10 3 0 +BITMAP +0080 +4080 +8080 +8480 +7480 +8480 +8080 +5880 +0680 +0180 +ENDCHAR +STARTCHAR uniA410 +ENCODING 42000 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +3E00 +4100 +8080 +8080 +8080 +8080 +8080 +9480 +5500 +3E00 +ENDCHAR +STARTCHAR uniA411 +ENCODING 42001 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8080 +8080 +8080 +8080 +8080 +9480 +5500 +3E00 +ENDCHAR +STARTCHAR uniA412 +ENCODING 42002 +BBX 10 10 3 0 +BITMAP +0800 +88C0 +4940 +2A40 +1C40 +1C40 +2A40 +4940 +88C0 +0800 +ENDCHAR +STARTCHAR uniA413 +ENCODING 42003 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +82 +82 +44 +38 +10 +D0 +B0 +80 +80 +80 +ENDCHAR +STARTCHAR uniA414 +ENCODING 42004 +BBX 7 10 4 0 +BITMAP +82 +82 +44 +38 +10 +D0 +B0 +80 +80 +80 +ENDCHAR +STARTCHAR uniA415 +ENCODING 42005 +BBX 7 11 4 0 +BITMAP +92 +AA +92 +44 +38 +10 +D0 +B0 +80 +80 +80 +ENDCHAR +STARTCHAR uniA416 +ENCODING 42006 +BBX 9 15 3 -1 +BITMAP +1C00 +2200 +0000 +C180 +A280 +9C80 +9C80 +AA80 +C980 +0800 +4900 +2A00 +1C00 +2A00 +4900 +ENDCHAR +STARTCHAR uniA417 +ENCODING 42007 +BBX 9 12 3 0 +BITMAP +C180 +A280 +9C80 +9C80 +AA80 +C980 +0800 +4900 +2A00 +1C00 +2A00 +4900 +ENDCHAR +STARTCHAR uniA418 +ENCODING 42008 +BBX 7 10 4 0 +BITMAP +82 +82 +44 +38 +92 +92 +38 +44 +82 +82 +ENDCHAR +STARTCHAR uniA419 +ENCODING 42009 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +2200 +2200 +FF80 +2200 +2200 +2200 +2200 +FF80 +2200 +2200 +ENDCHAR +STARTCHAR uniA41A +ENCODING 42010 +BBX 9 10 3 0 +BITMAP +2200 +2200 +FF80 +2200 +2200 +2200 +2200 +FF80 +2200 +2200 +ENDCHAR +STARTCHAR uniA41B +ENCODING 42011 +BBX 9 11 3 0 +BITMAP +C000 +2600 +FD00 +2480 +C400 +0400 +7C00 +8400 +8400 +8400 +7C00 +ENDCHAR +STARTCHAR uniA41C +ENCODING 42012 +BBX 8 10 3 0 +BITMAP +41 +41 +22 +1C +08 +2A +2A +88 +88 +70 +ENDCHAR +STARTCHAR uniA41D +ENCODING 42013 +BBX 11 13 2 0 +BITMAP +0E00 +1100 +0000 +60C0 +9120 +1100 +1100 +0E00 +3F80 +0400 +0400 +2400 +1800 +ENDCHAR +STARTCHAR uniA41E +ENCODING 42014 +BBX 11 10 2 0 +BITMAP +60C0 +9120 +1100 +1100 +0E00 +3F80 +0400 +0400 +2400 +1800 +ENDCHAR +STARTCHAR uniA41F +ENCODING 42015 +BBX 7 10 4 0 +BITMAP +92 +92 +44 +38 +10 +92 +92 +92 +10 +10 +ENDCHAR +STARTCHAR uniA420 +ENCODING 42016 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +C180 +2200 +9480 +9480 +9480 +2200 +C180 +1C00 +2200 +4900 +4900 +ENDCHAR +STARTCHAR uniA421 +ENCODING 42017 +BBX 9 11 3 0 +BITMAP +C180 +2200 +9480 +9480 +9480 +2200 +C180 +1C00 +2200 +4900 +4900 +ENDCHAR +STARTCHAR uniA422 +ENCODING 42018 +BBX 10 10 3 0 +BITMAP +1040 +1040 +0880 +4700 +A000 +A000 +4700 +0880 +1040 +1040 +ENDCHAR +STARTCHAR uniA423 +ENCODING 42019 +BBX 12 10 2 0 +BITMAP +3010 +2B10 +26D0 +7230 +AA00 +AA00 +2200 +7200 +AA00 +AA00 +ENDCHAR +STARTCHAR uniA424 +ENCODING 42020 +BBX 13 13 1 0 +BITMAP +0700 +0880 +0000 +3180 +2D60 +2318 +2100 +F900 +2100 +F900 +2100 +2100 +2100 +ENDCHAR +STARTCHAR uniA425 +ENCODING 42021 +BBX 13 10 1 0 +BITMAP +3180 +2D60 +2318 +2100 +F900 +2100 +F900 +2100 +2100 +2100 +ENDCHAR +STARTCHAR uniA426 +ENCODING 42022 +BBX 9 11 3 0 +BITMAP +C180 +2200 +1400 +1400 +1400 +2200 +C180 +1C00 +2200 +4100 +4100 +ENDCHAR +STARTCHAR uniA427 +ENCODING 42023 +BBX 9 10 3 0 +BITMAP +7F00 +8080 +8080 +8080 +7F00 +0800 +3800 +4000 +4100 +3E00 +ENDCHAR +STARTCHAR uniA428 +ENCODING 42024 +BBX 8 14 4 0 +BITMAP +38 +44 +00 +01 +7F +88 +FF +88 +7F +10 +1C +2A +49 +49 +ENDCHAR +STARTCHAR uniA429 +ENCODING 42025 +BBX 8 11 4 0 +BITMAP +01 +7F +88 +FF +88 +7F +08 +1C +2A +49 +49 +ENDCHAR +STARTCHAR uniA42A +ENCODING 42026 +BBX 7 9 4 0 +BITMAP +7C +82 +92 +92 +44 +92 +92 +82 +7C +ENDCHAR +STARTCHAR uniA42B +ENCODING 42027 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +08 +7F +88 +88 +7F +08 +1C +2A +49 +49 +ENDCHAR +STARTCHAR uniA42C +ENCODING 42028 +BBX 8 10 4 0 +BITMAP +08 +7F +88 +88 +7F +08 +1C +2A +49 +49 +ENDCHAR +STARTCHAR uniA42D +ENCODING 42029 +BBX 11 10 2 0 +BITMAP +E020 +9820 +8720 +94E0 +1400 +0500 +E520 +9C20 +8720 +80E0 +ENDCHAR +STARTCHAR uniA42E +ENCODING 42030 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +EE +44 +44 +44 +38 +10 +7C +10 +90 +60 +ENDCHAR +STARTCHAR uniA42F +ENCODING 42031 +BBX 7 10 4 0 +BITMAP +EE +44 +44 +44 +38 +10 +7C +10 +90 +60 +ENDCHAR +STARTCHAR uniA430 +ENCODING 42032 +BBX 8 12 4 0 +BITMAP +AC +AA +F9 +A8 +A8 +08 +A8 +A8 +F8 +A8 +A8 +08 +ENDCHAR +STARTCHAR uniA431 +ENCODING 42033 +BBX 9 10 3 0 +BITMAP +7F80 +8400 +8400 +8400 +7F80 +0400 +0400 +4400 +4400 +3800 +ENDCHAR +STARTCHAR uniA432 +ENCODING 42034 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +4900 +3E00 +0800 +0800 +0800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA433 +ENCODING 42035 +BBX 9 10 3 0 +BITMAP +8880 +8880 +4900 +3E00 +0800 +0800 +0800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA434 +ENCODING 42036 +BBX 12 10 2 0 +BITMAP +8080 +8080 +FFE0 +8090 +8090 +80E0 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA435 +ENCODING 42037 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +0000 +4900 +4900 +4900 +0000 +7F00 +ENDCHAR +STARTCHAR uniA436 +ENCODING 42038 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +1C00 +2200 +2A00 +2A00 +F280 +AA80 +A780 +2A00 +2A00 +2200 +1C00 +ENDCHAR +STARTCHAR uniA437 +ENCODING 42039 +BBX 9 11 3 0 +BITMAP +1C00 +2200 +2A00 +2A00 +F280 +AA80 +A780 +2A00 +2A00 +2200 +1C00 +ENDCHAR +STARTCHAR uniA438 +ENCODING 42040 +BBX 9 11 3 0 +BITMAP +3E00 +4100 +4100 +3E00 +0800 +7F00 +0800 +2A00 +AA80 +8080 +7F00 +ENDCHAR +STARTCHAR uniA439 +ENCODING 42041 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +3300 +2E80 +2200 +2200 +3E00 +2200 +0000 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA43A +ENCODING 42042 +BBX 9 10 3 0 +BITMAP +3300 +2E80 +2200 +2200 +3E00 +2200 +0000 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA43B +ENCODING 42043 +BBX 13 9 1 0 +BITMAP +C060 +A0A8 +9128 +8A20 +8428 +8A28 +9120 +A0A8 +C068 +ENDCHAR +STARTCHAR uniA43C +ENCODING 42044 +BBX 14 12 1 0 +BITMAP +0700 +0880 +0000 +C060 +A0A8 +9124 +8A24 +8438 +8A24 +9124 +A0A8 +C060 +ENDCHAR +STARTCHAR uniA43D +ENCODING 42045 +BBX 14 9 1 0 +BITMAP +C060 +A0A8 +9124 +8A24 +8438 +8A24 +9124 +A0A8 +C060 +ENDCHAR +STARTCHAR uniA43E +ENCODING 42046 +BBX 7 10 4 0 +BITMAP +EE +10 +28 +28 +EA +BA +AE +28 +10 +EE +ENDCHAR +STARTCHAR uniA43F +ENCODING 42047 +BBX 6 14 5 0 +BITMAP +70 +88 +00 +3C +40 +88 +88 +80 +FC +80 +88 +88 +40 +3C +ENDCHAR +STARTCHAR uniA440 +ENCODING 42048 +BBX 6 11 5 0 +BITMAP +3C +40 +88 +88 +80 +FC +80 +88 +88 +40 +3C +ENDCHAR +STARTCHAR uniA441 +ENCODING 42049 +BBX 8 10 4 0 +BITMAP +3C +40 +82 +81 +F9 +81 +82 +80 +40 +3C +ENDCHAR +STARTCHAR uniA442 +ENCODING 42050 +BBX 12 13 1 0 +BITMAP +0700 +0880 +0000 +00C0 +00B0 +0080 +07F0 +3080 +4080 +9880 +9680 +1180 +1000 +ENDCHAR +STARTCHAR uniA443 +ENCODING 42051 +BBX 12 10 2 0 +BITMAP +00C0 +00B0 +0080 +07F0 +3080 +4080 +9880 +9680 +1180 +1000 +ENDCHAR +STARTCHAR uniA444 +ENCODING 42052 +BBX 9 10 3 0 +BITMAP +7900 +8680 +8280 +8100 +4000 +3000 +0800 +0400 +8400 +7800 +ENDCHAR +STARTCHAR uniA445 +ENCODING 42053 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +2480 +1500 +0E00 +0E00 +1500 +2480 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA446 +ENCODING 42054 +BBX 9 11 3 0 +BITMAP +2480 +1500 +0E00 +0E00 +1500 +2480 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA447 +ENCODING 42055 +BBX 7 10 4 0 +BITMAP +82 +82 +18 +14 +12 +10 +10 +90 +50 +30 +ENDCHAR +STARTCHAR uniA448 +ENCODING 42056 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +1600 +D500 +3480 +1400 +D400 +3400 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA449 +ENCODING 42057 +BBX 9 11 3 0 +BITMAP +1600 +D500 +3480 +1400 +D400 +3400 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA44A +ENCODING 42058 +BBX 9 11 3 0 +BITMAP +8880 +8880 +7F00 +0800 +7F00 +8880 +8880 +0800 +6800 +5800 +4000 +ENDCHAR +STARTCHAR uniA44B +ENCODING 42059 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +0C00 +0B00 +08C0 +0800 +FF80 +0800 +FF80 +0800 +FF80 +0800 +ENDCHAR +STARTCHAR uniA44C +ENCODING 42060 +BBX 10 10 3 0 +BITMAP +0C00 +0B00 +08C0 +0800 +FF80 +0800 +FF80 +0800 +FF80 +0800 +ENDCHAR +STARTCHAR uniA44D +ENCODING 42061 +BBX 6 10 4 0 +BITMAP +C0 +B0 +8C +80 +84 +84 +84 +84 +80 +80 +ENDCHAR +STARTCHAR uniA44E +ENCODING 42062 +BBX 14 10 1 0 +BITMAP +C00C +2490 +14A0 +1320 +1020 +1FE0 +1020 +1320 +2490 +C48C +ENDCHAR +STARTCHAR uniA44F +ENCODING 42063 +BBX 14 13 1 0 +BITMAP +0700 +0880 +0000 +110C +1110 +1120 +1020 +1020 +1FE0 +1020 +9320 +5490 +348C +ENDCHAR +STARTCHAR uniA450 +ENCODING 42064 +BBX 14 10 1 0 +BITMAP +110C +1110 +1120 +1020 +1020 +1FE0 +1020 +9320 +5490 +348C +ENDCHAR +STARTCHAR uniA451 +ENCODING 42065 +BBX 13 10 1 0 +BITMAP +C218 +2220 +1240 +1040 +1040 +1FC0 +1040 +1240 +2220 +C218 +ENDCHAR +STARTCHAR uniA452 +ENCODING 42066 +BBX 8 15 4 -1 +BITMAP +38 +44 +00 +38 +44 +92 +92 +44 +38 +00 +FF +06 +18 +60 +FF +ENDCHAR +STARTCHAR uniA453 +ENCODING 42067 +BBX 8 12 4 0 +BITMAP +38 +44 +92 +92 +44 +38 +00 +FF +06 +18 +60 +FF +ENDCHAR +STARTCHAR uniA454 +ENCODING 42068 +BBX 11 12 2 0 +BITMAP +2080 +A0A0 +9120 +8E20 +4040 +3F80 +8420 +8420 +FFE0 +8420 +8420 +0400 +ENDCHAR +STARTCHAR uniA455 +ENCODING 42069 +BBX 11 10 2 0 +BITMAP +C460 +2480 +1500 +1500 +1500 +1500 +1500 +1500 +2480 +C460 +ENDCHAR +STARTCHAR uniA456 +ENCODING 42070 +BBX 8 13 3 0 +BITMAP +1C +22 +00 +69 +5D +4B +08 +69 +5D +4B +08 +C8 +38 +ENDCHAR +STARTCHAR uniA457 +ENCODING 42071 +BBX 8 13 3 0 +BITMAP +0C +0B +08 +69 +5D +4B +08 +69 +5D +4B +08 +C8 +38 +ENDCHAR +STARTCHAR uniA458 +ENCODING 42072 +BBX 7 10 4 0 +BITMAP +38 +44 +44 +82 +82 +82 +82 +92 +92 +6C +ENDCHAR +STARTCHAR uniA459 +ENCODING 42073 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8880 +8880 +FF80 +8880 +8880 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA45A +ENCODING 42074 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +88 +88 +E8 +9C +8B +88 +89 +89 +89 +88 +ENDCHAR +STARTCHAR uniA45B +ENCODING 42075 +BBX 8 10 4 0 +BITMAP +88 +88 +E8 +9C +8B +88 +89 +89 +89 +88 +ENDCHAR +STARTCHAR uniA45C +ENCODING 42076 +BBX 8 10 4 0 +BITMAP +08 +7F +88 +88 +88 +7F +08 +09 +09 +09 +ENDCHAR +STARTCHAR uniA45D +ENCODING 42077 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +0000 +2200 +1400 +0800 +1400 +2200 +ENDCHAR +STARTCHAR uniA45E +ENCODING 42078 +BBX 10 12 3 0 +BITMAP +1C00 +2200 +0000 +8840 +8840 +5040 +5040 +2340 +52C0 +5200 +8A00 +8A00 +ENDCHAR +STARTCHAR uniA45F +ENCODING 42079 +BBX 10 9 3 0 +BITMAP +8840 +8840 +5040 +5040 +2340 +52C0 +5200 +8A00 +8A00 +ENDCHAR +STARTCHAR uniA460 +ENCODING 42080 +BBX 7 11 4 0 +BITMAP +62 +92 +62 +02 +62 +92 +62 +02 +62 +1A +06 +ENDCHAR +STARTCHAR uniA461 +ENCODING 42081 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +2200 +2A00 +1C00 +0800 +4800 +3000 +ENDCHAR +STARTCHAR uniA462 +ENCODING 42082 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +8880 +7700 +2200 +2200 +2200 +AA00 +AA00 +4400 +ENDCHAR +STARTCHAR uniA463 +ENCODING 42083 +BBX 9 10 3 0 +BITMAP +8880 +8880 +8880 +7700 +2200 +2200 +2200 +AA00 +AA00 +4400 +ENDCHAR +STARTCHAR uniA464 +ENCODING 42084 +BBX 11 9 2 0 +BITMAP +8820 +8820 +51A0 +5160 +2100 +5380 +5100 +8B80 +8900 +ENDCHAR +STARTCHAR uniA465 +ENCODING 42085 +BBX 7 13 4 0 +BITMAP +38 +44 +00 +92 +92 +44 +38 +44 +82 +FE +82 +44 +38 +ENDCHAR +STARTCHAR uniA466 +ENCODING 42086 +BBX 7 10 4 0 +BITMAP +92 +92 +44 +38 +44 +82 +FE +82 +44 +38 +ENDCHAR +STARTCHAR uniA467 +ENCODING 42087 +BBX 9 11 3 0 +BITMAP +8880 +8880 +7700 +0000 +2200 +1C00 +0000 +A280 +9C80 +4100 +3E00 +ENDCHAR +STARTCHAR uniA468 +ENCODING 42088 +BBX 10 13 3 0 +BITMAP +1C00 +2200 +0000 +3300 +2A80 +2640 +2200 +7200 +AA00 +AA00 +7200 +2200 +2200 +ENDCHAR +STARTCHAR uniA469 +ENCODING 42089 +BBX 10 10 3 0 +BITMAP +3300 +2A80 +2640 +2200 +7200 +AA00 +AA00 +7200 +2200 +2200 +ENDCHAR +STARTCHAR uniA46A +ENCODING 42090 +BBX 15 10 0 0 +BITMAP +1860 +1658 +11C6 +1040 +9640 +5A40 +3240 +5A40 +9640 +1040 +ENDCHAR +STARTCHAR uniA46B +ENCODING 42091 +BBX 7 10 4 0 +BITMAP +44 +44 +38 +10 +D2 +BA +96 +10 +10 +FE +ENDCHAR +STARTCHAR uniA46C +ENCODING 42092 +BBX 10 13 2 0 +BITMAP +0E00 +1100 +0000 +0400 +0400 +C440 +B440 +8C40 +8740 +84C0 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA46D +ENCODING 42093 +BBX 10 10 3 0 +BITMAP +0400 +0400 +C440 +B440 +8C40 +8740 +84C0 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA46E +ENCODING 42094 +BBX 10 10 3 0 +BITMAP +1100 +1100 +0E00 +C440 +B440 +8C40 +8740 +84C0 +0400 +0400 +ENDCHAR +STARTCHAR uniA46F +ENCODING 42095 +BBX 10 13 2 0 +BITMAP +0E00 +1100 +0000 +4440 +4440 +4440 +2480 +1F00 +C440 +B440 +8C40 +8740 +84C0 +ENDCHAR +STARTCHAR uniA470 +ENCODING 42096 +BBX 10 10 3 0 +BITMAP +4440 +4440 +4440 +2480 +1F00 +C440 +B440 +8C40 +8740 +84C0 +ENDCHAR +STARTCHAR uniA471 +ENCODING 42097 +BBX 11 10 2 0 +BITMAP +0020 +0320 +02A0 +0260 +0200 +7E00 +9200 +FE00 +9200 +7E00 +ENDCHAR +STARTCHAR uniA472 +ENCODING 42098 +BBX 12 13 2 0 +BITMAP +0E00 +1100 +0000 +A3C0 +A420 +E810 +A010 +A010 +0010 +0010 +0E10 +0990 +0860 +ENDCHAR +STARTCHAR uniA473 +ENCODING 42099 +BBX 12 10 2 0 +BITMAP +A3C0 +A420 +E810 +A010 +A010 +0010 +0010 +0E10 +0990 +0860 +ENDCHAR +STARTCHAR uniA474 +ENCODING 42100 +BBX 7 11 4 0 +BITMAP +18 +16 +10 +92 +54 +38 +54 +92 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA475 +ENCODING 42101 +BBX 12 10 2 0 +BITMAP +0010 +0190 +0150 +0130 +3F00 +E380 +5500 +5500 +E380 +1F00 +ENDCHAR +STARTCHAR uniA476 +ENCODING 42102 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +0080 +1880 +1680 +1180 +1000 +FE00 +1000 +FE00 +1000 +1000 +ENDCHAR +STARTCHAR uniA477 +ENCODING 42103 +BBX 9 10 3 0 +BITMAP +0080 +1880 +1680 +1180 +1000 +FE00 +1000 +FE00 +1000 +1000 +ENDCHAR +STARTCHAR uniA478 +ENCODING 42104 +BBX 9 13 3 0 +BITMAP +0E00 +0980 +0800 +3E00 +4900 +AA80 +9C80 +AA80 +4900 +3E00 +0800 +C800 +3800 +ENDCHAR +STARTCHAR uniA479 +ENCODING 42105 +BBX 9 10 3 0 +BITMAP +9600 +9580 +6400 +0600 +6580 +9400 +9600 +0580 +3400 +0C00 +ENDCHAR +STARTCHAR uniA47A +ENCODING 42106 +BBX 9 13 3 0 +BITMAP +1C00 +2200 +0000 +6600 +9580 +9400 +F400 +9400 +9700 +6480 +0480 +3480 +0C00 +ENDCHAR +STARTCHAR uniA47B +ENCODING 42107 +BBX 9 10 3 0 +BITMAP +6600 +9580 +9400 +F400 +9400 +9700 +6480 +0480 +3480 +0C00 +ENDCHAR +STARTCHAR uniA47C +ENCODING 42108 +BBX 8 11 3 0 +BITMAP +10 +7D +11 +01 +7D +83 +80 +F8 +81 +82 +7C +ENDCHAR +STARTCHAR uniA47D +ENCODING 42109 +BBX 9 10 3 0 +BITMAP +6600 +9580 +9400 +0400 +9400 +9400 +6400 +0400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA47E +ENCODING 42110 +BBX 8 13 4 0 +BITMAP +38 +44 +00 +3D +43 +81 +80 +F8 +80 +80 +81 +42 +3C +ENDCHAR +STARTCHAR uniA47F +ENCODING 42111 +BBX 8 10 4 0 +BITMAP +3D +43 +81 +80 +F8 +80 +80 +81 +42 +3C +ENDCHAR +STARTCHAR uniA480 +ENCODING 42112 +BBX 8 10 4 0 +BITMAP +82 +82 +44 +38 +12 +14 +18 +11 +11 +0E +ENDCHAR +STARTCHAR uniA481 +ENCODING 42113 +BBX 7 12 4 0 +BITMAP +18 +16 +10 +D2 +BA +96 +10 +7C +10 +D0 +B0 +80 +ENDCHAR +STARTCHAR uniA482 +ENCODING 42114 +BBX 9 14 3 0 +BITMAP +1C00 +2200 +0000 +8880 +8880 +BE80 +8880 +8880 +4100 +3E00 +0800 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA483 +ENCODING 42115 +BBX 9 11 3 0 +BITMAP +8880 +8880 +BE80 +8880 +8880 +4100 +3E00 +0800 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA484 +ENCODING 42116 +BBX 7 10 4 0 +BITMAP +02 +92 +92 +FE +92 +92 +02 +62 +1A +06 +ENDCHAR +STARTCHAR uniA485 +ENCODING 42117 +BBX 7 14 4 0 +BITMAP +38 +44 +00 +18 +16 +10 +D2 +BA +96 +10 +7C +10 +D0 +30 +ENDCHAR +STARTCHAR uniA486 +ENCODING 42118 +BBX 7 11 4 0 +BITMAP +18 +16 +10 +D2 +BA +96 +10 +7C +10 +D0 +30 +ENDCHAR +STARTCHAR uniA487 +ENCODING 42119 +BBX 7 11 4 0 +BITMAP +92 +92 +44 +38 +00 +FE +00 +38 +44 +92 +92 +ENDCHAR +STARTCHAR uniA488 +ENCODING 42120 +BBX 6 13 4 0 +BITMAP +38 +44 +00 +04 +04 +3C +44 +84 +84 +44 +3C +04 +04 +ENDCHAR +STARTCHAR uniA489 +ENCODING 42121 +BBX 6 10 4 0 +BITMAP +04 +04 +3C +44 +84 +84 +44 +3C +04 +04 +ENDCHAR +STARTCHAR uniA48A +ENCODING 42122 +BBX 9 10 3 0 +BITMAP +0780 +3800 +4800 +8400 +8380 +8400 +4800 +3800 +0800 +0780 +ENDCHAR +STARTCHAR uniA48B +ENCODING 42123 +BBX 11 14 2 0 +BITMAP +0E00 +1100 +0000 +E4E0 +1500 +1500 +E4E0 +0400 +7FC0 +0400 +E4E0 +1500 +1500 +E4E0 +ENDCHAR +STARTCHAR uniA48C +ENCODING 42124 +BBX 11 11 2 0 +BITMAP +E4E0 +1500 +1500 +E4E0 +0400 +7FC0 +0400 +E4E0 +1500 +1500 +E4E0 +ENDCHAR +STARTCHAR uniA490 +ENCODING 42128 +BBX 1 10 7 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA491 +ENCODING 42129 +BBX 6 10 4 0 +BITMAP +04 +04 +04 +04 +04 +04 +04 +C4 +34 +0C +ENDCHAR +STARTCHAR uniA492 +ENCODING 42130 +BBX 6 10 5 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +8C +B0 +C0 +ENDCHAR +STARTCHAR uniA493 +ENCODING 42131 +BBX 6 10 5 0 +BITMAP +C0 +B0 +8C +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA494 +ENCODING 42132 +BBX 7 10 4 0 +BITMAP +18 +16 +10 +10 +10 +10 +10 +10 +D0 +30 +ENDCHAR +STARTCHAR uniA495 +ENCODING 42133 +BBX 6 10 5 0 +BITMAP +04 +C4 +B4 +8C +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA496 +ENCODING 42134 +BBX 6 10 4 0 +BITMAP +04 +04 +04 +04 +04 +04 +C4 +B4 +8C +80 +ENDCHAR +STARTCHAR uniA497 +ENCODING 42135 +BBX 11 10 2 0 +BITMAP +0600 +0580 +0460 +0400 +0400 +0400 +C400 +B400 +8C00 +8000 +ENDCHAR +STARTCHAR uniA498 +ENCODING 42136 +BBX 10 10 3 0 +BITMAP +0640 +0540 +04C0 +0400 +0400 +0400 +0400 +C400 +3400 +0C00 +ENDCHAR +STARTCHAR uniA499 +ENCODING 42137 +BBX 10 5 3 5 +BITMAP +C040 +B040 +8C40 +8340 +80C0 +ENDCHAR +STARTCHAR uniA49A +ENCODING 42138 +BBX 6 10 5 0 +BITMAP +78 +84 +80 +80 +40 +30 +08 +04 +84 +78 +ENDCHAR +STARTCHAR uniA49B +ENCODING 42139 +BBX 4 10 6 0 +BITMAP +10 +10 +10 +D0 +B0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA49C +ENCODING 42140 +BBX 8 10 4 0 +BITMAP +3C +42 +81 +01 +01 +01 +01 +E1 +99 +86 +ENDCHAR +STARTCHAR uniA49D +ENCODING 42141 +BBX 8 10 4 0 +BITMAP +3D +43 +81 +80 +80 +80 +80 +81 +42 +3C +ENDCHAR +STARTCHAR uniA49E +ENCODING 42142 +BBX 7 10 4 0 +BITMAP +E2 +9A +86 +80 +80 +80 +80 +86 +9A +E2 +ENDCHAR +STARTCHAR uniA49F +ENCODING 42143 +BBX 6 10 5 0 +BITMAP +3C +40 +80 +80 +80 +80 +80 +80 +40 +3C +ENDCHAR +STARTCHAR uniA4A0 +ENCODING 42144 +BBX 7 10 4 0 +BITMAP +FC +02 +02 +02 +02 +02 +02 +02 +02 +FC +ENDCHAR +STARTCHAR uniA4A1 +ENCODING 42145 +BBX 7 4 4 6 +BITMAP +82 +82 +44 +38 +ENDCHAR +STARTCHAR uniA4A2 +ENCODING 42146 +BBX 7 4 4 0 +BITMAP +38 +44 +82 +82 +ENDCHAR +STARTCHAR uniA4A3 +ENCODING 42147 +BBX 10 5 3 5 +BITMAP +C040 +3040 +0C40 +0340 +00C0 +ENDCHAR +STARTCHAR uniA4A4 +ENCODING 42148 +BBX 9 10 3 0 +BITMAP +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA4A5 +ENCODING 42149 +BBX 7 10 4 0 +BITMAP +86 +88 +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA4A6 +ENCODING 42150 +BBX 11 10 2 0 +BITMAP +60C0 +9120 +1100 +1100 +1100 +1100 +1100 +1100 +1100 +0E00 +ENDCHAR +STARTCHAR uniA4A7 +ENCODING 42151 +BBX 7 10 4 0 +BITMAP +38 +44 +44 +82 +82 +82 +82 +92 +92 +6C +ENDCHAR +STARTCHAR uniA4A8 +ENCODING 42152 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8080 +8080 +8080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA4A9 +ENCODING 42153 +BBX 5 10 5 0 +BITMAP +70 +88 +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA4AA +ENCODING 42154 +BBX 9 5 3 5 +BITMAP +7F00 +8080 +8080 +8080 +7F00 +ENDCHAR +STARTCHAR uniA4AB +ENCODING 42155 +BBX 7 5 4 5 +BITMAP +10 +28 +44 +82 +FE +ENDCHAR +STARTCHAR uniA4AC +ENCODING 42156 +BBX 9 10 3 0 +BITMAP +0600 +0500 +0480 +0400 +3C00 +4400 +8400 +8400 +4400 +3C00 +ENDCHAR +STARTCHAR uniA4AD +ENCODING 42157 +BBX 9 10 3 0 +BITMAP +0600 +0500 +0480 +0400 +3E00 +4500 +8480 +8400 +4400 +3C00 +ENDCHAR +STARTCHAR uniA4AE +ENCODING 42158 +BBX 10 10 3 0 +BITMAP +0040 +0640 +0540 +04C0 +3C00 +4400 +8400 +8400 +4400 +3C00 +ENDCHAR +STARTCHAR uniA4AF +ENCODING 42159 +BBX 6 10 5 0 +BITMAP +04 +04 +04 +04 +3C +44 +84 +84 +44 +3C +ENDCHAR +STARTCHAR uniA4B0 +ENCODING 42160 +BBX 5 10 5 0 +BITMAP +78 +80 +80 +40 +38 +40 +80 +80 +80 +78 +ENDCHAR +STARTCHAR uniA4B1 +ENCODING 42161 +BBX 5 10 5 0 +BITMAP +F0 +08 +08 +10 +E0 +10 +08 +08 +08 +F0 +ENDCHAR +STARTCHAR uniA4B2 +ENCODING 42162 +BBX 6 10 5 0 +BITMAP +7C +80 +80 +7C +80 +80 +7C +80 +80 +7C +ENDCHAR +STARTCHAR uniA4B3 +ENCODING 42163 +BBX 9 4 3 6 +BITMAP +8880 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA4B4 +ENCODING 42164 +BBX 13 7 1 3 +BITMAP +8888 +8888 +98C8 +68B0 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uniA4B5 +ENCODING 42165 +BBX 9 5 3 5 +BITMAP +E380 +4100 +4100 +2200 +1C00 +ENDCHAR +STARTCHAR uniA4B6 +ENCODING 42166 +BBX 13 4 1 6 +BITMAP +8888 +8888 +8888 +7770 +ENDCHAR +STARTCHAR uniA4B7 +ENCODING 42167 +BBX 11 5 2 5 +BITMAP +60C0 +9120 +1100 +1100 +0E00 +ENDCHAR +STARTCHAR uniA4B8 +ENCODING 42168 +BBX 8 10 4 0 +BITMAP +71 +89 +8A +7C +08 +08 +08 +08 +C8 +30 +ENDCHAR +STARTCHAR uniA4B9 +ENCODING 42169 +BBX 8 10 3 0 +BITMAP +71 +89 +8A +7C +08 +08 +08 +09 +09 +06 +ENDCHAR +STARTCHAR uniA4BA +ENCODING 42170 +BBX 8 10 4 0 +BITMAP +79 +86 +86 +7A +02 +02 +7A +86 +86 +79 +ENDCHAR +STARTCHAR uniA4BB +ENCODING 42171 +BBX 6 10 5 0 +BITMAP +04 +04 +04 +04 +04 +44 +A4 +A4 +64 +98 +ENDCHAR +STARTCHAR uniA4BC +ENCODING 42172 +BBX 5 9 5 0 +BITMAP +88 +88 +50 +50 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uniA4BD +ENCODING 42173 +BBX 7 10 4 0 +BITMAP +C6 +28 +10 +28 +28 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uniA4BE +ENCODING 42174 +BBX 7 11 4 0 +BITMAP +FE +82 +44 +28 +28 +10 +28 +28 +44 +82 +FE +ENDCHAR +STARTCHAR uniA4BF +ENCODING 42175 +BBX 11 9 2 0 +BITMAP +C060 +A0A0 +9120 +8A20 +8420 +8A20 +9120 +A0A0 +C060 +ENDCHAR +STARTCHAR uniA4C0 +ENCODING 42176 +BBX 10 9 3 0 +BITMAP +80C0 +4140 +2240 +1440 +0840 +1440 +2240 +4140 +80C0 +ENDCHAR +STARTCHAR uniA4C1 +ENCODING 42177 +BBX 11 9 2 0 +BITMAP +C060 +A0A0 +9120 +0A20 +0420 +0A20 +1120 +20A0 +4060 +ENDCHAR +STARTCHAR uniA4C2 +ENCODING 42178 +BBX 12 9 2 0 +BITMAP +6430 +9450 +8890 +7510 +0210 +7510 +8890 +9450 +6430 +ENDCHAR +STARTCHAR uniA4C3 +ENCODING 42179 +BBX 7 11 4 0 +BITMAP +FE +82 +44 +44 +28 +28 +10 +28 +28 +44 +44 +ENDCHAR +STARTCHAR uniA4C4 +ENCODING 42180 +BBX 7 10 4 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA4C5 +ENCODING 42181 +BBX 9 10 3 0 +BITMAP +FE00 +1100 +1080 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uniA4C6 +ENCODING 42182 +BBX 5 3 5 6 +BITMAP +88 +88 +88 +ENDCHAR +STARTCHAR uniA4D0 +ENCODING 42192 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +84 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uniA4D1 +ENCODING 42193 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA4D2 +ENCODING 42194 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +7C +84 +84 +84 +7C +ENDCHAR +STARTCHAR uniA4D3 +ENCODING 42195 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +88 +84 +84 +84 +84 +84 +84 +88 +F0 +ENDCHAR +STARTCHAR uniA4D4 +ENCODING 42196 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA4D5 +ENCODING 42197 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uniA4D6 +ENCODING 42198 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +9C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uniA4D7 +ENCODING 42199 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uniA4D8 +ENCODING 42200 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +44 +24 +14 +0C +0C +14 +24 +44 +84 +ENDCHAR +STARTCHAR uniA4D9 +ENCODING 42201 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +08 +08 +08 +08 +08 +08 +88 +88 +70 +ENDCHAR +STARTCHAR uniA4DA +ENCODING 42202 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uniA4DB +ENCODING 42203 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +04 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uniA4DC +ENCODING 42204 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uniA4DD +ENCODING 42205 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA4DE +ENCODING 42206 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +7C +04 +04 +04 +FC +ENDCHAR +STARTCHAR uniA4DF +ENCODING 42207 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +CC +CC +B4 +B4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uniA4E0 +ENCODING 42208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +ENDCHAR +STARTCHAR uniA4E1 +ENCODING 42209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uniA4E2 +ENCODING 42210 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uniA4E3 +ENCODING 42211 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +90 +88 +88 +84 +84 +ENDCHAR +STARTCHAR uniA4E4 +ENCODING 42212 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +44 +44 +24 +7C +84 +84 +84 +7C +ENDCHAR +STARTCHAR uniA4E5 +ENCODING 42213 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uniA4E6 +ENCODING 42214 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +44 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uniA4E7 +ENCODING 42215 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uniA4E8 +ENCODING 42216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +B8 +C4 +84 +84 +E4 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uniA4E9 +ENCODING 42217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +88 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA4EA +ENCODING 42218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +B4 +B4 +CC +CC +84 +84 +ENDCHAR +STARTCHAR uniA4EB +ENCODING 42219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +48 +48 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uniA4EC +ENCODING 42220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA4ED +ENCODING 42221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +7C +84 +84 +84 +84 +7C +84 +84 +84 +7C +ENDCHAR +STARTCHAR uniA4EE +ENCODING 42222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uniA4EF +ENCODING 42223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +48 +48 +30 +ENDCHAR +STARTCHAR uniA4F0 +ENCODING 42224 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uniA4F1 +ENCODING 42225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +7C +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uniA4F2 +ENCODING 42226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA4F3 +ENCODING 42227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uniA4F4 +ENCODING 42228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uniA4F5 +ENCODING 42229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uniA4F6 +ENCODING 42230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uniA4F7 +ENCODING 42231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +3C +44 +84 +84 +84 +84 +84 +84 +44 +3C +ENDCHAR +STARTCHAR uniA4F8 +ENCODING 42232 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 0 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uniA4F9 +ENCODING 42233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 -2 +BITMAP +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uniA4FA +ENCODING 42234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 0 +BITMAP +CC +CC +ENDCHAR +STARTCHAR uniA4FB +ENCODING 42235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 -2 +BITMAP +CC +C4 +04 +08 +ENDCHAR +STARTCHAR uniA4FC +ENCODING 42236 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 9 3 -1 +BITMAP +C0 +C0 +00 +00 +00 +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uniA4FD +ENCODING 42237 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 7 3 1 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uniA4FE +ENCODING 42238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +E0 +00 +00 +0C +0C +ENDCHAR +STARTCHAR uniA4FF +ENCODING 42239 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +FC +00 +00 +00 +FC +ENDCHAR +STARTCHAR uniA500 +ENCODING 42240 +BBX 11 11 2 0 +BITMAP +3F80 +0400 +0400 +0400 +64C0 +9520 +9520 +64C0 +0400 +0400 +3F80 +ENDCHAR +STARTCHAR uniA501 +ENCODING 42241 +BBX 11 11 2 0 +BITMAP +3F80 +0400 +3F80 +0400 +64C0 +9520 +64C0 +0400 +3F80 +0400 +3F80 +ENDCHAR +STARTCHAR uniA502 +ENCODING 42242 +BBX 11 11 2 0 +BITMAP +9080 +9100 +6A00 +0400 +0400 +0800 +0800 +0880 +0520 +0240 +0580 +ENDCHAR +STARTCHAR uniA503 +ENCODING 42243 +BBX 11 11 2 0 +BITMAP +F800 +2000 +2000 +1180 +0E80 +0480 +0780 +0080 +0080 +0080 +03E0 +ENDCHAR +STARTCHAR uniA504 +ENCODING 42244 +BBX 11 11 2 0 +BITMAP +F800 +2000 +F800 +1180 +0E80 +0480 +0780 +0080 +03E0 +0080 +03E0 +ENDCHAR +STARTCHAR uniA505 +ENCODING 42245 +BBX 13 11 1 0 +BITMAP +7070 +8888 +8F88 +8A88 +7270 +0200 +0700 +0880 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uniA506 +ENCODING 42246 +BBX 13 11 1 0 +BITMAP +0700 +0880 +0880 +0880 +2720 +0200 +7270 +8A88 +8F88 +8888 +7070 +ENDCHAR +STARTCHAR uniA507 +ENCODING 42247 +BBX 9 11 4 0 +BITMAP +4200 +8600 +8600 +4A00 +3200 +0200 +0200 +0200 +0200 +0200 +0F80 +ENDCHAR +STARTCHAR uniA508 +ENCODING 42248 +BBX 9 11 4 0 +BITMAP +4200 +8600 +8600 +4A00 +3200 +0200 +0200 +0A80 +0200 +0200 +0F80 +ENDCHAR +STARTCHAR uniA509 +ENCODING 42249 +BBX 9 11 3 0 +BITMAP +FF80 +0800 +0800 +2A00 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA50A +ENCODING 42250 +BBX 9 11 3 0 +BITMAP +FF80 +0800 +0800 +2A00 +0800 +0800 +7F00 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA50B +ENCODING 42251 +BBX 9 11 3 0 +BITMAP +FF80 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA50C +ENCODING 42252 +BBX 5 11 5 0 +BITMAP +70 +88 +88 +88 +70 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uniA50D +ENCODING 42253 +BBX 5 11 5 0 +BITMAP +70 +88 +88 +88 +70 +20 +20 +20 +F8 +20 +F8 +ENDCHAR +STARTCHAR uniA50E +ENCODING 42254 +BBX 10 11 3 0 +BITMAP +9200 +9200 +6E00 +0200 +0200 +0200 +03C0 +0200 +0200 +0200 +03C0 +ENDCHAR +STARTCHAR uniA50F +ENCODING 42255 +BBX 10 11 3 0 +BITMAP +9200 +9200 +6FC0 +0200 +0200 +0200 +03C0 +0200 +0200 +0200 +03C0 +ENDCHAR +STARTCHAR uniA510 +ENCODING 42256 +BBX 13 11 1 0 +BITMAP +9200 +9200 +6E00 +0200 +02A0 +02A8 +0750 +0A00 +1200 +1200 +0C00 +ENDCHAR +STARTCHAR uniA511 +ENCODING 42257 +BBX 13 11 1 0 +BITMAP +9200 +9200 +6E40 +0200 +02A0 +02A8 +0750 +0A00 +1240 +1200 +0C00 +ENDCHAR +STARTCHAR uniA512 +ENCODING 42258 +BBX 10 11 3 0 +BITMAP +9200 +9200 +6E00 +0200 +0200 +0240 +03C0 +0240 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uniA513 +ENCODING 42259 +BBX 10 11 3 0 +BITMAP +9200 +9200 +6E00 +0200 +0240 +03C0 +0240 +0200 +0200 +3880 +4700 +ENDCHAR +STARTCHAR uniA514 +ENCODING 42260 +BBX 11 11 2 0 +BITMAP +1860 +28A0 +4920 +8A20 +0820 +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniA515 +ENCODING 42261 +BBX 10 11 3 0 +BITMAP +FC00 +0400 +0400 +0400 +0400 +0400 +3FC0 +4440 +4440 +4440 +3840 +ENDCHAR +STARTCHAR uniA516 +ENCODING 42262 +BBX 7 11 4 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uniA517 +ENCODING 42263 +BBX 7 11 4 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +92 +00 +FE +ENDCHAR +STARTCHAR uniA518 +ENCODING 42264 +BBX 9 11 3 0 +BITMAP +8080 +8080 +8080 +0000 +0800 +0800 +0800 +0000 +8080 +8080 +8080 +ENDCHAR +STARTCHAR uniA519 +ENCODING 42265 +BBX 9 11 3 0 +BITMAP +8080 +FF80 +8080 +0000 +0800 +0800 +0800 +0000 +8080 +FF80 +8080 +ENDCHAR +STARTCHAR uniA51A +ENCODING 42266 +BBX 13 9 1 0 +BITMAP +38E0 +7DF0 +7DF0 +7DF0 +7DF0 +7DF0 +38E0 +9048 +6FB0 +ENDCHAR +STARTCHAR uniA51B +ENCODING 42267 +BBX 13 9 1 0 +BITMAP +38E0 +4510 +4510 +4510 +4510 +4510 +28A0 +9048 +6FB0 +ENDCHAR +STARTCHAR uniA51C +ENCODING 42268 +BBX 11 9 2 1 +BITMAP +8000 +8100 +8000 +FF80 +8020 +FF80 +8000 +8100 +8000 +ENDCHAR +STARTCHAR uniA51D +ENCODING 42269 +BBX 11 9 2 1 +BITMAP +8000 +8000 +8100 +8000 +FFA0 +8000 +8100 +8000 +8000 +ENDCHAR +STARTCHAR uniA51E +ENCODING 42270 +BBX 15 11 0 0 +BITMAP +A00A +A00A +A00A +A44A +AAAA +AAAA +AAAA +A44A +FBBE +A00A +A00A +ENDCHAR +STARTCHAR uniA51F +ENCODING 42271 +BBX 11 11 2 0 +BITMAP +8020 +8020 +8020 +B1A0 +CA60 +8420 +8A20 +8A20 +8A20 +8420 +8020 +ENDCHAR +STARTCHAR uniA520 +ENCODING 42272 +BBX 12 11 2 0 +BITMAP +1080 +1080 +1080 +1080 +1080 +FFF0 +1080 +1080 +1080 +1080 +1080 +ENDCHAR +STARTCHAR uniA521 +ENCODING 42273 +BBX 9 11 4 0 +BITMAP +6200 +9600 +A600 +4A00 +3200 +0200 +0200 +0200 +0200 +0200 +0780 +ENDCHAR +STARTCHAR uniA522 +ENCODING 42274 +BBX 12 11 2 0 +BITMAP +2040 +50A0 +8910 +2640 +0900 +0900 +0900 +0900 +0900 +0900 +0600 +ENDCHAR +STARTCHAR uniA523 +ENCODING 42275 +BBX 13 11 1 0 +BITMAP +1040 +0000 +38E0 +4510 +4510 +4510 +4510 +4510 +28A0 +9048 +6FB0 +ENDCHAR +STARTCHAR uniA524 +ENCODING 42276 +BBX 10 11 3 0 +BITMAP +9200 +9200 +6E00 +0200 +0240 +03C0 +0240 +0200 +0200 +0200 +0F80 +ENDCHAR +STARTCHAR uniA525 +ENCODING 42277 +BBX 11 11 3 0 +BITMAP +9200 +9200 +6E00 +0280 +0220 +03E0 +0220 +0280 +0200 +0200 +0F80 +ENDCHAR +STARTCHAR uniA526 +ENCODING 42278 +BBX 11 11 3 0 +BITMAP +9200 +9200 +6E00 +0200 +2220 +3FE0 +2220 +0200 +0200 +0200 +0F80 +ENDCHAR +STARTCHAR uniA527 +ENCODING 42279 +BBX 6 10 5 0 +BITMAP +70 +88 +08 +30 +48 +48 +30 +40 +44 +38 +ENDCHAR +STARTCHAR uniA528 +ENCODING 42280 +BBX 10 12 3 -1 +BITMAP +9200 +9200 +6E00 +0200 +9200 +9200 +6E00 +0380 +0640 +2A40 +1180 +0800 +ENDCHAR +STARTCHAR uniA529 +ENCODING 42281 +BBX 12 12 3 -1 +BITMAP +9200 +9200 +6E00 +0200 +9200 +9200 +6E00 +0380 +0650 +2990 +1060 +0800 +ENDCHAR +STARTCHAR uniA52A +ENCODING 42282 +BBX 7 11 4 0 +BITMAP +E0 +F8 +FE +F8 +E0 +C0 +E0 +F8 +FE +F8 +E0 +ENDCHAR +STARTCHAR uniA52B +ENCODING 42283 +BBX 14 11 1 0 +BITMAP +6118 +92A4 +7C78 +0820 +0820 +0820 +0820 +0820 +0820 +1010 +2008 +ENDCHAR +STARTCHAR uniA52C +ENCODING 42284 +BBX 9 11 3 0 +BITMAP +7000 +8800 +8800 +8880 +5080 +7F80 +5080 +8880 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA52D +ENCODING 42285 +BBX 9 11 3 0 +BITMAP +7000 +8800 +8800 +8A80 +5080 +7F80 +5080 +8A80 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA52E +ENCODING 42286 +BBX 11 11 2 0 +BITMAP +0E00 +3580 +4440 +4E40 +9120 +9120 +8E20 +5140 +60C0 +3180 +0E00 +ENDCHAR +STARTCHAR uniA52F +ENCODING 42287 +BBX 11 11 2 0 +BITMAP +FFE0 +0400 +0400 +1500 +0400 +3F80 +0400 +1500 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA530 +ENCODING 42288 +BBX 11 11 2 0 +BITMAP +0400 +0400 +0400 +1500 +0400 +FFE0 +0400 +1500 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA531 +ENCODING 42289 +BBX 9 11 3 0 +BITMAP +8880 +8880 +8880 +F700 +8000 +8000 +8000 +8880 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA532 +ENCODING 42290 +BBX 9 11 3 0 +BITMAP +0600 +0800 +8880 +8880 +F700 +8000 +8880 +8880 +7700 +0400 +1800 +ENDCHAR +STARTCHAR uniA533 +ENCODING 42291 +BBX 11 11 3 0 +BITMAP +9080 +9100 +6E00 +0400 +0400 +0880 +0800 +0920 +0820 +0440 +0380 +ENDCHAR +STARTCHAR uniA534 +ENCODING 42292 +BBX 11 11 3 0 +BITMAP +9080 +9100 +6E00 +0440 +0400 +0880 +0800 +0920 +0820 +0440 +0380 +ENDCHAR +STARTCHAR uniA535 +ENCODING 42293 +BBX 8 11 4 0 +BITMAP +80 +80 +80 +9E +A5 +C9 +86 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA536 +ENCODING 42294 +BBX 8 11 4 0 +BITMAP +80 +A0 +80 +9E +A5 +C9 +86 +A0 +80 +80 +80 +ENDCHAR +STARTCHAR uniA537 +ENCODING 42295 +BBX 6 6 5 3 +BITMAP +30 +78 +FC +FC +78 +30 +ENDCHAR +STARTCHAR uniA538 +ENCODING 42296 +BBX 8 9 4 0 +BITMAP +18 +3C +7E +7E +3C +18 +00 +71 +8E +ENDCHAR +STARTCHAR uniA539 +ENCODING 42297 +BBX 10 6 3 3 +BITMAP +0C00 +1E00 +3F00 +BF40 +1E00 +0C00 +ENDCHAR +STARTCHAR uniA53A +ENCODING 42298 +BBX 14 11 1 0 +BITMAP +0200 +0400 +0200 +8944 +8A44 +77B8 +0200 +0100 +0200 +0400 +0200 +ENDCHAR +STARTCHAR uniA53B +ENCODING 42299 +BBX 11 11 2 0 +BITMAP +7000 +8800 +8800 +88A0 +50A0 +7FA0 +50A0 +88A0 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA53C +ENCODING 42300 +BBX 11 11 2 0 +BITMAP +7000 +8800 +8800 +8AA0 +50A0 +7FA0 +50A0 +8AA0 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uniA53D +ENCODING 42301 +BBX 10 11 2 0 +BITMAP +0180 +0600 +1800 +0600 +6180 +9040 +6180 +0600 +1800 +0600 +0180 +ENDCHAR +STARTCHAR uniA53E +ENCODING 42302 +BBX 12 11 2 0 +BITMAP +0180 +0600 +1800 +0600 +6180 +9050 +6180 +0600 +1800 +0600 +0180 +ENDCHAR +STARTCHAR uniA53F +ENCODING 42303 +BBX 7 11 4 0 +BITMAP +3E +40 +FC +80 +80 +80 +98 +A4 +C4 +44 +38 +ENDCHAR +STARTCHAR uniA540 +ENCODING 42304 +BBX 13 3 1 5 +BITMAP +0880 +98C8 +6730 +ENDCHAR +STARTCHAR uniA541 +ENCODING 42305 +BBX 13 6 1 3 +BITMAP +0880 +0000 +0000 +0880 +98C8 +6730 +ENDCHAR +STARTCHAR uniA542 +ENCODING 42306 +BBX 13 8 1 2 +BITMAP +0200 +0000 +0880 +98C8 +6730 +0000 +0000 +0200 +ENDCHAR +STARTCHAR uniA543 +ENCODING 42307 +BBX 7 11 4 0 +BITMAP +10 +20 +40 +40 +80 +80 +9C +A2 +C2 +42 +3C +ENDCHAR +STARTCHAR uniA544 +ENCODING 42308 +BBX 7 11 4 0 +BITMAP +10 +20 +40 +40 +80 +80 +9C +A2 +CA +42 +3C +ENDCHAR +STARTCHAR uniA545 +ENCODING 42309 +BBX 11 11 2 0 +BITMAP +9200 +9200 +6E00 +0200 +02A0 +0220 +07E0 +0A20 +12A0 +1200 +0C00 +ENDCHAR +STARTCHAR uniA546 +ENCODING 42310 +BBX 11 11 2 0 +BITMAP +1CE0 +2100 +4200 +4200 +8400 +8400 +8400 +4200 +4200 +2100 +1CE0 +ENDCHAR +STARTCHAR uniA547 +ENCODING 42311 +BBX 7 11 5 0 +BITMAP +FC +02 +FC +80 +86 +BA +C2 +02 +7E +80 +7E +ENDCHAR +STARTCHAR uniA548 +ENCODING 42312 +BBX 9 11 4 0 +BITMAP +0800 +0800 +0800 +0800 +0800 +0800 +7F80 +8880 +8880 +8880 +7080 +ENDCHAR +STARTCHAR uniA549 +ENCODING 42313 +BBX 5 11 5 0 +BITMAP +70 +88 +88 +88 +70 +20 +A8 +20 +A8 +20 +20 +ENDCHAR +STARTCHAR uniA54A +ENCODING 42314 +BBX 11 10 2 0 +BITMAP +0E00 +1100 +1100 +1100 +1100 +1100 +8A20 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uniA54B +ENCODING 42315 +BBX 12 10 2 0 +BITMAP +0E00 +1100 +1100 +1110 +1100 +1100 +8A20 +8420 +4A40 +3190 +ENDCHAR +STARTCHAR uniA54C +ENCODING 42316 +BBX 14 11 1 0 +BITMAP +8844 +8844 +9CE4 +6B58 +0840 +0840 +0840 +0840 +0840 +0840 +0840 +ENDCHAR +STARTCHAR uniA54D +ENCODING 42317 +BBX 13 10 1 0 +BITMAP +0200 +8888 +8888 +9DC8 +6FB0 +0880 +0880 +0A80 +0880 +0880 +ENDCHAR +STARTCHAR uniA54E +ENCODING 42318 +BBX 11 11 3 0 +BITMAP +9080 +9100 +6E00 +0400 +0400 +0800 +0800 +0820 +0820 +0440 +0380 +ENDCHAR +STARTCHAR uniA54F +ENCODING 42319 +BBX 11 11 2 0 +BITMAP +9200 +9200 +6E00 +0200 +0200 +0200 +02C0 +0320 +0200 +02C0 +0320 +ENDCHAR +STARTCHAR uniA550 +ENCODING 42320 +BBX 11 11 2 0 +BITMAP +8880 +8880 +7780 +0080 +0080 +02A0 +0080 +0080 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uniA551 +ENCODING 42321 +BBX 14 11 1 0 +BITMAP +701C +8820 +8440 +8480 +6480 +1FE0 +0498 +0484 +0884 +1044 +E038 +ENDCHAR +STARTCHAR uniA552 +ENCODING 42322 +BBX 12 11 2 0 +BITMAP +FF80 +8080 +8080 +80F0 +8090 +8890 +8090 +80F0 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uniA553 +ENCODING 42323 +BBX 11 10 2 0 +BITMAP +FFC0 +8220 +8220 +92C0 +8200 +8200 +FFC0 +0020 +0020 +00C0 +ENDCHAR +STARTCHAR uniA554 +ENCODING 42324 +BBX 9 11 3 0 +BITMAP +0800 +0800 +1400 +1400 +2200 +2200 +4100 +4100 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uniA555 +ENCODING 42325 +BBX 11 11 2 1 +BITMAP +0E00 +3180 +60C0 +5140 +8A20 +8420 +8A20 +5140 +60C0 +3180 +0E00 +ENDCHAR +STARTCHAR uniA556 +ENCODING 42326 +BBX 9 11 3 0 +BITMAP +0800 +0800 +1400 +9480 +2200 +2200 +4100 +4100 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uniA557 +ENCODING 42327 +BBX 8 11 4 0 +BITMAP +FC +82 +81 +81 +82 +FC +82 +81 +81 +82 +FC +ENDCHAR +STARTCHAR uniA558 +ENCODING 42328 +BBX 7 11 4 0 +BITMAP +3C +42 +82 +1C +10 +10 +10 +1C +82 +42 +3C +ENDCHAR +STARTCHAR uniA559 +ENCODING 42329 +BBX 10 11 3 0 +BITMAP +8780 +8840 +9040 +8380 +8200 +FE00 +8200 +8380 +9040 +8840 +8780 +ENDCHAR +STARTCHAR uniA55A +ENCODING 42330 +BBX 9 11 3 0 +BITMAP +8880 +8880 +9C80 +6B00 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA55B +ENCODING 42331 +BBX 9 11 3 0 +BITMAP +BE80 +8880 +9C80 +6B00 +0800 +0800 +0800 +0800 +0800 +0800 +3E00 +ENDCHAR +STARTCHAR uniA55C +ENCODING 42332 +BBX 10 11 3 0 +BITMAP +0040 +0840 +0040 +8840 +8840 +94C0 +6340 +0040 +0840 +0040 +0040 +ENDCHAR +STARTCHAR uniA55D +ENCODING 42333 +BBX 12 11 2 0 +BITMAP +0050 +0850 +0050 +8850 +8850 +94D0 +6350 +0050 +0850 +0050 +0050 +ENDCHAR +STARTCHAR uniA55E +ENCODING 42334 +BBX 8 11 4 0 +BITMAP +A0 +A0 +A0 +BF +A0 +A0 +BF +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uniA55F +ENCODING 42335 +BBX 8 11 4 0 +BITMAP +A0 +A0 +A0 +BF +A0 +A0 +BF +A0 +20 +71 +8E +ENDCHAR +STARTCHAR uniA560 +ENCODING 42336 +BBX 11 11 2 0 +BITMAP +00C0 +0020 +0020 +FFC0 +8880 +8880 +8880 +8880 +8880 +8880 +FF80 +ENDCHAR +STARTCHAR uniA561 +ENCODING 42337 +BBX 12 11 2 0 +BITMAP +00C0 +0220 +0020 +FFC0 +8880 +8890 +8880 +8880 +8880 +8880 +FF80 +ENDCHAR +STARTCHAR uniA562 +ENCODING 42338 +BBX 9 10 3 1 +BITMAP +7700 +8880 +8880 +8880 +7F00 +1C00 +2200 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uniA563 +ENCODING 42339 +BBX 9 10 3 1 +BITMAP +7700 +8880 +8880 +8880 +7F00 +1C00 +2200 +2200 +A280 +1C00 +ENDCHAR +STARTCHAR uniA564 +ENCODING 42340 +BBX 9 7 3 2 +BITMAP +7700 +8880 +8880 +7F00 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA565 +ENCODING 42341 +BBX 13 11 1 0 +BITMAP +0200 +0000 +1DC0 +2220 +2220 +9FC8 +2220 +2220 +1DC0 +0000 +0200 +ENDCHAR +STARTCHAR uniA566 +ENCODING 42342 +BBX 10 11 3 0 +BITMAP +0180 +0E00 +3200 +C400 +0800 +3800 +C980 +0A40 +0C40 +0440 +0380 +ENDCHAR +STARTCHAR uniA567 +ENCODING 42343 +BBX 11 11 2 0 +BITMAP +7FC0 +0E00 +0E00 +1500 +1500 +2480 +2480 +4440 +4440 +8420 +8420 +ENDCHAR +STARTCHAR uniA568 +ENCODING 42344 +BBX 9 11 3 0 +BITMAP +7700 +8880 +8880 +FF80 +1C00 +2A00 +2A00 +4900 +4900 +8880 +8880 +ENDCHAR +STARTCHAR uniA569 +ENCODING 42345 +BBX 13 11 1 0 +BITMAP +2420 +2440 +1B80 +0100 +9100 +9200 +6E00 +0208 +0208 +0110 +00E0 +ENDCHAR +STARTCHAR uniA56A +ENCODING 42346 +BBX 7 11 4 0 +BITMAP +40 +80 +86 +4A +32 +02 +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uniA56B +ENCODING 42347 +BBX 12 11 2 0 +BITMAP +3800 +4400 +4400 +0400 +0400 +0800 +30E0 +4110 +FF10 +0110 +00E0 +ENDCHAR +STARTCHAR uniA56C +ENCODING 42348 +BBX 11 11 2 0 +BITMAP +7FC0 +8A20 +8A20 +8A20 +8A20 +7FC0 +8A20 +8A20 +8A20 +8A20 +7FC0 +ENDCHAR +STARTCHAR uniA56D +ENCODING 42349 +BBX 14 11 1 0 +BITMAP +8844 +8844 +9CE4 +6B58 +0840 +0840 +0840 +8844 +8844 +94A4 +6318 +ENDCHAR +STARTCHAR uniA56E +ENCODING 42350 +BBX 13 11 1 0 +BITMAP +6030 +9048 +8888 +7FF0 +0880 +0880 +0880 +0880 +1040 +1040 +2020 +ENDCHAR +STARTCHAR uniA56F +ENCODING 42351 +BBX 7 11 4 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uniA570 +ENCODING 42352 +BBX 13 11 1 0 +BITMAP +8880 +8880 +7780 +0080 +0080 +00F8 +0088 +0088 +0088 +0088 +00F8 +ENDCHAR +STARTCHAR uniA571 +ENCODING 42353 +BBX 10 11 3 0 +BITMAP +8000 +FC00 +8400 +0400 +0440 +07C0 +0440 +0400 +0400 +0400 +0E00 +ENDCHAR +STARTCHAR uniA572 +ENCODING 42354 +BBX 10 11 3 0 +BITMAP +8000 +FC00 +8400 +0500 +0440 +07C0 +0440 +0500 +0400 +0400 +0E00 +ENDCHAR +STARTCHAR uniA573 +ENCODING 42355 +BBX 10 11 3 0 +BITMAP +8000 +FC00 +8400 +0400 +4440 +7FC0 +4440 +0400 +0400 +0400 +0E00 +ENDCHAR +STARTCHAR uniA574 +ENCODING 42356 +BBX 10 11 3 0 +BITMAP +E000 +4000 +4000 +4000 +4040 +7FC0 +0440 +0400 +0400 +0400 +0E00 +ENDCHAR +STARTCHAR uniA575 +ENCODING 42357 +BBX 10 11 3 0 +BITMAP +E000 +4000 +4000 +4100 +4040 +7FC0 +0440 +0500 +0400 +0400 +0E00 +ENDCHAR +STARTCHAR uniA576 +ENCODING 42358 +BBX 8 11 4 0 +BITMAP +39 +45 +83 +81 +40 +38 +04 +02 +82 +C4 +B8 +ENDCHAR +STARTCHAR uniA577 +ENCODING 42359 +BBX 8 11 4 0 +BITMAP +39 +45 +93 +81 +40 +38 +04 +02 +92 +C4 +B8 +ENDCHAR +STARTCHAR uniA578 +ENCODING 42360 +BBX 9 10 3 0 +BITMAP +0300 +0C80 +3080 +C300 +8000 +9000 +8300 +8C80 +B080 +C300 +ENDCHAR +STARTCHAR uniA579 +ENCODING 42361 +BBX 14 5 1 3 +BITMAP +7038 +F87C +FFFC +F878 +7038 +ENDCHAR +STARTCHAR uniA57A +ENCODING 42362 +BBX 7 11 4 0 +BITMAP +10 +28 +28 +44 +44 +82 +44 +44 +28 +28 +10 +ENDCHAR +STARTCHAR uniA57B +ENCODING 42363 +BBX 11 11 2 0 +BITMAP +0400 +0A00 +0A00 +1100 +1100 +A0A0 +1100 +1100 +0A00 +0A00 +0400 +ENDCHAR +STARTCHAR uniA57C +ENCODING 42364 +BBX 7 11 4 0 +BITMAP +02 +02 +FE +82 +82 +82 +82 +82 +FE +02 +02 +ENDCHAR +STARTCHAR uniA57D +ENCODING 42365 +BBX 11 11 2 0 +BITMAP +8420 +8420 +8E20 +75C0 +0400 +0400 +3F80 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA57E +ENCODING 42366 +BBX 11 11 2 0 +BITMAP +8420 +8420 +8E20 +75C0 +0400 +0400 +3F80 +0400 +3F80 +0400 +0400 +ENDCHAR +STARTCHAR uniA57F +ENCODING 42367 +BBX 8 11 3 0 +BITMAP +07 +88 +10 +10 +10 +90 +10 +10 +10 +88 +07 +ENDCHAR +STARTCHAR uniA580 +ENCODING 42368 +BBX 8 11 3 0 +BITMAP +07 +88 +10 +10 +10 +91 +10 +10 +10 +88 +07 +ENDCHAR +STARTCHAR uniA581 +ENCODING 42369 +BBX 14 11 1 0 +BITMAP +8844 +8844 +9CE4 +6B58 +0840 +0840 +0840 +0840 +0840 +0840 +1CE0 +ENDCHAR +STARTCHAR uniA582 +ENCODING 42370 +BBX 14 11 1 0 +BITMAP +8844 +8844 +9CE4 +6B58 +0840 +0840 +0940 +0840 +0840 +0840 +1CE0 +ENDCHAR +STARTCHAR uniA583 +ENCODING 42371 +BBX 11 11 2 0 +BITMAP +9200 +9200 +6E00 +0260 +02A0 +0320 +0620 +0A00 +1200 +1200 +0C00 +ENDCHAR +STARTCHAR uniA584 +ENCODING 42372 +BBX 11 11 2 0 +BITMAP +9200 +9260 +6EA0 +0320 +0620 +0A00 +1200 +1200 +0C00 +7100 +8E00 +ENDCHAR +STARTCHAR uniA585 +ENCODING 42373 +BBX 13 11 1 0 +BITMAP +1FC0 +0200 +8208 +8208 +8208 +FFF8 +8208 +8208 +8208 +0200 +1FC0 +ENDCHAR +STARTCHAR uniA586 +ENCODING 42374 +BBX 11 11 2 0 +BITMAP +9200 +9200 +6E00 +0200 +0200 +03C0 +06A0 +0AA0 +1240 +1200 +0C00 +ENDCHAR +STARTCHAR uniA587 +ENCODING 42375 +BBX 11 11 2 0 +BITMAP +8880 +8880 +8880 +8880 +8880 +FF80 +0080 +0080 +0080 +0080 +03E0 +ENDCHAR +STARTCHAR uniA588 +ENCODING 42376 +BBX 11 11 2 0 +BITMAP +8880 +8880 +8880 +8880 +8880 +FF80 +0080 +0080 +02A0 +0080 +03E0 +ENDCHAR +STARTCHAR uniA589 +ENCODING 42377 +BBX 5 11 5 0 +BITMAP +70 +88 +88 +88 +50 +20 +50 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA58A +ENCODING 42378 +BBX 9 11 3 0 +BITMAP +1C00 +2200 +A280 +2200 +1400 +0800 +1400 +2200 +A280 +2200 +1C00 +ENDCHAR +STARTCHAR uniA58B +ENCODING 42379 +BBX 7 11 4 0 +BITMAP +10 +10 +10 +92 +10 +10 +10 +92 +10 +10 +10 +ENDCHAR +STARTCHAR uniA58C +ENCODING 42380 +BBX 7 11 4 0 +BITMAP +10 +10 +10 +10 +10 +92 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA58D +ENCODING 42381 +BBX 10 11 3 0 +BITMAP +8200 +8200 +8200 +8200 +8200 +9240 +8200 +8200 +8200 +8200 +8200 +ENDCHAR +STARTCHAR uniA58E +ENCODING 42382 +BBX 4 11 5 0 +BITMAP +80 +80 +80 +90 +80 +80 +80 +90 +80 +80 +80 +ENDCHAR +STARTCHAR uniA58F +ENCODING 42383 +BBX 13 11 1 0 +BITMAP +6030 +9048 +8888 +7FF0 +0880 +0880 +0880 +0880 +1040 +1040 +3FE0 +ENDCHAR +STARTCHAR uniA590 +ENCODING 42384 +BBX 13 11 1 0 +BITMAP +6030 +9048 +8888 +7FF0 +0880 +0880 +0880 +1040 +1050 +3FF0 +0010 +ENDCHAR +STARTCHAR uniA591 +ENCODING 42385 +BBX 11 11 2 0 +BITMAP +FE00 +0200 +0200 +1FE0 +0220 +0220 +0220 +0220 +0220 +0020 +0020 +ENDCHAR +STARTCHAR uniA592 +ENCODING 42386 +BBX 13 7 1 2 +BITMAP +0200 +7070 +F8F8 +FFF8 +F8F8 +7070 +0200 +ENDCHAR +STARTCHAR uniA593 +ENCODING 42387 +BBX 13 11 1 0 +BITMAP +9200 +9200 +6E40 +0200 +02F0 +0308 +0648 +0A10 +1200 +1200 +0C00 +ENDCHAR +STARTCHAR uniA594 +ENCODING 42388 +BBX 7 11 4 0 +BITMAP +FE +10 +10 +92 +10 +10 +10 +92 +10 +10 +FE +ENDCHAR +STARTCHAR uniA595 +ENCODING 42389 +BBX 12 11 2 0 +BITMAP +8420 +8420 +8E20 +75C0 +0400 +0400 +17D0 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uniA596 +ENCODING 42390 +BBX 12 11 1 0 +BITMAP +8420 +8420 +8E20 +75C0 +0400 +0400 +17D0 +0040 +01F0 +0040 +01F0 +ENDCHAR +STARTCHAR uniA597 +ENCODING 42391 +BBX 12 11 1 0 +BITMAP +8420 +8420 +8E20 +75C0 +0400 +0400 +07C0 +0040 +0040 +0040 +01F0 +ENDCHAR +STARTCHAR uniA598 +ENCODING 42392 +BBX 15 11 0 0 +BITMAP +0380 +0C60 +1010 +1390 +2448 +2448 +2288 +9112 +9292 +4C64 +3398 +ENDCHAR +STARTCHAR uniA599 +ENCODING 42393 +BBX 11 11 2 0 +BITMAP +8420 +8420 +8E20 +75C0 +0400 +0400 +07C0 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uniA59A +ENCODING 42394 +BBX 12 11 1 0 +BITMAP +8420 +8420 +8E20 +75C0 +0400 +0400 +07C0 +0040 +01F0 +0040 +01F0 +ENDCHAR +STARTCHAR uniA59B +ENCODING 42395 +BBX 12 11 2 0 +BITMAP +1080 +1080 +1080 +FFF0 +1080 +1080 +1080 +FFF0 +1080 +1080 +1080 +ENDCHAR +STARTCHAR uniA59C +ENCODING 42396 +BBX 13 11 1 0 +BITMAP +7070 +8888 +8888 +8888 +7070 +0000 +0700 +0880 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uniA59D +ENCODING 42397 +BBX 10 11 3 0 +BITMAP +7000 +8800 +8800 +8800 +5000 +3F80 +5040 +8840 +8880 +8800 +7000 +ENDCHAR +STARTCHAR uniA59E +ENCODING 42398 +BBX 10 11 3 0 +BITMAP +7000 +8800 +8800 +8A00 +5000 +3F80 +5040 +8A40 +8880 +8800 +7000 +ENDCHAR +STARTCHAR uniA59F +ENCODING 42399 +BBX 11 11 2 0 +BITMAP +4000 +A420 +AE20 +75C0 +0400 +0400 +0400 +0400 +0400 +0400 +3F80 +ENDCHAR +STARTCHAR uniA5A0 +ENCODING 42400 +BBX 11 11 2 0 +BITMAP +4000 +A420 +AE20 +75C0 +0400 +0400 +0400 +1500 +0400 +0400 +3F80 +ENDCHAR +STARTCHAR uniA5A1 +ENCODING 42401 +BBX 11 11 2 0 +BITMAP +4040 +A4A0 +AEA0 +75C0 +0400 +0400 +0400 +0400 +0400 +0400 +3F80 +ENDCHAR +STARTCHAR uniA5A2 +ENCODING 42402 +BBX 13 11 1 0 +BITMAP +00C0 +0100 +0200 +7270 +8A88 +8F88 +8A88 +7270 +0200 +0400 +1800 +ENDCHAR +STARTCHAR uniA5A3 +ENCODING 42403 +BBX 14 11 1 0 +BITMAP +0030 +0040 +0080 +70B8 +88C4 +8FC4 +8CC4 +74B8 +0480 +0900 +3600 +ENDCHAR +STARTCHAR uniA5A4 +ENCODING 42404 +BBX 7 11 4 0 +BITMAP +70 +88 +88 +88 +70 +24 +20 +3E +20 +24 +20 +ENDCHAR +STARTCHAR uniA5A5 +ENCODING 42405 +BBX 8 11 3 0 +BITMAP +70 +88 +88 +88 +70 +25 +21 +3F +21 +25 +20 +ENDCHAR +STARTCHAR uniA5A6 +ENCODING 42406 +BBX 9 11 3 0 +BITMAP +8980 +8A80 +8A80 +8C80 +8C80 +8880 +9880 +9880 +A880 +A880 +C880 +ENDCHAR +STARTCHAR uniA5A7 +ENCODING 42407 +BBX 13 11 1 0 +BITMAP +2260 +22A0 +22A0 +2320 +2320 +A228 +2620 +2620 +2A20 +2A20 +3220 +ENDCHAR +STARTCHAR uniA5A8 +ENCODING 42408 +BBX 10 8 3 1 +BITMAP +8000 +8000 +8000 +FF80 +8040 +8040 +8040 +0180 +ENDCHAR +STARTCHAR uniA5A9 +ENCODING 42409 +BBX 10 11 3 0 +BITMAP +8000 +8000 +8000 +FF80 +8040 +8040 +8040 +0180 +0000 +3880 +4700 +ENDCHAR +STARTCHAR uniA5AA +ENCODING 42410 +BBX 10 8 3 1 +BITMAP +8000 +9000 +8000 +FF80 +8040 +9040 +8040 +0180 +ENDCHAR +STARTCHAR uniA5AB +ENCODING 42411 +BBX 10 9 3 0 +BITMAP +8000 +8000 +8000 +FF80 +8040 +8040 +8240 +0380 +0200 +ENDCHAR +STARTCHAR uniA5AC +ENCODING 42412 +BBX 9 11 3 0 +BITMAP +6180 +A280 +2080 +2080 +2080 +0000 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA5AD +ENCODING 42413 +BBX 9 11 3 0 +BITMAP +6180 +A280 +2080 +2080 +2080 +0000 +0400 +0400 +1500 +0400 +0400 +ENDCHAR +STARTCHAR uniA5AE +ENCODING 42414 +BBX 9 11 3 0 +BITMAP +6180 +A280 +2080 +2080 +2080 +0000 +0400 +0400 +0400 +0400 +1F00 +ENDCHAR +STARTCHAR uniA5AF +ENCODING 42415 +BBX 9 11 3 0 +BITMAP +6180 +A280 +2080 +2080 +2080 +0000 +0400 +0400 +1500 +0400 +1F00 +ENDCHAR +STARTCHAR uniA5B0 +ENCODING 42416 +BBX 10 8 3 1 +BITMAP +8800 +A800 +8800 +FF80 +8840 +A840 +8840 +0180 +ENDCHAR +STARTCHAR uniA5B1 +ENCODING 42417 +BBX 10 8 3 1 +BITMAP +8800 +8800 +8800 +FF80 +8840 +8840 +8840 +0180 +ENDCHAR +STARTCHAR uniA5B2 +ENCODING 42418 +BBX 10 8 3 1 +BITMAP +A800 +A800 +A800 +FF80 +A840 +A840 +A840 +0180 +ENDCHAR +STARTCHAR uniA5B3 +ENCODING 42419 +BBX 10 8 3 1 +BITMAP +A000 +A800 +A000 +FF80 +A040 +A840 +A040 +0180 +ENDCHAR +STARTCHAR uniA5B4 +ENCODING 42420 +BBX 11 11 2 0 +BITMAP +0E00 +3180 +4040 +4040 +8020 +8420 +8020 +4040 +4040 +3180 +0E00 +ENDCHAR +STARTCHAR uniA5B5 +ENCODING 42421 +BBX 5 11 5 0 +BITMAP +70 +88 +A8 +88 +70 +20 +20 +A8 +20 +20 +F8 +ENDCHAR +STARTCHAR uniA5B6 +ENCODING 42422 +BBX 5 11 5 0 +BITMAP +70 +88 +A8 +88 +70 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uniA5B7 +ENCODING 42423 +BBX 7 11 4 0 +BITMAP +40 +86 +86 +4A +32 +42 +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uniA5B8 +ENCODING 42424 +BBX 9 11 3 0 +BITMAP +FF80 +8880 +8880 +8880 +8880 +8F80 +8880 +8880 +8880 +8880 +FF80 +ENDCHAR +STARTCHAR uniA5B9 +ENCODING 42425 +BBX 7 11 4 0 +BITMAP +82 +82 +82 +92 +82 +82 +92 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uniA5BA +ENCODING 42426 +BBX 9 11 3 0 +BITMAP +8880 +8880 +F700 +8000 +8880 +8880 +F700 +8000 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA5BB +ENCODING 42427 +BBX 11 11 2 0 +BITMAP +E0E0 +1100 +0A00 +0A00 +0A00 +8A40 +0A00 +0A00 +0A00 +1100 +E0E0 +ENDCHAR +STARTCHAR uniA5BC +ENCODING 42428 +BBX 11 11 2 0 +BITMAP +E4E0 +1100 +0A00 +0A00 +0A00 +0A00 +0A00 +0A00 +0A00 +1100 +E4E0 +ENDCHAR +STARTCHAR uniA5BD +ENCODING 42429 +BBX 12 11 2 0 +BITMAP +88C0 +7740 +88C0 +7740 +88C0 +7740 +0040 +0040 +0040 +0040 +01F0 +ENDCHAR +STARTCHAR uniA5BE +ENCODING 42430 +BBX 13 11 1 0 +BITMAP +F8F8 +0880 +0880 +0880 +0880 +0F80 +0880 +0880 +0880 +0880 +F8F8 +ENDCHAR +STARTCHAR uniA5BF +ENCODING 42431 +BBX 9 11 3 0 +BITMAP +8880 +8880 +7700 +0000 +8880 +8880 +7700 +0000 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uniA5C0 +ENCODING 42432 +BBX 12 11 2 0 +BITMAP +88C0 +7740 +88C0 +7740 +88C0 +7740 +0040 +0040 +01F0 +0040 +01F0 +ENDCHAR +STARTCHAR uniA5C1 +ENCODING 42433 +BBX 14 8 1 0 +BITMAP +7038 +8844 +8FC4 +8CC4 +74B8 +0480 +0900 +3600 +ENDCHAR +STARTCHAR uniA5C2 +ENCODING 42434 +BBX 14 11 1 0 +BITMAP +01B0 +0240 +0480 +74B8 +8CC4 +8FC4 +8CC4 +74B8 +0480 +0900 +3600 +ENDCHAR +STARTCHAR uniA5C3 +ENCODING 42435 +BBX 10 11 3 0 +BITMAP +0180 +0240 +0440 +0880 +1000 +3800 +7C00 +FE00 +7C00 +3800 +1000 +ENDCHAR +STARTCHAR uniA5C4 +ENCODING 42436 +BBX 10 11 3 0 +BITMAP +0180 +0240 +0440 +0880 +9200 +3800 +7C00 +FE00 +7C00 +3800 +1000 +ENDCHAR +STARTCHAR uniA5C5 +ENCODING 42437 +BBX 12 11 2 0 +BITMAP +8840 +88C0 +7740 +0040 +8840 +88C0 +7740 +0040 +0040 +0040 +01F0 +ENDCHAR +STARTCHAR uniA5C6 +ENCODING 42438 +BBX 12 11 2 0 +BITMAP +8840 +88C0 +7740 +0040 +8840 +88C0 +7740 +0040 +0150 +0040 +01F0 +ENDCHAR +STARTCHAR uniA5C7 +ENCODING 42439 +BBX 13 11 1 0 +BITMAP +1FC0 +0500 +0500 +0880 +0880 +1040 +9048 +6030 +3FE0 +1040 +0880 +ENDCHAR +STARTCHAR uniA5C8 +ENCODING 42440 +BBX 13 11 1 0 +BITMAP +0F80 +0000 +0F80 +0200 +0500 +0880 +5050 +BFE8 +5050 +28A0 +1040 +ENDCHAR +STARTCHAR uniA5C9 +ENCODING 42441 +BBX 8 9 4 1 +BITMAP +3C +42 +FF +42 +3C +42 +42 +42 +3C +ENDCHAR +STARTCHAR uniA5CA +ENCODING 42442 +BBX 8 9 4 1 +BITMAP +3C +42 +FF +42 +3C +42 +FF +42 +3C +ENDCHAR +STARTCHAR uniA5CB +ENCODING 42443 +BBX 9 11 3 0 +BITMAP +FF80 +8000 +8000 +8000 +8000 +FF80 +8000 +8000 +8000 +8000 +FF80 +ENDCHAR +STARTCHAR uniA5CC +ENCODING 42444 +BBX 10 11 3 0 +BITMAP +9200 +9200 +6E00 +0240 +0280 +0300 +0600 +0A00 +1200 +1200 +0C00 +ENDCHAR +STARTCHAR uniA5CD +ENCODING 42445 +BBX 9 11 3 0 +BITMAP +FF80 +8000 +8400 +8000 +8000 +FF80 +8000 +8400 +8000 +8000 +FF80 +ENDCHAR +STARTCHAR uniA5CE +ENCODING 42446 +BBX 10 11 3 0 +BITMAP +9200 +9200 +6E00 +0240 +0280 +0300 +2640 +0A00 +1200 +1200 +0C00 +ENDCHAR +STARTCHAR uniA5CF +ENCODING 42447 +BBX 6 9 5 1 +BITMAP +78 +84 +80 +80 +78 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uniA5D0 +ENCODING 42448 +BBX 8 11 4 0 +BITMAP +3C +42 +40 +40 +3C +42 +42 +3C +00 +71 +8E +ENDCHAR +STARTCHAR uniA5D1 +ENCODING 42449 +BBX 11 11 2 0 +BITMAP +3180 +4A40 +8420 +8A20 +0A00 +0A00 +0400 +0400 +0400 +0400 +1F00 +ENDCHAR +STARTCHAR uniA5D2 +ENCODING 42450 +BBX 11 11 2 0 +BITMAP +3180 +4A40 +8420 +8A20 +0A00 +0A00 +0400 +0400 +1500 +0400 +1F00 +ENDCHAR +STARTCHAR uniA5D3 +ENCODING 42451 +BBX 8 11 4 0 +BITMAP +0E +13 +23 +20 +2E +33 +23 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uniA5D4 +ENCODING 42452 +BBX 10 11 4 0 +BITMAP +0E00 +1300 +2300 +2000 +2E00 +B340 +2300 +2000 +2000 +2000 +F800 +ENDCHAR +STARTCHAR uniA5D5 +ENCODING 42453 +BBX 8 11 4 0 +BITMAP +0E +13 +23 +20 +2E +33 +23 +20 +F8 +20 +F8 +ENDCHAR +STARTCHAR uniA5D6 +ENCODING 42454 +BBX 10 11 4 0 +BITMAP +0E00 +1300 +2300 +2000 +2E00 +B340 +2300 +2000 +F800 +2000 +F800 +ENDCHAR +STARTCHAR uniA5D7 +ENCODING 42455 +BBX 8 11 4 0 +BITMAP +3E +21 +21 +3E +21 +21 +3E +20 +A8 +20 +F8 +ENDCHAR +STARTCHAR uniA5D8 +ENCODING 42456 +BBX 10 11 3 0 +BITMAP +3F80 +2840 +2840 +2F80 +2840 +2840 +2F80 +2800 +2800 +2800 +FE00 +ENDCHAR +STARTCHAR uniA5D9 +ENCODING 42457 +BBX 10 11 3 0 +BITMAP +3F80 +2840 +2840 +2F80 +2840 +2840 +2F80 +2800 +AA00 +2800 +FE00 +ENDCHAR +STARTCHAR uniA5DA +ENCODING 42458 +BBX 7 9 5 1 +BITMAP +7C +82 +92 +82 +7C +82 +92 +82 +7C +ENDCHAR +STARTCHAR uniA5DB +ENCODING 42459 +BBX 9 11 4 0 +BITMAP +1E00 +6100 +8600 +8000 +9C00 +E200 +8C00 +8000 +8F00 +B080 +C300 +ENDCHAR +STARTCHAR uniA5DC +ENCODING 42460 +BBX 13 7 1 2 +BITMAP +0880 +8008 +8888 +C898 +B768 +8008 +8840 +ENDCHAR +STARTCHAR uniA5DD +ENCODING 42461 +BBX 9 10 3 0 +BITMAP +0800 +0000 +1C00 +2200 +4100 +4100 +4100 +2200 +1C00 +8080 +ENDCHAR +STARTCHAR uniA5DE +ENCODING 42462 +BBX 9 11 3 0 +BITMAP +FF80 +0000 +1C00 +2200 +4100 +4100 +4100 +2200 +1C00 +0000 +FF80 +ENDCHAR +STARTCHAR uniA5DF +ENCODING 42463 +BBX 8 11 4 0 +BITMAP +3D +45 +87 +85 +40 +38 +04 +A2 +A2 +E4 +B8 +ENDCHAR +STARTCHAR uniA5E0 +ENCODING 42464 +BBX 14 11 1 0 +BITMAP +70E0 +8910 +8508 +0408 +0408 +0FF0 +1020 +2040 +4080 +B364 +CD98 +ENDCHAR +STARTCHAR uniA5E1 +ENCODING 42465 +BBX 10 11 3 0 +BITMAP +2200 +2500 +2500 +2500 +2640 +3A80 +6100 +A280 +A280 +A280 +4100 +ENDCHAR +STARTCHAR uniA5E2 +ENCODING 42466 +BBX 14 9 1 1 +BITMAP +0004 +0004 +6124 +9124 +9924 +96DC +6004 +0004 +0004 +ENDCHAR +STARTCHAR uniA5E3 +ENCODING 42467 +BBX 12 11 2 0 +BITMAP +F840 +2020 +20D0 +2300 +2C00 +3000 +2C00 +2300 +20D0 +2020 +F840 +ENDCHAR +STARTCHAR uniA5E4 +ENCODING 42468 +BBX 11 11 2 0 +BITMAP +2100 +5280 +5280 +5280 +2320 +5540 +9880 +2940 +2940 +2940 +1080 +ENDCHAR +STARTCHAR uniA5E5 +ENCODING 42469 +BBX 14 11 1 0 +BITMAP +1080 +2940 +2940 +2940 +9194 +2AA0 +4C40 +14A0 +14A0 +14A0 +0840 +ENDCHAR +STARTCHAR uniA5E6 +ENCODING 42470 +BBX 11 11 2 0 +BITMAP +3180 +4A40 +8420 +8A20 +0A00 +0A00 +0400 +0400 +0480 +0480 +0300 +ENDCHAR +STARTCHAR uniA5E7 +ENCODING 42471 +BBX 11 11 2 0 +BITMAP +3180 +4A40 +8420 +8A20 +0A00 +0A00 +0400 +0400 +04A0 +04C0 +0300 +ENDCHAR +STARTCHAR uniA5E8 +ENCODING 42472 +BBX 7 11 4 0 +BITMAP +0C +30 +C0 +30 +0C +02 +0C +30 +C0 +30 +0C +ENDCHAR +STARTCHAR uniA5E9 +ENCODING 42473 +BBX 10 11 4 0 +BITMAP +0C00 +3000 +C000 +3000 +0C00 +8240 +0C00 +3000 +C000 +3000 +0C00 +ENDCHAR +STARTCHAR uniA5EA +ENCODING 42474 +BBX 8 11 3 0 +BITMAP +87 +88 +90 +90 +90 +90 +90 +90 +90 +88 +87 +ENDCHAR +STARTCHAR uniA5EB +ENCODING 42475 +BBX 9 11 3 0 +BITMAP +8380 +A400 +8800 +8800 +8800 +8800 +8800 +8800 +8800 +A400 +8380 +ENDCHAR +STARTCHAR uniA5EC +ENCODING 42476 +BBX 14 5 1 3 +BITMAP +7038 +8844 +8FC4 +8844 +7038 +ENDCHAR +STARTCHAR uniA5ED +ENCODING 42477 +BBX 14 7 1 1 +BITMAP +7038 +8844 +8FC4 +8844 +7038 +0000 +0480 +ENDCHAR +STARTCHAR uniA5EE +ENCODING 42478 +BBX 13 7 1 2 +BITMAP +0200 +7070 +8888 +8F88 +8888 +7070 +0200 +ENDCHAR +STARTCHAR uniA5EF +ENCODING 42479 +BBX 13 11 1 0 +BITMAP +0018 +0028 +0048 +E088 +9908 +8708 +84C8 +8838 +9000 +A000 +C000 +ENDCHAR +STARTCHAR uniA5F0 +ENCODING 42480 +BBX 13 11 1 0 +BITMAP +0018 +0228 +0048 +E088 +9908 +8708 +84C8 +8838 +9000 +A200 +C000 +ENDCHAR +STARTCHAR uniA5F1 +ENCODING 42481 +BBX 9 11 4 0 +BITMAP +0F00 +3080 +4300 +8000 +8000 +8000 +8000 +8000 +8F00 +B080 +C300 +ENDCHAR +STARTCHAR uniA5F2 +ENCODING 42482 +BBX 9 11 4 0 +BITMAP +0F00 +3080 +6300 +A000 +A000 +A000 +A000 +A000 +AF00 +B080 +C300 +ENDCHAR +STARTCHAR uniA5F3 +ENCODING 42483 +BBX 13 11 1 0 +BITMAP +0700 +0880 +0880 +8508 +8208 +FFF8 +8208 +8508 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uniA5F4 +ENCODING 42484 +BBX 13 11 1 0 +BITMAP +0700 +0880 +0880 +A528 +8208 +FFF8 +8208 +A528 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uniA5F5 +ENCODING 42485 +BBX 10 9 3 1 +BITMAP +1E00 +A140 +FFC0 +A140 +1E00 +A140 +FFC0 +A140 +1E00 +ENDCHAR +STARTCHAR uniA5F6 +ENCODING 42486 +BBX 14 9 1 1 +BITMAP +0780 +8844 +FFFC +8844 +2790 +8844 +FFFC +8844 +0780 +ENDCHAR +STARTCHAR uniA5F7 +ENCODING 42487 +BBX 9 11 3 0 +BITMAP +8080 +8080 +8080 +8080 +8080 +0000 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA5F8 +ENCODING 42488 +BBX 9 11 3 0 +BITMAP +8080 +8080 +8080 +8080 +0800 +0800 +0800 +0800 +0000 +3880 +4700 +ENDCHAR +STARTCHAR uniA5F9 +ENCODING 42489 +BBX 9 11 3 0 +BITMAP +8080 +8080 +8080 +8080 +8080 +0000 +0800 +0800 +4900 +0800 +0800 +ENDCHAR +STARTCHAR uniA5FA +ENCODING 42490 +BBX 9 11 3 0 +BITMAP +0800 +0800 +0800 +8880 +8080 +8080 +8080 +8880 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniA5FB +ENCODING 42491 +BBX 13 11 1 0 +BITMAP +0200 +0200 +0200 +0200 +8A88 +8A88 +7770 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uniA5FC +ENCODING 42492 +BBX 13 11 1 0 +BITMAP +0200 +0200 +0200 +0200 +8A88 +8A88 +7770 +0200 +2220 +0200 +0200 +ENDCHAR +STARTCHAR uniA5FD +ENCODING 42493 +BBX 13 11 1 0 +BITMAP +0200 +0200 +2220 +0200 +8A88 +8A88 +7770 +0200 +2220 +0200 +0200 +ENDCHAR +STARTCHAR uniA5FE +ENCODING 42494 +BBX 13 11 1 0 +BITMAP +0F80 +0200 +2220 +0200 +8A88 +0A88 +7770 +0200 +2220 +0200 +0F80 +ENDCHAR +STARTCHAR uniA5FF +ENCODING 42495 +BBX 11 11 2 0 +BITMAP +3C00 +4200 +8200 +1C00 +1000 +1FE0 +1000 +1C00 +8200 +4200 +3C00 +ENDCHAR +STARTCHAR uniA600 +ENCODING 42496 +BBX 11 11 2 0 +BITMAP +3C00 +4200 +8200 +1C80 +1000 +1FA0 +1000 +1C80 +8200 +4200 +3C00 +ENDCHAR +STARTCHAR uniA601 +ENCODING 42497 +BBX 11 11 2 0 +BITMAP +3C00 +4200 +8200 +1CA0 +1020 +1FE0 +1020 +1CA0 +8200 +4200 +3C00 +ENDCHAR +STARTCHAR uniA602 +ENCODING 42498 +BBX 11 11 2 0 +BITMAP +3C00 +4200 +8220 +1C20 +1020 +1FE0 +1020 +1C20 +8220 +4200 +3C00 +ENDCHAR +STARTCHAR uniA603 +ENCODING 42499 +BBX 11 11 2 0 +BITMAP +8420 +8420 +4E40 +3580 +0400 +0400 +0400 +0400 +0400 +0400 +1F00 +ENDCHAR +STARTCHAR uniA604 +ENCODING 42500 +BBX 11 11 2 0 +BITMAP +8420 +8420 +4E40 +3580 +0400 +0400 +0400 +1500 +0400 +0400 +1F00 +ENDCHAR +STARTCHAR uniA605 +ENCODING 42501 +BBX 11 11 2 0 +BITMAP +8420 +8420 +4E40 +3580 +0400 +0400 +1500 +0400 +1F00 +0400 +1F00 +ENDCHAR +STARTCHAR uniA606 +ENCODING 42502 +BBX 11 11 2 0 +BITMAP +8420 +8420 +4E40 +3580 +0400 +0400 +0400 +1F00 +0400 +0400 +1F00 +ENDCHAR +STARTCHAR uniA607 +ENCODING 42503 +BBX 11 11 2 0 +BITMAP +8420 +8420 +4E40 +3580 +0400 +0400 +0400 +0400 +2480 +3F80 +2080 +ENDCHAR +STARTCHAR uniA608 +ENCODING 42504 +BBX 10 11 3 0 +BITMAP +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +ENDCHAR +STARTCHAR uniA609 +ENCODING 42505 +BBX 9 11 3 0 +BITMAP +F780 +0800 +1400 +1400 +1400 +1400 +1400 +1400 +1400 +0800 +F780 +ENDCHAR +STARTCHAR uniA60A +ENCODING 42506 +BBX 11 11 2 0 +BITMAP +8420 +8420 +4E40 +3580 +0400 +0400 +07C0 +0540 +07C0 +0540 +07C0 +ENDCHAR +STARTCHAR uniA60B +ENCODING 42507 +BBX 11 11 3 0 +BITMAP +9080 +9100 +6E00 +0400 +0400 +0800 +09C0 +0A20 +0A20 +0440 +0380 +ENDCHAR +STARTCHAR uniA60C +ENCODING 42508 +BBX 12 5 2 3 +BITMAP +FFF0 +0000 +0000 +0000 +FFF0 +ENDCHAR +STARTCHAR uniA60D +ENCODING 42509 +BBX 5 6 5 0 +BITMAP +20 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uniA60E +ENCODING 42510 +BBX 8 7 4 2 +BITMAP +42 +24 +18 +FF +18 +24 +42 +ENDCHAR +STARTCHAR uniA60F +ENCODING 42511 +BBX 13 5 1 0 +BITMAP +7510 +8D28 +8708 +A588 +4570 +ENDCHAR +STARTCHAR uniA610 +ENCODING 42512 +BBX 14 11 1 0 +BITMAP +0380 +0440 +0820 +C820 +C82C +383C +0820 +0820 +0820 +05AC +039C +ENDCHAR +STARTCHAR uniA611 +ENCODING 42513 +BBX 9 11 3 0 +BITMAP +8880 +8880 +7700 +2200 +2200 +2200 +2200 +2200 +AA80 +AA80 +7700 +ENDCHAR +STARTCHAR uniA612 +ENCODING 42514 +BBX 14 11 1 0 +BITMAP +0C18 +3060 +C180 +3060 +0C18 +03FC +0C18 +3060 +C180 +3060 +0C18 +ENDCHAR +STARTCHAR uniA613 +ENCODING 42515 +BBX 6 11 5 0 +BITMAP +78 +84 +80 +80 +80 +70 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uniA614 +ENCODING 42516 +BBX 12 11 2 0 +BITMAP +8880 +8980 +7680 +0080 +0080 +0390 +04E0 +0080 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uniA615 +ENCODING 42517 +BBX 13 11 1 0 +BITMAP +0028 +0E28 +1128 +1128 +1128 +8A28 +8428 +4A28 +31F8 +0028 +0028 +ENDCHAR +STARTCHAR uniA616 +ENCODING 42518 +BBX 7 11 4 0 +BITMAP +FE +82 +92 +82 +82 +92 +82 +82 +92 +82 +FE +ENDCHAR +STARTCHAR uniA617 +ENCODING 42519 +BBX 11 11 2 0 +BITMAP +0860 +08A0 +0920 +0A20 +0820 +0820 +0820 +8820 +4820 +2820 +1820 +ENDCHAR +STARTCHAR uniA618 +ENCODING 42520 +BBX 11 11 2 0 +BITMAP +0DC0 +3660 +C460 +0400 +05C0 +0660 +0460 +0400 +0400 +0400 +1F00 +ENDCHAR +STARTCHAR uniA619 +ENCODING 42521 +BBX 9 11 4 0 +BITMAP +FE00 +1000 +1000 +1000 +1F00 +1080 +1080 +1300 +1000 +1000 +FE00 +ENDCHAR +STARTCHAR uniA61A +ENCODING 42522 +BBX 11 11 2 0 +BITMAP +4440 +0000 +6660 +8880 +8880 +8880 +8880 +8880 +6660 +0000 +4440 +ENDCHAR +STARTCHAR uniA61B +ENCODING 42523 +BBX 11 11 3 0 +BITMAP +9080 +9100 +6E00 +0400 +0400 +0800 +0800 +0FE0 +0820 +0440 +0380 +ENDCHAR +STARTCHAR uniA61C +ENCODING 42524 +BBX 11 11 2 0 +BITMAP +FFE0 +8420 +4440 +4440 +2480 +2480 +1500 +1500 +0E00 +0E00 +0400 +ENDCHAR +STARTCHAR uniA61D +ENCODING 42525 +BBX 10 11 2 0 +BITMAP +3FC0 +2240 +3240 +2D80 +2000 +2000 +2000 +2000 +2000 +2000 +F800 +ENDCHAR +STARTCHAR uniA61E +ENCODING 42526 +BBX 14 11 1 0 +BITMAP +8840 +88C0 +7740 +0048 +0040 +007C +0040 +0048 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uniA61F +ENCODING 42527 +BBX 10 11 2 0 +BITMAP +7000 +8800 +8800 +7180 +2240 +1440 +0C40 +1380 +1000 +0800 +0600 +ENDCHAR +STARTCHAR uniA620 +ENCODING 42528 +BBX 9 11 3 0 +BITMAP +8880 +8880 +7700 +0000 +3E00 +4100 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA621 +ENCODING 42529 +BBX 1 11 8 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA622 +ENCODING 42530 +BBX 9 11 5 0 +BITMAP +7000 +8800 +8800 +7000 +2000 +A800 +2000 +A800 +2000 +2C80 +3300 +ENDCHAR +STARTCHAR uniA623 +ENCODING 42531 +BBX 9 11 1 0 +BITMAP +7000 +8800 +8F00 +8880 +7080 +0700 +0080 +0080 +0700 +0400 +0400 +ENDCHAR +STARTCHAR uniA624 +ENCODING 42532 +BBX 7 11 4 0 +BITMAP +C0 +A0 +90 +80 +90 +90 +90 +FE +12 +12 +12 +ENDCHAR +STARTCHAR uniA625 +ENCODING 42533 +BBX 8 11 4 0 +BITMAP +C0 +A0 +90 +80 +80 +80 +9C +A2 +C1 +C1 +82 +ENDCHAR +STARTCHAR uniA626 +ENCODING 42534 +BBX 8 11 3 0 +BITMAP +0E +10 +FC +20 +20 +20 +26 +29 +31 +11 +0E +ENDCHAR +STARTCHAR uniA627 +ENCODING 42535 +BBX 9 11 3 0 +BITMAP +6600 +9A00 +0200 +0200 +0200 +0200 +0700 +0880 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uniA628 +ENCODING 42536 +BBX 6 11 5 0 +BITMAP +84 +00 +00 +84 +84 +84 +78 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uniA629 +ENCODING 42537 +BBX 10 11 3 0 +BITMAP +0380 +0440 +0440 +6380 +9100 +8A00 +8C00 +7200 +0200 +0400 +1800 +ENDCHAR +STARTCHAR uniA62A +ENCODING 42538 +BBX 13 11 1 0 +BITMAP +6030 +9048 +8888 +7FF0 +0880 +0880 +0880 +0880 +9048 +5050 +2020 +ENDCHAR +STARTCHAR uniA62B +ENCODING 42539 +BBX 7 11 5 0 +BITMAP +70 +88 +88 +88 +70 +20 +20 +20 +22 +22 +1C +ENDCHAR +STARTCHAR uniA640 +ENCODING 42560 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +74 +88 +ENDCHAR +STARTCHAR uniA641 +ENCODING 42561 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +04 +08 +10 +20 +40 +80 +FC +74 +88 +ENDCHAR +STARTCHAR uniA642 +ENCODING 42562 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +04 +04 +08 +10 +F8 +40 +80 +80 +FC +74 +88 +ENDCHAR +STARTCHAR uniA643 +ENCODING 42563 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +04 +08 +FC +20 +40 +80 +FC +74 +88 +ENDCHAR +STARTCHAR uniA644 +ENCODING 42564 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +18 +60 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uniA645 +ENCODING 42565 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +18 +60 +80 +84 +78 +ENDCHAR +STARTCHAR uniA646 +ENCODING 42566 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +90 +60 +ENDCHAR +STARTCHAR uniA647 +ENCODING 42567 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +80 +80 +80 +80 +80 +80 +90 +60 +ENDCHAR +STARTCHAR uniA648 +ENCODING 42568 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +38 +10 +10 +38 +44 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uniA649 +ENCODING 42569 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +20 +70 +20 +70 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uniA64A +ENCODING 42570 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +48 +30 +78 +94 +A4 +94 +84 +78 +ENDCHAR +STARTCHAR uniA64B +ENCODING 42571 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +88 +88 +50 +20 +50 +50 +50 +20 +ENDCHAR +STARTCHAR uniA64C +ENCODING 42572 +BBX 13 10 1 0 +BITMAP +78F0 +8508 +8508 +8008 +8008 +8008 +8008 +8208 +8508 +78F0 +ENDCHAR +STARTCHAR uniA64D +ENCODING 42573 +BBX 13 8 1 0 +BITMAP +6030 +8008 +8008 +8008 +8008 +8208 +8508 +78F0 +ENDCHAR +STARTCHAR uniA64E +ENCODING 42574 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +40 +A0 +A0 +20 +3C +22 +22 +22 +22 +3C +ENDCHAR +STARTCHAR uniA64F +ENCODING 42575 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +40 +A0 +A0 +3C +22 +22 +22 +3C +ENDCHAR +STARTCHAR uniA650 +ENCODING 42576 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +E2 +22 +22 +22 +32 +2A +2A +2A +2A +32 +ENDCHAR +STARTCHAR uniA651 +ENCODING 42577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +E2 +22 +22 +32 +2A +2A +2A +32 +ENDCHAR +STARTCHAR uniA652 +ENCODING 42578 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +A0 +FC +A0 +A0 +B8 +A4 +A4 +A4 +A4 +B8 +ENDCHAR +STARTCHAR uniA653 +ENCODING 42579 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +A0 +FC +A0 +A0 +B8 +A4 +A4 +B8 +ENDCHAR +STARTCHAR uniA654 +ENCODING 42580 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +64 +94 +94 +94 +9C +94 +94 +94 +94 +64 +ENDCHAR +STARTCHAR uniA655 +ENCODING 42581 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +64 +94 +94 +9C +94 +94 +94 +64 +ENDCHAR +STARTCHAR uniA656 +ENCODING 42582 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +88 +94 +A2 +A2 +FE +A2 +A2 +A2 +A2 +A2 +ENDCHAR +STARTCHAR uniA657 +ENCODING 42583 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +98 +84 +84 +9C +E4 +A4 +A4 +9C +ENDCHAR +STARTCHAR uniA658 +ENCODING 42584 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +7C +44 +82 +82 +FE +ENDCHAR +STARTCHAR uniA659 +ENCODING 42585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +10 +28 +28 +44 +7C +82 +82 +FE +ENDCHAR +STARTCHAR uniA65A +ENCODING 42586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +44 +44 +28 +10 +38 +44 +FE +92 +92 +ENDCHAR +STARTCHAR uniA65B +ENCODING 42587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +44 +28 +7C +82 +FE +92 +92 +ENDCHAR +STARTCHAR uniA65C +ENCODING 42588 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +90 +90 +A8 +A8 +A4 +FC +C4 +82 +82 +FE +ENDCHAR +STARTCHAR uniA65D +ENCODING 42589 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +88 +94 +94 +A2 +FE +A2 +A2 +BE +ENDCHAR +STARTCHAR uniA65E +ENCODING 42590 +BBX 10 11 2 0 +BITMAP +0400 +0E00 +1500 +1500 +2480 +2480 +A440 +4440 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA65F +ENCODING 42591 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +08 +1C +2A +2A +A9 +49 +08 +08 +08 +ENDCHAR +STARTCHAR uniA660 +ENCODING 42592 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +42 +42 +42 +42 +42 +42 +42 +42 +42 +FE +80 +80 +ENDCHAR +STARTCHAR uniA661 +ENCODING 42593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +44 +44 +44 +44 +44 +44 +44 +FC +80 +80 +ENDCHAR +STARTCHAR uniA662 +ENCODING 42594 +BBX 12 12 2 -2 +BITMAP +0FF0 +1200 +1200 +1200 +2200 +2200 +2200 +4200 +4200 +FF00 +8100 +8100 +ENDCHAR +STARTCHAR uniA663 +ENCODING 42595 +BBX 10 9 3 -1 +BITMAP +3FC0 +2400 +4400 +4400 +8400 +8400 +8400 +FE00 +8200 +ENDCHAR +STARTCHAR uniA664 +ENCODING 42596 +BBX 12 10 2 0 +BITMAP +3FF0 +2200 +2200 +2200 +2200 +2200 +2200 +4200 +4200 +8200 +ENDCHAR +STARTCHAR uniA665 +ENCODING 42597 +BBX 11 8 2 0 +BITMAP +3FE0 +2200 +2200 +2200 +2200 +4200 +4200 +8200 +ENDCHAR +STARTCHAR uniA666 +ENCODING 42598 +BBX 12 10 2 0 +BITMAP +87F0 +8400 +CC00 +CC00 +B400 +B400 +8400 +8400 +8400 +8400 +ENDCHAR +STARTCHAR uniA667 +ENCODING 42599 +BBX 11 8 2 0 +BITMAP +87E0 +CC00 +CC00 +B400 +B400 +8400 +8400 +8400 +ENDCHAR +STARTCHAR uniA668 +ENCODING 42600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +B4 +B4 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uniA669 +ENCODING 42601 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +B4 +B4 +84 +84 +78 +ENDCHAR +STARTCHAR uniA66A +ENCODING 42602 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7C +82 +82 +82 +82 +AA +82 +82 +82 +7C +ENDCHAR +STARTCHAR uniA66B +ENCODING 42603 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +82 +82 +82 +AA +82 +82 +7C +ENDCHAR +STARTCHAR uniA66C +ENCODING 42604 +BBX 12 10 2 0 +BITMAP +79E0 +8610 +8610 +8610 +B6D0 +B6D0 +8610 +8610 +8610 +79E0 +ENDCHAR +STARTCHAR uniA66D +ENCODING 42605 +BBX 12 8 2 0 +BITMAP +79E0 +8610 +8610 +B6D0 +B6D0 +8610 +8610 +79E0 +ENDCHAR +STARTCHAR uniA66E +ENCODING 42606 +BBX 15 15 1 -1 +BITMAP +1CE0 +2310 +2B50 +2310 +1CE0 +739C +8C62 +AD6A +8C62 +739C +1CE0 +2310 +2B50 +2310 +1CE0 +ENDCHAR +STARTCHAR uniA66F +ENCODING 42607 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -7 11 +BITMAP +FC +84 +ENDCHAR +STARTCHAR uniA670 +ENCODING 42608 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 15 -12 -2 +BITMAP +0280 +0100 +2AA8 +1010 +2828 +0000 +A014 +4008 +A014 +0000 +0000 +2828 +1290 +2928 +0280 +ENDCHAR +STARTCHAR uniA671 +ENCODING 42609 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 15 -7 -2 +BITMAP +FC +84 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +FC +ENDCHAR +STARTCHAR uniA672 +ENCODING 42610 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 16 -12 -2 +BITMAP +0100 +0100 +07C0 +0100 +0100 +0000 +F01E +0000 +0000 +F01E +0000 +0000 +F01E +0540 +0540 +0540 +ENDCHAR +STARTCHAR uniA673 +ENCODING 42611 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 5 +BITMAP +10 +28 +EE +82 +44 +82 +EE +28 +10 +ENDCHAR +STARTCHAR uniA674 +ENCODING 42612 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -6 8 +BITMAP +70 +88 +E0 +88 +70 +ENDCHAR +STARTCHAR uniA675 +ENCODING 42613 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -6 8 +BITMAP +88 +98 +A8 +C8 +88 +ENDCHAR +STARTCHAR uniA676 +ENCODING 42614 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -5 8 +BITMAP +A0 +00 +40 +40 +40 +ENDCHAR +STARTCHAR uniA677 +ENCODING 42615 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -6 8 +BITMAP +88 +50 +20 +40 +80 +ENDCHAR +STARTCHAR uniA678 +ENCODING 42616 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -6 8 +BITMAP +C0 +40 +70 +48 +70 +ENDCHAR +STARTCHAR uniA679 +ENCODING 42617 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 8 +BITMAP +84 +84 +E4 +94 +E4 +ENDCHAR +STARTCHAR uniA67A +ENCODING 42618 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 8 +BITMAP +80 +80 +E0 +90 +E0 +ENDCHAR +STARTCHAR uniA67B +ENCODING 42619 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -7 9 +BITMAP +A8 +A8 +A8 +50 +ENDCHAR +STARTCHAR uniA67C +ENCODING 42620 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -6 10 +BITMAP +90 +90 +60 +ENDCHAR +STARTCHAR uniA67D +ENCODING 42621 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -4 9 +BITMAP +A0 +A0 +60 +20 +ENDCHAR +STARTCHAR uniA67E +ENCODING 42622 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 10 +BITMAP +90 +90 +60 +ENDCHAR +STARTCHAR uniA67F +ENCODING 42623 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 4 9 +BITMAP +A0 +A0 +60 +20 +ENDCHAR +STARTCHAR uniA680 +ENCODING 42624 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 15 0 -2 +BITMAP +10 +10 +10 +1E +12 +12 +12 +22 +22 +22 +42 +42 +FF +81 +81 +ENDCHAR +STARTCHAR uniA681 +ENCODING 42625 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +20 +20 +3C +24 +44 +44 +84 +84 +84 +FE +82 +ENDCHAR +STARTCHAR uniA682 +ENCODING 42626 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +80 +40 +20 +10 +08 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uniA683 +ENCODING 42627 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -2 +BITMAP +60 +90 +90 +80 +40 +40 +20 +20 +10 +90 +90 +60 +ENDCHAR +STARTCHAR uniA684 +ENCODING 42628 +BBX 14 10 1 0 +BITMAP +788C +8490 +0490 +04A0 +7FC0 +08C0 +04A0 +0490 +8488 +7884 +ENDCHAR +STARTCHAR uniA685 +ENCODING 42629 +BBX 14 8 1 0 +BITMAP +788C +8490 +04A0 +7FC0 +08A0 +0490 +8488 +7884 +ENDCHAR +STARTCHAR uniA686 +ENCODING 42630 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +92 +92 +92 +92 +6E +02 +02 +02 +02 +ENDCHAR +STARTCHAR uniA687 +ENCODING 42631 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +92 +92 +92 +92 +6E +02 +02 +02 +ENDCHAR +STARTCHAR uniA688 +ENCODING 42632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +1C +14 +14 +14 +24 +24 +24 +46 +49 +FA +81 +86 +ENDCHAR +STARTCHAR uniA689 +ENCODING 42633 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +38 +28 +48 +48 +88 +8C +92 +F4 +82 +0C +ENDCHAR +STARTCHAR uniA68A +ENCODING 42634 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +FE +10 +10 +10 +16 +19 +11 +11 +11 +11 +05 +02 +ENDCHAR +STARTCHAR uniA68B +ENCODING 42635 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +FE +10 +10 +16 +19 +11 +11 +11 +05 +02 +ENDCHAR +STARTCHAR uniA68C +ENCODING 42636 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +12 +0C +ENDCHAR +STARTCHAR uniA68D +ENCODING 42637 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +10 +10 +10 +10 +10 +12 +0C +ENDCHAR +STARTCHAR uniA68E +ENCODING 42638 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +FC +72 +82 +7C +ENDCHAR +STARTCHAR uniA68F +ENCODING 42639 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +84 +84 +84 +84 +84 +84 +FC +72 +82 +7C +ENDCHAR +STARTCHAR uniA690 +ENCODING 42640 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +70 +80 +60 +ENDCHAR +STARTCHAR uniA691 +ENCODING 42641 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +FE +10 +10 +10 +10 +10 +10 +70 +80 +60 +ENDCHAR +STARTCHAR uniA692 +ENCODING 42642 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FA +22 +22 +22 +22 +26 +1A +02 +02 +02 +ENDCHAR +STARTCHAR uniA693 +ENCODING 42643 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FA +22 +22 +22 +26 +1A +02 +02 +ENDCHAR +STARTCHAR uniA694 +ENCODING 42644 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +60 +90 +80 +80 +B0 +C8 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uniA695 +ENCODING 42645 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +60 +90 +80 +80 +B0 +C8 +88 +88 +ENDCHAR +STARTCHAR uniA696 +ENCODING 42646 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +FE +39 +41 +3E +ENDCHAR +STARTCHAR uniA697 +ENCODING 42647 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +92 +92 +92 +92 +92 +92 +FE +39 +41 +3E +ENDCHAR +STARTCHAR uniA698 +ENCODING 42648 +BBX 12 10 2 0 +BITMAP +79E0 +8610 +8610 +8610 +8610 +8610 +8610 +8610 +8610 +79E0 +ENDCHAR +STARTCHAR uniA699 +ENCODING 42649 +BBX 12 8 2 0 +BITMAP +79E0 +8610 +8610 +8610 +8610 +8610 +8610 +79E0 +ENDCHAR +STARTCHAR uniA69A +ENCODING 42650 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7C +92 +92 +92 +FE +92 +92 +92 +92 +7C +ENDCHAR +STARTCHAR uniA69B +ENCODING 42651 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +92 +92 +FE +92 +92 +92 +7C +ENDCHAR +STARTCHAR uniA69C +ENCODING 42652 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 4 +BITMAP +E0 +20 +38 +24 +38 +ENDCHAR +STARTCHAR uniA69D +ENCODING 42653 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 4 +BITMAP +80 +80 +E0 +90 +E0 +ENDCHAR +STARTCHAR uniA69E +ENCODING 42654 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 7 +BITMAP +20 +70 +A8 +A8 +A8 +70 +20 +ENDCHAR +STARTCHAR uniA69F +ENCODING 42655 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 8 +BITMAP +98 +A0 +F8 +A0 +98 +ENDCHAR +STARTCHAR uniA6A0 +ENCODING 42656 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +18 +14 +10 +10 +10 +10 +90 +90 +60 +ENDCHAR +STARTCHAR uniA6A1 +ENCODING 42657 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +84 +ENDCHAR +STARTCHAR uniA6A2 +ENCODING 42658 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +7C +00 +7C +00 +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uniA6A3 +ENCODING 42659 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +68 +90 +90 +A4 +A0 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uniA6A4 +ENCODING 42660 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +20 +00 +00 +20 +24 +22 +62 +52 +8C +ENDCHAR +STARTCHAR uniA6A5 +ENCODING 42661 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +80 +80 +90 +80 +F8 +00 +10 +ENDCHAR +STARTCHAR uniA6A6 +ENCODING 42662 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 1 +BITMAP +40 +00 +F8 +04 +04 +F8 +00 +40 +ENDCHAR +STARTCHAR uniA6A7 +ENCODING 42663 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +08 +10 +10 +20 +20 +60 +60 +90 +8C +ENDCHAR +STARTCHAR uniA6A8 +ENCODING 42664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +08 +08 +08 +10 +10 +10 +10 +08 +ENDCHAR +STARTCHAR uniA6A9 +ENCODING 42665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +40 +8C +92 +A2 +A2 +84 +78 +00 +00 +10 +ENDCHAR +STARTCHAR uniA6AA +ENCODING 42666 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +1C +22 +22 +A4 +78 +20 +24 +20 +24 +20 +ENDCHAR +STARTCHAR uniA6AB +ENCODING 42667 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 0 0 +BITMAP +10 +30 +54 +90 +10 +50 +10 +20 +20 +20 +ENDCHAR +STARTCHAR uniA6AC +ENCODING 42668 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +38 +44 +44 +54 +54 +48 +40 +40 +40 +ENDCHAR +STARTCHAR uniA6AD +ENCODING 42669 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +FC +44 +24 +44 +FC +ENDCHAR +STARTCHAR uniA6AE +ENCODING 42670 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +A0 +80 +F0 +08 +08 +F0 +80 +A0 +80 +ENDCHAR +STARTCHAR uniA6AF +ENCODING 42671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 1 0 +BITMAP +30 +C0 +00 +90 +C0 +A0 +90 +80 +80 +ENDCHAR +STARTCHAR uniA6B0 +ENCODING 42672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E0 +98 +84 +98 +E0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA6B1 +ENCODING 42673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +80 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA6B2 +ENCODING 42674 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +82 +44 +44 +28 +28 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA6B3 +ENCODING 42675 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +88 +88 +88 +88 +88 +88 +88 +80 +80 +FC +ENDCHAR +STARTCHAR uniA6B4 +ENCODING 42676 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +88 +88 +88 +8A +88 +8E +50 +52 +20 +20 +ENDCHAR +STARTCHAR uniA6B5 +ENCODING 42677 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +82 +82 +82 +44 +38 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA6B6 +ENCODING 42678 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +90 +90 +90 +90 +94 +90 +90 +94 +90 +F0 +90 +ENDCHAR +STARTCHAR uniA6B7 +ENCODING 42679 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +02 +00 +2C +34 +64 +A6 +20 +28 +20 +20 +ENDCHAR +STARTCHAR uniA6B8 +ENCODING 42680 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +30 +40 +80 +98 +84 +42 +32 +02 +04 +18 +ENDCHAR +STARTCHAR uniA6B9 +ENCODING 42681 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +80 +40 +20 +10 +48 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uniA6BA +ENCODING 42682 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C0 +24 +30 +48 +88 +88 +48 +30 +20 +C0 +ENDCHAR +STARTCHAR uniA6BB +ENCODING 42683 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +00 +00 +F0 +90 +90 +9C +80 +80 +80 +ENDCHAR +STARTCHAR uniA6BC +ENCODING 42684 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +C0 +30 +0C +02 +0C +30 +C0 +10 +ENDCHAR +STARTCHAR uniA6BD +ENCODING 42685 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +08 +10 +30 +48 +04 +04 +04 +84 +88 +70 +ENDCHAR +STARTCHAR uniA6BE +ENCODING 42686 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +A0 +A0 +A0 +A0 +F8 +28 +28 +28 +28 +28 +ENDCHAR +STARTCHAR uniA6BF +ENCODING 42687 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +84 +44 +E4 +04 +04 +08 +08 +ENDCHAR +STARTCHAR uniA6C0 +ENCODING 42688 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +84 +FC +04 +04 +04 +08 +08 +ENDCHAR +STARTCHAR uniA6C1 +ENCODING 42689 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +84 +84 +04 +04 +04 +08 +08 +ENDCHAR +STARTCHAR uniA6C2 +ENCODING 42690 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +BC +80 +BC +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA6C3 +ENCODING 42691 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +04 +04 +04 +08 +A8 +A8 +50 +50 +ENDCHAR +STARTCHAR uniA6C4 +ENCODING 42692 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +8C +B4 +C4 +C4 +B4 +8C +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA6C5 +ENCODING 42693 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +10 +94 +90 +B0 +D0 +90 +90 +80 +80 +ENDCHAR +STARTCHAR uniA6C6 +ENCODING 42694 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +F4 +0C +0C +0C +F4 +ENDCHAR +STARTCHAR uniA6C7 +ENCODING 42695 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +08 +10 +20 +40 +84 +40 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uniA6C8 +ENCODING 42696 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +44 +92 +92 +54 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA6C9 +ENCODING 42697 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +08 +10 +10 +20 +20 +40 +40 +80 +F8 +ENDCHAR +STARTCHAR uniA6CA +ENCODING 42698 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +10 +10 +24 +2A +22 +52 +4C +80 +ENDCHAR +STARTCHAR uniA6CB +ENCODING 42699 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +7C +30 +50 +90 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA6CC +ENCODING 42700 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +00 +70 +88 +30 +08 +88 +70 +00 +20 +ENDCHAR +STARTCHAR uniA6CD +ENCODING 42701 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 0 0 +BITMAP +70 +08 +04 +04 +08 +30 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uniA6CE +ENCODING 42702 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +28 +28 +28 +44 +44 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uniA6CF +ENCODING 42703 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +00 +82 +C6 +AA +AA +92 +00 +10 +10 +ENDCHAR +STARTCHAR uniA6D0 +ENCODING 42704 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +7C +80 +80 +80 +7C +00 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA6D1 +ENCODING 42705 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +64 +10 +08 +08 +08 +08 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniA6D2 +ENCODING 42706 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +04 +04 +04 +08 +08 +50 +20 +10 +ENDCHAR +STARTCHAR uniA6D3 +ENCODING 42707 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +1C +22 +22 +A4 +78 +20 +24 +24 +24 +24 +ENDCHAR +STARTCHAR uniA6D4 +ENCODING 42708 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +12 +10 +10 +38 +54 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uniA6D5 +ENCODING 42709 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +C0 +A0 +90 +88 +80 +80 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uniA6D6 +ENCODING 42710 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +80 +F0 +90 +90 +90 +90 +88 +ENDCHAR +STARTCHAR uniA6D7 +ENCODING 42711 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +54 +92 +92 +92 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA6D8 +ENCODING 42712 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +C2 +A2 +92 +86 +86 +4A +4A +52 +52 +22 +ENDCHAR +STARTCHAR uniA6D9 +ENCODING 42713 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +50 +94 +18 +30 +50 +90 +10 +10 +10 +ENDCHAR +STARTCHAR uniA6DA +ENCODING 42714 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +90 +80 +80 +FC +ENDCHAR +STARTCHAR uniA6DB +ENCODING 42715 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +84 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uniA6DC +ENCODING 42716 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +00 +30 +48 +88 +A8 +A8 +48 +08 +08 +ENDCHAR +STARTCHAR uniA6DD +ENCODING 42717 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +30 +48 +88 +8A +48 +38 +08 +08 +08 +10 +ENDCHAR +STARTCHAR uniA6DE +ENCODING 42718 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +FC +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA6DF +ENCODING 42719 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +82 +82 +44 +44 +44 +44 +28 +28 +28 +10 +ENDCHAR +STARTCHAR uniA6E0 +ENCODING 42720 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +30 +28 +24 +22 +24 +28 +30 +60 +A0 +20 +ENDCHAR +STARTCHAR uniA6E1 +ENCODING 42721 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 1 +BITMAP +62 +94 +88 +8A +74 +00 +00 +7E +ENDCHAR +STARTCHAR uniA6E2 +ENCODING 42722 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +40 +20 +10 +20 +40 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniA6E3 +ENCODING 42723 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +F8 +88 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uniA6E4 +ENCODING 42724 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +04 +62 +11 +09 +0A +08 +08 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniA6E5 +ENCODING 42725 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +1C +20 +E0 +A0 +9C +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA6E6 +ENCODING 42726 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +7C +10 +10 +F0 +08 +04 +04 +04 +08 +10 +ENDCHAR +STARTCHAR uniA6E7 +ENCODING 42727 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +10 +10 +F0 +08 +04 +04 +04 +08 +10 +ENDCHAR +STARTCHAR uniA6E8 +ENCODING 42728 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +E0 +A0 +A0 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uniA6E9 +ENCODING 42729 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +10 +10 +F0 +08 +04 +04 +04 +08 +10 +ENDCHAR +STARTCHAR uniA6EA +ENCODING 42730 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +50 +90 +10 +78 +04 +04 +04 +08 +10 +ENDCHAR +STARTCHAR uniA6EB +ENCODING 42731 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +E0 +10 +08 +08 +10 +60 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uniA6EC +ENCODING 42732 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +30 +28 +24 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uniA6ED +ENCODING 42733 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +E0 +10 +08 +08 +90 +60 +50 +48 +40 +40 +ENDCHAR +STARTCHAR uniA6EE +ENCODING 42734 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +3C +24 +24 +24 +24 +24 +24 +24 +24 +E4 +ENDCHAR +STARTCHAR uniA6EF +ENCODING 42735 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +84 +44 +08 +30 +40 +84 +84 +78 +ENDCHAR +STARTCHAR uniA6F0 +ENCODING 42736 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -7 10 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uniA6F1 +ENCODING 42737 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 -6 12 +BITMAP +F8 +ENDCHAR +STARTCHAR uniA6F2 +ENCODING 42738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +00 +10 +08 +08 +04 +04 +04 +88 +70 +ENDCHAR +STARTCHAR uniA6F3 +ENCODING 42739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +08 +10 +10 +20 +20 +48 +40 +80 +80 +ENDCHAR +STARTCHAR uniA6F4 +ENCODING 42740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +22 +22 +22 +22 +44 +55 +44 +88 +88 +88 +ENDCHAR +STARTCHAR uniA6F5 +ENCODING 42741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 0 +BITMAP +F8 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uniA6F6 +ENCODING 42742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 0 +BITMAP +F4 +24 +48 +4A +90 +90 +ENDCHAR +STARTCHAR uniA6F7 +ENCODING 42743 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +10 +10 +92 +54 +38 +10 +00 +10 +ENDCHAR +STARTCHAR uniA700 +ENCODING 42752 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 1 +BITMAP +70 +80 +80 +70 +ENDCHAR +STARTCHAR uniA701 +ENCODING 42753 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 -1 +BITMAP +70 +80 +80 +70 +00 +F0 +ENDCHAR +STARTCHAR uniA702 +ENCODING 42754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 6 +BITMAP +70 +80 +80 +70 +ENDCHAR +STARTCHAR uniA703 +ENCODING 42755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 4 +BITMAP +70 +80 +80 +70 +00 +F0 +ENDCHAR +STARTCHAR uniA704 +ENCODING 42756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 6 +BITMAP +E0 +10 +10 +E0 +ENDCHAR +STARTCHAR uniA705 +ENCODING 42757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 4 +BITMAP +E0 +10 +10 +E0 +00 +F0 +ENDCHAR +STARTCHAR uniA706 +ENCODING 42758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 1 +BITMAP +E0 +10 +10 +E0 +ENDCHAR +STARTCHAR uniA707 +ENCODING 42759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 -1 +BITMAP +E0 +10 +10 +E0 +00 +F0 +ENDCHAR +STARTCHAR uniA708 +ENCODING 42760 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 1 0 +BITMAP +A0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniA709 +ENCODING 42761 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 1 0 +BITMAP +20 +20 +A0 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniA70A +ENCODING 42762 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 1 0 +BITMAP +20 +20 +20 +20 +A0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniA70B +ENCODING 42763 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 1 0 +BITMAP +20 +20 +20 +20 +20 +20 +20 +A0 +20 +20 +ENDCHAR +STARTCHAR uniA70C +ENCODING 42764 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 1 0 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +A0 +ENDCHAR +STARTCHAR uniA70D +ENCODING 42765 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 0 +BITMAP +A0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA70E +ENCODING 42766 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 0 +BITMAP +80 +80 +A0 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA70F +ENCODING 42767 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 0 +BITMAP +80 +80 +80 +80 +A0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA710 +ENCODING 42768 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +A0 +80 +80 +ENDCHAR +STARTCHAR uniA711 +ENCODING 42769 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +A0 +ENDCHAR +STARTCHAR uniA712 +ENCODING 42770 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +F0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA713 +ENCODING 42771 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +80 +80 +F0 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA714 +ENCODING 42772 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +80 +80 +80 +80 +F0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA715 +ENCODING 42773 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +F0 +80 +80 +ENDCHAR +STARTCHAR uniA716 +ENCODING 42774 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uniA717 +ENCODING 42775 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 1 5 +BITMAP +20 +20 +A0 +20 +20 +ENDCHAR +STARTCHAR uniA718 +ENCODING 42776 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 3 5 +BITMAP +90 +20 +40 +80 +ENDCHAR +STARTCHAR uniA719 +ENCODING 42777 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 5 +BITMAP +20 +00 +F8 +ENDCHAR +STARTCHAR uniA71A +ENCODING 42778 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 5 +BITMAP +08 +08 +F8 +ENDCHAR +STARTCHAR uniA71B +ENCODING 42779 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 4 +BITMAP +20 +70 +F8 +20 +20 +20 +ENDCHAR +STARTCHAR uniA71C +ENCODING 42780 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 4 +BITMAP +20 +20 +20 +F8 +70 +20 +ENDCHAR +STARTCHAR uniA71D +ENCODING 42781 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 7 3 4 +BITMAP +80 +80 +80 +80 +80 +00 +80 +ENDCHAR +STARTCHAR uniA71E +ENCODING 42782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 7 3 4 +BITMAP +80 +00 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA71F +ENCODING 42783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 7 3 -1 +BITMAP +80 +00 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA720 +ENCODING 42784 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 10 +BITMAP +FC +A0 +A0 +ENDCHAR +STARTCHAR uniA721 +ENCODING 42785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 -1 +BITMAP +A0 +A0 +FC +ENDCHAR +STARTCHAR uniA722 +ENCODING 42786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +E0 +F0 +08 +08 +70 +00 +00 +E0 +F0 +08 +08 +70 +ENDCHAR +STARTCHAR uniA723 +ENCODING 42787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +C0 +E0 +10 +10 +60 +00 +C0 +E0 +10 +10 +60 +ENDCHAR +STARTCHAR uniA724 +ENCODING 42788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 3 +BITMAP +70 +F8 +C0 +80 +80 +80 +78 +ENDCHAR +STARTCHAR uniA725 +ENCODING 42789 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +70 +F8 +C0 +80 +80 +80 +78 +ENDCHAR +STARTCHAR uniA726 +ENCODING 42790 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +24 +18 +ENDCHAR +STARTCHAR uniA727 +ENCODING 42791 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +84 +24 +18 +ENDCHAR +STARTCHAR uniA728 +ENCODING 42792 +BBX 11 12 2 -2 +BITMAP +FE00 +1000 +1000 +1FE0 +1040 +1080 +1100 +11C0 +1020 +0020 +0420 +03C0 +ENDCHAR +STARTCHAR uniA729 +ENCODING 42793 +BBX 12 12 2 -2 +BITMAP +2000 +2000 +2000 +FFF0 +2020 +2040 +2080 +20E0 +2010 +1810 +0210 +01E0 +ENDCHAR +STARTCHAR uniA72A +ENCODING 42794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +90 +A0 +60 +98 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uniA72B +ENCODING 42795 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +70 +88 +80 +80 +60 +80 +80 +80 +88 +70 +ENDCHAR +STARTCHAR uniA72C +ENCODING 42796 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +18 +28 +48 +88 +F8 +08 +08 +48 +30 +ENDCHAR +STARTCHAR uniA72D +ENCODING 42797 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +08 +18 +28 +48 +F8 +08 +08 +08 +48 +30 +ENDCHAR +STARTCHAR uniA72E +ENCODING 42798 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +08 +18 +28 +48 +88 +FE +08 +08 +4B +31 +01 +02 +ENDCHAR +STARTCHAR uniA72F +ENCODING 42799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +08 +18 +28 +48 +FE +08 +0B +09 +49 +32 +ENDCHAR +STARTCHAR uniA730 +ENCODING 42800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +F8 +80 +80 +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA731 +ENCODING 42801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uniA732 +ENCODING 42802 +BBX 11 10 2 0 +BITMAP +3180 +4A40 +4A40 +8420 +8420 +FFE0 +8420 +8420 +8420 +8420 +ENDCHAR +STARTCHAR uniA733 +ENCODING 42803 +BBX 11 8 2 0 +BITMAP +7BC0 +8420 +0420 +7FE0 +8420 +8420 +8C60 +77A0 +ENDCHAR +STARTCHAR uniA734 +ENCODING 42804 +BBX 11 10 2 0 +BITMAP +33C0 +4C20 +4C20 +8420 +8420 +FC20 +8420 +8420 +8420 +83C0 +ENDCHAR +STARTCHAR uniA735 +ENCODING 42805 +BBX 11 8 2 0 +BITMAP +7BC0 +8420 +0420 +7C20 +8420 +8420 +8C20 +73C0 +ENDCHAR +STARTCHAR uniA736 +ENCODING 42806 +BBX 11 10 2 0 +BITMAP +3020 +4820 +4820 +8420 +8420 +FC20 +8420 +8420 +8420 +83C0 +ENDCHAR +STARTCHAR uniA737 +ENCODING 42807 +BBX 11 8 2 0 +BITMAP +7820 +8420 +0420 +7C20 +8420 +8420 +8C60 +73A0 +ENDCHAR +STARTCHAR uniA738 +ENCODING 42808 +BBX 11 10 2 0 +BITMAP +3820 +4820 +4820 +8440 +8440 +FC40 +8280 +8280 +8100 +8100 +ENDCHAR +STARTCHAR uniA739 +ENCODING 42809 +BBX 11 8 2 0 +BITMAP +7820 +8420 +0420 +7E40 +8640 +8640 +8980 +7180 +ENDCHAR +STARTCHAR uniA73A +ENCODING 42810 +BBX 11 10 2 0 +BITMAP +3820 +4820 +4820 +8440 +8440 +FFE0 +8280 +8280 +8100 +8100 +ENDCHAR +STARTCHAR uniA73B +ENCODING 42811 +BBX 12 8 2 0 +BITMAP +7820 +8420 +0420 +7FF0 +8640 +8640 +8980 +7180 +ENDCHAR +STARTCHAR uniA73C +ENCODING 42812 +BBX 11 12 2 -2 +BITMAP +3820 +4820 +4820 +8440 +8440 +FC40 +8280 +8280 +8100 +8100 +1200 +0C00 +ENDCHAR +STARTCHAR uniA73D +ENCODING 42813 +BBX 11 10 2 -2 +BITMAP +7820 +8420 +0420 +7E40 +8640 +8640 +8980 +7180 +0480 +0300 +ENDCHAR +STARTCHAR uniA73E +ENCODING 42814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +34 +34 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uniA73F +ENCODING 42815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +34 +34 +04 +84 +78 +ENDCHAR +STARTCHAR uniA740 +ENCODING 42816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +42 +E4 +48 +50 +60 +60 +50 +48 +44 +42 +ENDCHAR +STARTCHAR uniA741 +ENCODING 42817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +40 +F0 +40 +44 +48 +50 +60 +50 +48 +44 +42 +ENDCHAR +STARTCHAR uniA742 +ENCODING 42818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +88 +90 +A0 +C0 +C0 +A8 +90 +A8 +84 +ENDCHAR +STARTCHAR uniA743 +ENCODING 42819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +80 +80 +88 +90 +A0 +C0 +A8 +90 +A8 +84 +ENDCHAR +STARTCHAR uniA744 +ENCODING 42820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +42 +E4 +48 +50 +60 +60 +54 +48 +54 +42 +ENDCHAR +STARTCHAR uniA745 +ENCODING 42821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +40 +F0 +40 +44 +48 +50 +60 +54 +48 +54 +42 +ENDCHAR +STARTCHAR uniA746 +ENCODING 42822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +40 +40 +40 +40 +7C +ENDCHAR +STARTCHAR uniA747 +ENCODING 42823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +C0 +40 +40 +40 +40 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uniA748 +ENCODING 42824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +40 +F0 +40 +40 +40 +40 +40 +40 +40 +7E +ENDCHAR +STARTCHAR uniA749 +ENCODING 42825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +60 +20 +20 +70 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uniA74A +ENCODING 42826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3C +42 +42 +42 +FF +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uniA74B +ENCODING 42827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +3C +42 +42 +FF +42 +42 +42 +3C +ENDCHAR +STARTCHAR uniA74C +ENCODING 42828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +02 +75 +89 +8E +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA74D +ENCODING 42829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +02 +75 +89 +8E +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA74E +ENCODING 42830 +BBX 11 10 2 0 +BITMAP +7BC0 +8420 +8420 +8420 +8420 +8420 +8420 +8420 +8420 +7BC0 +ENDCHAR +STARTCHAR uniA74F +ENCODING 42831 +BBX 11 8 2 0 +BITMAP +7BC0 +8420 +8420 +8420 +8420 +8420 +8420 +7BC0 +ENDCHAR +STARTCHAR uniA750 +ENCODING 42832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7C +42 +42 +42 +7C +40 +40 +40 +F0 +40 +ENDCHAR +STARTCHAR uniA751 +ENCODING 42833 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +5C +62 +42 +42 +42 +42 +62 +5C +F0 +40 +ENDCHAR +STARTCHAR uniA752 +ENCODING 42834 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +1E +11 +11 +11 +7E +90 +90 +90 +50 +10 +ENDCHAR +STARTCHAR uniA753 +ENCODING 42835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +16 +19 +11 +11 +11 +11 +79 +96 +90 +50 +ENDCHAR +STARTCHAR uniA754 +ENCODING 42836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +4E +A9 +29 +29 +1E +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uniA755 +ENCODING 42837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +4A +AD +29 +29 +29 +29 +1D +0A +08 +08 +ENDCHAR +STARTCHAR uniA756 +ENCODING 42838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +78 +84 +84 +84 +84 +84 +84 +B4 +C8 +7A +04 +0A +ENDCHAR +STARTCHAR uniA757 +ENCODING 42839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +74 +8C +84 +84 +84 +84 +8C +74 +0E +04 +ENDCHAR +STARTCHAR uniA758 +ENCODING 42840 +BBX 10 12 3 -2 +BITMAP +7800 +8400 +8480 +8440 +8440 +8440 +8480 +B480 +C900 +7A00 +0400 +0A00 +ENDCHAR +STARTCHAR uniA759 +ENCODING 42841 +BBX 10 10 3 -2 +BITMAP +7480 +8C40 +8440 +8440 +8480 +8480 +8D00 +7600 +0C00 +1400 +ENDCHAR +STARTCHAR uniA75A +ENCODING 42842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +08 +10 +10 +08 +08 +04 +ENDCHAR +STARTCHAR uniA75B +ENCODING 42843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +04 +38 +20 +10 +08 +ENDCHAR +STARTCHAR uniA75C +ENCODING 42844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +78 +84 +04 +04 +08 +10 +22 +42 +84 +FE +04 +08 +ENDCHAR +STARTCHAR uniA75D +ENCODING 42845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +70 +88 +08 +10 +24 +44 +88 +FC +08 +10 +ENDCHAR +STARTCHAR uniA75E +ENCODING 42846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +49 +49 +49 +32 +32 +22 +54 +54 +88 +88 +ENDCHAR +STARTCHAR uniA75F +ENCODING 42847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +4A +4A +52 +34 +64 +64 +98 +98 +ENDCHAR +STARTCHAR uniA760 +ENCODING 42848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +84 +84 +B4 +B4 +CC +CC +84 +84 +04 +18 +ENDCHAR +STARTCHAR uniA761 +ENCODING 42849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +82 +92 +92 +92 +92 +92 +92 +6E +02 +0C +ENDCHAR +STARTCHAR uniA762 +ENCODING 42850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +78 +80 +80 +80 +7C +08 +10 +20 +38 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uniA763 +ENCODING 42851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 -2 +BITMAP +60 +80 +80 +78 +10 +20 +40 +70 +08 +88 +70 +ENDCHAR +STARTCHAR uniA764 +ENCODING 42852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +50 +60 +C0 +78 +44 +42 +42 +44 +78 +40 +40 +40 +ENDCHAR +STARTCHAR uniA765 +ENCODING 42853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +50 +60 +40 +DC +62 +42 +42 +42 +42 +62 +5C +40 +40 +ENDCHAR +STARTCHAR uniA766 +ENCODING 42854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +40 +40 +78 +44 +42 +42 +44 +78 +40 +F0 +40 +ENDCHAR +STARTCHAR uniA767 +ENCODING 42855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +40 +40 +40 +5C +62 +42 +42 +42 +42 +62 +5C +F0 +40 +ENDCHAR +STARTCHAR uniA768 +ENCODING 42856 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +88 +88 +88 +90 +90 +A0 +A0 +C0 +80 +80 +ENDCHAR +STARTCHAR uniA769 +ENCODING 42857 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +88 +88 +90 +90 +A0 +C0 +80 +80 +ENDCHAR +STARTCHAR uniA76A +ENCODING 42858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +08 +08 +30 +08 +08 +08 +08 +70 +ENDCHAR +STARTCHAR uniA76B +ENCODING 42859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +70 +88 +08 +08 +30 +08 +08 +08 +08 +70 +ENDCHAR +STARTCHAR uniA76C +ENCODING 42860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +18 +24 +24 +24 +F8 +20 +20 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uniA76D +ENCODING 42861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +18 +24 +24 +24 +F8 +20 +20 +20 +20 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uniA76E +ENCODING 42862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +84 +94 +64 +04 +04 +08 +70 +ENDCHAR +STARTCHAR uniA76F +ENCODING 42863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +30 +48 +84 +84 +94 +64 +04 +04 +08 +70 +ENDCHAR +STARTCHAR uniA770 +ENCODING 42864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 2 +BITMAP +78 +84 +94 +64 +04 +08 +70 +ENDCHAR +STARTCHAR uniA771 +ENCODING 42865 +BBX 12 13 2 -2 +BITMAP +0400 +0400 +0400 +7400 +8C00 +8400 +8420 +8420 +8440 +8C90 +77E0 +0100 +0200 +ENDCHAR +STARTCHAR uniA772 +ENCODING 42866 +BBX 11 13 2 -2 +BITMAP +6000 +2000 +2000 +2000 +2000 +2000 +2040 +2040 +2080 +2120 +FFC0 +0200 +0400 +ENDCHAR +STARTCHAR uniA773 +ENCODING 42867 +BBX 13 10 1 -2 +BITMAP +EC00 +9200 +9200 +9210 +9210 +9220 +9248 +93F0 +0080 +0100 +ENDCHAR +STARTCHAR uniA774 +ENCODING 42868 +BBX 12 10 1 -2 +BITMAP +B800 +C400 +8400 +8420 +8420 +8440 +8490 +87E0 +0100 +0200 +ENDCHAR +STARTCHAR uniA775 +ENCODING 42869 +BBX 9 12 3 0 +BITMAP +0100 +0100 +0200 +0480 +BF00 +C800 +9000 +8000 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniA776 +ENCODING 42870 +BBX 12 10 1 -2 +BITMAP +F800 +8400 +8400 +F820 +A020 +9040 +8890 +87E0 +0100 +0200 +ENDCHAR +STARTCHAR uniA777 +ENCODING 42871 +BBX 11 11 1 0 +BITMAP +0040 +2040 +2080 +2120 +FFC0 +2200 +2400 +2000 +2000 +2000 +1800 +ENDCHAR +STARTCHAR uniA778 +ENCODING 42872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +44 +44 +44 +38 +1C +22 +42 +02 +FC +ENDCHAR +STARTCHAR uniA779 +ENCODING 42873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FC +22 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uniA77A +ENCODING 42874 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +80 +60 +10 +08 +04 +7C +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uniA77B +ENCODING 42875 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +B8 +C4 +80 +80 +80 +80 +80 +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA77C +ENCODING 42876 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 -2 +BITMAP +B0 +C8 +80 +80 +80 +80 +E0 +80 +80 +80 +ENDCHAR +STARTCHAR uniA77D +ENCODING 42877 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +FC +08 +10 +20 +20 +10 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA77E +ENCODING 42878 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +38 +44 +44 +44 +38 +20 +10 +10 +20 +40 +FC +ENDCHAR +STARTCHAR uniA77F +ENCODING 42879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +78 +20 +10 +10 +20 +40 +FC +ENDCHAR +STARTCHAR uniA780 +ENCODING 42880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uniA781 +ENCODING 42881 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 -2 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +20 +30 +ENDCHAR +STARTCHAR uniA782 +ENCODING 42882 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +B8 +C4 +84 +84 +84 +84 +82 +80 +80 +80 +ENDCHAR +STARTCHAR uniA783 +ENCODING 42883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B0 +C8 +88 +88 +84 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA784 +ENCODING 42884 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 -2 +BITMAP +B8 +C0 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA785 +ENCODING 42885 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 -2 +BITMAP +B8 +C0 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA786 +ENCODING 42886 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +20 +40 +80 +80 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniA787 +ENCODING 42887 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +20 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniA788 +ENCODING 42888 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 -2 +BITMAP +30 +48 +84 +ENDCHAR +STARTCHAR uniA789 +ENCODING 42889 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 6 3 1 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uniA78A +ENCODING 42890 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 2 +BITMAP +F0 +00 +00 +F0 +ENDCHAR +STARTCHAR uniA78B +ENCODING 42891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 7 4 3 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA78C +ENCODING 42892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 5 4 5 +BITMAP +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA78D +ENCODING 42893 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uniA78E +ENCODING 42894 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +30 +10 +10 +70 +90 +7C +10 +10 +10 +10 +10 +0C +ENDCHAR +STARTCHAR uniA78F +ENCODING 42895 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 5 +BITMAP +60 +F0 +F0 +60 +ENDCHAR +STARTCHAR uniA790 +ENCODING 42896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +88 +C8 +C8 +A8 +A8 +98 +98 +88 +88 +8C +04 +04 +ENDCHAR +STARTCHAR uniA791 +ENCODING 42897 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B0 +C8 +88 +88 +88 +88 +88 +8C +04 +04 +ENDCHAR +STARTCHAR uniA792 +ENCODING 42898 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +44 +40 +E0 +40 +40 +44 +44 +38 +ENDCHAR +STARTCHAR uniA793 +ENCODING 42899 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +38 +44 +40 +E0 +40 +40 +44 +38 +ENDCHAR +STARTCHAR uniA794 +ENCODING 42900 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +80 +80 +80 +80 +84 +7C +04 +18 +ENDCHAR +STARTCHAR uniA795 +ENCODING 42901 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +86 +02 +0C +ENDCHAR +STARTCHAR uniA796 +ENCODING 42902 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +24 +24 +24 +78 +A4 +A4 +A4 +24 +38 +ENDCHAR +STARTCHAR uniA797 +ENCODING 42903 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +20 +20 +20 +20 +38 +64 +A4 +A4 +A4 +B8 +80 +60 +ENDCHAR +STARTCHAR uniA798 +ENCODING 42904 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +3C +20 +20 +20 +F8 +20 +20 +20 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uniA799 +ENCODING 42905 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +18 +20 +20 +20 +F8 +20 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniA79A +ENCODING 42906 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +74 +8C +84 +44 +24 +44 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uniA79B +ENCODING 42907 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +74 +8C +84 +64 +44 +84 +8C +74 +ENDCHAR +STARTCHAR uniA79C +ENCODING 42908 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +84 +44 +24 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uniA79D +ENCODING 42909 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +70 +88 +84 +64 +44 +84 +88 +70 +ENDCHAR +STARTCHAR uniA79E +ENCODING 42910 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +44 +24 +44 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uniA79F +ENCODING 42911 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +64 +44 +84 +8C +74 +ENDCHAR +STARTCHAR uniA7A0 +ENCODING 42912 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3D +42 +46 +48 +50 +66 +42 +C2 +46 +3A +ENDCHAR +STARTCHAR uniA7A1 +ENCODING 42913 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -2 +BITMAP +02 +3A +47 +7C +C4 +38 +20 +3C +42 +42 +3C +ENDCHAR +STARTCHAR uniA7A2 +ENCODING 42914 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +42 +44 +48 +50 +62 +64 +58 +68 +C4 +42 +ENDCHAR +STARTCHAR uniA7A3 +ENCODING 42915 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +40 +40 +40 +44 +48 +50 +60 +56 +78 +C4 +42 +ENDCHAR +STARTCHAR uniA7A4 +ENCODING 42916 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +42 +62 +63 +56 +5A +6A +CA +46 +46 +42 +ENDCHAR +STARTCHAR uniA7A5 +ENCODING 42917 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +5C +63 +4E +72 +C2 +42 +42 +42 +ENDCHAR +STARTCHAR uniA7A6 +ENCODING 42918 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +7C +47 +5A +E2 +7C +48 +44 +44 +42 +42 +ENDCHAR +STARTCHAR uniA7A7 +ENCODING 42919 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +5C +62 +42 +50 +60 +40 +C0 +40 +ENDCHAR +STARTCHAR uniA7A8 +ENCODING 42920 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +3C +42 +40 +4C +30 +CC +02 +42 +42 +3C +ENDCHAR +STARTCHAR uniA7A9 +ENCODING 42921 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +3C +40 +4C +30 +CC +02 +42 +3C +ENDCHAR +STARTCHAR uniA7AA +ENCODING 42922 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +62 +A2 +A2 +22 +3E +22 +22 +22 +22 +22 +ENDCHAR +STARTCHAR uniA7AB +ENCODING 42923 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +04 +38 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uniA7AC +ENCODING 42924 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +84 +84 +84 +84 +8C +94 +64 +08 +F0 +ENDCHAR +STARTCHAR uniA7AD +ENCODING 42925 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +20 +20 +60 +A0 +A8 +70 +20 +20 +3C +ENDCHAR +STARTCHAR uniA7AE +ENCODING 42926 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +92 +92 +10 +10 +10 +10 +92 +92 +FE +ENDCHAR +STARTCHAR uniA7AF +ENCODING 42927 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +78 +84 +84 +84 +84 +B4 +CC +78 +06 +ENDCHAR +STARTCHAR uniA7B0 +ENCODING 42928 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +44 +24 +14 +0C +0C +14 +24 +44 +84 +ENDCHAR +STARTCHAR uniA7B1 +ENCODING 42929 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uniA7B2 +ENCODING 42930 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +3E +08 +08 +08 +08 +08 +48 +A8 +98 +70 +08 +ENDCHAR +STARTCHAR uniA7B3 +ENCODING 42931 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +84 +84 +48 +48 +30 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uniA7B4 +ENCODING 42932 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F8 +84 +84 +84 +F8 +84 +84 +84 +84 +F8 +80 +80 +ENDCHAR +STARTCHAR uniA7B5 +ENCODING 42933 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +70 +88 +88 +90 +B0 +88 +84 +84 +A4 +98 +80 +80 +ENDCHAR +STARTCHAR uniA7B6 +ENCODING 42934 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +44 +AA +82 +82 +82 +82 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uniA7B7 +ENCODING 42935 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +44 +AA +82 +82 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uniA7B8 +ENCODING 42936 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +42 +42 +43 +42 +46 +4A +52 +62 +42 +BC +ENDCHAR +STARTCHAR uniA7B9 +ENCODING 42937 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +43 +42 +46 +4A +52 +62 +46 +BA +ENDCHAR +STARTCHAR uniA7BA +ENCODING 42938 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +C0 +50 +A8 +28 +44 +44 +7C +44 +44 +44 +44 +ENDCHAR +STARTCHAR uniA7BB +ENCODING 42939 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +10 +20 +00 +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uniA7BC +ENCODING 42940 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +C0 +7C +90 +10 +10 +10 +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uniA7BD +ENCODING 42941 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +60 +20 +40 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uniA7BE +ENCODING 42942 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +C0 +62 +A2 +22 +22 +22 +22 +22 +22 +22 +1C +ENDCHAR +STARTCHAR uniA7BF +ENCODING 42943 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +30 +10 +20 +00 +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uniA7C0 +ENCODING 42944 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -2 +BITMAP +10 +10 +7C +82 +82 +82 +82 +82 +82 +82 +82 +7C +10 +10 +ENDCHAR +STARTCHAR uniA7C1 +ENCODING 42945 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +10 +10 +7C +82 +82 +82 +82 +82 +82 +7C +10 +10 +ENDCHAR +STARTCHAR uniA7C2 +ENCODING 42946 +BBX 12 12 1 0 +BITMAP +0100 +0200 +82E0 +8310 +8210 +4410 +44E0 +4410 +2A10 +2A10 +1110 +10E0 +ENDCHAR +STARTCHAR uniA7C3 +ENCODING 42947 +BBX 12 10 1 0 +BITMAP +0200 +0400 +85E0 +8610 +8410 +4CE0 +4A10 +4A10 +3110 +30E0 +ENDCHAR +STARTCHAR uniA7C4 +ENCODING 42948 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +80 +80 +80 +80 +84 +8C +74 +04 +18 +ENDCHAR +STARTCHAR uniA7C5 +ENCODING 42949 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +C4 +B8 +80 +60 +ENDCHAR +STARTCHAR uniA7C6 +ENCODING 42950 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +84 +FC +04 +18 +ENDCHAR +STARTCHAR uniA7C7 +ENCODING 42951 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +88 +84 +84 +FC +84 +84 +84 +88 +F0 +ENDCHAR +STARTCHAR uniA7C8 +ENCODING 42952 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +04 +04 +74 +8C +84 +FC +84 +84 +8C +74 +ENDCHAR +STARTCHAR uniA7C9 +ENCODING 42953 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +40 +20 +FC +08 +84 +84 +78 +ENDCHAR +STARTCHAR uniA7CA +ENCODING 42954 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +60 +FC +18 +04 +84 +78 +ENDCHAR +STARTCHAR uniA7CB +ENCODING 42955 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +44 +AA +28 +28 +10 +10 +28 +44 +44 +38 +ENDCHAR +STARTCHAR uniA7CC +ENCODING 42956 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3D +42 +46 +48 +30 +1C +12 +62 +42 +BC +ENDCHAR +STARTCHAR uniA7CD +ENCODING 42957 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +3D +42 +44 +38 +1C +22 +42 +BC +ENDCHAR +STARTCHAR uniA7D0 +ENCODING 42960 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 -1 +BITMAP +FE +44 +44 +44 +38 +10 +08 +04 +44 +44 +38 +ENDCHAR +STARTCHAR uniA7D1 +ENCODING 42961 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +FE +44 +44 +44 +38 +08 +04 +44 +44 +38 +ENDCHAR +STARTCHAR uniA7D3 +ENCODING 42963 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +80 +80 +B8 +C4 +84 +F8 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uniA7D5 +ENCODING 42965 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +B8 +C4 +84 +84 +B8 +C0 +80 +ENDCHAR +STARTCHAR uniA7D6 +ENCODING 42966 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +70 +88 +88 +88 +90 +90 +88 +88 +88 +90 +80 +ENDCHAR +STARTCHAR uniA7D7 +ENCODING 42967 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +1C +22 +22 +22 +E4 +24 +22 +22 +22 +24 +20 +ENDCHAR +STARTCHAR uniA7D8 +ENCODING 42968 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +60 +78 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uniA7D9 +ENCODING 42969 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +60 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uniA7DA +ENCODING 42970 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +10 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uniA7DB +ENCODING 42971 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +C0 +20 +20 +10 +10 +08 +18 +28 +44 +83 +ENDCHAR +STARTCHAR uniA7DC +ENCODING 42972 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +FE +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uniA7F2 +ENCODING 42994 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 6 +BITMAP +78 +84 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uniA7F3 +ENCODING 42995 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 6 +BITMAP +FC +80 +80 +F8 +80 +80 +80 +ENDCHAR +STARTCHAR uniA7F4 +ENCODING 42996 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 6 +BITMAP +78 +84 +84 +A4 +94 +78 +04 +ENDCHAR +STARTCHAR uniA7F5 +ENCODING 42997 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +10 +10 +10 +10 +F0 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA7F6 +ENCODING 42998 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +10 +10 +10 +F0 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA7F7 +ENCODING 42999 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 3 +BITMAP +84 +FC +84 +ENDCHAR +STARTCHAR uniA7F8 +ENCODING 43000 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 4 +BITMAP +42 +FF +42 +7E +42 +42 +42 +ENDCHAR +STARTCHAR uniA7F9 +ENCODING 43001 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 4 +BITMAP +6C +92 +9E +90 +6E +ENDCHAR +STARTCHAR uniA7FA +ENCODING 43002 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uniA7FB +ENCODING 43003 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +7C +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uniA7FC +ENCODING 43004 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +7C +84 +84 +84 +7C +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uniA7FD +ENCODING 43005 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +B4 +B4 +CC +CC +84 +84 +ENDCHAR +STARTCHAR uniA7FE +ENCODING 43006 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uniA7FF +ENCODING 43007 +BBX 16 10 0 0 +BITMAP +1041 +1041 +1041 +28A2 +28A2 +28A2 +4514 +4514 +8208 +8208 +ENDCHAR +STARTCHAR uniA800 +ENCODING 43008 +BBX 16 10 0 1 +BITMAP +FFFF +0030 +0050 +0090 +0110 +0210 +0410 +0810 +1010 +6008 +ENDCHAR +STARTCHAR uniA801 +ENCODING 43009 +BBX 16 10 0 1 +BITMAP +FFFF +0400 +0500 +0680 +0480 +0100 +0600 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uniA802 +ENCODING 43010 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 11 +BITMAP +90 +48 +24 +ENDCHAR +STARTCHAR uniA803 +ENCODING 43011 +BBX 16 10 0 1 +BITMAP +FFFF +0800 +11E0 +2210 +2410 +20E0 +2110 +2010 +1020 +0FC0 +ENDCHAR +STARTCHAR uniA804 +ENCODING 43012 +BBX 16 13 0 1 +BITMAP +0E00 +0100 +0080 +FFFF +1080 +1080 +1080 +1100 +1E00 +1000 +1000 +1000 +0800 +ENDCHAR +STARTCHAR uniA805 +ENCODING 43013 +BBX 16 10 0 1 +BITMAP +FFFF +0040 +0340 +04C0 +0840 +0840 +04C0 +0340 +1840 +1840 +ENDCHAR +STARTCHAR uniA806 +ENCODING 43014 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -9 11 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uniA807 +ENCODING 43015 +BBX 16 10 0 1 +BITMAP +FFFF +2260 +22A0 +2320 +2E20 +3220 +0220 +0220 +0220 +0110 +ENDCHAR +STARTCHAR uniA808 +ENCODING 43016 +BBX 16 10 0 1 +BITMAP +FFFF +2660 +2AA0 +3320 +2220 +0020 +0020 +0020 +0020 +0010 +ENDCHAR +STARTCHAR uniA809 +ENCODING 43017 +BBX 16 10 0 1 +BITMAP +FFFF +0840 +0840 +0440 +0C40 +1440 +1440 +0840 +0040 +0020 +ENDCHAR +STARTCHAR uniA80A +ENCODING 43018 +BBX 16 10 0 1 +BITMAP +FFFF +00C0 +0340 +0440 +0340 +00C0 +0340 +0440 +0340 +00E0 +ENDCHAR +STARTCHAR uniA80B +ENCODING 43019 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -7 11 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uniA80C +ENCODING 43020 +BBX 16 10 0 1 +BITMAP +FFFF +0040 +00C0 +0140 +0240 +0440 +0840 +0640 +01C0 +0020 +ENDCHAR +STARTCHAR uniA80D +ENCODING 43021 +BBX 16 10 0 1 +BITMAP +FFFF +1000 +1180 +1280 +1480 +19E0 +0290 +0460 +0800 +0800 +ENDCHAR +STARTCHAR uniA80E +ENCODING 43022 +BBX 16 10 0 1 +BITMAP +FFFF +0820 +1020 +21E0 +2120 +1120 +0E20 +0020 +0020 +0010 +ENDCHAR +STARTCHAR uniA80F +ENCODING 43023 +BBX 16 10 0 1 +BITMAP +FFFF +2000 +2600 +2A28 +3228 +0248 +0248 +0290 +0290 +0320 +ENDCHAR +STARTCHAR uniA810 +ENCODING 43024 +BBX 16 10 0 1 +BITMAP +FFFF +0700 +0880 +0840 +0480 +0100 +0240 +0420 +0820 +07C0 +ENDCHAR +STARTCHAR uniA811 +ENCODING 43025 +BBX 16 10 0 1 +BITMAP +FFFF +0800 +0800 +0B00 +0C80 +0880 +0880 +0900 +0A00 +0C00 +ENDCHAR +STARTCHAR uniA812 +ENCODING 43026 +BBX 16 10 0 1 +BITMAP +FFFF +0100 +0100 +0960 +1190 +1110 +1010 +1020 +0840 +0780 +ENDCHAR +STARTCHAR uniA813 +ENCODING 43027 +BBX 16 10 0 1 +BITMAP +FFFF +0800 +0800 +0980 +0A40 +0A40 +0880 +0880 +0900 +0600 +ENDCHAR +STARTCHAR uniA814 +ENCODING 43028 +BBX 16 10 0 1 +BITMAP +FFFF +0040 +0040 +18C0 +1F40 +0840 +0840 +0840 +1040 +2020 +ENDCHAR +STARTCHAR uniA815 +ENCODING 43029 +BBX 16 10 0 1 +BITMAP +FFFF +0020 +0260 +06A0 +2B20 +1220 +0020 +0020 +0020 +0010 +ENDCHAR +STARTCHAR uniA816 +ENCODING 43030 +BBX 16 10 0 1 +BITMAP +FFFF +1000 +1180 +1280 +1480 +1880 +0080 +0080 +0040 +0030 +ENDCHAR +STARTCHAR uniA817 +ENCODING 43031 +BBX 16 10 0 1 +BITMAP +FFFF +2010 +2030 +1350 +0D90 +0110 +0010 +0010 +0010 +0008 +ENDCHAR +STARTCHAR uniA818 +ENCODING 43032 +BBX 16 10 0 1 +BITMAP +FFFF +0060 +00A0 +0120 +0220 +0520 +0520 +0520 +0220 +0010 +ENDCHAR +STARTCHAR uniA819 +ENCODING 43033 +BBX 16 10 0 1 +BITMAP +FFFF +2060 +20A0 +2120 +2220 +2420 +2820 +3020 +2020 +0010 +ENDCHAR +STARTCHAR uniA81A +ENCODING 43034 +BBX 16 10 0 1 +BITMAP +FFFF +40C0 +4170 +4248 +4450 +4860 +5050 +6048 +4040 +0020 +ENDCHAR +STARTCHAR uniA81B +ENCODING 43035 +BBX 16 10 0 1 +BITMAP +FFFF +0040 +0040 +0740 +08C0 +08C0 +0740 +0040 +0040 +0020 +ENDCHAR +STARTCHAR uniA81C +ENCODING 43036 +BBX 16 10 0 1 +BITMAP +FFFF +01E0 +0220 +0420 +1E20 +2520 +0220 +0020 +0020 +0010 +ENDCHAR +STARTCHAR uniA81D +ENCODING 43037 +BBX 16 10 0 1 +BITMAP +FFFF +4060 +20A0 +1120 +0A20 +0420 +0A20 +0A20 +0420 +0010 +ENDCHAR +STARTCHAR uniA81E +ENCODING 43038 +BBX 16 10 0 1 +BITMAP +FFFF +0060 +00A0 +0120 +1220 +0C20 +0020 +0020 +0020 +0010 +ENDCHAR +STARTCHAR uniA81F +ENCODING 43039 +BBX 16 10 0 1 +BITMAP +FFFF +0060 +00A0 +0120 +1220 +0C20 +00A0 +0120 +0220 +0190 +ENDCHAR +STARTCHAR uniA820 +ENCODING 43040 +BBX 16 10 0 1 +BITMAP +FFFF +0100 +0100 +0160 +0190 +0110 +0010 +0020 +0040 +0780 +ENDCHAR +STARTCHAR uniA821 +ENCODING 43041 +BBX 16 10 0 1 +BITMAP +FFFF +0010 +0E30 +1150 +1190 +0210 +0510 +0090 +0090 +0008 +ENDCHAR +STARTCHAR uniA822 +ENCODING 43042 +BBX 16 10 0 1 +BITMAP +FFFF +2060 +20A0 +2120 +2220 +2420 +28A0 +3120 +2220 +0190 +ENDCHAR +STARTCHAR uniA823 +ENCODING 43043 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 10 -4 1 +BITMAP +F0 +20 +20 +20 +20 +20 +20 +20 +20 +10 +ENDCHAR +STARTCHAR uniA824 +ENCODING 43044 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 13 -5 1 +BITMAP +60 +90 +10 +78 +10 +10 +10 +10 +10 +10 +10 +10 +08 +ENDCHAR +STARTCHAR uniA825 +ENCODING 43045 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -9 -1 +BITMAP +04 +04 +08 +F0 +ENDCHAR +STARTCHAR uniA826 +ENCODING 43046 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -10 11 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uniA827 +ENCODING 43047 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 13 -4 1 +BITMAP +80 +40 +20 +F0 +20 +20 +20 +20 +20 +20 +20 +20 +10 +ENDCHAR +STARTCHAR uniA828 +ENCODING 43048 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 4 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uniA829 +ENCODING 43049 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 1 1 +BITMAP +60 +90 +90 +60 +00 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uniA82A +ENCODING 43050 +BBX 13 9 1 1 +BITMAP +6030 +9048 +9048 +6030 +0000 +0300 +0480 +0480 +0300 +ENDCHAR +STARTCHAR uniA82B +ENCODING 43051 +BBX 9 9 3 1 +BITMAP +6300 +9480 +9480 +6300 +0000 +6300 +9480 +9480 +6300 +ENDCHAR +STARTCHAR uniA82C +ENCODING 43052 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -9 -2 +BITMAP +C0 +20 +10 +ENDCHAR +STARTCHAR uniA830 +ENCODING 43056 +BBX 1 10 8 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA831 +ENCODING 43057 +BBX 4 11 7 0 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uniA832 +ENCODING 43058 +BBX 7 11 4 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uniA833 +ENCODING 43059 +BBX 9 3 3 3 +BITMAP +0380 +1C00 +E000 +ENDCHAR +STARTCHAR uniA834 +ENCODING 43060 +BBX 9 7 3 1 +BITMAP +0380 +1C00 +E000 +0000 +0380 +1C00 +E000 +ENDCHAR +STARTCHAR uniA835 +ENCODING 43061 +BBX 9 9 3 1 +BITMAP +0380 +1C00 +E000 +0380 +1C00 +E000 +0380 +1C00 +E000 +ENDCHAR +STARTCHAR uniA836 +ENCODING 43062 +BBX 5 5 6 6 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA837 +ENCODING 43063 +BBX 7 10 3 0 +BITMAP +02 +04 +08 +10 +20 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA838 +ENCODING 43064 +BBX 5 11 7 0 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +08 +10 +E0 +ENDCHAR +STARTCHAR uniA839 +ENCODING 43065 +BBX 8 11 4 0 +BITMAP +07 +08 +08 +08 +04 +04 +04 +04 +04 +18 +E0 +ENDCHAR +STARTCHAR uniA840 +ENCODING 43072 +BBX 15 10 1 1 +BITMAP +FFFE +8000 +8000 +FFFC +8000 +8000 +FFFC +8100 +8100 +8100 +ENDCHAR +STARTCHAR uniA841 +ENCODING 43073 +BBX 14 10 1 1 +BITMAP +9FF0 +9010 +9010 +9010 +F010 +9010 +9010 +9FF0 +8000 +FFFC +ENDCHAR +STARTCHAR uniA842 +ENCODING 43074 +BBX 15 10 1 1 +BITMAP +FFFE +8000 +9FF0 +9010 +9010 +F010 +9010 +9010 +9010 +9FF0 +ENDCHAR +STARTCHAR uniA843 +ENCODING 43075 +BBX 13 10 1 1 +BITMAP +FE08 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +83F8 +ENDCHAR +STARTCHAR uniA844 +ENCODING 43076 +BBX 13 10 1 1 +BITMAP +FFF8 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +83F8 +ENDCHAR +STARTCHAR uniA845 +ENCODING 43077 +BBX 13 10 1 1 +BITMAP +83F8 +8208 +8208 +8208 +8208 +FE08 +8208 +8208 +8208 +83F8 +ENDCHAR +STARTCHAR uniA846 +ENCODING 43078 +BBX 13 10 1 1 +BITMAP +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +FFF8 +ENDCHAR +STARTCHAR uniA847 +ENCODING 43079 +BBX 13 10 1 1 +BITMAP +FFF8 +8200 +8100 +8080 +8040 +8038 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniA848 +ENCODING 43080 +BBX 14 10 1 1 +BITMAP +80E8 +8110 +8200 +8200 +8180 +FFF8 +8000 +8000 +8000 +FFFC +ENDCHAR +STARTCHAR uniA849 +ENCODING 43081 +BBX 15 10 1 1 +BITMAP +FFFE +8208 +8208 +8208 +E388 +9248 +8A28 +8618 +8618 +8208 +ENDCHAR +STARTCHAR uniA84A +ENCODING 43082 +BBX 10 10 1 1 +BITMAP +80C0 +8100 +8200 +8200 +E200 +9200 +8A00 +8600 +8600 +8200 +ENDCHAR +STARTCHAR uniA84B +ENCODING 43083 +BBX 11 10 1 1 +BITMAP +FFE0 +80C0 +8100 +8200 +8500 +8880 +8880 +8880 +8880 +8700 +ENDCHAR +STARTCHAR uniA84C +ENCODING 43084 +BBX 13 10 1 1 +BITMAP +FFF8 +0008 +0008 +0008 +FE08 +8208 +8208 +8208 +8208 +83F8 +ENDCHAR +STARTCHAR uniA84D +ENCODING 43085 +BBX 13 10 1 1 +BITMAP +FFF8 +0008 +0008 +0008 +FC08 +0208 +0208 +0208 +0208 +01F0 +ENDCHAR +STARTCHAR uniA84E +ENCODING 43086 +BBX 13 10 1 1 +BITMAP +FFF8 +8008 +8008 +8008 +FE08 +8208 +8208 +8208 +8208 +83F8 +ENDCHAR +STARTCHAR uniA84F +ENCODING 43087 +BBX 11 10 1 1 +BITMAP +FFE0 +00C0 +0100 +FE00 +8500 +8880 +8880 +8880 +8880 +8700 +ENDCHAR +STARTCHAR uniA850 +ENCODING 43088 +BBX 15 10 1 1 +BITMAP +FFFE +8100 +8100 +83C0 +8420 +FC10 +8490 +8310 +8020 +8FC0 +ENDCHAR +STARTCHAR uniA851 +ENCODING 43089 +BBX 15 10 1 1 +BITMAP +FFFE +8080 +8100 +8200 +87C0 +8020 +8010 +8010 +8020 +87C0 +ENDCHAR +STARTCHAR uniA852 +ENCODING 43090 +BBX 15 10 1 1 +BITMAP +FFFE +8004 +8004 +8004 +83FC +8204 +8204 +FE04 +8204 +8204 +ENDCHAR +STARTCHAR uniA853 +ENCODING 43091 +BBX 15 10 1 1 +BITMAP +8000 +8860 +89A0 +8E20 +F820 +8E20 +89A0 +8860 +8000 +FFFE +ENDCHAR +STARTCHAR uniA854 +ENCODING 43092 +BBX 15 10 1 1 +BITMAP +F83E +86C0 +8100 +8280 +8440 +8440 +8440 +8380 +8000 +FFFC +ENDCHAR +STARTCHAR uniA855 +ENCODING 43093 +BBX 13 10 1 1 +BITMAP +FFF8 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +ENDCHAR +STARTCHAR uniA856 +ENCODING 43094 +BBX 13 10 1 1 +BITMAP +FE08 +8208 +8208 +8208 +8208 +83F8 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniA857 +ENCODING 43095 +BBX 10 10 3 1 +BITMAP +FFC0 +0080 +0100 +0200 +FF00 +0080 +0040 +0040 +0080 +FF00 +ENDCHAR +STARTCHAR uniA858 +ENCODING 43096 +BBX 7 10 5 1 +BITMAP +82 +82 +82 +82 +82 +FE +82 +82 +82 +82 +ENDCHAR +STARTCHAR uniA859 +ENCODING 43097 +BBX 13 10 1 1 +BITMAP +FFF8 +0008 +0008 +FE08 +8208 +8208 +83F8 +8000 +8000 +FFF8 +ENDCHAR +STARTCHAR uniA85A +ENCODING 43098 +BBX 13 10 1 1 +BITMAP +FFF8 +8000 +8000 +8000 +83F8 +8208 +8208 +8208 +8208 +FE08 +ENDCHAR +STARTCHAR uniA85B +ENCODING 43099 +BBX 15 10 1 1 +BITMAP +FFFE +0060 +0180 +4600 +5800 +6000 +5000 +4880 +4500 +4200 +ENDCHAR +STARTCHAR uniA85C +ENCODING 43100 +BBX 14 10 1 1 +BITMAP +83C4 +8428 +8810 +8800 +8400 +8200 +C100 +A200 +9400 +8800 +ENDCHAR +STARTCHAR uniA85D +ENCODING 43101 +BBX 12 10 1 1 +BITMAP +FFF0 +0060 +0180 +4600 +5800 +61E0 +5610 +4810 +0010 +FFE0 +ENDCHAR +STARTCHAR uniA85E +ENCODING 43102 +BBX 11 10 1 1 +BITMAP +FFE0 +8300 +8400 +8800 +9080 +9040 +9040 +9040 +8880 +8700 +ENDCHAR +STARTCHAR uniA85F +ENCODING 43103 +BBX 12 10 1 1 +BITMAP +8000 +83C0 +8420 +8810 +F810 +8810 +8710 +8010 +8020 +81C0 +ENDCHAR +STARTCHAR uniA860 +ENCODING 43104 +BBX 15 10 1 1 +BITMAP +FFFE +8200 +8200 +8200 +8200 +8220 +8240 +8280 +8300 +8200 +ENDCHAR +STARTCHAR uniA861 +ENCODING 43105 +BBX 12 10 1 1 +BITMAP +8010 +8060 +8780 +9800 +E000 +E000 +9800 +8780 +8060 +8010 +ENDCHAR +STARTCHAR uniA862 +ENCODING 43106 +BBX 15 10 1 1 +BITMAP +FFE0 +8020 +8020 +F020 +8E20 +81E0 +8000 +8000 +8000 +FFFE +ENDCHAR +STARTCHAR uniA863 +ENCODING 43107 +BBX 15 10 1 1 +BITMAP +FFFE +8208 +8208 +8208 +E388 +9248 +8A28 +8618 +8000 +FFFE +ENDCHAR +STARTCHAR uniA864 +ENCODING 43108 +BBX 15 10 1 1 +BITMAP +879E +8862 +8822 +8812 +8412 +820A +C10A +A206 +9406 +8802 +ENDCHAR +STARTCHAR uniA865 +ENCODING 43109 +BBX 15 10 1 1 +BITMAP +FFFE +8000 +8000 +8000 +81E0 +8E20 +F020 +8020 +8020 +FFE0 +ENDCHAR +STARTCHAR uniA866 +ENCODING 43110 +BBX 15 10 1 1 +BITMAP +8006 +8008 +8010 +8010 +8020 +8020 +8020 +8020 +8020 +FFE0 +ENDCHAR +STARTCHAR uniA867 +ENCODING 43111 +BBX 11 10 3 1 +BITMAP +FFE0 +4020 +2020 +1020 +0820 +0420 +0220 +0120 +00A0 +0060 +ENDCHAR +STARTCHAR uniA868 +ENCODING 43112 +BBX 12 10 2 1 +BITMAP +2010 +1010 +1010 +0820 +0820 +0820 +1040 +1040 +2080 +FF00 +ENDCHAR +STARTCHAR uniA869 +ENCODING 43113 +BBX 14 10 1 1 +BITMAP +FFFC +8000 +8000 +8000 +FFF8 +8180 +8200 +8200 +8110 +80E8 +ENDCHAR +STARTCHAR uniA86A +ENCODING 43114 +BBX 15 10 1 1 +BITMAP +8208 +8618 +8618 +8A28 +9248 +E388 +8208 +8208 +8208 +FFFE +ENDCHAR +STARTCHAR uniA86B +ENCODING 43115 +BBX 10 10 1 1 +BITMAP +8200 +8600 +8600 +8A00 +9200 +E200 +8200 +8200 +8100 +80C0 +ENDCHAR +STARTCHAR uniA86C +ENCODING 43116 +BBX 11 10 1 1 +BITMAP +8700 +8880 +8880 +8880 +8880 +8500 +8200 +8100 +80C0 +FFE0 +ENDCHAR +STARTCHAR uniA86D +ENCODING 43117 +BBX 14 12 1 -1 +BITMAP +FFFC +000C +0030 +10C0 +0D00 +03F8 +0004 +0004 +0004 +03F8 +0C00 +1000 +ENDCHAR +STARTCHAR uniA86E +ENCODING 43118 +BBX 13 10 1 1 +BITMAP +FFF8 +8000 +8000 +8000 +83F8 +8208 +8208 +8C08 +B008 +C008 +ENDCHAR +STARTCHAR uniA86F +ENCODING 43119 +BBX 13 10 1 1 +BITMAP +83C0 +8420 +8810 +8808 +8400 +8200 +C100 +A200 +9400 +8800 +ENDCHAR +STARTCHAR uniA870 +ENCODING 43120 +BBX 15 10 1 1 +BITMAP +807E +86A2 +8922 +8812 +8412 +820A +C10A +A206 +9406 +8802 +ENDCHAR +STARTCHAR uniA871 +ENCODING 43121 +BBX 15 10 1 1 +BITMAP +FFFE +000C +0030 +00C0 +0100 +0200 +0200 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniA872 +ENCODING 43122 +BBX 7 10 4 1 +BITMAP +80 +80 +80 +80 +80 +FE +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA873 +ENCODING 43123 +BBX 11 9 2 1 +BITMAP +0100 +0080 +1840 +7C60 +FC60 +7C60 +1840 +0080 +0100 +ENDCHAR +STARTCHAR uniA874 +ENCODING 43124 +BBX 15 10 1 1 +BITMAP +FFFE +8002 +8002 +8202 +8202 +8202 +FE02 +0002 +0002 +FFFE +ENDCHAR +STARTCHAR uniA875 +ENCODING 43125 +BBX 15 11 1 1 +BITMAP +FFFE +8002 +8202 +FE02 +0002 +FFFE +8002 +8202 +FE02 +0002 +FFFE +ENDCHAR +STARTCHAR uniA876 +ENCODING 43126 +BBX 1 10 8 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA877 +ENCODING 43127 +BBX 5 10 6 1 +BITMAP +88 +88 +88 +88 +88 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uniA880 +ENCODING 43136 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -4 5 +BITMAP +40 +A0 +A0 +40 +ENDCHAR +STARTCHAR uniA881 +ENCODING 43137 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -4 1 +BITMAP +40 +A0 +A0 +40 +00 +40 +A0 +A0 +40 +ENDCHAR +STARTCHAR uniA882 +ENCODING 43138 +BBX 9 9 0 1 +BITMAP +3600 +4900 +4900 +0200 +7C00 +8000 +8080 +8100 +7E00 +ENDCHAR +STARTCHAR uniA883 +ENCODING 43139 +BBX 10 9 0 1 +BITMAP +3600 +4900 +4900 +0200 +7C00 +8100 +8080 +8140 +7E00 +ENDCHAR +STARTCHAR uniA884 +ENCODING 43140 +BBX 9 9 0 1 +BITMAP +6300 +9480 +A400 +8200 +6100 +8100 +8100 +8200 +7C00 +ENDCHAR +STARTCHAR uniA885 +ENCODING 43141 +BBX 9 9 0 1 +BITMAP +6300 +9480 +A700 +8200 +6100 +8100 +8100 +8200 +7C00 +ENDCHAR +STARTCHAR uniA886 +ENCODING 43142 +BBX 9 9 0 1 +BITMAP +CF00 +3080 +2900 +4C00 +9200 +8200 +8200 +8400 +7800 +ENDCHAR +STARTCHAR uniA887 +ENCODING 43143 +BBX 9 9 0 1 +BITMAP +CE00 +3100 +2880 +4C80 +9280 +8280 +8280 +8480 +7880 +ENDCHAR +STARTCHAR uniA888 +ENCODING 43144 +BBX 9 9 0 1 +BITMAP +4C80 +9280 +9280 +6280 +0480 +7880 +8080 +8100 +7E00 +ENDCHAR +STARTCHAR uniA889 +ENCODING 43145 +BBX 10 9 0 1 +BITMAP +4C00 +9200 +9200 +6200 +0400 +7900 +8080 +8140 +7E00 +ENDCHAR +STARTCHAR uniA88A +ENCODING 43146 +BBX 9 9 0 1 +BITMAP +7700 +8880 +8880 +8080 +8080 +BE80 +8480 +8880 +4700 +ENDCHAR +STARTCHAR uniA88B +ENCODING 43147 +BBX 9 12 0 -2 +BITMAP +7700 +8880 +8880 +8080 +8080 +BE80 +8480 +8880 +4700 +0600 +2100 +1E00 +ENDCHAR +STARTCHAR uniA88C +ENCODING 43148 +BBX 9 9 0 1 +BITMAP +3F00 +4080 +8000 +9300 +9480 +9480 +8F00 +4400 +3800 +ENDCHAR +STARTCHAR uniA88D +ENCODING 43149 +BBX 9 9 0 1 +BITMAP +3F00 +4080 +8080 +A480 +AA80 +AA80 +9C80 +4880 +3080 +ENDCHAR +STARTCHAR uniA88E +ENCODING 43150 +BBX 9 9 0 1 +BITMAP +3F00 +4080 +8000 +A900 +AA80 +AA80 +9700 +4200 +3C00 +ENDCHAR +STARTCHAR uniA88F +ENCODING 43151 +BBX 9 9 0 1 +BITMAP +3F00 +4080 +9E00 +A100 +9100 +8600 +9900 +4100 +3E00 +ENDCHAR +STARTCHAR uniA890 +ENCODING 43152 +BBX 9 9 0 1 +BITMAP +3F00 +4080 +9C80 +A280 +9280 +8480 +9A80 +4280 +3C80 +ENDCHAR +STARTCHAR uniA891 +ENCODING 43153 +BBX 9 9 0 1 +BITMAP +3F00 +4080 +9000 +A900 +8A80 +B280 +8F80 +4980 +3180 +ENDCHAR +STARTCHAR uniA892 +ENCODING 43154 +BBX 8 9 1 1 +BITMAP +4E +B1 +A1 +51 +11 +11 +11 +11 +11 +ENDCHAR +STARTCHAR uniA893 +ENCODING 43155 +BBX 11 9 0 1 +BITMAP +8440 +4AA0 +27C0 +2440 +4840 +4920 +9220 +9220 +61C0 +ENDCHAR +STARTCHAR uniA894 +ENCODING 43156 +BBX 9 9 0 1 +BITMAP +6700 +8880 +8880 +8880 +8880 +8880 +8880 +8880 +7300 +ENDCHAR +STARTCHAR uniA895 +ENCODING 43157 +BBX 9 9 0 1 +BITMAP +6200 +9500 +A500 +8200 +6500 +8500 +8880 +8880 +7300 +ENDCHAR +STARTCHAR uniA896 +ENCODING 43158 +BBX 9 9 0 1 +BITMAP +7F00 +8080 +8080 +B880 +4480 +B880 +8080 +8080 +4300 +ENDCHAR +STARTCHAR uniA897 +ENCODING 43159 +BBX 9 9 0 1 +BITMAP +6100 +9280 +5080 +1080 +F880 +4100 +8100 +8200 +7C00 +ENDCHAR +STARTCHAR uniA898 +ENCODING 43160 +BBX 9 9 0 1 +BITMAP +6300 +9480 +A280 +8080 +7080 +8100 +8100 +8200 +7C00 +ENDCHAR +STARTCHAR uniA899 +ENCODING 43161 +BBX 9 9 0 1 +BITMAP +7700 +8880 +8880 +8080 +A080 +D080 +9080 +9480 +6300 +ENDCHAR +STARTCHAR uniA89A +ENCODING 43162 +BBX 9 9 0 1 +BITMAP +7700 +8880 +9480 +A280 +A280 +9480 +8880 +9480 +4900 +ENDCHAR +STARTCHAR uniA89B +ENCODING 43163 +BBX 9 9 0 1 +BITMAP +3C00 +4200 +8900 +9500 +9500 +8F80 +9100 +9200 +4C00 +ENDCHAR +STARTCHAR uniA89C +ENCODING 43164 +BBX 9 9 0 1 +BITMAP +FF80 +4000 +3800 +0600 +7100 +8880 +9080 +8100 +7E00 +ENDCHAR +STARTCHAR uniA89D +ENCODING 43165 +BBX 9 9 0 1 +BITMAP +3E00 +4100 +8080 +8080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA89E +ENCODING 43166 +BBX 9 9 0 1 +BITMAP +7F80 +0100 +2200 +4700 +8880 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA89F +ENCODING 43167 +BBX 9 9 0 1 +BITMAP +0200 +8500 +4480 +2580 +5280 +4080 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uniA8A0 +ENCODING 43168 +BBX 9 9 0 1 +BITMAP +3E00 +4100 +8C80 +9280 +9280 +BA80 +8280 +4480 +3900 +ENDCHAR +STARTCHAR uniA8A1 +ENCODING 43169 +BBX 9 9 0 1 +BITMAP +3E00 +4100 +8080 +8080 +8080 +8080 +8080 +4080 +3080 +ENDCHAR +STARTCHAR uniA8A2 +ENCODING 43170 +BBX 8 9 1 1 +BITMAP +66 +91 +21 +42 +84 +68 +10 +28 +10 +ENDCHAR +STARTCHAR uniA8A3 +ENCODING 43171 +BBX 9 9 0 1 +BITMAP +7800 +8400 +8400 +4800 +1000 +6200 +8100 +8300 +7C80 +ENDCHAR +STARTCHAR uniA8A4 +ENCODING 43172 +BBX 9 9 0 1 +BITMAP +6300 +9480 +A080 +8080 +6080 +8080 +8080 +8100 +7E00 +ENDCHAR +STARTCHAR uniA8A5 +ENCODING 43173 +BBX 9 9 0 1 +BITMAP +3D00 +4280 +8300 +8200 +8200 +A200 +5200 +5200 +2200 +ENDCHAR +STARTCHAR uniA8A6 +ENCODING 43174 +BBX 9 9 0 1 +BITMAP +4300 +A080 +1080 +1100 +2100 +2200 +4200 +4400 +3800 +ENDCHAR +STARTCHAR uniA8A7 +ENCODING 43175 +BBX 9 9 0 1 +BITMAP +1800 +2580 +4380 +4200 +8400 +9480 +8880 +4100 +3E00 +ENDCHAR +STARTCHAR uniA8A8 +ENCODING 43176 +BBX 9 9 0 1 +BITMAP +B600 +B900 +6100 +0200 +7C00 +8100 +8080 +8080 +7F00 +ENDCHAR +STARTCHAR uniA8A9 +ENCODING 43177 +BBX 10 9 0 1 +BITMAP +4D80 +9240 +9240 +9040 +9040 +9040 +9040 +9040 +6180 +ENDCHAR +STARTCHAR uniA8AA +ENCODING 43178 +BBX 9 9 0 1 +BITMAP +6C80 +9280 +9280 +4480 +1880 +6080 +8080 +B880 +4700 +ENDCHAR +STARTCHAR uniA8AB +ENCODING 43179 +BBX 9 9 0 1 +BITMAP +4300 +A080 +5080 +1100 +2100 +2200 +4200 +4400 +3800 +ENDCHAR +STARTCHAR uniA8AC +ENCODING 43180 +BBX 9 9 0 1 +BITMAP +F780 +1400 +1200 +2200 +2100 +4100 +4080 +F880 +C700 +ENDCHAR +STARTCHAR uniA8AD +ENCODING 43181 +BBX 9 9 0 1 +BITMAP +7700 +8880 +8880 +8080 +8080 +8080 +8080 +8080 +6300 +ENDCHAR +STARTCHAR uniA8AE +ENCODING 43182 +BBX 9 9 0 1 +BITMAP +E300 +8080 +4100 +2200 +1400 +0800 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uniA8AF +ENCODING 43183 +BBX 9 9 0 1 +BITMAP +3900 +4480 +8480 +9480 +A880 +9480 +8480 +8480 +6300 +ENDCHAR +STARTCHAR uniA8B0 +ENCODING 43184 +BBX 9 9 0 1 +BITMAP +6100 +9280 +D280 +A100 +8280 +8280 +8480 +4480 +3900 +ENDCHAR +STARTCHAR uniA8B1 +ENCODING 43185 +BBX 9 9 0 1 +BITMAP +4880 +B500 +9900 +9100 +8880 +8880 +8480 +8480 +8300 +ENDCHAR +STARTCHAR uniA8B2 +ENCODING 43186 +BBX 9 9 0 1 +BITMAP +FF00 +1000 +2000 +7100 +A880 +9080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA8B3 +ENCODING 43187 +BBX 9 9 0 1 +BITMAP +6B00 +9480 +9480 +8080 +8080 +8080 +8080 +8100 +6600 +ENDCHAR +STARTCHAR uniA8B4 +ENCODING 43188 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 9 -5 1 +BITMAP +90 +90 +90 +90 +70 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniA8B5 +ENCODING 43189 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 9 -6 1 +BITMAP +B8 +48 +50 +10 +20 +20 +40 +40 +30 +ENDCHAR +STARTCHAR uniA8B6 +ENCODING 43190 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 11 +BITMAP +78 +84 +48 +ENDCHAR +STARTCHAR uniA8B7 +ENCODING 43191 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 13 -8 1 +BITMAP +70 +88 +08 +08 +08 +08 +08 +08 +08 +08 +08 +0A +04 +ENDCHAR +STARTCHAR uniA8B8 +ENCODING 43192 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 9 -7 1 +BITMAP +88 +54 +74 +68 +20 +50 +50 +50 +20 +ENDCHAR +STARTCHAR uniA8B9 +ENCODING 43193 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 10 -7 1 +BITMAP +10 +A0 +68 +74 +68 +20 +50 +50 +50 +20 +ENDCHAR +STARTCHAR uniA8BA +ENCODING 43194 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 9 -6 1 +BITMAP +70 +A8 +90 +80 +70 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uniA8BB +ENCODING 43195 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -7 -2 +BITMAP +38 +54 +48 +40 +38 +04 +04 +44 +38 +80 +78 +04 +ENDCHAR +STARTCHAR uniA8BC +ENCODING 43196 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 9 -9 1 +BITMAP +6E +91 +91 +91 +93 +95 +95 +95 +52 +ENDCHAR +STARTCHAR uniA8BD +ENCODING 43197 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 12 -10 -2 +BITMAP +3700 +4880 +4880 +4880 +4980 +4A80 +4A80 +4A80 +2900 +8000 +7C00 +0200 +ENDCHAR +STARTCHAR uniA8BE +ENCODING 43198 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 9 -5 1 +BITMAP +60 +90 +90 +B0 +50 +10 +10 +20 +40 +ENDCHAR +STARTCHAR uniA8BF +ENCODING 43199 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 9 -6 1 +BITMAP +F8 +88 +50 +10 +20 +20 +48 +48 +30 +ENDCHAR +STARTCHAR uniA8C0 +ENCODING 43200 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 9 -6 1 +BITMAP +60 +90 +98 +68 +08 +08 +28 +58 +30 +ENDCHAR +STARTCHAR uniA8C1 +ENCODING 43201 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 9 -6 1 +BITMAP +F8 +88 +48 +10 +E0 +20 +20 +28 +10 +ENDCHAR +STARTCHAR uniA8C2 +ENCODING 43202 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 9 -7 1 +BITMAP +FC +8C +54 +14 +E4 +14 +14 +14 +08 +ENDCHAR +STARTCHAR uniA8C3 +ENCODING 43203 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 9 -8 1 +BITMAP +E4 +9A +1A +1C +18 +18 +38 +5A +24 +ENDCHAR +STARTCHAR uniA8C4 +ENCODING 43204 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 -2 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uniA8C5 +ENCODING 43205 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 -5 7 +BITMAP +20 +50 +50 +20 +88 +70 +ENDCHAR +STARTCHAR uniA8CE +ENCODING 43214 +BBX 1 9 8 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA8CF +ENCODING 43215 +BBX 4 9 6 1 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uniA8D0 +ENCODING 43216 +BBX 8 9 4 1 +BITMAP +3C +42 +81 +81 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uniA8D1 +ENCODING 43217 +BBX 5 9 6 1 +BITMAP +70 +88 +88 +70 +10 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uniA8D2 +ENCODING 43218 +BBX 8 9 4 1 +BITMAP +7C +82 +02 +22 +1C +10 +08 +04 +03 +ENDCHAR +STARTCHAR uniA8D3 +ENCODING 43219 +BBX 6 9 4 1 +BITMAP +38 +44 +04 +18 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uniA8D4 +ENCODING 43220 +BBX 5 9 6 1 +BITMAP +50 +88 +88 +50 +20 +50 +88 +88 +70 +ENDCHAR +STARTCHAR uniA8D5 +ENCODING 43221 +BBX 9 9 4 1 +BITMAP +6200 +8200 +8400 +8700 +7880 +0880 +1080 +1080 +1100 +ENDCHAR +STARTCHAR uniA8D6 +ENCODING 43222 +BBX 6 9 5 1 +BITMAP +78 +84 +80 +60 +40 +80 +80 +48 +30 +ENDCHAR +STARTCHAR uniA8D7 +ENCODING 43223 +BBX 6 9 5 1 +BITMAP +48 +94 +94 +8C +84 +44 +48 +28 +10 +ENDCHAR +STARTCHAR uniA8D8 +ENCODING 43224 +BBX 6 9 5 1 +BITMAP +20 +50 +48 +88 +84 +C4 +A4 +A4 +48 +ENDCHAR +STARTCHAR uniA8D9 +ENCODING 43225 +BBX 7 9 4 1 +BITMAP +80 +40 +40 +44 +88 +94 +82 +42 +3C +ENDCHAR +STARTCHAR uniA8E0 +ENCODING 43232 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -10 9 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uniA8E1 +ENCODING 43233 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -10 8 +BITMAP +60 +90 +60 +C0 +20 +10 +ENDCHAR +STARTCHAR uniA8E2 +ENCODING 43234 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -10 8 +BITMAP +60 +90 +20 +40 +20 +10 +ENDCHAR +STARTCHAR uniA8E3 +ENCODING 43235 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -9 7 +BITMAP +C0 +20 +C0 +20 +C0 +20 +10 +ENDCHAR +STARTCHAR uniA8E4 +ENCODING 43236 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -11 8 +BITMAP +88 +50 +20 +50 +20 +ENDCHAR +STARTCHAR uniA8E5 +ENCODING 43237 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 9 -9 5 +BITMAP +80 +80 +90 +70 +10 +08 +08 +04 +04 +ENDCHAR +STARTCHAR uniA8E6 +ENCODING 43238 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -9 7 +BITMAP +60 +80 +60 +80 +70 +10 +08 +ENDCHAR +STARTCHAR uniA8E7 +ENCODING 43239 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -11 9 +BITMAP +88 +94 +8C +44 +38 +ENDCHAR +STARTCHAR uniA8E8 +ENCODING 43240 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -9 9 +BITMAP +20 +40 +80 +90 +60 +ENDCHAR +STARTCHAR uniA8E9 +ENCODING 43241 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -9 8 +BITMAP +60 +90 +60 +20 +10 +10 +ENDCHAR +STARTCHAR uniA8EA +ENCODING 43242 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 5 -14 9 +BITMAP +7380 +0900 +3100 +8F00 +7100 +ENDCHAR +STARTCHAR uniA8EB +ENCODING 43243 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -11 9 +BITMAP +FC +08 +90 +48 +30 +ENDCHAR +STARTCHAR uniA8EC +ENCODING 43244 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 6 -12 8 +BITMAP +FF +08 +38 +4E +39 +09 +ENDCHAR +STARTCHAR uniA8ED +ENCODING 43245 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 -11 7 +BITMAP +FC +08 +78 +88 +08 +08 +08 +ENDCHAR +STARTCHAR uniA8EE +ENCODING 43246 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -12 8 +BITMAP +FC +48 +48 +38 +08 +08 +ENDCHAR +STARTCHAR uniA8EF +ENCODING 43247 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -11 8 +BITMAP +FC +10 +30 +20 +10 +08 +ENDCHAR +STARTCHAR uniA8F0 +ENCODING 43248 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -12 7 +BITMAP +30 +40 +FE +4C +54 +4C +44 +ENDCHAR +STARTCHAR uniA8F1 +ENCODING 43249 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -9 9 +BITMAP +38 +40 +20 +90 +60 +ENDCHAR +STARTCHAR uniA8F2 +ENCODING 43250 +BBX 8 4 4 6 +BITMAP +89 +41 +31 +0E +ENDCHAR +STARTCHAR uniA8F3 +ENCODING 43251 +BBX 9 10 4 0 +BITMAP +8900 +4100 +3100 +0E00 +0000 +0E00 +0100 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uniA8F4 +ENCODING 43252 +BBX 8 12 5 -2 +BITMAP +8A +62 +1C +00 +8A +62 +1C +00 +0C +02 +01 +01 +ENDCHAR +STARTCHAR uniA8F5 +ENCODING 43253 +BBX 9 11 4 -1 +BITMAP +8900 +4100 +3100 +0E00 +0000 +0E00 +0100 +0100 +0600 +0100 +0080 +ENDCHAR +STARTCHAR uniA8F6 +ENCODING 43254 +BBX 8 12 4 -2 +BITMAP +89 +41 +31 +0E +00 +0E +01 +0E +01 +0E +04 +02 +ENDCHAR +STARTCHAR uniA8F7 +ENCODING 43255 +BBX 8 10 4 0 +BITMAP +89 +41 +31 +0E +00 +0E +10 +08 +24 +18 +ENDCHAR +STARTCHAR uniA8F8 +ENCODING 43256 +BBX 10 9 4 1 +BITMAP +7180 +8240 +8240 +7140 +80C0 +8040 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA8F9 +ENCODING 43257 +BBX 10 9 4 1 +BITMAP +0380 +0440 +0040 +0040 +7040 +8040 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniA8FA +ENCODING 43258 +BBX 5 3 6 9 +BITMAP +88 +50 +20 +ENDCHAR +STARTCHAR uniA8FB +ENCODING 43259 +BBX 16 1 0 10 +BITMAP +FFFF +ENDCHAR +STARTCHAR uniA8FC +ENCODING 43260 +BBX 14 8 1 0 +BITMAP +00F0 +0118 +C1CC +31CC +180C +0C18 +07F0 +03E0 +ENDCHAR +STARTCHAR uniA8FD +ENCODING 43261 +BBX 13 15 1 -2 +BITMAP +4A70 +22C8 +1CC8 +00C0 +3FC0 +00C0 +00C0 +3FC0 +30C0 +30C0 +10C0 +00C0 +80C0 +60C0 +1F00 +ENDCHAR +STARTCHAR uniA8FE +ENCODING 43262 +BBX 16 16 0 -2 +BITMAP +13E0 +0810 +07F8 +FFFF +0C30 +0C30 +0C30 +0C30 +0C60 +0400 +0200 +0180 +0060 +0010 +0018 +0018 +ENDCHAR +STARTCHAR uniA8FF +ENCODING 43263 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 3 -13 11 +BITMAP +9F00 +4080 +3FC0 +ENDCHAR +STARTCHAR uniA900 +ENCODING 43264 +BBX 12 9 2 1 +BITMAP +7FE0 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +7FE0 +ENDCHAR +STARTCHAR uniA901 +ENCODING 43265 +BBX 12 9 2 1 +BITMAP +FFF0 +0010 +0010 +7FF0 +8010 +8000 +80F0 +8110 +7FE0 +ENDCHAR +STARTCHAR uniA902 +ENCODING 43266 +BBX 9 9 3 1 +BITMAP +8080 +8080 +4100 +4100 +2200 +2200 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uniA903 +ENCODING 43267 +BBX 9 9 4 1 +BITMAP +FF80 +8100 +8200 +0400 +0800 +1180 +2280 +4480 +7F00 +ENDCHAR +STARTCHAR uniA904 +ENCODING 43268 +BBX 9 9 3 1 +BITMAP +8380 +8C80 +B080 +C080 +8080 +8080 +0080 +0080 +0300 +ENDCHAR +STARTCHAR uniA905 +ENCODING 43269 +BBX 10 9 3 1 +BITMAP +FFC0 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +E000 +ENDCHAR +STARTCHAR uniA906 +ENCODING 43270 +BBX 10 9 3 1 +BITMAP +80C0 +8340 +8C40 +B040 +C040 +81C0 +8240 +8240 +8180 +ENDCHAR +STARTCHAR uniA907 +ENCODING 43271 +BBX 10 9 3 1 +BITMAP +01C0 +0040 +8040 +8040 +8040 +8040 +8040 +8040 +7F80 +ENDCHAR +STARTCHAR uniA908 +ENCODING 43272 +BBX 10 9 3 1 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8040 +8040 +FFC0 +ENDCHAR +STARTCHAR uniA909 +ENCODING 43273 +BBX 11 9 3 1 +BITMAP +E000 +8000 +8000 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uniA90A +ENCODING 43274 +BBX 11 9 2 1 +BITMAP +F1E0 +1220 +1420 +1820 +3020 +5020 +9020 +9020 +E020 +ENDCHAR +STARTCHAR uniA90B +ENCODING 43275 +BBX 12 9 2 1 +BITMAP +7FE0 +8010 +8010 +8010 +FFF0 +0010 +0010 +8010 +7FE0 +ENDCHAR +STARTCHAR uniA90C +ENCODING 43276 +BBX 9 9 3 1 +BITMAP +8F80 +9080 +A080 +C080 +FF80 +8080 +8080 +8080 +8080 +ENDCHAR +STARTCHAR uniA90D +ENCODING 43277 +BBX 12 9 2 1 +BITMAP +7FE0 +8010 +8010 +8000 +8000 +8000 +8010 +8010 +7FE0 +ENDCHAR +STARTCHAR uniA90E +ENCODING 43278 +BBX 11 9 2 1 +BITMAP +3FC0 +4020 +4020 +2C20 +1220 +2C20 +4020 +8020 +F820 +ENDCHAR +STARTCHAR uniA90F +ENCODING 43279 +BBX 10 9 3 1 +BITMAP +FFC0 +0040 +0040 +1C40 +1240 +1140 +1140 +10C0 +6040 +ENDCHAR +STARTCHAR uniA910 +ENCODING 43280 +BBX 9 9 3 1 +BITMAP +8300 +8C80 +B080 +C100 +8200 +8100 +8080 +8380 +8000 +ENDCHAR +STARTCHAR uniA911 +ENCODING 43281 +BBX 12 9 2 1 +BITMAP +7FE0 +8010 +0010 +0010 +8010 +FFE0 +8000 +8010 +7FE0 +ENDCHAR +STARTCHAR uniA912 +ENCODING 43282 +BBX 8 9 4 1 +BITMAP +C0 +B0 +8C +83 +98 +A4 +CC +94 +88 +ENDCHAR +STARTCHAR uniA913 +ENCODING 43283 +BBX 10 9 3 1 +BITMAP +0040 +0040 +0040 +81C0 +8040 +8040 +8040 +8040 +7F80 +ENDCHAR +STARTCHAR uniA914 +ENCODING 43284 +BBX 10 9 3 1 +BITMAP +7F80 +8040 +7800 +0780 +C040 +8040 +FF80 +8000 +7C00 +ENDCHAR +STARTCHAR uniA915 +ENCODING 43285 +BBX 12 9 2 1 +BITMAP +7FE0 +8010 +8060 +8180 +8600 +9800 +E010 +8010 +7FE0 +ENDCHAR +STARTCHAR uniA916 +ENCODING 43286 +BBX 9 9 3 1 +BITMAP +7E00 +8100 +8100 +8000 +9F00 +A100 +C100 +8100 +8080 +ENDCHAR +STARTCHAR uniA917 +ENCODING 43287 +BBX 11 9 2 1 +BITMAP +8020 +8020 +8020 +8420 +8A20 +9120 +A0A0 +C060 +7FC0 +ENDCHAR +STARTCHAR uniA918 +ENCODING 43288 +BBX 9 9 4 1 +BITMAP +FF80 +0100 +0200 +0400 +0800 +1180 +2280 +4480 +7F00 +ENDCHAR +STARTCHAR uniA919 +ENCODING 43289 +BBX 8 9 4 1 +BITMAP +8F +91 +A1 +C1 +81 +87 +89 +89 +86 +ENDCHAR +STARTCHAR uniA91A +ENCODING 43290 +BBX 8 12 4 -2 +BITMAP +8F +91 +A1 +C1 +81 +81 +81 +81 +81 +01 +01 +06 +ENDCHAR +STARTCHAR uniA91B +ENCODING 43291 +BBX 11 9 2 1 +BITMAP +83C0 +8420 +8420 +8420 +8420 +8420 +8420 +8420 +7820 +ENDCHAR +STARTCHAR uniA91C +ENCODING 43292 +BBX 11 9 2 1 +BITMAP +83C0 +8420 +8420 +8420 +8420 +7820 +0020 +8020 +7FC0 +ENDCHAR +STARTCHAR uniA91D +ENCODING 43293 +BBX 10 9 3 1 +BITMAP +8000 +8000 +8000 +E040 +8040 +8040 +8040 +8040 +7F80 +ENDCHAR +STARTCHAR uniA91E +ENCODING 43294 +BBX 12 9 2 1 +BITMAP +7FE0 +8010 +8000 +8000 +8010 +7FF0 +0010 +8010 +7FE0 +ENDCHAR +STARTCHAR uniA91F +ENCODING 43295 +BBX 9 9 3 1 +BITMAP +7080 +9080 +A080 +C180 +8280 +FC80 +0080 +0080 +0300 +ENDCHAR +STARTCHAR uniA920 +ENCODING 43296 +BBX 13 9 1 1 +BITMAP +C018 +B068 +8D88 +8208 +0008 +0008 +8008 +8008 +7FF0 +ENDCHAR +STARTCHAR uniA921 +ENCODING 43297 +BBX 10 9 3 1 +BITMAP +7F80 +8040 +8040 +0040 +C040 +B040 +8C40 +8340 +80C0 +ENDCHAR +STARTCHAR uniA922 +ENCODING 43298 +BBX 12 9 2 1 +BITMAP +7FE0 +8010 +8010 +8000 +7800 +8000 +8010 +8010 +7FE0 +ENDCHAR +STARTCHAR uniA923 +ENCODING 43299 +BBX 10 9 3 1 +BITMAP +8040 +8040 +8040 +8040 +80C0 +8140 +8640 +9840 +E040 +ENDCHAR +STARTCHAR uniA924 +ENCODING 43300 +BBX 12 9 2 1 +BITMAP +7FE0 +8030 +80D0 +0110 +0610 +0810 +3010 +C010 +7FE0 +ENDCHAR +STARTCHAR uniA925 +ENCODING 43301 +BBX 12 9 2 1 +BITMAP +7FE0 +8010 +C030 +B0D0 +8F10 +8010 +8010 +8010 +7FE0 +ENDCHAR +STARTCHAR uniA926 +ENCODING 43302 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -9 12 +BITMAP +80 +ENDCHAR +STARTCHAR uniA927 +ENCODING 43303 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -12 11 +BITMAP +C0 +30 +0C +ENDCHAR +STARTCHAR uniA928 +ENCODING 43304 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 3 -13 11 +BITMAP +0800 +3600 +C180 +ENDCHAR +STARTCHAR uniA929 +ENCODING 43305 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -12 11 +BITMAP +82 +82 +7C +ENDCHAR +STARTCHAR uniA92A +ENCODING 43306 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -12 11 +BITMAP +92 +82 +7C +ENDCHAR +STARTCHAR uniA92B +ENCODING 43307 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -9 -1 +BITMAP +80 +ENDCHAR +STARTCHAR uniA92C +ENCODING 43308 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -13 -2 +BITMAP +40 +81 +7E +ENDCHAR +STARTCHAR uniA92D +ENCODING 43309 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -13 -2 +BITMAP +48 +81 +7E +ENDCHAR +STARTCHAR uniA92E +ENCODING 43310 +BBX 10 3 3 4 +BITMAP +1E00 +6180 +8040 +ENDCHAR +STARTCHAR uniA92F +ENCODING 43311 +BBX 1 9 8 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA930 +ENCODING 43312 +BBX 8 9 3 1 +BITMAP +08 +14 +12 +29 +24 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uniA931 +ENCODING 43313 +BBX 8 9 3 1 +BITMAP +08 +14 +12 +21 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uniA932 +ENCODING 43314 +BBX 13 9 1 1 +BITMAP +0888 +1510 +1510 +2220 +2220 +4540 +4540 +8880 +8880 +ENDCHAR +STARTCHAR uniA933 +ENCODING 43315 +BBX 8 9 3 1 +BITMAP +08 +14 +12 +31 +2A +44 +40 +80 +80 +ENDCHAR +STARTCHAR uniA934 +ENCODING 43316 +BBX 9 9 3 1 +BITMAP +0C00 +1200 +1100 +3080 +2A00 +4500 +4000 +8000 +8000 +ENDCHAR +STARTCHAR uniA935 +ENCODING 43317 +BBX 12 9 2 1 +BITMAP +0C30 +1450 +1450 +2490 +2490 +4510 +4510 +8610 +8610 +ENDCHAR +STARTCHAR uniA936 +ENCODING 43318 +BBX 8 9 4 1 +BITMAP +01 +01 +02 +02 +04 +84 +48 +28 +10 +ENDCHAR +STARTCHAR uniA937 +ENCODING 43319 +BBX 9 9 3 1 +BITMAP +0080 +0100 +0200 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uniA938 +ENCODING 43320 +BBX 11 9 2 1 +BITMAP +1100 +1100 +0A00 +0A00 +0400 +8420 +4A40 +2A80 +1100 +ENDCHAR +STARTCHAR uniA939 +ENCODING 43321 +BBX 9 9 4 1 +BITMAP +0800 +1400 +1200 +2900 +2480 +6200 +5100 +8A00 +8400 +ENDCHAR +STARTCHAR uniA93A +ENCODING 43322 +BBX 13 9 1 1 +BITMAP +0840 +14A0 +1290 +2908 +2500 +4200 +4000 +8000 +8000 +ENDCHAR +STARTCHAR uniA93B +ENCODING 43323 +BBX 13 9 1 1 +BITMAP +0888 +1550 +1550 +2220 +2000 +4000 +4000 +8000 +8000 +ENDCHAR +STARTCHAR uniA93C +ENCODING 43324 +BBX 12 9 2 1 +BITMAP +0840 +14A0 +1390 +2100 +2100 +4200 +4200 +8400 +8400 +ENDCHAR +STARTCHAR uniA93D +ENCODING 43325 +BBX 12 9 2 1 +BITMAP +0840 +14A0 +1390 +2100 +2100 +4200 +6200 +9400 +8C00 +ENDCHAR +STARTCHAR uniA93E +ENCODING 43326 +BBX 10 9 3 1 +BITMAP +0C40 +1440 +1480 +2480 +2500 +4500 +4600 +8600 +8400 +ENDCHAR +STARTCHAR uniA93F +ENCODING 43327 +BBX 13 9 1 1 +BITMAP +8008 +8008 +4010 +4010 +2020 +2220 +1540 +1540 +0880 +ENDCHAR +STARTCHAR uniA940 +ENCODING 43328 +BBX 10 9 2 1 +BITMAP +0840 +1480 +1380 +2100 +2100 +4200 +4200 +8400 +8400 +ENDCHAR +STARTCHAR uniA941 +ENCODING 43329 +BBX 11 9 2 1 +BITMAP +0100 +0280 +0240 +0420 +0400 +8800 +4800 +3000 +1000 +ENDCHAR +STARTCHAR uniA942 +ENCODING 43330 +BBX 10 9 3 1 +BITMAP +0840 +1080 +1080 +2100 +2100 +4200 +6200 +9400 +8C00 +ENDCHAR +STARTCHAR uniA943 +ENCODING 43331 +BBX 11 10 3 1 +BITMAP +0400 +0A00 +1100 +1100 +2080 +2480 +4A40 +4A40 +9120 +9120 +ENDCHAR +STARTCHAR uniA944 +ENCODING 43332 +BBX 12 9 2 1 +BITMAP +3510 +5510 +5210 +5220 +5520 +5520 +98A0 +98A0 +9040 +ENDCHAR +STARTCHAR uniA945 +ENCODING 43333 +BBX 13 9 1 1 +BITMAP +0888 +1550 +1550 +2220 +2200 +4400 +6400 +9800 +8800 +ENDCHAR +STARTCHAR uniA946 +ENCODING 43334 +BBX 9 9 3 1 +BITMAP +0880 +1500 +1500 +2200 +3000 +5000 +4800 +8800 +8000 +ENDCHAR +STARTCHAR uniA947 +ENCODING 43335 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -16 4 +BITMAP +80 +ENDCHAR +STARTCHAR uniA948 +ENCODING 43336 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -16 0 +BITMAP +80 +ENDCHAR +STARTCHAR uniA949 +ENCODING 43337 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 4 -16 3 +BITMAP +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniA94A +ENCODING 43338 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -6 11 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uniA94B +ENCODING 43339 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 8 -16 -1 +BITMAP +80 +80 +80 +80 +00 +00 +00 +80 +ENDCHAR +STARTCHAR uniA94C +ENCODING 43340 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -16 -2 +BITMAP +80 +80 +60 +ENDCHAR +STARTCHAR uniA94D +ENCODING 43341 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -16 -2 +BITMAP +A0 +A0 +A0 +ENDCHAR +STARTCHAR uniA94E +ENCODING 43342 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -4 -2 +BITMAP +A0 +A0 +A0 +ENDCHAR +STARTCHAR uniA94F +ENCODING 43343 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -3 12 +BITMAP +40 +80 +ENDCHAR +STARTCHAR uniA950 +ENCODING 43344 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -6 12 +BITMAP +48 +90 +ENDCHAR +STARTCHAR uniA951 +ENCODING 43345 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -6 11 +BITMAP +88 +50 +20 +ENDCHAR +STARTCHAR uniA952 +ENCODING 43346 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -2 -2 +BITMAP +80 +00 +80 +ENDCHAR +STARTCHAR uniA953 +ENCODING 43347 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -4 11 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uniA95F +ENCODING 43359 +BBX 10 10 3 0 +BITMAP +0400 +4980 +4A00 +2C00 +9380 +7240 +0D00 +1480 +6480 +0800 +ENDCHAR +STARTCHAR uniA960 +ENCODING 43360 +BBX 12 5 2 8 +BITMAP +F9F0 +8110 +8110 +8110 +F9F0 +ENDCHAR +STARTCHAR uniA961 +ENCODING 43361 +BBX 12 5 2 8 +BITMAP +F910 +8110 +81F0 +8110 +F9F0 +ENDCHAR +STARTCHAR uniA962 +ENCODING 43362 +BBX 12 5 2 8 +BITMAP +F840 +8040 +8040 +80A0 +F910 +ENDCHAR +STARTCHAR uniA963 +ENCODING 43363 +BBX 12 5 2 8 +BITMAP +F9F0 +8020 +8040 +80A0 +F910 +ENDCHAR +STARTCHAR uniA964 +ENCODING 43364 +BBX 12 5 1 8 +BITMAP +F9F0 +0810 +F810 +8010 +F810 +ENDCHAR +STARTCHAR uniA965 +ENCODING 43365 +BBX 12 5 2 8 +BITMAP +F770 +1110 +F110 +8110 +F110 +ENDCHAR +STARTCHAR uniA966 +ENCODING 43366 +BBX 12 5 2 8 +BITMAP +F9F0 +0900 +F900 +8100 +F9F0 +ENDCHAR +STARTCHAR uniA967 +ENCODING 43367 +BBX 12 5 2 8 +BITMAP +F770 +1440 +F440 +8440 +F770 +ENDCHAR +STARTCHAR uniA968 +ENCODING 43368 +BBX 12 5 2 8 +BITMAP +F9F0 +0910 +F910 +8110 +F9F0 +ENDCHAR +STARTCHAR uniA969 +ENCODING 43369 +BBX 12 5 2 8 +BITMAP +F910 +0910 +F9F0 +8110 +F9F0 +ENDCHAR +STARTCHAR uniA96A +ENCODING 43370 +BBX 12 5 2 8 +BITMAP +F550 +1550 +F770 +8550 +F770 +ENDCHAR +STARTCHAR uniA96B +ENCODING 43371 +BBX 12 7 2 7 +BITMAP +0110 +F9F0 +0910 +F9F0 +80E0 +F910 +00E0 +ENDCHAR +STARTCHAR uniA96C +ENCODING 43372 +BBX 12 5 2 8 +BITMAP +F840 +0840 +F840 +80A0 +F910 +ENDCHAR +STARTCHAR uniA96D +ENCODING 43373 +BBX 12 5 2 8 +BITMAP +F9F0 +0820 +F840 +80A0 +F910 +ENDCHAR +STARTCHAR uniA96E +ENCODING 43374 +BBX 12 5 2 8 +BITMAP +F9F0 +0810 +F9F0 +8010 +F810 +ENDCHAR +STARTCHAR uniA96F +ENCODING 43375 +BBX 12 5 2 8 +BITMAP +F9F0 +8810 +8810 +8810 +F810 +ENDCHAR +STARTCHAR uniA970 +ENCODING 43376 +BBX 12 5 2 8 +BITMAP +F9F0 +8900 +8900 +8900 +F9F0 +ENDCHAR +STARTCHAR uniA971 +ENCODING 43377 +BBX 12 5 2 8 +BITMAP +F840 +8840 +8840 +88A0 +F910 +ENDCHAR +STARTCHAR uniA972 +ENCODING 43378 +BBX 12 5 2 8 +BITMAP +A4F0 +A480 +E4F0 +AA80 +F1F0 +ENDCHAR +STARTCHAR uniA973 +ENCODING 43379 +BBX 12 5 2 8 +BITMAP +89F0 +8810 +F9F0 +8810 +F810 +ENDCHAR +STARTCHAR uniA974 +ENCODING 43380 +BBX 12 5 2 8 +BITMAP +88C0 +8BF0 +F8C0 +8920 +F8C0 +ENDCHAR +STARTCHAR uniA975 +ENCODING 43381 +BBX 13 5 2 8 +BITMAP +2248 +2248 +2278 +5548 +88F8 +ENDCHAR +STARTCHAR uniA976 +ENCODING 43382 +BBX 12 5 3 8 +BITMAP +71F0 +8810 +89F0 +8900 +71F0 +ENDCHAR +STARTCHAR uniA977 +ENCODING 43383 +BBX 12 5 2 8 +BITMAP +70C0 +8BF0 +88C0 +8920 +70C0 +ENDCHAR +STARTCHAR uniA978 +ENCODING 43384 +BBX 14 5 2 8 +BITMAP +FFB0 +11FC +2230 +5548 +88B0 +ENDCHAR +STARTCHAR uniA979 +ENCODING 43385 +BBX 12 5 2 8 +BITMAP +F9F0 +8100 +F9F0 +8100 +F9F0 +ENDCHAR +STARTCHAR uniA97A +ENCODING 43386 +BBX 12 5 2 8 +BITMAP +F8C0 +53F0 +50C0 +5120 +F8C0 +ENDCHAR +STARTCHAR uniA97B +ENCODING 43387 +BBX 12 5 2 8 +BITMAP +3040 +FC40 +3040 +48A0 +3110 +ENDCHAR +STARTCHAR uniA97C +ENCODING 43388 +BBX 12 5 2 8 +BITMAP +FBF0 +0000 +30C0 +4920 +30C0 +ENDCHAR +STARTCHAR uniA980 +ENCODING 43392 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 3 -13 11 +BITMAP +8C40 +5280 +3F00 +ENDCHAR +STARTCHAR uniA981 +ENCODING 43393 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 -10 12 +BITMAP +90 +E0 +ENDCHAR +STARTCHAR uniA982 +ENCODING 43394 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -10 10 +BITMAP +10 +20 +40 +80 +ENDCHAR +STARTCHAR uniA983 +ENCODING 43395 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 12 -4 -2 +BITMAP +60 +90 +90 +50 +20 +60 +10 +10 +10 +10 +10 +20 +ENDCHAR +STARTCHAR uniA984 +ENCODING 43396 +BBX 15 9 0 1 +BITMAP +3000 +4000 +8000 +B03C +88A4 +B0FE +8824 +89A4 +7264 +ENDCHAR +STARTCHAR uniA985 +ENCODING 43397 +BBX 13 12 1 -2 +BITMAP +71B0 +8A48 +8A48 +8808 +8808 +8808 +8A08 +4908 +4F08 +0300 +04C0 +0020 +ENDCHAR +STARTCHAR uniA986 +ENCODING 43398 +BBX 13 12 1 -2 +BITMAP +4510 +AAA8 +AAA8 +A0A8 +A0A8 +A0A8 +A8A8 +A4A8 +BCE8 +0C00 +1300 +0080 +ENDCHAR +STARTCHAR uniA987 +ENCODING 43399 +BBX 13 12 1 -2 +BITMAP +4510 +AAA8 +AAA8 +A0A8 +A0A8 +A0A8 +A8A8 +B0A8 +B6E8 +0800 +0400 +1800 +ENDCHAR +STARTCHAR uniA988 +ENCODING 43400 +BBX 14 12 1 -2 +BITMAP +71B0 +8A48 +8A48 +8808 +8808 +8808 +8A08 +4908 +4F10 +0060 +008C +00F0 +ENDCHAR +STARTCHAR uniA989 +ENCODING 43401 +BBX 10 12 1 -2 +BITMAP +6180 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9C40 +0800 +1E00 +0100 +ENDCHAR +STARTCHAR uniA98A +ENCODING 43402 +BBX 13 12 1 -2 +BITMAP +6360 +9490 +9490 +9010 +9410 +9238 +9E50 +0090 +0F10 +1010 +1310 +0CE0 +ENDCHAR +STARTCHAR uniA98B +ENCODING 43403 +BBX 14 12 1 -2 +BITMAP +6360 +9490 +9490 +9010 +9418 +9234 +9E54 +0098 +0F14 +1014 +1318 +0CE0 +ENDCHAR +STARTCHAR uniA98C +ENCODING 43404 +BBX 10 6 3 1 +BITMAP +3C00 +5200 +8C00 +8000 +8380 +7C40 +ENDCHAR +STARTCHAR uniA98D +ENCODING 43405 +BBX 10 12 3 1 +BITMAP +1800 +2000 +1C00 +0200 +0C00 +0000 +3C00 +5200 +8C00 +8000 +8380 +7C40 +ENDCHAR +STARTCHAR uniA98E +ENCODING 43406 +BBX 13 12 0 -2 +BITMAP +39C0 +4920 +9090 +9090 +9090 +9090 +4F20 +0040 +0380 +0438 +09C0 +0E00 +ENDCHAR +STARTCHAR uniA98F +ENCODING 43407 +BBX 13 10 1 0 +BITMAP +4710 +A8A8 +A8A8 +A8A8 +A8A8 +A8A8 +BCA8 +AAA8 +AAE8 +0400 +ENDCHAR +STARTCHAR uniA990 +ENCODING 43408 +BBX 13 12 1 -2 +BITMAP +4710 +A8A8 +A8A8 +A8A8 +A8A8 +A8A8 +BCA8 +AAA8 +AAE8 +0C00 +1300 +0080 +ENDCHAR +STARTCHAR uniA991 +ENCODING 43409 +BBX 13 10 1 0 +BITMAP +4708 +A890 +A8A0 +A8A0 +A8A0 +A8A0 +BCA0 +AAA0 +AAC0 +0400 +ENDCHAR +STARTCHAR uniA992 +ENCODING 43410 +BBX 12 9 1 1 +BITMAP +6220 +9550 +9550 +9550 +9550 +5550 +1550 +1550 +1DD0 +ENDCHAR +STARTCHAR uniA993 +ENCODING 43411 +BBX 13 9 1 1 +BITMAP +4630 +AA28 +AA28 +AA28 +AA28 +AA28 +AAA8 +AAA8 +B940 +ENDCHAR +STARTCHAR uniA994 +ENCODING 43412 +BBX 13 9 1 1 +BITMAP +71B0 +8A48 +8A48 +8808 +8808 +8808 +8908 +4888 +4F88 +ENDCHAR +STARTCHAR uniA995 +ENCODING 43413 +BBX 12 9 1 1 +BITMAP +70E0 +8890 +8890 +8890 +8890 +9C90 +AA90 +AA90 +9190 +ENDCHAR +STARTCHAR uniA996 +ENCODING 43414 +BBX 15 9 1 1 +BITMAP +2000 +4400 +8A40 +92A4 +94AA +A52C +A94A +AA54 +4420 +ENDCHAR +STARTCHAR uniA997 +ENCODING 43415 +BBX 13 9 1 1 +BITMAP +70F0 +8908 +8A38 +8BC0 +8B80 +8A60 +8A10 +4910 +4F00 +ENDCHAR +STARTCHAR uniA998 +ENCODING 43416 +BBX 13 12 1 -2 +BITMAP +70F0 +8908 +8A38 +8BC0 +8B80 +8A60 +8A10 +4910 +4F00 +0300 +04C0 +0020 +ENDCHAR +STARTCHAR uniA999 +ENCODING 43417 +BBX 15 16 1 -2 +BITMAP +0010 +0028 +0028 +001C +628A +954A +954C +9048 +9448 +9248 +9E48 +0088 +0F08 +1010 +1190 +0E60 +ENDCHAR +STARTCHAR uniA99A +ENCODING 43418 +BBX 15 7 0 3 +BITMAP +457E +AADA +AADA +A0DA +A8DA +A4DA +BCDA +ENDCHAR +STARTCHAR uniA99B +ENCODING 43419 +BBX 12 12 1 -2 +BITMAP +6360 +9490 +9490 +9010 +9010 +9010 +9610 +9910 +8E10 +1080 +1080 +0F00 +ENDCHAR +STARTCHAR uniA99C +ENCODING 43420 +BBX 12 9 1 1 +BITMAP +6360 +9490 +9490 +9010 +9010 +9010 +9310 +9490 +9F10 +ENDCHAR +STARTCHAR uniA99D +ENCODING 43421 +BBX 12 9 0 1 +BITMAP +38F0 +4890 +9050 +9050 +9050 +9050 +9250 +9250 +4D90 +ENDCHAR +STARTCHAR uniA99E +ENCODING 43422 +BBX 10 9 0 1 +BITMAP +3980 +4840 +9040 +9040 +9040 +9040 +9240 +9240 +4D80 +ENDCHAR +STARTCHAR uniA99F +ENCODING 43423 +BBX 13 9 1 1 +BITMAP +4490 +AB68 +AB68 +AB68 +AB68 +6B68 +2B68 +2B68 +3B68 +ENDCHAR +STARTCHAR uniA9A0 +ENCODING 43424 +BBX 13 9 1 1 +BITMAP +4F98 +A868 +A868 +A868 +A668 +A168 +A168 +A168 +BE68 +ENDCHAR +STARTCHAR uniA9A1 +ENCODING 43425 +BBX 12 12 0 -2 +BITMAP +38F0 +4890 +9050 +9050 +9050 +9250 +9550 +9150 +4F90 +0100 +0140 +0080 +ENDCHAR +STARTCHAR uniA9A2 +ENCODING 43426 +BBX 12 9 0 1 +BITMAP +39E0 +4A10 +9210 +9210 +9210 +9210 +9390 +9650 +4990 +ENDCHAR +STARTCHAR uniA9A3 +ENCODING 43427 +BBX 12 9 0 1 +BITMAP +38F0 +4890 +9050 +9050 +9050 +9050 +9250 +9250 +4D90 +ENDCHAR +STARTCHAR uniA9A4 +ENCODING 43428 +BBX 12 9 0 1 +BITMAP +39E0 +4A10 +9210 +9210 +9210 +9F10 +9290 +9290 +5110 +ENDCHAR +STARTCHAR uniA9A5 +ENCODING 43429 +BBX 12 9 1 1 +BITMAP +70E0 +8890 +8890 +8890 +8890 +8890 +8890 +8890 +4710 +ENDCHAR +STARTCHAR uniA9A6 +ENCODING 43430 +BBX 13 9 0 1 +BITMAP +3860 +4890 +9090 +9050 +9020 +9030 +9248 +9248 +4D90 +ENDCHAR +STARTCHAR uniA9A7 +ENCODING 43431 +BBX 14 9 0 1 +BITMAP +629C +9554 +9554 +9054 +9054 +9054 +9454 +9254 +5F64 +ENDCHAR +STARTCHAR uniA9A8 +ENCODING 43432 +BBX 13 9 1 1 +BITMAP +78F0 +4890 +4890 +0880 +9E80 +E9C0 +04B0 +0288 +0180 +ENDCHAR +STARTCHAR uniA9A9 +ENCODING 43433 +BBX 13 9 1 1 +BITMAP +7E30 +9048 +9048 +9048 +8E48 +9048 +9048 +9048 +4F88 +ENDCHAR +STARTCHAR uniA9AA +ENCODING 43434 +BBX 14 9 1 1 +BITMAP +739C +9294 +9294 +9294 +9294 +9294 +9294 +9294 +5C64 +ENDCHAR +STARTCHAR uniA9AB +ENCODING 43435 +BBX 12 9 2 1 +BITMAP +F1E0 +8A10 +4A10 +0A10 +1210 +2210 +7210 +0A10 +0610 +ENDCHAR +STARTCHAR uniA9AC +ENCODING 43436 +BBX 15 13 0 1 +BITMAP +000C +0012 +000E +0002 +6492 +9B6A +9B6A +9B6A +5B6A +1B6A +1B6A +1B6A +1B6E +ENDCHAR +STARTCHAR uniA9AD +ENCODING 43437 +BBX 14 9 0 1 +BITMAP +39DC +4A54 +9254 +9254 +9254 +9254 +9254 +9254 +4E64 +ENDCHAR +STARTCHAR uniA9AE +ENCODING 43438 +BBX 12 9 1 1 +BITMAP +39E0 +4910 +9090 +9090 +9090 +9090 +9090 +9090 +4F10 +ENDCHAR +STARTCHAR uniA9AF +ENCODING 43439 +BBX 14 9 1 1 +BITMAP +4660 +A990 +A990 +A990 +AB90 +6D90 +2FF8 +2994 +3990 +ENDCHAR +STARTCHAR uniA9B0 +ENCODING 43440 +BBX 15 9 0 1 +BITMAP +3878 +4848 +9048 +9148 +9248 +93FC +904A +9048 +4F88 +ENDCHAR +STARTCHAR uniA9B1 +ENCODING 43441 +BBX 14 9 0 1 +BITMAP +3C3C +4424 +8424 +8424 +8424 +8E24 +9524 +9524 +48C4 +ENDCHAR +STARTCHAR uniA9B2 +ENCODING 43442 +BBX 14 9 0 1 +BITMAP +39FC +4964 +9164 +9164 +9164 +9164 +9164 +9164 +4E64 +ENDCHAR +STARTCHAR uniA9B3 +ENCODING 43443 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 4 -14 9 +BITMAP +0900 +0600 +9090 +6060 +ENDCHAR +STARTCHAR uniA9B4 +ENCODING 43444 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 9 -4 1 +BITMAP +60 +90 +90 +10 +20 +20 +40 +50 +70 +ENDCHAR +STARTCHAR uniA9B5 +ENCODING 43445 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -4 2 +BITMAP +40 +40 +20 +20 +10 +90 +60 +ENDCHAR +STARTCHAR uniA9B6 +ENCODING 43446 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -11 8 +BITMAP +3C +42 +82 +82 +8E +72 +ENDCHAR +STARTCHAR uniA9B7 +ENCODING 43447 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -11 8 +BITMAP +3C +42 +A6 +9A +8E +72 +ENDCHAR +STARTCHAR uniA9B8 +ENCODING 43448 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 9 -6 -2 +BITMAP +14 +14 +14 +14 +14 +14 +14 +64 +F8 +ENDCHAR +STARTCHAR uniA9B9 +ENCODING 43449 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 11 -6 -2 +BITMAP +10 +3C +50 +50 +38 +14 +14 +14 +14 +64 +F8 +ENDCHAR +STARTCHAR uniA9BA +ENCODING 43450 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 12 -16 -2 +BITMAP +48 +B4 +B4 +B4 +B4 +B4 +B4 +B4 +34 +04 +04 +03 +ENDCHAR +STARTCHAR uniA9BB +ENCODING 43451 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 16 -16 -2 +BITMAP +18 +20 +10 +08 +30 +00 +48 +B4 +B4 +B4 +B4 +B4 +34 +04 +04 +03 +ENDCHAR +STARTCHAR uniA9BC +ENCODING 43452 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -12 10 +BITMAP +78 +84 +82 +61 +ENDCHAR +STARTCHAR uniA9BD +ENCODING 43453 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 9 -7 -2 +BITMAP +02 +0C +04 +02 +02 +02 +64 +68 +B0 +ENDCHAR +STARTCHAR uniA9BE +ENCODING 43454 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 16 -11 -2 +BITMAP +01C0 +0140 +0140 +0140 +0140 +0140 +0140 +0140 +0140 +0540 +0540 +1940 +6140 +8140 +9940 +6620 +ENDCHAR +STARTCHAR uniA9BF +ENCODING 43455 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 16 -16 -2 +BITMAP +1800 +2000 +4000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8004 +8008 +401C +2002 +1802 +07FC +ENDCHAR +STARTCHAR uniA9C0 +ENCODING 43456 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 16 -11 -2 +BITMAP +01C0 +0140 +0140 +0140 +0140 +0140 +0140 +0140 +0140 +0140 +0140 +6140 +9140 +8140 +9940 +6620 +ENDCHAR +STARTCHAR uniA9C1 +ENCODING 43457 +BBX 14 15 1 -2 +BITMAP +000C +0C14 +0810 +0810 +0410 +C3C0 +8008 +40D4 +3F08 +0020 +0C24 +0844 +0784 +0014 +0018 +ENDCHAR +STARTCHAR uniA9C2 +ENCODING 43458 +BBX 14 15 1 -2 +BITMAP +6000 +A000 +8780 +8840 +90C0 +1000 +43F0 +AC08 +4004 +0F0C +2080 +2040 +2040 +A0C0 +C000 +ENDCHAR +STARTCHAR uniA9C3 +ENCODING 43459 +BBX 16 16 0 -2 +BITMAP +2800 +D586 +C586 +C586 +D586 +F586 +0186 +1D86 +2186 +2F86 +A5E6 +999F +8187 +81C7 +41D7 +3EA9 +ENDCHAR +STARTCHAR uniA9C4 +ENCODING 43460 +BBX 16 16 0 -2 +BITMAP +6800 +D586 +C586 +C586 +D586 +F586 +8186 +9D86 +A186 +AF86 +A5E6 +999F +8187 +81C7 +41D7 +3EA9 +ENDCHAR +STARTCHAR uniA9C5 +ENCODING 43461 +BBX 16 16 0 -2 +BITMAP +3000 +4006 +E806 +D586 +C586 +F586 +8186 +9D86 +A186 +AF86 +A5E6 +999F +8187 +81C7 +41D7 +3EA9 +ENDCHAR +STARTCHAR uniA9C6 +ENCODING 43462 +BBX 5 6 6 3 +BITMAP +70 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA9C7 +ENCODING 43463 +BBX 4 6 6 2 +BITMAP +90 +E0 +00 +00 +90 +E0 +ENDCHAR +STARTCHAR uniA9C8 +ENCODING 43464 +BBX 7 9 3 1 +BITMAP +C0 +20 +10 +08 +04 +04 +02 +1A +06 +ENDCHAR +STARTCHAR uniA9C9 +ENCODING 43465 +BBX 11 9 2 1 +BITMAP +CC00 +2200 +1100 +0880 +0440 +0440 +0220 +1BA0 +0660 +ENDCHAR +STARTCHAR uniA9CA +ENCODING 43466 +BBX 5 12 5 -2 +BITMAP +C0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uniA9CB +ENCODING 43467 +BBX 9 12 3 -2 +BITMAP +CC00 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +2200 +1980 +ENDCHAR +STARTCHAR uniA9CC +ENCODING 43468 +BBX 7 15 5 -2 +BITMAP +02 +04 +28 +20 +18 +C0 +20 +20 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uniA9CD +ENCODING 43469 +BBX 7 15 5 -2 +BITMAP +30 +08 +08 +08 +08 +08 +08 +08 +08 +06 +30 +08 +28 +40 +80 +ENDCHAR +STARTCHAR uniA9CF +ENCODING 43471 +BBX 7 7 4 1 +BITMAP +82 +72 +2C +20 +10 +10 +10 +ENDCHAR +STARTCHAR uniA9D0 +ENCODING 43472 +BBX 5 6 6 3 +BITMAP +70 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA9D1 +ENCODING 43473 +BBX 12 9 1 1 +BITMAP +6220 +9550 +9550 +9550 +9550 +5550 +1550 +1550 +1DD0 +ENDCHAR +STARTCHAR uniA9D2 +ENCODING 43474 +BBX 13 12 1 -2 +BITMAP +6360 +9490 +9490 +9010 +9410 +9238 +9E50 +0090 +0F10 +1010 +1310 +0CE0 +ENDCHAR +STARTCHAR uniA9D3 +ENCODING 43475 +BBX 15 12 1 -2 +BITMAP +46CE +A92A +A92A +A02A +A82A +A44A +BC8A +010A +1E0A +200A +230A +1CF2 +ENDCHAR +STARTCHAR uniA9D4 +ENCODING 43476 +BBX 5 9 6 1 +BITMAP +30 +40 +80 +B0 +88 +B0 +88 +88 +70 +ENDCHAR +STARTCHAR uniA9D5 +ENCODING 43477 +BBX 9 12 4 -2 +BITMAP +3800 +4400 +8200 +B200 +8A00 +B200 +8A00 +8A00 +7200 +0200 +0200 +0180 +ENDCHAR +STARTCHAR uniA9D6 +ENCODING 43478 +BBX 10 6 3 1 +BITMAP +3C00 +5200 +8C00 +8000 +8380 +7C40 +ENDCHAR +STARTCHAR uniA9D7 +ENCODING 43479 +BBX 14 9 0 1 +BITMAP +39DC +4A54 +9254 +9254 +9254 +9254 +9254 +9254 +4E64 +ENDCHAR +STARTCHAR uniA9D8 +ENCODING 43480 +BBX 13 9 0 1 +BITMAP +3860 +4890 +9090 +9050 +9020 +9030 +9248 +9248 +4D90 +ENDCHAR +STARTCHAR uniA9D9 +ENCODING 43481 +BBX 14 9 1 1 +BITMAP +739C +9294 +9294 +9294 +9294 +9294 +9294 +9294 +5C64 +ENDCHAR +STARTCHAR uniA9DE +ENCODING 43486 +BBX 5 7 6 3 +BITMAP +20 +50 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniA9DF +ENCODING 43487 +BBX 11 9 2 1 +BITMAP +71C0 +8A20 +8A20 +8A20 +8A20 +8A20 +8A20 +8A20 +8E20 +ENDCHAR +STARTCHAR uniA9E0 +ENCODING 43488 +BBX 8 7 7 2 +BITMAP +7C +A2 +41 +01 +79 +46 +3C +ENDCHAR +STARTCHAR uniA9E1 +ENCODING 43489 +BBX 10 7 6 2 +BITMAP +6300 +9080 +E840 +0840 +0840 +9480 +6300 +ENDCHAR +STARTCHAR uniA9E2 +ENCODING 43490 +BBX 10 7 6 2 +BITMAP +6300 +9280 +0A40 +0940 +08C0 +9480 +6300 +ENDCHAR +STARTCHAR uniA9E3 +ENCODING 43491 +BBX 9 7 6 2 +BITMAP +6300 +B480 +4800 +0800 +7F00 +9480 +6300 +ENDCHAR +STARTCHAR uniA9E4 +ENCODING 43492 +BBX 10 7 6 2 +BITMAP +3180 +4200 +8400 +8400 +8580 +4A40 +3180 +ENDCHAR +STARTCHAR uniA9E5 +ENCODING 43493 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 0 9 +BITMAP +70 +88 +80 +70 +88 +ENDCHAR +STARTCHAR uniA9E6 +ENCODING 43494 +BBX 7 4 5 8 +BITMAP +12 +24 +48 +90 +ENDCHAR +STARTCHAR uniA9E7 +ENCODING 43495 +BBX 11 11 5 -2 +BITMAP +3180 +4A40 +8420 +8420 +4420 +2440 +C580 +0400 +0400 +0400 +0700 +ENDCHAR +STARTCHAR uniA9E8 +ENCODING 43496 +BBX 11 14 5 -2 +BITMAP +0300 +0400 +0400 +3580 +4640 +8420 +8420 +8420 +4E40 +3580 +0400 +0400 +0400 +1C00 +ENDCHAR +STARTCHAR uniA9E9 +ENCODING 43497 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +85A0 +8420 +4840 +0180 +ENDCHAR +STARTCHAR uniA9EA +ENCODING 43498 +BBX 11 7 5 2 +BITMAP +3180 +4240 +8420 +85A0 +8420 +4840 +3180 +ENDCHAR +STARTCHAR uniA9EB +ENCODING 43499 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +85A0 +8420 +4240 +3180 +ENDCHAR +STARTCHAR uniA9EC +ENCODING 43500 +BBX 10 6 6 2 +BITMAP +4080 +8040 +8940 +9440 +9440 +6380 +ENDCHAR +STARTCHAR uniA9ED +ENCODING 43501 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +B5A0 +8420 +4840 +3180 +ENDCHAR +STARTCHAR uniA9EE +ENCODING 43502 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +B5A0 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uniA9EF +ENCODING 43503 +BBX 9 6 6 3 +BITMAP +0E00 +9100 +A080 +7280 +2880 +1100 +ENDCHAR +STARTCHAR uniA9F0 +ENCODING 43504 +BBX 8 13 4 0 +BITMAP +3C +42 +81 +81 +81 +81 +81 +81 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uniA9F1 +ENCODING 43505 +BBX 8 13 4 0 +BITMAP +3C +42 +E1 +91 +62 +00 +3C +42 +E1 +91 +62 +04 +07 +ENDCHAR +STARTCHAR uniA9F2 +ENCODING 43506 +BBX 8 13 4 0 +BITMAP +81 +81 +81 +42 +3D +01 +3D +42 +80 +80 +80 +42 +3C +ENDCHAR +STARTCHAR uniA9F3 +ENCODING 43507 +BBX 7 13 5 0 +BITMAP +7C +82 +02 +02 +C2 +BC +80 +BC +C2 +02 +02 +82 +7C +ENDCHAR +STARTCHAR uniA9F4 +ENCODING 43508 +BBX 7 13 4 0 +BITMAP +7C +82 +80 +80 +86 +7A +02 +7A +86 +80 +80 +82 +7C +ENDCHAR +STARTCHAR uniA9F5 +ENCODING 43509 +BBX 8 13 4 0 +BITMAP +3C +42 +81 +80 +80 +80 +BC +C2 +81 +81 +81 +42 +24 +ENDCHAR +STARTCHAR uniA9F6 +ENCODING 43510 +BBX 8 13 4 -1 +BITMAP +24 +42 +81 +81 +81 +43 +3D +01 +01 +01 +81 +42 +3C +ENDCHAR +STARTCHAR uniA9F7 +ENCODING 43511 +BBX 10 12 3 0 +BITMAP +3C00 +4200 +8100 +E100 +9100 +6100 +0100 +0100 +0100 +0100 +0100 +01C0 +ENDCHAR +STARTCHAR uniA9F8 +ENCODING 43512 +BBX 8 13 4 0 +BITMAP +3C +42 +80 +80 +80 +40 +3C +42 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uniA9F9 +ENCODING 43513 +BBX 13 7 1 2 +BITMAP +00E0 +0110 +8208 +8208 +8208 +4510 +38E0 +ENDCHAR +STARTCHAR uniA9FA +ENCODING 43514 +BBX 11 7 5 2 +BITMAP +3180 +4840 +8420 +B420 +8420 +4240 +3180 +ENDCHAR +STARTCHAR uniA9FB +ENCODING 43515 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +85A0 +8420 +4840 +3180 +ENDCHAR +STARTCHAR uniA9FC +ENCODING 43516 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +85A0 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uniA9FD +ENCODING 43517 +BBX 8 7 7 2 +BITMAP +24 +42 +81 +99 +81 +42 +3C +ENDCHAR +STARTCHAR uniA9FE +ENCODING 43518 +BBX 11 10 5 2 +BITMAP +0300 +0400 +0400 +3580 +4640 +8420 +85A0 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uniAA00 +ENCODING 43520 +BBX 14 9 2 1 +BITMAP +3818 +4724 +88A4 +A4C8 +D200 +6200 +4F00 +1280 +0C00 +ENDCHAR +STARTCHAR uniAA01 +ENCODING 43521 +BBX 11 9 1 1 +BITMAP +1980 +2640 +2040 +5040 +A080 +0F00 +1040 +10A0 +0F20 +ENDCHAR +STARTCHAR uniAA02 +ENCODING 43522 +BBX 7 9 4 1 +BITMAP +38 +44 +82 +82 +44 +18 +20 +24 +18 +ENDCHAR +STARTCHAR uniAA03 +ENCODING 43523 +BBX 11 13 3 1 +BITMAP +01C0 +0220 +0220 +0240 +7100 +8880 +8840 +4940 +12C0 +2180 +2100 +1200 +0F00 +ENDCHAR +STARTCHAR uniAA04 +ENCODING 43524 +BBX 10 9 3 1 +BITMAP +7380 +8C40 +C040 +A040 +4180 +0600 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uniAA05 +ENCODING 43525 +BBX 10 9 3 1 +BITMAP +1C00 +2200 +4100 +E100 +5600 +2100 +0780 +0940 +0600 +ENDCHAR +STARTCHAR uniAA06 +ENCODING 43526 +BBX 9 9 3 1 +BITMAP +7700 +8880 +8880 +8100 +4000 +4000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uniAA07 +ENCODING 43527 +BBX 13 9 2 1 +BITMAP +6C30 +9248 +9148 +8190 +4700 +4A00 +5200 +5400 +8800 +ENDCHAR +STARTCHAR uniAA08 +ENCODING 43528 +BBX 10 9 3 1 +BITMAP +3B80 +4440 +8440 +8080 +8000 +8000 +8800 +5400 +3800 +ENDCHAR +STARTCHAR uniAA09 +ENCODING 43529 +BBX 13 9 2 1 +BITMAP +61B0 +9248 +9248 +5210 +1200 +2200 +2400 +1800 +0800 +ENDCHAR +STARTCHAR uniAA0A +ENCODING 43530 +BBX 11 9 2 1 +BITMAP +70A0 +8940 +88C0 +5840 +0440 +0480 +0500 +0E00 +1000 +ENDCHAR +STARTCHAR uniAA0B +ENCODING 43531 +BBX 11 12 2 -2 +BITMAP +70A0 +8940 +88C0 +5840 +0440 +0480 +0500 +0E00 +10C0 +1120 +1240 +0C00 +ENDCHAR +STARTCHAR uniAA0C +ENCODING 43532 +BBX 11 9 2 1 +BITMAP +70C0 +8920 +8920 +4500 +0600 +3C00 +4800 +4800 +3000 +ENDCHAR +STARTCHAR uniAA0D +ENCODING 43533 +BBX 14 9 2 1 +BITMAP +6218 +9524 +9524 +5510 +1930 +7250 +9220 +A240 +4180 +ENDCHAR +STARTCHAR uniAA0E +ENCODING 43534 +BBX 13 9 1 1 +BITMAP +71B0 +8A48 +8A48 +5910 +0500 +0500 +0500 +0E00 +1000 +ENDCHAR +STARTCHAR uniAA0F +ENCODING 43535 +BBX 12 9 2 1 +BITMAP +0C60 +1290 +1290 +12A0 +1480 +4E40 +AD40 +9CC0 +7380 +ENDCHAR +STARTCHAR uniAA10 +ENCODING 43536 +BBX 15 9 1 1 +BITMAP +330C +4C92 +8062 +8044 +80C0 +8140 +5240 +2A40 +5180 +ENDCHAR +STARTCHAR uniAA11 +ENCODING 43537 +BBX 15 12 1 -2 +BITMAP +330C +4C92 +8062 +8044 +80C0 +8140 +5240 +2A40 +5188 +0094 +0090 +0060 +ENDCHAR +STARTCHAR uniAA12 +ENCODING 43538 +BBX 15 12 1 -2 +BITMAP +330C +4C92 +8062 +8044 +80C0 +8140 +5240 +2A40 +5388 +0494 +0290 +0460 +ENDCHAR +STARTCHAR uniAA13 +ENCODING 43539 +BBX 10 9 3 1 +BITMAP +3B80 +4440 +4440 +8080 +8000 +B000 +C800 +4800 +3000 +ENDCHAR +STARTCHAR uniAA14 +ENCODING 43540 +BBX 12 9 3 1 +BITMAP +7060 +8890 +8890 +4940 +12C0 +2180 +2100 +1200 +0E00 +ENDCHAR +STARTCHAR uniAA15 +ENCODING 43541 +BBX 11 9 2 1 +BITMAP +71C0 +8A20 +8A20 +5940 +0500 +0500 +0500 +0E00 +1000 +ENDCHAR +STARTCHAR uniAA16 +ENCODING 43542 +BBX 10 9 3 1 +BITMAP +6380 +9440 +9440 +5280 +1200 +2200 +2400 +1800 +0800 +ENDCHAR +STARTCHAR uniAA17 +ENCODING 43543 +BBX 13 9 2 1 +BITMAP +7030 +8848 +8848 +4420 +0420 +3C20 +4A40 +4980 +3100 +ENDCHAR +STARTCHAR uniAA18 +ENCODING 43544 +BBX 13 12 2 -2 +BITMAP +7030 +8848 +8848 +4420 +0420 +3C20 +4A40 +4980 +3120 +0250 +0240 +0180 +ENDCHAR +STARTCHAR uniAA19 +ENCODING 43545 +BBX 13 12 2 -2 +BITMAP +7030 +8848 +8848 +4420 +0420 +3C20 +4A40 +4980 +3000 +2300 +2480 +1800 +ENDCHAR +STARTCHAR uniAA1A +ENCODING 43546 +BBX 12 9 1 1 +BITMAP +0EE0 +1110 +1110 +0800 +0800 +4800 +A800 +9000 +6000 +ENDCHAR +STARTCHAR uniAA1B +ENCODING 43547 +BBX 12 9 2 1 +BITMAP +7060 +8890 +8890 +58A0 +0480 +0480 +0500 +0E00 +1000 +ENDCHAR +STARTCHAR uniAA1C +ENCODING 43548 +BBX 15 9 0 1 +BITMAP +0E0C +1112 +1112 +0908 +0A28 +4A58 +AA30 +9110 +60E0 +ENDCHAR +STARTCHAR uniAA1D +ENCODING 43549 +BBX 11 9 2 1 +BITMAP +60C0 +9120 +9120 +2140 +4100 +4100 +4100 +2100 +1E00 +ENDCHAR +STARTCHAR uniAA1E +ENCODING 43550 +BBX 14 9 1 1 +BITMAP +60D8 +9124 +9124 +2100 +4100 +4100 +4100 +2100 +1E00 +ENDCHAR +STARTCHAR uniAA1F +ENCODING 43551 +BBX 14 9 1 1 +BITMAP +60D8 +9124 +9124 +5108 +1500 +2200 +2500 +1900 +0800 +ENDCHAR +STARTCHAR uniAA20 +ENCODING 43552 +BBX 12 12 2 -2 +BITMAP +60E0 +9110 +9110 +5120 +1500 +2200 +2500 +1900 +0920 +0250 +0240 +0180 +ENDCHAR +STARTCHAR uniAA21 +ENCODING 43553 +BBX 12 11 2 -1 +BITMAP +60E0 +9110 +9110 +5120 +1500 +2200 +2540 +1880 +0940 +0140 +0080 +ENDCHAR +STARTCHAR uniAA22 +ENCODING 43554 +BBX 14 9 1 1 +BITMAP +60D8 +9124 +9124 +4908 +0880 +0480 +0480 +0500 +0E00 +ENDCHAR +STARTCHAR uniAA23 +ENCODING 43555 +BBX 9 9 4 1 +BITMAP +0F00 +1080 +1080 +0900 +0800 +6800 +9800 +9000 +6000 +ENDCHAR +STARTCHAR uniAA24 +ENCODING 43556 +BBX 11 9 3 1 +BITMAP +39C0 +4620 +4020 +8020 +8040 +8080 +9000 +6800 +3000 +ENDCHAR +STARTCHAR uniAA25 +ENCODING 43557 +BBX 12 10 2 0 +BITMAP +60E0 +9110 +9110 +5120 +1100 +2340 +2480 +1940 +0940 +0080 +ENDCHAR +STARTCHAR uniAA26 +ENCODING 43558 +BBX 14 9 1 1 +BITMAP +1838 +2444 +5444 +A448 +0440 +0880 +0900 +0600 +0200 +ENDCHAR +STARTCHAR uniAA27 +ENCODING 43559 +BBX 12 9 2 1 +BITMAP +1CE0 +2310 +2010 +1020 +0800 +4800 +A800 +9000 +6000 +ENDCHAR +STARTCHAR uniAA28 +ENCODING 43560 +BBX 12 9 2 1 +BITMAP +1DC0 +2220 +2260 +10A0 +0850 +4800 +A800 +9000 +6000 +ENDCHAR +STARTCHAR uniAA29 +ENCODING 43561 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -7 7 +BITMAP +70 +88 +90 +40 +30 +08 +08 +ENDCHAR +STARTCHAR uniAA2A +ENCODING 43562 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 8 +BITMAP +38 +44 +82 +9A +64 +08 +ENDCHAR +STARTCHAR uniAA2B +ENCODING 43563 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -7 7 +BITMAP +38 +44 +92 +82 +9A +64 +08 +ENDCHAR +STARTCHAR uniAA2C +ENCODING 43564 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 6 -8 8 +BITMAP +38 +45 +8E +9A +64 +08 +ENDCHAR +STARTCHAR uniAA2D +ENCODING 43565 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -6 -2 +BITMAP +08 +70 +80 +ENDCHAR +STARTCHAR uniAA2E +ENCODING 43566 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -5 11 +BITMAP +88 +70 +ENDCHAR +STARTCHAR uniAA2F +ENCODING 43567 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -16 1 +BITMAP +60 +90 +90 +80 +A0 +50 +A0 +ENDCHAR +STARTCHAR uniAA30 +ENCODING 43568 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 10 -16 -2 +BITMAP +60 +90 +90 +80 +A0 +50 +20 +08 +70 +80 +ENDCHAR +STARTCHAR uniAA31 +ENCODING 43569 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 7 +BITMAP +08 +70 +80 +90 +60 +40 +80 +ENDCHAR +STARTCHAR uniAA32 +ENCODING 43570 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -4 -2 +BITMAP +C0 +40 +80 +ENDCHAR +STARTCHAR uniAA33 +ENCODING 43571 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 9 -6 -2 +BITMAP +18 +24 +24 +20 +10 +C8 +28 +48 +F0 +ENDCHAR +STARTCHAR uniAA34 +ENCODING 43572 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 16 -16 -2 +BITMAP +58 +A8 +88 +10 +20 +40 +80 +80 +80 +80 +80 +80 +80 +82 +4A +34 +ENDCHAR +STARTCHAR uniAA35 +ENCODING 43573 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -4 -2 +BITMAP +40 +80 +C0 +ENDCHAR +STARTCHAR uniAA36 +ENCODING 43574 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -4 -2 +BITMAP +80 +50 +20 +50 +50 +50 +20 +ENDCHAR +STARTCHAR uniAA40 +ENCODING 43584 +BBX 9 9 3 1 +BITMAP +7700 +8880 +8880 +8080 +4080 +4100 +4100 +4200 +8400 +ENDCHAR +STARTCHAR uniAA41 +ENCODING 43585 +BBX 10 9 2 1 +BITMAP +3B80 +4440 +4440 +8040 +8040 +8080 +8080 +B100 +7200 +ENDCHAR +STARTCHAR uniAA42 +ENCODING 43586 +BBX 12 9 2 1 +BITMAP +7080 +8940 +8940 +58C0 +0460 +0490 +0510 +0E20 +1040 +ENDCHAR +STARTCHAR uniAA43 +ENCODING 43587 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -6 11 +BITMAP +10 +20 +C0 +ENDCHAR +STARTCHAR uniAA44 +ENCODING 43588 +BBX 12 9 2 1 +BITMAP +70E0 +8910 +8910 +4510 +0610 +3C20 +4820 +4840 +3080 +ENDCHAR +STARTCHAR uniAA45 +ENCODING 43589 +BBX 10 9 3 1 +BITMAP +3B80 +4440 +4440 +8040 +8040 +B080 +C880 +4900 +3200 +ENDCHAR +STARTCHAR uniAA46 +ENCODING 43590 +BBX 14 9 1 1 +BITMAP +7038 +8844 +8844 +4424 +0424 +3C28 +4A48 +4990 +3120 +ENDCHAR +STARTCHAR uniAA47 +ENCODING 43591 +BBX 11 9 2 1 +BITMAP +1DC0 +2220 +2220 +1020 +0820 +4840 +A840 +9080 +6100 +ENDCHAR +STARTCHAR uniAA48 +ENCODING 43592 +BBX 14 9 1 1 +BITMAP +60D8 +9124 +9124 +4904 +0884 +0488 +0488 +0510 +0E20 +ENDCHAR +STARTCHAR uniAA49 +ENCODING 43593 +BBX 10 9 4 1 +BITMAP +0F80 +1040 +1040 +0840 +0840 +6880 +9880 +9100 +6200 +ENDCHAR +STARTCHAR uniAA4A +ENCODING 43594 +BBX 11 9 2 1 +BITMAP +39C0 +4620 +4020 +8020 +8020 +8040 +9040 +A880 +7100 +ENDCHAR +STARTCHAR uniAA4B +ENCODING 43595 +BBX 13 9 1 1 +BITMAP +38F0 +2508 +5508 +A488 +0488 +0890 +0910 +0620 +0240 +ENDCHAR +STARTCHAR uniAA4C +ENCODING 43596 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -6 12 +BITMAP +80 +ENDCHAR +STARTCHAR uniAA4D +ENCODING 43597 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -4 1 +BITMAP +60 +90 +50 +10 +20 +40 +40 +ENDCHAR +STARTCHAR uniAA50 +ENCODING 43600 +BBX 8 9 4 1 +BITMAP +3C +42 +81 +81 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uniAA51 +ENCODING 43601 +BBX 10 9 2 1 +BITMAP +3F80 +4040 +4040 +F080 +3300 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniAA52 +ENCODING 43602 +BBX 13 13 2 1 +BITMAP +0008 +0E10 +11E0 +2000 +4EE0 +9110 +9110 +A010 +A410 +AA20 +9C20 +4040 +3F80 +ENDCHAR +STARTCHAR uniAA53 +ENCODING 43603 +BBX 13 9 2 1 +BITMAP +39C0 +4620 +4020 +8020 +8040 +8090 +9128 +A928 +70C0 +ENDCHAR +STARTCHAR uniAA54 +ENCODING 43604 +BBX 13 9 1 1 +BITMAP +0008 +0C10 +1210 +2120 +40A0 +F840 +4400 +4400 +3800 +ENDCHAR +STARTCHAR uniAA55 +ENCODING 43605 +BBX 7 9 3 1 +BITMAP +78 +84 +84 +48 +14 +02 +1A +24 +1A +ENDCHAR +STARTCHAR uniAA56 +ENCODING 43606 +BBX 9 9 4 1 +BITMAP +0F00 +1080 +1080 +0900 +0800 +6800 +9800 +9000 +6000 +ENDCHAR +STARTCHAR uniAA57 +ENCODING 43607 +BBX 10 12 4 -2 +BITMAP +0F80 +1040 +1040 +0840 +0840 +6880 +9880 +9100 +6600 +0880 +0940 +0600 +ENDCHAR +STARTCHAR uniAA58 +ENCODING 43608 +BBX 12 12 2 -2 +BITMAP +70E0 +8910 +8910 +4510 +0610 +3C20 +4820 +4840 +3180 +0220 +0250 +0180 +ENDCHAR +STARTCHAR uniAA59 +ENCODING 43609 +BBX 12 12 2 -2 +BITMAP +60E0 +9110 +9110 +2110 +4210 +4220 +4220 +2440 +1980 +0220 +0250 +0180 +ENDCHAR +STARTCHAR uniAA5C +ENCODING 43612 +BBX 10 7 2 2 +BITMAP +0700 +0880 +1040 +9040 +4C40 +2080 +1F00 +ENDCHAR +STARTCHAR uniAA5D +ENCODING 43613 +BBX 1 9 8 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniAA5E +ENCODING 43614 +BBX 4 9 6 1 +BITMAP +90 +90 +90 +90 +90 +90 +90 +10 +10 +ENDCHAR +STARTCHAR uniAA5F +ENCODING 43615 +BBX 7 9 5 1 +BITMAP +92 +92 +92 +92 +92 +12 +12 +02 +02 +ENDCHAR +STARTCHAR uniAA60 +ENCODING 43616 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8460 +84A0 +8520 +4940 +0180 +ENDCHAR +STARTCHAR uniAA61 +ENCODING 43617 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +8420 +4420 +2A40 +C180 +ENDCHAR +STARTCHAR uniAA62 +ENCODING 43618 +BBX 8 7 7 2 +BITMAP +8C +82 +81 +81 +A1 +D2 +8C +ENDCHAR +STARTCHAR uniAA63 +ENCODING 43619 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +9420 +9420 +9420 +4A40 +C180 +ENDCHAR +STARTCHAR uniAA64 +ENCODING 43620 +BBX 11 7 5 2 +BITMAP +0180 +4A40 +8420 +8420 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uniAA65 +ENCODING 43621 +BBX 11 11 5 -2 +BITMAP +2180 +4240 +8420 +8420 +8420 +4C40 +3580 +0400 +0400 +0400 +1C00 +ENDCHAR +STARTCHAR uniAA66 +ENCODING 43622 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +B420 +8420 +4840 +3180 +ENDCHAR +STARTCHAR uniAA67 +ENCODING 43623 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +B420 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uniAA68 +ENCODING 43624 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8460 +B4A0 +8520 +4940 +3180 +ENDCHAR +STARTCHAR uniAA69 +ENCODING 43625 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +B720 +84A0 +4A40 +3180 +ENDCHAR +STARTCHAR uniAA6A +ENCODING 43626 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +8420 +8720 +84A0 +4A40 +3180 +ENDCHAR +STARTCHAR uniAA6B +ENCODING 43627 +BBX 9 6 6 3 +BITMAP +0E00 +9100 +A080 +7080 +2880 +1100 +ENDCHAR +STARTCHAR uniAA6C +ENCODING 43628 +BBX 10 6 6 2 +BITMAP +4080 +8040 +8C40 +9240 +9240 +6180 +ENDCHAR +STARTCHAR uniAA6D +ENCODING 43629 +BBX 9 11 7 -2 +BITMAP +0600 +2900 +5080 +3080 +1080 +1100 +1600 +1000 +1000 +9000 +6000 +ENDCHAR +STARTCHAR uniAA6E +ENCODING 43630 +BBX 11 7 5 2 +BITMAP +3180 +4840 +C420 +A420 +9420 +5240 +3180 +ENDCHAR +STARTCHAR uniAA6F +ENCODING 43631 +BBX 8 7 7 2 +BITMAP +8C +D2 +A1 +A1 +A1 +92 +8C +ENDCHAR +STARTCHAR uniAA70 +ENCODING 43632 +BBX 7 5 5 8 +BITMAP +7C +82 +00 +7C +82 +ENDCHAR +STARTCHAR uniAA71 +ENCODING 43633 +BBX 11 7 5 2 +BITMAP +3180 +4A40 +A420 +A420 +A420 +4840 +0180 +ENDCHAR +STARTCHAR uniAA72 +ENCODING 43634 +BBX 11 7 5 2 +BITMAP +0980 +1640 +2220 +2220 +E220 +A540 +6180 +ENDCHAR +STARTCHAR uniAA73 +ENCODING 43635 +BBX 9 7 7 2 +BITMAP +8600 +C100 +C080 +A080 +9080 +8900 +8600 +ENDCHAR +STARTCHAR uniAA74 +ENCODING 43636 +BBX 10 16 3 -2 +BITMAP +0180 +0240 +0200 +0100 +0080 +2040 +4640 +8540 +8540 +8540 +4640 +3C40 +0440 +1C40 +2640 +1980 +ENDCHAR +STARTCHAR uniAA75 +ENCODING 43637 +BBX 13 16 1 -2 +BITMAP +0030 +0048 +0040 +0020 +0010 +3188 +4A48 +8428 +8428 +4428 +2848 +C188 +0108 +0708 +09C8 +0630 +ENDCHAR +STARTCHAR uniAA76 +ENCODING 43638 +BBX 14 16 1 -2 +BITMAP +0018 +0024 +0020 +0010 +0008 +71C4 +8A24 +0414 +0414 +0414 +0414 +0464 +0444 +64C4 +8564 +7898 +ENDCHAR +STARTCHAR uniAA77 +ENCODING 43639 +BBX 12 15 2 -2 +BITMAP +1800 +2400 +2000 +1000 +3FC0 +4240 +8140 +8140 +8140 +4140 +3D70 +0100 +0100 +0100 +01C0 +ENDCHAR +STARTCHAR uniAA78 +ENCODING 43640 +BBX 13 9 2 2 +BITMAP +0030 +0048 +2280 +9C80 +4080 +4100 +4100 +9D00 +2300 +ENDCHAR +STARTCHAR uniAA79 +ENCODING 43641 +BBX 10 11 3 -2 +BITMAP +3C00 +4200 +8100 +8100 +8100 +4100 +3D00 +0100 +0100 +0100 +01C0 +ENDCHAR +STARTCHAR uniAA7A +ENCODING 43642 +BBX 12 14 4 -2 +BITMAP +0200 +7C00 +8000 +98C0 +A420 +C210 +C210 +C210 +A120 +99C0 +8100 +8100 +8100 +7E00 +ENDCHAR +STARTCHAR uniAA7B +ENCODING 43643 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -10 0 +BITMAP +40 +A0 +C0 +80 +40 +ENDCHAR +STARTCHAR uniAA7C +ENCODING 43644 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 -9 10 +BITMAP +FF +ENDCHAR +STARTCHAR uniAA7D +ENCODING 43645 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 1 -11 5 +BITMAP +FC +ENDCHAR +STARTCHAR uniAA7E +ENCODING 43646 +BBX 9 11 7 -2 +BITMAP +3880 +4480 +0280 +F280 +8A80 +4480 +3C80 +0480 +0480 +0680 +0D00 +ENDCHAR +STARTCHAR uniAA7F +ENCODING 43647 +BBX 11 11 5 -2 +BITMAP +2220 +5520 +08A0 +E8A0 +98A0 +55A0 +22A0 +00A0 +00A0 +01A0 +0340 +ENDCHAR +STARTCHAR uniAA80 +ENCODING 43648 +BBX 9 8 3 2 +BITMAP +C180 +4280 +4480 +4480 +4880 +4880 +5080 +6080 +ENDCHAR +STARTCHAR uniAA81 +ENCODING 43649 +BBX 10 8 3 2 +BITMAP +1F00 +2080 +4140 +4240 +4440 +4840 +3080 +F100 +ENDCHAR +STARTCHAR uniAA82 +ENCODING 43650 +BBX 12 13 2 -2 +BITMAP +3810 +4420 +8220 +8220 +8220 +8220 +8220 +4420 +27C0 +0020 +0020 +0220 +01C0 +ENDCHAR +STARTCHAR uniAA83 +ENCODING 43651 +BBX 14 13 1 -2 +BITMAP +CC38 +4444 +4484 +4484 +4484 +4484 +4484 +4498 +3B04 +0004 +0004 +0044 +0038 +ENDCHAR +STARTCHAR uniAA84 +ENCODING 43652 +BBX 14 9 1 2 +BITMAP +1C10 +2220 +4120 +4120 +4120 +E220 +5238 +5264 +2198 +ENDCHAR +STARTCHAR uniAA85 +ENCODING 43653 +BBX 9 13 4 -2 +BITMAP +8F00 +5080 +2080 +2080 +2080 +0080 +0080 +0300 +0080 +0080 +2080 +1080 +0F00 +ENDCHAR +STARTCHAR uniAA86 +ENCODING 43654 +BBX 8 13 3 -2 +BITMAP +1C +22 +41 +41 +41 +E1 +51 +51 +21 +01 +01 +22 +1C +ENDCHAR +STARTCHAR uniAA87 +ENCODING 43655 +BBX 7 13 4 -2 +BITMAP +38 +44 +82 +82 +82 +82 +46 +3A +02 +02 +02 +44 +38 +ENDCHAR +STARTCHAR uniAA88 +ENCODING 43656 +BBX 16 12 0 2 +BITMAP +0006 +0008 +000E +DB09 +4C86 +4888 +4888 +4888 +4888 +49EA +4A95 +310A +ENDCHAR +STARTCHAR uniAA89 +ENCODING 43657 +BBX 9 12 3 2 +BITMAP +1000 +2000 +4000 +9E00 +A100 +A080 +8080 +8080 +8080 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uniAA8A +ENCODING 43658 +BBX 11 12 2 1 +BITMAP +00C0 +0120 +0200 +0200 +6200 +9200 +1200 +1200 +1200 +1380 +0F40 +0180 +ENDCHAR +STARTCHAR uniAA8B +ENCODING 43659 +BBX 11 13 4 -2 +BITMAP +2100 +5280 +4F00 +4200 +4200 +4200 +4200 +4200 +8200 +0200 +0200 +0120 +00C0 +ENDCHAR +STARTCHAR uniAA8C +ENCODING 43660 +BBX 14 12 1 1 +BITMAP +0078 +0084 +0100 +0100 +60C0 +9100 +1100 +1100 +1100 +1180 +1240 +0D80 +ENDCHAR +STARTCHAR uniAA8D +ENCODING 43661 +BBX 14 15 1 -2 +BITMAP +0078 +0084 +0100 +0100 +60C0 +9100 +1100 +1100 +1100 +1100 +1100 +0E00 +0100 +0100 +0600 +ENDCHAR +STARTCHAR uniAA8E +ENCODING 43662 +BBX 11 9 2 2 +BITMAP +C020 +2040 +1080 +0900 +0600 +0600 +8900 +5080 +2060 +ENDCHAR +STARTCHAR uniAA8F +ENCODING 43663 +BBX 15 12 1 2 +BITMAP +000E +0010 +0020 +1C20 +2220 +4120 +4120 +4120 +E220 +5238 +5264 +2198 +ENDCHAR +STARTCHAR uniAA90 +ENCODING 43664 +BBX 13 13 1 -2 +BITMAP +CDB0 +4648 +4448 +4448 +4448 +4448 +4448 +4448 +3848 +0008 +0008 +0108 +00F0 +ENDCHAR +STARTCHAR uniAA91 +ENCODING 43665 +BBX 12 13 1 -2 +BITMAP +0EE0 +1110 +2110 +2010 +F010 +2810 +1810 +0010 +0010 +0010 +0010 +0210 +01E0 +ENDCHAR +STARTCHAR uniAA92 +ENCODING 43666 +BBX 10 8 3 2 +BITMAP +1F00 +2080 +4040 +4040 +4040 +4040 +2080 +F100 +ENDCHAR +STARTCHAR uniAA93 +ENCODING 43667 +BBX 14 13 1 -2 +BITMAP +C1C0 +4220 +4420 +4420 +4420 +4420 +4720 +4CA0 +3320 +0020 +0020 +0024 +0018 +ENDCHAR +STARTCHAR uniAA94 +ENCODING 43668 +BBX 12 7 1 4 +BITMAP +0EE0 +1110 +2110 +2010 +F010 +2810 +1820 +ENDCHAR +STARTCHAR uniAA95 +ENCODING 43669 +BBX 12 9 1 2 +BITMAP +6080 +9080 +1080 +1080 +1080 +1080 +1080 +1090 +0F60 +ENDCHAR +STARTCHAR uniAA96 +ENCODING 43670 +BBX 12 13 1 -2 +BITMAP +1C00 +2200 +4100 +4100 +4100 +E100 +5100 +5100 +2100 +0100 +0110 +0110 +00E0 +ENDCHAR +STARTCHAR uniAA97 +ENCODING 43671 +BBX 11 13 4 -2 +BITMAP +C100 +4100 +4100 +4100 +4100 +4100 +4300 +4500 +3900 +0100 +0100 +0120 +00C0 +ENDCHAR +STARTCHAR uniAA98 +ENCODING 43672 +BBX 16 12 0 2 +BITMAP +0002 +0004 +0008 +DB08 +4C88 +4888 +4888 +4888 +4888 +49EA +4A95 +310A +ENDCHAR +STARTCHAR uniAA99 +ENCODING 43673 +BBX 10 9 2 1 +BITMAP +6080 +9100 +1200 +1200 +1200 +1200 +1380 +0F40 +0180 +ENDCHAR +STARTCHAR uniAA9A +ENCODING 43674 +BBX 9 11 2 2 +BITMAP +0080 +0100 +0200 +0200 +6200 +9200 +1200 +1200 +1200 +1200 +0C00 +ENDCHAR +STARTCHAR uniAA9B +ENCODING 43675 +BBX 12 12 2 2 +BITMAP +0010 +0020 +0020 +0020 +C920 +4920 +4920 +4920 +4920 +4920 +4920 +36C0 +ENDCHAR +STARTCHAR uniAA9C +ENCODING 43676 +BBX 12 12 2 2 +BITMAP +0060 +0090 +0100 +C100 +2100 +2100 +2100 +2100 +2100 +2100 +1200 +0C00 +ENDCHAR +STARTCHAR uniAA9D +ENCODING 43677 +BBX 11 12 2 2 +BITMAP +0020 +0040 +0040 +0040 +C440 +4440 +4440 +4440 +4440 +4440 +4440 +3B80 +ENDCHAR +STARTCHAR uniAA9E +ENCODING 43678 +BBX 14 12 1 1 +BITMAP +0078 +0084 +0100 +0100 +C0C0 +2900 +3500 +2100 +2100 +2180 +2240 +1D80 +ENDCHAR +STARTCHAR uniAA9F +ENCODING 43679 +BBX 13 15 1 -1 +BITMAP +0008 +0010 +0010 +0210 +C510 +4510 +4510 +4510 +4510 +4510 +4510 +38E0 +0010 +0010 +0060 +ENDCHAR +STARTCHAR uniAAA0 +ENCODING 43680 +BBX 10 11 2 2 +BITMAP +1080 +1100 +6E00 +C200 +2200 +2400 +2400 +2400 +2580 +2240 +1D80 +ENDCHAR +STARTCHAR uniAAA1 +ENCODING 43681 +BBX 14 11 1 2 +BITMAP +0038 +0044 +0040 +C640 +4A40 +4A40 +5240 +5240 +6270 +62C8 +4130 +ENDCHAR +STARTCHAR uniAAA2 +ENCODING 43682 +BBX 15 10 1 2 +BITMAP +0002 +DB04 +4C88 +4888 +4888 +4888 +4884 +49C4 +4AA4 +3118 +ENDCHAR +STARTCHAR uniAAA3 +ENCODING 43683 +BBX 13 10 1 2 +BITMAP +0008 +7010 +8820 +0820 +0820 +0820 +0810 +1C10 +2A10 +11E0 +ENDCHAR +STARTCHAR uniAAA4 +ENCODING 43684 +BBX 14 12 1 2 +BITMAP +0418 +0424 +1B40 +7040 +8840 +0840 +0840 +0840 +0840 +0840 +0480 +0300 +ENDCHAR +STARTCHAR uniAAA5 +ENCODING 43685 +BBX 12 12 1 2 +BITMAP +0410 +0420 +1B40 +7040 +8840 +0840 +0840 +0840 +0840 +0840 +0480 +0300 +ENDCHAR +STARTCHAR uniAAA6 +ENCODING 43686 +BBX 12 9 2 2 +BITMAP +8C00 +5200 +2100 +2100 +2100 +2100 +2100 +4090 +8060 +ENDCHAR +STARTCHAR uniAAA7 +ENCODING 43687 +BBX 12 11 2 0 +BITMAP +8C00 +5200 +2100 +2100 +2100 +2100 +2160 +40D0 +80E0 +0040 +0020 +ENDCHAR +STARTCHAR uniAAA8 +ENCODING 43688 +BBX 15 13 0 -2 +BITMAP +CDC0 +4620 +4420 +4420 +4420 +4420 +4420 +4420 +3820 +0020 +0020 +0012 +000C +ENDCHAR +STARTCHAR uniAAA9 +ENCODING 43689 +BBX 8 9 4 2 +BITMAP +78 +84 +84 +09 +12 +0C +08 +D0 +20 +ENDCHAR +STARTCHAR uniAAAA +ENCODING 43690 +BBX 14 9 0 2 +BITMAP +DB70 +4C88 +4884 +4884 +4884 +4884 +4884 +48A4 +3098 +ENDCHAR +STARTCHAR uniAAAB +ENCODING 43691 +BBX 8 9 4 2 +BITMAP +3C +42 +41 +01 +01 +01 +81 +42 +3C +ENDCHAR +STARTCHAR uniAAAC +ENCODING 43692 +BBX 15 9 0 2 +BITMAP +CCC0 +5520 +4E10 +4410 +4410 +4410 +4422 +4424 +3818 +ENDCHAR +STARTCHAR uniAAAD +ENCODING 43693 +BBX 11 9 2 2 +BITMAP +C380 +4440 +4820 +4820 +4820 +5020 +5020 +5120 +20C0 +ENDCHAR +STARTCHAR uniAAAE +ENCODING 43694 +BBX 7 9 5 2 +BITMAP +78 +84 +82 +4A +32 +02 +82 +84 +78 +ENDCHAR +STARTCHAR uniAAAF +ENCODING 43695 +BBX 9 15 5 -2 +BITMAP +7800 +8400 +8200 +4200 +3F00 +0280 +8280 +8480 +7880 +0080 +0080 +0080 +0080 +1100 +0E00 +ENDCHAR +STARTCHAR uniAAB0 +ENCODING 43696 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -12 9 +BITMAP +42 +84 +88 +70 +ENDCHAR +STARTCHAR uniAAB1 +ENCODING 43697 +BBX 5 9 5 2 +BITMAP +F0 +88 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uniAAB2 +ENCODING 43698 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -11 10 +BITMAP +20 +20 +D8 +ENDCHAR +STARTCHAR uniAAB3 +ENCODING 43699 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 6 -13 8 +BITMAP +4000 +A700 +B880 +4000 +8000 +4000 +ENDCHAR +STARTCHAR uniAAB4 +ENCODING 43700 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -6 -1 +BITMAP +30 +48 +38 +88 +70 +ENDCHAR +STARTCHAR uniAAB5 +ENCODING 43701 +BBX 8 9 3 2 +BITMAP +21 +42 +84 +84 +84 +84 +84 +84 +63 +ENDCHAR +STARTCHAR uniAAB6 +ENCODING 43702 +BBX 7 11 5 2 +BITMAP +3C +42 +80 +80 +80 +80 +80 +80 +80 +80 +60 +ENDCHAR +STARTCHAR uniAAB7 +ENCODING 43703 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -10 9 +BITMAP +04 +08 +10 +A0 +40 +ENDCHAR +STARTCHAR uniAAB8 +ENCODING 43704 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -10 9 +BITMAP +04 +28 +10 +A8 +40 +ENDCHAR +STARTCHAR uniAAB9 +ENCODING 43705 +BBX 3 9 6 2 +BITMAP +20 +40 +80 +80 +80 +80 +80 +80 +60 +ENDCHAR +STARTCHAR uniAABA +ENCODING 43706 +BBX 6 10 5 2 +BITMAP +1C +20 +40 +40 +20 +18 +20 +38 +54 +88 +ENDCHAR +STARTCHAR uniAABB +ENCODING 43707 +BBX 8 11 4 2 +BITMAP +60 +90 +88 +88 +49 +3E +08 +08 +08 +08 +30 +ENDCHAR +STARTCHAR uniAABC +ENCODING 43708 +BBX 6 13 5 -2 +BITMAP +38 +44 +80 +80 +80 +40 +38 +10 +20 +40 +40 +80 +C0 +ENDCHAR +STARTCHAR uniAABD +ENCODING 43709 +BBX 11 12 1 1 +BITMAP +0040 +0080 +0100 +0120 +63C0 +9500 +1100 +1100 +1100 +1180 +1240 +0D80 +ENDCHAR +STARTCHAR uniAABE +ENCODING 43710 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 6 -14 8 +BITMAP +0E20 +09C0 +3880 +2700 +E200 +9C00 +ENDCHAR +STARTCHAR uniAABF +ENCODING 43711 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 6 -8 8 +BITMAP +40 +40 +40 +80 +80 +80 +ENDCHAR +STARTCHAR uniAAC0 +ENCODING 43712 +BBX 6 9 5 2 +BITMAP +30 +48 +88 +88 +90 +E0 +84 +88 +70 +ENDCHAR +STARTCHAR uniAAC1 +ENCODING 43713 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 -12 8 +BITMAP +03 +64 +98 +30 +40 +ENDCHAR +STARTCHAR uniAAC2 +ENCODING 43714 +BBX 5 13 5 -2 +BITMAP +F0 +88 +08 +08 +08 +08 +08 +08 +08 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uniAADB +ENCODING 43739 +BBX 15 12 1 2 +BITMAP +000E +0010 +0020 +1C24 +2218 +4108 +4170 +4790 +FA10 +5238 +5254 +2198 +ENDCHAR +STARTCHAR uniAADC +ENCODING 43740 +BBX 15 12 1 2 +BITMAP +000E +0010 +0020 +1C24 +2218 +4108 +4110 +4110 +E210 +5238 +5254 +2198 +ENDCHAR +STARTCHAR uniAADD +ENCODING 43741 +BBX 10 13 3 1 +BITMAP +1000 +2000 +4000 +4000 +5C00 +2200 +5100 +4900 +4700 +E280 +5240 +5240 +2180 +ENDCHAR +STARTCHAR uniAADE +ENCODING 43742 +BBX 14 15 1 -1 +BITMAP +3EF8 +4308 +8A10 +20A0 +0204 +1408 +0AA8 +B558 +9548 +9548 +C930 +0000 +28A0 +8208 +7DF0 +ENDCHAR +STARTCHAR uniAADF +ENCODING 43743 +BBX 10 15 2 -2 +BITMAP +01C0 +0200 +0400 +0480 +0300 +0100 +0200 +0200 +7F80 +8240 +1F80 +2200 +4700 +3A80 +0300 +ENDCHAR +STARTCHAR uniAAE0 +ENCODING 43744 +BBX 9 9 3 1 +BITMAP +0E00 +1100 +2080 +4080 +4080 +0080 +0080 +9C80 +6380 +ENDCHAR +STARTCHAR uniAAE1 +ENCODING 43745 +BBX 9 9 3 1 +BITMAP +FF80 +4000 +4000 +4000 +4080 +4080 +4100 +2200 +1C00 +ENDCHAR +STARTCHAR uniAAE2 +ENCODING 43746 +BBX 10 9 2 1 +BITMAP +7380 +9240 +5E80 +4080 +4080 +2100 +2100 +2100 +C0C0 +ENDCHAR +STARTCHAR uniAAE3 +ENCODING 43747 +BBX 11 9 1 1 +BITMAP +0320 +0320 +02C0 +0400 +0400 +0400 +6800 +9800 +9800 +ENDCHAR +STARTCHAR uniAAE4 +ENCODING 43748 +BBX 15 9 0 1 +BITMAP +070C +0892 +10A2 +2042 +50A2 +8912 +850A +4892 +3062 +ENDCHAR +STARTCHAR uniAAE5 +ENCODING 43749 +BBX 9 9 3 1 +BITMAP +FF80 +0800 +0800 +0800 +7F00 +4900 +7F00 +4900 +7F00 +ENDCHAR +STARTCHAR uniAAE6 +ENCODING 43750 +BBX 11 9 1 1 +BITMAP +0E00 +1100 +3180 +4A40 +8420 +8020 +4040 +4040 +2080 +ENDCHAR +STARTCHAR uniAAE7 +ENCODING 43751 +BBX 11 9 2 1 +BITMAP +60C0 +9120 +8A20 +8420 +8A20 +9120 +A0A0 +9120 +8E20 +ENDCHAR +STARTCHAR uniAAE8 +ENCODING 43752 +BBX 10 9 2 1 +BITMAP +FFC0 +4000 +4FC0 +4040 +4080 +4100 +4100 +4200 +4200 +ENDCHAR +STARTCHAR uniAAE9 +ENCODING 43753 +BBX 13 9 1 1 +BITMAP +FFF8 +4510 +28A0 +1040 +28A0 +4510 +4510 +28A0 +1040 +ENDCHAR +STARTCHAR uniAAEA +ENCODING 43754 +BBX 7 9 4 1 +BITMAP +7C +82 +82 +82 +FE +82 +82 +82 +FE +ENDCHAR +STARTCHAR uniAAEB +ENCODING 43755 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -16 1 +BITMAP +60 +90 +90 +7C +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniAAEC +ENCODING 43756 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -11 -1 +BITMAP +92 +92 +6C +ENDCHAR +STARTCHAR uniAAED +ENCODING 43757 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 6 -8 8 +BITMAP +80 +40 +20 +60 +A0 +40 +ENDCHAR +STARTCHAR uniAAEE +ENCODING 43758 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 12 -16 1 +BITMAP +60 +90 +70 +20 +20 +38 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniAAEF +ENCODING 43759 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 12 -6 1 +BITMAP +30 +48 +70 +20 +20 +E0 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniAAF0 +ENCODING 43760 +BBX 1 9 8 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniAAF1 +ENCODING 43761 +BBX 9 7 3 3 +BITMAP +8080 +6300 +1C00 +0000 +1C00 +6300 +8080 +ENDCHAR +STARTCHAR uniAAF2 +ENCODING 43762 +BBX 5 12 6 1 +BITMAP +20 +88 +70 +00 +70 +88 +08 +10 +60 +80 +88 +70 +ENDCHAR +STARTCHAR uniAAF3 +ENCODING 43763 +BBX 7 9 4 1 +BITMAP +7C +82 +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uniAAF4 +ENCODING 43764 +BBX 5 9 6 1 +BITMAP +E0 +10 +08 +08 +10 +20 +40 +20 +18 +ENDCHAR +STARTCHAR uniAAF5 +ENCODING 43765 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 6 -4 3 +BITMAP +40 +A0 +A0 +40 +40 +40 +ENDCHAR +STARTCHAR uniAAF6 +ENCODING 43766 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -9 -2 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uniAB01 +ENCODING 43777 +BBX 11 12 3 0 +BITMAP +3000 +3000 +3800 +7C00 +C600 +C600 +FE00 +FFE0 +C660 +C600 +C600 +C600 +ENDCHAR +STARTCHAR uniAB02 +ENCODING 43778 +BBX 11 12 3 0 +BITMAP +3000 +3000 +3800 +7C00 +C600 +C600 +FE00 +FE00 +C600 +C600 +C660 +C7E0 +ENDCHAR +STARTCHAR uniAB03 +ENCODING 43779 +BBX 7 12 5 0 +BITMAP +30 +30 +38 +7C +C6 +C6 +FE +FE +C6 +06 +06 +06 +ENDCHAR +STARTCHAR uniAB04 +ENCODING 43780 +BBX 11 12 3 0 +BITMAP +3000 +3000 +3800 +7C00 +C600 +C600 +FE00 +FE00 +C600 +C7C0 +C660 +C7C0 +ENDCHAR +STARTCHAR uniAB05 +ENCODING 43781 +BBX 7 12 5 0 +BITMAP +60 +70 +38 +7C +C6 +C6 +FE +FE +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uniAB06 +ENCODING 43782 +BBX 7 12 5 0 +BITMAP +30 +30 +38 +7C +C6 +C6 +FE +FE +C6 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uniAB09 +ENCODING 43785 +BBX 12 14 2 0 +BITMAP +1800 +1800 +1C00 +3E00 +6200 +7E00 +6200 +3400 +1800 +7F00 +C300 +C3F0 +0630 +0600 +ENDCHAR +STARTCHAR uniAB0A +ENCODING 43786 +BBX 11 14 2 0 +BITMAP +1800 +1800 +1C00 +3E00 +6200 +7E00 +6200 +3400 +1800 +7F00 +C300 +C300 +0660 +07E0 +ENDCHAR +STARTCHAR uniAB0B +ENCODING 43787 +BBX 8 14 4 0 +BITMAP +30 +30 +38 +7C +C4 +FC +C4 +68 +30 +FF +C3 +C3 +03 +03 +ENDCHAR +STARTCHAR uniAB0C +ENCODING 43788 +BBX 11 14 2 0 +BITMAP +1800 +1800 +1C00 +3E00 +6200 +7E00 +6200 +3400 +1800 +1800 +1800 +0FC0 +FE60 +C3C0 +ENDCHAR +STARTCHAR uniAB0D +ENCODING 43789 +BBX 11 14 2 0 +BITMAP +1800 +1800 +1C00 +3E00 +6200 +7FE0 +6260 +3400 +1800 +1800 +1800 +0C00 +FFC0 +C0C0 +ENDCHAR +STARTCHAR uniAB0E +ENCODING 43790 +BBX 9 14 3 0 +BITMAP +1800 +1C00 +3E00 +6200 +7E00 +6200 +3400 +1800 +3F80 +6180 +C000 +C000 +C000 +C000 +ENDCHAR +STARTCHAR uniAB11 +ENCODING 43793 +BBX 13 14 1 0 +BITMAP +C060 +FFE0 +8020 +3180 +3180 +3180 +3180 +3F80 +3F80 +31F8 +3198 +3198 +3180 +3180 +ENDCHAR +STARTCHAR uniAB12 +ENCODING 43794 +BBX 13 14 1 0 +BITMAP +C060 +FFE0 +8020 +3180 +3180 +3180 +3180 +3F80 +3F80 +3180 +3180 +3180 +3198 +31F8 +ENDCHAR +STARTCHAR uniAB13 +ENCODING 43795 +BBX 11 14 2 0 +BITMAP +C060 +FFE0 +8020 +3180 +3180 +3180 +3180 +3F80 +3F80 +3180 +3180 +0180 +0180 +0180 +ENDCHAR +STARTCHAR uniAB14 +ENCODING 43796 +BBX 13 14 1 0 +BITMAP +C060 +FFE0 +8020 +3180 +3180 +3180 +3180 +3F80 +3F80 +3180 +3180 +31F0 +3198 +31F0 +ENDCHAR +STARTCHAR uniAB15 +ENCODING 43797 +BBX 11 14 2 0 +BITMAP +C060 +FFE0 +8020 +0000 +70C0 +D8C0 +D8C0 +18C0 +1FC0 +1FC0 +18C0 +18C0 +18C0 +18C0 +ENDCHAR +STARTCHAR uniAB16 +ENCODING 43798 +BBX 11 14 2 0 +BITMAP +C060 +FFE0 +8020 +3180 +3180 +3180 +3180 +3F80 +3F80 +3180 +3180 +3000 +3000 +3000 +ENDCHAR +STARTCHAR uniAB20 +ENCODING 43808 +BBX 15 14 0 0 +BITMAP +6030 +7FF0 +4010 +0000 +1F80 +3FC0 +6260 +C230 +C230 +C230 +F338 +DAB6 +CAB2 +FBBE +ENDCHAR +STARTCHAR uniAB21 +ENCODING 43809 +BBX 16 14 0 0 +BITMAP +6030 +7FF0 +4010 +0000 +1F80 +3FC0 +6260 +C230 +C23F +C233 +F338 +DAB4 +CAB2 +FBBE +ENDCHAR +STARTCHAR uniAB22 +ENCODING 43810 +BBX 16 14 0 0 +BITMAP +6030 +7FF0 +4010 +0000 +1F80 +3FC0 +6260 +C230 +C230 +C230 +F330 +DAB0 +CAB3 +FBBF +ENDCHAR +STARTCHAR uniAB23 +ENCODING 43811 +BBX 14 14 1 0 +BITMAP +6030 +7FF0 +4010 +1FC0 +3FE0 +6230 +C230 +F330 +CAB0 +FBB0 +0030 +0068 +0064 +007C +ENDCHAR +STARTCHAR uniAB24 +ENCODING 43812 +BBX 16 14 0 0 +BITMAP +6030 +7FF0 +4010 +0000 +1F80 +3FC0 +6260 +C23F +C239 +C237 +F330 +DABC +CAB2 +FBBE +ENDCHAR +STARTCHAR uniAB25 +ENCODING 43813 +BBX 14 14 0 0 +BITMAP +6030 +7FF0 +4010 +1FC0 +7FE0 +C630 +E638 +9724 +F33C +0300 +0380 +0340 +0320 +03E0 +ENDCHAR +STARTCHAR uniAB26 +ENCODING 43814 +BBX 14 14 1 0 +BITMAP +6030 +7FF0 +4010 +1FC0 +3FE0 +3430 +6430 +4630 +C528 +C4A4 +E738 +D000 +C800 +F800 +ENDCHAR +STARTCHAR uniAB28 +ENCODING 43816 +BBX 10 13 3 0 +BITMAP +C0C0 +FFC0 +8040 +0C00 +1E00 +3300 +3300 +1E00 +3F00 +7380 +6180 +6180 +6180 +ENDCHAR +STARTCHAR uniAB29 +ENCODING 43817 +BBX 13 13 1 0 +BITMAP +C0C0 +FFC0 +8040 +0C00 +1E00 +3300 +3300 +1E00 +3F00 +7380 +61F8 +6198 +6180 +ENDCHAR +STARTCHAR uniAB2A +ENCODING 43818 +BBX 13 13 1 0 +BITMAP +C0C0 +FFC0 +8040 +0C00 +1E00 +3300 +3300 +1E00 +3F00 +7380 +6180 +6198 +61F8 +ENDCHAR +STARTCHAR uniAB2B +ENCODING 43819 +BBX 10 14 2 0 +BITMAP +C0C0 +FFC0 +8040 +0C00 +1E00 +3300 +3300 +1E00 +3F00 +7300 +6380 +6180 +0180 +0180 +ENDCHAR +STARTCHAR uniAB2C +ENCODING 43820 +BBX 12 13 2 0 +BITMAP +C180 +FF80 +8080 +0C00 +1E00 +3300 +3300 +1E00 +3F00 +7380 +61E0 +61B0 +61E0 +ENDCHAR +STARTCHAR uniAB2D +ENCODING 43821 +BBX 11 13 2 0 +BITMAP +C180 +FF80 +8080 +1800 +3C00 +67E0 +6660 +3C00 +7E00 +E700 +C300 +C300 +C300 +ENDCHAR +STARTCHAR uniAB2E +ENCODING 43822 +BBX 9 14 2 0 +BITMAP +C180 +FF80 +8080 +0C00 +1E00 +3300 +3300 +1E00 +3F00 +7380 +6180 +6180 +6000 +6000 +ENDCHAR +STARTCHAR uniAB30 +ENCODING 43824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +34 +4C +44 +FE +44 +44 +4C +34 +ENDCHAR +STARTCHAR uniAB31 +ENCODING 43825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +7C +92 +10 +70 +9E +92 +92 +7C +ENDCHAR +STARTCHAR uniAB32 +ENCODING 43826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +30 +48 +84 +88 +90 +A4 +48 +30 +ENDCHAR +STARTCHAR uniAB33 +ENCODING 43827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +3C +42 +42 +7E +40 +FE +40 +3E +ENDCHAR +STARTCHAR uniAB34 +ENCODING 43828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +1C +22 +22 +7E +A0 +A0 +A2 +1C +ENDCHAR +STARTCHAR uniAB35 +ENCODING 43829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +18 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniAB36 +ENCODING 43830 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +74 +8C +84 +84 +7C +04 +24 +54 +38 +10 +ENDCHAR +STARTCHAR uniAB37 +ENCODING 43831 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +30 +10 +14 +12 +7C +90 +50 +10 +10 +7C +ENDCHAR +STARTCHAR uniAB38 +ENCODING 43832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +30 +10 +12 +7C +90 +12 +7C +90 +10 +7C +ENDCHAR +STARTCHAR uniAB39 +ENCODING 43833 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +60 +20 +20 +70 +A8 +A8 +70 +20 +20 +F8 +ENDCHAR +STARTCHAR uniAB3A +ENCODING 43834 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +D8 +A4 +A4 +A4 +A4 +AE +B4 +A8 +ENDCHAR +STARTCHAR uniAB3B +ENCODING 43835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +B8 +C4 +84 +84 +84 +8E +94 +88 +ENDCHAR +STARTCHAR uniAB3C +ENCODING 43836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +88 +88 +9C +28 +10 +ENDCHAR +STARTCHAR uniAB3D +ENCODING 43837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +20 +50 +88 +88 +88 +88 +50 +20 +ENDCHAR +STARTCHAR uniAB3E +ENCODING 43838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +28 +50 +98 +A8 +A8 +C8 +50 +A0 +ENDCHAR +STARTCHAR uniAB3F +ENCODING 43839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +04 +78 +8C +14 +14 +24 +24 +C4 +78 +80 +ENDCHAR +STARTCHAR uniAB40 +ENCODING 43840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +6C +92 +90 +90 +9E +92 +92 +6C +ENDCHAR +STARTCHAR uniAB41 +ENCODING 43841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +02 +5C +A6 +26 +2A +EA +B2 +B2 +5C +ENDCHAR +STARTCHAR uniAB42 +ENCODING 43842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +6C +92 +12 +12 +FE +92 +92 +6C +ENDCHAR +STARTCHAR uniAB43 +ENCODING 43843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +4C +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uniAB44 +ENCODING 43844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +42 +9C +A6 +A6 +AA +AA +B2 +A2 +5C +ENDCHAR +STARTCHAR uniAB45 +ENCODING 43845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +20 +20 +20 +70 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uniAB46 +ENCODING 43846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +F8 +84 +84 +F8 +A0 +A0 +90 +90 +12 +0C +ENDCHAR +STARTCHAR uniAB47 +ENCODING 43847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 2 0 +BITMAP +A0 +C0 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniAB48 +ENCODING 43848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +A8 +D4 +94 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniAB49 +ENCODING 43849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 -1 +BITMAP +2C +32 +22 +20 +20 +70 +A0 +A0 +40 +ENDCHAR +STARTCHAR uniAB4A +ENCODING 43850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -1 +BITMAP +2A +35 +25 +20 +20 +70 +A0 +A0 +40 +ENDCHAR +STARTCHAR uniAB4B +ENCODING 43851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +CC +B4 +84 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uniAB4C +ENCODING 43852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +CC +B4 +84 +06 +05 +05 +05 +02 +ENDCHAR +STARTCHAR uniAB4D +ENCODING 43853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +18 +20 +20 +20 +20 +20 +20 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uniAB4E +ENCODING 43854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +80 +80 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uniAB4F +ENCODING 43855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +40 +40 +40 +FE +44 +44 +4C +34 +ENDCHAR +STARTCHAR uniAB50 +ENCODING 43856 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +92 +82 +82 +92 +92 +92 +92 +6E +ENDCHAR +STARTCHAR uniAB51 +ENCODING 43857 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +EC +92 +92 +92 +92 +82 +82 +92 +ENDCHAR +STARTCHAR uniAB52 +ENCODING 43858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +42 +A2 +A2 +22 +22 +22 +26 +1A +ENDCHAR +STARTCHAR uniAB53 +ENCODING 43859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +48 +48 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uniAB54 +ENCODING 43860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +84 +84 +48 +48 +30 +30 +4C +4A +8A +84 +ENDCHAR +STARTCHAR uniAB55 +ENCODING 43861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +42 +42 +24 +24 +18 +18 +24 +A4 +C2 +82 +ENDCHAR +STARTCHAR uniAB56 +ENCODING 43862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -1 +BITMAP +84 +84 +48 +30 +30 +4A +85 +85 +02 +ENDCHAR +STARTCHAR uniAB57 +ENCODING 43863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -1 +BITMAP +21 +21 +12 +0C +0C +12 +21 +41 +80 +ENDCHAR +STARTCHAR uniAB58 +ENCODING 43864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +42 +42 +24 +18 +1A +25 +45 +82 +ENDCHAR +STARTCHAR uniAB59 +ENCODING 43865 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +21 +21 +12 +0C +0C +12 +21 +A1 +C0 +80 +ENDCHAR +STARTCHAR uniAB5A +ENCODING 43866 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +80 +80 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uniAB5B +ENCODING 43867 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 3 +BITMAP +88 +70 +00 +70 +88 +ENDCHAR +STARTCHAR uniAB5C +ENCODING 43868 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 2 +BITMAP +80 +80 +B0 +C8 +88 +88 +88 +08 +30 +ENDCHAR +STARTCHAR uniAB5D +ENCODING 43869 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +70 +14 +12 +7C +90 +50 +10 +7C +ENDCHAR +STARTCHAR uniAB5E +ENCODING 43870 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +70 +10 +10 +74 +98 +10 +10 +7C +ENDCHAR +STARTCHAR uniAB5F +ENCODING 43871 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 4 +BITMAP +42 +A2 +22 +26 +1A +ENDCHAR +STARTCHAR uniAB60 +ENCODING 43872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +E0 +A0 +A0 +B8 +A4 +A4 +A4 +B8 +ENDCHAR +STARTCHAR uniAB61 +ENCODING 43873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +98 +A4 +A4 +FC +A0 +A0 +A4 +98 +ENDCHAR +STARTCHAR uniAB62 +ENCODING 43874 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +6C +92 +12 +1E +10 +10 +92 +6C +ENDCHAR +STARTCHAR uniAB63 +ENCODING 43875 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +8C +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uniAB64 +ENCODING 43876 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +64 +94 +8C +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uniAB65 +ENCODING 43877 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +7C +82 +82 +82 +44 +28 +28 +EE +ENDCHAR +STARTCHAR uniAB66 +ENCODING 43878 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +20 +20 +20 +7E +A2 +A4 +A4 +A8 +A8 +B0 +7E +08 +06 +ENDCHAR +STARTCHAR uniAB67 +ENCODING 43879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +40 +40 +46 +F9 +48 +44 +42 +41 +51 +2E +08 +06 +ENDCHAR +STARTCHAR uniAB68 +ENCODING 43880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +08 +0A +3C +48 +08 +88 +98 +68 +ENDCHAR +STARTCHAR uniAB69 +ENCODING 43881 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 4 +BITMAP +44 +6C +AA +92 +92 +ENDCHAR +STARTCHAR uniAB6A +ENCODING 43882 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +08 +08 +08 +F8 +08 +08 +08 +ENDCHAR +STARTCHAR uniAB6B +ENCODING 43883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +80 +80 +80 +F8 +80 +80 +80 +ENDCHAR +STARTCHAR uniAB70 +ENCODING 43888 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F0 +88 +84 +84 +84 +84 +88 +F0 +ENDCHAR +STARTCHAR uniAB71 +ENCODING 43889 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +F8 +84 +84 +F8 +A0 +90 +88 +86 +ENDCHAR +STARTCHAR uniAB72 +ENCODING 43890 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniAB73 +ENCODING 43891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +38 +10 +28 +24 +42 +A2 +AA +4C +ENDCHAR +STARTCHAR uniAB74 +ENCODING 43892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +60 +90 +96 +92 +9C +90 +90 +60 +ENDCHAR +STARTCHAR uniAB75 +ENCODING 43893 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 8 4 0 +BITMAP +80 +80 +00 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniAB76 +ENCODING 43894 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +78 +84 +40 +FE +08 +84 +84 +78 +ENDCHAR +STARTCHAR uniAB77 +ENCODING 43895 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +38 +04 +44 +A4 +A4 +C4 +84 +78 +ENDCHAR +STARTCHAR uniAB78 +ENCODING 43896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +98 +A8 +EC +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniAB79 +ENCODING 43897 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +4C +34 +04 +78 +ENDCHAR +STARTCHAR uniAB7A +ENCODING 43898 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +30 +48 +84 +84 +FC +84 +84 +84 +ENDCHAR +STARTCHAR uniAB7B +ENCODING 43899 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +08 +08 +08 +08 +08 +88 +88 +70 +ENDCHAR +STARTCHAR uniAB7C +ENCODING 43900 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +80 +80 +F8 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uniAB7D +ENCODING 43901 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +08 +08 +48 +A8 +BB +49 +0A +0C +ENDCHAR +STARTCHAR uniAB7E +ENCODING 43902 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +04 +04 +84 +F8 +80 +80 +80 +ENDCHAR +STARTCHAR uniAB7F +ENCODING 43903 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +1C +22 +22 +3E +22 +22 +AA +CC +ENDCHAR +STARTCHAR uniAB80 +ENCODING 43904 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +80 +80 +80 +F8 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniAB81 +ENCODING 43905 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +84 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniAB82 +ENCODING 43906 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +30 +48 +48 +48 +30 +B7 +B4 +48 +ENDCHAR +STARTCHAR uniAB83 +ENCODING 43907 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +B4 +B4 +CC +CC +84 +ENDCHAR +STARTCHAR uniAB84 +ENCODING 43908 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +0C +12 +10 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniAB85 +ENCODING 43909 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +A4 +98 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniAB86 +ENCODING 43910 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +3C +40 +80 +A0 +B8 +A4 +88 +70 +ENDCHAR +STARTCHAR uniAB87 +ENCODING 43911 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +CC +CC +B4 +B4 +84 +84 +84 +ENDCHAR +STARTCHAR uniAB88 +ENCODING 43912 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +70 +88 +04 +04 +E4 +3C +04 +04 +ENDCHAR +STARTCHAR uniAB89 +ENCODING 43913 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +30 +14 +2A +40 +78 +A4 +A4 +18 +ENDCHAR +STARTCHAR uniAB8A +ENCODING 43914 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +64 +94 +94 +9C +94 +94 +94 +64 +ENDCHAR +STARTCHAR uniAB8B +ENCODING 43915 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uniAB8C +ENCODING 43916 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +70 +20 +70 +88 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uniAB8D +ENCODING 43917 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -1 +BITMAP +47 +42 +42 +26 +1A +02 +E2 +44 +38 +ENDCHAR +STARTCHAR uniAB8E +ENCODING 43918 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +FC +84 +84 +78 +ENDCHAR +STARTCHAR uniAB8F +ENCODING 43919 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +40 +40 +F0 +40 +40 +4E +44 +3C +04 +18 +ENDCHAR +STARTCHAR uniAB90 +ENCODING 43920 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +78 +84 +80 +80 +9E +84 +84 +78 +ENDCHAR +STARTCHAR uniAB91 +ENCODING 43921 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +0C +12 +12 +12 +22 +A2 +A2 +42 +ENDCHAR +STARTCHAR uniAB92 +ENCODING 43922 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +ENDCHAR +STARTCHAR uniAB93 +ENCODING 43923 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +04 +08 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uniAB94 +ENCODING 43924 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 -1 +BITMAP +38 +44 +E4 +04 +E4 +44 +3C +04 +04 +ENDCHAR +STARTCHAR uniAB95 +ENCODING 43925 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +60 +90 +90 +94 +9A +92 +90 +60 +ENDCHAR +STARTCHAR uniAB96 +ENCODING 43926 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uniAB97 +ENCODING 43927 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +18 +24 +04 +84 +94 +94 +94 +68 +ENDCHAR +STARTCHAR uniAB98 +ENCODING 43928 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +CC +32 +52 +54 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uniAB99 +ENCODING 43929 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +A3 +A5 +66 +24 +14 +14 +08 +08 +ENDCHAR +STARTCHAR uniAB9A +ENCODING 43930 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +1C +22 +02 +9A +A2 +A2 +A2 +5C +ENDCHAR +STARTCHAR uniAB9B +ENCODING 43931 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +78 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uniAB9C +ENCODING 43932 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +78 +ENDCHAR +STARTCHAR uniAB9D +ENCODING 43933 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +1C +22 +22 +02 +1A +D2 +B2 +6C +ENDCHAR +STARTCHAR uniAB9E +ENCODING 43934 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +08 +18 +28 +48 +88 +FC +08 +08 +ENDCHAR +STARTCHAR uniAB9F +ENCODING 43935 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +80 +80 +80 +F8 +84 +84 +F8 +ENDCHAR +STARTCHAR uniABA0 +ENCODING 43936 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +10 +10 +10 +16 +BA +D0 +10 +10 +ENDCHAR +STARTCHAR uniABA1 +ENCODING 43937 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +64 +9A +E2 +40 +98 +84 +84 +78 +ENDCHAR +STARTCHAR uniABA2 +ENCODING 43938 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +84 +84 +B8 +90 +88 +84 +84 +ENDCHAR +STARTCHAR uniABA3 +ENCODING 43939 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +80 +80 +80 +80 +80 +88 +88 +70 +ENDCHAR +STARTCHAR uniABA4 +ENCODING 43940 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +AA +AA +92 +B2 +CA +CA +86 +82 +ENDCHAR +STARTCHAR uniABA5 +ENCODING 43941 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +78 +84 +8E +40 +3E +88 +84 +78 +ENDCHAR +STARTCHAR uniABA6 +ENCODING 43942 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +F0 +90 +10 +10 +12 +11 +11 +0E +ENDCHAR +STARTCHAR uniABA7 +ENCODING 43943 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +08 +08 +08 +08 +18 +28 +48 +88 +ENDCHAR +STARTCHAR uniABA8 +ENCODING 43944 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +F8 +08 +08 +08 +18 +28 +48 +88 +ENDCHAR +STARTCHAR uniABA9 +ENCODING 43945 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +82 +82 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uniABAA +ENCODING 43946 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uniABAB +ENCODING 43947 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +6C +92 +84 +C0 +A0 +90 +90 +60 +ENDCHAR +STARTCHAR uniABAC +ENCODING 43948 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +30 +48 +30 +48 +44 +AA +AA +44 +ENDCHAR +STARTCHAR uniABAD +ENCODING 43949 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +38 +44 +84 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uniABAE +ENCODING 43950 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uniABAF +ENCODING 43951 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uniABB0 +ENCODING 43952 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +04 +44 +A4 +7E +24 +24 +24 +18 +ENDCHAR +STARTCHAR uniABB1 +ENCODING 43953 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +66 +99 +9A +28 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uniABB2 +ENCODING 43954 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +84 +84 +F8 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniABB3 +ENCODING 43955 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +78 +84 +8E +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uniABB4 +ENCODING 43956 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +F1 +91 +12 +12 +14 +14 +18 +10 +ENDCHAR +STARTCHAR uniABB5 +ENCODING 43957 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +80 +80 +80 +86 +9A +E8 +88 +88 +88 +ENDCHAR +STARTCHAR uniABB6 +ENCODING 43958 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +88 +90 +A0 +C0 +C0 +A0 +90 +88 +ENDCHAR +STARTCHAR uniABB7 +ENCODING 43959 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +04 +04 +04 +7C +84 +84 +84 +78 +ENDCHAR +STARTCHAR uniABB8 +ENCODING 43960 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +60 +94 +8A +80 +80 +8A +94 +60 +ENDCHAR +STARTCHAR uniABB9 +ENCODING 43961 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +70 +88 +88 +80 +80 +9C +88 +76 +ENDCHAR +STARTCHAR uniABBA +ENCODING 43962 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +22 +55 +53 +51 +31 +19 +95 +62 +ENDCHAR +STARTCHAR uniABBB +ENCODING 43963 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +E4 +A4 +BC +84 +84 +78 +ENDCHAR +STARTCHAR uniABBC +ENCODING 43964 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +64 +92 +92 +E2 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uniABBD +ENCODING 43965 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +18 +24 +24 +14 +0C +84 +88 +70 +ENDCHAR +STARTCHAR uniABBE +ENCODING 43966 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +80 +F8 +84 +84 +78 +ENDCHAR +STARTCHAR uniABBF +ENCODING 43967 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +3C +42 +02 +02 +BA +92 +92 +6C +ENDCHAR +STARTCHAR uniABC0 +ENCODING 43968 +BBX 12 9 1 1 +BITMAP +FFF0 +4960 +49A0 +4B20 +4D20 +4920 +5920 +6920 +7FE0 +ENDCHAR +STARTCHAR uniABC1 +ENCODING 43969 +BBX 11 9 3 1 +BITMAP +3180 +4A40 +8420 +8020 +8020 +4040 +4040 +2080 +1100 +ENDCHAR +STARTCHAR uniABC2 +ENCODING 43970 +BBX 10 9 3 1 +BITMAP +FFC0 +0100 +0100 +3D00 +4300 +8000 +8000 +4200 +3C00 +ENDCHAR +STARTCHAR uniABC3 +ENCODING 43971 +BBX 12 9 1 1 +BITMAP +FFF0 +4800 +4800 +4800 +7FC0 +4980 +4A00 +4A20 +49C0 +ENDCHAR +STARTCHAR uniABC4 +ENCODING 43972 +BBX 12 9 1 1 +BITMAP +FFF0 +8910 +4920 +4920 +2940 +2940 +2940 +A950 +C930 +ENDCHAR +STARTCHAR uniABC5 +ENCODING 43973 +BBX 11 9 3 1 +BITMAP +FFE0 +2080 +4080 +4100 +8200 +8040 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uniABC6 +ENCODING 43974 +BBX 10 9 2 1 +BITMAP +FFC0 +8040 +4080 +4080 +2100 +3F00 +2100 +A140 +C0C0 +ENDCHAR +STARTCHAR uniABC7 +ENCODING 43975 +BBX 11 11 2 1 +BITMAP +0200 +0400 +7FC0 +4420 +2240 +2180 +1000 +1000 +9000 +9000 +6000 +ENDCHAR +STARTCHAR uniABC8 +ENCODING 43976 +BBX 10 9 3 1 +BITMAP +FFC0 +8000 +4600 +2900 +3140 +2080 +2000 +2000 +C000 +ENDCHAR +STARTCHAR uniABC9 +ENCODING 43977 +BBX 12 9 0 1 +BITMAP +07F0 +0490 +0490 +0490 +6490 +9490 +1490 +2490 +7FF0 +ENDCHAR +STARTCHAR uniABCA +ENCODING 43978 +BBX 11 9 3 1 +BITMAP +FFE0 +0400 +0400 +0400 +4440 +8420 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uniABCB +ENCODING 43979 +BBX 11 9 2 1 +BITMAP +FFE0 +8020 +4040 +4040 +2480 +2280 +2180 +2080 +C060 +ENDCHAR +STARTCHAR uniABCC +ENCODING 43980 +BBX 15 9 1 1 +BITMAP +FFFE +1010 +2008 +26C8 +1AB0 +0480 +0840 +1048 +2030 +ENDCHAR +STARTCHAR uniABCD +ENCODING 43981 +BBX 13 9 1 1 +BITMAP +FFF8 +0000 +0300 +0480 +0840 +1040 +1240 +2240 +C180 +ENDCHAR +STARTCHAR uniABCE +ENCODING 43982 +BBX 12 9 2 1 +BITMAP +FFF0 +4000 +41C0 +2240 +1F80 +0040 +2220 +5520 +48C0 +ENDCHAR +STARTCHAR uniABCF +ENCODING 43983 +BBX 10 9 3 1 +BITMAP +FFC0 +8000 +4000 +3000 +2C00 +2300 +2080 +2880 +C700 +ENDCHAR +STARTCHAR uniABD0 +ENCODING 43984 +BBX 9 9 3 1 +BITMAP +FF80 +8000 +8100 +8200 +FC00 +8000 +8080 +8100 +FE00 +ENDCHAR +STARTCHAR uniABD1 +ENCODING 43985 +BBX 11 9 2 1 +BITMAP +FFE0 +4900 +4900 +4900 +4900 +4900 +2920 +2940 +1F80 +ENDCHAR +STARTCHAR uniABD2 +ENCODING 43986 +BBX 11 9 3 1 +BITMAP +FF80 +4900 +4920 +4920 +48C0 +4800 +4800 +4800 +4800 +ENDCHAR +STARTCHAR uniABD3 +ENCODING 43987 +BBX 9 11 4 -1 +BITMAP +FF80 +0100 +0200 +0400 +0800 +1000 +2000 +4300 +FC00 +0400 +0300 +ENDCHAR +STARTCHAR uniABD4 +ENCODING 43988 +BBX 10 9 3 1 +BITMAP +7380 +8C40 +8440 +FC00 +8400 +8400 +8400 +8400 +FC00 +ENDCHAR +STARTCHAR uniABD5 +ENCODING 43989 +BBX 7 9 4 1 +BITMAP +FE +44 +28 +10 +28 +44 +82 +44 +38 +ENDCHAR +STARTCHAR uniABD6 +ENCODING 43990 +BBX 9 9 3 1 +BITMAP +FF80 +0080 +0700 +1800 +2000 +4100 +4100 +2200 +1C00 +ENDCHAR +STARTCHAR uniABD7 +ENCODING 43991 +BBX 10 9 4 1 +BITMAP +FFC0 +4480 +2880 +1100 +2900 +4500 +8300 +4480 +3840 +ENDCHAR +STARTCHAR uniABD8 +ENCODING 43992 +BBX 10 9 2 1 +BITMAP +7FC0 +1000 +1000 +1000 +1000 +7F00 +9200 +9240 +6180 +ENDCHAR +STARTCHAR uniABD9 +ENCODING 43993 +BBX 11 9 3 1 +BITMAP +FFE0 +0200 +0200 +0200 +4200 +8200 +8600 +4A00 +3200 +ENDCHAR +STARTCHAR uniABDA +ENCODING 43994 +BBX 9 9 3 1 +BITMAP +FF80 +1100 +1100 +9100 +6100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniABDB +ENCODING 43995 +BBX 11 9 2 1 +BITMAP +FFE0 +4920 +4920 +4900 +4900 +4900 +4900 +4900 +7F00 +ENDCHAR +STARTCHAR uniABDC +ENCODING 43996 +BBX 9 9 4 1 +BITMAP +FF80 +0100 +0100 +0100 +0100 +7100 +0D00 +0300 +0100 +ENDCHAR +STARTCHAR uniABDD +ENCODING 43997 +BBX 11 9 2 1 +BITMAP +FFE0 +4200 +4200 +7F80 +4200 +4200 +4200 +4200 +4200 +ENDCHAR +STARTCHAR uniABDE +ENCODING 43998 +BBX 11 9 2 1 +BITMAP +FFE0 +8420 +4440 +4440 +2480 +2480 +2480 +A4A0 +C460 +ENDCHAR +STARTCHAR uniABDF +ENCODING 43999 +BBX 11 9 2 1 +BITMAP +FFE0 +1240 +2480 +4800 +4880 +4700 +2020 +2040 +1F80 +ENDCHAR +STARTCHAR uniABE0 +ENCODING 44000 +BBX 8 9 2 1 +BITMAP +81 +82 +84 +88 +FE +09 +09 +09 +06 +ENDCHAR +STARTCHAR uniABE1 +ENCODING 44001 +BBX 9 9 3 1 +BITMAP +FF80 +4900 +4900 +4900 +4900 +4900 +4900 +4900 +7F00 +ENDCHAR +STARTCHAR uniABE2 +ENCODING 44002 +BBX 9 9 3 1 +BITMAP +FF80 +8000 +4000 +3E00 +2100 +2080 +4880 +4900 +8600 +ENDCHAR +STARTCHAR uniABE3 +ENCODING 44003 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -6 8 +BITMAP +60 +10 +70 +90 +90 +60 +ENDCHAR +STARTCHAR uniABE4 +ENCODING 44004 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -6 1 +BITMAP +18 +24 +24 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniABE5 +ENCODING 44005 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -7 11 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uniABE6 +ENCODING 44006 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -4 4 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uniABE7 +ENCODING 44007 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -5 9 +BITMAP +10 +A8 +70 +20 +60 +ENDCHAR +STARTCHAR uniABE8 +ENCODING 44008 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -11 -2 +BITMAP +6C +92 +82 +44 +ENDCHAR +STARTCHAR uniABE9 +ENCODING 44009 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -6 9 +BITMAP +08 +94 +54 +38 +10 +ENDCHAR +STARTCHAR uniABEA +ENCODING 44010 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -3 7 +BITMAP +40 +A0 +A0 +60 +20 +40 +80 +ENDCHAR +STARTCHAR uniABEB +ENCODING 44011 +BBX 5 9 5 1 +BITMAP +88 +88 +88 +88 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uniABEC +ENCODING 44012 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -3 1 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uniABED +ENCODING 44013 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 14 1 -7 -1 +BITMAP +FFFC +ENDCHAR +STARTCHAR uniABF0 +ENCODING 44016 +BBX 10 10 2 2 +BITMAP +0C00 +3300 +4080 +4080 +8040 +8040 +4080 +4080 +3300 +0C00 +ENDCHAR +STARTCHAR uniABF1 +ENCODING 44017 +BBX 7 9 4 1 +BITMAP +38 +44 +82 +8C +40 +30 +08 +44 +38 +ENDCHAR +STARTCHAR uniABF2 +ENCODING 44018 +BBX 8 9 4 1 +BITMAP +38 +44 +82 +8C +40 +36 +49 +45 +39 +ENDCHAR +STARTCHAR uniABF3 +ENCODING 44019 +BBX 11 9 4 1 +BITMAP +3800 +4400 +8200 +8CC0 +4120 +36A0 +4A80 +4A80 +3100 +ENDCHAR +STARTCHAR uniABF4 +ENCODING 44020 +BBX 7 9 4 1 +BITMAP +38 +44 +08 +30 +40 +8C +82 +44 +38 +ENDCHAR +STARTCHAR uniABF5 +ENCODING 44021 +BBX 10 9 2 1 +BITMAP +3F00 +4080 +8840 +9440 +5400 +3800 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uniABF6 +ENCODING 44022 +BBX 10 10 2 0 +BITMAP +3F00 +4080 +8840 +9480 +5400 +3800 +1200 +1400 +1800 +1000 +ENDCHAR +STARTCHAR uniABF7 +ENCODING 44023 +BBX 10 9 3 1 +BITMAP +6180 +8A40 +4A80 +0900 +1E80 +2840 +4440 +4880 +3100 +ENDCHAR +STARTCHAR uniABF8 +ENCODING 44024 +BBX 10 10 2 0 +BITMAP +3F00 +4080 +8840 +9480 +5400 +3800 +1000 +5000 +3000 +1000 +ENDCHAR +STARTCHAR uniABF9 +ENCODING 44025 +BBX 10 10 2 0 +BITMAP +3F00 +4080 +8840 +9480 +5400 +3800 +1000 +7E00 +9000 +6000 +ENDCHAR +STARTCHAR uniAC00 +ENCODING 44032 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0108 +0108 +020E +0208 +0408 +0408 +0808 +3008 +C008 +0008 +0008 +ENDCHAR +STARTCHAR uniAC01 +ENCODING 44033 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAC02 +ENCODING 44034 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAC03 +ENCODING 44035 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAC04 +ENCODING 44036 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +040E +0808 +3008 +C008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAC05 +ENCODING 44037 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAC06 +ENCODING 44038 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAC07 +ENCODING 44039 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAC08 +ENCODING 44040 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAC09 +ENCODING 44041 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAC0A +ENCODING 44042 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAC0B +ENCODING 44043 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAC0C +ENCODING 44044 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAC0D +ENCODING 44045 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAC0E +ENCODING 44046 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAC0F +ENCODING 44047 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAC10 +ENCODING 44048 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAC11 +ENCODING 44049 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAC12 +ENCODING 44050 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAC13 +ENCODING 44051 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAC14 +ENCODING 44052 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAC15 +ENCODING 44053 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAC16 +ENCODING 44054 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAC17 +ENCODING 44055 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAC18 +ENCODING 44056 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAC19 +ENCODING 44057 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAC1A +ENCODING 44058 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAC1B +ENCODING 44059 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +020E +0408 +0808 +3008 +C008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAC1C +ENCODING 44060 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +0124 +0124 +0124 +023C +0224 +0424 +0424 +0824 +3024 +C024 +0024 +0024 +ENDCHAR +STARTCHAR uniAC1D +ENCODING 44061 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniAC1E +ENCODING 44062 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniAC1F +ENCODING 44063 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniAC20 +ENCODING 44064 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAC21 +ENCODING 44065 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAC22 +ENCODING 44066 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAC23 +ENCODING 44067 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAC24 +ENCODING 44068 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAC25 +ENCODING 44069 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniAC26 +ENCODING 44070 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAC27 +ENCODING 44071 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAC28 +ENCODING 44072 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAC29 +ENCODING 44073 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniAC2A +ENCODING 44074 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniAC2B +ENCODING 44075 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAC2C +ENCODING 44076 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAC2D +ENCODING 44077 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAC2E +ENCODING 44078 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniAC2F +ENCODING 44079 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAC30 +ENCODING 44080 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniAC31 +ENCODING 44081 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniAC32 +ENCODING 44082 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAC33 +ENCODING 44083 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAC34 +ENCODING 44084 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniAC35 +ENCODING 44085 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAC36 +ENCODING 44086 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniAC37 +ENCODING 44087 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +023C +0424 +0824 +3024 +C024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniAC38 +ENCODING 44088 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +010E +0108 +0208 +0208 +0408 +040E +0808 +3008 +C008 +0008 +0008 +ENDCHAR +STARTCHAR uniAC39 +ENCODING 44089 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAC3A +ENCODING 44090 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAC3B +ENCODING 44091 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAC3C +ENCODING 44092 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +010E +0208 +0408 +0808 +300E +C008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAC3D +ENCODING 44093 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAC3E +ENCODING 44094 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAC3F +ENCODING 44095 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAC40 +ENCODING 44096 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAC41 +ENCODING 44097 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAC42 +ENCODING 44098 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAC43 +ENCODING 44099 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAC44 +ENCODING 44100 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAC45 +ENCODING 44101 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAC46 +ENCODING 44102 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAC47 +ENCODING 44103 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAC48 +ENCODING 44104 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAC49 +ENCODING 44105 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAC4A +ENCODING 44106 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAC4B +ENCODING 44107 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAC4C +ENCODING 44108 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAC4D +ENCODING 44109 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAC4E +ENCODING 44110 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAC4F +ENCODING 44111 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAC50 +ENCODING 44112 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAC51 +ENCODING 44113 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAC52 +ENCODING 44114 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAC53 +ENCODING 44115 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +0208 +040E +0808 +3008 +C008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAC54 +ENCODING 44116 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +013C +0124 +0124 +0224 +0224 +043C +0424 +0824 +3024 +C024 +0024 +0024 +ENDCHAR +STARTCHAR uniAC55 +ENCODING 44117 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniAC56 +ENCODING 44118 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniAC57 +ENCODING 44119 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniAC58 +ENCODING 44120 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +0424 +083C +3024 +C024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAC59 +ENCODING 44121 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAC5A +ENCODING 44122 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAC5B +ENCODING 44123 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAC5C +ENCODING 44124 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAC5D +ENCODING 44125 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniAC5E +ENCODING 44126 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAC5F +ENCODING 44127 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAC60 +ENCODING 44128 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAC61 +ENCODING 44129 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniAC62 +ENCODING 44130 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniAC63 +ENCODING 44131 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAC64 +ENCODING 44132 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAC65 +ENCODING 44133 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAC66 +ENCODING 44134 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniAC67 +ENCODING 44135 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAC68 +ENCODING 44136 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniAC69 +ENCODING 44137 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniAC6A +ENCODING 44138 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAC6B +ENCODING 44139 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAC6C +ENCODING 44140 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniAC6D +ENCODING 44141 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAC6E +ENCODING 44142 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniAC6F +ENCODING 44143 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +0224 +043C +0824 +3024 +C024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniAC70 +ENCODING 44144 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0108 +0108 +0278 +0208 +0408 +0408 +0808 +3008 +C008 +0008 +0008 +ENDCHAR +STARTCHAR uniAC71 +ENCODING 44145 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAC72 +ENCODING 44146 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAC73 +ENCODING 44147 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAC74 +ENCODING 44148 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAC75 +ENCODING 44149 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAC76 +ENCODING 44150 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAC77 +ENCODING 44151 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAC78 +ENCODING 44152 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAC79 +ENCODING 44153 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAC7A +ENCODING 44154 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAC7B +ENCODING 44155 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAC7C +ENCODING 44156 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAC7D +ENCODING 44157 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAC7E +ENCODING 44158 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAC7F +ENCODING 44159 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAC80 +ENCODING 44160 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAC81 +ENCODING 44161 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAC82 +ENCODING 44162 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAC83 +ENCODING 44163 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAC84 +ENCODING 44164 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAC85 +ENCODING 44165 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAC86 +ENCODING 44166 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAC87 +ENCODING 44167 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAC88 +ENCODING 44168 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAC89 +ENCODING 44169 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAC8A +ENCODING 44170 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAC8B +ENCODING 44171 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0278 +0408 +0808 +3008 +C008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAC8C +ENCODING 44172 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +0124 +0124 +01E4 +0224 +0224 +0424 +0424 +0824 +3024 +C024 +0024 +0024 +ENDCHAR +STARTCHAR uniAC8D +ENCODING 44173 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniAC8E +ENCODING 44174 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniAC8F +ENCODING 44175 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniAC90 +ENCODING 44176 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAC91 +ENCODING 44177 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAC92 +ENCODING 44178 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAC93 +ENCODING 44179 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAC94 +ENCODING 44180 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAC95 +ENCODING 44181 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniAC96 +ENCODING 44182 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAC97 +ENCODING 44183 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAC98 +ENCODING 44184 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAC99 +ENCODING 44185 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniAC9A +ENCODING 44186 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniAC9B +ENCODING 44187 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAC9C +ENCODING 44188 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAC9D +ENCODING 44189 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAC9E +ENCODING 44190 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniAC9F +ENCODING 44191 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniACA0 +ENCODING 44192 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniACA1 +ENCODING 44193 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniACA2 +ENCODING 44194 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniACA3 +ENCODING 44195 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniACA4 +ENCODING 44196 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniACA5 +ENCODING 44197 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniACA6 +ENCODING 44198 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniACA7 +ENCODING 44199 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +02E4 +0424 +0824 +3024 +C024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniACA8 +ENCODING 44200 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0178 +0108 +0208 +0208 +0478 +0408 +0808 +3008 +C008 +0008 +0008 +ENDCHAR +STARTCHAR uniACA9 +ENCODING 44201 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniACAA +ENCODING 44202 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniACAB +ENCODING 44203 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniACAC +ENCODING 44204 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniACAD +ENCODING 44205 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniACAE +ENCODING 44206 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniACAF +ENCODING 44207 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniACB0 +ENCODING 44208 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniACB1 +ENCODING 44209 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniACB2 +ENCODING 44210 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniACB3 +ENCODING 44211 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniACB4 +ENCODING 44212 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniACB5 +ENCODING 44213 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniACB6 +ENCODING 44214 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniACB7 +ENCODING 44215 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniACB8 +ENCODING 44216 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniACB9 +ENCODING 44217 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniACBA +ENCODING 44218 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniACBB +ENCODING 44219 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniACBC +ENCODING 44220 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniACBD +ENCODING 44221 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniACBE +ENCODING 44222 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniACBF +ENCODING 44223 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniACC0 +ENCODING 44224 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniACC1 +ENCODING 44225 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniACC2 +ENCODING 44226 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniACC3 +ENCODING 44227 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +0208 +0408 +0878 +3008 +C008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniACC4 +ENCODING 44228 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +0124 +01E4 +0124 +0224 +0224 +05E4 +0424 +0824 +3024 +C024 +0024 +0024 +ENDCHAR +STARTCHAR uniACC5 +ENCODING 44229 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniACC6 +ENCODING 44230 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniACC7 +ENCODING 44231 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniACC8 +ENCODING 44232 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniACC9 +ENCODING 44233 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniACCA +ENCODING 44234 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniACCB +ENCODING 44235 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniACCC +ENCODING 44236 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniACCD +ENCODING 44237 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniACCE +ENCODING 44238 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniACCF +ENCODING 44239 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniACD0 +ENCODING 44240 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniACD1 +ENCODING 44241 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniACD2 +ENCODING 44242 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniACD3 +ENCODING 44243 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniACD4 +ENCODING 44244 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniACD5 +ENCODING 44245 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniACD6 +ENCODING 44246 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniACD7 +ENCODING 44247 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniACD8 +ENCODING 44248 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniACD9 +ENCODING 44249 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniACDA +ENCODING 44250 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniACDB +ENCODING 44251 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniACDC +ENCODING 44252 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniACDD +ENCODING 44253 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniACDE +ENCODING 44254 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniACDF +ENCODING 44255 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +0224 +04E4 +0824 +3024 +C024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniACE0 +ENCODING 44256 +BBX 15 13 0 0 +BITMAP +3FF8 +0008 +0008 +0008 +0008 +0008 +0008 +0108 +0110 +0110 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniACE1 +ENCODING 44257 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniACE2 +ENCODING 44258 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniACE3 +ENCODING 44259 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniACE4 +ENCODING 44260 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniACE5 +ENCODING 44261 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniACE6 +ENCODING 44262 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniACE7 +ENCODING 44263 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniACE8 +ENCODING 44264 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniACE9 +ENCODING 44265 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniACEA +ENCODING 44266 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniACEB +ENCODING 44267 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniACEC +ENCODING 44268 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniACED +ENCODING 44269 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniACEE +ENCODING 44270 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniACEF +ENCODING 44271 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniACF0 +ENCODING 44272 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniACF1 +ENCODING 44273 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniACF2 +ENCODING 44274 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniACF3 +ENCODING 44275 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniACF4 +ENCODING 44276 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniACF5 +ENCODING 44277 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniACF6 +ENCODING 44278 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniACF7 +ENCODING 44279 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniACF8 +ENCODING 44280 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniACF9 +ENCODING 44281 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniACFA +ENCODING 44282 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniACFB +ENCODING 44283 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0110 +0110 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniACFC +ENCODING 44284 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0108 +0108 +010E +1208 +1208 +1008 +1008 +1008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniACFD +ENCODING 44285 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniACFE +ENCODING 44286 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniACFF +ENCODING 44287 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAD00 +ENCODING 44288 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAD01 +ENCODING 44289 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAD02 +ENCODING 44290 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAD03 +ENCODING 44291 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAD04 +ENCODING 44292 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAD05 +ENCODING 44293 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAD06 +ENCODING 44294 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAD07 +ENCODING 44295 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAD08 +ENCODING 44296 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAD09 +ENCODING 44297 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAD0A +ENCODING 44298 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAD0B +ENCODING 44299 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAD0C +ENCODING 44300 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAD0D +ENCODING 44301 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAD0E +ENCODING 44302 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAD0F +ENCODING 44303 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD10 +ENCODING 44304 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAD11 +ENCODING 44305 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAD12 +ENCODING 44306 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD13 +ENCODING 44307 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD14 +ENCODING 44308 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAD15 +ENCODING 44309 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAD16 +ENCODING 44310 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAD17 +ENCODING 44311 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +110E +1208 +1008 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAD18 +ENCODING 44312 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +0124 +0124 +0124 +013C +1224 +1224 +1024 +1024 +1024 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniAD19 +ENCODING 44313 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniAD1A +ENCODING 44314 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniAD1B +ENCODING 44315 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniAD1C +ENCODING 44316 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAD1D +ENCODING 44317 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAD1E +ENCODING 44318 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAD1F +ENCODING 44319 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAD20 +ENCODING 44320 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAD21 +ENCODING 44321 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniAD22 +ENCODING 44322 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAD23 +ENCODING 44323 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAD24 +ENCODING 44324 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAD25 +ENCODING 44325 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniAD26 +ENCODING 44326 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniAD27 +ENCODING 44327 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAD28 +ENCODING 44328 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAD29 +ENCODING 44329 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAD2A +ENCODING 44330 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniAD2B +ENCODING 44331 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAD2C +ENCODING 44332 +BBX 15 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniAD2D +ENCODING 44333 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniAD2E +ENCODING 44334 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAD2F +ENCODING 44335 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAD30 +ENCODING 44336 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniAD31 +ENCODING 44337 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAD32 +ENCODING 44338 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniAD33 +ENCODING 44339 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +113C +1224 +1024 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniAD34 +ENCODING 44340 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0108 +0108 +0108 +1208 +1208 +1008 +1008 +1008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniAD35 +ENCODING 44341 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAD36 +ENCODING 44342 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAD37 +ENCODING 44343 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAD38 +ENCODING 44344 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAD39 +ENCODING 44345 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAD3A +ENCODING 44346 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAD3B +ENCODING 44347 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAD3C +ENCODING 44348 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAD3D +ENCODING 44349 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAD3E +ENCODING 44350 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAD3F +ENCODING 44351 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAD40 +ENCODING 44352 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAD41 +ENCODING 44353 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAD42 +ENCODING 44354 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAD43 +ENCODING 44355 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAD44 +ENCODING 44356 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAD45 +ENCODING 44357 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAD46 +ENCODING 44358 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAD47 +ENCODING 44359 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD48 +ENCODING 44360 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAD49 +ENCODING 44361 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAD4A +ENCODING 44362 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD4B +ENCODING 44363 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD4C +ENCODING 44364 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAD4D +ENCODING 44365 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAD4E +ENCODING 44366 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAD4F +ENCODING 44367 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +1108 +1208 +1008 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAD50 +ENCODING 44368 +BBX 15 13 0 0 +BITMAP +3FF8 +0008 +0008 +0008 +0008 +0008 +0008 +0888 +0890 +0890 +0880 +0880 +FFFE +ENDCHAR +STARTCHAR uniAD51 +ENCODING 44369 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAD52 +ENCODING 44370 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAD53 +ENCODING 44371 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAD54 +ENCODING 44372 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAD55 +ENCODING 44373 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAD56 +ENCODING 44374 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAD57 +ENCODING 44375 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAD58 +ENCODING 44376 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAD59 +ENCODING 44377 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAD5A +ENCODING 44378 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAD5B +ENCODING 44379 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAD5C +ENCODING 44380 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAD5D +ENCODING 44381 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAD5E +ENCODING 44382 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAD5F +ENCODING 44383 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAD60 +ENCODING 44384 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniAD61 +ENCODING 44385 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniAD62 +ENCODING 44386 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAD63 +ENCODING 44387 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD64 +ENCODING 44388 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAD65 +ENCODING 44389 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAD66 +ENCODING 44390 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD67 +ENCODING 44391 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD68 +ENCODING 44392 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAD69 +ENCODING 44393 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAD6A +ENCODING 44394 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAD6B +ENCODING 44395 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0890 +0890 +0880 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAD6C +ENCODING 44396 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0008 +0010 +0010 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniAD6D +ENCODING 44397 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAD6E +ENCODING 44398 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAD6F +ENCODING 44399 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAD70 +ENCODING 44400 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAD71 +ENCODING 44401 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAD72 +ENCODING 44402 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAD73 +ENCODING 44403 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAD74 +ENCODING 44404 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAD75 +ENCODING 44405 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAD76 +ENCODING 44406 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAD77 +ENCODING 44407 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAD78 +ENCODING 44408 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAD79 +ENCODING 44409 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAD7A +ENCODING 44410 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAD7B +ENCODING 44411 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAD7C +ENCODING 44412 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniAD7D +ENCODING 44413 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniAD7E +ENCODING 44414 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAD7F +ENCODING 44415 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD80 +ENCODING 44416 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAD81 +ENCODING 44417 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAD82 +ENCODING 44418 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD83 +ENCODING 44419 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD84 +ENCODING 44420 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAD85 +ENCODING 44421 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAD86 +ENCODING 44422 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAD87 +ENCODING 44423 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAD88 +ENCODING 44424 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0108 +0208 +0208 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniAD89 +ENCODING 44425 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAD8A +ENCODING 44426 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAD8B +ENCODING 44427 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAD8C +ENCODING 44428 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAD8D +ENCODING 44429 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAD8E +ENCODING 44430 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAD8F +ENCODING 44431 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAD90 +ENCODING 44432 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAD91 +ENCODING 44433 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAD92 +ENCODING 44434 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAD93 +ENCODING 44435 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAD94 +ENCODING 44436 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAD95 +ENCODING 44437 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAD96 +ENCODING 44438 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAD97 +ENCODING 44439 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAD98 +ENCODING 44440 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAD99 +ENCODING 44441 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAD9A +ENCODING 44442 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAD9B +ENCODING 44443 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD9C +ENCODING 44444 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAD9D +ENCODING 44445 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAD9E +ENCODING 44446 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAD9F +ENCODING 44447 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniADA0 +ENCODING 44448 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniADA1 +ENCODING 44449 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniADA2 +ENCODING 44450 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniADA3 +ENCODING 44451 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniADA4 +ENCODING 44452 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0124 +0124 +0224 +0224 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniADA5 +ENCODING 44453 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniADA6 +ENCODING 44454 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniADA7 +ENCODING 44455 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniADA8 +ENCODING 44456 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniADA9 +ENCODING 44457 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniADAA +ENCODING 44458 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniADAB +ENCODING 44459 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniADAC +ENCODING 44460 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniADAD +ENCODING 44461 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniADAE +ENCODING 44462 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniADAF +ENCODING 44463 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniADB0 +ENCODING 44464 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniADB1 +ENCODING 44465 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniADB2 +ENCODING 44466 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniADB3 +ENCODING 44467 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniADB4 +ENCODING 44468 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniADB5 +ENCODING 44469 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniADB6 +ENCODING 44470 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniADB7 +ENCODING 44471 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniADB8 +ENCODING 44472 +BBX 15 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniADB9 +ENCODING 44473 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniADBA +ENCODING 44474 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniADBB +ENCODING 44475 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniADBC +ENCODING 44476 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniADBD +ENCODING 44477 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniADBE +ENCODING 44478 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniADBF +ENCODING 44479 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0224 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniADC0 +ENCODING 44480 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0108 +0208 +0208 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniADC1 +ENCODING 44481 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniADC2 +ENCODING 44482 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniADC3 +ENCODING 44483 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniADC4 +ENCODING 44484 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniADC5 +ENCODING 44485 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniADC6 +ENCODING 44486 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniADC7 +ENCODING 44487 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniADC8 +ENCODING 44488 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniADC9 +ENCODING 44489 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniADCA +ENCODING 44490 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniADCB +ENCODING 44491 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniADCC +ENCODING 44492 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniADCD +ENCODING 44493 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniADCE +ENCODING 44494 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniADCF +ENCODING 44495 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniADD0 +ENCODING 44496 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniADD1 +ENCODING 44497 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniADD2 +ENCODING 44498 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniADD3 +ENCODING 44499 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniADD4 +ENCODING 44500 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniADD5 +ENCODING 44501 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniADD6 +ENCODING 44502 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniADD7 +ENCODING 44503 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniADD8 +ENCODING 44504 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniADD9 +ENCODING 44505 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniADDA +ENCODING 44506 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniADDB +ENCODING 44507 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniADDC +ENCODING 44508 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0008 +0010 +0010 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniADDD +ENCODING 44509 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniADDE +ENCODING 44510 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniADDF +ENCODING 44511 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniADE0 +ENCODING 44512 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniADE1 +ENCODING 44513 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniADE2 +ENCODING 44514 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniADE3 +ENCODING 44515 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniADE4 +ENCODING 44516 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniADE5 +ENCODING 44517 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniADE6 +ENCODING 44518 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniADE7 +ENCODING 44519 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniADE8 +ENCODING 44520 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniADE9 +ENCODING 44521 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniADEA +ENCODING 44522 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniADEB +ENCODING 44523 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniADEC +ENCODING 44524 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniADED +ENCODING 44525 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniADEE +ENCODING 44526 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniADEF +ENCODING 44527 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniADF0 +ENCODING 44528 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniADF1 +ENCODING 44529 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniADF2 +ENCODING 44530 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniADF3 +ENCODING 44531 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniADF4 +ENCODING 44532 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniADF5 +ENCODING 44533 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniADF6 +ENCODING 44534 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniADF7 +ENCODING 44535 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniADF8 +ENCODING 44536 +BBX 15 13 0 0 +BITMAP +3FF8 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0010 +0010 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniADF9 +ENCODING 44537 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniADFA +ENCODING 44538 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniADFB +ENCODING 44539 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniADFC +ENCODING 44540 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniADFD +ENCODING 44541 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniADFE +ENCODING 44542 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniADFF +ENCODING 44543 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAE00 +ENCODING 44544 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAE01 +ENCODING 44545 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAE02 +ENCODING 44546 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAE03 +ENCODING 44547 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAE04 +ENCODING 44548 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAE05 +ENCODING 44549 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAE06 +ENCODING 44550 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAE07 +ENCODING 44551 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAE08 +ENCODING 44552 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniAE09 +ENCODING 44553 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniAE0A +ENCODING 44554 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAE0B +ENCODING 44555 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE0C +ENCODING 44556 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAE0D +ENCODING 44557 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAE0E +ENCODING 44558 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE0F +ENCODING 44559 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE10 +ENCODING 44560 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAE11 +ENCODING 44561 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAE12 +ENCODING 44562 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAE13 +ENCODING 44563 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +0008 +0010 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAE14 +ENCODING 44564 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0108 +0108 +0108 +0208 +0208 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniAE15 +ENCODING 44565 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAE16 +ENCODING 44566 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAE17 +ENCODING 44567 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAE18 +ENCODING 44568 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE19 +ENCODING 44569 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAE1A +ENCODING 44570 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAE1B +ENCODING 44571 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE1C +ENCODING 44572 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE1D +ENCODING 44573 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAE1E +ENCODING 44574 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAE1F +ENCODING 44575 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAE20 +ENCODING 44576 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAE21 +ENCODING 44577 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAE22 +ENCODING 44578 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAE23 +ENCODING 44579 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAE24 +ENCODING 44580 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAE25 +ENCODING 44581 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAE26 +ENCODING 44582 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAE27 +ENCODING 44583 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE28 +ENCODING 44584 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAE29 +ENCODING 44585 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAE2A +ENCODING 44586 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE2B +ENCODING 44587 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE2C +ENCODING 44588 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAE2D +ENCODING 44589 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE2E +ENCODING 44590 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAE2F +ENCODING 44591 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +0208 +0008 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAE30 +ENCODING 44592 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0108 +0108 +0208 +0208 +0408 +0408 +0808 +3008 +C008 +0008 +0008 +ENDCHAR +STARTCHAR uniAE31 +ENCODING 44593 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAE32 +ENCODING 44594 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAE33 +ENCODING 44595 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAE34 +ENCODING 44596 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE35 +ENCODING 44597 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAE36 +ENCODING 44598 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAE37 +ENCODING 44599 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE38 +ENCODING 44600 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE39 +ENCODING 44601 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAE3A +ENCODING 44602 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAE3B +ENCODING 44603 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAE3C +ENCODING 44604 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAE3D +ENCODING 44605 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAE3E +ENCODING 44606 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAE3F +ENCODING 44607 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAE40 +ENCODING 44608 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAE41 +ENCODING 44609 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAE42 +ENCODING 44610 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAE43 +ENCODING 44611 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE44 +ENCODING 44612 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAE45 +ENCODING 44613 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAE46 +ENCODING 44614 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE47 +ENCODING 44615 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE48 +ENCODING 44616 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAE49 +ENCODING 44617 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE4A +ENCODING 44618 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAE4B +ENCODING 44619 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0208 +0408 +0808 +3008 +C008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAE4C +ENCODING 44620 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +1108 +1108 +110E +2208 +2208 +2208 +4408 +4408 +8808 +0008 +0008 +ENDCHAR +STARTCHAR uniAE4D +ENCODING 44621 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAE4E +ENCODING 44622 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAE4F +ENCODING 44623 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAE50 +ENCODING 44624 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +220E +2208 +4408 +8808 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE51 +ENCODING 44625 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAE52 +ENCODING 44626 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAE53 +ENCODING 44627 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE54 +ENCODING 44628 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE55 +ENCODING 44629 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAE56 +ENCODING 44630 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAE57 +ENCODING 44631 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAE58 +ENCODING 44632 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAE59 +ENCODING 44633 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAE5A +ENCODING 44634 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAE5B +ENCODING 44635 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAE5C +ENCODING 44636 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAE5D +ENCODING 44637 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAE5E +ENCODING 44638 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAE5F +ENCODING 44639 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE60 +ENCODING 44640 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAE61 +ENCODING 44641 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAE62 +ENCODING 44642 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE63 +ENCODING 44643 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE64 +ENCODING 44644 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAE65 +ENCODING 44645 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE66 +ENCODING 44646 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAE67 +ENCODING 44647 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +2208 +2208 +4408 +8808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAE68 +ENCODING 44648 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +1124 +1124 +1124 +113C +2224 +2224 +2224 +4424 +4424 +8824 +0024 +0024 +ENDCHAR +STARTCHAR uniAE69 +ENCODING 44649 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniAE6A +ENCODING 44650 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniAE6B +ENCODING 44651 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniAE6C +ENCODING 44652 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAE6D +ENCODING 44653 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAE6E +ENCODING 44654 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAE6F +ENCODING 44655 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAE70 +ENCODING 44656 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAE71 +ENCODING 44657 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniAE72 +ENCODING 44658 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAE73 +ENCODING 44659 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAE74 +ENCODING 44660 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAE75 +ENCODING 44661 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniAE76 +ENCODING 44662 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniAE77 +ENCODING 44663 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAE78 +ENCODING 44664 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAE79 +ENCODING 44665 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAE7A +ENCODING 44666 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniAE7B +ENCODING 44667 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAE7C +ENCODING 44668 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniAE7D +ENCODING 44669 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniAE7E +ENCODING 44670 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAE7F +ENCODING 44671 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAE80 +ENCODING 44672 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniAE81 +ENCODING 44673 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAE82 +ENCODING 44674 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniAE83 +ENCODING 44675 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +2224 +2224 +4424 +8824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniAE84 +ENCODING 44676 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +110E +1108 +1108 +2208 +2208 +220E +4408 +4408 +8808 +0008 +0008 +ENDCHAR +STARTCHAR uniAE85 +ENCODING 44677 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAE86 +ENCODING 44678 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAE87 +ENCODING 44679 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAE88 +ENCODING 44680 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +110E +1108 +2208 +2208 +440E +8808 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE89 +ENCODING 44681 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAE8A +ENCODING 44682 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAE8B +ENCODING 44683 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE8C +ENCODING 44684 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE8D +ENCODING 44685 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAE8E +ENCODING 44686 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAE8F +ENCODING 44687 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAE90 +ENCODING 44688 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAE91 +ENCODING 44689 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAE92 +ENCODING 44690 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAE93 +ENCODING 44691 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAE94 +ENCODING 44692 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAE95 +ENCODING 44693 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAE96 +ENCODING 44694 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAE97 +ENCODING 44695 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE98 +ENCODING 44696 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAE99 +ENCODING 44697 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAE9A +ENCODING 44698 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE9B +ENCODING 44699 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAE9C +ENCODING 44700 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAE9D +ENCODING 44701 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAE9E +ENCODING 44702 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAE9F +ENCODING 44703 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +110E +1108 +1108 +220E +2208 +4408 +8808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAEA0 +ENCODING 44704 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +1124 +1124 +1124 +2224 +223C +2224 +4424 +4424 +8824 +0024 +0024 +ENDCHAR +STARTCHAR uniAEA1 +ENCODING 44705 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniAEA2 +ENCODING 44706 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniAEA3 +ENCODING 44707 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniAEA4 +ENCODING 44708 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +2224 +223C +4424 +8824 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAEA5 +ENCODING 44709 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAEA6 +ENCODING 44710 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAEA7 +ENCODING 44711 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAEA8 +ENCODING 44712 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAEA9 +ENCODING 44713 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniAEAA +ENCODING 44714 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAEAB +ENCODING 44715 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAEAC +ENCODING 44716 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAEAD +ENCODING 44717 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniAEAE +ENCODING 44718 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniAEAF +ENCODING 44719 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAEB0 +ENCODING 44720 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAEB1 +ENCODING 44721 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAEB2 +ENCODING 44722 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniAEB3 +ENCODING 44723 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAEB4 +ENCODING 44724 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniAEB5 +ENCODING 44725 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniAEB6 +ENCODING 44726 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAEB7 +ENCODING 44727 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAEB8 +ENCODING 44728 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniAEB9 +ENCODING 44729 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAEBA +ENCODING 44730 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniAEBB +ENCODING 44731 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +113C +1124 +1124 +223C +2224 +4424 +8824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniAEBC +ENCODING 44732 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +1108 +1108 +1178 +2208 +2208 +2208 +4408 +4408 +8808 +0008 +0008 +ENDCHAR +STARTCHAR uniAEBD +ENCODING 44733 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAEBE +ENCODING 44734 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAEBF +ENCODING 44735 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAEC0 +ENCODING 44736 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAEC1 +ENCODING 44737 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAEC2 +ENCODING 44738 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAEC3 +ENCODING 44739 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAEC4 +ENCODING 44740 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAEC5 +ENCODING 44741 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAEC6 +ENCODING 44742 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAEC7 +ENCODING 44743 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAEC8 +ENCODING 44744 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAEC9 +ENCODING 44745 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAECA +ENCODING 44746 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAECB +ENCODING 44747 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAECC +ENCODING 44748 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAECD +ENCODING 44749 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAECE +ENCODING 44750 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAECF +ENCODING 44751 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAED0 +ENCODING 44752 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAED1 +ENCODING 44753 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAED2 +ENCODING 44754 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAED3 +ENCODING 44755 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAED4 +ENCODING 44756 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAED5 +ENCODING 44757 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAED6 +ENCODING 44758 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAED7 +ENCODING 44759 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1178 +2208 +2208 +4408 +8808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAED8 +ENCODING 44760 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +1124 +1124 +11E4 +1124 +2224 +2224 +2224 +4424 +4424 +8824 +0024 +0024 +ENDCHAR +STARTCHAR uniAED9 +ENCODING 44761 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniAEDA +ENCODING 44762 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniAEDB +ENCODING 44763 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniAEDC +ENCODING 44764 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAEDD +ENCODING 44765 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAEDE +ENCODING 44766 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAEDF +ENCODING 44767 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAEE0 +ENCODING 44768 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAEE1 +ENCODING 44769 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniAEE2 +ENCODING 44770 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAEE3 +ENCODING 44771 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAEE4 +ENCODING 44772 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAEE5 +ENCODING 44773 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniAEE6 +ENCODING 44774 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniAEE7 +ENCODING 44775 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAEE8 +ENCODING 44776 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAEE9 +ENCODING 44777 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAEEA +ENCODING 44778 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniAEEB +ENCODING 44779 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAEEC +ENCODING 44780 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniAEED +ENCODING 44781 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniAEEE +ENCODING 44782 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAEEF +ENCODING 44783 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAEF0 +ENCODING 44784 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniAEF1 +ENCODING 44785 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAEF2 +ENCODING 44786 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniAEF3 +ENCODING 44787 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +11E4 +2224 +2224 +4424 +8824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniAEF4 +ENCODING 44788 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +1178 +1108 +1108 +2208 +2278 +2208 +4408 +4408 +8808 +0008 +0008 +ENDCHAR +STARTCHAR uniAEF5 +ENCODING 44789 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAEF6 +ENCODING 44790 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAEF7 +ENCODING 44791 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAEF8 +ENCODING 44792 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAEF9 +ENCODING 44793 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAEFA +ENCODING 44794 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAEFB +ENCODING 44795 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAEFC +ENCODING 44796 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAEFD +ENCODING 44797 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAEFE +ENCODING 44798 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAEFF +ENCODING 44799 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAF00 +ENCODING 44800 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAF01 +ENCODING 44801 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAF02 +ENCODING 44802 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAF03 +ENCODING 44803 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAF04 +ENCODING 44804 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAF05 +ENCODING 44805 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAF06 +ENCODING 44806 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAF07 +ENCODING 44807 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAF08 +ENCODING 44808 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAF09 +ENCODING 44809 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAF0A +ENCODING 44810 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAF0B +ENCODING 44811 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAF0C +ENCODING 44812 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAF0D +ENCODING 44813 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAF0E +ENCODING 44814 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAF0F +ENCODING 44815 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1178 +1108 +2208 +2278 +4408 +8808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAF10 +ENCODING 44816 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +1124 +11E4 +1124 +1124 +2224 +23E4 +2224 +4424 +4424 +8824 +0024 +0024 +ENDCHAR +STARTCHAR uniAF11 +ENCODING 44817 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniAF12 +ENCODING 44818 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniAF13 +ENCODING 44819 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniAF14 +ENCODING 44820 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAF15 +ENCODING 44821 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAF16 +ENCODING 44822 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAF17 +ENCODING 44823 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAF18 +ENCODING 44824 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAF19 +ENCODING 44825 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniAF1A +ENCODING 44826 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAF1B +ENCODING 44827 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAF1C +ENCODING 44828 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAF1D +ENCODING 44829 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniAF1E +ENCODING 44830 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniAF1F +ENCODING 44831 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAF20 +ENCODING 44832 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAF21 +ENCODING 44833 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAF22 +ENCODING 44834 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniAF23 +ENCODING 44835 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAF24 +ENCODING 44836 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniAF25 +ENCODING 44837 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniAF26 +ENCODING 44838 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAF27 +ENCODING 44839 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAF28 +ENCODING 44840 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniAF29 +ENCODING 44841 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAF2A +ENCODING 44842 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniAF2B +ENCODING 44843 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +11E4 +1124 +22E4 +2224 +4424 +8824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniAF2C +ENCODING 44844 +BBX 15 13 0 0 +BITMAP +3EF8 +0208 +0208 +0208 +0208 +0208 +0208 +0410 +0510 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniAF2D +ENCODING 44845 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAF2E +ENCODING 44846 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAF2F +ENCODING 44847 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAF30 +ENCODING 44848 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAF31 +ENCODING 44849 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAF32 +ENCODING 44850 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAF33 +ENCODING 44851 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAF34 +ENCODING 44852 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAF35 +ENCODING 44853 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAF36 +ENCODING 44854 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAF37 +ENCODING 44855 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAF38 +ENCODING 44856 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAF39 +ENCODING 44857 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAF3A +ENCODING 44858 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAF3B +ENCODING 44859 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAF3C +ENCODING 44860 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniAF3D +ENCODING 44861 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniAF3E +ENCODING 44862 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAF3F +ENCODING 44863 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAF40 +ENCODING 44864 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAF41 +ENCODING 44865 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAF42 +ENCODING 44866 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAF43 +ENCODING 44867 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAF44 +ENCODING 44868 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAF45 +ENCODING 44869 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAF46 +ENCODING 44870 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAF47 +ENCODING 44871 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAF48 +ENCODING 44872 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +1108 +1108 +110E +2208 +2A08 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniAF49 +ENCODING 44873 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAF4A +ENCODING 44874 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAF4B +ENCODING 44875 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAF4C +ENCODING 44876 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAF4D +ENCODING 44877 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAF4E +ENCODING 44878 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAF4F +ENCODING 44879 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAF50 +ENCODING 44880 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAF51 +ENCODING 44881 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAF52 +ENCODING 44882 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAF53 +ENCODING 44883 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAF54 +ENCODING 44884 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAF55 +ENCODING 44885 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAF56 +ENCODING 44886 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAF57 +ENCODING 44887 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAF58 +ENCODING 44888 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAF59 +ENCODING 44889 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAF5A +ENCODING 44890 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAF5B +ENCODING 44891 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAF5C +ENCODING 44892 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAF5D +ENCODING 44893 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAF5E +ENCODING 44894 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAF5F +ENCODING 44895 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAF60 +ENCODING 44896 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAF61 +ENCODING 44897 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAF62 +ENCODING 44898 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAF63 +ENCODING 44899 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +110E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAF64 +ENCODING 44900 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +1124 +1124 +1124 +113C +2224 +2A24 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniAF65 +ENCODING 44901 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniAF66 +ENCODING 44902 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniAF67 +ENCODING 44903 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniAF68 +ENCODING 44904 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAF69 +ENCODING 44905 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAF6A +ENCODING 44906 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAF6B +ENCODING 44907 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAF6C +ENCODING 44908 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAF6D +ENCODING 44909 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniAF6E +ENCODING 44910 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAF6F +ENCODING 44911 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAF70 +ENCODING 44912 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAF71 +ENCODING 44913 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniAF72 +ENCODING 44914 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniAF73 +ENCODING 44915 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAF74 +ENCODING 44916 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAF75 +ENCODING 44917 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniAF76 +ENCODING 44918 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniAF77 +ENCODING 44919 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAF78 +ENCODING 44920 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniAF79 +ENCODING 44921 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniAF7A +ENCODING 44922 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAF7B +ENCODING 44923 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniAF7C +ENCODING 44924 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniAF7D +ENCODING 44925 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAF7E +ENCODING 44926 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniAF7F +ENCODING 44927 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +113C +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniAF80 +ENCODING 44928 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +1108 +1108 +1108 +2208 +2A08 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniAF81 +ENCODING 44929 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAF82 +ENCODING 44930 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAF83 +ENCODING 44931 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAF84 +ENCODING 44932 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAF85 +ENCODING 44933 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAF86 +ENCODING 44934 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAF87 +ENCODING 44935 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAF88 +ENCODING 44936 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAF89 +ENCODING 44937 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAF8A +ENCODING 44938 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAF8B +ENCODING 44939 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAF8C +ENCODING 44940 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAF8D +ENCODING 44941 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAF8E +ENCODING 44942 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAF8F +ENCODING 44943 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAF90 +ENCODING 44944 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAF91 +ENCODING 44945 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAF92 +ENCODING 44946 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAF93 +ENCODING 44947 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAF94 +ENCODING 44948 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAF95 +ENCODING 44949 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAF96 +ENCODING 44950 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAF97 +ENCODING 44951 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAF98 +ENCODING 44952 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAF99 +ENCODING 44953 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAF9A +ENCODING 44954 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAF9B +ENCODING 44955 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAF9C +ENCODING 44956 +BBX 15 13 0 0 +BITMAP +3EF8 +0208 +0208 +0208 +0208 +0208 +0208 +0410 +0C30 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniAF9D +ENCODING 44957 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAF9E +ENCODING 44958 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAF9F +ENCODING 44959 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAFA0 +ENCODING 44960 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAFA1 +ENCODING 44961 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAFA2 +ENCODING 44962 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAFA3 +ENCODING 44963 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAFA4 +ENCODING 44964 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAFA5 +ENCODING 44965 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAFA6 +ENCODING 44966 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAFA7 +ENCODING 44967 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAFA8 +ENCODING 44968 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAFA9 +ENCODING 44969 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAFAA +ENCODING 44970 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAFAB +ENCODING 44971 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAFAC +ENCODING 44972 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniAFAD +ENCODING 44973 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniAFAE +ENCODING 44974 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAFAF +ENCODING 44975 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAFB0 +ENCODING 44976 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAFB1 +ENCODING 44977 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAFB2 +ENCODING 44978 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAFB3 +ENCODING 44979 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAFB4 +ENCODING 44980 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAFB5 +ENCODING 44981 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAFB6 +ENCODING 44982 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAFB7 +ENCODING 44983 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAFB8 +ENCODING 44984 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0208 +0410 +0410 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniAFB9 +ENCODING 44985 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAFBA +ENCODING 44986 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAFBB +ENCODING 44987 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAFBC +ENCODING 44988 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAFBD +ENCODING 44989 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAFBE +ENCODING 44990 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAFBF +ENCODING 44991 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAFC0 +ENCODING 44992 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAFC1 +ENCODING 44993 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAFC2 +ENCODING 44994 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAFC3 +ENCODING 44995 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAFC4 +ENCODING 44996 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAFC5 +ENCODING 44997 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAFC6 +ENCODING 44998 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAFC7 +ENCODING 44999 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAFC8 +ENCODING 45000 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniAFC9 +ENCODING 45001 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniAFCA +ENCODING 45002 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAFCB +ENCODING 45003 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAFCC +ENCODING 45004 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAFCD +ENCODING 45005 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAFCE +ENCODING 45006 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAFCF +ENCODING 45007 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAFD0 +ENCODING 45008 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAFD1 +ENCODING 45009 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniAFD2 +ENCODING 45010 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAFD3 +ENCODING 45011 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAFD4 +ENCODING 45012 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +1108 +2208 +2208 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniAFD5 +ENCODING 45013 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniAFD6 +ENCODING 45014 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniAFD7 +ENCODING 45015 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniAFD8 +ENCODING 45016 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAFD9 +ENCODING 45017 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAFDA +ENCODING 45018 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAFDB +ENCODING 45019 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAFDC +ENCODING 45020 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAFDD +ENCODING 45021 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniAFDE +ENCODING 45022 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAFDF +ENCODING 45023 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniAFE0 +ENCODING 45024 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniAFE1 +ENCODING 45025 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniAFE2 +ENCODING 45026 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniAFE3 +ENCODING 45027 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniAFE4 +ENCODING 45028 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAFE5 +ENCODING 45029 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniAFE6 +ENCODING 45030 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniAFE7 +ENCODING 45031 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAFE8 +ENCODING 45032 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniAFE9 +ENCODING 45033 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniAFEA +ENCODING 45034 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAFEB +ENCODING 45035 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniAFEC +ENCODING 45036 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniAFED +ENCODING 45037 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniAFEE +ENCODING 45038 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniAFEF +ENCODING 45039 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniAFF0 +ENCODING 45040 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +1124 +1124 +2224 +2224 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniAFF1 +ENCODING 45041 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniAFF2 +ENCODING 45042 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniAFF3 +ENCODING 45043 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniAFF4 +ENCODING 45044 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAFF5 +ENCODING 45045 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAFF6 +ENCODING 45046 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniAFF7 +ENCODING 45047 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAFF8 +ENCODING 45048 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniAFF9 +ENCODING 45049 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniAFFA +ENCODING 45050 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAFFB +ENCODING 45051 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniAFFC +ENCODING 45052 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniAFFD +ENCODING 45053 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniAFFE +ENCODING 45054 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniAFFF +ENCODING 45055 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB000 +ENCODING 45056 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB001 +ENCODING 45057 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB002 +ENCODING 45058 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB003 +ENCODING 45059 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB004 +ENCODING 45060 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB005 +ENCODING 45061 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB006 +ENCODING 45062 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB007 +ENCODING 45063 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB008 +ENCODING 45064 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB009 +ENCODING 45065 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB00A +ENCODING 45066 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB00B +ENCODING 45067 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +1124 +1124 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB00C +ENCODING 45068 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +1108 +2208 +2208 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniB00D +ENCODING 45069 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB00E +ENCODING 45070 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB00F +ENCODING 45071 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB010 +ENCODING 45072 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB011 +ENCODING 45073 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB012 +ENCODING 45074 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB013 +ENCODING 45075 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB014 +ENCODING 45076 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB015 +ENCODING 45077 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB016 +ENCODING 45078 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB017 +ENCODING 45079 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB018 +ENCODING 45080 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB019 +ENCODING 45081 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB01A +ENCODING 45082 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB01B +ENCODING 45083 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB01C +ENCODING 45084 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB01D +ENCODING 45085 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB01E +ENCODING 45086 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB01F +ENCODING 45087 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB020 +ENCODING 45088 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB021 +ENCODING 45089 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB022 +ENCODING 45090 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB023 +ENCODING 45091 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB024 +ENCODING 45092 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB025 +ENCODING 45093 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB026 +ENCODING 45094 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB027 +ENCODING 45095 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB028 +ENCODING 45096 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0208 +0410 +0410 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniB029 +ENCODING 45097 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB02A +ENCODING 45098 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB02B +ENCODING 45099 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB02C +ENCODING 45100 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB02D +ENCODING 45101 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB02E +ENCODING 45102 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB02F +ENCODING 45103 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB030 +ENCODING 45104 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB031 +ENCODING 45105 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB032 +ENCODING 45106 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB033 +ENCODING 45107 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB034 +ENCODING 45108 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB035 +ENCODING 45109 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB036 +ENCODING 45110 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB037 +ENCODING 45111 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB038 +ENCODING 45112 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB039 +ENCODING 45113 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB03A +ENCODING 45114 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB03B +ENCODING 45115 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB03C +ENCODING 45116 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB03D +ENCODING 45117 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB03E +ENCODING 45118 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB03F +ENCODING 45119 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB040 +ENCODING 45120 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB041 +ENCODING 45121 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB042 +ENCODING 45122 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB043 +ENCODING 45123 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB044 +ENCODING 45124 +BBX 15 13 0 0 +BITMAP +3EF8 +0208 +0208 +0208 +0208 +0208 +0208 +0410 +0410 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniB045 +ENCODING 45125 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB046 +ENCODING 45126 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB047 +ENCODING 45127 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB048 +ENCODING 45128 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB049 +ENCODING 45129 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB04A +ENCODING 45130 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB04B +ENCODING 45131 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB04C +ENCODING 45132 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB04D +ENCODING 45133 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB04E +ENCODING 45134 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB04F +ENCODING 45135 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB050 +ENCODING 45136 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB051 +ENCODING 45137 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB052 +ENCODING 45138 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB053 +ENCODING 45139 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB054 +ENCODING 45140 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB055 +ENCODING 45141 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB056 +ENCODING 45142 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB057 +ENCODING 45143 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB058 +ENCODING 45144 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB059 +ENCODING 45145 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB05A +ENCODING 45146 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB05B +ENCODING 45147 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB05C +ENCODING 45148 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB05D +ENCODING 45149 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB05E +ENCODING 45150 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB05F +ENCODING 45151 +BBX 15 15 0 -2 +BITMAP +3EF8 +0208 +0208 +0208 +0410 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB060 +ENCODING 45152 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +1108 +1108 +1108 +2208 +2208 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB061 +ENCODING 45153 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB062 +ENCODING 45154 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB063 +ENCODING 45155 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB064 +ENCODING 45156 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB065 +ENCODING 45157 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB066 +ENCODING 45158 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB067 +ENCODING 45159 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB068 +ENCODING 45160 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB069 +ENCODING 45161 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB06A +ENCODING 45162 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB06B +ENCODING 45163 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB06C +ENCODING 45164 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB06D +ENCODING 45165 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB06E +ENCODING 45166 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB06F +ENCODING 45167 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB070 +ENCODING 45168 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB071 +ENCODING 45169 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB072 +ENCODING 45170 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB073 +ENCODING 45171 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB074 +ENCODING 45172 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB075 +ENCODING 45173 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB076 +ENCODING 45174 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB077 +ENCODING 45175 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB078 +ENCODING 45176 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB079 +ENCODING 45177 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB07A +ENCODING 45178 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB07B +ENCODING 45179 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB07C +ENCODING 45180 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +1108 +1108 +1108 +2208 +2208 +2208 +4408 +4408 +8808 +0008 +0008 +ENDCHAR +STARTCHAR uniB07D +ENCODING 45181 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB07E +ENCODING 45182 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB07F +ENCODING 45183 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB080 +ENCODING 45184 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB081 +ENCODING 45185 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB082 +ENCODING 45186 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB083 +ENCODING 45187 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB084 +ENCODING 45188 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB085 +ENCODING 45189 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB086 +ENCODING 45190 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB087 +ENCODING 45191 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB088 +ENCODING 45192 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB089 +ENCODING 45193 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB08A +ENCODING 45194 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB08B +ENCODING 45195 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB08C +ENCODING 45196 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB08D +ENCODING 45197 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB08E +ENCODING 45198 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB08F +ENCODING 45199 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB090 +ENCODING 45200 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB091 +ENCODING 45201 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB092 +ENCODING 45202 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB093 +ENCODING 45203 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB094 +ENCODING 45204 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB095 +ENCODING 45205 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB096 +ENCODING 45206 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB097 +ENCODING 45207 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +1108 +1108 +1108 +2208 +2208 +4408 +8808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB098 +ENCODING 45208 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +800E +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB099 +ENCODING 45209 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB09A +ENCODING 45210 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB09B +ENCODING 45211 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB09C +ENCODING 45212 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +800E +8008 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB09D +ENCODING 45213 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB09E +ENCODING 45214 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB09F +ENCODING 45215 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB0A0 +ENCODING 45216 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB0A1 +ENCODING 45217 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB0A2 +ENCODING 45218 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB0A3 +ENCODING 45219 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB0A4 +ENCODING 45220 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB0A5 +ENCODING 45221 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB0A6 +ENCODING 45222 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB0A7 +ENCODING 45223 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB0A8 +ENCODING 45224 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB0A9 +ENCODING 45225 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB0AA +ENCODING 45226 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB0AB +ENCODING 45227 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB0AC +ENCODING 45228 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB0AD +ENCODING 45229 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB0AE +ENCODING 45230 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB0AF +ENCODING 45231 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB0B0 +ENCODING 45232 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB0B1 +ENCODING 45233 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB0B2 +ENCODING 45234 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB0B3 +ENCODING 45235 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB0B4 +ENCODING 45236 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +8024 +8024 +8024 +803C +8024 +8024 +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB0B5 +ENCODING 45237 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB0B6 +ENCODING 45238 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB0B7 +ENCODING 45239 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB0B8 +ENCODING 45240 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB0B9 +ENCODING 45241 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB0BA +ENCODING 45242 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB0BB +ENCODING 45243 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB0BC +ENCODING 45244 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB0BD +ENCODING 45245 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB0BE +ENCODING 45246 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB0BF +ENCODING 45247 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB0C0 +ENCODING 45248 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB0C1 +ENCODING 45249 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB0C2 +ENCODING 45250 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB0C3 +ENCODING 45251 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB0C4 +ENCODING 45252 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB0C5 +ENCODING 45253 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB0C6 +ENCODING 45254 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB0C7 +ENCODING 45255 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB0C8 +ENCODING 45256 +BBX 15 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB0C9 +ENCODING 45257 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB0CA +ENCODING 45258 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB0CB +ENCODING 45259 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB0CC +ENCODING 45260 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB0CD +ENCODING 45261 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB0CE +ENCODING 45262 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB0CF +ENCODING 45263 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB0D0 +ENCODING 45264 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +800E +8008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB0D1 +ENCODING 45265 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB0D2 +ENCODING 45266 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB0D3 +ENCODING 45267 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB0D4 +ENCODING 45268 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +8008 +800E +8008 +8008 +8008 +FF0E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB0D5 +ENCODING 45269 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB0D6 +ENCODING 45270 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB0D7 +ENCODING 45271 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB0D8 +ENCODING 45272 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB0D9 +ENCODING 45273 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB0DA +ENCODING 45274 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB0DB +ENCODING 45275 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB0DC +ENCODING 45276 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB0DD +ENCODING 45277 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB0DE +ENCODING 45278 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB0DF +ENCODING 45279 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB0E0 +ENCODING 45280 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB0E1 +ENCODING 45281 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB0E2 +ENCODING 45282 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB0E3 +ENCODING 45283 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB0E4 +ENCODING 45284 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB0E5 +ENCODING 45285 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB0E6 +ENCODING 45286 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB0E7 +ENCODING 45287 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB0E8 +ENCODING 45288 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB0E9 +ENCODING 45289 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB0EA +ENCODING 45290 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB0EB +ENCODING 45291 +BBX 15 16 0 -2 +BITMAP +0008 +8008 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB0EC +ENCODING 45292 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +803C +8024 +8024 +8024 +8024 +803C +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB0ED +ENCODING 45293 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB0EE +ENCODING 45294 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB0EF +ENCODING 45295 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB0F0 +ENCODING 45296 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +8024 +803C +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB0F1 +ENCODING 45297 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB0F2 +ENCODING 45298 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB0F3 +ENCODING 45299 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB0F4 +ENCODING 45300 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB0F5 +ENCODING 45301 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB0F6 +ENCODING 45302 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB0F7 +ENCODING 45303 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB0F8 +ENCODING 45304 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB0F9 +ENCODING 45305 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB0FA +ENCODING 45306 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB0FB +ENCODING 45307 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB0FC +ENCODING 45308 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB0FD +ENCODING 45309 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB0FE +ENCODING 45310 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB0FF +ENCODING 45311 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB100 +ENCODING 45312 +BBX 15 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB101 +ENCODING 45313 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB102 +ENCODING 45314 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB103 +ENCODING 45315 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB104 +ENCODING 45316 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB105 +ENCODING 45317 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB106 +ENCODING 45318 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB107 +ENCODING 45319 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB108 +ENCODING 45320 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +8078 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB109 +ENCODING 45321 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB10A +ENCODING 45322 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB10B +ENCODING 45323 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB10C +ENCODING 45324 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB10D +ENCODING 45325 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB10E +ENCODING 45326 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB10F +ENCODING 45327 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB110 +ENCODING 45328 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB111 +ENCODING 45329 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB112 +ENCODING 45330 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB113 +ENCODING 45331 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB114 +ENCODING 45332 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB115 +ENCODING 45333 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB116 +ENCODING 45334 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB117 +ENCODING 45335 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB118 +ENCODING 45336 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB119 +ENCODING 45337 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB11A +ENCODING 45338 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB11B +ENCODING 45339 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB11C +ENCODING 45340 +BBX 14 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB11D +ENCODING 45341 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB11E +ENCODING 45342 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB11F +ENCODING 45343 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB120 +ENCODING 45344 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB121 +ENCODING 45345 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB122 +ENCODING 45346 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB123 +ENCODING 45347 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB124 +ENCODING 45348 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +8024 +8024 +81E4 +8024 +8024 +8024 +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB125 +ENCODING 45349 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB126 +ENCODING 45350 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB127 +ENCODING 45351 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB128 +ENCODING 45352 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB129 +ENCODING 45353 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB12A +ENCODING 45354 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB12B +ENCODING 45355 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB12C +ENCODING 45356 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB12D +ENCODING 45357 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB12E +ENCODING 45358 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB12F +ENCODING 45359 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB130 +ENCODING 45360 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB131 +ENCODING 45361 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB132 +ENCODING 45362 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB133 +ENCODING 45363 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB134 +ENCODING 45364 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB135 +ENCODING 45365 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB136 +ENCODING 45366 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB137 +ENCODING 45367 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB138 +ENCODING 45368 +BBX 15 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB139 +ENCODING 45369 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB13A +ENCODING 45370 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB13B +ENCODING 45371 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB13C +ENCODING 45372 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB13D +ENCODING 45373 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB13E +ENCODING 45374 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB13F +ENCODING 45375 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB140 +ENCODING 45376 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8078 +8008 +8008 +8008 +8078 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB141 +ENCODING 45377 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB142 +ENCODING 45378 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB143 +ENCODING 45379 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB144 +ENCODING 45380 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB145 +ENCODING 45381 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB146 +ENCODING 45382 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB147 +ENCODING 45383 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB148 +ENCODING 45384 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB149 +ENCODING 45385 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB14A +ENCODING 45386 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB14B +ENCODING 45387 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB14C +ENCODING 45388 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB14D +ENCODING 45389 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB14E +ENCODING 45390 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB14F +ENCODING 45391 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB150 +ENCODING 45392 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB151 +ENCODING 45393 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB152 +ENCODING 45394 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB153 +ENCODING 45395 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB154 +ENCODING 45396 +BBX 14 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB155 +ENCODING 45397 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB156 +ENCODING 45398 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB157 +ENCODING 45399 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB158 +ENCODING 45400 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB159 +ENCODING 45401 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB15A +ENCODING 45402 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB15B +ENCODING 45403 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB15C +ENCODING 45404 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +8024 +8024 +81E4 +8024 +8024 +8024 +81E4 +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB15D +ENCODING 45405 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB15E +ENCODING 45406 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB15F +ENCODING 45407 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB160 +ENCODING 45408 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB161 +ENCODING 45409 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB162 +ENCODING 45410 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB163 +ENCODING 45411 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB164 +ENCODING 45412 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB165 +ENCODING 45413 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB166 +ENCODING 45414 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB167 +ENCODING 45415 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB168 +ENCODING 45416 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB169 +ENCODING 45417 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB16A +ENCODING 45418 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB16B +ENCODING 45419 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB16C +ENCODING 45420 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB16D +ENCODING 45421 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB16E +ENCODING 45422 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB16F +ENCODING 45423 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB170 +ENCODING 45424 +BBX 15 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB171 +ENCODING 45425 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB172 +ENCODING 45426 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB173 +ENCODING 45427 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB174 +ENCODING 45428 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB175 +ENCODING 45429 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB176 +ENCODING 45430 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB177 +ENCODING 45431 +BBX 14 16 0 -2 +BITMAP +0024 +8024 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB178 +ENCODING 45432 +BBX 15 13 0 0 +BITMAP +2000 +2000 +2000 +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniB179 +ENCODING 45433 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB17A +ENCODING 45434 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB17B +ENCODING 45435 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB17C +ENCODING 45436 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB17D +ENCODING 45437 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB17E +ENCODING 45438 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB17F +ENCODING 45439 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB180 +ENCODING 45440 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB181 +ENCODING 45441 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB182 +ENCODING 45442 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB183 +ENCODING 45443 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB184 +ENCODING 45444 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB185 +ENCODING 45445 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB186 +ENCODING 45446 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB187 +ENCODING 45447 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB188 +ENCODING 45448 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB189 +ENCODING 45449 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB18A +ENCODING 45450 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB18B +ENCODING 45451 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB18C +ENCODING 45452 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB18D +ENCODING 45453 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB18E +ENCODING 45454 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB18F +ENCODING 45455 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB190 +ENCODING 45456 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB191 +ENCODING 45457 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB192 +ENCODING 45458 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB193 +ENCODING 45459 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB194 +ENCODING 45460 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +4008 +4008 +4008 +400E +7F88 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB195 +ENCODING 45461 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB196 +ENCODING 45462 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB197 +ENCODING 45463 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB198 +ENCODING 45464 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB199 +ENCODING 45465 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB19A +ENCODING 45466 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB19B +ENCODING 45467 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB19C +ENCODING 45468 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB19D +ENCODING 45469 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB19E +ENCODING 45470 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB19F +ENCODING 45471 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB1A0 +ENCODING 45472 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB1A1 +ENCODING 45473 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB1A2 +ENCODING 45474 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB1A3 +ENCODING 45475 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB1A4 +ENCODING 45476 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB1A5 +ENCODING 45477 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB1A6 +ENCODING 45478 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB1A7 +ENCODING 45479 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB1A8 +ENCODING 45480 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB1A9 +ENCODING 45481 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB1AA +ENCODING 45482 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB1AB +ENCODING 45483 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB1AC +ENCODING 45484 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB1AD +ENCODING 45485 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB1AE +ENCODING 45486 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB1AF +ENCODING 45487 +BBX 15 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB1B0 +ENCODING 45488 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +4024 +4024 +4024 +403C +7FA4 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniB1B1 +ENCODING 45489 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB1B2 +ENCODING 45490 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB1B3 +ENCODING 45491 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB1B4 +ENCODING 45492 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB1B5 +ENCODING 45493 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB1B6 +ENCODING 45494 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB1B7 +ENCODING 45495 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB1B8 +ENCODING 45496 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB1B9 +ENCODING 45497 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB1BA +ENCODING 45498 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB1BB +ENCODING 45499 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB1BC +ENCODING 45500 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB1BD +ENCODING 45501 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB1BE +ENCODING 45502 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB1BF +ENCODING 45503 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB1C0 +ENCODING 45504 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB1C1 +ENCODING 45505 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB1C2 +ENCODING 45506 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB1C3 +ENCODING 45507 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB1C4 +ENCODING 45508 +BBX 15 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB1C5 +ENCODING 45509 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB1C6 +ENCODING 45510 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB1C7 +ENCODING 45511 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB1C8 +ENCODING 45512 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB1C9 +ENCODING 45513 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB1CA +ENCODING 45514 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB1CB +ENCODING 45515 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB1CC +ENCODING 45516 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +4008 +4008 +4008 +4008 +7F88 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB1CD +ENCODING 45517 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB1CE +ENCODING 45518 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB1CF +ENCODING 45519 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB1D0 +ENCODING 45520 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB1D1 +ENCODING 45521 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB1D2 +ENCODING 45522 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB1D3 +ENCODING 45523 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB1D4 +ENCODING 45524 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB1D5 +ENCODING 45525 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB1D6 +ENCODING 45526 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB1D7 +ENCODING 45527 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB1D8 +ENCODING 45528 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB1D9 +ENCODING 45529 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB1DA +ENCODING 45530 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB1DB +ENCODING 45531 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB1DC +ENCODING 45532 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB1DD +ENCODING 45533 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB1DE +ENCODING 45534 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB1DF +ENCODING 45535 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB1E0 +ENCODING 45536 +BBX 14 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB1E1 +ENCODING 45537 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB1E2 +ENCODING 45538 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB1E3 +ENCODING 45539 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB1E4 +ENCODING 45540 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB1E5 +ENCODING 45541 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB1E6 +ENCODING 45542 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB1E7 +ENCODING 45543 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB1E8 +ENCODING 45544 +BBX 15 13 0 0 +BITMAP +2000 +2000 +2000 +2000 +2000 +2000 +2000 +3FF8 +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniB1E9 +ENCODING 45545 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB1EA +ENCODING 45546 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB1EB +ENCODING 45547 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB1EC +ENCODING 45548 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB1ED +ENCODING 45549 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB1EE +ENCODING 45550 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB1EF +ENCODING 45551 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB1F0 +ENCODING 45552 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB1F1 +ENCODING 45553 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB1F2 +ENCODING 45554 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB1F3 +ENCODING 45555 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB1F4 +ENCODING 45556 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB1F5 +ENCODING 45557 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB1F6 +ENCODING 45558 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB1F7 +ENCODING 45559 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB1F8 +ENCODING 45560 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB1F9 +ENCODING 45561 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB1FA +ENCODING 45562 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB1FB +ENCODING 45563 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB1FC +ENCODING 45564 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB1FD +ENCODING 45565 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB1FE +ENCODING 45566 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB1FF +ENCODING 45567 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB200 +ENCODING 45568 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB201 +ENCODING 45569 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB202 +ENCODING 45570 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB203 +ENCODING 45571 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB204 +ENCODING 45572 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniB205 +ENCODING 45573 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB206 +ENCODING 45574 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB207 +ENCODING 45575 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB208 +ENCODING 45576 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB209 +ENCODING 45577 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB20A +ENCODING 45578 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB20B +ENCODING 45579 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB20C +ENCODING 45580 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB20D +ENCODING 45581 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB20E +ENCODING 45582 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB20F +ENCODING 45583 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB210 +ENCODING 45584 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB211 +ENCODING 45585 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB212 +ENCODING 45586 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB213 +ENCODING 45587 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB214 +ENCODING 45588 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB215 +ENCODING 45589 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB216 +ENCODING 45590 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB217 +ENCODING 45591 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB218 +ENCODING 45592 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB219 +ENCODING 45593 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB21A +ENCODING 45594 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB21B +ENCODING 45595 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB21C +ENCODING 45596 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB21D +ENCODING 45597 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB21E +ENCODING 45598 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB21F +ENCODING 45599 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB220 +ENCODING 45600 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +4008 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniB221 +ENCODING 45601 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB222 +ENCODING 45602 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB223 +ENCODING 45603 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB224 +ENCODING 45604 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB225 +ENCODING 45605 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB226 +ENCODING 45606 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB227 +ENCODING 45607 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB228 +ENCODING 45608 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB229 +ENCODING 45609 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB22A +ENCODING 45610 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB22B +ENCODING 45611 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB22C +ENCODING 45612 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB22D +ENCODING 45613 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB22E +ENCODING 45614 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB22F +ENCODING 45615 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB230 +ENCODING 45616 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB231 +ENCODING 45617 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB232 +ENCODING 45618 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB233 +ENCODING 45619 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB234 +ENCODING 45620 +BBX 14 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB235 +ENCODING 45621 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB236 +ENCODING 45622 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB237 +ENCODING 45623 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB238 +ENCODING 45624 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB239 +ENCODING 45625 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB23A +ENCODING 45626 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB23B +ENCODING 45627 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB23C +ENCODING 45628 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +4024 +4024 +4024 +7F24 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniB23D +ENCODING 45629 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB23E +ENCODING 45630 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB23F +ENCODING 45631 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB240 +ENCODING 45632 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB241 +ENCODING 45633 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB242 +ENCODING 45634 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB243 +ENCODING 45635 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB244 +ENCODING 45636 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB245 +ENCODING 45637 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB246 +ENCODING 45638 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB247 +ENCODING 45639 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB248 +ENCODING 45640 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB249 +ENCODING 45641 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB24A +ENCODING 45642 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB24B +ENCODING 45643 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB24C +ENCODING 45644 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB24D +ENCODING 45645 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB24E +ENCODING 45646 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB24F +ENCODING 45647 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB250 +ENCODING 45648 +BBX 15 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB251 +ENCODING 45649 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB252 +ENCODING 45650 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB253 +ENCODING 45651 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB254 +ENCODING 45652 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB255 +ENCODING 45653 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB256 +ENCODING 45654 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB257 +ENCODING 45655 +BBX 14 16 0 -2 +BITMAP +0024 +4024 +4024 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB258 +ENCODING 45656 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +4008 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniB259 +ENCODING 45657 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB25A +ENCODING 45658 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB25B +ENCODING 45659 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB25C +ENCODING 45660 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB25D +ENCODING 45661 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB25E +ENCODING 45662 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB25F +ENCODING 45663 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB260 +ENCODING 45664 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB261 +ENCODING 45665 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB262 +ENCODING 45666 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB263 +ENCODING 45667 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB264 +ENCODING 45668 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB265 +ENCODING 45669 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB266 +ENCODING 45670 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB267 +ENCODING 45671 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB268 +ENCODING 45672 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB269 +ENCODING 45673 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB26A +ENCODING 45674 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB26B +ENCODING 45675 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB26C +ENCODING 45676 +BBX 14 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB26D +ENCODING 45677 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB26E +ENCODING 45678 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB26F +ENCODING 45679 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB270 +ENCODING 45680 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB271 +ENCODING 45681 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB272 +ENCODING 45682 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB273 +ENCODING 45683 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB274 +ENCODING 45684 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniB275 +ENCODING 45685 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB276 +ENCODING 45686 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB277 +ENCODING 45687 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB278 +ENCODING 45688 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB279 +ENCODING 45689 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB27A +ENCODING 45690 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB27B +ENCODING 45691 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB27C +ENCODING 45692 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB27D +ENCODING 45693 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB27E +ENCODING 45694 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB27F +ENCODING 45695 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB280 +ENCODING 45696 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB281 +ENCODING 45697 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB282 +ENCODING 45698 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB283 +ENCODING 45699 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB284 +ENCODING 45700 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB285 +ENCODING 45701 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB286 +ENCODING 45702 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB287 +ENCODING 45703 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB288 +ENCODING 45704 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB289 +ENCODING 45705 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB28A +ENCODING 45706 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB28B +ENCODING 45707 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB28C +ENCODING 45708 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB28D +ENCODING 45709 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB28E +ENCODING 45710 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB28F +ENCODING 45711 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB290 +ENCODING 45712 +BBX 15 13 0 0 +BITMAP +2000 +2000 +2000 +2000 +2000 +2000 +2000 +3FF8 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniB291 +ENCODING 45713 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB292 +ENCODING 45714 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB293 +ENCODING 45715 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB294 +ENCODING 45716 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB295 +ENCODING 45717 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB296 +ENCODING 45718 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB297 +ENCODING 45719 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB298 +ENCODING 45720 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB299 +ENCODING 45721 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB29A +ENCODING 45722 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB29B +ENCODING 45723 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB29C +ENCODING 45724 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB29D +ENCODING 45725 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB29E +ENCODING 45726 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB29F +ENCODING 45727 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB2A0 +ENCODING 45728 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB2A1 +ENCODING 45729 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB2A2 +ENCODING 45730 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB2A3 +ENCODING 45731 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB2A4 +ENCODING 45732 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB2A5 +ENCODING 45733 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB2A6 +ENCODING 45734 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB2A7 +ENCODING 45735 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB2A8 +ENCODING 45736 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB2A9 +ENCODING 45737 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB2AA +ENCODING 45738 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB2AB +ENCODING 45739 +BBX 15 15 0 -2 +BITMAP +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB2AC +ENCODING 45740 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +4008 +4008 +4008 +4008 +7F88 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB2AD +ENCODING 45741 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB2AE +ENCODING 45742 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB2AF +ENCODING 45743 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB2B0 +ENCODING 45744 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB2B1 +ENCODING 45745 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB2B2 +ENCODING 45746 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB2B3 +ENCODING 45747 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB2B4 +ENCODING 45748 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB2B5 +ENCODING 45749 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB2B6 +ENCODING 45750 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB2B7 +ENCODING 45751 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB2B8 +ENCODING 45752 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB2B9 +ENCODING 45753 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB2BA +ENCODING 45754 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB2BB +ENCODING 45755 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB2BC +ENCODING 45756 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB2BD +ENCODING 45757 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB2BE +ENCODING 45758 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB2BF +ENCODING 45759 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB2C0 +ENCODING 45760 +BBX 14 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB2C1 +ENCODING 45761 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB2C2 +ENCODING 45762 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB2C3 +ENCODING 45763 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB2C4 +ENCODING 45764 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB2C5 +ENCODING 45765 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB2C6 +ENCODING 45766 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB2C7 +ENCODING 45767 +BBX 13 16 0 -2 +BITMAP +0008 +4008 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB2C8 +ENCODING 45768 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB2C9 +ENCODING 45769 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB2CA +ENCODING 45770 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB2CB +ENCODING 45771 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB2CC +ENCODING 45772 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB2CD +ENCODING 45773 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB2CE +ENCODING 45774 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB2CF +ENCODING 45775 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB2D0 +ENCODING 45776 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB2D1 +ENCODING 45777 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB2D2 +ENCODING 45778 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB2D3 +ENCODING 45779 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB2D4 +ENCODING 45780 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB2D5 +ENCODING 45781 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB2D6 +ENCODING 45782 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB2D7 +ENCODING 45783 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB2D8 +ENCODING 45784 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB2D9 +ENCODING 45785 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB2DA +ENCODING 45786 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB2DB +ENCODING 45787 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB2DC +ENCODING 45788 +BBX 14 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB2DD +ENCODING 45789 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB2DE +ENCODING 45790 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB2DF +ENCODING 45791 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB2E0 +ENCODING 45792 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB2E1 +ENCODING 45793 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB2E2 +ENCODING 45794 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB2E3 +ENCODING 45795 +BBX 13 16 0 -2 +BITMAP +0008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB2E4 +ENCODING 45796 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +800E +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB2E5 +ENCODING 45797 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB2E6 +ENCODING 45798 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB2E7 +ENCODING 45799 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB2E8 +ENCODING 45800 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +800E +8008 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB2E9 +ENCODING 45801 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB2EA +ENCODING 45802 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB2EB +ENCODING 45803 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB2EC +ENCODING 45804 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB2ED +ENCODING 45805 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB2EE +ENCODING 45806 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB2EF +ENCODING 45807 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB2F0 +ENCODING 45808 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB2F1 +ENCODING 45809 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB2F2 +ENCODING 45810 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB2F3 +ENCODING 45811 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB2F4 +ENCODING 45812 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB2F5 +ENCODING 45813 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB2F6 +ENCODING 45814 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB2F7 +ENCODING 45815 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB2F8 +ENCODING 45816 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB2F9 +ENCODING 45817 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB2FA +ENCODING 45818 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB2FB +ENCODING 45819 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB2FC +ENCODING 45820 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB2FD +ENCODING 45821 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB2FE +ENCODING 45822 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB2FF +ENCODING 45823 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB300 +ENCODING 45824 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +8024 +8024 +8024 +803C +8024 +8024 +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB301 +ENCODING 45825 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB302 +ENCODING 45826 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB303 +ENCODING 45827 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB304 +ENCODING 45828 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB305 +ENCODING 45829 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB306 +ENCODING 45830 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB307 +ENCODING 45831 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB308 +ENCODING 45832 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB309 +ENCODING 45833 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB30A +ENCODING 45834 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB30B +ENCODING 45835 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB30C +ENCODING 45836 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB30D +ENCODING 45837 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB30E +ENCODING 45838 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB30F +ENCODING 45839 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB310 +ENCODING 45840 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB311 +ENCODING 45841 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB312 +ENCODING 45842 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB313 +ENCODING 45843 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB314 +ENCODING 45844 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB315 +ENCODING 45845 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB316 +ENCODING 45846 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB317 +ENCODING 45847 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB318 +ENCODING 45848 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB319 +ENCODING 45849 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB31A +ENCODING 45850 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB31B +ENCODING 45851 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB31C +ENCODING 45852 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +800E +8008 +8008 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB31D +ENCODING 45853 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB31E +ENCODING 45854 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB31F +ENCODING 45855 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB320 +ENCODING 45856 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +800E +8008 +8008 +8008 +FF0E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB321 +ENCODING 45857 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB322 +ENCODING 45858 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB323 +ENCODING 45859 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB324 +ENCODING 45860 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB325 +ENCODING 45861 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB326 +ENCODING 45862 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB327 +ENCODING 45863 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB328 +ENCODING 45864 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB329 +ENCODING 45865 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB32A +ENCODING 45866 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB32B +ENCODING 45867 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB32C +ENCODING 45868 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB32D +ENCODING 45869 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB32E +ENCODING 45870 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB32F +ENCODING 45871 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB330 +ENCODING 45872 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB331 +ENCODING 45873 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB332 +ENCODING 45874 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB333 +ENCODING 45875 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB334 +ENCODING 45876 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB335 +ENCODING 45877 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB336 +ENCODING 45878 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB337 +ENCODING 45879 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +8008 +800E +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB338 +ENCODING 45880 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +8024 +8024 +803C +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB339 +ENCODING 45881 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB33A +ENCODING 45882 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB33B +ENCODING 45883 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB33C +ENCODING 45884 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +8024 +803C +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB33D +ENCODING 45885 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB33E +ENCODING 45886 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB33F +ENCODING 45887 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB340 +ENCODING 45888 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB341 +ENCODING 45889 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB342 +ENCODING 45890 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB343 +ENCODING 45891 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB344 +ENCODING 45892 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB345 +ENCODING 45893 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB346 +ENCODING 45894 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB347 +ENCODING 45895 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB348 +ENCODING 45896 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB349 +ENCODING 45897 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB34A +ENCODING 45898 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB34B +ENCODING 45899 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB34C +ENCODING 45900 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB34D +ENCODING 45901 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB34E +ENCODING 45902 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB34F +ENCODING 45903 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB350 +ENCODING 45904 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB351 +ENCODING 45905 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB352 +ENCODING 45906 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB353 +ENCODING 45907 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +8024 +803C +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB354 +ENCODING 45908 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +8078 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB355 +ENCODING 45909 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB356 +ENCODING 45910 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB357 +ENCODING 45911 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB358 +ENCODING 45912 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB359 +ENCODING 45913 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB35A +ENCODING 45914 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB35B +ENCODING 45915 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB35C +ENCODING 45916 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB35D +ENCODING 45917 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB35E +ENCODING 45918 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB35F +ENCODING 45919 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB360 +ENCODING 45920 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB361 +ENCODING 45921 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB362 +ENCODING 45922 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB363 +ENCODING 45923 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB364 +ENCODING 45924 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB365 +ENCODING 45925 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB366 +ENCODING 45926 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB367 +ENCODING 45927 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB368 +ENCODING 45928 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB369 +ENCODING 45929 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB36A +ENCODING 45930 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB36B +ENCODING 45931 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB36C +ENCODING 45932 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB36D +ENCODING 45933 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB36E +ENCODING 45934 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB36F +ENCODING 45935 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8078 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB370 +ENCODING 45936 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +8024 +8024 +81E4 +8024 +8024 +8024 +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB371 +ENCODING 45937 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB372 +ENCODING 45938 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB373 +ENCODING 45939 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB374 +ENCODING 45940 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB375 +ENCODING 45941 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB376 +ENCODING 45942 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB377 +ENCODING 45943 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB378 +ENCODING 45944 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB379 +ENCODING 45945 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB37A +ENCODING 45946 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB37B +ENCODING 45947 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB37C +ENCODING 45948 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB37D +ENCODING 45949 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB37E +ENCODING 45950 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB37F +ENCODING 45951 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB380 +ENCODING 45952 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB381 +ENCODING 45953 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB382 +ENCODING 45954 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB383 +ENCODING 45955 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB384 +ENCODING 45956 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB385 +ENCODING 45957 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB386 +ENCODING 45958 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB387 +ENCODING 45959 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB388 +ENCODING 45960 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB389 +ENCODING 45961 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB38A +ENCODING 45962 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB38B +ENCODING 45963 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +80E4 +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB38C +ENCODING 45964 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8078 +8008 +8008 +8008 +8078 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB38D +ENCODING 45965 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB38E +ENCODING 45966 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB38F +ENCODING 45967 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB390 +ENCODING 45968 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB391 +ENCODING 45969 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB392 +ENCODING 45970 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB393 +ENCODING 45971 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB394 +ENCODING 45972 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB395 +ENCODING 45973 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB396 +ENCODING 45974 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB397 +ENCODING 45975 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB398 +ENCODING 45976 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB399 +ENCODING 45977 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB39A +ENCODING 45978 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB39B +ENCODING 45979 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB39C +ENCODING 45980 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB39D +ENCODING 45981 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB39E +ENCODING 45982 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB39F +ENCODING 45983 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB3A0 +ENCODING 45984 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB3A1 +ENCODING 45985 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB3A2 +ENCODING 45986 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB3A3 +ENCODING 45987 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB3A4 +ENCODING 45988 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB3A5 +ENCODING 45989 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB3A6 +ENCODING 45990 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB3A7 +ENCODING 45991 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +8008 +8008 +8078 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB3A8 +ENCODING 45992 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +8024 +81E4 +8024 +8024 +8024 +81E4 +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB3A9 +ENCODING 45993 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB3AA +ENCODING 45994 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB3AB +ENCODING 45995 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB3AC +ENCODING 45996 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB3AD +ENCODING 45997 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB3AE +ENCODING 45998 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB3AF +ENCODING 45999 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB3B0 +ENCODING 46000 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB3B1 +ENCODING 46001 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB3B2 +ENCODING 46002 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB3B3 +ENCODING 46003 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB3B4 +ENCODING 46004 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB3B5 +ENCODING 46005 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB3B6 +ENCODING 46006 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB3B7 +ENCODING 46007 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB3B8 +ENCODING 46008 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB3B9 +ENCODING 46009 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB3BA +ENCODING 46010 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB3BB +ENCODING 46011 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB3BC +ENCODING 46012 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB3BD +ENCODING 46013 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB3BE +ENCODING 46014 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB3BF +ENCODING 46015 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB3C0 +ENCODING 46016 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB3C1 +ENCODING 46017 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB3C2 +ENCODING 46018 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB3C3 +ENCODING 46019 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +8024 +80E4 +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB3C4 +ENCODING 46020 +BBX 15 13 0 0 +BITMAP +3FF8 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +3FF8 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniB3C5 +ENCODING 46021 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB3C6 +ENCODING 46022 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB3C7 +ENCODING 46023 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB3C8 +ENCODING 46024 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB3C9 +ENCODING 46025 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB3CA +ENCODING 46026 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB3CB +ENCODING 46027 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB3CC +ENCODING 46028 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB3CD +ENCODING 46029 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB3CE +ENCODING 46030 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB3CF +ENCODING 46031 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB3D0 +ENCODING 46032 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB3D1 +ENCODING 46033 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB3D2 +ENCODING 46034 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB3D3 +ENCODING 46035 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB3D4 +ENCODING 46036 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB3D5 +ENCODING 46037 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB3D6 +ENCODING 46038 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB3D7 +ENCODING 46039 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB3D8 +ENCODING 46040 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB3D9 +ENCODING 46041 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB3DA +ENCODING 46042 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB3DB +ENCODING 46043 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB3DC +ENCODING 46044 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB3DD +ENCODING 46045 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB3DE +ENCODING 46046 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB3DF +ENCODING 46047 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB3E0 +ENCODING 46048 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +4008 +4008 +4008 +4008 +400E +7F08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB3E1 +ENCODING 46049 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB3E2 +ENCODING 46050 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB3E3 +ENCODING 46051 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB3E4 +ENCODING 46052 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB3E5 +ENCODING 46053 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB3E6 +ENCODING 46054 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB3E7 +ENCODING 46055 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB3E8 +ENCODING 46056 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB3E9 +ENCODING 46057 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB3EA +ENCODING 46058 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB3EB +ENCODING 46059 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB3EC +ENCODING 46060 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB3ED +ENCODING 46061 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB3EE +ENCODING 46062 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB3EF +ENCODING 46063 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB3F0 +ENCODING 46064 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB3F1 +ENCODING 46065 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB3F2 +ENCODING 46066 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB3F3 +ENCODING 46067 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB3F4 +ENCODING 46068 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB3F5 +ENCODING 46069 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB3F6 +ENCODING 46070 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB3F7 +ENCODING 46071 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB3F8 +ENCODING 46072 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB3F9 +ENCODING 46073 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB3FA +ENCODING 46074 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB3FB +ENCODING 46075 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB3FC +ENCODING 46076 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +4024 +4024 +4024 +4024 +403C +7F24 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniB3FD +ENCODING 46077 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB3FE +ENCODING 46078 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB3FF +ENCODING 46079 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB400 +ENCODING 46080 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB401 +ENCODING 46081 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB402 +ENCODING 46082 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB403 +ENCODING 46083 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB404 +ENCODING 46084 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB405 +ENCODING 46085 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB406 +ENCODING 46086 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB407 +ENCODING 46087 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB408 +ENCODING 46088 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB409 +ENCODING 46089 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB40A +ENCODING 46090 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB40B +ENCODING 46091 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB40C +ENCODING 46092 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB40D +ENCODING 46093 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB40E +ENCODING 46094 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB40F +ENCODING 46095 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB410 +ENCODING 46096 +BBX 15 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB411 +ENCODING 46097 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB412 +ENCODING 46098 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB413 +ENCODING 46099 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB414 +ENCODING 46100 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB415 +ENCODING 46101 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB416 +ENCODING 46102 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB417 +ENCODING 46103 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4024 +4024 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB418 +ENCODING 46104 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +4008 +4008 +4008 +4008 +4008 +7F08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB419 +ENCODING 46105 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB41A +ENCODING 46106 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB41B +ENCODING 46107 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB41C +ENCODING 46108 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB41D +ENCODING 46109 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB41E +ENCODING 46110 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB41F +ENCODING 46111 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB420 +ENCODING 46112 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB421 +ENCODING 46113 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB422 +ENCODING 46114 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB423 +ENCODING 46115 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB424 +ENCODING 46116 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB425 +ENCODING 46117 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB426 +ENCODING 46118 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB427 +ENCODING 46119 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB428 +ENCODING 46120 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB429 +ENCODING 46121 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB42A +ENCODING 46122 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB42B +ENCODING 46123 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB42C +ENCODING 46124 +BBX 14 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB42D +ENCODING 46125 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB42E +ENCODING 46126 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB42F +ENCODING 46127 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB430 +ENCODING 46128 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB431 +ENCODING 46129 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB432 +ENCODING 46130 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB433 +ENCODING 46131 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB434 +ENCODING 46132 +BBX 15 13 0 0 +BITMAP +3FF8 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +3FF8 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniB435 +ENCODING 46133 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB436 +ENCODING 46134 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB437 +ENCODING 46135 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB438 +ENCODING 46136 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB439 +ENCODING 46137 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB43A +ENCODING 46138 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB43B +ENCODING 46139 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB43C +ENCODING 46140 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB43D +ENCODING 46141 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB43E +ENCODING 46142 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB43F +ENCODING 46143 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB440 +ENCODING 46144 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB441 +ENCODING 46145 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB442 +ENCODING 46146 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB443 +ENCODING 46147 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB444 +ENCODING 46148 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB445 +ENCODING 46149 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB446 +ENCODING 46150 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB447 +ENCODING 46151 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB448 +ENCODING 46152 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB449 +ENCODING 46153 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB44A +ENCODING 46154 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB44B +ENCODING 46155 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB44C +ENCODING 46156 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB44D +ENCODING 46157 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB44E +ENCODING 46158 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB44F +ENCODING 46159 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB450 +ENCODING 46160 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniB451 +ENCODING 46161 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB452 +ENCODING 46162 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB453 +ENCODING 46163 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB454 +ENCODING 46164 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB455 +ENCODING 46165 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB456 +ENCODING 46166 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB457 +ENCODING 46167 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB458 +ENCODING 46168 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB459 +ENCODING 46169 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB45A +ENCODING 46170 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB45B +ENCODING 46171 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB45C +ENCODING 46172 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB45D +ENCODING 46173 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB45E +ENCODING 46174 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB45F +ENCODING 46175 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB460 +ENCODING 46176 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB461 +ENCODING 46177 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB462 +ENCODING 46178 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB463 +ENCODING 46179 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB464 +ENCODING 46180 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB465 +ENCODING 46181 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB466 +ENCODING 46182 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB467 +ENCODING 46183 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB468 +ENCODING 46184 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB469 +ENCODING 46185 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB46A +ENCODING 46186 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB46B +ENCODING 46187 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB46C +ENCODING 46188 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +4008 +4008 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniB46D +ENCODING 46189 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB46E +ENCODING 46190 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB46F +ENCODING 46191 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB470 +ENCODING 46192 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB471 +ENCODING 46193 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB472 +ENCODING 46194 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB473 +ENCODING 46195 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB474 +ENCODING 46196 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB475 +ENCODING 46197 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB476 +ENCODING 46198 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB477 +ENCODING 46199 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB478 +ENCODING 46200 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB479 +ENCODING 46201 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB47A +ENCODING 46202 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB47B +ENCODING 46203 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB47C +ENCODING 46204 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB47D +ENCODING 46205 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB47E +ENCODING 46206 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB47F +ENCODING 46207 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB480 +ENCODING 46208 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB481 +ENCODING 46209 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB482 +ENCODING 46210 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB483 +ENCODING 46211 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB484 +ENCODING 46212 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB485 +ENCODING 46213 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB486 +ENCODING 46214 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB487 +ENCODING 46215 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB488 +ENCODING 46216 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +4024 +4024 +4024 +7F24 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniB489 +ENCODING 46217 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB48A +ENCODING 46218 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB48B +ENCODING 46219 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB48C +ENCODING 46220 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB48D +ENCODING 46221 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB48E +ENCODING 46222 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB48F +ENCODING 46223 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB490 +ENCODING 46224 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB491 +ENCODING 46225 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB492 +ENCODING 46226 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB493 +ENCODING 46227 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB494 +ENCODING 46228 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB495 +ENCODING 46229 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB496 +ENCODING 46230 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB497 +ENCODING 46231 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB498 +ENCODING 46232 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB499 +ENCODING 46233 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB49A +ENCODING 46234 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB49B +ENCODING 46235 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB49C +ENCODING 46236 +BBX 15 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB49D +ENCODING 46237 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB49E +ENCODING 46238 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB49F +ENCODING 46239 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB4A0 +ENCODING 46240 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB4A1 +ENCODING 46241 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB4A2 +ENCODING 46242 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB4A3 +ENCODING 46243 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB4A4 +ENCODING 46244 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +4008 +4008 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniB4A5 +ENCODING 46245 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB4A6 +ENCODING 46246 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB4A7 +ENCODING 46247 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB4A8 +ENCODING 46248 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB4A9 +ENCODING 46249 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB4AA +ENCODING 46250 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB4AB +ENCODING 46251 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB4AC +ENCODING 46252 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB4AD +ENCODING 46253 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB4AE +ENCODING 46254 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB4AF +ENCODING 46255 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB4B0 +ENCODING 46256 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB4B1 +ENCODING 46257 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB4B2 +ENCODING 46258 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB4B3 +ENCODING 46259 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB4B4 +ENCODING 46260 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB4B5 +ENCODING 46261 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB4B6 +ENCODING 46262 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB4B7 +ENCODING 46263 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB4B8 +ENCODING 46264 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB4B9 +ENCODING 46265 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB4BA +ENCODING 46266 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB4BB +ENCODING 46267 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB4BC +ENCODING 46268 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB4BD +ENCODING 46269 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB4BE +ENCODING 46270 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB4BF +ENCODING 46271 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB4C0 +ENCODING 46272 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniB4C1 +ENCODING 46273 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB4C2 +ENCODING 46274 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB4C3 +ENCODING 46275 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB4C4 +ENCODING 46276 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB4C5 +ENCODING 46277 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB4C6 +ENCODING 46278 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB4C7 +ENCODING 46279 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB4C8 +ENCODING 46280 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB4C9 +ENCODING 46281 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB4CA +ENCODING 46282 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB4CB +ENCODING 46283 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB4CC +ENCODING 46284 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB4CD +ENCODING 46285 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB4CE +ENCODING 46286 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB4CF +ENCODING 46287 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB4D0 +ENCODING 46288 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB4D1 +ENCODING 46289 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB4D2 +ENCODING 46290 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB4D3 +ENCODING 46291 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB4D4 +ENCODING 46292 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB4D5 +ENCODING 46293 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB4D6 +ENCODING 46294 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB4D7 +ENCODING 46295 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB4D8 +ENCODING 46296 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB4D9 +ENCODING 46297 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB4DA +ENCODING 46298 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB4DB +ENCODING 46299 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB4DC +ENCODING 46300 +BBX 15 13 0 0 +BITMAP +3FF8 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +3FF8 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniB4DD +ENCODING 46301 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB4DE +ENCODING 46302 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB4DF +ENCODING 46303 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB4E0 +ENCODING 46304 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB4E1 +ENCODING 46305 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB4E2 +ENCODING 46306 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB4E3 +ENCODING 46307 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB4E4 +ENCODING 46308 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB4E5 +ENCODING 46309 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB4E6 +ENCODING 46310 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB4E7 +ENCODING 46311 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB4E8 +ENCODING 46312 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB4E9 +ENCODING 46313 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB4EA +ENCODING 46314 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB4EB +ENCODING 46315 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB4EC +ENCODING 46316 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB4ED +ENCODING 46317 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB4EE +ENCODING 46318 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB4EF +ENCODING 46319 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB4F0 +ENCODING 46320 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB4F1 +ENCODING 46321 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB4F2 +ENCODING 46322 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB4F3 +ENCODING 46323 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB4F4 +ENCODING 46324 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB4F5 +ENCODING 46325 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB4F6 +ENCODING 46326 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB4F7 +ENCODING 46327 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +2000 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB4F8 +ENCODING 46328 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +4008 +4008 +4008 +4008 +4008 +7F08 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB4F9 +ENCODING 46329 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB4FA +ENCODING 46330 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB4FB +ENCODING 46331 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB4FC +ENCODING 46332 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB4FD +ENCODING 46333 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB4FE +ENCODING 46334 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB4FF +ENCODING 46335 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB500 +ENCODING 46336 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB501 +ENCODING 46337 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB502 +ENCODING 46338 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB503 +ENCODING 46339 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB504 +ENCODING 46340 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB505 +ENCODING 46341 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB506 +ENCODING 46342 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB507 +ENCODING 46343 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB508 +ENCODING 46344 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB509 +ENCODING 46345 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB50A +ENCODING 46346 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB50B +ENCODING 46347 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB50C +ENCODING 46348 +BBX 14 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB50D +ENCODING 46349 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB50E +ENCODING 46350 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB50F +ENCODING 46351 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB510 +ENCODING 46352 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB511 +ENCODING 46353 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB512 +ENCODING 46354 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB513 +ENCODING 46355 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4008 +4008 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB514 +ENCODING 46356 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB515 +ENCODING 46357 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB516 +ENCODING 46358 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB517 +ENCODING 46359 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB518 +ENCODING 46360 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB519 +ENCODING 46361 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB51A +ENCODING 46362 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB51B +ENCODING 46363 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB51C +ENCODING 46364 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB51D +ENCODING 46365 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB51E +ENCODING 46366 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB51F +ENCODING 46367 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB520 +ENCODING 46368 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB521 +ENCODING 46369 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB522 +ENCODING 46370 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB523 +ENCODING 46371 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB524 +ENCODING 46372 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB525 +ENCODING 46373 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB526 +ENCODING 46374 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB527 +ENCODING 46375 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB528 +ENCODING 46376 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB529 +ENCODING 46377 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB52A +ENCODING 46378 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB52B +ENCODING 46379 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB52C +ENCODING 46380 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB52D +ENCODING 46381 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB52E +ENCODING 46382 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB52F +ENCODING 46383 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB530 +ENCODING 46384 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +840E +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0008 +ENDCHAR +STARTCHAR uniB531 +ENCODING 46385 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB532 +ENCODING 46386 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB533 +ENCODING 46387 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB534 +ENCODING 46388 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +840E +8408 +F788 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB535 +ENCODING 46389 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB536 +ENCODING 46390 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB537 +ENCODING 46391 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB538 +ENCODING 46392 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB539 +ENCODING 46393 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB53A +ENCODING 46394 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB53B +ENCODING 46395 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB53C +ENCODING 46396 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB53D +ENCODING 46397 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB53E +ENCODING 46398 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB53F +ENCODING 46399 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB540 +ENCODING 46400 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB541 +ENCODING 46401 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB542 +ENCODING 46402 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB543 +ENCODING 46403 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB544 +ENCODING 46404 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB545 +ENCODING 46405 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB546 +ENCODING 46406 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB547 +ENCODING 46407 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB548 +ENCODING 46408 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB549 +ENCODING 46409 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB54A +ENCODING 46410 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB54B +ENCODING 46411 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB54C +ENCODING 46412 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +8424 +8424 +8424 +843C +8424 +8424 +8424 +8424 +8424 +F7A4 +0024 +0024 +ENDCHAR +STARTCHAR uniB54D +ENCODING 46413 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB54E +ENCODING 46414 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB54F +ENCODING 46415 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB550 +ENCODING 46416 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB551 +ENCODING 46417 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB552 +ENCODING 46418 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB553 +ENCODING 46419 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB554 +ENCODING 46420 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB555 +ENCODING 46421 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB556 +ENCODING 46422 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB557 +ENCODING 46423 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB558 +ENCODING 46424 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB559 +ENCODING 46425 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB55A +ENCODING 46426 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB55B +ENCODING 46427 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB55C +ENCODING 46428 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB55D +ENCODING 46429 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB55E +ENCODING 46430 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB55F +ENCODING 46431 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB560 +ENCODING 46432 +BBX 15 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB561 +ENCODING 46433 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB562 +ENCODING 46434 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB563 +ENCODING 46435 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB564 +ENCODING 46436 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB565 +ENCODING 46437 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB566 +ENCODING 46438 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB567 +ENCODING 46439 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +F7A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB568 +ENCODING 46440 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +840E +8408 +8408 +8408 +8408 +840E +8408 +8408 +F788 +0008 +0008 +ENDCHAR +STARTCHAR uniB569 +ENCODING 46441 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB56A +ENCODING 46442 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB56B +ENCODING 46443 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB56C +ENCODING 46444 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +8408 +840E +8408 +8408 +8408 +F78E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB56D +ENCODING 46445 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB56E +ENCODING 46446 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB56F +ENCODING 46447 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB570 +ENCODING 46448 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB571 +ENCODING 46449 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB572 +ENCODING 46450 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB573 +ENCODING 46451 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB574 +ENCODING 46452 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB575 +ENCODING 46453 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB576 +ENCODING 46454 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB577 +ENCODING 46455 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB578 +ENCODING 46456 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB579 +ENCODING 46457 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB57A +ENCODING 46458 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB57B +ENCODING 46459 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB57C +ENCODING 46460 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB57D +ENCODING 46461 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB57E +ENCODING 46462 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB57F +ENCODING 46463 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB580 +ENCODING 46464 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB581 +ENCODING 46465 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB582 +ENCODING 46466 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB583 +ENCODING 46467 +BBX 15 16 0 -2 +BITMAP +0008 +F788 +840E +8408 +8408 +840E +8408 +F788 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB584 +ENCODING 46468 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +843C +8424 +8424 +8424 +8424 +843C +8424 +8424 +8424 +F7A4 +0024 +0024 +ENDCHAR +STARTCHAR uniB585 +ENCODING 46469 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB586 +ENCODING 46470 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB587 +ENCODING 46471 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB588 +ENCODING 46472 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +8424 +843C +F7A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB589 +ENCODING 46473 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB58A +ENCODING 46474 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB58B +ENCODING 46475 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB58C +ENCODING 46476 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB58D +ENCODING 46477 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB58E +ENCODING 46478 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB58F +ENCODING 46479 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB590 +ENCODING 46480 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB591 +ENCODING 46481 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB592 +ENCODING 46482 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB593 +ENCODING 46483 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB594 +ENCODING 46484 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB595 +ENCODING 46485 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB596 +ENCODING 46486 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB597 +ENCODING 46487 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB598 +ENCODING 46488 +BBX 15 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB599 +ENCODING 46489 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB59A +ENCODING 46490 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB59B +ENCODING 46491 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB59C +ENCODING 46492 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB59D +ENCODING 46493 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB59E +ENCODING 46494 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB59F +ENCODING 46495 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +843C +8424 +8424 +843C +8424 +F7A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB5A0 +ENCODING 46496 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +8478 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0008 +ENDCHAR +STARTCHAR uniB5A1 +ENCODING 46497 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB5A2 +ENCODING 46498 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB5A3 +ENCODING 46499 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB5A4 +ENCODING 46500 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB5A5 +ENCODING 46501 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB5A6 +ENCODING 46502 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB5A7 +ENCODING 46503 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB5A8 +ENCODING 46504 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB5A9 +ENCODING 46505 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB5AA +ENCODING 46506 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB5AB +ENCODING 46507 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB5AC +ENCODING 46508 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB5AD +ENCODING 46509 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB5AE +ENCODING 46510 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB5AF +ENCODING 46511 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB5B0 +ENCODING 46512 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB5B1 +ENCODING 46513 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB5B2 +ENCODING 46514 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB5B3 +ENCODING 46515 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB5B4 +ENCODING 46516 +BBX 14 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB5B5 +ENCODING 46517 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB5B6 +ENCODING 46518 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB5B7 +ENCODING 46519 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB5B8 +ENCODING 46520 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB5B9 +ENCODING 46521 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB5BA +ENCODING 46522 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB5BB +ENCODING 46523 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8478 +8408 +8408 +F788 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB5BC +ENCODING 46524 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +8424 +8424 +85E4 +8424 +8424 +8424 +8424 +8424 +8424 +F7A4 +0024 +0024 +ENDCHAR +STARTCHAR uniB5BD +ENCODING 46525 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB5BE +ENCODING 46526 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB5BF +ENCODING 46527 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB5C0 +ENCODING 46528 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB5C1 +ENCODING 46529 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB5C2 +ENCODING 46530 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB5C3 +ENCODING 46531 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB5C4 +ENCODING 46532 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB5C5 +ENCODING 46533 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB5C6 +ENCODING 46534 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB5C7 +ENCODING 46535 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB5C8 +ENCODING 46536 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB5C9 +ENCODING 46537 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB5CA +ENCODING 46538 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB5CB +ENCODING 46539 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB5CC +ENCODING 46540 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB5CD +ENCODING 46541 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB5CE +ENCODING 46542 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB5CF +ENCODING 46543 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB5D0 +ENCODING 46544 +BBX 15 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB5D1 +ENCODING 46545 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB5D2 +ENCODING 46546 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB5D3 +ENCODING 46547 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB5D4 +ENCODING 46548 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB5D5 +ENCODING 46549 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB5D6 +ENCODING 46550 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB5D7 +ENCODING 46551 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +84E4 +8424 +8424 +F7A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB5D8 +ENCODING 46552 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8478 +8408 +8408 +8408 +8478 +8408 +8408 +8408 +F788 +0008 +0008 +ENDCHAR +STARTCHAR uniB5D9 +ENCODING 46553 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB5DA +ENCODING 46554 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB5DB +ENCODING 46555 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB5DC +ENCODING 46556 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB5DD +ENCODING 46557 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB5DE +ENCODING 46558 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB5DF +ENCODING 46559 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB5E0 +ENCODING 46560 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB5E1 +ENCODING 46561 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB5E2 +ENCODING 46562 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB5E3 +ENCODING 46563 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB5E4 +ENCODING 46564 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB5E5 +ENCODING 46565 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB5E6 +ENCODING 46566 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB5E7 +ENCODING 46567 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB5E8 +ENCODING 46568 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB5E9 +ENCODING 46569 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB5EA +ENCODING 46570 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB5EB +ENCODING 46571 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB5EC +ENCODING 46572 +BBX 14 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB5ED +ENCODING 46573 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB5EE +ENCODING 46574 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB5EF +ENCODING 46575 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB5F0 +ENCODING 46576 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB5F1 +ENCODING 46577 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB5F2 +ENCODING 46578 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB5F3 +ENCODING 46579 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8478 +8408 +8408 +8478 +F788 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB5F4 +ENCODING 46580 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +8424 +8424 +85E4 +8424 +8424 +8424 +85E4 +8424 +8424 +8424 +F7A4 +0024 +0024 +ENDCHAR +STARTCHAR uniB5F5 +ENCODING 46581 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB5F6 +ENCODING 46582 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB5F7 +ENCODING 46583 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB5F8 +ENCODING 46584 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB5F9 +ENCODING 46585 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB5FA +ENCODING 46586 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB5FB +ENCODING 46587 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB5FC +ENCODING 46588 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB5FD +ENCODING 46589 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB5FE +ENCODING 46590 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB5FF +ENCODING 46591 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB600 +ENCODING 46592 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB601 +ENCODING 46593 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB602 +ENCODING 46594 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB603 +ENCODING 46595 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB604 +ENCODING 46596 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB605 +ENCODING 46597 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB606 +ENCODING 46598 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB607 +ENCODING 46599 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB608 +ENCODING 46600 +BBX 15 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB609 +ENCODING 46601 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB60A +ENCODING 46602 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB60B +ENCODING 46603 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB60C +ENCODING 46604 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB60D +ENCODING 46605 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB60E +ENCODING 46606 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB60F +ENCODING 46607 +BBX 14 16 0 -2 +BITMAP +0024 +F7A4 +8424 +84E4 +8424 +84E4 +8424 +F7A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB610 +ENCODING 46608 +BBX 15 13 0 0 +BITMAP +3EF8 +2080 +2080 +2080 +2080 +2080 +2080 +3EF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniB611 +ENCODING 46609 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB612 +ENCODING 46610 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB613 +ENCODING 46611 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB614 +ENCODING 46612 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB615 +ENCODING 46613 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB616 +ENCODING 46614 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB617 +ENCODING 46615 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB618 +ENCODING 46616 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB619 +ENCODING 46617 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB61A +ENCODING 46618 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB61B +ENCODING 46619 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB61C +ENCODING 46620 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB61D +ENCODING 46621 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB61E +ENCODING 46622 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB61F +ENCODING 46623 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB620 +ENCODING 46624 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB621 +ENCODING 46625 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB622 +ENCODING 46626 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB623 +ENCODING 46627 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB624 +ENCODING 46628 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB625 +ENCODING 46629 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB626 +ENCODING 46630 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB627 +ENCODING 46631 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB628 +ENCODING 46632 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB629 +ENCODING 46633 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB62A +ENCODING 46634 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB62B +ENCODING 46635 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB62C +ENCODING 46636 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +4408 +4408 +4408 +440E +7F88 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB62D +ENCODING 46637 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB62E +ENCODING 46638 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB62F +ENCODING 46639 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB630 +ENCODING 46640 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB631 +ENCODING 46641 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB632 +ENCODING 46642 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB633 +ENCODING 46643 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB634 +ENCODING 46644 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB635 +ENCODING 46645 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB636 +ENCODING 46646 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB637 +ENCODING 46647 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB638 +ENCODING 46648 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB639 +ENCODING 46649 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB63A +ENCODING 46650 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB63B +ENCODING 46651 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB63C +ENCODING 46652 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB63D +ENCODING 46653 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB63E +ENCODING 46654 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB63F +ENCODING 46655 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB640 +ENCODING 46656 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB641 +ENCODING 46657 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB642 +ENCODING 46658 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB643 +ENCODING 46659 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB644 +ENCODING 46660 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB645 +ENCODING 46661 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB646 +ENCODING 46662 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB647 +ENCODING 46663 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB648 +ENCODING 46664 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +4424 +4424 +4424 +443C +7FA4 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniB649 +ENCODING 46665 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB64A +ENCODING 46666 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB64B +ENCODING 46667 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB64C +ENCODING 46668 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB64D +ENCODING 46669 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB64E +ENCODING 46670 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB64F +ENCODING 46671 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB650 +ENCODING 46672 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB651 +ENCODING 46673 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB652 +ENCODING 46674 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB653 +ENCODING 46675 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB654 +ENCODING 46676 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB655 +ENCODING 46677 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB656 +ENCODING 46678 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB657 +ENCODING 46679 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB658 +ENCODING 46680 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB659 +ENCODING 46681 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB65A +ENCODING 46682 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB65B +ENCODING 46683 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB65C +ENCODING 46684 +BBX 15 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB65D +ENCODING 46685 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB65E +ENCODING 46686 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB65F +ENCODING 46687 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB660 +ENCODING 46688 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB661 +ENCODING 46689 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB662 +ENCODING 46690 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB663 +ENCODING 46691 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB664 +ENCODING 46692 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +4408 +4408 +4408 +4408 +7F88 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB665 +ENCODING 46693 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB666 +ENCODING 46694 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB667 +ENCODING 46695 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB668 +ENCODING 46696 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB669 +ENCODING 46697 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB66A +ENCODING 46698 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB66B +ENCODING 46699 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB66C +ENCODING 46700 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB66D +ENCODING 46701 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB66E +ENCODING 46702 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB66F +ENCODING 46703 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB670 +ENCODING 46704 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB671 +ENCODING 46705 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB672 +ENCODING 46706 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB673 +ENCODING 46707 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB674 +ENCODING 46708 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB675 +ENCODING 46709 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB676 +ENCODING 46710 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB677 +ENCODING 46711 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB678 +ENCODING 46712 +BBX 14 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB679 +ENCODING 46713 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB67A +ENCODING 46714 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB67B +ENCODING 46715 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB67C +ENCODING 46716 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB67D +ENCODING 46717 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB67E +ENCODING 46718 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB67F +ENCODING 46719 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB680 +ENCODING 46720 +BBX 15 13 0 0 +BITMAP +3EF8 +2080 +2080 +2080 +2080 +2080 +2080 +3EF8 +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniB681 +ENCODING 46721 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB682 +ENCODING 46722 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB683 +ENCODING 46723 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB684 +ENCODING 46724 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB685 +ENCODING 46725 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB686 +ENCODING 46726 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB687 +ENCODING 46727 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB688 +ENCODING 46728 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB689 +ENCODING 46729 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB68A +ENCODING 46730 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB68B +ENCODING 46731 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB68C +ENCODING 46732 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB68D +ENCODING 46733 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB68E +ENCODING 46734 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB68F +ENCODING 46735 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB690 +ENCODING 46736 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB691 +ENCODING 46737 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB692 +ENCODING 46738 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB693 +ENCODING 46739 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB694 +ENCODING 46740 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB695 +ENCODING 46741 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB696 +ENCODING 46742 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB697 +ENCODING 46743 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB698 +ENCODING 46744 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB699 +ENCODING 46745 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB69A +ENCODING 46746 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB69B +ENCODING 46747 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB69C +ENCODING 46748 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +2080 +3EF8 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniB69D +ENCODING 46749 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB69E +ENCODING 46750 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB69F +ENCODING 46751 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB6A0 +ENCODING 46752 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB6A1 +ENCODING 46753 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB6A2 +ENCODING 46754 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB6A3 +ENCODING 46755 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB6A4 +ENCODING 46756 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB6A5 +ENCODING 46757 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB6A6 +ENCODING 46758 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB6A7 +ENCODING 46759 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB6A8 +ENCODING 46760 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB6A9 +ENCODING 46761 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB6AA +ENCODING 46762 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB6AB +ENCODING 46763 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB6AC +ENCODING 46764 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB6AD +ENCODING 46765 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB6AE +ENCODING 46766 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB6AF +ENCODING 46767 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB6B0 +ENCODING 46768 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB6B1 +ENCODING 46769 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB6B2 +ENCODING 46770 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB6B3 +ENCODING 46771 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB6B4 +ENCODING 46772 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB6B5 +ENCODING 46773 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB6B6 +ENCODING 46774 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB6B7 +ENCODING 46775 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB6B8 +ENCODING 46776 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniB6B9 +ENCODING 46777 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB6BA +ENCODING 46778 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB6BB +ENCODING 46779 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB6BC +ENCODING 46780 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB6BD +ENCODING 46781 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB6BE +ENCODING 46782 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB6BF +ENCODING 46783 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB6C0 +ENCODING 46784 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB6C1 +ENCODING 46785 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB6C2 +ENCODING 46786 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB6C3 +ENCODING 46787 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB6C4 +ENCODING 46788 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB6C5 +ENCODING 46789 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB6C6 +ENCODING 46790 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB6C7 +ENCODING 46791 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB6C8 +ENCODING 46792 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB6C9 +ENCODING 46793 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB6CA +ENCODING 46794 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB6CB +ENCODING 46795 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB6CC +ENCODING 46796 +BBX 14 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB6CD +ENCODING 46797 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB6CE +ENCODING 46798 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB6CF +ENCODING 46799 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB6D0 +ENCODING 46800 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB6D1 +ENCODING 46801 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB6D2 +ENCODING 46802 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB6D3 +ENCODING 46803 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB6D4 +ENCODING 46804 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +4424 +4424 +4424 +7FA4 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniB6D5 +ENCODING 46805 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB6D6 +ENCODING 46806 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB6D7 +ENCODING 46807 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB6D8 +ENCODING 46808 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB6D9 +ENCODING 46809 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB6DA +ENCODING 46810 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB6DB +ENCODING 46811 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB6DC +ENCODING 46812 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB6DD +ENCODING 46813 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB6DE +ENCODING 46814 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB6DF +ENCODING 46815 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB6E0 +ENCODING 46816 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB6E1 +ENCODING 46817 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB6E2 +ENCODING 46818 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB6E3 +ENCODING 46819 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB6E4 +ENCODING 46820 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB6E5 +ENCODING 46821 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB6E6 +ENCODING 46822 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB6E7 +ENCODING 46823 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB6E8 +ENCODING 46824 +BBX 15 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB6E9 +ENCODING 46825 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB6EA +ENCODING 46826 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB6EB +ENCODING 46827 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB6EC +ENCODING 46828 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB6ED +ENCODING 46829 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB6EE +ENCODING 46830 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB6EF +ENCODING 46831 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +4424 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB6F0 +ENCODING 46832 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniB6F1 +ENCODING 46833 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB6F2 +ENCODING 46834 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB6F3 +ENCODING 46835 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB6F4 +ENCODING 46836 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB6F5 +ENCODING 46837 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB6F6 +ENCODING 46838 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB6F7 +ENCODING 46839 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB6F8 +ENCODING 46840 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB6F9 +ENCODING 46841 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB6FA +ENCODING 46842 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB6FB +ENCODING 46843 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB6FC +ENCODING 46844 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB6FD +ENCODING 46845 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB6FE +ENCODING 46846 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB6FF +ENCODING 46847 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB700 +ENCODING 46848 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB701 +ENCODING 46849 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB702 +ENCODING 46850 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB703 +ENCODING 46851 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB704 +ENCODING 46852 +BBX 14 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB705 +ENCODING 46853 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB706 +ENCODING 46854 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB707 +ENCODING 46855 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB708 +ENCODING 46856 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB709 +ENCODING 46857 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB70A +ENCODING 46858 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB70B +ENCODING 46859 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB70C +ENCODING 46860 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +2080 +3EF8 +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniB70D +ENCODING 46861 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB70E +ENCODING 46862 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB70F +ENCODING 46863 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB710 +ENCODING 46864 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB711 +ENCODING 46865 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB712 +ENCODING 46866 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB713 +ENCODING 46867 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB714 +ENCODING 46868 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB715 +ENCODING 46869 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB716 +ENCODING 46870 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB717 +ENCODING 46871 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB718 +ENCODING 46872 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB719 +ENCODING 46873 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB71A +ENCODING 46874 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB71B +ENCODING 46875 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB71C +ENCODING 46876 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB71D +ENCODING 46877 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB71E +ENCODING 46878 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB71F +ENCODING 46879 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB720 +ENCODING 46880 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB721 +ENCODING 46881 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB722 +ENCODING 46882 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB723 +ENCODING 46883 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB724 +ENCODING 46884 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB725 +ENCODING 46885 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB726 +ENCODING 46886 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB727 +ENCODING 46887 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB728 +ENCODING 46888 +BBX 15 13 0 0 +BITMAP +3EF8 +2080 +2080 +2080 +2080 +2080 +2080 +3EF8 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniB729 +ENCODING 46889 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB72A +ENCODING 46890 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB72B +ENCODING 46891 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB72C +ENCODING 46892 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB72D +ENCODING 46893 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB72E +ENCODING 46894 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB72F +ENCODING 46895 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB730 +ENCODING 46896 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB731 +ENCODING 46897 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB732 +ENCODING 46898 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB733 +ENCODING 46899 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB734 +ENCODING 46900 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB735 +ENCODING 46901 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB736 +ENCODING 46902 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB737 +ENCODING 46903 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB738 +ENCODING 46904 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB739 +ENCODING 46905 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB73A +ENCODING 46906 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB73B +ENCODING 46907 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB73C +ENCODING 46908 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB73D +ENCODING 46909 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB73E +ENCODING 46910 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB73F +ENCODING 46911 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB740 +ENCODING 46912 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB741 +ENCODING 46913 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB742 +ENCODING 46914 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB743 +ENCODING 46915 +BBX 15 15 0 -2 +BITMAP +3EF8 +2080 +2080 +2080 +3EF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB744 +ENCODING 46916 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +4408 +4408 +4408 +4408 +7F88 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB745 +ENCODING 46917 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB746 +ENCODING 46918 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB747 +ENCODING 46919 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB748 +ENCODING 46920 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB749 +ENCODING 46921 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB74A +ENCODING 46922 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB74B +ENCODING 46923 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB74C +ENCODING 46924 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB74D +ENCODING 46925 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB74E +ENCODING 46926 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB74F +ENCODING 46927 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB750 +ENCODING 46928 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB751 +ENCODING 46929 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB752 +ENCODING 46930 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB753 +ENCODING 46931 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB754 +ENCODING 46932 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB755 +ENCODING 46933 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB756 +ENCODING 46934 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB757 +ENCODING 46935 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB758 +ENCODING 46936 +BBX 14 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB759 +ENCODING 46937 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB75A +ENCODING 46938 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB75B +ENCODING 46939 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB75C +ENCODING 46940 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB75D +ENCODING 46941 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB75E +ENCODING 46942 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB75F +ENCODING 46943 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +4408 +4408 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB760 +ENCODING 46944 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +8408 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0008 +ENDCHAR +STARTCHAR uniB761 +ENCODING 46945 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB762 +ENCODING 46946 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB763 +ENCODING 46947 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB764 +ENCODING 46948 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB765 +ENCODING 46949 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB766 +ENCODING 46950 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB767 +ENCODING 46951 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB768 +ENCODING 46952 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB769 +ENCODING 46953 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB76A +ENCODING 46954 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB76B +ENCODING 46955 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB76C +ENCODING 46956 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB76D +ENCODING 46957 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB76E +ENCODING 46958 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB76F +ENCODING 46959 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB770 +ENCODING 46960 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB771 +ENCODING 46961 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB772 +ENCODING 46962 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB773 +ENCODING 46963 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB774 +ENCODING 46964 +BBX 14 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB775 +ENCODING 46965 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB776 +ENCODING 46966 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB777 +ENCODING 46967 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB778 +ENCODING 46968 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB779 +ENCODING 46969 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB77A +ENCODING 46970 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB77B +ENCODING 46971 +BBX 13 16 0 -2 +BITMAP +0008 +F788 +8408 +8408 +8408 +8408 +8408 +F788 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB77C +ENCODING 46972 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0108 +0108 +FF0E +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB77D +ENCODING 46973 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB77E +ENCODING 46974 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB77F +ENCODING 46975 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB780 +ENCODING 46976 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +800E +8008 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB781 +ENCODING 46977 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB782 +ENCODING 46978 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB783 +ENCODING 46979 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB784 +ENCODING 46980 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB785 +ENCODING 46981 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB786 +ENCODING 46982 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB787 +ENCODING 46983 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB788 +ENCODING 46984 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB789 +ENCODING 46985 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB78A +ENCODING 46986 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB78B +ENCODING 46987 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB78C +ENCODING 46988 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB78D +ENCODING 46989 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB78E +ENCODING 46990 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB78F +ENCODING 46991 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB790 +ENCODING 46992 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB791 +ENCODING 46993 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB792 +ENCODING 46994 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB793 +ENCODING 46995 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB794 +ENCODING 46996 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB795 +ENCODING 46997 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB796 +ENCODING 46998 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB797 +ENCODING 46999 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF0E +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB798 +ENCODING 47000 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +0124 +0124 +0124 +FF3C +8024 +8024 +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB799 +ENCODING 47001 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB79A +ENCODING 47002 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB79B +ENCODING 47003 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB79C +ENCODING 47004 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB79D +ENCODING 47005 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB79E +ENCODING 47006 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB79F +ENCODING 47007 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB7A0 +ENCODING 47008 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB7A1 +ENCODING 47009 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB7A2 +ENCODING 47010 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB7A3 +ENCODING 47011 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB7A4 +ENCODING 47012 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB7A5 +ENCODING 47013 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB7A6 +ENCODING 47014 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB7A7 +ENCODING 47015 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB7A8 +ENCODING 47016 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB7A9 +ENCODING 47017 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB7AA +ENCODING 47018 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB7AB +ENCODING 47019 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB7AC +ENCODING 47020 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB7AD +ENCODING 47021 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB7AE +ENCODING 47022 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB7AF +ENCODING 47023 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB7B0 +ENCODING 47024 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB7B1 +ENCODING 47025 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB7B2 +ENCODING 47026 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB7B3 +ENCODING 47027 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FF3C +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB7B4 +ENCODING 47028 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +010E +0108 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB7B5 +ENCODING 47029 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB7B6 +ENCODING 47030 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB7B7 +ENCODING 47031 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB7B8 +ENCODING 47032 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +010E +FF08 +8008 +8008 +FF0E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB7B9 +ENCODING 47033 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB7BA +ENCODING 47034 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB7BB +ENCODING 47035 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB7BC +ENCODING 47036 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB7BD +ENCODING 47037 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB7BE +ENCODING 47038 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB7BF +ENCODING 47039 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB7C0 +ENCODING 47040 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB7C1 +ENCODING 47041 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB7C2 +ENCODING 47042 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB7C3 +ENCODING 47043 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB7C4 +ENCODING 47044 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB7C5 +ENCODING 47045 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB7C6 +ENCODING 47046 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB7C7 +ENCODING 47047 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB7C8 +ENCODING 47048 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB7C9 +ENCODING 47049 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB7CA +ENCODING 47050 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB7CB +ENCODING 47051 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB7CC +ENCODING 47052 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB7CD +ENCODING 47053 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB7CE +ENCODING 47054 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB7CF +ENCODING 47055 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FF08 +800E +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB7D0 +ENCODING 47056 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +013C +0124 +0124 +FF24 +8024 +803C +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB7D1 +ENCODING 47057 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB7D2 +ENCODING 47058 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB7D3 +ENCODING 47059 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB7D4 +ENCODING 47060 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +8024 +803C +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB7D5 +ENCODING 47061 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB7D6 +ENCODING 47062 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB7D7 +ENCODING 47063 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB7D8 +ENCODING 47064 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB7D9 +ENCODING 47065 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB7DA +ENCODING 47066 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB7DB +ENCODING 47067 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB7DC +ENCODING 47068 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB7DD +ENCODING 47069 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB7DE +ENCODING 47070 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB7DF +ENCODING 47071 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB7E0 +ENCODING 47072 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB7E1 +ENCODING 47073 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB7E2 +ENCODING 47074 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB7E3 +ENCODING 47075 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB7E4 +ENCODING 47076 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB7E5 +ENCODING 47077 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB7E6 +ENCODING 47078 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB7E7 +ENCODING 47079 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB7E8 +ENCODING 47080 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB7E9 +ENCODING 47081 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB7EA +ENCODING 47082 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB7EB +ENCODING 47083 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FF24 +803C +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB7EC +ENCODING 47084 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0108 +0108 +FF78 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB7ED +ENCODING 47085 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB7EE +ENCODING 47086 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB7EF +ENCODING 47087 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB7F0 +ENCODING 47088 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB7F1 +ENCODING 47089 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB7F2 +ENCODING 47090 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB7F3 +ENCODING 47091 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB7F4 +ENCODING 47092 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB7F5 +ENCODING 47093 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB7F6 +ENCODING 47094 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB7F7 +ENCODING 47095 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB7F8 +ENCODING 47096 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB7F9 +ENCODING 47097 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB7FA +ENCODING 47098 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB7FB +ENCODING 47099 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB7FC +ENCODING 47100 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB7FD +ENCODING 47101 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB7FE +ENCODING 47102 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB7FF +ENCODING 47103 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB800 +ENCODING 47104 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB801 +ENCODING 47105 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB802 +ENCODING 47106 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB803 +ENCODING 47107 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB804 +ENCODING 47108 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB805 +ENCODING 47109 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB806 +ENCODING 47110 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB807 +ENCODING 47111 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF78 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB808 +ENCODING 47112 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +0124 +0124 +01E4 +FF24 +8024 +8024 +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB809 +ENCODING 47113 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB80A +ENCODING 47114 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB80B +ENCODING 47115 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB80C +ENCODING 47116 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB80D +ENCODING 47117 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB80E +ENCODING 47118 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB80F +ENCODING 47119 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB810 +ENCODING 47120 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB811 +ENCODING 47121 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB812 +ENCODING 47122 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB813 +ENCODING 47123 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB814 +ENCODING 47124 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB815 +ENCODING 47125 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB816 +ENCODING 47126 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB817 +ENCODING 47127 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB818 +ENCODING 47128 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB819 +ENCODING 47129 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB81A +ENCODING 47130 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB81B +ENCODING 47131 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB81C +ENCODING 47132 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB81D +ENCODING 47133 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB81E +ENCODING 47134 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB81F +ENCODING 47135 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB820 +ENCODING 47136 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB821 +ENCODING 47137 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB822 +ENCODING 47138 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB823 +ENCODING 47139 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FFE4 +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB824 +ENCODING 47140 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0178 +0108 +FF08 +8008 +8078 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB825 +ENCODING 47141 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB826 +ENCODING 47142 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB827 +ENCODING 47143 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB828 +ENCODING 47144 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB829 +ENCODING 47145 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB82A +ENCODING 47146 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB82B +ENCODING 47147 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB82C +ENCODING 47148 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB82D +ENCODING 47149 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB82E +ENCODING 47150 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB82F +ENCODING 47151 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB830 +ENCODING 47152 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB831 +ENCODING 47153 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB832 +ENCODING 47154 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB833 +ENCODING 47155 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB834 +ENCODING 47156 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB835 +ENCODING 47157 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB836 +ENCODING 47158 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB837 +ENCODING 47159 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB838 +ENCODING 47160 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB839 +ENCODING 47161 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB83A +ENCODING 47162 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB83B +ENCODING 47163 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB83C +ENCODING 47164 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB83D +ENCODING 47165 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB83E +ENCODING 47166 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB83F +ENCODING 47167 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FF08 +8008 +8078 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB840 +ENCODING 47168 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +0124 +01E4 +0124 +FF24 +8024 +81E4 +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB841 +ENCODING 47169 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB842 +ENCODING 47170 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB843 +ENCODING 47171 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB844 +ENCODING 47172 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB845 +ENCODING 47173 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB846 +ENCODING 47174 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB847 +ENCODING 47175 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB848 +ENCODING 47176 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB849 +ENCODING 47177 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB84A +ENCODING 47178 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB84B +ENCODING 47179 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB84C +ENCODING 47180 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB84D +ENCODING 47181 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB84E +ENCODING 47182 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB84F +ENCODING 47183 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB850 +ENCODING 47184 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB851 +ENCODING 47185 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB852 +ENCODING 47186 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB853 +ENCODING 47187 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB854 +ENCODING 47188 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB855 +ENCODING 47189 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB856 +ENCODING 47190 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB857 +ENCODING 47191 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB858 +ENCODING 47192 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB859 +ENCODING 47193 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB85A +ENCODING 47194 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB85B +ENCODING 47195 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB85C +ENCODING 47196 +BBX 15 13 0 0 +BITMAP +3FF8 +0008 +0008 +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniB85D +ENCODING 47197 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB85E +ENCODING 47198 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB85F +ENCODING 47199 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB860 +ENCODING 47200 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB861 +ENCODING 47201 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB862 +ENCODING 47202 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB863 +ENCODING 47203 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB864 +ENCODING 47204 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB865 +ENCODING 47205 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB866 +ENCODING 47206 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB867 +ENCODING 47207 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB868 +ENCODING 47208 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB869 +ENCODING 47209 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB86A +ENCODING 47210 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB86B +ENCODING 47211 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB86C +ENCODING 47212 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB86D +ENCODING 47213 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB86E +ENCODING 47214 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB86F +ENCODING 47215 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB870 +ENCODING 47216 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB871 +ENCODING 47217 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB872 +ENCODING 47218 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB873 +ENCODING 47219 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB874 +ENCODING 47220 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB875 +ENCODING 47221 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB876 +ENCODING 47222 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB877 +ENCODING 47223 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB878 +ENCODING 47224 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +7F08 +4008 +400E +4008 +7F08 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB879 +ENCODING 47225 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB87A +ENCODING 47226 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB87B +ENCODING 47227 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB87C +ENCODING 47228 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB87D +ENCODING 47229 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB87E +ENCODING 47230 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB87F +ENCODING 47231 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB880 +ENCODING 47232 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB881 +ENCODING 47233 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB882 +ENCODING 47234 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB883 +ENCODING 47235 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB884 +ENCODING 47236 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB885 +ENCODING 47237 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB886 +ENCODING 47238 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB887 +ENCODING 47239 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB888 +ENCODING 47240 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB889 +ENCODING 47241 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB88A +ENCODING 47242 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB88B +ENCODING 47243 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB88C +ENCODING 47244 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB88D +ENCODING 47245 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB88E +ENCODING 47246 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB88F +ENCODING 47247 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB890 +ENCODING 47248 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB891 +ENCODING 47249 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB892 +ENCODING 47250 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB893 +ENCODING 47251 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB894 +ENCODING 47252 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +0124 +7F24 +4024 +403C +4024 +7F24 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniB895 +ENCODING 47253 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB896 +ENCODING 47254 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB897 +ENCODING 47255 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB898 +ENCODING 47256 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB899 +ENCODING 47257 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB89A +ENCODING 47258 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB89B +ENCODING 47259 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB89C +ENCODING 47260 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB89D +ENCODING 47261 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB89E +ENCODING 47262 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB89F +ENCODING 47263 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB8A0 +ENCODING 47264 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB8A1 +ENCODING 47265 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB8A2 +ENCODING 47266 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB8A3 +ENCODING 47267 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB8A4 +ENCODING 47268 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB8A5 +ENCODING 47269 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB8A6 +ENCODING 47270 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB8A7 +ENCODING 47271 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB8A8 +ENCODING 47272 +BBX 15 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB8A9 +ENCODING 47273 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB8AA +ENCODING 47274 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB8AB +ENCODING 47275 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB8AC +ENCODING 47276 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB8AD +ENCODING 47277 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB8AE +ENCODING 47278 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB8AF +ENCODING 47279 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB8B0 +ENCODING 47280 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +7F08 +4008 +4008 +4008 +7F08 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB8B1 +ENCODING 47281 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB8B2 +ENCODING 47282 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB8B3 +ENCODING 47283 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB8B4 +ENCODING 47284 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB8B5 +ENCODING 47285 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB8B6 +ENCODING 47286 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB8B7 +ENCODING 47287 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB8B8 +ENCODING 47288 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB8B9 +ENCODING 47289 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB8BA +ENCODING 47290 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB8BB +ENCODING 47291 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB8BC +ENCODING 47292 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB8BD +ENCODING 47293 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB8BE +ENCODING 47294 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB8BF +ENCODING 47295 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB8C0 +ENCODING 47296 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB8C1 +ENCODING 47297 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB8C2 +ENCODING 47298 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB8C3 +ENCODING 47299 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB8C4 +ENCODING 47300 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB8C5 +ENCODING 47301 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB8C6 +ENCODING 47302 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB8C7 +ENCODING 47303 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB8C8 +ENCODING 47304 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB8C9 +ENCODING 47305 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB8CA +ENCODING 47306 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB8CB +ENCODING 47307 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB8CC +ENCODING 47308 +BBX 15 13 0 0 +BITMAP +3FF8 +0008 +0008 +3FF8 +2000 +2000 +2000 +3FF8 +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniB8CD +ENCODING 47309 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB8CE +ENCODING 47310 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB8CF +ENCODING 47311 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB8D0 +ENCODING 47312 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB8D1 +ENCODING 47313 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB8D2 +ENCODING 47314 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB8D3 +ENCODING 47315 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB8D4 +ENCODING 47316 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB8D5 +ENCODING 47317 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB8D6 +ENCODING 47318 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB8D7 +ENCODING 47319 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB8D8 +ENCODING 47320 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB8D9 +ENCODING 47321 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB8DA +ENCODING 47322 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB8DB +ENCODING 47323 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB8DC +ENCODING 47324 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB8DD +ENCODING 47325 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB8DE +ENCODING 47326 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB8DF +ENCODING 47327 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB8E0 +ENCODING 47328 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB8E1 +ENCODING 47329 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB8E2 +ENCODING 47330 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB8E3 +ENCODING 47331 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB8E4 +ENCODING 47332 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB8E5 +ENCODING 47333 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB8E6 +ENCODING 47334 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB8E7 +ENCODING 47335 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB8E8 +ENCODING 47336 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniB8E9 +ENCODING 47337 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB8EA +ENCODING 47338 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB8EB +ENCODING 47339 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB8EC +ENCODING 47340 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB8ED +ENCODING 47341 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB8EE +ENCODING 47342 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB8EF +ENCODING 47343 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB8F0 +ENCODING 47344 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB8F1 +ENCODING 47345 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB8F2 +ENCODING 47346 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB8F3 +ENCODING 47347 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB8F4 +ENCODING 47348 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB8F5 +ENCODING 47349 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB8F6 +ENCODING 47350 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB8F7 +ENCODING 47351 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB8F8 +ENCODING 47352 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB8F9 +ENCODING 47353 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB8FA +ENCODING 47354 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB8FB +ENCODING 47355 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB8FC +ENCODING 47356 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB8FD +ENCODING 47357 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB8FE +ENCODING 47358 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB8FF +ENCODING 47359 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB900 +ENCODING 47360 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB901 +ENCODING 47361 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB902 +ENCODING 47362 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB903 +ENCODING 47363 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB904 +ENCODING 47364 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniB905 +ENCODING 47365 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB906 +ENCODING 47366 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB907 +ENCODING 47367 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB908 +ENCODING 47368 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB909 +ENCODING 47369 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB90A +ENCODING 47370 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB90B +ENCODING 47371 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB90C +ENCODING 47372 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB90D +ENCODING 47373 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB90E +ENCODING 47374 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB90F +ENCODING 47375 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB910 +ENCODING 47376 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB911 +ENCODING 47377 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB912 +ENCODING 47378 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB913 +ENCODING 47379 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB914 +ENCODING 47380 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB915 +ENCODING 47381 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB916 +ENCODING 47382 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB917 +ENCODING 47383 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB918 +ENCODING 47384 +BBX 14 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB919 +ENCODING 47385 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB91A +ENCODING 47386 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB91B +ENCODING 47387 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB91C +ENCODING 47388 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB91D +ENCODING 47389 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB91E +ENCODING 47390 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB91F +ENCODING 47391 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB920 +ENCODING 47392 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +4024 +4024 +7F24 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniB921 +ENCODING 47393 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB922 +ENCODING 47394 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB923 +ENCODING 47395 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB924 +ENCODING 47396 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB925 +ENCODING 47397 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB926 +ENCODING 47398 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB927 +ENCODING 47399 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB928 +ENCODING 47400 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB929 +ENCODING 47401 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB92A +ENCODING 47402 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB92B +ENCODING 47403 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB92C +ENCODING 47404 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB92D +ENCODING 47405 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB92E +ENCODING 47406 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB92F +ENCODING 47407 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB930 +ENCODING 47408 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB931 +ENCODING 47409 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB932 +ENCODING 47410 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB933 +ENCODING 47411 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB934 +ENCODING 47412 +BBX 15 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB935 +ENCODING 47413 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB936 +ENCODING 47414 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB937 +ENCODING 47415 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB938 +ENCODING 47416 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB939 +ENCODING 47417 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB93A +ENCODING 47418 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB93B +ENCODING 47419 +BBX 14 16 0 -2 +BITMAP +7F24 +0124 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniB93C +ENCODING 47420 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniB93D +ENCODING 47421 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB93E +ENCODING 47422 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB93F +ENCODING 47423 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB940 +ENCODING 47424 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB941 +ENCODING 47425 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB942 +ENCODING 47426 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB943 +ENCODING 47427 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB944 +ENCODING 47428 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB945 +ENCODING 47429 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB946 +ENCODING 47430 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB947 +ENCODING 47431 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB948 +ENCODING 47432 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB949 +ENCODING 47433 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB94A +ENCODING 47434 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB94B +ENCODING 47435 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB94C +ENCODING 47436 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB94D +ENCODING 47437 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB94E +ENCODING 47438 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB94F +ENCODING 47439 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB950 +ENCODING 47440 +BBX 14 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB951 +ENCODING 47441 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB952 +ENCODING 47442 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB953 +ENCODING 47443 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB954 +ENCODING 47444 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB955 +ENCODING 47445 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB956 +ENCODING 47446 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB957 +ENCODING 47447 +BBX 13 16 0 -2 +BITMAP +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB958 +ENCODING 47448 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniB959 +ENCODING 47449 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB95A +ENCODING 47450 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB95B +ENCODING 47451 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB95C +ENCODING 47452 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB95D +ENCODING 47453 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB95E +ENCODING 47454 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB95F +ENCODING 47455 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB960 +ENCODING 47456 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB961 +ENCODING 47457 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB962 +ENCODING 47458 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB963 +ENCODING 47459 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB964 +ENCODING 47460 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB965 +ENCODING 47461 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB966 +ENCODING 47462 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB967 +ENCODING 47463 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB968 +ENCODING 47464 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB969 +ENCODING 47465 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB96A +ENCODING 47466 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB96B +ENCODING 47467 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB96C +ENCODING 47468 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB96D +ENCODING 47469 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB96E +ENCODING 47470 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB96F +ENCODING 47471 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB970 +ENCODING 47472 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB971 +ENCODING 47473 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB972 +ENCODING 47474 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB973 +ENCODING 47475 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB974 +ENCODING 47476 +BBX 15 13 0 0 +BITMAP +3FF8 +0008 +0008 +3FF8 +2000 +2000 +2000 +3FF8 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniB975 +ENCODING 47477 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB976 +ENCODING 47478 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB977 +ENCODING 47479 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB978 +ENCODING 47480 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB979 +ENCODING 47481 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB97A +ENCODING 47482 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB97B +ENCODING 47483 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB97C +ENCODING 47484 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB97D +ENCODING 47485 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB97E +ENCODING 47486 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB97F +ENCODING 47487 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB980 +ENCODING 47488 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB981 +ENCODING 47489 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB982 +ENCODING 47490 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB983 +ENCODING 47491 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB984 +ENCODING 47492 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB985 +ENCODING 47493 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniB986 +ENCODING 47494 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB987 +ENCODING 47495 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB988 +ENCODING 47496 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB989 +ENCODING 47497 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB98A +ENCODING 47498 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB98B +ENCODING 47499 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB98C +ENCODING 47500 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB98D +ENCODING 47501 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniB98E +ENCODING 47502 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB98F +ENCODING 47503 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB990 +ENCODING 47504 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +0108 +7F08 +4008 +4008 +4008 +7F08 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniB991 +ENCODING 47505 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB992 +ENCODING 47506 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB993 +ENCODING 47507 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB994 +ENCODING 47508 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB995 +ENCODING 47509 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB996 +ENCODING 47510 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB997 +ENCODING 47511 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB998 +ENCODING 47512 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB999 +ENCODING 47513 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB99A +ENCODING 47514 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB99B +ENCODING 47515 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB99C +ENCODING 47516 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB99D +ENCODING 47517 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB99E +ENCODING 47518 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB99F +ENCODING 47519 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB9A0 +ENCODING 47520 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB9A1 +ENCODING 47521 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB9A2 +ENCODING 47522 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB9A3 +ENCODING 47523 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB9A4 +ENCODING 47524 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB9A5 +ENCODING 47525 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB9A6 +ENCODING 47526 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB9A7 +ENCODING 47527 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB9A8 +ENCODING 47528 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB9A9 +ENCODING 47529 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB9AA +ENCODING 47530 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB9AB +ENCODING 47531 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB9AC +ENCODING 47532 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0108 +0108 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB9AD +ENCODING 47533 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB9AE +ENCODING 47534 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB9AF +ENCODING 47535 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB9B0 +ENCODING 47536 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB9B1 +ENCODING 47537 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB9B2 +ENCODING 47538 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB9B3 +ENCODING 47539 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB9B4 +ENCODING 47540 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB9B5 +ENCODING 47541 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB9B6 +ENCODING 47542 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB9B7 +ENCODING 47543 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB9B8 +ENCODING 47544 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB9B9 +ENCODING 47545 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB9BA +ENCODING 47546 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB9BB +ENCODING 47547 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB9BC +ENCODING 47548 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB9BD +ENCODING 47549 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB9BE +ENCODING 47550 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB9BF +ENCODING 47551 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB9C0 +ENCODING 47552 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB9C1 +ENCODING 47553 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB9C2 +ENCODING 47554 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB9C3 +ENCODING 47555 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB9C4 +ENCODING 47556 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB9C5 +ENCODING 47557 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB9C6 +ENCODING 47558 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB9C7 +ENCODING 47559 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FF08 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB9C8 +ENCODING 47560 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +810E +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniB9C9 +ENCODING 47561 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniB9CA +ENCODING 47562 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniB9CB +ENCODING 47563 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniB9CC +ENCODING 47564 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +810E +8108 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB9CD +ENCODING 47565 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB9CE +ENCODING 47566 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB9CF +ENCODING 47567 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB9D0 +ENCODING 47568 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB9D1 +ENCODING 47569 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniB9D2 +ENCODING 47570 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB9D3 +ENCODING 47571 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniB9D4 +ENCODING 47572 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniB9D5 +ENCODING 47573 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniB9D6 +ENCODING 47574 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniB9D7 +ENCODING 47575 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniB9D8 +ENCODING 47576 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB9D9 +ENCODING 47577 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniB9DA +ENCODING 47578 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniB9DB +ENCODING 47579 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB9DC +ENCODING 47580 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniB9DD +ENCODING 47581 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniB9DE +ENCODING 47582 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB9DF +ENCODING 47583 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniB9E0 +ENCODING 47584 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniB9E1 +ENCODING 47585 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniB9E2 +ENCODING 47586 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniB9E3 +ENCODING 47587 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniB9E4 +ENCODING 47588 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +8124 +8124 +8124 +813C +8124 +8124 +8124 +8124 +8124 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniB9E5 +ENCODING 47589 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniB9E6 +ENCODING 47590 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniB9E7 +ENCODING 47591 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniB9E8 +ENCODING 47592 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB9E9 +ENCODING 47593 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB9EA +ENCODING 47594 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB9EB +ENCODING 47595 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB9EC +ENCODING 47596 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB9ED +ENCODING 47597 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniB9EE +ENCODING 47598 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB9EF +ENCODING 47599 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniB9F0 +ENCODING 47600 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniB9F1 +ENCODING 47601 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniB9F2 +ENCODING 47602 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniB9F3 +ENCODING 47603 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniB9F4 +ENCODING 47604 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB9F5 +ENCODING 47605 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniB9F6 +ENCODING 47606 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniB9F7 +ENCODING 47607 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB9F8 +ENCODING 47608 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniB9F9 +ENCODING 47609 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniB9FA +ENCODING 47610 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB9FB +ENCODING 47611 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniB9FC +ENCODING 47612 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniB9FD +ENCODING 47613 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniB9FE +ENCODING 47614 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniB9FF +ENCODING 47615 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBA00 +ENCODING 47616 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +810E +8108 +8108 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniBA01 +ENCODING 47617 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBA02 +ENCODING 47618 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBA03 +ENCODING 47619 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBA04 +ENCODING 47620 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8108 +810E +8108 +8108 +8108 +FF0E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBA05 +ENCODING 47621 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBA06 +ENCODING 47622 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBA07 +ENCODING 47623 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBA08 +ENCODING 47624 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBA09 +ENCODING 47625 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBA0A +ENCODING 47626 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBA0B +ENCODING 47627 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBA0C +ENCODING 47628 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBA0D +ENCODING 47629 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBA0E +ENCODING 47630 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBA0F +ENCODING 47631 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBA10 +ENCODING 47632 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBA11 +ENCODING 47633 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBA12 +ENCODING 47634 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBA13 +ENCODING 47635 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBA14 +ENCODING 47636 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBA15 +ENCODING 47637 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBA16 +ENCODING 47638 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBA17 +ENCODING 47639 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBA18 +ENCODING 47640 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBA19 +ENCODING 47641 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBA1A +ENCODING 47642 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBA1B +ENCODING 47643 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +810E +8108 +8108 +810E +8108 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBA1C +ENCODING 47644 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +813C +8124 +8124 +8124 +8124 +813C +8124 +8124 +8124 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniBA1D +ENCODING 47645 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBA1E +ENCODING 47646 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBA1F +ENCODING 47647 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBA20 +ENCODING 47648 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +8124 +813C +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBA21 +ENCODING 47649 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBA22 +ENCODING 47650 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBA23 +ENCODING 47651 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBA24 +ENCODING 47652 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBA25 +ENCODING 47653 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBA26 +ENCODING 47654 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBA27 +ENCODING 47655 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBA28 +ENCODING 47656 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBA29 +ENCODING 47657 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBA2A +ENCODING 47658 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBA2B +ENCODING 47659 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBA2C +ENCODING 47660 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBA2D +ENCODING 47661 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBA2E +ENCODING 47662 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBA2F +ENCODING 47663 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBA30 +ENCODING 47664 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBA31 +ENCODING 47665 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBA32 +ENCODING 47666 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBA33 +ENCODING 47667 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBA34 +ENCODING 47668 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBA35 +ENCODING 47669 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBA36 +ENCODING 47670 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBA37 +ENCODING 47671 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +813C +8124 +8124 +813C +8124 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBA38 +ENCODING 47672 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +8178 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniBA39 +ENCODING 47673 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBA3A +ENCODING 47674 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBA3B +ENCODING 47675 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBA3C +ENCODING 47676 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBA3D +ENCODING 47677 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBA3E +ENCODING 47678 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBA3F +ENCODING 47679 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBA40 +ENCODING 47680 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBA41 +ENCODING 47681 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBA42 +ENCODING 47682 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBA43 +ENCODING 47683 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBA44 +ENCODING 47684 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBA45 +ENCODING 47685 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBA46 +ENCODING 47686 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBA47 +ENCODING 47687 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBA48 +ENCODING 47688 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBA49 +ENCODING 47689 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBA4A +ENCODING 47690 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBA4B +ENCODING 47691 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBA4C +ENCODING 47692 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBA4D +ENCODING 47693 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBA4E +ENCODING 47694 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBA4F +ENCODING 47695 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBA50 +ENCODING 47696 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBA51 +ENCODING 47697 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBA52 +ENCODING 47698 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBA53 +ENCODING 47699 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8178 +8108 +8108 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBA54 +ENCODING 47700 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +8124 +8124 +81E4 +8124 +8124 +8124 +8124 +8124 +8124 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniBA55 +ENCODING 47701 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBA56 +ENCODING 47702 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBA57 +ENCODING 47703 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBA58 +ENCODING 47704 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBA59 +ENCODING 47705 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBA5A +ENCODING 47706 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBA5B +ENCODING 47707 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBA5C +ENCODING 47708 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBA5D +ENCODING 47709 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBA5E +ENCODING 47710 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBA5F +ENCODING 47711 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBA60 +ENCODING 47712 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBA61 +ENCODING 47713 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBA62 +ENCODING 47714 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBA63 +ENCODING 47715 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBA64 +ENCODING 47716 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBA65 +ENCODING 47717 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBA66 +ENCODING 47718 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBA67 +ENCODING 47719 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBA68 +ENCODING 47720 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBA69 +ENCODING 47721 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBA6A +ENCODING 47722 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBA6B +ENCODING 47723 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBA6C +ENCODING 47724 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBA6D +ENCODING 47725 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBA6E +ENCODING 47726 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBA6F +ENCODING 47727 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +81E4 +8124 +8124 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBA70 +ENCODING 47728 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8178 +8108 +8108 +8108 +8178 +8108 +8108 +8108 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniBA71 +ENCODING 47729 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBA72 +ENCODING 47730 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBA73 +ENCODING 47731 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBA74 +ENCODING 47732 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBA75 +ENCODING 47733 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBA76 +ENCODING 47734 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBA77 +ENCODING 47735 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBA78 +ENCODING 47736 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBA79 +ENCODING 47737 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBA7A +ENCODING 47738 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBA7B +ENCODING 47739 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBA7C +ENCODING 47740 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBA7D +ENCODING 47741 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBA7E +ENCODING 47742 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBA7F +ENCODING 47743 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBA80 +ENCODING 47744 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBA81 +ENCODING 47745 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBA82 +ENCODING 47746 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBA83 +ENCODING 47747 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBA84 +ENCODING 47748 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBA85 +ENCODING 47749 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBA86 +ENCODING 47750 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBA87 +ENCODING 47751 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBA88 +ENCODING 47752 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBA89 +ENCODING 47753 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBA8A +ENCODING 47754 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBA8B +ENCODING 47755 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8178 +8108 +8108 +8178 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBA8C +ENCODING 47756 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +8124 +8124 +81E4 +8124 +8124 +8124 +81E4 +8124 +8124 +8124 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniBA8D +ENCODING 47757 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBA8E +ENCODING 47758 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBA8F +ENCODING 47759 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBA90 +ENCODING 47760 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBA91 +ENCODING 47761 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBA92 +ENCODING 47762 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBA93 +ENCODING 47763 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBA94 +ENCODING 47764 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBA95 +ENCODING 47765 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBA96 +ENCODING 47766 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBA97 +ENCODING 47767 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBA98 +ENCODING 47768 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBA99 +ENCODING 47769 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBA9A +ENCODING 47770 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBA9B +ENCODING 47771 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBA9C +ENCODING 47772 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBA9D +ENCODING 47773 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBA9E +ENCODING 47774 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBA9F +ENCODING 47775 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBAA0 +ENCODING 47776 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBAA1 +ENCODING 47777 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBAA2 +ENCODING 47778 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBAA3 +ENCODING 47779 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBAA4 +ENCODING 47780 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBAA5 +ENCODING 47781 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBAA6 +ENCODING 47782 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBAA7 +ENCODING 47783 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8124 +81E4 +8124 +81E4 +8124 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBAA8 +ENCODING 47784 +BBX 15 13 0 0 +BITMAP +3FF8 +2008 +2008 +2008 +2008 +2008 +2008 +3FF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniBAA9 +ENCODING 47785 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBAAA +ENCODING 47786 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBAAB +ENCODING 47787 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBAAC +ENCODING 47788 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBAAD +ENCODING 47789 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBAAE +ENCODING 47790 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBAAF +ENCODING 47791 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBAB0 +ENCODING 47792 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBAB1 +ENCODING 47793 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBAB2 +ENCODING 47794 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBAB3 +ENCODING 47795 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBAB4 +ENCODING 47796 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBAB5 +ENCODING 47797 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBAB6 +ENCODING 47798 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBAB7 +ENCODING 47799 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBAB8 +ENCODING 47800 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBAB9 +ENCODING 47801 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBABA +ENCODING 47802 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBABB +ENCODING 47803 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBABC +ENCODING 47804 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBABD +ENCODING 47805 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBABE +ENCODING 47806 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBABF +ENCODING 47807 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBAC0 +ENCODING 47808 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBAC1 +ENCODING 47809 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBAC2 +ENCODING 47810 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBAC3 +ENCODING 47811 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBAC4 +ENCODING 47812 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +4108 +4108 +4108 +410E +7F08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniBAC5 +ENCODING 47813 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBAC6 +ENCODING 47814 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBAC7 +ENCODING 47815 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBAC8 +ENCODING 47816 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBAC9 +ENCODING 47817 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBACA +ENCODING 47818 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBACB +ENCODING 47819 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBACC +ENCODING 47820 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBACD +ENCODING 47821 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBACE +ENCODING 47822 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBACF +ENCODING 47823 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBAD0 +ENCODING 47824 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBAD1 +ENCODING 47825 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBAD2 +ENCODING 47826 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBAD3 +ENCODING 47827 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBAD4 +ENCODING 47828 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBAD5 +ENCODING 47829 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBAD6 +ENCODING 47830 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBAD7 +ENCODING 47831 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBAD8 +ENCODING 47832 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBAD9 +ENCODING 47833 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBADA +ENCODING 47834 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBADB +ENCODING 47835 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBADC +ENCODING 47836 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBADD +ENCODING 47837 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBADE +ENCODING 47838 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBADF +ENCODING 47839 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F0E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBAE0 +ENCODING 47840 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +4124 +4124 +4124 +413C +7F24 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniBAE1 +ENCODING 47841 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBAE2 +ENCODING 47842 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBAE3 +ENCODING 47843 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBAE4 +ENCODING 47844 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBAE5 +ENCODING 47845 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBAE6 +ENCODING 47846 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBAE7 +ENCODING 47847 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBAE8 +ENCODING 47848 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBAE9 +ENCODING 47849 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBAEA +ENCODING 47850 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBAEB +ENCODING 47851 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBAEC +ENCODING 47852 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBAED +ENCODING 47853 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBAEE +ENCODING 47854 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBAEF +ENCODING 47855 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBAF0 +ENCODING 47856 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBAF1 +ENCODING 47857 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBAF2 +ENCODING 47858 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBAF3 +ENCODING 47859 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBAF4 +ENCODING 47860 +BBX 15 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBAF5 +ENCODING 47861 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBAF6 +ENCODING 47862 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBAF7 +ENCODING 47863 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBAF8 +ENCODING 47864 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBAF9 +ENCODING 47865 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBAFA +ENCODING 47866 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBAFB +ENCODING 47867 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +7F3C +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBAFC +ENCODING 47868 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +4108 +4108 +4108 +4108 +7F08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniBAFD +ENCODING 47869 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBAFE +ENCODING 47870 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBAFF +ENCODING 47871 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBB00 +ENCODING 47872 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBB01 +ENCODING 47873 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBB02 +ENCODING 47874 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBB03 +ENCODING 47875 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBB04 +ENCODING 47876 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBB05 +ENCODING 47877 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBB06 +ENCODING 47878 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBB07 +ENCODING 47879 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBB08 +ENCODING 47880 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBB09 +ENCODING 47881 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBB0A +ENCODING 47882 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBB0B +ENCODING 47883 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBB0C +ENCODING 47884 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBB0D +ENCODING 47885 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBB0E +ENCODING 47886 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBB0F +ENCODING 47887 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB10 +ENCODING 47888 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBB11 +ENCODING 47889 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBB12 +ENCODING 47890 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB13 +ENCODING 47891 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB14 +ENCODING 47892 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBB15 +ENCODING 47893 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBB16 +ENCODING 47894 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBB17 +ENCODING 47895 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBB18 +ENCODING 47896 +BBX 15 13 0 0 +BITMAP +3FF8 +2008 +2008 +2008 +2008 +2008 +2008 +3FF8 +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniBB19 +ENCODING 47897 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBB1A +ENCODING 47898 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBB1B +ENCODING 47899 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBB1C +ENCODING 47900 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBB1D +ENCODING 47901 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBB1E +ENCODING 47902 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBB1F +ENCODING 47903 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBB20 +ENCODING 47904 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBB21 +ENCODING 47905 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBB22 +ENCODING 47906 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBB23 +ENCODING 47907 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBB24 +ENCODING 47908 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBB25 +ENCODING 47909 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBB26 +ENCODING 47910 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBB27 +ENCODING 47911 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBB28 +ENCODING 47912 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBB29 +ENCODING 47913 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBB2A +ENCODING 47914 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBB2B +ENCODING 47915 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB2C +ENCODING 47916 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBB2D +ENCODING 47917 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBB2E +ENCODING 47918 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB2F +ENCODING 47919 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB30 +ENCODING 47920 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBB31 +ENCODING 47921 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBB32 +ENCODING 47922 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBB33 +ENCODING 47923 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBB34 +ENCODING 47924 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +2008 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniBB35 +ENCODING 47925 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBB36 +ENCODING 47926 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBB37 +ENCODING 47927 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBB38 +ENCODING 47928 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBB39 +ENCODING 47929 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBB3A +ENCODING 47930 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBB3B +ENCODING 47931 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBB3C +ENCODING 47932 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBB3D +ENCODING 47933 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBB3E +ENCODING 47934 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBB3F +ENCODING 47935 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBB40 +ENCODING 47936 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBB41 +ENCODING 47937 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBB42 +ENCODING 47938 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBB43 +ENCODING 47939 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBB44 +ENCODING 47940 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBB45 +ENCODING 47941 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBB46 +ENCODING 47942 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBB47 +ENCODING 47943 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB48 +ENCODING 47944 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBB49 +ENCODING 47945 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBB4A +ENCODING 47946 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB4B +ENCODING 47947 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB4C +ENCODING 47948 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBB4D +ENCODING 47949 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBB4E +ENCODING 47950 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBB4F +ENCODING 47951 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBB50 +ENCODING 47952 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniBB51 +ENCODING 47953 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBB52 +ENCODING 47954 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBB53 +ENCODING 47955 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBB54 +ENCODING 47956 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBB55 +ENCODING 47957 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBB56 +ENCODING 47958 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBB57 +ENCODING 47959 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBB58 +ENCODING 47960 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBB59 +ENCODING 47961 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBB5A +ENCODING 47962 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBB5B +ENCODING 47963 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBB5C +ENCODING 47964 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBB5D +ENCODING 47965 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBB5E +ENCODING 47966 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBB5F +ENCODING 47967 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBB60 +ENCODING 47968 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBB61 +ENCODING 47969 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBB62 +ENCODING 47970 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBB63 +ENCODING 47971 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB64 +ENCODING 47972 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBB65 +ENCODING 47973 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBB66 +ENCODING 47974 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB67 +ENCODING 47975 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB68 +ENCODING 47976 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBB69 +ENCODING 47977 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBB6A +ENCODING 47978 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBB6B +ENCODING 47979 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBB6C +ENCODING 47980 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +4124 +4124 +4124 +7F24 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniBB6D +ENCODING 47981 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBB6E +ENCODING 47982 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBB6F +ENCODING 47983 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBB70 +ENCODING 47984 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBB71 +ENCODING 47985 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBB72 +ENCODING 47986 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBB73 +ENCODING 47987 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBB74 +ENCODING 47988 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBB75 +ENCODING 47989 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBB76 +ENCODING 47990 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBB77 +ENCODING 47991 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBB78 +ENCODING 47992 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBB79 +ENCODING 47993 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBB7A +ENCODING 47994 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBB7B +ENCODING 47995 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBB7C +ENCODING 47996 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBB7D +ENCODING 47997 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBB7E +ENCODING 47998 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBB7F +ENCODING 47999 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBB80 +ENCODING 48000 +BBX 15 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBB81 +ENCODING 48001 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBB82 +ENCODING 48002 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBB83 +ENCODING 48003 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBB84 +ENCODING 48004 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBB85 +ENCODING 48005 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBB86 +ENCODING 48006 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBB87 +ENCODING 48007 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBB88 +ENCODING 48008 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniBB89 +ENCODING 48009 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBB8A +ENCODING 48010 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBB8B +ENCODING 48011 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBB8C +ENCODING 48012 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBB8D +ENCODING 48013 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBB8E +ENCODING 48014 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBB8F +ENCODING 48015 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBB90 +ENCODING 48016 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBB91 +ENCODING 48017 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBB92 +ENCODING 48018 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBB93 +ENCODING 48019 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBB94 +ENCODING 48020 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBB95 +ENCODING 48021 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBB96 +ENCODING 48022 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBB97 +ENCODING 48023 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBB98 +ENCODING 48024 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBB99 +ENCODING 48025 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBB9A +ENCODING 48026 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBB9B +ENCODING 48027 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB9C +ENCODING 48028 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBB9D +ENCODING 48029 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBB9E +ENCODING 48030 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBB9F +ENCODING 48031 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBBA0 +ENCODING 48032 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBBA1 +ENCODING 48033 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBBA2 +ENCODING 48034 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBBA3 +ENCODING 48035 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBBA4 +ENCODING 48036 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +2008 +3FF8 +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniBBA5 +ENCODING 48037 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBBA6 +ENCODING 48038 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBBA7 +ENCODING 48039 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBBA8 +ENCODING 48040 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBBA9 +ENCODING 48041 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBBAA +ENCODING 48042 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBBAB +ENCODING 48043 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBBAC +ENCODING 48044 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBBAD +ENCODING 48045 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBBAE +ENCODING 48046 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBBAF +ENCODING 48047 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBBB0 +ENCODING 48048 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBBB1 +ENCODING 48049 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBBB2 +ENCODING 48050 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBBB3 +ENCODING 48051 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBBB4 +ENCODING 48052 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBBB5 +ENCODING 48053 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBBB6 +ENCODING 48054 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBBB7 +ENCODING 48055 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBBB8 +ENCODING 48056 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBBB9 +ENCODING 48057 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBBBA +ENCODING 48058 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBBBB +ENCODING 48059 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBBBC +ENCODING 48060 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBBBD +ENCODING 48061 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBBBE +ENCODING 48062 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBBBF +ENCODING 48063 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBBC0 +ENCODING 48064 +BBX 15 13 0 0 +BITMAP +3FF8 +2008 +2008 +2008 +2008 +2008 +2008 +3FF8 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniBBC1 +ENCODING 48065 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBBC2 +ENCODING 48066 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBBC3 +ENCODING 48067 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBBC4 +ENCODING 48068 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBBC5 +ENCODING 48069 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBBC6 +ENCODING 48070 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBBC7 +ENCODING 48071 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBBC8 +ENCODING 48072 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBBC9 +ENCODING 48073 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBBCA +ENCODING 48074 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBBCB +ENCODING 48075 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBBCC +ENCODING 48076 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBBCD +ENCODING 48077 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBBCE +ENCODING 48078 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBBCF +ENCODING 48079 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBBD0 +ENCODING 48080 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBBD1 +ENCODING 48081 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBBD2 +ENCODING 48082 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBBD3 +ENCODING 48083 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBBD4 +ENCODING 48084 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBBD5 +ENCODING 48085 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBBD6 +ENCODING 48086 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBBD7 +ENCODING 48087 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBBD8 +ENCODING 48088 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBBD9 +ENCODING 48089 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBBDA +ENCODING 48090 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBBDB +ENCODING 48091 +BBX 15 15 0 -2 +BITMAP +3FF8 +2008 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBBDC +ENCODING 48092 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +4108 +4108 +4108 +4108 +7F08 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniBBDD +ENCODING 48093 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBBDE +ENCODING 48094 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBBDF +ENCODING 48095 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBBE0 +ENCODING 48096 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBBE1 +ENCODING 48097 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBBE2 +ENCODING 48098 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBBE3 +ENCODING 48099 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBBE4 +ENCODING 48100 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBBE5 +ENCODING 48101 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBBE6 +ENCODING 48102 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBBE7 +ENCODING 48103 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBBE8 +ENCODING 48104 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBBE9 +ENCODING 48105 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBBEA +ENCODING 48106 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBBEB +ENCODING 48107 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBBEC +ENCODING 48108 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBBED +ENCODING 48109 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBBEE +ENCODING 48110 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBBEF +ENCODING 48111 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBBF0 +ENCODING 48112 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBBF1 +ENCODING 48113 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBBF2 +ENCODING 48114 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBBF3 +ENCODING 48115 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBBF4 +ENCODING 48116 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBBF5 +ENCODING 48117 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBBF6 +ENCODING 48118 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBBF7 +ENCODING 48119 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBBF8 +ENCODING 48120 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +8108 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniBBF9 +ENCODING 48121 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBBFA +ENCODING 48122 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBBFB +ENCODING 48123 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBBFC +ENCODING 48124 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBBFD +ENCODING 48125 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBBFE +ENCODING 48126 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBBFF +ENCODING 48127 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC00 +ENCODING 48128 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC01 +ENCODING 48129 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBC02 +ENCODING 48130 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBC03 +ENCODING 48131 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBC04 +ENCODING 48132 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBC05 +ENCODING 48133 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBC06 +ENCODING 48134 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBC07 +ENCODING 48135 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBC08 +ENCODING 48136 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBC09 +ENCODING 48137 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBC0A +ENCODING 48138 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBC0B +ENCODING 48139 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBC0C +ENCODING 48140 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBC0D +ENCODING 48141 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBC0E +ENCODING 48142 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBC0F +ENCODING 48143 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBC10 +ENCODING 48144 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBC11 +ENCODING 48145 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC12 +ENCODING 48146 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBC13 +ENCODING 48147 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBC14 +ENCODING 48148 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +8108 +8108 +8108 +FF08 +810E +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniBC15 +ENCODING 48149 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBC16 +ENCODING 48150 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBC17 +ENCODING 48151 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBC18 +ENCODING 48152 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +810E +8108 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC19 +ENCODING 48153 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBC1A +ENCODING 48154 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBC1B +ENCODING 48155 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC1C +ENCODING 48156 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC1D +ENCODING 48157 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBC1E +ENCODING 48158 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBC1F +ENCODING 48159 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBC20 +ENCODING 48160 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBC21 +ENCODING 48161 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBC22 +ENCODING 48162 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBC23 +ENCODING 48163 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBC24 +ENCODING 48164 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBC25 +ENCODING 48165 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBC26 +ENCODING 48166 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBC27 +ENCODING 48167 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBC28 +ENCODING 48168 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBC29 +ENCODING 48169 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBC2A +ENCODING 48170 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBC2B +ENCODING 48171 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBC2C +ENCODING 48172 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBC2D +ENCODING 48173 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC2E +ENCODING 48174 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBC2F +ENCODING 48175 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +810E +8108 +8108 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBC30 +ENCODING 48176 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +8124 +8124 +8124 +FF24 +813C +8124 +8124 +8124 +8124 +8124 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniBC31 +ENCODING 48177 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBC32 +ENCODING 48178 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBC33 +ENCODING 48179 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBC34 +ENCODING 48180 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBC35 +ENCODING 48181 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBC36 +ENCODING 48182 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBC37 +ENCODING 48183 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBC38 +ENCODING 48184 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBC39 +ENCODING 48185 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBC3A +ENCODING 48186 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBC3B +ENCODING 48187 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBC3C +ENCODING 48188 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBC3D +ENCODING 48189 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBC3E +ENCODING 48190 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBC3F +ENCODING 48191 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBC40 +ENCODING 48192 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBC41 +ENCODING 48193 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBC42 +ENCODING 48194 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBC43 +ENCODING 48195 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBC44 +ENCODING 48196 +BBX 15 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBC45 +ENCODING 48197 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBC46 +ENCODING 48198 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBC47 +ENCODING 48199 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBC48 +ENCODING 48200 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBC49 +ENCODING 48201 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBC4A +ENCODING 48202 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBC4B +ENCODING 48203 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +813C +8124 +8124 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBC4C +ENCODING 48204 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +8108 +8108 +810E +FF08 +8108 +8108 +8108 +810E +8108 +8108 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniBC4D +ENCODING 48205 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBC4E +ENCODING 48206 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBC4F +ENCODING 48207 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBC50 +ENCODING 48208 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +8108 +FF0E +8108 +8108 +8108 +FF0E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC51 +ENCODING 48209 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBC52 +ENCODING 48210 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBC53 +ENCODING 48211 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC54 +ENCODING 48212 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC55 +ENCODING 48213 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBC56 +ENCODING 48214 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBC57 +ENCODING 48215 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBC58 +ENCODING 48216 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBC59 +ENCODING 48217 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBC5A +ENCODING 48218 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBC5B +ENCODING 48219 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBC5C +ENCODING 48220 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBC5D +ENCODING 48221 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBC5E +ENCODING 48222 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBC5F +ENCODING 48223 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBC60 +ENCODING 48224 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBC61 +ENCODING 48225 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBC62 +ENCODING 48226 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBC63 +ENCODING 48227 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBC64 +ENCODING 48228 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBC65 +ENCODING 48229 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC66 +ENCODING 48230 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBC67 +ENCODING 48231 +BBX 15 16 0 -2 +BITMAP +0008 +8108 +810E +FF08 +8108 +810E +8108 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBC68 +ENCODING 48232 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +8124 +813C +8124 +FF24 +8124 +8124 +813C +8124 +8124 +8124 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniBC69 +ENCODING 48233 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBC6A +ENCODING 48234 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBC6B +ENCODING 48235 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBC6C +ENCODING 48236 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +8124 +813C +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBC6D +ENCODING 48237 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBC6E +ENCODING 48238 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBC6F +ENCODING 48239 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBC70 +ENCODING 48240 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBC71 +ENCODING 48241 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBC72 +ENCODING 48242 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBC73 +ENCODING 48243 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBC74 +ENCODING 48244 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBC75 +ENCODING 48245 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBC76 +ENCODING 48246 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBC77 +ENCODING 48247 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBC78 +ENCODING 48248 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBC79 +ENCODING 48249 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBC7A +ENCODING 48250 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBC7B +ENCODING 48251 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBC7C +ENCODING 48252 +BBX 15 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBC7D +ENCODING 48253 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBC7E +ENCODING 48254 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBC7F +ENCODING 48255 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBC80 +ENCODING 48256 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBC81 +ENCODING 48257 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBC82 +ENCODING 48258 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBC83 +ENCODING 48259 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +813C +FF24 +8124 +813C +8124 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBC84 +ENCODING 48260 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +8108 +8108 +8108 +FF08 +8178 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniBC85 +ENCODING 48261 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBC86 +ENCODING 48262 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBC87 +ENCODING 48263 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBC88 +ENCODING 48264 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC89 +ENCODING 48265 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBC8A +ENCODING 48266 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBC8B +ENCODING 48267 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC8C +ENCODING 48268 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC8D +ENCODING 48269 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBC8E +ENCODING 48270 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBC8F +ENCODING 48271 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBC90 +ENCODING 48272 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBC91 +ENCODING 48273 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBC92 +ENCODING 48274 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBC93 +ENCODING 48275 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBC94 +ENCODING 48276 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBC95 +ENCODING 48277 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBC96 +ENCODING 48278 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBC97 +ENCODING 48279 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBC98 +ENCODING 48280 +BBX 14 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBC99 +ENCODING 48281 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBC9A +ENCODING 48282 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBC9B +ENCODING 48283 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBC9C +ENCODING 48284 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBC9D +ENCODING 48285 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBC9E +ENCODING 48286 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBC9F +ENCODING 48287 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8178 +8108 +8108 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBCA0 +ENCODING 48288 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +8124 +8124 +8124 +FFE4 +8124 +8124 +8124 +8124 +8124 +8124 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniBCA1 +ENCODING 48289 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBCA2 +ENCODING 48290 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBCA3 +ENCODING 48291 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBCA4 +ENCODING 48292 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBCA5 +ENCODING 48293 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBCA6 +ENCODING 48294 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBCA7 +ENCODING 48295 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBCA8 +ENCODING 48296 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBCA9 +ENCODING 48297 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBCAA +ENCODING 48298 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBCAB +ENCODING 48299 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBCAC +ENCODING 48300 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBCAD +ENCODING 48301 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBCAE +ENCODING 48302 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBCAF +ENCODING 48303 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBCB0 +ENCODING 48304 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBCB1 +ENCODING 48305 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBCB2 +ENCODING 48306 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBCB3 +ENCODING 48307 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBCB4 +ENCODING 48308 +BBX 15 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBCB5 +ENCODING 48309 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBCB6 +ENCODING 48310 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBCB7 +ENCODING 48311 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBCB8 +ENCODING 48312 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBCB9 +ENCODING 48313 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBCBA +ENCODING 48314 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBCBB +ENCODING 48315 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FF24 +81E4 +8124 +8124 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBCBC +ENCODING 48316 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +8108 +8108 +8178 +FF08 +8108 +8108 +8178 +8108 +8108 +8108 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniBCBD +ENCODING 48317 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBCBE +ENCODING 48318 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBCBF +ENCODING 48319 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBCC0 +ENCODING 48320 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBCC1 +ENCODING 48321 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBCC2 +ENCODING 48322 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBCC3 +ENCODING 48323 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBCC4 +ENCODING 48324 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBCC5 +ENCODING 48325 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBCC6 +ENCODING 48326 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBCC7 +ENCODING 48327 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBCC8 +ENCODING 48328 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBCC9 +ENCODING 48329 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBCCA +ENCODING 48330 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBCCB +ENCODING 48331 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBCCC +ENCODING 48332 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBCCD +ENCODING 48333 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBCCE +ENCODING 48334 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBCCF +ENCODING 48335 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBCD0 +ENCODING 48336 +BBX 14 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBCD1 +ENCODING 48337 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBCD2 +ENCODING 48338 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBCD3 +ENCODING 48339 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBCD4 +ENCODING 48340 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBCD5 +ENCODING 48341 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBCD6 +ENCODING 48342 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBCD7 +ENCODING 48343 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF78 +8108 +8108 +8178 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBCD8 +ENCODING 48344 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +8124 +8124 +81E4 +FF24 +8124 +8124 +81E4 +8124 +8124 +8124 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniBCD9 +ENCODING 48345 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBCDA +ENCODING 48346 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBCDB +ENCODING 48347 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBCDC +ENCODING 48348 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBCDD +ENCODING 48349 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBCDE +ENCODING 48350 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBCDF +ENCODING 48351 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBCE0 +ENCODING 48352 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBCE1 +ENCODING 48353 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBCE2 +ENCODING 48354 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBCE3 +ENCODING 48355 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBCE4 +ENCODING 48356 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBCE5 +ENCODING 48357 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBCE6 +ENCODING 48358 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBCE7 +ENCODING 48359 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBCE8 +ENCODING 48360 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBCE9 +ENCODING 48361 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBCEA +ENCODING 48362 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBCEB +ENCODING 48363 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBCEC +ENCODING 48364 +BBX 15 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBCED +ENCODING 48365 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBCEE +ENCODING 48366 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBCEF +ENCODING 48367 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBCF0 +ENCODING 48368 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBCF1 +ENCODING 48369 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBCF2 +ENCODING 48370 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBCF3 +ENCODING 48371 +BBX 14 16 0 -2 +BITMAP +0024 +8124 +8124 +FFE4 +8124 +81E4 +8124 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBCF4 +ENCODING 48372 +BBX 15 13 0 0 +BITMAP +2008 +2008 +2008 +3FF8 +2008 +2008 +2008 +3FF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniBCF5 +ENCODING 48373 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBCF6 +ENCODING 48374 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBCF7 +ENCODING 48375 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBCF8 +ENCODING 48376 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBCF9 +ENCODING 48377 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBCFA +ENCODING 48378 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBCFB +ENCODING 48379 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBCFC +ENCODING 48380 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBCFD +ENCODING 48381 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBCFE +ENCODING 48382 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBCFF +ENCODING 48383 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBD00 +ENCODING 48384 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBD01 +ENCODING 48385 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBD02 +ENCODING 48386 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBD03 +ENCODING 48387 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBD04 +ENCODING 48388 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBD05 +ENCODING 48389 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBD06 +ENCODING 48390 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBD07 +ENCODING 48391 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD08 +ENCODING 48392 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBD09 +ENCODING 48393 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBD0A +ENCODING 48394 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD0B +ENCODING 48395 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD0C +ENCODING 48396 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBD0D +ENCODING 48397 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBD0E +ENCODING 48398 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBD0F +ENCODING 48399 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBD10 +ENCODING 48400 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +4108 +4108 +7F08 +4108 +4108 +410E +7F08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniBD11 +ENCODING 48401 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBD12 +ENCODING 48402 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBD13 +ENCODING 48403 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBD14 +ENCODING 48404 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBD15 +ENCODING 48405 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBD16 +ENCODING 48406 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBD17 +ENCODING 48407 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBD18 +ENCODING 48408 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBD19 +ENCODING 48409 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBD1A +ENCODING 48410 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBD1B +ENCODING 48411 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBD1C +ENCODING 48412 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBD1D +ENCODING 48413 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBD1E +ENCODING 48414 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBD1F +ENCODING 48415 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBD20 +ENCODING 48416 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBD21 +ENCODING 48417 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBD22 +ENCODING 48418 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBD23 +ENCODING 48419 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD24 +ENCODING 48420 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBD25 +ENCODING 48421 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBD26 +ENCODING 48422 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD27 +ENCODING 48423 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD28 +ENCODING 48424 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBD29 +ENCODING 48425 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBD2A +ENCODING 48426 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBD2B +ENCODING 48427 +BBX 15 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +410E +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBD2C +ENCODING 48428 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +4124 +4124 +7F24 +4124 +4124 +413C +7F24 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniBD2D +ENCODING 48429 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBD2E +ENCODING 48430 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBD2F +ENCODING 48431 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBD30 +ENCODING 48432 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBD31 +ENCODING 48433 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBD32 +ENCODING 48434 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBD33 +ENCODING 48435 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBD34 +ENCODING 48436 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBD35 +ENCODING 48437 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBD36 +ENCODING 48438 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBD37 +ENCODING 48439 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBD38 +ENCODING 48440 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBD39 +ENCODING 48441 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBD3A +ENCODING 48442 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBD3B +ENCODING 48443 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBD3C +ENCODING 48444 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBD3D +ENCODING 48445 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBD3E +ENCODING 48446 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBD3F +ENCODING 48447 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBD40 +ENCODING 48448 +BBX 15 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBD41 +ENCODING 48449 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBD42 +ENCODING 48450 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBD43 +ENCODING 48451 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBD44 +ENCODING 48452 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBD45 +ENCODING 48453 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBD46 +ENCODING 48454 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBD47 +ENCODING 48455 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +7F24 +4124 +413C +7F24 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBD48 +ENCODING 48456 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +4108 +4108 +7F08 +4108 +4108 +4108 +7F08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniBD49 +ENCODING 48457 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBD4A +ENCODING 48458 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBD4B +ENCODING 48459 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBD4C +ENCODING 48460 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBD4D +ENCODING 48461 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBD4E +ENCODING 48462 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBD4F +ENCODING 48463 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBD50 +ENCODING 48464 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBD51 +ENCODING 48465 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBD52 +ENCODING 48466 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBD53 +ENCODING 48467 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBD54 +ENCODING 48468 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBD55 +ENCODING 48469 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBD56 +ENCODING 48470 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBD57 +ENCODING 48471 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBD58 +ENCODING 48472 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBD59 +ENCODING 48473 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBD5A +ENCODING 48474 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBD5B +ENCODING 48475 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD5C +ENCODING 48476 +BBX 14 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBD5D +ENCODING 48477 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBD5E +ENCODING 48478 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD5F +ENCODING 48479 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD60 +ENCODING 48480 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBD61 +ENCODING 48481 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBD62 +ENCODING 48482 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBD63 +ENCODING 48483 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBD64 +ENCODING 48484 +BBX 15 13 0 0 +BITMAP +2008 +2008 +2008 +3FF8 +2008 +2008 +2008 +3FF8 +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniBD65 +ENCODING 48485 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBD66 +ENCODING 48486 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBD67 +ENCODING 48487 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBD68 +ENCODING 48488 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBD69 +ENCODING 48489 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBD6A +ENCODING 48490 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBD6B +ENCODING 48491 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBD6C +ENCODING 48492 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBD6D +ENCODING 48493 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBD6E +ENCODING 48494 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBD6F +ENCODING 48495 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBD70 +ENCODING 48496 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBD71 +ENCODING 48497 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBD72 +ENCODING 48498 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBD73 +ENCODING 48499 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBD74 +ENCODING 48500 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBD75 +ENCODING 48501 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBD76 +ENCODING 48502 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBD77 +ENCODING 48503 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD78 +ENCODING 48504 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBD79 +ENCODING 48505 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBD7A +ENCODING 48506 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD7B +ENCODING 48507 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD7C +ENCODING 48508 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBD7D +ENCODING 48509 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBD7E +ENCODING 48510 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBD7F +ENCODING 48511 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBD80 +ENCODING 48512 +BBX 15 15 0 -2 +BITMAP +2008 +2008 +3FF8 +2008 +2008 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniBD81 +ENCODING 48513 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBD82 +ENCODING 48514 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBD83 +ENCODING 48515 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBD84 +ENCODING 48516 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBD85 +ENCODING 48517 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBD86 +ENCODING 48518 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBD87 +ENCODING 48519 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBD88 +ENCODING 48520 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBD89 +ENCODING 48521 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBD8A +ENCODING 48522 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBD8B +ENCODING 48523 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBD8C +ENCODING 48524 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBD8D +ENCODING 48525 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBD8E +ENCODING 48526 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBD8F +ENCODING 48527 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBD90 +ENCODING 48528 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBD91 +ENCODING 48529 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBD92 +ENCODING 48530 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBD93 +ENCODING 48531 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD94 +ENCODING 48532 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBD95 +ENCODING 48533 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBD96 +ENCODING 48534 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD97 +ENCODING 48535 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBD98 +ENCODING 48536 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBD99 +ENCODING 48537 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBD9A +ENCODING 48538 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBD9B +ENCODING 48539 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBD9C +ENCODING 48540 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +4108 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniBD9D +ENCODING 48541 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBD9E +ENCODING 48542 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBD9F +ENCODING 48543 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBDA0 +ENCODING 48544 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBDA1 +ENCODING 48545 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBDA2 +ENCODING 48546 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBDA3 +ENCODING 48547 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBDA4 +ENCODING 48548 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBDA5 +ENCODING 48549 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBDA6 +ENCODING 48550 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBDA7 +ENCODING 48551 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBDA8 +ENCODING 48552 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBDA9 +ENCODING 48553 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBDAA +ENCODING 48554 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBDAB +ENCODING 48555 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBDAC +ENCODING 48556 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBDAD +ENCODING 48557 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBDAE +ENCODING 48558 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBDAF +ENCODING 48559 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBDB0 +ENCODING 48560 +BBX 14 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBDB1 +ENCODING 48561 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBDB2 +ENCODING 48562 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBDB3 +ENCODING 48563 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBDB4 +ENCODING 48564 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBDB5 +ENCODING 48565 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBDB6 +ENCODING 48566 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBDB7 +ENCODING 48567 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBDB8 +ENCODING 48568 +BBX 14 16 0 -2 +BITMAP +0024 +4124 +4124 +7F24 +4124 +4124 +7F24 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniBDB9 +ENCODING 48569 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBDBA +ENCODING 48570 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBDBB +ENCODING 48571 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBDBC +ENCODING 48572 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBDBD +ENCODING 48573 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBDBE +ENCODING 48574 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBDBF +ENCODING 48575 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBDC0 +ENCODING 48576 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBDC1 +ENCODING 48577 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBDC2 +ENCODING 48578 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBDC3 +ENCODING 48579 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBDC4 +ENCODING 48580 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBDC5 +ENCODING 48581 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBDC6 +ENCODING 48582 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBDC7 +ENCODING 48583 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBDC8 +ENCODING 48584 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBDC9 +ENCODING 48585 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBDCA +ENCODING 48586 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBDCB +ENCODING 48587 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBDCC +ENCODING 48588 +BBX 15 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBDCD +ENCODING 48589 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBDCE +ENCODING 48590 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBDCF +ENCODING 48591 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBDD0 +ENCODING 48592 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBDD1 +ENCODING 48593 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBDD2 +ENCODING 48594 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBDD3 +ENCODING 48595 +BBX 14 16 0 -2 +BITMAP +4124 +7F24 +4124 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBDD4 +ENCODING 48596 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +4108 +7F08 +4108 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniBDD5 +ENCODING 48597 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBDD6 +ENCODING 48598 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBDD7 +ENCODING 48599 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBDD8 +ENCODING 48600 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBDD9 +ENCODING 48601 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBDDA +ENCODING 48602 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBDDB +ENCODING 48603 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBDDC +ENCODING 48604 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBDDD +ENCODING 48605 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBDDE +ENCODING 48606 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBDDF +ENCODING 48607 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBDE0 +ENCODING 48608 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBDE1 +ENCODING 48609 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBDE2 +ENCODING 48610 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBDE3 +ENCODING 48611 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBDE4 +ENCODING 48612 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBDE5 +ENCODING 48613 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBDE6 +ENCODING 48614 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBDE7 +ENCODING 48615 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBDE8 +ENCODING 48616 +BBX 14 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBDE9 +ENCODING 48617 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBDEA +ENCODING 48618 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBDEB +ENCODING 48619 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBDEC +ENCODING 48620 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBDED +ENCODING 48621 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBDEE +ENCODING 48622 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBDEF +ENCODING 48623 +BBX 13 16 0 -2 +BITMAP +4108 +7F08 +4108 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBDF0 +ENCODING 48624 +BBX 15 15 0 -2 +BITMAP +2008 +2008 +3FF8 +2008 +2008 +3FF8 +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniBDF1 +ENCODING 48625 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBDF2 +ENCODING 48626 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBDF3 +ENCODING 48627 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBDF4 +ENCODING 48628 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBDF5 +ENCODING 48629 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBDF6 +ENCODING 48630 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBDF7 +ENCODING 48631 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBDF8 +ENCODING 48632 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBDF9 +ENCODING 48633 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBDFA +ENCODING 48634 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBDFB +ENCODING 48635 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBDFC +ENCODING 48636 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBDFD +ENCODING 48637 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBDFE +ENCODING 48638 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBDFF +ENCODING 48639 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBE00 +ENCODING 48640 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBE01 +ENCODING 48641 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBE02 +ENCODING 48642 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBE03 +ENCODING 48643 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE04 +ENCODING 48644 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBE05 +ENCODING 48645 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBE06 +ENCODING 48646 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE07 +ENCODING 48647 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE08 +ENCODING 48648 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBE09 +ENCODING 48649 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBE0A +ENCODING 48650 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBE0B +ENCODING 48651 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBE0C +ENCODING 48652 +BBX 15 13 0 0 +BITMAP +2008 +2008 +2008 +3FF8 +2008 +2008 +2008 +3FF8 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniBE0D +ENCODING 48653 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBE0E +ENCODING 48654 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBE0F +ENCODING 48655 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBE10 +ENCODING 48656 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBE11 +ENCODING 48657 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBE12 +ENCODING 48658 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBE13 +ENCODING 48659 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBE14 +ENCODING 48660 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBE15 +ENCODING 48661 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBE16 +ENCODING 48662 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBE17 +ENCODING 48663 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBE18 +ENCODING 48664 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBE19 +ENCODING 48665 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBE1A +ENCODING 48666 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBE1B +ENCODING 48667 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBE1C +ENCODING 48668 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBE1D +ENCODING 48669 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBE1E +ENCODING 48670 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBE1F +ENCODING 48671 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE20 +ENCODING 48672 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBE21 +ENCODING 48673 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBE22 +ENCODING 48674 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE23 +ENCODING 48675 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE24 +ENCODING 48676 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBE25 +ENCODING 48677 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBE26 +ENCODING 48678 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBE27 +ENCODING 48679 +BBX 15 15 0 -2 +BITMAP +2008 +3FF8 +2008 +2008 +3FF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBE28 +ENCODING 48680 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +4108 +4108 +7F08 +4108 +4108 +4108 +7F08 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniBE29 +ENCODING 48681 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBE2A +ENCODING 48682 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBE2B +ENCODING 48683 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBE2C +ENCODING 48684 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE2D +ENCODING 48685 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBE2E +ENCODING 48686 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBE2F +ENCODING 48687 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE30 +ENCODING 48688 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE31 +ENCODING 48689 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBE32 +ENCODING 48690 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBE33 +ENCODING 48691 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBE34 +ENCODING 48692 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBE35 +ENCODING 48693 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBE36 +ENCODING 48694 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBE37 +ENCODING 48695 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBE38 +ENCODING 48696 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBE39 +ENCODING 48697 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBE3A +ENCODING 48698 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBE3B +ENCODING 48699 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE3C +ENCODING 48700 +BBX 14 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBE3D +ENCODING 48701 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBE3E +ENCODING 48702 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE3F +ENCODING 48703 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE40 +ENCODING 48704 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBE41 +ENCODING 48705 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE42 +ENCODING 48706 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBE43 +ENCODING 48707 +BBX 13 16 0 -2 +BITMAP +0008 +4108 +7F08 +4108 +4108 +7F08 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBE44 +ENCODING 48708 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +8108 +8108 +8108 +FF08 +8108 +8108 +8108 +8108 +8108 +8108 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniBE45 +ENCODING 48709 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBE46 +ENCODING 48710 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBE47 +ENCODING 48711 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBE48 +ENCODING 48712 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE49 +ENCODING 48713 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBE4A +ENCODING 48714 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBE4B +ENCODING 48715 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE4C +ENCODING 48716 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE4D +ENCODING 48717 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBE4E +ENCODING 48718 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBE4F +ENCODING 48719 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBE50 +ENCODING 48720 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBE51 +ENCODING 48721 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBE52 +ENCODING 48722 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBE53 +ENCODING 48723 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBE54 +ENCODING 48724 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBE55 +ENCODING 48725 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBE56 +ENCODING 48726 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBE57 +ENCODING 48727 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE58 +ENCODING 48728 +BBX 14 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBE59 +ENCODING 48729 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBE5A +ENCODING 48730 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE5B +ENCODING 48731 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE5C +ENCODING 48732 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBE5D +ENCODING 48733 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE5E +ENCODING 48734 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBE5F +ENCODING 48735 +BBX 13 16 0 -2 +BITMAP +0008 +8108 +8108 +FF08 +8108 +8108 +8108 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBE60 +ENCODING 48736 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +9488 +9488 +9488 +F788 +948E +9488 +9488 +9488 +9488 +9488 +F788 +0008 +0008 +ENDCHAR +STARTCHAR uniBE61 +ENCODING 48737 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBE62 +ENCODING 48738 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBE63 +ENCODING 48739 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBE64 +ENCODING 48740 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +948E +9488 +F788 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE65 +ENCODING 48741 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBE66 +ENCODING 48742 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBE67 +ENCODING 48743 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE68 +ENCODING 48744 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE69 +ENCODING 48745 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBE6A +ENCODING 48746 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBE6B +ENCODING 48747 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBE6C +ENCODING 48748 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBE6D +ENCODING 48749 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBE6E +ENCODING 48750 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBE6F +ENCODING 48751 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBE70 +ENCODING 48752 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBE71 +ENCODING 48753 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBE72 +ENCODING 48754 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBE73 +ENCODING 48755 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE74 +ENCODING 48756 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBE75 +ENCODING 48757 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBE76 +ENCODING 48758 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE77 +ENCODING 48759 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBE78 +ENCODING 48760 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBE79 +ENCODING 48761 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE7A +ENCODING 48762 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBE7B +ENCODING 48763 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +948E +9488 +9488 +F788 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBE7C +ENCODING 48764 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +94A4 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +94A4 +94A4 +94A4 +F7A4 +0024 +0024 +ENDCHAR +STARTCHAR uniBE7D +ENCODING 48765 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBE7E +ENCODING 48766 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBE7F +ENCODING 48767 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBE80 +ENCODING 48768 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBE81 +ENCODING 48769 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBE82 +ENCODING 48770 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBE83 +ENCODING 48771 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBE84 +ENCODING 48772 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBE85 +ENCODING 48773 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBE86 +ENCODING 48774 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBE87 +ENCODING 48775 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBE88 +ENCODING 48776 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBE89 +ENCODING 48777 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBE8A +ENCODING 48778 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBE8B +ENCODING 48779 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBE8C +ENCODING 48780 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBE8D +ENCODING 48781 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBE8E +ENCODING 48782 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBE8F +ENCODING 48783 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBE90 +ENCODING 48784 +BBX 15 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBE91 +ENCODING 48785 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBE92 +ENCODING 48786 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBE93 +ENCODING 48787 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBE94 +ENCODING 48788 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBE95 +ENCODING 48789 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBE96 +ENCODING 48790 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBE97 +ENCODING 48791 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94BC +94A4 +94A4 +F7A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBE98 +ENCODING 48792 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +9488 +9488 +948E +F788 +9488 +9488 +9488 +948E +9488 +9488 +F788 +0008 +0008 +ENDCHAR +STARTCHAR uniBE99 +ENCODING 48793 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBE9A +ENCODING 48794 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBE9B +ENCODING 48795 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBE9C +ENCODING 48796 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +9488 +F78E +9488 +9488 +9488 +F78E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBE9D +ENCODING 48797 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBE9E +ENCODING 48798 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBE9F +ENCODING 48799 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBEA0 +ENCODING 48800 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBEA1 +ENCODING 48801 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBEA2 +ENCODING 48802 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBEA3 +ENCODING 48803 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBEA4 +ENCODING 48804 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBEA5 +ENCODING 48805 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBEA6 +ENCODING 48806 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBEA7 +ENCODING 48807 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBEA8 +ENCODING 48808 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBEA9 +ENCODING 48809 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBEAA +ENCODING 48810 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBEAB +ENCODING 48811 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBEAC +ENCODING 48812 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBEAD +ENCODING 48813 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBEAE +ENCODING 48814 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBEAF +ENCODING 48815 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBEB0 +ENCODING 48816 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBEB1 +ENCODING 48817 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBEB2 +ENCODING 48818 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBEB3 +ENCODING 48819 +BBX 15 16 0 -2 +BITMAP +0008 +9488 +948E +F788 +9488 +948E +9488 +F788 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBEB4 +ENCODING 48820 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +94A4 +94BC +94A4 +F7A4 +94A4 +94A4 +94BC +94A4 +94A4 +94A4 +F7A4 +0024 +0024 +ENDCHAR +STARTCHAR uniBEB5 +ENCODING 48821 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBEB6 +ENCODING 48822 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBEB7 +ENCODING 48823 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBEB8 +ENCODING 48824 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94A4 +94BC +F7A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBEB9 +ENCODING 48825 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBEBA +ENCODING 48826 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBEBB +ENCODING 48827 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBEBC +ENCODING 48828 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBEBD +ENCODING 48829 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBEBE +ENCODING 48830 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBEBF +ENCODING 48831 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBEC0 +ENCODING 48832 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBEC1 +ENCODING 48833 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBEC2 +ENCODING 48834 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBEC3 +ENCODING 48835 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBEC4 +ENCODING 48836 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBEC5 +ENCODING 48837 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBEC6 +ENCODING 48838 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBEC7 +ENCODING 48839 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBEC8 +ENCODING 48840 +BBX 15 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBEC9 +ENCODING 48841 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBECA +ENCODING 48842 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBECB +ENCODING 48843 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBECC +ENCODING 48844 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBECD +ENCODING 48845 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBECE +ENCODING 48846 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBECF +ENCODING 48847 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94BC +F7A4 +94A4 +94BC +94A4 +F7A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBED0 +ENCODING 48848 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +9488 +9488 +9488 +F788 +94F8 +9488 +9488 +9488 +9488 +9488 +F788 +0008 +0008 +ENDCHAR +STARTCHAR uniBED1 +ENCODING 48849 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBED2 +ENCODING 48850 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBED3 +ENCODING 48851 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBED4 +ENCODING 48852 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBED5 +ENCODING 48853 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBED6 +ENCODING 48854 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBED7 +ENCODING 48855 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBED8 +ENCODING 48856 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBED9 +ENCODING 48857 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBEDA +ENCODING 48858 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBEDB +ENCODING 48859 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBEDC +ENCODING 48860 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBEDD +ENCODING 48861 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBEDE +ENCODING 48862 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBEDF +ENCODING 48863 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBEE0 +ENCODING 48864 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBEE1 +ENCODING 48865 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBEE2 +ENCODING 48866 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBEE3 +ENCODING 48867 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBEE4 +ENCODING 48868 +BBX 14 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBEE5 +ENCODING 48869 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBEE6 +ENCODING 48870 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBEE7 +ENCODING 48871 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBEE8 +ENCODING 48872 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBEE9 +ENCODING 48873 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBEEA +ENCODING 48874 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBEEB +ENCODING 48875 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +94F8 +9488 +9488 +F788 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBEEC +ENCODING 48876 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +94A4 +94A4 +94A4 +F7E4 +94A4 +94A4 +94A4 +94A4 +94A4 +94A4 +F7A4 +0024 +0024 +ENDCHAR +STARTCHAR uniBEED +ENCODING 48877 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBEEE +ENCODING 48878 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBEEF +ENCODING 48879 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBEF0 +ENCODING 48880 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBEF1 +ENCODING 48881 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBEF2 +ENCODING 48882 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBEF3 +ENCODING 48883 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBEF4 +ENCODING 48884 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBEF5 +ENCODING 48885 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBEF6 +ENCODING 48886 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBEF7 +ENCODING 48887 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBEF8 +ENCODING 48888 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBEF9 +ENCODING 48889 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBEFA +ENCODING 48890 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBEFB +ENCODING 48891 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBEFC +ENCODING 48892 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBEFD +ENCODING 48893 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBEFE +ENCODING 48894 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBEFF +ENCODING 48895 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBF00 +ENCODING 48896 +BBX 15 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBF01 +ENCODING 48897 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBF02 +ENCODING 48898 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBF03 +ENCODING 48899 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBF04 +ENCODING 48900 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBF05 +ENCODING 48901 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBF06 +ENCODING 48902 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBF07 +ENCODING 48903 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7A4 +94E4 +94A4 +94A4 +F7A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBF08 +ENCODING 48904 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +9488 +9488 +94F8 +F788 +9488 +9488 +94F8 +9488 +9488 +9488 +F788 +0008 +0008 +ENDCHAR +STARTCHAR uniBF09 +ENCODING 48905 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBF0A +ENCODING 48906 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBF0B +ENCODING 48907 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBF0C +ENCODING 48908 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBF0D +ENCODING 48909 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBF0E +ENCODING 48910 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBF0F +ENCODING 48911 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBF10 +ENCODING 48912 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBF11 +ENCODING 48913 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBF12 +ENCODING 48914 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBF13 +ENCODING 48915 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBF14 +ENCODING 48916 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBF15 +ENCODING 48917 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBF16 +ENCODING 48918 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBF17 +ENCODING 48919 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBF18 +ENCODING 48920 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBF19 +ENCODING 48921 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBF1A +ENCODING 48922 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBF1B +ENCODING 48923 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBF1C +ENCODING 48924 +BBX 14 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBF1D +ENCODING 48925 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBF1E +ENCODING 48926 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBF1F +ENCODING 48927 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBF20 +ENCODING 48928 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBF21 +ENCODING 48929 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBF22 +ENCODING 48930 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBF23 +ENCODING 48931 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F7F8 +9488 +9488 +94F8 +F788 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBF24 +ENCODING 48932 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +94A4 +94A4 +95E4 +F7A4 +94A4 +94A4 +95E4 +94A4 +94A4 +94A4 +F7A4 +0024 +0024 +ENDCHAR +STARTCHAR uniBF25 +ENCODING 48933 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBF26 +ENCODING 48934 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBF27 +ENCODING 48935 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBF28 +ENCODING 48936 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBF29 +ENCODING 48937 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBF2A +ENCODING 48938 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBF2B +ENCODING 48939 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBF2C +ENCODING 48940 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBF2D +ENCODING 48941 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBF2E +ENCODING 48942 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBF2F +ENCODING 48943 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBF30 +ENCODING 48944 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBF31 +ENCODING 48945 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBF32 +ENCODING 48946 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBF33 +ENCODING 48947 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBF34 +ENCODING 48948 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBF35 +ENCODING 48949 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBF36 +ENCODING 48950 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBF37 +ENCODING 48951 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBF38 +ENCODING 48952 +BBX 15 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBF39 +ENCODING 48953 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBF3A +ENCODING 48954 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBF3B +ENCODING 48955 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBF3C +ENCODING 48956 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBF3D +ENCODING 48957 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBF3E +ENCODING 48958 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBF3F +ENCODING 48959 +BBX 14 16 0 -2 +BITMAP +0024 +94A4 +94A4 +F7E4 +94A4 +94E4 +94A4 +F7A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBF40 +ENCODING 48960 +BBX 15 13 0 0 +BITMAP +2288 +2288 +2288 +3EF8 +2288 +2288 +2288 +3EF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniBF41 +ENCODING 48961 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBF42 +ENCODING 48962 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBF43 +ENCODING 48963 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBF44 +ENCODING 48964 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBF45 +ENCODING 48965 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBF46 +ENCODING 48966 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBF47 +ENCODING 48967 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBF48 +ENCODING 48968 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBF49 +ENCODING 48969 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBF4A +ENCODING 48970 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBF4B +ENCODING 48971 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBF4C +ENCODING 48972 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBF4D +ENCODING 48973 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBF4E +ENCODING 48974 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBF4F +ENCODING 48975 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBF50 +ENCODING 48976 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBF51 +ENCODING 48977 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBF52 +ENCODING 48978 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBF53 +ENCODING 48979 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBF54 +ENCODING 48980 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBF55 +ENCODING 48981 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBF56 +ENCODING 48982 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBF57 +ENCODING 48983 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBF58 +ENCODING 48984 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBF59 +ENCODING 48985 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBF5A +ENCODING 48986 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBF5B +ENCODING 48987 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBF5C +ENCODING 48988 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +4908 +4908 +7F08 +4908 +4908 +490E +7F08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniBF5D +ENCODING 48989 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBF5E +ENCODING 48990 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBF5F +ENCODING 48991 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBF60 +ENCODING 48992 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBF61 +ENCODING 48993 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBF62 +ENCODING 48994 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBF63 +ENCODING 48995 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBF64 +ENCODING 48996 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBF65 +ENCODING 48997 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBF66 +ENCODING 48998 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBF67 +ENCODING 48999 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBF68 +ENCODING 49000 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBF69 +ENCODING 49001 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBF6A +ENCODING 49002 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBF6B +ENCODING 49003 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBF6C +ENCODING 49004 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBF6D +ENCODING 49005 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBF6E +ENCODING 49006 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBF6F +ENCODING 49007 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBF70 +ENCODING 49008 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBF71 +ENCODING 49009 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBF72 +ENCODING 49010 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBF73 +ENCODING 49011 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBF74 +ENCODING 49012 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBF75 +ENCODING 49013 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBF76 +ENCODING 49014 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBF77 +ENCODING 49015 +BBX 15 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +490E +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBF78 +ENCODING 49016 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +4924 +4924 +7F24 +4924 +4924 +493C +7F24 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniBF79 +ENCODING 49017 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniBF7A +ENCODING 49018 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniBF7B +ENCODING 49019 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniBF7C +ENCODING 49020 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBF7D +ENCODING 49021 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBF7E +ENCODING 49022 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBF7F +ENCODING 49023 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBF80 +ENCODING 49024 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBF81 +ENCODING 49025 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniBF82 +ENCODING 49026 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBF83 +ENCODING 49027 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniBF84 +ENCODING 49028 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniBF85 +ENCODING 49029 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniBF86 +ENCODING 49030 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniBF87 +ENCODING 49031 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniBF88 +ENCODING 49032 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBF89 +ENCODING 49033 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniBF8A +ENCODING 49034 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniBF8B +ENCODING 49035 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBF8C +ENCODING 49036 +BBX 15 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniBF8D +ENCODING 49037 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniBF8E +ENCODING 49038 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBF8F +ENCODING 49039 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniBF90 +ENCODING 49040 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniBF91 +ENCODING 49041 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniBF92 +ENCODING 49042 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniBF93 +ENCODING 49043 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +7F24 +4924 +493C +7F24 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniBF94 +ENCODING 49044 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +4908 +4908 +7F08 +4908 +4908 +4908 +7F08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniBF95 +ENCODING 49045 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBF96 +ENCODING 49046 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBF97 +ENCODING 49047 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBF98 +ENCODING 49048 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBF99 +ENCODING 49049 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBF9A +ENCODING 49050 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBF9B +ENCODING 49051 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBF9C +ENCODING 49052 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBF9D +ENCODING 49053 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBF9E +ENCODING 49054 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBF9F +ENCODING 49055 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBFA0 +ENCODING 49056 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBFA1 +ENCODING 49057 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBFA2 +ENCODING 49058 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBFA3 +ENCODING 49059 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBFA4 +ENCODING 49060 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBFA5 +ENCODING 49061 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBFA6 +ENCODING 49062 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBFA7 +ENCODING 49063 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBFA8 +ENCODING 49064 +BBX 14 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBFA9 +ENCODING 49065 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBFAA +ENCODING 49066 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBFAB +ENCODING 49067 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBFAC +ENCODING 49068 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBFAD +ENCODING 49069 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBFAE +ENCODING 49070 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBFAF +ENCODING 49071 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBFB0 +ENCODING 49072 +BBX 15 13 0 0 +BITMAP +2288 +2288 +2288 +3EF8 +2288 +2288 +2288 +3EF8 +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniBFB1 +ENCODING 49073 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBFB2 +ENCODING 49074 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBFB3 +ENCODING 49075 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBFB4 +ENCODING 49076 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBFB5 +ENCODING 49077 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBFB6 +ENCODING 49078 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBFB7 +ENCODING 49079 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBFB8 +ENCODING 49080 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBFB9 +ENCODING 49081 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBFBA +ENCODING 49082 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBFBB +ENCODING 49083 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBFBC +ENCODING 49084 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBFBD +ENCODING 49085 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBFBE +ENCODING 49086 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBFBF +ENCODING 49087 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBFC0 +ENCODING 49088 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBFC1 +ENCODING 49089 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBFC2 +ENCODING 49090 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBFC3 +ENCODING 49091 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBFC4 +ENCODING 49092 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBFC5 +ENCODING 49093 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBFC6 +ENCODING 49094 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBFC7 +ENCODING 49095 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBFC8 +ENCODING 49096 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBFC9 +ENCODING 49097 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBFCA +ENCODING 49098 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBFCB +ENCODING 49099 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBFCC +ENCODING 49100 +BBX 15 15 0 -2 +BITMAP +2288 +2288 +3EF8 +2288 +2288 +3EF8 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniBFCD +ENCODING 49101 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBFCE +ENCODING 49102 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBFCF +ENCODING 49103 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBFD0 +ENCODING 49104 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBFD1 +ENCODING 49105 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBFD2 +ENCODING 49106 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBFD3 +ENCODING 49107 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBFD4 +ENCODING 49108 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBFD5 +ENCODING 49109 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBFD6 +ENCODING 49110 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBFD7 +ENCODING 49111 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBFD8 +ENCODING 49112 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBFD9 +ENCODING 49113 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBFDA +ENCODING 49114 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBFDB +ENCODING 49115 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBFDC +ENCODING 49116 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBFDD +ENCODING 49117 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniBFDE +ENCODING 49118 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBFDF +ENCODING 49119 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBFE0 +ENCODING 49120 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBFE1 +ENCODING 49121 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBFE2 +ENCODING 49122 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBFE3 +ENCODING 49123 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBFE4 +ENCODING 49124 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniBFE5 +ENCODING 49125 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniBFE6 +ENCODING 49126 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniBFE7 +ENCODING 49127 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniBFE8 +ENCODING 49128 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +4908 +7F08 +4908 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniBFE9 +ENCODING 49129 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniBFEA +ENCODING 49130 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniBFEB +ENCODING 49131 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniBFEC +ENCODING 49132 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBFED +ENCODING 49133 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBFEE +ENCODING 49134 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBFEF +ENCODING 49135 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBFF0 +ENCODING 49136 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniBFF1 +ENCODING 49137 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniBFF2 +ENCODING 49138 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBFF3 +ENCODING 49139 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniBFF4 +ENCODING 49140 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniBFF5 +ENCODING 49141 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniBFF6 +ENCODING 49142 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniBFF7 +ENCODING 49143 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniBFF8 +ENCODING 49144 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBFF9 +ENCODING 49145 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniBFFA +ENCODING 49146 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniBFFB +ENCODING 49147 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBFFC +ENCODING 49148 +BBX 14 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniBFFD +ENCODING 49149 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniBFFE +ENCODING 49150 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniBFFF +ENCODING 49151 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC000 +ENCODING 49152 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC001 +ENCODING 49153 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC002 +ENCODING 49154 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC003 +ENCODING 49155 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC004 +ENCODING 49156 +BBX 14 16 0 -2 +BITMAP +0024 +4924 +4924 +7F24 +4924 +4924 +7F24 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniC005 +ENCODING 49157 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC006 +ENCODING 49158 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC007 +ENCODING 49159 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC008 +ENCODING 49160 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC009 +ENCODING 49161 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC00A +ENCODING 49162 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC00B +ENCODING 49163 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC00C +ENCODING 49164 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC00D +ENCODING 49165 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC00E +ENCODING 49166 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC00F +ENCODING 49167 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC010 +ENCODING 49168 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC011 +ENCODING 49169 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC012 +ENCODING 49170 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC013 +ENCODING 49171 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC014 +ENCODING 49172 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC015 +ENCODING 49173 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC016 +ENCODING 49174 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC017 +ENCODING 49175 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC018 +ENCODING 49176 +BBX 15 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC019 +ENCODING 49177 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC01A +ENCODING 49178 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC01B +ENCODING 49179 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC01C +ENCODING 49180 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC01D +ENCODING 49181 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC01E +ENCODING 49182 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC01F +ENCODING 49183 +BBX 14 16 0 -2 +BITMAP +4924 +7F24 +4924 +7F24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC020 +ENCODING 49184 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +4908 +7F08 +4908 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniC021 +ENCODING 49185 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC022 +ENCODING 49186 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC023 +ENCODING 49187 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC024 +ENCODING 49188 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC025 +ENCODING 49189 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC026 +ENCODING 49190 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC027 +ENCODING 49191 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC028 +ENCODING 49192 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC029 +ENCODING 49193 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC02A +ENCODING 49194 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC02B +ENCODING 49195 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC02C +ENCODING 49196 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC02D +ENCODING 49197 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC02E +ENCODING 49198 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC02F +ENCODING 49199 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC030 +ENCODING 49200 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC031 +ENCODING 49201 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC032 +ENCODING 49202 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC033 +ENCODING 49203 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC034 +ENCODING 49204 +BBX 14 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC035 +ENCODING 49205 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC036 +ENCODING 49206 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC037 +ENCODING 49207 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC038 +ENCODING 49208 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC039 +ENCODING 49209 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC03A +ENCODING 49210 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC03B +ENCODING 49211 +BBX 13 16 0 -2 +BITMAP +4908 +7F08 +4908 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC03C +ENCODING 49212 +BBX 15 15 0 -2 +BITMAP +2288 +2288 +3EF8 +2288 +2288 +3EF8 +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniC03D +ENCODING 49213 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC03E +ENCODING 49214 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC03F +ENCODING 49215 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC040 +ENCODING 49216 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC041 +ENCODING 49217 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC042 +ENCODING 49218 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC043 +ENCODING 49219 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC044 +ENCODING 49220 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC045 +ENCODING 49221 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC046 +ENCODING 49222 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC047 +ENCODING 49223 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC048 +ENCODING 49224 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC049 +ENCODING 49225 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC04A +ENCODING 49226 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC04B +ENCODING 49227 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC04C +ENCODING 49228 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC04D +ENCODING 49229 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC04E +ENCODING 49230 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC04F +ENCODING 49231 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC050 +ENCODING 49232 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC051 +ENCODING 49233 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC052 +ENCODING 49234 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC053 +ENCODING 49235 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC054 +ENCODING 49236 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC055 +ENCODING 49237 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC056 +ENCODING 49238 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC057 +ENCODING 49239 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC058 +ENCODING 49240 +BBX 15 13 0 0 +BITMAP +2288 +2288 +2288 +3EF8 +2288 +2288 +2288 +3EF8 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniC059 +ENCODING 49241 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC05A +ENCODING 49242 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC05B +ENCODING 49243 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC05C +ENCODING 49244 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC05D +ENCODING 49245 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC05E +ENCODING 49246 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC05F +ENCODING 49247 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC060 +ENCODING 49248 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC061 +ENCODING 49249 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC062 +ENCODING 49250 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC063 +ENCODING 49251 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC064 +ENCODING 49252 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC065 +ENCODING 49253 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC066 +ENCODING 49254 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC067 +ENCODING 49255 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC068 +ENCODING 49256 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC069 +ENCODING 49257 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC06A +ENCODING 49258 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC06B +ENCODING 49259 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC06C +ENCODING 49260 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC06D +ENCODING 49261 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC06E +ENCODING 49262 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC06F +ENCODING 49263 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC070 +ENCODING 49264 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC071 +ENCODING 49265 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC072 +ENCODING 49266 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC073 +ENCODING 49267 +BBX 15 15 0 -2 +BITMAP +2288 +3EF8 +2288 +2288 +3EF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC074 +ENCODING 49268 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +4908 +4908 +7F08 +4908 +4908 +4908 +7F08 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC075 +ENCODING 49269 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC076 +ENCODING 49270 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC077 +ENCODING 49271 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC078 +ENCODING 49272 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC079 +ENCODING 49273 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC07A +ENCODING 49274 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC07B +ENCODING 49275 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC07C +ENCODING 49276 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC07D +ENCODING 49277 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC07E +ENCODING 49278 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC07F +ENCODING 49279 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC080 +ENCODING 49280 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC081 +ENCODING 49281 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC082 +ENCODING 49282 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC083 +ENCODING 49283 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC084 +ENCODING 49284 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC085 +ENCODING 49285 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC086 +ENCODING 49286 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC087 +ENCODING 49287 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC088 +ENCODING 49288 +BBX 14 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC089 +ENCODING 49289 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC08A +ENCODING 49290 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC08B +ENCODING 49291 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC08C +ENCODING 49292 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC08D +ENCODING 49293 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC08E +ENCODING 49294 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC08F +ENCODING 49295 +BBX 13 16 0 -2 +BITMAP +0008 +4908 +7F08 +4908 +4908 +7F08 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC090 +ENCODING 49296 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +9488 +9488 +9488 +F788 +9488 +9488 +9488 +9488 +9488 +9488 +F788 +0008 +0008 +ENDCHAR +STARTCHAR uniC091 +ENCODING 49297 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC092 +ENCODING 49298 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC093 +ENCODING 49299 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC094 +ENCODING 49300 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC095 +ENCODING 49301 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC096 +ENCODING 49302 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC097 +ENCODING 49303 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC098 +ENCODING 49304 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC099 +ENCODING 49305 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC09A +ENCODING 49306 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC09B +ENCODING 49307 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC09C +ENCODING 49308 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC09D +ENCODING 49309 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC09E +ENCODING 49310 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC09F +ENCODING 49311 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC0A0 +ENCODING 49312 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC0A1 +ENCODING 49313 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC0A2 +ENCODING 49314 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC0A3 +ENCODING 49315 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC0A4 +ENCODING 49316 +BBX 14 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC0A5 +ENCODING 49317 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC0A6 +ENCODING 49318 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC0A7 +ENCODING 49319 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC0A8 +ENCODING 49320 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC0A9 +ENCODING 49321 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC0AA +ENCODING 49322 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC0AB +ENCODING 49323 +BBX 13 16 0 -2 +BITMAP +0008 +9488 +9488 +F788 +9488 +9488 +9488 +F788 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC0AC +ENCODING 49324 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +0808 +0808 +0808 +140E +1408 +1408 +2208 +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniC0AD +ENCODING 49325 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC0AE +ENCODING 49326 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC0AF +ENCODING 49327 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC0B0 +ENCODING 49328 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +220E +4108 +8088 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC0B1 +ENCODING 49329 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC0B2 +ENCODING 49330 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC0B3 +ENCODING 49331 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC0B4 +ENCODING 49332 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC0B5 +ENCODING 49333 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC0B6 +ENCODING 49334 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC0B7 +ENCODING 49335 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC0B8 +ENCODING 49336 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC0B9 +ENCODING 49337 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC0BA +ENCODING 49338 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC0BB +ENCODING 49339 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC0BC +ENCODING 49340 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC0BD +ENCODING 49341 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC0BE +ENCODING 49342 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC0BF +ENCODING 49343 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC0C0 +ENCODING 49344 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC0C1 +ENCODING 49345 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC0C2 +ENCODING 49346 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC0C3 +ENCODING 49347 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC0C4 +ENCODING 49348 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC0C5 +ENCODING 49349 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC0C6 +ENCODING 49350 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC0C7 +ENCODING 49351 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC0C8 +ENCODING 49352 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +0824 +0824 +0824 +143C +1424 +1424 +2224 +2224 +4124 +80A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC0C9 +ENCODING 49353 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC0CA +ENCODING 49354 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC0CB +ENCODING 49355 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC0CC +ENCODING 49356 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC0CD +ENCODING 49357 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC0CE +ENCODING 49358 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC0CF +ENCODING 49359 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC0D0 +ENCODING 49360 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC0D1 +ENCODING 49361 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC0D2 +ENCODING 49362 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC0D3 +ENCODING 49363 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC0D4 +ENCODING 49364 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC0D5 +ENCODING 49365 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC0D6 +ENCODING 49366 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC0D7 +ENCODING 49367 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC0D8 +ENCODING 49368 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC0D9 +ENCODING 49369 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC0DA +ENCODING 49370 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC0DB +ENCODING 49371 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC0DC +ENCODING 49372 +BBX 15 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC0DD +ENCODING 49373 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC0DE +ENCODING 49374 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC0DF +ENCODING 49375 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC0E0 +ENCODING 49376 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC0E1 +ENCODING 49377 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC0E2 +ENCODING 49378 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC0E3 +ENCODING 49379 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC0E4 +ENCODING 49380 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +0808 +080E +0808 +1408 +1408 +1408 +220E +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniC0E5 +ENCODING 49381 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC0E6 +ENCODING 49382 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC0E7 +ENCODING 49383 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC0E8 +ENCODING 49384 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +080E +1408 +2208 +4108 +808E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC0E9 +ENCODING 49385 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC0EA +ENCODING 49386 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC0EB +ENCODING 49387 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC0EC +ENCODING 49388 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC0ED +ENCODING 49389 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC0EE +ENCODING 49390 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC0EF +ENCODING 49391 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC0F0 +ENCODING 49392 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC0F1 +ENCODING 49393 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC0F2 +ENCODING 49394 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC0F3 +ENCODING 49395 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC0F4 +ENCODING 49396 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC0F5 +ENCODING 49397 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC0F6 +ENCODING 49398 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC0F7 +ENCODING 49399 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC0F8 +ENCODING 49400 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC0F9 +ENCODING 49401 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC0FA +ENCODING 49402 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC0FB +ENCODING 49403 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC0FC +ENCODING 49404 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC0FD +ENCODING 49405 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC0FE +ENCODING 49406 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC0FF +ENCODING 49407 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC100 +ENCODING 49408 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +083C +0824 +0824 +1424 +1424 +143C +2224 +2224 +4124 +80A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC101 +ENCODING 49409 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC102 +ENCODING 49410 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC103 +ENCODING 49411 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC104 +ENCODING 49412 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +2224 +413C +80A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC105 +ENCODING 49413 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC106 +ENCODING 49414 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC107 +ENCODING 49415 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC108 +ENCODING 49416 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC109 +ENCODING 49417 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC10A +ENCODING 49418 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC10B +ENCODING 49419 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC10C +ENCODING 49420 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC10D +ENCODING 49421 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC10E +ENCODING 49422 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC10F +ENCODING 49423 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC110 +ENCODING 49424 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC111 +ENCODING 49425 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC112 +ENCODING 49426 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC113 +ENCODING 49427 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC114 +ENCODING 49428 +BBX 15 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC115 +ENCODING 49429 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC116 +ENCODING 49430 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC117 +ENCODING 49431 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC118 +ENCODING 49432 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC119 +ENCODING 49433 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC11A +ENCODING 49434 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC11B +ENCODING 49435 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC11C +ENCODING 49436 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +0808 +0808 +0808 +1478 +1408 +1408 +2208 +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniC11D +ENCODING 49437 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC11E +ENCODING 49438 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC11F +ENCODING 49439 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC120 +ENCODING 49440 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC121 +ENCODING 49441 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC122 +ENCODING 49442 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC123 +ENCODING 49443 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC124 +ENCODING 49444 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC125 +ENCODING 49445 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC126 +ENCODING 49446 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC127 +ENCODING 49447 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC128 +ENCODING 49448 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC129 +ENCODING 49449 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC12A +ENCODING 49450 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC12B +ENCODING 49451 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC12C +ENCODING 49452 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC12D +ENCODING 49453 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC12E +ENCODING 49454 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC12F +ENCODING 49455 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC130 +ENCODING 49456 +BBX 14 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC131 +ENCODING 49457 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC132 +ENCODING 49458 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC133 +ENCODING 49459 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC134 +ENCODING 49460 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC135 +ENCODING 49461 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC136 +ENCODING 49462 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC137 +ENCODING 49463 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC138 +ENCODING 49464 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +0824 +0824 +09E4 +1424 +1424 +1424 +2224 +2224 +4124 +80A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC139 +ENCODING 49465 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC13A +ENCODING 49466 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC13B +ENCODING 49467 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC13C +ENCODING 49468 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC13D +ENCODING 49469 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC13E +ENCODING 49470 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC13F +ENCODING 49471 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC140 +ENCODING 49472 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC141 +ENCODING 49473 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC142 +ENCODING 49474 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC143 +ENCODING 49475 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC144 +ENCODING 49476 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC145 +ENCODING 49477 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC146 +ENCODING 49478 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC147 +ENCODING 49479 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC148 +ENCODING 49480 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC149 +ENCODING 49481 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC14A +ENCODING 49482 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC14B +ENCODING 49483 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC14C +ENCODING 49484 +BBX 15 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC14D +ENCODING 49485 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC14E +ENCODING 49486 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC14F +ENCODING 49487 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC150 +ENCODING 49488 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC151 +ENCODING 49489 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC152 +ENCODING 49490 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC153 +ENCODING 49491 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC154 +ENCODING 49492 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +0808 +0878 +0808 +1408 +1408 +1478 +2208 +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniC155 +ENCODING 49493 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC156 +ENCODING 49494 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC157 +ENCODING 49495 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC158 +ENCODING 49496 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC159 +ENCODING 49497 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC15A +ENCODING 49498 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC15B +ENCODING 49499 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC15C +ENCODING 49500 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC15D +ENCODING 49501 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC15E +ENCODING 49502 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC15F +ENCODING 49503 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC160 +ENCODING 49504 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC161 +ENCODING 49505 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC162 +ENCODING 49506 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC163 +ENCODING 49507 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC164 +ENCODING 49508 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC165 +ENCODING 49509 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC166 +ENCODING 49510 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC167 +ENCODING 49511 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC168 +ENCODING 49512 +BBX 14 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC169 +ENCODING 49513 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC16A +ENCODING 49514 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC16B +ENCODING 49515 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC16C +ENCODING 49516 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC16D +ENCODING 49517 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC16E +ENCODING 49518 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC16F +ENCODING 49519 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC170 +ENCODING 49520 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +0824 +09E4 +0824 +1424 +1424 +15E4 +2224 +2224 +4124 +80A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC171 +ENCODING 49521 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC172 +ENCODING 49522 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC173 +ENCODING 49523 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC174 +ENCODING 49524 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC175 +ENCODING 49525 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC176 +ENCODING 49526 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC177 +ENCODING 49527 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC178 +ENCODING 49528 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC179 +ENCODING 49529 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC17A +ENCODING 49530 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC17B +ENCODING 49531 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC17C +ENCODING 49532 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC17D +ENCODING 49533 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC17E +ENCODING 49534 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC17F +ENCODING 49535 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC180 +ENCODING 49536 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC181 +ENCODING 49537 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC182 +ENCODING 49538 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC183 +ENCODING 49539 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC184 +ENCODING 49540 +BBX 15 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC185 +ENCODING 49541 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC186 +ENCODING 49542 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC187 +ENCODING 49543 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC188 +ENCODING 49544 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC189 +ENCODING 49545 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC18A +ENCODING 49546 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC18B +ENCODING 49547 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC18C +ENCODING 49548 +BBX 15 13 0 0 +BITMAP +0100 +0100 +0100 +0280 +0440 +0820 +1010 +600C +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniC18D +ENCODING 49549 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC18E +ENCODING 49550 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC18F +ENCODING 49551 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC190 +ENCODING 49552 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC191 +ENCODING 49553 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC192 +ENCODING 49554 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC193 +ENCODING 49555 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC194 +ENCODING 49556 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC195 +ENCODING 49557 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC196 +ENCODING 49558 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC197 +ENCODING 49559 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC198 +ENCODING 49560 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC199 +ENCODING 49561 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC19A +ENCODING 49562 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC19B +ENCODING 49563 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC19C +ENCODING 49564 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC19D +ENCODING 49565 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC19E +ENCODING 49566 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC19F +ENCODING 49567 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC1A0 +ENCODING 49568 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC1A1 +ENCODING 49569 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC1A2 +ENCODING 49570 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC1A3 +ENCODING 49571 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC1A4 +ENCODING 49572 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC1A5 +ENCODING 49573 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC1A6 +ENCODING 49574 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC1A7 +ENCODING 49575 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC1A8 +ENCODING 49576 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +0808 +1408 +1408 +220E +4108 +8888 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC1A9 +ENCODING 49577 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC1AA +ENCODING 49578 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC1AB +ENCODING 49579 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC1AC +ENCODING 49580 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC1AD +ENCODING 49581 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC1AE +ENCODING 49582 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC1AF +ENCODING 49583 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC1B0 +ENCODING 49584 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC1B1 +ENCODING 49585 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC1B2 +ENCODING 49586 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC1B3 +ENCODING 49587 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC1B4 +ENCODING 49588 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC1B5 +ENCODING 49589 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC1B6 +ENCODING 49590 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC1B7 +ENCODING 49591 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC1B8 +ENCODING 49592 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC1B9 +ENCODING 49593 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC1BA +ENCODING 49594 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC1BB +ENCODING 49595 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC1BC +ENCODING 49596 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC1BD +ENCODING 49597 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC1BE +ENCODING 49598 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC1BF +ENCODING 49599 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC1C0 +ENCODING 49600 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC1C1 +ENCODING 49601 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC1C2 +ENCODING 49602 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC1C3 +ENCODING 49603 +BBX 15 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC1C4 +ENCODING 49604 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +0824 +1424 +1424 +223C +4124 +88A4 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniC1C5 +ENCODING 49605 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC1C6 +ENCODING 49606 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC1C7 +ENCODING 49607 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC1C8 +ENCODING 49608 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC1C9 +ENCODING 49609 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC1CA +ENCODING 49610 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC1CB +ENCODING 49611 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC1CC +ENCODING 49612 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC1CD +ENCODING 49613 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC1CE +ENCODING 49614 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC1CF +ENCODING 49615 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC1D0 +ENCODING 49616 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC1D1 +ENCODING 49617 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC1D2 +ENCODING 49618 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC1D3 +ENCODING 49619 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC1D4 +ENCODING 49620 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC1D5 +ENCODING 49621 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC1D6 +ENCODING 49622 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC1D7 +ENCODING 49623 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC1D8 +ENCODING 49624 +BBX 15 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC1D9 +ENCODING 49625 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC1DA +ENCODING 49626 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC1DB +ENCODING 49627 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC1DC +ENCODING 49628 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC1DD +ENCODING 49629 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC1DE +ENCODING 49630 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC1DF +ENCODING 49631 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC1E0 +ENCODING 49632 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +0808 +1408 +1408 +2208 +4108 +8888 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC1E1 +ENCODING 49633 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC1E2 +ENCODING 49634 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC1E3 +ENCODING 49635 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC1E4 +ENCODING 49636 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC1E5 +ENCODING 49637 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC1E6 +ENCODING 49638 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC1E7 +ENCODING 49639 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC1E8 +ENCODING 49640 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC1E9 +ENCODING 49641 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC1EA +ENCODING 49642 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC1EB +ENCODING 49643 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC1EC +ENCODING 49644 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC1ED +ENCODING 49645 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC1EE +ENCODING 49646 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC1EF +ENCODING 49647 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC1F0 +ENCODING 49648 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC1F1 +ENCODING 49649 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC1F2 +ENCODING 49650 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC1F3 +ENCODING 49651 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC1F4 +ENCODING 49652 +BBX 14 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC1F5 +ENCODING 49653 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC1F6 +ENCODING 49654 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC1F7 +ENCODING 49655 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC1F8 +ENCODING 49656 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC1F9 +ENCODING 49657 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC1FA +ENCODING 49658 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC1FB +ENCODING 49659 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC1FC +ENCODING 49660 +BBX 15 13 0 0 +BITMAP +0100 +0100 +0100 +0280 +0440 +0820 +1010 +600C +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniC1FD +ENCODING 49661 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC1FE +ENCODING 49662 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC1FF +ENCODING 49663 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC200 +ENCODING 49664 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC201 +ENCODING 49665 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC202 +ENCODING 49666 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC203 +ENCODING 49667 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC204 +ENCODING 49668 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC205 +ENCODING 49669 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC206 +ENCODING 49670 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC207 +ENCODING 49671 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC208 +ENCODING 49672 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC209 +ENCODING 49673 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC20A +ENCODING 49674 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC20B +ENCODING 49675 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC20C +ENCODING 49676 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC20D +ENCODING 49677 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC20E +ENCODING 49678 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC20F +ENCODING 49679 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC210 +ENCODING 49680 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC211 +ENCODING 49681 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC212 +ENCODING 49682 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC213 +ENCODING 49683 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC214 +ENCODING 49684 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC215 +ENCODING 49685 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC216 +ENCODING 49686 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC217 +ENCODING 49687 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC218 +ENCODING 49688 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0440 +1830 +600C +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniC219 +ENCODING 49689 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC21A +ENCODING 49690 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC21B +ENCODING 49691 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC21C +ENCODING 49692 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC21D +ENCODING 49693 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC21E +ENCODING 49694 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC21F +ENCODING 49695 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC220 +ENCODING 49696 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC221 +ENCODING 49697 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC222 +ENCODING 49698 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC223 +ENCODING 49699 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC224 +ENCODING 49700 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC225 +ENCODING 49701 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC226 +ENCODING 49702 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC227 +ENCODING 49703 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC228 +ENCODING 49704 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC229 +ENCODING 49705 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC22A +ENCODING 49706 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC22B +ENCODING 49707 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC22C +ENCODING 49708 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC22D +ENCODING 49709 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC22E +ENCODING 49710 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC22F +ENCODING 49711 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC230 +ENCODING 49712 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC231 +ENCODING 49713 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC232 +ENCODING 49714 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC233 +ENCODING 49715 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC234 +ENCODING 49716 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +C188 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniC235 +ENCODING 49717 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC236 +ENCODING 49718 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC237 +ENCODING 49719 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC238 +ENCODING 49720 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC239 +ENCODING 49721 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC23A +ENCODING 49722 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC23B +ENCODING 49723 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC23C +ENCODING 49724 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC23D +ENCODING 49725 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC23E +ENCODING 49726 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC23F +ENCODING 49727 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC240 +ENCODING 49728 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC241 +ENCODING 49729 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC242 +ENCODING 49730 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC243 +ENCODING 49731 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC244 +ENCODING 49732 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC245 +ENCODING 49733 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC246 +ENCODING 49734 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC247 +ENCODING 49735 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC248 +ENCODING 49736 +BBX 14 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC249 +ENCODING 49737 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC24A +ENCODING 49738 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC24B +ENCODING 49739 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC24C +ENCODING 49740 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC24D +ENCODING 49741 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC24E +ENCODING 49742 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC24F +ENCODING 49743 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC250 +ENCODING 49744 +BBX 14 16 0 -2 +BITMAP +0024 +0824 +0824 +0824 +1424 +2224 +C1A4 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniC251 +ENCODING 49745 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC252 +ENCODING 49746 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC253 +ENCODING 49747 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC254 +ENCODING 49748 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC255 +ENCODING 49749 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC256 +ENCODING 49750 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC257 +ENCODING 49751 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC258 +ENCODING 49752 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC259 +ENCODING 49753 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC25A +ENCODING 49754 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC25B +ENCODING 49755 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC25C +ENCODING 49756 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC25D +ENCODING 49757 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC25E +ENCODING 49758 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC25F +ENCODING 49759 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC260 +ENCODING 49760 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC261 +ENCODING 49761 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC262 +ENCODING 49762 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC263 +ENCODING 49763 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC264 +ENCODING 49764 +BBX 15 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC265 +ENCODING 49765 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC266 +ENCODING 49766 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC267 +ENCODING 49767 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC268 +ENCODING 49768 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC269 +ENCODING 49769 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC26A +ENCODING 49770 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC26B +ENCODING 49771 +BBX 14 16 0 -2 +BITMAP +0824 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC26C +ENCODING 49772 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +C188 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniC26D +ENCODING 49773 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC26E +ENCODING 49774 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC26F +ENCODING 49775 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC270 +ENCODING 49776 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC271 +ENCODING 49777 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC272 +ENCODING 49778 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC273 +ENCODING 49779 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC274 +ENCODING 49780 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC275 +ENCODING 49781 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC276 +ENCODING 49782 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC277 +ENCODING 49783 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC278 +ENCODING 49784 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC279 +ENCODING 49785 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC27A +ENCODING 49786 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC27B +ENCODING 49787 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC27C +ENCODING 49788 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC27D +ENCODING 49789 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC27E +ENCODING 49790 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC27F +ENCODING 49791 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC280 +ENCODING 49792 +BBX 14 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC281 +ENCODING 49793 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC282 +ENCODING 49794 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC283 +ENCODING 49795 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC284 +ENCODING 49796 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC285 +ENCODING 49797 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC286 +ENCODING 49798 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC287 +ENCODING 49799 +BBX 13 16 0 -2 +BITMAP +0808 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC288 +ENCODING 49800 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0440 +1830 +600C +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniC289 +ENCODING 49801 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC28A +ENCODING 49802 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC28B +ENCODING 49803 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC28C +ENCODING 49804 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC28D +ENCODING 49805 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC28E +ENCODING 49806 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC28F +ENCODING 49807 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC290 +ENCODING 49808 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC291 +ENCODING 49809 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC292 +ENCODING 49810 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC293 +ENCODING 49811 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC294 +ENCODING 49812 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC295 +ENCODING 49813 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC296 +ENCODING 49814 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC297 +ENCODING 49815 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC298 +ENCODING 49816 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC299 +ENCODING 49817 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC29A +ENCODING 49818 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC29B +ENCODING 49819 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC29C +ENCODING 49820 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC29D +ENCODING 49821 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC29E +ENCODING 49822 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC29F +ENCODING 49823 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC2A0 +ENCODING 49824 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC2A1 +ENCODING 49825 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC2A2 +ENCODING 49826 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC2A3 +ENCODING 49827 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC2A4 +ENCODING 49828 +BBX 15 13 0 0 +BITMAP +0100 +0100 +0100 +0280 +0440 +0820 +1010 +600C +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniC2A5 +ENCODING 49829 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC2A6 +ENCODING 49830 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC2A7 +ENCODING 49831 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC2A8 +ENCODING 49832 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC2A9 +ENCODING 49833 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC2AA +ENCODING 49834 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC2AB +ENCODING 49835 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC2AC +ENCODING 49836 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC2AD +ENCODING 49837 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC2AE +ENCODING 49838 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC2AF +ENCODING 49839 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC2B0 +ENCODING 49840 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC2B1 +ENCODING 49841 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC2B2 +ENCODING 49842 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC2B3 +ENCODING 49843 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC2B4 +ENCODING 49844 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC2B5 +ENCODING 49845 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC2B6 +ENCODING 49846 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC2B7 +ENCODING 49847 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC2B8 +ENCODING 49848 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC2B9 +ENCODING 49849 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC2BA +ENCODING 49850 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC2BB +ENCODING 49851 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC2BC +ENCODING 49852 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC2BD +ENCODING 49853 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC2BE +ENCODING 49854 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC2BF +ENCODING 49855 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC2C0 +ENCODING 49856 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +0808 +1408 +1408 +2208 +4108 +8088 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC2C1 +ENCODING 49857 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC2C2 +ENCODING 49858 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC2C3 +ENCODING 49859 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC2C4 +ENCODING 49860 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC2C5 +ENCODING 49861 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC2C6 +ENCODING 49862 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC2C7 +ENCODING 49863 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC2C8 +ENCODING 49864 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC2C9 +ENCODING 49865 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC2CA +ENCODING 49866 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC2CB +ENCODING 49867 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC2CC +ENCODING 49868 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC2CD +ENCODING 49869 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC2CE +ENCODING 49870 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC2CF +ENCODING 49871 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC2D0 +ENCODING 49872 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC2D1 +ENCODING 49873 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC2D2 +ENCODING 49874 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC2D3 +ENCODING 49875 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC2D4 +ENCODING 49876 +BBX 14 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC2D5 +ENCODING 49877 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC2D6 +ENCODING 49878 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC2D7 +ENCODING 49879 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC2D8 +ENCODING 49880 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC2D9 +ENCODING 49881 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC2DA +ENCODING 49882 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC2DB +ENCODING 49883 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC2DC +ENCODING 49884 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +0808 +0808 +0808 +1408 +1408 +1408 +2208 +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniC2DD +ENCODING 49885 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC2DE +ENCODING 49886 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC2DF +ENCODING 49887 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC2E0 +ENCODING 49888 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC2E1 +ENCODING 49889 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC2E2 +ENCODING 49890 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC2E3 +ENCODING 49891 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC2E4 +ENCODING 49892 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC2E5 +ENCODING 49893 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC2E6 +ENCODING 49894 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC2E7 +ENCODING 49895 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC2E8 +ENCODING 49896 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC2E9 +ENCODING 49897 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC2EA +ENCODING 49898 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC2EB +ENCODING 49899 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC2EC +ENCODING 49900 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC2ED +ENCODING 49901 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC2EE +ENCODING 49902 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC2EF +ENCODING 49903 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC2F0 +ENCODING 49904 +BBX 14 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC2F1 +ENCODING 49905 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC2F2 +ENCODING 49906 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC2F3 +ENCODING 49907 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC2F4 +ENCODING 49908 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC2F5 +ENCODING 49909 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC2F6 +ENCODING 49910 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC2F7 +ENCODING 49911 +BBX 13 16 0 -2 +BITMAP +0008 +0808 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC2F8 +ENCODING 49912 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +2208 +2208 +2208 +550E +5508 +5508 +5508 +8888 +8888 +8888 +0008 +0008 +ENDCHAR +STARTCHAR uniC2F9 +ENCODING 49913 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC2FA +ENCODING 49914 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC2FB +ENCODING 49915 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC2FC +ENCODING 49916 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +550E +8888 +8888 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC2FD +ENCODING 49917 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC2FE +ENCODING 49918 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC2FF +ENCODING 49919 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC300 +ENCODING 49920 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC301 +ENCODING 49921 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC302 +ENCODING 49922 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC303 +ENCODING 49923 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC304 +ENCODING 49924 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC305 +ENCODING 49925 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC306 +ENCODING 49926 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC307 +ENCODING 49927 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC308 +ENCODING 49928 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC309 +ENCODING 49929 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC30A +ENCODING 49930 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC30B +ENCODING 49931 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC30C +ENCODING 49932 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC30D +ENCODING 49933 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC30E +ENCODING 49934 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC30F +ENCODING 49935 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC310 +ENCODING 49936 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC311 +ENCODING 49937 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC312 +ENCODING 49938 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC313 +ENCODING 49939 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC314 +ENCODING 49940 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +2224 +2224 +2224 +553C +5524 +5524 +5524 +88A4 +88A4 +88A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC315 +ENCODING 49941 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC316 +ENCODING 49942 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC317 +ENCODING 49943 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC318 +ENCODING 49944 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC319 +ENCODING 49945 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC31A +ENCODING 49946 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC31B +ENCODING 49947 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC31C +ENCODING 49948 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC31D +ENCODING 49949 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC31E +ENCODING 49950 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC31F +ENCODING 49951 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC320 +ENCODING 49952 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC321 +ENCODING 49953 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC322 +ENCODING 49954 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC323 +ENCODING 49955 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC324 +ENCODING 49956 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC325 +ENCODING 49957 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC326 +ENCODING 49958 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC327 +ENCODING 49959 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC328 +ENCODING 49960 +BBX 15 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC329 +ENCODING 49961 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC32A +ENCODING 49962 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC32B +ENCODING 49963 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC32C +ENCODING 49964 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC32D +ENCODING 49965 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC32E +ENCODING 49966 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC32F +ENCODING 49967 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC330 +ENCODING 49968 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +2208 +220E +2208 +5508 +5508 +5508 +550E +8888 +8888 +8888 +0008 +0008 +ENDCHAR +STARTCHAR uniC331 +ENCODING 49969 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC332 +ENCODING 49970 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC333 +ENCODING 49971 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC334 +ENCODING 49972 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +220E +5508 +5508 +8888 +888E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC335 +ENCODING 49973 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC336 +ENCODING 49974 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC337 +ENCODING 49975 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC338 +ENCODING 49976 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC339 +ENCODING 49977 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC33A +ENCODING 49978 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC33B +ENCODING 49979 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC33C +ENCODING 49980 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC33D +ENCODING 49981 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC33E +ENCODING 49982 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC33F +ENCODING 49983 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC340 +ENCODING 49984 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC341 +ENCODING 49985 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC342 +ENCODING 49986 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC343 +ENCODING 49987 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC344 +ENCODING 49988 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC345 +ENCODING 49989 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC346 +ENCODING 49990 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC347 +ENCODING 49991 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC348 +ENCODING 49992 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC349 +ENCODING 49993 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC34A +ENCODING 49994 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC34B +ENCODING 49995 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC34C +ENCODING 49996 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +223C +2224 +2224 +5524 +5524 +553C +5524 +88A4 +88A4 +88A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC34D +ENCODING 49997 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC34E +ENCODING 49998 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC34F +ENCODING 49999 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC350 +ENCODING 50000 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +5524 +88BC +88A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC351 +ENCODING 50001 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC352 +ENCODING 50002 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC353 +ENCODING 50003 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC354 +ENCODING 50004 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC355 +ENCODING 50005 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC356 +ENCODING 50006 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC357 +ENCODING 50007 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC358 +ENCODING 50008 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC359 +ENCODING 50009 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC35A +ENCODING 50010 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC35B +ENCODING 50011 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC35C +ENCODING 50012 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC35D +ENCODING 50013 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC35E +ENCODING 50014 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC35F +ENCODING 50015 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC360 +ENCODING 50016 +BBX 15 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC361 +ENCODING 50017 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC362 +ENCODING 50018 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC363 +ENCODING 50019 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC364 +ENCODING 50020 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC365 +ENCODING 50021 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC366 +ENCODING 50022 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC367 +ENCODING 50023 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC368 +ENCODING 50024 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +2208 +2208 +2208 +5578 +5508 +5508 +5508 +8888 +8888 +8888 +0008 +0008 +ENDCHAR +STARTCHAR uniC369 +ENCODING 50025 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC36A +ENCODING 50026 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC36B +ENCODING 50027 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC36C +ENCODING 50028 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC36D +ENCODING 50029 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC36E +ENCODING 50030 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC36F +ENCODING 50031 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC370 +ENCODING 50032 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC371 +ENCODING 50033 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC372 +ENCODING 50034 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC373 +ENCODING 50035 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC374 +ENCODING 50036 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC375 +ENCODING 50037 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC376 +ENCODING 50038 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC377 +ENCODING 50039 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC378 +ENCODING 50040 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC379 +ENCODING 50041 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC37A +ENCODING 50042 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC37B +ENCODING 50043 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC37C +ENCODING 50044 +BBX 14 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC37D +ENCODING 50045 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC37E +ENCODING 50046 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC37F +ENCODING 50047 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC380 +ENCODING 50048 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC381 +ENCODING 50049 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC382 +ENCODING 50050 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC383 +ENCODING 50051 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC384 +ENCODING 50052 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +2224 +2224 +23E4 +5524 +5524 +5524 +5524 +88A4 +88A4 +88A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC385 +ENCODING 50053 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC386 +ENCODING 50054 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC387 +ENCODING 50055 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC388 +ENCODING 50056 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC389 +ENCODING 50057 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC38A +ENCODING 50058 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC38B +ENCODING 50059 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC38C +ENCODING 50060 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC38D +ENCODING 50061 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC38E +ENCODING 50062 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC38F +ENCODING 50063 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC390 +ENCODING 50064 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC391 +ENCODING 50065 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC392 +ENCODING 50066 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC393 +ENCODING 50067 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC394 +ENCODING 50068 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC395 +ENCODING 50069 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC396 +ENCODING 50070 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC397 +ENCODING 50071 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC398 +ENCODING 50072 +BBX 15 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC399 +ENCODING 50073 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC39A +ENCODING 50074 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC39B +ENCODING 50075 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC39C +ENCODING 50076 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC39D +ENCODING 50077 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC39E +ENCODING 50078 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC39F +ENCODING 50079 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC3A0 +ENCODING 50080 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +2208 +2278 +2208 +5508 +5508 +5578 +5508 +8888 +8888 +8888 +0008 +0008 +ENDCHAR +STARTCHAR uniC3A1 +ENCODING 50081 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC3A2 +ENCODING 50082 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC3A3 +ENCODING 50083 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC3A4 +ENCODING 50084 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC3A5 +ENCODING 50085 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC3A6 +ENCODING 50086 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC3A7 +ENCODING 50087 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC3A8 +ENCODING 50088 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC3A9 +ENCODING 50089 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC3AA +ENCODING 50090 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC3AB +ENCODING 50091 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC3AC +ENCODING 50092 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC3AD +ENCODING 50093 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC3AE +ENCODING 50094 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC3AF +ENCODING 50095 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC3B0 +ENCODING 50096 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC3B1 +ENCODING 50097 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC3B2 +ENCODING 50098 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC3B3 +ENCODING 50099 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC3B4 +ENCODING 50100 +BBX 14 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC3B5 +ENCODING 50101 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC3B6 +ENCODING 50102 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC3B7 +ENCODING 50103 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC3B8 +ENCODING 50104 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC3B9 +ENCODING 50105 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC3BA +ENCODING 50106 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC3BB +ENCODING 50107 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC3BC +ENCODING 50108 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +2224 +23E4 +2224 +5524 +5524 +55E4 +5524 +88A4 +88A4 +88A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC3BD +ENCODING 50109 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC3BE +ENCODING 50110 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC3BF +ENCODING 50111 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC3C0 +ENCODING 50112 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC3C1 +ENCODING 50113 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC3C2 +ENCODING 50114 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC3C3 +ENCODING 50115 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC3C4 +ENCODING 50116 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC3C5 +ENCODING 50117 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC3C6 +ENCODING 50118 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC3C7 +ENCODING 50119 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC3C8 +ENCODING 50120 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC3C9 +ENCODING 50121 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC3CA +ENCODING 50122 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC3CB +ENCODING 50123 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC3CC +ENCODING 50124 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC3CD +ENCODING 50125 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC3CE +ENCODING 50126 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC3CF +ENCODING 50127 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC3D0 +ENCODING 50128 +BBX 15 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC3D1 +ENCODING 50129 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC3D2 +ENCODING 50130 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC3D3 +ENCODING 50131 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC3D4 +ENCODING 50132 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC3D5 +ENCODING 50133 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC3D6 +ENCODING 50134 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC3D7 +ENCODING 50135 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC3D8 +ENCODING 50136 +BBX 15 13 0 0 +BITMAP +0820 +0820 +0820 +0820 +1450 +1450 +2288 +4104 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniC3D9 +ENCODING 50137 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC3DA +ENCODING 50138 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC3DB +ENCODING 50139 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC3DC +ENCODING 50140 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC3DD +ENCODING 50141 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC3DE +ENCODING 50142 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC3DF +ENCODING 50143 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC3E0 +ENCODING 50144 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC3E1 +ENCODING 50145 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC3E2 +ENCODING 50146 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC3E3 +ENCODING 50147 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC3E4 +ENCODING 50148 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC3E5 +ENCODING 50149 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC3E6 +ENCODING 50150 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC3E7 +ENCODING 50151 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC3E8 +ENCODING 50152 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC3E9 +ENCODING 50153 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC3EA +ENCODING 50154 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC3EB +ENCODING 50155 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC3EC +ENCODING 50156 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC3ED +ENCODING 50157 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC3EE +ENCODING 50158 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC3EF +ENCODING 50159 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC3F0 +ENCODING 50160 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC3F1 +ENCODING 50161 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC3F2 +ENCODING 50162 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC3F3 +ENCODING 50163 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC3F4 +ENCODING 50164 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +2208 +5508 +5508 +888E +8888 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC3F5 +ENCODING 50165 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC3F6 +ENCODING 50166 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC3F7 +ENCODING 50167 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC3F8 +ENCODING 50168 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC3F9 +ENCODING 50169 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC3FA +ENCODING 50170 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC3FB +ENCODING 50171 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC3FC +ENCODING 50172 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC3FD +ENCODING 50173 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC3FE +ENCODING 50174 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC3FF +ENCODING 50175 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC400 +ENCODING 50176 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC401 +ENCODING 50177 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC402 +ENCODING 50178 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC403 +ENCODING 50179 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC404 +ENCODING 50180 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC405 +ENCODING 50181 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC406 +ENCODING 50182 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC407 +ENCODING 50183 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC408 +ENCODING 50184 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC409 +ENCODING 50185 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC40A +ENCODING 50186 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC40B +ENCODING 50187 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC40C +ENCODING 50188 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC40D +ENCODING 50189 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC40E +ENCODING 50190 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC40F +ENCODING 50191 +BBX 15 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC410 +ENCODING 50192 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +2224 +5524 +5524 +88BC +88A4 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniC411 +ENCODING 50193 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC412 +ENCODING 50194 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC413 +ENCODING 50195 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC414 +ENCODING 50196 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC415 +ENCODING 50197 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC416 +ENCODING 50198 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC417 +ENCODING 50199 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC418 +ENCODING 50200 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC419 +ENCODING 50201 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC41A +ENCODING 50202 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC41B +ENCODING 50203 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC41C +ENCODING 50204 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC41D +ENCODING 50205 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC41E +ENCODING 50206 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC41F +ENCODING 50207 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC420 +ENCODING 50208 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC421 +ENCODING 50209 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC422 +ENCODING 50210 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC423 +ENCODING 50211 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC424 +ENCODING 50212 +BBX 15 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC425 +ENCODING 50213 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC426 +ENCODING 50214 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC427 +ENCODING 50215 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC428 +ENCODING 50216 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC429 +ENCODING 50217 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC42A +ENCODING 50218 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC42B +ENCODING 50219 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC42C +ENCODING 50220 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC42D +ENCODING 50221 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC42E +ENCODING 50222 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC42F +ENCODING 50223 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC430 +ENCODING 50224 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC431 +ENCODING 50225 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC432 +ENCODING 50226 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC433 +ENCODING 50227 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC434 +ENCODING 50228 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC435 +ENCODING 50229 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC436 +ENCODING 50230 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC437 +ENCODING 50231 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC438 +ENCODING 50232 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC439 +ENCODING 50233 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC43A +ENCODING 50234 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC43B +ENCODING 50235 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC43C +ENCODING 50236 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC43D +ENCODING 50237 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC43E +ENCODING 50238 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC43F +ENCODING 50239 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC440 +ENCODING 50240 +BBX 14 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC441 +ENCODING 50241 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC442 +ENCODING 50242 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC443 +ENCODING 50243 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC444 +ENCODING 50244 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC445 +ENCODING 50245 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC446 +ENCODING 50246 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC447 +ENCODING 50247 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC448 +ENCODING 50248 +BBX 15 13 0 0 +BITMAP +0820 +0820 +0820 +0820 +1450 +1450 +2288 +4104 +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniC449 +ENCODING 50249 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC44A +ENCODING 50250 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC44B +ENCODING 50251 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC44C +ENCODING 50252 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC44D +ENCODING 50253 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC44E +ENCODING 50254 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC44F +ENCODING 50255 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC450 +ENCODING 50256 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC451 +ENCODING 50257 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC452 +ENCODING 50258 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC453 +ENCODING 50259 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC454 +ENCODING 50260 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC455 +ENCODING 50261 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC456 +ENCODING 50262 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC457 +ENCODING 50263 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC458 +ENCODING 50264 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC459 +ENCODING 50265 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC45A +ENCODING 50266 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC45B +ENCODING 50267 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC45C +ENCODING 50268 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC45D +ENCODING 50269 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC45E +ENCODING 50270 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC45F +ENCODING 50271 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC460 +ENCODING 50272 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC461 +ENCODING 50273 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC462 +ENCODING 50274 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC463 +ENCODING 50275 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4544 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC464 +ENCODING 50276 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniC465 +ENCODING 50277 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC466 +ENCODING 50278 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC467 +ENCODING 50279 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC468 +ENCODING 50280 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC469 +ENCODING 50281 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC46A +ENCODING 50282 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC46B +ENCODING 50283 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC46C +ENCODING 50284 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC46D +ENCODING 50285 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC46E +ENCODING 50286 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC46F +ENCODING 50287 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC470 +ENCODING 50288 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC471 +ENCODING 50289 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC472 +ENCODING 50290 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC473 +ENCODING 50291 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC474 +ENCODING 50292 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC475 +ENCODING 50293 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC476 +ENCODING 50294 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC477 +ENCODING 50295 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC478 +ENCODING 50296 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC479 +ENCODING 50297 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC47A +ENCODING 50298 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC47B +ENCODING 50299 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC47C +ENCODING 50300 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC47D +ENCODING 50301 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC47E +ENCODING 50302 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC47F +ENCODING 50303 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC480 +ENCODING 50304 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniC481 +ENCODING 50305 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC482 +ENCODING 50306 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC483 +ENCODING 50307 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC484 +ENCODING 50308 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC485 +ENCODING 50309 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC486 +ENCODING 50310 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC487 +ENCODING 50311 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC488 +ENCODING 50312 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC489 +ENCODING 50313 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC48A +ENCODING 50314 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC48B +ENCODING 50315 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC48C +ENCODING 50316 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC48D +ENCODING 50317 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC48E +ENCODING 50318 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC48F +ENCODING 50319 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC490 +ENCODING 50320 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC491 +ENCODING 50321 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC492 +ENCODING 50322 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC493 +ENCODING 50323 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC494 +ENCODING 50324 +BBX 14 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC495 +ENCODING 50325 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC496 +ENCODING 50326 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC497 +ENCODING 50327 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC498 +ENCODING 50328 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC499 +ENCODING 50329 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC49A +ENCODING 50330 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC49B +ENCODING 50331 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC49C +ENCODING 50332 +BBX 14 16 0 -2 +BITMAP +0024 +2224 +2224 +2224 +5524 +5524 +88A4 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniC49D +ENCODING 50333 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC49E +ENCODING 50334 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC49F +ENCODING 50335 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC4A0 +ENCODING 50336 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC4A1 +ENCODING 50337 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC4A2 +ENCODING 50338 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC4A3 +ENCODING 50339 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC4A4 +ENCODING 50340 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC4A5 +ENCODING 50341 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC4A6 +ENCODING 50342 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC4A7 +ENCODING 50343 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC4A8 +ENCODING 50344 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC4A9 +ENCODING 50345 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC4AA +ENCODING 50346 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC4AB +ENCODING 50347 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC4AC +ENCODING 50348 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC4AD +ENCODING 50349 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC4AE +ENCODING 50350 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC4AF +ENCODING 50351 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC4B0 +ENCODING 50352 +BBX 15 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC4B1 +ENCODING 50353 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC4B2 +ENCODING 50354 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC4B3 +ENCODING 50355 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC4B4 +ENCODING 50356 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC4B5 +ENCODING 50357 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC4B6 +ENCODING 50358 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC4B7 +ENCODING 50359 +BBX 14 16 0 -2 +BITMAP +2224 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC4B8 +ENCODING 50360 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniC4B9 +ENCODING 50361 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC4BA +ENCODING 50362 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC4BB +ENCODING 50363 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC4BC +ENCODING 50364 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC4BD +ENCODING 50365 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC4BE +ENCODING 50366 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC4BF +ENCODING 50367 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC4C0 +ENCODING 50368 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC4C1 +ENCODING 50369 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC4C2 +ENCODING 50370 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC4C3 +ENCODING 50371 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC4C4 +ENCODING 50372 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC4C5 +ENCODING 50373 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC4C6 +ENCODING 50374 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC4C7 +ENCODING 50375 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC4C8 +ENCODING 50376 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC4C9 +ENCODING 50377 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC4CA +ENCODING 50378 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC4CB +ENCODING 50379 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC4CC +ENCODING 50380 +BBX 14 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC4CD +ENCODING 50381 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC4CE +ENCODING 50382 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC4CF +ENCODING 50383 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC4D0 +ENCODING 50384 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC4D1 +ENCODING 50385 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC4D2 +ENCODING 50386 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC4D3 +ENCODING 50387 +BBX 13 16 0 -2 +BITMAP +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC4D4 +ENCODING 50388 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +0820 +1450 +2288 +4104 +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniC4D5 +ENCODING 50389 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC4D6 +ENCODING 50390 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC4D7 +ENCODING 50391 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC4D8 +ENCODING 50392 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC4D9 +ENCODING 50393 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC4DA +ENCODING 50394 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC4DB +ENCODING 50395 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC4DC +ENCODING 50396 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC4DD +ENCODING 50397 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC4DE +ENCODING 50398 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC4DF +ENCODING 50399 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC4E0 +ENCODING 50400 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC4E1 +ENCODING 50401 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC4E2 +ENCODING 50402 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC4E3 +ENCODING 50403 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC4E4 +ENCODING 50404 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC4E5 +ENCODING 50405 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC4E6 +ENCODING 50406 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC4E7 +ENCODING 50407 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC4E8 +ENCODING 50408 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC4E9 +ENCODING 50409 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC4EA +ENCODING 50410 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC4EB +ENCODING 50411 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC4EC +ENCODING 50412 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC4ED +ENCODING 50413 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC4EE +ENCODING 50414 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC4EF +ENCODING 50415 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC4F0 +ENCODING 50416 +BBX 15 13 0 0 +BITMAP +0820 +0820 +0820 +0820 +1450 +1450 +2288 +4104 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniC4F1 +ENCODING 50417 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC4F2 +ENCODING 50418 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC4F3 +ENCODING 50419 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC4F4 +ENCODING 50420 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC4F5 +ENCODING 50421 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC4F6 +ENCODING 50422 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC4F7 +ENCODING 50423 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC4F8 +ENCODING 50424 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC4F9 +ENCODING 50425 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC4FA +ENCODING 50426 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC4FB +ENCODING 50427 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC4FC +ENCODING 50428 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC4FD +ENCODING 50429 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC4FE +ENCODING 50430 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC4FF +ENCODING 50431 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC500 +ENCODING 50432 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC501 +ENCODING 50433 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC502 +ENCODING 50434 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC503 +ENCODING 50435 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC504 +ENCODING 50436 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC505 +ENCODING 50437 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC506 +ENCODING 50438 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC507 +ENCODING 50439 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC508 +ENCODING 50440 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC509 +ENCODING 50441 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC50A +ENCODING 50442 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC50B +ENCODING 50443 +BBX 15 15 0 -2 +BITMAP +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC50C +ENCODING 50444 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC50D +ENCODING 50445 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC50E +ENCODING 50446 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC50F +ENCODING 50447 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC510 +ENCODING 50448 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC511 +ENCODING 50449 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC512 +ENCODING 50450 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC513 +ENCODING 50451 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC514 +ENCODING 50452 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC515 +ENCODING 50453 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC516 +ENCODING 50454 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC517 +ENCODING 50455 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC518 +ENCODING 50456 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC519 +ENCODING 50457 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC51A +ENCODING 50458 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC51B +ENCODING 50459 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC51C +ENCODING 50460 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC51D +ENCODING 50461 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC51E +ENCODING 50462 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC51F +ENCODING 50463 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC520 +ENCODING 50464 +BBX 14 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC521 +ENCODING 50465 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC522 +ENCODING 50466 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC523 +ENCODING 50467 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC524 +ENCODING 50468 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC525 +ENCODING 50469 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC526 +ENCODING 50470 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC527 +ENCODING 50471 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC528 +ENCODING 50472 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +2208 +2208 +2208 +5508 +5508 +5508 +5508 +8888 +8888 +8888 +0008 +0008 +ENDCHAR +STARTCHAR uniC529 +ENCODING 50473 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC52A +ENCODING 50474 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC52B +ENCODING 50475 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC52C +ENCODING 50476 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC52D +ENCODING 50477 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC52E +ENCODING 50478 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC52F +ENCODING 50479 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC530 +ENCODING 50480 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC531 +ENCODING 50481 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC532 +ENCODING 50482 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC533 +ENCODING 50483 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC534 +ENCODING 50484 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC535 +ENCODING 50485 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC536 +ENCODING 50486 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC537 +ENCODING 50487 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC538 +ENCODING 50488 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC539 +ENCODING 50489 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC53A +ENCODING 50490 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC53B +ENCODING 50491 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC53C +ENCODING 50492 +BBX 14 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC53D +ENCODING 50493 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC53E +ENCODING 50494 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC53F +ENCODING 50495 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC540 +ENCODING 50496 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC541 +ENCODING 50497 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC542 +ENCODING 50498 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC543 +ENCODING 50499 +BBX 13 16 0 -2 +BITMAP +0008 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC544 +ENCODING 50500 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +8108 +810E +8108 +8108 +8108 +8108 +4208 +3C08 +0008 +0008 +ENDCHAR +STARTCHAR uniC545 +ENCODING 50501 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC546 +ENCODING 50502 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC547 +ENCODING 50503 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC548 +ENCODING 50504 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +810E +4208 +3C08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC549 +ENCODING 50505 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC54A +ENCODING 50506 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC54B +ENCODING 50507 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC54C +ENCODING 50508 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC54D +ENCODING 50509 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC54E +ENCODING 50510 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC54F +ENCODING 50511 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC550 +ENCODING 50512 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC551 +ENCODING 50513 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC552 +ENCODING 50514 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC553 +ENCODING 50515 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC554 +ENCODING 50516 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC555 +ENCODING 50517 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC556 +ENCODING 50518 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC557 +ENCODING 50519 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC558 +ENCODING 50520 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC559 +ENCODING 50521 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC55A +ENCODING 50522 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC55B +ENCODING 50523 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC55C +ENCODING 50524 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC55D +ENCODING 50525 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC55E +ENCODING 50526 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC55F +ENCODING 50527 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +810E +8108 +4208 +3C08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC560 +ENCODING 50528 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +8124 +8124 +8124 +813C +8124 +8124 +8124 +8124 +4224 +3C24 +0024 +0024 +ENDCHAR +STARTCHAR uniC561 +ENCODING 50529 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC562 +ENCODING 50530 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC563 +ENCODING 50531 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC564 +ENCODING 50532 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC565 +ENCODING 50533 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC566 +ENCODING 50534 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC567 +ENCODING 50535 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC568 +ENCODING 50536 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC569 +ENCODING 50537 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC56A +ENCODING 50538 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC56B +ENCODING 50539 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC56C +ENCODING 50540 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC56D +ENCODING 50541 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC56E +ENCODING 50542 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC56F +ENCODING 50543 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC570 +ENCODING 50544 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC571 +ENCODING 50545 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC572 +ENCODING 50546 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC573 +ENCODING 50547 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC574 +ENCODING 50548 +BBX 15 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC575 +ENCODING 50549 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC576 +ENCODING 50550 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC577 +ENCODING 50551 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC578 +ENCODING 50552 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC579 +ENCODING 50553 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC57A +ENCODING 50554 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC57B +ENCODING 50555 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +4224 +3C24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC57C +ENCODING 50556 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +810E +8108 +8108 +8108 +8108 +810E +8108 +4208 +3C08 +0008 +0008 +ENDCHAR +STARTCHAR uniC57D +ENCODING 50557 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC57E +ENCODING 50558 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC57F +ENCODING 50559 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC580 +ENCODING 50560 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +810E +8108 +8108 +4208 +3C0E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC581 +ENCODING 50561 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC582 +ENCODING 50562 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC583 +ENCODING 50563 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC584 +ENCODING 50564 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC585 +ENCODING 50565 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC586 +ENCODING 50566 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC587 +ENCODING 50567 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC588 +ENCODING 50568 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC589 +ENCODING 50569 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC58A +ENCODING 50570 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC58B +ENCODING 50571 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC58C +ENCODING 50572 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC58D +ENCODING 50573 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC58E +ENCODING 50574 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC58F +ENCODING 50575 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC590 +ENCODING 50576 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC591 +ENCODING 50577 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC592 +ENCODING 50578 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC593 +ENCODING 50579 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC594 +ENCODING 50580 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC595 +ENCODING 50581 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC596 +ENCODING 50582 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC597 +ENCODING 50583 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +420E +8108 +8108 +810E +4208 +3C08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC598 +ENCODING 50584 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +813C +8124 +8124 +8124 +8124 +813C +8124 +8124 +4224 +3C24 +0024 +0024 +ENDCHAR +STARTCHAR uniC599 +ENCODING 50585 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC59A +ENCODING 50586 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC59B +ENCODING 50587 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC59C +ENCODING 50588 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +8124 +423C +3C24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC59D +ENCODING 50589 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC59E +ENCODING 50590 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC59F +ENCODING 50591 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC5A0 +ENCODING 50592 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC5A1 +ENCODING 50593 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC5A2 +ENCODING 50594 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC5A3 +ENCODING 50595 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC5A4 +ENCODING 50596 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC5A5 +ENCODING 50597 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC5A6 +ENCODING 50598 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC5A7 +ENCODING 50599 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC5A8 +ENCODING 50600 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC5A9 +ENCODING 50601 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC5AA +ENCODING 50602 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC5AB +ENCODING 50603 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC5AC +ENCODING 50604 +BBX 15 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC5AD +ENCODING 50605 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC5AE +ENCODING 50606 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC5AF +ENCODING 50607 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC5B0 +ENCODING 50608 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC5B1 +ENCODING 50609 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC5B2 +ENCODING 50610 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC5B3 +ENCODING 50611 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +423C +8124 +8124 +813C +4224 +3C24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC5B4 +ENCODING 50612 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +8108 +8178 +8108 +8108 +8108 +8108 +4208 +3C08 +0008 +0008 +ENDCHAR +STARTCHAR uniC5B5 +ENCODING 50613 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC5B6 +ENCODING 50614 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC5B7 +ENCODING 50615 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC5B8 +ENCODING 50616 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC5B9 +ENCODING 50617 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC5BA +ENCODING 50618 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC5BB +ENCODING 50619 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC5BC +ENCODING 50620 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC5BD +ENCODING 50621 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC5BE +ENCODING 50622 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC5BF +ENCODING 50623 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC5C0 +ENCODING 50624 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC5C1 +ENCODING 50625 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC5C2 +ENCODING 50626 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC5C3 +ENCODING 50627 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC5C4 +ENCODING 50628 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC5C5 +ENCODING 50629 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC5C6 +ENCODING 50630 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC5C7 +ENCODING 50631 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC5C8 +ENCODING 50632 +BBX 14 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC5C9 +ENCODING 50633 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC5CA +ENCODING 50634 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC5CB +ENCODING 50635 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC5CC +ENCODING 50636 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC5CD +ENCODING 50637 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC5CE +ENCODING 50638 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC5CF +ENCODING 50639 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8178 +8108 +4208 +3C08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC5D0 +ENCODING 50640 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +8124 +8124 +81E4 +8124 +8124 +8124 +8124 +8124 +4224 +3C24 +0024 +0024 +ENDCHAR +STARTCHAR uniC5D1 +ENCODING 50641 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC5D2 +ENCODING 50642 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC5D3 +ENCODING 50643 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC5D4 +ENCODING 50644 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC5D5 +ENCODING 50645 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC5D6 +ENCODING 50646 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC5D7 +ENCODING 50647 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC5D8 +ENCODING 50648 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC5D9 +ENCODING 50649 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC5DA +ENCODING 50650 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC5DB +ENCODING 50651 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC5DC +ENCODING 50652 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC5DD +ENCODING 50653 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC5DE +ENCODING 50654 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC5DF +ENCODING 50655 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC5E0 +ENCODING 50656 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC5E1 +ENCODING 50657 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC5E2 +ENCODING 50658 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC5E3 +ENCODING 50659 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC5E4 +ENCODING 50660 +BBX 15 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC5E5 +ENCODING 50661 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC5E6 +ENCODING 50662 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC5E7 +ENCODING 50663 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC5E8 +ENCODING 50664 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC5E9 +ENCODING 50665 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC5EA +ENCODING 50666 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC5EB +ENCODING 50667 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +81E4 +8124 +4224 +3C24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC5EC +ENCODING 50668 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8178 +8108 +8108 +8108 +8178 +8108 +8108 +4208 +3C08 +0008 +0008 +ENDCHAR +STARTCHAR uniC5ED +ENCODING 50669 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC5EE +ENCODING 50670 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC5EF +ENCODING 50671 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC5F0 +ENCODING 50672 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC5F1 +ENCODING 50673 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC5F2 +ENCODING 50674 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC5F3 +ENCODING 50675 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC5F4 +ENCODING 50676 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC5F5 +ENCODING 50677 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC5F6 +ENCODING 50678 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC5F7 +ENCODING 50679 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC5F8 +ENCODING 50680 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC5F9 +ENCODING 50681 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC5FA +ENCODING 50682 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC5FB +ENCODING 50683 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC5FC +ENCODING 50684 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC5FD +ENCODING 50685 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC5FE +ENCODING 50686 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC5FF +ENCODING 50687 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC600 +ENCODING 50688 +BBX 14 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC601 +ENCODING 50689 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC602 +ENCODING 50690 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC603 +ENCODING 50691 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC604 +ENCODING 50692 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC605 +ENCODING 50693 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC606 +ENCODING 50694 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC607 +ENCODING 50695 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8178 +8108 +8108 +4278 +3C08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC608 +ENCODING 50696 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +8124 +81E4 +8124 +8124 +8124 +81E4 +8124 +8124 +4224 +3C24 +0024 +0024 +ENDCHAR +STARTCHAR uniC609 +ENCODING 50697 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC60A +ENCODING 50698 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC60B +ENCODING 50699 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC60C +ENCODING 50700 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC60D +ENCODING 50701 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC60E +ENCODING 50702 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC60F +ENCODING 50703 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC610 +ENCODING 50704 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC611 +ENCODING 50705 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC612 +ENCODING 50706 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC613 +ENCODING 50707 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC614 +ENCODING 50708 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC615 +ENCODING 50709 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC616 +ENCODING 50710 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC617 +ENCODING 50711 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC618 +ENCODING 50712 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC619 +ENCODING 50713 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC61A +ENCODING 50714 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC61B +ENCODING 50715 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC61C +ENCODING 50716 +BBX 15 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC61D +ENCODING 50717 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC61E +ENCODING 50718 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC61F +ENCODING 50719 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC620 +ENCODING 50720 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC621 +ENCODING 50721 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC622 +ENCODING 50722 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC623 +ENCODING 50723 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +81E4 +8124 +81E4 +4224 +3C24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC624 +ENCODING 50724 +BBX 15 13 0 0 +BITMAP +0FE0 +1010 +2008 +2008 +2008 +2008 +1010 +0FE0 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniC625 +ENCODING 50725 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC626 +ENCODING 50726 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC627 +ENCODING 50727 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC628 +ENCODING 50728 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC629 +ENCODING 50729 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC62A +ENCODING 50730 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC62B +ENCODING 50731 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC62C +ENCODING 50732 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC62D +ENCODING 50733 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC62E +ENCODING 50734 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC62F +ENCODING 50735 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC630 +ENCODING 50736 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC631 +ENCODING 50737 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC632 +ENCODING 50738 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC633 +ENCODING 50739 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC634 +ENCODING 50740 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC635 +ENCODING 50741 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC636 +ENCODING 50742 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC637 +ENCODING 50743 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC638 +ENCODING 50744 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC639 +ENCODING 50745 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC63A +ENCODING 50746 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC63B +ENCODING 50747 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC63C +ENCODING 50748 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC63D +ENCODING 50749 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC63E +ENCODING 50750 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC63F +ENCODING 50751 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC640 +ENCODING 50752 +BBX 15 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +8108 +420E +3C08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC641 +ENCODING 50753 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC642 +ENCODING 50754 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC643 +ENCODING 50755 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC644 +ENCODING 50756 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC645 +ENCODING 50757 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC646 +ENCODING 50758 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC647 +ENCODING 50759 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC648 +ENCODING 50760 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC649 +ENCODING 50761 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC64A +ENCODING 50762 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC64B +ENCODING 50763 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC64C +ENCODING 50764 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC64D +ENCODING 50765 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC64E +ENCODING 50766 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC64F +ENCODING 50767 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC650 +ENCODING 50768 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC651 +ENCODING 50769 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC652 +ENCODING 50770 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC653 +ENCODING 50771 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC654 +ENCODING 50772 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC655 +ENCODING 50773 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC656 +ENCODING 50774 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC657 +ENCODING 50775 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC658 +ENCODING 50776 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC659 +ENCODING 50777 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC65A +ENCODING 50778 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC65B +ENCODING 50779 +BBX 15 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E0E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC65C +ENCODING 50780 +BBX 14 16 0 -2 +BITMAP +0024 +3C24 +4224 +8124 +8124 +8124 +8124 +423C +3C24 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniC65D +ENCODING 50781 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC65E +ENCODING 50782 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC65F +ENCODING 50783 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC660 +ENCODING 50784 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC661 +ENCODING 50785 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC662 +ENCODING 50786 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC663 +ENCODING 50787 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC664 +ENCODING 50788 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC665 +ENCODING 50789 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC666 +ENCODING 50790 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC667 +ENCODING 50791 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC668 +ENCODING 50792 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC669 +ENCODING 50793 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC66A +ENCODING 50794 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC66B +ENCODING 50795 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC66C +ENCODING 50796 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC66D +ENCODING 50797 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC66E +ENCODING 50798 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC66F +ENCODING 50799 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC670 +ENCODING 50800 +BBX 15 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC671 +ENCODING 50801 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC672 +ENCODING 50802 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC673 +ENCODING 50803 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC674 +ENCODING 50804 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC675 +ENCODING 50805 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC676 +ENCODING 50806 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC677 +ENCODING 50807 +BBX 14 16 0 -2 +BITMAP +0024 +3E24 +4124 +4124 +3E3C +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC678 +ENCODING 50808 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +8108 +4208 +3C08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC679 +ENCODING 50809 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC67A +ENCODING 50810 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC67B +ENCODING 50811 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC67C +ENCODING 50812 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC67D +ENCODING 50813 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC67E +ENCODING 50814 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC67F +ENCODING 50815 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC680 +ENCODING 50816 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC681 +ENCODING 50817 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC682 +ENCODING 50818 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC683 +ENCODING 50819 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC684 +ENCODING 50820 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC685 +ENCODING 50821 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC686 +ENCODING 50822 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC687 +ENCODING 50823 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC688 +ENCODING 50824 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC689 +ENCODING 50825 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC68A +ENCODING 50826 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC68B +ENCODING 50827 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC68C +ENCODING 50828 +BBX 14 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC68D +ENCODING 50829 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC68E +ENCODING 50830 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC68F +ENCODING 50831 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC690 +ENCODING 50832 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC691 +ENCODING 50833 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC692 +ENCODING 50834 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC693 +ENCODING 50835 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC694 +ENCODING 50836 +BBX 15 13 0 0 +BITMAP +0FE0 +1010 +2008 +2008 +2008 +2008 +1010 +0FE0 +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniC695 +ENCODING 50837 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC696 +ENCODING 50838 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC697 +ENCODING 50839 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC698 +ENCODING 50840 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC699 +ENCODING 50841 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC69A +ENCODING 50842 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC69B +ENCODING 50843 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC69C +ENCODING 50844 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC69D +ENCODING 50845 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC69E +ENCODING 50846 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC69F +ENCODING 50847 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC6A0 +ENCODING 50848 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC6A1 +ENCODING 50849 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC6A2 +ENCODING 50850 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC6A3 +ENCODING 50851 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC6A4 +ENCODING 50852 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC6A5 +ENCODING 50853 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC6A6 +ENCODING 50854 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC6A7 +ENCODING 50855 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC6A8 +ENCODING 50856 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC6A9 +ENCODING 50857 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC6AA +ENCODING 50858 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC6AB +ENCODING 50859 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC6AC +ENCODING 50860 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC6AD +ENCODING 50861 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC6AE +ENCODING 50862 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC6AF +ENCODING 50863 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC6B0 +ENCODING 50864 +BBX 15 15 0 -2 +BITMAP +0FE0 +1010 +2008 +2008 +2008 +1010 +0FE0 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniC6B1 +ENCODING 50865 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC6B2 +ENCODING 50866 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC6B3 +ENCODING 50867 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC6B4 +ENCODING 50868 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC6B5 +ENCODING 50869 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC6B6 +ENCODING 50870 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC6B7 +ENCODING 50871 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC6B8 +ENCODING 50872 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC6B9 +ENCODING 50873 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC6BA +ENCODING 50874 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC6BB +ENCODING 50875 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC6BC +ENCODING 50876 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC6BD +ENCODING 50877 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC6BE +ENCODING 50878 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC6BF +ENCODING 50879 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC6C0 +ENCODING 50880 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC6C1 +ENCODING 50881 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC6C2 +ENCODING 50882 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC6C3 +ENCODING 50883 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC6C4 +ENCODING 50884 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC6C5 +ENCODING 50885 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC6C6 +ENCODING 50886 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC6C7 +ENCODING 50887 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC6C8 +ENCODING 50888 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC6C9 +ENCODING 50889 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC6CA +ENCODING 50890 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC6CB +ENCODING 50891 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC6CC +ENCODING 50892 +BBX 13 16 0 -2 +BITMAP +0008 +1C08 +2208 +4108 +4108 +4108 +2208 +1C08 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniC6CD +ENCODING 50893 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC6CE +ENCODING 50894 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC6CF +ENCODING 50895 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC6D0 +ENCODING 50896 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC6D1 +ENCODING 50897 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC6D2 +ENCODING 50898 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC6D3 +ENCODING 50899 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC6D4 +ENCODING 50900 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC6D5 +ENCODING 50901 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC6D6 +ENCODING 50902 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC6D7 +ENCODING 50903 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC6D8 +ENCODING 50904 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC6D9 +ENCODING 50905 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC6DA +ENCODING 50906 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC6DB +ENCODING 50907 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC6DC +ENCODING 50908 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC6DD +ENCODING 50909 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC6DE +ENCODING 50910 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC6DF +ENCODING 50911 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC6E0 +ENCODING 50912 +BBX 14 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC6E1 +ENCODING 50913 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC6E2 +ENCODING 50914 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC6E3 +ENCODING 50915 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC6E4 +ENCODING 50916 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC6E5 +ENCODING 50917 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC6E6 +ENCODING 50918 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC6E7 +ENCODING 50919 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC6E8 +ENCODING 50920 +BBX 14 16 0 -2 +BITMAP +0024 +1C24 +2224 +4124 +4124 +4124 +2224 +1C24 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniC6E9 +ENCODING 50921 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC6EA +ENCODING 50922 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC6EB +ENCODING 50923 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC6EC +ENCODING 50924 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC6ED +ENCODING 50925 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC6EE +ENCODING 50926 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC6EF +ENCODING 50927 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC6F0 +ENCODING 50928 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC6F1 +ENCODING 50929 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC6F2 +ENCODING 50930 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC6F3 +ENCODING 50931 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC6F4 +ENCODING 50932 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC6F5 +ENCODING 50933 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC6F6 +ENCODING 50934 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC6F7 +ENCODING 50935 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC6F8 +ENCODING 50936 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC6F9 +ENCODING 50937 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC6FA +ENCODING 50938 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC6FB +ENCODING 50939 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC6FC +ENCODING 50940 +BBX 15 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC6FD +ENCODING 50941 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC6FE +ENCODING 50942 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC6FF +ENCODING 50943 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC700 +ENCODING 50944 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC701 +ENCODING 50945 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC702 +ENCODING 50946 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC703 +ENCODING 50947 +BBX 14 16 0 -2 +BITMAP +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC704 +ENCODING 50948 +BBX 13 16 0 -2 +BITMAP +0008 +1C08 +2208 +4108 +4108 +4108 +2208 +1C08 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniC705 +ENCODING 50949 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC706 +ENCODING 50950 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC707 +ENCODING 50951 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC708 +ENCODING 50952 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC709 +ENCODING 50953 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC70A +ENCODING 50954 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC70B +ENCODING 50955 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC70C +ENCODING 50956 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC70D +ENCODING 50957 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC70E +ENCODING 50958 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC70F +ENCODING 50959 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC710 +ENCODING 50960 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC711 +ENCODING 50961 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC712 +ENCODING 50962 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC713 +ENCODING 50963 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC714 +ENCODING 50964 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC715 +ENCODING 50965 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC716 +ENCODING 50966 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC717 +ENCODING 50967 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC718 +ENCODING 50968 +BBX 14 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC719 +ENCODING 50969 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC71A +ENCODING 50970 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC71B +ENCODING 50971 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC71C +ENCODING 50972 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC71D +ENCODING 50973 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC71E +ENCODING 50974 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC71F +ENCODING 50975 +BBX 13 16 0 -2 +BITMAP +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC720 +ENCODING 50976 +BBX 15 15 0 -2 +BITMAP +0FE0 +1010 +2008 +2008 +2008 +1010 +0FE0 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniC721 +ENCODING 50977 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC722 +ENCODING 50978 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC723 +ENCODING 50979 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC724 +ENCODING 50980 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC725 +ENCODING 50981 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC726 +ENCODING 50982 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC727 +ENCODING 50983 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC728 +ENCODING 50984 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC729 +ENCODING 50985 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC72A +ENCODING 50986 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC72B +ENCODING 50987 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC72C +ENCODING 50988 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC72D +ENCODING 50989 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC72E +ENCODING 50990 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC72F +ENCODING 50991 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC730 +ENCODING 50992 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC731 +ENCODING 50993 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC732 +ENCODING 50994 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC733 +ENCODING 50995 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC734 +ENCODING 50996 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC735 +ENCODING 50997 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC736 +ENCODING 50998 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC737 +ENCODING 50999 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC738 +ENCODING 51000 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC739 +ENCODING 51001 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC73A +ENCODING 51002 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC73B +ENCODING 51003 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC73C +ENCODING 51004 +BBX 15 13 0 0 +BITMAP +0FE0 +1010 +2008 +2008 +2008 +2008 +1010 +0FE0 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniC73D +ENCODING 51005 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC73E +ENCODING 51006 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC73F +ENCODING 51007 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC740 +ENCODING 51008 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC741 +ENCODING 51009 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC742 +ENCODING 51010 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC743 +ENCODING 51011 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC744 +ENCODING 51012 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC745 +ENCODING 51013 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC746 +ENCODING 51014 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC747 +ENCODING 51015 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC748 +ENCODING 51016 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC749 +ENCODING 51017 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC74A +ENCODING 51018 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC74B +ENCODING 51019 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC74C +ENCODING 51020 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC74D +ENCODING 51021 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC74E +ENCODING 51022 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC74F +ENCODING 51023 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC750 +ENCODING 51024 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC751 +ENCODING 51025 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC752 +ENCODING 51026 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC753 +ENCODING 51027 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC754 +ENCODING 51028 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC755 +ENCODING 51029 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC756 +ENCODING 51030 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC757 +ENCODING 51031 +BBX 15 15 0 -2 +BITMAP +1FF0 +2008 +2008 +2008 +1FF0 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC758 +ENCODING 51032 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +8108 +4208 +3C08 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC759 +ENCODING 51033 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC75A +ENCODING 51034 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC75B +ENCODING 51035 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC75C +ENCODING 51036 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC75D +ENCODING 51037 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC75E +ENCODING 51038 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC75F +ENCODING 51039 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC760 +ENCODING 51040 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC761 +ENCODING 51041 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC762 +ENCODING 51042 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC763 +ENCODING 51043 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC764 +ENCODING 51044 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC765 +ENCODING 51045 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC766 +ENCODING 51046 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC767 +ENCODING 51047 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC768 +ENCODING 51048 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC769 +ENCODING 51049 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC76A +ENCODING 51050 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC76B +ENCODING 51051 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC76C +ENCODING 51052 +BBX 14 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC76D +ENCODING 51053 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC76E +ENCODING 51054 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC76F +ENCODING 51055 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC770 +ENCODING 51056 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC771 +ENCODING 51057 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC772 +ENCODING 51058 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC773 +ENCODING 51059 +BBX 13 16 0 -2 +BITMAP +0008 +3E08 +4108 +4108 +3E08 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC774 +ENCODING 51060 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +8108 +8108 +8108 +8108 +8108 +8108 +4208 +3C08 +0008 +0008 +ENDCHAR +STARTCHAR uniC775 +ENCODING 51061 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC776 +ENCODING 51062 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC777 +ENCODING 51063 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC778 +ENCODING 51064 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC779 +ENCODING 51065 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC77A +ENCODING 51066 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC77B +ENCODING 51067 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC77C +ENCODING 51068 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC77D +ENCODING 51069 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC77E +ENCODING 51070 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC77F +ENCODING 51071 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC780 +ENCODING 51072 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC781 +ENCODING 51073 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC782 +ENCODING 51074 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC783 +ENCODING 51075 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC784 +ENCODING 51076 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC785 +ENCODING 51077 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC786 +ENCODING 51078 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC787 +ENCODING 51079 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC788 +ENCODING 51080 +BBX 14 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC789 +ENCODING 51081 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC78A +ENCODING 51082 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC78B +ENCODING 51083 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC78C +ENCODING 51084 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC78D +ENCODING 51085 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC78E +ENCODING 51086 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC78F +ENCODING 51087 +BBX 13 16 0 -2 +BITMAP +0008 +3C08 +4208 +8108 +8108 +8108 +4208 +3C08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC790 +ENCODING 51088 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +0808 +0808 +0808 +140E +1408 +1408 +2208 +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniC791 +ENCODING 51089 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC792 +ENCODING 51090 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC793 +ENCODING 51091 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC794 +ENCODING 51092 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +220E +4108 +8088 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC795 +ENCODING 51093 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC796 +ENCODING 51094 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC797 +ENCODING 51095 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC798 +ENCODING 51096 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC799 +ENCODING 51097 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC79A +ENCODING 51098 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC79B +ENCODING 51099 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC79C +ENCODING 51100 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC79D +ENCODING 51101 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC79E +ENCODING 51102 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC79F +ENCODING 51103 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC7A0 +ENCODING 51104 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC7A1 +ENCODING 51105 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC7A2 +ENCODING 51106 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC7A3 +ENCODING 51107 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC7A4 +ENCODING 51108 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC7A5 +ENCODING 51109 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC7A6 +ENCODING 51110 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC7A7 +ENCODING 51111 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC7A8 +ENCODING 51112 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC7A9 +ENCODING 51113 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC7AA +ENCODING 51114 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC7AB +ENCODING 51115 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +140E +2208 +4108 +8088 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC7AC +ENCODING 51116 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +0824 +0824 +0824 +143C +1424 +1424 +2224 +2224 +4124 +80A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC7AD +ENCODING 51117 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC7AE +ENCODING 51118 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC7AF +ENCODING 51119 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC7B0 +ENCODING 51120 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC7B1 +ENCODING 51121 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC7B2 +ENCODING 51122 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC7B3 +ENCODING 51123 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC7B4 +ENCODING 51124 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC7B5 +ENCODING 51125 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC7B6 +ENCODING 51126 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC7B7 +ENCODING 51127 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC7B8 +ENCODING 51128 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC7B9 +ENCODING 51129 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC7BA +ENCODING 51130 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC7BB +ENCODING 51131 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC7BC +ENCODING 51132 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC7BD +ENCODING 51133 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC7BE +ENCODING 51134 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC7BF +ENCODING 51135 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC7C0 +ENCODING 51136 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC7C1 +ENCODING 51137 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC7C2 +ENCODING 51138 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC7C3 +ENCODING 51139 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC7C4 +ENCODING 51140 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC7C5 +ENCODING 51141 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC7C6 +ENCODING 51142 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC7C7 +ENCODING 51143 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +143C +2224 +4124 +80A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC7C8 +ENCODING 51144 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +0808 +080E +0808 +1408 +1408 +1408 +220E +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniC7C9 +ENCODING 51145 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC7CA +ENCODING 51146 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC7CB +ENCODING 51147 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC7CC +ENCODING 51148 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +080E +1408 +2208 +4108 +808E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC7CD +ENCODING 51149 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC7CE +ENCODING 51150 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC7CF +ENCODING 51151 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC7D0 +ENCODING 51152 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC7D1 +ENCODING 51153 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC7D2 +ENCODING 51154 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC7D3 +ENCODING 51155 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC7D4 +ENCODING 51156 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC7D5 +ENCODING 51157 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC7D6 +ENCODING 51158 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC7D7 +ENCODING 51159 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC7D8 +ENCODING 51160 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC7D9 +ENCODING 51161 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC7DA +ENCODING 51162 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC7DB +ENCODING 51163 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC7DC +ENCODING 51164 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC7DD +ENCODING 51165 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC7DE +ENCODING 51166 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC7DF +ENCODING 51167 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC7E0 +ENCODING 51168 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC7E1 +ENCODING 51169 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC7E2 +ENCODING 51170 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC7E3 +ENCODING 51171 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +080E +0808 +1408 +220E +4108 +8088 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC7E4 +ENCODING 51172 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +083C +0824 +0824 +1424 +1424 +143C +2224 +2224 +4124 +80A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC7E5 +ENCODING 51173 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC7E6 +ENCODING 51174 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC7E7 +ENCODING 51175 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC7E8 +ENCODING 51176 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +2224 +413C +80A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC7E9 +ENCODING 51177 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC7EA +ENCODING 51178 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC7EB +ENCODING 51179 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC7EC +ENCODING 51180 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC7ED +ENCODING 51181 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC7EE +ENCODING 51182 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC7EF +ENCODING 51183 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC7F0 +ENCODING 51184 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC7F1 +ENCODING 51185 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC7F2 +ENCODING 51186 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC7F3 +ENCODING 51187 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC7F4 +ENCODING 51188 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC7F5 +ENCODING 51189 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC7F6 +ENCODING 51190 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC7F7 +ENCODING 51191 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC7F8 +ENCODING 51192 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC7F9 +ENCODING 51193 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC7FA +ENCODING 51194 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC7FB +ENCODING 51195 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC7FC +ENCODING 51196 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC7FD +ENCODING 51197 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC7FE +ENCODING 51198 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC7FF +ENCODING 51199 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +083C +0824 +1424 +223C +4124 +80A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC800 +ENCODING 51200 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +0808 +0808 +0808 +1478 +1408 +1408 +2208 +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniC801 +ENCODING 51201 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC802 +ENCODING 51202 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC803 +ENCODING 51203 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC804 +ENCODING 51204 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC805 +ENCODING 51205 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC806 +ENCODING 51206 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC807 +ENCODING 51207 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC808 +ENCODING 51208 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC809 +ENCODING 51209 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC80A +ENCODING 51210 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC80B +ENCODING 51211 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC80C +ENCODING 51212 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC80D +ENCODING 51213 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC80E +ENCODING 51214 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC80F +ENCODING 51215 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC810 +ENCODING 51216 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC811 +ENCODING 51217 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC812 +ENCODING 51218 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC813 +ENCODING 51219 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC814 +ENCODING 51220 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC815 +ENCODING 51221 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC816 +ENCODING 51222 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC817 +ENCODING 51223 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC818 +ENCODING 51224 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC819 +ENCODING 51225 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC81A +ENCODING 51226 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC81B +ENCODING 51227 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1478 +2208 +4108 +8088 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC81C +ENCODING 51228 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +0824 +0824 +09E4 +1424 +1424 +1424 +2224 +2224 +4124 +80A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC81D +ENCODING 51229 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC81E +ENCODING 51230 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC81F +ENCODING 51231 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC820 +ENCODING 51232 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC821 +ENCODING 51233 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC822 +ENCODING 51234 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC823 +ENCODING 51235 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC824 +ENCODING 51236 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC825 +ENCODING 51237 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC826 +ENCODING 51238 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC827 +ENCODING 51239 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC828 +ENCODING 51240 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC829 +ENCODING 51241 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC82A +ENCODING 51242 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC82B +ENCODING 51243 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC82C +ENCODING 51244 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC82D +ENCODING 51245 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC82E +ENCODING 51246 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC82F +ENCODING 51247 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC830 +ENCODING 51248 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC831 +ENCODING 51249 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC832 +ENCODING 51250 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC833 +ENCODING 51251 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC834 +ENCODING 51252 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC835 +ENCODING 51253 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC836 +ENCODING 51254 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC837 +ENCODING 51255 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +14E4 +2224 +4124 +80A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC838 +ENCODING 51256 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +0808 +0878 +0808 +1408 +1408 +1478 +2208 +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniC839 +ENCODING 51257 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC83A +ENCODING 51258 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC83B +ENCODING 51259 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC83C +ENCODING 51260 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC83D +ENCODING 51261 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC83E +ENCODING 51262 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC83F +ENCODING 51263 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC840 +ENCODING 51264 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC841 +ENCODING 51265 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC842 +ENCODING 51266 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC843 +ENCODING 51267 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC844 +ENCODING 51268 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC845 +ENCODING 51269 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC846 +ENCODING 51270 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC847 +ENCODING 51271 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC848 +ENCODING 51272 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC849 +ENCODING 51273 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC84A +ENCODING 51274 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC84B +ENCODING 51275 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC84C +ENCODING 51276 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC84D +ENCODING 51277 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC84E +ENCODING 51278 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC84F +ENCODING 51279 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC850 +ENCODING 51280 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC851 +ENCODING 51281 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC852 +ENCODING 51282 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC853 +ENCODING 51283 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0878 +1408 +2208 +4178 +8088 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC854 +ENCODING 51284 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +0824 +09E4 +0824 +1424 +1424 +15E4 +2224 +2224 +4124 +80A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC855 +ENCODING 51285 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC856 +ENCODING 51286 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC857 +ENCODING 51287 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC858 +ENCODING 51288 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC859 +ENCODING 51289 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC85A +ENCODING 51290 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC85B +ENCODING 51291 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC85C +ENCODING 51292 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC85D +ENCODING 51293 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC85E +ENCODING 51294 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC85F +ENCODING 51295 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC860 +ENCODING 51296 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC861 +ENCODING 51297 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC862 +ENCODING 51298 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC863 +ENCODING 51299 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC864 +ENCODING 51300 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC865 +ENCODING 51301 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC866 +ENCODING 51302 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC867 +ENCODING 51303 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC868 +ENCODING 51304 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC869 +ENCODING 51305 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC86A +ENCODING 51306 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC86B +ENCODING 51307 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC86C +ENCODING 51308 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC86D +ENCODING 51309 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC86E +ENCODING 51310 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC86F +ENCODING 51311 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +08E4 +1424 +22E4 +4124 +80A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC870 +ENCODING 51312 +BBX 15 13 0 0 +BITMAP +3FF8 +0100 +0100 +0280 +0440 +0820 +1010 +600C +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniC871 +ENCODING 51313 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC872 +ENCODING 51314 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC873 +ENCODING 51315 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC874 +ENCODING 51316 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC875 +ENCODING 51317 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC876 +ENCODING 51318 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC877 +ENCODING 51319 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC878 +ENCODING 51320 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC879 +ENCODING 51321 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC87A +ENCODING 51322 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC87B +ENCODING 51323 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC87C +ENCODING 51324 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC87D +ENCODING 51325 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC87E +ENCODING 51326 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC87F +ENCODING 51327 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC880 +ENCODING 51328 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC881 +ENCODING 51329 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC882 +ENCODING 51330 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC883 +ENCODING 51331 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC884 +ENCODING 51332 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC885 +ENCODING 51333 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC886 +ENCODING 51334 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC887 +ENCODING 51335 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC888 +ENCODING 51336 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC889 +ENCODING 51337 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC88A +ENCODING 51338 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC88B +ENCODING 51339 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC88C +ENCODING 51340 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +0808 +1408 +1408 +220E +4108 +8888 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC88D +ENCODING 51341 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC88E +ENCODING 51342 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC88F +ENCODING 51343 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC890 +ENCODING 51344 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC891 +ENCODING 51345 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC892 +ENCODING 51346 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC893 +ENCODING 51347 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC894 +ENCODING 51348 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC895 +ENCODING 51349 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC896 +ENCODING 51350 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC897 +ENCODING 51351 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC898 +ENCODING 51352 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC899 +ENCODING 51353 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC89A +ENCODING 51354 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC89B +ENCODING 51355 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC89C +ENCODING 51356 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC89D +ENCODING 51357 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC89E +ENCODING 51358 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC89F +ENCODING 51359 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC8A0 +ENCODING 51360 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC8A1 +ENCODING 51361 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC8A2 +ENCODING 51362 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC8A3 +ENCODING 51363 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC8A4 +ENCODING 51364 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC8A5 +ENCODING 51365 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC8A6 +ENCODING 51366 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC8A7 +ENCODING 51367 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC8A8 +ENCODING 51368 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +0824 +1424 +1424 +223C +4124 +88A4 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniC8A9 +ENCODING 51369 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC8AA +ENCODING 51370 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC8AB +ENCODING 51371 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC8AC +ENCODING 51372 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC8AD +ENCODING 51373 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC8AE +ENCODING 51374 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC8AF +ENCODING 51375 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC8B0 +ENCODING 51376 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC8B1 +ENCODING 51377 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC8B2 +ENCODING 51378 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC8B3 +ENCODING 51379 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC8B4 +ENCODING 51380 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC8B5 +ENCODING 51381 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC8B6 +ENCODING 51382 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC8B7 +ENCODING 51383 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC8B8 +ENCODING 51384 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC8B9 +ENCODING 51385 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC8BA +ENCODING 51386 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC8BB +ENCODING 51387 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC8BC +ENCODING 51388 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC8BD +ENCODING 51389 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC8BE +ENCODING 51390 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC8BF +ENCODING 51391 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC8C0 +ENCODING 51392 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC8C1 +ENCODING 51393 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC8C2 +ENCODING 51394 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC8C3 +ENCODING 51395 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC8C4 +ENCODING 51396 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +0808 +1408 +1408 +2208 +4108 +8888 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC8C5 +ENCODING 51397 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC8C6 +ENCODING 51398 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC8C7 +ENCODING 51399 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC8C8 +ENCODING 51400 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC8C9 +ENCODING 51401 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC8CA +ENCODING 51402 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC8CB +ENCODING 51403 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC8CC +ENCODING 51404 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC8CD +ENCODING 51405 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC8CE +ENCODING 51406 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC8CF +ENCODING 51407 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC8D0 +ENCODING 51408 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC8D1 +ENCODING 51409 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC8D2 +ENCODING 51410 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC8D3 +ENCODING 51411 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC8D4 +ENCODING 51412 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC8D5 +ENCODING 51413 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC8D6 +ENCODING 51414 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC8D7 +ENCODING 51415 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC8D8 +ENCODING 51416 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC8D9 +ENCODING 51417 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC8DA +ENCODING 51418 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC8DB +ENCODING 51419 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC8DC +ENCODING 51420 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC8DD +ENCODING 51421 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC8DE +ENCODING 51422 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC8DF +ENCODING 51423 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC8E0 +ENCODING 51424 +BBX 15 13 0 0 +BITMAP +3FF8 +0100 +0100 +0280 +0440 +0820 +1010 +600C +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniC8E1 +ENCODING 51425 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC8E2 +ENCODING 51426 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC8E3 +ENCODING 51427 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC8E4 +ENCODING 51428 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC8E5 +ENCODING 51429 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC8E6 +ENCODING 51430 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC8E7 +ENCODING 51431 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC8E8 +ENCODING 51432 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC8E9 +ENCODING 51433 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC8EA +ENCODING 51434 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC8EB +ENCODING 51435 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC8EC +ENCODING 51436 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC8ED +ENCODING 51437 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC8EE +ENCODING 51438 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC8EF +ENCODING 51439 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC8F0 +ENCODING 51440 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC8F1 +ENCODING 51441 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC8F2 +ENCODING 51442 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC8F3 +ENCODING 51443 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC8F4 +ENCODING 51444 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC8F5 +ENCODING 51445 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC8F6 +ENCODING 51446 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC8F7 +ENCODING 51447 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC8F8 +ENCODING 51448 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC8F9 +ENCODING 51449 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC8FA +ENCODING 51450 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC8FB +ENCODING 51451 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC8FC +ENCODING 51452 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0440 +1830 +600C +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniC8FD +ENCODING 51453 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC8FE +ENCODING 51454 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC8FF +ENCODING 51455 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC900 +ENCODING 51456 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC901 +ENCODING 51457 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC902 +ENCODING 51458 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC903 +ENCODING 51459 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC904 +ENCODING 51460 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC905 +ENCODING 51461 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC906 +ENCODING 51462 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC907 +ENCODING 51463 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC908 +ENCODING 51464 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC909 +ENCODING 51465 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC90A +ENCODING 51466 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC90B +ENCODING 51467 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC90C +ENCODING 51468 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC90D +ENCODING 51469 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC90E +ENCODING 51470 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC90F +ENCODING 51471 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC910 +ENCODING 51472 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC911 +ENCODING 51473 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC912 +ENCODING 51474 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC913 +ENCODING 51475 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC914 +ENCODING 51476 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC915 +ENCODING 51477 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC916 +ENCODING 51478 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC917 +ENCODING 51479 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC918 +ENCODING 51480 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniC919 +ENCODING 51481 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC91A +ENCODING 51482 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC91B +ENCODING 51483 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC91C +ENCODING 51484 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC91D +ENCODING 51485 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC91E +ENCODING 51486 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC91F +ENCODING 51487 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC920 +ENCODING 51488 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC921 +ENCODING 51489 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC922 +ENCODING 51490 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC923 +ENCODING 51491 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC924 +ENCODING 51492 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC925 +ENCODING 51493 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC926 +ENCODING 51494 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC927 +ENCODING 51495 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC928 +ENCODING 51496 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC929 +ENCODING 51497 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC92A +ENCODING 51498 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC92B +ENCODING 51499 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC92C +ENCODING 51500 +BBX 14 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC92D +ENCODING 51501 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC92E +ENCODING 51502 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC92F +ENCODING 51503 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC930 +ENCODING 51504 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC931 +ENCODING 51505 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC932 +ENCODING 51506 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC933 +ENCODING 51507 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC934 +ENCODING 51508 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +0824 +0824 +1424 +2224 +C1A4 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniC935 +ENCODING 51509 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC936 +ENCODING 51510 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC937 +ENCODING 51511 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC938 +ENCODING 51512 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC939 +ENCODING 51513 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC93A +ENCODING 51514 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC93B +ENCODING 51515 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC93C +ENCODING 51516 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC93D +ENCODING 51517 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniC93E +ENCODING 51518 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC93F +ENCODING 51519 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniC940 +ENCODING 51520 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC941 +ENCODING 51521 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniC942 +ENCODING 51522 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniC943 +ENCODING 51523 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC944 +ENCODING 51524 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC945 +ENCODING 51525 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniC946 +ENCODING 51526 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniC947 +ENCODING 51527 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC948 +ENCODING 51528 +BBX 15 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniC949 +ENCODING 51529 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniC94A +ENCODING 51530 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC94B +ENCODING 51531 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniC94C +ENCODING 51532 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniC94D +ENCODING 51533 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC94E +ENCODING 51534 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniC94F +ENCODING 51535 +BBX 14 16 0 -2 +BITMAP +FFA4 +0824 +3624 +C1A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniC950 +ENCODING 51536 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniC951 +ENCODING 51537 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC952 +ENCODING 51538 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC953 +ENCODING 51539 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC954 +ENCODING 51540 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC955 +ENCODING 51541 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC956 +ENCODING 51542 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC957 +ENCODING 51543 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC958 +ENCODING 51544 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC959 +ENCODING 51545 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC95A +ENCODING 51546 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC95B +ENCODING 51547 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC95C +ENCODING 51548 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC95D +ENCODING 51549 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC95E +ENCODING 51550 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC95F +ENCODING 51551 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC960 +ENCODING 51552 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC961 +ENCODING 51553 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC962 +ENCODING 51554 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC963 +ENCODING 51555 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC964 +ENCODING 51556 +BBX 14 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC965 +ENCODING 51557 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC966 +ENCODING 51558 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC967 +ENCODING 51559 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC968 +ENCODING 51560 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC969 +ENCODING 51561 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC96A +ENCODING 51562 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC96B +ENCODING 51563 +BBX 13 16 0 -2 +BITMAP +FF88 +0808 +3608 +C188 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC96C +ENCODING 51564 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0440 +1830 +600C +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniC96D +ENCODING 51565 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC96E +ENCODING 51566 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC96F +ENCODING 51567 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC970 +ENCODING 51568 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC971 +ENCODING 51569 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC972 +ENCODING 51570 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC973 +ENCODING 51571 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC974 +ENCODING 51572 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC975 +ENCODING 51573 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC976 +ENCODING 51574 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC977 +ENCODING 51575 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC978 +ENCODING 51576 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC979 +ENCODING 51577 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC97A +ENCODING 51578 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC97B +ENCODING 51579 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC97C +ENCODING 51580 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC97D +ENCODING 51581 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC97E +ENCODING 51582 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC97F +ENCODING 51583 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC980 +ENCODING 51584 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC981 +ENCODING 51585 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC982 +ENCODING 51586 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC983 +ENCODING 51587 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC984 +ENCODING 51588 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC985 +ENCODING 51589 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC986 +ENCODING 51590 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC987 +ENCODING 51591 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC988 +ENCODING 51592 +BBX 15 13 0 0 +BITMAP +3FF8 +0100 +0100 +0280 +0440 +0820 +1010 +600C +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniC989 +ENCODING 51593 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC98A +ENCODING 51594 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC98B +ENCODING 51595 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC98C +ENCODING 51596 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC98D +ENCODING 51597 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC98E +ENCODING 51598 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC98F +ENCODING 51599 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC990 +ENCODING 51600 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC991 +ENCODING 51601 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC992 +ENCODING 51602 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC993 +ENCODING 51603 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC994 +ENCODING 51604 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC995 +ENCODING 51605 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC996 +ENCODING 51606 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC997 +ENCODING 51607 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC998 +ENCODING 51608 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC999 +ENCODING 51609 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniC99A +ENCODING 51610 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC99B +ENCODING 51611 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC99C +ENCODING 51612 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC99D +ENCODING 51613 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC99E +ENCODING 51614 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC99F +ENCODING 51615 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC9A0 +ENCODING 51616 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC9A1 +ENCODING 51617 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniC9A2 +ENCODING 51618 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC9A3 +ENCODING 51619 +BBX 15 15 0 -2 +BITMAP +3FF8 +0100 +0280 +0C60 +3018 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC9A4 +ENCODING 51620 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +0808 +1408 +1408 +2208 +4108 +8088 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniC9A5 +ENCODING 51621 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC9A6 +ENCODING 51622 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC9A7 +ENCODING 51623 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC9A8 +ENCODING 51624 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC9A9 +ENCODING 51625 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC9AA +ENCODING 51626 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC9AB +ENCODING 51627 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC9AC +ENCODING 51628 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC9AD +ENCODING 51629 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC9AE +ENCODING 51630 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC9AF +ENCODING 51631 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC9B0 +ENCODING 51632 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC9B1 +ENCODING 51633 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC9B2 +ENCODING 51634 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC9B3 +ENCODING 51635 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC9B4 +ENCODING 51636 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC9B5 +ENCODING 51637 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC9B6 +ENCODING 51638 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC9B7 +ENCODING 51639 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC9B8 +ENCODING 51640 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC9B9 +ENCODING 51641 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC9BA +ENCODING 51642 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC9BB +ENCODING 51643 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC9BC +ENCODING 51644 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC9BD +ENCODING 51645 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC9BE +ENCODING 51646 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC9BF +ENCODING 51647 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC9C0 +ENCODING 51648 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +0808 +0808 +0808 +1408 +1408 +1408 +2208 +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniC9C1 +ENCODING 51649 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC9C2 +ENCODING 51650 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC9C3 +ENCODING 51651 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC9C4 +ENCODING 51652 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC9C5 +ENCODING 51653 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC9C6 +ENCODING 51654 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC9C7 +ENCODING 51655 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC9C8 +ENCODING 51656 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC9C9 +ENCODING 51657 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC9CA +ENCODING 51658 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC9CB +ENCODING 51659 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC9CC +ENCODING 51660 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC9CD +ENCODING 51661 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC9CE +ENCODING 51662 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC9CF +ENCODING 51663 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC9D0 +ENCODING 51664 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC9D1 +ENCODING 51665 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC9D2 +ENCODING 51666 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC9D3 +ENCODING 51667 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC9D4 +ENCODING 51668 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC9D5 +ENCODING 51669 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC9D6 +ENCODING 51670 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC9D7 +ENCODING 51671 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC9D8 +ENCODING 51672 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC9D9 +ENCODING 51673 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC9DA +ENCODING 51674 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC9DB +ENCODING 51675 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC9DC +ENCODING 51676 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +550E +5508 +5508 +5508 +8888 +8888 +8888 +0008 +0008 +ENDCHAR +STARTCHAR uniC9DD +ENCODING 51677 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniC9DE +ENCODING 51678 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniC9DF +ENCODING 51679 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniC9E0 +ENCODING 51680 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +550E +8888 +8888 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC9E1 +ENCODING 51681 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC9E2 +ENCODING 51682 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC9E3 +ENCODING 51683 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC9E4 +ENCODING 51684 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC9E5 +ENCODING 51685 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniC9E6 +ENCODING 51686 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC9E7 +ENCODING 51687 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniC9E8 +ENCODING 51688 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniC9E9 +ENCODING 51689 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniC9EA +ENCODING 51690 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniC9EB +ENCODING 51691 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniC9EC +ENCODING 51692 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC9ED +ENCODING 51693 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniC9EE +ENCODING 51694 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniC9EF +ENCODING 51695 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC9F0 +ENCODING 51696 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniC9F1 +ENCODING 51697 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniC9F2 +ENCODING 51698 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC9F3 +ENCODING 51699 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniC9F4 +ENCODING 51700 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniC9F5 +ENCODING 51701 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniC9F6 +ENCODING 51702 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniC9F7 +ENCODING 51703 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +550E +5508 +8888 +8888 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniC9F8 +ENCODING 51704 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +2224 +2224 +2224 +553C +5524 +5524 +5524 +88A4 +88A4 +88A4 +0024 +0024 +ENDCHAR +STARTCHAR uniC9F9 +ENCODING 51705 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniC9FA +ENCODING 51706 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniC9FB +ENCODING 51707 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniC9FC +ENCODING 51708 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniC9FD +ENCODING 51709 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniC9FE +ENCODING 51710 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniC9FF +ENCODING 51711 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCA00 +ENCODING 51712 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCA01 +ENCODING 51713 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCA02 +ENCODING 51714 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCA03 +ENCODING 51715 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCA04 +ENCODING 51716 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCA05 +ENCODING 51717 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCA06 +ENCODING 51718 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCA07 +ENCODING 51719 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCA08 +ENCODING 51720 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCA09 +ENCODING 51721 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCA0A +ENCODING 51722 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCA0B +ENCODING 51723 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCA0C +ENCODING 51724 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCA0D +ENCODING 51725 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCA0E +ENCODING 51726 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCA0F +ENCODING 51727 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCA10 +ENCODING 51728 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCA11 +ENCODING 51729 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCA12 +ENCODING 51730 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCA13 +ENCODING 51731 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +553C +5524 +88A4 +88A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCA14 +ENCODING 51732 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +220E +2208 +5508 +5508 +5508 +550E +8888 +8888 +8888 +0008 +0008 +ENDCHAR +STARTCHAR uniCA15 +ENCODING 51733 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCA16 +ENCODING 51734 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCA17 +ENCODING 51735 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCA18 +ENCODING 51736 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +220E +5508 +5508 +8888 +888E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCA19 +ENCODING 51737 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCA1A +ENCODING 51738 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCA1B +ENCODING 51739 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCA1C +ENCODING 51740 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCA1D +ENCODING 51741 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCA1E +ENCODING 51742 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCA1F +ENCODING 51743 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCA20 +ENCODING 51744 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCA21 +ENCODING 51745 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCA22 +ENCODING 51746 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCA23 +ENCODING 51747 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCA24 +ENCODING 51748 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCA25 +ENCODING 51749 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCA26 +ENCODING 51750 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCA27 +ENCODING 51751 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCA28 +ENCODING 51752 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCA29 +ENCODING 51753 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCA2A +ENCODING 51754 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCA2B +ENCODING 51755 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCA2C +ENCODING 51756 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCA2D +ENCODING 51757 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCA2E +ENCODING 51758 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCA2F +ENCODING 51759 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +5508 +550E +8888 +8888 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCA30 +ENCODING 51760 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +5524 +5524 +553C +5524 +88A4 +88A4 +88A4 +0024 +0024 +ENDCHAR +STARTCHAR uniCA31 +ENCODING 51761 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCA32 +ENCODING 51762 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCA33 +ENCODING 51763 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCA34 +ENCODING 51764 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +5524 +88BC +88A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCA35 +ENCODING 51765 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCA36 +ENCODING 51766 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCA37 +ENCODING 51767 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCA38 +ENCODING 51768 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCA39 +ENCODING 51769 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCA3A +ENCODING 51770 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCA3B +ENCODING 51771 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCA3C +ENCODING 51772 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCA3D +ENCODING 51773 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCA3E +ENCODING 51774 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCA3F +ENCODING 51775 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCA40 +ENCODING 51776 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCA41 +ENCODING 51777 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCA42 +ENCODING 51778 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCA43 +ENCODING 51779 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCA44 +ENCODING 51780 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCA45 +ENCODING 51781 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCA46 +ENCODING 51782 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCA47 +ENCODING 51783 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCA48 +ENCODING 51784 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCA49 +ENCODING 51785 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCA4A +ENCODING 51786 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCA4B +ENCODING 51787 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +5524 +553C +88A4 +88A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCA4C +ENCODING 51788 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +5578 +5508 +5508 +5508 +8888 +8888 +8888 +0008 +0008 +ENDCHAR +STARTCHAR uniCA4D +ENCODING 51789 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCA4E +ENCODING 51790 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCA4F +ENCODING 51791 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCA50 +ENCODING 51792 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCA51 +ENCODING 51793 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCA52 +ENCODING 51794 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCA53 +ENCODING 51795 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCA54 +ENCODING 51796 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCA55 +ENCODING 51797 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCA56 +ENCODING 51798 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCA57 +ENCODING 51799 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCA58 +ENCODING 51800 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCA59 +ENCODING 51801 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCA5A +ENCODING 51802 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCA5B +ENCODING 51803 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCA5C +ENCODING 51804 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCA5D +ENCODING 51805 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCA5E +ENCODING 51806 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCA5F +ENCODING 51807 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCA60 +ENCODING 51808 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCA61 +ENCODING 51809 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCA62 +ENCODING 51810 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCA63 +ENCODING 51811 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCA64 +ENCODING 51812 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCA65 +ENCODING 51813 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCA66 +ENCODING 51814 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCA67 +ENCODING 51815 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5578 +5508 +8888 +8888 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCA68 +ENCODING 51816 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +2224 +2224 +23E4 +5524 +5524 +5524 +5524 +88A4 +88A4 +88A4 +0024 +0024 +ENDCHAR +STARTCHAR uniCA69 +ENCODING 51817 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCA6A +ENCODING 51818 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCA6B +ENCODING 51819 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCA6C +ENCODING 51820 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCA6D +ENCODING 51821 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCA6E +ENCODING 51822 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCA6F +ENCODING 51823 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCA70 +ENCODING 51824 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCA71 +ENCODING 51825 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCA72 +ENCODING 51826 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCA73 +ENCODING 51827 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCA74 +ENCODING 51828 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCA75 +ENCODING 51829 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCA76 +ENCODING 51830 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCA77 +ENCODING 51831 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCA78 +ENCODING 51832 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCA79 +ENCODING 51833 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCA7A +ENCODING 51834 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCA7B +ENCODING 51835 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCA7C +ENCODING 51836 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCA7D +ENCODING 51837 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCA7E +ENCODING 51838 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCA7F +ENCODING 51839 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCA80 +ENCODING 51840 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCA81 +ENCODING 51841 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCA82 +ENCODING 51842 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCA83 +ENCODING 51843 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +55E4 +5524 +88A4 +88A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCA84 +ENCODING 51844 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2278 +2208 +5508 +5508 +5578 +5508 +8888 +8888 +8888 +0008 +0008 +ENDCHAR +STARTCHAR uniCA85 +ENCODING 51845 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCA86 +ENCODING 51846 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCA87 +ENCODING 51847 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCA88 +ENCODING 51848 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCA89 +ENCODING 51849 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCA8A +ENCODING 51850 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCA8B +ENCODING 51851 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCA8C +ENCODING 51852 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCA8D +ENCODING 51853 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCA8E +ENCODING 51854 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCA8F +ENCODING 51855 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCA90 +ENCODING 51856 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCA91 +ENCODING 51857 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCA92 +ENCODING 51858 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCA93 +ENCODING 51859 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCA94 +ENCODING 51860 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCA95 +ENCODING 51861 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCA96 +ENCODING 51862 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCA97 +ENCODING 51863 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCA98 +ENCODING 51864 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCA99 +ENCODING 51865 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCA9A +ENCODING 51866 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCA9B +ENCODING 51867 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCA9C +ENCODING 51868 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCA9D +ENCODING 51869 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCA9E +ENCODING 51870 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCA9F +ENCODING 51871 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +5508 +5508 +88F8 +8888 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCAA0 +ENCODING 51872 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +2224 +23E4 +2224 +5524 +5524 +55E4 +5524 +88A4 +88A4 +88A4 +0024 +0024 +ENDCHAR +STARTCHAR uniCAA1 +ENCODING 51873 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCAA2 +ENCODING 51874 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCAA3 +ENCODING 51875 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCAA4 +ENCODING 51876 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCAA5 +ENCODING 51877 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCAA6 +ENCODING 51878 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCAA7 +ENCODING 51879 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCAA8 +ENCODING 51880 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCAA9 +ENCODING 51881 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCAAA +ENCODING 51882 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCAAB +ENCODING 51883 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCAAC +ENCODING 51884 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCAAD +ENCODING 51885 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCAAE +ENCODING 51886 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCAAF +ENCODING 51887 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCAB0 +ENCODING 51888 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCAB1 +ENCODING 51889 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCAB2 +ENCODING 51890 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCAB3 +ENCODING 51891 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCAB4 +ENCODING 51892 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCAB5 +ENCODING 51893 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCAB6 +ENCODING 51894 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCAB7 +ENCODING 51895 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCAB8 +ENCODING 51896 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCAB9 +ENCODING 51897 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCABA +ENCODING 51898 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCABB +ENCODING 51899 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +5524 +55E4 +88A4 +88A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCABC +ENCODING 51900 +BBX 15 13 0 0 +BITMAP +7FFC +0820 +0820 +0820 +1450 +1450 +2288 +4104 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniCABD +ENCODING 51901 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCABE +ENCODING 51902 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCABF +ENCODING 51903 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCAC0 +ENCODING 51904 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCAC1 +ENCODING 51905 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCAC2 +ENCODING 51906 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCAC3 +ENCODING 51907 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCAC4 +ENCODING 51908 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCAC5 +ENCODING 51909 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCAC6 +ENCODING 51910 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCAC7 +ENCODING 51911 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCAC8 +ENCODING 51912 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCAC9 +ENCODING 51913 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCACA +ENCODING 51914 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCACB +ENCODING 51915 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCACC +ENCODING 51916 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCACD +ENCODING 51917 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCACE +ENCODING 51918 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCACF +ENCODING 51919 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCAD0 +ENCODING 51920 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCAD1 +ENCODING 51921 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCAD2 +ENCODING 51922 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCAD3 +ENCODING 51923 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCAD4 +ENCODING 51924 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCAD5 +ENCODING 51925 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCAD6 +ENCODING 51926 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCAD7 +ENCODING 51927 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCAD8 +ENCODING 51928 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +5508 +5508 +888E +8888 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniCAD9 +ENCODING 51929 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCADA +ENCODING 51930 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCADB +ENCODING 51931 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCADC +ENCODING 51932 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCADD +ENCODING 51933 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCADE +ENCODING 51934 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCADF +ENCODING 51935 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCAE0 +ENCODING 51936 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCAE1 +ENCODING 51937 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCAE2 +ENCODING 51938 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCAE3 +ENCODING 51939 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCAE4 +ENCODING 51940 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCAE5 +ENCODING 51941 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCAE6 +ENCODING 51942 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCAE7 +ENCODING 51943 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCAE8 +ENCODING 51944 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCAE9 +ENCODING 51945 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCAEA +ENCODING 51946 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCAEB +ENCODING 51947 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCAEC +ENCODING 51948 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCAED +ENCODING 51949 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCAEE +ENCODING 51950 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCAEF +ENCODING 51951 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCAF0 +ENCODING 51952 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCAF1 +ENCODING 51953 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCAF2 +ENCODING 51954 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCAF3 +ENCODING 51955 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +888E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCAF4 +ENCODING 51956 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +2224 +5524 +5524 +88BC +88A4 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniCAF5 +ENCODING 51957 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCAF6 +ENCODING 51958 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCAF7 +ENCODING 51959 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCAF8 +ENCODING 51960 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCAF9 +ENCODING 51961 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCAFA +ENCODING 51962 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCAFB +ENCODING 51963 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCAFC +ENCODING 51964 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCAFD +ENCODING 51965 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCAFE +ENCODING 51966 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCAFF +ENCODING 51967 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCB00 +ENCODING 51968 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCB01 +ENCODING 51969 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCB02 +ENCODING 51970 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCB03 +ENCODING 51971 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCB04 +ENCODING 51972 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCB05 +ENCODING 51973 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCB06 +ENCODING 51974 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCB07 +ENCODING 51975 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCB08 +ENCODING 51976 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCB09 +ENCODING 51977 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCB0A +ENCODING 51978 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCB0B +ENCODING 51979 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCB0C +ENCODING 51980 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCB0D +ENCODING 51981 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCB0E +ENCODING 51982 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCB0F +ENCODING 51983 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +5524 +88BC +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCB10 +ENCODING 51984 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniCB11 +ENCODING 51985 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCB12 +ENCODING 51986 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCB13 +ENCODING 51987 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCB14 +ENCODING 51988 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCB15 +ENCODING 51989 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCB16 +ENCODING 51990 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCB17 +ENCODING 51991 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCB18 +ENCODING 51992 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCB19 +ENCODING 51993 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCB1A +ENCODING 51994 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCB1B +ENCODING 51995 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCB1C +ENCODING 51996 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCB1D +ENCODING 51997 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCB1E +ENCODING 51998 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCB1F +ENCODING 51999 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCB20 +ENCODING 52000 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCB21 +ENCODING 52001 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCB22 +ENCODING 52002 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCB23 +ENCODING 52003 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCB24 +ENCODING 52004 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCB25 +ENCODING 52005 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCB26 +ENCODING 52006 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCB27 +ENCODING 52007 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCB28 +ENCODING 52008 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCB29 +ENCODING 52009 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCB2A +ENCODING 52010 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCB2B +ENCODING 52011 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCB2C +ENCODING 52012 +BBX 15 13 0 0 +BITMAP +7FFC +0820 +0820 +0820 +1450 +1450 +2288 +4104 +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniCB2D +ENCODING 52013 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCB2E +ENCODING 52014 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCB2F +ENCODING 52015 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCB30 +ENCODING 52016 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCB31 +ENCODING 52017 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCB32 +ENCODING 52018 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCB33 +ENCODING 52019 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCB34 +ENCODING 52020 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCB35 +ENCODING 52021 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCB36 +ENCODING 52022 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCB37 +ENCODING 52023 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCB38 +ENCODING 52024 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCB39 +ENCODING 52025 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCB3A +ENCODING 52026 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCB3B +ENCODING 52027 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCB3C +ENCODING 52028 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCB3D +ENCODING 52029 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCB3E +ENCODING 52030 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCB3F +ENCODING 52031 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCB40 +ENCODING 52032 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCB41 +ENCODING 52033 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCB42 +ENCODING 52034 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCB43 +ENCODING 52035 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCB44 +ENCODING 52036 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCB45 +ENCODING 52037 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCB46 +ENCODING 52038 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCB47 +ENCODING 52039 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCB48 +ENCODING 52040 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniCB49 +ENCODING 52041 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCB4A +ENCODING 52042 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCB4B +ENCODING 52043 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCB4C +ENCODING 52044 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCB4D +ENCODING 52045 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCB4E +ENCODING 52046 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCB4F +ENCODING 52047 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCB50 +ENCODING 52048 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCB51 +ENCODING 52049 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCB52 +ENCODING 52050 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCB53 +ENCODING 52051 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCB54 +ENCODING 52052 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCB55 +ENCODING 52053 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCB56 +ENCODING 52054 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCB57 +ENCODING 52055 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCB58 +ENCODING 52056 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCB59 +ENCODING 52057 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCB5A +ENCODING 52058 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCB5B +ENCODING 52059 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCB5C +ENCODING 52060 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCB5D +ENCODING 52061 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCB5E +ENCODING 52062 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCB5F +ENCODING 52063 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCB60 +ENCODING 52064 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCB61 +ENCODING 52065 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCB62 +ENCODING 52066 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCB63 +ENCODING 52067 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCB64 +ENCODING 52068 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniCB65 +ENCODING 52069 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCB66 +ENCODING 52070 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCB67 +ENCODING 52071 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCB68 +ENCODING 52072 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCB69 +ENCODING 52073 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCB6A +ENCODING 52074 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCB6B +ENCODING 52075 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCB6C +ENCODING 52076 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCB6D +ENCODING 52077 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCB6E +ENCODING 52078 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCB6F +ENCODING 52079 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCB70 +ENCODING 52080 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCB71 +ENCODING 52081 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCB72 +ENCODING 52082 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCB73 +ENCODING 52083 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCB74 +ENCODING 52084 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCB75 +ENCODING 52085 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCB76 +ENCODING 52086 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCB77 +ENCODING 52087 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCB78 +ENCODING 52088 +BBX 14 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCB79 +ENCODING 52089 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCB7A +ENCODING 52090 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCB7B +ENCODING 52091 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCB7C +ENCODING 52092 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCB7D +ENCODING 52093 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCB7E +ENCODING 52094 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCB7F +ENCODING 52095 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCB80 +ENCODING 52096 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +5524 +5524 +88A4 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniCB81 +ENCODING 52097 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCB82 +ENCODING 52098 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCB83 +ENCODING 52099 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCB84 +ENCODING 52100 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCB85 +ENCODING 52101 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCB86 +ENCODING 52102 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCB87 +ENCODING 52103 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCB88 +ENCODING 52104 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCB89 +ENCODING 52105 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCB8A +ENCODING 52106 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCB8B +ENCODING 52107 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCB8C +ENCODING 52108 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCB8D +ENCODING 52109 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCB8E +ENCODING 52110 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCB8F +ENCODING 52111 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCB90 +ENCODING 52112 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCB91 +ENCODING 52113 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCB92 +ENCODING 52114 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCB93 +ENCODING 52115 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCB94 +ENCODING 52116 +BBX 15 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCB95 +ENCODING 52117 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCB96 +ENCODING 52118 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCB97 +ENCODING 52119 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCB98 +ENCODING 52120 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCB99 +ENCODING 52121 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCB9A +ENCODING 52122 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCB9B +ENCODING 52123 +BBX 14 16 0 -2 +BITMAP +FFA4 +2224 +5524 +88A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCB9C +ENCODING 52124 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniCB9D +ENCODING 52125 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCB9E +ENCODING 52126 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCB9F +ENCODING 52127 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCBA0 +ENCODING 52128 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCBA1 +ENCODING 52129 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCBA2 +ENCODING 52130 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCBA3 +ENCODING 52131 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCBA4 +ENCODING 52132 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCBA5 +ENCODING 52133 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCBA6 +ENCODING 52134 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCBA7 +ENCODING 52135 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCBA8 +ENCODING 52136 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCBA9 +ENCODING 52137 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCBAA +ENCODING 52138 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCBAB +ENCODING 52139 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCBAC +ENCODING 52140 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCBAD +ENCODING 52141 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCBAE +ENCODING 52142 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCBAF +ENCODING 52143 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCBB0 +ENCODING 52144 +BBX 14 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCBB1 +ENCODING 52145 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCBB2 +ENCODING 52146 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCBB3 +ENCODING 52147 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCBB4 +ENCODING 52148 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCBB5 +ENCODING 52149 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCBB6 +ENCODING 52150 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCBB7 +ENCODING 52151 +BBX 13 16 0 -2 +BITMAP +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCBB8 +ENCODING 52152 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +0820 +0820 +1450 +2288 +4104 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniCBB9 +ENCODING 52153 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCBBA +ENCODING 52154 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCBBB +ENCODING 52155 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCBBC +ENCODING 52156 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCBBD +ENCODING 52157 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCBBE +ENCODING 52158 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCBBF +ENCODING 52159 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCBC0 +ENCODING 52160 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCBC1 +ENCODING 52161 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCBC2 +ENCODING 52162 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCBC3 +ENCODING 52163 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCBC4 +ENCODING 52164 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCBC5 +ENCODING 52165 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCBC6 +ENCODING 52166 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCBC7 +ENCODING 52167 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCBC8 +ENCODING 52168 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCBC9 +ENCODING 52169 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCBCA +ENCODING 52170 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCBCB +ENCODING 52171 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCBCC +ENCODING 52172 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCBCD +ENCODING 52173 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCBCE +ENCODING 52174 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCBCF +ENCODING 52175 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCBD0 +ENCODING 52176 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCBD1 +ENCODING 52177 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCBD2 +ENCODING 52178 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCBD3 +ENCODING 52179 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCBD4 +ENCODING 52180 +BBX 15 13 0 0 +BITMAP +7FFC +0820 +0820 +0820 +1450 +1450 +2288 +4104 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniCBD5 +ENCODING 52181 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCBD6 +ENCODING 52182 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCBD7 +ENCODING 52183 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCBD8 +ENCODING 52184 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCBD9 +ENCODING 52185 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCBDA +ENCODING 52186 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCBDB +ENCODING 52187 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCBDC +ENCODING 52188 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCBDD +ENCODING 52189 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCBDE +ENCODING 52190 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCBDF +ENCODING 52191 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCBE0 +ENCODING 52192 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCBE1 +ENCODING 52193 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCBE2 +ENCODING 52194 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCBE3 +ENCODING 52195 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCBE4 +ENCODING 52196 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCBE5 +ENCODING 52197 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCBE6 +ENCODING 52198 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCBE7 +ENCODING 52199 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCBE8 +ENCODING 52200 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCBE9 +ENCODING 52201 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCBEA +ENCODING 52202 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCBEB +ENCODING 52203 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCBEC +ENCODING 52204 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCBED +ENCODING 52205 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCBEE +ENCODING 52206 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCBEF +ENCODING 52207 +BBX 15 15 0 -2 +BITMAP +7FFC +0820 +1450 +2288 +4104 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCBF0 +ENCODING 52208 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniCBF1 +ENCODING 52209 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCBF2 +ENCODING 52210 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCBF3 +ENCODING 52211 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCBF4 +ENCODING 52212 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCBF5 +ENCODING 52213 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCBF6 +ENCODING 52214 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCBF7 +ENCODING 52215 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCBF8 +ENCODING 52216 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCBF9 +ENCODING 52217 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCBFA +ENCODING 52218 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCBFB +ENCODING 52219 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCBFC +ENCODING 52220 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCBFD +ENCODING 52221 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCBFE +ENCODING 52222 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCBFF +ENCODING 52223 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCC00 +ENCODING 52224 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCC01 +ENCODING 52225 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCC02 +ENCODING 52226 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCC03 +ENCODING 52227 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCC04 +ENCODING 52228 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCC05 +ENCODING 52229 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCC06 +ENCODING 52230 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCC07 +ENCODING 52231 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCC08 +ENCODING 52232 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCC09 +ENCODING 52233 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC0A +ENCODING 52234 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCC0B +ENCODING 52235 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +5508 +8888 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCC0C +ENCODING 52236 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +5508 +5508 +5508 +5508 +8888 +8888 +8888 +0008 +0008 +ENDCHAR +STARTCHAR uniCC0D +ENCODING 52237 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCC0E +ENCODING 52238 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCC0F +ENCODING 52239 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCC10 +ENCODING 52240 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC11 +ENCODING 52241 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCC12 +ENCODING 52242 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCC13 +ENCODING 52243 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC14 +ENCODING 52244 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC15 +ENCODING 52245 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCC16 +ENCODING 52246 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCC17 +ENCODING 52247 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCC18 +ENCODING 52248 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCC19 +ENCODING 52249 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCC1A +ENCODING 52250 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCC1B +ENCODING 52251 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCC1C +ENCODING 52252 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCC1D +ENCODING 52253 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCC1E +ENCODING 52254 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCC1F +ENCODING 52255 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCC20 +ENCODING 52256 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCC21 +ENCODING 52257 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCC22 +ENCODING 52258 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCC23 +ENCODING 52259 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCC24 +ENCODING 52260 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCC25 +ENCODING 52261 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC26 +ENCODING 52262 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCC27 +ENCODING 52263 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +5508 +5508 +8888 +8888 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCC28 +ENCODING 52264 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0808 +0808 +0808 +140E +1408 +1408 +2208 +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniCC29 +ENCODING 52265 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCC2A +ENCODING 52266 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCC2B +ENCODING 52267 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCC2C +ENCODING 52268 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +140E +2208 +C188 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC2D +ENCODING 52269 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCC2E +ENCODING 52270 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCC2F +ENCODING 52271 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC30 +ENCODING 52272 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC31 +ENCODING 52273 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCC32 +ENCODING 52274 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCC33 +ENCODING 52275 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCC34 +ENCODING 52276 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCC35 +ENCODING 52277 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCC36 +ENCODING 52278 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCC37 +ENCODING 52279 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCC38 +ENCODING 52280 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCC39 +ENCODING 52281 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCC3A +ENCODING 52282 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCC3B +ENCODING 52283 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCC3C +ENCODING 52284 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCC3D +ENCODING 52285 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCC3E +ENCODING 52286 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCC3F +ENCODING 52287 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCC40 +ENCODING 52288 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCC41 +ENCODING 52289 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC42 +ENCODING 52290 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCC43 +ENCODING 52291 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +080E +1408 +2208 +C188 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCC44 +ENCODING 52292 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +0024 +FFA4 +0824 +0824 +0824 +143C +1424 +1424 +2224 +2224 +4124 +80A4 +0024 +0024 +ENDCHAR +STARTCHAR uniCC45 +ENCODING 52293 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCC46 +ENCODING 52294 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCC47 +ENCODING 52295 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCC48 +ENCODING 52296 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCC49 +ENCODING 52297 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCC4A +ENCODING 52298 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCC4B +ENCODING 52299 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCC4C +ENCODING 52300 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCC4D +ENCODING 52301 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCC4E +ENCODING 52302 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCC4F +ENCODING 52303 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCC50 +ENCODING 52304 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCC51 +ENCODING 52305 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCC52 +ENCODING 52306 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCC53 +ENCODING 52307 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCC54 +ENCODING 52308 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCC55 +ENCODING 52309 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCC56 +ENCODING 52310 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCC57 +ENCODING 52311 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCC58 +ENCODING 52312 +BBX 15 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCC59 +ENCODING 52313 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCC5A +ENCODING 52314 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCC5B +ENCODING 52315 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCC5C +ENCODING 52316 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCC5D +ENCODING 52317 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCC5E +ENCODING 52318 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCC5F +ENCODING 52319 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +083C +1424 +2224 +C1A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCC60 +ENCODING 52320 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0808 +080E +0808 +1408 +1408 +1408 +220E +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniCC61 +ENCODING 52321 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCC62 +ENCODING 52322 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCC63 +ENCODING 52323 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCC64 +ENCODING 52324 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +080E +0808 +1408 +2208 +C18E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC65 +ENCODING 52325 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCC66 +ENCODING 52326 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCC67 +ENCODING 52327 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC68 +ENCODING 52328 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC69 +ENCODING 52329 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCC6A +ENCODING 52330 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCC6B +ENCODING 52331 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCC6C +ENCODING 52332 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCC6D +ENCODING 52333 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCC6E +ENCODING 52334 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCC6F +ENCODING 52335 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCC70 +ENCODING 52336 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCC71 +ENCODING 52337 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCC72 +ENCODING 52338 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCC73 +ENCODING 52339 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCC74 +ENCODING 52340 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCC75 +ENCODING 52341 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCC76 +ENCODING 52342 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCC77 +ENCODING 52343 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCC78 +ENCODING 52344 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCC79 +ENCODING 52345 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC7A +ENCODING 52346 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCC7B +ENCODING 52347 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0808 +0808 +140E +2208 +C188 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCC7C +ENCODING 52348 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +0024 +FFA4 +083C +0824 +0824 +1424 +1424 +143C +2224 +2224 +4124 +80A4 +0024 +0024 +ENDCHAR +STARTCHAR uniCC7D +ENCODING 52349 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCC7E +ENCODING 52350 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCC7F +ENCODING 52351 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCC80 +ENCODING 52352 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +1424 +223C +C1A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCC81 +ENCODING 52353 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCC82 +ENCODING 52354 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCC83 +ENCODING 52355 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCC84 +ENCODING 52356 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCC85 +ENCODING 52357 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCC86 +ENCODING 52358 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCC87 +ENCODING 52359 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCC88 +ENCODING 52360 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCC89 +ENCODING 52361 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCC8A +ENCODING 52362 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCC8B +ENCODING 52363 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCC8C +ENCODING 52364 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCC8D +ENCODING 52365 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCC8E +ENCODING 52366 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCC8F +ENCODING 52367 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCC90 +ENCODING 52368 +BBX 15 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCC91 +ENCODING 52369 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCC92 +ENCODING 52370 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCC93 +ENCODING 52371 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCC94 +ENCODING 52372 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCC95 +ENCODING 52373 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCC96 +ENCODING 52374 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCC97 +ENCODING 52375 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0824 +0824 +143C +2224 +C1A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCC98 +ENCODING 52376 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0808 +0808 +0808 +1478 +1408 +1408 +2208 +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniCC99 +ENCODING 52377 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCC9A +ENCODING 52378 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCC9B +ENCODING 52379 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCC9C +ENCODING 52380 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCC9D +ENCODING 52381 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCC9E +ENCODING 52382 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCC9F +ENCODING 52383 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCCA0 +ENCODING 52384 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCCA1 +ENCODING 52385 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCCA2 +ENCODING 52386 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCCA3 +ENCODING 52387 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCCA4 +ENCODING 52388 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCCA5 +ENCODING 52389 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCCA6 +ENCODING 52390 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCCA7 +ENCODING 52391 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCCA8 +ENCODING 52392 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCCA9 +ENCODING 52393 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCCAA +ENCODING 52394 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCCAB +ENCODING 52395 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCCAC +ENCODING 52396 +BBX 14 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCCAD +ENCODING 52397 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCCAE +ENCODING 52398 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCCAF +ENCODING 52399 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCCB0 +ENCODING 52400 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCCB1 +ENCODING 52401 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCCB2 +ENCODING 52402 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCCB3 +ENCODING 52403 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0878 +1408 +2208 +C188 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCCB4 +ENCODING 52404 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +0024 +FFA4 +0824 +0824 +09E4 +1424 +1424 +1424 +2224 +2224 +4124 +80A4 +0024 +0024 +ENDCHAR +STARTCHAR uniCCB5 +ENCODING 52405 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCCB6 +ENCODING 52406 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCCB7 +ENCODING 52407 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCCB8 +ENCODING 52408 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCCB9 +ENCODING 52409 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCCBA +ENCODING 52410 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCCBB +ENCODING 52411 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCCBC +ENCODING 52412 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCCBD +ENCODING 52413 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCCBE +ENCODING 52414 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCCBF +ENCODING 52415 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCCC0 +ENCODING 52416 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCCC1 +ENCODING 52417 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCCC2 +ENCODING 52418 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCCC3 +ENCODING 52419 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCCC4 +ENCODING 52420 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCCC5 +ENCODING 52421 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCCC6 +ENCODING 52422 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCCC7 +ENCODING 52423 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCCC8 +ENCODING 52424 +BBX 15 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCCC9 +ENCODING 52425 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCCCA +ENCODING 52426 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCCCB +ENCODING 52427 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCCCC +ENCODING 52428 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCCCD +ENCODING 52429 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCCCE +ENCODING 52430 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCCCF +ENCODING 52431 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0824 +08E4 +1424 +2224 +C1A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCCD0 +ENCODING 52432 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0808 +0878 +0808 +1408 +1408 +1478 +2208 +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniCCD1 +ENCODING 52433 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCCD2 +ENCODING 52434 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCCD3 +ENCODING 52435 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCCD4 +ENCODING 52436 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCCD5 +ENCODING 52437 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCCD6 +ENCODING 52438 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCCD7 +ENCODING 52439 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCCD8 +ENCODING 52440 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCCD9 +ENCODING 52441 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCCDA +ENCODING 52442 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCCDB +ENCODING 52443 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCCDC +ENCODING 52444 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCCDD +ENCODING 52445 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCCDE +ENCODING 52446 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCCDF +ENCODING 52447 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCCE0 +ENCODING 52448 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCCE1 +ENCODING 52449 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCCE2 +ENCODING 52450 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCCE3 +ENCODING 52451 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCCE4 +ENCODING 52452 +BBX 14 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCCE5 +ENCODING 52453 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCCE6 +ENCODING 52454 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCCE7 +ENCODING 52455 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCCE8 +ENCODING 52456 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCCE9 +ENCODING 52457 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCCEA +ENCODING 52458 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCCEB +ENCODING 52459 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0878 +0808 +1408 +2278 +C188 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCCEC +ENCODING 52460 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +0024 +FFA4 +0824 +09E4 +0824 +1424 +1424 +15E4 +2224 +2224 +4124 +80A4 +0024 +0024 +ENDCHAR +STARTCHAR uniCCED +ENCODING 52461 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCCEE +ENCODING 52462 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCCEF +ENCODING 52463 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCCF0 +ENCODING 52464 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCCF1 +ENCODING 52465 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCCF2 +ENCODING 52466 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCCF3 +ENCODING 52467 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCCF4 +ENCODING 52468 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCCF5 +ENCODING 52469 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCCF6 +ENCODING 52470 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCCF7 +ENCODING 52471 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCCF8 +ENCODING 52472 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCCF9 +ENCODING 52473 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCCFA +ENCODING 52474 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCCFB +ENCODING 52475 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCCFC +ENCODING 52476 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCCFD +ENCODING 52477 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCCFE +ENCODING 52478 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCCFF +ENCODING 52479 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCD00 +ENCODING 52480 +BBX 15 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCD01 +ENCODING 52481 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCD02 +ENCODING 52482 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCD03 +ENCODING 52483 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCD04 +ENCODING 52484 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCD05 +ENCODING 52485 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCD06 +ENCODING 52486 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCD07 +ENCODING 52487 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +08E4 +0824 +14E4 +2224 +C1A4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCD08 +ENCODING 52488 +BBX 15 14 0 0 +BITMAP +0FE0 +0000 +0000 +3FF8 +0100 +0280 +0440 +1830 +600C +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniCD09 +ENCODING 52489 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCD0A +ENCODING 52490 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCD0B +ENCODING 52491 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCD0C +ENCODING 52492 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCD0D +ENCODING 52493 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCD0E +ENCODING 52494 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCD0F +ENCODING 52495 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCD10 +ENCODING 52496 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCD11 +ENCODING 52497 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCD12 +ENCODING 52498 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCD13 +ENCODING 52499 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCD14 +ENCODING 52500 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCD15 +ENCODING 52501 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCD16 +ENCODING 52502 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCD17 +ENCODING 52503 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCD18 +ENCODING 52504 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCD19 +ENCODING 52505 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCD1A +ENCODING 52506 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCD1B +ENCODING 52507 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCD1C +ENCODING 52508 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCD1D +ENCODING 52509 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCD1E +ENCODING 52510 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCD1F +ENCODING 52511 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCD20 +ENCODING 52512 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCD21 +ENCODING 52513 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCD22 +ENCODING 52514 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCD23 +ENCODING 52515 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCD24 +ENCODING 52516 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0808 +0808 +1408 +220E +4108 +8888 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniCD25 +ENCODING 52517 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCD26 +ENCODING 52518 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCD27 +ENCODING 52519 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCD28 +ENCODING 52520 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCD29 +ENCODING 52521 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCD2A +ENCODING 52522 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCD2B +ENCODING 52523 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCD2C +ENCODING 52524 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCD2D +ENCODING 52525 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCD2E +ENCODING 52526 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCD2F +ENCODING 52527 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCD30 +ENCODING 52528 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCD31 +ENCODING 52529 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCD32 +ENCODING 52530 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCD33 +ENCODING 52531 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCD34 +ENCODING 52532 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCD35 +ENCODING 52533 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCD36 +ENCODING 52534 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCD37 +ENCODING 52535 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCD38 +ENCODING 52536 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCD39 +ENCODING 52537 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCD3A +ENCODING 52538 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCD3B +ENCODING 52539 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCD3C +ENCODING 52540 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCD3D +ENCODING 52541 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCD3E +ENCODING 52542 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCD3F +ENCODING 52543 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +220E +C988 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCD40 +ENCODING 52544 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +0024 +FFA4 +0824 +0824 +1424 +223C +4124 +88A4 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniCD41 +ENCODING 52545 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCD42 +ENCODING 52546 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCD43 +ENCODING 52547 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCD44 +ENCODING 52548 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCD45 +ENCODING 52549 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCD46 +ENCODING 52550 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCD47 +ENCODING 52551 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCD48 +ENCODING 52552 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCD49 +ENCODING 52553 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCD4A +ENCODING 52554 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCD4B +ENCODING 52555 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCD4C +ENCODING 52556 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCD4D +ENCODING 52557 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCD4E +ENCODING 52558 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCD4F +ENCODING 52559 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCD50 +ENCODING 52560 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCD51 +ENCODING 52561 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCD52 +ENCODING 52562 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCD53 +ENCODING 52563 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCD54 +ENCODING 52564 +BBX 15 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCD55 +ENCODING 52565 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCD56 +ENCODING 52566 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCD57 +ENCODING 52567 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCD58 +ENCODING 52568 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCD59 +ENCODING 52569 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCD5A +ENCODING 52570 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCD5B +ENCODING 52571 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +1424 +223C +C9A4 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCD5C +ENCODING 52572 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8888 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniCD5D +ENCODING 52573 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCD5E +ENCODING 52574 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCD5F +ENCODING 52575 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCD60 +ENCODING 52576 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCD61 +ENCODING 52577 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCD62 +ENCODING 52578 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCD63 +ENCODING 52579 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCD64 +ENCODING 52580 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCD65 +ENCODING 52581 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCD66 +ENCODING 52582 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCD67 +ENCODING 52583 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCD68 +ENCODING 52584 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCD69 +ENCODING 52585 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCD6A +ENCODING 52586 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCD6B +ENCODING 52587 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCD6C +ENCODING 52588 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCD6D +ENCODING 52589 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCD6E +ENCODING 52590 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCD6F +ENCODING 52591 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCD70 +ENCODING 52592 +BBX 14 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCD71 +ENCODING 52593 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCD72 +ENCODING 52594 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCD73 +ENCODING 52595 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCD74 +ENCODING 52596 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCD75 +ENCODING 52597 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCD76 +ENCODING 52598 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCD77 +ENCODING 52599 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C988 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCD78 +ENCODING 52600 +BBX 15 14 0 0 +BITMAP +0FE0 +0000 +0000 +3FF8 +0100 +0280 +0440 +1830 +600C +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniCD79 +ENCODING 52601 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCD7A +ENCODING 52602 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCD7B +ENCODING 52603 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCD7C +ENCODING 52604 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCD7D +ENCODING 52605 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCD7E +ENCODING 52606 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCD7F +ENCODING 52607 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCD80 +ENCODING 52608 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCD81 +ENCODING 52609 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCD82 +ENCODING 52610 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCD83 +ENCODING 52611 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCD84 +ENCODING 52612 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCD85 +ENCODING 52613 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCD86 +ENCODING 52614 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCD87 +ENCODING 52615 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCD88 +ENCODING 52616 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCD89 +ENCODING 52617 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCD8A +ENCODING 52618 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCD8B +ENCODING 52619 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCD8C +ENCODING 52620 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCD8D +ENCODING 52621 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCD8E +ENCODING 52622 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCD8F +ENCODING 52623 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCD90 +ENCODING 52624 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCD91 +ENCODING 52625 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCD92 +ENCODING 52626 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCD93 +ENCODING 52627 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCD94 +ENCODING 52628 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +0000 +7FFC +0100 +0280 +0C60 +701C +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniCD95 +ENCODING 52629 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCD96 +ENCODING 52630 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCD97 +ENCODING 52631 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCD98 +ENCODING 52632 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCD99 +ENCODING 52633 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCD9A +ENCODING 52634 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCD9B +ENCODING 52635 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCD9C +ENCODING 52636 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCD9D +ENCODING 52637 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCD9E +ENCODING 52638 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCD9F +ENCODING 52639 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCDA0 +ENCODING 52640 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCDA1 +ENCODING 52641 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCDA2 +ENCODING 52642 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCDA3 +ENCODING 52643 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCDA4 +ENCODING 52644 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCDA5 +ENCODING 52645 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCDA6 +ENCODING 52646 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCDA7 +ENCODING 52647 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCDA8 +ENCODING 52648 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCDA9 +ENCODING 52649 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCDAA +ENCODING 52650 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCDAB +ENCODING 52651 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCDAC +ENCODING 52652 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCDAD +ENCODING 52653 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCDAE +ENCODING 52654 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCDAF +ENCODING 52655 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCDB0 +ENCODING 52656 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniCDB1 +ENCODING 52657 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCDB2 +ENCODING 52658 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCDB3 +ENCODING 52659 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCDB4 +ENCODING 52660 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCDB5 +ENCODING 52661 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCDB6 +ENCODING 52662 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCDB7 +ENCODING 52663 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCDB8 +ENCODING 52664 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCDB9 +ENCODING 52665 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCDBA +ENCODING 52666 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCDBB +ENCODING 52667 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCDBC +ENCODING 52668 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCDBD +ENCODING 52669 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCDBE +ENCODING 52670 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCDBF +ENCODING 52671 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCDC0 +ENCODING 52672 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCDC1 +ENCODING 52673 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCDC2 +ENCODING 52674 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCDC3 +ENCODING 52675 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCDC4 +ENCODING 52676 +BBX 14 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCDC5 +ENCODING 52677 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCDC6 +ENCODING 52678 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCDC7 +ENCODING 52679 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCDC8 +ENCODING 52680 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCDC9 +ENCODING 52681 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCDCA +ENCODING 52682 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCDCB +ENCODING 52683 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCDCC +ENCODING 52684 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +0024 +FFA4 +0824 +1424 +2224 +C1A4 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniCDCD +ENCODING 52685 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCDCE +ENCODING 52686 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCDCF +ENCODING 52687 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCDD0 +ENCODING 52688 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCDD1 +ENCODING 52689 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCDD2 +ENCODING 52690 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCDD3 +ENCODING 52691 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCDD4 +ENCODING 52692 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCDD5 +ENCODING 52693 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCDD6 +ENCODING 52694 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCDD7 +ENCODING 52695 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCDD8 +ENCODING 52696 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCDD9 +ENCODING 52697 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCDDA +ENCODING 52698 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCDDB +ENCODING 52699 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCDDC +ENCODING 52700 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCDDD +ENCODING 52701 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCDDE +ENCODING 52702 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCDDF +ENCODING 52703 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCDE0 +ENCODING 52704 +BBX 15 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCDE1 +ENCODING 52705 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCDE2 +ENCODING 52706 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCDE3 +ENCODING 52707 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCDE4 +ENCODING 52708 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCDE5 +ENCODING 52709 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCDE6 +ENCODING 52710 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCDE7 +ENCODING 52711 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +1424 +E3A4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCDE8 +ENCODING 52712 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0808 +1408 +2208 +C188 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniCDE9 +ENCODING 52713 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCDEA +ENCODING 52714 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCDEB +ENCODING 52715 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCDEC +ENCODING 52716 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCDED +ENCODING 52717 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCDEE +ENCODING 52718 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCDEF +ENCODING 52719 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCDF0 +ENCODING 52720 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCDF1 +ENCODING 52721 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCDF2 +ENCODING 52722 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCDF3 +ENCODING 52723 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCDF4 +ENCODING 52724 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCDF5 +ENCODING 52725 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCDF6 +ENCODING 52726 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCDF7 +ENCODING 52727 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCDF8 +ENCODING 52728 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCDF9 +ENCODING 52729 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCDFA +ENCODING 52730 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCDFB +ENCODING 52731 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCDFC +ENCODING 52732 +BBX 14 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCDFD +ENCODING 52733 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCDFE +ENCODING 52734 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCDFF +ENCODING 52735 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE00 +ENCODING 52736 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCE01 +ENCODING 52737 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE02 +ENCODING 52738 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCE03 +ENCODING 52739 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +1408 +E388 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCE04 +ENCODING 52740 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +0000 +7FFC +0100 +0280 +0C60 +701C +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniCE05 +ENCODING 52741 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCE06 +ENCODING 52742 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCE07 +ENCODING 52743 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCE08 +ENCODING 52744 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCE09 +ENCODING 52745 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCE0A +ENCODING 52746 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCE0B +ENCODING 52747 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCE0C +ENCODING 52748 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCE0D +ENCODING 52749 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCE0E +ENCODING 52750 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCE0F +ENCODING 52751 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCE10 +ENCODING 52752 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCE11 +ENCODING 52753 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCE12 +ENCODING 52754 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCE13 +ENCODING 52755 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCE14 +ENCODING 52756 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCE15 +ENCODING 52757 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCE16 +ENCODING 52758 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCE17 +ENCODING 52759 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE18 +ENCODING 52760 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCE19 +ENCODING 52761 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCE1A +ENCODING 52762 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE1B +ENCODING 52763 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE1C +ENCODING 52764 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCE1D +ENCODING 52765 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCE1E +ENCODING 52766 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCE1F +ENCODING 52767 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCE20 +ENCODING 52768 +BBX 15 14 0 0 +BITMAP +0FE0 +0000 +0000 +3FF8 +0100 +0280 +0440 +1830 +600C +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniCE21 +ENCODING 52769 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCE22 +ENCODING 52770 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCE23 +ENCODING 52771 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCE24 +ENCODING 52772 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCE25 +ENCODING 52773 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCE26 +ENCODING 52774 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCE27 +ENCODING 52775 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCE28 +ENCODING 52776 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCE29 +ENCODING 52777 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCE2A +ENCODING 52778 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCE2B +ENCODING 52779 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCE2C +ENCODING 52780 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCE2D +ENCODING 52781 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCE2E +ENCODING 52782 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCE2F +ENCODING 52783 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCE30 +ENCODING 52784 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCE31 +ENCODING 52785 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCE32 +ENCODING 52786 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCE33 +ENCODING 52787 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE34 +ENCODING 52788 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCE35 +ENCODING 52789 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCE36 +ENCODING 52790 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE37 +ENCODING 52791 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE38 +ENCODING 52792 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCE39 +ENCODING 52793 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCE3A +ENCODING 52794 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCE3B +ENCODING 52795 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +3FF8 +0100 +06C0 +3838 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCE3C +ENCODING 52796 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0808 +0808 +1408 +2208 +4108 +8088 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniCE3D +ENCODING 52797 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCE3E +ENCODING 52798 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCE3F +ENCODING 52799 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCE40 +ENCODING 52800 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE41 +ENCODING 52801 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCE42 +ENCODING 52802 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCE43 +ENCODING 52803 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE44 +ENCODING 52804 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE45 +ENCODING 52805 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCE46 +ENCODING 52806 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCE47 +ENCODING 52807 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCE48 +ENCODING 52808 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCE49 +ENCODING 52809 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCE4A +ENCODING 52810 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCE4B +ENCODING 52811 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCE4C +ENCODING 52812 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCE4D +ENCODING 52813 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCE4E +ENCODING 52814 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCE4F +ENCODING 52815 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE50 +ENCODING 52816 +BBX 14 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCE51 +ENCODING 52817 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCE52 +ENCODING 52818 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE53 +ENCODING 52819 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE54 +ENCODING 52820 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCE55 +ENCODING 52821 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE56 +ENCODING 52822 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCE57 +ENCODING 52823 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +1408 +2208 +C188 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCE58 +ENCODING 52824 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0808 +0808 +0808 +1408 +1408 +1408 +2208 +2208 +4108 +8088 +0008 +0008 +ENDCHAR +STARTCHAR uniCE59 +ENCODING 52825 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCE5A +ENCODING 52826 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCE5B +ENCODING 52827 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCE5C +ENCODING 52828 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE5D +ENCODING 52829 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCE5E +ENCODING 52830 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCE5F +ENCODING 52831 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE60 +ENCODING 52832 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE61 +ENCODING 52833 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCE62 +ENCODING 52834 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCE63 +ENCODING 52835 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCE64 +ENCODING 52836 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCE65 +ENCODING 52837 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCE66 +ENCODING 52838 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCE67 +ENCODING 52839 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCE68 +ENCODING 52840 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCE69 +ENCODING 52841 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCE6A +ENCODING 52842 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCE6B +ENCODING 52843 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE6C +ENCODING 52844 +BBX 14 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCE6D +ENCODING 52845 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCE6E +ENCODING 52846 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE6F +ENCODING 52847 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE70 +ENCODING 52848 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCE71 +ENCODING 52849 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE72 +ENCODING 52850 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCE73 +ENCODING 52851 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0808 +0808 +1408 +2208 +C188 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCE74 +ENCODING 52852 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0108 +FF08 +010E +0208 +0208 +0408 +0808 +3008 +C008 +0008 +0008 +ENDCHAR +STARTCHAR uniCE75 +ENCODING 52853 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCE76 +ENCODING 52854 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCE77 +ENCODING 52855 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCE78 +ENCODING 52856 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +040E +0808 +3008 +C008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE79 +ENCODING 52857 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCE7A +ENCODING 52858 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCE7B +ENCODING 52859 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE7C +ENCODING 52860 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE7D +ENCODING 52861 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCE7E +ENCODING 52862 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCE7F +ENCODING 52863 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCE80 +ENCODING 52864 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCE81 +ENCODING 52865 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCE82 +ENCODING 52866 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCE83 +ENCODING 52867 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCE84 +ENCODING 52868 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCE85 +ENCODING 52869 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCE86 +ENCODING 52870 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCE87 +ENCODING 52871 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE88 +ENCODING 52872 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCE89 +ENCODING 52873 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCE8A +ENCODING 52874 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE8B +ENCODING 52875 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCE8C +ENCODING 52876 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCE8D +ENCODING 52877 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCE8E +ENCODING 52878 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCE8F +ENCODING 52879 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE0E +0408 +0808 +3008 +C008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCE90 +ENCODING 52880 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +0124 +0124 +FF24 +013C +0224 +0224 +0424 +0824 +3024 +C024 +0024 +0024 +ENDCHAR +STARTCHAR uniCE91 +ENCODING 52881 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCE92 +ENCODING 52882 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCE93 +ENCODING 52883 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCE94 +ENCODING 52884 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCE95 +ENCODING 52885 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCE96 +ENCODING 52886 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCE97 +ENCODING 52887 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCE98 +ENCODING 52888 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCE99 +ENCODING 52889 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCE9A +ENCODING 52890 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCE9B +ENCODING 52891 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCE9C +ENCODING 52892 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCE9D +ENCODING 52893 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCE9E +ENCODING 52894 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCE9F +ENCODING 52895 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCEA0 +ENCODING 52896 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCEA1 +ENCODING 52897 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCEA2 +ENCODING 52898 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCEA3 +ENCODING 52899 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCEA4 +ENCODING 52900 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCEA5 +ENCODING 52901 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCEA6 +ENCODING 52902 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCEA7 +ENCODING 52903 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCEA8 +ENCODING 52904 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCEA9 +ENCODING 52905 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCEAA +ENCODING 52906 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCEAB +ENCODING 52907 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FE3C +0424 +0824 +3024 +C024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCEAC +ENCODING 52908 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +010E +FF08 +0108 +0208 +0208 +040E +0808 +3008 +C008 +0008 +0008 +ENDCHAR +STARTCHAR uniCEAD +ENCODING 52909 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCEAE +ENCODING 52910 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCEAF +ENCODING 52911 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCEB0 +ENCODING 52912 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +010E +FE08 +0408 +0808 +300E +C008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCEB1 +ENCODING 52913 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCEB2 +ENCODING 52914 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCEB3 +ENCODING 52915 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCEB4 +ENCODING 52916 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCEB5 +ENCODING 52917 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCEB6 +ENCODING 52918 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCEB7 +ENCODING 52919 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCEB8 +ENCODING 52920 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCEB9 +ENCODING 52921 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCEBA +ENCODING 52922 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCEBB +ENCODING 52923 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCEBC +ENCODING 52924 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCEBD +ENCODING 52925 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCEBE +ENCODING 52926 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCEBF +ENCODING 52927 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCEC0 +ENCODING 52928 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCEC1 +ENCODING 52929 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCEC2 +ENCODING 52930 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCEC3 +ENCODING 52931 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCEC4 +ENCODING 52932 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCEC5 +ENCODING 52933 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCEC6 +ENCODING 52934 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCEC7 +ENCODING 52935 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +010E +0108 +FE08 +040E +0808 +3008 +C008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCEC8 +ENCODING 52936 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +013C +0124 +FF24 +0124 +0224 +023C +0424 +0824 +3024 +C024 +0024 +0024 +ENDCHAR +STARTCHAR uniCEC9 +ENCODING 52937 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCECA +ENCODING 52938 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCECB +ENCODING 52939 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCECC +ENCODING 52940 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +0424 +083C +3024 +C024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCECD +ENCODING 52941 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCECE +ENCODING 52942 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCECF +ENCODING 52943 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCED0 +ENCODING 52944 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCED1 +ENCODING 52945 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCED2 +ENCODING 52946 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCED3 +ENCODING 52947 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCED4 +ENCODING 52948 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCED5 +ENCODING 52949 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCED6 +ENCODING 52950 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCED7 +ENCODING 52951 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCED8 +ENCODING 52952 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCED9 +ENCODING 52953 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCEDA +ENCODING 52954 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCEDB +ENCODING 52955 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCEDC +ENCODING 52956 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCEDD +ENCODING 52957 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCEDE +ENCODING 52958 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCEDF +ENCODING 52959 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCEE0 +ENCODING 52960 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCEE1 +ENCODING 52961 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCEE2 +ENCODING 52962 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCEE3 +ENCODING 52963 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +013C +0124 +FE24 +043C +0824 +3024 +C024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCEE4 +ENCODING 52964 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0108 +FF08 +0178 +0208 +0208 +0408 +0808 +3008 +C008 +0008 +0008 +ENDCHAR +STARTCHAR uniCEE5 +ENCODING 52965 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCEE6 +ENCODING 52966 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCEE7 +ENCODING 52967 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCEE8 +ENCODING 52968 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCEE9 +ENCODING 52969 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCEEA +ENCODING 52970 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCEEB +ENCODING 52971 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCEEC +ENCODING 52972 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCEED +ENCODING 52973 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCEEE +ENCODING 52974 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCEEF +ENCODING 52975 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCEF0 +ENCODING 52976 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCEF1 +ENCODING 52977 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCEF2 +ENCODING 52978 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCEF3 +ENCODING 52979 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCEF4 +ENCODING 52980 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCEF5 +ENCODING 52981 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCEF6 +ENCODING 52982 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCEF7 +ENCODING 52983 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCEF8 +ENCODING 52984 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCEF9 +ENCODING 52985 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCEFA +ENCODING 52986 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCEFB +ENCODING 52987 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCEFC +ENCODING 52988 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCEFD +ENCODING 52989 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCEFE +ENCODING 52990 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCEFF +ENCODING 52991 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE78 +0408 +0808 +3008 +C008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCF00 +ENCODING 52992 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +0124 +0124 +FFE4 +0124 +0224 +0224 +0424 +0824 +3024 +C024 +0024 +0024 +ENDCHAR +STARTCHAR uniCF01 +ENCODING 52993 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCF02 +ENCODING 52994 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCF03 +ENCODING 52995 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCF04 +ENCODING 52996 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCF05 +ENCODING 52997 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCF06 +ENCODING 52998 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCF07 +ENCODING 52999 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCF08 +ENCODING 53000 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCF09 +ENCODING 53001 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCF0A +ENCODING 53002 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCF0B +ENCODING 53003 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCF0C +ENCODING 53004 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCF0D +ENCODING 53005 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCF0E +ENCODING 53006 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCF0F +ENCODING 53007 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCF10 +ENCODING 53008 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCF11 +ENCODING 53009 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCF12 +ENCODING 53010 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCF13 +ENCODING 53011 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCF14 +ENCODING 53012 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCF15 +ENCODING 53013 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCF16 +ENCODING 53014 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCF17 +ENCODING 53015 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCF18 +ENCODING 53016 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCF19 +ENCODING 53017 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCF1A +ENCODING 53018 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCF1B +ENCODING 53019 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +FEE4 +0424 +0824 +3024 +C024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCF1C +ENCODING 53020 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0178 +FF08 +0108 +0208 +0278 +0408 +0808 +3008 +C008 +0008 +0008 +ENDCHAR +STARTCHAR uniCF1D +ENCODING 53021 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCF1E +ENCODING 53022 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCF1F +ENCODING 53023 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCF20 +ENCODING 53024 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCF21 +ENCODING 53025 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCF22 +ENCODING 53026 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCF23 +ENCODING 53027 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCF24 +ENCODING 53028 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCF25 +ENCODING 53029 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCF26 +ENCODING 53030 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCF27 +ENCODING 53031 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCF28 +ENCODING 53032 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCF29 +ENCODING 53033 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCF2A +ENCODING 53034 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCF2B +ENCODING 53035 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCF2C +ENCODING 53036 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCF2D +ENCODING 53037 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCF2E +ENCODING 53038 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCF2F +ENCODING 53039 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCF30 +ENCODING 53040 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCF31 +ENCODING 53041 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCF32 +ENCODING 53042 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCF33 +ENCODING 53043 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCF34 +ENCODING 53044 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCF35 +ENCODING 53045 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCF36 +ENCODING 53046 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCF37 +ENCODING 53047 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0178 +FE08 +0408 +0878 +3008 +C008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCF38 +ENCODING 53048 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +0124 +01E4 +FF24 +0124 +0224 +03E4 +0424 +0824 +3024 +C024 +0024 +0024 +ENDCHAR +STARTCHAR uniCF39 +ENCODING 53049 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCF3A +ENCODING 53050 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCF3B +ENCODING 53051 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCF3C +ENCODING 53052 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCF3D +ENCODING 53053 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCF3E +ENCODING 53054 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCF3F +ENCODING 53055 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCF40 +ENCODING 53056 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCF41 +ENCODING 53057 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCF42 +ENCODING 53058 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCF43 +ENCODING 53059 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCF44 +ENCODING 53060 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCF45 +ENCODING 53061 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCF46 +ENCODING 53062 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCF47 +ENCODING 53063 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCF48 +ENCODING 53064 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCF49 +ENCODING 53065 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCF4A +ENCODING 53066 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCF4B +ENCODING 53067 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCF4C +ENCODING 53068 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCF4D +ENCODING 53069 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCF4E +ENCODING 53070 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCF4F +ENCODING 53071 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCF50 +ENCODING 53072 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCF51 +ENCODING 53073 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCF52 +ENCODING 53074 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCF53 +ENCODING 53075 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +01E4 +FE24 +04E4 +0824 +3024 +C024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCF54 +ENCODING 53076 +BBX 15 13 0 0 +BITMAP +3FF8 +0008 +0008 +0008 +0008 +3FF8 +0008 +0108 +0110 +0110 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniCF55 +ENCODING 53077 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCF56 +ENCODING 53078 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCF57 +ENCODING 53079 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCF58 +ENCODING 53080 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCF59 +ENCODING 53081 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCF5A +ENCODING 53082 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCF5B +ENCODING 53083 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCF5C +ENCODING 53084 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCF5D +ENCODING 53085 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCF5E +ENCODING 53086 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCF5F +ENCODING 53087 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCF60 +ENCODING 53088 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCF61 +ENCODING 53089 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCF62 +ENCODING 53090 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCF63 +ENCODING 53091 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCF64 +ENCODING 53092 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCF65 +ENCODING 53093 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCF66 +ENCODING 53094 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCF67 +ENCODING 53095 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCF68 +ENCODING 53096 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCF69 +ENCODING 53097 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCF6A +ENCODING 53098 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCF6B +ENCODING 53099 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCF6C +ENCODING 53100 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCF6D +ENCODING 53101 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCF6E +ENCODING 53102 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCF6F +ENCODING 53103 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0108 +0110 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCF70 +ENCODING 53104 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +FF08 +0108 +010E +1208 +1208 +1008 +1008 +1008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniCF71 +ENCODING 53105 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCF72 +ENCODING 53106 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCF73 +ENCODING 53107 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCF74 +ENCODING 53108 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCF75 +ENCODING 53109 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCF76 +ENCODING 53110 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCF77 +ENCODING 53111 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCF78 +ENCODING 53112 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCF79 +ENCODING 53113 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCF7A +ENCODING 53114 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCF7B +ENCODING 53115 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCF7C +ENCODING 53116 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCF7D +ENCODING 53117 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCF7E +ENCODING 53118 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCF7F +ENCODING 53119 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCF80 +ENCODING 53120 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCF81 +ENCODING 53121 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCF82 +ENCODING 53122 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCF83 +ENCODING 53123 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCF84 +ENCODING 53124 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCF85 +ENCODING 53125 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCF86 +ENCODING 53126 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCF87 +ENCODING 53127 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCF88 +ENCODING 53128 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCF89 +ENCODING 53129 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCF8A +ENCODING 53130 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCF8B +ENCODING 53131 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +110E +1208 +1008 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCF8C +ENCODING 53132 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +0124 +0124 +0124 +FF24 +0124 +013C +1224 +1224 +1024 +1024 +1024 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniCF8D +ENCODING 53133 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniCF8E +ENCODING 53134 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniCF8F +ENCODING 53135 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniCF90 +ENCODING 53136 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCF91 +ENCODING 53137 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCF92 +ENCODING 53138 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCF93 +ENCODING 53139 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCF94 +ENCODING 53140 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCF95 +ENCODING 53141 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniCF96 +ENCODING 53142 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCF97 +ENCODING 53143 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniCF98 +ENCODING 53144 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniCF99 +ENCODING 53145 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniCF9A +ENCODING 53146 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniCF9B +ENCODING 53147 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniCF9C +ENCODING 53148 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCF9D +ENCODING 53149 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniCF9E +ENCODING 53150 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniCF9F +ENCODING 53151 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCFA0 +ENCODING 53152 +BBX 15 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniCFA1 +ENCODING 53153 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniCFA2 +ENCODING 53154 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCFA3 +ENCODING 53155 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniCFA4 +ENCODING 53156 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniCFA5 +ENCODING 53157 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniCFA6 +ENCODING 53158 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniCFA7 +ENCODING 53159 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +113C +1224 +1024 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniCFA8 +ENCODING 53160 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +FF08 +0108 +0108 +1208 +1208 +1008 +1008 +1008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniCFA9 +ENCODING 53161 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCFAA +ENCODING 53162 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCFAB +ENCODING 53163 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCFAC +ENCODING 53164 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCFAD +ENCODING 53165 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCFAE +ENCODING 53166 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCFAF +ENCODING 53167 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCFB0 +ENCODING 53168 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCFB1 +ENCODING 53169 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCFB2 +ENCODING 53170 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCFB3 +ENCODING 53171 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCFB4 +ENCODING 53172 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCFB5 +ENCODING 53173 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCFB6 +ENCODING 53174 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCFB7 +ENCODING 53175 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCFB8 +ENCODING 53176 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCFB9 +ENCODING 53177 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniCFBA +ENCODING 53178 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCFBB +ENCODING 53179 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCFBC +ENCODING 53180 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCFBD +ENCODING 53181 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniCFBE +ENCODING 53182 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCFBF +ENCODING 53183 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCFC0 +ENCODING 53184 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCFC1 +ENCODING 53185 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniCFC2 +ENCODING 53186 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCFC3 +ENCODING 53187 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +1108 +1208 +1008 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCFC4 +ENCODING 53188 +BBX 15 13 0 0 +BITMAP +3FF8 +0008 +0008 +0008 +0008 +3FF8 +0008 +0888 +0890 +0890 +0880 +0880 +FFFE +ENDCHAR +STARTCHAR uniCFC5 +ENCODING 53189 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCFC6 +ENCODING 53190 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCFC7 +ENCODING 53191 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCFC8 +ENCODING 53192 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCFC9 +ENCODING 53193 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCFCA +ENCODING 53194 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCFCB +ENCODING 53195 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCFCC +ENCODING 53196 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCFCD +ENCODING 53197 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCFCE +ENCODING 53198 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCFCF +ENCODING 53199 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCFD0 +ENCODING 53200 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCFD1 +ENCODING 53201 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCFD2 +ENCODING 53202 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCFD3 +ENCODING 53203 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCFD4 +ENCODING 53204 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCFD5 +ENCODING 53205 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCFD6 +ENCODING 53206 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCFD7 +ENCODING 53207 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCFD8 +ENCODING 53208 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCFD9 +ENCODING 53209 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCFDA +ENCODING 53210 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCFDB +ENCODING 53211 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCFDC +ENCODING 53212 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCFDD +ENCODING 53213 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCFDE +ENCODING 53214 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCFDF +ENCODING 53215 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0888 +0890 +0880 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCFE0 +ENCODING 53216 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0008 +0010 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniCFE1 +ENCODING 53217 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCFE2 +ENCODING 53218 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCFE3 +ENCODING 53219 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniCFE4 +ENCODING 53220 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCFE5 +ENCODING 53221 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCFE6 +ENCODING 53222 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCFE7 +ENCODING 53223 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCFE8 +ENCODING 53224 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCFE9 +ENCODING 53225 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniCFEA +ENCODING 53226 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCFEB +ENCODING 53227 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniCFEC +ENCODING 53228 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniCFED +ENCODING 53229 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniCFEE +ENCODING 53230 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniCFEF +ENCODING 53231 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniCFF0 +ENCODING 53232 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCFF1 +ENCODING 53233 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniCFF2 +ENCODING 53234 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniCFF3 +ENCODING 53235 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCFF4 +ENCODING 53236 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniCFF5 +ENCODING 53237 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCFF6 +ENCODING 53238 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCFF7 +ENCODING 53239 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniCFF8 +ENCODING 53240 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniCFF9 +ENCODING 53241 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniCFFA +ENCODING 53242 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniCFFB +ENCODING 53243 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniCFFC +ENCODING 53244 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniCFFD +ENCODING 53245 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniCFFE +ENCODING 53246 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniCFFF +ENCODING 53247 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD000 +ENCODING 53248 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD001 +ENCODING 53249 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD002 +ENCODING 53250 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD003 +ENCODING 53251 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD004 +ENCODING 53252 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD005 +ENCODING 53253 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD006 +ENCODING 53254 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD007 +ENCODING 53255 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD008 +ENCODING 53256 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD009 +ENCODING 53257 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD00A +ENCODING 53258 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD00B +ENCODING 53259 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD00C +ENCODING 53260 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD00D +ENCODING 53261 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD00E +ENCODING 53262 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD00F +ENCODING 53263 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD010 +ENCODING 53264 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD011 +ENCODING 53265 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD012 +ENCODING 53266 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD013 +ENCODING 53267 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD014 +ENCODING 53268 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD015 +ENCODING 53269 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD016 +ENCODING 53270 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD017 +ENCODING 53271 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD018 +ENCODING 53272 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +0124 +7F24 +0124 +0124 +0224 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniD019 +ENCODING 53273 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD01A +ENCODING 53274 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD01B +ENCODING 53275 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD01C +ENCODING 53276 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD01D +ENCODING 53277 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD01E +ENCODING 53278 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD01F +ENCODING 53279 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD020 +ENCODING 53280 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD021 +ENCODING 53281 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD022 +ENCODING 53282 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD023 +ENCODING 53283 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD024 +ENCODING 53284 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD025 +ENCODING 53285 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD026 +ENCODING 53286 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD027 +ENCODING 53287 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD028 +ENCODING 53288 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD029 +ENCODING 53289 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD02A +ENCODING 53290 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD02B +ENCODING 53291 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD02C +ENCODING 53292 +BBX 15 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD02D +ENCODING 53293 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD02E +ENCODING 53294 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD02F +ENCODING 53295 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD030 +ENCODING 53296 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD031 +ENCODING 53297 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD032 +ENCODING 53298 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD033 +ENCODING 53299 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +0124 +7F24 +0124 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD034 +ENCODING 53300 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +0108 +7F08 +0108 +0108 +0208 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniD035 +ENCODING 53301 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD036 +ENCODING 53302 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD037 +ENCODING 53303 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD038 +ENCODING 53304 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD039 +ENCODING 53305 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD03A +ENCODING 53306 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD03B +ENCODING 53307 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD03C +ENCODING 53308 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD03D +ENCODING 53309 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD03E +ENCODING 53310 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD03F +ENCODING 53311 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD040 +ENCODING 53312 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD041 +ENCODING 53313 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD042 +ENCODING 53314 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD043 +ENCODING 53315 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD044 +ENCODING 53316 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD045 +ENCODING 53317 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD046 +ENCODING 53318 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD047 +ENCODING 53319 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD048 +ENCODING 53320 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD049 +ENCODING 53321 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD04A +ENCODING 53322 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD04B +ENCODING 53323 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD04C +ENCODING 53324 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD04D +ENCODING 53325 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD04E +ENCODING 53326 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD04F +ENCODING 53327 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD050 +ENCODING 53328 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0008 +0010 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniD051 +ENCODING 53329 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD052 +ENCODING 53330 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD053 +ENCODING 53331 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD054 +ENCODING 53332 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD055 +ENCODING 53333 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD056 +ENCODING 53334 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD057 +ENCODING 53335 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD058 +ENCODING 53336 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD059 +ENCODING 53337 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD05A +ENCODING 53338 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD05B +ENCODING 53339 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD05C +ENCODING 53340 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD05D +ENCODING 53341 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD05E +ENCODING 53342 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD05F +ENCODING 53343 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD060 +ENCODING 53344 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD061 +ENCODING 53345 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD062 +ENCODING 53346 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD063 +ENCODING 53347 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD064 +ENCODING 53348 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD065 +ENCODING 53349 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD066 +ENCODING 53350 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD067 +ENCODING 53351 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD068 +ENCODING 53352 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD069 +ENCODING 53353 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD06A +ENCODING 53354 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD06B +ENCODING 53355 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD06C +ENCODING 53356 +BBX 15 13 0 0 +BITMAP +3FF8 +0008 +0008 +0008 +0008 +3FF8 +0008 +0008 +0010 +0010 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniD06D +ENCODING 53357 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD06E +ENCODING 53358 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD06F +ENCODING 53359 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD070 +ENCODING 53360 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD071 +ENCODING 53361 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD072 +ENCODING 53362 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD073 +ENCODING 53363 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD074 +ENCODING 53364 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD075 +ENCODING 53365 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD076 +ENCODING 53366 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD077 +ENCODING 53367 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD078 +ENCODING 53368 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD079 +ENCODING 53369 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD07A +ENCODING 53370 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD07B +ENCODING 53371 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD07C +ENCODING 53372 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD07D +ENCODING 53373 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD07E +ENCODING 53374 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD07F +ENCODING 53375 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD080 +ENCODING 53376 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD081 +ENCODING 53377 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD082 +ENCODING 53378 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD083 +ENCODING 53379 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD084 +ENCODING 53380 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD085 +ENCODING 53381 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD086 +ENCODING 53382 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD087 +ENCODING 53383 +BBX 15 15 0 -2 +BITMAP +3FF8 +0008 +0008 +3FF8 +0008 +0010 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD088 +ENCODING 53384 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +FF08 +0108 +0108 +0208 +0208 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniD089 +ENCODING 53385 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD08A +ENCODING 53386 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD08B +ENCODING 53387 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD08C +ENCODING 53388 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD08D +ENCODING 53389 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD08E +ENCODING 53390 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD08F +ENCODING 53391 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD090 +ENCODING 53392 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD091 +ENCODING 53393 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD092 +ENCODING 53394 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD093 +ENCODING 53395 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD094 +ENCODING 53396 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD095 +ENCODING 53397 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD096 +ENCODING 53398 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD097 +ENCODING 53399 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD098 +ENCODING 53400 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD099 +ENCODING 53401 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD09A +ENCODING 53402 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD09B +ENCODING 53403 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD09C +ENCODING 53404 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD09D +ENCODING 53405 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD09E +ENCODING 53406 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD09F +ENCODING 53407 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD0A0 +ENCODING 53408 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD0A1 +ENCODING 53409 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD0A2 +ENCODING 53410 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD0A3 +ENCODING 53411 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +0108 +7F08 +0108 +0208 +0008 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD0A4 +ENCODING 53412 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +0108 +0108 +FF08 +0108 +0208 +0208 +0408 +0808 +3008 +C008 +0008 +0008 +ENDCHAR +STARTCHAR uniD0A5 +ENCODING 53413 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD0A6 +ENCODING 53414 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD0A7 +ENCODING 53415 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD0A8 +ENCODING 53416 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD0A9 +ENCODING 53417 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD0AA +ENCODING 53418 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD0AB +ENCODING 53419 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD0AC +ENCODING 53420 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD0AD +ENCODING 53421 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD0AE +ENCODING 53422 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD0AF +ENCODING 53423 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD0B0 +ENCODING 53424 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD0B1 +ENCODING 53425 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD0B2 +ENCODING 53426 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD0B3 +ENCODING 53427 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD0B4 +ENCODING 53428 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD0B5 +ENCODING 53429 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD0B6 +ENCODING 53430 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD0B7 +ENCODING 53431 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD0B8 +ENCODING 53432 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD0B9 +ENCODING 53433 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD0BA +ENCODING 53434 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD0BB +ENCODING 53435 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD0BC +ENCODING 53436 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD0BD +ENCODING 53437 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD0BE +ENCODING 53438 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD0BF +ENCODING 53439 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +0108 +0108 +FE08 +0408 +0808 +3008 +C008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD0C0 +ENCODING 53440 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF0E +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniD0C1 +ENCODING 53441 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD0C2 +ENCODING 53442 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD0C3 +ENCODING 53443 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD0C4 +ENCODING 53444 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +800E +8008 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD0C5 +ENCODING 53445 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD0C6 +ENCODING 53446 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD0C7 +ENCODING 53447 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD0C8 +ENCODING 53448 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD0C9 +ENCODING 53449 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD0CA +ENCODING 53450 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD0CB +ENCODING 53451 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD0CC +ENCODING 53452 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD0CD +ENCODING 53453 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD0CE +ENCODING 53454 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD0CF +ENCODING 53455 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD0D0 +ENCODING 53456 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD0D1 +ENCODING 53457 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD0D2 +ENCODING 53458 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD0D3 +ENCODING 53459 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD0D4 +ENCODING 53460 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD0D5 +ENCODING 53461 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD0D6 +ENCODING 53462 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD0D7 +ENCODING 53463 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD0D8 +ENCODING 53464 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD0D9 +ENCODING 53465 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD0DA +ENCODING 53466 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD0DB +ENCODING 53467 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF0E +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD0DC +ENCODING 53468 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +8024 +8024 +8024 +FF3C +8024 +8024 +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniD0DD +ENCODING 53469 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD0DE +ENCODING 53470 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD0DF +ENCODING 53471 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD0E0 +ENCODING 53472 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD0E1 +ENCODING 53473 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD0E2 +ENCODING 53474 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD0E3 +ENCODING 53475 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD0E4 +ENCODING 53476 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD0E5 +ENCODING 53477 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD0E6 +ENCODING 53478 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD0E7 +ENCODING 53479 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD0E8 +ENCODING 53480 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD0E9 +ENCODING 53481 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD0EA +ENCODING 53482 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD0EB +ENCODING 53483 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD0EC +ENCODING 53484 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD0ED +ENCODING 53485 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD0EE +ENCODING 53486 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD0EF +ENCODING 53487 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD0F0 +ENCODING 53488 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD0F1 +ENCODING 53489 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD0F2 +ENCODING 53490 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD0F3 +ENCODING 53491 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD0F4 +ENCODING 53492 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD0F5 +ENCODING 53493 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD0F6 +ENCODING 53494 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD0F7 +ENCODING 53495 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FF3C +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD0F8 +ENCODING 53496 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +800E +8008 +FF08 +8008 +8008 +800E +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniD0F9 +ENCODING 53497 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD0FA +ENCODING 53498 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD0FB +ENCODING 53499 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD0FC +ENCODING 53500 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +8008 +800E +FF08 +8008 +8008 +FF0E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD0FD +ENCODING 53501 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD0FE +ENCODING 53502 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD0FF +ENCODING 53503 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD100 +ENCODING 53504 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD101 +ENCODING 53505 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD102 +ENCODING 53506 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD103 +ENCODING 53507 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD104 +ENCODING 53508 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD105 +ENCODING 53509 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD106 +ENCODING 53510 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD107 +ENCODING 53511 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD108 +ENCODING 53512 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD109 +ENCODING 53513 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD10A +ENCODING 53514 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD10B +ENCODING 53515 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD10C +ENCODING 53516 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD10D +ENCODING 53517 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD10E +ENCODING 53518 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD10F +ENCODING 53519 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD110 +ENCODING 53520 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD111 +ENCODING 53521 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD112 +ENCODING 53522 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD113 +ENCODING 53523 +BBX 15 16 0 -2 +BITMAP +0008 +FF08 +800E +8008 +FF08 +800E +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD114 +ENCODING 53524 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +803C +8024 +8024 +FF24 +8024 +803C +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniD115 +ENCODING 53525 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD116 +ENCODING 53526 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD117 +ENCODING 53527 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD118 +ENCODING 53528 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +8024 +803C +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD119 +ENCODING 53529 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD11A +ENCODING 53530 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD11B +ENCODING 53531 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD11C +ENCODING 53532 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD11D +ENCODING 53533 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD11E +ENCODING 53534 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD11F +ENCODING 53535 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD120 +ENCODING 53536 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD121 +ENCODING 53537 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD122 +ENCODING 53538 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD123 +ENCODING 53539 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD124 +ENCODING 53540 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD125 +ENCODING 53541 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD126 +ENCODING 53542 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD127 +ENCODING 53543 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD128 +ENCODING 53544 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD129 +ENCODING 53545 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD12A +ENCODING 53546 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD12B +ENCODING 53547 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD12C +ENCODING 53548 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD12D +ENCODING 53549 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD12E +ENCODING 53550 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD12F +ENCODING 53551 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +803C +8024 +FF24 +803C +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD130 +ENCODING 53552 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF78 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniD131 +ENCODING 53553 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD132 +ENCODING 53554 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD133 +ENCODING 53555 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD134 +ENCODING 53556 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD135 +ENCODING 53557 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD136 +ENCODING 53558 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD137 +ENCODING 53559 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD138 +ENCODING 53560 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD139 +ENCODING 53561 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD13A +ENCODING 53562 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD13B +ENCODING 53563 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD13C +ENCODING 53564 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD13D +ENCODING 53565 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD13E +ENCODING 53566 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD13F +ENCODING 53567 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD140 +ENCODING 53568 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD141 +ENCODING 53569 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD142 +ENCODING 53570 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD143 +ENCODING 53571 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD144 +ENCODING 53572 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD145 +ENCODING 53573 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD146 +ENCODING 53574 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD147 +ENCODING 53575 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD148 +ENCODING 53576 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD149 +ENCODING 53577 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD14A +ENCODING 53578 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD14B +ENCODING 53579 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF78 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD14C +ENCODING 53580 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +8024 +8024 +81E4 +FF24 +8024 +8024 +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniD14D +ENCODING 53581 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD14E +ENCODING 53582 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD14F +ENCODING 53583 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD150 +ENCODING 53584 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD151 +ENCODING 53585 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD152 +ENCODING 53586 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD153 +ENCODING 53587 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD154 +ENCODING 53588 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD155 +ENCODING 53589 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD156 +ENCODING 53590 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD157 +ENCODING 53591 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD158 +ENCODING 53592 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD159 +ENCODING 53593 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD15A +ENCODING 53594 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD15B +ENCODING 53595 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD15C +ENCODING 53596 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD15D +ENCODING 53597 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD15E +ENCODING 53598 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD15F +ENCODING 53599 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD160 +ENCODING 53600 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD161 +ENCODING 53601 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD162 +ENCODING 53602 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD163 +ENCODING 53603 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD164 +ENCODING 53604 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD165 +ENCODING 53605 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD166 +ENCODING 53606 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD167 +ENCODING 53607 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +FFE4 +8024 +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD168 +ENCODING 53608 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8078 +8008 +FF08 +8008 +8078 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniD169 +ENCODING 53609 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD16A +ENCODING 53610 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD16B +ENCODING 53611 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD16C +ENCODING 53612 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD16D +ENCODING 53613 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD16E +ENCODING 53614 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD16F +ENCODING 53615 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD170 +ENCODING 53616 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD171 +ENCODING 53617 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD172 +ENCODING 53618 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD173 +ENCODING 53619 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD174 +ENCODING 53620 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD175 +ENCODING 53621 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD176 +ENCODING 53622 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD177 +ENCODING 53623 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD178 +ENCODING 53624 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD179 +ENCODING 53625 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD17A +ENCODING 53626 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD17B +ENCODING 53627 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD17C +ENCODING 53628 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD17D +ENCODING 53629 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD17E +ENCODING 53630 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD17F +ENCODING 53631 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD180 +ENCODING 53632 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD181 +ENCODING 53633 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD182 +ENCODING 53634 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD183 +ENCODING 53635 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8078 +FF08 +8008 +8078 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD184 +ENCODING 53636 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +8024 +8024 +81E4 +8024 +FF24 +8024 +81E4 +8024 +8024 +8024 +FF24 +0024 +0024 +ENDCHAR +STARTCHAR uniD185 +ENCODING 53637 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD186 +ENCODING 53638 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD187 +ENCODING 53639 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD188 +ENCODING 53640 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD189 +ENCODING 53641 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD18A +ENCODING 53642 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD18B +ENCODING 53643 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD18C +ENCODING 53644 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD18D +ENCODING 53645 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD18E +ENCODING 53646 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD18F +ENCODING 53647 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD190 +ENCODING 53648 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD191 +ENCODING 53649 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD192 +ENCODING 53650 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD193 +ENCODING 53651 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD194 +ENCODING 53652 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD195 +ENCODING 53653 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD196 +ENCODING 53654 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD197 +ENCODING 53655 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD198 +ENCODING 53656 +BBX 15 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD199 +ENCODING 53657 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD19A +ENCODING 53658 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD19B +ENCODING 53659 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD19C +ENCODING 53660 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD19D +ENCODING 53661 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD19E +ENCODING 53662 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD19F +ENCODING 53663 +BBX 14 16 0 -2 +BITMAP +0024 +FF24 +8024 +80E4 +FF24 +80E4 +8024 +FF24 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD1A0 +ENCODING 53664 +BBX 15 13 0 0 +BITMAP +3FF8 +2000 +2000 +3FF8 +2000 +2000 +2000 +3FF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniD1A1 +ENCODING 53665 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD1A2 +ENCODING 53666 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD1A3 +ENCODING 53667 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD1A4 +ENCODING 53668 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD1A5 +ENCODING 53669 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD1A6 +ENCODING 53670 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD1A7 +ENCODING 53671 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD1A8 +ENCODING 53672 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD1A9 +ENCODING 53673 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD1AA +ENCODING 53674 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD1AB +ENCODING 53675 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD1AC +ENCODING 53676 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD1AD +ENCODING 53677 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD1AE +ENCODING 53678 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD1AF +ENCODING 53679 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD1B0 +ENCODING 53680 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD1B1 +ENCODING 53681 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD1B2 +ENCODING 53682 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD1B3 +ENCODING 53683 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD1B4 +ENCODING 53684 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD1B5 +ENCODING 53685 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD1B6 +ENCODING 53686 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD1B7 +ENCODING 53687 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD1B8 +ENCODING 53688 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD1B9 +ENCODING 53689 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD1BA +ENCODING 53690 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD1BB +ENCODING 53691 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD1BC +ENCODING 53692 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +4008 +7F08 +4008 +4008 +400E +7F08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniD1BD +ENCODING 53693 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD1BE +ENCODING 53694 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD1BF +ENCODING 53695 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD1C0 +ENCODING 53696 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD1C1 +ENCODING 53697 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD1C2 +ENCODING 53698 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD1C3 +ENCODING 53699 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD1C4 +ENCODING 53700 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD1C5 +ENCODING 53701 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD1C6 +ENCODING 53702 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD1C7 +ENCODING 53703 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD1C8 +ENCODING 53704 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD1C9 +ENCODING 53705 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD1CA +ENCODING 53706 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD1CB +ENCODING 53707 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD1CC +ENCODING 53708 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD1CD +ENCODING 53709 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD1CE +ENCODING 53710 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD1CF +ENCODING 53711 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD1D0 +ENCODING 53712 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD1D1 +ENCODING 53713 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD1D2 +ENCODING 53714 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD1D3 +ENCODING 53715 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD1D4 +ENCODING 53716 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD1D5 +ENCODING 53717 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD1D6 +ENCODING 53718 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD1D7 +ENCODING 53719 +BBX 15 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +400E +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD1D8 +ENCODING 53720 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +4024 +7F24 +4024 +4024 +403C +7F24 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniD1D9 +ENCODING 53721 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD1DA +ENCODING 53722 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD1DB +ENCODING 53723 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD1DC +ENCODING 53724 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD1DD +ENCODING 53725 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD1DE +ENCODING 53726 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD1DF +ENCODING 53727 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD1E0 +ENCODING 53728 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD1E1 +ENCODING 53729 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD1E2 +ENCODING 53730 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD1E3 +ENCODING 53731 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD1E4 +ENCODING 53732 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD1E5 +ENCODING 53733 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD1E6 +ENCODING 53734 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD1E7 +ENCODING 53735 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD1E8 +ENCODING 53736 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD1E9 +ENCODING 53737 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD1EA +ENCODING 53738 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD1EB +ENCODING 53739 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD1EC +ENCODING 53740 +BBX 15 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD1ED +ENCODING 53741 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD1EE +ENCODING 53742 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD1EF +ENCODING 53743 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD1F0 +ENCODING 53744 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD1F1 +ENCODING 53745 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD1F2 +ENCODING 53746 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD1F3 +ENCODING 53747 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +403C +7F24 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD1F4 +ENCODING 53748 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +4008 +7F08 +4008 +4008 +4008 +7F08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniD1F5 +ENCODING 53749 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD1F6 +ENCODING 53750 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD1F7 +ENCODING 53751 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD1F8 +ENCODING 53752 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD1F9 +ENCODING 53753 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD1FA +ENCODING 53754 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD1FB +ENCODING 53755 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD1FC +ENCODING 53756 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD1FD +ENCODING 53757 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD1FE +ENCODING 53758 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD1FF +ENCODING 53759 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD200 +ENCODING 53760 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD201 +ENCODING 53761 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD202 +ENCODING 53762 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD203 +ENCODING 53763 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD204 +ENCODING 53764 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD205 +ENCODING 53765 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD206 +ENCODING 53766 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD207 +ENCODING 53767 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD208 +ENCODING 53768 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD209 +ENCODING 53769 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD20A +ENCODING 53770 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD20B +ENCODING 53771 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD20C +ENCODING 53772 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD20D +ENCODING 53773 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD20E +ENCODING 53774 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD20F +ENCODING 53775 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD210 +ENCODING 53776 +BBX 15 13 0 0 +BITMAP +3FF8 +2000 +2000 +3FF8 +2000 +2000 +2000 +3FF8 +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniD211 +ENCODING 53777 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD212 +ENCODING 53778 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD213 +ENCODING 53779 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD214 +ENCODING 53780 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD215 +ENCODING 53781 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD216 +ENCODING 53782 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD217 +ENCODING 53783 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD218 +ENCODING 53784 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD219 +ENCODING 53785 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD21A +ENCODING 53786 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD21B +ENCODING 53787 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD21C +ENCODING 53788 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD21D +ENCODING 53789 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD21E +ENCODING 53790 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD21F +ENCODING 53791 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD220 +ENCODING 53792 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD221 +ENCODING 53793 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD222 +ENCODING 53794 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD223 +ENCODING 53795 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD224 +ENCODING 53796 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD225 +ENCODING 53797 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD226 +ENCODING 53798 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD227 +ENCODING 53799 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD228 +ENCODING 53800 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD229 +ENCODING 53801 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD22A +ENCODING 53802 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD22B +ENCODING 53803 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD22C +ENCODING 53804 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniD22D +ENCODING 53805 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD22E +ENCODING 53806 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD22F +ENCODING 53807 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD230 +ENCODING 53808 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD231 +ENCODING 53809 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD232 +ENCODING 53810 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD233 +ENCODING 53811 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD234 +ENCODING 53812 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD235 +ENCODING 53813 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD236 +ENCODING 53814 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD237 +ENCODING 53815 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD238 +ENCODING 53816 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD239 +ENCODING 53817 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD23A +ENCODING 53818 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD23B +ENCODING 53819 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD23C +ENCODING 53820 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD23D +ENCODING 53821 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD23E +ENCODING 53822 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD23F +ENCODING 53823 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD240 +ENCODING 53824 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD241 +ENCODING 53825 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD242 +ENCODING 53826 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD243 +ENCODING 53827 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD244 +ENCODING 53828 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD245 +ENCODING 53829 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD246 +ENCODING 53830 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD247 +ENCODING 53831 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD248 +ENCODING 53832 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniD249 +ENCODING 53833 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD24A +ENCODING 53834 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD24B +ENCODING 53835 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD24C +ENCODING 53836 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD24D +ENCODING 53837 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD24E +ENCODING 53838 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD24F +ENCODING 53839 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD250 +ENCODING 53840 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD251 +ENCODING 53841 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD252 +ENCODING 53842 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD253 +ENCODING 53843 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD254 +ENCODING 53844 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD255 +ENCODING 53845 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD256 +ENCODING 53846 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD257 +ENCODING 53847 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD258 +ENCODING 53848 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD259 +ENCODING 53849 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD25A +ENCODING 53850 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD25B +ENCODING 53851 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD25C +ENCODING 53852 +BBX 14 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD25D +ENCODING 53853 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD25E +ENCODING 53854 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD25F +ENCODING 53855 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD260 +ENCODING 53856 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD261 +ENCODING 53857 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD262 +ENCODING 53858 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD263 +ENCODING 53859 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD264 +ENCODING 53860 +BBX 14 16 0 -2 +BITMAP +0024 +7F24 +4024 +7F24 +4024 +4024 +7F24 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniD265 +ENCODING 53861 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD266 +ENCODING 53862 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD267 +ENCODING 53863 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD268 +ENCODING 53864 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD269 +ENCODING 53865 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD26A +ENCODING 53866 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD26B +ENCODING 53867 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD26C +ENCODING 53868 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD26D +ENCODING 53869 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD26E +ENCODING 53870 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD26F +ENCODING 53871 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD270 +ENCODING 53872 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD271 +ENCODING 53873 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD272 +ENCODING 53874 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD273 +ENCODING 53875 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD274 +ENCODING 53876 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD275 +ENCODING 53877 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD276 +ENCODING 53878 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD277 +ENCODING 53879 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD278 +ENCODING 53880 +BBX 15 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD279 +ENCODING 53881 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD27A +ENCODING 53882 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD27B +ENCODING 53883 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD27C +ENCODING 53884 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD27D +ENCODING 53885 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD27E +ENCODING 53886 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD27F +ENCODING 53887 +BBX 14 16 0 -2 +BITMAP +7F24 +4024 +7F24 +4024 +7F24 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD280 +ENCODING 53888 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +4008 +7F08 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniD281 +ENCODING 53889 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD282 +ENCODING 53890 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD283 +ENCODING 53891 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD284 +ENCODING 53892 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD285 +ENCODING 53893 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD286 +ENCODING 53894 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD287 +ENCODING 53895 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD288 +ENCODING 53896 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD289 +ENCODING 53897 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD28A +ENCODING 53898 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD28B +ENCODING 53899 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD28C +ENCODING 53900 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD28D +ENCODING 53901 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD28E +ENCODING 53902 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD28F +ENCODING 53903 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD290 +ENCODING 53904 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD291 +ENCODING 53905 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD292 +ENCODING 53906 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD293 +ENCODING 53907 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD294 +ENCODING 53908 +BBX 14 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD295 +ENCODING 53909 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD296 +ENCODING 53910 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD297 +ENCODING 53911 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD298 +ENCODING 53912 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD299 +ENCODING 53913 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD29A +ENCODING 53914 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD29B +ENCODING 53915 +BBX 13 16 0 -2 +BITMAP +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD29C +ENCODING 53916 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniD29D +ENCODING 53917 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD29E +ENCODING 53918 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD29F +ENCODING 53919 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD2A0 +ENCODING 53920 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD2A1 +ENCODING 53921 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD2A2 +ENCODING 53922 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD2A3 +ENCODING 53923 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD2A4 +ENCODING 53924 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD2A5 +ENCODING 53925 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD2A6 +ENCODING 53926 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD2A7 +ENCODING 53927 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD2A8 +ENCODING 53928 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD2A9 +ENCODING 53929 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD2AA +ENCODING 53930 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD2AB +ENCODING 53931 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD2AC +ENCODING 53932 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD2AD +ENCODING 53933 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD2AE +ENCODING 53934 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD2AF +ENCODING 53935 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD2B0 +ENCODING 53936 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD2B1 +ENCODING 53937 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD2B2 +ENCODING 53938 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD2B3 +ENCODING 53939 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD2B4 +ENCODING 53940 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD2B5 +ENCODING 53941 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD2B6 +ENCODING 53942 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD2B7 +ENCODING 53943 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD2B8 +ENCODING 53944 +BBX 15 13 0 0 +BITMAP +3FF8 +2000 +2000 +3FF8 +2000 +2000 +2000 +3FF8 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniD2B9 +ENCODING 53945 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD2BA +ENCODING 53946 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD2BB +ENCODING 53947 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD2BC +ENCODING 53948 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD2BD +ENCODING 53949 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD2BE +ENCODING 53950 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD2BF +ENCODING 53951 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD2C0 +ENCODING 53952 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD2C1 +ENCODING 53953 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD2C2 +ENCODING 53954 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD2C3 +ENCODING 53955 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD2C4 +ENCODING 53956 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD2C5 +ENCODING 53957 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD2C6 +ENCODING 53958 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD2C7 +ENCODING 53959 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD2C8 +ENCODING 53960 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD2C9 +ENCODING 53961 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD2CA +ENCODING 53962 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD2CB +ENCODING 53963 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD2CC +ENCODING 53964 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD2CD +ENCODING 53965 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD2CE +ENCODING 53966 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD2CF +ENCODING 53967 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD2D0 +ENCODING 53968 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD2D1 +ENCODING 53969 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD2D2 +ENCODING 53970 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD2D3 +ENCODING 53971 +BBX 15 15 0 -2 +BITMAP +3FF8 +2000 +3FF8 +2000 +3FF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD2D4 +ENCODING 53972 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +4008 +7F08 +4008 +4008 +4008 +7F08 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniD2D5 +ENCODING 53973 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD2D6 +ENCODING 53974 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD2D7 +ENCODING 53975 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD2D8 +ENCODING 53976 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD2D9 +ENCODING 53977 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD2DA +ENCODING 53978 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD2DB +ENCODING 53979 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD2DC +ENCODING 53980 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD2DD +ENCODING 53981 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD2DE +ENCODING 53982 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD2DF +ENCODING 53983 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD2E0 +ENCODING 53984 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD2E1 +ENCODING 53985 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD2E2 +ENCODING 53986 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD2E3 +ENCODING 53987 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD2E4 +ENCODING 53988 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD2E5 +ENCODING 53989 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD2E6 +ENCODING 53990 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD2E7 +ENCODING 53991 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD2E8 +ENCODING 53992 +BBX 14 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD2E9 +ENCODING 53993 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD2EA +ENCODING 53994 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD2EB +ENCODING 53995 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD2EC +ENCODING 53996 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD2ED +ENCODING 53997 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD2EE +ENCODING 53998 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD2EF +ENCODING 53999 +BBX 13 16 0 -2 +BITMAP +0008 +7F08 +4008 +7F08 +4008 +7F08 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD2F0 +ENCODING 54000 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +8008 +8008 +8008 +8008 +8008 +FF08 +0008 +0008 +ENDCHAR +STARTCHAR uniD2F1 +ENCODING 54001 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD2F2 +ENCODING 54002 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD2F3 +ENCODING 54003 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD2F4 +ENCODING 54004 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD2F5 +ENCODING 54005 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD2F6 +ENCODING 54006 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD2F7 +ENCODING 54007 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD2F8 +ENCODING 54008 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD2F9 +ENCODING 54009 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD2FA +ENCODING 54010 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD2FB +ENCODING 54011 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD2FC +ENCODING 54012 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD2FD +ENCODING 54013 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD2FE +ENCODING 54014 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD2FF +ENCODING 54015 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD300 +ENCODING 54016 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD301 +ENCODING 54017 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD302 +ENCODING 54018 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD303 +ENCODING 54019 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD304 +ENCODING 54020 +BBX 14 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD305 +ENCODING 54021 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD306 +ENCODING 54022 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD307 +ENCODING 54023 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD308 +ENCODING 54024 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD309 +ENCODING 54025 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD30A +ENCODING 54026 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD30B +ENCODING 54027 +BBX 13 16 0 -2 +BITMAP +0008 +FF08 +8008 +8008 +FF08 +8008 +8008 +FF08 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD30C +ENCODING 54028 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +220E +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0008 +ENDCHAR +STARTCHAR uniD30D +ENCODING 54029 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD30E +ENCODING 54030 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD30F +ENCODING 54031 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD310 +ENCODING 54032 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +220E +2208 +FF88 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD311 +ENCODING 54033 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD312 +ENCODING 54034 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD313 +ENCODING 54035 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD314 +ENCODING 54036 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD315 +ENCODING 54037 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD316 +ENCODING 54038 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD317 +ENCODING 54039 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD318 +ENCODING 54040 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD319 +ENCODING 54041 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD31A +ENCODING 54042 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD31B +ENCODING 54043 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD31C +ENCODING 54044 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD31D +ENCODING 54045 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD31E +ENCODING 54046 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD31F +ENCODING 54047 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD320 +ENCODING 54048 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD321 +ENCODING 54049 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD322 +ENCODING 54050 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD323 +ENCODING 54051 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD324 +ENCODING 54052 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD325 +ENCODING 54053 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD326 +ENCODING 54054 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD327 +ENCODING 54055 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD328 +ENCODING 54056 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +2224 +2224 +2224 +223C +2224 +2224 +2224 +2224 +2224 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniD329 +ENCODING 54057 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD32A +ENCODING 54058 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD32B +ENCODING 54059 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD32C +ENCODING 54060 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD32D +ENCODING 54061 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD32E +ENCODING 54062 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD32F +ENCODING 54063 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD330 +ENCODING 54064 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD331 +ENCODING 54065 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD332 +ENCODING 54066 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD333 +ENCODING 54067 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD334 +ENCODING 54068 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD335 +ENCODING 54069 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD336 +ENCODING 54070 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD337 +ENCODING 54071 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD338 +ENCODING 54072 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD339 +ENCODING 54073 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD33A +ENCODING 54074 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD33B +ENCODING 54075 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD33C +ENCODING 54076 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD33D +ENCODING 54077 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD33E +ENCODING 54078 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD33F +ENCODING 54079 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD340 +ENCODING 54080 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD341 +ENCODING 54081 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD342 +ENCODING 54082 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD343 +ENCODING 54083 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD344 +ENCODING 54084 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +220E +2208 +2208 +2208 +2208 +220E +2208 +2208 +FF88 +0008 +0008 +ENDCHAR +STARTCHAR uniD345 +ENCODING 54085 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD346 +ENCODING 54086 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD347 +ENCODING 54087 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD348 +ENCODING 54088 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +220E +2208 +2208 +2208 +FF8E +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD349 +ENCODING 54089 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD34A +ENCODING 54090 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD34B +ENCODING 54091 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD34C +ENCODING 54092 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD34D +ENCODING 54093 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD34E +ENCODING 54094 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD34F +ENCODING 54095 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD350 +ENCODING 54096 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD351 +ENCODING 54097 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD352 +ENCODING 54098 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD353 +ENCODING 54099 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD354 +ENCODING 54100 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD355 +ENCODING 54101 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD356 +ENCODING 54102 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD357 +ENCODING 54103 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD358 +ENCODING 54104 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD359 +ENCODING 54105 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD35A +ENCODING 54106 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD35B +ENCODING 54107 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD35C +ENCODING 54108 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD35D +ENCODING 54109 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD35E +ENCODING 54110 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD35F +ENCODING 54111 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +220E +2208 +2208 +220E +2208 +FF88 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD360 +ENCODING 54112 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +223C +2224 +2224 +2224 +2224 +223C +2224 +2224 +2224 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniD361 +ENCODING 54113 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD362 +ENCODING 54114 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD363 +ENCODING 54115 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD364 +ENCODING 54116 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +2224 +223C +FFA4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD365 +ENCODING 54117 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD366 +ENCODING 54118 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD367 +ENCODING 54119 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD368 +ENCODING 54120 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD369 +ENCODING 54121 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD36A +ENCODING 54122 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD36B +ENCODING 54123 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD36C +ENCODING 54124 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD36D +ENCODING 54125 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD36E +ENCODING 54126 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD36F +ENCODING 54127 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD370 +ENCODING 54128 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD371 +ENCODING 54129 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD372 +ENCODING 54130 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD373 +ENCODING 54131 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD374 +ENCODING 54132 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD375 +ENCODING 54133 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD376 +ENCODING 54134 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD377 +ENCODING 54135 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD378 +ENCODING 54136 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD379 +ENCODING 54137 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD37A +ENCODING 54138 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD37B +ENCODING 54139 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +223C +2224 +2224 +223C +2224 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD37C +ENCODING 54140 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +2278 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0008 +ENDCHAR +STARTCHAR uniD37D +ENCODING 54141 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD37E +ENCODING 54142 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD37F +ENCODING 54143 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD380 +ENCODING 54144 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD381 +ENCODING 54145 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD382 +ENCODING 54146 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD383 +ENCODING 54147 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD384 +ENCODING 54148 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD385 +ENCODING 54149 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD386 +ENCODING 54150 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD387 +ENCODING 54151 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD388 +ENCODING 54152 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD389 +ENCODING 54153 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD38A +ENCODING 54154 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD38B +ENCODING 54155 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD38C +ENCODING 54156 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD38D +ENCODING 54157 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD38E +ENCODING 54158 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD38F +ENCODING 54159 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD390 +ENCODING 54160 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD391 +ENCODING 54161 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD392 +ENCODING 54162 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD393 +ENCODING 54163 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD394 +ENCODING 54164 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD395 +ENCODING 54165 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD396 +ENCODING 54166 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD397 +ENCODING 54167 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2278 +2208 +2208 +FF88 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD398 +ENCODING 54168 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +2224 +2224 +23E4 +2224 +2224 +2224 +2224 +2224 +2224 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniD399 +ENCODING 54169 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD39A +ENCODING 54170 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD39B +ENCODING 54171 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD39C +ENCODING 54172 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD39D +ENCODING 54173 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD39E +ENCODING 54174 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD39F +ENCODING 54175 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD3A0 +ENCODING 54176 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD3A1 +ENCODING 54177 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD3A2 +ENCODING 54178 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD3A3 +ENCODING 54179 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD3A4 +ENCODING 54180 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD3A5 +ENCODING 54181 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD3A6 +ENCODING 54182 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD3A7 +ENCODING 54183 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD3A8 +ENCODING 54184 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD3A9 +ENCODING 54185 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD3AA +ENCODING 54186 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD3AB +ENCODING 54187 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD3AC +ENCODING 54188 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD3AD +ENCODING 54189 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD3AE +ENCODING 54190 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD3AF +ENCODING 54191 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD3B0 +ENCODING 54192 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD3B1 +ENCODING 54193 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD3B2 +ENCODING 54194 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD3B3 +ENCODING 54195 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +22E4 +2224 +2224 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD3B4 +ENCODING 54196 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2278 +2208 +2208 +2208 +2278 +2208 +2208 +2208 +FF88 +0008 +0008 +ENDCHAR +STARTCHAR uniD3B5 +ENCODING 54197 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD3B6 +ENCODING 54198 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD3B7 +ENCODING 54199 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD3B8 +ENCODING 54200 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD3B9 +ENCODING 54201 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD3BA +ENCODING 54202 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD3BB +ENCODING 54203 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD3BC +ENCODING 54204 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD3BD +ENCODING 54205 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD3BE +ENCODING 54206 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD3BF +ENCODING 54207 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD3C0 +ENCODING 54208 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD3C1 +ENCODING 54209 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD3C2 +ENCODING 54210 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD3C3 +ENCODING 54211 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD3C4 +ENCODING 54212 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD3C5 +ENCODING 54213 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD3C6 +ENCODING 54214 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD3C7 +ENCODING 54215 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD3C8 +ENCODING 54216 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD3C9 +ENCODING 54217 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD3CA +ENCODING 54218 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD3CB +ENCODING 54219 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD3CC +ENCODING 54220 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD3CD +ENCODING 54221 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD3CE +ENCODING 54222 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD3CF +ENCODING 54223 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2278 +2208 +2208 +2278 +FF88 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD3D0 +ENCODING 54224 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +2224 +23E4 +2224 +2224 +2224 +23E4 +2224 +2224 +2224 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniD3D1 +ENCODING 54225 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD3D2 +ENCODING 54226 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD3D3 +ENCODING 54227 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD3D4 +ENCODING 54228 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD3D5 +ENCODING 54229 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD3D6 +ENCODING 54230 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD3D7 +ENCODING 54231 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD3D8 +ENCODING 54232 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD3D9 +ENCODING 54233 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD3DA +ENCODING 54234 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD3DB +ENCODING 54235 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD3DC +ENCODING 54236 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD3DD +ENCODING 54237 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD3DE +ENCODING 54238 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD3DF +ENCODING 54239 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD3E0 +ENCODING 54240 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD3E1 +ENCODING 54241 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD3E2 +ENCODING 54242 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD3E3 +ENCODING 54243 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD3E4 +ENCODING 54244 +BBX 15 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD3E5 +ENCODING 54245 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD3E6 +ENCODING 54246 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD3E7 +ENCODING 54247 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD3E8 +ENCODING 54248 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD3E9 +ENCODING 54249 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD3EA +ENCODING 54250 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD3EB +ENCODING 54251 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +22E4 +2224 +22E4 +2224 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD3EC +ENCODING 54252 +BBX 15 13 0 0 +BITMAP +3FF8 +0820 +0820 +0820 +0820 +0820 +0820 +3FF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniD3ED +ENCODING 54253 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD3EE +ENCODING 54254 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD3EF +ENCODING 54255 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD3F0 +ENCODING 54256 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD3F1 +ENCODING 54257 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD3F2 +ENCODING 54258 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD3F3 +ENCODING 54259 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD3F4 +ENCODING 54260 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD3F5 +ENCODING 54261 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD3F6 +ENCODING 54262 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD3F7 +ENCODING 54263 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD3F8 +ENCODING 54264 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD3F9 +ENCODING 54265 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD3FA +ENCODING 54266 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD3FB +ENCODING 54267 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD3FC +ENCODING 54268 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD3FD +ENCODING 54269 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD3FE +ENCODING 54270 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD3FF +ENCODING 54271 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD400 +ENCODING 54272 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD401 +ENCODING 54273 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD402 +ENCODING 54274 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD403 +ENCODING 54275 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD404 +ENCODING 54276 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD405 +ENCODING 54277 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD406 +ENCODING 54278 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD407 +ENCODING 54279 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0100 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD408 +ENCODING 54280 +BBX 15 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +220E +FF88 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniD409 +ENCODING 54281 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD40A +ENCODING 54282 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD40B +ENCODING 54283 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD40C +ENCODING 54284 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD40D +ENCODING 54285 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD40E +ENCODING 54286 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD40F +ENCODING 54287 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD410 +ENCODING 54288 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD411 +ENCODING 54289 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD412 +ENCODING 54290 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD413 +ENCODING 54291 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD414 +ENCODING 54292 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD415 +ENCODING 54293 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD416 +ENCODING 54294 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD417 +ENCODING 54295 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD418 +ENCODING 54296 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD419 +ENCODING 54297 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD41A +ENCODING 54298 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD41B +ENCODING 54299 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD41C +ENCODING 54300 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD41D +ENCODING 54301 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD41E +ENCODING 54302 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD41F +ENCODING 54303 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD420 +ENCODING 54304 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD421 +ENCODING 54305 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD422 +ENCODING 54306 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD423 +ENCODING 54307 +BBX 15 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F8E +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD424 +ENCODING 54308 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +2224 +2224 +2224 +223C +FFA4 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniD425 +ENCODING 54309 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD426 +ENCODING 54310 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD427 +ENCODING 54311 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD428 +ENCODING 54312 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD429 +ENCODING 54313 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD42A +ENCODING 54314 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD42B +ENCODING 54315 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD42C +ENCODING 54316 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD42D +ENCODING 54317 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD42E +ENCODING 54318 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD42F +ENCODING 54319 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD430 +ENCODING 54320 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD431 +ENCODING 54321 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD432 +ENCODING 54322 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD433 +ENCODING 54323 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD434 +ENCODING 54324 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD435 +ENCODING 54325 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD436 +ENCODING 54326 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD437 +ENCODING 54327 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD438 +ENCODING 54328 +BBX 15 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD439 +ENCODING 54329 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD43A +ENCODING 54330 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD43B +ENCODING 54331 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD43C +ENCODING 54332 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD43D +ENCODING 54333 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD43E +ENCODING 54334 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD43F +ENCODING 54335 +BBX 14 16 0 -2 +BITMAP +0024 +7FA4 +1224 +1224 +7FBC +0824 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD440 +ENCODING 54336 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +2208 +FF88 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniD441 +ENCODING 54337 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD442 +ENCODING 54338 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD443 +ENCODING 54339 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD444 +ENCODING 54340 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD445 +ENCODING 54341 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD446 +ENCODING 54342 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD447 +ENCODING 54343 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD448 +ENCODING 54344 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD449 +ENCODING 54345 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD44A +ENCODING 54346 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD44B +ENCODING 54347 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD44C +ENCODING 54348 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD44D +ENCODING 54349 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD44E +ENCODING 54350 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD44F +ENCODING 54351 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD450 +ENCODING 54352 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD451 +ENCODING 54353 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD452 +ENCODING 54354 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD453 +ENCODING 54355 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD454 +ENCODING 54356 +BBX 14 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD455 +ENCODING 54357 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD456 +ENCODING 54358 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD457 +ENCODING 54359 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD458 +ENCODING 54360 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD459 +ENCODING 54361 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD45A +ENCODING 54362 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD45B +ENCODING 54363 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0808 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD45C +ENCODING 54364 +BBX 15 13 0 0 +BITMAP +3FF8 +0820 +0820 +0820 +0820 +0820 +0820 +3FF8 +0820 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniD45D +ENCODING 54365 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD45E +ENCODING 54366 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD45F +ENCODING 54367 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD460 +ENCODING 54368 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD461 +ENCODING 54369 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD462 +ENCODING 54370 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD463 +ENCODING 54371 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD464 +ENCODING 54372 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD465 +ENCODING 54373 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD466 +ENCODING 54374 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD467 +ENCODING 54375 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD468 +ENCODING 54376 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD469 +ENCODING 54377 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD46A +ENCODING 54378 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD46B +ENCODING 54379 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD46C +ENCODING 54380 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD46D +ENCODING 54381 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD46E +ENCODING 54382 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD46F +ENCODING 54383 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD470 +ENCODING 54384 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD471 +ENCODING 54385 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD472 +ENCODING 54386 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD473 +ENCODING 54387 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD474 +ENCODING 54388 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD475 +ENCODING 54389 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD476 +ENCODING 54390 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD477 +ENCODING 54391 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0440 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD478 +ENCODING 54392 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +0820 +3FF8 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniD479 +ENCODING 54393 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD47A +ENCODING 54394 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD47B +ENCODING 54395 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD47C +ENCODING 54396 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD47D +ENCODING 54397 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD47E +ENCODING 54398 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD47F +ENCODING 54399 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD480 +ENCODING 54400 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD481 +ENCODING 54401 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD482 +ENCODING 54402 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD483 +ENCODING 54403 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD484 +ENCODING 54404 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD485 +ENCODING 54405 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD486 +ENCODING 54406 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD487 +ENCODING 54407 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD488 +ENCODING 54408 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD489 +ENCODING 54409 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD48A +ENCODING 54410 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD48B +ENCODING 54411 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD48C +ENCODING 54412 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD48D +ENCODING 54413 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD48E +ENCODING 54414 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD48F +ENCODING 54415 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD490 +ENCODING 54416 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD491 +ENCODING 54417 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD492 +ENCODING 54418 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD493 +ENCODING 54419 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD494 +ENCODING 54420 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +FF88 +0008 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniD495 +ENCODING 54421 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD496 +ENCODING 54422 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD497 +ENCODING 54423 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD498 +ENCODING 54424 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD499 +ENCODING 54425 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD49A +ENCODING 54426 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD49B +ENCODING 54427 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD49C +ENCODING 54428 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD49D +ENCODING 54429 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD49E +ENCODING 54430 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD49F +ENCODING 54431 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD4A0 +ENCODING 54432 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD4A1 +ENCODING 54433 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD4A2 +ENCODING 54434 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD4A3 +ENCODING 54435 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD4A4 +ENCODING 54436 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD4A5 +ENCODING 54437 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD4A6 +ENCODING 54438 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD4A7 +ENCODING 54439 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD4A8 +ENCODING 54440 +BBX 14 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD4A9 +ENCODING 54441 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD4AA +ENCODING 54442 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD4AB +ENCODING 54443 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD4AC +ENCODING 54444 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD4AD +ENCODING 54445 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD4AE +ENCODING 54446 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD4AF +ENCODING 54447 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD4B0 +ENCODING 54448 +BBX 14 16 0 -2 +BITMAP +0024 +FFA4 +2224 +2224 +2224 +2224 +FFA4 +0024 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniD4B1 +ENCODING 54449 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD4B2 +ENCODING 54450 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD4B3 +ENCODING 54451 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD4B4 +ENCODING 54452 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD4B5 +ENCODING 54453 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD4B6 +ENCODING 54454 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD4B7 +ENCODING 54455 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD4B8 +ENCODING 54456 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD4B9 +ENCODING 54457 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD4BA +ENCODING 54458 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD4BB +ENCODING 54459 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD4BC +ENCODING 54460 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD4BD +ENCODING 54461 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD4BE +ENCODING 54462 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD4BF +ENCODING 54463 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD4C0 +ENCODING 54464 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD4C1 +ENCODING 54465 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD4C2 +ENCODING 54466 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD4C3 +ENCODING 54467 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD4C4 +ENCODING 54468 +BBX 15 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD4C5 +ENCODING 54469 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD4C6 +ENCODING 54470 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD4C7 +ENCODING 54471 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD4C8 +ENCODING 54472 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD4C9 +ENCODING 54473 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD4CA +ENCODING 54474 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD4CB +ENCODING 54475 +BBX 14 16 0 -2 +BITMAP +7FA4 +1224 +1224 +7FA4 +0024 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD4CC +ENCODING 54476 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +FF88 +0008 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniD4CD +ENCODING 54477 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD4CE +ENCODING 54478 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD4CF +ENCODING 54479 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD4D0 +ENCODING 54480 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD4D1 +ENCODING 54481 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD4D2 +ENCODING 54482 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD4D3 +ENCODING 54483 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD4D4 +ENCODING 54484 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD4D5 +ENCODING 54485 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD4D6 +ENCODING 54486 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD4D7 +ENCODING 54487 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD4D8 +ENCODING 54488 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD4D9 +ENCODING 54489 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD4DA +ENCODING 54490 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD4DB +ENCODING 54491 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD4DC +ENCODING 54492 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD4DD +ENCODING 54493 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD4DE +ENCODING 54494 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD4DF +ENCODING 54495 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD4E0 +ENCODING 54496 +BBX 14 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD4E1 +ENCODING 54497 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD4E2 +ENCODING 54498 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD4E3 +ENCODING 54499 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD4E4 +ENCODING 54500 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD4E5 +ENCODING 54501 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD4E6 +ENCODING 54502 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD4E7 +ENCODING 54503 +BBX 13 16 0 -2 +BITMAP +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD4E8 +ENCODING 54504 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +0820 +3FF8 +0000 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniD4E9 +ENCODING 54505 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD4EA +ENCODING 54506 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD4EB +ENCODING 54507 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD4EC +ENCODING 54508 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD4ED +ENCODING 54509 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD4EE +ENCODING 54510 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD4EF +ENCODING 54511 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD4F0 +ENCODING 54512 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD4F1 +ENCODING 54513 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD4F2 +ENCODING 54514 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD4F3 +ENCODING 54515 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD4F4 +ENCODING 54516 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD4F5 +ENCODING 54517 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD4F6 +ENCODING 54518 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD4F7 +ENCODING 54519 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD4F8 +ENCODING 54520 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD4F9 +ENCODING 54521 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD4FA +ENCODING 54522 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD4FB +ENCODING 54523 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD4FC +ENCODING 54524 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD4FD +ENCODING 54525 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD4FE +ENCODING 54526 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD4FF +ENCODING 54527 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD500 +ENCODING 54528 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD501 +ENCODING 54529 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD502 +ENCODING 54530 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD503 +ENCODING 54531 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD504 +ENCODING 54532 +BBX 15 13 0 0 +BITMAP +3FF8 +0820 +0820 +0820 +0820 +0820 +0820 +3FF8 +0000 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniD505 +ENCODING 54533 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD506 +ENCODING 54534 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD507 +ENCODING 54535 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD508 +ENCODING 54536 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD509 +ENCODING 54537 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD50A +ENCODING 54538 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD50B +ENCODING 54539 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD50C +ENCODING 54540 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD50D +ENCODING 54541 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD50E +ENCODING 54542 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD50F +ENCODING 54543 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD510 +ENCODING 54544 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD511 +ENCODING 54545 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD512 +ENCODING 54546 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD513 +ENCODING 54547 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD514 +ENCODING 54548 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD515 +ENCODING 54549 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD516 +ENCODING 54550 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD517 +ENCODING 54551 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD518 +ENCODING 54552 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD519 +ENCODING 54553 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD51A +ENCODING 54554 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD51B +ENCODING 54555 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD51C +ENCODING 54556 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD51D +ENCODING 54557 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD51E +ENCODING 54558 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD51F +ENCODING 54559 +BBX 15 15 0 -2 +BITMAP +3FF8 +0820 +0820 +0820 +3FF8 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD520 +ENCODING 54560 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniD521 +ENCODING 54561 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD522 +ENCODING 54562 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD523 +ENCODING 54563 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD524 +ENCODING 54564 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD525 +ENCODING 54565 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD526 +ENCODING 54566 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD527 +ENCODING 54567 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD528 +ENCODING 54568 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD529 +ENCODING 54569 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD52A +ENCODING 54570 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD52B +ENCODING 54571 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD52C +ENCODING 54572 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD52D +ENCODING 54573 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD52E +ENCODING 54574 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD52F +ENCODING 54575 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD530 +ENCODING 54576 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD531 +ENCODING 54577 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD532 +ENCODING 54578 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD533 +ENCODING 54579 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD534 +ENCODING 54580 +BBX 14 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD535 +ENCODING 54581 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD536 +ENCODING 54582 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD537 +ENCODING 54583 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD538 +ENCODING 54584 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD539 +ENCODING 54585 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD53A +ENCODING 54586 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD53B +ENCODING 54587 +BBX 13 16 0 -2 +BITMAP +0008 +7F88 +1208 +1208 +7F88 +0008 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD53C +ENCODING 54588 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +2208 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0008 +ENDCHAR +STARTCHAR uniD53D +ENCODING 54589 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD53E +ENCODING 54590 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD53F +ENCODING 54591 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD540 +ENCODING 54592 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD541 +ENCODING 54593 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD542 +ENCODING 54594 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD543 +ENCODING 54595 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD544 +ENCODING 54596 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD545 +ENCODING 54597 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD546 +ENCODING 54598 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD547 +ENCODING 54599 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD548 +ENCODING 54600 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD549 +ENCODING 54601 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD54A +ENCODING 54602 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD54B +ENCODING 54603 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD54C +ENCODING 54604 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD54D +ENCODING 54605 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD54E +ENCODING 54606 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD54F +ENCODING 54607 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD550 +ENCODING 54608 +BBX 14 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD551 +ENCODING 54609 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD552 +ENCODING 54610 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD553 +ENCODING 54611 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD554 +ENCODING 54612 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD555 +ENCODING 54613 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD556 +ENCODING 54614 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD557 +ENCODING 54615 +BBX 13 16 0 -2 +BITMAP +0008 +FF88 +2208 +2208 +2208 +2208 +2208 +FF88 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD558 +ENCODING 54616 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0008 +0008 +1C08 +220E +4108 +4108 +4108 +4108 +2208 +1C08 +0008 +0008 +ENDCHAR +STARTCHAR uniD559 +ENCODING 54617 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD55A +ENCODING 54618 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD55B +ENCODING 54619 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD55C +ENCODING 54620 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +410E +4108 +4108 +3E08 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD55D +ENCODING 54621 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD55E +ENCODING 54622 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD55F +ENCODING 54623 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD560 +ENCODING 54624 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD561 +ENCODING 54625 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD562 +ENCODING 54626 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD563 +ENCODING 54627 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD564 +ENCODING 54628 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD565 +ENCODING 54629 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD566 +ENCODING 54630 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD567 +ENCODING 54631 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD568 +ENCODING 54632 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD569 +ENCODING 54633 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD56A +ENCODING 54634 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD56B +ENCODING 54635 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD56C +ENCODING 54636 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD56D +ENCODING 54637 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD56E +ENCODING 54638 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD56F +ENCODING 54639 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD570 +ENCODING 54640 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD571 +ENCODING 54641 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD572 +ENCODING 54642 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD573 +ENCODING 54643 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E0E +4108 +4108 +4108 +3E08 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD574 +ENCODING 54644 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +0024 +FFA4 +0024 +0024 +1C24 +223C +4124 +4124 +4124 +4124 +2224 +1C24 +0024 +0024 +ENDCHAR +STARTCHAR uniD575 +ENCODING 54645 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD576 +ENCODING 54646 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD577 +ENCODING 54647 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD578 +ENCODING 54648 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD579 +ENCODING 54649 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD57A +ENCODING 54650 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD57B +ENCODING 54651 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD57C +ENCODING 54652 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD57D +ENCODING 54653 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD57E +ENCODING 54654 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD57F +ENCODING 54655 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD580 +ENCODING 54656 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD581 +ENCODING 54657 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD582 +ENCODING 54658 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD583 +ENCODING 54659 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD584 +ENCODING 54660 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD585 +ENCODING 54661 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD586 +ENCODING 54662 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD587 +ENCODING 54663 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD588 +ENCODING 54664 +BBX 15 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD589 +ENCODING 54665 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD58A +ENCODING 54666 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD58B +ENCODING 54667 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD58C +ENCODING 54668 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD58D +ENCODING 54669 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD58E +ENCODING 54670 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD58F +ENCODING 54671 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E3C +4124 +4124 +4124 +3E24 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD590 +ENCODING 54672 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0008 +000E +1C08 +2208 +4108 +4108 +410E +4108 +2208 +1C08 +0008 +0008 +ENDCHAR +STARTCHAR uniD591 +ENCODING 54673 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD592 +ENCODING 54674 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD593 +ENCODING 54675 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD594 +ENCODING 54676 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +000E +3E08 +4108 +4108 +410E +3E08 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD595 +ENCODING 54677 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD596 +ENCODING 54678 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD597 +ENCODING 54679 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD598 +ENCODING 54680 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD599 +ENCODING 54681 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD59A +ENCODING 54682 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD59B +ENCODING 54683 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD59C +ENCODING 54684 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD59D +ENCODING 54685 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD59E +ENCODING 54686 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD59F +ENCODING 54687 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD5A0 +ENCODING 54688 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD5A1 +ENCODING 54689 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD5A2 +ENCODING 54690 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD5A3 +ENCODING 54691 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD5A4 +ENCODING 54692 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD5A5 +ENCODING 54693 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD5A6 +ENCODING 54694 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD5A7 +ENCODING 54695 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD5A8 +ENCODING 54696 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD5A9 +ENCODING 54697 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD5AA +ENCODING 54698 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD5AB +ENCODING 54699 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF8E +0008 +3E08 +410E +4108 +4108 +3E08 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD5AC +ENCODING 54700 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +0024 +FFA4 +003C +0024 +1C24 +2224 +4124 +413C +4124 +4124 +2224 +1C24 +0024 +0024 +ENDCHAR +STARTCHAR uniD5AD +ENCODING 54701 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD5AE +ENCODING 54702 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD5AF +ENCODING 54703 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD5B0 +ENCODING 54704 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +4124 +413C +4124 +3E24 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD5B1 +ENCODING 54705 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD5B2 +ENCODING 54706 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD5B3 +ENCODING 54707 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD5B4 +ENCODING 54708 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD5B5 +ENCODING 54709 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD5B6 +ENCODING 54710 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD5B7 +ENCODING 54711 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD5B8 +ENCODING 54712 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD5B9 +ENCODING 54713 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD5BA +ENCODING 54714 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD5BB +ENCODING 54715 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD5BC +ENCODING 54716 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD5BD +ENCODING 54717 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD5BE +ENCODING 54718 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD5BF +ENCODING 54719 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD5C0 +ENCODING 54720 +BBX 15 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD5C1 +ENCODING 54721 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD5C2 +ENCODING 54722 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD5C3 +ENCODING 54723 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD5C4 +ENCODING 54724 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD5C5 +ENCODING 54725 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD5C6 +ENCODING 54726 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD5C7 +ENCODING 54727 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFBC +0024 +3E24 +413C +4124 +4124 +3E24 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD5C8 +ENCODING 54728 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0008 +0008 +1C08 +2278 +4108 +4108 +4108 +4108 +2208 +1C08 +0008 +0008 +ENDCHAR +STARTCHAR uniD5C9 +ENCODING 54729 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD5CA +ENCODING 54730 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD5CB +ENCODING 54731 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD5CC +ENCODING 54732 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD5CD +ENCODING 54733 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD5CE +ENCODING 54734 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD5CF +ENCODING 54735 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD5D0 +ENCODING 54736 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD5D1 +ENCODING 54737 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD5D2 +ENCODING 54738 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD5D3 +ENCODING 54739 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD5D4 +ENCODING 54740 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD5D5 +ENCODING 54741 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD5D6 +ENCODING 54742 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD5D7 +ENCODING 54743 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD5D8 +ENCODING 54744 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD5D9 +ENCODING 54745 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD5DA +ENCODING 54746 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD5DB +ENCODING 54747 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD5DC +ENCODING 54748 +BBX 14 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD5DD +ENCODING 54749 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD5DE +ENCODING 54750 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD5DF +ENCODING 54751 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD5E0 +ENCODING 54752 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD5E1 +ENCODING 54753 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD5E2 +ENCODING 54754 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD5E3 +ENCODING 54755 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E78 +4108 +4108 +4108 +3E08 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD5E4 +ENCODING 54756 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +0024 +FFA4 +0024 +0024 +1DE4 +2224 +4124 +4124 +4124 +4124 +2224 +1C24 +0024 +0024 +ENDCHAR +STARTCHAR uniD5E5 +ENCODING 54757 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD5E6 +ENCODING 54758 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD5E7 +ENCODING 54759 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD5E8 +ENCODING 54760 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD5E9 +ENCODING 54761 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD5EA +ENCODING 54762 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD5EB +ENCODING 54763 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD5EC +ENCODING 54764 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD5ED +ENCODING 54765 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD5EE +ENCODING 54766 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD5EF +ENCODING 54767 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD5F0 +ENCODING 54768 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD5F1 +ENCODING 54769 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD5F2 +ENCODING 54770 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD5F3 +ENCODING 54771 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD5F4 +ENCODING 54772 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD5F5 +ENCODING 54773 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD5F6 +ENCODING 54774 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD5F7 +ENCODING 54775 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD5F8 +ENCODING 54776 +BBX 15 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD5F9 +ENCODING 54777 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD5FA +ENCODING 54778 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD5FB +ENCODING 54779 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD5FC +ENCODING 54780 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD5FD +ENCODING 54781 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD5FE +ENCODING 54782 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD5FF +ENCODING 54783 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3EE4 +4124 +4124 +4124 +3E24 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD600 +ENCODING 54784 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0008 +0078 +1C08 +2208 +4108 +4178 +4108 +4108 +2208 +1C08 +0008 +0008 +ENDCHAR +STARTCHAR uniD601 +ENCODING 54785 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD602 +ENCODING 54786 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD603 +ENCODING 54787 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD604 +ENCODING 54788 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD605 +ENCODING 54789 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD606 +ENCODING 54790 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD607 +ENCODING 54791 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD608 +ENCODING 54792 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD609 +ENCODING 54793 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD60A +ENCODING 54794 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD60B +ENCODING 54795 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD60C +ENCODING 54796 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD60D +ENCODING 54797 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD60E +ENCODING 54798 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD60F +ENCODING 54799 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD610 +ENCODING 54800 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD611 +ENCODING 54801 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD612 +ENCODING 54802 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD613 +ENCODING 54803 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD614 +ENCODING 54804 +BBX 14 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD615 +ENCODING 54805 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD616 +ENCODING 54806 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD617 +ENCODING 54807 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD618 +ENCODING 54808 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD619 +ENCODING 54809 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD61A +ENCODING 54810 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD61B +ENCODING 54811 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0078 +3E08 +4108 +4178 +4108 +3E08 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD61C +ENCODING 54812 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +0024 +FFA4 +0024 +01E4 +1C24 +2224 +4124 +41E4 +4124 +4124 +2224 +1C24 +0024 +0024 +ENDCHAR +STARTCHAR uniD61D +ENCODING 54813 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD61E +ENCODING 54814 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD61F +ENCODING 54815 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD620 +ENCODING 54816 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0024 +1024 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD621 +ENCODING 54817 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD622 +ENCODING 54818 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD623 +ENCODING 54819 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD624 +ENCODING 54820 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD625 +ENCODING 54821 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD626 +ENCODING 54822 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD627 +ENCODING 54823 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD628 +ENCODING 54824 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD629 +ENCODING 54825 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD62A +ENCODING 54826 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD62B +ENCODING 54827 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD62C +ENCODING 54828 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD62D +ENCODING 54829 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD62E +ENCODING 54830 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD62F +ENCODING 54831 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD630 +ENCODING 54832 +BBX 15 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD631 +ENCODING 54833 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD632 +ENCODING 54834 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD633 +ENCODING 54835 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD634 +ENCODING 54836 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD635 +ENCODING 54837 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD636 +ENCODING 54838 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD637 +ENCODING 54839 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +00E4 +3E24 +41E4 +4124 +4124 +3E24 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD638 +ENCODING 54840 +BBX 15 14 0 0 +BITMAP +0FE0 +0000 +7FFC +0000 +07C0 +0820 +1010 +1010 +0820 +07C0 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniD639 +ENCODING 54841 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD63A +ENCODING 54842 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD63B +ENCODING 54843 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD63C +ENCODING 54844 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD63D +ENCODING 54845 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD63E +ENCODING 54846 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD63F +ENCODING 54847 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD640 +ENCODING 54848 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD641 +ENCODING 54849 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD642 +ENCODING 54850 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD643 +ENCODING 54851 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD644 +ENCODING 54852 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD645 +ENCODING 54853 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD646 +ENCODING 54854 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD647 +ENCODING 54855 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD648 +ENCODING 54856 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD649 +ENCODING 54857 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD64A +ENCODING 54858 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD64B +ENCODING 54859 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD64C +ENCODING 54860 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD64D +ENCODING 54861 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD64E +ENCODING 54862 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD64F +ENCODING 54863 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD650 +ENCODING 54864 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD651 +ENCODING 54865 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD652 +ENCODING 54866 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD653 +ENCODING 54867 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0100 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD654 +ENCODING 54868 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +410E +3E08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniD655 +ENCODING 54869 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD656 +ENCODING 54870 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD657 +ENCODING 54871 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD658 +ENCODING 54872 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD659 +ENCODING 54873 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD65A +ENCODING 54874 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD65B +ENCODING 54875 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD65C +ENCODING 54876 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD65D +ENCODING 54877 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD65E +ENCODING 54878 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD65F +ENCODING 54879 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD660 +ENCODING 54880 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD661 +ENCODING 54881 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD662 +ENCODING 54882 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD663 +ENCODING 54883 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD664 +ENCODING 54884 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD665 +ENCODING 54885 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD666 +ENCODING 54886 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD667 +ENCODING 54887 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD668 +ENCODING 54888 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD669 +ENCODING 54889 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD66A +ENCODING 54890 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD66B +ENCODING 54891 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD66C +ENCODING 54892 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD66D +ENCODING 54893 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD66E +ENCODING 54894 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD66F +ENCODING 54895 +BBX 15 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +410E +3E08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD670 +ENCODING 54896 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E24 +4124 +4124 +413C +3E24 +0824 +0824 +0824 +0824 +FFA4 +0024 +0024 +ENDCHAR +STARTCHAR uniD671 +ENCODING 54897 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD672 +ENCODING 54898 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD673 +ENCODING 54899 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD674 +ENCODING 54900 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD675 +ENCODING 54901 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD676 +ENCODING 54902 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD677 +ENCODING 54903 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD678 +ENCODING 54904 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD679 +ENCODING 54905 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD67A +ENCODING 54906 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD67B +ENCODING 54907 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD67C +ENCODING 54908 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD67D +ENCODING 54909 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD67E +ENCODING 54910 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD67F +ENCODING 54911 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD680 +ENCODING 54912 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD681 +ENCODING 54913 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD682 +ENCODING 54914 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD683 +ENCODING 54915 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD684 +ENCODING 54916 +BBX 15 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD685 +ENCODING 54917 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD686 +ENCODING 54918 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD687 +ENCODING 54919 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD688 +ENCODING 54920 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD689 +ENCODING 54921 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD68A +ENCODING 54922 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD68B +ENCODING 54923 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +3E24 +413C +3E24 +0824 +FFA4 +0024 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD68C +ENCODING 54924 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0808 +0808 +0808 +0808 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniD68D +ENCODING 54925 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD68E +ENCODING 54926 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD68F +ENCODING 54927 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD690 +ENCODING 54928 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD691 +ENCODING 54929 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD692 +ENCODING 54930 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD693 +ENCODING 54931 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD694 +ENCODING 54932 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD695 +ENCODING 54933 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD696 +ENCODING 54934 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD697 +ENCODING 54935 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD698 +ENCODING 54936 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD699 +ENCODING 54937 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD69A +ENCODING 54938 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD69B +ENCODING 54939 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD69C +ENCODING 54940 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD69D +ENCODING 54941 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD69E +ENCODING 54942 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD69F +ENCODING 54943 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD6A0 +ENCODING 54944 +BBX 14 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD6A1 +ENCODING 54945 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD6A2 +ENCODING 54946 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD6A3 +ENCODING 54947 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD6A4 +ENCODING 54948 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD6A5 +ENCODING 54949 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD6A6 +ENCODING 54950 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD6A7 +ENCODING 54951 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0808 +FFC8 +0008 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD6A8 +ENCODING 54952 +BBX 15 14 0 0 +BITMAP +0FE0 +0000 +7FFC +0000 +07C0 +0820 +1010 +1010 +0820 +0FE0 +0820 +0820 +0820 +FFFE +ENDCHAR +STARTCHAR uniD6A9 +ENCODING 54953 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD6AA +ENCODING 54954 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD6AB +ENCODING 54955 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD6AC +ENCODING 54956 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD6AD +ENCODING 54957 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD6AE +ENCODING 54958 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD6AF +ENCODING 54959 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD6B0 +ENCODING 54960 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD6B1 +ENCODING 54961 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD6B2 +ENCODING 54962 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD6B3 +ENCODING 54963 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD6B4 +ENCODING 54964 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD6B5 +ENCODING 54965 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD6B6 +ENCODING 54966 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD6B7 +ENCODING 54967 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD6B8 +ENCODING 54968 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD6B9 +ENCODING 54969 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD6BA +ENCODING 54970 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD6BB +ENCODING 54971 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD6BC +ENCODING 54972 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD6BD +ENCODING 54973 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD6BE +ENCODING 54974 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD6BF +ENCODING 54975 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD6C0 +ENCODING 54976 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD6C1 +ENCODING 54977 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD6C2 +ENCODING 54978 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD6C3 +ENCODING 54979 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +0FE0 +0440 +FFFE +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD6C4 +ENCODING 54980 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +1010 +0FE0 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniD6C5 +ENCODING 54981 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD6C6 +ENCODING 54982 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD6C7 +ENCODING 54983 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD6C8 +ENCODING 54984 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0080 +0080 +2080 +2080 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD6C9 +ENCODING 54985 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD6CA +ENCODING 54986 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD6CB +ENCODING 54987 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD6CC +ENCODING 54988 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD6CD +ENCODING 54989 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD6CE +ENCODING 54990 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD6CF +ENCODING 54991 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD6D0 +ENCODING 54992 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD6D1 +ENCODING 54993 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD6D2 +ENCODING 54994 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD6D3 +ENCODING 54995 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD6D4 +ENCODING 54996 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD6D5 +ENCODING 54997 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD6D6 +ENCODING 54998 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD6D7 +ENCODING 54999 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD6D8 +ENCODING 55000 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD6D9 +ENCODING 55001 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD6DA +ENCODING 55002 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD6DB +ENCODING 55003 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD6DC +ENCODING 55004 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD6DD +ENCODING 55005 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD6DE +ENCODING 55006 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD6DF +ENCODING 55007 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0100 +0100 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD6E0 +ENCODING 55008 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +0808 +08F8 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniD6E1 +ENCODING 55009 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD6E2 +ENCODING 55010 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD6E3 +ENCODING 55011 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD6E4 +ENCODING 55012 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD6E5 +ENCODING 55013 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD6E6 +ENCODING 55014 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD6E7 +ENCODING 55015 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD6E8 +ENCODING 55016 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD6E9 +ENCODING 55017 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD6EA +ENCODING 55018 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD6EB +ENCODING 55019 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD6EC +ENCODING 55020 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD6ED +ENCODING 55021 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD6EE +ENCODING 55022 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD6EF +ENCODING 55023 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD6F0 +ENCODING 55024 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD6F1 +ENCODING 55025 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD6F2 +ENCODING 55026 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD6F3 +ENCODING 55027 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD6F4 +ENCODING 55028 +BBX 14 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD6F5 +ENCODING 55029 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD6F6 +ENCODING 55030 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD6F7 +ENCODING 55031 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD6F8 +ENCODING 55032 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD6F9 +ENCODING 55033 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD6FA +ENCODING 55034 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD6FB +ENCODING 55035 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +FFC8 +0808 +08F8 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD6FC +ENCODING 55036 +BBX 14 16 0 -2 +BITMAP +3E24 +0024 +FFA4 +0024 +3E24 +4124 +4124 +3E24 +0024 +FFA4 +0824 +0824 +09E4 +0824 +0824 +0824 +ENDCHAR +STARTCHAR uniD6FD +ENCODING 55037 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniD6FE +ENCODING 55038 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +0104 +0104 +0104 +0104 +ENDCHAR +STARTCHAR uniD6FF +ENCODING 55039 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +0110 +0110 +0128 +0144 +ENDCHAR +STARTCHAR uniD700 +ENCODING 55040 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0824 +1000 +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD701 +ENCODING 55041 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +107C +1010 +1010 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD702 +ENCODING 55042 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1010 +107C +1000 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD703 +ENCODING 55043 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1000 +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD704 +ENCODING 55044 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD705 +ENCODING 55045 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0104 +1F04 +1004 +1004 +1F04 +ENDCHAR +STARTCHAR uniD706 +ENCODING 55046 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0144 +1F44 +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD707 +ENCODING 55047 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1F44 +0144 +1F7C +1044 +1044 +1F7C +ENDCHAR +STARTCHAR uniD708 +ENCODING 55048 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +0110 +1F10 +1010 +1028 +1F44 +ENDCHAR +STARTCHAR uniD709 +ENCODING 55049 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0140 +1F7C +1040 +1040 +1F7C +ENDCHAR +STARTCHAR uniD70A +ENCODING 55050 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1F7C +0128 +1F28 +1028 +1028 +1F7C +ENDCHAR +STARTCHAR uniD70B +ENCODING 55051 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1F10 +017C +1F00 +1038 +1044 +1F38 +ENDCHAR +STARTCHAR uniD70C +ENCODING 55052 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1004 +1004 +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD70D +ENCODING 55053 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1004 +1004 +1FFC +1004 +1004 +1FFC +ENDCHAR +STARTCHAR uniD70E +ENCODING 55054 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1110 +1110 +1F10 +1110 +1128 +1F44 +ENDCHAR +STARTCHAR uniD70F +ENCODING 55055 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +0080 +0080 +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD710 +ENCODING 55056 +BBX 15 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +0410 +0410 +0410 +0A28 +1144 +2082 +ENDCHAR +STARTCHAR uniD711 +ENCODING 55057 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +07F0 +0808 +1004 +1004 +0808 +07F0 +ENDCHAR +STARTCHAR uniD712 +ENCODING 55058 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +0000 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD713 +ENCODING 55059 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0080 +0140 +0630 +180C +ENDCHAR +STARTCHAR uniD714 +ENCODING 55060 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0004 +0004 +1FFC +0004 +0004 +ENDCHAR +STARTCHAR uniD715 +ENCODING 55061 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +1000 +1FFC +1000 +1000 +1FFC +ENDCHAR +STARTCHAR uniD716 +ENCODING 55062 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +1FFC +0410 +0410 +0410 +0410 +1FFC +ENDCHAR +STARTCHAR uniD717 +ENCODING 55063 +BBX 14 16 0 -2 +BITMAP +0824 +FFA4 +3E24 +4124 +3E24 +FFA4 +0824 +09E4 +0824 +0000 +0080 +1FFC +0000 +07F0 +0808 +07F0 +ENDCHAR +STARTCHAR uniD718 +ENCODING 55064 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0808 +0808 +0808 +0808 +ENDCHAR +STARTCHAR uniD719 +ENCODING 55065 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD71A +ENCODING 55066 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD71B +ENCODING 55067 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD71C +ENCODING 55068 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0808 +1000 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD71D +ENCODING 55069 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD71E +ENCODING 55070 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD71F +ENCODING 55071 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD720 +ENCODING 55072 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD721 +ENCODING 55073 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD722 +ENCODING 55074 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD723 +ENCODING 55075 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD724 +ENCODING 55076 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD725 +ENCODING 55077 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD726 +ENCODING 55078 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD727 +ENCODING 55079 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD728 +ENCODING 55080 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD729 +ENCODING 55081 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD72A +ENCODING 55082 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD72B +ENCODING 55083 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD72C +ENCODING 55084 +BBX 14 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD72D +ENCODING 55085 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD72E +ENCODING 55086 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD72F +ENCODING 55087 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD730 +ENCODING 55088 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD731 +ENCODING 55089 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD732 +ENCODING 55090 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD733 +ENCODING 55091 +BBX 13 16 0 -2 +BITMAP +0808 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0808 +0808 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD734 +ENCODING 55092 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0000 +0FE0 +1010 +1010 +0FE0 +0000 +FFFE +0820 +0820 +0820 +0820 +0820 +0820 +ENDCHAR +STARTCHAR uniD735 +ENCODING 55093 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD736 +ENCODING 55094 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD737 +ENCODING 55095 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD738 +ENCODING 55096 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0420 +0420 +2420 +2420 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD739 +ENCODING 55097 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD73A +ENCODING 55098 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD73B +ENCODING 55099 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD73C +ENCODING 55100 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD73D +ENCODING 55101 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD73E +ENCODING 55102 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD73F +ENCODING 55103 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD740 +ENCODING 55104 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD741 +ENCODING 55105 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD742 +ENCODING 55106 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD743 +ENCODING 55107 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD744 +ENCODING 55108 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD745 +ENCODING 55109 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD746 +ENCODING 55110 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD747 +ENCODING 55111 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD748 +ENCODING 55112 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD749 +ENCODING 55113 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD74A +ENCODING 55114 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD74B +ENCODING 55115 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD74C +ENCODING 55116 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD74D +ENCODING 55117 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD74E +ENCODING 55118 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD74F +ENCODING 55119 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0440 +0440 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD750 +ENCODING 55120 +BBX 15 14 0 0 +BITMAP +0FE0 +0000 +7FFC +0000 +07C0 +0820 +1010 +1010 +0820 +07C0 +0000 +0000 +0000 +FFFE +ENDCHAR +STARTCHAR uniD751 +ENCODING 55121 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD752 +ENCODING 55122 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD753 +ENCODING 55123 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD754 +ENCODING 55124 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +2000 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD755 +ENCODING 55125 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD756 +ENCODING 55126 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD757 +ENCODING 55127 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3FF8 +2000 +2000 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD758 +ENCODING 55128 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3FF8 +0008 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD759 +ENCODING 55129 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD75A +ENCODING 55130 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD75B +ENCODING 55131 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD75C +ENCODING 55132 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD75D +ENCODING 55133 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD75E +ENCODING 55134 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD75F +ENCODING 55135 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD760 +ENCODING 55136 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3FF8 +2008 +2008 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD761 +ENCODING 55137 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +2008 +2008 +3FF8 +2008 +2008 +3FF8 +ENDCHAR +STARTCHAR uniD762 +ENCODING 55138 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD763 +ENCODING 55139 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD764 +ENCODING 55140 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD765 +ENCODING 55141 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +0FE0 +1010 +2008 +2008 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD766 +ENCODING 55142 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD767 +ENCODING 55143 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD768 +ENCODING 55144 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3FF8 +0008 +0008 +3FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD769 +ENCODING 55145 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3FF8 +2000 +3FF8 +2000 +2000 +3FF8 +ENDCHAR +STARTCHAR uniD76A +ENCODING 55146 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD76B +ENCODING 55147 +BBX 15 16 0 -2 +BITMAP +0FE0 +0000 +7FFC +0FE0 +1010 +0FE0 +0000 +FFFE +0000 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD76C +ENCODING 55148 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0008 +0008 +0008 +0008 +FFC8 +0008 +0008 +ENDCHAR +STARTCHAR uniD76D +ENCODING 55149 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD76E +ENCODING 55150 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD76F +ENCODING 55151 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +3E28 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD770 +ENCODING 55152 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD771 +ENCODING 55153 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD772 +ENCODING 55154 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +2028 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD773 +ENCODING 55155 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD774 +ENCODING 55156 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD775 +ENCODING 55157 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD776 +ENCODING 55158 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD777 +ENCODING 55159 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD778 +ENCODING 55160 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +3E28 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD779 +ENCODING 55161 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD77A +ENCODING 55162 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD77B +ENCODING 55163 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +3E28 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD77C +ENCODING 55164 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD77D +ENCODING 55165 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD77E +ENCODING 55166 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +2228 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD77F +ENCODING 55167 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +0108 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD780 +ENCODING 55168 +BBX 14 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +0828 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD781 +ENCODING 55169 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +07E8 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD782 +ENCODING 55170 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +0008 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD783 +ENCODING 55171 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD784 +ENCODING 55172 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD785 +ENCODING 55173 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD786 +ENCODING 55174 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD787 +ENCODING 55175 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +3E08 +4108 +3E08 +0008 +FFC8 +0008 +0008 +0108 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD788 +ENCODING 55176 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +0008 +FF88 +0008 +0008 +1C08 +2208 +4108 +4108 +4108 +4108 +2208 +1C08 +0008 +0008 +ENDCHAR +STARTCHAR uniD789 +ENCODING 55177 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +1FF8 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniD78A +ENCODING 55178 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +3EF8 +0208 +0208 +0208 +0208 +0208 +ENDCHAR +STARTCHAR uniD78B +ENCODING 55179 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +3E20 +0220 +0220 +0220 +0250 +0288 +ENDCHAR +STARTCHAR uniD78C +ENCODING 55180 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0008 +1008 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD78D +ENCODING 55181 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +20F8 +2020 +2020 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD78E +ENCODING 55182 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +2020 +20F8 +2000 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD78F +ENCODING 55183 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +1FF8 +1000 +1000 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD790 +ENCODING 55184 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +1FF8 +0008 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD791 +ENCODING 55185 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +3EF8 +0208 +3E08 +2008 +2008 +3E08 +ENDCHAR +STARTCHAR uniD792 +ENCODING 55186 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +3EF8 +0288 +3E88 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD793 +ENCODING 55187 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +3E88 +0288 +3EF8 +2088 +2088 +3EF8 +ENDCHAR +STARTCHAR uniD794 +ENCODING 55188 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +3E20 +0220 +3E20 +2020 +2050 +3E88 +ENDCHAR +STARTCHAR uniD795 +ENCODING 55189 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +3EF8 +0280 +3EF8 +2080 +2080 +3EF8 +ENDCHAR +STARTCHAR uniD796 +ENCODING 55190 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +3EF8 +0250 +3E50 +2050 +2050 +3EF8 +ENDCHAR +STARTCHAR uniD797 +ENCODING 55191 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +3E20 +02F8 +3E00 +2070 +2088 +3E70 +ENDCHAR +STARTCHAR uniD798 +ENCODING 55192 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +1FF8 +1008 +1008 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD799 +ENCODING 55193 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +1008 +1008 +1FF8 +1008 +1008 +1FF8 +ENDCHAR +STARTCHAR uniD79A +ENCODING 55194 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +2220 +2220 +3E20 +2220 +2250 +3E88 +ENDCHAR +STARTCHAR uniD79B +ENCODING 55195 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +0100 +0100 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD79C +ENCODING 55196 +BBX 14 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +0820 +0820 +0820 +1450 +2288 +4104 +ENDCHAR +STARTCHAR uniD79D +ENCODING 55197 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +07E0 +0810 +1008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uniD79E +ENCODING 55198 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +0000 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD79F +ENCODING 55199 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +0100 +3FF8 +0100 +0280 +0C60 +3018 +ENDCHAR +STARTCHAR uniD7A0 +ENCODING 55200 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +1FF8 +0008 +0008 +1FF8 +0008 +0008 +ENDCHAR +STARTCHAR uniD7A1 +ENCODING 55201 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +1FF8 +1000 +1FF8 +1000 +1000 +1FF8 +ENDCHAR +STARTCHAR uniD7A2 +ENCODING 55202 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +3FF8 +0820 +0820 +0820 +0820 +3FF8 +ENDCHAR +STARTCHAR uniD7A3 +ENCODING 55203 +BBX 13 16 0 -2 +BITMAP +3E08 +0008 +FF88 +0008 +3E08 +4108 +4108 +4108 +3E08 +0000 +0100 +3FF8 +0000 +0FE0 +1010 +0FE0 +ENDCHAR +STARTCHAR uniD7B0 +ENCODING 55216 +BBX 11 15 1 -1 +BITMAP +0080 +0060 +0020 +0020 +0020 +07E0 +0220 +0020 +07E0 +0220 +0020 +1820 +09A0 +0E20 +F020 +ENDCHAR +STARTCHAR uniD7B1 +ENCODING 55217 +BBX 11 8 2 -2 +BITMAP +0C00 +0400 +7FC0 +0400 +FFE0 +0000 +0C00 +0400 +ENDCHAR +STARTCHAR uniD7B2 +ENCODING 55218 +BBX 13 15 1 -1 +BITMAP +0080 +0060 +0020 +0020 +0020 +0020 +0020 +0020 +0020 +0020 +0320 +1938 +09E0 +0E20 +F020 +ENDCHAR +STARTCHAR uniD7B3 +ENCODING 55219 +BBX 14 15 1 -1 +BITMAP +0090 +006C +0024 +0024 +0024 +0024 +0024 +0024 +0024 +0024 +063C +3224 +13E4 +1E24 +F004 +ENDCHAR +STARTCHAR uniD7B4 +ENCODING 55220 +BBX 14 15 1 -1 +BITMAP +0010 +000C +0004 +0004 +0004 +0004 +0004 +0004 +003C +0004 +0604 +3264 +1384 +1E04 +F004 +ENDCHAR +STARTCHAR uniD7B5 +ENCODING 55221 +BBX 13 15 2 -1 +BITMAP +0020 +0018 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +FFC8 +0808 +0878 +0808 +0878 +0008 +ENDCHAR +STARTCHAR uniD7B6 +ENCODING 55222 +BBX 13 15 1 -1 +BITMAP +0020 +0118 +00C8 +0048 +0048 +0048 +0048 +0048 +0048 +0048 +FFC8 +0848 +0848 +0848 +0008 +ENDCHAR +STARTCHAR uniD7B7 +ENCODING 55223 +BBX 14 15 1 -1 +BITMAP +0090 +006C +0024 +0024 +0024 +0024 +0024 +0024 +003C +0024 +FFE4 +2224 +2224 +2224 +0004 +ENDCHAR +STARTCHAR uniD7B8 +ENCODING 55224 +BBX 12 5 2 -1 +BITMAP +FFE0 +2080 +2E80 +0200 +FFF0 +ENDCHAR +STARTCHAR uniD7B9 +ENCODING 55225 +BBX 13 15 1 -1 +BITMAP +0100 +00C0 +0040 +0040 +0040 +0040 +0040 +0040 +0078 +0040 +0040 +0040 +01C0 +0E40 +F040 +ENDCHAR +STARTCHAR uniD7BA +ENCODING 55226 +BBX 14 15 1 -1 +BITMAP +0010 +000C +0004 +0004 +0004 +0004 +0004 +0004 +003C +0004 +0004 +0004 +01C4 +0E04 +F004 +ENDCHAR +STARTCHAR uniD7BB +ENCODING 55227 +BBX 14 15 1 -1 +BITMAP +0090 +006C +0024 +0024 +0024 +0024 +0024 +0024 +00E4 +0024 +0024 +0024 +01A4 +0E24 +F004 +ENDCHAR +STARTCHAR uniD7BC +ENCODING 55228 +BBX 12 5 2 -1 +BITMAP +FFE0 +0000 +0E00 +0200 +FFF0 +ENDCHAR +STARTCHAR uniD7BD +ENCODING 55229 +BBX 12 14 2 -1 +BITMAP +0100 +04C0 +0340 +0140 +0140 +0170 +0140 +0140 +0170 +0140 +0140 +3840 +0800 +FFF0 +ENDCHAR +STARTCHAR uniD7BE +ENCODING 55230 +BBX 9 14 5 0 +BITMAP +1200 +8D80 +6480 +2480 +2780 +2480 +2480 +2780 +2480 +2480 +2480 +2480 +0480 +0080 +ENDCHAR +STARTCHAR uniD7BF +ENCODING 55231 +BBX 7 14 7 0 +BITMAP +88 +66 +22 +22 +2E +22 +22 +2E +22 +22 +22 +22 +22 +02 +ENDCHAR +STARTCHAR uniD7C0 +ENCODING 55232 +BBX 9 15 5 -1 +BITMAP +8200 +6980 +2680 +2280 +2280 +2E80 +2280 +2280 +2E80 +2280 +2280 +2280 +2280 +0280 +0080 +ENDCHAR +STARTCHAR uniD7C1 +ENCODING 55233 +BBX 11 15 2 -2 +BITMAP +0080 +0060 +0020 +0020 +0020 +0020 +0020 +0020 +1C20 +0400 +FFE0 +0000 +1C00 +0400 +0400 +ENDCHAR +STARTCHAR uniD7C2 +ENCODING 55234 +BBX 11 11 2 2 +BITMAP +0080 +0060 +0020 +0020 +0020 +0020 +0020 +0020 +E720 +2100 +FFE0 +ENDCHAR +STARTCHAR uniD7C3 +ENCODING 55235 +BBX 11 13 2 0 +BITMAP +0080 +0060 +0020 +0020 +0020 +0020 +0020 +0020 +0020 +0000 +FFE0 +2100 +2100 +ENDCHAR +STARTCHAR uniD7C4 +ENCODING 55236 +BBX 6 15 9 -1 +BITMAP +90 +6C +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +04 +ENDCHAR +STARTCHAR uniD7C5 +ENCODING 55237 +BBX 12 15 2 -1 +BITMAP +0200 +0180 +0080 +0080 +0080 +0080 +0080 +0080 +00F0 +0080 +C080 +E080 +2080 +0080 +0080 +ENDCHAR +STARTCHAR uniD7C6 +ENCODING 55238 +BBX 12 15 2 -1 +BITMAP +0040 +0230 +0190 +0090 +0090 +0090 +0090 +0090 +0790 +0090 +C090 +E090 +2090 +0090 +0010 +ENDCHAR +STARTCHAR uniD7CB +ENCODING 55243 +BBX 14 7 1 -1 +BITMAP +C1FC +4004 +4004 +41FC +4100 +4D00 +71FC +ENDCHAR +STARTCHAR uniD7CC +ENCODING 55244 +BBX 15 7 0 2 +BITMAP +0078 +C000 +43FE +4020 +4030 +4C48 +7184 +ENDCHAR +STARTCHAR uniD7CD +ENCODING 55245 +BBX 13 6 0 -1 +BITMAP +FDF8 +2080 +2080 +2080 +2680 +1878 +ENDCHAR +STARTCHAR uniD7CE +ENCODING 55246 +BBX 15 7 0 -1 +BITMAP +FFB6 +2212 +221E +2212 +2212 +265E +1992 +ENDCHAR +STARTCHAR uniD7CF +ENCODING 55247 +BBX 13 7 0 -1 +BITMAP +FD98 +2088 +20F8 +2088 +2088 +26F8 +1888 +ENDCHAR +STARTCHAR uniD7D0 +ENCODING 55248 +BBX 14 6 1 -1 +BITMAP +F870 +4010 +4010 +4030 +4C48 +7184 +ENDCHAR +STARTCHAR uniD7D1 +ENCODING 55249 +BBX 14 6 1 -1 +BITMAP +F1DC +4044 +4044 +40C4 +4924 +7214 +ENDCHAR +STARTCHAR uniD7D2 +ENCODING 55250 +BBX 14 6 1 -1 +BITMAP +F8FC +4010 +4010 +4030 +4C48 +7184 +ENDCHAR +STARTCHAR uniD7D3 +ENCODING 55251 +BBX 14 7 1 -1 +BITMAP +0078 +F800 +40FC +4010 +4030 +4C48 +7184 +ENDCHAR +STARTCHAR uniD7D4 +ENCODING 55252 +BBX 13 5 1 -1 +BITMAP +FDF8 +2080 +20F8 +2680 +1878 +ENDCHAR +STARTCHAR uniD7D5 +ENCODING 55253 +BBX 12 5 2 -1 +BITMAP +F770 +1110 +F110 +8110 +F110 +ENDCHAR +STARTCHAR uniD7D6 +ENCODING 55254 +BBX 13 8 2 -1 +BITMAP +0070 +F700 +11F8 +1120 +F170 +8188 +8188 +F170 +ENDCHAR +STARTCHAR uniD7D7 +ENCODING 55255 +BBX 13 5 1 -1 +BITMAP +F7B8 +1088 +F7B8 +8408 +F788 +ENDCHAR +STARTCHAR uniD7D8 +ENCODING 55256 +BBX 14 8 1 -1 +BITMAP +0038 +F780 +14FC +1490 +F4B8 +84C4 +87C4 +F438 +ENDCHAR +STARTCHAR uniD7D9 +ENCODING 55257 +BBX 14 8 1 -1 +BITMAP +0900 +F4BC +1490 +1790 +F490 +8490 +8790 +F49C +ENDCHAR +STARTCHAR uniD7DA +ENCODING 55258 +BBX 14 8 1 -1 +BITMAP +093C +F488 +1484 +17A4 +F494 +8484 +8788 +F4BC +ENDCHAR +STARTCHAR uniD7DB +ENCODING 55259 +BBX 13 8 2 -1 +BITMAP +0020 +F020 +1070 +1088 +F088 +8088 +8088 +F070 +ENDCHAR +STARTCHAR uniD7DC +ENCODING 55260 +BBX 16 8 0 -1 +BITMAP +000E +F780 +101F +1304 +F48E +8491 +8491 +F30E +ENDCHAR +STARTCHAR uniD7DD +ENCODING 55261 +BBX 10 10 3 -1 +BITMAP +FFC0 +0040 +FFC0 +8000 +FFC0 +0000 +1F00 +2080 +2080 +1F00 +ENDCHAR +STARTCHAR uniD7DE +ENCODING 55262 +BBX 14 7 1 -2 +BITMAP +FB80 +8880 +8880 +8880 +8880 +F87C +8000 +ENDCHAR +STARTCHAR uniD7DF +ENCODING 55263 +BBX 13 7 1 -2 +BITMAP +F660 +9220 +9220 +9220 +9220 +F198 +8000 +ENDCHAR +STARTCHAR uniD7E0 +ENCODING 55264 +BBX 12 6 2 -2 +BITMAP +F9F0 +8910 +8910 +8910 +F9F0 +8100 +ENDCHAR +STARTCHAR uniD7E1 +ENCODING 55265 +BBX 16 7 0 -2 +BITMAP +0480 +F488 +9784 +948C +9492 +F7A1 +8000 +ENDCHAR +STARTCHAR uniD7E2 +ENCODING 55266 +BBX 12 6 2 -2 +BITMAP +FBF0 +8880 +88C0 +8920 +FA10 +8000 +ENDCHAR +STARTCHAR uniD7E3 +ENCODING 55267 +BBX 13 7 1 -1 +BITMAP +8800 +44F8 +4440 +7C40 +4440 +4440 +7C78 +ENDCHAR +STARTCHAR uniD7E4 +ENCODING 55268 +BBX 14 7 1 -1 +BITMAP +93BC +4888 +48A4 +7B94 +4A04 +4A08 +7BBC +ENDCHAR +STARTCHAR uniD7E5 +ENCODING 55269 +BBX 13 8 1 -2 +BITMAP +8800 +44F8 +4488 +7C88 +4488 +4488 +7CF8 +0080 +ENDCHAR +STARTCHAR uniD7E6 +ENCODING 55270 +BBX 13 7 1 -1 +BITMAP +8910 +4488 +4488 +7CF8 +4488 +4488 +7CF8 +ENDCHAR +STARTCHAR uniD7E7 +ENCODING 55271 +BBX 15 7 0 -1 +BITMAP +9000 +485E +4848 +7888 +4948 +4A28 +7A2E +ENDCHAR +STARTCHAR uniD7E8 +ENCODING 55272 +BBX 13 7 1 -1 +BITMAP +8800 +4400 +45F8 +7C40 +4460 +4490 +7D08 +ENDCHAR +STARTCHAR uniD7E9 +ENCODING 55273 +BBX 13 7 1 -1 +BITMAP +88F0 +4400 +45F8 +7C40 +4460 +4490 +7D08 +ENDCHAR +STARTCHAR uniD7EA +ENCODING 55274 +BBX 13 7 1 -2 +BITMAP +1000 +08F8 +0888 +1888 +2488 +C2F8 +0080 +ENDCHAR +STARTCHAR uniD7EB +ENCODING 55275 +BBX 13 8 1 -1 +BITMAP +0088 +00F8 +1088 +08F8 +0800 +1870 +2488 +C270 +ENDCHAR +STARTCHAR uniD7EC +ENCODING 55276 +BBX 14 6 0 -1 +BITMAP +123C +0904 +0904 +1904 +2684 +CC44 +ENDCHAR +STARTCHAR uniD7ED +ENCODING 55277 +BBX 15 6 0 -1 +BITMAP +123E +0910 +0910 +1910 +2690 +CC5E +ENDCHAR +STARTCHAR uniD7EE +ENCODING 55278 +BBX 15 6 0 -1 +BITMAP +1020 +0810 +0828 +1844 +2482 +C2FE +ENDCHAR +STARTCHAR uniD7EF +ENCODING 55279 +BBX 14 5 0 -1 +BITMAP +10FC +0820 +1830 +2448 +C284 +ENDCHAR +STARTCHAR uniD7F0 +ENCODING 55280 +BBX 14 7 0 -1 +BITMAP +0078 +1000 +08FC +0820 +1830 +2448 +C284 +ENDCHAR +STARTCHAR uniD7F1 +ENCODING 55281 +BBX 14 6 0 -1 +BITMAP +1000 +08FC +0840 +187C +2440 +C23C +ENDCHAR +STARTCHAR uniD7F2 +ENCODING 55282 +BBX 14 8 0 -1 +BITMAP +0038 +0000 +107C +0810 +0838 +1844 +2444 +C238 +ENDCHAR +STARTCHAR uniD7F3 +ENCODING 55283 +BBX 13 7 0 -1 +BITMAP +0110 +2088 +1088 +28F8 +4488 +8288 +FEF8 +ENDCHAR +STARTCHAR uniD7F4 +ENCODING 55284 +BBX 13 9 0 -1 +BITMAP +0210 +0108 +01F8 +2108 +11F8 +2870 +4488 +8270 +FE00 +ENDCHAR +STARTCHAR uniD7F5 +ENCODING 55285 +BBX 12 8 2 -2 +BITMAP +2000 +21F0 +7110 +8910 +8910 +8910 +71F0 +0100 +ENDCHAR +STARTCHAR uniD7F6 +ENCODING 55286 +BBX 12 8 2 -1 +BITMAP +00E0 +2000 +21F0 +7040 +88E0 +8910 +8910 +70E0 +ENDCHAR +STARTCHAR uniD7F7 +ENCODING 55287 +BBX 12 6 2 -2 +BITMAP +FD10 +1110 +31F0 +4910 +85F0 +0100 +ENDCHAR +STARTCHAR uniD7F8 +ENCODING 55288 +BBX 15 6 1 -2 +BITMAP +0252 +FA52 +23DE +5252 +8BDE +0210 +ENDCHAR +STARTCHAR uniD7F9 +ENCODING 55289 +BBX 13 5 1 -1 +BITMAP +FDF8 +1040 +3060 +4890 +8508 +ENDCHAR +STARTCHAR uniD7FA +ENCODING 55290 +BBX 12 7 1 -1 +BITMAP +F000 +2080 +9040 +5040 +10C0 +2120 +F610 +ENDCHAR +STARTCHAR uniD7FB +ENCODING 55291 +BBX 13 7 1 -1 +BITMAP +F1F8 +2080 +9080 +50F8 +1080 +2080 +F078 +ENDCHAR +STARTCHAR uniF900 +ENCODING 63744 +BBX 14 15 1 -1 +BITMAP +0100 +2110 +2110 +3FF0 +2010 +0000 +FFFC +0000 +1FE0 +1020 +1FE0 +1020 +0840 +0488 +FFFC +ENDCHAR +STARTCHAR uniF901 +ENCODING 63745 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0100 +2108 +3FFC +2108 +3FF8 +2108 +3FF8 +2108 +1100 +0A00 +0600 +1980 +E07C +ENDCHAR +STARTCHAR uniF902 +ENCODING 63746 +BBX 14 15 1 -1 +BITMAP +0200 +0208 +FFFC +0200 +2210 +3FF8 +2210 +3FF0 +2210 +3FF0 +2210 +0208 +FFFC +0200 +0200 +ENDCHAR +STARTCHAR uniF903 +ENCODING 63747 +BBX 15 15 0 -1 +BITMAP +FFFE +0440 +3FF8 +2448 +3FF8 +0000 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0C60 +F01E +ENDCHAR +STARTCHAR uniF904 +ENCODING 63748 +BBX 15 15 0 -1 +BITMAP +4108 +21FC +2108 +0978 +8948 +57FE +5404 +21F8 +2108 +C1F8 +4108 +41F8 +C108 +C138 +4110 +ENDCHAR +STARTCHAR uniF905 +ENCODING 63749 +BBX 14 15 1 -1 +BITMAP +0200 +0210 +7FF8 +4210 +4210 +7FF0 +4210 +0208 +FFFC +8208 +8208 +FFF8 +8208 +0200 +0200 +ENDCHAR +STARTCHAR uniF906 +ENCODING 63750 +BBX 14 15 1 -1 +BITMAP +1000 +1000 +1008 +3FFC +4008 +8008 +3F88 +2088 +2088 +2088 +3F88 +2088 +0088 +0070 +0020 +ENDCHAR +STARTCHAR uniF907 +ENCODING 63751 +BBX 14 15 1 -1 +BITMAP +1080 +1FC0 +1080 +2100 +FFF8 +2288 +FEF8 +0A88 +FED8 +0AA8 +FAD8 +0A88 +FEFC +0A04 +F9F8 +ENDCHAR +STARTCHAR uniF908 +ENCODING 63752 +BBX 14 15 1 -1 +BITMAP +1080 +1FC0 +1080 +2100 +FFF8 +2288 +FEF8 +0A88 +FED8 +0AA8 +FAD8 +0A88 +FEFC +0A04 +F9F8 +ENDCHAR +STARTCHAR uniF909 +ENCODING 63753 +BBX 14 15 1 -1 +BITMAP +1000 +1004 +FEFC +1024 +FE24 +1024 +FE44 +109C +1308 +0200 +FFFC +0400 +0580 +1860 +E01C +ENDCHAR +STARTCHAR uniF90A +ENCODING 63754 +BBX 14 15 1 -1 +BITMAP +0100 +0300 +0480 +0840 +1020 +2010 +DFEC +0200 +0210 +7FF8 +0200 +2230 +1220 +1248 +FFFC +ENDCHAR +STARTCHAR uniF90B +ENCODING 63755 +BBX 15 15 0 -1 +BITMAP +0102 +9142 +FFE2 +9112 +9112 +97D2 +9552 +9552 +97D2 +9552 +F392 +9542 +0922 +111E +0104 +ENDCHAR +STARTCHAR uniF90C +ENCODING 63756 +BBX 14 15 1 -1 +BITMAP +0400 +0408 +FFFC +0480 +0840 +3030 +CFCC +0000 +0010 +7FF8 +0100 +3120 +2118 +4708 +8208 +ENDCHAR +STARTCHAR uniF90D +ENCODING 63757 +BBX 15 16 0 -2 +BITMAP +2214 +221E +2FD4 +2224 +B27E +AFA2 +AABE +AAA2 +2FBE +2222 +233E +26A2 +2A94 +2222 +2242 +2000 +ENDCHAR +STARTCHAR uniF90E +ENCODING 63758 +BBX 15 15 0 -1 +BITMAP +0100 +1084 +1FFE +9220 +5FBC +5248 +1FBE +12A2 +32BE +DFA2 +923E +2322 +26BE +4A94 +9222 +ENDCHAR +STARTCHAR uniF90F +ENCODING 63759 +BBX 14 15 1 -1 +BITMAP +7FF8 +4488 +4488 +7FF8 +1088 +2120 +49FC +F320 +1520 +29F8 +FD20 +01F8 +6920 +5520 +95FC +ENDCHAR +STARTCHAR uniF910 +ENCODING 63760 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0840 +3FF0 +2490 +3FF0 +1140 +2520 +7BFC +1520 +29F8 +FD20 +51F8 +A920 +A9FC +ENDCHAR +STARTCHAR uniF911 +ENCODING 63761 +BBX 15 15 0 -1 +BITMAP +1104 +11FE +1124 +55FC +7F24 +55FC +5444 +55F8 +7C24 +55FE +1092 +1410 +1A94 +E372 +4222 +ENDCHAR +STARTCHAR uniF912 +ENCODING 63762 +BBX 15 15 0 -1 +BITMAP +41FC +2124 +2924 +FDFC +0924 +11FC +2524 +2820 +73FE +AC20 +2470 +20A8 +2126 +2222 +2020 +ENDCHAR +STARTCHAR uniF913 +ENCODING 63763 +BBX 15 15 0 -1 +BITMAP +07FE +4492 +3492 +17FE +0248 +04FE +1748 +FAFE +17C8 +107E +1548 +1AFE +3040 +C800 +87FE +ENDCHAR +STARTCHAR uniF914 +ENCODING 63764 +BBX 15 15 0 -1 +BITMAP +2108 +2108 +47D0 +5454 +E7F8 +2448 +5454 +FFFE +4550 +0104 +FFFE +0520 +0910 +310E +C104 +ENDCHAR +STARTCHAR uniF915 +ENCODING 63765 +BBX 14 15 1 -1 +BITMAP +4200 +2210 +23F8 +0210 +8520 +5920 +50C0 +2330 +2C0C +C3F0 +4210 +4210 +C210 +C3F0 +4210 +ENDCHAR +STARTCHAR uniF916 +ENCODING 63766 +BBX 15 15 0 -1 +BITMAP +1080 +1088 +10FC +1088 +5550 +5920 +5230 +50C8 +9306 +10FC +1884 +2484 +2484 +40FC +8084 +ENDCHAR +STARTCHAR uniF917 +ENCODING 63767 +BBX 15 15 0 -1 +BITMAP +0080 +0888 +FCFC +1108 +1290 +1060 +1060 +FD98 +1206 +11F8 +1508 +1908 +E108 +41F8 +0108 +ENDCHAR +STARTCHAR uniF918 +ENCODING 63768 +BBX 14 15 1 -1 +BITMAP +0880 +FFFC +0880 +4880 +23F0 +2A10 +8B20 +54C0 +1120 +2210 +2FFC +C210 +4210 +43F0 +C210 +ENDCHAR +STARTCHAR uniF919 +ENCODING 63769 +BBX 15 15 0 -1 +BITMAP +0420 +FE24 +283E +2824 +FE44 +AAA8 +AA10 +AA28 +CE44 +82FE +FE44 +8244 +8244 +FE7C +8244 +ENDCHAR +STARTCHAR uniF91A +ENCODING 63770 +BBX 15 15 0 -1 +BITMAP +4440 +7E48 +487C +4888 +7F48 +4830 +7E30 +4848 +7E86 +43FC +0284 +5684 +AA84 +AAFC +0C84 +ENDCHAR +STARTCHAR uniF91B +ENCODING 63771 +BBX 15 15 0 -1 +BITMAP +0720 +F920 +9120 +4A20 +FF20 +1420 +FFA0 +92A0 +BDA0 +80A0 +BEA0 +94A2 +8CA2 +92A2 +A39E +ENDCHAR +STARTCHAR uniF91C +ENCODING 63772 +BBX 14 15 1 -1 +BITMAP +0400 +4E88 +70FC +4488 +6488 +54A8 +54A8 +4498 +4488 +4C88 +7488 +44B8 +0890 +1080 +E080 +ENDCHAR +STARTCHAR uniF91D +ENCODING 63773 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +28A2 +FFBE +28A2 +2FBE +6842 +6BFA +7842 +ABFA +AB5A +2AEA +2BFA +2952 +2A4E +ENDCHAR +STARTCHAR uniF91E +ENCODING 63774 +BBX 15 15 0 -1 +BITMAP +13DE +1252 +13DE +1252 +57DE +5A22 +53FE +5222 +93FE +12AA +1BFE +2622 +22B2 +432E +8224 +ENDCHAR +STARTCHAR uniF91F +ENCODING 63775 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0840 +FDF8 +8508 +FDF8 +8508 +FDF8 +8208 +BFE8 +9548 +9FC8 +8208 +8A88 +B278 +ENDCHAR +STARTCHAR uniF920 +ENCODING 63776 +BBX 14 15 1 -1 +BITMAP +2410 +2210 +4FA0 +F078 +4F24 +F07C +5750 +A528 +1FC0 +1040 +1FF0 +1000 +1FFC +5244 +8928 +ENDCHAR +STARTCHAR uniF921 +ENCODING 63777 +BBX 15 15 0 -1 +BITMAP +0080 +2084 +2084 +3FFC +0000 +3FF8 +2028 +2FC8 +2108 +2FE8 +2928 +2FEA +410A +4126 +9FD2 +ENDCHAR +STARTCHAR uniF922 +ENCODING 63778 +BBX 15 15 0 -1 +BITMAP +47D0 +2510 +2514 +07DE +8450 +57D8 +5524 +2524 +27C0 +C000 +47FC +44A4 +C4A4 +C4A4 +4FFE +ENDCHAR +STARTCHAR uniF923 +ENCODING 63779 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0840 +7E00 +4848 +7E7C +4280 +7F20 +4810 +7F10 +0000 +3FF0 +2490 +2490 +FFFC +ENDCHAR +STARTCHAR uniF924 +ENCODING 63780 +BBX 15 15 0 -1 +BITMAP +43E8 +2288 +2A88 +FFCE +0A50 +13E8 +2684 +2A84 +73E0 +A800 +27F8 +22A8 +22A8 +22A8 +27FE +ENDCHAR +STARTCHAR uniF925 +ENCODING 63781 +BBX 15 15 0 -1 +BITMAP +1000 +1040 +1020 +FC24 +13FE +1000 +140C +1908 +F108 +5090 +1090 +1090 +9020 +7024 +27FE +ENDCHAR +STARTCHAR uniF926 +ENCODING 63782 +BBX 15 15 0 -1 +BITMAP +4924 +7E48 +4A48 +4924 +4BFC +7AA4 +4A54 +4BFC +4840 +7B68 +4AD8 +4B68 +4ADA +BB66 +9242 +ENDCHAR +STARTCHAR uniF927 +ENCODING 63783 +BBX 15 15 0 -1 +BITMAP +2124 +2248 +2248 +A924 +FFFC +AAA4 +AA54 +ABFC +F800 +AB68 +22D8 +2B68 +36DA +E266 +4342 +ENDCHAR +STARTCHAR uniF928 +ENCODING 63784 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +7FFE +4400 +5F7C +5144 +5F44 +5148 +5F50 +50C8 +5544 +9244 +9D58 +B140 +0040 +ENDCHAR +STARTCHAR uniF929 +ENCODING 63785 +BBX 14 15 1 -1 +BITMAP +1000 +107C +7E44 +4244 +4244 +7E7C +4244 +4244 +7E44 +417C +4A44 +4444 +4E84 +7284 +C11C +ENDCHAR +STARTCHAR uniF92A +ENCODING 63786 +BBX 14 15 1 -1 +BITMAP +4100 +2490 +27F8 +0410 +8410 +57F0 +5410 +2410 +27F0 +C488 +4490 +4460 +C520 +CE10 +440C +ENDCHAR +STARTCHAR uniF92B +ENCODING 63787 +BBX 15 15 0 -1 +BITMAP +0040 +4C20 +2924 +11FE +3104 +49FC +8904 +19FC +2942 +4944 +8928 +0910 +4948 +3B86 +1102 +ENDCHAR +STARTCHAR uniF92C +ENCODING 63788 +BBX 14 15 1 -1 +BITMAP +2048 +127C +7F48 +4248 +4250 +7E50 +4250 +4248 +7E48 +4244 +4844 +4464 +5A58 +E240 +4040 +ENDCHAR +STARTCHAR uniF92D +ENCODING 63789 +BBX 14 15 1 -1 +BITMAP +0200 +0208 +FFFC +0200 +2220 +2220 +2220 +5250 +8708 +0A80 +1240 +2220 +4218 +8208 +0200 +ENDCHAR +STARTCHAR uniF92E +ENCODING 63790 +BBX 15 15 0 -1 +BITMAP +0040 +8040 +60A0 +2890 +0908 +1246 +1422 +2820 +23FC +C008 +4010 +4020 +41C0 +4020 +0010 +ENDCHAR +STARTCHAR uniF92F +ENCODING 63791 +BBX 14 15 1 -1 +BITMAP +0820 +2AA8 +2CB0 +4920 +1450 +2288 +7FFC +4004 +8208 +7FF0 +0210 +0410 +0910 +10E0 +6040 +ENDCHAR +STARTCHAR uniF930 +ENCODING 63792 +BBX 15 15 0 -1 +BITMAP +107C +1240 +13FE +FE44 +13FA +1242 +16FE +1AA4 +F3FE +52A4 +12FC +1220 +95FE +7842 +239C +ENDCHAR +STARTCHAR uniF931 +ENCODING 63793 +BBX 15 15 0 -1 +BITMAP +1090 +10F8 +1110 +FFFC +1124 +11FC +3924 +55FC +5554 +924A +91FC +1104 +11FC +1104 +11FC +ENDCHAR +STARTCHAR uniF932 +ENCODING 63794 +BBX 15 15 0 -1 +BITMAP +107C +1240 +13FE +1244 +57FA +5A42 +52FE +52A8 +92F8 +12A8 +1AF8 +2400 +25FC +4954 +97FE +ENDCHAR +STARTCHAR uniF933 +ENCODING 63795 +BBX 15 15 0 -1 +BITMAP +0110 +01F8 +2100 +3FFE +2104 +2FF8 +2102 +23FE +2248 +23F8 +2248 +2FFC +2924 +4924 +9FFE +ENDCHAR +STARTCHAR uniF934 +ENCODING 63796 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +0218 +7FD0 +0220 +0248 +FFFC +0100 +0200 +0C60 +1980 +2E08 +C808 +080C +07F8 +ENDCHAR +STARTCHAR uniF935 +ENCODING 63797 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0940 +21F0 +3FFC +2208 +3FF0 +2204 +27FC +2490 +27F0 +2490 +2FF0 +4A50 +BFFC +ENDCHAR +STARTCHAR uniF936 +ENCODING 63798 +BBX 15 15 1 -1 +BITMAP +0100 +01F8 +0100 +3FFC +2202 +2FFE +2888 +3FFE +2888 +2FF8 +4080 +4FFC +8104 +0604 +181C +ENDCHAR +STARTCHAR uniF937 +ENCODING 63799 +BBX 15 15 0 -1 +BITMAP +0040 +7C44 +447E +4484 +4548 +7C30 +5448 +1086 +5102 +5CFC +5084 +5084 +5C84 +F0FC +4084 +ENDCHAR +STARTCHAR uniF938 +ENCODING 63800 +BBX 15 15 0 -1 +BITMAP +1FF8 +4102 +7FFE +8104 +3D78 +0140 +3E78 +2248 +3ED0 +2B30 +084E +2EF8 +2888 +7EF8 +2088 +ENDCHAR +STARTCHAR uniF939 +ENCODING 63801 +BBX 14 15 1 -1 +BITMAP +0880 +1FC0 +2110 +7FF8 +A210 +3FF0 +2210 +3FF0 +4888 +4444 +9FE4 +1020 +1FE0 +1020 +1FE0 +ENDCHAR +STARTCHAR uniF93A +ENCODING 63802 +BBX 14 15 1 -1 +BITMAP +7CF8 +4488 +7D70 +1088 +5DF4 +5110 +FFF0 +2020 +3FE0 +2020 +3FF8 +2000 +3FFC +5244 +8928 +ENDCHAR +STARTCHAR uniF93B +ENCODING 63803 +BBX 15 15 0 -1 +BITMAP +0044 +047C +FE88 +1088 +11F0 +2010 +3FFE +6420 +A522 +24B4 +2468 +27A4 +3D22 +24E2 +0040 +ENDCHAR +STARTCHAR uniF93C +ENCODING 63804 +BBX 15 15 0 -1 +BITMAP +2084 +10FC +1088 +FD08 +05F0 +0810 +13FE +3020 +592C +94A8 +1470 +10A8 +1726 +12E2 +1040 +ENDCHAR +STARTCHAR uniF93D +ENCODING 63805 +BBX 15 15 0 -1 +BITMAP +1088 +10FC +2088 +2508 +45F0 +F810 +13FE +2820 +FD2C +44A8 +0070 +28A8 +5526 +56E2 +8040 +ENDCHAR +STARTCHAR uniF93E +ENCODING 63806 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +07C0 +0440 +0FC0 +0088 +FFFC +2110 +11A0 +0D40 +1120 +E71C +4208 +ENDCHAR +STARTCHAR uniF93F +ENCODING 63807 +BBX 15 15 0 -1 +BITMAP +1044 +187C +1444 +2288 +40F8 +FC10 +11FE +1020 +FF26 +94B4 +5868 +51A8 +1E26 +F0E2 +4040 +ENDCHAR +STARTCHAR uniF940 +ENCODING 63808 +BBX 15 15 0 -1 +BITMAP +0100 +2084 +3FFE +2220 +2224 +3FFE +2224 +3FFC +2804 +2820 +2FA4 +2838 +29A2 +5E22 +883E +ENDCHAR +STARTCHAR uniF941 +ENCODING 63809 +BBX 15 15 0 -1 +BITMAP +2020 +1020 +1050 +FC88 +0106 +02FA +7800 +03FE +7A52 +0252 +7BFE +4A52 +4A52 +7A52 +4A46 +ENDCHAR +STARTCHAR uniF942 +ENCODING 63810 +BBX 14 15 1 -1 +BITMAP +10FC +FE80 +28F8 +FE08 +44F8 +7C80 +44F8 +7C80 +44FC +5C84 +487C +0100 +3FF0 +0108 +FFFC +ENDCHAR +STARTCHAR uniF943 +ENCODING 63811 +BBX 14 15 1 -1 +BITMAP +FFF8 +0200 +0220 +7FF0 +0200 +0208 +FFFC +1040 +1048 +FFFC +1040 +1040 +2040 +4040 +8040 +ENDCHAR +STARTCHAR uniF944 +ENCODING 63812 +BBX 14 15 1 -1 +BITMAP +2080 +3EFC +5120 +8A90 +7EFC +4480 +28F8 +FE08 +44F8 +7C80 +44F8 +7C80 +44F8 +4484 +4C7C +ENDCHAR +STARTCHAR uniF945 +ENCODING 63813 +BBX 14 15 1 -1 +BITMAP +1100 +FDF8 +2900 +FFF8 +4408 +7DF8 +4500 +7DFC +4504 +FFFC +1020 +1FE0 +1020 +FFFC +0020 +ENDCHAR +STARTCHAR uniF946 +ENCODING 63814 +BBX 14 15 1 -1 +BITMAP +0200 +4108 +7FFC +4008 +9210 +1220 +1FF0 +2200 +4200 +0208 +FFFC +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uniF947 +ENCODING 63815 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0400 +0FE0 +1820 +2820 +CFE0 +0408 +FEFC +2040 +3C78 +64C8 +A548 +3C78 +2448 +ENDCHAR +STARTCHAR uniF948 +ENCODING 63816 +BBX 15 15 0 -1 +BITMAP +4480 +7E84 +44FE +4484 +7D48 +4630 +4448 +7C86 +4502 +44FC +7C84 +4484 +2884 +44FC +8484 +ENDCHAR +STARTCHAR uniF949 +ENCODING 63817 +BBX 15 15 0 -1 +BITMAP +1FF8 +4102 +7FFE +8104 +3D78 +0100 +3D78 +0100 +2008 +3FFC +2108 +3FF8 +2108 +3FF8 +2008 +ENDCHAR +STARTCHAR uniF94A +ENCODING 63818 +BBX 15 15 0 -1 +BITMAP +1FF0 +1110 +1FF0 +1110 +1FF0 +1010 +FEFE +9292 +FEFE +9292 +FEFE +0110 +3FF8 +0104 +FFFE +ENDCHAR +STARTCHAR uniF94B +ENCODING 63819 +BBX 15 15 0 -1 +BITMAP +3FFC +2004 +2004 +3FFC +2488 +3FFE +2488 +2FFC +2884 +2FFC +2100 +3FFE +2220 +4160 +9F9E +ENDCHAR +STARTCHAR uniF94C +ENCODING 63820 +BBX 15 15 0 -1 +BITMAP +1020 +11FC +1124 +13FE +FD24 +11FC +1820 +35FC +5524 +51FC +9040 +97FE +1090 +1070 +17CE +ENDCHAR +STARTCHAR uniF94D +ENCODING 63821 +BBX 14 15 1 -1 +BITMAP +4100 +2488 +27FC +0408 +8408 +57F8 +5408 +2450 +2448 +C7FC +4440 +48A0 +C910 +D20C +6404 +ENDCHAR +STARTCHAR uniF94E +ENCODING 63822 +BBX 15 15 0 -1 +BITMAP +4404 +27FE +2404 +07FC +8400 +57FE +5420 +27FE +2622 +C732 +46AA +4B32 +CAAA +D2AA +6226 +ENDCHAR +STARTCHAR uniF94F +ENCODING 63823 +BBX 14 15 1 -1 +BITMAP +3FF8 +2108 +3FF8 +2108 +3FF8 +2208 +0440 +08C0 +3F00 +0410 +7FF8 +2108 +0940 +3730 +C20C +ENDCHAR +STARTCHAR uniF950 +ENCODING 63824 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +21FC +2524 +47FE +F924 +13FE +2A22 +FFFE +4420 +03FE +2888 +5590 +5460 +839E +ENDCHAR +STARTCHAR uniF951 +ENCODING 63825 +BBX 15 15 0 -1 +BITMAP +8804 +F9FE +8810 +9090 +A2FE +A292 +9292 +9292 +8AAA +8AC6 +CA82 +B29E +8284 +8200 +83FE +ENDCHAR +STARTCHAR uniF952 +ENCODING 63826 +BBX 15 15 0 -1 +BITMAP +2220 +2220 +FFA0 +2224 +3EFE +0824 +7F24 +4924 +4924 +7F24 +0844 +FF44 +0884 +08BC +0908 +ENDCHAR +STARTCHAR uniF953 +ENCODING 63827 +BBX 15 15 0 -1 +BITMAP +2420 +3E20 +2420 +2424 +25FE +3C24 +2424 +2424 +2424 +3C24 +2444 +2444 +24A4 +5D1C +8808 +ENDCHAR +STARTCHAR uniF954 +ENCODING 63828 +BBX 15 15 0 -1 +BITMAP +0040 +8FFE +6000 +2BFC +0A94 +12F4 +1204 +23FC +2000 +C3F8 +4040 +4FFE +4248 +4444 +0842 +ENDCHAR +STARTCHAR uniF955 +ENCODING 63829 +BBX 15 15 0 -1 +BITMAP +0040 +8048 +63FC +2840 +0844 +17FE +1108 +2204 +248A +C1FC +4308 +4490 +4860 +419E +0E04 +ENDCHAR +STARTCHAR uniF956 +ENCODING 63830 +BBX 15 15 0 -1 +BITMAP +0420 +0E28 +F1FC +1020 +15FE +FE48 +1086 +1942 +3678 +5088 +9148 +1230 +1050 +118E +1604 +ENDCHAR +STARTCHAR uniF957 +ENCODING 63831 +BBX 15 15 0 -1 +BITMAP +1020 +11FC +2020 +2424 +47FE +F888 +1104 +2A82 +FCF8 +4508 +0288 +2850 +5460 +5598 +8606 +ENDCHAR +STARTCHAR uniF958 +ENCODING 63832 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0A40 +3FF0 +0200 +FFFC +0840 +3430 +C7EC +0840 +3480 +0300 +0CE0 +F01C +ENDCHAR +STARTCHAR uniF959 +ENCODING 63833 +BBX 15 15 0 -1 +BITMAP +8848 +FBFC +8840 +9044 +A7FE +A090 +910C +9284 +88F8 +8988 +CA90 +B4A0 +8060 +8198 +8E06 +ENDCHAR +STARTCHAR uniF95A +ENCODING 63834 +BBX 15 15 0 -1 +BITMAP +2020 +13FE +FC20 +01FC +0000 +7BFE +0252 +03FE +7904 +01FC +7904 +49FC +4904 +79FC +4B06 +ENDCHAR +STARTCHAR uniF95B +ENCODING 63835 +BBX 14 15 1 -1 +BITMAP +1008 +11FC +FE88 +2450 +4820 +3450 +238C +C070 +3F80 +0110 +3FF8 +0100 +FFFC +0100 +0F00 +ENDCHAR +STARTCHAR uniF95C +ENCODING 63836 +BBX 15 15 0 -1 +BITMAP +2108 +2108 +47D0 +5454 +E7F8 +2448 +5454 +FFFE +4550 +0104 +FFFE +0520 +0910 +310E +C104 +ENDCHAR +STARTCHAR uniF95D +ENCODING 63837 +BBX 15 15 0 -1 +BITMAP +2088 +1088 +13FE +FC88 +00A8 +0020 +7824 +03FE +7840 +00FC +7984 +4A84 +4C84 +78FC +4884 +ENDCHAR +STARTCHAR uniF95E +ENCODING 63838 +BBX 14 15 1 -1 +BITMAP +0020 +1FF0 +1020 +1020 +1220 +1120 +1120 +1020 +FFFC +1020 +1020 +2020 +2120 +40E0 +8040 +ENDCHAR +STARTCHAR uniF95F +ENCODING 63839 +BBX 14 15 1 -1 +BITMAP +0200 +4108 +7FFC +4A08 +A950 +4FC8 +0000 +3FF0 +2490 +FFFC +0000 +7FF8 +0100 +0F00 +0200 +ENDCHAR +STARTCHAR uniF960 +ENCODING 63840 +BBX 14 15 1 -1 +BITMAP +1000 +1008 +17FC +FC88 +2488 +4890 +3860 +1490 +230C +C004 +0A00 +4910 +494C +4844 +87E0 +ENDCHAR +STARTCHAR uniF961 +ENCODING 63841 +BBX 14 15 1 -1 +BITMAP +0200 +0108 +FFFC +0208 +4490 +2F20 +0200 +34A0 +CFD8 +8A48 +0200 +FFFC +0200 +0200 +0200 +ENDCHAR +STARTCHAR uniF962 +ENCODING 63842 +BBX 14 15 1 -1 +BITMAP +2010 +3FF8 +2210 +3FF0 +2210 +3FF0 +2890 +0880 +7FF8 +0880 +0888 +FFFC +0840 +3030 +C00C +ENDCHAR +STARTCHAR uniF963 +ENCODING 63843 +BBX 15 15 0 -1 +BITMAP +0880 +0880 +0880 +088C +0888 +F890 +08E0 +0880 +0880 +0880 +0880 +1884 +E884 +4886 +087C +ENDCHAR +STARTCHAR uniF964 +ENCODING 63844 +BBX 15 15 0 -1 +BITMAP +000E +09F0 +FC26 +2124 +20A8 +23FE +3CA8 +6524 +A622 +25FE +2522 +25FE +3D22 +25FE +2102 +ENDCHAR +STARTCHAR uniF965 +ENCODING 63845 +BBX 15 15 0 -1 +BITMAP +1004 +17FE +1040 +2444 +27FE +2444 +67FC +A444 +27FC +2444 +2240 +2140 +2080 +2140 +2E3E +ENDCHAR +STARTCHAR uniF966 +ENCODING 63846 +BBX 15 15 0 -1 +BITMAP +1904 +11FE +2200 +45FC +9904 +11FC +2104 +61FC +A080 +21FC +2308 +2490 +2060 +2198 +2606 +ENDCHAR +STARTCHAR uniF967 +ENCODING 63847 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0100 +0100 +0200 +0600 +0A40 +1220 +2218 +420C +8204 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uniF968 +ENCODING 63848 +BBX 14 15 1 -1 +BITMAP +4000 +2080 +2048 +0848 +8910 +5110 +5110 +2520 +2528 +C944 +4944 +4180 +C308 +C508 +48FC +ENDCHAR +STARTCHAR uniF969 +ENCODING 63849 +BBX 15 15 0 -1 +BITMAP +0840 +7F40 +4940 +FFC4 +497E +7FC8 +0848 +7F48 +4948 +7F48 +1028 +FF90 +222C +1C46 +F382 +ENDCHAR +STARTCHAR uniF96A +ENCODING 63850 +BBX 14 15 1 -1 +BITMAP +0210 +7FF8 +0200 +4208 +7FFC +4208 +8450 +3F80 +0220 +0410 +7FE8 +0108 +0940 +3730 +C20C +ENDCHAR +STARTCHAR uniF96B +ENCODING 63851 +BBX 14 15 1 -1 +BITMAP +0200 +0440 +0FA0 +2020 +4848 +F6FC +0304 +0480 +F978 +0600 +3880 +0330 +3CC0 +0300 +3C00 +ENDCHAR +STARTCHAR uniF96C +ENCODING 63852 +BBX 14 15 1 -1 +BITMAP +0200 +4104 +7FFC +8448 +3FF8 +0440 +3FF8 +0440 +FFFC +0920 +1110 +2FEC +4104 +0108 +FFFC +ENDCHAR +STARTCHAR uniF96D +ENCODING 63853 +BBX 14 15 1 -1 +BITMAP +0200 +1A20 +1210 +22CC +4284 +8100 +0210 +1FF8 +3010 +DFF0 +1010 +1FF0 +1010 +1FF0 +1010 +ENDCHAR +STARTCHAR uniF96E +ENCODING 63854 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0840 +1220 +FFFC +1220 +13E0 +1000 +1FF8 +0100 +FFFC +0580 +0940 +3130 +C10C +ENDCHAR +STARTCHAR uniF96F +ENCODING 63855 +BBX 15 15 0 -1 +BITMAP +2108 +1088 +1090 +FE20 +01FC +0104 +FD04 +0104 +FDFC +0154 +FC50 +8450 +8492 +FD12 +860E +ENDCHAR +STARTCHAR uniF970 +ENCODING 63856 +BBX 15 15 1 -1 +BITMAP +0400 +44F0 +2890 +1090 +2D12 +DA1E +1400 +FDF8 +1088 +3888 +3450 +5420 +9050 +1088 +1306 +ENDCHAR +STARTCHAR uniF971 +ENCODING 63857 +BBX 15 15 0 -1 +BITMAP +1004 +1FFE +1000 +1010 +17F8 +1000 +1004 +1FFE +1240 +1248 +1250 +2220 +2290 +4F08 +8406 +ENDCHAR +STARTCHAR uniF972 +ENCODING 63858 +BBX 14 15 1 -1 +BITMAP +4080 +2080 +2080 +0488 +87FC +5488 +5890 +2080 +2080 +C080 +4080 +4140 +C244 +C444 +483C +ENDCHAR +STARTCHAR uniF973 +ENCODING 63859 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +10A0 +FD10 +1208 +1006 +15FA +1800 +F108 +51FC +1108 +1108 +9108 +71F8 +2108 +ENDCHAR +STARTCHAR uniF974 +ENCODING 63860 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +0840 +0200 +0208 +FFFC +0400 +0810 +1FF8 +2810 +C810 +0FF0 +0810 +ENDCHAR +STARTCHAR uniF975 +ENCODING 63861 +BBX 15 15 0 -1 +BITMAP +1040 +1020 +1024 +FFFE +1000 +11FC +1504 +1904 +F1FC +5124 +1020 +11A8 +9124 +72E2 +2442 +ENDCHAR +STARTCHAR uniF976 +ENCODING 63862 +BBX 14 15 1 -1 +BITMAP +0100 +8908 +FDFC +A908 +AA90 +A860 +A890 +F90C +AA04 +A9F8 +A908 +F908 +8908 +01F8 +0108 +ENDCHAR +STARTCHAR uniF977 +ENCODING 63863 +BBX 14 15 1 -1 +BITMAP +0400 +0208 +FFFC +0000 +1FE0 +1020 +1FE0 +0000 +7FFC +4004 +8F88 +0880 +0884 +3084 +C07C +ENDCHAR +STARTCHAR uniF978 +ENCODING 63864 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0200 +0208 +FFFC +8208 +A288 +9248 +9248 +AAA8 +CB28 +8208 +8248 +8238 +8010 +ENDCHAR +STARTCHAR uniF979 +ENCODING 63865 +BBX 15 15 0 -1 +BITMAP +0080 +8040 +6044 +27FE +0800 +13FC +1204 +2204 +23FC +C224 +4020 +4230 +4528 +48E4 +1044 +ENDCHAR +STARTCHAR uniF97A +ENCODING 63866 +BBX 14 15 1 -1 +BITMAP +2010 +17F8 +8090 +4A98 +1294 +1494 +6170 +2620 +2108 +FFFC +0580 +0940 +1120 +211C +C108 +ENDCHAR +STARTCHAR uniF97B +ENCODING 63867 +BBX 15 15 0 -1 +BITMAP +11FC +1104 +95FC +5504 +59FC +1000 +FDFE +1124 +19FC +3524 +55FC +9020 +11FC +1020 +13FE +ENDCHAR +STARTCHAR uniF97C +ENCODING 63868 +BBX 13 15 2 -1 +BITMAP +0400 +2240 +3FE0 +2040 +2040 +3FC0 +2040 +2040 +3FC0 +2400 +2230 +21C0 +2C80 +F060 +4018 +ENDCHAR +STARTCHAR uniF97D +ENCODING 63869 +BBX 15 15 0 -1 +BITMAP +2040 +1020 +1024 +FFFE +0000 +01FC +7D04 +0104 +7DFC +0124 +7CA8 +44A4 +4522 +7EE2 +4440 +ENDCHAR +STARTCHAR uniF97E +ENCODING 63870 +BBX 14 15 1 -1 +BITMAP +3FE0 +2020 +3FE0 +2020 +3FE0 +0008 +FFFC +2220 +3FE0 +2220 +3FE0 +0200 +7FF0 +0200 +FFFC +ENDCHAR +STARTCHAR uniF97F +ENCODING 63871 +BBX 15 15 0 -1 +BITMAP +7FD0 +4910 +7FD0 +4912 +5FFE +5252 +5FD2 +5252 +5FD2 +4212 +5FD2 +5252 +53D2 +9C6E +90C4 +ENDCHAR +STARTCHAR uniF980 +ENCODING 63872 +BBX 11 15 3 -1 +BITMAP +4080 +7FC0 +4080 +4080 +4080 +7F80 +4880 +0800 +9040 +FFE0 +8040 +8040 +8040 +FFC0 +8040 +ENDCHAR +STARTCHAR uniF981 +ENCODING 63873 +BBX 14 15 1 -1 +BITMAP +0400 +0600 +0400 +0400 +0408 +FFFC +0840 +0840 +1040 +1040 +2080 +1D00 +0300 +0CE0 +F01C +ENDCHAR +STARTCHAR uniF982 +ENCODING 63874 +BBX 15 15 0 -1 +BITMAP +2104 +3FFE +2080 +20F8 +2880 +2FFE +2884 +2FF8 +2A4A +2BFE +2A48 +2FF8 +2D28 +5528 +AFFE +ENDCHAR +STARTCHAR uniF983 +ENCODING 63875 +BBX 15 15 0 -1 +BITMAP +1040 +0840 +0844 +FEFE +2080 +251C +3EE0 +24A6 +24A4 +2498 +2490 +2490 +24A8 +5DC6 +8882 +ENDCHAR +STARTCHAR uniF984 +ENCODING 63876 +BBX 15 15 0 -1 +BITMAP +4048 +207C +2440 +07FE +8444 +57FA +5442 +25FE +2524 +C5FC +4524 +45FC +CA94 +CA8A +44FA +ENDCHAR +STARTCHAR uniF985 +ENCODING 63877 +BBX 15 15 0 -1 +BITMAP +03FE +0A48 +FFFE +2248 +22FC +2294 +7AFC +CA94 +4AFC +4A10 +4AFE +4A92 +7AFA +4C86 +0882 +ENDCHAR +STARTCHAR uniF986 +ENCODING 63878 +BBX 14 15 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8004 +8FC4 +8844 +8FC4 +8204 +9FE4 +9024 +9FE4 +903C +8008 +ENDCHAR +STARTCHAR uniF987 +ENCODING 63879 +BBX 15 15 0 -1 +BITMAP +89DC +FC00 +93FE +92AA +FEAA +9020 +FDFE +9150 +FDFC +8554 +05FC +5594 +AED8 +A492 +18EE +ENDCHAR +STARTCHAR uniF988 +ENCODING 63880 +BBX 15 15 0 -1 +BITMAP +3E7C +0000 +3E7C +2A54 +2B54 +0080 +3FFC +2240 +3FF8 +2248 +3FF8 +2852 +2F62 +4842 +9F3E +ENDCHAR +STARTCHAR uniF989 +ENCODING 63881 +BBX 14 15 1 -1 +BITMAP +1C80 +F084 +10FC +FD24 +1844 +3484 +533C +9488 +0940 +3130 +C92C +07C0 +0920 +7718 +2208 +ENDCHAR +STARTCHAR uniF98A +ENCODING 63882 +BBX 13 15 1 -1 +BITMAP +0200 +0200 +0200 +0210 +7FF8 +0210 +0210 +0210 +0210 +0410 +0410 +0810 +1110 +20E0 +C040 +ENDCHAR +STARTCHAR uniF98B +ENCODING 63883 +BBX 15 15 0 -1 +BITMAP +3FFE +2108 +2E70 +2214 +3FFE +2210 +2738 +2AD4 +3292 +27F8 +2408 +27F8 +2408 +47F8 +8408 +ENDCHAR +STARTCHAR uniF98C +ENCODING 63884 +BBX 15 15 0 -1 +BITMAP +2004 +3FFE +2084 +2F78 +2210 +3FFE +2210 +2738 +2AD6 +3212 +2040 +2440 +247C +4440 +9FFE +ENDCHAR +STARTCHAR uniF98D +ENCODING 63885 +BBX 15 15 0 -1 +BITMAP +2124 +2124 +FD74 +22DA +FB74 +A954 +FAFA +AF56 +F820 +A824 +23FE +FEB0 +2128 +2226 +2422 +ENDCHAR +STARTCHAR uniF98E +ENCODING 63886 +BBX 14 15 1 -1 +BITMAP +1800 +1010 +1FF8 +2100 +4100 +9110 +1FF8 +1100 +1100 +1108 +FFFC +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniF98F +ENCODING 63887 +BBX 15 15 0 -1 +BITMAP +124C +1148 +1150 +17FE +58D0 +5548 +5246 +9208 +13BE +1488 +1AA8 +117E +1108 +1208 +1408 +ENDCHAR +STARTCHAR uniF990 +ENCODING 63888 +BBX 15 15 0 -1 +BITMAP +1204 +1104 +27C8 +701C +23C8 +4812 +FBFE +5254 +AA6A +ABAA +0400 +2504 +2492 +2412 +43F8 +ENDCHAR +STARTCHAR uniF991 +ENCODING 63889 +BBX 15 15 0 -1 +BITMAP +1210 +1214 +13D2 +FA90 +12FE +1590 +1290 +1990 +F128 +5246 +1C82 +1000 +9324 +7492 +2892 +ENDCHAR +STARTCHAR uniF992 +ENCODING 63890 +BBX 15 15 0 -1 +BITMAP +4020 +2824 +27FE +0420 +81FC +5124 +55FC +2F24 +25FC +C420 +47FE +4420 +C420 +DA20 +51FE +ENDCHAR +STARTCHAR uniF993 +ENCODING 63891 +BBX 15 15 0 -1 +BITMAP +1020 +1024 +13FE +1020 +57FE +5A22 +5326 +52AA +93FE +1222 +1870 +24A8 +2526 +4222 +8020 +ENDCHAR +STARTCHAR uniF994 +ENCODING 63892 +BBX 15 15 0 -1 +BITMAP +0010 +1410 +FAFE +2210 +207E +2052 +207E +FF52 +217E +2152 +2110 +39FE +E110 +4690 +047E +ENDCHAR +STARTCHAR uniF995 +ENCODING 63893 +BBX 15 15 0 -1 +BITMAP +0020 +00F0 +3F00 +0104 +FFFE +0540 +0920 +3118 +C076 +1F80 +0108 +FFFC +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniF996 +ENCODING 63894 +BBX 15 15 0 -1 +BITMAP +1024 +13FE +2020 +27FE +4622 +FB26 +12AA +2BFE +FA22 +4420 +0070 +28A8 +5526 +5622 +8020 +ENDCHAR +STARTCHAR uniF997 +ENCODING 63895 +BBX 15 15 0 -1 +BITMAP +0488 +FE88 +2552 +27BC +3C88 +2554 +27DC +3C22 +2554 +2754 +2D54 +F5DC +4454 +0490 +0510 +ENDCHAR +STARTCHAR uniF998 +ENCODING 63896 +BBX 14 15 1 -1 +BITMAP +1020 +7EF8 +1020 +FEFC +2850 +4588 +8104 +7FFC +1110 +1FF0 +1110 +1FF0 +0100 +FFFC +0100 +ENDCHAR +STARTCHAR uniF999 +ENCODING 63897 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0840 +4080 +2FF8 +2080 +07F0 +0490 +E7F0 +2490 +27F0 +2080 +2FF8 +D080 +8FFC +ENDCHAR +STARTCHAR uniF99A +ENCODING 63898 +BBX 15 15 0 -1 +BITMAP +0040 +4044 +37FE +1040 +03FC +0244 +13FC +FA44 +13FC +1244 +1040 +17FE +3040 +C840 +87FE +ENDCHAR +STARTCHAR uniF99B +ENCODING 63899 +BBX 15 15 0 -1 +BITMAP +1020 +1824 +15FE +2220 +41FE +FD22 +11A6 +116A +FFFE +9522 +5870 +50A8 +1F26 +F222 +4020 +ENDCHAR +STARTCHAR uniF99C +ENCODING 63900 +BBX 14 15 1 -1 +BITMAP +0204 +FF04 +1044 +1044 +1244 +1F44 +2244 +6244 +9244 +1444 +0844 +0804 +1024 +201C +C008 +ENDCHAR +STARTCHAR uniF99D +ENCODING 63901 +BBX 14 15 1 -1 +BITMAP +0200 +0200 +3230 +220C +4234 +8040 +0380 +0D00 +3108 +CFFC +0108 +0208 +0448 +1838 +6010 +ENDCHAR +STARTCHAR uniF99E +ENCODING 63902 +BBX 15 15 0 -1 +BITMAP +0202 +93FE +FA22 +9222 +9222 +93FA +9222 +9222 +9262 +9252 +F28A +930A +0202 +03FE +0202 +ENDCHAR +STARTCHAR uniF99F +ENCODING 63903 +BBX 14 15 1 -1 +BITMAP +0208 +FF08 +1048 +1048 +1F48 +2248 +6248 +9248 +1408 +0838 +F010 +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uniF9A0 +ENCODING 63904 +BBX 14 15 1 -1 +BITMAP +0208 +FF48 +1048 +3E48 +6248 +1448 +7A38 +0110 +FFFC +0500 +0890 +18A0 +E840 +0E30 +180C +ENDCHAR +STARTCHAR uniF9A1 +ENCODING 63905 +BBX 15 15 0 -1 +BITMAP +2108 +1088 +1090 +FE20 +01FC +0104 +FD04 +0104 +FDFC +0154 +FC50 +8450 +8492 +FD12 +860E +ENDCHAR +STARTCHAR uniF9A2 +ENCODING 63906 +BBX 15 15 0 -1 +BITMAP +2104 +3FFE +2220 +2144 +2FFE +2140 +2FF8 +2148 +3FFE +2148 +2FF8 +2140 +2360 +4550 +994C +ENDCHAR +STARTCHAR uniF9A3 +ENCODING 63907 +BBX 14 15 1 -1 +BITMAP +0200 +0500 +0880 +1040 +2220 +C118 +0000 +1FC0 +0040 +0280 +0900 +4908 +4824 +8824 +07F0 +ENDCHAR +STARTCHAR uniF9A4 +ENCODING 63908 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +1050 +FC88 +1126 +1212 +15FC +1808 +F010 +5010 +12C4 +12A2 +928A +7488 +207C +ENDCHAR +STARTCHAR uniF9A5 +ENCODING 63909 +BBX 15 15 0 -1 +BITMAP +0420 +FE20 +2050 +2088 +2576 +3E02 +25DC +6554 +9554 +15DC +0800 +0888 +1088 +2156 +C222 +ENDCHAR +STARTCHAR uniF9A6 +ENCODING 63910 +BBX 15 15 0 -1 +BITMAP +1040 +1F7E +2890 +7FFE +2420 +2FFC +2240 +2FF8 +2248 +3FFE +2248 +2FF8 +2650 +4A48 +B246 +ENDCHAR +STARTCHAR uniF9A7 +ENCODING 63911 +BBX 15 15 0 -1 +BITMAP +0124 +4E48 +2A48 +1124 +33FC +4A54 +8AA4 +1BFC +2840 +4B68 +8AD8 +0B6A +4A5A +3B66 +1242 +ENDCHAR +STARTCHAR uniF9A8 +ENCODING 63912 +BBX 14 15 1 -1 +BITMAP +0100 +0300 +0480 +0840 +1220 +2110 +410C +8024 +3FF0 +0020 +0040 +0C80 +0300 +0180 +0080 +ENDCHAR +STARTCHAR uniF9A9 +ENCODING 63913 +BBX 13 15 2 -1 +BITMAP +8010 +FFF8 +8410 +8610 +8910 +9490 +E270 +8010 +BFD0 +8110 +8E10 +8210 +8210 +FFF0 +8010 +ENDCHAR +STARTCHAR uniF9AA +ENCODING 63914 +BBX 14 15 1 -1 +BITMAP +0200 +4108 +7FFC +4A08 +A950 +4FC8 +0000 +3FF0 +2490 +FFFC +0000 +7FF8 +0100 +0F00 +0200 +ENDCHAR +STARTCHAR uniF9AB +ENCODING 63915 +BBX 14 15 1 -1 +BITMAP +2108 +2108 +3FF8 +0000 +17FC +2840 +45F8 +9308 +09F8 +FF08 +05F8 +0908 +71F8 +0890 +0B0C +ENDCHAR +STARTCHAR uniF9AC +ENCODING 63916 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +10A0 +1110 +5A08 +5446 +5422 +9020 +13FC +1008 +1010 +10A0 +1060 +1030 +1010 +ENDCHAR +STARTCHAR uniF9AD +ENCODING 63917 +BBX 15 15 0 -1 +BITMAP +0020 +0860 +FC50 +1088 +1104 +1242 +1022 +FC20 +1008 +11FC +1408 +1810 +E0E0 +4010 +0010 +ENDCHAR +STARTCHAR uniF9AE +ENCODING 63918 +BBX 14 15 1 -1 +BITMAP +1020 +54A8 +58B0 +9120 +2850 +4488 +FFFC +8008 +7FF0 +0200 +0200 +3FF0 +0240 +0228 +FFFC +ENDCHAR +STARTCHAR uniF9AF +ENCODING 63919 +BBX 15 15 0 -1 +BITMAP +4420 +2420 +2850 +FE50 +1088 +10A6 +7D12 +1010 +10FC +FE04 +1008 +10D0 +2020 +4010 +8010 +ENDCHAR +STARTCHAR uniF9B0 +ENCODING 63920 +BBX 15 15 0 -1 +BITMAP +0220 +FF20 +2450 +2450 +3C88 +2546 +2622 +3C20 +2400 +25FC +2E08 +F448 +4430 +0410 +0410 +ENDCHAR +STARTCHAR uniF9B1 +ENCODING 63921 +BBX 15 15 0 -1 +BITMAP +1020 +1820 +1450 +2288 +4106 +FE42 +1020 +1020 +FE04 +95FE +5808 +5050 +1E20 +F010 +4010 +ENDCHAR +STARTCHAR uniF9B2 +ENCODING 63922 +BBX 15 15 0 -1 +BITMAP +1FF8 +4102 +7FFE +8104 +3D78 +0100 +3D78 +06C0 +1930 +E08E +0FF0 +0020 +0040 +0380 +0060 +ENDCHAR +STARTCHAR uniF9B3 +ENCODING 63923 +BBX 15 15 0 -1 +BITMAP +1FF8 +4102 +7FFE +8104 +3D78 +0100 +7BDE +4A52 +7BDE +0000 +7FFC +0910 +1930 +2548 +FFFE +ENDCHAR +STARTCHAR uniF9B4 +ENCODING 63924 +BBX 15 15 0 -1 +BITMAP +0804 +09FE +0820 +14FC +2284 +4984 +84FC +0484 +7FFC +0284 +2484 +18FC +0884 +0858 +0386 +ENDCHAR +STARTCHAR uniF9B5 +ENCODING 63925 +BBX 15 15 0 -1 +BITMAP +0800 +0842 +0FE2 +1212 +1252 +33F2 +5452 +9652 +1952 +1092 +1092 +1112 +1102 +121E +1404 +ENDCHAR +STARTCHAR uniF9B6 +ENCODING 63926 +BBX 15 15 0 -1 +BITMAP +2050 +11FC +1154 +FDFC +0554 +09FC +1000 +33FE +5800 +95FC +1504 +11FC +1088 +1050 +13FE +ENDCHAR +STARTCHAR uniF9B7 +ENCODING 63927 +BBX 15 15 0 -1 +BITMAP +0428 +FEFE +28AA +28FE +FEAA +AAFE +AA00 +ABFE +CE00 +82FC +FE84 +82FC +8284 +FE48 +83FE +ENDCHAR +STARTCHAR uniF9B8 +ENCODING 63928 +BBX 15 15 0 -1 +BITMAP +1020 +1024 +FFFE +1824 +3424 +D3FE +1024 +7DFC +0124 +FEA2 +10B4 +5868 +97A4 +B122 +1062 +ENDCHAR +STARTCHAR uniF9B9 +ENCODING 63929 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0480 +7CF8 +4008 +4008 +7CF8 +0480 +FFFC +0000 +0900 +4888 +48A4 +4824 +87F0 +ENDCHAR +STARTCHAR uniF9BA +ENCODING 63930 +BBX 12 15 2 -1 +BITMAP +0020 +FFF0 +0020 +0040 +0080 +0300 +0200 +0200 +0200 +0200 +0200 +0200 +2200 +1E00 +0400 +ENDCHAR +STARTCHAR uniF9BB +ENCODING 63931 +BBX 15 15 0 -1 +BITMAP +0840 +0844 +0FFE +10A2 +1514 +33F8 +560C +9BFA +1208 +13F8 +1040 +1248 +1444 +19C2 +1042 +ENDCHAR +STARTCHAR uniF9BC +ENCODING 63932 +BBX 14 15 1 -1 +BITMAP +0200 +4108 +7FFC +4208 +BFF8 +4850 +3FE0 +5030 +9FEC +1020 +1FE0 +0100 +1960 +2718 +4208 +ENDCHAR +STARTCHAR uniF9BD +ENCODING 63933 +BBX 14 15 1 -1 +BITMAP +2008 +3FFC +2008 +2008 +3FF8 +2088 +2080 +3E98 +24D0 +24A0 +24A0 +4890 +488C +9384 +8100 +ENDCHAR +STARTCHAR uniF9BE +ENCODING 63934 +BBX 15 15 0 -1 +BITMAP +0808 +4908 +4948 +2A28 +2828 +0A08 +FF48 +0828 +0C28 +1A0E +2A38 +49C8 +8888 +0808 +0808 +ENDCHAR +STARTCHAR uniF9BF +ENCODING 63935 +BBX 15 15 0 -1 +BITMAP +2108 +2108 +47D0 +5454 +E7F8 +2448 +5454 +FFFE +4550 +0104 +FFFE +0520 +0910 +310E +C104 +ENDCHAR +STARTCHAR uniF9C0 +ENCODING 63936 +BBX 15 15 0 -1 +BITMAP +1040 +1040 +17FE +14A2 +5314 +55F8 +5B0C +55FA +9108 +11F8 +1820 +2528 +2624 +44E2 +8842 +ENDCHAR +STARTCHAR uniF9C1 +ENCODING 63937 +BBX 15 15 0 -1 +BITMAP +0080 +1044 +1FFE +9040 +5FFE +5514 +13F8 +120C +37FA +DA08 +93F8 +2040 +2250 +45C8 +8886 +ENDCHAR +STARTCHAR uniF9C2 +ENCODING 63938 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0840 +0000 +FDF8 +2448 +1C38 +64C8 +0700 +18C0 +EE3C +00C0 +1F30 +00C0 +7F00 +ENDCHAR +STARTCHAR uniF9C3 +ENCODING 63939 +BBX 15 15 0 -1 +BITMAP +0040 +4044 +37FE +1294 +0108 +03FC +150A +F9F8 +1108 +11F8 +1128 +1226 +34E2 +C840 +87FE +ENDCHAR +STARTCHAR uniF9C4 +ENCODING 63940 +BBX 14 15 1 -1 +BITMAP +2080 +1088 +FEFC +4480 +28F8 +FE08 +00F8 +7C80 +44F8 +7C80 +44F8 +7C80 +44FC +5C84 +487C +ENDCHAR +STARTCHAR uniF9C5 +ENCODING 63941 +BBX 15 15 0 -1 +BITMAP +1010 +1FF8 +1010 +1FF0 +5012 +7FFE +8104 +7FFC +1110 +1FF0 +1110 +1FF0 +0100 +7FFE +0100 +ENDCHAR +STARTCHAR uniF9C6 +ENCODING 63942 +BBX 14 15 1 -1 +BITMAP +8810 +FBF8 +8800 +9000 +A008 +A7FC +9120 +9120 +8920 +8920 +C920 +B224 +8424 +8824 +901C +ENDCHAR +STARTCHAR uniF9C7 +ENCODING 63943 +BBX 15 15 0 -1 +BITMAP +1802 +67C2 +4252 +4A52 +5A52 +6592 +9E12 +2112 +DED2 +0412 +7F92 +2492 +1502 +17DE +7C04 +ENDCHAR +STARTCHAR uniF9C8 +ENCODING 63944 +BBX 15 15 0 -1 +BITMAP +1008 +13FC +1088 +1088 +FC88 +1088 +1888 +37F8 +5488 +5088 +9088 +9088 +1088 +1088 +17FE +ENDCHAR +STARTCHAR uniF9C9 +ENCODING 63945 +BBX 15 15 0 -1 +BITMAP +1040 +10D2 +131E +1252 +FE52 +1252 +1A52 +3652 +5252 +53D2 +9252 +9056 +1092 +1110 +1210 +ENDCHAR +STARTCHAR uniF9CA +ENCODING 63946 +BBX 14 15 1 -1 +BITMAP +4100 +2088 +2FFC +0080 +8120 +5210 +57F8 +2008 +2490 +C490 +4490 +4494 +C494 +C894 +508C +ENDCHAR +STARTCHAR uniF9CB +ENCODING 63947 +BBX 15 15 0 -1 +BITMAP +4080 +25FE +2612 +0412 +8492 +5562 +564E +2484 +2000 +C7FC +4444 +47FC +C444 +C7FC +4404 +ENDCHAR +STARTCHAR uniF9CC +ENCODING 63948 +BBX 15 15 0 -1 +BITMAP +0040 +0824 +FDFE +1020 +1040 +1088 +11FC +FC04 +1128 +1128 +1528 +1928 +E22A +442A +0826 +ENDCHAR +STARTCHAR uniF9CD +ENCODING 63949 +BBX 14 15 1 -1 +BITMAP +0400 +4E08 +71FC +4088 +4488 +FAB8 +4110 +3FF0 +2110 +2110 +3FF0 +2110 +2110 +3FF0 +2010 +ENDCHAR +STARTCHAR uniF9CE +ENCODING 63950 +BBX 15 15 0 -1 +BITMAP +0040 +0424 +FFFE +1040 +1088 +23FC +3C84 +6400 +A4A8 +24A8 +24A8 +24A8 +3D2A +222A +0426 +ENDCHAR +STARTCHAR uniF9CF +ENCODING 63951 +BBX 15 15 0 -1 +BITMAP +1000 +1004 +23FE +2444 +4444 +F844 +1044 +2844 +FDFC +4484 +0084 +2884 +5484 +5484 +87FE +ENDCHAR +STARTCHAR uniF9D0 +ENCODING 63952 +BBX 15 15 1 -1 +BITMAP +1000 +93FE +5420 +FEFC +1084 +38FC +5484 +8284 +14FC +1284 +FE84 +10FC +2820 +4448 +8186 +ENDCHAR +STARTCHAR uniF9D1 +ENCODING 63953 +BBX 14 15 1 -1 +BITMAP +0400 +0200 +0300 +0100 +0008 +FFFC +0000 +0000 +0840 +0840 +1020 +1020 +2010 +400C +8004 +ENDCHAR +STARTCHAR uniF9D2 +ENCODING 63954 +BBX 15 15 0 -1 +BITMAP +F720 +1128 +5524 +3320 +5526 +99F8 +0820 +1422 +E3A2 +0824 +7228 +0D12 +722A +0C46 +F182 +ENDCHAR +STARTCHAR uniF9D3 +ENCODING 63955 +BBX 15 15 0 -1 +BITMAP +8840 +F848 +8BFC +9040 +A044 +A7FE +9090 +910C +8A44 +8840 +C848 +B3FC +8040 +8044 +8FFE +ENDCHAR +STARTCHAR uniF9D4 +ENCODING 63956 +BBX 15 15 0 -1 +BITMAP +0840 +0860 +0890 +1108 +1216 +35FA +5000 +97FE +1492 +1492 +17FE +1492 +1492 +1492 +1486 +ENDCHAR +STARTCHAR uniF9D5 +ENCODING 63957 +BBX 15 15 0 -1 +BITMAP +0100 +2108 +2108 +3FF8 +2108 +0280 +0C60 +F7DE +0000 +3FF8 +2448 +3FF8 +2448 +2448 +2418 +ENDCHAR +STARTCHAR uniF9D6 +ENCODING 63958 +BBX 14 15 1 -1 +BITMAP +4080 +2180 +2140 +0220 +8410 +5BEC +5000 +2FF8 +2948 +C948 +4FF8 +4948 +C948 +C978 +4810 +ENDCHAR +STARTCHAR uniF9D7 +ENCODING 63959 +BBX 15 15 0 -1 +BITMAP +1020 +1020 +FE50 +1088 +7D06 +56FA +5400 +7DFC +5554 +7D54 +55FC +1154 +FF54 +1154 +110C +ENDCHAR +STARTCHAR uniF9D8 +ENCODING 63960 +BBX 15 15 0 -1 +BITMAP +1848 +13FC +2048 +4048 +9FFE +1048 +23F8 +6048 +A040 +23FC +2040 +2044 +27FE +2040 +2040 +ENDCHAR +STARTCHAR uniF9D9 +ENCODING 63961 +BBX 15 15 0 -1 +BITMAP +1004 +17FE +1090 +13FE +5A92 +5692 +53FE +9202 +1024 +17FE +1020 +11B0 +1128 +1226 +1422 +ENDCHAR +STARTCHAR uniF9DA +ENCODING 63962 +BBX 14 15 1 -1 +BITMAP +0008 +FFFC +0480 +3FF0 +2490 +2490 +3FF0 +2110 +0108 +FFFC +0580 +0940 +1120 +211C +C108 +ENDCHAR +STARTCHAR uniF9DB +ENCODING 63963 +BBX 14 15 1 -1 +BITMAP +0200 +0108 +FFFC +0208 +4490 +2F20 +0200 +34A0 +CFD8 +8A48 +0200 +FFFC +0200 +0200 +0200 +ENDCHAR +STARTCHAR uniF9DC +ENCODING 63964 +BBX 15 15 1 -1 +BITMAP +0100 +F900 +8BF8 +8A08 +9510 +90E0 +A130 +960E +91F0 +8A40 +8BFC +B440 +83F8 +8040 +8FFE +ENDCHAR +STARTCHAR uniF9DD +ENCODING 63965 +BBX 15 15 0 -1 +BITMAP +0102 +0782 +7C12 +0412 +0492 +FFD2 +0412 +0E12 +1512 +2492 +4492 +8402 +0412 +040E +0404 +ENDCHAR +STARTCHAR uniF9DE +ENCODING 63966 +BBX 14 15 1 -1 +BITMAP +0100 +0108 +FFFC +0100 +2108 +3FFC +2108 +2108 +3FF8 +2108 +1100 +0900 +0600 +0980 +F07C +ENDCHAR +STARTCHAR uniF9DF +ENCODING 63967 +BBX 15 15 0 -1 +BITMAP +3FFC +2004 +3FFC +2080 +24FE +2984 +32FC +2284 +24FC +2C40 +347C +24C8 +2530 +4448 +8586 +ENDCHAR +STARTCHAR uniF9E0 +ENCODING 63968 +BBX 14 15 1 -1 +BITMAP +1020 +1FF0 +1020 +1FE0 +1020 +1FE0 +1020 +0808 +1FFC +2248 +4448 +8888 +1108 +2270 +0420 +ENDCHAR +STARTCHAR uniF9E1 +ENCODING 63969 +BBX 14 15 1 -1 +BITMAP +0200 +0208 +FFFC +0A80 +1240 +2230 +C20C +1FE0 +0080 +0108 +FFFC +0100 +0900 +0700 +0200 +ENDCHAR +STARTCHAR uniF9E2 +ENCODING 63970 +BBX 14 15 1 -1 +BITMAP +0608 +7848 +0848 +FF48 +1848 +2C48 +4A38 +8910 +0108 +FFFC +0580 +0940 +1120 +211C +4108 +ENDCHAR +STARTCHAR uniF9E3 +ENCODING 63971 +BBX 14 15 1 -1 +BITMAP +4408 +27FC +2408 +0408 +87F8 +5408 +5480 +2498 +2490 +C4A0 +44C0 +4880 +C884 +D084 +607C +ENDCHAR +STARTCHAR uniF9E4 +ENCODING 63972 +BBX 15 15 0 -1 +BITMAP +0104 +09FE +FD24 +1124 +11FC +1124 +1124 +FDFC +1124 +1020 +1420 +19FC +E020 +4024 +07FE +ENDCHAR +STARTCHAR uniF9E5 +ENCODING 63973 +BBX 15 15 0 -1 +BITMAP +0100 +1084 +1FFE +9080 +51C2 +5712 +1112 +17D2 +3112 +D192 +9352 +2552 +2902 +411E +8104 +ENDCHAR +STARTCHAR uniF9E6 +ENCODING 63974 +BBX 15 15 0 -1 +BITMAP +3FFC +2244 +2244 +3FFC +2044 +1120 +11FE +5B20 +5520 +91FC +1120 +11FC +1120 +1124 +11FE +ENDCHAR +STARTCHAR uniF9E7 +ENCODING 63975 +BBX 14 15 1 -1 +BITMAP +0208 +FFFC +0000 +1FF0 +1110 +1FF0 +1110 +7FF8 +0100 +FFFC +0510 +08A0 +3940 +CA30 +0C0C +ENDCHAR +STARTCHAR uniF9E8 +ENCODING 63976 +BBX 15 15 0 -1 +BITMAP +4104 +21FE +2924 +FD24 +09FC +1124 +2524 +29FC +7124 +AC20 +2420 +21FC +2020 +2024 +27FE +ENDCHAR +STARTCHAR uniF9E9 +ENCODING 63977 +BBX 14 15 1 -1 +BITMAP +2010 +3FF8 +2210 +2210 +3FF0 +2210 +2210 +3FF0 +2210 +0200 +0210 +7FF8 +0200 +0208 +FFFC +ENDCHAR +STARTCHAR uniF9EA +ENCODING 63978 +BBX 15 15 0 -1 +BITMAP +1050 +0848 +FFC8 +557E +4948 +49C8 +557E +7F48 +0848 +7F48 +497E +5548 +7B48 +417E +4740 +ENDCHAR +STARTCHAR uniF9EB +ENCODING 63979 +BBX 14 15 1 -1 +BITMAP +8008 +FFFC +8440 +8440 +BFF8 +8540 +8208 +BFFC +8400 +8FF0 +9410 +A410 +87F0 +8410 +FFFC +ENDCHAR +STARTCHAR uniF9EC +ENCODING 63980 +BBX 15 15 0 -1 +BITMAP +4082 +27BE +2082 +0082 +879E +5492 +5410 +27BE +28A2 +C492 +4186 +469A +D8E2 +C71C +4208 +ENDCHAR +STARTCHAR uniF9ED +ENCODING 63981 +BBX 14 15 1 -1 +BITMAP +0200 +0108 +FFFC +1020 +0840 +0480 +0300 +1CE0 +E01C +3FF0 +2010 +2010 +2010 +3FF0 +2010 +ENDCHAR +STARTCHAR uniF9EE +ENCODING 63982 +BBX 15 15 0 -1 +BITMAP +1222 +1124 +10A8 +13FE +54A8 +5924 +5222 +5108 +91DE +1248 +19A8 +24BE +2508 +4208 +8408 +ENDCHAR +STARTCHAR uniF9EF +ENCODING 63983 +BBX 15 15 0 -1 +BITMAP +0222 +1124 +F8A8 +23FE +20A8 +2124 +2222 +FA08 +23BE +2288 +26A8 +39FE +E108 +4208 +0408 +ENDCHAR +STARTCHAR uniF9F0 +ENCODING 63984 +BBX 14 15 1 -1 +BITMAP +0840 +FFFC +0840 +7CF8 +4488 +7CF8 +4488 +7CF8 +4FC8 +5908 +6FC8 +4908 +4FC8 +4938 +4FD0 +ENDCHAR +STARTCHAR uniF9F1 +ENCODING 63985 +BBX 15 15 0 -1 +BITMAP +8A4C +F948 +8950 +97FE +A150 +A248 +9C46 +9208 +8BBE +8C88 +CAA8 +B13E +8208 +8408 +8808 +ENDCHAR +STARTCHAR uniF9F2 +ENCODING 63986 +BBX 15 15 0 -1 +BITMAP +2124 +3D24 +24A8 +4BFC +FCA8 +5524 +5622 +7D08 +55FE +5548 +7F48 +44E8 +54BE +AB08 +AA08 +ENDCHAR +STARTCHAR uniF9F3 +ENCODING 63987 +BBX 15 15 0 -1 +BITMAP +08A4 +4464 +7F28 +54FE +7F28 +5564 +55A2 +7F04 +54EE +54A4 +5D24 +56B4 +545E +5D84 +9704 +ENDCHAR +STARTCHAR uniF9F4 +ENCODING 63988 +BBX 14 15 1 -1 +BITMAP +1040 +1040 +1040 +1048 +FFFC +1040 +1040 +3960 +5550 +5250 +9248 +9448 +1844 +1044 +1040 +ENDCHAR +STARTCHAR uniF9F5 +ENCODING 63989 +BBX 15 15 0 -1 +BITMAP +4210 +2210 +2210 +0294 +8FFE +5210 +5310 +2290 +26B8 +CA54 +5252 +5212 +C210 +C210 +4210 +ENDCHAR +STARTCHAR uniF9F6 +ENCODING 63990 +BBX 15 15 0 -1 +BITMAP +8480 +FE84 +90FE +9100 +92F8 +FC88 +8488 +84F8 +8400 +FFDE +9252 +9252 +9252 +FFDE +8252 +ENDCHAR +STARTCHAR uniF9F7 +ENCODING 63991 +BBX 14 14 1 0 +BITMAP +0400 +0200 +0100 +0110 +7FF8 +0000 +1020 +1020 +0840 +0840 +0480 +0480 +0108 +FFFC +ENDCHAR +STARTCHAR uniF9F8 +ENCODING 63992 +BBX 14 15 1 -1 +BITMAP +2040 +2040 +3E7C +50A0 +8910 +0200 +0100 +0110 +7FF8 +0840 +0840 +0480 +0480 +0108 +FFFC +ENDCHAR +STARTCHAR uniF9F9 +ENCODING 63993 +BBX 15 15 0 -1 +BITMAP +1040 +9220 +9220 +5404 +55FE +1000 +FE84 +1084 +1888 +3448 +5248 +5250 +9010 +9010 +13FE +ENDCHAR +STARTCHAR uniF9FA +ENCODING 63994 +BBX 15 15 0 -1 +BITMAP +0440 +2450 +2448 +2448 +2440 +3FFE +0450 +0450 +7C50 +2450 +2448 +2448 +2484 +4506 +8602 +ENDCHAR +STARTCHAR uniF9FB +ENCODING 63995 +BBX 14 15 1 -1 +BITMAP +0400 +0420 +0FF0 +1840 +6480 +1100 +0E00 +1900 +E130 +1120 +1140 +2280 +0440 +1830 +600C +ENDCHAR +STARTCHAR uniF9FC +ENCODING 63996 +BBX 15 15 0 -1 +BITMAP +2110 +1090 +13F4 +FD52 +0152 +0090 +7BFE +0010 +7BD2 +0252 +7BD4 +4A48 +4BCA +7A56 +4822 +ENDCHAR +STARTCHAR uniF9FD +ENCODING 63997 +BBX 15 15 0 -1 +BITMAP +0840 +0840 +0840 +1040 +1040 +3040 +57FE +9040 +1040 +1040 +1040 +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uniF9FE +ENCODING 63998 +BBX 14 15 1 -1 +BITMAP +0840 +0840 +FFFC +0840 +0B00 +0480 +0840 +3130 +C10C +3FF0 +0100 +0940 +1120 +211C +C108 +ENDCHAR +STARTCHAR uniF9FF +ENCODING 63999 +BBX 15 15 0 -1 +BITMAP +0802 +0882 +FFD2 +0812 +8892 +FFD2 +8892 +8892 +8B92 +8892 +1C12 +2A02 +4992 +888E +0804 +ENDCHAR +STARTCHAR uniFA00 +ENCODING 64000 +BBX 15 15 0 -1 +BITMAP +2000 +2004 +23FE +2044 +2444 +2E44 +F044 +2044 +2244 +2444 +2844 +3084 +2144 +0238 +0410 +ENDCHAR +STARTCHAR uniFA01 +ENCODING 64001 +BBX 15 15 0 -1 +BITMAP +0100 +2084 +3FFE +2220 +2224 +3FFE +2220 +23E0 +2000 +27F8 +2210 +2120 +20C0 +4330 +9C0E +ENDCHAR +STARTCHAR uniFA02 +ENCODING 64002 +BBX 15 15 0 -1 +BITMAP +1000 +1004 +13FE +FC40 +1040 +1040 +1484 +19FE +F284 +5484 +1084 +1084 +9084 +70FC +2084 +ENDCHAR +STARTCHAR uniFA03 +ENCODING 64003 +BBX 15 15 0 -1 +BITMAP +1040 +1124 +95FE +5520 +59FC +1124 +FDFE +1124 +19FC +3520 +55FC +9284 +1284 +14FC +1884 +ENDCHAR +STARTCHAR uniFA04 +ENCODING 64004 +BBX 15 15 0 -1 +BITMAP +0200 +4108 +7FFC +4008 +8090 +01C0 +7E00 +0410 +0438 +07C0 +FC00 +0404 +0404 +0406 +03FC +ENDCHAR +STARTCHAR uniFA05 +ENCODING 64005 +BBX 14 15 1 -1 +BITMAP +4408 +27FC +2408 +0408 +8DE8 +5408 +5408 +25E8 +2528 +C528 +45E8 +4528 +C408 +C438 +4410 +ENDCHAR +STARTCHAR uniFA06 +ENCODING 64006 +BBX 14 15 1 -1 +BITMAP +3FE0 +2020 +3FE0 +2020 +3FE0 +0880 +7FF8 +0880 +FFFC +2220 +5250 +8E88 +0B80 +3260 +C618 +ENDCHAR +STARTCHAR uniFA07 +ENCODING 64007 +BBX 15 15 0 -1 +BITMAP +11FE +1000 +FEFC +1084 +7C84 +54FC +7C00 +55FE +7D22 +5522 +11FE +FF22 +1122 +11FE +1102 +ENDCHAR +STARTCHAR uniFA08 +ENCODING 64008 +BBX 15 15 0 -1 +BITMAP +1808 +11FC +2000 +4000 +0C04 +0BFE +1010 +3010 +5010 +9010 +1010 +1010 +1090 +1070 +1020 +ENDCHAR +STARTCHAR uniFA09 +ENCODING 64009 +BBX 14 15 1 -1 +BITMAP +8910 +F9F8 +8910 +92A0 +A040 +A0A0 +971C +9040 +8BF8 +8940 +CA48 +B7FC +8040 +8040 +8040 +ENDCHAR +STARTCHAR uniFA0A +ENCODING 64010 +BBX 15 15 0 -1 +BITMAP +0020 +1FF0 +1020 +1020 +1FE0 +1020 +1020 +1FE0 +1020 +1020 +1FE0 +14A4 +0884 +3086 +C07C +ENDCHAR +STARTCHAR uniFA0B +ENCODING 64011 +BBX 15 15 0 -1 +BITMAP +2084 +3FFE +2200 +3FDE +2012 +2F94 +2894 +2F98 +2014 +3FD2 +2112 +221A +2F94 +4210 +8E10 +ENDCHAR +STARTCHAR uniFA0C +ENCODING 64012 +BBX 15 14 0 0 +BITMAP +0008 +FFFC +0880 +0880 +0880 +0880 +0880 +0880 +0880 +1080 +1084 +2084 +4086 +807C +ENDCHAR +STARTCHAR uniFA0D +ENCODING 64013 +BBX 15 15 0 -1 +BITMAP +0848 +087C +7F48 +0848 +3F48 +008E +7F00 +82FE +3E44 +0044 +3E28 +2210 +2228 +3E46 +2282 +ENDCHAR +STARTCHAR uniFA0E +ENCODING 64014 +BBX 15 16 0 -2 +BITMAP +1050 +0848 +FEFE +4590 +26FC +1890 +08FC +1490 +24FE +C080 +3FF0 +0820 +0440 +0380 +0C60 +F01C +ENDCHAR +STARTCHAR uniFA0F +ENCODING 64015 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2208 +2444 +F040 +20A0 +2110 +2208 +2C06 +23F8 +3208 +C208 +0208 +0208 +03F8 +ENDCHAR +STARTCHAR uniFA10 +ENCODING 64016 +BBX 15 15 1 -1 +BITMAP +2000 +27FE +2402 +2402 +F3FC +2040 +21C4 +2668 +22A0 +2120 +3770 +C0A8 +0F26 +0020 +00C0 +ENDCHAR +STARTCHAR uniFA11 +ENCODING 64017 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2208 +A908 +A910 +AFFE +A808 +ABC8 +AA48 +AA48 +FA48 +03C8 +0008 +0038 +ENDCHAR +STARTCHAR uniFA12 +ENCODING 64018 +BBX 14 15 1 -1 +BITMAP +0040 +97FC +F840 +93F8 +9040 +9FFC +F000 +93F8 +9208 +93F8 +9208 +F3F8 +9208 +0238 +0210 +ENDCHAR +STARTCHAR uniFA13 +ENCODING 64019 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +27FE +F890 +2090 +2108 +7108 +6AFE +6208 +A608 +A288 +2248 +2228 +2208 +2218 +ENDCHAR +STARTCHAR uniFA14 +ENCODING 64020 +BBX 15 15 1 -1 +BITMAP +2484 +2244 +2248 +FFFE +2110 +2208 +7474 +6BC2 +6840 +A7F8 +A040 +2FFE +2040 +2040 +21C0 +ENDCHAR +STARTCHAR uniFA15 +ENCODING 64021 +BBX 15 14 1 -1 +BITMAP +8FBC +4924 +2924 +0FA4 +08AC +28A0 +2FA0 +4922 +4922 +8F9E +0000 +2488 +4244 +8242 +ENDCHAR +STARTCHAR uniFA16 +ENCODING 64022 +BBX 15 15 1 -1 +BITMAP +0880 +8888 +57F8 +2090 +2090 +5FFE +9050 +1088 +33F8 +5E08 +9208 +13F8 +1208 +2208 +C3F8 +ENDCHAR +STARTCHAR uniFA17 +ENCODING 64023 +BBX 14 15 1 -1 +BITMAP +1060 +0840 +0480 +0488 +FFFC +0840 +1020 +2018 +C008 +3FF0 +2490 +2490 +2490 +2490 +FFFC +ENDCHAR +STARTCHAR uniFA18 +ENCODING 64024 +BBX 14 15 1 -1 +BITMAP +0080 +7C80 +0080 +0080 +FE80 +1080 +5480 +5480 +5480 +5480 +9480 +9480 +1084 +1084 +107C +ENDCHAR +STARTCHAR uniFA19 +ENCODING 64025 +BBX 15 15 1 -1 +BITMAP +0010 +7C10 +0010 +00FE +0092 +FE92 +1092 +10FE +5492 +5492 +5492 +94FE +9010 +1010 +1010 +ENDCHAR +STARTCHAR uniFA1A +ENCODING 64026 +BBX 15 15 1 -1 +BITMAP +0104 +7C84 +0088 +01FC +0020 +FE20 +1020 +11F8 +5420 +5420 +5420 +93FE +9020 +1020 +1020 +ENDCHAR +STARTCHAR uniFA1B +ENCODING 64027 +BBX 15 14 1 -1 +BITMAP +7DFE +0000 +00FC +0084 +FE84 +10FC +1000 +55FE +5522 +5522 +95FE +9122 +1122 +11FE +ENDCHAR +STARTCHAR uniFA1C +ENCODING 64028 +BBX 15 15 0 -1 +BITMAP +2020 +23FE +1020 +11FC +FC20 +03FE +4400 +45FC +2904 +29FC +1104 +1DFC +E104 +411C +0108 +ENDCHAR +STARTCHAR uniFA1D +ENCODING 64029 +BBX 15 15 0 -1 +BITMAP +1024 +13FE +9220 +54FC +5420 +11FE +FE00 +10FC +1884 +34FC +5284 +92FC +1084 +109C +1088 +ENDCHAR +STARTCHAR uniFA1E +ENCODING 64030 +BBX 14 15 1 -1 +BITMAP +0408 +FFFC +1C38 +2428 +4448 +8488 +0C18 +1428 +2448 +4488 +8508 +0408 +2448 +1C38 +0810 +ENDCHAR +STARTCHAR uniFA1F +ENCODING 64031 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +79F8 +4908 +49F8 +7908 +49F8 +4880 +79FC +4B44 +4DA4 +89E4 +9818 +ENDCHAR +STARTCHAR uniFA20 +ENCODING 64032 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0BE0 +3440 +EFF8 +2548 +2FFC +E544 +2D6C +7154 +6D6C +A544 +AFFC +2502 +2CFE +ENDCHAR +STARTCHAR uniFA21 +ENCODING 64033 +BBX 15 15 1 -1 +BITMAP +2040 +2240 +2240 +FA40 +ABFC +AC40 +A840 +A840 +F840 +23F8 +2840 +2840 +3840 +E440 +07FE +ENDCHAR +STARTCHAR uniFA22 +ENCODING 64034 +BBX 15 15 1 -1 +BITMAP +0040 +7844 +01FC +FC48 +0048 +7850 +03FE +7828 +00FC +0384 +7884 +48FC +4884 +4884 +78FC +ENDCHAR +STARTCHAR uniFA23 +ENCODING 64035 +BBX 15 16 0 -2 +BITMAP +1008 +1048 +1028 +FE08 +1088 +1048 +1008 +FE0E +11F8 +1008 +5C08 +5008 +5008 +7008 +8C00 +83FE +ENDCHAR +STARTCHAR uniFA24 +ENCODING 64036 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1108 +8108 +4110 +213C +0304 +E284 +2488 +2850 +2020 +20D8 +2706 +5000 +8FFE +ENDCHAR +STARTCHAR uniFA25 +ENCODING 64037 +BBX 15 15 0 -1 +BITMAP +0110 +41F8 +3110 +1224 +07FE +0244 +1244 +FBFC +1060 +10A8 +1126 +1622 +301E +C800 +87FE +ENDCHAR +STARTCHAR uniFA26 +ENCODING 64038 +BBX 15 15 1 -1 +BITMAP +1000 +117E +7F42 +1242 +1444 +1444 +FFC8 +1244 +3F44 +6142 +A142 +3F42 +214C +2140 +3F40 +ENDCHAR +STARTCHAR uniFA27 +ENCODING 64039 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +29FE +4424 +B828 +13FE +1020 +7C40 +10FC +1308 +5410 +39FE +1010 +1C10 +E050 +0020 +ENDCHAR +STARTCHAR uniFA28 +ENCODING 64040 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +29FC +4420 +B820 +17FE +1104 +7C88 +11FC +1020 +5420 +3BFE +1020 +1C20 +E020 +0020 +ENDCHAR +STARTCHAR uniFA29 +ENCODING 64041 +BBX 14 16 1 -2 +BITMAP +0080 +F900 +8BF0 +9210 +93F0 +A210 +A3F0 +9200 +8BFC +8A00 +8BF8 +B108 +8928 +8FE8 +8008 +8030 +ENDCHAR +STARTCHAR uniFA2A +ENCODING 64042 +BBX 15 15 0 -1 +BITMAP +1008 +189C +14E0 +2A80 +4884 +BEFE +22A4 +3EA4 +22A8 +3EA8 +20A8 +2490 +26A8 +7B46 +2282 +ENDCHAR +STARTCHAR uniFA2B +ENCODING 64043 +BBX 15 15 0 -1 +BITMAP +1000 +19FE +1402 +2A02 +48FA +BE02 +22F2 +3E92 +2292 +3E92 +20F2 +2492 +2602 +7A1E +2004 +ENDCHAR +STARTCHAR uniFA2C +ENCODING 64044 +BBX 15 15 0 -1 +BITMAP +1020 +1810 +1492 +2AFE +4904 +BEF8 +2288 +3E88 +22F8 +3E80 +20FC +2484 +2684 +7AFC +2084 +ENDCHAR +STARTCHAR uniFA2D +ENCODING 64045 +BBX 15 15 0 -1 +BITMAP +1030 +1020 +92FC +FE84 +A2FC +2884 +7EFC +4880 +FEFE +4880 +7EFE +4802 +48AA +7F56 +4154 +ENDCHAR +STARTCHAR uniFA2E +ENCODING 64046 +BBX 13 16 1 -2 +BITMAP +1000 +10F8 +FC88 +8490 +8490 +FCA0 +8490 +8490 +FC88 +A288 +9488 +88D0 +88A0 +A480 +C480 +8080 +ENDCHAR +STARTCHAR uniFA2F +ENCODING 64047 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +FCFC +1024 +11FE +7C24 +00FC +7C20 +0124 +FCA8 +1070 +54A8 +5324 +9222 +10A0 +3040 +ENDCHAR +STARTCHAR uniFA30 +ENCODING 64048 +BBX 15 15 1 -1 +BITMAP +1200 +1200 +17FC +2400 +2800 +63F8 +A288 +2248 +3FFE +2488 +2448 +2408 +27FE +2010 +2070 +ENDCHAR +STARTCHAR uniFA31 +ENCODING 64049 +BBX 15 15 1 -1 +BITMAP +11F0 +1010 +1208 +2404 +2FFE +6444 +A554 +2444 +27FC +2000 +23F8 +2208 +23F8 +2208 +23F8 +ENDCHAR +STARTCHAR uniFA32 +ENCODING 64050 +BBX 15 14 1 -1 +BITMAP +3FF8 +0208 +0408 +1808 +E070 +0000 +3FF8 +2108 +2108 +3FF8 +0440 +0842 +1042 +E03E +ENDCHAR +STARTCHAR uniFA33 +ENCODING 64051 +BBX 15 15 1 -1 +BITMAP +2020 +3E20 +2220 +44FC +FF24 +4924 +4924 +5124 +7F44 +1444 +1488 +2508 +2432 +4202 +81FE +ENDCHAR +STARTCHAR uniFA34 +ENCODING 64052 +BBX 14 15 1 -1 +BITMAP +2220 +FF20 +2220 +3EFC +0824 +7F24 +4924 +7F24 +0824 +7F24 +0824 +7F44 +0844 +0F84 +F118 +ENDCHAR +STARTCHAR uniFA35 +ENCODING 64053 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +3FF8 +2108 +2108 +3FF8 +2208 +2208 +3FF8 +0840 +1040 +FFFE +0040 +0040 +0040 +ENDCHAR +STARTCHAR uniFA36 +ENCODING 64054 +BBX 15 14 1 -1 +BITMAP +03F8 +0208 +F3F8 +9208 +9208 +93F8 +9100 +91FE +9242 +9C42 +F2A2 +0312 +03E2 +000C +ENDCHAR +STARTCHAR uniFA37 +ENCODING 64055 +BBX 15 15 1 -1 +BITMAP +0110 +0FFE +F110 +91F0 +9040 +97FC +9444 +97FC +9040 +93F8 +9040 +FFFE +00A0 +0318 +0C06 +ENDCHAR +STARTCHAR uniFA38 +ENCODING 64056 +BBX 15 14 1 -1 +BITMAP +3EF8 +2288 +2288 +3EF8 +0120 +0110 +FFFE +0820 +3018 +FEFE +2288 +2288 +2288 +3EF8 +ENDCHAR +STARTCHAR uniFA39 +ENCODING 64057 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2404 +2404 +FFFC +2444 +2488 +27DE +2488 +2488 +3CDE +C788 +0888 +1108 +0208 +ENDCHAR +STARTCHAR uniFA3A +ENCODING 64058 +BBX 15 14 1 -1 +BITMAP +3FF8 +2108 +2928 +2548 +3FF8 +0100 +7FFC +0100 +FFFE +2448 +C126 +3FF8 +0100 +FFFE +ENDCHAR +STARTCHAR uniFA3B +ENCODING 64059 +BBX 14 14 1 -1 +BITMAP +7FF8 +4008 +7FF8 +44C0 +4820 +5FF0 +711C +5550 +5FF0 +4820 +4FE0 +8820 +8820 +0FE0 +ENDCHAR +STARTCHAR uniFA3C +ENCODING 64060 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +0200 +8208 +8208 +8208 +8208 +8208 +FFF8 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uniFA3D +ENCODING 64061 +BBX 15 15 1 -1 +BITMAP +2200 +2200 +27FC +2400 +A800 +B3F8 +AA88 +A248 +BFFE +2408 +2488 +2448 +27FE +2010 +2070 +ENDCHAR +STARTCHAR uniFA3E +ENCODING 64062 +BBX 15 15 1 -1 +BITMAP +2200 +227C +27A8 +24A8 +A7A8 +B4A8 +ACFE +A790 +A410 +2798 +2428 +2428 +27CA +244A +248E +ENDCHAR +STARTCHAR uniFA3F +ENCODING 64063 +BBX 15 15 1 -1 +BITMAP +20F0 +2010 +2108 +27FE +AC44 +B554 +AD54 +A7FC +A000 +23F8 +2208 +23F8 +2208 +2208 +23F8 +ENDCHAR +STARTCHAR uniFA40 +ENCODING 64064 +BBX 15 15 1 -1 +BITMAP +2210 +4A90 +9F9E +2024 +4FE4 +C014 +4F88 +4208 +4F94 +4222 +4FC0 +2108 +2884 +4412 +83F0 +ENDCHAR +STARTCHAR uniFA41 +ENCODING 64065 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +7F20 +403E +BE44 +2244 +32C4 +2A24 +FFA8 +4228 +5210 +4A10 +7F28 +0444 +0C82 +ENDCHAR +STARTCHAR uniFA42 +ENCODING 64066 +BBX 14 15 2 -1 +BITMAP +2000 +43F8 +F920 +8920 +F920 +8920 +8FFC +F840 +8040 +8060 +F860 +80A0 +80A4 +F924 +861C +ENDCHAR +STARTCHAR uniFA43 +ENCODING 64067 +BBX 15 15 1 -1 +BITMAP +1FF0 +1010 +1FF0 +1010 +1FF2 +0104 +3FF8 +0110 +FFFE +0090 +0FF8 +F808 +0FF8 +0808 +0FF8 +ENDCHAR +STARTCHAR uniFA44 +ENCODING 64068 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +23FE +FC00 +21FC +2104 +7144 +6924 +67FE +A204 +A244 +2224 +23FE +2008 +2038 +ENDCHAR +STARTCHAR uniFA45 +ENCODING 64069 +BBX 15 15 1 -1 +BITMAP +4200 +2200 +17FC +0400 +8400 +43F8 +2288 +0248 +1FFE +1408 +2488 +2448 +47FE +4010 +8070 +ENDCHAR +STARTCHAR uniFA46 +ENCODING 64070 +BBX 15 15 1 -1 +BITMAP +4088 +2088 +17F8 +0090 +8090 +4FFE +2050 +0088 +13F8 +1E08 +2208 +23F8 +4208 +4208 +83F8 +ENDCHAR +STARTCHAR uniFA47 +ENCODING 64071 +BBX 15 15 1 -1 +BITMAP +4110 +2FFE +1110 +01F0 +8040 +47FC +2444 +07FC +1040 +17FC +2040 +2FFE +40A0 +4318 +8C06 +ENDCHAR +STARTCHAR uniFA48 +ENCODING 64072 +BBX 15 15 1 -1 +BITMAP +0100 +0108 +1FF8 +0110 +0160 +7FFC +0220 +1FF0 +F010 +1FF0 +1010 +1FF0 +0000 +2444 +4222 +ENDCHAR +STARTCHAR uniFA49 +ENCODING 64073 +BBX 12 9 3 2 +BITMAP +0030 +03C0 +FC00 +0010 +0410 +8420 +8220 +4240 +2040 +ENDCHAR +STARTCHAR uniFA4A +ENCODING 64074 +BBX 15 14 1 -1 +BITMAP +03FE +F840 +20C0 +2122 +2324 +20B4 +F8D0 +2358 +2078 +2054 +3892 +C310 +0020 +00C0 +ENDCHAR +STARTCHAR uniFA4B +ENCODING 64075 +BBX 15 15 1 -1 +BITMAP +0020 +0040 +FFFC +2224 +2224 +23FC +7A44 +4A44 +CBFC +4890 +4910 +4FFE +7810 +0010 +0010 +ENDCHAR +STARTCHAR uniFA4C +ENCODING 64076 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +0020 +0020 +0020 +FDFC +1020 +1020 +5420 +5420 +5420 +9420 +9020 +1020 +13FE +ENDCHAR +STARTCHAR uniFA4D +ENCODING 64077 +BBX 15 15 1 -1 +BITMAP +0020 +7820 +0020 +0020 +0120 +FD3C +1120 +1120 +5520 +5520 +5520 +9520 +9120 +1120 +13FE +ENDCHAR +STARTCHAR uniFA4E +ENCODING 64078 +BBX 15 15 1 -1 +BITMAP +000C +7CF0 +0080 +0080 +0080 +FEFE +1088 +1088 +5488 +5488 +5488 +9508 +9108 +1208 +1008 +ENDCHAR +STARTCHAR uniFA4F +ENCODING 64079 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +0020 +01FE +0020 +FE20 +1040 +1040 +54FC +5484 +5584 +9684 +9084 +1084 +10FC +ENDCHAR +STARTCHAR uniFA50 +ENCODING 64080 +BBX 15 14 1 -1 +BITMAP +7CF8 +0088 +0088 +0088 +FEF8 +1088 +1088 +5488 +54F8 +5488 +9488 +9088 +1088 +13FE +ENDCHAR +STARTCHAR uniFA51 +ENCODING 64081 +BBX 15 14 1 -1 +BITMAP +7DF8 +0108 +0108 +0108 +FF08 +1108 +11F8 +5490 +5490 +5490 +9490 +9112 +1112 +120E +ENDCHAR +STARTCHAR uniFA52 +ENCODING 64082 +BBX 15 14 1 -1 +BITMAP +7CFC +0084 +00BC +00A4 +FEA4 +11FE +1102 +5502 +557A +554A +954A +917A +1102 +1106 +ENDCHAR +STARTCHAR uniFA53 +ENCODING 64083 +BBX 15 15 1 -1 +BITMAP +0020 +7C20 +003E +0020 +01FC +FF04 +11FC +1104 +5504 +55FC +5504 +9504 +91FC +1088 +1306 +ENDCHAR +STARTCHAR uniFA54 +ENCODING 64084 +BBX 15 15 1 -1 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FE8E +8200 +BAFC +0044 +7C44 +1028 +FE10 +5428 +5244 +9182 +ENDCHAR +STARTCHAR uniFA55 +ENCODING 64085 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +4444 +0840 +107E +6110 +0108 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uniFA56 +ENCODING 64086 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3F7E +4890 +8508 +3E7E +2242 +3E42 +2242 +3E42 +2042 +3E42 +204E +3E40 +2040 +ENDCHAR +STARTCHAR uniFA57 +ENCODING 64087 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +43FE +2820 +11FC +2524 +4DAC +F374 +1124 +51FC +58A8 +9524 +9524 +1222 +1020 +ENDCHAR +STARTCHAR uniFA58 +ENCODING 64088 +BBX 15 15 1 -1 +BITMAP +1000 +23FE +4450 +2A52 +1252 +2554 +4C50 +F3FE +1000 +51FC +5904 +95FC +9504 +1104 +11FC +ENDCHAR +STARTCHAR uniFA59 +ENCODING 64089 +BBX 15 15 1 -1 +BITMAP +2020 +7FA0 +807E +3EC4 +2A24 +FFA8 +4218 +4A24 +7F42 +0220 +0C48 +02F8 +FF04 +1122 +6118 +ENDCHAR +STARTCHAR uniFA5A +ENCODING 64090 +BBX 15 15 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0108 +3FFC +0120 +FFFE +0110 +0FF8 +F808 +0FF8 +0808 +0808 +0FF8 +ENDCHAR +STARTCHAR uniFA5B +ENCODING 64091 +BBX 14 15 1 -1 +BITMAP +0200 +0220 +3FF0 +0220 +0240 +0280 +FFFC +0420 +1FF0 +3010 +D010 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uniFA5C +ENCODING 64092 +BBX 15 15 1 -1 +BITMAP +0100 +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0108 +FFFE +0280 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uniFA5D +ENCODING 64093 +BBX 15 9 1 2 +BITMAP +0440 +0440 +0440 +0440 +FC7E +0440 +0440 +0440 +0440 +ENDCHAR +STARTCHAR uniFA5E +ENCODING 64094 +BBX 15 9 1 2 +BITMAP +1010 +1010 +1010 +1010 +FEFE +1010 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uniFA5F +ENCODING 64095 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +0104 +3FF8 +0110 +0160 +FFFE +0210 +0FF8 +3808 +CFF8 +0808 +0808 +0FF8 +ENDCHAR +STARTCHAR uniFA60 +ENCODING 64096 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2104 +F9FC +0904 +0904 +11FC +1080 +35FE +6B22 +A522 +2152 +218A +21F2 +200C +ENDCHAR +STARTCHAR uniFA61 +ENCODING 64097 +BBX 15 14 1 -1 +BITMAP +7DF8 +0108 +01F8 +0108 +FF08 +11F8 +1108 +5508 +55F8 +54A0 +94A0 +9122 +1222 +141E +ENDCHAR +STARTCHAR uniFA62 +ENCODING 64098 +BBX 15 14 1 -1 +BITMAP +7BF8 +0208 +FBF8 +0208 +7A08 +03F8 +7900 +01FE +0242 +7E42 +4AA2 +4B12 +4BF2 +780C +ENDCHAR +STARTCHAR uniFA63 +ENCODING 64099 +BBX 15 15 1 -1 +BITMAP +0088 +7888 +03FE +FC88 +00F8 +7820 +01FC +7924 +01FC +0020 +79FC +4820 +49FC +4820 +7BFE +ENDCHAR +STARTCHAR uniFA64 +ENCODING 64100 +BBX 14 15 1 -1 +BITMAP +0100 +7FFC +4004 +5FF4 +0920 +7140 +1FF0 +F010 +1FF0 +1010 +1FF0 +1010 +1FF0 +0820 +701C +ENDCHAR +STARTCHAR uniFA65 +ENCODING 64101 +BBX 15 15 1 -1 +BITMAP +0078 +7808 +4884 +4902 +7FFE +4A22 +4AAA +7AAA +4BFE +4800 +49FC +7904 +21FC +4904 +85FC +ENDCHAR +STARTCHAR uniFA66 +ENCODING 64102 +BBX 15 13 1 -1 +BITMAP +8000 +4000 +2000 +0000 +0000 +E000 +2000 +2000 +2000 +2000 +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uniFA67 +ENCODING 64103 +BBX 15 15 1 -1 +BITMAP +0100 +8100 +41F0 +2220 +8C40 +47FC +2444 +0484 +E7FC +2128 +2222 +2422 +281E +5000 +8FFE +ENDCHAR +STARTCHAR uniFA68 +ENCODING 64104 +BBX 15 15 1 -1 +BITMAP +2448 +FF48 +2450 +3CFE +0890 +7F90 +4AFC +7E90 +0890 +7E90 +08FC +FF90 +1490 +2290 +C1FE +ENDCHAR +STARTCHAR uniFA69 +ENCODING 64105 +BBX 15 15 1 -1 +BITMAP +1100 +221E +CFD2 +3454 +27D4 +FC12 +17D6 +E110 +7FFC +0820 +FFFE +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uniFA6A +ENCODING 64106 +BBX 15 15 1 -1 +BITMAP +1000 +51FE +5E20 +50FC +5084 +FFFC +1084 +5084 +52FC +9284 +9284 +34FC +0840 +3088 +C306 +ENDCHAR +STARTCHAR uniFA6B +ENCODING 64107 +BBX 15 16 0 -2 +BITMAP +0130 +0108 +FFFE +0100 +3FF8 +2108 +2108 +3FF8 +2108 +2108 +3FF8 +0100 +258C +2496 +6632 +C3E0 +ENDCHAR +STARTCHAR uniFA6C +ENCODING 64108 +BBX 15 15 0 -2 +BITMAP +7F7E +4802 +4802 +7F02 +417E +4140 +7F40 +4842 +4842 +7F7E +0000 +2488 +2244 +4244 +8004 +ENDCHAR +STARTCHAR uniFA6D +ENCODING 64109 +BBX 15 16 0 -2 +BITMAP +1020 +3820 +2DFE +6702 +4102 +FCF8 +1088 +1088 +FEF8 +0080 +0080 +7CFC +4484 +4484 +4484 +7CFC +ENDCHAR +STARTCHAR uniFA70 +ENCODING 64112 +BBX 15 15 0 -1 +BITMAP +1010 +0820 +0440 +7FFC +0440 +0440 +0440 +4444 +2444 +1448 +1450 +0440 +0440 +0440 +FFFE +ENDCHAR +STARTCHAR uniFA71 +ENCODING 64113 +BBX 15 15 0 -1 +BITMAP +47F8 +2408 +2408 +0408 +0408 +17F8 +1120 +2120 +E120 +2120 +2220 +2222 +2422 +281E +1000 +ENDCHAR +STARTCHAR uniFA72 +ENCODING 64114 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0280 +0440 +0820 +1010 +2FE8 +C106 +0100 +0100 +1FF0 +0100 +0100 +0100 +7FFC +ENDCHAR +STARTCHAR uniFA73 +ENCODING 64115 +BBX 14 16 0 -2 +BITMAP +1004 +1FC4 +1484 +2494 +2494 +6494 +6494 +AFD4 +2494 +2494 +2494 +2494 +2484 +2884 +2894 +3088 +ENDCHAR +STARTCHAR uniFA74 +ENCODING 64116 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +FFFE +0400 +0400 +0820 +1010 +3FF8 +0448 +0440 +0440 +0440 +0844 +0844 +1044 +603C +ENDCHAR +STARTCHAR uniFA75 +ENCODING 64117 +BBX 15 16 0 -2 +BITMAP +0444 +7C78 +0442 +1C3E +E400 +3FF8 +2108 +3FF8 +2108 +3FF8 +0440 +3FF8 +0440 +FFFE +1010 +2008 +ENDCHAR +STARTCHAR uniFA76 +ENCODING 64118 +BBX 12 16 1 -2 +BITMAP +7FE0 +0CC0 +0300 +7FF0 +4210 +7FF0 +4210 +7FF0 +4210 +4410 +0400 +FFF0 +0810 +1010 +20A0 +C040 +ENDCHAR +STARTCHAR uniFA77 +ENCODING 64119 +BBX 13 16 0 -2 +BITMAP +0800 +0800 +1000 +1FF8 +2008 +4008 +8008 +0408 +0208 +0108 +0108 +0008 +0008 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uniFA78 +ENCODING 64120 +BBX 13 15 1 -1 +BITMAP +07F0 +F410 +97F0 +9410 +97F0 +9200 +97F8 +9888 +9488 +F548 +9408 +07E8 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uniFA79 +ENCODING 64121 +BBX 13 16 1 -2 +BITMAP +0200 +0200 +F3F8 +9408 +9A08 +93C8 +9508 +9108 +9FE8 +9108 +F548 +9548 +07C8 +0008 +0050 +0020 +ENDCHAR +STARTCHAR uniFA7A +ENCODING 64122 +BBX 15 16 0 -2 +BITMAP +0100 +01F8 +F208 +93F0 +9010 +97FE +9080 +9144 +9668 +90B0 +F128 +9668 +00A4 +0122 +06A0 +0040 +ENDCHAR +STARTCHAR uniFA7B +ENCODING 64123 +BBX 14 14 1 0 +BITMAP +03F0 +F210 +9210 +93F0 +9210 +9210 +93F0 +9000 +97F8 +F528 +9528 +0528 +0528 +0FFC +ENDCHAR +STARTCHAR uniFA7C +ENCODING 64124 +BBX 15 16 0 -2 +BITMAP +2000 +27FE +2402 +2804 +27FE +F880 +2184 +2244 +26A8 +2130 +3AF0 +E4A8 +4128 +0224 +0CA2 +0040 +ENDCHAR +STARTCHAR uniFA7D +ENCODING 64125 +BBX 15 16 0 -2 +BITMAP +1020 +11FC +1020 +1088 +13FE +FC88 +11FC +1104 +11FC +1104 +11FC +1D04 +E1FC +4088 +0104 +0202 +ENDCHAR +STARTCHAR uniFA7E +ENCODING 64126 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0920 +3118 +DFF6 +1110 +1110 +1FF0 +1110 +1110 +1FF4 +0104 +0104 +00FC +ENDCHAR +STARTCHAR uniFA7F +ENCODING 64127 +BBX 15 16 0 -2 +BITMAP +0200 +0200 +7FFC +0440 +0920 +3118 +CFE6 +0100 +0920 +0820 +7FFC +0820 +0820 +1020 +1020 +2020 +ENDCHAR +STARTCHAR uniFA80 +ENCODING 64128 +BBX 15 16 0 -2 +BITMAP +1040 +1080 +11FC +1124 +FD24 +25FC +2524 +2544 +25FC +4890 +2910 +13FE +2810 +4410 +8410 +0010 +ENDCHAR +STARTCHAR uniFA81 +ENCODING 64129 +BBX 15 15 0 -1 +BITMAP +2108 +2090 +23FE +2108 +F908 +4A52 +4B9C +4908 +8A52 +4BDE +3040 +10A4 +2AAA +4A8A +8478 +ENDCHAR +STARTCHAR uniFA82 +ENCODING 64130 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2210 +2F90 +221E +2FA4 +2224 +3FD4 +2414 +2794 +2488 +4488 +4894 +8AA4 +1142 +ENDCHAR +STARTCHAR uniFA83 +ENCODING 64131 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +27FC +2444 +27FC +2444 +27FC +2110 +27FC +2110 +2FFE +4000 +4208 +8404 +ENDCHAR +STARTCHAR uniFA84 +ENCODING 64132 +BBX 15 16 0 -2 +BITMAP +0100 +0784 +7804 +0888 +4490 +2522 +2002 +0404 +7F88 +0C10 +1622 +1502 +2484 +4408 +8410 +0460 +ENDCHAR +STARTCHAR uniFA85 +ENCODING 64133 +BBX 15 16 0 -2 +BITMAP +0808 +083C +13C0 +2004 +4A44 +0928 +11FC +3220 +5020 +93FE +1020 +1124 +1124 +1124 +11FC +1004 +ENDCHAR +STARTCHAR uniFA86 +ENCODING 64134 +BBX 15 16 0 -2 +BITMAP +1000 +13FE +1202 +128A +1A52 +57FE +5242 +5222 +93FE +1282 +1282 +1282 +12FA +1202 +120A +1204 +ENDCHAR +STARTCHAR uniFA87 +ENCODING 64135 +BBX 15 16 0 -2 +BITMAP +2040 +2040 +27FC +2040 +33F8 +AA08 +A3F8 +A208 +A3F8 +2208 +23F8 +2208 +2FFE +2110 +2208 +2404 +ENDCHAR +STARTCHAR uniFA88 +ENCODING 64136 +BBX 15 16 0 -2 +BITMAP +0100 +0280 +0C60 +37D8 +C006 +3E08 +2248 +3E48 +2248 +3E48 +2208 +2618 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uniFA89 +ENCODING 64137 +BBX 15 16 0 -2 +BITMAP +1104 +1088 +1000 +13FE +1A22 +56AA +5272 +5222 +93FE +1000 +11FC +1104 +11FC +1104 +11FC +1104 +ENDCHAR +STARTCHAR uniFA8A +ENCODING 64138 +BBX 15 16 0 -2 +BITMAP +2108 +2108 +2108 +27D0 +311E +AF94 +A124 +AFD4 +A214 +23D4 +2254 +2248 +2248 +24D4 +2424 +2842 +ENDCHAR +STARTCHAR uniFA8B +ENCODING 64139 +BBX 15 16 0 -2 +BITMAP +2220 +4AA0 +8ABE +1FC4 +20A4 +6F24 +A028 +2FA8 +2210 +2FA8 +2244 +2F82 +0100 +4884 +4812 +87F2 +ENDCHAR +STARTCHAR uniFA8C +ENCODING 64140 +BBX 15 16 0 -2 +BITMAP +0820 +7F28 +0824 +FFFE +0020 +7F20 +4924 +7F24 +4924 +7F28 +2228 +7F10 +2212 +FFAA +2246 +4182 +ENDCHAR +STARTCHAR uniFA8D +ENCODING 64141 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2110 +2208 +FDF6 +2000 +23C4 +2A54 +3254 +E3D4 +2254 +2254 +23D4 +2244 +A254 +42C8 +ENDCHAR +STARTCHAR uniFA8E +ENCODING 64142 +BBX 15 16 0 -2 +BITMAP +10A0 +112C +1124 +1124 +FDAC +1124 +1124 +15FC +1820 +31FC +D088 +1050 +1020 +1050 +5088 +2306 +ENDCHAR +STARTCHAR uniFA8F +ENCODING 64143 +BBX 15 16 0 -2 +BITMAP +2000 +23FC +2204 +2204 +FBFC +2200 +2284 +2A48 +32FC +E248 +2248 +23FE +2448 +2448 +A888 +5108 +ENDCHAR +STARTCHAR uniFA90 +ENCODING 64144 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +0820 +7F3E +0844 +3E44 +0844 +FFA4 +1028 +1E28 +1210 +1210 +2228 +2A48 +4484 +8102 +ENDCHAR +STARTCHAR uniFA91 +ENCODING 64145 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F7FC +9040 +93F8 +9040 +97FC +F000 +93F8 +9208 +93F8 +9208 +F3F8 +9208 +0228 +0210 +ENDCHAR +STARTCHAR uniFA92 +ENCODING 64146 +BBX 13 16 1 -2 +BITMAP +2000 +10F8 +FC88 +8488 +8488 +FCF8 +8488 +8488 +FC88 +80F8 +9088 +8888 +B508 +C508 +8228 +0410 +ENDCHAR +STARTCHAR uniFA93 +ENCODING 64147 +BBX 15 16 0 -2 +BITMAP +1000 +087C +FF44 +207C +2044 +267C +3844 +2094 +0108 +7FFC +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uniFA94 +ENCODING 64148 +BBX 15 16 0 -2 +BITMAP +1010 +1010 +1010 +1010 +FDFE +1010 +3010 +3910 +5510 +5490 +9090 +1050 +1020 +1050 +1188 +1606 +ENDCHAR +STARTCHAR uniFA95 +ENCODING 64149 +BBX 15 15 0 -1 +BITMAP +FFFE +0200 +0200 +0400 +07F8 +0808 +1010 +2410 +4220 +0140 +0080 +0100 +0200 +0C00 +7000 +ENDCHAR +STARTCHAR uniFA96 +ENCODING 64150 +BBX 15 16 0 -2 +BITMAP +0400 +4478 +2848 +1048 +2848 +4486 +9200 +10FC +FE44 +1044 +5828 +5428 +9210 +1228 +5044 +2182 +ENDCHAR +STARTCHAR uniFA97 +ENCODING 64151 +BBX 15 16 0 -2 +BITMAP +0080 +2040 +17FE +1080 +8110 +4208 +47FC +1004 +1000 +2248 +E248 +2248 +2248 +224A +244A +0846 +ENDCHAR +STARTCHAR uniFA98 +ENCODING 64152 +BBX 15 16 0 -2 +BITMAP +0004 +203E +17C0 +1244 +8124 +4128 +4200 +13FC +1440 +2040 +EFFE +2040 +2444 +2444 +27FC +0004 +ENDCHAR +STARTCHAR uniFA99 +ENCODING 64153 +BBX 15 16 0 -2 +BITMAP +0108 +2088 +1090 +17FE +8108 +4108 +4210 +1294 +14A4 +2738 +E108 +2210 +2210 +24A4 +27BC +0084 +ENDCHAR +STARTCHAR uniFA9A +ENCODING 64154 +BBX 15 16 0 -2 +BITMAP +0110 +2110 +17FE +1110 +81F0 +4040 +4BF8 +0A48 +13F8 +1040 +E7FC +2040 +2FFE +20A0 +2110 +060C +ENDCHAR +STARTCHAR uniFA9B +ENCODING 64155 +BBX 15 16 0 -2 +BITMAP +0220 +4220 +2FB8 +2248 +0F90 +827C +4F94 +5014 +1FFE +2894 +EF94 +28FC +2F94 +2890 +2A90 +0930 +ENDCHAR +STARTCHAR uniFA9C +ENCODING 64156 +BBX 15 16 0 -2 +BITMAP +0200 +0208 +3FD0 +0220 +FFFE +0100 +0FF0 +3810 +CFF0 +0810 +0810 +0FF0 +0000 +4888 +4444 +8444 +ENDCHAR +STARTCHAR uniFA9D +ENCODING 64157 +BBX 14 16 1 -2 +BITMAP +0140 +0120 +F3FC +9220 +9620 +FBFC +9220 +9220 +F3FC +9220 +9220 +93FC +F200 +9548 +04A4 +08A4 +ENDCHAR +STARTCHAR uniFA9E +ENCODING 64158 +BBX 14 16 1 -2 +BITMAP +01F8 +FE00 +4410 +2220 +FFF8 +8888 +FFF8 +0010 +FC10 +85FC +FC10 +8490 +FC50 +9010 +E850 +8420 +ENDCHAR +STARTCHAR uniFA9F +ENCODING 64159 +BBX 15 15 0 -1 +BITMAP +4400 +29F8 +1108 +2908 +4908 +8908 +0908 +1928 +2910 +4900 +8902 +0902 +0902 +50FE +2000 +ENDCHAR +STARTCHAR uniFAA0 +ENCODING 64160 +BBX 15 16 0 -2 +BITMAP +0040 +8844 +53F4 +2048 +5050 +97FE +1040 +1080 +31F8 +5308 +9508 +11F8 +1108 +1108 +A1F8 +4108 +ENDCHAR +STARTCHAR uniFAA1 +ENCODING 64161 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FBFE +2020 +21FC +2104 +21FC +F904 +21FC +2104 +21FC +3904 +E3FE +4088 +0104 +0202 +ENDCHAR +STARTCHAR uniFAA2 +ENCODING 64162 +BBX 13 16 1 -2 +BITMAP +1040 +0880 +FFF8 +2490 +79E0 +1040 +28A0 +7DF0 +0000 +FFF8 +1000 +1FC0 +1240 +2148 +2C48 +3038 +ENDCHAR +STARTCHAR uniFAA3 +ENCODING 64163 +BBX 15 15 0 -1 +BITMAP +FFFE +0000 +0000 +4FE4 +4924 +4924 +4FE4 +4924 +4924 +4924 +4FE4 +4004 +4004 +7FFC +0004 +ENDCHAR +STARTCHAR uniFAA4 +ENCODING 64164 +BBX 15 16 0 -2 +BITMAP +0080 +0040 +1FFE +1000 +97FC +54A4 +54A4 +17FC +3040 +5150 +9248 +1444 +2150 +2248 +4444 +8040 +ENDCHAR +STARTCHAR uniFAA5 +ENCODING 64165 +BBX 15 16 0 -2 +BITMAP +0100 +0080 +3FFE +2000 +27F8 +A408 +67F8 +2408 +27F8 +6000 +AFFC +2924 +2924 +4924 +7FFE +8000 +ENDCHAR +STARTCHAR uniFAA6 +ENCODING 64166 +BBX 15 15 0 -1 +BITMAP +1010 +0820 +0000 +FFFE +0000 +0820 +1010 +2008 +4004 +3FF8 +2448 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uniFAA7 +ENCODING 64167 +BBX 15 15 0 -1 +BITMAP +0090 +0088 +3FFC +2080 +2088 +3E48 +2250 +2224 +4A54 +448C +8104 +3FF8 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uniFAA8 +ENCODING 64168 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +7FFC +0100 +1FF0 +1010 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1010 +FFFE +ENDCHAR +STARTCHAR uniFAA9 +ENCODING 64169 +BBX 14 15 1 -1 +BITMAP +01F8 +F908 +8908 +89F8 +F800 +8BFC +8A04 +FA04 +8BFC +8A04 +8A04 +FBFC +8A04 +0214 +0208 +ENDCHAR +STARTCHAR uniFAAA +ENCODING 64170 +BBX 15 16 0 -2 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0200 +FFFE +0400 +0FF0 +1810 +2FF0 +C810 +0FF0 +0810 +0FF0 +0810 +ENDCHAR +STARTCHAR uniFAAB +ENCODING 64171 +BBX 15 16 0 -2 +BITMAP +0020 +0020 +FBFE +2020 +21FC +4104 +79FC +4904 +C9FC +4904 +49FC +4904 +7BFE +4888 +0104 +0202 +ENDCHAR +STARTCHAR uniFAAC +ENCODING 64172 +BBX 15 16 0 -2 +BITMAP +0200 +0100 +7FFE +4822 +9094 +11F8 +2288 +6870 +ABAE +2820 +29FC +2820 +28A8 +2924 +22A4 +2040 +ENDCHAR +STARTCHAR uniFAAD +ENCODING 64173 +BBX 15 16 0 -2 +BITMAP +1040 +1040 +3F7E +4890 +8508 +0000 +7E7C +4244 +7E44 +4244 +7E44 +4844 +4454 +5A48 +6240 +4040 +ENDCHAR +STARTCHAR uniFAAE +ENCODING 64174 +BBX 15 16 0 -2 +BITMAP +0100 +1110 +0920 +0100 +7FFC +0540 +0920 +1110 +6008 +0100 +FFFE +0280 +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uniFAAF +ENCODING 64175 +BBX 15 16 0 -2 +BITMAP +1080 +10F8 +1108 +2290 +2060 +6598 +6646 +A488 +25F0 +2420 +2448 +25FC +2020 +2124 +22A2 +2040 +ENDCHAR +STARTCHAR uniFAB0 +ENCODING 64176 +BBX 15 16 0 -2 +BITMAP +1020 +1020 +23FE +2420 +45FC +F924 +11AC +2174 +4924 +FDFC +0420 +0070 +54A8 +5524 +8222 +0020 +ENDCHAR +STARTCHAR uniFAB1 +ENCODING 64177 +BBX 15 16 0 -2 +BITMAP +2084 +2048 +3C00 +50FC +9048 +1048 +FE48 +1048 +11FE +5448 +5448 +5448 +5C48 +6488 +0488 +0108 +ENDCHAR +STARTCHAR uniFAB2 +ENCODING 64178 +BBX 15 16 0 -2 +BITMAP +0200 +0208 +3FD0 +0220 +0240 +FFFE +0100 +0200 +0FF0 +1810 +2810 +4FF0 +8810 +0810 +0FF0 +0810 +ENDCHAR +STARTCHAR uniFAB3 +ENCODING 64179 +BBX 15 16 0 -2 +BITMAP +0820 +0820 +FFFE +0A20 +0100 +FFFE +1000 +1000 +1FF8 +0000 +1110 +1110 +1110 +2112 +4112 +810E +ENDCHAR +STARTCHAR uniFAB4 +ENCODING 64180 +BBX 15 16 0 -2 +BITMAP +0440 +0440 +FFFE +0440 +7FFC +1110 +1110 +FFFE +1110 +1110 +7FFC +0100 +FFFE +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniFAB5 +ENCODING 64181 +BBX 15 15 0 -1 +BITMAP +1000 +10F8 +1088 +7C88 +54F8 +5488 +5488 +54F8 +7C00 +51FC +1154 +1554 +1D54 +E554 +43FE +ENDCHAR +STARTCHAR uniFAB6 +ENCODING 64182 +BBX 15 16 0 -2 +BITMAP +2000 +13BE +00A2 +F0A2 +10BE +2388 +2208 +6A3E +B22A +2BAA +20AA +20BE +2088 +208A +257E +2202 +ENDCHAR +STARTCHAR uniFAB7 +ENCODING 64183 +BBX 15 16 0 -2 +BITMAP +FFFE +0440 +3FF8 +2448 +3FF8 +1200 +27FC +4208 +8BF8 +1208 +33F8 +5100 +93F8 +1510 +10E0 +171E +ENDCHAR +STARTCHAR uniFAB8 +ENCODING 64184 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1104 +F904 +09FC +1104 +1104 +39FC +5504 +9504 +11FC +1050 +1090 +1092 +1112 +120E +ENDCHAR +STARTCHAR uniFAB9 +ENCODING 64185 +BBX 14 16 0 -2 +BITMAP +2000 +11FC +0124 +FD24 +0174 +7924 +01FC +7904 +0174 +7954 +4954 +4974 +4904 +7A04 +4A14 +0408 +ENDCHAR +STARTCHAR uniFABA +ENCODING 64186 +BBX 15 16 0 -2 +BITMAP +2020 +1022 +01FA +FC24 +0028 +7BFE +0020 +7840 +00FC +7984 +4A84 +48FC +4884 +7884 +48FC +0084 +ENDCHAR +STARTCHAR uniFABB +ENCODING 64187 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +03FE +FC20 +01FC +7820 +03FE +7800 +01FC +7904 +49FC +4904 +49FC +7904 +4914 +0108 +ENDCHAR +STARTCHAR uniFABC +ENCODING 64188 +BBX 15 16 0 -2 +BITMAP +2000 +11FC +1104 +FDFC +0104 +7DFC +0080 +7DFE +0222 +7D22 +4552 +4502 +45FA +7C02 +4414 +0008 +ENDCHAR +STARTCHAR uniFABD +ENCODING 64189 +BBX 15 16 0 -2 +BITMAP +2088 +1088 +03FE +FC88 +00A8 +7820 +03FE +7840 +0080 +78FC +4984 +4A84 +4884 +7884 +48FC +0084 +ENDCHAR +STARTCHAR uniFABE +ENCODING 64190 +BBX 15 16 0 -2 +BITMAP +2040 +10A0 +0110 +FA08 +05F6 +7800 +03C4 +7A54 +0254 +7BD4 +4A54 +4A54 +4BD4 +7A44 +4A54 +02C8 +ENDCHAR +STARTCHAR uniFABF +ENCODING 64191 +BBX 15 15 0 -1 +BITMAP +2088 +1088 +03FE +FC88 +00F8 +7820 +01FC +7924 +01FC +7820 +4BFE +4820 +49FC +7820 +4BFE +ENDCHAR +STARTCHAR uniFAC0 +ENCODING 64192 +BBX 15 16 0 -2 +BITMAP +2104 +47C8 +8812 +F3BC +2008 +4B92 +F83E +0380 +AAAA +ABAA +0800 +1FF8 +2820 +07C0 +1830 +E00E +ENDCHAR +STARTCHAR uniFAC1 +ENCODING 64193 +BBX 15 16 0 -2 +BITMAP +0104 +7888 +4800 +4BFE +7A22 +4AAA +4A72 +7A22 +4BFE +4800 +79FC +0104 +51FC +4904 +89FC +0104 +ENDCHAR +STARTCHAR uniFAC2 +ENCODING 64194 +BBX 15 16 0 -2 +BITMAP +2040 +20A0 +2110 +FA08 +25F6 +F800 +ABC4 +FA54 +AA54 +FBD4 +2254 +FA54 +23D4 +2244 +2254 +22C8 +ENDCHAR +STARTCHAR uniFAC3 +ENCODING 64195 +BBX 15 16 0 -2 +BITMAP +07FC +4404 +27FC +2420 +04A8 +0470 +E4A8 +2504 +24A0 +24FC +2520 +2420 +2BFE +2820 +5020 +8FFE +ENDCHAR +STARTCHAR uniFAC4 +ENCODING 64196 +BBX 15 16 0 -2 +BITMAP +0050 +FE96 +2892 +2892 +FED6 +AA92 +AA92 +AAFE +AE10 +C2FC +8244 +FE44 +8228 +8210 +FE28 +82C6 +ENDCHAR +STARTCHAR uniFAC5 +ENCODING 64197 +BBX 15 16 0 -2 +BITMAP +1002 +13E2 +2942 +254A +414A +B94A +114A +13EA +FD4A +114A +954A +594A +5142 +1E42 +E24A +4444 +ENDCHAR +STARTCHAR uniFAC6 +ENCODING 64198 +BBX 14 16 1 -2 +BITMAP +0040 +F844 +8BF4 +9048 +9050 +A7FC +9040 +9080 +89F8 +8B08 +8D08 +D1F8 +A108 +8108 +81F8 +8108 +ENDCHAR +STARTCHAR uniFAC7 +ENCODING 64199 +BBX 15 16 0 -2 +BITMAP +2228 +2224 +FF40 +227E +3EC8 +0948 +7F7E +4948 +7F48 +087E +7F48 +0848 +FF48 +147E +2240 +4140 +ENDCHAR +STARTCHAR uniFAC8 +ENCODING 64200 +BBX 15 16 0 -2 +BITMAP +2020 +1020 +13FE +FC20 +01FC +0820 +8BFE +8800 +49FC +4904 +51FC +5104 +1DFC +E104 +4114 +0108 +ENDCHAR +STARTCHAR uniFAC9 +ENCODING 64201 +BBX 15 16 0 -2 +BITMAP +1044 +1044 +7DFE +2444 +FE44 +01FE +7C40 +44FE +7D92 +12FE +7C92 +10FE +5092 +7C92 +1092 +1086 +ENDCHAR +STARTCHAR uniFACA +ENCODING 64202 +BBX 15 16 0 -2 +BITMAP +1100 +23DE +7A52 +13D4 +2A52 +7BDA +1294 +2350 +0100 +3FF8 +0440 +FFFE +1010 +1FF0 +1010 +1FF0 +ENDCHAR +STARTCHAR uniFACB +ENCODING 64203 +BBX 15 15 0 -1 +BITMAP +7EFE +4010 +4020 +5EFC +5284 +5284 +52FC +5A84 +54FC +5084 +5284 +54FC +5848 +5084 +8102 +ENDCHAR +STARTCHAR uniFACC +ENCODING 64204 +BBX 15 16 0 -2 +BITMAP +0800 +08FE +2810 +2E20 +28FC +2884 +FF84 +00FC +0884 +2AFC +2A84 +4C84 +84FC +0848 +3084 +C102 +ENDCHAR +STARTCHAR uniFACD +ENCODING 64205 +BBX 15 16 0 -2 +BITMAP +3F04 +2018 +FF62 +220C +7F70 +0100 +7FFC +0100 +1FF0 +1010 +1110 +1110 +FFFE +0820 +1010 +2008 +ENDCHAR +STARTCHAR uniFACE +ENCODING 64206 +BBX 15 16 0 -2 +BITMAP +0400 +3FF8 +2008 +3EF8 +0280 +7A80 +0AFC +FE94 +0AD4 +7AA4 +02A4 +7AD4 +0A94 +FEFC +0A82 +79FE +ENDCHAR +STARTCHAR uniFACF +ENCODING 64207 +BBX 15 16 0 -2 +BITMAP +20CC +2730 +2110 +3110 +AFFE +A110 +A2A8 +2428 +2844 +2102 +2290 +2A48 +2A54 +3214 +2210 +21F0 +ENDCHAR +STARTCHAR uniFAD0 +ENCODING 64208 +BBX 15 16 0 -2 +BITMAP +20CC +2730 +2110 +3110 +AFFE +A110 +A2A8 +2428 +2844 +23FA +2208 +23F8 +2208 +2208 +23F8 +2208 +ENDCHAR +STARTCHAR uniFAD1 +ENCODING 64209 +BBX 15 16 0 -2 +BITMAP +1028 +1024 +1020 +13FE +FC20 +10A8 +38A8 +34A8 +50A8 +50A8 +9128 +112A +122A +1426 +1020 +1020 +ENDCHAR +STARTCHAR uniFAD2 +ENCODING 64210 +BBX 15 16 0 -2 +BITMAP +2000 +229E +2252 +2252 +F552 +2112 +2292 +7252 +6C32 +A3D2 +A25A +2254 +2250 +2250 +23D0 +2250 +ENDCHAR +STARTCHAR uniFAD3 +ENCODING 64211 +BBX 14 15 1 -1 +BITMAP +07F8 +F120 +9120 +9120 +F120 +9120 +9FFC +F120 +9120 +9120 +9120 +F220 +9220 +0420 +0820 +ENDCHAR +STARTCHAR uniFAD4 +ENCODING 64212 +BBX 14 16 1 -2 +BITMAP +0040 +0040 +F040 +97FC +9040 +F040 +9248 +9248 +F248 +9554 +9040 +90A0 +F0A0 +9110 +0208 +0404 +ENDCHAR +STARTCHAR uniFAD5 +ENCODING 64213 +BBX 15 16 0 -2 +BITMAP +0220 +0220 +F47C +9444 +9DA8 +F510 +9528 +95D6 +F510 +95FE +9510 +9538 +F454 +9492 +0410 +0410 +ENDCHAR +STARTCHAR uniFAD6 +ENCODING 64214 +BBX 15 16 0 -2 +BITMAP +1040 +1F7E +2890 +4508 +BEF8 +2288 +3EF8 +2288 +3EF8 +2008 +2EE8 +2448 +2EE8 +2448 +2848 +2018 +ENDCHAR +STARTCHAR uniFAD7 +ENCODING 64215 +BBX 15 16 0 -2 +BITMAP +1044 +1088 +13DE +FC88 +1088 +1088 +13DE +FC88 +1088 +1088 +5C88 +5108 +5208 +7000 +8C00 +83FE +ENDCHAR +STARTCHAR uniFAD8 +ENCODING 64216 +BBX 15 16 0 -2 +BITMAP +2000 +7CFC +4484 +7CFC +4484 +7CFC +0040 +FEFE +9312 +FE92 +92AA +FE82 +00FA +FE02 +4414 +8408 +ENDCHAR +STARTCHAR uniFAD9 +ENCODING 64217 +BBX 15 15 0 -1 +BITMAP +3FFE +2220 +2FBC +2520 +223C +3F84 +203C +2FA0 +28BC +2FA0 +28BC +2FA0 +48BC +48A2 +899E +ENDCHAR +STARTCHAR uniFB00 +ENCODING 64256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +36 +48 +48 +48 +FC +48 +48 +48 +48 +48 +48 +ENDCHAR +STARTCHAR uniFB01 +ENCODING 64257 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +38 +44 +40 +40 +FC +44 +44 +44 +44 +44 +44 +ENDCHAR +STARTCHAR uniFB02 +ENCODING 64258 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +3C +44 +44 +44 +F4 +44 +44 +44 +44 +44 +44 +ENDCHAR +STARTCHAR uniFB03 +ENCODING 64259 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +2C +54 +50 +50 +FC +54 +54 +54 +54 +54 +54 +ENDCHAR +STARTCHAR uniFB04 +ENCODING 64260 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +3C +54 +54 +54 +FC +54 +54 +54 +54 +54 +54 +ENDCHAR +STARTCHAR uniFB05 +ENCODING 64261 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +70 +90 +90 +90 +BC +90 +90 +90 +90 +90 +8C +ENDCHAR +STARTCHAR uniFB06 +ENCODING 64262 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +38 +48 +48 +48 +6C +88 +88 +48 +28 +28 +C4 +ENDCHAR +STARTCHAR uniFB13 +ENCODING 64275 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +28 +60 +BA +AA +AA +AA +AA +AA +66 +ENDCHAR +STARTCHAR uniFB14 +ENCODING 64276 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +18 +28 +28 +AE +A8 +A8 +AA +AA +AA +6C +ENDCHAR +STARTCHAR uniFB15 +ENCODING 64277 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +18 +28 +28 +AC +AA +AA +AA +AA +AA +6A +08 +08 +ENDCHAR +STARTCHAR uniFB16 +ENCODING 64278 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +A0 +78 +28 +AA +AA +AA +AA +AA +AA +66 +20 +38 +ENDCHAR +STARTCHAR uniFB17 +ENCODING 64279 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +18 +28 +28 +AD +AD +AD +AD +AD +AD +6A +08 +08 +ENDCHAR +STARTCHAR uniFB1D +ENCODING 64285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 3 3 +BITMAP +E0 +20 +20 +20 +00 +20 +ENDCHAR +STARTCHAR uniFB1E +ENCODING 64286 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 1 10 +BITMAP +84 +84 +78 +ENDCHAR +STARTCHAR uniFB1F +ENCODING 64287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 3 +BITMAP +EE +22 +22 +22 +00 +7C +ENDCHAR +STARTCHAR uniFB20 +ENCODING 64288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +12 +12 +12 +12 +12 +12 +12 +12 +FE +ENDCHAR +STARTCHAR uniFB21 +ENCODING 64289 +BBX 14 9 1 0 +BITMAP +8004 +8004 +6004 +1804 +6718 +80E0 +8018 +8004 +8004 +ENDCHAR +STARTCHAR uniFB22 +ENCODING 64290 +BBX 14 9 1 0 +BITMAP +FFFC +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uniFB23 +ENCODING 64291 +BBX 14 9 1 0 +BITMAP +FFFC +0004 +0004 +4004 +4004 +4004 +4004 +4004 +4004 +ENDCHAR +STARTCHAR uniFB24 +ENCODING 64292 +BBX 14 9 1 0 +BITMAP +FFFC +0004 +0004 +0004 +0004 +0004 +0004 +0004 +FFF8 +ENDCHAR +STARTCHAR uniFB25 +ENCODING 64293 +BBX 13 11 2 0 +BITMAP +8000 +8000 +FFF8 +0008 +0008 +0008 +0008 +0010 +0020 +00C0 +0700 +ENDCHAR +STARTCHAR uniFB26 +ENCODING 64294 +BBX 15 9 0 0 +BITMAP +FFFE +2002 +2002 +2002 +2002 +2002 +2002 +2002 +3FFE +ENDCHAR +STARTCHAR uniFB27 +ENCODING 64295 +BBX 14 9 1 0 +BITMAP +FFFC +0004 +0004 +0004 +0004 +0004 +0004 +0004 +0004 +ENDCHAR +STARTCHAR uniFB28 +ENCODING 64296 +BBX 14 9 1 0 +BITMAP +7FFC +4004 +4004 +4004 +4004 +4004 +4004 +4004 +C004 +ENDCHAR +STARTCHAR uniFB29 +ENCODING 64297 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uniFB2A +ENCODING 64298 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +02 +00 +92 +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uniFB2B +ENCODING 64299 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +80 +00 +92 +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uniFB2C +ENCODING 64300 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +02 +00 +92 +92 +92 +92 +9A +92 +92 +92 +FE +ENDCHAR +STARTCHAR uniFB2D +ENCODING 64301 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +80 +00 +92 +92 +92 +92 +9A +92 +92 +92 +FE +ENDCHAR +STARTCHAR uniFB2E +ENCODING 64302 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +84 +84 +44 +24 +58 +90 +88 +84 +84 +00 +78 +ENDCHAR +STARTCHAR uniFB2F +ENCODING 64303 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +8C +84 +44 +24 +58 +90 +88 +84 +82 +38 +10 +ENDCHAR +STARTCHAR uniFB30 +ENCODING 64304 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +84 +84 +44 +24 +58 +90 +88 +84 +82 +10 +ENDCHAR +STARTCHAR uniFB31 +ENCODING 64305 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +F8 +08 +08 +08 +48 +08 +08 +08 +FE +ENDCHAR +STARTCHAR uniFB32 +ENCODING 64306 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +60 +10 +10 +10 +88 +18 +28 +44 +84 +ENDCHAR +STARTCHAR uniFB33 +ENCODING 64307 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +08 +08 +08 +48 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uniFB34 +ENCODING 64308 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +04 +04 +44 +54 +44 +44 +44 +44 +ENDCHAR +STARTCHAR uniFB35 +ENCODING 64309 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 0 +BITMAP +E0 +20 +20 +20 +A0 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniFB36 +ENCODING 64310 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +C0 +30 +28 +20 +A0 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniFB38 +ENCODING 64312 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +8C +94 +84 +84 +A4 +84 +84 +84 +FC +ENDCHAR +STARTCHAR uniFB39 +ENCODING 64313 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 4 +BITMAP +E0 +20 +20 +20 +80 +ENDCHAR +STARTCHAR uniFB3A +ENCODING 64314 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +FC +04 +04 +04 +24 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uniFB3B +ENCODING 64315 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +04 +04 +04 +24 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uniFB3C +ENCODING 64316 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +80 +80 +F8 +08 +08 +08 +48 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFB3E +ENCODING 64318 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +9C +62 +42 +82 +92 +82 +82 +82 +8E +ENDCHAR +STARTCHAR uniFB40 +ENCODING 64320 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +70 +10 +10 +10 +90 +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uniFB41 +ENCODING 64321 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +84 +84 +84 +A4 +84 +84 +88 +F0 +ENDCHAR +STARTCHAR uniFB43 +ENCODING 64323 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +FC +84 +84 +84 +E4 +04 +04 +24 +04 +04 +04 +ENDCHAR +STARTCHAR uniFB44 +ENCODING 64324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +84 +84 +84 +E4 +04 +24 +04 +FC +ENDCHAR +STARTCHAR uniFB46 +ENCODING 64326 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +84 +84 +48 +30 +10 +88 +04 +04 +FC +ENDCHAR +STARTCHAR uniFB47 +ENCODING 64327 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +FC +44 +54 +44 +48 +50 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uniFB48 +ENCODING 64328 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +04 +04 +04 +24 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uniFB49 +ENCODING 64329 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +92 +92 +92 +92 +9A +92 +92 +92 +FE +ENDCHAR +STARTCHAR uniFB4A +ENCODING 64330 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +7C +44 +44 +44 +54 +44 +44 +44 +C4 +ENDCHAR +STARTCHAR uniFB4B +ENCODING 64331 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 0 +BITMAP +80 +00 +E0 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniFB4C +ENCODING 64332 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +78 +00 +F8 +08 +08 +08 +08 +08 +08 +08 +FE +ENDCHAR +STARTCHAR uniFB4D +ENCODING 64333 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +78 +00 +FC +04 +04 +04 +04 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uniFB4E +ENCODING 64334 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +78 +00 +FC +84 +84 +84 +E4 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uniFB4F +ENCODING 64335 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +C0 +40 +40 +8C +84 +44 +24 +58 +90 +88 +84 +84 +ENDCHAR +STARTCHAR uniFB50 +ENCODING 64336 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 3 +BITMAP +10 +28 +78 +80 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniFB51 +ENCODING 64337 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 3 +BITMAP +10 +28 +78 +80 +20 +20 +20 +20 +20 +20 +1F +ENDCHAR +STARTCHAR uniFB52 +ENCODING 64338 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +08 +44 +84 +78 +00 +10 +00 +10 +ENDCHAR +STARTCHAR uniFB53 +ENCODING 64339 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -1 +BITMAP +08 +44 +84 +7E +00 +10 +00 +10 +ENDCHAR +STARTCHAR uniFB54 +ENCODING 64340 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 -1 +BITMAP +08 +04 +04 +F8 +00 +08 +00 +08 +ENDCHAR +STARTCHAR uniFB55 +ENCODING 64341 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -1 +BITMAP +08 +04 +04 +FF +00 +08 +00 +08 +ENDCHAR +STARTCHAR uniFB56 +ENCODING 64342 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +08 +44 +84 +78 +00 +28 +00 +10 +ENDCHAR +STARTCHAR uniFB57 +ENCODING 64343 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -1 +BITMAP +08 +44 +84 +7E +00 +28 +00 +10 +ENDCHAR +STARTCHAR uniFB58 +ENCODING 64344 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 -1 +BITMAP +08 +04 +04 +F8 +00 +14 +00 +08 +ENDCHAR +STARTCHAR uniFB59 +ENCODING 64345 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -1 +BITMAP +08 +04 +04 +FF +00 +14 +00 +08 +ENDCHAR +STARTCHAR uniFB5A +ENCODING 64346 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +08 +44 +84 +78 +00 +28 +00 +28 +ENDCHAR +STARTCHAR uniFB5B +ENCODING 64347 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -1 +BITMAP +08 +44 +84 +7E +00 +28 +00 +28 +ENDCHAR +STARTCHAR uniFB5C +ENCODING 64348 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 -1 +BITMAP +08 +04 +04 +F8 +00 +14 +00 +14 +ENDCHAR +STARTCHAR uniFB5D +ENCODING 64349 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -1 +BITMAP +08 +04 +04 +FF +00 +14 +00 +14 +ENDCHAR +STARTCHAR uniFB5E +ENCODING 64350 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +10 +00 +10 +00 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uniFB5F +ENCODING 64351 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 3 +BITMAP +10 +00 +10 +00 +00 +08 +44 +84 +7E +ENDCHAR +STARTCHAR uniFB60 +ENCODING 64352 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 3 +BITMAP +08 +00 +08 +00 +00 +08 +04 +04 +F8 +ENDCHAR +STARTCHAR uniFB61 +ENCODING 64353 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 3 +BITMAP +08 +00 +08 +00 +00 +08 +04 +04 +FF +ENDCHAR +STARTCHAR uniFB62 +ENCODING 64354 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +28 +00 +28 +00 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uniFB63 +ENCODING 64355 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 3 +BITMAP +28 +00 +28 +00 +00 +08 +44 +84 +7E +ENDCHAR +STARTCHAR uniFB64 +ENCODING 64356 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 3 +BITMAP +14 +00 +14 +00 +00 +08 +04 +04 +F8 +ENDCHAR +STARTCHAR uniFB65 +ENCODING 64357 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 3 +BITMAP +14 +00 +14 +00 +00 +08 +04 +04 +FF +ENDCHAR +STARTCHAR uniFB66 +ENCODING 64358 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +40 +40 +70 +70 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uniFB67 +ENCODING 64359 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 3 +BITMAP +40 +40 +70 +70 +00 +08 +44 +84 +7E +ENDCHAR +STARTCHAR uniFB68 +ENCODING 64360 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 3 +BITMAP +10 +10 +1C +1C +00 +08 +04 +04 +F8 +ENDCHAR +STARTCHAR uniFB69 +ENCODING 64361 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 3 +BITMAP +10 +10 +1C +1C +00 +08 +04 +04 +FF +ENDCHAR +STARTCHAR uniFB6A +ENCODING 64362 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 3 +BITMAP +10 +00 +24 +00 +0C +14 +0C +84 +84 +78 +ENDCHAR +STARTCHAR uniFB6B +ENCODING 64363 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 3 +BITMAP +10 +00 +24 +00 +0C +14 +0C +84 +84 +7E +ENDCHAR +STARTCHAR uniFB6C +ENCODING 64364 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 0 3 +BITMAP +10 +00 +24 +00 +00 +38 +24 +14 +0C +F8 +ENDCHAR +STARTCHAR uniFB6D +ENCODING 64365 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +10 +00 +24 +00 +00 +38 +24 +14 +0C +FB +ENDCHAR +STARTCHAR uniFB6E +ENCODING 64366 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 3 +BITMAP +14 +00 +14 +00 +0C +14 +0C +84 +84 +78 +ENDCHAR +STARTCHAR uniFB6F +ENCODING 64367 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 3 +BITMAP +14 +00 +14 +00 +0C +14 +0C +84 +84 +7E +ENDCHAR +STARTCHAR uniFB70 +ENCODING 64368 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 0 3 +BITMAP +28 +00 +28 +00 +00 +38 +24 +14 +0C +F8 +ENDCHAR +STARTCHAR uniFB71 +ENCODING 64369 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +28 +00 +28 +00 +00 +38 +24 +14 +0C +FB +ENDCHAR +STARTCHAR uniFB72 +ENCODING 64370 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +20 +40 +90 +80 +90 +44 +38 +ENDCHAR +STARTCHAR uniFB73 +ENCODING 64371 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +FC +28 +46 +90 +80 +90 +42 +3C +ENDCHAR +STARTCHAR uniFB74 +ENCODING 64372 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 0 -1 +BITMAP +70 +0C +FC +00 +20 +00 +20 +ENDCHAR +STARTCHAR uniFB75 +ENCODING 64373 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 -1 +BITMAP +70 +0C +FF +00 +20 +00 +20 +ENDCHAR +STARTCHAR uniFB76 +ENCODING 64374 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +20 +40 +80 +A8 +80 +44 +38 +ENDCHAR +STARTCHAR uniFB77 +ENCODING 64375 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +FC +28 +46 +80 +A8 +80 +42 +3C +ENDCHAR +STARTCHAR uniFB78 +ENCODING 64376 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 0 1 +BITMAP +70 +0C +FC +00 +50 +ENDCHAR +STARTCHAR uniFB79 +ENCODING 64377 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 1 +BITMAP +70 +0C +FF +00 +50 +ENDCHAR +STARTCHAR uniFB7A +ENCODING 64378 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +40 +80 +A8 +80 +90 +44 +38 +ENDCHAR +STARTCHAR uniFB7B +ENCODING 64379 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +FC +44 +82 +A8 +80 +90 +42 +3C +ENDCHAR +STARTCHAR uniFB7C +ENCODING 64380 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 0 -1 +BITMAP +70 +0C +FC +00 +28 +00 +10 +ENDCHAR +STARTCHAR uniFB7D +ENCODING 64381 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 -1 +BITMAP +70 +0C +FF +00 +28 +00 +10 +ENDCHAR +STARTCHAR uniFB7E +ENCODING 64382 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +40 +80 +A8 +80 +A8 +44 +38 +ENDCHAR +STARTCHAR uniFB7F +ENCODING 64383 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +FC +48 +86 +A8 +80 +A8 +42 +3C +ENDCHAR +STARTCHAR uniFB80 +ENCODING 64384 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 0 -1 +BITMAP +70 +0C +FC +00 +50 +00 +50 +ENDCHAR +STARTCHAR uniFB81 +ENCODING 64385 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 -1 +BITMAP +70 +0C +FF +00 +50 +00 +50 +ENDCHAR +STARTCHAR uniFB82 +ENCODING 64386 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +10 +08 +04 +84 +F8 +00 +50 +ENDCHAR +STARTCHAR uniFB83 +ENCODING 64387 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +10 +08 +04 +84 +FE +00 +50 +ENDCHAR +STARTCHAR uniFB84 +ENCODING 64388 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +50 +00 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uniFB85 +ENCODING 64389 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +50 +00 +00 +10 +08 +04 +84 +FE +ENDCHAR +STARTCHAR uniFB86 +ENCODING 64390 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +20 +00 +50 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uniFB87 +ENCODING 64391 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 3 +BITMAP +20 +00 +50 +00 +10 +08 +04 +84 +FE +ENDCHAR +STARTCHAR uniFB88 +ENCODING 64392 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 3 +BITMAP +40 +40 +70 +70 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uniFB89 +ENCODING 64393 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 3 +BITMAP +40 +40 +70 +70 +00 +10 +08 +04 +84 +FE +ENDCHAR +STARTCHAR uniFB8A +ENCODING 64394 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +10 +00 +28 +00 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFB8B +ENCODING 64395 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +10 +00 +28 +00 +00 +08 +04 +06 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFB8C +ENCODING 64396 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +10 +10 +1C +1C +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFB8D +ENCODING 64397 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +10 +10 +1C +1C +00 +08 +04 +06 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFB8E +ENCODING 64398 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +04 +08 +10 +20 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uniFB8F +ENCODING 64399 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +04 +08 +10 +20 +40 +3C +82 +7F +ENDCHAR +STARTCHAR uniFB90 +ENCODING 64400 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +04 +08 +10 +20 +40 +3C +02 +FE +ENDCHAR +STARTCHAR uniFB91 +ENCODING 64401 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +04 +08 +10 +20 +40 +3C +02 +FF +ENDCHAR +STARTCHAR uniFB92 +ENCODING 64402 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +08 +10 +24 +48 +10 +20 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uniFB93 +ENCODING 64403 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +08 +10 +24 +48 +10 +20 +40 +3C +82 +7F +ENDCHAR +STARTCHAR uniFB94 +ENCODING 64404 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +08 +10 +24 +48 +10 +20 +40 +3C +02 +FE +ENDCHAR +STARTCHAR uniFB95 +ENCODING 64405 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +08 +10 +24 +48 +10 +20 +40 +3C +02 +FF +ENDCHAR +STARTCHAR uniFB96 +ENCODING 64406 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +08 +10 +24 +48 +10 +20 +40 +3C +82 +7E +00 +10 +00 +10 +ENDCHAR +STARTCHAR uniFB97 +ENCODING 64407 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -1 +BITMAP +08 +10 +24 +48 +10 +20 +40 +3C +82 +7F +00 +10 +00 +10 +ENDCHAR +STARTCHAR uniFB98 +ENCODING 64408 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +08 +10 +24 +48 +10 +20 +40 +3C +02 +FE +00 +10 +00 +10 +ENDCHAR +STARTCHAR uniFB99 +ENCODING 64409 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -1 +BITMAP +08 +10 +24 +48 +10 +20 +40 +3C +02 +FF +00 +10 +00 +10 +ENDCHAR +STARTCHAR uniFB9A +ENCODING 64410 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +50 +06 +18 +62 +0C +30 +40 +3C +82 +7E +ENDCHAR +STARTCHAR uniFB9B +ENCODING 64411 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +50 +06 +18 +62 +0C +30 +40 +3C +82 +7F +ENDCHAR +STARTCHAR uniFB9C +ENCODING 64412 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +50 +06 +18 +62 +0C +30 +40 +3C +02 +FE +ENDCHAR +STARTCHAR uniFB9D +ENCODING 64413 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +50 +06 +18 +62 +0C +30 +40 +3C +02 +FF +ENDCHAR +STARTCHAR uniFB9E +ENCODING 64414 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uniFB9F +ENCODING 64415 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +08 +44 +86 +84 +88 +70 +ENDCHAR +STARTCHAR uniFBA0 +ENCODING 64416 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +20 +20 +38 +38 +00 +00 +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uniFBA1 +ENCODING 64417 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +20 +20 +38 +38 +00 +00 +08 +44 +86 +84 +88 +70 +ENDCHAR +STARTCHAR uniFBA2 +ENCODING 64418 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 3 +BITMAP +10 +10 +1C +1C +00 +08 +04 +04 +F8 +ENDCHAR +STARTCHAR uniFBA3 +ENCODING 64419 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 3 +BITMAP +10 +10 +1C +1C +00 +08 +04 +04 +FB +ENDCHAR +STARTCHAR uniFBA4 +ENCODING 64420 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 3 +BITMAP +60 +80 +60 +80 +00 +40 +60 +90 +90 +F0 +ENDCHAR +STARTCHAR uniFBA5 +ENCODING 64421 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 2 3 +BITMAP +60 +80 +60 +80 +10 +10 +30 +50 +90 +F0 +1C +ENDCHAR +STARTCHAR uniFBA6 +ENCODING 64422 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 3 +BITMAP +40 +60 +90 +90 +F0 +ENDCHAR +STARTCHAR uniFBA7 +ENCODING 64423 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 2 +BITMAP +20 +5E +80 +ENDCHAR +STARTCHAR uniFBA8 +ENCODING 64424 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 0 -1 +BITMAP +10 +F0 +10 +10 +14 +08 +ENDCHAR +STARTCHAR uniFBA9 +ENCODING 64425 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 -2 +BITMAP +10 +F3 +14 +14 +14 +08 +08 +ENDCHAR +STARTCHAR uniFBAA +ENCODING 64426 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +20 +58 +54 +34 +48 +80 +ENDCHAR +STARTCHAR uniFBAB +ENCODING 64427 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 2 +BITMAP +20 +58 +54 +34 +4E +80 +ENDCHAR +STARTCHAR uniFBAC +ENCODING 64428 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 3 +BITMAP +10 +2C +2A +1A +E4 +ENDCHAR +STARTCHAR uniFBAD +ENCODING 64429 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 3 +BITMAP +10 +2C +2A +1A +E7 +ENDCHAR +STARTCHAR uniFBAE +ENCODING 64430 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 -1 +BITMAP +10 +28 +20 +40 +80 +FE +ENDCHAR +STARTCHAR uniFBAF +ENCODING 64431 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 -1 +BITMAP +1E +20 +40 +80 +FE +ENDCHAR +STARTCHAR uniFBB0 +ENCODING 64432 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +60 +80 +60 +80 +10 +28 +20 +40 +80 +FE +ENDCHAR +STARTCHAR uniFBB1 +ENCODING 64433 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +60 +80 +60 +80 +00 +1E +20 +40 +80 +FE +ENDCHAR +STARTCHAR uniFBB2 +ENCODING 64434 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 10 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uniFBB3 +ENCODING 64435 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uniFBB4 +ENCODING 64436 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 9 +BITMAP +18 +D8 +C0 +ENDCHAR +STARTCHAR uniFBB5 +ENCODING 64437 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 -2 +BITMAP +18 +D8 +C0 +ENDCHAR +STARTCHAR uniFBB6 +ENCODING 64438 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 8 +BITMAP +60 +60 +00 +D8 +D8 +ENDCHAR +STARTCHAR uniFBB7 +ENCODING 64439 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -2 +BITMAP +60 +60 +00 +D8 +D8 +ENDCHAR +STARTCHAR uniFBB8 +ENCODING 64440 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 8 +BITMAP +D8 +D8 +00 +30 +30 +ENDCHAR +STARTCHAR uniFBB9 +ENCODING 64441 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 -2 +BITMAP +D8 +D8 +00 +30 +30 +ENDCHAR +STARTCHAR uniFBBA +ENCODING 64442 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 7 +BITMAP +18 +D8 +C0 +06 +36 +30 +ENDCHAR +STARTCHAR uniFBBB +ENCODING 64443 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 -2 +BITMAP +18 +D8 +C0 +06 +36 +30 +ENDCHAR +STARTCHAR uniFBBC +ENCODING 64444 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 2 -2 +BITMAP +90 +90 +48 +48 +ENDCHAR +STARTCHAR uniFBBD +ENCODING 64445 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 8 +BITMAP +C0 +C0 +00 +30 +30 +ENDCHAR +STARTCHAR uniFBBE +ENCODING 64446 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 -1 +BITMAP +C0 +C0 +00 +30 +30 +ENDCHAR +STARTCHAR uniFBBF +ENCODING 64447 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 -2 +BITMAP +20 +50 +90 +A0 +40 +ENDCHAR +STARTCHAR uniFBC0 +ENCODING 64448 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 3 9 +BITMAP +80 +80 +E0 +E0 +ENDCHAR +STARTCHAR uniFBC1 +ENCODING 64449 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 3 -2 +BITMAP +80 +80 +E0 +E0 +ENDCHAR +STARTCHAR uniFBC2 +ENCODING 64450 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 2 10 +BITMAP +10 +28 +78 +80 +ENDCHAR +STARTCHAR uniFBD3 +ENCODING 64467 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 3 +BITMAP +20 +00 +50 +04 +14 +24 +14 +44 +84 +84 +78 +ENDCHAR +STARTCHAR uniFBD4 +ENCODING 64468 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 3 +BITMAP +20 +00 +50 +04 +14 +24 +14 +44 +84 +84 +7E +ENDCHAR +STARTCHAR uniFBD5 +ENCODING 64469 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 3 +BITMAP +20 +00 +50 +04 +08 +10 +20 +40 +3C +02 +FE +ENDCHAR +STARTCHAR uniFBD6 +ENCODING 64470 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 3 +BITMAP +20 +00 +50 +04 +08 +10 +20 +40 +3C +02 +FF +ENDCHAR +STARTCHAR uniFBD7 +ENCODING 64471 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +30 +30 +10 +20 +40 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFBD8 +ENCODING 64472 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +30 +30 +10 +20 +40 +18 +24 +24 +3E +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFBD9 +ENCODING 64473 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +44 +28 +10 +00 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFBDA +ENCODING 64474 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +44 +28 +10 +00 +18 +24 +24 +3E +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFBDB +ENCODING 64475 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +10 +08 +08 +00 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFBDC +ENCODING 64476 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +10 +08 +08 +00 +18 +24 +24 +3E +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFBDD +ENCODING 64477 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +60 +66 +28 +46 +88 +20 +50 +50 +70 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFBDE +ENCODING 64478 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +10 +00 +24 +00 +00 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFBDF +ENCODING 64479 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +10 +00 +24 +00 +00 +18 +24 +24 +3E +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFBE0 +ENCODING 64480 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +18 +24 +24 +3C +04 +78 +90 +60 +ENDCHAR +STARTCHAR uniFBE1 +ENCODING 64481 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -1 +BITMAP +18 +24 +24 +3E +04 +78 +90 +60 +ENDCHAR +STARTCHAR uniFBE2 +ENCODING 64482 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +10 +28 +44 +00 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFBE3 +ENCODING 64483 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +10 +28 +44 +00 +18 +24 +24 +3E +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFBE4 +ENCODING 64484 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +18 +A4 +90 +88 +70 +00 +20 +00 +20 +ENDCHAR +STARTCHAR uniFBE5 +ENCODING 64485 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +98 +A4 +92 +60 +00 +20 +00 +20 +ENDCHAR +STARTCHAR uniFBE6 +ENCODING 64486 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 -1 +BITMAP +08 +08 +04 +F8 +00 +08 +00 +08 +ENDCHAR +STARTCHAR uniFBE7 +ENCODING 64487 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -1 +BITMAP +08 +08 +04 +FB +00 +08 +00 +08 +ENDCHAR +STARTCHAR uniFBE8 +ENCODING 64488 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 0 3 +BITMAP +08 +08 +04 +F8 +ENDCHAR +STARTCHAR uniFBE9 +ENCODING 64489 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 3 +BITMAP +08 +08 +04 +FB +ENDCHAR +STARTCHAR uniFBEA +ENCODING 64490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 3 +BITMAP +98 +A0 +98 +A0 +80 +88 +88 +70 +ENDCHAR +STARTCHAR uniFBEB +ENCODING 64491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +98 +A0 +98 +A0 +80 +88 +88 +76 +ENDCHAR +STARTCHAR uniFBEC +ENCODING 64492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +0C +10 +0C +10 +00 +04 +24 +58 +80 +ENDCHAR +STARTCHAR uniFBED +ENCODING 64493 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +0C +10 +0C +10 +00 +04 +24 +5A +80 +ENDCHAR +STARTCHAR uniFBEE +ENCODING 64494 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +06 +08 +06 +08 +20 +54 +54 +78 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFBEF +ENCODING 64495 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +06 +08 +06 +08 +20 +54 +54 +7A +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFBF0 +ENCODING 64496 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +60 +66 +28 +46 +88 +20 +54 +54 +78 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFBF1 +ENCODING 64497 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +60 +66 +28 +46 +88 +20 +54 +54 +7A +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFBF2 +ENCODING 64498 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 -1 +BITMAP +88 +53 +24 +23 +04 +10 +2A +2A +3C +08 +08 +10 +60 +ENDCHAR +STARTCHAR uniFBF3 +ENCODING 64499 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 -1 +BITMAP +88 +53 +24 +23 +04 +10 +2A +2A +3D +08 +08 +10 +60 +ENDCHAR +STARTCHAR uniFBF4 +ENCODING 64500 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +46 +28 +26 +08 +20 +54 +54 +78 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFBF5 +ENCODING 64501 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +46 +28 +26 +08 +20 +54 +54 +7A +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFBF6 +ENCODING 64502 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 15 1 -2 +BITMAP +18 +20 +18 +20 +08 +08 +18 +A0 +90 +88 +70 +00 +20 +00 +20 +ENDCHAR +STARTCHAR uniFBF7 +ENCODING 64503 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +18 +20 +18 +20 +00 +08 +98 +A4 +92 +60 +00 +20 +00 +20 +ENDCHAR +STARTCHAR uniFBF8 +ENCODING 64504 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -1 +BITMAP +06 +08 +06 +08 +00 +22 +22 +12 +EC +00 +20 +00 +20 +ENDCHAR +STARTCHAR uniFBF9 +ENCODING 64505 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +0C +10 +0C +10 +04 +04 +04 +0C +90 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uniFBFA +ENCODING 64506 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +0C +10 +0C +10 +00 +04 +04 +0A +90 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uniFBFB +ENCODING 64507 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 3 +BITMAP +06 +08 +06 +08 +00 +22 +22 +12 +EC +ENDCHAR +STARTCHAR uniFBFC +ENCODING 64508 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +08 +94 +90 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uniFBFD +ENCODING 64509 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 -1 +BITMAP +86 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uniFBFE +ENCODING 64510 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 0 1 +BITMAP +08 +08 +04 +F8 +00 +28 +ENDCHAR +STARTCHAR uniFBFF +ENCODING 64511 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 1 +BITMAP +08 +08 +04 +FB +00 +28 +ENDCHAR +STARTCHAR uniFC00 +ENCODING 64512 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +60 +80 +60 +8C +30 +40 +7E +20 +40 +48 +40 +22 +1C +ENDCHAR +STARTCHAR uniFC01 +ENCODING 64513 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +60 +80 +60 +8C +30 +40 +7E +20 +40 +40 +40 +22 +1C +ENDCHAR +STARTCHAR uniFC02 +ENCODING 64514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +30 +40 +30 +46 +08 +10 +10 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC03 +ENCODING 64515 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +60 +80 +60 +88 +04 +04 +44 +88 +8C +44 +38 +ENDCHAR +STARTCHAR uniFC04 +ENCODING 64516 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +60 +80 +60 +88 +04 +04 +44 +88 +8C +44 +38 +00 +28 +ENDCHAR +STARTCHAR uniFC05 +ENCODING 64517 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +18 +60 +80 +FC +40 +84 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC06 +ENCODING 64518 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +18 +60 +80 +FC +40 +84 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC07 +ENCODING 64519 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +40 +00 +18 +60 +80 +FC +40 +84 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC08 +ENCODING 64520 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +06 +08 +10 +10 +78 +82 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC09 +ENCODING 64521 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +08 +04 +04 +44 +88 +8C +44 +38 +02 +ENDCHAR +STARTCHAR uniFC0A +ENCODING 64522 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +08 +04 +04 +44 +88 +8C +44 +38 +02 +28 +ENDCHAR +STARTCHAR uniFC0B +ENCODING 64523 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +50 +00 +18 +60 +80 +FC +40 +84 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC0C +ENCODING 64524 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +50 +00 +18 +60 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC0D +ENCODING 64525 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +28 +00 +8C +30 +40 +7E +20 +40 +40 +40 +22 +1C +ENDCHAR +STARTCHAR uniFC0E +ENCODING 64526 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +0A +00 +00 +06 +08 +10 +10 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC0F +ENCODING 64527 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +28 +00 +08 +04 +04 +44 +88 +8C +44 +38 +ENDCHAR +STARTCHAR uniFC10 +ENCODING 64528 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +28 +00 +08 +04 +04 +44 +88 +8C +44 +38 +00 +28 +ENDCHAR +STARTCHAR uniFC11 +ENCODING 64529 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +40 +00 +A0 +0C +30 +40 +7E +20 +40 +48 +40 +22 +1C +ENDCHAR +STARTCHAR uniFC12 +ENCODING 64530 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +20 +00 +50 +06 +08 +10 +10 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC13 +ENCODING 64531 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +40 +00 +A0 +08 +04 +04 +44 +88 +8C +44 +38 +ENDCHAR +STARTCHAR uniFC14 +ENCODING 64532 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +40 +00 +A0 +08 +04 +04 +44 +88 +8C +44 +38 +00 +28 +ENDCHAR +STARTCHAR uniFC15 +ENCODING 64533 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +E0 +18 +04 +18 +60 +80 +F0 +44 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC16 +ENCODING 64534 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +60 +18 +04 +06 +08 +10 +10 +78 +82 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC17 +ENCODING 64535 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +E0 +18 +04 +18 +60 +80 +FC +40 +84 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC18 +ENCODING 64536 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +60 +18 +04 +06 +08 +10 +10 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC19 +ENCODING 64537 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +08 +E0 +18 +04 +18 +60 +80 +FC +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC1A +ENCODING 64538 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +08 +E0 +18 +04 +18 +60 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC1B +ENCODING 64539 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +62 +18 +04 +06 +08 +10 +10 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC1C +ENCODING 64540 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +4A +B4 +80 +FC +40 +84 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC1D +ENCODING 64541 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +4A +B4 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC1E +ENCODING 64542 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +80 +00 +4A +B4 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC1F +ENCODING 64543 +BBX 12 10 2 -2 +BITMAP +0650 +09A0 +1000 +1000 +7800 +8000 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniFC20 +ENCODING 64544 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +0C +12 +3C +50 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC21 +ENCODING 64545 +BBX 12 12 2 -2 +BITMAP +00E0 +0110 +07E0 +0900 +1000 +1000 +7800 +8000 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniFC22 +ENCODING 64546 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +4C +12 +3C +50 +80 +FC +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC23 +ENCODING 64547 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +4C +12 +3C +50 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC24 +ENCODING 64548 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +26 +89 +1E +28 +40 +7E +20 +40 +40 +40 +22 +1C +ENDCHAR +STARTCHAR uniFC25 +ENCODING 64549 +BBX 12 12 2 -2 +BITMAP +04E0 +0110 +07E0 +0900 +1000 +1000 +7800 +8000 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniFC26 +ENCODING 64550 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +40 +58 +64 +78 +40 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC27 +ENCODING 64551 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +10 +10 +10 +1C +12 +2C +20 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC28 +ENCODING 64552 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +10 +14 +10 +1C +12 +2C +20 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC29 +ENCODING 64553 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +60 +80 +70 +20 +40 +80 +FC +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC2A +ENCODING 64554 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +18 +20 +1E +08 +10 +10 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC2B +ENCODING 64555 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -2 +BITMAP +80 +30 +40 +38 +10 +20 +40 +7E +20 +40 +48 +40 +22 +1C +ENDCHAR +STARTCHAR uniFC2C +ENCODING 64556 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +10 +00 +18 +20 +1E +08 +10 +10 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC2D +ENCODING 64557 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -2 +BITMAP +80 +20 +50 +30 +10 +20 +7E +10 +20 +40 +48 +40 +21 +1E +ENDCHAR +STARTCHAR uniFC2E +ENCODING 64558 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -2 +BITMAP +80 +20 +50 +30 +10 +20 +7E +10 +20 +40 +40 +40 +21 +1E +ENDCHAR +STARTCHAR uniFC2F +ENCODING 64559 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -2 +BITMAP +80 +20 +50 +30 +90 +20 +7E +10 +20 +40 +40 +40 +21 +1E +ENDCHAR +STARTCHAR uniFC30 +ENCODING 64560 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 1 -2 +BITMAP +80 +20 +50 +30 +10 +20 +40 +20 +70 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC31 +ENCODING 64561 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +08 +00 +00 +18 +14 +0C +04 +8C +90 +88 +84 +78 +ENDCHAR +STARTCHAR uniFC32 +ENCODING 64562 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +08 +00 +00 +18 +14 +0C +04 +8C +90 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFC33 +ENCODING 64563 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +A0 +00 +40 +A0 +60 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC34 +ENCODING 64564 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 14 1 -2 +BITMAP +50 +00 +20 +50 +30 +10 +20 +40 +20 +70 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC35 +ENCODING 64565 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +28 +00 +00 +18 +14 +0C +04 +8C +90 +88 +84 +78 +ENDCHAR +STARTCHAR uniFC36 +ENCODING 64566 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +28 +00 +00 +18 +14 +0C +04 +8C +90 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFC37 +ENCODING 64567 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +04 +88 +90 +A0 +C0 +BC +82 +7C +ENDCHAR +STARTCHAR uniFC38 +ENCODING 64568 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +20 +40 +20 +40 +FC +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC39 +ENCODING 64569 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +20 +40 +20 +40 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC3A +ENCODING 64570 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +08 +10 +20 +90 +20 +7E +20 +40 +40 +40 +22 +1C +ENDCHAR +STARTCHAR uniFC3B +ENCODING 64571 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +10 +10 +12 +14 +18 +14 +12 +1C +90 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uniFC3C +ENCODING 64572 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 -2 +BITMAP +08 +10 +20 +40 +20 +10 +20 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC3D +ENCODING 64573 +BBX 9 11 3 0 +BITMAP +0080 +0100 +0200 +0400 +0400 +0200 +4400 +8800 +8C00 +4400 +3800 +ENDCHAR +STARTCHAR uniFC3E +ENCODING 64574 +BBX 9 13 3 -2 +BITMAP +0080 +0100 +0200 +0400 +0400 +0200 +4400 +8800 +8C00 +4400 +3800 +0000 +2800 +ENDCHAR +STARTCHAR uniFC3F +ENCODING 64575 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +20 +20 +20 +20 +20 +40 +FC +20 +40 +80 +90 +80 +42 +3C +ENDCHAR +STARTCHAR uniFC40 +ENCODING 64576 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +20 +20 +20 +20 +20 +40 +FC +20 +40 +80 +80 +80 +42 +3C +ENDCHAR +STARTCHAR uniFC41 +ENCODING 64577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +20 +20 +20 +A0 +20 +40 +FC +20 +40 +80 +80 +80 +42 +3C +ENDCHAR +STARTCHAR uniFC42 +ENCODING 64578 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC43 +ENCODING 64579 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +04 +04 +04 +04 +04 +04 +0C +90 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uniFC44 +ENCODING 64580 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +04 +04 +04 +04 +04 +04 +0C +90 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFC45 +ENCODING 64581 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +18 +60 +80 +FC +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC46 +ENCODING 64582 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +18 +60 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC47 +ENCODING 64583 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +40 +18 +60 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC48 +ENCODING 64584 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +06 +08 +10 +10 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC49 +ENCODING 64585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +04 +04 +08 +10 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uniFC4A +ENCODING 64586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +04 +04 +08 +10 +88 +84 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFC4B +ENCODING 64587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +00 +18 +60 +80 +FC +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC4C +ENCODING 64588 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +00 +18 +60 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC4D +ENCODING 64589 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +40 +18 +60 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC4E +ENCODING 64590 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +04 +00 +00 +06 +08 +10 +10 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC4F +ENCODING 64591 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +00 +08 +04 +04 +44 +88 +8C +44 +38 +ENDCHAR +STARTCHAR uniFC50 +ENCODING 64592 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +00 +08 +04 +04 +44 +88 +8C +44 +38 +00 +28 +ENDCHAR +STARTCHAR uniFC51 +ENCODING 64593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +20 +70 +A8 +A4 +78 +80 +FC +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC52 +ENCODING 64594 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 -2 +BITMAP +40 +30 +68 +A8 +70 +10 +20 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC53 +ENCODING 64595 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +0C +1A +2A +1C +04 +44 +88 +8C +44 +38 +ENDCHAR +STARTCHAR uniFC54 +ENCODING 64596 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +0C +1A +2A +1C +04 +44 +88 +8C +44 +38 +00 +28 +ENDCHAR +STARTCHAR uniFC55 +ENCODING 64597 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +18 +60 +80 +FC +40 +94 +80 +90 +44 +38 +ENDCHAR +STARTCHAR uniFC56 +ENCODING 64598 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +18 +60 +80 +FC +40 +94 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC57 +ENCODING 64599 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +40 +18 +60 +80 +FC +40 +94 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFC58 +ENCODING 64600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +06 +08 +10 +10 +78 +82 +88 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC59 +ENCODING 64601 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +08 +04 +44 +88 +8C +44 +38 +02 +08 +ENDCHAR +STARTCHAR uniFC5A +ENCODING 64602 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +08 +04 +44 +88 +8C +44 +38 +02 +08 +A0 +ENDCHAR +STARTCHAR uniFC5B +ENCODING 64603 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 3 +BITMAP +20 +20 +20 +00 +40 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uniFC5C +ENCODING 64604 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +10 +10 +10 +10 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFC5D +ENCODING 64605 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +20 +20 +00 +08 +14 +90 +88 +84 +78 +ENDCHAR +STARTCHAR uniFC5E +ENCODING 64606 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 6 +BITMAP +08 +D4 +48 +30 +00 +A8 +F8 +ENDCHAR +STARTCHAR uniFC5F +ENCODING 64607 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 5 +BITMAP +A8 +A8 +F8 +0C +30 +CC +30 +C0 +ENDCHAR +STARTCHAR uniFC60 +ENCODING 64608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 6 +BITMAP +0C +30 +C0 +00 +A8 +F8 +ENDCHAR +STARTCHAR uniFC61 +ENCODING 64609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 6 +BITMAP +08 +14 +08 +F4 +00 +A8 +F8 +ENDCHAR +STARTCHAR uniFC62 +ENCODING 64610 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 6 +BITMAP +A8 +A8 +F8 +00 +0C +30 +C0 +ENDCHAR +STARTCHAR uniFC63 +ENCODING 64611 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 6 +BITMAP +10 +10 +10 +00 +A8 +F8 +ENDCHAR +STARTCHAR uniFC64 +ENCODING 64612 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +30 +40 +30 +44 +0C +14 +24 +14 +12 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFC65 +ENCODING 64613 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 -1 +BITMAP +18 +20 +98 +22 +06 +0A +12 +0A +09 +08 +08 +10 +60 +ENDCHAR +STARTCHAR uniFC66 +ENCODING 64614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +30 +40 +30 +46 +08 +10 +10 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC67 +ENCODING 64615 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +18 +20 +98 +02 +06 +0A +2A +45 +44 +48 +30 +ENDCHAR +STARTCHAR uniFC68 +ENCODING 64616 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +18 +20 +18 +20 +00 +0C +92 +88 +84 +78 +ENDCHAR +STARTCHAR uniFC69 +ENCODING 64617 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +18 +20 +18 +20 +00 +0C +92 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFC6A +ENCODING 64618 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +04 +0C +14 +24 +14 +12 +10 +10 +24 +C0 +ENDCHAR +STARTCHAR uniFC6B +ENCODING 64619 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +24 +0C +14 +24 +14 +12 +10 +10 +24 +C0 +ENDCHAR +STARTCHAR uniFC6C +ENCODING 64620 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +06 +08 +10 +10 +7A +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC6D +ENCODING 64621 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +20 +04 +0C +14 +54 +8A +88 +90 +64 +ENDCHAR +STARTCHAR uniFC6E +ENCODING 64622 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 -1 +BITMAP +0C +92 +88 +84 +78 +02 +ENDCHAR +STARTCHAR uniFC6F +ENCODING 64623 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 -2 +BITMAP +0C +92 +88 +84 +78 +02 +50 +ENDCHAR +STARTCHAR uniFC70 +ENCODING 64624 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +0A +00 +00 +04 +0C +14 +24 +14 +12 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFC71 +ENCODING 64625 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +0A +00 +40 +04 +0C +14 +24 +14 +12 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFC72 +ENCODING 64626 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +28 +00 +18 +24 +72 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC73 +ENCODING 64627 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +0A +00 +20 +04 +0C +14 +54 +8A +88 +90 +60 +ENDCHAR +STARTCHAR uniFC74 +ENCODING 64628 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +0A +00 +00 +0C +92 +88 +84 +78 +ENDCHAR +STARTCHAR uniFC75 +ENCODING 64629 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +0A +00 +00 +0C +92 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFC76 +ENCODING 64630 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +04 +00 +0A +00 +04 +0C +14 +24 +14 +12 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFC77 +ENCODING 64631 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +04 +00 +0A +00 +44 +0C +14 +24 +14 +12 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFC78 +ENCODING 64632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +10 +00 +28 +00 +18 +24 +72 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC79 +ENCODING 64633 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +04 +00 +0A +00 +24 +0C +14 +54 +8A +88 +90 +60 +ENDCHAR +STARTCHAR uniFC7A +ENCODING 64634 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +04 +00 +0A +00 +0C +92 +88 +84 +78 +ENDCHAR +STARTCHAR uniFC7B +ENCODING 64635 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +04 +00 +0A +00 +0C +92 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFC7C +ENCODING 64636 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +08 +00 +0C +0A +46 +89 +8C +44 +38 +ENDCHAR +STARTCHAR uniFC7D +ENCODING 64637 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -2 +BITMAP +08 +00 +0C +0A +46 +89 +8C +44 +38 +00 +28 +ENDCHAR +STARTCHAR uniFC7E +ENCODING 64638 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +14 +00 +08 +14 +0E +44 +88 +8C +44 +38 +ENDCHAR +STARTCHAR uniFC7F +ENCODING 64639 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +14 +00 +08 +14 +0E +44 +88 +8C +44 +38 +00 +28 +ENDCHAR +STARTCHAR uniFC80 +ENCODING 64640 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 2 3 +BITMAP +84 +88 +90 +A0 +C0 +A0 +B0 +48 +04 +ENDCHAR +STARTCHAR uniFC81 +ENCODING 64641 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 3 +BITMAP +21 +22 +24 +28 +30 +A8 +AC +B2 +41 +ENDCHAR +STARTCHAR uniFC82 +ENCODING 64642 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 2 -2 +BITMAP +04 +08 +10 +20 +40 +20 +10 +28 +44 +20 +70 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC83 +ENCODING 64643 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +01 +02 +04 +08 +10 +08 +04 +46 +89 +8C +44 +38 +ENDCHAR +STARTCHAR uniFC84 +ENCODING 64644 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -2 +BITMAP +01 +02 +04 +08 +10 +08 +04 +46 +89 +8C +44 +38 +00 +28 +ENDCHAR +STARTCHAR uniFC85 +ENCODING 64645 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 3 -2 +BITMAP +10 +10 +10 +10 +10 +78 +40 +60 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC86 +ENCODING 64646 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +02 +02 +02 +02 +42 +85 +88 +44 +38 +ENDCHAR +STARTCHAR uniFC87 +ENCODING 64647 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -2 +BITMAP +02 +02 +02 +02 +42 +85 +88 +44 +38 +00 +28 +ENDCHAR +STARTCHAR uniFC88 +ENCODING 64648 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +40 +4E +30 +1C +ENDCHAR +STARTCHAR uniFC89 +ENCODING 64649 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 -2 +BITMAP +47 +B8 +AE +80 +80 +80 +ENDCHAR +STARTCHAR uniFC8A +ENCODING 64650 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +04 +00 +04 +0C +14 +24 +14 +12 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFC8B +ENCODING 64651 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +04 +20 +04 +0C +14 +24 +14 +12 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFC8C +ENCODING 64652 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +02 +00 +02 +06 +0A +12 +79 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC8D +ENCODING 64653 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +04 +20 +00 +04 +0C +14 +54 +8A +88 +90 +60 +ENDCHAR +STARTCHAR uniFC8E +ENCODING 64654 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +04 +00 +00 +0C +92 +88 +84 +78 +ENDCHAR +STARTCHAR uniFC8F +ENCODING 64655 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +04 +00 +00 +0C +92 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFC90 +ENCODING 64656 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +20 +20 +20 +00 +0C +92 +88 +84 +78 +ENDCHAR +STARTCHAR uniFC91 +ENCODING 64657 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +04 +0C +14 +24 +14 +12 +10 +10 +20 +CA +ENDCHAR +STARTCHAR uniFC92 +ENCODING 64658 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +40 +04 +0C +14 +24 +14 +12 +10 +10 +20 +CA +ENDCHAR +STARTCHAR uniFC93 +ENCODING 64659 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +06 +08 +10 +10 +78 +80 +94 +80 +80 +80 +ENDCHAR +STARTCHAR uniFC94 +ENCODING 64660 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +20 +04 +0C +14 +54 +8A +88 +90 +60 +0A +ENDCHAR +STARTCHAR uniFC95 +ENCODING 64661 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 -2 +BITMAP +0C +92 +88 +84 +78 +02 +08 +ENDCHAR +STARTCHAR uniFC96 +ENCODING 64662 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 -2 +BITMAP +0C +92 +88 +84 +78 +02 +A8 +ENDCHAR +STARTCHAR uniFC97 +ENCODING 64663 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 1 +BITMAP +02 +04 +06 +08 +00 +0C +14 +20 +78 +0C +F0 +00 +10 +ENDCHAR +STARTCHAR uniFC98 +ENCODING 64664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 3 +BITMAP +02 +04 +06 +08 +00 +0C +14 +20 +78 +0C +F0 +ENDCHAR +STARTCHAR uniFC99 +ENCODING 64665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 3 +BITMAP +02 +04 +06 +08 +00 +4C +14 +20 +78 +0C +F0 +ENDCHAR +STARTCHAR uniFC9A +ENCODING 64666 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +02 +04 +06 +08 +00 +06 +08 +10 +10 +F8 +ENDCHAR +STARTCHAR uniFC9B +ENCODING 64667 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -1 +BITMAP +04 +08 +0C +10 +00 +26 +69 +E8 +28 +24 +14 +0C +ENDCHAR +STARTCHAR uniFC9C +ENCODING 64668 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 0 +BITMAP +0C +14 +20 +78 +0C +F0 +00 +04 +20 +ENDCHAR +STARTCHAR uniFC9D +ENCODING 64669 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 1 +BITMAP +0C +14 +20 +78 +0C +F0 +00 +04 +ENDCHAR +STARTCHAR uniFC9E +ENCODING 64670 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 1 +BITMAP +20 +0C +14 +20 +78 +0C +F0 +00 +04 +ENDCHAR +STARTCHAR uniFC9F +ENCODING 64671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +06 +08 +10 +10 +F8 +00 +04 +ENDCHAR +STARTCHAR uniFCA0 +ENCODING 64672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 -1 +BITMAP +26 +69 +E8 +28 +25 +14 +0C +ENDCHAR +STARTCHAR uniFCA1 +ENCODING 64673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +0A +00 +00 +0C +14 +20 +78 +0C +F0 +00 +00 +20 +ENDCHAR +STARTCHAR uniFCA2 +ENCODING 64674 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 3 +BITMAP +0A +00 +00 +0C +14 +20 +78 +0C +F0 +ENDCHAR +STARTCHAR uniFCA3 +ENCODING 64675 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 3 +BITMAP +0A +00 +20 +0C +14 +20 +78 +0C +F0 +ENDCHAR +STARTCHAR uniFCA4 +ENCODING 64676 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +0A +00 +00 +06 +08 +10 +10 +F8 +ENDCHAR +STARTCHAR uniFCA5 +ENCODING 64677 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -1 +BITMAP +0A +00 +00 +26 +69 +E8 +28 +24 +14 +0C +ENDCHAR +STARTCHAR uniFCA6 +ENCODING 64678 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +04 +00 +0A +00 +00 +06 +08 +10 +10 +F8 +ENDCHAR +STARTCHAR uniFCA7 +ENCODING 64679 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +60 +58 +04 +1E +20 +40 +7E +18 +62 +80 +ENDCHAR +STARTCHAR uniFCA8 +ENCODING 64680 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 1 +BITMAP +1C +02 +1F +28 +D8 +00 +08 +ENDCHAR +STARTCHAR uniFCA9 +ENCODING 64681 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 2 +BITMAP +60 +58 +04 +1E +20 +40 +7E +18 +60 +80 +10 +ENDCHAR +STARTCHAR uniFCAA +ENCODING 64682 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 3 +BITMAP +1C +03 +1F +28 +D8 +ENDCHAR +STARTCHAR uniFCAB +ENCODING 64683 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 2 +BITMAP +08 +60 +58 +04 +1E +20 +40 +7E +18 +60 +80 +10 +ENDCHAR +STARTCHAR uniFCAC +ENCODING 64684 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +08 +00 +00 +1C +03 +1F +28 +D8 +ENDCHAR +STARTCHAR uniFCAD +ENCODING 64685 +BBX 14 8 0 2 +BITMAP +1F94 +2094 +4068 +7E00 +1800 +6000 +8000 +1000 +ENDCHAR +STARTCHAR uniFCAE +ENCODING 64686 +BBX 14 7 0 3 +BITMAP +1F94 +2094 +4068 +7E00 +1800 +6000 +8000 +ENDCHAR +STARTCHAR uniFCAF +ENCODING 64687 +BBX 14 8 0 3 +BITMAP +4000 +1F94 +2094 +4068 +7E00 +1800 +6000 +8000 +ENDCHAR +STARTCHAR uniFCB0 +ENCODING 64688 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 3 +BITMAP +01 +15 +15 +3E +40 +E0 +ENDCHAR +STARTCHAR uniFCB1 +ENCODING 64689 +BBX 14 10 0 3 +BITMAP +0008 +0414 +0A24 +1148 +20F0 +4040 +7E00 +1800 +6000 +8000 +ENDCHAR +STARTCHAR uniFCB2 +ENCODING 64690 +BBX 14 10 0 3 +BITMAP +0008 +4414 +0A24 +1148 +20F0 +4040 +7E00 +1800 +6000 +8000 +ENDCHAR +STARTCHAR uniFCB3 +ENCODING 64691 +BBX 12 8 0 3 +BITMAP +0020 +0050 +0090 +1120 +2FC0 +2100 +4000 +E000 +ENDCHAR +STARTCHAR uniFCB4 +ENCODING 64692 +BBX 14 12 0 2 +BITMAP +0080 +0008 +0414 +0A24 +1148 +20F0 +4040 +7E00 +1800 +6000 +8000 +0800 +ENDCHAR +STARTCHAR uniFCB5 +ENCODING 64693 +BBX 14 11 0 3 +BITMAP +0080 +0008 +0414 +0A24 +1148 +20F0 +4040 +7E00 +1800 +6000 +8000 +ENDCHAR +STARTCHAR uniFCB6 +ENCODING 64694 +BBX 14 11 0 3 +BITMAP +0080 +0008 +4414 +0A24 +1148 +20F0 +4040 +7E00 +1800 +6000 +8000 +ENDCHAR +STARTCHAR uniFCB7 +ENCODING 64695 +BBX 12 8 0 3 +BITMAP +0420 +0050 +0090 +1120 +2FC0 +2100 +4000 +E000 +ENDCHAR +STARTCHAR uniFCB8 +ENCODING 64696 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 3 +BITMAP +10 +10 +16 +19 +1E +20 +78 +06 +18 +60 +80 +ENDCHAR +STARTCHAR uniFCB9 +ENCODING 64697 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +12 +10 +16 +19 +3E +40 +F0 +48 +30 +ENDCHAR +STARTCHAR uniFCBA +ENCODING 64698 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 2 +BITMAP +30 +42 +4C +30 +40 +7E +18 +60 +80 +10 +ENDCHAR +STARTCHAR uniFCBB +ENCODING 64699 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 1 +BITMAP +30 +40 +4C +30 +40 +F0 +48 +30 +ENDCHAR +STARTCHAR uniFCBC +ENCODING 64700 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 2 +BITMAP +20 +00 +30 +42 +4C +30 +40 +7E +18 +60 +80 +10 +ENDCHAR +STARTCHAR uniFCBD +ENCODING 64701 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 0 1 +BITMAP +20 +00 +30 +40 +4C +30 +40 +F0 +48 +30 +ENDCHAR +STARTCHAR uniFCBE +ENCODING 64702 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 2 +BITMAP +40 +10 +28 +38 +08 +10 +20 +3E +0C +30 +C0 +08 +ENDCHAR +STARTCHAR uniFCBF +ENCODING 64703 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 3 +BITMAP +40 +10 +28 +38 +08 +10 +20 +3E +0C +30 +C0 +ENDCHAR +STARTCHAR uniFCC0 +ENCODING 64704 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +40 +10 +28 +38 +88 +10 +20 +3E +0C +F0 +ENDCHAR +STARTCHAR uniFCC1 +ENCODING 64705 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 0 1 +BITMAP +10 +00 +10 +28 +38 +08 +10 +20 +20 +F0 +28 +10 +ENDCHAR +STARTCHAR uniFCC2 +ENCODING 64706 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 1 +BITMAP +28 +00 +10 +28 +38 +08 +10 +20 +3E +0C +F0 +00 +08 +ENDCHAR +STARTCHAR uniFCC3 +ENCODING 64707 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 0 1 +BITMAP +28 +00 +10 +28 +38 +08 +10 +20 +20 +F0 +28 +10 +ENDCHAR +STARTCHAR uniFCC4 +ENCODING 64708 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 2 +BITMAP +02 +04 +08 +10 +30 +08 +10 +7E +18 +60 +80 +08 +ENDCHAR +STARTCHAR uniFCC5 +ENCODING 64709 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 3 +BITMAP +02 +04 +08 +10 +30 +08 +10 +7E +18 +60 +80 +ENDCHAR +STARTCHAR uniFCC6 +ENCODING 64710 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 3 +BITMAP +02 +04 +08 +10 +30 +88 +10 +7E +18 +60 +80 +ENDCHAR +STARTCHAR uniFCC7 +ENCODING 64711 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 3 +BITMAP +02 +44 +48 +50 +60 +78 +44 +44 +24 +D8 +ENDCHAR +STARTCHAR uniFCC8 +ENCODING 64712 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 0 1 +BITMAP +04 +08 +10 +20 +40 +20 +10 +10 +20 +F0 +28 +10 +ENDCHAR +STARTCHAR uniFCC9 +ENCODING 64713 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 0 0 +BITMAP +10 +10 +10 +10 +10 +20 +78 +0C +F0 +00 +00 +20 +ENDCHAR +STARTCHAR uniFCCA +ENCODING 64714 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 3 +BITMAP +10 +10 +10 +10 +10 +20 +78 +0C +F0 +ENDCHAR +STARTCHAR uniFCCB +ENCODING 64715 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 3 +BITMAP +10 +10 +50 +10 +10 +20 +78 +0C +F0 +ENDCHAR +STARTCHAR uniFCCC +ENCODING 64716 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +FC +02 +ENDCHAR +STARTCHAR uniFCCD +ENCODING 64717 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 3 +BITMAP +04 +04 +04 +04 +04 +1C +2A +3A +F6 +ENDCHAR +STARTCHAR uniFCCE +ENCODING 64718 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +04 +0A +1C +20 +78 +0C +F0 +00 +00 +20 +ENDCHAR +STARTCHAR uniFCCF +ENCODING 64719 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 3 +BITMAP +04 +0A +1C +20 +78 +0C +F0 +ENDCHAR +STARTCHAR uniFCD0 +ENCODING 64720 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 3 +BITMAP +24 +0A +1C +20 +78 +0C +F0 +ENDCHAR +STARTCHAR uniFCD1 +ENCODING 64721 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 3 +BITMAP +04 +0A +1E +20 +20 +F0 +ENDCHAR +STARTCHAR uniFCD2 +ENCODING 64722 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 0 0 +BITMAP +04 +00 +00 +0C +14 +20 +78 +0C +F0 +00 +00 +20 +ENDCHAR +STARTCHAR uniFCD3 +ENCODING 64723 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 3 +BITMAP +04 +00 +00 +0C +14 +20 +78 +0C +F0 +ENDCHAR +STARTCHAR uniFCD4 +ENCODING 64724 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 3 +BITMAP +04 +00 +20 +0C +14 +20 +78 +0C +F0 +ENDCHAR +STARTCHAR uniFCD5 +ENCODING 64725 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +04 +00 +00 +06 +08 +10 +10 +F8 +ENDCHAR +STARTCHAR uniFCD6 +ENCODING 64726 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 -1 +BITMAP +04 +00 +26 +6A +E8 +28 +24 +14 +0C +ENDCHAR +STARTCHAR uniFCD7 +ENCODING 64727 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 2 +BITMAP +3C +12 +29 +29 +3E +40 +7E +18 +60 +80 +10 +ENDCHAR +STARTCHAR uniFCD8 +ENCODING 64728 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 1 +BITMAP +3C +12 +29 +29 +1E +08 +10 +20 +40 +E0 +50 +20 +ENDCHAR +STARTCHAR uniFCD9 +ENCODING 64729 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 3 +BITMAP +20 +20 +00 +78 +24 +52 +52 +3C +20 +40 +80 +ENDCHAR +STARTCHAR uniFCDA +ENCODING 64730 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +0C +14 +20 +78 +0C +F0 +00 +0A +20 +ENDCHAR +STARTCHAR uniFCDB +ENCODING 64731 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 1 +BITMAP +0C +14 +20 +78 +0C +F0 +00 +0A +ENDCHAR +STARTCHAR uniFCDC +ENCODING 64732 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 1 +BITMAP +20 +0C +14 +20 +78 +0C +F0 +00 +0A +ENDCHAR +STARTCHAR uniFCDD +ENCODING 64733 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +06 +08 +10 +10 +F8 +00 +0A +ENDCHAR +STARTCHAR uniFCDE +ENCODING 64734 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -1 +BITMAP +0C +12 +50 +D5 +50 +48 +28 +18 +ENDCHAR +STARTCHAR uniFCDF +ENCODING 64735 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 3 +BITMAP +0C +10 +0C +30 +00 +10 +28 +24 +D3 +ENDCHAR +STARTCHAR uniFCE0 +ENCODING 64736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -1 +BITMAP +06 +08 +06 +18 +00 +24 +6A +E9 +28 +24 +14 +0C +ENDCHAR +STARTCHAR uniFCE1 +ENCODING 64737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 1 +BITMAP +10 +28 +24 +D3 +00 +08 +ENDCHAR +STARTCHAR uniFCE2 +ENCODING 64738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 -1 +BITMAP +24 +6A +E9 +28 +25 +14 +0C +ENDCHAR +STARTCHAR uniFCE3 +ENCODING 64739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 3 +BITMAP +14 +00 +10 +28 +24 +D3 +ENDCHAR +STARTCHAR uniFCE4 +ENCODING 64740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -1 +BITMAP +14 +00 +00 +24 +6A +E9 +28 +24 +14 +0C +ENDCHAR +STARTCHAR uniFCE5 +ENCODING 64741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +08 +00 +14 +00 +10 +28 +24 +D3 +ENDCHAR +STARTCHAR uniFCE6 +ENCODING 64742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -1 +BITMAP +08 +00 +14 +00 +00 +24 +6A +E9 +28 +24 +14 +0C +ENDCHAR +STARTCHAR uniFCE7 +ENCODING 64743 +BBX 16 4 0 3 +BITMAP +1800 +2412 +2212 +D1ED +ENDCHAR +STARTCHAR uniFCE8 +ENCODING 64744 +BBX 16 7 0 -1 +BITMAP +2612 +6912 +E8ED +2800 +2400 +1400 +0C00 +ENDCHAR +STARTCHAR uniFCE9 +ENCODING 64745 +BBX 16 8 0 3 +BITMAP +0010 +0000 +0028 +0000 +1800 +2412 +2212 +D1ED +ENDCHAR +STARTCHAR uniFCEA +ENCODING 64746 +BBX 16 12 0 -1 +BITMAP +0010 +0000 +0028 +0000 +0000 +2412 +6A12 +E9ED +2800 +2400 +1400 +0C00 +ENDCHAR +STARTCHAR uniFCEB +ENCODING 64747 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +02 +44 +48 +50 +60 +70 +48 +4C +4A +B1 +ENDCHAR +STARTCHAR uniFCEC +ENCODING 64748 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 1 +BITMAP +04 +08 +10 +20 +40 +20 +10 +18 +24 +F3 +28 +10 +ENDCHAR +STARTCHAR uniFCED +ENCODING 64749 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 1 +BITMAP +08 +08 +08 +08 +08 +08 +18 +24 +F3 +28 +10 +ENDCHAR +STARTCHAR uniFCEE +ENCODING 64750 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 3 +BITMAP +10 +00 +00 +10 +28 +24 +D3 +ENDCHAR +STARTCHAR uniFCEF +ENCODING 64751 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -1 +BITMAP +08 +00 +00 +0C +12 +52 +D1 +50 +48 +28 +18 +ENDCHAR +STARTCHAR uniFCF0 +ENCODING 64752 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 1 +BITMAP +10 +28 +24 +D3 +00 +0A +ENDCHAR +STARTCHAR uniFCF1 +ENCODING 64753 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 -1 +BITMAP +08 +56 +D1 +50 +48 +2B +18 +ENDCHAR +STARTCHAR uniFCF2 +ENCODING 64754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +0C +30 +02 +2A +14 +00 +00 +00 +00 +FF +ENDCHAR +STARTCHAR uniFCF3 +ENCODING 64755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 3 +BITMAP +04 +0A +04 +0A +30 +02 +2A +14 +00 +00 +FF +ENDCHAR +STARTCHAR uniFCF4 +ENCODING 64756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +0A +54 +20 +0C +30 +00 +00 +00 +00 +FF +ENDCHAR +STARTCHAR uniFCF5 +ENCODING 64757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +1C +12 +1C +90 +88 +84 +78 +ENDCHAR +STARTCHAR uniFCF6 +ENCODING 64758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +10 +10 +10 +1C +12 +1C +90 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFCF7 +ENCODING 64759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +0C +10 +0C +90 +88 +84 +78 +ENDCHAR +STARTCHAR uniFCF8 +ENCODING 64760 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +0C +10 +0C +90 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFCF9 +ENCODING 64761 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +10 +00 +0C +10 +0C +90 +88 +84 +78 +ENDCHAR +STARTCHAR uniFCFA +ENCODING 64762 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +10 +00 +0C +10 +0C +90 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFCFB +ENCODING 64763 +BBX 14 7 1 0 +BITMAP +0C24 +1224 +11D8 +9000 +8800 +8400 +7800 +ENDCHAR +STARTCHAR uniFCFC +ENCODING 64764 +BBX 14 9 1 -2 +BITMAP +0C24 +1224 +11D8 +9000 +8800 +8400 +7800 +0000 +5000 +ENDCHAR +STARTCHAR uniFCFD +ENCODING 64765 +BBX 14 12 1 0 +BITMAP +0020 +0000 +0050 +0000 +0000 +0C24 +1224 +11D8 +9000 +8800 +8400 +7800 +ENDCHAR +STARTCHAR uniFCFE +ENCODING 64766 +BBX 14 14 1 -2 +BITMAP +0020 +0000 +0050 +0000 +0000 +0C24 +1224 +11D8 +9000 +8800 +8400 +7800 +0000 +5000 +ENDCHAR +STARTCHAR uniFCFF +ENCODING 64767 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C0 +B0 +08 +1C +20 +70 +10 +88 +84 +78 +ENDCHAR +STARTCHAR uniFD00 +ENCODING 64768 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +C0 +B0 +08 +1C +70 +10 +10 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFD01 +ENCODING 64769 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C0 +B0 +08 +1C +70 +12 +10 +88 +84 +78 +ENDCHAR +STARTCHAR uniFD02 +ENCODING 64770 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +C0 +B0 +08 +1C +70 +12 +10 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFD03 +ENCODING 64771 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +08 +C0 +B0 +08 +1C +70 +10 +10 +88 +84 +78 +ENDCHAR +STARTCHAR uniFD04 +ENCODING 64772 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +04 +C0 +B0 +08 +1C +70 +10 +10 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFD05 +ENCODING 64773 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +04 +0A +0A +3C +28 +20 +10 +88 +84 +78 +ENDCHAR +STARTCHAR uniFD06 +ENCODING 64774 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +04 +0A +0A +3C +28 +20 +10 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFD07 +ENCODING 64775 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +04 +0A +0A +3C +28 +20 +10 +88 +84 +78 +ENDCHAR +STARTCHAR uniFD08 +ENCODING 64776 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +10 +04 +0A +0A +3C +28 +20 +10 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFD09 +ENCODING 64777 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +08 +00 +14 +00 +4A +B4 +80 +FC +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uniFD0A +ENCODING 64778 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +08 +00 +14 +00 +4A +B4 +80 +FC +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFD0B +ENCODING 64779 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -2 +BITMAP +04 +00 +0A +80 +25 +5A +40 +7E +20 +40 +40 +40 +22 +1C +ENDCHAR +STARTCHAR uniFD0C +ENCODING 64780 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -2 +BITMAP +08 +00 +14 +00 +4A +B4 +80 +C0 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFD0D +ENCODING 64781 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -1 +BITMAP +04 +00 +0A +00 +15 +2A +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uniFD0E +ENCODING 64782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -1 +BITMAP +15 +2A +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uniFD0F +ENCODING 64783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -1 +BITMAP +02 +05 +0D +16 +24 +24 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uniFD10 +ENCODING 64784 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -1 +BITMAP +08 +02 +05 +0D +16 +24 +24 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uniFD11 +ENCODING 64785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +1C +12 +1C +92 +88 +84 +78 +ENDCHAR +STARTCHAR uniFD12 +ENCODING 64786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +10 +10 +10 +1C +12 +1C +92 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFD13 +ENCODING 64787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +04 +0A +0C +92 +88 +84 +78 +ENDCHAR +STARTCHAR uniFD14 +ENCODING 64788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -2 +BITMAP +04 +0A +0C +92 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFD15 +ENCODING 64789 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +08 +00 +04 +0A +0C +92 +88 +84 +78 +ENDCHAR +STARTCHAR uniFD16 +ENCODING 64790 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +08 +00 +04 +0A +0C +92 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFD17 +ENCODING 64791 +BBX 15 6 1 0 +BITMAP +0C24 +1224 +91DA +8800 +8400 +7800 +ENDCHAR +STARTCHAR uniFD18 +ENCODING 64792 +BBX 15 8 1 -2 +BITMAP +0C24 +1224 +91DA +8800 +8400 +7800 +0000 +5000 +ENDCHAR +STARTCHAR uniFD19 +ENCODING 64793 +BBX 15 11 1 0 +BITMAP +0020 +0000 +0050 +0000 +0000 +0C24 +1224 +91DA +8800 +8400 +7800 +ENDCHAR +STARTCHAR uniFD1A +ENCODING 64794 +BBX 15 13 1 -2 +BITMAP +0020 +0000 +0050 +0000 +0000 +0C24 +1224 +91DA +8800 +8400 +7800 +0000 +5000 +ENDCHAR +STARTCHAR uniFD1B +ENCODING 64795 +BBX 15 6 1 0 +BITMAP +0CE0 +1218 +11FE +8800 +8400 +7800 +ENDCHAR +STARTCHAR uniFD1C +ENCODING 64796 +BBX 15 8 1 -2 +BITMAP +0CE0 +1218 +11FE +8800 +8400 +7800 +0000 +5000 +ENDCHAR +STARTCHAR uniFD1D +ENCODING 64797 +BBX 15 6 1 0 +BITMAP +0CE0 +1218 +11FE +8800 +8440 +7800 +ENDCHAR +STARTCHAR uniFD1E +ENCODING 64798 +BBX 15 8 1 -2 +BITMAP +0CE0 +1218 +11FE +8800 +8440 +7800 +0000 +5000 +ENDCHAR +STARTCHAR uniFD1F +ENCODING 64799 +BBX 15 8 1 0 +BITMAP +0080 +0000 +0CE0 +1218 +11FE +8800 +8400 +7800 +ENDCHAR +STARTCHAR uniFD20 +ENCODING 64800 +BBX 15 10 1 -2 +BITMAP +0040 +0000 +0CE0 +1218 +11FE +8800 +8400 +7800 +0000 +5000 +ENDCHAR +STARTCHAR uniFD21 +ENCODING 64801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +04 +0A +0A +3E +29 +20 +90 +88 +70 +ENDCHAR +STARTCHAR uniFD22 +ENCODING 64802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -2 +BITMAP +04 +0A +0A +3E +29 +20 +90 +88 +70 +00 +50 +ENDCHAR +STARTCHAR uniFD23 +ENCODING 64803 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +10 +04 +0A +0A +3E +29 +20 +90 +88 +70 +ENDCHAR +STARTCHAR uniFD24 +ENCODING 64804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +10 +04 +0A +0A +3E +29 +20 +90 +88 +70 +00 +50 +ENDCHAR +STARTCHAR uniFD25 +ENCODING 64805 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +10 +00 +28 +00 +54 +AA +81 +FC +40 +90 +44 +38 +ENDCHAR +STARTCHAR uniFD26 +ENCODING 64806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +10 +00 +28 +00 +54 +AA +81 +FC +40 +80 +44 +38 +ENDCHAR +STARTCHAR uniFD27 +ENCODING 64807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +10 +00 +A8 +00 +54 +AA +81 +FC +40 +80 +44 +38 +ENDCHAR +STARTCHAR uniFD28 +ENCODING 64808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +08 +00 +14 +00 +4A +B5 +80 +C0 +70 +80 +80 +80 +ENDCHAR +STARTCHAR uniFD29 +ENCODING 64809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +04 +00 +0A +00 +15 +2A +20 +20 +40 +80 +ENDCHAR +STARTCHAR uniFD2A +ENCODING 64810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 -2 +BITMAP +15 +2A +20 +20 +40 +80 +ENDCHAR +STARTCHAR uniFD2B +ENCODING 64811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -1 +BITMAP +02 +05 +0D +16 +24 +24 +40 +80 +ENDCHAR +STARTCHAR uniFD2C +ENCODING 64812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 -1 +BITMAP +12 +05 +0D +16 +24 +24 +40 +80 +ENDCHAR +STARTCHAR uniFD2D +ENCODING 64813 +BBX 14 12 0 2 +BITMAP +0020 +0000 +0050 +0400 +0A24 +11D8 +2000 +7F80 +1800 +6000 +8000 +0800 +ENDCHAR +STARTCHAR uniFD2E +ENCODING 64814 +BBX 14 11 0 3 +BITMAP +0020 +0000 +0050 +0400 +0A24 +11D8 +2000 +7F80 +1800 +6000 +8000 +ENDCHAR +STARTCHAR uniFD2F +ENCODING 64815 +BBX 14 11 0 3 +BITMAP +0020 +0000 +0050 +2400 +0A24 +11D8 +2000 +7F80 +1800 +6000 +8000 +ENDCHAR +STARTCHAR uniFD30 +ENCODING 64816 +BBX 14 9 0 3 +BITMAP +0020 +0000 +0050 +0400 +0A24 +11D8 +2000 +7000 +8800 +ENDCHAR +STARTCHAR uniFD31 +ENCODING 64817 +BBX 14 8 0 -1 +BITMAP +0024 +23D8 +6400 +E800 +2800 +2400 +1400 +0C00 +ENDCHAR +STARTCHAR uniFD32 +ENCODING 64818 +BBX 14 12 0 -1 +BITMAP +0020 +0000 +0050 +0000 +0024 +23D8 +6400 +E800 +2800 +2400 +1400 +0C00 +ENDCHAR +STARTCHAR uniFD33 +ENCODING 64819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 2 +BITMAP +10 +10 +10 +16 +19 +1E +20 +D0 +20 +ENDCHAR +STARTCHAR uniFD34 +ENCODING 64820 +BBX 16 6 0 1 +BITMAP +1000 +2892 +0492 +FFED +0000 +1000 +ENDCHAR +STARTCHAR uniFD35 +ENCODING 64821 +BBX 16 4 0 3 +BITMAP +1000 +2892 +0492 +FFED +ENDCHAR +STARTCHAR uniFD36 +ENCODING 64822 +BBX 16 6 0 3 +BITMAP +1000 +0000 +1000 +2892 +0492 +FFED +ENDCHAR +STARTCHAR uniFD37 +ENCODING 64823 +BBX 16 9 0 1 +BITMAP +0010 +0000 +0028 +1000 +2892 +0492 +FFED +0000 +1000 +ENDCHAR +STARTCHAR uniFD38 +ENCODING 64824 +BBX 16 7 0 3 +BITMAP +0010 +0000 +0028 +1000 +2892 +0492 +FFED +ENDCHAR +STARTCHAR uniFD39 +ENCODING 64825 +BBX 16 7 0 3 +BITMAP +0010 +1000 +0028 +1000 +2892 +0492 +FFED +ENDCHAR +STARTCHAR uniFD3A +ENCODING 64826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 2 +BITMAP +10 +10 +10 +16 +19 +1E +22 +D1 +20 +ENDCHAR +STARTCHAR uniFD3B +ENCODING 64827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 2 +BITMAP +10 +12 +10 +16 +19 +1E +22 +D1 +20 +ENDCHAR +STARTCHAR uniFD3C +ENCODING 64828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 3 3 +BITMAP +08 +10 +20 +88 +90 +A0 +80 +80 +80 +80 +78 +ENDCHAR +STARTCHAR uniFD3D +ENCODING 64829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 3 3 +BITMAP +08 +10 +20 +88 +90 +A0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFD3E +ENCODING 64830 +BBX 14 15 1 -2 +BITMAP +00FC +0318 +0460 +0980 +1E00 +1400 +6B00 +D580 +6B00 +1400 +1E00 +0980 +0460 +0318 +00FC +ENDCHAR +STARTCHAR uniFD3F +ENCODING 64831 +BBX 14 15 1 -2 +BITMAP +FC00 +6300 +1880 +0640 +01E0 +00A0 +0358 +06AC +0358 +00A0 +01E0 +0640 +1880 +6300 +FC00 +ENDCHAR +STARTCHAR uniFD40 +ENCODING 64832 +BBX 14 13 1 0 +BITMAP +1248 +3248 +5248 +3248 +0D88 +0000 +0000 +2180 +6048 +A3E4 +6504 +1B48 +0030 +ENDCHAR +STARTCHAR uniFD41 +ENCODING 64833 +BBX 15 16 1 -2 +BITMAP +1240 +3248 +5248 +3248 +0D88 +2008 +6468 +A080 +67D0 +1800 +0070 +0C88 +93F2 +9004 +8848 +7030 +ENDCHAR +STARTCHAR uniFD42 +ENCODING 64834 +BBX 15 16 1 -2 +BITMAP +1248 +3248 +5248 +3248 +8D88 +A000 +9A18 +A8A0 +71F0 +0E04 +0070 +0C88 +93F2 +9004 +8848 +7030 +ENDCHAR +STARTCHAR uniFD43 +ENCODING 64835 +BBX 16 16 0 -2 +BITMAP +0924 +1924 +2924 +1924 +06C4 +1000 +0D0C +1450 +38F8 +E702 +8038 +8644 +09F9 +4802 +4424 +3818 +ENDCHAR +STARTCHAR uniFD44 +ENCODING 64836 +BBX 15 16 1 -2 +BITMAP +1248 +3248 +5248 +3248 +8D88 +A000 +9A18 +A8A0 +B1F0 +6E04 +2070 +0C88 +93F2 +9004 +8848 +7030 +ENDCHAR +STARTCHAR uniFD45 +ENCODING 64837 +BBX 16 16 0 -2 +BITMAP +0924 +1924 +2924 +1924 +06C0 +1006 +4C88 +0A2E +9CF0 +9302 +6038 +0644 +49F9 +4802 +4424 +3818 +ENDCHAR +STARTCHAR uniFD46 +ENCODING 64838 +BBX 16 16 0 -2 +BITMAP +2AA0 +6AA0 +AAAA +6A2D +1456 +80C0 +8028 +7FC8 +0009 +202A +5FD7 +8004 +024A +0246 +3242 +4C4C +ENDCHAR +STARTCHAR uniFD47 +ENCODING 64839 +BBX 14 15 1 -2 +BITMAP +0300 +0180 +1214 +9214 +5054 +3554 +2FA4 +C000 +1040 +3040 +504C +3250 +0DBC +0000 +0500 +ENDCHAR +STARTCHAR uniFD48 +ENCODING 64840 +BBX 14 14 1 -1 +BITMAP +0300 +0194 +1214 +9214 +5054 +3564 +2F84 +C020 +0020 +0C24 +D4A8 +7F5C +9400 +8D40 +ENDCHAR +STARTCHAR uniFD49 +ENCODING 64841 +BBX 14 14 1 -1 +BITMAP +0300 +0194 +9214 +5214 +3054 +3564 +CF84 +8020 +8020 +8024 +B4A8 +7D5C +0600 +04A0 +ENDCHAR +STARTCHAR uniFD4A +ENCODING 64842 +BBX 16 16 0 -2 +BITMAP +21A8 +A7AB +A02B +6AA1 +5F46 +8000 +140A +4D4A +A5AA +E572 +0A02 +1020 +0026 +1928 +26DE +4000 +ENDCHAR +STARTCHAR uniFD4B +ENCODING 64843 +BBX 15 13 0 -1 +BITMAP +2002 +312A +49FC +7900 +0200 +2400 +1814 +0200 +2A8C +BC4A +9026 +9222 +63FC +ENDCHAR +STARTCHAR uniFD4C +ENCODING 64844 +BBX 16 16 0 -2 +BITMAP +2AA0 +6AAA +AA35 +7446 +0120 +14C4 +5404 +D645 +22D6 +0C6F +0000 +0452 +0405 +2553 +5BE1 +A006 +ENDCHAR +STARTCHAR uniFD4D +ENCODING 64845 +BBX 14 15 1 -2 +BITMAP +0300 +0180 +9214 +5214 +3054 +3554 +CFA4 +0000 +8040 +8040 +8C4C +9550 +7EBC +1400 +0D40 +ENDCHAR +STARTCHAR uniFD4E +ENCODING 64846 +BBX 16 16 0 -2 +BITMAP +0040 +0040 +13C0 +4E00 +40A4 +4C0A +4446 +3B82 +000C +2880 +4885 +2880 +8A92 +726C +0200 +0C10 +ENDCHAR +STARTCHAR uniFD4F +ENCODING 64847 +BBX 14 14 1 -1 +BITMAP +1248 +3248 +5248 +3248 +0D88 +0000 +00C0 +0020 +00F4 +0944 +7AC4 +EA08 +8430 +8000 +ENDCHAR +STARTCHAR uniFD50 +ENCODING 64848 +BBX 14 7 0 1 +BITMAP +0028 +0200 +0504 +0084 +FFFC +5000 +2100 +ENDCHAR +STARTCHAR uniFD51 +ENCODING 64849 +BBX 14 10 2 -2 +BITMAP +0050 +4200 +A508 +1088 +2FFC +4000 +9000 +8000 +4800 +3000 +ENDCHAR +STARTCHAR uniFD52 +ENCODING 64850 +BBX 14 7 0 1 +BITMAP +0028 +2100 +5284 +0844 +FFFC +0000 +2000 +ENDCHAR +STARTCHAR uniFD53 +ENCODING 64851 +BBX 14 7 0 1 +BITMAP +0028 +0200 +0504 +0084 +FFFC +5000 +2000 +ENDCHAR +STARTCHAR uniFD54 +ENCODING 64852 +BBX 14 8 0 1 +BITMAP +0200 +0028 +0200 +0504 +0084 +FFFC +2800 +1000 +ENDCHAR +STARTCHAR uniFD55 +ENCODING 64853 +BBX 14 7 0 1 +BITMAP +0028 +2000 +5004 +0804 +FFFC +0280 +2100 +ENDCHAR +STARTCHAR uniFD56 +ENCODING 64854 +BBX 14 7 0 1 +BITMAP +0028 +2000 +5004 +0804 +FFFC +0280 +0100 +ENDCHAR +STARTCHAR uniFD57 +ENCODING 64855 +BBX 14 7 0 1 +BITMAP +0028 +2000 +5004 +0804 +FFFC +0280 +2100 +ENDCHAR +STARTCHAR uniFD58 +ENCODING 64856 +BBX 15 9 1 -2 +BITMAP +4010 +A028 +1004 +2FFE +4280 +8110 +8000 +4800 +3000 +ENDCHAR +STARTCHAR uniFD59 +ENCODING 64857 +BBX 14 6 0 1 +BITMAP +2010 +5028 +0804 +FFFC +0280 +0110 +ENDCHAR +STARTCHAR uniFD5A +ENCODING 64858 +BBX 15 9 1 -2 +BITMAP +0010 +9028 +A804 +A7FE +9140 +8880 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFD5B +ENCODING 64859 +BBX 15 7 1 0 +BITMAP +0010 +9028 +A804 +A7FE +9140 +8880 +7000 +ENDCHAR +STARTCHAR uniFD5C +ENCODING 64860 +BBX 16 6 0 1 +BITMAP +2100 +5295 +0855 +FFFF +0000 +2000 +ENDCHAR +STARTCHAR uniFD5D +ENCODING 64861 +BBX 16 6 0 1 +BITMAP +2100 +5295 +0855 +FFFF +0000 +0100 +ENDCHAR +STARTCHAR uniFD5E +ENCODING 64862 +BBX 16 7 0 0 +BITMAP +0100 +9295 +A855 +A7FF +9000 +8900 +7000 +ENDCHAR +STARTCHAR uniFD5F +ENCODING 64863 +BBX 16 9 0 -2 +BITMAP +4000 +A02A +102A +2FFF +4500 +8200 +8000 +4800 +3000 +ENDCHAR +STARTCHAR uniFD60 +ENCODING 64864 +BBX 15 6 0 1 +BITMAP +2000 +502A +082A +FFFE +0280 +0100 +ENDCHAR +STARTCHAR uniFD61 +ENCODING 64865 +BBX 15 6 0 1 +BITMAP +2000 +502A +082A +FFFE +0280 +2100 +ENDCHAR +STARTCHAR uniFD62 +ENCODING 64866 +BBX 15 8 1 -1 +BITMAP +4000 +A054 +1054 +FFFE +8500 +8200 +8000 +8000 +ENDCHAR +STARTCHAR uniFD63 +ENCODING 64867 +BBX 15 5 0 1 +BITMAP +002A +002A +FFFE +2A80 +1100 +ENDCHAR +STARTCHAR uniFD64 +ENCODING 64868 +BBX 16 9 0 -2 +BITMAP +4204 +A52A +10AA +2FD7 +4000 +8000 +8000 +4800 +3000 +ENDCHAR +STARTCHAR uniFD65 +ENCODING 64869 +BBX 16 4 0 3 +BITMAP +2102 +5295 +0855 +FFEE +ENDCHAR +STARTCHAR uniFD66 +ENCODING 64870 +BBX 15 8 1 -1 +BITMAP +4008 +A054 +1054 +FFAE +8500 +8200 +8000 +8000 +ENDCHAR +STARTCHAR uniFD67 +ENCODING 64871 +BBX 16 11 0 -1 +BITMAP +0008 +0000 +0014 +4200 +A52A +10AA +FFFF +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniFD68 +ENCODING 64872 +BBX 15 9 0 1 +BITMAP +0008 +0000 +0014 +0200 +052A +00AA +FFFE +2800 +1000 +ENDCHAR +STARTCHAR uniFD69 +ENCODING 64873 +BBX 16 12 0 -2 +BITMAP +0004 +0000 +000A +0100 +9295 +A855 +A7FF +9000 +8900 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFD6A +ENCODING 64874 +BBX 15 12 1 -2 +BITMAP +0010 +4000 +0028 +4000 +A054 +1054 +2FFE +4500 +8200 +8000 +4800 +3000 +ENDCHAR +STARTCHAR uniFD6B +ENCODING 64875 +BBX 15 9 0 1 +BITMAP +0008 +2000 +0014 +2000 +502A +082A +FFFE +0280 +0100 +ENDCHAR +STARTCHAR uniFD6C +ENCODING 64876 +BBX 15 11 1 -1 +BITMAP +0010 +0000 +0028 +4000 +A054 +1054 +FFFE +8500 +8200 +8000 +8000 +ENDCHAR +STARTCHAR uniFD6D +ENCODING 64877 +BBX 15 9 0 1 +BITMAP +0008 +0000 +0014 +0000 +002A +002A +FFFE +2A80 +1100 +ENDCHAR +STARTCHAR uniFD6E +ENCODING 64878 +BBX 16 9 0 0 +BITMAP +0002 +0000 +0102 +9295 +A855 +A7EB +9000 +8800 +7000 +ENDCHAR +STARTCHAR uniFD6F +ENCODING 64879 +BBX 16 10 0 -1 +BITMAP +0004 +0000 +4204 +A52A +10AA +FFD7 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniFD70 +ENCODING 64880 +BBX 15 8 0 1 +BITMAP +0204 +0000 +0204 +052A +00AA +FFD4 +2800 +1000 +ENDCHAR +STARTCHAR uniFD71 +ENCODING 64881 +BBX 15 11 1 -2 +BITMAP +0040 +0040 +4040 +A058 +1064 +2FFE +4500 +8200 +8000 +4800 +3000 +ENDCHAR +STARTCHAR uniFD72 +ENCODING 64882 +BBX 15 8 0 1 +BITMAP +0020 +0020 +2020 +502C +0832 +FFFC +0280 +0100 +ENDCHAR +STARTCHAR uniFD73 +ENCODING 64883 +BBX 15 8 0 1 +BITMAP +0020 +0020 +0020 +002C +0032 +FFFC +2A80 +1100 +ENDCHAR +STARTCHAR uniFD74 +ENCODING 64884 +BBX 16 11 0 -2 +BITMAP +0020 +0020 +0020 +902C +A832 +A7FF +9280 +8900 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFD75 +ENCODING 64885 +BBX 15 8 1 -1 +BITMAP +423C +A524 +1098 +FFE6 +8000 +8200 +8000 +8000 +ENDCHAR +STARTCHAR uniFD76 +ENCODING 64886 +BBX 14 8 2 -1 +BITMAP +4078 +A048 +1030 +FFCC +8500 +8200 +8000 +8000 +ENDCHAR +STARTCHAR uniFD77 +ENCODING 64887 +BBX 15 5 0 1 +BITMAP +000C +0010 +FFFE +5280 +2100 +ENDCHAR +STARTCHAR uniFD78 +ENCODING 64888 +BBX 16 7 0 0 +BITMAP +001E +9012 +A80C +A7F3 +9140 +8880 +7000 +ENDCHAR +STARTCHAR uniFD79 +ENCODING 64889 +BBX 14 10 2 -1 +BITMAP +0020 +0000 +4078 +A048 +1030 +FFCC +8500 +8200 +8000 +8000 +ENDCHAR +STARTCHAR uniFD7A +ENCODING 64890 +BBX 16 11 0 -2 +BITMAP +0008 +0000 +001E +9012 +A80C +A7F3 +9140 +8880 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFD7B +ENCODING 64891 +BBX 16 9 0 0 +BITMAP +0008 +0000 +001E +9012 +A80C +A7F3 +9140 +8880 +7000 +ENDCHAR +STARTCHAR uniFD7C +ENCODING 64892 +BBX 15 10 1 -1 +BITMAP +0210 +0000 +4210 +A528 +10A8 +FFDE +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniFD7D +ENCODING 64893 +BBX 14 9 0 1 +BITMAP +0008 +0100 +0008 +0114 +028C +0044 +FFFC +2800 +1000 +ENDCHAR +STARTCHAR uniFD7E +ENCODING 64894 +BBX 15 11 1 -2 +BITMAP +0014 +0000 +4008 +A014 +1014 +2FEE +4280 +8100 +8000 +4800 +3000 +ENDCHAR +STARTCHAR uniFD7F +ENCODING 64895 +BBX 15 10 1 -1 +BITMAP +0028 +0000 +4010 +A028 +1028 +FFDE +8500 +8200 +8000 +8000 +ENDCHAR +STARTCHAR uniFD80 +ENCODING 64896 +BBX 13 10 3 -1 +BITMAP +0010 +0010 +4210 +A510 +1090 +FFE8 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniFD81 +ENCODING 64897 +BBX 14 11 2 -2 +BITMAP +0008 +0008 +0108 +9288 +A848 +A7F4 +9000 +8800 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFD82 +ENCODING 64898 +BBX 14 9 2 0 +BITMAP +0008 +0008 +0108 +9288 +A848 +A7F4 +9000 +8800 +7000 +ENDCHAR +STARTCHAR uniFD83 +ENCODING 64899 +BBX 13 8 0 1 +BITMAP +0008 +0008 +2108 +5288 +0848 +FFF0 +0000 +2100 +ENDCHAR +STARTCHAR uniFD84 +ENCODING 64900 +BBX 15 11 1 -2 +BITMAP +0004 +0004 +4104 +A284 +1044 +2FFA +4000 +9100 +8000 +4800 +3000 +ENDCHAR +STARTCHAR uniFD85 +ENCODING 64901 +BBX 15 10 1 -1 +BITMAP +0104 +0004 +4104 +A284 +1044 +FFFA +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniFD86 +ENCODING 64902 +BBX 14 8 0 1 +BITMAP +0104 +0004 +0104 +0284 +0044 +FFF8 +2800 +1000 +ENDCHAR +STARTCHAR uniFD87 +ENCODING 64903 +BBX 14 11 2 -2 +BITMAP +0008 +0008 +4008 +A008 +1008 +2FF4 +4280 +8100 +8000 +4800 +3000 +ENDCHAR +STARTCHAR uniFD88 +ENCODING 64904 +BBX 13 8 0 1 +BITMAP +0008 +0008 +2008 +5008 +0808 +FFF0 +0280 +0100 +ENDCHAR +STARTCHAR uniFD89 +ENCODING 64905 +BBX 14 6 0 1 +BITMAP +2100 +5280 +0848 +FFF4 +0014 +2008 +ENDCHAR +STARTCHAR uniFD8A +ENCODING 64906 +BBX 14 6 0 1 +BITMAP +0200 +0500 +0088 +FFF4 +5014 +2008 +ENDCHAR +STARTCHAR uniFD8B +ENCODING 64907 +BBX 16 9 0 -2 +BITMAP +0100 +9280 +A840 +A7FF +9014 +8808 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFD8C +ENCODING 64908 +BBX 14 6 0 1 +BITMAP +2100 +5280 +0848 +FFF4 +0014 +0108 +ENDCHAR +STARTCHAR uniFD8D +ENCODING 64909 +BBX 14 6 0 1 +BITMAP +0100 +0280 +0048 +FFF4 +2814 +1108 +ENDCHAR +STARTCHAR uniFD8E +ENCODING 64910 +BBX 14 8 0 1 +BITMAP +0100 +0000 +2100 +5280 +0848 +FFF4 +0014 +2008 +ENDCHAR +STARTCHAR uniFD8F +ENCODING 64911 +BBX 14 8 0 1 +BITMAP +0100 +0000 +0100 +0280 +0048 +FFF4 +2814 +1008 +ENDCHAR +STARTCHAR uniFD92 +ENCODING 64914 +BBX 14 8 0 1 +BITMAP +2000 +0000 +2100 +5280 +0848 +FFF4 +0014 +0108 +ENDCHAR +STARTCHAR uniFD93 +ENCODING 64915 +BBX 15 8 0 1 +BITMAP +0018 +0004 +2012 +502A +082A +FFDC +0280 +2100 +ENDCHAR +STARTCHAR uniFD94 +ENCODING 64916 +BBX 15 8 0 1 +BITMAP +0018 +0004 +0012 +002A +002A +FFDC +2A80 +1100 +ENDCHAR +STARTCHAR uniFD95 +ENCODING 64917 +BBX 13 7 0 1 +BITMAP +0008 +0100 +0288 +0048 +FFF0 +2800 +1000 +ENDCHAR +STARTCHAR uniFD96 +ENCODING 64918 +BBX 15 8 1 0 +BITMAP +0008 +0100 +9288 +A848 +A7F6 +9000 +8800 +7000 +ENDCHAR +STARTCHAR uniFD97 +ENCODING 64919 +BBX 15 9 1 -1 +BITMAP +0008 +4100 +A288 +1048 +FFF6 +8000 +8100 +8000 +8000 +ENDCHAR +STARTCHAR uniFD98 +ENCODING 64920 +BBX 13 7 0 1 +BITMAP +0008 +0100 +0288 +0048 +FFF0 +2800 +1100 +ENDCHAR +STARTCHAR uniFD99 +ENCODING 64921 +BBX 16 8 0 0 +BITMAP +0004 +0080 +9144 +A824 +A7FB +9000 +8880 +7000 +ENDCHAR +STARTCHAR uniFD9A +ENCODING 64922 +BBX 15 10 1 -2 +BITMAP +0008 +0000 +9008 +A808 +A7F6 +9140 +8880 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFD9B +ENCODING 64923 +BBX 15 8 1 0 +BITMAP +0008 +0000 +9008 +A808 +A7F6 +9140 +8880 +7000 +ENDCHAR +STARTCHAR uniFD9C +ENCODING 64924 +BBX 13 8 3 -1 +BITMAP +4000 +A020 +1020 +FFD8 +8500 +8250 +8000 +8000 +ENDCHAR +STARTCHAR uniFD9D +ENCODING 64925 +BBX 15 5 0 1 +BITMAP +0002 +0002 +FFFC +2940 +1094 +ENDCHAR +STARTCHAR uniFD9E +ENCODING 64926 +BBX 16 11 0 -2 +BITMAP +0080 +0000 +0080 +9142 +A822 +A7FD +9000 +8804 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFD9F +ENCODING 64927 +BBX 16 10 0 -2 +BITMAP +000A +0080 +9142 +A822 +A7FD +9000 +8840 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDA0 +ENCODING 64928 +BBX 16 8 0 0 +BITMAP +000A +0080 +9142 +A822 +A7FD +9000 +8880 +7000 +ENDCHAR +STARTCHAR uniFDA1 +ENCODING 64929 +BBX 16 11 0 -2 +BITMAP +0080 +000A +0080 +9142 +A822 +A7FD +9000 +8800 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDA2 +ENCODING 64930 +BBX 16 9 0 0 +BITMAP +0080 +000A +0080 +9142 +A822 +A7FD +9000 +8800 +7000 +ENDCHAR +STARTCHAR uniFDA3 +ENCODING 64931 +BBX 15 10 1 -2 +BITMAP +0014 +0000 +9004 +A804 +A7FA +9140 +8880 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDA4 +ENCODING 64932 +BBX 15 8 1 0 +BITMAP +0014 +0000 +9004 +A804 +A7FA +9140 +8880 +7000 +ENDCHAR +STARTCHAR uniFDA5 +ENCODING 64933 +BBX 16 9 0 -2 +BITMAP +0008 +9014 +A802 +A7FF +9140 +8888 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDA6 +ENCODING 64934 +BBX 16 7 0 0 +BITMAP +0108 +9294 +A842 +A7FF +9000 +8808 +7000 +ENDCHAR +STARTCHAR uniFDA7 +ENCODING 64935 +BBX 16 7 0 0 +BITMAP +0008 +9014 +A802 +A7FF +9140 +8888 +7000 +ENDCHAR +STARTCHAR uniFDA8 +ENCODING 64936 +BBX 16 9 0 0 +BITMAP +0100 +0000 +0100 +9295 +A855 +A7FF +9000 +8800 +7000 +ENDCHAR +STARTCHAR uniFDA9 +ENCODING 64937 +BBX 16 9 0 -2 +BITMAP +0102 +9295 +A855 +A7EF +9000 +8800 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDAA +ENCODING 64938 +BBX 16 12 0 -2 +BITMAP +0004 +0000 +000A +0100 +9295 +A855 +A7FF +9000 +8800 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDAB +ENCODING 64939 +BBX 16 11 0 -2 +BITMAP +0002 +0000 +0102 +9295 +A855 +A7FF +9000 +8800 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDAC +ENCODING 64940 +BBX 15 11 1 -2 +BITMAP +0008 +0008 +0108 +9288 +A848 +A7F6 +9000 +8900 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDAD +ENCODING 64941 +BBX 15 11 1 -2 +BITMAP +0008 +0008 +0008 +9008 +A808 +A7F6 +9140 +8880 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDAE +ENCODING 64942 +BBX 15 9 1 -2 +BITMAP +0100 +9288 +A848 +A7F6 +9000 +8814 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDAF +ENCODING 64943 +BBX 15 9 1 -2 +BITMAP +0100 +9288 +A848 +A7F6 +9000 +8914 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDB0 +ENCODING 64944 +BBX 15 8 1 -2 +BITMAP +9008 +A808 +A7F6 +9140 +8894 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDB1 +ENCODING 64945 +BBX 15 8 1 -2 +BITMAP +9000 +A800 +A7FE +9154 +8888 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDB2 +ENCODING 64946 +BBX 15 11 1 -2 +BITMAP +0014 +0000 +0008 +9014 +A814 +A7EE +9140 +8880 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDB3 +ENCODING 64947 +BBX 15 10 1 -2 +BITMAP +0008 +0100 +9288 +A848 +A7F6 +9000 +8800 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDB4 +ENCODING 64948 +BBX 14 9 0 1 +BITMAP +0014 +0000 +0008 +2014 +500C +0804 +FFFC +0280 +0100 +ENDCHAR +STARTCHAR uniFDB5 +ENCODING 64949 +BBX 13 8 0 1 +BITMAP +0008 +0008 +0108 +0288 +0048 +FFF8 +2800 +1000 +ENDCHAR +STARTCHAR uniFDB6 +ENCODING 64950 +BBX 16 9 0 -2 +BITMAP +001E +9012 +A80C +A7F3 +9140 +8880 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDB7 +ENCODING 64951 +BBX 16 11 0 -2 +BITMAP +0006 +0018 +0020 +9018 +A80E +A7F1 +9280 +8900 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDB8 +ENCODING 64952 +BBX 13 7 0 1 +BITMAP +0008 +2100 +5288 +0848 +FFF8 +0000 +0100 +ENDCHAR +STARTCHAR uniFDB9 +ENCODING 64953 +BBX 16 11 0 -2 +BITMAP +0080 +0000 +0080 +9140 +A820 +A7FF +900A +8804 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDBA +ENCODING 64954 +BBX 13 8 0 1 +BITMAP +0008 +0008 +0108 +0288 +0048 +FFF8 +2800 +1100 +ENDCHAR +STARTCHAR uniFDBB +ENCODING 64955 +BBX 15 10 1 -1 +BITMAP +000C +0030 +4040 +A030 +101C +FFE2 +8500 +8200 +8000 +8000 +ENDCHAR +STARTCHAR uniFDBC +ENCODING 64956 +BBX 15 10 1 -1 +BITMAP +0008 +0008 +4108 +A288 +1048 +FFF6 +8000 +8100 +8000 +8000 +ENDCHAR +STARTCHAR uniFDBD +ENCODING 64957 +BBX 14 10 2 -2 +BITMAP +0008 +4100 +A288 +1048 +2FF4 +4000 +8100 +8000 +4800 +3000 +ENDCHAR +STARTCHAR uniFDBE +ENCODING 64958 +BBX 16 9 0 -2 +BITMAP +0108 +9294 +A842 +A7FF +9000 +8808 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDBF +ENCODING 64959 +BBX 16 9 0 -2 +BITMAP +0108 +9294 +A842 +A7FF +9000 +8900 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDC0 +ENCODING 64960 +BBX 16 9 0 -2 +BITMAP +0080 +9140 +A820 +A7FF +900A +8844 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDC1 +ENCODING 64961 +BBX 15 11 1 -2 +BITMAP +0008 +0000 +0008 +9014 +A814 +A7EE +9140 +8880 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDC2 +ENCODING 64962 +BBX 16 9 0 -2 +BITMAP +0080 +9142 +A822 +A7FF +9000 +8804 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDC3 +ENCODING 64963 +BBX 16 8 0 1 +BITMAP +0003 +000C +0010 +0008 +0004 +FFF8 +2940 +1080 +ENDCHAR +STARTCHAR uniFDC4 +ENCODING 64964 +BBX 16 6 0 1 +BITMAP +0100 +0286 +0048 +FFFF +2800 +1100 +ENDCHAR +STARTCHAR uniFDC5 +ENCODING 64965 +BBX 15 6 0 1 +BITMAP +0004 +002A +002A +FFDC +5500 +2200 +ENDCHAR +STARTCHAR uniFDC6 +ENCODING 64966 +BBX 16 11 0 -2 +BITMAP +0100 +0000 +0100 +9295 +A855 +A7FF +9000 +8800 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDC7 +ENCODING 64967 +BBX 16 10 0 -2 +BITMAP +0004 +0080 +9144 +A824 +A7FB +9000 +8880 +7000 +0000 +5000 +ENDCHAR +STARTCHAR uniFDCF +ENCODING 64975 +BBX 16 14 0 -1 +BITMAP +0040 +0240 +0141 +2CD5 +5CBE +8100 +0000 +4020 +4820 +4026 +4928 +36DE +0000 +0280 +ENDCHAR +STARTCHAR uniFDF0 +ENCODING 65008 +BBX 14 11 1 1 +BITMAP +0800 +0800 +0800 +0818 +0924 +0944 +16F8 +6040 +8000 +8000 +7FE0 +ENDCHAR +STARTCHAR uniFDF1 +ENCODING 65009 +BBX 11 11 2 1 +BITMAP +0940 +0800 +0880 +0940 +08C0 +0840 +1780 +6000 +8000 +8000 +7FE0 +ENDCHAR +STARTCHAR uniFDF2 +ENCODING 65010 +BBX 13 12 2 2 +BITMAP +0800 +0800 +0900 +0508 +1608 +1808 +0248 +2248 +6248 +A248 +6248 +3D80 +ENDCHAR +STARTCHAR uniFDF3 +ENCODING 65011 +BBX 13 12 1 1 +BITMAP +0018 +0060 +0188 +0208 +0208 +0188 +2448 +3C28 +2428 +23C8 +4800 +8000 +ENDCHAR +STARTCHAR uniFDF4 +ENCODING 65012 +BBX 12 16 2 -2 +BITMAP +1820 +6050 +0420 +5450 +2980 +0000 +0620 +1850 +00E0 +2300 +2400 +17F0 +9060 +6980 +0600 +0180 +ENDCHAR +STARTCHAR uniFDF5 +ENCODING 65013 +BBX 14 13 1 -1 +BITMAP +0800 +0800 +0800 +4818 +A924 +6944 +56F8 +8040 +7000 +2800 +5000 +4000 +4000 +ENDCHAR +STARTCHAR uniFDF6 +ENCODING 65014 +BBX 16 9 0 3 +BITMAP +1000 +1000 +1000 +1000 +9254 +9555 +63A9 +0102 +0E1C +ENDCHAR +STARTCHAR uniFDF7 +ENCODING 65015 +BBX 14 9 1 3 +BITMAP +0040 +0040 +2040 +6040 +A04C +6650 +19BC +0000 +0A00 +ENDCHAR +STARTCHAR uniFDF8 +ENCODING 65016 +BBX 14 13 1 -1 +BITMAP +2000 +2000 +2000 +2000 +2548 +2554 +5A8C +8004 +6008 +5030 +A000 +8000 +8000 +ENDCHAR +STARTCHAR uniFDF9 +ENCODING 65017 +BBX 14 13 1 -1 +BITMAP +0800 +0800 +0800 +0818 +0924 +0944 +16F8 +1040 +A000 +9800 +8400 +4800 +3000 +ENDCHAR +STARTCHAR uniFDFA +ENCODING 65018 +BBX 16 16 0 -2 +BITMAP +2AA0 +6AA0 +AAAA +6A2D +1456 +80C4 +8028 +7FC8 +2029 +602A +BFD7 +4402 +0455 +3D03 +5351 +A0A6 +ENDCHAR +STARTCHAR uniFDFB +ENCODING 65019 +BBX 15 14 1 -1 +BITMAP +1000 +1008 +9014 +9002 +6FFE +0000 +0548 +2540 +6548 +A554 +6442 +19BE +0000 +0008 +ENDCHAR +STARTCHAR uniFDFC +ENCODING 65020 +BBX 13 10 2 3 +BITMAP +0A00 +0A00 +0A00 +0A00 +0A80 +0A80 +8908 +8808 +7288 +0030 +ENDCHAR +STARTCHAR uniFDFD +ENCODING 65021 +BBX 16 16 0 -2 +BITMAP +70A9 +5FFF +7000 +C5D5 +1455 +15D5 +557D +75C0 +C03B +5029 +5FFF +7000 +7585 +5495 +7F9D +C030 +ENDCHAR +STARTCHAR uniFDFE +ENCODING 65022 +BBX 16 16 0 -2 +BITMAP +0040 +0040 +13C0 +4E04 +40AA +4C0E +4442 +3B8C +0000 +0A01 +2255 +5AFE +8280 +02F0 +0240 +0190 +ENDCHAR +STARTCHAR uniFDFF +ENCODING 65023 +BBX 14 14 1 -1 +BITMAP +4060 +0090 +1080 +1FF8 +1000 +2000 +C800 +0800 +0800 +0988 +4854 +8FDC +8804 +7118 +ENDCHAR +STARTCHAR uniFE00 +ENCODING 65024 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0081 +8180 +0281 +8080 +03E1 +8000 +5555 +ENDCHAR +STARTCHAR uniFE01 +ENCODING 65025 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0381 +8040 +0181 +8200 +03C1 +8000 +5555 +ENDCHAR +STARTCHAR uniFE02 +ENCODING 65026 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0381 +8040 +0181 +8040 +0381 +8000 +5555 +ENDCHAR +STARTCHAR uniFE03 +ENCODING 65027 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0241 +8240 +03C1 +8040 +0041 +8000 +5555 +ENDCHAR +STARTCHAR uniFE04 +ENCODING 65028 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +03C1 +8200 +0381 +8040 +0381 +8000 +5555 +ENDCHAR +STARTCHAR uniFE05 +ENCODING 65029 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +01C1 +8200 +0381 +8240 +0181 +8000 +5555 +ENDCHAR +STARTCHAR uniFE06 +ENCODING 65030 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +03C1 +8040 +0081 +8100 +0101 +8000 +5555 +ENDCHAR +STARTCHAR uniFE07 +ENCODING 65031 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0181 +8240 +0181 +8240 +0181 +8000 +5555 +ENDCHAR +STARTCHAR uniFE08 +ENCODING 65032 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0181 +8240 +01C1 +8040 +0381 +8000 +5555 +ENDCHAR +STARTCHAR uniFE09 +ENCODING 65033 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0831 +9848 +2849 +8848 +3E31 +8000 +5555 +ENDCHAR +STARTCHAR uniFE0A +ENCODING 65034 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0811 +9830 +2851 +8810 +3E7D +8000 +5555 +ENDCHAR +STARTCHAR uniFE0B +ENCODING 65035 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0871 +9808 +2831 +8840 +3E79 +8000 +5555 +ENDCHAR +STARTCHAR uniFE0C +ENCODING 65036 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0871 +9808 +2831 +8808 +3E71 +8000 +5555 +ENDCHAR +STARTCHAR uniFE0D +ENCODING 65037 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0849 +9848 +2879 +8808 +3E09 +8000 +5555 +ENDCHAR +STARTCHAR uniFE0E +ENCODING 65038 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0879 +9840 +2871 +8808 +3E71 +8000 +5555 +ENDCHAR +STARTCHAR uniFE0F +ENCODING 65039 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +223D +A240 +2239 +9404 +0879 +8000 +0839 +9840 +2871 +8848 +3E31 +8000 +5555 +ENDCHAR +STARTCHAR uniFE10 +ENCODING 65040 +BBX 2 4 12 8 +BITMAP +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uniFE11 +ENCODING 65041 +BBX 3 4 10 8 +BITMAP +80 +40 +20 +20 +ENDCHAR +STARTCHAR uniFE12 +ENCODING 65042 +BBX 4 4 10 7 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uniFE13 +ENCODING 65043 +BBX 2 7 12 5 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uniFE14 +ENCODING 65044 +BBX 2 9 12 3 +BITMAP +C0 +C0 +00 +00 +00 +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uniFE15 +ENCODING 65045 +BBX 1 10 13 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +00 +80 +80 +ENDCHAR +STARTCHAR uniFE16 +ENCODING 65046 +BBX 6 10 8 2 +BITMAP +78 +84 +84 +04 +08 +10 +10 +00 +10 +10 +ENDCHAR +STARTCHAR uniFE17 +ENCODING 65047 +BBX 14 6 1 1 +BITMAP +FFFC +8004 +8FC4 +B034 +C00C +8004 +ENDCHAR +STARTCHAR uniFE18 +ENCODING 65048 +BBX 14 6 1 5 +BITMAP +8004 +C00C +B034 +8FC4 +8004 +FFFC +ENDCHAR +STARTCHAR uniFE19 +ENCODING 65049 +BBX 2 12 7 0 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uniFE20 +ENCODING 65056 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -7 10 +BITMAP +1E +60 +80 +ENDCHAR +STARTCHAR uniFE21 +ENCODING 65057 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +F0 +0C +02 +ENDCHAR +STARTCHAR uniFE22 +ENCODING 65058 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -7 10 +BITMAP +3C +42 +80 +ENDCHAR +STARTCHAR uniFE23 +ENCODING 65059 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +02 +84 +78 +ENDCHAR +STARTCHAR uniFE24 +ENCODING 65060 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 -5 11 +BITMAP +F8 +ENDCHAR +STARTCHAR uniFE25 +ENCODING 65061 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 -8 11 +BITMAP +F8 +ENDCHAR +STARTCHAR uniFE26 +ENCODING 65062 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 -8 11 +BITMAP +FF +ENDCHAR +STARTCHAR uniFE27 +ENCODING 65063 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -7 -2 +BITMAP +80 +60 +1E +ENDCHAR +STARTCHAR uniFE28 +ENCODING 65064 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 -2 +BITMAP +02 +0C +F0 +ENDCHAR +STARTCHAR uniFE29 +ENCODING 65065 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -6 -2 +BITMAP +3C +C0 +ENDCHAR +STARTCHAR uniFE2A +ENCODING 65066 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -8 -2 +BITMAP +0C +F0 +ENDCHAR +STARTCHAR uniFE2B +ENCODING 65067 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 -5 -2 +BITMAP +F8 +ENDCHAR +STARTCHAR uniFE2C +ENCODING 65068 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 -8 -2 +BITMAP +F8 +ENDCHAR +STARTCHAR uniFE2D +ENCODING 65069 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 -8 -2 +BITMAP +FF +ENDCHAR +STARTCHAR uniFE2E +ENCODING 65070 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -5 11 +BITMAP +F8 +C0 +ENDCHAR +STARTCHAR uniFE2F +ENCODING 65071 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -8 11 +BITMAP +18 +F8 +ENDCHAR +STARTCHAR uniFE30 +ENCODING 65072 +BBX 2 8 7 2 +BITMAP +C0 +C0 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uniFE31 +ENCODING 65073 +BBX 1 12 8 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFE32 +ENCODING 65074 +BBX 1 8 8 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFE33 +ENCODING 65075 +BBX 1 14 1 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFE34 +ENCODING 65076 +BBX 3 16 1 -2 +BITMAP +40 +80 +80 +40 +20 +20 +40 +80 +80 +40 +20 +20 +40 +80 +80 +40 +ENDCHAR +STARTCHAR uniFE35 +ENCODING 65077 +BBX 14 5 1 1 +BITMAP +0780 +1860 +2010 +4008 +8004 +ENDCHAR +STARTCHAR uniFE36 +ENCODING 65078 +BBX 14 5 1 6 +BITMAP +8004 +4008 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uniFE37 +ENCODING 65079 +BBX 14 3 1 1 +BITMAP +0300 +7CF8 +8004 +ENDCHAR +STARTCHAR uniFE38 +ENCODING 65080 +BBX 14 3 1 8 +BITMAP +8004 +7CF8 +0300 +ENDCHAR +STARTCHAR uniFE39 +ENCODING 65081 +BBX 14 3 1 1 +BITMAP +3FF0 +4008 +8004 +ENDCHAR +STARTCHAR uniFE3A +ENCODING 65082 +BBX 14 3 1 8 +BITMAP +8004 +4008 +3FF0 +ENDCHAR +STARTCHAR uniFE3B +ENCODING 65083 +BBX 14 5 1 1 +BITMAP +FFFC +FFFC +F03C +C00C +8004 +ENDCHAR +STARTCHAR uniFE3C +ENCODING 65084 +BBX 14 5 1 6 +BITMAP +8004 +C00C +F03C +FFFC +FFFC +ENDCHAR +STARTCHAR uniFE3D +ENCODING 65085 +BBX 14 7 1 1 +BITMAP +0300 +0CC0 +3030 +C30C +0CC0 +3030 +C00C +ENDCHAR +STARTCHAR uniFE3E +ENCODING 65086 +BBX 14 7 1 4 +BITMAP +C00C +3030 +0CC0 +C30C +3030 +0CC0 +0300 +ENDCHAR +STARTCHAR uniFE3F +ENCODING 65087 +BBX 14 4 1 1 +BITMAP +0300 +0CC0 +3030 +C00C +ENDCHAR +STARTCHAR uniFE40 +ENCODING 65088 +BBX 14 4 1 7 +BITMAP +C00C +3030 +0CC0 +0300 +ENDCHAR +STARTCHAR uniFE41 +ENCODING 65089 +BBX 11 5 4 1 +BITMAP +FFE0 +0020 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uniFE42 +ENCODING 65090 +BBX 11 5 1 6 +BITMAP +8000 +8000 +8000 +8000 +FFE0 +ENDCHAR +STARTCHAR uniFE43 +ENCODING 65091 +BBX 11 6 4 1 +BITMAP +FFE0 +8020 +FFA0 +00A0 +00A0 +00E0 +ENDCHAR +STARTCHAR uniFE44 +ENCODING 65092 +BBX 11 6 1 5 +BITMAP +E000 +A000 +A000 +BFE0 +8020 +FFE0 +ENDCHAR +STARTCHAR uniFE45 +ENCODING 65093 +BBX 8 6 4 3 +BITMAP +F0 +3C +1E +0F +07 +03 +ENDCHAR +STARTCHAR uniFE46 +ENCODING 65094 +BBX 8 6 4 3 +BITMAP +F0 +2C +12 +09 +05 +03 +ENDCHAR +STARTCHAR uniFE47 +ENCODING 65095 +BBX 14 5 1 1 +BITMAP +FFFC +8004 +8004 +8004 +8004 +ENDCHAR +STARTCHAR uniFE48 +ENCODING 65096 +BBX 14 5 1 6 +BITMAP +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uniFE49 +ENCODING 65097 +BBX 13 1 2 12 +BITMAP +E738 +ENDCHAR +STARTCHAR uniFE4A +ENCODING 65098 +BBX 14 1 1 12 +BITMAP +FB7C +ENDCHAR +STARTCHAR uniFE4B +ENCODING 65099 +BBX 16 3 0 11 +BITMAP +0C30 +9249 +6186 +ENDCHAR +STARTCHAR uniFE4C +ENCODING 65100 +BBX 16 6 0 8 +BITMAP +0C30 +9249 +6186 +0C30 +9249 +6186 +ENDCHAR +STARTCHAR uniFE4D +ENCODING 65101 +BBX 13 1 2 -1 +BITMAP +E738 +ENDCHAR +STARTCHAR uniFE4E +ENCODING 65102 +BBX 14 1 1 -1 +BITMAP +FB7C +ENDCHAR +STARTCHAR uniFE4F +ENCODING 65103 +BBX 16 3 0 -2 +BITMAP +0C30 +9249 +6186 +ENDCHAR +STARTCHAR uniFE50 +ENCODING 65104 +BBX 3 3 6 -1 +BITMAP +60 +40 +80 +ENDCHAR +STARTCHAR uniFE51 +ENCODING 65105 +BBX 3 3 6 -1 +BITMAP +80 +40 +60 +ENDCHAR +STARTCHAR uniFE52 +ENCODING 65106 +BBX 2 2 7 0 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uniFE54 +ENCODING 65108 +BBX 3 6 6 -1 +BITMAP +60 +60 +00 +60 +40 +80 +ENDCHAR +STARTCHAR uniFE55 +ENCODING 65109 +BBX 2 5 7 0 +BITMAP +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uniFE56 +ENCODING 65110 +BBX 3 6 6 0 +BITMAP +40 +A0 +20 +40 +00 +40 +ENDCHAR +STARTCHAR uniFE57 +ENCODING 65111 +BBX 1 6 8 0 +BITMAP +80 +80 +80 +80 +00 +80 +ENDCHAR +STARTCHAR uniFE58 +ENCODING 65112 +BBX 5 1 5 2 +BITMAP +F8 +ENDCHAR +STARTCHAR uniFE59 +ENCODING 65113 +BBX 2 6 7 0 +BITMAP +40 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uniFE5A +ENCODING 65114 +BBX 2 6 7 0 +BITMAP +80 +40 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uniFE5B +ENCODING 65115 +BBX 3 6 7 0 +BITMAP +20 +40 +C0 +40 +40 +20 +ENDCHAR +STARTCHAR uniFE5C +ENCODING 65116 +BBX 3 6 6 0 +BITMAP +80 +40 +60 +40 +40 +80 +ENDCHAR +STARTCHAR uniFE5D +ENCODING 65117 +BBX 3 6 7 0 +BITMAP +E0 +80 +80 +80 +80 +E0 +ENDCHAR +STARTCHAR uniFE5E +ENCODING 65118 +BBX 3 6 6 0 +BITMAP +E0 +20 +20 +20 +20 +E0 +ENDCHAR +STARTCHAR uniFE5F +ENCODING 65119 +BBX 5 5 5 0 +BITMAP +50 +F8 +50 +F8 +50 +ENDCHAR +STARTCHAR uniFE60 +ENCODING 65120 +BBX 4 5 6 0 +BITMAP +40 +A0 +40 +A0 +50 +ENDCHAR +STARTCHAR uniFE61 +ENCODING 65121 +BBX 3 5 6 0 +BITMAP +A0 +40 +E0 +40 +A0 +ENDCHAR +STARTCHAR uniFE62 +ENCODING 65122 +BBX 5 5 5 0 +BITMAP +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uniFE63 +ENCODING 65123 +BBX 4 1 6 2 +BITMAP +F0 +ENDCHAR +STARTCHAR uniFE64 +ENCODING 65124 +BBX 3 5 7 0 +BITMAP +20 +40 +80 +40 +20 +ENDCHAR +STARTCHAR uniFE65 +ENCODING 65125 +BBX 3 5 6 0 +BITMAP +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uniFE66 +ENCODING 65126 +BBX 4 3 6 1 +BITMAP +F0 +00 +F0 +ENDCHAR +STARTCHAR uniFE68 +ENCODING 65128 +BBX 4 4 6 1 +BITMAP +80 +40 +20 +10 +ENDCHAR +STARTCHAR uniFE69 +ENCODING 65129 +BBX 5 5 5 0 +BITMAP +70 +A0 +70 +28 +70 +ENDCHAR +STARTCHAR uniFE6A +ENCODING 65130 +BBX 4 6 6 0 +BITMAP +80 +90 +20 +40 +90 +10 +ENDCHAR +STARTCHAR uniFE6B +ENCODING 65131 +BBX 4 6 6 0 +BITMAP +60 +90 +B0 +B0 +80 +60 +ENDCHAR +STARTCHAR uniFE70 +ENCODING 65136 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 9 +BITMAP +30 +C0 +30 +C0 +ENDCHAR +STARTCHAR uniFE71 +ENCODING 65137 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +0C +30 +0C +30 +00 +00 +00 +00 +00 +FF +ENDCHAR +STARTCHAR uniFE72 +ENCODING 65138 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 9 +BITMAP +18 +18 +C8 +50 +E0 +ENDCHAR +STARTCHAR uniFE73 +ENCODING 65139 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 5 -1 +BITMAP +40 +80 +80 +80 +60 +ENDCHAR +STARTCHAR uniFE74 +ENCODING 65140 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 0 +BITMAP +30 +C0 +30 +C0 +ENDCHAR +STARTCHAR uniFE76 +ENCODING 65142 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 9 +BITMAP +30 +C0 +ENDCHAR +STARTCHAR uniFE77 +ENCODING 65143 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +0C +30 +00 +00 +00 +00 +00 +FF +ENDCHAR +STARTCHAR uniFE78 +ENCODING 65144 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 9 +BITMAP +30 +38 +20 +40 +80 +ENDCHAR +STARTCHAR uniFE79 +ENCODING 65145 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 3 +BITMAP +0C +0E +08 +10 +20 +00 +00 +00 +00 +00 +FF +ENDCHAR +STARTCHAR uniFE7A +ENCODING 65146 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 -2 +BITMAP +30 +C0 +ENDCHAR +STARTCHAR uniFE7B +ENCODING 65147 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 -2 +BITMAP +FF +00 +00 +00 +0C +30 +ENDCHAR +STARTCHAR uniFE7C +ENCODING 65148 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 7 +BITMAP +08 +28 +B0 +C0 +ENDCHAR +STARTCHAR uniFE7D +ENCODING 65149 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +04 +14 +58 +60 +00 +00 +00 +FF +ENDCHAR +STARTCHAR uniFE7E +ENCODING 65150 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 7 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uniFE7F +ENCODING 65151 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +18 +24 +24 +18 +00 +00 +00 +FF +ENDCHAR +STARTCHAR uniFE80 +ENCODING 65152 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 2 +BITMAP +70 +80 +F0 +40 +80 +ENDCHAR +STARTCHAR uniFE81 +ENCODING 65153 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 3 +BITMAP +02 +7C +80 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniFE82 +ENCODING 65154 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +08 +70 +80 +20 +20 +20 +20 +20 +20 +1F +ENDCHAR +STARTCHAR uniFE83 +ENCODING 65155 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 3 +BITMAP +60 +80 +60 +80 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniFE84 +ENCODING 65156 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 3 +BITMAP +60 +80 +60 +80 +40 +40 +40 +40 +40 +40 +3E +ENDCHAR +STARTCHAR uniFE85 +ENCODING 65157 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +18 +20 +18 +20 +00 +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFE86 +ENCODING 65158 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +18 +20 +18 +20 +00 +18 +24 +24 +3E +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFE87 +ENCODING 65159 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 3 -2 +BITMAP +40 +40 +40 +40 +40 +40 +40 +00 +60 +80 +60 +80 +ENDCHAR +STARTCHAR uniFE88 +ENCODING 65160 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +40 +40 +40 +40 +40 +40 +3E +00 +60 +80 +60 +80 +ENDCHAR +STARTCHAR uniFE89 +ENCODING 65161 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +60 +80 +60 +80 +00 +8C +90 +90 +8C +84 +78 +ENDCHAR +STARTCHAR uniFE8A +ENCODING 65162 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +60 +80 +60 +80 +00 +80 +86 +84 +84 +78 +ENDCHAR +STARTCHAR uniFE8B +ENCODING 65163 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 3 +BITMAP +0C +10 +0C +10 +00 +04 +04 +F8 +ENDCHAR +STARTCHAR uniFE8C +ENCODING 65164 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +0C +10 +0C +10 +00 +04 +04 +FB +ENDCHAR +STARTCHAR uniFE8D +ENCODING 65165 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 8 4 3 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFE8E +ENCODING 65166 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 2 3 +BITMAP +80 +80 +80 +80 +80 +80 +80 +7C +ENDCHAR +STARTCHAR uniFE8F +ENCODING 65167 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +08 +44 +84 +78 +00 +00 +10 +ENDCHAR +STARTCHAR uniFE90 +ENCODING 65168 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +08 +44 +84 +7E +00 +00 +10 +ENDCHAR +STARTCHAR uniFE91 +ENCODING 65169 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 0 0 +BITMAP +08 +04 +04 +FC +00 +00 +10 +ENDCHAR +STARTCHAR uniFE92 +ENCODING 65170 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 0 +BITMAP +08 +04 +04 +FF +00 +00 +10 +ENDCHAR +STARTCHAR uniFE93 +ENCODING 65171 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 3 +BITMAP +90 +00 +40 +60 +90 +90 +F0 +ENDCHAR +STARTCHAR uniFE94 +ENCODING 65172 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 2 3 +BITMAP +48 +00 +10 +30 +50 +90 +F0 +1C +ENDCHAR +STARTCHAR uniFE95 +ENCODING 65173 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +28 +00 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uniFE96 +ENCODING 65174 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 3 +BITMAP +28 +00 +00 +08 +44 +84 +7E +ENDCHAR +STARTCHAR uniFE97 +ENCODING 65175 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 0 3 +BITMAP +28 +00 +00 +08 +04 +04 +F8 +ENDCHAR +STARTCHAR uniFE98 +ENCODING 65176 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 3 +BITMAP +28 +00 +00 +08 +04 +04 +FF +ENDCHAR +STARTCHAR uniFE99 +ENCODING 65177 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +20 +00 +48 +00 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uniFE9A +ENCODING 65178 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 3 +BITMAP +20 +00 +48 +00 +00 +08 +44 +84 +7E +ENDCHAR +STARTCHAR uniFE9B +ENCODING 65179 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 3 +BITMAP +20 +00 +48 +00 +00 +08 +04 +04 +F8 +ENDCHAR +STARTCHAR uniFE9C +ENCODING 65180 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 3 +BITMAP +20 +00 +48 +00 +00 +08 +04 +04 +FF +ENDCHAR +STARTCHAR uniFE9D +ENCODING 65181 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +20 +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uniFE9E +ENCODING 65182 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +FC +28 +46 +80 +90 +80 +42 +3C +ENDCHAR +STARTCHAR uniFE9F +ENCODING 65183 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 1 +BITMAP +38 +06 +FE +00 +10 +ENDCHAR +STARTCHAR uniFEA0 +ENCODING 65184 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 1 +BITMAP +38 +06 +FF +00 +10 +ENDCHAR +STARTCHAR uniFEA1 +ENCODING 65185 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +20 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFEA2 +ENCODING 65186 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +FC +28 +46 +80 +80 +80 +42 +3C +ENDCHAR +STARTCHAR uniFEA3 +ENCODING 65187 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 0 3 +BITMAP +70 +0C +FC +ENDCHAR +STARTCHAR uniFEA4 +ENCODING 65188 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 3 +BITMAP +70 +0C +FF +ENDCHAR +STARTCHAR uniFEA5 +ENCODING 65189 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +20 +00 +00 +FC +20 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uniFEA6 +ENCODING 65190 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +20 +00 +00 +FC +28 +46 +80 +80 +80 +42 +3C +ENDCHAR +STARTCHAR uniFEA7 +ENCODING 65191 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 0 3 +BITMAP +20 +00 +00 +70 +0C +FC +ENDCHAR +STARTCHAR uniFEA8 +ENCODING 65192 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 3 +BITMAP +20 +00 +00 +70 +0C +FF +ENDCHAR +STARTCHAR uniFEA9 +ENCODING 65193 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 3 +BITMAP +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uniFEAA +ENCODING 65194 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 3 +BITMAP +10 +08 +04 +84 +FE +ENDCHAR +STARTCHAR uniFEAB +ENCODING 65195 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +40 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uniFEAC +ENCODING 65196 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 3 +BITMAP +40 +00 +10 +08 +04 +84 +FE +ENDCHAR +STARTCHAR uniFEAD +ENCODING 65197 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFEAE +ENCODING 65198 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 -1 +BITMAP +08 +04 +06 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFEAF +ENCODING 65199 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +20 +00 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFEB0 +ENCODING 65200 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +20 +00 +00 +08 +04 +06 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFEB1 +ENCODING 65201 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +02 +2A +2A +BC +90 +90 +60 +ENDCHAR +STARTCHAR uniFEB2 +ENCODING 65202 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +02 +2A +2A +BE +90 +90 +60 +ENDCHAR +STARTCHAR uniFEB3 +ENCODING 65203 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 3 +BITMAP +02 +2A +2A +FC +ENDCHAR +STARTCHAR uniFEB4 +ENCODING 65204 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 3 +BITMAP +02 +2A +2A +FF +ENDCHAR +STARTCHAR uniFEB5 +ENCODING 65205 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +10 +00 +24 +00 +00 +02 +2A +2A +BC +90 +90 +60 +ENDCHAR +STARTCHAR uniFEB6 +ENCODING 65206 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +00 +24 +00 +02 +2A +2A +BE +90 +90 +60 +ENDCHAR +STARTCHAR uniFEB7 +ENCODING 65207 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +10 +00 +24 +00 +02 +2A +2A +FC +ENDCHAR +STARTCHAR uniFEB8 +ENCODING 65208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +10 +00 +24 +00 +02 +2A +2A +FF +ENDCHAR +STARTCHAR uniFEB9 +ENCODING 65209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +0C +32 +9C +90 +90 +60 +ENDCHAR +STARTCHAR uniFEBA +ENCODING 65210 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +0C +32 +9E +90 +90 +60 +ENDCHAR +STARTCHAR uniFEBB +ENCODING 65211 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 0 3 +BITMAP +0C +52 +FC +ENDCHAR +STARTCHAR uniFEBC +ENCODING 65212 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 3 +BITMAP +0C +52 +FF +ENDCHAR +STARTCHAR uniFEBD +ENCODING 65213 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +08 +00 +00 +0C +32 +9C +90 +90 +60 +ENDCHAR +STARTCHAR uniFEBE +ENCODING 65214 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +08 +00 +00 +0C +32 +9E +90 +90 +60 +ENDCHAR +STARTCHAR uniFEBF +ENCODING 65215 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 3 +BITMAP +08 +00 +00 +0C +52 +FC +ENDCHAR +STARTCHAR uniFEC0 +ENCODING 65216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 3 +BITMAP +08 +00 +00 +0C +52 +FF +ENDCHAR +STARTCHAR uniFEC1 +ENCODING 65217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +40 +40 +40 +40 +58 +64 +44 +F8 +ENDCHAR +STARTCHAR uniFEC2 +ENCODING 65218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +40 +40 +40 +40 +58 +64 +44 +FE +ENDCHAR +STARTCHAR uniFEC3 +ENCODING 65219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +20 +20 +20 +20 +2C +32 +22 +FC +ENDCHAR +STARTCHAR uniFEC4 +ENCODING 65220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +20 +20 +20 +20 +2C +32 +22 +FF +ENDCHAR +STARTCHAR uniFEC5 +ENCODING 65221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +40 +48 +40 +40 +58 +64 +44 +F8 +ENDCHAR +STARTCHAR uniFEC6 +ENCODING 65222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +40 +48 +40 +40 +58 +64 +44 +FE +ENDCHAR +STARTCHAR uniFEC7 +ENCODING 65223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +20 +24 +20 +20 +2C +32 +22 +FC +ENDCHAR +STARTCHAR uniFEC8 +ENCODING 65224 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +20 +24 +20 +20 +2C +32 +22 +FF +ENDCHAR +STARTCHAR uniFEC9 +ENCODING 65225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +30 +48 +40 +38 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uniFECA +ENCODING 65226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +60 +60 +3E +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uniFECB +ENCODING 65227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 3 +BITMAP +18 +24 +20 +FE +ENDCHAR +STARTCHAR uniFECC +ENCODING 65228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 3 +BITMAP +18 +18 +08 +F7 +ENDCHAR +STARTCHAR uniFECD +ENCODING 65229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +00 +00 +30 +48 +40 +38 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uniFECE +ENCODING 65230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +20 +00 +00 +60 +60 +3E +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uniFECF +ENCODING 65231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 3 +BITMAP +08 +00 +00 +18 +24 +20 +FE +ENDCHAR +STARTCHAR uniFED0 +ENCODING 65232 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 3 +BITMAP +08 +00 +00 +18 +18 +08 +F7 +ENDCHAR +STARTCHAR uniFED1 +ENCODING 65233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +10 +00 +0C +14 +0C +84 +84 +78 +ENDCHAR +STARTCHAR uniFED2 +ENCODING 65234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +10 +00 +0C +14 +0C +84 +84 +7E +ENDCHAR +STARTCHAR uniFED3 +ENCODING 65235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 3 +BITMAP +10 +00 +00 +38 +24 +14 +0C +F8 +ENDCHAR +STARTCHAR uniFED4 +ENCODING 65236 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +10 +00 +00 +38 +24 +14 +0C +FB +ENDCHAR +STARTCHAR uniFED5 +ENCODING 65237 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +48 +00 +00 +38 +24 +14 +4C +84 +88 +70 +ENDCHAR +STARTCHAR uniFED6 +ENCODING 65238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +48 +00 +00 +38 +24 +14 +4E +84 +88 +70 +ENDCHAR +STARTCHAR uniFED7 +ENCODING 65239 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 3 +BITMAP +48 +00 +00 +38 +24 +14 +0C +F8 +ENDCHAR +STARTCHAR uniFED8 +ENCODING 65240 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +48 +00 +00 +38 +24 +14 +0C +FB +ENDCHAR +STARTCHAR uniFED9 +ENCODING 65241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +04 +14 +24 +14 +44 +84 +84 +78 +ENDCHAR +STARTCHAR uniFEDA +ENCODING 65242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 3 +BITMAP +04 +14 +24 +14 +44 +84 +84 +7E +ENDCHAR +STARTCHAR uniFEDB +ENCODING 65243 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +04 +08 +10 +20 +40 +3C +02 +FE +ENDCHAR +STARTCHAR uniFEDC +ENCODING 65244 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +04 +08 +10 +20 +40 +3C +02 +FF +ENDCHAR +STARTCHAR uniFEDD +ENCODING 65245 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +04 +04 +04 +04 +04 +44 +84 +84 +88 +78 +ENDCHAR +STARTCHAR uniFEDE +ENCODING 65246 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +04 +04 +04 +04 +04 +04 +46 +84 +84 +88 +78 +ENDCHAR +STARTCHAR uniFEDF +ENCODING 65247 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 3 +BITMAP +04 +04 +04 +04 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uniFEE0 +ENCODING 65248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +04 +04 +04 +04 +04 +04 +04 +FB +ENDCHAR +STARTCHAR uniFEE1 +ENCODING 65249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 -2 +BITMAP +70 +18 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFEE2 +ENCODING 65250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 2 -2 +BITMAP +70 +18 +7C +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFEE3 +ENCODING 65251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 3 +BITMAP +08 +14 +32 +EE +ENDCHAR +STARTCHAR uniFEE4 +ENCODING 65252 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 3 +BITMAP +08 +14 +32 +EF +ENDCHAR +STARTCHAR uniFEE5 +ENCODING 65253 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +20 +00 +00 +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uniFEE6 +ENCODING 65254 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +20 +00 +00 +08 +44 +86 +84 +88 +70 +ENDCHAR +STARTCHAR uniFEE7 +ENCODING 65255 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 0 3 +BITMAP +10 +00 +00 +08 +04 +04 +F8 +ENDCHAR +STARTCHAR uniFEE8 +ENCODING 65256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 3 +BITMAP +10 +00 +00 +08 +04 +04 +FB +ENDCHAR +STARTCHAR uniFEE9 +ENCODING 65257 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 3 +BITMAP +40 +60 +90 +90 +F0 +ENDCHAR +STARTCHAR uniFEEA +ENCODING 65258 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 2 3 +BITMAP +10 +10 +30 +50 +90 +F0 +1C +ENDCHAR +STARTCHAR uniFEEB +ENCODING 65259 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 3 +BITMAP +10 +08 +3C +2A +3A +F6 +ENDCHAR +STARTCHAR uniFEEC +ENCODING 65260 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 1 +BITMAP +0C +14 +14 +FF +14 +0C +ENDCHAR +STARTCHAR uniFEED +ENCODING 65261 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFEEE +ENCODING 65262 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -1 +BITMAP +18 +24 +24 +3E +04 +08 +90 +60 +ENDCHAR +STARTCHAR uniFEEF +ENCODING 65263 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +08 +94 +90 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uniFEF0 +ENCODING 65264 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 -1 +BITMAP +86 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uniFEF1 +ENCODING 65265 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +08 +94 +90 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFEF2 +ENCODING 65266 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 -2 +BITMAP +86 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uniFEF3 +ENCODING 65267 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 0 1 +BITMAP +08 +08 +04 +F8 +00 +28 +ENDCHAR +STARTCHAR uniFEF4 +ENCODING 65268 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 1 +BITMAP +08 +08 +04 +FB +00 +28 +ENDCHAR +STARTCHAR uniFEF5 +ENCODING 65269 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 2 +BITMAP +08 +72 +82 +22 +12 +0A +04 +0C +14 +1C +ENDCHAR +STARTCHAR uniFEF6 +ENCODING 65270 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 2 +BITMAP +08 +72 +82 +22 +12 +0A +0E +0A +13 +60 +ENDCHAR +STARTCHAR uniFEF7 +ENCODING 65271 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 2 +BITMAP +60 +84 +64 +84 +24 +14 +08 +18 +28 +38 +ENDCHAR +STARTCHAR uniFEF8 +ENCODING 65272 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 2 +BITMAP +60 +84 +64 +84 +24 +14 +1C +14 +26 +C0 +ENDCHAR +STARTCHAR uniFEF9 +ENCODING 65273 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -2 +BITMAP +08 +08 +88 +48 +28 +10 +30 +50 +70 +00 +30 +40 +30 +40 +ENDCHAR +STARTCHAR uniFEFA +ENCODING 65274 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +04 +04 +44 +24 +14 +1C +14 +26 +C0 +18 +20 +18 +20 +ENDCHAR +STARTCHAR uniFEFB +ENCODING 65275 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 2 +BITMAP +08 +08 +88 +48 +28 +10 +30 +50 +70 +ENDCHAR +STARTCHAR uniFEFC +ENCODING 65276 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 2 +BITMAP +04 +04 +44 +24 +14 +1C +14 +26 +C0 +ENDCHAR +STARTCHAR uniFEFF +ENCODING 65279 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +F451 +1458 +A555 +46D2 +F451 +0001 +F1DE +4A10 +F19E +4851 +F390 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uniFF01 +ENCODING 65281 +BBX 2 13 8 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uniFF02 +ENCODING 65282 +BBX 7 4 5 10 +BITMAP +EE +EE +44 +44 +ENDCHAR +STARTCHAR uniFF03 +ENCODING 65283 +BBX 12 14 3 -1 +BITMAP +0840 +0840 +0840 +7FF0 +7FF0 +1080 +1080 +1080 +1080 +FFE0 +FFE0 +2100 +2100 +2100 +ENDCHAR +STARTCHAR uniFF04 +ENCODING 65284 +BBX 10 14 3 -1 +BITMAP +1200 +3E00 +5380 +9240 +9200 +5200 +3A00 +1700 +1280 +1240 +9240 +7280 +1F00 +1200 +ENDCHAR +STARTCHAR uniFF05 +ENCODING 65285 +BBX 14 14 1 -1 +BITMAP +7004 +8808 +8810 +8820 +8840 +8880 +7100 +0238 +0444 +0844 +1044 +2044 +4044 +8038 +ENDCHAR +STARTCHAR uniFF06 +ENCODING 65286 +BBX 14 13 1 0 +BITMAP +0E00 +1100 +2100 +2100 +1200 +1C00 +2820 +4420 +8240 +8140 +8080 +6344 +1C38 +ENDCHAR +STARTCHAR uniFF07 +ENCODING 65287 +BBX 3 4 7 10 +BITMAP +E0 +E0 +40 +40 +ENDCHAR +STARTCHAR uniFF08 +ENCODING 65288 +BBX 5 16 8 -2 +BITMAP +08 +10 +20 +40 +40 +80 +80 +80 +80 +80 +80 +40 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uniFF09 +ENCODING 65289 +BBX 5 16 3 -2 +BITMAP +80 +40 +20 +10 +10 +08 +08 +08 +08 +08 +08 +10 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uniFF0A +ENCODING 65290 +BBX 9 9 4 1 +BITMAP +0800 +8880 +4900 +3E00 +0800 +3E00 +4900 +8880 +0800 +ENDCHAR +STARTCHAR uniFF0B +ENCODING 65291 +BBX 12 12 2 0 +BITMAP +0400 +0400 +0400 +0400 +0400 +FFF0 +0400 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniFF0C +ENCODING 65292 +BBX 2 4 1 -1 +BITMAP +C0 +C0 +40 +80 +ENDCHAR +STARTCHAR uniFF0D +ENCODING 65293 +BBX 6 2 5 5 +BITMAP +FC +FC +ENDCHAR +STARTCHAR uniFF0E +ENCODING 65294 +BBX 2 2 1 1 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uniFF0F +ENCODING 65295 +BBX 14 14 1 -1 +BITMAP +0004 +0008 +0010 +0020 +0040 +0080 +0100 +0200 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uniFF10 +ENCODING 65296 +BBX 10 13 3 0 +BITMAP +1E00 +2100 +4080 +4080 +8040 +8040 +8040 +8040 +8040 +4080 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uniFF11 +ENCODING 65297 +BBX 3 13 6 0 +BITMAP +20 +E0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniFF12 +ENCODING 65298 +BBX 9 13 4 0 +BITMAP +3C00 +4200 +8100 +8100 +0100 +0200 +0400 +0800 +1000 +2000 +4000 +8000 +FF80 +ENDCHAR +STARTCHAR uniFF13 +ENCODING 65299 +BBX 9 13 4 0 +BITMAP +1C00 +2200 +4100 +4100 +0100 +0200 +0E00 +0100 +0080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniFF14 +ENCODING 65300 +BBX 11 13 3 0 +BITMAP +0100 +0300 +0500 +0900 +1100 +2100 +4100 +8100 +FFE0 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uniFF15 +ENCODING 65301 +BBX 8 13 4 0 +BITMAP +7E +40 +40 +80 +80 +BC +C2 +01 +01 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uniFF16 +ENCODING 65302 +BBX 8 13 4 0 +BITMAP +3C +42 +81 +81 +80 +BC +C2 +81 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uniFF17 +ENCODING 65303 +BBX 8 13 4 0 +BITMAP +FF +01 +01 +01 +02 +02 +02 +04 +04 +04 +08 +08 +08 +ENDCHAR +STARTCHAR uniFF18 +ENCODING 65304 +BBX 9 13 4 0 +BITMAP +1C00 +2200 +4100 +4100 +4100 +2200 +3E00 +4100 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniFF19 +ENCODING 65305 +BBX 8 13 4 0 +BITMAP +3C +42 +81 +81 +81 +81 +43 +3D +01 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uniFF1A +ENCODING 65306 +BBX 2 8 7 0 +BITMAP +C0 +C0 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uniFF1B +ENCODING 65307 +BBX 2 10 7 -2 +BITMAP +C0 +C0 +00 +00 +00 +00 +C0 +C0 +40 +80 +ENDCHAR +STARTCHAR uniFF1C +ENCODING 65308 +BBX 14 14 1 -1 +BITMAP +000C +0030 +00C0 +0300 +0C00 +3000 +C000 +3000 +0800 +0600 +0180 +0040 +0030 +000C +ENDCHAR +STARTCHAR uniFF1D +ENCODING 65309 +BBX 12 5 2 4 +BITMAP +FFF0 +0000 +0000 +0000 +FFF0 +ENDCHAR +STARTCHAR uniFF1E +ENCODING 65310 +BBX 14 14 1 -1 +BITMAP +C000 +3000 +0C00 +0300 +00C0 +0030 +000C +0030 +0040 +0180 +0600 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uniFF1F +ENCODING 65311 +BBX 8 13 4 0 +BITMAP +3C +42 +81 +81 +02 +0C +10 +10 +10 +00 +00 +18 +18 +ENDCHAR +STARTCHAR uniFF20 +ENCODING 65312 +BBX 12 12 2 0 +BITMAP +0F00 +30C0 +4020 +46A0 +8990 +9110 +9110 +9320 +4DC0 +4010 +3060 +0F80 +ENDCHAR +STARTCHAR uniFF21 +ENCODING 65313 +BBX 11 13 3 0 +BITMAP +0400 +0A00 +0A00 +1100 +1100 +2080 +2080 +3F80 +4040 +4040 +4040 +8020 +8020 +ENDCHAR +STARTCHAR uniFF22 +ENCODING 65314 +BBX 10 13 4 0 +BITMAP +FE00 +8100 +8080 +8080 +8080 +8100 +FE00 +8180 +8040 +8040 +8040 +8080 +FF00 +ENDCHAR +STARTCHAR uniFF23 +ENCODING 65315 +BBX 11 13 3 0 +BITMAP +0F00 +30C0 +4020 +4000 +8000 +8000 +8000 +8000 +8000 +4020 +4020 +30C0 +0F00 +ENDCHAR +STARTCHAR uniFF24 +ENCODING 65316 +BBX 10 13 4 0 +BITMAP +FC00 +8300 +8080 +8080 +8040 +8040 +8040 +8040 +8040 +8080 +8080 +8300 +FC00 +ENDCHAR +STARTCHAR uniFF25 +ENCODING 65317 +BBX 9 13 4 0 +BITMAP +FF80 +8000 +8000 +8000 +8000 +8000 +FE00 +8000 +8000 +8000 +8000 +8000 +FF80 +ENDCHAR +STARTCHAR uniFF26 +ENCODING 65318 +BBX 9 13 4 0 +BITMAP +FF80 +8000 +8000 +8000 +8000 +8000 +FE00 +8000 +8000 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniFF27 +ENCODING 65319 +BBX 12 13 2 0 +BITMAP +0F00 +30C0 +4020 +4000 +8000 +8000 +8000 +80F0 +8010 +4010 +4010 +3060 +0F80 +ENDCHAR +STARTCHAR uniFF28 +ENCODING 65320 +BBX 10 13 3 0 +BITMAP +8040 +8040 +8040 +8040 +8040 +8040 +FFC0 +8040 +8040 +8040 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uniFF29 +ENCODING 65321 +BBX 3 13 7 0 +BITMAP +E0 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +E0 +ENDCHAR +STARTCHAR uniFF2A +ENCODING 65322 +BBX 8 13 4 0 +BITMAP +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +81 +42 +3C +ENDCHAR +STARTCHAR uniFF2B +ENCODING 65323 +BBX 10 13 4 0 +BITMAP +8080 +8100 +8200 +8400 +8800 +9000 +F000 +8800 +8400 +8200 +8100 +8080 +8040 +ENDCHAR +STARTCHAR uniFF2C +ENCODING 65324 +BBX 9 13 4 0 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +FF80 +ENDCHAR +STARTCHAR uniFF2D +ENCODING 65325 +BBX 11 13 3 0 +BITMAP +C060 +C060 +A0A0 +A0A0 +A0A0 +9120 +9120 +9120 +8A20 +8A20 +8420 +8420 +8020 +ENDCHAR +STARTCHAR uniFF2E +ENCODING 65326 +BBX 10 13 3 0 +BITMAP +8040 +C040 +A040 +A040 +9040 +9040 +8840 +8440 +8240 +8240 +8140 +80C0 +8040 +ENDCHAR +STARTCHAR uniFF2F +ENCODING 65327 +BBX 11 13 3 0 +BITMAP +1F00 +2080 +4040 +4040 +8020 +8020 +8020 +8020 +8020 +4040 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uniFF30 +ENCODING 65328 +BBX 9 13 5 0 +BITMAP +FE00 +8100 +8080 +8080 +8080 +8100 +FE00 +8000 +8000 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uniFF31 +ENCODING 65329 +BBX 11 14 3 -1 +BITMAP +1F00 +2080 +4040 +4040 +8020 +8020 +8020 +8020 +8020 +4220 +4140 +2080 +1F40 +0020 +ENDCHAR +STARTCHAR uniFF32 +ENCODING 65330 +BBX 9 13 4 0 +BITMAP +FE00 +8100 +8080 +8080 +8080 +8100 +FE00 +8200 +8200 +8100 +8100 +8080 +8080 +ENDCHAR +STARTCHAR uniFF33 +ENCODING 65331 +BBX 10 13 3 0 +BITMAP +1E00 +2100 +4080 +4080 +2000 +1C00 +0300 +0080 +0040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uniFF34 +ENCODING 65332 +BBX 11 13 3 0 +BITMAP +FFE0 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uniFF35 +ENCODING 65333 +BBX 9 13 4 0 +BITMAP +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uniFF36 +ENCODING 65334 +BBX 9 13 4 0 +BITMAP +8080 +8080 +8080 +4100 +4100 +4100 +2200 +2200 +2200 +1400 +1400 +0800 +0800 +ENDCHAR +STARTCHAR uniFF37 +ENCODING 65335 +BBX 13 13 2 0 +BITMAP +8208 +8208 +8208 +8508 +4510 +4510 +4510 +28A0 +28A0 +28A0 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uniFF38 +ENCODING 65336 +BBX 11 13 3 0 +BITMAP +4040 +2080 +2080 +1100 +1100 +0A00 +0400 +0A00 +1100 +1100 +2080 +4040 +8020 +ENDCHAR +STARTCHAR uniFF39 +ENCODING 65337 +BBX 9 13 4 0 +BITMAP +8080 +8080 +4100 +4100 +2200 +2200 +1400 +1400 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniFF3A +ENCODING 65338 +BBX 9 13 4 0 +BITMAP +FF00 +0200 +0400 +0400 +0800 +0800 +1000 +1000 +2000 +2000 +4000 +4000 +FF80 +ENDCHAR +STARTCHAR uniFF3B +ENCODING 65339 +BBX 5 16 8 -2 +BITMAP +F8 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uniFF3C +ENCODING 65340 +BBX 14 14 1 -1 +BITMAP +8000 +4000 +2000 +1000 +0800 +0400 +0200 +0100 +0080 +0040 +0020 +0010 +0008 +0004 +ENDCHAR +STARTCHAR uniFF3D +ENCODING 65341 +BBX 5 16 3 -2 +BITMAP +F8 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uniFF3E +ENCODING 65342 +BBX 6 2 5 12 +BITMAP +30 +CC +ENDCHAR +STARTCHAR uniFF3F +ENCODING 65343 +BBX 16 1 0 -2 +BITMAP +FFFF +ENDCHAR +STARTCHAR uniFF40 +ENCODING 65344 +BBX 4 2 6 12 +BITMAP +C0 +30 +ENDCHAR +STARTCHAR uniFF41 +ENCODING 65345 +BBX 8 9 4 0 +BITMAP +7C +82 +02 +3E +42 +82 +82 +86 +79 +ENDCHAR +STARTCHAR uniFF42 +ENCODING 65346 +BBX 8 13 5 0 +BITMAP +80 +80 +80 +80 +80 +BC +C2 +81 +81 +81 +81 +C2 +BC +ENDCHAR +STARTCHAR uniFF43 +ENCODING 65347 +BBX 7 8 5 0 +BITMAP +3C +42 +80 +80 +80 +80 +42 +3C +ENDCHAR +STARTCHAR uniFF44 +ENCODING 65348 +BBX 8 13 3 0 +BITMAP +01 +01 +01 +01 +01 +3D +43 +81 +81 +81 +81 +43 +3D +ENDCHAR +STARTCHAR uniFF45 +ENCODING 65349 +BBX 7 8 5 0 +BITMAP +38 +44 +82 +FE +80 +80 +42 +3C +ENDCHAR +STARTCHAR uniFF46 +ENCODING 65350 +BBX 4 13 7 0 +BITMAP +30 +40 +40 +40 +40 +F0 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uniFF47 +ENCODING 65351 +BBX 7 11 4 -2 +BITMAP +3A +46 +82 +82 +82 +46 +3A +02 +82 +44 +38 +ENDCHAR +STARTCHAR uniFF48 +ENCODING 65352 +BBX 7 13 5 0 +BITMAP +80 +80 +80 +80 +80 +B8 +C4 +82 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uniFF49 +ENCODING 65353 +BBX 1 12 8 0 +BITMAP +80 +80 +00 +00 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFF4A +ENCODING 65354 +BBX 4 14 6 -2 +BITMAP +10 +10 +00 +00 +10 +10 +10 +10 +10 +10 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uniFF4B +ENCODING 65355 +BBX 7 13 5 0 +BITMAP +80 +80 +80 +80 +80 +84 +88 +90 +E0 +90 +88 +84 +82 +ENDCHAR +STARTCHAR uniFF4C +ENCODING 65356 +BBX 2 13 8 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +C0 +ENDCHAR +STARTCHAR uniFF4D +ENCODING 65357 +BBX 11 8 3 0 +BITMAP +B9C0 +C620 +8420 +8420 +8420 +8420 +8420 +8420 +ENDCHAR +STARTCHAR uniFF4E +ENCODING 65358 +BBX 7 8 5 0 +BITMAP +B8 +C4 +82 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uniFF4F +ENCODING 65359 +BBX 8 8 4 0 +BITMAP +3C +42 +81 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uniFF50 +ENCODING 65360 +BBX 8 10 4 -2 +BITMAP +BC +C2 +81 +81 +81 +81 +C2 +BC +80 +80 +ENDCHAR +STARTCHAR uniFF51 +ENCODING 65361 +BBX 8 10 4 -2 +BITMAP +3D +43 +81 +81 +81 +81 +43 +3D +01 +01 +ENDCHAR +STARTCHAR uniFF52 +ENCODING 65362 +BBX 5 8 6 0 +BITMAP +B8 +C0 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFF53 +ENCODING 65363 +BBX 6 8 5 0 +BITMAP +70 +8C +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uniFF54 +ENCODING 65364 +BBX 5 12 6 0 +BITMAP +20 +20 +20 +F8 +20 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uniFF55 +ENCODING 65365 +BBX 7 8 5 0 +BITMAP +82 +82 +82 +82 +82 +82 +46 +3A +ENDCHAR +STARTCHAR uniFF56 +ENCODING 65366 +BBX 7 8 4 0 +BITMAP +82 +82 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uniFF57 +ENCODING 65367 +BBX 9 8 4 0 +BITMAP +8880 +8880 +8880 +5500 +5500 +5500 +2200 +2200 +ENDCHAR +STARTCHAR uniFF58 +ENCODING 65368 +BBX 9 8 4 0 +BITMAP +4100 +2200 +1400 +0800 +1400 +2200 +4100 +8080 +ENDCHAR +STARTCHAR uniFF59 +ENCODING 65369 +BBX 7 10 5 -2 +BITMAP +82 +82 +44 +44 +28 +28 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFF5A +ENCODING 65370 +BBX 7 8 5 0 +BITMAP +FC +04 +08 +10 +20 +40 +80 +FE +ENDCHAR +STARTCHAR uniFF5B +ENCODING 65371 +BBX 5 16 8 -2 +BITMAP +08 +10 +20 +40 +40 +40 +40 +80 +40 +40 +40 +40 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uniFF5C +ENCODING 65372 +BBX 1 16 7 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFF5D +ENCODING 65373 +BBX 5 16 3 -2 +BITMAP +80 +40 +20 +10 +10 +10 +10 +08 +10 +10 +10 +10 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uniFF5E +ENCODING 65374 +BBX 8 2 4 11 +BITMAP +71 +8E +ENDCHAR +STARTCHAR uniFF5F +ENCODING 65375 +BBX 8 16 6 -2 +BITMAP +11 +22 +44 +44 +88 +88 +88 +88 +88 +88 +88 +88 +44 +44 +22 +11 +ENDCHAR +STARTCHAR uniFF60 +ENCODING 65376 +BBX 8 16 2 -2 +BITMAP +88 +44 +22 +22 +11 +11 +11 +11 +11 +11 +11 +11 +22 +22 +44 +88 +ENDCHAR +STARTCHAR uniFF61 +ENCODING 65377 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 0 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uniFF62 +ENCODING 65378 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 3 +BITMAP +F8 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFF63 +ENCODING 65379 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 -2 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uniFF64 +ENCODING 65380 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 0 +BITMAP +80 +60 +30 +10 +ENDCHAR +STARTCHAR uniFF65 +ENCODING 65381 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 5 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uniFF66 +ENCODING 65382 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +FC +04 +04 +04 +FC +04 +04 +04 +08 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFF67 +ENCODING 65383 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +FC +04 +08 +28 +10 +10 +10 +20 +20 +40 +ENDCHAR +STARTCHAR uniFF68 +ENCODING 65384 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +04 +08 +10 +30 +D0 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniFF69 +ENCODING 65385 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +10 +10 +10 +FE +82 +82 +02 +04 +04 +08 +30 +ENDCHAR +STARTCHAR uniFF6A +ENCODING 65386 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -1 +BITMAP +7C +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uniFF6B +ENCODING 65387 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +08 +08 +FE +08 +18 +28 +48 +88 +08 +18 +ENDCHAR +STARTCHAR uniFF6C +ENCODING 65388 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +40 +40 +40 +FE +22 +24 +20 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniFF6D +ENCODING 65389 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 1 +BITMAP +78 +08 +08 +08 +08 +FE +ENDCHAR +STARTCHAR uniFF6E +ENCODING 65390 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +FC +04 +04 +FC +04 +04 +FC +ENDCHAR +STARTCHAR uniFF6F +ENCODING 65391 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 2 -1 +BITMAP +A4 +A4 +A4 +08 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFF70 +ENCODING 65392 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 1 6 +BITMAP +80 +7E +ENDCHAR +STARTCHAR uniFF71 +ENCODING 65393 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +FE +02 +12 +14 +14 +10 +10 +10 +10 +20 +20 +40 +40 +ENDCHAR +STARTCHAR uniFF72 +ENCODING 65394 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +02 +02 +02 +04 +04 +08 +18 +28 +C8 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uniFF73 +ENCODING 65395 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +10 +10 +10 +FE +82 +82 +82 +02 +02 +02 +04 +04 +08 +30 +ENDCHAR +STARTCHAR uniFF74 +ENCODING 65396 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +7C +10 +10 +10 +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uniFF75 +ENCODING 65397 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +08 +08 +FE +08 +18 +18 +28 +28 +28 +48 +48 +88 +08 +18 +ENDCHAR +STARTCHAR uniFF76 +ENCODING 65398 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +10 +10 +10 +FE +12 +12 +12 +12 +22 +22 +24 +44 +44 +88 +ENDCHAR +STARTCHAR uniFF77 +ENCODING 65399 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +20 +20 +20 +3C +E0 +10 +10 +1E +F0 +10 +10 +08 +08 +08 +ENDCHAR +STARTCHAR uniFF78 +ENCODING 65400 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +10 +10 +1E +22 +22 +42 +82 +04 +04 +08 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFF79 +ENCODING 65401 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +40 +40 +40 +7E +48 +48 +88 +08 +08 +08 +10 +10 +20 +40 +ENDCHAR +STARTCHAR uniFF7A +ENCODING 65402 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uniFF7B +ENCODING 65403 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +24 +24 +24 +FE +24 +24 +24 +24 +08 +08 +08 +10 +10 +20 +ENDCHAR +STARTCHAR uniFF7C +ENCODING 65404 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +70 +00 +00 +00 +E2 +02 +02 +04 +04 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFF7D +ENCODING 65405 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +FC +04 +08 +08 +08 +10 +10 +28 +24 +44 +42 +82 +ENDCHAR +STARTCHAR uniFF7E +ENCODING 65406 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +20 +20 +20 +20 +2E +F2 +22 +24 +24 +20 +20 +20 +10 +0E +ENDCHAR +STARTCHAR uniFF7F +ENCODING 65407 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +02 +82 +82 +42 +02 +04 +04 +04 +08 +08 +10 +10 +20 +40 +ENDCHAR +STARTCHAR uniFF80 +ENCODING 65408 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +10 +10 +1E +22 +22 +52 +8A +04 +04 +08 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFF81 +ENCODING 65409 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +04 +18 +70 +90 +10 +10 +FE +10 +10 +10 +10 +20 +20 +C0 +ENDCHAR +STARTCHAR uniFF82 +ENCODING 65410 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +A4 +A4 +A4 +84 +04 +08 +08 +08 +10 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uniFF83 +ENCODING 65411 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +7C +00 +00 +00 +FE +10 +10 +10 +10 +10 +20 +20 +40 +ENDCHAR +STARTCHAR uniFF84 +ENCODING 65412 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +80 +80 +80 +80 +80 +E0 +90 +88 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFF85 +ENCODING 65413 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +10 +10 +10 +10 +FE +10 +10 +10 +10 +10 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uniFF86 +ENCODING 65414 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +7C +00 +00 +00 +00 +00 +00 +00 +00 +00 +FE +ENDCHAR +STARTCHAR uniFF87 +ENCODING 65415 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +FE +02 +02 +02 +44 +34 +08 +0C +14 +12 +22 +42 +80 +ENDCHAR +STARTCHAR uniFF88 +ENCODING 65416 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +10 +10 +10 +FE +04 +08 +08 +14 +32 +52 +90 +10 +10 +10 +ENDCHAR +STARTCHAR uniFF89 +ENCODING 65417 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +04 +04 +04 +04 +04 +08 +08 +08 +10 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uniFF8A +ENCODING 65418 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +24 +24 +24 +24 +24 +22 +22 +42 +42 +42 +42 +82 +80 +ENDCHAR +STARTCHAR uniFF8B +ENCODING 65419 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -1 +BITMAP +80 +80 +80 +80 +80 +8C +F0 +80 +80 +80 +80 +80 +40 +3C +ENDCHAR +STARTCHAR uniFF8C +ENCODING 65420 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +FE +02 +02 +02 +04 +04 +04 +08 +08 +10 +10 +20 +40 +ENDCHAR +STARTCHAR uniFF8D +ENCODING 65421 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +20 +50 +50 +88 +88 +08 +04 +04 +04 +02 +02 +02 +ENDCHAR +STARTCHAR uniFF8E +ENCODING 65422 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +10 +10 +10 +FE +10 +10 +54 +54 +54 +92 +92 +92 +10 +10 +ENDCHAR +STARTCHAR uniFF8F +ENCODING 65423 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +FC +04 +04 +04 +08 +48 +48 +30 +30 +20 +10 +10 +10 +ENDCHAR +STARTCHAR uniFF90 +ENCODING 65424 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +70 +0C +02 +00 +60 +18 +04 +00 +E0 +18 +04 +02 +ENDCHAR +STARTCHAR uniFF91 +ENCODING 65425 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +10 +10 +10 +10 +10 +20 +20 +20 +24 +44 +42 +4E +72 +82 +ENDCHAR +STARTCHAR uniFF92 +ENCODING 65426 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +02 +02 +02 +04 +64 +14 +08 +0C +14 +12 +22 +22 +40 +80 +ENDCHAR +STARTCHAR uniFF93 +ENCODING 65427 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +7C +10 +10 +10 +10 +FE +10 +10 +10 +10 +10 +10 +0E +ENDCHAR +STARTCHAR uniFF94 +ENCODING 65428 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +40 +40 +40 +4E +F2 +42 +24 +24 +20 +20 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uniFF95 +ENCODING 65429 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +78 +08 +08 +08 +08 +08 +08 +08 +08 +FE +ENDCHAR +STARTCHAR uniFF96 +ENCODING 65430 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +FC +04 +04 +04 +04 +FC +04 +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uniFF97 +ENCODING 65431 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +78 +00 +00 +00 +FC +04 +04 +04 +08 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uniFF98 +ENCODING 65432 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -1 +BITMAP +08 +88 +88 +88 +88 +88 +88 +08 +10 +10 +10 +20 +20 +40 +ENDCHAR +STARTCHAR uniFF99 +ENCODING 65433 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +10 +50 +50 +50 +50 +52 +52 +52 +54 +54 +98 +98 +90 +ENDCHAR +STARTCHAR uniFF9A +ENCODING 65434 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +80 +80 +80 +80 +80 +84 +84 +84 +88 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uniFF9B +ENCODING 65435 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +FC +84 +84 +84 +84 +84 +84 +84 +84 +FC +84 +ENDCHAR +STARTCHAR uniFF9C +ENCODING 65436 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +FC +84 +84 +84 +84 +04 +08 +08 +08 +10 +10 +20 +40 +ENDCHAR +STARTCHAR uniFF9D +ENCODING 65437 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +C0 +20 +00 +02 +02 +02 +02 +04 +04 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uniFF9E +ENCODING 65438 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 8 +BITMAP +20 +90 +48 +20 +ENDCHAR +STARTCHAR uniFF9F +ENCODING 65439 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 8 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uniFFA0 +ENCODING 65440 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR uniFFA1 +ENCODING 65441 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +FC +04 +04 +04 +04 +ENDCHAR +STARTCHAR uniFFA2 +ENCODING 65442 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +D8 +48 +48 +48 +48 +ENDCHAR +STARTCHAR uniFFA3 +ENCODING 65443 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 1 +BITMAP +E8 +28 +28 +34 +22 +ENDCHAR +STARTCHAR uniFFA4 +ENCODING 65444 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uniFFA5 +ENCODING 65445 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 2 0 +BITMAP +90 +90 +90 +A8 +E4 +ENDCHAR +STARTCHAR uniFFA6 +ENCODING 65446 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 2 0 +BITMAP +88 +9C +88 +94 +E8 +ENDCHAR +STARTCHAR uniFFA7 +ENCODING 65447 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +FC +80 +80 +80 +FC +ENDCHAR +STARTCHAR uniFFA8 +ENCODING 65448 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +D8 +90 +90 +90 +D8 +ENDCHAR +STARTCHAR uniFFA9 +ENCODING 65449 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 0 +BITMAP +F0 +10 +F0 +80 +F0 +ENDCHAR +STARTCHAR uniFFAA +ENCODING 65450 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +EC +24 +E4 +84 +E4 +ENDCHAR +STARTCHAR uniFFAB +ENCODING 65451 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 0 +BITMAP +EE +2A +EA +8A +EE +ENDCHAR +STARTCHAR uniFFAC +ENCODING 65452 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 0 +BITMAP +EA +2A +EE +8A +EE +ENDCHAR +STARTCHAR uniFFAD +ENCODING 65453 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 0 +BITMAP +E4 +24 +E4 +8A +EA +ENDCHAR +STARTCHAR uniFFAE +ENCODING 65454 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 0 +BITMAP +EE +28 +EE +88 +EE +ENDCHAR +STARTCHAR uniFFAF +ENCODING 65455 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 0 +BITMAP +FF +2A +EA +8A +FF +ENDCHAR +STARTCHAR uniFFB0 +ENCODING 65456 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 0 +BITMAP +E4 +2E +E4 +8A +E4 +ENDCHAR +STARTCHAR uniFFB1 +ENCODING 65457 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +F8 +88 +88 +88 +F8 +ENDCHAR +STARTCHAR uniFFB2 +ENCODING 65458 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +84 +84 +FC +84 +FC +ENDCHAR +STARTCHAR uniFFB3 +ENCODING 65459 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 0 +BITMAP +AA +AA +EE +AA +EE +ENDCHAR +STARTCHAR uniFFB4 +ENCODING 65460 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 0 +BITMAP +A8 +A8 +E8 +B4 +E2 +ENDCHAR +STARTCHAR uniFFB5 +ENCODING 65461 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +20 +20 +20 +50 +88 +ENDCHAR +STARTCHAR uniFFB6 +ENCODING 65462 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 0 +BITMAP +24 +24 +24 +5A +91 +ENDCHAR +STARTCHAR uniFFB7 +ENCODING 65463 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +20 +20 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uniFFB8 +ENCODING 65464 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +F8 +20 +20 +50 +88 +ENDCHAR +STARTCHAR uniFFB9 +ENCODING 65465 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 0 +BITMAP +7E +24 +24 +5A +91 +ENDCHAR +STARTCHAR uniFFBA +ENCODING 65466 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 0 +BITMAP +70 +00 +F8 +20 +50 +88 +ENDCHAR +STARTCHAR uniFFBB +ENCODING 65467 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +FC +04 +FC +04 +04 +ENDCHAR +STARTCHAR uniFFBC +ENCODING 65468 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +FC +80 +FC +80 +FC +ENDCHAR +STARTCHAR uniFFBD +ENCODING 65469 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +FC +48 +48 +48 +FC +ENDCHAR +STARTCHAR uniFFBE +ENCODING 65470 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 0 +BITMAP +38 +FE +38 +44 +38 +ENDCHAR +STARTCHAR uniFFC2 +ENCODING 65474 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 0 +BITMAP +80 +80 +E0 +80 +80 +ENDCHAR +STARTCHAR uniFFC3 +ENCODING 65475 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 0 +BITMAP +A0 +A0 +E0 +A0 +A0 +ENDCHAR +STARTCHAR uniFFC4 +ENCODING 65476 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 0 +BITMAP +80 +E0 +80 +E0 +80 +ENDCHAR +STARTCHAR uniFFC5 +ENCODING 65477 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 0 +BITMAP +A0 +E0 +A0 +E0 +A0 +ENDCHAR +STARTCHAR uniFFC6 +ENCODING 65478 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 0 +BITMAP +20 +20 +E0 +20 +20 +ENDCHAR +STARTCHAR uniFFC7 +ENCODING 65479 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +28 +28 +E8 +28 +28 +ENDCHAR +STARTCHAR uniFFCA +ENCODING 65482 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 0 +BITMAP +20 +E0 +20 +E0 +20 +ENDCHAR +STARTCHAR uniFFCB +ENCODING 65483 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +28 +E8 +28 +E8 +28 +ENDCHAR +STARTCHAR uniFFCC +ENCODING 65484 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uniFFCD +ENCODING 65485 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +08 +08 +28 +28 +FC +ENDCHAR +STARTCHAR uniFFCE +ENCODING 65486 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 0 +BITMAP +0A +0A +2A +2A +FE +ENDCHAR +STARTCHAR uniFFCF +ENCODING 65487 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +08 +08 +28 +28 +F8 +ENDCHAR +STARTCHAR uniFFD2 +ENCODING 65490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +50 +50 +50 +50 +F8 +ENDCHAR +STARTCHAR uniFFD3 +ENCODING 65491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uniFFD4 +ENCODING 65492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +10 +10 +F0 +50 +70 +50 +50 +ENDCHAR +STARTCHAR uniFFD5 +ENCODING 65493 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +14 +14 +F4 +54 +74 +54 +54 +ENDCHAR +STARTCHAR uniFFD6 +ENCODING 65494 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +10 +10 +F0 +50 +50 +50 +50 +ENDCHAR +STARTCHAR uniFFD7 +ENCODING 65495 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +F8 +50 +50 +50 +50 +ENDCHAR +STARTCHAR uniFFDA +ENCODING 65498 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 1 1 2 +BITMAP +FC +ENDCHAR +STARTCHAR uniFFDB +ENCODING 65499 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 0 +BITMAP +20 +20 +60 +A0 +20 +ENDCHAR +STARTCHAR uniFFDC +ENCODING 65500 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 5 4 0 +BITMAP +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFFE0 +ENCODING 65504 +BBX 8 10 4 -1 +BITMAP +02 +3E +45 +88 +88 +90 +90 +61 +3E +40 +ENDCHAR +STARTCHAR uniFFE1 +ENCODING 65505 +BBX 14 13 1 0 +BITMAP +01E0 +0610 +0808 +0800 +0800 +0800 +FFE0 +0800 +0400 +7400 +8C04 +8B08 +70F0 +ENDCHAR +STARTCHAR uniFFE2 +ENCODING 65506 +BBX 12 5 2 3 +BITMAP +FFF0 +0010 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uniFFE3 +ENCODING 65507 +BBX 16 1 0 13 +BITMAP +FFFF +ENDCHAR +STARTCHAR uniFFE4 +ENCODING 65508 +BBX 1 12 7 -1 +BITMAP +80 +80 +80 +80 +80 +00 +00 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFFE5 +ENCODING 65509 +BBX 9 13 4 0 +BITMAP +8080 +8080 +4100 +FF80 +2200 +2200 +1400 +FF80 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uniFFE6 +ENCODING 65510 +BBX 13 12 1 0 +BITMAP +E238 +4210 +4210 +FFF8 +4210 +2520 +FFF8 +28A0 +28A0 +18C0 +1040 +1040 +ENDCHAR +STARTCHAR uniFFE8 +ENCODING 65512 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 16 4 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uniFFE9 +ENCODING 65513 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 4 +BITMAP +20 +40 +FC +40 +20 +ENDCHAR +STARTCHAR uniFFEA +ENCODING 65514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 3 +BITMAP +20 +70 +A8 +20 +20 +20 +ENDCHAR +STARTCHAR uniFFEB +ENCODING 65515 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 3 +BITMAP +10 +08 +FC +08 +10 +ENDCHAR +STARTCHAR uniFFEC +ENCODING 65516 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 3 +BITMAP +20 +20 +20 +A8 +70 +20 +ENDCHAR +STARTCHAR uniFFED +ENCODING 65517 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR uniFFEE +ENCODING 65518 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +30 +48 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uniFFF9 +ENCODING 65529 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +3E11 +8828 +0839 +8844 +3E45 +8000 +0081 +8140 +01C1 +8220 +0221 +8000 +5555 +ENDCHAR +STARTCHAR uniFFFA +ENCODING 65530 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +3E11 +8828 +0839 +8844 +3E45 +8000 +01E1 +8200 +01C1 +8020 +03C1 +8000 +5555 +ENDCHAR +STARTCHAR uniFFFB +ENCODING 65531 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +3E11 +8828 +0839 +8844 +3E45 +8000 +03E1 +8080 +0081 +8080 +0081 +8000 +5555 +ENDCHAR +STARTCHAR uniFFFC +ENCODING 65532 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0001 +9184 +2945 +A984 +2945 +9198 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uniFFFD +ENCODING 65533 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +FC +CC +B4 +B4 +F4 +EC +EC +FC +EC +EC +FC +ENDCHAR +STARTCHAR uni010000 +ENCODING 65536 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +82 +82 +FE +92 +92 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010001 +ENCODING 65537 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +28 +44 +7C +82 +82 +FE +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni010002 +ENCODING 65538 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +92 +92 +54 +54 +38 +38 +7C +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010003 +ENCODING 65539 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +C4 +A8 +90 +90 +8E +82 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni010004 +ENCODING 65540 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +70 +A0 +F0 +A0 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010005 +ENCODING 65541 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +80 +80 +80 +80 +80 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010006 +ENCODING 65542 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +54 +AA +AA +00 +FE +44 +38 +10 +38 +44 +82 +ENDCHAR +STARTCHAR uni010007 +ENCODING 65543 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +00 +92 +92 +92 +92 +00 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010008 +ENCODING 65544 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 2 0 +BITMAP +20 +48 +84 +48 +2C +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010009 +ENCODING 65545 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +A0 +9A +74 +68 +A8 +A8 +A8 +A4 +94 +54 +52 +ENDCHAR +STARTCHAR uni01000A +ENCODING 65546 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +82 +FE +82 +82 +82 +FE +82 +82 +FE +ENDCHAR +STARTCHAR uni01000B +ENCODING 65547 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +82 +82 +44 +44 +BA +92 +38 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni01000D +ENCODING 65549 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +80 +B0 +C8 +88 +10 +20 +20 +20 +10 +10 +ENDCHAR +STARTCHAR uni01000E +ENCODING 65550 +BBX 13 11 1 0 +BITMAP +E000 +1000 +1000 +1040 +1040 +1FF8 +1248 +1248 +1248 +1248 +1248 +ENDCHAR +STARTCHAR uni01000F +ENCODING 65551 +BBX 11 11 2 1 +BITMAP +1F00 +2480 +4440 +8420 +8420 +FFE0 +8420 +8420 +4440 +2480 +1F00 +ENDCHAR +STARTCHAR uni010010 +ENCODING 65552 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +54 +AA +AA +00 +7C +54 +54 +54 +92 +92 +92 +ENDCHAR +STARTCHAR uni010011 +ENCODING 65553 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +48 +90 +FE +A2 +A2 +44 +C4 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni010012 +ENCODING 65554 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +7C +82 +AA +AA +6C +28 +28 +28 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni010013 +ENCODING 65555 +BBX 12 11 2 0 +BITMAP +3000 +0C00 +0400 +0260 +B290 +AE20 +4240 +0240 +0440 +0C20 +3010 +ENDCHAR +STARTCHAR uni010014 +ENCODING 65556 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +82 +82 +44 +44 +28 +28 +54 +54 +92 +92 +54 +ENDCHAR +STARTCHAR uni010015 +ENCODING 65557 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +E4 +92 +FA +14 +12 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010016 +ENCODING 65558 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +84 +88 +84 +88 +88 +90 +90 +A0 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni010017 +ENCODING 65559 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +C4 +28 +E4 +22 +C4 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010018 +ENCODING 65560 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +46 +A4 +A4 +7C +24 +2E +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010019 +ENCODING 65561 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +F8 +00 +F8 +00 +88 +50 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01001A +ENCODING 65562 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +38 +92 +54 +92 +7C +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01001B +ENCODING 65563 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +AA +AA +44 +44 +AA +AA +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01001C +ENCODING 65564 +BBX 10 11 3 0 +BITMAP +AA00 +AA00 +AA00 +AA40 +FE80 +0040 +1080 +2800 +2800 +4400 +5400 +ENDCHAR +STARTCHAR uni01001D +ENCODING 65565 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +82 +82 +82 +BA +C6 +82 +C6 +BA +82 +82 +82 +ENDCHAR +STARTCHAR uni01001E +ENCODING 65566 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +20 +20 +20 +F8 +20 +20 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01001F +ENCODING 65567 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 -1 +BITMAP +80 +C0 +A0 +90 +80 +B0 +88 +B0 +80 +90 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni010020 +ENCODING 65568 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +28 +FE +54 +54 +54 +92 +92 +92 +92 +BA +ENDCHAR +STARTCHAR uni010021 +ENCODING 65569 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +80 +FC +80 +80 +FC +84 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni010022 +ENCODING 65570 +BBX 11 11 2 0 +BITMAP +0380 +0040 +0040 +0380 +0D00 +1880 +2880 +4440 +4440 +4440 +EEE0 +ENDCHAR +STARTCHAR uni010023 +ENCODING 65571 +BBX 11 11 2 0 +BITMAP +0400 +4A40 +9120 +5140 +0A00 +0400 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni010024 +ENCODING 65572 +BBX 11 11 2 0 +BITMAP +1F00 +2080 +4040 +8020 +BBA0 +8020 +BBA0 +8020 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni010025 +ENCODING 65573 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +84 +9A +6A +0C +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010026 +ENCODING 65574 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +28 +28 +00 +C6 +38 +00 +38 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010028 +ENCODING 65576 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +80 +80 +80 +80 +98 +A4 +A4 +98 +80 +FC +ENDCHAR +STARTCHAR uni010029 +ENCODING 65577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +92 +92 +54 +38 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01002A +ENCODING 65578 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +30 +08 +28 +50 +50 +20 +F8 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni01002B +ENCODING 65579 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +20 +20 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01002C +ENCODING 65580 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +44 +82 +BA +54 +10 +10 +10 +10 +10 +10 +38 +ENDCHAR +STARTCHAR uni01002D +ENCODING 65581 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +82 +82 +44 +44 +28 +28 +54 +92 +10 +10 +10 +ENDCHAR +STARTCHAR uni01002E +ENCODING 65582 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +AA +AA +80 +FE +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01002F +ENCODING 65583 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +10 +54 +54 +54 +7C +54 +92 +BA +92 +92 +ENDCHAR +STARTCHAR uni010030 +ENCODING 65584 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +88 +E4 +82 +E4 +88 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010031 +ENCODING 65585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +FC +84 +84 +FC +84 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni010032 +ENCODING 65586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +84 +7C +44 +40 +20 +20 +20 +40 +44 +7C +84 +ENDCHAR +STARTCHAR uni010033 +ENCODING 65587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +10 +10 +D6 +10 +D6 +10 +D6 +10 +10 +10 +ENDCHAR +STARTCHAR uni010034 +ENCODING 65588 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +28 +28 +44 +54 +54 +92 +92 +92 +92 +82 +ENDCHAR +STARTCHAR uni010035 +ENCODING 65589 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +10 +FE +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010036 +ENCODING 65590 +BBX 9 12 3 0 +BITMAP +0200 +0400 +0800 +6B00 +9C80 +8880 +4900 +2A00 +2A00 +1C00 +1C00 +0800 +ENDCHAR +STARTCHAR uni010037 +ENCODING 65591 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +82 +FE +82 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni010038 +ENCODING 65592 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +30 +48 +88 +08 +10 +20 +40 +80 +88 +90 +60 +ENDCHAR +STARTCHAR uni010039 +ENCODING 65593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +02 +04 +08 +18 +28 +28 +44 +7C +94 +92 +BA +ENDCHAR +STARTCHAR uni01003A +ENCODING 65594 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +02 +01 +3A +11 +2A +28 +44 +44 +44 +82 +82 +FE +ENDCHAR +STARTCHAR uni01003C +ENCODING 65596 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +20 +50 +50 +50 +20 +F8 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01003D +ENCODING 65597 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +80 +B8 +80 +B8 +80 +B8 +80 +C0 +A0 +A0 +C0 +F8 +ENDCHAR +STARTCHAR uni01003F +ENCODING 65599 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +38 +54 +92 +38 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010040 +ENCODING 65600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +7C +00 +BA +BA +54 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010041 +ENCODING 65601 +BBX 10 11 1 0 +BITMAP +4A80 +2540 +4A80 +8000 +7E00 +1200 +1200 +2100 +2100 +4080 +4080 +ENDCHAR +STARTCHAR uni010042 +ENCODING 65602 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +40 +A0 +78 +44 +53 +41 +7F +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni010043 +ENCODING 65603 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +7C +82 +AA +AA +6C +28 +AA +6C +BA +6C +28 +38 +ENDCHAR +STARTCHAR uni010044 +ENCODING 65604 +BBX 15 13 1 0 +BITMAP +0280 +0100 +3AB8 +1110 +2AA8 +2828 +2828 +4444 +4444 +4444 +8282 +8282 +FEFE +ENDCHAR +STARTCHAR uni010045 +ENCODING 65605 +BBX 13 11 1 0 +BITMAP +A8A8 +A8A8 +8008 +E038 +1040 +0880 +0500 +0200 +0500 +0880 +1040 +ENDCHAR +STARTCHAR uni010046 +ENCODING 65606 +BBX 11 11 2 0 +BITMAP +8420 +AEA0 +4440 +A4A0 +2480 +1500 +3F80 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni010047 +ENCODING 65607 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +C6 +28 +AA +92 +82 +82 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni010048 +ENCODING 65608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +12 +24 +FE +24 +12 +24 +24 +24 +24 +48 +48 +48 +ENDCHAR +STARTCHAR uni010049 +ENCODING 65609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +C6 +54 +AA +82 +44 +38 +10 +D6 +10 +D6 +10 +D6 +10 +ENDCHAR +STARTCHAR uni01004A +ENCODING 65610 +BBX 7 11 2 0 +BITMAP +10 +10 +10 +38 +10 +7C +92 +92 +54 +38 +10 +ENDCHAR +STARTCHAR uni01004B +ENCODING 65611 +BBX 11 11 2 0 +BITMAP +FFE0 +8020 +9520 +9520 +8020 +8A20 +4A40 +4040 +2480 +2A80 +1100 +ENDCHAR +STARTCHAR uni01004C +ENCODING 65612 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +B0 +88 +88 +88 +90 +A0 +90 +88 +88 +88 +B0 +ENDCHAR +STARTCHAR uni01004D +ENCODING 65613 +BBX 13 11 1 0 +BITMAP +0200 +0500 +0880 +1740 +2020 +4710 +A028 +2720 +1240 +1540 +0880 +ENDCHAR +STARTCHAR uni010050 +ENCODING 65616 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 2 0 +BITMAP +20 +A8 +50 +50 +50 +20 +2C +F0 +2C +20 +20 +20 +ENDCHAR +STARTCHAR uni010051 +ENCODING 65617 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +20 +50 +50 +50 +20 +F8 +20 +50 +50 +88 +F8 +ENDCHAR +STARTCHAR uni010052 +ENCODING 65618 +BBX 11 11 2 0 +BITMAP +2200 +5100 +8A80 +0260 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni010053 +ENCODING 65619 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +0C +10 +10 +20 +70 +A8 +70 +20 +10 +10 +0C +ENDCHAR +STARTCHAR uni010054 +ENCODING 65620 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +82 +44 +44 +38 +6C +54 +6C +38 +44 +44 +82 +ENDCHAR +STARTCHAR uni010055 +ENCODING 65621 +BBX 12 12 2 0 +BITMAP +38E0 +4510 +8200 +0000 +1240 +1240 +2220 +2220 +7770 +2220 +4220 +E770 +ENDCHAR +STARTCHAR uni010056 +ENCODING 65622 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +84 +84 +84 +B4 +84 +B4 +84 +B4 +84 +84 +84 +ENDCHAR +STARTCHAR uni010057 +ENCODING 65623 +BBX 15 11 1 0 +BITMAP +E738 +94A4 +94A4 +8C62 +8420 +8420 +B5A0 +8420 +8420 +8420 +FFE0 +ENDCHAR +STARTCHAR uni010058 +ENCODING 65624 +BBX 11 11 2 0 +BITMAP +F1E0 +8020 +BFA0 +9120 +8A20 +8420 +8A20 +9120 +BFA0 +8020 +F1E0 +ENDCHAR +STARTCHAR uni010059 +ENCODING 65625 +BBX 14 15 1 -2 +BITMAP +0100 +0200 +0040 +0C80 +1210 +1120 +1084 +4848 +8420 +1220 +2120 +04C0 +0800 +0100 +0200 +ENDCHAR +STARTCHAR uni01005A +ENCODING 65626 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +08 +14 +84 +48 +26 +20 +48 +94 +44 +28 +26 +40 +80 +ENDCHAR +STARTCHAR uni01005B +ENCODING 65627 +BBX 9 12 1 0 +BITMAP +8080 +4100 +3E00 +4100 +9480 +1400 +0000 +FF00 +0080 +1C80 +0280 +0280 +ENDCHAR +STARTCHAR uni01005C +ENCODING 65628 +BBX 14 11 1 0 +BITMAP +8000 +8000 +8000 +8000 +8000 +8000 +8000 +E004 +9FF8 +9010 +FFE0 +ENDCHAR +STARTCHAR uni01005D +ENCODING 65629 +BBX 13 11 1 0 +BITMAP +0F80 +0200 +0200 +7FF0 +4210 +4510 +4510 +4890 +4890 +5050 +E038 +ENDCHAR +STARTCHAR uni010080 +ENCODING 65664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +10 +FE +28 +44 +44 +44 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni010081 +ENCODING 65665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +18 +20 +20 +18 +FE +10 +AA +28 +44 +44 +44 +7C +ENDCHAR +STARTCHAR uni010082 +ENCODING 65666 +BBX 14 13 1 0 +BITMAP +20A0 +2AC0 +1100 +0A00 +3F80 +4960 +3098 +2004 +4138 +42C0 +8200 +8100 +8100 +ENDCHAR +STARTCHAR uni010083 +ENCODING 65667 +BBX 15 13 0 0 +BITMAP +0880 +1540 +1740 +08C0 +4820 +2910 +9108 +5204 +2182 +A172 +410C +4080 +4080 +ENDCHAR +STARTCHAR uni010084 +ENCODING 65668 +BBX 14 13 1 0 +BITMAP +1100 +2A80 +2E80 +1180 +1040 +9220 +6210 +2408 +4304 +42C4 +8238 +8100 +8100 +ENDCHAR +STARTCHAR uni010085 +ENCODING 65669 +BBX 15 13 0 0 +BITMAP +0880 +1540 +1740 +08C0 +0820 +4910 +3108 +9204 +6982 +2162 +511C +4080 +4080 +ENDCHAR +STARTCHAR uni010086 +ENCODING 65670 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +7E +90 +6C +00 +10 +28 +28 +28 +44 +44 +44 +ENDCHAR +STARTCHAR uni010087 +ENCODING 65671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +7E +90 +6C +00 +10 +10 +38 +10 +38 +10 +10 +ENDCHAR +STARTCHAR uni010088 +ENCODING 65672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +24 +52 +88 +00 +10 +28 +28 +28 +44 +44 +44 +ENDCHAR +STARTCHAR uni010089 +ENCODING 65673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +24 +52 +88 +00 +08 +08 +1C +08 +1C +08 +08 +ENDCHAR +STARTCHAR uni01008A +ENCODING 65674 +BBX 10 12 3 0 +BITMAP +4000 +A000 +FC00 +2200 +29C0 +2040 +3FC0 +2000 +5000 +8800 +8800 +8800 +ENDCHAR +STARTCHAR uni01008B +ENCODING 65675 +BBX 10 13 3 -1 +BITMAP +4000 +A000 +FC00 +2200 +29C0 +2040 +3FC0 +2000 +7000 +2000 +7000 +2000 +2000 +ENDCHAR +STARTCHAR uni01008C +ENCODING 65676 +BBX 11 11 2 0 +BITMAP +60E0 +9080 +7F80 +1080 +2880 +29C0 +2800 +4400 +4400 +4400 +4400 +ENDCHAR +STARTCHAR uni01008D +ENCODING 65677 +BBX 11 11 2 0 +BITMAP +60E0 +9080 +7F80 +1080 +1080 +39C0 +1000 +3800 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uni01008E +ENCODING 65678 +BBX 13 11 1 0 +BITMAP +1FC0 +0A80 +3260 +4210 +4210 +FFF8 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni01008F +ENCODING 65679 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +B8 +84 +84 +7C +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni010090 +ENCODING 65680 +BBX 11 12 2 0 +BITMAP +4440 +AAA0 +AAA0 +9120 +4040 +0180 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni010091 +ENCODING 65681 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +08 +14 +22 +3E +62 +A2 +BE +62 +62 +A2 +3E +ENDCHAR +STARTCHAR uni010092 +ENCODING 65682 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +10 +10 +24 +48 +F0 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010093 +ENCODING 65683 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +E0 +80 +80 +E0 +20 +20 +70 +A8 +F8 +A8 +70 +ENDCHAR +STARTCHAR uni010094 +ENCODING 65684 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +10 +28 +10 +28 +FC +50 +50 +30 +38 +54 +7C +54 +38 +ENDCHAR +STARTCHAR uni010095 +ENCODING 65685 +BBX 11 12 2 0 +BITMAP +8000 +4000 +2600 +9AC0 +4320 +2640 +1A80 +0300 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni010096 +ENCODING 65686 +BBX 11 11 2 0 +BITMAP +FFE0 +8000 +8000 +8000 +FFE0 +8420 +A520 +94A0 +8420 +A520 +94A0 +ENDCHAR +STARTCHAR uni010097 +ENCODING 65687 +BBX 9 13 3 0 +BITMAP +0800 +0C00 +0A00 +3E00 +4900 +3E00 +2A00 +4900 +8880 +8880 +4900 +2A00 +1C00 +ENDCHAR +STARTCHAR uni010098 +ENCODING 65688 +BBX 7 13 4 0 +BITMAP +10 +38 +10 +BA +92 +44 +28 +92 +BA +92 +10 +10 +10 +ENDCHAR +STARTCHAR uni010099 +ENCODING 65689 +BBX 13 14 1 -1 +BITMAP +F830 +2448 +2290 +2120 +0128 +0310 +0500 +0500 +0300 +0100 +0380 +0100 +0280 +0440 +ENDCHAR +STARTCHAR uni01009A +ENCODING 65690 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +84 +84 +FC +84 +84 +FC +84 +84 +80 +80 +80 +ENDCHAR +STARTCHAR uni01009B +ENCODING 65691 +BBX 11 12 2 0 +BITMAP +9F20 +4A40 +2A80 +1100 +4E40 +8420 +8A20 +5140 +1100 +2080 +2080 +4040 +ENDCHAR +STARTCHAR uni01009C +ENCODING 65692 +BBX 10 12 2 0 +BITMAP +6000 +9000 +6000 +1F00 +2080 +4040 +5B40 +4040 +5B40 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni01009D +ENCODING 65693 +BBX 13 12 1 0 +BITMAP +8A88 +4A90 +6730 +9248 +9248 +9248 +8208 +9AC8 +2220 +1AC0 +0000 +0700 +ENDCHAR +STARTCHAR uni01009E +ENCODING 65694 +BBX 11 14 2 -1 +BITMAP +C060 +A0A0 +9F20 +8020 +8C20 +9220 +8420 +8820 +9220 +8C20 +8020 +FFE0 +8420 +8420 +ENDCHAR +STARTCHAR uni01009F +ENCODING 65695 +BBX 13 11 1 0 +BITMAP +3840 +4420 +8318 +1040 +1040 +1040 +1440 +1440 +1340 +1040 +1F40 +ENDCHAR +STARTCHAR uni0100A0 +ENCODING 65696 +BBX 13 11 1 0 +BITMAP +1E00 +2160 +4C90 +52A8 +9248 +A170 +A148 +C170 +8140 +0140 +03E0 +ENDCHAR +STARTCHAR uni0100A1 +ENCODING 65697 +BBX 13 13 1 -1 +BITMAP +F078 +8F88 +4110 +2220 +2520 +28A0 +4F90 +4A90 +8A88 +4F90 +3060 +0D80 +0200 +ENDCHAR +STARTCHAR uni0100A2 +ENCODING 65698 +BBX 9 13 4 0 +BITMAP +0800 +1400 +2200 +4900 +9480 +4900 +5500 +5500 +9480 +4900 +2200 +1400 +0800 +ENDCHAR +STARTCHAR uni0100A3 +ENCODING 65699 +BBX 9 11 3 0 +BITMAP +2200 +1C00 +2200 +6300 +9480 +2200 +4100 +A280 +1400 +1400 +1400 +ENDCHAR +STARTCHAR uni0100A4 +ENCODING 65700 +BBX 7 12 4 -1 +BITMAP +0C +10 +54 +92 +92 +54 +38 +10 +38 +54 +38 +10 +ENDCHAR +STARTCHAR uni0100A5 +ENCODING 65701 +BBX 10 12 3 -1 +BITMAP +0300 +0400 +0800 +1400 +1400 +1400 +2200 +5500 +0800 +4B80 +8440 +7880 +ENDCHAR +STARTCHAR uni0100A6 +ENCODING 65702 +BBX 13 12 1 0 +BITMAP +0080 +0100 +0200 +0500 +1DC0 +28A0 +4A90 +5250 +9248 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni0100A7 +ENCODING 65703 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +82 +82 +82 +82 +82 +82 +FE +82 +82 +ENDCHAR +STARTCHAR uni0100A8 +ENCODING 65704 +BBX 12 11 2 0 +BITMAP +FFF0 +8090 +A290 +9490 +8890 +8890 +8890 +8890 +8890 +8090 +FFF0 +ENDCHAR +STARTCHAR uni0100A9 +ENCODING 65705 +BBX 13 11 1 0 +BITMAP +C490 +2490 +22A0 +31C0 +2AA8 +3290 +2488 +2480 +2880 +2880 +2880 +ENDCHAR +STARTCHAR uni0100AA +ENCODING 65706 +BBX 9 11 3 0 +BITMAP +2200 +5500 +5D00 +2200 +3E00 +4100 +7F00 +4100 +7F00 +8080 +FF80 +ENDCHAR +STARTCHAR uni0100AB +ENCODING 65707 +BBX 13 13 1 0 +BITMAP +0200 +1540 +0F80 +4010 +A728 +4890 +0F80 +1040 +1FC0 +1040 +1FC0 +2020 +3FE0 +ENDCHAR +STARTCHAR uni0100AC +ENCODING 65708 +BBX 9 11 3 0 +BITMAP +FF80 +A280 +9C80 +C180 +A280 +A280 +C180 +8080 +FF80 +8880 +8880 +ENDCHAR +STARTCHAR uni0100AD +ENCODING 65709 +BBX 14 10 1 0 +BITMAP +2010 +4008 +B874 +2790 +1020 +1020 +2790 +B874 +4008 +2010 +ENDCHAR +STARTCHAR uni0100AE +ENCODING 65710 +BBX 13 8 1 1 +BITMAP +8008 +7070 +4F90 +2020 +2020 +4F90 +7070 +8008 +ENDCHAR +STARTCHAR uni0100AF +ENCODING 65711 +BBX 13 10 1 0 +BITMAP +4010 +A028 +9048 +4F90 +4010 +4010 +4F90 +9048 +A028 +4010 +ENDCHAR +STARTCHAR uni0100B0 +ENCODING 65712 +BBX 13 7 1 1 +BITMAP +0078 +03A8 +1C28 +E028 +A028 +A028 +FFF8 +ENDCHAR +STARTCHAR uni0100B1 +ENCODING 65713 +BBX 13 12 1 0 +BITMAP +2020 +5050 +8888 +8888 +7FF0 +5050 +8888 +8888 +8888 +8888 +8888 +F8F8 +ENDCHAR +STARTCHAR uni0100B2 +ENCODING 65714 +BBX 10 13 3 -1 +BITMAP +1400 +1400 +1400 +2400 +4800 +9000 +A700 +A880 +A640 +9140 +4E40 +2080 +1F00 +ENDCHAR +STARTCHAR uni0100B3 +ENCODING 65715 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +10 +38 +10 +10 +10 +10 +10 +38 +10 +FE +ENDCHAR +STARTCHAR uni0100B4 +ENCODING 65716 +BBX 12 11 2 0 +BITMAP +E000 +9000 +4800 +3BC0 +0420 +0810 +0810 +0810 +0810 +0420 +03C0 +ENDCHAR +STARTCHAR uni0100B5 +ENCODING 65717 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +1E +28 +48 +88 +88 +88 +88 +88 +48 +28 +1E +ENDCHAR +STARTCHAR uni0100B6 +ENCODING 65718 +BBX 16 11 0 0 +BITMAP +4002 +4182 +F24F +4892 +E527 +566A +55AA +1428 +1428 +1008 +3FFC +ENDCHAR +STARTCHAR uni0100B7 +ENCODING 65719 +BBX 15 13 0 0 +BITMAP +0820 +4444 +2AA8 +1010 +A82A +4444 +2288 +0100 +0100 +0280 +0440 +0440 +07C0 +ENDCHAR +STARTCHAR uni0100B8 +ENCODING 65720 +BBX 13 12 1 0 +BITMAP +0880 +0500 +0200 +FFF8 +8888 +8888 +8888 +8888 +8888 +8888 +8888 +8888 +ENDCHAR +STARTCHAR uni0100B9 +ENCODING 65721 +BBX 13 12 1 0 +BITMAP +0200 +0700 +0A80 +0200 +0200 +3FE0 +2020 +2020 +2020 +7FF0 +A028 +A028 +ENDCHAR +STARTCHAR uni0100BA +ENCODING 65722 +BBX 14 12 1 0 +BITMAP +1020 +2010 +4488 +8844 +9024 +FFFC +9024 +9024 +FFFC +9024 +9024 +FFFC +ENDCHAR +STARTCHAR uni0100BB +ENCODING 65723 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +C0 +A0 +90 +88 +90 +A0 +A0 +90 +88 +90 +F8 +ENDCHAR +STARTCHAR uni0100BC +ENCODING 65724 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +82 +42 +34 +08 +34 +44 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0100BD +ENCODING 65725 +BBX 13 12 2 0 +BITMAP +1DC0 +0200 +0500 +38E0 +4010 +8008 +BFE8 +A028 +6030 +2020 +2020 +3FE0 +ENDCHAR +STARTCHAR uni0100BE +ENCODING 65726 +BBX 7 11 3 0 +BITMAP +44 +28 +10 +FE +92 +92 +82 +44 +44 +28 +7C +ENDCHAR +STARTCHAR uni0100BF +ENCODING 65727 +BBX 13 12 1 0 +BITMAP +B800 +0700 +8080 +0700 +B818 +0028 +AEB0 +1140 +A940 +0220 +8220 +0220 +ENDCHAR +STARTCHAR uni0100C0 +ENCODING 65728 +BBX 14 12 1 0 +BITMAP +7038 +5028 +7038 +5028 +7FE8 +2028 +2028 +2028 +F87C +A854 +A854 +F87C +ENDCHAR +STARTCHAR uni0100C1 +ENCODING 65729 +BBX 16 14 0 -1 +BITMAP +FFFF +8001 +C105 +A289 +9291 +AFE9 +A109 +8281 +8441 +8441 +8921 +8921 +8001 +FFFF +ENDCHAR +STARTCHAR uni0100C2 +ENCODING 65730 +BBX 13 12 1 0 +BITMAP +0200 +0500 +0880 +3DE0 +0880 +1040 +78F0 +1040 +2020 +F078 +2020 +2020 +ENDCHAR +STARTCHAR uni0100C3 +ENCODING 65731 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +44 +82 +82 +FE +14 +14 +14 +0C +ENDCHAR +STARTCHAR uni0100C4 +ENCODING 65732 +BBX 14 7 1 0 +BITMAP +7FF8 +9024 +7038 +1020 +1FE0 +1020 +1020 +ENDCHAR +STARTCHAR uni0100C5 +ENCODING 65733 +BBX 14 9 1 0 +BITMAP +7C00 +2200 +2100 +20F0 +2010 +66D8 +A914 +6018 +3FF0 +ENDCHAR +STARTCHAR uni0100C6 +ENCODING 65734 +BBX 13 6 1 2 +BITMAP +C000 +3000 +0C00 +0330 +00C8 +0030 +ENDCHAR +STARTCHAR uni0100C7 +ENCODING 65735 +BBX 14 5 1 2 +BITMAP +4800 +2400 +FFFC +2400 +4800 +ENDCHAR +STARTCHAR uni0100C8 +ENCODING 65736 +BBX 14 9 1 0 +BITMAP +01FC +0104 +0088 +0050 +FFFC +0050 +0088 +0050 +0020 +ENDCHAR +STARTCHAR uni0100C9 +ENCODING 65737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +38 +54 +54 +92 +92 +92 +7C +10 +10 +38 +ENDCHAR +STARTCHAR uni0100CA +ENCODING 65738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +80 +80 +C0 +A0 +90 +90 +90 +A0 +C0 +80 +80 +ENDCHAR +STARTCHAR uni0100CB +ENCODING 65739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +38 +10 +10 +7C +92 +92 +92 +54 +54 +38 +10 +ENDCHAR +STARTCHAR uni0100CC +ENCODING 65740 +BBX 16 15 0 -2 +BITMAP +0010 +0008 +0024 +0005 +0005 +7FE4 +A2B8 +E2A8 +AEA8 +75B4 +1FE5 +15A5 +0E24 +0008 +0010 +ENDCHAR +STARTCHAR uni0100CD +ENCODING 65741 +BBX 16 15 0 -2 +BITMAP +0010 +0008 +0024 +0005 +0005 +7FE4 +B2B8 +EAA8 +AAA8 +6AB4 +1FE5 +02A5 +0024 +0008 +0010 +ENDCHAR +STARTCHAR uni0100CE +ENCODING 65742 +BBX 14 6 1 0 +BITMAP +FC1C +8420 +C440 +A480 +A500 +FE00 +ENDCHAR +STARTCHAR uni0100CF +ENCODING 65743 +BBX 13 13 1 -1 +BITMAP +0F80 +1240 +2220 +4210 +8708 +8A88 +FFF8 +8A88 +8708 +4210 +2220 +1240 +0F80 +ENDCHAR +STARTCHAR uni0100D0 +ENCODING 65744 +BBX 14 11 1 0 +BITMAP +3FE0 +2AA0 +2A90 +4A88 +9744 +AAA4 +A724 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni0100D1 +ENCODING 65745 +BBX 12 5 2 0 +BITMAP +FFF0 +8010 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni0100D2 +ENCODING 65746 +BBX 11 12 2 0 +BITMAP +E0E0 +9120 +8E20 +8020 +9F20 +9520 +8420 +8E20 +8420 +8420 +8020 +FFE0 +ENDCHAR +STARTCHAR uni0100D3 +ENCODING 65747 +BBX 9 13 3 -1 +BITMAP +1C00 +2200 +2200 +2200 +1C00 +A280 +4100 +A280 +1400 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni0100D4 +ENCODING 65748 +BBX 13 6 1 1 +BITMAP +8008 +8008 +7FF0 +4010 +3060 +0F80 +ENDCHAR +STARTCHAR uni0100D5 +ENCODING 65749 +BBX 14 13 1 -1 +BITMAP +0020 +BFC0 +0040 +8078 +0044 +4078 +0048 +27D4 +0014 +1014 +0414 +0100 +0054 +ENDCHAR +STARTCHAR uni0100D6 +ENCODING 65750 +BBX 14 12 1 0 +BITMAP +0010 +0000 +0020 +0480 +0000 +13F8 +0444 +2554 +0444 +4248 +0040 +80E0 +ENDCHAR +STARTCHAR uni0100D7 +ENCODING 65751 +BBX 11 11 2 0 +BITMAP +1F80 +2040 +4F20 +90A0 +A040 +A000 +A040 +90A0 +4F20 +2040 +1F80 +ENDCHAR +STARTCHAR uni0100D8 +ENCODING 65752 +BBX 14 7 1 2 +BITMAP +0020 +0010 +0008 +FFFC +0008 +0010 +0020 +ENDCHAR +STARTCHAR uni0100D9 +ENCODING 65753 +BBX 12 10 2 0 +BITMAP +FFF0 +0010 +BFD0 +A050 +A050 +A050 +A050 +BFD0 +8050 +FFD0 +ENDCHAR +STARTCHAR uni0100DA +ENCODING 65754 +BBX 14 11 1 0 +BITMAP +8000 +8000 +8000 +8000 +4000 +5800 +4600 +2180 +2060 +1C00 +02FC +ENDCHAR +STARTCHAR uni0100DB +ENCODING 65755 +BBX 14 11 1 0 +BITMAP +007C +0044 +FFC4 +8004 +8004 +FFFC +A028 +A028 +A028 +A028 +E038 +ENDCHAR +STARTCHAR uni0100DC +ENCODING 65756 +BBX 13 14 1 -1 +BITMAP +2020 +1040 +1FC0 +1140 +A228 +C518 +AFA8 +2AA0 +2AA0 +4A90 +4710 +5FD0 +6030 +8008 +ENDCHAR +STARTCHAR uni0100DD +ENCODING 65757 +BBX 11 11 2 0 +BITMAP +8420 +8420 +8420 +8420 +8420 +8E20 +9520 +A4A0 +4440 +2480 +1F00 +ENDCHAR +STARTCHAR uni0100DE +ENCODING 65758 +BBX 14 5 1 0 +BITMAP +7FF8 +A014 +6018 +1020 +0FC0 +ENDCHAR +STARTCHAR uni0100DF +ENCODING 65759 +BBX 14 10 1 0 +BITMAP +7038 +5028 +5028 +7FF8 +4008 +8004 +8004 +78F8 +0880 +1FC0 +ENDCHAR +STARTCHAR uni0100E0 +ENCODING 65760 +BBX 13 14 1 -1 +BITMAP +4010 +A028 +A028 +4010 +7FF0 +4010 +4010 +2020 +5050 +2FA0 +2520 +2220 +2220 +2220 +ENDCHAR +STARTCHAR uni0100E1 +ENCODING 65761 +BBX 10 11 3 0 +BITMAP +7F80 +2100 +2100 +4080 +8040 +8040 +4080 +4080 +2100 +2100 +1E00 +ENDCHAR +STARTCHAR uni0100E2 +ENCODING 65762 +BBX 14 12 1 0 +BITMAP +0780 +4848 +A494 +A854 +7038 +2010 +2010 +1020 +1020 +0840 +0840 +0780 +ENDCHAR +STARTCHAR uni0100E3 +ENCODING 65763 +BBX 11 12 3 0 +BITMAP +1FE0 +2240 +2240 +1F80 +3040 +6020 +A020 +1040 +0880 +0500 +0500 +0700 +ENDCHAR +STARTCHAR uni0100E4 +ENCODING 65764 +BBX 9 12 3 0 +BITMAP +7F80 +8900 +8900 +7E00 +C100 +8080 +8080 +4100 +2200 +1400 +1400 +1C00 +ENDCHAR +STARTCHAR uni0100E5 +ENCODING 65765 +BBX 13 12 1 0 +BITMAP +1FE0 +2240 +2240 +1F80 +7050 +A028 +A028 +5050 +1040 +0880 +0500 +0700 +ENDCHAR +STARTCHAR uni0100E6 +ENCODING 65766 +BBX 9 13 3 -1 +BITMAP +3E00 +5500 +5500 +3600 +3600 +4100 +8080 +8080 +4100 +3E00 +5500 +5500 +4900 +ENDCHAR +STARTCHAR uni0100E7 +ENCODING 65767 +BBX 14 10 1 0 +BITMAP +8004 +4008 +3FF0 +1020 +1020 +2010 +7878 +0480 +0480 +0780 +ENDCHAR +STARTCHAR uni0100E8 +ENCODING 65768 +BBX 9 11 3 0 +BITMAP +7F00 +9480 +A280 +5500 +2200 +4100 +4100 +2200 +2200 +1400 +1C00 +ENDCHAR +STARTCHAR uni0100E9 +ENCODING 65769 +BBX 12 11 2 0 +BITMAP +7F80 +9240 +9240 +5280 +2130 +40D0 +40E0 +2100 +2100 +1200 +1E00 +ENDCHAR +STARTCHAR uni0100EA +ENCODING 65770 +BBX 14 9 1 0 +BITMAP +7FF8 +6018 +9424 +A794 +6418 +2710 +1520 +0940 +0780 +ENDCHAR +STARTCHAR uni0100EB +ENCODING 65771 +BBX 15 11 1 0 +BITMAP +1FF0 +1010 +701C +9012 +9832 +682C +0820 +0440 +0280 +0280 +07C0 +ENDCHAR +STARTCHAR uni0100EC +ENCODING 65772 +BBX 13 6 1 1 +BITMAP +FFF8 +8008 +4010 +4010 +3060 +0F80 +ENDCHAR +STARTCHAR uni0100ED +ENCODING 65773 +BBX 13 11 1 1 +BITMAP +6030 +9FC8 +7070 +1040 +2020 +2020 +1040 +1040 +0880 +0880 +0F80 +ENDCHAR +STARTCHAR uni0100EE +ENCODING 65774 +BBX 13 10 1 0 +BITMAP +6030 +9FC8 +A028 +5050 +0880 +0500 +0500 +0500 +0880 +0F80 +ENDCHAR +STARTCHAR uni0100EF +ENCODING 65775 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +82 +82 +44 +28 +10 +10 +10 +28 +44 +7C +ENDCHAR +STARTCHAR uni0100F0 +ENCODING 65776 +BBX 8 12 1 0 +BITMAP +7E +24 +24 +3C +24 +42 +81 +81 +81 +42 +3C +7E +ENDCHAR +STARTCHAR uni0100F1 +ENCODING 65777 +BBX 15 11 1 0 +BITMAP +1FFE +8804 +8408 +7C08 +5408 +7C08 +8210 +8210 +0210 +0210 +03F0 +ENDCHAR +STARTCHAR uni0100F2 +ENCODING 65778 +BBX 12 11 2 0 +BITMAP +4020 +A050 +A050 +A050 +4020 +FFF0 +8010 +8010 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni0100F3 +ENCODING 65779 +BBX 15 11 1 0 +BITMAP +6000 +9000 +9000 +BFFE +9004 +4808 +4808 +9004 +1E3C +0140 +01C0 +ENDCHAR +STARTCHAR uni0100F4 +ENCODING 65780 +BBX 11 11 3 0 +BITMAP +FFE0 +8020 +8020 +8020 +8020 +4040 +4040 +2080 +2080 +1100 +0E00 +ENDCHAR +STARTCHAR uni0100F5 +ENCODING 65781 +BBX 16 14 0 -1 +BITMAP +6020 +9FDC +6894 +2514 +4897 +0891 +051F +1FC0 +1240 +8D88 +DFD8 +A028 +DFD8 +8008 +ENDCHAR +STARTCHAR uni0100F6 +ENCODING 65782 +BBX 14 13 1 -1 +BITMAP +0A00 +0A00 +1200 +1FC0 +2430 +2988 +5A04 +5194 +9034 +A048 +3840 +0420 +03E0 +ENDCHAR +STARTCHAR uni0100F7 +ENCODING 65783 +BBX 14 4 1 0 +BITMAP +FFFC +0104 +0088 +0070 +ENDCHAR +STARTCHAR uni0100F8 +ENCODING 65784 +BBX 10 11 3 0 +BITMAP +6000 +9000 +9000 +1000 +1000 +1000 +1000 +1FC0 +1040 +0880 +0700 +ENDCHAR +STARTCHAR uni0100F9 +ENCODING 65785 +BBX 14 12 1 0 +BITMAP +0018 +0024 +8050 +7FE0 +4080 +2100 +2100 +1200 +5280 +9240 +8C40 +4C80 +ENDCHAR +STARTCHAR uni0100FA +ENCODING 65786 +BBX 13 11 2 0 +BITMAP +0008 +0000 +6010 +9000 +9020 +6780 +2820 +4800 +8740 +0000 +0080 +ENDCHAR +STARTCHAR uni010100 +ENCODING 65792 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 2 3 0 +BITMAP +80 +80 +ENDCHAR +STARTCHAR uni010101 +ENCODING 65793 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 5 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni010102 +ENCODING 65794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 3 +BITMAP +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni010107 +ENCODING 65799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 3 4 4 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni010108 +ENCODING 65800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 4 +BITMAP +90 +90 +90 +ENDCHAR +STARTCHAR uni010109 +ENCODING 65801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 2 4 +BITMAP +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni01010A +ENCODING 65802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 1 +BITMAP +90 +90 +90 +00 +00 +90 +90 +90 +ENDCHAR +STARTCHAR uni01010B +ENCODING 65803 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 1 +BITMAP +A8 +A8 +A8 +00 +00 +50 +50 +50 +ENDCHAR +STARTCHAR uni01010C +ENCODING 65804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 1 +BITMAP +A8 +A8 +A8 +00 +00 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni01010D +ENCODING 65805 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 1 +BITMAP +AA +AA +AA +00 +00 +54 +54 +54 +ENDCHAR +STARTCHAR uni01010E +ENCODING 65806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 1 +BITMAP +AA +AA +AA +00 +00 +AA +AA +AA +ENDCHAR +STARTCHAR uni01010F +ENCODING 65807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +A8 +A8 +00 +00 +A8 +A8 +00 +00 +A8 +A8 +ENDCHAR +STARTCHAR uni010110 +ENCODING 65808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 1 2 3 +BITMAP +F0 +ENDCHAR +STARTCHAR uni010111 +ENCODING 65809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 1 +BITMAP +F0 +00 +00 +F0 +ENDCHAR +STARTCHAR uni010112 +ENCODING 65810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +F0 +00 +00 +F0 +00 +00 +F0 +ENDCHAR +STARTCHAR uni010113 +ENCODING 65811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 1 +BITMAP +CC +00 +00 +CC +ENDCHAR +STARTCHAR uni010114 +ENCODING 65812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 1 +BITMAP +C0 +0C +C0 +0C +C0 +ENDCHAR +STARTCHAR uni010115 +ENCODING 65813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 1 +BITMAP +CC +00 +CC +00 +CC +ENDCHAR +STARTCHAR uni010116 +ENCODING 65814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +C0 +0C +C0 +0C +C0 +0C +C0 +ENDCHAR +STARTCHAR uni010117 +ENCODING 65815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +CC +00 +CC +00 +CC +00 +CC +ENDCHAR +STARTCHAR uni010118 +ENCODING 65816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 1 +BITMAP +DB +00 +DB +00 +DB +ENDCHAR +STARTCHAR uni010119 +ENCODING 65817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 4 +BITMAP +60 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni01011A +ENCODING 65818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 5 +BITMAP +44 +AA +44 +ENDCHAR +STARTCHAR uni01011B +ENCODING 65819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 0 +BITMAP +40 +A0 +40 +00 +40 +A0 +40 +00 +40 +A0 +40 +ENDCHAR +STARTCHAR uni01011C +ENCODING 65820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 2 +BITMAP +44 +AA +44 +00 +00 +44 +AA +44 +ENDCHAR +STARTCHAR uni01011D +ENCODING 65821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +40 +A0 +48 +14 +48 +A0 +48 +14 +48 +A0 +40 +ENDCHAR +STARTCHAR uni01011E +ENCODING 65822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +44 +AA +44 +00 +44 +AA +44 +00 +44 +AA +44 +ENDCHAR +STARTCHAR uni01011F +ENCODING 65823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -2 +BITMAP +40 +A0 +48 +14 +48 +A0 +48 +14 +48 +A0 +48 +14 +48 +A0 +40 +ENDCHAR +STARTCHAR uni010120 +ENCODING 65824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -2 +BITMAP +44 +AA +44 +00 +44 +AA +44 +00 +44 +AA +44 +00 +44 +AA +44 +ENDCHAR +STARTCHAR uni010121 +ENCODING 65825 +BBX 11 11 2 0 +BITMAP +4440 +AAA0 +4440 +0000 +4440 +AAA0 +4440 +0000 +4440 +AAA0 +4440 +ENDCHAR +STARTCHAR uni010122 +ENCODING 65826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 3 +BITMAP +10 +38 +44 +C6 +44 +38 +10 +ENDCHAR +STARTCHAR uni010123 +ENCODING 65827 +BBX 14 7 1 3 +BITMAP +1020 +3870 +4488 +C78C +4488 +3870 +1020 +ENDCHAR +STARTCHAR uni010124 +ENCODING 65828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 1 -2 +BITMAP +38 +44 +C6 +44 +38 +38 +44 +C6 +44 +38 +38 +44 +C6 +44 +38 +10 +ENDCHAR +STARTCHAR uni010125 +ENCODING 65829 +BBX 14 12 1 0 +BITMAP +1020 +3870 +4488 +C78C +4488 +3870 +3870 +4488 +C78C +4488 +3870 +1020 +ENDCHAR +STARTCHAR uni010126 +ENCODING 65830 +BBX 14 16 1 -2 +BITMAP +3800 +4400 +C620 +4470 +3888 +398C +4488 +C670 +4470 +3888 +398C +4488 +C670 +4420 +3800 +1000 +ENDCHAR +STARTCHAR uni010127 +ENCODING 65831 +BBX 14 16 1 -2 +BITMAP +3870 +4488 +C78C +4488 +3870 +3870 +4488 +C78C +4488 +3870 +3870 +4488 +C78C +4488 +3870 +1020 +ENDCHAR +STARTCHAR uni010128 +ENCODING 65832 +BBX 14 16 1 -2 +BITMAP +3870 +4488 +C78C +4488 +3870 +4470 +C688 +458C +3888 +4470 +C670 +4488 +398C +4488 +C670 +3820 +ENDCHAR +STARTCHAR uni010129 +ENCODING 65833 +BBX 14 16 1 -2 +BITMAP +3870 +4488 +C78C +4488 +3870 +4488 +C78C +4488 +3870 +4488 +C78C +4488 +3870 +4488 +C78C +3870 +ENDCHAR +STARTCHAR uni01012A +ENCODING 65834 +BBX 16 16 0 -2 +BITMAP +318C +4A52 +CE73 +4A52 +318C +318C +4A52 +CE73 +4A52 +318C +318C +4A52 +CE73 +4A52 +318C +1084 +ENDCHAR +STARTCHAR uni01012B +ENCODING 65835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 3 +BITMAP +10 +38 +44 +FE +44 +38 +10 +ENDCHAR +STARTCHAR uni01012C +ENCODING 65836 +BBX 14 7 1 3 +BITMAP +1020 +3870 +4488 +FFFC +4488 +3870 +1020 +ENDCHAR +STARTCHAR uni01012D +ENCODING 65837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 1 -2 +BITMAP +38 +44 +FE +44 +38 +38 +44 +FE +44 +38 +38 +44 +FE +44 +38 +10 +ENDCHAR +STARTCHAR uni01012E +ENCODING 65838 +BBX 14 13 1 -1 +BITMAP +1020 +3870 +4488 +FFFC +4488 +3870 +1020 +3870 +4488 +FFFC +4488 +3870 +1020 +ENDCHAR +STARTCHAR uni01012F +ENCODING 65839 +BBX 15 16 1 -2 +BITMAP +3800 +4410 +FE38 +4444 +38FE +3844 +4438 +FE10 +4438 +3844 +38FE +4444 +FE38 +4410 +3800 +1000 +ENDCHAR +STARTCHAR uni010130 +ENCODING 65840 +BBX 14 16 1 -2 +BITMAP +3870 +4488 +FFFC +4488 +3870 +3870 +4488 +FFFC +4488 +3870 +3870 +4488 +FFFC +4488 +3870 +1020 +ENDCHAR +STARTCHAR uni010131 +ENCODING 65841 +BBX 14 16 1 -2 +BITMAP +3870 +4488 +FFFC +4488 +3870 +4470 +FE88 +45FC +3888 +4470 +FE70 +4488 +39FC +4488 +FE70 +7C20 +ENDCHAR +STARTCHAR uni010132 +ENCODING 65842 +BBX 14 16 1 -2 +BITMAP +3870 +4488 +FFFC +4488 +3870 +4488 +FFFC +4488 +3870 +4488 +FFFC +4488 +3870 +4488 +FFFC +7CF8 +ENDCHAR +STARTCHAR uni010133 +ENCODING 65843 +BBX 16 16 0 -2 +BITMAP +318C +4A52 +FFFF +4A52 +318C +318C +4A52 +FFFF +4A52 +318C +318C +4A52 +FFFF +4A52 +318C +1084 +ENDCHAR +STARTCHAR uni010137 +ENCODING 65847 +BBX 13 12 2 0 +BITMAP +0880 +0500 +7FF0 +2220 +5250 +5250 +8A88 +8A88 +FAF8 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni010138 +ENCODING 65848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 1 +BITMAP +60 +90 +20 +48 +30 +00 +60 +90 +20 +48 +30 +ENDCHAR +STARTCHAR uni010139 +ENCODING 65849 +BBX 9 11 3 0 +BITMAP +2200 +2200 +2200 +FF80 +2200 +2200 +2200 +FF80 +2200 +2200 +2200 +ENDCHAR +STARTCHAR uni01013A +ENCODING 65850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +70 +88 +24 +84 +48 +30 +4C +80 +90 +44 +38 +ENDCHAR +STARTCHAR uni01013B +ENCODING 65851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +70 +88 +88 +40 +20 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01013C +ENCODING 65852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +00 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01013D +ENCODING 65853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +21 +42 +FC +44 +24 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni01013E +ENCODING 65854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +08 +38 +48 +88 +88 +48 +28 +08 +08 +ENDCHAR +STARTCHAR uni01013F +ENCODING 65855 +BBX 13 7 1 0 +BITMAP +6000 +9000 +9FF8 +7008 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uni010140 +ENCODING 65856 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E0 +10 +08 +04 +04 +04 +04 +08 +10 +E0 +ENDCHAR +STARTCHAR uni010141 +ENCODING 65857 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +1C +20 +40 +80 +80 +80 +80 +40 +20 +1C +ENDCHAR +STARTCHAR uni010142 +ENCODING 65858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +FC +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010143 +ENCODING 65859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +84 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010144 +ENCODING 65860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +92 +A8 +C4 +FC +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010145 +ENCODING 65861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +A2 +BE +A2 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010146 +ENCODING 65862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +AA +90 +A8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010147 +ENCODING 65863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +81 +A3 +B6 +AA +A2 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010148 +ENCODING 65864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +BA +90 +90 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010149 +ENCODING 65865 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +28 +28 +44 +44 +82 +82 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni01014A +ENCODING 65866 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +92 +A8 +C4 +FC +90 +90 +80 +80 +ENDCHAR +STARTCHAR uni01014B +ENCODING 65867 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +82 +82 +FE +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni01014C +ENCODING 65868 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +A2 +BE +AA +AA +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01014D +ENCODING 65869 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +82 +44 +28 +10 +28 +44 +82 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni01014E +ENCODING 65870 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +AA +90 +A8 +80 +B8 +90 +90 +90 +ENDCHAR +STARTCHAR uni01014F +ENCODING 65871 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +BA +A0 +90 +A0 +B8 +80 +80 +80 +ENDCHAR +STARTCHAR uni010150 +ENCODING 65872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +10 +28 +28 +44 +44 +82 +FE +00 +38 +20 +10 +20 +38 +ENDCHAR +STARTCHAR uni010151 +ENCODING 65873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +FE +82 +92 +A8 +FC +80 +B8 +A0 +90 +A0 +38 +ENDCHAR +STARTCHAR uni010152 +ENCODING 65874 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +FE +82 +BA +A2 +92 +A2 +BA +ENDCHAR +STARTCHAR uni010153 +ENCODING 65875 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +FE +82 +A2 +BE +A2 +80 +B8 +A0 +90 +A0 +38 +ENDCHAR +STARTCHAR uni010154 +ENCODING 65876 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +82 +44 +28 +10 +28 +44 +BA +20 +10 +20 +38 +ENDCHAR +STARTCHAR uni010155 +ENCODING 65877 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +C6 +AA +92 +82 +BA +A2 +92 +A2 +BA +ENDCHAR +STARTCHAR uni010156 +ENCODING 65878 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -1 +BITMAP +FF +81 +A3 +B6 +AA +A2 +9C +90 +88 +90 +1C +ENDCHAR +STARTCHAR uni010157 +ENCODING 65879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +28 +44 +7C +00 +82 +C6 +AA +92 +82 +ENDCHAR +STARTCHAR uni010158 +ENCODING 65880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +9A +98 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010159 +ENCODING 65881 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +C0 +A0 +90 +F8 +90 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni01015A +ENCODING 65882 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +84 +88 +90 +A0 +C0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01015B +ENCODING 65883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 10 3 0 +BITMAP +C0 +C0 +00 +00 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni01015C +ENCODING 65884 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +80 +40 +20 +10 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni01015D +ENCODING 65885 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni01015E +ENCODING 65886 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +00 +00 +00 +00 +00 +00 +00 +00 +FC +ENDCHAR +STARTCHAR uni01015F +ENCODING 65887 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +94 +A0 +90 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010160 +ENCODING 65888 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +08 +10 +20 +20 +10 +08 +04 +FC +ENDCHAR +STARTCHAR uni010161 +ENCODING 65889 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +F8 +88 +88 +50 +50 +20 +50 +50 +88 +88 +F8 +ENDCHAR +STARTCHAR uni010162 +ENCODING 65890 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +38 +38 +54 +54 +54 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni010163 +ENCODING 65891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +08 +9C +5C +2A +09 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010164 +ENCODING 65892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +C0 +A0 +90 +88 +FE +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni010165 +ENCODING 65893 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FC +60 +50 +48 +44 +7F +44 +48 +50 +60 +ENDCHAR +STARTCHAR uni010166 +ENCODING 65894 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +92 +92 +90 +90 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010167 +ENCODING 65895 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +BA +88 +90 +88 +B8 +80 +80 +80 +ENDCHAR +STARTCHAR uni010168 +ENCODING 65896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +E2 +9A +86 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010169 +ENCODING 65897 +BBX 12 10 1 0 +BITMAP +FFF0 +8200 +8200 +8200 +83F0 +8200 +8200 +8200 +8200 +83F0 +ENDCHAR +STARTCHAR uni01016A +ENCODING 65898 +BBX 12 10 1 0 +BITMAP +83F0 +8200 +8200 +8200 +FFF0 +8200 +8200 +8200 +8200 +83F0 +ENDCHAR +STARTCHAR uni01016B +ENCODING 65899 +BBX 12 10 1 0 +BITMAP +FBF0 +2200 +2200 +2200 +3FF0 +2200 +2200 +2200 +2200 +23F0 +ENDCHAR +STARTCHAR uni01016C +ENCODING 65900 +BBX 11 10 2 0 +BITMAP +FE00 +8200 +8200 +83E0 +8000 +8000 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni01016D +ENCODING 65901 +BBX 13 10 1 0 +BITMAP +FE08 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +83F8 +ENDCHAR +STARTCHAR uni01016E +ENCODING 65902 +BBX 13 10 1 0 +BITMAP +F8F8 +8880 +8880 +8880 +8FF8 +8880 +8880 +8880 +8880 +88F8 +ENDCHAR +STARTCHAR uni01016F +ENCODING 65903 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +82 +80 +80 +80 +F8 +88 +88 +88 +ENDCHAR +STARTCHAR uni010170 +ENCODING 65904 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +92 +92 +92 +FE +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni010171 +ENCODING 65905 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +54 +54 +38 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010172 +ENCODING 65906 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +3E +22 +22 +A8 +70 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010173 +ENCODING 65907 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +FC +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni010174 +ENCODING 65908 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 1 -1 +BITMAP +44 +6C +54 +44 +00 +FE +82 +92 +A8 +C4 +FC +80 +80 +80 +ENDCHAR +STARTCHAR uni010175 +ENCODING 65909 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +04 +08 +10 +20 +40 +FC +ENDCHAR +STARTCHAR uni010176 +ENCODING 65910 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 2 +BITMAP +12 +A4 +80 +7C +02 +02 +ENDCHAR +STARTCHAR uni010177 +ENCODING 65911 +BBX 12 10 2 0 +BITMAP +0020 +0010 +0010 +21A0 +4240 +81A0 +8020 +8420 +4440 +3B80 +ENDCHAR +STARTCHAR uni010178 +ENCODING 65912 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +34 +44 +84 +84 +44 +34 +44 +84 +84 +44 +34 +ENDCHAR +STARTCHAR uni010179 +ENCODING 65913 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 0 +BITMAP +80 +80 +80 +40 +38 +ENDCHAR +STARTCHAR uni01017A +ENCODING 65914 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +10 +28 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni01017B +ENCODING 65915 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +08 +10 +20 +40 +88 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni01017C +ENCODING 65916 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 4 +BITMAP +0C +92 +60 +ENDCHAR +STARTCHAR uni01017D +ENCODING 65917 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +0C +92 +60 +00 +0C +92 +60 +ENDCHAR +STARTCHAR uni01017E +ENCODING 65918 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01017F +ENCODING 65919 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +80 +80 +80 +F8 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010180 +ENCODING 65920 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +80 +80 +F8 +80 +E0 +80 +80 +80 +ENDCHAR +STARTCHAR uni010181 +ENCODING 65921 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +80 +80 +F8 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni010182 +ENCODING 65922 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +88 +90 +A0 +C0 +C0 +A0 +94 +88 +94 +ENDCHAR +STARTCHAR uni010183 +ENCODING 65923 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7E +84 +84 +64 +04 +04 +04 +04 +08 +30 +ENDCHAR +STARTCHAR uni010184 +ENCODING 65924 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +84 +90 +A8 +90 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010185 +ENCODING 65925 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 4 +BITMAP +AC +92 +6A +ENDCHAR +STARTCHAR uni010186 +ENCODING 65926 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 0 +BITMAP +FE +00 +10 +28 +10 +ENDCHAR +STARTCHAR uni010187 +ENCODING 65927 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E0 +20 +20 +40 +40 +4C +48 +44 +44 +38 +ENDCHAR +STARTCHAR uni010188 +ENCODING 65928 +BBX 11 11 1 0 +BITMAP +01C0 +FE20 +8320 +82C0 +8200 +8300 +8600 +8A00 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni010189 +ENCODING 65929 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +0E +04 +04 +44 +A4 +A8 +70 +20 +20 +20 +ENDCHAR +STARTCHAR uni01018A +ENCODING 65930 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 0 +BITMAP +FE +00 +10 +28 +10 +ENDCHAR +STARTCHAR uni01018B +ENCODING 65931 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +10 +08 +08 +08 +68 +98 +88 +88 +70 +ENDCHAR +STARTCHAR uni01018C +ENCODING 65932 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -1 +BITMAP +20 +40 +80 +80 +80 +40 +20 +10 +10 +10 +20 +40 +ENDCHAR +STARTCHAR uni01018D +ENCODING 65933 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +20 +28 +28 +70 +A0 +A0 +20 +20 +20 +ENDCHAR +STARTCHAR uni01018E +ENCODING 65934 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 0 +BITMAP +30 +48 +48 +30 +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +ENDCHAR +STARTCHAR uni010190 +ENCODING 65936 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +FC +00 +00 +00 +FC +ENDCHAR +STARTCHAR uni010191 +ENCODING 65937 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 1 0 4 +BITMAP +FE +ENDCHAR +STARTCHAR uni010192 +ENCODING 65938 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +1C +20 +20 +20 +20 +20 +20 +20 +7C +C2 +ENDCHAR +STARTCHAR uni010193 +ENCODING 65939 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +18 +60 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni010194 +ENCODING 65940 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3C +42 +42 +02 +0C +FF +20 +42 +42 +3C +ENDCHAR +STARTCHAR uni010195 +ENCODING 65941 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +90 +48 +24 +24 +24 +48 +90 +ENDCHAR +STARTCHAR uni010196 +ENCODING 65942 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +42 +42 +24 +24 +18 +FF +24 +24 +42 +42 +ENDCHAR +STARTCHAR uni010197 +ENCODING 65943 +BBX 9 10 3 0 +BITMAP +4100 +4100 +4100 +2200 +FF80 +2200 +1400 +1400 +0800 +0800 +ENDCHAR +STARTCHAR uni010198 +ENCODING 65944 +BBX 16 10 0 0 +BITMAP +213C +2142 +2142 +2140 +FFFF +210C +2102 +2142 +2142 +213C +ENDCHAR +STARTCHAR uni010199 +ENCODING 65945 +BBX 10 10 3 0 +BITMAP +2100 +2100 +2100 +2100 +FFC0 +2100 +2100 +2100 +2100 +2100 +ENDCHAR +STARTCHAR uni01019A +ENCODING 65946 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +08 +10 +FC +20 +20 +40 +80 +80 +ENDCHAR +STARTCHAR uni01019B +ENCODING 65947 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +40 +30 +0C +02 +04 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni0101A0 +ENCODING 65952 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +1C +24 +24 +24 +38 +20 +FC +20 +20 +20 +ENDCHAR +STARTCHAR uni0101D0 +ENCODING 66000 +BBX 12 12 2 0 +BITMAP +0700 +0880 +1480 +8900 +4600 +39C0 +0920 +0910 +0F00 +0900 +1100 +2080 +ENDCHAR +STARTCHAR uni0101D1 +ENCODING 66001 +BBX 10 13 4 0 +BITMAP +2800 +2900 +5A00 +3C80 +3D00 +42C0 +9500 +4500 +4200 +4200 +3400 +1400 +1800 +ENDCHAR +STARTCHAR uni0101D2 +ENCODING 66002 +BBX 9 11 3 0 +BITMAP +1E00 +2100 +4080 +5280 +8280 +C880 +5100 +4200 +3400 +1400 +1800 +ENDCHAR +STARTCHAR uni0101D3 +ENCODING 66003 +BBX 9 12 3 0 +BITMAP +3800 +4400 +A400 +4400 +3800 +1A00 +1500 +1780 +1D00 +1400 +1200 +3600 +ENDCHAR +STARTCHAR uni0101D4 +ENCODING 66004 +BBX 8 12 3 0 +BITMAP +38 +44 +A4 +44 +38 +1A +35 +55 +5D +54 +12 +36 +ENDCHAR +STARTCHAR uni0101D5 +ENCODING 66005 +BBX 9 12 5 0 +BITMAP +3800 +4600 +A500 +4A80 +3000 +4C00 +BA00 +4A00 +7800 +4400 +7C00 +2800 +ENDCHAR +STARTCHAR uni0101D6 +ENCODING 66006 +BBX 7 9 4 0 +BITMAP +38 +28 +6C +82 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni0101D7 +ENCODING 66007 +BBX 11 10 2 0 +BITMAP +5500 +AAC0 +AAA0 +9020 +C840 +6480 +5B00 +7F00 +4100 +7F00 +ENDCHAR +STARTCHAR uni0101D8 +ENCODING 66008 +BBX 10 12 3 0 +BITMAP +1800 +3400 +5200 +7200 +8900 +A500 +A480 +A280 +A280 +E240 +3F40 +01C0 +ENDCHAR +STARTCHAR uni0101D9 +ENCODING 66009 +BBX 7 12 4 0 +BITMAP +7C +D6 +BA +D6 +BA +54 +38 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0101DA +ENCODING 66010 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 13 2 -1 +BITMAP +40 +20 +20 +40 +80 +C0 +80 +C0 +80 +40 +20 +20 +40 +ENDCHAR +STARTCHAR uni0101DB +ENCODING 66011 +BBX 9 9 3 1 +BITMAP +3E00 +4100 +9480 +8080 +AA80 +8080 +9480 +4100 +3E00 +ENDCHAR +STARTCHAR uni0101DC +ENCODING 66012 +BBX 5 12 5 0 +BITMAP +70 +D8 +50 +D8 +50 +D8 +50 +D8 +50 +50 +88 +70 +ENDCHAR +STARTCHAR uni0101DD +ENCODING 66013 +BBX 9 11 3 0 +BITMAP +FF00 +A080 +A080 +A080 +FF00 +A000 +FF00 +A080 +A080 +A080 +FF00 +ENDCHAR +STARTCHAR uni0101DE +ENCODING 66014 +BBX 13 11 1 0 +BITMAP +0040 +00A0 +00A0 +7FB0 +80A8 +7FB0 +00A0 +0110 +0110 +0208 +01F0 +ENDCHAR +STARTCHAR uni0101DF +ENCODING 66015 +BBX 6 12 4 0 +BITMAP +18 +24 +28 +CC +84 +84 +44 +44 +48 +48 +50 +60 +ENDCHAR +STARTCHAR uni0101E0 +ENCODING 66016 +BBX 6 12 4 0 +BITMAP +08 +14 +24 +24 +64 +A4 +A4 +64 +24 +24 +14 +08 +ENDCHAR +STARTCHAR uni0101E1 +ENCODING 66017 +BBX 8 11 3 0 +BITMAP +04 +0A +11 +22 +44 +88 +44 +22 +11 +0A +04 +ENDCHAR +STARTCHAR uni0101E2 +ENCODING 66018 +BBX 7 11 3 0 +BITMAP +80 +80 +40 +40 +22 +22 +14 +14 +08 +08 +04 +ENDCHAR +STARTCHAR uni0101E3 +ENCODING 66019 +BBX 6 11 4 0 +BITMAP +0C +34 +44 +B8 +C8 +8C +B4 +C4 +58 +68 +38 +ENDCHAR +STARTCHAR uni0101E4 +ENCODING 66020 +BBX 9 11 4 0 +BITMAP +5500 +5500 +FF80 +0800 +0800 +3800 +0800 +0800 +FF80 +5500 +5500 +ENDCHAR +STARTCHAR uni0101E5 +ENCODING 66021 +BBX 6 11 5 0 +BITMAP +78 +48 +48 +48 +48 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni0101E6 +ENCODING 66022 +BBX 5 11 5 0 +BITMAP +F8 +88 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0101E7 +ENCODING 66023 +BBX 13 12 1 0 +BITMAP +0200 +0F80 +1AC0 +2AA0 +3FE0 +0A80 +FFF8 +0A80 +1FC0 +0A80 +0A80 +0A80 +ENDCHAR +STARTCHAR uni0101E8 +ENCODING 66024 +BBX 8 13 4 0 +BITMAP +0D +63 +BF +89 +91 +98 +90 +90 +90 +90 +50 +3A +07 +ENDCHAR +STARTCHAR uni0101E9 +ENCODING 66025 +BBX 5 12 5 0 +BITMAP +30 +30 +50 +50 +A0 +A0 +90 +50 +48 +48 +48 +78 +ENDCHAR +STARTCHAR uni0101EA +ENCODING 66026 +BBX 13 11 1 0 +BITMAP +0F80 +0880 +F8F8 +8008 +E038 +1040 +1040 +1040 +2020 +4D90 +3260 +ENDCHAR +STARTCHAR uni0101EB +ENCODING 66027 +BBX 6 11 4 0 +BITMAP +3C +24 +24 +24 +48 +48 +48 +88 +F8 +90 +E0 +ENDCHAR +STARTCHAR uni0101EC +ENCODING 66028 +BBX 10 12 2 1 +BITMAP +0600 +0500 +1900 +2100 +5080 +80C0 +F040 +C080 +3100 +0900 +0A00 +0C00 +ENDCHAR +STARTCHAR uni0101ED +ENCODING 66029 +BBX 14 10 1 1 +BITMAP +00F8 +017C +0E84 +118C +6868 +8010 +8068 +7C04 +0308 +00F0 +ENDCHAR +STARTCHAR uni0101EE +ENCODING 66030 +BBX 14 12 1 0 +BITMAP +0600 +0A00 +1208 +1214 +71E4 +8004 +B004 +51E4 +5254 +12C8 +0AE0 +0660 +ENDCHAR +STARTCHAR uni0101EF +ENCODING 66031 +BBX 10 11 4 0 +BITMAP +3000 +4800 +4800 +A800 +2800 +5500 +4E00 +4100 +3880 +17C0 +3000 +ENDCHAR +STARTCHAR uni0101F0 +ENCODING 66032 +BBX 8 12 4 0 +BITMAP +10 +10 +28 +44 +94 +42 +45 +44 +AA +28 +54 +6C +ENDCHAR +STARTCHAR uni0101F1 +ENCODING 66033 +BBX 9 10 3 1 +BITMAP +4100 +8880 +9480 +5500 +2200 +4100 +4900 +8880 +9480 +6B00 +ENDCHAR +STARTCHAR uni0101F2 +ENCODING 66034 +BBX 9 12 3 0 +BITMAP +0400 +0A00 +0A00 +7400 +9B00 +6C80 +0B00 +6800 +9B00 +6C80 +0B00 +0800 +ENDCHAR +STARTCHAR uni0101F3 +ENCODING 66035 +BBX 10 12 2 0 +BITMAP +4080 +E1C0 +4080 +31C0 +6080 +2B00 +5100 +1280 +2C00 +0C00 +0C00 +1E00 +ENDCHAR +STARTCHAR uni0101F4 +ENCODING 66036 +BBX 7 11 4 0 +BITMAP +7C +AA +44 +28 +10 +1C +70 +10 +18 +30 +10 +ENDCHAR +STARTCHAR uni0101F5 +ENCODING 66037 +BBX 9 9 3 2 +BITMAP +3600 +4900 +AA80 +9C80 +7700 +9C80 +AA80 +4900 +3600 +ENDCHAR +STARTCHAR uni0101F6 +ENCODING 66038 +BBX 11 12 2 0 +BITMAP +8420 +CA60 +AAA0 +5B40 +2240 +1880 +0900 +0A00 +0A00 +0A00 +0A00 +0E00 +ENDCHAR +STARTCHAR uni0101F7 +ENCODING 66039 +BBX 9 11 3 0 +BITMAP +7700 +8880 +8880 +8880 +8880 +8880 +8880 +4900 +2A00 +2A00 +7F00 +ENDCHAR +STARTCHAR uni0101F8 +ENCODING 66040 +BBX 6 12 5 0 +BITMAP +60 +98 +84 +A8 +A8 +A8 +A8 +A8 +A8 +88 +48 +38 +ENDCHAR +STARTCHAR uni0101F9 +ENCODING 66041 +BBX 6 11 4 0 +BITMAP +30 +48 +5C +A8 +DC +A8 +DC +A8 +54 +4C +30 +ENDCHAR +STARTCHAR uni0101FA +ENCODING 66042 +BBX 13 7 1 0 +BITMAP +FFF8 +5550 +2AA0 +1540 +0A80 +0500 +0200 +ENDCHAR +STARTCHAR uni0101FB +ENCODING 66043 +BBX 10 10 2 1 +BITMAP +0400 +7A00 +4200 +4200 +4100 +8080 +7240 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni0101FC +ENCODING 66044 +BBX 9 13 4 0 +BITMAP +1F80 +2900 +2900 +5200 +5400 +5400 +5400 +4A00 +2A00 +2A00 +2A00 +5200 +FC00 +ENDCHAR +STARTCHAR uni0101FD +ENCODING 66045 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -13 -2 +BITMAP +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni010280 +ENCODING 66176 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +80 +C0 +A0 +90 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010281 +ENCODING 66177 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +70 +A8 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010282 +ENCODING 66178 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +84 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni010283 +ENCODING 66179 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +D4 +D4 +A8 +A8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010284 +ENCODING 66180 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +90 +A0 +C0 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010285 +ENCODING 66181 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +FE +ENDCHAR +STARTCHAR uni010286 +ENCODING 66182 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni010287 +ENCODING 66183 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010288 +ENCODING 66184 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni010289 +ENCODING 66185 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +28 +28 +10 +10 +10 +10 +28 +28 +C6 +ENDCHAR +STARTCHAR uni01028A +ENCODING 66186 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01028B +ENCODING 66187 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +80 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +80 +ENDCHAR +STARTCHAR uni01028C +ENCODING 66188 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +92 +54 +38 +10 +38 +54 +92 +10 +10 +ENDCHAR +STARTCHAR uni01028D +ENCODING 66189 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni01028E +ENCODING 66190 +BBX 9 6 3 4 +BITMAP +2200 +2200 +5500 +5500 +8880 +8880 +ENDCHAR +STARTCHAR uni01028F +ENCODING 66191 +BBX 13 6 1 4 +BITMAP +0408 +0C10 +1220 +2240 +4180 +8100 +ENDCHAR +STARTCHAR uni010290 +ENCODING 66192 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni010291 +ENCODING 66193 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +20 +20 +20 +F8 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni010292 +ENCODING 66194 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni010293 +ENCODING 66195 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +E0 +90 +88 +88 +88 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010294 +ENCODING 66196 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +20 +50 +50 +88 +88 +50 +50 +20 +20 +ENDCHAR +STARTCHAR uni010295 +ENCODING 66197 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010296 +ENCODING 66198 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni010297 +ENCODING 66199 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010298 +ENCODING 66200 +BBX 9 10 3 0 +BITMAP +8880 +5500 +2200 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni010299 +ENCODING 66201 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +95 +95 +8A +4A +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni01029A +ENCODING 66202 +BBX 9 10 3 0 +BITMAP +1400 +8880 +5500 +2200 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni01029B +ENCODING 66203 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01029C +ENCODING 66204 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +92 +54 +54 +54 +38 +38 +10 +10 +ENDCHAR +STARTCHAR uni0102A0 +ENCODING 66208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +7C +82 +82 +82 +ENDCHAR +STARTCHAR uni0102A1 +ENCODING 66209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +C0 +A0 +90 +90 +E0 +A0 +90 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni0102A2 +ENCODING 66210 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +18 +20 +40 +40 +80 +80 +80 +40 +40 +20 +18 +ENDCHAR +STARTCHAR uni0102A3 +ENCODING 66211 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +FE +ENDCHAR +STARTCHAR uni0102A4 +ENCODING 66212 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +80 +E0 +98 +80 +80 +80 +E0 +90 +80 +80 +E0 +98 +ENDCHAR +STARTCHAR uni0102A5 +ENCODING 66213 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +80 +E0 +98 +80 +80 +80 +E0 +90 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0102A6 +ENCODING 66214 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni0102A7 +ENCODING 66215 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +82 +82 +FE +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni0102A8 +ENCODING 66216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +54 +92 +92 +FE +92 +92 +92 +54 +38 +ENDCHAR +STARTCHAR uni0102A9 +ENCODING 66217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +80 +E0 +98 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0102AA +ENCODING 66218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +C4 +A4 +94 +8C +84 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0102AB +ENCODING 66219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +82 +82 +82 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni0102AC +ENCODING 66220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +82 +82 +82 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0102AD +ENCODING 66221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +82 +82 +82 +44 +38 +10 +10 +10 +ENDCHAR +STARTCHAR uni0102AE +ENCODING 66222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +08 +08 +38 +48 +88 +88 +48 +38 +08 +08 +ENDCHAR +STARTCHAR uni0102AF +ENCODING 66223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +C0 +B0 +88 +88 +88 +B0 +C0 +A0 +90 +80 +ENDCHAR +STARTCHAR uni0102B0 +ENCODING 66224 +BBX 13 10 2 0 +BITMAP +1040 +28A0 +28A0 +28A0 +4510 +4510 +4510 +8208 +8208 +8208 +ENDCHAR +STARTCHAR uni0102B1 +ENCODING 66225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0102B2 +ENCODING 66226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +44 +44 +28 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0102B3 +ENCODING 66227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +10 +38 +54 +92 +92 +92 +54 +38 +10 +10 +ENDCHAR +STARTCHAR uni0102B4 +ENCODING 66228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni0102B5 +ENCODING 66229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +54 +54 +38 +38 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0102B6 +ENCODING 66230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +82 +82 +82 +44 +28 +28 +EE +ENDCHAR +STARTCHAR uni0102B7 +ENCODING 66231 +BBX 13 10 2 0 +BITMAP +1040 +28A0 +28A0 +28A0 +4510 +4510 +4510 +8208 +8208 +FFF8 +ENDCHAR +STARTCHAR uni0102B8 +ENCODING 66232 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +54 +92 +92 +92 +92 +92 +92 +54 +38 +ENDCHAR +STARTCHAR uni0102B9 +ENCODING 66233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +38 +48 +88 +88 +F8 +88 +88 +88 +48 +38 +ENDCHAR +STARTCHAR uni0102BA +ENCODING 66234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 3 +BITMAP +FE +82 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni0102BB +ENCODING 66235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +82 +82 +82 +82 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni0102BC +ENCODING 66236 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +82 +44 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni0102BD +ENCODING 66237 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +44 +44 +28 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0102BE +ENCODING 66238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +28 +44 +82 +00 +00 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni0102BF +ENCODING 66239 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +92 +92 +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni0102C0 +ENCODING 66240 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +44 +44 +28 +28 +10 +28 +28 +44 +44 +FE +ENDCHAR +STARTCHAR uni0102C1 +ENCODING 66241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +44 +44 +28 +28 +10 +28 +28 +44 +44 +82 +ENDCHAR +STARTCHAR uni0102C2 +ENCODING 66242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -1 +BITMAP +81 +42 +42 +24 +24 +24 +24 +24 +24 +42 +42 +81 +ENDCHAR +STARTCHAR uni0102C3 +ENCODING 66243 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +30 +40 +80 +98 +84 +42 +32 +02 +04 +18 +ENDCHAR +STARTCHAR uni0102C4 +ENCODING 66244 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +44 +44 +AA +AA +10 +28 +28 +44 +44 +82 +ENDCHAR +STARTCHAR uni0102C5 +ENCODING 66245 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +92 +92 +FE +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni0102C6 +ENCODING 66246 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +40 +20 +10 +F8 +20 +40 +40 +42 +22 +1C +ENDCHAR +STARTCHAR uni0102C7 +ENCODING 66247 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0102C8 +ENCODING 66248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +82 +92 +92 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0102C9 +ENCODING 66249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +40 +80 +80 +B8 +84 +84 +84 +44 +38 +ENDCHAR +STARTCHAR uni0102CA +ENCODING 66250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +84 +42 +42 +22 +22 +24 +24 +48 +50 +E0 +ENDCHAR +STARTCHAR uni0102CB +ENCODING 66251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +E0 +50 +48 +24 +24 +22 +22 +42 +42 +84 +ENDCHAR +STARTCHAR uni0102CC +ENCODING 66252 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +44 +84 +88 +88 +48 +3E +08 +08 +04 +04 +ENDCHAR +STARTCHAR uni0102CD +ENCODING 66253 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +88 +88 +88 +88 +90 +E0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0102CE +ENCODING 66254 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +BA +82 +ENDCHAR +STARTCHAR uni0102CF +ENCODING 66255 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0102D0 +ENCODING 66256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +92 +92 +FE +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0102E0 +ENCODING 66272 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -3 -2 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni0102E1 +ENCODING 66273 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +20 +10 +08 +08 +F0 +ENDCHAR +STARTCHAR uni0102E2 +ENCODING 66274 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 0 +BITMAP +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni0102E3 +ENCODING 66275 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 -1 +BITMAP +11 +AE +A0 +60 +20 +ENDCHAR +STARTCHAR uni0102E4 +ENCODING 66276 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -2 +BITMAP +30 +48 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni0102E5 +ENCODING 66277 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 1 0 +BITMAP +70 +80 +80 +70 +80 +80 +70 +ENDCHAR +STARTCHAR uni0102E6 +ENCODING 66278 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +0C +70 +80 +80 +70 +80 +80 +70 +ENDCHAR +STARTCHAR uni0102E7 +ENCODING 66279 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +E0 +10 +10 +E0 +10 +10 +E0 +ENDCHAR +STARTCHAR uni0102E8 +ENCODING 66280 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +40 +40 +40 +40 +40 +58 +64 +44 +F8 +ENDCHAR +STARTCHAR uni0102E9 +ENCODING 66281 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +30 +48 +48 +84 +FE +84 +48 +48 +30 +ENDCHAR +STARTCHAR uni0102EA +ENCODING 66282 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 2 0 +BITMAP +80 +80 +80 +80 +80 +60 +ENDCHAR +STARTCHAR uni0102EB +ENCODING 66283 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +80 +80 +80 +80 +80 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni0102EC +ENCODING 66284 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +08 +08 +08 +08 +08 +0E +08 +88 +88 +70 +ENDCHAR +STARTCHAR uni0102ED +ENCODING 66285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 0 +BITMAP +92 +92 +6C +20 +40 +FE +ENDCHAR +STARTCHAR uni0102EE +ENCODING 66286 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +08 +44 +24 +24 +24 +48 +F0 +ENDCHAR +STARTCHAR uni0102EF +ENCODING 66287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 0 +BITMAP +C0 +30 +48 +88 +90 +E0 +ENDCHAR +STARTCHAR uni0102F0 +ENCODING 66288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 0 +BITMAP +40 +20 +50 +88 +50 +20 +ENDCHAR +STARTCHAR uni0102F1 +ENCODING 66289 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +02 +04 +08 +34 +42 +92 +92 +6C +ENDCHAR +STARTCHAR uni0102F2 +ENCODING 66290 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 -1 +BITMAP +06 +09 +0E +08 +30 +C0 +ENDCHAR +STARTCHAR uni0102F3 +ENCODING 66291 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 0 +BITMAP +40 +20 +10 +60 +80 +F8 +ENDCHAR +STARTCHAR uni0102F4 +ENCODING 66292 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +04 +18 +60 +80 +90 +60 +ENDCHAR +STARTCHAR uni0102F5 +ENCODING 66293 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +F0 +10 +60 +80 +F8 +ENDCHAR +STARTCHAR uni0102F6 +ENCODING 66294 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +30 +40 +88 +80 +70 +ENDCHAR +STARTCHAR uni0102F7 +ENCODING 66295 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +78 +94 +78 +08 +30 +40 +7C +ENDCHAR +STARTCHAR uni0102F8 +ENCODING 66296 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +08 +0C +18 +28 +18 +0C +08 +88 +88 +70 +ENDCHAR +STARTCHAR uni0102F9 +ENCODING 66297 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -2 +BITMAP +40 +20 +78 +10 +60 +80 +F8 +ENDCHAR +STARTCHAR uni0102FA +ENCODING 66298 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +10 +00 +44 +00 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni0102FB +ENCODING 66299 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +44 +38 +18 +10 +60 +80 +F8 +ENDCHAR +STARTCHAR uni010300 +ENCODING 66304 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C0 +A0 +90 +90 +88 +88 +FC +84 +84 +84 +ENDCHAR +STARTCHAR uni010301 +ENCODING 66305 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +C0 +A0 +90 +90 +E0 +A0 +90 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni010302 +ENCODING 66306 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +18 +20 +40 +40 +80 +80 +80 +40 +40 +20 +18 +ENDCHAR +STARTCHAR uni010303 +ENCODING 66307 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E0 +90 +88 +84 +84 +84 +88 +88 +90 +90 +ENDCHAR +STARTCHAR uni010304 +ENCODING 66308 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +80 +E0 +98 +80 +80 +80 +E0 +90 +80 +80 +E0 +98 +ENDCHAR +STARTCHAR uni010305 +ENCODING 66309 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +80 +E0 +98 +80 +80 +80 +E0 +90 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010306 +ENCODING 66310 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +E0 +38 +20 +20 +20 +20 +20 +20 +E0 +18 +ENDCHAR +STARTCHAR uni010307 +ENCODING 66311 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +82 +82 +FE +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni010308 +ENCODING 66312 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +C6 +AA +92 +92 +AA +C6 +44 +38 +ENDCHAR +STARTCHAR uni010309 +ENCODING 66313 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01030A +ENCODING 66314 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +80 +ENDCHAR +STARTCHAR uni01030B +ENCODING 66315 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +98 +E0 +80 +ENDCHAR +STARTCHAR uni01030C +ENCODING 66316 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +D4 +D4 +A8 +A8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01030D +ENCODING 66317 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +C4 +A8 +90 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01030E +ENCODING 66318 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +92 +92 +92 +FE +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni01030F +ENCODING 66319 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +82 +82 +82 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni010310 +ENCODING 66320 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +E0 +90 +88 +88 +88 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010311 +ENCODING 66321 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +C6 +AA +92 +82 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni010312 +ENCODING 66322 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +82 +82 +82 +44 +38 +10 +10 +10 +ENDCHAR +STARTCHAR uni010313 +ENCODING 66323 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +C0 +B0 +88 +88 +88 +B0 +C0 +80 +80 +80 +ENDCHAR +STARTCHAR uni010314 +ENCODING 66324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +10 +20 +40 +80 +40 +20 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni010315 +ENCODING 66325 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010316 +ENCODING 66326 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +44 +28 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010317 +ENCODING 66327 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni010318 +ENCODING 66328 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +54 +92 +92 +92 +54 +38 +10 +10 +10 +ENDCHAR +STARTCHAR uni010319 +ENCODING 66329 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +54 +38 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01031A +ENCODING 66330 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +70 +88 +88 +88 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni01031B +ENCODING 66331 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +C0 +B0 +88 +88 +B0 +C0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01031C +ENCODING 66332 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +80 +80 +80 +80 +C0 +B0 +88 +88 +B0 +C0 +ENDCHAR +STARTCHAR uni01031D +ENCODING 66333 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +10 +10 +10 +10 +F0 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01031E +ENCODING 66334 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +92 +92 +44 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni01031F +ENCODING 66335 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +92 +54 +38 +10 +38 +54 +92 +10 +ENDCHAR +STARTCHAR uni010320 +ENCODING 66336 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010321 +ENCODING 66337 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni010322 +ENCODING 66338 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni010323 +ENCODING 66339 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01032D +ENCODING 66349 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +08 +10 +20 +40 +80 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni01032E +ENCODING 66350 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01032F +ENCODING 66351 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +F0 +8C +F0 +8C +F0 +8C +F0 +8C +F0 +ENDCHAR +STARTCHAR uni010330 +ENCODING 66352 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +C0 +20 +50 +50 +48 +48 +44 +44 +40 +ENDCHAR +STARTCHAR uni010331 +ENCODING 66353 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +90 +90 +A0 +F8 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni010332 +ENCODING 66354 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +84 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010333 +ENCODING 66355 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +C0 +20 +10 +10 +08 +88 +8C +74 +ENDCHAR +STARTCHAR uni010334 +ENCODING 66356 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +38 +44 +80 +FC +84 +80 +44 +38 +ENDCHAR +STARTCHAR uni010335 +ENCODING 66357 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +88 +88 +88 +88 +88 +88 +88 +7C +ENDCHAR +STARTCHAR uni010336 +ENCODING 66358 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +04 +08 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni010337 +ENCODING 66359 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +F8 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni010338 +ENCODING 66360 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +10 +10 +54 +92 +92 +92 +54 +38 +10 +10 +10 +ENDCHAR +STARTCHAR uni010339 +ENCODING 66361 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 8 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01033A +ENCODING 66362 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +88 +90 +E0 +90 +88 +88 +84 +ENDCHAR +STARTCHAR uni01033B +ENCODING 66363 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +40 +40 +A0 +90 +90 +88 +84 +ENDCHAR +STARTCHAR uni01033C +ENCODING 66364 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +CC +B4 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01033D +ENCODING 66365 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +C4 +A4 +94 +8C +84 +84 +ENDCHAR +STARTCHAR uni01033E +ENCODING 66366 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +80 +80 +84 +8C +74 +04 +08 +ENDCHAR +STARTCHAR uni01033F +ENCODING 66367 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +44 +44 +44 +44 +44 +44 +44 +ENDCHAR +STARTCHAR uni010340 +ENCODING 66368 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni010341 +ENCODING 66369 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +7C +04 +04 +04 +ENDCHAR +STARTCHAR uni010342 +ENCODING 66370 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +88 +88 +90 +E0 +A0 +90 +88 +84 +80 +ENDCHAR +STARTCHAR uni010343 +ENCODING 66371 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uni010344 +ENCODING 66372 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +92 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010345 +ENCODING 66373 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +44 +48 +28 +28 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010346 +ENCODING 66374 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +80 +FC +84 +80 +80 +FC +84 +80 +80 +80 +ENDCHAR +STARTCHAR uni010347 +ENCODING 66375 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +48 +30 +30 +48 +84 +84 +ENDCHAR +STARTCHAR uni010348 +ENCODING 66376 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +B4 +B4 +84 +84 +78 +ENDCHAR +STARTCHAR uni010349 +ENCODING 66377 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +48 +30 +48 +84 +ENDCHAR +STARTCHAR uni01034A +ENCODING 66378 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -1 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010350 +ENCODING 66384 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +84 +88 +08 +12 +14 +38 +30 +60 +40 +ENDCHAR +STARTCHAR uni010351 +ENCODING 66385 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +10 +7C +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni010352 +ENCODING 66386 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7E +92 +92 +50 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010353 +ENCODING 66387 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +08 +08 +08 +10 +20 +50 +88 +84 +82 +42 +ENDCHAR +STARTCHAR uni010354 +ENCODING 66388 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +88 +88 +90 +E0 +80 +80 +80 +ENDCHAR +STARTCHAR uni010355 +ENCODING 66389 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FE +92 +92 +92 +92 +92 +92 +92 +91 +91 +ENDCHAR +STARTCHAR uni010356 +ENCODING 66390 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FE +92 +92 +92 +92 +92 +92 +91 +9F +F0 +ENDCHAR +STARTCHAR uni010357 +ENCODING 66391 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +0C +74 +44 +44 +44 +84 +84 +84 +B4 +CC +ENDCHAR +STARTCHAR uni010358 +ENCODING 66392 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 9 3 0 +BITMAP +80 +40 +40 +40 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uni010359 +ENCODING 66393 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +84 +84 +08 +08 +08 +08 +08 +04 +ENDCHAR +STARTCHAR uni01035A +ENCODING 66394 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +14 +10 +10 +20 +20 +20 +FC +84 +84 +ENDCHAR +STARTCHAR uni01035B +ENCODING 66395 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +44 +44 +24 +28 +10 +10 +08 +08 +ENDCHAR +STARTCHAR uni01035C +ENCODING 66396 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 0 +BITMAP +8E +8A +52 +52 +22 +21 +ENDCHAR +STARTCHAR uni01035D +ENCODING 66397 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +42 +A2 +22 +14 +14 +08 +08 +ENDCHAR +STARTCHAR uni01035E +ENCODING 66398 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +98 +E4 +84 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01035F +ENCODING 66399 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +BC +C4 +04 +08 +08 +10 +10 +ENDCHAR +STARTCHAR uni010360 +ENCODING 66400 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +82 +84 +84 +44 +48 +28 +28 +10 +ENDCHAR +STARTCHAR uni010361 +ENCODING 66401 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C0 +A0 +80 +80 +80 +40 +40 +24 +28 +10 +ENDCHAR +STARTCHAR uni010362 +ENCODING 66402 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7E +82 +92 +50 +10 +10 +10 +10 +92 +7C +ENDCHAR +STARTCHAR uni010363 +ENCODING 66403 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +88 +94 +94 +A4 +A0 +C0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010364 +ENCODING 66404 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -1 +BITMAP +02 +01 +01 +01 +01 +12 +0A +04 +18 +E0 +80 +ENDCHAR +STARTCHAR uni010365 +ENCODING 66405 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +0C +12 +12 +2C +28 +28 +44 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni010366 +ENCODING 66406 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +91 +91 +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni010367 +ENCODING 66407 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +F0 +90 +90 +90 +10 +10 +10 +10 +10 +1E +ENDCHAR +STARTCHAR uni010368 +ENCODING 66408 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +BE +A2 +92 +92 +92 +92 +92 +92 +92 +F1 +ENDCHAR +STARTCHAR uni010369 +ENCODING 66409 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 2 0 +BITMAP +3C +44 +48 +88 +88 +88 +88 +88 +88 +84 +ENDCHAR +STARTCHAR uni01036A +ENCODING 66410 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +AA +AA +44 +ENDCHAR +STARTCHAR uni01036B +ENCODING 66411 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +4E +50 +20 +5C +82 +82 +92 +92 +AA +AA +44 +ENDCHAR +STARTCHAR uni01036C +ENCODING 66412 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 0 0 +BITMAP +04 +04 +08 +08 +10 +FC +20 +20 +40 +C0 +ENDCHAR +STARTCHAR uni01036D +ENCODING 66413 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01036E +ENCODING 66414 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FC +44 +28 +28 +10 +10 +28 +28 +40 +7E +ENDCHAR +STARTCHAR uni01036F +ENCODING 66415 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +F0 +90 +90 +90 +10 +14 +12 +12 +12 +1E +ENDCHAR +STARTCHAR uni010370 +ENCODING 66416 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +84 +84 +FC +ENDCHAR +STARTCHAR uni010371 +ENCODING 66417 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7E +92 +92 +90 +10 +10 +1C +12 +12 +1C +ENDCHAR +STARTCHAR uni010372 +ENCODING 66418 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +22 +1C +61 +91 +91 +0A +0A +0A +04 +04 +ENDCHAR +STARTCHAR uni010373 +ENCODING 66419 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +9B +6D +49 +49 +4A +48 +48 +48 +4A +4C +ENDCHAR +STARTCHAR uni010374 +ENCODING 66420 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +4C +B4 +A4 +A4 +24 +24 +24 +24 +25 +26 +ENDCHAR +STARTCHAR uni010375 +ENCODING 66421 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +82 +82 +54 +6C +44 +28 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni010376 +ENCODING 66422 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -6 10 +BITMAP +F0 +90 +38 +40 +ENDCHAR +STARTCHAR uni010377 +ENCODING 66423 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -7 10 +BITMAP +20 +70 +88 +88 +ENDCHAR +STARTCHAR uni010378 +ENCODING 66424 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -6 10 +BITMAP +E0 +A0 +A0 +E0 +ENDCHAR +STARTCHAR uni010379 +ENCODING 66425 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -8 10 +BITMAP +C2 +24 +28 +10 +ENDCHAR +STARTCHAR uni01037A +ENCODING 66426 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -5 10 +BITMAP +C0 +80 +A0 +C0 +ENDCHAR +STARTCHAR uni010380 +ENCODING 66432 +BBX 14 5 1 4 +BITMAP +8800 +CC00 +FFFC +CC00 +8800 +ENDCHAR +STARTCHAR uni010381 +ENCODING 66433 +BBX 14 14 1 -1 +BITMAP +7DF0 +38E0 +1040 +1040 +1040 +1040 +1040 +1040 +0000 +8800 +CC00 +FFFC +CC00 +8800 +ENDCHAR +STARTCHAR uni010382 +ENCODING 66434 +BBX 5 14 5 -1 +BITMAP +F8 +70 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010383 +ENCODING 66435 +BBX 5 14 5 -1 +BITMAP +F8 +70 +20 +20 +F8 +70 +20 +20 +F8 +70 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010384 +ENCODING 66436 +BBX 15 14 0 -1 +BITMAP +FFFE +739C +2108 +2108 +2108 +2108 +2108 +2108 +0000 +4440 +6660 +7FFE +6660 +4440 +ENDCHAR +STARTCHAR uni010385 +ENCODING 66437 +BBX 14 15 1 -1 +BITMAP +8000 +C000 +FFFC +C000 +8000 +8000 +C000 +FFFC +C000 +8000 +8000 +C000 +FFFC +C000 +8000 +ENDCHAR +STARTCHAR uni010386 +ENCODING 66438 +BBX 15 11 1 1 +BITMAP +8000 +C000 +F800 +C220 +8330 +03FE +8330 +C220 +F800 +C000 +8000 +ENDCHAR +STARTCHAR uni010387 +ENCODING 66439 +BBX 5 14 5 -1 +BITMAP +F8 +70 +20 +20 +F8 +70 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010388 +ENCODING 66440 +BBX 14 15 1 -2 +BITMAP +0F80 +0700 +0204 +0208 +0210 +8230 +C270 +FFF0 +C270 +8430 +0C10 +1C08 +0C04 +0400 +0200 +ENDCHAR +STARTCHAR uni010389 +ENCODING 66441 +BBX 14 14 1 -1 +BITMAP +0F80 +0700 +0204 +0208 +0210 +8230 +C270 +FFF0 +C270 +8230 +0210 +0208 +0204 +0200 +ENDCHAR +STARTCHAR uni01038A +ENCODING 66442 +BBX 11 14 2 -1 +BITMAP +FBE0 +71C0 +2080 +2080 +FBE0 +71C0 +2080 +2080 +FBE0 +71C0 +2080 +2080 +2080 +2080 +ENDCHAR +STARTCHAR uni01038B +ENCODING 66443 +BBX 15 11 1 1 +BITMAP +8000 +C000 +F800 +C200 +8300 +03FE +8300 +C200 +F800 +C000 +8000 +ENDCHAR +STARTCHAR uni01038C +ENCODING 66444 +BBX 15 14 1 -1 +BITMAP +07C0 +0380 +0130 +051C +091E +1110 +3110 +7120 +F120 +7140 +3140 +1100 +0900 +0500 +ENDCHAR +STARTCHAR uni01038D +ENCODING 66445 +BBX 15 14 0 -1 +BITMAP +FFFE +739C +2108 +2108 +2108 +2108 +2108 +2108 +2108 +2108 +2108 +2108 +2108 +2108 +ENDCHAR +STARTCHAR uni01038E +ENCODING 66446 +BBX 12 14 2 -1 +BITMAP +81F0 +C0E0 +FFC0 +C040 +8040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni01038F +ENCODING 66447 +BBX 14 11 1 1 +BITMAP +0460 +0838 +103C +3020 +7020 +F040 +7040 +3080 +1080 +0900 +0500 +ENDCHAR +STARTCHAR uni010390 +ENCODING 66448 +BBX 14 5 1 4 +BITMAP +8880 +CCC0 +FFFC +CCC0 +8880 +ENDCHAR +STARTCHAR uni010391 +ENCODING 66449 +BBX 14 11 1 1 +BITMAP +8004 +C008 +FF90 +C030 +8070 +00F0 +8070 +C030 +FF90 +C008 +8004 +ENDCHAR +STARTCHAR uni010392 +ENCODING 66450 +BBX 11 11 2 1 +BITMAP +FBE0 +71C0 +2080 +2080 +2080 +0000 +1F00 +0E00 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni010393 +ENCODING 66451 +BBX 6 11 5 1 +BITMAP +04 +08 +10 +30 +70 +F0 +70 +30 +10 +08 +04 +ENDCHAR +STARTCHAR uni010394 +ENCODING 66452 +BBX 14 11 1 1 +BITMAP +8000 +C000 +FFFC +C000 +8000 +0000 +8000 +C000 +FFFC +C000 +8000 +ENDCHAR +STARTCHAR uni010395 +ENCODING 66453 +BBX 11 14 2 -1 +BITMAP +FBE0 +71C0 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +2080 +ENDCHAR +STARTCHAR uni010396 +ENCODING 66454 +BBX 14 11 1 1 +BITMAP +0004 +0008 +0010 +8030 +C070 +FFF0 +C070 +8030 +0010 +0008 +0004 +ENDCHAR +STARTCHAR uni010397 +ENCODING 66455 +BBX 15 11 1 1 +BITMAP +8800 +CC00 +FF80 +CC20 +8830 +003E +8830 +CC20 +FF80 +CC00 +8800 +ENDCHAR +STARTCHAR uni010398 +ENCODING 66456 +BBX 6 14 4 -1 +BITMAP +7C +38 +10 +14 +18 +10 +30 +70 +F0 +70 +30 +10 +18 +14 +ENDCHAR +STARTCHAR uni010399 +ENCODING 66457 +BBX 14 10 1 0 +BITMAP +0008 +8010 +C020 +FFFC +C080 +8100 +1E00 +0E00 +0600 +0200 +ENDCHAR +STARTCHAR uni01039A +ENCODING 66458 +BBX 14 5 1 4 +BITMAP +8000 +C000 +FFFC +C000 +8000 +ENDCHAR +STARTCHAR uni01039B +ENCODING 66459 +BBX 14 16 1 -2 +BITMAP +8000 +C000 +FFFC +C000 +8000 +8000 +C000 +FFFC +C000 +8000 +8000 +C000 +FFFC +DC00 +8800 +0800 +ENDCHAR +STARTCHAR uni01039C +ENCODING 66460 +BBX 15 15 0 -2 +BITMAP +FFFE +739C +2108 +2108 +2108 +2108 +2108 +2108 +2108 +0000 +4000 +6000 +7FFE +6000 +4000 +ENDCHAR +STARTCHAR uni01039D +ENCODING 66461 +BBX 13 15 1 -1 +BITMAP +2008 +4F90 +C730 +4210 +2208 +2208 +4210 +C230 +4210 +2208 +2208 +4210 +C230 +4210 +2208 +ENDCHAR +STARTCHAR uni01039F +ENCODING 66463 +BBX 5 5 5 3 +BITMAP +F8 +70 +20 +20 +20 +ENDCHAR +STARTCHAR uni0103A0 +ENCODING 66464 +BBX 15 14 1 -1 +BITMAP +8000 +C000 +BFFE +C000 +8000 +0000 +FFFE +5294 +2108 +2108 +2108 +2108 +2108 +2108 +ENDCHAR +STARTCHAR uni0103A1 +ENCODING 66465 +BBX 14 14 1 -1 +BITMAP +8800 +CC00 +BBFC +CC00 +8800 +0000 +7DF0 +28A0 +1040 +1040 +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni0103A2 +ENCODING 66466 +BBX 16 14 0 -1 +BITMAP +0100 +0580 +097F +1180 +3100 +5000 +93FF +514A +3084 +1084 +0884 +0484 +0084 +0084 +ENDCHAR +STARTCHAR uni0103A3 +ENCODING 66467 +BBX 14 14 1 -1 +BITMAP +F800 +5000 +2400 +2600 +25FC +2600 +2400 +2000 +2400 +2600 +25FC +2600 +2400 +2000 +ENDCHAR +STARTCHAR uni0103A4 +ENCODING 66468 +BBX 12 14 2 -1 +BITMAP +01F0 +04A0 +0840 +1040 +3040 +5040 +9040 +5040 +3040 +1040 +0840 +0440 +0040 +0040 +ENDCHAR +STARTCHAR uni0103A5 +ENCODING 66469 +BBX 16 14 0 -1 +BITMAP +0FF8 +0550 +0220 +0A20 +1220 +3228 +522C +922B +522C +3228 +1220 +0A20 +0220 +0220 +ENDCHAR +STARTCHAR uni0103A6 +ENCODING 66470 +BBX 16 13 0 0 +BITMAP +0110 +0598 +0977 +1198 +3110 +5180 +917F +5180 +3100 +1180 +097F +0580 +0100 +ENDCHAR +STARTCHAR uni0103A7 +ENCODING 66471 +BBX 16 14 0 -1 +BITMAP +01FF +00AA +0044 +1144 +2244 +6644 +AA44 +6644 +2244 +1144 +0044 +0044 +0044 +0044 +ENDCHAR +STARTCHAR uni0103A8 +ENCODING 66472 +BBX 15 15 1 -1 +BITMAP +8000 +C000 +BFE0 +C000 +8000 +0000 +FBE0 +5140 +2080 +20A0 +20B0 +20AE +20B0 +20A0 +2080 +ENDCHAR +STARTCHAR uni0103A9 +ENCODING 66473 +BBX 14 14 1 -1 +BITMAP +0F80 +0500 +0204 +0208 +0210 +8230 +C250 +BF90 +C250 +8230 +0210 +0208 +0204 +0200 +ENDCHAR +STARTCHAR uni0103AA +ENCODING 66474 +BBX 15 13 1 0 +BITMAP +0040 +0060 +015E +0260 +8640 +CA60 +B25E +CA60 +8640 +0260 +015E +0060 +0040 +ENDCHAR +STARTCHAR uni0103AB +ENCODING 66475 +BBX 15 14 1 -1 +BITMAP +0FBE +0514 +0208 +83F8 +C2A8 +BA48 +C248 +8248 +C248 +BA48 +C248 +8248 +0248 +0248 +ENDCHAR +STARTCHAR uni0103AC +ENCODING 66476 +BBX 16 14 0 -1 +BITMAP +FFF8 +5550 +2220 +2220 +2228 +222C +222B +222C +2228 +2220 +2220 +2220 +2220 +2220 +ENDCHAR +STARTCHAR uni0103AD +ENCODING 66477 +BBX 14 14 1 -1 +BITMAP +8000 +C000 +BFFC +C000 +8000 +0000 +7DF0 +28A0 +1040 +1040 +1040 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni0103AE +ENCODING 66478 +BBX 15 15 1 -1 +BITMAP +8000 +C3FE +BD54 +C088 +8088 +8088 +C088 +BE88 +C088 +8088 +8088 +C088 +BE88 +C088 +8088 +ENDCHAR +STARTCHAR uni0103AF +ENCODING 66479 +BBX 16 14 0 -1 +BITMAP +001F +020A +0B04 +12F4 +3344 +5264 +905C +5264 +3344 +12F4 +0B04 +0204 +0004 +0004 +ENDCHAR +STARTCHAR uni0103B0 +ENCODING 66480 +BBX 14 14 1 -1 +BITMAP +F87C +5028 +2090 +2110 +2310 +2510 +2910 +2510 +2310 +2110 +2090 +2010 +2010 +2010 +ENDCHAR +STARTCHAR uni0103B1 +ENCODING 66481 +BBX 14 15 1 -1 +BITMAP +8000 +C000 +BFFC +C800 +8C00 +0BFC +8C00 +C800 +BFFC +C000 +BFF0 +14A0 +0840 +0840 +0840 +ENDCHAR +STARTCHAR uni0103B2 +ENCODING 66482 +BBX 14 14 1 -1 +BITMAP +007C +8028 +C010 +BFD0 +C010 +8010 +0010 +8010 +C010 +BFD0 +C010 +8010 +0010 +0010 +ENDCHAR +STARTCHAR uni0103B3 +ENCODING 66483 +BBX 15 14 0 -1 +BITMAP +F800 +5042 +2084 +2108 +2318 +2528 +2948 +2528 +2318 +2108 +2084 +2042 +2000 +2000 +ENDCHAR +STARTCHAR uni0103B4 +ENCODING 66484 +BBX 15 11 0 1 +BITMAP +8002 +C004 +BFC8 +C018 +8028 +0048 +8028 +C018 +BFC8 +C004 +8002 +ENDCHAR +STARTCHAR uni0103B5 +ENCODING 66485 +BBX 16 11 0 1 +BITMAP +0010 +0858 +1097 +3198 +5290 +9480 +5290 +3198 +1097 +0858 +0010 +ENDCHAR +STARTCHAR uni0103B6 +ENCODING 66486 +BBX 15 14 0 -1 +BITMAP +0FBE +0514 +0208 +0208 +83F8 +C2A8 +BA48 +C248 +8248 +0248 +0248 +0248 +0248 +0248 +ENDCHAR +STARTCHAR uni0103B7 +ENCODING 66487 +BBX 15 14 0 -1 +BITMAP +F800 +5020 +20B0 +212E +2330 +2520 +2D00 +2520 +2330 +212E +20B0 +2020 +2000 +2000 +ENDCHAR +STARTCHAR uni0103B8 +ENCODING 66488 +BBX 16 11 0 1 +BITMAP +8010 +C020 +BE40 +D0D0 +9958 +1657 +9958 +D0D0 +BE40 +C020 +8010 +ENDCHAR +STARTCHAR uni0103B9 +ENCODING 66489 +BBX 15 14 0 -1 +BITMAP +F800 +5040 +2080 +2100 +2340 +2560 +295E +2560 +2340 +2100 +2080 +2040 +2000 +2000 +ENDCHAR +STARTCHAR uni0103BA +ENCODING 66490 +BBX 15 14 0 -1 +BITMAP +1F00 +0A00 +0500 +0580 +057E +85A0 +C530 +BC2E +C530 +85A0 +057E +0580 +0500 +0400 +ENDCHAR +STARTCHAR uni0103BB +ENCODING 66491 +BBX 14 14 1 -1 +BITMAP +0F80 +0500 +0200 +8200 +C200 +BFFC +C200 +8200 +0000 +7DF0 +28A0 +1040 +1040 +1040 +ENDCHAR +STARTCHAR uni0103BC +ENCODING 66492 +BBX 14 15 1 -1 +BITMAP +8000 +C07C +BF28 +C010 +8010 +8010 +C010 +BFD0 +C010 +8010 +8010 +C010 +BFD0 +C010 +8010 +ENDCHAR +STARTCHAR uni0103BD +ENCODING 66493 +BBX 16 11 0 1 +BITMAP +0021 +0042 +0084 +818C +C294 +BCA4 +C294 +818C +0084 +0042 +0021 +ENDCHAR +STARTCHAR uni0103BE +ENCODING 66494 +BBX 13 14 2 -1 +BITMAP +00F8 +0050 +0420 +0620 +05E0 +8620 +C420 +B820 +C420 +8620 +05E0 +0620 +0420 +0020 +ENDCHAR +STARTCHAR uni0103BF +ENCODING 66495 +BBX 14 14 1 -1 +BITMAP +F800 +5000 +2400 +2600 +25FC +2640 +2460 +205C +2460 +2640 +25FC +2600 +2400 +2000 +ENDCHAR +STARTCHAR uni0103C0 +ENCODING 66496 +BBX 15 14 1 -1 +BITMAP +F83E +5014 +2008 +2008 +2888 +2CC8 +2BB8 +2CC8 +2888 +2008 +2008 +2008 +2008 +2008 +ENDCHAR +STARTCHAR uni0103C1 +ENCODING 66497 +BBX 14 13 1 0 +BITMAP +8000 +C000 +BFFC +C000 +8210 +0420 +0C60 +14A0 +2520 +14A0 +0C60 +0420 +0210 +ENDCHAR +STARTCHAR uni0103C2 +ENCODING 66498 +BBX 14 14 1 -1 +BITMAP +8000 +C000 +BFFC +C000 +8000 +8000 +C000 +BFFC +C000 +BFF0 +14A0 +0840 +0840 +0840 +ENDCHAR +STARTCHAR uni0103C3 +ENCODING 66499 +BBX 16 11 0 1 +BITMAP +0501 +0982 +1164 +318C +5114 +9024 +5114 +318C +1164 +0982 +0501 +ENDCHAR +STARTCHAR uni0103C8 +ENCODING 66504 +BBX 16 14 0 -1 +BITMAP +01F0 +88A0 +CC41 +BB42 +CC46 +884A +0052 +884A +CC46 +BB42 +CC41 +8840 +0040 +0040 +ENDCHAR +STARTCHAR uni0103C9 +ENCODING 66505 +BBX 16 16 0 -2 +BITMAP +0880 +0CDF +0BBA +0CC4 +8884 +CCC4 +BBBC +CCC4 +8884 +CCC4 +BBBC +CCC4 +8884 +0CC4 +0BBC +0CC0 +ENDCHAR +STARTCHAR uni0103CA +ENCODING 66506 +BBX 16 16 0 -2 +BITMAP +1200 +1BF8 +16D0 +1B20 +9221 +DB22 +B6E6 +DB2A +9232 +DB2A +B6E6 +DB22 +9221 +1B20 +16E0 +1B00 +ENDCHAR +STARTCHAR uni0103CB +ENCODING 66507 +BBX 16 14 0 -1 +BITMAP +01F0 +00A0 +8040 +C141 +B242 +C646 +8A4A +1252 +8A4A +C646 +B242 +C141 +8040 +0040 +ENDCHAR +STARTCHAR uni0103CC +ENCODING 66508 +BBX 14 15 1 -1 +BITMAP +1100 +227C +6628 +AA10 +6610 +2210 +1110 +0010 +1110 +2210 +6610 +AA10 +6610 +2210 +1110 +ENDCHAR +STARTCHAR uni0103CD +ENCODING 66509 +BBX 16 15 0 -1 +BITMAP +1200 +25FF +6CAA +B444 +6C44 +2444 +1244 +0044 +1244 +2444 +6C44 +B444 +6C44 +2444 +1244 +ENDCHAR +STARTCHAR uni0103CE +ENCODING 66510 +BBX 16 9 0 2 +BITMAP +0011 +0022 +9066 +D8AA +B732 +D8AA +9066 +0022 +0011 +ENDCHAR +STARTCHAR uni0103CF +ENCODING 66511 +BBX 15 15 0 -1 +BITMAP +4440 +6660 +5DDE +6660 +4440 +0000 +0842 +1084 +318C +5294 +94A4 +5294 +318C +1084 +0842 +ENDCHAR +STARTCHAR uni0103D0 +ENCODING 66512 +BBX 10 10 3 1 +BITMAP +1000 +3000 +5000 +F000 +0800 +0400 +0200 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uni0103D1 +ENCODING 66513 +BBX 5 14 5 -1 +BITMAP +F8 +50 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0103D2 +ENCODING 66514 +BBX 5 14 5 -1 +BITMAP +F8 +50 +20 +20 +F8 +50 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0103D3 +ENCODING 66515 +BBX 6 11 5 1 +BITMAP +04 +08 +10 +30 +50 +90 +50 +30 +10 +08 +04 +ENDCHAR +STARTCHAR uni0103D4 +ENCODING 66516 +BBX 4 15 6 -1 +BITMAP +10 +20 +60 +A0 +60 +20 +10 +00 +10 +20 +60 +A0 +60 +20 +10 +ENDCHAR +STARTCHAR uni0103D5 +ENCODING 66517 +BBX 11 14 2 -1 +BITMAP +8020 +C060 +BFA0 +C060 +8020 +1F00 +0A00 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni010400 +ENCODING 66560 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +04 +7C +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni010401 +ENCODING 66561 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +78 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni010402 +ENCODING 66562 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +84 +84 +74 +84 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni010403 +ENCODING 66563 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +54 +54 +92 +8E +82 +82 +44 +44 +38 +ENDCHAR +STARTCHAR uni010404 +ENCODING 66564 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +44 +82 +82 +82 +82 +44 +44 +38 +ENDCHAR +STARTCHAR uni010405 +ENCODING 66565 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +54 +54 +92 +92 +92 +92 +54 +54 +38 +ENDCHAR +STARTCHAR uni010406 +ENCODING 66566 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +20 +A0 +60 +30 +28 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010407 +ENCODING 66567 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +04 +04 +04 +74 +8C +ENDCHAR +STARTCHAR uni010408 +ENCODING 66568 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +08 +08 +08 +08 +08 +88 +48 +28 +18 +ENDCHAR +STARTCHAR uni010409 +ENCODING 66569 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +02 +02 +02 +02 +02 +02 +02 +92 +5A +36 +ENDCHAR +STARTCHAR uni01040A +ENCODING 66570 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C4 +B8 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01040B +ENCODING 66571 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +60 +90 +90 +90 +70 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01040C +ENCODING 66572 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +78 +94 +94 +64 +ENDCHAR +STARTCHAR uni01040D +ENCODING 66573 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +A8 +A4 +94 +6C +84 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni01040E +ENCODING 66574 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +82 +82 +82 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni01040F +ENCODING 66575 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +42 +A2 +A4 +7F +24 +24 +28 +28 +28 +10 +ENDCHAR +STARTCHAR uni010410 +ENCODING 66576 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +98 +A4 +A4 +78 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010411 +ENCODING 66577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni010412 +ENCODING 66578 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +74 +8C +84 +84 +74 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni010413 +ENCODING 66579 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +70 +88 +88 +88 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010414 +ENCODING 66580 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +34 +4C +44 +8C +F4 +84 +84 +44 +4C +34 +ENDCHAR +STARTCHAR uni010415 +ENCODING 66581 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +84 +80 +80 +80 +80 +84 +44 +38 +ENDCHAR +STARTCHAR uni010416 +ENCODING 66582 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +60 +90 +80 +80 +70 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni010417 +ENCODING 66583 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +82 +82 +82 +82 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni010418 +ENCODING 66584 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +54 +92 +8E +82 +82 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni010419 +ENCODING 66585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +30 +48 +88 +88 +F0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01041A +ENCODING 66586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +84 +84 +B8 +84 +84 +84 +44 +38 +ENDCHAR +STARTCHAR uni01041B +ENCODING 66587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni01041C +ENCODING 66588 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +44 +28 +10 +28 +44 +44 +38 +ENDCHAR +STARTCHAR uni01041D +ENCODING 66589 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +18 +24 +24 +A8 +70 +1C +2A +48 +48 +30 +ENDCHAR +STARTCHAR uni01041E +ENCODING 66590 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +30 +48 +80 +80 +E0 +90 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni01041F +ENCODING 66591 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +B8 +C4 +82 +82 +82 +82 +82 +82 +C4 +B8 +ENDCHAR +STARTCHAR uni010420 +ENCODING 66592 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni010421 +ENCODING 66593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +54 +B2 +92 +7C +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010422 +ENCODING 66594 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +88 +88 +70 +ENDCHAR +STARTCHAR uni010423 +ENCODING 66595 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +84 +04 +04 +04 +04 +84 +88 +70 +ENDCHAR +STARTCHAR uni010424 +ENCODING 66596 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +80 +80 +80 +80 +B0 +D0 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010425 +ENCODING 66597 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +84 +ENDCHAR +STARTCHAR uni010426 +ENCODING 66598 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +02 +02 +12 +0A +06 +03 +02 +92 +5A +36 +ENDCHAR +STARTCHAR uni010427 +ENCODING 66599 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +54 +54 +92 +B2 +9A +92 +54 +54 +38 +ENDCHAR +STARTCHAR uni010428 +ENCODING 66600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +78 +84 +04 +7C +84 +84 +78 +ENDCHAR +STARTCHAR uni010429 +ENCODING 66601 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +78 +84 +80 +70 +80 +84 +78 +ENDCHAR +STARTCHAR uni01042A +ENCODING 66602 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +78 +84 +84 +74 +84 +84 +78 +ENDCHAR +STARTCHAR uni01042B +ENCODING 66603 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +38 +54 +92 +8E +82 +44 +38 +ENDCHAR +STARTCHAR uni01042C +ENCODING 66604 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01042D +ENCODING 66605 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +38 +54 +92 +92 +92 +54 +38 +ENDCHAR +STARTCHAR uni01042E +ENCODING 66606 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +20 +A0 +60 +30 +28 +20 +20 +ENDCHAR +STARTCHAR uni01042F +ENCODING 66607 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +04 +04 +04 +04 +04 +74 +8C +ENDCHAR +STARTCHAR uni010430 +ENCODING 66608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +10 +10 +10 +10 +90 +50 +30 +ENDCHAR +STARTCHAR uni010431 +ENCODING 66609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +02 +02 +02 +02 +92 +5A +36 +ENDCHAR +STARTCHAR uni010432 +ENCODING 66610 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +C4 +B8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010433 +ENCODING 66611 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +60 +90 +90 +70 +10 +10 +10 +ENDCHAR +STARTCHAR uni010434 +ENCODING 66612 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +10 +10 +10 +10 +78 +94 +64 +ENDCHAR +STARTCHAR uni010435 +ENCODING 66613 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +78 +94 +94 +6C +84 +84 +78 +ENDCHAR +STARTCHAR uni010436 +ENCODING 66614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +82 +82 +82 +82 +92 +92 +6C +ENDCHAR +STARTCHAR uni010437 +ENCODING 66615 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 0 +BITMAP +42 +A2 +A4 +7F +24 +28 +10 +ENDCHAR +STARTCHAR uni010438 +ENCODING 66616 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +98 +A4 +78 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010439 +ENCODING 66617 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +F8 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni01043A +ENCODING 66618 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +74 +8C +84 +7C +84 +8C +74 +ENDCHAR +STARTCHAR uni01043B +ENCODING 66619 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +70 +88 +88 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni01043C +ENCODING 66620 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +34 +4C +8C +F4 +84 +4C +34 +ENDCHAR +STARTCHAR uni01043D +ENCODING 66621 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +38 +44 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni01043E +ENCODING 66622 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +60 +90 +80 +70 +20 +40 +80 +ENDCHAR +STARTCHAR uni01043F +ENCODING 66623 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +38 +44 +82 +82 +92 +92 +6C +ENDCHAR +STARTCHAR uni010440 +ENCODING 66624 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +38 +54 +92 +8E +82 +92 +6C +ENDCHAR +STARTCHAR uni010441 +ENCODING 66625 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +70 +88 +88 +F0 +80 +80 +80 +ENDCHAR +STARTCHAR uni010442 +ENCODING 66626 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +78 +84 +84 +B8 +84 +84 +78 +ENDCHAR +STARTCHAR uni010443 +ENCODING 66627 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +80 +80 +80 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni010444 +ENCODING 66628 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +82 +44 +28 +10 +28 +28 +10 +ENDCHAR +STARTCHAR uni010445 +ENCODING 66629 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 0 +BITMAP +18 +24 +A8 +7E +15 +24 +18 +ENDCHAR +STARTCHAR uni010446 +ENCODING 66630 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +60 +90 +80 +E0 +90 +90 +60 +ENDCHAR +STARTCHAR uni010447 +ENCODING 66631 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +B8 +C4 +84 +84 +84 +C4 +B8 +ENDCHAR +STARTCHAR uni010448 +ENCODING 66632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +78 +84 +80 +78 +04 +84 +78 +ENDCHAR +STARTCHAR uni010449 +ENCODING 66633 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +10 +D4 +B2 +7C +10 +10 +10 +ENDCHAR +STARTCHAR uni01044A +ENCODING 66634 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +80 +80 +80 +80 +88 +88 +70 +ENDCHAR +STARTCHAR uni01044B +ENCODING 66635 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +70 +88 +04 +04 +04 +88 +70 +ENDCHAR +STARTCHAR uni01044C +ENCODING 66636 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +80 +80 +80 +B0 +D0 +10 +10 +ENDCHAR +STARTCHAR uni01044D +ENCODING 66637 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +84 +8C +94 +A4 +C4 +84 +84 +ENDCHAR +STARTCHAR uni01044E +ENCODING 66638 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 0 +BITMAP +02 +0A +06 +03 +92 +5A +36 +ENDCHAR +STARTCHAR uni01044F +ENCODING 66639 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +38 +54 +92 +BA +92 +54 +38 +ENDCHAR +STARTCHAR uni010450 +ENCODING 66640 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +E0 +10 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010451 +ENCODING 66641 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +10 +30 +50 +90 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010452 +ENCODING 66642 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +08 +08 +08 +68 +98 +88 +80 +80 +40 +38 +ENDCHAR +STARTCHAR uni010453 +ENCODING 66643 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +10 +E0 +ENDCHAR +STARTCHAR uni010454 +ENCODING 66644 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +40 +20 +10 +48 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni010455 +ENCODING 66645 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +80 +80 +40 +20 +10 +08 +08 +08 +F0 +ENDCHAR +STARTCHAR uni010456 +ENCODING 66646 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +08 +10 +20 +40 +80 +80 +80 +40 +3C +ENDCHAR +STARTCHAR uni010457 +ENCODING 66647 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +78 +10 +20 +40 +80 +80 +80 +40 +3C +ENDCHAR +STARTCHAR uni010458 +ENCODING 66648 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +40 +40 +20 +20 +10 +10 +08 +08 +ENDCHAR +STARTCHAR uni010459 +ENCODING 66649 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +88 +88 +88 +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni01045A +ENCODING 66650 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +40 +38 +ENDCHAR +STARTCHAR uni01045B +ENCODING 66651 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 -1 +BITMAP +80 +80 +80 +80 +80 +90 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni01045C +ENCODING 66652 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +E0 +10 +08 +08 +88 +C8 +B0 +80 +80 +80 +ENDCHAR +STARTCHAR uni01045D +ENCODING 66653 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +38 +40 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01045E +ENCODING 66654 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +30 +48 +84 +84 +84 +88 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni01045F +ENCODING 66655 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +F0 +08 +08 +08 +10 +20 +40 +80 +80 +70 +ENDCHAR +STARTCHAR uni010460 +ENCODING 66656 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +F0 +08 +04 +04 +04 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni010461 +ENCODING 66657 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +F0 +08 +04 +04 +04 +08 +10 +20 +78 +80 +ENDCHAR +STARTCHAR uni010462 +ENCODING 66658 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +08 +08 +10 +10 +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni010463 +ENCODING 66659 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +88 +50 +20 +50 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni010464 +ENCODING 66660 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +38 +40 +80 +80 +80 +40 +38 +ENDCHAR +STARTCHAR uni010465 +ENCODING 66661 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +06 +08 +10 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni010466 +ENCODING 66662 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 7 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010467 +ENCODING 66663 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +80 +80 +80 +80 +80 +40 +38 +ENDCHAR +STARTCHAR uni010468 +ENCODING 66664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +08 +08 +08 +08 +08 +10 +E0 +ENDCHAR +STARTCHAR uni010469 +ENCODING 66665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +38 +40 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01046A +ENCODING 66666 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +E0 +10 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni01046B +ENCODING 66667 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +82 +82 +44 +44 +28 +28 +10 +ENDCHAR +STARTCHAR uni01046C +ENCODING 66668 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +10 +20 +40 +C0 +20 +20 +18 +ENDCHAR +STARTCHAR uni01046D +ENCODING 66669 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +1C +20 +40 +38 +08 +10 +E0 +ENDCHAR +STARTCHAR uni01046E +ENCODING 66670 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +E0 +10 +08 +08 +08 +10 +E0 +ENDCHAR +STARTCHAR uni01046F +ENCODING 66671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +C0 +20 +10 +10 +10 +08 +06 +ENDCHAR +STARTCHAR uni010470 +ENCODING 66672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +80 +80 +B0 +D0 +10 +10 +10 +ENDCHAR +STARTCHAR uni010471 +ENCODING 66673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +FC +80 +80 +80 +80 +40 +38 +ENDCHAR +STARTCHAR uni010472 +ENCODING 66674 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +FC +04 +04 +04 +04 +08 +70 +ENDCHAR +STARTCHAR uni010473 +ENCODING 66675 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +F8 +08 +10 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010474 +ENCODING 66676 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +70 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni010475 +ENCODING 66677 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +10 +28 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni010476 +ENCODING 66678 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +C0 +20 +20 +18 +10 +20 +40 +ENDCHAR +STARTCHAR uni010477 +ENCODING 66679 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +E0 +10 +08 +70 +40 +20 +1C +ENDCHAR +STARTCHAR uni010478 +ENCODING 66680 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +78 +84 +82 +62 +22 +42 +8C +ENDCHAR +STARTCHAR uni010479 +ENCODING 66681 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +CC +22 +22 +C2 +82 +44 +38 +ENDCHAR +STARTCHAR uni01047A +ENCODING 66682 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +38 +44 +42 +32 +42 +82 +8C +ENDCHAR +STARTCHAR uni01047B +ENCODING 66683 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +8C +82 +42 +32 +42 +44 +38 +ENDCHAR +STARTCHAR uni01047C +ENCODING 66684 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +38 +44 +84 +84 +84 +84 +98 +ENDCHAR +STARTCHAR uni01047D +ENCODING 66685 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +B8 +C4 +84 +84 +84 +84 +98 +ENDCHAR +STARTCHAR uni01047E +ENCODING 66686 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +9C +A0 +C0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01047F +ENCODING 66687 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +80 +80 +80 +88 +54 +54 +54 +52 +22 +22 +ENDCHAR +STARTCHAR uni010480 +ENCODING 66688 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +44 +28 +10 +28 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni010481 +ENCODING 66689 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +A8 +A8 +A8 +A8 +58 +08 +10 +7C +90 +60 +ENDCHAR +STARTCHAR uni010482 +ENCODING 66690 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +50 +B0 +B0 +50 +10 +22 +22 +22 +1C +ENDCHAR +STARTCHAR uni010483 +ENCODING 66691 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 2 0 +BITMAP +20 +20 +20 +40 +40 +40 +40 +80 +80 +80 +ENDCHAR +STARTCHAR uni010484 +ENCODING 66692 +BBX 12 10 1 0 +BITMAP +2080 +3180 +2E80 +2080 +4100 +4100 +4110 +8210 +8220 +81C0 +ENDCHAR +STARTCHAR uni010485 +ENCODING 66693 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +80 +80 +E0 +90 +92 +92 +92 +8C +ENDCHAR +STARTCHAR uni010486 +ENCODING 66694 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +44 +82 +82 +82 +82 +44 +44 +38 +ENDCHAR +STARTCHAR uni010487 +ENCODING 66695 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +62 +9E +02 +04 +04 +04 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010488 +ENCODING 66696 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +08 +10 +20 +78 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni010489 +ENCODING 66697 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +78 +10 +20 +40 +44 +38 +ENDCHAR +STARTCHAR uni01048A +ENCODING 66698 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +F0 +10 +10 +20 +20 +20 +46 +44 +44 +38 +ENDCHAR +STARTCHAR uni01048B +ENCODING 66699 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +48 +48 +48 +48 +38 +08 +10 +7C +90 +60 +ENDCHAR +STARTCHAR uni01048C +ENCODING 66700 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +60 +90 +90 +90 +60 +90 +92 +92 +92 +8C +ENDCHAR +STARTCHAR uni01048D +ENCODING 66701 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +90 +90 +90 +90 +70 +10 +20 +24 +24 +18 +ENDCHAR +STARTCHAR uni01048E +ENCODING 66702 +BBX 14 10 1 0 +BITMAP +7030 +8848 +8848 +08F0 +0B40 +3C40 +4840 +4844 +4844 +3038 +ENDCHAR +STARTCHAR uni01048F +ENCODING 66703 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +24 +24 +24 +1C +04 +04 +08 +68 +98 +88 +ENDCHAR +STARTCHAR uni010490 +ENCODING 66704 +BBX 10 10 3 0 +BITMAP +1C00 +2200 +2200 +2200 +4400 +4440 +4440 +8880 +8880 +8700 +ENDCHAR +STARTCHAR uni010491 +ENCODING 66705 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +40 +40 +40 +70 +48 +08 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni010492 +ENCODING 66706 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +70 +88 +08 +08 +30 +40 +80 +80 +88 +70 +ENDCHAR +STARTCHAR uni010493 +ENCODING 66707 +BBX 13 11 1 0 +BITMAP +8800 +8800 +9800 +6B00 +0C80 +1088 +1088 +1110 +2110 +2110 +20E0 +ENDCHAR +STARTCHAR uni010494 +ENCODING 66708 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 2 0 +BITMAP +88 +88 +44 +44 +38 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni010495 +ENCODING 66709 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 2 0 +BITMAP +20 +50 +50 +20 +50 +48 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni010496 +ENCODING 66710 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +70 +88 +80 +80 +60 +10 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni010497 +ENCODING 66711 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +80 +80 +80 +80 +80 +80 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni010498 +ENCODING 66712 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +7C +04 +04 +08 +30 +ENDCHAR +STARTCHAR uni010499 +ENCODING 66713 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +60 +90 +10 +20 +30 +28 +49 +49 +49 +46 +ENDCHAR +STARTCHAR uni01049A +ENCODING 66714 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +1C +22 +02 +02 +04 +04 +04 +74 +88 +88 +ENDCHAR +STARTCHAR uni01049B +ENCODING 66715 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +70 +88 +80 +80 +80 +90 +70 +10 +10 +10 +ENDCHAR +STARTCHAR uni01049C +ENCODING 66716 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +22 +22 +22 +44 +44 +44 +88 +89 +89 +76 +ENDCHAR +STARTCHAR uni01049D +ENCODING 66717 +BBX 14 10 1 0 +BITMAP +6000 +9000 +9000 +1DC0 +2220 +2220 +2224 +4444 +4448 +4430 +ENDCHAR +STARTCHAR uni0104A0 +ENCODING 66720 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +44 +82 +82 +82 +82 +44 +44 +38 +ENDCHAR +STARTCHAR uni0104A1 +ENCODING 66721 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 3 0 +BITMAP +38 +40 +40 +40 +20 +20 +10 +10 +10 +E0 +ENDCHAR +STARTCHAR uni0104A2 +ENCODING 66722 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +80 +80 +60 +80 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni0104A3 +ENCODING 66723 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +20 +40 +40 +60 +90 +90 +92 +92 +8C +ENDCHAR +STARTCHAR uni0104A4 +ENCODING 66724 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +44 +28 +10 +28 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni0104A5 +ENCODING 66725 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +18 +24 +24 +38 +40 +80 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni0104A6 +ENCODING 66726 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +88 +88 +88 +70 +10 +10 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uni0104A7 +ENCODING 66727 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +02 +02 +02 +04 +04 +04 +88 +70 +ENDCHAR +STARTCHAR uni0104A8 +ENCODING 66728 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +1C +22 +40 +40 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni0104A9 +ENCODING 66729 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +22 +22 +22 +44 +44 +44 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni0104B0 +ENCODING 66736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni0104B1 +ENCODING 66737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +28 +28 +44 +44 +54 +92 +92 +92 +ENDCHAR +STARTCHAR uni0104B2 +ENCODING 66738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +28 +28 +44 +44 +54 +BA +92 +82 +ENDCHAR +STARTCHAR uni0104B3 +ENCODING 66739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +10 +10 +10 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni0104B4 +ENCODING 66740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +80 +80 +B8 +C4 +84 +84 +84 +F8 +90 +88 +04 +02 +ENDCHAR +STARTCHAR uni0104B5 +ENCODING 66741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +80 +80 +88 +94 +94 +A4 +A4 +64 +ENDCHAR +STARTCHAR uni0104B6 +ENCODING 66742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +80 +80 +88 +94 +94 +A4 +AE +64 +ENDCHAR +STARTCHAR uni0104B7 +ENCODING 66743 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +74 +8C +88 +88 +88 +88 +88 +88 +8C +74 +ENDCHAR +STARTCHAR uni0104B8 +ENCODING 66744 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +74 +8C +88 +88 +A8 +A8 +88 +88 +8C +74 +ENDCHAR +STARTCHAR uni0104B9 +ENCODING 66745 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +1C +20 +20 +20 +10 +08 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0104BA +ENCODING 66746 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +1C +24 +24 +10 +08 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0104BB +ENCODING 66747 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0104BC +ENCODING 66748 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +88 +90 +A0 +D0 +88 +84 +84 +84 +84 +08 +30 +ENDCHAR +STARTCHAR uni0104BD +ENCODING 66749 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +42 +E4 +48 +50 +68 +44 +42 +42 +42 +42 +04 +18 +ENDCHAR +STARTCHAR uni0104BE +ENCODING 66750 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +88 +90 +A0 +D0 +88 +84 +84 +84 +94 +28 +14 +ENDCHAR +STARTCHAR uni0104BF +ENCODING 66751 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +1C +60 +80 +80 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0104C0 +ENCODING 66752 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +6C +92 +AA +A8 +A8 +90 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0104C1 +ENCODING 66753 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +20 +20 +60 +60 +60 +90 +92 +8C +ENDCHAR +STARTCHAR uni0104C2 +ENCODING 66754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7C +82 +82 +82 +82 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni0104C3 +ENCODING 66755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7C +82 +82 +82 +92 +92 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni0104C4 +ENCODING 66756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +B8 +C4 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni0104C5 +ENCODING 66757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +40 +40 +5C +62 +F2 +42 +62 +5C +40 +40 +ENDCHAR +STARTCHAR uni0104C6 +ENCODING 66758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +74 +8C +84 +84 +80 +80 +80 +80 +60 +1C +ENDCHAR +STARTCHAR uni0104C7 +ENCODING 66759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +88 +80 +40 +20 +78 +94 +94 +64 +ENDCHAR +STARTCHAR uni0104C8 +ENCODING 66760 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +18 +24 +24 +24 +24 +44 +44 +48 +F0 +ENDCHAR +STARTCHAR uni0104C9 +ENCODING 66761 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +18 +24 +24 +F4 +24 +44 +44 +48 +F0 +ENDCHAR +STARTCHAR uni0104CA +ENCODING 66762 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F8 +24 +24 +24 +38 +60 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0104CB +ENCODING 66763 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +F8 +24 +74 +24 +38 +60 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0104CC +ENCODING 66764 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +7C +12 +12 +12 +1C +30 +40 +40 +F0 +42 +42 +3C +ENDCHAR +STARTCHAR uni0104CD +ENCODING 66765 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FE +20 +20 +2C +32 +22 +22 +22 +22 +22 +ENDCHAR +STARTCHAR uni0104CE +ENCODING 66766 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0104CF +ENCODING 66767 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +20 +40 +40 +FC +04 +08 +08 +10 +10 +ENDCHAR +STARTCHAR uni0104D0 +ENCODING 66768 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +10 +10 +7C +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni0104D1 +ENCODING 66769 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +92 +92 +92 +92 +7C +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0104D2 +ENCODING 66770 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +80 +80 +ENDCHAR +STARTCHAR uni0104D3 +ENCODING 66771 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +10 +20 +40 +F0 +88 +84 +ENDCHAR +STARTCHAR uni0104D8 +ENCODING 66776 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +10 +10 +28 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni0104D9 +ENCODING 66777 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +10 +10 +28 +28 +44 +54 +92 +92 +ENDCHAR +STARTCHAR uni0104DA +ENCODING 66778 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +10 +10 +28 +28 +44 +54 +BA +92 +ENDCHAR +STARTCHAR uni0104DB +ENCODING 66779 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +40 +20 +20 +10 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni0104DC +ENCODING 66780 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +80 +F8 +84 +84 +84 +F8 +90 +88 +04 +02 +ENDCHAR +STARTCHAR uni0104DD +ENCODING 66781 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +38 +44 +80 +88 +94 +A4 +A4 +64 +ENDCHAR +STARTCHAR uni0104DE +ENCODING 66782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +38 +44 +80 +88 +94 +A4 +AE +64 +ENDCHAR +STARTCHAR uni0104DF +ENCODING 66783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +74 +8C +88 +88 +88 +88 +8C +74 +ENDCHAR +STARTCHAR uni0104E0 +ENCODING 66784 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +74 +8C +88 +A8 +A8 +88 +8C +74 +ENDCHAR +STARTCHAR uni0104E1 +ENCODING 66785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +0C +10 +10 +08 +08 +84 +84 +78 +ENDCHAR +STARTCHAR uni0104E2 +ENCODING 66786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +04 +1C +24 +10 +08 +04 +84 +78 +ENDCHAR +STARTCHAR uni0104E3 +ENCODING 66787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0104E4 +ENCODING 66788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +84 +88 +90 +A0 +D0 +88 +84 +84 +08 +30 +ENDCHAR +STARTCHAR uni0104E5 +ENCODING 66789 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +40 +F0 +40 +42 +44 +48 +50 +68 +44 +42 +42 +04 +18 +ENDCHAR +STARTCHAR uni0104E6 +ENCODING 66790 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +80 +80 +80 +84 +88 +90 +A0 +D0 +88 +84 +94 +28 +14 +ENDCHAR +STARTCHAR uni0104E7 +ENCODING 66791 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +1C +60 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0104E8 +ENCODING 66792 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +6C +92 +AA +A8 +A8 +90 +80 +80 +ENDCHAR +STARTCHAR uni0104E9 +ENCODING 66793 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +10 +10 +20 +20 +60 +60 +92 +8C +ENDCHAR +STARTCHAR uni0104EA +ENCODING 66794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +7C +82 +82 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni0104EB +ENCODING 66795 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +7C +82 +82 +92 +92 +82 +82 +7C +ENDCHAR +STARTCHAR uni0104EC +ENCODING 66796 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +F8 +84 +84 +84 +F8 +80 +80 +ENDCHAR +STARTCHAR uni0104ED +ENCODING 66797 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +40 +7C +42 +F2 +42 +7C +40 +40 +ENDCHAR +STARTCHAR uni0104EE +ENCODING 66798 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +74 +8C +84 +84 +80 +80 +40 +20 +10 +0C +ENDCHAR +STARTCHAR uni0104EF +ENCODING 66799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +70 +88 +80 +40 +20 +78 +94 +64 +ENDCHAR +STARTCHAR uni0104F0 +ENCODING 66800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F0 +18 +24 +24 +24 +44 +48 +F0 +ENDCHAR +STARTCHAR uni0104F1 +ENCODING 66801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F0 +18 +24 +F4 +24 +44 +48 +F0 +ENDCHAR +STARTCHAR uni0104F2 +ENCODING 66802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +F8 +24 +24 +24 +38 +60 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0104F3 +ENCODING 66803 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +F8 +24 +74 +24 +38 +60 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0104F4 +ENCODING 66804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +7C +12 +12 +12 +1C +30 +40 +F2 +42 +3C +ENDCHAR +STARTCHAR uni0104F5 +ENCODING 66805 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +20 +20 +2C +32 +22 +22 +22 +ENDCHAR +STARTCHAR uni0104F6 +ENCODING 66806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0104F7 +ENCODING 66807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +20 +40 +40 +FC +04 +08 +08 +10 +ENDCHAR +STARTCHAR uni0104F8 +ENCODING 66808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +10 +10 +7C +92 +92 +92 +92 +92 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0104F9 +ENCODING 66809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +10 +10 +92 +92 +92 +92 +92 +7C +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0104FA +ENCODING 66810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +04 +08 +10 +20 +40 +80 +80 +ENDCHAR +STARTCHAR uni0104FB +ENCODING 66811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +04 +08 +10 +20 +40 +F8 +84 +ENDCHAR +STARTCHAR uni010500 +ENCODING 66816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +22 +44 +88 +F8 +88 +44 +22 +ENDCHAR +STARTCHAR uni010501 +ENCODING 66817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +82 +44 +28 +10 +28 +44 +FE +ENDCHAR +STARTCHAR uni010502 +ENCODING 66818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +C0 +30 +08 +04 +04 +84 +84 +88 +F0 +80 +80 +80 +ENDCHAR +STARTCHAR uni010503 +ENCODING 66819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +02 +02 +02 +02 +02 +C2 +22 +22 +22 +22 +1C +ENDCHAR +STARTCHAR uni010504 +ENCODING 66820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +02 +02 +02 +02 +02 +02 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni010505 +ENCODING 66821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +02 +02 +02 +02 +82 +02 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni010506 +ENCODING 66822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +FE +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni010507 +ENCODING 66823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +FE +04 +08 +10 +20 +40 +FE +ENDCHAR +STARTCHAR uni010508 +ENCODING 66824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 -2 +BITMAP +30 +40 +80 +F8 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010509 +ENCODING 66825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +80 +80 +80 +F8 +84 +84 +F8 +ENDCHAR +STARTCHAR uni01050A +ENCODING 66826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +F8 +10 +20 +24 +42 +42 +3C +ENDCHAR +STARTCHAR uni01050B +ENCODING 66827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 -2 +BITMAP +60 +8C +92 +92 +92 +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni01050C +ENCODING 66828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 -2 +BITMAP +30 +40 +80 +88 +48 +38 +08 +08 +06 +ENDCHAR +STARTCHAR uni01050D +ENCODING 66829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +82 +86 +8A +92 +A2 +C2 +82 +ENDCHAR +STARTCHAR uni01050E +ENCODING 66830 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 7 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01050F +ENCODING 66831 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +FC +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010510 +ENCODING 66832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +10 +10 +28 +28 +44 +44 +82 +ENDCHAR +STARTCHAR uni010511 +ENCODING 66833 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +00 +10 +10 +28 +28 +44 +44 +82 +ENDCHAR +STARTCHAR uni010512 +ENCODING 66834 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +80 +80 +FE +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni010513 +ENCODING 66835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +82 +C2 +A2 +92 +8A +86 +82 +ENDCHAR +STARTCHAR uni010514 +ENCODING 66836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +04 +0C +14 +24 +44 +84 +F4 +04 +04 +ENDCHAR +STARTCHAR uni010515 +ENCODING 66837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni010516 +ENCODING 66838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni010517 +ENCODING 66839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +FC +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni010518 +ENCODING 66840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +88 +90 +A0 +E0 +90 +88 +88 +ENDCHAR +STARTCHAR uni010519 +ENCODING 66841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 -2 +BITMAP +82 +82 +82 +82 +82 +FE +02 +02 +02 +ENDCHAR +STARTCHAR uni01051A +ENCODING 66842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 -2 +BITMAP +10 +00 +82 +82 +82 +82 +82 +FE +02 +02 +02 +ENDCHAR +STARTCHAR uni01051B +ENCODING 66843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +78 +84 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni01051C +ENCODING 66844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +FC +84 +84 +FC +84 +84 +84 +ENDCHAR +STARTCHAR uni01051D +ENCODING 66845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +82 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni01051E +ENCODING 66846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +38 +44 +44 +82 +82 +FE +82 +82 +44 +44 +38 +ENDCHAR +STARTCHAR uni01051F +ENCODING 66847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +88 +50 +20 +50 +88 +88 +70 +ENDCHAR +STARTCHAR uni010520 +ENCODING 66848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 -2 +BITMAP +82 +82 +82 +82 +82 +FE +80 +80 +80 +ENDCHAR +STARTCHAR uni010521 +ENCODING 66849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +80 +80 +98 +A4 +C4 +88 +90 +20 +40 +ENDCHAR +STARTCHAR uni010522 +ENCODING 66850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +38 +44 +44 +04 +88 +50 +20 +50 +88 +88 +70 +ENDCHAR +STARTCHAR uni010523 +ENCODING 66851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +3C +40 +80 +80 +78 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni010524 +ENCODING 66852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +84 +84 +84 +84 +8C +74 +04 +84 +78 +ENDCHAR +STARTCHAR uni010525 +ENCODING 66853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +FC +80 +80 +FC +80 +80 +80 +ENDCHAR +STARTCHAR uni010526 +ENCODING 66854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +80 +80 +80 +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uni010527 +ENCODING 66855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -2 +BITMAP +21 +21 +12 +14 +08 +14 +24 +40 +80 +ENDCHAR +STARTCHAR uni010530 +ENCODING 66864 +BBX 11 11 2 2 +BITMAP +3F00 +7380 +E1C0 +E1C0 +7380 +1F00 +0400 +0800 +1FC0 +70E0 +6060 +ENDCHAR +STARTCHAR uni010531 +ENCODING 66865 +BBX 11 11 2 2 +BITMAP +E000 +FFC0 +E0C0 +E080 +E000 +FF00 +F1C0 +E0E0 +E0E0 +71C0 +3F80 +ENDCHAR +STARTCHAR uni010532 +ENCODING 66866 +BBX 11 11 2 2 +BITMAP +3FC0 +70E0 +E0E0 +E000 +E000 +E000 +7000 +3F00 +0700 +0700 +0700 +ENDCHAR +STARTCHAR uni010533 +ENCODING 66867 +BBX 11 11 2 2 +BITMAP +1F00 +71C0 +E0E0 +E0E0 +E0E0 +71C0 +1F00 +0E00 +0E00 +0E00 +0E00 +ENDCHAR +STARTCHAR uni010534 +ENCODING 66868 +BBX 15 11 0 2 +BITMAP +01C0 +01C0 +01C0 +01C0 +01C0 +01FE +61C6 +E1C4 +7380 +7380 +1E00 +ENDCHAR +STARTCHAR uni010535 +ENCODING 66869 +BBX 11 11 2 2 +BITMAP +3800 +3800 +3800 +1C00 +0F00 +03C0 +01C0 +60E0 +E0E0 +71C0 +3F80 +ENDCHAR +STARTCHAR uni010536 +ENCODING 66870 +BBX 11 13 2 0 +BITMAP +FFE0 +E060 +E040 +E000 +E000 +E000 +E000 +E000 +E000 +7000 +3FE0 +0060 +0040 +ENDCHAR +STARTCHAR uni010537 +ENCODING 66871 +BBX 11 12 2 1 +BITMAP +FE00 +E700 +E380 +E380 +E700 +FE00 +E000 +FFE0 +E060 +E040 +E000 +C000 +ENDCHAR +STARTCHAR uni010538 +ENCODING 66872 +BBX 11 12 2 2 +BITMAP +0020 +0FE0 +3DE0 +70E0 +38E0 +00E0 +00E0 +60E0 +E0E0 +E0E0 +71C0 +3F80 +ENDCHAR +STARTCHAR uni010539 +ENCODING 66873 +BBX 15 12 0 1 +BITMAP +E000 +E000 +E000 +E000 +E000 +E000 +E000 +E180 +EF8E +FB8E +F3DE +C0F8 +ENDCHAR +STARTCHAR uni01053A +ENCODING 66874 +BBX 11 12 2 1 +BITMAP +4000 +C000 +FFE0 +00E0 +00E0 +00E0 +00E0 +00E0 +00E0 +00E0 +00E0 +00E0 +ENDCHAR +STARTCHAR uni01053B +ENCODING 66875 +BBX 11 11 2 2 +BITMAP +0020 +0060 +0080 +0100 +0200 +0400 +0E00 +1700 +2380 +41C0 +C080 +ENDCHAR +STARTCHAR uni01053C +ENCODING 66876 +BBX 11 12 2 1 +BITMAP +E0E0 +E0E0 +E0E0 +E0E0 +70E0 +3FE0 +00E0 +00E0 +00E0 +00E0 +00E0 +00E0 +ENDCHAR +STARTCHAR uni01053D +ENCODING 66877 +BBX 11 11 2 2 +BITMAP +6000 +E000 +E000 +E000 +E000 +FF00 +F1C0 +E0E0 +E0E0 +F1C0 +7F80 +ENDCHAR +STARTCHAR uni01053E +ENCODING 66878 +BBX 11 11 2 2 +BITMAP +3F80 +71C0 +E0E0 +E0E0 +E0E0 +00E0 +00E0 +00E0 +00E0 +00E0 +00E0 +ENDCHAR +STARTCHAR uni01053F +ENCODING 66879 +BBX 11 13 2 0 +BITMAP +0600 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +4E00 +CE00 +FFE0 +0060 +0040 +ENDCHAR +STARTCHAR uni010540 +ENCODING 66880 +BBX 11 11 2 2 +BITMAP +00E0 +1FE0 +78E0 +F0E0 +78E0 +1FE0 +00E0 +00E0 +00E0 +00E0 +00E0 +ENDCHAR +STARTCHAR uni010541 +ENCODING 66881 +BBX 11 11 2 2 +BITMAP +C000 +E000 +E000 +E000 +FFC0 +E1E0 +E0E0 +E0E0 +E000 +E000 +E000 +ENDCHAR +STARTCHAR uni010542 +ENCODING 66882 +BBX 15 12 0 1 +BITMAP +3F00 +7380 +E1C0 +E1C0 +7380 +1F00 +0400 +0800 +1F8E +738E +61DC +00F8 +ENDCHAR +STARTCHAR uni010543 +ENCODING 66883 +BBX 11 14 2 -1 +BITMAP +E000 +E000 +E000 +FF80 +E1C0 +E0E0 +E0E0 +E1C0 +E000 +E000 +E000 +7FC0 +00C0 +0040 +ENDCHAR +STARTCHAR uni010544 +ENCODING 66884 +BBX 11 13 2 0 +BITMAP +FFE0 +E060 +7040 +3800 +1C00 +0E00 +1C00 +3800 +7000 +E000 +FFE0 +0060 +0040 +ENDCHAR +STARTCHAR uni010545 +ENCODING 66885 +BBX 15 11 0 2 +BITMAP +3FFE +71C6 +E0E4 +E0E0 +E0E0 +00E0 +00E0 +00E0 +00E0 +00E0 +00E0 +ENDCHAR +STARTCHAR uni010546 +ENCODING 66886 +BBX 11 12 2 1 +BITMAP +0F80 +01C0 +01C0 +01C0 +01E0 +00E0 +00C0 +0300 +0C00 +3000 +C000 +E000 +ENDCHAR +STARTCHAR uni010547 +ENCODING 66887 +BBX 11 11 2 2 +BITMAP +0060 +00E0 +00E0 +40E0 +C0E0 +FFE0 +00E0 +00E0 +00E0 +00E0 +00C0 +ENDCHAR +STARTCHAR uni010548 +ENCODING 66888 +BBX 12 12 2 1 +BITMAP +E000 +E000 +7C70 +1C70 +1C70 +1C70 +1C70 +1C70 +1C70 +1C70 +0EE0 +07C0 +ENDCHAR +STARTCHAR uni010549 +ENCODING 66889 +BBX 15 12 0 1 +BITMAP +E380 +E380 +E380 +E380 +E380 +E380 +E380 +E3FE +E380 +E380 +7700 +3E00 +ENDCHAR +STARTCHAR uni01054A +ENCODING 66890 +BBX 15 11 0 2 +BITMAP +0FC0 +39C0 +71C0 +39C0 +0FC0 +01C0 +1FFE +71C6 +E1C0 +7380 +3F00 +ENDCHAR +STARTCHAR uni01054B +ENCODING 66891 +BBX 11 13 2 0 +BITMAP +3C00 +7000 +E000 +7000 +3FE0 +00C0 +0180 +1E00 +7060 +E0E0 +E0E0 +71C0 +1F00 +ENDCHAR +STARTCHAR uni01054C +ENCODING 66892 +BBX 15 13 0 0 +BITMAP +1F80 +7380 +E380 +E380 +7380 +1F80 +0380 +0380 +4380 +C380 +FFFE +0006 +0004 +ENDCHAR +STARTCHAR uni01054D +ENCODING 66893 +BBX 11 13 2 0 +BITMAP +3F80 +71C0 +E0E0 +E1C0 +7380 +3F00 +0E00 +1C00 +3800 +7000 +F0E0 +7FE0 +01E0 +ENDCHAR +STARTCHAR uni01054E +ENCODING 66894 +BBX 11 11 2 2 +BITMAP +E000 +E000 +7CE0 +1CE0 +1CE0 +0EE0 +07E0 +00E0 +00E0 +00E0 +00E0 +ENDCHAR +STARTCHAR uni01054F +ENCODING 66895 +BBX 15 11 0 2 +BITMAP +01C0 +01C0 +01C0 +01C0 +01C0 +01FE +61C0 +E1C0 +7380 +7380 +1E00 +ENDCHAR +STARTCHAR uni010550 +ENCODING 66896 +BBX 15 12 0 2 +BITMAP +2000 +6000 +7FC0 +01C0 +01C0 +01C0 +01C0 +1FFE +71C6 +E1C4 +7380 +3F00 +ENDCHAR +STARTCHAR uni010551 +ENCODING 66897 +BBX 11 11 2 2 +BITMAP +1E00 +7380 +E380 +E380 +7380 +1F80 +0380 +0380 +03A0 +03C0 +0380 +ENDCHAR +STARTCHAR uni010552 +ENCODING 66898 +BBX 15 11 0 2 +BITMAP +1F00 +3180 +71C0 +E0E0 +E0E0 +E0FE +E0E6 +E0E4 +71C0 +3180 +1F00 +ENDCHAR +STARTCHAR uni010553 +ENCODING 66899 +BBX 11 14 2 0 +BITMAP +4000 +C000 +FF80 +0180 +0380 +0700 +0E00 +1C00 +3800 +7000 +E000 +FFE0 +0060 +0040 +ENDCHAR +STARTCHAR uni010554 +ENCODING 66900 +BBX 15 12 0 2 +BITMAP +4000 +C000 +FFFE +0386 +0384 +0380 +0380 +6380 +E380 +7700 +7700 +1C00 +ENDCHAR +STARTCHAR uni010555 +ENCODING 66901 +BBX 11 11 2 2 +BITMAP +0020 +0060 +0080 +0100 +0200 +0400 +0800 +1E60 +2660 +43C0 +C000 +ENDCHAR +STARTCHAR uni010556 +ENCODING 66902 +BBX 11 12 2 2 +BITMAP +8000 +C000 +FF80 +0700 +0700 +0380 +01C0 +00E0 +00E0 +41C0 +6380 +7F00 +ENDCHAR +STARTCHAR uni010557 +ENCODING 66903 +BBX 15 11 0 2 +BITMAP +1F80 +7380 +E380 +7380 +1FFC +038E +0386 +038E +039C +0380 +0380 +ENDCHAR +STARTCHAR uni010558 +ENCODING 66904 +BBX 11 11 2 2 +BITMAP +03E0 +7E60 +7040 +1C00 +0E00 +0700 +0380 +6380 +E380 +7700 +1C00 +ENDCHAR +STARTCHAR uni010559 +ENCODING 66905 +BBX 15 11 0 2 +BITMAP +0380 +0380 +0380 +0380 +0380 +0380 +0380 +E38E +E38E +77DC +1CF0 +ENDCHAR +STARTCHAR uni01055A +ENCODING 66906 +BBX 11 12 2 2 +BITMAP +4000 +C000 +FF00 +0700 +0E00 +0E00 +0FC0 +1EE0 +1CE0 +1CE0 +38E0 +38E0 +ENDCHAR +STARTCHAR uni01055B +ENCODING 66907 +BBX 15 11 0 2 +BITMAP +E000 +E000 +E000 +E000 +FF8E +E38E +E1DC +E070 +E000 +E000 +E000 +ENDCHAR +STARTCHAR uni01055C +ENCODING 66908 +BBX 15 12 0 2 +BITMAP +4000 +C000 +FF00 +0700 +0700 +0700 +0700 +07F0 +079C +470E +CF9C +FBF8 +ENDCHAR +STARTCHAR uni01055D +ENCODING 66909 +BBX 11 11 2 2 +BITMAP +1F00 +3B80 +3B80 +1700 +0E00 +3C00 +73C0 +E0E0 +E0E0 +71C0 +1F00 +ENDCHAR +STARTCHAR uni01055E +ENCODING 66910 +BBX 15 12 0 1 +BITMAP +E000 +E000 +7C70 +1C70 +1C70 +1C70 +1C70 +1C7E +1C76 +1C74 +0EE0 +07C0 +ENDCHAR +STARTCHAR uni01055F +ENCODING 66911 +BBX 15 11 0 2 +BITMAP +E3F8 +E39C +E38E +E38E +738E +3F8E +0380 +0380 +0380 +0380 +0380 +ENDCHAR +STARTCHAR uni010560 +ENCODING 66912 +BBX 15 11 0 2 +BITMAP +3FFC +738E +E38E +E38E +0380 +0380 +0380 +0380 +0380 +0380 +0380 +ENDCHAR +STARTCHAR uni010561 +ENCODING 66913 +BBX 15 12 0 2 +BITMAP +4000 +C000 +FF80 +0380 +0380 +0380 +0380 +03FE +0386 +0384 +0380 +0380 +ENDCHAR +STARTCHAR uni010562 +ENCODING 66914 +BBX 11 11 2 2 +BITMAP +E0E0 +E0E0 +E0E0 +E0E0 +E0E0 +E0E0 +71C0 +1F00 +0E00 +0E00 +0E00 +ENDCHAR +STARTCHAR uni010563 +ENCODING 66915 +BBX 11 15 2 -2 +BITMAP +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +4E00 +CE00 +FFE0 +0E60 +0E40 +0C00 +0800 +ENDCHAR +STARTCHAR uni01056F +ENCODING 66927 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +70 +E0 +70 +1C +1C +38 +70 +C0 +ENDCHAR +STARTCHAR uni010600 +ENCODING 67072 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +FC +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010601 +ENCODING 67073 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +10 +10 +FE +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010602 +ENCODING 67074 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +10 +FE +10 +10 +FE +10 +10 +10 +ENDCHAR +STARTCHAR uni010603 +ENCODING 67075 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +54 +38 +92 +54 +38 +92 +54 +38 +10 +ENDCHAR +STARTCHAR uni010604 +ENCODING 67076 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +10 +10 +10 +7C +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010605 +ENCODING 67077 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +00 +20 +00 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010606 +ENCODING 67078 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +00 +A8 +A8 +A8 +00 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010607 +ENCODING 67079 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +88 +88 +F8 +A8 +A8 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010608 +ENCODING 67080 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +A8 +A8 +A8 +F8 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010609 +ENCODING 67081 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +0E +14 +24 +24 +44 +7E +44 +80 +80 +80 +ENDCHAR +STARTCHAR uni01060A +ENCODING 67082 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +18 +60 +80 +60 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01060B +ENCODING 67083 +BBX 14 10 1 0 +BITMAP +4100 +A280 +A2A0 +A320 +7DC8 +2010 +2024 +4008 +4010 +8000 +ENDCHAR +STARTCHAR uni01060C +ENCODING 67084 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +44 +C6 +44 +38 +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni01060D +ENCODING 67085 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +88 +88 +70 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01060E +ENCODING 67086 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +38 +54 +92 +10 +38 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01060F +ENCODING 67087 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +30 +48 +88 +88 +48 +3E +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010610 +ENCODING 67088 +BBX 12 10 2 0 +BITMAP +3E00 +4700 +8700 +8A80 +4A80 +3FF0 +0A80 +1240 +1240 +1240 +ENDCHAR +STARTCHAR uni010611 +ENCODING 67089 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +48 +88 +88 +7E +08 +3E +08 +3E +08 +ENDCHAR +STARTCHAR uni010612 +ENCODING 67090 +BBX 13 10 2 0 +BITMAP +1040 +28E0 +4550 +8248 +0040 +0140 +0240 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni010613 +ENCODING 67091 +BBX 13 10 2 0 +BITMAP +1040 +28E0 +4550 +8248 +0040 +0150 +0248 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni010614 +ENCODING 67092 +BBX 13 10 2 0 +BITMAP +1040 +28E0 +4550 +8248 +0140 +0240 +01F0 +0040 +01F0 +0040 +ENDCHAR +STARTCHAR uni010615 +ENCODING 67093 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +A8 +A4 +A0 +7C +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010616 +ENCODING 67094 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +A8 +A4 +A0 +7C +20 +F8 +20 +F8 +20 +ENDCHAR +STARTCHAR uni010617 +ENCODING 67095 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +20 +20 +20 +70 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni010618 +ENCODING 67096 +BBX 11 10 2 0 +BITMAP +4040 +8020 +8420 +8E20 +75C0 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni010619 +ENCODING 67097 +BBX 11 10 2 0 +BITMAP +8420 +8420 +8420 +4440 +3F80 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni01061A +ENCODING 67098 +BBX 9 10 3 0 +BITMAP +8880 +8880 +4900 +4900 +7F00 +8000 +8000 +7F00 +0800 +0800 +ENDCHAR +STARTCHAR uni01061B +ENCODING 67099 +BBX 14 10 1 0 +BITMAP +9120 +9120 +4A40 +4A40 +7FDC +8008 +801C +7FF0 +0400 +0400 +ENDCHAR +STARTCHAR uni01061C +ENCODING 67100 +BBX 11 10 2 0 +BITMAP +8420 +8420 +8420 +4440 +E4E0 +4440 +2E80 +2480 +1500 +7FC0 +ENDCHAR +STARTCHAR uni01061D +ENCODING 67101 +BBX 14 10 1 0 +BITMAP +8844 +5028 +FFFC +5228 +8A44 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni01061E +ENCODING 67102 +BBX 9 10 3 0 +BITMAP +8080 +4100 +2200 +1400 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni01061F +ENCODING 67103 +BBX 10 10 2 0 +BITMAP +1F80 +2040 +4000 +8000 +8000 +8000 +8000 +4000 +2040 +1F80 +ENDCHAR +STARTCHAR uni010620 +ENCODING 67104 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +28 +28 +28 +44 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni010621 +ENCODING 67105 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +28 +7C +28 +44 +EE +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni010622 +ENCODING 67106 +BBX 9 10 3 0 +BITMAP +0800 +0800 +7F00 +1C00 +2A00 +4900 +4900 +8880 +8880 +FF80 +ENDCHAR +STARTCHAR uni010623 +ENCODING 67107 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +0E +12 +32 +52 +52 +7E +52 +92 +92 +FE +ENDCHAR +STARTCHAR uni010624 +ENCODING 67108 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +54 +92 +92 +7C +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010625 +ENCODING 67109 +BBX 9 9 3 0 +BITMAP +8880 +4900 +2A00 +1C00 +FF80 +1C00 +2A00 +4900 +8880 +ENDCHAR +STARTCHAR uni010626 +ENCODING 67110 +BBX 9 10 3 0 +BITMAP +8880 +5500 +2200 +4100 +FF80 +4900 +4900 +4900 +4900 +4900 +ENDCHAR +STARTCHAR uni010627 +ENCODING 67111 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +88 +88 +50 +50 +20 +20 +50 +50 +88 +CC +ENDCHAR +STARTCHAR uni010628 +ENCODING 67112 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +44 +44 +38 +6C +54 +6C +38 +44 +82 +82 +ENDCHAR +STARTCHAR uni010629 +ENCODING 67113 +BBX 15 10 0 0 +BITMAP +AAAA +AAAA +AAAA +0000 +FC7E +0280 +0100 +0280 +0440 +0440 +ENDCHAR +STARTCHAR uni01062A +ENCODING 67114 +BBX 13 10 1 0 +BITMAP +38E0 +4710 +8008 +2220 +7770 +2220 +2220 +2220 +2220 +7770 +ENDCHAR +STARTCHAR uni01062B +ENCODING 67115 +BBX 11 10 2 0 +BITMAP +01C0 +0020 +0020 +03C0 +1D00 +2880 +2880 +4440 +4440 +EEE0 +ENDCHAR +STARTCHAR uni01062C +ENCODING 67116 +BBX 12 10 2 0 +BITMAP +7080 +8880 +0880 +0880 +0FF0 +0940 +0940 +0A20 +0A20 +0A20 +ENDCHAR +STARTCHAR uni01062D +ENCODING 67117 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +44 +84 +04 +28 +58 +50 +30 +40 +7C +ENDCHAR +STARTCHAR uni01062E +ENCODING 67118 +BBX 9 10 3 0 +BITMAP +FF80 +8080 +8080 +8080 +8080 +FF80 +8080 +8880 +8880 +8880 +ENDCHAR +STARTCHAR uni01062F +ENCODING 67119 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +FC +84 +84 +FC +84 +84 +84 +ENDCHAR +STARTCHAR uni010630 +ENCODING 67120 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +FC +84 +FC +84 +FC +84 +84 +84 +ENDCHAR +STARTCHAR uni010631 +ENCODING 67121 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +FC +84 +84 +84 +84 +FC +84 +FC +ENDCHAR +STARTCHAR uni010632 +ENCODING 67122 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +9C +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni010633 +ENCODING 67123 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +80 +80 +80 +80 +80 +80 +84 +FC +ENDCHAR +STARTCHAR uni010634 +ENCODING 67124 +BBX 9 10 3 0 +BITMAP +8000 +8000 +8000 +8380 +8400 +8400 +8400 +8380 +8080 +FF80 +ENDCHAR +STARTCHAR uni010635 +ENCODING 67125 +BBX 8 12 4 0 +BITMAP +06 +F1 +91 +96 +90 +9E +E2 +92 +92 +E2 +82 +FE +ENDCHAR +STARTCHAR uni010636 +ENCODING 67126 +BBX 11 10 2 0 +BITMAP +C000 +2000 +2000 +2380 +2540 +2920 +2B80 +3000 +3000 +2000 +ENDCHAR +STARTCHAR uni010637 +ENCODING 67127 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FE +82 +AA +82 +54 +44 +7C +10 +10 +10 +ENDCHAR +STARTCHAR uni010638 +ENCODING 67128 +BBX 9 10 3 0 +BITMAP +8800 +5000 +3F80 +6080 +A080 +1100 +1100 +0A00 +0A00 +1F00 +ENDCHAR +STARTCHAR uni010639 +ENCODING 67129 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +FE +92 +54 +38 +10 +FE +ENDCHAR +STARTCHAR uni01063A +ENCODING 67130 +BBX 11 10 2 0 +BITMAP +7FC0 +8020 +9120 +71C0 +1100 +1100 +0A00 +0A00 +0A00 +0400 +ENDCHAR +STARTCHAR uni01063B +ENCODING 67131 +BBX 9 10 3 0 +BITMAP +8000 +8000 +8000 +8100 +A880 +A080 +B080 +8100 +8200 +7C00 +ENDCHAR +STARTCHAR uni01063C +ENCODING 67132 +BBX 10 10 2 0 +BITMAP +8000 +8400 +C800 +A000 +AE00 +C040 +8840 +8440 +4080 +3F00 +ENDCHAR +STARTCHAR uni01063D +ENCODING 67133 +BBX 10 10 2 0 +BITMAP +6300 +1080 +0840 +0840 +1080 +2100 +4200 +8400 +8400 +6300 +ENDCHAR +STARTCHAR uni01063E +ENCODING 67134 +BBX 11 11 2 0 +BITMAP +1F00 +2480 +4440 +8420 +8420 +FFE0 +8420 +8420 +4440 +2480 +1F00 +ENDCHAR +STARTCHAR uni01063F +ENCODING 67135 +BBX 11 11 2 0 +BITMAP +1F00 +2080 +4040 +9120 +8020 +8020 +8020 +8420 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni010640 +ENCODING 67136 +BBX 11 10 2 0 +BITMAP +8E20 +5140 +A4A0 +64C0 +A4A0 +60C0 +1100 +1100 +0A00 +0400 +ENDCHAR +STARTCHAR uni010641 +ENCODING 67137 +BBX 9 9 3 0 +BITMAP +0800 +9480 +5500 +2200 +2200 +4100 +4100 +8080 +FF80 +ENDCHAR +STARTCHAR uni010642 +ENCODING 67138 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 1 0 +BITMAP +40 +20 +10 +20 +40 +A0 +10 +20 +40 +ENDCHAR +STARTCHAR uni010643 +ENCODING 67139 +BBX 11 11 2 0 +BITMAP +00E0 +3300 +0BE0 +8B00 +B0E0 +8000 +B0E0 +8B00 +0BE0 +3300 +00E0 +ENDCHAR +STARTCHAR uni010644 +ENCODING 67140 +BBX 9 7 3 1 +BITMAP +4000 +A000 +B800 +8780 +A080 +8080 +FF00 +ENDCHAR +STARTCHAR uni010645 +ENCODING 67141 +BBX 14 7 1 1 +BITMAP +0800 +1000 +A000 +7FFC +2024 +182C +07F0 +ENDCHAR +STARTCHAR uni010646 +ENCODING 67142 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 1 0 +BITMAP +E0 +90 +90 +A0 +90 +90 +A0 +A0 +90 +80 +ENDCHAR +STARTCHAR uni010647 +ENCODING 67143 +BBX 10 12 2 0 +BITMAP +0200 +0200 +C400 +B400 +8A00 +B100 +D100 +1F00 +2080 +3F80 +2080 +30C0 +ENDCHAR +STARTCHAR uni010648 +ENCODING 67144 +BBX 11 11 2 0 +BITMAP +0400 +0400 +FFE0 +0400 +2480 +5140 +5140 +5140 +8A20 +8A20 +FBE0 +ENDCHAR +STARTCHAR uni010649 +ENCODING 67145 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +70 +A8 +A8 +70 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01064A +ENCODING 67146 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +00 +F8 +70 +A8 +A8 +70 +20 +20 +20 +ENDCHAR +STARTCHAR uni01064B +ENCODING 67147 +BBX 13 10 1 0 +BITMAP +0200 +4510 +A228 +4010 +1240 +0A80 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni01064C +ENCODING 67148 +BBX 8 10 3 0 +BITMAP +04 +0A +11 +1F +51 +B1 +B1 +51 +11 +1F +ENDCHAR +STARTCHAR uni01064D +ENCODING 67149 +BBX 11 10 2 0 +BITMAP +FFE0 +8000 +8000 +8000 +FFE0 +8420 +8420 +94A0 +A520 +8420 +ENDCHAR +STARTCHAR uni01064E +ENCODING 67150 +BBX 11 10 2 0 +BITMAP +FFE0 +8000 +8000 +8000 +FFE0 +8020 +8020 +8020 +8020 +8020 +ENDCHAR +STARTCHAR uni01064F +ENCODING 67151 +BBX 11 13 2 0 +BITMAP +1100 +0A00 +0400 +FFE0 +8000 +8000 +8000 +FFE0 +88A0 +88A0 +88A0 +88A0 +88A0 +ENDCHAR +STARTCHAR uni010650 +ENCODING 67152 +BBX 9 10 3 0 +BITMAP +FF80 +8080 +8080 +C180 +A280 +A280 +C180 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uni010651 +ENCODING 67153 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +20 +70 +20 +20 +20 +20 +70 +20 +F8 +ENDCHAR +STARTCHAR uni010652 +ENCODING 67154 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E0 +AC +94 +84 +88 +90 +90 +88 +84 +FC +ENDCHAR +STARTCHAR uni010653 +ENCODING 67155 +BBX 10 10 3 0 +BITMAP +FC00 +8400 +8400 +8400 +FFC0 +8440 +8440 +8480 +8480 +FF00 +ENDCHAR +STARTCHAR uni010654 +ENCODING 67156 +BBX 9 10 3 0 +BITMAP +3E00 +4100 +8080 +8080 +8080 +FF80 +8400 +8400 +4800 +3000 +ENDCHAR +STARTCHAR uni010655 +ENCODING 67157 +BBX 9 10 3 0 +BITMAP +0780 +0880 +1080 +1080 +0880 +0780 +0280 +0C80 +3080 +C080 +ENDCHAR +STARTCHAR uni010656 +ENCODING 67158 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +10 +48 +28 +90 +50 +20 +20 +40 +40 +ENDCHAR +STARTCHAR uni010657 +ENCODING 67159 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +10 +20 +80 +30 +80 +A0 +90 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010658 +ENCODING 67160 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010659 +ENCODING 67161 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +18 +64 +80 +60 +10 +60 +80 +64 +18 +ENDCHAR +STARTCHAR uni01065A +ENCODING 67162 +BBX 10 10 2 0 +BITMAP +7040 +8080 +8200 +7080 +0640 +0900 +0900 +1080 +1080 +1080 +ENDCHAR +STARTCHAR uni01065B +ENCODING 67163 +BBX 9 10 3 0 +BITMAP +0800 +0800 +7F00 +1C00 +2A00 +4900 +7F00 +8880 +8880 +8880 +ENDCHAR +STARTCHAR uni01065C +ENCODING 67164 +BBX 10 9 2 0 +BITMAP +01C0 +0640 +1840 +6040 +FFC0 +6040 +1840 +0640 +01C0 +ENDCHAR +STARTCHAR uni01065D +ENCODING 67165 +BBX 11 11 2 0 +BITMAP +1F00 +2080 +4040 +8020 +8020 +8020 +8020 +8020 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni01065E +ENCODING 67166 +BBX 11 12 3 -1 +BITMAP +3E00 +4100 +8080 +8080 +8080 +8080 +8080 +4100 +3E00 +4180 +4060 +2000 +ENDCHAR +STARTCHAR uni01065F +ENCODING 67167 +BBX 11 11 2 0 +BITMAP +1F00 +2080 +4040 +8E20 +9120 +9120 +9120 +8E20 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni010660 +ENCODING 67168 +BBX 8 11 3 0 +BITMAP +1F +21 +6F +90 +A0 +A0 +A0 +90 +6F +21 +1F +ENDCHAR +STARTCHAR uni010661 +ENCODING 67169 +BBX 13 10 1 0 +BITMAP +0F80 +1040 +2020 +4010 +4010 +8008 +8888 +8508 +4510 +38E0 +ENDCHAR +STARTCHAR uni010662 +ENCODING 67170 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +50 +50 +50 +88 +88 +F8 +20 +20 +70 +ENDCHAR +STARTCHAR uni010663 +ENCODING 67171 +BBX 10 10 2 0 +BITMAP +3000 +4000 +8000 +9000 +0800 +0400 +0200 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uni010664 +ENCODING 67172 +BBX 12 5 2 3 +BITMAP +0060 +0010 +FFD0 +0010 +0060 +ENDCHAR +STARTCHAR uni010665 +ENCODING 67173 +BBX 10 10 4 0 +BITMAP +8000 +4000 +2000 +1000 +0800 +0400 +0240 +0040 +0080 +0300 +ENDCHAR +STARTCHAR uni010666 +ENCODING 67174 +BBX 12 10 2 0 +BITMAP +CCC0 +2220 +1110 +1110 +2220 +4440 +8880 +9100 +5200 +3E00 +ENDCHAR +STARTCHAR uni010667 +ENCODING 67175 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +90 +50 +20 +30 +48 +40 +84 +88 +70 +ENDCHAR +STARTCHAR uni010668 +ENCODING 67176 +BBX 7 12 4 0 +BITMAP +12 +24 +00 +FC +80 +A4 +92 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010669 +ENCODING 67177 +BBX 11 10 2 0 +BITMAP +0400 +0400 +FFE0 +8420 +8420 +8420 +FFE0 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni01066A +ENCODING 67178 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +88 +88 +50 +50 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni01066B +ENCODING 67179 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01066C +ENCODING 67180 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +44 +44 +44 +38 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni01066D +ENCODING 67181 +BBX 13 12 1 0 +BITMAP +0700 +18C0 +A228 +F278 +A028 +F278 +A228 +3FE0 +0200 +0200 +0200 +0F80 +ENDCHAR +STARTCHAR uni01066E +ENCODING 67182 +BBX 11 10 2 0 +BITMAP +0E00 +1100 +1100 +1100 +1100 +7FC0 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01066F +ENCODING 67183 +BBX 9 10 3 0 +BITMAP +0800 +0800 +1C00 +2A00 +2A00 +4900 +4900 +8880 +8880 +FF80 +ENDCHAR +STARTCHAR uni010670 +ENCODING 67184 +BBX 9 10 3 0 +BITMAP +3800 +4400 +8400 +0880 +0F00 +1100 +1E00 +2200 +2000 +1000 +ENDCHAR +STARTCHAR uni010671 +ENCODING 67185 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +88 +88 +70 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni010672 +ENCODING 67186 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +A8 +A8 +A8 +70 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010673 +ENCODING 67187 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -1 +BITMAP +80 +FE +92 +92 +FE +92 +92 +FE +92 +92 +FE +80 +ENDCHAR +STARTCHAR uni010674 +ENCODING 67188 +BBX 13 10 1 0 +BITMAP +0F80 +2220 +4210 +A228 +1240 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni010675 +ENCODING 67189 +BBX 10 10 3 0 +BITMAP +71C0 +8E00 +8800 +8E00 +71C0 +2000 +2000 +2000 +2000 +2000 +ENDCHAR +STARTCHAR uni010676 +ENCODING 67190 +BBX 13 9 1 0 +BITMAP +8FF8 +8C10 +5420 +5440 +2480 +5440 +5420 +8C10 +8FF8 +ENDCHAR +STARTCHAR uni010677 +ENCODING 67191 +BBX 9 10 3 0 +BITMAP +FF80 +8880 +AA80 +8880 +8880 +FF80 +8880 +AA80 +8880 +8880 +ENDCHAR +STARTCHAR uni010678 +ENCODING 67192 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +10 +08 +08 +90 +50 +20 +20 +40 +40 +ENDCHAR +STARTCHAR uni010679 +ENCODING 67193 +BBX 9 11 3 0 +BITMAP +8080 +5D00 +2200 +2200 +2200 +1C00 +3E00 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni01067A +ENCODING 67194 +BBX 8 11 4 0 +BITMAP +01 +7A +84 +05 +26 +48 +FE +10 +20 +40 +F0 +ENDCHAR +STARTCHAR uni01067B +ENCODING 67195 +BBX 14 10 1 0 +BITMAP +7FFC +4004 +4444 +1110 +0000 +4440 +0100 +8100 +8200 +FF80 +ENDCHAR +STARTCHAR uni01067C +ENCODING 67196 +BBX 11 10 2 0 +BITMAP +5000 +A800 +BE00 +4100 +51C0 +4020 +4020 +42C0 +4200 +7E00 +ENDCHAR +STARTCHAR uni01067D +ENCODING 67197 +BBX 7 10 4 0 +BITMAP +78 +84 +04 +E4 +88 +FE +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni01067E +ENCODING 67198 +BBX 10 10 2 0 +BITMAP +0FC0 +0840 +0840 +0840 +0840 +0840 +1840 +2040 +4040 +FFC0 +ENDCHAR +STARTCHAR uni01067F +ENCODING 67199 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +88 +50 +50 +20 +50 +50 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni010680 +ENCODING 67200 +BBX 12 10 2 0 +BITMAP +3E00 +4100 +8000 +87F0 +0010 +0010 +87F0 +8000 +4100 +3E00 +ENDCHAR +STARTCHAR uni010681 +ENCODING 67201 +BBX 14 10 1 0 +BITMAP +00C0 +0120 +0120 +3920 +4520 +8100 +8238 +80C4 +4304 +3C78 +ENDCHAR +STARTCHAR uni010682 +ENCODING 67202 +BBX 13 10 1 0 +BITMAP +0700 +0880 +1040 +2020 +2020 +7070 +0000 +A8A8 +A8A8 +A8A8 +ENDCHAR +STARTCHAR uni010683 +ENCODING 67203 +BBX 11 11 2 0 +BITMAP +A0A0 +4040 +AEA0 +1100 +1100 +1100 +0A00 +0400 +0A00 +1100 +2080 +ENDCHAR +STARTCHAR uni010684 +ENCODING 67204 +BBX 15 11 0 0 +BITMAP +0010 +0038 +0010 +3BB8 +4444 +8002 +7FFC +5454 +5454 +5294 +F11E +ENDCHAR +STARTCHAR uni010685 +ENCODING 67205 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +BA +44 +AA +92 +AA +44 +BA +10 +10 +1C +10 +ENDCHAR +STARTCHAR uni010686 +ENCODING 67206 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +80 +80 +FC +84 +84 +84 +84 +FC +ENDCHAR +STARTCHAR uni010687 +ENCODING 67207 +BBX 10 11 3 0 +BITMAP +BA00 +4400 +ABC0 +9200 +83C0 +4400 +3800 +1000 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uni010688 +ENCODING 67208 +BBX 13 13 1 0 +BITMAP +0300 +0080 +0200 +0270 +0488 +0928 +0840 +0480 +1B00 +6000 +8000 +8000 +4000 +ENDCHAR +STARTCHAR uni010689 +ENCODING 67209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +80 +40 +30 +08 +70 +80 +40 +20 +ENDCHAR +STARTCHAR uni01068A +ENCODING 67210 +BBX 11 10 2 0 +BITMAP +0200 +0200 +07C0 +0300 +2480 +4480 +4840 +8840 +9020 +1020 +ENDCHAR +STARTCHAR uni01068B +ENCODING 67211 +BBX 9 10 3 0 +BITMAP +3000 +4000 +8F80 +8000 +4000 +3000 +0C00 +2200 +2200 +0400 +ENDCHAR +STARTCHAR uni01068C +ENCODING 67212 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +20 +20 +00 +F8 +88 +50 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni01068D +ENCODING 67213 +BBX 13 6 1 1 +BITMAP +3800 +2600 +4180 +4160 +8218 +FFF8 +ENDCHAR +STARTCHAR uni01068E +ENCODING 67214 +BBX 10 10 2 0 +BITMAP +3F80 +0400 +0400 +0440 +17C0 +2440 +0400 +8400 +0400 +0400 +ENDCHAR +STARTCHAR uni01068F +ENCODING 67215 +BBX 11 10 2 0 +BITMAP +8080 +4100 +22A0 +1440 +0880 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni010690 +ENCODING 67216 +BBX 10 10 3 0 +BITMAP +F000 +8C00 +8200 +FD00 +0500 +0880 +0880 +1040 +1040 +1FC0 +ENDCHAR +STARTCHAR uni010691 +ENCODING 67217 +BBX 11 13 3 -1 +BITMAP +3000 +0800 +0800 +1F00 +3080 +3280 +2840 +47E0 +F040 +4440 +5A40 +61C0 +4000 +ENDCHAR +STARTCHAR uni010692 +ENCODING 67218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +90 +50 +30 +10 +18 +14 +12 +14 +18 +10 +ENDCHAR +STARTCHAR uni010693 +ENCODING 67219 +BBX 11 10 2 0 +BITMAP +0100 +3FC0 +4120 +A000 +9000 +8800 +9000 +A000 +4040 +3FC0 +ENDCHAR +STARTCHAR uni010694 +ENCODING 67220 +BBX 12 6 2 2 +BITMAP +FFF0 +8410 +8410 +8410 +8410 +FFF0 +ENDCHAR +STARTCHAR uni010695 +ENCODING 67221 +BBX 13 10 1 0 +BITMAP +C898 +2520 +1740 +1040 +1FC0 +0200 +0200 +0200 +0200 +0F80 +ENDCHAR +STARTCHAR uni010696 +ENCODING 67222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +2A +2A +2A +1C +22 +E2 +22 +1C +08 +1C +08 +3E +ENDCHAR +STARTCHAR uni010697 +ENCODING 67223 +BBX 14 10 1 0 +BITMAP +3E00 +0800 +7F1C +88E4 +8804 +88E4 +7F1C +0800 +0800 +3E00 +ENDCHAR +STARTCHAR uni010698 +ENCODING 67224 +BBX 14 10 1 0 +BITMAP +7010 +88C8 +0308 +3804 +4204 +3804 +0B08 +08C8 +0810 +0800 +ENDCHAR +STARTCHAR uni010699 +ENCODING 67225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +54 +92 +92 +10 +10 +16 +18 +16 +18 +ENDCHAR +STARTCHAR uni01069A +ENCODING 67226 +BBX 9 12 3 0 +BITMAP +1400 +2200 +0000 +6300 +9C80 +0000 +6300 +9C80 +0000 +4100 +4100 +4100 +ENDCHAR +STARTCHAR uni01069B +ENCODING 67227 +BBX 14 10 1 0 +BITMAP +0300 +0400 +0918 +E8A4 +8884 +8F84 +8884 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni01069C +ENCODING 67228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7C +82 +AA +82 +12 +54 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01069D +ENCODING 67229 +BBX 12 13 1 -1 +BITMAP +0800 +0800 +09E0 +0610 +0010 +0290 +02A0 +03C0 +3E40 +4220 +8100 +A800 +2800 +ENDCHAR +STARTCHAR uni01069E +ENCODING 67230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +84 +84 +84 +FC +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01069F +ENCODING 67231 +BBX 12 10 2 0 +BITMAP +1F00 +0400 +1400 +25F0 +0400 +0400 +2480 +9F20 +4440 +3F80 +ENDCHAR +STARTCHAR uni0106A0 +ENCODING 67232 +BBX 9 10 3 0 +BITMAP +FF80 +8080 +4100 +4100 +2200 +2200 +1400 +1400 +0800 +FF80 +ENDCHAR +STARTCHAR uni0106A1 +ENCODING 67233 +BBX 13 10 1 0 +BITMAP +3FE0 +2020 +2020 +2020 +1040 +F078 +1040 +0880 +0880 +1FC0 +ENDCHAR +STARTCHAR uni0106A2 +ENCODING 67234 +BBX 9 10 3 0 +BITMAP +FF80 +8080 +8080 +8080 +4100 +4100 +4100 +2200 +2200 +3E00 +ENDCHAR +STARTCHAR uni0106A3 +ENCODING 67235 +BBX 9 10 3 0 +BITMAP +FF80 +8080 +8080 +8080 +4100 +4100 +4100 +3E00 +2200 +3E00 +ENDCHAR +STARTCHAR uni0106A4 +ENCODING 67236 +BBX 11 10 2 0 +BITMAP +3FE0 +2020 +2020 +6020 +9040 +7040 +1040 +0880 +0880 +0F80 +ENDCHAR +STARTCHAR uni0106A5 +ENCODING 67237 +BBX 13 10 1 0 +BITMAP +3FE0 +2020 +2020 +6030 +9048 +7070 +1040 +0880 +0880 +0F80 +ENDCHAR +STARTCHAR uni0106A6 +ENCODING 67238 +BBX 13 10 1 0 +BITMAP +0F80 +1040 +2020 +3FE0 +6030 +9048 +7070 +1040 +0880 +0F80 +ENDCHAR +STARTCHAR uni0106A7 +ENCODING 67239 +BBX 9 11 3 0 +BITMAP +4100 +A280 +A280 +FF80 +8080 +8080 +4100 +4100 +4100 +2200 +3E00 +ENDCHAR +STARTCHAR uni0106A8 +ENCODING 67240 +BBX 11 10 2 0 +BITMAP +7FC0 +2080 +60C0 +9120 +71C0 +0A00 +1A00 +2600 +4900 +4900 +ENDCHAR +STARTCHAR uni0106A9 +ENCODING 67241 +BBX 9 10 3 0 +BITMAP +FF80 +8080 +8080 +4100 +3E00 +3E00 +4900 +8880 +8880 +8880 +ENDCHAR +STARTCHAR uni0106AA +ENCODING 67242 +BBX 9 12 3 0 +BITMAP +4100 +A280 +A280 +FF80 +8080 +8080 +4100 +3E00 +3E00 +4900 +8880 +8880 +ENDCHAR +STARTCHAR uni0106AB +ENCODING 67243 +BBX 13 10 1 0 +BITMAP +3FE0 +2020 +E038 +1040 +0F80 +0F80 +1240 +2220 +2220 +2220 +ENDCHAR +STARTCHAR uni0106AC +ENCODING 67244 +BBX 9 11 3 0 +BITMAP +1E00 +7200 +9200 +5200 +2100 +4080 +4080 +4080 +2100 +1200 +1E00 +ENDCHAR +STARTCHAR uni0106AD +ENCODING 67245 +BBX 13 10 1 0 +BITMAP +7FF8 +9010 +9010 +7010 +0820 +0820 +0440 +0440 +0440 +07C0 +ENDCHAR +STARTCHAR uni0106AE +ENCODING 67246 +BBX 12 10 1 0 +BITMAP +7FC0 +8880 +8880 +7060 +4010 +4010 +2020 +2020 +1040 +1FC0 +ENDCHAR +STARTCHAR uni0106AF +ENCODING 67247 +BBX 11 10 2 0 +BITMAP +3F80 +1100 +1100 +60C0 +8020 +8020 +4040 +4040 +2080 +3F80 +ENDCHAR +STARTCHAR uni0106B0 +ENCODING 67248 +BBX 11 10 2 0 +BITMAP +3F80 +1100 +1100 +60C0 +8E20 +9120 +5140 +4040 +2080 +3F80 +ENDCHAR +STARTCHAR uni0106B1 +ENCODING 67249 +BBX 9 11 3 0 +BITMAP +4100 +A280 +A280 +FF80 +AA80 +9480 +6B00 +5500 +6B00 +3600 +3E00 +ENDCHAR +STARTCHAR uni0106B2 +ENCODING 67250 +BBX 11 13 3 -1 +BITMAP +E000 +1000 +0800 +0800 +1600 +A180 +C860 +8020 +2240 +4580 +8800 +5000 +2000 +ENDCHAR +STARTCHAR uni0106B3 +ENCODING 67251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +88 +90 +A0 +C0 +80 +80 +90 +B8 +90 +80 +ENDCHAR +STARTCHAR uni0106B4 +ENCODING 67252 +BBX 12 12 1 -1 +BITMAP +1110 +1110 +1110 +1FF0 +1000 +9200 +9200 +7C00 +1000 +1E00 +1000 +1000 +ENDCHAR +STARTCHAR uni0106B5 +ENCODING 67253 +BBX 11 10 2 0 +BITMAP +01E0 +0220 +8420 +9420 +A220 +C1E0 +80A0 +8320 +0C20 +F020 +ENDCHAR +STARTCHAR uni0106B6 +ENCODING 67254 +BBX 11 10 1 0 +BITMAP +1000 +1000 +1000 +FE00 +1000 +1080 +1080 +1FE0 +1080 +1080 +ENDCHAR +STARTCHAR uni0106B7 +ENCODING 67255 +BBX 11 10 1 0 +BITMAP +1000 +1000 +1000 +FE00 +1000 +FE80 +1080 +1FE0 +1080 +1080 +ENDCHAR +STARTCHAR uni0106B8 +ENCODING 67256 +BBX 13 11 1 -1 +BITMAP +FE00 +0000 +9200 +9200 +00E0 +1110 +12A8 +1208 +1248 +1110 +10E0 +ENDCHAR +STARTCHAR uni0106B9 +ENCODING 67257 +BBX 7 11 4 0 +BITMAP +92 +54 +38 +10 +FE +82 +54 +28 +10 +10 +7C +ENDCHAR +STARTCHAR uni0106BA +ENCODING 67258 +BBX 13 11 2 0 +BITMAP +8230 +4408 +2808 +1010 +FFE0 +8150 +5250 +2A50 +1000 +1000 +7C00 +ENDCHAR +STARTCHAR uni0106BB +ENCODING 67259 +BBX 13 11 2 0 +BITMAP +0030 +0008 +0008 +0010 +FFE0 +8150 +5250 +2A50 +1000 +1000 +7C00 +ENDCHAR +STARTCHAR uni0106BC +ENCODING 67260 +BBX 15 11 0 0 +BITMAP +8280 +4440 +2840 +10AA +FFAA +835C +5548 +2D48 +1000 +1000 +7C00 +ENDCHAR +STARTCHAR uni0106BD +ENCODING 67261 +BBX 10 10 2 0 +BITMAP +7800 +8400 +8400 +7FC0 +0400 +1500 +2480 +1F00 +0400 +0400 +ENDCHAR +STARTCHAR uni0106BE +ENCODING 67262 +BBX 15 11 0 -1 +BITMAP +3398 +4D64 +8102 +0510 +0908 +0104 +07C8 +0114 +07C2 +0104 +0108 +ENDCHAR +STARTCHAR uni0106BF +ENCODING 67263 +BBX 10 10 3 0 +BITMAP +1240 +1240 +1240 +1FC0 +1000 +5400 +9200 +7C00 +1000 +1000 +ENDCHAR +STARTCHAR uni0106C0 +ENCODING 67264 +BBX 14 13 1 -1 +BITMAP +4104 +4384 +5D74 +610C +5D74 +4384 +7FFC +8000 +8000 +7FFC +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni0106C1 +ENCODING 67265 +BBX 12 10 1 0 +BITMAP +A8F0 +A910 +AA10 +FA10 +8110 +F8F0 +2050 +2190 +0610 +F810 +ENDCHAR +STARTCHAR uni0106C2 +ENCODING 67266 +BBX 11 11 1 -1 +BITMAP +7880 +8440 +8400 +7FE0 +0500 +0480 +2440 +1480 +0540 +0480 +0500 +ENDCHAR +STARTCHAR uni0106C3 +ENCODING 67267 +BBX 9 10 3 0 +BITMAP +8080 +8080 +FF80 +8880 +8880 +0800 +1C00 +2A00 +4900 +8880 +ENDCHAR +STARTCHAR uni0106C4 +ENCODING 67268 +BBX 14 10 1 0 +BITMAP +07F0 +0890 +0690 +0108 +0204 +0204 +0204 +2108 +5090 +88F0 +ENDCHAR +STARTCHAR uni0106C5 +ENCODING 67269 +BBX 11 10 2 0 +BITMAP +8020 +2A80 +0000 +0E00 +1100 +7FC0 +2080 +71C0 +2080 +2080 +ENDCHAR +STARTCHAR uni0106C6 +ENCODING 67270 +BBX 9 11 3 0 +BITMAP +1C00 +2A00 +3E00 +2A00 +1C00 +1C00 +2200 +FF80 +4100 +E380 +4100 +ENDCHAR +STARTCHAR uni0106C7 +ENCODING 67271 +BBX 14 10 1 0 +BITMAP +0180 +0E3C +1A64 +EAA4 +A8A4 +A0FC +8124 +0124 +0124 +01FC +ENDCHAR +STARTCHAR uni0106C8 +ENCODING 67272 +BBX 9 11 3 -1 +BITMAP +FF80 +0000 +8880 +8880 +8880 +0000 +2A00 +4900 +3E00 +0800 +0800 +ENDCHAR +STARTCHAR uni0106C9 +ENCODING 67273 +BBX 10 10 2 0 +BITMAP +1240 +1240 +1240 +1FC0 +1000 +5400 +9200 +7C00 +1000 +1000 +ENDCHAR +STARTCHAR uni0106CA +ENCODING 67274 +BBX 13 11 2 0 +BITMAP +00C0 +E120 +1140 +1190 +FF20 +10C8 +5410 +9208 +7C10 +1000 +1000 +ENDCHAR +STARTCHAR uni0106CB +ENCODING 67275 +BBX 16 11 0 0 +BITMAP +00C0 +7120 +8940 +8990 +7F20 +08C4 +2A2E +495A +3E2E +084A +081F +ENDCHAR +STARTCHAR uni0106CC +ENCODING 67276 +BBX 9 12 3 -1 +BITMAP +FF80 +8080 +A280 +8880 +4100 +7F00 +0800 +2A00 +4900 +3E00 +0800 +0800 +ENDCHAR +STARTCHAR uni0106CD +ENCODING 67277 +BBX 13 13 1 -2 +BITMAP +0020 +7820 +8420 +0200 +02F8 +0200 +0450 +0450 +0888 +0888 +0000 +0AA0 +2008 +ENDCHAR +STARTCHAR uni0106CE +ENCODING 67278 +BBX 11 13 2 -1 +BITMAP +0400 +0200 +0500 +0200 +0500 +0200 +0400 +FFE0 +8020 +8020 +FFE0 +8420 +8420 +ENDCHAR +STARTCHAR uni0106CF +ENCODING 67279 +BBX 11 12 2 -1 +BITMAP +FFE0 +8020 +8420 +8A20 +9F20 +8420 +8E20 +8020 +FFE0 +8420 +8420 +8420 +ENDCHAR +STARTCHAR uni0106D0 +ENCODING 67280 +BBX 13 13 1 -1 +BITMAP +0700 +0880 +1040 +1540 +1040 +1240 +0880 +0700 +FFF8 +2220 +2220 +2220 +FFF8 +ENDCHAR +STARTCHAR uni0106D1 +ENCODING 67281 +BBX 9 12 3 -1 +BITMAP +2200 +4100 +4900 +3600 +FF80 +8080 +FF80 +8080 +8080 +FF80 +8080 +FF80 +ENDCHAR +STARTCHAR uni0106D2 +ENCODING 67282 +BBX 9 13 3 -1 +BITMAP +1C00 +2A00 +3E00 +2A00 +1C00 +FF80 +8080 +FF80 +8080 +8080 +FF80 +8080 +FF80 +ENDCHAR +STARTCHAR uni0106D3 +ENCODING 67283 +BBX 14 10 1 0 +BITMAP +FCF0 +8408 +8484 +BC44 +8104 +8088 +8030 +80C0 +8300 +FC00 +ENDCHAR +STARTCHAR uni0106D4 +ENCODING 67284 +BBX 10 12 3 0 +BITMAP +0380 +8540 +87C0 +8540 +8380 +8000 +8380 +8440 +8400 +8380 +8080 +FF80 +ENDCHAR +STARTCHAR uni0106D5 +ENCODING 67285 +BBX 15 11 0 -1 +BITMAP +8400 +DF00 +9500 +9538 +DF44 +8482 +8CAA +9482 +A492 +C444 +8438 +ENDCHAR +STARTCHAR uni0106D6 +ENCODING 67286 +BBX 13 11 1 0 +BITMAP +7880 +8440 +8400 +7FF8 +0400 +0600 +07C0 +0C40 +0780 +0480 +0780 +ENDCHAR +STARTCHAR uni0106D7 +ENCODING 67287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +10 +7C +10 +7E +92 +54 +38 +10 +FE +ENDCHAR +STARTCHAR uni0106D8 +ENCODING 67288 +BBX 10 11 3 0 +BITMAP +8000 +8000 +8000 +8000 +8000 +9F00 +A080 +C040 +FFC0 +C040 +FFC0 +ENDCHAR +STARTCHAR uni0106D9 +ENCODING 67289 +BBX 10 11 3 0 +BITMAP +A000 +8000 +9000 +8400 +8100 +BC40 +C200 +8100 +FF00 +8100 +FF00 +ENDCHAR +STARTCHAR uni0106DA +ENCODING 67290 +BBX 10 11 3 0 +BITMAP +A080 +C440 +CE40 +B580 +8400 +9F00 +A080 +C040 +FFC0 +C040 +FFC0 +ENDCHAR +STARTCHAR uni0106DB +ENCODING 67291 +BBX 10 12 3 0 +BITMAP +A480 +A480 +BF80 +A000 +9F80 +8400 +9F00 +A080 +C040 +FFC0 +C040 +FFC0 +ENDCHAR +STARTCHAR uni0106DC +ENCODING 67292 +BBX 10 11 3 0 +BITMAP +8E00 +9500 +9F00 +9500 +8E00 +9F00 +A080 +C040 +FFC0 +C040 +FFC0 +ENDCHAR +STARTCHAR uni0106DD +ENCODING 67293 +BBX 13 10 0 0 +BITMAP +8078 +8088 +8508 +AD08 +A488 +B478 +8828 +70C8 +0308 +7C08 +ENDCHAR +STARTCHAR uni0106DE +ENCODING 67294 +BBX 11 10 2 0 +BITMAP +8020 +8020 +FFE0 +8420 +8420 +1F00 +2480 +3F80 +2480 +1F00 +ENDCHAR +STARTCHAR uni0106DF +ENCODING 67295 +BBX 14 11 1 -1 +BITMAP +01FC +0070 +00A8 +38A8 +44A8 +8270 +AA20 +8270 +9220 +4470 +3820 +ENDCHAR +STARTCHAR uni0106E0 +ENCODING 67296 +BBX 11 11 2 -1 +BITMAP +8020 +4440 +2A80 +0A00 +0A00 +1100 +1100 +1F00 +0000 +2A80 +8020 +ENDCHAR +STARTCHAR uni0106E1 +ENCODING 67297 +BBX 9 11 3 0 +BITMAP +8080 +8080 +FF80 +8880 +8880 +0800 +8880 +5500 +2200 +4100 +7F00 +ENDCHAR +STARTCHAR uni0106E2 +ENCODING 67298 +BBX 9 10 3 0 +BITMAP +4100 +8880 +9C80 +6B00 +0800 +8880 +5500 +2200 +4100 +7F00 +ENDCHAR +STARTCHAR uni0106E3 +ENCODING 67299 +BBX 9 11 4 0 +BITMAP +8880 +5500 +2200 +4100 +7F00 +0000 +8880 +5500 +2200 +4100 +7F00 +ENDCHAR +STARTCHAR uni0106E4 +ENCODING 67300 +BBX 11 14 2 -1 +BITMAP +0800 +0400 +0200 +0100 +0200 +0400 +0A00 +0100 +0200 +0400 +0800 +0000 +2A80 +8020 +ENDCHAR +STARTCHAR uni0106E5 +ENCODING 67301 +BBX 15 10 0 0 +BITMAP +0038 +0028 +003E +002A +883E +5000 +3FFE +2012 +101E +0FE0 +ENDCHAR +STARTCHAR uni0106E6 +ENCODING 67302 +BBX 15 10 0 0 +BITMAP +001E +0012 +0012 +00FE +8892 +5092 +3FFE +2012 +101E +0FE0 +ENDCHAR +STARTCHAR uni0106E7 +ENCODING 67303 +BBX 14 11 1 0 +BITMAP +0438 +E454 +9FFC +8454 +9A38 +EA00 +1F00 +1100 +1F00 +2080 +30C0 +ENDCHAR +STARTCHAR uni0106E8 +ENCODING 67304 +BBX 14 11 1 0 +BITMAP +0810 +C810 +BFFC +8810 +B428 +D428 +3E7C +2244 +3E7C +4144 +61C4 +ENDCHAR +STARTCHAR uni0106E9 +ENCODING 67305 +BBX 13 12 1 0 +BITMAP +6000 +8080 +BC80 +8B80 +6880 +0B40 +0D40 +03E0 +0220 +03E0 +0410 +0618 +ENDCHAR +STARTCHAR uni0106EA +ENCODING 67306 +BBX 12 11 2 0 +BITMAP +0820 +C810 +BFD0 +8810 +B420 +D400 +3E00 +2200 +3E00 +4100 +6180 +ENDCHAR +STARTCHAR uni0106EB +ENCODING 67307 +BBX 13 11 1 0 +BITMAP +0800 +C800 +BE10 +8988 +B468 +D408 +3E10 +2200 +3E00 +4100 +6180 +ENDCHAR +STARTCHAR uni0106EC +ENCODING 67308 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +70 +A8 +A8 +A8 +70 +20 +38 +20 +20 +ENDCHAR +STARTCHAR uni0106ED +ENCODING 67309 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 -1 +BITMAP +F8 +70 +A8 +A8 +70 +20 +F8 +20 +70 +20 +20 +ENDCHAR +STARTCHAR uni0106EE +ENCODING 67310 +BBX 14 10 1 0 +BITMAP +F800 +7000 +A800 +A800 +A9E0 +7270 +22A8 +21F8 +2124 +2124 +ENDCHAR +STARTCHAR uni0106EF +ENCODING 67311 +BBX 14 10 0 0 +BITMAP +F800 +7000 +A888 +A95C +AA28 +7008 +205C +2088 +201C +2008 +ENDCHAR +STARTCHAR uni0106F0 +ENCODING 67312 +BBX 11 10 2 0 +BITMAP +F800 +7000 +A800 +AA20 +ABE0 +7220 +23E0 +2220 +23E0 +2220 +ENDCHAR +STARTCHAR uni0106F1 +ENCODING 67313 +BBX 13 10 1 0 +BITMAP +F800 +7000 +A8E0 +A910 +AA08 +72A8 +2208 +2248 +2110 +20E0 +ENDCHAR +STARTCHAR uni0106F2 +ENCODING 67314 +BBX 10 11 3 -1 +BITMAP +F800 +7000 +A900 +A880 +A840 +7080 +2100 +2280 +2040 +2080 +2100 +ENDCHAR +STARTCHAR uni0106F3 +ENCODING 67315 +BBX 11 10 2 0 +BITMAP +F800 +7000 +A800 +A800 +A880 +7080 +23E0 +2080 +2080 +2000 +ENDCHAR +STARTCHAR uni0106F4 +ENCODING 67316 +BBX 10 10 3 0 +BITMAP +F800 +7000 +A800 +A980 +AA40 +7040 +2080 +2100 +2200 +2400 +ENDCHAR +STARTCHAR uni0106F5 +ENCODING 67317 +BBX 10 10 3 0 +BITMAP +F800 +7000 +A800 +A980 +AA40 +7040 +2080 +27C0 +2200 +2400 +ENDCHAR +STARTCHAR uni0106F6 +ENCODING 67318 +BBX 10 10 2 0 +BITMAP +F800 +7000 +A800 +A980 +AA40 +7040 +2080 +2100 +2280 +2440 +ENDCHAR +STARTCHAR uni0106F7 +ENCODING 67319 +BBX 13 10 1 0 +BITMAP +F800 +71C0 +AA58 +AA40 +AA58 +71C0 +2000 +2700 +2200 +2200 +ENDCHAR +STARTCHAR uni0106F8 +ENCODING 67320 +BBX 13 10 1 0 +BITMAP +F800 +7000 +A800 +A800 +A9C0 +7258 +2240 +2258 +21C0 +2000 +ENDCHAR +STARTCHAR uni0106F9 +ENCODING 67321 +BBX 13 11 1 -1 +BITMAP +F9D8 +7240 +AA58 +AA40 +A9D8 +7000 +21D8 +2240 +2258 +2240 +21D8 +ENDCHAR +STARTCHAR uni0106FA +ENCODING 67322 +BBX 14 12 1 0 +BITMAP +0200 +4508 +A214 +4008 +1220 +0A40 +0000 +1FC0 +1240 +0A80 +0700 +1FC0 +ENDCHAR +STARTCHAR uni0106FB +ENCODING 67323 +BBX 11 14 2 -2 +BITMAP +FFE0 +8000 +8000 +FFE0 +8420 +9520 +8E20 +8420 +9520 +8E20 +8420 +9520 +8E20 +0400 +ENDCHAR +STARTCHAR uni0106FC +ENCODING 67324 +BBX 12 12 2 0 +BITMAP +FFF0 +8000 +8000 +FFF0 +8090 +A290 +9490 +8890 +8890 +8890 +8090 +8090 +ENDCHAR +STARTCHAR uni0106FD +ENCODING 67325 +BBX 15 12 0 0 +BITMAP +FFBE +8022 +803E +FFAA +88AA +8880 +8880 +AA80 +CC80 +8880 +8880 +8880 +ENDCHAR +STARTCHAR uni0106FE +ENCODING 67326 +BBX 15 13 0 0 +BITMAP +FFC0 +8000 +803E +8022 +FFFE +842A +842A +8420 +94A0 +A520 +8420 +8420 +8420 +ENDCHAR +STARTCHAR uni0106FF +ENCODING 67327 +BBX 11 14 1 -1 +BITMAP +0080 +0900 +0980 +0F80 +0000 +FFE0 +8000 +8000 +FFE0 +8420 +8420 +94A0 +A520 +8420 +ENDCHAR +STARTCHAR uni010700 +ENCODING 67328 +BBX 11 12 2 0 +BITMAP +0080 +0900 +0980 +FFE0 +8000 +8000 +FFE0 +8420 +8420 +94A0 +A520 +8420 +ENDCHAR +STARTCHAR uni010701 +ENCODING 67329 +BBX 11 13 2 0 +BITMAP +0E00 +1500 +1F00 +1500 +0E00 +FFE0 +8000 +8000 +FFE0 +8420 +94A0 +A520 +8420 +ENDCHAR +STARTCHAR uni010702 +ENCODING 67330 +BBX 13 10 1 0 +BITMAP +FF00 +8000 +8000 +FF00 +A078 +A0C8 +A148 +A1F8 +A148 +A148 +ENDCHAR +STARTCHAR uni010703 +ENCODING 67331 +BBX 14 10 1 0 +BITMAP +FC00 +8580 +8280 +8080 +8110 +C610 +AA7C +9110 +9090 +FF80 +ENDCHAR +STARTCHAR uni010704 +ENCODING 67332 +BBX 14 10 1 0 +BITMAP +FC00 +8580 +8280 +808C +8130 +C650 +AA7C +9100 +9080 +FF80 +ENDCHAR +STARTCHAR uni010705 +ENCODING 67333 +BBX 13 10 1 0 +BITMAP +F800 +8B00 +8500 +8100 +8220 +8420 +84F8 +8220 +8120 +FF00 +ENDCHAR +STARTCHAR uni010706 +ENCODING 67334 +BBX 13 10 1 0 +BITMAP +F800 +8B00 +8500 +8118 +8260 +84A0 +84F8 +8200 +8100 +FF00 +ENDCHAR +STARTCHAR uni010707 +ENCODING 67335 +BBX 10 13 3 0 +BITMAP +0100 +0080 +0040 +0280 +0100 +0080 +F900 +8A00 +8800 +FF80 +8880 +8880 +FF80 +ENDCHAR +STARTCHAR uni010708 +ENCODING 67336 +BBX 12 10 2 0 +BITMAP +00F0 +0110 +0210 +0210 +0110 +1FF0 +2010 +4F10 +9090 +9990 +ENDCHAR +STARTCHAR uni010709 +ENCODING 67337 +BBX 13 10 1 0 +BITMAP +3800 +44F8 +0200 +82A8 +44A8 +04A8 +8800 +4820 +1020 +1020 +ENDCHAR +STARTCHAR uni01070A +ENCODING 67338 +BBX 8 11 1 -1 +BITMAP +38 +44 +02 +62 +04 +64 +08 +89 +FF +91 +10 +ENDCHAR +STARTCHAR uni01070B +ENCODING 67339 +BBX 11 10 2 0 +BITMAP +7000 +8800 +0400 +C400 +0880 +C880 +13E0 +1080 +2080 +2000 +ENDCHAR +STARTCHAR uni01070C +ENCODING 67340 +BBX 14 10 1 0 +BITMAP +1838 +0440 +0890 +D108 +1244 +CC20 +0510 +0480 +0880 +0800 +ENDCHAR +STARTCHAR uni01070D +ENCODING 67341 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +70 +88 +04 +C4 +08 +C8 +10 +7C +20 +F8 +40 +E0 +ENDCHAR +STARTCHAR uni01070E +ENCODING 67342 +BBX 9 10 3 0 +BITMAP +1800 +C400 +0400 +C400 +0800 +1400 +FF80 +2200 +F780 +4100 +ENDCHAR +STARTCHAR uni01070F +ENCODING 67343 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +70 +88 +04 +C4 +08 +C8 +10 +50 +A0 +40 +80 +F8 +ENDCHAR +STARTCHAR uni010710 +ENCODING 67344 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +70 +88 +04 +C4 +08 +C8 +1E +12 +20 +40 +82 +FE +ENDCHAR +STARTCHAR uni010711 +ENCODING 67345 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +70 +88 +04 +C4 +08 +C8 +10 +16 +28 +48 +86 +FE +ENDCHAR +STARTCHAR uni010712 +ENCODING 67346 +BBX 15 10 0 0 +BITMAP +3800 +4400 +0210 +82A0 +447E +04C2 +893C +4824 +1018 +107E +ENDCHAR +STARTCHAR uni010713 +ENCODING 67347 +BBX 15 10 0 0 +BITMAP +7022 +8814 +0FF8 +D40C +1212 +D3F0 +2120 +2120 +00C0 +03F0 +ENDCHAR +STARTCHAR uni010714 +ENCODING 67348 +BBX 14 13 0 0 +BITMAP +00E0 +0140 +03E0 +7240 +8A00 +0814 +D7F8 +140C +D210 +23F0 +2120 +00C0 +01E0 +ENDCHAR +STARTCHAR uni010715 +ENCODING 67349 +BBX 14 13 0 0 +BITMAP +0660 +0678 +0380 +7230 +8A00 +0814 +D7F8 +140C +D210 +23F0 +2120 +00C0 +01E0 +ENDCHAR +STARTCHAR uni010716 +ENCODING 67350 +BBX 9 13 3 0 +BITMAP +3800 +4400 +0200 +3200 +0200 +3200 +0400 +FF80 +4500 +2A00 +1C00 +0800 +7F00 +ENDCHAR +STARTCHAR uni010717 +ENCODING 67351 +BBX 11 12 2 0 +BITMAP +7000 +8800 +0400 +6400 +0400 +6400 +0800 +1040 +2020 +42A0 +4220 +3FC0 +ENDCHAR +STARTCHAR uni010718 +ENCODING 67352 +BBX 13 13 1 0 +BITMAP +3800 +4400 +3400 +0400 +34F8 +0800 +10A8 +7CA8 +82A8 +AA00 +8220 +9220 +7C20 +ENDCHAR +STARTCHAR uni010719 +ENCODING 67353 +BBX 10 12 2 0 +BITMAP +0C00 +1000 +4000 +AE00 +4000 +1180 +4C40 +4040 +4080 +4100 +4200 +43C0 +ENDCHAR +STARTCHAR uni01071A +ENCODING 67354 +BBX 10 12 2 0 +BITMAP +0C00 +1000 +4000 +AE00 +4000 +1180 +4C40 +4040 +4080 +4100 +4200 +4200 +ENDCHAR +STARTCHAR uni01071B +ENCODING 67355 +BBX 12 12 2 0 +BITMAP +0C00 +1000 +4000 +AE00 +4000 +1000 +4DF0 +4040 +4040 +4040 +4040 +4040 +ENDCHAR +STARTCHAR uni01071C +ENCODING 67356 +BBX 11 14 2 -2 +BITMAP +0400 +0E00 +1500 +2480 +0400 +7FC0 +4040 +7FC0 +4040 +7FC0 +0000 +0000 +2A80 +8020 +ENDCHAR +STARTCHAR uni01071D +ENCODING 67357 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +10 +38 +54 +92 +10 +7C +10 +7C +10 +10 +ENDCHAR +STARTCHAR uni01071E +ENCODING 67358 +BBX 13 11 1 0 +BITMAP +1480 +5500 +8100 +8200 +7E00 +0400 +0410 +0808 +08A8 +1088 +1FF0 +ENDCHAR +STARTCHAR uni01071F +ENCODING 67359 +BBX 13 10 1 0 +BITMAP +1078 +3888 +1108 +3908 +5488 +5478 +7C18 +9228 +9248 +9388 +ENDCHAR +STARTCHAR uni010720 +ENCODING 67360 +BBX 14 11 1 0 +BITMAP +1020 +1020 +1020 +FFFC +3870 +54A8 +54A8 +7CF8 +9324 +9324 +9324 +ENDCHAR +STARTCHAR uni010721 +ENCODING 67361 +BBX 15 11 0 0 +BITMAP +1000 +1000 +FE00 +9210 +92A0 +FE7E +10C2 +113C +1024 +1018 +107E +ENDCHAR +STARTCHAR uni010722 +ENCODING 67362 +BBX 11 13 2 0 +BITMAP +8020 +2A80 +0000 +0400 +0400 +3F80 +2080 +1100 +0A00 +0400 +0A00 +1100 +2080 +ENDCHAR +STARTCHAR uni010723 +ENCODING 67363 +BBX 15 11 0 0 +BITMAP +0100 +0100 +01F0 +0100 +0100 +FFFE +1010 +2828 +4444 +8282 +FEFE +ENDCHAR +STARTCHAR uni010724 +ENCODING 67364 +BBX 15 10 0 0 +BITMAP +4100 +2200 +1400 +087C +C982 +3A82 +0C8C +3282 +C182 +007C +ENDCHAR +STARTCHAR uni010725 +ENCODING 67365 +BBX 7 11 3 -1 +BITMAP +F0 +90 +FE +92 +FE +78 +84 +28 +3E +10 +10 +ENDCHAR +STARTCHAR uni010726 +ENCODING 67366 +BBX 14 13 0 -1 +BITMAP +0010 +0010 +007C +0010 +0628 +0944 +097C +6800 +8180 +8640 +9840 +6380 +8000 +ENDCHAR +STARTCHAR uni010727 +ENCODING 67367 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +60 +10 +10 +20 +FE +82 +44 +44 +28 +28 +10 +7C +ENDCHAR +STARTCHAR uni010728 +ENCODING 67368 +BBX 11 11 2 0 +BITMAP +8020 +2A80 +0000 +3F80 +2080 +1100 +71C0 +0A00 +0A00 +0400 +1F00 +ENDCHAR +STARTCHAR uni010729 +ENCODING 67369 +BBX 9 13 3 0 +BITMAP +4100 +8880 +9C80 +6B00 +0800 +7F00 +4100 +2200 +E380 +1400 +1400 +0800 +3E00 +ENDCHAR +STARTCHAR uni01072A +ENCODING 67370 +BBX 9 13 3 0 +BITMAP +2200 +2400 +2400 +2200 +3E00 +7F00 +4100 +2200 +E380 +1400 +1400 +0800 +3E00 +ENDCHAR +STARTCHAR uni01072B +ENCODING 67371 +BBX 9 12 3 0 +BITMAP +0800 +1C00 +2A00 +0800 +7F00 +4100 +2200 +E380 +1400 +1400 +0800 +3E00 +ENDCHAR +STARTCHAR uni01072C +ENCODING 67372 +BBX 14 8 1 0 +BITMAP +7FFC +9004 +9224 +73E4 +12A4 +0888 +0888 +07F0 +ENDCHAR +STARTCHAR uni01072D +ENCODING 67373 +BBX 13 10 1 0 +BITMAP +3FE0 +2020 +2420 +6530 +9648 +9448 +7570 +1640 +1040 +0F80 +ENDCHAR +STARTCHAR uni01072E +ENCODING 67374 +BBX 15 12 0 0 +BITMAP +0FE0 +1010 +654C +A38A +7FFC +2388 +1550 +1010 +1010 +0820 +0820 +0FE0 +ENDCHAR +STARTCHAR uni01072F +ENCODING 67375 +BBX 13 11 1 0 +BITMAP +1040 +1FC0 +1240 +4210 +A228 +A228 +7FF0 +4010 +4010 +4010 +7FF0 +ENDCHAR +STARTCHAR uni010730 +ENCODING 67376 +BBX 11 12 2 0 +BITMAP +7F80 +9080 +9080 +6640 +4920 +4820 +2440 +2240 +1280 +1080 +0900 +0F00 +ENDCHAR +STARTCHAR uni010731 +ENCODING 67377 +BBX 11 12 2 0 +BITMAP +7F80 +9080 +9080 +6340 +4420 +4E20 +2440 +2440 +1080 +1080 +0900 +0F00 +ENDCHAR +STARTCHAR uni010732 +ENCODING 67378 +BBX 12 12 1 0 +BITMAP +7FF0 +9020 +A790 +6490 +2590 +2410 +17A0 +1020 +0840 +0840 +0840 +0FC0 +ENDCHAR +STARTCHAR uni010733 +ENCODING 67379 +BBX 14 11 1 0 +BITMAP +7FF8 +9010 +9450 +6008 +2828 +4004 +4824 +2008 +1450 +0820 +0FE0 +ENDCHAR +STARTCHAR uni010734 +ENCODING 67380 +BBX 13 12 2 0 +BITMAP +4010 +1540 +0000 +2320 +4410 +4410 +8E08 +8408 +4410 +2420 +1040 +1FC0 +ENDCHAR +STARTCHAR uni010735 +ENCODING 67381 +BBX 15 11 0 0 +BITMAP +4200 +A500 +A500 +FF00 +AB00 +D570 +6A96 +5690 +6A96 +3470 +3C00 +ENDCHAR +STARTCHAR uni010736 +ENCODING 67382 +BBX 14 15 1 -2 +BITMAP +1C00 +0200 +8200 +83C0 +6430 +1908 +0808 +0038 +23C0 +4400 +88E0 +512C +2120 +012C +00E0 +ENDCHAR +STARTCHAR uni010740 +ENCODING 67392 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +F8 +20 +20 +F8 +20 +20 +20 +ENDCHAR +STARTCHAR uni010741 +ENCODING 67393 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010742 +ENCODING 67394 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +08 +10 +20 +40 +80 +84 +78 +ENDCHAR +STARTCHAR uni010743 +ENCODING 67395 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +04 +08 +10 +20 +20 +40 +40 +ENDCHAR +STARTCHAR uni010744 +ENCODING 67396 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +04 +08 +10 +FC +20 +40 +40 +ENDCHAR +STARTCHAR uni010745 +ENCODING 67397 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +04 +08 +10 +28 +28 +44 +44 +ENDCHAR +STARTCHAR uni010746 +ENCODING 67398 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +08 +10 +10 +20 +20 +40 +40 +80 +F8 +ENDCHAR +STARTCHAR uni010747 +ENCODING 67399 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010748 +ENCODING 67400 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +3C +44 +84 +84 +84 +84 +84 +84 +44 +3C +ENDCHAR +STARTCHAR uni010749 +ENCODING 67401 +BBX 11 10 2 0 +BITMAP +3C00 +4400 +8400 +84E0 +8400 +8400 +84E0 +8400 +4400 +3C00 +ENDCHAR +STARTCHAR uni01074A +ENCODING 67402 +BBX 11 10 2 0 +BITMAP +3C00 +44E0 +8400 +8400 +84E0 +8400 +8400 +84E0 +4400 +3C00 +ENDCHAR +STARTCHAR uni01074B +ENCODING 67403 +BBX 11 10 2 0 +BITMAP +3C00 +44E0 +8400 +84E0 +8400 +84E0 +8400 +84E0 +4400 +3C00 +ENDCHAR +STARTCHAR uni01074C +ENCODING 67404 +BBX 13 11 1 0 +BITMAP +0F38 +3100 +4138 +8100 +8138 +8100 +8138 +8100 +4138 +3100 +0F38 +ENDCHAR +STARTCHAR uni01074D +ENCODING 67405 +BBX 9 10 2 0 +BITMAP +2200 +2200 +2200 +FF80 +2200 +2200 +2200 +2200 +2200 +2200 +ENDCHAR +STARTCHAR uni01074E +ENCODING 67406 +BBX 9 10 2 0 +BITMAP +2200 +2200 +2200 +FF80 +2200 +2200 +FF80 +2200 +2200 +2200 +ENDCHAR +STARTCHAR uni01074F +ENCODING 67407 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +C0 +A0 +90 +88 +90 +A0 +C0 +80 +80 +80 +ENDCHAR +STARTCHAR uni010750 +ENCODING 67408 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +80 +80 +80 +80 +B8 +80 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni010751 +ENCODING 67409 +BBX 10 10 3 0 +BITMAP +2000 +2080 +21C0 +F880 +2000 +2000 +F880 +21C0 +2080 +2000 +ENDCHAR +STARTCHAR uni010752 +ENCODING 67410 +BBX 11 5 2 3 +BITMAP +2080 +2080 +FBE0 +2080 +2080 +ENDCHAR +STARTCHAR uni010753 +ENCODING 67411 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +60 +90 +20 +48 +30 +60 +90 +20 +48 +30 +ENDCHAR +STARTCHAR uni010754 +ENCODING 67412 +BBX 14 11 1 0 +BITMAP +7000 +8800 +8000 +B000 +AB00 +A6B0 +AA68 +B2A4 +A328 +A230 +A220 +ENDCHAR +STARTCHAR uni010755 +ENCODING 67413 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +10 +20 +40 +80 +F0 +00 +F0 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni010760 +ENCODING 67424 +BBX 7 13 4 -1 +BITMAP +92 +54 +38 +92 +54 +38 +92 +54 +38 +92 +FE +92 +10 +ENDCHAR +STARTCHAR uni010761 +ENCODING 67425 +BBX 9 12 3 -1 +BITMAP +FF80 +8080 +AA80 +AA80 +BE80 +A080 +A080 +8080 +FF80 +4900 +4900 +4900 +ENDCHAR +STARTCHAR uni010762 +ENCODING 67426 +BBX 9 10 3 0 +BITMAP +0080 +0080 +0080 +E080 +1080 +1080 +1080 +E080 +8080 +FF80 +ENDCHAR +STARTCHAR uni010763 +ENCODING 67427 +BBX 11 12 2 0 +BITMAP +1000 +0900 +1900 +FFE0 +8000 +8000 +FFE0 +8420 +8420 +94A0 +A520 +8420 +ENDCHAR +STARTCHAR uni010764 +ENCODING 67428 +BBX 9 10 3 0 +BITMAP +FC00 +8580 +8280 +8080 +8100 +C600 +AA00 +9100 +9080 +FF80 +ENDCHAR +STARTCHAR uni010765 +ENCODING 67429 +BBX 9 10 3 0 +BITMAP +F000 +8800 +8400 +8400 +8800 +F000 +A000 +9800 +8600 +8180 +ENDCHAR +STARTCHAR uni010766 +ENCODING 67430 +BBX 8 13 4 -1 +BITMAP +09 +12 +40 +7E +40 +52 +49 +40 +40 +F0 +40 +40 +40 +ENDCHAR +STARTCHAR uni010767 +ENCODING 67431 +BBX 9 13 3 -1 +BITMAP +0900 +1200 +4000 +7E00 +4000 +5200 +4900 +4000 +4300 +F080 +4100 +4200 +4380 +ENDCHAR +STARTCHAR uni010800 +ENCODING 67584 +BBX 11 11 2 0 +BITMAP +8420 +4440 +2480 +1500 +0E00 +0400 +0E00 +1500 +2480 +4440 +8420 +ENDCHAR +STARTCHAR uni010801 +ENCODING 67585 +BBX 11 11 2 0 +BITMAP +8420 +4440 +2480 +15E0 +0E00 +0400 +0E00 +1500 +2480 +4440 +8420 +ENDCHAR +STARTCHAR uni010802 +ENCODING 67586 +BBX 11 11 2 0 +BITMAP +8420 +4440 +2480 +1500 +0E00 +0400 +0A00 +1100 +2080 +4040 +8020 +ENDCHAR +STARTCHAR uni010803 +ENCODING 67587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +88 +50 +20 +00 +88 +50 +20 +F8 +ENDCHAR +STARTCHAR uni010804 +ENCODING 67588 +BBX 9 11 3 0 +BITMAP +2200 +5500 +8880 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni010805 +ENCODING 67589 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +70 +88 +88 +88 +88 +88 +88 +88 +88 +50 +20 +ENDCHAR +STARTCHAR uni010808 +ENCODING 67592 +BBX 13 5 1 0 +BITMAP +8208 +4510 +28A0 +1040 +03F8 +ENDCHAR +STARTCHAR uni01080A +ENCODING 67594 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni01080B +ENCODING 67595 +BBX 10 12 3 -1 +BITMAP +0200 +0100 +0080 +1040 +0880 +0500 +8200 +4400 +2800 +1000 +2800 +4400 +ENDCHAR +STARTCHAR uni01080C +ENCODING 67596 +BBX 7 11 4 0 +BITMAP +F8 +00 +88 +54 +22 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01080D +ENCODING 67597 +BBX 9 11 3 0 +BITMAP +7F00 +4100 +4100 +4100 +4100 +8080 +8080 +8080 +8080 +8080 +8080 +ENDCHAR +STARTCHAR uni01080E +ENCODING 67598 +BBX 11 11 2 0 +BITMAP +9120 +4A40 +2480 +1100 +0A00 +0400 +0E00 +1500 +2480 +4440 +8420 +ENDCHAR +STARTCHAR uni01080F +ENCODING 67599 +BBX 11 6 2 0 +BITMAP +8080 +4140 +2220 +1400 +0800 +FF80 +ENDCHAR +STARTCHAR uni010810 +ENCODING 67600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +60 +90 +90 +90 +90 +60 +90 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni010811 +ENCODING 67601 +BBX 8 10 4 0 +BITMAP +02 +04 +08 +10 +20 +40 +FF +00 +00 +FF +ENDCHAR +STARTCHAR uni010812 +ENCODING 67602 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +20 +20 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010813 +ENCODING 67603 +BBX 11 11 2 0 +BITMAP +1F00 +2080 +4040 +4040 +8020 +8020 +9120 +9120 +9120 +9120 +8E20 +ENDCHAR +STARTCHAR uni010814 +ENCODING 67604 +BBX 13 11 1 0 +BITMAP +9048 +4890 +2520 +1240 +0880 +0500 +0880 +1040 +2020 +4010 +8008 +ENDCHAR +STARTCHAR uni010815 +ENCODING 67605 +BBX 11 12 2 -1 +BITMAP +8020 +4040 +2080 +1100 +0A00 +0400 +0A00 +1100 +2480 +4440 +8420 +0300 +ENDCHAR +STARTCHAR uni010816 +ENCODING 67606 +BBX 13 6 1 1 +BITMAP +2020 +5050 +8888 +0500 +0200 +3FE0 +ENDCHAR +STARTCHAR uni010817 +ENCODING 67607 +BBX 11 7 2 0 +BITMAP +1F00 +64C0 +8420 +8420 +8420 +64C0 +1F00 +ENDCHAR +STARTCHAR uni010818 +ENCODING 67608 +BBX 11 11 2 0 +BITMAP +8020 +4040 +2080 +9120 +8A20 +8420 +8A20 +9120 +2080 +4040 +8020 +ENDCHAR +STARTCHAR uni010819 +ENCODING 67609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +00 +FE +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01081A +ENCODING 67610 +BBX 11 11 2 0 +BITMAP +0200 +0400 +8820 +9020 +8820 +8420 +8220 +8120 +8220 +0400 +0800 +ENDCHAR +STARTCHAR uni01081B +ENCODING 67611 +BBX 11 11 2 -1 +BITMAP +0100 +0080 +0040 +0820 +0440 +0280 +4100 +2200 +1400 +0800 +FFE0 +ENDCHAR +STARTCHAR uni01081C +ENCODING 67612 +BBX 12 10 2 0 +BITMAP +0400 +0200 +0100 +0200 +0440 +08A0 +1110 +2200 +4400 +8800 +ENDCHAR +STARTCHAR uni01081D +ENCODING 67613 +BBX 9 11 2 0 +BITMAP +8080 +4080 +2080 +1080 +0800 +0400 +0800 +1080 +2080 +4080 +8080 +ENDCHAR +STARTCHAR uni01081E +ENCODING 67614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +20 +20 +20 +20 +F8 +20 +20 +F8 +20 +20 +20 +ENDCHAR +STARTCHAR uni01081F +ENCODING 67615 +BBX 5 11 5 0 +BITMAP +10 +20 +40 +80 +40 +20 +10 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni010820 +ENCODING 67616 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 2 +BITMAP +88 +50 +20 +00 +88 +50 +20 +ENDCHAR +STARTCHAR uni010821 +ENCODING 67617 +BBX 9 11 3 0 +BITMAP +0700 +0880 +0800 +0600 +0200 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni010822 +ENCODING 67618 +BBX 13 10 1 1 +BITMAP +0880 +1040 +2020 +4210 +2220 +1240 +0A80 +0700 +0200 +FFF8 +ENDCHAR +STARTCHAR uni010823 +ENCODING 67619 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +38 +44 +44 +44 +44 +44 +44 +44 +44 +28 +FE +ENDCHAR +STARTCHAR uni010824 +ENCODING 67620 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +10 +28 +44 +82 +00 +28 +28 +28 +28 +ENDCHAR +STARTCHAR uni010825 +ENCODING 67621 +BBX 10 10 3 0 +BITMAP +0200 +0100 +0080 +1040 +0880 +0500 +8200 +4400 +2800 +1000 +ENDCHAR +STARTCHAR uni010826 +ENCODING 67622 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +70 +88 +88 +88 +50 +20 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni010827 +ENCODING 67623 +BBX 11 11 2 0 +BITMAP +8020 +4040 +2080 +2080 +1100 +1100 +1100 +2080 +2480 +4240 +8120 +ENDCHAR +STARTCHAR uni010828 +ENCODING 67624 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +82 +82 +82 +82 +44 +44 +44 +28 +28 +28 +10 +ENDCHAR +STARTCHAR uni010829 +ENCODING 67625 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +92 +92 +92 +92 +FE +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01082A +ENCODING 67626 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +28 +44 +92 +10 +10 +10 +10 +1C +00 +7E +ENDCHAR +STARTCHAR uni01082B +ENCODING 67627 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +50 +20 +88 +50 +20 +F8 +00 +F8 +ENDCHAR +STARTCHAR uni01082C +ENCODING 67628 +BBX 12 11 2 0 +BITMAP +8080 +4080 +2080 +23E0 +1080 +1140 +1140 +2220 +2220 +4410 +8410 +ENDCHAR +STARTCHAR uni01082D +ENCODING 67629 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +80 +80 +80 +80 +80 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01082E +ENCODING 67630 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +10 +10 +92 +54 +38 +10 +FE +ENDCHAR +STARTCHAR uni01082F +ENCODING 67631 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010830 +ENCODING 67632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +20 +20 +20 +3C +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010831 +ENCODING 67633 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +40 +40 +40 +7C +40 +54 +54 +54 +54 +54 +ENDCHAR +STARTCHAR uni010832 +ENCODING 67634 +BBX 13 11 1 0 +BITMAP +8008 +4010 +2020 +1040 +0880 +0500 +0880 +1240 +2520 +4890 +9048 +ENDCHAR +STARTCHAR uni010833 +ENCODING 67635 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni010834 +ENCODING 67636 +BBX 13 11 1 0 +BITMAP +8208 +4210 +2220 +1240 +0880 +0500 +0880 +1040 +2020 +4010 +8008 +ENDCHAR +STARTCHAR uni010835 +ENCODING 67637 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +28 +44 +82 +10 +10 +10 +10 +10 +10 +E0 +ENDCHAR +STARTCHAR uni010837 +ENCODING 67639 +BBX 10 11 2 0 +BITMAP +8040 +4080 +2100 +2100 +1200 +1200 +1200 +2100 +2100 +4080 +8040 +ENDCHAR +STARTCHAR uni010838 +ENCODING 67640 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +12 +22 +42 +42 +82 +9E +82 +42 +42 +22 +12 +ENDCHAR +STARTCHAR uni01083C +ENCODING 67644 +BBX 13 12 1 0 +BITMAP +0200 +8108 +4890 +2420 +1240 +0880 +0500 +0880 +1040 +2020 +4010 +8008 +ENDCHAR +STARTCHAR uni01083F +ENCODING 67647 +BBX 10 11 3 0 +BITMAP +1080 +2100 +4200 +8400 +4200 +2100 +1080 +0840 +1080 +2100 +4200 +ENDCHAR +STARTCHAR uni010840 +ENCODING 67648 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +08 +C8 +B0 +A0 +D0 +10 +08 +08 +ENDCHAR +STARTCHAR uni010841 +ENCODING 67649 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +80 +F0 +08 +08 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni010842 +ENCODING 67650 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +10 +20 +D0 +10 +08 +08 +08 +ENDCHAR +STARTCHAR uni010843 +ENCODING 67651 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +88 +78 +08 +08 +08 +08 +10 +ENDCHAR +STARTCHAR uni010844 +ENCODING 67652 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +78 +98 +24 +24 +48 +08 +10 +20 +ENDCHAR +STARTCHAR uni010845 +ENCODING 67653 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 7 2 0 +BITMAP +C0 +C0 +20 +20 +20 +20 +40 +ENDCHAR +STARTCHAR uni010846 +ENCODING 67654 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 7 3 0 +BITMAP +40 +40 +40 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni010847 +ENCODING 67655 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +D8 +D8 +24 +24 +24 +24 +48 +ENDCHAR +STARTCHAR uni010848 +ENCODING 67656 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +20 +40 +58 +98 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni010849 +ENCODING 67657 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 4 +BITMAP +40 +20 +50 +90 +ENDCHAR +STARTCHAR uni01084A +ENCODING 67658 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 -2 +BITMAP +50 +70 +10 +10 +10 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni01084B +ENCODING 67659 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 0 +BITMAP +20 +20 +40 +40 +80 +80 +80 +80 +60 +ENDCHAR +STARTCHAR uni01084C +ENCODING 67660 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +A0 +F8 +24 +24 +44 +88 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni01084D +ENCODING 67661 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 -2 +BITMAP +10 +20 +40 +40 +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni01084E +ENCODING 67662 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +60 +A0 +38 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni01084F +ENCODING 67663 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 3 +BITMAP +88 +88 +50 +20 +ENDCHAR +STARTCHAR uni010850 +ENCODING 67664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +30 +30 +08 +08 +08 +08 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni010851 +ENCODING 67665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +4C +52 +62 +44 +44 +40 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni010852 +ENCODING 67666 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +80 +F8 +44 +44 +48 +50 +40 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni010853 +ENCODING 67667 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 -2 +BITMAP +88 +78 +08 +08 +08 +10 +10 +20 +40 +ENDCHAR +STARTCHAR uni010854 +ENCODING 67668 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +94 +54 +64 +44 +48 +50 +60 +ENDCHAR +STARTCHAR uni010855 +ENCODING 67669 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +40 +40 +78 +44 +44 +40 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni010857 +ENCODING 67671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +64 +68 +10 +FC +10 +10 +10 +10 +10 +20 +ENDCHAR +STARTCHAR uni010858 +ENCODING 67672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 7 3 0 +BITMAP +40 +40 +40 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni010859 +ENCODING 67673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +90 +90 +90 +90 +90 +90 +A0 +ENDCHAR +STARTCHAR uni01085A +ENCODING 67674 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +94 +94 +94 +94 +94 +94 +A4 +08 +ENDCHAR +STARTCHAR uni01085B +ENCODING 67675 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 2 +BITMAP +F8 +04 +04 +ENDCHAR +STARTCHAR uni01085C +ENCODING 67676 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 1 +BITMAP +E0 +20 +38 +04 +04 +ENDCHAR +STARTCHAR uni01085D +ENCODING 67677 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +40 +80 +F8 +04 +64 +ENDCHAR +STARTCHAR uni01085E +ENCODING 67678 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 -2 +BITMAP +08 +08 +D0 +D0 +20 +20 +20 +20 +58 +40 +80 +ENDCHAR +STARTCHAR uni01085F +ENCODING 67679 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +40 +80 +F8 +44 +74 +10 +F8 +04 +04 +ENDCHAR +STARTCHAR uni010860 +ENCODING 67680 +BBX 12 10 2 0 +BITMAP +2040 +1040 +2840 +4440 +4280 +8100 +8080 +9040 +9020 +6010 +ENDCHAR +STARTCHAR uni010861 +ENCODING 67681 +BBX 9 10 3 0 +BITMAP +4200 +4200 +2600 +1A00 +0100 +0100 +0100 +0080 +0080 +FF80 +ENDCHAR +STARTCHAR uni010862 +ENCODING 67682 +BBX 10 10 3 0 +BITMAP +4000 +4000 +2000 +2000 +2000 +1000 +1800 +1400 +2200 +C1C0 +ENDCHAR +STARTCHAR uni010863 +ENCODING 67683 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +84 +84 +4C +34 +04 +04 +06 +01 +01 +01 +ENDCHAR +STARTCHAR uni010864 +ENCODING 67684 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +88 +48 +28 +18 +08 +14 +22 +42 +02 +02 +ENDCHAR +STARTCHAR uni010865 +ENCODING 67685 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +70 +88 +88 +10 +38 +04 +04 +04 +ENDCHAR +STARTCHAR uni010866 +ENCODING 67686 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 3 1 +BITMAP +80 +80 +80 +80 +80 +40 +40 +40 +20 +ENDCHAR +STARTCHAR uni010867 +ENCODING 67687 +BBX 11 10 2 0 +BITMAP +2080 +2080 +2280 +1580 +1880 +1040 +0840 +0820 +8820 +7020 +ENDCHAR +STARTCHAR uni010868 +ENCODING 67688 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +20 +40 +80 +80 +98 +A4 +84 +44 +38 +ENDCHAR +STARTCHAR uni010869 +ENCODING 67689 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 6 +BITMAP +70 +88 +88 +10 +ENDCHAR +STARTCHAR uni01086A +ENCODING 67690 +BBX 9 10 3 0 +BITMAP +2100 +2100 +1300 +0D00 +0080 +0080 +0080 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni01086B +ENCODING 67691 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +80 +80 +80 +84 +84 +8C +74 +04 +02 +02 +22 +22 +1C +ENDCHAR +STARTCHAR uni01086C +ENCODING 67692 +BBX 12 10 2 0 +BITMAP +2040 +30C0 +2F40 +2020 +1020 +1020 +1010 +1010 +2110 +C0E0 +ENDCHAR +STARTCHAR uni01086D +ENCODING 67693 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 1 -1 +BITMAP +20 +20 +20 +40 +E0 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01086E +ENCODING 67694 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +20 +20 +10 +10 +08 +88 +70 +ENDCHAR +STARTCHAR uni01086F +ENCODING 67695 +BBX 10 10 3 0 +BITMAP +C200 +2200 +1500 +0900 +0080 +0080 +0040 +0040 +8080 +7F00 +ENDCHAR +STARTCHAR uni010870 +ENCODING 67696 +BBX 10 10 3 0 +BITMAP +2040 +2080 +1100 +0E00 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni010871 +ENCODING 67697 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +44 +44 +08 +14 +02 +02 +82 +44 +38 +ENDCHAR +STARTCHAR uni010872 +ENCODING 67698 +BBX 12 10 2 0 +BITMAP +2100 +2100 +2100 +1080 +1F80 +1080 +0890 +0860 +8800 +7000 +ENDCHAR +STARTCHAR uni010873 +ENCODING 67699 +BBX 12 10 2 0 +BITMAP +2040 +30C0 +2F40 +2020 +1020 +1020 +0810 +0810 +8910 +70E0 +ENDCHAR +STARTCHAR uni010874 +ENCODING 67700 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +20 +84 +84 +4C +34 +04 +04 +06 +01 +01 +01 +ENDCHAR +STARTCHAR uni010875 +ENCODING 67701 +BBX 10 10 3 0 +BITMAP +8000 +8200 +4400 +4800 +3000 +2040 +1080 +1100 +0A00 +0C00 +ENDCHAR +STARTCHAR uni010876 +ENCODING 67702 +BBX 10 10 3 0 +BITMAP +2000 +2000 +2200 +1500 +1880 +1040 +0800 +0800 +8800 +7000 +ENDCHAR +STARTCHAR uni010877 +ENCODING 67703 +BBX 14 9 1 1 +BITMAP +0380 +0440 +3840 +4484 +81E4 +4498 +3840 +0440 +0380 +ENDCHAR +STARTCHAR uni010878 +ENCODING 67704 +BBX 14 9 1 1 +BITMAP +0700 +0880 +0870 +6488 +9E04 +8488 +0870 +0880 +0700 +ENDCHAR +STARTCHAR uni010879 +ENCODING 67705 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 2 0 +BITMAP +20 +20 +20 +20 +20 +20 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni01087A +ENCODING 67706 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +24 +24 +24 +24 +24 +28 +48 +48 +50 +80 +ENDCHAR +STARTCHAR uni01087B +ENCODING 67707 +BBX 9 10 3 0 +BITMAP +2480 +2480 +2480 +2480 +2480 +2900 +4900 +4900 +5200 +8000 +ENDCHAR +STARTCHAR uni01087C +ENCODING 67708 +BBX 12 10 2 0 +BITMAP +2490 +2490 +2490 +2490 +2490 +2920 +4920 +4920 +5240 +8000 +ENDCHAR +STARTCHAR uni01087D +ENCODING 67709 +BBX 10 10 3 0 +BITMAP +2040 +2080 +1100 +0E00 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni01087E +ENCODING 67710 +BBX 14 5 1 1 +BITMAP +FFF8 +0004 +0004 +0064 +0098 +ENDCHAR +STARTCHAR uni01087F +ENCODING 67711 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +88 +08 +10 +20 +10 +08 +88 +70 +ENDCHAR +STARTCHAR uni010880 +ENCODING 67712 +BBX 13 11 1 0 +BITMAP +0040 +FC40 +0240 +0240 +3F80 +4200 +3A00 +0100 +0100 +0100 +00F8 +ENDCHAR +STARTCHAR uni010881 +ENCODING 67713 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +0C +70 +90 +88 +88 +88 +88 +88 +48 +30 +ENDCHAR +STARTCHAR uni010882 +ENCODING 67714 +BBX 12 10 2 0 +BITMAP +11E0 +0E10 +0010 +0010 +0010 +0010 +0010 +1E10 +6190 +8060 +ENDCHAR +STARTCHAR uni010883 +ENCODING 67715 +BBX 12 10 2 0 +BITMAP +0010 +0010 +0010 +0020 +0020 +0020 +0040 +0040 +0040 +FF80 +ENDCHAR +STARTCHAR uni010884 +ENCODING 67716 +BBX 13 11 1 0 +BITMAP +2000 +1000 +0800 +0400 +0200 +FF00 +0080 +0040 +0020 +0010 +0008 +ENDCHAR +STARTCHAR uni010885 +ENCODING 67717 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +98 +64 +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni010886 +ENCODING 67718 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +04 +FC +44 +44 +44 +44 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni010887 +ENCODING 67719 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +04 +FC +24 +24 +24 +24 +44 +44 +44 +84 +ENDCHAR +STARTCHAR uni010888 +ENCODING 67720 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +60 +90 +90 +90 +90 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010889 +ENCODING 67721 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 11 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01088A +ENCODING 67722 +BBX 11 11 2 0 +BITMAP +1020 +1320 +14A0 +1860 +1020 +1020 +1020 +1020 +1020 +1020 +F020 +ENDCHAR +STARTCHAR uni01088B +ENCODING 67723 +BBX 12 11 2 0 +BITMAP +8000 +8000 +8000 +8000 +8000 +81E0 +8E10 +B010 +8060 +8780 +7800 +ENDCHAR +STARTCHAR uni01088C +ENCODING 67724 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +30 +40 +80 +E0 +10 +08 +08 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni01088D +ENCODING 67725 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +08 +08 +10 +10 +20 +20 +38 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni01088E +ENCODING 67726 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +8C +72 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni01088F +ENCODING 67727 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +98 +64 +04 +04 +04 +04 +04 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni010890 +ENCODING 67728 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +98 +A4 +C4 +04 +08 +10 +20 +ENDCHAR +STARTCHAR uni010891 +ENCODING 67729 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 0 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni010892 +ENCODING 67730 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +78 +24 +24 +24 +44 +44 +44 +44 +24 +18 +ENDCHAR +STARTCHAR uni010893 +ENCODING 67731 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +78 +24 +24 +24 +44 +04 +24 +24 +24 +18 +ENDCHAR +STARTCHAR uni010894 +ENCODING 67732 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 13 2 -2 +BITMAP +80 +40 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010895 +ENCODING 67733 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +F0 +ENDCHAR +STARTCHAR uni010896 +ENCODING 67734 +BBX 12 11 1 0 +BITMAP +6000 +93E0 +9C10 +7010 +1010 +1020 +1020 +1040 +1080 +1100 +1E00 +ENDCHAR +STARTCHAR uni010897 +ENCODING 67735 +BBX 8 11 4 0 +BITMAP +81 +81 +81 +42 +42 +24 +14 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni010898 +ENCODING 67736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +78 +84 +84 +84 +44 +04 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni010899 +ENCODING 67737 +BBX 10 11 2 0 +BITMAP +0400 +0780 +0440 +0440 +0480 +0400 +0400 +0400 +0400 +8400 +7800 +ENDCHAR +STARTCHAR uni01089A +ENCODING 67738 +BBX 10 11 2 0 +BITMAP +0780 +0440 +0440 +0440 +0780 +0400 +0400 +0400 +0400 +8400 +7800 +ENDCHAR +STARTCHAR uni01089B +ENCODING 67739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +F0 +08 +08 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni01089C +ENCODING 67740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +90 +A4 +C8 +90 +A0 +C0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01089D +ENCODING 67741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +20 +20 +28 +30 +24 +28 +30 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uni01089E +ENCODING 67742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +20 +2C +32 +22 +22 +22 +22 +22 +22 +22 +CC +ENDCHAR +STARTCHAR uni0108A7 +ENCODING 67751 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 11 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0108A8 +ENCODING 67752 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 0 +BITMAP +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +E0 +ENDCHAR +STARTCHAR uni0108A9 +ENCODING 67753 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +F8 +ENDCHAR +STARTCHAR uni0108AA +ENCODING 67754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +AA +AA +AA +AA +AA +AA +AA +AA +AA +AA +FE +ENDCHAR +STARTCHAR uni0108AB +ENCODING 67755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +88 +88 +50 +50 +20 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni0108AC +ENCODING 67756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 3 0 +BITMAP +20 +20 +40 +40 +80 +80 +E0 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni0108AD +ENCODING 67757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 0 +BITMAP +1C +22 +42 +82 +82 +ENDCHAR +STARTCHAR uni0108AE +ENCODING 67758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +78 +84 +04 +04 +04 +38 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni0108AF +ENCODING 67759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +60 +90 +90 +70 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0108E0 +ENCODING 67808 +BBX 12 8 2 0 +BITMAP +0810 +0810 +0810 +0810 +0810 +0810 +0810 +FFF0 +ENDCHAR +STARTCHAR uni0108E1 +ENCODING 67809 +BBX 13 8 1 0 +BITMAP +0020 +0010 +0008 +0008 +0008 +0008 +0010 +FFE0 +ENDCHAR +STARTCHAR uni0108E2 +ENCODING 67810 +BBX 13 8 1 0 +BITMAP +0400 +0200 +0100 +0080 +0040 +0020 +0010 +FFF8 +ENDCHAR +STARTCHAR uni0108E3 +ENCODING 67811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni0108E4 +ENCODING 67812 +BBX 10 8 3 0 +BITMAP +4040 +2040 +5040 +4840 +4440 +8240 +8140 +80C0 +ENDCHAR +STARTCHAR uni0108E5 +ENCODING 67813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 2 0 +BITMAP +80 +40 +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni0108E6 +ENCODING 67814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 8 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0108E7 +ENCODING 67815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +C4 +A4 +A4 +94 +94 +8C +84 +ENDCHAR +STARTCHAR uni0108E8 +ENCODING 67816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +08 +10 +20 +40 +88 +84 +84 +44 +38 +ENDCHAR +STARTCHAR uni0108E9 +ENCODING 67817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +70 +80 +80 +40 +40 +20 +10 +20 +ENDCHAR +STARTCHAR uni0108EA +ENCODING 67818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni0108EB +ENCODING 67819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +80 +40 +20 +10 +08 +04 +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni0108EC +ENCODING 67820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +20 +20 +FE +22 +22 +22 +22 +22 +22 +22 +ENDCHAR +STARTCHAR uni0108ED +ENCODING 67821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 3 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0108EE +ENCODING 67822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +80 +80 +FE +82 +82 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni0108EF +ENCODING 67823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 1 +BITMAP +80 +40 +20 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni0108F0 +ENCODING 67824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +30 +48 +84 +84 +4C +34 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni0108F1 +ENCODING 67825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +C4 +A4 +A4 +94 +94 +8C +80 +80 +80 +ENDCHAR +STARTCHAR uni0108F2 +ENCODING 67826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +22 +22 +22 +22 +22 +22 +22 +ENDCHAR +STARTCHAR uni0108F4 +ENCODING 67828 +BBX 15 8 1 0 +BITMAP +C000 +B000 +8C00 +8300 +80C0 +8030 +8008 +FFFE +ENDCHAR +STARTCHAR uni0108F5 +ENCODING 67829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +80 +80 +FC +84 +84 +84 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0108FB +ENCODING 67835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 9 3 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0108FC +ENCODING 67836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 1 +BITMAP +80 +40 +20 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni0108FD +ENCODING 67837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni0108FE +ENCODING 67838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 0 +BITMAP +80 +40 +20 +40 +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uni0108FF +ENCODING 67839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +10 +10 +28 +28 +44 +44 +82 +FE +ENDCHAR +STARTCHAR uni010900 +ENCODING 67840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +14 +18 +10 +30 +50 +90 +50 +30 +10 +18 +14 +ENDCHAR +STARTCHAR uni010901 +ENCODING 67841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +18 +28 +48 +88 +48 +28 +18 +08 +08 +F8 +ENDCHAR +STARTCHAR uni010902 +ENCODING 67842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +0C +34 +C4 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni010903 +ENCODING 67843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +04 +0C +14 +24 +44 +84 +44 +24 +14 +0C +04 +ENDCHAR +STARTCHAR uni010904 +ENCODING 67844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +0C +34 +C4 +0C +34 +C4 +0C +34 +C4 +04 +ENDCHAR +STARTCHAR uni010905 +ENCODING 67845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +84 +44 +38 +08 +08 +08 +04 +04 +02 +ENDCHAR +STARTCHAR uni010906 +ENCODING 67846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 3 +BITMAP +22 +54 +88 +ENDCHAR +STARTCHAR uni010907 +ENCODING 67847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +8C +B4 +C4 +8C +B4 +C4 +8C +B4 +C4 +04 +ENDCHAR +STARTCHAR uni010908 +ENCODING 67848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +38 +44 +44 +82 +92 +FE +92 +82 +44 +44 +38 +ENDCHAR +STARTCHAR uni010909 +ENCODING 67849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +10 +08 +78 +A8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni01090A +ENCODING 67850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +88 +88 +F0 +10 +10 +10 +20 +20 +20 +ENDCHAR +STARTCHAR uni01090B +ENCODING 67851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -2 +BITMAP +20 +20 +20 +40 +40 +40 +40 +80 +80 +F8 +08 +08 +ENDCHAR +STARTCHAR uni01090C +ENCODING 67852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +92 +FC +14 +04 +04 +08 +08 +08 +ENDCHAR +STARTCHAR uni01090D +ENCODING 67853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 1 0 +BITMAP +20 +20 +20 +40 +40 +70 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni01090E +ENCODING 67854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +08 +3E +08 +10 +7C +10 +10 +F8 +20 +20 +ENDCHAR +STARTCHAR uni01090F +ENCODING 67855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 0 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni010910 +ENCODING 67856 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 1 0 +BITMAP +60 +90 +90 +10 +20 +20 +20 +40 +40 +40 +ENDCHAR +STARTCHAR uni010911 +ENCODING 67857 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +90 +A8 +44 +40 +40 +40 +20 +20 +20 +ENDCHAR +STARTCHAR uni010912 +ENCODING 67858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +40 +A0 +A0 +7C +22 +22 +14 +18 +10 +08 +08 +08 +ENDCHAR +STARTCHAR uni010913 +ENCODING 67859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -1 +BITMAP +40 +A0 +A0 +60 +20 +20 +10 +10 +10 +08 +08 +08 +ENDCHAR +STARTCHAR uni010914 +ENCODING 67860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 3 +BITMAP +92 +92 +92 +7C +ENDCHAR +STARTCHAR uni010915 +ENCODING 67861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +20 +20 +20 +40 +78 +48 +48 +40 +80 +80 +80 +ENDCHAR +STARTCHAR uni010916 +ENCODING 67862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010917 +ENCODING 67863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 2 +BITMAP +F8 +04 +04 +08 +ENDCHAR +STARTCHAR uni010918 +ENCODING 67864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 1 +BITMAP +F0 +10 +20 +40 +F8 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni010919 +ENCODING 67865 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 1 +BITMAP +02 +34 +48 +88 +08 +04 +04 +04 +ENDCHAR +STARTCHAR uni01091A +ENCODING 67866 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +24 +24 +24 +48 +48 +48 +48 +90 +90 +90 +ENDCHAR +STARTCHAR uni01091B +ENCODING 67867 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +2A +2A +2A +54 +54 +54 +54 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni01091F +ENCODING 67871 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 3 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni010920 +ENCODING 67872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +10 +28 +28 +28 +48 +48 +48 +94 +A4 +C4 +84 +ENDCHAR +STARTCHAR uni010921 +ENCODING 67873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +1C +64 +84 +84 +64 +1C +64 +84 +84 +64 +1C +ENDCHAR +STARTCHAR uni010922 +ENCODING 67874 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +20 +50 +90 +08 +08 +08 +08 +08 +90 +50 +20 +ENDCHAR +STARTCHAR uni010923 +ENCODING 67875 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +08 +08 +08 +08 +08 +08 +08 +18 +28 +48 +88 +ENDCHAR +STARTCHAR uni010924 +ENCODING 67876 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +08 +08 +08 +88 +48 +28 +18 +88 +48 +28 +18 +ENDCHAR +STARTCHAR uni010925 +ENCODING 67877 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +18 +28 +48 +88 +18 +28 +48 +88 +08 +08 +08 +ENDCHAR +STARTCHAR uni010926 +ENCODING 67878 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 11 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010927 +ENCODING 67879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +0C +34 +44 +44 +84 +84 +84 +44 +44 +34 +0C +ENDCHAR +STARTCHAR uni010928 +ENCODING 67880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +08 +88 +48 +28 +18 +18 +28 +48 +88 +08 +08 +ENDCHAR +STARTCHAR uni010929 +ENCODING 67881 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +18 +28 +48 +88 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni01092A +ENCODING 67882 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 0 0 +BITMAP +44 +AC +14 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni01092B +ENCODING 67883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 0 0 +BITMAP +8C +54 +24 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni01092C +ENCODING 67884 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +30 +48 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni01092D +ENCODING 67885 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +1C +64 +84 +84 +84 +64 +1C +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni01092E +ENCODING 67886 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +38 +44 +84 +04 +08 +30 +08 +04 +04 +04 +02 +ENDCHAR +STARTCHAR uni01092F +ENCODING 67887 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010930 +ENCODING 67888 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +88 +48 +28 +18 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010931 +ENCODING 67889 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +30 +48 +84 +84 +48 +30 +48 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni010932 +ENCODING 67890 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +10 +10 +10 +10 +FE +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010933 +ENCODING 67891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +FE +10 +10 +10 +10 +FE +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010934 +ENCODING 67892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +FE +10 +10 +10 +10 +FE +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni010935 +ENCODING 67893 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +44 +AA +AA +92 +92 +82 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni010936 +ENCODING 67894 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +92 +92 +54 +54 +38 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010937 +ENCODING 67895 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +92 +BA +54 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010938 +ENCODING 67896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +10 +08 +04 +04 +74 +88 +10 +20 +20 +10 +0C +ENDCHAR +STARTCHAR uni010939 +ENCODING 67897 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +38 +54 +54 +92 +92 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01093F +ENCODING 67903 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 3 +BITMAP +1C +64 +84 +64 +1C +ENDCHAR +STARTCHAR uni010980 +ENCODING 67968 +BBX 14 12 1 0 +BITMAP +4080 +4140 +2140 +3FF0 +0228 +0124 +0144 +0144 +0D44 +1380 +2180 +FFC0 +ENDCHAR +STARTCHAR uni010981 +ENCODING 67969 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +30 +48 +88 +90 +B0 +88 +84 +84 +9C +E0 +80 +80 +ENDCHAR +STARTCHAR uni010982 +ENCODING 67970 +BBX 10 12 3 0 +BITMAP +8400 +8A00 +4A00 +7F00 +1280 +1240 +0A40 +0640 +0600 +0A00 +1200 +3600 +ENDCHAR +STARTCHAR uni010983 +ENCODING 67971 +BBX 8 10 4 0 +BITMAP +44 +82 +82 +44 +3F +41 +51 +82 +84 +F8 +ENDCHAR +STARTCHAR uni010984 +ENCODING 67972 +BBX 13 11 1 0 +BITMAP +3060 +2850 +4488 +4488 +4488 +8508 +8508 +8910 +F9F0 +0810 +0810 +ENDCHAR +STARTCHAR uni010985 +ENCODING 67973 +BBX 10 11 3 0 +BITMAP +0F00 +1080 +2040 +2040 +A840 +5040 +2040 +5040 +8840 +8840 +7040 +ENDCHAR +STARTCHAR uni010986 +ENCODING 67974 +BBX 15 12 0 0 +BITMAP +8080 +8080 +7F00 +2400 +43E0 +8018 +4004 +2004 +1FFA +0A2A +1248 +36D8 +ENDCHAR +STARTCHAR uni010987 +ENCODING 67975 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +02 +02 +02 +02 +02 +02 +02 +0E +32 +42 +FE +ENDCHAR +STARTCHAR uni010988 +ENCODING 67976 +BBX 14 7 1 0 +BITMAP +7FF8 +8484 +8484 +FFFC +8484 +8484 +7FF8 +ENDCHAR +STARTCHAR uni010989 +ENCODING 67977 +BBX 12 11 2 0 +BITMAP +7800 +4800 +4C00 +4300 +2080 +2040 +1020 +0F20 +1490 +2450 +CC70 +ENDCHAR +STARTCHAR uni01098A +ENCODING 67978 +BBX 13 6 1 0 +BITMAP +2220 +5550 +8888 +2220 +5550 +8888 +ENDCHAR +STARTCHAR uni01098B +ENCODING 67979 +BBX 15 3 0 2 +BITMAP +4444 +AAAA +1110 +ENDCHAR +STARTCHAR uni01098C +ENCODING 67980 +BBX 15 11 0 0 +BITMAP +6060 +9090 +1010 +1010 +D6D6 +3838 +1010 +D6D6 +3838 +1010 +1010 +ENDCHAR +STARTCHAR uni01098D +ENCODING 67981 +BBX 12 13 2 -1 +BITMAP +C070 +2080 +5140 +CA60 +2A80 +4A40 +8A20 +4A40 +2A80 +CA60 +5140 +2080 +C070 +ENDCHAR +STARTCHAR uni01098E +ENCODING 67982 +BBX 12 4 2 1 +BITMAP +1FF0 +D010 +D010 +1FF0 +ENDCHAR +STARTCHAR uni01098F +ENCODING 67983 +BBX 12 5 2 0 +BITMAP +FFF0 +8010 +9F90 +8010 +FFF0 +ENDCHAR +STARTCHAR uni010990 +ENCODING 67984 +BBX 13 7 1 0 +BITMAP +1C00 +2200 +41F0 +3018 +0828 +0828 +FCF0 +ENDCHAR +STARTCHAR uni010991 +ENCODING 67985 +BBX 12 5 1 2 +BITMAP +1F80 +6060 +8F10 +6060 +1F80 +ENDCHAR +STARTCHAR uni010992 +ENCODING 67986 +BBX 10 9 3 0 +BITMAP +7380 +1200 +1200 +F3C0 +8040 +8040 +4080 +4080 +3F00 +ENDCHAR +STARTCHAR uni010993 +ENCODING 67987 +BBX 15 11 0 0 +BITMAP +FFFE +8C62 +5294 +2108 +2108 +2528 +2B58 +3398 +FFFE +8002 +FFFE +ENDCHAR +STARTCHAR uni010994 +ENCODING 67988 +BBX 12 3 2 3 +BITMAP +0900 +FFF0 +0900 +ENDCHAR +STARTCHAR uni010995 +ENCODING 67989 +BBX 10 9 3 0 +BITMAP +4080 +FFC0 +4080 +4080 +4080 +4080 +4080 +FFC0 +4080 +ENDCHAR +STARTCHAR uni010996 +ENCODING 67990 +BBX 11 11 2 0 +BITMAP +1000 +2800 +6800 +9000 +13E0 +2C40 +40C0 +4300 +3C00 +2400 +CC00 +ENDCHAR +STARTCHAR uni010997 +ENCODING 67991 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +50 +50 +50 +50 +88 +88 +88 +F8 +ENDCHAR +STARTCHAR uni010998 +ENCODING 67992 +BBX 13 9 1 0 +BITMAP +4000 +BFE0 +4050 +0088 +0108 +0088 +4050 +BFE0 +4000 +ENDCHAR +STARTCHAR uni010999 +ENCODING 67993 +BBX 12 4 2 1 +BITMAP +7FE0 +8010 +8010 +7FE0 +ENDCHAR +STARTCHAR uni01099A +ENCODING 67994 +BBX 11 11 2 0 +BITMAP +FFE0 +0000 +FFE0 +8020 +8020 +8420 +8420 +8420 +8420 +8420 +87E0 +ENDCHAR +STARTCHAR uni01099B +ENCODING 67995 +BBX 10 10 3 0 +BITMAP +FFC0 +8000 +8000 +87C0 +8040 +8040 +8040 +8040 +8040 +FFC0 +ENDCHAR +STARTCHAR uni01099C +ENCODING 67996 +BBX 14 8 1 0 +BITMAP +0004 +0008 +0070 +0790 +F820 +80C0 +8700 +F800 +ENDCHAR +STARTCHAR uni01099D +ENCODING 67997 +BBX 14 10 1 0 +BITMAP +1F00 +2AC0 +5120 +9118 +4A7C +3F80 +1200 +1100 +1088 +1070 +ENDCHAR +STARTCHAR uni01099E +ENCODING 67998 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +70 +88 +88 +88 +50 +20 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01099F +ENCODING 67999 +BBX 11 10 2 0 +BITMAP +0E00 +1100 +1100 +CE60 +AAA0 +9F20 +A4A0 +CA60 +1100 +1F00 +ENDCHAR +STARTCHAR uni0109A0 +ENCODING 68000 +BBX 13 10 1 -2 +BITMAP +71C0 +8A20 +8020 +7BC0 +1100 +2080 +4040 +8020 +0010 +0008 +ENDCHAR +STARTCHAR uni0109A1 +ENCODING 68001 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +70 +88 +80 +78 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni0109A2 +ENCODING 68002 +BBX 12 7 2 1 +BITMAP +0800 +1080 +2080 +7FF0 +8100 +0200 +0200 +ENDCHAR +STARTCHAR uni0109A3 +ENCODING 68003 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 2 0 +BITMAP +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni0109A4 +ENCODING 68004 +BBX 9 6 3 0 +BITMAP +2480 +2480 +4900 +4900 +9200 +9200 +ENDCHAR +STARTCHAR uni0109A5 +ENCODING 68005 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +02 +3C +C8 +10 +20 +20 +58 +44 +82 +84 +98 +E0 +ENDCHAR +STARTCHAR uni0109A6 +ENCODING 68006 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +40 +44 +24 +24 +28 +30 +20 +40 +80 +ENDCHAR +STARTCHAR uni0109A7 +ENCODING 68007 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +40 +80 +40 +20 +40 +80 +40 +20 +1C +ENDCHAR +STARTCHAR uni0109A8 +ENCODING 68008 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +F8 +08 +10 +20 +10 +08 +08 +10 +20 +40 +40 +ENDCHAR +STARTCHAR uni0109A9 +ENCODING 68009 +BBX 12 11 2 0 +BITMAP +3F00 +2200 +2400 +2800 +2400 +4200 +4400 +8800 +0400 +0300 +00F0 +ENDCHAR +STARTCHAR uni0109AA +ENCODING 68010 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +F8 +88 +50 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni0109AB +ENCODING 68011 +BBX 11 5 2 2 +BITMAP +8420 +8420 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uni0109AC +ENCODING 68012 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +08 +10 +20 +40 +80 +FC +04 +08 +10 +ENDCHAR +STARTCHAR uni0109AD +ENCODING 68013 +BBX 11 10 2 0 +BITMAP +0040 +0040 +0080 +0300 +1C00 +E000 +2000 +2020 +10C0 +0F00 +ENDCHAR +STARTCHAR uni0109AE +ENCODING 68014 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +70 +88 +08 +30 +20 +3C +04 +04 +08 +30 +C0 +ENDCHAR +STARTCHAR uni0109AF +ENCODING 68015 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +70 +88 +04 +18 +20 +18 +04 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni0109B0 +ENCODING 68016 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +84 +84 +84 +FC +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni0109B1 +ENCODING 68017 +BBX 11 6 2 0 +BITMAP +8920 +8920 +8A40 +5240 +5480 +2480 +ENDCHAR +STARTCHAR uni0109B2 +ENCODING 68018 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +80 +40 +20 +40 +80 +40 +20 +40 +80 +60 +18 +04 +ENDCHAR +STARTCHAR uni0109B3 +ENCODING 68019 +BBX 12 11 2 0 +BITMAP +0E00 +0180 +21E0 +2210 +4C10 +4310 +80E0 +80C0 +0300 +0C00 +3000 +ENDCHAR +STARTCHAR uni0109B4 +ENCODING 68020 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +20 +40 +80 +F8 +08 +08 +88 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni0109B5 +ENCODING 68021 +BBX 11 7 2 -1 +BITMAP +2200 +2400 +4FE0 +4100 +8180 +8080 +0080 +ENDCHAR +STARTCHAR uni0109B6 +ENCODING 68022 +BBX 11 9 2 0 +BITMAP +3800 +4400 +8000 +8000 +8020 +41C0 +3E00 +0000 +0800 +ENDCHAR +STARTCHAR uni0109B7 +ENCODING 68023 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +88 +50 +20 +50 +54 +88 +80 +ENDCHAR +STARTCHAR uni0109BC +ENCODING 68028 +BBX 13 7 1 1 +BITMAP +9248 +0000 +0000 +0248 +0000 +0000 +0248 +ENDCHAR +STARTCHAR uni0109BD +ENCODING 68029 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 6 +BITMAP +A8 +88 +70 +ENDCHAR +STARTCHAR uni0109BE +ENCODING 68030 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +44 +44 +44 +38 +20 +20 +20 +20 +40 +40 +80 +ENDCHAR +STARTCHAR uni0109BF +ENCODING 68031 +BBX 12 11 2 0 +BITMAP +3000 +4000 +8000 +2000 +2000 +2400 +29E0 +2810 +2810 +2460 +2380 +ENDCHAR +STARTCHAR uni0109C0 +ENCODING 68032 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 9 3 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0109C1 +ENCODING 68033 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 1 1 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni0109C2 +ENCODING 68034 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 1 +BITMAP +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni0109C3 +ENCODING 68035 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 1 +BITMAP +AA +AA +AA +AA +AA +AA +AA +AA +AA +ENDCHAR +STARTCHAR uni0109C4 +ENCODING 68036 +BBX 9 10 3 1 +BITMAP +6000 +9000 +1000 +2000 +1000 +0800 +0400 +0200 +0100 +0080 +ENDCHAR +STARTCHAR uni0109C5 +ENCODING 68037 +BBX 11 10 2 1 +BITMAP +2000 +4800 +9000 +2000 +4180 +0600 +1800 +0600 +0180 +0060 +ENDCHAR +STARTCHAR uni0109C6 +ENCODING 68038 +BBX 14 8 1 1 +BITMAP +0800 +0F00 +0900 +1200 +2400 +C700 +00E0 +001C +ENDCHAR +STARTCHAR uni0109C7 +ENCODING 68039 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 1 +BITMAP +04 +02 +12 +12 +24 +24 +48 +48 +90 +90 +ENDCHAR +STARTCHAR uni0109C8 +ENCODING 68040 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 1 +BITMAP +E0 +10 +10 +E0 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0109C9 +ENCODING 68041 +BBX 13 5 1 2 +BITMAP +FFF8 +0010 +0020 +0040 +0080 +ENDCHAR +STARTCHAR uni0109CA +ENCODING 68042 +BBX 13 5 1 2 +BITMAP +FFF8 +0100 +0200 +0400 +0800 +ENDCHAR +STARTCHAR uni0109CB +ENCODING 68043 +BBX 12 9 2 1 +BITMAP +8010 +6060 +1080 +0900 +0600 +0900 +1080 +6060 +8010 +ENDCHAR +STARTCHAR uni0109CC +ENCODING 68044 +BBX 13 3 1 4 +BITMAP +0500 +0200 +FFF8 +ENDCHAR +STARTCHAR uni0109CD +ENCODING 68045 +BBX 13 9 1 1 +BITMAP +E000 +1000 +6000 +1000 +6000 +FFF8 +0010 +0060 +0180 +ENDCHAR +STARTCHAR uni0109CE +ENCODING 68046 +BBX 14 4 1 3 +BITMAP +0024 +0048 +FF90 +0008 +ENDCHAR +STARTCHAR uni0109CF +ENCODING 68047 +BBX 13 8 1 1 +BITMAP +0070 +0008 +0008 +0008 +03F0 +0C40 +3080 +C100 +ENDCHAR +STARTCHAR uni0109D2 +ENCODING 68050 +BBX 13 4 1 4 +BITMAP +0008 +0010 +0020 +FFC0 +ENDCHAR +STARTCHAR uni0109D3 +ENCODING 68051 +BBX 13 5 1 4 +BITMAP +0048 +0048 +0030 +0020 +FFC0 +ENDCHAR +STARTCHAR uni0109D4 +ENCODING 68052 +BBX 13 5 1 4 +BITMAP +00A8 +00A8 +0070 +0020 +FFC0 +ENDCHAR +STARTCHAR uni0109D5 +ENCODING 68053 +BBX 13 5 1 4 +BITMAP +02A8 +02A8 +01F0 +0020 +FFC0 +ENDCHAR +STARTCHAR uni0109D6 +ENCODING 68054 +BBX 13 6 1 4 +BITMAP +0C00 +0200 +0408 +0F90 +0020 +FFC0 +ENDCHAR +STARTCHAR uni0109D7 +ENCODING 68055 +BBX 13 8 1 4 +BITMAP +2000 +4000 +1000 +2400 +0808 +1F90 +0020 +FFC0 +ENDCHAR +STARTCHAR uni0109D8 +ENCODING 68056 +BBX 13 7 1 4 +BITMAP +1000 +1E00 +2400 +0808 +0F90 +0020 +FFC0 +ENDCHAR +STARTCHAR uni0109D9 +ENCODING 68057 +BBX 13 6 1 4 +BITMAP +0140 +0240 +0488 +0110 +0020 +FFC0 +ENDCHAR +STARTCHAR uni0109DA +ENCODING 68058 +BBX 13 8 1 4 +BITMAP +0300 +0080 +0300 +0200 +0208 +0210 +0020 +FFC0 +ENDCHAR +STARTCHAR uni0109DB +ENCODING 68059 +BBX 14 11 1 0 +BITMAP +0078 +0004 +001C +0010 +001C +0004 +0008 +FFF0 +0040 +0080 +0100 +ENDCHAR +STARTCHAR uni0109DC +ENCODING 68060 +BBX 14 11 1 0 +BITMAP +0078 +0004 +001C +0010 +001C +0004 +0008 +FFF0 +0240 +0480 +0900 +ENDCHAR +STARTCHAR uni0109DD +ENCODING 68061 +BBX 14 11 1 0 +BITMAP +0078 +0004 +001C +0010 +001C +0004 +0008 +FFF0 +0920 +1240 +2480 +ENDCHAR +STARTCHAR uni0109DE +ENCODING 68062 +BBX 15 11 0 0 +BITMAP +003C +0002 +000E +0008 +000E +0002 +0004 +7FF8 +2490 +4920 +9240 +ENDCHAR +STARTCHAR uni0109DF +ENCODING 68063 +BBX 14 13 1 -2 +BITMAP +0078 +0004 +001C +0010 +001C +0004 +0008 +FFF0 +0180 +0240 +0080 +0060 +0018 +ENDCHAR +STARTCHAR uni0109E0 +ENCODING 68064 +BBX 14 12 1 -1 +BITMAP +0078 +0004 +001C +0010 +001C +0004 +0008 +FFF0 +0000 +0920 +1240 +00F8 +ENDCHAR +STARTCHAR uni0109E1 +ENCODING 68065 +BBX 14 12 1 -1 +BITMAP +0078 +0004 +001C +0010 +001C +0004 +0008 +FFF0 +0400 +0700 +0900 +11F0 +ENDCHAR +STARTCHAR uni0109E2 +ENCODING 68066 +BBX 14 12 1 -1 +BITMAP +03C0 +0020 +00E0 +0080 +00E0 +0020 +0040 +FF80 +0014 +0024 +0048 +0010 +ENDCHAR +STARTCHAR uni0109E3 +ENCODING 68067 +BBX 14 13 1 -2 +BITMAP +03C0 +0020 +00E0 +0080 +00E0 +0020 +0040 +FF98 +0004 +0018 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni0109E4 +ENCODING 68068 +BBX 13 11 1 0 +BITMAP +F000 +0800 +0800 +7000 +8000 +8000 +8000 +FFF8 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni0109E5 +ENCODING 68069 +BBX 13 11 1 0 +BITMAP +F000 +0800 +0800 +7000 +8000 +8000 +8000 +FFF8 +0900 +0900 +0900 +ENDCHAR +STARTCHAR uni0109E6 +ENCODING 68070 +BBX 13 11 1 0 +BITMAP +F000 +0800 +0800 +7000 +8000 +8000 +8000 +FFF8 +1240 +1240 +1240 +ENDCHAR +STARTCHAR uni0109E7 +ENCODING 68071 +BBX 13 11 1 0 +BITMAP +F000 +0800 +0800 +7000 +8000 +8000 +8000 +FFF8 +2490 +2490 +2490 +ENDCHAR +STARTCHAR uni0109E8 +ENCODING 68072 +BBX 13 13 1 -2 +BITMAP +F000 +0800 +0800 +7000 +8000 +8000 +8000 +FFF8 +0600 +0900 +0200 +0180 +0060 +ENDCHAR +STARTCHAR uni0109E9 +ENCODING 68073 +BBX 13 12 1 -1 +BITMAP +F000 +0800 +0800 +7000 +8000 +8000 +8000 +FFF8 +0000 +1240 +2480 +01F0 +ENDCHAR +STARTCHAR uni0109EA +ENCODING 68074 +BBX 13 13 1 -2 +BITMAP +F000 +0800 +0800 +7000 +8000 +8000 +8000 +FFF8 +0000 +0800 +0E00 +1200 +23E0 +ENDCHAR +STARTCHAR uni0109EB +ENCODING 68075 +BBX 13 13 1 -2 +BITMAP +F000 +0800 +0800 +7000 +8000 +8000 +8000 +FFF8 +0000 +0500 +0900 +1200 +0400 +ENDCHAR +STARTCHAR uni0109EC +ENCODING 68076 +BBX 13 13 1 -2 +BITMAP +F000 +0800 +0800 +7000 +8000 +8000 +8000 +FFF8 +0C00 +0200 +0C00 +0800 +0800 +ENDCHAR +STARTCHAR uni0109ED +ENCODING 68077 +BBX 13 12 1 0 +BITMAP +2000 +4000 +8000 +4000 +2000 +1000 +2000 +4000 +FFF8 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni0109EE +ENCODING 68078 +BBX 13 12 1 0 +BITMAP +2000 +4000 +8000 +4000 +2000 +1000 +2000 +4000 +FFF8 +0900 +0900 +0900 +ENDCHAR +STARTCHAR uni0109EF +ENCODING 68079 +BBX 13 12 1 0 +BITMAP +2000 +4000 +8000 +4000 +2000 +1000 +2000 +4000 +FFF8 +1240 +1240 +1240 +ENDCHAR +STARTCHAR uni0109F0 +ENCODING 68080 +BBX 13 12 1 0 +BITMAP +2000 +4000 +8000 +4000 +2000 +1000 +2000 +4000 +FFF8 +2490 +2490 +2490 +ENDCHAR +STARTCHAR uni0109F1 +ENCODING 68081 +BBX 13 14 1 -2 +BITMAP +2000 +4000 +8000 +4000 +2000 +1000 +2000 +4000 +FFF8 +0600 +0900 +0200 +0180 +0060 +ENDCHAR +STARTCHAR uni0109F2 +ENCODING 68082 +BBX 13 13 1 -1 +BITMAP +2000 +4000 +8000 +4000 +2000 +1000 +2000 +4000 +FFF8 +0000 +1240 +2480 +01F0 +ENDCHAR +STARTCHAR uni0109F3 +ENCODING 68083 +BBX 13 14 1 -2 +BITMAP +2000 +4000 +8000 +4000 +2000 +1000 +2000 +4000 +FFF8 +0000 +0800 +0E00 +1200 +23E0 +ENDCHAR +STARTCHAR uni0109F4 +ENCODING 68084 +BBX 13 14 1 -2 +BITMAP +2000 +4000 +8000 +4000 +2000 +1000 +2000 +4000 +FFF8 +0000 +0500 +0900 +1200 +0400 +ENDCHAR +STARTCHAR uni0109F5 +ENCODING 68085 +BBX 13 14 1 -2 +BITMAP +2000 +4000 +8000 +4000 +2000 +1000 +2000 +4000 +FFF8 +0C00 +0200 +0C00 +0800 +0800 +ENDCHAR +STARTCHAR uni0109F6 +ENCODING 68086 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 3 6 +BITMAP +80 +ENDCHAR +STARTCHAR uni0109F7 +ENCODING 68087 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 1 1 6 +BITMAP +88 +ENDCHAR +STARTCHAR uni0109F8 +ENCODING 68088 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 1 4 +BITMAP +88 +00 +00 +20 +ENDCHAR +STARTCHAR uni0109F9 +ENCODING 68089 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 4 +BITMAP +90 +00 +00 +90 +ENDCHAR +STARTCHAR uni0109FA +ENCODING 68090 +BBX 7 7 4 1 +BITMAP +82 +00 +00 +10 +00 +00 +82 +ENDCHAR +STARTCHAR uni0109FB +ENCODING 68091 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 1 +BITMAP +90 +00 +00 +90 +00 +00 +90 +ENDCHAR +STARTCHAR uni0109FC +ENCODING 68092 +BBX 7 7 4 1 +BITMAP +10 +00 +00 +92 +00 +00 +92 +ENDCHAR +STARTCHAR uni0109FD +ENCODING 68093 +BBX 7 7 4 1 +BITMAP +92 +00 +00 +92 +00 +00 +90 +ENDCHAR +STARTCHAR uni0109FE +ENCODING 68094 +BBX 7 7 4 1 +BITMAP +92 +00 +00 +92 +00 +00 +92 +ENDCHAR +STARTCHAR uni0109FF +ENCODING 68095 +BBX 7 10 4 1 +BITMAP +10 +00 +00 +92 +00 +00 +92 +00 +00 +92 +ENDCHAR +STARTCHAR uni010A00 +ENCODING 68096 +BBX 7 10 4 0 +BITMAP +78 +84 +82 +82 +62 +02 +04 +08 +10 +20 +ENDCHAR +STARTCHAR uni010A01 +ENCODING 68097 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 10 1 0 +BITMAP +10 +10 +20 +20 +20 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni010A02 +ENCODING 68098 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 1 -2 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni010A03 +ENCODING 68099 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 4 -2 +BITMAP +70 +80 +78 +04 +F8 +ENDCHAR +STARTCHAR uni010A05 +ENCODING 68101 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 6 6 +BITMAP +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni010A06 +ENCODING 68102 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 1 1 +BITMAP +03 +0C +30 +C0 +ENDCHAR +STARTCHAR uni010A0C +ENCODING 68108 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 12 -2 +BITMAP +80 +40 +20 +20 +ENDCHAR +STARTCHAR uni010A0D +ENCODING 68109 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 3 3 -2 +BITMAP +7BC0 +8420 +7BC0 +ENDCHAR +STARTCHAR uni010A0E +ENCODING 68110 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 4 -2 +BITMAP +02 +01 +81 +7E +ENDCHAR +STARTCHAR uni010A0F +ENCODING 68111 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 4 10 +BITMAP +22 +44 +88 +ENDCHAR +STARTCHAR uni010A10 +ENCODING 68112 +BBX 11 10 2 0 +BITMAP +7800 +8400 +8200 +8200 +6300 +0280 +0440 +0820 +1120 +20C0 +ENDCHAR +STARTCHAR uni010A11 +ENCODING 68113 +BBX 7 10 3 0 +BITMAP +1C +22 +42 +40 +80 +80 +78 +04 +08 +10 +ENDCHAR +STARTCHAR uni010A12 +ENCODING 68114 +BBX 7 9 4 1 +BITMAP +20 +44 +8A +92 +92 +7C +10 +10 +10 +ENDCHAR +STARTCHAR uni010A13 +ENCODING 68115 +BBX 9 9 4 1 +BITMAP +2000 +4400 +8A00 +9200 +7C00 +1700 +1880 +1080 +1100 +ENDCHAR +STARTCHAR uni010A15 +ENCODING 68117 +BBX 9 9 4 1 +BITMAP +8200 +7C00 +0B00 +1080 +2080 +0100 +0200 +0400 +0800 +ENDCHAR +STARTCHAR uni010A16 +ENCODING 68118 +BBX 9 9 4 1 +BITMAP +8200 +7C00 +0400 +1C00 +6B00 +8880 +9080 +5100 +1000 +ENDCHAR +STARTCHAR uni010A17 +ENCODING 68119 +BBX 7 9 4 1 +BITMAP +82 +44 +24 +14 +08 +08 +10 +10 +10 +ENDCHAR +STARTCHAR uni010A19 +ENCODING 68121 +BBX 8 9 3 1 +BITMAP +83 +44 +44 +22 +21 +31 +2E +40 +40 +ENDCHAR +STARTCHAR uni010A1A +ENCODING 68122 +BBX 11 10 2 0 +BITMAP +0080 +8700 +7900 +0200 +0200 +0400 +0460 +0980 +0E00 +0800 +ENDCHAR +STARTCHAR uni010A1B +ENCODING 68123 +BBX 7 9 4 1 +BITMAP +7C +82 +02 +04 +FC +08 +08 +10 +10 +ENDCHAR +STARTCHAR uni010A1C +ENCODING 68124 +BBX 8 9 3 1 +BITMAP +21 +41 +41 +86 +8A +72 +04 +04 +04 +ENDCHAR +STARTCHAR uni010A1D +ENCODING 68125 +BBX 10 10 3 0 +BITMAP +FFC0 +0400 +0400 +0400 +0800 +0800 +0800 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uni010A1E +ENCODING 68126 +BBX 4 9 7 1 +BITMAP +60 +60 +50 +40 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni010A1F +ENCODING 68127 +BBX 8 9 5 1 +BITMAP +40 +80 +80 +7E +01 +01 +02 +04 +38 +ENDCHAR +STARTCHAR uni010A20 +ENCODING 68128 +BBX 8 10 3 0 +BITMAP +04 +04 +08 +7E +89 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010A21 +ENCODING 68129 +BBX 6 8 5 1 +BITMAP +30 +40 +20 +10 +08 +04 +84 +78 +ENDCHAR +STARTCHAR uni010A22 +ENCODING 68130 +BBX 6 9 5 1 +BITMAP +30 +48 +88 +14 +24 +04 +04 +08 +10 +ENDCHAR +STARTCHAR uni010A23 +ENCODING 68131 +BBX 4 9 5 1 +BITMAP +70 +80 +80 +40 +20 +10 +10 +10 +20 +ENDCHAR +STARTCHAR uni010A24 +ENCODING 68132 +BBX 6 9 5 1 +BITMAP +20 +20 +20 +40 +58 +64 +84 +88 +80 +ENDCHAR +STARTCHAR uni010A25 +ENCODING 68133 +BBX 7 9 4 1 +BITMAP +10 +10 +10 +20 +FC +22 +42 +44 +40 +ENDCHAR +STARTCHAR uni010A26 +ENCODING 68134 +BBX 8 10 4 0 +BITMAP +40 +8E +91 +61 +02 +02 +04 +04 +08 +08 +ENDCHAR +STARTCHAR uni010A27 +ENCODING 68135 +BBX 8 9 4 1 +BITMAP +FE +10 +10 +1E +21 +21 +21 +42 +40 +ENDCHAR +STARTCHAR uni010A28 +ENCODING 68136 +BBX 7 5 4 3 +BITMAP +44 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni010A29 +ENCODING 68137 +BBX 9 9 3 1 +BITMAP +0800 +1400 +1400 +2200 +2200 +4100 +4100 +8080 +8080 +ENDCHAR +STARTCHAR uni010A2A +ENCODING 68138 +BBX 6 9 5 1 +BITMAP +40 +80 +80 +78 +04 +04 +08 +10 +20 +ENDCHAR +STARTCHAR uni010A2B +ENCODING 68139 +BBX 7 9 4 1 +BITMAP +02 +02 +02 +7C +84 +84 +08 +08 +08 +ENDCHAR +STARTCHAR uni010A2C +ENCODING 68140 +BBX 7 9 4 1 +BITMAP +7C +82 +02 +04 +04 +08 +08 +10 +10 +ENDCHAR +STARTCHAR uni010A2D +ENCODING 68141 +BBX 9 9 5 1 +BITMAP +FE00 +4100 +4100 +2080 +2080 +2080 +4100 +4100 +8200 +ENDCHAR +STARTCHAR uni010A2E +ENCODING 68142 +BBX 9 10 5 0 +BITMAP +1C00 +6300 +8480 +8480 +4900 +0800 +1000 +1000 +2000 +2000 +ENDCHAR +STARTCHAR uni010A2F +ENCODING 68143 +BBX 7 10 5 0 +BITMAP +80 +7C +02 +02 +02 +1C +08 +08 +10 +20 +ENDCHAR +STARTCHAR uni010A30 +ENCODING 68144 +BBX 10 9 2 1 +BITMAP +C040 +2040 +1080 +1080 +2100 +7F00 +0100 +0200 +0200 +ENDCHAR +STARTCHAR uni010A31 +ENCODING 68145 +BBX 7 10 4 0 +BITMAP +78 +84 +82 +42 +04 +08 +10 +20 +42 +3C +ENDCHAR +STARTCHAR uni010A32 +ENCODING 68146 +BBX 11 10 2 0 +BITMAP +7820 +8440 +8280 +8300 +6300 +0300 +0480 +0840 +1240 +2180 +ENDCHAR +STARTCHAR uni010A33 +ENCODING 68147 +BBX 7 9 5 1 +BITMAP +40 +40 +9C +A2 +86 +7A +02 +04 +08 +ENDCHAR +STARTCHAR uni010A34 +ENCODING 68148 +BBX 6 9 4 1 +BITMAP +0C +34 +C4 +08 +08 +08 +10 +10 +10 +ENDCHAR +STARTCHAR uni010A35 +ENCODING 68149 +BBX 8 10 4 1 +BITMAP +01 +72 +8A +0A +0E +08 +10 +10 +20 +40 +ENDCHAR +STARTCHAR uni010A38 +ENCODING 68152 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 1 3 11 +BITMAP +FFC0 +ENDCHAR +STARTCHAR uni010A39 +ENCODING 68153 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 8 -1 +BITMAP +03 +0C +30 +C0 +ENDCHAR +STARTCHAR uni010A3A +ENCODING 68154 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 7 -2 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni010A3F +ENCODING 68159 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 6 -2 +BITMAP +20 +F8 +20 +ENDCHAR +STARTCHAR uni010A40 +ENCODING 68160 +BBX 2 9 7 1 +BITMAP +40 +40 +40 +40 +40 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni010A41 +ENCODING 68161 +BBX 7 9 5 1 +BITMAP +44 +44 +42 +42 +62 +5C +40 +40 +80 +ENDCHAR +STARTCHAR uni010A42 +ENCODING 68162 +BBX 11 9 2 1 +BITMAP +4440 +4440 +4220 +4220 +6220 +5DC0 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni010A43 +ENCODING 68163 +BBX 6 6 6 1 +BITMAP +C4 +28 +10 +28 +44 +84 +ENDCHAR +STARTCHAR uni010A44 +ENCODING 68164 +BBX 6 6 5 1 +BITMAP +78 +84 +04 +08 +10 +20 +ENDCHAR +STARTCHAR uni010A45 +ENCODING 68165 +BBX 6 8 5 2 +BITMAP +30 +48 +88 +14 +24 +04 +08 +10 +ENDCHAR +STARTCHAR uni010A46 +ENCODING 68166 +BBX 4 7 6 1 +BITMAP +20 +40 +A0 +20 +10 +10 +10 +ENDCHAR +STARTCHAR uni010A47 +ENCODING 68167 +BBX 9 9 4 1 +BITMAP +7100 +8900 +8900 +7F00 +0800 +0800 +0800 +0800 +0780 +ENDCHAR +STARTCHAR uni010A48 +ENCODING 68168 +BBX 4 9 4 1 +BITMAP +20 +20 +10 +30 +50 +90 +10 +10 +20 +ENDCHAR +STARTCHAR uni010A50 +ENCODING 68176 +BBX 3 3 6 7 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni010A51 +ENCODING 68177 +BBX 5 5 5 3 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni010A52 +ENCODING 68178 +BBX 10 10 3 0 +BITMAP +1E00 +2100 +4080 +8040 +8040 +8040 +8040 +4080 +2100 +1E00 +ENDCHAR +STARTCHAR uni010A53 +ENCODING 68179 +BBX 13 9 1 1 +BITMAP +0FC0 +1000 +2000 +2000 +7FF8 +A000 +2000 +1000 +0FC0 +ENDCHAR +STARTCHAR uni010A54 +ENCODING 68180 +BBX 10 10 3 0 +BITMAP +1E00 +2100 +5880 +8440 +87C0 +F840 +8840 +4680 +2100 +1E00 +ENDCHAR +STARTCHAR uni010A55 +ENCODING 68181 +BBX 14 11 1 -1 +BITMAP +0C60 +1290 +0C60 +0000 +6318 +94A4 +6318 +0000 +3180 +4A40 +3180 +ENDCHAR +STARTCHAR uni010A56 +ENCODING 68182 +BBX 1 9 8 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010A57 +ENCODING 68183 +BBX 4 9 6 1 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni010A58 +ENCODING 68184 +BBX 14 5 1 1 +BITMAP +71C4 +8E38 +0000 +71C4 +8E38 +ENDCHAR +STARTCHAR uni010A60 +ENCODING 68192 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +88 +88 +88 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010A61 +ENCODING 68193 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 0 +BITMAP +20 +60 +A0 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010A62 +ENCODING 68194 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +A8 +A8 +A8 +A8 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010A63 +ENCODING 68195 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +18 +68 +88 +68 +18 +68 +88 +68 +18 +ENDCHAR +STARTCHAR uni010A64 +ENCODING 68196 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +20 +70 +88 +88 +88 +70 +20 +20 +ENDCHAR +STARTCHAR uni010A65 +ENCODING 68197 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +70 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +70 +ENDCHAR +STARTCHAR uni010A66 +ENCODING 68198 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +80 +60 +10 +60 +80 +60 +10 +60 +80 +ENDCHAR +STARTCHAR uni010A67 +ENCODING 68199 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +C0 +20 +10 +10 +10 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni010A68 +ENCODING 68200 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +88 +88 +88 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni010A69 +ENCODING 68201 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +88 +50 +50 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni010A6A +ENCODING 68202 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +20 +20 +20 +F8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni010A6B +ENCODING 68203 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +10 +20 +40 +80 +F8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni010A6C +ENCODING 68204 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +80 +80 +80 +F8 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010A6D +ENCODING 68205 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +88 +88 +F8 +20 +20 +38 +08 +08 +ENDCHAR +STARTCHAR uni010A6E +ENCODING 68206 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +50 +50 +20 +20 +F8 +88 +88 +88 +ENDCHAR +STARTCHAR uni010A6F +ENCODING 68207 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +50 +20 +50 +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni010A70 +ENCODING 68208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +20 +50 +50 +88 +50 +50 +20 +ENDCHAR +STARTCHAR uni010A71 +ENCODING 68209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +80 +E0 +20 +20 +F8 +88 +88 +88 +ENDCHAR +STARTCHAR uni010A72 +ENCODING 68210 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +70 +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni010A73 +ENCODING 68211 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +88 +88 +88 +F8 +88 +88 +88 +F8 +ENDCHAR +STARTCHAR uni010A74 +ENCODING 68212 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +F0 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010A75 +ENCODING 68213 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +08 +88 +C8 +A8 +98 +A8 +C8 +88 +08 +ENDCHAR +STARTCHAR uni010A76 +ENCODING 68214 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +3C +64 +A4 +24 +24 +24 +24 +24 +24 +ENDCHAR +STARTCHAR uni010A77 +ENCODING 68215 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +F8 +ENDCHAR +STARTCHAR uni010A78 +ENCODING 68216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +88 +50 +50 +20 +50 +50 +88 +F8 +ENDCHAR +STARTCHAR uni010A79 +ENCODING 68217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +88 +F8 +88 +88 +88 +F8 +88 +88 +ENDCHAR +STARTCHAR uni010A7A +ENCODING 68218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +70 +88 +88 +88 +70 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010A7B +ENCODING 68219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +70 +88 +88 +70 +20 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni010A7C +ENCODING 68220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +40 +A0 +A0 +40 +40 +78 +48 +48 +48 +ENDCHAR +STARTCHAR uni010A7D +ENCODING 68221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 9 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010A7E +ENCODING 68222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +18 +68 +88 +68 +18 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010A7F +ENCODING 68223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +F0 +90 +90 +F0 +90 +90 +F0 +90 +90 +F0 +ENDCHAR +STARTCHAR uni010A80 +ENCODING 68224 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +40 +20 +50 +48 +88 +84 +04 +04 +ENDCHAR +STARTCHAR uni010A81 +ENCODING 68225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +18 +24 +24 +44 +40 +40 +80 +80 +80 +ENDCHAR +STARTCHAR uni010A82 +ENCODING 68226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +38 +38 +54 +54 +54 +92 +92 +92 +ENDCHAR +STARTCHAR uni010A83 +ENCODING 68227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +18 +24 +44 +44 +44 +88 +88 +90 +90 +ENDCHAR +STARTCHAR uni010A84 +ENCODING 68228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +08 +70 +88 +88 +88 +70 +20 +20 +20 +ENDCHAR +STARTCHAR uni010A85 +ENCODING 68229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +70 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +70 +ENDCHAR +STARTCHAR uni010A86 +ENCODING 68230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +80 +60 +10 +60 +80 +60 +10 +60 +80 +ENDCHAR +STARTCHAR uni010A87 +ENCODING 68231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +C0 +20 +10 +10 +10 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni010A88 +ENCODING 68232 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +88 +88 +88 +88 +88 +88 +50 +50 +ENDCHAR +STARTCHAR uni010A89 +ENCODING 68233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +88 +50 +50 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni010A8A +ENCODING 68234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +20 +F8 +88 +88 +88 +88 +50 +50 +ENDCHAR +STARTCHAR uni010A8B +ENCODING 68235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +40 +80 +F8 +88 +88 +88 +50 +50 +ENDCHAR +STARTCHAR uni010A8C +ENCODING 68236 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +40 +20 +10 +20 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni010A8D +ENCODING 68237 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +E0 +10 +10 +10 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni010A8E +ENCODING 68238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +70 +88 +88 +88 +70 +70 +70 +A8 +A8 +ENDCHAR +STARTCHAR uni010A8F +ENCODING 68239 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +82 +44 +38 +44 +C6 +44 +38 +54 +92 +ENDCHAR +STARTCHAR uni010A90 +ENCODING 68240 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +78 +84 +84 +84 +48 +ENDCHAR +STARTCHAR uni010A91 +ENCODING 68241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +50 +50 +F8 +88 +88 +88 +88 +50 +50 +ENDCHAR +STARTCHAR uni010A92 +ENCODING 68242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 1 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni010A93 +ENCODING 68243 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +F8 +ENDCHAR +STARTCHAR uni010A94 +ENCODING 68244 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +88 +44 +24 +24 +44 +88 +88 +70 +ENDCHAR +STARTCHAR uni010A95 +ENCODING 68245 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +20 +10 +88 +C8 +A4 +C8 +88 +10 +20 +ENDCHAR +STARTCHAR uni010A96 +ENCODING 68246 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +3C +64 +A4 +24 +24 +24 +24 +24 +24 +ENDCHAR +STARTCHAR uni010A97 +ENCODING 68247 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -1 +BITMAP +C0 +20 +50 +88 +14 +24 +0A +12 +04 +08 +ENDCHAR +STARTCHAR uni010A98 +ENCODING 68248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +88 +88 +F8 +88 +88 +88 +50 +50 +ENDCHAR +STARTCHAR uni010A99 +ENCODING 68249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +A8 +A8 +A8 +F8 +88 +88 +88 +50 +50 +ENDCHAR +STARTCHAR uni010A9A +ENCODING 68250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +70 +88 +88 +88 +70 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010A9B +ENCODING 68251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +82 +44 +38 +44 +44 +38 +10 +10 +10 +ENDCHAR +STARTCHAR uni010A9C +ENCODING 68252 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +30 +48 +48 +90 +90 +10 +28 +24 +44 +ENDCHAR +STARTCHAR uni010A9D +ENCODING 68253 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 9 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010A9E +ENCODING 68254 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 2 +BITMAP +20 +50 +88 +50 +20 +ENDCHAR +STARTCHAR uni010A9F +ENCODING 68255 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +50 +88 +50 +20 +50 +88 +50 +20 +ENDCHAR +STARTCHAR uni010AC0 +ENCODING 68288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +04 +08 +08 +7C +CC +CC +ENDCHAR +STARTCHAR uni010AC1 +ENCODING 68289 +BBX 16 7 0 1 +BITMAP +0403 +060D +03F9 +01F1 +0001 +FFFF +FFFF +ENDCHAR +STARTCHAR uni010AC2 +ENCODING 68290 +BBX 16 10 0 1 +BITMAP +3300 +3300 +0000 +0403 +060D +03F9 +01F1 +0001 +FFFF +FFFF +ENDCHAR +STARTCHAR uni010AC3 +ENCODING 68291 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +3C +30 +30 +38 +18 +F8 +9C +0C +0C +04 +ENDCHAR +STARTCHAR uni010AC4 +ENCODING 68292 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +3C +30 +30 +38 +18 +F8 +9C +0C +1C +2C +2C +18 +ENDCHAR +STARTCHAR uni010AC5 +ENCODING 68293 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 1 1 +BITMAP +70 +E0 +C0 +60 +30 +ENDCHAR +STARTCHAR uni010AC6 +ENCODING 68294 +BBX 16 8 0 -1 +BITMAP +000C +000E +3FFE +FFFB +C3C3 +1F00 +FE00 +F000 +ENDCHAR +STARTCHAR uni010AC7 +ENCODING 68295 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 2 2 +BITMAP +60 +F0 +D8 +88 +ENDCHAR +STARTCHAR uni010AC8 +ENCODING 68296 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 -1 +BITMAP +60 +60 +00 +60 +F0 +D8 +88 +00 +60 +60 +ENDCHAR +STARTCHAR uni010AC9 +ENCODING 68297 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +70 +E0 +C0 +60 +30 +1C +0C +ENDCHAR +STARTCHAR uni010ACA +ENCODING 68298 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +D8 +D8 +00 +70 +E0 +C0 +60 +30 +1C +0C +ENDCHAR +STARTCHAR uni010ACB +ENCODING 68299 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +78 +60 +70 +30 +18 +58 +8C +FC +FC +ENDCHAR +STARTCHAR uni010ACC +ENCODING 68300 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +D8 +D8 +00 +78 +60 +70 +30 +18 +58 +8C +FC +FC +ENDCHAR +STARTCHAR uni010ACD +ENCODING 68301 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 1 +BITMAP +66 +76 +3C +FF +E3 +ENDCHAR +STARTCHAR uni010ACE +ENCODING 68302 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +70 +D8 +D8 +F0 +C0 +C0 +70 +78 +6C +6C +38 +ENDCHAR +STARTCHAR uni010ACF +ENCODING 68303 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 1 +BITMAP +E0 +F0 +70 +ENDCHAR +STARTCHAR uni010AD0 +ENCODING 68304 +BBX 16 7 0 1 +BITMAP +01E0 +01F0 +01B8 +001C +000E +FFFF +FFFF +ENDCHAR +STARTCHAR uni010AD1 +ENCODING 68305 +BBX 16 10 0 1 +BITMAP +0300 +0300 +0000 +01E0 +01F0 +01B8 +001C +000E +FFFF +FFFF +ENDCHAR +STARTCHAR uni010AD2 +ENCODING 68306 +BBX 16 10 0 1 +BITMAP +0660 +0660 +0000 +01E0 +01F0 +01B8 +001C +000E +FFFF +FFFF +ENDCHAR +STARTCHAR uni010AD3 +ENCODING 68307 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 1 +BITMAP +3C +7E +46 +66 +76 +1F +FF +FF +ENDCHAR +STARTCHAR uni010AD4 +ENCODING 68308 +BBX 16 9 0 1 +BITMAP +003C +003C +0030 +0038 +001C +000E +0007 +FFFF +FFFF +ENDCHAR +STARTCHAR uni010AD5 +ENCODING 68309 +BBX 16 9 0 1 +BITMAP +07BC +07BC +0630 +0738 +039C +01CE +00E7 +FFFF +FFFF +ENDCHAR +STARTCHAR uni010AD6 +ENCODING 68310 +BBX 16 8 0 -1 +BITMAP +0006 +73FE +E1FF +C183 +61C6 +73FC +3F78 +1E00 +ENDCHAR +STARTCHAR uni010AD7 +ENCODING 68311 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +60 +E0 +C0 +60 +30 +18 +18 +ENDCHAR +STARTCHAR uni010AD8 +ENCODING 68312 +BBX 16 6 0 1 +BITMAP +0F18 +1FBC +19EE +18C7 +FFFF +FFFF +ENDCHAR +STARTCHAR uni010AD9 +ENCODING 68313 +BBX 16 8 0 1 +BITMAP +0030 +0070 +00E0 +00F0 +0038 +001E +FFFF +FFFF +ENDCHAR +STARTCHAR uni010ADA +ENCODING 68314 +BBX 16 11 0 1 +BITMAP +0330 +0330 +0000 +0030 +0070 +00E0 +00F0 +0038 +001E +FFFF +FFFF +ENDCHAR +STARTCHAR uni010ADB +ENCODING 68315 +BBX 16 6 0 1 +BITMAP +0078 +00FC +01CE +0187 +FFFF +FFFF +ENDCHAR +STARTCHAR uni010ADC +ENCODING 68316 +BBX 16 9 0 1 +BITMAP +00C0 +00C0 +0000 +0078 +00FC +01CE +0187 +FFFF +FFFF +ENDCHAR +STARTCHAR uni010ADD +ENCODING 68317 +BBX 16 11 0 -1 +BITMAP +0018 +0038 +0070 +01E0 +1FE0 +1F70 +063C +C31F +F707 +7E00 +1C00 +ENDCHAR +STARTCHAR uni010ADE +ENCODING 68318 +BBX 16 7 0 -1 +BITMAP +1FF0 +1FFC +C67E +C307 +F73F +7E3E +1C00 +ENDCHAR +STARTCHAR uni010ADF +ENCODING 68319 +BBX 16 10 0 -1 +BITMAP +0180 +0180 +0000 +1FF0 +1FFC +C67E +C307 +F73F +7E3E +1C00 +ENDCHAR +STARTCHAR uni010AE0 +ENCODING 68320 +BBX 16 10 0 -1 +BITMAP +0CC0 +0CC0 +0000 +1FF0 +1FFC +C67E +C307 +F73F +7E3E +1C00 +ENDCHAR +STARTCHAR uni010AE1 +ENCODING 68321 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 1 0 +BITMAP +60 +60 +00 +70 +E0 +C0 +60 +30 +ENDCHAR +STARTCHAR uni010AE2 +ENCODING 68322 +BBX 16 6 0 -1 +BITMAP +399C +718E +C183 +F3CF +7FFE +1E78 +ENDCHAR +STARTCHAR uni010AE3 +ENCODING 68323 +BBX 16 10 0 -1 +BITMAP +0660 +0660 +0000 +0000 +399C +718E +C183 +F3CF +7FFE +1E78 +ENDCHAR +STARTCHAR uni010AE4 +ENCODING 68324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 1 +BITMAP +F0 +F0 +C0 +E0 +64 +6C +7C +76 +62 +ENDCHAR +STARTCHAR uni010AE5 +ENCODING 68325 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 1 11 +BITMAP +CC +CC +ENDCHAR +STARTCHAR uni010AE6 +ENCODING 68326 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 1 -2 +BITMAP +CC +CC +ENDCHAR +STARTCHAR uni010AEB +ENCODING 68331 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 10 3 0 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni010AEC +ENCODING 68332 +BBX 14 8 1 1 +BITMAP +0600 +0E00 +1C00 +1F00 +07C0 +00F0 +FFFC +FFFC +ENDCHAR +STARTCHAR uni010AED +ENCODING 68333 +BBX 14 11 1 -1 +BITMAP +0030 +C038 +FFF8 +FFEC +060C +060C +060C +0600 +0600 +0E00 +0E00 +ENDCHAR +STARTCHAR uni010AEE +ENCODING 68334 +BBX 14 6 1 1 +BITMAP +01E0 +03F0 +0730 +0618 +FFFC +FFFC +ENDCHAR +STARTCHAR uni010AEF +ENCODING 68335 +BBX 11 12 3 -1 +BITMAP +0060 +60E0 +7FC0 +7FC0 +70C0 +79C0 +6F80 +6700 +6000 +6000 +E000 +E000 +ENDCHAR +STARTCHAR uni010AF0 +ENCODING 68336 +BBX 15 15 1 -2 +BITMAP +0100 +0100 +0380 +06C0 +0000 +1010 +3398 +E38E +3398 +1010 +0000 +06C0 +0380 +0100 +0100 +ENDCHAR +STARTCHAR uni010AF1 +ENCODING 68337 +BBX 12 12 2 0 +BITMAP +0600 +0900 +0900 +0000 +6060 +8610 +8610 +6060 +0000 +0900 +0900 +0600 +ENDCHAR +STARTCHAR uni010AF2 +ENCODING 68338 +BBX 14 10 1 0 +BITMAP +3CF0 +3CF0 +C30C +C30C +DB6C +DB6C +C30C +C30C +3CF0 +3CF0 +ENDCHAR +STARTCHAR uni010AF3 +ENCODING 68339 +BBX 8 10 4 0 +BITMAP +3C +3C +C3 +C3 +DB +DB +C3 +C3 +3C +3C +ENDCHAR +STARTCHAR uni010AF4 +ENCODING 68340 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 2 2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni010AF5 +ENCODING 68341 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 6 2 0 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni010AF6 +ENCODING 68342 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +38 +70 +C0 +C0 +C0 +70 +38 +ENDCHAR +STARTCHAR uni010B00 +ENCODING 68352 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +22 +22 +22 +22 +DC +ENDCHAR +STARTCHAR uni010B01 +ENCODING 68353 +BBX 11 5 2 2 +BITMAP +2220 +2220 +2220 +2220 +DDC0 +ENDCHAR +STARTCHAR uni010B02 +ENCODING 68354 +BBX 10 7 3 0 +BITMAP +4440 +8440 +8440 +4440 +BB80 +8000 +4000 +ENDCHAR +STARTCHAR uni010B03 +ENCODING 68355 +BBX 14 7 1 0 +BITMAP +4444 +8444 +8444 +4444 +BBB8 +8000 +4000 +ENDCHAR +STARTCHAR uni010B04 +ENCODING 68356 +BBX 10 8 3 -1 +BITMAP +8C40 +5240 +3180 +3000 +3000 +2800 +4800 +8400 +ENDCHAR +STARTCHAR uni010B05 +ENCODING 68357 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +24 +24 +24 +38 +20 +FE +A0 +A0 +A0 +20 +20 +10 +0C +ENDCHAR +STARTCHAR uni010B06 +ENCODING 68358 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 7 2 0 +BITMAP +60 +80 +80 +60 +80 +80 +60 +ENDCHAR +STARTCHAR uni010B07 +ENCODING 68359 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 -2 +BITMAP +60 +80 +80 +60 +80 +80 +40 +20 +40 +ENDCHAR +STARTCHAR uni010B08 +ENCODING 68360 +BBX 10 6 3 1 +BITMAP +9040 +9040 +F040 +9040 +8880 +8700 +ENDCHAR +STARTCHAR uni010B09 +ENCODING 68361 +BBX 10 9 3 -2 +BITMAP +9040 +9040 +F040 +9040 +8880 +8700 +8000 +7F80 +0040 +ENDCHAR +STARTCHAR uni010B0A +ENCODING 68362 +BBX 12 8 2 1 +BITMAP +3800 +4400 +8400 +03E0 +0010 +0010 +0010 +0FE0 +ENDCHAR +STARTCHAR uni010B0B +ENCODING 68363 +BBX 12 11 2 -2 +BITMAP +3800 +4400 +8400 +03E0 +0010 +0010 +0010 +0FE0 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni010B0C +ENCODING 68364 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 2 2 +BITMAP +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uni010B0D +ENCODING 68365 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +08 +08 +08 +F0 +40 +40 +40 +ENDCHAR +STARTCHAR uni010B0E +ENCODING 68366 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 3 -1 +BITMAP +40 +40 +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni010B0F +ENCODING 68367 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +10 +08 +08 +88 +70 +20 +20 +ENDCHAR +STARTCHAR uni010B10 +ENCODING 68368 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 -1 +BITMAP +60 +90 +88 +48 +38 +08 +08 +10 +20 +ENDCHAR +STARTCHAR uni010B11 +ENCODING 68369 +BBX 10 14 3 -1 +BITMAP +2000 +1000 +1000 +1000 +2000 +4000 +8240 +8240 +8240 +8380 +4200 +4200 +2400 +1800 +ENDCHAR +STARTCHAR uni010B12 +ENCODING 68370 +BBX 9 9 3 -2 +BITMAP +8880 +8880 +8880 +F700 +8000 +8000 +8700 +7880 +0080 +ENDCHAR +STARTCHAR uni010B13 +ENCODING 68371 +BBX 9 8 4 -1 +BITMAP +8880 +8880 +8880 +8880 +F700 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni010B14 +ENCODING 68372 +BBX 11 9 2 -2 +BITMAP +7820 +8420 +8420 +8420 +83C0 +4000 +4000 +2000 +1000 +ENDCHAR +STARTCHAR uni010B15 +ENCODING 68373 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -1 +BITMAP +42 +A2 +22 +22 +22 +22 +44 +F8 +ENDCHAR +STARTCHAR uni010B16 +ENCODING 68374 +BBX 9 10 3 -2 +BITMAP +6000 +9000 +9000 +7000 +1000 +1000 +1300 +0C80 +0080 +0080 +ENDCHAR +STARTCHAR uni010B17 +ENCODING 68375 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +84 +84 +84 +84 +F8 +80 +80 +80 +ENDCHAR +STARTCHAR uni010B18 +ENCODING 68376 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +88 +88 +88 +F0 +80 +80 +98 +64 +04 +ENDCHAR +STARTCHAR uni010B19 +ENCODING 68377 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 1 +BITMAP +1C +A2 +C2 +A2 +9C +80 +ENDCHAR +STARTCHAR uni010B1A +ENCODING 68378 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 0 +BITMAP +20 +10 +10 +10 +20 +40 +84 +82 +82 +82 +42 +44 +38 +ENDCHAR +STARTCHAR uni010B1B +ENCODING 68379 +BBX 13 10 1 -2 +BITMAP +0060 +0090 +0088 +0048 +0038 +0008 +0008 +0010 +0020 +FFC0 +ENDCHAR +STARTCHAR uni010B1C +ENCODING 68380 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +20 +50 +40 +40 +40 +80 +80 +98 +64 +04 +ENDCHAR +STARTCHAR uni010B1D +ENCODING 68381 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -2 +BITMAP +1C +A2 +C2 +A2 +9C +80 +98 +64 +04 +ENDCHAR +STARTCHAR uni010B1E +ENCODING 68382 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +64 +94 +94 +94 +A4 +78 +ENDCHAR +STARTCHAR uni010B1F +ENCODING 68383 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 1 +BITMAP +20 +50 +10 +10 +08 +08 +64 +94 +94 +94 +A4 +78 +ENDCHAR +STARTCHAR uni010B20 +ENCODING 68384 +BBX 13 10 1 -2 +BITMAP +0008 +0010 +0010 +0008 +0008 +0008 +0008 +0010 +0020 +FFC0 +ENDCHAR +STARTCHAR uni010B21 +ENCODING 68385 +BBX 11 7 2 1 +BITMAP +0020 +6440 +9440 +9420 +9420 +A440 +7B80 +ENDCHAR +STARTCHAR uni010B22 +ENCODING 68386 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 7 2 0 +BITMAP +C0 +20 +20 +C0 +20 +20 +C0 +ENDCHAR +STARTCHAR uni010B23 +ENCODING 68387 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +02 +24 +24 +E2 +22 +24 +18 +ENDCHAR +STARTCHAR uni010B24 +ENCODING 68388 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 -2 +BITMAP +C0 +20 +20 +C0 +20 +20 +40 +80 +40 +ENDCHAR +STARTCHAR uni010B25 +ENCODING 68389 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 5 3 1 +BITMAP +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010B26 +ENCODING 68390 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -1 +BITMAP +80 +40 +20 +20 +20 +20 +20 +20 +20 +20 +10 +08 +ENDCHAR +STARTCHAR uni010B27 +ENCODING 68391 +BBX 11 13 2 -2 +BITMAP +2220 +2220 +2220 +3DC0 +2000 +FFE0 +A000 +A000 +A000 +2000 +2000 +1000 +0C00 +ENDCHAR +STARTCHAR uni010B28 +ENCODING 68392 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +10 +20 +38 +E8 +28 +28 +10 +ENDCHAR +STARTCHAR uni010B29 +ENCODING 68393 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 -2 +BITMAP +10 +20 +38 +E8 +28 +28 +10 +10 +08 +ENDCHAR +STARTCHAR uni010B2A +ENCODING 68394 +BBX 12 7 2 0 +BITMAP +0F00 +10F0 +7000 +9000 +1000 +0F80 +0040 +ENDCHAR +STARTCHAR uni010B2B +ENCODING 68395 +BBX 13 7 1 0 +BITMAP +9210 +9208 +9208 +EE08 +8108 +8110 +80E0 +ENDCHAR +STARTCHAR uni010B2C +ENCODING 68396 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -2 +BITMAP +84 +82 +82 +82 +42 +44 +38 +10 +10 +ENDCHAR +STARTCHAR uni010B2D +ENCODING 68397 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 1 +BITMAP +40 +A0 +20 +20 +10 +10 +08 +08 +08 +08 +08 +10 +ENDCHAR +STARTCHAR uni010B2E +ENCODING 68398 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 1 +BITMAP +40 +A8 +34 +24 +14 +18 +08 +08 +08 +08 +08 +10 +ENDCHAR +STARTCHAR uni010B2F +ENCODING 68399 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -1 +BITMAP +48 +A4 +22 +22 +22 +22 +44 +F8 +ENDCHAR +STARTCHAR uni010B30 +ENCODING 68400 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -1 +BITMAP +08 +10 +20 +20 +20 +20 +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni010B31 +ENCODING 68401 +BBX 13 7 1 0 +BITMAP +1210 +1208 +1208 +EE08 +0108 +0110 +00E0 +ENDCHAR +STARTCHAR uni010B32 +ENCODING 68402 +BBX 11 6 3 1 +BITMAP +6440 +9420 +9420 +9420 +A440 +7B80 +ENDCHAR +STARTCHAR uni010B33 +ENCODING 68403 +BBX 14 7 1 0 +BITMAP +4488 +A484 +A484 +7B84 +2044 +2048 +4030 +ENDCHAR +STARTCHAR uni010B34 +ENCODING 68404 +BBX 13 9 1 -2 +BITMAP +9210 +9208 +9208 +EE08 +8108 +9910 +A0E0 +4008 +3FF0 +ENDCHAR +STARTCHAR uni010B35 +ENCODING 68405 +BBX 11 6 2 1 +BITMAP +7120 +8920 +89C0 +8900 +9100 +7E00 +ENDCHAR +STARTCHAR uni010B39 +ENCODING 68409 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 2 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni010B3A +ENCODING 68410 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 3 2 +BITMAP +A0 +00 +40 +ENDCHAR +STARTCHAR uni010B3B +ENCODING 68411 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 2 2 +BITMAP +88 +00 +00 +20 +ENDCHAR +STARTCHAR uni010B3C +ENCODING 68412 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 1 +BITMAP +CC +CC +00 +30 +30 +ENDCHAR +STARTCHAR uni010B3D +ENCODING 68413 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 1 +BITMAP +30 +30 +00 +CC +CC +ENDCHAR +STARTCHAR uni010B3E +ENCODING 68414 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +44 +AA +44 +10 +28 +10 +ENDCHAR +STARTCHAR uni010B3F +ENCODING 68415 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +10 +28 +10 +44 +AA +44 +ENDCHAR +STARTCHAR uni010B40 +ENCODING 68416 +BBX 13 7 2 -1 +BITMAP +0108 +0108 +0110 +0110 +0090 +0048 +FFF8 +ENDCHAR +STARTCHAR uni010B41 +ENCODING 68417 +BBX 13 8 2 0 +BITMAP +1000 +1000 +0FE0 +0010 +0008 +0008 +0010 +FFE0 +ENDCHAR +STARTCHAR uni010B42 +ENCODING 68418 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 0 +BITMAP +18 +68 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni010B43 +ENCODING 68419 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 -2 +BITMAP +80 +80 +40 +38 +08 +08 +10 +E0 +00 +60 +90 +ENDCHAR +STARTCHAR uni010B44 +ENCODING 68420 +BBX 14 10 1 0 +BITMAP +018C +0210 +0210 +0210 +0420 +7FFC +8420 +8840 +4840 +3180 +ENDCHAR +STARTCHAR uni010B45 +ENCODING 68421 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +38 +44 +04 +04 +08 +F0 +ENDCHAR +STARTCHAR uni010B46 +ENCODING 68422 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 0 +BITMAP +10 +20 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni010B47 +ENCODING 68423 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 -1 +BITMAP +22 +22 +24 +24 +12 +2A +C6 +ENDCHAR +STARTCHAR uni010B48 +ENCODING 68424 +BBX 11 9 2 0 +BITMAP +4100 +8200 +8200 +79E0 +0820 +0820 +1040 +2080 +C300 +ENDCHAR +STARTCHAR uni010B49 +ENCODING 68425 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 2 0 +BITMAP +20 +20 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR uni010B4A +ENCODING 68426 +BBX 12 8 1 0 +BITMAP +0800 +0800 +0400 +03F0 +0010 +C010 +3820 +07C0 +ENDCHAR +STARTCHAR uni010B4B +ENCODING 68427 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +80 +80 +80 +80 +80 +B0 +C8 +84 +04 +04 +08 +30 +ENDCHAR +STARTCHAR uni010B4C +ENCODING 68428 +BBX 10 10 3 0 +BITMAP +0300 +8400 +8400 +8400 +4800 +3FC0 +0840 +1080 +1080 +6300 +ENDCHAR +STARTCHAR uni010B4D +ENCODING 68429 +BBX 12 6 2 0 +BITMAP +0010 +0020 +0020 +0020 +0010 +FFF0 +ENDCHAR +STARTCHAR uni010B4E +ENCODING 68430 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +70 +48 +24 +24 +44 +98 +ENDCHAR +STARTCHAR uni010B4F +ENCODING 68431 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +40 +40 +38 +04 +04 +04 +08 +F0 +ENDCHAR +STARTCHAR uni010B50 +ENCODING 68432 +BBX 12 11 2 0 +BITMAP +0800 +0800 +0C00 +0C00 +0A00 +1180 +1070 +2010 +2020 +4040 +8180 +ENDCHAR +STARTCHAR uni010B51 +ENCODING 68433 +BBX 13 7 1 0 +BITMAP +0088 +0150 +0150 +0138 +0200 +0200 +FC00 +ENDCHAR +STARTCHAR uni010B52 +ENCODING 68434 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +80 +80 +7C +24 +24 +24 +24 +48 +ENDCHAR +STARTCHAR uni010B53 +ENCODING 68435 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +40 +40 +20 +1C +04 +04 +08 +10 +E0 +ENDCHAR +STARTCHAR uni010B54 +ENCODING 68436 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +40 +20 +12 +1C +10 +10 +10 +22 +DC +ENDCHAR +STARTCHAR uni010B55 +ENCODING 68437 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +40 +20 +10 +1C +12 +12 +12 +22 +CC +ENDCHAR +STARTCHAR uni010B58 +ENCODING 68440 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 9 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010B59 +ENCODING 68441 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +88 +88 +88 +88 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni010B5A +ENCODING 68442 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni010B5B +ENCODING 68443 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +AA +AA +AA +AA +AA +AA +AA +AA +AA +ENDCHAR +STARTCHAR uni010B5C +ENCODING 68444 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +04 +04 +F8 +80 +80 +40 +20 +1C +ENDCHAR +STARTCHAR uni010B5D +ENCODING 68445 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +30 +48 +48 +38 +08 +08 +F0 +ENDCHAR +STARTCHAR uni010B5E +ENCODING 68446 +BBX 12 8 2 0 +BITMAP +7080 +8840 +8440 +4380 +4000 +8000 +8000 +7FF0 +ENDCHAR +STARTCHAR uni010B5F +ENCODING 68447 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +10 +10 +38 +44 +04 +04 +08 +F0 +ENDCHAR +STARTCHAR uni010B60 +ENCODING 68448 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +88 +88 +88 +88 +44 +24 +FC +ENDCHAR +STARTCHAR uni010B61 +ENCODING 68449 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +04 +04 +04 +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni010B62 +ENCODING 68450 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +08 +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uni010B63 +ENCODING 68451 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +60 +10 +10 +60 +10 +08 +08 +F0 +ENDCHAR +STARTCHAR uni010B64 +ENCODING 68452 +BBX 12 8 2 0 +BITMAP +0020 +0010 +7810 +87E0 +8800 +8810 +8420 +83C0 +ENDCHAR +STARTCHAR uni010B65 +ENCODING 68453 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +60 +90 +10 +20 +20 +40 +40 +78 +ENDCHAR +STARTCHAR uni010B66 +ENCODING 68454 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 1 0 +BITMAP +60 +90 +80 +60 +10 +E0 +ENDCHAR +STARTCHAR uni010B67 +ENCODING 68455 +BBX 11 7 2 -1 +BITMAP +0E00 +1100 +1100 +1100 +9120 +6120 +00C0 +ENDCHAR +STARTCHAR uni010B68 +ENCODING 68456 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +70 +88 +88 +40 +40 +20 +20 +20 +40 +70 +ENDCHAR +STARTCHAR uni010B69 +ENCODING 68457 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +38 +04 +04 +04 +18 +E0 +ENDCHAR +STARTCHAR uni010B6A +ENCODING 68458 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 3 0 +BITMAP +C0 +20 +C0 +20 +20 +40 +80 +E0 +ENDCHAR +STARTCHAR uni010B6B +ENCODING 68459 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -2 +BITMAP +80 +80 +80 +80 +80 +80 +B0 +C8 +08 +10 +10 +20 +40 +20 +ENDCHAR +STARTCHAR uni010B6C +ENCODING 68460 +BBX 12 11 2 0 +BITMAP +1000 +2000 +2000 +1000 +0FC0 +3420 +4210 +8110 +0210 +0420 +0FC0 +ENDCHAR +STARTCHAR uni010B6D +ENCODING 68461 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 1 0 +BITMAP +20 +40 +40 +40 +20 +20 +40 +80 +F0 +ENDCHAR +STARTCHAR uni010B6E +ENCODING 68462 +BBX 11 7 3 0 +BITMAP +7BC0 +8420 +8420 +0840 +0840 +1080 +6300 +ENDCHAR +STARTCHAR uni010B6F +ENCODING 68463 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +70 +88 +88 +88 +7C +08 +08 +08 +ENDCHAR +STARTCHAR uni010B70 +ENCODING 68464 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +60 +92 +8C +40 +20 +10 +20 +40 +70 +ENDCHAR +STARTCHAR uni010B71 +ENCODING 68465 +BBX 12 7 2 0 +BITMAP +38E0 +4510 +4410 +0820 +0820 +1040 +FFF0 +ENDCHAR +STARTCHAR uni010B72 +ENCODING 68466 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +B8 +44 +24 +44 +48 +80 +F8 +ENDCHAR +STARTCHAR uni010B78 +ENCODING 68472 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 9 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010B79 +ENCODING 68473 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +88 +88 +88 +88 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni010B7A +ENCODING 68474 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni010B7B +ENCODING 68475 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +AA +AA +AA +AA +AA +AA +AA +AA +AA +ENDCHAR +STARTCHAR uni010B7C +ENCODING 68476 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni010B7D +ENCODING 68477 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +60 +10 +10 +60 +10 +10 +10 +E0 +ENDCHAR +STARTCHAR uni010B7E +ENCODING 68478 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +08 +10 +18 +24 +24 +58 +40 +80 +F0 +10 +20 +40 +ENDCHAR +STARTCHAR uni010B7F +ENCODING 68479 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +04 +04 +04 +64 +94 +94 +7C +10 +10 +10 +10 +1E +ENDCHAR +STARTCHAR uni010B80 +ENCODING 68480 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 1 +BITMAP +24 +24 +24 +FC +ENDCHAR +STARTCHAR uni010B81 +ENCODING 68481 +BBX 12 8 1 0 +BITMAP +0020 +0020 +0010 +0010 +0010 +0010 +0020 +FFC0 +ENDCHAR +STARTCHAR uni010B82 +ENCODING 68482 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 -1 +BITMAP +40 +40 +40 +20 +E0 +ENDCHAR +STARTCHAR uni010B83 +ENCODING 68483 +BBX 12 7 2 0 +BITMAP +0060 +0090 +0090 +0070 +8010 +6020 +1FC0 +ENDCHAR +STARTCHAR uni010B84 +ENCODING 68484 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 0 +BITMAP +08 +68 +90 +88 +48 +08 +ENDCHAR +STARTCHAR uni010B85 +ENCODING 68485 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 5 2 0 +BITMAP +80 +80 +80 +80 +C0 +ENDCHAR +STARTCHAR uni010B86 +ENCODING 68486 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 -1 +BITMAP +30 +40 +40 +40 +20 +E0 +ENDCHAR +STARTCHAR uni010B87 +ENCODING 68487 +BBX 9 5 3 0 +BITMAP +2100 +2280 +5180 +8880 +0700 +ENDCHAR +STARTCHAR uni010B88 +ENCODING 68488 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +30 +48 +84 +84 +84 +ENDCHAR +STARTCHAR uni010B89 +ENCODING 68489 +BBX 12 10 2 0 +BITMAP +4000 +A000 +D000 +1000 +2000 +2000 +4000 +8000 +4000 +3FF0 +ENDCHAR +STARTCHAR uni010B8A +ENCODING 68490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +40 +40 +40 +40 +40 +70 +48 +44 +04 +04 +88 +70 +ENDCHAR +STARTCHAR uni010B8B +ENCODING 68491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 0 -1 +BITMAP +10 +20 +40 +40 +40 +40 +FC +44 +44 +44 +28 +10 +ENDCHAR +STARTCHAR uni010B8C +ENCODING 68492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni010B8D +ENCODING 68493 +BBX 12 6 2 0 +BITMAP +1040 +28A0 +0410 +0410 +8610 +79E0 +ENDCHAR +STARTCHAR uni010B8E +ENCODING 68494 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +30 +48 +84 +44 +F8 +ENDCHAR +STARTCHAR uni010B8F +ENCODING 68495 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +88 +84 +C4 +B8 +80 +44 +38 +ENDCHAR +STARTCHAR uni010B90 +ENCODING 68496 +BBX 14 6 1 0 +BITMAP +1080 +2940 +0420 +0420 +8624 +79D8 +ENDCHAR +STARTCHAR uni010B91 +ENCODING 68497 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 0 +BITMAP +18 +A4 +44 +A4 +18 +ENDCHAR +STARTCHAR uni010B99 +ENCODING 68505 +BBX 3 9 6 0 +BITMAP +40 +A0 +40 +00 +A0 +00 +40 +A0 +40 +ENDCHAR +STARTCHAR uni010B9A +ENCODING 68506 +BBX 8 9 3 0 +BITMAP +18 +18 +00 +42 +A5 +42 +00 +18 +18 +ENDCHAR +STARTCHAR uni010B9B +ENCODING 68507 +BBX 11 11 2 -1 +BITMAP +0400 +0A00 +0400 +1100 +4A40 +A4A0 +4A40 +1100 +0400 +0A00 +0400 +ENDCHAR +STARTCHAR uni010B9C +ENCODING 68508 +BBX 9 11 3 -1 +BITMAP +0800 +1400 +0800 +0000 +4100 +AA80 +4100 +0000 +0800 +1400 +0800 +ENDCHAR +STARTCHAR uni010BA9 +ENCODING 68521 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 5 3 0 +BITMAP +40 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni010BAA +ENCODING 68522 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 0 +BITMAP +90 +90 +90 +F0 +80 +80 +ENDCHAR +STARTCHAR uni010BAB +ENCODING 68523 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +92 +92 +92 +FE +80 +80 +ENDCHAR +STARTCHAR uni010BAC +ENCODING 68524 +BBX 10 6 3 0 +BITMAP +9240 +9240 +9240 +FFC0 +8000 +8000 +ENDCHAR +STARTCHAR uni010BAD +ENCODING 68525 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -1 +BITMAP +08 +08 +10 +10 +20 +20 +40 +B0 +08 +08 +10 +E0 +ENDCHAR +STARTCHAR uni010BAE +ENCODING 68526 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 0 +BITMAP +10 +28 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni010BAF +ENCODING 68527 +BBX 14 9 1 0 +BITMAP +0A00 +1200 +2118 +4124 +40A4 +279C +2004 +1008 +F7F0 +ENDCHAR +STARTCHAR uni010C00 +ENCODING 68608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +30 +28 +20 +20 +20 +A0 +60 +20 +ENDCHAR +STARTCHAR uni010C01 +ENCODING 68609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +60 +A0 +20 +20 +20 +28 +30 +20 +ENDCHAR +STARTCHAR uni010C02 +ENCODING 68610 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +50 +20 +20 +20 +20 +20 +50 +88 +ENDCHAR +STARTCHAR uni010C03 +ENCODING 68611 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +80 +C0 +A0 +90 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010C04 +ENCODING 68612 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +80 +80 +80 +80 +C0 +A0 +90 +80 +80 +ENDCHAR +STARTCHAR uni010C05 +ENCODING 68613 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +50 +20 +50 +88 +88 +88 +50 +20 +50 +ENDCHAR +STARTCHAR uni010C06 +ENCODING 68614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +80 +80 +40 +40 +30 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni010C07 +ENCODING 68615 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +90 +D0 +B0 +90 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010C08 +ENCODING 68616 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +90 +90 +90 +F0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010C09 +ENCODING 68617 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +20 +20 +10 +08 +48 +88 +88 +70 +ENDCHAR +STARTCHAR uni010C0A +ENCODING 68618 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +10 +28 +44 +82 +04 +08 +10 +ENDCHAR +STARTCHAR uni010C0B +ENCODING 68619 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +50 +88 +50 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni010C0C +ENCODING 68620 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +28 +44 +AA +10 +28 +28 +44 +44 +ENDCHAR +STARTCHAR uni010C0D +ENCODING 68621 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +50 +50 +50 +88 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010C0E +ENCODING 68622 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +88 +88 +88 +A8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010C0F +ENCODING 68623 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +10 +28 +44 +40 +A0 +90 +80 +40 +20 +ENDCHAR +STARTCHAR uni010C10 +ENCODING 68624 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +10 +28 +20 +20 +20 +20 +20 +50 +88 +ENDCHAR +STARTCHAR uni010C11 +ENCODING 68625 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +90 +48 +24 +48 +90 +48 +24 +48 +90 +ENDCHAR +STARTCHAR uni010C12 +ENCODING 68626 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +90 +48 +24 +12 +24 +48 +24 +12 +09 +ENDCHAR +STARTCHAR uni010C13 +ENCODING 68627 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +88 +50 +50 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni010C14 +ENCODING 68628 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +28 +28 +28 +28 +F8 +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni010C15 +ENCODING 68629 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +A0 +A0 +A0 +A0 +F8 +28 +28 +28 +28 +ENDCHAR +STARTCHAR uni010C16 +ENCODING 68630 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +E0 +90 +88 +88 +88 +88 +88 +90 +E0 +ENDCHAR +STARTCHAR uni010C17 +ENCODING 68631 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +38 +44 +82 +82 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni010C18 +ENCODING 68632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +70 +88 +88 +48 +08 +10 +20 +20 +20 +ENDCHAR +STARTCHAR uni010C19 +ENCODING 68633 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +C0 +A0 +90 +90 +A0 +C0 +80 +80 +80 +ENDCHAR +STARTCHAR uni010C1A +ENCODING 68634 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +C0 +30 +08 +C8 +38 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010C1B +ENCODING 68635 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +20 +10 +A0 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni010C1C +ENCODING 68636 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +F8 +88 +80 +80 +F8 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni010C1D +ENCODING 68637 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +C0 +A0 +90 +90 +E0 +90 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni010C1E +ENCODING 68638 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 1 0 +BITMAP +10 +10 +10 +10 +10 +90 +50 +30 +10 +ENDCHAR +STARTCHAR uni010C1F +ENCODING 68639 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +88 +88 +88 +50 +50 +50 +50 +20 +ENDCHAR +STARTCHAR uni010C20 +ENCODING 68640 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +50 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010C21 +ENCODING 68641 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +D8 +A8 +88 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni010C22 +ENCODING 68642 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +10 +98 +A4 +42 +A4 +98 +10 +10 +ENDCHAR +STARTCHAR uni010C23 +ENCODING 68643 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 0 +BITMAP +80 +40 +40 +20 +20 +20 +40 +40 +80 +ENDCHAR +STARTCHAR uni010C24 +ENCODING 68644 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +12 +12 +1A +16 +92 +D0 +B0 +90 +10 +ENDCHAR +STARTCHAR uni010C25 +ENCODING 68645 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +12 +1A +16 +12 +10 +90 +D0 +B0 +10 +ENDCHAR +STARTCHAR uni010C26 +ENCODING 68646 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +44 +82 +AA +82 +92 +82 +44 +38 +ENDCHAR +STARTCHAR uni010C27 +ENCODING 68647 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +38 +44 +82 +82 +92 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni010C28 +ENCODING 68648 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 0 +BITMAP +80 +40 +20 +40 +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uni010C29 +ENCODING 68649 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +40 +20 +10 +20 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni010C2A +ENCODING 68650 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +C0 +20 +10 +D0 +20 +D0 +10 +20 +C0 +ENDCHAR +STARTCHAR uni010C2B +ENCODING 68651 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +30 +40 +80 +B0 +40 +B0 +80 +40 +30 +ENDCHAR +STARTCHAR uni010C2C +ENCODING 68652 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +10 +28 +44 +92 +44 +28 +10 +ENDCHAR +STARTCHAR uni010C2D +ENCODING 68653 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 1 0 +BITMAP +10 +10 +90 +50 +30 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010C2E +ENCODING 68654 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +80 +80 +90 +A0 +C0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010C2F +ENCODING 68655 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 1 0 +BITMAP +10 +30 +50 +90 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010C30 +ENCODING 68656 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +98 +A8 +C0 +80 +98 +A8 +C8 +88 +88 +ENDCHAR +STARTCHAR uni010C31 +ENCODING 68657 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +88 +50 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010C32 +ENCODING 68658 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +20 +20 +20 +20 +20 +20 +50 +88 +ENDCHAR +STARTCHAR uni010C33 +ENCODING 68659 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +80 +40 +40 +20 +20 +50 +50 +88 +ENDCHAR +STARTCHAR uni010C34 +ENCODING 68660 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +08 +08 +08 +08 +C8 +A8 +98 +88 +88 +ENDCHAR +STARTCHAR uni010C35 +ENCODING 68661 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +C8 +A8 +98 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010C36 +ENCODING 68662 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +0C +14 +24 +44 +84 +44 +24 +14 +0C +ENDCHAR +STARTCHAR uni010C37 +ENCODING 68663 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +C0 +A0 +90 +88 +84 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni010C38 +ENCODING 68664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +20 +20 +20 +20 +20 +A8 +70 +20 +ENDCHAR +STARTCHAR uni010C39 +ENCODING 68665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +70 +A8 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010C3A +ENCODING 68666 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +88 +88 +F8 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010C3B +ENCODING 68667 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +98 +A8 +C8 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010C3C +ENCODING 68668 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +44 +AA +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010C3D +ENCODING 68669 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +44 +88 +88 +50 +20 +10 +10 +10 +20 +ENDCHAR +STARTCHAR uni010C3E +ENCODING 68670 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 9 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010C3F +ENCODING 68671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +FC +84 +84 +84 +84 +84 +84 +84 +FC +ENDCHAR +STARTCHAR uni010C40 +ENCODING 68672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 6 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni010C41 +ENCODING 68673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +50 +20 +20 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010C42 +ENCODING 68674 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +8A +44 +2A +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010C43 +ENCODING 68675 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +70 +A8 +20 +20 +50 +88 +50 +20 +ENDCHAR +STARTCHAR uni010C44 +ENCODING 68676 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 2 +BITMAP +20 +50 +88 +00 +20 +50 +88 +ENDCHAR +STARTCHAR uni010C45 +ENCODING 68677 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +80 +80 +80 +80 +98 +A8 +C8 +88 +88 +ENDCHAR +STARTCHAR uni010C46 +ENCODING 68678 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +98 +A8 +C8 +88 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010C47 +ENCODING 68679 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +14 +18 +38 +44 +82 +82 +82 +82 +44 +ENDCHAR +STARTCHAR uni010C48 +ENCODING 68680 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +82 +C6 +AA +AA +92 +AA +AA +C6 +82 +ENDCHAR +STARTCHAR uni010C80 +ENCODING 68736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +1C +64 +84 +FC +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni010C81 +ENCODING 68737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +1C +64 +84 +64 +1C +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni010C82 +ENCODING 68738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +88 +88 +50 +50 +20 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni010C83 +ENCODING 68739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +54 +AA +28 +44 +44 +44 +44 +44 +28 +AA +54 +ENDCHAR +STARTCHAR uni010C84 +ENCODING 68740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010C85 +ENCODING 68741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +38 +54 +92 +10 +10 +10 +92 +54 +38 +10 +ENDCHAR +STARTCHAR uni010C86 +ENCODING 68742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +84 +9C +E4 +84 +84 +84 +84 +84 +9C +E4 +84 +ENDCHAR +STARTCHAR uni010C87 +ENCODING 68743 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +10 +10 +16 +18 +30 +D0 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010C88 +ENCODING 68744 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +44 +44 +28 +28 +16 +38 +D0 +28 +28 +44 +44 +ENDCHAR +STARTCHAR uni010C89 +ENCODING 68745 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 -1 +BITMAP +80 +50 +20 +60 +90 +10 +10 +90 +60 +20 +50 +80 +ENDCHAR +STARTCHAR uni010C8A +ENCODING 68746 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 -1 +BITMAP +50 +20 +50 +50 +88 +88 +88 +88 +50 +50 +20 +50 +ENDCHAR +STARTCHAR uni010C8B +ENCODING 68747 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 2 -1 +BITMAP +40 +80 +40 +40 +20 +20 +20 +20 +40 +40 +80 +40 +ENDCHAR +STARTCHAR uni010C8C +ENCODING 68748 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +28 +44 +44 +AA +92 +AA +44 +44 +28 +10 +ENDCHAR +STARTCHAR uni010C8D +ENCODING 68749 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +10 +28 +28 +28 +44 +44 +4C +4C +92 +92 +ENDCHAR +STARTCHAR uni010C8E +ENCODING 68750 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +10 +16 +18 +30 +D6 +18 +30 +D0 +10 +10 +ENDCHAR +STARTCHAR uni010C8F +ENCODING 68751 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +44 +28 +10 +28 +44 +82 +44 +28 +10 +28 +44 +ENDCHAR +STARTCHAR uni010C90 +ENCODING 68752 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +16 +18 +30 +D0 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010C91 +ENCODING 68753 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +06 +18 +30 +D0 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010C92 +ENCODING 68754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +08 +38 +C8 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010C93 +ENCODING 68755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +10 +28 +44 +82 +44 +28 +10 +ENDCHAR +STARTCHAR uni010C94 +ENCODING 68756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +30 +50 +90 +10 +10 +10 +12 +14 +18 +10 +ENDCHAR +STARTCHAR uni010C95 +ENCODING 68757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +28 +6C +AA +28 +10 +10 +10 +28 +AA +6C +28 +ENDCHAR +STARTCHAR uni010C96 +ENCODING 68758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +10 +28 +28 +28 +44 +4C +54 +54 +AA +AA +ENDCHAR +STARTCHAR uni010C97 +ENCODING 68759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +28 +44 +44 +8A +92 +A2 +44 +44 +28 +10 +ENDCHAR +STARTCHAR uni010C98 +ENCODING 68760 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +1C +64 +84 +64 +1C +64 +84 +64 +1C +04 +ENDCHAR +STARTCHAR uni010C99 +ENCODING 68761 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +80 +40 +20 +20 +10 +10 +10 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni010C9A +ENCODING 68762 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +C0 +A0 +90 +90 +88 +88 +88 +90 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni010C9B +ENCODING 68763 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +20 +50 +88 +08 +04 +04 +04 +08 +88 +50 +20 +ENDCHAR +STARTCHAR uni010C9C +ENCODING 68764 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +20 +10 +08 +08 +04 +04 +24 +48 +88 +50 +20 +ENDCHAR +STARTCHAR uni010C9D +ENCODING 68765 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +60 +18 +04 +18 +60 +80 +60 +18 +04 +ENDCHAR +STARTCHAR uni010C9E +ENCODING 68766 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +88 +90 +90 +A0 +A0 +C0 +A0 +A0 +90 +90 +88 +ENDCHAR +STARTCHAR uni010C9F +ENCODING 68767 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +28 +10 +28 +08 +04 +04 +24 +48 +A8 +50 +28 +ENDCHAR +STARTCHAR uni010CA0 +ENCODING 68768 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +08 +18 +28 +48 +98 +28 +48 +98 +28 +48 +88 +ENDCHAR +STARTCHAR uni010CA1 +ENCODING 68769 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +6C +AA +44 +44 +C6 +C6 +44 +28 +28 +54 +ENDCHAR +STARTCHAR uni010CA2 +ENCODING 68770 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +84 +84 +84 +84 +9C +E4 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni010CA3 +ENCODING 68771 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 4 +BITMAP +0C +30 +C0 +ENDCHAR +STARTCHAR uni010CA4 +ENCODING 68772 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +10 +28 +28 +28 +44 +44 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni010CA5 +ENCODING 68773 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 11 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010CA6 +ENCODING 68774 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +84 +44 +24 +14 +0C +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni010CA7 +ENCODING 68775 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +54 +BA +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010CA8 +ENCODING 68776 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +A8 +C8 +50 +50 +20 +20 +50 +50 +98 +A8 +ENDCHAR +STARTCHAR uni010CA9 +ENCODING 68777 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +B8 +88 +50 +50 +20 +20 +50 +50 +88 +B8 +ENDCHAR +STARTCHAR uni010CAA +ENCODING 68778 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +82 +C6 +AA +92 +82 +82 +82 +92 +AA +C6 +82 +ENDCHAR +STARTCHAR uni010CAB +ENCODING 68779 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +82 +C6 +AA +AA +AA +92 +AA +AA +AA +C6 +82 +ENDCHAR +STARTCHAR uni010CAC +ENCODING 68780 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +A8 +50 +50 +88 +88 +88 +88 +88 +50 +50 +A8 +ENDCHAR +STARTCHAR uni010CAD +ENCODING 68781 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +80 +80 +80 +83 +8D +B1 +C1 +01 +01 +01 +01 +ENDCHAR +STARTCHAR uni010CAE +ENCODING 68782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +82 +C6 +AA +92 +82 +82 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni010CAF +ENCODING 68783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +84 +9C +E4 +84 +9C +E4 +84 +84 +9C +E4 +84 +ENDCHAR +STARTCHAR uni010CB0 +ENCODING 68784 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +82 +44 +28 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010CB1 +ENCODING 68785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +54 +BA +10 +10 +54 +BA +10 +10 +54 +BA +10 +ENDCHAR +STARTCHAR uni010CB2 +ENCODING 68786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +38 +54 +54 +92 +92 +92 +54 +54 +38 +10 +ENDCHAR +STARTCHAR uni010CC0 +ENCODING 68800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +1C +64 +84 +FC +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni010CC1 +ENCODING 68801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +1C +64 +84 +64 +1C +04 +04 +04 +ENDCHAR +STARTCHAR uni010CC2 +ENCODING 68802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +88 +88 +50 +20 +20 +50 +88 +88 +ENDCHAR +STARTCHAR uni010CC3 +ENCODING 68803 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +54 +AA +28 +44 +44 +44 +28 +AA +54 +ENDCHAR +STARTCHAR uni010CC4 +ENCODING 68804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +70 +A8 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010CC5 +ENCODING 68805 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +20 +70 +A8 +20 +20 +20 +A8 +70 +20 +ENDCHAR +STARTCHAR uni010CC6 +ENCODING 68806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +84 +9C +E4 +84 +84 +84 +9C +E4 +84 +ENDCHAR +STARTCHAR uni010CC7 +ENCODING 68807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +10 +16 +18 +30 +D0 +10 +10 +10 +ENDCHAR +STARTCHAR uni010CC8 +ENCODING 68808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +44 +44 +28 +16 +38 +D0 +28 +44 +44 +ENDCHAR +STARTCHAR uni010CC9 +ENCODING 68809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 -2 +BITMAP +80 +50 +20 +60 +90 +10 +90 +60 +20 +50 +80 +ENDCHAR +STARTCHAR uni010CCA +ENCODING 68810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -1 +BITMAP +50 +20 +50 +88 +88 +88 +88 +50 +20 +50 +ENDCHAR +STARTCHAR uni010CCB +ENCODING 68811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 2 -1 +BITMAP +40 +80 +40 +20 +20 +20 +20 +40 +80 +40 +ENDCHAR +STARTCHAR uni010CCC +ENCODING 68812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +28 +44 +AA +92 +AA +44 +28 +10 +ENDCHAR +STARTCHAR uni010CCD +ENCODING 68813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +10 +28 +28 +44 +4C +4C +92 +92 +ENDCHAR +STARTCHAR uni010CCE +ENCODING 68814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +16 +18 +30 +D6 +18 +30 +D0 +10 +ENDCHAR +STARTCHAR uni010CCF +ENCODING 68815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +50 +20 +50 +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni010CD0 +ENCODING 68816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +16 +18 +30 +D0 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010CD1 +ENCODING 68817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +06 +18 +30 +D0 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010CD2 +ENCODING 68818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +08 +38 +C8 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010CD3 +ENCODING 68819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +20 +50 +88 +50 +20 +ENDCHAR +STARTCHAR uni010CD4 +ENCODING 68820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +30 +50 +90 +10 +12 +14 +18 +10 +ENDCHAR +STARTCHAR uni010CD5 +ENCODING 68821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +28 +6C +AA +28 +10 +28 +AA +6C +28 +ENDCHAR +STARTCHAR uni010CD6 +ENCODING 68822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +28 +28 +44 +4C +54 +54 +AA +AA +ENDCHAR +STARTCHAR uni010CD7 +ENCODING 68823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +28 +44 +8A +92 +A2 +44 +28 +10 +ENDCHAR +STARTCHAR uni010CD8 +ENCODING 68824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +30 +50 +90 +50 +30 +50 +90 +50 +30 +ENDCHAR +STARTCHAR uni010CD9 +ENCODING 68825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 9 2 0 +BITMAP +80 +40 +20 +20 +10 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni010CDA +ENCODING 68826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +C0 +A0 +90 +90 +88 +90 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni010CDB +ENCODING 68827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +20 +50 +88 +04 +04 +04 +88 +50 +20 +ENDCHAR +STARTCHAR uni010CDC +ENCODING 68828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +20 +10 +08 +08 +24 +48 +88 +50 +20 +ENDCHAR +STARTCHAR uni010CDD +ENCODING 68829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +60 +18 +04 +18 +60 +80 +60 +18 +ENDCHAR +STARTCHAR uni010CDE +ENCODING 68830 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +84 +88 +90 +A0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni010CDF +ENCODING 68831 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +28 +10 +28 +04 +24 +44 +A8 +50 +28 +ENDCHAR +STARTCHAR uni010CE0 +ENCODING 68832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +38 +C8 +08 +38 +C8 +08 +08 +38 +C8 +ENDCHAR +STARTCHAR uni010CE1 +ENCODING 68833 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +6C +AA +44 +44 +44 +AA +28 +54 +ENDCHAR +STARTCHAR uni010CE2 +ENCODING 68834 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +84 +84 +84 +9C +E4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni010CE3 +ENCODING 68835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 2 +BITMAP +0C +30 +C0 +ENDCHAR +STARTCHAR uni010CE4 +ENCODING 68836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni010CE5 +ENCODING 68837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 9 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010CE6 +ENCODING 68838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +48 +28 +18 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni010CE7 +ENCODING 68839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +54 +BA +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni010CE8 +ENCODING 68840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +A8 +C8 +50 +20 +20 +50 +98 +A8 +ENDCHAR +STARTCHAR uni010CE9 +ENCODING 68841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +B8 +88 +50 +20 +20 +50 +88 +B8 +ENDCHAR +STARTCHAR uni010CEA +ENCODING 68842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +82 +C6 +AA +92 +82 +92 +AA +C6 +82 +ENDCHAR +STARTCHAR uni010CEB +ENCODING 68843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +82 +C6 +AA +AA +92 +AA +AA +C6 +82 +ENDCHAR +STARTCHAR uni010CEC +ENCODING 68844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +A8 +50 +50 +88 +88 +88 +50 +50 +A8 +ENDCHAR +STARTCHAR uni010CED +ENCODING 68845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +80 +80 +8C +94 +A4 +C4 +04 +04 +04 +ENDCHAR +STARTCHAR uni010CEE +ENCODING 68846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +82 +C6 +AA +92 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni010CEF +ENCODING 68847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +9C +E4 +84 +9C +E4 +84 +9C +E4 +84 +ENDCHAR +STARTCHAR uni010CF0 +ENCODING 68848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +50 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni010CF1 +ENCODING 68849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +54 +BA +10 +54 +BA +10 +54 +BA +10 +ENDCHAR +STARTCHAR uni010CF2 +ENCODING 68850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +38 +54 +92 +92 +92 +54 +38 +10 +ENDCHAR +STARTCHAR uni010CFA +ENCODING 68858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 11 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010CFB +ENCODING 68859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +82 +82 +44 +44 +44 +44 +28 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni010CFC +ENCODING 68860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +88 +88 +50 +50 +20 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni010CFD +ENCODING 68861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +92 +92 +54 +54 +54 +54 +54 +38 +38 +38 +10 +ENDCHAR +STARTCHAR uni010CFE +ENCODING 68862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +92 +54 +54 +38 +54 +54 +92 +92 +92 +ENDCHAR +STARTCHAR uni010CFF +ENCODING 68863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +92 +54 +38 +FE +38 +54 +92 +92 +92 +ENDCHAR +STARTCHAR uni010D00 +ENCODING 68864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +06 +09 +09 +09 +09 +09 +89 +4A +3C +ENDCHAR +STARTCHAR uni010D01 +ENCODING 68865 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +0F +01 +01 +01 +01 +01 +81 +42 +3C +ENDCHAR +STARTCHAR uni010D02 +ENCODING 68866 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 1 +BITMAP +0C +12 +11 +8F +41 +3E +ENDCHAR +STARTCHAR uni010D03 +ENCODING 68867 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +07 +09 +09 +01 +01 +01 +81 +42 +3C +ENDCHAR +STARTCHAR uni010D04 +ENCODING 68868 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +07 +04 +04 +04 +04 +04 +84 +44 +38 +ENDCHAR +STARTCHAR uni010D05 +ENCODING 68869 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +06 +09 +09 +01 +01 +03 +85 +49 +36 +ENDCHAR +STARTCHAR uni010D06 +ENCODING 68870 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +01 +01 +01 +01 +01 +03 +85 +49 +36 +ENDCHAR +STARTCHAR uni010D07 +ENCODING 68871 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 1 +BITMAP +02 +15 +29 +A9 +91 +6E +ENDCHAR +STARTCHAR uni010D08 +ENCODING 68872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +04 +08 +10 +38 +06 +01 +81 +42 +3C +ENDCHAR +STARTCHAR uni010D09 +ENCODING 68873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +0C +0C +00 +0C +12 +11 +8F +41 +3E +ENDCHAR +STARTCHAR uni010D0A +ENCODING 68874 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 1 +BITMAP +0E +11 +01 +81 +42 +3C +ENDCHAR +STARTCHAR uni010D0B +ENCODING 68875 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +20 +20 +20 +2C +32 +39 +A5 +B9 +7E +ENDCHAR +STARTCHAR uni010D0C +ENCODING 68876 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +02 +05 +05 +06 +1C +04 +84 +44 +38 +ENDCHAR +STARTCHAR uni010D0D +ENCODING 68877 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +04 +0A +0A +0C +38 +0A +8D +49 +36 +ENDCHAR +STARTCHAR uni010D0E +ENCODING 68878 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +08 +14 +14 +14 +14 +14 +95 +89 +76 +ENDCHAR +STARTCHAR uni010D0F +ENCODING 68879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 1 +BITMAP +1C +22 +21 +19 +81 +42 +3C +ENDCHAR +STARTCHAR uni010D10 +ENCODING 68880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +18 +24 +22 +19 +01 +01 +89 +49 +36 +ENDCHAR +STARTCHAR uni010D11 +ENCODING 68881 +BBX 16 9 0 1 +BITMAP +0200 +0500 +0500 +050E +0531 +0541 +8581 +4602 +3DFC +ENDCHAR +STARTCHAR uni010D12 +ENCODING 68882 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +06 +09 +11 +26 +20 +20 +A1 +62 +1C +ENDCHAR +STARTCHAR uni010D13 +ENCODING 68883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +01 +01 +01 +01 +01 +01 +81 +42 +3C +ENDCHAR +STARTCHAR uni010D14 +ENCODING 68884 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +30 +48 +70 +C0 +40 +42 +45 +49 +36 +ENDCHAR +STARTCHAR uni010D15 +ENCODING 68885 +BBX 16 9 0 1 +BITMAP +007C +0082 +0101 +0101 +01E1 +0111 +8111 +4291 +3C60 +ENDCHAR +STARTCHAR uni010D16 +ENCODING 68886 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +0C +12 +0E +02 +04 +0E +81 +41 +3E +ENDCHAR +STARTCHAR uni010D17 +ENCODING 68887 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +03 +0D +15 +15 +09 +01 +81 +42 +3C +ENDCHAR +STARTCHAR uni010D18 +ENCODING 68888 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +0C +12 +0F +02 +02 +02 +82 +42 +3C +ENDCHAR +STARTCHAR uni010D19 +ENCODING 68889 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 -2 +BITMAP +02 +02 +84 +44 +38 +00 +0C +0C +ENDCHAR +STARTCHAR uni010D1A +ENCODING 68890 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +02 +02 +02 +02 +03 +06 +8A +52 +2C +ENDCHAR +STARTCHAR uni010D1B +ENCODING 68891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +04 +04 +06 +05 +05 +04 +84 +44 +38 +ENDCHAR +STARTCHAR uni010D1C +ENCODING 68892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +04 +11 +00 +0C +12 +11 +8F +41 +3E +ENDCHAR +STARTCHAR uni010D1D +ENCODING 68893 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 1 +BITMAP +06 +09 +11 +E2 +7C +ENDCHAR +STARTCHAR uni010D1E +ENCODING 68894 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 -2 +BITMAP +02 +02 +84 +44 +38 +00 +02 +0C +ENDCHAR +STARTCHAR uni010D1F +ENCODING 68895 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 1 +BITMAP +11 +11 +91 +6E +ENDCHAR +STARTCHAR uni010D20 +ENCODING 68896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 -2 +BITMAP +02 +02 +84 +44 +38 +00 +08 +06 +ENDCHAR +STARTCHAR uni010D21 +ENCODING 68897 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 1 +BITMAP +06 +09 +09 +0E +89 +49 +3E +ENDCHAR +STARTCHAR uni010D22 +ENCODING 68898 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 1 +BITMAP +02 +02 +84 +44 +38 +ENDCHAR +STARTCHAR uni010D23 +ENCODING 68899 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 1 +BITMAP +06 +06 +00 +00 +02 +02 +84 +44 +38 +ENDCHAR +STARTCHAR uni010D24 +ENCODING 68900 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 10 +BITMAP +90 +90 +E0 +80 +ENDCHAR +STARTCHAR uni010D25 +ENCODING 68901 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 4 -5 10 +BITMAP +40 +80 +40 +80 +ENDCHAR +STARTCHAR uni010D26 +ENCODING 68902 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -7 10 +BITMAP +40 +A8 +10 +ENDCHAR +STARTCHAR uni010D27 +ENCODING 68903 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -6 10 +BITMAP +A8 +A8 +50 +ENDCHAR +STARTCHAR uni010D30 +ENCODING 68912 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 1 +BITMAP +70 +88 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni010D31 +ENCODING 68913 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 9 3 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010D32 +ENCODING 68914 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 1 +BITMAP +70 +88 +88 +A8 +48 +08 +10 +10 +10 +ENDCHAR +STARTCHAR uni010D33 +ENCODING 68915 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +FC +60 +10 +08 +04 +64 +84 +84 +78 +ENDCHAR +STARTCHAR uni010D34 +ENCODING 68916 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +64 +94 +94 +94 +8C +8C +AC +A4 +44 +ENDCHAR +STARTCHAR uni010D35 +ENCODING 68917 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 1 +BITMAP +24 +42 +82 +84 +88 +48 +28 +18 +06 +ENDCHAR +STARTCHAR uni010D36 +ENCODING 68918 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +78 +04 +04 +04 +34 +44 +84 +84 +78 +ENDCHAR +STARTCHAR uni010D37 +ENCODING 68919 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 1 +BITMAP +FC +04 +08 +08 +10 +50 +A0 +B2 +4C +ENDCHAR +STARTCHAR uni010D38 +ENCODING 68920 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +98 +A4 +A4 +A4 +C4 +C4 +D4 +94 +88 +ENDCHAR +STARTCHAR uni010D39 +ENCODING 68921 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +60 +90 +90 +70 +10 +10 +14 +18 +10 +ENDCHAR +STARTCHAR uni010E60 +ENCODING 69216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +10 +10 +08 +08 +08 +08 +68 +90 +90 +60 +ENDCHAR +STARTCHAR uni010E61 +ENCODING 69217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +0C +30 +20 +20 +10 +10 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni010E62 +ENCODING 69218 +BBX 12 6 2 2 +BITMAP +0020 +0010 +0390 +E460 +9C00 +4300 +ENDCHAR +STARTCHAR uni010E63 +ENCODING 69219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +18 +24 +24 +48 +40 +80 +80 +ENDCHAR +STARTCHAR uni010E64 +ENCODING 69220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +FC +10 +10 +20 +20 +40 +40 +ENDCHAR +STARTCHAR uni010E65 +ENCODING 69221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +10 +10 +20 +20 +40 +40 +80 +E0 +E0 +ENDCHAR +STARTCHAR uni010E66 +ENCODING 69222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 0 +BITMAP +60 +90 +90 +20 +20 +40 +40 +ENDCHAR +STARTCHAR uni010E67 +ENCODING 69223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +10 +10 +10 +20 +30 +08 +08 +70 +80 +80 +ENDCHAR +STARTCHAR uni010E68 +ENCODING 69224 +BBX 12 10 2 0 +BITMAP +0070 +0380 +0400 +0400 +6400 +9200 +2200 +4200 +4200 +3C00 +ENDCHAR +STARTCHAR uni010E69 +ENCODING 69225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +10 +20 +40 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni010E6A +ENCODING 69226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 6 +BITMAP +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni010E6B +ENCODING 69227 +BBX 12 10 1 0 +BITMAP +0010 +0010 +0010 +0010 +0010 +0010 +0010 +6010 +9C20 +83C0 +ENDCHAR +STARTCHAR uni010E6C +ENCODING 69228 +BBX 10 11 3 -1 +BITMAP +2240 +3240 +4D80 +8000 +F800 +1000 +2000 +4000 +4000 +2100 +1E00 +ENDCHAR +STARTCHAR uni010E6D +ENCODING 69229 +BBX 13 10 1 0 +BITMAP +0E00 +1108 +1110 +10A0 +10C0 +0880 +0800 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni010E6E +ENCODING 69230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +70 +88 +F0 +80 +70 +20 +40 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni010E6F +ENCODING 69231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 0 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni010E70 +ENCODING 69232 +BBX 11 10 2 0 +BITMAP +0180 +0600 +1800 +2000 +4000 +4000 +8040 +8220 +8520 +78C0 +ENDCHAR +STARTCHAR uni010E71 +ENCODING 69233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +10 +10 +10 +10 +3C +52 +8C +E0 +20 +40 +42 +3C +ENDCHAR +STARTCHAR uni010E72 +ENCODING 69234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +30 +48 +88 +88 +90 +E0 +80 +80 +40 +30 +ENDCHAR +STARTCHAR uni010E73 +ENCODING 69235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +80 +80 +80 +F8 +06 +10 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni010E74 +ENCODING 69236 +BBX 8 10 3 0 +BITMAP +01 +06 +18 +20 +48 +50 +90 +8E +80 +7E +ENDCHAR +STARTCHAR uni010E75 +ENCODING 69237 +BBX 10 10 2 0 +BITMAP +4040 +A040 +1040 +0840 +0440 +0280 +0100 +0680 +1840 +3FC0 +ENDCHAR +STARTCHAR uni010E76 +ENCODING 69238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +60 +98 +96 +71 +19 +16 +10 +10 +10 +0C +ENDCHAR +STARTCHAR uni010E77 +ENCODING 69239 +BBX 12 10 2 0 +BITMAP +4200 +8200 +8470 +4590 +3E20 +0820 +1040 +1040 +2080 +2080 +ENDCHAR +STARTCHAR uni010E78 +ENCODING 69240 +BBX 13 6 1 2 +BITMAP +2000 +4400 +8800 +FFF0 +1000 +1FF8 +ENDCHAR +STARTCHAR uni010E79 +ENCODING 69241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +92 +92 +6C +00 +08 +08 +08 +10 +60 +ENDCHAR +STARTCHAR uni010E7A +ENCODING 69242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 1 +BITMAP +92 +92 +92 +6C +00 +10 +20 +4E +70 +ENDCHAR +STARTCHAR uni010E7B +ENCODING 69243 +BBX 10 10 3 0 +BITMAP +2800 +00C0 +2300 +0C00 +0800 +0400 +0200 +0200 +8400 +7800 +ENDCHAR +STARTCHAR uni010E7C +ENCODING 69244 +BBX 12 10 1 0 +BITMAP +0040 +0080 +0100 +0200 +0460 +0890 +1110 +2220 +4400 +8800 +ENDCHAR +STARTCHAR uni010E7D +ENCODING 69245 +BBX 12 9 2 0 +BITMAP +0180 +0600 +1800 +6020 +0010 +0390 +E460 +9C00 +4300 +ENDCHAR +STARTCHAR uni010E7E +ENCODING 69246 +BBX 12 11 2 0 +BITMAP +0180 +0600 +1800 +6180 +0600 +1820 +6010 +0390 +E460 +9C00 +4300 +ENDCHAR +STARTCHAR uni010F00 +ENCODING 69376 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 3 2 +BITMAP +10 +A0 +40 +20 +F0 +ENDCHAR +STARTCHAR uni010F01 +ENCODING 69377 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +04 +28 +10 +08 +FC +ENDCHAR +STARTCHAR uni010F02 +ENCODING 69378 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 3 2 +BITMAP +90 +90 +70 +10 +10 +E0 +ENDCHAR +STARTCHAR uni010F03 +ENCODING 69379 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 2 +BITMAP +12 +12 +0E +02 +02 +FC +ENDCHAR +STARTCHAR uni010F04 +ENCODING 69380 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +02 +C4 +A4 +94 +8C +ENDCHAR +STARTCHAR uni010F05 +ENCODING 69381 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 2 +BITMAP +62 +96 +1A +62 +ENDCHAR +STARTCHAR uni010F06 +ENCODING 69382 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 2 +BITMAP +08 +E4 +82 +FE +ENDCHAR +STARTCHAR uni010F07 +ENCODING 69383 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 2 +BITMAP +30 +48 +88 +30 +C0 +ENDCHAR +STARTCHAR uni010F08 +ENCODING 69384 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 6 4 2 +BITMAP +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010F09 +ENCODING 69385 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 2 +BITMAP +62 +52 +4A +46 +80 +ENDCHAR +STARTCHAR uni010F0A +ENCODING 69386 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 1 +BITMAP +20 +40 +80 +E0 +10 +10 +60 +ENDCHAR +STARTCHAR uni010F0B +ENCODING 69387 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -1 +BITMAP +24 +14 +0C +04 +08 +08 +10 +90 +60 +ENDCHAR +STARTCHAR uni010F0C +ENCODING 69388 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +20 +20 +10 +10 +08 +08 +04 +04 +F8 +ENDCHAR +STARTCHAR uni010F0D +ENCODING 69389 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +90 +50 +20 +3C +44 +88 +ENDCHAR +STARTCHAR uni010F0E +ENCODING 69390 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 3 2 +BITMAP +20 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni010F0F +ENCODING 69391 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 2 +BITMAP +02 +02 +02 +02 +FC +ENDCHAR +STARTCHAR uni010F10 +ENCODING 69392 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 8 4 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010F11 +ENCODING 69393 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +88 +54 +64 +44 +44 +88 +ENDCHAR +STARTCHAR uni010F12 +ENCODING 69394 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 2 +BITMAP +71 +4E +20 +10 +10 +E0 +ENDCHAR +STARTCHAR uni010F13 +ENCODING 69395 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 2 +BITMAP +22 +55 +91 +49 +29 +C6 +ENDCHAR +STARTCHAR uni010F14 +ENCODING 69396 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +18 +24 +24 +14 +18 +E0 +ENDCHAR +STARTCHAR uni010F15 +ENCODING 69397 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +E4 +98 +40 +20 +E0 +ENDCHAR +STARTCHAR uni010F16 +ENCODING 69398 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +38 +26 +10 +08 +F8 +ENDCHAR +STARTCHAR uni010F17 +ENCODING 69399 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +C4 +B8 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni010F18 +ENCODING 69400 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 3 2 +BITMAP +90 +50 +30 +10 +20 +C0 +ENDCHAR +STARTCHAR uni010F19 +ENCODING 69401 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +59 +69 +4A +4E +80 +ENDCHAR +STARTCHAR uni010F1A +ENCODING 69402 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 2 +BITMAP +40 +3E +22 +22 +42 +8C +ENDCHAR +STARTCHAR uni010F1B +ENCODING 69403 +BBX 14 6 2 2 +BITMAP +0080 +007C +0044 +0044 +0084 +FF18 +ENDCHAR +STARTCHAR uni010F1C +ENCODING 69404 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +80 +7C +44 +44 +44 +58 +40 +40 +40 +ENDCHAR +STARTCHAR uni010F1D +ENCODING 69405 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 2 +BITMAP +10 +10 +10 +10 +90 +60 +ENDCHAR +STARTCHAR uni010F1E +ENCODING 69406 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +24 +24 +24 +24 +24 +D8 +ENDCHAR +STARTCHAR uni010F1F +ENCODING 69407 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 2 +BITMAP +49 +49 +49 +49 +49 +B6 +ENDCHAR +STARTCHAR uni010F20 +ENCODING 69408 +BBX 14 5 1 3 +BITMAP +4444 +4444 +4444 +4444 +BBB8 +ENDCHAR +STARTCHAR uni010F21 +ENCODING 69409 +BBX 14 5 1 3 +BITMAP +4924 +4924 +4924 +4924 +B6D8 +ENDCHAR +STARTCHAR uni010F22 +ENCODING 69410 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 3 2 +BITMAP +80 +40 +20 +10 +10 +E0 +ENDCHAR +STARTCHAR uni010F23 +ENCODING 69411 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 2 +BITMAP +C0 +20 +10 +E0 +10 +08 +F0 +ENDCHAR +STARTCHAR uni010F24 +ENCODING 69412 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 2 +BITMAP +E0 +10 +08 +F0 +08 +F0 +08 +F0 +ENDCHAR +STARTCHAR uni010F25 +ENCODING 69413 +BBX 13 9 1 -2 +BITMAP +0040 +0480 +0680 +7588 +8C88 +8208 +8188 +4070 +2000 +ENDCHAR +STARTCHAR uni010F26 +ENCODING 69414 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +0C +12 +12 +24 +28 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni010F27 +ENCODING 69415 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +E2 +55 +51 +51 +4E +ENDCHAR +STARTCHAR uni010F30 +ENCODING 69424 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 2 +BITMAP +12 +14 +08 +04 +FE +ENDCHAR +STARTCHAR uni010F31 +ENCODING 69425 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 2 +BITMAP +12 +12 +0E +02 +02 +FC +ENDCHAR +STARTCHAR uni010F32 +ENCODING 69426 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 2 +BITMAP +21 +51 +49 +86 +ENDCHAR +STARTCHAR uni010F33 +ENCODING 69427 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +3E +40 +80 +80 +7F +ENDCHAR +STARTCHAR uni010F34 +ENCODING 69428 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 1 1 +BITMAP +60 +90 +90 +70 +10 +20 +40 +ENDCHAR +STARTCHAR uni010F35 +ENCODING 69429 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 2 +BITMAP +40 +60 +F0 +ENDCHAR +STARTCHAR uni010F36 +ENCODING 69430 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 1 +BITMAP +80 +80 +80 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni010F37 +ENCODING 69431 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 2 +BITMAP +10 +20 +50 +08 +08 +F0 +ENDCHAR +STARTCHAR uni010F38 +ENCODING 69432 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 1 +BITMAP +80 +80 +92 +8A +86 +82 +44 +44 +38 +ENDCHAR +STARTCHAR uni010F39 +ENCODING 69433 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 2 +BITMAP +40 +20 +10 +08 +04 +02 +02 +FC +ENDCHAR +STARTCHAR uni010F3A +ENCODING 69434 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 2 +BITMAP +10 +10 +0E +38 +C8 +04 +44 +44 +38 +ENDCHAR +STARTCHAR uni010F3B +ENCODING 69435 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +80 +80 +80 +80 +80 +90 +88 +84 +7C +ENDCHAR +STARTCHAR uni010F3C +ENCODING 69436 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +22 +32 +4E +42 +82 +02 +3C +ENDCHAR +STARTCHAR uni010F3D +ENCODING 69437 +BBX 16 10 0 1 +BITMAP +1F80 +2040 +4F20 +9096 +A651 +A549 +9146 +4E40 +2080 +1F00 +ENDCHAR +STARTCHAR uni010F3E +ENCODING 69438 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +80 +80 +86 +89 +89 +85 +82 +44 +38 +ENDCHAR +STARTCHAR uni010F3F +ENCODING 69439 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +80 +80 +80 +80 +80 +87 +88 +88 +7F +ENDCHAR +STARTCHAR uni010F40 +ENCODING 69440 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 2 +BITMAP +12 +0A +04 +08 +30 +C0 +ENDCHAR +STARTCHAR uni010F41 +ENCODING 69441 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 2 +BITMAP +01 +32 +4C +48 +90 +ENDCHAR +STARTCHAR uni010F42 +ENCODING 69442 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 2 +BITMAP +80 +80 +80 +90 +96 +99 +91 +6E +ENDCHAR +STARTCHAR uni010F43 +ENCODING 69443 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 2 +BITMAP +2A +2A +16 +02 +02 +FC +ENDCHAR +STARTCHAR uni010F44 +ENCODING 69444 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +48 +28 +10 +20 +40 +E0 +18 +ENDCHAR +STARTCHAR uni010F45 +ENCODING 69445 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +80 +80 +80 +80 +81 +9A +A4 +A4 +48 +ENDCHAR +STARTCHAR uni010F46 +ENCODING 69446 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -5 -1 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni010F47 +ENCODING 69447 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -6 -1 +BITMAP +D8 +D8 +ENDCHAR +STARTCHAR uni010F48 +ENCODING 69448 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -4 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni010F49 +ENCODING 69449 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -6 11 +BITMAP +D8 +D8 +ENDCHAR +STARTCHAR uni010F4A +ENCODING 69450 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -6 11 +BITMAP +70 +88 +ENDCHAR +STARTCHAR uni010F4B +ENCODING 69451 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -6 -1 +BITMAP +88 +70 +ENDCHAR +STARTCHAR uni010F4C +ENCODING 69452 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -6 11 +BITMAP +38 +C8 +ENDCHAR +STARTCHAR uni010F4D +ENCODING 69453 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -6 -2 +BITMAP +98 +E0 +ENDCHAR +STARTCHAR uni010F4E +ENCODING 69454 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 -2 +BITMAP +20 +40 +FC +ENDCHAR +STARTCHAR uni010F4F +ENCODING 69455 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -5 -2 +BITMAP +90 +A0 +40 +80 +ENDCHAR +STARTCHAR uni010F50 +ENCODING 69456 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -5 -2 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni010F51 +ENCODING 69457 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 0 2 +BITMAP +10 +10 +10 +10 +E0 +ENDCHAR +STARTCHAR uni010F52 +ENCODING 69458 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 2 +BITMAP +60 +18 +04 +02 +02 +FC +ENDCHAR +STARTCHAR uni010F53 +ENCODING 69459 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 2 +BITMAP +18 +24 +24 +18 +04 +02 +FC +ENDCHAR +STARTCHAR uni010F54 +ENCODING 69460 +BBX 15 10 0 -2 +BITMAP +1924 +6526 +8524 +8924 +8924 +96DA +8000 +8000 +8000 +6000 +ENDCHAR +STARTCHAR uni010F55 +ENCODING 69461 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 2 +BITMAP +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni010F56 +ENCODING 69462 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 -1 +BITMAP +60 +60 +00 +90 +90 +90 +90 +90 +00 +60 +60 +ENDCHAR +STARTCHAR uni010F57 +ENCODING 69463 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 2 +BITMAP +78 +84 +B4 +B4 +B4 +84 +78 +ENDCHAR +STARTCHAR uni010F58 +ENCODING 69464 +BBX 11 7 3 2 +BITMAP +7BC0 +8420 +B5A0 +B5A0 +B5A0 +8420 +7BC0 +ENDCHAR +STARTCHAR uni010F59 +ENCODING 69465 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 2 +BITMAP +78 +80 +B0 +B0 +B0 +80 +78 +ENDCHAR +STARTCHAR uni011000 +ENCODING 69632 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 7 -3 3 +BITMAP +C0 +C0 +00 +00 +00 +80 +40 +ENDCHAR +STARTCHAR uni011001 +ENCODING 69633 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 10 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011002 +ENCODING 69634 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 7 -3 2 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni011003 +ENCODING 69635 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0FE1 +8440 +0281 +8100 +0281 +8440 +0FE1 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni011004 +ENCODING 69636 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +83C0 +0421 +8A50 +0991 +8990 +0A51 +8420 +03C1 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni011005 +ENCODING 69637 +BBX 7 8 3 1 +BITMAP +82 +82 +42 +3E +42 +82 +82 +82 +ENDCHAR +STARTCHAR uni011006 +ENCODING 69638 +BBX 9 8 3 1 +BITMAP +8200 +8200 +4200 +3F80 +4200 +8200 +8200 +8200 +ENDCHAR +STARTCHAR uni011007 +ENCODING 69639 +BBX 8 7 4 2 +BITMAP +18 +18 +00 +00 +00 +C3 +C3 +ENDCHAR +STARTCHAR uni011008 +ENCODING 69640 +BBX 10 8 3 2 +BITMAP +0C00 +0C00 +0C00 +CCC0 +CCC0 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni011009 +ENCODING 69641 +BBX 5 8 4 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +F8 +ENDCHAR +STARTCHAR uni01100A +ENCODING 69642 +BBX 5 8 4 1 +BITMAP +80 +80 +80 +80 +F8 +80 +80 +F8 +ENDCHAR +STARTCHAR uni01100B +ENCODING 69643 +BBX 7 7 3 1 +BITMAP +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni01100C +ENCODING 69644 +BBX 9 7 3 1 +BITMAP +8200 +4400 +2800 +1000 +2800 +4480 +8300 +ENDCHAR +STARTCHAR uni01100D +ENCODING 69645 +BBX 7 9 3 0 +BITMAP +70 +88 +08 +10 +10 +10 +20 +22 +1C +ENDCHAR +STARTCHAR uni01100E +ENCODING 69646 +BBX 7 9 3 0 +BITMAP +70 +88 +08 +10 +18 +14 +20 +22 +1C +ENDCHAR +STARTCHAR uni01100F +ENCODING 69647 +BBX 7 7 3 2 +BITMAP +10 +28 +28 +44 +44 +82 +FE +ENDCHAR +STARTCHAR uni011010 +ENCODING 69648 +BBX 7 8 3 2 +BITMAP +F0 +10 +28 +28 +44 +44 +82 +FE +ENDCHAR +STARTCHAR uni011011 +ENCODING 69649 +BBX 9 9 2 1 +BITMAP +F800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0F80 +ENDCHAR +STARTCHAR uni011012 +ENCODING 69650 +BBX 9 9 2 1 +BITMAP +F800 +0800 +0800 +0800 +0800 +0F80 +0800 +0800 +0F80 +ENDCHAR +STARTCHAR uni011013 +ENCODING 69651 +BBX 9 9 2 1 +BITMAP +0800 +0800 +0800 +0800 +FF80 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni011014 +ENCODING 69652 +BBX 7 9 3 1 +BITMAP +38 +44 +82 +82 +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni011015 +ENCODING 69653 +BBX 7 8 3 1 +BITMAP +10 +28 +28 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni011016 +ENCODING 69654 +BBX 7 9 3 1 +BITMAP +80 +80 +80 +80 +80 +92 +92 +54 +38 +ENDCHAR +STARTCHAR uni011017 +ENCODING 69655 +BBX 7 7 3 1 +BITMAP +FE +80 +80 +80 +80 +80 +FE +ENDCHAR +STARTCHAR uni011018 +ENCODING 69656 +BBX 6 9 3 1 +BITMAP +04 +04 +04 +04 +44 +84 +84 +44 +3C +ENDCHAR +STARTCHAR uni011019 +ENCODING 69657 +BBX 9 9 2 1 +BITMAP +0800 +0800 +0800 +3E00 +4900 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uni01101A +ENCODING 69658 +BBX 6 9 4 1 +BITMAP +FC +80 +80 +80 +FC +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni01101B +ENCODING 69659 +BBX 6 8 4 1 +BITMAP +84 +84 +C4 +B8 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01101C +ENCODING 69660 +BBX 7 8 4 1 +BITMAP +F0 +10 +10 +1C +12 +12 +12 +10 +ENDCHAR +STARTCHAR uni01101D +ENCODING 69661 +BBX 5 8 4 1 +BITMAP +38 +40 +80 +80 +80 +80 +40 +38 +ENDCHAR +STARTCHAR uni01101E +ENCODING 69662 +BBX 8 8 3 1 +BITMAP +3C +42 +81 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni01101F +ENCODING 69663 +BBX 5 9 4 1 +BITMAP +08 +08 +08 +08 +F8 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011020 +ENCODING 69664 +BBX 8 9 3 1 +BITMAP +08 +08 +08 +38 +40 +86 +89 +49 +3E +ENDCHAR +STARTCHAR uni011021 +ENCODING 69665 +BBX 7 9 3 1 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni011022 +ENCODING 69666 +BBX 7 7 3 1 +BITMAP +02 +04 +08 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni011023 +ENCODING 69667 +BBX 8 8 3 1 +BITMAP +3C +42 +81 +99 +99 +81 +42 +3C +ENDCHAR +STARTCHAR uni011024 +ENCODING 69668 +BBX 4 9 5 1 +BITMAP +80 +80 +E0 +10 +10 +10 +E0 +80 +80 +ENDCHAR +STARTCHAR uni011025 +ENCODING 69669 +BBX 6 8 4 1 +BITMAP +F0 +88 +84 +84 +84 +84 +88 +F0 +ENDCHAR +STARTCHAR uni011026 +ENCODING 69670 +BBX 7 9 3 1 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni011027 +ENCODING 69671 +BBX 7 9 3 1 +BITMAP +80 +80 +80 +80 +80 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni011028 +ENCODING 69672 +BBX 8 9 3 1 +BITMAP +80 +80 +80 +80 +86 +89 +89 +42 +3C +ENDCHAR +STARTCHAR uni011029 +ENCODING 69673 +BBX 7 7 3 1 +BITMAP +FE +82 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni01102A +ENCODING 69674 +BBX 8 9 3 1 +BITMAP +01 +01 +FF +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01102B +ENCODING 69675 +BBX 7 9 3 1 +BITMAP +82 +82 +44 +38 +44 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01102C +ENCODING 69676 +BBX 7 9 3 1 +BITMAP +10 +10 +10 +10 +10 +92 +92 +54 +38 +ENDCHAR +STARTCHAR uni01102D +ENCODING 69677 +BBX 3 9 6 1 +BITMAP +60 +40 +40 +40 +80 +40 +40 +40 +C0 +ENDCHAR +STARTCHAR uni01102E +ENCODING 69678 +BBX 7 9 3 1 +BITMAP +02 +02 +02 +02 +F2 +22 +42 +44 +38 +ENDCHAR +STARTCHAR uni01102F +ENCODING 69679 +BBX 5 9 4 1 +BITMAP +20 +20 +20 +20 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni011030 +ENCODING 69680 +BBX 7 9 3 1 +BITMAP +38 +54 +92 +92 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni011031 +ENCODING 69681 +BBX 7 9 3 1 +BITMAP +80 +80 +80 +90 +A0 +C2 +82 +44 +38 +ENDCHAR +STARTCHAR uni011032 +ENCODING 69682 +BBX 11 9 1 1 +BITMAP +0400 +0400 +0400 +0400 +3400 +4C20 +8420 +8440 +8380 +ENDCHAR +STARTCHAR uni011033 +ENCODING 69683 +BBX 7 9 3 1 +BITMAP +80 +80 +80 +80 +9E +88 +84 +44 +38 +ENDCHAR +STARTCHAR uni011034 +ENCODING 69684 +BBX 6 9 3 1 +BITMAP +04 +04 +04 +7C +40 +40 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni011035 +ENCODING 69685 +BBX 7 9 3 1 +BITMAP +1C +2A +2A +2A +1C +08 +F8 +80 +80 +ENDCHAR +STARTCHAR uni011036 +ENCODING 69686 +BBX 6 9 3 1 +BITMAP +1C +20 +20 +1C +04 +34 +4C +84 +84 +ENDCHAR +STARTCHAR uni011037 +ENCODING 69687 +BBX 7 9 3 1 +BITMAP +1C +12 +12 +12 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni011038 +ENCODING 69688 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -8 10 +BITMAP +F0 +ENDCHAR +STARTCHAR uni011039 +ENCODING 69689 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -8 9 +BITMAP +F0 +10 +10 +ENDCHAR +STARTCHAR uni01103A +ENCODING 69690 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -8 9 +BITMAP +10 +10 +F0 +ENDCHAR +STARTCHAR uni01103B +ENCODING 69691 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -8 9 +BITMAP +50 +50 +F0 +ENDCHAR +STARTCHAR uni01103C +ENCODING 69692 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -8 -1 +BITMAP +F0 +ENDCHAR +STARTCHAR uni01103D +ENCODING 69693 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -8 -2 +BITMAP +F0 +00 +F0 +ENDCHAR +STARTCHAR uni01103E +ENCODING 69694 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -12 -1 +BITMAP +F0 +ENDCHAR +STARTCHAR uni01103F +ENCODING 69695 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -12 -2 +BITMAP +F0 +00 +F0 +ENDCHAR +STARTCHAR uni011040 +ENCODING 69696 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 2 -12 -2 +BITMAP +71 +8E +ENDCHAR +STARTCHAR uni011041 +ENCODING 69697 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -12 -2 +BITMAP +08 +71 +8E +ENDCHAR +STARTCHAR uni011042 +ENCODING 69698 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -12 10 +BITMAP +F0 +ENDCHAR +STARTCHAR uni011043 +ENCODING 69699 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -12 10 +BITMAP +F0 +00 +F0 +ENDCHAR +STARTCHAR uni011044 +ENCODING 69700 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 1 -13 10 +BITMAP +F3C0 +ENDCHAR +STARTCHAR uni011045 +ENCODING 69701 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 3 -13 10 +BITMAP +F3C0 +0000 +F000 +ENDCHAR +STARTCHAR uni011046 +ENCODING 69702 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 1 -10 10 +BITMAP +FE +ENDCHAR +STARTCHAR uni011047 +ENCODING 69703 +BBX 1 9 8 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011048 +ENCODING 69704 +BBX 4 9 6 1 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni011049 +ENCODING 69705 +BBX 3 1 6 7 +BITMAP +E0 +ENDCHAR +STARTCHAR uni01104A +ENCODING 69706 +BBX 3 3 6 6 +BITMAP +E0 +00 +E0 +ENDCHAR +STARTCHAR uni01104B +ENCODING 69707 +BBX 8 1 3 5 +BITMAP +FF +ENDCHAR +STARTCHAR uni01104C +ENCODING 69708 +BBX 9 9 3 1 +BITMAP +3800 +4400 +0200 +0200 +FF80 +0200 +0200 +4400 +3800 +ENDCHAR +STARTCHAR uni01104D +ENCODING 69709 +BBX 13 11 1 0 +BITMAP +0700 +38E0 +4890 +6530 +9748 +8888 +9748 +6530 +4890 +38E0 +0700 +ENDCHAR +STARTCHAR uni011052 +ENCODING 69714 +BBX 8 1 4 5 +BITMAP +FF +ENDCHAR +STARTCHAR uni011053 +ENCODING 69715 +BBX 8 4 4 4 +BITMAP +FF +00 +00 +FF +ENDCHAR +STARTCHAR uni011054 +ENCODING 69716 +BBX 8 7 4 2 +BITMAP +FF +00 +00 +FF +00 +00 +FF +ENDCHAR +STARTCHAR uni011055 +ENCODING 69717 +BBX 5 5 4 3 +BITMAP +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni011056 +ENCODING 69718 +BBX 5 8 5 1 +BITMAP +80 +80 +80 +F0 +88 +88 +88 +80 +ENDCHAR +STARTCHAR uni011057 +ENCODING 69719 +BBX 7 9 4 1 +BITMAP +3C +42 +80 +BC +42 +BC +80 +42 +3C +ENDCHAR +STARTCHAR uni011058 +ENCODING 69720 +BBX 6 9 4 1 +BITMAP +70 +88 +84 +44 +04 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni011059 +ENCODING 69721 +BBX 6 9 4 1 +BITMAP +80 +80 +78 +04 +04 +08 +08 +10 +20 +ENDCHAR +STARTCHAR uni01105A +ENCODING 69722 +BBX 4 9 6 1 +BITMAP +E0 +10 +10 +10 +E0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01105B +ENCODING 69723 +BBX 9 7 3 2 +BITMAP +3180 +4A00 +8400 +8400 +8400 +4A00 +3180 +ENDCHAR +STARTCHAR uni01105C +ENCODING 69724 +BBX 7 9 4 1 +BITMAP +38 +44 +82 +82 +FE +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01105D +ENCODING 69725 +BBX 10 6 3 1 +BITMAP +07C0 +0100 +7080 +8880 +8880 +8700 +ENDCHAR +STARTCHAR uni01105E +ENCODING 69726 +BBX 10 9 3 0 +BITMAP +4200 +4200 +4600 +3A00 +0200 +0200 +1E00 +6180 +8040 +ENDCHAR +STARTCHAR uni01105F +ENCODING 69727 +BBX 7 9 4 1 +BITMAP +3C +42 +84 +98 +80 +98 +84 +42 +3C +ENDCHAR +STARTCHAR uni011060 +ENCODING 69728 +BBX 6 10 5 0 +BITMAP +04 +04 +04 +04 +FC +04 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni011061 +ENCODING 69729 +BBX 8 8 3 1 +BITMAP +41 +22 +14 +08 +10 +20 +51 +8E +ENDCHAR +STARTCHAR uni011062 +ENCODING 69730 +BBX 9 5 3 3 +BITMAP +7F00 +8880 +8880 +8880 +7F00 +ENDCHAR +STARTCHAR uni011063 +ENCODING 69731 +BBX 7 9 4 1 +BITMAP +38 +54 +92 +92 +FE +92 +92 +54 +38 +ENDCHAR +STARTCHAR uni011064 +ENCODING 69732 +BBX 7 9 3 1 +BITMAP +20 +12 +12 +22 +3E +42 +82 +82 +42 +ENDCHAR +STARTCHAR uni011065 +ENCODING 69733 +BBX 6 10 4 1 +BITMAP +0C +14 +24 +44 +84 +FC +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni011066 +ENCODING 69734 +BBX 3 3 6 4 +BITMAP +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni011067 +ENCODING 69735 +BBX 10 9 3 1 +BITMAP +8000 +8000 +4000 +3000 +0C00 +0300 +0080 +0040 +0040 +ENDCHAR +STARTCHAR uni011068 +ENCODING 69736 +BBX 8 9 4 1 +BITMAP +30 +48 +84 +04 +04 +08 +10 +0C +03 +ENDCHAR +STARTCHAR uni011069 +ENCODING 69737 +BBX 7 10 5 1 +BITMAP +70 +88 +08 +70 +88 +08 +10 +20 +18 +06 +ENDCHAR +STARTCHAR uni01106A +ENCODING 69738 +BBX 10 9 3 1 +BITMAP +8000 +8000 +4000 +3000 +0C00 +1300 +1280 +0C40 +0040 +ENDCHAR +STARTCHAR uni01106B +ENCODING 69739 +BBX 7 8 4 1 +BITMAP +48 +88 +98 +64 +04 +04 +02 +02 +ENDCHAR +STARTCHAR uni01106C +ENCODING 69740 +BBX 6 9 4 1 +BITMAP +20 +10 +08 +08 +04 +44 +84 +88 +70 +ENDCHAR +STARTCHAR uni01106D +ENCODING 69741 +BBX 6 9 4 1 +BITMAP +70 +88 +84 +44 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni01106E +ENCODING 69742 +BBX 6 6 4 2 +BITMAP +FC +20 +40 +40 +30 +0C +ENDCHAR +STARTCHAR uni01106F +ENCODING 69743 +BBX 7 7 4 1 +BITMAP +78 +84 +92 +62 +02 +02 +02 +ENDCHAR +STARTCHAR uni01107F +ENCODING 69759 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 -4 5 +BITMAP +FF +ENDCHAR +STARTCHAR uni011080 +ENCODING 69760 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -12 11 +BITMAP +8A +42 +3C +ENDCHAR +STARTCHAR uni011081 +ENCODING 69761 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 12 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011082 +ENCODING 69762 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 6 -2 2 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni011083 +ENCODING 69763 +BBX 9 8 4 2 +BITMAP +1100 +A900 +7100 +2300 +1500 +4900 +3100 +0080 +ENDCHAR +STARTCHAR uni011084 +ENCODING 69764 +BBX 12 8 3 2 +BITMAP +1120 +A920 +7120 +2320 +1520 +4920 +3120 +0090 +ENDCHAR +STARTCHAR uni011085 +ENCODING 69765 +BBX 7 10 5 2 +BITMAP +40 +80 +70 +08 +08 +08 +30 +08 +04 +02 +ENDCHAR +STARTCHAR uni011086 +ENCODING 69766 +BBX 7 11 5 1 +BITMAP +60 +80 +60 +80 +70 +08 +08 +30 +08 +04 +02 +ENDCHAR +STARTCHAR uni011087 +ENCODING 69767 +BBX 7 8 4 2 +BITMAP +1C +02 +82 +82 +4C +42 +22 +1C +ENDCHAR +STARTCHAR uni011088 +ENCODING 69768 +BBX 11 8 2 2 +BITMAP +1C00 +0200 +8200 +8380 +4C40 +4240 +2240 +1C20 +ENDCHAR +STARTCHAR uni011089 +ENCODING 69769 +BBX 6 8 5 2 +BITMAP +84 +84 +84 +F8 +80 +40 +20 +10 +ENDCHAR +STARTCHAR uni01108A +ENCODING 69770 +BBX 6 12 5 2 +BITMAP +F0 +08 +04 +04 +84 +84 +84 +F8 +80 +40 +20 +10 +ENDCHAR +STARTCHAR uni01108B +ENCODING 69771 +BBX 12 12 3 2 +BITMAP +0700 +0080 +0040 +0020 +1120 +A920 +7120 +2320 +1520 +4920 +3120 +0090 +ENDCHAR +STARTCHAR uni01108C +ENCODING 69772 +BBX 12 12 3 2 +BITMAP +07C0 +0020 +07A0 +0060 +1120 +A920 +7120 +2320 +1520 +4920 +3120 +0090 +ENDCHAR +STARTCHAR uni01108D +ENCODING 69773 +BBX 10 8 2 2 +BITMAP +0400 +7400 +8700 +8C80 +7480 +0480 +0480 +0240 +ENDCHAR +STARTCHAR uni01108E +ENCODING 69774 +BBX 8 8 3 2 +BITMAP +92 +92 +92 +92 +6E +02 +02 +01 +ENDCHAR +STARTCHAR uni01108F +ENCODING 69775 +BBX 9 8 3 2 +BITMAP +1100 +1100 +0900 +0900 +0900 +0900 +9100 +6080 +ENDCHAR +STARTCHAR uni011090 +ENCODING 69776 +BBX 8 8 4 2 +BITMAP +72 +82 +82 +82 +62 +86 +8A +71 +ENDCHAR +STARTCHAR uni011091 +ENCODING 69777 +BBX 7 8 4 2 +BITMAP +9C +82 +82 +82 +8C +42 +22 +1C +ENDCHAR +STARTCHAR uni011092 +ENCODING 69778 +BBX 10 8 2 2 +BITMAP +1080 +1080 +1080 +E080 +4180 +2280 +1C80 +0040 +ENDCHAR +STARTCHAR uni011093 +ENCODING 69779 +BBX 10 8 2 2 +BITMAP +7300 +8480 +8480 +8480 +6280 +8100 +8280 +7C40 +ENDCHAR +STARTCHAR uni011094 +ENCODING 69780 +BBX 8 8 3 2 +BITMAP +8C +92 +92 +92 +92 +92 +92 +61 +ENDCHAR +STARTCHAR uni011095 +ENCODING 69781 +BBX 7 11 4 -1 +BITMAP +1C +20 +20 +60 +98 +A0 +A2 +9C +40 +20 +10 +ENDCHAR +STARTCHAR uni011096 +ENCODING 69782 +BBX 8 8 3 2 +BITMAP +C2 +22 +12 +1E +22 +C2 +02 +01 +ENDCHAR +STARTCHAR uni011097 +ENCODING 69783 +BBX 5 8 5 2 +BITMAP +10 +10 +10 +20 +40 +80 +88 +70 +ENDCHAR +STARTCHAR uni011098 +ENCODING 69784 +BBX 5 8 5 2 +BITMAP +18 +20 +20 +10 +50 +88 +88 +70 +ENDCHAR +STARTCHAR uni011099 +ENCODING 69785 +BBX 6 8 4 2 +BITMAP +1C +20 +20 +20 +1C +84 +44 +38 +ENDCHAR +STARTCHAR uni01109A +ENCODING 69786 +BBX 6 11 4 -1 +BITMAP +1C +20 +20 +20 +1C +84 +44 +38 +00 +18 +18 +ENDCHAR +STARTCHAR uni01109B +ENCODING 69787 +BBX 7 8 5 2 +BITMAP +10 +10 +10 +20 +44 +8A +8A +7C +ENDCHAR +STARTCHAR uni01109C +ENCODING 69788 +BBX 7 11 5 -1 +BITMAP +10 +10 +10 +20 +44 +8A +8A +7C +00 +30 +30 +ENDCHAR +STARTCHAR uni01109D +ENCODING 69789 +BBX 8 8 3 2 +BITMAP +92 +92 +92 +FE +92 +92 +92 +49 +ENDCHAR +STARTCHAR uni01109E +ENCODING 69790 +BBX 7 8 4 2 +BITMAP +30 +48 +84 +84 +84 +84 +84 +82 +ENDCHAR +STARTCHAR uni01109F +ENCODING 69791 +BBX 8 8 3 2 +BITMAP +62 +92 +52 +22 +46 +3A +02 +01 +ENDCHAR +STARTCHAR uni0110A0 +ENCODING 69792 +BBX 5 8 5 2 +BITMAP +70 +80 +80 +80 +60 +80 +88 +70 +ENDCHAR +STARTCHAR uni0110A1 +ENCODING 69793 +BBX 7 8 4 2 +BITMAP +44 +24 +64 +84 +8C +74 +04 +02 +ENDCHAR +STARTCHAR uni0110A2 +ENCODING 69794 +BBX 7 8 3 2 +BITMAP +1C +24 +44 +A4 +A4 +44 +04 +02 +ENDCHAR +STARTCHAR uni0110A3 +ENCODING 69795 +BBX 7 8 4 2 +BITMAP +84 +84 +84 +8C +74 +04 +04 +02 +ENDCHAR +STARTCHAR uni0110A4 +ENCODING 69796 +BBX 7 9 3 2 +BITMAP +24 +54 +34 +1C +20 +C4 +4A +22 +1C +ENDCHAR +STARTCHAR uni0110A5 +ENCODING 69797 +BBX 9 8 3 2 +BITMAP +3100 +4900 +8100 +8300 +4500 +3900 +0100 +0080 +ENDCHAR +STARTCHAR uni0110A6 +ENCODING 69798 +BBX 8 8 4 2 +BITMAP +8E +52 +22 +52 +4A +32 +02 +01 +ENDCHAR +STARTCHAR uni0110A7 +ENCODING 69799 +BBX 7 8 5 2 +BITMAP +84 +44 +4C +F4 +C4 +04 +04 +02 +ENDCHAR +STARTCHAR uni0110A8 +ENCODING 69800 +BBX 8 9 4 1 +BITMAP +C2 +22 +42 +82 +46 +3A +02 +31 +30 +ENDCHAR +STARTCHAR uni0110A9 +ENCODING 69801 +BBX 6 8 5 2 +BITMAP +18 +28 +48 +88 +08 +08 +08 +04 +ENDCHAR +STARTCHAR uni0110AA +ENCODING 69802 +BBX 7 8 4 2 +BITMAP +38 +44 +82 +82 +FE +82 +44 +38 +ENDCHAR +STARTCHAR uni0110AB +ENCODING 69803 +BBX 9 9 3 1 +BITMAP +3100 +4900 +8100 +8300 +4500 +3900 +0100 +1880 +1800 +ENDCHAR +STARTCHAR uni0110AC +ENCODING 69804 +BBX 8 9 4 1 +BITMAP +62 +92 +92 +62 +32 +CE +42 +21 +10 +ENDCHAR +STARTCHAR uni0110AD +ENCODING 69805 +BBX 7 8 4 2 +BITMAP +C4 +A4 +94 +8C +74 +04 +04 +02 +ENDCHAR +STARTCHAR uni0110AE +ENCODING 69806 +BBX 10 8 2 2 +BITMAP +F080 +0880 +0F80 +7080 +2080 +1080 +0C80 +0040 +ENDCHAR +STARTCHAR uni0110AF +ENCODING 69807 +BBX 6 10 4 1 +BITMAP +70 +88 +80 +58 +24 +44 +48 +20 +10 +08 +ENDCHAR +STARTCHAR uni0110B0 +ENCODING 69808 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 8 -3 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uni0110B1 +ENCODING 69809 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 12 -16 2 +BITMAP +60 +90 +88 +80 +80 +80 +80 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR uni0110B2 +ENCODING 69810 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 12 -8 2 +BITMAP +70 +88 +88 +04 +04 +04 +04 +04 +04 +04 +04 +02 +ENDCHAR +STARTCHAR uni0110B3 +ENCODING 69811 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -10 -2 +BITMAP +98 +44 +38 +ENDCHAR +STARTCHAR uni0110B4 +ENCODING 69812 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -10 -2 +BITMAP +70 +88 +64 +ENDCHAR +STARTCHAR uni0110B5 +ENCODING 69813 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -12 10 +BITMAP +C0 +20 +10 +ENDCHAR +STARTCHAR uni0110B6 +ENCODING 69814 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -13 10 +BITMAP +E0 +10 +F8 +08 +ENDCHAR +STARTCHAR uni0110B7 +ENCODING 69815 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -7 2 +BITMAP +E0 +10 +08 +08 +08 +08 +08 +08 +08 +08 +08 +04 +ENDCHAR +STARTCHAR uni0110B8 +ENCODING 69816 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 12 -7 2 +BITMAP +F0 +08 +F8 +08 +08 +08 +08 +08 +08 +08 +08 +04 +ENDCHAR +STARTCHAR uni0110B9 +ENCODING 69817 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -9 -2 +BITMAP +E0 +10 +08 +ENDCHAR +STARTCHAR uni0110BA +ENCODING 69818 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -10 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0110BB +ENCODING 69819 +BBX 4 4 4 2 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0110BC +ENCODING 69820 +BBX 11 6 3 2 +BITMAP +3000 +4800 +8400 +E400 +9400 +67E0 +ENDCHAR +STARTCHAR uni0110BD +ENCODING 69821 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0001 +8600 +0901 +9080 +1C81 +9280 +0CFD +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0110BE +ENCODING 69822 +BBX 8 1 4 5 +BITMAP +FF +ENDCHAR +STARTCHAR uni0110BF +ENCODING 69823 +BBX 8 3 4 4 +BITMAP +FF +00 +FF +ENDCHAR +STARTCHAR uni0110C0 +ENCODING 69824 +BBX 3 8 5 2 +BITMAP +80 +40 +40 +40 +40 +40 +40 +20 +ENDCHAR +STARTCHAR uni0110C1 +ENCODING 69825 +BBX 6 8 4 2 +BITMAP +90 +48 +48 +48 +48 +48 +48 +24 +ENDCHAR +STARTCHAR uni0110CD +ENCODING 69837 +BBX 16 16 0 -2 +BITMAP +AAAA +0601 +8900 +1081 +9C80 +1281 +8CFC +0001 +8000 +0001 +8000 +0001 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni0110D0 +ENCODING 69840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +20 +6C +B2 +A6 +AA +AA +24 +20 +20 +20 +ENDCHAR +STARTCHAR uni0110D1 +ENCODING 69841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +A8 +48 +10 +20 +10 +48 +A8 +A8 +70 +ENDCHAR +STARTCHAR uni0110D2 +ENCODING 69842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +84 +04 +3C +24 +14 +14 +0C +04 +ENDCHAR +STARTCHAR uni0110D3 +ENCODING 69843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +60 +90 +80 +80 +90 +60 +20 +40 +80 +E0 +ENDCHAR +STARTCHAR uni0110D4 +ENCODING 69844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +40 +A0 +A0 +60 +38 +24 +2C +34 +34 +28 +ENDCHAR +STARTCHAR uni0110D5 +ENCODING 69845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +30 +48 +88 +10 +20 +10 +48 +A8 +A8 +70 +ENDCHAR +STARTCHAR uni0110D6 +ENCODING 69846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +54 +48 +20 +90 +60 +30 +28 +24 +18 +ENDCHAR +STARTCHAR uni0110D7 +ENCODING 69847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +14 +3A +52 +1C +70 +90 +70 +10 +10 +10 +ENDCHAR +STARTCHAR uni0110D8 +ENCODING 69848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +94 +78 +10 +50 +B0 +B0 +D0 +90 +60 +ENDCHAR +STARTCHAR uni0110D9 +ENCODING 69849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +F0 +90 +10 +10 +50 +B0 +B0 +D0 +90 +60 +ENDCHAR +STARTCHAR uni0110DA +ENCODING 69850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F8 +88 +88 +08 +38 +40 +90 +A8 +A8 +70 +ENDCHAR +STARTCHAR uni0110DB +ENCODING 69851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +20 +50 +30 +10 +20 +10 +20 +10 +48 +A8 +A8 +70 +ENDCHAR +STARTCHAR uni0110DC +ENCODING 69852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +88 +98 +68 +08 +28 +58 +58 +68 +48 +30 +ENDCHAR +STARTCHAR uni0110DD +ENCODING 69853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +F0 +40 +58 +64 +4C +54 +54 +48 +ENDCHAR +STARTCHAR uni0110DE +ENCODING 69854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +80 +40 +40 +20 +40 +80 +A0 +D0 +D0 +60 +ENDCHAR +STARTCHAR uni0110DF +ENCODING 69855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +88 +90 +24 +2C +14 +04 +34 +4C +38 +ENDCHAR +STARTCHAR uni0110E0 +ENCODING 69856 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F0 +A8 +90 +80 +A0 +D0 +D0 +B0 +90 +60 +ENDCHAR +STARTCHAR uni0110E1 +ENCODING 69857 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +24 +6A +AC +28 +74 +60 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0110E2 +ENCODING 69858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +84 +84 +CC +B4 +B4 +B4 +48 +ENDCHAR +STARTCHAR uni0110E3 +ENCODING 69859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +48 +54 +58 +60 +40 +E0 +50 +50 +50 +20 +ENDCHAR +STARTCHAR uni0110E4 +ENCODING 69860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +F0 +90 +20 +28 +10 +20 +40 +70 +48 +30 +ENDCHAR +STARTCHAR uni0110E5 +ENCODING 69861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E4 +A4 +24 +24 +24 +24 +24 +24 +24 +18 +ENDCHAR +STARTCHAR uni0110E6 +ENCODING 69862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +88 +C4 +A4 +44 +08 +10 +20 +40 +FC +ENDCHAR +STARTCHAR uni0110E7 +ENCODING 69863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +24 +2A +2C +28 +28 +28 +28 +78 +A8 +40 +ENDCHAR +STARTCHAR uni0110E8 +ENCODING 69864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +60 +90 +E0 +80 +80 +80 +80 +80 +80 +60 +ENDCHAR +STARTCHAR uni0110F0 +ENCODING 69872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +60 +90 +90 +90 +90 +90 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni0110F1 +ENCODING 69873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +20 +50 +60 +C0 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni0110F2 +ENCODING 69874 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +40 +A0 +60 +30 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0110F3 +ENCODING 69875 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +98 +68 +08 +08 +68 +98 +88 +70 +ENDCHAR +STARTCHAR uni0110F4 +ENCODING 69876 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +04 +1C +24 +A4 +F8 +ENDCHAR +STARTCHAR uni0110F5 +ENCODING 69877 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 2 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +E0 +C0 +80 +ENDCHAR +STARTCHAR uni0110F6 +ENCODING 69878 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +40 +40 +40 +40 +40 +40 +50 +68 +48 +F0 +ENDCHAR +STARTCHAR uni0110F7 +ENCODING 69879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 1 0 +BITMAP +80 +C0 +A0 +80 +80 +80 +E0 +90 +90 +60 +ENDCHAR +STARTCHAR uni0110F8 +ENCODING 69880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +C0 +80 +80 +80 +80 +80 +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uni0110F9 +ENCODING 69881 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +20 +20 +20 +20 +20 +20 +28 +34 +24 +38 +40 +80 +ENDCHAR +STARTCHAR uni011100 +ENCODING 69888 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 11 +BITMAP +20 +88 +70 +ENDCHAR +STARTCHAR uni011101 +ENCODING 69889 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -8 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011102 +ENCODING 69890 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -10 11 +BITMAP +CC +CC +ENDCHAR +STARTCHAR uni011103 +ENCODING 69891 +BBX 10 8 4 2 +BITMAP +6780 +9840 +1040 +1040 +1040 +1040 +9040 +6180 +ENDCHAR +STARTCHAR uni011104 +ENCODING 69892 +BBX 11 8 3 2 +BITMAP +6060 +1080 +1080 +7880 +9780 +6080 +0080 +0080 +ENDCHAR +STARTCHAR uni011105 +ENCODING 69893 +BBX 10 8 4 2 +BITMAP +7F00 +8080 +0040 +0780 +7800 +8000 +4040 +3F80 +ENDCHAR +STARTCHAR uni011106 +ENCODING 69894 +BBX 9 8 5 2 +BITMAP +8000 +7000 +0C00 +0300 +0080 +3880 +C500 +C200 +ENDCHAR +STARTCHAR uni011107 +ENCODING 69895 +BBX 9 8 5 2 +BITMAP +3600 +4900 +8880 +8880 +8880 +8080 +8080 +6300 +ENDCHAR +STARTCHAR uni011108 +ENCODING 69896 +BBX 10 8 4 2 +BITMAP +3F00 +4080 +8040 +8040 +87C0 +8840 +8880 +4700 +ENDCHAR +STARTCHAR uni011109 +ENCODING 69897 +BBX 10 8 4 2 +BITMAP +3F00 +4080 +8040 +8040 +8040 +8040 +4080 +3300 +ENDCHAR +STARTCHAR uni01110A +ENCODING 69898 +BBX 11 8 3 2 +BITMAP +4440 +2220 +2220 +2220 +2220 +CC20 +8A40 +7180 +ENDCHAR +STARTCHAR uni01110B +ENCODING 69899 +BBX 9 8 4 2 +BITMAP +7F00 +8080 +8000 +7800 +8000 +8000 +4080 +3F00 +ENDCHAR +STARTCHAR uni01110C +ENCODING 69900 +BBX 10 8 4 2 +BITMAP +4080 +2040 +2040 +2040 +2040 +C080 +8100 +7E00 +ENDCHAR +STARTCHAR uni01110D +ENCODING 69901 +BBX 11 8 4 2 +BITMAP +6180 +9040 +0820 +0820 +7820 +8C20 +9240 +6180 +ENDCHAR +STARTCHAR uni01110E +ENCODING 69902 +BBX 10 8 4 2 +BITMAP +7F00 +9080 +9040 +6340 +0480 +8340 +4040 +3F80 +ENDCHAR +STARTCHAR uni01110F +ENCODING 69903 +BBX 11 8 4 2 +BITMAP +4320 +A0C0 +2080 +2040 +2040 +C040 +8080 +7F00 +ENDCHAR +STARTCHAR uni011110 +ENCODING 69904 +BBX 11 8 4 2 +BITMAP +3C40 +4220 +8220 +0DC0 +3000 +4000 +4300 +3C00 +ENDCHAR +STARTCHAR uni011111 +ENCODING 69905 +BBX 10 8 4 2 +BITMAP +7FC0 +8800 +8800 +8FC0 +8840 +8980 +8A00 +73C0 +ENDCHAR +STARTCHAR uni011112 +ENCODING 69906 +BBX 11 8 4 2 +BITMAP +7FC0 +8800 +8800 +8BC0 +8CA0 +8920 +8920 +70C0 +ENDCHAR +STARTCHAR uni011113 +ENCODING 69907 +BBX 7 8 5 2 +BITMAP +7C +82 +02 +04 +18 +60 +80 +FE +ENDCHAR +STARTCHAR uni011114 +ENCODING 69908 +BBX 10 8 4 2 +BITMAP +4180 +A240 +2240 +21C0 +2040 +C080 +8100 +7E00 +ENDCHAR +STARTCHAR uni011115 +ENCODING 69909 +BBX 10 8 4 2 +BITMAP +6180 +9240 +1200 +2100 +4080 +8040 +8040 +7F80 +ENDCHAR +STARTCHAR uni011116 +ENCODING 69910 +BBX 9 8 5 2 +BITMAP +3600 +4900 +8880 +8880 +8880 +8880 +9080 +6300 +ENDCHAR +STARTCHAR uni011117 +ENCODING 69911 +BBX 9 8 5 2 +BITMAP +3600 +4900 +8880 +8880 +8880 +8880 +9480 +6300 +ENDCHAR +STARTCHAR uni011118 +ENCODING 69912 +BBX 8 8 6 2 +BITMAP +7C +82 +01 +01 +01 +01 +82 +7C +ENDCHAR +STARTCHAR uni011119 +ENCODING 69913 +BBX 10 8 4 2 +BITMAP +3F00 +4080 +8040 +8040 +8C40 +9240 +A140 +4080 +ENDCHAR +STARTCHAR uni01111A +ENCODING 69914 +BBX 11 8 4 2 +BITMAP +60C0 +9120 +0A00 +0A00 +7FC0 +8A20 +8A20 +71C0 +ENDCHAR +STARTCHAR uni01111B +ENCODING 69915 +BBX 10 8 4 2 +BITMAP +3300 +4080 +8040 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni01111C +ENCODING 69916 +BBX 10 8 4 2 +BITMAP +2300 +4480 +8440 +83C0 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni01111D +ENCODING 69917 +BBX 10 8 4 2 +BITMAP +4080 +A140 +9240 +8C40 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni01111E +ENCODING 69918 +BBX 10 8 4 2 +BITMAP +6380 +9440 +1840 +1000 +1380 +1440 +9840 +6180 +ENDCHAR +STARTCHAR uni01111F +ENCODING 69919 +BBX 9 8 4 2 +BITMAP +6300 +8080 +8880 +9480 +9480 +9480 +4900 +3600 +ENDCHAR +STARTCHAR uni011120 +ENCODING 69920 +BBX 9 8 5 2 +BITMAP +6300 +8080 +8080 +8880 +8880 +8880 +4900 +3600 +ENDCHAR +STARTCHAR uni011121 +ENCODING 69921 +BBX 10 8 4 2 +BITMAP +6000 +9000 +1000 +1000 +1380 +1440 +9840 +6180 +ENDCHAR +STARTCHAR uni011122 +ENCODING 69922 +BBX 10 8 4 2 +BITMAP +6380 +9440 +9840 +9000 +9380 +9440 +9840 +6180 +ENDCHAR +STARTCHAR uni011123 +ENCODING 69923 +BBX 11 8 4 2 +BITMAP +3040 +4820 +8820 +8420 +8420 +8220 +8240 +4180 +ENDCHAR +STARTCHAR uni011124 +ENCODING 69924 +BBX 10 8 5 2 +BITMAP +3F00 +4080 +8040 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni011125 +ENCODING 69925 +BBX 9 8 5 2 +BITMAP +6300 +9080 +1080 +1080 +1080 +1080 +9880 +6700 +ENDCHAR +STARTCHAR uni011126 +ENCODING 69926 +BBX 11 8 4 2 +BITMAP +4180 +8240 +8220 +8420 +8420 +8820 +4820 +3040 +ENDCHAR +STARTCHAR uni011127 +ENCODING 69927 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -7 11 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni011128 +ENCODING 69928 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -8 11 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni011129 +ENCODING 69929 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -8 11 +BITMAP +70 +A8 +70 +ENDCHAR +STARTCHAR uni01112A +ENCODING 69930 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -5 -2 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni01112B +ENCODING 69931 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 -2 +BITMAP +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni01112C +ENCODING 69932 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 8 -16 2 +BITMAP +30 +40 +80 +80 +E0 +90 +90 +60 +ENDCHAR +STARTCHAR uni01112D +ENCODING 69933 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -6 10 +BITMAP +E0 +20 +40 +80 +ENDCHAR +STARTCHAR uni01112E +ENCODING 69934 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 16 -8 -2 +BITMAP +10 +20 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +90 +60 +ENDCHAR +STARTCHAR uni01112F +ENCODING 69935 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 16 -8 -2 +BITMAP +10 +20 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +A8 +70 +ENDCHAR +STARTCHAR uni011130 +ENCODING 69936 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -9 10 +BITMAP +E2 +24 +48 +80 +ENDCHAR +STARTCHAR uni011131 +ENCODING 69937 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -8 -2 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni011132 +ENCODING 69938 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -8 -2 +BITMAP +70 +A8 +70 +ENDCHAR +STARTCHAR uni011133 +ENCODING 69939 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -7 -2 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni011134 +ENCODING 69940 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -8 12 +BITMAP +F0 +ENDCHAR +STARTCHAR uni011136 +ENCODING 69942 +BBX 7 8 5 2 +BITMAP +38 +44 +82 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni011137 +ENCODING 69943 +BBX 7 8 5 2 +BITMAP +C6 +28 +10 +28 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni011138 +ENCODING 69944 +BBX 6 10 5 0 +BITMAP +78 +84 +04 +08 +10 +20 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni011139 +ENCODING 69945 +BBX 11 8 3 2 +BITMAP +0380 +8440 +8820 +4C20 +4C20 +2020 +1040 +0F80 +ENDCHAR +STARTCHAR uni01113A +ENCODING 69946 +BBX 7 8 5 2 +BITMAP +3C +42 +A2 +A2 +9C +80 +40 +3C +ENDCHAR +STARTCHAR uni01113B +ENCODING 69947 +BBX 7 8 7 2 +BITMAP +78 +84 +E2 +12 +12 +E2 +84 +78 +ENDCHAR +STARTCHAR uni01113C +ENCODING 69948 +BBX 7 9 5 1 +BITMAP +78 +84 +82 +52 +22 +54 +48 +34 +02 +ENDCHAR +STARTCHAR uni01113D +ENCODING 69949 +BBX 7 8 6 2 +BITMAP +7C +82 +7E +02 +04 +04 +04 +02 +ENDCHAR +STARTCHAR uni01113E +ENCODING 69950 +BBX 7 8 7 2 +BITMAP +80 +80 +FE +C0 +B0 +88 +88 +70 +ENDCHAR +STARTCHAR uni01113F +ENCODING 69951 +BBX 12 8 3 2 +BITMAP +0380 +0440 +7F40 +9440 +9240 +9DC0 +9460 +6390 +ENDCHAR +STARTCHAR uni011140 +ENCODING 69952 +BBX 12 7 3 2 +BITMAP +0600 +0900 +6660 +9090 +6660 +0900 +0600 +ENDCHAR +STARTCHAR uni011141 +ENCODING 69953 +BBX 1 8 9 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011142 +ENCODING 69954 +BBX 4 8 8 2 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni011143 +ENCODING 69955 +BBX 5 8 8 2 +BITMAP +80 +E0 +10 +08 +08 +10 +E0 +80 +ENDCHAR +STARTCHAR uni011144 +ENCODING 69956 +BBX 11 8 4 2 +BITMAP +6380 +9440 +9440 +9B40 +90E0 +9C40 +9440 +6380 +ENDCHAR +STARTCHAR uni011145 +ENCODING 69957 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 13 -6 0 +BITMAP +60 +90 +10 +08 +08 +08 +08 +08 +08 +08 +08 +08 +10 +ENDCHAR +STARTCHAR uni011146 +ENCODING 69958 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 9 -6 2 +BITMAP +08 +04 +64 +94 +1C +34 +54 +24 +04 +ENDCHAR +STARTCHAR uni011150 +ENCODING 69968 +BBX 12 5 2 1 +BITMAP +76E0 +8910 +8910 +8910 +4920 +ENDCHAR +STARTCHAR uni011151 +ENCODING 69969 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 1 +BITMAP +10 +20 +20 +40 +40 +B0 +88 +88 +70 +ENDCHAR +STARTCHAR uni011152 +ENCODING 69970 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 1 +BITMAP +38 +44 +82 +B2 +88 +98 +84 +44 +38 +ENDCHAR +STARTCHAR uni011153 +ENCODING 69971 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +20 +44 +44 +38 +40 +80 +ENDCHAR +STARTCHAR uni011154 +ENCODING 69972 +BBX 14 7 1 1 +BITMAP +8000 +6000 +1DB8 +2244 +2244 +2244 +1248 +ENDCHAR +STARTCHAR uni011155 +ENCODING 69973 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +70 +88 +08 +18 +04 +04 +18 +ENDCHAR +STARTCHAR uni011156 +ENCODING 69974 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 1 +BITMAP +40 +88 +88 +70 +20 +40 +ENDCHAR +STARTCHAR uni011157 +ENCODING 69975 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 1 +BITMAP +64 +92 +12 +12 +22 +CC +ENDCHAR +STARTCHAR uni011158 +ENCODING 69976 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 2 +BITMAP +20 +40 +80 +92 +62 +24 +1A +ENDCHAR +STARTCHAR uni011159 +ENCODING 69977 +BBX 12 7 2 1 +BITMAP +2080 +5140 +9140 +0A20 +0A20 +0410 +0010 +ENDCHAR +STARTCHAR uni01115A +ENCODING 69978 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +20 +44 +8A +9A +6A +24 +1A +02 +04 +ENDCHAR +STARTCHAR uni01115B +ENCODING 69979 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 1 +BITMAP +70 +88 +88 +68 +10 +10 +20 +20 +40 +ENDCHAR +STARTCHAR uni01115C +ENCODING 69980 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 1 +BITMAP +20 +44 +8A +9A +6A +24 +5A +82 +ENDCHAR +STARTCHAR uni01115D +ENCODING 69981 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +60 +10 +30 +BC +82 +42 +3C +ENDCHAR +STARTCHAR uni01115E +ENCODING 69982 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +80 +58 +20 +40 +44 +38 +ENDCHAR +STARTCHAR uni01115F +ENCODING 69983 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +18 +24 +40 +40 +20 +50 +88 +88 +70 +ENDCHAR +STARTCHAR uni011160 +ENCODING 69984 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 1 1 +BITMAP +20 +40 +80 +40 +20 +10 +E0 +ENDCHAR +STARTCHAR uni011161 +ENCODING 69985 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +8C +52 +52 +4A +44 +48 +30 +ENDCHAR +STARTCHAR uni011162 +ENCODING 69986 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +A8 +A8 +A8 +A8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni011163 +ENCODING 69987 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 1 +BITMAP +60 +90 +10 +10 +2A +C4 +ENDCHAR +STARTCHAR uni011164 +ENCODING 69988 +BBX 12 5 2 1 +BITMAP +78E0 +E510 +9210 +9020 +6040 +ENDCHAR +STARTCHAR uni011165 +ENCODING 69989 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +60 +80 +80 +60 +40 +44 +38 +ENDCHAR +STARTCHAR uni011166 +ENCODING 69990 +BBX 11 6 2 1 +BITMAP +0100 +6200 +9620 +1A40 +1180 +2000 +ENDCHAR +STARTCHAR uni011167 +ENCODING 69991 +BBX 11 6 2 1 +BITMAP +0E00 +7180 +E040 +9020 +9020 +60C0 +ENDCHAR +STARTCHAR uni011168 +ENCODING 69992 +BBX 10 7 2 1 +BITMAP +8200 +4500 +4500 +2880 +2880 +1040 +0040 +ENDCHAR +STARTCHAR uni011169 +ENCODING 69993 +BBX 13 8 1 1 +BITMAP +8000 +4000 +4000 +3C70 +6288 +5108 +5010 +2020 +ENDCHAR +STARTCHAR uni01116A +ENCODING 69994 +BBX 10 9 2 -1 +BITMAP +8200 +4500 +4500 +2880 +2880 +1040 +0040 +0600 +0600 +ENDCHAR +STARTCHAR uni01116B +ENCODING 69995 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 2 +BITMAP +70 +88 +88 +B0 +40 +40 +20 +18 +ENDCHAR +STARTCHAR uni01116C +ENCODING 69996 +BBX 10 7 1 1 +BITMAP +8000 +4700 +2880 +1040 +3040 +3080 +3100 +ENDCHAR +STARTCHAR uni01116D +ENCODING 69997 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +30 +48 +84 +04 +08 +30 +ENDCHAR +STARTCHAR uni01116E +ENCODING 69998 +BBX 12 5 2 1 +BITMAP +78E0 +8510 +8210 +8020 +70C0 +ENDCHAR +STARTCHAR uni01116F +ENCODING 69999 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +90 +90 +90 +68 +04 +60 +60 +ENDCHAR +STARTCHAR uni011170 +ENCODING 70000 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 1 +BITMAP +30 +40 +80 +98 +64 +04 +18 +ENDCHAR +STARTCHAR uni011171 +ENCODING 70001 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 1 2 +BITMAP +20 +40 +80 +20 +40 +80 +ENDCHAR +STARTCHAR uni011172 +ENCODING 70002 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 1 +BITMAP +24 +4A +8A +44 +20 +10 +E0 +ENDCHAR +STARTCHAR uni011173 +ENCODING 70003 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -5 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011174 +ENCODING 70004 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 3 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011175 +ENCODING 70005 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 1 +BITMAP +80 +80 +80 +80 +88 +B0 +C0 +ENDCHAR +STARTCHAR uni011176 +ENCODING 70006 +BBX 14 8 1 0 +BITMAP +5DB8 +A244 +A244 +6244 +2244 +4008 +8430 +03C0 +ENDCHAR +STARTCHAR uni011180 +ENCODING 70016 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -11 11 +BITMAP +70 +88 +A8 +ENDCHAR +STARTCHAR uni011181 +ENCODING 70017 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -6 11 +BITMAP +80 +ENDCHAR +STARTCHAR uni011182 +ENCODING 70018 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 6 -3 2 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni011183 +ENCODING 70019 +BBX 13 10 3 0 +BITMAP +3FF8 +2080 +D080 +1080 +3F80 +3080 +0080 +0180 +0380 +0080 +ENDCHAR +STARTCHAR uni011184 +ENCODING 70020 +BBX 13 12 3 -2 +BITMAP +3FF8 +2080 +D080 +1080 +3F80 +3080 +0080 +0080 +00C0 +0120 +0420 +03C0 +ENDCHAR +STARTCHAR uni011185 +ENCODING 70021 +BBX 9 8 3 2 +BITMAP +3880 +4700 +0000 +0700 +8880 +4080 +2080 +1F00 +ENDCHAR +STARTCHAR uni011186 +ENCODING 70022 +BBX 16 10 0 2 +BITMAP +0440 +0000 +FFFF +0080 +0080 +0080 +0180 +0380 +0180 +0080 +ENDCHAR +STARTCHAR uni011187 +ENCODING 70023 +BBX 8 8 3 2 +BITMAP +3E +02 +04 +0E +81 +41 +21 +1E +ENDCHAR +STARTCHAR uni011188 +ENCODING 70024 +BBX 11 10 3 0 +BITMAP +3E00 +0200 +0400 +0E00 +8100 +41C0 +2120 +1E20 +0040 +0080 +ENDCHAR +STARTCHAR uni011189 +ENCODING 70025 +BBX 16 8 0 2 +BITMAP +FFFF +0400 +0400 +0400 +0400 +0420 +0420 +03C0 +ENDCHAR +STARTCHAR uni01118A +ENCODING 70026 +BBX 16 8 0 2 +BITMAP +FFFF +0500 +0520 +04C0 +0400 +0420 +0420 +03C0 +ENDCHAR +STARTCHAR uni01118B +ENCODING 70027 +BBX 16 8 0 2 +BITMAP +FFFF +1080 +11C0 +1220 +1040 +1180 +1210 +11E0 +ENDCHAR +STARTCHAR uni01118C +ENCODING 70028 +BBX 16 8 0 2 +BITMAP +FFFF +2094 +21CC +2220 +2040 +2180 +2210 +21E0 +ENDCHAR +STARTCHAR uni01118D +ENCODING 70029 +BBX 16 8 0 2 +BITMAP +FFFF +0810 +0C10 +0A10 +0990 +0870 +0800 +0800 +ENDCHAR +STARTCHAR uni01118E +ENCODING 70030 +BBX 16 10 0 2 +BITMAP +0FF0 +0000 +FFFF +0810 +0C10 +0A10 +0990 +0870 +0800 +0800 +ENDCHAR +STARTCHAR uni01118F +ENCODING 70031 +BBX 16 8 0 2 +BITMAP +FFFF +1820 +1820 +1440 +14E0 +1210 +1210 +11E0 +ENDCHAR +STARTCHAR uni011190 +ENCODING 70032 +BBX 15 8 1 2 +BITMAP +FFFE +3050 +2870 +2880 +29C0 +2420 +2420 +23C0 +ENDCHAR +STARTCHAR uni011191 +ENCODING 70033 +BBX 16 8 0 2 +BITMAP +FFFF +0100 +07C0 +0920 +1110 +0990 +0760 +0100 +ENDCHAR +STARTCHAR uni011192 +ENCODING 70034 +BBX 16 8 0 2 +BITMAP +FFFF +1410 +1410 +1410 +1230 +11D0 +1010 +1010 +ENDCHAR +STARTCHAR uni011193 +ENCODING 70035 +BBX 16 8 0 2 +BITMAP +FFFF +0210 +0210 +0610 +0E10 +0210 +0010 +0010 +ENDCHAR +STARTCHAR uni011194 +ENCODING 70036 +BBX 16 8 0 2 +BITMAP +F01F +1010 +1110 +0930 +06D0 +0010 +0010 +0010 +ENDCHAR +STARTCHAR uni011195 +ENCODING 70037 +BBX 16 7 0 3 +BITMAP +FFFF +0820 +0820 +0800 +0C00 +0300 +00C0 +ENDCHAR +STARTCHAR uni011196 +ENCODING 70038 +BBX 16 8 0 2 +BITMAP +FFFF +0810 +0810 +0810 +0810 +1F10 +18F0 +0010 +ENDCHAR +STARTCHAR uni011197 +ENCODING 70039 +BBX 16 8 0 2 +BITMAP +FFFF +0100 +0100 +0380 +0D60 +1110 +1110 +0EE0 +ENDCHAR +STARTCHAR uni011198 +ENCODING 70040 +BBX 9 8 3 2 +BITMAP +3680 +4900 +4000 +4000 +4000 +F800 +C700 +0080 +ENDCHAR +STARTCHAR uni011199 +ENCODING 70041 +BBX 16 8 0 2 +BITMAP +FFFF +0610 +0610 +0610 +0D20 +1D20 +0CC0 +0400 +ENDCHAR +STARTCHAR uni01119A +ENCODING 70042 +BBX 16 8 0 2 +BITMAP +FFFF +1100 +1100 +13C0 +1320 +1010 +1010 +1010 +ENDCHAR +STARTCHAR uni01119B +ENCODING 70043 +BBX 16 8 0 2 +BITMAP +FFFF +0810 +0810 +0800 +0800 +0810 +0420 +03C0 +ENDCHAR +STARTCHAR uni01119C +ENCODING 70044 +BBX 9 8 3 2 +BITMAP +3E00 +4100 +8080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni01119D +ENCODING 70045 +BBX 16 8 0 2 +BITMAP +FFFF +0400 +0400 +0F80 +0C40 +0020 +0020 +0040 +ENDCHAR +STARTCHAR uni01119E +ENCODING 70046 +BBX 16 8 0 2 +BITMAP +FFFF +0400 +0400 +0400 +0460 +0490 +0E90 +0DE0 +ENDCHAR +STARTCHAR uni01119F +ENCODING 70047 +BBX 8 2 4 8 +BITMAP +6D +92 +ENDCHAR +STARTCHAR uni0111A0 +ENCODING 70048 +BBX 7 8 4 2 +BITMAP +78 +04 +04 +08 +1C +02 +82 +7C +ENDCHAR +STARTCHAR uni0111A1 +ENCODING 70049 +BBX 16 8 0 2 +BITMAP +FFFF +0810 +0810 +07F0 +0410 +0430 +03D0 +0010 +ENDCHAR +STARTCHAR uni0111A2 +ENCODING 70050 +BBX 16 8 0 2 +BITMAP +FFFF +0400 +0400 +0400 +0400 +0410 +0E10 +0DE0 +ENDCHAR +STARTCHAR uni0111A3 +ENCODING 70051 +BBX 16 8 0 2 +BITMAP +FFFF +0810 +0810 +0810 +0810 +0810 +0420 +03C0 +ENDCHAR +STARTCHAR uni0111A4 +ENCODING 70052 +BBX 16 8 0 2 +BITMAP +FFFF +0020 +0020 +0020 +07E0 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni0111A5 +ENCODING 70053 +BBX 16 8 0 2 +BITMAP +FFFF +0810 +0810 +0810 +0430 +03D0 +0010 +0010 +ENDCHAR +STARTCHAR uni0111A6 +ENCODING 70054 +BBX 16 8 0 2 +BITMAP +FFFF +0800 +1000 +1000 +10E0 +0910 +0A90 +0460 +ENDCHAR +STARTCHAR uni0111A7 +ENCODING 70055 +BBX 16 8 0 2 +BITMAP +FFFF +0020 +0020 +01E0 +0220 +0420 +0220 +01E0 +ENDCHAR +STARTCHAR uni0111A8 +ENCODING 70056 +BBX 16 8 0 2 +BITMAP +FFFF +0400 +0400 +0FC0 +0C20 +0020 +0220 +01C0 +ENDCHAR +STARTCHAR uni0111A9 +ENCODING 70057 +BBX 16 8 0 2 +BITMAP +F01F +0810 +0410 +0410 +0FF0 +0C10 +0010 +0010 +ENDCHAR +STARTCHAR uni0111AA +ENCODING 70058 +BBX 16 8 0 2 +BITMAP +FFFF +0810 +0410 +0210 +0410 +0830 +0850 +0790 +ENDCHAR +STARTCHAR uni0111AB +ENCODING 70059 +BBX 16 8 0 2 +BITMAP +FFFF +0080 +0080 +0080 +0180 +0380 +0180 +0080 +ENDCHAR +STARTCHAR uni0111AC +ENCODING 70060 +BBX 16 8 0 2 +BITMAP +FFFF +0010 +0010 +0C70 +1290 +1110 +0010 +0010 +ENDCHAR +STARTCHAR uni0111AD +ENCODING 70061 +BBX 16 8 0 2 +BITMAP +FFFF +0850 +0830 +1F00 +1880 +0040 +0040 +0080 +ENDCHAR +STARTCHAR uni0111AE +ENCODING 70062 +BBX 16 9 0 1 +BITMAP +FFFF +0020 +01E0 +0220 +0420 +0220 +01E0 +0020 +0020 +ENDCHAR +STARTCHAR uni0111AF +ENCODING 70063 +BBX 16 8 0 2 +BITMAP +FFFF +0410 +0410 +0410 +0FF0 +0C10 +0010 +0010 +ENDCHAR +STARTCHAR uni0111B0 +ENCODING 70064 +BBX 16 8 0 2 +BITMAP +F01F +0810 +0810 +07F0 +0410 +0430 +03D0 +0010 +ENDCHAR +STARTCHAR uni0111B1 +ENCODING 70065 +BBX 16 8 0 2 +BITMAP +F81F +0410 +0410 +0410 +0FF0 +0C10 +0010 +0010 +ENDCHAR +STARTCHAR uni0111B2 +ENCODING 70066 +BBX 16 8 0 2 +BITMAP +FFFF +0200 +0400 +0400 +0860 +0890 +0910 +0620 +ENDCHAR +STARTCHAR uni0111B3 +ENCODING 70067 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -4 7 +BITMAP +F0 +20 +20 +ENDCHAR +STARTCHAR uni0111B4 +ENCODING 70068 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 12 -16 2 +BITMAP +38 +44 +42 +40 +F0 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni0111B5 +ENCODING 70069 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 12 -7 2 +BITMAP +38 +44 +84 +04 +1E +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni0111B6 +ENCODING 70070 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -8 -2 +BITMAP +20 +60 +E0 +20 +ENDCHAR +STARTCHAR uni0111B7 +ENCODING 70071 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 -1 +BITMAP +04 +04 +FC +ENDCHAR +STARTCHAR uni0111B8 +ENCODING 70072 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -6 -1 +BITMAP +88 +88 +70 +ENDCHAR +STARTCHAR uni0111B9 +ENCODING 70073 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -7 -1 +BITMAP +92 +92 +6C +ENDCHAR +STARTCHAR uni0111BA +ENCODING 70074 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 5 -13 -2 +BITMAP +FFC0 +2700 +2100 +2200 +2380 +ENDCHAR +STARTCHAR uni0111BB +ENCODING 70075 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 5 -13 -2 +BITMAP +FFC0 +5D80 +4480 +4800 +4E00 +ENDCHAR +STARTCHAR uni0111BC +ENCODING 70076 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 1 -11 12 +BITMAP +FE +ENDCHAR +STARTCHAR uni0111BD +ENCODING 70077 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -11 11 +BITMAP +FE +00 +FE +ENDCHAR +STARTCHAR uni0111BE +ENCODING 70078 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 4 -13 9 +BITMAP +7380 +8C40 +8020 +0020 +ENDCHAR +STARTCHAR uni0111BF +ENCODING 70079 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 6 -13 7 +BITMAP +7380 +8C40 +8020 +0078 +0010 +0010 +ENDCHAR +STARTCHAR uni0111C0 +ENCODING 70080 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 10 -4 2 +BITMAP +20 +20 +E0 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0111C1 +ENCODING 70081 +BBX 9 7 4 2 +BITMAP +0F80 +1000 +1000 +0800 +0400 +0400 +F800 +ENDCHAR +STARTCHAR uni0111C2 +ENCODING 70082 +BBX 4 4 5 10 +BITMAP +F0 +60 +A0 +60 +ENDCHAR +STARTCHAR uni0111C3 +ENCODING 70083 +BBX 7 3 4 11 +BITMAP +6C +92 +FE +ENDCHAR +STARTCHAR uni0111C4 +ENCODING 70084 +BBX 11 12 2 2 +BITMAP +1F00 +2080 +2480 +0000 +FFC0 +6040 +6040 +5080 +51C0 +4820 +4820 +47C0 +ENDCHAR +STARTCHAR uni0111C5 +ENCODING 70085 +BBX 1 8 4 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0111C6 +ENCODING 70086 +BBX 4 8 4 2 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni0111C7 +ENCODING 70087 +BBX 3 3 2 7 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni0111C8 +ENCODING 70088 +BBX 1 3 4 2 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni0111C9 +ENCODING 70089 +BBX 16 12 0 -2 +BITMAP +FFFF +0000 +0000 +0000 +0000 +0000 +0000 +0100 +0200 +0180 +0040 +0380 +ENDCHAR +STARTCHAR uni0111CA +ENCODING 70090 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -11 -1 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0111CB +ENCODING 70091 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -6 11 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni0111CC +ENCODING 70092 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -13 -2 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni0111CD +ENCODING 70093 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +0200 +1740 +0200 +1040 +FAF8 +1040 +0200 +1740 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni0111D0 +ENCODING 70096 +BBX 2 2 7 4 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0111D1 +ENCODING 70097 +BBX 5 5 5 3 +BITMAP +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni0111D2 +ENCODING 70098 +BBX 5 8 5 2 +BITMAP +30 +48 +48 +30 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni0111D3 +ENCODING 70099 +BBX 5 9 5 2 +BITMAP +60 +90 +30 +08 +08 +30 +08 +88 +70 +ENDCHAR +STARTCHAR uni0111D4 +ENCODING 70100 +BBX 9 6 3 4 +BITMAP +FF80 +2000 +2000 +2000 +7F00 +6000 +ENDCHAR +STARTCHAR uni0111D5 +ENCODING 70101 +BBX 8 8 4 2 +BITMAP +81 +81 +81 +81 +43 +3D +01 +01 +ENDCHAR +STARTCHAR uni0111D6 +ENCODING 70102 +BBX 7 8 4 2 +BITMAP +80 +80 +40 +30 +0C +02 +42 +3C +ENDCHAR +STARTCHAR uni0111D7 +ENCODING 70103 +BBX 7 8 4 2 +BITMAP +38 +44 +82 +82 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni0111D8 +ENCODING 70104 +BBX 6 8 5 2 +BITMAP +FC +08 +08 +10 +38 +04 +84 +78 +ENDCHAR +STARTCHAR uni0111D9 +ENCODING 70105 +BBX 10 8 3 2 +BITMAP +8000 +8F80 +9240 +9240 +4C40 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni0111DA +ENCODING 70106 +BBX 14 8 1 2 +BITMAP +7FF8 +2490 +14A0 +14A0 +94A4 +6498 +0480 +0480 +ENDCHAR +STARTCHAR uni0111DB +ENCODING 70107 +BBX 12 9 1 1 +BITMAP +8000 +81C0 +4220 +4210 +2190 +2010 +1020 +0840 +0780 +ENDCHAR +STARTCHAR uni0111DC +ENCODING 70108 +BBX 16 1 0 9 +BITMAP +FFFF +ENDCHAR +STARTCHAR uni0111DD +ENCODING 70109 +BBX 5 10 5 1 +BITMAP +80 +40 +40 +40 +40 +80 +40 +20 +10 +08 +ENDCHAR +STARTCHAR uni0111DE +ENCODING 70110 +BBX 9 7 3 2 +BITMAP +7000 +8880 +0700 +0000 +7000 +8880 +0700 +ENDCHAR +STARTCHAR uni0111DF +ENCODING 70111 +BBX 5 7 6 2 +BITMAP +20 +50 +88 +00 +20 +50 +88 +ENDCHAR +STARTCHAR uni0111E1 +ENCODING 70113 +BBX 10 7 2 1 +BITMAP +3C40 +4240 +9940 +A540 +9540 +4480 +3880 +ENDCHAR +STARTCHAR uni0111E2 +ENCODING 70114 +BBX 14 8 1 0 +BITMAP +3C00 +4200 +9900 +A500 +9500 +4484 +3888 +0070 +ENDCHAR +STARTCHAR uni0111E3 +ENCODING 70115 +BBX 14 9 1 -1 +BITMAP +3C00 +4200 +9920 +A550 +9550 +4490 +3890 +0014 +0008 +ENDCHAR +STARTCHAR uni0111E4 +ENCODING 70116 +BBX 14 11 1 -2 +BITMAP +3770 +4888 +8884 +8884 +8004 +8004 +880C +7014 +0024 +0024 +001C +ENDCHAR +STARTCHAR uni0111E5 +ENCODING 70117 +BBX 14 8 1 0 +BITMAP +3C00 +4200 +99A0 +A550 +9550 +4550 +3954 +0008 +ENDCHAR +STARTCHAR uni0111E6 +ENCODING 70118 +BBX 9 9 3 0 +BITMAP +3E00 +0100 +1880 +6080 +9C80 +A080 +A100 +9E00 +6000 +ENDCHAR +STARTCHAR uni0111E7 +ENCODING 70119 +BBX 10 11 2 -2 +BITMAP +3840 +4440 +8240 +8240 +8240 +6240 +0240 +0FC0 +1200 +1200 +0E00 +ENDCHAR +STARTCHAR uni0111E8 +ENCODING 70120 +BBX 14 11 1 -2 +BITMAP +3770 +4888 +8884 +8884 +8004 +8004 +8804 +71E8 +0210 +01E8 +0004 +ENDCHAR +STARTCHAR uni0111E9 +ENCODING 70121 +BBX 15 10 0 0 +BITMAP +3FE2 +4012 +8ACA +952A +A52A +A02A +A02A +9C24 +4044 +3F80 +ENDCHAR +STARTCHAR uni0111EA +ENCODING 70122 +BBX 14 10 1 0 +BITMAP +0384 +7444 +A424 +A224 +9A24 +A274 +A2A8 +A2A8 +9C68 +7000 +ENDCHAR +STARTCHAR uni0111EB +ENCODING 70123 +BBX 13 10 1 0 +BITMAP +0700 +08C8 +6838 +9F00 +AA80 +AA80 +A480 +9100 +4E00 +2000 +ENDCHAR +STARTCHAR uni0111EC +ENCODING 70124 +BBX 14 10 1 -2 +BITMAP +0340 +34A4 +4AA4 +8A24 +9224 +9224 +4C74 +00A8 +00A8 +0068 +ENDCHAR +STARTCHAR uni0111ED +ENCODING 70125 +BBX 13 11 1 -1 +BITMAP +0700 +08C8 +0838 +0780 +0A60 +7990 +9010 +E410 +A420 +9BC0 +4000 +ENDCHAR +STARTCHAR uni0111EE +ENCODING 70126 +BBX 13 11 1 -1 +BITMAP +0700 +08C8 +0838 +0780 +0060 +6F10 +9490 +AD10 +A4E0 +9800 +4000 +ENDCHAR +STARTCHAR uni0111EF +ENCODING 70127 +BBX 14 10 1 -2 +BITMAP +6C64 +9294 +9114 +8714 +8914 +9208 +8F08 +4280 +3A80 +0100 +ENDCHAR +STARTCHAR uni0111F0 +ENCODING 70128 +BBX 15 10 0 -2 +BITMAP +5BB2 +A54A +A34A +8F4A +92BE +A4AA +9E5A +4500 +3500 +0200 +ENDCHAR +STARTCHAR uni0111F1 +ENCODING 70129 +BBX 14 9 1 0 +BITMAP +71C4 +A234 +A28C +99C0 +A020 +A020 +A040 +9F80 +7000 +ENDCHAR +STARTCHAR uni0111F2 +ENCODING 70130 +BBX 14 9 1 0 +BITMAP +71C4 +A234 +A20C +99C0 +A0A0 +A060 +A020 +98C0 +7780 +ENDCHAR +STARTCHAR uni0111F3 +ENCODING 70131 +BBX 15 10 0 -1 +BITMAP +2A32 +554A +954A +8144 +6144 +0140 +3FE0 +4250 +3C50 +0020 +ENDCHAR +STARTCHAR uni0111F4 +ENCODING 70132 +BBX 14 11 1 -2 +BITMAP +2A04 +5504 +9504 +8108 +63C8 +0D28 +3510 +4900 +4100 +4300 +3D00 +ENDCHAR +STARTCHAR uni011200 +ENCODING 70144 +BBX 11 8 1 2 +BITMAP +80C0 +7D20 +0220 +0020 +0020 +0020 +0040 +0080 +ENDCHAR +STARTCHAR uni011201 +ENCODING 70145 +BBX 12 8 1 2 +BITMAP +8320 +7490 +0890 +0090 +0090 +0090 +0110 +0220 +ENDCHAR +STARTCHAR uni011202 +ENCODING 70146 +BBX 12 8 1 2 +BITMAP +24C0 +0020 +8720 +80A0 +40A0 +40A0 +20A0 +1F10 +ENDCHAR +STARTCHAR uni011203 +ENCODING 70147 +BBX 10 8 2 2 +BITMAP +3E00 +4000 +7040 +8840 +8840 +7080 +0080 +1F00 +ENDCHAR +STARTCHAR uni011204 +ENCODING 70148 +BBX 11 8 2 2 +BITMAP +81C0 +4220 +4220 +4600 +3A00 +0200 +0100 +0100 +ENDCHAR +STARTCHAR uni011205 +ENCODING 70149 +BBX 11 12 1 2 +BITMAP +0C00 +0200 +1900 +0400 +0200 +80C0 +7D20 +0220 +0020 +0020 +0040 +0080 +ENDCHAR +STARTCHAR uni011206 +ENCODING 70150 +BBX 6 8 4 2 +BITMAP +1C +20 +40 +80 +F8 +84 +84 +78 +ENDCHAR +STARTCHAR uni011207 +ENCODING 70151 +BBX 12 12 1 2 +BITMAP +0C00 +0200 +1900 +0400 +0200 +0000 +8320 +7490 +0890 +0090 +0110 +0220 +ENDCHAR +STARTCHAR uni011208 +ENCODING 70152 +BBX 11 8 1 2 +BITMAP +0780 +0840 +E840 +1080 +10C0 +2120 +2120 +4220 +ENDCHAR +STARTCHAR uni011209 +ENCODING 70153 +BBX 10 8 2 2 +BITMAP +8240 +8240 +4140 +4140 +2080 +2080 +1F00 +0100 +ENDCHAR +STARTCHAR uni01120A +ENCODING 70154 +BBX 10 8 2 2 +BITMAP +0780 +0040 +FC40 +0240 +0240 +8240 +8240 +7C40 +ENDCHAR +STARTCHAR uni01120B +ENCODING 70155 +BBX 10 8 2 2 +BITMAP +F840 +0440 +0440 +8440 +78C0 +0340 +0C40 +F040 +ENDCHAR +STARTCHAR uni01120C +ENCODING 70156 +BBX 11 8 1 2 +BITMAP +F8C0 +4120 +4120 +3920 +2120 +2220 +2220 +1C20 +ENDCHAR +STARTCHAR uni01120D +ENCODING 70157 +BBX 11 8 1 2 +BITMAP +3E00 +0160 +0160 +0E00 +0100 +8160 +4160 +3E00 +ENDCHAR +STARTCHAR uni01120E +ENCODING 70158 +BBX 11 8 1 2 +BITMAP +0040 +0040 +0020 +0FE0 +8220 +4120 +2120 +1E20 +ENDCHAR +STARTCHAR uni01120F +ENCODING 70159 +BBX 11 8 1 2 +BITMAP +E1C0 +1220 +1220 +1220 +2240 +FF80 +0200 +01E0 +ENDCHAR +STARTCHAR uni011210 +ENCODING 70160 +BBX 10 8 2 2 +BITMAP +7980 +0640 +0440 +0E40 +8240 +8240 +4240 +3C40 +ENDCHAR +STARTCHAR uni011211 +ENCODING 70161 +BBX 12 8 1 2 +BITMAP +7200 +8960 +0B90 +0C10 +1810 +1820 +0020 +0040 +ENDCHAR +STARTCHAR uni011213 +ENCODING 70163 +BBX 9 8 2 2 +BITMAP +F000 +0980 +0980 +0800 +F000 +4180 +2180 +1800 +ENDCHAR +STARTCHAR uni011214 +ENCODING 70164 +BBX 9 8 2 2 +BITMAP +7E00 +8100 +0600 +1800 +6000 +8080 +8300 +7C00 +ENDCHAR +STARTCHAR uni011215 +ENCODING 70165 +BBX 8 8 2 2 +BITMAP +FF +01 +06 +18 +66 +81 +81 +7E +ENDCHAR +STARTCHAR uni011216 +ENCODING 70166 +BBX 9 8 2 2 +BITMAP +8000 +9500 +AA80 +4A80 +4080 +2100 +2000 +1000 +ENDCHAR +STARTCHAR uni011217 +ENCODING 70167 +BBX 11 8 1 2 +BITMAP +F0C0 +0920 +0920 +10A0 +2040 +4080 +8300 +7C00 +ENDCHAR +STARTCHAR uni011218 +ENCODING 70168 +BBX 9 8 2 2 +BITMAP +8000 +9B00 +A480 +4480 +4080 +2100 +2000 +1000 +ENDCHAR +STARTCHAR uni011219 +ENCODING 70169 +BBX 10 8 2 2 +BITMAP +8380 +8440 +4440 +4840 +2840 +2840 +2840 +1040 +ENDCHAR +STARTCHAR uni01121A +ENCODING 70170 +BBX 9 8 2 2 +BITMAP +8880 +8880 +8880 +7780 +0080 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni01121B +ENCODING 70171 +BBX 9 8 2 2 +BITMAP +3E00 +C100 +C100 +0E00 +0180 +0200 +0200 +0180 +ENDCHAR +STARTCHAR uni01121C +ENCODING 70172 +BBX 9 8 2 2 +BITMAP +FF00 +2000 +2000 +1E00 +1000 +1000 +1080 +0F00 +ENDCHAR +STARTCHAR uni01121D +ENCODING 70173 +BBX 12 8 1 2 +BITMAP +7000 +8860 +0B90 +0C10 +1810 +1820 +0020 +0040 +ENDCHAR +STARTCHAR uni01121E +ENCODING 70174 +BBX 9 8 2 2 +BITMAP +7880 +8480 +8780 +8480 +7880 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni01121F +ENCODING 70175 +BBX 8 8 2 2 +BITMAP +81 +81 +87 +79 +01 +01 +01 +01 +ENDCHAR +STARTCHAR uni011220 +ENCODING 70176 +BBX 10 8 2 2 +BITMAP +4200 +4400 +3800 +0E00 +1100 +1100 +2100 +C0C0 +ENDCHAR +STARTCHAR uni011221 +ENCODING 70177 +BBX 10 8 2 2 +BITMAP +CD80 +3240 +2240 +2240 +2240 +2240 +2240 +2240 +ENDCHAR +STARTCHAR uni011222 +ENCODING 70178 +BBX 9 8 2 2 +BITMAP +6080 +9080 +9080 +7F80 +1080 +1080 +1080 +2080 +ENDCHAR +STARTCHAR uni011223 +ENCODING 70179 +BBX 10 8 2 2 +BITMAP +3840 +0440 +0240 +03C0 +8240 +8240 +4440 +3840 +ENDCHAR +STARTCHAR uni011224 +ENCODING 70180 +BBX 10 8 2 2 +BITMAP +EF00 +1080 +2840 +4840 +4840 +4840 +4880 +3080 +ENDCHAR +STARTCHAR uni011225 +ENCODING 70181 +BBX 12 8 1 2 +BITMAP +00E0 +0010 +6310 +9490 +9490 +6310 +0010 +0010 +ENDCHAR +STARTCHAR uni011226 +ENCODING 70182 +BBX 8 8 3 2 +BITMAP +80 +80 +84 +88 +F0 +40 +20 +1F +ENDCHAR +STARTCHAR uni011227 +ENCODING 70183 +BBX 8 8 3 2 +BITMAP +F1 +09 +09 +31 +FF +01 +01 +01 +ENDCHAR +STARTCHAR uni011228 +ENCODING 70184 +BBX 9 8 2 2 +BITMAP +0080 +7E80 +8180 +8180 +8280 +7C80 +0080 +0080 +ENDCHAR +STARTCHAR uni011229 +ENCODING 70185 +BBX 11 8 1 2 +BITMAP +4440 +AA40 +2240 +11C0 +1040 +0880 +0880 +0460 +ENDCHAR +STARTCHAR uni01122A +ENCODING 70186 +BBX 9 8 3 2 +BITMAP +F800 +0400 +1800 +6000 +8E00 +7100 +4080 +8080 +ENDCHAR +STARTCHAR uni01122B +ENCODING 70187 +BBX 11 7 1 2 +BITMAP +0180 +3180 +4A40 +8420 +8420 +4A40 +3180 +ENDCHAR +STARTCHAR uni01122C +ENCODING 70188 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 8 -3 2 +BITMAP +80 +80 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni01122D +ENCODING 70189 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 8 -3 2 +BITMAP +40 +A0 +A0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01122E +ENCODING 70190 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 8 -3 2 +BITMAP +40 +A0 +A0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01122F +ENCODING 70191 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 3 -14 -2 +BITMAP +8020 +60C0 +1F00 +ENDCHAR +STARTCHAR uni011230 +ENCODING 70192 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -11 11 +BITMAP +E0 +18 +06 +ENDCHAR +STARTCHAR uni011231 +ENCODING 70193 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 3 -14 11 +BITMAP +C600 +3180 +0C60 +ENDCHAR +STARTCHAR uni011232 +ENCODING 70194 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 12 -11 2 +BITMAP +E000 +1800 +0600 +0000 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011233 +ENCODING 70195 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 12 -14 2 +BITMAP +C600 +3180 +0C60 +0000 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +0008 +ENDCHAR +STARTCHAR uni011234 +ENCODING 70196 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -3 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011235 +ENCODING 70197 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 8 -3 2 +BITMAP +20 +20 +20 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni011236 +ENCODING 70198 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -11 12 +BITMAP +20 +88 +ENDCHAR +STARTCHAR uni011237 +ENCODING 70199 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -12 11 +BITMAP +92 +92 +6C +ENDCHAR +STARTCHAR uni011238 +ENCODING 70200 +BBX 3 8 5 2 +BITMAP +80 +40 +40 +40 +40 +40 +40 +20 +ENDCHAR +STARTCHAR uni011239 +ENCODING 70201 +BBX 7 8 4 2 +BITMAP +88 +44 +44 +44 +44 +44 +44 +22 +ENDCHAR +STARTCHAR uni01123A +ENCODING 70202 +BBX 2 6 5 3 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni01123B +ENCODING 70203 +BBX 12 2 2 6 +BITMAP +8000 +7FF0 +ENDCHAR +STARTCHAR uni01123C +ENCODING 70204 +BBX 12 5 2 4 +BITMAP +8000 +7FF0 +0000 +8000 +7FF0 +ENDCHAR +STARTCHAR uni01123D +ENCODING 70205 +BBX 4 4 4 4 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni01123E +ENCODING 70206 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -12 10 +BITMAP +70 +88 +08 +30 +ENDCHAR +STARTCHAR uni011280 +ENCODING 70272 +BBX 11 10 3 0 +BITMAP +0060 +5E80 +A100 +2100 +2100 +2100 +2100 +2100 +2100 +2100 +ENDCHAR +STARTCHAR uni011281 +ENCODING 70273 +BBX 6 10 5 0 +BITMAP +3C +40 +80 +80 +80 +B0 +88 +88 +48 +30 +ENDCHAR +STARTCHAR uni011282 +ENCODING 70274 +BBX 8 10 4 0 +BITMAP +3C +40 +80 +9E +81 +81 +9E +81 +81 +7E +ENDCHAR +STARTCHAR uni011283 +ENCODING 70275 +BBX 11 8 2 0 +BITMAP +0E00 +3180 +4040 +4040 +8020 +8020 +8020 +8020 +ENDCHAR +STARTCHAR uni011284 +ENCODING 70276 +BBX 10 8 3 0 +BITMAP +7C00 +8200 +0100 +0100 +0200 +0400 +7F00 +80C0 +ENDCHAR +STARTCHAR uni011285 +ENCODING 70277 +BBX 12 8 2 0 +BITMAP +01F0 +00C0 +0080 +8180 +8280 +4480 +4880 +3070 +ENDCHAR +STARTCHAR uni011286 +ENCODING 70278 +BBX 9 8 4 0 +BITMAP +0100 +C200 +2200 +1200 +1100 +1100 +1080 +E000 +ENDCHAR +STARTCHAR uni011288 +ENCODING 70280 +BBX 10 8 3 0 +BITMAP +8800 +8880 +7780 +0080 +0080 +0080 +0080 +0040 +ENDCHAR +STARTCHAR uni01128A +ENCODING 70282 +BBX 10 8 3 0 +BITMAP +03C0 +0400 +0800 +4800 +8800 +9000 +9000 +6000 +ENDCHAR +STARTCHAR uni01128B +ENCODING 70283 +BBX 7 10 5 0 +BITMAP +48 +90 +06 +C8 +30 +48 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni01128C +ENCODING 70284 +BBX 10 8 3 0 +BITMAP +FF00 +0480 +0480 +F880 +0480 +0480 +0440 +F800 +ENDCHAR +STARTCHAR uni01128D +ENCODING 70285 +BBX 12 8 2 0 +BITMAP +7610 +8920 +0940 +09C0 +88C0 +7800 +0C00 +0200 +ENDCHAR +STARTCHAR uni01128F +ENCODING 70287 +BBX 10 10 3 -2 +BITMAP +FF00 +0480 +0480 +F880 +0480 +0480 +0440 +F800 +0400 +0300 +ENDCHAR +STARTCHAR uni011290 +ENCODING 70288 +BBX 9 10 4 0 +BITMAP +FF00 +4000 +8000 +8000 +8000 +8000 +8000 +4000 +2000 +1F80 +ENDCHAR +STARTCHAR uni011291 +ENCODING 70289 +BBX 8 8 4 0 +BITMAP +3F +40 +80 +80 +86 +89 +89 +7E +ENDCHAR +STARTCHAR uni011292 +ENCODING 70290 +BBX 11 8 3 0 +BITMAP +03E0 +0400 +0800 +0800 +8800 +8800 +9000 +6000 +ENDCHAR +STARTCHAR uni011293 +ENCODING 70291 +BBX 10 10 3 0 +BITMAP +F800 +0700 +0880 +1140 +2240 +0440 +0840 +0040 +0040 +0180 +ENDCHAR +STARTCHAR uni011294 +ENCODING 70292 +BBX 10 8 3 0 +BITMAP +0380 +8440 +4440 +4440 +4280 +4100 +2200 +1C00 +ENDCHAR +STARTCHAR uni011295 +ENCODING 70293 +BBX 11 8 2 0 +BITMAP +0080 +0480 +0480 +C480 +2480 +2440 +4440 +9820 +ENDCHAR +STARTCHAR uni011296 +ENCODING 70294 +BBX 9 8 4 0 +BITMAP +0F00 +1080 +0080 +0700 +0080 +8080 +6080 +1F00 +ENDCHAR +STARTCHAR uni011297 +ENCODING 70295 +BBX 9 8 3 0 +BITMAP +8080 +7F00 +1000 +2080 +3F00 +0800 +0400 +0400 +ENDCHAR +STARTCHAR uni011298 +ENCODING 70296 +BBX 11 8 3 0 +BITMAP +7000 +8E00 +9100 +2100 +0200 +0200 +0100 +00E0 +ENDCHAR +STARTCHAR uni011299 +ENCODING 70297 +BBX 10 10 3 0 +BITMAP +FFC0 +8000 +8080 +8080 +8080 +8080 +4180 +3E80 +0080 +0040 +ENDCHAR +STARTCHAR uni01129A +ENCODING 70298 +BBX 9 8 4 0 +BITMAP +F000 +0C00 +0200 +0500 +0880 +1080 +2480 +0300 +ENDCHAR +STARTCHAR uni01129B +ENCODING 70299 +BBX 8 8 4 0 +BITMAP +02 +82 +46 +3A +02 +02 +02 +01 +ENDCHAR +STARTCHAR uni01129C +ENCODING 70300 +BBX 10 8 3 0 +BITMAP +6200 +9200 +9200 +1200 +1200 +1200 +0D00 +00C0 +ENDCHAR +STARTCHAR uni01129D +ENCODING 70301 +BBX 10 8 3 0 +BITMAP +6080 +8080 +8880 +7100 +8100 +8100 +4680 +3840 +ENDCHAR +STARTCHAR uni01129F +ENCODING 70303 +BBX 8 8 4 0 +BITMAP +7E +81 +01 +01 +3E +01 +81 +7E +ENDCHAR +STARTCHAR uni0112A0 +ENCODING 70304 +BBX 10 10 3 0 +BITMAP +C700 +2880 +1080 +1080 +1080 +1040 +1040 +1040 +1040 +0040 +ENDCHAR +STARTCHAR uni0112A1 +ENCODING 70305 +BBX 10 8 3 0 +BITMAP +FF80 +4080 +2180 +2280 +2480 +4880 +3080 +0040 +ENDCHAR +STARTCHAR uni0112A2 +ENCODING 70306 +BBX 7 8 5 0 +BITMAP +86 +48 +30 +48 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni0112A3 +ENCODING 70307 +BBX 11 10 3 0 +BITMAP +7820 +84C0 +0300 +0600 +0A00 +1100 +6100 +8100 +0100 +0200 +ENDCHAR +STARTCHAR uni0112A4 +ENCODING 70308 +BBX 9 10 4 0 +BITMAP +7800 +8400 +8000 +4000 +4000 +3E00 +4000 +4000 +2000 +1F80 +ENDCHAR +STARTCHAR uni0112A5 +ENCODING 70309 +BBX 8 8 4 0 +BITMAP +E1 +12 +14 +18 +1E +21 +01 +01 +ENDCHAR +STARTCHAR uni0112A6 +ENCODING 70310 +BBX 6 8 5 0 +BITMAP +30 +40 +80 +98 +64 +04 +08 +F0 +ENDCHAR +STARTCHAR uni0112A7 +ENCODING 70311 +BBX 12 8 2 0 +BITMAP +3800 +4700 +8880 +1140 +0240 +0040 +0040 +0030 +ENDCHAR +STARTCHAR uni0112A8 +ENCODING 70312 +BBX 10 8 3 0 +BITMAP +F800 +0400 +0400 +FF80 +0440 +0440 +0440 +F840 +ENDCHAR +STARTCHAR uni0112A9 +ENCODING 70313 +BBX 7 8 5 0 +BITMAP +E0 +E0 +E0 +00 +00 +0E +0E +0E +ENDCHAR +STARTCHAR uni0112B0 +ENCODING 70320 +BBX 8 7 4 2 +BITMAP +B6 +49 +49 +49 +49 +49 +49 +ENDCHAR +STARTCHAR uni0112B1 +ENCODING 70321 +BBX 10 7 3 2 +BITMAP +B640 +4940 +4940 +4940 +4940 +4940 +4940 +ENDCHAR +STARTCHAR uni0112B2 +ENCODING 70322 +BBX 6 7 5 2 +BITMAP +0C +10 +60 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni0112B3 +ENCODING 70323 +BBX 9 6 4 2 +BITMAP +3D80 +4200 +A500 +A500 +A500 +4200 +ENDCHAR +STARTCHAR uni0112B4 +ENCODING 70324 +BBX 6 7 5 2 +BITMAP +78 +84 +84 +B8 +84 +84 +78 +ENDCHAR +STARTCHAR uni0112B5 +ENCODING 70325 +BBX 6 9 5 2 +BITMAP +30 +48 +78 +84 +84 +B8 +84 +84 +78 +ENDCHAR +STARTCHAR uni0112B6 +ENCODING 70326 +BBX 8 9 4 2 +BITMAP +3C +02 +B6 +49 +49 +49 +49 +49 +49 +ENDCHAR +STARTCHAR uni0112B7 +ENCODING 70327 +BBX 8 11 4 2 +BITMAP +3C +02 +3E +02 +B6 +49 +49 +49 +49 +49 +49 +ENDCHAR +STARTCHAR uni0112B8 +ENCODING 70328 +BBX 8 10 4 2 +BITMAP +40 +7C +02 +B6 +49 +49 +49 +49 +49 +49 +ENDCHAR +STARTCHAR uni0112B9 +ENCODING 70329 +BBX 8 10 4 2 +BITMAP +40 +7C +0A +BE +49 +49 +49 +49 +49 +49 +ENDCHAR +STARTCHAR uni0112BA +ENCODING 70330 +BBX 8 7 4 2 +BITMAP +6C +92 +92 +12 +12 +12 +11 +ENDCHAR +STARTCHAR uni0112BB +ENCODING 70331 +BBX 6 7 5 2 +BITMAP +98 +84 +84 +78 +04 +04 +38 +ENDCHAR +STARTCHAR uni0112BC +ENCODING 70332 +BBX 7 7 5 2 +BITMAP +F8 +84 +8A +92 +A2 +82 +44 +ENDCHAR +STARTCHAR uni0112BD +ENCODING 70333 +BBX 7 7 5 2 +BITMAP +12 +12 +12 +72 +92 +92 +62 +ENDCHAR +STARTCHAR uni0112BE +ENCODING 70334 +BBX 7 7 5 2 +BITMAP +78 +84 +22 +56 +5A +22 +04 +ENDCHAR +STARTCHAR uni0112BF +ENCODING 70335 +BBX 8 7 4 2 +BITMAP +F8 +04 +04 +04 +F9 +04 +04 +ENDCHAR +STARTCHAR uni0112C0 +ENCODING 70336 +BBX 8 7 4 2 +BITMAP +81 +42 +24 +18 +24 +24 +18 +ENDCHAR +STARTCHAR uni0112C1 +ENCODING 70337 +BBX 8 7 4 2 +BITMAP +F8 +40 +38 +42 +85 +85 +7E +ENDCHAR +STARTCHAR uni0112C2 +ENCODING 70338 +BBX 7 7 5 2 +BITMAP +3C +42 +42 +42 +A4 +A8 +46 +ENDCHAR +STARTCHAR uni0112C3 +ENCODING 70339 +BBX 9 7 4 2 +BITMAP +4800 +D980 +6A00 +4A00 +4D00 +4D00 +4A00 +ENDCHAR +STARTCHAR uni0112C4 +ENCODING 70340 +BBX 9 7 4 2 +BITMAP +0F00 +1080 +2080 +6300 +9480 +9480 +6300 +ENDCHAR +STARTCHAR uni0112C5 +ENCODING 70341 +BBX 8 7 4 2 +BITMAP +F8 +04 +04 +79 +04 +04 +F8 +ENDCHAR +STARTCHAR uni0112C6 +ENCODING 70342 +BBX 8 7 4 2 +BITMAP +FF +40 +80 +80 +80 +80 +7F +ENDCHAR +STARTCHAR uni0112C7 +ENCODING 70343 +BBX 8 7 4 2 +BITMAP +3E +41 +A1 +9E +80 +80 +7F +ENDCHAR +STARTCHAR uni0112C8 +ENCODING 70344 +BBX 7 7 5 2 +BITMAP +78 +9C +26 +46 +0A +12 +04 +ENDCHAR +STARTCHAR uni0112C9 +ENCODING 70345 +BBX 7 7 5 2 +BITMAP +FE +40 +20 +10 +20 +40 +FE +ENDCHAR +STARTCHAR uni0112CA +ENCODING 70346 +BBX 6 7 5 2 +BITMAP +F8 +04 +04 +78 +04 +04 +F8 +ENDCHAR +STARTCHAR uni0112CB +ENCODING 70347 +BBX 8 7 4 2 +BITMAP +F0 +40 +86 +89 +89 +89 +7E +ENDCHAR +STARTCHAR uni0112CC +ENCODING 70348 +BBX 7 7 5 2 +BITMAP +92 +92 +92 +92 +92 +40 +20 +ENDCHAR +STARTCHAR uni0112CD +ENCODING 70349 +BBX 7 7 5 2 +BITMAP +78 +84 +8A +72 +02 +82 +7C +ENDCHAR +STARTCHAR uni0112CE +ENCODING 70350 +BBX 8 7 4 2 +BITMAP +92 +B6 +DA +92 +92 +92 +91 +ENDCHAR +STARTCHAR uni0112CF +ENCODING 70351 +BBX 8 7 4 2 +BITMAP +7C +82 +E2 +92 +62 +0E +11 +ENDCHAR +STARTCHAR uni0112D0 +ENCODING 70352 +BBX 8 7 4 2 +BITMAP +7E +81 +01 +31 +4A +44 +3B +ENDCHAR +STARTCHAR uni0112D1 +ENCODING 70353 +BBX 8 6 4 3 +BITMAP +81 +82 +84 +48 +50 +60 +ENDCHAR +STARTCHAR uni0112D2 +ENCODING 70354 +BBX 8 7 4 2 +BITMAP +04 +8C +74 +04 +04 +05 +02 +ENDCHAR +STARTCHAR uni0112D3 +ENCODING 70355 +BBX 7 8 5 2 +BITMAP +80 +78 +04 +0A +12 +22 +42 +0C +ENDCHAR +STARTCHAR uni0112D4 +ENCODING 70356 +BBX 8 7 4 2 +BITMAP +91 +91 +91 +92 +AA +44 +44 +ENDCHAR +STARTCHAR uni0112D5 +ENCODING 70357 +BBX 6 7 5 2 +BITMAP +98 +A4 +A4 +78 +04 +24 +18 +ENDCHAR +STARTCHAR uni0112D6 +ENCODING 70358 +BBX 9 7 4 2 +BITMAP +4480 +A480 +A480 +4900 +5500 +2200 +2200 +ENDCHAR +STARTCHAR uni0112D7 +ENCODING 70359 +BBX 8 7 4 2 +BITMAP +8C +52 +62 +42 +42 +42 +41 +ENDCHAR +STARTCHAR uni0112D8 +ENCODING 70360 +BBX 8 7 4 2 +BITMAP +FC +12 +12 +62 +12 +12 +E1 +ENDCHAR +STARTCHAR uni0112D9 +ENCODING 70361 +BBX 6 7 5 2 +BITMAP +F8 +04 +04 +04 +F8 +04 +04 +ENDCHAR +STARTCHAR uni0112DA +ENCODING 70362 +BBX 6 7 5 2 +BITMAP +80 +70 +08 +10 +38 +44 +04 +ENDCHAR +STARTCHAR uni0112DB +ENCODING 70363 +BBX 6 7 5 2 +BITMAP +78 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0112DC +ENCODING 70364 +BBX 9 7 4 2 +BITMAP +FF00 +8200 +8200 +E200 +9200 +9200 +6180 +ENDCHAR +STARTCHAR uni0112DD +ENCODING 70365 +BBX 9 7 4 2 +BITMAP +FF00 +8200 +8200 +8200 +8200 +8200 +6180 +ENDCHAR +STARTCHAR uni0112DE +ENCODING 70366 +BBX 7 7 5 2 +BITMAP +78 +84 +0A +12 +22 +42 +04 +ENDCHAR +STARTCHAR uni0112DF +ENCODING 70367 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0112E0 +ENCODING 70368 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 7 -3 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0112E1 +ENCODING 70369 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 9 -6 2 +BITMAP +60 +90 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0112E2 +ENCODING 70370 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 9 -6 2 +BITMAP +60 +90 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0112E3 +ENCODING 70371 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -11 -1 +BITMAP +82 +7C +ENDCHAR +STARTCHAR uni0112E4 +ENCODING 70372 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -12 -2 +BITMAP +4100 +3E00 +8080 +7F00 +ENDCHAR +STARTCHAR uni0112E5 +ENCODING 70373 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 4 -14 9 +BITMAP +7FC0 +8020 +0020 +0020 +ENDCHAR +STARTCHAR uni0112E6 +ENCODING 70374 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 4 -14 9 +BITMAP +7FC0 +8020 +3FE0 +4020 +ENDCHAR +STARTCHAR uni0112E7 +ENCODING 70375 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 3 -13 10 +BITMAP +8000 +7F80 +0040 +ENDCHAR +STARTCHAR uni0112E8 +ENCODING 70376 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 3 -12 10 +BITMAP +8300 +7C80 +0300 +ENDCHAR +STARTCHAR uni0112E9 +ENCODING 70377 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0112EA +ENCODING 70378 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -10 -2 +BITMAP +C0 +60 +30 +ENDCHAR +STARTCHAR uni0112F0 +ENCODING 70384 +BBX 6 6 5 2 +BITMAP +78 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0112F1 +ENCODING 70385 +BBX 7 8 5 2 +BITMAP +70 +88 +88 +98 +68 +08 +08 +06 +ENDCHAR +STARTCHAR uni0112F2 +ENCODING 70386 +BBX 6 7 5 2 +BITMAP +F8 +04 +04 +04 +F8 +04 +04 +ENDCHAR +STARTCHAR uni0112F3 +ENCODING 70387 +BBX 6 7 5 2 +BITMAP +F8 +04 +04 +78 +04 +04 +F8 +ENDCHAR +STARTCHAR uni0112F4 +ENCODING 70388 +BBX 8 7 4 2 +BITMAP +01 +42 +A4 +18 +24 +24 +18 +ENDCHAR +STARTCHAR uni0112F5 +ENCODING 70389 +BBX 8 7 4 2 +BITMAP +81 +81 +7E +02 +04 +04 +03 +ENDCHAR +STARTCHAR uni0112F6 +ENCODING 70390 +BBX 6 7 5 2 +BITMAP +7C +80 +80 +78 +80 +80 +7C +ENDCHAR +STARTCHAR uni0112F7 +ENCODING 70391 +BBX 8 7 4 2 +BITMAP +86 +89 +89 +87 +41 +41 +3E +ENDCHAR +STARTCHAR uni0112F8 +ENCODING 70392 +BBX 8 8 4 2 +BITMAP +0F +30 +40 +80 +80 +40 +30 +0F +ENDCHAR +STARTCHAR uni0112F9 +ENCODING 70393 +BBX 7 7 5 2 +BITMAP +40 +84 +88 +90 +A0 +42 +3C +ENDCHAR +STARTCHAR uni011300 +ENCODING 70400 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -11 11 +BITMAP +70 +88 +70 +ENDCHAR +STARTCHAR uni011301 +ENCODING 70401 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -12 11 +BITMAP +92 +82 +7C +ENDCHAR +STARTCHAR uni011302 +ENCODING 70402 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -4 4 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni011303 +ENCODING 70403 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 10 -4 1 +BITMAP +60 +90 +90 +60 +00 +00 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni011305 +ENCODING 70405 +BBX 10 8 3 2 +BITMAP +1F00 +2440 +2440 +7FC0 +8540 +8540 +8540 +79C0 +ENDCHAR +STARTCHAR uni011306 +ENCODING 70406 +BBX 14 10 1 0 +BITMAP +07C0 +0910 +0910 +7FF8 +A154 +A154 +A154 +9E74 +4004 +3FF8 +ENDCHAR +STARTCHAR uni011307 +ENCODING 70407 +BBX 8 8 4 2 +BITMAP +76 +A9 +A9 +49 +02 +7C +80 +7F +ENDCHAR +STARTCHAR uni011308 +ENCODING 70408 +BBX 11 8 3 2 +BITMAP +3FC0 +2880 +2880 +A8A0 +2880 +2880 +2880 +2700 +ENDCHAR +STARTCHAR uni011309 +ENCODING 70409 +BBX 8 8 5 2 +BITMAP +70 +A8 +A4 +44 +08 +70 +80 +7F +ENDCHAR +STARTCHAR uni01130A +ENCODING 70410 +BBX 12 8 2 2 +BITMAP +6000 +B000 +B3F0 +55A0 +12A0 +60A0 +8000 +7FF0 +ENDCHAR +STARTCHAR uni01130B +ENCODING 70411 +BBX 11 8 3 2 +BITMAP +C060 +C060 +8020 +5F40 +2080 +4440 +4440 +3B80 +ENDCHAR +STARTCHAR uni01130C +ENCODING 70412 +BBX 11 8 4 2 +BITMAP +37E0 +4A40 +8A40 +8A40 +8A40 +CA40 +AA40 +4980 +ENDCHAR +STARTCHAR uni01130F +ENCODING 70415 +BBX 14 8 2 2 +BITMAP +31BC +4A48 +8AA8 +8AA8 +8AA8 +CAA8 +AAA8 +4E48 +ENDCHAR +STARTCHAR uni011310 +ENCODING 70416 +BBX 16 10 0 2 +BITMAP +4000 +A000 +AC6F +B292 +B2AA +B2AA +B2AA +FAAA +B6AA +6B92 +ENDCHAR +STARTCHAR uni011313 +ENCODING 70419 +BBX 8 9 4 1 +BITMAP +3C +42 +81 +81 +E1 +93 +94 +63 +02 +ENDCHAR +STARTCHAR uni011314 +ENCODING 70420 +BBX 13 9 1 1 +BITMAP +31B8 +4A50 +8C50 +8C50 +CC50 +AE50 +B550 +4A50 +0800 +ENDCHAR +STARTCHAR uni011315 +ENCODING 70421 +BBX 10 8 3 2 +BITMAP +1F00 +2400 +2400 +7F80 +8540 +8540 +9540 +6880 +ENDCHAR +STARTCHAR uni011316 +ENCODING 70422 +BBX 10 8 4 2 +BITMAP +3C40 +4240 +8140 +8140 +E140 +9340 +9440 +63C0 +ENDCHAR +STARTCHAR uni011317 +ENCODING 70423 +BBX 9 8 3 2 +BITMAP +2300 +2480 +2480 +2480 +1C80 +0080 +0100 +FE00 +ENDCHAR +STARTCHAR uni011318 +ENCODING 70424 +BBX 9 8 5 2 +BITMAP +3280 +4A80 +8A80 +8A80 +8A80 +CA80 +AA80 +4F80 +ENDCHAR +STARTCHAR uni011319 +ENCODING 70425 +BBX 8 10 4 0 +BITMAP +76 +A9 +A9 +49 +02 +7C +80 +7F +10 +10 +ENDCHAR +STARTCHAR uni01131A +ENCODING 70426 +BBX 12 8 2 2 +BITMAP +0E10 +1510 +1490 +0890 +0090 +0110 +0610 +FFF0 +ENDCHAR +STARTCHAR uni01131B +ENCODING 70427 +BBX 13 8 2 2 +BITMAP +0E10 +1528 +14A8 +08A8 +00A8 +0128 +0628 +FFF8 +ENDCHAR +STARTCHAR uni01131C +ENCODING 70428 +BBX 11 9 1 1 +BITMAP +7DC0 +9220 +6220 +0020 +7FC0 +8000 +87C0 +7820 +01C0 +ENDCHAR +STARTCHAR uni01131D +ENCODING 70429 +BBX 11 8 3 2 +BITMAP +FD20 +8920 +8920 +8920 +8920 +BF20 +A920 +B8C0 +ENDCHAR +STARTCHAR uni01131E +ENCODING 70430 +BBX 12 10 3 0 +BITMAP +79E0 +9540 +6340 +0340 +07E0 +8850 +8850 +8790 +4010 +3FE0 +ENDCHAR +STARTCHAR uni01131F +ENCODING 70431 +BBX 9 7 3 0 +BITMAP +8000 +8000 +8000 +8000 +FF80 +1000 +1000 +ENDCHAR +STARTCHAR uni011320 +ENCODING 70432 +BBX 7 7 5 2 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni011321 +ENCODING 70433 +BBX 9 8 4 2 +BITMAP +7100 +A880 +A880 +4880 +1080 +6080 +8080 +7F00 +ENDCHAR +STARTCHAR uni011322 +ENCODING 70434 +BBX 9 8 4 2 +BITMAP +7100 +AA80 +AA80 +4980 +1080 +6080 +8080 +7F00 +ENDCHAR +STARTCHAR uni011323 +ENCODING 70435 +BBX 16 8 0 2 +BITMAP +3BBF +4448 +8AA8 +CAA8 +AAA8 +AAA8 +4448 +0008 +ENDCHAR +STARTCHAR uni011324 +ENCODING 70436 +BBX 8 9 4 1 +BITMAP +3F +24 +24 +24 +7E +85 +79 +02 +FC +ENDCHAR +STARTCHAR uni011325 +ENCODING 70437 +BBX 10 8 4 2 +BITMAP +9380 +9540 +9540 +9240 +9040 +9040 +6880 +0700 +ENDCHAR +STARTCHAR uni011326 +ENCODING 70438 +BBX 8 10 5 0 +BITMAP +70 +A8 +A8 +48 +10 +60 +80 +7F +08 +08 +ENDCHAR +STARTCHAR uni011327 +ENCODING 70439 +BBX 10 8 4 2 +BITMAP +9180 +9040 +9040 +9040 +9040 +9040 +6880 +0700 +ENDCHAR +STARTCHAR uni011328 +ENCODING 70440 +BBX 10 8 3 2 +BITMAP +1F80 +1200 +1200 +1380 +1240 +1240 +0080 +FF00 +ENDCHAR +STARTCHAR uni01132A +ENCODING 70442 +BBX 9 8 5 2 +BITMAP +3000 +4800 +8880 +8880 +8880 +C880 +A880 +4F80 +ENDCHAR +STARTCHAR uni01132B +ENCODING 70443 +BBX 9 8 5 2 +BITMAP +3100 +4A80 +8A80 +8A80 +8A80 +CA80 +AA80 +4F80 +ENDCHAR +STARTCHAR uni01132C +ENCODING 70444 +BBX 10 8 4 2 +BITMAP +3640 +4940 +8940 +8940 +8940 +C940 +AA40 +4BC0 +ENDCHAR +STARTCHAR uni01132D +ENCODING 70445 +BBX 10 8 3 2 +BITMAP +7180 +AA40 +4A40 +0A40 +0440 +0040 +0080 +FF00 +ENDCHAR +STARTCHAR uni01132E +ENCODING 70446 +BBX 7 8 4 2 +BITMAP +78 +A4 +44 +18 +60 +80 +82 +7C +ENDCHAR +STARTCHAR uni01132F +ENCODING 70447 +BBX 8 8 4 2 +BITMAP +91 +91 +91 +91 +91 +91 +91 +7F +ENDCHAR +STARTCHAR uni011330 +ENCODING 70448 +BBX 8 8 5 2 +BITMAP +FF +A4 +A4 +A4 +A4 +A4 +A4 +98 +ENDCHAR +STARTCHAR uni011332 +ENCODING 70450 +BBX 11 8 3 2 +BITMAP +3E40 +4120 +80A0 +A4A0 +A4A0 +9B20 +4040 +3F80 +ENDCHAR +STARTCHAR uni011333 +ENCODING 70451 +BBX 12 8 4 2 +BITMAP +33C0 +4C20 +8420 +8420 +E420 +94C0 +9500 +65F0 +ENDCHAR +STARTCHAR uni011335 +ENCODING 70453 +BBX 10 8 3 2 +BITMAP +3840 +4640 +8140 +8140 +E140 +9140 +9240 +67C0 +ENDCHAR +STARTCHAR uni011336 +ENCODING 70454 +BBX 10 8 3 2 +BITMAP +9FC0 +9240 +9240 +9240 +9240 +9240 +9240 +6180 +ENDCHAR +STARTCHAR uni011337 +ENCODING 70455 +BBX 12 10 1 0 +BITMAP +3820 +4450 +8250 +8250 +E220 +9250 +9490 +67E0 +0100 +0200 +ENDCHAR +STARTCHAR uni011338 +ENCODING 70456 +BBX 12 8 2 2 +BITMAP +3B20 +4490 +8490 +8490 +E490 +9490 +9490 +6460 +ENDCHAR +STARTCHAR uni011339 +ENCODING 70457 +BBX 13 8 2 2 +BITMAP +1850 +24A8 +42A8 +62A8 +54A8 +27A8 +0008 +FFF0 +ENDCHAR +STARTCHAR uni01133B +ENCODING 70459 +BBX 2 2 3 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni01133C +ENCODING 70460 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -11 -1 +BITMAP +C6 +C6 +ENDCHAR +STARTCHAR uni01133D +ENCODING 70461 +BBX 3 7 6 2 +BITMAP +20 +40 +80 +40 +20 +40 +80 +ENDCHAR +STARTCHAR uni01133E +ENCODING 70462 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 8 -5 2 +BITMAP +F8 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni01133F +ENCODING 70463 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 12 -6 2 +BITMAP +70 +88 +88 +48 +08 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni011340 +ENCODING 70464 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -10 9 +BITMAP +70 +88 +B0 +40 +20 +ENDCHAR +STARTCHAR uni011341 +ENCODING 70465 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -9 9 +BITMAP +FE +0A +0E +ENDCHAR +STARTCHAR uni011342 +ENCODING 70466 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 9 -9 5 +BITMAP +0700 +0880 +FE80 +0A80 +0E80 +0080 +0080 +0480 +0300 +ENDCHAR +STARTCHAR uni011343 +ENCODING 70467 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 8 -6 -2 +BITMAP +3C +04 +04 +04 +04 +64 +94 +78 +ENDCHAR +STARTCHAR uni011344 +ENCODING 70468 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 8 -9 -2 +BITMAP +0780 +0080 +0080 +0080 +0080 +6C80 +9280 +7F00 +ENDCHAR +STARTCHAR uni011347 +ENCODING 70471 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 8 -16 2 +BITMAP +30 +48 +88 +88 +C8 +A8 +A8 +48 +ENDCHAR +STARTCHAR uni011348 +ENCODING 70472 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 8 -16 2 +BITMAP +66 +99 +99 +99 +99 +DD +BB +55 +ENDCHAR +STARTCHAR uni01134B +ENCODING 70475 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 8 -16 2 +BITMAP +600F +900A +900A +900A +D00A +B00A +B00A +500A +ENDCHAR +STARTCHAR uni01134C +ENCODING 70476 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 8 -16 2 +BITMAP +601F +902A +904A +906A +D05A +B05A +B05A +502A +ENDCHAR +STARTCHAR uni01134D +ENCODING 70477 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -5 9 +BITMAP +78 +80 +70 +80 +60 +ENDCHAR +STARTCHAR uni011350 +ENCODING 70480 +BBX 10 14 2 -1 +BITMAP +01C0 +0200 +0400 +3F00 +4480 +8440 +8440 +E440 +94C0 +9500 +64C0 +0C80 +1300 +0C00 +ENDCHAR +STARTCHAR uni011357 +ENCODING 70487 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 8 -7 2 +BITMAP +3E +54 +94 +D4 +B4 +B4 +B4 +54 +ENDCHAR +STARTCHAR uni01135D +ENCODING 70493 +BBX 7 12 3 2 +BITMAP +08 +04 +02 +1C +20 +7C +80 +7C +80 +7C +40 +3E +ENDCHAR +STARTCHAR uni01135E +ENCODING 70494 +BBX 10 9 3 1 +BITMAP +8C40 +9240 +9240 +8C40 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni01135F +ENCODING 70495 +BBX 12 9 2 1 +BITMAP +A650 +A950 +A950 +A650 +A050 +9090 +8F10 +4020 +3FC0 +ENDCHAR +STARTCHAR uni011360 +ENCODING 70496 +BBX 14 8 1 2 +BITMAP +C1B8 +C1B4 +8084 +5D18 +2204 +4904 +4944 +3638 +ENDCHAR +STARTCHAR uni011361 +ENCODING 70497 +BBX 14 8 1 2 +BITMAP +6FB8 +9534 +9504 +9518 +9504 +D504 +B544 +5238 +ENDCHAR +STARTCHAR uni011362 +ENCODING 70498 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 8 -9 2 +BITMAP +6F80 +9500 +9500 +9500 +9500 +D500 +B500 +5200 +ENDCHAR +STARTCHAR uni011363 +ENCODING 70499 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 12 -11 0 +BITMAP +03C0 +0420 +6FA0 +9520 +9520 +9520 +9520 +D520 +B520 +5240 +0880 +0F00 +ENDCHAR +STARTCHAR uni011366 +ENCODING 70502 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -10 10 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni011367 +ENCODING 70503 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 5 -12 9 +BITMAP +3F00 +2400 +7F00 +8480 +7900 +ENDCHAR +STARTCHAR uni011368 +ENCODING 70504 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 4 -14 10 +BITMAP +6000 +9000 +6000 +7FF8 +ENDCHAR +STARTCHAR uni011369 +ENCODING 70505 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 4 -12 10 +BITMAP +F800 +AC00 +B200 +BFC0 +ENDCHAR +STARTCHAR uni01136A +ENCODING 70506 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 5 -12 9 +BITMAP +3F20 +2420 +7FE0 +8400 +7800 +ENDCHAR +STARTCHAR uni01136B +ENCODING 70507 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 5 -14 9 +BITMAP +27F0 +4440 +8470 +8448 +7FF0 +ENDCHAR +STARTCHAR uni01136C +ENCODING 70508 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 5 -14 9 +BITMAP +3F00 +2400 +7FE0 +8540 +7940 +ENDCHAR +STARTCHAR uni011370 +ENCODING 70512 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 5 -14 9 +BITMAP +3F20 +2420 +7FE0 +84A0 +78E0 +ENDCHAR +STARTCHAR uni011371 +ENCODING 70513 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 5 -14 9 +BITMAP +3F00 +2400 +7FC0 +94A0 +6840 +ENDCHAR +STARTCHAR uni011372 +ENCODING 70514 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -12 9 +BITMAP +7E +5C +54 +04 +F8 +ENDCHAR +STARTCHAR uni011373 +ENCODING 70515 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -13 10 +BITMAP +6700 +9680 +D280 +DE80 +ENDCHAR +STARTCHAR uni011374 +ENCODING 70516 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -11 10 +BITMAP +88 +88 +88 +F8 +ENDCHAR +STARTCHAR uni011400 +ENCODING 70656 +BBX 15 12 1 -1 +BITMAP +01FE +00C0 +1CC0 +9AC0 +83C0 +82C0 +82C0 +C6C0 +7CC0 +38C0 +00C0 +0040 +ENDCHAR +STARTCHAR uni011401 +ENCODING 70657 +BBX 15 12 1 -1 +BITMAP +01FE +00CC +1CCC +9ACC +83CC +82CC +82CC +C6CC +7CCC +38CC +00CC +0044 +ENDCHAR +STARTCHAR uni011402 +ENCODING 70658 +BBX 11 15 0 -2 +BITMAP +64C0 +3B80 +0000 +0000 +30C0 +69A0 +CB20 +8A20 +9A60 +B2C0 +6180 +0C00 +1200 +0100 +0080 +ENDCHAR +STARTCHAR uni011403 +ENCODING 70659 +BBX 16 16 0 -2 +BITMAP +0070 +64C8 +3B84 +003F +000C +30CC +69AC +CB2C +8A2C +9A6C +B2CC +618C +0C0C +120C +010C +0084 +ENDCHAR +STARTCHAR uni011404 +ENCODING 70660 +BBX 16 12 0 -1 +BITMAP +FFFF +0180 +00C0 +00C0 +01C0 +0F80 +4180 +40C0 +20C0 +10C0 +09C0 +0780 +ENDCHAR +STARTCHAR uni011405 +ENCODING 70661 +BBX 16 13 0 -2 +BITMAP +FFFF +0180 +00C0 +00C0 +01C0 +0F9C +41B6 +40E6 +20C6 +10C6 +09C6 +0786 +0002 +ENDCHAR +STARTCHAR uni011406 +ENCODING 70662 +BBX 9 13 2 -2 +BITMAP +FF80 +2180 +2180 +2180 +2180 +A780 +7F80 +2180 +A180 +6180 +2380 +0400 +0380 +ENDCHAR +STARTCHAR uni011407 +ENCODING 70663 +BBX 10 13 2 -2 +BITMAP +FF80 +2180 +2180 +2180 +2180 +A780 +7F80 +2180 +A380 +6400 +2380 +0200 +01C0 +ENDCHAR +STARTCHAR uni011408 +ENCODING 70664 +BBX 9 11 3 1 +BITMAP +1C00 +3E00 +6300 +C180 +0180 +0180 +4180 +C180 +C300 +7E00 +3C00 +ENDCHAR +STARTCHAR uni011409 +ENCODING 70665 +BBX 10 14 2 -2 +BITMAP +0E00 +1F00 +3180 +60C0 +00C0 +00C0 +30C0 +60C0 +6180 +BF00 +9E00 +C000 +7F00 +0080 +ENDCHAR +STARTCHAR uni01140A +ENCODING 70666 +BBX 10 12 2 -1 +BITMAP +01C0 +07C0 +1EC0 +38C0 +30C0 +00C0 +00C0 +00C0 +C0C0 +60C0 +38C0 +0F80 +ENDCHAR +STARTCHAR uni01140B +ENCODING 70667 +BBX 11 15 1 -1 +BITMAP +8000 +47C0 +3820 +00E0 +03E0 +0F60 +1C60 +1860 +0060 +0060 +0060 +6060 +3060 +1C60 +07C0 +ENDCHAR +STARTCHAR uni01140C +ENCODING 70668 +BBX 14 14 1 -1 +BITMAP +000C +9E18 +6BF0 +08C0 +10C0 +20C0 +38C0 +0CC0 +86C0 +86C0 +4EC0 +3CC0 +00C0 +0040 +ENDCHAR +STARTCHAR uni01140D +ENCODING 70669 +BBX 14 15 1 -1 +BITMAP +0738 +01E4 +9C0C +6BF8 +08C0 +10C0 +20C0 +38C0 +0CC0 +86C0 +86C0 +4EC0 +3CC0 +00C0 +0040 +ENDCHAR +STARTCHAR uni01140E +ENCODING 70670 +BBX 16 12 0 -1 +BITMAP +FFFF +0180 +0180 +1D80 +33E0 +2390 +2798 +1D98 +0198 +0198 +0180 +0080 +ENDCHAR +STARTCHAR uni01140F +ENCODING 70671 +BBX 16 12 0 -1 +BITMAP +FFFF +0818 +0818 +19D8 +3338 +6218 +7238 +19D8 +0818 +0C18 +0418 +0008 +ENDCHAR +STARTCHAR uni011410 +ENCODING 70672 +BBX 13 12 3 -1 +BITMAP +7CF8 +C2C0 +C1C0 +60C0 +30C0 +18C0 +88C0 +D8C0 +70C0 +00C0 +00C0 +0040 +ENDCHAR +STARTCHAR uni011411 +ENCODING 70673 +BBX 16 12 0 -1 +BITMAP +FFFF +0C18 +0C18 +07D8 +0218 +0418 +0438 +0478 +03D8 +0018 +0018 +0008 +ENDCHAR +STARTCHAR uni011412 +ENCODING 70674 +BBX 16 11 0 0 +BITMAP +FFFF +0030 +0060 +00C0 +0180 +0300 +0600 +0C30 +1868 +1CA8 +0F90 +ENDCHAR +STARTCHAR uni011413 +ENCODING 70675 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0030 +0060 +00C0 +0100 +03F0 +0618 +0C98 +0958 +0798 +0008 +ENDCHAR +STARTCHAR uni011414 +ENCODING 70676 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0018 +0018 +13F8 +1E18 +1838 +1878 +0CD8 +0798 +0018 +0008 +ENDCHAR +STARTCHAR uni011415 +ENCODING 70677 +BBX 16 13 0 -2 +BITMAP +FFFF +0040 +4FC0 +78C0 +61C0 +63F0 +3758 +1E4C +0C44 +0844 +0C4C +0798 +0030 +ENDCHAR +STARTCHAR uni011416 +ENCODING 70678 +BBX 16 13 0 -2 +BITMAP +FFFF +00C0 +01E0 +0330 +1E18 +1F8C +01CC +00CC +40CC +61CC +338C +1F0C +0E04 +ENDCHAR +STARTCHAR uni011417 +ENCODING 70679 +BBX 10 12 1 -1 +BITMAP +FFC0 +10C0 +10C0 +10C0 +10C0 +19C0 +96C0 +50C0 +30C0 +00C0 +00C0 +0040 +ENDCHAR +STARTCHAR uni011418 +ENCODING 70680 +BBX 14 13 1 -1 +BITMAP +1C00 +3E78 +634C +C184 +018C +0198 +418C +C184 +C31C +7E24 +3C1C +0004 +0004 +ENDCHAR +STARTCHAR uni011419 +ENCODING 70681 +BBX 16 13 0 -2 +BITMAP +FFFF +000E +0078 +03E0 +0700 +0838 +0CEC +0786 +0EE6 +0D16 +0166 +0912 +0660 +ENDCHAR +STARTCHAR uni01141A +ENCODING 70682 +BBX 16 11 0 0 +BITMAP +FFFF +00C0 +00C0 +00C0 +1380 +1E00 +1800 +1800 +1810 +0C70 +07E0 +ENDCHAR +STARTCHAR uni01141B +ENCODING 70683 +BBX 11 12 3 -1 +BITMAP +0C00 +1E00 +3B00 +6180 +C0C0 +C060 +C060 +C060 +C0E0 +61C0 +3380 +1F00 +ENDCHAR +STARTCHAR uni01141C +ENCODING 70684 +BBX 16 11 0 0 +BITMAP +FFFF +00C0 +01C0 +23E0 +2230 +3018 +1018 +1818 +0C30 +07E0 +03C0 +ENDCHAR +STARTCHAR uni01141D +ENCODING 70685 +BBX 16 11 0 0 +BITMAP +FFFF +00C0 +00C0 +00C0 +1380 +1E00 +1800 +1830 +1848 +0C48 +07F0 +ENDCHAR +STARTCHAR uni01141E +ENCODING 70686 +BBX 13 12 3 -1 +BITMAP +7CF8 +C2C0 +81C0 +40C0 +30C0 +60C0 +80C0 +98C0 +78C0 +00C0 +00C0 +0040 +ENDCHAR +STARTCHAR uni01141F +ENCODING 70687 +BBX 16 13 0 -2 +BITMAP +FFFF +0F00 +1980 +10C0 +30E0 +3060 +3060 +0060 +0060 +0060 +0060 +0060 +0020 +ENDCHAR +STARTCHAR uni011420 +ENCODING 70688 +BBX 13 12 3 -1 +BITMAP +E3F8 +D8C0 +CCC0 +6CC0 +3CC0 +78C0 +61C0 +23C0 +1EC0 +00C0 +00C0 +0040 +ENDCHAR +STARTCHAR uni011421 +ENCODING 70689 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0018 +0018 +01F8 +0200 +0600 +0618 +0238 +01F0 +0018 +0008 +ENDCHAR +STARTCHAR uni011422 +ENCODING 70690 +BBX 13 12 3 -1 +BITMAP +73F8 +C8C0 +C0C0 +C0C0 +60C0 +1FC0 +30C0 +60C0 +61C0 +63C0 +1EC0 +0040 +ENDCHAR +STARTCHAR uni011423 +ENCODING 70691 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0018 +0018 +01F8 +0318 +0618 +0C18 +0C18 +0018 +0018 +0008 +ENDCHAR +STARTCHAR uni011424 +ENCODING 70692 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0030 +00E0 +07C0 +0800 +07F0 +00D8 +03D8 +04D8 +08D8 +0048 +ENDCHAR +STARTCHAR uni011425 +ENCODING 70693 +BBX 16 12 0 -1 +BITMAP +FFFF +0618 +0618 +0618 +0618 +0618 +0238 +01D8 +0018 +0018 +0018 +0008 +ENDCHAR +STARTCHAR uni011426 +ENCODING 70694 +BBX 16 13 0 -2 +BITMAP +FFFF +0020 +0020 +0020 +40E0 +7FC0 +2300 +3000 +1860 +0C90 +07E0 +0060 +0018 +ENDCHAR +STARTCHAR uni011427 +ENCODING 70695 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0018 +07D8 +0C78 +0C18 +0C18 +0C38 +07F8 +0018 +0018 +0008 +ENDCHAR +STARTCHAR uni011428 +ENCODING 70696 +BBX 16 13 0 -2 +BITMAP +FFFF +0F00 +1980 +10C0 +30E0 +3060 +3060 +3060 +1000 +0800 +0400 +0200 +0100 +ENDCHAR +STARTCHAR uni011429 +ENCODING 70697 +BBX 16 12 0 -1 +BITMAP +FFFF +0618 +0618 +0618 +0618 +0618 +0FF8 +0618 +0218 +0018 +0018 +0008 +ENDCHAR +STARTCHAR uni01142A +ENCODING 70698 +BBX 16 12 0 -1 +BITMAP +FFFF +0198 +0318 +0618 +0C18 +0818 +07FC +021A +021A +07FA +061A +000A +ENDCHAR +STARTCHAR uni01142B +ENCODING 70699 +BBX 16 12 0 -1 +BITMAP +FFFF +0198 +0198 +0198 +0318 +0E18 +0838 +0678 +01D8 +0018 +0018 +0008 +ENDCHAR +STARTCHAR uni01142C +ENCODING 70700 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0018 +0018 +4798 +6CD8 +3878 +0018 +0018 +0018 +0018 +0008 +ENDCHAR +STARTCHAR uni01142D +ENCODING 70701 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0030 +00E0 +07C0 +0800 +07F0 +00D8 +26D8 +19D8 +00D8 +0048 +ENDCHAR +STARTCHAR uni01142E +ENCODING 70702 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0018 +1C38 +3AF8 +31D8 +3198 +1818 +0818 +0418 +0318 +0008 +ENDCHAR +STARTCHAR uni01142F +ENCODING 70703 +BBX 16 13 0 -2 +BITMAP +FFFF +0018 +0030 +00E0 +07C0 +0800 +07F0 +00D8 +1BD8 +24D8 +24D8 +1048 +0800 +ENDCHAR +STARTCHAR uni011430 +ENCODING 70704 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0018 +03D8 +0F38 +0C18 +0CD8 +0FB8 +0718 +0018 +0018 +0008 +ENDCHAR +STARTCHAR uni011431 +ENCODING 70705 +BBX 14 12 2 -1 +BITMAP +887C +5460 +2260 +51E0 +D860 +8860 +D860 +7060 +0060 +0060 +0060 +0020 +ENDCHAR +STARTCHAR uni011432 +ENCODING 70706 +BBX 16 12 0 -1 +BITMAP +FFFF +0C18 +0E18 +1918 +3098 +3058 +3838 +1F38 +01D8 +0018 +0018 +0008 +ENDCHAR +STARTCHAR uni011433 +ENCODING 70707 +BBX 16 12 0 -1 +BITMAP +FFFF +0318 +0318 +0318 +0B18 +0F18 +0EF8 +0418 +0418 +0218 +0118 +0088 +ENDCHAR +STARTCHAR uni011434 +ENCODING 70708 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0018 +07F8 +0C00 +0C00 +06F0 +0198 +0310 +0300 +0180 +00FC +ENDCHAR +STARTCHAR uni011435 +ENCODING 70709 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 13 -6 -2 +BITMAP +FC +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +10 +ENDCHAR +STARTCHAR uni011436 +ENCODING 70710 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 14 -8 0 +BITMAP +3C +62 +31 +FC +30 +30 +30 +30 +30 +30 +30 +30 +30 +10 +ENDCHAR +STARTCHAR uni011437 +ENCODING 70711 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 16 -9 -2 +BITMAP +7800 +8400 +8400 +1F80 +0600 +0600 +0600 +0600 +0600 +0600 +0600 +0600 +0600 +0600 +0600 +0200 +ENDCHAR +STARTCHAR uni011438 +ENCODING 70712 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -12 -1 +BITMAP +F0 +C8 +04 +ENDCHAR +STARTCHAR uni011439 +ENCODING 70713 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -10 -2 +BITMAP +70 +88 +74 +02 +ENDCHAR +STARTCHAR uni01143A +ENCODING 70714 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -10 -1 +BITMAP +60 +8C +72 +ENDCHAR +STARTCHAR uni01143B +ENCODING 70715 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -10 -1 +BITMAP +60 +80 +60 +8C +72 +ENDCHAR +STARTCHAR uni01143C +ENCODING 70716 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -12 -2 +BITMAP +60 +92 +92 +0C +ENDCHAR +STARTCHAR uni01143D +ENCODING 70717 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 -12 -2 +BITMAP +62 +9C +91 +12 +0C +ENDCHAR +STARTCHAR uni01143E +ENCODING 70718 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 2 -12 11 +BITMAP +C980 +7700 +ENDCHAR +STARTCHAR uni01143F +ENCODING 70719 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 4 -13 10 +BITMAP +3FC0 +0020 +64C0 +BB80 +ENDCHAR +STARTCHAR uni011440 +ENCODING 70720 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 15 -12 -2 +BITMAP +C980 +7740 +00F0 +00C0 +00C0 +00C0 +00C0 +00C0 +00C0 +00C0 +00C0 +00C0 +00C0 +00C0 +0040 +ENDCHAR +STARTCHAR uni011441 +ENCODING 70721 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 16 -13 -2 +BITMAP +3F80 +0040 +64A0 +BBF8 +0060 +0060 +0060 +0060 +0060 +0060 +0060 +0060 +0060 +0060 +0060 +0020 +ENDCHAR +STARTCHAR uni011442 +ENCODING 70722 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 -1 +BITMAP +E0 +10 +08 +ENDCHAR +STARTCHAR uni011443 +ENCODING 70723 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -12 10 +BITMAP +08 +8D +43 +3C +ENDCHAR +STARTCHAR uni011444 +ENCODING 70724 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -10 11 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni011445 +ENCODING 70725 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -4 1 +BITMAP +40 +A0 +A0 +A0 +40 +A0 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni011446 +ENCODING 70726 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 -1 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011447 +ENCODING 70727 +BBX 7 13 6 0 +BITMAP +08 +04 +0C +10 +1C +06 +02 +06 +CC +F0 +20 +10 +08 +ENDCHAR +STARTCHAR uni011448 +ENCODING 70728 +BBX 5 14 6 -1 +BITMAP +60 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +40 +38 +ENDCHAR +STARTCHAR uni011449 +ENCODING 70729 +BBX 13 14 1 0 +BITMAP +0080 +0080 +00C0 +02D0 +01E0 +1C00 +22E0 +0390 +0608 +0100 +8100 +4300 +2700 +1E00 +ENDCHAR +STARTCHAR uni01144A +ENCODING 70730 +BBX 6 13 5 -2 +BITMAP +70 +E8 +CC +CC +4C +3C +18 +30 +60 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni01144B +ENCODING 70731 +BBX 2 12 7 -1 +BITMAP +80 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +40 +ENDCHAR +STARTCHAR uni01144C +ENCODING 70732 +BBX 5 12 6 -1 +BITMAP +90 +D8 +D8 +D8 +D8 +D8 +D8 +D8 +D8 +D8 +D8 +48 +ENDCHAR +STARTCHAR uni01144D +ENCODING 70733 +BBX 5 3 6 -1 +BITMAP +80 +40 +38 +ENDCHAR +STARTCHAR uni01144E +ENCODING 70734 +BBX 3 11 7 1 +BITMAP +20 +40 +80 +40 +20 +00 +20 +40 +80 +40 +20 +ENDCHAR +STARTCHAR uni01144F +ENCODING 70735 +BBX 5 4 6 3 +BITMAP +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni011450 +ENCODING 70736 +BBX 8 7 4 2 +BITMAP +3C +4E +C7 +C3 +E3 +72 +3C +ENDCHAR +STARTCHAR uni011451 +ENCODING 70737 +BBX 6 13 5 -2 +BITMAP +70 +E8 +CC +CC +4C +3C +18 +30 +60 +20 +10 +08 +04 +ENDCHAR +STARTCHAR uni011452 +ENCODING 70738 +BBX 9 13 4 -2 +BITMAP +FC00 +E200 +0100 +0100 +0100 +0300 +3600 +2C00 +3800 +0400 +0200 +0100 +0080 +ENDCHAR +STARTCHAR uni011453 +ENCODING 70739 +BBX 8 13 4 -2 +BITMAP +FC +E2 +02 +02 +3C +02 +01 +33 +2E +3C +04 +02 +01 +ENDCHAR +STARTCHAR uni011454 +ENCODING 70740 +BBX 10 12 4 -1 +BITMAP +2040 +40C0 +8180 +4300 +2600 +1C00 +1800 +3400 +2600 +2600 +2600 +1C00 +ENDCHAR +STARTCHAR uni011455 +ENCODING 70741 +BBX 13 12 1 -2 +BITMAP +0180 +03C0 +0660 +3C30 +3F18 +0398 +0198 +8198 +C398 +6718 +3E18 +1C08 +ENDCHAR +STARTCHAR uni011456 +ENCODING 70742 +BBX 8 13 4 -2 +BITMAP +7C +C0 +80 +C0 +7C +10 +20 +23 +33 +0F +C2 +72 +1C +ENDCHAR +STARTCHAR uni011457 +ENCODING 70743 +BBX 9 12 2 -2 +BITMAP +3C00 +6600 +4300 +C380 +C180 +C180 +0180 +0180 +0180 +0180 +0180 +0080 +ENDCHAR +STARTCHAR uni011458 +ENCODING 70744 +BBX 9 12 2 2 +BITMAP +0380 +0E00 +3C00 +7000 +D800 +0400 +3C00 +7000 +4180 +6300 +3E00 +1C00 +ENDCHAR +STARTCHAR uni011459 +ENCODING 70745 +BBX 9 13 4 -1 +BITMAP +E000 +3800 +0E00 +0300 +0180 +1880 +2880 +4D80 +C700 +8000 +C000 +7000 +1F00 +ENDCHAR +STARTCHAR uni01145B +ENCODING 70747 +BBX 14 5 1 2 +BITMAP +7000 +D8C0 +896C +AD28 +6610 +ENDCHAR +STARTCHAR uni01145D +ENCODING 70749 +BBX 8 11 4 1 +BITMAP +18 +99 +42 +24 +18 +00 +18 +24 +42 +99 +18 +ENDCHAR +STARTCHAR uni01145E +ENCODING 70750 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -11 9 +BITMAP +10 +20 +30 +88 +70 +ENDCHAR +STARTCHAR uni011480 +ENCODING 70784 +BBX 10 11 2 1 +BITMAP +0780 +0840 +0840 +1080 +1C00 +2200 +2200 +4400 +4000 +8000 +8000 +ENDCHAR +STARTCHAR uni011481 +ENCODING 70785 +BBX 16 12 0 -1 +BITMAP +FFFF +000C +0E0C +1F0C +0C8C +408C +3FCC +00CC +031C +03DC +003C +0004 +ENDCHAR +STARTCHAR uni011482 +ENCODING 70786 +BBX 16 13 0 -1 +BITMAP +0006 +FFF7 +006E +3066 +7866 +3466 +8466 +7E66 +0666 +18E6 +1EE6 +01E6 +0022 +ENDCHAR +STARTCHAR uni011483 +ENCODING 70787 +BBX 16 13 0 -1 +BITMAP +0718 +0FDF +1878 +B038 +A718 +9918 +8118 +8118 +C318 +6618 +7E18 +3C18 +0008 +ENDCHAR +STARTCHAR uni011484 +ENCODING 70788 +BBX 16 14 0 -2 +BITMAP +0718 +0FDF +1878 +B038 +A798 +9998 +C398 +6698 +7E98 +3C98 +8198 +E718 +7E08 +3C00 +ENDCHAR +STARTCHAR uni011485 +ENCODING 70789 +BBX 13 15 1 -1 +BITMAP +8610 +8610 +6060 +1F80 +0600 +0600 +8600 +8620 +8670 +C6D8 +4398 +6018 +3018 +1C30 +07E0 +ENDCHAR +STARTCHAR uni011486 +ENCODING 70790 +BBX 13 15 1 -1 +BITMAP +8610 +8610 +6060 +1F80 +0600 +0600 +A600 +A620 +A670 +A6D8 +9398 +5038 +4FD8 +2010 +1FE0 +ENDCHAR +STARTCHAR uni011487 +ENCODING 70791 +BBX 14 13 2 -2 +BITMAP +3F9C +6398 +C398 +F798 +1D98 +F198 +C1D8 +F1F8 +1DB8 +0798 +0398 +00A0 +0018 +ENDCHAR +STARTCHAR uni011488 +ENCODING 70792 +BBX 14 13 2 -2 +BITMAP +3F9C +6398 +C398 +F798 +1D98 +F198 +C1D8 +F1F8 +1D98 +07A0 +0398 +00A0 +0018 +ENDCHAR +STARTCHAR uni011489 +ENCODING 70793 +BBX 13 13 3 -2 +BITMAP +FFF8 +0030 +1E30 +3B30 +71B0 +70B0 +70B0 +2070 +0070 +0030 +0030 +0040 +0030 +ENDCHAR +STARTCHAR uni01148A +ENCODING 70794 +BBX 13 13 3 -2 +BITMAP +FFF8 +0030 +1E30 +3B30 +71B0 +70B0 +70B0 +2070 +0030 +0040 +0030 +0040 +0030 +ENDCHAR +STARTCHAR uni01148B +ENCODING 70795 +BBX 14 13 1 -1 +BITMAP +0030 +00F8 +018C +030C +878C +878C +830C +800C +C00C +406C +609C +330C +0E04 +ENDCHAR +STARTCHAR uni01148C +ENCODING 70796 +BBX 14 15 1 -1 +BITMAP +0008 +0010 +0010 +00D8 +03EC +0634 +8C34 +9E34 +9E34 +8C38 +C030 +41B0 +6270 +3D30 +1810 +ENDCHAR +STARTCHAR uni01148D +ENCODING 70797 +BBX 14 13 1 -1 +BITMAP +00F0 +0318 +060C +0E0C +8E0C +8678 +C0F8 +4078 +600C +300C +180C +0C18 +07F0 +ENDCHAR +STARTCHAR uni01148E +ENCODING 70798 +BBX 14 15 1 -1 +BITMAP +0008 +0010 +0010 +07D8 +086C +1C34 +1C34 +9C34 +89E4 +83F8 +C1E0 +4030 +6030 +3070 +1FE0 +ENDCHAR +STARTCHAR uni01148F +ENCODING 70799 +BBX 16 12 0 -1 +BITMAP +FFFF +0060 +0060 +01F8 +0764 +3C62 +3062 +3C6E +076C +01E0 +00E0 +0020 +ENDCHAR +STARTCHAR uni011490 +ENCODING 70800 +BBX 14 13 2 -1 +BITMAP +4000 +E23C +E330 +C530 +7930 +0130 +0630 +7830 +7E30 +01B0 +0070 +0030 +0010 +ENDCHAR +STARTCHAR uni011491 +ENCODING 70801 +BBX 14 12 2 -1 +BITMAP +3E7C +7160 +E0E0 +E060 +FC60 +4660 +0660 +0660 +1C60 +7860 +2060 +0020 +ENDCHAR +STARTCHAR uni011492 +ENCODING 70802 +BBX 16 12 0 -1 +BITMAP +FFFF +1818 +3018 +3818 +1F98 +0198 +0618 +0C18 +1F18 +01D8 +0038 +0008 +ENDCHAR +STARTCHAR uni011493 +ENCODING 70803 +BBX 12 13 2 -1 +BITMAP +1C00 +2200 +2200 +1C00 +0800 +8800 +8820 +8870 +C7B0 +4030 +6030 +3060 +1F80 +ENDCHAR +STARTCHAR uni011494 +ENCODING 70804 +BBX 16 12 0 -1 +BITMAP +FFFF +1800 +1800 +1C00 +1B00 +18FC +180C +180C +180C +1818 +1C30 +0FC0 +ENDCHAR +STARTCHAR uni011495 +ENCODING 70805 +BBX 16 12 0 -1 +BITMAP +FFFF +1C00 +1BE0 +1820 +1860 +1CC0 +5F00 +5A70 +4B90 +6030 +3060 +1FC0 +ENDCHAR +STARTCHAR uni011496 +ENCODING 70806 +BBX 16 12 0 -1 +BITMAP +FFFF +01F0 +031C +460F +4C02 +4CC4 +4F24 +662C +202C +3064 +18C4 +0F83 +ENDCHAR +STARTCHAR uni011497 +ENCODING 70807 +BBX 16 12 0 -1 +BITMAP +FFFF +0306 +0306 +0306 +0306 +0306 +6366 +7B76 +0F1E +070E +0306 +0102 +ENDCHAR +STARTCHAR uni011498 +ENCODING 70808 +BBX 14 13 1 -1 +BITMAP +0700 +0D80 +19B0 +31F8 +39CC +B98C +91B8 +818C +C1CC +C7F8 +6FB0 +7980 +3080 +ENDCHAR +STARTCHAR uni011499 +ENCODING 70809 +BBX 11 15 1 -1 +BITMAP +00C0 +0100 +0100 +F080 +D960 +0E00 +0800 +18C0 +31E0 +60E0 +6060 +30C0 +3180 +1F00 +0E00 +ENDCHAR +STARTCHAR uni01149A +ENCODING 70810 +BBX 16 15 0 -1 +BITMAP +0100 +0200 +0200 +FFFF +0300 +0180 +0140 +0140 +0360 +2230 +3C18 +1018 +1818 +0C30 +07E0 +ENDCHAR +STARTCHAR uni01149B +ENCODING 70811 +BBX 16 12 0 -1 +BITMAP +FFFF +0300 +0300 +4300 +4310 +4338 +636C +21CC +300C +180C +0E18 +03F0 +ENDCHAR +STARTCHAR uni01149C +ENCODING 70812 +BBX 16 12 0 -1 +BITMAP +FFFF +1800 +1800 +1800 +1860 +18F0 +1870 +1830 +1860 +18C0 +0F80 +0700 +ENDCHAR +STARTCHAR uni01149D +ENCODING 70813 +BBX 15 13 1 -1 +BITMAP +0018 +38FE +6DB8 +C718 +8718 +8218 +8018 +F818 +7818 +3018 +0018 +0018 +0008 +ENDCHAR +STARTCHAR uni01149E +ENCODING 70814 +BBX 16 12 0 -1 +BITMAP +FFFF +0000 +41F8 +430C +4384 +4386 +6386 +2106 +3006 +180C +0C1C +07F0 +ENDCHAR +STARTCHAR uni01149F +ENCODING 70815 +BBX 15 13 1 -1 +BITMAP +3C00 +623E +F130 +F130 +6130 +0130 +0630 +7830 +7E30 +01B0 +0070 +0030 +0010 +ENDCHAR +STARTCHAR uni0114A0 +ENCODING 70816 +BBX 16 12 0 -1 +BITMAP +FFFF +0C00 +0C00 +0C78 +0CF0 +0DE0 +0D60 +0F60 +0E60 +0E60 +0C30 +081C +ENDCHAR +STARTCHAR uni0114A1 +ENCODING 70817 +BBX 12 13 4 -1 +BITMAP +6000 +F0F0 +E0C0 +80C0 +63C0 +1EC0 +38C0 +E0C0 +F8C0 +0EC0 +03C0 +01C0 +0040 +ENDCHAR +STARTCHAR uni0114A2 +ENCODING 70818 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0018 +0018 +0018 +1E18 +3F98 +3CD8 +3878 +0038 +0018 +0008 +ENDCHAR +STARTCHAR uni0114A3 +ENCODING 70819 +BBX 15 13 1 -1 +BITMAP +0E30 +1FBE +30F0 +6070 +F0F0 +9BB0 +0E30 +1830 +2030 +0030 +0030 +0030 +0010 +ENDCHAR +STARTCHAR uni0114A4 +ENCODING 70820 +BBX 16 12 0 -1 +BITMAP +FFFF +0000 +3878 +6C64 +6662 +0C62 +186E +306C +3F60 +01E0 +0060 +0020 +ENDCHAR +STARTCHAR uni0114A5 +ENCODING 70821 +BBX 16 15 0 -1 +BITMAP +0420 +03C0 +0000 +FFFF +0018 +0078 +03D8 +0718 +1C18 +1F18 +01D8 +0278 +0738 +0718 +0208 +ENDCHAR +STARTCHAR uni0114A6 +ENCODING 70822 +BBX 16 12 0 -1 +BITMAP +FFFF +0000 +4200 +470C +478C +4494 +6066 +2006 +3006 +180C +0C1C +07F0 +ENDCHAR +STARTCHAR uni0114A7 +ENCODING 70823 +BBX 16 12 0 -1 +BITMAP +FFFF +0C18 +1C18 +0E18 +0318 +0318 +0318 +0FD8 +1E78 +0C38 +0018 +0008 +ENDCHAR +STARTCHAR uni0114A8 +ENCODING 70824 +BBX 16 12 0 -1 +BITMAP +FFFF +0830 +1C30 +0630 +0330 +0630 +0C30 +1830 +1FB0 +00F0 +0030 +0010 +ENDCHAR +STARTCHAR uni0114A9 +ENCODING 70825 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0078 +03D8 +0718 +1C18 +1F18 +01D8 +0078 +0038 +0018 +0008 +ENDCHAR +STARTCHAR uni0114AA +ENCODING 70826 +BBX 16 12 0 -1 +BITMAP +FFFF +0006 +0386 +07E6 +0C76 +083E +080E +0806 +0F86 +0786 +0306 +0002 +ENDCHAR +STARTCHAR uni0114AB +ENCODING 70827 +BBX 16 12 0 -1 +BITMAP +FFFF +0018 +0078 +03D8 +0718 +1C18 +1F18 +01D8 +0278 +0738 +0718 +0208 +ENDCHAR +STARTCHAR uni0114AC +ENCODING 70828 +BBX 15 15 1 -1 +BITMAP +0FF0 +0008 +70CC +F9EE +8F3C +8F1C +1F8C +3FCC +198C +000C +000C +000C +000C +000C +0004 +ENDCHAR +STARTCHAR uni0114AD +ENCODING 70829 +BBX 16 12 0 -1 +BITMAP +FFFF +1C18 +0E18 +0798 +01D8 +0678 +1C18 +1F18 +01D8 +0078 +0038 +0008 +ENDCHAR +STARTCHAR uni0114AE +ENCODING 70830 +BBX 16 12 0 -1 +BITMAP +FFFF +100C +380C +1C0C +060C +02CC +01EC +031C +660C +3C0C +180C +0004 +ENDCHAR +STARTCHAR uni0114AF +ENCODING 70831 +BBX 16 12 0 -1 +BITMAP +FFFF +0100 +07E0 +0C30 +1878 +1878 +1830 +0C00 +0600 +0380 +00E0 +0038 +ENDCHAR +STARTCHAR uni0114B0 +ENCODING 70832 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 10 -5 -1 +BITMAP +30 +B8 +70 +30 +30 +30 +30 +30 +30 +10 +ENDCHAR +STARTCHAR uni0114B1 +ENCODING 70833 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 14 -16 -1 +BITMAP +0F80 +3FE0 +6010 +6008 +2000 +F800 +3000 +3000 +3000 +3000 +3000 +3000 +3000 +1000 +ENDCHAR +STARTCHAR uni0114B2 +ENCODING 70834 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 14 -13 -1 +BITMAP +0F80 +3FE0 +4030 +8030 +0020 +00F8 +0060 +0060 +0060 +0060 +0060 +0060 +0060 +0040 +ENDCHAR +STARTCHAR uni0114B3 +ENCODING 70835 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -11 -2 +BITMAP +70 +C8 +90 +20 +7C +ENDCHAR +STARTCHAR uni0114B4 +ENCODING 70836 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -10 -2 +BITMAP +60 +80 +70 +08 +04 +ENDCHAR +STARTCHAR uni0114B5 +ENCODING 70837 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -10 0 +BITMAP +60 +80 +70 +ENDCHAR +STARTCHAR uni0114B6 +ENCODING 70838 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -10 -1 +BITMAP +60 +80 +60 +80 +60 +ENDCHAR +STARTCHAR uni0114B7 +ENCODING 70839 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 6 -11 -2 +BITMAP +72 +CE +C2 +06 +08 +07 +ENDCHAR +STARTCHAR uni0114B8 +ENCODING 70840 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 6 -11 -2 +BITMAP +72 +CE +C8 +07 +08 +07 +ENDCHAR +STARTCHAR uni0114B9 +ENCODING 70841 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 9 -7 -1 +BITMAP +10 +30 +60 +C0 +80 +80 +80 +B0 +70 +ENDCHAR +STARTCHAR uni0114BA +ENCODING 70842 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -14 8 +BITMAP +80 +7C +02 +ENDCHAR +STARTCHAR uni0114BB +ENCODING 70843 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 12 -15 -1 +BITMAP +40 +3E +01 +10 +30 +60 +C0 +80 +80 +80 +B0 +70 +ENDCHAR +STARTCHAR uni0114BC +ENCODING 70844 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 10 -15 -1 +BITMAP +000C +102E +301C +600C +C00C +800C +800C +800C +B00C +7004 +ENDCHAR +STARTCHAR uni0114BD +ENCODING 70845 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 13 -16 -1 +BITMAP +0080 +0070 +0008 +0004 +F817 +180E +3006 +6006 +4006 +4006 +4006 +5806 +3802 +ENDCHAR +STARTCHAR uni0114BE +ENCODING 70846 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 13 -8 -1 +BITMAP +80 +70 +08 +04 +17 +0E +06 +06 +06 +06 +06 +06 +02 +ENDCHAR +STARTCHAR uni0114BF +ENCODING 70847 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -11 9 +BITMAP +30 +B4 +84 +78 +ENDCHAR +STARTCHAR uni0114C0 +ENCODING 70848 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -10 11 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni0114C1 +ENCODING 70849 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -5 1 +BITMAP +60 +90 +60 +00 +60 +90 +60 +ENDCHAR +STARTCHAR uni0114C2 +ENCODING 70850 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 0 +BITMAP +C0 +30 +08 +ENDCHAR +STARTCHAR uni0114C3 +ENCODING 70851 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 -1 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0114C4 +ENCODING 70852 +BBX 13 13 1 -1 +BITMAP +E000 +1000 +0800 +1F80 +38C0 +7860 +7860 +3060 +00C0 +7F80 +0E00 +0380 +00F8 +ENDCHAR +STARTCHAR uni0114C5 +ENCODING 70853 +BBX 14 11 1 1 +BITMAP +C30C +C30C +C00C +C00C +C30C +C78C +CCCC +D86C +F03C +E01C +C00C +ENDCHAR +STARTCHAR uni0114C6 +ENCODING 70854 +BBX 4 3 6 5 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni0114C7 +ENCODING 70855 +BBX 15 16 0 -2 +BITMAP +0100 +1C70 +638C +0000 +0780 +1CC0 +3860 +3860 +9860 +81CC +C3D2 +41E2 +6062 +3064 +18C0 +0F80 +ENDCHAR +STARTCHAR uni0114D0 +ENCODING 70864 +BBX 10 11 3 0 +BITMAP +1E00 +3F00 +6180 +C0C0 +C0C0 +C0C0 +C0C0 +C0C0 +6180 +3F00 +1E00 +ENDCHAR +STARTCHAR uni0114D1 +ENCODING 70865 +BBX 9 12 4 0 +BITMAP +4000 +4000 +6000 +3800 +0E00 +0300 +0180 +6180 +E180 +E180 +C300 +7E00 +ENDCHAR +STARTCHAR uni0114D2 +ENCODING 70866 +BBX 10 11 3 0 +BITMAP +E000 +3800 +0E00 +0300 +0300 +E300 +7E00 +1C00 +0600 +0180 +0040 +ENDCHAR +STARTCHAR uni0114D3 +ENCODING 70867 +BBX 9 12 3 0 +BITMAP +7000 +1C00 +0600 +E300 +3B00 +0E00 +0300 +E300 +7E00 +1C00 +0600 +0180 +ENDCHAR +STARTCHAR uni0114D4 +ENCODING 70868 +BBX 11 12 2 -1 +BITMAP +C060 +C060 +C060 +60C0 +3180 +1F00 +60C0 +C060 +C060 +E0E0 +7FC0 +1F00 +ENDCHAR +STARTCHAR uni0114D5 +ENCODING 70869 +BBX 15 13 1 -1 +BITMAP +0F80 +1FE0 +1078 +100C +9804 +9866 +8CA2 +8DB2 +C732 +4032 +6032 +3062 +1FC0 +ENDCHAR +STARTCHAR uni0114D6 +ENCODING 70870 +BBX 12 12 2 -1 +BITMAP +1C00 +0C00 +0C00 +8C00 +8C60 +8CA0 +8DB0 +C730 +4030 +6030 +3060 +1FC0 +ENDCHAR +STARTCHAR uni0114D7 +ENCODING 70871 +BBX 9 13 4 -1 +BITMAP +3C00 +7E00 +C300 +C300 +C300 +7300 +3300 +0300 +0300 +0300 +0300 +0300 +0180 +ENDCHAR +STARTCHAR uni0114D8 +ENCODING 70872 +BBX 12 13 1 -1 +BITMAP +0380 +0300 +0300 +0300 +0300 +7FF0 +C300 +C300 +C300 +C300 +6700 +3E00 +0C00 +ENDCHAR +STARTCHAR uni0114D9 +ENCODING 70873 +BBX 12 15 2 -2 +BITMAP +0060 +00C0 +0080 +00C0 +00E0 +0060 +0060 +0070 +3C30 +4230 +E130 +E130 +E160 +41C0 +0100 +ENDCHAR +STARTCHAR uni011580 +ENCODING 71040 +BBX 10 11 4 0 +BITMAP +7D00 +FA00 +2200 +7A00 +A600 +2200 +2200 +6E00 +C600 +4100 +00C0 +ENDCHAR +STARTCHAR uni011581 +ENCODING 71041 +BBX 10 11 3 0 +BITMAP +7B00 +FA00 +2200 +7B00 +A700 +2280 +2200 +6E00 +C600 +4100 +00C0 +ENDCHAR +STARTCHAR uni011582 +ENCODING 71042 +BBX 10 10 2 1 +BITMAP +3180 +39C0 +4A40 +39C0 +0000 +C380 +36C0 +18C0 +0CC0 +0780 +ENDCHAR +STARTCHAR uni011583 +ENCODING 71043 +BBX 10 13 3 -2 +BITMAP +6300 +7380 +9480 +7380 +0000 +0700 +0D80 +0180 +0180 +0300 +0300 +0100 +00C0 +ENDCHAR +STARTCHAR uni011584 +ENCODING 71044 +BBX 10 10 2 1 +BITMAP +0F80 +1FC0 +0600 +0600 +8D80 +58C0 +4840 +20C0 +1980 +0F00 +ENDCHAR +STARTCHAR uni011585 +ENCODING 71045 +BBX 13 10 1 1 +BITMAP +0F80 +1FC0 +0600 +0600 +8D80 +58C0 +4860 +20D0 +1998 +0F08 +ENDCHAR +STARTCHAR uni011586 +ENCODING 71046 +BBX 8 11 4 0 +BITMAP +7C +F0 +30 +12 +7D +14 +12 +70 +30 +08 +06 +ENDCHAR +STARTCHAR uni011587 +ENCODING 71047 +BBX 9 11 4 0 +BITMAP +7E00 +EF00 +C800 +0900 +3E80 +0A00 +0900 +3800 +1800 +0400 +0300 +ENDCHAR +STARTCHAR uni011588 +ENCODING 71048 +BBX 9 13 4 -1 +BITMAP +3800 +4400 +4400 +C600 +6600 +0200 +0200 +0200 +0200 +0300 +0100 +0100 +0080 +ENDCHAR +STARTCHAR uni011589 +ENCODING 71049 +BBX 10 13 3 -1 +BITMAP +3800 +4400 +4400 +C600 +6700 +0280 +02C0 +0240 +0200 +0300 +0100 +0100 +0080 +ENDCHAR +STARTCHAR uni01158A +ENCODING 71050 +BBX 12 10 2 1 +BITMAP +0060 +0FF0 +1C60 +1860 +80C0 +60C0 +70C0 +0D80 +0380 +0080 +ENDCHAR +STARTCHAR uni01158B +ENCODING 71051 +BBX 12 12 2 1 +BITMAP +0380 +0600 +0160 +0FF0 +1C60 +1860 +80C0 +60C0 +70C0 +0D80 +0380 +0080 +ENDCHAR +STARTCHAR uni01158C +ENCODING 71052 +BBX 10 10 3 1 +BITMAP +3F80 +77C0 +6400 +0600 +8D80 +58C0 +4840 +20C0 +1980 +0F00 +ENDCHAR +STARTCHAR uni01158D +ENCODING 71053 +BBX 13 10 2 1 +BITMAP +3F80 +77C0 +6600 +0600 +8D80 +58C0 +4860 +20D0 +1998 +0F08 +ENDCHAR +STARTCHAR uni01158E +ENCODING 71054 +BBX 11 13 3 -2 +BITMAP +1F00 +3F80 +1C00 +3E00 +6D00 +4C80 +CC80 +CC80 +0C80 +3C80 +0840 +0040 +0020 +ENDCHAR +STARTCHAR uni01158F +ENCODING 71055 +BBX 14 13 1 -2 +BITMAP +3FF8 +63FC +1070 +30F0 +61B0 +C130 +2330 +1330 +31B0 +20F0 +0018 +0008 +0004 +ENDCHAR +STARTCHAR uni011590 +ENCODING 71056 +BBX 13 13 1 -2 +BITMAP +3FF0 +63F8 +1060 +3060 +6060 +C060 +2060 +1060 +3020 +2020 +0030 +0010 +0008 +ENDCHAR +STARTCHAR uni011591 +ENCODING 71057 +BBX 12 13 2 -2 +BITMAP +0060 +04E0 +7CC0 +F4C0 +24C0 +24C0 +1FC0 +06C0 +00C0 +0040 +0060 +0020 +0010 +ENDCHAR +STARTCHAR uni011592 +ENCODING 71058 +BBX 13 13 2 -2 +BITMAP +03E0 +3FF0 +7CC0 +18C0 +1040 +2020 +6018 +C000 +3000 +0800 +0400 +0200 +0200 +ENDCHAR +STARTCHAR uni011593 +ENCODING 71059 +BBX 9 12 4 -1 +BITMAP +3E00 +7F00 +0C00 +3400 +E400 +6600 +1600 +0E00 +0200 +0200 +0100 +0080 +ENDCHAR +STARTCHAR uni011594 +ENCODING 71060 +BBX 10 12 3 -1 +BITMAP +3F00 +7F80 +0C00 +7F80 +CCC0 +DCC0 +6F80 +0C00 +0400 +0600 +0200 +0100 +ENDCHAR +STARTCHAR uni011595 +ENCODING 71061 +BBX 13 13 2 -2 +BITMAP +03E0 +3FF0 +7CC0 +18C0 +1440 +2220 +6118 +C080 +3080 +0800 +0400 +0200 +0200 +ENDCHAR +STARTCHAR uni011596 +ENCODING 71062 +BBX 8 12 5 -1 +BITMAP +7C +F0 +30 +12 +1D +14 +12 +10 +70 +30 +08 +06 +ENDCHAR +STARTCHAR uni011597 +ENCODING 71063 +BBX 9 11 4 0 +BITMAP +7E00 +EF00 +C800 +0900 +0E80 +0A00 +0900 +3800 +1800 +0400 +0300 +ENDCHAR +STARTCHAR uni011598 +ENCODING 71064 +BBX 12 10 2 1 +BITMAP +0440 +1EE0 +3980 +6180 +6080 +C040 +C030 +C000 +6180 +3F00 +ENDCHAR +STARTCHAR uni011599 +ENCODING 71065 +BBX 10 10 3 1 +BITMAP +0400 +1E00 +3B00 +6180 +6080 +C0C0 +C0C0 +C0C0 +6180 +3F00 +ENDCHAR +STARTCHAR uni01159A +ENCODING 71066 +BBX 7 11 5 0 +BITMAP +7C +F0 +30 +50 +D0 +90 +10 +70 +30 +08 +06 +ENDCHAR +STARTCHAR uni01159B +ENCODING 71067 +BBX 8 9 3 2 +BITMAP +1F +3C +0C +18 +1E +B1 +63 +10 +08 +ENDCHAR +STARTCHAR uni01159C +ENCODING 71068 +BBX 9 10 4 1 +BITMAP +0C00 +7600 +B200 +9200 +9200 +9200 +9300 +0100 +0100 +0080 +ENDCHAR +STARTCHAR uni01159D +ENCODING 71069 +BBX 6 11 5 0 +BITMAP +7C +F0 +30 +50 +D0 +90 +10 +10 +30 +20 +20 +ENDCHAR +STARTCHAR uni01159E +ENCODING 71070 +BBX 11 12 3 -1 +BITMAP +0080 +39C0 +4D80 +DD80 +C180 +4D80 +3380 +0180 +0080 +00C0 +0040 +0020 +ENDCHAR +STARTCHAR uni01159F +ENCODING 71071 +BBX 9 13 2 -2 +BITMAP +3F00 +7F80 +1800 +1000 +2100 +6380 +C300 +3600 +0E00 +0600 +0200 +0300 +0080 +ENDCHAR +STARTCHAR uni0115A0 +ENCODING 71072 +BBX 9 13 5 -1 +BITMAP +0200 +3700 +7E00 +C600 +C600 +C600 +C600 +6600 +3E00 +0200 +0300 +0100 +0080 +ENDCHAR +STARTCHAR uni0115A1 +ENCODING 71073 +BBX 10 12 3 -1 +BITMAP +0FC0 +3E00 +0E00 +0E00 +5B00 +9B00 +7300 +0300 +0300 +0300 +0100 +0080 +ENDCHAR +STARTCHAR uni0115A2 +ENCODING 71074 +BBX 11 13 3 -2 +BITMAP +00C0 +01C0 +7980 +F180 +6180 +2180 +3F80 +1980 +0080 +0080 +00C0 +0040 +0020 +ENDCHAR +STARTCHAR uni0115A3 +ENCODING 71075 +BBX 8 9 4 2 +BITMAP +1F +3C +18 +30 +6E +D9 +7B +18 +08 +ENDCHAR +STARTCHAR uni0115A4 +ENCODING 71076 +BBX 8 13 4 -2 +BITMAP +3F +7C +0C +1C +6C +4C +CC +FC +6C +0C +06 +02 +01 +ENDCHAR +STARTCHAR uni0115A5 +ENCODING 71077 +BBX 9 12 4 -1 +BITMAP +3E00 +7800 +3000 +3E00 +5B00 +9B00 +0B00 +0300 +0300 +0300 +0100 +0080 +ENDCHAR +STARTCHAR uni0115A6 +ENCODING 71078 +BBX 11 13 3 -2 +BITMAP +78C0 +F1C0 +6180 +2180 +1180 +1180 +3180 +7F80 +C180 +8080 +00C0 +0040 +0020 +ENDCHAR +STARTCHAR uni0115A7 +ENCODING 71079 +BBX 12 13 2 -2 +BITMAP +3C60 +78E0 +30C0 +10C0 +70C0 +F0C0 +80C0 +8EC0 +71C0 +0040 +0060 +0020 +0010 +ENDCHAR +STARTCHAR uni0115A8 +ENCODING 71080 +BBX 7 12 5 -1 +BITMAP +7C +F0 +30 +10 +10 +10 +10 +10 +70 +30 +08 +06 +ENDCHAR +STARTCHAR uni0115A9 +ENCODING 71081 +BBX 13 13 1 -2 +BITMAP +07C0 +0F00 +0300 +0100 +0100 +7100 +D900 +DF00 +C300 +7000 +1F00 +01F0 +0018 +ENDCHAR +STARTCHAR uni0115AA +ENCODING 71082 +BBX 8 11 4 0 +BITMAP +3E +78 +18 +68 +C8 +C8 +C8 +48 +38 +04 +03 +ENDCHAR +STARTCHAR uni0115AB +ENCODING 71083 +BBX 12 13 2 -2 +BITMAP +1C00 +3600 +2200 +2260 +23F0 +47C0 +CCC0 +20C0 +20C0 +4040 +0040 +0020 +0010 +ENDCHAR +STARTCHAR uni0115AC +ENCODING 71084 +BBX 10 10 3 1 +BITMAP +7C80 +F1C0 +3180 +3780 +1380 +0F80 +0180 +0180 +0080 +0040 +ENDCHAR +STARTCHAR uni0115AD +ENCODING 71085 +BBX 12 12 2 -1 +BITMAP +1C40 +78E0 +18C0 +18C0 +30C0 +FEC0 +11C0 +10C0 +00C0 +0060 +0020 +0010 +ENDCHAR +STARTCHAR uni0115AE +ENCODING 71086 +BBX 11 12 3 -1 +BITMAP +1F00 +3C00 +1800 +3000 +6F00 +D980 +7980 +1980 +0980 +0080 +0080 +0060 +ENDCHAR +STARTCHAR uni0115AF +ENCODING 71087 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 8 -4 3 +BITMAP +80 +40 +40 +40 +40 +40 +20 +10 +ENDCHAR +STARTCHAR uni0115B0 +ENCODING 71088 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 15 -16 -1 +BITMAP +18 +28 +60 +40 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +40 +40 +20 +ENDCHAR +STARTCHAR uni0115B1 +ENCODING 71089 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 16 -5 -2 +BITMAP +E0 +B0 +30 +30 +30 +30 +30 +30 +30 +30 +10 +10 +10 +10 +10 +08 +ENDCHAR +STARTCHAR uni0115B2 +ENCODING 71090 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -13 -2 +BITMAP +C700 +2180 +1F00 +0E00 +ENDCHAR +STARTCHAR uni0115B3 +ENCODING 71091 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -13 -2 +BITMAP +C700 +2180 +1F00 +0E80 +ENDCHAR +STARTCHAR uni0115B4 +ENCODING 71092 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -10 -2 +BITMAP +20 +60 +80 +60 +ENDCHAR +STARTCHAR uni0115B5 +ENCODING 71093 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 6 -9 -2 +BITMAP +20 +60 +80 +60 +80 +60 +ENDCHAR +STARTCHAR uni0115B8 +ENCODING 71096 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 -16 10 +BITMAP +E0 +D0 +ENDCHAR +STARTCHAR uni0115B9 +ENCODING 71097 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 4 -16 10 +BITMAP +0780 +08C0 +E4C0 +D000 +ENDCHAR +STARTCHAR uni0115BA +ENCODING 71098 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 9 -16 3 +BITMAP +E000 +D008 +0004 +0004 +0004 +0004 +0004 +0002 +0001 +ENDCHAR +STARTCHAR uni0115BB +ENCODING 71099 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 11 -16 3 +BITMAP +0780 +08C0 +E4C0 +D008 +0004 +0004 +0004 +0004 +0004 +0002 +0001 +ENDCHAR +STARTCHAR uni0115BC +ENCODING 71100 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -10 10 +BITMAP +60 +6C +98 +60 +ENDCHAR +STARTCHAR uni0115BD +ENCODING 71101 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 12 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0115BE +ENCODING 71102 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 6 -2 3 +BITMAP +C0 +C0 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni0115BF +ENCODING 71103 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 -2 +BITMAP +E0 +30 +08 +ENDCHAR +STARTCHAR uni0115C0 +ENCODING 71104 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0115C1 +ENCODING 71105 +BBX 14 7 1 3 +BITMAP +0038 +007C +E04C +1C6C +030C +01F8 +0070 +ENDCHAR +STARTCHAR uni0115C2 +ENCODING 71106 +BBX 4 6 6 3 +BITMAP +40 +60 +60 +60 +E0 +30 +ENDCHAR +STARTCHAR uni0115C3 +ENCODING 71107 +BBX 9 10 4 1 +BITMAP +0400 +0600 +4600 +6600 +6600 +6600 +E600 +3200 +0300 +0080 +ENDCHAR +STARTCHAR uni0115C4 +ENCODING 71108 +BBX 3 2 6 5 +BITMAP +C0 +60 +ENDCHAR +STARTCHAR uni0115C5 +ENCODING 71109 +BBX 3 10 6 1 +BITMAP +C0 +60 +60 +60 +60 +60 +60 +60 +20 +20 +ENDCHAR +STARTCHAR uni0115C6 +ENCODING 71110 +BBX 7 7 5 2 +BITMAP +78 +CC +C4 +4C +18 +7C +C6 +ENDCHAR +STARTCHAR uni0115C7 +ENCODING 71111 +BBX 11 13 2 -1 +BITMAP +0800 +0400 +0600 +DFC0 +7660 +7660 +2660 +27C0 +0680 +0600 +0300 +0180 +0200 +ENDCHAR +STARTCHAR uni0115C8 +ENCODING 71112 +BBX 9 9 4 2 +BITMAP +FE00 +6300 +0300 +0600 +7E00 +C000 +C000 +E000 +3F80 +ENDCHAR +STARTCHAR uni0115C9 +ENCODING 71113 +BBX 8 8 4 2 +BITMAP +24 +24 +A5 +24 +24 +A5 +24 +24 +ENDCHAR +STARTCHAR uni0115CA +ENCODING 71114 +BBX 15 15 0 -2 +BITMAP +2548 +654C +E54E +1390 +0820 +E44E +1390 +F29E +1390 +E44E +0820 +1390 +E54E +654C +2548 +ENDCHAR +STARTCHAR uni0115CB +ENCODING 71115 +BBX 15 15 0 -2 +BITMAP +2008 +654C +E44E +1390 +0820 +644C +1390 +5294 +1390 +644C +0820 +1390 +E44E +654C +2008 +ENDCHAR +STARTCHAR uni0115CC +ENCODING 71116 +BBX 13 13 1 -1 +BITMAP +8A88 +4890 +2720 +1040 +C898 +2720 +A528 +2720 +C898 +1040 +2720 +4890 +8A88 +ENDCHAR +STARTCHAR uni0115CD +ENCODING 71117 +BBX 15 15 0 -2 +BITMAP +0100 +4444 +2388 +1450 +0BA0 +5454 +2BA8 +AAAA +2BA8 +5454 +0BA0 +1450 +2388 +4444 +0100 +ENDCHAR +STARTCHAR uni0115CE +ENCODING 71118 +BBX 15 15 0 -2 +BITMAP +0100 +4444 +2388 +17D0 +0FE0 +5C74 +3BB8 +BABA +3BB8 +5C74 +0FE0 +17D0 +2388 +4444 +0100 +ENDCHAR +STARTCHAR uni0115CF +ENCODING 71119 +BBX 9 9 3 1 +BITMAP +3E00 +4100 +9C80 +A280 +A280 +A280 +9C80 +4100 +3E00 +ENDCHAR +STARTCHAR uni0115D0 +ENCODING 71120 +BBX 15 15 0 -2 +BITMAP +8002 +4004 +2008 +17D0 +0820 +1390 +1450 +1450 +1450 +1390 +0820 +17D0 +2008 +4004 +8002 +ENDCHAR +STARTCHAR uni0115D1 +ENCODING 71121 +BBX 7 13 4 0 +BITMAP +10 +00 +38 +82 +7C +10 +28 +10 +7C +82 +38 +00 +10 +ENDCHAR +STARTCHAR uni0115D2 +ENCODING 71122 +BBX 7 13 4 0 +BITMAP +10 +00 +BA +FE +7C +10 +28 +10 +7C +FE +BA +00 +10 +ENDCHAR +STARTCHAR uni0115D3 +ENCODING 71123 +BBX 11 13 2 0 +BITMAP +0400 +0000 +2E80 +BFA0 +7FC0 +0400 +0A00 +0400 +7FC0 +BFA0 +2E80 +0000 +0400 +ENDCHAR +STARTCHAR uni0115D4 +ENCODING 71124 +BBX 11 13 2 0 +BITMAP +0400 +5140 +3F80 +BFA0 +7FC0 +0400 +0A00 +0400 +7FC0 +BFA0 +3F80 +5140 +0400 +ENDCHAR +STARTCHAR uni0115D5 +ENCODING 71125 +BBX 14 14 1 -2 +BITMAP +8304 +4488 +2490 +1320 +0840 +6318 +94A4 +94A4 +6318 +0840 +1320 +2490 +4488 +8304 +ENDCHAR +STARTCHAR uni0115D6 +ENCODING 71126 +BBX 14 14 1 -2 +BITMAP +1320 +14A0 +14A0 +1320 +0FC0 +6318 +94A4 +94A4 +6318 +0FC0 +1320 +14A0 +14A0 +1320 +ENDCHAR +STARTCHAR uni0115D7 +ENCODING 71127 +BBX 14 14 1 -2 +BITMAP +1320 +14A0 +14A0 +F33C +0FC0 +6B58 +9CE4 +9CE4 +6B58 +0FC0 +F33C +14A0 +14A0 +1320 +ENDCHAR +STARTCHAR uni0115D8 +ENCODING 71128 +BBX 10 9 3 1 +BITMAP +0C00 +1200 +1200 +0C00 +0000 +6180 +9240 +9240 +6180 +ENDCHAR +STARTCHAR uni0115D9 +ENCODING 71129 +BBX 11 12 2 -2 +BITMAP +1F00 +0400 +64C0 +9520 +9520 +64C0 +0400 +0E00 +9100 +4100 +2200 +1C00 +ENDCHAR +STARTCHAR uni0115DA +ENCODING 71130 +BBX 11 12 2 -2 +BITMAP +1F00 +0400 +64C0 +9520 +9520 +64C0 +0400 +1400 +0C00 +0200 +0100 +0080 +ENDCHAR +STARTCHAR uni0115DB +ENCODING 71131 +BBX 8 12 2 -2 +BITMAP +1F +04 +04 +04 +18 +20 +20 +1E +81 +41 +22 +1C +ENDCHAR +STARTCHAR uni0115DC +ENCODING 71132 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -11 -2 +BITMAP +E0 +60 +20 +18 +ENDCHAR +STARTCHAR uni0115DD +ENCODING 71133 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 4 -13 -2 +BITMAP +7000 +8C00 +8300 +60C0 +ENDCHAR +STARTCHAR uni011600 +ENCODING 71168 +BBX 16 15 0 -1 +BITMAP +0300 +0780 +0C80 +FFFF +118C +1318 +1398 +0998 +0998 +0718 +030C +030C +0318 +01B8 +00F0 +ENDCHAR +STARTCHAR uni011601 +ENCODING 71169 +BBX 16 14 0 -1 +BITMAP +0C00 +1200 +FFFF +1618 +0E18 +0618 +0618 +0618 +0618 +0618 +0618 +0118 +00FC +007C +ENDCHAR +STARTCHAR uni011602 +ENCODING 71170 +BBX 16 12 0 2 +BITMAP +0020 +0020 +0010 +FFFF +0C10 +1C08 +1808 +1B08 +0F18 +0670 +07F0 +01E0 +ENDCHAR +STARTCHAR uni011603 +ENCODING 71171 +BBX 16 12 0 2 +BITMAP +000C +001E +0010 +FFFF +0C10 +1C08 +1808 +1B08 +0F18 +0670 +07F0 +01E0 +ENDCHAR +STARTCHAR uni011604 +ENCODING 71172 +BBX 16 14 0 0 +BITMAP +0FE0 +1810 +3008 +FFFF +3008 +3008 +3008 +3018 +1318 +1B18 +1918 +0930 +0F30 +0730 +ENDCHAR +STARTCHAR uni011605 +ENCODING 71173 +BBX 16 14 0 0 +BITMAP +0FE0 +1810 +3008 +FFFF +300C +301C +303C +3034 +1324 +1B24 +1924 +0924 +0F24 +0718 +ENDCHAR +STARTCHAR uni011606 +ENCODING 71174 +BBX 16 11 0 0 +BITMAP +FFFF +0198 +01B4 +1DB4 +1F98 +03F8 +078C +0F8C +1D8C +199C +1198 +ENDCHAR +STARTCHAR uni011607 +ENCODING 71175 +BBX 16 11 0 0 +BITMAP +FFFF +0198 +01B4 +1DBC +1F9E +03FA +078E +0F8C +1D8C +199C +1198 +ENDCHAR +STARTCHAR uni011608 +ENCODING 71176 +BBX 16 11 0 0 +BITMAP +FFFF +0020 +0020 +0CF0 +1BC8 +1998 +1838 +1870 +0CE0 +04C8 +0070 +ENDCHAR +STARTCHAR uni011609 +ENCODING 71177 +BBX 16 13 0 -2 +BITMAP +FFFF +0020 +0020 +0CF0 +1BC8 +1998 +1838 +1870 +0CE0 +04C8 +0070 +00C0 +0078 +ENDCHAR +STARTCHAR uni01160A +ENCODING 71178 +BBX 16 15 0 -1 +BITMAP +00E0 +0610 +0D08 +FFFF +1198 +1B30 +0DB0 +07B0 +0730 +0618 +0618 +0618 +0630 +03B0 +00E0 +ENDCHAR +STARTCHAR uni01160B +ENCODING 71179 +BBX 16 15 0 -1 +BITMAP +00B0 +0670 +0D08 +FFFF +1198 +1B30 +0DB0 +07B0 +0730 +0618 +0618 +0618 +0630 +03B0 +00E0 +ENDCHAR +STARTCHAR uni01160C +ENCODING 71180 +BBX 16 14 0 0 +BITMAP +01E0 +0C10 +1A08 +FFFF +1A18 +0E18 +0618 +0618 +0618 +0618 +0618 +0218 +0118 +00F0 +ENDCHAR +STARTCHAR uni01160D +ENCODING 71181 +BBX 16 14 0 0 +BITMAP +0130 +0CF0 +1A08 +FFFF +1A18 +0E18 +0618 +0618 +0618 +0618 +0618 +0218 +0118 +00F0 +ENDCHAR +STARTCHAR uni01160E +ENCODING 71182 +BBX 16 11 0 0 +BITMAP +FFFF +0730 +0E30 +1C30 +1830 +1830 +0C30 +07F8 +0634 +0F34 +0618 +ENDCHAR +STARTCHAR uni01160F +ENCODING 71183 +BBX 16 15 0 -1 +BITMAP +1E00 +3300 +3300 +FFFF +0E18 +1C30 +1C30 +0C30 +0730 +0718 +0718 +0618 +0630 +03B0 +00E0 +ENDCHAR +STARTCHAR uni011610 +ENCODING 71184 +BBX 16 12 0 -1 +BITMAP +FFFF +0C60 +0660 +0660 +1E60 +2660 +2C60 +1860 +0060 +0078 +0078 +0030 +ENDCHAR +STARTCHAR uni011611 +ENCODING 71185 +BBX 16 12 0 -1 +BITMAP +FFFF +1860 +3860 +3060 +3660 +1E60 +0CE0 +0FE0 +0360 +006C +003C +0018 +ENDCHAR +STARTCHAR uni011612 +ENCODING 71186 +BBX 16 11 0 0 +BITMAP +FFFF +01C0 +0380 +0700 +0C18 +0F98 +07C0 +0060 +1060 +0FE0 +03C0 +ENDCHAR +STARTCHAR uni011613 +ENCODING 71187 +BBX 16 10 0 1 +BITMAP +FFFF +0030 +0038 +0018 +00D8 +00F0 +0660 +0FE0 +18C0 +1000 +ENDCHAR +STARTCHAR uni011614 +ENCODING 71188 +BBX 16 9 0 2 +BITMAP +FFFF +0C38 +1C38 +1870 +1B70 +0F38 +0678 +07F0 +03E0 +ENDCHAR +STARTCHAR uni011615 +ENCODING 71189 +BBX 16 11 0 0 +BITMAP +FFFF +0E30 +1330 +1EB0 +1E60 +0C60 +0070 +0068 +0048 +0078 +0030 +ENDCHAR +STARTCHAR uni011616 +ENCODING 71190 +BBX 16 13 0 -2 +BITMAP +FFFF +0F30 +1E30 +3030 +3330 +1FB0 +0DB0 +1DF8 +2334 +1F34 +0F18 +0080 +0060 +ENDCHAR +STARTCHAR uni011617 +ENCODING 71191 +BBX 16 11 0 0 +BITMAP +FFFF +0030 +0030 +0030 +0030 +0E30 +1B30 +03F8 +0334 +1334 +0E18 +ENDCHAR +STARTCHAR uni011618 +ENCODING 71192 +BBX 16 11 0 0 +BITMAP +FFFF +0030 +0070 +0060 +0660 +0C60 +0C20 +0C30 +0C70 +0FF0 +07E0 +ENDCHAR +STARTCHAR uni011619 +ENCODING 71193 +BBX 16 11 0 0 +BITMAP +FFFF +0030 +0070 +0060 +0660 +0C60 +0DA0 +0DB0 +0C70 +0FF0 +07E0 +ENDCHAR +STARTCHAR uni01161A +ENCODING 71194 +BBX 16 11 0 0 +BITMAP +FFFF +01E0 +03C0 +0600 +0660 +03F0 +01B0 +0030 +0860 +07E0 +03C0 +ENDCHAR +STARTCHAR uni01161B +ENCODING 71195 +BBX 16 11 0 0 +BITMAP +FFFF +0300 +0300 +0700 +0E00 +1C70 +18F8 +19D8 +1B98 +0FF8 +0670 +ENDCHAR +STARTCHAR uni01161C +ENCODING 71196 +BBX 16 11 0 0 +BITMAP +FFFF +2630 +3330 +3330 +3330 +3630 +3330 +3330 +3330 +1E18 +0018 +ENDCHAR +STARTCHAR uni01161D +ENCODING 71197 +BBX 16 11 0 0 +BITMAP +FFFF +00E0 +01E0 +03E0 +0760 +0E60 +0C60 +0860 +0860 +0430 +0230 +ENDCHAR +STARTCHAR uni01161E +ENCODING 71198 +BBX 16 14 0 -1 +BITMAP +1800 +3C00 +FFFF +2618 +2F30 +1F30 +1830 +1330 +0F18 +0718 +0618 +0630 +03B0 +00E0 +ENDCHAR +STARTCHAR uni01161F +ENCODING 71199 +BBX 16 12 0 -1 +BITMAP +FFFF +0E18 +1C30 +1830 +0830 +0730 +0718 +0718 +0618 +0630 +03B0 +00E0 +ENDCHAR +STARTCHAR uni011620 +ENCODING 71200 +BBX 16 13 0 -1 +BITMAP +1800 +FFFF +260C +1C18 +3818 +3418 +0398 +038C +038C +030C +0318 +01D8 +0070 +ENDCHAR +STARTCHAR uni011621 +ENCODING 71201 +BBX 16 12 0 -1 +BITMAP +FFFF +1E0C +0F0C +0F8C +0758 +0030 +0070 +0070 +00D8 +018C +019C +00F8 +ENDCHAR +STARTCHAR uni011622 +ENCODING 71202 +BBX 16 12 0 -1 +BITMAP +FFFF +1818 +0C30 +0C30 +0C30 +1830 +1818 +1998 +0F98 +07B0 +01F0 +00E0 +ENDCHAR +STARTCHAR uni011623 +ENCODING 71203 +BBX 16 11 0 0 +BITMAP +FFFF +1B30 +1B30 +0F30 +0730 +0330 +0330 +07F8 +0634 +0F34 +0618 +ENDCHAR +STARTCHAR uni011624 +ENCODING 71204 +BBX 16 9 0 2 +BITMAP +FFFF +0C18 +1C18 +1818 +1B18 +0F18 +0618 +07F8 +01F0 +ENDCHAR +STARTCHAR uni011625 +ENCODING 71205 +BBX 16 11 0 0 +BITMAP +FFFF +1A18 +1B98 +0F98 +0138 +01F8 +03D8 +0718 +0618 +000C +000C +ENDCHAR +STARTCHAR uni011626 +ENCODING 71206 +BBX 16 11 0 0 +BITMAP +FFFF +0C30 +0230 +0230 +0230 +0230 +0230 +07F8 +0634 +0F34 +0618 +ENDCHAR +STARTCHAR uni011627 +ENCODING 71207 +BBX 16 11 0 0 +BITMAP +FFFF +0630 +0D70 +1960 +1F60 +1E60 +1820 +1830 +1870 +0FF0 +07E0 +ENDCHAR +STARTCHAR uni011628 +ENCODING 71208 +BBX 16 11 0 0 +BITMAP +FFFF +0030 +0070 +0060 +0060 +0860 +0420 +0430 +0470 +07F0 +03E0 +ENDCHAR +STARTCHAR uni011629 +ENCODING 71209 +BBX 16 11 0 0 +BITMAP +FFFF +1818 +1818 +1C38 +0E70 +07E0 +0660 +0C30 +0C30 +0660 +03C0 +ENDCHAR +STARTCHAR uni01162A +ENCODING 71210 +BBX 16 11 0 0 +BITMAP +FFFF +0618 +0618 +0618 +0618 +0618 +0618 +0618 +0218 +0118 +00F0 +ENDCHAR +STARTCHAR uni01162B +ENCODING 71211 +BBX 16 11 0 0 +BITMAP +FFFF +0C30 +0E30 +1F30 +1930 +0330 +0630 +0C30 +1930 +1F18 +0E18 +ENDCHAR +STARTCHAR uni01162C +ENCODING 71212 +BBX 16 11 0 0 +BITMAP +FFFF +1C30 +1A30 +1930 +18B0 +1870 +0FF0 +07B0 +0030 +0018 +0018 +ENDCHAR +STARTCHAR uni01162D +ENCODING 71213 +BBX 16 11 0 0 +BITMAP +FFFF +19C0 +1A60 +1A60 +1BF8 +19F8 +1860 +1860 +1860 +0FC0 +0780 +ENDCHAR +STARTCHAR uni01162E +ENCODING 71214 +BBX 16 12 0 -1 +BITMAP +FFFF +0E18 +1C30 +1830 +0B30 +0730 +0618 +0618 +0618 +0630 +03B0 +00E0 +ENDCHAR +STARTCHAR uni01162F +ENCODING 71215 +BBX 16 11 0 0 +BITMAP +FFFF +0180 +0180 +05A0 +0FF0 +1BD8 +1998 +1998 +1998 +1BD8 +0E70 +ENDCHAR +STARTCHAR uni011630 +ENCODING 71216 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 11 -6 0 +BITMAP +FC +30 +30 +30 +30 +30 +30 +30 +30 +38 +18 +ENDCHAR +STARTCHAR uni011631 +ENCODING 71217 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 14 -9 0 +BITMAP +7800 +8400 +8400 +1F80 +0600 +0600 +0600 +0600 +0600 +0600 +0600 +0600 +0700 +0300 +ENDCHAR +STARTCHAR uni011632 +ENCODING 71218 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 13 -9 1 +BITMAP +7800 +8400 +8400 +1F80 +0700 +0600 +0E00 +1E00 +1600 +1600 +1600 +1600 +0C00 +ENDCHAR +STARTCHAR uni011633 +ENCODING 71219 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -12 -2 +BITMAP +8E +41 +3E +ENDCHAR +STARTCHAR uni011634 +ENCODING 71220 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -12 -2 +BITMAP +7C +82 +71 +ENDCHAR +STARTCHAR uni011635 +ENCODING 71221 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -10 -2 +BITMAP +70 +80 +70 +ENDCHAR +STARTCHAR uni011636 +ENCODING 71222 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -10 -2 +BITMAP +70 +80 +70 +80 +70 +ENDCHAR +STARTCHAR uni011637 +ENCODING 71223 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -11 -2 +BITMAP +6C +92 +82 +03 +ENDCHAR +STARTCHAR uni011638 +ENCODING 71224 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -11 -2 +BITMAP +6C +93 +82 +03 +ENDCHAR +STARTCHAR uni011639 +ENCODING 71225 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -5 11 +BITMAP +E0 +D0 +08 +ENDCHAR +STARTCHAR uni01163A +ENCODING 71226 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -13 11 +BITMAP +98 +78 +04 +ENDCHAR +STARTCHAR uni01163B +ENCODING 71227 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 14 -9 0 +BITMAP +F000 +0800 +0400 +1F80 +0600 +0600 +0600 +0600 +0600 +0600 +0600 +0600 +0700 +0300 +ENDCHAR +STARTCHAR uni01163C +ENCODING 71228 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 14 -9 0 +BITMAP +9800 +7800 +0400 +1F80 +0600 +0600 +0600 +0600 +0600 +0600 +0600 +0600 +0700 +0300 +ENDCHAR +STARTCHAR uni01163D +ENCODING 71229 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -8 12 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni01163E +ENCODING 71230 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 9 -3 0 +BITMAP +C0 +C0 +00 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni01163F +ENCODING 71231 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 -5 -2 +BITMAP +E0 +10 +ENDCHAR +STARTCHAR uni011640 +ENCODING 71232 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -11 12 +BITMAP +88 +70 +ENDCHAR +STARTCHAR uni011641 +ENCODING 71233 +BBX 4 13 7 -2 +BITMAP +80 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +60 +30 +ENDCHAR +STARTCHAR uni011642 +ENCODING 71234 +BBX 9 13 6 -2 +BITMAP +8400 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +C600 +6300 +3180 +ENDCHAR +STARTCHAR uni011643 +ENCODING 71235 +BBX 7 7 7 1 +BITMAP +38 +74 +E2 +C6 +8E +5C +38 +ENDCHAR +STARTCHAR uni011644 +ENCODING 71236 +BBX 8 11 7 0 +BITMAP +02 +03 +03 +03 +03 +03 +C3 +C3 +E3 +7F +3E +ENDCHAR +STARTCHAR uni011650 +ENCODING 71248 +BBX 8 8 4 1 +BITMAP +3C +72 +E1 +C1 +83 +87 +4E +3C +ENDCHAR +STARTCHAR uni011651 +ENCODING 71249 +BBX 8 12 4 -1 +BITMAP +3C +72 +E1 +C1 +83 +87 +4F +3F +03 +03 +03 +01 +ENDCHAR +STARTCHAR uni011652 +ENCODING 71250 +BBX 12 11 4 0 +BITMAP +7C00 +FE00 +0300 +0100 +0100 +0300 +0700 +0E00 +1C00 +3FE0 +7FF0 +ENDCHAR +STARTCHAR uni011653 +ENCODING 71251 +BBX 7 11 6 0 +BITMAP +78 +FC +06 +02 +7C +3E +02 +02 +86 +FC +7C +ENDCHAR +STARTCHAR uni011654 +ENCODING 71252 +BBX 11 11 4 0 +BITMAP +0060 +F8E0 +7DC0 +0380 +0700 +0E80 +0C40 +0840 +08C0 +05C0 +0380 +ENDCHAR +STARTCHAR uni011655 +ENCODING 71253 +BBX 11 11 3 0 +BITMAP +0380 +8780 +8F80 +7F00 +3E00 +0C00 +0800 +0800 +0C20 +07E0 +07C0 +ENDCHAR +STARTCHAR uni011656 +ENCODING 71254 +BBX 7 11 6 0 +BITMAP +3C +7E +C0 +80 +7C +F8 +80 +80 +C2 +7E +7C +ENDCHAR +STARTCHAR uni011657 +ENCODING 71255 +BBX 11 11 3 0 +BITMAP +63C0 +C760 +C660 +C660 +C3E0 +C1E0 +C060 +C060 +60C0 +3F80 +1F00 +ENDCHAR +STARTCHAR uni011658 +ENCODING 71256 +BBX 7 11 6 0 +BITMAP +06 +0E +1C +38 +70 +E0 +C0 +C0 +C6 +7E +3C +ENDCHAR +STARTCHAR uni011659 +ENCODING 71257 +BBX 11 11 3 0 +BITMAP +78C0 +DC60 +CC60 +CC60 +F860 +F060 +C060 +C060 +60C0 +3F80 +1F00 +ENDCHAR +STARTCHAR uni011660 +ENCODING 71264 +BBX 10 13 5 -1 +BITMAP +7100 +8880 +8440 +8440 +8440 +6440 +0480 +0900 +1000 +2000 +4000 +4000 +4000 +ENDCHAR +STARTCHAR uni011661 +ENCODING 71265 +BBX 13 6 1 3 +BITMAP +00F0 +E108 +1108 +0808 +0410 +03E0 +ENDCHAR +STARTCHAR uni011662 +ENCODING 71266 +BBX 10 14 5 -1 +BITMAP +7100 +8880 +8440 +0440 +0480 +7900 +8880 +8440 +8440 +0480 +0900 +1000 +2000 +2000 +ENDCHAR +STARTCHAR uni011663 +ENCODING 71267 +BBX 9 15 5 -2 +BITMAP +7000 +8900 +8480 +0480 +7900 +8900 +8480 +0480 +7900 +8900 +8480 +0480 +0900 +1000 +1000 +ENDCHAR +STARTCHAR uni011664 +ENCODING 71268 +BBX 13 13 2 -1 +BITMAP +7120 +8890 +8448 +8448 +8448 +6448 +0490 +0920 +1000 +2000 +4000 +4000 +4000 +ENDCHAR +STARTCHAR uni011665 +ENCODING 71269 +BBX 14 6 1 3 +BITMAP +01C8 +E024 +1024 +0824 +0448 +0380 +ENDCHAR +STARTCHAR uni011666 +ENCODING 71270 +BBX 16 6 0 3 +BITMAP +0392 +C049 +2049 +1049 +0892 +0700 +ENDCHAR +STARTCHAR uni011667 +ENCODING 71271 +BBX 6 13 5 0 +BITMAP +40 +40 +40 +20 +10 +08 +04 +64 +84 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni011668 +ENCODING 71272 +BBX 13 13 2 0 +BITMAP +4000 +4000 +4000 +2000 +1000 +0920 +0490 +6448 +8448 +8448 +8448 +8890 +7120 +ENDCHAR +STARTCHAR uni011669 +ENCODING 71273 +BBX 8 6 4 3 +BITMAP +9E +A1 +A1 +85 +85 +79 +ENDCHAR +STARTCHAR uni01166A +ENCODING 71274 +BBX 11 8 2 2 +BITMAP +0080 +9E40 +A120 +A120 +8520 +8520 +7920 +0040 +ENDCHAR +STARTCHAR uni01166B +ENCODING 71275 +BBX 14 8 1 2 +BITMAP +0090 +9E48 +A124 +A124 +8524 +8524 +7924 +0048 +ENDCHAR +STARTCHAR uni01166C +ENCODING 71276 +BBX 14 8 1 2 +BITMAP +4800 +9278 +9284 +9284 +9214 +9214 +49E4 +2400 +ENDCHAR +STARTCHAR uni011680 +ENCODING 71296 +BBX 10 8 3 2 +BITMAP +FFC0 +4000 +8700 +8880 +8880 +9080 +9080 +6100 +ENDCHAR +STARTCHAR uni011681 +ENCODING 71297 +BBX 9 11 3 2 +BITMAP +0080 +0100 +0200 +FF80 +4000 +8700 +8880 +8880 +9080 +9080 +6100 +ENDCHAR +STARTCHAR uni011682 +ENCODING 71298 +BBX 6 10 5 2 +BITMAP +1C +20 +20 +48 +40 +40 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni011683 +ENCODING 71299 +BBX 6 10 5 2 +BITMAP +1C +20 +28 +40 +48 +40 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni011684 +ENCODING 71300 +BBX 7 10 4 2 +BITMAP +3C +40 +80 +9C +82 +82 +8C +82 +42 +3C +ENDCHAR +STARTCHAR uni011685 +ENCODING 71301 +BBX 8 11 3 2 +BITMAP +8E +51 +3E +20 +4E +41 +41 +46 +41 +21 +1E +ENDCHAR +STARTCHAR uni011686 +ENCODING 71302 +BBX 6 8 5 2 +BITMAP +78 +84 +04 +18 +60 +80 +84 +78 +ENDCHAR +STARTCHAR uni011687 +ENCODING 71303 +BBX 6 10 5 2 +BITMAP +FC +00 +78 +84 +04 +18 +60 +80 +84 +78 +ENDCHAR +STARTCHAR uni011688 +ENCODING 71304 +BBX 11 11 2 2 +BITMAP +3B80 +4440 +0000 +FFE0 +2000 +4380 +4440 +4440 +4840 +4840 +3080 +ENDCHAR +STARTCHAR uni011689 +ENCODING 71305 +BBX 9 12 3 2 +BITMAP +7700 +8880 +7700 +8880 +FF80 +4000 +8700 +8880 +8880 +9080 +9080 +6100 +ENDCHAR +STARTCHAR uni01168A +ENCODING 71306 +BBX 10 8 3 2 +BITMAP +4080 +2100 +1200 +1200 +7F80 +9240 +9240 +6180 +ENDCHAR +STARTCHAR uni01168B +ENCODING 71307 +BBX 8 8 4 2 +BITMAP +81 +41 +7F +81 +81 +83 +7D +01 +ENDCHAR +STARTCHAR uni01168C +ENCODING 71308 +BBX 9 8 4 2 +BITMAP +FF80 +1100 +1100 +1100 +7100 +9100 +9100 +6100 +ENDCHAR +STARTCHAR uni01168D +ENCODING 71309 +BBX 9 8 3 2 +BITMAP +9300 +9280 +9280 +6C80 +0080 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni01168E +ENCODING 71310 +BBX 7 8 5 2 +BITMAP +F0 +0A +08 +70 +08 +08 +08 +F0 +ENDCHAR +STARTCHAR uni01168F +ENCODING 71311 +BBX 10 8 3 2 +BITMAP +FFC0 +1040 +1040 +1040 +7040 +9840 +9440 +6380 +ENDCHAR +STARTCHAR uni011690 +ENCODING 71312 +BBX 10 8 3 2 +BITMAP +E180 +1240 +1440 +6440 +1F80 +1440 +2240 +4180 +ENDCHAR +STARTCHAR uni011691 +ENCODING 71313 +BBX 8 8 5 2 +BITMAP +F0 +08 +0E +71 +09 +09 +09 +F0 +ENDCHAR +STARTCHAR uni011692 +ENCODING 71314 +BBX 8 8 4 2 +BITMAP +E0 +20 +20 +3E +01 +01 +06 +78 +ENDCHAR +STARTCHAR uni011693 +ENCODING 71315 +BBX 10 8 3 2 +BITMAP +FFC0 +2080 +2280 +7880 +6480 +0480 +0480 +0480 +ENDCHAR +STARTCHAR uni011694 +ENCODING 71316 +BBX 7 8 4 2 +BITMAP +F0 +10 +10 +30 +40 +82 +82 +7C +ENDCHAR +STARTCHAR uni011695 +ENCODING 71317 +BBX 6 8 5 2 +BITMAP +E0 +10 +10 +20 +58 +84 +84 +78 +ENDCHAR +STARTCHAR uni011696 +ENCODING 71318 +BBX 5 8 5 2 +BITMAP +70 +08 +08 +70 +08 +78 +88 +70 +ENDCHAR +STARTCHAR uni011697 +ENCODING 71319 +BBX 10 8 3 2 +BITMAP +F000 +1000 +1000 +1000 +7080 +9940 +9540 +6380 +ENDCHAR +STARTCHAR uni011698 +ENCODING 71320 +BBX 10 9 3 1 +BITMAP +7700 +8880 +8880 +4080 +0080 +3E80 +4100 +3E80 +0040 +ENDCHAR +STARTCHAR uni011699 +ENCODING 71321 +BBX 5 8 6 2 +BITMAP +F0 +08 +08 +70 +08 +08 +08 +F0 +ENDCHAR +STARTCHAR uni01169A +ENCODING 71322 +BBX 10 8 3 2 +BITMAP +FFC0 +4080 +3080 +2C80 +2380 +4180 +3E80 +0080 +ENDCHAR +STARTCHAR uni01169B +ENCODING 71323 +BBX 10 8 3 2 +BITMAP +F040 +1040 +1040 +1040 +7040 +9840 +9440 +6380 +ENDCHAR +STARTCHAR uni01169C +ENCODING 71324 +BBX 10 8 3 2 +BITMAP +FFC0 +4080 +2080 +2080 +2080 +4080 +4100 +3E00 +ENDCHAR +STARTCHAR uni01169D +ENCODING 71325 +BBX 7 8 4 2 +BITMAP +E0 +20 +2C +72 +62 +02 +02 +02 +ENDCHAR +STARTCHAR uni01169E +ENCODING 71326 +BBX 8 8 4 2 +BITMAP +81 +41 +41 +81 +81 +83 +7D +01 +ENDCHAR +STARTCHAR uni01169F +ENCODING 71327 +BBX 6 8 5 2 +BITMAP +E0 +10 +10 +20 +48 +94 +94 +78 +ENDCHAR +STARTCHAR uni0116A0 +ENCODING 71328 +BBX 7 8 5 2 +BITMAP +80 +80 +82 +86 +7A +02 +02 +02 +ENDCHAR +STARTCHAR uni0116A1 +ENCODING 71329 +BBX 7 8 4 2 +BITMAP +7C +82 +3A +44 +3A +02 +82 +7C +ENDCHAR +STARTCHAR uni0116A2 +ENCODING 71330 +BBX 9 8 3 2 +BITMAP +8700 +4880 +2880 +1080 +3080 +5080 +5080 +2080 +ENDCHAR +STARTCHAR uni0116A3 +ENCODING 71331 +BBX 10 8 3 2 +BITMAP +FFC0 +4080 +2080 +2080 +2080 +4180 +3E80 +0080 +ENDCHAR +STARTCHAR uni0116A4 +ENCODING 71332 +BBX 5 8 6 2 +BITMAP +C0 +20 +10 +08 +38 +48 +48 +30 +ENDCHAR +STARTCHAR uni0116A5 +ENCODING 71333 +BBX 9 8 3 2 +BITMAP +FF80 +0000 +3600 +4900 +8880 +8080 +8080 +4100 +ENDCHAR +STARTCHAR uni0116A6 +ENCODING 71334 +BBX 7 8 5 2 +BITMAP +C0 +20 +42 +86 +7A +02 +02 +02 +ENDCHAR +STARTCHAR uni0116A7 +ENCODING 71335 +BBX 9 9 3 1 +BITMAP +FF00 +3080 +4880 +3880 +0880 +6880 +9080 +6880 +0400 +ENDCHAR +STARTCHAR uni0116A8 +ENCODING 71336 +BBX 10 8 3 2 +BITMAP +FFC0 +4300 +2480 +1480 +0880 +1880 +2880 +1080 +ENDCHAR +STARTCHAR uni0116A9 +ENCODING 71337 +BBX 6 8 4 2 +BITMAP +78 +04 +04 +98 +84 +84 +44 +38 +ENDCHAR +STARTCHAR uni0116AA +ENCODING 71338 +BBX 7 9 6 1 +BITMAP +F0 +08 +08 +70 +08 +08 +F0 +52 +4C +ENDCHAR +STARTCHAR uni0116AB +ENCODING 71339 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -8 12 +BITMAP +80 +ENDCHAR +STARTCHAR uni0116AC +ENCODING 71340 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 4 -1 4 +BITMAP +80 +00 +00 +80 +ENDCHAR +STARTCHAR uni0116AD +ENCODING 71341 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 10 +BITMAP +20 +40 +80 +ENDCHAR +STARTCHAR uni0116AE +ENCODING 71342 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 11 -15 2 +BITMAP +78 +84 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0116AF +ENCODING 71343 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 11 -8 2 +BITMAP +78 +84 +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni0116B0 +ENCODING 71344 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 2 -11 -2 +BITMAP +84 +78 +ENDCHAR +STARTCHAR uni0116B1 +ENCODING 71345 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -11 -2 +BITMAP +84 +78 +84 +78 +ENDCHAR +STARTCHAR uni0116B2 +ENCODING 71346 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 1 -12 11 +BITMAP +FF +ENDCHAR +STARTCHAR uni0116B3 +ENCODING 71347 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -12 11 +BITMAP +FF +00 +FF +ENDCHAR +STARTCHAR uni0116B4 +ENCODING 71348 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 2 -13 11 +BITMAP +7700 +8880 +ENDCHAR +STARTCHAR uni0116B5 +ENCODING 71349 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 4 -13 10 +BITMAP +7700 +8880 +7700 +8880 +ENDCHAR +STARTCHAR uni0116B6 +ENCODING 71350 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 7 -4 6 +BITMAP +80 +80 +40 +40 +40 +20 +20 +ENDCHAR +STARTCHAR uni0116B7 +ENCODING 71351 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -8 -1 +BITMAP +80 +ENDCHAR +STARTCHAR uni0116C0 +ENCODING 71360 +BBX 2 2 7 5 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni0116C1 +ENCODING 71361 +BBX 7 8 5 2 +BITMAP +38 +44 +82 +82 +C2 +A2 +A2 +42 +ENDCHAR +STARTCHAR uni0116C2 +ENCODING 71362 +BBX 7 8 4 2 +BITMAP +3C +02 +02 +1C +02 +82 +42 +3C +ENDCHAR +STARTCHAR uni0116C3 +ENCODING 71363 +BBX 6 9 5 1 +BITMAP +78 +04 +04 +38 +04 +64 +94 +78 +08 +ENDCHAR +STARTCHAR uni0116C4 +ENCODING 71364 +BBX 7 8 4 2 +BITMAP +82 +82 +82 +44 +38 +44 +44 +38 +ENDCHAR +STARTCHAR uni0116C5 +ENCODING 71365 +BBX 7 8 4 2 +BITMAP +82 +82 +42 +46 +3A +02 +02 +02 +ENDCHAR +STARTCHAR uni0116C6 +ENCODING 71366 +BBX 6 8 4 2 +BITMAP +10 +28 +28 +10 +E8 +04 +04 +04 +ENDCHAR +STARTCHAR uni0116C7 +ENCODING 71367 +BBX 4 8 6 2 +BITMAP +60 +90 +90 +70 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0116C8 +ENCODING 71368 +BBX 6 8 5 2 +BITMAP +78 +84 +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uni0116C9 +ENCODING 71369 +BBX 6 8 5 2 +BITMAP +18 +20 +40 +40 +98 +A4 +A4 +78 +ENDCHAR +STARTCHAR uni011700 +ENCODING 71424 +BBX 10 8 2 0 +BITMAP +8880 +5540 +6640 +4440 +4440 +4440 +4440 +4440 +ENDCHAR +STARTCHAR uni011701 +ENCODING 71425 +BBX 10 8 2 0 +BITMAP +8000 +4300 +4480 +4840 +5040 +6240 +4180 +4000 +ENDCHAR +STARTCHAR uni011702 +ENCODING 71426 +BBX 7 10 4 0 +BITMAP +02 +02 +82 +64 +58 +40 +48 +44 +44 +38 +ENDCHAR +STARTCHAR uni011703 +ENCODING 71427 +BBX 6 8 4 0 +BITMAP +8C +B4 +C0 +84 +9C +E4 +84 +04 +ENDCHAR +STARTCHAR uni011704 +ENCODING 71428 +BBX 11 8 3 0 +BITMAP +7100 +8900 +8A80 +8A80 +8A80 +8C40 +8C40 +7820 +ENDCHAR +STARTCHAR uni011705 +ENCODING 71429 +BBX 7 8 5 0 +BITMAP +70 +88 +88 +88 +8A +8C +8C +74 +ENDCHAR +STARTCHAR uni011706 +ENCODING 71430 +BBX 6 8 5 0 +BITMAP +88 +44 +44 +44 +44 +44 +48 +30 +ENDCHAR +STARTCHAR uni011707 +ENCODING 71431 +BBX 10 8 3 0 +BITMAP +8580 +4640 +4440 +4440 +4440 +4440 +4A40 +3180 +ENDCHAR +STARTCHAR uni011708 +ENCODING 71432 +BBX 6 8 5 0 +BITMAP +98 +64 +44 +44 +44 +44 +48 +30 +ENDCHAR +STARTCHAR uni011709 +ENCODING 71433 +BBX 6 8 5 0 +BITMAP +88 +44 +44 +44 +7C +44 +48 +30 +ENDCHAR +STARTCHAR uni01170A +ENCODING 71434 +BBX 10 8 3 0 +BITMAP +8480 +4440 +4440 +4440 +4440 +4440 +4A40 +3180 +ENDCHAR +STARTCHAR uni01170B +ENCODING 71435 +BBX 9 8 4 0 +BITMAP +8500 +4680 +4480 +4C80 +5480 +6480 +4480 +4300 +ENDCHAR +STARTCHAR uni01170C +ENCODING 71436 +BBX 10 8 3 0 +BITMAP +8400 +7580 +4E40 +4440 +4440 +4440 +4A40 +3180 +ENDCHAR +STARTCHAR uni01170D +ENCODING 71437 +BBX 9 10 3 0 +BITMAP +0700 +0880 +0980 +0980 +0800 +7F00 +8880 +8880 +9C80 +6300 +ENDCHAR +STARTCHAR uni01170E +ENCODING 71438 +BBX 9 8 4 0 +BITMAP +8580 +4580 +4480 +4C80 +5480 +6500 +4600 +4400 +ENDCHAR +STARTCHAR uni01170F +ENCODING 71439 +BBX 9 8 4 0 +BITMAP +8080 +4080 +4480 +4C80 +5480 +6500 +4600 +4400 +ENDCHAR +STARTCHAR uni011710 +ENCODING 71440 +BBX 10 10 2 0 +BITMAP +0100 +0100 +8100 +4200 +4480 +4C40 +5440 +6480 +4500 +4200 +ENDCHAR +STARTCHAR uni011711 +ENCODING 71441 +BBX 6 8 4 0 +BITMAP +80 +40 +44 +4C +54 +64 +44 +44 +ENDCHAR +STARTCHAR uni011712 +ENCODING 71442 +BBX 10 10 2 0 +BITMAP +0300 +0400 +8880 +5540 +6640 +4440 +4440 +4440 +4440 +4440 +ENDCHAR +STARTCHAR uni011713 +ENCODING 71443 +BBX 7 10 4 -2 +BITMAP +C6 +7A +40 +40 +4C +72 +42 +02 +1A +1C +ENDCHAR +STARTCHAR uni011714 +ENCODING 71444 +BBX 10 10 3 -2 +BITMAP +C000 +3580 +4E40 +4440 +4440 +4440 +4A40 +3B80 +0A00 +0400 +ENDCHAR +STARTCHAR uni011715 +ENCODING 71445 +BBX 11 8 2 0 +BITMAP +3F80 +4040 +8020 +8020 +8020 +8020 +8C20 +7CC0 +ENDCHAR +STARTCHAR uni011716 +ENCODING 71446 +BBX 13 8 2 0 +BITMAP +3EF0 +4108 +8088 +8088 +8088 +80A8 +B090 +7300 +ENDCHAR +STARTCHAR uni011717 +ENCODING 71447 +BBX 12 10 3 -2 +BITMAP +C0E0 +2110 +2210 +22D0 +22D0 +2260 +1C00 +0200 +4200 +3C00 +ENDCHAR +STARTCHAR uni011718 +ENCODING 71448 +BBX 10 10 3 -2 +BITMAP +8580 +4640 +4440 +4440 +4440 +4440 +4A40 +3B80 +0A00 +0400 +ENDCHAR +STARTCHAR uni011719 +ENCODING 71449 +BBX 10 10 3 -2 +BITMAP +8480 +4440 +4440 +4440 +4440 +4440 +4A40 +3B80 +0A00 +0400 +ENDCHAR +STARTCHAR uni01171A +ENCODING 71450 +BBX 5 8 6 0 +BITMAP +F0 +88 +88 +88 +88 +88 +90 +60 +ENDCHAR +STARTCHAR uni01171D +ENCODING 71453 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 3 -13 -2 +BITMAP +0020 +81C0 +7E00 +ENDCHAR +STARTCHAR uni01171E +ENCODING 71454 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 16 -16 -2 +BITMAP +3FFE +4001 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +8000 +4010 +3FE0 +ENDCHAR +STARTCHAR uni01171F +ENCODING 71455 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -5 9 +BITMAP +70 +80 +80 +40 +ENDCHAR +STARTCHAR uni011720 +ENCODING 71456 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 9 -2 0 +BITMAP +40 +40 +80 +00 +00 +80 +40 +40 +80 +ENDCHAR +STARTCHAR uni011721 +ENCODING 71457 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 10 -3 -2 +BITMAP +80 +40 +40 +40 +40 +40 +40 +40 +40 +20 +ENDCHAR +STARTCHAR uni011722 +ENCODING 71458 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -3 8 +BITMAP +40 +A0 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni011723 +ENCODING 71459 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -3 8 +BITMAP +40 +A0 +E0 +A0 +40 +ENDCHAR +STARTCHAR uni011724 +ENCODING 71460 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -4 -2 +BITMAP +80 +80 +70 +ENDCHAR +STARTCHAR uni011725 +ENCODING 71461 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -4 -2 +BITMAP +80 +F0 +70 +ENDCHAR +STARTCHAR uni011726 +ENCODING 71462 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 14 -8 -2 +BITMAP +20 +40 +40 +40 +40 +40 +40 +40 +40 +C0 +C0 +40 +40 +40 +ENDCHAR +STARTCHAR uni011727 +ENCODING 71463 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -3 8 +BITMAP +60 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni011728 +ENCODING 71464 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -4 -2 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni011729 +ENCODING 71465 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -3 8 +BITMAP +40 +A0 +A0 +20 +C0 +ENDCHAR +STARTCHAR uni01172A +ENCODING 71466 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -5 9 +BITMAP +40 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni01172B +ENCODING 71467 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -8 9 +BITMAP +78 +84 +80 +40 +ENDCHAR +STARTCHAR uni011730 +ENCODING 71472 +BBX 6 6 6 0 +BITMAP +18 +24 +44 +88 +90 +60 +ENDCHAR +STARTCHAR uni011731 +ENCODING 71473 +BBX 13 10 2 0 +BITMAP +0020 +0040 +0380 +1C00 +01C0 +2020 +1620 +1120 +2120 +C218 +ENDCHAR +STARTCHAR uni011732 +ENCODING 71474 +BBX 10 8 2 0 +BITMAP +8000 +4000 +4300 +4480 +4840 +5040 +6240 +4180 +ENDCHAR +STARTCHAR uni011733 +ENCODING 71475 +BBX 9 12 4 0 +BITMAP +0100 +0280 +0100 +0000 +8080 +4080 +4480 +4C80 +5480 +6500 +4600 +4400 +ENDCHAR +STARTCHAR uni011734 +ENCODING 71476 +BBX 10 12 4 0 +BITMAP +0080 +0140 +01C0 +0140 +8080 +4080 +4480 +4C80 +5480 +6500 +4600 +4400 +ENDCHAR +STARTCHAR uni011735 +ENCODING 71477 +BBX 11 10 4 -2 +BITMAP +8300 +4080 +4480 +4C80 +5480 +6480 +4480 +4480 +0080 +0060 +ENDCHAR +STARTCHAR uni011736 +ENCODING 71478 +BBX 9 14 6 -2 +BITMAP +3F80 +4000 +8000 +8000 +A300 +9480 +9800 +9000 +9600 +8900 +8100 +8100 +4200 +3C00 +ENDCHAR +STARTCHAR uni011737 +ENCODING 71479 +BBX 11 10 4 -2 +BITMAP +1800 +2580 +2240 +4640 +4940 +8940 +8640 +0040 +0040 +0020 +ENDCHAR +STARTCHAR uni011738 +ENCODING 71480 +BBX 16 10 0 -2 +BITMAP +1800 +258C +2252 +4632 +494A +894A +8632 +0002 +0002 +0001 +ENDCHAR +STARTCHAR uni011739 +ENCODING 71481 +BBX 9 15 6 -2 +BITMAP +3E00 +4100 +8080 +8080 +9880 +9880 +8F00 +8800 +8800 +8880 +8700 +8000 +4080 +2080 +1F00 +ENDCHAR +STARTCHAR uni01173A +ENCODING 71482 +BBX 13 8 2 0 +BITMAP +C018 +4008 +4188 +4248 +4448 +4888 +4908 +4608 +ENDCHAR +STARTCHAR uni01173B +ENCODING 71483 +BBX 12 11 4 0 +BITMAP +0030 +0020 +0020 +80A0 +40C0 +4480 +4C80 +5480 +6500 +4600 +4400 +ENDCHAR +STARTCHAR uni01173C +ENCODING 71484 +BBX 2 8 8 0 +BITMAP +C0 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni01173D +ENCODING 71485 +BBX 6 8 6 0 +BITMAP +CC +44 +44 +44 +44 +44 +44 +44 +ENDCHAR +STARTCHAR uni01173E +ENCODING 71486 +BBX 12 12 2 0 +BITMAP +3FE0 +4010 +8000 +8000 +8800 +85C0 +8220 +8220 +8220 +8220 +4140 +3F80 +ENDCHAR +STARTCHAR uni01173F +ENCODING 71487 +BBX 14 15 2 -2 +BITMAP +01C0 +021C +0110 +01E0 +0200 +8600 +4A00 +5200 +6200 +4380 +0240 +0440 +0840 +043C +0200 +ENDCHAR +STARTCHAR uni011800 +ENCODING 71680 +BBX 16 10 0 0 +BITMAP +FFFF +0800 +0860 +0890 +1688 +0188 +0010 +0020 +0020 +0010 +ENDCHAR +STARTCHAR uni011801 +ENCODING 71681 +BBX 16 10 0 0 +BITMAP +FFF1 +100A +10C4 +1120 +2D10 +0310 +0020 +0040 +0040 +0020 +ENDCHAR +STARTCHAR uni011802 +ENCODING 71682 +BBX 6 9 9 2 +BITMAP +0C +30 +40 +80 +80 +B0 +C8 +48 +30 +ENDCHAR +STARTCHAR uni011803 +ENCODING 71683 +BBX 6 12 9 -1 +BITMAP +0C +30 +40 +80 +80 +B0 +C8 +48 +30 +00 +D8 +D8 +ENDCHAR +STARTCHAR uni011804 +ENCODING 71684 +BBX 9 8 5 2 +BITMAP +1F80 +8080 +8100 +4600 +4100 +2080 +1080 +0F00 +ENDCHAR +STARTCHAR uni011805 +ENCODING 71685 +BBX 11 10 4 0 +BITMAP +1F80 +8080 +8100 +4600 +4180 +20C0 +98A0 +4720 +3040 +0F80 +ENDCHAR +STARTCHAR uni011806 +ENCODING 71686 +BBX 11 8 4 2 +BITMAP +0060 +0080 +0080 +6100 +9100 +1100 +1100 +0E00 +ENDCHAR +STARTCHAR uni011807 +ENCODING 71687 +BBX 11 8 4 2 +BITMAP +0060 +FC80 +0080 +6100 +9100 +1100 +1100 +0E00 +ENDCHAR +STARTCHAR uni011808 +ENCODING 71688 +BBX 9 12 5 2 +BITMAP +0200 +0500 +0880 +0000 +1F80 +8080 +8100 +4600 +4100 +2080 +1080 +0F00 +ENDCHAR +STARTCHAR uni011809 +ENCODING 71689 +BBX 9 12 5 2 +BITMAP +2200 +5500 +8880 +0000 +1F80 +8080 +8100 +4600 +4100 +2080 +1080 +0F00 +ENDCHAR +STARTCHAR uni01180A +ENCODING 71690 +BBX 16 8 0 2 +BITMAP +FFFF +0010 +0010 +03A0 +0460 +0460 +0490 +0308 +ENDCHAR +STARTCHAR uni01180B +ENCODING 71691 +BBX 14 8 0 2 +BITMAP +F060 +1890 +1710 +11F0 +1210 +1210 +1410 +080C +ENDCHAR +STARTCHAR uni01180C +ENCODING 71692 +BBX 16 9 0 1 +BITMAP +FFFF +0208 +0208 +0208 +0208 +0208 +0208 +1248 +0C30 +ENDCHAR +STARTCHAR uni01180D +ENCODING 71693 +BBX 14 8 0 2 +BITMAP +C630 +2948 +1144 +1084 +0004 +0008 +0008 +0004 +ENDCHAR +STARTCHAR uni01180E +ENCODING 71694 +BBX 10 8 4 1 +BITMAP +0200 +3880 +4500 +8200 +8000 +4000 +3800 +07C0 +ENDCHAR +STARTCHAR uni01180F +ENCODING 71695 +BBX 16 8 0 2 +BITMAP +FFFF +0810 +0410 +0410 +0410 +0E10 +1510 +18E0 +ENDCHAR +STARTCHAR uni011810 +ENCODING 71696 +BBX 9 9 3 1 +BITMAP +FF80 +0080 +0080 +1D00 +2300 +1C80 +0080 +0300 +0400 +ENDCHAR +STARTCHAR uni011811 +ENCODING 71697 +BBX 16 9 0 1 +BITMAP +FFFF +0100 +01C0 +0220 +0D10 +0090 +0090 +0110 +0200 +ENDCHAR +STARTCHAR uni011812 +ENCODING 71698 +BBX 16 9 0 1 +BITMAP +FFFF +0240 +0240 +0240 +0240 +0250 +0248 +1248 +0C30 +ENDCHAR +STARTCHAR uni011813 +ENCODING 71699 +BBX 16 8 0 2 +BITMAP +FFFF +0108 +0208 +0C68 +0268 +0108 +2108 +1E08 +ENDCHAR +STARTCHAR uni011814 +ENCODING 71700 +BBX 12 8 0 2 +BITMAP +FF00 +0100 +0100 +0700 +0800 +0810 +0820 +07C0 +ENDCHAR +STARTCHAR uni011815 +ENCODING 71701 +BBX 8 8 4 2 +BITMAP +3C +42 +81 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni011816 +ENCODING 71702 +BBX 16 9 0 1 +BITMAP +FFFF +0200 +0200 +0200 +0200 +0FF0 +1248 +1248 +0C30 +ENDCHAR +STARTCHAR uni011817 +ENCODING 71703 +BBX 16 8 0 2 +BITMAP +FFFF +0200 +0230 +0248 +0E48 +1328 +1290 +0C60 +ENDCHAR +STARTCHAR uni011818 +ENCODING 71704 +BBX 11 5 2 4 +BITMAP +2220 +5540 +8880 +0000 +FFE0 +ENDCHAR +STARTCHAR uni011819 +ENCODING 71705 +BBX 7 8 5 2 +BITMAP +FE +02 +04 +18 +04 +02 +82 +7C +ENDCHAR +STARTCHAR uni01181A +ENCODING 71706 +BBX 16 8 0 2 +BITMAP +FFFF +1860 +1490 +1310 +11F0 +1210 +1410 +080C +ENDCHAR +STARTCHAR uni01181B +ENCODING 71707 +BBX 16 8 0 2 +BITMAP +FFFF +0200 +0200 +0200 +0E10 +1308 +12C8 +0C30 +ENDCHAR +STARTCHAR uni01181C +ENCODING 71708 +BBX 16 8 0 2 +BITMAP +FFFF +1060 +1090 +1110 +1110 +1210 +1210 +0C0C +ENDCHAR +STARTCHAR uni01181D +ENCODING 71709 +BBX 16 10 0 0 +BITMAP +FFFF +0040 +0040 +0080 +0300 +0080 +0040 +0040 +0040 +0020 +ENDCHAR +STARTCHAR uni01181E +ENCODING 71710 +BBX 12 7 2 2 +BITMAP +8180 +4240 +4440 +4440 +4840 +4840 +3030 +ENDCHAR +STARTCHAR uni01181F +ENCODING 71711 +BBX 13 8 0 2 +BITMAP +FF00 +0080 +0100 +0200 +0470 +0488 +0408 +03F0 +ENDCHAR +STARTCHAR uni011820 +ENCODING 71712 +BBX 16 9 0 1 +BITMAP +FFFF +0060 +0180 +0200 +0500 +0CA0 +0460 +03C0 +0020 +ENDCHAR +STARTCHAR uni011821 +ENCODING 71713 +BBX 9 9 3 1 +BITMAP +FF80 +0080 +0080 +1D00 +2300 +9C80 +8080 +4300 +3C00 +ENDCHAR +STARTCHAR uni011822 +ENCODING 71714 +BBX 10 8 3 0 +BITMAP +E300 +1480 +1440 +0C40 +0080 +0100 +0100 +0080 +ENDCHAR +STARTCHAR uni011823 +ENCODING 71715 +BBX 16 8 0 2 +BITMAP +FFFF +1010 +0810 +0410 +0410 +0830 +0850 +0790 +ENDCHAR +STARTCHAR uni011824 +ENCODING 71716 +BBX 16 8 0 2 +BITMAP +FFFF +0080 +0080 +0080 +0380 +0300 +0080 +0040 +ENDCHAR +STARTCHAR uni011825 +ENCODING 71717 +BBX 9 7 3 2 +BITMAP +FF80 +0000 +7700 +8880 +8880 +0100 +0100 +ENDCHAR +STARTCHAR uni011826 +ENCODING 71718 +BBX 16 8 0 2 +BITMAP +FFFF +0060 +0180 +0200 +0460 +0460 +0430 +03C8 +ENDCHAR +STARTCHAR uni011827 +ENCODING 71719 +BBX 16 10 0 0 +BITMAP +FFFF +0710 +0890 +0990 +0690 +0110 +0E10 +0C10 +0200 +0100 +ENDCHAR +STARTCHAR uni011828 +ENCODING 71720 +BBX 16 8 0 2 +BITMAP +F01F +0810 +07F0 +0410 +0FF0 +0C10 +0010 +0010 +ENDCHAR +STARTCHAR uni011829 +ENCODING 71721 +BBX 16 10 0 0 +BITMAP +FFFF +1000 +0C60 +0290 +0288 +0188 +0010 +0020 +0020 +0010 +ENDCHAR +STARTCHAR uni01182A +ENCODING 71722 +BBX 7 8 5 2 +BITMAP +FE +02 +04 +18 +04 +62 +92 +7C +ENDCHAR +STARTCHAR uni01182B +ENCODING 71723 +BBX 7 9 5 1 +BITMAP +FE +02 +64 +98 +64 +02 +62 +92 +7C +ENDCHAR +STARTCHAR uni01182C +ENCODING 71724 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -6 11 +BITMAP +88 +50 +20 +ENDCHAR +STARTCHAR uni01182D +ENCODING 71725 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 12 -16 2 +BITMAP +1C +22 +42 +40 +E0 +40 +40 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni01182E +ENCODING 71726 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 12 -7 2 +BITMAP +70 +88 +84 +04 +0E +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni01182F +ENCODING 71727 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -12 -2 +BITMAP +86 +69 +1E +ENDCHAR +STARTCHAR uni011830 +ENCODING 71728 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 3 -12 -2 +BITMAP +78 +96 +61 +ENDCHAR +STARTCHAR uni011831 +ENCODING 71729 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -9 -2 +BITMAP +80 +88 +88 +70 +ENDCHAR +STARTCHAR uni011832 +ENCODING 71730 +BBX 5 5 4 -2 +BITMAP +60 +80 +70 +80 +78 +ENDCHAR +STARTCHAR uni011833 +ENCODING 71731 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 1 -11 11 +BITMAP +FC +ENDCHAR +STARTCHAR uni011834 +ENCODING 71732 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 11 +BITMAP +FC +00 +FC +ENDCHAR +STARTCHAR uni011835 +ENCODING 71733 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -11 11 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni011836 +ENCODING 71734 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 3 -13 11 +BITMAP +2200 +5500 +8880 +ENDCHAR +STARTCHAR uni011837 +ENCODING 71735 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011838 +ENCODING 71736 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 5 -2 3 +BITMAP +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni011839 +ENCODING 71737 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 -2 +BITMAP +E0 +18 +04 +ENDCHAR +STARTCHAR uni01183A +ENCODING 71738 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -9 -1 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni01183B +ENCODING 71739 +BBX 4 4 6 3 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni0118A0 +ENCODING 71840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +44 +44 +44 +28 +28 +28 +10 +ENDCHAR +STARTCHAR uni0118A1 +ENCODING 71841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +1E +10 +10 +10 +10 +10 +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uni0118A2 +ENCODING 71842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3E +20 +20 +20 +FC +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0118A3 +ENCODING 71843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FE +ENDCHAR +STARTCHAR uni0118A4 +ENCODING 71844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +44 +28 +10 +10 +10 +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uni0118A5 +ENCODING 71845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +6C +48 +48 +48 +78 +48 +48 +48 +48 +D8 +ENDCHAR +STARTCHAR uni0118A6 +ENCODING 71846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3E +20 +20 +FC +20 +20 +20 +20 +20 +3E +ENDCHAR +STARTCHAR uni0118A7 +ENCODING 71847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +F8 +84 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0118A8 +ENCODING 71848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +82 +84 +44 +48 +48 +50 +50 +20 +ENDCHAR +STARTCHAR uni0118A9 +ENCODING 71849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +04 +04 +08 +10 +10 +20 +42 +FE +ENDCHAR +STARTCHAR uni0118AA +ENCODING 71850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +50 +1C +02 +22 +42 +84 +84 +78 +ENDCHAR +STARTCHAR uni0118AB +ENCODING 71851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +0C +14 +24 +44 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni0118AC +ENCODING 71852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +F8 +88 +88 +88 +FE +08 +08 +08 +08 +F8 +ENDCHAR +STARTCHAR uni0118AD +ENCODING 71853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +10 +7C +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni0118AE +ENCODING 71854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +FC +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni0118AF +ENCODING 71855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +F2 +82 +82 +82 +FE +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni0118B0 +ENCODING 71856 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +62 +92 +92 +92 +92 +92 +92 +92 +92 +8C +ENDCHAR +STARTCHAR uni0118B1 +ENCODING 71857 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +08 +08 +08 +10 +E0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni0118B2 +ENCODING 71858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +40 +40 +40 +40 +40 +40 +40 +42 +44 +F8 +ENDCHAR +STARTCHAR uni0118B3 +ENCODING 71859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +30 +50 +90 +50 +12 +14 +18 +10 +ENDCHAR +STARTCHAR uni0118B4 +ENCODING 71860 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +82 +9E +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni0118B5 +ENCODING 71861 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +82 +82 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni0118B6 +ENCODING 71862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +08 +18 +28 +48 +28 +18 +08 +0C +0A +F8 +ENDCHAR +STARTCHAR uni0118B7 +ENCODING 71863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +10 +28 +44 +82 +44 +28 +10 +ENDCHAR +STARTCHAR uni0118B8 +ENCODING 71864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +EE +44 +44 +44 +44 +44 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni0118B9 +ENCODING 71865 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C4 +4A +48 +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni0118BA +ENCODING 71866 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +30 +08 +C8 +48 +48 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni0118BB +ENCODING 71867 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +06 +38 +20 +40 +4C +B2 +C2 +04 +08 +F0 +ENDCHAR +STARTCHAR uni0118BC +ENCODING 71868 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni0118BD +ENCODING 71869 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +C2 +42 +42 +42 +42 +7E +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni0118BE +ENCODING 71870 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +80 +40 +42 +44 +48 +50 +60 +20 +10 +08 +ENDCHAR +STARTCHAR uni0118BF +ENCODING 71871 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +3C +20 +20 +20 +3C +22 +22 +22 +22 +E4 +ENDCHAR +STARTCHAR uni0118C0 +ENCODING 71872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +42 +A4 +24 +24 +24 +28 +28 +10 +ENDCHAR +STARTCHAR uni0118C1 +ENCODING 71873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +08 +14 +10 +10 +20 +20 +A0 +40 +ENDCHAR +STARTCHAR uni0118C2 +ENCODING 71874 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +1C +20 +20 +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni0118C3 +ENCODING 71875 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +80 +80 +80 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni0118C4 +ENCODING 71876 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +C2 +22 +22 +26 +1A +82 +84 +78 +ENDCHAR +STARTCHAR uni0118C5 +ENCODING 71877 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +24 +48 +48 +58 +68 +48 +48 +90 +ENDCHAR +STARTCHAR uni0118C6 +ENCODING 71878 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +E0 +10 +10 +FC +20 +20 +40 +40 +ENDCHAR +STARTCHAR uni0118C7 +ENCODING 71879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 2 0 +BITMAP +E0 +10 +10 +10 +20 +20 +40 +40 +ENDCHAR +STARTCHAR uni0118C8 +ENCODING 71880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +82 +82 +82 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni0118C9 +ENCODING 71881 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +18 +60 +80 +84 +78 +ENDCHAR +STARTCHAR uni0118CA +ENCODING 71882 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +38 +04 +7C +84 +78 +ENDCHAR +STARTCHAR uni0118CB +ENCODING 71883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +02 +04 +04 +1C +24 +24 +A4 +44 +ENDCHAR +STARTCHAR uni0118CC +ENCODING 71884 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +78 +88 +88 +8A +7C +08 +48 +30 +ENDCHAR +STARTCHAR uni0118CD +ENCODING 71885 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +02 +04 +08 +10 +7C +92 +92 +6C +ENDCHAR +STARTCHAR uni0118CE +ENCODING 71886 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +80 +40 +84 +84 +78 +ENDCHAR +STARTCHAR uni0118CF +ENCODING 71887 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +60 +88 +94 +94 +78 +10 +10 +E0 +ENDCHAR +STARTCHAR uni0118D0 +ENCODING 71888 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +22 +54 +54 +54 +54 +54 +54 +88 +ENDCHAR +STARTCHAR uni0118D1 +ENCODING 71889 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +08 +08 +08 +10 +E0 +80 +80 +80 +ENDCHAR +STARTCHAR uni0118D2 +ENCODING 71890 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +20 +20 +20 +40 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni0118D3 +ENCODING 71891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +90 +70 +10 +10 +10 +12 +12 +0C +ENDCHAR +STARTCHAR uni0118D4 +ENCODING 71892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +A0 +94 +4A +4C +48 +28 +28 +10 +ENDCHAR +STARTCHAR uni0118D5 +ENCODING 71893 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +98 +A4 +84 +84 +78 +ENDCHAR +STARTCHAR uni0118D6 +ENCODING 71894 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +38 +48 +48 +48 +3C +08 +88 +70 +ENDCHAR +STARTCHAR uni0118D7 +ENCODING 71895 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +38 +44 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni0118D8 +ENCODING 71896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +44 +44 +44 +44 +28 +28 +10 +ENDCHAR +STARTCHAR uni0118D9 +ENCODING 71897 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +44 +8A +8A +8A +92 +92 +92 +64 +ENDCHAR +STARTCHAR uni0118DA +ENCODING 71898 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +38 +04 +C4 +24 +A4 +C4 +84 +78 +ENDCHAR +STARTCHAR uni0118DB +ENCODING 71899 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +78 +80 +F0 +88 +08 +08 +30 +C0 +ENDCHAR +STARTCHAR uni0118DC +ENCODING 71900 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +44 +28 +10 +28 +28 +28 +10 +ENDCHAR +STARTCHAR uni0118DD +ENCODING 71901 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +C2 +22 +12 +3A +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni0118DE +ENCODING 71902 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +20 +12 +12 +72 +9C +90 +84 +78 +ENDCHAR +STARTCHAR uni0118DF +ENCODING 71903 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +04 +0A +08 +08 +1C +12 +92 +64 +ENDCHAR +STARTCHAR uni0118E0 +ENCODING 71904 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +44 +44 +82 +82 +82 +82 +44 +44 +38 +ENDCHAR +STARTCHAR uni0118E1 +ENCODING 71905 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +08 +10 +10 +10 +10 +30 +50 +90 +90 +60 +ENDCHAR +STARTCHAR uni0118E2 +ENCODING 71906 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +28 +28 +28 +28 +6C +AA +AA +AA +44 +ENDCHAR +STARTCHAR uni0118E3 +ENCODING 71907 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +A8 +54 +54 +54 +54 +54 +54 +54 +54 +56 +ENDCHAR +STARTCHAR uni0118E4 +ENCODING 71908 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +88 +88 +88 +7E +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni0118E5 +ENCODING 71909 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +0C +12 +72 +9C +10 +20 +60 +B2 +AC +40 +ENDCHAR +STARTCHAR uni0118E6 +ENCODING 71910 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +54 +54 +54 +54 +54 +28 +28 +28 +28 +ENDCHAR +STARTCHAR uni0118E7 +ENCODING 71911 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +04 +02 +62 +92 +12 +92 +E2 +82 +82 +7C +ENDCHAR +STARTCHAR uni0118E8 +ENCODING 71912 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +1C +22 +02 +02 +02 +04 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni0118E9 +ENCODING 71913 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +74 +8C +80 +80 +80 +40 +20 +10 +08 +06 +ENDCHAR +STARTCHAR uni0118EA +ENCODING 71914 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +50 +B0 +92 +42 +44 +24 +28 +10 +ENDCHAR +STARTCHAR uni0118EB +ENCODING 71915 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +BA +C6 +44 +C6 +BA +82 +82 +ENDCHAR +STARTCHAR uni0118EC +ENCODING 71916 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +44 +38 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni0118ED +ENCODING 71917 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +40 +A0 +A0 +70 +28 +28 +28 +28 +2A +24 +ENDCHAR +STARTCHAR uni0118EE +ENCODING 71918 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +44 +AA +9A +4E +28 +10 +58 +A4 +B2 +4C +ENDCHAR +STARTCHAR uni0118EF +ENCODING 71919 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +54 +54 +54 +7C +54 +28 +28 +28 +28 +ENDCHAR +STARTCHAR uni0118F0 +ENCODING 71920 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +0C +12 +48 +A4 +24 +A4 +C4 +84 +84 +78 +ENDCHAR +STARTCHAR uni0118F1 +ENCODING 71921 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +40 +5C +62 +42 +42 +42 +02 +04 +08 +10 +20 +C0 +ENDCHAR +STARTCHAR uni0118F2 +ENCODING 71922 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +04 +74 +8C +84 +84 +80 +80 +40 +20 +10 +08 +06 +ENDCHAR +STARTCHAR uni0118FF +ENCODING 71935 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 15 0 -2 +BITMAP +08 +08 +08 +68 +90 +80 +96 +A9 +A9 +A9 +A1 +91 +42 +24 +18 +ENDCHAR +STARTCHAR uni011A00 +ENCODING 72192 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +BA +AA +AA +AA +AA +AA +AA +AA +EE +ENDCHAR +STARTCHAR uni011A01 +ENCODING 72193 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +78 +84 +02 +ENDCHAR +STARTCHAR uni011A02 +ENCODING 72194 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 -2 +BITMAP +82 +7C +ENDCHAR +STARTCHAR uni011A03 +ENCODING 72195 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 -2 +BITMAP +02 +FE +ENDCHAR +STARTCHAR uni011A04 +ENCODING 72196 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 10 +BITMAP +FE +02 +ENDCHAR +STARTCHAR uni011A05 +ENCODING 72197 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +FE +10 +10 +ENDCHAR +STARTCHAR uni011A06 +ENCODING 72198 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +C6 +28 +10 +ENDCHAR +STARTCHAR uni011A07 +ENCODING 72199 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -2 9 +BITMAP +40 +C0 +ENDCHAR +STARTCHAR uni011A08 +ENCODING 72200 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -8 9 +BITMAP +80 +C0 +ENDCHAR +STARTCHAR uni011A09 +ENCODING 72201 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +3C +42 +80 +ENDCHAR +STARTCHAR uni011A0A +ENCODING 72202 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -2 -2 +BITMAP +80 +40 +ENDCHAR +STARTCHAR uni011A0B +ENCODING 72203 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +12 +12 +12 +92 +92 +92 +92 +F2 +ENDCHAR +STARTCHAR uni011A0C +ENCODING 72204 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +92 +92 +92 +92 +92 +92 +92 +9E +ENDCHAR +STARTCHAR uni011A0D +ENCODING 72205 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +92 +92 +92 +92 +92 +92 +92 +F2 +ENDCHAR +STARTCHAR uni011A0E +ENCODING 72206 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +12 +12 +12 +F2 +92 +92 +92 +F2 +ENDCHAR +STARTCHAR uni011A0F +ENCODING 72207 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +02 +02 +02 +FE +80 +80 +80 +FE +ENDCHAR +STARTCHAR uni011A10 +ENCODING 72208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +12 +12 +12 +12 +12 +12 +12 +FE +ENDCHAR +STARTCHAR uni011A11 +ENCODING 72209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni011A12 +ENCODING 72210 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +80 +80 +80 +FE +80 +80 +80 +FE +ENDCHAR +STARTCHAR uni011A13 +ENCODING 72211 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +02 +02 +02 +FE +82 +82 +82 +F2 +ENDCHAR +STARTCHAR uni011A14 +ENCODING 72212 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +80 +80 +80 +FE +82 +84 +88 +90 +ENDCHAR +STARTCHAR uni011A15 +ENCODING 72213 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +82 +44 +28 +10 +28 +44 +82 +FE +ENDCHAR +STARTCHAR uni011A16 +ENCODING 72214 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +80 +40 +20 +10 +08 +04 +02 +FE +ENDCHAR +STARTCHAR uni011A17 +ENCODING 72215 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +82 +42 +22 +10 +08 +04 +02 +FE +ENDCHAR +STARTCHAR uni011A18 +ENCODING 72216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +02 +06 +1A +62 +82 +62 +1A +06 +ENDCHAR +STARTCHAR uni011A19 +ENCODING 72217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +80 +80 +80 +FE +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni011A1A +ENCODING 72218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +82 +82 +82 +FE +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni011A1B +ENCODING 72219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +80 +80 +80 +FE +02 +02 +02 +FE +ENDCHAR +STARTCHAR uni011A1C +ENCODING 72220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +80 +80 +80 +FE +84 +88 +88 +86 +ENDCHAR +STARTCHAR uni011A1D +ENCODING 72221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +02 +02 +02 +FE +92 +92 +92 +F2 +ENDCHAR +STARTCHAR uni011A1E +ENCODING 72222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +82 +82 +82 +82 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni011A1F +ENCODING 72223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +9E +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni011A20 +ENCODING 72224 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +82 +82 +82 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni011A21 +ENCODING 72225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +42 +22 +22 +22 +22 +22 +42 +FE +ENDCHAR +STARTCHAR uni011A22 +ENCODING 72226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +F2 +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni011A23 +ENCODING 72227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +03 +02 +FE +12 +12 +12 +12 +12 +12 +12 +FE +ENDCHAR +STARTCHAR uni011A24 +ENCODING 72228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +03 +02 +FE +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni011A25 +ENCODING 72229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +03 +02 +FE +80 +80 +80 +FE +80 +80 +80 +FE +ENDCHAR +STARTCHAR uni011A26 +ENCODING 72230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +03 +02 +FE +80 +86 +88 +F8 +88 +86 +80 +FE +ENDCHAR +STARTCHAR uni011A27 +ENCODING 72231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +82 +82 +82 +8E +92 +92 +92 +8E +ENDCHAR +STARTCHAR uni011A28 +ENCODING 72232 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +02 +02 +02 +FE +02 +02 +02 +FE +ENDCHAR +STARTCHAR uni011A29 +ENCODING 72233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +82 +82 +82 +9E +90 +90 +90 +9E +ENDCHAR +STARTCHAR uni011A2A +ENCODING 72234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni011A2B +ENCODING 72235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +10 +10 +10 +FE +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni011A2C +ENCODING 72236 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +F2 +92 +92 +92 +92 +92 +92 +92 +9E +ENDCHAR +STARTCHAR uni011A2D +ENCODING 72237 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +88 +88 +88 +9C +A2 +A2 +A2 +9C +ENDCHAR +STARTCHAR uni011A2E +ENCODING 72238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +9E +92 +92 +92 +F2 +92 +92 +92 +9E +ENDCHAR +STARTCHAR uni011A2F +ENCODING 72239 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +F2 +92 +92 +92 +9E +92 +92 +92 +F2 +ENDCHAR +STARTCHAR uni011A30 +ENCODING 72240 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +82 +C2 +A2 +A2 +92 +8A +8A +86 +82 +ENDCHAR +STARTCHAR uni011A31 +ENCODING 72241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +80 +80 +80 +9E +92 +92 +92 +F2 +ENDCHAR +STARTCHAR uni011A32 +ENCODING 72242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +12 +12 +12 +F2 +82 +82 +82 +F2 +ENDCHAR +STARTCHAR uni011A33 +ENCODING 72243 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -5 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011A34 +ENCODING 72244 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 -2 +BITMAP +F8 +06 +ENDCHAR +STARTCHAR uni011A35 +ENCODING 72245 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -8 9 +BITMAP +10 +28 +10 +82 +7C +ENDCHAR +STARTCHAR uni011A36 +ENCODING 72246 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -8 9 +BITMAP +08 +18 +28 +92 +7C +ENDCHAR +STARTCHAR uni011A37 +ENCODING 72247 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -8 9 +BITMAP +08 +08 +28 +92 +7C +ENDCHAR +STARTCHAR uni011A38 +ENCODING 72248 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 10 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni011A39 +ENCODING 72249 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 9 -3 0 +BITMAP +40 +A0 +A0 +40 +00 +40 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni011A3A +ENCODING 72250 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 0 9 +BITMAP +FE +10 +ENDCHAR +STARTCHAR uni011A3B +ENCODING 72251 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 -2 +BITMAP +92 +6C +ENDCHAR +STARTCHAR uni011A3C +ENCODING 72252 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 -2 +BITMAP +7A +86 +ENDCHAR +STARTCHAR uni011A3D +ENCODING 72253 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 -2 +BITMAP +72 +8C +ENDCHAR +STARTCHAR uni011A3E +ENCODING 72254 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -5 -2 +BITMAP +70 +90 +70 +ENDCHAR +STARTCHAR uni011A3F +ENCODING 72255 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +9E +92 +92 +92 +92 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni011A40 +ENCODING 72256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +1E +12 +12 +12 +12 +02 +02 +02 +FE +ENDCHAR +STARTCHAR uni011A41 +ENCODING 72257 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 2 3 7 +BITMAP +80 +80 +ENDCHAR +STARTCHAR uni011A42 +ENCODING 72258 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 9 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011A43 +ENCODING 72259 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +88 +88 +88 +88 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni011A44 +ENCODING 72260 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +FE +82 +FE +00 +FE +00 +FE +82 +FE +ENDCHAR +STARTCHAR uni011A45 +ENCODING 72261 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +9E +92 +92 +92 +82 +82 +FE +00 +FE +ENDCHAR +STARTCHAR uni011A46 +ENCODING 72262 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +1E +12 +12 +12 +02 +02 +FE +00 +FE +ENDCHAR +STARTCHAR uni011A47 +ENCODING 72263 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 2 -8 -2 +BITMAP +F8 +06 +ENDCHAR +STARTCHAR uni011A50 +ENCODING 72272 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +08C0 +4340 +3C40 +0040 +8340 +6140 +1E40 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A51 +ENCODING 72273 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 2 -14 11 +BITMAP +3F00 +C0C0 +ENDCHAR +STARTCHAR uni011A52 +ENCODING 72274 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 16 -11 -2 +BITMAP +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +98 +44 +38 +ENDCHAR +STARTCHAR uni011A53 +ENCODING 72275 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 15 -11 -1 +BITMAP +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +08 +F8 +ENDCHAR +STARTCHAR uni011A54 +ENCODING 72276 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 2 -14 11 +BITMAP +FFC0 +0040 +ENDCHAR +STARTCHAR uni011A55 +ENCODING 72277 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 2 -13 11 +BITMAP +FF80 +0800 +ENDCHAR +STARTCHAR uni011A56 +ENCODING 72278 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 3 -13 11 +BITMAP +8080 +7700 +0800 +ENDCHAR +STARTCHAR uni011A57 +ENCODING 72279 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 12 -4 -1 +BITMAP +F0 +20 +40 +80 +40 +20 +40 +80 +40 +20 +20 +20 +ENDCHAR +STARTCHAR uni011A58 +ENCODING 72280 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 12 -4 -1 +BITMAP +C0 +20 +20 +20 +C0 +20 +20 +20 +C0 +20 +20 +20 +ENDCHAR +STARTCHAR uni011A59 +ENCODING 72281 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 3 -14 -2 +BITMAP +4900 +9480 +6300 +ENDCHAR +STARTCHAR uni011A5A +ENCODING 72282 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 3 -14 -2 +BITMAP +6300 +9480 +4900 +ENDCHAR +STARTCHAR uni011A5B +ENCODING 72283 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -6 -2 +BITMAP +80 +00 +00 +40 +20 +ENDCHAR +STARTCHAR uni011A5C +ENCODING 72284 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E00 +8840 +8840 +8FC0 +7840 +0840 +0840 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A5D +ENCODING 72285 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E00 +0840 +7840 +8FC0 +8840 +8840 +0840 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A5E +ENCODING 72286 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E00 +0840 +4840 +C840 +FFC0 +C840 +4840 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A5F +ENCODING 72287 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E00 +0840 +8840 +4840 +7FC0 +4840 +8840 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A60 +ENCODING 72288 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E00 +0840 +8840 +8840 +FFC0 +8840 +8840 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A61 +ENCODING 72289 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +0440 +0240 +4140 +2240 +1440 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A62 +ENCODING 72290 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +1440 +A240 +4140 +A240 +1440 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A63 +ENCODING 72291 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +1440 +2240 +4140 +0240 +0440 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A64 +ENCODING 72292 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +8840 +9440 +A240 +C140 +0240 +0440 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A65 +ENCODING 72293 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +1440 +2240 +1140 +8240 +4440 +2840 +1040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A66 +ENCODING 72294 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +0840 +3840 +0840 +3840 +0840 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A67 +ENCODING 72295 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +0840 +3840 +0E40 +3840 +0840 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A68 +ENCODING 72296 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +0840 +0840 +3840 +0840 +0840 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A69 +ENCODING 72297 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +8840 +8840 +8840 +7840 +0840 +3840 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A6A +ENCODING 72298 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +0040 +0840 +3FC0 +0840 +0840 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A6B +ENCODING 72299 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +0040 +3C40 +4340 +60C0 +0040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A6C +ENCODING 72300 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +0040 +1C40 +2240 +2240 +1C40 +0840 +3E40 +0040 +0040 +ENDCHAR +STARTCHAR uni011A6D +ENCODING 72301 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +0840 +1840 +2040 +2040 +1840 +0840 +0840 +0040 +0040 +ENDCHAR +STARTCHAR uni011A6E +ENCODING 72302 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +8840 +8840 +8840 +7840 +1840 +2040 +2040 +1840 +0040 +0040 +ENDCHAR +STARTCHAR uni011A6F +ENCODING 72303 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +0240 +1E40 +2240 +23C0 +2240 +1E40 +0240 +0040 +0040 +ENDCHAR +STARTCHAR uni011A70 +ENCODING 72304 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +0040 +60C0 +4340 +3C40 +0040 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A71 +ENCODING 72305 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +08C0 +4340 +3C40 +60C0 +4340 +3C40 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A72 +ENCODING 72306 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +3040 +4640 +8940 +8140 +4640 +3840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A73 +ENCODING 72307 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +08C0 +4340 +3C40 +0840 +1040 +1640 +1140 +0E40 +0040 +0040 +ENDCHAR +STARTCHAR uni011A74 +ENCODING 72308 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +08C0 +4340 +3C40 +0040 +0C40 +1240 +1240 +0C40 +0040 +0040 +ENDCHAR +STARTCHAR uni011A75 +ENCODING 72309 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +1440 +2240 +4140 +2240 +1440 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A76 +ENCODING 72310 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +1C40 +2A40 +4940 +2A40 +1C40 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A77 +ENCODING 72311 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +1440 +2240 +7F40 +2240 +1440 +0840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A78 +ENCODING 72312 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +08C0 +4340 +3C40 +0040 +1C40 +2240 +2240 +2240 +0040 +0040 +ENDCHAR +STARTCHAR uni011A79 +ENCODING 72313 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +08C0 +4340 +3C40 +0840 +1E40 +2140 +2040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A7A +ENCODING 72314 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +0040 +1C40 +2240 +2240 +1240 +0440 +0840 +0840 +0040 +ENDCHAR +STARTCHAR uni011A7B +ENCODING 72315 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +08C0 +4340 +3C40 +0040 +1C40 +2240 +2240 +3E40 +0040 +0040 +ENDCHAR +STARTCHAR uni011A7C +ENCODING 72316 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +08C0 +4340 +3C40 +0040 +0840 +1440 +2240 +7F40 +0040 +0040 +ENDCHAR +STARTCHAR uni011A7D +ENCODING 72317 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +08C0 +4340 +3C40 +0840 +3C40 +4340 +00C0 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A7E +ENCODING 72318 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +0040 +1C40 +2240 +2240 +1C40 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A7F +ENCODING 72319 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +C0C0 +3340 +0C40 +3340 +C0C0 +0040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A80 +ENCODING 72320 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +08C0 +0340 +EC40 +1E40 +11C0 +9040 +6040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A81 +ENCODING 72321 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E40 +0840 +1640 +21C0 +1040 +0840 +4840 +3040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A82 +ENCODING 72322 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E00 +0840 +9640 +A1C0 +C040 +E040 +9040 +9040 +8040 +0040 +0040 +ENDCHAR +STARTCHAR uni011A83 +ENCODING 72323 +BBX 10 12 2 -1 +BITMAP +FFC0 +3E00 +8840 +8840 +8FC0 +7840 +0840 +3040 +4040 +4040 +3040 +0040 +ENDCHAR +STARTCHAR uni011A86 +ENCODING 72326 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 2 1 8 +BITMAP +20 +E0 +ENDCHAR +STARTCHAR uni011A87 +ENCODING 72327 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 0 9 +BITMAP +F0 +ENDCHAR +STARTCHAR uni011A88 +ENCODING 72328 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 0 8 +BITMAP +F0 +10 +ENDCHAR +STARTCHAR uni011A89 +ENCODING 72329 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 1 8 +BITMAP +40 +C0 +40 +ENDCHAR +STARTCHAR uni011A8A +ENCODING 72330 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -8 -2 +BITMAP +80 +80 +70 +ENDCHAR +STARTCHAR uni011A8B +ENCODING 72331 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -8 -2 +BITMAP +60 +80 +80 +ENDCHAR +STARTCHAR uni011A8C +ENCODING 72332 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -8 -2 +BITMAP +80 +E0 +80 +ENDCHAR +STARTCHAR uni011A8D +ENCODING 72333 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -9 -2 +BITMAP +60 +90 +C0 +ENDCHAR +STARTCHAR uni011A8E +ENCODING 72334 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -11 -2 +BITMAP +70 +9C +70 +ENDCHAR +STARTCHAR uni011A8F +ENCODING 72335 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -9 -2 +BITMAP +C0 +90 +60 +ENDCHAR +STARTCHAR uni011A90 +ENCODING 72336 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -9 -2 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni011A91 +ENCODING 72337 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -7 -2 +BITMAP +40 +80 +60 +ENDCHAR +STARTCHAR uni011A92 +ENCODING 72338 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -10 -2 +BITMAP +F8 +20 +FC +ENDCHAR +STARTCHAR uni011A93 +ENCODING 72339 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -10 -2 +BITMAP +D8 +20 +DC +ENDCHAR +STARTCHAR uni011A94 +ENCODING 72340 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -10 -2 +BITMAP +98 +90 +60 +ENDCHAR +STARTCHAR uni011A95 +ENCODING 72341 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -4 0 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni011A96 +ENCODING 72342 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -11 11 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni011A97 +ENCODING 72343 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 11 -5 0 +BITMAP +F8 +70 +20 +50 +88 +50 +20 +50 +88 +50 +20 +ENDCHAR +STARTCHAR uni011A98 +ENCODING 72344 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 3 -14 10 +BITMAP +FF80 +3E00 +0800 +ENDCHAR +STARTCHAR uni011A99 +ENCODING 72345 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -11 -2 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni011A9A +ENCODING 72346 +BBX 5 3 5 10 +BITMAP +F8 +70 +20 +ENDCHAR +STARTCHAR uni011A9B +ENCODING 72347 +BBX 2 12 7 -1 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni011A9C +ENCODING 72348 +BBX 6 12 5 -1 +BITMAP +CC +CC +CC +CC +CC +CC +CC +CC +CC +CC +CC +CC +ENDCHAR +STARTCHAR uni011A9D +ENCODING 72349 +BBX 8 12 4 -1 +BITMAP +7C +82 +02 +0C +3E +01 +01 +06 +18 +10 +08 +04 +ENDCHAR +STARTCHAR uni011A9E +ENCODING 72350 +BBX 11 16 2 -2 +BITMAP +1500 +0E00 +2E80 +1F00 +DF60 +CE60 +C460 +DF60 +CE60 +DD60 +D760 +CE60 +DF60 +DF60 +CE60 +0400 +ENDCHAR +STARTCHAR uni011A9F +ENCODING 72351 +BBX 11 16 2 -2 +BITMAP +0200 +0A00 +2E80 +1F00 +DF60 +CE60 +C460 +DF60 +CE60 +DD60 +D760 +CE60 +DF60 +DF60 +CE60 +0400 +ENDCHAR +STARTCHAR uni011AA0 +ENCODING 72352 +BBX 11 15 2 -2 +BITMAP +0E00 +2E80 +1F00 +DF60 +CE60 +C460 +DF60 +CE60 +DD60 +D760 +CE60 +DF60 +DF60 +CE60 +0400 +ENDCHAR +STARTCHAR uni011AA1 +ENCODING 72353 +BBX 11 14 2 -1 +BITMAP +0400 +0A00 +1100 +E4E0 +EAE0 +DB60 +D160 +D160 +CA60 +CA60 +D560 +EAE0 +D560 +DF60 +ENDCHAR +STARTCHAR uni011AA2 +ENCODING 72354 +BBX 11 14 2 -1 +BITMAP +0400 +0A00 +0E00 +DF60 +D160 +FFE0 +FFE0 +E0E0 +DF60 +CE60 +D560 +EAE0 +D560 +DF60 +ENDCHAR +STARTCHAR uni011AC0 +ENCODING 72384 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +92 +90 +90 +90 +94 +9A +92 +92 +7C +ENDCHAR +STARTCHAR uni011AC1 +ENCODING 72385 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +C4 +A4 +A4 +A4 +A4 +C4 +84 +78 +ENDCHAR +STARTCHAR uni011AC2 +ENCODING 72386 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +80 +80 +80 +80 +80 +80 +82 +7C +ENDCHAR +STARTCHAR uni011AC3 +ENCODING 72387 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +B4 +CC +84 +78 +ENDCHAR +STARTCHAR uni011AC4 +ENCODING 72388 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +88 +88 +88 +F0 +88 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni011AC5 +ENCODING 72389 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +E2 +42 +42 +42 +42 +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni011AC6 +ENCODING 72390 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +8E +ENDCHAR +STARTCHAR uni011AC7 +ENCODING 72391 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +F8 +04 +04 +04 +04 +F8 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni011AC8 +ENCODING 72392 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +02 +02 +02 +3A +46 +82 +82 +7C +ENDCHAR +STARTCHAR uni011AC9 +ENCODING 72393 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +88 +90 +A0 +C0 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011ACA +ENCODING 72394 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +62 +92 +12 +14 +18 +14 +12 +12 +92 +60 +ENDCHAR +STARTCHAR uni011ACB +ENCODING 72395 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +84 +98 +A0 +C0 +80 +82 +7C +ENDCHAR +STARTCHAR uni011ACC +ENCODING 72396 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +7C +80 +80 +80 +7C +80 +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni011ACD +ENCODING 72397 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +84 +ENDCHAR +STARTCHAR uni011ACE +ENCODING 72398 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni011ACF +ENCODING 72399 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +92 +92 +8C +80 +80 +8C +92 +92 +7C +ENDCHAR +STARTCHAR uni011AD0 +ENCODING 72400 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +92 +90 +90 +90 +90 +90 +90 +92 +7C +ENDCHAR +STARTCHAR uni011AD1 +ENCODING 72401 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni011AD2 +ENCODING 72402 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +04 +04 +78 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni011AD3 +ENCODING 72403 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni011AD4 +ENCODING 72404 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C4 +4A +4A +4A +7C +48 +48 +48 +48 +48 +ENDCHAR +STARTCHAR uni011AD5 +ENCODING 72405 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +28 +38 +44 +44 +44 +44 +38 +ENDCHAR +STARTCHAR uni011AD6 +ENCODING 72406 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +18 +60 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni011AD7 +ENCODING 72407 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +82 +82 +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni011AD8 +ENCODING 72408 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni011AD9 +ENCODING 72409 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +04 +04 +04 +04 +7C +84 +84 +84 +84 +7C +ENDCHAR +STARTCHAR uni011ADA +ENCODING 72410 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +70 +88 +88 +08 +08 +08 +3E +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni011ADB +ENCODING 72411 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni011ADC +ENCODING 72412 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +8C +92 +92 +92 +92 +8E +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni011ADD +ENCODING 72413 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni011ADE +ENCODING 72414 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +84 +8A +8A +8A +FC +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni011ADF +ENCODING 72415 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +44 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni011AE0 +ENCODING 72416 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +78 +80 +9C +A2 +A2 +82 +8C +82 +82 +82 +42 +3C +ENDCHAR +STARTCHAR uni011AE1 +ENCODING 72417 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni011AE2 +ENCODING 72418 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +84 +F8 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011AE3 +ENCODING 72419 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +02 +02 +02 +72 +8A +8A +7C +08 +08 +ENDCHAR +STARTCHAR uni011AE4 +ENCODING 72420 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni011AE5 +ENCODING 72421 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011AE6 +ENCODING 72422 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +80 +80 +80 +80 +98 +98 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011AE7 +ENCODING 72423 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +80 +80 +98 +98 +80 +80 +98 +98 +80 +80 +ENDCHAR +STARTCHAR uni011AE8 +ENCODING 72424 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni011AE9 +ENCODING 72425 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +90 +90 +90 +90 +96 +96 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni011AEA +ENCODING 72426 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +90 +90 +96 +96 +90 +90 +96 +96 +90 +90 +ENDCHAR +STARTCHAR uni011AEB +ENCODING 72427 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +80 +C0 +A0 +90 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011AEC +ENCODING 72428 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +80 +C0 +A0 +90 +80 +80 +90 +80 +80 +80 +ENDCHAR +STARTCHAR uni011AED +ENCODING 72429 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +88 +CC +AA +88 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni011AEE +ENCODING 72430 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +88 +CC +AA +88 +88 +8A +88 +88 +88 +ENDCHAR +STARTCHAR uni011AEF +ENCODING 72431 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 3 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011AF0 +ENCODING 72432 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 7 3 1 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni011AF1 +ENCODING 72433 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FC +08 +10 +20 +7E +04 +08 +10 +ENDCHAR +STARTCHAR uni011AF2 +ENCODING 72434 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FC +08 +10 +20 +7E +04 +08 +50 +ENDCHAR +STARTCHAR uni011AF3 +ENCODING 72435 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +90 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni011AF4 +ENCODING 72436 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +80 +80 +80 +90 +80 +80 +90 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni011AF5 +ENCODING 72437 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +80 +90 +80 +80 +90 +80 +90 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni011AF6 +ENCODING 72438 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +88 +88 +88 +88 +88 +88 +AA +CC +88 +ENDCHAR +STARTCHAR uni011AF7 +ENCODING 72439 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +88 +88 +88 +8A +88 +88 +AA +CC +88 +ENDCHAR +STARTCHAR uni011AF8 +ENCODING 72440 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +88 +8A +88 +88 +8A +88 +AA +CC +88 +ENDCHAR +STARTCHAR uni011C00 +ENCODING 72704 +BBX 9 6 4 3 +BITMAP +6300 +F780 +6300 +7F00 +0100 +7F00 +ENDCHAR +STARTCHAR uni011C01 +ENCODING 72705 +BBX 9 8 3 1 +BITMAP +6300 +F780 +6300 +7F00 +0100 +7F00 +2880 +1300 +ENDCHAR +STARTCHAR uni011C02 +ENCODING 72706 +BBX 8 7 4 2 +BITMAP +66 +BF +08 +42 +A5 +81 +42 +ENDCHAR +STARTCHAR uni011C03 +ENCODING 72707 +BBX 10 7 3 2 +BITMAP +0C00 +1E00 +4C80 +8C40 +4C80 +1800 +6000 +ENDCHAR +STARTCHAR uni011C04 +ENCODING 72708 +BBX 7 8 5 1 +BITMAP +18 +3C +18 +98 +CC +66 +32 +0C +ENDCHAR +STARTCHAR uni011C05 +ENCODING 72709 +BBX 10 9 5 0 +BITMAP +1800 +3C00 +1800 +9800 +CC00 +6600 +3200 +0CC0 +07C0 +ENDCHAR +STARTCHAR uni011C06 +ENCODING 72710 +BBX 8 6 4 3 +BITMAP +80 +E6 +CF +C6 +C6 +7C +ENDCHAR +STARTCHAR uni011C07 +ENCODING 72711 +BBX 9 7 4 2 +BITMAP +D800 +9300 +9780 +5300 +4B00 +2700 +1E00 +ENDCHAR +STARTCHAR uni011C08 +ENCODING 72712 +BBX 8 8 5 1 +BITMAP +30 +EC +C6 +13 +FE +CC +C0 +78 +ENDCHAR +STARTCHAR uni011C0A +ENCODING 72714 +BBX 11 6 3 3 +BITMAP +70C0 +D9E0 +C0C0 +C0C0 +CEC0 +3380 +ENDCHAR +STARTCHAR uni011C0B +ENCODING 72715 +BBX 11 5 3 4 +BITMAP +78C0 +DDE0 +30C0 +76C0 +1B80 +ENDCHAR +STARTCHAR uni011C0C +ENCODING 72716 +BBX 10 9 3 0 +BITMAP +1980 +3FC0 +6700 +C600 +8F00 +0F00 +C300 +E600 +7C00 +ENDCHAR +STARTCHAR uni011C0D +ENCODING 72717 +BBX 10 11 3 -2 +BITMAP +1980 +3FC0 +6700 +0F00 +CF00 +E600 +7C00 +3100 +3180 +3FC0 +1CC0 +ENDCHAR +STARTCHAR uni011C0E +ENCODING 72718 +BBX 7 9 5 0 +BITMAP +30 +78 +30 +F0 +30 +F8 +6C +06 +02 +ENDCHAR +STARTCHAR uni011C0F +ENCODING 72719 +BBX 8 8 5 1 +BITMAP +30 +7C +CE +CB +13 +3B +5E +0C +ENDCHAR +STARTCHAR uni011C10 +ENCODING 72720 +BBX 9 6 4 3 +BITMAP +3300 +5F80 +EC00 +0600 +0C00 +1800 +ENDCHAR +STARTCHAR uni011C11 +ENCODING 72721 +BBX 9 7 4 2 +BITMAP +6300 +F780 +6300 +C600 +4300 +5A00 +2400 +ENDCHAR +STARTCHAR uni011C12 +ENCODING 72722 +BBX 11 6 3 3 +BITMAP +64C0 +FBE0 +6200 +C000 +3C00 +0E00 +ENDCHAR +STARTCHAR uni011C13 +ENCODING 72723 +BBX 7 8 4 1 +BITMAP +18 +3C +18 +18 +2C +66 +B2 +0C +ENDCHAR +STARTCHAR uni011C14 +ENCODING 72724 +BBX 6 6 5 3 +BITMAP +30 +78 +30 +78 +B4 +48 +ENDCHAR +STARTCHAR uni011C15 +ENCODING 72725 +BBX 9 6 3 3 +BITMAP +6300 +FF80 +3F00 +6B00 +A300 +0700 +ENDCHAR +STARTCHAR uni011C16 +ENCODING 72726 +BBX 6 7 5 2 +BITMAP +30 +78 +30 +B0 +60 +68 +3C +ENDCHAR +STARTCHAR uni011C17 +ENCODING 72727 +BBX 10 6 3 3 +BITMAP +3980 +6FC0 +2D80 +0DC0 +78C0 +B000 +ENDCHAR +STARTCHAR uni011C18 +ENCODING 72728 +BBX 11 5 3 4 +BITMAP +74C0 +FFE0 +6380 +C600 +6600 +ENDCHAR +STARTCHAR uni011C19 +ENCODING 72729 +BBX 10 6 3 3 +BITMAP +3980 +6FC0 +C600 +C200 +6400 +3800 +ENDCHAR +STARTCHAR uni011C1A +ENCODING 72730 +BBX 6 8 5 1 +BITMAP +30 +78 +30 +70 +B0 +30 +64 +38 +ENDCHAR +STARTCHAR uni011C1B +ENCODING 72731 +BBX 6 7 5 2 +BITMAP +30 +78 +30 +30 +64 +CC +78 +ENDCHAR +STARTCHAR uni011C1C +ENCODING 72732 +BBX 10 7 4 2 +BITMAP +6D80 +FFC0 +3300 +7600 +3000 +1800 +3800 +ENDCHAR +STARTCHAR uni011C1D +ENCODING 72733 +BBX 6 7 5 2 +BITMAP +18 +3C +38 +D8 +98 +30 +60 +ENDCHAR +STARTCHAR uni011C1E +ENCODING 72734 +BBX 10 7 4 2 +BITMAP +3800 +6C00 +ED80 +FFC0 +6C00 +6C00 +7800 +ENDCHAR +STARTCHAR uni011C1F +ENCODING 72735 +BBX 5 8 6 1 +BITMAP +30 +78 +30 +70 +C0 +60 +28 +10 +ENDCHAR +STARTCHAR uni011C20 +ENCODING 72736 +BBX 10 7 3 2 +BITMAP +1800 +F980 +6FC0 +4600 +6300 +3400 +1800 +ENDCHAR +STARTCHAR uni011C21 +ENCODING 72737 +BBX 4 6 6 3 +BITMAP +60 +F0 +60 +E0 +30 +E0 +ENDCHAR +STARTCHAR uni011C22 +ENCODING 72738 +BBX 9 5 3 4 +BITMAP +6300 +F780 +3300 +7300 +1E00 +ENDCHAR +STARTCHAR uni011C23 +ENCODING 72739 +BBX 8 8 4 1 +BITMAP +18 +3C +18 +1B +23 +6D +BE +12 +ENDCHAR +STARTCHAR uni011C24 +ENCODING 72740 +BBX 9 5 3 4 +BITMAP +6300 +FF80 +3F00 +7300 +1E00 +ENDCHAR +STARTCHAR uni011C25 +ENCODING 72741 +BBX 6 6 5 3 +BITMAP +30 +78 +30 +58 +AC +58 +ENDCHAR +STARTCHAR uni011C26 +ENCODING 72742 +BBX 9 6 4 3 +BITMAP +6300 +FF80 +6300 +7700 +9E00 +7000 +ENDCHAR +STARTCHAR uni011C27 +ENCODING 72743 +BBX 11 7 2 2 +BITMAP +E000 +C000 +58C0 +7FE0 +58C0 +3DC0 +0780 +ENDCHAR +STARTCHAR uni011C28 +ENCODING 72744 +BBX 8 8 4 1 +BITMAP +0C +1E +0C +2C +66 +B3 +1B +0E +ENDCHAR +STARTCHAR uni011C29 +ENCODING 72745 +BBX 10 9 3 0 +BITMAP +1980 +3FC0 +0C00 +0C00 +6600 +DE00 +C000 +4400 +3800 +ENDCHAR +STARTCHAR uni011C2A +ENCODING 72746 +BBX 6 7 5 2 +BITMAP +30 +78 +30 +70 +D8 +CC +78 +ENDCHAR +STARTCHAR uni011C2B +ENCODING 72747 +BBX 11 8 3 1 +BITMAP +0800 +3CC0 +F7E0 +E180 +6D80 +0CC0 +00C0 +0380 +ENDCHAR +STARTCHAR uni011C2C +ENCODING 72748 +BBX 8 7 4 2 +BITMAP +66 +FF +66 +46 +C3 +63 +3E +ENDCHAR +STARTCHAR uni011C2D +ENCODING 72749 +BBX 9 6 3 3 +BITMAP +3300 +7F80 +3300 +6380 +B180 +5F00 +ENDCHAR +STARTCHAR uni011C2E +ENCODING 72750 +BBX 8 7 5 2 +BITMAP +30 +78 +30 +76 +FF +3B +12 +ENDCHAR +STARTCHAR uni011C2F +ENCODING 72751 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -5 5 +BITMAP +40 +E0 +10 +30 +ENDCHAR +STARTCHAR uni011C30 +ENCODING 72752 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -12 9 +BITMAP +10 +28 +44 +FE +ENDCHAR +STARTCHAR uni011C31 +ENCODING 72753 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -12 9 +BITMAP +20 +50 +28 +54 +FE +ENDCHAR +STARTCHAR uni011C32 +ENCODING 72754 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -14 -2 +BITMAP +06 +06 +66 +9C +ENDCHAR +STARTCHAR uni011C33 +ENCODING 72755 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -14 -2 +BITMAP +36 +0E +66 +9C +ENDCHAR +STARTCHAR uni011C34 +ENCODING 72756 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 8 -15 -2 +BITMAP +60 +C0 +C0 +C0 +C0 +C3 +43 +3E +ENDCHAR +STARTCHAR uni011C35 +ENCODING 72757 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 10 9 -16 -2 +BITMAP +4000 +9800 +B000 +B000 +B000 +B000 +B0C0 +90C0 +7F80 +ENDCHAR +STARTCHAR uni011C36 +ENCODING 72758 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -11 -2 +BITMAP +78 +9C +20 +18 +ENDCHAR +STARTCHAR uni011C38 +ENCODING 72760 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -8 8 +BITMAP +18 +24 +62 +F0 +ENDCHAR +STARTCHAR uni011C39 +ENCODING 72761 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 5 -16 9 +BITMAP +0030 +1858 +248C +6206 +F000 +ENDCHAR +STARTCHAR uni011C3A +ENCODING 72762 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 8 -16 5 +BITMAP +1800 +2400 +6200 +F000 +0000 +0004 +0002 +0004 +ENDCHAR +STARTCHAR uni011C3B +ENCODING 72763 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 15 9 -16 5 +BITMAP +0030 +1858 +248C +6206 +F000 +0000 +0004 +0002 +0004 +ENDCHAR +STARTCHAR uni011C3C +ENCODING 72764 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 -12 9 +BITMAP +18 +24 +99 +81 +7E +ENDCHAR +STARTCHAR uni011C3D +ENCODING 72765 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 3 -9 10 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR uni011C3E +ENCODING 72766 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 8 -3 2 +BITMAP +40 +A0 +40 +00 +00 +40 +A0 +40 +ENDCHAR +STARTCHAR uni011C3F +ENCODING 72767 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -10 -2 +BITMAP +F0 +18 +0C +ENDCHAR +STARTCHAR uni011C40 +ENCODING 72768 +BBX 5 7 6 2 +BITMAP +30 +78 +C0 +60 +30 +20 +40 +ENDCHAR +STARTCHAR uni011C41 +ENCODING 72769 +BBX 2 6 7 3 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni011C42 +ENCODING 72770 +BBX 5 6 6 3 +BITMAP +D8 +D8 +D8 +D8 +D8 +D8 +ENDCHAR +STARTCHAR uni011C43 +ENCODING 72771 +BBX 2 4 7 5 +BITMAP +C0 +C0 +C0 +40 +ENDCHAR +STARTCHAR uni011C44 +ENCODING 72772 +BBX 5 8 6 1 +BITMAP +E0 +38 +00 +E0 +10 +00 +E0 +10 +ENDCHAR +STARTCHAR uni011C45 +ENCODING 72773 +BBX 6 7 5 2 +BITMAP +78 +CC +00 +30 +00 +CC +78 +ENDCHAR +STARTCHAR uni011C50 +ENCODING 72784 +BBX 5 5 5 4 +BITMAP +70 +D8 +88 +D8 +70 +ENDCHAR +STARTCHAR uni011C51 +ENCODING 72785 +BBX 6 6 5 3 +BITMAP +C0 +60 +30 +18 +0C +0C +ENDCHAR +STARTCHAR uni011C52 +ENCODING 72786 +BBX 6 6 5 3 +BITMAP +1C +38 +70 +E0 +30 +18 +ENDCHAR +STARTCHAR uni011C53 +ENCODING 72787 +BBX 9 8 4 1 +BITMAP +7000 +C800 +1C00 +0200 +0400 +0200 +0100 +0080 +ENDCHAR +STARTCHAR uni011C54 +ENCODING 72788 +BBX 5 7 5 2 +BITMAP +70 +D8 +D8 +C0 +60 +10 +10 +ENDCHAR +STARTCHAR uni011C55 +ENCODING 72789 +BBX 9 6 4 3 +BITMAP +1C00 +3800 +5800 +CC00 +4600 +8180 +ENDCHAR +STARTCHAR uni011C56 +ENCODING 72790 +BBX 5 6 5 3 +BITMAP +30 +40 +60 +30 +18 +F0 +ENDCHAR +STARTCHAR uni011C57 +ENCODING 72791 +BBX 6 7 5 2 +BITMAP +70 +E8 +48 +08 +08 +08 +04 +ENDCHAR +STARTCHAR uni011C58 +ENCODING 72792 +BBX 8 6 4 3 +BITMAP +03 +3C +C0 +E0 +70 +38 +ENDCHAR +STARTCHAR uni011C59 +ENCODING 72793 +BBX 7 8 5 1 +BITMAP +7C +82 +32 +72 +6C +40 +20 +10 +ENDCHAR +STARTCHAR uni011C5A +ENCODING 72794 +BBX 6 6 5 3 +BITMAP +60 +F0 +D8 +0C +18 +30 +ENDCHAR +STARTCHAR uni011C5B +ENCODING 72795 +BBX 5 6 6 3 +BITMAP +F8 +18 +F8 +18 +18 +F0 +ENDCHAR +STARTCHAR uni011C5C +ENCODING 72796 +BBX 6 7 5 3 +BITMAP +FC +0C +7C +0C +3C +0C +18 +ENDCHAR +STARTCHAR uni011C5D +ENCODING 72797 +BBX 8 9 4 1 +BITMAP +18 +3C +08 +78 +98 +3E +1B +71 +80 +ENDCHAR +STARTCHAR uni011C5E +ENCODING 72798 +BBX 7 8 5 1 +BITMAP +0C +1E +0C +7C +98 +38 +12 +0C +ENDCHAR +STARTCHAR uni011C5F +ENCODING 72799 +BBX 9 9 4 1 +BITMAP +0800 +1400 +2A00 +1500 +3F80 +0C00 +2C00 +5800 +8000 +ENDCHAR +STARTCHAR uni011C60 +ENCODING 72800 +BBX 11 8 3 2 +BITMAP +0C00 +1EC0 +37E0 +0600 +1600 +2E00 +4400 +8000 +ENDCHAR +STARTCHAR uni011C61 +ENCODING 72801 +BBX 10 8 3 2 +BITMAP +0680 +0D40 +0C00 +0600 +1600 +2E00 +4400 +8000 +ENDCHAR +STARTCHAR uni011C62 +ENCODING 72802 +BBX 10 8 3 2 +BITMAP +0F00 +1080 +1640 +1340 +0940 +2640 +5080 +8F00 +ENDCHAR +STARTCHAR uni011C63 +ENCODING 72803 +BBX 11 9 2 1 +BITMAP +0180 +0640 +0AA0 +0AA0 +0520 +1020 +2840 +4780 +8000 +ENDCHAR +STARTCHAR uni011C64 +ENCODING 72804 +BBX 9 6 4 3 +BITMAP +6300 +F780 +9800 +CC00 +6C00 +3800 +ENDCHAR +STARTCHAR uni011C65 +ENCODING 72805 +BBX 9 8 4 2 +BITMAP +7000 +FB00 +1F80 +1800 +7000 +6000 +3800 +1C00 +ENDCHAR +STARTCHAR uni011C66 +ENCODING 72806 +BBX 7 7 5 2 +BITMAP +8C +5E +CC +78 +F0 +88 +10 +ENDCHAR +STARTCHAR uni011C67 +ENCODING 72807 +BBX 9 7 4 2 +BITMAP +DB00 +7F80 +6900 +6000 +D000 +F000 +6000 +ENDCHAR +STARTCHAR uni011C68 +ENCODING 72808 +BBX 8 7 5 2 +BITMAP +C6 +CF +66 +1E +2E +4C +80 +ENDCHAR +STARTCHAR uni011C69 +ENCODING 72809 +BBX 7 8 5 1 +BITMAP +CC +DE +4C +6C +3C +2C +32 +04 +ENDCHAR +STARTCHAR uni011C6A +ENCODING 72810 +BBX 11 7 3 2 +BITMAP +CCC0 +DFE0 +CCC0 +6CC0 +6FC0 +3FC0 +0C80 +ENDCHAR +STARTCHAR uni011C6B +ENCODING 72811 +BBX 12 11 2 -1 +BITMAP +6660 +6FF0 +6660 +3660 +37E0 +1FE0 +36C0 +6060 +C930 +F9F0 +70E0 +ENDCHAR +STARTCHAR uni011C6C +ENCODING 72812 +BBX 11 10 3 0 +BITMAP +6300 +F780 +9B00 +3F00 +6700 +7F00 +0F80 +1BC0 +3660 +1CC0 +ENDCHAR +STARTCHAR uni011C70 +ENCODING 72816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +BA +8A +BE +A8 +AE +82 +FE +ENDCHAR +STARTCHAR uni011C71 +ENCODING 72817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 4 +BITMAP +F0 +90 +F0 +00 +F0 +90 +F0 +ENDCHAR +STARTCHAR uni011C72 +ENCODING 72818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +28 +A8 +E8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni011C73 +ENCODING 72819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +20 +F8 +A0 +A0 +B0 +88 +ENDCHAR +STARTCHAR uni011C74 +ENCODING 72820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +28 +E8 +88 +E8 +88 +E8 +ENDCHAR +STARTCHAR uni011C75 +ENCODING 72821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +20 +F8 +80 +80 +F0 +08 +ENDCHAR +STARTCHAR uni011C76 +ENCODING 72822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +FE +22 +FA +8A +BA +A2 +BA +ENDCHAR +STARTCHAR uni011C77 +ENCODING 72823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +20 +F8 +88 +B8 +A0 +B8 +ENDCHAR +STARTCHAR uni011C78 +ENCODING 72824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +40 +78 +08 +F8 +A0 +B8 +ENDCHAR +STARTCHAR uni011C79 +ENCODING 72825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +FE +82 +EA +2A +FA +A2 +BA +ENDCHAR +STARTCHAR uni011C7A +ENCODING 72826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +FC +44 +F4 +84 +F4 +54 +D4 +ENDCHAR +STARTCHAR uni011C7B +ENCODING 72827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +08 +E8 +28 +E8 +A8 +B8 +ENDCHAR +STARTCHAR uni011C7C +ENCODING 72828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +88 +E8 +28 +E8 +88 +E8 +ENDCHAR +STARTCHAR uni011C7D +ENCODING 72829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +20 +F8 +28 +E8 +28 +E8 +ENDCHAR +STARTCHAR uni011C7E +ENCODING 72830 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +BE +A2 +BA +8A +FA +22 +FA +ENDCHAR +STARTCHAR uni011C7F +ENCODING 72831 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +FC +84 +F4 +94 +F4 +24 +F4 +ENDCHAR +STARTCHAR uni011C80 +ENCODING 72832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +FC +84 +F4 +24 +F4 +94 +F4 +ENDCHAR +STARTCHAR uni011C81 +ENCODING 72833 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +FC +24 +F4 +84 +F4 +14 +F4 +ENDCHAR +STARTCHAR uni011C82 +ENCODING 72834 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +90 +B8 +A0 +B8 +90 +B8 +ENDCHAR +STARTCHAR uni011C83 +ENCODING 72835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +FC +20 +FC +84 +F4 +24 +74 +ENDCHAR +STARTCHAR uni011C84 +ENCODING 72836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +90 +B8 +A0 +B8 +88 +B8 +ENDCHAR +STARTCHAR uni011C85 +ENCODING 72837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +FC +14 +FC +14 +F4 +94 +F4 +ENDCHAR +STARTCHAR uni011C86 +ENCODING 72838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +20 +F8 +88 +B8 +A0 +B8 +ENDCHAR +STARTCHAR uni011C87 +ENCODING 72839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +FC +24 +F4 +14 +F4 +A4 +B4 +ENDCHAR +STARTCHAR uni011C88 +ENCODING 72840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +08 +F8 +28 +E8 +A8 +A8 +ENDCHAR +STARTCHAR uni011C89 +ENCODING 72841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +10 +F0 +80 +F8 +28 +E8 +ENDCHAR +STARTCHAR uni011C8A +ENCODING 72842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +88 +B8 +A0 +B0 +88 +80 +ENDCHAR +STARTCHAR uni011C8B +ENCODING 72843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +BC +A4 +F4 +14 +F4 +04 +04 +ENDCHAR +STARTCHAR uni011C8C +ENCODING 72844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +48 +E8 +28 +E8 +48 +E8 +ENDCHAR +STARTCHAR uni011C8D +ENCODING 72845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +80 +F8 +28 +E8 +88 +88 +ENDCHAR +STARTCHAR uni011C8E +ENCODING 72846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +F8 +80 +F8 +28 +E8 +08 +08 +ENDCHAR +STARTCHAR uni011C8F +ENCODING 72847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +FE +02 +AA +9A +CA +AA +4A +ENDCHAR +STARTCHAR uni011C92 +ENCODING 72850 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +28 +A8 +E8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni011C93 +ENCODING 72851 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +20 +F8 +A0 +A0 +B0 +88 +ENDCHAR +STARTCHAR uni011C94 +ENCODING 72852 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +28 +E8 +88 +E8 +88 +E8 +ENDCHAR +STARTCHAR uni011C95 +ENCODING 72853 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +20 +F8 +80 +80 +F0 +08 +ENDCHAR +STARTCHAR uni011C96 +ENCODING 72854 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -7 -2 +BITMAP +FE +22 +FA +8A +BA +A2 +BA +ENDCHAR +STARTCHAR uni011C97 +ENCODING 72855 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +20 +F8 +88 +B8 +A0 +B8 +ENDCHAR +STARTCHAR uni011C98 +ENCODING 72856 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +40 +78 +08 +F8 +A0 +B8 +ENDCHAR +STARTCHAR uni011C99 +ENCODING 72857 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -7 -2 +BITMAP +FE +82 +EA +2A +FA +A2 +BA +ENDCHAR +STARTCHAR uni011C9A +ENCODING 72858 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 -7 -2 +BITMAP +FC +44 +F4 +84 +F4 +54 +D4 +ENDCHAR +STARTCHAR uni011C9B +ENCODING 72859 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +08 +E8 +28 +E8 +A8 +B8 +ENDCHAR +STARTCHAR uni011C9C +ENCODING 72860 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +88 +E8 +28 +E8 +88 +E8 +ENDCHAR +STARTCHAR uni011C9D +ENCODING 72861 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +20 +F8 +28 +E8 +28 +E8 +ENDCHAR +STARTCHAR uni011C9E +ENCODING 72862 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -7 -2 +BITMAP +BE +A2 +BA +8A +FA +22 +FA +ENDCHAR +STARTCHAR uni011C9F +ENCODING 72863 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 -7 -2 +BITMAP +FC +84 +F4 +94 +F4 +24 +F4 +ENDCHAR +STARTCHAR uni011CA0 +ENCODING 72864 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 -7 -2 +BITMAP +FC +84 +F4 +24 +F4 +94 +F4 +ENDCHAR +STARTCHAR uni011CA1 +ENCODING 72865 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 -7 -2 +BITMAP +FC +24 +F4 +84 +F4 +14 +F4 +ENDCHAR +STARTCHAR uni011CA2 +ENCODING 72866 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +90 +B8 +A0 +B8 +90 +B8 +ENDCHAR +STARTCHAR uni011CA3 +ENCODING 72867 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 -7 -2 +BITMAP +FC +20 +FC +84 +F4 +24 +74 +ENDCHAR +STARTCHAR uni011CA4 +ENCODING 72868 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -7 -2 +BITMAP +F8 +90 +B8 +A0 +B8 +88 +B8 +ENDCHAR +STARTCHAR uni011CA5 +ENCODING 72869 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -7 0 +BITMAP +04 +FC +84 +FC +ENDCHAR +STARTCHAR uni011CA6 +ENCODING 72870 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +20 +F8 +88 +B8 +A0 +B8 +ENDCHAR +STARTCHAR uni011CA7 +ENCODING 72871 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 -7 -2 +BITMAP +FC +24 +F4 +14 +F4 +A4 +B4 +ENDCHAR +STARTCHAR uni011CA9 +ENCODING 72873 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -6 -1 +BITMAP +08 +18 +60 +84 +48 +30 +ENDCHAR +STARTCHAR uni011CAA +ENCODING 72874 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 3 -7 1 +BITMAP +04 +04 +FC +ENDCHAR +STARTCHAR uni011CAB +ENCODING 72875 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 -7 -2 +BITMAP +BC +A4 +F4 +14 +F4 +04 +04 +ENDCHAR +STARTCHAR uni011CAC +ENCODING 72876 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +48 +E8 +28 +E8 +48 +E8 +ENDCHAR +STARTCHAR uni011CAD +ENCODING 72877 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +80 +F8 +28 +E8 +88 +88 +ENDCHAR +STARTCHAR uni011CAE +ENCODING 72878 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +80 +F8 +28 +E8 +08 +08 +ENDCHAR +STARTCHAR uni011CAF +ENCODING 72879 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -7 -2 +BITMAP +FE +02 +AA +9A +CA +AA +4A +ENDCHAR +STARTCHAR uni011CB0 +ENCODING 72880 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 -2 +BITMAP +F8 +08 +F8 +28 +E8 +A8 +A8 +ENDCHAR +STARTCHAR uni011CB1 +ENCODING 72881 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 8 -8 5 +BITMAP +40 +A0 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011CB2 +ENCODING 72882 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -6 2 +BITMAP +08 +F8 +ENDCHAR +STARTCHAR uni011CB3 +ENCODING 72883 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -6 11 +BITMAP +F8 +08 +ENDCHAR +STARTCHAR uni011CB4 +ENCODING 72884 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 9 -7 4 +BITMAP +FE +02 +02 +02 +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni011CB5 +ENCODING 72885 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -5 11 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni011CB6 +ENCODING 72886 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -7 11 +BITMAP +10 +AA +54 +ENDCHAR +STARTCHAR uni011D00 +ENCODING 72960 +BBX 12 10 3 0 +BITMAP +7800 +8400 +8400 +8400 +8400 +8400 +8400 +8400 +8400 +87F0 +ENDCHAR +STARTCHAR uni011D01 +ENCODING 72961 +BBX 12 10 3 0 +BITMAP +7800 +8400 +8400 +8400 +87F0 +8400 +8400 +8400 +8400 +87F0 +ENDCHAR +STARTCHAR uni011D02 +ENCODING 72962 +BBX 6 10 5 0 +BITMAP +78 +84 +84 +84 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni011D03 +ENCODING 72963 +BBX 12 10 3 0 +BITMAP +7800 +8400 +8400 +8400 +0400 +0400 +0400 +0400 +0400 +07F0 +ENDCHAR +STARTCHAR uni011D04 +ENCODING 72964 +BBX 12 10 3 0 +BITMAP +8400 +8400 +8400 +8C00 +7400 +0400 +0400 +0400 +0400 +07F0 +ENDCHAR +STARTCHAR uni011D05 +ENCODING 72965 +BBX 6 10 5 0 +BITMAP +84 +84 +84 +C4 +B8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni011D06 +ENCODING 72966 +BBX 6 10 5 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni011D08 +ENCODING 72968 +BBX 8 10 4 0 +BITMAP +88 +88 +88 +88 +88 +88 +88 +88 +88 +FF +ENDCHAR +STARTCHAR uni011D09 +ENCODING 72969 +BBX 12 10 3 0 +BITMAP +7840 +8440 +8440 +8440 +87F0 +8400 +8400 +8400 +8400 +87F0 +ENDCHAR +STARTCHAR uni011D0B +ENCODING 72971 +BBX 12 10 3 0 +BITMAP +7920 +8520 +8520 +8520 +87F0 +8400 +8400 +8400 +8400 +87F0 +ENDCHAR +STARTCHAR uni011D0C +ENCODING 72972 +BBX 12 10 3 0 +BITMAP +3000 +4800 +8400 +8400 +87F0 +8400 +8400 +8400 +4800 +3000 +ENDCHAR +STARTCHAR uni011D0D +ENCODING 72973 +BBX 12 10 3 0 +BITMAP +7800 +8400 +8400 +8C00 +7FF0 +C800 +8400 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni011D0E +ENCODING 72974 +BBX 6 10 5 0 +BITMAP +80 +80 +80 +80 +FC +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011D0F +ENCODING 72975 +BBX 12 10 3 0 +BITMAP +3000 +4800 +8000 +8000 +FFF0 +8000 +8000 +8000 +4800 +3000 +ENDCHAR +STARTCHAR uni011D10 +ENCODING 72976 +BBX 12 10 3 0 +BITMAP +7800 +8400 +B400 +B000 +8000 +7FF0 +0400 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni011D11 +ENCODING 72977 +BBX 12 10 3 0 +BITMAP +6000 +9000 +0800 +0800 +0FF0 +0800 +0800 +0800 +9000 +6000 +ENDCHAR +STARTCHAR uni011D12 +ENCODING 72978 +BBX 11 10 4 0 +BITMAP +7000 +8800 +0800 +1000 +7FE0 +1000 +0800 +0800 +8800 +7000 +ENDCHAR +STARTCHAR uni011D13 +ENCODING 72979 +BBX 12 10 3 0 +BITMAP +3000 +6800 +A400 +A400 +9FF0 +8400 +8400 +8400 +4800 +3000 +ENDCHAR +STARTCHAR uni011D14 +ENCODING 72980 +BBX 14 10 1 0 +BITMAP +6300 +9480 +8880 +8880 +80FC +8080 +8080 +8080 +8080 +6300 +ENDCHAR +STARTCHAR uni011D15 +ENCODING 72981 +BBX 12 11 3 0 +BITMAP +1800 +2400 +2400 +F800 +2000 +3FF0 +2000 +2000 +2000 +2000 +2000 +ENDCHAR +STARTCHAR uni011D16 +ENCODING 72982 +BBX 12 10 3 0 +BITMAP +8000 +8000 +8000 +8000 +87F0 +8400 +8400 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni011D17 +ENCODING 72983 +BBX 11 10 4 0 +BITMAP +1000 +1000 +1000 +1000 +FFE0 +1000 +1000 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uni011D18 +ENCODING 72984 +BBX 12 10 3 0 +BITMAP +7800 +8400 +8400 +8000 +7FF0 +0800 +0400 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni011D19 +ENCODING 72985 +BBX 12 10 3 0 +BITMAP +7800 +8400 +8400 +B400 +B7F0 +8400 +8400 +8400 +8400 +8400 +ENDCHAR +STARTCHAR uni011D1A +ENCODING 72986 +BBX 12 10 3 0 +BITMAP +7800 +8400 +8400 +8400 +87F0 +F000 +8800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni011D1B +ENCODING 72987 +BBX 12 10 3 0 +BITMAP +8400 +8400 +8400 +8400 +87F0 +8400 +8400 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni011D1C +ENCODING 72988 +BBX 12 10 3 0 +BITMAP +8400 +8400 +4800 +4800 +3FF0 +3000 +4800 +4800 +8400 +8400 +ENDCHAR +STARTCHAR uni011D1D +ENCODING 72989 +BBX 12 10 3 0 +BITMAP +7000 +8800 +A400 +6400 +07F0 +0400 +6400 +A400 +8800 +7000 +ENDCHAR +STARTCHAR uni011D1E +ENCODING 72990 +BBX 12 12 3 -2 +BITMAP +7000 +8800 +A400 +6400 +07F0 +0400 +4400 +A400 +9800 +7000 +0800 +0400 +ENDCHAR +STARTCHAR uni011D1F +ENCODING 72991 +BBX 14 10 1 0 +BITMAP +6300 +8080 +8080 +8080 +80FC +8080 +8880 +8880 +9480 +6300 +ENDCHAR +STARTCHAR uni011D20 +ENCODING 72992 +BBX 11 10 4 0 +BITMAP +8800 +8800 +8800 +8800 +FFE0 +8800 +8800 +8800 +8800 +8800 +ENDCHAR +STARTCHAR uni011D21 +ENCODING 72993 +BBX 13 10 2 0 +BITMAP +9200 +9200 +9200 +9200 +FFF8 +9200 +9200 +9200 +9200 +9200 +ENDCHAR +STARTCHAR uni011D22 +ENCODING 72994 +BBX 12 10 3 0 +BITMAP +8000 +8000 +8000 +8000 +FFF0 +8400 +8400 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni011D23 +ENCODING 72995 +BBX 12 10 3 0 +BITMAP +6000 +9000 +9000 +7000 +13F0 +2200 +2200 +4200 +4200 +3C00 +ENDCHAR +STARTCHAR uni011D24 +ENCODING 72996 +BBX 13 11 2 0 +BITMAP +6000 +9000 +9000 +7C00 +1000 +1FF8 +1000 +1000 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uni011D25 +ENCODING 72997 +BBX 12 10 3 0 +BITMAP +3000 +4800 +8400 +8400 +87F0 +8000 +8000 +8000 +4000 +3000 +ENDCHAR +STARTCHAR uni011D26 +ENCODING 72998 +BBX 12 10 3 0 +BITMAP +4800 +8400 +8400 +8400 +B7F0 +B400 +8400 +8400 +8400 +4800 +ENDCHAR +STARTCHAR uni011D27 +ENCODING 72999 +BBX 12 10 3 0 +BITMAP +7800 +8400 +8400 +8400 +87F0 +8400 +8400 +8400 +8400 +8400 +ENDCHAR +STARTCHAR uni011D28 +ENCODING 73000 +BBX 14 10 1 0 +BITMAP +7800 +8400 +8700 +8C80 +78FC +CC80 +8700 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni011D29 +ENCODING 73001 +BBX 13 10 2 0 +BITMAP +8200 +8200 +8200 +4400 +47F8 +4400 +2800 +2800 +2800 +1000 +ENDCHAR +STARTCHAR uni011D2A +ENCODING 73002 +BBX 12 10 3 0 +BITMAP +3000 +4800 +8400 +8400 +FFF0 +8400 +8400 +8400 +4800 +3000 +ENDCHAR +STARTCHAR uni011D2B +ENCODING 73003 +BBX 11 10 4 0 +BITMAP +7000 +8800 +8000 +8000 +6FE0 +8800 +8800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni011D2C +ENCODING 73004 +BBX 14 10 1 0 +BITMAP +6300 +8480 +8480 +8480 +83FC +8080 +8880 +8880 +9480 +6300 +ENDCHAR +STARTCHAR uni011D2D +ENCODING 73005 +BBX 14 10 1 0 +BITMAP +2200 +5500 +9480 +8480 +88FC +8880 +9080 +9480 +5500 +2200 +ENDCHAR +STARTCHAR uni011D2E +ENCODING 73006 +BBX 14 10 1 0 +BITMAP +DB00 +2480 +2480 +2480 +24FC +2480 +2480 +2480 +2480 +2480 +ENDCHAR +STARTCHAR uni011D2F +ENCODING 73007 +BBX 13 10 2 0 +BITMAP +CC00 +3200 +2200 +2200 +53F8 +5200 +5200 +5200 +5200 +2200 +ENDCHAR +STARTCHAR uni011D30 +ENCODING 73008 +BBX 11 10 4 0 +BITMAP +7000 +8800 +0800 +1000 +7FE0 +1000 +4800 +A800 +A800 +7000 +ENDCHAR +STARTCHAR uni011D31 +ENCODING 73009 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 -6 7 +BITMAP +F8 +ENDCHAR +STARTCHAR uni011D32 +ENCODING 73010 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 6 +BITMAP +60 +90 +90 +80 +80 +ENDCHAR +STARTCHAR uni011D33 +ENCODING 73011 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 6 +BITMAP +60 +90 +90 +10 +10 +ENDCHAR +STARTCHAR uni011D34 +ENCODING 73012 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 6 +BITMAP +90 +90 +70 +10 +10 +ENDCHAR +STARTCHAR uni011D35 +ENCODING 73013 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 6 +BITMAP +90 +90 +E0 +80 +80 +ENDCHAR +STARTCHAR uni011D36 +ENCODING 73014 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 0 +BITMAP +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni011D3A +ENCODING 73018 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 4 -2 7 +BITMAP +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011D3C +ENCODING 73020 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -5 7 +BITMAP +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni011D3D +ENCODING 73021 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -6 7 +BITMAP +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni011D3F +ENCODING 73023 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -6 7 +BITMAP +50 +50 +50 +F8 +ENDCHAR +STARTCHAR uni011D40 +ENCODING 73024 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -6 12 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011D41 +ENCODING 73025 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 2 -6 12 +BITMAP +D8 +D8 +ENDCHAR +STARTCHAR uni011D42 +ENCODING 73026 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -6 2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011D43 +ENCODING 73027 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 -6 9 +BITMAP +90 +60 +ENDCHAR +STARTCHAR uni011D44 +ENCODING 73028 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -4 -2 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni011D45 +ENCODING 73029 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -4 -2 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni011D46 +ENCODING 73030 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 13 5 +BITMAP +40 +A0 +A0 +E0 +ENDCHAR +STARTCHAR uni011D47 +ENCODING 73031 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 4 -2 0 +BITMAP +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni011D50 +ENCODING 73040 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +84 +84 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni011D51 +ENCODING 73041 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni011D52 +ENCODING 73042 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni011D53 +ENCODING 73043 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni011D54 +ENCODING 73044 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +84 +FC +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni011D55 +ENCODING 73045 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +98 +84 +84 +C4 +A4 +98 +ENDCHAR +STARTCHAR uni011D56 +ENCODING 73046 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +86 +8A +8A +8A +86 +82 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni011D57 +ENCODING 73047 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +04 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni011D58 +ENCODING 73048 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +84 +48 +28 +10 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni011D59 +ENCODING 73049 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +80 +E0 +98 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni011D60 +ENCODING 73056 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +0010 +0010 +1910 +2110 +2110 +2110 +1EE0 +ENDCHAR +STARTCHAR uni011D61 +ENCODING 73057 +BBX 16 9 0 1 +BITMAP +FFFF +0080 +00B0 +0048 +3448 +44B0 +4480 +4480 +3B00 +ENDCHAR +STARTCHAR uni011D62 +ENCODING 73058 +BBX 16 11 0 1 +BITMAP +01C0 +0220 +FFFF +0220 +0220 +0220 +1A20 +2220 +2220 +2220 +1C20 +ENDCHAR +STARTCHAR uni011D63 +ENCODING 73059 +BBX 16 11 0 1 +BITMAP +0300 +0480 +FFFF +0480 +0480 +0480 +3480 +4480 +44B0 +44C8 +3888 +ENDCHAR +STARTCHAR uni011D64 +ENCODING 73060 +BBX 16 9 0 1 +BITMAP +FFFF +2020 +3C20 +0240 +03E0 +1C90 +2090 +2260 +1C00 +ENDCHAR +STARTCHAR uni011D65 +ENCODING 73061 +BBX 16 9 0 1 +BITMAP +FFFF +2020 +3C20 +0240 +1DE0 +2090 +1C90 +2060 +1E00 +ENDCHAR +STARTCHAR uni011D67 +ENCODING 73063 +BBX 16 13 0 1 +BITMAP +0600 +0900 +07E0 +0010 +FFFF +0010 +0010 +0010 +1910 +2110 +2110 +2110 +1EE0 +ENDCHAR +STARTCHAR uni011D68 +ENCODING 73064 +BBX 16 13 0 1 +BITMAP +3180 +4A40 +3FE0 +0010 +FFFF +0010 +0010 +0010 +1910 +2110 +2110 +2110 +1EE0 +ENDCHAR +STARTCHAR uni011D6A +ENCODING 73066 +BBX 16 13 0 1 +BITMAP +1800 +2400 +1F00 +0080 +FFFF +0080 +00B0 +0048 +3448 +44B0 +4480 +4480 +3B00 +ENDCHAR +STARTCHAR uni011D6B +ENCODING 73067 +BBX 16 13 0 1 +BITMAP +6300 +9480 +7B00 +0080 +FFFF +0080 +00B0 +0048 +3448 +44B0 +4480 +4480 +3B00 +ENDCHAR +STARTCHAR uni011D6C +ENCODING 73068 +BBX 16 9 0 1 +BITMAP +FFFF +0C10 +5210 +5220 +4C40 +33E0 +0090 +0090 +0060 +ENDCHAR +STARTCHAR uni011D6D +ENCODING 73069 +BBX 16 9 0 1 +BITMAP +FFFF +0020 +3820 +0420 +0420 +0420 +3820 +2040 +1F80 +ENDCHAR +STARTCHAR uni011D6E +ENCODING 73070 +BBX 16 9 0 1 +BITMAP +FFFF +0020 +3020 +4820 +4820 +3020 +1020 +2040 +1F80 +ENDCHAR +STARTCHAR uni011D6F +ENCODING 73071 +BBX 16 9 0 1 +BITMAP +FFFF +0020 +6040 +93E0 +9290 +6290 +2260 +4400 +3800 +ENDCHAR +STARTCHAR uni011D70 +ENCODING 73072 +BBX 16 9 0 1 +BITMAP +FFFF +3410 +4810 +4820 +3440 +03E0 +0090 +0090 +0060 +ENDCHAR +STARTCHAR uni011D71 +ENCODING 73073 +BBX 16 12 0 1 +BITMAP +6000 +9000 +0800 +FFFF +0420 +1E20 +2540 +44E0 +5890 +4490 +4460 +3800 +ENDCHAR +STARTCHAR uni011D72 +ENCODING 73074 +BBX 16 10 0 0 +BITMAP +FFFF +0010 +3010 +4820 +2440 +07E0 +3490 +4C90 +3460 +0200 +ENDCHAR +STARTCHAR uni011D73 +ENCODING 73075 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +0020 +0F40 +1080 +20C0 +2120 +2120 +10C0 +ENDCHAR +STARTCHAR uni011D74 +ENCODING 73076 +BBX 16 10 0 1 +BITMAP +7000 +8BFF +A810 +4810 +0BA0 +7260 +4290 +4290 +2260 +1C00 +ENDCHAR +STARTCHAR uni011D75 +ENCODING 73077 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +01A0 +0E60 +1090 +1890 +2460 +2400 +1800 +ENDCHAR +STARTCHAR uni011D76 +ENCODING 73078 +BBX 16 9 0 1 +BITMAP +FFFF +0C10 +1210 +0F20 +10C0 +2060 +5090 +5090 +2060 +ENDCHAR +STARTCHAR uni011D77 +ENCODING 73079 +BBX 16 11 0 1 +BITMAP +0C00 +1200 +9C7F +2010 +3FA0 +2060 +1C90 +0290 +0C60 +2200 +1C00 +ENDCHAR +STARTCHAR uni011D78 +ENCODING 73080 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +3810 +4420 +33C0 +0260 +0290 +4490 +3860 +ENDCHAR +STARTCHAR uni011D79 +ENCODING 73081 +BBX 16 9 0 1 +BITMAP +FFFF +0410 +3C10 +5360 +4C80 +3940 +0220 +0220 +01C0 +ENDCHAR +STARTCHAR uni011D7A +ENCODING 73082 +BBX 16 9 0 1 +BITMAP +FFFF +1020 +1020 +1320 +1320 +1020 +1020 +0840 +0780 +ENDCHAR +STARTCHAR uni011D7B +ENCODING 73083 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +0C10 +1220 +0FC0 +0260 +0490 +0890 +0060 +ENDCHAR +STARTCHAR uni011D7C +ENCODING 73084 +BBX 16 10 0 0 +BITMAP +FFFF +0020 +0C20 +1220 +1220 +1220 +1420 +0840 +1780 +2000 +ENDCHAR +STARTCHAR uni011D7D +ENCODING 73085 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +1C10 +2220 +2240 +23E0 +2290 +2290 +1C60 +ENDCHAR +STARTCHAR uni011D7E +ENCODING 73086 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +1C10 +2220 +2240 +3FE0 +2290 +2290 +1C60 +ENDCHAR +STARTCHAR uni011D7F +ENCODING 73087 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +0C10 +1220 +0FC0 +0060 +0090 +0090 +0060 +ENDCHAR +STARTCHAR uni011D80 +ENCODING 73088 +BBX 16 9 0 1 +BITMAP +FFFF +1810 +2410 +2020 +1FE0 +2090 +1890 +2260 +1C00 +ENDCHAR +STARTCHAR uni011D81 +ENCODING 73089 +BBX 16 9 0 1 +BITMAP +FFFF +2010 +3FD0 +2020 +2250 +1E90 +0290 +2260 +1C00 +ENDCHAR +STARTCHAR uni011D82 +ENCODING 73090 +BBX 16 13 0 1 +BITMAP +3000 +4800 +6800 +0800 +FFFF +1010 +2010 +2020 +1FE0 +2090 +2090 +2460 +1800 +ENDCHAR +STARTCHAR uni011D83 +ENCODING 73091 +BBX 16 9 0 1 +BITMAP +FFFF +6410 +5410 +4B60 +4480 +3940 +0220 +0220 +01C0 +ENDCHAR +STARTCHAR uni011D84 +ENCODING 73092 +BBX 16 11 0 1 +BITMAP +1800 +2400 +A4FF +1410 +0410 +0360 +0080 +0140 +0220 +0220 +01C0 +ENDCHAR +STARTCHAR uni011D85 +ENCODING 73093 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +7F10 +18A0 +0460 +3290 +5290 +6260 +3C00 +ENDCHAR +STARTCHAR uni011D86 +ENCODING 73094 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +3010 +49A0 +4A60 +7290 +4290 +4260 +3C00 +ENDCHAR +STARTCHAR uni011D87 +ENCODING 73095 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +0010 +41A0 +4260 +4290 +4290 +4260 +3C00 +ENDCHAR +STARTCHAR uni011D88 +ENCODING 73096 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +0020 +0F40 +10C0 +1120 +0D20 +08C0 +1000 +ENDCHAR +STARTCHAR uni011D89 +ENCODING 73097 +BBX 16 9 0 1 +BITMAP +FFFF +0010 +3810 +45A0 +0660 +0490 +0490 +4460 +3800 +ENDCHAR +STARTCHAR uni011D8A +ENCODING 73098 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -4 4 +BITMAP +F0 +20 +D0 +50 +50 +20 +ENDCHAR +STARTCHAR uni011D8B +ENCODING 73099 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 12 -5 1 +BITMAP +60 +90 +10 +78 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni011D8C +ENCODING 73100 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 12 -7 1 +BITMAP +60 +90 +10 +7E +10 +10 +10 +10 +10 +1C +12 +12 +ENDCHAR +STARTCHAR uni011D8D +ENCODING 73101 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -4 4 +BITMAP +F0 +80 +A0 +D0 +90 +60 +ENDCHAR +STARTCHAR uni011D8E +ENCODING 73102 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 9 -4 1 +BITMAP +F0 +80 +A0 +D0 +90 +60 +10 +10 +60 +ENDCHAR +STARTCHAR uni011D90 +ENCODING 73104 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 4 -9 10 +BITMAP +60 +90 +7E +01 +ENDCHAR +STARTCHAR uni011D91 +ENCODING 73105 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 4 -12 10 +BITMAP +6300 +9480 +7FE0 +0010 +ENDCHAR +STARTCHAR uni011D93 +ENCODING 73107 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 10 -8 4 +BITMAP +60 +90 +7C +02 +0F +02 +0E +05 +05 +02 +ENDCHAR +STARTCHAR uni011D94 +ENCODING 73108 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 13 10 -13 4 +BITMAP +6300 +9480 +7FE0 +0010 +0078 +0010 +0070 +0028 +0028 +0010 +ENDCHAR +STARTCHAR uni011D95 +ENCODING 73109 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 10 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni011D96 +ENCODING 73110 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 10 -5 0 +BITMAP +F8 +30 +48 +48 +30 +00 +30 +48 +48 +30 +ENDCHAR +STARTCHAR uni011D97 +ENCODING 73111 +BBX 5 3 5 -2 +BITMAP +20 +F8 +20 +ENDCHAR +STARTCHAR uni011D98 +ENCODING 73112 +BBX 15 10 0 1 +BITMAP +0100 +0440 +0380 +0000 +0218 +6224 +9242 +8642 +8A52 +718C +ENDCHAR +STARTCHAR uni011DA0 +ENCODING 73120 +BBX 7 9 4 1 +BITMAP +38 +44 +82 +82 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni011DA1 +ENCODING 73121 +BBX 5 9 6 1 +BITMAP +08 +08 +08 +08 +68 +98 +88 +88 +70 +ENDCHAR +STARTCHAR uni011DA2 +ENCODING 73122 +BBX 9 9 4 1 +BITMAP +FF00 +3080 +0880 +0880 +6500 +9400 +9400 +A400 +7800 +ENDCHAR +STARTCHAR uni011DA3 +ENCODING 73123 +BBX 7 9 5 1 +BITMAP +70 +88 +94 +64 +02 +72 +8A +84 +78 +ENDCHAR +STARTCHAR uni011DA4 +ENCODING 73124 +BBX 10 9 4 1 +BITMAP +7000 +8800 +6400 +0400 +0200 +7200 +8A40 +8440 +7B80 +ENDCHAR +STARTCHAR uni011DA5 +ENCODING 73125 +BBX 7 9 4 1 +BITMAP +18 +24 +58 +40 +3C +02 +9C +42 +3C +ENDCHAR +STARTCHAR uni011DA6 +ENCODING 73126 +BBX 7 9 5 1 +BITMAP +1C +22 +52 +4C +80 +9C +A2 +42 +3C +ENDCHAR +STARTCHAR uni011DA7 +ENCODING 73127 +BBX 7 9 4 2 +BITMAP +F8 +04 +02 +3A +46 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni011DA8 +ENCODING 73128 +BBX 10 9 3 1 +BITMAP +FF80 +31C0 +0A40 +0A40 +3180 +6000 +9000 +9000 +6000 +ENDCHAR +STARTCHAR uni011DA9 +ENCODING 73129 +BBX 9 9 4 1 +BITMAP +3000 +4800 +7000 +4000 +3800 +0400 +7400 +8880 +7700 +ENDCHAR +STARTCHAR uni011EE0 +ENCODING 73440 +BBX 9 7 3 1 +BITMAP +1C00 +3200 +2300 +2600 +7480 +C980 +8300 +ENDCHAR +STARTCHAR uni011EE1 +ENCODING 73441 +BBX 9 7 3 1 +BITMAP +3600 +6B00 +C980 +0000 +1C00 +3200 +6100 +ENDCHAR +STARTCHAR uni011EE2 +ENCODING 73442 +BBX 9 5 3 1 +BITMAP +3800 +6400 +D580 +1300 +0E00 +ENDCHAR +STARTCHAR uni011EE3 +ENCODING 73443 +BBX 9 7 3 1 +BITMAP +0180 +0100 +0100 +0100 +3900 +6700 +C200 +ENDCHAR +STARTCHAR uni011EE4 +ENCODING 73444 +BBX 9 7 3 1 +BITMAP +3600 +6B00 +C980 +0000 +2200 +2600 +1C00 +ENDCHAR +STARTCHAR uni011EE5 +ENCODING 73445 +BBX 9 7 3 1 +BITMAP +3600 +6B00 +C980 +0000 +0800 +1400 +1C00 +ENDCHAR +STARTCHAR uni011EE6 +ENCODING 73446 +BBX 9 7 3 1 +BITMAP +0C00 +1A00 +3100 +6080 +4480 +C480 +8300 +ENDCHAR +STARTCHAR uni011EE7 +ENCODING 73447 +BBX 9 7 3 1 +BITMAP +6300 +D680 +8400 +8400 +8400 +C200 +7E00 +ENDCHAR +STARTCHAR uni011EE8 +ENCODING 73448 +BBX 9 7 3 1 +BITMAP +0C00 +1A00 +3200 +6100 +4100 +C080 +8080 +ENDCHAR +STARTCHAR uni011EE9 +ENCODING 73449 +BBX 9 7 4 1 +BITMAP +1800 +3400 +6200 +D100 +9480 +D480 +6300 +ENDCHAR +STARTCHAR uni011EEA +ENCODING 73450 +BBX 9 7 3 1 +BITMAP +3600 +6B00 +C980 +1400 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uni011EEB +ENCODING 73451 +BBX 11 7 2 1 +BITMAP +6EC0 +DB60 +1100 +2A80 +2A80 +2A80 +1100 +ENDCHAR +STARTCHAR uni011EEC +ENCODING 73452 +BBX 9 7 3 1 +BITMAP +1400 +3E00 +2B00 +2200 +7480 +C980 +8300 +ENDCHAR +STARTCHAR uni011EED +ENCODING 73453 +BBX 9 7 3 1 +BITMAP +8180 +C700 +BC00 +8000 +8000 +9180 +8F00 +ENDCHAR +STARTCHAR uni011EEE +ENCODING 73454 +BBX 9 7 3 1 +BITMAP +0700 +0980 +0880 +0800 +0400 +8C00 +7800 +ENDCHAR +STARTCHAR uni011EEF +ENCODING 73455 +BBX 10 7 3 1 +BITMAP +6180 +D2C0 +9240 +1200 +1200 +1200 +0C00 +ENDCHAR +STARTCHAR uni011EF0 +ENCODING 73456 +BBX 7 7 5 1 +BITMAP +30 +68 +44 +22 +70 +C8 +80 +ENDCHAR +STARTCHAR uni011EF1 +ENCODING 73457 +BBX 6 7 5 1 +BITMAP +30 +68 +44 +20 +30 +68 +E0 +ENDCHAR +STARTCHAR uni011EF2 +ENCODING 73458 +BBX 9 7 3 1 +BITMAP +8180 +C700 +BC00 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni011EF3 +ENCODING 73459 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -2 9 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011EF4 +ENCODING 73460 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 -2 -2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni011EF5 +ENCODING 73461 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 5 -8 1 +BITMAP +C0 +C0 +80 +80 +80 +ENDCHAR +STARTCHAR uni011EF6 +ENCODING 73462 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 5 6 1 +BITMAP +C0 +C0 +40 +40 +40 +ENDCHAR +STARTCHAR uni011EF7 +ENCODING 73463 +BBX 2 8 7 1 +BITMAP +C0 +C0 +00 +C0 +C0 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni011EF8 +ENCODING 73464 +BBX 8 8 4 1 +BITMAP +C0 +D8 +18 +C3 +C3 +18 +D8 +C0 +ENDCHAR +STARTCHAR uni016A40 +ENCODING 92736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +04 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni016A41 +ENCODING 92737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni016A42 +ENCODING 92738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni016A43 +ENCODING 92739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +7C +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni016A44 +ENCODING 92740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni016A45 +ENCODING 92741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni016A46 +ENCODING 92742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +80 +80 +84 +7C +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni016A47 +ENCODING 92743 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni016A48 +ENCODING 92744 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni016A49 +ENCODING 92745 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni016A4A +ENCODING 92746 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +84 +8C +94 +A4 +C4 +84 +ENDCHAR +STARTCHAR uni016A4B +ENCODING 92747 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni016A4C +ENCODING 92748 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +FC +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni016A4D +ENCODING 92749 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +44 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni016A4E +ENCODING 92750 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +7C +84 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni016A4F +ENCODING 92751 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +92 +10 +10 +FE +10 +10 +10 +92 +10 +ENDCHAR +STARTCHAR uni016A50 +ENCODING 92752 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +04 +84 +F8 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni016A51 +ENCODING 92753 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +82 +7C +20 +10 +08 +3C +42 +42 +3C +ENDCHAR +STARTCHAR uni016A52 +ENCODING 92754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +78 +94 +94 +64 +08 +08 +70 +90 +92 +6C +ENDCHAR +STARTCHAR uni016A53 +ENCODING 92755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +C4 +A4 +A4 +44 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni016A54 +ENCODING 92756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +04 +04 +04 +7C +84 +84 +84 +84 +7C +ENDCHAR +STARTCHAR uni016A55 +ENCODING 92757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +02 +02 +02 +02 +02 +7A +86 +82 +92 +62 +ENDCHAR +STARTCHAR uni016A56 +ENCODING 92758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +02 +02 +02 +02 +62 +92 +82 +82 +7A +06 +ENDCHAR +STARTCHAR uni016A57 +ENCODING 92759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni016A58 +ENCODING 92760 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni016A59 +ENCODING 92761 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni016A5A +ENCODING 92762 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +84 +44 +24 +14 +0C +04 +ENDCHAR +STARTCHAR uni016A5B +ENCODING 92763 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +82 +82 +86 +7A +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni016A5C +ENCODING 92764 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +86 +7A +02 +02 +7E +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni016A5D +ENCODING 92765 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +7C +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni016A5E +ENCODING 92766 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +04 +0A +0A +0A +0A +6A +8A +B2 +82 +72 +ENDCHAR +STARTCHAR uni016A60 +ENCODING 92768 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +82 +82 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni016A61 +ENCODING 92769 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +02 +62 +92 +92 +7C +10 +10 +38 +ENDCHAR +STARTCHAR uni016A62 +ENCODING 92770 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7E +80 +7C +02 +62 +92 +7C +10 +10 +10 +ENDCHAR +STARTCHAR uni016A63 +ENCODING 92771 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +02 +02 +82 +7C +20 +10 +08 +ENDCHAR +STARTCHAR uni016A64 +ENCODING 92772 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +80 +80 +82 +7C +08 +10 +20 +ENDCHAR +STARTCHAR uni016A65 +ENCODING 92773 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +82 +86 +7A +02 +02 +84 +78 +ENDCHAR +STARTCHAR uni016A66 +ENCODING 92774 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +70 +80 +88 +98 +68 +08 +08 +08 +0A +04 +ENDCHAR +STARTCHAR uni016A67 +ENCODING 92775 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +6C +92 +92 +92 +7C +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni016A68 +ENCODING 92776 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +1C +22 +20 +22 +1E +02 +44 +88 +90 +60 +ENDCHAR +STARTCHAR uni016A69 +ENCODING 92777 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +60 +92 +82 +92 +62 +24 +44 +44 +48 +30 +ENDCHAR +STARTCHAR uni016A6E +ENCODING 92782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 2 1 0 +BITMAP +C8 +C8 +ENDCHAR +STARTCHAR uni016A6F +ENCODING 92783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 1 0 +BITMAP +CA +CA +ENDCHAR +STARTCHAR uni016AD0 +ENCODING 92880 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +04 +04 +04 +38 +04 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni016AD1 +ENCODING 92881 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni016AD2 +ENCODING 92882 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C0 +46 +44 +E4 +44 +44 +44 +44 +44 +7C +ENDCHAR +STARTCHAR uni016AD3 +ENCODING 92883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +80 +FC +82 +02 +1C +ENDCHAR +STARTCHAR uni016AD4 +ENCODING 92884 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +98 +A8 +70 +20 +10 +08 +08 +30 +ENDCHAR +STARTCHAR uni016AD5 +ENCODING 92885 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7E +88 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni016AD6 +ENCODING 92886 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +8C +84 +84 +60 +18 +84 +84 +C4 +78 +ENDCHAR +STARTCHAR uni016AD7 +ENCODING 92887 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E0 +10 +10 +10 +14 +78 +90 +90 +A0 +40 +ENDCHAR +STARTCHAR uni016AD8 +ENCODING 92888 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +08 +08 +0C +18 +A8 +48 +08 +08 +08 +ENDCHAR +STARTCHAR uni016AD9 +ENCODING 92889 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 3 +BITMAP +FC +88 +10 +20 +ENDCHAR +STARTCHAR uni016ADA +ENCODING 92890 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +E0 +10 +10 +10 +10 +90 +FC +12 +0A +04 +ENDCHAR +STARTCHAR uni016ADB +ENCODING 92891 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +80 +86 +8A +92 +A2 +C2 +02 +ENDCHAR +STARTCHAR uni016ADC +ENCODING 92892 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 3 +BITMAP +1C +02 +82 +FC +ENDCHAR +STARTCHAR uni016ADD +ENCODING 92893 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 2 0 +BITMAP +FC +04 +04 +04 +04 +74 +8C +84 +84 +78 +ENDCHAR +STARTCHAR uni016ADE +ENCODING 92894 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C0 +80 +80 +80 +78 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni016ADF +ENCODING 92895 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +FC +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni016AE0 +ENCODING 92896 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +78 +48 +84 +ENDCHAR +STARTCHAR uni016AE1 +ENCODING 92897 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +28 +7C +82 +82 +82 +82 +82 +82 +44 +ENDCHAR +STARTCHAR uni016AE2 +ENCODING 92898 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 3 +BITMAP +F0 +10 +20 +3C +ENDCHAR +STARTCHAR uni016AE3 +ENCODING 92899 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +E0 +10 +10 +10 +10 +10 +10 +10 +10 +FC +ENDCHAR +STARTCHAR uni016AE4 +ENCODING 92900 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +7C +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni016AE5 +ENCODING 92901 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni016AE6 +ENCODING 92902 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +50 +E0 +40 +40 +58 +44 +44 +48 +30 +ENDCHAR +STARTCHAR uni016AE7 +ENCODING 92903 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C0 +58 +64 +42 +42 +42 +42 +42 +42 +42 +ENDCHAR +STARTCHAR uni016AE8 +ENCODING 92904 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +E0 +50 +60 +78 +44 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni016AE9 +ENCODING 92905 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +82 +82 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni016AEA +ENCODING 92906 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +6C +92 +92 +92 +82 +82 +82 +82 +82 +44 +ENDCHAR +STARTCHAR uni016AEB +ENCODING 92907 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +80 +80 +78 +80 +80 +82 +82 +84 +78 +ENDCHAR +STARTCHAR uni016AEC +ENCODING 92908 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +06 +08 +10 +20 +40 +80 +80 +80 +40 +20 +10 +0E +ENDCHAR +STARTCHAR uni016AED +ENCODING 92909 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +06 +04 +7E +84 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni016AF0 +ENCODING 92912 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -4 3 +BITMAP +80 +ENDCHAR +STARTCHAR uni016AF1 +ENCODING 92913 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -4 2 +BITMAP +80 +40 +80 +ENDCHAR +STARTCHAR uni016AF2 +ENCODING 92914 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 3 -3 2 +BITMAP +80 +00 +80 +ENDCHAR +STARTCHAR uni016AF3 +ENCODING 92915 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 1 -4 4 +BITMAP +C0 +ENDCHAR +STARTCHAR uni016AF4 +ENCODING 92916 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -4 2 +BITMAP +40 +C0 +40 +ENDCHAR +STARTCHAR uni016AF5 +ENCODING 92917 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +10 +10 +10 +D6 +10 +10 +10 +ENDCHAR +STARTCHAR uni016B00 +ENCODING 92928 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +84 +48 +48 +30 +30 +ENDCHAR +STARTCHAR uni016B01 +ENCODING 92929 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +04 +04 +7C +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni016B02 +ENCODING 92930 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +10 +10 +10 +10 +30 +28 +48 +8C +ENDCHAR +STARTCHAR uni016B03 +ENCODING 92931 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +24 +2C +34 +24 +64 +A4 +A4 +66 +ENDCHAR +STARTCHAR uni016B04 +ENCODING 92932 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +8C +ENDCHAR +STARTCHAR uni016B05 +ENCODING 92933 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7A +84 +8C +94 +94 +94 +94 +C8 +ENDCHAR +STARTCHAR uni016B06 +ENCODING 92934 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +9E +92 +92 +92 +92 +92 +92 +62 +ENDCHAR +STARTCHAR uni016B07 +ENCODING 92935 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +74 +8C +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni016B08 +ENCODING 92936 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +04 +04 +04 +04 +C4 +84 +84 +78 +ENDCHAR +STARTCHAR uni016B09 +ENCODING 92937 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +FC +84 +84 +84 +8C +ENDCHAR +STARTCHAR uni016B0A +ENCODING 92938 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +B4 +48 +48 +48 +ENDCHAR +STARTCHAR uni016B0B +ENCODING 92939 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +80 +80 +A0 +B8 +94 +92 +92 +62 +ENDCHAR +STARTCHAR uni016B0C +ENCODING 92940 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +E4 +84 +84 +84 +FC +ENDCHAR +STARTCHAR uni016B0D +ENCODING 92941 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +21 +51 +51 +69 +C9 +49 +49 +36 +ENDCHAR +STARTCHAR uni016B0E +ENCODING 92942 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +48 +48 +48 +48 +48 +48 +4C +ENDCHAR +STARTCHAR uni016B0F +ENCODING 92943 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 -1 +BITMAP +82 +85 +85 +95 +95 +95 +95 +6E +04 +ENDCHAR +STARTCHAR uni016B10 +ENCODING 92944 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +F2 +92 +92 +92 +92 +92 +92 +8C +ENDCHAR +STARTCHAR uni016B11 +ENCODING 92945 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni016B12 +ENCODING 92946 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +92 +92 +92 +92 +92 +92 +62 +ENDCHAR +STARTCHAR uni016B13 +ENCODING 92947 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +B4 +BC +94 +94 +94 +94 +64 +ENDCHAR +STARTCHAR uni016B14 +ENCODING 92948 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +C4 +B8 +ENDCHAR +STARTCHAR uni016B15 +ENCODING 92949 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +08 +18 +28 +48 +88 +68 +08 +1C +ENDCHAR +STARTCHAR uni016B16 +ENCODING 92950 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +7C +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni016B17 +ENCODING 92951 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +8C +88 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni016B18 +ENCODING 92952 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +20 +20 +20 +20 +24 +24 +18 +ENDCHAR +STARTCHAR uni016B19 +ENCODING 92953 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +04 +FC +44 +44 +44 +44 +44 +44 +C4 +ENDCHAR +STARTCHAR uni016B1A +ENCODING 92954 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +9E +A1 +81 +9F +A1 +A1 +A1 +9E +ENDCHAR +STARTCHAR uni016B1B +ENCODING 92955 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +A3 +A2 +A2 +A2 +A2 +A2 +A2 +9C +ENDCHAR +STARTCHAR uni016B1C +ENCODING 92956 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +74 +88 +9C +80 +80 +80 +88 +70 +ENDCHAR +STARTCHAR uni016B1D +ENCODING 92957 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +88 +88 +90 +A8 +A8 +C4 +84 +ENDCHAR +STARTCHAR uni016B1E +ENCODING 92958 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +8C +92 +92 +92 +92 +92 +92 +F2 +ENDCHAR +STARTCHAR uni016B1F +ENCODING 92959 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +94 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni016B20 +ENCODING 92960 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +9C +90 +90 +9C +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni016B21 +ENCODING 92961 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +FC +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni016B22 +ENCODING 92962 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni016B23 +ENCODING 92963 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +80 +80 +F8 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni016B24 +ENCODING 92964 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +03 +82 +82 +82 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni016B25 +ENCODING 92965 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +88 +88 +88 +88 +88 +FC +08 +08 +ENDCHAR +STARTCHAR uni016B26 +ENCODING 92966 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +6C +98 +88 +88 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni016B27 +ENCODING 92967 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +64 +94 +14 +1C +14 +14 +94 +64 +ENDCHAR +STARTCHAR uni016B28 +ENCODING 92968 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +04 +FC +84 +84 +84 +ENDCHAR +STARTCHAR uni016B29 +ENCODING 92969 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +44 +44 +44 +7C +44 +44 +44 +C6 +ENDCHAR +STARTCHAR uni016B2A +ENCODING 92970 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +6C +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni016B2B +ENCODING 92971 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +C6 +AA +92 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni016B2C +ENCODING 92972 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +9C +90 +90 +90 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni016B2D +ENCODING 92973 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +80 +80 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni016B2E +ENCODING 92974 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +30 +30 +48 +48 +78 +84 +84 +84 +ENDCHAR +STARTCHAR uni016B2F +ENCODING 92975 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +78 +48 +48 +30 +30 +ENDCHAR +STARTCHAR uni016B30 +ENCODING 92976 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -5 9 +BITMAP +80 +ENDCHAR +STARTCHAR uni016B31 +ENCODING 92977 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 2 -5 9 +BITMAP +E0 +40 +ENDCHAR +STARTCHAR uni016B32 +ENCODING 92978 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 1 -6 9 +BITMAP +F8 +ENDCHAR +STARTCHAR uni016B33 +ENCODING 92979 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -6 8 +BITMAP +20 +50 +88 +ENDCHAR +STARTCHAR uni016B34 +ENCODING 92980 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -6 9 +BITMAP +20 +00 +F8 +ENDCHAR +STARTCHAR uni016B35 +ENCODING 92981 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -6 9 +BITMAP +20 +20 +F8 +ENDCHAR +STARTCHAR uni016B36 +ENCODING 92982 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 1 -6 9 +BITMAP +A0 +ENDCHAR +STARTCHAR uni016B37 +ENCODING 92983 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +44 +44 +7C +44 +44 +82 +00 +10 +ENDCHAR +STARTCHAR uni016B38 +ENCODING 92984 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +10 +92 +92 +92 +82 +82 +7C +ENDCHAR +STARTCHAR uni016B39 +ENCODING 92985 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 0 +BITMAP +C0 +20 +A0 +60 +D0 +ENDCHAR +STARTCHAR uni016B3A +ENCODING 92986 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +30 +30 +10 +68 +24 +64 +54 +88 +ENDCHAR +STARTCHAR uni016B3B +ENCODING 92987 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +70 +88 +A8 +70 +A8 +88 +70 +ENDCHAR +STARTCHAR uni016B3C +ENCODING 92988 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +04 +7C +84 +FC +84 +7C +04 +ENDCHAR +STARTCHAR uni016B3D +ENCODING 92989 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +F0 +10 +10 +54 +10 +10 +10 +ENDCHAR +STARTCHAR uni016B3E +ENCODING 92990 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +78 +80 +80 +78 +08 +08 +08 +ENDCHAR +STARTCHAR uni016B3F +ENCODING 92991 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +20 +20 +A8 +20 +20 +20 +3C +ENDCHAR +STARTCHAR uni016B40 +ENCODING 92992 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 2 1 +BITMAP +80 +00 +10 +00 +00 +80 +ENDCHAR +STARTCHAR uni016B41 +ENCODING 92993 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 2 0 +BITMAP +20 +60 +A0 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni016B42 +ENCODING 92994 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +E0 +20 +20 +FC +24 +24 +24 +24 +ENDCHAR +STARTCHAR uni016B43 +ENCODING 92995 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +10 +50 +5C +50 +54 +B8 +90 +60 +ENDCHAR +STARTCHAR uni016B44 +ENCODING 92996 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +10 +10 +10 +54 +10 +10 +10 +ENDCHAR +STARTCHAR uni016B45 +ENCODING 92997 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +7C +82 +92 +8A +72 +02 +0C +10 +10 +54 +38 +10 +ENDCHAR +STARTCHAR uni016B50 +ENCODING 93008 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 2 0 +BITMAP +E0 +40 +40 +40 +40 +40 +40 +E0 +ENDCHAR +STARTCHAR uni016B51 +ENCODING 93009 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +8C +74 +04 +04 +ENDCHAR +STARTCHAR uni016B52 +ENCODING 93010 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +38 +38 +04 +84 +78 +ENDCHAR +STARTCHAR uni016B53 +ENCODING 93011 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +66 +99 +99 +99 +99 +99 +99 +81 +ENDCHAR +STARTCHAR uni016B54 +ENCODING 93012 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +1C +E4 +04 +1E +64 +84 +84 +78 +ENDCHAR +STARTCHAR uni016B55 +ENCODING 93013 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +24 +38 +24 +04 +84 +78 +ENDCHAR +STARTCHAR uni016B56 +ENCODING 93014 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +74 +8C +84 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni016B57 +ENCODING 93015 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +98 +84 +88 +90 +E0 +90 +88 +84 +ENDCHAR +STARTCHAR uni016B58 +ENCODING 93016 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +88 +90 +E0 +90 +88 +84 +88 +ENDCHAR +STARTCHAR uni016B59 +ENCODING 93017 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +88 +90 +A0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni016B5B +ENCODING 93019 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +92 +AA +AA +BA +AA +AA +AA +44 +ENDCHAR +STARTCHAR uni016B5C +ENCODING 93020 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +8C +8C +88 +58 +68 +44 +C4 +C4 +ENDCHAR +STARTCHAR uni016B5D +ENCODING 93021 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +44 +AA +AA +38 +28 +AA +AA +44 +ENDCHAR +STARTCHAR uni016B5E +ENCODING 93022 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +44 +A4 +A4 +24 +24 +A4 +B4 +48 +ENDCHAR +STARTCHAR uni016B5F +ENCODING 93023 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +28 +44 +C6 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni016B60 +ENCODING 93024 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +C4 +8C +94 +94 +A4 +A4 +C4 +84 +ENDCHAR +STARTCHAR uni016B61 +ENCODING 93025 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +8E +A8 +A8 +AE +A8 +A8 +A8 +88 +ENDCHAR +STARTCHAR uni016B63 +ENCODING 93027 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +98 +64 +24 +28 +20 +20 +20 +FC +ENDCHAR +STARTCHAR uni016B64 +ENCODING 93028 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F0 +80 +F0 +08 +04 +08 +F0 +80 +ENDCHAR +STARTCHAR uni016B65 +ENCODING 93029 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +10 +38 +10 +00 +AA +AA +AA +92 +54 +6C +6C +44 +ENDCHAR +STARTCHAR uni016B66 +ENCODING 93030 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +10 +7C +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni016B67 +ENCODING 93031 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +98 +A4 +A4 +E4 +A4 +A4 +A4 +98 +ENDCHAR +STARTCHAR uni016B68 +ENCODING 93032 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +10 +18 +14 +12 +10 +10 +FE +ENDCHAR +STARTCHAR uni016B69 +ENCODING 93033 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +10 +38 +54 +92 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni016B6A +ENCODING 93034 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +00 +FE +10 +10 +10 +92 +54 +38 +10 +ENDCHAR +STARTCHAR uni016B6B +ENCODING 93035 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +00 +FE +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni016B6C +ENCODING 93036 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +10 +10 +10 +10 +10 +10 +10 +FE +00 +10 +ENDCHAR +STARTCHAR uni016B6D +ENCODING 93037 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +8C +94 +A4 +8C +94 +A4 +C4 +84 +ENDCHAR +STARTCHAR uni016B6E +ENCODING 93038 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +8C +94 +A4 +8C +94 +A4 +C4 +87 +ENDCHAR +STARTCHAR uni016B6F +ENCODING 93039 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni016B70 +ENCODING 93040 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +80 +80 +FC +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni016B71 +ENCODING 93041 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +04 +FC +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni016B72 +ENCODING 93042 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +80 +BC +80 +80 +80 +BC +80 +ENDCHAR +STARTCHAR uni016B73 +ENCODING 93043 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +BC +A4 +A0 +FC +24 +24 +24 +24 +ENDCHAR +STARTCHAR uni016B74 +ENCODING 93044 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +98 +A4 +A4 +B0 +A0 +E4 +A4 +98 +ENDCHAR +STARTCHAR uni016B75 +ENCODING 93045 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +60 +90 +10 +7C +14 +94 +94 +64 +ENDCHAR +STARTCHAR uni016B76 +ENCODING 93046 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +98 +A4 +A4 +E0 +A0 +A0 +A0 +B0 +ENDCHAR +STARTCHAR uni016B77 +ENCODING 93047 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +44 +44 +7C +54 +54 +92 +10 +ENDCHAR +STARTCHAR uni016B7D +ENCODING 93053 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3E +00 +E7 +81 +81 +81 +A5 +99 +81 +81 +ENDCHAR +STARTCHAR uni016B7E +ENCODING 93054 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +F8 +80 +F0 +90 +FE +92 +92 +92 +ENDCHAR +STARTCHAR uni016B7F +ENCODING 93055 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +28 +AA +6C +28 +28 +6C +AA +28 +ENDCHAR +STARTCHAR uni016B80 +ENCODING 93056 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +BE +9A +A2 +9A +A2 +9A +82 +FA +ENDCHAR +STARTCHAR uni016B81 +ENCODING 93057 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +54 +6C +AA +10 +6C +AA +10 +6C +82 +ENDCHAR +STARTCHAR uni016B82 +ENCODING 93058 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +24 +24 +E7 +81 +81 +81 +A5 +99 +81 +81 +ENDCHAR +STARTCHAR uni016B83 +ENCODING 93059 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +7E +81 +24 +24 +24 +24 +24 +E7 +ENDCHAR +STARTCHAR uni016B84 +ENCODING 93060 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +A8 +A8 +A8 +FE +2A +2A +2A +2A +ENDCHAR +STARTCHAR uni016B85 +ENCODING 93061 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +82 +00 +28 +EE +AA +AA +AA +ENDCHAR +STARTCHAR uni016B86 +ENCODING 93062 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +10 +AA +44 +AA +10 +FE +10 +10 +ENDCHAR +STARTCHAR uni016B87 +ENCODING 93063 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +2C +6C +A8 +38 +24 +64 +24 +24 +ENDCHAR +STARTCHAR uni016B88 +ENCODING 93064 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +00 +FE +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni016B89 +ENCODING 93065 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +54 +54 +D6 +54 +54 +54 +FE +ENDCHAR +STARTCHAR uni016B8A +ENCODING 93066 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +E7 +81 +81 +81 +A5 +99 +81 +81 +ENDCHAR +STARTCHAR uni016B8B +ENCODING 93067 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 0 +BITMAP +10 +10 +7C +00 +E7 +81 +81 +81 +A5 +99 +81 +81 +ENDCHAR +STARTCHAR uni016B8C +ENCODING 93068 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +10 +AA +44 +BA +00 +28 +AA +6C +ENDCHAR +STARTCHAR uni016B8D +ENCODING 93069 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +7C +00 +00 +EE +28 +28 +38 +28 +28 +28 +28 +ENDCHAR +STARTCHAR uni016B8E +ENCODING 93070 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +10 +10 +7C +00 +EE +28 +28 +38 +28 +28 +28 +28 +ENDCHAR +STARTCHAR uni016B8F +ENCODING 93071 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +48 +FC +30 +FC +08 +04 +04 +ENDCHAR +STARTCHAR uni016E40 +ENCODING 93760 +BBX 14 9 1 1 +BITMAP +18F8 +1504 +5344 +9084 +9038 +7E20 +1140 +1940 +0480 +ENDCHAR +STARTCHAR uni016E41 +ENCODING 93761 +BBX 11 9 2 1 +BITMAP +8000 +C000 +B000 +8C00 +8300 +80C0 +8020 +C520 +B8C0 +ENDCHAR +STARTCHAR uni016E42 +ENCODING 93762 +BBX 12 10 2 0 +BITMAP +00E0 +2510 +2D10 +5490 +4420 +A040 +1080 +1100 +1200 +1C00 +ENDCHAR +STARTCHAR uni016E43 +ENCODING 93763 +BBX 13 10 2 0 +BITMAP +0F00 +7100 +8230 +8208 +BFF0 +9400 +7400 +0800 +7C80 +3300 +ENDCHAR +STARTCHAR uni016E44 +ENCODING 93764 +BBX 12 9 2 1 +BITMAP +0400 +0400 +0400 +04E0 +F510 +94D0 +2410 +4420 +7FC0 +ENDCHAR +STARTCHAR uni016E45 +ENCODING 93765 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 1 +BITMAP +1E +90 +FE +92 +02 +02 +02 +02 +44 +A4 +78 +ENDCHAR +STARTCHAR uni016E46 +ENCODING 93766 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 1 +BITMAP +10 +10 +FE +92 +54 +44 +28 +28 +10 +ENDCHAR +STARTCHAR uni016E47 +ENCODING 93767 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +07 +0A +12 +14 +24 +C2 +9A +A2 +9C +ENDCHAR +STARTCHAR uni016E48 +ENCODING 93768 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +70 +88 +84 +04 +1E +64 +44 +48 +28 +28 +28 +10 +ENDCHAR +STARTCHAR uni016E49 +ENCODING 93769 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +18 +24 +70 +AC +A2 +92 +91 +51 +09 +09 +31 +4A +36 +ENDCHAR +STARTCHAR uni016E4A +ENCODING 93770 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 1 +BITMAP +7C +82 +80 +A8 +7C +2A +02 +82 +7C +ENDCHAR +STARTCHAR uni016E4B +ENCODING 93771 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 1 +BITMAP +10 +10 +7C +92 +90 +80 +40 +20 +10 +90 +60 +ENDCHAR +STARTCHAR uni016E4C +ENCODING 93772 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +3F +51 +89 +A9 +49 +0A +54 +98 +70 +ENDCHAR +STARTCHAR uni016E4D +ENCODING 93773 +BBX 13 9 1 1 +BITMAP +7138 +8AD0 +0410 +0A20 +1220 +0220 +02F0 +2520 +18C0 +ENDCHAR +STARTCHAR uni016E4E +ENCODING 93774 +BBX 11 11 2 1 +BITMAP +0080 +0500 +0200 +0500 +0880 +1440 +2200 +1100 +4080 +AE40 +71E0 +ENDCHAR +STARTCHAR uni016E4F +ENCODING 93775 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3F +20 +92 +BA +D6 +20 +20 +44 +4A +3C +ENDCHAR +STARTCHAR uni016E50 +ENCODING 93776 +BBX 12 10 2 0 +BITMAP +7000 +8910 +0EE0 +7820 +4840 +5040 +5820 +2420 +2440 +1F80 +ENDCHAR +STARTCHAR uni016E51 +ENCODING 93777 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +08 +18 +28 +4A +FC +10 +1C +22 +02 +22 +1C +ENDCHAR +STARTCHAR uni016E52 +ENCODING 93778 +BBX 12 11 2 0 +BITMAP +71E0 +8A10 +8490 +0460 +0C00 +1400 +0C00 +4400 +A800 +8800 +7000 +ENDCHAR +STARTCHAR uni016E53 +ENCODING 93779 +BBX 12 11 2 0 +BITMAP +71E0 +8A10 +8410 +0420 +1F00 +0400 +1F00 +4460 +A490 +8A10 +71E0 +ENDCHAR +STARTCHAR uni016E54 +ENCODING 93780 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +08 +58 +28 +58 +4C +88 +90 +C0 +2C +14 +08 +ENDCHAR +STARTCHAR uni016E55 +ENCODING 93781 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 1 +BITMAP +42 +7C +44 +FC +84 +84 +E8 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni016E56 +ENCODING 93782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +0C +10 +10 +1E +34 +04 +08 +49 +A9 +92 +6C +ENDCHAR +STARTCHAR uni016E57 +ENCODING 93783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +F0 +88 +84 +E4 +02 +82 +42 +24 +04 +88 +70 +ENDCHAR +STARTCHAR uni016E58 +ENCODING 93784 +BBX 11 10 2 1 +BITMAP +0400 +0400 +3F80 +4440 +8420 +8020 +8120 +8A20 +4A40 +3180 +ENDCHAR +STARTCHAR uni016E59 +ENCODING 93785 +BBX 11 11 2 0 +BITMAP +9F80 +E040 +8020 +5220 +5220 +51C0 +2000 +2000 +2000 +1000 +1000 +ENDCHAR +STARTCHAR uni016E5A +ENCODING 93786 +BBX 11 11 2 0 +BITMAP +3380 +4C40 +8420 +8520 +8320 +4040 +4040 +2840 +2C80 +1280 +1100 +ENDCHAR +STARTCHAR uni016E5B +ENCODING 93787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +38 +44 +82 +82 +02 +02 +02 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni016E5C +ENCODING 93788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +7C +82 +80 +98 +94 +78 +10 +10 +92 +BA +C6 +ENDCHAR +STARTCHAR uni016E5D +ENCODING 93789 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +3E +43 +85 +4D +2A +10 +10 +12 +11 +A9 +46 +ENDCHAR +STARTCHAR uni016E5E +ENCODING 93790 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +62 +94 +14 +24 +38 +4C +0A +0A +12 +54 +28 +ENDCHAR +STARTCHAR uni016E5F +ENCODING 93791 +BBX 12 12 2 -1 +BITMAP +0300 +0400 +0400 +0400 +0400 +0400 +0810 +6910 +9A10 +9620 +65C0 +0800 +ENDCHAR +STARTCHAR uni016E60 +ENCODING 93792 +BBX 10 8 3 0 +BITMAP +7780 +8840 +8840 +0440 +0380 +2080 +2100 +1E00 +ENDCHAR +STARTCHAR uni016E61 +ENCODING 93793 +BBX 12 8 2 1 +BITMAP +1F80 +6060 +8010 +8010 +8010 +8810 +4920 +30C0 +ENDCHAR +STARTCHAR uni016E62 +ENCODING 93794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +04 +4A +4A +A4 +24 +28 +28 +30 +20 +ENDCHAR +STARTCHAR uni016E63 +ENCODING 93795 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 -1 +BITMAP +78 +84 +92 +92 +AC +48 +14 +A2 +40 +ENDCHAR +STARTCHAR uni016E64 +ENCODING 93796 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +0C +12 +10 +50 +B6 +B9 +35 +31 +51 +59 +E6 +ENDCHAR +STARTCHAR uni016E65 +ENCODING 93797 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +70 +88 +08 +68 +90 +68 +08 +10 +10 +20 +40 +ENDCHAR +STARTCHAR uni016E66 +ENCODING 93798 +BBX 9 12 3 0 +BITMAP +0800 +0800 +0800 +FF80 +8080 +4100 +4100 +2200 +2200 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uni016E67 +ENCODING 93799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +07 +09 +12 +22 +44 +44 +88 +88 +28 +48 +30 +ENDCHAR +STARTCHAR uni016E68 +ENCODING 93800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +70 +88 +64 +0C +34 +44 +48 +48 +50 +50 +60 +40 +ENDCHAR +STARTCHAR uni016E69 +ENCODING 93801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +0C +10 +10 +16 +12 +12 +12 +12 +12 +24 +38 +20 +40 +80 +ENDCHAR +STARTCHAR uni016E6A +ENCODING 93802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +7C +82 +90 +7C +12 +02 +82 +7C +ENDCHAR +STARTCHAR uni016E6B +ENCODING 93803 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +60 +60 +00 +60 +90 +80 +40 +20 +90 +90 +60 +ENDCHAR +STARTCHAR uni016E6C +ENCODING 93804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +10 +10 +28 +FE +A8 +68 +24 +54 +4C +44 +ENDCHAR +STARTCHAR uni016E6D +ENCODING 93805 +BBX 11 8 2 0 +BITMAP +71C0 +8A20 +8420 +4040 +2080 +1100 +0A00 +0400 +ENDCHAR +STARTCHAR uni016E6E +ENCODING 93806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +04 +04 +1E +05 +08 +48 +A8 +88 +70 +ENDCHAR +STARTCHAR uni016E6F +ENCODING 93807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +3C +42 +80 +9C +A2 +82 +42 +3C +ENDCHAR +STARTCHAR uni016E70 +ENCODING 93808 +BBX 11 8 2 0 +BITMAP +6040 +9080 +9360 +3C40 +1020 +2220 +2520 +43C0 +ENDCHAR +STARTCHAR uni016E71 +ENCODING 93809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +1E +64 +08 +14 +04 +64 +88 +70 +ENDCHAR +STARTCHAR uni016E72 +ENCODING 93810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +70 +88 +84 +1C +24 +1C +84 +78 +ENDCHAR +STARTCHAR uni016E73 +ENCODING 93811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +6C +92 +10 +7C +10 +14 +92 +EC +ENDCHAR +STARTCHAR uni016E74 +ENCODING 93812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +08 +18 +28 +48 +98 +20 +40 +40 +58 +44 +38 +ENDCHAR +STARTCHAR uni016E75 +ENCODING 93813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +1E +22 +44 +FE +48 +08 +88 +70 +ENDCHAR +STARTCHAR uni016E76 +ENCODING 93814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +60 +90 +80 +80 +58 +68 +88 +10 +20 +20 +40 +ENDCHAR +STARTCHAR uni016E77 +ENCODING 93815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +10 +20 +00 +70 +88 +04 +04 +04 +04 +88 +70 +ENDCHAR +STARTCHAR uni016E78 +ENCODING 93816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +10 +10 +7C +92 +82 +82 +AA +44 +ENDCHAR +STARTCHAR uni016E79 +ENCODING 93817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +F8 +84 +84 +B8 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni016E7A +ENCODING 93818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +30 +30 +00 +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni016E7B +ENCODING 93819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +70 +88 +88 +08 +08 +08 +88 +70 +ENDCHAR +STARTCHAR uni016E7C +ENCODING 93820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +08 +54 +94 +4E +24 +24 +28 +10 +ENDCHAR +STARTCHAR uni016E7D +ENCODING 93821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +38 +44 +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni016E7E +ENCODING 93822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +70 +88 +08 +10 +60 +30 +08 +08 +88 +90 +60 +ENDCHAR +STARTCHAR uni016E7F +ENCODING 93823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +10 +10 +20 +20 +28 +48 +7E +89 +ENDCHAR +STARTCHAR uni016E80 +ENCODING 93824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +30 +48 +84 +84 +84 +FC +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni016E81 +ENCODING 93825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +20 +20 +20 +FC +24 +28 +28 +30 +30 +20 +ENDCHAR +STARTCHAR uni016E82 +ENCODING 93826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +10 +30 +30 +50 +50 +90 +FC +10 +10 +10 +ENDCHAR +STARTCHAR uni016E83 +ENCODING 93827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +20 +30 +30 +28 +28 +24 +FC +20 +20 +20 +ENDCHAR +STARTCHAR uni016E84 +ENCODING 93828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +FE +82 +82 +54 +44 +28 +28 +10 +ENDCHAR +STARTCHAR uni016E85 +ENCODING 93829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +70 +88 +08 +10 +7C +10 +F8 +20 +20 +64 +98 +ENDCHAR +STARTCHAR uni016E86 +ENCODING 93830 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +60 +90 +80 +44 +28 +FC +10 +20 +40 +A0 +40 +ENDCHAR +STARTCHAR uni016E87 +ENCODING 93831 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +92 +54 +38 +10 +ENDCHAR +STARTCHAR uni016E88 +ENCODING 93832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni016E89 +ENCODING 93833 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +22 +26 +26 +4A +4A +52 +92 +82 +FE +ENDCHAR +STARTCHAR uni016E8A +ENCODING 93834 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +7E +82 +04 +04 +08 +3E +08 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni016E8B +ENCODING 93835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +48 +48 +48 +48 +48 +FC +48 +48 +48 +48 +48 +ENDCHAR +STARTCHAR uni016E8C +ENCODING 93836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +48 +48 +48 +48 +FC +48 +FC +48 +48 +48 +48 +ENDCHAR +STARTCHAR uni016E8D +ENCODING 93837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +92 +92 +92 +92 +92 +FE +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni016E8E +ENCODING 93838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +18 +24 +20 +10 +50 +30 +98 +8C +4A +48 +30 +ENDCHAR +STARTCHAR uni016E8F +ENCODING 93839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +10 +10 +38 +7C +54 +92 +FE +92 +54 +ENDCHAR +STARTCHAR uni016E90 +ENCODING 93840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +84 +8A +8A +8C +98 +A8 +C8 +C8 +A8 +88 +90 +ENDCHAR +STARTCHAR uni016E91 +ENCODING 93841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +0C +12 +12 +08 +38 +0E +08 +74 +8C +84 +48 +ENDCHAR +STARTCHAR uni016E92 +ENCODING 93842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -1 +BITMAP +04 +0A +0A +0C +08 +3E +08 +3E +08 +68 +88 +70 +ENDCHAR +STARTCHAR uni016E93 +ENCODING 93843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +3C +42 +84 +80 +F8 +90 +A0 +80 +84 +42 +3C +ENDCHAR +STARTCHAR uni016E94 +ENCODING 93844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +90 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni016E95 +ENCODING 93845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +10 +30 +50 +90 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni016E96 +ENCODING 93846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +80 +C0 +A0 +90 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni016E97 +ENCODING 93847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 -2 +BITMAP +80 +40 +20 +ENDCHAR +STARTCHAR uni016E98 +ENCODING 93848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 -2 +BITMAP +90 +48 +24 +ENDCHAR +STARTCHAR uni016E99 +ENCODING 93849 +BBX 13 8 1 0 +BITMAP +4420 +4A50 +8A50 +8A50 +8A50 +8A50 +8420 +7BD8 +ENDCHAR +STARTCHAR uni016E9A +ENCODING 93850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 -2 +BITMAP +80 +80 +80 +80 +F8 +00 +60 +60 +ENDCHAR +STARTCHAR uni016F00 +ENCODING 93952 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +04 +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni016F01 +ENCODING 93953 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +0C +14 +14 +0C +04 +04 +FC +ENDCHAR +STARTCHAR uni016F02 +ENCODING 93954 +BBX 6 10 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +FC +ENDCHAR +STARTCHAR uni016F03 +ENCODING 93955 +BBX 7 10 0 0 +BITMAP +02 +02 +02 +02 +02 +02 +62 +92 +92 +7E +ENDCHAR +STARTCHAR uni016F04 +ENCODING 93956 +BBX 6 10 1 0 +BITMAP +F0 +08 +04 +04 +04 +04 +04 +04 +08 +F0 +ENDCHAR +STARTCHAR uni016F05 +ENCODING 93957 +BBX 6 10 1 0 +BITMAP +F0 +08 +04 +0C +14 +14 +0C +04 +08 +F0 +ENDCHAR +STARTCHAR uni016F06 +ENCODING 93958 +BBX 7 6 0 0 +BITMAP +7C +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni016F07 +ENCODING 93959 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni016F08 +ENCODING 93960 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +44 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni016F09 +ENCODING 93961 +BBX 8 10 0 0 +BITMAP +41 +41 +41 +22 +62 +A2 +94 +74 +08 +08 +ENDCHAR +STARTCHAR uni016F0A +ENCODING 93962 +BBX 7 10 0 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni016F0B +ENCODING 93963 +BBX 7 10 0 0 +BITMAP +FE +10 +10 +30 +50 +50 +30 +10 +10 +10 +ENDCHAR +STARTCHAR uni016F0C +ENCODING 93964 +BBX 7 10 0 0 +BITMAP +FE +12 +12 +12 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni016F0D +ENCODING 93965 +BBX 7 10 0 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni016F0E +ENCODING 93966 +BBX 7 10 0 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +1E +ENDCHAR +STARTCHAR uni016F0F +ENCODING 93967 +BBX 7 10 0 0 +BITMAP +FE +10 +10 +30 +50 +50 +30 +10 +10 +1E +ENDCHAR +STARTCHAR uni016F10 +ENCODING 93968 +BBX 6 10 1 0 +BITMAP +3C +40 +80 +80 +80 +80 +80 +80 +40 +3C +ENDCHAR +STARTCHAR uni016F11 +ENCODING 93969 +BBX 8 10 0 0 +BITMAP +0F +10 +20 +60 +A0 +A0 +60 +20 +10 +0F +ENDCHAR +STARTCHAR uni016F12 +ENCODING 93970 +BBX 7 10 0 0 +BITMAP +FE +20 +40 +40 +40 +40 +40 +40 +20 +1E +ENDCHAR +STARTCHAR uni016F13 +ENCODING 93971 +BBX 7 6 0 0 +BITMAP +82 +82 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni016F14 +ENCODING 93972 +BBX 7 10 1 0 +BITMAP +3C +52 +92 +8C +80 +80 +80 +80 +40 +3C +ENDCHAR +STARTCHAR uni016F15 +ENCODING 93973 +BBX 8 10 0 0 +BITMAP +0E +15 +25 +62 +A0 +A0 +60 +20 +10 +0E +ENDCHAR +STARTCHAR uni016F16 +ENCODING 93974 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni016F17 +ENCODING 93975 +BBX 7 10 0 0 +BITMAP +20 +20 +20 +60 +A0 +A0 +60 +20 +20 +3E +ENDCHAR +STARTCHAR uni016F18 +ENCODING 93976 +BBX 7 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +8C +92 +92 +FC +ENDCHAR +STARTCHAR uni016F19 +ENCODING 93977 +BBX 8 10 0 0 +BITMAP +20 +20 +20 +60 +A0 +A0 +66 +29 +29 +3E +ENDCHAR +STARTCHAR uni016F1A +ENCODING 93978 +BBX 7 10 0 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +FE +ENDCHAR +STARTCHAR uni016F1B +ENCODING 93979 +BBX 8 10 0 0 +BITMAP +08 +08 +74 +94 +A2 +62 +22 +41 +41 +7F +ENDCHAR +STARTCHAR uni016F1C +ENCODING 93980 +BBX 7 10 0 0 +BITMAP +10 +10 +28 +28 +44 +7C +44 +82 +82 +FE +ENDCHAR +STARTCHAR uni016F1D +ENCODING 93981 +BBX 8 10 0 0 +BITMAP +08 +08 +74 +94 +A2 +7E +22 +41 +41 +7F +ENDCHAR +STARTCHAR uni016F1E +ENCODING 93982 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni016F1F +ENCODING 93983 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +0C +14 +14 +0C +04 +04 +FC +ENDCHAR +STARTCHAR uni016F20 +ENCODING 93984 +BBX 6 10 1 0 +BITMAP +FC +10 +10 +10 +10 +10 +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uni016F21 +ENCODING 93985 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +F0 +ENDCHAR +STARTCHAR uni016F22 +ENCODING 93986 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +30 +50 +50 +30 +10 +10 +F0 +ENDCHAR +STARTCHAR uni016F23 +ENCODING 93987 +BBX 7 10 1 0 +BITMAP +3C +40 +80 +80 +80 +80 +8C +92 +52 +3C +ENDCHAR +STARTCHAR uni016F24 +ENCODING 93988 +BBX 8 10 0 0 +BITMAP +0E +10 +20 +60 +A0 +A0 +62 +25 +15 +0E +ENDCHAR +STARTCHAR uni016F25 +ENCODING 93989 +BBX 7 6 0 0 +BITMAP +8C +92 +8E +82 +82 +7C +ENDCHAR +STARTCHAR uni016F26 +ENCODING 93990 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni016F27 +ENCODING 93991 +BBX 7 10 0 0 +BITMAP +7E +92 +92 +62 +02 +02 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni016F28 +ENCODING 93992 +BBX 1 10 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni016F29 +ENCODING 93993 +BBX 3 10 2 0 +BITMAP +20 +20 +20 +60 +A0 +A0 +60 +20 +20 +20 +ENDCHAR +STARTCHAR uni016F2A +ENCODING 93994 +BBX 6 10 1 0 +BITMAP +F0 +10 +10 +10 +10 +10 +10 +10 +10 +FC +ENDCHAR +STARTCHAR uni016F2B +ENCODING 93995 +BBX 6 10 1 0 +BITMAP +F0 +10 +10 +30 +50 +50 +30 +10 +10 +FC +ENDCHAR +STARTCHAR uni016F2C +ENCODING 93996 +BBX 5 10 2 0 +BITMAP +70 +88 +80 +80 +60 +80 +80 +80 +88 +70 +ENDCHAR +STARTCHAR uni016F2D +ENCODING 93997 +BBX 7 10 0 0 +BITMAP +1C +22 +20 +60 +98 +60 +20 +20 +22 +1C +ENDCHAR +STARTCHAR uni016F2E +ENCODING 93998 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni016F2F +ENCODING 93999 +BBX 7 10 0 0 +BITMAP +3E +20 +20 +60 +A0 +A0 +60 +20 +20 +3E +ENDCHAR +STARTCHAR uni016F30 +ENCODING 94000 +BBX 6 10 1 0 +BITMAP +FC +20 +20 +20 +20 +20 +20 +20 +20 +3C +ENDCHAR +STARTCHAR uni016F31 +ENCODING 94001 +BBX 6 10 1 0 +BITMAP +FC +84 +84 +84 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni016F32 +ENCODING 94002 +BBX 6 10 1 0 +BITMAP +3C +20 +20 +20 +20 +20 +20 +20 +20 +FC +ENDCHAR +STARTCHAR uni016F33 +ENCODING 94003 +BBX 5 10 1 0 +BITMAP +08 +08 +08 +08 +08 +08 +08 +88 +88 +70 +ENDCHAR +STARTCHAR uni016F34 +ENCODING 94004 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +08 +08 +08 +10 +10 +20 +ENDCHAR +STARTCHAR uni016F35 +ENCODING 94005 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +90 +88 +88 +84 +84 +ENDCHAR +STARTCHAR uni016F36 +ENCODING 94006 +BBX 7 10 0 0 +BITMAP +3C +22 +22 +62 +BC +A8 +64 +24 +22 +22 +ENDCHAR +STARTCHAR uni016F37 +ENCODING 94007 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +F8 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni016F38 +ENCODING 94008 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +F8 +20 +60 +A0 +A0 +60 +20 +ENDCHAR +STARTCHAR uni016F39 +ENCODING 94009 +BBX 5 10 1 0 +BITMAP +20 +20 +20 +F8 +20 +20 +20 +20 +20 +38 +ENDCHAR +STARTCHAR uni016F3A +ENCODING 94010 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni016F3B +ENCODING 94011 +BBX 6 10 1 0 +BITMAP +FC +08 +10 +20 +38 +04 +04 +04 +8C +78 +ENDCHAR +STARTCHAR uni016F3C +ENCODING 94012 +BBX 6 10 1 0 +BITMAP +FC +08 +18 +24 +38 +04 +04 +04 +8C +78 +ENDCHAR +STARTCHAR uni016F3D +ENCODING 94013 +BBX 7 10 0 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni016F3E +ENCODING 94014 +BBX 8 10 0 0 +BITMAP +08 +08 +74 +94 +A2 +62 +22 +41 +41 +41 +ENDCHAR +STARTCHAR uni016F3F +ENCODING 94015 +BBX 6 7 1 0 +BITMAP +C0 +30 +08 +04 +08 +30 +C0 +ENDCHAR +STARTCHAR uni016F40 +ENCODING 94016 +BBX 7 10 0 0 +BITMAP +10 +10 +28 +28 +44 +7C +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni016F41 +ENCODING 94017 +BBX 8 10 0 0 +BITMAP +08 +08 +74 +94 +A2 +7E +22 +41 +41 +41 +ENDCHAR +STARTCHAR uni016F42 +ENCODING 94018 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni016F43 +ENCODING 94019 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni016F44 +ENCODING 94020 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +44 +68 +90 +90 +70 +10 +10 +ENDCHAR +STARTCHAR uni016F50 +ENCODING 94032 +BBX 5 10 2 0 +BITMAP +38 +40 +80 +80 +80 +80 +80 +80 +40 +38 +ENDCHAR +STARTCHAR uni016F51 +ENCODING 94033 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 5 -5 8 +BITMAP +C0 +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uni016F52 +ENCODING 94034 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 5 -5 8 +BITMAP +40 +80 +80 +C0 +C0 +ENDCHAR +STARTCHAR uni016F53 +ENCODING 94035 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 5 -5 0 +BITMAP +C0 +C0 +40 +40 +80 +ENDCHAR +STARTCHAR uni016F54 +ENCODING 94036 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -6 0 +BITMAP +F0 +ENDCHAR +STARTCHAR uni016F55 +ENCODING 94037 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 0 +BITMAP +E4 +24 +24 +24 +18 +ENDCHAR +STARTCHAR uni016F56 +ENCODING 94038 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 0 +BITMAP +90 +90 +F0 +90 +60 +ENDCHAR +STARTCHAR uni016F57 +ENCODING 94039 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 0 +BITMAP +F0 +20 +40 +48 +30 +ENDCHAR +STARTCHAR uni016F58 +ENCODING 94040 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 0 +BITMAP +F0 +20 +30 +28 +10 +ENDCHAR +STARTCHAR uni016F59 +ENCODING 94041 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 0 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni016F5A +ENCODING 94042 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -7 0 +BITMAP +7C +90 +90 +60 +ENDCHAR +STARTCHAR uni016F5B +ENCODING 94043 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 -7 0 +BITMAP +20 +20 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni016F5C +ENCODING 94044 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -6 0 +BITMAP +80 +80 +E0 +10 +10 +E0 +ENDCHAR +STARTCHAR uni016F5D +ENCODING 94045 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 0 +BITMAP +70 +80 +80 +70 +ENDCHAR +STARTCHAR uni016F5E +ENCODING 94046 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -6 0 +BITMAP +60 +80 +60 +80 +60 +ENDCHAR +STARTCHAR uni016F5F +ENCODING 94047 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 0 +BITMAP +60 +80 +48 +94 +78 +ENDCHAR +STARTCHAR uni016F60 +ENCODING 94048 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -6 0 +BITMAP +70 +80 +80 +70 +10 +10 +ENDCHAR +STARTCHAR uni016F61 +ENCODING 94049 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 0 +BITMAP +60 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni016F62 +ENCODING 94050 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 0 +BITMAP +60 +90 +90 +90 +9C +ENDCHAR +STARTCHAR uni016F63 +ENCODING 94051 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -8 -2 +BITMAP +60 +90 +90 +90 +98 +12 +0C +ENDCHAR +STARTCHAR uni016F64 +ENCODING 94052 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -8 -2 +BITMAP +60 +90 +90 +90 +9C +0A +04 +ENDCHAR +STARTCHAR uni016F65 +ENCODING 94053 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -8 0 +BITMAP +6C +92 +92 +92 +8C +ENDCHAR +STARTCHAR uni016F66 +ENCODING 94054 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 0 +BITMAP +FC +00 +00 +00 +FC +ENDCHAR +STARTCHAR uni016F67 +ENCODING 94055 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -8 0 +BITMAP +6C +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni016F68 +ENCODING 94056 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -8 0 +BITMAP +62 +92 +92 +92 +8C +ENDCHAR +STARTCHAR uni016F69 +ENCODING 94057 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 0 +BITMAP +60 +90 +98 +94 +98 +ENDCHAR +STARTCHAR uni016F6A +ENCODING 94058 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 0 +BITMAP +90 +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni016F6B +ENCODING 94059 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 0 +BITMAP +9C +90 +90 +90 +60 +ENDCHAR +STARTCHAR uni016F6C +ENCODING 94060 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 -8 0 +BITMAP +9E +94 +94 +95 +62 +ENDCHAR +STARTCHAR uni016F6D +ENCODING 94061 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 -8 0 +BITMAP +9E +94 +96 +95 +62 +ENDCHAR +STARTCHAR uni016F6E +ENCODING 94062 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -8 0 +BITMAP +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni016F6F +ENCODING 94063 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -8 0 +BITMAP +90 +90 +92 +92 +6C +ENDCHAR +STARTCHAR uni016F70 +ENCODING 94064 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -7 0 +BITMAP +90 +90 +98 +94 +68 +ENDCHAR +STARTCHAR uni016F71 +ENCODING 94065 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 0 +BITMAP +E0 +10 +10 +E0 +ENDCHAR +STARTCHAR uni016F72 +ENCODING 94066 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 0 +BITMAP +60 +90 +70 +10 +60 +ENDCHAR +STARTCHAR uni016F73 +ENCODING 94067 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -5 0 +BITMAP +E0 +10 +10 +E0 +80 +80 +ENDCHAR +STARTCHAR uni016F74 +ENCODING 94068 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -6 0 +BITMAP +10 +10 +70 +80 +80 +70 +ENDCHAR +STARTCHAR uni016F75 +ENCODING 94069 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -6 0 +BITMAP +E0 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni016F76 +ENCODING 94070 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 0 +BITMAP +60 +90 +90 +10 +10 +ENDCHAR +STARTCHAR uni016F77 +ENCODING 94071 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 5 -5 0 +BITMAP +E0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni016F78 +ENCODING 94072 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 0 +BITMAP +60 +90 +90 +80 +80 +ENDCHAR +STARTCHAR uni016F79 +ENCODING 94073 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 5 -5 0 +BITMAP +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni016F7A +ENCODING 94074 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 0 +BITMAP +80 +80 +90 +90 +60 +ENDCHAR +STARTCHAR uni016F7B +ENCODING 94075 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 0 +BITMAP +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni016F7C +ENCODING 94076 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -6 -2 +BITMAP +60 +90 +90 +70 +10 +10 +ENDCHAR +STARTCHAR uni016F7D +ENCODING 94077 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 0 +BITMAP +20 +40 +80 +90 +60 +ENDCHAR +STARTCHAR uni016F7E +ENCODING 94078 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 5 -6 0 +BITMAP +60 +80 +E0 +90 +60 +ENDCHAR +STARTCHAR uni016F8F +ENCODING 94095 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 16 -16 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0501 +803E +1049 +8008 +1049 +8000 +0501 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni016F90 +ENCODING 94096 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 16 -16 -2 +BITMAP +AAAA +0001 +807C +0011 +8010 +0511 +8000 +1041 +8000 +1041 +8000 +0501 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni016F91 +ENCODING 94097 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 16 -16 -2 +BITMAP +AAAA +07C1 +8100 +0101 +8000 +0281 +8000 +0821 +8000 +0821 +8000 +0281 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni016F92 +ENCODING 94098 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 16 16 -16 -2 +BITMAP +AAAA +0001 +8000 +0001 +8280 +0001 +8820 +0001 +8820 +0001 +8280 +0001 +87C0 +0101 +8100 +5555 +ENDCHAR +STARTCHAR uni016F93 +ENCODING 94099 +BBX 5 5 5 0 +BITMAP +F8 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni016F94 +ENCODING 94100 +BBX 4 5 6 0 +BITMAP +F0 +20 +70 +10 +E0 +ENDCHAR +STARTCHAR uni016F95 +ENCODING 94101 +BBX 5 5 5 0 +BITMAP +88 +D8 +A8 +88 +88 +ENDCHAR +STARTCHAR uni016F96 +ENCODING 94102 +BBX 4 5 6 0 +BITMAP +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni016F97 +ENCODING 94103 +BBX 4 5 6 0 +BITMAP +70 +80 +60 +10 +E0 +ENDCHAR +STARTCHAR uni016F98 +ENCODING 94104 +BBX 4 5 6 0 +BITMAP +80 +80 +80 +80 +F0 +ENDCHAR +STARTCHAR uni016F99 +ENCODING 94105 +BBX 4 5 6 0 +BITMAP +40 +E0 +40 +40 +30 +ENDCHAR +STARTCHAR uni016F9A +ENCODING 94106 +BBX 7 5 4 0 +BITMAP +60 +92 +92 +92 +0C +ENDCHAR +STARTCHAR uni016F9B +ENCODING 94107 +BBX 7 5 4 0 +BITMAP +6C +92 +92 +92 +54 +ENDCHAR +STARTCHAR uni016F9C +ENCODING 94108 +BBX 5 6 5 0 +BITMAP +40 +20 +10 +78 +90 +60 +ENDCHAR +STARTCHAR uni016F9D +ENCODING 94109 +BBX 4 5 6 0 +BITMAP +60 +90 +E0 +80 +40 +ENDCHAR +STARTCHAR uni016F9E +ENCODING 94110 +BBX 5 6 5 0 +BITMAP +30 +48 +F0 +40 +20 +10 +ENDCHAR +STARTCHAR uni016F9F +ENCODING 94111 +BBX 7 5 4 0 +BITMAP +54 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni016FE0 +ENCODING 94176 +BBX 10 11 3 -1 +BITMAP +7FC0 +0080 +0300 +3C00 +0E00 +0300 +0080 +0300 +0C00 +3000 +C000 +ENDCHAR +STARTCHAR uni016FE1 +ENCODING 94177 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +44 +20 +14 +8C +14 +14 +24 +24 +44 +04 +08 +ENDCHAR +STARTCHAR uni01B000 +ENCODING 110592 +BBX 7 13 5 -1 +BITMAP +C0 +30 +06 +0A +32 +C2 +04 +04 +08 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni01B001 +ENCODING 110593 +BBX 12 13 2 -1 +BITMAP +8000 +4000 +4000 +8000 +87C0 +8820 +9010 +A010 +A010 +A010 +A0E0 +5100 +31E0 +ENDCHAR +STARTCHAR uni01BC00 +ENCODING 113664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 5 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni01BC01 +ENCODING 113665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 5 2 3 +BITMAP +80 +80 +C0 +40 +40 +ENDCHAR +STARTCHAR uni01BC02 +ENCODING 113666 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 4 3 4 +BITMAP +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01BC03 +ENCODING 113667 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 1 2 5 +BITMAP +F0 +ENDCHAR +STARTCHAR uni01BC04 +ENCODING 113668 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 4 +BITMAP +80 +40 +20 +10 +ENDCHAR +STARTCHAR uni01BC05 +ENCODING 113669 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 2 +BITMAP +10 +A0 +C0 +E0 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni01BC06 +ENCODING 113670 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 2 +BITMAP +70 +30 +50 +80 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni01BC07 +ENCODING 113671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 8 3 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01BC08 +ENCODING 113672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 1 0 5 +BITMAP +FE +ENDCHAR +STARTCHAR uni01BC09 +ENCODING 113673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 2 +BITMAP +80 +40 +20 +10 +08 +04 +02 +ENDCHAR +STARTCHAR uni01BC0A +ENCODING 113674 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 2 +BITMAP +10 +A0 +C2 +E4 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni01BC0B +ENCODING 113675 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 2 +BITMAP +70 +30 +52 +84 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni01BC0C +ENCODING 113676 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 12 3 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01BC0D +ENCODING 113677 +BBX 12 1 2 5 +BITMAP +FFF0 +ENDCHAR +STARTCHAR uni01BC0E +ENCODING 113678 +BBX 12 12 2 0 +BITMAP +8000 +4000 +2000 +1000 +0800 +0400 +0200 +0100 +0080 +0040 +0020 +0010 +ENDCHAR +STARTCHAR uni01BC0F +ENCODING 113679 +BBX 12 12 2 0 +BITMAP +0010 +0020 +0840 +5080 +6100 +7200 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni01BC10 +ENCODING 113680 +BBX 12 12 2 0 +BITMAP +0010 +0020 +3840 +1880 +2900 +4200 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni01BC11 +ENCODING 113681 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 5 +BITMAP +60 +F0 +ENDCHAR +STARTCHAR uni01BC12 +ENCODING 113682 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 2 2 4 +BITMAP +F0 +60 +ENDCHAR +STARTCHAR uni01BC13 +ENCODING 113683 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 0 5 +BITMAP +30 +FE +ENDCHAR +STARTCHAR uni01BC14 +ENCODING 113684 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +10 +60 +40 +84 +28 +30 +38 +ENDCHAR +STARTCHAR uni01BC15 +ENCODING 113685 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 2 +BITMAP +10 +A0 +C2 +E4 +08 +18 +38 +40 +80 +ENDCHAR +STARTCHAR uni01BC16 +ENCODING 113686 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +10 +60 +40 +9C +0C +14 +20 +ENDCHAR +STARTCHAR uni01BC17 +ENCODING 113687 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 1 +BITMAP +70 +30 +50 +80 +08 +10 +30 +40 +ENDCHAR +STARTCHAR uni01BC18 +ENCODING 113688 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +70 +30 +50 +82 +04 +0C +10 +20 +60 +80 +ENDCHAR +STARTCHAR uni01BC19 +ENCODING 113689 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +18 +20 +40 +40 +80 +80 +80 +40 +40 +20 +18 +ENDCHAR +STARTCHAR uni01BC1A +ENCODING 113690 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +C0 +20 +10 +10 +08 +08 +08 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni01BC1B +ENCODING 113691 +BBX 11 5 2 4 +BITMAP +0E00 +3180 +4040 +8020 +8020 +ENDCHAR +STARTCHAR uni01BC1C +ENCODING 113692 +BBX 11 5 2 2 +BITMAP +8020 +8020 +4040 +3180 +0E00 +ENDCHAR +STARTCHAR uni01BC1D +ENCODING 113693 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +06 +08 +10 +10 +20 +F8 +20 +10 +10 +08 +06 +ENDCHAR +STARTCHAR uni01BC1E +ENCODING 113694 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +C0 +20 +10 +10 +08 +3E +08 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni01BC1F +ENCODING 113695 +BBX 11 7 2 4 +BITMAP +0400 +0400 +0E00 +3580 +4440 +8020 +8020 +ENDCHAR +STARTCHAR uni01BC20 +ENCODING 113696 +BBX 11 7 2 0 +BITMAP +8020 +8020 +4440 +3580 +0E00 +0400 +0400 +ENDCHAR +STARTCHAR uni01BC21 +ENCODING 113697 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +18 +20 +40 +40 +80 +98 +98 +80 +40 +40 +20 +18 +ENDCHAR +STARTCHAR uni01BC22 +ENCODING 113698 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +C0 +20 +10 +10 +08 +C8 +C8 +08 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni01BC23 +ENCODING 113699 +BBX 12 5 2 3 +BITMAP +0F00 +30C0 +4020 +8610 +8610 +ENDCHAR +STARTCHAR uni01BC24 +ENCODING 113700 +BBX 12 9 2 3 +BITMAP +0600 +0600 +0000 +0000 +0F00 +30C0 +4020 +8610 +8610 +ENDCHAR +STARTCHAR uni01BC25 +ENCODING 113701 +BBX 12 5 2 3 +BITMAP +8610 +8610 +4020 +30C0 +0F00 +ENDCHAR +STARTCHAR uni01BC26 +ENCODING 113702 +BBX 12 9 2 -1 +BITMAP +8010 +8010 +4020 +30C0 +0F00 +0000 +0000 +0600 +0600 +ENDCHAR +STARTCHAR uni01BC27 +ENCODING 113703 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 0 -2 +BITMAP +0E +10 +20 +40 +40 +80 +80 +80 +80 +80 +40 +40 +20 +10 +0E +ENDCHAR +STARTCHAR uni01BC28 +ENCODING 113704 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 0 -2 +BITMAP +E0 +10 +08 +04 +04 +02 +02 +02 +02 +02 +04 +04 +08 +10 +E0 +ENDCHAR +STARTCHAR uni01BC29 +ENCODING 113705 +BBX 15 7 0 2 +BITMAP +07C0 +1830 +2008 +4004 +8002 +8002 +8002 +ENDCHAR +STARTCHAR uni01BC2A +ENCODING 113706 +BBX 15 7 0 2 +BITMAP +8002 +8002 +8002 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01BC2B +ENCODING 113707 +BBX 9 15 2 -2 +BITMAP +0380 +0400 +0800 +1000 +1000 +2000 +2000 +F800 +2000 +2000 +1000 +1000 +0800 +0400 +0380 +ENDCHAR +STARTCHAR uni01BC2C +ENCODING 113708 +BBX 9 15 4 -2 +BITMAP +E000 +1000 +0800 +0400 +0400 +0200 +0200 +0F80 +0200 +0200 +0400 +0400 +0800 +1000 +E000 +ENDCHAR +STARTCHAR uni01BC2D +ENCODING 113709 +BBX 15 9 0 2 +BITMAP +0100 +0100 +07C0 +1930 +2108 +4004 +8002 +8002 +8002 +ENDCHAR +STARTCHAR uni01BC2E +ENCODING 113710 +BBX 15 9 0 0 +BITMAP +8002 +8002 +8002 +4004 +2108 +1930 +07C0 +0100 +0100 +ENDCHAR +STARTCHAR uni01BC2F +ENCODING 113711 +BBX 14 7 1 2 +BITMAP +0780 +1860 +2010 +4008 +8304 +8304 +8004 +ENDCHAR +STARTCHAR uni01BC30 +ENCODING 113712 +BBX 8 10 4 0 +BITMAP +38 +44 +82 +81 +81 +01 +01 +02 +04 +18 +ENDCHAR +STARTCHAR uni01BC31 +ENCODING 113713 +BBX 11 15 2 -2 +BITMAP +1C00 +2300 +4080 +8040 +8040 +8020 +0020 +0020 +0020 +0020 +0040 +0040 +0080 +0300 +1C00 +ENDCHAR +STARTCHAR uni01BC32 +ENCODING 113714 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +20 +94 +8C +9C +40 +38 +ENDCHAR +STARTCHAR uni01BC33 +ENCODING 113715 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +80 +80 +90 +8A +46 +4E +20 +18 +06 +ENDCHAR +STARTCHAR uni01BC34 +ENCODING 113716 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +10 +A4 +C4 +E4 +08 +70 +ENDCHAR +STARTCHAR uni01BC35 +ENCODING 113717 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +02 +02 +12 +A2 +C4 +E4 +08 +30 +C0 +ENDCHAR +STARTCHAR uni01BC36 +ENCODING 113718 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +70 +08 +84 +54 +34 +70 +ENDCHAR +STARTCHAR uni01BC37 +ENCODING 113719 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +C0 +30 +08 +84 +54 +32 +72 +ENDCHAR +STARTCHAR uni01BC38 +ENCODING 113720 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +38 +40 +84 +A8 +B0 +38 +ENDCHAR +STARTCHAR uni01BC39 +ENCODING 113721 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 2 +BITMAP +10 +A0 +C0 +E0 +00 +38 +40 +80 +98 +98 +ENDCHAR +STARTCHAR uni01BC3A +ENCODING 113722 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +06 +18 +20 +42 +54 +98 +9C +80 +ENDCHAR +STARTCHAR uni01BC3B +ENCODING 113723 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +70 +34 +54 +84 +08 +70 +ENDCHAR +STARTCHAR uni01BC3C +ENCODING 113724 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +02 +72 +32 +54 +84 +08 +30 +C0 +ENDCHAR +STARTCHAR uni01BC3D +ENCODING 113725 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +70 +08 +E4 +C4 +A4 +10 +ENDCHAR +STARTCHAR uni01BC3E +ENCODING 113726 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +C0 +30 +08 +E4 +C4 +A2 +12 +ENDCHAR +STARTCHAR uni01BC3F +ENCODING 113727 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +38 +40 +9C +8C +94 +20 +ENDCHAR +STARTCHAR uni01BC40 +ENCODING 113728 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +06 +18 +20 +4E +46 +8A +90 +ENDCHAR +STARTCHAR uni01BC41 +ENCODING 113729 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 3 +BITMAP +20 +10 +F8 +10 +20 +00 +30 +48 +48 +30 +ENDCHAR +STARTCHAR uni01BC42 +ENCODING 113730 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 3 +BITMAP +20 +40 +F8 +40 +20 +00 +30 +48 +48 +30 +ENDCHAR +STARTCHAR uni01BC43 +ENCODING 113731 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01BC44 +ENCODING 113732 +BBX 10 10 2 0 +BITMAP +0C00 +3300 +4080 +4080 +8040 +8040 +4080 +4080 +3300 +0C00 +ENDCHAR +STARTCHAR uni01BC45 +ENCODING 113733 +BBX 11 11 2 0 +BITMAP +0E00 +3180 +4040 +4040 +8020 +8020 +8020 +4040 +4040 +3180 +0E00 +ENDCHAR +STARTCHAR uni01BC46 +ENCODING 113734 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 4 2 3 +BITMAP +60 +80 +80 +60 +ENDCHAR +STARTCHAR uni01BC47 +ENCODING 113735 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 1 3 +BITMAP +90 +90 +60 +ENDCHAR +STARTCHAR uni01BC48 +ENCODING 113736 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +38 +40 +80 +80 +80 +40 +38 +ENDCHAR +STARTCHAR uni01BC49 +ENCODING 113737 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 0 +BITMAP +E0 +10 +08 +08 +08 +10 +E0 +ENDCHAR +STARTCHAR uni01BC4A +ENCODING 113738 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 1 +BITMAP +38 +44 +82 +82 +82 +ENDCHAR +STARTCHAR uni01BC4B +ENCODING 113739 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 1 +BITMAP +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01BC4C +ENCODING 113740 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 1 3 +BITMAP +40 +00 +00 +90 +90 +60 +ENDCHAR +STARTCHAR uni01BC4D +ENCODING 113741 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 1 0 +BITMAP +90 +90 +60 +00 +00 +40 +ENDCHAR +STARTCHAR uni01BC4E +ENCODING 113742 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 6 1 0 +BITMAP +90 +90 +60 +00 +00 +F0 +ENDCHAR +STARTCHAR uni01BC4F +ENCODING 113743 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +08 +00 +10 +10 +20 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni01BC50 +ENCODING 113744 +BBX 13 10 1 1 +BITMAP +F800 +1040 +2040 +7C40 +0820 +10A8 +3E70 +0420 +0800 +1F00 +ENDCHAR +STARTCHAR uni01BC51 +ENCODING 113745 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +80 +80 +40 +40 +30 +0C +ENDCHAR +STARTCHAR uni01BC52 +ENCODING 113746 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +04 +04 +08 +08 +30 +C0 +ENDCHAR +STARTCHAR uni01BC53 +ENCODING 113747 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +80 +88 +40 +40 +30 +0C +ENDCHAR +STARTCHAR uni01BC54 +ENCODING 113748 +BBX 10 10 3 0 +BITMAP +0C00 +3300 +4080 +4080 +8040 +8040 +0080 +0080 +0300 +0C00 +ENDCHAR +STARTCHAR uni01BC55 +ENCODING 113749 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +08 +10 +20 +44 +88 +90 +60 +ENDCHAR +STARTCHAR uni01BC56 +ENCODING 113750 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 1 +BITMAP +30 +40 +80 +98 +84 +84 +44 +38 +ENDCHAR +STARTCHAR uni01BC57 +ENCODING 113751 +BBX 11 11 2 0 +BITMAP +01C0 +0620 +0820 +1020 +2040 +4040 +4080 +8100 +8200 +8C00 +7000 +ENDCHAR +STARTCHAR uni01BC58 +ENCODING 113752 +BBX 11 11 2 0 +BITMAP +01C0 +0620 +0820 +1020 +2040 +4440 +4080 +8100 +8200 +8C00 +7000 +ENDCHAR +STARTCHAR uni01BC59 +ENCODING 113753 +BBX 13 13 2 0 +BITMAP +0008 +0000 +01C0 +0620 +0820 +1020 +2040 +4040 +4080 +8100 +8200 +8C00 +7000 +ENDCHAR +STARTCHAR uni01BC5A +ENCODING 113754 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +44 +82 +92 +82 +44 +38 +ENDCHAR +STARTCHAR uni01BC5B +ENCODING 113755 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +44 +92 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01BC5C +ENCODING 113756 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +44 +BA +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01BC5D +ENCODING 113757 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +44 +82 +C6 +BA +44 +38 +ENDCHAR +STARTCHAR uni01BC5E +ENCODING 113758 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +64 +A2 +9A +82 +44 +38 +ENDCHAR +STARTCHAR uni01BC5F +ENCODING 113759 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +4C +92 +8A +92 +44 +38 +ENDCHAR +STARTCHAR uni01BC60 +ENCODING 113760 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +44 +92 +C6 +BA +44 +38 +ENDCHAR +STARTCHAR uni01BC61 +ENCODING 113761 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 2 +BITMAP +28 +18 +38 +80 +80 +60 +ENDCHAR +STARTCHAR uni01BC62 +ENCODING 113762 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +20 +20 +C0 +1C +0C +14 +ENDCHAR +STARTCHAR uni01BC63 +ENCODING 113763 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 2 +BITMAP +28 +18 +38 +00 +C0 +20 +20 +ENDCHAR +STARTCHAR uni01BC64 +ENCODING 113764 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 7 2 2 +BITMAP +E0 +60 +A0 +00 +60 +80 +80 +ENDCHAR +STARTCHAR uni01BC65 +ENCODING 113765 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 2 -1 +BITMAP +20 +20 +C0 +00 +50 +60 +70 +ENDCHAR +STARTCHAR uni01BC66 +ENCODING 113766 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 7 1 2 +BITMAP +A0 +C0 +E0 +00 +30 +40 +40 +ENDCHAR +STARTCHAR uni01BC67 +ENCODING 113767 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 3 +BITMAP +A0 +80 +60 +ENDCHAR +STARTCHAR uni01BC68 +ENCODING 113768 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 2 +BITMAP +40 +40 +30 +80 +ENDCHAR +STARTCHAR uni01BC69 +ENCODING 113769 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 2 +BITMAP +80 +00 +60 +80 +80 +ENDCHAR +STARTCHAR uni01BC6A +ENCODING 113770 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 0 +BITMAP +80 +00 +80 +00 +80 +00 +80 +00 +60 +80 +80 +ENDCHAR +STARTCHAR uni01BC70 +ENCODING 113776 +BBX 13 9 1 1 +BITMAP +0020 +0000 +FFF8 +0000 +0020 +0000 +0020 +0000 +0020 +ENDCHAR +STARTCHAR uni01BC71 +ENCODING 113777 +BBX 13 9 1 1 +BITMAP +0200 +0000 +FFF8 +0000 +0200 +0000 +0200 +0000 +0200 +ENDCHAR +STARTCHAR uni01BC72 +ENCODING 113778 +BBX 13 9 1 1 +BITMAP +2000 +0000 +FFF8 +0000 +2000 +0000 +2000 +0000 +2000 +ENDCHAR +STARTCHAR uni01BC73 +ENCODING 113779 +BBX 9 11 3 0 +BITMAP +2000 +2000 +AA80 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +ENDCHAR +STARTCHAR uni01BC74 +ENCODING 113780 +BBX 9 11 3 0 +BITMAP +2000 +2000 +2000 +2000 +2000 +AA80 +2000 +2000 +2000 +2000 +2000 +ENDCHAR +STARTCHAR uni01BC75 +ENCODING 113781 +BBX 9 11 3 0 +BITMAP +2000 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +AA80 +2000 +2000 +ENDCHAR +STARTCHAR uni01BC76 +ENCODING 113782 +BBX 9 6 3 0 +BITMAP +0100 +0100 +0100 +0200 +AA80 +0200 +ENDCHAR +STARTCHAR uni01BC77 +ENCODING 113783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +10 +C0 +38 +06 +10 +00 +10 +00 +10 +ENDCHAR +STARTCHAR uni01BC78 +ENCODING 113784 +BBX 9 7 3 0 +BITMAP +0080 +0080 +0080 +AA80 +0080 +0080 +0080 +ENDCHAR +STARTCHAR uni01BC79 +ENCODING 113785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +38 +04 +02 +02 +02 +04 +18 +E0 +ENDCHAR +STARTCHAR uni01BC7A +ENCODING 113786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +80 +00 +80 +00 +80 +00 +80 +00 +60 +90 +90 +ENDCHAR +STARTCHAR uni01BC7B +ENCODING 113787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 12 2 -1 +BITMAP +80 +00 +80 +00 +80 +00 +80 +00 +40 +80 +80 +40 +ENDCHAR +STARTCHAR uni01BC7C +ENCODING 113788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +20 +00 +20 +00 +20 +00 +20 +00 +70 +88 +88 +ENDCHAR +STARTCHAR uni01BC80 +ENCODING 113792 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 8 +BITMAP +20 +20 +C0 +ENDCHAR +STARTCHAR uni01BC81 +ENCODING 113793 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 5 +BITMAP +08 +08 +30 +00 +00 +AA +ENDCHAR +STARTCHAR uni01BC82 +ENCODING 113794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 8 +BITMAP +80 +80 +60 +ENDCHAR +STARTCHAR uni01BC83 +ENCODING 113795 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 8 +BITMAP +80 +40 +3C +ENDCHAR +STARTCHAR uni01BC84 +ENCODING 113796 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 2 9 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni01BC85 +ENCODING 113797 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 6 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni01BC86 +ENCODING 113798 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 1 2 8 +BITMAP +F0 +ENDCHAR +STARTCHAR uni01BC87 +ENCODING 113799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 7 +BITMAP +98 +64 +ENDCHAR +STARTCHAR uni01BC88 +ENCODING 113800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 5 +BITMAP +88 +9C +AA +88 +80 +ENDCHAR +STARTCHAR uni01BC90 +ENCODING 113808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 4 0 +BITMAP +20 +20 +C0 +ENDCHAR +STARTCHAR uni01BC91 +ENCODING 113809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 0 +BITMAP +AA +00 +00 +02 +02 +0C +ENDCHAR +STARTCHAR uni01BC92 +ENCODING 113810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 4 0 +BITMAP +80 +80 +60 +ENDCHAR +STARTCHAR uni01BC93 +ENCODING 113811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 0 +BITMAP +80 +40 +3C +ENDCHAR +STARTCHAR uni01BC94 +ENCODING 113812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 2 0 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni01BC95 +ENCODING 113813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 0 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni01BC96 +ENCODING 113814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 1 2 1 +BITMAP +F0 +ENDCHAR +STARTCHAR uni01BC97 +ENCODING 113815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 0 +BITMAP +98 +64 +ENDCHAR +STARTCHAR uni01BC98 +ENCODING 113816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 0 +BITMAP +80 +88 +AA +9C +88 +ENDCHAR +STARTCHAR uni01BC99 +ENCODING 113817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 0 +BITMAP +F0 +20 +40 +ENDCHAR +STARTCHAR uni01BC9C +ENCODING 113820 +BBX 11 11 2 0 +BITMAP +0E00 +3180 +4440 +4440 +8420 +BFA0 +8420 +4440 +4440 +3180 +0E00 +ENDCHAR +STARTCHAR uni01BC9D +ENCODING 113821 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +B8F8 +2421 +A420 +2421 +B820 +0001 +8000 +2039 +A040 +2031 +A008 +3C71 +8000 +5555 +ENDCHAR +STARTCHAR uni01BC9E +ENCODING 113822 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 6 -13 1 +BITMAP +0400 +0400 +AA80 +0800 +1000 +1000 +ENDCHAR +STARTCHAR uni01BC9F +ENCODING 113823 +BBX 9 6 3 1 +BITMAP +0380 +1C00 +E000 +0380 +1C00 +E000 +ENDCHAR +STARTCHAR uni01BCA0 +ENCODING 113824 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0001 +8000 +0101 +8120 +1111 +9FF8 +1111 +8120 +0101 +8000 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01BCA1 +ENCODING 113825 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0101 +8100 +1101 +9FC0 +1101 +8100 +0121 +8110 +01F9 +8010 +0021 +8000 +5555 +ENDCHAR +STARTCHAR uni01BCA2 +ENCODING 113826 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0101 +8100 +0101 +8100 +0101 +8100 +0101 +8540 +0381 +8100 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01BCA3 +ENCODING 113827 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0101 +8380 +0541 +8100 +0101 +8100 +0101 +8100 +0101 +8100 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01D000 +ENCODING 118784 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +08 +08 +F8 +08 +08 +ENDCHAR +STARTCHAR uni01D001 +ENCODING 118785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 4 +BITMAP +80 +80 +F8 +80 +80 +ENDCHAR +STARTCHAR uni01D002 +ENCODING 118786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 4 +BITMAP +38 +44 +82 +ENDCHAR +STARTCHAR uni01D003 +ENCODING 118787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +02 +06 +0A +12 +20 +40 +80 +ENDCHAR +STARTCHAR uni01D004 +ENCODING 118788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +08 +18 +2A +46 +8A +12 +20 +40 +80 +ENDCHAR +STARTCHAR uni01D005 +ENCODING 118789 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +80 +40 +20 +10 +08 +04 +02 +ENDCHAR +STARTCHAR uni01D006 +ENCODING 118790 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +20 +10 +88 +44 +22 +10 +08 +04 +02 +ENDCHAR +STARTCHAR uni01D007 +ENCODING 118791 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 1 +BITMAP +80 +80 +78 +04 +04 +04 +ENDCHAR +STARTCHAR uni01D008 +ENCODING 118792 +BBX 13 3 1 2 +BITMAP +1C08 +6230 +81C0 +ENDCHAR +STARTCHAR uni01D009 +ENCODING 118793 +BBX 9 7 3 0 +BITMAP +6080 +8100 +8200 +4400 +8800 +9000 +6000 +ENDCHAR +STARTCHAR uni01D00A +ENCODING 118794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 9 2 1 +BITMAP +60 +60 +20 +C0 +00 +60 +60 +20 +C0 +ENDCHAR +STARTCHAR uni01D00B +ENCODING 118795 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 12 2 -1 +BITMAP +60 +20 +40 +00 +60 +20 +40 +00 +60 +60 +20 +C0 +ENDCHAR +STARTCHAR uni01D00C +ENCODING 118796 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +02 +04 +08 +90 +A0 +40 +ENDCHAR +STARTCHAR uni01D00D +ENCODING 118797 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +18 +24 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni01D00E +ENCODING 118798 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +04 +0A +12 +24 +40 +80 +ENDCHAR +STARTCHAR uni01D00F +ENCODING 118799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 2 1 +BITMAP +20 +F8 +20 +ENDCHAR +STARTCHAR uni01D010 +ENCODING 118800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 2 +BITMAP +30 +30 +00 +CC +CC +ENDCHAR +STARTCHAR uni01D011 +ENCODING 118801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 1 0 +BITMAP +30 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni01D012 +ENCODING 118802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 0 +BITMAP +66 +11 +22 +44 +88 +10 +20 +ENDCHAR +STARTCHAR uni01D013 +ENCODING 118803 +BBX 11 3 2 2 +BITMAP +8020 +60C0 +1F00 +ENDCHAR +STARTCHAR uni01D014 +ENCODING 118804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 1 +BITMAP +10 +28 +28 +FE +28 +28 +10 +ENDCHAR +STARTCHAR uni01D015 +ENCODING 118805 +BBX 8 8 4 1 +BITMAP +70 +88 +04 +64 +94 +94 +64 +03 +ENDCHAR +STARTCHAR uni01D016 +ENCODING 118806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 2 +BITMAP +FE +80 +98 +A4 +A4 +98 +ENDCHAR +STARTCHAR uni01D017 +ENCODING 118807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 1 +BITMAP +20 +20 +20 +20 +A8 +70 +20 +ENDCHAR +STARTCHAR uni01D018 +ENCODING 118808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 2 +BITMAP +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni01D019 +ENCODING 118809 +BBX 13 8 1 1 +BITMAP +0200 +4500 +A500 +BFC8 +E548 +9530 +9200 +E000 +ENDCHAR +STARTCHAR uni01D01A +ENCODING 118810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 1 1 2 +BITMAP +FC +ENDCHAR +STARTCHAR uni01D01B +ENCODING 118811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni01D01C +ENCODING 118812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 2 1 +BITMAP +18 +18 +C0 +C0 +ENDCHAR +STARTCHAR uni01D01D +ENCODING 118813 +BBX 12 2 2 1 +BITMAP +C630 +C630 +ENDCHAR +STARTCHAR uni01D01E +ENCODING 118814 +BBX 11 6 2 1 +BITMAP +0A00 +0440 +0A20 +6020 +9FC0 +1000 +ENDCHAR +STARTCHAR uni01D01F +ENCODING 118815 +BBX 10 10 3 1 +BITMAP +0200 +0300 +0300 +0280 +0280 +0240 +FFC0 +4200 +4200 +8200 +ENDCHAR +STARTCHAR uni01D020 +ENCODING 118816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +10 +20 +44 +88 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni01D021 +ENCODING 118817 +BBX 9 8 3 2 +BITMAP +3800 +4400 +0700 +8200 +4400 +2700 +1080 +0800 +ENDCHAR +STARTCHAR uni01D022 +ENCODING 118818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 2 +BITMAP +38 +44 +82 +ENDCHAR +STARTCHAR uni01D023 +ENCODING 118819 +BBX 11 4 2 2 +BITMAP +1100 +8A20 +4A40 +3F80 +ENDCHAR +STARTCHAR uni01D024 +ENCODING 118820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 2 2 +BITMAP +88 +50 +50 +20 +ENDCHAR +STARTCHAR uni01D025 +ENCODING 118821 +BBX 12 6 2 2 +BITMAP +0010 +4020 +8040 +8880 +9100 +6E00 +ENDCHAR +STARTCHAR uni01D026 +ENCODING 118822 +BBX 11 9 2 -1 +BITMAP +3C00 +4000 +8000 +8F80 +4480 +3880 +00A0 +00C0 +0080 +ENDCHAR +STARTCHAR uni01D027 +ENCODING 118823 +BBX 12 5 2 2 +BITMAP +6000 +9010 +1C20 +23C0 +4000 +ENDCHAR +STARTCHAR uni01D028 +ENCODING 118824 +BBX 10 11 2 0 +BITMAP +0080 +0040 +0440 +0280 +1100 +0A00 +4400 +2800 +1000 +9000 +6000 +ENDCHAR +STARTCHAR uni01D029 +ENCODING 118825 +BBX 14 7 1 1 +BITMAP +0004 +0008 +0050 +3020 +1480 +E240 +0120 +ENDCHAR +STARTCHAR uni01D02A +ENCODING 118826 +BBX 14 5 1 0 +BITMAP +0F00 +1080 +0890 +0110 +FEEC +ENDCHAR +STARTCHAR uni01D02B +ENCODING 118827 +BBX 15 9 1 0 +BITMAP +1000 +1800 +1400 +FE00 +51C0 +5220 +9124 +1044 +1FBA +ENDCHAR +STARTCHAR uni01D02C +ENCODING 118828 +BBX 13 8 1 0 +BITMAP +0008 +0010 +0820 +0440 +4480 +AB00 +7000 +2000 +ENDCHAR +STARTCHAR uni01D02D +ENCODING 118829 +BBX 14 8 1 1 +BITMAP +03B8 +0444 +2000 +5000 +FC84 +5488 +2490 +0360 +ENDCHAR +STARTCHAR uni01D02E +ENCODING 118830 +BBX 12 11 2 0 +BITMAP +0800 +1800 +2A00 +4600 +8A00 +1200 +2000 +4860 +8490 +0500 +0200 +ENDCHAR +STARTCHAR uni01D02F +ENCODING 118831 +BBX 10 9 3 1 +BITMAP +0040 +0080 +0100 +0200 +0400 +0800 +2200 +4400 +8800 +ENDCHAR +STARTCHAR uni01D030 +ENCODING 118832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +04 +04 +84 +88 +88 +F8 +ENDCHAR +STARTCHAR uni01D031 +ENCODING 118833 +BBX 9 6 3 2 +BITMAP +0080 +0080 +1080 +3100 +5100 +9F00 +ENDCHAR +STARTCHAR uni01D032 +ENCODING 118834 +BBX 15 12 1 0 +BITMAP +0002 +0004 +0008 +0110 +00A0 +0040 +0400 +0910 +0224 +D848 +4890 +9020 +ENDCHAR +STARTCHAR uni01D033 +ENCODING 118835 +BBX 12 6 2 2 +BITMAP +0010 +6C20 +6C40 +2480 +4800 +9000 +ENDCHAR +STARTCHAR uni01D034 +ENCODING 118836 +BBX 12 11 2 -1 +BITMAP +0040 +0040 +00E0 +0150 +0350 +0550 +08E0 +0040 +2440 +4840 +9000 +ENDCHAR +STARTCHAR uni01D035 +ENCODING 118837 +BBX 13 10 1 0 +BITMAP +0020 +0020 +0070 +00A8 +01A8 +02A8 +8470 +4820 +3020 +0020 +ENDCHAR +STARTCHAR uni01D036 +ENCODING 118838 +BBX 13 11 1 0 +BITMAP +70C0 +8D20 +03C0 +0100 +00C0 +0100 +00C0 +0100 +00C0 +0108 +00F0 +ENDCHAR +STARTCHAR uni01D037 +ENCODING 118839 +BBX 14 11 1 0 +BITMAP +7100 +8A80 +0700 +020C +019C +0200 +018C +021C +0180 +020C +01DC +ENDCHAR +STARTCHAR uni01D038 +ENCODING 118840 +BBX 9 13 3 -2 +BITMAP +3800 +4400 +8200 +6100 +1100 +6080 +8080 +6080 +1100 +6100 +0200 +0400 +0400 +ENDCHAR +STARTCHAR uni01D039 +ENCODING 118841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 3 0 +BITMAP +60 +20 +C0 +00 +60 +20 +C0 +00 +60 +20 +C0 +ENDCHAR +STARTCHAR uni01D03A +ENCODING 118842 +BBX 9 8 3 0 +BITMAP +0100 +0300 +0500 +0900 +1080 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni01D03B +ENCODING 118843 +BBX 14 8 1 0 +BITMAP +2200 +1400 +0804 +0308 +0490 +90A0 +48C0 +2500 +ENDCHAR +STARTCHAR uni01D03C +ENCODING 118844 +BBX 11 5 2 2 +BITMAP +C000 +2100 +1220 +1220 +6DC0 +ENDCHAR +STARTCHAR uni01D03D +ENCODING 118845 +BBX 15 10 1 -2 +BITMAP +0900 +6480 +8240 +8000 +80A8 +71A8 +0A54 +0C02 +0802 +1000 +ENDCHAR +STARTCHAR uni01D03E +ENCODING 118846 +BBX 12 7 2 1 +BITMAP +0010 +0030 +0050 +9080 +9100 +9200 +6C00 +ENDCHAR +STARTCHAR uni01D03F +ENCODING 118847 +BBX 14 10 1 1 +BITMAP +0020 +0040 +6A80 +9500 +9504 +0008 +4010 +5220 +5240 +2D80 +ENDCHAR +STARTCHAR uni01D040 +ENCODING 118848 +BBX 10 5 2 2 +BITMAP +F3C0 +2080 +4100 +E380 +1040 +ENDCHAR +STARTCHAR uni01D041 +ENCODING 118849 +BBX 11 8 2 1 +BITMAP +0020 +0040 +0080 +0100 +0200 +8400 +4800 +3000 +ENDCHAR +STARTCHAR uni01D042 +ENCODING 118850 +BBX 10 8 2 0 +BITMAP +8000 +4040 +2080 +1100 +0A00 +0400 +0A00 +1100 +ENDCHAR +STARTCHAR uni01D043 +ENCODING 118851 +BBX 14 9 1 0 +BITMAP +6000 +2000 +C000 +0000 +0000 +6004 +22A4 +CAA8 +0550 +ENDCHAR +STARTCHAR uni01D044 +ENCODING 118852 +BBX 12 5 2 0 +BITMAP +1240 +1240 +2DB0 +4000 +8000 +ENDCHAR +STARTCHAR uni01D045 +ENCODING 118853 +BBX 16 11 0 0 +BITMAP +8800 +5000 +2200 +5444 +88AA +55FF +24AA +07FF +24AA +4844 +3000 +ENDCHAR +STARTCHAR uni01D046 +ENCODING 118854 +BBX 11 3 2 2 +BITMAP +6000 +87E0 +7800 +ENDCHAR +STARTCHAR uni01D047 +ENCODING 118855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 1 2 2 +BITMAP +FC +ENDCHAR +STARTCHAR uni01D048 +ENCODING 118856 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 2 1 2 +BITMAP +1C +E0 +ENDCHAR +STARTCHAR uni01D049 +ENCODING 118857 +BBX 11 5 2 2 +BITMAP +00C0 +8020 +8020 +4040 +3F80 +ENDCHAR +STARTCHAR uni01D04A +ENCODING 118858 +BBX 11 5 2 2 +BITMAP +4000 +8F00 +70A0 +0040 +00A0 +ENDCHAR +STARTCHAR uni01D04B +ENCODING 118859 +BBX 14 5 1 2 +BITMAP +4200 +85E0 +7814 +0008 +0014 +ENDCHAR +STARTCHAR uni01D04C +ENCODING 118860 +BBX 14 6 1 2 +BITMAP +8000 +8200 +45E0 +7814 +A008 +2014 +ENDCHAR +STARTCHAR uni01D04D +ENCODING 118861 +BBX 11 7 2 2 +BITMAP +6000 +8020 +61C0 +1E40 +0080 +0100 +0200 +ENDCHAR +STARTCHAR uni01D04E +ENCODING 118862 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 1 6 +BITMAP +CC +66 +ENDCHAR +STARTCHAR uni01D04F +ENCODING 118863 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 2 3 6 +BITMAP +C0 +60 +ENDCHAR +STARTCHAR uni01D050 +ENCODING 118864 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 4 +BITMAP +04 +08 +08 +10 +10 +20 +C0 +ENDCHAR +STARTCHAR uni01D051 +ENCODING 118865 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 2 +BITMAP +E0 +18 +04 +08 +ENDCHAR +STARTCHAR uni01D052 +ENCODING 118866 +BBX 11 4 2 2 +BITMAP +E300 +18C0 +0420 +0840 +ENDCHAR +STARTCHAR uni01D053 +ENCODING 118867 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 1 +BITMAP +30 +40 +20 +10 +E0 +ENDCHAR +STARTCHAR uni01D054 +ENCODING 118868 +BBX 9 6 3 0 +BITMAP +0080 +0100 +6E80 +9080 +2100 +0600 +ENDCHAR +STARTCHAR uni01D055 +ENCODING 118869 +BBX 11 4 2 2 +BITMAP +3C00 +4300 +80C0 +6020 +ENDCHAR +STARTCHAR uni01D056 +ENCODING 118870 +BBX 10 6 3 2 +BITMAP +8000 +8000 +4200 +3FC0 +0200 +0400 +ENDCHAR +STARTCHAR uni01D057 +ENCODING 118871 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 2 +BITMAP +80 +80 +70 +ENDCHAR +STARTCHAR uni01D058 +ENCODING 118872 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 0 +BITMAP +80 +80 +40 +3E +ENDCHAR +STARTCHAR uni01D059 +ENCODING 118873 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 -2 +BITMAP +A0 +A0 +1E +ENDCHAR +STARTCHAR uni01D05A +ENCODING 118874 +BBX 12 4 2 0 +BITMAP +E000 +1C30 +0340 +0080 +ENDCHAR +STARTCHAR uni01D05B +ENCODING 118875 +BBX 11 3 2 0 +BITMAP +FFE0 +0040 +0080 +ENDCHAR +STARTCHAR uni01D05C +ENCODING 118876 +BBX 11 4 2 0 +BITMAP +FF00 +00C0 +0020 +0040 +ENDCHAR +STARTCHAR uni01D05D +ENCODING 118877 +BBX 12 4 2 0 +BITMAP +6000 +9000 +1E00 +21F0 +ENDCHAR +STARTCHAR uni01D05E +ENCODING 118878 +BBX 13 4 1 4 +BITMAP +FF00 +0200 +0400 +0FF8 +ENDCHAR +STARTCHAR uni01D05F +ENCODING 118879 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +FE +40 +20 +10 +10 +22 +42 +44 +38 +ENDCHAR +STARTCHAR uni01D060 +ENCODING 118880 +BBX 13 3 1 0 +BITMAP +4008 +8E10 +71E0 +ENDCHAR +STARTCHAR uni01D061 +ENCODING 118881 +BBX 14 4 1 0 +BITMAP +6700 +9884 +1078 +2000 +ENDCHAR +STARTCHAR uni01D062 +ENCODING 118882 +BBX 13 4 1 0 +BITMAP +63F0 +9408 +1808 +2010 +ENDCHAR +STARTCHAR uni01D063 +ENCODING 118883 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 -2 +BITMAP +F8 +80 +40 +30 +08 +08 +30 +ENDCHAR +STARTCHAR uni01D064 +ENCODING 118884 +BBX 8 6 4 0 +BITMAP +F0 +10 +10 +08 +08 +07 +ENDCHAR +STARTCHAR uni01D065 +ENCODING 118885 +BBX 14 7 1 -2 +BITMAP +0100 +8E00 +7200 +0400 +0980 +0E74 +0808 +ENDCHAR +STARTCHAR uni01D066 +ENCODING 118886 +BBX 11 3 2 0 +BITMAP +43C0 +8420 +7840 +ENDCHAR +STARTCHAR uni01D067 +ENCODING 118887 +BBX 13 6 1 0 +BITMAP +6100 +85F0 +8708 +7D08 +0530 +0400 +ENDCHAR +STARTCHAR uni01D068 +ENCODING 118888 +BBX 10 4 3 0 +BITMAP +8000 +9400 +5400 +3FC0 +ENDCHAR +STARTCHAR uni01D069 +ENCODING 118889 +BBX 10 8 3 0 +BITMAP +0180 +0200 +0100 +0080 +0700 +A000 +A000 +1FC0 +ENDCHAR +STARTCHAR uni01D06A +ENCODING 118890 +BBX 13 4 1 -2 +BITMAP +0E00 +1180 +2248 +CC30 +ENDCHAR +STARTCHAR uni01D06B +ENCODING 118891 +BBX 11 10 3 -2 +BITMAP +0F80 +1000 +2000 +1800 +0660 +0180 +0180 +0240 +FC40 +0080 +ENDCHAR +STARTCHAR uni01D06C +ENCODING 118892 +BBX 12 7 2 -2 +BITMAP +6020 +9040 +1E40 +21F0 +0040 +0080 +3F00 +ENDCHAR +STARTCHAR uni01D06D +ENCODING 118893 +BBX 12 6 2 -2 +BITMAP +6060 +9080 +1E40 +21F0 +0020 +00C0 +ENDCHAR +STARTCHAR uni01D06E +ENCODING 118894 +BBX 13 6 1 -2 +BITMAP +0180 +4208 +8E10 +71E0 +0100 +0600 +ENDCHAR +STARTCHAR uni01D06F +ENCODING 118895 +BBX 13 7 1 -2 +BITMAP +0200 +4400 +8408 +7E10 +05E0 +0400 +3800 +ENDCHAR +STARTCHAR uni01D070 +ENCODING 118896 +BBX 14 9 1 0 +BITMAP +0100 +8E00 +7230 +0440 +0980 +0E74 +0848 +0080 +0300 +ENDCHAR +STARTCHAR uni01D071 +ENCODING 118897 +BBX 14 10 1 0 +BITMAP +0100 +8E00 +7218 +0420 +09A0 +0E74 +0828 +0040 +0040 +1F80 +ENDCHAR +STARTCHAR uni01D072 +ENCODING 118898 +BBX 12 8 2 -2 +BITMAP +FFE0 +0020 +0040 +3FF0 +0090 +0120 +0040 +0080 +ENDCHAR +STARTCHAR uni01D073 +ENCODING 118899 +BBX 14 10 1 -2 +BITMAP +A000 +A000 +9FF8 +0008 +0010 +1FFC +0024 +0048 +0190 +0020 +ENDCHAR +STARTCHAR uni01D074 +ENCODING 118900 +BBX 15 11 1 -2 +BITMAP +6000 +9000 +9000 +0FFC +0004 +0008 +0FFE +0012 +0024 +00C8 +0010 +ENDCHAR +STARTCHAR uni01D075 +ENCODING 118901 +BBX 16 7 0 -2 +BITMAP +0180 +0240 +0240 +2954 +7CFE +AA55 +0181 +ENDCHAR +STARTCHAR uni01D076 +ENCODING 118902 +BBX 13 7 1 -2 +BITMAP +0400 +0A00 +0A00 +FFC0 +0A30 +0A08 +0410 +ENDCHAR +STARTCHAR uni01D077 +ENCODING 118903 +BBX 12 7 2 -2 +BITMAP +0400 +0A10 +0A10 +FFE0 +0A00 +0A00 +0400 +ENDCHAR +STARTCHAR uni01D078 +ENCODING 118904 +BBX 13 7 1 -2 +BITMAP +1000 +2800 +2800 +FF08 +2A10 +2A20 +11C0 +ENDCHAR +STARTCHAR uni01D079 +ENCODING 118905 +BBX 14 10 1 -2 +BITMAP +1000 +2800 +2800 +FF20 +2A50 +2A50 +11FC +0050 +0050 +0020 +ENDCHAR +STARTCHAR uni01D07A +ENCODING 118906 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 11 2 0 +BITMAP +C0 +20 +C0 +00 +C0 +20 +C0 +00 +C0 +20 +C0 +ENDCHAR +STARTCHAR uni01D07B +ENCODING 118907 +BBX 13 5 2 -2 +BITMAP +0600 +0900 +9F80 +E948 +8630 +ENDCHAR +STARTCHAR uni01D07C +ENCODING 118908 +BBX 9 4 3 0 +BITMAP +8080 +4100 +2200 +1C00 +ENDCHAR +STARTCHAR uni01D07D +ENCODING 118909 +BBX 9 4 3 4 +BITMAP +1C00 +2200 +4100 +8080 +ENDCHAR +STARTCHAR uni01D07E +ENCODING 118910 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 4 +BITMAP +30 +FC +30 +ENDCHAR +STARTCHAR uni01D07F +ENCODING 118911 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 6 +BITMAP +80 +42 +21 +1E +ENDCHAR +STARTCHAR uni01D080 +ENCODING 118912 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 2 0 +BITMAP +C0 +D8 +18 +ENDCHAR +STARTCHAR uni01D081 +ENCODING 118913 +BBX 10 7 3 -2 +BITMAP +0040 +0080 +4100 +2200 +5C00 +9000 +2000 +ENDCHAR +STARTCHAR uni01D082 +ENCODING 118914 +BBX 13 5 1 0 +BITMAP +0100 +7A00 +8400 +0A00 +11F8 +ENDCHAR +STARTCHAR uni01D083 +ENCODING 118915 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 0 +BITMAP +A0 +A0 +1E +ENDCHAR +STARTCHAR uni01D084 +ENCODING 118916 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 0 +BITMAP +FE +18 +18 +ENDCHAR +STARTCHAR uni01D085 +ENCODING 118917 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 3 1 +BITMAP +40 +80 +ENDCHAR +STARTCHAR uni01D086 +ENCODING 118918 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 2 2 1 +BITMAP +48 +90 +ENDCHAR +STARTCHAR uni01D087 +ENCODING 118919 +BBX 8 2 4 1 +BITMAP +49 +92 +ENDCHAR +STARTCHAR uni01D088 +ENCODING 118920 +BBX 11 2 2 1 +BITMAP +4920 +9240 +ENDCHAR +STARTCHAR uni01D089 +ENCODING 118921 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 4 +BITMAP +38 +44 +82 +92 +ENDCHAR +STARTCHAR uni01D08A +ENCODING 118922 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 0 +BITMAP +A0 +80 +70 +0E +ENDCHAR +STARTCHAR uni01D08B +ENCODING 118923 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 0 +BITMAP +A8 +80 +70 +0E +ENDCHAR +STARTCHAR uni01D08C +ENCODING 118924 +BBX 8 4 4 0 +BITMAP +AA +80 +70 +0F +ENDCHAR +STARTCHAR uni01D08D +ENCODING 118925 +BBX 10 4 3 0 +BITMAP +AA80 +8000 +7000 +0FC0 +ENDCHAR +STARTCHAR uni01D08E +ENCODING 118926 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +20 +10 +00 +A0 +80 +70 +0E +ENDCHAR +STARTCHAR uni01D08F +ENCODING 118927 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 5 +BITMAP +F8 +40 +20 +ENDCHAR +STARTCHAR uni01D090 +ENCODING 118928 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 4 +BITMAP +BE +10 +08 +ENDCHAR +STARTCHAR uni01D091 +ENCODING 118929 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 4 +BITMAP +FA +40 +20 +ENDCHAR +STARTCHAR uni01D092 +ENCODING 118930 +BBX 10 6 3 4 +BITMAP +3FC0 +1000 +0800 +FC00 +4000 +2000 +ENDCHAR +STARTCHAR uni01D093 +ENCODING 118931 +BBX 13 6 1 4 +BITMAP +07F8 +0200 +0100 +9F80 +0800 +0400 +ENDCHAR +STARTCHAR uni01D094 +ENCODING 118932 +BBX 10 8 3 4 +BITMAP +8000 +0000 +3FC0 +1000 +0800 +FC00 +4000 +2000 +ENDCHAR +STARTCHAR uni01D095 +ENCODING 118933 +BBX 13 6 1 4 +BITMAP +3FC8 +1000 +0800 +FC00 +4000 +2000 +ENDCHAR +STARTCHAR uni01D096 +ENCODING 118934 +BBX 12 9 2 2 +BITMAP +0FF0 +0400 +0200 +3F00 +1000 +0800 +FC00 +4000 +2000 +ENDCHAR +STARTCHAR uni01D097 +ENCODING 118935 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 2 4 +BITMAP +F8 +10 +20 +ENDCHAR +STARTCHAR uni01D098 +ENCODING 118936 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 4 +BITMAP +20 +40 +F8 +10 +20 +ENDCHAR +STARTCHAR uni01D099 +ENCODING 118937 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 4 +BITMAP +FC +08 +10 +3E +04 +08 +ENDCHAR +STARTCHAR uni01D09A +ENCODING 118938 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +08 +10 +3E +04 +08 +00 +14 +08 +14 +ENDCHAR +STARTCHAR uni01D09B +ENCODING 118939 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 2 0 +BITMAP +20 +40 +F8 +10 +20 +00 +50 +20 +50 +ENDCHAR +STARTCHAR uni01D09C +ENCODING 118940 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +F8 +10 +20 +00 +50 +20 +50 +ENDCHAR +STARTCHAR uni01D09D +ENCODING 118941 +BBX 11 6 2 0 +BITMAP +FBE0 +1100 +2080 +0A00 +0400 +0A00 +ENDCHAR +STARTCHAR uni01D09E +ENCODING 118942 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +50 +50 +AC +80 +A8 +10 +28 +ENDCHAR +STARTCHAR uni01D09F +ENCODING 118943 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 0 +BITMAP +F8 +40 +20 +00 +50 +20 +50 +ENDCHAR +STARTCHAR uni01D0A0 +ENCODING 118944 +BBX 10 10 3 0 +BITMAP +3FC0 +1000 +0800 +FC00 +4000 +2000 +0000 +A000 +4000 +A000 +ENDCHAR +STARTCHAR uni01D0A1 +ENCODING 118945 +BBX 14 12 1 0 +BITMAP +03FC +0100 +0080 +0FC0 +0400 +0200 +3F00 +1000 +0800 +A000 +4000 +A000 +ENDCHAR +STARTCHAR uni01D0A2 +ENCODING 118946 +BBX 13 4 1 0 +BITMAP +4000 +B0E0 +A910 +4608 +ENDCHAR +STARTCHAR uni01D0A3 +ENCODING 118947 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +40 +A0 +A0 +50 +10 +10 +08 +04 +04 +ENDCHAR +STARTCHAR uni01D0A4 +ENCODING 118948 +BBX 11 3 2 0 +BITMAP +9000 +91C0 +6E20 +ENDCHAR +STARTCHAR uni01D0A5 +ENCODING 118949 +BBX 8 3 4 1 +BITMAP +80 +8E +71 +ENDCHAR +STARTCHAR uni01D0A6 +ENCODING 118950 +BBX 13 8 1 1 +BITMAP +03F8 +0000 +0000 +3FA8 +0028 +0000 +FA80 +C280 +ENDCHAR +STARTCHAR uni01D0A7 +ENCODING 118951 +BBX 11 6 2 0 +BITMAP +6180 +9240 +9240 +5140 +1040 +0820 +ENDCHAR +STARTCHAR uni01D0A8 +ENCODING 118952 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 -2 +BITMAP +18 +24 +24 +44 +A4 +A4 +42 +ENDCHAR +STARTCHAR uni01D0A9 +ENCODING 118953 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +80 +40 +4E +30 +38 +50 +88 +ENDCHAR +STARTCHAR uni01D0AA +ENCODING 118954 +BBX 15 9 1 -1 +BITMAP +8000 +4FE0 +4080 +2E92 +28AC +50AC +8852 +0004 +0008 +ENDCHAR +STARTCHAR uni01D0AB +ENCODING 118955 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +C0 +20 +10 +28 +44 +00 +7C +28 +44 +ENDCHAR +STARTCHAR uni01D0AC +ENCODING 118956 +BBX 9 3 3 2 +BITMAP +C600 +8400 +7380 +ENDCHAR +STARTCHAR uni01D0AD +ENCODING 118957 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 2 +BITMAP +CC +22 +66 +ENDCHAR +STARTCHAR uni01D0AE +ENCODING 118958 +BBX 7 12 4 0 +BITMAP +02 +02 +04 +38 +40 +60 +0E +70 +00 +CC +22 +66 +ENDCHAR +STARTCHAR uni01D0AF +ENCODING 118959 +BBX 11 5 2 2 +BITMAP +FFE0 +0000 +0200 +0440 +0080 +ENDCHAR +STARTCHAR uni01D0B0 +ENCODING 118960 +BBX 8 6 4 1 +BITMAP +03 +0C +30 +C0 +12 +09 +ENDCHAR +STARTCHAR uni01D0B1 +ENCODING 118961 +BBX 11 6 2 0 +BITMAP +8820 +9420 +6240 +0280 +0300 +0200 +ENDCHAR +STARTCHAR uni01D0B2 +ENCODING 118962 +BBX 12 12 2 -2 +BITMAP +0480 +0240 +0000 +0300 +0480 +0380 +8890 +94A0 +6240 +0280 +0300 +0200 +ENDCHAR +STARTCHAR uni01D0B3 +ENCODING 118963 +BBX 14 10 1 0 +BITMAP +0090 +C048 +2000 +1030 +2848 +4448 +0048 +7CA8 +28A8 +4444 +ENDCHAR +STARTCHAR uni01D0B4 +ENCODING 118964 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 -2 +BITMAP +60 +90 +90 +50 +10 +08 +ENDCHAR +STARTCHAR uni01D0B5 +ENCODING 118965 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 -2 +BITMAP +80 +80 +80 +90 +90 +6C +ENDCHAR +STARTCHAR uni01D0B6 +ENCODING 118966 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 1 +BITMAP +10 +20 +40 +F0 +20 +40 +F0 +20 +40 +F8 +04 +02 +ENDCHAR +STARTCHAR uni01D0B7 +ENCODING 118967 +BBX 13 8 1 -2 +BITMAP +0700 +2AA0 +2AA0 +2720 +2220 +DFD8 +0200 +0200 +ENDCHAR +STARTCHAR uni01D0B8 +ENCODING 118968 +BBX 13 11 1 -2 +BITMAP +0180 +0240 +0280 +0700 +2AA0 +2AA0 +2720 +2220 +DFD8 +0200 +0200 +ENDCHAR +STARTCHAR uni01D0B9 +ENCODING 118969 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 4 +BITMAP +36 +28 +14 +2C +C0 +ENDCHAR +STARTCHAR uni01D0BA +ENCODING 118970 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 4 +BITMAP +70 +88 +88 +70 +20 +20 +ENDCHAR +STARTCHAR uni01D0BB +ENCODING 118971 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 4 +BITMAP +20 +20 +70 +88 +88 +70 +20 +20 +ENDCHAR +STARTCHAR uni01D0BC +ENCODING 118972 +BBX 14 6 1 -2 +BITMAP +3000 +4800 +FF04 +4A08 +3210 +01E0 +ENDCHAR +STARTCHAR uni01D0BD +ENCODING 118973 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +80 +58 +24 +24 +18 +04 +02 +ENDCHAR +STARTCHAR uni01D0BE +ENCODING 118974 +BBX 8 8 4 4 +BITMAP +A0 +40 +AC +12 +12 +0C +02 +01 +ENDCHAR +STARTCHAR uni01D0BF +ENCODING 118975 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 4 +BITMAP +20 +20 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni01D0C0 +ENCODING 118976 +BBX 11 14 3 -2 +BITMAP +0800 +0400 +1E00 +2400 +4000 +F000 +2000 +4000 +F000 +2000 +4000 +FF00 +00C0 +0020 +ENDCHAR +STARTCHAR uni01D0C1 +ENCODING 118977 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +70 +88 +88 +70 +20 +38 +46 +80 +ENDCHAR +STARTCHAR uni01D0C2 +ENCODING 118978 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +20 +20 +70 +88 +88 +70 +20 +38 +46 +80 +ENDCHAR +STARTCHAR uni01D0C3 +ENCODING 118979 +BBX 11 7 2 -2 +BITMAP +0800 +1400 +1400 +FF80 +1440 +1420 +08C0 +ENDCHAR +STARTCHAR uni01D0C4 +ENCODING 118980 +BBX 8 8 4 4 +BITMAP +05 +02 +35 +48 +48 +30 +40 +80 +ENDCHAR +STARTCHAR uni01D0C5 +ENCODING 118981 +BBX 14 7 1 4 +BITMAP +0218 +0504 +0508 +3FF0 +4500 +8500 +6200 +ENDCHAR +STARTCHAR uni01D0C6 +ENCODING 118982 +BBX 14 7 1 4 +BITMAP +0218 +0504 +0548 +3FF0 +4540 +8500 +6200 +ENDCHAR +STARTCHAR uni01D0C7 +ENCODING 118983 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 4 +BITMAP +02 +34 +48 +48 +30 +40 +80 +ENDCHAR +STARTCHAR uni01D0C8 +ENCODING 118984 +BBX 8 8 4 4 +BITMAP +01 +02 +0C +12 +12 +AC +40 +A0 +ENDCHAR +STARTCHAR uni01D0C9 +ENCODING 118985 +BBX 9 7 3 4 +BITMAP +0080 +0D00 +1200 +1200 +8C00 +9000 +6000 +ENDCHAR +STARTCHAR uni01D0CA +ENCODING 118986 +BBX 13 7 1 -2 +BITMAP +0400 +0A00 +0A80 +FFE0 +0A90 +0A08 +0430 +ENDCHAR +STARTCHAR uni01D0CB +ENCODING 118987 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 4 +BITMAP +0C +12 +12 +8C +90 +60 +ENDCHAR +STARTCHAR uni01D0CC +ENCODING 118988 +BBX 12 7 2 4 +BITMAP +0010 +01A0 +A240 +4240 +A980 +1200 +2C00 +ENDCHAR +STARTCHAR uni01D0CD +ENCODING 118989 +BBX 10 7 3 4 +BITMAP +0040 +0680 +0900 +0900 +A600 +4800 +B000 +ENDCHAR +STARTCHAR uni01D0CE +ENCODING 118990 +BBX 7 10 4 -2 +BITMAP +0A +04 +0A +02 +04 +18 +24 +24 +58 +80 +ENDCHAR +STARTCHAR uni01D0CF +ENCODING 118991 +BBX 7 9 4 -2 +BITMAP +04 +02 +02 +04 +18 +24 +24 +58 +80 +ENDCHAR +STARTCHAR uni01D0D0 +ENCODING 118992 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 -2 +BITMAP +04 +08 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni01D0D1 +ENCODING 118993 +BBX 7 7 4 -2 +BITMAP +0A +04 +0A +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni01D0D2 +ENCODING 118994 +BBX 9 9 3 -2 +BITMAP +0280 +0100 +0A80 +0400 +0A00 +7000 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni01D0D3 +ENCODING 118995 +BBX 11 11 2 -2 +BITMAP +00A0 +0040 +02A0 +0100 +0A80 +0400 +0A00 +7000 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni01D0D4 +ENCODING 118996 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 4 +BITMAP +38 +44 +44 +38 +40 +80 +ENDCHAR +STARTCHAR uni01D0D5 +ENCODING 118997 +BBX 7 7 4 4 +BITMAP +1C +22 +22 +1C +A0 +40 +A0 +ENDCHAR +STARTCHAR uni01D0D6 +ENCODING 118998 +BBX 9 9 3 3 +BITMAP +0700 +0880 +0880 +0700 +2800 +1000 +A800 +4000 +A000 +ENDCHAR +STARTCHAR uni01D0D7 +ENCODING 118999 +BBX 11 11 2 1 +BITMAP +01C0 +0220 +0220 +01C0 +0A00 +0400 +2A00 +1000 +A800 +4000 +A000 +ENDCHAR +STARTCHAR uni01D0D8 +ENCODING 119000 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +20 +70 +20 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni01D0D9 +ENCODING 119001 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 2 +BITMAP +70 +88 +88 +70 +20 +70 +20 +ENDCHAR +STARTCHAR uni01D0DA +ENCODING 119002 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 3 4 2 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni01D0DB +ENCODING 119003 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 7 4 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D0DC +ENCODING 119004 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 3 2 +BITMAP +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni01D0DD +ENCODING 119005 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +38 +44 +92 +10 +10 +ENDCHAR +STARTCHAR uni01D0DE +ENCODING 119006 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 -2 +BITMAP +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni01D0DF +ENCODING 119007 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 -2 +BITMAP +20 +00 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni01D0E0 +ENCODING 119008 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 -2 +BITMAP +50 +00 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni01D0E1 +ENCODING 119009 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 -2 +BITMAP +A8 +00 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni01D0E2 +ENCODING 119010 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 3 3 -2 +BITMAP +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D0E3 +ENCODING 119011 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 5 3 -2 +BITMAP +40 +00 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D0E4 +ENCODING 119012 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 6 2 -2 +BITMAP +80 +20 +00 +60 +60 +60 +ENDCHAR +STARTCHAR uni01D0E5 +ENCODING 119013 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 2 -2 +BITMAP +80 +20 +08 +60 +60 +60 +ENDCHAR +STARTCHAR uni01D0E6 +ENCODING 119014 +BBX 9 5 3 -2 +BITMAP +FE00 +8000 +BF80 +A000 +A000 +ENDCHAR +STARTCHAR uni01D0E7 +ENCODING 119015 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 -2 +BITMAP +02 +C4 +28 +10 +28 +28 +10 +ENDCHAR +STARTCHAR uni01D0E8 +ENCODING 119016 +BBX 10 7 3 -2 +BITMAP +7FC0 +8000 +8000 +7800 +1000 +1000 +0C00 +ENDCHAR +STARTCHAR uni01D0E9 +ENCODING 119017 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 1 2 +BITMAP +FE +28 +28 +48 +ENDCHAR +STARTCHAR uni01D0EA +ENCODING 119018 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 4 +BITMAP +10 +28 +48 +F0 +48 +48 +30 +ENDCHAR +STARTCHAR uni01D0EB +ENCODING 119019 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 1 4 +BITMAP +FE +60 +60 +ENDCHAR +STARTCHAR uni01D0EC +ENCODING 119020 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 4 +BITMAP +10 +28 +44 +FC +ENDCHAR +STARTCHAR uni01D0ED +ENCODING 119021 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 4 +BITMAP +50 +60 +40 +B0 +ENDCHAR +STARTCHAR uni01D0EE +ENCODING 119022 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 2 +BITMAP +F8 +10 +20 +7C +ENDCHAR +STARTCHAR uni01D0EF +ENCODING 119023 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 4 2 2 +BITMAP +88 +48 +50 +20 +ENDCHAR +STARTCHAR uni01D0F0 +ENCODING 119024 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 1 2 +BITMAP +CC +66 +ENDCHAR +STARTCHAR uni01D0F1 +ENCODING 119025 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 2 3 2 +BITMAP +C0 +60 +ENDCHAR +STARTCHAR uni01D0F2 +ENCODING 119026 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 2 1 -2 +BITMAP +CC +66 +ENDCHAR +STARTCHAR uni01D0F3 +ENCODING 119027 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 2 3 -2 +BITMAP +C0 +60 +ENDCHAR +STARTCHAR uni01D0F4 +ENCODING 119028 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 -2 +BITMAP +80 +42 +21 +1E +ENDCHAR +STARTCHAR uni01D0F5 +ENCODING 119029 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 0 +BITMAP +F8 +40 +20 +ENDCHAR +STARTCHAR uni01D100 +ENCODING 119040 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 15 4 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D101 +ENCODING 119041 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 15 3 -1 +BITMAP +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni01D102 +ENCODING 119042 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 15 2 -1 +BITMAP +B0 +B0 +B0 +B0 +B0 +B0 +B0 +B0 +B0 +B0 +B0 +B0 +B0 +B0 +B0 +ENDCHAR +STARTCHAR uni01D103 +ENCODING 119043 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 15 2 -1 +BITMAP +D0 +D0 +D0 +D0 +D0 +D0 +D0 +D0 +D0 +D0 +D0 +D0 +D0 +D0 +D0 +ENDCHAR +STARTCHAR uni01D104 +ENCODING 119044 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 15 4 -1 +BITMAP +80 +80 +80 +00 +00 +00 +80 +80 +80 +00 +00 +00 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D105 +ENCODING 119045 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 8 4 6 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D106 +ENCODING 119046 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 0 -1 +BITMAP +D0 +D0 +D0 +D0 +D6 +D6 +D0 +D0 +D0 +D6 +D6 +D0 +D0 +D0 +D0 +ENDCHAR +STARTCHAR uni01D107 +ENCODING 119047 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 0 -1 +BITMAP +16 +16 +16 +16 +D6 +D6 +16 +16 +16 +D6 +D6 +16 +16 +16 +16 +ENDCHAR +STARTCHAR uni01D108 +ENCODING 119048 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 7 3 3 +BITMAP +C0 +C0 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR uni01D109 +ENCODING 119049 +BBX 15 10 0 0 +BITMAP +C060 +A090 +9090 +9080 +9040 +9020 +9010 +9090 +A696 +C666 +ENDCHAR +STARTCHAR uni01D10A +ENCODING 119050 +BBX 15 10 0 0 +BITMAP +C060 +A090 +9090 +9080 +9080 +9080 +9080 +9080 +A696 +C666 +ENDCHAR +STARTCHAR uni01D10B +ENCODING 119051 +BBX 8 12 2 0 +BITMAP +62 +92 +84 +C4 +69 +38 +1C +96 +23 +21 +49 +46 +ENDCHAR +STARTCHAR uni01D10C +ENCODING 119052 +BBX 11 13 3 0 +BITMAP +0400 +1F00 +3580 +64C0 +64C0 +64C0 +FFE0 +64C0 +64C0 +64C0 +3580 +1F00 +0400 +ENDCHAR +STARTCHAR uni01D10D +ENCODING 119053 +BBX 11 10 3 0 +BITMAP +0060 +00C0 +0180 +0300 +0600 +0C00 +1800 +3000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D10E +ENCODING 119054 +BBX 11 10 3 0 +BITMAP +0060 +00C0 +6180 +6300 +0600 +0C00 +18C0 +30C0 +6000 +C000 +ENDCHAR +STARTCHAR uni01D10F +ENCODING 119055 +BBX 15 10 1 0 +BITMAP +0066 +00CC +6198 +6330 +0660 +0CC0 +1998 +3318 +6600 +CC00 +ENDCHAR +STARTCHAR uni01D110 +ENCODING 119056 +BBX 10 6 3 5 +BITMAP +1E00 +3F00 +6180 +4080 +8C40 +8C40 +ENDCHAR +STARTCHAR uni01D111 +ENCODING 119057 +BBX 10 6 3 1 +BITMAP +8C40 +8C40 +4080 +6180 +3F00 +1E00 +ENDCHAR +STARTCHAR uni01D112 +ENCODING 119058 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 4 3 4 +BITMAP +C0 +C0 +40 +80 +ENDCHAR +STARTCHAR uni01D113 +ENCODING 119059 +BBX 15 10 1 0 +BITMAP +0066 +00CC +0198 +0330 +0660 +0CC0 +1980 +3300 +6600 +CC00 +ENDCHAR +STARTCHAR uni01D114 +ENCODING 119060 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 15 2 -2 +BITMAP +18 +20 +60 +60 +60 +60 +60 +C0 +60 +60 +60 +60 +60 +20 +18 +ENDCHAR +STARTCHAR uni01D115 +ENCODING 119061 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 16 2 -2 +BITMAP +10 +20 +40 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +40 +20 +10 +ENDCHAR +STARTCHAR uni01D116 +ENCODING 119062 +BBX 16 1 0 6 +BITMAP +FFFF +ENDCHAR +STARTCHAR uni01D117 +ENCODING 119063 +BBX 16 4 0 4 +BITMAP +FFFF +0000 +0000 +FFFF +ENDCHAR +STARTCHAR uni01D118 +ENCODING 119064 +BBX 16 7 0 3 +BITMAP +FFFF +0000 +0000 +FFFF +0000 +0000 +FFFF +ENDCHAR +STARTCHAR uni01D119 +ENCODING 119065 +BBX 16 10 0 1 +BITMAP +FFFF +0000 +0000 +FFFF +0000 +0000 +FFFF +0000 +0000 +FFFF +ENDCHAR +STARTCHAR uni01D11A +ENCODING 119066 +BBX 16 13 0 0 +BITMAP +FFFF +0000 +0000 +FFFF +0000 +0000 +FFFF +0000 +0000 +FFFF +0000 +0000 +FFFF +ENDCHAR +STARTCHAR uni01D11B +ENCODING 119067 +BBX 16 16 0 -2 +BITMAP +FFFF +0000 +0000 +FFFF +0000 +0000 +FFFF +0000 +0000 +FFFF +0000 +0000 +FFFF +0000 +0000 +FFFF +ENDCHAR +STARTCHAR uni01D11C +ENCODING 119068 +BBX 16 13 0 0 +BITMAP +FFFF +9249 +9249 +FFFF +9249 +9249 +FFFF +9249 +9249 +FFFF +9249 +9249 +FFFF +ENDCHAR +STARTCHAR uni01D11D +ENCODING 119069 +BBX 10 13 3 0 +BITMAP +FFC0 +9240 +9240 +FFC0 +9240 +9240 +FFC0 +9240 +9240 +FFC0 +9240 +9240 +FFC0 +ENDCHAR +STARTCHAR uni01D11E +ENCODING 119070 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 1 -2 +BITMAP +10 +28 +28 +28 +28 +10 +30 +5C +AA +AA +8A +7C +04 +34 +34 +18 +ENDCHAR +STARTCHAR uni01D11F +ENCODING 119071 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 1 -2 +BITMAP +10 +28 +10 +28 +10 +28 +28 +10 +30 +5C +AA +AA +8A +7C +04 +18 +ENDCHAR +STARTCHAR uni01D120 +ENCODING 119072 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 16 1 -2 +BITMAP +10 +28 +28 +10 +30 +5C +AA +AA +8A +7C +04 +18 +28 +10 +28 +10 +ENDCHAR +STARTCHAR uni01D121 +ENCODING 119073 +BBX 11 15 2 -1 +BITMAP +D380 +D4C0 +D660 +D660 +D060 +D0C0 +D300 +D400 +D300 +D0C0 +D060 +D660 +D660 +D4C0 +D380 +ENDCHAR +STARTCHAR uni01D122 +ENCODING 119074 +BBX 12 12 2 0 +BITMAP +3E00 +4380 +8190 +E1C0 +F1C0 +61C0 +0190 +0300 +0200 +0400 +1800 +6000 +ENDCHAR +STARTCHAR uni01D123 +ENCODING 119075 +BBX 12 16 2 -2 +BITMAP +0800 +1400 +0800 +1400 +0800 +3E00 +4380 +8190 +E1C0 +F1C0 +61C0 +0190 +0300 +0200 +0C00 +7000 +ENDCHAR +STARTCHAR uni01D124 +ENCODING 119076 +BBX 12 16 2 -2 +BITMAP +3E00 +4380 +8190 +E1C0 +F1C0 +61C0 +0190 +0300 +0200 +0400 +1800 +6400 +0A00 +0400 +0A00 +0400 +ENDCHAR +STARTCHAR uni01D125 +ENCODING 119077 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 0 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni01D126 +ENCODING 119078 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 0 +BITMAP +F0 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +F0 +ENDCHAR +STARTCHAR uni01D129 +ENCODING 119081 +BBX 15 10 1 1 +BITMAP +8002 +8002 +8002 +FFFE +FFFE +FFFE +FFFE +8002 +8002 +8002 +ENDCHAR +STARTCHAR uni01D12A +ENCODING 119082 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 2 3 +BITMAP +D8 +D8 +20 +D8 +D8 +ENDCHAR +STARTCHAR uni01D12B +ENCODING 119083 +BBX 12 12 2 0 +BITMAP +8200 +8200 +8200 +8200 +8200 +BAE0 +CF30 +8E30 +8A20 +9240 +A280 +C300 +ENDCHAR +STARTCHAR uni01D12C +ENCODING 119084 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +40 +E0 +40 +40 +40 +40 +5C +66 +46 +44 +48 +50 +60 +ENDCHAR +STARTCHAR uni01D12D +ENCODING 119085 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 0 -2 +BITMAP +40 +40 +40 +40 +40 +5C +66 +46 +44 +48 +50 +60 +40 +E0 +40 +ENDCHAR +STARTCHAR uni01D12E +ENCODING 119086 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +40 +E0 +40 +40 +4E +7E +72 +42 +4E +7E +72 +02 +02 +ENDCHAR +STARTCHAR uni01D12F +ENCODING 119087 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -2 +BITMAP +80 +80 +9C +FC +E4 +84 +9C +FC +E4 +04 +04 +0E +04 +ENDCHAR +STARTCHAR uni01D130 +ENCODING 119088 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 15 1 -1 +BITMAP +08 +1C +08 +48 +4C +7C +F8 +C8 +48 +4C +7C +F8 +C8 +48 +40 +ENDCHAR +STARTCHAR uni01D131 +ENCODING 119089 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +08 +48 +4C +7C +F8 +C8 +48 +4C +7C +F8 +C8 +48 +5C +08 +ENDCHAR +STARTCHAR uni01D132 +ENCODING 119090 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 0 -1 +BITMAP +20 +60 +A4 +F4 +26 +3E +7C +64 +24 +26 +3E +7C +64 +24 +20 +ENDCHAR +STARTCHAR uni01D133 +ENCODING 119091 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 0 +BITMAP +40 +C0 +40 +E0 +40 +40 +40 +5C +66 +46 +44 +48 +50 +60 +ENDCHAR +STARTCHAR uni01D134 +ENCODING 119092 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3E +61 +C3 +C3 +C0 +C0 +C0 +C0 +61 +3E +ENDCHAR +STARTCHAR uni01D135 +ENCODING 119093 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -2 +BITMAP +08 +08 +3E +69 +CB +CB +C8 +C8 +C8 +C8 +69 +3E +08 +08 +ENDCHAR +STARTCHAR uni01D136 +ENCODING 119094 +BBX 13 8 1 0 +BITMAP +7298 +8AA8 +8AA8 +7118 +8800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni01D137 +ENCODING 119095 +BBX 13 10 1 0 +BITMAP +0020 +0020 +72B0 +8AA8 +8AA8 +7130 +8800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni01D138 +ENCODING 119096 +BBX 16 8 0 0 +BITMAP +5CA3 +D155 +5155 +5953 +4400 +4400 +5400 +4800 +ENDCHAR +STARTCHAR uni01D139 +ENCODING 119097 +BBX 16 10 0 0 +BITMAP +0004 +0004 +5CA6 +D155 +5155 +5956 +4400 +4400 +5400 +4800 +ENDCHAR +STARTCHAR uni01D13A +ENCODING 119098 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 4 0 4 +BITMAP +FF +3C +3C +FF +ENDCHAR +STARTCHAR uni01D13B +ENCODING 119099 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 4 +BITMAP +FF +3C +3C +ENDCHAR +STARTCHAR uni01D13C +ENCODING 119100 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 4 +BITMAP +3C +3C +FF +ENDCHAR +STARTCHAR uni01D13D +ENCODING 119101 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 0 +BITMAP +40 +20 +30 +70 +F0 +E0 +C0 +40 +60 +E0 +90 +80 +40 +ENDCHAR +STARTCHAR uni01D13E +ENCODING 119102 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 -1 +BITMAP +08 +D0 +F0 +10 +20 +20 +20 +ENDCHAR +STARTCHAR uni01D13F +ENCODING 119103 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +04 +68 +78 +08 +D0 +F0 +10 +20 +20 +20 +ENDCHAR +STARTCHAR uni01D140 +ENCODING 119104 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -1 +BITMAP +02 +34 +3C +04 +68 +78 +08 +D0 +F0 +10 +20 +20 +20 +ENDCHAR +STARTCHAR uni01D141 +ENCODING 119105 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +01 +1A +1E +02 +34 +3C +04 +68 +78 +08 +D0 +F0 +10 +20 +20 +20 +ENDCHAR +STARTCHAR uni01D142 +ENCODING 119106 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 16 0 -2 +BITMAP +0D +0F +01 +1A +1E +02 +34 +3C +04 +68 +78 +08 +D0 +F0 +10 +20 +ENDCHAR +STARTCHAR uni01D143 +ENCODING 119107 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 0 0 +BITMAP +88 +50 +20 +50 +88 +ENDCHAR +STARTCHAR uni01D144 +ENCODING 119108 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 0 0 +BITMAP +20 +20 +F8 +20 +20 +ENDCHAR +STARTCHAR uni01D145 +ENCODING 119109 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +38 +44 +AA +92 +AA +44 +38 +ENDCHAR +STARTCHAR uni01D146 +ENCODING 119110 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 0 +BITMAP +F0 +90 +90 +F0 +ENDCHAR +STARTCHAR uni01D147 +ENCODING 119111 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 0 +BITMAP +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni01D148 +ENCODING 119112 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 0 0 +BITMAP +20 +50 +50 +88 +F8 +ENDCHAR +STARTCHAR uni01D149 +ENCODING 119113 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 0 0 +BITMAP +20 +70 +70 +F8 +F8 +ENDCHAR +STARTCHAR uni01D14A +ENCODING 119114 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 0 +BITMAP +80 +C0 +A0 +F0 +ENDCHAR +STARTCHAR uni01D14B +ENCODING 119115 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 0 +BITMAP +80 +C0 +E0 +F0 +ENDCHAR +STARTCHAR uni01D14C +ENCODING 119116 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 0 +BITMAP +10 +30 +50 +F0 +ENDCHAR +STARTCHAR uni01D14D +ENCODING 119117 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 0 +BITMAP +10 +30 +70 +F0 +ENDCHAR +STARTCHAR uni01D14E +ENCODING 119118 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 0 0 +BITMAP +F8 +88 +50 +50 +20 +ENDCHAR +STARTCHAR uni01D14F +ENCODING 119119 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 0 0 +BITMAP +F8 +F8 +70 +70 +20 +ENDCHAR +STARTCHAR uni01D150 +ENCODING 119120 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 0 +BITMAP +F0 +50 +30 +10 +ENDCHAR +STARTCHAR uni01D151 +ENCODING 119121 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 0 +BITMAP +F0 +70 +30 +10 +ENDCHAR +STARTCHAR uni01D152 +ENCODING 119122 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 0 +BITMAP +F0 +90 +90 +60 +ENDCHAR +STARTCHAR uni01D153 +ENCODING 119123 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 1 0 +BITMAP +F0 +F0 +F0 +60 +ENDCHAR +STARTCHAR uni01D154 +ENCODING 119124 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 0 0 +BITMAP +70 +88 +88 +50 +50 +20 +ENDCHAR +STARTCHAR uni01D155 +ENCODING 119125 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 6 0 0 +BITMAP +70 +F8 +F8 +70 +70 +20 +ENDCHAR +STARTCHAR uni01D156 +ENCODING 119126 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 0 0 +BITMAP +48 +84 +84 +84 +48 +ENDCHAR +STARTCHAR uni01D157 +ENCODING 119127 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 1 0 +BITMAP +70 +90 +E0 +ENDCHAR +STARTCHAR uni01D158 +ENCODING 119128 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 1 0 +BITMAP +70 +F0 +E0 +ENDCHAR +STARTCHAR uni01D159 +ENCODING 119129 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +AAA4 +3AA5 +BAA4 +2AA5 +ABB6 +0001 +8000 +564D +D4AA +76EB +D4AA +56AD +8000 +5555 +ENDCHAR +STARTCHAR uni01D15A +ENCODING 119130 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +F0 +90 +90 +90 +90 +90 +90 +90 +90 +F0 +ENDCHAR +STARTCHAR uni01D15B +ENCODING 119131 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 2 0 +BITMAP +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni01D15C +ENCODING 119132 +BBX 10 5 3 -1 +BITMAP +A140 +BD40 +B340 +AF40 +A140 +ENDCHAR +STARTCHAR uni01D15D +ENCODING 119133 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 1 0 +BITMAP +E0 +90 +70 +ENDCHAR +STARTCHAR uni01D15E +ENCODING 119134 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +70 +90 +E0 +ENDCHAR +STARTCHAR uni01D15F +ENCODING 119135 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +70 +F0 +E0 +ENDCHAR +STARTCHAR uni01D160 +ENCODING 119136 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +18 +14 +14 +10 +10 +10 +70 +F0 +E0 +ENDCHAR +STARTCHAR uni01D161 +ENCODING 119137 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +18 +14 +1C +14 +14 +10 +70 +F0 +E0 +ENDCHAR +STARTCHAR uni01D162 +ENCODING 119138 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +10 +18 +14 +1C +14 +1C +14 +74 +F0 +E0 +ENDCHAR +STARTCHAR uni01D163 +ENCODING 119139 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +10 +18 +14 +1C +14 +1C +14 +1C +74 +F4 +E0 +ENDCHAR +STARTCHAR uni01D164 +ENCODING 119140 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +10 +18 +14 +1C +14 +1C +14 +1C +14 +1C +74 +F4 +E0 +ENDCHAR +STARTCHAR uni01D165 +ENCODING 119141 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 7 -4 3 +BITMAP +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D166 +ENCODING 119142 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -6 3 +BITMAP +20 +A8 +70 +20 +70 +A8 +20 +ENDCHAR +STARTCHAR uni01D167 +ENCODING 119143 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 2 -6 5 +BITMAP +30 +C0 +ENDCHAR +STARTCHAR uni01D168 +ENCODING 119144 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 4 -6 4 +BITMAP +30 +C0 +30 +C0 +ENDCHAR +STARTCHAR uni01D169 +ENCODING 119145 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 6 -6 3 +BITMAP +30 +C0 +30 +C0 +30 +C0 +ENDCHAR +STARTCHAR uni01D16A +ENCODING 119146 +BBX 15 4 1 4 +BITMAP +003E +07FE +FFE0 +FC00 +ENDCHAR +STARTCHAR uni01D16B +ENCODING 119147 +BBX 15 8 1 2 +BITMAP +003E +07FE +FFE0 +FC00 +003E +07FE +FFE0 +FC00 +ENDCHAR +STARTCHAR uni01D16C +ENCODING 119148 +BBX 15 12 1 0 +BITMAP +003E +07FE +FFE0 +FC00 +003E +07FE +FFE0 +FC00 +003E +07FE +FFE0 +FC00 +ENDCHAR +STARTCHAR uni01D16D +ENCODING 119149 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -2 1 +BITMAP +80 +ENDCHAR +STARTCHAR uni01D16E +ENCODING 119150 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -3 6 +BITMAP +80 +40 +40 +ENDCHAR +STARTCHAR uni01D16F +ENCODING 119151 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 5 -3 4 +BITMAP +80 +40 +C0 +40 +40 +ENDCHAR +STARTCHAR uni01D170 +ENCODING 119152 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 7 -3 2 +BITMAP +80 +40 +C0 +40 +C0 +40 +40 +ENDCHAR +STARTCHAR uni01D171 +ENCODING 119153 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 9 -3 1 +BITMAP +80 +40 +C0 +40 +C0 +40 +C0 +40 +40 +ENDCHAR +STARTCHAR uni01D172 +ENCODING 119154 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 11 -3 1 +BITMAP +80 +40 +C0 +40 +C0 +40 +C0 +40 +C0 +40 +40 +ENDCHAR +STARTCHAR uni01D173 +ENCODING 119155 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +B398 +2A21 +B32C +2A25 +B398 +0001 +8000 +6CA3 +D976 +6DEB +D96A +6D63 +8000 +5555 +ENDCHAR +STARTCHAR uni01D174 +ENCODING 119156 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +BA58 +2355 +B2D4 +2255 +BA58 +0001 +8000 +6CA3 +D976 +6DEB +D96A +6D63 +8000 +5555 +ENDCHAR +STARTCHAR uni01D175 +ENCODING 119157 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +B398 +2A21 +B32C +2A25 +B398 +0001 +8000 +3BB9 +9120 +1131 +9120 +13B9 +8000 +5555 +ENDCHAR +STARTCHAR uni01D176 +ENCODING 119158 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +BA58 +2355 +B2D4 +2255 +BA58 +0001 +8000 +3BB9 +9120 +1131 +9120 +13B9 +8000 +5555 +ENDCHAR +STARTCHAR uni01D177 +ENCODING 119159 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +B398 +2A21 +B32C +2A25 +B398 +0001 +8000 +34AD +A4AA +34AD +94AA +364B +8000 +5555 +ENDCHAR +STARTCHAR uni01D178 +ENCODING 119160 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +BA58 +2355 +B2D4 +2255 +BA58 +0001 +8000 +34AD +A4AA +34AD +94AA +364B +8000 +5555 +ENDCHAR +STARTCHAR uni01D179 +ENCODING 119161 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +B398 +2A21 +B32C +2A25 +B398 +0001 +8000 +32B1 +AAA8 +33B1 +A2A8 +22A9 +8000 +5555 +ENDCHAR +STARTCHAR uni01D17A +ENCODING 119162 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +BA58 +2355 +B2D4 +2255 +BA58 +0001 +8000 +32B1 +AAA8 +33B1 +A2A8 +22A9 +8000 +5555 +ENDCHAR +STARTCHAR uni01D17B +ENCODING 119163 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 3 -6 -2 +BITMAP +80 +40 +80 +ENDCHAR +STARTCHAR uni01D17C +ENCODING 119164 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 -6 -2 +BITMAP +80 +ENDCHAR +STARTCHAR uni01D17D +ENCODING 119165 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 1 -7 -2 +BITMAP +F0 +ENDCHAR +STARTCHAR uni01D17E +ENCODING 119166 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 2 -6 -2 +BITMAP +80 +80 +ENDCHAR +STARTCHAR uni01D17F +ENCODING 119167 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 2 -7 -2 +BITMAP +A0 +40 +ENDCHAR +STARTCHAR uni01D180 +ENCODING 119168 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -7 -2 +BITMAP +40 +00 +A0 +40 +ENDCHAR +STARTCHAR uni01D181 +ENCODING 119169 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 5 -6 -2 +BITMAP +80 +00 +80 +40 +80 +ENDCHAR +STARTCHAR uni01D182 +ENCODING 119170 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -8 -2 +BITMAP +20 +00 +F8 +ENDCHAR +STARTCHAR uni01D183 +ENCODING 119171 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 13 3 1 +BITMAP +40 +20 +40 +80 +40 +20 +40 +80 +40 +20 +40 +80 +40 +ENDCHAR +STARTCHAR uni01D184 +ENCODING 119172 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 16 3 -2 +BITMAP +40 +20 +40 +80 +40 +20 +40 +80 +40 +20 +40 +80 +40 +40 +E0 +40 +ENDCHAR +STARTCHAR uni01D185 +ENCODING 119173 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -8 9 +BITMAP +02 +02 +84 +78 +ENDCHAR +STARTCHAR uni01D186 +ENCODING 119174 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -8 9 +BITMAP +78 +84 +02 +02 +ENDCHAR +STARTCHAR uni01D187 +ENCODING 119175 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -7 10 +BITMAP +C0 +B0 +88 +ENDCHAR +STARTCHAR uni01D188 +ENCODING 119176 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 -7 10 +BITMAP +40 +A8 +10 +ENDCHAR +STARTCHAR uni01D189 +ENCODING 119177 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 4 -7 10 +BITMAP +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D18A +ENCODING 119178 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 3 -14 -2 +BITMAP +8A20 +4040 +3F80 +ENDCHAR +STARTCHAR uni01D18B +ENCODING 119179 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 3 -14 -2 +BITMAP +9520 +4040 +3F80 +ENDCHAR +STARTCHAR uni01D18C +ENCODING 119180 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 4 +BITMAP +2E +33 +30 +60 +C0 +ENDCHAR +STARTCHAR uni01D18D +ENCODING 119181 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 4 +BITMAP +0E +30 +18 +18 +E0 +ENDCHAR +STARTCHAR uni01D18E +ENCODING 119182 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 4 +BITMAP +3E +06 +18 +60 +F8 +ENDCHAR +STARTCHAR uni01D18F +ENCODING 119183 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 2 +BITMAP +2E +39 +31 +32 +7C +60 +C0 +ENDCHAR +STARTCHAR uni01D190 +ENCODING 119184 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 5 0 4 +BITMAP +9E +69 +69 +D2 +D2 +ENDCHAR +STARTCHAR uni01D191 +ENCODING 119185 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 2 +BITMAP +06 +19 +18 +7E +18 +18 +30 +30 +C0 +ENDCHAR +STARTCHAR uni01D192 +ENCODING 119186 +BBX 15 7 0 3 +BITMAP +001E +01E0 +1E00 +E000 +1E00 +01E0 +001E +ENDCHAR +STARTCHAR uni01D193 +ENCODING 119187 +BBX 15 7 0 3 +BITMAP +F000 +0F00 +00F0 +000E +00F0 +0F00 +F000 +ENDCHAR +STARTCHAR uni01D194 +ENCODING 119188 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +28 +30 +28 +68 +20 +60 +E0 +C0 +ENDCHAR +STARTCHAR uni01D195 +ENCODING 119189 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +20 +30 +28 +28 +20 +60 +E0 +C0 +ENDCHAR +STARTCHAR uni01D196 +ENCODING 119190 +BBX 15 7 0 4 +BITMAP +0600 +0C00 +7F5C +3066 +60C0 +C4C0 +7980 +ENDCHAR +STARTCHAR uni01D197 +ENCODING 119191 +BBX 10 5 3 4 +BITMAP +7180 +99C0 +8C40 +E640 +6380 +ENDCHAR +STARTCHAR uni01D198 +ENCODING 119192 +BBX 10 5 3 4 +BITMAP +6380 +E640 +8C40 +99C0 +7180 +ENDCHAR +STARTCHAR uni01D199 +ENCODING 119193 +BBX 11 7 2 3 +BITMAP +0400 +74C0 +9CE0 +8E20 +E720 +65C0 +0400 +ENDCHAR +STARTCHAR uni01D19A +ENCODING 119194 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +70 +C8 +C8 +18 +30 +60 +C0 +98 +98 +70 +ENDCHAR +STARTCHAR uni01D19B +ENCODING 119195 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 5 2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +60 +ENDCHAR +STARTCHAR uni01D19C +ENCODING 119196 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 1 +BITMAP +10 +38 +5C +8E +07 +02 +ENDCHAR +STARTCHAR uni01D19D +ENCODING 119197 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 1 +BITMAP +10 +38 +78 +9D +0E +04 +ENDCHAR +STARTCHAR uni01D19E +ENCODING 119198 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 8 0 4 +BITMAP +20 +10 +10 +10 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni01D19F +ENCODING 119199 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 7 0 -2 +BITMAP +80 +40 +20 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni01D1A0 +ENCODING 119200 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 12 0 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D1A1 +ENCODING 119201 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 1 +BITMAP +70 +F8 +CC +C6 +C3 +C9 +70 +ENDCHAR +STARTCHAR uni01D1A2 +ENCODING 119202 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +78 +E4 +C0 +C0 +C0 +C0 +C2 +64 +38 +ENDCHAR +STARTCHAR uni01D1A3 +ENCODING 119203 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 4 +BITMAP +3C +42 +81 +ENDCHAR +STARTCHAR uni01D1A4 +ENCODING 119204 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 0 +BITMAP +81 +42 +3C +ENDCHAR +STARTCHAR uni01D1A5 +ENCODING 119205 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 2 2 +BITMAP +20 +40 +80 +80 +80 +40 +3C +ENDCHAR +STARTCHAR uni01D1A6 +ENCODING 119206 +BBX 11 10 2 0 +BITMAP +87E0 +8400 +8400 +8400 +FC00 +8400 +8400 +8400 +8400 +8400 +ENDCHAR +STARTCHAR uni01D1A7 +ENCODING 119207 +BBX 11 10 2 0 +BITMAP +87E0 +C400 +C400 +A400 +A400 +9400 +9400 +8C00 +8C00 +8400 +ENDCHAR +STARTCHAR uni01D1A8 +ENCODING 119208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni01D1A9 +ENCODING 119209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 2 +BITMAP +04 +38 +58 +68 +70 +80 +ENDCHAR +STARTCHAR uni01D1AA +ENCODING 119210 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 4 -7 10 +BITMAP +F8 +F8 +88 +88 +ENDCHAR +STARTCHAR uni01D1AB +ENCODING 119211 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 4 -6 10 +BITMAP +A0 +A0 +40 +40 +ENDCHAR +STARTCHAR uni01D1AC +ENCODING 119212 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 3 3 -6 11 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni01D1AD +ENCODING 119213 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 10 -8 4 +BITMAP +20 +20 +20 +20 +20 +70 +A8 +A8 +88 +70 +ENDCHAR +STARTCHAR uni01D1AE +ENCODING 119214 +BBX 16 10 0 0 +BITMAP +3C00 +5270 +9488 +9004 +48C2 +092A +09D2 +0D34 +12C9 +2000 +ENDCHAR +STARTCHAR uni01D1AF +ENCODING 119215 +BBX 11 11 2 0 +BITMAP +0E00 +6EC0 +64C0 +1500 +CE60 +FFE0 +CE60 +1500 +64C0 +6EC0 +0E00 +ENDCHAR +STARTCHAR uni01D1B0 +ENCODING 119216 +BBX 15 5 0 4 +BITMAP +0100 +0280 +0280 +0440 +FC7E +ENDCHAR +STARTCHAR uni01D1B1 +ENCODING 119217 +BBX 13 12 1 0 +BITMAP +0008 +0078 +0040 +0040 +03C0 +0200 +0200 +1E00 +1000 +1000 +F000 +8000 +ENDCHAR +STARTCHAR uni01D1B2 +ENCODING 119218 +BBX 12 13 2 0 +BITMAP +C000 +4000 +4000 +7800 +0800 +0800 +0F00 +0100 +0100 +01E0 +0020 +0020 +0030 +ENDCHAR +STARTCHAR uni01D1B3 +ENCODING 119219 +BBX 8 4 4 7 +BITMAP +3C +42 +81 +FF +ENDCHAR +STARTCHAR uni01D1B4 +ENCODING 119220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 2 +BITMAP +38 +54 +92 +FE +92 +54 +38 +ENDCHAR +STARTCHAR uni01D1B5 +ENCODING 119221 +BBX 11 11 2 0 +BITMAP +1F00 +2080 +4E40 +9520 +A4A0 +BFA0 +A4A0 +9520 +4E40 +2080 +1F00 +ENDCHAR +STARTCHAR uni01D1B6 +ENCODING 119222 +BBX 15 14 0 0 +BITMAP +0002 +0002 +0002 +0002 +0002 +0002 +0002 +0002 +8002 +FFFE +8002 +8002 +FFFE +8002 +ENDCHAR +STARTCHAR uni01D1B7 +ENCODING 119223 +BBX 10 14 3 0 +BITMAP +0040 +0040 +0040 +0040 +0040 +0040 +0040 +0040 +8040 +FFC0 +8040 +8040 +FFC0 +8040 +ENDCHAR +STARTCHAR uni01D1B8 +ENCODING 119224 +BBX 10 6 3 0 +BITMAP +8040 +FFC0 +8040 +8040 +FFC0 +8040 +ENDCHAR +STARTCHAR uni01D1B9 +ENCODING 119225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 3 0 +BITMAP +40 +A0 +40 +ENDCHAR +STARTCHAR uni01D1BA +ENCODING 119226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 3 0 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni01D1BB +ENCODING 119227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 0 +BITMAP +40 +40 +40 +40 +40 +40 +40 +40 +A0 +40 +ENDCHAR +STARTCHAR uni01D1BC +ENCODING 119228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 10 3 0 +BITMAP +40 +40 +40 +40 +40 +40 +40 +40 +E0 +40 +ENDCHAR +STARTCHAR uni01D1BD +ENCODING 119229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +40 +60 +50 +50 +40 +40 +40 +40 +A0 +40 +ENDCHAR +STARTCHAR uni01D1BE +ENCODING 119230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +40 +60 +50 +50 +40 +40 +40 +40 +E0 +40 +ENDCHAR +STARTCHAR uni01D1BF +ENCODING 119231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +40 +60 +50 +70 +50 +50 +40 +40 +A0 +40 +ENDCHAR +STARTCHAR uni01D1C0 +ENCODING 119232 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 3 0 +BITMAP +40 +60 +50 +70 +50 +50 +40 +40 +E0 +40 +ENDCHAR +STARTCHAR uni01D1C1 +ENCODING 119233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 15 3 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D1C2 +ENCODING 119234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 3 4 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D1C3 +ENCODING 119235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 5 3 9 +BITMAP +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D1C4 +ENCODING 119236 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 3 3 11 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni01D1C5 +ENCODING 119237 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 3 3 11 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR uni01D1C6 +ENCODING 119238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 3 11 +BITMAP +E0 +80 +80 +ENDCHAR +STARTCHAR uni01D1C7 +ENCODING 119239 +BBX 11 11 2 0 +BITMAP +1F00 +2080 +4040 +8020 +8020 +8420 +8020 +8020 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni01D1C8 +ENCODING 119240 +BBX 11 11 2 0 +BITMAP +1F00 +2080 +4040 +8020 +8020 +8020 +8020 +8020 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni01D1C9 +ENCODING 119241 +BBX 11 15 2 -2 +BITMAP +0400 +0400 +1F00 +2480 +4440 +8420 +8420 +8420 +8420 +8420 +4440 +2480 +1F00 +0400 +0400 +ENDCHAR +STARTCHAR uni01D1CA +ENCODING 119242 +BBX 10 11 2 0 +BITMAP +1F00 +2080 +4040 +8000 +8000 +8400 +8000 +8000 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni01D1CB +ENCODING 119243 +BBX 10 11 2 0 +BITMAP +1F00 +2080 +4040 +8000 +8000 +8000 +8000 +8000 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni01D1CC +ENCODING 119244 +BBX 10 11 3 0 +BITMAP +3E00 +4100 +8080 +0040 +0040 +0040 +0040 +0040 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni01D1CD +ENCODING 119245 +BBX 10 15 2 -2 +BITMAP +0400 +0400 +1F00 +2480 +4440 +8400 +8400 +8400 +8400 +8400 +4440 +2480 +1F00 +0400 +0400 +ENDCHAR +STARTCHAR uni01D1CE +ENCODING 119246 +BBX 10 15 3 -2 +BITMAP +0800 +0800 +3E00 +4900 +8880 +0840 +0840 +0840 +0840 +0840 +8880 +4900 +3E00 +0800 +0800 +ENDCHAR +STARTCHAR uni01D1CF +ENCODING 119247 +BBX 13 9 1 0 +BITMAP +8888 +4510 +2220 +1540 +0880 +1540 +2220 +4510 +8888 +ENDCHAR +STARTCHAR uni01D1D0 +ENCODING 119248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 2 2 +BITMAP +E0 +E0 +E0 +80 +80 +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni01D1D1 +ENCODING 119249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 1 +BITMAP +0E +0E +EE +E8 +E8 +2E +2E +2E +20 +20 +ENDCHAR +STARTCHAR uni01D1D2 +ENCODING 119250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +80 +80 +80 +80 +80 +80 +C0 +B0 +90 +D0 +30 +ENDCHAR +STARTCHAR uni01D1D3 +ENCODING 119251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 13 2 0 +BITMAP +E0 +E0 +E0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01D1D4 +ENCODING 119252 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 7 2 2 +BITMAP +E0 +E0 +E0 +20 +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni01D1D5 +ENCODING 119253 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 0 +BITMAP +E0 +E0 +E0 +9C +9C +9C +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D1D6 +ENCODING 119254 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +1C +1C +1C +04 +1C +1C +1C +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni01D1D7 +ENCODING 119255 +BBX 10 13 3 0 +BITMAP +E000 +E400 +EE00 +2480 +21C0 +2080 +2000 +2000 +2000 +2000 +2000 +2000 +2000 +ENDCHAR +STARTCHAR uni01D1D8 +ENCODING 119256 +BBX 9 6 3 3 +BITMAP +1C00 +1C00 +1C00 +E380 +E380 +E380 +ENDCHAR +STARTCHAR uni01D1D9 +ENCODING 119257 +BBX 12 10 2 0 +BITMAP +8070 +C070 +E070 +F010 +B810 +9E10 +8F90 +83F0 +80F0 +8030 +ENDCHAR +STARTCHAR uni01D1DA +ENCODING 119258 +BBX 16 10 0 0 +BITMAP +8038 +C038 +E038 +F027 +B827 +9E27 +8FA0 +83E0 +80E0 +8020 +ENDCHAR +STARTCHAR uni01D1DB +ENCODING 119259 +BBX 10 13 3 0 +BITMAP +0E00 +0E00 +0E00 +E9C0 +E9C0 +E9C0 +2800 +E800 +E800 +E800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni01D1DC +ENCODING 119260 +BBX 13 10 1 0 +BITMAP +2038 +3038 +3838 +3C08 +2E08 +2788 +23E8 +E0F8 +E038 +E008 +ENDCHAR +STARTCHAR uni01D1DD +ENCODING 119261 +BBX 10 7 3 0 +BITMAP +E000 +E000 +E400 +2E00 +E480 +E1C0 +E080 +ENDCHAR +STARTCHAR uni01D1DE +ENCODING 119262 +BBX 6 11 2 -1 +BITMAP +F0 +F0 +F0 +10 +10 +10 +10 +38 +7C +38 +10 +ENDCHAR +STARTCHAR uni01D1DF +ENCODING 119263 +BBX 5 14 1 -1 +BITMAP +38 +40 +88 +88 +90 +50 +50 +20 +20 +50 +50 +48 +48 +30 +ENDCHAR +STARTCHAR uni01D1E0 +ENCODING 119264 +BBX 4 13 1 0 +BITMAP +10 +10 +F0 +F0 +F0 +10 +10 +10 +F0 +F0 +F0 +10 +10 +ENDCHAR +STARTCHAR uni01D1E1 +ENCODING 119265 +BBX 14 11 1 0 +BITMAP +A014 +A014 +BFF4 +BFF4 +A014 +A014 +A014 +BFF4 +BFF4 +A014 +A014 +ENDCHAR +STARTCHAR uni01D1E2 +ENCODING 119266 +BBX 5 10 1 0 +BITMAP +20 +70 +F8 +70 +20 +20 +70 +F8 +70 +20 +ENDCHAR +STARTCHAR uni01D1E3 +ENCODING 119267 +BBX 5 13 2 0 +BITMAP +18 +18 +18 +F8 +F8 +F8 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D1E4 +ENCODING 119268 +BBX 5 13 2 0 +BITMAP +F8 +F8 +F8 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D1E5 +ENCODING 119269 +BBX 5 13 2 0 +BITMAP +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +F8 +F8 +F8 +ENDCHAR +STARTCHAR uni01D1E6 +ENCODING 119270 +BBX 6 12 1 0 +BITMAP +E0 +E0 +E0 +3C +3C +3C +0C +0C +0C +0C +0C +0C +ENDCHAR +STARTCHAR uni01D1E7 +ENCODING 119271 +BBX 6 13 1 0 +BITMAP +CC +CC +CC +CC +6C +6C +3C +1C +0C +0C +7C +7C +7C +ENDCHAR +STARTCHAR uni01D1E8 +ENCODING 119272 +BBX 5 12 1 -1 +BITMAP +20 +20 +40 +40 +80 +80 +88 +88 +88 +48 +50 +20 +ENDCHAR +STARTCHAR uni01D200 +ENCODING 119296 +BBX 10 7 3 0 +BITMAP +8F80 +9040 +E040 +0040 +E040 +9040 +8F80 +ENDCHAR +STARTCHAR uni01D201 +ENCODING 119297 +BBX 10 7 3 0 +BITMAP +F800 +0400 +0400 +FFC0 +0400 +0400 +F800 +ENDCHAR +STARTCHAR uni01D202 +ENCODING 119298 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +48 +48 +30 +FC +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni01D203 +ENCODING 119299 +BBX 10 6 3 0 +BITMAP +0380 +0440 +0440 +0440 +0440 +FFC0 +ENDCHAR +STARTCHAR uni01D204 +ENCODING 119300 +BBX 10 7 3 0 +BITMAP +00C0 +0300 +0400 +F800 +0400 +0300 +00C0 +ENDCHAR +STARTCHAR uni01D205 +ENCODING 119301 +BBX 10 7 3 0 +BITMAP +0040 +0040 +0040 +FFC0 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni01D206 +ENCODING 119302 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +04 +78 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni01D207 +ENCODING 119303 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +F8 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni01D208 +ENCODING 119304 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +82 +82 +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni01D209 +ENCODING 119305 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +70 +88 +88 +88 +88 +70 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01D20A +ENCODING 119306 +BBX 11 6 2 0 +BITMAP +8420 +C620 +A520 +94A0 +8C60 +8420 +ENDCHAR +STARTCHAR uni01D20B +ENCODING 119307 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +8C +8C +94 +94 +A4 +A4 +C4 +C4 +84 +ENDCHAR +STARTCHAR uni01D20C +ENCODING 119308 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +B4 +B4 +CC +CC +84 +84 +ENDCHAR +STARTCHAR uni01D20D +ENCODING 119309 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +44 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni01D20E +ENCODING 119310 +BBX 10 6 3 0 +BITMAP +8040 +4080 +2100 +1200 +0C00 +FFC0 +ENDCHAR +STARTCHAR uni01D20F +ENCODING 119311 +BBX 10 10 3 0 +BITMAP +8000 +4000 +2000 +1000 +0800 +0400 +0200 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uni01D210 +ENCODING 119312 +BBX 11 6 3 0 +BITMAP +3F80 +4440 +8420 +8420 +8420 +8420 +ENDCHAR +STARTCHAR uni01D211 +ENCODING 119313 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +04 +04 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01D212 +ENCODING 119314 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +08 +08 +10 +20 +40 +40 +80 +80 +ENDCHAR +STARTCHAR uni01D213 +ENCODING 119315 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D214 +ENCODING 119316 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +82 +82 +44 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni01D215 +ENCODING 119317 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni01D216 +ENCODING 119318 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni01D217 +ENCODING 119319 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +48 +48 +30 +ENDCHAR +STARTCHAR uni01D218 +ENCODING 119320 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +7C +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni01D219 +ENCODING 119321 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +92 +92 +54 +54 +38 +38 +54 +54 +92 +92 +ENDCHAR +STARTCHAR uni01D21A +ENCODING 119322 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3C +42 +42 +42 +FF +42 +42 +42 +42 +3C +ENDCHAR +STARTCHAR uni01D21B +ENCODING 119323 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +10 +28 +44 +44 +82 +82 +ENDCHAR +STARTCHAR uni01D21C +ENCODING 119324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +FE +ENDCHAR +STARTCHAR uni01D21D +ENCODING 119325 +BBX 10 7 3 0 +BITMAP +7C40 +8240 +81C0 +8000 +81C0 +8240 +7C40 +ENDCHAR +STARTCHAR uni01D21E +ENCODING 119326 +BBX 10 7 3 0 +BITMAP +07C0 +0800 +0800 +FFC0 +0800 +0800 +07C0 +ENDCHAR +STARTCHAR uni01D21F +ENCODING 119327 +BBX 10 6 3 0 +BITMAP +7000 +8800 +8800 +8800 +8800 +FFC0 +ENDCHAR +STARTCHAR uni01D220 +ENCODING 119328 +BBX 10 7 3 0 +BITMAP +C000 +3000 +0800 +07C0 +0800 +3000 +C000 +ENDCHAR +STARTCHAR uni01D221 +ENCODING 119329 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +80 +80 +78 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni01D222 +ENCODING 119330 +BBX 11 6 3 0 +BITMAP +4040 +8420 +8420 +8420 +8420 +7BC0 +ENDCHAR +STARTCHAR uni01D223 +ENCODING 119331 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +FC +ENDCHAR +STARTCHAR uni01D224 +ENCODING 119332 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +84 +84 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01D225 +ENCODING 119333 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01D226 +ENCODING 119334 +BBX 10 6 3 0 +BITMAP +0FC0 +0800 +0800 +0800 +0800 +FFC0 +ENDCHAR +STARTCHAR uni01D227 +ENCODING 119335 +BBX 11 6 3 -1 +BITMAP +8420 +8420 +8420 +8420 +8420 +FFE0 +ENDCHAR +STARTCHAR uni01D228 +ENCODING 119336 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +FC +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni01D229 +ENCODING 119337 +BBX 10 7 3 0 +BITMAP +8000 +8000 +8000 +FFC0 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni01D22A +ENCODING 119338 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni01D22B +ENCODING 119339 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni01D22C +ENCODING 119340 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +C4 +B8 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D22D +ENCODING 119341 +BBX 10 6 3 -1 +BITMAP +8000 +4000 +4000 +4000 +8000 +FFC0 +ENDCHAR +STARTCHAR uni01D22E +ENCODING 119342 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +8C +74 +04 +04 +04 +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni01D22F +ENCODING 119343 +BBX 10 6 3 0 +BITMAP +8000 +8800 +8800 +8800 +8800 +FFC0 +ENDCHAR +STARTCHAR uni01D230 +ENCODING 119344 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +04 +7C +04 +04 +04 +04 +04 +ENDCHAR +STARTCHAR uni01D231 +ENCODING 119345 +BBX 10 6 3 0 +BITMAP +4080 +8040 +8040 +8040 +4080 +3F00 +ENDCHAR +STARTCHAR uni01D232 +ENCODING 119346 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +44 +24 +14 +0C +0C +14 +24 +44 +84 +ENDCHAR +STARTCHAR uni01D233 +ENCODING 119347 +BBX 10 7 3 0 +BITMAP +E000 +9C00 +8300 +00C0 +0300 +1C00 +E000 +ENDCHAR +STARTCHAR uni01D234 +ENCODING 119348 +BBX 10 7 3 0 +BITMAP +01C0 +0E00 +3000 +C000 +3040 +0E40 +01C0 +ENDCHAR +STARTCHAR uni01D235 +ENCODING 119349 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +10 +28 +28 +44 +44 +44 +82 +82 +E2 +ENDCHAR +STARTCHAR uni01D236 +ENCODING 119350 +BBX 10 7 3 0 +BITMAP +01C0 +0E00 +3000 +C000 +3000 +0E00 +01C0 +ENDCHAR +STARTCHAR uni01D237 +ENCODING 119351 +BBX 10 7 3 0 +BITMAP +E000 +1C00 +0300 +00C0 +0300 +1C00 +E000 +ENDCHAR +STARTCHAR uni01D238 +ENCODING 119352 +BBX 10 7 3 0 +BITMAP +FFC0 +8000 +8000 +8000 +8000 +8000 +FFC0 +ENDCHAR +STARTCHAR uni01D239 +ENCODING 119353 +BBX 10 7 3 0 +BITMAP +FFC0 +0040 +0040 +0040 +0040 +0040 +FFC0 +ENDCHAR +STARTCHAR uni01D23A +ENCODING 119354 +BBX 10 10 3 0 +BITMAP +0040 +0080 +0100 +0200 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni01D23B +ENCODING 119355 +BBX 10 10 3 0 +BITMAP +8000 +4000 +2000 +1000 +0800 +0400 +0200 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uni01D23C +ENCODING 119356 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +F0 +10 +10 +10 +10 +10 +10 +10 +10 +1E +ENDCHAR +STARTCHAR uni01D23D +ENCODING 119357 +BBX 10 10 3 0 +BITMAP +0040 +0080 +0100 +0200 +FC00 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni01D23E +ENCODING 119358 +BBX 10 10 3 0 +BITMAP +8000 +4000 +2000 +1000 +0FC0 +0400 +0200 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uni01D23F +ENCODING 119359 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +80 +8C +54 +64 +04 +04 +02 +02 +02 +02 +ENDCHAR +STARTCHAR uni01D240 +ENCODING 119360 +BBX 10 10 3 0 +BITMAP +0040 +0080 +0100 +0200 +0400 +0FC0 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni01D241 +ENCODING 119361 +BBX 10 10 3 0 +BITMAP +8000 +4000 +2000 +1000 +0800 +FC00 +0200 +0100 +0080 +0040 +ENDCHAR +STARTCHAR uni01D242 +ENCODING 119362 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +02 +02 +FE +ENDCHAR +STARTCHAR uni01D243 +ENCODING 119363 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +82 +82 +FE +ENDCHAR +STARTCHAR uni01D244 +ENCODING 119364 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 -8 10 +BITMAP +92 +92 +FE +ENDCHAR +STARTCHAR uni01D245 +ENCODING 119365 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +44 +82 +82 +82 +82 +82 +82 +82 +82 +ENDCHAR +STARTCHAR uni01D2E0 +ENCODING 119520 +BBX 13 8 1 2 +BITMAP +0F80 +3AE0 +6AB0 +AAA8 +9FC8 +4010 +3060 +0F80 +ENDCHAR +STARTCHAR uni01D2E1 +ENCODING 119521 +BBX 2 2 7 2 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni01D2E2 +ENCODING 119522 +BBX 12 2 2 2 +BITMAP +C030 +C030 +ENDCHAR +STARTCHAR uni01D2E3 +ENCODING 119523 +BBX 12 2 2 2 +BITMAP +C630 +C630 +ENDCHAR +STARTCHAR uni01D2E4 +ENCODING 119524 +BBX 12 2 2 2 +BITMAP +D9B0 +D9B0 +ENDCHAR +STARTCHAR uni01D2E5 +ENCODING 119525 +BBX 12 1 2 2 +BITMAP +FFF0 +ENDCHAR +STARTCHAR uni01D2E6 +ENCODING 119526 +BBX 12 4 2 2 +BITMAP +0600 +0600 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2E7 +ENCODING 119527 +BBX 12 4 2 2 +BITMAP +C030 +C030 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2E8 +ENCODING 119528 +BBX 12 4 2 2 +BITMAP +C630 +C630 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2E9 +ENCODING 119529 +BBX 12 4 2 2 +BITMAP +D9B0 +D9B0 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2EA +ENCODING 119530 +BBX 12 3 2 2 +BITMAP +FFF0 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2EB +ENCODING 119531 +BBX 12 6 2 2 +BITMAP +0600 +0600 +0000 +FFF0 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2EC +ENCODING 119532 +BBX 12 6 2 2 +BITMAP +C030 +C030 +0000 +FFF0 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2ED +ENCODING 119533 +BBX 12 6 2 2 +BITMAP +C630 +C630 +0000 +FFF0 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2EE +ENCODING 119534 +BBX 12 6 2 2 +BITMAP +D9B0 +D9B0 +0000 +FFF0 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2EF +ENCODING 119535 +BBX 12 5 2 2 +BITMAP +FFF0 +0000 +FFF0 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2F0 +ENCODING 119536 +BBX 12 8 2 2 +BITMAP +0600 +0600 +0000 +FFF0 +0000 +FFF0 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2F1 +ENCODING 119537 +BBX 12 8 2 2 +BITMAP +C030 +C030 +0000 +FFF0 +0000 +FFF0 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2F2 +ENCODING 119538 +BBX 12 8 2 2 +BITMAP +C630 +C630 +0000 +FFF0 +0000 +FFF0 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D2F3 +ENCODING 119539 +BBX 12 8 2 2 +BITMAP +D9B0 +D9B0 +0000 +FFF0 +0000 +FFF0 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01D300 +ENCODING 119552 +BBX 13 2 1 4 +BITMAP +E738 +E738 +ENDCHAR +STARTCHAR uni01D301 +ENCODING 119553 +BBX 13 6 1 2 +BITMAP +FFF8 +FFF8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D302 +ENCODING 119554 +BBX 13 6 1 2 +BITMAP +F8F8 +F8F8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D303 +ENCODING 119555 +BBX 13 6 1 2 +BITMAP +E738 +E738 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D304 +ENCODING 119556 +BBX 13 6 1 2 +BITMAP +E738 +E738 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D305 +ENCODING 119557 +BBX 13 6 1 2 +BITMAP +E738 +E738 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D306 +ENCODING 119558 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D307 +ENCODING 119559 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D308 +ENCODING 119560 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D309 +ENCODING 119561 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D30A +ENCODING 119562 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D30B +ENCODING 119563 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D30C +ENCODING 119564 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D30D +ENCODING 119565 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D30E +ENCODING 119566 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D30F +ENCODING 119567 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D310 +ENCODING 119568 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D311 +ENCODING 119569 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D312 +ENCODING 119570 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D313 +ENCODING 119571 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D314 +ENCODING 119572 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D315 +ENCODING 119573 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D316 +ENCODING 119574 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D317 +ENCODING 119575 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D318 +ENCODING 119576 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D319 +ENCODING 119577 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D31A +ENCODING 119578 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D31B +ENCODING 119579 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D31C +ENCODING 119580 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D31D +ENCODING 119581 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D31E +ENCODING 119582 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D31F +ENCODING 119583 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D320 +ENCODING 119584 +BBX 13 14 1 -2 +BITMAP +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D321 +ENCODING 119585 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D322 +ENCODING 119586 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D323 +ENCODING 119587 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D324 +ENCODING 119588 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D325 +ENCODING 119589 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D326 +ENCODING 119590 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D327 +ENCODING 119591 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D328 +ENCODING 119592 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D329 +ENCODING 119593 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D32A +ENCODING 119594 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D32B +ENCODING 119595 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D32C +ENCODING 119596 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D32D +ENCODING 119597 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D32E +ENCODING 119598 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D32F +ENCODING 119599 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D330 +ENCODING 119600 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D331 +ENCODING 119601 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D332 +ENCODING 119602 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D333 +ENCODING 119603 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D334 +ENCODING 119604 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D335 +ENCODING 119605 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D336 +ENCODING 119606 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D337 +ENCODING 119607 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D338 +ENCODING 119608 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D339 +ENCODING 119609 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D33A +ENCODING 119610 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D33B +ENCODING 119611 +BBX 13 14 1 -2 +BITMAP +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D33C +ENCODING 119612 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D33D +ENCODING 119613 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D33E +ENCODING 119614 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D33F +ENCODING 119615 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D340 +ENCODING 119616 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D341 +ENCODING 119617 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D342 +ENCODING 119618 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D343 +ENCODING 119619 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D344 +ENCODING 119620 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D345 +ENCODING 119621 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D346 +ENCODING 119622 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D347 +ENCODING 119623 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D348 +ENCODING 119624 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D349 +ENCODING 119625 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D34A +ENCODING 119626 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D34B +ENCODING 119627 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D34C +ENCODING 119628 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D34D +ENCODING 119629 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D34E +ENCODING 119630 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D34F +ENCODING 119631 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D350 +ENCODING 119632 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D351 +ENCODING 119633 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D352 +ENCODING 119634 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D353 +ENCODING 119635 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D354 +ENCODING 119636 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01D355 +ENCODING 119637 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01D356 +ENCODING 119638 +BBX 13 14 1 -2 +BITMAP +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +0000 +0000 +E738 +E738 +ENDCHAR +STARTCHAR uni01D360 +ENCODING 119648 +BBX 13 1 1 5 +BITMAP +FFF8 +ENDCHAR +STARTCHAR uni01D361 +ENCODING 119649 +BBX 13 4 1 4 +BITMAP +FFF8 +0000 +0000 +FFF8 +ENDCHAR +STARTCHAR uni01D362 +ENCODING 119650 +BBX 13 7 1 2 +BITMAP +FFF8 +0000 +0000 +FFF8 +0000 +0000 +FFF8 +ENDCHAR +STARTCHAR uni01D363 +ENCODING 119651 +BBX 13 10 1 1 +BITMAP +FFF8 +0000 +0000 +FFF8 +0000 +0000 +FFF8 +0000 +0000 +FFF8 +ENDCHAR +STARTCHAR uni01D364 +ENCODING 119652 +BBX 13 13 1 -1 +BITMAP +FFF8 +0000 +0000 +FFF8 +0000 +0000 +FFF8 +0000 +0000 +FFF8 +0000 +0000 +FFF8 +ENDCHAR +STARTCHAR uni01D365 +ENCODING 119653 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni01D366 +ENCODING 119654 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +FFF8 +0000 +0000 +FFF8 +ENDCHAR +STARTCHAR uni01D367 +ENCODING 119655 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +0200 +0200 +0200 +0200 +FFF8 +0000 +0000 +FFF8 +0000 +0000 +FFF8 +ENDCHAR +STARTCHAR uni01D368 +ENCODING 119656 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +0200 +FFF8 +0000 +0000 +FFF8 +0000 +0000 +FFF8 +0000 +0000 +FFF8 +ENDCHAR +STARTCHAR uni01D369 +ENCODING 119657 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 13 7 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D36A +ENCODING 119658 +BBX 4 13 6 -1 +BITMAP +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR uni01D36B +ENCODING 119659 +BBX 7 13 4 -1 +BITMAP +92 +92 +92 +92 +92 +92 +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni01D36C +ENCODING 119660 +BBX 10 13 3 -1 +BITMAP +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +9240 +ENDCHAR +STARTCHAR uni01D36D +ENCODING 119661 +BBX 13 13 1 -1 +BITMAP +9248 +9248 +9248 +9248 +9248 +9248 +9248 +9248 +9248 +9248 +9248 +9248 +9248 +ENDCHAR +STARTCHAR uni01D36E +ENCODING 119662 +BBX 13 13 1 -1 +BITMAP +FFF8 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni01D36F +ENCODING 119663 +BBX 14 13 1 -1 +BITMAP +FFFC +0480 +0480 +0480 +0480 +0480 +0480 +0480 +0480 +0480 +0480 +0480 +0480 +ENDCHAR +STARTCHAR uni01D370 +ENCODING 119664 +BBX 13 13 1 -1 +BITMAP +FFF8 +1240 +1240 +1240 +1240 +1240 +1240 +1240 +1240 +1240 +1240 +1240 +1240 +ENDCHAR +STARTCHAR uni01D371 +ENCODING 119665 +BBX 14 13 1 -1 +BITMAP +FFFC +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +2490 +ENDCHAR +STARTCHAR uni01D372 +ENCODING 119666 +BBX 13 1 1 11 +BITMAP +FFF8 +ENDCHAR +STARTCHAR uni01D373 +ENCODING 119667 +BBX 13 13 1 -1 +BITMAP +FFF8 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni01D374 +ENCODING 119668 +BBX 13 13 1 -1 +BITMAP +FFF8 +0200 +0200 +0200 +0200 +0200 +03F8 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni01D375 +ENCODING 119669 +BBX 13 13 1 -1 +BITMAP +FFF8 +0200 +0200 +0200 +2200 +2200 +23F8 +2200 +2200 +2200 +2200 +2200 +2200 +ENDCHAR +STARTCHAR uni01D376 +ENCODING 119670 +BBX 13 13 1 -1 +BITMAP +FFF8 +0200 +0200 +0200 +2200 +2200 +23F8 +2200 +2200 +2200 +2200 +2200 +FFF8 +ENDCHAR +STARTCHAR uni01D377 +ENCODING 119671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 13 3 -1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D378 +ENCODING 119672 +BBX 14 13 1 -1 +BITMAP +2490 +2490 +2490 +2490 +249C +24F0 +2790 +3C90 +E490 +2490 +2490 +2490 +2490 +ENDCHAR +STARTCHAR uni01D400 +ENCODING 119808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +6C +6C +C6 +C6 +FE +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D401 +ENCODING 119809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +C6 +C6 +C6 +FC +C6 +C6 +C6 +C6 +FC +ENDCHAR +STARTCHAR uni01D402 +ENCODING 119810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C0 +C0 +C0 +C0 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D403 +ENCODING 119811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +F8 +CC +C6 +C6 +C6 +C6 +C6 +C6 +CC +F8 +ENDCHAR +STARTCHAR uni01D404 +ENCODING 119812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C0 +C0 +C0 +FC +C0 +C0 +C0 +C0 +FE +ENDCHAR +STARTCHAR uni01D405 +ENCODING 119813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C0 +C0 +C0 +FC +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D406 +ENCODING 119814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C0 +C0 +DE +C6 +C6 +CE +7E +ENDCHAR +STARTCHAR uni01D407 +ENCODING 119815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +C6 +C6 +FE +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D408 +ENCODING 119816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +30 +30 +30 +30 +30 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D409 +ENCODING 119817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3F +0C +0C +0C +0C +0C +0C +CC +CC +78 +ENDCHAR +STARTCHAR uni01D40A +ENCODING 119818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +CC +D8 +F0 +E0 +E0 +F0 +D8 +CC +C6 +ENDCHAR +STARTCHAR uni01D40B +ENCODING 119819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +FE +ENDCHAR +STARTCHAR uni01D40C +ENCODING 119820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +EE +EE +FE +FE +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D40D +ENCODING 119821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +E6 +E6 +F6 +F6 +DE +DE +CE +CE +C6 +ENDCHAR +STARTCHAR uni01D40E +ENCODING 119822 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C6 +C6 +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D40F +ENCODING 119823 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +C6 +C6 +C6 +FC +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D410 +ENCODING 119824 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -1 +BITMAP +7C +C6 +C6 +C6 +C6 +C6 +C6 +FE +EE +7C +07 +ENDCHAR +STARTCHAR uni01D411 +ENCODING 119825 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +C6 +C6 +C6 +FC +D8 +CC +CC +C6 +C6 +ENDCHAR +STARTCHAR uni01D412 +ENCODING 119826 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C0 +70 +1C +06 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D413 +ENCODING 119827 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +18 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D414 +ENCODING 119828 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +C6 +C6 +C6 +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D415 +ENCODING 119829 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +C3 +C3 +C3 +66 +66 +66 +3C +3C +18 +18 +ENDCHAR +STARTCHAR uni01D416 +ENCODING 119830 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +C6 +C6 +FE +FE +EE +EE +C6 +C6 +ENDCHAR +STARTCHAR uni01D417 +ENCODING 119831 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +6C +6C +38 +38 +6C +6C +C6 +C6 +ENDCHAR +STARTCHAR uni01D418 +ENCODING 119832 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +C3 +C3 +66 +66 +3C +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D419 +ENCODING 119833 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +06 +06 +0C +18 +30 +60 +C0 +C0 +FE +ENDCHAR +STARTCHAR uni01D41A +ENCODING 119834 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +06 +7E +C6 +C6 +CE +7E +ENDCHAR +STARTCHAR uni01D41B +ENCODING 119835 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +C0 +C0 +C0 +FC +E6 +C6 +C6 +C6 +C6 +E6 +FC +ENDCHAR +STARTCHAR uni01D41C +ENCODING 119836 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +C0 +C0 +C0 +C0 +C6 +7C +ENDCHAR +STARTCHAR uni01D41D +ENCODING 119837 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +06 +06 +06 +7E +CE +C6 +C6 +C6 +C6 +CE +7E +ENDCHAR +STARTCHAR uni01D41E +ENCODING 119838 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +C6 +FE +C0 +C0 +C6 +7C +ENDCHAR +STARTCHAR uni01D41F +ENCODING 119839 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +1C +30 +30 +30 +FC +30 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni01D420 +ENCODING 119840 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +06 +7E +CC +CC +CC +78 +60 +7C +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D421 +ENCODING 119841 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +C0 +C0 +C0 +FC +E6 +C6 +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D422 +ENCODING 119842 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +30 +30 +00 +70 +30 +30 +30 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D423 +ENCODING 119843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +0C +0C +00 +1C +0C +0C +0C +0C +0C +0C +0C +D8 +70 +ENDCHAR +STARTCHAR uni01D424 +ENCODING 119844 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C0 +C0 +CC +D8 +F0 +E0 +F0 +D8 +CC +C6 +ENDCHAR +STARTCHAR uni01D425 +ENCODING 119845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +30 +30 +30 +30 +30 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D426 +ENCODING 119846 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +FE +DB +DB +DB +DB +DB +DB +DB +ENDCHAR +STARTCHAR uni01D427 +ENCODING 119847 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FC +E6 +C6 +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D428 +ENCODING 119848 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +C6 +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D429 +ENCODING 119849 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +FC +E6 +C6 +C6 +C6 +C6 +E6 +FC +C0 +C0 +ENDCHAR +STARTCHAR uni01D42A +ENCODING 119850 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +7E +CE +C6 +C6 +C6 +C6 +CE +7E +06 +06 +ENDCHAR +STARTCHAR uni01D42B +ENCODING 119851 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FC +E6 +C6 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D42C +ENCODING 119852 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +C0 +70 +1C +06 +C6 +7C +ENDCHAR +STARTCHAR uni01D42D +ENCODING 119853 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +30 +FC +30 +30 +30 +30 +30 +30 +1C +ENDCHAR +STARTCHAR uni01D42E +ENCODING 119854 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +C6 +C6 +C6 +C6 +C6 +C6 +CE +7E +ENDCHAR +STARTCHAR uni01D42F +ENCODING 119855 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +C6 +C6 +C6 +6C +6C +6C +38 +38 +ENDCHAR +STARTCHAR uni01D430 +ENCODING 119856 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +C3 +DB +DB +DB +DB +DB +DB +7E +ENDCHAR +STARTCHAR uni01D431 +ENCODING 119857 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +C6 +C6 +6C +38 +38 +6C +C6 +C6 +ENDCHAR +STARTCHAR uni01D432 +ENCODING 119858 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +C6 +C6 +C6 +C6 +C6 +6E +3E +06 +06 +7C +ENDCHAR +STARTCHAR uni01D433 +ENCODING 119859 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +06 +0C +18 +30 +60 +C0 +FE +ENDCHAR +STARTCHAR uni01D434 +ENCODING 119860 +BBX 8 10 4 0 +BITMAP +06 +09 +09 +11 +21 +3F +42 +42 +42 +84 +ENDCHAR +STARTCHAR uni01D435 +ENCODING 119861 +BBX 9 10 4 0 +BITMAP +1F00 +1080 +1080 +2100 +3E00 +2100 +4200 +4200 +4400 +F800 +ENDCHAR +STARTCHAR uni01D436 +ENCODING 119862 +BBX 8 10 4 0 +BITMAP +1E +21 +21 +40 +40 +40 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D437 +ENCODING 119863 +BBX 9 10 4 0 +BITMAP +1E00 +1100 +1080 +2100 +2100 +2100 +4200 +4200 +4400 +F800 +ENDCHAR +STARTCHAR uni01D438 +ENCODING 119864 +BBX 9 10 4 0 +BITMAP +1F80 +1000 +1000 +2000 +3E00 +2000 +4000 +4000 +4000 +FC00 +ENDCHAR +STARTCHAR uni01D439 +ENCODING 119865 +BBX 9 10 4 0 +BITMAP +1F80 +1000 +1000 +2000 +3E00 +2000 +4000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni01D43A +ENCODING 119866 +BBX 8 10 4 0 +BITMAP +1E +21 +21 +40 +40 +4E +84 +84 +8C +78 +ENDCHAR +STARTCHAR uni01D43B +ENCODING 119867 +BBX 9 10 4 0 +BITMAP +1080 +1080 +1080 +2100 +3F00 +2100 +4200 +4200 +4200 +8400 +ENDCHAR +STARTCHAR uni01D43C +ENCODING 119868 +BBX 7 10 5 0 +BITMAP +3E +08 +08 +10 +10 +10 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D43D +ENCODING 119869 +BBX 9 10 4 0 +BITMAP +0F80 +0200 +0200 +0400 +0400 +0400 +0800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni01D43E +ENCODING 119870 +BBX 8 10 4 0 +BITMAP +11 +12 +14 +28 +30 +30 +50 +48 +44 +84 +ENDCHAR +STARTCHAR uni01D43F +ENCODING 119871 +BBX 6 10 5 0 +BITMAP +10 +10 +10 +20 +20 +20 +40 +40 +40 +FC +ENDCHAR +STARTCHAR uni01D440 +ENCODING 119872 +BBX 9 10 4 0 +BITMAP +1080 +1080 +1180 +3300 +2D00 +2D00 +4200 +4200 +4200 +8400 +ENDCHAR +STARTCHAR uni01D441 +ENCODING 119873 +BBX 9 10 4 0 +BITMAP +1080 +1880 +1880 +2900 +2900 +2900 +4A00 +4600 +4600 +8400 +ENDCHAR +STARTCHAR uni01D442 +ENCODING 119874 +BBX 8 10 4 0 +BITMAP +1E +21 +21 +42 +42 +42 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D443 +ENCODING 119875 +BBX 9 10 4 0 +BITMAP +1F00 +1080 +1080 +2100 +3E00 +2000 +4000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni01D444 +ENCODING 119876 +BBX 8 11 4 -1 +BITMAP +1E +21 +21 +42 +42 +42 +84 +B4 +CC +70 +0C +ENDCHAR +STARTCHAR uni01D445 +ENCODING 119877 +BBX 9 10 4 0 +BITMAP +1F00 +1080 +1080 +2100 +3E00 +2400 +4400 +4400 +4200 +8200 +ENDCHAR +STARTCHAR uni01D446 +ENCODING 119878 +BBX 8 10 4 0 +BITMAP +1E +21 +21 +40 +30 +08 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D447 +ENCODING 119879 +BBX 7 10 5 0 +BITMAP +FE +10 +10 +20 +20 +20 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni01D448 +ENCODING 119880 +BBX 8 10 4 0 +BITMAP +21 +21 +21 +42 +42 +42 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D449 +ENCODING 119881 +BBX 7 10 5 0 +BITMAP +82 +82 +84 +88 +88 +90 +A0 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni01D44A +ENCODING 119882 +BBX 9 10 4 0 +BITMAP +1080 +2100 +2100 +2100 +5A00 +5A00 +6600 +C400 +8400 +8400 +ENDCHAR +STARTCHAR uni01D44B +ENCODING 119883 +BBX 9 10 4 0 +BITMAP +1080 +1080 +1100 +1200 +0C00 +0C00 +1400 +2400 +4200 +8200 +ENDCHAR +STARTCHAR uni01D44C +ENCODING 119884 +BBX 7 10 5 0 +BITMAP +82 +82 +84 +88 +50 +20 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni01D44D +ENCODING 119885 +BBX 9 10 4 0 +BITMAP +1F80 +0080 +0080 +0300 +0400 +0800 +3000 +4000 +4000 +FC00 +ENDCHAR +STARTCHAR uni01D44E +ENCODING 119886 +BBX 7 8 5 0 +BITMAP +3C +42 +02 +3E +44 +84 +8C +78 +ENDCHAR +STARTCHAR uni01D44F +ENCODING 119887 +BBX 8 11 4 0 +BITMAP +08 +10 +10 +1E +11 +21 +21 +42 +42 +62 +9C +ENDCHAR +STARTCHAR uni01D450 +ENCODING 119888 +BBX 7 8 5 0 +BITMAP +3C +42 +40 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni01D451 +ENCODING 119889 +BBX 9 11 4 0 +BITMAP +0080 +0100 +0100 +3D00 +4200 +4200 +4200 +8400 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni01D452 +ENCODING 119890 +BBX 7 8 5 0 +BITMAP +3C +42 +42 +7E +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni01D453 +ENCODING 119891 +BBX 7 11 5 0 +BITMAP +0E +10 +10 +10 +FC +20 +20 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni01D454 +ENCODING 119892 +BBX 9 11 4 -2 +BITMAP +0080 +1D00 +2200 +2200 +2200 +1C00 +2000 +7800 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni01D456 +ENCODING 119894 +BBX 6 11 5 0 +BITMAP +04 +08 +00 +08 +10 +10 +10 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D457 +ENCODING 119895 +BBX 9 13 4 -2 +BITMAP +0080 +0100 +0000 +0100 +0200 +0200 +0200 +0400 +0400 +0400 +0800 +9000 +6000 +ENDCHAR +STARTCHAR uni01D458 +ENCODING 119896 +BBX 7 10 5 0 +BITMAP +10 +10 +12 +24 +28 +30 +50 +48 +44 +84 +ENDCHAR +STARTCHAR uni01D459 +ENCODING 119897 +BBX 5 10 6 0 +BITMAP +18 +08 +08 +10 +10 +10 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D45A +ENCODING 119898 +BBX 9 8 4 0 +BITMAP +1B00 +2480 +2480 +2480 +4900 +4900 +4900 +9200 +ENDCHAR +STARTCHAR uni01D45B +ENCODING 119899 +BBX 8 8 4 0 +BITMAP +1E +21 +21 +21 +42 +42 +42 +84 +ENDCHAR +STARTCHAR uni01D45C +ENCODING 119900 +BBX 7 8 5 0 +BITMAP +3C +42 +42 +42 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D45D +ENCODING 119901 +BBX 9 10 4 -2 +BITMAP +0F00 +1080 +1080 +1080 +2100 +2100 +2100 +5E00 +4000 +8000 +ENDCHAR +STARTCHAR uni01D45E +ENCODING 119902 +BBX 8 10 4 -2 +BITMAP +3D +42 +42 +42 +84 +84 +84 +78 +08 +10 +ENDCHAR +STARTCHAR uni01D45F +ENCODING 119903 +BBX 8 8 4 0 +BITMAP +1E +21 +21 +20 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni01D460 +ENCODING 119904 +BBX 7 8 5 0 +BITMAP +3C +42 +40 +30 +08 +04 +84 +78 +ENDCHAR +STARTCHAR uni01D461 +ENCODING 119905 +BBX 5 10 6 0 +BITMAP +20 +20 +F8 +40 +40 +40 +80 +80 +80 +60 +ENDCHAR +STARTCHAR uni01D462 +ENCODING 119906 +BBX 8 8 4 0 +BITMAP +21 +42 +42 +42 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D463 +ENCODING 119907 +BBX 7 8 5 0 +BITMAP +42 +84 +84 +88 +90 +90 +A0 +40 +ENDCHAR +STARTCHAR uni01D464 +ENCODING 119908 +BBX 9 8 4 0 +BITMAP +2080 +4900 +4900 +4900 +9200 +9200 +9200 +6C00 +ENDCHAR +STARTCHAR uni01D465 +ENCODING 119909 +BBX 9 8 4 0 +BITMAP +2080 +2100 +1200 +0C00 +1800 +2400 +4200 +8200 +ENDCHAR +STARTCHAR uni01D466 +ENCODING 119910 +BBX 8 10 4 -2 +BITMAP +21 +42 +42 +42 +44 +4C +34 +08 +08 +F0 +ENDCHAR +STARTCHAR uni01D467 +ENCODING 119911 +BBX 9 8 4 0 +BITMAP +1F80 +0100 +0200 +0400 +1800 +2000 +4000 +FC00 +ENDCHAR +STARTCHAR uni01D468 +ENCODING 119912 +BBX 9 10 4 0 +BITMAP +0700 +0D80 +1980 +3180 +3180 +3F80 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D469 +ENCODING 119913 +BBX 10 10 3 0 +BITMAP +1F80 +18C0 +18C0 +3180 +3F00 +3180 +6300 +6300 +6300 +FC00 +ENDCHAR +STARTCHAR uni01D46A +ENCODING 119914 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6000 +6000 +6000 +C000 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D46B +ENCODING 119915 +BBX 9 10 4 0 +BITMAP +3E00 +3300 +3180 +6300 +6300 +6300 +C600 +C600 +CC00 +F800 +ENDCHAR +STARTCHAR uni01D46C +ENCODING 119916 +BBX 10 10 3 0 +BITMAP +1FC0 +1800 +1800 +3000 +3F00 +3000 +6000 +6000 +6000 +FE00 +ENDCHAR +STARTCHAR uni01D46D +ENCODING 119917 +BBX 10 10 3 0 +BITMAP +1FC0 +1800 +1800 +3000 +3F00 +3000 +6000 +6000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D46E +ENCODING 119918 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6000 +6000 +6F00 +C600 +C600 +CE00 +7C00 +ENDCHAR +STARTCHAR uni01D46F +ENCODING 119919 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +18C0 +3180 +3F80 +3180 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D470 +ENCODING 119920 +BBX 8 10 4 0 +BITMAP +3F +0C +0C +18 +18 +18 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D471 +ENCODING 119921 +BBX 10 10 3 0 +BITMAP +0FC0 +0300 +0300 +0600 +0600 +0600 +0C00 +CC00 +CC00 +7800 +ENDCHAR +STARTCHAR uni01D472 +ENCODING 119922 +BBX 10 10 3 0 +BITMAP +18C0 +1980 +1B00 +3C00 +3800 +3800 +7800 +6C00 +6600 +C600 +ENDCHAR +STARTCHAR uni01D473 +ENCODING 119923 +BBX 7 10 5 0 +BITMAP +18 +18 +18 +30 +30 +30 +60 +60 +60 +FE +ENDCHAR +STARTCHAR uni01D474 +ENCODING 119924 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +19C0 +3B80 +3F80 +3F80 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D475 +ENCODING 119925 +BBX 10 10 3 0 +BITMAP +18C0 +1CC0 +1CC0 +3D80 +3D80 +3780 +6700 +6700 +6700 +C600 +ENDCHAR +STARTCHAR uni01D476 +ENCODING 119926 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6300 +6300 +6300 +C600 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D477 +ENCODING 119927 +BBX 10 10 3 0 +BITMAP +1F80 +18C0 +18C0 +3180 +3F00 +3000 +6000 +6000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D478 +ENCODING 119928 +BBX 9 11 4 -1 +BITMAP +1F00 +3180 +3180 +6300 +6300 +6300 +C600 +FE00 +EE00 +7800 +0E00 +ENDCHAR +STARTCHAR uni01D479 +ENCODING 119929 +BBX 10 10 3 0 +BITMAP +1F80 +18C0 +18C0 +3180 +3F00 +3600 +6600 +6600 +6300 +C300 +ENDCHAR +STARTCHAR uni01D47A +ENCODING 119930 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6000 +3800 +1C00 +0600 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D47B +ENCODING 119931 +BBX 8 10 4 0 +BITMAP +FF +18 +18 +30 +30 +30 +60 +60 +60 +C0 +ENDCHAR +STARTCHAR uni01D47C +ENCODING 119932 +BBX 9 10 4 0 +BITMAP +3180 +3180 +3180 +6300 +6300 +6300 +C600 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D47D +ENCODING 119933 +BBX 8 10 4 0 +BITMAP +C3 +C3 +C6 +CC +CC +D8 +F0 +F0 +E0 +C0 +ENDCHAR +STARTCHAR uni01D47E +ENCODING 119934 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +18C0 +3180 +3F80 +3F80 +7700 +7700 +6300 +C600 +ENDCHAR +STARTCHAR uni01D47F +ENCODING 119935 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +1980 +0B00 +0E00 +1C00 +3600 +3600 +6300 +C300 +ENDCHAR +STARTCHAR uni01D480 +ENCODING 119936 +BBX 8 10 4 0 +BITMAP +C3 +C3 +C6 +CC +78 +30 +60 +60 +60 +C0 +ENDCHAR +STARTCHAR uni01D481 +ENCODING 119937 +BBX 10 10 3 0 +BITMAP +1FC0 +00C0 +00C0 +0300 +0600 +0C00 +3000 +6000 +6000 +FE00 +ENDCHAR +STARTCHAR uni01D482 +ENCODING 119938 +BBX 8 8 4 0 +BITMAP +3E +63 +03 +3F +C6 +C6 +CE +7C +ENDCHAR +STARTCHAR uni01D483 +ENCODING 119939 +BBX 9 11 4 0 +BITMAP +0C00 +1800 +1800 +1F00 +3980 +3180 +3180 +6300 +6300 +6300 +FC00 +ENDCHAR +STARTCHAR uni01D484 +ENCODING 119940 +BBX 8 8 4 0 +BITMAP +3E +63 +60 +60 +C0 +C0 +C6 +7C +ENDCHAR +STARTCHAR uni01D485 +ENCODING 119941 +BBX 10 11 3 0 +BITMAP +00C0 +0180 +0180 +3F80 +6300 +6300 +6300 +C600 +C600 +CE00 +7C00 +ENDCHAR +STARTCHAR uni01D486 +ENCODING 119942 +BBX 8 8 4 0 +BITMAP +3E +63 +63 +7F +C0 +C0 +C6 +7C +ENDCHAR +STARTCHAR uni01D487 +ENCODING 119943 +BBX 8 11 4 0 +BITMAP +0F +18 +18 +18 +FE +30 +30 +60 +60 +60 +C0 +ENDCHAR +STARTCHAR uni01D488 +ENCODING 119944 +BBX 11 11 3 -2 +BITMAP +0060 +1EC0 +3300 +3300 +3300 +1E00 +3000 +7C00 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D489 +ENCODING 119945 +BBX 9 11 4 0 +BITMAP +0C00 +1800 +1800 +1F00 +3980 +3180 +3180 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D48A +ENCODING 119946 +BBX 7 11 5 0 +BITMAP +06 +0C +00 +0C +18 +18 +18 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D48B +ENCODING 119947 +BBX 10 13 3 -2 +BITMAP +00C0 +0180 +0000 +0380 +0300 +0300 +0300 +0600 +0600 +0600 +0C00 +D800 +7000 +ENDCHAR +STARTCHAR uni01D48C +ENCODING 119948 +BBX 9 10 4 0 +BITMAP +1800 +1800 +1980 +3600 +3C00 +3800 +7800 +6C00 +6600 +C600 +ENDCHAR +STARTCHAR uni01D48D +ENCODING 119949 +BBX 6 10 5 0 +BITMAP +1C +0C +0C +18 +18 +18 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D48E +ENCODING 119950 +BBX 10 8 3 0 +BITMAP +1F80 +36C0 +36C0 +36C0 +6D80 +6D80 +6D80 +DB00 +ENDCHAR +STARTCHAR uni01D48F +ENCODING 119951 +BBX 9 8 4 0 +BITMAP +1F00 +3980 +3180 +3180 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D490 +ENCODING 119952 +BBX 8 8 4 0 +BITMAP +3E +63 +63 +63 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D491 +ENCODING 119953 +BBX 10 10 3 -2 +BITMAP +0F80 +1CC0 +18C0 +18C0 +3180 +3180 +3180 +7E00 +6000 +C000 +ENDCHAR +STARTCHAR uni01D492 +ENCODING 119954 +BBX 8 10 4 -2 +BITMAP +3F +63 +63 +63 +C6 +C6 +CE +7C +0C +18 +ENDCHAR +STARTCHAR uni01D493 +ENCODING 119955 +BBX 9 8 4 0 +BITMAP +1F00 +3980 +3180 +3000 +6000 +6000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D494 +ENCODING 119956 +BBX 8 8 4 0 +BITMAP +3E +63 +60 +38 +1C +06 +C6 +7C +ENDCHAR +STARTCHAR uni01D495 +ENCODING 119957 +BBX 6 10 5 0 +BITMAP +30 +30 +FC +60 +60 +60 +C0 +C0 +C0 +70 +ENDCHAR +STARTCHAR uni01D496 +ENCODING 119958 +BBX 9 8 4 0 +BITMAP +3180 +6300 +6300 +6300 +C600 +C600 +CE00 +7C00 +ENDCHAR +STARTCHAR uni01D497 +ENCODING 119959 +BBX 8 8 4 0 +BITMAP +63 +C6 +C6 +CC +D8 +D8 +70 +60 +ENDCHAR +STARTCHAR uni01D498 +ENCODING 119960 +BBX 10 8 3 0 +BITMAP +30C0 +6D80 +6D80 +6D80 +DB00 +DB00 +DB00 +7E00 +ENDCHAR +STARTCHAR uni01D499 +ENCODING 119961 +BBX 10 8 3 0 +BITMAP +18C0 +3180 +1B00 +0E00 +1C00 +3600 +6300 +C600 +ENDCHAR +STARTCHAR uni01D49A +ENCODING 119962 +BBX 9 10 4 -2 +BITMAP +3180 +6300 +6300 +6300 +6600 +6E00 +3E00 +0C00 +0C00 +F800 +ENDCHAR +STARTCHAR uni01D49B +ENCODING 119963 +BBX 10 8 3 0 +BITMAP +1FC0 +0180 +0300 +0600 +1C00 +3000 +6000 +FE00 +ENDCHAR +STARTCHAR uni01D49C +ENCODING 119964 +BBX 11 10 2 0 +BITMAP +00E0 +01C0 +02C0 +1AC0 +26C0 +2580 +2980 +99C0 +9780 +6180 +ENDCHAR +STARTCHAR uni01D49E +ENCODING 119966 +BBX 12 10 2 0 +BITMAP +70E0 +8310 +8420 +4CC0 +3F00 +1800 +3380 +3440 +1080 +0F00 +ENDCHAR +STARTCHAR uni01D49F +ENCODING 119967 +BBX 13 10 1 0 +BITMAP +3F10 +40E0 +8850 +88C8 +7188 +0188 +0308 +7208 +8C10 +73E0 +ENDCHAR +STARTCHAR uni01D4A2 +ENCODING 119970 +BBX 10 10 2 0 +BITMAP +6780 +8C40 +9980 +7E00 +1880 +0F00 +0300 +6200 +4600 +3C00 +ENDCHAR +STARTCHAR uni01D4A5 +ENCODING 119973 +BBX 11 13 3 -2 +BITMAP +0020 +07C0 +0880 +0980 +0940 +0780 +0100 +0340 +0680 +0F00 +7400 +8800 +7000 +ENDCHAR +STARTCHAR uni01D4A6 +ENCODING 119974 +BBX 13 10 1 0 +BITMAP +3098 +4F28 +4260 +36C0 +0700 +0C80 +0CC0 +C988 +9990 +7060 +ENDCHAR +STARTCHAR uni01D4A9 +ENCODING 119977 +BBX 12 10 1 0 +BITMAP +0230 +0650 +0E40 +0E40 +1680 +1680 +2680 +2700 +A700 +C400 +ENDCHAR +STARTCHAR uni01D4AA +ENCODING 119978 +BBX 8 10 4 0 +BITMAP +1E +31 +60 +66 +C9 +C9 +C1 +C2 +44 +38 +ENDCHAR +STARTCHAR uni01D4AB +ENCODING 119979 +BBX 12 10 2 0 +BITMAP +1F40 +60E0 +8190 +9310 +6350 +0360 +0600 +C600 +8C00 +7800 +ENDCHAR +STARTCHAR uni01D4AC +ENCODING 119980 +BBX 9 10 4 0 +BITMAP +1E00 +3100 +6000 +6600 +C900 +C900 +C100 +DA00 +4480 +3B00 +ENDCHAR +STARTCHAR uni01D4AE +ENCODING 119982 +BBX 9 10 3 0 +BITMAP +0700 +0C80 +1880 +1900 +0C00 +6600 +9300 +8300 +4600 +3C00 +ENDCHAR +STARTCHAR uni01D4AF +ENCODING 119983 +BBX 13 10 2 0 +BITMAP +3F08 +40F0 +4400 +4880 +3100 +0300 +0300 +C600 +8E00 +7C00 +ENDCHAR +STARTCHAR uni01D4B0 +ENCODING 119984 +BBX 10 10 3 0 +BITMAP +70C0 +98C0 +B180 +3180 +6300 +6300 +4600 +CE40 +D680 +6300 +ENDCHAR +STARTCHAR uni01D4B1 +ENCODING 119985 +BBX 13 10 1 0 +BITMAP +7218 +8C28 +8420 +6C40 +0C40 +0C80 +0900 +0A00 +1400 +3800 +ENDCHAR +STARTCHAR uni01D4B2 +ENCODING 119986 +BBX 15 10 0 0 +BITMAP +6466 +98CA +8948 +5AD0 +1AD0 +1AD0 +14A0 +14A0 +2940 +3180 +ENDCHAR +STARTCHAR uni01D4B3 +ENCODING 119987 +BBX 11 10 2 0 +BITMAP +38E0 +4560 +4600 +3600 +0400 +0C00 +0C00 +CC40 +9480 +6300 +ENDCHAR +STARTCHAR uni01D4B4 +ENCODING 119988 +BBX 10 12 3 -2 +BITMAP +78C0 +9980 +9300 +3300 +6600 +6E00 +3680 +0700 +1C00 +6C00 +8800 +7000 +ENDCHAR +STARTCHAR uni01D4B5 +ENCODING 119989 +BBX 12 10 1 0 +BITMAP +1CE0 +2310 +21E0 +1200 +0700 +0E00 +0400 +7840 +8840 +7780 +ENDCHAR +STARTCHAR uni01D4B6 +ENCODING 119990 +BBX 13 8 2 0 +BITMAP +0380 +0640 +0C00 +1840 +38C0 +D888 +1990 +0E60 +ENDCHAR +STARTCHAR uni01D4B7 +ENCODING 119991 +BBX 8 11 5 0 +BITMAP +0C +1A +9A +74 +38 +62 +46 +C2 +C5 +C4 +78 +ENDCHAR +STARTCHAR uni01D4B8 +ENCODING 119992 +BBX 11 8 2 0 +BITMAP +0180 +0640 +0CC0 +1800 +3800 +D820 +18C0 +0F00 +ENDCHAR +STARTCHAR uni01D4B9 +ENCODING 119993 +BBX 13 11 1 0 +BITMAP +0018 +0018 +0030 +03B0 +0660 +0C60 +1860 +38C0 +D8C8 +19D0 +0E60 +ENDCHAR +STARTCHAR uni01D4BB +ENCODING 119995 +BBX 8 13 4 -2 +BITMAP +06 +0D +0D +0A +1C +18 +38 +70 +31 +32 +6C +40 +C0 +ENDCHAR +STARTCHAR uni01D4BD +ENCODING 119997 +BBX 10 11 4 0 +BITMAP +0C00 +1A00 +9400 +7600 +2B00 +7300 +6300 +6600 +C640 +C680 +C300 +ENDCHAR +STARTCHAR uni01D4BE +ENCODING 119998 +BBX 7 11 5 0 +BITMAP +06 +06 +00 +18 +38 +F0 +30 +20 +44 +48 +70 +ENDCHAR +STARTCHAR uni01D4BF +ENCODING 119999 +BBX 9 12 3 -1 +BITMAP +0180 +0180 +0000 +0600 +0E00 +3C00 +0C00 +0880 +7F00 +9800 +9800 +7000 +ENDCHAR +STARTCHAR uni01D4C0 +ENCODING 120000 +BBX 10 11 4 0 +BITMAP +0C00 +1A00 +9400 +7600 +2B00 +7300 +6400 +6800 +C440 +C680 +C300 +ENDCHAR +STARTCHAR uni01D4C1 +ENCODING 120001 +BBX 8 11 4 0 +BITMAP +06 +0D +0D +19 +1A +34 +F8 +30 +32 +34 +18 +ENDCHAR +STARTCHAR uni01D4C2 +ENCODING 120002 +BBX 12 8 2 0 +BITMAP +2CC0 +F760 +6660 +6660 +6660 +CCC0 +CCD0 +CC60 +ENDCHAR +STARTCHAR uni01D4C3 +ENCODING 120003 +BBX 11 8 3 0 +BITMAP +1300 +F580 +3980 +3180 +3300 +6320 +6340 +6180 +ENDCHAR +STARTCHAR uni01D4C5 +ENCODING 120005 +BBX 10 10 3 -2 +BITMAP +1300 +F580 +3980 +3180 +3300 +6780 +6E40 +6000 +C000 +C000 +ENDCHAR +STARTCHAR uni01D4C6 +ENCODING 120006 +BBX 13 10 1 -2 +BITMAP +03B0 +0660 +0C60 +1860 +38C0 +D9C8 +0FD0 +01A0 +01C0 +0180 +ENDCHAR +STARTCHAR uni01D4C7 +ENCODING 120007 +BBX 9 8 3 0 +BITMAP +1180 +F300 +3500 +3880 +3000 +6000 +6000 +6000 +ENDCHAR +STARTCHAR uni01D4C8 +ENCODING 120008 +BBX 6 8 5 0 +BITMAP +08 +18 +30 +C8 +0C +CC +88 +70 +ENDCHAR +STARTCHAR uni01D4C9 +ENCODING 120009 +BBX 9 11 4 0 +BITMAP +0600 +0600 +7F80 +0C00 +1800 +3800 +5800 +B000 +3200 +3400 +1800 +ENDCHAR +STARTCHAR uni01D4CA +ENCODING 120010 +BBX 12 8 2 0 +BITMAP +18C0 +38C0 +D8C0 +18C0 +3180 +3190 +33A0 +1CC0 +ENDCHAR +STARTCHAR uni01D4CB +ENCODING 120011 +BBX 12 8 2 0 +BITMAP +1880 +39C0 +D9C0 +18C0 +31A0 +3190 +3300 +1C00 +ENDCHAR +STARTCHAR uni01D4CC +ENCODING 120012 +BBX 12 8 2 0 +BITMAP +3360 +F360 +3330 +6620 +6620 +6620 +6A40 +3180 +ENDCHAR +STARTCHAR uni01D4CD +ENCODING 120013 +BBX 10 8 3 0 +BITMAP +11C0 +2AC0 +4C00 +0C00 +0C00 +CC80 +D500 +6200 +ENDCHAR +STARTCHAR uni01D4CE +ENCODING 120014 +BBX 11 10 2 -2 +BITMAP +18C0 +38C0 +D8C0 +3180 +3180 +3380 +1DA0 +07C0 +0900 +0600 +ENDCHAR +STARTCHAR uni01D4CF +ENCODING 120015 +BBX 9 8 4 0 +BITMAP +3300 +3E00 +C400 +0800 +1000 +7880 +CD00 +8E00 +ENDCHAR +STARTCHAR uni01D4D0 +ENCODING 120016 +BBX 11 11 2 0 +BITMAP +00E0 +01E0 +03C0 +1AC0 +3EC0 +27C0 +2D80 +B9C0 +9FC0 +F780 +6180 +ENDCHAR +STARTCHAR uni01D4D1 +ENCODING 120017 +BBX 11 11 2 0 +BITMAP +0E80 +3FC0 +73E0 +4B20 +7B20 +37E0 +06E0 +CFA0 +DFA0 +FBE0 +71C0 +ENDCHAR +STARTCHAR uni01D4D2 +ENCODING 120018 +BBX 12 11 2 0 +BITMAP +70E0 +F3F0 +8730 +CCE0 +7FC0 +3F00 +3B80 +37C0 +34C0 +1F80 +0F00 +ENDCHAR +STARTCHAR uni01D4D3 +ENCODING 120019 +BBX 13 11 1 0 +BITMAP +3F10 +7FF0 +C8F0 +88D8 +F9C8 +7188 +0388 +7308 +FE18 +FFF0 +73E0 +ENDCHAR +STARTCHAR uni01D4D4 +ENCODING 120020 +BBX 9 11 3 0 +BITMAP +6700 +EF80 +9C80 +FF80 +7F00 +1C00 +3C00 +7380 +6380 +7F00 +3E00 +ENDCHAR +STARTCHAR uni01D4D5 +ENCODING 120021 +BBX 11 11 2 0 +BITMAP +38E0 +7FE0 +4780 +4900 +7B40 +33C0 +0FE0 +CF20 +CE00 +FC00 +7800 +ENDCHAR +STARTCHAR uni01D4D6 +ENCODING 120022 +BBX 10 11 2 0 +BITMAP +6780 +EFC0 +9DC0 +FF80 +7E80 +1F80 +0F00 +6300 +6600 +7E00 +3C00 +ENDCHAR +STARTCHAR uni01D4D7 +ENCODING 120023 +BBX 11 11 2 0 +BITMAP +3240 +7EE0 +4EA0 +6DE0 +3DC0 +1F80 +7F80 +F720 +B660 +E7C0 +4380 +ENDCHAR +STARTCHAR uni01D4D8 +ENCODING 120024 +BBX 11 14 3 -2 +BITMAP +0020 +07E0 +0FC0 +0980 +09C0 +0FC0 +0780 +0300 +0700 +0600 +CC00 +CC00 +F800 +7000 +ENDCHAR +STARTCHAR uni01D4D9 +ENCODING 120025 +BBX 11 14 3 -2 +BITMAP +0020 +07E0 +0FC0 +0980 +09C0 +0FC0 +0780 +0340 +07C0 +0F80 +7F00 +FC00 +F800 +7000 +ENDCHAR +STARTCHAR uni01D4DA +ENCODING 120026 +BBX 13 11 1 0 +BITMAP +3098 +7FB8 +4F68 +76E0 +37C0 +0F80 +0CC0 +CDC8 +D998 +F9F0 +7060 +ENDCHAR +STARTCHAR uni01D4DB +ENCODING 120027 +BBX 12 11 2 0 +BITMAP +1860 +3CF0 +2590 +31B0 +1FE0 +0FC0 +0300 +7720 +FE60 +FFC0 +7380 +ENDCHAR +STARTCHAR uni01D4DC +ENCODING 120028 +BBX 16 11 0 0 +BITMAP +01CC +03DE +02D6 +07FE +05AC +0DAC +0BBC +DB79 +D35B +F3DE +618C +ENDCHAR +STARTCHAR uni01D4DD +ENCODING 120029 +BBX 12 11 1 0 +BITMAP +0230 +0670 +0E50 +0E40 +1EC0 +1680 +3680 +2780 +A700 +E700 +C400 +ENDCHAR +STARTCHAR uni01D4DE +ENCODING 120030 +BBX 8 11 4 0 +BITMAP +1E +3F +71 +66 +EF +C9 +C9 +C3 +C6 +7C +38 +ENDCHAR +STARTCHAR uni01D4DF +ENCODING 120031 +BBX 12 11 1 0 +BITMAP +1F40 +7FE0 +E1F0 +9390 +F350 +6370 +0760 +C600 +CE00 +FC00 +7800 +ENDCHAR +STARTCHAR uni01D4E0 +ENCODING 120032 +BBX 9 11 4 0 +BITMAP +1E00 +3F00 +7100 +6600 +EF00 +C900 +C900 +DB00 +DE80 +7F80 +3B00 +ENDCHAR +STARTCHAR uni01D4E1 +ENCODING 120033 +BBX 13 11 2 0 +BITMAP +1F40 +7FE0 +E1F0 +9390 +F310 +63F0 +07E0 +C6C8 +CED8 +FCF0 +7860 +ENDCHAR +STARTCHAR uni01D4E2 +ENCODING 120034 +BBX 9 11 3 0 +BITMAP +0700 +0F80 +1C80 +1980 +1D00 +6E00 +F700 +9300 +C700 +7E00 +3C00 +ENDCHAR +STARTCHAR uni01D4E3 +ENCODING 120035 +BBX 13 11 2 0 +BITMAP +3F08 +7FF8 +44F0 +4C80 +7980 +3300 +0300 +C700 +CE00 +FE00 +7C00 +ENDCHAR +STARTCHAR uni01D4E4 +ENCODING 120036 +BBX 10 11 3 0 +BITMAP +70C0 +F8C0 +B9C0 +B180 +7380 +6300 +6700 +CE40 +DEC0 +F780 +6300 +ENDCHAR +STARTCHAR uni01D4E5 +ENCODING 120037 +BBX 13 11 1 0 +BITMAP +7218 +FE38 +8C28 +EC60 +6C40 +0CC0 +0D80 +0B00 +1E00 +3C00 +3800 +ENDCHAR +STARTCHAR uni01D4E6 +ENCODING 120038 +BBX 15 11 0 0 +BITMAP +6466 +FCEE +99CA +DBD8 +5AD0 +1AD0 +1EF0 +14A0 +3DE0 +39C0 +3180 +ENDCHAR +STARTCHAR uni01D4E7 +ENCODING 120039 +BBX 11 11 2 0 +BITMAP +38E0 +7DE0 +4760 +7600 +3600 +0C00 +0C00 +CC40 +DCC0 +F780 +6300 +ENDCHAR +STARTCHAR uni01D4E8 +ENCODING 120040 +BBX 10 13 3 -2 +BITMAP +78C0 +F9C0 +9B80 +B300 +7700 +6E00 +7E80 +3780 +1F00 +7C00 +EC00 +F800 +7000 +ENDCHAR +STARTCHAR uni01D4E9 +ENCODING 120041 +BBX 12 11 1 0 +BITMAP +1CE0 +3FF0 +23F0 +33E0 +1700 +0F00 +0E00 +7C40 +F840 +FFC0 +7780 +ENDCHAR +STARTCHAR uni01D4EA +ENCODING 120042 +BBX 13 9 2 0 +BITMAP +0380 +07C0 +0E40 +1C40 +38C0 +F8C8 +D998 +1FF0 +0E60 +ENDCHAR +STARTCHAR uni01D4EB +ENCODING 120043 +BBX 8 12 5 0 +BITMAP +0C +1E +9A +FE +7C +7A +66 +C6 +C7 +C5 +FC +78 +ENDCHAR +STARTCHAR uni01D4EC +ENCODING 120044 +BBX 11 9 2 0 +BITMAP +0180 +07C0 +0EC0 +1CC0 +3800 +F820 +D8E0 +1FC0 +0F00 +ENDCHAR +STARTCHAR uni01D4ED +ENCODING 120045 +BBX 13 12 1 0 +BITMAP +0018 +0018 +0038 +03B0 +07F0 +0E60 +1C60 +38E0 +F8C8 +D9D8 +1FF0 +0E60 +ENDCHAR +STARTCHAR uni01D4EE +ENCODING 120046 +BBX 9 9 3 0 +BITMAP +0700 +0F80 +1D80 +BB00 +FE80 +7D80 +3300 +3E00 +1C00 +ENDCHAR +STARTCHAR uni01D4EF +ENCODING 120047 +BBX 8 14 4 -2 +BITMAP +06 +0F +0D +0F +1E +1C +38 +78 +71 +33 +7E +6C +C0 +C0 +ENDCHAR +STARTCHAR uni01D4F0 +ENCODING 120048 +BBX 11 11 2 -2 +BITMAP +0EC0 +3FC0 +F9C0 +F9C0 +3180 +3380 +3FA0 +1FE0 +0FC0 +0F00 +0600 +ENDCHAR +STARTCHAR uni01D4F1 +ENCODING 120049 +BBX 10 12 4 0 +BITMAP +0C00 +1E00 +9E00 +F600 +7F00 +7B00 +7300 +6700 +E640 +C6C0 +C780 +C300 +ENDCHAR +STARTCHAR uni01D4F2 +ENCODING 120050 +BBX 7 12 5 0 +BITMAP +06 +06 +06 +18 +38 +F8 +F0 +30 +64 +4C +78 +70 +ENDCHAR +STARTCHAR uni01D4F3 +ENCODING 120051 +BBX 9 13 3 -1 +BITMAP +0180 +0180 +0180 +0600 +0E00 +3E00 +3C00 +0C80 +7F80 +FF00 +9800 +F800 +7000 +ENDCHAR +STARTCHAR uni01D4F4 +ENCODING 120052 +BBX 10 12 4 0 +BITMAP +0C00 +1E00 +9E00 +F600 +7F00 +7B00 +7700 +6C00 +EC40 +C6C0 +C780 +C300 +ENDCHAR +STARTCHAR uni01D4F5 +ENCODING 120053 +BBX 8 12 4 0 +BITMAP +06 +0F +0D +1D +1B +3E +FC +F8 +32 +36 +3C +18 +ENDCHAR +STARTCHAR uni01D4F6 +ENCODING 120054 +BBX 12 9 2 0 +BITMAP +2CC0 +FFE0 +F760 +6660 +6660 +EEE0 +CCD0 +CCF0 +CC60 +ENDCHAR +STARTCHAR uni01D4F7 +ENCODING 120055 +BBX 11 9 3 0 +BITMAP +1300 +F780 +FD80 +3980 +3380 +7320 +6360 +63C0 +6180 +ENDCHAR +STARTCHAR uni01D4F8 +ENCODING 120056 +BBX 12 9 3 0 +BITMAP +0380 +07C0 +0F40 +1D40 +39C0 +F8F0 +D9B0 +1F00 +0E00 +ENDCHAR +STARTCHAR uni01D4F9 +ENCODING 120057 +BBX 10 11 3 -2 +BITMAP +1300 +F780 +FD80 +3980 +3380 +7780 +6FC0 +6E40 +E000 +C000 +C000 +ENDCHAR +STARTCHAR uni01D4FA +ENCODING 120058 +BBX 13 11 1 -2 +BITMAP +03B0 +07F0 +0E60 +1C60 +38E0 +F9C8 +DFD8 +0FF0 +01E0 +01C0 +0180 +ENDCHAR +STARTCHAR uni01D4FB +ENCODING 120059 +BBX 9 9 3 0 +BITMAP +1180 +F380 +F700 +3D80 +3880 +7000 +6000 +6000 +6000 +ENDCHAR +STARTCHAR uni01D4FC +ENCODING 120060 +BBX 6 9 5 0 +BITMAP +08 +18 +38 +F8 +CC +CC +CC +F8 +70 +ENDCHAR +STARTCHAR uni01D4FD +ENCODING 120061 +BBX 9 12 4 0 +BITMAP +0600 +0600 +7F80 +7F80 +1C00 +3800 +7800 +F800 +B200 +3600 +3C00 +1800 +ENDCHAR +STARTCHAR uni01D4FE +ENCODING 120062 +BBX 12 9 2 0 +BITMAP +18C0 +38C0 +F8C0 +D8C0 +39C0 +3190 +33B0 +3FE0 +1CC0 +ENDCHAR +STARTCHAR uni01D4FF +ENCODING 120063 +BBX 12 9 2 0 +BITMAP +1880 +39C0 +F9C0 +D9C0 +39E0 +31B0 +3390 +3F00 +1C00 +ENDCHAR +STARTCHAR uni01D500 +ENCODING 120064 +BBX 12 9 2 0 +BITMAP +3360 +F360 +F370 +7730 +6620 +6620 +6E60 +7BC0 +3180 +ENDCHAR +STARTCHAR uni01D501 +ENCODING 120065 +BBX 10 9 3 0 +BITMAP +11C0 +3BC0 +6EC0 +4C00 +0C00 +CC80 +DD80 +F700 +6200 +ENDCHAR +STARTCHAR uni01D502 +ENCODING 120066 +BBX 11 11 2 -2 +BITMAP +18C0 +38C0 +F8C0 +F9C0 +3180 +3380 +3FA0 +1FE0 +0FC0 +0F00 +0600 +ENDCHAR +STARTCHAR uni01D503 +ENCODING 120067 +BBX 9 9 4 0 +BITMAP +3300 +3F00 +FE00 +CC00 +1800 +7880 +FD80 +CF00 +8E00 +ENDCHAR +STARTCHAR uni01D504 +ENCODING 120068 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +61 +B6 +B6 +76 +B6 +26 +46 +C6 +6F +34 +ENDCHAR +STARTCHAR uni01D505 +ENCODING 120069 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +66 +BB +B3 +72 +BC +33 +23 +63 +B2 +1C +ENDCHAR +STARTCHAR uni01D507 +ENCODING 120071 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +38 +5E +A6 +B3 +51 +11 +21 +01 +72 +BC +ENDCHAR +STARTCHAR uni01D508 +ENCODING 120072 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +35 +66 +64 +C8 +CB +C5 +C4 +69 +66 +1C +ENDCHAR +STARTCHAR uni01D509 +ENCODING 120073 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +39 +7F +C6 +88 +58 +17 +19 +6C +A6 +66 +66 +3C +ENDCHAR +STARTCHAR uni01D50A +ENCODING 120074 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +25 +49 +D3 +DA +CC +CA +CB +53 +62 +1C +ENDCHAR +STARTCHAR uni01D50D +ENCODING 120077 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +39 +7F +C6 +80 +66 +08 +0C +04 +66 +A6 +66 +3C +ENDCHAR +STARTCHAR uni01D50E +ENCODING 120078 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +1C +62 +59 +EC +CC +C6 +78 +66 +67 +C2 +ENDCHAR +STARTCHAR uni01D50F +ENCODING 120079 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +1E +23 +63 +66 +36 +13 +20 +31 +7E +8C +ENDCHAR +STARTCHAR uni01D510 +ENCODING 120080 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +B6 +DB +DB +D9 +DB +DB +DB +DB +DB +B1 +ENDCHAR +STARTCHAR uni01D511 +ENCODING 120081 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +4C +B6 +B6 +73 +B2 +36 +36 +36 +B7 +E2 +ENDCHAR +STARTCHAR uni01D512 +ENCODING 120082 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +6C +9E +C2 +63 +63 +23 +63 +63 +BA +8C +ENDCHAR +STARTCHAR uni01D513 +ENCODING 120083 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +4C +B6 +B3 +72 +B6 +36 +32 +33 +7B +36 +30 +30 +ENDCHAR +STARTCHAR uni01D514 +ENCODING 120084 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +6C +9E +C2 +63 +63 +2B +67 +63 +BA +8D +ENDCHAR +STARTCHAR uni01D516 +ENCODING 120086 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3D +6E +40 +98 +A2 +B5 +99 +41 +7E +3C +ENDCHAR +STARTCHAR uni01D517 +ENCODING 120087 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +71 +9F +8E +50 +18 +08 +10 +31 +7E +8C +ENDCHAR +STARTCHAR uni01D518 +ENCODING 120088 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +E6 +66 +66 +66 +66 +66 +66 +66 +36 +0B +ENDCHAR +STARTCHAR uni01D519 +ENCODING 120089 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +48 +B4 +B2 +74 +B4 +34 +32 +32 +72 +BC +ENDCHAR +STARTCHAR uni01D51A +ENCODING 120090 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +4C +B2 +A9 +6A +EA +69 +69 +69 +49 +BE +ENDCHAR +STARTCHAR uni01D51B +ENCODING 120091 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +6C +B2 +30 +30 +7C +30 +30 +30 +28 +C6 +ENDCHAR +STARTCHAR uni01D51C +ENCODING 120092 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +4C +B6 +B6 +76 +B6 +26 +46 +04 +74 +88 +ENDCHAR +STARTCHAR uni01D51E +ENCODING 120094 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +38 +4E +CC +CC +CC +CC +5E +24 +ENDCHAR +STARTCHAR uni01D51F +ENCODING 120095 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +A0 +60 +68 +74 +66 +66 +66 +66 +E4 +38 +ENDCHAR +STARTCHAR uni01D520 +ENCODING 120096 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 1 0 +BITMAP +30 +58 +D0 +C0 +C0 +C0 +48 +30 +ENDCHAR +STARTCHAR uni01D521 +ENCODING 120097 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +30 +18 +1C +2E +66 +66 +66 +66 +E4 +38 +ENDCHAR +STARTCHAR uni01D522 +ENCODING 120098 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +30 +58 +CC +CC +F0 +C0 +6C +30 +ENDCHAR +STARTCHAR uni01D523 +ENCODING 120099 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 -2 +BITMAP +50 +60 +40 +F8 +60 +60 +60 +60 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni01D524 +ENCODING 120100 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 -2 +BITMAP +38 +4E +CC +CC +CC +5C +26 +06 +C4 +78 +ENDCHAR +STARTCHAR uni01D525 +ENCODING 120101 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +10 +A0 +60 +68 +74 +66 +66 +66 +66 +E6 +36 +04 +08 +ENDCHAR +STARTCHAR uni01D526 +ENCODING 120102 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 11 2 0 +BITMAP +60 +00 +00 +60 +E0 +60 +60 +60 +60 +70 +20 +ENDCHAR +STARTCHAR uni01D527 +ENCODING 120103 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 13 2 -2 +BITMAP +60 +00 +00 +60 +E0 +60 +60 +60 +60 +60 +60 +50 +80 +ENDCHAR +STARTCHAR uni01D528 +ENCODING 120104 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +10 +A0 +64 +68 +FC +60 +60 +60 +60 +E8 +30 +ENDCHAR +STARTCHAR uni01D529 +ENCODING 120105 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +10 +A0 +60 +60 +60 +60 +60 +60 +60 +E8 +30 +ENDCHAR +STARTCHAR uni01D52A +ENCODING 120106 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +B6 +DA +DA +DA +DA +DA +DA +DA +ENDCHAR +STARTCHAR uni01D52B +ENCODING 120107 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 0 +BITMAP +9C +EC +CC +CC +CC +CC +CC +C6 +ENDCHAR +STARTCHAR uni01D52C +ENCODING 120108 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +38 +64 +64 +64 +64 +64 +68 +B0 +ENDCHAR +STARTCHAR uni01D52D +ENCODING 120109 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +64 +64 +64 +64 +64 +68 +F0 +60 +60 +ENDCHAR +STARTCHAR uni01D52E +ENCODING 120110 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +34 +58 +98 +98 +98 +98 +B8 +58 +18 +18 +ENDCHAR +STARTCHAR uni01D52F +ENCODING 120111 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +98 +6C +6C +60 +60 +60 +E8 +30 +ENDCHAR +STARTCHAR uni01D530 +ENCODING 120112 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +0C +02 +3C +60 +6E +76 +06 +84 +78 +ENDCHAR +STARTCHAR uni01D531 +ENCODING 120113 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +60 +60 +FC +60 +60 +60 +60 +E8 +30 +ENDCHAR +STARTCHAR uni01D532 +ENCODING 120114 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +04 +CE +6C +6C +6C +6C +6C +8C +76 +ENDCHAR +STARTCHAR uni01D533 +ENCODING 120115 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +80 +9C +66 +66 +66 +66 +66 +E4 +18 +ENDCHAR +STARTCHAR uni01D534 +ENCODING 120116 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +80 +9E +6A +6A +6A +6A +6A +6A +5C +ENDCHAR +STARTCHAR uni01D535 +ENCODING 120117 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +98 +6C +6C +60 +F8 +60 +E8 +B0 +80 +40 +ENDCHAR +STARTCHAR uni01D536 +ENCODING 120118 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 -2 +BITMAP +80 +8C +56 +66 +66 +66 +66 +76 +26 +04 +08 +ENDCHAR +STARTCHAR uni01D537 +ENCODING 120119 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 -2 +BITMAP +70 +98 +18 +18 +70 +18 +58 +98 +90 +60 +ENDCHAR +STARTCHAR uni01D538 +ENCODING 120120 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +38 +54 +54 +A2 +A2 +BE +A2 +A2 +A2 +E2 +ENDCHAR +STARTCHAR uni01D539 +ENCODING 120121 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FC +A2 +A2 +A2 +BC +A2 +A2 +A2 +A2 +FC +ENDCHAR +STARTCHAR uni01D53B +ENCODING 120123 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +F8 +A4 +A2 +A2 +A2 +A2 +A2 +A2 +A4 +F8 +ENDCHAR +STARTCHAR uni01D53C +ENCODING 120124 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FE +A0 +A0 +A0 +BC +A0 +A0 +A0 +A0 +FE +ENDCHAR +STARTCHAR uni01D53D +ENCODING 120125 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FE +A0 +A0 +A0 +BC +A0 +A0 +A0 +A0 +E0 +ENDCHAR +STARTCHAR uni01D53E +ENCODING 120126 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +7C +A2 +A2 +A0 +A0 +AE +A2 +A2 +A6 +7A +ENDCHAR +STARTCHAR uni01D540 +ENCODING 120128 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +FE +28 +28 +28 +28 +28 +28 +28 +28 +FE +ENDCHAR +STARTCHAR uni01D541 +ENCODING 120129 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +7F +14 +14 +14 +14 +14 +14 +94 +94 +78 +ENDCHAR +STARTCHAR uni01D542 +ENCODING 120130 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +E1 +A2 +A4 +A8 +B0 +B0 +A8 +A4 +A2 +E1 +ENDCHAR +STARTCHAR uni01D543 +ENCODING 120131 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +E0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +A0 +FE +ENDCHAR +STARTCHAR uni01D544 +ENCODING 120132 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +E1 +A1 +B3 +B3 +AD +AD +A1 +A1 +A1 +E1 +ENDCHAR +STARTCHAR uni01D546 +ENCODING 120134 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +A2 +A2 +A2 +A2 +A2 +A2 +A2 +A2 +7C +ENDCHAR +STARTCHAR uni01D54A +ENCODING 120138 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +C4 +A0 +50 +28 +14 +8C +84 +78 +ENDCHAR +STARTCHAR uni01D54B +ENCODING 120139 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +28 +28 +28 +28 +28 +28 +28 +28 +38 +ENDCHAR +STARTCHAR uni01D54C +ENCODING 120140 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +E2 +A2 +A2 +A2 +A2 +A2 +A2 +A2 +A2 +7C +ENDCHAR +STARTCHAR uni01D54D +ENCODING 120141 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +E1 +A1 +A1 +52 +52 +52 +2C +2C +18 +18 +ENDCHAR +STARTCHAR uni01D54E +ENCODING 120142 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +E1 +A1 +A1 +A1 +AD +AD +B3 +B3 +A1 +E1 +ENDCHAR +STARTCHAR uni01D54F +ENCODING 120143 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +E2 +A2 +54 +54 +28 +28 +54 +54 +8A +8E +ENDCHAR +STARTCHAR uni01D550 +ENCODING 120144 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +E1 +A1 +52 +52 +2C +14 +14 +14 +14 +1C +ENDCHAR +STARTCHAR uni01D552 +ENCODING 120146 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +8A +0A +7A +8A +8A +9A +6E +ENDCHAR +STARTCHAR uni01D553 +ENCODING 120147 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +E0 +A0 +A0 +AC +B2 +A2 +A2 +A2 +A2 +B2 +EC +ENDCHAR +STARTCHAR uni01D554 +ENCODING 120148 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +A2 +A0 +A0 +A0 +A0 +A2 +7C +ENDCHAR +STARTCHAR uni01D555 +ENCODING 120149 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +0E +0A +0A +6A +9A +8A +8A +8A +8A +9A +6E +ENDCHAR +STARTCHAR uni01D556 +ENCODING 120150 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +A2 +A2 +BE +A0 +A0 +A2 +7C +ENDCHAR +STARTCHAR uni01D557 +ENCODING 120151 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +1E +28 +28 +28 +EE +28 +28 +28 +28 +28 +38 +ENDCHAR +STARTCHAR uni01D558 +ENCODING 120152 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +6E +9A +8A +8A +8A +9A +6A +0A +0C +78 +ENDCHAR +STARTCHAR uni01D559 +ENCODING 120153 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +E0 +A0 +A0 +AC +B2 +A2 +A2 +A2 +A2 +A2 +E2 +ENDCHAR +STARTCHAR uni01D55A +ENCODING 120154 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +10 +10 +00 +78 +28 +28 +28 +28 +28 +28 +FE +ENDCHAR +STARTCHAR uni01D55B +ENCODING 120155 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +08 +08 +00 +3C +14 +14 +14 +14 +14 +14 +14 +98 +70 +ENDCHAR +STARTCHAR uni01D55C +ENCODING 120156 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +E0 +A0 +A2 +A4 +A8 +B0 +A8 +A4 +A2 +E1 +ENDCHAR +STARTCHAR uni01D55D +ENCODING 120157 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +78 +28 +28 +28 +28 +28 +28 +28 +28 +FE +ENDCHAR +STARTCHAR uni01D55E +ENCODING 120158 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +F6 +A9 +A9 +A9 +A9 +A9 +A9 +E9 +ENDCHAR +STARTCHAR uni01D55F +ENCODING 120159 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +EC +B2 +A2 +A2 +A2 +A2 +A2 +E2 +ENDCHAR +STARTCHAR uni01D560 +ENCODING 120160 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +A2 +A2 +A2 +A2 +A2 +A2 +7C +ENDCHAR +STARTCHAR uni01D561 +ENCODING 120161 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +EC +B2 +A2 +A2 +A2 +A2 +B2 +AC +A0 +E0 +ENDCHAR +STARTCHAR uni01D562 +ENCODING 120162 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +6E +9A +8A +8A +8A +8A +9A +6A +0A +0E +ENDCHAR +STARTCHAR uni01D563 +ENCODING 120163 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +EC +B2 +A2 +A0 +A0 +A0 +A0 +E0 +ENDCHAR +STARTCHAR uni01D564 +ENCODING 120164 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +C4 +A0 +50 +28 +14 +8C +78 +ENDCHAR +STARTCHAR uni01D565 +ENCODING 120165 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +28 +EE +28 +28 +28 +28 +28 +28 +1E +ENDCHAR +STARTCHAR uni01D566 +ENCODING 120166 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +8E +8A +8A +8A +8A +8A +9A +6E +ENDCHAR +STARTCHAR uni01D567 +ENCODING 120167 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +E2 +A2 +A2 +54 +54 +54 +28 +38 +ENDCHAR +STARTCHAR uni01D568 +ENCODING 120168 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +E1 +A9 +A9 +A9 +A9 +A9 +A9 +76 +ENDCHAR +STARTCHAR uni01D569 +ENCODING 120169 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +E2 +A2 +54 +28 +14 +2A +45 +47 +ENDCHAR +STARTCHAR uni01D56A +ENCODING 120170 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +8E +8A +8A +8A +8A +9A +6A +0A +0C +78 +ENDCHAR +STARTCHAR uni01D56B +ENCODING 120171 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +0C +14 +28 +50 +A0 +C0 +FC +ENDCHAR +STARTCHAR uni01D56C +ENCODING 120172 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +61 +F7 +B6 +F6 +F6 +B6 +66 +C6 +EF +7F +34 +ENDCHAR +STARTCHAR uni01D56D +ENCODING 120173 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +66 +FF +BB +F3 +FE +BF +33 +63 +F3 +BE +1C +ENDCHAR +STARTCHAR uni01D56E +ENCODING 120174 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +2C +6C +D8 +D0 +DC +CC +CC +D8 +D4 +7C +38 +ENDCHAR +STARTCHAR uni01D56F +ENCODING 120175 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +38 +7E +FE +B7 +F3 +51 +31 +21 +73 +FE +BC +ENDCHAR +STARTCHAR uni01D570 +ENCODING 120176 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +35 +77 +66 +EC +CB +CF +C5 +ED +6F +7E +1C +ENDCHAR +STARTCHAR uni01D571 +ENCODING 120177 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +39 +7F +FF +CE +D8 +5F +1F +7D +EE +E6 +66 +7E +3C +ENDCHAR +STARTCHAR uni01D572 +ENCODING 120178 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +25 +6D +DB +DB +DE +CE +CB +DB +73 +7E +1C +ENDCHAR +STARTCHAR uni01D573 +ENCODING 120179 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 0 -2 +BITMAP +18 +BE +F6 +68 +7C +76 +76 +66 +66 +66 +E6 +E6 +36 +3C +08 +ENDCHAR +STARTCHAR uni01D574 +ENCODING 120180 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +39 +7F +FF +C6 +E6 +6E +6C +EE +E6 +7E +3C +ENDCHAR +STARTCHAR uni01D575 +ENCODING 120181 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +39 +7F +FF +C6 +E6 +6E +0C +0C +66 +E6 +E6 +7E +3C +ENDCHAR +STARTCHAR uni01D576 +ENCODING 120182 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +1C +7E +7B +FD +EC +CE +FE +7E +67 +E7 +C2 +ENDCHAR +STARTCHAR uni01D577 +ENCODING 120183 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +1E +3F +63 +67 +76 +37 +33 +31 +7F +FE +8C +ENDCHAR +STARTCHAR uni01D578 +ENCODING 120184 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +B6 +FF +DB +DB +DB +DB +DB +DB +DB +FB +B1 +ENDCHAR +STARTCHAR uni01D579 +ENCODING 120185 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +4C +FE +B6 +F7 +F3 +B6 +36 +36 +B7 +F7 +E2 +ENDCHAR +STARTCHAR uni01D57A +ENCODING 120186 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +6C +FE +DE +E3 +63 +63 +63 +63 +FB +BE +8C +ENDCHAR +STARTCHAR uni01D57B +ENCODING 120187 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +4C +FE +B7 +F3 +F6 +B6 +36 +33 +7B +7F +36 +30 +30 +ENDCHAR +STARTCHAR uni01D57C +ENCODING 120188 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +6C +FE +DE +E3 +63 +6B +6F +67 +FB +BF +8D +ENDCHAR +STARTCHAR uni01D57D +ENCODING 120189 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +44 +6E +FE +B3 +37 +3E +3E +36 +B6 +E3 +C3 +ENDCHAR +STARTCHAR uni01D57E +ENCODING 120190 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +3D +7F +6E +D8 +BA +B7 +BD +D9 +7F +7E +3C +ENDCHAR +STARTCHAR uni01D57F +ENCODING 120191 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +71 +FF +9F +DE +58 +18 +18 +31 +7F +FE +8C +ENDCHAR +STARTCHAR uni01D580 +ENCODING 120192 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +E6 +E6 +66 +66 +66 +66 +66 +66 +76 +3F +0B +ENDCHAR +STARTCHAR uni01D581 +ENCODING 120193 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +48 +FC +B6 +F6 +F4 +B4 +36 +32 +72 +FE +BC +ENDCHAR +STARTCHAR uni01D582 +ENCODING 120194 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 0 +BITMAP +4C +FE +BB +EB +EA +EB +69 +69 +69 +FF +BE +ENDCHAR +STARTCHAR uni01D583 +ENCODING 120195 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +6C +FE +B2 +30 +7C +7C +30 +30 +38 +EE +C6 +ENDCHAR +STARTCHAR uni01D584 +ENCODING 120196 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +4C +FE +B6 +F6 +F6 +B6 +66 +46 +74 +FC +88 +ENDCHAR +STARTCHAR uni01D585 +ENCODING 120197 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 -2 +BITMAP +3C +7E +46 +46 +0E +1E +1E +06 +66 +E6 +E6 +7E +3C +ENDCHAR +STARTCHAR uni01D586 +ENCODING 120198 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +38 +7E +CE +CC +CC +CC +DE +7E +24 +ENDCHAR +STARTCHAR uni01D587 +ENCODING 120199 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +10 +B0 +E0 +68 +7C +76 +66 +66 +66 +E6 +FC +38 +ENDCHAR +STARTCHAR uni01D588 +ENCODING 120200 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 0 +BITMAP +30 +78 +D8 +D0 +C0 +C0 +C8 +78 +30 +ENDCHAR +STARTCHAR uni01D589 +ENCODING 120201 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 0 +BITMAP +10 +30 +38 +1C +3E +6E +66 +66 +66 +E6 +FC +38 +ENDCHAR +STARTCHAR uni01D58A +ENCODING 120202 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +30 +78 +DC +CC +FC +F0 +EC +7C +30 +ENDCHAR +STARTCHAR uni01D58B +ENCODING 120203 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -2 +BITMAP +50 +70 +60 +F8 +F8 +60 +60 +60 +60 +40 +40 +40 +40 +40 +ENDCHAR +STARTCHAR uni01D58C +ENCODING 120204 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 -2 +BITMAP +38 +7E +CE +CC +CC +DC +7E +26 +C6 +FC +78 +ENDCHAR +STARTCHAR uni01D58D +ENCODING 120205 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -2 +BITMAP +10 +B0 +E0 +68 +7C +76 +66 +66 +66 +E6 +F6 +36 +0C +08 +ENDCHAR +STARTCHAR uni01D58E +ENCODING 120206 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 12 2 0 +BITMAP +60 +60 +00 +60 +E0 +E0 +60 +60 +60 +70 +70 +20 +ENDCHAR +STARTCHAR uni01D58F +ENCODING 120207 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 14 2 -2 +BITMAP +60 +60 +00 +60 +E0 +E0 +60 +60 +60 +60 +60 +70 +D0 +80 +ENDCHAR +STARTCHAR uni01D590 +ENCODING 120208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +10 +B0 +E4 +6C +FC +FC +60 +60 +60 +E8 +F8 +30 +ENDCHAR +STARTCHAR uni01D591 +ENCODING 120209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +10 +B0 +E0 +60 +60 +60 +60 +60 +60 +E8 +F8 +30 +ENDCHAR +STARTCHAR uni01D592 +ENCODING 120210 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +B6 +FE +DA +DA +DA +DA +DA +DA +DA +ENDCHAR +STARTCHAR uni01D593 +ENCODING 120211 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +9C +FC +EC +CC +CC +CC +CC +CE +C6 +ENDCHAR +STARTCHAR uni01D594 +ENCODING 120212 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +38 +7C +64 +64 +64 +64 +6C +F8 +B0 +ENDCHAR +STARTCHAR uni01D595 +ENCODING 120213 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +B8 +FC +64 +64 +64 +64 +6C +F8 +F0 +60 +60 +ENDCHAR +STARTCHAR uni01D596 +ENCODING 120214 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +34 +7C +D8 +98 +98 +98 +B8 +F8 +58 +18 +18 +ENDCHAR +STARTCHAR uni01D597 +ENCODING 120215 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +98 +FC +6C +6C +60 +60 +E8 +F8 +30 +ENDCHAR +STARTCHAR uni01D598 +ENCODING 120216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +0C +0E +3E +7C +6E +7E +76 +86 +FC +78 +ENDCHAR +STARTCHAR uni01D599 +ENCODING 120217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +20 +60 +60 +FC +FC +60 +60 +60 +E8 +F8 +30 +ENDCHAR +STARTCHAR uni01D59A +ENCODING 120218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +04 +CE +EE +6C +6C +6C +6C +EC +FE +76 +ENDCHAR +STARTCHAR uni01D59B +ENCODING 120219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +80 +9C +FE +66 +66 +66 +66 +E6 +FC +18 +ENDCHAR +STARTCHAR uni01D59C +ENCODING 120220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +80 +9E +FE +6A +6A +6A +6A +6A +7E +5C +ENDCHAR +STARTCHAR uni01D59D +ENCODING 120221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +98 +FC +6C +6C +F8 +F8 +E8 +F8 +B0 +C0 +40 +ENDCHAR +STARTCHAR uni01D59E +ENCODING 120222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +80 +8C +DE +76 +66 +66 +66 +76 +76 +26 +0C +08 +ENDCHAR +STARTCHAR uni01D59F +ENCODING 120223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 -2 +BITMAP +70 +F8 +98 +18 +78 +78 +58 +D8 +98 +F0 +60 +ENDCHAR +STARTCHAR uni01D5A0 +ENCODING 120224 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +48 +84 +84 +FC +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01D5A1 +ENCODING 120225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +84 +84 +84 +84 +F8 +ENDCHAR +STARTCHAR uni01D5A2 +ENCODING 120226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +80 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D5A3 +ENCODING 120227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F0 +88 +84 +84 +84 +84 +84 +84 +88 +F0 +ENDCHAR +STARTCHAR uni01D5A4 +ENCODING 120228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni01D5A5 +ENCODING 120229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D5A6 +ENCODING 120230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +80 +9C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01D5A7 +ENCODING 120231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +FC +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01D5A8 +ENCODING 120232 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D5A9 +ENCODING 120233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3E +08 +08 +08 +08 +08 +08 +88 +88 +70 +ENDCHAR +STARTCHAR uni01D5AA +ENCODING 120234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +88 +90 +A0 +C0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni01D5AB +ENCODING 120235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni01D5AC +ENCODING 120236 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +CC +CC +B4 +B4 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01D5AD +ENCODING 120237 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +C4 +C4 +A4 +A4 +94 +94 +8C +8C +84 +ENDCHAR +STARTCHAR uni01D5AE +ENCODING 120238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D5AF +ENCODING 120239 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D5B0 +ENCODING 120240 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -1 +BITMAP +78 +84 +84 +84 +84 +84 +84 +B4 +CC +78 +06 +ENDCHAR +STARTCHAR uni01D5B1 +ENCODING 120241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +F8 +84 +84 +84 +F8 +90 +88 +88 +84 +84 +ENDCHAR +STARTCHAR uni01D5B2 +ENCODING 120242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +80 +60 +18 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D5B3 +ENCODING 120243 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01D5B4 +ENCODING 120244 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D5B5 +ENCODING 120245 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +82 +44 +44 +44 +28 +28 +10 +10 +ENDCHAR +STARTCHAR uni01D5B6 +ENCODING 120246 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +B4 +B4 +CC +CC +84 +84 +ENDCHAR +STARTCHAR uni01D5B7 +ENCODING 120247 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +48 +48 +30 +30 +48 +48 +84 +84 +ENDCHAR +STARTCHAR uni01D5B8 +ENCODING 120248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +82 +44 +44 +28 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01D5B9 +ENCODING 120249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +10 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni01D5BA +ENCODING 120250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +7C +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01D5BB +ENCODING 120251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +C4 +B8 +ENDCHAR +STARTCHAR uni01D5BC +ENCODING 120252 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +80 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni01D5BD +ENCODING 120253 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +04 +04 +74 +8C +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01D5BE +ENCODING 120254 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +FC +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni01D5BF +ENCODING 120255 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 0 +BITMAP +18 +20 +20 +20 +F8 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01D5C0 +ENCODING 120256 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +04 +74 +88 +88 +88 +70 +40 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D5C1 +ENCODING 120257 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +80 +80 +80 +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01D5C2 +ENCODING 120258 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 0 +BITMAP +20 +20 +00 +60 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D5C3 +ENCODING 120259 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 -2 +BITMAP +08 +08 +00 +18 +08 +08 +08 +08 +08 +08 +08 +90 +60 +ENDCHAR +STARTCHAR uni01D5C4 +ENCODING 120260 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +80 +80 +88 +90 +A0 +C0 +A0 +90 +88 +84 +ENDCHAR +STARTCHAR uni01D5C5 +ENCODING 120261 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +60 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D5C6 +ENCODING 120262 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +EC +92 +92 +92 +92 +92 +92 +92 +ENDCHAR +STARTCHAR uni01D5C7 +ENCODING 120263 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +B8 +C4 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01D5C8 +ENCODING 120264 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D5C9 +ENCODING 120265 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +B8 +C4 +84 +84 +84 +84 +C4 +B8 +80 +80 +ENDCHAR +STARTCHAR uni01D5CA +ENCODING 120266 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +74 +8C +84 +84 +84 +84 +8C +74 +04 +04 +ENDCHAR +STARTCHAR uni01D5CB +ENCODING 120267 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +B8 +C4 +84 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01D5CC +ENCODING 120268 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +80 +60 +18 +04 +84 +78 +ENDCHAR +STARTCHAR uni01D5CD +ENCODING 120269 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +20 +20 +F8 +20 +20 +20 +20 +20 +20 +18 +ENDCHAR +STARTCHAR uni01D5CE +ENCODING 120270 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +8C +74 +ENDCHAR +STARTCHAR uni01D5CF +ENCODING 120271 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +48 +48 +48 +30 +30 +ENDCHAR +STARTCHAR uni01D5D0 +ENCODING 120272 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +82 +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni01D5D1 +ENCODING 120273 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +48 +30 +30 +48 +84 +84 +ENDCHAR +STARTCHAR uni01D5D2 +ENCODING 120274 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +84 +84 +84 +84 +84 +4C +34 +04 +04 +78 +ENDCHAR +STARTCHAR uni01D5D3 +ENCODING 120275 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +FC +04 +08 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni01D5D4 +ENCODING 120276 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +6C +6C +C6 +C6 +FE +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D5D5 +ENCODING 120277 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +C6 +C6 +C6 +FC +C6 +C6 +C6 +C6 +FC +ENDCHAR +STARTCHAR uni01D5D6 +ENCODING 120278 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C0 +C0 +C0 +C0 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D5D7 +ENCODING 120279 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +F8 +CC +C6 +C6 +C6 +C6 +C6 +C6 +CC +F8 +ENDCHAR +STARTCHAR uni01D5D8 +ENCODING 120280 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C0 +C0 +C0 +FC +C0 +C0 +C0 +C0 +FE +ENDCHAR +STARTCHAR uni01D5D9 +ENCODING 120281 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C0 +C0 +C0 +FC +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D5DA +ENCODING 120282 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C0 +C0 +DE +C6 +C6 +CE +7E +ENDCHAR +STARTCHAR uni01D5DB +ENCODING 120283 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +C6 +C6 +FE +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D5DC +ENCODING 120284 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +30 +30 +30 +30 +30 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D5DD +ENCODING 120285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3F +0C +0C +0C +0C +0C +0C +CC +CC +78 +ENDCHAR +STARTCHAR uni01D5DE +ENCODING 120286 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +CC +D8 +F0 +E0 +E0 +F0 +D8 +CC +C6 +ENDCHAR +STARTCHAR uni01D5DF +ENCODING 120287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +FE +ENDCHAR +STARTCHAR uni01D5E0 +ENCODING 120288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +EE +EE +FE +FE +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D5E1 +ENCODING 120289 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +E6 +E6 +F6 +F6 +DE +DE +CE +CE +C6 +ENDCHAR +STARTCHAR uni01D5E2 +ENCODING 120290 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C6 +C6 +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D5E3 +ENCODING 120291 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +C6 +C6 +C6 +FC +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D5E4 +ENCODING 120292 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -1 +BITMAP +7C +C6 +C6 +C6 +C6 +C6 +C6 +FE +EE +7C +07 +ENDCHAR +STARTCHAR uni01D5E5 +ENCODING 120293 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +C6 +C6 +C6 +FC +D8 +CC +CC +C6 +C6 +ENDCHAR +STARTCHAR uni01D5E6 +ENCODING 120294 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C0 +70 +1C +06 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D5E7 +ENCODING 120295 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +18 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D5E8 +ENCODING 120296 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +C6 +C6 +C6 +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D5E9 +ENCODING 120297 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +C3 +C3 +C3 +66 +66 +66 +3C +3C +18 +18 +ENDCHAR +STARTCHAR uni01D5EA +ENCODING 120298 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +C6 +C6 +FE +FE +EE +EE +C6 +C6 +ENDCHAR +STARTCHAR uni01D5EB +ENCODING 120299 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +6C +6C +38 +38 +6C +6C +C6 +C6 +ENDCHAR +STARTCHAR uni01D5EC +ENCODING 120300 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +C3 +C3 +66 +66 +3C +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D5ED +ENCODING 120301 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +06 +06 +0C +18 +30 +60 +C0 +C0 +FE +ENDCHAR +STARTCHAR uni01D5EE +ENCODING 120302 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +06 +7E +C6 +C6 +CE +7E +ENDCHAR +STARTCHAR uni01D5EF +ENCODING 120303 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +C0 +C0 +C0 +FC +E6 +C6 +C6 +C6 +C6 +E6 +FC +ENDCHAR +STARTCHAR uni01D5F0 +ENCODING 120304 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +C0 +C0 +C0 +C0 +C6 +7C +ENDCHAR +STARTCHAR uni01D5F1 +ENCODING 120305 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +06 +06 +06 +7E +CE +C6 +C6 +C6 +C6 +CE +7E +ENDCHAR +STARTCHAR uni01D5F2 +ENCODING 120306 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +C6 +FE +C0 +C0 +C6 +7C +ENDCHAR +STARTCHAR uni01D5F3 +ENCODING 120307 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +1C +30 +30 +30 +FC +30 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni01D5F4 +ENCODING 120308 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +06 +7E +CC +CC +CC +78 +60 +7C +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D5F5 +ENCODING 120309 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +C0 +C0 +C0 +FC +E6 +C6 +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D5F6 +ENCODING 120310 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +30 +30 +00 +70 +30 +30 +30 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D5F7 +ENCODING 120311 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -2 +BITMAP +0C +0C +00 +1C +0C +0C +0C +0C +0C +0C +0C +D8 +70 +ENDCHAR +STARTCHAR uni01D5F8 +ENCODING 120312 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C0 +C0 +CC +D8 +F0 +E0 +F0 +D8 +CC +C6 +ENDCHAR +STARTCHAR uni01D5F9 +ENCODING 120313 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +70 +30 +30 +30 +30 +30 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D5FA +ENCODING 120314 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +FE +DB +DB +DB +DB +DB +DB +DB +ENDCHAR +STARTCHAR uni01D5FB +ENCODING 120315 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FC +E6 +C6 +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D5FC +ENCODING 120316 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +C6 +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D5FD +ENCODING 120317 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +FC +E6 +C6 +C6 +C6 +C6 +E6 +FC +C0 +C0 +ENDCHAR +STARTCHAR uni01D5FE +ENCODING 120318 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +7E +CE +C6 +C6 +C6 +C6 +CE +7E +06 +06 +ENDCHAR +STARTCHAR uni01D5FF +ENCODING 120319 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FC +E6 +C6 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D600 +ENCODING 120320 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +C0 +70 +1C +06 +C6 +7C +ENDCHAR +STARTCHAR uni01D601 +ENCODING 120321 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +30 +FC +30 +30 +30 +30 +30 +30 +1C +ENDCHAR +STARTCHAR uni01D602 +ENCODING 120322 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +C6 +C6 +C6 +C6 +C6 +C6 +CE +7C +ENDCHAR +STARTCHAR uni01D603 +ENCODING 120323 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +C6 +C6 +C6 +6C +6C +6C +38 +38 +ENDCHAR +STARTCHAR uni01D604 +ENCODING 120324 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +C3 +DB +DB +DB +DB +DB +DB +7E +ENDCHAR +STARTCHAR uni01D605 +ENCODING 120325 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +C6 +C6 +6C +38 +38 +6C +C6 +C6 +ENDCHAR +STARTCHAR uni01D606 +ENCODING 120326 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +C6 +C6 +C6 +C6 +C6 +6E +3E +06 +06 +7C +ENDCHAR +STARTCHAR uni01D607 +ENCODING 120327 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +06 +0C +18 +30 +60 +C0 +FE +ENDCHAR +STARTCHAR uni01D608 +ENCODING 120328 +BBX 8 10 4 0 +BITMAP +06 +09 +09 +11 +21 +3F +42 +42 +42 +84 +ENDCHAR +STARTCHAR uni01D609 +ENCODING 120329 +BBX 9 10 4 0 +BITMAP +1F00 +1080 +1080 +2100 +3E00 +2100 +4200 +4200 +4400 +F800 +ENDCHAR +STARTCHAR uni01D60A +ENCODING 120330 +BBX 8 10 4 0 +BITMAP +1E +21 +21 +40 +40 +40 +80 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D60B +ENCODING 120331 +BBX 9 10 4 0 +BITMAP +1E00 +1100 +1080 +2100 +2100 +2100 +4200 +4200 +4400 +F800 +ENDCHAR +STARTCHAR uni01D60C +ENCODING 120332 +BBX 9 10 4 0 +BITMAP +1F80 +1000 +1000 +2000 +3E00 +2000 +4000 +4000 +4000 +FC00 +ENDCHAR +STARTCHAR uni01D60D +ENCODING 120333 +BBX 9 10 4 0 +BITMAP +1F80 +1000 +1000 +2000 +3E00 +2000 +4000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni01D60E +ENCODING 120334 +BBX 8 10 4 0 +BITMAP +1E +21 +21 +40 +40 +4E +84 +84 +8C +78 +ENDCHAR +STARTCHAR uni01D60F +ENCODING 120335 +BBX 9 10 4 0 +BITMAP +1080 +1080 +1080 +2100 +3F00 +2100 +4200 +4200 +4200 +8400 +ENDCHAR +STARTCHAR uni01D610 +ENCODING 120336 +BBX 7 10 5 0 +BITMAP +3E +08 +08 +10 +10 +10 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D611 +ENCODING 120337 +BBX 9 10 4 0 +BITMAP +0F80 +0200 +0200 +0400 +0400 +0400 +0800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni01D612 +ENCODING 120338 +BBX 8 10 4 0 +BITMAP +11 +12 +14 +28 +30 +30 +50 +48 +44 +84 +ENDCHAR +STARTCHAR uni01D613 +ENCODING 120339 +BBX 6 10 5 0 +BITMAP +10 +10 +10 +20 +20 +20 +40 +40 +40 +FC +ENDCHAR +STARTCHAR uni01D614 +ENCODING 120340 +BBX 9 10 4 0 +BITMAP +1080 +1080 +1180 +3300 +2D00 +2D00 +4200 +4200 +4200 +8400 +ENDCHAR +STARTCHAR uni01D615 +ENCODING 120341 +BBX 9 10 4 0 +BITMAP +1080 +1880 +1880 +2900 +2900 +2900 +4A00 +4600 +4600 +8400 +ENDCHAR +STARTCHAR uni01D616 +ENCODING 120342 +BBX 8 10 4 0 +BITMAP +1E +21 +21 +42 +42 +42 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D617 +ENCODING 120343 +BBX 9 10 4 0 +BITMAP +1F00 +1080 +1080 +2100 +3E00 +2000 +4000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni01D618 +ENCODING 120344 +BBX 8 11 4 -1 +BITMAP +1E +21 +21 +42 +42 +42 +84 +B4 +CC +70 +0C +ENDCHAR +STARTCHAR uni01D619 +ENCODING 120345 +BBX 9 10 4 0 +BITMAP +1F00 +1080 +1080 +2100 +3E00 +2400 +4400 +4400 +4200 +8200 +ENDCHAR +STARTCHAR uni01D61A +ENCODING 120346 +BBX 8 10 4 0 +BITMAP +1E +21 +21 +40 +30 +08 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D61B +ENCODING 120347 +BBX 7 10 5 0 +BITMAP +FE +10 +10 +20 +20 +20 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni01D61C +ENCODING 120348 +BBX 8 10 4 0 +BITMAP +21 +21 +21 +42 +42 +42 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D61D +ENCODING 120349 +BBX 7 10 5 0 +BITMAP +82 +82 +84 +88 +88 +90 +A0 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni01D61E +ENCODING 120350 +BBX 9 10 4 0 +BITMAP +1080 +2100 +2100 +2100 +5A00 +5A00 +6600 +C400 +8400 +8400 +ENDCHAR +STARTCHAR uni01D61F +ENCODING 120351 +BBX 9 10 4 0 +BITMAP +1080 +1080 +1100 +1200 +0C00 +0C00 +1400 +2400 +4200 +8200 +ENDCHAR +STARTCHAR uni01D620 +ENCODING 120352 +BBX 7 10 5 0 +BITMAP +82 +82 +84 +88 +50 +20 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni01D621 +ENCODING 120353 +BBX 9 10 4 0 +BITMAP +1F80 +0080 +0080 +0300 +0400 +0800 +3000 +4000 +4000 +FC00 +ENDCHAR +STARTCHAR uni01D622 +ENCODING 120354 +BBX 7 8 5 0 +BITMAP +3C +42 +02 +3E +44 +84 +8C +78 +ENDCHAR +STARTCHAR uni01D623 +ENCODING 120355 +BBX 8 11 4 0 +BITMAP +08 +10 +10 +1E +11 +21 +21 +42 +42 +62 +9C +ENDCHAR +STARTCHAR uni01D624 +ENCODING 120356 +BBX 7 8 5 0 +BITMAP +3C +42 +40 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni01D625 +ENCODING 120357 +BBX 9 11 4 0 +BITMAP +0080 +0100 +0100 +3D00 +4200 +4200 +4200 +8400 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni01D626 +ENCODING 120358 +BBX 7 8 5 0 +BITMAP +3C +42 +42 +7E +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni01D627 +ENCODING 120359 +BBX 7 11 5 0 +BITMAP +0E +10 +10 +10 +FC +20 +20 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni01D628 +ENCODING 120360 +BBX 9 11 4 -2 +BITMAP +0080 +1D00 +2200 +2200 +2200 +1C00 +2000 +7800 +8400 +8400 +7800 +ENDCHAR +STARTCHAR uni01D629 +ENCODING 120361 +BBX 8 11 4 0 +BITMAP +08 +10 +10 +1E +31 +21 +21 +42 +42 +42 +84 +ENDCHAR +STARTCHAR uni01D62A +ENCODING 120362 +BBX 6 11 5 0 +BITMAP +04 +08 +00 +08 +10 +10 +10 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D62B +ENCODING 120363 +BBX 9 13 4 -2 +BITMAP +0080 +0100 +0000 +0100 +0200 +0200 +0200 +0400 +0400 +0400 +0800 +9000 +6000 +ENDCHAR +STARTCHAR uni01D62C +ENCODING 120364 +BBX 7 10 5 0 +BITMAP +10 +10 +12 +24 +28 +30 +50 +48 +44 +84 +ENDCHAR +STARTCHAR uni01D62D +ENCODING 120365 +BBX 5 10 6 0 +BITMAP +18 +08 +08 +10 +10 +10 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D62E +ENCODING 120366 +BBX 9 8 4 0 +BITMAP +1B00 +2480 +2480 +2480 +4900 +4900 +4900 +9200 +ENDCHAR +STARTCHAR uni01D62F +ENCODING 120367 +BBX 8 8 4 0 +BITMAP +1E +21 +21 +21 +42 +42 +42 +84 +ENDCHAR +STARTCHAR uni01D630 +ENCODING 120368 +BBX 7 8 5 0 +BITMAP +3C +42 +42 +42 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D631 +ENCODING 120369 +BBX 9 10 4 -2 +BITMAP +0F00 +1080 +1080 +1080 +2100 +2100 +2100 +5E00 +4000 +8000 +ENDCHAR +STARTCHAR uni01D632 +ENCODING 120370 +BBX 8 10 4 -2 +BITMAP +3D +42 +42 +42 +84 +84 +84 +78 +08 +10 +ENDCHAR +STARTCHAR uni01D633 +ENCODING 120371 +BBX 8 8 4 0 +BITMAP +1E +21 +21 +20 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni01D634 +ENCODING 120372 +BBX 7 8 5 0 +BITMAP +3C +42 +40 +30 +08 +04 +84 +78 +ENDCHAR +STARTCHAR uni01D635 +ENCODING 120373 +BBX 5 10 6 0 +BITMAP +20 +20 +F8 +40 +40 +40 +80 +80 +80 +60 +ENDCHAR +STARTCHAR uni01D636 +ENCODING 120374 +BBX 8 8 4 0 +BITMAP +21 +42 +42 +42 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D637 +ENCODING 120375 +BBX 7 8 5 0 +BITMAP +42 +84 +84 +88 +90 +90 +A0 +40 +ENDCHAR +STARTCHAR uni01D638 +ENCODING 120376 +BBX 9 8 4 0 +BITMAP +2080 +4900 +4900 +4900 +9200 +9200 +9200 +6C00 +ENDCHAR +STARTCHAR uni01D639 +ENCODING 120377 +BBX 9 8 4 0 +BITMAP +2080 +2100 +1200 +0C00 +1800 +2400 +4200 +8200 +ENDCHAR +STARTCHAR uni01D63A +ENCODING 120378 +BBX 8 10 4 -2 +BITMAP +21 +42 +42 +42 +44 +4C +34 +08 +08 +F0 +ENDCHAR +STARTCHAR uni01D63B +ENCODING 120379 +BBX 9 8 4 0 +BITMAP +1F80 +0100 +0200 +0400 +1800 +2000 +4000 +FC00 +ENDCHAR +STARTCHAR uni01D63C +ENCODING 120380 +BBX 9 10 4 0 +BITMAP +0700 +0D80 +1980 +3180 +3180 +3F80 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D63D +ENCODING 120381 +BBX 10 10 3 0 +BITMAP +1F80 +18C0 +18C0 +3180 +3F00 +3180 +6300 +6300 +6300 +FC00 +ENDCHAR +STARTCHAR uni01D63E +ENCODING 120382 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6000 +6000 +6000 +C000 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D63F +ENCODING 120383 +BBX 9 10 4 0 +BITMAP +3E00 +3300 +3180 +6300 +6300 +6300 +C600 +C600 +CC00 +F800 +ENDCHAR +STARTCHAR uni01D640 +ENCODING 120384 +BBX 10 10 3 0 +BITMAP +1FC0 +1800 +1800 +3000 +3F00 +3000 +6000 +6000 +6000 +FE00 +ENDCHAR +STARTCHAR uni01D641 +ENCODING 120385 +BBX 10 10 3 0 +BITMAP +1FC0 +1800 +1800 +3000 +3F00 +3000 +6000 +6000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D642 +ENCODING 120386 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6000 +6000 +6F00 +C600 +C600 +CE00 +7C00 +ENDCHAR +STARTCHAR uni01D643 +ENCODING 120387 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +18C0 +3180 +3F80 +3180 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D644 +ENCODING 120388 +BBX 8 10 4 0 +BITMAP +3F +0C +0C +18 +18 +18 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D645 +ENCODING 120389 +BBX 10 10 3 0 +BITMAP +0FC0 +0300 +0300 +0600 +0600 +0600 +0C00 +CC00 +CC00 +7800 +ENDCHAR +STARTCHAR uni01D646 +ENCODING 120390 +BBX 10 10 3 0 +BITMAP +18C0 +1980 +1B00 +3C00 +3800 +3800 +7800 +6C00 +6600 +C600 +ENDCHAR +STARTCHAR uni01D647 +ENCODING 120391 +BBX 7 10 5 0 +BITMAP +18 +18 +18 +30 +30 +30 +60 +60 +60 +FE +ENDCHAR +STARTCHAR uni01D648 +ENCODING 120392 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +19C0 +3B80 +3F80 +3F80 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D649 +ENCODING 120393 +BBX 10 10 3 0 +BITMAP +18C0 +1CC0 +1CC0 +3D80 +3D80 +3780 +6700 +6700 +6700 +C600 +ENDCHAR +STARTCHAR uni01D64A +ENCODING 120394 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6300 +6300 +6300 +C600 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D64B +ENCODING 120395 +BBX 10 10 3 0 +BITMAP +1F80 +18C0 +18C0 +3180 +3F00 +3000 +6000 +6000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D64C +ENCODING 120396 +BBX 9 11 4 -1 +BITMAP +1F00 +3180 +3180 +6300 +6300 +6300 +C600 +FE00 +EE00 +7800 +0E00 +ENDCHAR +STARTCHAR uni01D64D +ENCODING 120397 +BBX 10 10 3 0 +BITMAP +1F80 +18C0 +18C0 +3180 +3F00 +3600 +6600 +6600 +6300 +C300 +ENDCHAR +STARTCHAR uni01D64E +ENCODING 120398 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6000 +3800 +1C00 +0600 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D64F +ENCODING 120399 +BBX 8 10 4 0 +BITMAP +FF +18 +18 +30 +30 +30 +60 +60 +60 +C0 +ENDCHAR +STARTCHAR uni01D650 +ENCODING 120400 +BBX 9 10 4 0 +BITMAP +3180 +3180 +3180 +6300 +6300 +6300 +C600 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D651 +ENCODING 120401 +BBX 8 10 4 0 +BITMAP +C3 +C3 +C6 +CC +CC +D8 +F0 +F0 +E0 +C0 +ENDCHAR +STARTCHAR uni01D652 +ENCODING 120402 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +18C0 +3180 +3F80 +3F80 +7700 +7700 +6300 +C600 +ENDCHAR +STARTCHAR uni01D653 +ENCODING 120403 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +1980 +0B00 +0E00 +0E00 +3600 +3600 +6300 +C300 +ENDCHAR +STARTCHAR uni01D654 +ENCODING 120404 +BBX 8 10 4 0 +BITMAP +C3 +C3 +C6 +CC +78 +30 +60 +60 +60 +C0 +ENDCHAR +STARTCHAR uni01D655 +ENCODING 120405 +BBX 10 10 3 0 +BITMAP +1FC0 +00C0 +00C0 +0300 +0600 +0C00 +3000 +6000 +6000 +FE00 +ENDCHAR +STARTCHAR uni01D656 +ENCODING 120406 +BBX 8 8 4 0 +BITMAP +1E +63 +03 +3F +C6 +C6 +CE +7C +ENDCHAR +STARTCHAR uni01D657 +ENCODING 120407 +BBX 9 11 4 0 +BITMAP +0C00 +1800 +1800 +1F00 +3980 +3180 +3180 +6300 +6300 +6300 +FC00 +ENDCHAR +STARTCHAR uni01D658 +ENCODING 120408 +BBX 8 8 4 0 +BITMAP +3E +63 +60 +60 +C0 +C0 +C6 +7C +ENDCHAR +STARTCHAR uni01D659 +ENCODING 120409 +BBX 10 11 3 0 +BITMAP +00C0 +0180 +0180 +3F80 +6300 +6300 +6300 +C600 +C600 +CE00 +7C00 +ENDCHAR +STARTCHAR uni01D65A +ENCODING 120410 +BBX 8 8 4 0 +BITMAP +3E +63 +63 +7F +C0 +C0 +C6 +7C +ENDCHAR +STARTCHAR uni01D65B +ENCODING 120411 +BBX 8 11 4 0 +BITMAP +0F +18 +18 +18 +FE +30 +30 +60 +60 +60 +C0 +ENDCHAR +STARTCHAR uni01D65C +ENCODING 120412 +BBX 11 11 3 -2 +BITMAP +0060 +1EC0 +3300 +3300 +3300 +1E00 +3000 +3E00 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D65D +ENCODING 120413 +BBX 9 11 4 0 +BITMAP +0C00 +1800 +1800 +1F00 +3980 +3180 +3180 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D65E +ENCODING 120414 +BBX 7 11 5 0 +BITMAP +06 +0C +00 +0C +18 +18 +18 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D65F +ENCODING 120415 +BBX 10 13 3 -2 +BITMAP +00C0 +0180 +0000 +0380 +0300 +0300 +0300 +0600 +0600 +0600 +0C00 +D800 +7000 +ENDCHAR +STARTCHAR uni01D660 +ENCODING 120416 +BBX 9 10 4 0 +BITMAP +1800 +1800 +1980 +3600 +3C00 +3800 +7800 +6C00 +6600 +C600 +ENDCHAR +STARTCHAR uni01D661 +ENCODING 120417 +BBX 6 10 5 0 +BITMAP +1C +0C +0C +18 +18 +18 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D662 +ENCODING 120418 +BBX 10 8 3 0 +BITMAP +1F80 +36C0 +36C0 +36C0 +6D80 +6D80 +6D80 +DB00 +ENDCHAR +STARTCHAR uni01D663 +ENCODING 120419 +BBX 9 8 4 0 +BITMAP +1F00 +3980 +3180 +3180 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D664 +ENCODING 120420 +BBX 8 8 4 0 +BITMAP +3E +63 +63 +63 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D665 +ENCODING 120421 +BBX 10 10 3 -2 +BITMAP +0F80 +1CC0 +18C0 +18C0 +3180 +3180 +3180 +7E00 +6000 +C000 +ENDCHAR +STARTCHAR uni01D666 +ENCODING 120422 +BBX 8 10 4 -2 +BITMAP +3F +63 +63 +63 +C6 +C6 +CE +7C +0C +18 +ENDCHAR +STARTCHAR uni01D667 +ENCODING 120423 +BBX 9 8 4 0 +BITMAP +1F00 +3980 +3180 +3000 +6000 +6000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D668 +ENCODING 120424 +BBX 8 8 4 0 +BITMAP +3E +63 +60 +38 +1C +06 +C6 +7C +ENDCHAR +STARTCHAR uni01D669 +ENCODING 120425 +BBX 6 10 5 0 +BITMAP +30 +30 +FC +60 +60 +60 +C0 +C0 +C0 +70 +ENDCHAR +STARTCHAR uni01D66A +ENCODING 120426 +BBX 9 8 4 0 +BITMAP +3180 +6300 +6300 +6300 +C600 +C600 +CE00 +7C00 +ENDCHAR +STARTCHAR uni01D66B +ENCODING 120427 +BBX 8 8 4 0 +BITMAP +63 +C6 +C6 +CC +D8 +D8 +70 +60 +ENDCHAR +STARTCHAR uni01D66C +ENCODING 120428 +BBX 10 8 3 0 +BITMAP +30C0 +6D80 +6D80 +6D80 +DB00 +DB00 +DB00 +7E00 +ENDCHAR +STARTCHAR uni01D66D +ENCODING 120429 +BBX 10 8 3 0 +BITMAP +18C0 +3180 +1B00 +0E00 +1C00 +3600 +6300 +C600 +ENDCHAR +STARTCHAR uni01D66E +ENCODING 120430 +BBX 9 10 4 -2 +BITMAP +3180 +6300 +6300 +6300 +6600 +6E00 +3E00 +0C00 +0C00 +F800 +ENDCHAR +STARTCHAR uni01D66F +ENCODING 120431 +BBX 10 8 3 0 +BITMAP +1FC0 +0180 +0300 +0600 +1C00 +3000 +6000 +FE00 +ENDCHAR +STARTCHAR uni01D670 +ENCODING 120432 +BBX 10 10 3 0 +BITMAP +3C00 +0C00 +1200 +1200 +1200 +2100 +3F00 +2100 +4080 +F3C0 +ENDCHAR +STARTCHAR uni01D671 +ENCODING 120433 +BBX 8 10 4 0 +BITMAP +FE +41 +41 +41 +7E +41 +41 +41 +41 +FE +ENDCHAR +STARTCHAR uni01D672 +ENCODING 120434 +BBX 8 10 4 0 +BITMAP +3D +43 +81 +80 +80 +80 +80 +80 +41 +3E +ENDCHAR +STARTCHAR uni01D673 +ENCODING 120435 +BBX 8 10 4 0 +BITMAP +FC +42 +41 +41 +41 +41 +41 +41 +42 +FC +ENDCHAR +STARTCHAR uni01D674 +ENCODING 120436 +BBX 8 10 4 0 +BITMAP +FF +41 +40 +44 +7C +44 +40 +41 +41 +FF +ENDCHAR +STARTCHAR uni01D675 +ENCODING 120437 +BBX 8 10 4 0 +BITMAP +FF +41 +40 +44 +7C +44 +40 +40 +40 +F0 +ENDCHAR +STARTCHAR uni01D676 +ENCODING 120438 +BBX 9 10 4 0 +BITMAP +3D00 +4300 +8100 +8000 +8000 +8380 +8100 +8100 +4100 +3E00 +ENDCHAR +STARTCHAR uni01D677 +ENCODING 120439 +BBX 8 10 4 0 +BITMAP +E7 +42 +42 +42 +7E +42 +42 +42 +42 +E7 +ENDCHAR +STARTCHAR uni01D678 +ENCODING 120440 +BBX 5 10 6 0 +BITMAP +F8 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D679 +ENCODING 120441 +BBX 9 10 4 0 +BITMAP +0F80 +0200 +0200 +0200 +0200 +0200 +8200 +8200 +8400 +7800 +ENDCHAR +STARTCHAR uni01D67A +ENCODING 120442 +BBX 9 10 4 0 +BITMAP +E100 +4200 +4400 +4800 +5000 +6800 +4400 +4200 +4100 +E180 +ENDCHAR +STARTCHAR uni01D67B +ENCODING 120443 +BBX 7 10 5 0 +BITMAP +E0 +40 +40 +40 +40 +40 +40 +42 +42 +FE +ENDCHAR +STARTCHAR uni01D67C +ENCODING 120444 +BBX 10 10 3 0 +BITMAP +E1C0 +6180 +5280 +5280 +5280 +4C80 +4C80 +4080 +4080 +E1C0 +ENDCHAR +STARTCHAR uni01D67D +ENCODING 120445 +BBX 9 10 4 0 +BITMAP +C380 +6100 +5100 +5100 +4900 +4900 +4500 +4500 +4300 +E100 +ENDCHAR +STARTCHAR uni01D67E +ENCODING 120446 +BBX 9 10 4 0 +BITMAP +1C00 +2200 +4100 +8080 +8080 +8080 +8080 +4100 +2200 +1C00 +ENDCHAR +STARTCHAR uni01D67F +ENCODING 120447 +BBX 8 10 4 0 +BITMAP +FC +42 +41 +41 +42 +7C +40 +40 +40 +F0 +ENDCHAR +STARTCHAR uni01D680 +ENCODING 120448 +BBX 9 13 4 -2 +BITMAP +1C00 +2200 +4100 +8080 +8080 +8080 +8080 +4100 +2200 +1C00 +1000 +3C80 +2300 +ENDCHAR +STARTCHAR uni01D681 +ENCODING 120449 +BBX 9 10 4 0 +BITMAP +FC00 +4200 +4100 +4100 +4200 +7C00 +4400 +4200 +4100 +E180 +ENDCHAR +STARTCHAR uni01D682 +ENCODING 120450 +BBX 7 10 5 0 +BITMAP +7A +86 +82 +80 +70 +0C +02 +82 +C2 +BC +ENDCHAR +STARTCHAR uni01D683 +ENCODING 120451 +BBX 7 10 5 0 +BITMAP +FE +92 +10 +10 +10 +10 +10 +10 +10 +38 +ENDCHAR +STARTCHAR uni01D684 +ENCODING 120452 +BBX 9 10 4 0 +BITMAP +E380 +4100 +4100 +4100 +4100 +4100 +4100 +4100 +2200 +1C00 +ENDCHAR +STARTCHAR uni01D685 +ENCODING 120453 +BBX 10 10 3 0 +BITMAP +E1C0 +4080 +4100 +2100 +2100 +1200 +1200 +1200 +0C00 +0C00 +ENDCHAR +STARTCHAR uni01D686 +ENCODING 120454 +BBX 10 10 3 0 +BITMAP +F3C0 +4080 +4C80 +4C80 +4C80 +5280 +5280 +2100 +2100 +2100 +ENDCHAR +STARTCHAR uni01D687 +ENCODING 120455 +BBX 8 10 4 0 +BITMAP +E7 +42 +24 +24 +18 +18 +24 +42 +42 +E7 +ENDCHAR +STARTCHAR uni01D688 +ENCODING 120456 +BBX 9 10 4 0 +BITMAP +E380 +4100 +2200 +1400 +1400 +0800 +0800 +0800 +0800 +1C00 +ENDCHAR +STARTCHAR uni01D689 +ENCODING 120457 +BBX 6 10 5 0 +BITMAP +FC +84 +88 +10 +10 +20 +40 +44 +84 +FC +ENDCHAR +STARTCHAR uni01D68A +ENCODING 120458 +BBX 8 7 4 0 +BITMAP +7C +02 +7E +82 +82 +86 +7B +ENDCHAR +STARTCHAR uni01D68B +ENCODING 120459 +BBX 8 11 4 0 +BITMAP +C0 +40 +40 +40 +5C +62 +41 +41 +41 +62 +DC +ENDCHAR +STARTCHAR uni01D68C +ENCODING 120460 +BBX 8 7 4 0 +BITMAP +3D +43 +81 +80 +80 +41 +3E +ENDCHAR +STARTCHAR uni01D68D +ENCODING 120461 +BBX 9 11 4 0 +BITMAP +0300 +0100 +0100 +0100 +3D00 +4300 +8100 +8100 +8100 +4300 +3D80 +ENDCHAR +STARTCHAR uni01D68E +ENCODING 120462 +BBX 8 7 4 0 +BITMAP +3C +42 +81 +FF +80 +41 +3E +ENDCHAR +STARTCHAR uni01D68F +ENCODING 120463 +BBX 6 11 5 0 +BITMAP +3C +40 +40 +40 +F8 +40 +40 +40 +40 +40 +F8 +ENDCHAR +STARTCHAR uni01D690 +ENCODING 120464 +BBX 8 10 4 -2 +BITMAP +3B +46 +82 +82 +82 +46 +3A +02 +02 +3C +ENDCHAR +STARTCHAR uni01D691 +ENCODING 120465 +BBX 8 11 4 0 +BITMAP +C0 +40 +40 +40 +5C +62 +42 +42 +42 +42 +E7 +ENDCHAR +STARTCHAR uni01D692 +ENCODING 120466 +BBX 5 10 6 0 +BITMAP +20 +00 +00 +E0 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D693 +ENCODING 120467 +BBX 5 13 6 -2 +BITMAP +08 +00 +00 +38 +08 +08 +08 +08 +08 +08 +08 +08 +F0 +ENDCHAR +STARTCHAR uni01D694 +ENCODING 120468 +BBX 8 11 4 0 +BITMAP +C0 +40 +40 +40 +46 +48 +50 +70 +48 +44 +C3 +ENDCHAR +STARTCHAR uni01D695 +ENCODING 120469 +BBX 5 11 6 0 +BITMAP +E0 +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D696 +ENCODING 120470 +BBX 9 7 3 0 +BITMAP +D600 +6900 +4900 +4900 +4900 +4900 +EB80 +ENDCHAR +STARTCHAR uni01D697 +ENCODING 120471 +BBX 8 7 4 0 +BITMAP +DC +62 +42 +42 +42 +42 +E7 +ENDCHAR +STARTCHAR uni01D698 +ENCODING 120472 +BBX 8 7 4 0 +BITMAP +3C +42 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni01D699 +ENCODING 120473 +BBX 8 10 4 -2 +BITMAP +DC +62 +41 +41 +41 +62 +5C +40 +40 +E0 +ENDCHAR +STARTCHAR uni01D69A +ENCODING 120474 +BBX 8 10 4 -2 +BITMAP +3B +46 +82 +82 +82 +46 +3A +02 +02 +07 +ENDCHAR +STARTCHAR uni01D69B +ENCODING 120475 +BBX 7 7 5 0 +BITMAP +CE +70 +40 +40 +40 +40 +F8 +ENDCHAR +STARTCHAR uni01D69C +ENCODING 120476 +BBX 7 7 5 0 +BITMAP +3A +46 +40 +3C +02 +C2 +BC +ENDCHAR +STARTCHAR uni01D69D +ENCODING 120477 +BBX 6 10 5 0 +BITMAP +40 +40 +40 +F8 +40 +40 +40 +40 +40 +3C +ENDCHAR +STARTCHAR uni01D69E +ENCODING 120478 +BBX 7 7 5 0 +BITMAP +C6 +42 +42 +42 +42 +46 +3A +ENDCHAR +STARTCHAR uni01D69F +ENCODING 120479 +BBX 8 7 4 0 +BITMAP +E7 +42 +42 +24 +24 +18 +18 +ENDCHAR +STARTCHAR uni01D6A0 +ENCODING 120480 +BBX 10 7 3 0 +BITMAP +E1C0 +4080 +4C80 +2D00 +2D00 +3300 +3300 +ENDCHAR +STARTCHAR uni01D6A1 +ENCODING 120481 +BBX 8 7 4 0 +BITMAP +E7 +42 +24 +18 +24 +42 +E7 +ENDCHAR +STARTCHAR uni01D6A2 +ENCODING 120482 +BBX 8 10 4 -2 +BITMAP +E7 +42 +42 +24 +24 +18 +08 +10 +10 +78 +ENDCHAR +STARTCHAR uni01D6A3 +ENCODING 120483 +BBX 5 7 5 0 +BITMAP +F8 +88 +10 +20 +40 +88 +F8 +ENDCHAR +STARTCHAR uni01D6A4 +ENCODING 120484 +BBX 5 8 5 0 +BITMAP +08 +10 +10 +10 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D6A5 +ENCODING 120485 +BBX 8 10 4 -2 +BITMAP +01 +02 +02 +02 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni01D6A8 +ENCODING 120488 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +6C +6C +C6 +C6 +FE +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D6A9 +ENCODING 120489 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +C6 +C6 +C6 +FC +C6 +C6 +C6 +C6 +FC +ENDCHAR +STARTCHAR uni01D6AA +ENCODING 120490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D6AB +ENCODING 120491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +18 +18 +3C +3C +66 +66 +66 +C3 +C3 +FF +ENDCHAR +STARTCHAR uni01D6AC +ENCODING 120492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C0 +C0 +C0 +FC +C0 +C0 +C0 +C0 +FE +ENDCHAR +STARTCHAR uni01D6AD +ENCODING 120493 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +06 +06 +0C +18 +30 +60 +C0 +C0 +FE +ENDCHAR +STARTCHAR uni01D6AE +ENCODING 120494 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +C6 +C6 +FE +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D6AF +ENCODING 120495 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C6 +FE +FE +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D6B0 +ENCODING 120496 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +30 +30 +30 +30 +30 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D6B1 +ENCODING 120497 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +CC +D8 +F0 +E0 +E0 +F0 +D8 +CC +C6 +ENDCHAR +STARTCHAR uni01D6B2 +ENCODING 120498 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +18 +18 +3C +3C +66 +66 +66 +C3 +C3 +C3 +ENDCHAR +STARTCHAR uni01D6B3 +ENCODING 120499 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +EE +EE +FE +FE +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D6B4 +ENCODING 120500 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +E6 +E6 +F6 +F6 +DE +DE +CE +CE +C6 +ENDCHAR +STARTCHAR uni01D6B5 +ENCODING 120501 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +00 +00 +00 +7C +00 +00 +00 +00 +FE +ENDCHAR +STARTCHAR uni01D6B6 +ENCODING 120502 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C6 +C6 +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D6B7 +ENCODING 120503 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +66 +66 +66 +66 +66 +66 +66 +66 +66 +ENDCHAR +STARTCHAR uni01D6B8 +ENCODING 120504 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +C6 +C6 +C6 +FC +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D6B9 +ENCODING 120505 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C6 +FE +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D6BA +ENCODING 120506 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C0 +60 +30 +18 +18 +30 +60 +C0 +FE +ENDCHAR +STARTCHAR uni01D6BB +ENCODING 120507 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +18 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D6BC +ENCODING 120508 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +C3 +C3 +66 +66 +3C +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D6BD +ENCODING 120509 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +18 +7E +DB +DB +DB +DB +7E +18 +FF +ENDCHAR +STARTCHAR uni01D6BE +ENCODING 120510 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +6C +6C +38 +38 +6C +6C +C6 +C6 +ENDCHAR +STARTCHAR uni01D6BF +ENCODING 120511 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +DB +DB +DB +DB +DB +7E +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D6C0 +ENCODING 120512 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +7E +C3 +C3 +C3 +C3 +C3 +66 +3C +3C +FF +ENDCHAR +STARTCHAR uni01D6C1 +ENCODING 120513 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +C3 +66 +66 +66 +3C +3C +3C +18 +18 +ENDCHAR +STARTCHAR uni01D6C2 +ENCODING 120514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +76 +DE +CC +CC +CC +CC +DE +76 +ENDCHAR +STARTCHAR uni01D6C3 +ENCODING 120515 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +78 +CC +CC +CC +FC +C6 +C6 +C6 +E6 +FC +C0 +C0 +ENDCHAR +STARTCHAR uni01D6C4 +ENCODING 120516 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +73 +DB +1E +0C +18 +18 +30 +30 +ENDCHAR +STARTCHAR uni01D6C5 +ENCODING 120517 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3C +60 +60 +60 +38 +6C +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D6C6 +ENCODING 120518 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +C0 +7C +C0 +C0 +C6 +7C +ENDCHAR +STARTCHAR uni01D6C7 +ENCODING 120519 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +C0 +C0 +78 +30 +60 +C0 +C0 +C0 +C0 +78 +0C +78 +ENDCHAR +STARTCHAR uni01D6C8 +ENCODING 120520 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +FC +E6 +C6 +C6 +C6 +C6 +C6 +C6 +06 +06 +ENDCHAR +STARTCHAR uni01D6C9 +ENCODING 120521 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +6C +6C +C6 +FE +C6 +C6 +6C +6C +38 +ENDCHAR +STARTCHAR uni01D6CA +ENCODING 120522 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +E0 +60 +60 +60 +60 +60 +60 +38 +ENDCHAR +STARTCHAR uni01D6CB +ENCODING 120523 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +CC +D8 +F0 +E0 +E0 +F0 +D8 +CC +ENDCHAR +STARTCHAR uni01D6CC +ENCODING 120524 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +60 +60 +30 +30 +18 +38 +6C +6C +C6 +C6 +ENDCHAR +STARTCHAR uni01D6CD +ENCODING 120525 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +C6 +C6 +C6 +C6 +EE +EE +FE +C6 +C0 +C0 +ENDCHAR +STARTCHAR uni01D6CE +ENCODING 120526 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +C6 +C6 +C6 +CC +CC +D8 +F0 +E0 +ENDCHAR +STARTCHAR uni01D6CF +ENCODING 120527 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +C0 +C0 +7C +C0 +C0 +7C +C0 +C0 +7C +06 +06 +7C +ENDCHAR +STARTCHAR uni01D6D0 +ENCODING 120528 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +C6 +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D6D1 +ENCODING 120529 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +6C +6C +6C +6C +6C +6C +6C +ENDCHAR +STARTCHAR uni01D6D2 +ENCODING 120530 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +7C +C6 +C6 +C6 +C6 +C6 +E6 +FC +C0 +C0 +ENDCHAR +STARTCHAR uni01D6D3 +ENCODING 120531 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +3E +60 +C0 +C0 +C0 +60 +3C +06 +06 +3C +ENDCHAR +STARTCHAR uni01D6D4 +ENCODING 120532 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +7F +D8 +CC +CC +CC +CC +CC +78 +ENDCHAR +STARTCHAR uni01D6D5 +ENCODING 120533 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +30 +30 +30 +30 +30 +30 +1C +ENDCHAR +STARTCHAR uni01D6D6 +ENCODING 120534 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +C6 +C6 +C6 +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D6D7 +ENCODING 120535 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +6E +DB +DB +DB +DB +DB +DB +7E +18 +18 +ENDCHAR +STARTCHAR uni01D6D8 +ENCODING 120536 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -2 +BITMAP +C3 +63 +66 +36 +3C +38 +78 +D8 +CC +8C +87 +ENDCHAR +STARTCHAR uni01D6D9 +ENCODING 120537 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +DB +DB +DB +DB +DB +DB +DB +7E +18 +18 +ENDCHAR +STARTCHAR uni01D6DA +ENCODING 120538 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +66 +C3 +C3 +DB +DB +DB +DB +7E +ENDCHAR +STARTCHAR uni01D6DB +ENCODING 120539 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3C +66 +06 +06 +3E +66 +C6 +CC +CC +78 +ENDCHAR +STARTCHAR uni01D6DC +ENCODING 120540 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +3C +60 +C0 +F8 +C0 +C0 +60 +3C +ENDCHAR +STARTCHAR uni01D6DD +ENCODING 120541 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +1C +36 +36 +36 +1F +66 +E6 +66 +66 +3C +ENDCHAR +STARTCHAR uni01D6DE +ENCODING 120542 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +E6 +36 +3C +38 +30 +70 +D8 +CE +ENDCHAR +STARTCHAR uni01D6DF +ENCODING 120543 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +18 +18 +7E +DB +DB +DB +DB +DB +DB +7E +18 +18 +ENDCHAR +STARTCHAR uni01D6E0 +ENCODING 120544 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +7C +C6 +C6 +C6 +FC +C0 +C0 +7C +06 +ENDCHAR +STARTCHAR uni01D6E1 +ENCODING 120545 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +FF +66 +C3 +C3 +DB +DB +DB +7E +ENDCHAR +STARTCHAR uni01D6E2 +ENCODING 120546 +BBX 8 10 4 0 +BITMAP +06 +09 +09 +11 +21 +3F +42 +42 +42 +84 +ENDCHAR +STARTCHAR uni01D6E3 +ENCODING 120547 +BBX 9 10 4 0 +BITMAP +1F00 +1080 +1080 +2100 +3E00 +2100 +4200 +4200 +4400 +F800 +ENDCHAR +STARTCHAR uni01D6E4 +ENCODING 120548 +BBX 9 10 4 0 +BITMAP +1F80 +1000 +1000 +2000 +2000 +2000 +4000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni01D6E5 +ENCODING 120549 +BBX 8 10 4 0 +BITMAP +02 +02 +05 +09 +11 +11 +21 +41 +41 +FF +ENDCHAR +STARTCHAR uni01D6E6 +ENCODING 120550 +BBX 9 10 4 0 +BITMAP +1F80 +1000 +1000 +2000 +3E00 +2000 +4000 +4000 +4000 +FC00 +ENDCHAR +STARTCHAR uni01D6E7 +ENCODING 120551 +BBX 9 10 4 0 +BITMAP +1F80 +0080 +0080 +0300 +0400 +0800 +3000 +4000 +4000 +FC00 +ENDCHAR +STARTCHAR uni01D6E8 +ENCODING 120552 +BBX 9 10 4 0 +BITMAP +1080 +1080 +1080 +2100 +3F00 +2100 +4200 +4200 +4200 +8400 +ENDCHAR +STARTCHAR uni01D6E9 +ENCODING 120553 +BBX 8 10 4 0 +BITMAP +1E +21 +21 +42 +5A +5A +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D6EA +ENCODING 120554 +BBX 7 10 5 0 +BITMAP +3E +08 +08 +10 +10 +10 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D6EB +ENCODING 120555 +BBX 8 10 4 0 +BITMAP +11 +12 +14 +28 +30 +30 +50 +48 +44 +84 +ENDCHAR +STARTCHAR uni01D6EC +ENCODING 120556 +BBX 8 10 4 0 +BITMAP +02 +02 +05 +09 +11 +11 +21 +41 +41 +81 +ENDCHAR +STARTCHAR uni01D6ED +ENCODING 120557 +BBX 9 10 4 0 +BITMAP +1080 +1080 +1180 +3300 +2D00 +2D00 +4200 +4200 +4200 +8400 +ENDCHAR +STARTCHAR uni01D6EE +ENCODING 120558 +BBX 9 10 4 0 +BITMAP +1080 +1880 +1880 +2900 +2900 +2900 +4A00 +4600 +4600 +8400 +ENDCHAR +STARTCHAR uni01D6EF +ENCODING 120559 +BBX 8 10 5 0 +BITMAP +3F +00 +00 +00 +3C +00 +00 +00 +00 +FC +ENDCHAR +STARTCHAR uni01D6F0 +ENCODING 120560 +BBX 8 10 4 0 +BITMAP +1E +21 +21 +42 +42 +42 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D6F1 +ENCODING 120561 +BBX 9 10 4 0 +BITMAP +3F80 +1100 +1100 +2200 +2200 +2200 +4400 +4400 +4400 +8800 +ENDCHAR +STARTCHAR uni01D6F2 +ENCODING 120562 +BBX 9 10 4 0 +BITMAP +1F00 +1080 +1080 +2100 +3E00 +2000 +4000 +4000 +4000 +8000 +ENDCHAR +STARTCHAR uni01D6F3 +ENCODING 120563 +BBX 8 10 4 0 +BITMAP +1E +21 +21 +42 +7E +42 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D6F4 +ENCODING 120564 +BBX 9 10 4 0 +BITMAP +1F80 +1000 +0800 +0800 +0400 +0400 +1800 +2000 +4000 +FC00 +ENDCHAR +STARTCHAR uni01D6F5 +ENCODING 120565 +BBX 7 10 5 0 +BITMAP +FE +10 +10 +20 +20 +20 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni01D6F6 +ENCODING 120566 +BBX 7 10 5 0 +BITMAP +82 +82 +84 +88 +50 +20 +40 +40 +40 +80 +ENDCHAR +STARTCHAR uni01D6F7 +ENCODING 120567 +BBX 9 10 4 0 +BITMAP +3F80 +0400 +3E00 +4900 +4900 +9200 +9200 +7C00 +1000 +FE00 +ENDCHAR +STARTCHAR uni01D6F8 +ENCODING 120568 +BBX 9 10 4 0 +BITMAP +1080 +1080 +1100 +1200 +0C00 +0C00 +1400 +2400 +4200 +8200 +ENDCHAR +STARTCHAR uni01D6F9 +ENCODING 120569 +BBX 8 10 4 0 +BITMAP +49 +49 +49 +92 +92 +7C +20 +20 +20 +40 +ENDCHAR +STARTCHAR uni01D6FA +ENCODING 120570 +BBX 10 10 3 0 +BITMAP +0F80 +1040 +1040 +2080 +2080 +2080 +2300 +1400 +1400 +E380 +ENDCHAR +STARTCHAR uni01D6FB +ENCODING 120571 +BBX 7 10 5 0 +BITMAP +FE +82 +84 +88 +88 +90 +A0 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni01D6FC +ENCODING 120572 +BBX 8 8 4 0 +BITMAP +31 +4A +44 +44 +88 +88 +94 +64 +ENDCHAR +STARTCHAR uni01D6FD +ENCODING 120573 +BBX 9 12 4 -2 +BITMAP +0700 +0880 +0880 +1100 +1F00 +1080 +2100 +2100 +3100 +4E00 +4000 +8000 +ENDCHAR +STARTCHAR uni01D6FE +ENCODING 120574 +BBX 8 8 4 0 +BITMAP +61 +92 +14 +18 +20 +20 +40 +80 +ENDCHAR +STARTCHAR uni01D6FF +ENCODING 120575 +BBX 7 10 5 0 +BITMAP +0E +10 +20 +20 +18 +64 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D700 +ENCODING 120576 +BBX 7 8 5 0 +BITMAP +3C +42 +40 +3C +40 +80 +84 +78 +ENDCHAR +STARTCHAR uni01D701 +ENCODING 120577 +BBX 7 12 5 -2 +BITMAP +10 +10 +0E +08 +10 +20 +40 +40 +40 +70 +08 +F0 +ENDCHAR +STARTCHAR uni01D702 +ENCODING 120578 +BBX 8 10 4 -2 +BITMAP +1E +21 +21 +21 +42 +42 +42 +84 +04 +08 +ENDCHAR +STARTCHAR uni01D703 +ENCODING 120579 +BBX 8 10 5 0 +BITMAP +0C +12 +22 +41 +7E +42 +84 +48 +48 +30 +ENDCHAR +STARTCHAR uni01D704 +ENCODING 120580 +BBX 3 8 7 0 +BITMAP +60 +20 +40 +40 +80 +80 +80 +60 +ENDCHAR +STARTCHAR uni01D705 +ENCODING 120581 +BBX 7 8 5 0 +BITMAP +12 +24 +28 +30 +60 +50 +48 +88 +ENDCHAR +STARTCHAR uni01D706 +ENCODING 120582 +BBX 6 10 5 0 +BITMAP +08 +08 +04 +04 +0C +14 +24 +24 +44 +84 +ENDCHAR +STARTCHAR uni01D707 +ENCODING 120583 +BBX 10 10 3 -2 +BITMAP +0840 +1080 +1080 +1080 +2100 +3300 +2D00 +4100 +4000 +8000 +ENDCHAR +STARTCHAR uni01D708 +ENCODING 120584 +BBX 8 8 4 0 +BITMAP +21 +42 +42 +44 +88 +90 +A0 +C0 +ENDCHAR +STARTCHAR uni01D709 +ENCODING 120585 +BBX 7 12 5 -2 +BITMAP +20 +20 +3E +40 +40 +7C +80 +80 +78 +08 +08 +F0 +ENDCHAR +STARTCHAR uni01D70A +ENCODING 120586 +BBX 7 8 5 0 +BITMAP +3C +42 +42 +42 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D70B +ENCODING 120587 +BBX 7 8 5 0 +BITMAP +7E +24 +24 +24 +48 +48 +48 +90 +ENDCHAR +STARTCHAR uni01D70C +ENCODING 120588 +BBX 9 10 4 -2 +BITMAP +0F00 +1080 +1080 +1080 +2100 +2100 +3100 +4E00 +4000 +8000 +ENDCHAR +STARTCHAR uni01D70D +ENCODING 120589 +BBX 7 10 5 -2 +BITMAP +1E +20 +40 +40 +80 +40 +30 +08 +08 +70 +ENDCHAR +STARTCHAR uni01D70E +ENCODING 120590 +BBX 8 8 4 0 +BITMAP +3F +48 +44 +44 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni01D70F +ENCODING 120591 +BBX 6 8 6 0 +BITMAP +FC +20 +40 +40 +80 +80 +80 +60 +ENDCHAR +STARTCHAR uni01D710 +ENCODING 120592 +BBX 8 8 4 0 +BITMAP +21 +42 +42 +42 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D711 +ENCODING 120593 +BBX 8 10 4 -2 +BITMAP +26 +49 +49 +49 +92 +92 +92 +7C +20 +40 +ENDCHAR +STARTCHAR uni01D712 +ENCODING 120594 +BBX 12 11 2 -2 +BITMAP +0C10 +0220 +0240 +0280 +0300 +0600 +0A00 +1200 +2200 +4200 +8180 +ENDCHAR +STARTCHAR uni01D713 +ENCODING 120595 +BBX 9 10 4 -2 +BITMAP +2480 +4900 +4900 +4900 +9200 +9200 +9200 +7C00 +2000 +4000 +ENDCHAR +STARTCHAR uni01D714 +ENCODING 120596 +BBX 8 8 4 0 +BITMAP +22 +41 +41 +49 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni01D715 +ENCODING 120597 +BBX 8 10 4 0 +BITMAP +0E +11 +01 +02 +1E +22 +44 +84 +88 +70 +ENDCHAR +STARTCHAR uni01D716 +ENCODING 120598 +BBX 7 8 5 0 +BITMAP +1E +20 +40 +78 +80 +80 +40 +38 +ENDCHAR +STARTCHAR uni01D717 +ENCODING 120599 +BBX 8 10 4 0 +BITMAP +06 +09 +09 +12 +0F +22 +C4 +44 +44 +38 +ENDCHAR +STARTCHAR uni01D718 +ENCODING 120600 +BBX 8 8 4 0 +BITMAP +31 +09 +0A +0C +10 +30 +48 +86 +ENDCHAR +STARTCHAR uni01D719 +ENCODING 120601 +BBX 8 12 4 -2 +BITMAP +04 +04 +3E +49 +49 +49 +92 +92 +92 +7C +20 +40 +ENDCHAR +STARTCHAR uni01D71A +ENCODING 120602 +BBX 7 9 5 -1 +BITMAP +3C +42 +42 +42 +FC +80 +80 +70 +08 +ENDCHAR +STARTCHAR uni01D71B +ENCODING 120603 +BBX 8 8 4 0 +BITMAP +7F +22 +41 +41 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni01D71C +ENCODING 120604 +BBX 9 10 4 0 +BITMAP +0700 +0D80 +1980 +3180 +3180 +3F80 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D71D +ENCODING 120605 +BBX 10 10 3 0 +BITMAP +1F80 +18C0 +18C0 +3180 +3F00 +3180 +6300 +6300 +6300 +FC00 +ENDCHAR +STARTCHAR uni01D71E +ENCODING 120606 +BBX 10 10 3 0 +BITMAP +1FC0 +1800 +1800 +3000 +3000 +3000 +6000 +6000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D71F +ENCODING 120607 +BBX 9 10 4 0 +BITMAP +0180 +0380 +0780 +0D80 +1980 +1980 +3180 +6180 +6180 +FF80 +ENDCHAR +STARTCHAR uni01D720 +ENCODING 120608 +BBX 10 10 3 0 +BITMAP +1FC0 +1800 +1800 +3000 +3F00 +3000 +6000 +6000 +6000 +FE00 +ENDCHAR +STARTCHAR uni01D721 +ENCODING 120609 +BBX 10 10 3 0 +BITMAP +1FC0 +00C0 +00C0 +0300 +0600 +0C00 +3000 +6000 +6000 +FE00 +ENDCHAR +STARTCHAR uni01D722 +ENCODING 120610 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +18C0 +3180 +3F80 +3180 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D723 +ENCODING 120611 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6300 +7F00 +7F00 +C600 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D724 +ENCODING 120612 +BBX 8 10 4 0 +BITMAP +3F +0C +0C +18 +18 +18 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D725 +ENCODING 120613 +BBX 10 10 3 0 +BITMAP +18C0 +1980 +1B00 +3C00 +3800 +3800 +7800 +6C00 +6600 +C600 +ENDCHAR +STARTCHAR uni01D726 +ENCODING 120614 +BBX 9 10 0 0 +BITMAP +0380 +0380 +0780 +0D80 +1980 +1980 +3180 +6180 +6180 +C180 +ENDCHAR +STARTCHAR uni01D727 +ENCODING 120615 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +19C0 +3B80 +3F80 +3F80 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D728 +ENCODING 120616 +BBX 10 10 3 0 +BITMAP +18C0 +1CC0 +1CC0 +3D80 +3D80 +3780 +6700 +6700 +6700 +C600 +ENDCHAR +STARTCHAR uni01D729 +ENCODING 120617 +BBX 9 10 1 0 +BITMAP +3F80 +0000 +0000 +0000 +3E00 +0000 +0000 +0000 +0000 +FE00 +ENDCHAR +STARTCHAR uni01D72A +ENCODING 120618 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6300 +6300 +6300 +C600 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D72B +ENCODING 120619 +BBX 10 10 3 0 +BITMAP +3FC0 +1980 +1980 +3300 +3300 +3300 +6600 +6600 +6600 +CC00 +ENDCHAR +STARTCHAR uni01D72C +ENCODING 120620 +BBX 10 10 3 0 +BITMAP +1F80 +18C0 +18C0 +3180 +3F00 +3000 +6000 +6000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D72D +ENCODING 120621 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6300 +7F00 +6300 +C600 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D72E +ENCODING 120622 +BBX 10 10 3 0 +BITMAP +1FC0 +1800 +0C00 +0C00 +0600 +0C00 +1800 +3000 +6000 +FE00 +ENDCHAR +STARTCHAR uni01D72F +ENCODING 120623 +BBX 8 10 4 0 +BITMAP +FF +18 +18 +30 +30 +30 +60 +60 +60 +C0 +ENDCHAR +STARTCHAR uni01D730 +ENCODING 120624 +BBX 8 10 4 0 +BITMAP +C3 +C3 +C6 +CC +78 +30 +60 +60 +60 +C0 +ENDCHAR +STARTCHAR uni01D731 +ENCODING 120625 +BBX 10 10 3 0 +BITMAP +3FC0 +0600 +3F00 +6D80 +6D80 +6D80 +DB00 +7E00 +1800 +FF00 +ENDCHAR +STARTCHAR uni01D732 +ENCODING 120626 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +1980 +0B00 +0E00 +1C00 +3600 +3600 +6300 +C300 +ENDCHAR +STARTCHAR uni01D733 +ENCODING 120627 +BBX 9 10 4 0 +BITMAP +6D80 +6D80 +6D80 +DB00 +DB00 +7E00 +3000 +3000 +3000 +6000 +ENDCHAR +STARTCHAR uni01D734 +ENCODING 120628 +BBX 10 10 3 0 +BITMAP +1F80 +30C0 +30C0 +6180 +6180 +6180 +6300 +3600 +3600 +E380 +ENDCHAR +STARTCHAR uni01D735 +ENCODING 120629 +BBX 8 10 4 0 +BITMAP +FF +C3 +C6 +CC +CC +D8 +F0 +F0 +E0 +C0 +ENDCHAR +STARTCHAR uni01D736 +ENCODING 120630 +BBX 9 8 4 0 +BITMAP +3D80 +6F00 +6600 +6600 +CC00 +CC00 +DE00 +7600 +ENDCHAR +STARTCHAR uni01D737 +ENCODING 120631 +BBX 10 12 3 -2 +BITMAP +0780 +0CC0 +0CC0 +1980 +1F80 +18C0 +3180 +3180 +3980 +3F00 +6000 +C000 +ENDCHAR +STARTCHAR uni01D738 +ENCODING 120632 +BBX 9 8 4 0 +BITMAP +7180 +DB00 +1E00 +0C00 +1800 +3000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D739 +ENCODING 120633 +BBX 8 10 4 0 +BITMAP +0F +18 +30 +30 +1C +76 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D73A +ENCODING 120634 +BBX 8 8 4 0 +BITMAP +3E +63 +60 +3E +C0 +C0 +C6 +7C +ENDCHAR +STARTCHAR uni01D73B +ENCODING 120635 +BBX 7 12 5 -2 +BITMAP +30 +30 +1E +18 +30 +60 +C0 +C0 +C0 +70 +18 +F0 +ENDCHAR +STARTCHAR uni01D73C +ENCODING 120636 +BBX 9 10 4 -2 +BITMAP +1F00 +3980 +3180 +3180 +6300 +6300 +6300 +C600 +0600 +0C00 +ENDCHAR +STARTCHAR uni01D73D +ENCODING 120637 +BBX 8 10 4 0 +BITMAP +0E +1B +33 +63 +7F +63 +C6 +6C +6C +38 +ENDCHAR +STARTCHAR uni01D73E +ENCODING 120638 +BBX 4 8 6 0 +BITMAP +70 +30 +60 +60 +C0 +C0 +C0 +70 +ENDCHAR +STARTCHAR uni01D73F +ENCODING 120639 +BBX 9 8 4 0 +BITMAP +1980 +3600 +3C00 +3800 +7000 +7800 +6C00 +CC00 +ENDCHAR +STARTCHAR uni01D740 +ENCODING 120640 +BBX 8 10 4 0 +BITMAP +0C +0C +0C +0C +06 +0E +36 +36 +63 +C3 +ENDCHAR +STARTCHAR uni01D741 +ENCODING 120641 +BBX 11 10 3 -2 +BITMAP +0C60 +18C0 +18C0 +18C0 +3980 +3B80 +3F80 +6180 +6000 +C000 +ENDCHAR +STARTCHAR uni01D742 +ENCODING 120642 +BBX 9 8 4 0 +BITMAP +3180 +6300 +6300 +6600 +CC00 +D800 +F000 +E000 +ENDCHAR +STARTCHAR uni01D743 +ENCODING 120643 +BBX 8 12 4 -2 +BITMAP +30 +30 +1F +60 +60 +3E +C0 +C0 +78 +0C +0C +F8 +ENDCHAR +STARTCHAR uni01D744 +ENCODING 120644 +BBX 8 8 4 0 +BITMAP +3E +63 +63 +63 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D745 +ENCODING 120645 +BBX 8 8 4 0 +BITMAP +7F +36 +36 +36 +6C +6C +6C +D8 +ENDCHAR +STARTCHAR uni01D746 +ENCODING 120646 +BBX 10 10 3 -2 +BITMAP +0F80 +18C0 +18C0 +18C0 +3180 +3180 +3980 +7F00 +6000 +C000 +ENDCHAR +STARTCHAR uni01D747 +ENCODING 120647 +BBX 8 10 4 -2 +BITMAP +0F +30 +60 +60 +C0 +60 +38 +0C +0C +78 +ENDCHAR +STARTCHAR uni01D748 +ENCODING 120648 +BBX 9 8 4 0 +BITMAP +3F80 +6C00 +6600 +6600 +CC00 +CC00 +CC00 +7800 +ENDCHAR +STARTCHAR uni01D749 +ENCODING 120649 +BBX 7 8 5 0 +BITMAP +FE +60 +60 +60 +C0 +C0 +C0 +70 +ENDCHAR +STARTCHAR uni01D74A +ENCODING 120650 +BBX 9 8 4 0 +BITMAP +3180 +6300 +6300 +6300 +C600 +C600 +CE00 +7C00 +ENDCHAR +STARTCHAR uni01D74B +ENCODING 120651 +BBX 9 10 3 -2 +BITMAP +3700 +6D80 +6D80 +6D80 +DB00 +DB00 +DB00 +7E00 +3000 +6000 +ENDCHAR +STARTCHAR uni01D74C +ENCODING 120652 +BBX 13 11 1 -2 +BITMAP +0E18 +0330 +0360 +03C0 +0380 +0700 +0F00 +1B00 +3300 +6300 +C1C0 +ENDCHAR +STARTCHAR uni01D74D +ENCODING 120653 +BBX 10 10 3 -2 +BITMAP +36C0 +6D80 +6D80 +6D80 +DB00 +DB00 +DB00 +FC00 +3000 +6000 +ENDCHAR +STARTCHAR uni01D74E +ENCODING 120654 +BBX 9 8 4 0 +BITMAP +3300 +6180 +6180 +6D80 +DB00 +DB00 +DB00 +7E00 +ENDCHAR +STARTCHAR uni01D74F +ENCODING 120655 +BBX 9 10 4 0 +BITMAP +0F00 +1980 +0180 +0300 +3F00 +6300 +C600 +CC00 +CC00 +7800 +ENDCHAR +STARTCHAR uni01D750 +ENCODING 120656 +BBX 8 8 4 0 +BITMAP +1F +30 +60 +7C +C0 +C0 +60 +3C +ENDCHAR +STARTCHAR uni01D751 +ENCODING 120657 +BBX 9 10 4 0 +BITMAP +0700 +0D80 +0D80 +1B00 +0F80 +3300 +E600 +6600 +6600 +3C00 +ENDCHAR +STARTCHAR uni01D752 +ENCODING 120658 +BBX 10 8 3 0 +BITMAP +18C0 +0D80 +0F00 +0E00 +1800 +3800 +6C00 +C600 +ENDCHAR +STARTCHAR uni01D753 +ENCODING 120659 +BBX 9 12 4 -2 +BITMAP +0600 +0C00 +3F00 +6D80 +6D80 +6D80 +DB00 +DB00 +DB00 +7E00 +3000 +6000 +ENDCHAR +STARTCHAR uni01D754 +ENCODING 120660 +BBX 8 9 4 -1 +BITMAP +3E +63 +63 +63 +FE +C0 +C0 +78 +0C +ENDCHAR +STARTCHAR uni01D755 +ENCODING 120661 +BBX 9 8 4 0 +BITMAP +7F80 +3300 +6180 +6180 +DB00 +DB00 +DB00 +7E00 +ENDCHAR +STARTCHAR uni01D756 +ENCODING 120662 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +6C +6C +C6 +C6 +FE +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D757 +ENCODING 120663 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +C6 +C6 +C6 +FC +C6 +C6 +C6 +C6 +FC +ENDCHAR +STARTCHAR uni01D758 +ENCODING 120664 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D759 +ENCODING 120665 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +18 +18 +3C +3C +66 +66 +66 +C3 +C3 +FF +ENDCHAR +STARTCHAR uni01D75A +ENCODING 120666 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C0 +C0 +C0 +FC +C0 +C0 +C0 +C0 +FE +ENDCHAR +STARTCHAR uni01D75B +ENCODING 120667 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +06 +06 +0C +18 +30 +60 +C0 +C0 +FE +ENDCHAR +STARTCHAR uni01D75C +ENCODING 120668 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +C6 +C6 +FE +C6 +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D75D +ENCODING 120669 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C6 +FE +FE +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D75E +ENCODING 120670 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +30 +30 +30 +30 +30 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D75F +ENCODING 120671 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +CC +D8 +F0 +E0 +E0 +F0 +D8 +CC +C6 +ENDCHAR +STARTCHAR uni01D760 +ENCODING 120672 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +18 +18 +3C +3C +66 +66 +66 +C3 +C3 +C3 +ENDCHAR +STARTCHAR uni01D761 +ENCODING 120673 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +EE +EE +FE +FE +C6 +C6 +C6 +C6 +ENDCHAR +STARTCHAR uni01D762 +ENCODING 120674 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +E6 +E6 +F6 +F6 +DE +DE +CE +CE +C6 +ENDCHAR +STARTCHAR uni01D763 +ENCODING 120675 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +00 +00 +00 +7C +00 +00 +00 +00 +FE +ENDCHAR +STARTCHAR uni01D764 +ENCODING 120676 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C6 +C6 +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D765 +ENCODING 120677 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +66 +66 +66 +66 +66 +66 +66 +66 +66 +ENDCHAR +STARTCHAR uni01D766 +ENCODING 120678 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FC +C6 +C6 +C6 +FC +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D767 +ENCODING 120679 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C6 +FE +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D768 +ENCODING 120680 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C0 +60 +30 +18 +18 +30 +60 +C0 +FE +ENDCHAR +STARTCHAR uni01D769 +ENCODING 120681 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +18 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D76A +ENCODING 120682 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +C3 +C3 +66 +66 +3C +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D76B +ENCODING 120683 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +18 +7E +DB +DB +DB +DB +7E +18 +FF +ENDCHAR +STARTCHAR uni01D76C +ENCODING 120684 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +C6 +C6 +6C +6C +38 +38 +6C +6C +C6 +C6 +ENDCHAR +STARTCHAR uni01D76D +ENCODING 120685 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +DB +DB +DB +DB +DB +7E +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D76E +ENCODING 120686 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +7E +C3 +C3 +C3 +C3 +C3 +66 +3C +3C +FF +ENDCHAR +STARTCHAR uni01D76F +ENCODING 120687 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +FF +C3 +66 +66 +66 +3C +3C +3C +18 +18 +ENDCHAR +STARTCHAR uni01D770 +ENCODING 120688 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +76 +DE +CC +CC +CC +CC +DE +76 +ENDCHAR +STARTCHAR uni01D771 +ENCODING 120689 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +78 +CC +CC +CC +FC +C6 +C6 +C6 +E6 +FC +C0 +C0 +ENDCHAR +STARTCHAR uni01D772 +ENCODING 120690 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +73 +DB +1E +0C +18 +18 +30 +30 +ENDCHAR +STARTCHAR uni01D773 +ENCODING 120691 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3C +60 +60 +60 +38 +6C +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D774 +ENCODING 120692 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +C0 +7C +C0 +C0 +C6 +7C +ENDCHAR +STARTCHAR uni01D775 +ENCODING 120693 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +C0 +C0 +78 +30 +60 +C0 +C0 +C0 +C0 +78 +0C +78 +ENDCHAR +STARTCHAR uni01D776 +ENCODING 120694 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +FC +E6 +C6 +C6 +C6 +C6 +C6 +C6 +06 +06 +ENDCHAR +STARTCHAR uni01D777 +ENCODING 120695 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +6C +6C +C6 +FE +C6 +C6 +6C +6C +38 +ENDCHAR +STARTCHAR uni01D778 +ENCODING 120696 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 0 +BITMAP +E0 +60 +60 +60 +60 +60 +60 +38 +ENDCHAR +STARTCHAR uni01D779 +ENCODING 120697 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +CC +D8 +F0 +E0 +E0 +F0 +D8 +CC +ENDCHAR +STARTCHAR uni01D77A +ENCODING 120698 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +60 +60 +30 +30 +18 +38 +6C +6C +C6 +C6 +ENDCHAR +STARTCHAR uni01D77B +ENCODING 120699 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +C6 +C6 +C6 +C6 +EE +EE +FE +C6 +C0 +C0 +ENDCHAR +STARTCHAR uni01D77C +ENCODING 120700 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +C6 +C6 +C6 +CC +CC +D8 +F0 +E0 +ENDCHAR +STARTCHAR uni01D77D +ENCODING 120701 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +C0 +C0 +7C +C0 +C0 +7C +C0 +C0 +7C +06 +06 +7C +ENDCHAR +STARTCHAR uni01D77E +ENCODING 120702 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +C6 +C6 +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D77F +ENCODING 120703 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +6C +6C +6C +6C +6C +6C +6C +ENDCHAR +STARTCHAR uni01D780 +ENCODING 120704 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +7C +C6 +C6 +C6 +C6 +C6 +E6 +FC +C0 +C0 +ENDCHAR +STARTCHAR uni01D781 +ENCODING 120705 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +3E +60 +C0 +C0 +C0 +60 +3C +06 +06 +3C +ENDCHAR +STARTCHAR uni01D782 +ENCODING 120706 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +7F +D8 +CC +CC +CC +CC +CC +78 +ENDCHAR +STARTCHAR uni01D783 +ENCODING 120707 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +FE +30 +30 +30 +30 +30 +30 +1C +ENDCHAR +STARTCHAR uni01D784 +ENCODING 120708 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +C6 +C6 +C6 +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D785 +ENCODING 120709 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +6E +DB +DB +DB +DB +DB +DB +7E +18 +18 +ENDCHAR +STARTCHAR uni01D786 +ENCODING 120710 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 -2 +BITMAP +C3 +63 +66 +36 +3C +38 +78 +D8 +CC +8C +87 +ENDCHAR +STARTCHAR uni01D787 +ENCODING 120711 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -2 +BITMAP +DB +DB +DB +DB +DB +DB +DB +7E +18 +18 +ENDCHAR +STARTCHAR uni01D788 +ENCODING 120712 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +66 +C3 +C3 +DB +DB +DB +DB +7E +ENDCHAR +STARTCHAR uni01D789 +ENCODING 120713 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3C +66 +06 +06 +3E +66 +C6 +CC +CC +78 +ENDCHAR +STARTCHAR uni01D78A +ENCODING 120714 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +3C +60 +C0 +F8 +C0 +C0 +60 +3C +ENDCHAR +STARTCHAR uni01D78B +ENCODING 120715 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +1C +36 +36 +36 +1F +66 +E6 +66 +66 +3C +ENDCHAR +STARTCHAR uni01D78C +ENCODING 120716 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +E6 +36 +3C +38 +30 +70 +D8 +CE +ENDCHAR +STARTCHAR uni01D78D +ENCODING 120717 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -2 +BITMAP +18 +18 +7E +DB +DB +DB +DB +DB +DB +7E +18 +18 +ENDCHAR +STARTCHAR uni01D78E +ENCODING 120718 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 -1 +BITMAP +7C +C6 +C6 +C6 +FC +C0 +C0 +7C +06 +ENDCHAR +STARTCHAR uni01D78F +ENCODING 120719 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 0 +BITMAP +FF +66 +C3 +C3 +DB +DB +DB +7E +ENDCHAR +STARTCHAR uni01D790 +ENCODING 120720 +BBX 9 10 4 0 +BITMAP +0700 +0D80 +1980 +3180 +3180 +3F80 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D791 +ENCODING 120721 +BBX 10 10 3 0 +BITMAP +1F80 +18C0 +18C0 +3180 +3F00 +3180 +6300 +6300 +6300 +FC00 +ENDCHAR +STARTCHAR uni01D792 +ENCODING 120722 +BBX 10 10 3 0 +BITMAP +1FC0 +1800 +1800 +3000 +3000 +3000 +6000 +6000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D793 +ENCODING 120723 +BBX 9 10 4 0 +BITMAP +0180 +0380 +0780 +0D80 +1980 +1980 +3180 +6180 +6180 +FF80 +ENDCHAR +STARTCHAR uni01D794 +ENCODING 120724 +BBX 10 10 3 0 +BITMAP +1FC0 +1800 +1800 +3000 +3F00 +3000 +6000 +6000 +6000 +FE00 +ENDCHAR +STARTCHAR uni01D795 +ENCODING 120725 +BBX 10 10 3 0 +BITMAP +1FC0 +00C0 +00C0 +0300 +0600 +0C00 +3000 +6000 +6000 +FE00 +ENDCHAR +STARTCHAR uni01D796 +ENCODING 120726 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +18C0 +3180 +3F80 +3180 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D797 +ENCODING 120727 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6300 +7F00 +7F00 +C600 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D798 +ENCODING 120728 +BBX 8 10 4 0 +BITMAP +3F +0C +0C +18 +18 +18 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D799 +ENCODING 120729 +BBX 10 10 3 0 +BITMAP +18C0 +1980 +1B00 +3C00 +3800 +3800 +7800 +6C00 +6600 +C600 +ENDCHAR +STARTCHAR uni01D79A +ENCODING 120730 +BBX 9 10 0 0 +BITMAP +0380 +0380 +0780 +0D80 +1980 +1980 +3180 +6180 +6180 +C180 +ENDCHAR +STARTCHAR uni01D79B +ENCODING 120731 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +19C0 +3B80 +3F80 +3F80 +6300 +6300 +6300 +C600 +ENDCHAR +STARTCHAR uni01D79C +ENCODING 120732 +BBX 10 10 3 0 +BITMAP +18C0 +1CC0 +1CC0 +3D80 +3D80 +3780 +6700 +6700 +6700 +C600 +ENDCHAR +STARTCHAR uni01D79D +ENCODING 120733 +BBX 9 10 1 0 +BITMAP +3F80 +0000 +0000 +0000 +3E00 +0000 +0000 +0000 +0000 +FE00 +ENDCHAR +STARTCHAR uni01D79E +ENCODING 120734 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6300 +6300 +6300 +C600 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D79F +ENCODING 120735 +BBX 10 10 3 0 +BITMAP +3FC0 +1980 +1980 +3300 +3300 +3300 +6600 +6600 +6600 +CC00 +ENDCHAR +STARTCHAR uni01D7A0 +ENCODING 120736 +BBX 10 10 3 0 +BITMAP +1F80 +18C0 +18C0 +3180 +3F00 +3000 +6000 +6000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D7A1 +ENCODING 120737 +BBX 9 10 4 0 +BITMAP +1F00 +3180 +3180 +6300 +7F00 +6300 +C600 +C600 +C600 +7C00 +ENDCHAR +STARTCHAR uni01D7A2 +ENCODING 120738 +BBX 10 10 3 0 +BITMAP +1FC0 +1800 +0C00 +0C00 +0600 +0C00 +1800 +3000 +6000 +FE00 +ENDCHAR +STARTCHAR uni01D7A3 +ENCODING 120739 +BBX 8 10 4 0 +BITMAP +FF +18 +18 +30 +30 +30 +60 +60 +60 +C0 +ENDCHAR +STARTCHAR uni01D7A4 +ENCODING 120740 +BBX 8 10 4 0 +BITMAP +C3 +C3 +C6 +CC +78 +30 +60 +60 +60 +C0 +ENDCHAR +STARTCHAR uni01D7A5 +ENCODING 120741 +BBX 10 10 3 0 +BITMAP +3FC0 +0600 +3F00 +6D80 +6D80 +6D80 +DB00 +7E00 +1800 +FF00 +ENDCHAR +STARTCHAR uni01D7A6 +ENCODING 120742 +BBX 10 10 3 0 +BITMAP +18C0 +18C0 +1980 +0B00 +0E00 +1C00 +3600 +3600 +6300 +C300 +ENDCHAR +STARTCHAR uni01D7A7 +ENCODING 120743 +BBX 9 10 4 0 +BITMAP +6D80 +6D80 +6D80 +DB00 +DB00 +7E00 +3000 +3000 +3000 +6000 +ENDCHAR +STARTCHAR uni01D7A8 +ENCODING 120744 +BBX 10 10 3 0 +BITMAP +1F80 +30C0 +30C0 +6180 +6180 +6180 +6300 +3600 +3600 +E380 +ENDCHAR +STARTCHAR uni01D7A9 +ENCODING 120745 +BBX 8 10 4 0 +BITMAP +FF +C3 +C6 +CC +CC +D8 +F0 +F0 +E0 +C0 +ENDCHAR +STARTCHAR uni01D7AA +ENCODING 120746 +BBX 9 8 4 0 +BITMAP +3D80 +6F00 +6600 +6600 +CC00 +CC00 +DE00 +7600 +ENDCHAR +STARTCHAR uni01D7AB +ENCODING 120747 +BBX 10 12 3 -2 +BITMAP +0780 +0CC0 +0CC0 +1980 +1F80 +18C0 +3180 +3180 +3980 +3F00 +6000 +C000 +ENDCHAR +STARTCHAR uni01D7AC +ENCODING 120748 +BBX 9 8 4 0 +BITMAP +7180 +DB00 +1E00 +0C00 +1800 +3000 +6000 +C000 +ENDCHAR +STARTCHAR uni01D7AD +ENCODING 120749 +BBX 8 10 4 0 +BITMAP +0F +18 +30 +30 +1C +76 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D7AE +ENCODING 120750 +BBX 8 8 4 0 +BITMAP +3E +63 +60 +3E +C0 +C0 +C6 +7C +ENDCHAR +STARTCHAR uni01D7AF +ENCODING 120751 +BBX 7 12 5 -2 +BITMAP +30 +30 +1E +18 +30 +60 +C0 +C0 +C0 +70 +18 +F0 +ENDCHAR +STARTCHAR uni01D7B0 +ENCODING 120752 +BBX 9 10 4 -2 +BITMAP +1F00 +3980 +3180 +3180 +6300 +6300 +6300 +C600 +0600 +0C00 +ENDCHAR +STARTCHAR uni01D7B1 +ENCODING 120753 +BBX 8 10 4 0 +BITMAP +0E +1B +33 +63 +7F +63 +C6 +6C +6C +38 +ENDCHAR +STARTCHAR uni01D7B2 +ENCODING 120754 +BBX 4 8 6 0 +BITMAP +70 +30 +60 +60 +C0 +C0 +C0 +70 +ENDCHAR +STARTCHAR uni01D7B3 +ENCODING 120755 +BBX 9 8 4 0 +BITMAP +1980 +3600 +3C00 +3800 +7000 +7800 +6C00 +CC00 +ENDCHAR +STARTCHAR uni01D7B4 +ENCODING 120756 +BBX 8 10 4 0 +BITMAP +0C +0C +0C +0C +06 +0E +36 +36 +63 +C3 +ENDCHAR +STARTCHAR uni01D7B5 +ENCODING 120757 +BBX 11 10 3 -2 +BITMAP +0C60 +18C0 +18C0 +18C0 +3980 +3B80 +3F80 +6180 +6000 +C000 +ENDCHAR +STARTCHAR uni01D7B6 +ENCODING 120758 +BBX 9 8 4 0 +BITMAP +3180 +6300 +6300 +6600 +CC00 +D800 +F000 +E000 +ENDCHAR +STARTCHAR uni01D7B7 +ENCODING 120759 +BBX 8 12 4 -2 +BITMAP +30 +30 +1F +60 +60 +3E +C0 +C0 +78 +0C +0C +F8 +ENDCHAR +STARTCHAR uni01D7B8 +ENCODING 120760 +BBX 8 8 4 0 +BITMAP +3E +63 +63 +63 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D7B9 +ENCODING 120761 +BBX 8 8 4 0 +BITMAP +7F +36 +36 +36 +6C +6C +6C +D8 +ENDCHAR +STARTCHAR uni01D7BA +ENCODING 120762 +BBX 10 10 3 -2 +BITMAP +0F80 +18C0 +18C0 +18C0 +3180 +3180 +3980 +7F00 +6000 +C000 +ENDCHAR +STARTCHAR uni01D7BB +ENCODING 120763 +BBX 8 10 4 -2 +BITMAP +0F +30 +60 +60 +C0 +60 +38 +0C +0C +78 +ENDCHAR +STARTCHAR uni01D7BC +ENCODING 120764 +BBX 9 8 4 0 +BITMAP +3F80 +6C00 +6600 +6600 +CC00 +CC00 +CC00 +7800 +ENDCHAR +STARTCHAR uni01D7BD +ENCODING 120765 +BBX 7 8 5 0 +BITMAP +FE +60 +60 +60 +C0 +C0 +C0 +70 +ENDCHAR +STARTCHAR uni01D7BE +ENCODING 120766 +BBX 9 8 4 0 +BITMAP +3180 +6300 +6300 +6300 +C600 +C600 +CE00 +7C00 +ENDCHAR +STARTCHAR uni01D7BF +ENCODING 120767 +BBX 9 10 3 -2 +BITMAP +3700 +6D80 +6D80 +6D80 +DB00 +DB00 +DB00 +7E00 +3000 +6000 +ENDCHAR +STARTCHAR uni01D7C0 +ENCODING 120768 +BBX 13 11 1 -2 +BITMAP +0E18 +0330 +0360 +03C0 +0380 +0700 +0F00 +1B00 +3300 +6300 +C1C0 +ENDCHAR +STARTCHAR uni01D7C1 +ENCODING 120769 +BBX 10 10 3 -2 +BITMAP +36C0 +6D80 +6D80 +6D80 +DB00 +DB00 +DB00 +FC00 +3000 +6000 +ENDCHAR +STARTCHAR uni01D7C2 +ENCODING 120770 +BBX 9 8 4 0 +BITMAP +3300 +6180 +6180 +6D80 +DB00 +DB00 +DB00 +7E00 +ENDCHAR +STARTCHAR uni01D7C3 +ENCODING 120771 +BBX 9 10 4 0 +BITMAP +0F00 +1980 +0180 +0300 +3F00 +6300 +C600 +CC00 +CC00 +7800 +ENDCHAR +STARTCHAR uni01D7C4 +ENCODING 120772 +BBX 8 8 4 0 +BITMAP +1F +30 +60 +7C +C0 +C0 +60 +3C +ENDCHAR +STARTCHAR uni01D7C5 +ENCODING 120773 +BBX 9 10 4 0 +BITMAP +0700 +0D80 +0D80 +1B00 +0F80 +3300 +E600 +6600 +6600 +3C00 +ENDCHAR +STARTCHAR uni01D7C6 +ENCODING 120774 +BBX 10 8 3 0 +BITMAP +18C0 +0D80 +0F00 +0E00 +1800 +3800 +6C00 +C600 +ENDCHAR +STARTCHAR uni01D7C7 +ENCODING 120775 +BBX 9 12 4 -2 +BITMAP +0600 +0C00 +3F00 +6D80 +6D80 +6D80 +DB00 +DB00 +DB00 +7E00 +3000 +6000 +ENDCHAR +STARTCHAR uni01D7C8 +ENCODING 120776 +BBX 8 9 4 -1 +BITMAP +3E +63 +63 +63 +FE +C0 +C0 +78 +0C +ENDCHAR +STARTCHAR uni01D7C9 +ENCODING 120777 +BBX 9 8 4 0 +BITMAP +7F80 +3300 +6180 +6180 +DB00 +DB00 +DB00 +7E00 +ENDCHAR +STARTCHAR uni01D7CA +ENCODING 120778 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C6 +C0 +C0 +F8 +D8 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D7CB +ENCODING 120779 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +F8 +CC +C0 +C0 +F0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01D7CE +ENCODING 120782 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +6C +C6 +C6 +C6 +C6 +C6 +C6 +6C +38 +ENDCHAR +STARTCHAR uni01D7CF +ENCODING 120783 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +70 +F0 +30 +30 +30 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D7D0 +ENCODING 120784 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +06 +1C +30 +60 +C0 +C0 +FE +ENDCHAR +STARTCHAR uni01D7D1 +ENCODING 120785 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +06 +3C +06 +06 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D7D2 +ENCODING 120786 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +0C +1C +3C +6C +CC +CC +FE +0C +0C +0C +ENDCHAR +STARTCHAR uni01D7D3 +ENCODING 120787 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C0 +C0 +C0 +FC +06 +06 +06 +C6 +7C +ENDCHAR +STARTCHAR uni01D7D4 +ENCODING 120788 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3C +60 +C0 +C0 +FC +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D7D5 +ENCODING 120789 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +06 +06 +0C +0C +0C +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D7D6 +ENCODING 120790 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C6 +7C +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D7D7 +ENCODING 120791 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C6 +7E +06 +06 +06 +0C +78 +ENDCHAR +STARTCHAR uni01D7D8 +ENCODING 120792 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +54 +A2 +A2 +A2 +A2 +A2 +A2 +54 +38 +ENDCHAR +STARTCHAR uni01D7D9 +ENCODING 120793 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +18 +28 +68 +A8 +28 +28 +28 +28 +28 +FE +ENDCHAR +STARTCHAR uni01D7DA +ENCODING 120794 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +1C +24 +58 +A0 +A0 +FC +ENDCHAR +STARTCHAR uni01D7DB +ENCODING 120795 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +8A +8A +0A +3C +0A +0A +8A +8A +7C +ENDCHAR +STARTCHAR uni01D7DC +ENCODING 120796 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +0C +14 +34 +54 +94 +94 +F6 +14 +14 +1C +ENDCHAR +STARTCHAR uni01D7DD +ENCODING 120797 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +A0 +A0 +A0 +F8 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni01D7DE +ENCODING 120798 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +1C +20 +60 +A0 +BC +A2 +A2 +A2 +A2 +7C +ENDCHAR +STARTCHAR uni01D7DF +ENCODING 120799 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +0A +0A +14 +14 +14 +28 +28 +28 +38 +ENDCHAR +STARTCHAR uni01D7E0 +ENCODING 120800 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +A2 +A2 +A2 +7C +A2 +A2 +A2 +A2 +7C +ENDCHAR +STARTCHAR uni01D7E1 +ENCODING 120801 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +8A +8A +8A +7A +0A +0A +0C +08 +70 +ENDCHAR +STARTCHAR uni01D7E2 +ENCODING 120802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +48 +84 +84 +84 +84 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni01D7E3 +ENCODING 120803 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 0 +BITMAP +20 +60 +A0 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D7E4 +ENCODING 120804 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +18 +20 +40 +80 +80 +FC +ENDCHAR +STARTCHAR uni01D7E5 +ENCODING 120805 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +04 +38 +04 +04 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D7E6 +ENCODING 120806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +08 +18 +28 +48 +88 +88 +FC +08 +08 +08 +ENDCHAR +STARTCHAR uni01D7E7 +ENCODING 120807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +80 +80 +80 +F8 +04 +04 +04 +84 +78 +ENDCHAR +STARTCHAR uni01D7E8 +ENCODING 120808 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +38 +40 +80 +80 +F8 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D7E9 +ENCODING 120809 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +04 +04 +08 +08 +08 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01D7EA +ENCODING 120810 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +78 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01D7EB +ENCODING 120811 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +7C +04 +04 +04 +08 +70 +ENDCHAR +STARTCHAR uni01D7EC +ENCODING 120812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +38 +6C +C6 +C6 +C6 +C6 +C6 +C6 +6C +38 +ENDCHAR +STARTCHAR uni01D7ED +ENCODING 120813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +30 +70 +F0 +30 +30 +30 +30 +30 +30 +FC +ENDCHAR +STARTCHAR uni01D7EE +ENCODING 120814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +06 +1C +30 +60 +C0 +C0 +FE +ENDCHAR +STARTCHAR uni01D7EF +ENCODING 120815 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +06 +3C +06 +06 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D7F0 +ENCODING 120816 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +0C +1C +3C +6C +CC +CC +FE +0C +0C +0C +ENDCHAR +STARTCHAR uni01D7F1 +ENCODING 120817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +C0 +C0 +C0 +FC +06 +06 +06 +C6 +7C +ENDCHAR +STARTCHAR uni01D7F2 +ENCODING 120818 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +3C +60 +C0 +C0 +FC +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D7F3 +ENCODING 120819 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +FE +06 +06 +0C +0C +0C +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01D7F4 +ENCODING 120820 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C6 +7C +C6 +C6 +C6 +C6 +7C +ENDCHAR +STARTCHAR uni01D7F5 +ENCODING 120821 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +C6 +C6 +C6 +7E +06 +06 +06 +0C +78 +ENDCHAR +STARTCHAR uni01D7F6 +ENCODING 120822 +BBX 7 11 5 0 +BITMAP +38 +44 +82 +82 +82 +82 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01D7F7 +ENCODING 120823 +BBX 5 10 6 0 +BITMAP +20 +60 +A0 +20 +20 +20 +20 +20 +20 +F8 +ENDCHAR +STARTCHAR uni01D7F8 +ENCODING 120824 +BBX 6 11 5 0 +BITMAP +70 +88 +04 +04 +04 +08 +10 +20 +40 +80 +FC +ENDCHAR +STARTCHAR uni01D7F9 +ENCODING 120825 +BBX 6 11 5 0 +BITMAP +78 +84 +04 +08 +30 +08 +04 +04 +04 +88 +70 +ENDCHAR +STARTCHAR uni01D7FA +ENCODING 120826 +BBX 6 11 5 0 +BITMAP +18 +28 +28 +48 +48 +88 +88 +FC +08 +08 +1C +ENDCHAR +STARTCHAR uni01D7FB +ENCODING 120827 +BBX 6 11 5 0 +BITMAP +FC +80 +80 +80 +F8 +04 +04 +04 +04 +88 +70 +ENDCHAR +STARTCHAR uni01D7FC +ENCODING 120828 +BBX 7 11 5 0 +BITMAP +1C +20 +40 +80 +B8 +C4 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01D7FD +ENCODING 120829 +BBX 6 10 5 0 +BITMAP +FC +04 +04 +08 +08 +08 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01D7FE +ENCODING 120830 +BBX 7 11 5 0 +BITMAP +38 +44 +82 +82 +44 +38 +44 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01D7FF +ENCODING 120831 +BBX 7 11 5 0 +BITMAP +38 +44 +82 +82 +82 +46 +3A +02 +04 +08 +70 +ENDCHAR +STARTCHAR uni01E000 +ENCODING 122880 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 5 -7 8 +BITMAP +20 +20 +F8 +A8 +20 +ENDCHAR +STARTCHAR uni01E001 +ENCODING 122881 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -7 8 +BITMAP +92 +92 +FE +80 +FE +ENDCHAR +STARTCHAR uni01E002 +ENCODING 122882 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 7 +BITMAP +44 +AA +6C +28 +44 +38 +ENDCHAR +STARTCHAR uni01E003 +ENCODING 122883 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 7 +BITMAP +60 +90 +70 +2C +52 +8C +ENDCHAR +STARTCHAR uni01E004 +ENCODING 122884 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 7 +BITMAP +38 +44 +28 +6C +AA +44 +ENDCHAR +STARTCHAR uni01E005 +ENCODING 122885 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -7 6 +BITMAP +70 +88 +38 +08 +38 +88 +70 +ENDCHAR +STARTCHAR uni01E006 +ENCODING 122886 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -7 8 +BITMAP +C6 +28 +6C +92 +6C +ENDCHAR +STARTCHAR uni01E008 +ENCODING 122888 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 5 -8 8 +BITMAP +20 +50 +FF +55 +22 +ENDCHAR +STARTCHAR uni01E009 +ENCODING 122889 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -7 8 +BITMAP +6C +92 +7C +10 +10 +ENDCHAR +STARTCHAR uni01E00A +ENCODING 122890 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 7 +BITMAP +7C +92 +6C +28 +44 +FE +ENDCHAR +STARTCHAR uni01E00B +ENCODING 122891 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 7 +BITMAP +7C +28 +54 +82 +44 +38 +ENDCHAR +STARTCHAR uni01E00C +ENCODING 122892 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 6 -8 7 +BITMAP +62 +65 +66 +96 +99 +91 +ENDCHAR +STARTCHAR uni01E00D +ENCODING 122893 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 4 7 -7 6 +BITMAP +80 +80 +F0 +10 +F0 +80 +80 +ENDCHAR +STARTCHAR uni01E00E +ENCODING 122894 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 7 +BITMAP +38 +44 +44 +7C +AA +44 +ENDCHAR +STARTCHAR uni01E00F +ENCODING 122895 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 7 -8 6 +BITMAP +7C +BA +54 +36 +76 +A5 +42 +ENDCHAR +STARTCHAR uni01E010 +ENCODING 122896 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 7 +BITMAP +3C +22 +22 +FC +20 +E0 +ENDCHAR +STARTCHAR uni01E011 +ENCODING 122897 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 7 -7 6 +BITMAP +70 +88 +78 +08 +78 +88 +70 +ENDCHAR +STARTCHAR uni01E012 +ENCODING 122898 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -7 8 +BITMAP +3E +2A +EA +24 +20 +ENDCHAR +STARTCHAR uni01E013 +ENCODING 122899 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -7 7 +BITMAP +80 +80 +F8 +84 +84 +F8 +ENDCHAR +STARTCHAR uni01E014 +ENCODING 122900 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 7 +BITMAP +38 +44 +82 +54 +28 +7C +ENDCHAR +STARTCHAR uni01E015 +ENCODING 122901 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -7 8 +BITMAP +FE +AA +AA +AA +44 +ENDCHAR +STARTCHAR uni01E016 +ENCODING 122902 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 7 -8 6 +BITMAP +48 +B4 +6C +27 +6C +B4 +48 +ENDCHAR +STARTCHAR uni01E017 +ENCODING 122903 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -7 8 +BITMAP +10 +7C +92 +7C +10 +ENDCHAR +STARTCHAR uni01E018 +ENCODING 122904 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 5 -6 8 +BITMAP +40 +40 +58 +64 +98 +ENDCHAR +STARTCHAR uni01E01B +ENCODING 122907 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -7 8 +BITMAP +92 +FE +28 +44 +38 +ENDCHAR +STARTCHAR uni01E01C +ENCODING 122908 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 7 +BITMAP +62 +A2 +54 +14 +08 +08 +ENDCHAR +STARTCHAR uni01E01D +ENCODING 122909 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 7 -7 6 +BITMAP +44 +7C +92 +FE +28 +44 +38 +ENDCHAR +STARTCHAR uni01E01E +ENCODING 122910 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 4 -7 9 +BITMAP +92 +92 +92 +FE +ENDCHAR +STARTCHAR uni01E01F +ENCODING 122911 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 -7 6 +BITMAP +08 +14 +0C +BC +4C +14 +08 +ENDCHAR +STARTCHAR uni01E020 +ENCODING 122912 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 7 -7 6 +BITMAP +08 +14 +0C +FC +CC +14 +08 +ENDCHAR +STARTCHAR uni01E021 +ENCODING 122913 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 7 +BITMAP +70 +28 +44 +7C +92 +FE +ENDCHAR +STARTCHAR uni01E023 +ENCODING 122915 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 -7 7 +BITMAP +F8 +94 +98 +A0 +C0 +80 +ENDCHAR +STARTCHAR uni01E024 +ENCODING 122916 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 5 -7 8 +BITMAP +0E +50 +BC +50 +0E +ENDCHAR +STARTCHAR uni01E026 +ENCODING 122918 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 -7 7 +BITMAP +38 +4C +92 +FE +44 +38 +ENDCHAR +STARTCHAR uni01E027 +ENCODING 122919 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 7 -8 6 +BITMAP +66 +99 +38 +1C +38 +99 +66 +ENDCHAR +STARTCHAR uni01E028 +ENCODING 122920 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 7 -8 6 +BITMAP +22 +55 +34 +DE +B4 +55 +22 +ENDCHAR +STARTCHAR uni01E029 +ENCODING 122921 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 7 -8 6 +BITMAP +32 +5D +AC +F7 +58 +55 +22 +ENDCHAR +STARTCHAR uni01E02A +ENCODING 122922 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 6 -8 7 +BITMAP +18 +24 +FF +A5 +24 +18 +ENDCHAR +STARTCHAR uni01E800 +ENCODING 124928 +BBX 8 8 4 1 +BITMAP +79 +86 +02 +04 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni01E801 +ENCODING 124929 +BBX 8 10 4 1 +BITMAP +10 +00 +79 +86 +02 +04 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni01E802 +ENCODING 124930 +BBX 8 10 4 1 +BITMAP +24 +00 +79 +86 +02 +04 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni01E803 +ENCODING 124931 +BBX 8 8 4 1 +BITMAP +79 +86 +02 +04 +08 +11 +20 +40 +ENDCHAR +STARTCHAR uni01E804 +ENCODING 124932 +BBX 12 5 2 4 +BITMAP +C060 +2010 +BFF0 +2010 +C060 +ENDCHAR +STARTCHAR uni01E805 +ENCODING 124933 +BBX 12 5 2 4 +BITMAP +E070 +1080 +1F80 +1080 +E070 +ENDCHAR +STARTCHAR uni01E806 +ENCODING 124934 +BBX 8 10 4 1 +BITMAP +24 +00 +3E +41 +43 +3D +02 +04 +18 +E0 +ENDCHAR +STARTCHAR uni01E807 +ENCODING 124935 +BBX 5 11 6 1 +BITMAP +70 +88 +70 +20 +F8 +20 +F8 +20 +70 +88 +70 +ENDCHAR +STARTCHAR uni01E808 +ENCODING 124936 +BBX 9 10 3 1 +BITMAP +3C00 +4200 +8100 +0100 +0080 +0080 +7880 +8480 +8080 +7F00 +ENDCHAR +STARTCHAR uni01E809 +ENCODING 124937 +BBX 9 10 3 1 +BITMAP +3C00 +4200 +8100 +0100 +0480 +0080 +7880 +8480 +8080 +7F00 +ENDCHAR +STARTCHAR uni01E80A +ENCODING 124938 +BBX 9 10 3 1 +BITMAP +3C00 +4200 +8100 +0100 +2480 +0080 +7880 +8480 +8080 +7F00 +ENDCHAR +STARTCHAR uni01E80B +ENCODING 124939 +BBX 11 8 2 1 +BITMAP +8420 +8020 +FFC0 +8000 +8400 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni01E80C +ENCODING 124940 +BBX 11 8 2 2 +BITMAP +6000 +9020 +9020 +7FC0 +1000 +2100 +2200 +4100 +ENDCHAR +STARTCHAR uni01E80D +ENCODING 124941 +BBX 11 10 3 1 +BITMAP +0400 +0400 +0400 +FFE0 +0400 +0400 +0400 +FFE0 +0400 +0400 +ENDCHAR +STARTCHAR uni01E80E +ENCODING 124942 +BBX 10 10 3 1 +BITMAP +3C40 +4280 +8100 +0280 +0480 +0080 +7880 +8480 +8080 +7F00 +ENDCHAR +STARTCHAR uni01E80F +ENCODING 124943 +BBX 11 9 2 2 +BITMAP +0100 +6200 +9120 +9020 +7FC0 +1000 +2100 +2200 +4100 +ENDCHAR +STARTCHAR uni01E810 +ENCODING 124944 +BBX 14 10 1 1 +BITMAP +3C00 +4200 +8100 +0098 +0FE4 +0098 +7880 +8480 +8080 +7F00 +ENDCHAR +STARTCHAR uni01E811 +ENCODING 124945 +BBX 14 7 1 3 +BITMAP +3800 +4400 +8E18 +93E4 +8E18 +4400 +3800 +ENDCHAR +STARTCHAR uni01E812 +ENCODING 124946 +BBX 12 10 2 1 +BITMAP +3E00 +4100 +8490 +07F0 +0490 +0080 +7880 +8480 +8080 +7F00 +ENDCHAR +STARTCHAR uni01E813 +ENCODING 124947 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +A4 +84 +84 +44 +3C +44 +84 +84 +84 +84 +ENDCHAR +STARTCHAR uni01E814 +ENCODING 124948 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +08 +08 +10 +18 +24 +24 +58 +40 +80 +80 +ENDCHAR +STARTCHAR uni01E815 +ENCODING 124949 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +08 +08 +10 +18 +A4 +24 +58 +40 +80 +80 +ENDCHAR +STARTCHAR uni01E816 +ENCODING 124950 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +08 +48 +10 +18 +A4 +24 +58 +40 +80 +80 +ENDCHAR +STARTCHAR uni01E817 +ENCODING 124951 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 1 +BITMAP +08 +3E +10 +10 +20 +30 +48 +48 +B0 +80 +ENDCHAR +STARTCHAR uni01E818 +ENCODING 124952 +BBX 14 9 1 2 +BITMAP +0780 +0840 +9024 +9024 +FFFC +9024 +9024 +0840 +0780 +ENDCHAR +STARTCHAR uni01E819 +ENCODING 124953 +BBX 10 10 3 1 +BITMAP +0B80 +0C40 +1040 +1040 +2180 +2E00 +4400 +4200 +8100 +8080 +ENDCHAR +STARTCHAR uni01E81A +ENCODING 124954 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +88 +88 +70 +ENDCHAR +STARTCHAR uni01E81B +ENCODING 124955 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +7C +84 +84 +84 +7C +84 +84 +84 +7C +04 +ENDCHAR +STARTCHAR uni01E81C +ENCODING 124956 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +40 +04 +7C +84 +84 +84 +7C +84 +84 +84 +7C +04 +ENDCHAR +STARTCHAR uni01E81D +ENCODING 124957 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +50 +04 +7C +84 +84 +84 +7C +84 +84 +84 +7C +04 +ENDCHAR +STARTCHAR uni01E81E +ENCODING 124958 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +10 +10 +10 +10 +18 +04 +64 +84 +88 +70 +ENDCHAR +STARTCHAR uni01E81F +ENCODING 124959 +BBX 9 10 4 1 +BITMAP +0800 +0800 +1400 +1400 +2200 +2200 +4900 +4100 +8080 +8080 +ENDCHAR +STARTCHAR uni01E820 +ENCODING 124960 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 1 +BITMAP +10 +10 +1E +50 +10 +10 +10 +F0 +10 +10 +ENDCHAR +STARTCHAR uni01E821 +ENCODING 124961 +BBX 11 10 2 1 +BITMAP +8020 +8020 +8020 +8020 +FFE0 +8020 +8020 +8420 +8020 +8020 +ENDCHAR +STARTCHAR uni01E822 +ENCODING 124962 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 2 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01E823 +ENCODING 124963 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 1 1 +BITMAP +80 +80 +80 +80 +80 +F0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01E824 +ENCODING 124964 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 10 1 1 +BITMAP +80 +80 +80 +80 +80 +F0 +80 +F0 +80 +80 +ENDCHAR +STARTCHAR uni01E825 +ENCODING 124965 +BBX 11 4 2 3 +BITMAP +FFE0 +0000 +0000 +0400 +ENDCHAR +STARTCHAR uni01E826 +ENCODING 124966 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 11 2 1 +BITMAP +80 +40 +80 +00 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01E827 +ENCODING 124967 +BBX 8 8 4 2 +BITMAP +3C +42 +81 +81 +81 +81 +42 +3C +ENDCHAR +STARTCHAR uni01E828 +ENCODING 124968 +BBX 12 9 2 2 +BITMAP +01E0 +0210 +1400 +0400 +FFF0 +0400 +0400 +0210 +01E0 +ENDCHAR +STARTCHAR uni01E829 +ENCODING 124969 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 11 2 1 +BITMAP +40 +40 +40 +40 +40 +40 +40 +00 +40 +80 +40 +ENDCHAR +STARTCHAR uni01E82A +ENCODING 124970 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 1 +BITMAP +20 +F8 +20 +70 +88 +88 +88 +70 +20 +F8 +20 +ENDCHAR +STARTCHAR uni01E82B +ENCODING 124971 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 11 3 1 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +00 +80 +ENDCHAR +STARTCHAR uni01E82C +ENCODING 124972 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 1 +BITMAP +10 +44 +28 +28 +92 +28 +28 +28 +44 +44 +44 +ENDCHAR +STARTCHAR uni01E82D +ENCODING 124973 +BBX 11 10 3 1 +BITMAP +0400 +0400 +0A00 +4A00 +1100 +1100 +FFE0 +2080 +4040 +4040 +ENDCHAR +STARTCHAR uni01E82E +ENCODING 124974 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni01E82F +ENCODING 124975 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +A8 +A8 +A8 +A8 +F8 +A8 +A8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni01E830 +ENCODING 124976 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +A8 +A8 +A8 +F8 +A8 +A8 +F8 +A8 +A8 +A8 +ENDCHAR +STARTCHAR uni01E831 +ENCODING 124977 +BBX 10 5 3 4 +BITMAP +A800 +A980 +FE40 +A980 +A800 +ENDCHAR +STARTCHAR uni01E832 +ENCODING 124978 +BBX 13 7 1 4 +BITMAP +0200 +0000 +0000 +1240 +1240 +1240 +FFF8 +ENDCHAR +STARTCHAR uni01E833 +ENCODING 124979 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +24 +04 +FC +04 +04 +FC +04 +04 +FC +04 +ENDCHAR +STARTCHAR uni01E834 +ENCODING 124980 +BBX 14 6 1 3 +BITMAP +1240 +1240 +FFF8 +8004 +8004 +FFF8 +ENDCHAR +STARTCHAR uni01E835 +ENCODING 124981 +BBX 9 11 3 1 +BITMAP +1800 +0400 +1F80 +0200 +1F80 +0100 +7D00 +8200 +8500 +8500 +7800 +ENDCHAR +STARTCHAR uni01E836 +ENCODING 124982 +BBX 14 7 1 3 +BITMAP +0008 +0004 +0004 +FFF8 +0200 +0200 +FFF8 +ENDCHAR +STARTCHAR uni01E837 +ENCODING 124983 +BBX 14 7 1 3 +BITMAP +0008 +0204 +0004 +FFF8 +0500 +0500 +FFF8 +ENDCHAR +STARTCHAR uni01E838 +ENCODING 124984 +BBX 14 7 1 3 +BITMAP +0008 +0884 +0004 +FFF8 +0500 +0500 +FFF8 +ENDCHAR +STARTCHAR uni01E839 +ENCODING 124985 +BBX 11 10 2 1 +BITMAP +2820 +3020 +6020 +A020 +1040 +0F80 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni01E83A +ENCODING 124986 +BBX 13 10 1 1 +BITMAP +6000 +9000 +9000 +7FF0 +0200 +0200 +7FF0 +0048 +0048 +0030 +ENDCHAR +STARTCHAR uni01E83B +ENCODING 124987 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 1 +BITMAP +38 +44 +44 +38 +92 +FE +92 +28 +28 +44 +44 +ENDCHAR +STARTCHAR uni01E83C +ENCODING 124988 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 14 2 -1 +BITMAP +60 +90 +90 +60 +00 +60 +90 +90 +60 +00 +60 +90 +90 +60 +ENDCHAR +STARTCHAR uni01E83D +ENCODING 124989 +BBX 13 10 1 1 +BITMAP +6030 +9048 +9048 +7FF0 +0200 +0200 +7FF0 +9048 +9048 +6030 +ENDCHAR +STARTCHAR uni01E83E +ENCODING 124990 +BBX 14 4 1 4 +BITMAP +FFF8 +8004 +8004 +FFF8 +ENDCHAR +STARTCHAR uni01E83F +ENCODING 124991 +BBX 14 6 1 4 +BITMAP +0200 +0200 +FFF8 +8204 +8204 +FFF8 +ENDCHAR +STARTCHAR uni01E840 +ENCODING 124992 +BBX 14 6 1 4 +BITMAP +0480 +0480 +FFF8 +8484 +8484 +FFF8 +ENDCHAR +STARTCHAR uni01E841 +ENCODING 124993 +BBX 11 4 2 6 +BITMAP +0400 +0000 +0000 +FFE0 +ENDCHAR +STARTCHAR uni01E842 +ENCODING 124994 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +20 +20 +20 +20 +20 +20 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni01E843 +ENCODING 124995 +BBX 12 5 2 4 +BITMAP +00E0 +FF10 +0150 +FF10 +00E0 +ENDCHAR +STARTCHAR uni01E844 +ENCODING 124996 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +70 +88 +88 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01E845 +ENCODING 124997 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +70 +88 +88 +80 +80 +A0 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01E846 +ENCODING 124998 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +70 +88 +88 +80 +A0 +80 +A0 +80 +80 +80 +ENDCHAR +STARTCHAR uni01E847 +ENCODING 124999 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +8C +92 +52 +3C +10 +10 +10 +70 +90 +90 +60 +ENDCHAR +STARTCHAR uni01E848 +ENCODING 125000 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 1 +BITMAP +1C +22 +22 +20 +A8 +F8 +A8 +20 +20 +20 +ENDCHAR +STARTCHAR uni01E849 +ENCODING 125001 +BBX 9 10 3 1 +BITMAP +8880 +4500 +2200 +1500 +0880 +1400 +2200 +4100 +8080 +FF80 +ENDCHAR +STARTCHAR uni01E84A +ENCODING 125002 +BBX 12 5 2 4 +BITMAP +BFD0 +8010 +FFF0 +8010 +BFD0 +ENDCHAR +STARTCHAR uni01E84B +ENCODING 125003 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 1 +BITMAP +7C +80 +80 +80 +7C +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni01E84C +ENCODING 125004 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 1 +BITMAP +10 +00 +7C +80 +80 +80 +7C +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni01E84D +ENCODING 125005 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 1 +BITMAP +28 +00 +7C +80 +80 +80 +7C +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni01E84E +ENCODING 125006 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 1 +BITMAP +0E +10 +7C +80 +98 +A4 +A4 +78 +20 +20 +ENDCHAR +STARTCHAR uni01E84F +ENCODING 125007 +BBX 13 8 1 1 +BITMAP +7FF0 +0000 +FFF8 +0920 +1240 +2480 +0900 +0200 +ENDCHAR +STARTCHAR uni01E850 +ENCODING 125008 +BBX 14 10 1 1 +BITMAP +0A80 +0A80 +FFF8 +8004 +8004 +FFF8 +0480 +0900 +1200 +2400 +ENDCHAR +STARTCHAR uni01E851 +ENCODING 125009 +BBX 12 10 2 1 +BITMAP +FFF0 +6000 +1800 +0600 +0180 +0060 +FFF0 +0000 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01E852 +ENCODING 125010 +BBX 12 10 2 1 +BITMAP +6000 +9080 +9080 +7FF0 +1080 +1080 +1000 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uni01E853 +ENCODING 125011 +BBX 9 10 3 1 +BITMAP +8880 +8880 +8880 +4900 +3E00 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni01E854 +ENCODING 125012 +BBX 9 10 3 1 +BITMAP +8880 +8880 +8880 +4900 +3E00 +0800 +0800 +0F00 +0800 +0800 +ENDCHAR +STARTCHAR uni01E855 +ENCODING 125013 +BBX 9 10 3 1 +BITMAP +8880 +8880 +8880 +4900 +3E00 +0800 +0F00 +0800 +0F00 +0800 +ENDCHAR +STARTCHAR uni01E856 +ENCODING 125014 +BBX 14 10 1 1 +BITMAP +0300 +0480 +0480 +FFF8 +8004 +8004 +FFF8 +0480 +0480 +0300 +ENDCHAR +STARTCHAR uni01E857 +ENCODING 125015 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 1 +BITMAP +18 +60 +80 +60 +18 +82 +18 +60 +80 +60 +18 +ENDCHAR +STARTCHAR uni01E858 +ENCODING 125016 +BBX 12 6 2 3 +BITMAP +0080 +0080 +7FF0 +9080 +9080 +6000 +ENDCHAR +STARTCHAR uni01E859 +ENCODING 125017 +BBX 12 11 2 1 +BITMAP +0200 +0400 +0200 +0000 +FFF0 +6000 +1800 +0600 +0180 +0060 +FFF0 +ENDCHAR +STARTCHAR uni01E85A +ENCODING 125018 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 8 0 3 +BITMAP +3C +42 +99 +A5 +A5 +99 +42 +3C +ENDCHAR +STARTCHAR uni01E85B +ENCODING 125019 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +10 +00 +3C +42 +99 +A5 +A5 +99 +42 +3C +ENDCHAR +STARTCHAR uni01E85C +ENCODING 125020 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 3 +BITMAP +24 +00 +3C +42 +99 +A5 +A5 +99 +42 +3C +ENDCHAR +STARTCHAR uni01E85D +ENCODING 125021 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -1 +BITMAP +3C +42 +99 +A5 +A5 +99 +42 +3C +00 +08 +10 +08 +ENDCHAR +STARTCHAR uni01E85E +ENCODING 125022 +BBX 12 11 2 1 +BITMAP +0200 +0200 +7FF0 +8200 +8200 +6200 +0200 +0200 +0F80 +0200 +0200 +ENDCHAR +STARTCHAR uni01E85F +ENCODING 125023 +BBX 13 11 2 1 +BITMAP +0200 +E200 +1E00 +0380 +0270 +0208 +0270 +0380 +1E00 +E200 +0200 +ENDCHAR +STARTCHAR uni01E860 +ENCODING 125024 +BBX 14 12 1 0 +BITMAP +0018 +0024 +7864 +8598 +7E00 +0100 +0080 +03F8 +6C44 +9038 +9000 +6000 +ENDCHAR +STARTCHAR uni01E861 +ENCODING 125025 +BBX 14 6 1 3 +BITMAP +A000 +A000 +FFF8 +A4A4 +A4A4 +0318 +ENDCHAR +STARTCHAR uni01E862 +ENCODING 125026 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +20 +50 +50 +20 +28 +30 +60 +A0 +20 +50 +50 +20 +ENDCHAR +STARTCHAR uni01E863 +ENCODING 125027 +BBX 12 8 2 2 +BITMAP +8000 +8000 +FFF0 +0060 +0180 +0600 +1800 +6000 +ENDCHAR +STARTCHAR uni01E864 +ENCODING 125028 +BBX 12 8 2 2 +BITMAP +8400 +8000 +FFF0 +0060 +0180 +0600 +1800 +6000 +ENDCHAR +STARTCHAR uni01E865 +ENCODING 125029 +BBX 12 8 2 2 +BITMAP +9200 +8000 +FFF0 +0060 +0180 +0600 +1800 +6000 +ENDCHAR +STARTCHAR uni01E866 +ENCODING 125030 +BBX 12 8 2 2 +BITMAP +8000 +8000 +FFF0 +0060 +0180 +0600 +1800 +6080 +ENDCHAR +STARTCHAR uni01E867 +ENCODING 125031 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 1 +BITMAP +88 +20 +20 +20 +20 +20 +20 +20 +20 +20 +88 +ENDCHAR +STARTCHAR uni01E868 +ENCODING 125032 +BBX 13 11 1 1 +BITMAP +0040 +01F0 +0040 +6070 +91C8 +9648 +7830 +1000 +1000 +1000 +1000 +ENDCHAR +STARTCHAR uni01E869 +ENCODING 125033 +BBX 13 8 1 3 +BITMAP +0200 +0000 +3DE0 +4210 +8508 +8508 +0500 +0200 +ENDCHAR +STARTCHAR uni01E86A +ENCODING 125034 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +08 +08 +10 +10 +3C +20 +40 +70 +80 +80 +ENDCHAR +STARTCHAR uni01E86B +ENCODING 125035 +BBX 13 6 1 3 +BITMAP +3DE0 +4210 +8508 +8508 +0500 +0200 +ENDCHAR +STARTCHAR uni01E86C +ENCODING 125036 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 3 +BITMAP +F8 +88 +A8 +88 +88 +A8 +88 +F8 +ENDCHAR +STARTCHAR uni01E86D +ENCODING 125037 +BBX 13 8 1 3 +BITMAP +0880 +0000 +3DE0 +4210 +8508 +8508 +0500 +0200 +ENDCHAR +STARTCHAR uni01E86E +ENCODING 125038 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +20 +20 +28 +20 +A0 +28 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01E86F +ENCODING 125039 +BBX 12 9 2 1 +BITMAP +3C00 +4200 +8100 +8100 +8910 +0810 +0810 +0420 +03C0 +ENDCHAR +STARTCHAR uni01E870 +ENCODING 125040 +BBX 13 9 1 2 +BITMAP +0040 +0040 +3DE0 +4250 +8508 +E538 +9248 +9048 +6030 +ENDCHAR +STARTCHAR uni01E871 +ENCODING 125041 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 2 1 +BITMAP +70 +88 +08 +08 +50 +20 +50 +80 +80 +88 +70 +ENDCHAR +STARTCHAR uni01E872 +ENCODING 125042 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +88 +50 +50 +20 +50 +50 +50 +88 +88 +88 +ENDCHAR +STARTCHAR uni01E873 +ENCODING 125043 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +84 +8C +94 +64 +08 +08 +7C +10 +20 +20 +ENDCHAR +STARTCHAR uni01E874 +ENCODING 125044 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 1 +BITMAP +0C +12 +10 +7C +46 +5C +64 +C4 +7C +10 +90 +60 +ENDCHAR +STARTCHAR uni01E875 +ENCODING 125045 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +84 +8C +94 +64 +08 +08 +50 +10 +20 +20 +ENDCHAR +STARTCHAR uni01E876 +ENCODING 125046 +BBX 9 9 3 2 +BITMAP +0880 +1500 +2200 +4500 +8880 +4100 +2200 +1400 +0800 +ENDCHAR +STARTCHAR uni01E877 +ENCODING 125047 +BBX 11 8 3 1 +BITMAP +3C80 +4300 +0100 +4240 +BFA0 +4840 +1000 +2000 +ENDCHAR +STARTCHAR uni01E878 +ENCODING 125048 +BBX 12 7 2 3 +BITMAP +0460 +0410 +0410 +FFE0 +0400 +0400 +FFE0 +ENDCHAR +STARTCHAR uni01E879 +ENCODING 125049 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 1 +BITMAP +08 +08 +3E +08 +78 +88 +88 +88 +78 +08 +ENDCHAR +STARTCHAR uni01E87A +ENCODING 125050 +BBX 10 8 2 1 +BITMAP +7900 +8600 +0200 +04C0 +0900 +10C0 +2100 +40C0 +ENDCHAR +STARTCHAR uni01E87B +ENCODING 125051 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 1 +BITMAP +1F +20 +20 +A0 +1F +A0 +20 +20 +1F +ENDCHAR +STARTCHAR uni01E87C +ENCODING 125052 +BBX 15 7 0 3 +BITMAP +0100 +F11E +0920 +0FE0 +0920 +F11E +0100 +ENDCHAR +STARTCHAR uni01E87D +ENCODING 125053 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 1 +BITMAP +38 +44 +54 +44 +3C +04 +04 +08 +08 +10 +E0 +ENDCHAR +STARTCHAR uni01E87E +ENCODING 125054 +BBX 8 8 4 1 +BITMAP +79 +86 +02 +04 +8C +12 +2C +40 +ENDCHAR +STARTCHAR uni01E87F +ENCODING 125055 +BBX 13 6 1 3 +BITMAP +4400 +9F30 +8448 +7FC8 +0048 +0030 +ENDCHAR +STARTCHAR uni01E880 +ENCODING 125056 +BBX 13 6 1 3 +BITMAP +0110 +67C8 +9108 +9FF0 +9100 +6100 +ENDCHAR +STARTCHAR uni01E881 +ENCODING 125057 +BBX 10 9 3 2 +BITMAP +1F00 +6080 +A440 +2040 +3FC0 +2040 +A040 +6080 +1F00 +ENDCHAR +STARTCHAR uni01E882 +ENCODING 125058 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +80 +80 +80 +80 +B8 +C4 +84 +9C +A4 +98 +ENDCHAR +STARTCHAR uni01E883 +ENCODING 125059 +BBX 10 8 4 1 +BITMAP +7900 +8600 +0200 +0480 +0F40 +1080 +2000 +4000 +ENDCHAR +STARTCHAR uni01E884 +ENCODING 125060 +BBX 13 9 1 3 +BITMAP +8800 +5000 +2000 +5000 +8800 +FFF8 +0008 +0008 +FFF8 +ENDCHAR +STARTCHAR uni01E885 +ENCODING 125061 +BBX 12 9 2 2 +BITMAP +0400 +6000 +9FC0 +6020 +0010 +0010 +6020 +9FC0 +6000 +ENDCHAR +STARTCHAR uni01E886 +ENCODING 125062 +BBX 9 9 3 1 +BITMAP +7900 +8600 +0200 +0400 +0800 +1000 +2000 +3080 +4F00 +ENDCHAR +STARTCHAR uni01E887 +ENCODING 125063 +BBX 14 7 1 2 +BITMAP +7F80 +9040 +6124 +01FC +6124 +9040 +7F80 +ENDCHAR +STARTCHAR uni01E888 +ENCODING 125064 +BBX 11 11 2 1 +BITMAP +0E00 +0400 +0400 +0E00 +9120 +F1E0 +9120 +0E00 +0400 +0400 +0E00 +ENDCHAR +STARTCHAR uni01E889 +ENCODING 125065 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +80 +90 +80 +80 +B8 +C4 +84 +84 +84 +88 +ENDCHAR +STARTCHAR uni01E88A +ENCODING 125066 +BBX 9 9 3 2 +BITMAP +0800 +1400 +2200 +4100 +8880 +4100 +2200 +1400 +0800 +ENDCHAR +STARTCHAR uni01E88B +ENCODING 125067 +BBX 9 9 3 2 +BITMAP +0880 +1500 +2200 +4500 +8080 +5100 +2200 +5400 +8800 +ENDCHAR +STARTCHAR uni01E88C +ENCODING 125068 +BBX 12 11 2 0 +BITMAP +7040 +8840 +8840 +7040 +2040 +3FC0 +2040 +20E0 +2110 +2110 +20E0 +ENDCHAR +STARTCHAR uni01E88D +ENCODING 125069 +BBX 9 11 3 0 +BITMAP +8080 +8080 +4100 +4100 +2200 +2200 +1400 +1400 +0800 +0000 +0800 +ENDCHAR +STARTCHAR uni01E88E +ENCODING 125070 +BBX 10 11 3 1 +BITMAP +1000 +0400 +7C40 +8480 +8500 +8600 +7C00 +0C00 +1400 +2400 +4400 +ENDCHAR +STARTCHAR uni01E88F +ENCODING 125071 +BBX 9 13 3 -2 +BITMAP +0800 +1400 +1400 +2200 +3E00 +4100 +4100 +8480 +8480 +0800 +3000 +4000 +4000 +ENDCHAR +STARTCHAR uni01E890 +ENCODING 125072 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +88 +BC +88 +48 +38 +48 +88 +88 +88 +88 +ENDCHAR +STARTCHAR uni01E891 +ENCODING 125073 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 11 0 1 +BITMAP +22 +55 +55 +22 +22 +2A +32 +62 +A2 +22 +1C +ENDCHAR +STARTCHAR uni01E892 +ENCODING 125074 +BBX 13 8 1 2 +BITMAP +0030 +FFC8 +8030 +8000 +8000 +8030 +FFC8 +0030 +ENDCHAR +STARTCHAR uni01E893 +ENCODING 125075 +BBX 11 11 3 0 +BITMAP +0400 +7C00 +8400 +87C0 +8420 +7C20 +8420 +87C0 +8400 +7C00 +0400 +ENDCHAR +STARTCHAR uni01E894 +ENCODING 125076 +BBX 12 13 2 0 +BITMAP +6000 +9000 +9100 +7A00 +0700 +08C0 +1030 +00C0 +0700 +7800 +9000 +9000 +6000 +ENDCHAR +STARTCHAR uni01E895 +ENCODING 125077 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 1 +BITMAP +7E +42 +42 +43 +4E +72 +C2 +42 +42 +7E +ENDCHAR +STARTCHAR uni01E896 +ENCODING 125078 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 1 +BITMAP +60 +90 +80 +68 +30 +60 +A0 +18 +04 +24 +18 +ENDCHAR +STARTCHAR uni01E897 +ENCODING 125079 +BBX 11 11 2 1 +BITMAP +0400 +0A00 +0A00 +1100 +1100 +2080 +2080 +4040 +A0A0 +A0A0 +4040 +ENDCHAR +STARTCHAR uni01E898 +ENCODING 125080 +BBX 12 13 2 0 +BITMAP +6000 +9000 +9000 +7800 +0700 +00C0 +0030 +00C0 +0700 +7800 +9000 +9000 +6000 +ENDCHAR +STARTCHAR uni01E899 +ENCODING 125081 +BBX 9 11 3 1 +BITMAP +0C00 +1000 +FC00 +2000 +FC00 +4000 +5F00 +2080 +5080 +5080 +0F00 +ENDCHAR +STARTCHAR uni01E89A +ENCODING 125082 +BBX 13 9 1 2 +BITMAP +8000 +8000 +8480 +8400 +FFF8 +8400 +8400 +8000 +8000 +ENDCHAR +STARTCHAR uni01E89B +ENCODING 125083 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 1 +BITMAP +30 +48 +08 +32 +20 +FC +20 +32 +08 +48 +30 +ENDCHAR +STARTCHAR uni01E89C +ENCODING 125084 +BBX 12 6 2 4 +BITMAP +6000 +8880 +8080 +7FF0 +0080 +0080 +ENDCHAR +STARTCHAR uni01E89D +ENCODING 125085 +BBX 14 5 1 4 +BITMAP +FF04 +8104 +81FC +8104 +FF04 +ENDCHAR +STARTCHAR uni01E89E +ENCODING 125086 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 2 1 +BITMAP +88 +88 +88 +88 +88 +70 +20 +F8 +00 +50 +ENDCHAR +STARTCHAR uni01E89F +ENCODING 125087 +BBX 13 5 1 4 +BITMAP +0A80 +6AB0 +9FC8 +6AB0 +0A80 +ENDCHAR +STARTCHAR uni01E8A0 +ENCODING 125088 +BBX 11 10 2 1 +BITMAP +8000 +8000 +4100 +4100 +22A0 +22A0 +1440 +1440 +08A0 +08A0 +ENDCHAR +STARTCHAR uni01E8A1 +ENCODING 125089 +BBX 9 9 3 1 +BITMAP +3E00 +4900 +8880 +8880 +8880 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uni01E8A2 +ENCODING 125090 +BBX 13 5 1 4 +BITMAP +0200 +6230 +9FC8 +6230 +0200 +ENDCHAR +STARTCHAR uni01E8A3 +ENCODING 125091 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 1 +BITMAP +20 +20 +F8 +88 +50 +50 +20 +50 +50 +88 +88 +ENDCHAR +STARTCHAR uni01E8A4 +ENCODING 125092 +BBX 14 10 1 1 +BITMAP +7038 +8844 +8844 +7FF8 +0840 +0840 +0840 +3E40 +0840 +0840 +ENDCHAR +STARTCHAR uni01E8A5 +ENCODING 125093 +BBX 14 9 1 1 +BITMAP +0018 +FFE4 +8018 +8000 +FE00 +0400 +8800 +1000 +2000 +ENDCHAR +STARTCHAR uni01E8A6 +ENCODING 125094 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 1 +BITMAP +7C +44 +28 +28 +92 +28 +28 +44 +7C +ENDCHAR +STARTCHAR uni01E8A7 +ENCODING 125095 +BBX 11 11 3 0 +BITMAP +0400 +07C0 +2420 +0420 +0420 +7FC0 +8400 +8400 +8400 +7C00 +0400 +ENDCHAR +STARTCHAR uni01E8A8 +ENCODING 125096 +BBX 9 9 3 2 +BITMAP +3E00 +4100 +8880 +8080 +A280 +8080 +8880 +4100 +3E00 +ENDCHAR +STARTCHAR uni01E8A9 +ENCODING 125097 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 9 1 1 +BITMAP +F8 +88 +50 +50 +20 +50 +50 +88 +F8 +ENDCHAR +STARTCHAR uni01E8AA +ENCODING 125098 +BBX 14 8 1 4 +BITMAP +0F80 +0200 +0A80 +0200 +FFF8 +8004 +8004 +FFF8 +ENDCHAR +STARTCHAR uni01E8AB +ENCODING 125099 +BBX 9 9 3 1 +BITMAP +3E00 +4900 +8880 +8880 +FF80 +8880 +8880 +4900 +3E00 +ENDCHAR +STARTCHAR uni01E8AC +ENCODING 125100 +BBX 14 7 1 5 +BITMAP +0800 +0400 +0218 +FFE4 +8018 +8000 +F800 +ENDCHAR +STARTCHAR uni01E8AD +ENCODING 125101 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 1 +BITMAP +10 +10 +7C +10 +20 +20 +20 +40 +40 +80 +ENDCHAR +STARTCHAR uni01E8AE +ENCODING 125102 +BBX 13 6 1 4 +BITMAP +1240 +0000 +FFF8 +0000 +0000 +FFF8 +ENDCHAR +STARTCHAR uni01E8AF +ENCODING 125103 +BBX 13 10 1 1 +BITMAP +8208 +8008 +8008 +4710 +58D0 +2020 +58D0 +4710 +8008 +8008 +ENDCHAR +STARTCHAR uni01E8B0 +ENCODING 125104 +BBX 14 13 1 -1 +BITMAP +0800 +0800 +0400 +0400 +FFF8 +8204 +8204 +FFF8 +0100 +01C0 +0220 +05C0 +0800 +ENDCHAR +STARTCHAR uni01E8B1 +ENCODING 125105 +BBX 14 7 1 1 +BITMAP +FFF8 +8004 +8004 +FFF8 +0100 +0200 +0400 +ENDCHAR +STARTCHAR uni01E8B2 +ENCODING 125106 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +88 +50 +20 +28 +30 +60 +A0 +20 +50 +88 +ENDCHAR +STARTCHAR uni01E8B3 +ENCODING 125107 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 1 +BITMAP +70 +88 +88 +70 +20 +A8 +F8 +A8 +20 +20 +ENDCHAR +STARTCHAR uni01E8B4 +ENCODING 125108 +BBX 12 12 1 1 +BITMAP +1000 +1000 +7C20 +1010 +1010 +1FE0 +1000 +1000 +FC00 +1200 +1200 +0C00 +ENDCHAR +STARTCHAR uni01E8B5 +ENCODING 125109 +BBX 13 7 1 2 +BITMAP +00C0 +0920 +0120 +7FC8 +8108 +8110 +40E0 +ENDCHAR +STARTCHAR uni01E8B6 +ENCODING 125110 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 1 +BITMAP +10 +00 +44 +00 +7C +80 +80 +80 +7C +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni01E8B7 +ENCODING 125111 +BBX 14 7 1 4 +BITMAP +0300 +0480 +0480 +FFF8 +8004 +8004 +FFF8 +ENDCHAR +STARTCHAR uni01E8B8 +ENCODING 125112 +BBX 12 6 2 3 +BITMAP +0240 +0240 +7FF0 +9240 +9240 +6000 +ENDCHAR +STARTCHAR uni01E8B9 +ENCODING 125113 +BBX 9 9 3 2 +BITMAP +3E00 +4100 +8080 +8080 +8880 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni01E8BA +ENCODING 125114 +BBX 10 11 3 2 +BITMAP +0800 +0040 +3E80 +4100 +9C80 +A280 +A280 +A280 +9C80 +4100 +3E00 +ENDCHAR +STARTCHAR uni01E8BB +ENCODING 125115 +BBX 11 11 2 1 +BITMAP +0020 +0040 +0E80 +1100 +3880 +6480 +A280 +9300 +8E00 +4400 +3800 +ENDCHAR +STARTCHAR uni01E8BC +ENCODING 125116 +BBX 9 11 3 0 +BITMAP +3E00 +4100 +9C80 +A280 +A280 +A280 +9C80 +4100 +3E00 +0000 +0800 +ENDCHAR +STARTCHAR uni01E8BD +ENCODING 125117 +BBX 12 10 2 1 +BITMAP +8000 +8000 +5100 +5100 +2280 +2280 +5440 +5460 +0890 +0860 +ENDCHAR +STARTCHAR uni01E8BE +ENCODING 125118 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 1 +BITMAP +10 +38 +54 +92 +10 +10 +54 +10 +10 +10 +ENDCHAR +STARTCHAR uni01E8BF +ENCODING 125119 +BBX 12 9 2 2 +BITMAP +1810 +2410 +2460 +1F80 +0400 +1F00 +6480 +8480 +8300 +ENDCHAR +STARTCHAR uni01E8C0 +ENCODING 125120 +BBX 9 9 3 2 +BITMAP +0800 +1400 +1480 +2300 +2200 +4500 +4900 +8080 +8080 +ENDCHAR +STARTCHAR uni01E8C1 +ENCODING 125121 +BBX 12 8 2 3 +BITMAP +8000 +8000 +8000 +8080 +4080 +3FF0 +0080 +0080 +ENDCHAR +STARTCHAR uni01E8C2 +ENCODING 125122 +BBX 13 5 1 3 +BITMAP +3FF8 +0000 +8000 +0000 +3FF8 +ENDCHAR +STARTCHAR uni01E8C3 +ENCODING 125123 +BBX 8 9 3 1 +BITMAP +3E +41 +80 +80 +88 +80 +80 +41 +3E +ENDCHAR +STARTCHAR uni01E8C4 +ENCODING 125124 +BBX 11 9 3 2 +BITMAP +0400 +0400 +2400 +0400 +FFE0 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni01E8C7 +ENCODING 125127 +BBX 1 6 8 5 +BITMAP +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01E8C8 +ENCODING 125128 +BBX 10 4 3 6 +BITMAP +01C0 +0E00 +7000 +FFC0 +ENDCHAR +STARTCHAR uni01E8C9 +ENCODING 125129 +BBX 9 6 3 5 +BITMAP +8880 +8880 +C880 +B700 +8000 +8000 +ENDCHAR +STARTCHAR uni01E8CA +ENCODING 125130 +BBX 10 6 3 6 +BITMAP +8800 +8000 +FFC0 +0380 +1C00 +E000 +ENDCHAR +STARTCHAR uni01E8CB +ENCODING 125131 +BBX 6 7 5 5 +BITMAP +78 +84 +84 +78 +84 +84 +78 +ENDCHAR +STARTCHAR uni01E8CC +ENCODING 125132 +BBX 6 8 5 5 +BITMAP +C0 +30 +08 +04 +7C +84 +84 +78 +ENDCHAR +STARTCHAR uni01E8CD +ENCODING 125133 +BBX 6 8 5 5 +BITMAP +CC +30 +C8 +04 +7C +84 +84 +78 +ENDCHAR +STARTCHAR uni01E8CE +ENCODING 125134 +BBX 8 8 4 5 +BITMAP +70 +0C +42 +01 +71 +89 +81 +7E +ENDCHAR +STARTCHAR uni01E8CF +ENCODING 125135 +BBX 5 7 6 5 +BITMAP +70 +88 +88 +80 +A0 +80 +80 +ENDCHAR +STARTCHAR uni01E8D0 +ENCODING 125136 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 12 6 2 -2 +BITMAP +0030 +00C0 +0300 +0C00 +3000 +C000 +ENDCHAR +STARTCHAR uni01E8D1 +ENCODING 125137 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 6 5 -2 +BITMAP +79 +8A +8C +78 +18 +28 +ENDCHAR +STARTCHAR uni01E8D2 +ENCODING 125138 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 6 5 -2 +BITMAP +28 +28 +00 +10 +90 +60 +ENDCHAR +STARTCHAR uni01E8D3 +ENCODING 125139 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 6 6 5 -2 +BITMAP +54 +54 +00 +10 +90 +60 +ENDCHAR +STARTCHAR uni01E8D4 +ENCODING 125140 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 6 5 -2 +BITMAP +AA +AA +00 +10 +90 +60 +ENDCHAR +STARTCHAR uni01E8D5 +ENCODING 125141 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 9 6 4 -2 +BITMAP +AA80 +AA80 +0000 +0800 +4800 +3000 +ENDCHAR +STARTCHAR uni01E8D6 +ENCODING 125142 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 11 6 3 -2 +BITMAP +AAA0 +AAA0 +0000 +0400 +2400 +1800 +ENDCHAR +STARTCHAR uni01E900 +ENCODING 125184 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +80 +80 +80 +80 +BE +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01E901 +ENCODING 125185 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +44 +24 +14 +0C +F4 +ENDCHAR +STARTCHAR uni01E902 +ENCODING 125186 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +84 +04 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni01E903 +ENCODING 125187 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +8C +74 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni01E904 +ENCODING 125188 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +8C +92 +92 +92 +92 +FC +90 +90 +90 +9E +80 +80 +ENDCHAR +STARTCHAR uni01E905 +ENCODING 125189 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +92 +92 +92 +92 +96 +6A +02 +FE +ENDCHAR +STARTCHAR uni01E906 +ENCODING 125190 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +B8 +C4 +84 +84 +84 +88 +88 +90 +A0 +FC +ENDCHAR +STARTCHAR uni01E907 +ENCODING 125191 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +0C +70 +84 +8C +94 +64 +44 +84 +84 +84 +ENDCHAR +STARTCHAR uni01E908 +ENCODING 125192 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +C8 +B0 +80 +80 +FC +ENDCHAR +STARTCHAR uni01E909 +ENCODING 125193 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +82 +84 +88 +94 +A2 +C2 +BC +ENDCHAR +STARTCHAR uni01E90A +ENCODING 125194 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +80 +80 +B8 +C4 +84 +84 +84 +44 +04 +04 +ENDCHAR +STARTCHAR uni01E90B +ENCODING 125195 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01E90C +ENCODING 125196 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +80 +80 +80 +80 +80 +80 +40 +FC +ENDCHAR +STARTCHAR uni01E90D +ENCODING 125197 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +82 +82 +BA +C6 +82 +82 +82 +82 +46 +3A +02 +02 +ENDCHAR +STARTCHAR uni01E90E +ENCODING 125198 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +10 +08 +04 +7C +80 +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni01E90F +ENCODING 125199 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +7C +84 +84 +84 +E4 +84 +84 +84 +84 +44 +ENDCHAR +STARTCHAR uni01E910 +ENCODING 125200 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +78 +84 +04 +38 +40 +84 +84 +84 +94 +62 +ENDCHAR +STARTCHAR uni01E911 +ENCODING 125201 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +FC +20 +20 +20 +20 +FC +24 +24 +24 +E4 +ENDCHAR +STARTCHAR uni01E912 +ENCODING 125202 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +04 +04 +78 +04 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni01E913 +ENCODING 125203 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +62 +96 +9A +92 +92 +92 +92 +A2 +86 +7A +ENDCHAR +STARTCHAR uni01E914 +ENCODING 125204 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +6C +92 +8A +8A +8A +8A +92 +A2 +02 +FE +ENDCHAR +STARTCHAR uni01E915 +ENCODING 125205 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +4C +52 +42 +4A +32 +42 +82 +82 +42 +3A +ENDCHAR +STARTCHAR uni01E916 +ENCODING 125206 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +40 +78 +04 +04 +04 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni01E917 +ENCODING 125207 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +62 +92 +96 +7A +12 +22 +C2 +02 +02 +FE +ENDCHAR +STARTCHAR uni01E918 +ENCODING 125208 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +84 +88 +F0 +08 +04 +04 +04 +FC +ENDCHAR +STARTCHAR uni01E919 +ENCODING 125209 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +78 +84 +84 +44 +20 +50 +88 +84 +84 +74 +08 +10 +ENDCHAR +STARTCHAR uni01E91A +ENCODING 125210 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +6C +92 +92 +92 +92 +92 +92 +94 +90 +5E +ENDCHAR +STARTCHAR uni01E91B +ENCODING 125211 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +8A +8A +3C +48 +88 +88 +88 +AC +42 +ENDCHAR +STARTCHAR uni01E91C +ENCODING 125212 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +7C +84 +84 +84 +9C +84 +84 +84 +84 +44 +ENDCHAR +STARTCHAR uni01E91D +ENCODING 125213 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +B8 +C4 +94 +A4 +A4 +98 +80 +80 +80 +FC +ENDCHAR +STARTCHAR uni01E91E +ENCODING 125214 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +62 +92 +92 +A2 +FC +02 +02 +02 +02 +FC +ENDCHAR +STARTCHAR uni01E91F +ENCODING 125215 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +8E +92 +82 +82 +42 +3A +06 +02 +06 +FA +ENDCHAR +STARTCHAR uni01E920 +ENCODING 125216 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +BC +C2 +82 +B2 +CA +8A +92 +A4 +80 +FE +ENDCHAR +STARTCHAR uni01E921 +ENCODING 125217 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +92 +92 +92 +92 +A2 +82 +FC +80 +80 +FE +ENDCHAR +STARTCHAR uni01E922 +ENCODING 125218 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +80 +80 +BE +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01E923 +ENCODING 125219 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +04 +04 +84 +84 +84 +44 +24 +14 +0C +F4 +ENDCHAR +STARTCHAR uni01E924 +ENCODING 125220 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +84 +84 +04 +04 +FC +ENDCHAR +STARTCHAR uni01E925 +ENCODING 125221 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +84 +88 +70 +08 +04 +FC +ENDCHAR +STARTCHAR uni01E926 +ENCODING 125222 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +80 +80 +8C +92 +92 +FC +90 +90 +90 +9E +ENDCHAR +STARTCHAR uni01E927 +ENCODING 125223 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +80 +80 +92 +92 +92 +92 +92 +92 +92 +6C +ENDCHAR +STARTCHAR uni01E928 +ENCODING 125224 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +B8 +C4 +84 +88 +88 +90 +A0 +FC +ENDCHAR +STARTCHAR uni01E929 +ENCODING 125225 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +0C +70 +84 +8C +94 +64 +04 +FC +ENDCHAR +STARTCHAR uni01E92A +ENCODING 125226 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +C8 +B0 +80 +FC +ENDCHAR +STARTCHAR uni01E92B +ENCODING 125227 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +82 +84 +88 +94 +A2 +C2 +BC +ENDCHAR +STARTCHAR uni01E92C +ENCODING 125228 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +80 +B8 +C4 +84 +84 +44 +08 +10 +ENDCHAR +STARTCHAR uni01E92D +ENCODING 125229 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +84 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01E92E +ENCODING 125230 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +7C +82 +82 +82 +82 +82 +82 +72 +04 +08 +ENDCHAR +STARTCHAR uni01E92F +ENCODING 125231 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +02 +02 +3A +46 +82 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01E930 +ENCODING 125232 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +10 +08 +7C +80 +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni01E931 +ENCODING 125233 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +7C +84 +84 +E4 +84 +84 +84 +44 +ENDCHAR +STARTCHAR uni01E932 +ENCODING 125234 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +78 +84 +04 +38 +40 +84 +84 +42 +ENDCHAR +STARTCHAR uni01E933 +ENCODING 125235 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +02 +02 +FA +22 +26 +FA +22 +22 +22 +E2 +ENDCHAR +STARTCHAR uni01E934 +ENCODING 125236 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +78 +84 +04 +78 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni01E935 +ENCODING 125237 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +62 +96 +9A +92 +92 +A2 +86 +7A +ENDCHAR +STARTCHAR uni01E936 +ENCODING 125238 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +6C +92 +8A +8A +8A +8A +92 +A2 +02 +02 +ENDCHAR +STARTCHAR uni01E937 +ENCODING 125239 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +44 +28 +38 +44 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01E938 +ENCODING 125240 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +20 +40 +78 +04 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni01E939 +ENCODING 125241 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +02 +02 +02 +62 +92 +96 +7A +12 +12 +F2 +ENDCHAR +STARTCHAR uni01E93A +ENCODING 125242 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +84 +84 +88 +F0 +08 +04 +04 +FC +ENDCHAR +STARTCHAR uni01E93B +ENCODING 125243 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -2 +BITMAP +78 +84 +84 +64 +50 +88 +84 +74 +08 +10 +ENDCHAR +STARTCHAR uni01E93C +ENCODING 125244 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +6C +92 +92 +92 +92 +94 +90 +9E +80 +40 +ENDCHAR +STARTCHAR uni01E93D +ENCODING 125245 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +7C +8A +8A +3C +48 +88 +8C +62 +ENDCHAR +STARTCHAR uni01E93E +ENCODING 125246 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +7C +84 +84 +9C +84 +84 +84 +44 +ENDCHAR +STARTCHAR uni01E93F +ENCODING 125247 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 0 +BITMAP +B8 +C4 +94 +A4 +98 +80 +80 +FC +ENDCHAR +STARTCHAR uni01E940 +ENCODING 125248 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +62 +92 +92 +A2 +FC +02 +02 +FC +ENDCHAR +STARTCHAR uni01E941 +ENCODING 125249 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 -2 +BITMAP +8E +92 +82 +7A +06 +02 +06 +FA +02 +02 +ENDCHAR +STARTCHAR uni01E942 +ENCODING 125250 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +3C +42 +B2 +8A +92 +A4 +80 +FE +ENDCHAR +STARTCHAR uni01E943 +ENCODING 125251 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 0 +BITMAP +92 +92 +92 +A2 +82 +FC +80 +FE +ENDCHAR +STARTCHAR uni01E944 +ENCODING 125252 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 1 11 +BITMAP +F6 +08 +08 +ENDCHAR +STARTCHAR uni01E945 +ENCODING 125253 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 1 11 +BITMAP +70 +80 +7E +ENDCHAR +STARTCHAR uni01E946 +ENCODING 125254 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 1 1 13 +BITMAP +FE +ENDCHAR +STARTCHAR uni01E947 +ENCODING 125255 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 2 11 +BITMAP +A8 +88 +70 +ENDCHAR +STARTCHAR uni01E948 +ENCODING 125256 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 5 3 2 11 +BITMAP +88 +50 +20 +ENDCHAR +STARTCHAR uni01E949 +ENCODING 125257 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 7 3 1 11 +BITMAP +8A +54 +28 +ENDCHAR +STARTCHAR uni01E94A +ENCODING 125258 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 2 2 4 12 +BITMAP +40 +80 +ENDCHAR +STARTCHAR uni01E950 +ENCODING 125264 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +82 +82 +8A +8A +8A +92 +64 +ENDCHAR +STARTCHAR uni01E951 +ENCODING 125265 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 10 4 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01E952 +ENCODING 125266 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +40 +40 +78 +88 +08 +08 +08 +08 +08 +08 +ENDCHAR +STARTCHAR uni01E953 +ENCODING 125267 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +84 +84 +8C +94 +68 +10 +60 +80 +80 +7C +ENDCHAR +STARTCHAR uni01E954 +ENCODING 125268 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +20 +20 +24 +28 +30 +40 +80 +80 +80 +7C +ENDCHAR +STARTCHAR uni01E955 +ENCODING 125269 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +10 +28 +44 +82 +44 +28 +12 +22 +44 +38 +ENDCHAR +STARTCHAR uni01E956 +ENCODING 125270 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +84 +84 +88 +F0 +80 +F8 +84 +84 +84 +84 +08 +10 +ENDCHAR +STARTCHAR uni01E957 +ENCODING 125271 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +7C +82 +82 +82 +44 +28 +10 +28 +44 +82 +ENDCHAR +STARTCHAR uni01E958 +ENCODING 125272 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +82 +44 +28 +10 +28 +44 +82 +82 +82 +7C +ENDCHAR +STARTCHAR uni01E959 +ENCODING 125273 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +78 +84 +84 +84 +58 +20 +40 +80 +80 +80 +ENDCHAR +STARTCHAR uni01E95E +ENCODING 125278 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -2 +BITMAP +FE +10 +7C +92 +92 +92 +92 +92 +92 +42 +02 +02 +ENDCHAR +STARTCHAR uni01E95F +ENCODING 125279 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 0 -2 +BITMAP +7C +82 +82 +1C +22 +42 +82 +82 +82 +62 +02 +02 +ENDCHAR +STARTCHAR uni01EC71 +ENCODING 126065 +BBX 12 7 2 -2 +BITMAP +0020 +1040 +2950 +A9F0 +FE60 +8000 +8000 +ENDCHAR +STARTCHAR uni01EC72 +ENCODING 126066 +BBX 12 6 2 0 +BITMAP +8000 +8020 +9040 +A950 +A9F0 +7E60 +ENDCHAR +STARTCHAR uni01EC73 +ENCODING 126067 +BBX 9 5 3 0 +BITMAP +1400 +2800 +4000 +8000 +7F80 +ENDCHAR +STARTCHAR uni01EC74 +ENCODING 126068 +BBX 8 8 4 0 +BITMAP +05 +05 +05 +35 +3A +10 +60 +80 +ENDCHAR +STARTCHAR uni01EC75 +ENCODING 126069 +BBX 6 4 5 0 +BITMAP +08 +14 +64 +98 +ENDCHAR +STARTCHAR uni01EC76 +ENCODING 126070 +BBX 9 6 3 0 +BITMAP +1000 +1000 +1000 +6000 +8000 +7F80 +ENDCHAR +STARTCHAR uni01EC77 +ENCODING 126071 +BBX 8 5 4 0 +BITMAP +32 +3D +11 +60 +80 +ENDCHAR +STARTCHAR uni01EC78 +ENCODING 126072 +BBX 9 6 3 0 +BITMAP +2200 +2500 +3800 +4000 +8000 +7F80 +ENDCHAR +STARTCHAR uni01EC79 +ENCODING 126073 +BBX 7 8 4 0 +BITMAP +02 +02 +02 +32 +3C +10 +60 +80 +ENDCHAR +STARTCHAR uni01EC7A +ENCODING 126074 +BBX 13 4 2 0 +BITMAP +6000 +9018 +9020 +7FF8 +ENDCHAR +STARTCHAR uni01EC7B +ENCODING 126075 +BBX 13 4 2 0 +BITMAP +6000 +9098 +90A0 +7F78 +ENDCHAR +STARTCHAR uni01EC7C +ENCODING 126076 +BBX 12 4 2 0 +BITMAP +6000 +9050 +9050 +7FA0 +ENDCHAR +STARTCHAR uni01EC7D +ENCODING 126077 +BBX 13 6 2 0 +BITMAP +0028 +0028 +6028 +91D0 +9180 +7F00 +ENDCHAR +STARTCHAR uni01EC7E +ENCODING 126078 +BBX 12 4 2 0 +BITMAP +6020 +9050 +9090 +7FE0 +ENDCHAR +STARTCHAR uni01EC7F +ENCODING 126079 +BBX 12 4 2 0 +BITMAP +6000 +9000 +9000 +7FF0 +ENDCHAR +STARTCHAR uni01EC80 +ENCODING 126080 +BBX 12 4 2 0 +BITMAP +6060 +9190 +9180 +7F00 +ENDCHAR +STARTCHAR uni01EC81 +ENCODING 126081 +BBX 12 6 2 0 +BITMAP +0010 +0010 +6010 +9010 +9010 +7FE0 +ENDCHAR +STARTCHAR uni01EC82 +ENCODING 126082 +BBX 12 6 2 0 +BITMAP +0010 +0010 +60D0 +90E0 +90C0 +7F80 +ENDCHAR +STARTCHAR uni01EC83 +ENCODING 126083 +BBX 3 6 7 0 +BITMAP +80 +80 +80 +80 +A0 +60 +ENDCHAR +STARTCHAR uni01EC84 +ENCODING 126084 +BBX 9 9 3 -1 +BITMAP +0400 +0A00 +0A00 +0A00 +0A00 +0A00 +0A80 +7180 +8000 +ENDCHAR +STARTCHAR uni01EC85 +ENCODING 126085 +BBX 6 6 5 0 +BITMAP +80 +94 +A8 +E0 +E0 +60 +ENDCHAR +STARTCHAR uni01EC86 +ENCODING 126086 +BBX 8 6 4 0 +BITMAP +81 +81 +81 +8D +91 +7C +ENDCHAR +STARTCHAR uni01EC87 +ENCODING 126087 +BBX 7 6 4 0 +BITMAP +84 +8A +B2 +EC +E0 +60 +ENDCHAR +STARTCHAR uni01EC88 +ENCODING 126088 +BBX 10 6 3 0 +BITMAP +8000 +8000 +B8C0 +E700 +E000 +6000 +ENDCHAR +STARTCHAR uni01EC89 +ENCODING 126089 +BBX 6 8 5 0 +BITMAP +88 +88 +88 +88 +88 +88 +F4 +60 +ENDCHAR +STARTCHAR uni01EC8A +ENCODING 126090 +BBX 6 8 5 0 +BITMAP +84 +84 +84 +64 +24 +24 +3C +18 +ENDCHAR +STARTCHAR uni01EC8B +ENCODING 126091 +BBX 8 8 4 0 +BITMAP +89 +8D +8A +88 +88 +88 +F4 +60 +ENDCHAR +STARTCHAR uni01EC8C +ENCODING 126092 +BBX 12 6 2 0 +BITMAP +0050 +0050 +0050 +0050 +0050 +FF90 +ENDCHAR +STARTCHAR uni01EC8D +ENCODING 126093 +BBX 12 6 2 0 +BITMAP +00D0 +0110 +01D0 +0090 +0110 +FFD0 +ENDCHAR +STARTCHAR uni01EC8E +ENCODING 126094 +BBX 12 5 2 0 +BITMAP +0110 +0190 +00E0 +0100 +FFC0 +ENDCHAR +STARTCHAR uni01EC8F +ENCODING 126095 +BBX 13 7 1 0 +BITMAP +0028 +0028 +03A8 +01A8 +00D0 +0100 +FF80 +ENDCHAR +STARTCHAR uni01EC90 +ENCODING 126096 +BBX 13 6 2 0 +BITMAP +0010 +0028 +0048 +00F0 +0100 +FF80 +ENDCHAR +STARTCHAR uni01EC91 +ENCODING 126097 +BBX 13 5 2 0 +BITMAP +0008 +0008 +00F0 +0100 +FF80 +ENDCHAR +STARTCHAR uni01EC92 +ENCODING 126098 +BBX 13 5 2 0 +BITMAP +0710 +0328 +01A0 +0260 +FF00 +ENDCHAR +STARTCHAR uni01EC93 +ENCODING 126099 +BBX 13 5 2 0 +BITMAP +0010 +0128 +01E0 +0260 +FF00 +ENDCHAR +STARTCHAR uni01EC94 +ENCODING 126100 +BBX 13 8 2 0 +BITMAP +0008 +0008 +0008 +01C8 +00C8 +0070 +0080 +FFC0 +ENDCHAR +STARTCHAR uni01EC95 +ENCODING 126101 +BBX 12 4 2 0 +BITMAP +0060 +0080 +0090 +FFE0 +ENDCHAR +STARTCHAR uni01EC96 +ENCODING 126102 +BBX 12 4 2 0 +BITMAP +0060 +0280 +0290 +FDE0 +ENDCHAR +STARTCHAR uni01EC97 +ENCODING 126103 +BBX 12 3 2 0 +BITMAP +0090 +0090 +FF60 +ENDCHAR +STARTCHAR uni01EC98 +ENCODING 126104 +BBX 12 7 2 0 +BITMAP +0050 +0050 +0050 +0350 +03A0 +0100 +FE00 +ENDCHAR +STARTCHAR uni01EC99 +ENCODING 126105 +BBX 13 4 2 0 +BITMAP +0010 +0028 +0048 +FFF0 +ENDCHAR +STARTCHAR uni01EC9A +ENCODING 126106 +BBX 13 2 2 0 +BITMAP +0008 +FFF0 +ENDCHAR +STARTCHAR uni01EC9B +ENCODING 126107 +BBX 13 5 2 0 +BITMAP +0018 +01A8 +01C8 +0080 +FF00 +ENDCHAR +STARTCHAR uni01EC9C +ENCODING 126108 +BBX 12 6 2 0 +BITMAP +0010 +0010 +0010 +0010 +0010 +FFE0 +ENDCHAR +STARTCHAR uni01EC9D +ENCODING 126109 +BBX 12 6 2 0 +BITMAP +0010 +0010 +00D0 +00E0 +0040 +FF80 +ENDCHAR +STARTCHAR uni01EC9E +ENCODING 126110 +BBX 11 11 3 -2 +BITMAP +0060 +0180 +0200 +0240 +0240 +0240 +1BC0 +6D80 +8000 +1000 +1800 +ENDCHAR +STARTCHAR uni01EC9F +ENCODING 126111 +BBX 15 11 0 -2 +BITMAP +0206 +0218 +0220 +0224 +0224 +AA24 +8ABC +8B58 +7000 +0100 +0180 +ENDCHAR +STARTCHAR uni01ECA0 +ENCODING 126112 +BBX 10 9 4 0 +BITMAP +00C0 +0300 +0400 +0480 +0480 +0480 +0780 +0B00 +F000 +ENDCHAR +STARTCHAR uni01ECA1 +ENCODING 126113 +BBX 12 11 2 -2 +BITMAP +0030 +00C0 +0100 +5900 +5900 +4900 +D100 +0200 +0C00 +1000 +6000 +ENDCHAR +STARTCHAR uni01ECA2 +ENCODING 126114 +BBX 15 11 0 -2 +BITMAP +0006 +0808 +0810 +AAD0 +AAD0 +A250 +4690 +0020 +00C0 +0100 +0600 +ENDCHAR +STARTCHAR uni01ECA3 +ENCODING 126115 +BBX 5 7 6 -1 +BITMAP +08 +08 +08 +08 +08 +68 +90 +ENDCHAR +STARTCHAR uni01ECA4 +ENCODING 126116 +BBX 8 4 4 0 +BITMAP +06 +08 +09 +FE +ENDCHAR +STARTCHAR uni01ECA5 +ENCODING 126117 +BBX 9 3 3 0 +BITMAP +0480 +0480 +FB00 +ENDCHAR +STARTCHAR uni01ECA6 +ENCODING 126118 +BBX 9 7 3 0 +BITMAP +0280 +0280 +0280 +1A80 +1D00 +0800 +F000 +ENDCHAR +STARTCHAR uni01ECA7 +ENCODING 126119 +BBX 9 4 4 0 +BITMAP +0100 +0280 +0480 +FF00 +ENDCHAR +STARTCHAR uni01ECA8 +ENCODING 126120 +BBX 9 2 4 0 +BITMAP +0080 +FF00 +ENDCHAR +STARTCHAR uni01ECA9 +ENCODING 126121 +BBX 9 5 4 0 +BITMAP +0180 +1A80 +1C80 +0800 +F000 +ENDCHAR +STARTCHAR uni01ECAA +ENCODING 126122 +BBX 9 3 4 -1 +BITMAP +0800 +F580 +0700 +ENDCHAR +STARTCHAR uni01ECAB +ENCODING 126123 +BBX 8 6 4 0 +BITMAP +01 +01 +0D +0E +04 +F8 +ENDCHAR +STARTCHAR uni01ECAC +ENCODING 126124 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 2 +BITMAP +A8 +A8 +50 +ENDCHAR +STARTCHAR uni01ECAD +ENCODING 126125 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 1 1 3 +BITMAP +F8 +ENDCHAR +STARTCHAR uni01ECAE +ENCODING 126126 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 2 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni01ECAF +ENCODING 126127 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 1 +BITMAP +20 +70 +20 +00 +F8 +ENDCHAR +STARTCHAR uni01ECB0 +ENCODING 126128 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 5 2 -2 +BITMAP +10 +10 +20 +40 +80 +ENDCHAR +STARTCHAR uni01ECB1 +ENCODING 126129 +BBX 8 4 4 0 +BITMAP +06 +08 +69 +9E +ENDCHAR +STARTCHAR uni01ECB2 +ENCODING 126130 +BBX 6 7 5 0 +BITMAP +80 +80 +80 +98 +A0 +A4 +78 +ENDCHAR +STARTCHAR uni01ECB3 +ENCODING 126131 +BBX 12 6 2 0 +BITMAP +0030 +0040 +0070 +0020 +0040 +FFF0 +ENDCHAR +STARTCHAR uni01ECB4 +ENCODING 126132 +BBX 10 8 3 -2 +BITMAP +0140 +0140 +0140 +0940 +1140 +FE80 +2000 +4000 +ENDCHAR +STARTCHAR uni01EE00 +ENCODING 126464 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 8 4 3 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01EE01 +ENCODING 126465 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +08 +44 +84 +78 +00 +00 +10 +ENDCHAR +STARTCHAR uni01EE02 +ENCODING 126466 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +20 +40 +80 +90 +80 +44 +38 +ENDCHAR +STARTCHAR uni01EE03 +ENCODING 126467 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 3 +BITMAP +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uni01EE05 +ENCODING 126469 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +18 +24 +24 +3C +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni01EE06 +ENCODING 126470 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +20 +00 +00 +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni01EE07 +ENCODING 126471 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +FC +20 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni01EE08 +ENCODING 126472 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +40 +40 +40 +40 +58 +64 +44 +F8 +ENDCHAR +STARTCHAR uni01EE09 +ENCODING 126473 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +08 +94 +90 +88 +84 +78 +00 +50 +ENDCHAR +STARTCHAR uni01EE0A +ENCODING 126474 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +04 +14 +24 +14 +44 +84 +84 +78 +ENDCHAR +STARTCHAR uni01EE0B +ENCODING 126475 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +04 +04 +04 +04 +04 +04 +44 +84 +84 +88 +78 +ENDCHAR +STARTCHAR uni01EE0C +ENCODING 126476 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 -2 +BITMAP +70 +18 +78 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR uni01EE0D +ENCODING 126477 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +20 +00 +00 +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni01EE0E +ENCODING 126478 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +02 +2A +2A +BC +90 +90 +60 +ENDCHAR +STARTCHAR uni01EE0F +ENCODING 126479 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +30 +48 +40 +38 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni01EE10 +ENCODING 126480 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +10 +00 +0C +14 +0C +84 +84 +78 +ENDCHAR +STARTCHAR uni01EE11 +ENCODING 126481 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +0C +32 +9C +90 +90 +60 +ENDCHAR +STARTCHAR uni01EE12 +ENCODING 126482 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 0 +BITMAP +48 +00 +00 +38 +24 +14 +4C +84 +88 +70 +ENDCHAR +STARTCHAR uni01EE13 +ENCODING 126483 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 -1 +BITMAP +08 +04 +04 +04 +08 +90 +60 +ENDCHAR +STARTCHAR uni01EE14 +ENCODING 126484 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 -1 +BITMAP +10 +00 +24 +00 +00 +02 +2A +2A +BC +90 +90 +60 +ENDCHAR +STARTCHAR uni01EE15 +ENCODING 126485 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +28 +00 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uni01EE16 +ENCODING 126486 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +20 +00 +50 +00 +00 +08 +44 +84 +78 +ENDCHAR +STARTCHAR uni01EE17 +ENCODING 126487 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -2 +BITMAP +20 +00 +00 +FC +20 +40 +80 +80 +80 +44 +38 +ENDCHAR +STARTCHAR uni01EE18 +ENCODING 126488 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +40 +00 +10 +08 +04 +84 +F8 +ENDCHAR +STARTCHAR uni01EE19 +ENCODING 126489 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +08 +00 +00 +0C +32 +9C +90 +90 +60 +ENDCHAR +STARTCHAR uni01EE1A +ENCODING 126490 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 3 +BITMAP +40 +48 +40 +40 +58 +64 +44 +F8 +ENDCHAR +STARTCHAR uni01EE1B +ENCODING 126491 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +00 +00 +30 +48 +40 +38 +40 +80 +80 +84 +78 +ENDCHAR +STARTCHAR uni01EE1C +ENCODING 126492 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 4 1 3 +BITMAP +08 +44 +84 +78 +ENDCHAR +STARTCHAR uni01EE1D +ENCODING 126493 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +08 +44 +84 +84 +88 +70 +ENDCHAR +STARTCHAR uni01EE1E +ENCODING 126494 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 1 3 +BITMAP +0C +14 +0C +84 +84 +78 +ENDCHAR +STARTCHAR uni01EE1F +ENCODING 126495 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +38 +24 +14 +4C +84 +88 +70 +ENDCHAR +STARTCHAR uni01EE21 +ENCODING 126497 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 0 0 +BITMAP +08 +04 +04 +FC +00 +00 +10 +ENDCHAR +STARTCHAR uni01EE22 +ENCODING 126498 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 0 1 +BITMAP +38 +06 +FE +00 +10 +ENDCHAR +STARTCHAR uni01EE24 +ENCODING 126500 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 3 +BITMAP +10 +08 +3C +2A +3A +F6 +ENDCHAR +STARTCHAR uni01EE27 +ENCODING 126503 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 0 3 +BITMAP +70 +0C +FC +ENDCHAR +STARTCHAR uni01EE29 +ENCODING 126505 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 0 1 +BITMAP +08 +04 +04 +F8 +00 +28 +ENDCHAR +STARTCHAR uni01EE2A +ENCODING 126506 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +04 +08 +10 +20 +40 +3C +02 +FE +ENDCHAR +STARTCHAR uni01EE2B +ENCODING 126507 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 3 +BITMAP +04 +04 +04 +04 +04 +04 +04 +F8 +ENDCHAR +STARTCHAR uni01EE2C +ENCODING 126508 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 3 +BITMAP +08 +14 +32 +EE +ENDCHAR +STARTCHAR uni01EE2D +ENCODING 126509 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 0 3 +BITMAP +10 +00 +00 +08 +04 +04 +F8 +ENDCHAR +STARTCHAR uni01EE2E +ENCODING 126510 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 3 +BITMAP +02 +2A +2A +FC +ENDCHAR +STARTCHAR uni01EE2F +ENCODING 126511 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 4 0 3 +BITMAP +18 +24 +20 +FE +ENDCHAR +STARTCHAR uni01EE30 +ENCODING 126512 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 3 +BITMAP +10 +00 +00 +38 +24 +14 +0C +F8 +ENDCHAR +STARTCHAR uni01EE31 +ENCODING 126513 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 3 0 3 +BITMAP +0C +52 +FC +ENDCHAR +STARTCHAR uni01EE32 +ENCODING 126514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 0 3 +BITMAP +48 +00 +00 +38 +24 +14 +0C +F8 +ENDCHAR +STARTCHAR uni01EE34 +ENCODING 126516 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +10 +00 +24 +00 +02 +2A +2A +FC +ENDCHAR +STARTCHAR uni01EE35 +ENCODING 126517 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 0 3 +BITMAP +28 +00 +00 +08 +04 +04 +F8 +ENDCHAR +STARTCHAR uni01EE36 +ENCODING 126518 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 0 3 +BITMAP +20 +00 +48 +00 +00 +08 +04 +04 +F8 +ENDCHAR +STARTCHAR uni01EE37 +ENCODING 126519 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 6 0 3 +BITMAP +20 +00 +00 +70 +0C +FC +ENDCHAR +STARTCHAR uni01EE39 +ENCODING 126521 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 0 3 +BITMAP +08 +00 +00 +0C +52 +FC +ENDCHAR +STARTCHAR uni01EE3B +ENCODING 126523 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 3 +BITMAP +08 +00 +00 +18 +24 +20 +FE +ENDCHAR +STARTCHAR uni01EE42 +ENCODING 126530 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +FC +20 +40 +90 +80 +84 +4A +32 +ENDCHAR +STARTCHAR uni01EE47 +ENCODING 126535 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +FC +20 +40 +80 +80 +84 +4A +32 +ENDCHAR +STARTCHAR uni01EE49 +ENCODING 126537 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +04 +4A +A8 +A4 +22 +1C +00 +14 +ENDCHAR +STARTCHAR uni01EE4B +ENCODING 126539 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +02 +02 +02 +02 +02 +02 +42 +A2 +A2 +24 +1C +ENDCHAR +STARTCHAR uni01EE4D +ENCODING 126541 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 1 0 +BITMAP +10 +00 +00 +04 +42 +A2 +A2 +24 +18 +ENDCHAR +STARTCHAR uni01EE4E +ENCODING 126542 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 -1 +BITMAP +01 +15 +15 +4E +A8 +A8 +38 +ENDCHAR +STARTCHAR uni01EE4F +ENCODING 126543 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +30 +48 +40 +38 +40 +80 +88 +94 +64 +ENDCHAR +STARTCHAR uni01EE51 +ENCODING 126545 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 0 +BITMAP +06 +19 +4E +A8 +A8 +30 +ENDCHAR +STARTCHAR uni01EE52 +ENCODING 126546 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 1 0 +BITMAP +24 +00 +00 +1C +12 +0A +46 +A2 +A4 +18 +ENDCHAR +STARTCHAR uni01EE54 +ENCODING 126548 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 12 0 -1 +BITMAP +08 +00 +12 +00 +00 +01 +15 +15 +4E +A8 +A8 +38 +ENDCHAR +STARTCHAR uni01EE57 +ENCODING 126551 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +20 +00 +00 +FC +20 +40 +80 +80 +84 +4A +32 +ENDCHAR +STARTCHAR uni01EE59 +ENCODING 126553 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 0 +BITMAP +04 +00 +00 +06 +19 +4E +A8 +A8 +30 +ENDCHAR +STARTCHAR uni01EE5B +ENCODING 126555 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +00 +00 +30 +48 +40 +38 +40 +80 +88 +94 +64 +ENDCHAR +STARTCHAR uni01EE5D +ENCODING 126557 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +04 +42 +A2 +A2 +24 +18 +ENDCHAR +STARTCHAR uni01EE5F +ENCODING 126559 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +1C +12 +0A +46 +A2 +A4 +18 +ENDCHAR +STARTCHAR uni01EE61 +ENCODING 126561 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +88 +88 +48 +70 +00 +10 +ENDCHAR +STARTCHAR uni01EE62 +ENCODING 126562 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 10 0 1 +BITMAP +80 +80 +80 +80 +80 +B8 +86 +7E +00 +10 +ENDCHAR +STARTCHAR uni01EE64 +ENCODING 126564 +BBX 9 8 2 1 +BITMAP +8000 +8000 +8200 +8D00 +9480 +9480 +8C80 +7300 +ENDCHAR +STARTCHAR uni01EE67 +ENCODING 126567 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +80 +80 +80 +80 +80 +B8 +86 +7E +ENDCHAR +STARTCHAR uni01EE68 +ENCODING 126568 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +08 +88 +88 +88 +88 +8A +8D +89 +9E +60 +ENDCHAR +STARTCHAR uni01EE69 +ENCODING 126569 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 2 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +88 +88 +48 +70 +00 +50 +ENDCHAR +STARTCHAR uni01EE6A +ENCODING 126570 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +84 +88 +90 +A0 +A0 +9C +82 +7E +ENDCHAR +STARTCHAR uni01EE6C +ENCODING 126572 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 9 0 2 +BITMAP +80 +80 +80 +80 +80 +8C +92 +9E +60 +ENDCHAR +STARTCHAR uni01EE6D +ENCODING 126573 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +80 +80 +90 +80 +80 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni01EE6E +ENCODING 126574 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +80 +80 +80 +80 +80 +80 +82 +AA +AA +BC +90 +90 +60 +ENDCHAR +STARTCHAR uni01EE6F +ENCODING 126575 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +98 +A4 +A0 +9C +88 +90 +60 +ENDCHAR +STARTCHAR uni01EE70 +ENCODING 126576 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +80 +90 +80 +8C +94 +8C +84 +84 +78 +ENDCHAR +STARTCHAR uni01EE71 +ENCODING 126577 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 12 1 0 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +8C +92 +9C +60 +ENDCHAR +STARTCHAR uni01EE72 +ENCODING 126578 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +80 +80 +A8 +80 +80 +B8 +A4 +94 +8C +84 +88 +70 +ENDCHAR +STARTCHAR uni01EE74 +ENCODING 126580 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 1 -1 +BITMAP +80 +88 +80 +94 +80 +80 +82 +AA +AA +BC +90 +90 +60 +ENDCHAR +STARTCHAR uni01EE75 +ENCODING 126581 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +80 +80 +A8 +80 +80 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni01EE76 +ENCODING 126582 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +90 +80 +A8 +80 +80 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni01EE77 +ENCODING 126583 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 0 3 +BITMAP +80 +88 +80 +80 +80 +B8 +86 +7E +ENDCHAR +STARTCHAR uni01EE79 +ENCODING 126585 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 0 +BITMAP +80 +80 +80 +90 +80 +80 +80 +8C +92 +9C +60 +ENDCHAR +STARTCHAR uni01EE7A +ENCODING 126586 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +08 +88 +8A +88 +88 +8A +8D +89 +9E +60 +ENDCHAR +STARTCHAR uni01EE7B +ENCODING 126587 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 14 1 -2 +BITMAP +80 +80 +80 +80 +90 +80 +80 +98 +A4 +A0 +9C +88 +90 +60 +ENDCHAR +STARTCHAR uni01EE7C +ENCODING 126588 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +80 +80 +80 +80 +80 +88 +84 +84 +78 +ENDCHAR +STARTCHAR uni01EE7E +ENCODING 126590 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +80 +80 +80 +80 +80 +B8 +A4 +94 +8C +84 +88 +70 +ENDCHAR +STARTCHAR uni01EE80 +ENCODING 126592 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 8 3 3 +BITMAP +80 +80 +80 +80 +C0 +A0 +A0 +A0 +ENDCHAR +STARTCHAR uni01EE81 +ENCODING 126593 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +48 +A4 +A4 +78 +00 +00 +10 +ENDCHAR +STARTCHAR uni01EE82 +ENCODING 126594 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +FC +20 +40 +90 +84 +8A +7C +08 +ENDCHAR +STARTCHAR uni01EE83 +ENCODING 126595 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 5 1 3 +BITMAP +10 +08 +44 +A4 +F8 +ENDCHAR +STARTCHAR uni01EE84 +ENCODING 126596 +BBX 10 10 1 0 +BITMAP +0400 +0300 +0680 +0A40 +0A40 +4640 +A980 +7000 +2000 +2000 +ENDCHAR +STARTCHAR uni01EE85 +ENCODING 126597 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -1 +BITMAP +18 +24 +24 +3C +04 +44 +A8 +70 +ENDCHAR +STARTCHAR uni01EE86 +ENCODING 126598 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +20 +00 +00 +08 +04 +04 +04 +44 +A8 +70 +ENDCHAR +STARTCHAR uni01EE87 +ENCODING 126599 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +FC +20 +40 +80 +84 +8A +7C +08 +ENDCHAR +STARTCHAR uni01EE88 +ENCODING 126600 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 2 +BITMAP +08 +08 +08 +08 +4A +AD +A9 +FE +20 +ENDCHAR +STARTCHAR uni01EE89 +ENCODING 126601 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 8 1 -2 +BITMAP +04 +4A +A8 +A4 +A2 +7C +80 +14 +ENDCHAR +STARTCHAR uni01EE8B +ENCODING 126603 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -1 +BITMAP +04 +04 +04 +04 +04 +04 +04 +44 +A4 +A8 +78 +20 +ENDCHAR +STARTCHAR uni01EE8C +ENCODING 126604 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 8 2 -2 +BITMAP +70 +18 +78 +80 +80 +C0 +A0 +A0 +ENDCHAR +STARTCHAR uni01EE8D +ENCODING 126605 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 0 +BITMAP +20 +00 +00 +08 +04 +44 +A4 +A4 +78 +ENDCHAR +STARTCHAR uni01EE8E +ENCODING 126606 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 -1 +BITMAP +01 +15 +15 +4E +A8 +A8 +70 +ENDCHAR +STARTCHAR uni01EE8F +ENCODING 126607 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +30 +48 +40 +38 +40 +88 +94 +94 +78 +ENDCHAR +STARTCHAR uni01EE90 +ENCODING 126608 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 2 +BITMAP +10 +00 +0C +14 +4C +A4 +A4 +78 +20 +ENDCHAR +STARTCHAR uni01EE91 +ENCODING 126609 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 7 0 -1 +BITMAP +06 +09 +4E +A8 +A8 +70 +20 +ENDCHAR +STARTCHAR uni01EE92 +ENCODING 126610 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 -1 +BITMAP +48 +00 +00 +38 +24 +14 +4C +A4 +A4 +78 +20 +ENDCHAR +STARTCHAR uni01EE93 +ENCODING 126611 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 -2 +BITMAP +08 +04 +04 +44 +A4 +A8 +70 +20 +ENDCHAR +STARTCHAR uni01EE94 +ENCODING 126612 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 -2 +BITMAP +08 +00 +12 +00 +00 +01 +15 +15 +4E +A8 +A8 +70 +20 +ENDCHAR +STARTCHAR uni01EE95 +ENCODING 126613 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 3 +BITMAP +28 +00 +00 +08 +44 +A4 +78 +ENDCHAR +STARTCHAR uni01EE96 +ENCODING 126614 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 9 1 3 +BITMAP +20 +00 +50 +00 +00 +08 +44 +A4 +78 +ENDCHAR +STARTCHAR uni01EE97 +ENCODING 126615 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 1 -2 +BITMAP +20 +00 +00 +FC +20 +40 +80 +84 +8A +7C +08 +ENDCHAR +STARTCHAR uni01EE98 +ENCODING 126616 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 8 1 2 +BITMAP +40 +00 +10 +08 +44 +A4 +F8 +20 +ENDCHAR +STARTCHAR uni01EE99 +ENCODING 126617 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 -1 +BITMAP +04 +00 +00 +06 +09 +4E +A8 +A8 +70 +20 +ENDCHAR +STARTCHAR uni01EE9A +ENCODING 126618 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 9 0 2 +BITMAP +08 +0A +08 +08 +4A +AD +A9 +FE +20 +ENDCHAR +STARTCHAR uni01EE9B +ENCODING 126619 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 -2 +BITMAP +10 +00 +00 +30 +48 +40 +38 +40 +88 +94 +94 +78 +ENDCHAR +STARTCHAR uni01EEA1 +ENCODING 126625 +BBX 14 11 1 -2 +BITMAP +4008 +8004 +C00C +A014 +9FE4 +4008 +3FF0 +0000 +0100 +0280 +0100 +ENDCHAR +STARTCHAR uni01EEA2 +ENCODING 126626 +BBX 15 15 1 -2 +BITMAP +FFFC +8004 +FF8C +0630 +08C0 +1300 +2400 +4880 +5140 +5082 +5006 +480A +27F4 +1008 +0FF0 +ENDCHAR +STARTCHAR uni01EEA3 +ENCODING 126627 +BBX 12 10 2 2 +BITMAP +0700 +0480 +0240 +4120 +8090 +C050 +A050 +9F90 +4020 +3FC0 +ENDCHAR +STARTCHAR uni01EEA5 +ENCODING 126629 +BBX 14 12 1 -2 +BITMAP +00E0 +0110 +0248 +02A4 +0244 +0104 +00F4 +8014 +8024 +7FC8 +4010 +3FE0 +ENDCHAR +STARTCHAR uni01EEA6 +ENCODING 126630 +BBX 14 13 1 -2 +BITMAP +0400 +0A00 +0400 +0070 +0048 +0024 +0014 +0014 +8014 +8024 +7FC8 +4010 +3FE0 +ENDCHAR +STARTCHAR uni01EEA7 +ENCODING 126631 +BBX 15 14 1 -2 +BITMAP +FFFC +8004 +FF0C +0630 +08C0 +1300 +2400 +4800 +5002 +5006 +480A +27F4 +1008 +0FF0 +ENDCHAR +STARTCHAR uni01EEA8 +ENCODING 126632 +BBX 13 14 2 -1 +BITMAP +3800 +2800 +2800 +2800 +2800 +2800 +2BE0 +2C10 +29C8 +2228 +2448 +EF90 +8020 +FFC0 +ENDCHAR +STARTCHAR uni01EEA9 +ENCODING 126633 +BBX 14 15 1 -2 +BITMAP +01F8 +2204 +24FC +6904 +6BE0 +6810 +A7C8 +A024 +9FE4 +4008 +3FF0 +0000 +0220 +0550 +0220 +ENDCHAR +STARTCHAR uni01EEAB +ENCODING 126635 +BBX 11 12 3 0 +BITMAP +00E0 +00A0 +00A0 +00A0 +00A0 +40A0 +80A0 +C0A0 +A0A0 +9F20 +4040 +3F80 +ENDCHAR +STARTCHAR uni01EEAC +ENCODING 126636 +BBX 8 13 4 -2 +BITMAP +1C +22 +39 +05 +79 +82 +BC +A0 +C0 +C0 +C0 +80 +80 +ENDCHAR +STARTCHAR uni01EEAD +ENCODING 126637 +BBX 11 12 3 0 +BITMAP +0400 +0A00 +0400 +0040 +0020 +4060 +80A0 +C0A0 +A0A0 +9F20 +4040 +3F80 +ENDCHAR +STARTCHAR uni01EEAE +ENCODING 126638 +BBX 15 11 1 0 +BITMAP +0444 +0AAA +0AAA +0912 +4404 +8278 +C140 +A140 +9E40 +4080 +3F00 +ENDCHAR +STARTCHAR uni01EEAF +ENCODING 126639 +BBX 14 15 1 -2 +BITMAP +0F00 +1080 +2780 +2880 +2800 +27E0 +3020 +47E0 +9800 +A000 +A004 +901C +4FE4 +2008 +1FF0 +ENDCHAR +STARTCHAR uni01EEB0 +ENCODING 126640 +BBX 14 14 1 -2 +BITMAP +1000 +2800 +10E0 +0110 +0248 +02A4 +0244 +4104 +80F4 +C014 +A024 +9FC8 +4010 +3FE0 +ENDCHAR +STARTCHAR uni01EEB1 +ENCODING 126641 +BBX 15 12 1 0 +BITMAP +007C +0082 +013A +014A +0E72 +4804 +8678 +C140 +A140 +9E40 +4080 +3F00 +ENDCHAR +STARTCHAR uni01EEB2 +ENCODING 126642 +BBX 14 16 1 -2 +BITMAP +0420 +0A50 +0420 +0000 +00E0 +0110 +0248 +02A4 +0244 +4104 +80F4 +C014 +A024 +9FC8 +4010 +3FE0 +ENDCHAR +STARTCHAR uni01EEB3 +ENCODING 126643 +BBX 14 11 1 -2 +BITMAP +0070 +0048 +0024 +0014 +0014 +0014 +8014 +8024 +7FC8 +4010 +3FE0 +ENDCHAR +STARTCHAR uni01EEB4 +ENCODING 126644 +BBX 15 16 1 -2 +BITMAP +0040 +00A0 +0040 +0110 +02A8 +0110 +0444 +0AAA +0912 +4404 +8278 +C140 +A140 +9E40 +4080 +3F00 +ENDCHAR +STARTCHAR uni01EEB5 +ENCODING 126645 +BBX 14 11 1 1 +BITMAP +0440 +0AA0 +0440 +0000 +4008 +8004 +C00C +A014 +9FE4 +4008 +3FF0 +ENDCHAR +STARTCHAR uni01EEB6 +ENCODING 126646 +BBX 14 12 1 1 +BITMAP +0100 +0280 +0100 +0440 +0AA0 +4448 +8004 +C00C +A014 +9FE4 +4008 +3FF0 +ENDCHAR +STARTCHAR uni01EEB7 +ENCODING 126647 +BBX 14 16 2 -2 +BITMAP +0200 +0500 +0200 +0000 +FFF8 +8008 +FF18 +0C60 +1180 +2600 +4804 +5004 +5014 +4FE8 +2010 +1FE0 +ENDCHAR +STARTCHAR uni01EEB8 +ENCODING 126648 +BBX 12 13 2 0 +BITMAP +1000 +2800 +1000 +0700 +0480 +0240 +4120 +8090 +C050 +A050 +9F90 +4020 +3FC0 +ENDCHAR +STARTCHAR uni01EEB9 +ENCODING 126649 +BBX 15 13 1 0 +BITMAP +0800 +147C +0882 +013A +014A +0E72 +4804 +8678 +C140 +A140 +9E40 +4080 +3F00 +ENDCHAR +STARTCHAR uni01EEBA +ENCODING 126650 +BBX 13 14 2 -1 +BITMAP +3800 +2880 +2940 +2880 +2800 +2800 +2BE0 +2C10 +29C8 +2228 +2448 +EF90 +8020 +FFC0 +ENDCHAR +STARTCHAR uni01EEBB +ENCODING 126651 +BBX 13 15 2 -2 +BITMAP +0040 +00A0 +0040 +1E00 +2100 +4F00 +5000 +4FC0 +2040 +4FC0 +9000 +A038 +9FC8 +4010 +3FE0 +ENDCHAR +STARTCHAR uni01EEF0 +ENCODING 126704 +BBX 14 9 1 3 +BITMAP +000C +003C +0040 +0080 +00F0 +0008 +00FC +0700 +F800 +ENDCHAR +STARTCHAR uni01EEF1 +ENCODING 126705 +BBX 14 5 1 3 +BITMAP +4000 +2000 +10E0 +9018 +FFFC +ENDCHAR +STARTCHAR uni01F000 +ENCODING 126976 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8208 +8388 +8E08 +83C8 +9E48 +9288 +8F88 +8608 +8B08 +92C8 +A228 +8208 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F001 +ENCODING 126977 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8208 +8288 +8F08 +8408 +84E8 +BB28 +A628 +A428 +AF28 +A428 +8068 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F002 +ENCODING 126978 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8188 +8F08 +8508 +8508 +87E8 +BD28 +A528 +B8E8 +A028 +A3E8 +BC28 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F003 +ENCODING 126979 +BBX 12 16 2 -2 +BITMAP +FFF0 +8010 +8010 +8210 +8A10 +8A10 +8AD0 +BB10 +8A10 +8A10 +8A10 +9A50 +A190 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F004 +ENCODING 126980 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8208 +8208 +8208 +BFE8 +9248 +9248 +9F88 +8208 +8208 +8208 +8208 +8208 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F005 +ENCODING 126981 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8208 +BE88 +8908 +9088 +AFC8 +8A88 +BA48 +A008 +BBC8 +8948 +A888 +9348 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F006 +ENCODING 126982 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +BFE8 +A028 +A028 +A028 +A028 +A028 +A028 +A028 +A028 +A028 +A028 +BFE8 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F007 +ENCODING 126983 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8008 +8008 +8008 +8008 +87E8 +B808 +8008 +8008 +8008 +8008 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F008 +ENCODING 126984 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8008 +8008 +8F88 +8008 +8008 +8008 +81E8 +BE08 +8008 +8008 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F009 +ENCODING 126985 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8008 +8F88 +8008 +8008 +8F88 +8008 +8008 +83E8 +BC08 +8008 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F00A +ENCODING 126986 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8008 +8008 +87E8 +BD28 +A528 +B8E8 +A028 +A3E8 +BC28 +8008 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F00B +ENCODING 126987 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8808 +89C8 +9308 +B108 +97C8 +9248 +9248 +9FE8 +9008 +8008 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F00C +ENCODING 126988 +BBX 12 16 2 -2 +BITMAP +FFF0 +8010 +8010 +8010 +8410 +8210 +8010 +83D0 +BC10 +8110 +8890 +9050 +8010 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F00D +ENCODING 126989 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8008 +8408 +8488 +8708 +9C08 +8408 +8448 +8388 +8008 +8008 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F00E +ENCODING 126990 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8008 +8008 +8408 +8208 +8A08 +8908 +9088 +A068 +8008 +8008 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F00F +ENCODING 126991 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8008 +8408 +8588 +8E88 +B488 +8508 +8928 +B0C8 +8008 +8008 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F010 +ENCODING 126992 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8008 +8008 +8028 +8C68 +96E8 +B1C8 +8C48 +8388 +8708 +8088 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F011 +ENCODING 126993 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8208 +8208 +8208 +8208 +8008 +8008 +8208 +8208 +8208 +8208 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F012 +ENCODING 126994 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8208 +8208 +8208 +8208 +8008 +8008 +9048 +9048 +9048 +9048 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F013 +ENCODING 126995 +BBX 12 16 2 -2 +BITMAP +FFF0 +8010 +8010 +9090 +9090 +9090 +9090 +8010 +8010 +9090 +9090 +9090 +9090 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F014 +ENCODING 126996 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +9048 +9048 +9048 +9248 +8208 +8208 +9248 +9048 +9048 +9048 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F015 +ENCODING 126997 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +9248 +9248 +9248 +9248 +8008 +8008 +9248 +9248 +9248 +9248 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F016 +ENCODING 126998 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8208 +8208 +8208 +8008 +9248 +9248 +9248 +8008 +9248 +9248 +9248 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F017 +ENCODING 126999 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +9048 +9248 +9548 +98C8 +9048 +8008 +8008 +9048 +98C8 +9548 +9248 +9048 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F018 +ENCODING 127000 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +9248 +9248 +9248 +8008 +9248 +9248 +9248 +8008 +9248 +9248 +9248 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F019 +ENCODING 127001 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8008 +8F88 +9548 +A728 +B8E8 +AAA8 +B8E8 +A728 +9548 +8F88 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F01A +ENCODING 127002 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8708 +8A88 +9748 +9DC8 +9748 +8A88 +8708 +8A88 +9748 +9DC8 +9748 +8A88 +8708 +FFF8 +ENDCHAR +STARTCHAR uni01F01B +ENCODING 127003 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +9808 +A408 +A408 +9808 +8608 +8908 +8908 +8608 +8188 +8248 +8248 +8188 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F01C +ENCODING 127004 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8008 +98C8 +A528 +A528 +98C8 +8008 +98C8 +A528 +A528 +98C8 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F01D +ENCODING 127005 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +98C8 +A528 +A528 +98C8 +8608 +8908 +8908 +8608 +98C8 +A528 +A528 +98C8 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F01E +ENCODING 127006 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +98C8 +A528 +A528 +98C8 +98C8 +A528 +A528 +98C8 +98C8 +A528 +A528 +98C8 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F01F +ENCODING 127007 +BBX 13 16 2 -2 +BITMAP +FFF8 +9808 +A408 +A708 +9C88 +84E8 +8398 +9998 +A668 +A648 +9988 +9988 +A648 +A648 +9988 +FFF8 +ENDCHAR +STARTCHAR uni01F020 +ENCODING 127008 +BBX 13 16 2 -2 +BITMAP +FFF8 +98C8 +A528 +A528 +98C8 +A528 +A528 +98C8 +A528 +A528 +98C8 +A528 +A528 +98C8 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F021 +ENCODING 127009 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +B6C8 +C928 +C928 +B6C8 +B6C8 +C928 +C928 +B6C8 +B6C8 +C928 +C928 +B6C8 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F022 +ENCODING 127010 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8108 +89E8 +8A08 +89C8 +BD28 +89F8 +9FA8 +9968 +ABF8 +8848 +88C8 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F023 +ENCODING 127011 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8888 +BFE8 +8508 +98E8 +AAA8 +BAE8 +A728 +AAA8 +AFA8 +A328 +A6E8 +AA48 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F024 +ENCODING 127012 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8088 +8888 +8888 +91E8 +9F48 +A948 +8A48 +8848 +8848 +8848 +88C8 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F025 +ENCODING 127013 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8888 +BFE8 +8508 +91E8 +9E28 +AAA8 +8728 +BFA8 +8628 +8AC8 +B248 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F026 +ENCODING 127014 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8208 +82C8 +9F08 +82C8 +8F08 +82C8 +BF08 +8C88 +97C8 +A4B8 +8788 +8488 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F027 +ENCODING 127015 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +81E8 +BE08 +8408 +8FC8 +8888 +8E88 +8F88 +8808 +9F88 +AD08 +C608 +99E8 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F028 +ENCODING 127016 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8488 +9888 +8CA8 +BAA8 +88C8 +9C88 +9888 +A948 +AA48 +8C28 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F029 +ENCODING 127017 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +8008 +8408 +8788 +8488 +8B08 +8208 +8508 +8AC8 +B138 +8608 +8108 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F02A +ENCODING 127018 +BBX 13 16 2 -2 +BITMAP +FFF8 +8008 +9FC8 +8708 +8E88 +8888 +8F88 +8888 +8948 +8BE8 +9C88 +89C8 +BB68 +89C8 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F02B +ENCODING 127019 +BBX 13 16 2 -2 +BITMAP +FFF8 +AAA8 +D558 +AAA8 +D558 +AAA8 +D558 +AAA8 +D558 +AAA8 +D558 +AAA8 +D558 +AAA8 +D558 +FFF8 +ENDCHAR +STARTCHAR uni01F030 +ENCODING 127024 +BBX 15 7 1 3 +BITMAP +FFFE +AAAA +D556 +AAAA +D556 +AAAA +FFFE +ENDCHAR +STARTCHAR uni01F031 +ENCODING 127025 +BBX 15 7 1 3 +BITMAP +FFFE +FEFE +FEFE +FEFE +FEFE +FEFE +FFFE +ENDCHAR +STARTCHAR uni01F032 +ENCODING 127026 +BBX 15 7 1 3 +BITMAP +FFFE +FEFE +FEFE +FEEE +FEFE +FEFE +FFFE +ENDCHAR +STARTCHAR uni01F033 +ENCODING 127027 +BBX 15 7 1 3 +BITMAP +FFFE +FEBE +FEFE +FEFE +FEFE +FEFA +FFFE +ENDCHAR +STARTCHAR uni01F034 +ENCODING 127028 +BBX 15 7 1 3 +BITMAP +FFFE +FEBE +FEFE +FEEE +FEFE +FEFA +FFFE +ENDCHAR +STARTCHAR uni01F035 +ENCODING 127029 +BBX 15 7 1 3 +BITMAP +FFFE +FEBA +FEFE +FEFE +FEFE +FEBA +FFFE +ENDCHAR +STARTCHAR uni01F036 +ENCODING 127030 +BBX 15 7 1 3 +BITMAP +FFFE +FEBA +FEFE +FEEE +FEFE +FEBA +FFFE +ENDCHAR +STARTCHAR uni01F037 +ENCODING 127031 +BBX 15 7 1 3 +BITMAP +FFFE +FEAA +FEFE +FEFE +FEFE +FEAA +FFFE +ENDCHAR +STARTCHAR uni01F038 +ENCODING 127032 +BBX 15 7 1 3 +BITMAP +FFFE +FEFE +FEFE +EEFE +FEFE +FEFE +FFFE +ENDCHAR +STARTCHAR uni01F039 +ENCODING 127033 +BBX 15 7 1 3 +BITMAP +FFFE +FEFE +FEFE +EEEE +FEFE +FEFE +FFFE +ENDCHAR +STARTCHAR uni01F03A +ENCODING 127034 +BBX 15 7 1 3 +BITMAP +FFFE +FEBE +FEFE +EEFE +FEFE +FEFA +FFFE +ENDCHAR +STARTCHAR uni01F03B +ENCODING 127035 +BBX 15 7 1 3 +BITMAP +FFFE +FEBE +FEFE +EEEE +FEFE +FEFA +FFFE +ENDCHAR +STARTCHAR uni01F03C +ENCODING 127036 +BBX 15 7 1 3 +BITMAP +FFFE +FEBA +FEFE +EEFE +FEFE +FEBA +FFFE +ENDCHAR +STARTCHAR uni01F03D +ENCODING 127037 +BBX 15 7 1 3 +BITMAP +FFFE +FEBA +FEFE +EEEE +FEFE +FEBA +FFFE +ENDCHAR +STARTCHAR uni01F03E +ENCODING 127038 +BBX 15 7 1 3 +BITMAP +FFFE +FEAA +FEFE +EEFE +FEFE +FEAA +FFFE +ENDCHAR +STARTCHAR uni01F03F +ENCODING 127039 +BBX 15 7 1 3 +BITMAP +FFFE +BEFE +FEFE +FEFE +FEFE +FAFE +FFFE +ENDCHAR +STARTCHAR uni01F040 +ENCODING 127040 +BBX 14 7 2 3 +BITMAP +FFFC +BEFC +FEFC +FEDC +FEFC +FAFC +FFFC +ENDCHAR +STARTCHAR uni01F041 +ENCODING 127041 +BBX 15 7 1 3 +BITMAP +FFFE +BEBE +FEFE +FEFE +FEFE +FAFA +FFFE +ENDCHAR +STARTCHAR uni01F042 +ENCODING 127042 +BBX 15 7 1 3 +BITMAP +FFFE +BEBE +FEFE +FEEE +FEFE +FAFA +FFFE +ENDCHAR +STARTCHAR uni01F043 +ENCODING 127043 +BBX 15 7 1 3 +BITMAP +FFFE +BEBA +FEFE +FEFE +FEFE +FABA +FFFE +ENDCHAR +STARTCHAR uni01F044 +ENCODING 127044 +BBX 15 7 1 3 +BITMAP +FFFE +BEBA +FEFE +FEEE +FEFE +FABA +FFFE +ENDCHAR +STARTCHAR uni01F045 +ENCODING 127045 +BBX 15 7 1 3 +BITMAP +FFFE +BEAA +FEFE +FEFE +FEFE +FAAA +FFFE +ENDCHAR +STARTCHAR uni01F046 +ENCODING 127046 +BBX 15 7 1 3 +BITMAP +FFFE +BEFE +FEFE +EEFE +FEFE +FAFE +FFFE +ENDCHAR +STARTCHAR uni01F047 +ENCODING 127047 +BBX 15 7 1 3 +BITMAP +FFFE +BEFE +FEFE +EEEE +FEFE +FAFE +FFFE +ENDCHAR +STARTCHAR uni01F048 +ENCODING 127048 +BBX 15 7 1 3 +BITMAP +FFFE +BEBE +FEFE +EEFE +FEFE +FAFA +FFFE +ENDCHAR +STARTCHAR uni01F049 +ENCODING 127049 +BBX 15 7 1 3 +BITMAP +FFFE +BEBE +FEFE +EEEE +FEFE +FAFA +FFFE +ENDCHAR +STARTCHAR uni01F04A +ENCODING 127050 +BBX 15 7 1 3 +BITMAP +FFFE +BEBA +FEFE +EEFE +FEFE +FABA +FFFE +ENDCHAR +STARTCHAR uni01F04B +ENCODING 127051 +BBX 15 7 1 3 +BITMAP +FFFE +BEBA +FEFE +EEEE +FEFE +FABA +FFFE +ENDCHAR +STARTCHAR uni01F04C +ENCODING 127052 +BBX 15 7 1 3 +BITMAP +FFFE +BEAA +FEFE +EEFE +FEFE +FAAA +FFFE +ENDCHAR +STARTCHAR uni01F04D +ENCODING 127053 +BBX 15 7 1 3 +BITMAP +FFFE +BAFE +FEFE +FEFE +FEFE +BAFE +FFFE +ENDCHAR +STARTCHAR uni01F04E +ENCODING 127054 +BBX 15 7 1 3 +BITMAP +FFFE +BAFE +FEFE +FEEE +FEFE +BAFE +FFFE +ENDCHAR +STARTCHAR uni01F04F +ENCODING 127055 +BBX 15 7 1 3 +BITMAP +FFFE +BABE +FEFE +FEFE +FEFE +BAFA +FFFE +ENDCHAR +STARTCHAR uni01F050 +ENCODING 127056 +BBX 15 7 1 3 +BITMAP +FFFE +BABE +FEFE +FEEE +FEFE +BAFA +FFFE +ENDCHAR +STARTCHAR uni01F051 +ENCODING 127057 +BBX 15 7 1 3 +BITMAP +FFFE +BABA +FEFE +FEFE +FEFE +BABA +FFFE +ENDCHAR +STARTCHAR uni01F052 +ENCODING 127058 +BBX 15 7 1 3 +BITMAP +FFFE +BABA +FEFE +FEEE +FEFE +BABA +FFFE +ENDCHAR +STARTCHAR uni01F053 +ENCODING 127059 +BBX 15 7 1 3 +BITMAP +FFFE +BAAA +FEFE +FEFE +FEFE +BAAA +FFFE +ENDCHAR +STARTCHAR uni01F054 +ENCODING 127060 +BBX 15 7 1 3 +BITMAP +FFFE +BAFE +FEFE +EEFE +FEFE +BAFE +FFFE +ENDCHAR +STARTCHAR uni01F055 +ENCODING 127061 +BBX 15 7 1 3 +BITMAP +FFFE +BAFE +FEFE +EEEE +FEFE +BAFE +FFFE +ENDCHAR +STARTCHAR uni01F056 +ENCODING 127062 +BBX 15 7 1 3 +BITMAP +FFFE +BABE +FEFE +EEFE +FEFE +BAFA +FFFE +ENDCHAR +STARTCHAR uni01F057 +ENCODING 127063 +BBX 15 7 1 3 +BITMAP +FFFE +BABE +FEFE +EEEE +FEFE +BAFA +FFFE +ENDCHAR +STARTCHAR uni01F058 +ENCODING 127064 +BBX 15 7 1 3 +BITMAP +FFFE +BABA +FEFE +EEFE +FEFE +BABA +FFFE +ENDCHAR +STARTCHAR uni01F059 +ENCODING 127065 +BBX 15 7 1 3 +BITMAP +FFFE +BABA +FEFE +EEEE +FEFE +BABA +FFFE +ENDCHAR +STARTCHAR uni01F05A +ENCODING 127066 +BBX 15 7 1 3 +BITMAP +FFFE +BAAA +FEFE +EEFE +FEFE +BAAA +FFFE +ENDCHAR +STARTCHAR uni01F05B +ENCODING 127067 +BBX 15 7 1 3 +BITMAP +FFFE +AAFE +FEFE +FEFE +FEFE +AAFE +FFFE +ENDCHAR +STARTCHAR uni01F05C +ENCODING 127068 +BBX 16 7 0 3 +BITMAP +FFFF +AB7F +FF7F +FF77 +FF7F +AB7F +FFFF +ENDCHAR +STARTCHAR uni01F05D +ENCODING 127069 +BBX 15 7 1 3 +BITMAP +FFFE +AABE +FEFE +FEFE +FEFE +AAFA +FFFE +ENDCHAR +STARTCHAR uni01F05E +ENCODING 127070 +BBX 15 7 1 3 +BITMAP +FFFE +AABE +FEFE +FEEE +FEFE +AAFA +FFFE +ENDCHAR +STARTCHAR uni01F05F +ENCODING 127071 +BBX 15 7 1 3 +BITMAP +FFFE +AABA +FEFE +FEFE +FEFE +AABA +FFFE +ENDCHAR +STARTCHAR uni01F060 +ENCODING 127072 +BBX 15 7 1 3 +BITMAP +FFFE +AABA +FEFE +FEEE +FEFE +AABA +FFFE +ENDCHAR +STARTCHAR uni01F061 +ENCODING 127073 +BBX 15 7 1 3 +BITMAP +FFFE +AAAA +FEFE +FEFE +FEFE +AAAA +FFFE +ENDCHAR +STARTCHAR uni01F062 +ENCODING 127074 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +AA +D6 +AA +D6 +AA +D6 +AA +D6 +AA +D6 +AA +D6 +AA +FE +ENDCHAR +STARTCHAR uni01F063 +ENCODING 127075 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +FE +FE +FE +FE +82 +FE +FE +FE +FE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F064 +ENCODING 127076 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +FE +FE +FE +FE +82 +FE +FE +FE +EE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F065 +ENCODING 127077 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +FE +FE +FE +FE +82 +FE +FA +FE +FE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F066 +ENCODING 127078 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +FE +FE +FE +FE +82 +FE +FA +FE +EE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F067 +ENCODING 127079 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +FE +FE +FE +FE +82 +FE +BA +FE +FE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F068 +ENCODING 127080 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +FE +FE +FE +FE +82 +FE +BA +FE +EE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F069 +ENCODING 127081 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +FE +FE +FE +FE +82 +FE +BA +FE +BA +FE +BA +FE +ENDCHAR +STARTCHAR uni01F06A +ENCODING 127082 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +EE +FE +FE +FE +82 +FE +FE +FE +FE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F06B +ENCODING 127083 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +EE +FE +FE +FE +82 +FE +FE +FE +EE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F06C +ENCODING 127084 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +EE +FE +FE +FE +82 +FE +FA +FE +FE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F06D +ENCODING 127085 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +EE +FE +FE +FE +82 +FE +FA +FE +EE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F06E +ENCODING 127086 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +EE +FE +FE +FE +82 +FE +BA +FE +FE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F06F +ENCODING 127087 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +EE +FE +FE +FE +82 +FE +BA +FE +EE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F070 +ENCODING 127088 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FE +FE +EE +FE +FE +FE +82 +FE +BA +FE +BA +FE +BA +FE +ENDCHAR +STARTCHAR uni01F071 +ENCODING 127089 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +FE +FE +BE +FE +82 +FE +FE +FE +FE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F072 +ENCODING 127090 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +FE +FE +BE +FE +82 +FE +FE +FE +EE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F073 +ENCODING 127091 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +FE +FE +BE +FE +82 +FE +FA +FE +FE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F074 +ENCODING 127092 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +FE +FE +BE +FE +82 +FE +FA +FE +EE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F075 +ENCODING 127093 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +FE +FE +BE +FE +82 +FE +BA +FE +FE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F076 +ENCODING 127094 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +FE +FE +BE +FE +82 +FE +BA +FE +EE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F077 +ENCODING 127095 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +FE +FE +BE +FE +82 +FE +BA +FE +BA +FE +BA +FE +ENDCHAR +STARTCHAR uni01F078 +ENCODING 127096 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +EE +FE +BE +FE +82 +FE +FE +FE +FE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F079 +ENCODING 127097 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +EE +FE +BE +FE +82 +FE +FE +FE +EE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F07A +ENCODING 127098 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +EE +FE +BE +FE +82 +FE +FA +FE +FE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F07B +ENCODING 127099 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +EE +FE +BE +FE +82 +FE +FA +FE +EE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F07C +ENCODING 127100 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +EE +FE +BE +FE +82 +FE +BA +FE +FE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F07D +ENCODING 127101 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +EE +FE +BE +FE +82 +FE +BA +FE +EE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F07E +ENCODING 127102 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +FA +FE +EE +FE +BE +FE +82 +FE +BA +FE +BA +FE +BA +FE +ENDCHAR +STARTCHAR uni01F07F +ENCODING 127103 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +FE +FE +BA +FE +82 +FE +FE +FE +FE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F080 +ENCODING 127104 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +FE +FE +BA +FE +82 +FE +FE +FE +EE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F081 +ENCODING 127105 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +FE +FE +BA +FE +82 +FE +FA +FE +FE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F082 +ENCODING 127106 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +FE +FE +BA +FE +82 +FE +FA +FE +EE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F083 +ENCODING 127107 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +FE +FE +BA +FE +82 +FE +BA +FE +FE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F084 +ENCODING 127108 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +FE +FE +BA +FE +82 +FE +BA +FE +EE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F085 +ENCODING 127109 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +FE +FE +BA +FE +82 +FE +BA +FE +BA +FE +BA +FE +ENDCHAR +STARTCHAR uni01F086 +ENCODING 127110 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +EE +FE +BA +FE +82 +FE +FE +FE +FE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F087 +ENCODING 127111 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +EE +FE +BA +FE +82 +FE +FE +FE +EE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F088 +ENCODING 127112 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +EE +FE +BA +FE +82 +FE +FA +FE +FE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F089 +ENCODING 127113 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +EE +FE +BA +FE +82 +FE +FA +FE +EE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F08A +ENCODING 127114 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +EE +FE +BA +FE +82 +FE +BA +FE +FE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F08B +ENCODING 127115 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +EE +FE +BA +FE +82 +FE +BA +FE +EE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F08C +ENCODING 127116 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +EE +FE +BA +FE +82 +FE +BA +FE +BA +FE +BA +FE +ENDCHAR +STARTCHAR uni01F08D +ENCODING 127117 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +BA +FE +BA +FE +82 +FE +FE +FE +FE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F08E +ENCODING 127118 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +BA +FE +BA +FE +82 +FE +FE +FE +EE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F08F +ENCODING 127119 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +BA +FE +BA +FE +82 +FE +FA +FE +FE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F090 +ENCODING 127120 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +BA +FE +BA +FE +82 +FE +FA +FE +EE +FE +BE +FE +ENDCHAR +STARTCHAR uni01F091 +ENCODING 127121 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +BA +FE +BA +FE +82 +FE +BA +FE +FE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F092 +ENCODING 127122 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +BA +FE +BA +FE +82 +FE +BA +FE +EE +FE +BA +FE +ENDCHAR +STARTCHAR uni01F093 +ENCODING 127123 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 1 -1 +BITMAP +FE +BA +FE +BA +FE +BA +FE +82 +FE +BA +FE +BA +FE +BA +FE +ENDCHAR +STARTCHAR uni01F0A0 +ENCODING 127136 +BBX 11 16 2 -2 +BITMAP +7FC0 +AAA0 +D560 +AAA0 +D560 +AAA0 +D560 +AAA0 +D560 +AAA0 +D560 +AAA0 +D560 +AAA0 +D560 +7FC0 +ENDCHAR +STARTCHAR uni01F0A1 +ENCODING 127137 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8C20 +9220 +9E20 +9220 +9220 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0A2 +ENCODING 127138 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9C20 +8220 +8C20 +9020 +9E20 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0A3 +ENCODING 127139 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9C20 +8220 +8C20 +8220 +9C20 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0A4 +ENCODING 127140 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9220 +9220 +9E20 +8220 +8220 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0A5 +ENCODING 127141 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9E20 +9020 +9C20 +8220 +9C20 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0A6 +ENCODING 127142 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8E20 +9020 +9C20 +9220 +8C20 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0A7 +ENCODING 127143 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9E20 +8220 +8420 +8820 +8820 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0A8 +ENCODING 127144 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8C20 +9220 +8C20 +9220 +8C20 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0A9 +ENCODING 127145 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8C20 +9220 +8E20 +8220 +9C20 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0AA +ENCODING 127146 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9120 +B2A0 +92A0 +92A0 +B920 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0AB +ENCODING 127147 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9F20 +8420 +8420 +8420 +9820 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0AC +ENCODING 127148 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8E20 +9020 +9020 +9020 +8E20 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0AD +ENCODING 127149 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8E20 +9120 +9520 +9220 +8D20 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0AE +ENCODING 127150 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9220 +9420 +9820 +9420 +9220 +8020 +8420 +8E20 +9F20 +9F20 +8420 +8E20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0B1 +ENCODING 127153 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8C20 +9220 +9E20 +9220 +9220 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0B2 +ENCODING 127154 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9C20 +8220 +8C20 +9020 +9E20 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0B3 +ENCODING 127155 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9C20 +8220 +8C20 +8220 +9C20 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0B4 +ENCODING 127156 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9220 +9220 +9E20 +8220 +8220 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0B5 +ENCODING 127157 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9E20 +9020 +9C20 +8220 +9C20 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0B6 +ENCODING 127158 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8E20 +9020 +9C20 +9220 +8C20 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0B7 +ENCODING 127159 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9E20 +8220 +8420 +8820 +8820 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0B8 +ENCODING 127160 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8C20 +9220 +8C20 +9220 +8C20 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0B9 +ENCODING 127161 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8C20 +9220 +8E20 +8220 +9C20 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0BA +ENCODING 127162 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9120 +B2A0 +92A0 +92A0 +B920 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0BB +ENCODING 127163 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9F20 +8420 +8420 +8420 +9820 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0BC +ENCODING 127164 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8E20 +9020 +9020 +9020 +8E20 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0BD +ENCODING 127165 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8E20 +9120 +9520 +9220 +8D20 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0BE +ENCODING 127166 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9220 +9420 +9820 +9420 +9220 +8020 +9B20 +A4A0 +A0A0 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0BF +ENCODING 127167 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +AAA0 +AAA0 +BFA0 +A0A0 +BBA0 +BAA0 +BAA0 +A6A0 +BEA0 +AAA0 +AAA0 +AAA0 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0C1 +ENCODING 127169 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8C20 +9220 +9E20 +9220 +9220 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0C2 +ENCODING 127170 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9C20 +8220 +8C20 +9020 +9E20 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0C3 +ENCODING 127171 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9C20 +8220 +8C20 +8220 +9C20 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0C4 +ENCODING 127172 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9220 +9220 +9E20 +8220 +8220 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0C5 +ENCODING 127173 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9E20 +9020 +9C20 +8220 +9C20 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0C6 +ENCODING 127174 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8E20 +9020 +9C20 +9220 +8C20 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0C7 +ENCODING 127175 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9E20 +8220 +8420 +8820 +8820 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0C8 +ENCODING 127176 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8C20 +9220 +8C20 +9220 +8C20 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0C9 +ENCODING 127177 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8C20 +9220 +8E20 +8220 +9C20 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0CA +ENCODING 127178 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9120 +B2A0 +92A0 +92A0 +B920 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0CB +ENCODING 127179 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9F20 +8420 +8420 +8420 +9820 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0CC +ENCODING 127180 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8E20 +9020 +9020 +9020 +8E20 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0CD +ENCODING 127181 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8E20 +9120 +9520 +9220 +8D20 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0CE +ENCODING 127182 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9220 +9420 +9820 +9420 +9220 +8020 +8420 +8A20 +9120 +9120 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0CF +ENCODING 127183 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +9F20 +8420 +8420 +8420 +9820 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0D1 +ENCODING 127185 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8C20 +9220 +9E20 +9220 +9220 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0D2 +ENCODING 127186 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9C20 +8220 +8C20 +9020 +9E20 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0D3 +ENCODING 127187 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9C20 +8220 +8C20 +8220 +9C20 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0D4 +ENCODING 127188 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9220 +9220 +9E20 +8220 +8220 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0D5 +ENCODING 127189 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9E20 +9020 +9C20 +8220 +9C20 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0D6 +ENCODING 127190 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8E20 +9020 +9C20 +9220 +8C20 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0D7 +ENCODING 127191 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9E20 +8220 +8420 +8820 +8820 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0D8 +ENCODING 127192 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8C20 +9220 +8C20 +9220 +8C20 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0D9 +ENCODING 127193 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8C20 +9220 +8E20 +8220 +9C20 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0DA +ENCODING 127194 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9120 +B2A0 +92A0 +92A0 +B920 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0DB +ENCODING 127195 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9F20 +8420 +8420 +8420 +9820 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0DC +ENCODING 127196 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8E20 +9020 +9020 +9020 +8E20 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0DD +ENCODING 127197 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8E20 +9120 +9520 +9220 +8D20 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0DE +ENCODING 127198 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9220 +9420 +9820 +9420 +9220 +8020 +8E20 +8E20 +8420 +BFA0 +B5A0 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0DF +ENCODING 127199 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +BFA0 +BFA0 +BFA0 +A0A0 +BBA0 +BBA0 +BBA0 +A7A0 +BFA0 +BFA0 +BFA0 +BFA0 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0E0 +ENCODING 127200 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +AAA0 +AAA0 +9120 +AAA0 +AAA0 +8020 +8020 +8A20 +8A20 +8A20 +8A20 +8A20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0E1 +ENCODING 127201 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +8420 +8420 +8420 +8420 +8420 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0E2 +ENCODING 127202 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +8A20 +8A20 +8A20 +8A20 +8A20 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0E3 +ENCODING 127203 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +9520 +9520 +9520 +9520 +9520 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0E4 +ENCODING 127204 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +9520 +9520 +9520 +9520 +9220 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0E5 +ENCODING 127205 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +8A20 +8A20 +8A20 +8A20 +8420 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0E6 +ENCODING 127206 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +9520 +9520 +9520 +9520 +8920 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0E7 +ENCODING 127207 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +AAA0 +AAA0 +AAA0 +AAA0 +92A0 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0E8 +ENCODING 127208 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9520 +9520 +9520 +9520 +8920 +8020 +8020 +8A20 +8A20 +8A20 +8A20 +8A20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0E9 +ENCODING 127209 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +9520 +9520 +9220 +9520 +9520 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0EA +ENCODING 127210 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +8A20 +8A20 +8420 +8A20 +8A20 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0EB +ENCODING 127211 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +9520 +9520 +8920 +9520 +9520 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0EC +ENCODING 127212 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +AAA0 +AAA0 +92A0 +AAA0 +AAA0 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0ED +ENCODING 127213 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9520 +9520 +8920 +9520 +9520 +8020 +8020 +8A20 +8A20 +8A20 +8A20 +8A20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0EE +ENCODING 127214 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9520 +9520 +8920 +9520 +9520 +8020 +8020 +8A20 +8A20 +8A20 +8A20 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0EF +ENCODING 127215 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +AAA0 +AAA0 +92A0 +AAA0 +A920 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0F0 +ENCODING 127216 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +AAA0 +AAA0 +92A0 +AAA0 +A920 +8020 +8020 +8420 +8420 +8420 +8420 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0F1 +ENCODING 127217 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +AAA0 +AAA0 +92A0 +AAA0 +A920 +8020 +8020 +8A20 +8A20 +8A20 +8A20 +8A20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0F2 +ENCODING 127218 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +AAA0 +AAA0 +92A0 +AAA0 +A920 +8020 +8020 +9520 +9520 +9520 +9520 +9520 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0F3 +ENCODING 127219 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +9520 +9520 +8920 +9520 +9520 +8020 +8020 +8A20 +8A20 +8420 +8A20 +8A20 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0F4 +ENCODING 127220 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +8020 +8020 +8020 +AAA0 +AAA0 +9120 +AAA0 +AAA0 +8020 +8020 +8020 +8020 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F0F5 +ENCODING 127221 +BBX 11 16 2 -2 +BITMAP +7FC0 +8020 +AAA0 +AAA0 +9120 +AAA0 +AAA0 +8020 +8020 +8420 +8420 +8420 +8420 +8420 +8020 +7FC0 +ENDCHAR +STARTCHAR uni01F100 +ENCODING 127232 +BBX 8 10 4 0 +BITMAP +30 +48 +84 +84 +84 +84 +84 +84 +48 +31 +ENDCHAR +STARTCHAR uni01F101 +ENCODING 127233 +BBX 9 12 4 -2 +BITMAP +3000 +4800 +8400 +8400 +8400 +8400 +8400 +8400 +4980 +3080 +0080 +0100 +ENDCHAR +STARTCHAR uni01F102 +ENCODING 127234 +BBX 8 12 5 -2 +BITMAP +20 +60 +A0 +20 +20 +20 +20 +20 +23 +F9 +01 +02 +ENDCHAR +STARTCHAR uni01F103 +ENCODING 127235 +BBX 9 12 4 -2 +BITMAP +7800 +8400 +8400 +0400 +1800 +2000 +4000 +8000 +8180 +FC80 +0080 +0100 +ENDCHAR +STARTCHAR uni01F104 +ENCODING 127236 +BBX 9 12 4 -2 +BITMAP +7800 +8400 +8400 +0400 +3800 +0400 +0400 +8400 +8580 +7880 +0080 +0100 +ENDCHAR +STARTCHAR uni01F105 +ENCODING 127237 +BBX 9 12 4 -2 +BITMAP +0800 +1800 +2800 +4800 +8800 +8800 +FC00 +0800 +0980 +0880 +0080 +0100 +ENDCHAR +STARTCHAR uni01F106 +ENCODING 127238 +BBX 9 12 4 -2 +BITMAP +FC00 +8000 +8000 +8000 +F800 +0400 +0400 +0400 +8580 +7880 +0080 +0100 +ENDCHAR +STARTCHAR uni01F107 +ENCODING 127239 +BBX 9 12 4 -2 +BITMAP +3800 +4000 +8000 +8000 +F800 +8400 +8400 +8400 +8580 +7880 +0080 +0100 +ENDCHAR +STARTCHAR uni01F108 +ENCODING 127240 +BBX 9 12 4 -2 +BITMAP +FC00 +0400 +0400 +0800 +0800 +0800 +1000 +1000 +1180 +1080 +0080 +0100 +ENDCHAR +STARTCHAR uni01F109 +ENCODING 127241 +BBX 9 12 4 -2 +BITMAP +7800 +8400 +8400 +8400 +7800 +8400 +8400 +8400 +8580 +7880 +0080 +0100 +ENDCHAR +STARTCHAR uni01F10A +ENCODING 127242 +BBX 9 12 4 -2 +BITMAP +7800 +8400 +8400 +8400 +7C00 +0400 +0400 +0400 +0980 +7080 +0080 +0100 +ENDCHAR +STARTCHAR uni01F10B +ENCODING 127243 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4104 +4284 +8442 +8442 +8442 +8442 +8442 +4284 +4104 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F10C +ENCODING 127244 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7EFC +7D7C +FBBE +FBBE +FBBE +FBBE +FBBE +7D7C +7EFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F110 +ENCODING 127248 +BBX 14 12 1 0 +BITMAP +2010 +4308 +4488 +8484 +8844 +8844 +8FC4 +8844 +8844 +4848 +4848 +2010 +ENDCHAR +STARTCHAR uni01F111 +ENCODING 127249 +BBX 14 12 1 0 +BITMAP +2010 +4F88 +4848 +8844 +8844 +8F84 +8844 +8844 +8844 +4848 +4F88 +2010 +ENDCHAR +STARTCHAR uni01F112 +ENCODING 127250 +BBX 14 12 1 0 +BITMAP +2010 +4788 +4848 +8844 +8804 +8804 +8804 +8804 +8844 +4848 +4788 +2010 +ENDCHAR +STARTCHAR uni01F113 +ENCODING 127251 +BBX 14 12 1 0 +BITMAP +2010 +4F08 +4888 +8844 +8844 +8844 +8844 +8844 +8844 +4888 +4F08 +2010 +ENDCHAR +STARTCHAR uni01F114 +ENCODING 127252 +BBX 14 12 1 0 +BITMAP +2010 +4FC8 +4808 +8804 +8804 +8F84 +8804 +8804 +8804 +4808 +4FC8 +2010 +ENDCHAR +STARTCHAR uni01F115 +ENCODING 127253 +BBX 14 12 1 0 +BITMAP +2010 +4FC8 +4808 +8804 +8804 +8F84 +8804 +8804 +8804 +4808 +4808 +2010 +ENDCHAR +STARTCHAR uni01F116 +ENCODING 127254 +BBX 14 12 1 0 +BITMAP +2010 +4788 +4848 +8844 +8804 +8804 +89C4 +8844 +8844 +48C8 +4748 +2010 +ENDCHAR +STARTCHAR uni01F117 +ENCODING 127255 +BBX 14 12 1 0 +BITMAP +2010 +4848 +4848 +8844 +8844 +8FC4 +8844 +8844 +8844 +4848 +4848 +2010 +ENDCHAR +STARTCHAR uni01F118 +ENCODING 127256 +BBX 13 12 2 0 +BITMAP +2020 +4F90 +4210 +8208 +8208 +8208 +8208 +8208 +8208 +4210 +4F90 +2020 +ENDCHAR +STARTCHAR uni01F119 +ENCODING 127257 +BBX 15 12 1 0 +BITMAP +2008 +43E4 +4084 +8082 +8082 +8082 +8082 +8082 +8882 +4884 +4704 +2008 +ENDCHAR +STARTCHAR uni01F11A +ENCODING 127258 +BBX 14 12 1 0 +BITMAP +2010 +4848 +4888 +8904 +8A04 +8C04 +8C04 +8A04 +8904 +4888 +4848 +2010 +ENDCHAR +STARTCHAR uni01F11B +ENCODING 127259 +BBX 14 12 1 0 +BITMAP +2010 +4808 +4808 +8804 +8804 +8804 +8804 +8804 +8804 +4808 +4FC8 +2010 +ENDCHAR +STARTCHAR uni01F11C +ENCODING 127260 +BBX 14 12 1 0 +BITMAP +2010 +4848 +4848 +8CC4 +8CC4 +8B44 +8B44 +8844 +8844 +4848 +4848 +2010 +ENDCHAR +STARTCHAR uni01F11D +ENCODING 127261 +BBX 14 12 1 0 +BITMAP +2010 +4848 +4C48 +8C44 +8A44 +8A44 +8944 +8944 +88C4 +48C8 +4848 +2010 +ENDCHAR +STARTCHAR uni01F11E +ENCODING 127262 +BBX 14 12 1 0 +BITMAP +2010 +4788 +4848 +8844 +8844 +8844 +8844 +8844 +8844 +4848 +4788 +2010 +ENDCHAR +STARTCHAR uni01F11F +ENCODING 127263 +BBX 14 12 1 0 +BITMAP +2010 +4F88 +4848 +8844 +8844 +8F84 +8804 +8804 +8804 +4808 +4808 +2010 +ENDCHAR +STARTCHAR uni01F120 +ENCODING 127264 +BBX 15 12 1 0 +BITMAP +2008 +4784 +4844 +8842 +8842 +8842 +8842 +8842 +8B42 +4CC4 +4784 +2068 +ENDCHAR +STARTCHAR uni01F121 +ENCODING 127265 +BBX 14 12 1 0 +BITMAP +2010 +4F88 +4848 +8844 +8844 +8F84 +8904 +8884 +8884 +4848 +4848 +2010 +ENDCHAR +STARTCHAR uni01F122 +ENCODING 127266 +BBX 14 12 1 0 +BITMAP +2010 +4788 +4848 +8844 +8804 +8604 +8184 +8044 +8844 +4848 +4788 +2010 +ENDCHAR +STARTCHAR uni01F123 +ENCODING 127267 +BBX 15 12 1 0 +BITMAP +2008 +4FE4 +4104 +8102 +8102 +8102 +8102 +8102 +8102 +4104 +4104 +2008 +ENDCHAR +STARTCHAR uni01F124 +ENCODING 127268 +BBX 14 12 1 0 +BITMAP +2010 +4848 +4848 +8844 +8844 +8844 +8844 +8844 +8844 +4848 +4788 +2010 +ENDCHAR +STARTCHAR uni01F125 +ENCODING 127269 +BBX 15 12 1 0 +BITMAP +2008 +4824 +4824 +8822 +8442 +8442 +8442 +8282 +8282 +4104 +4104 +2008 +ENDCHAR +STARTCHAR uni01F126 +ENCODING 127270 +BBX 14 12 1 0 +BITMAP +2010 +4848 +4848 +8844 +8844 +8B44 +8B44 +8CC4 +8CC4 +4848 +4848 +2010 +ENDCHAR +STARTCHAR uni01F127 +ENCODING 127271 +BBX 14 12 1 0 +BITMAP +2010 +4848 +4848 +8484 +8484 +8304 +8304 +8484 +8484 +4848 +4848 +2010 +ENDCHAR +STARTCHAR uni01F128 +ENCODING 127272 +BBX 15 12 1 0 +BITMAP +2008 +4824 +4824 +8442 +8442 +8282 +8102 +8102 +8102 +4104 +4104 +2008 +ENDCHAR +STARTCHAR uni01F129 +ENCODING 127273 +BBX 14 12 1 0 +BITMAP +2010 +4FC8 +4048 +8044 +8084 +8104 +8204 +8404 +8804 +4808 +4FC8 +2010 +ENDCHAR +STARTCHAR uni01F12A +ENCODING 127274 +BBX 14 12 1 0 +BITMAP +2010 +4788 +8844 +8844 +8804 +8604 +8184 +8044 +8844 +8844 +4788 +2010 +ENDCHAR +STARTCHAR uni01F12B +ENCODING 127275 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +41C4 +4224 +8222 +8402 +8402 +8402 +8882 +4884 +4704 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F12C +ENCODING 127276 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +43C4 +4224 +8222 +8442 +8782 +8502 +8902 +4884 +4884 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F12D +ENCODING 127277 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4004 +4CC4 +92A2 +9292 +9092 +9292 +92A2 +4CC4 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F12E +ENCODING 127278 +BBX 14 11 1 1 +BITMAP +0780 +3870 +4008 +5108 +9164 +9524 +9B44 +5168 +4008 +3870 +0780 +ENDCHAR +STARTCHAR uni01F12F +ENCODING 127279 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 10 0 0 +BITMAP +3C +42 +99 +A5 +85 +85 +A5 +99 +42 +3C +ENDCHAR +STARTCHAR uni01F130 +ENCODING 127280 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8181 +8241 +8241 +8421 +8421 +87E1 +8421 +8421 +8421 +8421 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F131 +ENCODING 127281 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +87C1 +8421 +8421 +8421 +87C1 +8421 +8421 +8421 +8421 +87C1 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F132 +ENCODING 127282 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +83C1 +8421 +8421 +8401 +8401 +8401 +8401 +8421 +8421 +83C1 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F133 +ENCODING 127283 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8781 +8441 +8421 +8421 +8421 +8421 +8421 +8421 +8441 +8781 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F134 +ENCODING 127284 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +87E1 +8401 +8401 +8401 +87C1 +8401 +8401 +8401 +8401 +87E1 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F135 +ENCODING 127285 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +87E1 +8401 +8401 +8401 +87C1 +8401 +8401 +8401 +8401 +8401 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F136 +ENCODING 127286 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +83C1 +8421 +8421 +8401 +8401 +84E1 +8421 +8421 +8461 +83A1 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F137 +ENCODING 127287 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8421 +8421 +8421 +8421 +87E1 +8421 +8421 +8421 +8421 +8421 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F138 +ENCODING 127288 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +83E1 +8081 +8081 +8081 +8081 +8081 +8081 +8081 +8081 +83E1 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F139 +ENCODING 127289 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +81F1 +8041 +8041 +8041 +8041 +8041 +8041 +8441 +8441 +8381 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F13A +ENCODING 127290 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8421 +8441 +8481 +8501 +8601 +8601 +8501 +8481 +8441 +8421 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F13B +ENCODING 127291 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8401 +8401 +8401 +8401 +8401 +8401 +8401 +8401 +8401 +87E1 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F13C +ENCODING 127292 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8421 +8421 +8661 +8661 +85A1 +85A1 +8421 +8421 +8421 +8421 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F13D +ENCODING 127293 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8421 +8621 +8621 +8521 +8521 +84A1 +84A1 +8461 +8461 +8421 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F13E +ENCODING 127294 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +83C1 +8421 +8421 +8421 +8421 +8421 +8421 +8421 +8421 +83C1 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F13F +ENCODING 127295 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +87C1 +8421 +8421 +8421 +87C1 +8401 +8401 +8401 +8401 +8401 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F140 +ENCODING 127296 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +83C1 +8421 +8421 +8421 +8421 +8421 +8421 +85A1 +8661 +83C1 +8031 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F141 +ENCODING 127297 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +87C1 +8421 +8421 +8421 +87C1 +8481 +8441 +8441 +8421 +8421 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F142 +ENCODING 127298 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +83C1 +8421 +8421 +8401 +8301 +80C1 +8021 +8421 +8421 +83C1 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F143 +ENCODING 127299 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +87F1 +8081 +8081 +8081 +8081 +8081 +8081 +8081 +8081 +8081 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F144 +ENCODING 127300 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8421 +8421 +8421 +8421 +8421 +8421 +8421 +8421 +8421 +83C1 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F145 +ENCODING 127301 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8411 +8411 +8411 +8221 +8221 +8221 +8141 +8141 +8081 +8081 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F146 +ENCODING 127302 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8421 +8421 +8421 +8421 +85A1 +85A1 +8661 +8661 +8421 +8421 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F147 +ENCODING 127303 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8421 +8421 +8241 +8241 +8181 +8181 +8241 +8241 +8421 +8421 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F148 +ENCODING 127304 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8411 +8411 +8221 +8221 +8141 +8081 +8081 +8081 +8081 +8081 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F149 +ENCODING 127305 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +87E1 +8021 +8021 +8041 +8081 +8101 +8201 +8401 +8401 +87E1 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F14A +ENCODING 127306 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +A245 +A245 +A245 +BE29 +A229 +A229 +A211 +A211 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F14B +ENCODING 127307 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +A245 +A245 +B645 +B629 +AA29 +AA29 +A211 +A211 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F14C +ENCODING 127308 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +9C71 +A249 +A245 +9045 +8C45 +A245 +A249 +9C71 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F14D +ENCODING 127309 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +9C39 +A245 +A245 +9021 +8C19 +A245 +A245 +9C39 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F14E +ENCODING 127310 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +8001 +8001 +B329 +AAA9 +B329 +A211 +8001 +8001 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F14F +ENCODING 127311 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +A239 +A245 +AA45 +AA41 +B641 +B645 +A245 +A239 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F150 +ENCODING 127312 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7EFC +7D7C +FD7E +FBBE +FBBE +F83E +FBBE +7BBC +7BBC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F151 +ENCODING 127313 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +787C +7BBC +FBBE +FBBE +F87E +FBBE +FBBE +7BBC +787C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F152 +ENCODING 127314 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7C7C +7BBC +FBBE +FBFE +FBFE +FBFE +FBBE +7BBC +7C7C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F153 +ENCODING 127315 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +78FC +7B7C +FBBE +FBBE +FBBE +FBBE +FBBE +7B7C +78FC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F154 +ENCODING 127316 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +783C +7BFC +FBFE +FBFE +F87E +FBFE +FBFE +7BFC +783C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F155 +ENCODING 127317 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +783C +7BFC +FBFE +FBFE +F87E +FBFE +FBFE +7BFC +7BFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F156 +ENCODING 127318 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7C7C +7BBC +FBBE +FBFE +FA3E +FBBE +FBBE +7B3C +7CBC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F157 +ENCODING 127319 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7BBC +7BBC +FBBE +FBBE +F83E +FBBE +FBBE +7BBC +7BBC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F158 +ENCODING 127320 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +783C +7EFC +FEFE +FEFE +FEFE +FEFE +FEFE +7EFC +783C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F159 +ENCODING 127321 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7C1C +7F7C +FF7E +FF7E +FF7E +FF7E +FB7E +7B7C +7CFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F15A +ENCODING 127322 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7BBC +7BBC +FB7E +FAFE +F9FE +FAFE +FB7E +7BBC +7BBC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F15B +ENCODING 127323 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7BFC +7BFC +FBFE +FBFE +FBFE +FBFE +FBFE +7BFC +783C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F15C +ENCODING 127324 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7BBC +7BBC +F93E +F93E +FABE +FABE +FBBE +7BBC +7BBC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F15D +ENCODING 127325 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7FFC +7BBC +F9BE +F9BE +FABE +FABE +FB3E +7B3C +7BBC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F15E +ENCODING 127326 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7C7C +7BBC +FBBE +FBBE +FBBE +FBBE +FBBE +7BBC +7C7C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F15F +ENCODING 127327 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +787C +7BBC +FBBE +FBBE +F87E +FBFE +FBFE +7BFC +7BFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F160 +ENCODING 127328 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7C7C +7BBC +FBBE +FBBE +FBBE +FBBE +FABE +793C +7C7C +3F98 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F161 +ENCODING 127329 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +787C +7BBC +FBBE +FBBE +F87E +FAFE +FB7E +7B7C +7BBC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F162 +ENCODING 127330 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7C7C +7BBC +FBBE +FBFE +FC7E +FFBE +FBBE +7BBC +7C7C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F163 +ENCODING 127331 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +701C +7EFC +FEFE +FEFE +FEFE +FEFE +FEFE +7EFC +7EFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F164 +ENCODING 127332 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7BBC +7BBC +FBBE +FBBE +FBBE +FBBE +FBBE +7BBC +7C7C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F165 +ENCODING 127333 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +77DC +77DC +FBBE +FBBE +FBBE +FD7E +FD7E +7EFC +7EFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F166 +ENCODING 127334 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7BBC +7BBC +FBBE +FABE +FABE +F93E +F93E +7BBC +7BBC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F167 +ENCODING 127335 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +7BBC +7BBC +FD7E +FD7E +FEFE +FD7E +FD7E +7BBC +7BBC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F168 +ENCODING 127336 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +77DC +77DC +FBBE +FBBE +FD7E +FEFE +FEFE +7EFC +7EFC +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F169 +ENCODING 127337 +BBX 15 15 0 -1 +BITMAP +07C0 +1FF0 +3FF8 +783C +7FBC +FFBE +FF7E +FEFE +FDFE +FBFE +7BFC +783C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F16A +ENCODING 127338 +BBX 11 7 2 3 +BITMAP +89C0 +8A20 +DA00 +DA00 +AA00 +AA20 +89C0 +ENDCHAR +STARTCHAR uni01F16B +ENCODING 127339 +BBX 11 7 2 3 +BITMAP +8B80 +8A40 +DA20 +DA20 +AA20 +AA40 +8B80 +ENDCHAR +STARTCHAR uni01F170 +ENCODING 127344 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FE7F +FDBF +FDBF +FBDF +FBDF +F81F +FBDF +FBDF +FBDF +FBDF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F171 +ENCODING 127345 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +F83F +FBDF +FBDF +FBDF +F83F +FBDF +FBDF +FBDF +FBDF +F83F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F172 +ENCODING 127346 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FC3F +FBDF +FBDF +FBFF +FBFF +FBFF +FBFF +FBDF +FBDF +FC3F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F173 +ENCODING 127347 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +F87F +FBBF +FBDF +FBDF +FBDF +FBDF +FBDF +FBDF +FBBF +F87F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F174 +ENCODING 127348 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +F81F +FBFF +FBFF +FBFF +F83F +FBFF +FBFF +FBFF +FBFF +F81F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F175 +ENCODING 127349 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +F81F +FBFF +FBFF +FBFF +F83F +FBFF +FBFF +FBFF +FBFF +FBFF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F176 +ENCODING 127350 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FC3F +FBDF +FBDF +FBFF +FBFF +FB1F +FBDF +FBDF +FB9F +FC5F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F177 +ENCODING 127351 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FBDF +FBDF +FBDF +FBDF +F81F +FBDF +FBDF +FBDF +FBDF +FBDF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F178 +ENCODING 127352 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FC1F +FF7F +FF7F +FF7F +FF7F +FF7F +FF7F +FF7F +FF7F +FC1F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F179 +ENCODING 127353 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FE0F +FFBF +FFBF +FFBF +FFBF +FFBF +FFBF +FBBF +FBBF +FC7F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F17A +ENCODING 127354 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FBDF +FBBF +FB7F +FAFF +F9FF +F9FF +FAFF +FB7F +FBBF +FBDF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F17B +ENCODING 127355 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FBFF +FBFF +FBFF +FBFF +FBFF +FBFF +FBFF +FBFF +FBFF +F81F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F17C +ENCODING 127356 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FBDF +FBDF +F99F +F99F +FA5F +FA5F +FBDF +FBDF +FBDF +FBDF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F17D +ENCODING 127357 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FBDF +F9DF +F9DF +FADF +FADF +FB5F +FB5F +FB9F +FB9F +FBDF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F17E +ENCODING 127358 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FC3F +FBDF +FBDF +FBDF +FBDF +FBDF +FBDF +FBDF +FBDF +FC3F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F17F +ENCODING 127359 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +F83F +FBDF +FBDF +FBDF +F83F +FBFF +FBFF +FBFF +FBFF +FBFF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F180 +ENCODING 127360 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FC3F +FBDF +FBDF +FBDF +FBDF +FBDF +FBDF +FA5F +F99F +FC3F +FFCF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F181 +ENCODING 127361 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +F83F +FBDF +FBDF +FBDF +F83F +FB7F +FBBF +FBBF +FBDF +FBDF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F182 +ENCODING 127362 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FC3F +FBDF +FBDF +FBFF +FCFF +FF3F +FFDF +FBDF +FBDF +FC3F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F183 +ENCODING 127363 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +F80F +FF7F +FF7F +FF7F +FF7F +FF7F +FF7F +FF7F +FF7F +FF7F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F184 +ENCODING 127364 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FBDF +FBDF +FBDF +FBDF +FBDF +FBDF +FBDF +FBDF +FBDF +FC3F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F185 +ENCODING 127365 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FBEF +FBEF +FBEF +FDDF +FDDF +FDDF +FEBF +FEBF +FF7F +FF7F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F186 +ENCODING 127366 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FBDF +FBDF +FBDF +FBDF +FA5F +FA5F +F99F +F99F +FBDF +FBDF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F187 +ENCODING 127367 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FBDF +FBDF +FDBF +FDBF +FE7F +FE7F +FDBF +FDBF +FBDF +FBDF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F188 +ENCODING 127368 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FBEF +FBEF +FDDF +FDDF +FEBF +FF7F +FF7F +FF7F +FF7F +FF7F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F189 +ENCODING 127369 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +F81F +FFDF +FFDF +FFBF +FF7F +FEFF +FDFF +FBFF +FBFF +F81F +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F18A +ENCODING 127370 +BBX 16 16 0 -2 +BITMAP +FFFF +9FF9 +8FF1 +C823 +EBD7 +FBDF +FBDF +F83F +FBFF +FB1F +FB8F +EBC7 +CBE3 +8FF1 +9FF9 +FFFF +ENDCHAR +STARTCHAR uni01F18B +ENCODING 127371 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FFFF +C1C7 +F7BB +F7BB +F7BF +F7BF +F7BB +F7BB +C1C7 +FFFF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F18C +ENCODING 127372 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FFFF +C3C7 +DDBB +DDBB +DDBB +C383 +DFBB +DFBB +DFBB +FFFF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F18D +ENCODING 127373 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FFFF +E3C7 +DDBB +DDBB +EFBB +F383 +DDBB +DDBB +E3BB +FFFF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F18E +ENCODING 127374 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FFFF +E387 +DDBB +DDBB +DD87 +C1BB +DDBB +DDBB +DD87 +FFFF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F18F +ENCODING 127375 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FFFF +FFFF +DDC7 +DDBB +D5BB +D5BF +C9BF +C9BB +DDBB +DDC7 +FFFF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F190 +ENCODING 127376 +BBX 14 10 1 0 +BITMAP +F07C +8810 +8410 +8410 +8410 +8410 +8410 +8510 +8910 +F0E0 +ENDCHAR +STARTCHAR uni01F191 +ENCODING 127377 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +9C41 +A241 +A241 +A041 +A041 +A241 +A241 +9C7D +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F192 +ENCODING 127378 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +8001 +8001 +9225 +A555 +A555 +A555 +9227 +8001 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F193 +ENCODING 127379 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +8001 +8001 +B66D +A549 +B66D +A549 +A56D +8001 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F194 +ENCODING 127380 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +BE71 +8849 +8845 +8845 +8845 +8845 +8849 +BE71 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F195 +ENCODING 127381 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +8001 +CB45 +CA45 +EA55 +DB55 +DA6D +CA6D +CB45 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F196 +ENCODING 127382 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +A139 +B145 +B145 +A941 +A55D +A345 +A34D +A135 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F197 +ENCODING 127383 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +9C45 +A249 +A251 +A261 +A261 +A251 +A249 +9C45 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F198 +ENCODING 127384 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +9189 +AA55 +A251 +9249 +9249 +8A45 +AA55 +9189 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F199 +ENCODING 127385 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +A2E5 +A295 +A295 +A295 +A2E5 +A281 +A285 +9C85 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F19A +ENCODING 127386 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +A239 +A245 +A245 +9421 +9419 +9445 +8845 +8839 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F19B +ENCODING 127387 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +99C4 +A524 +8514 +9914 +8514 +8514 +A524 +99C4 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F19C +ENCODING 127388 +BBX 14 14 1 -1 +BITMAP +FFFC +8014 +B014 +8B34 +92D4 +A2D4 +BAB4 +8004 +9804 +A1AC +9A34 +8624 +B9A4 +FFFC +ENDCHAR +STARTCHAR uni01F19D +ENCODING 127389 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +9914 +A524 +8544 +8584 +8984 +9144 +A124 +BD14 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F19E +ENCODING 127390 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +A514 +A524 +A544 +BD84 +8584 +8544 +8524 +8514 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F19F +ENCODING 127391 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +9914 +A524 +A544 +9984 +A584 +A544 +A524 +9914 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F1A0 +ENCODING 127392 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +BC14 +A034 +A014 +B814 +8414 +8414 +8414 +A594 +99BC +8004 +FFFC +ENDCHAR +STARTCHAR uni01F1A1 +ENCODING 127393 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +BE24 +A264 +8224 +8424 +8424 +8824 +8824 +9324 +9374 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F1A2 +ENCODING 127394 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +E634 +910C +910C +910C +A214 +A294 +C424 +F73C +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F1A3 +ENCODING 127395 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +B334 +C4AC +C4AC +F4AC +CCB4 +CCA4 +CCA4 +B324 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F1A4 +ENCODING 127396 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +ACB4 +E36C +A36C +A36C +A574 +A964 +A964 +FEA4 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F1A5 +ENCODING 127397 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +8084 +8084 +8084 +8784 +8884 +8884 +8884 +8784 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F1A6 +ENCODING 127398 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +A4E4 +A514 +A514 +BD04 +A504 +A514 +A514 +A4E4 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F1A7 +ENCODING 127399 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +AB34 +AAAC +AAAC +BAAC +AAB4 +AAB4 +AAAC +AB2C +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F1A8 +ENCODING 127400 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +A484 +A484 +BCB4 +A484 +A484 +8004 +BB9C +A624 +BB94 +AA0C +A7B4 +FFFC +ENDCHAR +STARTCHAR uni01F1A9 +ENCODING 127401 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +A4DC +AB24 +AA94 +AA4C +B5F4 +8004 +ACDC +A924 +AC94 +A84C +BDF4 +FFFC +ENDCHAR +STARTCHAR uni01F1AA +ENCODING 127402 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +B58C +CD8C +C58C +A754 +9554 +8D54 +CD24 +B524 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F1AB +ENCODING 127403 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +CAB4 +CAAC +CAAC +CBAC +CAAC +CAAC +CAAC +B2B4 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F1AC +ENCODING 127404 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +C534 +C6AC +C6AC +C6AC +AAAC +AAAC +AAAC +9134 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F1E6 +ENCODING 127462 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0181 +8240 +0241 +8420 +0421 +87E0 +0421 +8420 +0421 +8420 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1E7 +ENCODING 127463 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +07C1 +8420 +0421 +8420 +07C1 +8420 +0421 +8420 +0421 +87C0 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1E8 +ENCODING 127464 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +03C1 +8420 +0421 +8400 +0401 +8400 +0401 +8420 +0421 +83C0 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1E9 +ENCODING 127465 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0781 +8440 +0421 +8420 +0421 +8420 +0421 +8420 +0441 +8780 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1EA +ENCODING 127466 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +07E1 +8400 +0401 +8400 +07C1 +8400 +0401 +8400 +0401 +87E0 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1EB +ENCODING 127467 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +07E1 +8400 +0401 +8400 +07C1 +8400 +0401 +8400 +0401 +8400 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1EC +ENCODING 127468 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +03C1 +8420 +0421 +8400 +0401 +84E0 +0421 +8420 +0461 +83A0 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1ED +ENCODING 127469 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0421 +8420 +0421 +8420 +07E1 +8420 +0421 +8420 +0421 +8420 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1EE +ENCODING 127470 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +03E1 +8080 +0081 +8080 +0081 +8080 +0081 +8080 +0081 +83E0 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1EF +ENCODING 127471 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +01F1 +8040 +0041 +8040 +0041 +8040 +0041 +8440 +0441 +8380 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1F0 +ENCODING 127472 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0421 +8440 +0481 +8500 +0601 +8600 +0501 +8480 +0441 +8420 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1F1 +ENCODING 127473 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0401 +8400 +0401 +8400 +0401 +8400 +0401 +8400 +0401 +87E0 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1F2 +ENCODING 127474 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0421 +8420 +0661 +8660 +05A1 +85A0 +0421 +8420 +0421 +8420 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1F3 +ENCODING 127475 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0421 +8620 +0621 +8520 +0521 +84A0 +04A1 +8460 +0461 +8420 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1F4 +ENCODING 127476 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +03C1 +8420 +0421 +8420 +0421 +8420 +0421 +8420 +0421 +83C0 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1F5 +ENCODING 127477 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +07C1 +8420 +0421 +8420 +07C1 +8400 +0401 +8400 +0401 +8400 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1F6 +ENCODING 127478 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +03C1 +8420 +0421 +8420 +0421 +8420 +0421 +85A0 +0661 +83C0 +0031 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1F7 +ENCODING 127479 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +07C1 +8420 +0421 +8420 +07C1 +8480 +0441 +8440 +0421 +8420 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1F8 +ENCODING 127480 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +03C1 +8420 +0421 +8400 +0301 +80C0 +0021 +8420 +0421 +83C0 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1F9 +ENCODING 127481 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +07F1 +8080 +0081 +8080 +0081 +8080 +0081 +8080 +0081 +8080 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1FA +ENCODING 127482 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0421 +8420 +0421 +8420 +0421 +8420 +0421 +8420 +0421 +83C0 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1FB +ENCODING 127483 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0411 +8410 +0411 +8220 +0221 +8220 +0141 +8140 +0081 +8080 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1FC +ENCODING 127484 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0421 +8420 +0421 +8420 +05A1 +85A0 +0661 +8660 +0421 +8420 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1FD +ENCODING 127485 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0421 +8420 +0241 +8240 +0181 +8180 +0241 +8240 +0421 +8420 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1FE +ENCODING 127486 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +0411 +8410 +0221 +8220 +0141 +8080 +0081 +8080 +0081 +8080 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F1FF +ENCODING 127487 +BBX 16 16 0 -2 +BITMAP +AAAA +0001 +8000 +07E1 +8020 +0021 +8040 +0081 +8100 +0201 +8400 +0401 +87E0 +0001 +8000 +5555 +ENDCHAR +STARTCHAR uni01F200 +ENCODING 127488 +BBX 15 16 0 -2 +BITMAP +8100 +5E00 +4400 +9F00 +8400 +AC00 +5200 +4D00 +0080 +0048 +0264 +01D2 +0056 +0090 +00D0 +0120 +ENDCHAR +STARTCHAR uni01F201 +ENCODING 127489 +BBX 15 14 1 -1 +BITMAP +FFFE +8002 +8002 +8E3A +B2CA +820A +820A +820A +820A +8E3A +B2CA +8002 +8002 +FFFE +ENDCHAR +STARTCHAR uni01F202 +ENCODING 127490 +BBX 12 14 2 -1 +BITMAP +FFF0 +8010 +8010 +8910 +8910 +BFD0 +8910 +8910 +8910 +8210 +8C10 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F210 +ENCODING 127504 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +80F1 +9F01 +8101 +9FF1 +8101 +8101 +BFF9 +8101 +8101 +8301 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F211 +ENCODING 127505 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8101 +9FF9 +9009 +A7D1 +8081 +8101 +BFF9 +8101 +8101 +8101 +8701 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F212 +ENCODING 127506 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +BFF9 +8291 +9291 +8A91 +8451 +8451 +8A21 +9161 +A091 +8109 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F213 +ENCODING 127507 +BBX 16 16 0 -2 +BITMAP +FFFF +8009 +8025 +8015 +8FD1 +8001 +9FF1 +8081 +8081 +8101 +8101 +8201 +8401 +8801 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F214 +ENCODING 127508 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +8FF1 +8001 +8001 +8001 +8001 +8001 +8001 +9FF9 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F215 +ENCODING 127509 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8101 +83E1 +8421 +8A41 +8181 +8681 +99F1 +8211 +8D21 +80C1 +9F01 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F216 +ENCODING 127510 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +88F9 +9E49 +9489 +BF31 +95A1 +9FF9 +9521 +9FF9 +9521 +9521 +A321 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F217 +ENCODING 127511 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +9FF1 +8101 +8101 +8101 +BFF9 +8101 +8281 +8281 +8441 +8821 +B019 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F218 +ENCODING 127512 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8101 +BFF9 +8001 +8441 +8821 +9451 +8441 +8281 +8101 +86C1 +9839 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F219 +ENCODING 127513 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8041 +BC41 +A5F1 +A551 +BD51 +A551 +A7F9 +BC41 +A4A1 +8111 +8209 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F21A +ENCODING 127514 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +9001 +9FF9 +AAA1 +8AA1 +BFF9 +8AA1 +8AA1 +BFF9 +8491 +9249 +A249 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F21B +ENCODING 127515 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8821 +AB21 +9CA1 +8821 +BF21 +88A1 +8C39 +9BE1 +A821 +8821 +8821 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F21C +ENCODING 127516 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8421 +8241 +9FF9 +8001 +8F51 +8951 +8F51 +8951 +8F51 +8911 +8B71 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F21D +ENCODING 127517 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8481 +8921 +91C1 +A491 +8BF9 +9909 +A9F1 +8B11 +8CA1 +88E1 +8B19 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F21E +ENCODING 127518 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +BFF9 +8101 +8FE1 +8921 +8FE1 +8921 +8921 +BFF9 +8821 +8821 +8861 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F21F +ENCODING 127519 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8419 +BF61 +9141 +8A41 +BF79 +8451 +BF51 +8451 +9551 +A491 +8D11 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F220 +ENCODING 127520 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +9001 +89F9 +BE49 +8449 +8849 +9A49 +AC49 +8A49 +8889 +8909 +8A31 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F221 +ENCODING 127521 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8441 +8479 +8A89 +9E51 +8421 +8A51 +9D8D +8021 +8A11 +9561 +9019 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F222 +ENCODING 127522 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8081 +8881 +8881 +8FF9 +9081 +A081 +87F1 +8081 +8081 +8081 +9FF9 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F223 +ENCODING 127523 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +BC39 +A5C1 +BD01 +A501 +BDF9 +A509 +A591 +BD51 +8121 +AA51 +A489 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F224 +ENCODING 127524 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8101 +BFF9 +8101 +8FF1 +8001 +8FF1 +8911 +8FF1 +8801 +9001 +A001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F225 +ENCODING 127525 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8081 +BC81 +A4F9 +A509 +A651 +A441 +A441 +BCA1 +80A1 +8111 +8209 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F226 +ENCODING 127526 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +9041 +8BF9 +8209 +A7F9 +9441 +89F1 +8951 +B1F1 +9151 +91F1 +9319 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F227 +ENCODING 127527 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +88F1 +8891 +BE91 +8919 +8A01 +8DF1 +9911 +A8A1 +8841 +88A1 +BB19 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F228 +ENCODING 127528 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8851 +8849 +BFF9 +8841 +8BF9 +8E49 +9BF9 +AA49 +8BF9 +8A49 +BA59 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F229 +ENCODING 127529 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8001 +8001 +8001 +8011 +BFF9 +8001 +8001 +8001 +8001 +8001 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F22A +ENCODING 127530 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8001 +8FF1 +8001 +8001 +8001 +87E1 +8001 +8001 +8001 +8001 +9FF9 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F22B +ENCODING 127531 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +9221 +8939 +8FC1 +8239 +BB91 +8AF9 +8A91 +8A91 +8DB1 +9401 +A3F9 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F22C +ENCODING 127532 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8201 +8201 +BFF9 +8201 +8401 +87F1 +8881 +8881 +9081 +A081 +8FF9 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F22D +ENCODING 127533 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8101 +8101 +9FF1 +9111 +9111 +9111 +9FF1 +9111 +8101 +8101 +8101 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F22E +ENCODING 127534 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8101 +8101 +BFF9 +8201 +8401 +87E1 +8C21 +9421 +A421 +87E1 +8421 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F22F +ENCODING 127535 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8881 +8899 +BEE1 +8889 +8AF9 +8C01 +98F9 +A889 +88F9 +8889 +B8F9 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F230 +ENCODING 127536 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8101 +9FF1 +8101 +8101 +BFF9 +8101 +8901 +89F1 +8901 +9501 +A3F9 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F231 +ENCODING 127537 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8401 +84FD +9F11 +8411 +8511 +8611 +8C11 +9411 +8411 +8411 +9C71 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F232 +ENCODING 127538 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8821 +BFF9 +8AB1 +9EF1 +AAB9 +8C71 +9FF1 +8A21 +BFF9 +A9B1 +B319 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F233 +ENCODING 127539 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8101 +9FF9 +9009 +A241 +8421 +9811 +87E1 +8101 +8101 +8101 +9FF9 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F234 +ENCODING 127540 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8101 +8281 +8441 +8821 +B7D9 +8001 +8FE1 +8821 +8821 +8FE1 +8821 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F235 +ENCODING 127541 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +A121 +97F9 +8121 +AFF9 +9881 +8FF9 +9489 +B6A9 +97E9 +9429 +9411 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F236 +ENCODING 127542 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8201 +BFF9 +8401 +87E1 +8C21 +97E1 +A421 +87E1 +8421 +8421 +8461 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F237 +ENCODING 127543 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +87F1 +8411 +8411 +87F1 +8411 +8411 +87F1 +8411 +8411 +8851 +9021 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F238 +ENCODING 127544 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8101 +8101 +9FF1 +9111 +9FF1 +9111 +9111 +9FF1 +9111 +8101 +8101 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F239 +ENCODING 127545 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8409 +BF89 +A4A9 +9F29 +8429 +9F29 +8429 +BFA9 +9109 +9109 +9F39 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F23A +ENCODING 127546 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +8911 +84A1 +9FF9 +9009 +97E9 +8421 +87E1 +8001 +8FF1 +8811 +8FF1 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F23B +ENCODING 127547 +BBX 16 16 0 -2 +BITMAP +FFFF +8001 +BEF9 +9409 +9409 +BE09 +AAF9 +B681 +A281 +BE81 +A289 +BE89 +A2F9 +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F240 +ENCODING 127552 +BBX 16 16 0 -2 +BITMAP +2004 +4002 +8101 +8101 +BFF9 +8381 +8541 +8541 +8921 +9111 +A7C9 +8101 +8101 +8001 +4002 +2004 +ENDCHAR +STARTCHAR uni01F241 +ENCODING 127553 +BBX 16 16 0 -2 +BITMAP +2004 +4002 +8001 +8FF1 +8001 +8001 +8001 +87E1 +8001 +8001 +8001 +8001 +9FF9 +8001 +4002 +2004 +ENDCHAR +STARTCHAR uni01F242 +ENCODING 127554 +BBX 16 16 0 -2 +BITMAP +2004 +4002 +8001 +8001 +8FF1 +8001 +8001 +8001 +8001 +8001 +8001 +9FF9 +8001 +8001 +4002 +2004 +ENDCHAR +STARTCHAR uni01F243 +ENCODING 127555 +BBX 16 16 0 -2 +BITMAP +2004 +4002 +8101 +9FF9 +9009 +A211 +8201 +BFD9 +8441 +8C01 +8381 +8261 +9C19 +8001 +4002 +2004 +ENDCHAR +STARTCHAR uni01F244 +ENCODING 127556 +BBX 16 16 0 -2 +BITMAP +2004 +4002 +8101 +8101 +81F1 +8101 +8FE1 +8821 +8821 +8FE1 +8001 +9491 +A249 +8001 +4002 +2004 +ENDCHAR +STARTCHAR uni01F245 +ENCODING 127557 +BBX 16 16 0 -2 +BITMAP +2004 +4002 +8801 +89F9 +BE21 +8821 +8A21 +8C21 +9821 +A821 +8821 +8821 +B8E1 +8001 +4002 +2004 +ENDCHAR +STARTCHAR uni01F246 +ENCODING 127558 +BBX 16 16 0 -2 +BITMAP +2004 +4002 +9101 +89F9 +8649 +9841 +88A1 +8B19 +8001 +8FF1 +8A51 +8A51 +9FF9 +8001 +4002 +2004 +ENDCHAR +STARTCHAR uni01F247 +ENCODING 127559 +BBX 16 16 0 -2 +BITMAP +2004 +4002 +BE49 +A551 +A7F9 +BC81 +A7F9 +A491 +B949 +A7F1 +A491 +A511 +AE71 +8001 +4002 +2004 +ENDCHAR +STARTCHAR uni01F248 +ENCODING 127560 +BBX 16 16 0 -2 +BITMAP +2004 +4002 +9F41 +9141 +9F79 +91D1 +9F51 +9151 +9F51 +9151 +8A21 +9151 +A189 +8001 +4002 +2004 +ENDCHAR +STARTCHAR uni01F250 +ENCODING 127568 +BBX 16 16 0 -2 +BITMAP +07E0 +1818 +29F4 +4912 +51F2 +A511 +89F1 +9801 +A9F9 +8821 +8BF9 +4922 +4862 +2004 +1818 +07E0 +ENDCHAR +STARTCHAR uni01F251 +ENCODING 127569 +BBX 16 16 0 -2 +BITMAP +07E0 +1818 +2004 +5FF2 +4022 +8F21 +8921 +8921 +8F21 +8921 +8021 +4022 +40E2 +2004 +1818 +07E0 +ENDCHAR +STARTCHAR uni01F260 +ENCODING 127584 +BBX 16 16 0 -2 +BITMAP +06E0 +1A18 +2204 +4200 +42FE +8281 +0081 +FEFF +9200 +92FF +9291 +52FE +5292 +1294 +1298 +02E0 +ENDCHAR +STARTCHAR uni01F261 +ENCODING 127585 +BBX 16 15 0 -2 +BITMAP +07E0 +1818 +366C +4A52 +5A5A +8241 +FE7F +2004 +FE7F +8241 +5A5A +4A52 +366C +1818 +07E0 +ENDCHAR +STARTCHAR uni01F262 +ENCODING 127586 +BBX 15 16 0 -2 +BITMAP +07C0 +1930 +27C8 +4924 +0000 +9FF2 +AFEA +A10A +EFEE +0000 +FFFE +8102 +9FF2 +5834 +66CC +1EF0 +ENDCHAR +STARTCHAR uni01F263 +ENCODING 127587 +BBX 15 15 0 -1 +BITMAP +0380 +1AB0 +2BA8 +5934 +BFFA +A92A +BBBA +9292 +BBBA +A92A +BFFA +5934 +2BA8 +1AB0 +0380 +ENDCHAR +STARTCHAR uni01F264 +ENCODING 127588 +BBX 16 16 0 -2 +BITMAP +0420 +1FF8 +0420 +7FFE +0000 +7E7E +8241 +FE7F +0810 +FFFF +0810 +7E7E +4242 +2244 +1248 +0E70 +ENDCHAR +STARTCHAR uni01F265 +ENCODING 127589 +BBX 15 15 0 -1 +BITMAP +0380 +1AB0 +2EE8 +682C +6BAC +EAAE +0AA0 +FABE +0AA0 +EAAE +6BAC +682C +2EE8 +1AB0 +0380 +ENDCHAR +STARTCHAR uni01F300 +ENCODING 127744 +BBX 9 15 3 -1 +BITMAP +2000 +4000 +4000 +DC00 +FF00 +E300 +C180 +C180 +C180 +6380 +7F80 +1D80 +0100 +0100 +0200 +ENDCHAR +STARTCHAR uni01F301 +ENCODING 127745 +BBX 16 12 0 0 +BITMAP +5555 +AAAA +5555 +AAAA +4444 +1111 +4444 +1111 +4040 +0404 +4040 +0404 +ENDCHAR +STARTCHAR uni01F302 +ENCODING 127746 +BBX 6 12 5 0 +BITMAP +60 +90 +10 +7C +7C +38 +38 +38 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01F303 +ENCODING 127747 +BBX 16 12 0 0 +BITMAP +FFFF +FFFF +EFFF +C7F7 +EFE3 +FFF7 +FFFF +FDFF +F8FF +FDFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F304 +ENCODING 127748 +BBX 16 12 0 0 +BITMAP +0240 +0810 +03C0 +1428 +0810 +2814 +0990 +2BD4 +77EE +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F305 +ENCODING 127749 +BBX 16 12 0 0 +BITMAP +0240 +0810 +03C0 +1428 +0810 +2814 +0810 +2814 +FFFF +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F306 +ENCODING 127750 +BBX 15 12 0 0 +BITMAP +8888 +2222 +8008 +2FE2 +8EE8 +2FE2 +8BA0 +0FEE +EBEA +EFEE +EEAA +EFEE +ENDCHAR +STARTCHAR uni01F307 +ENCODING 127751 +BBX 15 12 0 0 +BITMAP +8BA2 +2448 +8822 +2828 +8822 +2FE8 +8EE0 +0FEE +EBEA +AFAE +EBEA +EFEE +ENDCHAR +STARTCHAR uni01F308 +ENCODING 127752 +BBX 14 14 1 0 +BITMAP +007C +0180 +063C +08C0 +131C +2460 +299C +4A60 +528C +9530 +A540 +AA40 +AA80 +AA80 +ENDCHAR +STARTCHAR uni01F309 +ENCODING 127753 +BBX 16 16 0 -2 +BITMAP +FFFF +FFFF +FDFB +DFFF +FFBF +FFFF +F7F7 +FFFF +FFFF +FFFF +8001 +8C31 +9E79 +9E79 +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F30A +ENCODING 127754 +BBX 16 10 0 0 +BITMAP +00F0 +01F8 +03C8 +0780 +0F80 +1FC0 +3FF0 +FFFF +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F30B +ENCODING 127755 +BBX 16 12 0 0 +BITMAP +0040 +0200 +1088 +0420 +4082 +0340 +06E0 +0F70 +1FF8 +7FFE +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F30C +ENCODING 127756 +BBX 13 13 1 -1 +BITMAP +0090 +0238 +4090 +05C0 +0090 +1200 +0700 +0240 +4800 +1D00 +4810 +E200 +4800 +ENDCHAR +STARTCHAR uni01F30D +ENCODING 127757 +BBX 16 16 0 -2 +BITMAP +07E0 +1878 +22FC +41FE +423E +87F7 +CFE3 +EFC1 +C3C1 +C1A1 +8103 +4002 +4002 +21CC +1FF8 +07E0 +ENDCHAR +STARTCHAR uni01F30E +ENCODING 127758 +BBX 16 16 0 -2 +BITMAP +07E0 +1878 +2FAC +5FE6 +4FC2 +8D07 +840F +830F +83C7 +83C3 +81C1 +4182 +4082 +2004 +18B8 +07E0 +ENDCHAR +STARTCHAR uni01F30F +ENCODING 127759 +BBX 16 16 0 -2 +BITMAP +07E0 +1E18 +3FFC +7FF2 +7FF2 +F7F1 +E6E1 +C2A9 +C045 +A03D +807D +407A +4012 +3C84 +1FF8 +07E0 +ENDCHAR +STARTCHAR uni01F310 +ENCODING 127760 +BBX 15 15 0 -1 +BITMAP +07C0 +1BB0 +2548 +692C +5934 +97D2 +9112 +FFFE +9112 +97D2 +5934 +692C +2548 +1BB0 +07C0 +ENDCHAR +STARTCHAR uni01F311 +ENCODING 127761 +BBX 14 14 1 -1 +BITMAP +0780 +1FE0 +3FF0 +7FF8 +7FF8 +FFFC +FFFC +FFFC +FFFC +7FF8 +7FF8 +3FF0 +1FE0 +0780 +ENDCHAR +STARTCHAR uni01F312 +ENCODING 127762 +BBX 14 14 1 -1 +BITMAP +0780 +1E60 +3F10 +7F08 +7F88 +FF84 +FF84 +FF84 +FF84 +7F88 +7F08 +3F10 +1E60 +0780 +ENDCHAR +STARTCHAR uni01F313 +ENCODING 127763 +BBX 14 14 1 -1 +BITMAP +0780 +1E60 +3E10 +7E08 +7E08 +FE04 +FE04 +FE04 +FE04 +7E08 +7E08 +3E10 +1E60 +0780 +ENDCHAR +STARTCHAR uni01F314 +ENCODING 127764 +BBX 14 14 1 -1 +BITMAP +0780 +1E60 +3C10 +7C08 +7808 +F804 +F804 +F804 +F804 +7808 +7C08 +3C10 +1E60 +0780 +ENDCHAR +STARTCHAR uni01F315 +ENCODING 127765 +BBX 14 14 1 -1 +BITMAP +0780 +1860 +2010 +4008 +4008 +8004 +8004 +8004 +8004 +4008 +4008 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uni01F316 +ENCODING 127766 +BBX 14 14 1 -1 +BITMAP +0780 +19E0 +20F0 +40F8 +4078 +807C +807C +807C +807C +4078 +40F8 +20F0 +19E0 +0780 +ENDCHAR +STARTCHAR uni01F317 +ENCODING 127767 +BBX 14 14 1 -1 +BITMAP +0780 +19E0 +21F0 +41F8 +41F8 +81FC +81FC +81FC +81FC +41F8 +41F8 +21F0 +19E0 +0780 +ENDCHAR +STARTCHAR uni01F318 +ENCODING 127768 +BBX 14 14 1 -1 +BITMAP +0780 +19E0 +23F0 +43F8 +47F8 +87FC +87FC +87FC +87FC +47F8 +43F8 +23F0 +19E0 +0780 +ENDCHAR +STARTCHAR uni01F319 +ENCODING 127769 +BBX 13 13 2 -1 +BITMAP +00C0 +0060 +0050 +0050 +0048 +0088 +0088 +0108 +8610 +F810 +4020 +30C0 +0F00 +ENDCHAR +STARTCHAR uni01F31A +ENCODING 127770 +BBX 14 14 1 -1 +BITMAP +0780 +1FE0 +3FF0 +7FF8 +7FF8 +F7BC +FDFC +FCFC +F7BC +7878 +7FF8 +3FF0 +1FE0 +0780 +ENDCHAR +STARTCHAR uni01F31B +ENCODING 127771 +BBX 11 14 2 -1 +BITMAP +3C00 +C300 +3080 +0840 +0840 +0520 +0820 +0420 +0520 +0E40 +0840 +3080 +C300 +3C00 +ENDCHAR +STARTCHAR uni01F31C +ENCODING 127772 +BBX 11 14 2 -1 +BITMAP +0780 +1860 +2180 +4200 +4200 +9400 +8200 +8400 +9400 +4E00 +4200 +2180 +1860 +0780 +ENDCHAR +STARTCHAR uni01F31D +ENCODING 127773 +BBX 14 14 1 -1 +BITMAP +0780 +1860 +2010 +4008 +4008 +8844 +8104 +8304 +8844 +4788 +4008 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uni01F31E +ENCODING 127774 +BBX 14 14 1 -1 +BITMAP +0480 +0000 +2010 +0780 +0840 +94A4 +1020 +14A0 +9324 +0840 +0780 +2010 +0000 +0480 +ENDCHAR +STARTCHAR uni01F31F +ENCODING 127775 +BBX 15 14 0 -1 +BITMAP +2108 +1110 +0380 +0380 +3FF8 +0FE0 +07C0 +E7CE +0EE0 +1C70 +1830 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni01F320 +ENCODING 127776 +BBX 14 12 1 0 +BITMAP +0070 +0180 +0238 +00C0 +091C +1C60 +1C00 +FF80 +7F00 +3E00 +7700 +6300 +ENDCHAR +STARTCHAR uni01F321 +ENCODING 127777 +BBX 5 12 5 0 +BITMAP +20 +50 +50 +50 +50 +70 +70 +70 +F8 +F8 +F8 +70 +ENDCHAR +STARTCHAR uni01F322 +ENCODING 127778 +BBX 7 14 4 -1 +BITMAP +10 +10 +10 +38 +38 +38 +7C +7C +7C +FE +FE +FE +7C +38 +ENDCHAR +STARTCHAR uni01F323 +ENCODING 127779 +BBX 13 13 1 0 +BITMAP +0200 +0F80 +3060 +2020 +4010 +4010 +C018 +4010 +4010 +2020 +3060 +0F80 +0200 +ENDCHAR +STARTCHAR uni01F324 +ENCODING 127780 +BBX 14 13 1 0 +BITMAP +0200 +0F80 +3060 +2020 +4010 +4010 +C018 +41D0 +47F8 +2FFC +3FFC +0FFC +07F8 +ENDCHAR +STARTCHAR uni01F325 +ENCODING 127781 +BBX 15 13 0 0 +BITMAP +0200 +0F80 +3060 +2020 +4010 +41D0 +C7F8 +4FFC +7FFE +3FFE +1FFE +1FFE +0FFC +ENDCHAR +STARTCHAR uni01F326 +ENCODING 127782 +BBX 15 16 0 -2 +BITMAP +0200 +0F80 +3060 +2020 +4010 +41D0 +C7F8 +4FFC +7FFE +3FFE +1FFE +1FFE +0FFC +0000 +0924 +1248 +ENDCHAR +STARTCHAR uni01F327 +ENCODING 127783 +BBX 12 10 2 0 +BITMAP +0E00 +3FC0 +7FE0 +FFF0 +FFF0 +FFF0 +7FE0 +0000 +4920 +9240 +ENDCHAR +STARTCHAR uni01F328 +ENCODING 127784 +BBX 12 11 2 0 +BITMAP +0E00 +3FC0 +7FE0 +FFF0 +FFF0 +FFF0 +7FE0 +0000 +4920 +0000 +9240 +ENDCHAR +STARTCHAR uni01F329 +ENCODING 127785 +BBX 12 12 2 0 +BITMAP +0E00 +3FC0 +7FE0 +FFF0 +FFF0 +FFF0 +7FE0 +0200 +0400 +0F00 +0200 +0400 +ENDCHAR +STARTCHAR uni01F32A +ENCODING 127786 +BBX 12 12 2 0 +BITMAP +0E00 +3FC0 +7FE0 +FFF0 +FFF0 +FFF0 +7FE0 +0F00 +1C00 +0E00 +0300 +0100 +ENDCHAR +STARTCHAR uni01F32B +ENCODING 127787 +BBX 14 13 1 -1 +BITMAP +1C20 +23C0 +7880 +8700 +0384 +0478 +0F10 +10E0 +0000 +1C20 +23C0 +7880 +8700 +ENDCHAR +STARTCHAR uni01F32C +ENCODING 127788 +BBX 14 12 1 0 +BITMAP +E000 +1000 +1030 +4808 +0448 +0490 +1D08 +1064 +0784 +1088 +2044 +C018 +ENDCHAR +STARTCHAR uni01F32D +ENCODING 127789 +BBX 14 7 1 0 +BITMAP +7FF8 +FFFC +E01C +E01C +6018 +2010 +1FE0 +ENDCHAR +STARTCHAR uni01F32E +ENCODING 127790 +BBX 14 9 1 0 +BITMAP +0FE0 +1410 +2808 +7808 +7004 +F004 +F004 +6004 +3FFC +ENDCHAR +STARTCHAR uni01F32F +ENCODING 127791 +BBX 14 6 1 0 +BITMAP +7FF8 +E00C +F01C +EFEC +C00C +7FF8 +ENDCHAR +STARTCHAR uni01F330 +ENCODING 127792 +BBX 12 12 2 0 +BITMAP +0600 +0900 +1080 +2040 +4020 +4020 +8010 +E070 +9F90 +8010 +6060 +1F80 +ENDCHAR +STARTCHAR uni01F331 +ENCODING 127793 +BBX 13 11 1 0 +BITMAP +00E0 +0110 +3B88 +4648 +8A48 +9248 +9230 +9200 +6200 +0200 +0200 +ENDCHAR +STARTCHAR uni01F332 +ENCODING 127794 +BBX 10 12 3 0 +BITMAP +0C00 +1E00 +3F00 +1E00 +3F00 +7F80 +1E00 +3F00 +7F80 +FFC0 +0C00 +0C00 +ENDCHAR +STARTCHAR uni01F333 +ENCODING 127795 +BBX 10 12 3 0 +BITMAP +3E00 +7F80 +7FC0 +FFC0 +FFC0 +FF80 +7F80 +3F00 +0C00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni01F334 +ENCODING 127796 +BBX 14 13 1 0 +BITMAP +00C0 +7900 +8570 +3B88 +4FE4 +9310 +2188 +2188 +0180 +0180 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni01F335 +ENCODING 127797 +BBX 10 11 3 0 +BITMAP +0C00 +1E00 +1E00 +DE00 +DEC0 +DEC0 +FEC0 +7FC0 +1F80 +1E00 +1E00 +ENDCHAR +STARTCHAR uni01F336 +ENCODING 127798 +BBX 14 13 1 -1 +BITMAP +0004 +000C +0018 +03D8 +06E0 +0CF0 +19F0 +13F0 +37E0 +2F80 +7E00 +7800 +E000 +ENDCHAR +STARTCHAR uni01F337 +ENCODING 127799 +BBX 9 10 3 0 +BITMAP +2A00 +3E00 +3E00 +1C00 +0800 +0800 +C980 +6B00 +3E00 +1C00 +ENDCHAR +STARTCHAR uni01F338 +ENCODING 127800 +BBX 13 12 1 0 +BITMAP +0700 +68B0 +98C8 +8888 +8888 +4710 +3DE0 +2520 +4210 +4210 +2220 +1DC0 +ENDCHAR +STARTCHAR uni01F339 +ENCODING 127801 +BBX 13 13 1 -1 +BITMAP +0500 +2AA0 +5550 +4890 +C898 +A8A8 +7DF0 +0F80 +0200 +0600 +0200 +0300 +0200 +ENDCHAR +STARTCHAR uni01F33A +ENCODING 127802 +BBX 15 14 0 0 +BITMAP +4000 +1000 +4180 +1248 +5654 +9262 +8A42 +4644 +3FF8 +1390 +2108 +4284 +4284 +3C78 +ENDCHAR +STARTCHAR uni01F33B +ENCODING 127803 +BBX 13 12 1 0 +BITMAP +0A80 +1540 +2FA0 +5050 +6030 +A028 +6030 +A028 +5050 +2FA0 +1AC0 +0500 +ENDCHAR +STARTCHAR uni01F33C +ENCODING 127804 +BBX 13 13 1 -1 +BITMAP +0700 +0880 +0880 +78F0 +8508 +8208 +4510 +3AE0 +1540 +2220 +4210 +4510 +38E0 +ENDCHAR +STARTCHAR uni01F33D +ENCODING 127805 +BBX 14 13 1 -1 +BITMAP +1800 +0540 +06A0 +0D40 +1AB8 +3564 +6AC4 +5500 +6B00 +7600 +7C00 +C000 +8000 +ENDCHAR +STARTCHAR uni01F33E +ENCODING 127806 +BBX 14 15 1 -2 +BITMAP +0118 +0638 +0E30 +0CC4 +31D8 +71B8 +6630 +8EC0 +8DC0 +9180 +E600 +CE00 +CC00 +F000 +C000 +ENDCHAR +STARTCHAR uni01F33F +ENCODING 127807 +BBX 14 12 1 -2 +BITMAP +041C +0628 +0570 +8580 +C360 +A250 +A430 +AE10 +7500 +2500 +4300 +0100 +ENDCHAR +STARTCHAR uni01F340 +ENCODING 127808 +BBX 11 11 2 0 +BITMAP +0A00 +1F00 +1F00 +6EC0 +F5E0 +7BC0 +F5E0 +6EC0 +1F00 +1F00 +0A00 +ENDCHAR +STARTCHAR uni01F341 +ENCODING 127809 +BBX 13 12 1 0 +BITMAP +0200 +0700 +4710 +7770 +7FF0 +FFF8 +7FF0 +3FE0 +1FC0 +3FE0 +0200 +0200 +ENDCHAR +STARTCHAR uni01F342 +ENCODING 127810 +BBX 12 12 2 0 +BITMAP +00F0 +03D0 +0EB0 +1B70 +3AA0 +6DC0 +6A00 +7600 +2800 +3E00 +4E00 +8000 +ENDCHAR +STARTCHAR uni01F343 +ENCODING 127811 +BBX 14 14 1 -1 +BITMAP +0004 +0688 +3050 +8020 +8050 +B808 +7C40 +D244 +EF04 +D530 +5B80 +3580 +1E80 +0780 +ENDCHAR +STARTCHAR uni01F344 +ENCODING 127812 +BBX 12 10 2 0 +BITMAP +1F80 +76E0 +DDB0 +FFF0 +0600 +0F00 +0F00 +1F80 +1F80 +0F00 +ENDCHAR +STARTCHAR uni01F345 +ENCODING 127813 +BBX 12 12 2 1 +BITMAP +0100 +0200 +0600 +0600 +1F80 +6F60 +8610 +8010 +8010 +8010 +6060 +1F80 +ENDCHAR +STARTCHAR uni01F346 +ENCODING 127814 +BBX 13 13 2 0 +BITMAP +0018 +0030 +0060 +00E0 +03E0 +06E0 +1CC0 +79C0 +E3C0 +E780 +FF80 +7F00 +3E00 +ENDCHAR +STARTCHAR uni01F347 +ENCODING 127815 +BBX 13 14 1 -1 +BITMAP +0600 +0300 +03C0 +37A0 +4930 +69C8 +9F48 +9270 +6390 +9C90 +A760 +6480 +1C80 +0300 +ENDCHAR +STARTCHAR uni01F348 +ENCODING 127816 +BBX 14 10 1 0 +BITMAP +3800 +C7E0 +011C +0780 +1860 +2010 +2010 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uni01F349 +ENCODING 127817 +BBX 14 9 1 2 +BITMAP +0078 +0784 +7814 +C044 +D204 +C024 +E288 +7830 +1FC0 +ENDCHAR +STARTCHAR uni01F34A +ENCODING 127818 +BBX 13 10 1 -1 +BITMAP +1DC0 +2220 +4010 +8008 +8008 +8008 +8008 +4010 +3060 +0F80 +ENDCHAR +STARTCHAR uni01F34B +ENCODING 127819 +BBX 12 14 2 -1 +BITMAP +0600 +0900 +32C0 +4160 +42A0 +8150 +80B0 +8150 +80B0 +4160 +42A0 +3140 +0B80 +0600 +ENDCHAR +STARTCHAR uni01F34C +ENCODING 127820 +BBX 10 11 3 -1 +BITMAP +3180 +7A40 +BC40 +1840 +1880 +3100 +7380 +7FC0 +F9C0 +F0C0 +0040 +ENDCHAR +STARTCHAR uni01F34D +ENCODING 127821 +BBX 9 13 3 0 +BITMAP +4900 +2A00 +DD80 +3E00 +5D00 +A680 +DA80 +B580 +CB80 +B480 +6B00 +5500 +3E00 +ENDCHAR +STARTCHAR uni01F34E +ENCODING 127822 +BBX 11 14 2 -1 +BITMAP +00E0 +0120 +0220 +0240 +0380 +0400 +3F80 +6EC0 +AAA0 +AAA0 +AAA0 +AAA0 +6AC0 +3F80 +ENDCHAR +STARTCHAR uni01F34F +ENCODING 127823 +BBX 11 14 2 -1 +BITMAP +00E0 +0120 +0220 +0240 +0380 +0400 +3F80 +64C0 +9260 +C920 +A4A0 +9260 +4940 +3F80 +ENDCHAR +STARTCHAR uni01F350 +ENCODING 127824 +BBX 9 14 3 -1 +BITMAP +1000 +0800 +0800 +1C00 +2A00 +3200 +2A00 +5100 +6900 +5100 +A080 +D080 +A080 +7F00 +ENDCHAR +STARTCHAR uni01F351 +ENCODING 127825 +BBX 13 12 1 0 +BITMAP +F078 +4890 +3DE0 +0200 +1FC0 +2120 +4090 +4090 +4090 +4110 +2020 +1FC0 +ENDCHAR +STARTCHAR uni01F352 +ENCODING 127826 +BBX 13 14 2 -1 +BITMAP +00F8 +0320 +0420 +0840 +1040 +1040 +2080 +2080 +7080 +F9C0 +FBE0 +FBE0 +73E0 +01C0 +ENDCHAR +STARTCHAR uni01F353 +ENCODING 127827 +BBX 13 14 1 -1 +BITMAP +0180 +0200 +0200 +3760 +6FB0 +D758 +AAA8 +D558 +6AB0 +3560 +1AC0 +0D80 +0700 +0200 +ENDCHAR +STARTCHAR uni01F354 +ENCODING 127828 +BBX 13 12 1 0 +BITMAP +1FC0 +6030 +9248 +8008 +7FF0 +5550 +FFF8 +FFF8 +7FF0 +8008 +8008 +7FF0 +ENDCHAR +STARTCHAR uni01F355 +ENCODING 127829 +BBX 13 12 2 0 +BITMAP +0F80 +1FE0 +1070 +36B8 +3618 +21E0 +5980 +5B00 +6400 +F800 +A000 +C000 +ENDCHAR +STARTCHAR uni01F356 +ENCODING 127830 +BBX 13 13 1 -1 +BITMAP +0040 +00B0 +1888 +2508 +2230 +1140 +0880 +1440 +6220 +8520 +48C0 +4800 +3000 +ENDCHAR +STARTCHAR uni01F357 +ENCODING 127831 +BBX 14 13 1 0 +BITMAP +0020 +0058 +0044 +0084 +0118 +1EA0 +2040 +4040 +8040 +8040 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni01F358 +ENCODING 127832 +BBX 12 12 2 -1 +BITMAP +0F00 +30C0 +4020 +4020 +8010 +8010 +8F10 +8F10 +4F20 +4F20 +3FC0 +0F00 +ENDCHAR +STARTCHAR uni01F359 +ENCODING 127833 +BBX 11 10 2 0 +BITMAP +0E00 +1100 +2080 +2080 +4040 +4740 +8720 +8720 +8720 +7FC0 +ENDCHAR +STARTCHAR uni01F35A +ENCODING 127834 +BBX 11 11 2 -1 +BITMAP +0E00 +1500 +2A80 +5540 +EAE0 +BFA0 +8020 +4040 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni01F35B +ENCODING 127835 +BBX 14 8 1 1 +BITMAP +0014 +1E14 +6B94 +9554 +FAD4 +FD54 +7B94 +1E14 +ENDCHAR +STARTCHAR uni01F35C +ENCODING 127836 +BBX 11 14 2 -1 +BITMAP +2440 +1480 +1240 +2240 +2480 +0000 +7FC0 +C060 +BFA0 +8020 +8020 +4040 +4040 +3F80 +ENDCHAR +STARTCHAR uni01F35D +ENCODING 127837 +BBX 14 13 1 0 +BITMAP +0200 +0F00 +06FC +0F00 +0600 +0600 +1FC0 +6630 +9DA8 +A268 +AF18 +70F0 +1FC0 +ENDCHAR +STARTCHAR uni01F35E +ENCODING 127838 +BBX 10 11 3 0 +BITMAP +7F80 +8040 +8040 +4080 +8040 +8040 +8040 +8040 +8040 +8040 +7F80 +ENDCHAR +STARTCHAR uni01F35F +ENCODING 127839 +BBX 13 14 1 -1 +BITMAP +0600 +0BC0 +1F40 +7570 +5550 +D558 +D578 +B5C8 +8F08 +8008 +4010 +4010 +4010 +7FF0 +ENDCHAR +STARTCHAR uni01F360 +ENCODING 127840 +BBX 12 10 2 0 +BITMAP +F800 +8600 +8180 +6040 +1060 +08B0 +0550 +06A0 +0540 +0380 +ENDCHAR +STARTCHAR uni01F361 +ENCODING 127841 +BBX 10 10 2 0 +BITMAP +6000 +9000 +9800 +6400 +2600 +1900 +0900 +0700 +0080 +0040 +ENDCHAR +STARTCHAR uni01F362 +ENCODING 127842 +BBX 5 13 5 -1 +BITMAP +20 +50 +88 +F8 +70 +88 +88 +70 +F8 +88 +F8 +20 +20 +ENDCHAR +STARTCHAR uni01F363 +ENCODING 127843 +BBX 14 8 1 0 +BITMAP +0780 +7FF8 +FFFC +FFFC +A794 +2790 +2790 +3FF0 +ENDCHAR +STARTCHAR uni01F364 +ENCODING 127844 +BBX 11 12 2 0 +BITMAP +0380 +02E0 +02A0 +0120 +07C0 +0900 +3100 +4200 +4400 +8400 +8800 +7000 +ENDCHAR +STARTCHAR uni01F365 +ENCODING 127845 +BBX 14 13 1 -1 +BITMAP +0FC0 +1020 +2010 +4FC8 +9024 +A794 +A854 +A994 +A424 +53C8 +2010 +1020 +0FC0 +ENDCHAR +STARTCHAR uni01F366 +ENCODING 127846 +BBX 8 14 4 -1 +BITMAP +18 +24 +5A +42 +B1 +81 +FF +81 +FF +42 +42 +24 +24 +3C +ENDCHAR +STARTCHAR uni01F367 +ENCODING 127847 +BBX 12 13 2 -1 +BITMAP +0010 +0010 +0E20 +1520 +2AC0 +5540 +EAE0 +BFA0 +8020 +4040 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni01F368 +ENCODING 127848 +BBX 12 13 2 -1 +BITMAP +0E10 +1110 +3920 +47A0 +4440 +FFE0 +8020 +8020 +4040 +3F80 +0E00 +0400 +3F80 +ENDCHAR +STARTCHAR uni01F369 +ENCODING 127849 +BBX 14 10 1 -1 +BITMAP +1FE0 +7FF8 +F87C +F03C +F87C +FFFC +9FE4 +8004 +6018 +1FE0 +ENDCHAR +STARTCHAR uni01F36A +ENCODING 127850 +BBX 12 12 2 0 +BITMAP +0F00 +30C0 +4020 +4620 +86D0 +B0D0 +B010 +8190 +4DA0 +4C20 +30C0 +0F00 +ENDCHAR +STARTCHAR uni01F36B +ENCODING 127851 +BBX 9 12 3 0 +BITMAP +FF80 +FF80 +EE80 +8880 +FF80 +EE80 +8880 +FF80 +EE80 +8880 +FF80 +FF80 +ENDCHAR +STARTCHAR uni01F36C +ENCODING 127852 +BBX 13 6 1 2 +BITMAP +C718 +A8A8 +9058 +D048 +A8A8 +C718 +ENDCHAR +STARTCHAR uni01F36D +ENCODING 127853 +BBX 11 14 2 -1 +BITMAP +1F00 +2080 +4E40 +9120 +AEA0 +AEA0 +9120 +4E40 +2080 +1F00 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni01F36E +ENCODING 127854 +BBX 14 12 1 0 +BITMAP +0780 +0FC0 +0FC0 +0840 +1020 +3030 +5028 +9024 +9FE4 +8004 +4008 +3FF0 +ENDCHAR +STARTCHAR uni01F36F +ENCODING 127855 +BBX 12 14 2 -1 +BITMAP +0060 +0080 +0080 +0100 +1F80 +6160 +8110 +E170 +FFF0 +BFD0 +9F90 +8C90 +4020 +3FC0 +ENDCHAR +STARTCHAR uni01F370 +ENCODING 127856 +BBX 14 11 1 0 +BITMAP +01C0 +0620 +1810 +6008 +FFFC +800C +DBBC +800C +EB5C +800C +FFFC +ENDCHAR +STARTCHAR uni01F371 +ENCODING 127857 +BBX 13 10 1 0 +BITMAP +FFF8 +8408 +8408 +8408 +FFF8 +8198 +8108 +8108 +8198 +FFF8 +ENDCHAR +STARTCHAR uni01F372 +ENCODING 127858 +BBX 11 11 2 0 +BITMAP +1F00 +2080 +4C40 +8020 +B1A0 +8020 +8320 +9820 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni01F373 +ENCODING 127859 +BBX 14 5 1 0 +BITMAP +001C +0070 +FFC0 +FF80 +7F00 +ENDCHAR +STARTCHAR uni01F374 +ENCODING 127860 +BBX 10 10 3 0 +BITMAP +A8C0 +A9C0 +A9C0 +F9C0 +71C0 +2040 +2040 +2040 +2040 +2040 +ENDCHAR +STARTCHAR uni01F375 +ENCODING 127861 +BBX 9 13 3 0 +BITMAP +4900 +9200 +9200 +4900 +4900 +0000 +FF80 +FF80 +FF80 +FF80 +7F00 +3E00 +3E00 +ENDCHAR +STARTCHAR uni01F376 +ENCODING 127862 +BBX 14 12 1 0 +BITMAP +3C00 +2400 +2400 +2400 +4200 +4200 +8100 +817C +8144 +4244 +4228 +3C38 +ENDCHAR +STARTCHAR uni01F377 +ENCODING 127863 +BBX 7 10 5 0 +BITMAP +7C +82 +82 +FE +7C +38 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni01F378 +ENCODING 127864 +BBX 9 10 4 0 +BITMAP +FF80 +4100 +3E00 +1C00 +0800 +0800 +0800 +0800 +0800 +3E00 +ENDCHAR +STARTCHAR uni01F379 +ENCODING 127865 +BBX 12 13 2 0 +BITMAP +01C0 +00E0 +6070 +90B0 +BF90 +6280 +2480 +3F80 +1F00 +1F00 +0E00 +0E00 +1F00 +ENDCHAR +STARTCHAR uni01F37A +ENCODING 127866 +BBX 12 10 2 0 +BITMAP +FF60 +8390 +CD10 +B110 +8120 +8140 +8180 +8180 +8100 +FF00 +ENDCHAR +STARTCHAR uni01F37B +ENCODING 127867 +BBX 14 11 1 0 +BITMAP +0380 +5F40 +B900 +97E8 +9474 +56A4 +3524 +1428 +1C30 +0420 +07E0 +ENDCHAR +STARTCHAR uni01F37C +ENCODING 127868 +BBX 5 13 5 0 +BITMAP +20 +50 +50 +88 +F8 +88 +C8 +88 +E8 +88 +C8 +88 +F8 +ENDCHAR +STARTCHAR uni01F37D +ENCODING 127869 +BBX 16 10 0 0 +BITMAP +A3C1 +A423 +E993 +524B +542B +5429 +5249 +4991 +4421 +43C1 +ENDCHAR +STARTCHAR uni01F37E +ENCODING 127870 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 0 -2 +BITMAP +38 +38 +00 +54 +82 +38 +28 +28 +28 +44 +44 +44 +44 +44 +7C +ENDCHAR +STARTCHAR uni01F37F +ENCODING 127871 +BBX 11 13 2 -1 +BITMAP +0B00 +1480 +3B80 +5540 +6AC0 +FFE0 +AAA0 +5540 +5540 +2A80 +2A80 +2A80 +3F80 +ENDCHAR +STARTCHAR uni01F380 +ENCODING 127872 +BBX 11 11 2 -1 +BITMAP +71C0 +8E20 +8A20 +8E20 +7BC0 +4A40 +8A20 +8A20 +AAA0 +DB60 +8A20 +ENDCHAR +STARTCHAR uni01F381 +ENCODING 127873 +BBX 14 13 1 0 +BITMAP +1830 +2448 +1290 +0EE0 +1FFC +230C +4614 +FFE4 +8C24 +8C24 +8C28 +8C30 +FFE0 +ENDCHAR +STARTCHAR uni01F382 +ENCODING 127874 +BBX 15 15 0 -2 +BITMAP +0100 +0100 +17D0 +3938 +5114 +9452 +9452 +9452 +C446 +A00A +9FF2 +8002 +4004 +2008 +1FF0 +ENDCHAR +STARTCHAR uni01F383 +ENCODING 127875 +BBX 13 13 1 0 +BITMAP +0300 +0600 +3FE0 +7FF0 +6730 +E738 +FFF8 +FFF8 +EAB8 +E038 +7570 +7FF0 +1FC0 +ENDCHAR +STARTCHAR uni01F384 +ENCODING 127876 +BBX 13 13 1 -1 +BITMAP +0200 +0700 +0200 +0F80 +2720 +1FC0 +4F90 +3FE0 +9FC8 +7FF0 +3FE0 +4210 +0200 +ENDCHAR +STARTCHAR uni01F385 +ENCODING 127877 +BBX 13 15 1 -2 +BITMAP +1FC0 +2020 +5810 +67F0 +4410 +C7F0 +C808 +0A28 +0888 +0988 +0410 +07F0 +0410 +0220 +01C0 +ENDCHAR +STARTCHAR uni01F386 +ENCODING 127878 +BBX 13 12 2 -1 +BITMAP +1930 +2548 +0380 +1FF0 +2F88 +1540 +2920 +4820 +4000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni01F387 +ENCODING 127879 +BBX 9 14 3 -1 +BITMAP +0800 +0000 +4900 +2200 +8880 +5D00 +1C00 +9C80 +5D00 +1C00 +5D00 +8880 +0800 +0800 +ENDCHAR +STARTCHAR uni01F388 +ENCODING 127880 +BBX 10 14 3 -1 +BITMAP +1E00 +2100 +4080 +8040 +8040 +8040 +4080 +4080 +2100 +1200 +0C00 +1C00 +2000 +C000 +ENDCHAR +STARTCHAR uni01F389 +ENCODING 127881 +BBX 12 12 2 0 +BITMAP +0880 +0500 +0020 +0E40 +1930 +2880 +24A0 +4390 +4100 +8600 +9800 +E000 +ENDCHAR +STARTCHAR uni01F38A +ENCODING 127882 +BBX 13 13 1 -1 +BITMAP +38E0 +4510 +8208 +FFF8 +2010 +2A40 +0850 +0110 +2500 +2040 +0840 +0A00 +0200 +ENDCHAR +STARTCHAR uni01F38B +ENCODING 127883 +BBX 15 12 0 0 +BITMAP +02C0 +0380 +E280 +1D54 +074E +19B2 +3248 +EE20 +A9DA +2B56 +3952 +0070 +ENDCHAR +STARTCHAR uni01F38C +ENCODING 127884 +BBX 15 12 0 0 +BITMAP +0C60 +3458 +C286 +9292 +4384 +4D64 +3298 +0280 +0440 +0440 +0820 +0820 +ENDCHAR +STARTCHAR uni01F38D +ENCODING 127885 +BBX 13 11 1 0 +BITMAP +0700 +05C0 +1D40 +1540 +1540 +3560 +5FD0 +8008 +4510 +2DA0 +3260 +ENDCHAR +STARTCHAR uni01F38E +ENCODING 127886 +BBX 15 12 0 0 +BITMAP +0010 +0838 +1C7C +366C +3628 +367C +5DAA +5592 +2A6C +556C +E3AA +3ED6 +ENDCHAR +STARTCHAR uni01F38F +ENCODING 127887 +BBX 12 16 2 -2 +BITMAP +4000 +A000 +4380 +4D70 +7360 +4F50 +40F0 +4000 +4380 +4D70 +7360 +4F50 +40F0 +4000 +4000 +4000 +ENDCHAR +STARTCHAR uni01F390 +ENCODING 127888 +BBX 11 14 2 -1 +BITMAP +0400 +0400 +FFE0 +5540 +5540 +5540 +4540 +4500 +4400 +0400 +0E00 +0E00 +0E00 +0E00 +ENDCHAR +STARTCHAR uni01F391 +ENCODING 127889 +BBX 14 14 1 -1 +BITMAP +FFC0 +FFC0 +FE60 +FC70 +FCFC +F3FC +E3FC +E7FC +DFFC +DEBC +DD5C +BAAC +B004 +BFFC +ENDCHAR +STARTCHAR uni01F392 +ENCODING 127890 +BBX 14 12 1 0 +BITMAP +FFFC +8844 +8844 +8844 +8844 +FFFC +4848 +5CE8 +5CE8 +4848 +4008 +7FF8 +ENDCHAR +STARTCHAR uni01F393 +ENCODING 127891 +BBX 12 10 2 0 +BITMAP +0200 +0F80 +3FE0 +7FF0 +3FE0 +4F80 +9240 +BDE0 +9FC0 +8700 +ENDCHAR +STARTCHAR uni01F394 +ENCODING 127892 +BBX 13 12 2 0 +BITMAP +38E0 +7DF0 +FDF8 +FFF8 +FFF8 +7FF0 +7FF0 +3FE0 +0FC0 +0780 +0700 +1C00 +ENDCHAR +STARTCHAR uni01F395 +ENCODING 127893 +BBX 14 13 1 0 +BITMAP +0C40 +12A0 +53A8 +AC54 +42F4 +2F08 +57D0 +2328 +0310 +0380 +0580 +0540 +0940 +ENDCHAR +STARTCHAR uni01F396 +ENCODING 127894 +BBX 6 13 5 0 +BITMAP +FC +CC +CC +CC +CC +CC +48 +30 +48 +84 +84 +48 +30 +ENDCHAR +STARTCHAR uni01F397 +ENCODING 127895 +BBX 9 13 3 0 +BITMAP +0E00 +1F00 +3300 +3300 +3300 +3600 +1E00 +1C00 +1C00 +3E00 +7700 +E380 +4180 +ENDCHAR +STARTCHAR uni01F398 +ENCODING 127896 +BBX 15 15 0 -1 +BITMAP +1E00 +6100 +0C80 +7280 +0280 +FFFE +BBBA +BBBA +BBBA +BBBA +BBBA +9112 +9112 +9112 +FFFE +ENDCHAR +STARTCHAR uni01F399 +ENCODING 127897 +BBX 7 13 4 -1 +BITMAP +7C +82 +BA +82 +BA +82 +BA +82 +7C +38 +38 +10 +10 +ENDCHAR +STARTCHAR uni01F39A +ENCODING 127898 +BBX 7 12 4 0 +BITMAP +FE +82 +92 +92 +BA +BA +92 +92 +92 +92 +82 +FE +ENDCHAR +STARTCHAR uni01F39B +ENCODING 127899 +BBX 8 14 4 -1 +BITMAP +FF +81 +99 +BD +BD +99 +81 +81 +99 +BD +BD +99 +81 +FF +ENDCHAR +STARTCHAR uni01F39C +ENCODING 127900 +BBX 12 13 2 -1 +BITMAP +0070 +01F0 +0FF0 +0F90 +0E10 +0810 +0810 +08F0 +09F0 +79F0 +F8E0 +F800 +7000 +ENDCHAR +STARTCHAR uni01F39D +ENCODING 127901 +BBX 12 13 2 -1 +BITMAP +0E00 +0F80 +0FF0 +09F0 +0870 +0810 +0810 +7810 +F810 +F8F0 +71F0 +01F0 +00E0 +ENDCHAR +STARTCHAR uni01F39E +ENCODING 127902 +BBX 14 13 1 0 +BITMAP +FFFC +A014 +E01C +A014 +E01C +A014 +FFFC +A014 +E01C +A014 +E01C +A014 +FFFC +ENDCHAR +STARTCHAR uni01F39F +ENCODING 127903 +BBX 14 9 1 0 +BITMAP +3FF0 +CFCC +7038 +E31C +6118 +E39C +7038 +CFCC +3FF0 +ENDCHAR +STARTCHAR uni01F3A0 +ENCODING 127904 +BBX 14 15 1 -2 +BITMAP +0200 +1A00 +7A00 +DA00 +FA00 +3A00 +1FF0 +1FE8 +1FE4 +7FE4 +9260 +925C +4A20 +0A10 +0200 +ENDCHAR +STARTCHAR uni01F3A1 +ENCODING 127905 +BBX 12 13 2 0 +BITMAP +0F00 +36C0 +70E0 +6160 +9910 +C630 +C630 +8990 +6860 +7060 +36C0 +4F20 +FFF0 +ENDCHAR +STARTCHAR uni01F3A2 +ENCODING 127906 +BBX 14 11 1 -1 +BITMAP +0018 +0034 +0050 +0050 +0090 +7090 +A990 +2690 +2490 +2490 +2490 +ENDCHAR +STARTCHAR uni01F3A3 +ENCODING 127907 +BBX 14 13 1 0 +BITMAP +3C00 +2380 +2060 +2010 +2008 +2008 +7004 +B834 +F87C +F87C +7034 +7004 +F804 +ENDCHAR +STARTCHAR uni01F3A4 +ENCODING 127908 +BBX 14 14 1 -1 +BITMAP +1C00 +1200 +1040 +70A0 +F150 +62A0 +0740 +0F80 +1F38 +3E24 +7C20 +F8E0 +71E0 +20C0 +ENDCHAR +STARTCHAR uni01F3A5 +ENCODING 127909 +BBX 12 14 2 0 +BITMAP +0C60 +1EF0 +1EF0 +0C60 +DFF0 +FFF0 +FFF0 +DFF0 +0380 +0380 +0540 +0540 +0920 +0920 +ENDCHAR +STARTCHAR uni01F3A6 +ENCODING 127910 +BBX 16 15 0 -2 +BITMAP +0180 +0660 +381C +C003 +8319 +87BD +87BD +8319 +B7FD +BFFD +BFFD +B7FD +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F3A7 +ENCODING 127911 +BBX 14 10 1 2 +BITMAP +0780 +1860 +3030 +2010 +2010 +7038 +F03C +F03C +F03C +7038 +ENDCHAR +STARTCHAR uni01F3A8 +ENCODING 127912 +BBX 12 11 2 0 +BITMAP +03C0 +0CA0 +3150 +4550 +90A0 +8040 +A040 +8820 +4290 +3010 +0FE0 +ENDCHAR +STARTCHAR uni01F3A9 +ENCODING 127913 +BBX 12 10 2 1 +BITMAP +0F00 +1F80 +1780 +1780 +1780 +1780 +37C0 +F7F0 +FFF0 +3FC0 +ENDCHAR +STARTCHAR uni01F3AA +ENCODING 127914 +BBX 15 14 0 -1 +BITMAP +01C0 +0130 +01C0 +0100 +06C0 +1AB0 +2AA8 +7FFC +3018 +3018 +5014 +5394 +9392 +9FF2 +ENDCHAR +STARTCHAR uni01F3AB +ENCODING 127915 +BBX 13 7 1 0 +BITMAP +FFF8 +8208 +B0C8 +9248 +B8E8 +8208 +FFF8 +ENDCHAR +STARTCHAR uni01F3AC +ENCODING 127916 +BBX 12 12 2 0 +BITMAP +01C0 +0E00 +7000 +8000 +D550 +FFF0 +FFF0 +CA30 +FFF0 +D130 +FFF0 +FFF0 +ENDCHAR +STARTCHAR uni01F3AD +ENCODING 127917 +BBX 14 12 1 0 +BITMAP +7C00 +8200 +AA00 +8200 +BAF8 +9304 +4554 +3904 +0124 +0174 +0088 +0070 +ENDCHAR +STARTCHAR uni01F3AE +ENCODING 127918 +BBX 14 11 1 0 +BITMAP +3870 +4788 +5028 +BB54 +9024 +8CC4 +8CC4 +8004 +8FC4 +9024 +6018 +ENDCHAR +STARTCHAR uni01F3AF +ENCODING 127919 +BBX 12 12 2 0 +BITMAP +4F00 +E0C0 +6020 +1620 +8B10 +9590 +9B90 +8F10 +4620 +4020 +30C0 +0F00 +ENDCHAR +STARTCHAR uni01F3B0 +ENCODING 127920 +BBX 16 13 0 -1 +BITMAP +FFFF +8421 +94A5 +94A5 +A529 +A529 +A529 +B5AD +FFFF +FFFF +B5AD +8421 +FFFF +ENDCHAR +STARTCHAR uni01F3B1 +ENCODING 127921 +BBX 15 12 1 0 +BITMAP +E0C0 +A120 +A120 +E0C0 +E330 +E4C8 +E4C8 +E330 +ECCC +F332 +F332 +ECCC +ENDCHAR +STARTCHAR uni01F3B2 +ENCODING 127922 +BBX 15 14 0 -1 +BITMAP +0380 +0C60 +3018 +C106 +E00E +9832 +87C2 +A10A +8142 +810A +C546 +3118 +0D60 +0380 +ENDCHAR +STARTCHAR uni01F3B3 +ENCODING 127923 +BBX 15 12 0 0 +BITMAP +01DC +0154 +0154 +01DC +0154 +01DC +0222 +7222 +FA22 +FA22 +FB54 +71DC +ENDCHAR +STARTCHAR uni01F3B4 +ENCODING 127924 +BBX 11 14 2 -1 +BITMAP +FFE0 +9C20 +A220 +A220 +A220 +9C20 +8020 +8020 +9F20 +BFA0 +FFE0 +FFE0 +FFE0 +FFE0 +ENDCHAR +STARTCHAR uni01F3B5 +ENCODING 127925 +BBX 9 12 3 0 +BITMAP +0C00 +0F00 +0F80 +0F80 +0B80 +0980 +0900 +7800 +F800 +F800 +F800 +7000 +ENDCHAR +STARTCHAR uni01F3B6 +ENCODING 127926 +BBX 13 13 2 -1 +BITMAP +0180 +0140 +0100 +0100 +0330 +0728 +3220 +2820 +2060 +20E0 +6040 +E000 +4000 +ENDCHAR +STARTCHAR uni01F3B7 +ENCODING 127927 +BBX 12 13 2 -1 +BITMAP +00F0 +0140 +0140 +0140 +0240 +0280 +6280 +9480 +F500 +8900 +8100 +4600 +3800 +ENDCHAR +STARTCHAR uni01F3B8 +ENCODING 127928 +BBX 8 14 4 -1 +BITMAP +18 +18 +18 +18 +18 +18 +18 +66 +81 +5A +5A +81 +81 +7E +ENDCHAR +STARTCHAR uni01F3B9 +ENCODING 127929 +BBX 15 12 0 0 +BITMAP +FFFE +FFFE +BBBA +BBBA +BBBA +BBBA +BBBA +9112 +9112 +9112 +FFFE +FFFE +ENDCHAR +STARTCHAR uni01F3BA +ENCODING 127930 +BBX 14 8 1 1 +BITMAP +02AC +C7FC +AAA0 +9FF0 +9AA8 +AAA8 +C7F0 +02A0 +ENDCHAR +STARTCHAR uni01F3BB +ENCODING 127931 +BBX 12 14 2 -1 +BITMAP +1800 +1800 +1830 +1830 +1830 +1830 +3C30 +4230 +8130 +5A30 +5A10 +8110 +4200 +3C00 +ENDCHAR +STARTCHAR uni01F3BC +ENCODING 127932 +BBX 14 14 1 -1 +BITMAP +0100 +0280 +FABC +C280 +F93C +C200 +F4CC +C520 +F4AC +C220 +F9CC +0040 +0340 +0380 +ENDCHAR +STARTCHAR uni01F3BD +ENCODING 127933 +BBX 12 13 2 -1 +BITMAP +4020 +B0D0 +A950 +A650 +9090 +CF10 +F010 +BC10 +8F10 +83D0 +80F0 +8030 +FFF0 +ENDCHAR +STARTCHAR uni01F3BE +ENCODING 127934 +BBX 12 12 2 0 +BITMAP +1E00 +3500 +2A80 +3580 +2A80 +1580 +0FC0 +00E0 +6070 +D030 +B000 +6000 +ENDCHAR +STARTCHAR uni01F3BF +ENCODING 127935 +BBX 14 12 1 0 +BITMAP +0C04 +1E08 +0F10 +07A0 +0740 +0E80 +0D00 +0200 +4400 +8800 +9000 +6000 +ENDCHAR +STARTCHAR uni01F3C0 +ENCODING 127936 +BBX 12 14 2 -1 +BITMAP +01C0 +02A0 +05D0 +06B0 +05D0 +02A0 +01C0 +7C00 +8200 +FE00 +5400 +7C00 +5400 +7C00 +ENDCHAR +STARTCHAR uni01F3C1 +ENCODING 127937 +BBX 12 14 2 -1 +BITMAP +FFF0 +9990 +9990 +E670 +E670 +9990 +9990 +E670 +E670 +FFF0 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni01F3C2 +ENCODING 127938 +BBX 11 14 1 -1 +BITMAP +31C0 +3600 +0800 +1400 +2200 +0400 +0980 +0E40 +1820 +6420 +80C0 +8300 +4C00 +3000 +ENDCHAR +STARTCHAR uni01F3C3 +ENCODING 127939 +BBX 14 12 1 -1 +BITMAP +6000 +6B80 +0440 +8A20 +5100 +2100 +0F80 +1040 +0820 +0410 +0008 +0004 +ENDCHAR +STARTCHAR uni01F3C4 +ENCODING 127940 +BBX 14 14 1 -1 +BITMAP +0600 +0600 +0300 +3EE0 +0200 +0200 +0500 +0FE0 +3498 +4484 +8D84 +4004 +3018 +0FE0 +ENDCHAR +STARTCHAR uni01F3C5 +ENCODING 127941 +BBX 9 12 3 0 +BITMAP +C180 +C180 +C180 +6300 +6300 +3600 +0800 +1C00 +2200 +2200 +2200 +1C00 +ENDCHAR +STARTCHAR uni01F3C6 +ENCODING 127942 +BBX 14 13 1 -1 +BITMAP +0780 +6858 +9864 +8844 +6858 +1860 +5868 +2490 +0300 +0300 +0300 +0780 +0FC0 +ENDCHAR +STARTCHAR uni01F3C7 +ENCODING 127943 +BBX 14 14 1 -1 +BITMAP +0300 +1B00 +7900 +DB00 +FC80 +3880 +1F70 +1EE8 +1DE4 +7EE4 +9060 +905C +4820 +0810 +ENDCHAR +STARTCHAR uni01F3C8 +ENCODING 127944 +BBX 11 11 2 0 +BITMAP +03C0 +0C20 +1220 +2D20 +58A0 +5440 +A040 +9080 +8900 +8600 +7800 +ENDCHAR +STARTCHAR uni01F3C9 +ENCODING 127945 +BBX 11 11 2 0 +BITMAP +03C0 +0C60 +11A0 +2620 +4820 +5440 +9040 +A080 +A100 +C600 +7800 +ENDCHAR +STARTCHAR uni01F3CA +ENCODING 127946 +BBX 14 12 1 0 +BITMAP +0800 +0400 +0200 +C400 +C800 +1E00 +3F80 +71C4 +8E38 +0000 +71C4 +8E38 +ENDCHAR +STARTCHAR uni01F3CB +ENCODING 127947 +BBX 14 12 1 0 +BITMAP +4008 +C00C +FFFC +D02C +5028 +0B40 +0B40 +0780 +0300 +0300 +0300 +0300 +ENDCHAR +STARTCHAR uni01F3CC +ENCODING 127948 +BBX 11 13 2 -1 +BITMAP +3000 +4C00 +0300 +18C0 +1860 +1180 +1E00 +1000 +1000 +1000 +2800 +4800 +9000 +ENDCHAR +STARTCHAR uni01F3CD +ENCODING 127949 +BBX 13 9 2 -1 +BITMAP +0E00 +3C18 +7870 +FFE0 +3FE0 +6FB0 +9748 +9048 +6030 +ENDCHAR +STARTCHAR uni01F3CE +ENCODING 127950 +BBX 15 9 0 0 +BITMAP +0106 +020C +0E38 +31C4 +4002 +8C32 +F3CE +1248 +0C30 +ENDCHAR +STARTCHAR uni01F3CF +ENCODING 127951 +BBX 11 13 2 -1 +BITMAP +01C0 +0140 +0140 +0140 +0140 +0220 +0220 +0220 +6220 +F220 +F220 +6220 +03E0 +ENDCHAR +STARTCHAR uni01F3D0 +ENCODING 127952 +BBX 15 15 0 -2 +BITMAP +07C0 +1B70 +2488 +4954 +5224 +A452 +C8CA +D126 +9312 +A4CA +6624 +4914 +2888 +1870 +07C0 +ENDCHAR +STARTCHAR uni01F3D1 +ENCODING 127953 +BBX 12 12 2 0 +BITMAP +0010 +0030 +0060 +00C0 +0180 +0300 +0600 +8C00 +D8C0 +71E0 +61E0 +00C0 +ENDCHAR +STARTCHAR uni01F3D2 +ENCODING 127954 +BBX 13 11 1 1 +BITMAP +0008 +0018 +0030 +0060 +00C0 +0180 +0300 +0600 +0C00 +F8F0 +F0F0 +ENDCHAR +STARTCHAR uni01F3D3 +ENCODING 127955 +BBX 14 13 1 0 +BITMAP +0C00 +3F00 +7F80 +7F80 +FFC0 +FFC0 +7F80 +7F80 +3F18 +0C3C +0C3C +0C18 +0C00 +ENDCHAR +STARTCHAR uni01F3D4 +ENCODING 127956 +BBX 14 13 1 0 +BITMAP +0880 +1540 +1220 +2110 +40B8 +E9BC +FDFC +FFFC +FFFC +FFFC +FFFC +FFFC +FFFC +ENDCHAR +STARTCHAR uni01F3D5 +ENCODING 127957 +BBX 16 15 0 -1 +BITMAP +0008 +001C +001C +003E +023E +057F +0888 +1048 +2028 +2720 +6738 +673C +FFFE +FFFC +7FF0 +ENDCHAR +STARTCHAR uni01F3D6 +ENCODING 127958 +BBX 14 13 1 -1 +BITMAP +03F0 +01F0 +00F0 +00F0 +0130 +0210 +0400 +0000 +71C4 +8E38 +0000 +71C4 +8E38 +ENDCHAR +STARTCHAR uni01F3D7 +ENCODING 127959 +BBX 14 13 1 0 +BITMAP +FFF8 +AAA8 +FFF8 +5410 +5C10 +F410 +FC10 +1588 +1DD0 +1540 +1DFC +1574 +1DFC +ENDCHAR +STARTCHAR uni01F3D8 +ENCODING 127960 +BBX 16 8 0 0 +BITMAP +1010 +7C7C +FEFE +D6D6 +FEFE +D6D6 +FEFE +FFFF +ENDCHAR +STARTCHAR uni01F3D9 +ENCODING 127961 +BBX 16 13 0 0 +BITMAP +0084 +008E +01CE +03E4 +12A4 +3BFF +2AB5 +7FFF +D6B5 +FFFF +D6B5 +FFFF +FFFF +ENDCHAR +STARTCHAR uni01F3DA +ENCODING 127962 +BBX 13 12 1 1 +BITMAP +0200 +0F80 +3FE0 +FFF8 +4010 +58D0 +4D90 +4710 +4710 +4D90 +58D0 +7FF0 +ENDCHAR +STARTCHAR uni01F3DB +ENCODING 127963 +BBX 13 14 1 0 +BITMAP +0200 +0D80 +3060 +C018 +0000 +FFF8 +0000 +6DB0 +6DB0 +6DB0 +6DB0 +6DB0 +0000 +FFF8 +ENDCHAR +STARTCHAR uni01F3DC +ENCODING 127964 +BBX 14 12 1 0 +BITMAP +7000 +8860 +8860 +886C +736C +036C +037C +03F8 +01E0 +0060 +0060 +FFFC +ENDCHAR +STARTCHAR uni01F3DD +ENCODING 127965 +BBX 14 14 1 0 +BITMAP +00C0 +7900 +8570 +3B88 +4FE4 +9310 +2188 +2188 +0180 +0180 +0300 +0FE0 +3FF8 +7FFC +ENDCHAR +STARTCHAR uni01F3DE +ENCODING 127966 +BBX 14 14 1 -1 +BITMAP +0040 +00E0 +01F0 +0040 +00E0 +01F0 +0040 +00E0 +01F0 +0040 +E7FC +CFFC +E03C +FF1C +ENDCHAR +STARTCHAR uni01F3DF +ENCODING 127967 +BBX 13 11 1 -1 +BITMAP +0A80 +3FE0 +6AB0 +9748 +F278 +9FC8 +8008 +8008 +8708 +6730 +1FC0 +ENDCHAR +STARTCHAR uni01F3E0 +ENCODING 127968 +BBX 9 10 3 0 +BITMAP +0800 +3E00 +FF80 +D580 +FF80 +D580 +FF80 +D580 +FF80 +FF80 +ENDCHAR +STARTCHAR uni01F3E1 +ENCODING 127969 +BBX 16 10 0 0 +BITMAP +0800 +3E00 +FF9E +D5BF +FFBF +D5BF +FF9E +D58C +FF8C +FFFF +ENDCHAR +STARTCHAR uni01F3E2 +ENCODING 127970 +BBX 13 13 1 0 +BITMAP +FFF8 +FFF8 +D558 +FFF8 +D558 +FFF8 +D558 +FFF8 +D558 +FFF8 +D558 +FFF8 +FDF8 +ENDCHAR +STARTCHAR uni01F3E3 +ENCODING 127971 +BBX 13 14 1 0 +BITMAP +0200 +0F80 +3FE0 +F078 +FFF8 +F078 +FDF8 +FDF8 +FFF8 +D558 +FFF8 +D558 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01F3E4 +ENCODING 127972 +BBX 13 14 1 0 +BITMAP +0200 +0F80 +3FE0 +FFF8 +D998 +D698 +E638 +F078 +FFF8 +D558 +FFF8 +D558 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01F3E5 +ENCODING 127973 +BBX 14 14 1 0 +BITMAP +0300 +0FC0 +3CF0 +FCFC +F03C +F03C +FCFC +FCFC +FFFC +C92C +FFFC +D24C +FFFC +FFFC +ENDCHAR +STARTCHAR uni01F3E6 +ENCODING 127974 +BBX 13 14 1 0 +BITMAP +0200 +0F80 +3DE0 +F078 +E5F8 +F078 +FD38 +F078 +FDF8 +D558 +FFF8 +D558 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01F3E7 +ENCODING 127975 +BBX 14 14 1 -1 +BITMAP +FFFC +FFFC +C874 +B524 +8554 +B574 +FFFC +FFFC +DB6C +FFFC +DB6C +FFFC +DB6C +FFFC +ENDCHAR +STARTCHAR uni01F3E8 +ENCODING 127976 +BBX 13 14 1 0 +BITMAP +0200 +0F80 +3FE0 +F278 +F278 +F078 +F278 +F278 +FFF8 +D558 +FFF8 +D558 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01F3E9 +ENCODING 127977 +BBX 13 14 1 0 +BITMAP +0200 +0F80 +3FE0 +F278 +E038 +F078 +F8F8 +FDF8 +FFF8 +D558 +FFF8 +D558 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01F3EA +ENCODING 127978 +BBX 13 12 1 -1 +BITMAP +FFF8 +9AA8 +EAA8 +D888 +BEA8 +8EA8 +FFF8 +FFF8 +9908 +9908 +99F8 +FFF8 +ENDCHAR +STARTCHAR uni01F3EB +ENCODING 127979 +BBX 13 14 1 -1 +BITMAP +0200 +0F80 +38E0 +F578 +F478 +F778 +F8F8 +FFF8 +FFF8 +D558 +FFF8 +D558 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01F3EC +ENCODING 127980 +BBX 13 15 1 -1 +BITMAP +03F8 +0318 +03F8 +0000 +FFF8 +9558 +9FF8 +9558 +9FF8 +9558 +FFF8 +FFF8 +D558 +D558 +FFF8 +ENDCHAR +STARTCHAR uni01F3ED +ENCODING 127981 +BBX 14 12 1 0 +BITMAP +C000 +C000 +C000 +C000 +C444 +CCCC +DDDC +FFFC +FFFC +EAAC +FFFC +FFFC +ENDCHAR +STARTCHAR uni01F3EE +ENCODING 127982 +BBX 8 13 3 -1 +BITMAP +3C +3C +42 +81 +C3 +BD +C3 +BD +C3 +BD +42 +3C +3C +ENDCHAR +STARTCHAR uni01F3EF +ENCODING 127983 +BBX 16 14 0 0 +BITMAP +0180 +03C0 +1DB8 +0FF0 +3C3C +13C8 +7FFE +3E7C +318C +2FF4 +FFFF +7E7E +7E7E +FFFF +ENDCHAR +STARTCHAR uni01F3F0 +ENCODING 127984 +BBX 16 12 0 0 +BITMAP +AA55 +FE7F +7C3E +6C36 +6C36 +7C3E +AAAA +FFFF +FFFF +FE7F +FE7F +FFFF +ENDCHAR +STARTCHAR uni01F3F1 +ENCODING 127985 +BBX 9 12 3 0 +BITMAP +8000 +F000 +8800 +8780 +F100 +8E00 +8000 +8000 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni01F3F2 +ENCODING 127986 +BBX 9 12 3 0 +BITMAP +8000 +F000 +F800 +FF80 +FF00 +8E00 +8000 +8000 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni01F3F3 +ENCODING 127987 +BBX 9 12 3 0 +BITMAP +8000 +F000 +8800 +8780 +8080 +8080 +F080 +8F00 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni01F3F4 +ENCODING 127988 +BBX 9 12 3 0 +BITMAP +8000 +F000 +F800 +FF80 +FF80 +FF80 +FF80 +8F00 +8000 +8000 +8000 +8000 +ENDCHAR +STARTCHAR uni01F3F5 +ENCODING 127989 +BBX 13 13 1 -1 +BITMAP +0D80 +1240 +1040 +78F0 +8888 +8708 +4890 +8888 +7770 +2220 +4210 +2520 +1DC0 +ENDCHAR +STARTCHAR uni01F3F6 +ENCODING 127990 +BBX 13 13 1 -1 +BITMAP +0D80 +1FC0 +1FC0 +6FB0 +F778 +FFF8 +78F0 +E8B8 +5FD0 +3DE0 +7DF0 +3DE0 +1DC0 +ENDCHAR +STARTCHAR uni01F3F7 +ENCODING 127991 +BBX 14 10 1 0 +BITMAP +0FFC +1004 +7004 +A804 +A804 +A004 +9004 +5FFC +2000 +5000 +ENDCHAR +STARTCHAR uni01F3F8 +ENCODING 127992 +BBX 13 12 1 0 +BITMAP +3C00 +7E00 +FF00 +FF00 +FF00 +7E00 +3C00 +18E0 +18E0 +1950 +1A48 +1BF8 +ENDCHAR +STARTCHAR uni01F3F9 +ENCODING 127993 +BBX 12 12 2 0 +BITMAP +E000 +C060 +A390 +1C20 +1840 +1480 +2300 +2200 +2400 +4800 +5000 +2000 +ENDCHAR +STARTCHAR uni01F3FA +ENCODING 127994 +BBX 7 10 4 0 +BITMAP +7C +AA +44 +82 +82 +82 +44 +44 +28 +38 +ENDCHAR +STARTCHAR uni01F3FB +ENCODING 127995 +BBX 13 13 1 -1 +BITMAP +5550 +AAA8 +4010 +8008 +4A90 +8008 +5550 +8008 +4A90 +8008 +4010 +AAA8 +5550 +ENDCHAR +STARTCHAR uni01F3FC +ENCODING 127996 +BBX 13 13 1 -1 +BITMAP +5550 +AAA8 +4010 +8A88 +5550 +8A88 +5550 +8A88 +5550 +8A88 +4010 +AAA8 +5550 +ENDCHAR +STARTCHAR uni01F3FD +ENCODING 127997 +BBX 13 13 1 -1 +BITMAP +5550 +AAA8 +4010 +8F88 +5550 +9FC8 +4A90 +9FC8 +5550 +8F88 +4010 +AAA8 +5550 +ENDCHAR +STARTCHAR uni01F3FE +ENCODING 127998 +BBX 13 13 1 -1 +BITMAP +5550 +AAA8 +4010 +9FC8 +5550 +9FC8 +5AD0 +9FC8 +5550 +9FC8 +4010 +AAA8 +5550 +ENDCHAR +STARTCHAR uni01F3FF +ENCODING 127999 +BBX 13 13 1 -1 +BITMAP +5550 +AAA8 +4010 +9FC8 +5DD0 +9FC8 +5750 +9FC8 +5DD0 +9FC8 +4010 +AAA8 +5550 +ENDCHAR +STARTCHAR uni01F400 +ENCODING 128000 +BBX 14 9 1 -2 +BITMAP +1000 +3FC0 +5FF0 +FFF0 +FFF8 +2024 +0004 +0078 +0080 +ENDCHAR +STARTCHAR uni01F401 +ENCODING 128001 +BBX 12 8 2 -1 +BITMAP +1000 +3F00 +5FC0 +FFC0 +FFE0 +2090 +0010 +00E0 +ENDCHAR +STARTCHAR uni01F402 +ENCODING 128002 +BBX 15 12 1 0 +BITMAP +A000 +A000 +7800 +DE00 +FFF0 +7FF8 +1FFC +1FFA +1FF8 +1428 +1428 +1428 +ENDCHAR +STARTCHAR uni01F403 +ENCODING 128003 +BBX 15 10 1 0 +BITMAP +A000 +AE00 +7FF0 +DFF8 +FFFC +1FFA +1FF8 +1428 +1428 +1428 +ENDCHAR +STARTCHAR uni01F404 +ENCODING 128004 +BBX 16 11 0 0 +BITMAP +1000 +7800 +5E00 +FFF8 +FFFC +1FFE +1FFD +1FFC +15D4 +1414 +1414 +ENDCHAR +STARTCHAR uni01F405 +ENCODING 128005 +BBX 15 15 0 -2 +BITMAP +0C00 +1E00 +2580 +5078 +4526 +8522 +9942 +6654 +0214 +0120 +0148 +0092 +0062 +0016 +001A +ENDCHAR +STARTCHAR uni01F406 +ENCODING 128006 +BBX 15 15 0 -2 +BITMAP +0C00 +1E00 +2580 +5078 +4006 +8030 +99B6 +6586 +0200 +0130 +00B0 +0046 +0026 +0012 +0012 +ENDCHAR +STARTCHAR uni01F407 +ENCODING 128007 +BBX 14 12 1 0 +BITMAP +0C00 +1C00 +1C00 +7800 +DBE0 +FFF0 +FFF8 +7FF8 +7FFC +3F3C +3EF8 +31F0 +ENDCHAR +STARTCHAR uni01F408 +ENCODING 128008 +BBX 14 12 1 0 +BITMAP +8808 +D808 +F804 +ABE4 +FFF4 +7FF8 +1FF0 +1FF0 +1FD0 +1450 +1450 +2490 +ENDCHAR +STARTCHAR uni01F409 +ENCODING 128009 +BBX 16 16 0 -2 +BITMAP +2B00 +11C0 +0760 +1BD8 +799E +7DBE +F7EF +F3CF +F99F +A995 +8301 +0320 +0630 +0610 +0730 +03E0 +ENDCHAR +STARTCHAR uni01F40A +ENCODING 128010 +BBX 15 6 0 -1 +BITMAP +0C00 +17F0 +FFFC +FFFE +0846 +001C +ENDCHAR +STARTCHAR uni01F40B +ENCODING 128011 +BBX 15 8 1 0 +BITMAP +1E22 +3F36 +7FBE +6F9C +7FFC +7FF8 +CCCC +3330 +ENDCHAR +STARTCHAR uni01F40C +ENCODING 128012 +BBX 14 12 1 0 +BITMAP +8800 +5000 +51E0 +53F0 +77F0 +77F0 +7FF0 +7FE0 +7FC0 +7FF0 +7FF8 +3FFC +ENDCHAR +STARTCHAR uni01F40D +ENCODING 128013 +BBX 14 12 1 0 +BITMAP +7800 +DC00 +FC00 +7C00 +1C00 +1C10 +1998 +3BCC +33EC +366C +3E7C +1C38 +ENDCHAR +STARTCHAR uni01F40E +ENCODING 128014 +BBX 14 12 1 0 +BITMAP +0800 +3800 +5C00 +FC00 +FFD8 +5FFC +1FEC +1FEC +1FE4 +1860 +1450 +2490 +ENDCHAR +STARTCHAR uni01F40F +ENCODING 128015 +BBX 10 13 3 0 +BITMAP +0F00 +1F80 +3CC0 +3840 +3880 +1C00 +7E00 +DF00 +FFC0 +FFC0 +1F80 +0380 +0200 +ENDCHAR +STARTCHAR uni01F410 +ENCODING 128016 +BBX 10 11 3 0 +BITMAP +1800 +2700 +2800 +3C00 +7E00 +DF00 +FFC0 +FFC0 +5F80 +8380 +0200 +ENDCHAR +STARTCHAR uni01F411 +ENCODING 128017 +BBX 16 12 0 0 +BITMAP +7800 +D400 +F400 +F400 +17FE +1001 +1001 +1001 +0FFE +0A14 +0A14 +0A14 +ENDCHAR +STARTCHAR uni01F412 +ENCODING 128018 +BBX 15 12 1 0 +BITMAP +0018 +0024 +3022 +581A +FFC2 +FFF4 +1FF8 +1FF0 +0FE0 +0AA0 +0A50 +14A0 +ENDCHAR +STARTCHAR uni01F413 +ENCODING 128019 +BBX 14 14 1 -1 +BITMAP +5400 +3C0C +5818 +FC1C +3C38 +7FFC +77F8 +7778 +7BB0 +3C70 +1FE0 +0280 +0500 +0F00 +ENDCHAR +STARTCHAR uni01F414 +ENCODING 128020 +BBX 14 13 1 -1 +BITMAP +3000 +5800 +FC10 +3C38 +7FF8 +77F8 +7778 +7BB0 +3C70 +1FE0 +0298 +053C +0F18 +ENDCHAR +STARTCHAR uni01F415 +ENCODING 128021 +BBX 14 10 1 0 +BITMAP +3808 +5C04 +FBE4 +F7F4 +1FF8 +1FF0 +17F0 +1450 +1450 +1450 +ENDCHAR +STARTCHAR uni01F416 +ENCODING 128022 +BBX 14 10 1 0 +BITMAP +1000 +1FCC +3FF4 +6FF8 +FFF8 +FFF8 +7FF8 +1FF0 +1450 +1450 +ENDCHAR +STARTCHAR uni01F417 +ENCODING 128023 +BBX 14 10 1 0 +BITMAP +1780 +1FCC +3FF4 +6FF8 +BFF8 +9FF8 +7FF8 +1FF0 +1450 +1450 +ENDCHAR +STARTCHAR uni01F418 +ENCODING 128024 +BBX 16 12 0 0 +BITMAP +1E00 +3DF0 +6EFC +7F7E +FAFE +EDFF +9FFF +FFFD +9FFC +5B6C +1B6C +1B6C +ENDCHAR +STARTCHAR uni01F419 +ENCODING 128025 +BBX 15 12 0 0 +BITMAP +0380 +07C0 +07C0 +3558 +27C8 +1390 +8FE2 +7FFC +0BA0 +5294 +6AAC +0C60 +ENDCHAR +STARTCHAR uni01F41A +ENCODING 128026 +BBX 14 12 1 0 +BITMAP +0780 +1860 +2010 +4008 +4388 +8444 +8824 +8924 +88C4 +8408 +8610 +79E0 +ENDCHAR +STARTCHAR uni01F41B +ENCODING 128027 +BBX 8 14 4 -1 +BITMAP +24 +99 +7E +3C +FF +3C +FF +3C +FF +3C +FF +3C +FF +18 +ENDCHAR +STARTCHAR uni01F41C +ENCODING 128028 +BBX 13 14 1 -1 +BITMAP +0500 +0880 +0F80 +0F80 +E738 +1FC0 +0F80 +3760 +CF98 +0F80 +3760 +CF98 +0F80 +0700 +ENDCHAR +STARTCHAR uni01F41D +ENCODING 128029 +BBX 16 14 0 -1 +BITMAP +0420 +0240 +13C8 +13C8 +0990 +FFFF +83C1 +4FF2 +324C +4FF2 +1428 +17E8 +2424 +03C0 +ENDCHAR +STARTCHAR uni01F41E +ENCODING 128030 +BBX 16 12 0 0 +BITMAP +0240 +07E0 +0DB0 +1FF8 +DFFB +23C4 +6816 +A245 +2814 +518A +8C31 +03C0 +ENDCHAR +STARTCHAR uni01F41F +ENCODING 128031 +BBX 14 10 1 0 +BITMAP +0200 +0600 +3F04 +7FCC +DFFC +FFFC +3FE4 +7F40 +0E00 +0200 +ENDCHAR +STARTCHAR uni01F420 +ENCODING 128032 +BBX 12 12 2 0 +BITMAP +0300 +0E00 +1E00 +3E30 +7F60 +DFE0 +FFE0 +7F30 +3E00 +0E00 +0600 +0300 +ENDCHAR +STARTCHAR uni01F421 +ENCODING 128033 +BBX 14 12 1 0 +BITMAP +0200 +1F80 +3FC0 +7FE0 +EFEC +FFF8 +7FF8 +FFEC +FFE0 +7FC0 +1F80 +0400 +ENDCHAR +STARTCHAR uni01F422 +ENCODING 128034 +BBX 14 7 1 0 +BITMAP +03C0 +07E0 +6FF0 +BFF8 +FFF8 +1FFC +0A50 +ENDCHAR +STARTCHAR uni01F423 +ENCODING 128035 +BBX 11 15 3 -2 +BITMAP +0F00 +1F80 +17C0 +3FC0 +FFC0 +FFC0 +3FC0 +FFE0 +8020 +8020 +8020 +4040 +4040 +2080 +1F00 +ENDCHAR +STARTCHAR uni01F424 +ENCODING 128036 +BBX 14 14 1 -2 +BITMAP +1C00 +3E00 +2F00 +FF00 +FF00 +3F80 +1FC0 +1FF8 +1FF8 +0FF0 +07F0 +0410 +0E38 +1554 +ENDCHAR +STARTCHAR uni01F425 +ENCODING 128037 +BBX 14 14 1 -2 +BITMAP +0780 +0FC0 +0FC0 +1B60 +FFFC +7CF8 +1FE0 +0FC0 +0FC0 +0780 +0480 +14A0 +0840 +14A0 +ENDCHAR +STARTCHAR uni01F426 +ENCODING 128038 +BBX 13 13 2 0 +BITMAP +1C00 +6E00 +FE00 +3F00 +1F00 +3F00 +3F80 +3FC0 +3FC0 +1FE0 +0FF0 +0AF8 +1F00 +ENDCHAR +STARTCHAR uni01F427 +ENCODING 128039 +BBX 10 12 3 0 +BITMAP +0C00 +1600 +3E00 +1E00 +1E00 +3300 +6180 +E1C0 +E1C0 +B340 +1E00 +3300 +ENDCHAR +STARTCHAR uni01F428 +ENCODING 128040 +BBX 16 10 0 1 +BITMAP +07E0 +6FF6 +FFFF +FBDF +7FFE +1E78 +1C38 +1FF8 +0E70 +07E0 +ENDCHAR +STARTCHAR uni01F429 +ENCODING 128041 +BBX 14 13 1 0 +BITMAP +7000 +7804 +D80C +FC0C +3C08 +7FF8 +7FF8 +7FF8 +3F50 +1450 +36D8 +36D8 +2490 +ENDCHAR +STARTCHAR uni01F42A +ENCODING 128042 +BBX 14 12 1 0 +BITMAP +6000 +A180 +E3C0 +6FF0 +7FF8 +7FF8 +3FFC +1FF4 +0A50 +0A50 +0A50 +0A50 +ENDCHAR +STARTCHAR uni01F42B +ENCODING 128043 +BBX 14 12 1 0 +BITMAP +6000 +A660 +EFF0 +6FF0 +7FF8 +7FF8 +3FFC +1FF4 +0A50 +0A50 +0A50 +0A50 +ENDCHAR +STARTCHAR uni01F42C +ENCODING 128044 +BBX 14 11 1 0 +BITMAP +0380 +0F00 +3F00 +5F80 +7FC0 +FFE0 +0DE0 +0478 +003C +3330 +CCA4 +ENDCHAR +STARTCHAR uni01F42D +ENCODING 128045 +BBX 15 13 0 0 +BITMAP +3018 +4824 +87C2 +8442 +8002 +4444 +C006 +600C +C106 +2388 +1010 +0C60 +0380 +ENDCHAR +STARTCHAR uni01F42E +ENCODING 128046 +BBX 15 12 0 -1 +BITMAP +C386 +E7CE +FFFE +7FFC +1BB0 +1FF0 +1FF0 +1FF0 +0FE0 +0FE0 +0440 +0380 +ENDCHAR +STARTCHAR uni01F42F +ENCODING 128047 +BBX 15 13 0 0 +BITMAP +3018 +4824 +87C2 +8442 +8002 +4444 +701C +610C +4BA4 +3838 +1BB0 +0C60 +0380 +ENDCHAR +STARTCHAR uni01F430 +ENCODING 128048 +BBX 10 13 3 0 +BITMAP +6180 +A140 +9240 +9240 +9240 +9E40 +4080 +5280 +8040 +9240 +8C40 +6180 +1E00 +ENDCHAR +STARTCHAR uni01F431 +ENCODING 128049 +BBX 15 12 0 0 +BITMAP +1010 +2BA8 +2448 +4004 +4004 +4444 +C006 +600C +C546 +2288 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F432 +ENCODING 128050 +BBX 15 14 0 -1 +BITMAP +00E0 +0180 +0300 +03C0 +07C0 +0DF0 +3FF0 +5FFC +FFFC +FFFE +073E +0E3E +1E3C +3838 +ENDCHAR +STARTCHAR uni01F433 +ENCODING 128051 +BBX 15 13 1 -1 +BITMAP +2200 +5500 +0800 +8880 +0000 +1E22 +3F36 +7FBE +6F9C +7FFC +7FF8 +CCCC +3330 +ENDCHAR +STARTCHAR uni01F434 +ENCODING 128052 +BBX 14 12 1 0 +BITMAP +0180 +0140 +0740 +0820 +1410 +2008 +4004 +8384 +8E84 +7048 +0050 +0060 +ENDCHAR +STARTCHAR uni01F435 +ENCODING 128053 +BBX 14 13 1 0 +BITMAP +0300 +0FC0 +1B60 +6018 +ACD4 +ACD4 +6018 +1020 +2010 +2850 +2790 +1860 +0780 +ENDCHAR +STARTCHAR uni01F436 +ENCODING 128054 +BBX 15 12 0 0 +BITMAP +07C0 +1830 +2008 +4824 +9012 +9452 +9012 +5014 +5394 +2928 +0440 +0380 +ENDCHAR +STARTCHAR uni01F437 +ENCODING 128055 +BBX 13 14 1 -1 +BITMAP +F078 +8F88 +8008 +8008 +8888 +4010 +4710 +8888 +9548 +9048 +8F88 +4710 +3060 +0F80 +ENDCHAR +STARTCHAR uni01F438 +ENCODING 128056 +BBX 13 13 1 -1 +BITMAP +3060 +4890 +7FF0 +7FF0 +FFF8 +FFF8 +FFF8 +C018 +7070 +38E0 +0880 +0880 +0700 +ENDCHAR +STARTCHAR uni01F439 +ENCODING 128057 +BBX 15 13 0 -1 +BITMAP +1010 +2BA8 +2448 +4004 +4C64 +4C64 +E00E +4104 +5394 +2008 +D456 +0820 +77DC +ENDCHAR +STARTCHAR uni01F43A +ENCODING 128058 +BBX 16 14 0 -2 +BITMAP +1008 +2814 +45A2 +4662 +8001 +8001 +8C19 +8C19 +8001 +8001 +83C1 +63C6 +1998 +07E0 +ENDCHAR +STARTCHAR uni01F43B +ENCODING 128059 +BBX 15 14 1 -1 +BITMAP +3018 +4BA4 +8442 +8822 +9012 +5454 +2548 +2388 +2388 +1390 +1110 +0AA0 +0440 +0380 +ENDCHAR +STARTCHAR uni01F43C +ENCODING 128060 +BBX 15 12 0 0 +BITMAP +67CC +F83E +E00E +4EE4 +5AB4 +5EF4 +4C64 +4384 +2928 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F43D +ENCODING 128061 +BBX 14 12 1 0 +BITMAP +0300 +0CC0 +1020 +2010 +4008 +8CC4 +9CE4 +9864 +8004 +4008 +3030 +0FC0 +ENDCHAR +STARTCHAR uni01F43E +ENCODING 128062 +BBX 15 10 0 2 +BITMAP +1400 +4000 +1C00 +BE00 +3E50 +1804 +0070 +00FA +00F8 +0030 +ENDCHAR +STARTCHAR uni01F43F +ENCODING 128063 +BBX 14 12 1 0 +BITMAP +0800 +7800 +D818 +F83C +3C3C +3C7C +7E7C +1F70 +1FF0 +0FF0 +0EE0 +1C00 +ENDCHAR +STARTCHAR uni01F440 +ENCODING 128064 +BBX 15 6 0 2 +BITMAP +3838 +4444 +B2B2 +B2B2 +4444 +3838 +ENDCHAR +STARTCHAR uni01F441 +ENCODING 128065 +BBX 15 9 0 2 +BITMAP +07C0 +1830 +2388 +47C4 +87C2 +47C4 +2388 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F442 +ENCODING 128066 +BBX 7 12 5 0 +BITMAP +38 +44 +82 +B2 +4A +2A +32 +34 +84 +48 +48 +30 +ENDCHAR +STARTCHAR uni01F443 +ENCODING 128067 +BBX 12 12 2 0 +BITMAP +1080 +0900 +0900 +0900 +0900 +1080 +1080 +1080 +4020 +8010 +9990 +2640 +ENDCHAR +STARTCHAR uni01F444 +ENCODING 128068 +BBX 15 9 1 0 +BITMAP +0EE0 +1FF0 +3FF8 +6AAC +7FFC +C006 +600C +1FF0 +0FE0 +ENDCHAR +STARTCHAR uni01F445 +ENCODING 128069 +BBX 15 12 1 -1 +BITMAP +0EE0 +1FF0 +3FF8 +6AAC +7FFC +FFFE +783C +1830 +0820 +0410 +0210 +01E0 +ENDCHAR +STARTCHAR uni01F446 +ENCODING 128070 +BBX 9 14 3 -1 +BITMAP +2000 +5000 +5000 +5000 +5000 +D800 +D600 +C500 +8180 +8080 +4080 +2080 +1100 +1100 +ENDCHAR +STARTCHAR uni01F447 +ENCODING 128071 +BBX 9 14 3 -1 +BITMAP +4400 +4400 +8200 +8100 +8080 +C080 +5180 +3580 +0D80 +0500 +0500 +0500 +0500 +0200 +ENDCHAR +STARTCHAR uni01F448 +ENCODING 128072 +BBX 14 9 1 0 +BITMAP +07C0 +7F20 +8010 +7E0C +0400 +0300 +0200 +018C +00F0 +ENDCHAR +STARTCHAR uni01F449 +ENCODING 128073 +BBX 14 9 1 0 +BITMAP +0F80 +13F8 +2004 +C1F8 +0080 +0300 +0100 +C600 +3C00 +ENDCHAR +STARTCHAR uni01F44A +ENCODING 128074 +BBX 10 8 3 1 +BITMAP +7F00 +AA80 +AA80 +AA40 +6F40 +1840 +0B80 +0400 +ENDCHAR +STARTCHAR uni01F44B +ENCODING 128075 +BBX 16 14 0 0 +BITMAP +9012 +9012 +4542 +1AA4 +2AA0 +2AA0 +2AA0 +2AA6 +2AA9 +2032 +2044 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uni01F44C +ENCODING 128076 +BBX 13 14 2 -1 +BITMAP +0100 +1280 +2C80 +6CE0 +A910 +AA48 +AAA8 +AA90 +AAB0 +80A8 +4048 +4010 +2060 +2080 +ENDCHAR +STARTCHAR uni01F44D +ENCODING 128077 +BBX 10 11 3 0 +BITMAP +0400 +0A00 +0A00 +0A00 +7900 +88C0 +F400 +8800 +F000 +8BC0 +7C00 +ENDCHAR +STARTCHAR uni01F44E +ENCODING 128078 +BBX 10 11 3 -1 +BITMAP +0F80 +F440 +03C0 +0440 +0BC0 +C440 +2780 +1400 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uni01F44F +ENCODING 128079 +BBX 14 13 1 -1 +BITMAP +1FF8 +2004 +1DC0 +821C +61E0 +0000 +7000 +0000 +61E0 +821C +1DC0 +2004 +1FF8 +ENDCHAR +STARTCHAR uni01F450 +ENCODING 128080 +BBX 15 13 1 -1 +BITMAP +3018 +5834 +D456 +D456 +8442 +86C2 +8D62 +8102 +9292 +8C62 +4824 +4824 +4824 +ENDCHAR +STARTCHAR uni01F451 +ENCODING 128081 +BBX 13 8 1 2 +BITMAP +8888 +DDD8 +DDD8 +FFF8 +FFF8 +FFF8 +FFF8 +3FE0 +ENDCHAR +STARTCHAR uni01F452 +ENCODING 128082 +BBX 14 12 1 0 +BITMAP +01F0 +07F8 +0FF8 +1830 +1FC0 +1840 +0840 +1860 +6858 +8FC4 +6018 +1FE0 +ENDCHAR +STARTCHAR uni01F453 +ENCODING 128083 +BBX 14 10 1 2 +BITMAP +1CE0 +2490 +4008 +8004 +FCFC +8304 +8304 +8484 +8484 +7878 +ENDCHAR +STARTCHAR uni01F454 +ENCODING 128084 +BBX 13 12 1 0 +BITMAP +18C0 +68B0 +8708 +0500 +0500 +0500 +0880 +0880 +0880 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni01F455 +ENCODING 128085 +BBX 16 11 0 0 +BITMAP +1C38 +23C4 +4002 +8001 +581A +2814 +0810 +0810 +0810 +0810 +0FF0 +ENDCHAR +STARTCHAR uni01F456 +ENCODING 128086 +BBX 9 12 3 0 +BITMAP +FF80 +DD80 +8080 +8880 +9480 +9480 +9480 +9480 +9480 +9480 +9480 +F780 +ENDCHAR +STARTCHAR uni01F457 +ENCODING 128087 +BBX 13 13 1 -1 +BITMAP +38E0 +4710 +8008 +7070 +1040 +18C0 +1740 +1240 +1540 +2520 +2020 +3060 +0F80 +ENDCHAR +STARTCHAR uni01F458 +ENCODING 128088 +BBX 14 13 1 0 +BITMAP +3CF0 +4308 +9A64 +AFD4 +6FD8 +0A40 +0A40 +0A40 +0A40 +0A40 +0A40 +0A40 +0780 +ENDCHAR +STARTCHAR uni01F459 +ENCODING 128089 +BBX 8 12 4 0 +BITMAP +24 +42 +42 +E7 +FF +66 +00 +00 +00 +7E +3C +18 +ENDCHAR +STARTCHAR uni01F45A +ENCODING 128090 +BBX 13 12 1 0 +BITMAP +38E0 +4710 +8008 +E238 +1040 +1240 +0880 +0A80 +1040 +2020 +2020 +3FE0 +ENDCHAR +STARTCHAR uni01F45B +ENCODING 128091 +BBX 10 9 3 0 +BITMAP +0C00 +7F80 +4C80 +4080 +8040 +8040 +8040 +8040 +7F80 +ENDCHAR +STARTCHAR uni01F45C +ENCODING 128092 +BBX 14 11 1 0 +BITMAP +0780 +0840 +1860 +7FF8 +8004 +8004 +BFF4 +8004 +8004 +8004 +7FF8 +ENDCHAR +STARTCHAR uni01F45D +ENCODING 128093 +BBX 13 9 2 1 +BITMAP +3FF0 +5FE8 +FFC8 +8028 +8028 +8028 +8028 +8030 +FFE0 +ENDCHAR +STARTCHAR uni01F45E +ENCODING 128094 +BBX 12 6 2 0 +BITMAP +FC00 +FA00 +81E0 +8010 +FC10 +E3E0 +ENDCHAR +STARTCHAR uni01F45F +ENCODING 128095 +BBX 13 8 1 1 +BITMAP +F800 +F400 +83E0 +8010 +8008 +FFF8 +AAA8 +FFF8 +ENDCHAR +STARTCHAR uni01F460 +ENCODING 128096 +BBX 14 9 1 0 +BITMAP +7C00 +FE00 +BF00 +8780 +61C0 +5860 +461C +4184 +407C +ENDCHAR +STARTCHAR uni01F461 +ENCODING 128097 +BBX 14 8 1 1 +BITMAP +7C00 +8B80 +7040 +2C30 +2238 +2174 +20E8 +0070 +ENDCHAR +STARTCHAR uni01F462 +ENCODING 128098 +BBX 10 12 3 0 +BITMAP +1E00 +1200 +F200 +9200 +9200 +9200 +9200 +9180 +9040 +8DC0 +E200 +DE00 +ENDCHAR +STARTCHAR uni01F463 +ENCODING 128099 +BBX 16 14 0 -1 +BITMAP +1600 +4600 +1F00 +BF68 +3E62 +3CF8 +1CFD +1C7C +1E3C +1E38 +0C38 +0078 +0078 +0030 +ENDCHAR +STARTCHAR uni01F464 +ENCODING 128100 +BBX 12 12 2 0 +BITMAP +0F00 +1F80 +1F80 +1F80 +1F80 +0F00 +3FC0 +7FE0 +FFF0 +FFF0 +FFF0 +FFF0 +ENDCHAR +STARTCHAR uni01F465 +ENCODING 128101 +BBX 15 10 0 0 +BITMAP +1C70 +3EF8 +3EF8 +3EF8 +1C70 +7F7C +FFBE +FFBE +FFBE +FFBE +ENDCHAR +STARTCHAR uni01F466 +ENCODING 128102 +BBX 7 10 4 0 +BITMAP +30 +30 +00 +7C +BA +BA +38 +28 +28 +28 +ENDCHAR +STARTCHAR uni01F467 +ENCODING 128103 +BBX 7 10 4 0 +BITMAP +30 +30 +00 +7C +BA +7C +FE +28 +28 +28 +ENDCHAR +STARTCHAR uni01F468 +ENCODING 128104 +BBX 7 12 4 0 +BITMAP +30 +30 +00 +7C +BA +BA +BA +38 +28 +28 +28 +28 +ENDCHAR +STARTCHAR uni01F469 +ENCODING 128105 +BBX 7 12 4 0 +BITMAP +30 +30 +00 +7C +BA +BA +7C +FE +28 +28 +28 +28 +ENDCHAR +STARTCHAR uni01F46A +ENCODING 128106 +BBX 16 10 0 0 +BITMAP +0660 +0660 +6006 +6776 +0AA8 +7227 +A222 +2552 +5555 +5555 +ENDCHAR +STARTCHAR uni01F46B +ENCODING 128107 +BBX 15 12 0 0 +BITMAP +1830 +1830 +0000 +7C7C +BABA +B93A +B87C +387C +2828 +2828 +2828 +2828 +ENDCHAR +STARTCHAR uni01F46C +ENCODING 128108 +BBX 15 12 0 0 +BITMAP +1830 +1830 +0000 +7C7C +BABA +B93A +B83A +3838 +2828 +2828 +2828 +2828 +ENDCHAR +STARTCHAR uni01F46D +ENCODING 128109 +BBX 15 12 0 0 +BITMAP +1830 +1830 +0000 +7C7C +BABA +B93A +7C7C +7C7C +2828 +2828 +2828 +2828 +ENDCHAR +STARTCHAR uni01F46E +ENCODING 128110 +BBX 10 15 3 -2 +BITMAP +0C00 +1E00 +3B00 +3100 +6000 +7180 +7B80 +FFC0 +4080 +5280 +4080 +5280 +4C80 +2100 +1E00 +ENDCHAR +STARTCHAR uni01F46F +ENCODING 128111 +BBX 14 15 1 -2 +BITMAP +6018 +9024 +5028 +2ED0 +1320 +2850 +5028 +54A8 +5028 +54A8 +5328 +5868 +57A8 +A014 +4008 +ENDCHAR +STARTCHAR uni01F470 +ENCODING 128112 +BBX 16 11 0 1 +BITMAP +03C0 +0C30 +1008 +27E4 +2814 +2A54 +4812 +4A52 +4992 +8C31 +8BD1 +ENDCHAR +STARTCHAR uni01F471 +ENCODING 128113 +BBX 14 12 1 -1 +BITMAP +0EC0 +1320 +2850 +5028 +54A8 +5028 +54A8 +5328 +5868 +57A8 +A014 +4008 +ENDCHAR +STARTCHAR uni01F472 +ENCODING 128114 +BBX 10 11 3 0 +BITMAP +0C00 +3F00 +4080 +FFC0 +FFC0 +8040 +9240 +8040 +4C80 +2100 +1E00 +ENDCHAR +STARTCHAR uni01F473 +ENCODING 128115 +BBX 12 12 2 0 +BITMAP +0F00 +32C0 +4460 +8A90 +9110 +7FE0 +4020 +4920 +4020 +2640 +1080 +0F00 +ENDCHAR +STARTCHAR uni01F474 +ENCODING 128116 +BBX 7 13 6 -1 +BITMAP +18 +34 +24 +78 +70 +7E +72 +72 +92 +90 +90 +98 +C0 +ENDCHAR +STARTCHAR uni01F475 +ENCODING 128117 +BBX 8 14 5 -1 +BITMAP +0C +1E +1A +32 +7C +E8 +2F +29 +49 +F9 +48 +48 +4C +60 +ENDCHAR +STARTCHAR uni01F476 +ENCODING 128118 +BBX 14 12 1 0 +BITMAP +0038 +0044 +0044 +01C4 +0E18 +3020 +40A0 +4F50 +2450 +1228 +F21C +DC00 +ENDCHAR +STARTCHAR uni01F477 +ENCODING 128119 +BBX 13 13 1 0 +BITMAP +0700 +1DC0 +2520 +2520 +4510 +7FF0 +7070 +E538 +E038 +7570 +7270 +38E0 +0700 +ENDCHAR +STARTCHAR uni01F478 +ENCODING 128120 +BBX 15 14 0 -1 +BITMAP +0540 +07C0 +07C0 +1FF0 +3FF8 +3E78 +3838 +729C +701C +3AB8 +3938 +FC7E +F39E +600C +ENDCHAR +STARTCHAR uni01F479 +ENCODING 128121 +BBX 12 15 2 -2 +BITMAP +8610 +C930 +B9D0 +4020 +8010 +B4D0 +B2D0 +8210 +8610 +8010 +4F20 +4920 +4F20 +2040 +1F80 +ENDCHAR +STARTCHAR uni01F47A +ENCODING 128122 +BBX 13 15 1 -2 +BITMAP +0F80 +7FF0 +8008 +B068 +8D88 +A028 +8788 +8788 +8008 +BFE8 +A028 +BFE8 +8008 +4010 +3FE0 +ENDCHAR +STARTCHAR uni01F47B +ENCODING 128123 +BBX 14 14 1 -1 +BITMAP +0780 +1FE0 +3FF0 +6798 +4308 +5B68 +DB6C +E79C +FFFC +FFFC +FFFC +FFFC +F7BC +6318 +ENDCHAR +STARTCHAR uni01F47C +ENCODING 128124 +BBX 16 14 0 -1 +BITMAP +03C0 +0420 +03C0 +0000 +23C4 +6426 +AA55 +A815 +A995 +AC35 +ABD5 +9009 +9009 +500A +ENDCHAR +STARTCHAR uni01F47D +ENCODING 128125 +BBX 10 12 3 0 +BITMAP +3F00 +7F80 +FFC0 +FFC0 +FFC0 +DEC0 +CCC0 +6D80 +7F80 +3F00 +1E00 +0C00 +ENDCHAR +STARTCHAR uni01F47E +ENCODING 128126 +BBX 14 13 1 0 +BITMAP +E01C +E01C +1FE0 +3FF0 +3330 +3330 +3330 +3FF0 +3FF0 +CFCC +CFCC +CCCC +CCCC +ENDCHAR +STARTCHAR uni01F47F +ENCODING 128127 +BBX 14 14 1 -1 +BITMAP +8004 +C00C +E79C +7FF8 +2010 +4848 +4488 +4CC8 +4CC8 +4008 +4788 +2FD0 +1860 +0780 +ENDCHAR +STARTCHAR uni01F480 +ENCODING 128128 +BBX 13 13 1 0 +BITMAP +0F80 +3060 +4010 +4010 +98C8 +BDE8 +BDE8 +98C8 +4010 +4010 +3FE0 +1540 +1FC0 +ENDCHAR +STARTCHAR uni01F481 +ENCODING 128129 +BBX 16 15 0 -2 +BITMAP +0F00 +1F80 +30C0 +2040 +6960 +6060 +6660 +50AB +0F06 +30CA +402A +FFFF +8001 +8001 +FFFF +ENDCHAR +STARTCHAR uni01F482 +ENCODING 128130 +BBX 14 15 1 -2 +BITMAP +1C00 +3E00 +7F00 +7F00 +7F00 +7F00 +3608 +2208 +2208 +1C0C +220C +41FC +C104 +C07C +000C +ENDCHAR +STARTCHAR uni01F483 +ENCODING 128131 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 13 0 -1 +BITMAP +19 +25 +26 +1A +1C +38 +58 +58 +98 +14 +14 +26 +60 +ENDCHAR +STARTCHAR uni01F484 +ENCODING 128132 +BBX 5 12 5 0 +BITMAP +10 +30 +70 +70 +F8 +88 +88 +88 +88 +88 +88 +F8 +ENDCHAR +STARTCHAR uni01F485 +ENCODING 128133 +BBX 13 12 1 0 +BITMAP +0038 +0078 +0078 +0070 +00C0 +0180 +0300 +0000 +FF80 +0F00 +0200 +7C00 +ENDCHAR +STARTCHAR uni01F486 +ENCODING 128134 +BBX 13 14 1 -1 +BITMAP +5050 +5050 +5FD0 +9048 +A028 +B8E8 +A228 +A228 +C318 +4010 +4710 +2020 +1040 +0F80 +ENDCHAR +STARTCHAR uni01F487 +ENCODING 128135 +BBX 13 14 2 -1 +BITMAP +0018 +0738 +00C0 +0738 +0018 +1F00 +3F80 +60C0 +C060 +D160 +C060 +CE60 +E0E0 +DF60 +ENDCHAR +STARTCHAR uni01F488 +ENCODING 128136 +BBX 8 16 4 -2 +BITMAP +3C +7E +7E +FF +4E +5A +72 +66 +4E +5A +72 +66 +FF +7E +7E +3C +ENDCHAR +STARTCHAR uni01F489 +ENCODING 128137 +BBX 7 14 4 -1 +BITMAP +10 +10 +10 +38 +44 +64 +44 +64 +44 +64 +44 +FE +10 +38 +ENDCHAR +STARTCHAR uni01F48A +ENCODING 128138 +BBX 5 12 5 0 +BITMAP +70 +F8 +F8 +F8 +F8 +F8 +88 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni01F48B +ENCODING 128139 +BBX 14 7 1 2 +BITMAP +1CE0 +3FF0 +FFFC +4008 +3FF0 +1FE0 +0FC0 +ENDCHAR +STARTCHAR uni01F48C +ENCODING 128140 +BBX 15 12 0 0 +BITMAP +FFFE +8002 +C286 +A7CA +9392 +8922 +8442 +8AA2 +9112 +A00A +C006 +FFFE +ENDCHAR +STARTCHAR uni01F48D +ENCODING 128141 +BBX 13 16 1 -2 +BITMAP +0F80 +1540 +0A80 +0F80 +3FE0 +78F0 +6030 +E038 +C018 +C018 +C018 +E038 +6030 +78F0 +3FE0 +0F80 +ENDCHAR +STARTCHAR uni01F48E +ENCODING 128142 +BBX 15 13 0 -1 +BITMAP +0380 +0C60 +1010 +3018 +5834 +97D2 +755C +2FE8 +1550 +0BA0 +07C0 +0380 +0100 +ENDCHAR +STARTCHAR uni01F48F +ENCODING 128143 +BBX 14 12 1 0 +BITMAP +0070 +38F8 +453C +821C +9ACC +820C +820C +850C +888C +707C +000C +0004 +ENDCHAR +STARTCHAR uni01F490 +ENCODING 128144 +BBX 11 16 2 -2 +BITMAP +1800 +6600 +5D80 +AB60 +D6A0 +3F40 +C2E0 +3540 +2EA0 +4A00 +0A00 +0A00 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni01F491 +ENCODING 128145 +BBX 14 13 1 0 +BITMAP +0CC0 +1FE0 +1FE0 +1FE0 +0FC0 +0780 +7B78 +FCFC +B4B4 +FCFC +B4B4 +CCCC +7878 +ENDCHAR +STARTCHAR uni01F492 +ENCODING 128146 +BBX 14 14 1 -1 +BITMAP +D800 +F86C +727C +2738 +0210 +0200 +0D80 +3060 +C018 +4210 +4710 +4710 +4710 +7FF0 +ENDCHAR +STARTCHAR uni01F493 +ENCODING 128147 +BBX 16 14 0 -1 +BITMAP +2004 +4002 +9009 +2424 +0E70 +1FF8 +1FF8 +1FF8 +0FF0 +07E0 +13C8 +4992 +2004 +1008 +ENDCHAR +STARTCHAR uni01F494 +ENCODING 128148 +BBX 14 10 1 0 +BITMAP +7878 +FCFC +FEFC +FEFC +7DF8 +3DF0 +1EE0 +0EC0 +0580 +0100 +ENDCHAR +STARTCHAR uni01F495 +ENCODING 128149 +BBX 12 12 2 0 +BITMAP +0360 +07F0 +07F0 +03E0 +01C0 +0080 +6C00 +FE00 +FE00 +7C00 +3800 +1000 +ENDCHAR +STARTCHAR uni01F496 +ENCODING 128150 +BBX 13 12 1 0 +BITMAP +38E0 +7DF0 +FFB8 +EF18 +C7B8 +6EF0 +7C70 +3EE0 +1FC0 +0F80 +0700 +0200 +ENDCHAR +STARTCHAR uni01F497 +ENCODING 128151 +BBX 13 12 1 0 +BITMAP +38E0 +4510 +9AC8 +BDE8 +BFE8 +5FD0 +5FD0 +2FA0 +1740 +0A80 +0500 +0200 +ENDCHAR +STARTCHAR uni01F498 +ENCODING 128152 +BBX 15 14 0 -1 +BITMAP +4000 +E000 +6E38 +1144 +2882 +2402 +2002 +1004 +1004 +0808 +0410 +0220 +0140 +0080 +ENDCHAR +STARTCHAR uni01F499 +ENCODING 128153 +BBX 13 12 1 0 +BITMAP +38E0 +4510 +FFF8 +8008 +FFF8 +4010 +7FF0 +2020 +1FC0 +0880 +0700 +0200 +ENDCHAR +STARTCHAR uni01F49A +ENCODING 128154 +BBX 13 12 1 0 +BITMAP +38E0 +6590 +9248 +C928 +A498 +5250 +4930 +24A0 +1240 +0980 +0500 +0200 +ENDCHAR +STARTCHAR uni01F49B +ENCODING 128155 +BBX 13 12 1 0 +BITMAP +38E0 +4510 +AAA8 +8008 +AAA8 +4010 +5550 +2020 +1540 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni01F49C +ENCODING 128156 +BBX 13 12 2 0 +BITMAP +38E0 +4D30 +9248 +A498 +C928 +5250 +6490 +2920 +1240 +0C80 +0500 +0200 +ENDCHAR +STARTCHAR uni01F49D +ENCODING 128157 +BBX 15 13 1 0 +BITMAP +0060 +3890 +7D10 +FF0C +FFC2 +FFE2 +7FE4 +7FF8 +3FE0 +1FC0 +0F80 +0700 +0200 +ENDCHAR +STARTCHAR uni01F49E +ENCODING 128158 +BBX 15 14 0 -1 +BITMAP +0500 +0FB0 +2700 +2214 +503E +F81C +7008 +2004 +4000 +4014 +2A3E +1F1C +0E28 +04C0 +ENDCHAR +STARTCHAR uni01F49F +ENCODING 128159 +BBX 14 14 1 -1 +BITMAP +1020 +3FF0 +4008 +C00C +4CC8 +5FE8 +5FE8 +5FE8 +4FC8 +4788 +C30C +4008 +3FF0 +1020 +ENDCHAR +STARTCHAR uni01F4A0 +ENCODING 128160 +BBX 12 12 2 0 +BITMAP +0600 +0900 +30C0 +30C0 +4020 +8610 +8610 +4020 +30C0 +30C0 +0900 +0600 +ENDCHAR +STARTCHAR uni01F4A1 +ENCODING 128161 +BBX 16 13 0 0 +BITMAP +4002 +23C4 +0420 +0810 +C813 +0810 +0810 +2424 +4242 +03C0 +02C0 +0340 +0180 +ENDCHAR +STARTCHAR uni01F4A2 +ENCODING 128162 +BBX 12 12 2 0 +BITMAP +1080 +1980 +0F00 +C630 +6060 +30C0 +30C0 +6060 +C630 +0F00 +1980 +1080 +ENDCHAR +STARTCHAR uni01F4A3 +ENCODING 128163 +BBX 12 12 2 0 +BITMAP +0040 +0010 +06C0 +0910 +3C40 +7E00 +FF00 +FF00 +FF00 +FF00 +7E00 +3C00 +ENDCHAR +STARTCHAR uni01F4A4 +ENCODING 128164 +BBX 14 7 1 2 +BITMAP +F7BC +F7BC +318C +6318 +C630 +F7BC +F7BC +ENDCHAR +STARTCHAR uni01F4A5 +ENCODING 128165 +BBX 16 15 0 -1 +BITMAP +0080 +6186 +5A5A +2664 +2004 +1008 +300C +C003 +300C +1008 +2004 +2664 +5A5A +6186 +0100 +ENDCHAR +STARTCHAR uni01F4A6 +ENCODING 128166 +BBX 14 14 1 -1 +BITMAP +0F00 +1080 +2080 +4100 +4600 +9800 +A038 +C0C4 +8104 +0204 +0408 +09F0 +0E00 +0800 +ENDCHAR +STARTCHAR uni01F4A7 +ENCODING 128167 +BBX 7 14 4 -1 +BITMAP +10 +10 +10 +28 +28 +28 +44 +44 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01F4A8 +ENCODING 128168 +BBX 14 14 1 -1 +BITMAP +00E0 +0110 +0108 +0010 +0030 +FC48 +0004 +0004 +FC48 +0030 +0008 +0108 +0110 +00E0 +ENDCHAR +STARTCHAR uni01F4A9 +ENCODING 128169 +BBX 13 13 1 0 +BITMAP +0040 +4080 +2488 +2650 +4510 +19C8 +2220 +2020 +7070 +8F88 +8008 +C018 +3FE0 +ENDCHAR +STARTCHAR uni01F4AA +ENCODING 128170 +BBX 13 13 1 -1 +BITMAP +0F00 +1A80 +1700 +2400 +2800 +2800 +4BC0 +4C30 +8800 +8020 +60C8 +1C30 +03C0 +ENDCHAR +STARTCHAR uni01F4AB +ENCODING 128171 +BBX 13 11 1 0 +BITMAP +7000 +8C00 +8300 +60C0 +0C30 +6D88 +7F88 +1E70 +3F00 +7380 +6180 +ENDCHAR +STARTCHAR uni01F4AC +ENCODING 128172 +BBX 12 12 2 0 +BITMAP +7FE0 +8010 +BFD0 +8010 +BFD0 +8010 +BFD0 +8010 +79E0 +0900 +0A00 +1C00 +ENDCHAR +STARTCHAR uni01F4AD +ENCODING 128173 +BBX 14 13 1 0 +BITMAP +0380 +1C70 +2448 +2008 +4FE4 +4004 +4FE4 +2008 +2448 +1C70 +4380 +A000 +4000 +ENDCHAR +STARTCHAR uni01F4AE +ENCODING 128174 +BBX 15 15 0 -1 +BITMAP +07C0 +1C70 +2448 +4824 +783C +8002 +8002 +C006 +B01A +9012 +700C +4004 +2388 +1C70 +07C0 +ENDCHAR +STARTCHAR uni01F4AF +ENCODING 128175 +BBX 14 12 1 0 +BITMAP +1318 +34A4 +54A4 +A8C4 +2948 +2948 +4630 +4000 +47F0 +1800 +07E0 +3800 +ENDCHAR +STARTCHAR uni01F4B0 +ENCODING 128176 +BBX 11 14 2 -1 +BITMAP +1100 +1B00 +0E00 +1F00 +3B80 +71C0 +6AC0 +EBE0 +F1E0 +FAE0 +EAE0 +F1E0 +7BC0 +1F00 +ENDCHAR +STARTCHAR uni01F4B1 +ENCODING 128177 +BBX 14 14 1 -1 +BITMAP +0680 +0980 +2380 +7044 +A844 +A028 +6028 +307C +2810 +A87C +7010 +2710 +0640 +0580 +ENDCHAR +STARTCHAR uni01F4B2 +ENCODING 128178 +BBX 12 12 2 -1 +BITMAP +0600 +3F80 +7FE0 +E660 +E600 +7FC0 +3FE0 +0670 +C670 +FFE0 +3FC0 +0600 +ENDCHAR +STARTCHAR uni01F4B3 +ENCODING 128179 +BBX 14 11 1 0 +BITMAP +7FF8 +8004 +FFFC +FFFC +8004 +8D24 +96C4 +8004 +8074 +8004 +7FF8 +ENDCHAR +STARTCHAR uni01F4B4 +ENCODING 128180 +BBX 14 11 1 0 +BITMAP +FFFC +8004 +A204 +9404 +8804 +BE04 +8804 +BE04 +8804 +8804 +FFFC +ENDCHAR +STARTCHAR uni01F4B5 +ENCODING 128181 +BBX 14 11 1 0 +BITMAP +FFFC +8804 +9C04 +AA04 +A804 +9C04 +8A04 +AA04 +9C04 +8804 +FFFC +ENDCHAR +STARTCHAR uni01F4B6 +ENCODING 128182 +BBX 14 11 1 0 +BITMAP +FFFC +8004 +8E04 +9104 +BC04 +9004 +BC04 +9104 +8E04 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F4B7 +ENCODING 128183 +BBX 14 11 1 0 +BITMAP +FFFC +8004 +8C04 +9204 +9004 +BC04 +9004 +9004 +BE04 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F4B8 +ENCODING 128184 +BBX 14 10 1 1 +BITMAP +4F88 +AD94 +98E4 +AE94 +A9A4 +B958 +D708 +9100 +1B00 +1F00 +ENDCHAR +STARTCHAR uni01F4B9 +ENCODING 128185 +BBX 14 13 1 0 +BITMAP +1100 +0A00 +0400 +9F00 +C408 +9F10 +C420 +84C0 +C100 +8E00 +D000 +8888 +FFFC +ENDCHAR +STARTCHAR uni01F4BA +ENCODING 128186 +BBX 10 12 3 0 +BITMAP +0080 +0140 +01C0 +0140 +0140 +0240 +0280 +FE80 +8180 +7F00 +7F00 +3F00 +ENDCHAR +STARTCHAR uni01F4BB +ENCODING 128187 +BBX 12 10 3 0 +BITMAP +FFC0 +8040 +8040 +8040 +8040 +FFC0 +1E00 +0000 +FFB0 +FFB0 +ENDCHAR +STARTCHAR uni01F4BC +ENCODING 128188 +BBX 13 10 2 0 +BITMAP +0F80 +0880 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01F4BD +ENCODING 128189 +BBX 12 12 2 0 +BITMAP +FFF0 +F0F0 +C030 +8010 +87F0 +89F0 +89F0 +87F0 +C010 +C030 +F0F0 +FFF0 +ENDCHAR +STARTCHAR uni01F4BE +ENCODING 128190 +BBX 12 12 2 0 +BITMAP +FFE0 +E070 +E370 +E370 +E070 +FFF0 +FFF0 +FFF0 +C030 +D5B0 +C030 +FFF0 +ENDCHAR +STARTCHAR uni01F4BF +ENCODING 128191 +BBX 15 9 0 2 +BITMAP +07C0 +3838 +4004 +8382 +8442 +8382 +4004 +3838 +07C0 +ENDCHAR +STARTCHAR uni01F4C0 +ENCODING 128192 +BBX 15 14 0 -1 +BITMAP +07C0 +3838 +4004 +8382 +8442 +8382 +4004 +3838 +07C0 +0000 +E45C +9452 +9292 +E11C +ENDCHAR +STARTCHAR uni01F4C1 +ENCODING 128193 +BBX 9 12 3 0 +BITMAP +3000 +EC00 +9B00 +8680 +8180 +8080 +8080 +8080 +6080 +1880 +0680 +0180 +ENDCHAR +STARTCHAR uni01F4C2 +ENCODING 128194 +BBX 11 11 1 1 +BITMAP +3800 +2600 +2180 +E060 +9C20 +83A0 +40A0 +40A0 +7060 +0F60 +00E0 +ENDCHAR +STARTCHAR uni01F4C3 +ENCODING 128195 +BBX 12 12 2 -1 +BITMAP +FF00 +8100 +9D00 +8100 +BD00 +8100 +B900 +8100 +8FF0 +4810 +3020 +0FC0 +ENDCHAR +STARTCHAR uni01F4C4 +ENCODING 128196 +BBX 8 12 4 0 +BITMAP +3F +61 +ED +81 +B5 +81 +AD +81 +B9 +81 +81 +FF +ENDCHAR +STARTCHAR uni01F4C5 +ENCODING 128197 +BBX 12 10 2 0 +BITMAP +FFF0 +8010 +AF50 +8010 +AA90 +9550 +AA90 +9550 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F4C6 +ENCODING 128198 +BBX 11 12 2 0 +BITMAP +7FE0 +4460 +7FE0 +4060 +5260 +4D60 +5560 +BAA0 +80A0 +FFA0 +2020 +3FE0 +ENDCHAR +STARTCHAR uni01F4C7 +ENCODING 128199 +BBX 14 13 1 0 +BITMAP +0C00 +1300 +2080 +417C +8284 +C508 +AE10 +9FE0 +7F80 +0C60 +0010 +0010 +7FE0 +ENDCHAR +STARTCHAR uni01F4C8 +ENCODING 128200 +BBX 14 10 1 0 +BITMAP +8000 +C008 +8010 +C020 +80C0 +C100 +8E00 +D000 +8888 +FFFC +ENDCHAR +STARTCHAR uni01F4C9 +ENCODING 128201 +BBX 14 10 1 0 +BITMAP +8000 +D000 +8E00 +C100 +80C0 +C030 +8008 +C000 +8888 +FFFC +ENDCHAR +STARTCHAR uni01F4CA +ENCODING 128202 +BBX 14 10 1 0 +BITMAP +8000 +D800 +9800 +D860 +9860 +DB60 +9B60 +DB60 +9B60 +FFFC +ENDCHAR +STARTCHAR uni01F4CB +ENCODING 128203 +BBX 10 14 3 -1 +BITMAP +0C00 +1200 +6180 +BF40 +8040 +8040 +8040 +8040 +8040 +8040 +8040 +8040 +8040 +7F80 +ENDCHAR +STARTCHAR uni01F4CC +ENCODING 128204 +BBX 11 11 3 0 +BITMAP +0100 +0180 +01C0 +1BE0 +0F00 +0600 +0B00 +1100 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni01F4CD +ENCODING 128205 +BBX 11 11 3 0 +BITMAP +01C0 +03E0 +03E0 +03E0 +03C0 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni01F4CE +ENCODING 128206 +BBX 8 12 4 0 +BITMAP +3C +42 +81 +99 +A5 +A5 +A5 +A5 +A5 +A5 +21 +1E +ENDCHAR +STARTCHAR uni01F4CF +ENCODING 128207 +BBX 14 14 1 -1 +BITMAP +0020 +0050 +0088 +0144 +0208 +0510 +0820 +1440 +2080 +5100 +8200 +4400 +2800 +1000 +ENDCHAR +STARTCHAR uni01F4D0 +ENCODING 128208 +BBX 13 13 1 0 +BITMAP +0008 +0018 +0028 +0048 +00A8 +0108 +0288 +0408 +0A08 +1008 +2828 +4008 +FFF8 +ENDCHAR +STARTCHAR uni01F4D1 +ENCODING 128209 +BBX 11 12 3 0 +BITMAP +FF80 +80E0 +80E0 +8080 +80E0 +80E0 +8080 +8080 +8080 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F4D2 +ENCODING 128210 +BBX 10 11 3 0 +BITMAP +7FC0 +4040 +EF40 +4F40 +E040 +4040 +E040 +4040 +E040 +4040 +7FC0 +ENDCHAR +STARTCHAR uni01F4D3 +ENCODING 128211 +BBX 8 13 4 -1 +BITMAP +0C +34 +44 +FF +81 +BD +A5 +BD +81 +81 +81 +81 +FF +ENDCHAR +STARTCHAR uni01F4D4 +ENCODING 128212 +BBX 9 12 3 0 +BITMAP +7F00 +FF80 +C080 +CC80 +D280 +D280 +ED80 +D280 +D280 +CC80 +C080 +7F80 +ENDCHAR +STARTCHAR uni01F4D5 +ENCODING 128213 +BBX 11 13 2 -1 +BITMAP +3FE0 +4020 +FFA0 +80A0 +BEA0 +BEA0 +80A0 +80A0 +80A0 +80A0 +80A0 +80C0 +FF80 +ENDCHAR +STARTCHAR uni01F4D6 +ENCODING 128214 +BBX 13 11 1 -1 +BITMAP +78F0 +8508 +BA68 +8208 +BAE8 +8208 +B2E8 +8208 +BFE8 +F8F8 +0700 +ENDCHAR +STARTCHAR uni01F4D7 +ENCODING 128215 +BBX 11 13 2 -1 +BITMAP +3FE0 +4020 +FFA0 +92A0 +C9A0 +A4A0 +92A0 +C9A0 +A4A0 +92A0 +C9C0 +A480 +FF80 +ENDCHAR +STARTCHAR uni01F4D8 +ENCODING 128216 +BBX 11 13 2 -1 +BITMAP +3FE0 +4020 +FFA0 +80A0 +FFA0 +80A0 +FFA0 +80A0 +FFA0 +80A0 +FFC0 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F4D9 +ENCODING 128217 +BBX 11 13 2 -1 +BITMAP +3FE0 +4020 +FFA0 +AAA0 +FFA0 +AAA0 +FFA0 +AAA0 +FFA0 +AAA0 +FFC0 +AA80 +FF80 +ENDCHAR +STARTCHAR uni01F4DA +ENCODING 128218 +BBX 12 12 2 0 +BITMAP +1FE0 +2060 +7FA0 +42A0 +42F0 +7FF0 +2130 +2120 +FFE0 +82C0 +82C0 +FF80 +ENDCHAR +STARTCHAR uni01F4DB +ENCODING 128219 +BBX 13 11 1 0 +BITMAP +2220 +5550 +8888 +8008 +9FC8 +9048 +9048 +5FD0 +4010 +3060 +0F80 +ENDCHAR +STARTCHAR uni01F4DC +ENCODING 128220 +BBX 14 8 1 1 +BITMAP +6018 +9024 +9FE4 +9024 +9024 +9024 +A014 +7FF8 +ENDCHAR +STARTCHAR uni01F4DD +ENCODING 128221 +BBX 12 12 2 0 +BITMAP +FC00 +8600 +A700 +8100 +AD00 +8100 +B800 +83F0 +B5F0 +83F0 +8000 +FF00 +ENDCHAR +STARTCHAR uni01F4DE +ENCODING 128222 +BBX 12 11 2 0 +BITMAP +0030 +0070 +00F0 +00F0 +0070 +00E0 +01C0 +3380 +7700 +FE00 +FC00 +ENDCHAR +STARTCHAR uni01F4DF +ENCODING 128223 +BBX 14 9 1 1 +BITMAP +7FFC +FFFC +A04C +A04C +BFCC +800C +806C +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F4E0 +ENCODING 128224 +BBX 14 15 1 -2 +BITMAP +0FF8 +0808 +0B28 +0808 +0AC8 +1FFC +F004 +B004 +B574 +B074 +B074 +F004 +5FFC +4800 +3000 +ENDCHAR +STARTCHAR uni01F4E1 +ENCODING 128225 +BBX 10 11 3 0 +BITMAP +0C00 +1280 +1100 +1A80 +1880 +0C40 +1E40 +1B80 +1800 +7E00 +FF00 +ENDCHAR +STARTCHAR uni01F4E2 +ENCODING 128226 +BBX 15 11 1 1 +BITMAP +0030 +01C8 +0384 +CF04 +FF32 +FF32 +FF32 +CF04 +0384 +01C8 +0030 +ENDCHAR +STARTCHAR uni01F4E3 +ENCODING 128227 +BBX 14 9 1 0 +BITMAP +0088 +0344 +0D54 +F154 +8154 +F154 +0D44 +0348 +0080 +ENDCHAR +STARTCHAR uni01F4E4 +ENCODING 128228 +BBX 13 13 1 0 +BITMAP +0100 +0380 +07C0 +0380 +0380 +0000 +0FF8 +1818 +2828 +4FC8 +9090 +A0A0 +FFC0 +ENDCHAR +STARTCHAR uni01F4E5 +ENCODING 128229 +BBX 13 13 1 0 +BITMAP +0380 +0380 +07C0 +0380 +0100 +0000 +0FF8 +1818 +2828 +4FC8 +9090 +A0A0 +FFC0 +ENDCHAR +STARTCHAR uni01F4E6 +ENCODING 128230 +BBX 12 14 2 -1 +BITMAP +3180 +4A40 +4C80 +3FF0 +1F30 +2650 +4990 +FF10 +8110 +8110 +8120 +8140 +8180 +FF00 +ENDCHAR +STARTCHAR uni01F4E7 +ENCODING 128231 +BBX 14 10 1 0 +BITMAP +FFFC +C00C +A014 +97A4 +8404 +8704 +9424 +A794 +C00C +FFFC +ENDCHAR +STARTCHAR uni01F4E8 +ENCODING 128232 +BBX 15 15 1 -2 +BITMAP +2222 +2222 +4444 +4444 +0000 +FFFC +C00C +A014 +9024 +8844 +8CC4 +9324 +A014 +C00C +FFFC +ENDCHAR +STARTCHAR uni01F4E9 +ENCODING 128233 +BBX 14 15 1 -2 +BITMAP +0300 +0300 +0FC0 +0780 +0300 +FFFC +C00C +A014 +9024 +8844 +8CC4 +9324 +A014 +C00C +FFFC +ENDCHAR +STARTCHAR uni01F4EA +ENCODING 128234 +BBX 13 14 1 -1 +BITMAP +00E0 +0310 +0C08 +3008 +4068 +B0E8 +8968 +8A08 +8810 +8860 +89C0 +6EC0 +18C0 +00C0 +ENDCHAR +STARTCHAR uni01F4EB +ENCODING 128235 +BBX 13 14 1 -1 +BITMAP +00E0 +0310 +0C08 +3388 +4388 +B208 +8A08 +8A08 +8810 +8860 +89C0 +6EC0 +18C0 +00C0 +ENDCHAR +STARTCHAR uni01F4EC +ENCODING 128236 +BBX 15 14 0 -1 +BITMAP +0038 +00C4 +0302 +0CE2 +10E2 +3C82 +3E82 +3682 +3604 +3618 +3670 +5FB0 +8630 +7830 +ENDCHAR +STARTCHAR uni01F4ED +ENCODING 128237 +BBX 15 14 0 -1 +BITMAP +0038 +00C4 +0302 +0C02 +101A +3C3A +3E5A +3E82 +3E04 +3E18 +3E70 +5FB0 +8630 +7830 +ENDCHAR +STARTCHAR uni01F4EE +ENCODING 128238 +BBX 14 13 1 -1 +BITMAP +03FC +FE04 +C204 +A204 +9204 +AE04 +C204 +FE04 +0204 +0204 +0204 +0204 +03FC +ENDCHAR +STARTCHAR uni01F4EF +ENCODING 128239 +BBX 15 8 1 2 +BITMAP +8E20 +9B30 +D178 +FBFC +7FFE +7FF0 +3FC0 +0F00 +ENDCHAR +STARTCHAR uni01F4F0 +ENCODING 128240 +BBX 12 14 2 -1 +BITMAP +00E0 +0720 +3820 +FFF0 +8010 +9B90 +8010 +BAD0 +B810 +BBD0 +8010 +B6D0 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F4F1 +ENCODING 128241 +BBX 5 12 5 0 +BITMAP +40 +40 +F8 +88 +88 +88 +F8 +D8 +A8 +D8 +A8 +F8 +ENDCHAR +STARTCHAR uni01F4F2 +ENCODING 128242 +BBX 14 12 1 0 +BITMAP +0020 +0020 +087C +0C44 +FE44 +FF44 +FF7C +FE6C +0C54 +086C +0054 +007C +ENDCHAR +STARTCHAR uni01F4F3 +ENCODING 128243 +BBX 13 12 1 0 +BITMAP +0400 +0400 +0F80 +0880 +0880 +28A0 +AFA8 +ADA8 +2AA0 +0D80 +0A80 +0F80 +ENDCHAR +STARTCHAR uni01F4F4 +ENCODING 128244 +BBX 15 12 1 0 +BITMAP +4000 +4000 +F800 +8800 +8800 +8936 +FAA4 +DAB6 +AAA4 +D924 +A800 +F800 +ENDCHAR +STARTCHAR uni01F4F5 +ENCODING 128245 +BBX 11 12 2 0 +BITMAP +0800 +8820 +5F40 +3180 +1100 +1B00 +1F00 +1B00 +1500 +3B80 +5540 +9F20 +ENDCHAR +STARTCHAR uni01F4F6 +ENCODING 128246 +BBX 15 12 0 0 +BITMAP +FFC6 +CCC6 +6D86 +3F06 +1E36 +0C36 +0C36 +0C36 +0DB6 +0DB6 +0DB6 +0DB6 +ENDCHAR +STARTCHAR uni01F4F7 +ENCODING 128247 +BBX 14 10 1 0 +BITMAP +6798 +F87C +8FC4 +F87C +F33C +F4BC +F4BC +F33C +8844 +FFFC +ENDCHAR +STARTCHAR uni01F4F8 +ENCODING 128248 +BBX 16 13 0 0 +BITMAP +0010 +0010 +0028 +67C4 +F983 +8FC4 +F86C +F33C +F4BC +F4BC +F33C +8844 +FFFC +ENDCHAR +STARTCHAR uni01F4F9 +ENCODING 128249 +BBX 14 10 1 2 +BITMAP +0004 +0018 +1FF8 +9C34 +FC30 +FFF0 +FFF0 +FFF0 +9FF0 +1FF0 +ENDCHAR +STARTCHAR uni01F4FA +ENCODING 128250 +BBX 12 13 2 0 +BITMAP +1080 +0900 +0600 +0F00 +FFF0 +C0D0 +8070 +8050 +8070 +C0D0 +FFF0 +30C0 +2040 +ENDCHAR +STARTCHAR uni01F4FB +ENCODING 128251 +BBX 12 12 2 0 +BITMAP +01C0 +0E00 +7000 +8000 +FFF0 +AA10 +D650 +ABF0 +D7F0 +AB50 +FFF0 +6060 +ENDCHAR +STARTCHAR uni01F4FC +ENCODING 128252 +BBX 14 9 1 0 +BITMAP +FFFC +FFFC +8844 +9864 +B874 +B874 +9864 +8844 +FFFC +ENDCHAR +STARTCHAR uni01F4FD +ENCODING 128253 +BBX 14 13 1 0 +BITMAP +0060 +0090 +3168 +4968 +B490 +B460 +4880 +3FC0 +3FCC +3FFC +3FFC +3FCC +3FC0 +ENDCHAR +STARTCHAR uni01F4FE +ENCODING 128254 +BBX 15 13 0 0 +BITMAP +0004 +0004 +0004 +0008 +07C8 +0C68 +7FFC +FABE +CFE6 +B45A +B7DA +CC66 +7FFC +ENDCHAR +STARTCHAR uni01F4FF +ENCODING 128255 +BBX 11 11 2 0 +BITMAP +07C0 +0820 +1020 +1020 +2040 +2080 +4100 +8100 +8100 +4200 +3C00 +ENDCHAR +STARTCHAR uni01F500 +ENCODING 128256 +BBX 15 12 0 0 +BITMAP +0008 +F07C +F8FE +FDFC +1BC8 +0780 +0F00 +1EC8 +FDFC +F8FE +F07C +0008 +ENDCHAR +STARTCHAR uni01F501 +ENCODING 128257 +BBX 12 12 2 0 +BITMAP +0100 +3F80 +7FC0 +FF80 +E120 +E070 +E070 +4870 +1FF0 +3FE0 +1FC0 +0800 +ENDCHAR +STARTCHAR uni01F502 +ENCODING 128258 +BBX 12 12 2 0 +BITMAP +0100 +3F80 +7FC0 +FF80 +C120 +B870 +4470 +B270 +92F0 +92E0 +45C0 +3800 +ENDCHAR +STARTCHAR uni01F503 +ENCODING 128259 +BBX 12 12 2 0 +BITMAP +0780 +0FC0 +27E0 +70E0 +F8E0 +70E0 +70E0 +71F0 +70E0 +7E40 +3F00 +1E00 +ENDCHAR +STARTCHAR uni01F504 +ENCODING 128260 +BBX 12 12 2 0 +BITMAP +1E00 +3F00 +7E40 +70E0 +71F0 +70E0 +70E0 +F8E0 +70E0 +27E0 +0FC0 +0780 +ENDCHAR +STARTCHAR uni01F505 +ENCODING 128261 +BBX 9 9 3 1 +BITMAP +0800 +4100 +1C00 +2200 +A280 +2200 +1C00 +4100 +0800 +ENDCHAR +STARTCHAR uni01F506 +ENCODING 128262 +BBX 11 11 2 0 +BITMAP +0400 +4440 +2080 +0E00 +1100 +D160 +1100 +0E00 +2080 +4440 +0400 +ENDCHAR +STARTCHAR uni01F507 +ENCODING 128263 +BBX 10 10 3 0 +BITMAP +8200 +4600 +2E00 +7E00 +7E00 +7E00 +7E00 +0F00 +0680 +0240 +ENDCHAR +STARTCHAR uni01F508 +ENCODING 128264 +BBX 6 10 5 0 +BITMAP +04 +0C +1C +FC +FC +FC +FC +1C +0C +04 +ENDCHAR +STARTCHAR uni01F509 +ENCODING 128265 +BBX 10 10 3 0 +BITMAP +0400 +0C00 +1C80 +FC40 +FC40 +FC40 +FC40 +1C80 +0C00 +0400 +ENDCHAR +STARTCHAR uni01F50A +ENCODING 128266 +BBX 13 10 1 0 +BITMAP +0420 +0C90 +1C48 +FD28 +FCA8 +FCA8 +FD28 +1C48 +0C90 +0420 +ENDCHAR +STARTCHAR uni01F50B +ENCODING 128267 +BBX 7 12 4 0 +BITMAP +38 +FE +EE +C6 +EE +FE +FE +FE +FE +C6 +FE +FE +ENDCHAR +STARTCHAR uni01F50C +ENCODING 128268 +BBX 13 12 1 0 +BITMAP +5000 +5000 +F8F0 +F998 +F908 +7108 +2108 +2108 +2108 +2108 +3308 +1E08 +ENDCHAR +STARTCHAR uni01F50D +ENCODING 128269 +BBX 12 12 2 0 +BITMAP +1C00 +7F00 +6300 +C180 +C580 +C980 +6300 +7F80 +1DC0 +00E0 +0070 +0020 +ENDCHAR +STARTCHAR uni01F50E +ENCODING 128270 +BBX 12 12 2 0 +BITMAP +0380 +0FE0 +0C60 +1830 +18B0 +1930 +0C60 +1FE0 +3B80 +7000 +E000 +4000 +ENDCHAR +STARTCHAR uni01F50F +ENCODING 128271 +BBX 13 15 1 -2 +BITMAP +0F80 +1040 +2F20 +30F8 +C040 +FFC0 +C040 +30F8 +2F20 +2020 +3FE0 +3FE0 +3FE0 +3FE0 +3FE0 +ENDCHAR +STARTCHAR uni01F510 +ENCODING 128272 +BBX 14 13 1 -1 +BITMAP +1838 +247C +426C +427C +4238 +4238 +FF18 +FF38 +FF18 +FF38 +FF18 +FF38 +FF18 +ENDCHAR +STARTCHAR uni01F511 +ENCODING 128273 +BBX 15 8 0 2 +BITMAP +3C00 +7E00 +FF00 +CFFE +CFFE +FF36 +7E00 +3C00 +ENDCHAR +STARTCHAR uni01F512 +ENCODING 128274 +BBX 10 12 3 0 +BITMAP +1E00 +3F00 +7380 +6180 +6180 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +ENDCHAR +STARTCHAR uni01F513 +ENCODING 128275 +BBX 15 12 0 0 +BITMAP +0078 +00FC +01CE +0186 +0186 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +FFC0 +ENDCHAR +STARTCHAR uni01F514 +ENCODING 128276 +BBX 12 12 2 0 +BITMAP +0F00 +1F80 +3FC0 +3FC0 +3FC0 +3FC0 +3FC0 +7FE0 +FFF0 +FFF0 +0000 +0600 +ENDCHAR +STARTCHAR uni01F515 +ENCODING 128277 +BBX 14 14 1 -1 +BITMAP +8000 +4780 +2FC0 +1FE0 +1FE0 +1FE0 +1FE0 +1FE0 +3FF0 +7FF8 +7FF8 +0010 +0308 +0004 +ENDCHAR +STARTCHAR uni01F516 +ENCODING 128278 +BBX 8 13 4 0 +BITMAP +38 +44 +9F +91 +95 +51 +51 +51 +51 +91 +15 +1B +11 +ENDCHAR +STARTCHAR uni01F517 +ENCODING 128279 +BBX 14 14 1 -1 +BITMAP +0018 +0024 +0044 +0088 +00D0 +00E0 +0100 +0200 +1C00 +2C00 +4400 +8800 +9000 +6000 +ENDCHAR +STARTCHAR uni01F518 +ENCODING 128280 +BBX 12 12 2 0 +BITMAP +0F00 +3FC0 +7FE0 +70A0 +E650 +EF50 +EF50 +E650 +70A0 +6F20 +30C0 +0F00 +ENDCHAR +STARTCHAR uni01F519 +ENCODING 128281 +BBX 14 14 1 0 +BITMAP +1000 +3000 +7FFC +FFFC +FFFC +7FFC +3000 +1000 +0000 +C454 +AA94 +CE98 +AA94 +CA54 +ENDCHAR +STARTCHAR uni01F51A +ENCODING 128282 +BBX 14 14 1 0 +BITMAP +1000 +3000 +7FFC +FFFC +FFFC +7FFC +3000 +1000 +0000 +E970 +8948 +ED48 +8B48 +E970 +ENDCHAR +STARTCHAR uni01F51B +ENCODING 128283 +BBX 14 14 1 0 +BITMAP +1020 +3030 +7FF8 +FFFC +FFFC +7FF8 +3030 +1020 +0000 +3A50 +2A50 +2B50 +2AC0 +3A50 +ENDCHAR +STARTCHAR uni01F51C +ENCODING 128284 +BBX 16 14 0 0 +BITMAP +0008 +000C +FFFE +FFFF +FFFF +FFFE +000C +0008 +0000 +EEE9 +8AA9 +EAAD +2AAB +EEE9 +ENDCHAR +STARTCHAR uni01F51D +ENCODING 128285 +BBX 12 14 2 0 +BITMAP +0600 +0F00 +1F80 +3FC0 +0F00 +0F00 +0F00 +0F00 +0000 +E660 +4950 +4960 +4940 +4640 +ENDCHAR +STARTCHAR uni01F51E +ENCODING 128286 +BBX 14 14 1 -1 +BITMAP +0FC0 +1020 +24D0 +6D28 +5528 +8D24 +86C4 +8524 +85A4 +4568 +4528 +2ED0 +1020 +0FC0 +ENDCHAR +STARTCHAR uni01F51F +ENCODING 128287 +BBX 14 14 1 -1 +BITMAP +7FF8 +C00C +BFF4 +A014 +A494 +AD54 +A554 +A554 +A554 +AE94 +A014 +BFF4 +C00C +7FF8 +ENDCHAR +STARTCHAR uni01F520 +ENCODING 128288 +BBX 12 14 2 -1 +BITMAP +FC00 +CDC0 +B520 +85C0 +B520 +B5C0 +FC00 +03F0 +3A30 +42D0 +42D0 +42D0 +3A30 +03F0 +ENDCHAR +STARTCHAR uni01F521 +ENCODING 128289 +BBX 12 14 2 -1 +BITMAP +FC00 +FD00 +FD00 +C5C0 +B520 +C5C0 +FC00 +03F0 +03D0 +03D0 +3B10 +42D0 +3B10 +03F0 +ENDCHAR +STARTCHAR uni01F522 +ENCODING 128290 +BBX 12 14 2 -1 +BITMAP +FC00 +EDC0 +CC20 +ECC0 +ED00 +85E0 +FC00 +03F0 +73B0 +0B30 +32B0 +0A10 +73B0 +03F0 +ENDCHAR +STARTCHAR uni01F523 +ENCODING 128291 +BBX 14 14 1 -1 +BITMAP +FE00 +8230 +FE20 +8220 +EEE0 +EEE0 +FE00 +01FC +399C +45EC +5DDC +41FC +3DDC +01FC +ENDCHAR +STARTCHAR uni01F524 +ENCODING 128292 +BBX 16 11 0 0 +BITMAP +FC00 +CC00 +B7E0 +8660 +B6BF +B679 +FEB7 +0237 +03F7 +0019 +001F +ENDCHAR +STARTCHAR uni01F525 +ENCODING 128293 +BBX 10 10 3 0 +BITMAP +0800 +1A00 +1E00 +3F00 +BF40 +F7C0 +FBC0 +F3C0 +6180 +3300 +ENDCHAR +STARTCHAR uni01F526 +ENCODING 128294 +BBX 14 9 1 2 +BITMAP +8000 +4000 +2780 +0A7C +EE04 +0A7C +2780 +4000 +8000 +ENDCHAR +STARTCHAR uni01F527 +ENCODING 128295 +BBX 12 12 2 0 +BITMAP +3000 +1800 +9800 +F800 +7C00 +0E00 +0700 +03E0 +01F0 +0190 +0180 +00C0 +ENDCHAR +STARTCHAR uni01F528 +ENCODING 128296 +BBX 13 12 1 0 +BITMAP +0E00 +3C00 +3800 +7C00 +EE00 +4700 +0380 +01C0 +00E0 +0070 +0038 +0010 +ENDCHAR +STARTCHAR uni01F529 +ENCODING 128297 +BBX 13 13 1 -1 +BITMAP +1C00 +2200 +4200 +8400 +8A20 +9150 +6888 +0510 +0220 +0450 +0888 +0550 +0220 +ENDCHAR +STARTCHAR uni01F52A +ENCODING 128298 +BBX 12 13 2 0 +BITMAP +8000 +C000 +A000 +9000 +8800 +4400 +4200 +2100 +2380 +15C0 +08E0 +0070 +0020 +ENDCHAR +STARTCHAR uni01F52B +ENCODING 128299 +BBX 12 8 2 0 +BITMAP +FFE0 +FFF0 +7FE0 +0AE0 +07F0 +0070 +0070 +0070 +ENDCHAR +STARTCHAR uni01F52C +ENCODING 128300 +BBX 9 12 3 0 +BITMAP +0180 +0380 +0700 +0E00 +1D00 +1880 +0080 +0080 +FF00 +0100 +3D00 +FF00 +ENDCHAR +STARTCHAR uni01F52D +ENCODING 128301 +BBX 11 13 3 -1 +BITMAP +3800 +7400 +6260 +41E0 +20C0 +1840 +1C20 +3C40 +5A80 +5500 +9400 +9200 +9200 +ENDCHAR +STARTCHAR uni01F52E +ENCODING 128302 +BBX 12 13 2 -1 +BITMAP +0F00 +1080 +2340 +40A0 +40A0 +4020 +4020 +2040 +30C0 +7FE0 +FFF0 +FFF0 +7FE0 +ENDCHAR +STARTCHAR uni01F52F +ENCODING 128303 +BBX 13 13 1 -1 +BITMAP +0200 +0500 +0880 +FFF8 +4890 +3060 +1240 +3060 +4890 +FFF8 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni01F530 +ENCODING 128304 +BBX 10 12 3 0 +BITMAP +C0C0 +A1C0 +93C0 +8FC0 +87C0 +87C0 +87C0 +87C0 +4780 +2700 +1600 +0C00 +ENDCHAR +STARTCHAR uni01F531 +ENCODING 128305 +BBX 13 14 1 -1 +BITMAP +0200 +0700 +0F80 +0700 +E238 +E238 +F778 +3FE0 +9FC8 +EFB8 +7FF0 +1FC0 +0700 +0200 +ENDCHAR +STARTCHAR uni01F532 +ENCODING 128306 +BBX 12 12 2 0 +BITMAP +7FE0 +8030 +BFF0 +BF70 +BF70 +BF70 +BF70 +BF70 +A070 +BFF0 +FFF0 +7FE0 +ENDCHAR +STARTCHAR uni01F533 +ENCODING 128307 +BBX 12 12 2 0 +BITMAP +7FE0 +8010 +8050 +9F50 +9050 +9050 +9050 +9050 +8050 +BFD0 +8010 +7FE0 +ENDCHAR +STARTCHAR uni01F534 +ENCODING 128308 +BBX 14 14 1 -1 +BITMAP +0780 +1AE0 +2AB0 +6AA8 +6AA8 +AAAC +AAAC +AAAC +AAAC +6AA8 +6AA8 +2AB0 +1AE0 +0780 +ENDCHAR +STARTCHAR uni01F535 +ENCODING 128309 +BBX 14 14 1 -1 +BITMAP +0780 +1860 +3FF0 +4008 +7FF8 +8004 +FFFC +8004 +FFFC +4008 +7FF8 +2010 +1FE0 +0780 +ENDCHAR +STARTCHAR uni01F536 +ENCODING 128310 +BBX 13 13 1 0 +BITMAP +0200 +0500 +0F80 +1540 +3FE0 +5550 +FFF8 +5550 +3FE0 +1540 +0F80 +0500 +0200 +ENDCHAR +STARTCHAR uni01F537 +ENCODING 128311 +BBX 13 13 1 0 +BITMAP +0200 +0500 +0F80 +1040 +3FE0 +4010 +FFF8 +4010 +3FE0 +1040 +0F80 +0500 +0200 +ENDCHAR +STARTCHAR uni01F538 +ENCODING 128312 +BBX 9 9 3 0 +BITMAP +0800 +1400 +3E00 +5500 +FF80 +5500 +3E00 +1400 +0800 +ENDCHAR +STARTCHAR uni01F539 +ENCODING 128313 +BBX 9 9 3 0 +BITMAP +0800 +1400 +3E00 +4100 +FF80 +4100 +3E00 +1400 +0800 +ENDCHAR +STARTCHAR uni01F53A +ENCODING 128314 +BBX 13 13 1 0 +BITMAP +0200 +0700 +0700 +0A80 +0A80 +1AC0 +1AC0 +2AA0 +2AA0 +6AB0 +6AB0 +AAA8 +FFF8 +ENDCHAR +STARTCHAR uni01F53B +ENCODING 128315 +BBX 13 13 1 0 +BITMAP +FFF8 +AAA8 +6AB0 +6AB0 +2AA0 +2AA0 +1AC0 +1AC0 +0A80 +0A80 +0700 +0700 +0200 +ENDCHAR +STARTCHAR uni01F53C +ENCODING 128316 +BBX 9 9 3 0 +BITMAP +0800 +1C00 +1C00 +2A00 +2A00 +6B00 +6B00 +AA80 +FF80 +ENDCHAR +STARTCHAR uni01F53D +ENCODING 128317 +BBX 9 9 3 0 +BITMAP +FF80 +AA80 +6B00 +6B00 +2A00 +2A00 +1C00 +1C00 +0800 +ENDCHAR +STARTCHAR uni01F53E +ENCODING 128318 +BBX 13 13 2 -1 +BITMAP +0F00 +30C0 +4020 +4030 +8010 +8018 +8018 +8018 +4038 +4030 +30F0 +1FE0 +0780 +ENDCHAR +STARTCHAR uni01F53F +ENCODING 128319 +BBX 13 13 2 0 +BITMAP +0780 +1FE0 +30F0 +4030 +4038 +8018 +8018 +8018 +8010 +4030 +4020 +30C0 +0F00 +ENDCHAR +STARTCHAR uni01F540 +ENCODING 128320 +BBX 16 16 0 -2 +BITMAP +07E0 +1818 +2184 +43C2 +43C2 +8181 +9999 +BFFD +BFFD +9999 +8181 +43C2 +43C2 +2184 +1818 +07E0 +ENDCHAR +STARTCHAR uni01F541 +ENCODING 128321 +BBX 16 14 0 -2 +BITMAP +0180 +03C0 +03C0 +0180 +1998 +3FFC +BFFD +9999 +8181 +43C2 +43C2 +2184 +1818 +07E0 +ENDCHAR +STARTCHAR uni01F542 +ENCODING 128322 +BBX 14 14 1 -1 +BITMAP +0300 +0780 +0780 +0300 +0300 +6318 +FFFC +FFFC +6318 +0300 +0300 +0780 +0780 +0300 +ENDCHAR +STARTCHAR uni01F543 +ENCODING 128323 +BBX 11 12 2 0 +BITMAP +0F00 +30A0 +4060 +9820 +9800 +4180 +4180 +9800 +9820 +4060 +30A0 +0F00 +ENDCHAR +STARTCHAR uni01F544 +ENCODING 128324 +BBX 11 12 2 0 +BITMAP +1E00 +A180 +C040 +8320 +0320 +3040 +3040 +0320 +8320 +C040 +A180 +1E00 +ENDCHAR +STARTCHAR uni01F545 +ENCODING 128325 +BBX 12 14 2 -1 +BITMAP +7830 +FE30 +C7F0 +C1E0 +0600 +C530 +C630 +C430 +E470 +F9F0 +CF30 +C630 +C630 +CF30 +ENDCHAR +STARTCHAR uni01F546 +ENCODING 128326 +BBX 10 14 3 -1 +BITMAP +1E00 +1200 +1200 +F3C0 +8040 +8040 +F3C0 +1200 +1200 +1200 +1200 +1200 +1200 +1E00 +ENDCHAR +STARTCHAR uni01F547 +ENCODING 128327 +BBX 10 14 3 -1 +BITMAP +1E00 +1E00 +1E00 +FFC0 +FFC0 +FFC0 +FFC0 +1E00 +1E00 +1E00 +1E00 +1E00 +1E00 +1E00 +ENDCHAR +STARTCHAR uni01F548 +ENCODING 128328 +BBX 10 14 3 -1 +BITMAP +0C00 +1E00 +2D00 +4C80 +FFC0 +FFC0 +4C80 +2D00 +1E00 +0C00 +0C00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni01F549 +ENCODING 128329 +BBX 14 14 1 -1 +BITMAP +0020 +0070 +0120 +398C +7CFC +2678 +0600 +1C78 +1EFC +87CC +860C +CE9C +7CF8 +3870 +ENDCHAR +STARTCHAR uni01F54A +ENCODING 128330 +BBX 14 13 1 -2 +BITMAP +F030 +8C48 +424C +2290 +1120 +0820 +0820 +0840 +1080 +E300 +8C00 +5000 +3000 +ENDCHAR +STARTCHAR uni01F54B +ENCODING 128331 +BBX 13 13 1 0 +BITMAP +0200 +0F80 +3FE0 +FDF8 +F078 +C218 +0F80 +3FE0 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01F54C +ENCODING 128332 +BBX 12 13 2 0 +BITMAP +4000 +A100 +A100 +E6C0 +A820 +B010 +B010 +AFE0 +B010 +B010 +B390 +B390 +FFF0 +ENDCHAR +STARTCHAR uni01F54D +ENCODING 128333 +BBX 13 13 1 0 +BITMAP +E038 +A228 +E538 +AAA8 +B768 +A728 +A228 +A028 +A228 +A728 +A728 +A728 +FFF8 +ENDCHAR +STARTCHAR uni01F54E +ENCODING 128334 +BBX 15 11 0 0 +BITMAP +D556 +D556 +D396 +C926 +A7CA +5114 +2FE8 +1930 +07C0 +0100 +0FE0 +ENDCHAR +STARTCHAR uni01F54F +ENCODING 128335 +BBX 10 13 3 0 +BITMAP +1F00 +1C80 +2040 +0040 +FE40 +7C80 +3900 +1200 +1C00 +3000 +3880 +1700 +3800 +ENDCHAR +STARTCHAR uni01F550 +ENCODING 128336 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2928 +4104 +614C +8182 +8182 +C106 +8002 +8002 +600C +4004 +2828 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F551 +ENCODING 128337 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2928 +4104 +610C +8122 +81C2 +C106 +8002 +8002 +600C +4004 +2828 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F552 +ENCODING 128338 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2928 +4104 +610C +8102 +8102 +C1E6 +8002 +8002 +600C +4004 +2828 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F553 +ENCODING 128339 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2928 +4104 +610C +8102 +8102 +C106 +80C2 +8022 +600C +4004 +2828 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F554 +ENCODING 128340 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2928 +4104 +610C +8102 +8102 +C106 +8082 +8082 +604C +4004 +2828 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F555 +ENCODING 128341 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2928 +4104 +610C +8102 +8102 +C106 +8102 +8102 +610C +4004 +2828 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F556 +ENCODING 128342 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2928 +4104 +610C +8102 +8102 +C106 +8202 +8202 +640C +4004 +2828 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F557 +ENCODING 128343 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2928 +4104 +610C +8102 +8102 +C106 +8602 +8802 +600C +4004 +2828 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F558 +ENCODING 128344 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2928 +4104 +610C +8102 +8102 +CF06 +8002 +8002 +600C +4004 +2828 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F559 +ENCODING 128345 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2928 +4104 +610C +8902 +8702 +C106 +8002 +8002 +600C +4004 +2828 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F55A +ENCODING 128346 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2928 +4104 +650C +8302 +8302 +C106 +8002 +8002 +600C +4004 +2828 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F55B +ENCODING 128347 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2928 +4104 +610C +8102 +8102 +C106 +8002 +8002 +600C +4004 +2828 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F55C +ENCODING 128348 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2828 +4004 +602C +8042 +8082 +C106 +8102 +8102 +610C +4104 +2928 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F55D +ENCODING 128349 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2828 +4004 +600C +8002 +8062 +C186 +8102 +8102 +610C +4104 +2928 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F55E +ENCODING 128350 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2828 +4004 +600C +8002 +8002 +C186 +8162 +8102 +610C +4104 +2928 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F55F +ENCODING 128351 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2828 +4004 +600C +8002 +8002 +C106 +8182 +8142 +612C +4104 +2928 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F560 +ENCODING 128352 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2828 +4004 +600C +8002 +8002 +C106 +8102 +8182 +618C +4104 +2928 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F561 +ENCODING 128353 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2828 +4004 +600C +8002 +8002 +C106 +8102 +8302 +630C +4104 +2928 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F562 +ENCODING 128354 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2828 +4004 +600C +8002 +8002 +C106 +8302 +8502 +610C +4104 +2928 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F563 +ENCODING 128355 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2828 +4004 +600C +8002 +8002 +C306 +8D02 +8102 +610C +4104 +2928 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F564 +ENCODING 128356 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2828 +4004 +600C +8002 +8C02 +C306 +8102 +8102 +610C +4104 +2928 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F565 +ENCODING 128357 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2828 +4004 +680C +8402 +8202 +C106 +8102 +8102 +610C +4104 +2928 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F566 +ENCODING 128358 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2828 +4004 +620C +8202 +8202 +C106 +8102 +8102 +610C +4104 +2928 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F567 +ENCODING 128359 +BBX 15 15 0 -1 +BITMAP +07C0 +1930 +2828 +4004 +608C +8082 +8102 +C106 +8102 +8102 +610C +4104 +2928 +1930 +07C0 +ENDCHAR +STARTCHAR uni01F568 +ENCODING 128360 +BBX 6 10 5 0 +BITMAP +80 +C0 +E0 +FC +FC +FC +FC +E0 +C0 +80 +ENDCHAR +STARTCHAR uni01F569 +ENCODING 128361 +BBX 10 10 3 0 +BITMAP +0800 +0C00 +4E00 +8FC0 +8FC0 +8FC0 +8FC0 +4E00 +0C00 +0800 +ENDCHAR +STARTCHAR uni01F56A +ENCODING 128362 +BBX 13 10 2 0 +BITMAP +2100 +4980 +91C0 +A5F8 +A9F8 +A9F8 +A5F8 +91C0 +4980 +2100 +ENDCHAR +STARTCHAR uni01F56B +ENCODING 128363 +BBX 11 10 2 1 +BITMAP +0180 +0340 +0540 +FA20 +F320 +F320 +FA20 +9540 +6340 +0180 +ENDCHAR +STARTCHAR uni01F56C +ENCODING 128364 +BBX 14 14 1 -1 +BITMAP +0004 +0008 +0190 +0340 +0544 +FA28 +F320 +F320 +FA28 +9544 +6340 +0190 +0008 +0004 +ENDCHAR +STARTCHAR uni01F56D +ENCODING 128365 +BBX 11 11 2 0 +BITMAP +0E00 +1100 +2080 +2080 +2080 +2080 +4040 +7FC0 +8C20 +4040 +3F80 +ENDCHAR +STARTCHAR uni01F56E +ENCODING 128366 +BBX 13 12 1 -1 +BITMAP +38E0 +C518 +8208 +8208 +8208 +8208 +8208 +8208 +8208 +BAE8 +FFF8 +F078 +ENDCHAR +STARTCHAR uni01F56F +ENCODING 128367 +BBX 6 12 5 0 +BITMAP +20 +30 +48 +48 +30 +CC +B4 +84 +84 +84 +84 +78 +ENDCHAR +STARTCHAR uni01F570 +ENCODING 128368 +BBX 15 10 0 0 +BITMAP +07C0 +0C60 +1930 +1110 +1190 +3018 +3838 +7C7C +FFFE +FFFE +ENDCHAR +STARTCHAR uni01F571 +ENCODING 128369 +BBX 10 12 3 0 +BITMAP +1E00 +3F00 +2D00 +3F00 +3F00 +1E00 +1E00 +C0C0 +E1C0 +1E00 +E1C0 +C0C0 +ENDCHAR +STARTCHAR uni01F572 +ENCODING 128370 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +33A8 +7D44 +5AB4 +8D62 +98A2 +99E2 +8A22 +8FE2 +4C74 +47FC +2398 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F573 +ENCODING 128371 +BBX 14 6 1 0 +BITMAP +0FC0 +7FF8 +FFFC +FFFC +7FF8 +0FC0 +ENDCHAR +STARTCHAR uni01F574 +ENCODING 128372 +BBX 6 14 5 -1 +BITMAP +30 +30 +00 +CC +FC +FC +78 +78 +30 +30 +00 +30 +00 +78 +ENDCHAR +STARTCHAR uni01F575 +ENCODING 128373 +BBX 11 11 2 0 +BITMAP +0E00 +1F00 +1F00 +7FC0 +1F00 +5F40 +6EC0 +3F80 +7FC0 +FFE0 +FFE0 +ENDCHAR +STARTCHAR uni01F576 +ENCODING 128374 +BBX 14 10 1 2 +BITMAP +1CE0 +2490 +4008 +8004 +FCFC +FFFC +FFFC +FCFC +FCFC +7878 +ENDCHAR +STARTCHAR uni01F577 +ENCODING 128375 +BBX 15 15 0 -1 +BITMAP +0100 +0100 +0000 +0380 +77DC +8FE2 +7FFC +8FE2 +3FF8 +47C4 +9BB2 +27C8 +4544 +07C0 +0280 +ENDCHAR +STARTCHAR uni01F578 +ENCODING 128376 +BBX 16 16 0 -2 +BITMAP +0100 +0380 +0D61 +F11E +4384 +755C +4D64 +4BA4 +4924 +4AA4 +2448 +2C68 +3398 +3838 +47C4 +8002 +ENDCHAR +STARTCHAR uni01F579 +ENCODING 128377 +BBX 16 14 0 -1 +BITMAP +0180 +03C0 +03C0 +0180 +0180 +03C0 +0DB0 +318C +C183 +C183 +F00F +3C3C +0FF0 +03C0 +ENDCHAR +STARTCHAR uni01F57A +ENCODING 128378 +BBX 10 16 3 -2 +BITMAP +4000 +CC00 +0E00 +CE00 +C000 +6B00 +3FC0 +1EC0 +1E00 +1EC0 +3B00 +3180 +6180 +6180 +60C0 +E1C0 +ENDCHAR +STARTCHAR uni01F57B +ENCODING 128379 +BBX 4 11 5 0 +BITMAP +70 +F0 +F0 +C0 +C0 +C0 +C0 +C0 +F0 +F0 +70 +ENDCHAR +STARTCHAR uni01F57C +ENCODING 128380 +BBX 10 11 3 0 +BITMAP +7000 +F000 +F0C0 +C140 +CE40 +C840 +C880 +C700 +F000 +F000 +7000 +ENDCHAR +STARTCHAR uni01F57D +ENCODING 128381 +BBX 5 11 6 0 +BITMAP +B0 +B8 +B8 +18 +18 +18 +18 +18 +B8 +B8 +B0 +ENDCHAR +STARTCHAR uni01F57E +ENCODING 128382 +BBX 13 12 1 0 +BITMAP +7FF0 +8008 +8F88 +98C8 +F0F8 +1040 +6730 +4A90 +4010 +8A88 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F57F +ENCODING 128383 +BBX 13 13 1 -1 +BITMAP +7FF0 +FFF8 +FFF8 +F078 +0F80 +1FC0 +7FF0 +78F0 +7570 +FFF8 +F578 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01F580 +ENCODING 128384 +BBX 13 15 1 -2 +BITMAP +7FF0 +FFF8 +FFF8 +F078 +0F80 +1FC0 +7FF0 +78F0 +7570 +FFF8 +F578 +FFF8 +7FF0 +D578 +FFF8 +ENDCHAR +STARTCHAR uni01F581 +ENCODING 128385 +BBX 8 14 4 -1 +BITMAP +40 +40 +F8 +84 +B4 +84 +B4 +84 +B4 +84 +82 +41 +22 +1C +ENDCHAR +STARTCHAR uni01F582 +ENCODING 128386 +BBX 14 10 1 0 +BITMAP +FFFC +C00C +A014 +9024 +8844 +8CC4 +9324 +A014 +C00C +FFFC +ENDCHAR +STARTCHAR uni01F583 +ENCODING 128387 +BBX 14 10 1 0 +BITMAP +FFFC +8004 +8034 +8034 +8004 +9F04 +8004 +9F04 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F584 +ENCODING 128388 +BBX 14 13 1 -1 +BITMAP +0408 +0A10 +0B20 +FFFC +D34C +A194 +9124 +8844 +8CC4 +9324 +A014 +C00C +FFFC +ENDCHAR +STARTCHAR uni01F585 +ENCODING 128389 +BBX 14 11 1 0 +BITMAP +0FFC +0804 +FC64 +0864 +1008 +F808 +13C8 +2008 +F790 +2010 +3FF0 +ENDCHAR +STARTCHAR uni01F586 +ENCODING 128390 +BBX 14 14 1 -1 +BITMAP +3FF0 +6010 +3FF0 +0000 +FFFC +8004 +8034 +8034 +8004 +9E04 +8004 +9E04 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F587 +ENCODING 128391 +BBX 14 11 1 0 +BITMAP +01F8 +0304 +0684 +05F8 +0480 +0480 +0480 +7E80 +8580 +8300 +7E00 +ENDCHAR +STARTCHAR uni01F588 +ENCODING 128392 +BBX 7 11 4 0 +BITMAP +7C +38 +38 +38 +7C +FE +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01F589 +ENCODING 128393 +BBX 14 14 1 -1 +BITMAP +0020 +0050 +0088 +0144 +0268 +0490 +0920 +1240 +2480 +6900 +5200 +6C00 +F800 +C000 +ENDCHAR +STARTCHAR uni01F58A +ENCODING 128394 +BBX 13 13 1 -1 +BITMAP +0070 +0088 +0108 +0208 +0410 +0820 +1440 +2280 +6100 +4200 +6C00 +F800 +C000 +ENDCHAR +STARTCHAR uni01F58B +ENCODING 128395 +BBX 13 13 1 -1 +BITMAP +0070 +0088 +0108 +0208 +0410 +0820 +0C40 +3E80 +4F00 +5400 +A400 +D800 +E000 +ENDCHAR +STARTCHAR uni01F58C +ENCODING 128396 +BBX 14 13 1 -1 +BITMAP +0038 +0044 +0084 +0104 +0208 +0410 +0620 +1F40 +3F80 +3E00 +7E00 +7C00 +F000 +ENDCHAR +STARTCHAR uni01F58D +ENCODING 128397 +BBX 14 14 1 -1 +BITMAP +0020 +0070 +00B8 +011C +0208 +0410 +0820 +1040 +2080 +3100 +7A00 +7C00 +F000 +C000 +ENDCHAR +STARTCHAR uni01F58E +ENCODING 128398 +BBX 15 13 0 0 +BITMAP +1000 +3800 +1C00 +EFC0 +AF30 +B388 +A1C4 +A0E2 +A7F6 +A048 +BFF4 +A00E +E006 +ENDCHAR +STARTCHAR uni01F58F +ENCODING 128399 +BBX 12 13 2 0 +BITMAP +0700 +35C0 +2D40 +1540 +3F40 +6140 +8CE0 +B220 +E210 +9C10 +6010 +1F30 +00C0 +ENDCHAR +STARTCHAR uni01F590 +ENCODING 128400 +BBX 15 12 1 0 +BITMAP +0A40 +75A0 +B5A0 +B5A0 +9520 +554C +5552 +4064 +4088 +2010 +1020 +0FC0 +ENDCHAR +STARTCHAR uni01F591 +ENCODING 128401 +BBX 15 12 0 0 +BITMAP +04A0 +0B5C +0B5A +0B5A +0952 +6554 +9554 +4C04 +2004 +1008 +0810 +07E0 +ENDCHAR +STARTCHAR uni01F592 +ENCODING 128402 +BBX 10 11 3 0 +BITMAP +0800 +1400 +1400 +1400 +2780 +C040 +00C0 +0040 +00C0 +F040 +0F80 +ENDCHAR +STARTCHAR uni01F593 +ENCODING 128403 +BBX 10 11 3 -1 +BITMAP +7C00 +83C0 +C000 +8000 +C000 +80C0 +7900 +0A00 +0A00 +0A00 +0400 +ENDCHAR +STARTCHAR uni01F594 +ENCODING 128404 +BBX 11 14 1 -1 +BITMAP +4100 +A280 +9480 +5500 +4900 +2A00 +2BC0 +2020 +4020 +4020 +4020 +4040 +3080 +0880 +ENDCHAR +STARTCHAR uni01F595 +ENCODING 128405 +BBX 14 12 1 0 +BITMAP +0400 +0A00 +0A00 +0A00 +5B00 +AA98 +AAA4 +80C8 +8010 +4020 +2040 +1F80 +ENDCHAR +STARTCHAR uni01F596 +ENCODING 128406 +BBX 15 12 1 0 +BITMAP +1140 +6AA0 +AAA0 +AAA0 +9520 +554C +5552 +4064 +4008 +2010 +1020 +0FC0 +ENDCHAR +STARTCHAR uni01F597 +ENCODING 128407 +BBX 8 14 4 -1 +BITMAP +22 +22 +41 +A1 +99 +C5 +BB +9A +AC +A0 +A0 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni01F598 +ENCODING 128408 +BBX 13 6 1 3 +BITMAP +7FF0 +8008 +7E00 +0738 +0840 +0780 +ENDCHAR +STARTCHAR uni01F599 +ENCODING 128409 +BBX 13 6 2 3 +BITMAP +7FF0 +8008 +03F0 +E700 +1080 +0F00 +ENDCHAR +STARTCHAR uni01F59A +ENCODING 128410 +BBX 14 6 1 3 +BITMAP +7FF0 +FFFC +7FFC +07FC +0FC0 +0780 +ENDCHAR +STARTCHAR uni01F59B +ENCODING 128411 +BBX 14 6 1 3 +BITMAP +3FF8 +FFFC +FFF8 +FF80 +0FC0 +0780 +ENDCHAR +STARTCHAR uni01F59C +ENCODING 128412 +BBX 14 8 1 2 +BITMAP +7FE0 +FFF0 +7FFC +03FC +07FC +07FC +03FC +01F0 +ENDCHAR +STARTCHAR uni01F59D +ENCODING 128413 +BBX 14 8 1 2 +BITMAP +1FF8 +3FFC +FFF8 +FF00 +FF80 +FF80 +FF00 +3E00 +ENDCHAR +STARTCHAR uni01F59E +ENCODING 128414 +BBX 6 13 4 -1 +BITMAP +08 +14 +14 +14 +54 +B4 +B4 +A4 +84 +44 +24 +24 +28 +ENDCHAR +STARTCHAR uni01F59F +ENCODING 128415 +BBX 6 13 4 -1 +BITMAP +50 +90 +90 +88 +84 +94 +B4 +B4 +A8 +A0 +A0 +A0 +40 +ENDCHAR +STARTCHAR uni01F5A0 +ENCODING 128416 +BBX 6 13 4 -1 +BITMAP +08 +1C +1C +1C +5C +FC +FC +FC +FC +7C +3C +3C +38 +ENDCHAR +STARTCHAR uni01F5A1 +ENCODING 128417 +BBX 6 13 4 -1 +BITMAP +70 +F0 +F0 +F8 +FC +FC +FC +FC +E8 +E0 +E0 +E0 +40 +ENDCHAR +STARTCHAR uni01F5A2 +ENCODING 128418 +BBX 8 14 4 -1 +BITMAP +40 +E0 +E0 +E0 +E0 +EC +FE +FF +FF +FF +FF +7F +3E +3E +ENDCHAR +STARTCHAR uni01F5A3 +ENCODING 128419 +BBX 8 14 4 -1 +BITMAP +7C +7C +FE +FF +FF +FF +FF +7F +37 +07 +07 +07 +07 +02 +ENDCHAR +STARTCHAR uni01F5A4 +ENCODING 128420 +BBX 13 12 1 0 +BITMAP +38E0 +7DF0 +FFF8 +FFF8 +FFF8 +7FF0 +7FF0 +3FE0 +1FC0 +0F80 +0700 +0200 +ENDCHAR +STARTCHAR uni01F5A5 +ENCODING 128421 +BBX 9 11 4 0 +BITMAP +FF80 +8080 +8E80 +8080 +FF80 +8080 +FF80 +8080 +FF80 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5A6 +ENCODING 128422 +BBX 14 13 1 -1 +BITMAP +FFFC +8004 +BFF4 +8004 +BFF4 +8004 +FFFC +0004 +0038 +03E0 +03C0 +03C0 +0180 +ENDCHAR +STARTCHAR uni01F5A7 +ENCODING 128423 +BBX 13 12 1 0 +BITMAP +0F80 +0880 +0880 +0F80 +0F80 +0200 +0200 +FAF8 +8A88 +8F88 +F8F8 +F8F8 +ENDCHAR +STARTCHAR uni01F5A8 +ENCODING 128424 +BBX 10 12 3 -1 +BITMAP +0FC0 +0840 +1080 +2100 +2100 +2100 +FFC0 +8040 +AB40 +8340 +8040 +FFC0 +ENDCHAR +STARTCHAR uni01F5A9 +ENCODING 128425 +BBX 9 12 3 0 +BITMAP +FF80 +8080 +8080 +FF80 +AA80 +FF80 +AA80 +FF80 +AA80 +FF80 +AA80 +FF80 +ENDCHAR +STARTCHAR uni01F5AA +ENCODING 128426 +BBX 12 12 2 0 +BITMAP +FFF0 +FFF0 +FFF0 +FFF0 +FFF0 +F9F0 +F9F0 +FFF0 +FFF0 +F070 +F170 +F170 +ENDCHAR +STARTCHAR uni01F5AB +ENCODING 128427 +BBX 12 12 2 0 +BITMAP +FFF0 +A050 +A050 +A050 +A050 +BFD0 +8010 +8010 +8FD0 +89D0 +89D0 +FFF0 +ENDCHAR +STARTCHAR uni01F5AC +ENCODING 128428 +BBX 12 12 2 0 +BITMAP +FFF0 +8030 +8020 +8030 +FFF0 +F9F0 +F9F0 +FFF0 +FFF0 +F9F0 +F9F0 +F9F0 +ENDCHAR +STARTCHAR uni01F5AD +ENCODING 128429 +BBX 12 9 2 0 +BITMAP +FC30 +83D0 +8010 +9990 +9990 +8010 +BFD0 +A050 +FFF0 +ENDCHAR +STARTCHAR uni01F5AE +ENCODING 128430 +BBX 13 12 1 0 +BITMAP +0100 +0100 +1E00 +2000 +2000 +FFF8 +8008 +AAA8 +9548 +AAA8 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F5AF +ENCODING 128431 +BBX 10 12 3 0 +BITMAP +8000 +9800 +6400 +0400 +3F80 +2080 +2E80 +2E80 +4040 +4040 +4040 +7FC0 +ENDCHAR +STARTCHAR uni01F5B0 +ENCODING 128432 +BBX 9 12 3 0 +BITMAP +8000 +9800 +6400 +0400 +3F80 +2480 +2480 +3F80 +2080 +2080 +1100 +0E00 +ENDCHAR +STARTCHAR uni01F5B1 +ENCODING 128433 +BBX 9 12 3 0 +BITMAP +8000 +9800 +6400 +0400 +3F80 +2A80 +2A80 +3F80 +2080 +2080 +2080 +1F00 +ENDCHAR +STARTCHAR uni01F5B2 +ENCODING 128434 +BBX 14 10 1 0 +BITMAP +01F0 +C208 +24E4 +25F4 +25F4 +25F4 +1CE4 +0404 +0404 +07FC +ENDCHAR +STARTCHAR uni01F5B3 +ENCODING 128435 +BBX 12 10 2 0 +BITMAP +FEF0 +8290 +82F0 +8290 +82F0 +FEB0 +38F0 +0000 +FEC0 +FEC0 +ENDCHAR +STARTCHAR uni01F5B4 +ENCODING 128436 +BBX 14 9 1 -1 +BITMAP +FFFC +8004 +A004 +8004 +BFF4 +8004 +BFF4 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F5B5 +ENCODING 128437 +BBX 14 12 1 0 +BITMAP +3FF0 +4008 +4008 +8004 +8004 +8004 +8004 +8004 +8004 +4008 +4008 +3FF0 +ENDCHAR +STARTCHAR uni01F5B6 +ENCODING 128438 +BBX 12 12 2 0 +BITMAP +3FC0 +2040 +2F40 +2040 +2F40 +2040 +FFF0 +8010 +BFD0 +BFD0 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F5B7 +ENCODING 128439 +BBX 12 12 2 0 +BITMAP +3FC0 +2040 +2F40 +2040 +2F40 +2040 +FFF0 +8010 +BFD0 +B0D0 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F5B8 +ENCODING 128440 +BBX 14 14 1 -1 +BITMAP +0780 +1860 +2010 +4008 +4008 +8304 +8784 +8784 +8304 +4008 +4008 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uni01F5B9 +ENCODING 128441 +BBX 10 12 3 0 +BITMAP +FF00 +8180 +BDC0 +8040 +BF40 +8040 +BF40 +8040 +BC40 +8040 +8040 +FFC0 +ENDCHAR +STARTCHAR uni01F5BA +ENCODING 128442 +BBX 10 12 3 0 +BITMAP +FF00 +8180 +BDC0 +8040 +BF40 +8040 +8440 +8A40 +9140 +9F40 +8040 +FFC0 +ENDCHAR +STARTCHAR uni01F5BB +ENCODING 128443 +BBX 10 12 3 0 +BITMAP +FF00 +8180 +99C0 +A440 +A440 +9840 +8440 +8A40 +9140 +9F40 +8040 +FFC0 +ENDCHAR +STARTCHAR uni01F5BC +ENCODING 128444 +BBX 14 14 1 -1 +BITMAP +C30C +FFFC +7FF8 +6018 +6318 +6498 +E49C +E31C +6498 +6858 +6858 +7FF8 +FFFC +C30C +ENDCHAR +STARTCHAR uni01F5BD +ENCODING 128445 +BBX 14 14 1 -1 +BITMAP +C30C +FFFC +7FF8 +6118 +6118 +6118 +FF1C +E51C +65F8 +6518 +6518 +7FF8 +FFFC +C30C +ENDCHAR +STARTCHAR uni01F5BE +ENCODING 128446 +BBX 14 14 1 -1 +BITMAP +C30C +FFFC +7FF8 +6018 +6858 +6498 +E31C +E31C +6498 +6858 +6018 +7FF8 +FFFC +C30C +ENDCHAR +STARTCHAR uni01F5BF +ENCODING 128447 +BBX 12 10 2 0 +BITMAP +3C00 +7E00 +FFF0 +FFF0 +FFF0 +FFF0 +FFF0 +FFF0 +FFF0 +FFF0 +ENDCHAR +STARTCHAR uni01F5C0 +ENCODING 128448 +BBX 12 10 2 0 +BITMAP +3C00 +4200 +FFF0 +8010 +8010 +8010 +8010 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F5C1 +ENCODING 128449 +BBX 14 10 1 0 +BITMAP +3C00 +4200 +C3F0 +8010 +BFFC +A004 +C008 +C008 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F5C2 +ENCODING 128450 +BBX 12 10 2 0 +BITMAP +3800 +4400 +83F0 +8010 +8010 +8010 +8010 +B9D0 +A950 +EF70 +ENDCHAR +STARTCHAR uni01F5C3 +ENCODING 128451 +BBX 14 9 1 0 +BITMAP +3BB8 +4444 +FFFC +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F5C4 +ENCODING 128452 +BBX 10 15 3 -1 +BITMAP +FFC0 +8040 +9E40 +9E40 +8040 +8C40 +8040 +FFC0 +8040 +9E40 +9E40 +8040 +8C40 +8040 +FFC0 +ENDCHAR +STARTCHAR uni01F5C5 +ENCODING 128453 +BBX 9 9 3 0 +BITMAP +FE00 +8300 +8380 +8080 +8080 +8080 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5C6 +ENCODING 128454 +BBX 9 9 3 0 +BITMAP +FF80 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5C7 +ENCODING 128455 +BBX 13 13 1 0 +BITMAP +0FF8 +0808 +3FE8 +2028 +FFA8 +80A8 +80A8 +80A8 +80B8 +80A0 +80E0 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5C8 +ENCODING 128456 +BBX 9 9 3 0 +BITMAP +FE00 +8300 +BB80 +8080 +BE80 +8080 +BE80 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5C9 +ENCODING 128457 +BBX 9 9 3 0 +BITMAP +FF80 +8080 +BE80 +8080 +BE80 +8080 +BE80 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5CA +ENCODING 128458 +BBX 13 13 1 0 +BITMAP +0FF8 +0808 +3FE8 +2028 +FFA8 +80A8 +BEA8 +80A8 +BEB8 +80A0 +BEE0 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5CB +ENCODING 128459 +BBX 9 11 3 0 +BITMAP +FE00 +8300 +8380 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5CC +ENCODING 128460 +BBX 9 11 3 0 +BITMAP +FF80 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5CD +ENCODING 128461 +BBX 13 15 1 -1 +BITMAP +0FF8 +0808 +3FE8 +2028 +FFA8 +80A8 +80A8 +80A8 +80A8 +80A8 +80B8 +80A0 +80E0 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5CE +ENCODING 128462 +BBX 9 11 3 0 +BITMAP +FE00 +8300 +BB80 +8080 +BE80 +8080 +BE80 +8080 +BE80 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5CF +ENCODING 128463 +BBX 9 11 3 0 +BITMAP +FF80 +8080 +BE80 +8080 +BE80 +8080 +BE80 +8080 +BE80 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5D0 +ENCODING 128464 +BBX 13 15 1 -1 +BITMAP +0FF8 +0808 +3FE8 +2028 +FFA8 +80A8 +BEA8 +80A8 +BEA8 +80A8 +BEB8 +80A0 +BEE0 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5D1 +ENCODING 128465 +BBX 11 13 2 -1 +BITMAP +0E00 +1100 +7FC0 +8020 +FFE0 +5540 +5540 +5540 +5540 +5540 +5540 +5540 +7FC0 +ENDCHAR +STARTCHAR uni01F5D2 +ENCODING 128466 +BBX 9 12 3 0 +BITMAP +2A00 +FF80 +AA80 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5D3 +ENCODING 128467 +BBX 9 12 3 0 +BITMAP +2A00 +FF80 +AA80 +8080 +8880 +9880 +8880 +8880 +8880 +9C80 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5D4 +ENCODING 128468 +BBX 14 12 1 0 +BITMAP +FFFC +FF54 +FFFC +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F5D5 +ENCODING 128469 +BBX 10 3 3 0 +BITMAP +FFC0 +FFC0 +FFC0 +ENDCHAR +STARTCHAR uni01F5D6 +ENCODING 128470 +BBX 14 12 1 0 +BITMAP +FFFC +FFFC +FFFC +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F5D7 +ENCODING 128471 +BBX 13 12 1 0 +BITMAP +0FF8 +0FF8 +0808 +0808 +FF88 +FF88 +8088 +80F8 +8080 +8080 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F5D8 +ENCODING 128472 +BBX 14 12 1 0 +BITMAP +7C60 +3C78 +1C18 +7C0C +640C +C00C +C00C +C098 +C0F8 +60F0 +78F0 +18F8 +ENDCHAR +STARTCHAR uni01F5D9 +ENCODING 128473 +BBX 12 12 2 0 +BITMAP +E070 +F0F0 +F9F0 +7FE0 +3FC0 +1F80 +1F80 +3FC0 +7FE0 +F9F0 +F0F0 +E070 +ENDCHAR +STARTCHAR uni01F5DA +ENCODING 128474 +BBX 12 10 2 0 +BITMAP +00C0 +0120 +2120 +5210 +8A10 +8BF0 +FA10 +8A10 +8A10 +8A10 +ENDCHAR +STARTCHAR uni01F5DB +ENCODING 128475 +BBX 12 10 2 0 +BITMAP +3000 +4800 +4840 +84A0 +8510 +FD10 +85F0 +8510 +8510 +8510 +ENDCHAR +STARTCHAR uni01F5DC +ENCODING 128476 +BBX 14 14 1 -1 +BITMAP +F3C0 +9E40 +FFC0 +0C00 +7FE0 +7FE0 +16FC +1A84 +1684 +1A84 +1684 +1AFC +7FE0 +7FE0 +ENDCHAR +STARTCHAR uni01F5DD +ENCODING 128477 +BBX 14 7 1 2 +BITMAP +6000 +9000 +9000 +5FFC +9038 +9030 +6038 +ENDCHAR +STARTCHAR uni01F5DE +ENCODING 128478 +BBX 12 12 2 0 +BITMAP +00C0 +0120 +0250 +04D0 +09D0 +1120 +3C40 +5A80 +A500 +AA00 +5200 +3C00 +ENDCHAR +STARTCHAR uni01F5DF +ENCODING 128479 +BBX 14 13 1 -1 +BITMAP +FFFC +8004 +8004 +8874 +9004 +AE74 +A104 +BD74 +A104 +BD74 +A204 +9C04 +FFFC +ENDCHAR +STARTCHAR uni01F5E0 +ENCODING 128480 +BBX 14 11 1 0 +BITMAP +FFFC +4004 +C01C +4024 +C044 +4884 +D504 +6204 +C004 +4004 +FFFC +ENDCHAR +STARTCHAR uni01F5E1 +ENCODING 128481 +BBX 11 12 3 -1 +BITMAP +0E00 +0E00 +8E20 +7FC0 +1500 +1500 +1500 +1500 +1500 +1500 +0E00 +0400 +ENDCHAR +STARTCHAR uni01F5E2 +ENCODING 128482 +BBX 16 8 0 2 +BITMAP +0E70 +3FFC +FFFF +E3C7 +781E +3FFC +1FF8 +03C0 +ENDCHAR +STARTCHAR uni01F5E3 +ENCODING 128483 +BBX 12 12 2 0 +BITMAP +1800 +3E00 +7F00 +FF90 +FFA0 +FF80 +FC30 +FF00 +7F20 +3E10 +3C00 +3C00 +ENDCHAR +STARTCHAR uni01F5E4 +ENCODING 128484 +BBX 11 4 2 0 +BITMAP +8420 +8420 +4440 +4440 +ENDCHAR +STARTCHAR uni01F5E5 +ENCODING 128485 +BBX 11 4 2 8 +BITMAP +4440 +4440 +8420 +8420 +ENDCHAR +STARTCHAR uni01F5E6 +ENCODING 128486 +BBX 4 11 10 0 +BITMAP +C0 +30 +00 +00 +00 +F0 +00 +00 +00 +30 +C0 +ENDCHAR +STARTCHAR uni01F5E7 +ENCODING 128487 +BBX 4 11 2 0 +BITMAP +30 +C0 +00 +00 +00 +F0 +00 +00 +00 +C0 +30 +ENDCHAR +STARTCHAR uni01F5E8 +ENCODING 128488 +BBX 12 12 2 0 +BITMAP +7FE0 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +79E0 +0900 +0500 +0380 +ENDCHAR +STARTCHAR uni01F5E9 +ENCODING 128489 +BBX 12 12 2 0 +BITMAP +7FE0 +8010 +8010 +8010 +8010 +8010 +8010 +8010 +79E0 +0900 +0A00 +1C00 +ENDCHAR +STARTCHAR uni01F5EA +ENCODING 128490 +BBX 14 14 1 -1 +BITMAP +01F8 +0204 +0204 +0204 +0204 +0198 +7E60 +8130 +8100 +8100 +8100 +6600 +1800 +3000 +ENDCHAR +STARTCHAR uni01F5EB +ENCODING 128491 +BBX 14 16 1 -2 +BITMAP +03F0 +0408 +0408 +0408 +0408 +0370 +7EC0 +8160 +81F8 +8104 +8104 +6604 +1A04 +3198 +0060 +0030 +ENDCHAR +STARTCHAR uni01F5EC +ENCODING 128492 +BBX 14 12 1 0 +BITMAP +0700 +38E0 +4890 +4010 +8008 +8008 +4010 +4890 +38E0 +0708 +0014 +0008 +ENDCHAR +STARTCHAR uni01F5ED +ENCODING 128493 +BBX 14 12 1 0 +BITMAP +0380 +1C70 +2448 +2008 +4004 +4004 +2008 +2448 +1C70 +4380 +A000 +4000 +ENDCHAR +STARTCHAR uni01F5EE +ENCODING 128494 +BBX 14 13 1 -2 +BITMAP +1100 +2A80 +44F8 +8010 +6020 +1010 +2008 +401C +3020 +1190 +E548 +8A30 +7000 +ENDCHAR +STARTCHAR uni01F5EF +ENCODING 128495 +BBX 14 13 1 -2 +BITMAP +0220 +0550 +7C88 +2004 +1018 +2020 +4010 +E008 +1030 +2620 +4A9C +3144 +0038 +ENDCHAR +STARTCHAR uni01F5F0 +ENCODING 128496 +BBX 14 13 1 -2 +BITMAP +1100 +2A80 +44F8 +8010 +6020 +1010 +2008 +401C +3020 +1190 +2548 +2A30 +3000 +ENDCHAR +STARTCHAR uni01F5F1 +ENCODING 128497 +BBX 14 12 1 0 +BITMAP +0100 +E280 +9AB0 +44D0 +26A0 +C6BC +3508 +1830 +2920 +5DD0 +6550 +0330 +ENDCHAR +STARTCHAR uni01F5F2 +ENCODING 128498 +BBX 13 13 1 0 +BITMAP +0008 +0018 +0818 +1838 +1C30 +3670 +3770 +6360 +63C0 +61C0 +C080 +C000 +8000 +ENDCHAR +STARTCHAR uni01F5F3 +ENCODING 128499 +BBX 14 13 1 -1 +BITMAP +3FF0 +2010 +2A10 +2410 +2A10 +2010 +2150 +2090 +2150 +FFFC +FFFC +FFFC +FFFC +ENDCHAR +STARTCHAR uni01F5F4 +ENCODING 128500 +BBX 8 7 4 2 +BITMAP +43 +66 +3C +18 +3C +66 +C2 +ENDCHAR +STARTCHAR uni01F5F5 +ENCODING 128501 +BBX 12 12 2 0 +BITMAP +FFF0 +8010 +8010 +90D0 +9990 +8F10 +8610 +8F10 +9990 +B090 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F5F6 +ENCODING 128502 +BBX 8 8 4 2 +BITMAP +83 +C7 +EE +7C +3C +3E +77 +E3 +ENDCHAR +STARTCHAR uni01F5F7 +ENCODING 128503 +BBX 12 12 2 0 +BITMAP +FFF0 +8010 +A0D0 +B1D0 +BB90 +9F10 +8F10 +8F90 +9DD0 +B8D0 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F5F8 +ENCODING 128504 +BBX 8 7 4 2 +BITMAP +03 +86 +8C +98 +B0 +E0 +C0 +ENDCHAR +STARTCHAR uni01F5F9 +ENCODING 128505 +BBX 12 12 2 0 +BITMAP +FFF0 +8010 +8010 +80F0 +91D0 +B390 +B710 +BE10 +BC10 +9810 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F5FA +ENCODING 128506 +BBX 16 12 0 0 +BITMAP +0B00 +322F +FCFE +7DFF +78FF +609C +21E2 +11F0 +3860 +1863 +1021 +1000 +ENDCHAR +STARTCHAR uni01F5FB +ENCODING 128507 +BBX 14 12 1 0 +BITMAP +0300 +0480 +0860 +1010 +2008 +C004 +8CC4 +BDF4 +FFFC +FFFC +FFFC +FFFC +ENDCHAR +STARTCHAR uni01F5FC +ENCODING 128508 +BBX 11 14 2 -1 +BITMAP +0400 +0400 +0400 +0A00 +0E00 +0A00 +1F00 +1100 +1F00 +1F00 +3F80 +3F80 +71C0 +E0E0 +ENDCHAR +STARTCHAR uni01F5FD +ENCODING 128509 +BBX 15 16 0 -2 +BITMAP +3400 +3800 +7800 +C400 +7C24 +3028 +28BA +2844 +19FA +14C6 +24C2 +2376 +7066 +1806 +1B04 +1C02 +ENDCHAR +STARTCHAR uni01F5FE +ENCODING 128510 +BBX 12 16 2 -2 +BITMAP +0040 +0060 +00F0 +0100 +0080 +00C0 +00C0 +0180 +01C0 +0380 +0780 +1F00 +3C00 +E000 +4000 +4000 +ENDCHAR +STARTCHAR uni01F5FF +ENCODING 128511 +BBX 12 16 2 -2 +BITMAP +1E00 +3F80 +6180 +C0C0 +D660 +F7E0 +8470 +8C70 +8170 +C270 +BE70 +DCF0 +C0F0 +C0E0 +60E0 +1F60 +ENDCHAR +STARTCHAR uni01F600 +ENCODING 128512 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +8002 +9FF2 +5554 +4D64 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F601 +ENCODING 128513 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +9292 +8002 +8002 +9FF2 +5554 +4D64 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F602 +ENCODING 128514 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4C64 +5294 +8002 +A00A +C006 +9FF2 +5554 +4D64 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F603 +ENCODING 128515 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +8002 +9FF2 +5014 +4824 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F604 +ENCODING 128516 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +9292 +8002 +8002 +9FF2 +5014 +4824 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F605 +ENCODING 128517 +BBX 15 14 1 -1 +BITMAP +07C0 +1930 +2488 +4004 +4C64 +9292 +8002 +8002 +9FF2 +5014 +4824 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F606 +ENCODING 128518 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4824 +4444 +8822 +8002 +8002 +9FF2 +5014 +4824 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F607 +ENCODING 128519 +BBX 15 15 1 -1 +BITMAP +1FF0 +2008 +47C4 +5834 +3838 +47C4 +4004 +8C62 +8C62 +8002 +5014 +4824 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F608 +ENCODING 128520 +BBX 14 15 1 -1 +BITMAP +8004 +C78C +D86C +E01C +C84C +4488 +8CC4 +8CC4 +8004 +9024 +4848 +4788 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uni01F609 +ENCODING 128521 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4024 +4C44 +8C22 +8002 +8002 +9FF2 +5014 +4824 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F60A +ENCODING 128522 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +9292 +8002 +8002 +9012 +4824 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F60B +ENCODING 128523 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +9292 +8002 +8002 +9012 +4824 +47C4 +2248 +19B0 +07C0 +ENDCHAR +STARTCHAR uni01F60C +ENCODING 128524 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +5294 +8C62 +8002 +8002 +9012 +4824 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F60D +ENCODING 128525 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +76DC +BEFA +9C72 +8822 +8002 +5014 +4824 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F60E +ENCODING 128526 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +7FFC +BEFA +9C72 +8002 +8002 +5014 +4824 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F60F +ENCODING 128527 +BBX 14 14 1 -1 +BITMAP +0780 +1860 +2010 +4008 +4008 +9CE4 +8004 +8004 +8024 +4048 +4188 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uni01F610 +ENCODING 128528 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +8002 +8002 +4FE4 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F611 +ENCODING 128529 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4004 +8EE2 +8002 +8002 +8002 +4FE4 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F612 +ENCODING 128530 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4EE4 +8662 +8002 +8002 +8002 +4FE4 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F613 +ENCODING 128531 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2448 +4824 +4C64 +8C62 +800A +8006 +8002 +4FE4 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F614 +ENCODING 128532 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +5294 +8C62 +8002 +8002 +8002 +47C4 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F615 +ENCODING 128533 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +8002 +8002 +4064 +4184 +2608 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F616 +ENCODING 128534 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4444 +8822 +8002 +8002 +8002 +46C4 +4924 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F617 +ENCODING 128535 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +80C2 +8022 +40C4 +4024 +20C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F618 +ENCODING 128536 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4024 +4C44 +8C22 +8002 +836E +80FE +433C +4094 +2308 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F619 +ENCODING 128537 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +9292 +8002 +8182 +8042 +4184 +4044 +2188 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F61A +ENCODING 128538 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +5294 +8C62 +8002 +8182 +8042 +4184 +4044 +2188 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F61B +ENCODING 128539 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +8002 +8002 +4FE4 +4244 +2188 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F61C +ENCODING 128540 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4024 +4C44 +8C22 +8002 +8002 +8002 +4FE4 +4244 +2188 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F61D +ENCODING 128541 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4824 +4444 +8822 +8002 +8002 +8002 +4FE4 +4244 +2188 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F61E +ENCODING 128542 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2448 +4824 +4C64 +8C62 +8002 +8002 +8002 +47C4 +4824 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F61F +ENCODING 128543 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2448 +4824 +4C64 +8C62 +8002 +8002 +87C2 +4824 +4384 +2448 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F620 +ENCODING 128544 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2828 +4444 +4C64 +8C62 +8002 +8002 +8002 +47C4 +4824 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F621 +ENCODING 128545 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2828 +4444 +4C64 +8C62 +8002 +8002 +87C2 +4824 +4384 +2448 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F622 +ENCODING 128546 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +5294 +8C62 +8012 +8012 +8002 +47C4 +4824 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F623 +ENCODING 128547 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4824 +8442 +8822 +8002 +8002 +47C4 +4824 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F624 +ENCODING 128548 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4824 +4444 +9C72 +8002 +8282 +8282 +47C4 +4AA4 +2288 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F625 +ENCODING 128549 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4444 +8822 +800A +800A +8002 +47C4 +4824 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F626 +ENCODING 128550 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +87C2 +8822 +5014 +5FF4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F627 +ENCODING 128551 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2448 +4824 +4C64 +8C62 +8002 +87C2 +8822 +5014 +5FF4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F628 +ENCODING 128552 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4C64 +5AD4 +9292 +8C62 +8002 +8FE2 +5014 +5FF4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F629 +ENCODING 128553 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2448 +4824 +4284 +8442 +8002 +87C2 +8822 +5014 +5FF4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F62A +ENCODING 128554 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +5294 +8C62 +800A +87CA +8822 +5014 +5FF4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F62B +ENCODING 128555 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4824 +4444 +8822 +8002 +87C2 +8822 +5014 +5FF4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F62C +ENCODING 128556 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +87C2 +8D62 +5554 +5FF4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F62D +ENCODING 128557 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4824 +4446 +8822 +A00A +A7CA +8D62 +5554 +5FF4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F62E +ENCODING 128558 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +8002 +8382 +4384 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F62F +ENCODING 128559 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2448 +4824 +4C64 +8C62 +8002 +8002 +8382 +4384 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F630 +ENCODING 128560 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2448 +4824 +4C64 +8C62 +800A +800A +8382 +4384 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F631 +ENCODING 128561 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2448 +4824 +4C64 +8C62 +8002 +E00E +9392 +9392 +5394 +4824 +4824 +4FE4 +ENDCHAR +STARTCHAR uni01F632 +ENCODING 128562 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4C64 +5AD4 +9292 +8C62 +8002 +8382 +4384 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F633 +ENCODING 128563 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4444 +4824 +AEEA +D016 +A82A +D396 +6BAC +5394 +2828 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F634 +ENCODING 128564 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +5294 +8C62 +8002 +8072 +8012 +4324 +4374 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F635 +ENCODING 128565 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4AA4 +4444 +8AA2 +8002 +8002 +8382 +4384 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F636 +ENCODING 128566 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +8002 +8002 +4004 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F637 +ENCODING 128567 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2448 +4824 +4EE4 +A00A +9012 +CFE6 +A82A +5834 +4FE4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F638 +ENCODING 128568 +BBX 15 12 0 0 +BITMAP +1010 +2BA8 +2448 +4004 +4444 +4AA4 +C006 +6FEC +CAA6 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F639 +ENCODING 128569 +BBX 15 12 0 0 +BITMAP +1010 +2BA8 +2448 +4004 +4C64 +5014 +C016 +6FEC +CAA6 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F63A +ENCODING 128570 +BBX 15 12 0 0 +BITMAP +1010 +2BA8 +2448 +4004 +4004 +4444 +C006 +6FEC +C826 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F63B +ENCODING 128571 +BBX 15 12 0 0 +BITMAP +1010 +2BA8 +2448 +4004 +4AA4 +4EE4 +C446 +600C +C546 +2288 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F63C +ENCODING 128572 +BBX 15 12 0 0 +BITMAP +1010 +2BA8 +2448 +4004 +4004 +4444 +C006 +600C +C046 +2188 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F63D +ENCODING 128573 +BBX 15 12 0 0 +BITMAP +1010 +2BA8 +2448 +4004 +4AA4 +4444 +C006 +608C +C046 +2088 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F63E +ENCODING 128574 +BBX 15 12 0 0 +BITMAP +1010 +2BA8 +2448 +4004 +4004 +4444 +C006 +638C +C446 +2108 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F63F +ENCODING 128575 +BBX 15 12 0 0 +BITMAP +1010 +2BA8 +2448 +4004 +4444 +4024 +C026 +628C +C546 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F640 +ENCODING 128576 +BBX 15 12 0 0 +BITMAP +1010 +2BA8 +2448 +4004 +4284 +4444 +C006 +638C +C446 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F641 +ENCODING 128577 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +8002 +8002 +4384 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F642 +ENCODING 128578 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +8002 +8002 +4444 +4384 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F643 +ENCODING 128579 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +47C4 +4824 +9012 +8002 +8002 +8C62 +4C64 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F644 +ENCODING 128580 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8422 +8002 +8002 +8012 +4024 +41C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F645 +ENCODING 128581 +BBX 14 14 1 -1 +BITMAP +0780 +1860 +2010 +4008 +4CC8 +8CC4 +8004 +8004 +9C34 +63C8 +5E18 +20F0 +4FC8 +9024 +ENDCHAR +STARTCHAR uni01F646 +ENCODING 128582 +BBX 15 15 0 -2 +BITMAP +1EF0 +2108 +4EE4 +9012 +A7CA +A82A +B01A +A44A +A00A +A00A +A7CA +9392 +8822 +47C4 +4004 +ENDCHAR +STARTCHAR uni01F647 +ENCODING 128583 +BBX 15 13 0 0 +BITMAP +1110 +0920 +0000 +07C0 +0820 +1010 +16D0 +1830 +2928 +4444 +9FF2 +8102 +FFFE +ENDCHAR +STARTCHAR uni01F648 +ENCODING 128584 +BBX 15 12 0 0 +BITMAP +07C0 +6FEC +9BB2 +9112 +AC6A +729C +3298 +2448 +2BA8 +4824 +57D4 +5394 +ENDCHAR +STARTCHAR uni01F649 +ENCODING 128585 +BBX 15 12 0 0 +BITMAP +07C0 +6FEC +5BB4 +9112 +A00A +A44A +A00A +9392 +5394 +5834 +57D4 +5394 +ENDCHAR +STARTCHAR uni01F64A +ENCODING 128586 +BBX 15 12 0 0 +BITMAP +07C0 +6FEC +9BB2 +9112 +A00A +644C +2008 +1390 +0C60 +1050 +27C8 +4BA4 +ENDCHAR +STARTCHAR uni01F64B +ENCODING 128587 +BBX 13 15 1 -2 +BITMAP +3000 +4800 +4800 +9000 +A780 +A840 +B020 +A010 +A490 +A010 +A790 +9320 +8850 +4788 +4008 +ENDCHAR +STARTCHAR uni01F64C +ENCODING 128588 +BBX 14 15 1 -2 +BITMAP +6018 +9024 +9024 +9864 +A014 +A794 +A854 +B034 +A014 +A494 +A014 +A794 +9324 +8844 +4788 +ENDCHAR +STARTCHAR uni01F64D +ENCODING 128589 +BBX 14 12 1 0 +BITMAP +0780 +0840 +1020 +2010 +6CD8 +A014 +A014 +9324 +8844 +97A4 +9024 +9024 +ENDCHAR +STARTCHAR uni01F64E +ENCODING 128590 +BBX 14 12 1 0 +BITMAP +0780 +0840 +14A0 +2850 +2CD0 +2010 +2010 +1320 +6858 +8784 +9024 +9024 +ENDCHAR +STARTCHAR uni01F64F +ENCODING 128591 +BBX 15 10 0 0 +BITMAP +07C0 +0820 +1010 +16D0 +1830 +2BA8 +4544 +9D72 +8102 +FFFE +ENDCHAR +STARTCHAR uni01F650 +ENCODING 128592 +BBX 12 11 2 0 +BITMAP +6000 +6000 +6000 +21C0 +5220 +8810 +8410 +8260 +8300 +4480 +3860 +ENDCHAR +STARTCHAR uni01F651 +ENCODING 128593 +BBX 11 12 3 0 +BITMAP +0600 +0920 +1120 +1040 +1080 +0980 +0240 +0420 +0820 +F020 +E840 +0780 +ENDCHAR +STARTCHAR uni01F652 +ENCODING 128594 +BBX 11 12 3 0 +BITMAP +3C00 +42E0 +81E0 +8200 +8400 +4800 +3200 +2100 +4100 +9100 +9200 +0C00 +ENDCHAR +STARTCHAR uni01F653 +ENCODING 128595 +BBX 12 11 2 0 +BITMAP +61C0 +1220 +0C10 +6410 +8210 +8110 +44A0 +3840 +0060 +0060 +0060 +ENDCHAR +STARTCHAR uni01F654 +ENCODING 128596 +BBX 11 12 2 0 +BITMAP +0780 +E840 +F020 +0820 +0420 +0240 +0980 +1080 +1040 +1120 +0920 +0600 +ENDCHAR +STARTCHAR uni01F655 +ENCODING 128597 +BBX 12 11 2 0 +BITMAP +3860 +4480 +8300 +8260 +8410 +8810 +5220 +21C0 +6000 +6000 +6000 +ENDCHAR +STARTCHAR uni01F656 +ENCODING 128598 +BBX 12 11 2 0 +BITMAP +0060 +0060 +0060 +3840 +44A0 +8110 +8210 +6410 +0C10 +1220 +61C0 +ENDCHAR +STARTCHAR uni01F657 +ENCODING 128599 +BBX 11 12 2 0 +BITMAP +0C00 +9200 +9100 +4100 +2100 +3200 +4800 +8400 +8200 +81E0 +42E0 +3C00 +ENDCHAR +STARTCHAR uni01F658 +ENCODING 128600 +BBX 13 9 1 2 +BITMAP +00E0 +0110 +0200 +03E0 +6C10 +9088 +6848 +0648 +0190 +ENDCHAR +STARTCHAR uni01F659 +ENCODING 128601 +BBX 13 9 1 1 +BITMAP +0190 +0648 +6848 +9088 +6C10 +03E0 +0200 +0110 +00E0 +ENDCHAR +STARTCHAR uni01F65A +ENCODING 128602 +BBX 13 9 1 2 +BITMAP +3800 +4400 +0200 +3E00 +41B0 +8848 +90B0 +9300 +4C00 +ENDCHAR +STARTCHAR uni01F65B +ENCODING 128603 +BBX 13 9 1 1 +BITMAP +4C00 +9300 +90B0 +8848 +41B0 +3E00 +0200 +4400 +3800 +ENDCHAR +STARTCHAR uni01F65C +ENCODING 128604 +BBX 14 12 1 0 +BITMAP +0038 +00D8 +0100 +0200 +73E0 +7CF8 +980C +6C8C +064C +03CC +0198 +0020 +ENDCHAR +STARTCHAR uni01F65D +ENCODING 128605 +BBX 14 12 1 0 +BITMAP +0020 +0198 +03CC +064C +6C8C +980C +7CF8 +73E0 +0200 +0100 +00D8 +0038 +ENDCHAR +STARTCHAR uni01F65E +ENCODING 128606 +BBX 14 12 1 0 +BITMAP +7000 +6C00 +0200 +0100 +1F38 +7CF8 +C064 +C4D8 +C980 +CF00 +6600 +1000 +ENDCHAR +STARTCHAR uni01F65F +ENCODING 128607 +BBX 14 12 1 0 +BITMAP +1000 +6600 +CF00 +C980 +C4D8 +C064 +7CF8 +1F38 +0100 +0200 +6C00 +7000 +ENDCHAR +STARTCHAR uni01F660 +ENCODING 128608 +BBX 14 11 1 0 +BITMAP +7000 +4800 +4460 +2410 +1708 +3884 +4804 +8404 +8204 +8908 +70F0 +ENDCHAR +STARTCHAR uni01F661 +ENCODING 128609 +BBX 14 11 1 0 +BITMAP +70F0 +8908 +8204 +8404 +4804 +3884 +1708 +2410 +4460 +4800 +7000 +ENDCHAR +STARTCHAR uni01F662 +ENCODING 128610 +BBX 14 11 1 0 +BITMAP +0038 +0048 +1888 +2090 +43A0 +8470 +8048 +8084 +8104 +4244 +3C38 +ENDCHAR +STARTCHAR uni01F663 +ENCODING 128611 +BBX 14 11 1 0 +BITMAP +3C38 +4244 +8104 +8084 +8048 +8470 +43A0 +2090 +1888 +0048 +0038 +ENDCHAR +STARTCHAR uni01F664 +ENCODING 128612 +BBX 14 11 1 0 +BITMAP +F000 +C800 +C460 +6430 +3718 +3B8C +684C +C40C +C31C +F9F8 +70F0 +ENDCHAR +STARTCHAR uni01F665 +ENCODING 128613 +BBX 14 11 1 0 +BITMAP +70F0 +F9F8 +C31C +C40C +684C +3B8C +3718 +6430 +C460 +C800 +F000 +ENDCHAR +STARTCHAR uni01F666 +ENCODING 128614 +BBX 14 11 1 0 +BITMAP +003C +004C +188C +3098 +63B0 +C770 +C858 +C08C +E30C +7E7C +3C38 +ENDCHAR +STARTCHAR uni01F667 +ENCODING 128615 +BBX 14 11 1 0 +BITMAP +3C38 +7E7C +E30C +C08C +C858 +C770 +63B0 +3098 +188C +004C +003C +ENDCHAR +STARTCHAR uni01F668 +ENCODING 128616 +BBX 13 13 1 -1 +BITMAP +E038 +9048 +8888 +4510 +2520 +1AC0 +0700 +1AC0 +2520 +4510 +8888 +9048 +E038 +ENDCHAR +STARTCHAR uni01F669 +ENCODING 128617 +BBX 15 15 0 -2 +BITMAP +FFFE +8FE2 +A7CA +9392 +CBA6 +E38E +FD7E +FEFE +FD7E +E38E +CBA6 +9392 +A7CA +8FE2 +FFFE +ENDCHAR +STARTCHAR uni01F66A +ENCODING 128618 +BBX 13 13 1 -1 +BITMAP +F078 +98C8 +8D88 +C518 +6530 +3DE0 +0500 +3DE0 +6530 +C518 +8D88 +98C8 +F078 +ENDCHAR +STARTCHAR uni01F66B +ENCODING 128619 +BBX 15 15 0 -2 +BITMAP +FFFE +87C2 +A38A +9112 +8922 +C106 +E10E +FFFE +E10E +C106 +8922 +9112 +A38A +87C2 +FFFE +ENDCHAR +STARTCHAR uni01F66C +ENCODING 128620 +BBX 13 13 1 -1 +BITMAP +0020 +0010 +0188 +0288 +3FC8 +5070 +9078 +5070 +3FC8 +0288 +0188 +0010 +0020 +ENDCHAR +STARTCHAR uni01F66D +ENCODING 128621 +BBX 13 13 1 -1 +BITMAP +0200 +0500 +0880 +0F80 +0880 +0880 +18C0 +28A0 +38E0 +0F80 +8708 +4710 +3AE0 +ENDCHAR +STARTCHAR uni01F66E +ENCODING 128622 +BBX 13 13 1 -1 +BITMAP +2000 +4000 +8C00 +8A00 +9FE0 +7050 +F048 +7050 +9FE0 +8A00 +8C00 +4000 +2000 +ENDCHAR +STARTCHAR uni01F66F +ENCODING 128623 +BBX 13 13 1 -1 +BITMAP +3AE0 +4710 +8708 +0F80 +38E0 +28A0 +18C0 +0880 +0880 +0F80 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni01F670 +ENCODING 128624 +BBX 14 9 1 0 +BITMAP +1984 +2664 +4258 +8240 +8440 +F8C0 +8140 +4640 +3840 +ENDCHAR +STARTCHAR uni01F671 +ENCODING 128625 +BBX 14 11 1 -1 +BITMAP +03C0 +1DE4 +2E74 +4678 +8660 +9C60 +F8E0 +8160 +C760 +7E60 +3800 +ENDCHAR +STARTCHAR uni01F672 +ENCODING 128626 +BBX 12 12 2 0 +BITMAP +7800 +8000 +8000 +8000 +4000 +3FF0 +4180 +8180 +8180 +8280 +4480 +3880 +ENDCHAR +STARTCHAR uni01F673 +ENCODING 128627 +BBX 13 13 1 -1 +BITMAP +3C00 +6000 +C000 +C000 +E000 +7FF8 +20C0 +40C0 +C0C0 +C1C0 +E2C0 +7EC0 +3CC0 +ENDCHAR +STARTCHAR uni01F674 +ENCODING 128628 +BBX 12 12 2 0 +BITMAP +1C00 +3600 +3600 +3600 +1C00 +3C70 +6E20 +E720 +E3C0 +F1E0 +7F70 +3E00 +ENDCHAR +STARTCHAR uni01F675 +ENCODING 128629 +BBX 14 12 1 0 +BITMAP +3800 +4408 +4404 +2804 +31F8 +4A20 +8420 +8220 +8144 +8084 +4144 +3E38 +ENDCHAR +STARTCHAR uni01F676 +ENCODING 128630 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 6 +BITMAP +33 +66 +CC +EE +EE +EE +ENDCHAR +STARTCHAR uni01F677 +ENCODING 128631 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 6 +BITMAP +77 +77 +77 +33 +66 +CC +ENDCHAR +STARTCHAR uni01F678 +ENCODING 128632 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 6 0 -2 +BITMAP +77 +77 +77 +33 +66 +CC +ENDCHAR +STARTCHAR uni01F679 +ENCODING 128633 +BBX 11 14 2 -2 +BITMAP +0C00 +3F80 +4DC0 +8CE0 +8CE0 +0CE0 +0DC0 +0F80 +0E00 +0C00 +0C00 +0000 +0C00 +0C00 +ENDCHAR +STARTCHAR uni01F67A +ENCODING 128634 +BBX 9 13 2 -1 +BITMAP +0800 +3E00 +4900 +8880 +8880 +0880 +0900 +0A00 +0C00 +0800 +0800 +0000 +0800 +ENDCHAR +STARTCHAR uni01F67B +ENCODING 128635 +BBX 12 14 2 -2 +BITMAP +0600 +1FC0 +7FE0 +E670 +C630 +0670 +06E0 +07C0 +0780 +0700 +0600 +0000 +0600 +0600 +ENDCHAR +STARTCHAR uni01F67C +ENCODING 128636 +BBX 11 12 2 0 +BITMAP +07E0 +07E0 +0FC0 +0FC0 +1F80 +1F80 +3F00 +3F00 +7E00 +7E00 +FC00 +FC00 +ENDCHAR +STARTCHAR uni01F67D +ENCODING 128637 +BBX 11 12 2 0 +BITMAP +FC00 +FC00 +7E00 +7E00 +3F00 +3F00 +1F80 +1F80 +0FC0 +0FC0 +07E0 +07E0 +ENDCHAR +STARTCHAR uni01F67E +ENCODING 128638 +BBX 16 16 0 -2 +BITMAP +00FF +00FF +00FF +00FF +00FF +00FF +00FF +00FF +FF00 +FF00 +FF00 +FF00 +FF00 +FF00 +FF00 +FF00 +ENDCHAR +STARTCHAR uni01F67F +ENCODING 128639 +BBX 16 16 0 -2 +BITMAP +FF00 +FF00 +FF00 +FF00 +FF00 +FF00 +FF00 +FF00 +00FF +00FF +00FF +00FF +00FF +00FF +00FF +00FF +ENDCHAR +STARTCHAR uni01F680 +ENCODING 128640 +BBX 15 15 1 -2 +BITMAP +F000 +8C00 +8260 +8190 +4088 +404C +2270 +1140 +1890 +2748 +2206 +1290 +0C48 +0424 +0020 +ENDCHAR +STARTCHAR uni01F681 +ENCODING 128641 +BBX 14 11 1 -1 +BITMAP +FF80 +0800 +3E18 +4724 +8324 +83F4 +FFF4 +7F24 +3E24 +1218 +FFC0 +ENDCHAR +STARTCHAR uni01F682 +ENCODING 128642 +BBX 16 12 0 0 +BITMAP +1800 +3C00 +3C3F +183C +19BC +3FFF +7FFF +7FF3 +2DAD +525E +BFFE +124C +ENDCHAR +STARTCHAR uni01F683 +ENCODING 128643 +BBX 16 10 0 0 +BITMAP +7FFF +7FFF +7FFF +6493 +6493 +7FFF +FFFF +7FFF +1C1C +0808 +ENDCHAR +STARTCHAR uni01F684 +ENCODING 128644 +BBX 16 10 0 0 +BITMAP +007F +01FF +0249 +0499 +1FFF +7FFF +FFFF +FFFF +77EF +0240 +ENDCHAR +STARTCHAR uni01F685 +ENCODING 128645 +BBX 15 10 1 0 +BITMAP +00FE +03FE +0492 +0932 +7FFE +FFFE +FFFE +FFFE +6FDE +0480 +ENDCHAR +STARTCHAR uni01F686 +ENCODING 128646 +BBX 9 13 3 -1 +BITMAP +7F00 +FF80 +8880 +8880 +8880 +FF80 +FF80 +F780 +FF80 +DD80 +FF80 +4100 +4100 +ENDCHAR +STARTCHAR uni01F687 +ENCODING 128647 +BBX 13 12 1 0 +BITMAP +1FC0 +3FE0 +6030 +6DB0 +EDB8 +EDB8 +E038 +E8B8 +6030 +7770 +3760 +1FC0 +ENDCHAR +STARTCHAR uni01F688 +ENCODING 128648 +BBX 10 13 3 -1 +BITMAP +7F80 +C0C0 +FFC0 +8C40 +8C40 +8C40 +FFC0 +FFC0 +F3C0 +F3C0 +FFC0 +FFC0 +4080 +ENDCHAR +STARTCHAR uni01F689 +ENCODING 128649 +BBX 13 13 2 -1 +BITMAP +0FE0 +0010 +FFC8 +8C48 +8C48 +8C48 +FFC8 +FFC8 +F3C8 +F3C8 +FFD0 +FFD0 +40F0 +ENDCHAR +STARTCHAR uni01F68A +ENCODING 128650 +BBX 10 13 3 -1 +BITMAP +3F00 +0C00 +FFC0 +8C40 +8C40 +8C40 +FFC0 +FFC0 +F3C0 +F3C0 +FFC0 +FFC0 +4080 +ENDCHAR +STARTCHAR uni01F68B +ENCODING 128651 +BBX 15 12 0 0 +BITMAP +1010 +2828 +1010 +7FFC +FFFE +9112 +9112 +FFFE +FFFE +FFFE +FFFE +2448 +ENDCHAR +STARTCHAR uni01F68C +ENCODING 128652 +BBX 16 10 0 0 +BITMAP +3FFF +7FFF +D249 +9249 +FFFF +FFFF +DFFB +AFF5 +700E +2004 +ENDCHAR +STARTCHAR uni01F68D +ENCODING 128653 +BBX 10 13 3 -1 +BITMAP +7F80 +C0C0 +FFC0 +8C40 +8C40 +8C40 +FFC0 +FFC0 +FFC0 +9E40 +9E40 +FFC0 +4080 +ENDCHAR +STARTCHAR uni01F68E +ENCODING 128654 +BBX 16 13 0 0 +BITMAP +FFFF +0070 +0380 +3FFF +7FFF +D249 +9249 +FFFF +FFFF +DFFB +AFF5 +700E +2004 +ENDCHAR +STARTCHAR uni01F68F +ENCODING 128655 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 13 0 0 +BITMAP +38 +44 +AA +BA +AA +44 +38 +10 +10 +10 +10 +10 +7C +ENDCHAR +STARTCHAR uni01F690 +ENCODING 128656 +BBX 13 10 1 0 +BITMAP +3FF8 +7FF8 +D248 +9248 +FFF8 +FFF8 +DFD8 +AFA8 +7070 +2020 +ENDCHAR +STARTCHAR uni01F691 +ENCODING 128657 +BBX 14 14 1 0 +BITMAP +1000 +4400 +1000 +2800 +3FFC +5E7C +9E7C +F81C +F81C +FE7C +DE7C +AFD4 +7038 +2010 +ENDCHAR +STARTCHAR uni01F692 +ENCODING 128658 +BBX 16 13 0 0 +BITMAP +E000 +BFFF +EAAD +FFFF +008C +3F4C +5D2C +9D1C +FFFF +DFFB +AFF5 +700E +2004 +ENDCHAR +STARTCHAR uni01F693 +ENCODING 128659 +BBX 15 12 0 0 +BITMAP +0100 +0440 +0100 +0280 +03E0 +0490 +0888 +7FFE +F66E +EBD6 +1C38 +0810 +ENDCHAR +STARTCHAR uni01F694 +ENCODING 128660 +BBX 9 12 3 0 +BITMAP +0800 +4900 +2200 +0800 +3E00 +4100 +8080 +FF80 +BE80 +FF80 +4100 +4100 +ENDCHAR +STARTCHAR uni01F695 +ENCODING 128661 +BBX 15 13 0 0 +BITMAP +764A +2932 +2F32 +294A +0000 +03E0 +0490 +0888 +7FFE +F7EE +EBD6 +1C38 +0810 +ENDCHAR +STARTCHAR uni01F696 +ENCODING 128662 +BBX 14 13 1 0 +BITMAP +EC94 +5264 +5E64 +5294 +0000 +0F80 +1040 +2020 +3FE0 +2FA0 +3FE0 +1040 +1040 +ENDCHAR +STARTCHAR uni01F697 +ENCODING 128663 +BBX 15 8 0 0 +BITMAP +03E0 +0490 +0888 +7FFE +F7EE +EBD6 +1C38 +0810 +ENDCHAR +STARTCHAR uni01F698 +ENCODING 128664 +BBX 9 8 3 0 +BITMAP +3E00 +4100 +8080 +FF80 +BE80 +FF80 +4100 +4100 +ENDCHAR +STARTCHAR uni01F699 +ENCODING 128665 +BBX 13 8 1 0 +BITMAP +07E0 +0920 +1128 +FFE8 +FFE8 +FFE0 +60C0 +60C0 +ENDCHAR +STARTCHAR uni01F69A +ENCODING 128666 +BBX 14 12 1 0 +BITMAP +1FFC +1FFC +7FFC +9FFC +9FFC +FFFC +FFFC +FFFC +DFEC +AFD4 +7038 +2010 +ENDCHAR +STARTCHAR uni01F69B +ENCODING 128667 +BBX 16 10 0 0 +BITMAP +07FF +07FF +77FF +97FF +97FF +F27F +DD3B +AAB5 +770E +2204 +ENDCHAR +STARTCHAR uni01F69C +ENCODING 128668 +BBX 14 11 1 0 +BITMAP +0010 +0210 +0310 +0470 +FFF8 +FF8C +FF74 +DEF8 +AEF8 +70F8 +2070 +ENDCHAR +STARTCHAR uni01F69D +ENCODING 128669 +BBX 13 9 1 0 +BITMAP +7FF0 +9248 +9248 +FFF8 +FFF8 +FFF8 +FFF8 +0000 +FFF8 +ENDCHAR +STARTCHAR uni01F69E +ENCODING 128670 +BBX 13 13 2 -1 +BITMAP +0038 +01C8 +0E48 +7278 +93F8 +9FF8 +FFF8 +FFE0 +FF18 +F8E0 +C700 +3800 +C000 +ENDCHAR +STARTCHAR uni01F69F +ENCODING 128671 +BBX 13 9 1 0 +BITMAP +FFF8 +0000 +7FF0 +9248 +9248 +FFF8 +FFF8 +FFF8 +FFF8 +ENDCHAR +STARTCHAR uni01F6A0 +ENCODING 128672 +BBX 14 14 1 -1 +BITMAP +001C +00E0 +0700 +381C +C0E4 +0724 +393C +49FC +4FFC +7FFC +7FF0 +7F80 +7C00 +6000 +ENDCHAR +STARTCHAR uni01F6A1 +ENCODING 128673 +BBX 12 12 2 0 +BITMAP +0070 +0380 +1D00 +E100 +0100 +3FF0 +2490 +2490 +3FF0 +3FF0 +3FF0 +3FF0 +ENDCHAR +STARTCHAR uni01F6A2 +ENCODING 128674 +BBX 13 14 1 -1 +BITMAP +0200 +0200 +3FE0 +1040 +1040 +1740 +3AE0 +2220 +2220 +1240 +1240 +0A80 +F778 +0200 +ENDCHAR +STARTCHAR uni01F6A3 +ENCODING 128675 +BBX 13 10 2 0 +BITMAP +0200 +0500 +0220 +07C0 +0840 +1080 +FFF8 +8108 +4210 +3FE0 +ENDCHAR +STARTCHAR uni01F6A4 +ENCODING 128676 +BBX 13 10 2 0 +BITMAP +1000 +2800 +1000 +1E30 +11F8 +1078 +FFE8 +8028 +4028 +3FE8 +ENDCHAR +STARTCHAR uni01F6A5 +ENCODING 128677 +BBX 12 11 2 0 +BITMAP +7FE0 +8010 +B6D0 +B6D0 +8010 +7FE0 +3000 +3000 +3000 +3000 +3000 +ENDCHAR +STARTCHAR uni01F6A6 +ENCODING 128678 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 12 1 0 +BITMAP +78 +84 +B4 +B4 +84 +B4 +B4 +84 +B4 +B4 +84 +78 +ENDCHAR +STARTCHAR uni01F6A7 +ENCODING 128679 +BBX 16 15 0 -1 +BITMAP +1008 +4242 +1818 +A425 +2424 +1818 +7FFE +4CCE +599A +7332 +7FFE +1818 +1818 +1818 +1818 +ENDCHAR +STARTCHAR uni01F6A8 +ENCODING 128680 +BBX 13 12 1 0 +BITMAP +2020 +9048 +4710 +0880 +9048 +5750 +1740 +3FE0 +2020 +2020 +2020 +3FE0 +ENDCHAR +STARTCHAR uni01F6A9 +ENCODING 128681 +BBX 9 11 4 0 +BITMAP +3800 +2700 +2080 +2700 +3800 +2000 +2000 +2000 +2000 +2000 +F800 +ENDCHAR +STARTCHAR uni01F6AA +ENCODING 128682 +BBX 8 11 4 0 +BITMAP +FF +81 +BD +A5 +A5 +BD +81 +A1 +81 +81 +FF +ENDCHAR +STARTCHAR uni01F6AB +ENCODING 128683 +BBX 12 12 2 0 +BITMAP +0F00 +3FC0 +70E0 +61E0 +C3B0 +C730 +CE30 +DC30 +7860 +70E0 +3FC0 +0F00 +ENDCHAR +STARTCHAR uni01F6AC +ENCODING 128684 +BBX 11 9 2 2 +BITMAP +0120 +0240 +0140 +0120 +0120 +0140 +0080 +FF00 +FF00 +ENDCHAR +STARTCHAR uni01F6AD +ENCODING 128685 +BBX 12 12 2 0 +BITMAP +0F00 +30C0 +40A0 +4120 +8250 +8450 +BF90 +BF90 +5020 +6020 +30C0 +0F00 +ENDCHAR +STARTCHAR uni01F6AE +ENCODING 128686 +BBX 12 10 2 0 +BITMAP +00C0 +00C0 +0040 +17C0 +0040 +FC40 +84A0 +48A0 +4910 +7910 +ENDCHAR +STARTCHAR uni01F6AF +ENCODING 128687 +BBX 12 12 2 0 +BITMAP +0F00 +30C0 +4360 +4320 +8150 +AF90 +8310 +8510 +4920 +7120 +30C0 +0F00 +ENDCHAR +STARTCHAR uni01F6B0 +ENCODING 128688 +BBX 16 16 0 -2 +BITMAP +07E0 +1818 +2004 +4002 +47C2 +8101 +8281 +8EE1 +8811 +8ED1 +8151 +4072 +4002 +2004 +1818 +07E0 +ENDCHAR +STARTCHAR uni01F6B1 +ENCODING 128689 +BBX 16 16 0 -2 +BITMAP +07E0 +1818 +2004 +400A +47D2 +8121 +82C1 +8EE1 +8911 +8ED1 +8551 +4872 +5002 +2004 +1818 +07E0 +ENDCHAR +STARTCHAR uni01F6B2 +ENCODING 128690 +BBX 14 10 1 0 +BITMAP +0C00 +1000 +11C0 +2080 +3FE0 +6438 +BA54 +A9F4 +8844 +7038 +ENDCHAR +STARTCHAR uni01F6B3 +ENCODING 128691 +BBX 14 14 1 -1 +BITMAP +0FC0 +1020 +2818 +49F8 +90E4 +9FE4 +99A4 +B764 +CF94 +CA94 +B464 +6008 +6010 +1FE0 +ENDCHAR +STARTCHAR uni01F6B4 +ENCODING 128692 +BBX 14 12 1 0 +BITMAP +0600 +0600 +0100 +0280 +0480 +0880 +0300 +7438 +8A44 +8944 +8844 +7038 +ENDCHAR +STARTCHAR uni01F6B5 +ENCODING 128693 +BBX 14 12 1 0 +BITMAP +0060 +0460 +0300 +70E0 +8860 +88C0 +8980 +7338 +0244 +0244 +0144 +00B8 +ENDCHAR +STARTCHAR uni01F6B6 +ENCODING 128694 +BBX 7 10 5 0 +BITMAP +30 +30 +18 +34 +D2 +10 +28 +44 +42 +42 +ENDCHAR +STARTCHAR uni01F6B7 +ENCODING 128695 +BBX 14 14 1 -1 +BITMAP +0FC0 +1020 +2330 +4348 +4188 +8344 +8F24 +8304 +8684 +4C48 +5428 +2430 +1020 +0FC0 +ENDCHAR +STARTCHAR uni01F6B8 +ENCODING 128696 +BBX 11 10 3 0 +BITMAP +0300 +6300 +6180 +2340 +E520 +3900 +2280 +6440 +A420 +9420 +ENDCHAR +STARTCHAR uni01F6B9 +ENCODING 128697 +BBX 7 12 4 0 +BITMAP +38 +38 +00 +7C +BA +BA +BA +BA +28 +28 +28 +28 +ENDCHAR +STARTCHAR uni01F6BA +ENCODING 128698 +BBX 9 12 3 0 +BITMAP +1C00 +1C00 +0000 +3E00 +5D00 +9C80 +1C00 +3E00 +7F00 +1400 +1400 +1400 +ENDCHAR +STARTCHAR uni01F6BB +ENCODING 128699 +BBX 15 14 0 -1 +BITMAP +0100 +1930 +1930 +0100 +7D7C +BBBA +B93A +B97C +397C +2928 +2928 +2928 +2928 +0100 +ENDCHAR +STARTCHAR uni01F6BC +ENCODING 128700 +BBX 10 13 3 -1 +BITMAP +0C00 +0C00 +0000 +FFC0 +FFC0 +1E00 +1E00 +1E00 +2100 +3300 +3F00 +3300 +3300 +ENDCHAR +STARTCHAR uni01F6BD +ENCODING 128701 +BBX 10 10 3 0 +BITMAP +05C0 +05C0 +05C0 +03C0 +03C0 +FFC0 +FF00 +7E00 +3C00 +FF00 +ENDCHAR +STARTCHAR uni01F6BE +ENCODING 128702 +BBX 15 12 0 0 +BITMAP +8980 +AA00 +AA2E +51AE +002E +001E +001E +07FE +07F8 +03F0 +01E0 +07F8 +ENDCHAR +STARTCHAR uni01F6BF +ENCODING 128703 +BBX 9 13 3 0 +BITMAP +0800 +1C00 +2200 +4100 +7F00 +0000 +5500 +0000 +5500 +0000 +AA80 +0000 +AA80 +ENDCHAR +STARTCHAR uni01F6C0 +ENCODING 128704 +BBX 14 12 1 0 +BITMAP +0044 +3248 +4928 +4924 +3224 +2248 +1800 +FFFC +8804 +4708 +2010 +3FF0 +ENDCHAR +STARTCHAR uni01F6C1 +ENCODING 128705 +BBX 14 13 1 0 +BITMAP +0008 +0074 +0094 +0054 +0024 +0004 +0004 +0004 +FFFC +8004 +4008 +2010 +3FE0 +ENDCHAR +STARTCHAR uni01F6C2 +ENCODING 128706 +BBX 12 12 2 0 +BITMAP +01E0 +2000 +51E0 +D1E0 +B9E0 +8800 +4FD0 +2FB0 +1370 +02F0 +0010 +03F0 +ENDCHAR +STARTCHAR uni01F6C3 +ENCODING 128707 +BBX 14 13 1 -1 +BITMAP +0078 +0000 +0078 +0078 +0078 +0000 +C3F4 +C7EC +CEDC +CCBC +C004 +7EFC +3E00 +ENDCHAR +STARTCHAR uni01F6C4 +ENCODING 128708 +BBX 13 12 1 -1 +BITMAP +0F80 +1040 +6FB0 +EDB8 +E8B8 +E8B8 +EFB8 +EFB8 +6FB0 +FFF8 +3060 +3060 +ENDCHAR +STARTCHAR uni01F6C5 +ENCODING 128709 +BBX 11 14 2 -2 +BITMAP +1F00 +2080 +5F40 +DB60 +D160 +DF60 +DF60 +5F40 +0000 +00C0 +FF20 +B720 +9120 +00C0 +ENDCHAR +STARTCHAR uni01F6C6 +ENCODING 128710 +BBX 14 13 1 0 +BITMAP +0300 +0780 +0CC0 +0CC0 +1860 +1860 +3030 +3030 +6018 +6018 +C00C +FFFC +7FF8 +ENDCHAR +STARTCHAR uni01F6C7 +ENCODING 128711 +BBX 12 12 2 0 +BITMAP +0F00 +3FC0 +70E0 +7860 +DC30 +CE30 +C730 +C3B0 +61E0 +70E0 +3FC0 +0F00 +ENDCHAR +STARTCHAR uni01F6C8 +ENCODING 128712 +BBX 14 14 1 -1 +BITMAP +0780 +1860 +2010 +4308 +4308 +8004 +8704 +8304 +8304 +4308 +4788 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uni01F6C9 +ENCODING 128713 +BBX 8 12 4 0 +BITMAP +18 +18 +00 +3C +5A +99 +5A +18 +24 +24 +24 +24 +ENDCHAR +STARTCHAR uni01F6CA +ENCODING 128714 +BBX 8 12 4 0 +BITMAP +18 +18 +00 +3C +5A +99 +3C +7E +7E +24 +24 +24 +ENDCHAR +STARTCHAR uni01F6CB +ENCODING 128715 +BBX 16 12 0 0 +BITMAP +000E +000A +0011 +001F +7FC4 +8024 +8024 +E0E4 +A0A4 +BFA4 +8024 +FFEE +ENDCHAR +STARTCHAR uni01F6CC +ENCODING 128716 +BBX 14 10 1 0 +BITMAP +8000 +8000 +B3E4 +B414 +880C +FFFC +FFFC +FFFC +8004 +8004 +ENDCHAR +STARTCHAR uni01F6CD +ENCODING 128717 +BBX 14 11 1 0 +BITMAP +1000 +2840 +FEA0 +82A0 +87FC +8404 +84E4 +84E4 +FC04 +0404 +07FC +ENDCHAR +STARTCHAR uni01F6CE +ENCODING 128718 +BBX 13 10 1 0 +BITMAP +0880 +4510 +2020 +8208 +4F90 +1040 +2020 +2020 +7FF0 +7FF0 +ENDCHAR +STARTCHAR uni01F6CF +ENCODING 128719 +BBX 14 10 1 0 +BITMAP +8000 +8000 +8004 +B7F4 +C80C +FFFC +FFFC +FFFC +8004 +8004 +ENDCHAR +STARTCHAR uni01F6D0 +ENCODING 128720 +BBX 13 14 1 -1 +BITMAP +0200 +0D80 +3060 +C318 +8308 +8908 +8488 +8388 +8088 +8088 +8708 +87C8 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F6D1 +ENCODING 128721 +BBX 13 13 1 0 +BITMAP +0F80 +1AC0 +2AA0 +6AB0 +AAA8 +AAA8 +AAA8 +AAA8 +AAA8 +6AB0 +2AA0 +1AC0 +0F80 +ENDCHAR +STARTCHAR uni01F6D2 +ENCODING 128722 +BBX 12 14 3 -1 +BITMAP +0070 +0040 +FFC0 +8040 +8040 +8040 +8040 +FFC0 +0040 +0040 +FFC0 +0000 +6180 +6180 +ENDCHAR +STARTCHAR uni01F6D3 +ENCODING 128723 +BBX 13 15 1 -2 +BITMAP +0200 +0700 +1740 +0F80 +0500 +0500 +0880 +0880 +1040 +8888 +7FF0 +4010 +3FE0 +4010 +FFF8 +ENDCHAR +STARTCHAR uni01F6D4 +ENCODING 128724 +BBX 13 13 1 0 +BITMAP +0200 +0200 +0500 +1FC0 +0880 +3FE0 +1040 +7FF0 +2020 +FFF8 +4010 +4010 +7FF0 +ENDCHAR +STARTCHAR uni01F6E0 +ENCODING 128736 +BBX 13 12 1 0 +BITMAP +0E60 +3CC0 +38C8 +7CF8 +EDF0 +4380 +0700 +3EC0 +7CE0 +4C70 +0C38 +1810 +ENDCHAR +STARTCHAR uni01F6E1 +ENCODING 128737 +BBX 13 12 1 0 +BITMAP +4210 +BDE8 +8008 +8008 +8008 +8008 +4010 +4010 +2020 +1040 +0D80 +0200 +ENDCHAR +STARTCHAR uni01F6E2 +ENCODING 128738 +BBX 8 14 4 -1 +BITMAP +3C +42 +87 +C3 +BD +81 +C3 +BD +81 +C3 +BD +81 +42 +3C +ENDCHAR +STARTCHAR uni01F6E3 +ENCODING 128739 +BBX 15 14 0 -1 +BITMAP +0280 +0280 +06C0 +06C0 +0000 +FFFE +600C +6EEC +1EF0 +1EF0 +1EF0 +3EF8 +3EF8 +3EF8 +ENDCHAR +STARTCHAR uni01F6E4 +ENCODING 128740 +BBX 12 16 2 -2 +BITMAP +2040 +FFF0 +FFF0 +2040 +2040 +FFF0 +FFF0 +2040 +2040 +FFF0 +FFF0 +2040 +2040 +FFF0 +FFF0 +2040 +ENDCHAR +STARTCHAR uni01F6E5 +ENCODING 128741 +BBX 14 6 1 1 +BITMAP +1F80 +0980 +9180 +FF80 +7FFC +3FFC +ENDCHAR +STARTCHAR uni01F6E6 +ENCODING 128742 +BBX 11 14 2 -1 +BITMAP +0400 +0400 +0A00 +0E00 +0E00 +1F00 +1F00 +3F80 +3F80 +7FC0 +6EC0 +CE60 +9F20 +3580 +ENDCHAR +STARTCHAR uni01F6E7 +ENCODING 128743 +BBX 15 14 0 -1 +BITMAP +0100 +0280 +0380 +0380 +0BA0 +2FE8 +3FF8 +7FFC +F39E +C386 +0380 +07C0 +0FE0 +0D60 +ENDCHAR +STARTCHAR uni01F6E8 +ENCODING 128744 +BBX 15 14 0 -1 +BITMAP +0380 +0100 +0380 +0280 +0380 +7FFC +FFFE +7FFC +0380 +0380 +0380 +0FE0 +0FE0 +0100 +ENDCHAR +STARTCHAR uni01F6E9 +ENCODING 128745 +BBX 14 10 1 -1 +BITMAP +1C18 +3214 +73F4 +8004 +84B8 +7E40 +0120 +0090 +0050 +0020 +ENDCHAR +STARTCHAR uni01F6EA +ENCODING 128746 +BBX 12 12 2 -1 +BITMAP +3830 +1C70 +0FE0 +07C0 +03C0 +07C0 +0EE0 +1C70 +F830 +7010 +3000 +1000 +ENDCHAR +STARTCHAR uni01F6EB +ENCODING 128747 +BBX 12 9 2 0 +BITMAP +3830 +1E70 +07E0 +83C0 +CF00 +FC00 +7000 +0000 +FFF0 +ENDCHAR +STARTCHAR uni01F6EC +ENCODING 128748 +BBX 13 12 1 0 +BITMAP +0400 +0600 +8600 +C700 +E300 +7F00 +1F00 +27E0 +01F0 +0260 +0000 +FFF8 +ENDCHAR +STARTCHAR uni01F6F0 +ENCODING 128752 +BBX 16 16 0 -2 +BITMAP +1000 +2800 +5400 +AA00 +5440 +2CE0 +13F0 +03E0 +07C0 +0FC8 +3734 +0A2A +1455 +242A +0014 +0008 +ENDCHAR +STARTCHAR uni01F6F1 +ENCODING 128753 +BBX 13 13 1 -1 +BITMAP +1040 +8888 +4010 +1FC0 +3FE0 +2220 +2220 +3FE0 +3FE0 +3760 +3FE0 +3FE0 +1040 +ENDCHAR +STARTCHAR uni01F6F2 +ENCODING 128754 +BBX 16 10 0 0 +BITMAP +0FFF +13AB +13AB +7FFF +FFFF +FFFF +FFFF +FFFF +7E7E +2424 +ENDCHAR +STARTCHAR uni01F6F3 +ENCODING 128755 +BBX 14 10 1 0 +BITMAP +0660 +0FF0 +1010 +1010 +FFFC +7FFC +7FFC +3FFC +3FFC +1FF8 +ENDCHAR +STARTCHAR uni01F6F4 +ENCODING 128756 +BBX 12 13 2 0 +BITMAP +1000 +0C00 +0A00 +1000 +1000 +2000 +2000 +4000 +4000 +8000 +FFF0 +6060 +6060 +ENDCHAR +STARTCHAR uni01F6F5 +ENCODING 128757 +BBX 14 13 1 0 +BITMAP +0C00 +0600 +0700 +0C00 +1800 +3000 +33F8 +73FC +70FC +787C +FFFC +F878 +3030 +ENDCHAR +STARTCHAR uni01F6F6 +ENCODING 128758 +BBX 16 16 0 -2 +BITMAP +0003 +0007 +0006 +0008 +07D0 +1830 +20C8 +41C4 +4384 +2308 +1C70 +0B80 +1000 +6000 +E000 +C000 +ENDCHAR +STARTCHAR uni01F6F7 +ENCODING 128759 +BBX 13 5 1 0 +BITMAP +8000 +FFF8 +FFF0 +8840 +7FF0 +ENDCHAR +STARTCHAR uni01F6F8 +ENCODING 128760 +BBX 13 9 1 2 +BITMAP +0700 +0F80 +1540 +FFF8 +0000 +2490 +2490 +4848 +4848 +ENDCHAR +STARTCHAR uni01F6F9 +ENCODING 128761 +BBX 13 9 1 1 +BITMAP +0060 +0190 +0608 +1830 +60C8 +8330 +4C00 +3200 +0C00 +ENDCHAR +STARTCHAR uni01F700 +ENCODING 128768 +BBX 14 11 1 -1 +BITMAP +1E7C +2140 +2140 +4280 +42F0 +4280 +4280 +B500 +CD00 +79F0 +0600 +ENDCHAR +STARTCHAR uni01F701 +ENCODING 128769 +BBX 9 9 3 0 +BITMAP +0800 +1400 +1400 +2200 +FF80 +4100 +4100 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F702 +ENCODING 128770 +BBX 9 9 3 0 +BITMAP +0800 +1400 +1400 +2200 +2200 +4100 +4100 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F703 +ENCODING 128771 +BBX 9 9 3 0 +BITMAP +FF80 +8080 +4100 +4100 +FF80 +2200 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uni01F704 +ENCODING 128772 +BBX 9 9 3 0 +BITMAP +FF80 +8080 +4100 +4100 +2200 +2200 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uni01F705 +ENCODING 128773 +BBX 11 9 2 0 +BITMAP +FFE0 +8200 +8200 +4400 +4780 +4400 +2800 +2800 +1000 +ENDCHAR +STARTCHAR uni01F706 +ENCODING 128774 +BBX 11 9 2 0 +BITMAP +FFC0 +8220 +8220 +4420 +47C0 +4600 +2900 +2880 +1040 +ENDCHAR +STARTCHAR uni01F707 +ENCODING 128775 +BBX 11 10 2 0 +BITMAP +0FC0 +1420 +1420 +2420 +3FC0 +4480 +4440 +8440 +8420 +8420 +ENDCHAR +STARTCHAR uni01F708 +ENCODING 128776 +BBX 9 10 3 0 +BITMAP +9880 +A080 +9880 +4500 +5900 +2200 +2200 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uni01F709 +ENCODING 128777 +BBX 9 10 3 0 +BITMAP +4100 +A280 +4100 +2200 +2200 +1400 +1400 +0800 +1400 +0800 +ENDCHAR +STARTCHAR uni01F70A +ENCODING 128778 +BBX 11 11 2 0 +BITMAP +0E00 +0400 +0400 +0400 +8420 +FFE0 +8420 +0400 +0400 +0400 +0E00 +ENDCHAR +STARTCHAR uni01F70B +ENCODING 128779 +BBX 11 11 2 0 +BITMAP +0E00 +0400 +3580 +3580 +8420 +FFE0 +8420 +3580 +3580 +0400 +0E00 +ENDCHAR +STARTCHAR uni01F70C +ENCODING 128780 +BBX 7 11 4 0 +BITMAP +38 +10 +D6 +D6 +10 +10 +10 +D6 +D6 +10 +38 +ENDCHAR +STARTCHAR uni01F70D +ENCODING 128781 +BBX 9 10 3 0 +BITMAP +0800 +1400 +2200 +4100 +FF80 +0800 +0800 +3E00 +0800 +0800 +ENDCHAR +STARTCHAR uni01F70E +ENCODING 128782 +BBX 9 10 3 0 +BITMAP +0800 +1400 +2200 +4100 +FF80 +1C00 +2A00 +2A00 +4900 +4900 +ENDCHAR +STARTCHAR uni01F70F +ENCODING 128783 +BBX 9 10 3 0 +BITMAP +0800 +3E00 +0800 +3E00 +0800 +6B00 +9C80 +8880 +8880 +7700 +ENDCHAR +STARTCHAR uni01F710 +ENCODING 128784 +BBX 13 10 1 0 +BITMAP +8800 +7000 +8800 +8800 +8800 +70C0 +2120 +7F38 +2000 +2FF8 +ENDCHAR +STARTCHAR uni01F711 +ENCODING 128785 +BBX 9 13 3 -2 +BITMAP +1C00 +2200 +E380 +0000 +E380 +2200 +1C00 +2200 +2200 +1C00 +0800 +1C00 +0800 +ENDCHAR +STARTCHAR uni01F712 +ENCODING 128786 +BBX 13 14 1 -2 +BITMAP +0700 +0880 +9048 +F078 +8708 +0880 +0880 +0700 +0880 +0880 +0700 +0200 +0700 +0200 +ENDCHAR +STARTCHAR uni01F713 +ENCODING 128787 +BBX 14 10 1 0 +BITMAP +FDF8 +0810 +FFFC +2040 +78F0 +0408 +FFFC +0408 +8508 +78F0 +ENDCHAR +STARTCHAR uni01F714 +ENCODING 128788 +BBX 7 9 4 0 +BITMAP +38 +44 +44 +82 +FE +82 +44 +44 +38 +ENDCHAR +STARTCHAR uni01F715 +ENCODING 128789 +BBX 7 9 4 0 +BITMAP +38 +54 +54 +92 +92 +92 +54 +54 +38 +ENDCHAR +STARTCHAR uni01F716 +ENCODING 128790 +BBX 7 9 4 0 +BITMAP +38 +54 +54 +92 +9E +92 +54 +54 +38 +ENDCHAR +STARTCHAR uni01F717 +ENCODING 128791 +BBX 7 9 4 0 +BITMAP +38 +54 +54 +92 +F2 +92 +54 +54 +38 +ENDCHAR +STARTCHAR uni01F718 +ENCODING 128792 +BBX 7 10 4 0 +BITMAP +82 +82 +44 +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01F719 +ENCODING 128793 +BBX 12 11 2 0 +BITMAP +1000 +2800 +2800 +4400 +4400 +83F0 +4400 +4400 +2800 +2800 +1000 +ENDCHAR +STARTCHAR uni01F71A +ENCODING 128794 +BBX 10 10 3 0 +BITMAP +01C0 +0240 +0C40 +1080 +2100 +7100 +8A00 +8C00 +8800 +7000 +ENDCHAR +STARTCHAR uni01F71B +ENCODING 128795 +BBX 7 9 4 0 +BITMAP +10 +28 +10 +38 +44 +44 +44 +BA +44 +ENDCHAR +STARTCHAR uni01F71C +ENCODING 128796 +BBX 14 12 1 0 +BITMAP +0018 +0024 +01E4 +00D8 +0140 +7200 +8C00 +8800 +8800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni01F71D +ENCODING 128797 +BBX 10 10 3 0 +BITMAP +01C0 +00C0 +0140 +7A00 +8400 +3200 +4A00 +4A00 +4A00 +3400 +ENDCHAR +STARTCHAR uni01F71E +ENCODING 128798 +BBX 9 11 3 0 +BITMAP +0800 +1C00 +2A00 +0800 +3E00 +0800 +FF80 +4100 +2200 +1400 +0800 +ENDCHAR +STARTCHAR uni01F71F +ENCODING 128799 +BBX 13 12 1 0 +BITMAP +0A80 +1540 +2020 +3FE0 +2020 +1040 +0F80 +0200 +0700 +3260 +4A90 +8708 +ENDCHAR +STARTCHAR uni01F720 +ENCODING 128800 +BBX 9 12 3 -1 +BITMAP +7000 +8800 +8800 +8800 +8800 +8800 +7000 +2300 +2480 +7C80 +2480 +0300 +ENDCHAR +STARTCHAR uni01F721 +ENCODING 128801 +BBX 14 13 1 -1 +BITMAP +0018 +0024 +01E4 +00D8 +7140 +8A00 +8C00 +8800 +8800 +7000 +2000 +7000 +2000 +ENDCHAR +STARTCHAR uni01F722 +ENCODING 128802 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 3 -2 +BITMAP +70 +88 +88 +88 +88 +88 +70 +20 +A8 +70 +F8 +70 +A8 +ENDCHAR +STARTCHAR uni01F723 +ENCODING 128803 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +70 +88 +88 +70 +20 +F8 +20 +20 +70 +88 +88 +70 +ENDCHAR +STARTCHAR uni01F724 +ENCODING 128804 +BBX 12 7 2 0 +BITMAP +3830 +5440 +9280 +9FF0 +9280 +5440 +3830 +ENDCHAR +STARTCHAR uni01F725 +ENCODING 128805 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 -1 +BITMAP +20 +70 +20 +70 +88 +88 +88 +70 +20 +70 +20 +ENDCHAR +STARTCHAR uni01F726 +ENCODING 128806 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 11 1 -1 +BITMAP +20 +70 +20 +70 +88 +F8 +88 +70 +20 +70 +20 +ENDCHAR +STARTCHAR uni01F727 +ENCODING 128807 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 1 -2 +BITMAP +A8 +70 +F8 +70 +A8 +20 +70 +88 +F8 +88 +70 +20 +70 +20 +ENDCHAR +STARTCHAR uni01F728 +ENCODING 128808 +BBX 7 7 4 0 +BITMAP +38 +54 +92 +FE +92 +54 +38 +ENDCHAR +STARTCHAR uni01F729 +ENCODING 128809 +BBX 12 12 2 -2 +BITMAP +3000 +4800 +8400 +8400 +0400 +0800 +1000 +2460 +4490 +FF90 +0490 +0460 +ENDCHAR +STARTCHAR uni01F72A +ENCODING 128810 +BBX 12 11 2 0 +BITMAP +2060 +2090 +FF90 +2090 +2060 +2C00 +3200 +2100 +0100 +0200 +0C00 +ENDCHAR +STARTCHAR uni01F72B +ENCODING 128811 +BBX 12 12 2 0 +BITMAP +2060 +2090 +FF90 +2090 +2060 +7000 +8800 +8800 +8800 +8800 +8800 +7000 +ENDCHAR +STARTCHAR uni01F72C +ENCODING 128812 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 2 0 +BITMAP +A8 +70 +F8 +70 +A8 +20 +70 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni01F72D +ENCODING 128813 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +20 +20 +F8 +20 +20 +70 +88 +88 +F8 +88 +88 +70 +ENDCHAR +STARTCHAR uni01F72E +ENCODING 128814 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 14 2 -2 +BITMAP +A8 +70 +F8 +70 +A8 +20 +F8 +20 +70 +88 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni01F72F +ENCODING 128815 +BBX 9 13 3 -1 +BITMAP +0800 +0800 +3E00 +0800 +3E00 +4900 +AA80 +9C80 +FF80 +9C80 +AA80 +4900 +3E00 +ENDCHAR +STARTCHAR uni01F730 +ENCODING 128816 +BBX 9 7 3 0 +BITMAP +2A00 +5500 +8080 +FF80 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni01F731 +ENCODING 128817 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 12 1 0 +BITMAP +20 +20 +F8 +20 +20 +70 +88 +88 +A8 +88 +88 +70 +ENDCHAR +STARTCHAR uni01F732 +ENCODING 128818 +BBX 13 10 1 0 +BITMAP +8208 +C518 +A8A8 +9048 +8008 +8008 +FFF8 +8008 +8008 +FFF8 +ENDCHAR +STARTCHAR uni01F733 +ENCODING 128819 +BBX 10 7 3 0 +BITMAP +1E00 +2100 +4080 +8C40 +9240 +9240 +8C40 +ENDCHAR +STARTCHAR uni01F734 +ENCODING 128820 +BBX 13 10 1 0 +BITMAP +1FC0 +0200 +0200 +0200 +0200 +0200 +0200 +3260 +4A90 +8708 +ENDCHAR +STARTCHAR uni01F735 +ENCODING 128821 +BBX 9 12 3 -2 +BITMAP +2A00 +5500 +8080 +FF80 +8080 +4100 +3E00 +0800 +0800 +3E00 +0800 +0800 +ENDCHAR +STARTCHAR uni01F736 +ENCODING 128822 +BBX 9 11 3 0 +BITMAP +1C00 +2200 +2200 +1C00 +0800 +1400 +1400 +2200 +2200 +4100 +E380 +ENDCHAR +STARTCHAR uni01F737 +ENCODING 128823 +BBX 9 10 3 0 +BITMAP +FF80 +8080 +8080 +8080 +8080 +8080 +8080 +F780 +1400 +1C00 +ENDCHAR +STARTCHAR uni01F738 +ENCODING 128824 +BBX 10 10 3 0 +BITMAP +0300 +0500 +09C0 +1240 +2080 +7100 +8A00 +8C00 +8800 +7000 +ENDCHAR +STARTCHAR uni01F739 +ENCODING 128825 +BBX 9 11 2 0 +BITMAP +4900 +4900 +4900 +2A00 +9C80 +FF80 +9C80 +2A00 +4900 +4900 +4900 +ENDCHAR +STARTCHAR uni01F73A +ENCODING 128826 +BBX 12 5 2 3 +BITMAP +6060 +9090 +9F90 +9090 +6060 +ENDCHAR +STARTCHAR uni01F73B +ENCODING 128827 +BBX 7 9 4 0 +BITMAP +6C +92 +38 +44 +82 +82 +82 +44 +38 +ENDCHAR +STARTCHAR uni01F73C +ENCODING 128828 +BBX 11 11 2 0 +BITMAP +71C0 +0A00 +0400 +0A00 +1100 +2080 +2080 +71C0 +8A20 +8A20 +71C0 +ENDCHAR +STARTCHAR uni01F73D +ENCODING 128829 +BBX 14 6 1 1 +BITMAP +3FF0 +4848 +8484 +8484 +4848 +3FF0 +ENDCHAR +STARTCHAR uni01F73E +ENCODING 128830 +BBX 11 13 2 -2 +BITMAP +0E00 +1100 +1100 +CE60 +2480 +1500 +1500 +2480 +4440 +FFE0 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni01F73F +ENCODING 128831 +BBX 9 12 3 -2 +BITMAP +FF80 +8080 +8080 +8080 +8080 +8080 +8080 +FF80 +0800 +3E00 +0800 +0800 +ENDCHAR +STARTCHAR uni01F740 +ENCODING 128832 +BBX 11 11 2 -1 +BITMAP +0E00 +0400 +0400 +75C0 +2480 +1500 +1500 +0E00 +8420 +FFE0 +8020 +ENDCHAR +STARTCHAR uni01F741 +ENCODING 128833 +BBX 9 10 3 0 +BITMAP +E380 +4100 +4100 +2200 +1C00 +0800 +0800 +3E00 +0800 +1C00 +ENDCHAR +STARTCHAR uni01F742 +ENCODING 128834 +BBX 11 10 3 0 +BITMAP +FFE0 +0400 +0400 +0400 +05C0 +0C80 +1500 +2500 +4600 +E400 +ENDCHAR +STARTCHAR uni01F743 +ENCODING 128835 +BBX 13 10 1 0 +BITMAP +0F80 +8208 +8208 +8208 +4210 +4210 +4510 +28A0 +28A0 +1040 +ENDCHAR +STARTCHAR uni01F744 +ENCODING 128836 +BBX 12 8 2 0 +BITMAP +0300 +0500 +0900 +1100 +E1F0 +8010 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F745 +ENCODING 128837 +BBX 7 10 4 0 +BITMAP +28 +28 +28 +28 +FE +82 +82 +82 +82 +FE +ENDCHAR +STARTCHAR uni01F746 +ENCODING 128838 +BBX 13 11 1 0 +BITMAP +0700 +0880 +0880 +0880 +0700 +0000 +7070 +8888 +8888 +8888 +7070 +ENDCHAR +STARTCHAR uni01F747 +ENCODING 128839 +BBX 14 6 1 0 +BITMAP +0078 +1894 +2454 +E738 +0030 +00D0 +ENDCHAR +STARTCHAR uni01F748 +ENCODING 128840 +BBX 11 10 2 0 +BITMAP +FFE0 +0480 +0440 +0440 +0780 +0500 +0480 +0480 +0440 +0440 +ENDCHAR +STARTCHAR uni01F749 +ENCODING 128841 +BBX 14 11 1 0 +BITMAP +0230 +0248 +67F0 +92C0 +8340 +4020 +3018 +0804 +8844 +8844 +7038 +ENDCHAR +STARTCHAR uni01F74A +ENCODING 128842 +BBX 11 11 2 0 +BITMAP +0400 +0400 +0400 +0E00 +1100 +F1E0 +1100 +0E00 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni01F74B +ENCODING 128843 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 13 1 -1 +BITMAP +20 +F8 +20 +F8 +20 +F8 +20 +20 +70 +88 +88 +88 +70 +ENDCHAR +STARTCHAR uni01F74C +ENCODING 128844 +BBX 8 10 4 0 +BITMAP +3D +42 +84 +80 +80 +80 +80 +80 +42 +3C +ENDCHAR +STARTCHAR uni01F74D +ENCODING 128845 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 10 1 0 +BITMAP +88 +88 +50 +70 +A8 +A8 +70 +50 +88 +88 +ENDCHAR +STARTCHAR uni01F74E +ENCODING 128846 +BBX 9 9 2 0 +BITMAP +3E00 +4100 +8080 +9480 +8080 +8880 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni01F74F +ENCODING 128847 +BBX 8 11 3 0 +BITMAP +89 +52 +89 +52 +3C +18 +3C +4A +91 +4A +91 +ENDCHAR +STARTCHAR uni01F750 +ENCODING 128848 +BBX 12 7 2 2 +BITMAP +0210 +0120 +00C0 +FFF0 +00C0 +0120 +0210 +ENDCHAR +STARTCHAR uni01F751 +ENCODING 128849 +BBX 12 9 2 1 +BITMAP +0030 +0040 +0080 +0080 +FFE0 +0080 +0080 +0040 +0030 +ENDCHAR +STARTCHAR uni01F752 +ENCODING 128850 +BBX 12 9 2 1 +BITMAP +0030 +0040 +A880 +7080 +FFE0 +7080 +A880 +0040 +0030 +ENDCHAR +STARTCHAR uni01F753 +ENCODING 128851 +BBX 13 9 1 0 +BITMAP +0200 +0500 +0880 +1040 +2020 +7070 +8888 +8888 +7070 +ENDCHAR +STARTCHAR uni01F754 +ENCODING 128852 +BBX 7 7 4 0 +BITMAP +10 +28 +44 +82 +44 +28 +10 +ENDCHAR +STARTCHAR uni01F755 +ENCODING 128853 +BBX 10 10 3 0 +BITMAP +FFC0 +8040 +8040 +8040 +8C40 +8C40 +8040 +8040 +8040 +FFC0 +ENDCHAR +STARTCHAR uni01F756 +ENCODING 128854 +BBX 13 10 1 0 +BITMAP +6030 +9FC8 +9048 +68B0 +0500 +0200 +0200 +0200 +0200 +0700 +ENDCHAR +STARTCHAR uni01F757 +ENCODING 128855 +BBX 10 10 2 0 +BITMAP +1FC0 +1000 +1000 +1000 +FE00 +1000 +1000 +1000 +1000 +1FC0 +ENDCHAR +STARTCHAR uni01F758 +ENCODING 128856 +BBX 9 10 3 0 +BITMAP +E380 +4100 +4100 +4100 +4100 +4100 +7F00 +0800 +0800 +1C00 +ENDCHAR +STARTCHAR uni01F759 +ENCODING 128857 +BBX 12 6 2 0 +BITMAP +FFF0 +C930 +9250 +A490 +C930 +FFF0 +ENDCHAR +STARTCHAR uni01F75A +ENCODING 128858 +BBX 12 7 2 0 +BITMAP +FFF0 +8010 +B6D0 +8010 +B6D0 +8010 +FFF0 +ENDCHAR +STARTCHAR uni01F75B +ENCODING 128859 +BBX 15 8 1 0 +BITMAP +8004 +FFFC +8004 +0000 +739C +94A4 +94A4 +7BDE +ENDCHAR +STARTCHAR uni01F75C +ENCODING 128860 +BBX 15 10 0 0 +BITMAP +6318 +94A4 +8420 +4210 +2108 +1084 +0842 +0842 +8C62 +739C +ENDCHAR +STARTCHAR uni01F75D +ENCODING 128861 +BBX 15 11 0 0 +BITMAP +0CCC +1332 +1110 +7FFE +1110 +7FFC +1110 +7FF8 +1220 +94C0 +7F00 +ENDCHAR +STARTCHAR uni01F75E +ENCODING 128862 +BBX 11 6 2 0 +BITMAP +0E00 +1100 +1100 +E0E0 +0000 +FFE0 +ENDCHAR +STARTCHAR uni01F75F +ENCODING 128863 +BBX 11 6 2 0 +BITMAP +FFE0 +0000 +E0E0 +1100 +1100 +0E00 +ENDCHAR +STARTCHAR uni01F760 +ENCODING 128864 +BBX 10 6 3 0 +BITMAP +0100 +0280 +0480 +0840 +9040 +6040 +ENDCHAR +STARTCHAR uni01F761 +ENCODING 128865 +BBX 11 11 2 -1 +BITMAP +01C0 +0220 +0220 +0400 +1F00 +0400 +0400 +0800 +0800 +9000 +6000 +ENDCHAR +STARTCHAR uni01F762 +ENCODING 128866 +BBX 11 10 2 1 +BITMAP +4440 +AAA0 +4440 +4440 +2480 +2480 +1500 +1500 +0E00 +0400 +ENDCHAR +STARTCHAR uni01F763 +ENCODING 128867 +BBX 10 10 3 0 +BITMAP +6180 +9240 +9240 +5140 +1040 +1040 +1040 +1080 +1300 +0C00 +ENDCHAR +STARTCHAR uni01F764 +ENCODING 128868 +BBX 12 10 2 1 +BITMAP +0040 +E4E0 +4550 +4440 +2480 +1F00 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni01F765 +ENCODING 128869 +BBX 7 10 4 0 +BITMAP +F8 +88 +88 +50 +50 +20 +20 +10 +08 +06 +ENDCHAR +STARTCHAR uni01F766 +ENCODING 128870 +BBX 9 7 3 0 +BITMAP +FF80 +A280 +A280 +9480 +9480 +4900 +3E00 +ENDCHAR +STARTCHAR uni01F767 +ENCODING 128871 +BBX 9 9 3 1 +BITMAP +8880 +9480 +6300 +4100 +2200 +2200 +1400 +1400 +0800 +ENDCHAR +STARTCHAR uni01F768 +ENCODING 128872 +BBX 9 10 3 0 +BITMAP +FF80 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni01F769 +ENCODING 128873 +BBX 9 10 3 0 +BITMAP +FF80 +C180 +A280 +9480 +4900 +4900 +4900 +2A00 +2A00 +3E00 +ENDCHAR +STARTCHAR uni01F76A +ENCODING 128874 +BBX 13 10 1 0 +BITMAP +2220 +2520 +1540 +18C0 +0880 +18C0 +2520 +2520 +4210 +E038 +ENDCHAR +STARTCHAR uni01F76B +ENCODING 128875 +BBX 12 10 2 0 +BITMAP +83E0 +C610 +AA10 +AA10 +93E0 +8210 +8210 +8210 +8210 +83E0 +ENDCHAR +STARTCHAR uni01F76C +ENCODING 128876 +BBX 12 10 2 0 +BITMAP +83E0 +8210 +8210 +4410 +47E0 +4420 +2820 +2840 +2840 +1F80 +ENDCHAR +STARTCHAR uni01F76D +ENCODING 128877 +BBX 10 11 3 0 +BITMAP +1F00 +2180 +4640 +4980 +8800 +8600 +8100 +8100 +4100 +4200 +3C00 +ENDCHAR +STARTCHAR uni01F76E +ENCODING 128878 +BBX 11 13 2 -1 +BITMAP +1B00 +2480 +2080 +1100 +0A00 +8420 +FFE0 +8420 +0A00 +1100 +2080 +2480 +1B00 +ENDCHAR +STARTCHAR uni01F76F +ENCODING 128879 +BBX 10 10 2 0 +BITMAP +0180 +0240 +0240 +0380 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni01F770 +ENCODING 128880 +BBX 12 11 2 -1 +BITMAP +0100 +0200 +0400 +0860 +7090 +9090 +90E0 +6100 +0200 +0400 +0800 +ENDCHAR +STARTCHAR uni01F771 +ENCODING 128881 +BBX 10 10 3 0 +BITMAP +FFC0 +C0C0 +A140 +9240 +8C40 +8C40 +9240 +A140 +C0C0 +FFC0 +ENDCHAR +STARTCHAR uni01F772 +ENCODING 128882 +BBX 13 11 1 -1 +BITMAP +7E30 +0448 +0848 +1090 +38E0 +0490 +0310 +8310 +4560 +3A00 +0200 +ENDCHAR +STARTCHAR uni01F773 +ENCODING 128883 +BBX 11 11 2 -1 +BITMAP +00C0 +F120 +2120 +4240 +F380 +2440 +4840 +F240 +2980 +4800 +3000 +ENDCHAR +STARTCHAR uni01F780 +ENCODING 128896 +BBX 6 11 4 0 +BITMAP +04 +0C +1C +3C +7C +FC +7C +3C +1C +0C +04 +ENDCHAR +STARTCHAR uni01F781 +ENCODING 128897 +BBX 11 6 2 5 +BITMAP +0400 +0E00 +1F00 +3F80 +7FC0 +FFE0 +ENDCHAR +STARTCHAR uni01F782 +ENCODING 128898 +BBX 6 11 4 0 +BITMAP +80 +C0 +E0 +F0 +F8 +FC +F8 +F0 +E0 +C0 +80 +ENDCHAR +STARTCHAR uni01F783 +ENCODING 128899 +BBX 11 6 2 0 +BITMAP +FFE0 +7FC0 +3F80 +1F00 +0E00 +0400 +ENDCHAR +STARTCHAR uni01F784 +ENCODING 128900 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 4 2 4 +BITMAP +60 +F0 +F0 +60 +ENDCHAR +STARTCHAR uni01F785 +ENCODING 128901 +BBX 14 14 1 -1 +BITMAP +0780 +1860 +2010 +4008 +4008 +8004 +8004 +8004 +8004 +4008 +4008 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uni01F786 +ENCODING 128902 +BBX 14 14 1 -1 +BITMAP +0780 +1FE0 +3070 +6018 +6008 +C00C +C00C +C00C +C00C +4018 +6018 +3830 +1FE0 +0780 +ENDCHAR +STARTCHAR uni01F787 +ENCODING 128903 +BBX 14 14 1 -1 +BITMAP +0780 +1FE0 +3FF0 +7878 +7038 +E01C +E01C +E01C +E01C +7038 +7878 +3FF0 +1FE0 +0780 +ENDCHAR +STARTCHAR uni01F788 +ENCODING 128904 +BBX 14 14 1 -1 +BITMAP +0780 +1FE0 +3FF0 +7FF8 +7CF8 +F87C +F03C +F03C +F87C +7CF8 +7FF8 +3FF0 +1FE0 +0780 +ENDCHAR +STARTCHAR uni01F789 +ENCODING 128905 +BBX 14 14 1 -1 +BITMAP +0780 +1FE0 +3FF0 +7FF8 +7FF8 +FCFC +F87C +F87C +FCFC +7FF8 +7FF8 +3FF0 +1FE0 +0780 +ENDCHAR +STARTCHAR uni01F78A +ENCODING 128906 +BBX 14 14 1 -1 +BITMAP +0780 +1860 +2010 +4008 +4008 +8304 +8784 +8784 +8304 +4008 +4008 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uni01F78B +ENCODING 128907 +BBX 14 14 1 -1 +BITMAP +0780 +1860 +2010 +4788 +4848 +9324 +94A4 +94A4 +9324 +4848 +4788 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uni01F78C +ENCODING 128908 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 2 2 5 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR uni01F78D +ENCODING 128909 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 4 +BITMAP +E0 +E0 +E0 +ENDCHAR +STARTCHAR uni01F78E +ENCODING 128910 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F78F +ENCODING 128911 +BBX 14 14 1 -1 +BITMAP +FFFC +FFFC +C00C +C00C +C00C +C00C +C00C +C00C +C00C +C00C +C00C +C00C +FFFC +FFFC +ENDCHAR +STARTCHAR uni01F790 +ENCODING 128912 +BBX 14 14 1 -1 +BITMAP +FFFC +FFFC +FFFC +E01C +E01C +E01C +E01C +E01C +E01C +E01C +E01C +FFFC +FFFC +FFFC +ENDCHAR +STARTCHAR uni01F791 +ENCODING 128913 +BBX 14 14 1 -1 +BITMAP +FFFC +FFFC +FFFC +FFFC +F03C +F03C +F03C +F03C +F03C +F03C +FFFC +FFFC +FFFC +FFFC +ENDCHAR +STARTCHAR uni01F792 +ENCODING 128914 +BBX 14 14 1 -1 +BITMAP +FFFC +FFFC +FFFC +FFFC +FFFC +F87C +F87C +F87C +F87C +FFFC +FFFC +FFFC +FFFC +FFFC +ENDCHAR +STARTCHAR uni01F793 +ENCODING 128915 +BBX 14 14 1 -1 +BITMAP +FFFC +FFFC +FFFC +FFFC +FFFC +FFFC +FCFC +FCFC +FFFC +FFFC +FFFC +FFFC +FFFC +FFFC +ENDCHAR +STARTCHAR uni01F794 +ENCODING 128916 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +8004 +8004 +8004 +8304 +8304 +8004 +8004 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F795 +ENCODING 128917 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +8004 +8FC4 +8FC4 +8FC4 +8FC4 +8FC4 +8FC4 +8004 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F796 +ENCODING 128918 +BBX 14 14 1 -1 +BITMAP +FFFC +8004 +8004 +9FE4 +9024 +9024 +9324 +9324 +9024 +9024 +9FE4 +8004 +8004 +FFFC +ENDCHAR +STARTCHAR uni01F797 +ENCODING 128919 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 3 2 4 +BITMAP +40 +E0 +40 +ENDCHAR +STARTCHAR uni01F798 +ENCODING 128920 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 5 1 3 +BITMAP +20 +70 +F8 +70 +20 +ENDCHAR +STARTCHAR uni01F799 +ENCODING 128921 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 7 0 2 +BITMAP +10 +38 +7C +FE +7C +38 +10 +ENDCHAR +STARTCHAR uni01F79A +ENCODING 128922 +BBX 13 13 1 -1 +BITMAP +0200 +0500 +0880 +1040 +2220 +4710 +8F88 +4710 +2220 +1040 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni01F79B +ENCODING 128923 +BBX 13 13 1 -1 +BITMAP +0200 +0500 +0880 +1240 +2720 +4F90 +9FC8 +4F90 +2720 +1240 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni01F79C +ENCODING 128924 +BBX 13 13 1 -1 +BITMAP +0200 +0500 +0880 +1040 +2220 +4510 +8888 +4510 +2220 +1040 +0880 +0500 +0200 +ENDCHAR +STARTCHAR uni01F79D +ENCODING 128925 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 2 3 +BITMAP +40 +40 +E0 +40 +40 +ENDCHAR +STARTCHAR uni01F79E +ENCODING 128926 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 2 +BITMAP +20 +20 +70 +F8 +70 +20 +20 +ENDCHAR +STARTCHAR uni01F79F +ENCODING 128927 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 11 0 0 +BITMAP +10 +10 +38 +38 +7C +FE +7C +38 +38 +10 +10 +ENDCHAR +STARTCHAR uni01F7A0 +ENCODING 128928 +BBX 11 15 2 -2 +BITMAP +0400 +0400 +0A00 +1100 +1500 +2480 +4E40 +9F20 +4E40 +2480 +1500 +1100 +0A00 +0400 +0400 +ENDCHAR +STARTCHAR uni01F7A1 +ENCODING 128929 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +0200 +0200 +0200 +0200 +FFF8 +0200 +0200 +0200 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni01F7A2 +ENCODING 128930 +BBX 12 12 2 0 +BITMAP +0600 +0600 +0600 +0600 +0600 +FFF0 +FFF0 +0600 +0600 +0600 +0600 +0600 +ENDCHAR +STARTCHAR uni01F7A3 +ENCODING 128931 +BBX 13 13 1 -1 +BITMAP +0700 +0700 +0700 +0700 +0700 +FFF8 +FFF8 +FFF8 +0700 +0700 +0700 +0700 +0700 +ENDCHAR +STARTCHAR uni01F7A4 +ENCODING 128932 +BBX 12 12 2 0 +BITMAP +0F00 +0F00 +0F00 +0F00 +FFF0 +FFF0 +FFF0 +FFF0 +0F00 +0F00 +0F00 +0F00 +ENDCHAR +STARTCHAR uni01F7A5 +ENCODING 128933 +BBX 13 13 1 -1 +BITMAP +0F80 +0F80 +0F80 +0F80 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +0F80 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR uni01F7A6 +ENCODING 128934 +BBX 12 12 2 0 +BITMAP +1F80 +1F80 +1F80 +FFF0 +FFF0 +FFF0 +FFF0 +FFF0 +FFF0 +1F80 +1F80 +1F80 +ENDCHAR +STARTCHAR uni01F7A7 +ENCODING 128935 +BBX 13 13 1 -1 +BITMAP +1FC0 +1FC0 +1FC0 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +FFF8 +1FC0 +1FC0 +1FC0 +ENDCHAR +STARTCHAR uni01F7A8 +ENCODING 128936 +BBX 13 13 1 -1 +BITMAP +8008 +4010 +2020 +1040 +0880 +0500 +0200 +0500 +0880 +1040 +2020 +4010 +8008 +ENDCHAR +STARTCHAR uni01F7A9 +ENCODING 128937 +BBX 14 14 1 -1 +BITMAP +C00C +6018 +3030 +1860 +0CC0 +0780 +0300 +0780 +0CC0 +1860 +3030 +6018 +C00C +8004 +ENDCHAR +STARTCHAR uni01F7AA +ENCODING 128938 +BBX 13 13 1 -1 +BITMAP +C018 +E038 +7070 +38E0 +1DC0 +0F80 +0700 +0F80 +1DC0 +38E0 +7070 +E038 +C018 +ENDCHAR +STARTCHAR uni01F7AB +ENCODING 128939 +BBX 14 14 1 -1 +BITMAP +E01C +F03C +7878 +3CF0 +1FE0 +0FC0 +0780 +0FC0 +1FE0 +3CF0 +7878 +F03C +E01C +C00C +ENDCHAR +STARTCHAR uni01F7AC +ENCODING 128940 +BBX 13 13 1 -1 +BITMAP +E038 +F078 +F8F8 +7DF0 +3FE0 +1FC0 +0F80 +1FC0 +3FE0 +7DF0 +F8F8 +F078 +E038 +ENDCHAR +STARTCHAR uni01F7AD +ENCODING 128941 +BBX 14 14 1 -1 +BITMAP +F03C +F87C +FCFC +7FF8 +3FF0 +1FE0 +0FC0 +1FE0 +3FF0 +7FF8 +FCFC +F87C +F03C +E01C +ENDCHAR +STARTCHAR uni01F7AE +ENCODING 128942 +BBX 13 13 1 -1 +BITMAP +F078 +F8F8 +FDF8 +FFF8 +7FF0 +3FE0 +1FC0 +3FE0 +7FF0 +FFF8 +FDF8 +F8F8 +F078 +ENDCHAR +STARTCHAR uni01F7AF +ENCODING 128943 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +0200 +0200 +C218 +3AE0 +0700 +0500 +0880 +0880 +1040 +2020 +4010 +ENDCHAR +STARTCHAR uni01F7B0 +ENCODING 128944 +BBX 14 14 1 -2 +BITMAP +0300 +0300 +0300 +C30C +FB7C +3FF0 +0780 +0780 +0CC0 +0CC0 +1860 +3030 +6018 +C00C +ENDCHAR +STARTCHAR uni01F7B1 +ENCODING 128945 +BBX 15 14 0 -2 +BITMAP +0380 +0380 +C386 +E38E +7FFC +7FFC +1FF0 +07C0 +0EE0 +0EE0 +1C70 +3838 +701C +E00E +ENDCHAR +STARTCHAR uni01F7B2 +ENCODING 128946 +BBX 16 14 0 -2 +BITMAP +03C0 +C3C7 +E3CF +FFFF +7FFE +3FF8 +1FF0 +07E0 +07E0 +0FF0 +1E78 +3C3C +781E +F00F +ENDCHAR +STARTCHAR uni01F7B3 +ENCODING 128947 +BBX 16 15 0 -2 +BITMAP +0380 +07C0 +C7C6 +E7CE +FFFE +7FFC +7FFC +3FF8 +1FF0 +1EF0 +3C78 +7C7C +F83E +F01F +E00F +ENDCHAR +STARTCHAR uni01F7B4 +ENCODING 128948 +BBX 16 15 0 -2 +BITMAP +03C0 +C7E3 +E7EF +FFFF +FFFF +FFFF +7FFC +3FF8 +0FF0 +0FF0 +1FF8 +3FFC +7E7E +FC3F +F81F +ENDCHAR +STARTCHAR uni01F7B5 +ENCODING 128949 +BBX 15 14 0 -1 +BITMAP +0100 +0100 +8102 +610C +1930 +07C0 +0380 +07C0 +1930 +610C +8102 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni01F7B6 +ENCODING 128950 +BBX 16 14 0 -1 +BITMAP +0180 +8181 +E187 +799E +1FF8 +07E0 +03C0 +07E0 +1FF8 +799E +E187 +8181 +0180 +0180 +ENDCHAR +STARTCHAR uni01F7B7 +ENCODING 128951 +BBX 15 14 0 -1 +BITMAP +0380 +8382 +E38E +FBBE +7FFC +1FF0 +07C0 +1FF0 +7BFC +FBBE +E38E +8382 +0380 +0380 +ENDCHAR +STARTCHAR uni01F7B8 +ENCODING 128952 +BBX 16 14 0 -1 +BITMAP +83C1 +E3C3 +FBCF +FFFF +7FFC +1FF0 +07E0 +1FF8 +7FFE +FFFF +FBDF +E3C7 +83C1 +03C0 +ENDCHAR +STARTCHAR uni01F7B9 +ENCODING 128953 +BBX 15 14 0 -1 +BITMAP +87C2 +E7CE +FFFE +FFFE +FFFE +7FFC +1FF0 +7FFC +FFFE +FFFE +FFFE +E7CE +87C2 +07C0 +ENDCHAR +STARTCHAR uni01F7BA +ENCODING 128954 +BBX 16 15 0 -1 +BITMAP +8001 +E7E3 +FFEF +FFFF +FFFF +FFFF +7FFC +1FF8 +7FFE +FFFF +FFFF +FFFF +FFFF +E7E7 +87E1 +ENDCHAR +STARTCHAR uni01F7BB +ENCODING 128955 +BBX 13 13 1 -1 +BITMAP +8208 +4210 +2220 +1240 +0A80 +0700 +FFF8 +0700 +0A80 +1240 +2220 +4210 +8208 +ENDCHAR +STARTCHAR uni01F7BC +ENCODING 128956 +BBX 14 13 1 -1 +BITMAP +C30C +6318 +3330 +1B60 +0FC0 +FFFC +FFFC +0FC0 +1B60 +3330 +6318 +C30C +8304 +ENDCHAR +STARTCHAR uni01F7BD +ENCODING 128957 +BBX 13 13 1 -1 +BITMAP +C718 +E738 +7770 +3FE0 +1FC0 +FFF8 +FFF8 +FFF8 +1FC0 +3FE0 +7770 +E738 +C718 +ENDCHAR +STARTCHAR uni01F7BE +ENCODING 128958 +BBX 14 13 1 -1 +BITMAP +E79C +F7BC +7FF8 +3FF0 +FFFC +FFFC +FFFC +FFFC +3FF0 +7FF8 +F7BC +E79C +C78C +ENDCHAR +STARTCHAR uni01F7BF +ENCODING 128959 +BBX 15 15 0 -2 +BITMAP +E7CE +F7DE +FFFE +7FFC +3FF8 +FFFE +FFFE +FFFE +FFFE +FFFE +3FF8 +7FFC +FFFE +F7DE +E7CE +ENDCHAR +STARTCHAR uni01F7C0 +ENCODING 128960 +BBX 13 11 1 1 +BITMAP +0200 +0200 +0200 +0200 +0700 +0700 +0F80 +1DC0 +38E0 +6030 +8008 +ENDCHAR +STARTCHAR uni01F7C1 +ENCODING 128961 +BBX 14 11 1 1 +BITMAP +0300 +0300 +0300 +0300 +0780 +0780 +0FC0 +1CE0 +7038 +E01C +8004 +ENDCHAR +STARTCHAR uni01F7C2 +ENCODING 128962 +BBX 15 12 0 1 +BITMAP +0100 +0380 +0380 +0380 +0380 +07C0 +0FE0 +1FF0 +7FFC +FC7E +E00E +8002 +ENDCHAR +STARTCHAR uni01F7C3 +ENCODING 128963 +BBX 16 12 0 1 +BITMAP +0180 +02C0 +02C0 +02C0 +02C0 +06E0 +0F90 +18C8 +73F6 +DC3D +E007 +8001 +ENDCHAR +STARTCHAR uni01F7C4 +ENCODING 128964 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +0200 +0700 +0700 +1FC0 +FFF8 +1FC0 +0700 +0700 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni01F7C5 +ENCODING 128965 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +0700 +0700 +0F80 +3FE0 +FFF8 +3FE0 +0F80 +0700 +0700 +0200 +0200 +ENDCHAR +STARTCHAR uni01F7C6 +ENCODING 128966 +BBX 13 13 1 -1 +BITMAP +0200 +0700 +0F80 +0F80 +3FE0 +7FF0 +FFF8 +7FF0 +3FE0 +0F80 +0F80 +0700 +0200 +ENDCHAR +STARTCHAR uni01F7C7 +ENCODING 128967 +BBX 13 13 1 -1 +BITMAP +0200 +0700 +0B80 +0B80 +3360 +7F10 +FFF8 +47F0 +3660 +0E80 +0E80 +0700 +0200 +ENDCHAR +STARTCHAR uni01F7C8 +ENCODING 128968 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +0F80 +0E80 +3660 +22E0 +FFF8 +3A20 +3360 +0B80 +0F80 +0200 +0200 +ENDCHAR +STARTCHAR uni01F7C9 +ENCODING 128969 +BBX 13 12 1 -1 +BITMAP +0200 +0200 +0700 +0700 +FFF8 +3FE0 +0700 +0D80 +0D80 +18C0 +3060 +6030 +ENDCHAR +STARTCHAR uni01F7CA +ENCODING 128970 +BBX 14 13 1 -1 +BITMAP +0300 +0300 +0780 +C78C +FFFC +3FF0 +1FE0 +0FC0 +0FC0 +1CE0 +3870 +7038 +E01C +ENDCHAR +STARTCHAR uni01F7CB +ENCODING 128971 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +0700 +CF98 +7FF0 +3FE0 +1FC0 +3FE0 +7FF0 +CF98 +0700 +0200 +0200 +ENDCHAR +STARTCHAR uni01F7CC +ENCODING 128972 +BBX 13 13 1 -1 +BITMAP +0200 +0700 +0F80 +FFF8 +7FF0 +3FE0 +1FC0 +3FE0 +7FF0 +FFF8 +0F80 +0700 +0200 +ENDCHAR +STARTCHAR uni01F7CD +ENCODING 128973 +BBX 13 13 1 -1 +BITMAP +0200 +0200 +0700 +CB98 +7A70 +2DE0 +1240 +3DA0 +72F0 +CE98 +0700 +0200 +0200 +ENDCHAR +STARTCHAR uni01F7CE +ENCODING 128974 +BBX 13 13 1 -1 +BITMAP +8208 +4210 +3760 +3FE0 +1FC0 +3FE0 +FFF8 +3FE0 +1FC0 +3FE0 +3760 +4210 +8208 +ENDCHAR +STARTCHAR uni01F7CF +ENCODING 128975 +BBX 13 13 1 -1 +BITMAP +C218 +E738 +7FF0 +3FE0 +3FE0 +7FF0 +FFF8 +7FF0 +3FE0 +3FE0 +7FF0 +E738 +C218 +ENDCHAR +STARTCHAR uni01F7D0 +ENCODING 128976 +BBX 15 15 0 -2 +BITMAP +0100 +0380 +07C0 +1FF0 +1FF0 +3FF8 +7FFC +FFFE +7FFC +3FF8 +1FF0 +1FF0 +07C0 +0380 +0100 +ENDCHAR +STARTCHAR uni01F7D1 +ENCODING 128977 +BBX 15 15 0 -2 +BITMAP +0100 +0280 +06C0 +1EF0 +16D0 +3BB8 +7D7C +87C2 +7D7C +3BB8 +16D0 +1EF0 +06C0 +0280 +0100 +ENDCHAR +STARTCHAR uni01F7D2 +ENCODING 128978 +BBX 13 13 1 -1 +BITMAP +0200 +2220 +1240 +4F90 +3FE0 +1FC0 +FFF8 +1FC0 +3FE0 +4F90 +1240 +2220 +0200 +ENDCHAR +STARTCHAR uni01F7D3 +ENCODING 128979 +BBX 13 13 1 -1 +BITMAP +0200 +3760 +3FE0 +5FD0 +3FE0 +7FF0 +FFF8 +7FF0 +3FE0 +5FD0 +3FE0 +3760 +0200 +ENDCHAR +STARTCHAR uni01F7D4 +ENCODING 128980 +BBX 13 13 1 -1 +BITMAP +0200 +3560 +2DA0 +7570 +2FA0 +7270 +8F88 +7270 +2FA0 +7570 +2DA0 +3560 +0200 +ENDCHAR +STARTCHAR uni01F7D5 +ENCODING 128981 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2220 +4210 +4510 +8508 +8888 +8888 +9048 +5050 +5FD0 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni01F7D6 +ENCODING 128982 +BBX 13 14 1 -1 +BITMAP +0700 +1FC0 +3DE0 +7DF0 +7AF0 +FAF8 +F778 +F778 +EFB8 +6FB0 +6030 +3FE0 +1FC0 +0700 +ENDCHAR +STARTCHAR uni01F7D7 +ENCODING 128983 +BBX 13 14 1 -1 +BITMAP +0700 +18C0 +2020 +5FD0 +5050 +9048 +9048 +9048 +9048 +5050 +5FD0 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni01F7D8 +ENCODING 128984 +BBX 13 14 1 -1 +BITMAP +0700 +1FC0 +3FE0 +6030 +6FB0 +EFB8 +EFB8 +EFB8 +EFB8 +6FB0 +6030 +3FE0 +1FC0 +0700 +ENDCHAR +STARTCHAR uni01F800 +ENCODING 129024 +BBX 14 5 1 3 +BITMAP +2000 +6000 +FFFC +6000 +2000 +ENDCHAR +STARTCHAR uni01F801 +ENCODING 129025 +BBX 5 13 5 0 +BITMAP +20 +70 +F8 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +ENDCHAR +STARTCHAR uni01F802 +ENCODING 129026 +BBX 14 5 1 3 +BITMAP +0010 +0018 +FFFC +0018 +0010 +ENDCHAR +STARTCHAR uni01F803 +ENCODING 129027 +BBX 5 13 5 0 +BITMAP +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +F8 +70 +20 +ENDCHAR +STARTCHAR uni01F804 +ENCODING 129028 +BBX 14 10 1 1 +BITMAP +0800 +1800 +3800 +7800 +FFFC +FFFC +7800 +3800 +1800 +0800 +ENDCHAR +STARTCHAR uni01F805 +ENCODING 129029 +BBX 10 13 3 0 +BITMAP +0C00 +1E00 +3F00 +7F80 +FFC0 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR uni01F806 +ENCODING 129030 +BBX 14 10 1 1 +BITMAP +0040 +0060 +0070 +0078 +FFFC +FFFC +0078 +0070 +0060 +0040 +ENDCHAR +STARTCHAR uni01F807 +ENCODING 129031 +BBX 10 13 3 0 +BITMAP +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +FFC0 +7F80 +3F00 +1E00 +0C00 +ENDCHAR +STARTCHAR uni01F808 +ENCODING 129032 +BBX 12 11 2 0 +BITMAP +0400 +0C00 +1C00 +3C00 +7FF0 +FFF0 +7FF0 +3C00 +1C00 +0C00 +0400 +ENDCHAR +STARTCHAR uni01F809 +ENCODING 129033 +BBX 11 12 2 0 +BITMAP +0400 +0E00 +1F00 +3F80 +7FC0 +FFE0 +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +ENDCHAR +STARTCHAR uni01F80A +ENCODING 129034 +BBX 12 11 2 0 +BITMAP +0200 +0300 +0380 +03C0 +FFE0 +FFF0 +FFE0 +03C0 +0380 +0300 +0200 +ENDCHAR +STARTCHAR uni01F80B +ENCODING 129035 +BBX 11 12 2 0 +BITMAP +0E00 +0E00 +0E00 +0E00 +0E00 +0E00 +FFE0 +7FC0 +3F80 +1F00 +0E00 +0400 +ENDCHAR +STARTCHAR uni01F810 +ENCODING 129040 +BBX 14 7 1 2 +BITMAP +1000 +3000 +7000 +FFFC +7000 +3000 +1000 +ENDCHAR +STARTCHAR uni01F811 +ENCODING 129041 +BBX 7 13 4 0 +BITMAP +10 +38 +7C +FE +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01F812 +ENCODING 129042 +BBX 14 7 1 2 +BITMAP +0020 +0030 +0038 +FFFC +0038 +0030 +0020 +ENDCHAR +STARTCHAR uni01F813 +ENCODING 129043 +BBX 7 13 4 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +FE +7C +38 +10 +ENDCHAR +STARTCHAR uni01F814 +ENCODING 129044 +BBX 14 6 1 3 +BITMAP +2000 +6000 +FFFC +FFFC +6000 +2000 +ENDCHAR +STARTCHAR uni01F815 +ENCODING 129045 +BBX 6 13 5 0 +BITMAP +30 +78 +FC +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR uni01F816 +ENCODING 129046 +BBX 14 6 1 3 +BITMAP +0010 +0018 +FFFC +FFFC +0018 +0010 +ENDCHAR +STARTCHAR uni01F817 +ENCODING 129047 +BBX 6 13 5 0 +BITMAP +30 +30 +30 +30 +30 +30 +30 +30 +30 +30 +FC +78 +30 +ENDCHAR +STARTCHAR uni01F818 +ENCODING 129048 +BBX 12 9 2 1 +BITMAP +0800 +1800 +3800 +7FF0 +FFF0 +7FF0 +3800 +1800 +0800 +ENDCHAR +STARTCHAR uni01F819 +ENCODING 129049 +BBX 9 12 3 0 +BITMAP +0800 +1C00 +3E00 +7F00 +FF80 +1C00 +1C00 +1C00 +1C00 +1C00 +1C00 +1C00 +ENDCHAR +STARTCHAR uni01F81A +ENCODING 129050 +BBX 12 9 2 1 +BITMAP +0100 +0180 +01C0 +FFE0 +FFF0 +FFE0 +01C0 +0180 +0100 +ENDCHAR +STARTCHAR uni01F81B +ENCODING 129051 +BBX 9 12 3 0 +BITMAP +1C00 +1C00 +1C00 +1C00 +1C00 +1C00 +1C00 +FF80 +7F00 +3E00 +1C00 +0800 +ENDCHAR +STARTCHAR uni01F81C +ENCODING 129052 +BBX 10 11 3 0 +BITMAP +0400 +0C00 +1C00 +3C00 +7FC0 +FFC0 +7FC0 +3C00 +1C00 +0C00 +0400 +ENDCHAR +STARTCHAR uni01F81D +ENCODING 129053 +BBX 11 10 2 2 +BITMAP +0400 +0E00 +1F00 +3F80 +7FC0 +FFE0 +0E00 +0E00 +0E00 +0E00 +ENDCHAR +STARTCHAR uni01F81E +ENCODING 129054 +BBX 10 11 3 0 +BITMAP +0800 +0C00 +0E00 +0F00 +FF80 +FFC0 +FF80 +0F00 +0E00 +0C00 +0800 +ENDCHAR +STARTCHAR uni01F81F +ENCODING 129055 +BBX 11 10 2 0 +BITMAP +0E00 +0E00 +0E00 +0E00 +FFE0 +7FC0 +3F80 +1F00 +0E00 +0400 +ENDCHAR +STARTCHAR uni01F820 +ENCODING 129056 +BBX 14 9 1 1 +BITMAP +0800 +1800 +3800 +7800 +FFFC +7800 +3800 +1800 +0800 +ENDCHAR +STARTCHAR uni01F821 +ENCODING 129057 +BBX 9 13 3 0 +BITMAP +0800 +1C00 +3E00 +7F00 +FF80 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +ENDCHAR +STARTCHAR uni01F822 +ENCODING 129058 +BBX 14 9 1 1 +BITMAP +0040 +0060 +0070 +0078 +FFFC +0078 +0070 +0060 +0040 +ENDCHAR +STARTCHAR uni01F823 +ENCODING 129059 +BBX 9 13 3 0 +BITMAP +0800 +0800 +0800 +0800 +0800 +0800 +0800 +0800 +FF80 +7F00 +3E00 +1C00 +0800 +ENDCHAR +STARTCHAR uni01F824 +ENCODING 129060 +BBX 14 8 1 2 +BITMAP +1000 +3000 +7000 +FFFC +FFFC +7000 +3000 +1000 +ENDCHAR +STARTCHAR uni01F825 +ENCODING 129061 +BBX 8 13 4 0 +BITMAP +18 +3C +7E +FF +18 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR uni01F826 +ENCODING 129062 +BBX 14 8 1 2 +BITMAP +0020 +0030 +0038 +FFFC +FFFC +0038 +0030 +0020 +ENDCHAR +STARTCHAR uni01F827 +ENCODING 129063 +BBX 8 13 4 0 +BITMAP +18 +18 +18 +18 +18 +18 +18 +18 +18 +FF +7E +3C +18 +ENDCHAR +STARTCHAR uni01F828 +ENCODING 129064 +BBX 12 7 2 2 +BITMAP +1000 +3000 +7FF0 +FFF0 +7FF0 +3000 +1000 +ENDCHAR +STARTCHAR uni01F829 +ENCODING 129065 +BBX 7 12 4 0 +BITMAP +10 +38 +7C +FE +38 +38 +38 +38 +38 +38 +38 +38 +ENDCHAR +STARTCHAR uni01F82A +ENCODING 129066 +BBX 12 7 2 2 +BITMAP +0080 +00C0 +FFE0 +FFF0 +FFE0 +00C0 +0080 +ENDCHAR +STARTCHAR uni01F82B +ENCODING 129067 +BBX 7 12 4 0 +BITMAP +38 +38 +38 +38 +38 +38 +38 +38 +FE +7C +38 +10 +ENDCHAR +STARTCHAR uni01F82C +ENCODING 129068 +BBX 12 7 2 2 +BITMAP +1000 +3FF0 +7FF0 +FFF0 +7FF0 +3FF0 +1000 +ENDCHAR +STARTCHAR uni01F82D +ENCODING 129069 +BBX 7 12 4 0 +BITMAP +10 +38 +7C +FE +7C +7C +7C +7C +7C +7C +7C +7C +ENDCHAR +STARTCHAR uni01F82E +ENCODING 129070 +BBX 12 7 2 2 +BITMAP +0080 +FFC0 +FFE0 +FFF0 +FFE0 +FFC0 +0080 +ENDCHAR +STARTCHAR uni01F82F +ENCODING 129071 +BBX 7 12 4 0 +BITMAP +7C +7C +7C +7C +7C +7C +7C +7C +FE +7C +38 +10 +ENDCHAR +STARTCHAR uni01F830 +ENCODING 129072 +BBX 14 12 1 -1 +BITMAP +0400 +0C00 +1C00 +3FFC +7FFC +FFFC +FFFC +7FFC +3FFC +1C00 +0C00 +0400 +ENDCHAR +STARTCHAR uni01F831 +ENCODING 129073 +BBX 12 13 2 0 +BITMAP +0600 +0F00 +1F80 +3FC0 +7FE0 +FFF0 +1F80 +1F80 +1F80 +1F80 +1F80 +1F80 +1F80 +ENDCHAR +STARTCHAR uni01F832 +ENCODING 129074 +BBX 14 12 1 -1 +BITMAP +0080 +00C0 +00E0 +FFF0 +FFF8 +FFFC +FFFC +FFF8 +FFF0 +00E0 +00C0 +0080 +ENDCHAR +STARTCHAR uni01F833 +ENCODING 129075 +BBX 12 13 2 0 +BITMAP +1F80 +1F80 +1F80 +1F80 +1F80 +1F80 +1F80 +FFF0 +7FE0 +3FC0 +1F80 +0F00 +0600 +ENDCHAR +STARTCHAR uni01F834 +ENCODING 129076 +BBX 14 7 1 2 +BITMAP +1FFC +3FFC +7FFC +FFFC +7FFC +3FFC +1FFC +ENDCHAR +STARTCHAR uni01F835 +ENCODING 129077 +BBX 7 13 4 0 +BITMAP +10 +38 +7C +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +ENDCHAR +STARTCHAR uni01F836 +ENCODING 129078 +BBX 14 7 1 2 +BITMAP +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FFF0 +FFE0 +ENDCHAR +STARTCHAR uni01F837 +ENCODING 129079 +BBX 7 13 4 0 +BITMAP +FE +FE +FE +FE +FE +FE +FE +FE +FE +FE +7C +38 +10 +ENDCHAR +STARTCHAR uni01F838 +ENCODING 129080 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 2 +BITMAP +10 +30 +7C +FC +7C +30 +10 +ENDCHAR +STARTCHAR uni01F839 +ENCODING 129081 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 3 +BITMAP +10 +38 +7C +FE +38 +38 +ENDCHAR +STARTCHAR uni01F83A +ENCODING 129082 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 7 1 2 +BITMAP +20 +30 +F8 +FC +F8 +30 +20 +ENDCHAR +STARTCHAR uni01F83B +ENCODING 129083 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 6 1 2 +BITMAP +38 +38 +FE +7C +38 +10 +ENDCHAR +STARTCHAR uni01F83C +ENCODING 129084 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 1 2 +BITMAP +10 +30 +78 +F8 +78 +30 +10 +ENDCHAR +STARTCHAR uni01F83D +ENCODING 129085 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 4 +BITMAP +10 +38 +7C +FE +38 +ENDCHAR +STARTCHAR uni01F83E +ENCODING 129086 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 7 2 2 +BITMAP +40 +60 +F0 +F8 +F0 +60 +40 +ENDCHAR +STARTCHAR uni01F83F +ENCODING 129087 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 5 1 2 +BITMAP +38 +FE +7C +38 +10 +ENDCHAR +STARTCHAR uni01F840 +ENCODING 129088 +BBX 9 13 2 -1 +BITMAP +0200 +0600 +0F80 +1F80 +3F80 +7F80 +FF80 +7F80 +3F80 +1F80 +0F80 +0600 +0200 +ENDCHAR +STARTCHAR uni01F841 +ENCODING 129089 +BBX 11 8 2 3 +BITMAP +0400 +0E00 +1F00 +3F80 +7FC0 +FFE0 +3F80 +3F80 +ENDCHAR +STARTCHAR uni01F842 +ENCODING 129090 +BBX 9 13 5 -1 +BITMAP +2000 +3000 +F800 +FC00 +FE00 +FF00 +FF80 +FF00 +FE00 +FC00 +F800 +3000 +2000 +ENDCHAR +STARTCHAR uni01F843 +ENCODING 129091 +BBX 11 8 2 1 +BITMAP +3F80 +3F80 +FFE0 +7FC0 +3F80 +1F00 +0E00 +0400 +ENDCHAR +STARTCHAR uni01F844 +ENCODING 129092 +BBX 14 11 1 0 +BITMAP +0400 +0C00 +1FFC +3FFC +7FFC +FFFC +7FFC +3FFC +1FFC +0C00 +0400 +ENDCHAR +STARTCHAR uni01F845 +ENCODING 129093 +BBX 11 13 2 0 +BITMAP +0400 +0E00 +1F00 +3F80 +7FC0 +FFE0 +3F80 +3F80 +3F80 +3F80 +3F80 +3F80 +3F80 +ENDCHAR +STARTCHAR uni01F846 +ENCODING 129094 +BBX 14 11 1 0 +BITMAP +0080 +00C0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FFF0 +FFE0 +00C0 +0080 +ENDCHAR +STARTCHAR uni01F847 +ENCODING 129095 +BBX 11 13 2 0 +BITMAP +3F80 +3F80 +3F80 +3F80 +3F80 +3F80 +3F80 +FFE0 +7FC0 +3F80 +1F00 +0E00 +0400 +ENDCHAR +STARTCHAR uni01F850 +ENCODING 129104 +BBX 14 7 1 2 +BITMAP +1000 +2000 +4000 +FFFC +4000 +2000 +1000 +ENDCHAR +STARTCHAR uni01F851 +ENCODING 129105 +BBX 7 13 4 0 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +10 +10 +10 +10 +ENDCHAR +STARTCHAR uni01F852 +ENCODING 129106 +BBX 14 7 1 2 +BITMAP +0020 +0010 +0008 +FFFC +0008 +0010 +0020 +ENDCHAR +STARTCHAR uni01F853 +ENCODING 129107 +BBX 7 13 4 0 +BITMAP +10 +10 +10 +10 +10 +10 +10 +10 +10 +92 +54 +38 +10 +ENDCHAR +STARTCHAR uni01F854 +ENCODING 129108 +BBX 12 12 2 0 +BITMAP +F800 +C000 +A000 +9000 +8800 +0400 +0200 +0100 +0080 +0040 +0020 +0010 +ENDCHAR +STARTCHAR uni01F855 +ENCODING 129109 +BBX 12 12 2 0 +BITMAP +01F0 +0030 +0050 +0090 +0110 +0200 +0400 +0800 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni01F856 +ENCODING 129110 +BBX 12 12 2 0 +BITMAP +8000 +4000 +2000 +1000 +0800 +0400 +0200 +0110 +0090 +0050 +0030 +01F0 +ENDCHAR +STARTCHAR uni01F857 +ENCODING 129111 +BBX 12 12 2 0 +BITMAP +0010 +0020 +0040 +0080 +0100 +0200 +0400 +8800 +9000 +A000 +C000 +F800 +ENDCHAR +STARTCHAR uni01F858 +ENCODING 129112 +BBX 14 7 1 2 +BITMAP +1020 +2010 +4008 +FFFC +4008 +2010 +1020 +ENDCHAR +STARTCHAR uni01F859 +ENCODING 129113 +BBX 7 13 4 0 +BITMAP +10 +38 +54 +92 +10 +10 +10 +10 +10 +92 +54 +38 +10 +ENDCHAR +STARTCHAR uni01F860 +ENCODING 129120 +BBX 14 11 1 0 +BITMAP +0400 +0800 +1000 +2000 +4000 +FFFC +4000 +2000 +1000 +0800 +0400 +ENDCHAR +STARTCHAR uni01F861 +ENCODING 129121 +BBX 11 13 2 0 +BITMAP +0400 +0E00 +1500 +2480 +4440 +8420 +0400 +0400 +0400 +0400 +0400 +0400 +0400 +ENDCHAR +STARTCHAR uni01F862 +ENCODING 129122 +BBX 14 11 1 0 +BITMAP +0080 +0040 +0020 +0010 +0008 +FFFC +0008 +0010 +0020 +0040 +0080 +ENDCHAR +STARTCHAR uni01F863 +ENCODING 129123 +BBX 11 13 2 0 +BITMAP +0400 +0400 +0400 +0400 +0400 +0400 +0400 +8420 +4440 +2480 +1500 +0E00 +0400 +ENDCHAR +STARTCHAR uni01F864 +ENCODING 129124 +BBX 12 12 2 0 +BITMAP +FF00 +C000 +A000 +9000 +8800 +8400 +8200 +8100 +0080 +0040 +0020 +0010 +ENDCHAR +STARTCHAR uni01F865 +ENCODING 129125 +BBX 12 12 2 0 +BITMAP +0FF0 +0030 +0050 +0090 +0110 +0210 +0410 +0810 +1000 +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni01F866 +ENCODING 129126 +BBX 12 12 2 0 +BITMAP +8000 +4000 +2000 +1000 +0810 +0410 +0210 +0110 +0090 +0050 +0030 +0FF0 +ENDCHAR +STARTCHAR uni01F867 +ENCODING 129127 +BBX 12 12 2 0 +BITMAP +0010 +0020 +0040 +0080 +8100 +8200 +8400 +8800 +9000 +A000 +C000 +FF00 +ENDCHAR +STARTCHAR uni01F868 +ENCODING 129128 +BBX 14 11 1 0 +BITMAP +0700 +0E00 +1C00 +3800 +7FFC +FFFC +7FFC +3800 +1C00 +0E00 +0700 +ENDCHAR +STARTCHAR uni01F869 +ENCODING 129129 +BBX 11 13 2 0 +BITMAP +0400 +0E00 +1F00 +3F80 +7FC0 +EEE0 +CE60 +8E20 +0E00 +0E00 +0E00 +0E00 +0E00 +ENDCHAR +STARTCHAR uni01F86A +ENCODING 129130 +BBX 14 11 1 0 +BITMAP +0380 +01C0 +00E0 +0070 +FFF8 +FFFC +FFF8 +0070 +00E0 +01C0 +0380 +ENDCHAR +STARTCHAR uni01F86B +ENCODING 129131 +BBX 11 13 2 0 +BITMAP +0E00 +0E00 +0E00 +0E00 +0E00 +8E20 +CE60 +EEE0 +7FC0 +3F80 +1F00 +0E00 +0400 +ENDCHAR +STARTCHAR uni01F86C +ENCODING 129132 +BBX 12 12 2 0 +BITMAP +FF00 +FF80 +F000 +F800 +DC00 +CE00 +C700 +C380 +41C0 +00E0 +0070 +0020 +ENDCHAR +STARTCHAR uni01F86D +ENCODING 129133 +BBX 12 12 2 0 +BITMAP +0FF0 +1FF0 +00F0 +01F0 +03B0 +0730 +0E30 +1C30 +3820 +7000 +E000 +4000 +ENDCHAR +STARTCHAR uni01F86E +ENCODING 129134 +BBX 12 12 2 0 +BITMAP +4000 +E000 +7000 +3820 +1C30 +0E30 +0730 +03B0 +01F0 +00F0 +1FF0 +0FF0 +ENDCHAR +STARTCHAR uni01F86F +ENCODING 129135 +BBX 12 12 2 0 +BITMAP +0020 +0070 +00E0 +41C0 +C380 +C700 +CE00 +DC00 +F800 +F000 +FF80 +FF00 +ENDCHAR +STARTCHAR uni01F870 +ENCODING 129136 +BBX 14 12 1 0 +BITMAP +0700 +0E00 +1C00 +3800 +7FFC +FFFC +FFFC +7FFC +3800 +1C00 +0E00 +0700 +ENDCHAR +STARTCHAR uni01F871 +ENCODING 129137 +BBX 12 13 2 0 +BITMAP +0600 +0F00 +1F80 +3FC0 +7FE0 +EF70 +CF30 +8F10 +0F00 +0F00 +0F00 +0F00 +0F00 +ENDCHAR +STARTCHAR uni01F872 +ENCODING 129138 +BBX 14 12 1 0 +BITMAP +0380 +01C0 +00E0 +0070 +FFF8 +FFFC +FFFC +FFF8 +0070 +00E0 +01C0 +0380 +ENDCHAR +STARTCHAR uni01F873 +ENCODING 129139 +BBX 12 13 2 0 +BITMAP +0F00 +0F00 +0F00 +0F00 +0F00 +8F10 +CF30 +EF70 +7FE0 +3FC0 +1F80 +0F00 +0600 +ENDCHAR +STARTCHAR uni01F874 +ENCODING 129140 +BBX 14 14 1 -1 +BITMAP +7F00 +FF80 +FFC0 +FC00 +FE00 +EF00 +E780 +E3C0 +61E0 +20F0 +0078 +003C +0018 +0010 +ENDCHAR +STARTCHAR uni01F875 +ENCODING 129141 +BBX 14 14 1 -1 +BITMAP +03F8 +07FC +0FFC +00FC +01FC +03DC +079C +0F1C +1E18 +3C10 +7800 +F000 +6000 +2000 +ENDCHAR +STARTCHAR uni01F876 +ENCODING 129142 +BBX 14 14 1 -1 +BITMAP +2000 +6000 +F000 +7800 +3C10 +1E18 +0F1C +079C +03DC +01FC +00FC +0FFC +07FC +03F8 +ENDCHAR +STARTCHAR uni01F877 +ENCODING 129143 +BBX 14 14 1 -1 +BITMAP +0010 +0018 +003C +0078 +20F0 +61E0 +E3C0 +E780 +EF00 +FE00 +FC00 +FFC0 +FF80 +7F00 +ENDCHAR +STARTCHAR uni01F878 +ENCODING 129144 +BBX 14 13 1 -1 +BITMAP +03C0 +0780 +0F00 +1E00 +3FFC +7FFC +FFFC +7FFC +3FFC +1E00 +0F00 +0780 +03C0 +ENDCHAR +STARTCHAR uni01F879 +ENCODING 129145 +BBX 13 13 1 0 +BITMAP +0200 +0700 +0F80 +1FC0 +3FE0 +7FF0 +FFF8 +EFB8 +CF98 +8F88 +0F80 +0F80 +0F80 +ENDCHAR +STARTCHAR uni01F87A +ENCODING 129146 +BBX 14 13 1 -1 +BITMAP +0F00 +0780 +03C0 +01E0 +FFF0 +FFF8 +FFFC +FFF8 +FFF0 +01E0 +03C0 +0780 +0F00 +ENDCHAR +STARTCHAR uni01F87B +ENCODING 129147 +BBX 13 13 1 0 +BITMAP +0F80 +0F80 +0F80 +8F88 +CF98 +EFB8 +FFF8 +7FF0 +3FE0 +1FC0 +0F80 +0700 +0200 +ENDCHAR +STARTCHAR uni01F87C +ENCODING 129148 +BBX 14 14 1 -1 +BITMAP +7F00 +FF80 +FFC0 +FC00 +FE00 +FF00 +EF80 +E7C0 +63E0 +21F0 +00F8 +007C +0038 +0010 +ENDCHAR +STARTCHAR uni01F87D +ENCODING 129149 +BBX 14 14 1 -1 +BITMAP +03F8 +07FC +0FFC +00FC +01FC +03FC +07DC +0F9C +1F18 +3E10 +7C00 +F800 +7000 +2000 +ENDCHAR +STARTCHAR uni01F87E +ENCODING 129150 +BBX 14 14 1 -1 +BITMAP +2000 +7000 +F800 +7C00 +3E10 +1F18 +0F9C +07DC +03FC +01FC +00FC +0FFC +07FC +03F8 +ENDCHAR +STARTCHAR uni01F87F +ENCODING 129151 +BBX 14 14 1 -1 +BITMAP +0010 +0038 +007C +00F8 +21F0 +63E0 +E7C0 +EF80 +FF00 +FE00 +FC00 +FFC0 +FF80 +7F00 +ENDCHAR +STARTCHAR uni01F880 +ENCODING 129152 +BBX 14 15 1 -2 +BITMAP +01E0 +03C0 +0780 +0F00 +1FFC +3FFC +7FFC +FFFC +7FFC +3FFC +1FFC +0F00 +0780 +03C0 +01E0 +ENDCHAR +STARTCHAR uni01F881 +ENCODING 129153 +BBX 15 13 0 0 +BITMAP +0100 +0380 +07C0 +0FE0 +1FF0 +3FF8 +7FFC +FFFE +EFEE +CFE6 +8FE2 +0FE0 +0FE0 +ENDCHAR +STARTCHAR uni01F882 +ENCODING 129154 +BBX 14 15 1 -2 +BITMAP +1E00 +0F00 +0780 +03C0 +FFE0 +FFF0 +FFF8 +FFFC +FFF8 +FFF0 +FFE0 +03C0 +0780 +0F00 +1E00 +ENDCHAR +STARTCHAR uni01F883 +ENCODING 129155 +BBX 15 13 0 0 +BITMAP +0FE0 +0FE0 +8FE2 +CFE6 +EFEE +FFFE +7FFC +3FF8 +1FF0 +0FE0 +07C0 +0380 +0100 +ENDCHAR +STARTCHAR uni01F884 +ENCODING 129156 +BBX 14 14 1 -1 +BITMAP +FF80 +FFC0 +FFE0 +FFF0 +FF80 +FFC0 +FFE0 +FFF0 +FFF8 +77FC +33F8 +11F0 +00E0 +0040 +ENDCHAR +STARTCHAR uni01F885 +ENCODING 129157 +BBX 14 14 1 -1 +BITMAP +07FC +0FFC +1FFC +3FFC +07FC +0FFC +1FFC +3FFC +7FFC +FFB8 +7F30 +3E20 +1C00 +0800 +ENDCHAR +STARTCHAR uni01F886 +ENCODING 129158 +BBX 14 14 1 -1 +BITMAP +0800 +1C00 +3E20 +7F30 +FFB8 +7FFC +3FFC +1FFC +0FFC +07FC +3FFC +1FFC +0FFC +07FC +ENDCHAR +STARTCHAR uni01F887 +ENCODING 129159 +BBX 14 14 1 -1 +BITMAP +0040 +00E0 +11F0 +33F8 +77FC +FFF8 +FFF0 +FFE0 +FFC0 +FF80 +FFF0 +FFE0 +FFC0 +FF80 +ENDCHAR +STARTCHAR uni01F890 +ENCODING 129168 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 4 3 +BITMAP +20 +60 +E0 +60 +20 +ENDCHAR +STARTCHAR uni01F891 +ENCODING 129169 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 0 +BITMAP +20 +70 +F8 +ENDCHAR +STARTCHAR uni01F892 +ENCODING 129170 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 3 5 1 3 +BITMAP +80 +C0 +E0 +C0 +80 +ENDCHAR +STARTCHAR uni01F893 +ENCODING 129171 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 5 3 1 8 +BITMAP +F8 +70 +20 +ENDCHAR +STARTCHAR uni01F894 +ENCODING 129172 +BBX 6 11 7 0 +BITMAP +04 +0C +1C +34 +64 +C0 +64 +34 +1C +0C +04 +ENDCHAR +STARTCHAR uni01F895 +ENCODING 129173 +BBX 11 6 2 0 +BITMAP +0400 +0E00 +1B00 +3180 +60C0 +FBE0 +ENDCHAR +STARTCHAR uni01F896 +ENCODING 129174 +BBX 6 11 3 0 +BITMAP +80 +C0 +E0 +B0 +98 +0C +98 +B0 +E0 +C0 +80 +ENDCHAR +STARTCHAR uni01F897 +ENCODING 129175 +BBX 11 6 2 6 +BITMAP +FBE0 +60C0 +3180 +1B00 +0E00 +0400 +ENDCHAR +STARTCHAR uni01F898 +ENCODING 129176 +BBX 14 11 1 0 +BITMAP +0400 +0C00 +1C00 +3FFC +7FF8 +FFF0 +7FF8 +3FFC +1C00 +0C00 +0400 +ENDCHAR +STARTCHAR uni01F899 +ENCODING 129177 +BBX 11 13 2 0 +BITMAP +0400 +0E00 +1F00 +3F80 +7FC0 +FFE0 +1F00 +1F00 +1F00 +1F00 +1F00 +1B00 +1100 +ENDCHAR +STARTCHAR uni01F89A +ENCODING 129178 +BBX 14 11 1 0 +BITMAP +0080 +00C0 +00E0 +FFF0 +7FF8 +3FFC +7FF8 +FFF0 +00E0 +00C0 +0080 +ENDCHAR +STARTCHAR uni01F89B +ENCODING 129179 +BBX 11 13 2 0 +BITMAP +1100 +1B00 +1F00 +1F00 +1F00 +1F00 +1F00 +FFE0 +7FC0 +3F80 +1F00 +0E00 +0400 +ENDCHAR +STARTCHAR uni01F89C +ENCODING 129180 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 5 +BITMAP +FF +FF +FF +ENDCHAR +STARTCHAR uni01F89D +ENCODING 129181 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 5 +BITMAP +FC +FC +FC +ENDCHAR +STARTCHAR uni01F89E +ENCODING 129182 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 4 3 2 5 +BITMAP +F0 +F0 +F0 +ENDCHAR +STARTCHAR uni01F89F +ENCODING 129183 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 2 3 3 5 +BITMAP +C0 +C0 +C0 +ENDCHAR +STARTCHAR uni01F8A0 +ENCODING 129184 +BBX 14 11 1 0 +BITMAP +0400 +0C00 +17FC +2004 +4004 +E004 +7004 +3FFC +1FFC +0C00 +0400 +ENDCHAR +STARTCHAR uni01F8A1 +ENCODING 129185 +BBX 14 11 1 0 +BITMAP +0080 +00C0 +FFA0 +8010 +8008 +801C +8038 +FFF0 +FFE0 +00C0 +0080 +ENDCHAR +STARTCHAR uni01F8A2 +ENCODING 129186 +BBX 14 11 1 0 +BITMAP +0400 +0C00 +1FFC +3FFC +7004 +E004 +4004 +2004 +17FC +0C00 +0400 +ENDCHAR +STARTCHAR uni01F8A3 +ENCODING 129187 +BBX 14 11 1 0 +BITMAP +0080 +00C0 +FFE0 +FFF0 +8038 +801C +8008 +8010 +FFA0 +00C0 +0080 +ENDCHAR +STARTCHAR uni01F8A4 +ENCODING 129188 +BBX 14 11 1 0 +BITMAP +0400 +0C00 +1FFC +3804 +7004 +E004 +7004 +3804 +1FFC +0C00 +0400 +ENDCHAR +STARTCHAR uni01F8A5 +ENCODING 129189 +BBX 14 11 1 0 +BITMAP +0080 +00C0 +FFE0 +8070 +8038 +801C +8038 +8070 +FFE0 +00C0 +0080 +ENDCHAR +STARTCHAR uni01F8A6 +ENCODING 129190 +BBX 14 11 1 0 +BITMAP +0400 +0C00 +1FFC +37FC +600C +C00C +600C +37FC +1FFC +0C00 +0400 +ENDCHAR +STARTCHAR uni01F8A7 +ENCODING 129191 +BBX 14 11 1 0 +BITMAP +0080 +00C0 +FFE0 +FFB0 +C018 +C00C +C018 +FFB0 +FFE0 +00C0 +0080 +ENDCHAR +STARTCHAR uni01F8A8 +ENCODING 129192 +BBX 14 10 1 0 +BITMAP +0800 +1400 +23E0 +4010 +E008 +73F8 +3FFC +1C00 +0C00 +0400 +ENDCHAR +STARTCHAR uni01F8A9 +ENCODING 129193 +BBX 14 10 1 0 +BITMAP +0040 +00A0 +1F10 +2008 +401C +7F38 +FFF0 +00E0 +00C0 +0080 +ENDCHAR +STARTCHAR uni01F8AA +ENCODING 129194 +BBX 14 10 1 0 +BITMAP +0400 +0C00 +1C00 +3FFC +73F8 +E008 +4010 +23E0 +1400 +0800 +ENDCHAR +STARTCHAR uni01F8AB +ENCODING 129195 +BBX 14 10 1 0 +BITMAP +0080 +00C0 +00E0 +FFF0 +7F38 +401C +2008 +1F10 +00A0 +0040 +ENDCHAR +STARTCHAR uni01F8AC +ENCODING 129196 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 3 0 5 +BITMAP +FF +81 +FF +ENDCHAR +STARTCHAR uni01F8AD +ENCODING 129197 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 3 1 5 +BITMAP +FC +84 +FC +ENDCHAR +STARTCHAR uni01F900 +ENCODING 129280 +BBX 15 15 0 -2 +BITMAP +07C0 +1FF0 +3FF8 +638C +6BAC +E10E +F93E +FFFE +F93E +E10E +6BAC +638C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F901 +ENCODING 129281 +BBX 15 15 0 -2 +BITMAP +07C0 +1FF0 +3FF8 +638C +6BAC +E10E +F93E +FFFE +F93E +E10E +638C +638C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F902 +ENCODING 129282 +BBX 15 15 0 -2 +BITMAP +07C0 +1FF0 +3FF8 +638C +638C +E10E +F93E +FFFE +F93E +E10E +638C +638C +3FF8 +1FF0 +07C0 +ENDCHAR +STARTCHAR uni01F903 +ENCODING 129283 +BBX 11 15 0 -2 +BITMAP +0600 +1800 +2000 +4000 +4C60 +8C60 +8000 +8000 +8000 +8C60 +4C60 +4000 +2000 +1800 +0600 +ENDCHAR +STARTCHAR uni01F904 +ENCODING 129284 +BBX 10 14 0 -1 +BITMAP +0600 +1800 +2000 +4000 +4C00 +8C00 +80C0 +80C0 +8C00 +4C00 +4000 +2000 +1800 +0600 +ENDCHAR +STARTCHAR uni01F905 +ENCODING 129285 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 15 0 -2 +BITMAP +06 +18 +20 +40 +4C +8C +80 +80 +80 +8C +4C +40 +20 +18 +06 +ENDCHAR +STARTCHAR uni01F906 +ENCODING 129286 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 8 14 0 -1 +BITMAP +06 +18 +20 +40 +40 +80 +83 +83 +80 +40 +40 +20 +18 +06 +ENDCHAR +STARTCHAR uni01F907 +ENCODING 129287 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 7 14 0 -1 +BITMAP +06 +18 +20 +40 +40 +80 +80 +80 +80 +40 +40 +20 +18 +06 +ENDCHAR +STARTCHAR uni01F908 +ENCODING 129288 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +78 +84 +84 +84 +04 +04 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni01F909 +ENCODING 129289 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +78 +84 +84 +84 +04 +04 +28 +10 +28 +40 +ENDCHAR +STARTCHAR uni01F90A +ENCODING 129290 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +78 +84 +B4 +B4 +04 +04 +08 +10 +20 +40 +ENDCHAR +STARTCHAR uni01F90B +ENCODING 129291 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 10 1 -1 +BITMAP +78 +84 +B4 +B4 +04 +04 +28 +10 +28 +40 +ENDCHAR +STARTCHAR uni01F910 +ENCODING 129296 +BBX 15 15 1 -2 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +8002 +8552 +4FF4 +4554 +2038 +1828 +07E8 +0038 +ENDCHAR +STARTCHAR uni01F911 +ENCODING 129297 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2428 +4E74 +5084 +8C62 +8212 +9CE2 +8842 +4004 +4824 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F912 +ENCODING 129298 +BBX 15 15 1 -2 +BITMAP +07C0 +1830 +2008 +4004 +4444 +8822 +8002 +8002 +8002 +4FE4 +40E4 +2078 +1850 +07A8 +0038 +ENDCHAR +STARTCHAR uni01F913 +ENCODING 129299 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +5EF4 +739C +9EF2 +8002 +9012 +8FE2 +4544 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F914 +ENCODING 129300 +BBX 15 15 1 -2 +BITMAP +07C0 +1830 +2008 +4004 +4EE4 +8662 +8002 +8002 +8C02 +4354 +40AA +20AA +1882 +0762 +0012 +ENDCHAR +STARTCHAR uni01F915 +ENCODING 129301 +BBX 15 14 1 -1 +BITMAP +07C0 +1AB0 +3508 +6A04 +5464 +AC62 +DC02 +A002 +C002 +4064 +4184 +2608 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F916 +ENCODING 129302 +BBX 11 16 2 -2 +BITMAP +0E00 +1100 +0E00 +0400 +FFE0 +8020 +B1A0 +B1A0 +8020 +BFA0 +AAA0 +B5A0 +9F20 +8020 +FFE0 +1F00 +ENDCHAR +STARTCHAR uni01F917 +ENCODING 129303 +BBX 15 15 1 -2 +BITMAP +07C0 +1830 +2008 +4004 +5294 +8C62 +8002 +9012 +8FE2 +5454 +AAAA +AAAA +8282 +8C62 +9012 +ENDCHAR +STARTCHAR uni01F918 +ENCODING 129304 +BBX 9 12 3 0 +BITMAP +4000 +A100 +A280 +A280 +B680 +AA80 +AA80 +8080 +8100 +4200 +4200 +7E00 +ENDCHAR +STARTCHAR uni01F919 +ENCODING 129305 +BBX 11 13 1 -1 +BITMAP +00C0 +0320 +0C60 +1180 +F300 +0080 +0300 +0080 +F300 +0880 +0640 +0120 +00C0 +ENDCHAR +STARTCHAR uni01F91A +ENCODING 129306 +BBX 12 14 2 -1 +BITMAP +0200 +0D80 +1540 +1560 +5550 +B550 +B550 +B550 +9010 +4820 +2040 +1080 +1080 +1080 +ENDCHAR +STARTCHAR uni01F91B +ENCODING 129307 +BBX 10 8 4 0 +BITMAP +7FC0 +8000 +9000 +A4C0 +8900 +7200 +2400 +1800 +ENDCHAR +STARTCHAR uni01F91C +ENCODING 129308 +BBX 10 8 2 0 +BITMAP +FF80 +0040 +0240 +C940 +2440 +1380 +0900 +0600 +ENDCHAR +STARTCHAR uni01F91D +ENCODING 129309 +BBX 14 11 1 -1 +BITMAP +FFC0 +0020 +007C +0080 +0100 +011C +E0E8 +3928 +2C90 +1A60 +0F80 +ENDCHAR +STARTCHAR uni01F91E +ENCODING 129310 +BBX 9 14 3 -1 +BITMAP +2400 +5A00 +5A00 +5200 +5400 +4F00 +EA80 +AA80 +AA80 +8080 +4100 +4100 +2200 +2200 +ENDCHAR +STARTCHAR uni01F91F +ENCODING 129311 +BBX 13 13 1 -1 +BITMAP +0100 +4280 +A280 +A280 +BE80 +AAB0 +AAC8 +AB90 +9520 +4040 +3080 +1080 +1080 +ENDCHAR +STARTCHAR uni01F920 +ENCODING 129312 +BBX 16 15 0 -1 +BITMAP +0360 +0490 +0808 +1004 +1004 +FFFF +2002 +4631 +4631 +4001 +2412 +23E2 +1004 +0C18 +03E0 +ENDCHAR +STARTCHAR uni01F921 +ENCODING 129313 +BBX 15 14 1 -1 +BITMAP +07C0 +5834 +E00E +EC6E +EC6E +E00E +C386 +8382 +9832 +57D4 +5834 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F922 +ENCODING 129314 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +8002 +8442 +4384 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F923 +ENCODING 129315 +BBX 15 14 0 -1 +BITMAP +0034 +5224 +6574 +4524 +4224 +0000 +0000 +FFFE +8542 +87C2 +4004 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F924 +ENCODING 129316 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2448 +4824 +4C64 +8C62 +8002 +8002 +9FF2 +4FE4 +4054 +2058 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F925 +ENCODING 129317 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4C64 +5AD4 +9292 +8C62 +8002 +81FA +41FC +4004 +2388 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F926 +ENCODING 129318 +BBX 15 14 1 -1 +BITMAP +0150 +1EA8 +22AC +42AA +5A02 +9A02 +8202 +8104 +8088 +4788 +4788 +2088 +1F88 +0088 +ENDCHAR +STARTCHAR uni01F927 +ENCODING 129319 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4424 +4244 +8422 +8002 +8062 +8382 +4364 +4084 +2048 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F928 +ENCODING 129320 +BBX 14 14 1 -1 +BITMAP +0780 +1860 +2610 +48C8 +4008 +8CC4 +8CC4 +8004 +8004 +4FC8 +4008 +2010 +1860 +0780 +ENDCHAR +STARTCHAR uni01F929 +ENCODING 129321 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4444 +4EE4 +8442 +8002 +9FF2 +9552 +4D64 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F92A +ENCODING 129322 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2C08 +5244 +5AA4 +8C42 +8002 +9FF2 +9552 +4D64 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F92B +ENCODING 129323 +BBX 15 16 0 -2 +BITMAP +07C0 +1830 +2008 +4C64 +5294 +8002 +8002 +8202 +9512 +4DE4 +4584 +2548 +1D60 +0450 +0490 +0220 +ENDCHAR +STARTCHAR uni01F92C +ENCODING 129324 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4844 +4484 +8CC2 +8CC2 +8002 +8BA2 +4BA4 +4384 +2828 +1010 +0FE0 +ENDCHAR +STARTCHAR uni01F92D +ENCODING 129325 +BBX 15 15 0 -1 +BITMAP +07C0 +1830 +2008 +4C64 +5294 +8002 +8002 +9502 +AA92 +6AE4 +6084 +2308 +2430 +07C0 +0400 +ENDCHAR +STARTCHAR uni01F92E +ENCODING 129326 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4424 +4244 +8422 +8002 +8002 +87E2 +4BD4 +43C4 +27E8 +1FF0 +7FFC +ENDCHAR +STARTCHAR uni01F92F +ENCODING 129327 +BBX 15 16 0 -2 +BITMAP +2448 +1010 +87C2 +5834 +0000 +7FFC +4004 +8C02 +9242 +9AA2 +8C42 +4004 +4384 +2388 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F930 +ENCODING 129328 +BBX 8 16 4 -2 +BITMAP +18 +3C +7E +7E +3E +1E +0F +1F +3F +7D +1C +7C +FC +FC +FC +7C +ENDCHAR +STARTCHAR uni01F931 +ENCODING 129329 +BBX 11 16 2 -2 +BITMAP +0600 +0F00 +1F80 +1F80 +0F80 +0780 +03C0 +07C0 +7BE0 +9B60 +8060 +7FC0 +0700 +0700 +0700 +0700 +ENDCHAR +STARTCHAR uni01F932 +ENCODING 129330 +BBX 15 11 0 0 +BITMAP +1C70 +2AA8 +6BAC +ABAA +A10A +9112 +9112 +4104 +2288 +2288 +2288 +ENDCHAR +STARTCHAR uni01F933 +ENCODING 129331 +BBX 12 14 1 -1 +BITMAP +0800 +0440 +0040 +0C60 +0050 +04D0 +0950 +0110 +0090 +0150 +0220 +FC40 +0080 +FF00 +ENDCHAR +STARTCHAR uni01F934 +ENCODING 129332 +BBX 11 15 2 -1 +BITMAP +0400 +2E80 +3F80 +7FC0 +7FC0 +0000 +7FC0 +4040 +5B40 +9220 +8020 +4040 +2E80 +2080 +1F00 +ENDCHAR +STARTCHAR uni01F935 +ENCODING 129333 +BBX 7 14 4 -1 +BITMAP +82 +EE +FE +FE +EE +82 +00 +10 +00 +00 +10 +00 +00 +10 +ENDCHAR +STARTCHAR uni01F936 +ENCODING 129334 +BBX 15 15 1 -2 +BITMAP +07C0 +1FF0 +3018 +4EE4 +F11E +CEE6 +C006 +C426 +C3C6 +A00A +1830 +27C8 +1010 +0FE0 +0380 +ENDCHAR +STARTCHAR uni01F937 +ENCODING 129335 +BBX 14 14 1 -1 +BITMAP +0300 +0780 +0780 +0300 +0000 +0780 +C78C +2FD0 +1FE0 +0780 +0780 +0780 +0780 +0780 +ENDCHAR +STARTCHAR uni01F938 +ENCODING 129336 +BBX 11 16 3 -2 +BITMAP +0180 +8100 +4100 +2200 +1200 +1E00 +1E00 +1E00 +1E00 +1E00 +3F00 +2080 +4C40 +4C20 +8000 +8000 +ENDCHAR +STARTCHAR uni01F939 +ENCODING 129337 +BBX 15 15 0 -2 +BITMAP +0600 +0600 +0000 +0060 +0060 +0000 +0C00 +0C1E +00E0 +0106 +00F8 +F800 +0700 +E080 +1F00 +ENDCHAR +STARTCHAR uni01F93A +ENCODING 129338 +BBX 13 12 1 -1 +BITMAP +0300 +0300 +0040 +01C0 +01E0 +0AE0 +FC70 +0870 +0070 +00D0 +0198 +0308 +ENDCHAR +STARTCHAR uni01F93B +ENCODING 129339 +BBX 13 15 1 -2 +BITMAP +0C00 +0C00 +0038 +1C48 +1E88 +1F88 +3980 +39C0 +FE60 +3E00 +0380 +8980 +2300 +8B00 +0200 +ENDCHAR +STARTCHAR uni01F93C +ENCODING 129340 +BBX 16 12 0 -1 +BITMAP +0660 +0660 +1008 +1C38 +3FBC +385C +708E +710E +700E +581A +CC33 +8661 +ENDCHAR +STARTCHAR uni01F93D +ENCODING 129341 +BBX 15 15 1 -1 +BITMAP +0600 +0900 +0900 +0640 +0040 +0080 +1880 +1B00 +03F0 +0FF0 +739C +8C62 +0000 +739C +8C62 +ENDCHAR +STARTCHAR uni01F93E +ENCODING 129342 +BBX 9 13 4 0 +BITMAP +0600 +0900 +0900 +0600 +0080 +1880 +1900 +0100 +3E00 +7C00 +5C00 +9C00 +9C00 +ENDCHAR +STARTCHAR uni01F940 +ENCODING 129344 +BBX 16 14 0 -1 +BITMAP +00E0 +01F0 +0398 +030C +060C +061E +0621 +0621 +F621 +7E3F +0600 +07E0 +06F0 +0600 +ENDCHAR +STARTCHAR uni01F941 +ENCODING 129345 +BBX 11 12 2 1 +BITMAP +8020 +4040 +2E80 +3180 +4940 +8220 +C060 +B1A0 +AEA0 +A4A0 +64C0 +1F00 +ENDCHAR +STARTCHAR uni01F942 +ENCODING 129346 +BBX 10 13 3 0 +BITMAP +9100 +4A00 +2000 +07C0 +FC40 +8C40 +8C40 +8B80 +7100 +2100 +2100 +2380 +7000 +ENDCHAR +STARTCHAR uni01F943 +ENCODING 129347 +BBX 11 13 2 0 +BITMAP +0E00 +3180 +4040 +8020 +C060 +B1A0 +8E20 +E0E0 +FFE0 +FFE0 +FFE0 +7FC0 +1F00 +ENDCHAR +STARTCHAR uni01F944 +ENCODING 129348 +BBX 7 13 4 -1 +BITMAP +38 +64 +C2 +C2 +C2 +64 +28 +28 +28 +28 +28 +28 +38 +ENDCHAR +STARTCHAR uni01F945 +ENCODING 129349 +BBX 13 11 1 0 +BITMAP +3FE0 +6AB0 +BFE8 +EAB8 +BFE8 +EAB8 +BFE8 +C018 +8008 +1800 +1800 +ENDCHAR +STARTCHAR uni01F946 +ENCODING 129350 +BBX 15 7 0 2 +BITMAP +4020 +FFFE +FFFE +00DE +00E6 +00C0 +00C0 +ENDCHAR +STARTCHAR uni01F947 +ENCODING 129351 +BBX 11 15 3 -2 +BITMAP +8020 +8020 +4040 +3180 +0E00 +3180 +4040 +4440 +8C20 +8420 +8420 +4E40 +4040 +3180 +0E00 +ENDCHAR +STARTCHAR uni01F948 +ENCODING 129352 +BBX 11 15 3 -2 +BITMAP +8020 +8020 +4040 +3180 +0E00 +3180 +4040 +4E40 +8120 +8620 +8820 +4F40 +4040 +3180 +0E00 +ENDCHAR +STARTCHAR uni01F949 +ENCODING 129353 +BBX 11 15 3 -2 +BITMAP +8020 +8020 +4040 +3180 +0E00 +3180 +4040 +4E40 +8120 +8620 +8120 +4E40 +4040 +3180 +0E00 +ENDCHAR +STARTCHAR uni01F94A +ENCODING 129354 +BBX 8 13 4 -1 +BITMAP +3E +3F +3F +1F +DF +DF +FF +FF +7E +3E +00 +3E +3E +ENDCHAR +STARTCHAR uni01F94B +ENCODING 129355 +BBX 13 13 1 0 +BITMAP +0F80 +3060 +4890 +8508 +8208 +A428 +A828 +B028 +F678 +1FC0 +1640 +2520 +2520 +ENDCHAR +STARTCHAR uni01F94C +ENCODING 129356 +BBX 11 10 2 0 +BITMAP +0F00 +1080 +2700 +2800 +47C0 +7FC0 +8020 +8020 +7FC0 +1F00 +ENDCHAR +STARTCHAR uni01F94D +ENCODING 129357 +BBX 10 12 2 0 +BITMAP +0380 +0440 +0440 +6280 +9280 +9100 +6100 +0100 +0100 +0100 +0100 +0100 +ENDCHAR +STARTCHAR uni01F94E +ENCODING 129358 +BBX 13 13 1 -1 +BITMAP +0F80 +1240 +2020 +4210 +6010 +8908 +8008 +8488 +4030 +4210 +2020 +1240 +0F80 +ENDCHAR +STARTCHAR uni01F94F +ENCODING 129359 +BBX 15 13 0 -1 +BITMAP +01E0 +0618 +09E4 +1212 +1212 +09E4 +2618 +41E0 +0800 +1200 +0000 +4800 +9000 +ENDCHAR +STARTCHAR uni01F950 +ENCODING 129360 +BBX 12 14 2 -1 +BITMAP +0F80 +1440 +2220 +5110 +49D0 +C630 +A400 +9800 +C800 +B800 +8800 +4400 +2200 +1E00 +ENDCHAR +STARTCHAR uni01F951 +ENCODING 129361 +BBX 13 8 1 1 +BITMAP +01C0 +7FF0 +83E8 +83E8 +F9C8 +7C18 +07F0 +03E0 +ENDCHAR +STARTCHAR uni01F952 +ENCODING 129362 +BBX 14 6 1 1 +BITMAP +7FF8 +8004 +A084 +8A14 +8004 +7FF8 +ENDCHAR +STARTCHAR uni01F953 +ENCODING 129363 +BBX 14 14 1 -1 +BITMAP +001C +1FFC +FFE4 +E01C +9FFC +FFE0 +E000 +001C +1FFC +FFE4 +E01C +9FFC +FFE0 +E000 +ENDCHAR +STARTCHAR uni01F954 +ENCODING 129364 +BBX 13 10 2 1 +BITMAP +07E0 +1810 +6028 +8448 +A248 +9208 +9030 +8040 +4380 +3C00 +ENDCHAR +STARTCHAR uni01F955 +ENCODING 129365 +BBX 14 5 1 3 +BITMAP +0FF8 +3524 +C294 +3294 +0FF8 +ENDCHAR +STARTCHAR uni01F956 +ENCODING 129366 +BBX 12 12 2 0 +BITMAP +00E0 +0310 +0510 +0890 +1220 +2920 +4440 +5080 +8900 +8200 +8C00 +7000 +ENDCHAR +STARTCHAR uni01F957 +ENCODING 129367 +BBX 13 7 1 0 +BITMAP +08C0 +35A0 +FFF8 +8008 +4010 +2020 +1FC0 +ENDCHAR +STARTCHAR uni01F958 +ENCODING 129368 +BBX 15 11 1 0 +BITMAP +0380 +0C60 +1110 +1410 +664C +A22A +604C +1490 +1290 +0C60 +0380 +ENDCHAR +STARTCHAR uni01F959 +ENCODING 129369 +BBX 12 8 2 1 +BITMAP +0200 +36E0 +FFF0 +8010 +8010 +4020 +2040 +1F80 +ENDCHAR +STARTCHAR uni01F95A +ENCODING 129370 +BBX 9 12 3 0 +BITMAP +1C00 +2200 +2200 +4100 +4100 +8080 +8080 +8080 +8080 +8080 +4100 +3E00 +ENDCHAR +STARTCHAR uni01F95B +ENCODING 129371 +BBX 8 12 4 0 +BITMAP +7E +C3 +BD +81 +C3 +BD +81 +A1 +A1 +A1 +81 +7E +ENDCHAR +STARTCHAR uni01F95C +ENCODING 129372 +BBX 14 6 1 1 +BITMAP +7878 +D794 +A324 +9014 +A7AC +7878 +ENDCHAR +STARTCHAR uni01F95D +ENCODING 129373 +BBX 15 15 1 -2 +BITMAP +07C0 +1930 +2548 +5294 +4BA4 +A44A +9832 +E82E +9C72 +EBAE +D296 +654C +793C +3FF8 +1FF0 +ENDCHAR +STARTCHAR uni01F95E +ENCODING 129374 +BBX 15 12 0 0 +BITMAP +07C0 +1830 +2308 +2308 +1830 +27C8 +1830 +67CC +9832 +87C2 +4004 +3FF8 +ENDCHAR +STARTCHAR uni01F95F +ENCODING 129375 +BBX 13 14 1 -1 +BITMAP +0100 +1210 +2220 +2120 +1110 +1210 +2020 +0D80 +3260 +4890 +A028 +8008 +8008 +7FF0 +ENDCHAR +STARTCHAR uni01F960 +ENCODING 129376 +BBX 12 10 2 0 +BITMAP +1C00 +2300 +4080 +8070 +8850 +8670 +85C0 +8400 +6200 +1E00 +ENDCHAR +STARTCHAR uni01F961 +ENCODING 129377 +BBX 13 13 2 -1 +BITMAP +1FE0 +2030 +4068 +FFA8 +88A8 +87F0 +8CA0 +94A0 +5340 +6340 +6140 +4180 +7F00 +ENDCHAR +STARTCHAR uni01F962 +ENCODING 129378 +BBX 11 11 2 0 +BITMAP +E0E0 +E0E0 +A140 +A140 +A140 +A280 +A280 +A280 +A500 +A500 +E700 +ENDCHAR +STARTCHAR uni01F963 +ENCODING 129379 +BBX 12 14 2 -1 +BITMAP +0040 +00A0 +0140 +0280 +1D80 +6560 +FFF0 +FFF0 +9F90 +8010 +8010 +8010 +6060 +1F80 +ENDCHAR +STARTCHAR uni01F964 +ENCODING 129380 +BBX 8 11 4 0 +BITMAP +07 +08 +7E +CB +BD +81 +81 +42 +42 +42 +7E +ENDCHAR +STARTCHAR uni01F965 +ENCODING 129381 +BBX 13 12 1 -1 +BITMAP +0700 +1FC0 +35E0 +7FF0 +7BF0 +FFF8 +FFF8 +7FF0 +7FF0 +3FE0 +1FC0 +0700 +ENDCHAR +STARTCHAR uni01F966 +ENCODING 129382 +BBX 11 12 2 0 +BITMAP +1400 +2A00 +5D00 +AAC0 +D5A0 +9640 +6980 +1200 +0A00 +0A00 +0A00 +0A00 +ENDCHAR +STARTCHAR uni01F967 +ENCODING 129383 +BBX 15 10 0 0 +BITMAP +0FE0 +3018 +4444 +8922 +4104 +701C +4FE4 +4004 +3018 +0FE0 +ENDCHAR +STARTCHAR uni01F968 +ENCODING 129384 +BBX 13 10 1 -1 +BITMAP +38E0 +4510 +4210 +8508 +8888 +4890 +5050 +38E0 +1740 +1040 +ENDCHAR +STARTCHAR uni01F969 +ENCODING 129385 +BBX 12 11 2 1 +BITMAP +0060 +03F0 +07F0 +0FD0 +7FD0 +8010 +FFD0 +7FF0 +1FF0 +07E0 +01C0 +ENDCHAR +STARTCHAR uni01F96A +ENCODING 129386 +BBX 13 11 1 0 +BITMAP +0100 +0100 +0100 +3FE0 +4010 +FFF8 +FFF8 +FFF8 +4010 +3FE0 +0100 +ENDCHAR +STARTCHAR uni01F96B +ENCODING 129387 +BBX 9 12 3 0 +BITMAP +3E00 +4100 +8080 +C180 +BE80 +8080 +9C80 +BE80 +BE80 +9C80 +4100 +3E00 +ENDCHAR +STARTCHAR uni01F96C +ENCODING 129388 +BBX 8 13 4 0 +BITMAP +0A +55 +AA +55 +6E +34 +34 +34 +54 +52 +52 +62 +3C +ENDCHAR +STARTCHAR uni01F96D +ENCODING 129389 +BBX 10 13 3 0 +BITMAP +0300 +0400 +1E00 +2100 +4080 +4080 +81C0 +81C0 +83C0 +4380 +4780 +2700 +1E00 +ENDCHAR +STARTCHAR uni01F96E +ENCODING 129390 +BBX 11 11 2 -1 +BITMAP +0F80 +3040 +40C0 +8140 +8280 +C100 +B0E0 +AF20 +64A0 +34C0 +0F00 +ENDCHAR +STARTCHAR uni01F96F +ENCODING 129391 +BBX 14 13 1 -1 +BITMAP +1E00 +6180 +8C40 +8C40 +E1C0 +9E60 +6198 +1EC4 +08C4 +0E1C +09E4 +0618 +01E0 +ENDCHAR +STARTCHAR uni01F970 +ENCODING 129392 +BBX 15 14 1 -1 +BITMAP +D800 +FFC0 +706C +207C +4038 +4D94 +8D84 +8004 +8004 +4888 +4736 +203E +185C +0FC8 +ENDCHAR +STARTCHAR uni01F973 +ENCODING 129395 +BBX 15 13 0 0 +BITMAP +0400 +0A00 +1100 +1F00 +2080 +4040 +5140 +802C +802E +4642 +47FC +2080 +1F00 +ENDCHAR +STARTCHAR uni01F974 +ENCODING 129396 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4004 +4064 +8C62 +8802 +8002 +8012 +4664 +4984 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F975 +ENCODING 129397 +BBX 15 14 1 -1 +BITMAP +07C8 +1834 +2014 +4014 +4C6C +8C62 +8002 +8002 +8002 +47C4 +4444 +2388 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F976 +ENCODING 129398 +BBX 15 15 1 -2 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +8002 +87E2 +4A54 +CFF4 +A008 +B834 +A7D4 +2010 +ENDCHAR +STARTCHAR uni01F97A +ENCODING 129402 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4C64 +5294 +9292 +8C62 +8002 +8002 +4384 +4444 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F97C +ENCODING 129404 +BBX 13 13 1 0 +BITMAP +0F80 +3060 +58D0 +8D88 +8208 +A228 +A228 +A228 +BAE8 +A228 +E238 +1240 +1FC0 +ENDCHAR +STARTCHAR uni01F97D +ENCODING 129405 +BBX 14 10 1 0 +BITMAP +03C0 +0C20 +1010 +3FD8 +4024 +8014 +8014 +8014 +4638 +39C0 +ENDCHAR +STARTCHAR uni01F97E +ENCODING 129406 +BBX 12 9 2 0 +BITMAP +F800 +F800 +8800 +8400 +8BE0 +82B0 +8530 +F030 +EFE0 +ENDCHAR +STARTCHAR uni01F97F +ENCODING 129407 +BBX 14 6 1 0 +BITMAP +7F00 +80F0 +FF08 +8004 +F004 +EFF8 +ENDCHAR +STARTCHAR uni01F980 +ENCODING 129408 +BBX 13 12 2 0 +BITMAP +8008 +A028 +E038 +E038 +4010 +6FB0 +3FE0 +3FE0 +1FC0 +0F80 +1040 +1040 +ENDCHAR +STARTCHAR uni01F981 +ENCODING 129409 +BBX 15 14 0 -2 +BITMAP +0FE0 +3FF8 +4824 +87C2 +8002 +8822 +CC66 +C106 +C386 +A82A +9BB2 +9BB2 +4C64 +2388 +ENDCHAR +STARTCHAR uni01F982 +ENCODING 129410 +BBX 14 12 1 0 +BITMAP +00E0 +0110 +0008 +000C +000C +001C +003C +1FFC +1FF8 +CFF0 +3AA0 +F2A0 +ENDCHAR +STARTCHAR uni01F983 +ENCODING 129411 +BBX 12 12 2 0 +BITMAP +3000 +48C0 +C920 +2910 +2F10 +2820 +4220 +4140 +4080 +3F00 +2400 +6C00 +ENDCHAR +STARTCHAR uni01F984 +ENCODING 129412 +BBX 14 13 1 -1 +BITMAP +8000 +4000 +6700 +3880 +1840 +1460 +1070 +2078 +213C +1698 +0888 +0040 +0040 +ENDCHAR +STARTCHAR uni01F985 +ENCODING 129413 +BBX 14 13 1 0 +BITMAP +0300 +0480 +0C80 +0280 +7EF8 +4008 +8004 +F87C +0480 +0780 +0780 +0480 +0300 +ENDCHAR +STARTCHAR uni01F986 +ENCODING 129414 +BBX 15 12 0 0 +BITMAP +0E00 +1100 +1500 +6100 +8100 +70C0 +083E +0802 +0802 +0402 +040C +03F0 +ENDCHAR +STARTCHAR uni01F987 +ENCODING 129415 +BBX 13 11 1 0 +BITMAP +0880 +0F80 +0700 +0F80 +7FF0 +FFF8 +FFF8 +FFF8 +F778 +A228 +8208 +ENDCHAR +STARTCHAR uni01F988 +ENCODING 129416 +BBX 15 7 1 2 +BITMAP +0202 +0604 +FFCC +DFF8 +7FFC +1004 +0802 +ENDCHAR +STARTCHAR uni01F989 +ENCODING 129417 +BBX 13 15 1 -2 +BITMAP +8008 +C018 +BFE8 +9DC8 +AAA8 +A228 +9DC8 +4010 +4710 +8008 +8008 +8008 +8008 +4010 +3FE0 +ENDCHAR +STARTCHAR uni01F98A +ENCODING 129418 +BBX 13 14 1 -1 +BITMAP +C018 +A028 +9748 +4890 +4010 +4890 +8008 +8008 +8D88 +6230 +3AE0 +0880 +0F80 +0700 +ENDCHAR +STARTCHAR uni01F98B +ENCODING 129419 +BBX 14 14 1 -1 +BITMAP +0840 +0480 +3330 +4FC8 +8304 +8304 +8304 +4308 +3FF0 +4308 +4308 +4488 +2490 +1860 +ENDCHAR +STARTCHAR uni01F98C +ENCODING 129420 +BBX 15 15 0 -2 +BITMAP +8002 +9012 +9292 +4AA4 +3EF8 +0280 +77DC +8822 +729C +1010 +0920 +0BA0 +0440 +0280 +0380 +ENDCHAR +STARTCHAR uni01F98D +ENCODING 129421 +BBX 11 14 3 -1 +BITMAP +1F00 +3F80 +3F80 +7FC0 +E0E0 +DB60 +AAA0 +BBA0 +C060 +EAE0 +71C0 +3F80 +1F00 +1F00 +ENDCHAR +STARTCHAR uni01F98E +ENCODING 129422 +BBX 13 14 1 -1 +BITMAP +0600 +0F00 +8F10 +4620 +3FC0 +0F00 +0F00 +0F20 +0F20 +3FC0 +4F08 +4798 +03F0 +01E0 +ENDCHAR +STARTCHAR uni01F98F +ENCODING 129423 +BBX 14 15 1 -2 +BITMAP +0100 +02BC +0240 +0100 +0100 +8700 +8400 +C480 +AC00 +9804 +4018 +40E0 +2C80 +1980 +0600 +ENDCHAR +STARTCHAR uni01F990 +ENCODING 129424 +BBX 14 11 1 1 +BITMAP +0060 +0010 +0008 +01C4 +0E24 +1018 +20E0 +4FA0 +8AA0 +AA00 +5000 +ENDCHAR +STARTCHAR uni01F991 +ENCODING 129425 +BBX 10 14 2 -1 +BITMAP +0400 +3B80 +5140 +71C0 +1100 +1100 +1100 +1F00 +1100 +0E00 +3D00 +4CC0 +B200 +2100 +ENDCHAR +STARTCHAR uni01F992 +ENCODING 129426 +BBX 14 12 1 0 +BITMAP +6498 +97A4 +8B44 +4308 +3030 +14A0 +1020 +1020 +0840 +0B40 +0840 +0780 +ENDCHAR +STARTCHAR uni01F993 +ENCODING 129427 +BBX 14 12 1 0 +BITMAP +0180 +0140 +0740 +08A0 +1550 +3138 +6974 +B7EC +9EBC +7058 +0070 +0060 +ENDCHAR +STARTCHAR uni01F994 +ENCODING 129428 +BBX 14 7 1 0 +BITMAP +0550 +1FF0 +37FC +43F8 +FFFC +0420 +0840 +ENDCHAR +STARTCHAR uni01F995 +ENCODING 129429 +BBX 15 16 0 -2 +BITMAP +7000 +B800 +F800 +1800 +1800 +1800 +1C00 +1FF0 +1FFC +1FFE +0FF6 +0A56 +0A56 +0A56 +0004 +0038 +ENDCHAR +STARTCHAR uni01F996 +ENCODING 129430 +BBX 15 15 0 -2 +BITMAP +0038 +007E +00EE +01F8 +01FE +63E0 +C3C0 +8FF0 +FFE0 +FF90 +7F80 +3F00 +3F00 +1200 +2400 +ENDCHAR +STARTCHAR uni01F997 +ENCODING 129431 +BBX 14 12 1 -1 +BITMAP +0800 +1200 +2400 +2800 +4800 +5040 +60A0 +FFFC +FFFC +E910 +090C +1200 +ENDCHAR +STARTCHAR uni01F998 +ENCODING 129432 +BBX 13 9 2 0 +BITMAP +0700 +6F80 +FFC0 +3F40 +0920 +08A0 +0098 +0100 +0100 +ENDCHAR +STARTCHAR uni01F999 +ENCODING 129433 +BBX 15 11 1 0 +BITMAP +03F0 +0FFC +1CFE +3FFC +FFFC +BFFC +7FFC +03FC +00FC +00FC +00FC +ENDCHAR +STARTCHAR uni01F99A +ENCODING 129434 +BBX 13 13 1 -1 +BITMAP +0700 +3AE0 +6030 +5650 +8708 +CB18 +8188 +53D0 +27A0 +1FC0 +0780 +0280 +0280 +ENDCHAR +STARTCHAR uni01F99B +ENCODING 129435 +BBX 13 7 2 0 +BITMAP +2FE0 +3FF0 +6FF8 +FFF8 +E7F8 +0630 +0630 +ENDCHAR +STARTCHAR uni01F99C +ENCODING 129436 +BBX 14 12 1 0 +BITMAP +1E00 +3F00 +6A80 +E440 +F140 +D960 +D760 +41F0 +23F8 +07FC +07FC +07FC +ENDCHAR +STARTCHAR uni01F99D +ENCODING 129437 +BBX 14 12 1 0 +BITMAP +3030 +4848 +4788 +3870 +4008 +FFFC +F33C +FFFC +F87C +4788 +BFF4 +A314 +ENDCHAR +STARTCHAR uni01F99E +ENCODING 129438 +BBX 11 14 3 -1 +BITMAP +8020 +A0A0 +E4E0 +EEE0 +5F40 +5F40 +7FC0 +7FC0 +3F80 +5F40 +3F80 +4E40 +1F00 +3F80 +ENDCHAR +STARTCHAR uni01F99F +ENCODING 129439 +BBX 11 9 3 0 +BITMAP +3800 +7C00 +F700 +E380 +85C0 +89E0 +8AE0 +8A80 +0A80 +ENDCHAR +STARTCHAR uni01F9A0 +ENCODING 129440 +BBX 14 10 1 1 +BITMAP +2A80 +1FA8 +A070 +4808 +8324 +9B24 +4808 +2074 +5F90 +1540 +ENDCHAR +STARTCHAR uni01F9A1 +ENCODING 129441 +BBX 15 10 0 -1 +BITMAP +19E0 +2610 +C008 +FD04 +0924 +0A44 +0BC6 +0A2E +3CF6 +0002 +ENDCHAR +STARTCHAR uni01F9A2 +ENCODING 129442 +BBX 14 12 1 0 +BITMAP +3800 +4400 +E400 +1400 +2400 +28E0 +4B24 +544C +9874 +8088 +8010 +7FE0 +ENDCHAR +STARTCHAR uni01F9B0 +ENCODING 129456 +BBX 15 7 1 6 +BITMAP +07C0 +1930 +2548 +5634 +59D4 +E00E +8002 +ENDCHAR +STARTCHAR uni01F9B1 +ENCODING 129457 +BBX 15 7 1 6 +BITMAP +07C0 +1FF0 +3FD8 +7E1C +700E +C006 +0002 +ENDCHAR +STARTCHAR uni01F9B2 +ENCODING 129458 +BBX 15 8 1 5 +BITMAP +07C0 +1830 +2008 +4004 +4004 +8002 +8002 +4004 +ENDCHAR +STARTCHAR uni01F9B3 +ENCODING 129459 +BBX 15 8 1 5 +BITMAP +07C0 +1830 +2088 +4744 +4824 +9012 +A00C +4000 +ENDCHAR +STARTCHAR uni01F9B4 +ENCODING 129460 +BBX 11 11 2 0 +BITMAP +0180 +0160 +0220 +04C0 +0900 +1200 +6400 +8800 +9000 +5000 +6000 +ENDCHAR +STARTCHAR uni01F9B5 +ENCODING 129461 +BBX 13 12 1 0 +BITMAP +03F8 +0400 +0400 +0500 +04E0 +0498 +0480 +0480 +0500 +7900 +8100 +7E00 +ENDCHAR +STARTCHAR uni01F9B6 +ENCODING 129462 +BBX 14 11 1 0 +BITMAP +0084 +0084 +0084 +0044 +0044 +0048 +0188 +1E04 +E004 +8004 +7FF8 +ENDCHAR +STARTCHAR uni01F9B7 +ENCODING 129463 +BBX 13 12 1 0 +BITMAP +7070 +8F88 +8008 +8008 +8008 +8008 +4210 +4510 +2520 +2520 +2520 +18C0 +ENDCHAR +STARTCHAR uni01F9B8 +ENCODING 129464 +BBX 15 15 1 -2 +BITMAP +07C0 +1830 +2008 +4004 +4C64 +8C62 +8002 +C006 +E82E +C7C6 +4004 +2008 +783C +FFFE +FFFE +ENDCHAR +STARTCHAR uni01F9B9 +ENCODING 129465 +BBX 15 15 1 -2 +BITMAP +07C0 +1830 +2008 +7FFC +77DC +F39E +FFFE +C006 +E00E +C7C6 +4004 +2008 +783C +FFFE +FFFE +ENDCHAR +STARTCHAR uni01F9C0 +ENCODING 129472 +BBX 14 11 1 0 +BITMAP +00C0 +0320 +0C10 +7008 +FFF8 +8004 +9944 +D844 +C434 +8334 +FFFC +ENDCHAR +STARTCHAR uni01F9C1 +ENCODING 129473 +BBX 13 11 2 -1 +BITMAP +0F80 +3FE0 +7FF0 +FFF8 +9FC8 +A228 +A8A8 +AAA8 +AAA8 +6AB0 +1FC0 +ENDCHAR +STARTCHAR uni01F9C2 +ENCODING 129474 +BBX 9 11 3 0 +BITMAP +3E00 +5500 +6B00 +5D00 +5500 +9480 +A280 +A280 +A280 +A280 +7F00 +ENDCHAR +STARTCHAR uni01F9D0 +ENCODING 129488 +BBX 15 14 1 -1 +BITMAP +07C0 +1830 +2008 +4064 +4C94 +8C9A +806A +800A +800A +482C +47CC +2008 +1838 +07C8 +ENDCHAR +STARTCHAR uni01F9D1 +ENCODING 129489 +BBX 13 14 2 -1 +BITMAP +1FC0 +3FF8 +6FF0 +6038 +6DB8 +CD98 +C018 +8008 +8008 +4710 +4010 +2020 +18C0 +0700 +ENDCHAR +STARTCHAR uni01F9D2 +ENCODING 129490 +BBX 15 14 1 -1 +BITMAP +0FF0 +1FFE +37FC +700C +666C +E666 +E006 +C002 +C7E2 +4424 +4244 +2188 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F9D3 +ENCODING 129491 +BBX 15 14 1 -1 +BITMAP +07F8 +1804 +3FF2 +600C +4C64 +B39A +9292 +8C62 +8002 +4824 +47C4 +2008 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F9D4 +ENCODING 129492 +BBX 13 15 2 -2 +BITMAP +1FC0 +3FE0 +7FF0 +6038 +6DB8 +CD98 +8008 +8008 +C898 +6730 +7070 +3FE0 +1FC0 +0F80 +0700 +ENDCHAR +STARTCHAR uni01F9D5 +ENCODING 129493 +BBX 13 15 2 -2 +BITMAP +1FC0 +3FE0 +6030 +CD98 +CD98 +C018 +CF98 +68B0 +2720 +3060 +1FC0 +0F80 +1DC0 +18C0 +2020 +ENDCHAR +STARTCHAR uni01F9D6 +ENCODING 129494 +BBX 16 15 0 -2 +BITMAP +2422 +4444 +4844 +2802 +2382 +4C64 +1010 +1290 +2009 +200A +1392 +5011 +8C61 +4382 +8000 +ENDCHAR +STARTCHAR uni01F9D7 +ENCODING 129495 +BBX 14 14 1 -1 +BITMAP +FFF0 +FFE0 +FE8C +F84C +F820 +F81C +F81C +F738 +F0F0 +F3E0 +F600 +F800 +E000 +C000 +ENDCHAR +STARTCHAR uni01F9D8 +ENCODING 129496 +BBX 10 10 3 0 +BITMAP +0C00 +0C00 +0000 +0C00 +1E00 +2D00 +2D00 +CCC0 +3F00 +F3C0 +ENDCHAR +STARTCHAR uni01F9D9 +ENCODING 129497 +BBX 11 14 2 -1 +BITMAP +07C0 +0F80 +1F00 +1F00 +3F80 +3F80 +FFE0 +2080 +2A80 +2080 +2E80 +2080 +1100 +0E00 +ENDCHAR +STARTCHAR uni01F9DA +ENCODING 129498 +BBX 12 13 2 -1 +BITMAP +0600 +6660 +9090 +8F10 +4620 +2640 +1F80 +2640 +4F20 +36C0 +0900 +0900 +1980 +ENDCHAR +STARTCHAR uni01F9DB +ENCODING 129499 +BBX 13 13 1 -1 +BITMAP +0F80 +1FC0 +3FE0 +6730 +4210 +8D88 +8D88 +8008 +5050 +4F90 +2520 +1040 +0F80 +ENDCHAR +STARTCHAR uni01F9DC +ENCODING 129500 +BBX 10 13 4 -1 +BITMAP +3000 +3000 +0000 +3000 +7800 +B400 +B400 +B4C0 +31C0 +3100 +3BC0 +1FC0 +0E00 +ENDCHAR +STARTCHAR uni01F9DD +ENCODING 129501 +BBX 15 15 0 -2 +BITMAP +07C0 +4FE4 +7C7C +5834 +5014 +46C4 +66CC +2008 +1010 +1390 +0820 +07C0 +1FF0 +600C +8002 +ENDCHAR +STARTCHAR uni01F9DE +ENCODING 129502 +BBX 14 14 1 -1 +BITMAP +0030 +0030 +0000 +0030 +0078 +00B4 +00B4 +00B4 +0020 +0040 +4800 +BF80 +7E00 +1C00 +ENDCHAR +STARTCHAR uni01F9DF +ENCODING 129503 +BBX 15 14 1 -1 +BITMAP +07C0 +1840 +2020 +401C +4C64 +9AD2 +9EF2 +8C62 +8002 +47C4 +4444 +27C8 +1830 +07C0 +ENDCHAR +STARTCHAR uni01F9E0 +ENCODING 129504 +BBX 12 14 2 -1 +BITMAP +0780 +0840 +1820 +38A0 +3D90 +7F10 +FF90 +FFF0 +3FF0 +3FE0 +0FE0 +3FC0 +1F80 +0E00 +ENDCHAR +STARTCHAR uni01F9E1 +ENCODING 129505 +BBX 13 12 1 0 +BITMAP +38E0 +6DB0 +FFF8 +AAA8 +FFF8 +6AB0 +7FF0 +2AA0 +1FC0 +0A80 +0700 +0200 +ENDCHAR +STARTCHAR uni01F9E2 +ENCODING 129506 +BBX 15 7 0 0 +BITMAP +01F0 +0248 +04A4 +04A4 +0912 +0912 +FFFE +ENDCHAR +STARTCHAR uni01F9E3 +ENCODING 129507 +BBX 11 10 2 0 +BITMAP +7FC0 +C060 +BFA0 +8920 +7CC0 +2A80 +2A80 +2A80 +3B80 +3B80 +ENDCHAR +STARTCHAR uni01F9E4 +ENCODING 129508 +BBX 15 11 0 0 +BITMAP +3838 +5454 +D6D6 +D556 +8542 +8922 +8922 +8282 +4444 +4444 +7C7C +ENDCHAR +STARTCHAR uni01F9E5 +ENCODING 129509 +BBX 13 13 1 0 +BITMAP +0F80 +3060 +4890 +8508 +8208 +A428 +A628 +A428 +A628 +A428 +E638 +1440 +1FC0 +ENDCHAR +STARTCHAR uni01F9E6 +ENCODING 129510 +BBX 10 12 3 0 +BITMAP +03C0 +0240 +0240 +07C0 +04C0 +04C0 +3CC0 +44C0 +3C80 +7C80 +8080 +7F00 +ENDCHAR +STARTCHAR uni01F9E7 +ENCODING 129511 +BBX 9 13 3 -1 +BITMAP +FF80 +D580 +D580 +F780 +BE80 +AA80 +AA80 +AA80 +AA80 +AA80 +AA80 +AA80 +FF80 +ENDCHAR +STARTCHAR uni01F9E8 +ENCODING 129512 +BBX 14 14 1 -1 +BITMAP +0048 +0150 +0080 +002C +0340 +0590 +0E48 +1F40 +3F80 +7F00 +FE00 +FC00 +7800 +3000 +ENDCHAR +STARTCHAR uni01F9E9 +ENCODING 129513 +BBX 14 11 1 -1 +BITMAP +F9E0 +8920 +8938 +E604 +103C +11F8 +FFE0 +FFE0 +FFE0 +0E00 +0E00 +ENDCHAR +STARTCHAR uni01F9EA +ENCODING 129514 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 13 1 -1 +BITMAP +78 +84 +FC +84 +84 +CC +FC +FC +FC +FC +FC +FC +78 +ENDCHAR +STARTCHAR uni01F9EB +ENCODING 129515 +BBX 14 7 1 1 +BITMAP +1FE0 +6218 +88C4 +E0DC +9FE4 +6018 +1FE0 +ENDCHAR +STARTCHAR uni01F9EC +ENCODING 129516 +BBX 8 15 4 -2 +BITMAP +81 +FF +81 +66 +18 +66 +81 +FF +81 +66 +18 +66 +81 +FF +81 +ENDCHAR +STARTCHAR uni01F9ED +ENCODING 129517 +BBX 13 13 2 0 +BITMAP +0F80 +3260 +6230 +50D0 +81C8 +8788 +EF38 +8B08 +9608 +5850 +6230 +3260 +0F80 +ENDCHAR +STARTCHAR uni01F9EE +ENCODING 129518 +BBX 14 15 1 -2 +BITMAP +FFFC +8004 +F02C +FFFC +F02C +8004 +D83C +FFFC +D83C +8004 +E85C +FFFC +E85C +8004 +FFFC +ENDCHAR +STARTCHAR uni01F9EF +ENCODING 129519 +BBX 13 11 2 0 +BITMAP +1FF8 +32C0 +63A0 +67D0 +6440 +6440 +6440 +6440 +F440 +F440 +07C0 +ENDCHAR +STARTCHAR uni01F9F0 +ENCODING 129520 +BBX 14 12 1 0 +BITMAP +07C0 +0820 +1FFC +2824 +400C +FFF4 +8614 +FFF4 +8614 +8014 +8018 +FFF0 +ENDCHAR +STARTCHAR uni01F9F1 +ENCODING 129521 +BBX 14 7 1 0 +BITMAP +3FFC +400C +FFF4 +8214 +9094 +C418 +FFF0 +ENDCHAR +STARTCHAR uni01F9F2 +ENCODING 129522 +BBX 10 12 3 0 +BITMAP +1E00 +3F00 +7F80 +7380 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +F3C0 +5280 +7380 +ENDCHAR +STARTCHAR uni01F9F3 +ENCODING 129523 +BBX 7 14 4 -1 +BITMAP +38 +28 +28 +28 +FE +FE +FE +FE +FE +FE +FE +FE +FE +44 +ENDCHAR +STARTCHAR uni01F9F4 +ENCODING 129524 +BBX 7 14 4 -1 +BITMAP +38 +38 +38 +44 +82 +FE +82 +FE +FE +C6 +FE +FE +82 +7C +ENDCHAR +STARTCHAR uni01F9F5 +ENCODING 129525 +BBX 14 11 1 0 +BITMAP +FFC0 +3F00 +3F80 +3F40 +3F40 +3F20 +3F20 +3F20 +3F20 +3F10 +FFCC +ENDCHAR +STARTCHAR uni01F9F6 +ENCODING 129526 +BBX 15 13 1 0 +BITMAP +0F80 +1540 +2AA0 +7D50 +42B0 +FFC8 +80A8 +FFF8 +5570 +6AB0 +3570 +1AC8 +0F86 +ENDCHAR +STARTCHAR uni01F9F7 +ENCODING 129527 +BBX 9 14 2 -1 +BITMAP +0F00 +1980 +1980 +1F80 +9F80 +8080 +4080 +4080 +2080 +2080 +1680 +1980 +1080 +0F00 +ENDCHAR +STARTCHAR uni01F9F8 +ENCODING 129528 +BBX 15 13 0 0 +BITMAP +3018 +4BA4 +4C64 +3018 +1450 +1110 +0BA0 +F7DE +F01E +1010 +3018 +4824 +37D8 +ENDCHAR +STARTCHAR uni01F9F9 +ENCODING 129529 +BBX 9 13 3 -1 +BITMAP +1C00 +1400 +1400 +1400 +1400 +1400 +1400 +1C00 +7700 +AA80 +FF80 +FF80 +AA80 +ENDCHAR +STARTCHAR uni01F9FA +ENCODING 129530 +BBX 13 10 1 -1 +BITMAP +0600 +09C0 +1020 +FFF8 +4010 +5550 +4010 +5550 +4010 +7FF0 +ENDCHAR +STARTCHAR uni01F9FB +ENCODING 129531 +BBX 14 13 1 -1 +BITMAP +1FE0 +3010 +4808 +8408 +B408 +B408 +8408 +4808 +3408 +0408 +0408 +0204 +03FC +ENDCHAR +STARTCHAR uni01F9FC +ENCODING 129532 +BBX 13 10 2 0 +BITMAP +7FE0 +8010 +8F10 +8010 +8010 +7FE0 +2010 +5228 +2510 +0200 +ENDCHAR +STARTCHAR uni01F9FD +ENCODING 129533 +BBX 12 9 2 -1 +BITMAP +1F80 +7260 +C450 +9110 +E470 +9F90 +A2B0 +6860 +1F80 +ENDCHAR +STARTCHAR uni01F9FE +ENCODING 129534 +BBX 9 13 4 -1 +BITMAP +FF80 +FF80 +FF80 +8080 +B280 +8080 +B680 +8080 +B680 +8080 +AE80 +8080 +FF80 +ENDCHAR +STARTCHAR uni01F9FF +ENCODING 129535 +BBX 14 13 1 0 +BITMAP +0FC0 +1FE0 +3030 +6CD8 +C30C +DFEC +C78C +DFEC +C30C +6CD8 +3030 +1FE0 +0FC0 +ENDCHAR +STARTCHAR uni01FA60 +ENCODING 129632 +BBX 16 16 0 -2 +BITMAP +3FFC +4002 +9041 +BC41 +A5F9 +A549 +BD49 +A149 +BD49 +A549 +A559 +BC41 +A441 +8001 +4002 +3FFC +ENDCHAR +STARTCHAR uni01FA61 +ENCODING 129633 +BBX 16 16 0 -2 +BITMAP +3FFC +4002 +8441 +8441 +8841 +8841 +9BF9 +A841 +8841 +8841 +8841 +8841 +89F1 +8001 +4002 +3FFC +ENDCHAR +STARTCHAR uni01FA62 +ENCODING 129634 +BBX 16 16 0 -2 +BITMAP +3FFC +4002 +84F9 +8489 +9F89 +84F9 +8489 +8E89 +95F9 +A489 +8489 +84F9 +8489 +8001 +4002 +3FFC +ENDCHAR +STARTCHAR uni01FA63 +ENCODING 129635 +BBX 16 16 0 -2 +BITMAP +3FFC +4002 +8FF1 +8901 +8FE1 +8901 +8FE1 +8901 +8FF9 +8009 +9549 +92A9 +A2B1 +8001 +4002 +3FFC +ENDCHAR +STARTCHAR uni01FA64 +ENCODING 129636 +BBX 16 16 0 -2 +BITMAP +3FFC +4002 +8101 +9FF1 +8101 +8FE1 +8921 +8FE1 +8921 +8FE1 +8101 +BFF9 +8101 +8101 +4002 +3FFC +ENDCHAR +STARTCHAR uni01FA65 +ENCODING 129637 +BBX 16 16 0 -2 +BITMAP +3FFC +4002 +8901 +89F9 +8B09 +ADE9 +AB29 +A929 +89E9 +8D09 +9331 +9109 +A0F9 +8001 +4002 +3FFC +ENDCHAR +STARTCHAR uni01FA66 +ENCODING 129638 +BBX 16 16 0 -2 +BITMAP +3FFC +4002 +8061 +8F81 +8801 +8FF9 +8841 +8841 +8841 +BFF9 +8441 +8821 +B019 +8001 +4002 +3FFC +ENDCHAR +STARTCHAR uni01FA67 +ENCODING 129639 +BBX 14 14 1 -1 +BITMAP +7FF8 +F77C +D60C +D55C +D6BC +875C +F6DC +800C +D6DC +D75C +D7DC +B71C +FFFC +7FF8 +ENDCHAR +STARTCHAR uni01FA68 +ENCODING 129640 +BBX 14 14 1 -1 +BITMAP +7FF8 +FDFC +FDFC +FDFC +FDFC +800C +FDFC +FDFC +FDFC +FDFC +FDFC +C01C +FFFC +7FF8 +ENDCHAR +STARTCHAR uni01FA69 +ENCODING 129641 +BBX 14 14 1 -1 +BITMAP +7FF8 +F07C +EEFC +C01C +ADDC +E01C +F5DC +C8BC +F67C +CCBC +F2CC +8CFC +FFFC +7FF8 +ENDCHAR +STARTCHAR uni01FA6A +ENCODING 129642 +BBX 14 14 1 -1 +BITMAP +7FF8 +E01C +EDFC +E03C +EDFC +E03C +EDFC +E00C +FFEC +D56C +DAAC +BA9C +FFFC +7FF8 +ENDCHAR +STARTCHAR uni01FA6B +ENCODING 129643 +BBX 14 14 1 -1 +BITMAP +7FF8 +FDFC +C01C +FDFC +E03C +EDBC +E03C +EDBC +E03C +FDFC +800C +FDFC +FDFC +7FF8 +ENDCHAR +STARTCHAR uni01FA6C +ENCODING 129644 +BBX 14 14 1 -1 +BITMAP +7FF8 +FEFC +820C +EDEC +EBEC +C42C +95AC +D42C +D5DC +C5EC +D5EC +FE0C +FFFC +7FF8 +ENDCHAR +STARTCHAR uni01FA6D +ENCODING 129645 +BBX 14 14 1 -1 +BITMAP +7FF8 +FDFC +C01C +F77C +F77C +EABC +DDDC +FDFC +800C +FDFC +FDFC +FDFC +FFFC +7FF8 +ENDCHAR +STARTCHAR uni02000B +ENCODING 131083 +BBX 15 15 1 -1 +BITMAP +0100 +0110 +0108 +FFFE +0100 +1100 +1100 +0900 +0900 +0600 +0200 +0500 +08C0 +3030 +C00E +ENDCHAR +STARTCHAR uni020089 +ENCODING 131209 +BBX 14 8 1 3 +BITMAP +0800 +0800 +0800 +1000 +1FFC +2000 +4000 +8000 +ENDCHAR +STARTCHAR uni0200A2 +ENCODING 131234 +BBX 15 15 1 -1 +BITMAP +0030 +00C0 +1F00 +1018 +1060 +11C0 +1F44 +1148 +1170 +1120 +2120 +2110 +4108 +8106 +0100 +ENDCHAR +STARTCHAR uni0200A4 +ENCODING 131236 +BBX 10 15 4 -1 +BITMAP +0800 +1000 +FF80 +8080 +8080 +8080 +FF80 +8000 +8000 +FFC0 +8040 +8040 +8040 +8040 +FFC0 +ENDCHAR +STARTCHAR uni0201A2 +ENCODING 131490 +BBX 15 8 1 3 +BITMAP +0100 +0100 +0280 +0440 +0820 +1010 +2008 +C006 +ENDCHAR +STARTCHAR uni020213 +ENCODING 131603 +BBX 15 15 1 -1 +BITMAP +1000 +1FFE +1040 +2040 +27FC +6444 +A444 +2554 +2554 +2554 +2554 +25F4 +2404 +2404 +241C +ENDCHAR +STARTCHAR uni02032B +ENCODING 131883 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1444 +27FC +2444 +67FC +A248 +2FFE +2248 +2248 +27FC +2040 +27FC +2040 +2040 +ENDCHAR +STARTCHAR uni020371 +ENCODING 131953 +BBX 15 15 1 -1 +BITMAP +1210 +1220 +17FC +2C40 +27F8 +6440 +A7F8 +2440 +27FC +2040 +2FFE +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni020381 +ENCODING 131969 +BBX 15 15 1 -1 +BITMAP +1000 +17FC +1444 +2654 +2564 +6444 +A7FC +2040 +27FC +2040 +2FFE +2000 +2524 +2892 +2892 +ENDCHAR +STARTCHAR uni0203F9 +ENCODING 132089 +BBX 15 15 1 -1 +BITMAP +17FE +1090 +17FE +2492 +27FE +6000 +A7FE +2402 +25FA +2442 +24F2 +2452 +25FA +2402 +27FE +ENDCHAR +STARTCHAR uni02044A +ENCODING 132170 +BBX 15 15 1 -1 +BITMAP +1484 +1248 +1FFE +1810 +2B90 +2910 +6FDE +AA94 +2BA4 +2A94 +2B94 +2A88 +2B98 +3694 +20A2 +ENDCHAR +STARTCHAR uni020509 +ENCODING 132361 +BBX 15 13 1 0 +BITMAP +0100 +0920 +0910 +1108 +2104 +5FF4 +0280 +0440 +FFFE +0820 +1010 +2008 +C006 +ENDCHAR +STARTCHAR uni0205D6 +ENCODING 132566 +BBX 15 15 1 -1 +BITMAP +0110 +8110 +4208 +2444 +0040 +00A0 +0110 +0208 +1406 +13FC +2204 +2204 +4204 +4204 +83FC +ENDCHAR +STARTCHAR uni020628 +ENCODING 132648 +BBX 15 14 1 -1 +BITMAP +3FF0 +2010 +2010 +2010 +2010 +2010 +2010 +2010 +2010 +2010 +2008 +400A +400A +8004 +ENDCHAR +STARTCHAR uni02074F +ENCODING 132943 +BBX 14 15 1 -1 +BITMAP +0800 +08FC +1424 +2224 +4124 +BEA4 +0824 +7F24 +4924 +4924 +7F24 +0844 +1444 +2284 +C118 +ENDCHAR +STARTCHAR uni020807 +ENCODING 133127 +BBX 14 15 1 -1 +BITMAP +1004 +6784 +42A4 +52A4 +74A4 +D5A4 +0024 +FFA4 +1224 +73A4 +40A4 +7384 +1204 +1784 +F81C +ENDCHAR +STARTCHAR uni02083A +ENCODING 133178 +BBX 15 15 1 -1 +BITMAP +0040 +7C40 +0040 +01F8 +0048 +FC48 +2848 +2848 +2848 +2888 +2888 +2908 +4A32 +4802 +87FE +ENDCHAR +STARTCHAR uni0208B9 +ENCODING 133305 +BBX 15 15 1 -1 +BITMAP +0420 +0420 +7FA0 +4A20 +5FFE +4A22 +7FA2 +4422 +5F22 +5522 +5F22 +5522 +9F42 +8A42 +319C +ENDCHAR +STARTCHAR uni02097C +ENCODING 133500 +BBX 15 15 1 -1 +BITMAP +0020 +0820 +0820 +0820 +7F20 +0820 +0820 +0820 +003E +07E0 +F820 +0020 +0020 +0020 +0020 +ENDCHAR +STARTCHAR uni02099D +ENCODING 133533 +BBX 13 15 2 -1 +BITMAP +0200 +0200 +7FF0 +0200 +3FE0 +2020 +3FE0 +2020 +2020 +3FE0 +0200 +FFF8 +0200 +0200 +0200 +ENDCHAR +STARTCHAR uni020AD3 +ENCODING 133843 +BBX 15 13 1 0 +BITMAP +0100 +0100 +0100 +0100 +FFFE +0200 +0200 +0240 +0420 +0410 +0838 +13C4 +7C04 +ENDCHAR +STARTCHAR uni020B1D +ENCODING 133917 +BBX 10 14 4 -1 +BITMAP +FF80 +8080 +8080 +8780 +8000 +FF80 +A080 +A080 +9100 +9100 +8A00 +8400 +8B00 +B0C0 +ENDCHAR +STARTCHAR uni020B9F +ENCODING 134047 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +0100 +F900 +8900 +891C +89E0 +8F00 +8900 +8900 +8900 +F902 +0102 +0102 +00FE +ENDCHAR +STARTCHAR uni020D45 +ENCODING 134469 +BBX 15 15 1 -1 +BITMAP +0110 +0110 +FFFE +9110 +9000 +9120 +9120 +9224 +9238 +9620 +9A20 +F220 +0222 +0222 +021E +ENDCHAR +STARTCHAR uni020DE1 +ENCODING 134625 +BBX 15 15 1 -1 +BITMAP +3FF8 +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +06C0 +1830 +EFEE +0000 +1FF0 +1010 +1010 +1FF0 +ENDCHAR +STARTCHAR uni020E64 +ENCODING 134756 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +F7FC +9040 +9FFE +9040 +97FC +9040 +9040 +9FFE +9080 +FA48 +0A44 +110A +20F8 +ENDCHAR +STARTCHAR uni020E6D +ENCODING 134765 +BBX 15 14 1 -1 +BITMAP +0FFE +F004 +93E4 +9224 +93EC +9000 +9FFE +9004 +93E4 +9224 +F224 +03E4 +0004 +001C +ENDCHAR +STARTCHAR uni020E95 +ENCODING 134805 +BBX 15 15 1 -1 +BITMAP +0180 +067E +F412 +9492 +94A2 +97A2 +9C4C +9000 +93FC +9244 +9244 +F3FC +0244 +0244 +03FC +ENDCHAR +STARTCHAR uni020F5F +ENCODING 135007 +BBX 15 15 1 -1 +BITMAP +01C4 +0848 +F4A2 +9114 +9208 +9C44 +9042 +93F8 +9248 +9248 +93F8 +F040 +0048 +0078 +0784 +ENDCHAR +STARTCHAR uni021201 +ENCODING 135681 +BBX 13 15 2 -1 +BITMAP +FFF8 +8208 +9FC8 +9048 +9FC8 +9048 +9FC8 +8008 +BFE8 +8208 +9FC8 +8208 +BFE8 +8008 +FFF8 +ENDCHAR +STARTCHAR uni02123D +ENCODING 135741 +BBX 15 14 1 0 +BITMAP +0120 +0110 +0108 +0100 +0100 +7FFC +0100 +0100 +0100 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni021255 +ENCODING 135765 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +2080 +F7F0 +2090 +2090 +2490 +2290 +2190 +3090 +C150 +0210 +0412 +180E +ENDCHAR +STARTCHAR uni021274 +ENCODING 135796 +BBX 15 15 1 -1 +BITMAP +201C +23E0 +2200 +2200 +FBFE +2202 +2202 +2202 +23FE +2200 +3A00 +C200 +0400 +0400 +0800 +ENDCHAR +STARTCHAR uni02127B +ENCODING 135803 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +27F0 +2090 +F090 +2112 +2212 +240E +2040 +2040 +37FC +C040 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni0212D7 +ENCODING 135895 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +20A0 +2110 +FA08 +2406 +23F8 +2000 +2000 +27FE +3880 +C088 +0104 +023A +0FC2 +ENDCHAR +STARTCHAR uni0212E4 +ENCODING 135908 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2204 +2204 +FA04 +23FC +2208 +2208 +2288 +2464 +3412 +C900 +0080 +0060 +0018 +ENDCHAR +STARTCHAR uni0212FD +ENCODING 135933 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +23FC +2040 +F040 +2040 +27FE +2090 +2294 +2294 +3492 +C512 +0112 +0210 +0470 +ENDCHAR +STARTCHAR uni02131B +ENCODING 135963 +BBX 15 14 1 -1 +BITMAP +FEFC +9244 +9244 +FE28 +9210 +9218 +9224 +FEC2 +0100 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni021336 +ENCODING 135990 +BBX 15 15 1 -1 +BITMAP +2210 +2110 +2120 +2000 +F7FC +2120 +2120 +2924 +2924 +2528 +3528 +C528 +0120 +0120 +0FFE +ENDCHAR +STARTCHAR uni021344 +ENCODING 136004 +BBX 15 15 1 -1 +BITMAP +2000 +27FC +2404 +2404 +F7FC +2420 +2420 +27FE +2420 +2420 +35FC +C904 +0904 +1104 +01FC +ENDCHAR +STARTCHAR uni0213C4 +ENCODING 136132 +BBX 15 14 1 -1 +BITMAP +7CF8 +0088 +00F8 +FE88 +10F8 +1088 +5488 +93FE +9000 +0100 +3FF8 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni02146D +ENCODING 136301 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2318 +2DF6 +F000 +27FC +2554 +24E4 +27FC +2000 +33F8 +C208 +03F8 +0208 +03F8 +ENDCHAR +STARTCHAR uni02146E +ENCODING 136302 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2404 +F514 +23F8 +2110 +23F8 +2110 +2FFE +3108 +C644 +0BFA +0040 +07FC +ENDCHAR +STARTCHAR uni0215D7 +ENCODING 136663 +BBX 15 11 1 1 +BITMAP +0100 +0100 +7FFC +0100 +3FF8 +0280 +FFFE +0440 +0820 +3018 +C006 +ENDCHAR +STARTCHAR uni021647 +ENCODING 136775 +BBX 15 15 1 -1 +BITMAP +0020 +1C20 +F020 +11FC +FE24 +5424 +5424 +FE24 +55FE +5450 +FE50 +1088 +1088 +1D04 +E202 +ENDCHAR +STARTCHAR uni0216B4 +ENCODING 136884 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0200 +0200 +FFFE +0410 +0810 +1020 +3E40 +01C0 +0630 +7808 +ENDCHAR +STARTCHAR uni021706 +ENCODING 136966 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +1044 +FC44 +2484 +2518 +2400 +45FC +4924 +4924 +F1FC +1900 +2500 +4102 +80FE +ENDCHAR +STARTCHAR uni021742 +ENCODING 137026 +BBX 15 15 1 -1 +BITMAP +1090 +1290 +1290 +FA90 +2A90 +2BFE +2890 +4890 +4F90 +4A90 +F290 +1A90 +2290 +4490 +80BC +ENDCHAR +STARTCHAR uni0218BD +ENCODING 137405 +BBX 15 15 1 -1 +BITMAP +1000 +13FC +1040 +17FE +FC42 +255A +2442 +4558 +4800 +4BFC +F244 +1BFC +2644 +4244 +83FC +ENDCHAR +STARTCHAR uni0219C3 +ENCODING 137667 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4004 +4004 +1FF0 +0000 +0000 +FFFE +0100 +0100 +0100 +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni021C56 +ENCODING 138326 +BBX 15 14 1 -1 +BITMAP +3FFC +2004 +3FFC +2280 +2280 +27F8 +2880 +2080 +3FFE +22A0 +42A0 +4490 +988C +0080 +ENDCHAR +STARTCHAR uni021D2D +ENCODING 138541 +BBX 15 15 1 -1 +BITMAP +2000 +23F8 +2008 +2010 +A820 +A840 +A880 +A900 +A900 +AA00 +AA00 +FA02 +0202 +0102 +00FE +ENDCHAR +STARTCHAR uni021D45 +ENCODING 138565 +BBX 13 15 1 -1 +BITMAP +0100 +2108 +2108 +2108 +3FF8 +0000 +2008 +2108 +2108 +2108 +2108 +2108 +4108 +4108 +8008 +ENDCHAR +STARTCHAR uni021D62 +ENCODING 138594 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0200 +0200 +FFFE +0200 +07F0 +0C10 +3410 +C220 +01C0 +0370 +3C0E +ENDCHAR +STARTCHAR uni021D78 +ENCODING 138616 +BBX 15 15 1 -1 +BITMAP +2000 +21FC +2104 +2104 +A904 +A904 +A9FC +A910 +A910 +A910 +A910 +FA08 +0208 +0404 +0802 +ENDCHAR +STARTCHAR uni021D92 +ENCODING 138642 +BBX 15 15 1 -1 +BITMAP +2090 +2090 +23FC +2094 +A894 +ABFC +AA90 +AA90 +ABFE +A892 +A892 +F912 +0116 +0210 +0410 +ENDCHAR +STARTCHAR uni021D9C +ENCODING 138652 +BBX 15 15 1 -1 +BITMAP +2038 +23C0 +2200 +2200 +ABFE +AA20 +AA20 +AA20 +AAE0 +AA38 +AA26 +FC20 +0420 +0820 +0020 +ENDCHAR +STARTCHAR uni021DA1 +ENCODING 138657 +BBX 15 15 1 -1 +BITMAP +2040 +2444 +2244 +2248 +A840 +AFFC +A840 +A840 +A840 +AFFE +A840 +F840 +0040 +0040 +0040 +ENDCHAR +STARTCHAR uni021DB7 +ENCODING 138679 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +1008 +1E08 +22FE +2248 +6248 +9448 +09FE +1008 +2008 +C008 +ENDCHAR +STARTCHAR uni021DE0 +ENCODING 138720 +BBX 15 15 1 -1 +BITMAP +0100 +2108 +2108 +3FF8 +0000 +21F0 +2110 +FA1E +2400 +23F8 +3908 +E090 +2060 +20D8 +6706 +ENDCHAR +STARTCHAR uni021E33 +ENCODING 138803 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +21F8 +2040 +A948 +A908 +AFFE +A908 +A908 +A800 +ABFC +F890 +0090 +0112 +060E +ENDCHAR +STARTCHAR uni021E34 +ENCODING 138804 +BBX 15 15 1 -1 +BITMAP +2040 +20A0 +2110 +2208 +AC06 +ABF8 +A840 +ABF8 +AA48 +AA48 +ABF8 +F8A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni021F1E +ENCODING 139038 +BBX 15 15 1 -1 +BITMAP +0100 +4104 +7FFC +0800 +0900 +7F7C +0944 +0A44 +FFC8 +1044 +3F42 +E142 +3F42 +214C +3F40 +ENDCHAR +STARTCHAR uni021F76 +ENCODING 139126 +BBX 15 15 1 -1 +BITMAP +2020 +2040 +21F8 +2108 +A9F8 +A908 +ABFC +AA44 +ABFC +AA44 +ABFC +F890 +07FE +0110 +0610 +ENDCHAR +STARTCHAR uni021FFA +ENCODING 139258 +BBX 12 15 2 -1 +BITMAP +2220 +4440 +8880 +4440 +2A20 +1000 +FFF0 +8090 +8890 +8510 +8210 +8D10 +B090 +8010 +FFF0 +ENDCHAR +STARTCHAR uni02217B +ENCODING 139643 +BBX 15 15 1 -1 +BITMAP +2252 +2294 +27DE +FAB4 +ABDE +AA94 +ABDE +AA94 +ABDE +A800 +BFFC +2108 +20F0 +2198 +2606 +ENDCHAR +STARTCHAR uni022218 +ENCODING 139800 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFE +4240 +4240 +7FFC +4244 +4244 +7FFC +4240 +4660 +8A50 +9248 +2244 +0240 +ENDCHAR +STARTCHAR uni02231E +ENCODING 140062 +BBX 15 14 1 -1 +BITMAP +FBFC +1204 +2204 +42F4 +F294 +1294 +12F4 +9284 +9294 +5294 +2274 +520C +4800 +87FE +ENDCHAR +STARTCHAR uni0223AD +ENCODING 140205 +BBX 15 15 1 -1 +BITMAP +0020 +F820 +0820 +09FE +0922 +7922 +4122 +4122 +7922 +0922 +0922 +0926 +0820 +0820 +7020 +ENDCHAR +STARTCHAR uni0226F3 +ENCODING 141043 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +FFFE +0100 +3FF8 +2448 +2448 +3FF8 +0000 +7FFC +0100 +2888 +2804 +4412 +83F0 +ENDCHAR +STARTCHAR uni02285B +ENCODING 141403 +BBX 15 15 1 -1 +BITMAP +4110 +2FFE +0110 +8FFE +4040 +27FC +0444 +1554 +2554 +45F4 +840C +0100 +2884 +4812 +87F0 +ENDCHAR +STARTCHAR uni0228AB +ENCODING 141483 +BBX 15 15 1 -1 +BITMAP +1040 +17FC +F840 +13F8 +1090 +37FE +3908 +53FC +950A +11F8 +1108 +11F8 +4104 +4892 +87F0 +ENDCHAR +STARTCHAR uni02298F +ENCODING 141711 +BBX 15 15 1 -1 +BITMAP +0840 +0848 +7F44 +0844 +0840 +FFFE +0040 +0044 +0044 +0028 +0028 +0010 +0032 +00CA +0704 +ENDCHAR +STARTCHAR uni022AB8 +ENCODING 142008 +BBX 15 15 1 -1 +BITMAP +1000 +1EFC +2284 +D29C +0C80 +0882 +307E +EFE0 +0100 +3FF8 +0100 +FFFE +0100 +0100 +0700 +ENDCHAR +STARTCHAR uni022B46 +ENCODING 142150 +BBX 15 15 1 -1 +BITMAP +2070 +27C0 +2040 +27FE +F150 +2248 +2444 +2802 +33F0 +E090 +209C +2104 +2104 +2204 +6438 +ENDCHAR +STARTCHAR uni022B4F +ENCODING 142159 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2040 +F3F8 +2040 +27FC +2080 +3088 +EFFE +2108 +2248 +2C28 +2008 +6038 +ENDCHAR +STARTCHAR uni022B50 +ENCODING 142160 +BBX 15 15 1 -1 +BITMAP +2484 +2244 +2248 +2010 +F7FE +2402 +2442 +2040 +37FC +E084 +2084 +2104 +2104 +2204 +6438 +ENDCHAR +STARTCHAR uni022BA6 +ENCODING 142246 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +20A0 +2318 +FDF6 +2040 +27FC +2444 +3444 +E7FC +2040 +20A0 +2110 +2208 +6C06 +ENDCHAR +STARTCHAR uni022C1D +ENCODING 142365 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2FFE +2110 +F158 +2044 +27FE +2420 +3424 +E424 +2418 +2810 +282A +30CA +6304 +ENDCHAR +STARTCHAR uni022C24 +ENCODING 142372 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FC +2208 +F108 +2110 +2FFE +2004 +33E4 +E224 +2224 +2224 +23E4 +2004 +601C +ENDCHAR +STARTCHAR uni022DE1 +ENCODING 142817 +BBX 15 15 1 -1 +BITMAP +2000 +2FBE +2208 +2FBE +FAAA +2AAA +2DB6 +28A2 +38A6 +E040 +2FFE +2150 +2248 +2C46 +6040 +ENDCHAR +STARTCHAR uni0231B6 +ENCODING 143798 +BBX 15 15 1 -1 +BITMAP +1000 +1E7C +1244 +2244 +4444 +FF44 +497C +4944 +4944 +7F44 +1444 +147C +2400 +4402 +83FE +ENDCHAR +STARTCHAR uni0231C3 +ENCODING 143811 +BBX 15 15 1 -1 +BITMAP +1110 +0910 +0920 +3FF8 +0280 +0280 +FFFE +0440 +0820 +39F8 +C90E +09F8 +0908 +0908 +09F8 +ENDCHAR +STARTCHAR uni0231C4 +ENCODING 143812 +BBX 15 14 1 -1 +BITMAP +3FF8 +2008 +3FF8 +2008 +3FF8 +1018 +11E0 +FD00 +11FE +1110 +1D10 +F110 +1210 +3010 +ENDCHAR +STARTCHAR uni0231F5 +ENCODING 143861 +BBX 14 14 1 -1 +BITMAP +3FF0 +2010 +3FF0 +2010 +3FF0 +0000 +F8FC +8884 +88FC +F884 +88FC +8884 +F904 +021C +ENDCHAR +STARTCHAR uni023372 +ENCODING 144242 +BBX 15 14 1 -1 +BITMAP +7FFC +4880 +4BF8 +4908 +7908 +4FFE +4840 +4840 +7FFE +4888 +4910 +4BE0 +8850 +9B88 +ENDCHAR +STARTCHAR uni0233D0 +ENCODING 144336 +BBX 15 15 1 -1 +BITMAP +1040 +1040 +1040 +FCFE +1082 +1102 +3A02 +3584 +3044 +5028 +5010 +9020 +1040 +1180 +1600 +ENDCHAR +STARTCHAR uni0233D2 +ENCODING 144338 +BBX 15 15 1 -1 +BITMAP +2080 +2080 +2080 +F880 +27F0 +2090 +7090 +6A90 +6A90 +A190 +2090 +2150 +2112 +2212 +240E +ENDCHAR +STARTCHAR uni0233D3 +ENCODING 144339 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2080 +F880 +27FE +2100 +7100 +6900 +63FC +A204 +2004 +2004 +2008 +2008 +2070 +ENDCHAR +STARTCHAR uni0233D5 +ENCODING 144341 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +2040 +FFFE +2040 +2040 +7248 +6A48 +6A48 +A248 +244A +244A +2846 +2040 +2040 +ENDCHAR +STARTCHAR uni0233DA +ENCODING 144346 +BBX 15 15 1 -1 +BITMAP +100C +11F0 +1110 +FD10 +1110 +1110 +31FE +3910 +3510 +5110 +5110 +9108 +110A +11CA +1704 +ENDCHAR +STARTCHAR uni0233DF +ENCODING 144351 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FDFE +1020 +1020 +54A8 +54A8 +54A8 +54A8 +952A +952A +9226 +1420 +1020 +ENDCHAR +STARTCHAR uni0233E4 +ENCODING 144356 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +2208 +FA08 +2404 +2512 +7110 +6910 +60A0 +A0A0 +A040 +2040 +20A0 +2318 +2C06 +ENDCHAR +STARTCHAR uni02344A +ENCODING 144458 +BBX 15 15 1 -1 +BITMAP +1080 +1080 +1080 +FFFE +1080 +1090 +3310 +3A10 +367C +5610 +5A10 +9210 +1210 +1210 +12FE +ENDCHAR +STARTCHAR uni02344B +ENCODING 144459 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +27FE +FC02 +2412 +2010 +77FE +6810 +6810 +A210 +A110 +2090 +2010 +2010 +2070 +ENDCHAR +STARTCHAR uni023451 +ENCODING 144465 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FE02 +1202 +11FC +3808 +3430 +3420 +53FE +5020 +9020 +1020 +1020 +1060 +ENDCHAR +STARTCHAR uni023465 +ENCODING 144485 +BBX 15 15 1 -1 +BITMAP +1044 +1044 +13F8 +FC48 +1048 +1050 +37FE +3840 +3480 +51FC +5620 +9020 +1020 +1020 +10E0 +ENDCHAR +STARTCHAR uni0234E4 +ENCODING 144612 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +11FC +FC20 +1124 +1104 +33FE +3904 +3504 +5000 +53FC +9090 +1092 +1112 +160E +ENDCHAR +STARTCHAR uni02355A +ENCODING 144730 +BBX 15 15 1 -1 +BITMAP +1110 +1110 +17FE +F910 +1138 +1024 +33FE +3A20 +3624 +5224 +5228 +9210 +1232 +144A +1584 +ENDCHAR +STARTCHAR uni023594 +ENCODING 144788 +BBX 16 15 0 -1 +BITMAP +13FF +1200 +12FE +FE82 +12FE +1282 +32FE +3A00 +36FE +520C +5210 +17FF +1410 +1810 +1070 +ENDCHAR +STARTCHAR uni0235C4 +ENCODING 144836 +BBX 15 15 1 -1 +BITMAP +1088 +1088 +13FE +FC88 +1020 +13FE +3900 +3500 +30FC +5000 +5148 +9148 +1148 +124A +1446 +ENDCHAR +STARTCHAR uni023638 +ENCODING 144952 +BBX 15 15 1 -1 +BITMAP +2000 +23FC +2244 +FBFC +2244 +2244 +73FC +6840 +63FC +A040 +A7FE +2000 +22A4 +2492 +2492 +ENDCHAR +STARTCHAR uni023639 +ENCODING 144953 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +13FE +FE02 +12FA +1020 +39FC +3524 +3524 +51FC +5124 +9124 +11FC +1088 +1306 +ENDCHAR +STARTCHAR uni02363A +ENCODING 144954 +BBX 15 15 1 -1 +BITMAP +1100 +1100 +11FE +FA88 +14F8 +1088 +30F8 +3888 +3488 +53FE +5202 +92FA +128A +12FA +1206 +ENDCHAR +STARTCHAR uni023647 +ENCODING 144967 +BBX 15 15 1 -1 +BITMAP +2108 +2110 +27FE +FA20 +23FC +2220 +23FC +3A20 +C3FE +0100 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni02370C +ENCODING 145164 +BBX 15 15 1 -1 +BITMAP +20C0 +231C +2204 +FBDC +2204 +23FC +2000 +7244 +6B64 +AAD4 +A364 +22D4 +2244 +23F4 +2646 +ENDCHAR +STARTCHAR uni02371C +ENCODING 145180 +BBX 15 15 1 -1 +BITMAP +2110 +2110 +27FE +F910 +23FC +2244 +73FC +6A44 +6BFC +A040 +A7FE +2442 +2452 +246A +258E +ENDCHAR +STARTCHAR uni02373F +ENCODING 145215 +BBX 15 15 1 -1 +BITMAP +2110 +27FE +2110 +FA48 +27FE +2248 +7278 +6A00 +6BFC +A040 +A7FC +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni023763 +ENCODING 145251 +BBX 15 15 1 -1 +BITMAP +0100 +7FFE +0540 +1930 +7FFC +C446 +7FFC +4208 +7E08 +42FE +7E08 +4048 +7E28 +4008 +7E18 +ENDCHAR +STARTCHAR uni023764 +ENCODING 145252 +BBX 15 15 1 -1 +BITMAP +2040 +2244 +2244 +FBFC +2448 +2250 +62FC +7190 +68FC +AE90 +A2FC +2290 +22FC +2500 +28FE +ENDCHAR +STARTCHAR uni0237E7 +ENCODING 145383 +BBX 15 15 1 -1 +BITMAP +1410 +1210 +117C +FC54 +127C +1110 +38FE +3744 +317C +5144 +517C +9144 +117C +1282 +147E +ENDCHAR +STARTCHAR uni0237FF +ENCODING 145407 +BBX 15 15 1 -1 +BITMAP +2090 +27FE +2090 +F840 +25FA +230C +61F8 +730C +6DFA +A040 +A7FE +2150 +2248 +2C46 +2040 +ENDCHAR +STARTCHAR uni023824 +ENCODING 145444 +BBX 15 15 1 -1 +BITMAP +2400 +247C +2FC4 +F27C +2244 +2FC4 +64FC +7544 +6FC4 +B97C +AFA8 +2928 +2FAA +292A +2FC6 +ENDCHAR +STARTCHAR uni02383D +ENCODING 145469 +BBX 15 15 1 -1 +BITMAP +27FE +2090 +27FE +FC92 +24F2 +2280 +77DE +6A92 +6B9E +A7D2 +A552 +27DE +2112 +27D2 +2126 +ENDCHAR +STARTCHAR uni023A98 +ENCODING 146072 +BBX 15 15 1 -1 +BITMAP +1000 +20F8 +FC88 +8488 +FC88 +850E +8400 +FDFC +0084 +8084 +8C48 +F050 +8030 +8448 +7D86 +ENDCHAR +STARTCHAR uni023C7F +ENCODING 146559 +BBX 15 15 1 -1 +BITMAP +4000 +23C0 +1040 +0040 +8040 +4040 +2040 +0040 +0040 +10A0 +10A0 +2110 +2208 +4404 +8802 +ENDCHAR +STARTCHAR uni023CFE +ENCODING 146686 +BBX 15 15 1 -1 +BITMAP +1110 +0910 +0920 +3FF8 +0280 +0280 +FFFE +0820 +3118 +D916 +0720 +01C0 +0560 +1918 +6306 +ENDCHAR +STARTCHAR uni023D00 +ENCODING 146688 +BBX 15 15 1 -1 +BITMAP +4000 +27F8 +1088 +0088 +8108 +4208 +2430 +0000 +1FBE +1492 +2492 +2492 +48A2 +48A2 +934C +ENDCHAR +STARTCHAR uni023D0E +ENCODING 146702 +BBX 15 15 1 -1 +BITMAP +0820 +0440 +7FFC +0100 +3FF8 +0100 +FFFE +0000 +0100 +7D06 +0598 +0960 +3130 +C10E +0700 +ENDCHAR +STARTCHAR uni023D40 +ENCODING 146752 +BBX 15 15 1 -1 +BITMAP +4000 +23F8 +1208 +03F8 +8208 +4208 +23F8 +0000 +0000 +17FC +1040 +2040 +2040 +4040 +8FFE +ENDCHAR +STARTCHAR uni023DD3 +ENCODING 146899 +BBX 15 15 1 -1 +BITMAP +4180 +2E00 +123E +0222 +8FE2 +4222 +2222 +0722 +06A2 +1662 +1A22 +2A22 +3222 +423E +8200 +ENDCHAR +STARTCHAR uni023DF9 +ENCODING 146937 +BBX 15 15 1 -1 +BITMAP +4038 +27C0 +1080 +0080 +8FFE +4120 +2218 +0C46 +0044 +1748 +1168 +2150 +2248 +4446 +80C0 +ENDCHAR +STARTCHAR uni023DFA +ENCODING 146938 +BBX 15 15 1 -1 +BITMAP +4000 +2FBE +128A +0492 +89A6 +428A +2CB2 +0000 +03F8 +1108 +1108 +2090 +2060 +4198 +8606 +ENDCHAR +STARTCHAR uni023F7E +ENCODING 147326 +BBX 15 15 1 -1 +BITMAP +4040 +2040 +17FC +0110 +8FFE +4000 +23F8 +0208 +13F8 +1208 +23F8 +2208 +43F8 +4112 +8E0E +ENDCHAR +STARTCHAR uni024096 +ENCODING 147606 +BBX 15 15 1 -1 +BITMAP +4F82 +2884 +1F88 +08B0 +8F82 +4202 +3FC4 +0008 +0FB0 +0880 +2F82 +2202 +4A84 +5248 +8630 +ENDCHAR +STARTCHAR uni024103 +ENCODING 147715 +BBX 15 15 1 -1 +BITMAP +4FBE +28A2 +1FBE +08A2 +8FBE +4802 +2A1A +0962 +0822 +2CFA +2A22 +287A +494A +4A4A +8C7A +ENDCHAR +STARTCHAR uni0241C6 +ENCODING 147910 +BBX 15 15 1 -1 +BITMAP +1000 +11FE +1102 +1502 +5502 +55F2 +9112 +9112 +1112 +1112 +29F2 +2902 +4502 +4502 +81FE +ENDCHAR +STARTCHAR uni0241FE +ENCODING 147966 +BBX 15 12 1 1 +BITMAP +0820 +2924 +2AA4 +4928 +1450 +2288 +4104 +0000 +FFFE +8002 +8002 +8002 +ENDCHAR +STARTCHAR uni0243BC +ENCODING 148412 +BBX 15 15 1 -1 +BITMAP +0828 +FF24 +00FE +7E20 +4230 +7E50 +0A52 +2952 +C98E +0108 +1110 +6290 +0440 +1830 +E00E +ENDCHAR +STARTCHAR uni024629 +ENCODING 149033 +BBX 15 14 1 -1 +BITMAP +7EFC +0204 +2244 +1428 +0810 +3428 +C2C6 +1100 +1FF8 +2100 +0100 +7FFE +0100 +0100 +ENDCHAR +STARTCHAR uni0246A5 +ENCODING 149157 +BBX 15 15 1 -1 +BITMAP +1020 +1050 +2488 +4D04 +F2FA +0200 +11FC +5008 +7C08 +9010 +11FC +FF04 +1104 +1104 +11FC +ENDCHAR +STARTCHAR uni0247F1 +ENCODING 149489 +BBX 15 15 1 -1 +BITMAP +0900 +8900 +53FE +2400 +21FC +5104 +91FC +1104 +31FC +5080 +90FC +1704 +1088 +2070 +C78E +ENDCHAR +STARTCHAR uni024896 +ENCODING 149654 +BBX 15 15 1 -1 +BITMAP +0800 +89F0 +5110 +21F0 +2000 +57BC +94A4 +14A4 +37BC +5040 +9FFE +1150 +1248 +2C46 +C040 +ENDCHAR +STARTCHAR uni024A4D +ENCODING 150093 +BBX 15 15 1 -1 +BITMAP +0020 +EE20 +4420 +EEF8 +4420 +EE20 +1020 +2820 +45FC +BA20 +0050 +7E50 +0488 +0904 +1202 +ENDCHAR +STARTCHAR uni024B56 +ENCODING 150358 +BBX 15 14 1 -1 +BITMAP +FE7C +4040 +407C +4040 +7C7C +4440 +4440 +65FE +5440 +5448 +4494 +4DE2 +7402 +C3FE +ENDCHAR +STARTCHAR uni024B6F +ENCODING 150383 +BBX 15 15 1 -1 +BITMAP +0020 +FC40 +41FC +4104 +41FC +7D04 +45FC +4422 +67A4 +54B8 +54A8 +4524 +4E62 +7402 +C3FE +ENDCHAR +STARTCHAR uni024C16 +ENCODING 150550 +BBX 15 14 1 -1 +BITMAP +07F8 +FA08 +AA08 +AA08 +A910 +F910 +A910 +A8A0 +A8A0 +A840 +F8A0 +0110 +0208 +0C06 +ENDCHAR +STARTCHAR uni024D14 +ENCODING 150804 +BBX 12 14 3 -1 +BITMAP +7FE0 +0080 +0100 +0200 +2200 +2200 +23E0 +2200 +2200 +2200 +2200 +2270 +2780 +F800 +ENDCHAR +STARTCHAR uni024E0E +ENCODING 151054 +BBX 14 15 1 -1 +BITMAP +0100 +0100 +3FFC +A000 +67F0 +2410 +27F0 +2410 +67F0 +A200 +27FC +5C84 +4544 +87E4 +0018 +ENDCHAR +STARTCHAR uni024E37 +ENCODING 151095 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A108 +7FFE +2108 +2FF8 +2200 +67FC +BC04 +27FC +4080 +4FFC +8884 +088C +ENDCHAR +STARTCHAR uni024E6A +ENCODING 151146 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A000 +6FFE +2800 +28F8 +2888 +68F8 +A800 +2BDE +4A52 +4BDE +8800 +0FFE +ENDCHAR +STARTCHAR uni024E8B +ENCODING 151179 +BBX 15 15 1 -1 +BITMAP +0080 +0080 +3FFC +A210 +6218 +3FA4 +2242 +2F88 +6AB0 +AF84 +2A88 +4FB2 +4204 +9F88 +0270 +ENDCHAR +STARTCHAR uni02504A +ENCODING 151626 +BBX 15 15 1 -1 +BITMAP +0200 +0200 +FFFE +0200 +07F0 +0410 +0C20 +3240 +C180 +0660 +181E +3FF8 +2488 +2488 +FFFE +ENDCHAR +STARTCHAR uni025055 +ENCODING 151637 +BBX 15 14 1 -1 +BITMAP +1FF0 +1110 +1110 +1110 +1290 +1450 +1830 +1FF0 +0000 +3FF8 +2448 +2448 +2448 +FFFE +ENDCHAR +STARTCHAR uni025122 +ENCODING 151842 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +9040 +9040 +9FFE +F0E0 +90E0 +9150 +9150 +F248 +9248 +9444 +9842 +F040 +0040 +ENDCHAR +STARTCHAR uni0251A9 +ENCODING 151977 +BBX 15 14 1 -1 +BITMAP +F27C +9244 +9244 +9244 +F27C +9244 +9244 +9244 +F27C +9000 +9120 +9122 +F222 +0C1E +ENDCHAR +STARTCHAR uni0251CD +ENCODING 152013 +BBX 15 15 1 -1 +BITMAP +0040 +F040 +907E +9040 +97FC +F404 +97FC +9404 +9404 +F7FC +9040 +9FFE +9040 +F040 +0040 +ENDCHAR +STARTCHAR uni0251E5 +ENCODING 152037 +BBX 15 15 1 -1 +BITMAP +0040 +F0A0 +9110 +9208 +9DF6 +F040 +97FC +9444 +9444 +F7FC +9040 +90A0 +9110 +F208 +0C06 +ENDCHAR +STARTCHAR uni02521E +ENCODING 152094 +BBX 15 15 1 -1 +BITMAP +0110 +F110 +97FC +9110 +9110 +FFFE +9040 +97FC +9444 +F554 +9554 +9554 +95F4 +F404 +041C +ENDCHAR +STARTCHAR uni02524C +ENCODING 152140 +BBX 15 15 1 -1 +BITMAP +0110 +F110 +9FFE +9110 +9040 +F0A0 +9110 +9208 +9DF6 +F000 +93F8 +9208 +9208 +F208 +03F8 +ENDCHAR +STARTCHAR uni02542E +ENCODING 152622 +BBX 15 14 1 -1 +BITMAP +01FC +FD04 +2104 +2104 +2104 +79FC +4920 +C920 +4920 +4910 +4A10 +7A08 +0404 +0802 +ENDCHAR +STARTCHAR uni02548E +ENCODING 152718 +BBX 15 15 1 -1 +BITMAP +0050 +0048 +7FFC +1040 +1040 +23FC +3C40 +2440 +67FE +A420 +2428 +2410 +3C32 +00CA +0304 +ENDCHAR +STARTCHAR uni0254D9 +ENCODING 152793 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FEFE +2828 +2C68 +4AA4 +8922 +0820 +0000 +FFFE +0400 +1FF8 +F008 +1008 +1FF8 +ENDCHAR +STARTCHAR uni02550E +ENCODING 152846 +BBX 15 15 1 -1 +BITMAP +0040 +0040 +FBFC +2108 +2088 +2090 +7FFE +4808 +CBC8 +4A48 +4A48 +4A48 +7BC8 +0008 +0038 +ENDCHAR +STARTCHAR uni0255A7 +ENCODING 152999 +BBX 15 15 1 -1 +BITMAP +0010 +0020 +FCFC +2484 +24FC +2584 +76FC +5480 +54FE +D480 +55FE +5302 +50AA +712A +0204 +ENDCHAR +STARTCHAR uni025771 +ENCODING 153457 +BBX 15 15 1 -1 +BITMAP +0C00 +F1FC +1004 +1088 +FC50 +1020 +13FE +3822 +3424 +5428 +5020 +9020 +1020 +1020 +10E0 +ENDCHAR +STARTCHAR uni0257A9 +ENCODING 153513 +BBX 15 15 1 -1 +BITMAP +1A08 +E108 +2110 +27FC +F910 +2110 +2110 +77FE +6910 +A910 +A110 +2210 +2210 +2410 +2810 +ENDCHAR +STARTCHAR uni0257B4 +ENCODING 153524 +BBX 15 15 1 -1 +BITMAP +1820 +E120 +2120 +21FC +FA20 +2220 +2020 +63FE +7000 +A9FC +A104 +2104 +2104 +2104 +21FC +ENDCHAR +STARTCHAR uni0259C4 +ENCODING 154052 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +4444 +FFFE +1110 +1FF0 +1110 +3FF8 +2108 +3FF8 +2108 +3FFA +0102 +00FE +ENDCHAR +STARTCHAR uni0259D4 +ENCODING 154068 +BBX 15 15 1 -1 +BITMAP +0100 +7FFC +4444 +4844 +F83E +0FE0 +1000 +6FF0 +0000 +1FF0 +1250 +0A90 +7FF2 +0A8C +3264 +ENDCHAR +STARTCHAR uni025AE3 +ENCODING 154339 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0400 +07E0 +0400 +0FE0 +0020 +7FFC +0020 +0040 +0040 +0380 +ENDCHAR +STARTCHAR uni025AE4 +ENCODING 154340 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +3FF0 +0010 +0FF0 +0800 +1FF8 +1008 +0008 +0010 +0010 +00E0 +ENDCHAR +STARTCHAR uni025AF1 +ENCODING 154353 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +3EFE +4910 +8408 +0518 +01E0 +7F00 +0100 +1110 +1110 +1FF0 +0102 +0102 +00FE +ENDCHAR +STARTCHAR uni025BB2 +ENCODING 154546 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +1FF8 +1000 +1FF0 +1000 +1FF0 +1000 +FFFE +1088 +1050 +1E30 +700E +ENDCHAR +STARTCHAR uni025C4B +ENCODING 154699 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +2408 +13FC +4044 +31C4 +0474 +1884 +6118 +0100 +FFFE +0540 +1930 +E10E +ENDCHAR +STARTCHAR uni025C64 +ENCODING 154724 +BBX 15 15 1 -1 +BITMAP +2040 +7EFE +8910 +1108 +11FE +2308 +2C90 +6860 +A998 +2E26 +29C8 +2830 +29C4 +2018 +23E0 +ENDCHAR +STARTCHAR uni025DA1 +ENCODING 155041 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +7EFE +8910 +2428 +F850 +2088 +FB06 +A8F8 +F800 +A9FC +F954 +21FC +F954 +2154 +ENDCHAR +STARTCHAR uni025E2E +ENCODING 155182 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +1FF0 +0100 +0100 +7FFC +0000 +1110 +0910 +0920 +FFFE +0540 +1930 +E10E +0100 +ENDCHAR +STARTCHAR uni025E56 +ENCODING 155222 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +A820 +ABFC +B224 +2228 +FA20 +23F8 +7288 +6A88 +AA50 +A450 +2420 +2858 +2386 +ENDCHAR +STARTCHAR uni025E62 +ENCODING 155234 +BBX 15 15 1 -1 +BITMAP +2108 +1110 +0100 +FFFE +0540 +1930 +E10E +0000 +7FFE +0810 +0FF0 +0810 +09FE +7E10 +0010 +ENDCHAR +STARTCHAR uni025E65 +ENCODING 155237 +BBX 14 15 1 -1 +BITMAP +2040 +2244 +AA44 +A948 +B150 +2040 +FBFC +2004 +7004 +6804 +ABFC +A004 +2004 +2004 +23FC +ENDCHAR +STARTCHAR uni025EC2 +ENCODING 155330 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +ABFE +A820 +B3FE +2222 +FAAA +2272 +7222 +6BFE +A8A8 +A0A8 +2124 +2622 +2020 +ENDCHAR +STARTCHAR uni025ED8 +ENCODING 155352 +BBX 15 15 1 -1 +BITMAP +9252 +5452 +1052 +FEA4 +54A4 +5548 +9290 +4290 +6348 +BF48 +AAA4 +6AA4 +3F52 +4252 +8252 +ENDCHAR +STARTCHAR uni025EE8 +ENCODING 155368 +BBX 15 15 1 -1 +BITMAP +2040 +2040 +AFFE +A840 +B040 +27FC +FC84 +2524 +7348 +689C +AFE2 +A040 +2150 +264C +2040 +ENDCHAR +STARTCHAR uni025F23 +ENCODING 155427 +BBX 15 15 1 -1 +BITMAP +2100 +2100 +A9FE +AB54 +B554 +2154 +FFFE +2154 +7154 +6954 +ABFE +A000 +22A4 +2252 +2452 +ENDCHAR +STARTCHAR uni025F5C +ENCODING 155484 +BBX 15 15 1 -1 +BITMAP +1040 +107C +5440 +57FE +5A42 +13F8 +FE42 +12FE +32A4 +3AFC +56A4 +52FC +9420 +1154 +123A +ENDCHAR +STARTCHAR uni025FD4 +ENCODING 155604 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +45FC +2820 +1020 +2420 +4DFE +F288 +1288 +5050 +5450 +9220 +9050 +1088 +1306 +ENDCHAR +STARTCHAR uni025FE0 +ENCODING 155616 +BBX 15 15 1 -1 +BITMAP +1040 +2040 +4040 +2BFE +1080 +20A0 +4D20 +F3FC +1324 +5524 +5924 +9524 +952C +1020 +1020 +ENDCHAR +STARTCHAR uni025FFB +ENCODING 155643 +BBX 15 15 1 -1 +BITMAP +1080 +208C +44F0 +2880 +1082 +2482 +4C7E +F200 +12FC +5084 +5484 +92FC +9284 +1084 +10FC +ENDCHAR +STARTCHAR uni02600C +ENCODING 155660 +BBX 15 15 1 -1 +BITMAP +1080 +2080 +449E +2BD2 +1152 +2552 +4D52 +F252 +1252 +5252 +5B92 +94D2 +9132 +121E +1400 +ENDCHAR +STARTCHAR uni026017 +ENCODING 155671 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +44FC +2820 +1020 +2420 +4FFE +F250 +1354 +5154 +5A52 +9452 +9490 +1090 +1130 +ENDCHAR +STARTCHAR uni026060 +ENCODING 155744 +BBX 15 15 1 -1 +BITMAP +2000 +201E +4BD2 +D252 +2252 +2A5E +4BD2 +F652 +1252 +525E +5BD2 +9422 +9422 +1042 +1086 +ENDCHAR +STARTCHAR uni0260ED +ENCODING 155885 +BBX 15 15 1 -1 +BITMAP +1040 +2080 +45F8 +2908 +11F8 +2508 +4DF8 +F300 +11FE +5100 +59FC +9484 +92A4 +13E4 +1018 +ENDCHAR +STARTCHAR uni026270 +ENCODING 156272 +BBX 13 8 2 2 +BITMAP +FFF8 +9048 +8848 +8888 +8108 +BFE8 +8008 +8038 +ENDCHAR +STARTCHAR uni026286 +ENCODING 156294 +BBX 15 14 1 -1 +BITMAP +7FFC +4444 +4444 +7FFC +0100 +0100 +1100 +11F8 +1100 +1100 +1100 +1100 +1100 +FFFE +ENDCHAR +STARTCHAR uni02634C +ENCODING 156492 +BBX 15 15 1 -1 +BITMAP +0820 +0420 +0420 +0040 +7FFC +0100 +0100 +0100 +0100 +3FF8 +0100 +0100 +0100 +0100 +FFFE +ENDCHAR +STARTCHAR uni026402 +ENCODING 156674 +BBX 15 15 1 -1 +BITMAP +0028 +F728 +1124 +1120 +113E +33E0 +D524 +1124 +1124 +3128 +5318 +9510 +112A +114A +7384 +ENDCHAR +STARTCHAR uni02667E +ENCODING 157310 +BBX 15 14 1 -1 +BITMAP +7BFC +4904 +4908 +4890 +7860 +4998 +4E06 +4820 +7820 +49FC +4820 +4820 +8820 +9BFE +ENDCHAR +STARTCHAR uni0266B0 +ENCODING 157360 +BBX 15 14 1 -1 +BITMAP +7BF8 +4888 +4888 +4908 +7908 +4A30 +4800 +4FFE +7A52 +4A52 +4A52 +4A52 +8C62 +998C +ENDCHAR +STARTCHAR uni02671D +ENCODING 157469 +BBX 15 15 1 -1 +BITMAP +0040 +7840 +4FFE +4A08 +4910 +78E0 +49B0 +4E0E +4A08 +7BF8 +4A08 +4BF8 +4A08 +8C08 +9808 +ENDCHAR +STARTCHAR uni0268DD +ENCODING 157917 +BBX 13 14 2 -1 +BITMAP +FFF8 +8200 +8200 +9200 +93F0 +9010 +9010 +9010 +93F0 +9200 +8200 +8200 +8200 +FFF8 +ENDCHAR +STARTCHAR uni0268EA +ENCODING 157930 +BBX 15 15 1 -1 +BITMAP +0080 +FC80 +91FC +9200 +90F8 +FC88 +8488 +84F8 +8400 +FDFC +9154 +9154 +9154 +FD54 +03FE +ENDCHAR +STARTCHAR uni026951 +ENCODING 158033 +BBX 12 15 2 -1 +BITMAP +0400 +1800 +E1F0 +8010 +8010 +8010 +8010 +8010 +F9F0 +8010 +8010 +8010 +8010 +8010 +F9F0 +ENDCHAR +STARTCHAR uni02696F +ENCODING 158063 +BBX 13 12 2 1 +BITMAP +0400 +0800 +7570 +4210 +7570 +4010 +7570 +4210 +4510 +FFF8 +8008 +8008 +ENDCHAR +STARTCHAR uni0269DD +ENCODING 158173 +BBX 15 15 1 -1 +BITMAP +1808 +6070 +2710 +2110 +2210 +FA50 +275C +2150 +2550 +7550 +5250 +5250 +527C +5580 +787E +ENDCHAR +STARTCHAR uni026A1E +ENCODING 158238 +BBX 15 15 1 -1 +BITMAP +1000 +20F8 +7C00 +4400 +5400 +5400 +45FC +FE50 +4450 +5450 +5450 +5450 +5492 +8492 +8D0E +ENDCHAR +STARTCHAR uni026A58 +ENCODING 158296 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +7DFE +4502 +5502 +54FC +4420 +FE20 +4520 +553C +5520 +5520 +55A0 +8660 +8C1E +ENDCHAR +STARTCHAR uni026A8C +ENCODING 158348 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +7DFE +4502 +5522 +54FC +4450 +FE8C +4400 +55FE +5404 +54E4 +54A4 +84E4 +8C0C +ENDCHAR +STARTCHAR uni026AB7 +ENCODING 158391 +BBX 15 15 1 -1 +BITMAP +11FC +2124 +7DAC +4574 +55FC +5420 +45FC +FC20 +47FE +5554 +564A +5420 +57FC +8420 +8FFE +ENDCHAR +STARTCHAR uni026AFF +ENCODING 158463 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +0820 +0000 +3FF8 +0008 +0810 +0420 +0240 +0180 +06C0 +1830 +E00E +ENDCHAR +STARTCHAR uni026C29 +ENCODING 158761 +BBX 13 15 2 -1 +BITMAP +0880 +7FF0 +0880 +0000 +3FE0 +2220 +2220 +3FE0 +0200 +3FE0 +0200 +7FF0 +0500 +18C0 +E038 +ENDCHAR +STARTCHAR uni026C73 +ENCODING 158835 +BBX 15 15 1 -1 +BITMAP +1010 +0820 +FFFE +0000 +4844 +4844 +5294 +4A54 +4424 +4424 +4A54 +4D6C +50CC +4004 +7FFC +ENDCHAR +STARTCHAR uni026CDD +ENCODING 158941 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1FF0 +1010 +1FF0 +1010 +1FF0 +0000 +FFFE +0800 +1FFC +2224 +C444 +088C +ENDCHAR +STARTCHAR uni026E40 +ENCODING 159296 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +2820 +2000 +49FC +D124 +2524 +4D24 +F3FC +1124 +5524 +5324 +91FC +1000 +ENDCHAR +STARTCHAR uni026E65 +ENCODING 159333 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +7DFC +4500 +45F8 +4900 +49F8 +4500 +47FE +4524 +5914 +41C8 +4706 +ENDCHAR +STARTCHAR uni026F94 +ENCODING 159636 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +08A0 +1FF8 +7080 +1FF0 +1080 +1FF0 +1080 +1FFC +2408 +27F8 +2408 +27F8 +ENDCHAR +STARTCHAR uni026FF6 +ENCODING 159734 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0A28 +0110 +FFFE +1680 +15A4 +76A4 +4584 +449C +7040 +17FC +1044 +1184 +6618 +ENDCHAR +STARTCHAR uni026FF7 +ENCODING 159735 +BBX 15 15 1 -1 +BITMAP +0820 +0820 +FFFE +0820 +00F0 +8920 +57F8 +2248 +57FC +9444 +37FC +5444 +17FC +2042 +C03E +ENDCHAR +STARTCHAR uni026FF8 +ENCODING 159736 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0838 +FDE0 +203C +7920 +0BFE +5000 +3FFE +4100 +3FF8 +2108 +3FF8 +0108 +FFF6 +ENDCHAR +STARTCHAR uni0270F4 +ENCODING 159988 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +2020 +23FC +4A04 +D284 +28FE +5920 +F57C +1344 +597C +9544 +9544 +117C +ENDCHAR +STARTCHAR uni02710D +ENCODING 160013 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0820 +1000 +7DDC +1044 +FECC +4554 +EE44 +44CC +EF54 +0044 +FECC +2402 +C3FE +ENDCHAR +STARTCHAR uni027139 +ENCODING 160057 +BBX 15 15 1 -1 +BITMAP +0820 +FFFE +0920 +7114 +0FF2 +F452 +0290 +7FFE +0010 +77D4 +0454 +77D8 +544A +57DA +7024 +ENDCHAR +STARTCHAR uni0273DA +ENCODING 160730 +BBX 15 15 1 -1 +BITMAP +1000 +FE78 +1048 +7C48 +0048 +FE8E +8200 +BAFC +1044 +7C44 +5428 +7C28 +1410 +1E28 +E2C6 +ENDCHAR +STARTCHAR uni0273DB +ENCODING 160731 +BBX 15 15 1 -1 +BITMAP +0008 +7C08 +00FE +FE08 +0088 +7C48 +0048 +7D08 +4518 +7FF8 +2108 +3FF8 +0108 +013C +FFC2 +ENDCHAR +STARTCHAR uni0273FE +ENCODING 160766 +BBX 15 14 1 -1 +BITMAP +7FFC +4420 +5FF8 +4520 +7FFC +5810 +7FFC +0100 +3FF8 +2108 +3FF8 +0108 +013C +FFC2 +ENDCHAR +STARTCHAR uni027410 +ENCODING 160784 +BBX 15 15 1 -1 +BITMAP +2020 +2020 +23FE +F820 +A9FC +A820 +ABFE +A904 +F9FC +2104 +29FC +2904 +39FC +C488 +0306 +ENDCHAR +STARTCHAR uni027449 +ENCODING 160841 +BBX 15 15 1 -1 +BITMAP +0200 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +1FF0 +1010 +7E7E +5252 +7E7E +1414 +1C1C +F2E2 +ENDCHAR +STARTCHAR uni027614 +ENCODING 161300 +BBX 15 15 1 -1 +BITMAP +1000 +13FE +1020 +FC20 +0420 +0420 +0830 +1028 +3A24 +5420 +9220 +1020 +1020 +1020 +1020 +ENDCHAR +STARTCHAR uni027615 +ENCODING 161301 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +1020 +FC20 +0420 +0420 +083C +1020 +3A20 +5420 +9220 +1020 +1020 +1020 +11FE +ENDCHAR +STARTCHAR uni027631 +ENCODING 161329 +BBX 15 15 1 -1 +BITMAP +2220 +2220 +2220 +FA22 +0A24 +0BB8 +1220 +1220 +3620 +6A20 +A620 +2220 +2222 +23A2 +2E1E +ENDCHAR +STARTCHAR uni027684 +ENCODING 161412 +BBX 15 15 1 -1 +BITMAP +2094 +2114 +2712 +F910 +0910 +0FFE +1110 +1114 +3514 +69D4 +A708 +2108 +211A +212A +2744 +ENDCHAR +STARTCHAR uni027693 +ENCODING 161427 +BBX 14 15 1 -1 +BITMAP +2030 +23C0 +2240 +FBFC +0A20 +0A20 +1394 +1608 +3440 +6BF8 +A648 +2248 +2248 +2258 +2040 +ENDCHAR +STARTCHAR uni02770E +ENCODING 161550 +BBX 15 15 1 -1 +BITMAP +2244 +2144 +2128 +FBFC +0890 +0908 +1636 +11C0 +3420 +6BF8 +A420 +27FE +2020 +2020 +20E0 +ENDCHAR +STARTCHAR uni027723 +ENCODING 161571 +BBX 15 15 1 -1 +BITMAP +2040 +2080 +23F8 +FA08 +0BF8 +0A08 +13F8 +1200 +37FE +6A00 +A7FC +2004 +2554 +254C +2818 +ENDCHAR +STARTCHAR uni027752 +ENCODING 161618 +BBX 14 15 1 -1 +BITMAP +2110 +27FC +2110 +F9F0 +0800 +0FFC +1040 +13F8 +3648 +6BF8 +A648 +2248 +23F8 +2110 +260C +ENDCHAR +STARTCHAR uni027985 +ENCODING 162181 +BBX 15 14 1 -1 +BITMAP +7DFC +0100 +FF08 +0108 +7D48 +0128 +7D10 +0110 +0128 +7D24 +4544 +4580 +4500 +7DFE +ENDCHAR +STARTCHAR uni027A84 +ENCODING 162436 +BBX 15 15 1 -1 +BITMAP +0080 +78BC +0080 +FD7E +0100 +7B3C +0500 +793C +0100 +0100 +793C +4924 +4924 +4924 +793C +ENDCHAR +STARTCHAR uni027BB3 +ENCODING 162739 +BBX 15 15 1 -1 +BITMAP +2844 +2844 +4444 +82FE +1044 +1044 +2844 +4444 +827C +7C44 +4444 +4444 +4444 +4444 +7C7C +ENDCHAR +STARTCHAR uni027BBE +ENCODING 162750 +BBX 15 15 1 -1 +BITMAP +0628 +F828 +0244 +9282 +9410 +4010 +1028 +7C44 +1082 +107C +FE44 +1044 +2844 +4444 +807C +ENDCHAR +STARTCHAR uni027BC7 +ENCODING 162759 +BBX 15 15 1 -1 +BITMAP +2820 +2820 +45FC +8288 +1050 +11FE +2800 +45FC +8324 +7DFC +4524 +4524 +45FC +4422 +7C1E +ENDCHAR +STARTCHAR uni027CB8 +ENCODING 163000 +BBX 15 15 1 -1 +BITMAP +0840 +3040 +C840 +2440 +087E +3040 +C840 +1840 +25FC +CD04 +1504 +2504 +C504 +0904 +31FC +ENDCHAR +STARTCHAR uni027DA0 +ENCODING 163232 +BBX 13 15 2 -1 +BITMAP +0200 +FFF8 +0200 +3FE0 +0000 +7FF0 +4890 +5050 +7FF0 +2020 +3FE0 +2020 +3FE0 +1040 +E038 +ENDCHAR +STARTCHAR uni027E10 +ENCODING 163344 +BBX 15 15 1 -1 +BITMAP +0014 +7812 +4FFE +4810 +7BD0 +4810 +4FF0 +7A50 +4BD0 +4A50 +4BD0 +7A50 +2BCA +454A +8624 +ENDCHAR +STARTCHAR uni027FB7 +ENCODING 163767 +BBX 9 14 4 -1 +BITMAP +7F80 +4080 +4080 +4080 +7F80 +0800 +4800 +4F80 +4800 +4800 +4800 +4980 +4E00 +F000 +ENDCHAR +STARTCHAR uni02808A +ENCODING 163978 +BBX 14 14 1 -1 +BITMAP +7BFC +4A04 +4A44 +4AF4 +7A44 +1244 +12F4 +5A04 +52F4 +5294 +5294 +52F4 +5C04 +E41C +ENDCHAR +STARTCHAR uni0280BB +ENCODING 164027 +BBX 15 15 1 -1 +BITMAP +001C +7DE0 +4400 +4522 +4522 +7C94 +1000 +113E +5D22 +5122 +513E +5122 +5122 +5D22 +E13E +ENDCHAR +STARTCHAR uni028277 +ENCODING 164471 +BBX 15 15 1 -1 +BITMAP +1020 +2020 +7BFE +4A02 +7A8A +4904 +4A22 +7850 +4888 +4B06 +F800 +29FC +4904 +8904 +19FC +ENDCHAR +STARTCHAR uni028282 +ENCODING 164482 +BBX 15 15 1 -1 +BITMAP +1000 +23FC +7A44 +4B54 +7AE4 +4A44 +4BFC +7840 +4BFC +4840 +FFFE +2800 +4AA4 +8A52 +1C52 +ENDCHAR +STARTCHAR uni0282F3 +ENCODING 164595 +BBX 15 15 1 -1 +BITMAP +2000 +23FE +FE02 +2222 +FA22 +AAFA +FA22 +AA22 +AA22 +FA52 +2252 +FE8A +2202 +2202 +23FE +ENDCHAR +STARTCHAR uni0283CD +ENCODING 164813 +BBX 15 15 1 -1 +BITMAP +2208 +2AAA +FAAA +2514 +F8A2 +A800 +FBFC +AA04 +A840 +FFFE +2150 +F948 +2244 +2442 +2040 +ENDCHAR +STARTCHAR uni02840C +ENCODING 164876 +BBX 15 15 1 -1 +BITMAP +0100 +0100 +7FFC +0820 +0420 +0440 +FFFE +0100 +0100 +3FF8 +0100 +0100 +7FFC +0100 +0100 +ENDCHAR +STARTCHAR uni028455 +ENCODING 164949 +BBX 15 14 1 -1 +BITMAP +87FC +4404 +2404 +0404 +0404 +0404 +E404 +2404 +2404 +2404 +27FC +2000 +5000 +8FFE +ENDCHAR +STARTCHAR uni02856B +ENCODING 165227 +BBX 15 15 1 -1 +BITMAP +0210 +0210 +8210 +4F7E +2152 +0152 +027E +E252 +2752 +2AD2 +227E +2210 +2210 +5210 +8FFE +ENDCHAR +STARTCHAR uni0285C8 +ENCODING 165320 +BBX 15 15 1 -1 +BITMAP +43F8 +2208 +13F8 +8208 +43F8 +2040 +0FFE +E000 +23F8 +2208 +23F8 +2040 +2248 +54C4 +8FFE +ENDCHAR +STARTCHAR uni0285C9 +ENCODING 165321 +BBX 15 15 1 -1 +BITMAP +4080 +2FFC +0924 +9E3E +4000 +2FFC +0180 +EEC4 +2148 +2E70 +20D0 +2348 +2C46 +5180 +8FFE +ENDCHAR +STARTCHAR uni0286D7 +ENCODING 165591 +BBX 14 14 1 -1 +BITMAP +7CFC +4484 +4484 +7C88 +0088 +FE90 +9288 +9288 +9284 +FE84 +8084 +8298 +8280 +7E80 +ENDCHAR +STARTCHAR uni0286FA +ENCODING 165626 +BBX 15 15 1 -1 +BITMAP +2200 +227E +FF42 +2242 +3E44 +2244 +2248 +3E44 +2244 +2242 +FFC2 +1042 +224C +4140 +8040 +ENDCHAR +STARTCHAR uni028946 +ENCODING 166214 +BBX 15 15 1 -1 +BITMAP +1040 +2840 +2478 +4048 +FC88 +1088 +1108 +FC10 +1010 +9420 +5430 +5048 +1C84 +3102 +C202 +ENDCHAR +STARTCHAR uni028949 +ENCODING 166217 +BBX 14 15 1 -1 +BITMAP +1020 +2820 +2420 +4020 +FD24 +1124 +1124 +FD24 +1124 +9524 +5524 +5124 +1D24 +3124 +C1FC +ENDCHAR +STARTCHAR uni02896B +ENCODING 166251 +BBX 15 15 1 -1 +BITMAP +0600 +787C +4244 +4244 +7E44 +C45C +0940 +36C0 +1830 +EFCE +0100 +3FF8 +1110 +0920 +FFFE +ENDCHAR +STARTCHAR uni028987 +ENCODING 166279 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FC +4020 +FD24 +1124 +10A8 +FC20 +13FE +9420 +5450 +5050 +1C88 +3104 +C202 +ENDCHAR +STARTCHAR uni028988 +ENCODING 166280 +BBX 15 15 1 -1 +BITMAP +1050 +2850 +2450 +4050 +FDFE +1152 +1152 +FD52 +1152 +95FE +5552 +5152 +1D52 +3152 +C1FE +ENDCHAR +STARTCHAR uni0289BA +ENCODING 166330 +BBX 15 15 1 -1 +BITMAP +1000 +28FC +2484 +4084 +FCFC +1000 +11FE +FD22 +1122 +9522 +55FE +5100 +1D02 +3102 +C0FE +ENDCHAR +STARTCHAR uni0289BB +ENCODING 166331 +BBX 15 15 1 -1 +BITMAP +1000 +29FC +2524 +4124 +FDFC +1124 +1124 +FDFC +1040 +95FE +5442 +5042 +1C82 +3102 +C21C +ENDCHAR +STARTCHAR uni028A1E +ENCODING 166430 +BBX 15 15 1 -1 +BITMAP +1048 +2848 +2484 +414A +FCC8 +1030 +10C8 +FF36 +10C0 +9480 +54FE +5090 +1D10 +3210 +C010 +ENDCHAR +STARTCHAR uni028A29 +ENCODING 166441 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FC +4124 +FD24 +1124 +11FC +FC20 +1020 +9414 +5552 +5142 +1D44 +3244 +C23C +ENDCHAR +STARTCHAR uni028A43 +ENCODING 166467 +BBX 15 15 1 -1 +BITMAP +1040 +2840 +27FE +4040 +FDFC +1090 +13FE +FD08 +11FC +970A +5508 +51F8 +1D08 +3108 +C1F8 +ENDCHAR +STARTCHAR uni028A71 +ENCODING 166513 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +25FE +4084 +FC48 +11FE +1108 +FD70 +1104 +9518 +5560 +5102 +1D04 +3218 +C060 +ENDCHAR +STARTCHAR uni028A99 +ENCODING 166553 +BBX 15 15 1 -1 +BITMAP +110C +2970 +2902 +4522 +FB94 +1354 +1148 +FD08 +11FE +9708 +5348 +5528 +1928 +3108 +C138 +ENDCHAR +STARTCHAR uni028ACD +ENCODING 166605 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +27FE +4020 +FDFC +1124 +11FC +FD24 +1124 +95FC +5424 +5152 +1D52 +3244 +C23C +ENDCHAR +STARTCHAR uni028ADD +ENCODING 166621 +BBX 15 15 1 -1 +BITMAP +1080 +2880 +24FC +4140 +FE40 +13FE +1090 +FDFE +1310 +95FC +5510 +51FC +1D10 +3110 +C1FE +ENDCHAR +STARTCHAR uni028AE4 +ENCODING 166628 +BBX 15 15 1 -1 +BITMAP +1200 +2AFC +2504 +4248 +FC30 +12FE +1092 +FEFE +1292 +96FE +5A92 +5292 +1E96 +3500 +C8FE +ENDCHAR +STARTCHAR uni028BC1 +ENCODING 166849 +BBX 15 15 1 -1 +BITMAP +2400 +5678 +4508 +9E28 +E510 +247C +2C54 +FF7C +2D54 +B57C +B554 +6554 +2D4C +3680 +C47E +ENDCHAR +STARTCHAR uni028BEF +ENCODING 166895 +BBX 15 15 1 -1 +BITMAP +1020 +2820 +24F8 +42A8 +FAF8 +1020 +11FC +FE88 +12F8 +9688 +5AF8 +5288 +1AF8 +3504 +C8FE +ENDCHAR +STARTCHAR uni028D10 +ENCODING 167184 +BBX 14 14 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +8904 +8FE4 +9104 +8104 +BFF4 +8484 +8484 +8894 +B074 +ENDCHAR +STARTCHAR uni028D71 +ENCODING 167281 +BBX 14 15 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FFFC +9024 +9FE4 +9004 +9FE4 +9444 +9FB4 +9104 +AFE4 +A104 +8FF4 +ENDCHAR +STARTCHAR uni028DFB +ENCODING 167419 +BBX 14 15 1 -1 +BITMAP +FCFC +8484 +FCFC +8484 +FCFC +9224 +A7C4 +A854 +97A4 +A854 +FFEC +9024 +BFF4 +D4AC +97A4 +ENDCHAR +STARTCHAR uni028E1F +ENCODING 167455 +BBX 15 14 1 -1 +BITMAP +FBFC +8A00 +8A04 +9204 +A204 +9248 +9228 +8A10 +8A10 +8A28 +B248 +8280 +8200 +83FE +ENDCHAR +STARTCHAR uni028E36 +ENCODING 167478 +BBX 15 14 1 -1 +BITMAP +FFFC +8840 +8A48 +9248 +A444 +9444 +9040 +8FFE +8840 +8840 +B040 +8040 +8040 +8040 +ENDCHAR +STARTCHAR uni028E89 +ENCODING 167561 +BBX 15 15 1 -1 +BITMAP +001C +F9E8 +8944 +8924 +9222 +A202 +9022 +9020 +8BFE +8820 +8870 +B0A8 +8124 +8222 +8020 +ENDCHAR +STARTCHAR uni028EEB +ENCODING 167659 +BBX 15 15 1 -1 +BITMAP +0040 +F840 +8BF8 +8910 +90A0 +A7FC +9000 +93F8 +8A48 +8BF8 +8A48 +B248 +83F8 +8042 +803E +ENDCHAR +STARTCHAR uni028F32 +ENCODING 167730 +BBX 15 15 1 -1 +BITMAP +0088 +FBFE +8888 +8820 +9050 +A1F8 +9686 +90F8 +8880 +88F8 +8880 +B3FE +8088 +8134 +83C2 +ENDCHAR +STARTCHAR uni028FF8 +ENCODING 167928 +BBX 15 15 1 -1 +BITMAP +0E24 +F024 +0248 +92FE +5590 +4090 +10FC +7C90 +1090 +1090 +FEFC +1090 +2890 +4490 +80FE +ENDCHAR +STARTCHAR uni0292A0 +ENCODING 168608 +BBX 15 15 1 -1 +BITMAP +2820 +2924 +FF24 +28A8 +38A8 +1020 +7C20 +55FE +5450 +7C50 +1050 +FE90 +1092 +1112 +120E +ENDCHAR +STARTCHAR uni0292B1 +ENCODING 168625 +BBX 15 15 1 -1 +BITMAP +5100 +5100 +FBFC +5400 +71F8 +2108 +F948 +A928 +AFFE +FA08 +2248 +FA28 +23FE +2010 +2070 +ENDCHAR +STARTCHAR uni029490 +ENCODING 169104 +BBX 15 14 1 -1 +BITMAP +FEFE +2020 +20FC +2484 +44FC +5A84 +F284 +10FC +1084 +FE84 +10FC +1020 +1E48 +E186 +ENDCHAR +STARTCHAR uni0295CF +ENCODING 169423 +BBX 15 15 1 -1 +BITMAP +FFFE +0440 +7FFC +4444 +7FFC +0000 +3FF8 +20E8 +2F08 +2108 +2FE8 +2928 +4FE8 +412A +9FD4 +ENDCHAR +STARTCHAR uni02967F +ENCODING 169599 +BBX 11 15 3 -1 +BITMAP +0400 +0A00 +3180 +DF60 +0000 +3F80 +2080 +3F80 +2080 +3F80 +2000 +3F80 +2000 +3F80 +2000 +ENDCHAR +STARTCHAR uni0296F0 +ENCODING 169712 +BBX 15 15 1 -1 +BITMAP +0110 +0108 +FFFE +1190 +0D60 +1930 +E7EE +1918 +EFE6 +0820 +0FE0 +0820 +0FE8 +0850 +7E3E +ENDCHAR +STARTCHAR uni029719 +ENCODING 169753 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +28F8 +5420 +D0A8 +7C88 +47FE +7C88 +4488 +7C00 +41FC +4490 +4C92 +7312 +C20E +ENDCHAR +STARTCHAR uni029750 +ENCODING 169808 +BBX 15 15 1 -1 +BITMAP +1084 +2844 +2448 +5BFE +4090 +FC90 +4524 +7E44 +4568 +7C90 +4090 +7D24 +416C +7FB2 +4222 +ENDCHAR +STARTCHAR uni0298C6 +ENCODING 170182 +BBX 15 15 1 -1 +BITMAP +0084 +7E44 +4848 +48FC +7E20 +4820 +4820 +7EFC +4820 +4820 +7E20 +03FE +AA20 +AA20 +8420 +ENDCHAR +STARTCHAR uni029A72 +ENCODING 170610 +BBX 15 14 1 -1 +BITMAP +7CFC +4484 +5CFC +5484 +FE84 +82FC +7C40 +44FE +7D22 +4722 +7D52 +458A +45F2 +4C0C +ENDCHAR +STARTCHAR uni029DDB +ENCODING 171483 +BBX 14 15 1 -1 +BITMAP +2040 +3878 +4888 +9310 +7DFC +5524 +5524 +7DFC +5524 +5524 +7DFC +0104 +AB04 +A904 +821C +ENDCHAR +STARTCHAR uni029E15 +ENCODING 171541 +BBX 15 15 1 -1 +BITMAP +2000 +39FC +4900 +91F8 +7D00 +55F8 +5500 +7D00 +57FE +5544 +7D44 +0128 +AB10 +A9C8 +8306 +ENDCHAR +STARTCHAR uni029E3D +ENCODING 171581 +BBX 15 15 1 -1 +BITMAP +2110 +3910 +4FFE +9110 +7D10 +54A0 +54A0 +7CA2 +5524 +5738 +7D20 +0120 +AB22 +A922 +811E +ENDCHAR +STARTCHAR uni029E49 +ENCODING 171593 +BBX 15 15 1 -1 +BITMAP +2000 +3BF4 +4818 +90D4 +7D50 +574A +5546 +7FF8 +554A +554C +7D4A +0148 +AB4A +AA46 +8440 +ENDCHAR +STARTCHAR uni029E8A +ENCODING 171658 +BBX 15 15 1 -1 +BITMAP +2088 +3888 +4BFE +9088 +7C20 +55FE +5500 +7D00 +54FC +5400 +7CA8 +00A8 +AAAA +A92A +8206 +ENDCHAR +STARTCHAR uni029EC4 +ENCODING 171716 +BBX 15 15 1 -1 +BITMAP +2000 +3BFC +4AA4 +92A4 +7FFC +5440 +5480 +7F44 +5468 +54B0 +7D20 +0270 +AAA8 +A926 +8040 +ENDCHAR +STARTCHAR uni029EDB +ENCODING 171739 +BBX 15 15 1 -1 +BITMAP +2084 +3FFE +4A94 +9294 +7FDE +558C +56D4 +7CA6 +55FC +5504 +7D04 +01FC +AB04 +A904 +81FC +ENDCHAR +STARTCHAR uni029EE9 +ENCODING 171753 +BBX 15 15 1 -1 +BITMAP +2040 +3940 +4978 +9140 +7D40 +57FE +5400 +7C88 +5488 +56A8 +7EEE +02A8 +AAA8 +AAE8 +873E +ENDCHAR +STARTCHAR uni029FCE +ENCODING 171982 +BBX 15 15 1 -1 +BITMAP +0020 +7C40 +05FC +4904 +31FC +1104 +FDFC +1500 +19FE +1100 +11FE +1002 +12AA +12A2 +340C +ENDCHAR +STARTCHAR uni02A01A +ENCODING 172058 +BBX 15 15 1 -1 +BITMAP +1014 +2012 +7C10 +47FE +7C10 +4490 +7C94 +40F4 +7F94 +4094 +7E98 +0290 +AB2A +AA4A +8484 +ENDCHAR +STARTCHAR uni02A02F +ENCODING 172079 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +55FC +5504 +55FC +1104 +11FC +FD00 +29FE +2900 +29FE +2C02 +4AAA +4AA2 +820C +ENDCHAR +STARTCHAR uni02A082 +ENCODING 172162 +BBX 15 15 1 -1 +BITMAP +1020 +1040 +FDFC +1104 +7DFC +4504 +7DFC +4500 +45FE +7D00 +11FE +FC02 +12AA +12AA +1404 +ENDCHAR +STARTCHAR uni02A0F9 +ENCODING 172281 +BBX 15 15 1 -1 +BITMAP +7E7E +4242 +7E42 +4242 +7E42 +444E +4A40 +FFF0 +1010 +1FF0 +1010 +1FFE +1000 +5FFE +8924 +ENDCHAR +STARTCHAR uni02A190 +ENCODING 172432 +BBX 15 15 1 -1 +BITMAP +2410 +2820 +7F7C +C844 +7E7C +4844 +7E7C +4840 +7F7E +0840 +FF7E +2C02 +4AAA +89AA +0804 +ENDCHAR +STARTCHAR uni02A38C +ENCODING 172940 +BBX 15 15 1 -1 +BITMAP +1020 +1020 +FEFC +5420 +54A4 +BBA4 +5468 +92FE +2020 +3C70 +44A8 +A926 +1020 +2C00 +C3FE +ENDCHAR +STARTCHAR uni02A437 +ENCODING 173111 +BBX 15 15 1 -1 +BITMAP +0010 +7F10 +4910 +6BFE +5D10 +4924 +7F44 +0828 +7F28 +0810 +0F14 +F024 +0A24 +554A +94F2 +ENDCHAR +STARTCHAR uni02A5F1 +ENCODING 173553 +BBX 15 15 1 -1 +BITMAP +0800 +083C +2F24 +2824 +2824 +FFBC +5524 +6B24 +4124 +7F3C +5524 +5524 +6B24 +4124 +7F7E +ENDCHAR +STARTCHAR uni02A602 +ENCODING 173570 +BBX 15 15 1 -1 +BITMAP +0800 +7F7E +0812 +7E12 +0922 +0F44 +F1FC +1100 +FFFE +2928 +2548 +3FF8 +2548 +2928 +3FF8 +ENDCHAR +STARTCHAR uni02A61A +ENCODING 173594 +BBX 15 15 1 -1 +BITMAP +1000 +11FC +5E20 +5020 +50F8 +FF48 +AA48 +D648 +83FE +FE00 +AAFC +AA84 +D684 +8284 +FEFC +ENDCHAR +STARTCHAR uni02A6B2 +ENCODING 173746 +BBX 15 15 1 -1 +BITMAP +79F0 +4A20 +4FF8 +4A48 +7BF8 +4A48 +4BF8 +4840 +4BFC +7A44 +4BFC +4A44 +4BFC +8842 +983E +ENDCHAR +STARTCHAR uni030EDD +ENCODING 200413 +BBX 15 16 0 -2 +BITMAP +0040 +4FFE +294A +02F4 +0F1A +EBF6 +2AAA +2FEA +2AFA +2B5A +2FAA +2AFA +2A82 +3656 +65F4 +9FFE +ENDCHAR +STARTCHAR uni030EDE +ENCODING 200414 +BBX 15 16 0 -2 +BITMAP +0040 +4FFE +294A +02F4 +0F1A +EBF6 +2AAA +2FEA +2AFA +2B5A +2FAA +2AFA +2A82 +3656 +65F4 +9FFE +ENDCHAR +STARTCHAR uni03106C +ENCODING 200812 +BBX 16 16 0 -2 +BITMAP +07E0 +0FF0 +07E0 +0FF0 +7BDE +FFFF +7BDE +FFBF +7BDE +1450 +3FFC +3CF0 +2FBC +3EF8 +3EF8 +2FBC +ENDCHAR +STARTCHAR uni0E0001 +ENCODING 917505 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +3399 +AA20 +332D +AA24 +3399 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0020 +ENCODING 917536 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0E71 +9048 +0C71 +8240 +1C41 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0021 +ENCODING 917537 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0101 +8100 +0101 +8000 +0101 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0022 +ENCODING 917538 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8280 +0281 +8000 +0001 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0023 +ENCODING 917539 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0281 +87C0 +0281 +87C0 +0281 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0024 +ENCODING 917540 +BBX 16 16 0 -2 +BITMAP +5555 +8080 +01E1 +8280 +01C1 +80A0 +03C1 +8080 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0025 +ENCODING 917541 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0481 +8A80 +0501 +8140 +02A1 +8240 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0026 +ENCODING 917542 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0101 +8280 +0101 +82C0 +0281 +8140 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0027 +ENCODING 917543 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0101 +8100 +0001 +8000 +0001 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0028 +ENCODING 917544 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0081 +8100 +0101 +8100 +0081 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0029 +ENCODING 917545 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0101 +8080 +0081 +8080 +0101 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E002A +ENCODING 917546 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0101 +8540 +0381 +8540 +0101 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E002B +ENCODING 917547 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0101 +8100 +07C1 +8100 +0101 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E002C +ENCODING 917548 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8000 +0181 +8080 +0101 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E002D +ENCODING 917549 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8000 +03C1 +8000 +0001 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E002E +ENCODING 917550 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8000 +0001 +8180 +0181 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E002F +ENCODING 917551 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0021 +8040 +0081 +8100 +0201 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0030 +ENCODING 917552 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0181 +8240 +0241 +8240 +0181 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0031 +ENCODING 917553 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0101 +8300 +0501 +8100 +07C1 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0032 +ENCODING 917554 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0381 +8040 +0181 +8200 +03C1 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0033 +ENCODING 917555 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0381 +8040 +0181 +8040 +0381 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0034 +ENCODING 917556 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0241 +8240 +03C1 +8040 +0041 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0035 +ENCODING 917557 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +03C1 +8200 +0381 +8040 +0381 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0036 +ENCODING 917558 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +01C1 +8200 +0381 +8240 +0181 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0037 +ENCODING 917559 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +03C1 +8040 +0081 +8100 +0101 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0038 +ENCODING 917560 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0181 +8240 +0181 +8240 +0181 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0039 +ENCODING 917561 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0181 +8240 +01C1 +8040 +0381 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E003A +ENCODING 917562 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0181 +8180 +0001 +8180 +0181 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E003B +ENCODING 917563 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0181 +8180 +0001 +8180 +0081 +8100 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E003C +ENCODING 917564 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0041 +8180 +0201 +8180 +0041 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E003D +ENCODING 917565 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +83C0 +0001 +83C0 +0001 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E003E +ENCODING 917566 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0201 +8180 +0041 +8180 +0201 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E003F +ENCODING 917567 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0301 +8080 +0101 +8100 +0001 +8100 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0040 +ENCODING 917568 +BBX 16 16 0 -2 +BITMAP +5555 +8380 +0441 +89A0 +0AA1 +89C0 +0401 +83C0 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0041 +ENCODING 917569 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0181 +8240 +03C1 +8240 +0241 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0042 +ENCODING 917570 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0381 +8240 +0381 +8240 +0381 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0043 +ENCODING 917571 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +01C1 +8200 +0201 +8200 +01C1 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0044 +ENCODING 917572 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0381 +8240 +0241 +8240 +0381 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0045 +ENCODING 917573 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +03C1 +8200 +0381 +8200 +03C1 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0046 +ENCODING 917574 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +03C1 +8200 +0381 +8200 +0201 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0047 +ENCODING 917575 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0181 +8200 +02C1 +8240 +0181 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0048 +ENCODING 917576 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0241 +8240 +03C1 +8240 +0241 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0049 +ENCODING 917577 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +07C1 +8100 +0101 +8100 +07C1 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E004A +ENCODING 917578 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +07C1 +8100 +0101 +8100 +0601 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E004B +ENCODING 917579 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0241 +8280 +0301 +8280 +0241 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E004C +ENCODING 917580 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0201 +8200 +0201 +8200 +03C1 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E004D +ENCODING 917581 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0441 +86C0 +0541 +8440 +0441 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E004E +ENCODING 917582 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0441 +8640 +0541 +84C0 +0441 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E004F +ENCODING 917583 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0381 +8440 +0441 +8440 +0381 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0050 +ENCODING 917584 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0381 +8240 +0381 +8200 +0201 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0051 +ENCODING 917585 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0381 +8440 +0541 +8480 +0341 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0052 +ENCODING 917586 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0381 +8240 +0381 +8280 +0241 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0053 +ENCODING 917587 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +01C1 +8200 +0181 +8040 +0381 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0054 +ENCODING 917588 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +07C1 +8100 +0101 +8100 +0101 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0055 +ENCODING 917589 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0241 +8240 +0241 +8240 +0181 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0056 +ENCODING 917590 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0441 +8440 +0281 +8280 +0101 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0057 +ENCODING 917591 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0441 +8440 +0541 +86C0 +0441 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0058 +ENCODING 917592 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0441 +8280 +0101 +8280 +0441 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0059 +ENCODING 917593 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0441 +8280 +0101 +8100 +0101 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E005A +ENCODING 917594 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +03C1 +8040 +0181 +8200 +03C1 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E005B +ENCODING 917595 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0181 +8100 +0101 +8100 +0181 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E005C +ENCODING 917596 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0401 +8200 +0101 +8080 +0041 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E005D +ENCODING 917597 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0181 +8080 +0081 +8080 +0181 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E005E +ENCODING 917598 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0101 +8280 +0441 +8000 +0001 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E005F +ENCODING 917599 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8000 +0001 +8000 +07C1 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0060 +ENCODING 917600 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0201 +8100 +0081 +8000 +0001 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0061 +ENCODING 917601 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0381 +8040 +03C1 +8240 +01C1 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0062 +ENCODING 917602 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0201 +8200 +0301 +8280 +0301 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0063 +ENCODING 917603 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8180 +0201 +8200 +0181 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0064 +ENCODING 917604 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0081 +8080 +0181 +8280 +0181 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0065 +ENCODING 917605 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0181 +8240 +0381 +8200 +01C1 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0066 +ENCODING 917606 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0181 +8200 +0301 +8200 +0201 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0067 +ENCODING 917607 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8180 +0281 +8180 +0081 +8300 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0068 +ENCODING 917608 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0201 +8200 +0301 +8280 +0281 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0069 +ENCODING 917609 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0081 +8000 +0181 +8080 +01C1 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E006A +ENCODING 917610 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0081 +8000 +0181 +8080 +0081 +8100 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E006B +ENCODING 917611 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0201 +8200 +0281 +8300 +0281 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E006C +ENCODING 917612 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0301 +8100 +0101 +8100 +0381 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E006D +ENCODING 917613 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8280 +0541 +8540 +0541 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E006E +ENCODING 917614 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8280 +0341 +8240 +0241 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E006F +ENCODING 917615 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8180 +0241 +8240 +0181 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0070 +ENCODING 917616 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8300 +0281 +8300 +0201 +8200 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0071 +ENCODING 917617 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8180 +0281 +81A0 +00C1 +8080 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0072 +ENCODING 917618 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8180 +0101 +8100 +0101 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0073 +ENCODING 917619 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0181 +8200 +0101 +8080 +0301 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0074 +ENCODING 917620 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0101 +8380 +0101 +8100 +0081 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0075 +ENCODING 917621 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8240 +0241 +82C0 +0141 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0076 +ENCODING 917622 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8440 +0281 +8280 +0101 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0077 +ENCODING 917623 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8440 +0541 +8540 +0281 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0078 +ENCODING 917624 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8240 +0181 +8180 +0241 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0079 +ENCODING 917625 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +8240 +02C1 +8140 +0041 +8180 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E007A +ENCODING 917626 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0381 +8080 +0101 +8200 +0381 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E007B +ENCODING 917627 +BBX 16 16 0 -2 +BITMAP +5555 +8080 +0101 +8100 +0201 +8100 +0101 +8080 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E007C +ENCODING 917628 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0101 +8100 +0101 +8100 +0101 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E007D +ENCODING 917629 +BBX 16 16 0 -2 +BITMAP +5555 +8200 +0101 +8100 +0081 +8100 +0101 +8200 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E007E +ENCODING 917630 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0321 +84C0 +0001 +8000 +0001 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E007F +ENCODING 917631 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +3A59 +A354 +32D5 +A254 +3A59 +8000 +0001 +9FE0 +1011 +9008 +1011 +9FE0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0100 +ENCODING 917760 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +8878 +1809 +A810 +0821 +BE20 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0101 +ENCODING 917761 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +8830 +1849 +A830 +0849 +BE30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0102 +ENCODING 917762 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +8830 +1849 +A838 +0809 +BE70 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0103 +ENCODING 917763 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B830 +0449 +9848 +2049 +BC30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0104 +ENCODING 917764 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B810 +0431 +9850 +2011 +BC7C +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0105 +ENCODING 917765 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B870 +0409 +9830 +2041 +BC78 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0106 +ENCODING 917766 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B870 +0409 +9830 +2009 +BC70 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0107 +ENCODING 917767 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B848 +0449 +9878 +2009 +BC08 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0108 +ENCODING 917768 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B878 +0441 +9870 +2009 +BC70 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0109 +ENCODING 917769 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B838 +0441 +9870 +2049 +BC30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E010A +ENCODING 917770 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B878 +0409 +9810 +2021 +BC20 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E010B +ENCODING 917771 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B830 +0449 +9830 +2049 +BC30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E010C +ENCODING 917772 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B830 +0449 +9838 +2009 +BC70 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E010D +ENCODING 917773 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B830 +0449 +9848 +0449 +B830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E010E +ENCODING 917774 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B810 +0431 +9850 +0411 +B87C +0001 +AAAA +ENDCHAR +STARTCHAR uni0E010F +ENCODING 917775 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B870 +0409 +9830 +0441 +B878 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0110 +ENCODING 917776 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B870 +0409 +9830 +0409 +B870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0111 +ENCODING 917777 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B848 +0449 +9878 +0409 +B808 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0112 +ENCODING 917778 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B878 +0441 +9870 +0409 +B870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0113 +ENCODING 917779 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B838 +0441 +9870 +0449 +B830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0114 +ENCODING 917780 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B878 +0409 +9810 +0421 +B820 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0115 +ENCODING 917781 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B830 +0449 +9830 +0449 +B830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0116 +ENCODING 917782 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B830 +0449 +9838 +0409 +B870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0117 +ENCODING 917783 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +A430 +2449 +BC48 +0449 +8430 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0118 +ENCODING 917784 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +A410 +2431 +BC50 +0411 +847C +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0119 +ENCODING 917785 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +A470 +2409 +BC30 +0441 +8478 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E011A +ENCODING 917786 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +A470 +2409 +BC30 +0409 +8470 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E011B +ENCODING 917787 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +A448 +2449 +BC78 +0409 +8408 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E011C +ENCODING 917788 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +A478 +2441 +BC70 +0409 +8470 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E011D +ENCODING 917789 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +A438 +2441 +BC70 +0449 +8430 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E011E +ENCODING 917790 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +A478 +2409 +BC10 +0421 +8420 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E011F +ENCODING 917791 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +A430 +2449 +BC30 +0449 +8430 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0120 +ENCODING 917792 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +A430 +2449 +BC38 +0409 +8470 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0121 +ENCODING 917793 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC30 +2049 +B848 +0449 +B830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0122 +ENCODING 917794 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC10 +2031 +B850 +0411 +B87C +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0123 +ENCODING 917795 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC70 +2009 +B830 +0441 +B878 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0124 +ENCODING 917796 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC70 +2009 +B830 +0409 +B870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0125 +ENCODING 917797 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC48 +2049 +B878 +0409 +B808 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0126 +ENCODING 917798 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC78 +2041 +B870 +0409 +B870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0127 +ENCODING 917799 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC38 +2041 +B870 +0449 +B830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0128 +ENCODING 917800 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC78 +2009 +B810 +0421 +B820 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0129 +ENCODING 917801 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC30 +2049 +B830 +0449 +B830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E012A +ENCODING 917802 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC30 +2049 +B838 +0409 +B870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E012B +ENCODING 917803 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9C30 +2049 +B848 +2449 +9830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E012C +ENCODING 917804 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9C10 +2031 +B850 +2411 +987C +0001 +AAAA +ENDCHAR +STARTCHAR uni0E012D +ENCODING 917805 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9C70 +2009 +B830 +2441 +9878 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E012E +ENCODING 917806 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9C70 +2009 +B830 +2409 +9870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E012F +ENCODING 917807 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9C48 +2049 +B878 +2409 +9808 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0130 +ENCODING 917808 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9C78 +2041 +B870 +2409 +9870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0131 +ENCODING 917809 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9C38 +2041 +B870 +2449 +9830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0132 +ENCODING 917810 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9C78 +2009 +B810 +2421 +9820 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0133 +ENCODING 917811 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9C30 +2049 +B830 +2449 +9830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0134 +ENCODING 917812 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9C30 +2049 +B838 +2409 +9870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0135 +ENCODING 917813 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC30 +0449 +8848 +1049 +9030 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0136 +ENCODING 917814 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC10 +0431 +8850 +1011 +907C +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0137 +ENCODING 917815 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC70 +0409 +8830 +1041 +9078 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0138 +ENCODING 917816 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC70 +0409 +8830 +1009 +9070 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0139 +ENCODING 917817 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC48 +0449 +8878 +1009 +9008 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E013A +ENCODING 917818 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC78 +0441 +8870 +1009 +9070 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E013B +ENCODING 917819 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC38 +0441 +8870 +1049 +9030 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E013C +ENCODING 917820 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC78 +0409 +8810 +1021 +9020 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E013D +ENCODING 917821 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC30 +0449 +8830 +1049 +9030 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E013E +ENCODING 917822 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +BC30 +0449 +8838 +1009 +9070 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E013F +ENCODING 917823 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9830 +2449 +9848 +2449 +9830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0140 +ENCODING 917824 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9810 +2431 +9850 +2411 +987C +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0141 +ENCODING 917825 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9870 +2409 +9830 +2441 +9878 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0142 +ENCODING 917826 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9870 +2409 +9830 +2409 +9870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0143 +ENCODING 917827 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9848 +2449 +9878 +2409 +9808 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0144 +ENCODING 917828 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9878 +2441 +9870 +2409 +9870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0145 +ENCODING 917829 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9838 +2441 +9870 +2449 +9830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0146 +ENCODING 917830 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9878 +2409 +9810 +2421 +9820 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0147 +ENCODING 917831 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9830 +2449 +9830 +2449 +9830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0148 +ENCODING 917832 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9830 +2449 +9838 +2409 +9870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0149 +ENCODING 917833 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9830 +2449 +9C48 +0449 +B830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E014A +ENCODING 917834 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9810 +2431 +9C50 +0411 +B87C +0001 +AAAA +ENDCHAR +STARTCHAR uni0E014B +ENCODING 917835 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9870 +2409 +9C30 +0441 +B878 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E014C +ENCODING 917836 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9870 +2409 +9C30 +0409 +B870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E014D +ENCODING 917837 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9848 +2449 +9C78 +0409 +B808 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E014E +ENCODING 917838 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9878 +2441 +9C70 +0409 +B870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E014F +ENCODING 917839 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9838 +2441 +9C70 +0449 +B830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0150 +ENCODING 917840 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9878 +2409 +9C10 +0421 +B820 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0151 +ENCODING 917841 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9830 +2449 +9C30 +0449 +B830 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0152 +ENCODING 917842 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9830 +2449 +9C38 +0409 +B870 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0153 +ENCODING 917843 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +32A9 +92A8 +12A9 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0154 +ENCODING 917844 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +32B1 +9290 +1291 +B938 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0155 +ENCODING 917845 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9130 +3289 +9290 +12A1 +B938 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0156 +ENCODING 917846 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9130 +3289 +9290 +1289 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0157 +ENCODING 917847 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9128 +32A9 +92B8 +1289 +B908 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0158 +ENCODING 917848 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9138 +32A1 +92B0 +1289 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0159 +ENCODING 917849 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9118 +32A1 +92B0 +12A9 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E015A +ENCODING 917850 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9138 +3289 +9288 +1291 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E015B +ENCODING 917851 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +32A9 +9290 +12A9 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E015C +ENCODING 917852 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +32A9 +9298 +1289 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E015D +ENCODING 917853 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +3329 +9128 +1129 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E015E +ENCODING 917854 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +3331 +9110 +1111 +BBB8 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E015F +ENCODING 917855 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9130 +3309 +9110 +1121 +BBB8 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0160 +ENCODING 917856 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9130 +3309 +9110 +1109 +BBB0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0161 +ENCODING 917857 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9128 +3329 +9138 +1109 +BB88 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0162 +ENCODING 917858 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9138 +3321 +9130 +1109 +BBB0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0163 +ENCODING 917859 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9118 +3321 +9130 +1129 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0164 +ENCODING 917860 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9138 +3309 +9108 +1111 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0165 +ENCODING 917861 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +3329 +9110 +1129 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0166 +ENCODING 917862 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +3329 +9118 +1109 +BBB0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0167 +ENCODING 917863 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9310 +30A9 +9128 +1229 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0168 +ENCODING 917864 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9310 +30B1 +9110 +1211 +BBB8 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0169 +ENCODING 917865 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9330 +3089 +9110 +1221 +BBB8 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E016A +ENCODING 917866 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9330 +3089 +9110 +1209 +BBB0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E016B +ENCODING 917867 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9328 +30A9 +9138 +1209 +BB88 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E016C +ENCODING 917868 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9338 +30A1 +9130 +1209 +BBB0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E016D +ENCODING 917869 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9318 +30A1 +9130 +1229 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E016E +ENCODING 917870 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9338 +3089 +9108 +1211 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E016F +ENCODING 917871 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9310 +30A9 +9110 +1229 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0170 +ENCODING 917872 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9310 +30A9 +9118 +1209 +BBB0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0171 +ENCODING 917873 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9310 +30A9 +9128 +10A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0172 +ENCODING 917874 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9310 +30B1 +9110 +1091 +BB38 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0173 +ENCODING 917875 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9330 +3089 +9110 +10A1 +BB38 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0174 +ENCODING 917876 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9330 +3089 +9110 +1089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0175 +ENCODING 917877 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9328 +30A9 +9138 +1089 +BB08 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0176 +ENCODING 917878 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9338 +30A1 +9130 +1089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0177 +ENCODING 917879 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9318 +30A1 +9130 +10A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0178 +ENCODING 917880 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9338 +3089 +9108 +1091 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0179 +ENCODING 917881 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9310 +30A9 +9110 +10A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E017A +ENCODING 917882 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9310 +30A9 +9118 +1089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E017B +ENCODING 917883 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9290 +32A9 +93A8 +10A9 +B890 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E017C +ENCODING 917884 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9290 +32B1 +9390 +1091 +B8B8 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E017D +ENCODING 917885 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +92B0 +3289 +9390 +10A1 +B8B8 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E017E +ENCODING 917886 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +92B0 +3289 +9390 +1089 +B8B0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E017F +ENCODING 917887 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +92A8 +32A9 +93B8 +1089 +B888 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0180 +ENCODING 917888 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +92B8 +32A1 +93B0 +1089 +B8B0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0181 +ENCODING 917889 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9298 +32A1 +93B0 +10A9 +B890 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0182 +ENCODING 917890 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +92B8 +3289 +9388 +1091 +B890 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0183 +ENCODING 917891 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9290 +32A9 +9390 +10A9 +B890 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0184 +ENCODING 917892 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9290 +32A9 +9398 +1089 +B8B0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0185 +ENCODING 917893 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9390 +3229 +9328 +10A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0186 +ENCODING 917894 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9390 +3231 +9310 +1091 +BB38 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0187 +ENCODING 917895 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +93B0 +3209 +9310 +10A1 +BB38 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0188 +ENCODING 917896 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +93B0 +3209 +9310 +1089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0189 +ENCODING 917897 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +93A8 +3229 +9338 +1089 +BB08 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E018A +ENCODING 917898 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +93B8 +3221 +9330 +1089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E018B +ENCODING 917899 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9398 +3221 +9330 +10A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E018C +ENCODING 917900 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +93B8 +3209 +9308 +1091 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E018D +ENCODING 917901 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9390 +3229 +9310 +10A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E018E +ENCODING 917902 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9390 +3229 +9318 +1089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E018F +ENCODING 917903 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9190 +3229 +9328 +12A9 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0190 +ENCODING 917904 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9190 +3231 +9310 +1291 +B938 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0191 +ENCODING 917905 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +91B0 +3209 +9310 +12A1 +B938 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0192 +ENCODING 917906 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +91B0 +3209 +9310 +1289 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0193 +ENCODING 917907 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +91A8 +3229 +9338 +1289 +B908 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0194 +ENCODING 917908 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +91B8 +3221 +9330 +1289 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0195 +ENCODING 917909 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9198 +3221 +9330 +12A9 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0196 +ENCODING 917910 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +91B8 +3209 +9308 +1291 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0197 +ENCODING 917911 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9190 +3229 +9310 +12A9 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0198 +ENCODING 917912 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9190 +3229 +9318 +1289 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E0199 +ENCODING 917913 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9390 +30A9 +90A8 +1129 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E019A +ENCODING 917914 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9390 +30B1 +9090 +1111 +B938 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E019B +ENCODING 917915 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +93B0 +3089 +9090 +1121 +B938 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E019C +ENCODING 917916 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +93B0 +3089 +9090 +1109 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E019D +ENCODING 917917 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +93A8 +30A9 +90B8 +1109 +B908 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E019E +ENCODING 917918 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +93B8 +30A1 +90B0 +1109 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E019F +ENCODING 917919 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9398 +30A1 +90B0 +1129 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01A0 +ENCODING 917920 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +93B8 +3089 +9088 +1111 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01A1 +ENCODING 917921 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9390 +30A9 +9090 +1129 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01A2 +ENCODING 917922 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9390 +30A9 +9098 +1109 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01A3 +ENCODING 917923 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +32A9 +9128 +12A9 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01A4 +ENCODING 917924 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +32B1 +9110 +1291 +B938 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01A5 +ENCODING 917925 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9130 +3289 +9110 +12A1 +B938 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01A6 +ENCODING 917926 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9130 +3289 +9110 +1289 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01A7 +ENCODING 917927 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9128 +32A9 +9138 +1289 +B908 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01A8 +ENCODING 917928 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9138 +32A1 +9130 +1289 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01A9 +ENCODING 917929 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9118 +32A1 +9130 +12A9 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01AA +ENCODING 917930 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9138 +3289 +9108 +1291 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01AB +ENCODING 917931 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +32A9 +9110 +12A9 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01AC +ENCODING 917932 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +32A9 +9118 +1289 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01AD +ENCODING 917933 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +32A9 +91A8 +10A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01AE +ENCODING 917934 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +32B1 +9190 +1091 +BB38 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01AF +ENCODING 917935 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9130 +3289 +9190 +10A1 +BB38 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01B0 +ENCODING 917936 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9130 +3289 +9190 +1089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01B1 +ENCODING 917937 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9128 +32A9 +91B8 +1089 +BB08 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01B2 +ENCODING 917938 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9138 +32A1 +91B0 +1089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01B3 +ENCODING 917939 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9118 +32A1 +91B0 +10A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01B4 +ENCODING 917940 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9138 +3289 +9188 +1091 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01B5 +ENCODING 917941 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +32A9 +9190 +10A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01B6 +ENCODING 917942 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +9110 +32A9 +9198 +1089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01B7 +ENCODING 917943 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B110 +0AA9 +92A8 +22A9 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01B8 +ENCODING 917944 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B110 +0AB1 +9290 +2291 +B938 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01B9 +ENCODING 917945 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B130 +0A89 +9290 +22A1 +B938 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01BA +ENCODING 917946 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B130 +0A89 +9290 +2289 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01BB +ENCODING 917947 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B128 +0AA9 +92B8 +2289 +B908 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01BC +ENCODING 917948 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B138 +0AA1 +92B0 +2289 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01BD +ENCODING 917949 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B118 +0AA1 +92B0 +22A9 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01BE +ENCODING 917950 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B138 +0A89 +9288 +2291 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01BF +ENCODING 917951 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B110 +0AA9 +9290 +22A9 +B910 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01C0 +ENCODING 917952 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B110 +0AA9 +9298 +2289 +B930 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01C1 +ENCODING 917953 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B110 +0B29 +9128 +2129 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01C2 +ENCODING 917954 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B110 +0B31 +9110 +2111 +BBB8 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01C3 +ENCODING 917955 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B130 +0B09 +9110 +2121 +BBB8 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01C4 +ENCODING 917956 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B130 +0B09 +9110 +2109 +BBB0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01C5 +ENCODING 917957 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B128 +0B29 +9138 +2109 +BB88 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01C6 +ENCODING 917958 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B138 +0B21 +9130 +2109 +BBB0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01C7 +ENCODING 917959 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B118 +0B21 +9130 +2129 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01C8 +ENCODING 917960 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B138 +0B09 +9108 +2111 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01C9 +ENCODING 917961 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B110 +0B29 +9110 +2129 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01CA +ENCODING 917962 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B110 +0B29 +9118 +2109 +BBB0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01CB +ENCODING 917963 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B310 +08A9 +9128 +2229 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01CC +ENCODING 917964 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B310 +08B1 +9110 +2211 +BBB8 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01CD +ENCODING 917965 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B330 +0889 +9110 +2221 +BBB8 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01CE +ENCODING 917966 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B330 +0889 +9110 +2209 +BBB0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01CF +ENCODING 917967 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B328 +08A9 +9138 +2209 +BB88 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01D0 +ENCODING 917968 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B338 +08A1 +9130 +2209 +BBB0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01D1 +ENCODING 917969 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B318 +08A1 +9130 +2229 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01D2 +ENCODING 917970 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B338 +0889 +9108 +2211 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01D3 +ENCODING 917971 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B310 +08A9 +9110 +2229 +BB90 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01D4 +ENCODING 917972 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B310 +08A9 +9118 +2209 +BBB0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01D5 +ENCODING 917973 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B310 +08A9 +9128 +20A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01D6 +ENCODING 917974 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B310 +08B1 +9110 +2091 +BB38 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01D7 +ENCODING 917975 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B330 +0889 +9110 +20A1 +BB38 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01D8 +ENCODING 917976 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B330 +0889 +9110 +2089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01D9 +ENCODING 917977 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B328 +08A9 +9138 +2089 +BB08 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01DA +ENCODING 917978 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B338 +08A1 +9130 +2089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01DB +ENCODING 917979 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B318 +08A1 +9130 +20A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01DC +ENCODING 917980 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B338 +0889 +9108 +2091 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01DD +ENCODING 917981 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B310 +08A9 +9110 +20A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01DE +ENCODING 917982 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B310 +08A9 +9118 +2089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01DF +ENCODING 917983 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B290 +0AA9 +93A8 +20A9 +B890 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01E0 +ENCODING 917984 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B290 +0AB1 +9390 +2091 +B8B8 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01E1 +ENCODING 917985 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B2B0 +0A89 +9390 +20A1 +B8B8 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01E2 +ENCODING 917986 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B2B0 +0A89 +9390 +2089 +B8B0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01E3 +ENCODING 917987 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B2A8 +0AA9 +93B8 +2089 +B888 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01E4 +ENCODING 917988 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B2B8 +0AA1 +93B0 +2089 +B8B0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01E5 +ENCODING 917989 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B298 +0AA1 +93B0 +20A9 +B890 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01E6 +ENCODING 917990 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B2B8 +0A89 +9388 +2091 +B890 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01E7 +ENCODING 917991 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B290 +0AA9 +9390 +20A9 +B890 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01E8 +ENCODING 917992 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B290 +0AA9 +9398 +2089 +B8B0 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01E9 +ENCODING 917993 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B390 +0A29 +9328 +20A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01EA +ENCODING 917994 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B390 +0A31 +9310 +2091 +BB38 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01EB +ENCODING 917995 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B3B0 +0A09 +9310 +20A1 +BB38 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01EC +ENCODING 917996 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B3B0 +0A09 +9310 +2089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01ED +ENCODING 917997 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B3A8 +0A29 +9338 +2089 +BB08 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01EE +ENCODING 917998 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B3B8 +0A21 +9330 +2089 +BB30 +0001 +AAAA +ENDCHAR +STARTCHAR uni0E01EF +ENCODING 917999 +BBX 16 16 0 -2 +BITMAP +5555 +8000 +0001 +A238 +2241 +A238 +1405 +8838 +0001 +B398 +0A21 +9330 +20A9 +BB10 +0001 +AAAA +ENDCHAR +STARTCHAR .notdef +ENCODING -1 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 6 11 1 0 +BITMAP +FC +CC +B4 +B4 +F4 +EC +EC +FC +EC +EC +FC +ENDCHAR +STARTCHAR .null +ENCODING -1 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR nonmarkingreturn +ENCODING -1 +SWIDTH 500 0 +DWIDTH 8 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +ENDFONT diff --git a/contrib/fonts/UnifontFullMediumMono.ttf b/contrib/fonts/UnifontExMono.ttf similarity index 66% rename from contrib/fonts/UnifontFullMediumMono.ttf rename to contrib/fonts/UnifontExMono.ttf index 7254709669f..5c6eba9eef4 100644 Binary files a/contrib/fonts/UnifontFullMediumMono.ttf and b/contrib/fonts/UnifontExMono.ttf differ diff --git a/contrib/fonts/UnifontExMonoAnk.fontx2 b/contrib/fonts/UnifontExMonoAnk.fontx2 new file mode 100644 index 00000000000..dd26b25b0f9 Binary files /dev/null and b/contrib/fonts/UnifontExMonoAnk.fontx2 differ diff --git a/contrib/fonts/UnifontExMonoKanji.fontx2 b/contrib/fonts/UnifontExMonoKanji.fontx2 new file mode 100644 index 00000000000..3974a2ca7f5 Binary files /dev/null and b/contrib/fonts/UnifontExMonoKanji.fontx2 differ diff --git a/contrib/icons/dosbox-x_os2.ico b/contrib/icons/dosbox-x_os2.ico new file mode 100644 index 00000000000..60c3958af04 Binary files /dev/null and b/contrib/icons/dosbox-x_os2.ico differ diff --git a/contrib/linux/com.dosbox_x.DOSBox-X.metainfo.xml.in b/contrib/linux/com.dosbox_x.DOSBox-X.metainfo.xml.in index c96ba7c5254..85e84cde3c2 100644 --- a/contrib/linux/com.dosbox_x.DOSBox-X.metainfo.xml.in +++ b/contrib/linux/com.dosbox_x.DOSBox-X.metainfo.xml.in @@ -1,16 +1,21 @@ - + com.dosbox_x.DOSBox-X GPL-2.0 CC0-1.0 DOSBox-X x86/DOS emulator with sound and graphics + com.dosbox_x.DOSBox-X.desktop + + DOSBox-X team + - Emulation + Game + Emulator - + @@ -43,8 +48,6 @@ - - DOSBox-X team noreply@dosbox-x.com

DOSBox-X is an open-source DOS emulator for running DOS games and applications. @@ -53,33 +56,8 @@ Compared to DOSBox, DOSBox-X is much more flexible and provides more features.

DOSBox-X emulates a PC necessary for running many DOS games and applications that simply cannot be run on modern PCs and operating systems, similar to DOSBox. However, while the main focus of DOSBox is for running DOS games, DOSBox-X goes much further than this. Started as a fork of the DOSBox project, it retains compatibility with the wide base of DOS games and DOS gaming DOSBox was designed for. But it is also a platform for running DOS applications, including emulating the environments to run Windows 3.x, 9x and ME and software written for those versions of Windows. By adding official support for Windows 95, 98, and ME emulation and acceleration, we hope that those old Windows games and applications could be enjoyed or used once more. Moreover, DOSBox-X adds support for emulating the NEC PC-98 such that you can also play PC-98 games with it.

-

-DOSBox-X emulates a legacy IBM PC and DOS environment, and has many emulation options and features such as: +

DOSBox-X emulates a legacy IBM PC and DOS environment, and has many emulation options which you can find documented on the DOSBox-X website.

-
    -
  • Emulate several PC variants: IBM PC, IBM PCjr, Tandy 1000, Amstrad and NEC PC-98
  • -
  • CPUs: 8086, 286, 386, 486, Pentium, Pentium Pro, Pentium MMX, Pentium II and III
  • -
  • Graphics chipsets: MDA, Hercules, CGA, EGA, MCGA, VGA and SVGA (S3 Trio64, ET3000, ET4000, Paradise)
  • -
  • Sound options: Sound Blaster series, Gravis Ultrasound, Disney Sound source and more audio options
  • -
  • MIDI: FluidSynth, Roland MT-32 and General MIDI options
  • -
  • Extended Serial, Parallel and Game port support
  • -
  • Printer support (real or virtual) and emulation options
  • -
  • 3dfx Voodoo emulation with Glide wrapper support
  • -
  • Network emulation: IPX over UDP, and serial modem
  • -
  • Network adapter emulation: NE2000 (pcap or slirp backend)
  • -
  • Mounting a host directory as a harddisk, floppy or CD-ROM drive
  • -
  • Mounting harddisk images, floppy disk and CD-ROM images, including IDE emulation
  • -
  • ISO9660, FAT12, FAT16 and FAT32 filesystem support, including long filenames (LFN)
  • -
  • Support for running real DOS systems (MS-DOS, IBM PC DOS, FreeDOS)
  • -
  • Support for running Windows 1.0 to Windows 3.11, Windows 9x and Windows ME
  • -
  • GUI drop-down menu for easier usage
  • -
  • Built-in graphical configuration tool
  • -
  • Save and load state with support for save files and up to 100 save slots
  • -
  • More DOS commands, and ability to add your own programs to the virtual Z: drive
  • -
  • Support for clipboard copy & paste and scalable TrueType fonts (TTF)
  • -
  • Various output options, including output scaling (such as pixel-perfect scaling) and OpenGL shaders
  • -
- With the help of DOSBox-X, you can run plenty of the old classics that don't run on your new computer!
https://dosbox-x.com https://github.com/joncampbell123/dosbox-x/issues @@ -89,9 +67,4 @@ DOSBox-X emulates a legacy IBM PC and DOS environment, and has many emulation op pointing gamepad - - application/x-cd-image - application/x-cue - application/x-raw-disk-image -
diff --git a/contrib/linux/com.dosbox_x.DOSBox-X.yaml b/contrib/linux/com.dosbox_x.DOSBox-X.yaml index 748d9ebd264..0b7b82089ef 100644 --- a/contrib/linux/com.dosbox_x.DOSBox-X.yaml +++ b/contrib/linux/com.dosbox_x.DOSBox-X.yaml @@ -1,15 +1,15 @@ --- app-id: com.dosbox_x.DOSBox-X runtime: org.freedesktop.Platform -runtime-version: '22.08' +runtime-version: '25.08' sdk: org.freedesktop.Sdk command: dosbox-x finish-args: # flatpak permissions - - --device=all # needed for gamepads and serial/parallel + - --device=all # needed for OpenGL, gamepads and serial/parallel - --share=ipc # needed for X11 - - --share=network # needed for networking (NE2000, IPX) + - --share=network # Needed for NE2000, IPX and serial over TCP/IP - --socket=x11 # default to X11 due to fullscreen issues - --socket=pulseaudio - --filesystem=home @@ -31,8 +31,8 @@ modules: - --disable-static sources: - type: archive - url: https://ftp.osuosl.org/pub/blfs/conglomeration/glu/glu-9.0.2.tar.xz - sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4 + url: https://ftp.osuosl.org/pub/blfs/conglomeration/glu/glu-9.0.3.tar.xz + sha256: bd43fe12f374b1192eb15fe20e45ff456b9bc26ab57f0eee919f96ca0f8a330f cleanup: - /include - /lib/*.a @@ -52,10 +52,10 @@ modules: - "*.so" sources: - type: archive - url: https://github.com/FluidSynth/fluidsynth/archive/v2.2.9.tar.gz - sha256: bc62494ec2554fdcfc01512a2580f12fc1e1b01ce37a18b370dd7902af7a8159 + url: https://github.com/FluidSynth/fluidsynth/archive/refs/tags/v2.5.0.tar.gz + sha256: e4ae831ce02f38b5594ab4dacb11c1a4067ca65ea183523655ebdc9c1b2b92a1 - # Build libslirp for networking + # Build libslirp for TCP/IP networking - name: libslirp buildsystem: meson cleanup: @@ -64,7 +64,7 @@ modules: sources: - type: git url: https://gitlab.freedesktop.org/slirp/libslirp - tag: "v4.7.0" + tag: "v4.9.1" x-checker-data: type: anitya project-id: 96796 @@ -75,6 +75,7 @@ modules: - name: dosbox-x buildsystem: autotools config-opts: + - --enable-core-inline - --enable-debug=heavy - --enable-sdl2 sources: @@ -83,3 +84,5 @@ modules: post-install: - install -Dm644 /app/share/icons/hicolor/scalable/apps/dosbox-x.svg /app/share/icons/hicolor/scalable/apps/${FLATPAK_ID}.svg - desktop-file-edit --set-key=Icon --set-value=${FLATPAK_ID} /app/share/applications/${FLATPAK_ID}.desktop + - install -Dm644 com.dosbox_x.DOSBox-X.metainfo.xml /app/share/metainfo/${FLATPAK_ID}.metainfo.xml +... diff --git a/contrib/linux/dosbox-x.asciidoc b/contrib/linux/dosbox-x.asciidoc index 35ce9d61fe7..56e9828074f 100644 --- a/contrib/linux/dosbox-x.asciidoc +++ b/contrib/linux/dosbox-x.asciidoc @@ -233,7 +233,7 @@ Set the default working path for DOSBox-X. Use the default config settings for DOSBox-X. *-defaultmapper*:: Use the default key mappings for DOSBox-X. -*-data-host-forced*:: +*-date-host-forced*:: Force synchronization of date and time with the host. *-display2* [_color_]:: Enable both standard & monochrome dual-screen mode. The monochrome display defaults to white, but can optionally be set to _green_ or _amber_. diff --git a/contrib/macos/dosbox-x.plist.in b/contrib/macos/dosbox-x.plist.in index 30364558b06..298c210cff0 100644 --- a/contrib/macos/dosbox-x.plist.in +++ b/contrib/macos/dosbox-x.plist.in @@ -10,8 +10,12 @@ English CFBundleExecutable dosbox-x + CFBundleName + DOSBox-X + CFBundleDisplayName + DOSBox-X CFBundleGetInfoString - @PACKAGE_VERSION@, Copyright 2022 DOSBox-X + @PACKAGE_VERSION@, Copyright @COPYRIGHT_YEAR@ The DOSBox-X Team CFBundleIconFile dosbox-x.icns CFBundleIdentifier @@ -24,14 +28,14 @@ CFBundlePackageType APPL CFBundleShortVersionString - @PACKAGE_VERSION@ + @PACKAGE_VERSION@ Commit @COMMIT_HASH@ CFBundleSignature DOSB CFBundleVersion - @PACKAGE_VERSION@ + @MACOSX_ARCH@ @SDL_STRING@ NSHumanReadableCopyright - Copyright 2022 DOSBox-X + Copyright @COPYRIGHT_YEAR@ The DOSBox-X Team LSMinimumSystemVersion - 10.8 + @MACOSX_DEPLOYMENT_TARGET@ diff --git a/contrib/macos/readme.txt b/contrib/macos/readme.txt index ad9866d2ef2..91c55d6f3c6 100644 --- a/contrib/macos/readme.txt +++ b/contrib/macos/readme.txt @@ -42,6 +42,22 @@ You should be able to solve the problem by running the following command once in Using the Terminal app, go to the unzipped folder of the macOS zip package. (You should find two folders dosbox-x and dosbox-x-sdl2) Run xattr -cr . +- Mouse doesn't work + Try pressing CTRL+F10 or middle button of your mouse. + You can also try mouse drivers such as CuteMouse or VirtualBox Mouse Driver(vbmouse). + +- Incorrect calculation results + Floating point precision is an issue for certain compilers and non-Intel CPU platforms. + Possible measures: + o Disable FPU support (fpu=false) + o Change CPU core to `dynamic` (core=dynamic / core=dynamic_x86 / core=dynamic_rec) + +- A game silently crashes or fails to launch, or a log shows "Detected 'Packed file is corrupt' message" + Possible measures: + o Run your program by `loadfix -a your_program` + o Run `A20GATE OFF` before launching your program + o Change the `exepack` option in the dosbox-x.conf to 'a20off' or 'unpack' + Further Information =================== Please visit the DOSBox-X homepage for the latest information about DOSBox-X: diff --git a/contrib/mappings/regenerate.sh b/contrib/mappings/regenerate.sh index 8d454a1f741..d1b09ac8ac7 100755 --- a/contrib/mappings/regenerate.sh +++ b/contrib/mappings/regenerate.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh ./sb2u.pl cp437_to_unicode ../../include/cp437_uni.h || exit 1 ./sb2u.pl cp737_to_unicode ../../include/cp737_uni.h || exit 1 ./sb2u.pl cp775_to_unicode ../../include/cp775_uni.h || exit 1 diff --git a/contrib/translations/de/de_DE.lng b/contrib/translations/de/de_DE.lng index b129e33493c..add7582affa 100644 --- a/contrib/translations/de/de_DE.lng +++ b/contrib/translations/de/de_DE.lng @@ -1,6 +1,6 @@ :DOSBOX-X:LANGUAGE:German :DOSBOX-X:CODEPAGE:858 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK: :PROGRAM_BOOT_BOOTING Starte von Laufwerk @@ -273,7 +273,7 @@ Aktuelle Lautstärkeeinstellung Sound Blaster Konfiguration . :CURRENT_MIDICONFIG -Aktuelle MIDI Konfiguration +Aktuelle MIDI/OPL Konfiguration . :CREATE_IMAGE Leeres Laufwerksimage erstellen @@ -2619,6 +2619,9 @@ Schnellstartprogramm... :MENU:mapper_shutdown Beende DOSBox-X . +:MENU:mapper_capkeyboard +Capture keyboard +. :MENU:mapper_capmouse Maus einfangen . @@ -3187,7 +3190,7 @@ Zeige Lautstärkeregler Zeige Sound Blaster Konfiguration . :MENU:midi_info -Zeige MIDI Konfiguration +Zeige MIDI/OPL Konfiguration . :MENU:DOSMenu DOS @@ -3882,3 +3885,837 @@ CPU: simpler Core :MAPPER:togmenu Menüleiste ein/aus . +:PROGRAM_FLAGSAVE_UNFLAGALL +All files unflagged for saving. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +File %s unflagged for saving. + +. +:PROGRAM_FLAGSAVE_FLAGGED +File already flagged for saving - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Too many files to flag for saving. + +. +:PROGRAM_FLAGSAVE_SAVED +File %s flagged for saving + +. +:PROGRAM_FLAGSAVE_LIST +Files flagged for saving: +. +:PROGRAM_FLAGSAVE_HLP +Marks or flags files to be saved for the save state feature. + +FLAGSAVE [file(s) [/F] [/R]] [/U] + + file(s) Specifies one or more files to be flagged for saving. + /F Forces to flag the file(s) even if they are not found. + /R Removes flags from the specified file(s). + /U Removes flags from all flagged files. + +Type FLAGSAVE without a parameter to list flagged files. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh hook has not been set. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh hook has already been set. + +. +:PROGRAM_INT2FDBG_HELP +Hooks INT 2Fh for debugging purposes. + +INT2FDBG [option] + /I Installs hook + +It will hook INT 2Fh at the top of the call chain for debugging information. + +Type INT2FDBG without a parameter to show the current hook status. +. +:PROGRAM_SET80x25 +Changes to 80x25 text mode. +. +:PROGRAM_SET80x43 +Changes to 80x43 text mode. +. +:PROGRAM_SET80x50 +Changes to 80x50 text mode. +. +:PROGRAM_SET80x60 +Changes to 80x60 text mode. +. +:PROGRAM_SET132x25 +Changes to 132x25 text mode. +. +:PROGRAM_SET132x43 +Changes to 132x43 text mode. +. +:PROGRAM_SET132x50 +Changes to 132x50 text mode. +. +:PROGRAM_SET132x60 +Changes to 132x60 text mode. +. +:PROGRAM_RESCAN_HELP +Rescans for changes on mounted drives made on the host by clearing caches. + +RESCAN [/A] [/Q] +RESCAN [drive:] [/Q] + + [/A] Rescan all drives + [/Q] Enable quiet mode + [drive:] The drive to rescan + +Type RESCAN with no parameters to rescan the current drive. + +. +:PROGRAM_CFGTOOL_HELP +Starts DOSBox-X's graphical configuration tool. + +CFGTOOL + +Note: You can also use CONFIG command for command-line configurations. +. +:PROGRAM_IMGSWAP_HELP +Swaps floppy, hard drive and optical disc images. + +←[32;1mIMGSWAP←[0m ←[37;1mdrive←[0m ←[36;1m[position]←[0m + ←[37;1mdrive←[0m Drive letter to swap the image. + ←[36;1m[position]←[0m Disk position to swap to. +. +:PROGRAM_INTRO_HELP +A full-screen introduction to DOSBox-X. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS disk index does not have an image assigned. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Invalid mount number. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Invalid fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Invalid size parameter. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +Drive number %d is not mounted. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Incorrect IMGMOUNT unmount usage. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Invalid drive letter. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Partitions cannot be mounted in conflict with the standard INT 13h hard disk +allotment. Choose a different drive letter to mount to. +. +:PROGRAM_ELTORITO_LETTER +El Torito emulation requires a proper CD-ROM drive letter. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +El Torito CD-ROM drive specified already exists as a non-CD-ROM device +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +El Torito CD-ROM drive specified is not actually a CD-ROM drive. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito emulation must be used with -t floppy at this time. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM boot record not found. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito entries unreadable. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +El Torito bootable floppy not found. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Unable to locate bootable section +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito boot sector unreadable +. +:PROGRAM_IMGMAKE_ALIGNMENT +Invalid alignment +. +:PROGRAM_IMGMAKE_PARTOFS +Invalid -partofs +. +:PROGRAM_IMGMAKE_FAT +Invalid -fat option. Must be 12, 16, or 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +Invalid -fatcopies option +. +:PROGRAM_IMGMAKE_SPC +Invalid -spc option, out of range +. +:PROGRAM_IMGMAKE_SPC2 +Invalid -spc option, must be a power of 2 +. +:PROGRAM_IMGMAKE_ROOTDIR +Invalid -rootdir option +. +PROGRAM_IMGMAKE_BOOTSECT +Invalid bootsector position +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Sanity check failed: FAT tables not aligned +. +:PROGRAM_IMGMAKE_SECTPERFAT +Error: Generated filesystem has more than 256 sectors per FAT and is not FAT32 +. +:PROGRAM_IMGMAKE_VOLSIZE +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_CLUSTERS +Error: Generated filesystem has too few clusters given the parameters +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Warning: Cluster count is too high given the volume size. + Reporting a smaller sector count. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Sanity check failed: First cluster not aligned +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +WARNING: Cluster sizes >= 64KB are not compatible with MS-DOS and SCANDISK +. +:PROGRAM_BOOT_UNSUPPORTED +Unsupported boot mode +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +Existing overlay has been replaced with new overlay. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS handle %u: unable to free +. +:PROGRAM_LOADFIX_XMS_FREE +XMS handle %u: unable to free +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +Unable to allocate EMS block +. +PROGRAM_LOADFIX_NOEMS +EMS not active +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +Unable to allocate XMS block +. +:PROGRAM_LOADFIX_NOXMS +XMS not active +. +:PROGRAM_LOADFIX_NOALLOC +Lowest MCB is above 64KB, nothing allocated +. +:PROGRAM_BOOT_SWAP_ALREADY +Multiple disk images specified and another drive is already connected to the swap list +. +:PROGRAM_BOOT_NOT_SPECIFIED +No images specified +. +:PROGRAM_BOOT_IS_PC88 +The D88 image appears to target PC-88 and cannot be booted. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Bytes/sector too large +. +:PROGRAM_BOOT_DRIVE_READERROR +Error reading drive +. +:PROGRAM_START_HELP_WIN +Starts a separate window to run a specified program or command. + +START [+|-|_] command [arguments] + + [+|-|_]: To maximize/minimize/hide the program. + The options /MAX, /MIN, /HID are also accepted. + command: The command, program or file to start. + arguments: Arguments to pass to the application. + +START opens the Windows command prompt automatically to run these commands +and wait for a key press before exiting (specified by "startincon" option): +%s + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_HELP +Starts a separate window to run a specified program or command. + +START /OPEN file +START command [arguments] + + /OPEN: To open a file or URL with the associated program. + file: The file or URL to open with the associated program. + command: The command or program to start or run. + arguments: Arguments to pass to the application. + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_COMPLETED +The command execution is completed. +. +:PROGRAM_START_COMMAND +Starting %s... +. +:PROGRAM_START_CTRLC +(Press Ctrl+C to exit immediately) +. +:PROGRAM_START_HOST_ERROR +Error: START cannot launch application to run on your current host system. +. +:PROGRAM_START_LAUNCH_ERROR +Error: START could not launch application. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +Do not specify files when mounting floppy drives from El Torito bootable CDs +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +Do not specify files when mounting RAM drives +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +Unable to open '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 image '%s' is not supported +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Unable to detect geometry +. +:PROGRAM_IMGMOUNT_DOS_VERSION +Mounting this image file requires a reported DOS version of %u.%u or higher. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Floppy size not recognized +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +Multiple images given and another drive already uses multiple images +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Multiple disk images not supported for that drive +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +Cannot mount hard drive in floppy position. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +Cannot mount floppy in hard drive position. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito bootable CD: -fs iso mounting not supported +. +:PROGRAM_MODE_STATUS +Status for device CON: +---------------------- +Columns=%d +Lines=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +Code page operation not supported on this device +. +:PROGRAM_MODE_RATE_DELAY +Rate and delay must be specified together +. +:PROGRAM_UTF8_HELP +Converts UTF-8 text to view in the current code page. + +UTF8 < [drive:][path]filename +command-name | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +No input text found. +. +:PROGRAM_UTF8_INVALIDCP +Invalid code page for text conversion. +. +:PROGRAM_UTF8_NOT_UTF8 +The input text is UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +An error occurred during text conversion. +. +:PROGRAM_UTF16_HELP +Converts UTF-16 text to view in the current code page. + +UTF16 [/BE|/LE] < [drive:][path]filename +command-name | UTF16 [/BE|/LE] + + /BE Use UTF-16 Big Endian + /LE Use UTF-16 Little Endian +. +:PROGRAM_VTEXT_HELP +Changes V-text mode for the DOS/V emulation. + +VTEXT [mode] + + [mode] can be 0, 1, 2, for no V-text, V-text 1, and V-text 2 respectively. + +Type VTEXT without a parameter to show the current V-text mode status. +. +:PROGRAM_NMITEST_HELP +Generates a non-maskable interrupt (NMI). + +NMITEST + +Note: This is a debugging tool to test if the interrupt handler works properly. +. +:PROGRAM_NMITEST_GENERATE_NMI +Generating a non-maskable interrupt (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +Captures or releases the mouse inside DOSBox-X. + +CAPMOUSE [/C|/R] + + /C Capture the mouse + /R Release the mouse +. +:PROGRAM_CAPMOUSE_MOUSE +Mouse +. +:PROGRAM_CAPMOUSE_CURRENTLY +is currently +. +:PROGRAM_CAPMOUSE_CAPTURED +captured +. +:PROGRAM_CAPMOUSE_RELEASED +released +. +:PROGRAM_AUTOTYPE_HELP +Performs scripted keyboard entry into a running DOS program. + +AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]] + +Where: + -list: prints all available button names. + -w WAIT: seconds before typing begins. Two second default; max of 30. + -p PACE: seconds between each keystroke. Half-second default; max of 10. + + The sequence is comprised of one or more space-separated buttons. + Autotyping begins after WAIT seconds, and each button is entered + every PACE seconds. The , character inserts an extra PACE delay. + +Some examples: + ←[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter←[0m + ←[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: The mapper has no key bindings +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: bounding %s value of %.2f to %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s value '%s' is not a valid floating point number +. +:PROGRAM_ADDKEY_HELP +Generates artificial keypresses. + +ADDKEY [pmsec] [key] + +For example, the command below types "dir" followed by ENTER after 1 second: + +ADDKEY p1000 d i r enter + +You could also try AUTOTYPE command instead of this command to perform +scripted keyboard entry into a running DOS program. +. +:PROGRAM_SETCOLOR_HELP +Views or changes the text-mode color scheme settings. + +SETCOLOR [color# [value]] + +For example: + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Change Color #0 to the specified color value + + ←[32;1mSETCOLOR 7 -←[0m +Return Color #7 to the default color value + + ←[32;1mSETCOLOR 3 +←[0m +Return Color #3 to the preset color value + + ←[32;1mSETCOLOR MONO←[0m +Display current MONO mode status + +To change the current background and foreground colors, use COLOR command. +. +:PROGRAM_SETCOLOR_STATUS +MONO mode status: %s (video mode %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +active +. +:PROGRAM_SETCOLOR_INACTIVE +inactive +. +:PROGRAM_SETCOLOR_UNAVAILABLE +unavailable +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO mode status => active (video mode 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO mode status => inactive (video mode 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +Failed to change MONO mode +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +Must be + or - for MONO: %s +. +:PROGRAM_SETCOLOR_COLOR +Color %d: (%d,%d,%d) or #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Invalid color number - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Invalid color value - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Changing color scheme is not supported for the current video mode. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Unknown boothax mode +. +:PROGRAM_BOOT_SPECIFY_FILE +Must specify BIOS image to boot +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +Unable to open BIOS image +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Must specify BIOS file to load. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Can't open a file +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS File too large +. +:PROGRAM_DELTREE_HELP +Deletes a directory and all the subdirectories and files in it. + +To delete one or more files and directories: +DELTREE [/Y] [drive:]path [[drive:]path[...]] + + /Y Suppresses prompting to confirm you want to delete + the subdirectory. + [drive:]path Specifies the name of the directory you want to delete. + +Note: Use DELTREE cautiously. Every file and subdirectory within the +specified directory will be deleted. + +. +:PROGRAM_TREE_HELP +Graphically displays the directory structure of a drive or path. + +TREE [drive:][path] [/F] [/A] + + /F Displays the names of the files in each directory. + /A Uses ASCII instead of extended characters. + +. +:PROGRAM_TITLE_HELP +Sets the window title for the DOSBox-X window. + +TITLE [string] + + string Specifies the title for the DOSBox-X window. + +. +:PROGRAM_COLOR_HELP +Sets the default console foreground and background colors. + +COLOR [attr] + + attr Specifies color attribute of console output + +Color attributes are specified by TWO hex digits -- the first +corresponds to the background; the second to the foreground. +Each digit can be any of the following values: + + 0 = Black 8 = Gray + 1 = Blue 9 = Light Blue + 2 = Green A = Light Green + 3 = Aqua B = Light Aqua + 4 = Red C = Light Red + 5 = Purple D = Light Purple + 6 = Yellow E = Light Yellow + 7 = White F = Bright White + +If no argument is given, this command restores the original color. + +The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute +the COLOR command with a foreground and background color that are the same. + +Example: "COLOR fc" produces light red on bright white. + +. +:PROGRAM_SWITCH_LANG +You have changed the active code page to %d. +Do you want to load language file %s for this code page ? +. +:PROGRAM_ALREADY_MOUNTED +Drive %s: is already mounted. Unmount it first, and then try again. +. +:PROGRAM_DRIVE_NO_EXIST +Drive %s: does not exist in the system. +. +:PROGRAM_DRIVE_WARN +Do you really want to give DOSBox-X access to your real %s drive %s ? +. +:DRIVE_TYPE_FLOPPY +floppy +. +:DRIVE_TYPE_REMOVABLE +removable +. +:DRIVE_TYPE_NETWORK +network +. +:DRIVE_TYPE_HARD +hard +. +:DRIVE_TYPE_LOCAL +local +. +:DRIVE_TYPE_CDROM +CD-ROM +. +:PROGRAM_CDDRIVE_WARN +CD drive %s is currently mounted with the image: + +%s + +Do you want to change the CD image now? +. +:PROGRAM_CDMOUNT_ERROR +Could not mount the selected CD image. +. +:ELTORITO_IMAGE +El Torito floppy image +. +:RAM_FLOPPY_IMAGE +RAM floppy image +. +:PROGRAM_FLOPPY_WARN +Floppy drive %s is currently mounted with the image: + +%s + +Do you want to change the floppy disk image now? +. +:PROGRAM_FLOPPYMOUNT_ERROR +Could not mount the selected floppy disk image. +. +:PROGRAM_MOUNT_MORE_IMAGES +Do you want to mount more image file(s)? +. +:PROGRAM_MOUNT_PATH_TOOLONG +The path for the file(s) to mount is too long. +. +:PROGRAM_BOOT_FAILED +Drive %s: failed to boot. +. +:PROGRAM_MOUNT_FAILED +Drive %s: failed to mount. +. +:PROGRAM_MOUNT_IMAGE +Mounted %s to Drive %s: +%s %s +. +:ARCHIVE +archive +. +:DISK_IMAGE +disk image +. +:READONLY_MODE +Read-only mode +. +:PROGRAM_MOUNT_SELECT_DRIVE +Select a drive/directory to mount for Drive %s: as %s +. +:PROGRAM_MOUNT_CDROM_SUPPORT +Mounting a directory as CD-ROM gives an limited support. +. +:PROGRAM_MOUNT_NOT_MOUNTED +Drive %s: is not yet mounted. +. +:PROGRAM_PROGRAM_ALREADY +Another program is already running. +. +:PROGRAM_SHELL_ALREADY +Another shell is currently running. +. +:PROGRAM_MOUNT_SUCCESS +Drive %s is now mounted to: +%s +. +:PROGRAM_WARN_QUICKLAUNCH +Quick launch automatically mounts drive C in DOSBox-X. +Drive C has already been mounted. Do you want to continue? +. +:PROGRAM_NO_EXECUTABLE +Executable file not found. +. +:PROGRAM_EXEC_FINISHED +Program has finished execution. Do you want to unmount Drive %s now? +. +:PROGRAM_ASK_CHCP +Drive %c: may require code page %d to be properly accessed. + +Do you want to change the current code page to %d now? +. +:PROGRAM_CHANGING_CODEPAGE +Changing code page +. +:IMAGEMOUNT_CHANGE_DOSVER +Mounting this type of disk images requires a reported DOS version of %s or higher. +Do you want to auto - change the reported DOS version to %s now and mount the disk image ? +. +:MENU_DRIVE_NOTEXIST +Drive does not exist or is mounted from disk image. +. +:MENU_SAVE_IMAGE_FAILED +Failed to save disk image. +. +:MENU_JP_CPONLY +This function is only available for the Japanese code page (932). +. +:MENU_CH_CPONLY +This function is only available for the Chinese code pages (936, 950, or 951). +. +:MENU_GLIDE_ERROR +Glide passthrough cannot be enabled. Check the Glide wrapper installation. +. +:MENU_HIGH_INTENSITY_ERROR +High intensity is not supported for the current video mode. +. +:MENU_SAVE_FILE_ERROR +Cannot save to the file: %s +. +:MENU_INT2F_SUCCESS +The INT 2Fh hook has been successfully set. +. +:MENU_INT2F_ALREADY_SET +The INT 2Fh hook was already set up. +. +:QUIT_DISABLED +Quitting from DOSBox-X with this is currently disabled. +. +:QUIT_CONFIRM +This will quit from DOSBox-X. +Are you sure? +. +:QUIT_GUEST_DISABLED +You cannot quit DOSBox-X while running a guest system. +. +:QUIT_GUEST_CONFIRM +You are currently running a guest system. +Are you sure to quit anyway now? +. +:QUIT_FILE_OPEN_DISABLED +You cannot quit DOSBox-X while one or more files are open. +. +:QUIT_FILE_OPEN_CONFIRM +It may be unsafe to quit from DOSBox-X right now +because one or more files are currently open. +Are you sure to quit anyway now? +. +:QUIT_PROGRAM_DISABLED +You cannot quit DOSBox-X while running a program or game. +. +:QUIT_PROGRAM_CONFIRM +You are currently running a program or game. +Are you sure to quit anyway now? +. +:LANG_JP_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the Japanese PC-98 or JEGA/AX system. + +Are you sure to use the language file for this machine type? +. +:LANG_DOSV_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the current DOS/V system. + +Are you sure to use the language file for this system type? +. +:LANG_CHANGE_CP +The specified language file uses code page %d. Do you want to change to this code page accordingly?. +. +:SCALER_LOAD_WARN +This scaler may not work properly or have undesired effect: + +%s + +Do you want to force load the scaler? +. +:PIXEL_SHADER_WARN +This pixel shader may be unneeded or have undesired effect: + +%s + +Do you want to load the pixel shader anyway? + +(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message) +. +:PIXEL_SHADER_LOADED +Loaded pixel shader - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +Mapper Editor is not currently available. +. +:OPL_REC_COMPLETED +Saved Raw OPL output to the file: + +%s +. +:OPL_CAPTURE_FAILED +Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format. +. +:TTF_DBCS_ONLY +This function is only available for the Chinese/Japanese/Korean code pages. +. +:SAVE_FAILED +Failed to save the current state. +. +:SAVE_CORRUPTED +Save state corrupted! Program may not work. +. +:SAVE_SCREENSHOT +Saved screenshot to the file: + +%s +. diff --git a/contrib/translations/de/de_pc98.lng b/contrib/translations/de/de_pc98.lng index 88d7636a85d..1ab32968b80 100644 --- a/contrib/translations/de/de_pc98.lng +++ b/contrib/translations/de/de_pc98.lng @@ -1,6 +1,6 @@ :DOSBOX-X:LANGUAGE:German :DOSBOX-X:CODEPAGE:858 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK: :PROGRAM_BOOT_BOOTING Starte von Laufwerk @@ -273,7 +273,7 @@ Aktuelle Lautstaerkeeinstellung Sound Blaster Konfiguration . :CURRENT_MIDICONFIG -Aktuelle MIDI Konfiguration +Aktuelle MIDI/OPL Konfiguration . :CREATE_IMAGE Leeres Laufwerksimage erstellen @@ -2609,6 +2609,9 @@ Schnellstartprogramm... :MENU:mapper_shutdown Beende DOSBox-X . +:MENU:mapper_capkeyboard +Capture keyboard +. :MENU:mapper_capmouse Maus einfangen . @@ -3159,7 +3162,7 @@ Zeige Lautstaerkeregler Zeige Sound Blaster Konfiguration . :MENU:midi_info -Zeige MIDI Konfiguration +Zeige MIDI/OPL Konfiguration . :MENU:DOSMenu DOS @@ -3851,3 +3854,837 @@ CPU: simpler Core :MAPPER:togmenu Menueleiste ein/aus . +:PROGRAM_FLAGSAVE_UNFLAGALL +All files unflagged for saving. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +File %s unflagged for saving. + +. +:PROGRAM_FLAGSAVE_FLAGGED +File already flagged for saving - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Too many files to flag for saving. + +. +:PROGRAM_FLAGSAVE_SAVED +File %s flagged for saving + +. +:PROGRAM_FLAGSAVE_LIST +Files flagged for saving: +. +:PROGRAM_FLAGSAVE_HLP +Marks or flags files to be saved for the save state feature. + +FLAGSAVE [file(s) [/F] [/R]] [/U] + + file(s) Specifies one or more files to be flagged for saving. + /F Forces to flag the file(s) even if they are not found. + /R Removes flags from the specified file(s). + /U Removes flags from all flagged files. + +Type FLAGSAVE without a parameter to list flagged files. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh hook has not been set. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh hook has already been set. + +. +:PROGRAM_INT2FDBG_HELP +Hooks INT 2Fh for debugging purposes. + +INT2FDBG [option] + /I Installs hook + +It will hook INT 2Fh at the top of the call chain for debugging information. + +Type INT2FDBG without a parameter to show the current hook status. +. +:PROGRAM_SET80x25 +Changes to 80x25 text mode. +. +:PROGRAM_SET80x43 +Changes to 80x43 text mode. +. +:PROGRAM_SET80x50 +Changes to 80x50 text mode. +. +:PROGRAM_SET80x60 +Changes to 80x60 text mode. +. +:PROGRAM_SET132x25 +Changes to 132x25 text mode. +. +:PROGRAM_SET132x43 +Changes to 132x43 text mode. +. +:PROGRAM_SET132x50 +Changes to 132x50 text mode. +. +:PROGRAM_SET132x60 +Changes to 132x60 text mode. +. +:PROGRAM_RESCAN_HELP +Rescans for changes on mounted drives made on the host by clearing caches. + +RESCAN [/A] [/Q] +RESCAN [drive:] [/Q] + + [/A] Rescan all drives + [/Q] Enable quiet mode + [drive:] The drive to rescan + +Type RESCAN with no parameters to rescan the current drive. + +. +:PROGRAM_CFGTOOL_HELP +Starts DOSBox-X's graphical configuration tool. + +CFGTOOL + +Note: You can also use CONFIG command for command-line configurations. +. +:PROGRAM_IMGSWAP_HELP +Swaps floppy, hard drive and optical disc images. + +←[32;1mIMGSWAP←[0m ←[37;1mdrive←[0m ←[36;1m[position]←[0m + ←[37;1mdrive←[0m Drive letter to swap the image. + ←[36;1m[position]←[0m Disk position to swap to. +. +:PROGRAM_INTRO_HELP +A full-screen introduction to DOSBox-X. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS disk index does not have an image assigned. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Invalid mount number. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Invalid fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Invalid size parameter. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +Drive number %d is not mounted. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Incorrect IMGMOUNT unmount usage. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Invalid drive letter. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Partitions cannot be mounted in conflict with the standard INT 13h hard disk +allotment. Choose a different drive letter to mount to. +. +:PROGRAM_ELTORITO_LETTER +El Torito emulation requires a proper CD-ROM drive letter. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +El Torito CD-ROM drive specified already exists as a non-CD-ROM device +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +El Torito CD-ROM drive specified is not actually a CD-ROM drive. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito emulation must be used with -t floppy at this time. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM boot record not found. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito entries unreadable. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +El Torito bootable floppy not found. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Unable to locate bootable section +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito boot sector unreadable +. +:PROGRAM_IMGMAKE_ALIGNMENT +Invalid alignment +. +:PROGRAM_IMGMAKE_PARTOFS +Invalid -partofs +. +:PROGRAM_IMGMAKE_FAT +Invalid -fat option. Must be 12, 16, or 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +Invalid -fatcopies option +. +:PROGRAM_IMGMAKE_SPC +Invalid -spc option, out of range +. +:PROGRAM_IMGMAKE_SPC2 +Invalid -spc option, must be a power of 2 +. +:PROGRAM_IMGMAKE_ROOTDIR +Invalid -rootdir option +. +PROGRAM_IMGMAKE_BOOTSECT +Invalid bootsector position +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Sanity check failed: FAT tables not aligned +. +:PROGRAM_IMGMAKE_SECTPERFAT +Error: Generated filesystem has more than 256 sectors per FAT and is not FAT32 +. +:PROGRAM_IMGMAKE_VOLSIZE +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_CLUSTERS +Error: Generated filesystem has too few clusters given the parameters +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Warning: Cluster count is too high given the volume size. + Reporting a smaller sector count. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Sanity check failed: First cluster not aligned +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +WARNING: Cluster sizes >= 64KB are not compatible with MS-DOS and SCANDISK +. +:PROGRAM_BOOT_UNSUPPORTED +Unsupported boot mode +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +Existing overlay has been replaced with new overlay. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS handle %u: unable to free +. +:PROGRAM_LOADFIX_XMS_FREE +XMS handle %u: unable to free +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +Unable to allocate EMS block +. +PROGRAM_LOADFIX_NOEMS +EMS not active +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +Unable to allocate XMS block +. +:PROGRAM_LOADFIX_NOXMS +XMS not active +. +:PROGRAM_LOADFIX_NOALLOC +Lowest MCB is above 64KB, nothing allocated +. +:PROGRAM_BOOT_SWAP_ALREADY +Multiple disk images specified and another drive is already connected to the swap list +. +:PROGRAM_BOOT_NOT_SPECIFIED +No images specified +. +:PROGRAM_BOOT_IS_PC88 +The D88 image appears to target PC-88 and cannot be booted. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Bytes/sector too large +. +:PROGRAM_BOOT_DRIVE_READERROR +Error reading drive +. +:PROGRAM_START_HELP_WIN +Starts a separate window to run a specified program or command. + +START [+|-|_] command [arguments] + + [+|-|_]: To maximize/minimize/hide the program. + The options /MAX, /MIN, /HID are also accepted. + command: The command, program or file to start. + arguments: Arguments to pass to the application. + +START opens the Windows command prompt automatically to run these commands +and wait for a key press before exiting (specified by "startincon" option): +%s + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_HELP +Starts a separate window to run a specified program or command. + +START /OPEN file +START command [arguments] + + /OPEN: To open a file or URL with the associated program. + file: The file or URL to open with the associated program. + command: The command or program to start or run. + arguments: Arguments to pass to the application. + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_COMPLETED +The command execution is completed. +. +:PROGRAM_START_COMMAND +Starting %s... +. +:PROGRAM_START_CTRLC +(Press Ctrl+C to exit immediately) +. +:PROGRAM_START_HOST_ERROR +Error: START cannot launch application to run on your current host system. +. +:PROGRAM_START_LAUNCH_ERROR +Error: START could not launch application. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +Do not specify files when mounting floppy drives from El Torito bootable CDs +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +Do not specify files when mounting RAM drives +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +Unable to open '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 image '%s' is not supported +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Unable to detect geometry +. +:PROGRAM_IMGMOUNT_DOS_VERSION +Mounting this image file requires a reported DOS version of %u.%u or higher. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Floppy size not recognized +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +Multiple images given and another drive already uses multiple images +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Multiple disk images not supported for that drive +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +Cannot mount hard drive in floppy position. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +Cannot mount floppy in hard drive position. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito bootable CD: -fs iso mounting not supported +. +:PROGRAM_MODE_STATUS +Status for device CON: +---------------------- +Columns=%d +Lines=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +Code page operation not supported on this device +. +:PROGRAM_MODE_RATE_DELAY +Rate and delay must be specified together +. +:PROGRAM_UTF8_HELP +Converts UTF-8 text to view in the current code page. + +UTF8 < [drive:][path]filename +command-name | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +No input text found. +. +:PROGRAM_UTF8_INVALIDCP +Invalid code page for text conversion. +. +:PROGRAM_UTF8_NOT_UTF8 +The input text is UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +An error occurred during text conversion. +. +:PROGRAM_UTF16_HELP +Converts UTF-16 text to view in the current code page. + +UTF16 [/BE|/LE] < [drive:][path]filename +command-name | UTF16 [/BE|/LE] + + /BE Use UTF-16 Big Endian + /LE Use UTF-16 Little Endian +. +:PROGRAM_VTEXT_HELP +Changes V-text mode for the DOS/V emulation. + +VTEXT [mode] + + [mode] can be 0, 1, 2, for no V-text, V-text 1, and V-text 2 respectively. + +Type VTEXT without a parameter to show the current V-text mode status. +. +:PROGRAM_NMITEST_HELP +Generates a non-maskable interrupt (NMI). + +NMITEST + +Note: This is a debugging tool to test if the interrupt handler works properly. +. +:PROGRAM_NMITEST_GENERATE_NMI +Generating a non-maskable interrupt (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +Captures or releases the mouse inside DOSBox-X. + +CAPMOUSE [/C|/R] + + /C Capture the mouse + /R Release the mouse +. +:PROGRAM_CAPMOUSE_MOUSE +Mouse +. +:PROGRAM_CAPMOUSE_CURRENTLY +is currently +. +:PROGRAM_CAPMOUSE_CAPTURED +captured +. +:PROGRAM_CAPMOUSE_RELEASED +released +. +:PROGRAM_AUTOTYPE_HELP +Performs scripted keyboard entry into a running DOS program. + +AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]] + +Where: + -list: prints all available button names. + -w WAIT: seconds before typing begins. Two second default; max of 30. + -p PACE: seconds between each keystroke. Half-second default; max of 10. + + The sequence is comprised of one or more space-separated buttons. + Autotyping begins after WAIT seconds, and each button is entered + every PACE seconds. The , character inserts an extra PACE delay. + +Some examples: + ←[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter←[0m + ←[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: The mapper has no key bindings +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: bounding %s value of %.2f to %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s value '%s' is not a valid floating point number +. +:PROGRAM_ADDKEY_HELP +Generates artificial keypresses. + +ADDKEY [pmsec] [key] + +For example, the command below types "dir" followed by ENTER after 1 second: + +ADDKEY p1000 d i r enter + +You could also try AUTOTYPE command instead of this command to perform +scripted keyboard entry into a running DOS program. +. +:PROGRAM_SETCOLOR_HELP +Views or changes the text-mode color scheme settings. + +SETCOLOR [color# [value]] + +For example: + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Change Color #0 to the specified color value + + ←[32;1mSETCOLOR 7 -←[0m +Return Color #7 to the default color value + + ←[32;1mSETCOLOR 3 +←[0m +Return Color #3 to the preset color value + + ←[32;1mSETCOLOR MONO←[0m +Display current MONO mode status + +To change the current background and foreground colors, use COLOR command. +. +:PROGRAM_SETCOLOR_STATUS +MONO mode status: %s (video mode %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +active +. +:PROGRAM_SETCOLOR_INACTIVE +inactive +. +:PROGRAM_SETCOLOR_UNAVAILABLE +unavailable +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO mode status => active (video mode 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO mode status => inactive (video mode 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +Failed to change MONO mode +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +Must be + or - for MONO: %s +. +:PROGRAM_SETCOLOR_COLOR +Color %d: (%d,%d,%d) or #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Invalid color number - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Invalid color value - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Changing color scheme is not supported for the current video mode. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Unknown boothax mode +. +:PROGRAM_BOOT_SPECIFY_FILE +Must specify BIOS image to boot +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +Unable to open BIOS image +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Must specify BIOS file to load. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Can't open a file +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS File too large +. +:PROGRAM_DELTREE_HELP +Deletes a directory and all the subdirectories and files in it. + +To delete one or more files and directories: +DELTREE [/Y] [drive:]path [[drive:]path[...]] + + /Y Suppresses prompting to confirm you want to delete + the subdirectory. + [drive:]path Specifies the name of the directory you want to delete. + +Note: Use DELTREE cautiously. Every file and subdirectory within the +specified directory will be deleted. + +. +:PROGRAM_TREE_HELP +Graphically displays the directory structure of a drive or path. + +TREE [drive:][path] [/F] [/A] + + /F Displays the names of the files in each directory. + /A Uses ASCII instead of extended characters. + +. +:PROGRAM_TITLE_HELP +Sets the window title for the DOSBox-X window. + +TITLE [string] + + string Specifies the title for the DOSBox-X window. + +. +:PROGRAM_COLOR_HELP +Sets the default console foreground and background colors. + +COLOR [attr] + + attr Specifies color attribute of console output + +Color attributes are specified by TWO hex digits -- the first +corresponds to the background; the second to the foreground. +Each digit can be any of the following values: + + 0 = Black 8 = Gray + 1 = Blue 9 = Light Blue + 2 = Green A = Light Green + 3 = Aqua B = Light Aqua + 4 = Red C = Light Red + 5 = Purple D = Light Purple + 6 = Yellow E = Light Yellow + 7 = White F = Bright White + +If no argument is given, this command restores the original color. + +The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute +the COLOR command with a foreground and background color that are the same. + +Example: "COLOR fc" produces light red on bright white. + +. +:PROGRAM_SWITCH_LANG +You have changed the active code page to %d. +Do you want to load language file %s for this code page ? +. +:PROGRAM_ALREADY_MOUNTED +Drive %s: is already mounted. Unmount it first, and then try again. +. +:PROGRAM_DRIVE_NO_EXIST +Drive %s: does not exist in the system. +. +:PROGRAM_DRIVE_WARN +Do you really want to give DOSBox-X access to your real %s drive %s ? +. +:DRIVE_TYPE_FLOPPY +floppy +. +:DRIVE_TYPE_REMOVABLE +removable +. +:DRIVE_TYPE_NETWORK +network +. +:DRIVE_TYPE_HARD +hard +. +:DRIVE_TYPE_LOCAL +local +. +:DRIVE_TYPE_CDROM +CD-ROM +. +:PROGRAM_CDDRIVE_WARN +CD drive %s is currently mounted with the image: + +%s + +Do you want to change the CD image now? +. +:PROGRAM_CDMOUNT_ERROR +Could not mount the selected CD image. +. +:ELTORITO_IMAGE +El Torito floppy image +. +:RAM_FLOPPY_IMAGE +RAM floppy image +. +:PROGRAM_FLOPPY_WARN +Floppy drive %s is currently mounted with the image: + +%s + +Do you want to change the floppy disk image now? +. +:PROGRAM_FLOPPYMOUNT_ERROR +Could not mount the selected floppy disk image. +. +:PROGRAM_MOUNT_MORE_IMAGES +Do you want to mount more image file(s)? +. +:PROGRAM_MOUNT_PATH_TOOLONG +The path for the file(s) to mount is too long. +. +:PROGRAM_BOOT_FAILED +Drive %s: failed to boot. +. +:PROGRAM_MOUNT_FAILED +Drive %s: failed to mount. +. +:PROGRAM_MOUNT_IMAGE +Mounted %s to Drive %s: +%s %s +. +:ARCHIVE +archive +. +:DISK_IMAGE +disk image +. +:READONLY_MODE +Read-only mode +. +:PROGRAM_MOUNT_SELECT_DRIVE +Select a drive/directory to mount for Drive %s: as %s +. +:PROGRAM_MOUNT_CDROM_SUPPORT +Mounting a directory as CD-ROM gives an limited support. +. +:PROGRAM_MOUNT_NOT_MOUNTED +Drive %s: is not yet mounted. +. +:PROGRAM_PROGRAM_ALREADY +Another program is already running. +. +:PROGRAM_SHELL_ALREADY +Another shell is currently running. +. +:PROGRAM_MOUNT_SUCCESS +Drive %s is now mounted to: +%s +. +:PROGRAM_WARN_QUICKLAUNCH +Quick launch automatically mounts drive C in DOSBox-X. +Drive C has already been mounted. Do you want to continue? +. +:PROGRAM_NO_EXECUTABLE +Executable file not found. +. +:PROGRAM_EXEC_FINISHED +Program has finished execution. Do you want to unmount Drive %s now? +. +:PROGRAM_ASK_CHCP +Drive %c: may require code page %d to be properly accessed. + +Do you want to change the current code page to %d now? +. +:PROGRAM_CHANGING_CODEPAGE +Changing code page +. +:IMAGEMOUNT_CHANGE_DOSVER +Mounting this type of disk images requires a reported DOS version of %s or higher. +Do you want to auto - change the reported DOS version to %s now and mount the disk image ? +. +:MENU_DRIVE_NOTEXIST +Drive does not exist or is mounted from disk image. +. +:MENU_SAVE_IMAGE_FAILED +Failed to save disk image. +. +:MENU_JP_CPONLY +This function is only available for the Japanese code page (932). +. +:MENU_CH_CPONLY +This function is only available for the Chinese code pages (936, 950, or 951). +. +:MENU_GLIDE_ERROR +Glide passthrough cannot be enabled. Check the Glide wrapper installation. +. +:MENU_HIGH_INTENSITY_ERROR +High intensity is not supported for the current video mode. +. +:MENU_SAVE_FILE_ERROR +Cannot save to the file: %s +. +:MENU_INT2F_SUCCESS +The INT 2Fh hook has been successfully set. +. +:MENU_INT2F_ALREADY_SET +The INT 2Fh hook was already set up. +. +:QUIT_DISABLED +Quitting from DOSBox-X with this is currently disabled. +. +:QUIT_CONFIRM +This will quit from DOSBox-X. +Are you sure? +. +:QUIT_GUEST_DISABLED +You cannot quit DOSBox-X while running a guest system. +. +:QUIT_GUEST_CONFIRM +You are currently running a guest system. +Are you sure to quit anyway now? +. +:QUIT_FILE_OPEN_DISABLED +You cannot quit DOSBox-X while one or more files are open. +. +:QUIT_FILE_OPEN_CONFIRM +It may be unsafe to quit from DOSBox-X right now +because one or more files are currently open. +Are you sure to quit anyway now? +. +:QUIT_PROGRAM_DISABLED +You cannot quit DOSBox-X while running a program or game. +. +:QUIT_PROGRAM_CONFIRM +You are currently running a program or game. +Are you sure to quit anyway now? +. +:LANG_JP_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the Japanese PC-98 or JEGA/AX system. + +Are you sure to use the language file for this machine type? +. +:LANG_DOSV_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the current DOS/V system. + +Are you sure to use the language file for this system type? +. +:LANG_CHANGE_CP +The specified language file uses code page %d. Do you want to change to this code page accordingly?. +. +:SCALER_LOAD_WARN +This scaler may not work properly or have undesired effect: + +%s + +Do you want to force load the scaler? +. +:PIXEL_SHADER_WARN +This pixel shader may be unneeded or have undesired effect: + +%s + +Do you want to load the pixel shader anyway? + +(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message) +. +:PIXEL_SHADER_LOADED +Loaded pixel shader - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +Mapper Editor is not currently available. +. +:OPL_REC_COMPLETED +Saved Raw OPL output to the file: + +%s +. +:OPL_CAPTURE_FAILED +Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format. +. +:TTF_DBCS_ONLY +This function is only available for the Chinese/Japanese/Korean code pages. +. +:SAVE_FAILED +Failed to save the current state. +. +:SAVE_CORRUPTED +Save state corrupted! Program may not work. +. +:SAVE_SCREENSHOT +Saved screenshot to the file: + +%s +. diff --git a/contrib/translations/en/en_US.lng b/contrib/translations/en/en_US.lng index cf4ad2d49b6..ceded975914 100644 --- a/contrib/translations/en/en_US.lng +++ b/contrib/translations/en/en_US.lng @@ -1,6 +1,6 @@ :DOSBOX-X:LANGUAGE:English (United States) :DOSBOX-X:CODEPAGE:437 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK: :AUTOEXEC_CONFIGFILE_HELP Lines in this section will be run at startup. @@ -50,6 +50,9 @@ Cancel :CLOSE Close . +:THEME +Theme +. :DEBUGCMD Enter Debugger Command . @@ -144,7 +147,7 @@ Current sound mixer volumes Sound Blaster configuration . :CURRENT_MIDICONFIG -Current MIDI configuration +Current MIDI/OPL configuration . :CREATE_IMAGE Create blank disk image @@ -2406,6 +2409,9 @@ Quick launch program... :MENU:mapper_shutdown Quit from DOSBox-X . +:MENU:mapper_capkeyboard +Capture keyboard +. :MENU:mapper_capmouse Capture mouse . @@ -2974,7 +2980,7 @@ Show sound mixer volumes Show Sound Blaster configuration . :MENU:midi_info -Show MIDI device configuration +Show MIDI/OPL device configuration . :MENU:DOSMenu DOS @@ -3669,3 +3675,852 @@ CPU: simple core :MAPPER:togmenu Toggle menu bar . +:PROGRAM_FLAGSAVE_UNFLAGALL +All files unflagged for saving. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +File %s unflagged for saving. + +. +:PROGRAM_FLAGSAVE_FLAGGED +File already flagged for saving - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Too many files to flag for saving. + +. +:PROGRAM_FLAGSAVE_SAVED +File %s flagged for saving + +. +:PROGRAM_FLAGSAVE_LIST +Files flagged for saving: +. +:PROGRAM_FLAGSAVE_HLP +Marks or flags files to be saved for the save state feature. + +FLAGSAVE [file(s) [/F] [/R]] [/U] + + file(s) Specifies one or more files to be flagged for saving. + /F Forces to flag the file(s) even if they are not found. + /R Removes flags from the specified file(s). + /U Removes flags from all flagged files. + +Type FLAGSAVE without a parameter to list flagged files. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh hook has not been set. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh hook has already been set. + +. +:PROGRAM_INT2FDBG_HELP +Hooks INT 2Fh for debugging purposes. + +INT2FDBG [option] + /I Installs hook + +It will hook INT 2Fh at the top of the call chain for debugging information. + +Type INT2FDBG without a parameter to show the current hook status. +. +:PROGRAM_SET80x25 +Changes to 80x25 text mode. +. +:PROGRAM_SET80x43 +Changes to 80x43 text mode. +. +:PROGRAM_SET80x50 +Changes to 80x50 text mode. +. +:PROGRAM_SET80x60 +Changes to 80x60 text mode. +. +:PROGRAM_SET132x25 +Changes to 132x25 text mode. +. +:PROGRAM_SET132x43 +Changes to 132x43 text mode. +. +:PROGRAM_SET132x50 +Changes to 132x50 text mode. +. +:PROGRAM_SET132x60 +Changes to 132x60 text mode. +. +:PROGRAM_RESCAN_HELP +Rescans for changes on mounted drives made on the host by clearing caches. + +RESCAN [/A] [/Q] +RESCAN [drive:] [/Q] + + [/A] Rescan all drives + [/Q] Enable quiet mode + [drive:] The drive to rescan + +Type RESCAN with no parameters to rescan the current drive. + +. +:PROGRAM_CFGTOOL_HELP +Starts DOSBox-X's graphical configuration tool. + +CFGTOOL + +Note: You can also use CONFIG command for command-line configurations. +. +:PROGRAM_IMGSWAP_HELP +Swaps floppy, hard drive and optical disc images. + +←[32;1mIMGSWAP←[0m ←[37;1mdrive←[0m ←[36;1m[position]←[0m + ←[37;1mdrive←[0m Drive letter to swap the image. + ←[36;1m[position]←[0m Disk position to swap to. +. +:PROGRAM_INTRO_HELP +A full-screen introduction to DOSBox-X. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS disk index does not have an image assigned. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Invalid mount number. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Invalid fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Invalid size parameter. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +Drive number %d is not mounted. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Incorrect IMGMOUNT unmount usage. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Invalid drive letter. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Partitions cannot be mounted in conflict with the standard INT 13h hard disk +allotment. Choose a different drive letter to mount to. +. +:PROGRAM_ELTORITO_LETTER +El Torito emulation requires a proper CD-ROM drive letter. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +El Torito CD-ROM drive specified already exists as a non-CD-ROM device +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +El Torito CD-ROM drive specified is not actually a CD-ROM drive. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito emulation must be used with -t floppy at this time. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM boot record not found. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito entries unreadable. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +El Torito bootable floppy not found. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Unable to locate bootable section +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito boot sector unreadable +. +:PROGRAM_IMGMAKE_ALIGNMENT +Invalid alignment +. +:PROGRAM_IMGMAKE_PARTOFS +Invalid -partofs +. +:PROGRAM_IMGMAKE_FAT +Invalid -fat option. Must be 12, 16, or 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +Invalid -fatcopies option +. +:PROGRAM_IMGMAKE_SPC +Invalid -spc option, out of range +. +:PROGRAM_IMGMAKE_SPC2 +Invalid -spc option, must be a power of 2 +. +:PROGRAM_IMGMAKE_ROOTDIR +Invalid -rootdir option +. +PROGRAM_IMGMAKE_BOOTSECT +Invalid bootsector position +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Sanity check failed: FAT tables not aligned +. +:PROGRAM_IMGMAKE_SECTPERFAT +Error: Generated filesystem has more than 256 sectors per FAT and is not FAT32 +. +:PROGRAM_IMGMAKE_VOLSIZE +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_CLUSTERS +Error: Generated filesystem has too few clusters given the parameters +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Warning: Cluster count is too high given the volume size. + Reporting a smaller sector count. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Sanity check failed: First cluster not aligned +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +WARNING: Cluster sizes >= 64KB are not compatible with MS-DOS and SCANDISK +. +:PROGRAM_BOOT_UNSUPPORTED +Unsupported boot mode +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +Existing overlay has been replaced with new overlay. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS handle %u: unable to free +. +:PROGRAM_LOADFIX_XMS_FREE +XMS handle %u: unable to free +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +Unable to allocate EMS block +. +PROGRAM_LOADFIX_NOEMS +EMS not active +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +Unable to allocate XMS block +. +:PROGRAM_LOADFIX_NOXMS +XMS not active +. +:PROGRAM_LOADFIX_NOALLOC +Lowest MCB is above 64KB, nothing allocated +. +:PROGRAM_BOOT_SWAP_ALREADY +Multiple disk images specified and another drive is already connected to the swap list +. +:PROGRAM_BOOT_NOT_SPECIFIED +No images specified +. +:PROGRAM_BOOT_IS_PC88 +The D88 image appears to target PC-88 and cannot be booted. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Bytes/sector too large +. +:PROGRAM_BOOT_DRIVE_READERROR +Error reading drive +. +:PROGRAM_START_HELP_WIN +Starts a separate window to run a specified program or command. + +START [+|-|_] command [arguments] + + [+|-|_]: To maximize/minimize/hide the program. + The options /MAX, /MIN, /HID are also accepted. + command: The command, program or file to start. + arguments: Arguments to pass to the application. + +START opens the Windows command prompt automatically to run these commands +and wait for a key press before exiting (specified by "startincon" option): +%s + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_HELP +Starts a separate window to run a specified program or command. + +START /OPEN file +START command [arguments] + + /OPEN: To open a file or URL with the associated program. + file: The file or URL to open with the associated program. + command: The command or program to start or run. + arguments: Arguments to pass to the application. + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_COMPLETED +The command execution is completed. +. +:PROGRAM_START_COMMAND +Starting %s... +. +:PROGRAM_START_CTRLC +(Press Ctrl+C to exit immediately) +. +:PROGRAM_START_HOST_ERROR +Error: START cannot launch application to run on your current host system. +. +:PROGRAM_START_LAUNCH_ERROR +Error: START could not launch application. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +Do not specify files when mounting floppy drives from El Torito bootable CDs +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +Do not specify files when mounting RAM drives +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +Unable to open '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 image '%s' is not supported +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Unable to detect geometry +. +:PROGRAM_IMGMOUNT_DOS_VERSION +Mounting this image file requires a reported DOS version of %u.%u or higher. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Floppy size not recognized +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +Multiple images given and another drive already uses multiple images +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Multiple disk images not supported for that drive +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +Cannot mount hard drive in floppy position. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +Cannot mount floppy in hard drive position. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito bootable CD: -fs iso mounting not supported +. +:PROGRAM_MODE_STATUS +Status for device CON: +---------------------- +Columns=%d +Lines=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +Code page operation not supported on this device +. +:PROGRAM_MODE_RATE_DELAY +Rate and delay must be specified together +. +:PROGRAM_UTF8_HELP +Converts UTF-8 text to view in the current code page. + +UTF8 < [drive:][path]filename +command-name | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +No input text found. +. +:PROGRAM_UTF8_INVALIDCP +Invalid code page for text conversion. +. +:PROGRAM_UTF8_NOT_UTF8 +The input text is UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +An error occurred during text conversion. +. +:PROGRAM_UTF16_HELP +Converts UTF-16 text to view in the current code page. + +UTF16 [/BE|/LE] < [drive:][path]filename +command-name | UTF16 [/BE|/LE] + + /BE Use UTF-16 Big Endian + /LE Use UTF-16 Little Endian +. +:PROGRAM_VTEXT_HELP +Changes V-text mode for the DOS/V emulation. + +VTEXT [mode] + + [mode] can be 0, 1, 2, for no V-text, V-text 1, and V-text 2 respectively. + +Type VTEXT without a parameter to show the current V-text mode status. +. +:PROGRAM_NMITEST_HELP +Generates a non-maskable interrupt (NMI). + +NMITEST + +Note: This is a debugging tool to test if the interrupt handler works properly. +. +:PROGRAM_NMITEST_GENERATE_NMI +Generating a non-maskable interrupt (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +Captures or releases the mouse inside DOSBox-X. + +CAPMOUSE [/C|/R] + + /C Capture the mouse + /R Release the mouse +. +:PROGRAM_CAPMOUSE_MOUSE +Mouse +. +:PROGRAM_CAPMOUSE_CURRENTLY +is currently +. +:PROGRAM_CAPMOUSE_CAPTURED +captured +. +:PROGRAM_CAPMOUSE_RELEASED +released +. +:PROGRAM_AUTOTYPE_HELP +Performs scripted keyboard entry into a running DOS program. + +AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]] + +Where: + -list: prints all available button names. + -w WAIT: seconds before typing begins. Two second default; max of 30. + -p PACE: seconds between each keystroke. Half-second default; max of 10. + + The sequence is comprised of one or more space-separated buttons. + Autotyping begins after WAIT seconds, and each button is entered + every PACE seconds. The , character inserts an extra PACE delay. + +Some examples: + ←[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter←[0m + ←[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: The mapper has no key bindings +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: bounding %s value of %.2f to %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s value '%s' is not a valid floating point number +. +:PROGRAM_ADDKEY_HELP +Generates artificial keypresses. + +ADDKEY [pmsec] [key] + +For example, the command below types "dir" followed by ENTER after 1 second: + +ADDKEY p1000 d i r enter + +You could also try AUTOTYPE command instead of this command to perform +scripted keyboard entry into a running DOS program. +. +:PROGRAM_SETCOLOR_HELP +Views or changes the text-mode color scheme settings. + +SETCOLOR [color# [value]] + +For example: + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Change Color #0 to the specified color value + + ←[32;1mSETCOLOR 7 -←[0m +Return Color #7 to the default color value + + ←[32;1mSETCOLOR 3 +←[0m +Return Color #3 to the preset color value + + ←[32;1mSETCOLOR MONO←[0m +Display current MONO mode status + +To change the current background and foreground colors, use COLOR command. +. +:PROGRAM_SETCOLOR_STATUS +MONO mode status: %s (video mode %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +active +. +:PROGRAM_SETCOLOR_INACTIVE +inactive +. +:PROGRAM_SETCOLOR_UNAVAILABLE +unavailable +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO mode status => active (video mode 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO mode status => inactive (video mode 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +Failed to change MONO mode +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +Must be + or - for MONO: %s +. +:PROGRAM_SETCOLOR_COLOR +Color %d: (%d,%d,%d) or #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Invalid color number - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Invalid color value - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Changing color scheme is not supported for the current video mode. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Unknown boothax mode +. +:PROGRAM_BOOT_SPECIFY_FILE +Must specify BIOS image to boot +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +Unable to open BIOS image +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Must specify BIOS file to load. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Can't open a file +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS File too large +. +:PROGRAM_DELTREE_HELP +Deletes a directory and all the subdirectories and files in it. + +To delete one or more files and directories: +DELTREE [/Y] [drive:]path [[drive:]path[...]] + + /Y Suppresses prompting to confirm you want to delete + the subdirectory. + [drive:]path Specifies the name of the directory you want to delete. + +Note: Use DELTREE cautiously. Every file and subdirectory within the +specified directory will be deleted. + +. +:PROGRAM_TREE_HELP +Graphically displays the directory structure of a drive or path. + +TREE [drive:][path] [/F] [/A] + + /F Displays the names of the files in each directory. + /A Uses ASCII instead of extended characters. + +. +:PROGRAM_TITLE_HELP +Sets the window title for the DOSBox-X window. + +TITLE [string] + + string Specifies the title for the DOSBox-X window. + +. +:PROGRAM_COLOR_HELP +Sets the default console foreground and background colors. + +COLOR [attr] + + attr Specifies color attribute of console output + +Color attributes are specified by TWO hex digits -- the first +corresponds to the background; the second to the foreground. +Each digit can be any of the following values: + + 0 = Black 8 = Gray + 1 = Blue 9 = Light Blue + 2 = Green A = Light Green + 3 = Aqua B = Light Aqua + 4 = Red C = Light Red + 5 = Purple D = Light Purple + 6 = Yellow E = Light Yellow + 7 = White F = Bright White + +If no argument is given, this command restores the original color. + +The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute +the COLOR command with a foreground and background color that are the same. + +Example: "COLOR fc" produces light red on bright white. + +. +:PROGRAM_SWITCH_LANG +You have changed the active code page to %d. +Do you want to load language file %s for this code page ? +. +:PROGRAM_ALREADY_MOUNTED +Drive %s: is already mounted. Unmount it first, and then try again. +. +:PROGRAM_DRIVE_NO_EXIST +Drive %s: does not exist in the system. +. +:PROGRAM_DRIVE_WARN +Do you really want to give DOSBox-X access to your real %s drive %s ? +. +:DRIVE_TYPE_FLOPPY +floppy +. +:DRIVE_TYPE_REMOVABLE +removable +. +:DRIVE_TYPE_NETWORK +network +. +:DRIVE_TYPE_HARD +hard +. +:DRIVE_TYPE_LOCAL +local +. +:DRIVE_TYPE_CDROM +CD-ROM +. +:PROGRAM_CDDRIVE_WARN +CD drive %s is currently mounted with the image: + +%s + +Do you want to change the CD image now? +. +:PROGRAM_CDMOUNT_ERROR +Could not mount the selected CD image. +. +:ELTORITO_IMAGE +El Torito floppy image +. +:RAM_FLOPPY_IMAGE +RAM floppy image +. +:PROGRAM_FLOPPY_WARN +Floppy drive %s is currently mounted with the image: + +%s + +Do you want to change the floppy disk image now? +. +:PROGRAM_FLOPPYMOUNT_ERROR +Could not mount the selected floppy disk image. +. +:PROGRAM_MOUNT_MORE_IMAGES +Do you want to mount more image file(s)? +. +:PROGRAM_MOUNT_PATH_TOOLONG +The path for the file(s) to mount is too long. +. +:PROGRAM_BOOT_FAILED +Drive %s: failed to boot. +. +:PROGRAM_MOUNT_FAILED +Drive %s: failed to mount. +. +:PROGRAM_MOUNT_IMAGE +Mounted %s to Drive %s: +%s %s +. +:ARCHIVE +archive +. +:DISK_IMAGE +disk image +. +:READONLY_MODE +Read-only mode +. +:PROGRAM_MOUNT_SELECT_DRIVE +Select a drive/directory to mount for Drive %s: as %s +. +:PROGRAM_MOUNT_CDROM_SUPPORT +Mounting a directory as CD-ROM gives an limited support. +. +:PROGRAM_MOUNT_NOT_MOUNTED +Drive %s: is not yet mounted. +. +:PROGRAM_PROGRAM_ALREADY +Another program is already running. +. +:PROGRAM_SHELL_ALREADY +Another shell is currently running. +. +:PROGRAM_MOUNT_SUCCESS +Drive %s is now mounted to: +%s +. +:PROGRAM_WARN_QUICKLAUNCH +Quick launch automatically mounts drive C in DOSBox-X. +Drive C has already been mounted. Do you want to continue? +. +:PROGRAM_NO_EXECUTABLE +Executable file not found. +. +:PROGRAM_EXEC_FINISHED +Program has finished execution. Do you want to unmount Drive %s now? +. +:PROGRAM_ASK_CHCP +Drive %c: may require code page %d to be properly accessed. + +Do you want to change the current code page to %d now? +. +:PROGRAM_CHANGING_CODEPAGE +Changing code page +. +:IMAGEMOUNT_CHANGE_DOSVER +Mounting this type of disk images requires a reported DOS version of %s or higher. +Do you want to auto - change the reported DOS version to %s now and mount the disk image ? +. +:MENU_DRIVE_NOTEXIST +Drive does not exist or is mounted from disk image. +. +:MENU_SAVE_IMAGE_FAILED +Failed to save disk image. +. +:MENU_JP_CPONLY +This function is only available for the Japanese code page (932). +. +:MENU_CH_CPONLY +This function is only available for the Chinese code pages (936, 950, or 951). +. +:MENU_GLIDE_ERROR +Glide passthrough cannot be enabled. Check the Glide wrapper installation. +. +:MENU_HIGH_INTENSITY_ERROR +High intensity is not supported for the current video mode. +. +:MENU_SAVE_FILE_ERROR +Cannot save to the file: %s +. +:MENU_INT2F_SUCCESS +The INT 2Fh hook has been successfully set. +. +:MENU_INT2F_ALREADY_SET +The INT 2Fh hook was already set up. +. +:QUIT_DISABLED +Quitting from DOSBox-X with this is currently disabled. +. +:QUIT_CONFIRM +This will quit from DOSBox-X. +Are you sure? +. +:QUIT_GUEST_DISABLED +You cannot quit DOSBox-X while running a guest system. +. +:QUIT_GUEST_CONFIRM +You are currently running a guest system. +Are you sure to quit anyway now? +. +:QUIT_FILE_OPEN_DISABLED +You cannot quit DOSBox-X while one or more files are open. +. +:QUIT_FILE_OPEN_CONFIRM +It may be unsafe to quit from DOSBox-X right now +because one or more files are currently open. +Are you sure to quit anyway now? +. +:QUIT_PROGRAM_DISABLED +You cannot quit DOSBox-X while running a program or game. +. +:QUIT_PROGRAM_CONFIRM +You are currently running a program or game. +Are you sure to quit anyway now? +. +:LANG_JP_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the Japanese PC-98 or JEGA/AX system. + +Are you sure to use the language file for this machine type? +. +:LANG_DOSV_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the current DOS/V system. + +Are you sure to use the language file for this system type? +. +:LANG_CHANGE_CP +The specified language file uses code page %d. Do you want to change to this code page accordingly?. +. +:SCALER_LOAD_WARN +This scaler may not work properly or have undesired effect: + +%s + +Do you want to force load the scaler? +. +:PIXEL_SHADER_WARN +This pixel shader may be unneeded or have undesired effect: + +%s + +Do you want to load the pixel shader anyway? + +(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message) +. +:PIXEL_SHADER_LOADED +Loaded pixel shader - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +Mapper Editor is not currently available. +. +:OPL_REC_COMPLETED +Saved Raw OPL output to the file: + +%s +. +:OPL_CAPTURE_FAILED +Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format. +. +:TTF_DBCS_ONLY +This function is only available for the Chinese/Japanese/Korean code pages. +. +:SAVE_FAILED +Failed to save the current state. +. +:SAVE_CORRUPTED +Save state corrupted! Program may not work. +. +:SAVE_SCREENSHOT +Saved screenshot to the file: + +%s +. +:HELP_ABOUT_VERSION +DOSBox-X ver.%s (%s %s %s-bit)%s +. +:HELP_ABOUT_UPDATED +Build date/time: %s +. +:HELP_ABOUT_COPYRIGHT +Copyright %s-%s %s +. +:HELP_ABOUT_MAINTAINER +Project maintainer: %s +. +:HELP_ABOUT_HOMEPAGE +DOSBox-X homepage: %s +. diff --git a/contrib/translations/es/es_ES.lng b/contrib/translations/es/es_ES.lng index 2169d607cbe..4da6f9f02d9 100644 --- a/contrib/translations/es/es_ES.lng +++ b/contrib/translations/es/es_ES.lng @@ -1,6 +1,6 @@ :DOSBOX-X:LANGUAGE:Spanish (Spain) :DOSBOX-X:CODEPAGE:858 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK: :AUTOEXEC_CONFIGFILE_HELP Las líneas de esta sección se iniciarán al inicio. @@ -50,6 +50,9 @@ Cancelar :CLOSE Cerrar . +:THEME +Tema +. :DEBUGCMD Comando del depurador . @@ -153,7 +156,7 @@ Valores actuales del mezclador Configuración de Sound Blaster . :CURRENT_MIDICONFIG -Configuración actual de MIDI +Configuración actual de MIDI/OPL . :CREATE_IMAGE Crear imagen de disco en blanco @@ -2433,6 +2436,9 @@ Inicio rápido de programa... :MENU:mapper_shutdown Salir de DOSBox-X . +:MENU:mapper_capkeyboard +Capture keyboard +. :MENU:mapper_capmouse Capturar ratón . @@ -3001,7 +3007,7 @@ Mostrar mezcladores de volumen de sonido Mostrar configuración de Sound Blaster . :MENU:midi_info -Mostrar configuración de dispositivo MIDI +Mostrar configuración de dispositivo MIDI/OPL . :MENU:DOSMenu DOS @@ -3702,3 +3708,852 @@ CPU: núcleo simple :MAPPER:togmenu Activar barra de menú . +:PROGRAM_FLAGSAVE_UNFLAGALL +All files unflagged for saving. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +File %s unflagged for saving. + +. +:PROGRAM_FLAGSAVE_FLAGGED +File already flagged for saving - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Too many files to flag for saving. + +. +:PROGRAM_FLAGSAVE_SAVED +File %s flagged for saving + +. +:PROGRAM_FLAGSAVE_LIST +Files flagged for saving: +. +:PROGRAM_FLAGSAVE_HLP +Marks or flags files to be saved for the save state feature. + +FLAGSAVE [file(s) [/F] [/R]] [/U] + + file(s) Specifies one or more files to be flagged for saving. + /F Forces to flag the file(s) even if they are not found. + /R Removes flags from the specified file(s). + /U Removes flags from all flagged files. + +Type FLAGSAVE without a parameter to list flagged files. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh hook has not been set. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh hook has already been set. + +. +:PROGRAM_INT2FDBG_HELP +Hooks INT 2Fh for debugging purposes. + +INT2FDBG [option] + /I Installs hook + +It will hook INT 2Fh at the top of the call chain for debugging information. + +Type INT2FDBG without a parameter to show the current hook status. +. +:PROGRAM_SET80x25 +Changes to 80x25 text mode. +. +:PROGRAM_SET80x43 +Changes to 80x43 text mode. +. +:PROGRAM_SET80x50 +Changes to 80x50 text mode. +. +:PROGRAM_SET80x60 +Changes to 80x60 text mode. +. +:PROGRAM_SET132x25 +Changes to 132x25 text mode. +. +:PROGRAM_SET132x43 +Changes to 132x43 text mode. +. +:PROGRAM_SET132x50 +Changes to 132x50 text mode. +. +:PROGRAM_SET132x60 +Changes to 132x60 text mode. +. +:PROGRAM_RESCAN_HELP +Rescans for changes on mounted drives made on the host by clearing caches. + +RESCAN [/A] [/Q] +RESCAN [drive:] [/Q] + + [/A] Rescan all drives + [/Q] Enable quiet mode + [drive:] The drive to rescan + +Type RESCAN with no parameters to rescan the current drive. + +. +:PROGRAM_CFGTOOL_HELP +Starts DOSBox-X's graphical configuration tool. + +CFGTOOL + +Note: You can also use CONFIG command for command-line configurations. +. +:PROGRAM_IMGSWAP_HELP +Swaps floppy, hard drive and optical disc images. + +←[32;1mIMGSWAP←[0m ←[37;1mdrive←[0m ←[36;1m[position]←[0m + ←[37;1mdrive←[0m Drive letter to swap the image. + ←[36;1m[position]←[0m Disk position to swap to. +. +:PROGRAM_INTRO_HELP +A full-screen introduction to DOSBox-X. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS disk index does not have an image assigned. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Invalid mount number. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Invalid fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Invalid size parameter. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +Drive number %d is not mounted. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Incorrect IMGMOUNT unmount usage. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Invalid drive letter. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Partitions cannot be mounted in conflict with the standard INT 13h hard disk +allotment. Choose a different drive letter to mount to. +. +:PROGRAM_ELTORITO_LETTER +El Torito emulation requires a proper CD-ROM drive letter. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +El Torito CD-ROM drive specified already exists as a non-CD-ROM device +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +El Torito CD-ROM drive specified is not actually a CD-ROM drive. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito emulation must be used with -t floppy at this time. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM boot record not found. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito entries unreadable. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +El Torito bootable floppy not found. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Unable to locate bootable section +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito boot sector unreadable +. +:PROGRAM_IMGMAKE_ALIGNMENT +Invalid alignment +. +:PROGRAM_IMGMAKE_PARTOFS +Invalid -partofs +. +:PROGRAM_IMGMAKE_FAT +Invalid -fat option. Must be 12, 16, or 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +Invalid -fatcopies option +. +:PROGRAM_IMGMAKE_SPC +Invalid -spc option, out of range +. +:PROGRAM_IMGMAKE_SPC2 +Invalid -spc option, must be a power of 2 +. +:PROGRAM_IMGMAKE_ROOTDIR +Invalid -rootdir option +. +PROGRAM_IMGMAKE_BOOTSECT +Invalid bootsector position +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Sanity check failed: FAT tables not aligned +. +:PROGRAM_IMGMAKE_SECTPERFAT +Error: Generated filesystem has more than 256 sectors per FAT and is not FAT32 +. +:PROGRAM_IMGMAKE_VOLSIZE +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_CLUSTERS +Error: Generated filesystem has too few clusters given the parameters +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Warning: Cluster count is too high given the volume size. + Reporting a smaller sector count. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Sanity check failed: First cluster not aligned +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +WARNING: Cluster sizes >= 64KB are not compatible with MS-DOS and SCANDISK +. +:PROGRAM_BOOT_UNSUPPORTED +Unsupported boot mode +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +Existing overlay has been replaced with new overlay. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS handle %u: unable to free +. +:PROGRAM_LOADFIX_XMS_FREE +XMS handle %u: unable to free +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +Unable to allocate EMS block +. +PROGRAM_LOADFIX_NOEMS +EMS not active +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +Unable to allocate XMS block +. +:PROGRAM_LOADFIX_NOXMS +XMS not active +. +:PROGRAM_LOADFIX_NOALLOC +Lowest MCB is above 64KB, nothing allocated +. +:PROGRAM_BOOT_SWAP_ALREADY +Multiple disk images specified and another drive is already connected to the swap list +. +:PROGRAM_BOOT_NOT_SPECIFIED +No images specified +. +:PROGRAM_BOOT_IS_PC88 +The D88 image appears to target PC-88 and cannot be booted. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Bytes/sector too large +. +:PROGRAM_BOOT_DRIVE_READERROR +Error reading drive +. +:PROGRAM_START_HELP_WIN +Starts a separate window to run a specified program or command. + +START [+|-|_] command [arguments] + + [+|-|_]: To maximize/minimize/hide the program. + The options /MAX, /MIN, /HID are also accepted. + command: The command, program or file to start. + arguments: Arguments to pass to the application. + +START opens the Windows command prompt automatically to run these commands +and wait for a key press before exiting (specified by "startincon" option): +%s + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_HELP +Starts a separate window to run a specified program or command. + +START /OPEN file +START command [arguments] + + /OPEN: To open a file or URL with the associated program. + file: The file or URL to open with the associated program. + command: The command or program to start or run. + arguments: Arguments to pass to the application. + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_COMPLETED +The command execution is completed. +. +:PROGRAM_START_COMMAND +Starting %s... +. +:PROGRAM_START_CTRLC +(Press Ctrl+C to exit immediately) +. +:PROGRAM_START_HOST_ERROR +Error: START cannot launch application to run on your current host system. +. +:PROGRAM_START_LAUNCH_ERROR +Error: START could not launch application. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +Do not specify files when mounting floppy drives from El Torito bootable CDs +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +Do not specify files when mounting RAM drives +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +Unable to open '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 image '%s' is not supported +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Unable to detect geometry +. +:PROGRAM_IMGMOUNT_DOS_VERSION +Mounting this image file requires a reported DOS version of %u.%u or higher. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Floppy size not recognized +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +Multiple images given and another drive already uses multiple images +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Multiple disk images not supported for that drive +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +Cannot mount hard drive in floppy position. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +Cannot mount floppy in hard drive position. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito bootable CD: -fs iso mounting not supported +. +:PROGRAM_MODE_STATUS +Status for device CON: +---------------------- +Columns=%d +Lines=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +Code page operation not supported on this device +. +:PROGRAM_MODE_RATE_DELAY +Rate and delay must be specified together +. +:PROGRAM_UTF8_HELP +Converts UTF-8 text to view in the current code page. + +UTF8 < [drive:][path]filename +command-name | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +No input text found. +. +:PROGRAM_UTF8_INVALIDCP +Invalid code page for text conversion. +. +:PROGRAM_UTF8_NOT_UTF8 +The input text is UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +An error occurred during text conversion. +. +:PROGRAM_UTF16_HELP +Converts UTF-16 text to view in the current code page. + +UTF16 [/BE|/LE] < [drive:][path]filename +command-name | UTF16 [/BE|/LE] + + /BE Use UTF-16 Big Endian + /LE Use UTF-16 Little Endian +. +:PROGRAM_VTEXT_HELP +Changes V-text mode for the DOS/V emulation. + +VTEXT [mode] + + [mode] can be 0, 1, 2, for no V-text, V-text 1, and V-text 2 respectively. + +Type VTEXT without a parameter to show the current V-text mode status. +. +:PROGRAM_NMITEST_HELP +Generates a non-maskable interrupt (NMI). + +NMITEST + +Note: This is a debugging tool to test if the interrupt handler works properly. +. +:PROGRAM_NMITEST_GENERATE_NMI +Generating a non-maskable interrupt (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +Captures or releases the mouse inside DOSBox-X. + +CAPMOUSE [/C|/R] + + /C Capture the mouse + /R Release the mouse +. +:PROGRAM_CAPMOUSE_MOUSE +Mouse +. +:PROGRAM_CAPMOUSE_CURRENTLY +is currently +. +:PROGRAM_CAPMOUSE_CAPTURED +captured +. +:PROGRAM_CAPMOUSE_RELEASED +released +. +:PROGRAM_AUTOTYPE_HELP +Performs scripted keyboard entry into a running DOS program. + +AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]] + +Where: + -list: prints all available button names. + -w WAIT: seconds before typing begins. Two second default; max of 30. + -p PACE: seconds between each keystroke. Half-second default; max of 10. + + The sequence is comprised of one or more space-separated buttons. + Autotyping begins after WAIT seconds, and each button is entered + every PACE seconds. The , character inserts an extra PACE delay. + +Some examples: + ←[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter←[0m + ←[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: The mapper has no key bindings +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: bounding %s value of %.2f to %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s value '%s' is not a valid floating point number +. +:PROGRAM_ADDKEY_HELP +Generates artificial keypresses. + +ADDKEY [pmsec] [key] + +For example, the command below types "dir" followed by ENTER after 1 second: + +ADDKEY p1000 d i r enter + +You could also try AUTOTYPE command instead of this command to perform +scripted keyboard entry into a running DOS program. +. +:PROGRAM_SETCOLOR_HELP +Views or changes the text-mode color scheme settings. + +SETCOLOR [color# [value]] + +For example: + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Change Color #0 to the specified color value + + ←[32;1mSETCOLOR 7 -←[0m +Return Color #7 to the default color value + + ←[32;1mSETCOLOR 3 +←[0m +Return Color #3 to the preset color value + + ←[32;1mSETCOLOR MONO←[0m +Display current MONO mode status + +To change the current background and foreground colors, use COLOR command. +. +:PROGRAM_SETCOLOR_STATUS +MONO mode status: %s (video mode %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +active +. +:PROGRAM_SETCOLOR_INACTIVE +inactive +. +:PROGRAM_SETCOLOR_UNAVAILABLE +unavailable +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO mode status => active (video mode 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO mode status => inactive (video mode 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +Failed to change MONO mode +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +Must be + or - for MONO: %s +. +:PROGRAM_SETCOLOR_COLOR +Color %d: (%d,%d,%d) or #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Invalid color number - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Invalid color value - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Changing color scheme is not supported for the current video mode. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Unknown boothax mode +. +:PROGRAM_BOOT_SPECIFY_FILE +Must specify BIOS image to boot +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +Unable to open BIOS image +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Must specify BIOS file to load. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Can't open a file +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS File too large +. +:PROGRAM_DELTREE_HELP +Deletes a directory and all the subdirectories and files in it. + +To delete one or more files and directories: +DELTREE [/Y] [drive:]path [[drive:]path[...]] + + /Y Suppresses prompting to confirm you want to delete + the subdirectory. + [drive:]path Specifies the name of the directory you want to delete. + +Note: Use DELTREE cautiously. Every file and subdirectory within the +specified directory will be deleted. + +. +:PROGRAM_TREE_HELP +Graphically displays the directory structure of a drive or path. + +TREE [drive:][path] [/F] [/A] + + /F Displays the names of the files in each directory. + /A Uses ASCII instead of extended characters. + +. +:PROGRAM_TITLE_HELP +Sets the window title for the DOSBox-X window. + +TITLE [string] + + string Specifies the title for the DOSBox-X window. + +. +:PROGRAM_COLOR_HELP +Sets the default console foreground and background colors. + +COLOR [attr] + + attr Specifies color attribute of console output + +Color attributes are specified by TWO hex digits -- the first +corresponds to the background; the second to the foreground. +Each digit can be any of the following values: + + 0 = Black 8 = Gray + 1 = Blue 9 = Light Blue + 2 = Green A = Light Green + 3 = Aqua B = Light Aqua + 4 = Red C = Light Red + 5 = Purple D = Light Purple + 6 = Yellow E = Light Yellow + 7 = White F = Bright White + +If no argument is given, this command restores the original color. + +The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute +the COLOR command with a foreground and background color that are the same. + +Example: "COLOR fc" produces light red on bright white. + +. +:PROGRAM_SWITCH_LANG +You have changed the active code page to %d. +Do you want to load language file %s for this code page ? +. +:PROGRAM_ALREADY_MOUNTED +Drive %s: is already mounted. Unmount it first, and then try again. +. +:PROGRAM_DRIVE_NO_EXIST +Drive %s: does not exist in the system. +. +:PROGRAM_DRIVE_WARN +Do you really want to give DOSBox-X access to your real %s drive %s ? +. +:DRIVE_TYPE_FLOPPY +floppy +. +:DRIVE_TYPE_REMOVABLE +removable +. +:DRIVE_TYPE_NETWORK +network +. +:DRIVE_TYPE_HARD +hard +. +:DRIVE_TYPE_LOCAL +local +. +:DRIVE_TYPE_CDROM +CD-ROM +. +:PROGRAM_CDDRIVE_WARN +CD drive %s is currently mounted with the image: + +%s + +Do you want to change the CD image now? +. +:PROGRAM_CDMOUNT_ERROR +Could not mount the selected CD image. +. +:ELTORITO_IMAGE +El Torito floppy image +. +:RAM_FLOPPY_IMAGE +RAM floppy image +. +:PROGRAM_FLOPPY_WARN +Floppy drive %s is currently mounted with the image: + +%s + +Do you want to change the floppy disk image now? +. +:PROGRAM_FLOPPYMOUNT_ERROR +Could not mount the selected floppy disk image. +. +:PROGRAM_MOUNT_MORE_IMAGES +Do you want to mount more image file(s)? +. +:PROGRAM_MOUNT_PATH_TOOLONG +The path for the file(s) to mount is too long. +. +:PROGRAM_BOOT_FAILED +Drive %s: failed to boot. +. +:PROGRAM_MOUNT_FAILED +Drive %s: failed to mount. +. +:PROGRAM_MOUNT_IMAGE +Mounted %s to Drive %s: +%s %s +. +:ARCHIVE +archive +. +:DISK_IMAGE +disk image +. +:READONLY_MODE +Read-only mode +. +:PROGRAM_MOUNT_SELECT_DRIVE +Select a drive/directory to mount for Drive %s: as %s +. +:PROGRAM_MOUNT_CDROM_SUPPORT +Mounting a directory as CD-ROM gives an limited support. +. +:PROGRAM_MOUNT_NOT_MOUNTED +Drive %s: is not yet mounted. +. +:PROGRAM_PROGRAM_ALREADY +Another program is already running. +. +:PROGRAM_SHELL_ALREADY +Another shell is currently running. +. +:PROGRAM_MOUNT_SUCCESS +Drive %s is now mounted to: +%s +. +:PROGRAM_WARN_QUICKLAUNCH +Quick launch automatically mounts drive C in DOSBox-X. +Drive C has already been mounted. Do you want to continue? +. +:PROGRAM_NO_EXECUTABLE +Executable file not found. +. +:PROGRAM_EXEC_FINISHED +Program has finished execution. Do you want to unmount Drive %s now? +. +:PROGRAM_ASK_CHCP +Drive %c: may require code page %d to be properly accessed. + +Do you want to change the current code page to %d now? +. +:PROGRAM_CHANGING_CODEPAGE +Changing code page +. +:IMAGEMOUNT_CHANGE_DOSVER +Mounting this type of disk images requires a reported DOS version of %s or higher. +Do you want to auto - change the reported DOS version to %s now and mount the disk image ? +. +:MENU_DRIVE_NOTEXIST +Drive does not exist or is mounted from disk image. +. +:MENU_SAVE_IMAGE_FAILED +Failed to save disk image. +. +:MENU_JP_CPONLY +This function is only available for the Japanese code page (932). +. +:MENU_CH_CPONLY +This function is only available for the Chinese code pages (936, 950, or 951). +. +:MENU_GLIDE_ERROR +Glide passthrough cannot be enabled. Check the Glide wrapper installation. +. +:MENU_HIGH_INTENSITY_ERROR +High intensity is not supported for the current video mode. +. +:MENU_SAVE_FILE_ERROR +Cannot save to the file: %s +. +:MENU_INT2F_SUCCESS +The INT 2Fh hook has been successfully set. +. +:MENU_INT2F_ALREADY_SET +The INT 2Fh hook was already set up. +. +:QUIT_DISABLED +Quitting from DOSBox-X with this is currently disabled. +. +:QUIT_CONFIRM +This will quit from DOSBox-X. +Are you sure? +. +:QUIT_GUEST_DISABLED +You cannot quit DOSBox-X while running a guest system. +. +:QUIT_GUEST_CONFIRM +You are currently running a guest system. +Are you sure to quit anyway now? +. +:QUIT_FILE_OPEN_DISABLED +You cannot quit DOSBox-X while one or more files are open. +. +:QUIT_FILE_OPEN_CONFIRM +It may be unsafe to quit from DOSBox-X right now +because one or more files are currently open. +Are you sure to quit anyway now? +. +:QUIT_PROGRAM_DISABLED +You cannot quit DOSBox-X while running a program or game. +. +:QUIT_PROGRAM_CONFIRM +You are currently running a program or game. +Are you sure to quit anyway now? +. +:LANG_JP_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the Japanese PC-98 or JEGA/AX system. + +Are you sure to use the language file for this machine type? +. +:LANG_DOSV_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the current DOS/V system. + +Are you sure to use the language file for this system type? +. +:LANG_CHANGE_CP +The specified language file uses code page %d. Do you want to change to this code page accordingly?. +. +:SCALER_LOAD_WARN +This scaler may not work properly or have undesired effect: + +%s + +Do you want to force load the scaler? +. +:PIXEL_SHADER_WARN +This pixel shader may be unneeded or have undesired effect: + +%s + +Do you want to load the pixel shader anyway? + +(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message) +. +:PIXEL_SHADER_LOADED +Loaded pixel shader - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +Mapper Editor is not currently available. +. +:OPL_REC_COMPLETED +Saved Raw OPL output to the file: + +%s +. +:OPL_CAPTURE_FAILED +Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format. +. +:TTF_DBCS_ONLY +This function is only available for the Chinese/Japanese/Korean code pages. +. +:SAVE_FAILED +Failed to save the current state. +. +:SAVE_CORRUPTED +Save state corrupted! Program may not work. +. +:SAVE_SCREENSHOT +Saved screenshot to the file: + +%s +. +:HELP_ABOUT_VERSION +DOSBox-X ver.%s (%s %s %s-bit)%s +. +:HELP_ABOUT_UPDATED +Fecha/hora de construcción: %s +. +:HELP_ABOUT_COPYRIGHT +Derechos de autor %s-%s %s +. +:HELP_ABOUT_MAINTAINER +Mantenedor del proyecto: %s +. +:HELP_ABOUT_HOMEPAGE +Página principal de DOSBox-X: %s +. diff --git a/contrib/translations/fr/fr_FR.lng b/contrib/translations/fr/fr_FR.lng index 5d23bfb2d58..c7bb638cd70 100644 --- a/contrib/translations/fr/fr_FR.lng +++ b/contrib/translations/fr/fr_FR.lng @@ -1,6 +1,6 @@ :DOSBOX-X:LANGUAGE:French (France) :DOSBOX-X:CODEPAGE:859 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK: :AUTOEXEC_CONFIGFILE_HELP Les lignes de cette section seront exécutées au démarrage. @@ -50,6 +50,9 @@ Annuler :CLOSE Fermer . +:THEME +Thème +. :DEBUGCMD Commande de débogueur . @@ -150,7 +153,7 @@ Volumes actuels de la table de mixage Configuration Sound Blaster . :CURRENT_MIDICONFIG -Configuration MIDI actuelle +Configuration MIDI/OPL actuelle . :CREATE_IMAGE Créer une image disque vierge @@ -1200,8 +1203,6 @@ Création du fichier image "%s" avec %u cylindres, %u têtes et %u secteurs . :PROGRAM_IMGMAKE_CANT_READ_FLOPPY - - Impossible de lire la disquette. . :PROGRAM_IMGMAKE_BADSIZE @@ -1239,7 +1240,6 @@ Disposition de clavier %s chargée pour la page de code %i :PROGRAM_KEYB_FILENOTFOUND Fichier clavier %s non trouvé (ou pas un ID valide) - . :PROGRAM_KEYB_INVALIDFILE Fichier clavier %s invalide @@ -1252,37 +1252,37 @@ Aucune mise en page dans %s pour la page de code %i :PROGRAM_KEYB_INVCPFILE Fichier de page de code inexistant ou invalide pour la disposition %s - . :INT21_6523_YESNO_CHARS -yn +on . :PROGRAM_LABEL_HELP -Creates, changes, or deletes the volume label of a drive. +Créé, change ou efface l'étiquette de volume d'un lecteur LABEL [drive:][label] - [drive:]○Specifies the drive letter - [label]○Specifies the volume label + [drive:]○Spécifie la lettre du lecteur + [label]○Spécifie l'étiquette du volume . :PROGRAM_LABEL_DELETE -Delete the volume label (Y/N)? +Efface l'étiquette du volume (O/N) ? + . :PROGRAM_LABEL_TOOLONG -Label is too long (more than 11 characters). +L'étiquette est trop longue (plus de 11 caractères) . :PROGRAM_LABEL_BADCHARS -Label has invalid characters. +L'étiquette a des caractères invalides . :PROGRAM_LABEL_VOLUMEIS -Volume in drive %c is %s +Le volume dans le lecteur %c est %s . :PROGRAM_LABEL_NOLABEL -Volume in drive %c has no label +Le volume dans le lecteur %c n'a pas d'étiquette . :PROGRAM_MODE_USAGE @@ -1302,105 +1302,106 @@ Doit spécifier un numéro de port entre 1 et 9. . :PROGRAM_VHDMAKE_WRITERR -Could not write to new VHD image "%s", aborting. +Impossible d'écrire dans la nouvelle image VHD "%s", abandon. . :PROGRAM_VHDMAKE_REMOVEERR -Could not erase file "%s" +Impossible d'effacer le fichier "%s" . :PROGRAM_VHDMAKE_RENAME -You'll have to manually rename the newly created VHD image. +Vous devrez renommmer manuellement l'image VHD nouvellement créée . :PROGRAM_VHDMAKE_SUCCESS -New VHD image successfully created. You can mount it with ←[34;1mIMGMOUNT←[0m. +Nouvelle image VHD créée avec succès. You pouvez la monter avec ←[34;1mIMGMOUNT←[0m. . :PROGRAM_VHDMAKE_ERROPEN -Error, could not open image file "%s". +Erreur, impossible d'ouvrir le fichier image "%s". . :PROGRAM_VHDMAKE_BADSIZE -Bad VHD size specified, aborting! +Mauvaise taille VHD spécifiée, abandon ! . :PROGRAM_VHDMAKE_FNEEDED -A pre-existing VHD image can't be silently overwritten without -f option! +Une image VHD pré-existante ne peut pas être silencieusemnt écrasée sans l'option -f ! . :PROGRAM_VHDMAKE_BADPARENT -The parent VHD image "%s" can't be opened for linking, aborting! +L'image VHD parente "%s" ne peut pas être ouverte pour liaison, abandon ! . :PROGRAM_VHDMAKE_NOINFO -Couldn't query info for "%s". +Impossible d'obtenir des informations pour "%s". . :PROGRAM_VHDMAKE_BLOCKSTATS -with %d/%d blocks allocated. +avec %d/%d blocs alloués. . :PROGRAM_VHDMAKE_INFO -VHD "%s" type is %s. -Its virtual size is %.02f MB +Le type du VHD "%s" est %s. +Sa taille virtuelle est %.02f Mo . :PROGRAM_VHDMAKE_CANTMERGE -%s is not a Differencing disk, can't merge! +% n'est pas un disque de différenciation, impossible de fusionner ! . :PROGRAM_VHDMAKE_MERGEREPORT -%d sectors in %d blocks from "%s" merged into "%s". +%d secteurs dans %d blocs de "%s" fusionné dans "%s". . :PROGRAM_VHDMAKE_MERGENODELETE -Couldn't remove snapshot "%s", you'll have to do it yourself! +Impossible d'enlever l'instantané "%s", vous devez le faire vous-même ! . :PROGRAM_VHDMAKE_MERGEOKDELETE -Snapshot VHD merged and deleted. +Instantané VHD fusionné et effacé. . :PROGRAM_VHDMAKE_MERGEFAILED -Failure while merging, aborted! +Echec lors de la fusion, abandon ! + . :PROGRAM_VHDMAKE_MERGEWARNCORRUPTION -Parent "%s" contents could be corrupted! +Les contenus du parent "%s" peuvent être corrompus ! . :PROGRAM_VHDMAKE_ABSPATH_WIN -Warning: an absolute path to parent limits portability to Windows. -Please prefer a path relative to differencing image file! +Attention : un chemin d'accès absolu au parent limite la portabilité de Windows. +Veuillez préférer un chemin d'accès relatif à l'image de différenciation ! . :PROGRAM_VHDMAKE_ABSPATH_UX -ERROR: an absolute path to parent inhibits portability. -Use a path relative to differencing image file! +ERREUR: un chemin d'accès absolu au parent empêche la portabilité. +Utilisez un chemin d'accès relatif à l'image de différenciation ! . :PROGRAM_VHDMAKE_HELP -Creates Dynamic or Differencing VHD images, or converts raw images -into Fixed VHD. +Crée des images VHD dynamiques ou différentielles, ou convertit +des images brutes en VHD fixes. ←[32;1mVHDMAKE←[0m [-f] new.vhd size[BKMGT] ←[32;1mVHDMAKE←[0m ←[34;1m-convert←[0m raw.hdd new.vhd ←[32;1mVHDMAKE←[0m [-f] ←[34;1m-link←[0m parent.vhd new.vhd ←[32;1mVHDMAKE←[0m ←[34;1m-merge←[0m delta.vhd ←[32;1mVHDMAKE←[0m ←[34;1m-info←[0m a.vhd - -c | -convert convert a raw hd image to Fixed VHD, renaming it to new.vhd - -l | -link create a new Differencing VHD new.vhd and link it to the - pre-existing parent image parent.vhd - -f | -force force overwriting a pre-existing image file - -i | -info show useful information about a.vhd image - -m | -merge merge differencing delta.vhd to its parent - new.vhd name of the new Dynamic VHD image to create - size disk size (eventually with size unit, Bytes is implicit) -When converting a raw disk image to Fixed VHD, it has to be partitioned with -MBR scheme and formatted with FAT format. -When creating a Dynamic VHD, its size must range from 3 MB to 2040 GB. -The Dynamic VHD created is not partitioned nor formatted: to directly mount to -a drive letter with ←[34;1mIMGMOUNT←[0m, please consider using ←[34;1mIMGMAKE←[0m instead. -A merged snapshot VHD is automatically deleted if merge is successful. + -c | -convert convertit une image hd brute en VHD fixe, en la renommant new.vhd + -l | -link créer un nouveau VHD de différenciation new.vhd et le relie + à l'image parent préexistante parent.vhd + -f | -force force l'écrasement d'un fichier image préexistant + -i | -info affiche des informations utiles sur une image .vhd + -m | -merge fusionne le fichier delta.vhd avec son parent + new.vhd nom de la nouvelle image dynamique VHD à créer + size taille du disque (éventuellement avec l'unité de taille, octet est implicite) +Lors de la conversion d'une image de disque brute en VHD fixe, elle doit être partitionnée +selon le schéma MBR et formatée au format FAT. +Lors de la création d'un VHD dynamique, sa taille doit être comprise entre 3 Mo et 2040 Go. +Le VHD dynamique créé n'est ni partitionné ni formaté : pour monter directement +une lettre de lecteur avec ←[34;1mIMGMOUNT←[0m, utilisez de ←[34;1mIMGMAKE←[0m à la place. +Un snapshot VHD fusionné est automatiquement supprimé si la fusion est réussie. . :SHELL_CMD_TREE_ERROR Aucun sous-répertoire n'existe @@ -1551,10 +1552,10 @@ Chemin non valide, pas de répertoire, ou répertoire non vide - %s . :SHELL_CMD_RMDIR_FULLTREE_CONFIRM -Delete directory "%s" and all its subdirectories? (Y/N)? +Effacer le répertoire "%s" et tous ses sous-répertoires (O/N) ? . :SHELL_CMD_RMDIR_SINGLE_CONFIRM -Delete file "%s" (Y/N)? +Effacer le fichier "%s" (O/N) ? . :SHELL_CMD_RENAME_ERROR Impossible de renommer - %s @@ -1573,11 +1574,11 @@ Impossible de supprimer - %s . :SHELL_CMD_DEL_CONFIRM -Delete %s (Y/N)? +Effacer %s (O/N)? . :SHELL_CMD_DEL_SURE Tous les fichiers du répertoire seront supprimés ! -Êtes-vous sûr [Y/N] ? +Êtes-vous sûr [O/N] ? . :SHELL_SYNTAXERROR Erreur de syntaxe @@ -2423,6 +2424,9 @@ Programme de lancement rapide... :MENU:mapper_shutdown Quitter . +:MENU:mapper_capkeyboard +Capturer le clavier +. :MENU:mapper_capmouse Capturer la souris . @@ -2646,16 +2650,16 @@ rapport d'origine Définir le rapport . :MENU:VideoPreventCaptureMenu -Screen capture control +Contrôle de la capture d'écran . :MENU:prevcap_none -Allow +Autoriser . :MENU:prevcap_blank -Show as blank +Afficher comme vide . :MENU:prevcap_invisible -Make invisible +Rendre invisible . :MENU:VideoScalerMenu Mise à l'échelle @@ -2748,7 +2752,7 @@ xBRZ xBRZ bilinéaire . :MENU:center_window -Center window +Centrer la fenêtre . :MENU:set_titletext Définir le texte de la barre de titre... @@ -2959,7 +2963,7 @@ Effacer la couche de texte Effacer la couche graphique . :MENU:Video3dfxMenu -émulation 3dfx +Émulation 3dfx . :MENU:3dfx_voodoo Carte Voodoo interne @@ -2992,7 +2996,7 @@ Afficher les volumes du mélangeur de sons Afficher la configuration Sound Blaster . :MENU:midi_info -Afficher la configuration du périphérique MIDI +Afficher la configuration du périphérique MIDI/OPL . :MENU:DOSMenu DOS @@ -3304,13 +3308,13 @@ Accélérer Ralentir . :MENU:mapper_editcycles -Choisir nombre sycles +Choisir nombre de cycles . :MENU:mapper_savestate Sauver état . :MENU:mapper_loadstate -Niv. charge +Charge état . :MENU:mapper_showstate Afficher infos état @@ -3331,7 +3335,7 @@ Augmenter le frameskip Ajuster format image . :MENU:mapper_fscaler -Forcer la l'échelle +Forcer l'échelle . :MENU:mapper_recwave Enreg. audio WAV @@ -3346,7 +3350,7 @@ Enreg. sortie MIDI Sortie FM (OPL) . :MENU:mapper_capnetrf -Record network traffic +Enregistre trafic réseau . :MENU:mapper_video Enreg. vidéo en AVI @@ -3355,7 +3359,7 @@ Enreg. vidéo en AVI Capture d'écran . :MENU:mapper_rawscrshot -Take raw screenshot +Faire une capture d'écran brute . :MENU:mapper_volup Monter le volume @@ -3688,3 +3692,874 @@ CPU: noyau simple :MAPPER:togmenu Basculer barre de menu . +:PROGRAM_FLAGSAVE_UNFLAGALL +Tous les fichiers non signalés pour sauvegarde. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +Fichier % non signalé pour sauvegarde. + +. +:PROGRAM_FLAGSAVE_FLAGGED +Fichier déjà signalé pour sauvegarde - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Trop de fichiers signalés pour la sauvegarde. + +. +:PROGRAM_FLAGSAVE_SAVED +Ficher %s signalé pour la sauvegarde + +. +:PROGRAM_FLAGSAVE_LIST +Fichiers signalés pour la sauvegarde : +. +:PROGRAM_FLAGSAVE_HLP +Marque ou signale les fichiers pour la fonctionnalité de sauvegarde de l'état. + +FLAGSAVE [file(s) [/F] [/R]] [/U] + + file(s) Spécifie un ou plusieurs fichiers à signaler pour la sauvegarde. + /F Force à signaler le(s) fichier(s) même si introuvable. + /R Enlève le signalement des fichiers spécifiés. + /U Enlève le signalement de tous les fichiers signalés. + +Taper FLAGSAVE sans un paramètre pour lister les fichiers signalés. + +. +:PROGRAM_INT2FDBG_NOT_SET +Le crochet INT 2Fh n'est pas activé. + +. +:PROGRAM_INT2FDBG_ALREADY +Le crochet INT 2Fh est déjà activé. + +. +:PROGRAM_INT2FDBG_HELP +Active INT 2Fh pour des besoins de débogage. + +INT2FDBG [option] + /I Installe le crochet + +Il accrochera INT 2Fh au sommet de la chaîne d'appels pour les informations de débogage. + +Taper INT2FDBG sans un paramètres pour montrer le status du crochet. +. +:PROGRAM_SET80x25 +Change en mode texte 80x25. +. +:PROGRAM_SET80x43 +Change en mode texte 80x43. +. +:PROGRAM_SET80x50 +Change en mode texte 80x50. +. +:PROGRAM_SET80x60 +Change en mode texte 80x60. +. +:PROGRAM_SET132x25 +Change en mode texte 132x25. +. +:PROGRAM_SET132x43 +Change en mode texte 132x43. +. +:PROGRAM_SET132x50 +Change en mode texte 132x50. +. +:PROGRAM_SET132x60 +Change en mode texte 132x60. +. +:PROGRAM_RESCAN_HELP +Ré-analyse pour les changements effectués sur les disques montés sur l'hôte en vidant les caches. + +RESCAN [/A] [/Q] +RESCAN [drive:] [/Q] + + [/A] Ré-analyse tous les disques + [/Q] Active le mode silencieux + [drive:] Le lecteur à ré-analyser + +Taper RESCAN sans paramètres pour ré-analyser le lecteur courant. + +. +:PROGRAM_CFGTOOL_HELP +Démarre l'outil de configuration graphique de DOSBox-X. + +CFGTOOL + +Note: Vous pouvez aussi utiliser la commande CONFIG pour une configuration en ligne de commande. +. +:PROGRAM_IMGSWAP_HELP +Échange image de disquette, disque dur et de disque optiques. + +←[32;1mIMGSWAP←[0m ←[37;1mdrive←[0m ←[36;1m[position]←[0m + ←[37;1mdrive←[0m Lettre du lecteur pour l'échange d'image. + ←[36;1m[position]←[0m Position du disque à échanger. +. +:PROGRAM_INTRO_HELP +Une introduction plein écran à DOSBOX-X. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +L'index du disque BIOS n'a pas d'image assignée. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Numéro de montage invalide. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Type de fichier invalide. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Paramètre taille invalide +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +Le numéro de lecteur %d n'est pas monté. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Utilisation incorrect de démontage IMGMOUNT. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Lettre lecteur invalide. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Les partitions ne peuvent pas être montées en conflit avec l'allocation standard +du disque dur INT 13h. Choisissez une autre lettre de lecteur pour le montage. +. +:PROGRAM_ELTORITO_LETTER +L'émulation El Torito requière une lettre de lecteur CD-ROM propre. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +Le lecteur CD-ROM El Torito spécifié existe déjà comme un périphérique non-CD-ROM +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +Le lecteur CD-ROM El Torito spécifié n'est pas un lecteur CD-Rom. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +L'émulation El Torito doit être utlisé avec -t floppy cette fois. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +L'enregistrement de démarrage CD-ROM El Torito introuvable. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +Entrées El Torito illisibles. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +Disquette de démarrage El Torito introuvable. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Impossible de localiser la section de démarrage. +. +:PROGRAM_ELTORITO_BOOTSECTOR +Secteur de démarrage El Torito illisible +. +:PROGRAM_IMGMAKE_ALIGNMENT +Alignement invalide +. +:PROGRAM_IMGMAKE_PARTOFS +-partofs invalide +. +:PROGRAM_IMGMAKE_FAT +Option -fat invalide. Doit être 12, 16 ou 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +Option -fatcopies invalide +. +:PROGRAM_IMGMAKE_SPC +Option -spc invalide, hors plage +. +:PROGRAM_IMGMAKE_SPC2 +Option -spc invalide, doit être un multiple de 2 +. +:PROGRAM_IMGMAKE_ROOTDIR +Option -rootdir invalide +. +PROGRAM_IMGMAKE_BOOTSECT +Position du secteur de démarrage invalide +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Le contrôle de sécurité a échoué : La taille du volume n'est pas alignée +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Le contrôle de sécurité a échoué : les tables FAT ne sont pas alignées +. +:PROGRAM_IMGMAKE_SECTPERFAT +Erreur : Le système de fichiers généré a plus de 256 secteurs par FAT et n'est pas FAT32 +. +:PROGRAM_IMGMAKE_VOLSIZE +Le contrôle de sécurité a échoué : Taille du volume non alignée +. +:PROGRAM_IMGMAKE_CLUSTERS +Erreur : Le système de fichiers généré a trop peu de clusters compte tenu des paramètres +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Attention : Le compte de cluster est trop haut compte tenu de la taille + du volume. Rapporter un nombre de secteurs plus faible. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Le contrôle de sécurité a échoué : Le premier cluster n'est pas aligné +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +ATTENTION : Les tailles de clusters >= 64KB ne sont pas compatibles avec MS-DOS et SCANDISK +. +:PROGRAM_BOOT_UNSUPPORTED +Mode de démarrage non supporté +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +L'overlay existant a été remplacé par un nouvel overlay. +. +:PROGRAM_LOADFIX_EMS_FREE +Poignée EMS %u : impossible de libérer +. +:PROGRAM_LOADFIX_XMS_FREE +Poignée XMS %u : impossible de libérer +. +:PROGRAM_LOADFIX_EMS_ALLOC +Bloc EMS alloué (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +Impossible d'allouer des blocs EMS +. +PROGRAM_LOADFIX_NOEMS +EMS inactif +. +:PROGRAM_LOADFIX_XMS_ALLOC +Bloc XMS alloué (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +Impossible d'allouer des blocs XMS +. +:PROGRAM_LOADFIX_NOXMS +XMS inactif +. +:PROGRAM_LOADFIX_NOALLOC +Le MCB le plus bas est au déla de 64 Ko, rien n'est alloué +. +:PROGRAM_BOOT_SWAP_ALREADY +Plusieurs images de disque sont spécifiées et un autre lecteur est déjà connecté à la liste d'échange. +. +:PROGRAM_BOOT_NOT_SPECIFIED +Aucune image spécifiée +. +:PROGRAM_BOOT_IS_PC88 +L'image D88 cible apparemment le PC-88 et ne peut pas être démarrée. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Octets/secteur trop grand +. +:PROGRAM_BOOT_DRIVE_READERROR +Erreur de lecture du lecteur +. +:PROGRAM_START_HELP_WIN +Démarre une fenêtre séparée pour lancer une commande ou un programme spécifié. + +START [+|-|_] command [arguments] + + [+|-|_] : Pour maximiser/minimiser/cacher le programme + Les options /MAX, /MIN, /HID sont aussi acceptées. + command : La commande, programme ou fichier à démarrer. + arguments : Arguments à passer à l'application. + +START ouvre le prompt de la fenêtre de commande Windows pour lancer +ces commandes et attend une pression de touche avant de quitter +(spécifié par l'option "startincon") : %s + +Note : Le chemin d'accès spécifié dans cette commande est le +chemin d'accès dans le système hôte. +. +:PROGRAM_START_HELP +Démarre une fenêtre séparée pour lancer une commande ou un programme spécifié. + +START /OPEN file +START command [arguments] + + /OPEN : Pour ouvrir le fichier ou l'URL avec le programme associé. + file : Le fichier ou l'URL à ouvrir avec le programme associé. + command : La commande, programme ou fichier à lancer ou à démarrer. + arguments : Arguments à passer à l'application. + +Note : Le chemin d'accès spécifié dans cette commande est le +chemin d'accès dans le système hôte. +. +:PROGRAM_START_COMPLETED +L'exécution de la commande est complétée. +. +:PROGRAM_START_COMMAND +Démarre %s... +. +:PROGRAM_START_CTRLC +(Pressez Ctrl+C pour quitter immédiatement) +. +:PROGRAM_START_HOST_ERROR +Erreur : START ne peut pas lancer l'application à démarrer sur votre système hôte. +. +:PROGRAM_START_LAUNCH_ERROR +Erreur : START ne peut pas lancer l'application. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +Ne pas spécifier les fichiers quand on monte des lecteurs disquettes depuis +des CDs démarrable El Torito +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +Ne pas spécifier les fichiers quand on monte des lecteurs RAM +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +La taille du secteur doit être plus grande que 512 octet et +divise uniformément la taille du cluster d'images de %lu octets. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +Impossible d'ouvrir '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +L'image qcow2 '%s' n'est pas supportée +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Impossible de détecter la géométrie +. +:PROGRAM_IMGMOUNT_DOS_VERSION +Monter cette image fichier requiert une version rapporté de DOS de %u.%u ou suivant. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Taille disquette non reconnue +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +De multiples images données et un autre lecteur utilise déjà de multiples images +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Les images disques multiples ne sont pas supporté par ce lecteur +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +Impossible de monter un disque dur dans un emplacement disquette +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +Impossible de monter une disquette dans un emplacement disque dur +. +:PROGRAM_ELTORITO_ISOMOUNT +CD démarrable El Torito : montage -fs iso n'est pas supporté +. +:PROGRAM_MODE_STATUS +Status pour le dispositif CON: +------------------------------ +Colonnes=%d +Lignes=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +L'opération de page de code n'est pas prise en charge par cet appareil +. +:PROGRAM_MODE_RATE_DELAY +Le débit et le délai doivent être spécifiés ensemble +. +:PROGRAM_UTF8_HELP +Convertit du texte UTF-8 pour voir le code de la page actuelle. + +UTF8 < [drive:][path]filename +command-name | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +Aucun texte en entré trouvé. +. +:PROGRAM_UTF8_INVALIDCP +Code page invalide pour la conversion du texte. +. +:PROGRAM_UTF8_NOT_UTF8 +Le texte en entrée est en UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +Une erreur est arrivée durant la conversion du texte. +. +:PROGRAM_UTF16_HELP +Convertit un texte UTF-16 pour voir le code de la page actuelle. + +UTF16 [/BE|/LE] < [drive:][path]filename +command-name | UTF16 [/BE|/LE] + + /BE Use UTF-16 Big Endian + /LE Use UTF-16 Little Endian +. +:PROGRAM_VTEXT_HELP +Change le mode V-text pour l'émulation DDS/V. + +VTEXT [mode] + + [mode] peut-être 0, 1, 2, pour aucun V-text, V-text 1, and V-text 2 respectivement. + +Tapez VTEXT sans paramètres pour montrer le statut du mode V-texte courant.. +. +:PROGRAM_NMITEST_HELP +Génère une interruption non masquable (NMI). + +NMITEST + +Note : C'est un outil de débogage pour tester que le gestionnaire d'interruptions +fonctionne correctement. +. +:PROGRAM_NMITEST_GENERATE_NMI +Génère une interruption non masquable (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +Capture ou libère la souris dans DOSBox-X. + +CAPMOUSE [/C|/R] + + /C Capture la souris + /R Libère la souris +. +:PROGRAM_CAPMOUSE_MOUSE +La souris +. +:PROGRAM_CAPMOUSE_CURRENTLY +est actuelleemnt +. +:PROGRAM_CAPMOUSE_CAPTURED +capturée +. +:PROGRAM_CAPMOUSE_RELEASED +libérée +. +:PROGRAM_AUTOTYPE_HELP +Lance une entrée scriptée au clavier dans un programme DOS lancé. + +AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]] + +Où : + -list : affiche tous les noms de boutons disponibles. + -w WAIT : seconds avant que la saisie commence. Deux secondes par défaut; maximum 30. + -p PACE : secondes entre chaque frappe. Une demi-seconde par défaut; maximum 10. + + La séquence est composée d'un ou de plusieurs boutons séparés par des espaces. + La saisie automatique commence après WAIT secondes, et chaque bouton est entré + toutes les PACE secondes. Le caractère , insère un délai PACE supplémentaire. + +Quelques exemples : + ←[32;1mAUTOTYPE -w 1 -p 0.3 haut entrée , entrée de droite←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , entrée←[0m + ←[32;1mAUTOTYPE -w 1.3 esc entrée , p l a y e r entrée←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE : Le mappeur n'a pas de touche reliée +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE : Délimitation de la valeur %s de %.2f à %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE : la valeur %s '%s' n'est pas un nombre à virgule flottante valide +. +:PROGRAM_ADDKEY_HELP +Génère des pressions de touches artificielles. + +ADDKEY [pmsec] [key] + +Par exemple, la commande ci-dessous tape "dir" suivi par Entrée après 1 seconde : + +ADDKEY p1000 d i r enter + +Vous pouvez aussi essayer la commande AUTOTYPE au lieu d'effectuer +une entrée clavier scriptée dans un programme DOS en cours d'exécution. +. +:PROGRAM_SETCOLOR_HELP +Affiche ou change les réglages de la palette couleur du mode texte. + +SETCOLOR [color# [value]] + +Par exemple : + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Change la couleur 0 pour spécifier la valeur de la couleur + + ←[32;1mSETCOLOR 7 -←[0m +Retourne la couleur 7 comme valeur de couleur par défaut + + ←[32;1mSETCOLOR 3 +←[0m +Retourne la couleur 3 à la valeur de couleur prédéfinie + + ←[32;1mSETCOLOR MONO←[0m +Affiche le statut du mode MONO actuel + +Pour changer les couleurs d'arrière et d'avant plan, utilisez la commande COLOR. +. +:PROGRAM_SETCOLOR_STATUS +Statut mode MONO : %s (mode vidéo %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +active +. +:PROGRAM_SETCOLOR_INACTIVE +inactive +. +:PROGRAM_SETCOLOR_UNAVAILABLE +indisponible +. +:PROGRAM_SETCOLOR_MONO_MODE7 +Statut mode MONO => actif (mode vidéo 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +Statut mode MONO => inactif (mode vidéo 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +N'a pas changé le mode MONO +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +Doit être + ou - pour MONO : %s +. +:PROGRAM_SETCOLOR_COLOR +Couleur %d : (%d,%d,%d) ou #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Numéro de couleur invalide - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Valeur de couleur invalide - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Changer la palette de couleur n'est pas supporté par le mode vidéo actuel. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Mode boothax inconnu +. +:PROGRAM_BOOT_SPECIFY_FILE +Vous devez spécifier l'image BIOS à démarrer +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +Impossible d'ouvrir l'image BIOS +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Vous devez spécifier l'image BIOS à charger. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Impossible d'ouvrir un fichier +. +:PROGRAM_BIOSTEST_TOO_LARGE +Le ficher BIOS est trop gros +. +:PROGRAM_DELTREE_HELP +Supprime un répertoire et tous les sous-répertoires et +fichiers qu'il contient. + +Pour supprimer un ou plusieurs fichiers et répertoires : +DELTREE [/Y] [drive:]path [[drive:]path[...]] + + /Y Supprime la demande de confirmation de la suppression + du sous-répertoire + [drive:]path Indique le nom du répertoire à supprimer. + +Note : utilisez DELTREE avec précaution. Tous les fichiers et sous-répertoires +du répertoire spécifié sur seront supprimés. + +. +:PROGRAM_TREE_HELP +Affiche graphiquement la structure des répertoires d'un lecteur ou +d'un chemin d'accès. + +TREE [drive:][path] [/F] [/A] + + /F Affiche les noms des fichiers dans chaque répertoire. + /A Utilise l'ASCII au lieu des caractères étendus. + +. +:PROGRAM_TITLE_HELP +Définit le titre de la fenêtre de DOSBox-X. + +TITLE [string] + + string Indique le titre de la fenêtre DOSBox-X. + +. +:PROGRAM_COLOR_HELP +Définit les couleurs d'avant-plan et d'arrière-plan par +défaut de la console. + +COLOR [attr] + + attr Indique l'attribut de couleur de la sortie de + la console + +Les attributs de couleur sont spécifiés par DEUX chiffres hexagonaux : +le premier correspond à l'arrière-plan et le second à l'avant-plan. +Chaque chiffre peut prendre l'une des valeurs suivantes : + + 0 = Noir 8 = Gris + 1 = Bleu 9 = Bleu clair + 2 = Vert A = Vert clair + 3 = Aqua B = Aqua clair + 4 = Rouge C = Rouge clair + 5 = Violet D = Violet clair + 6 = Jaune E = Jaune clair + 7 = Blanc F = Blanc brillant + +Si aucun argument n'est donné, cette commande rétablit la couleur d'origine. + +La commande COLOR attribue la valeur 1 à ERRORLEVEL si l'on tente d'exécuter +la commande COLOR avec une couleur d'avant-plan et une couleur d'arrière-plan +identiques. + +Exemple : "COLOR fc" produit du rouge clair sur du blanc brillant. + +. +:PROGRAM_SWITCH_LANG +Vous avez changé le code de page actif en %d. +Voulez-vous charger le fichier de langage %s pour ce code de page ? +. +:PROGRAM_ALREADY_MOUNTED +Lecteur %s: est déjà monté. Démontez-le d'abord, et ensuite réessayez. +. +:PROGRAM_DRIVE_NO_EXIST +Lecteur %s: n'existe pas dans le système. +. +:PROGRAM_DRIVE_WARN +Voulez-vous vraiment donner à DOSBox-X l'accès à votre lecteur réel %s ? +. +:DRIVE_TYPE_FLOPPY +disquette +. +:DRIVE_TYPE_REMOVABLE +amovible +. +:DRIVE_TYPE_NETWORK +réseau +. +:DRIVE_TYPE_HARD +disque dur +. +:DRIVE_TYPE_LOCAL +local +. +:DRIVE_TYPE_CDROM +CD-ROM +. +:PROGRAM_CDDRIVE_WARN +Lecteur CD %s est actuellement monté avec l'image : + +%s + +Voulez-vous changer l'image CD maintenant ? +. +:PROGRAM_CDMOUNT_ERROR +Impossible de monter l'image CD sélectionnée. +. +:ELTORITO_IMAGE +image disquette El Torito +. +:RAM_FLOPPY_IMAGE +image disquette RAM +. +:PROGRAM_FLOPPY_WARN +Le lecteur de disquette est actuellement monté avec l'image : + +%s + +Voulez-vous changer l'image disquette maintenant ? +. +:PROGRAM_FLOPPYMOUNT_ERROR +Impossible de monter l'image disquette sélectionnée. +. +:PROGRAM_MOUNT_MORE_IMAGES +Voulez-vous monter plus de fichier(s) image ? +. +:PROGRAM_MOUNT_PATH_TOOLONG +Le chemin d'accès au(x) fichier(s) à monter est trop long. +. +:PROGRAM_BOOT_FAILED +Lecteur %s: n'a pas pu démarrer. +. +:PROGRAM_MOUNT_FAILED +Lecteur %s: n'a pas pu être monté. +. +:PROGRAM_MOUNT_IMAGE +%s monté sur le lecteur %s: +%s %s +. +:ARCHIVE +archive +. +:DISK_IMAGE +image disque +. +:READONLY_MODE +Mode lecture seule +. +:PROGRAM_MOUNT_SELECT_DRIVE +Sélectionnez un lecteur/répertoire à monter pour le lecteur %s: +en tant que %s +. +:PROGRAM_MOUNT_CDROM_SUPPORT +Le montage d'un répertoire en tant que CD-ROM offre un support limité. +. +:PROGRAM_MOUNT_NOT_MOUNTED +Lecteur %s: n'est pas encore monté +. +:PROGRAM_PROGRAM_ALREADY +Un autre programme est déjà en cours. +. +:PROGRAM_SHELL_ALREADY +Un autre shell est déjà en cours. +. +:PROGRAM_MOUNT_SUCCESS +Lecteur %s est maintenant monté sur : +%s +. +:PROGRAM_WARN_QUICKLAUNCH + +Le lancement rapide monte automatiquement le lecteur C dans DOSBox-X. +Le lecteur C a déjà été monté. Voulez-vous continuer ? +. +:PROGRAM_NO_EXECUTABLE +Fichier exécutable introuvable. +. +:PROGRAM_EXEC_FINISHED +Le programme a terminé son exécution. Voulez-vous démonter le +lecteur %s maintenant ? +. +:PROGRAM_ASK_CHCP +Lecteur %c : peut nécessiter la page de code %d pour être +correctement accessible. + +Voulez-vous changer le code de page actuel en %d maintenant ? +. +:PROGRAM_CHANGING_CODEPAGE +Change le code de page + +. +:IMAGEMOUNT_CHANGE_DOSVER +Monter ce type d'images disque requiert une version rapportée de DOS de %s ou plus récent +Voulez-vous changer automatiquement la version rapportée de DOS ver %s maintenant et +monter l'image disque ? +. +:MENU_DRIVE_NOTEXIST +Lecteur inexistant ou est monté depuis une image disque. +. +:MENU_SAVE_IMAGE_FAILED +Échec de la sauvegarde de l'image disque. +. +:MENU_JP_CPONLY +Cette fonction n'est disponible que pour le code de page Japonais (932). +. +:MENU_CH_CPONLY +Cette fonction n'est disponible que pour le code de page Chinois (936, 950 ou 951). +. +:MENU_GLIDE_ERROR +La fonction Glide passthrough ne peut pas être activée. Vérifiez l'installation +du wrapper Glide. +. +:MENU_HIGH_INTENSITY_ERROR +La haute intensité n'est pas prise en charge par le mode vidéo actuel. +. +:MENU_SAVE_FILE_ERROR +Impossible de sauver le fichier : %s +. +:MENU_INT2F_SUCCESS +Le crochet INT 2Fh a été activé avec succès. +. +:MENU_INT2F_ALREADY_SET +Le crochet INT 2Fh a déjà été mis en place. +. +:QUIT_DISABLED +La sortie de DOSBox-X par ce biais est actuellement désactivée. +. +:QUIT_CONFIRM +Cela permet de quitter DOSBox-X. +Êtes-vous sûr ? +. +:QUIT_GUEST_DISABLED +Vous ne pouvez pas quitter DOSBox-X pendant l'exécution +d'un système invité. +. +:QUIT_GUEST_CONFIRM +Vous utilisez actuellement un système invité. +Êtes-vous sûr de quitter de toute façon maintenant ? +. +:QUIT_FILE_OPEN_DISABLED +Vous ne pouvez pas quitter DOSBox-X lorsqu'un ou plusieurs +fichiers sont ouverts. +. +:QUIT_FILE_OPEN_CONFIRM +Il n'est peut-être pas sûr de quitter DOSBox-X maintenant +parce qu'un ou plusieurs fichiers sont actuellement ouverts. +Etes-vous sûr de vouloir quitter maintenant ? +. +:QUIT_PROGRAM_DISABLED +Vous ne pouvez pas quitter DOSBox-X pendant l'exécution +d'un programme ou d'un jeu. +. +:QUIT_PROGRAM_CONFIRM +Vous êtes en train d'exécuter un programme ou un jeu. +Êtes-vous sûr de vouloir quitter maintenant ? +. +. +:LANG_JP_INCOMPATIBLE +Vous avez spécifié un fichier de langue qui utilise un code de page incompatible avec le système japonais PC-98 ou JEGA/AX. + +Êtes-vous sûr d'utiliser le fichier de langue correspondant à ce type de machine ? +. +:LANG_DOSV_INCOMPATIBLE +Vous avez spécifié un fichier de langue qui utilise un code de page incompatible avec le système DOS/V actuel. + +Êtes-vous sûr d'utiliser le fichier de langue pour ce type de système ? +. +:LANG_CHANGE_CP +Le fichier de langue spécifié utilise la page de code %d. Voulez-vous passer à cette page de code en conséquence ?. +. +:SCALER_LOAD_WARN +Cette échelle peut ne pas fonctionner correctement ou avoir des effets indésirables : + +%s + +Voulez-vous forcer le chargement de l'échelle ? +. +:PIXEL_SHADER_WARN +Ce pixel shader peut être inutile ou avoir un effet indésirable.: + +%s + +Voulez-vous charger le pixel shader malgré tout ? + +(Vous pouvez ajouter « forcé » au paramètre Pixel shader pour forcer le chargement du Pixel shader sans ce message) +. +:PIXEL_SHADER_LOADED +Pixel shader chargé - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +L'éditeur de mappage n'est pas disponible actuellement. +. +:OPL_REC_COMPLETED +Enregistrement de la sortie OPL brute dans le fichier : + +%s +. +:OPL_CAPTURE_FAILED +Impossible de capturer la sortie Raw OPL car le mode natif ESFM est utilisé par l'application actuelle, ce qui n'est pas pris en charge par +le format Raw OPL. +. +:TTF_DBCS_ONLY +Cette fonction n'est disponible que pour les code de pages chinoises/japonaises/coréennes.. +. +:SAVE_FAILED +Échec de la sauvegarde de l'état actuel. +. +:SAVE_CORRUPTED +L'état de la sauvegarde est corrompu ! Le programme peut ne pas fonctionner. +. +:SAVE_SCREENSHOT +Enregistrement de la capture d'écran dans le fichier : + +%s +. +:HELP_ABOUT_VERSION +DOSBox-X ver.%s (%s %s %s-bit)%s +. +:HELP_ABOUT_UPDATED +Date/heure de compilation : %s +. +:HELP_ABOUT_COPYRIGHT +Copyright %s-%s %s +. +:HELP_ABOUT_MAINTAINER +Mainteneur du projet : %s +. +:HELP_ABOUT_HOMEPAGE +Site de DOSBox-X : %s +. diff --git a/contrib/translations/hu/hu_HU.lng b/contrib/translations/hu/hu_HU.lng index ae26c6230c6..7a968a211db 100644 --- a/contrib/translations/hu/hu_HU.lng +++ b/contrib/translations/hu/hu_HU.lng @@ -1,6 +1,6 @@ :DOSBOX-X:LANGUAGE:Hungarian (Hungary) :DOSBOX-X:CODEPAGE:852 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK: :AUTOEXEC_CONFIGFILE_HELP Ebben a szekcióban lévő sorok indításkor lefutnak. @@ -151,7 +151,7 @@ Aktív hangbeállítások Sound Blaster konfiguráció . :CURRENT_MIDICONFIG -Aktív MIDI konfiguráció +Aktív MIDI/OPL konfiguráció . :CREATE_IMAGE Üres lemezkép-fájl létrehozása @@ -2414,6 +2414,9 @@ Gyors program indítás... :MENU:mapper_shutdown Kilépés a DOSBox-X-ből . +:MENU:mapper_capkeyboard +Capture keyboard +. :MENU:mapper_capmouse Az egér DOSBOX-X-hez rendelése (ALT+Tab a feloldáshoz) . @@ -2982,7 +2985,7 @@ Hangerőszabályozó hangszintjei Sound Blaster konfiguráció . :MENU:midi_info -MIDI eszköz konfiguráció +MIDI/OPL eszköz konfiguráció . :MENU:DOSMenu DOS @@ -3677,3 +3680,837 @@ CPU: szimpla mag :MAPPER:togmenu Menüsor be/ki . +:PROGRAM_FLAGSAVE_UNFLAGALL +All files unflagged for saving. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +File %s unflagged for saving. + +. +:PROGRAM_FLAGSAVE_FLAGGED +File already flagged for saving - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Too many files to flag for saving. + +. +:PROGRAM_FLAGSAVE_SAVED +File %s flagged for saving + +. +:PROGRAM_FLAGSAVE_LIST +Files flagged for saving: +. +:PROGRAM_FLAGSAVE_HLP +Marks or flags files to be saved for the save state feature. + +FLAGSAVE [file(s) [/F] [/R]] [/U] + + file(s) Specifies one or more files to be flagged for saving. + /F Forces to flag the file(s) even if they are not found. + /R Removes flags from the specified file(s). + /U Removes flags from all flagged files. + +Type FLAGSAVE without a parameter to list flagged files. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh hook has not been set. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh hook has already been set. + +. +:PROGRAM_INT2FDBG_HELP +Hooks INT 2Fh for debugging purposes. + +INT2FDBG [option] + /I Installs hook + +It will hook INT 2Fh at the top of the call chain for debugging information. + +Type INT2FDBG without a parameter to show the current hook status. +. +:PROGRAM_SET80x25 +Changes to 80x25 text mode. +. +:PROGRAM_SET80x43 +Changes to 80x43 text mode. +. +:PROGRAM_SET80x50 +Changes to 80x50 text mode. +. +:PROGRAM_SET80x60 +Changes to 80x60 text mode. +. +:PROGRAM_SET132x25 +Changes to 132x25 text mode. +. +:PROGRAM_SET132x43 +Changes to 132x43 text mode. +. +:PROGRAM_SET132x50 +Changes to 132x50 text mode. +. +:PROGRAM_SET132x60 +Changes to 132x60 text mode. +. +:PROGRAM_RESCAN_HELP +Rescans for changes on mounted drives made on the host by clearing caches. + +RESCAN [/A] [/Q] +RESCAN [drive:] [/Q] + + [/A] Rescan all drives + [/Q] Enable quiet mode + [drive:] The drive to rescan + +Type RESCAN with no parameters to rescan the current drive. + +. +:PROGRAM_CFGTOOL_HELP +Starts DOSBox-X's graphical configuration tool. + +CFGTOOL + +Note: You can also use CONFIG command for command-line configurations. +. +:PROGRAM_IMGSWAP_HELP +Swaps floppy, hard drive and optical disc images. + +←[32;1mIMGSWAP←[0m ←[37;1mdrive←[0m ←[36;1m[position]←[0m + ←[37;1mdrive←[0m Drive letter to swap the image. + ←[36;1m[position]←[0m Disk position to swap to. +. +:PROGRAM_INTRO_HELP +A full-screen introduction to DOSBox-X. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS disk index does not have an image assigned. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Invalid mount number. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Invalid fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Invalid size parameter. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +Drive number %d is not mounted. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Incorrect IMGMOUNT unmount usage. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Invalid drive letter. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Partitions cannot be mounted in conflict with the standard INT 13h hard disk +allotment. Choose a different drive letter to mount to. +. +:PROGRAM_ELTORITO_LETTER +El Torito emulation requires a proper CD-ROM drive letter. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +El Torito CD-ROM drive specified already exists as a non-CD-ROM device +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +El Torito CD-ROM drive specified is not actually a CD-ROM drive. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito emulation must be used with -t floppy at this time. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM boot record not found. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito entries unreadable. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +El Torito bootable floppy not found. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Unable to locate bootable section +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito boot sector unreadable +. +:PROGRAM_IMGMAKE_ALIGNMENT +Invalid alignment +. +:PROGRAM_IMGMAKE_PARTOFS +Invalid -partofs +. +:PROGRAM_IMGMAKE_FAT +Invalid -fat option. Must be 12, 16, or 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +Invalid -fatcopies option +. +:PROGRAM_IMGMAKE_SPC +Invalid -spc option, out of range +. +:PROGRAM_IMGMAKE_SPC2 +Invalid -spc option, must be a power of 2 +. +:PROGRAM_IMGMAKE_ROOTDIR +Invalid -rootdir option +. +PROGRAM_IMGMAKE_BOOTSECT +Invalid bootsector position +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Sanity check failed: FAT tables not aligned +. +:PROGRAM_IMGMAKE_SECTPERFAT +Error: Generated filesystem has more than 256 sectors per FAT and is not FAT32 +. +:PROGRAM_IMGMAKE_VOLSIZE +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_CLUSTERS +Error: Generated filesystem has too few clusters given the parameters +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Warning: Cluster count is too high given the volume size. + Reporting a smaller sector count. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Sanity check failed: First cluster not aligned +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +WARNING: Cluster sizes >= 64KB are not compatible with MS-DOS and SCANDISK +. +:PROGRAM_BOOT_UNSUPPORTED +Unsupported boot mode +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +Existing overlay has been replaced with new overlay. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS handle %u: unable to free +. +:PROGRAM_LOADFIX_XMS_FREE +XMS handle %u: unable to free +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +Unable to allocate EMS block +. +PROGRAM_LOADFIX_NOEMS +EMS not active +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +Unable to allocate XMS block +. +:PROGRAM_LOADFIX_NOXMS +XMS not active +. +:PROGRAM_LOADFIX_NOALLOC +Lowest MCB is above 64KB, nothing allocated +. +:PROGRAM_BOOT_SWAP_ALREADY +Multiple disk images specified and another drive is already connected to the swap list +. +:PROGRAM_BOOT_NOT_SPECIFIED +No images specified +. +:PROGRAM_BOOT_IS_PC88 +The D88 image appears to target PC-88 and cannot be booted. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Bytes/sector too large +. +:PROGRAM_BOOT_DRIVE_READERROR +Error reading drive +. +:PROGRAM_START_HELP_WIN +Starts a separate window to run a specified program or command. + +START [+|-|_] command [arguments] + + [+|-|_]: To maximize/minimize/hide the program. + The options /MAX, /MIN, /HID are also accepted. + command: The command, program or file to start. + arguments: Arguments to pass to the application. + +START opens the Windows command prompt automatically to run these commands +and wait for a key press before exiting (specified by "startincon" option): +%s + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_HELP +Starts a separate window to run a specified program or command. + +START /OPEN file +START command [arguments] + + /OPEN: To open a file or URL with the associated program. + file: The file or URL to open with the associated program. + command: The command or program to start or run. + arguments: Arguments to pass to the application. + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_COMPLETED +The command execution is completed. +. +:PROGRAM_START_COMMAND +Starting %s... +. +:PROGRAM_START_CTRLC +(Press Ctrl+C to exit immediately) +. +:PROGRAM_START_HOST_ERROR +Error: START cannot launch application to run on your current host system. +. +:PROGRAM_START_LAUNCH_ERROR +Error: START could not launch application. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +Do not specify files when mounting floppy drives from El Torito bootable CDs +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +Do not specify files when mounting RAM drives +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +Unable to open '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 image '%s' is not supported +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Unable to detect geometry +. +:PROGRAM_IMGMOUNT_DOS_VERSION +Mounting this image file requires a reported DOS version of %u.%u or higher. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Floppy size not recognized +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +Multiple images given and another drive already uses multiple images +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Multiple disk images not supported for that drive +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +Cannot mount hard drive in floppy position. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +Cannot mount floppy in hard drive position. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito bootable CD: -fs iso mounting not supported +. +:PROGRAM_MODE_STATUS +Status for device CON: +---------------------- +Columns=%d +Lines=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +Code page operation not supported on this device +. +:PROGRAM_MODE_RATE_DELAY +Rate and delay must be specified together +. +:PROGRAM_UTF8_HELP +Converts UTF-8 text to view in the current code page. + +UTF8 < [drive:][path]filename +command-name | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +No input text found. +. +:PROGRAM_UTF8_INVALIDCP +Invalid code page for text conversion. +. +:PROGRAM_UTF8_NOT_UTF8 +The input text is UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +An error occurred during text conversion. +. +:PROGRAM_UTF16_HELP +Converts UTF-16 text to view in the current code page. + +UTF16 [/BE|/LE] < [drive:][path]filename +command-name | UTF16 [/BE|/LE] + + /BE Use UTF-16 Big Endian + /LE Use UTF-16 Little Endian +. +:PROGRAM_VTEXT_HELP +Changes V-text mode for the DOS/V emulation. + +VTEXT [mode] + + [mode] can be 0, 1, 2, for no V-text, V-text 1, and V-text 2 respectively. + +Type VTEXT without a parameter to show the current V-text mode status. +. +:PROGRAM_NMITEST_HELP +Generates a non-maskable interrupt (NMI). + +NMITEST + +Note: This is a debugging tool to test if the interrupt handler works properly. +. +:PROGRAM_NMITEST_GENERATE_NMI +Generating a non-maskable interrupt (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +Captures or releases the mouse inside DOSBox-X. + +CAPMOUSE [/C|/R] + + /C Capture the mouse + /R Release the mouse +. +:PROGRAM_CAPMOUSE_MOUSE +Mouse +. +:PROGRAM_CAPMOUSE_CURRENTLY +is currently +. +:PROGRAM_CAPMOUSE_CAPTURED +captured +. +:PROGRAM_CAPMOUSE_RELEASED +released +. +:PROGRAM_AUTOTYPE_HELP +Performs scripted keyboard entry into a running DOS program. + +AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]] + +Where: + -list: prints all available button names. + -w WAIT: seconds before typing begins. Two second default; max of 30. + -p PACE: seconds between each keystroke. Half-second default; max of 10. + + The sequence is comprised of one or more space-separated buttons. + Autotyping begins after WAIT seconds, and each button is entered + every PACE seconds. The , character inserts an extra PACE delay. + +Some examples: + ←[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter←[0m + ←[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: The mapper has no key bindings +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: bounding %s value of %.2f to %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s value '%s' is not a valid floating point number +. +:PROGRAM_ADDKEY_HELP +Generates artificial keypresses. + +ADDKEY [pmsec] [key] + +For example, the command below types "dir" followed by ENTER after 1 second: + +ADDKEY p1000 d i r enter + +You could also try AUTOTYPE command instead of this command to perform +scripted keyboard entry into a running DOS program. +. +:PROGRAM_SETCOLOR_HELP +Views or changes the text-mode color scheme settings. + +SETCOLOR [color# [value]] + +For example: + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Change Color #0 to the specified color value + + ←[32;1mSETCOLOR 7 -←[0m +Return Color #7 to the default color value + + ←[32;1mSETCOLOR 3 +←[0m +Return Color #3 to the preset color value + + ←[32;1mSETCOLOR MONO←[0m +Display current MONO mode status + +To change the current background and foreground colors, use COLOR command. +. +:PROGRAM_SETCOLOR_STATUS +MONO mode status: %s (video mode %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +active +. +:PROGRAM_SETCOLOR_INACTIVE +inactive +. +:PROGRAM_SETCOLOR_UNAVAILABLE +unavailable +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO mode status => active (video mode 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO mode status => inactive (video mode 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +Failed to change MONO mode +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +Must be + or - for MONO: %s +. +:PROGRAM_SETCOLOR_COLOR +Color %d: (%d,%d,%d) or #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Invalid color number - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Invalid color value - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Changing color scheme is not supported for the current video mode. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Unknown boothax mode +. +:PROGRAM_BOOT_SPECIFY_FILE +Must specify BIOS image to boot +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +Unable to open BIOS image +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Must specify BIOS file to load. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Can't open a file +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS File too large +. +:PROGRAM_DELTREE_HELP +Deletes a directory and all the subdirectories and files in it. + +To delete one or more files and directories: +DELTREE [/Y] [drive:]path [[drive:]path[...]] + + /Y Suppresses prompting to confirm you want to delete + the subdirectory. + [drive:]path Specifies the name of the directory you want to delete. + +Note: Use DELTREE cautiously. Every file and subdirectory within the +specified directory will be deleted. + +. +:PROGRAM_TREE_HELP +Graphically displays the directory structure of a drive or path. + +TREE [drive:][path] [/F] [/A] + + /F Displays the names of the files in each directory. + /A Uses ASCII instead of extended characters. + +. +:PROGRAM_TITLE_HELP +Sets the window title for the DOSBox-X window. + +TITLE [string] + + string Specifies the title for the DOSBox-X window. + +. +:PROGRAM_COLOR_HELP +Sets the default console foreground and background colors. + +COLOR [attr] + + attr Specifies color attribute of console output + +Color attributes are specified by TWO hex digits -- the first +corresponds to the background; the second to the foreground. +Each digit can be any of the following values: + + 0 = Black 8 = Gray + 1 = Blue 9 = Light Blue + 2 = Green A = Light Green + 3 = Aqua B = Light Aqua + 4 = Red C = Light Red + 5 = Purple D = Light Purple + 6 = Yellow E = Light Yellow + 7 = White F = Bright White + +If no argument is given, this command restores the original color. + +The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute +the COLOR command with a foreground and background color that are the same. + +Example: "COLOR fc" produces light red on bright white. + +. +:PROGRAM_SWITCH_LANG +You have changed the active code page to %d. +Do you want to load language file %s for this code page ? +. +:PROGRAM_ALREADY_MOUNTED +Drive %s: is already mounted. Unmount it first, and then try again. +. +:PROGRAM_DRIVE_NO_EXIST +Drive %s: does not exist in the system. +. +:PROGRAM_DRIVE_WARN +Do you really want to give DOSBox-X access to your real %s drive %s ? +. +:DRIVE_TYPE_FLOPPY +floppy +. +:DRIVE_TYPE_REMOVABLE +removable +. +:DRIVE_TYPE_NETWORK +network +. +:DRIVE_TYPE_HARD +hard +. +:DRIVE_TYPE_LOCAL +local +. +:DRIVE_TYPE_CDROM +CD-ROM +. +:PROGRAM_CDDRIVE_WARN +CD drive %s is currently mounted with the image: + +%s + +Do you want to change the CD image now? +. +:PROGRAM_CDMOUNT_ERROR +Could not mount the selected CD image. +. +:ELTORITO_IMAGE +El Torito floppy image +. +:RAM_FLOPPY_IMAGE +RAM floppy image +. +:PROGRAM_FLOPPY_WARN +Floppy drive %s is currently mounted with the image: + +%s + +Do you want to change the floppy disk image now? +. +:PROGRAM_FLOPPYMOUNT_ERROR +Could not mount the selected floppy disk image. +. +:PROGRAM_MOUNT_MORE_IMAGES +Do you want to mount more image file(s)? +. +:PROGRAM_MOUNT_PATH_TOOLONG +The path for the file(s) to mount is too long. +. +:PROGRAM_BOOT_FAILED +Drive %s: failed to boot. +. +:PROGRAM_MOUNT_FAILED +Drive %s: failed to mount. +. +:PROGRAM_MOUNT_IMAGE +Mounted %s to Drive %s: +%s %s +. +:ARCHIVE +archive +. +:DISK_IMAGE +disk image +. +:READONLY_MODE +Read-only mode +. +:PROGRAM_MOUNT_SELECT_DRIVE +Select a drive/directory to mount for Drive %s: as %s +. +:PROGRAM_MOUNT_CDROM_SUPPORT +Mounting a directory as CD-ROM gives an limited support. +. +:PROGRAM_MOUNT_NOT_MOUNTED +Drive %s: is not yet mounted. +. +:PROGRAM_PROGRAM_ALREADY +Another program is already running. +. +:PROGRAM_SHELL_ALREADY +Another shell is currently running. +. +:PROGRAM_MOUNT_SUCCESS +Drive %s is now mounted to: +%s +. +:PROGRAM_WARN_QUICKLAUNCH +Quick launch automatically mounts drive C in DOSBox-X. +Drive C has already been mounted. Do you want to continue? +. +:PROGRAM_NO_EXECUTABLE +Executable file not found. +. +:PROGRAM_EXEC_FINISHED +Program has finished execution. Do you want to unmount Drive %s now? +. +:PROGRAM_ASK_CHCP +Drive %c: may require code page %d to be properly accessed. + +Do you want to change the current code page to %d now? +. +:PROGRAM_CHANGING_CODEPAGE +Changing code page +. +:IMAGEMOUNT_CHANGE_DOSVER +Mounting this type of disk images requires a reported DOS version of %s or higher. +Do you want to auto - change the reported DOS version to %s now and mount the disk image ? +. +:MENU_DRIVE_NOTEXIST +Drive does not exist or is mounted from disk image. +. +:MENU_SAVE_IMAGE_FAILED +Failed to save disk image. +. +:MENU_JP_CPONLY +This function is only available for the Japanese code page (932). +. +:MENU_CH_CPONLY +This function is only available for the Chinese code pages (936, 950, or 951). +. +:MENU_GLIDE_ERROR +Glide passthrough cannot be enabled. Check the Glide wrapper installation. +. +:MENU_HIGH_INTENSITY_ERROR +High intensity is not supported for the current video mode. +. +:MENU_SAVE_FILE_ERROR +Cannot save to the file: %s +. +:MENU_INT2F_SUCCESS +The INT 2Fh hook has been successfully set. +. +:MENU_INT2F_ALREADY_SET +The INT 2Fh hook was already set up. +. +:QUIT_DISABLED +Quitting from DOSBox-X with this is currently disabled. +. +:QUIT_CONFIRM +This will quit from DOSBox-X. +Are you sure? +. +:QUIT_GUEST_DISABLED +You cannot quit DOSBox-X while running a guest system. +. +:QUIT_GUEST_CONFIRM +You are currently running a guest system. +Are you sure to quit anyway now? +. +:QUIT_FILE_OPEN_DISABLED +You cannot quit DOSBox-X while one or more files are open. +. +:QUIT_FILE_OPEN_CONFIRM +It may be unsafe to quit from DOSBox-X right now +because one or more files are currently open. +Are you sure to quit anyway now? +. +:QUIT_PROGRAM_DISABLED +You cannot quit DOSBox-X while running a program or game. +. +:QUIT_PROGRAM_CONFIRM +You are currently running a program or game. +Are you sure to quit anyway now? +. +:LANG_JP_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the Japanese PC-98 or JEGA/AX system. + +Are you sure to use the language file for this machine type? +. +:LANG_DOSV_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the current DOS/V system. + +Are you sure to use the language file for this system type? +. +:LANG_CHANGE_CP +The specified language file uses code page %d. Do you want to change to this code page accordingly?. +. +:SCALER_LOAD_WARN +This scaler may not work properly or have undesired effect: + +%s + +Do you want to force load the scaler? +. +:PIXEL_SHADER_WARN +This pixel shader may be unneeded or have undesired effect: + +%s + +Do you want to load the pixel shader anyway? + +(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message) +. +:PIXEL_SHADER_LOADED +Loaded pixel shader - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +Mapper Editor is not currently available. +. +:OPL_REC_COMPLETED +Saved Raw OPL output to the file: + +%s +. +:OPL_CAPTURE_FAILED +Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format. +. +:TTF_DBCS_ONLY +This function is only available for the Chinese/Japanese/Korean code pages. +. +:SAVE_FAILED +Failed to save the current state. +. +:SAVE_CORRUPTED +Save state corrupted! Program may not work. +. +:SAVE_SCREENSHOT +Saved screenshot to the file: + +%s +. diff --git a/contrib/translations/it/it_IT.lng b/contrib/translations/it/it_IT.lng index 9c285ca9f81..288f95f33b1 100644 --- a/contrib/translations/it/it_IT.lng +++ b/contrib/translations/it/it_IT.lng @@ -1,6 +1,6 @@ :DOSBOX-X:LANGUAGE:Italiano (Italy) :DOSBOX-X:CODEPAGE:437 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK: :AUTOEXEC_CONFIGFILE_HELP Le righe in questa sezione simulano AUTOEXEC.BAT e sono eseguite all'avvio @@ -150,7 +150,7 @@ Mixer volume Configurazione Sound Blaster . :CURRENT_MIDICONFIG -Configurazione MIDI attuale +Configurazione MIDI/OPL attuale . :CREATE_IMAGE Crea immagine disco vuota @@ -2425,6 +2425,9 @@ Avvio rapido programma... :MENU:mapper_shutdown Esci da DOSBox-X . +:MENU:mapper_capkeyboard +Capture keyboard +. :MENU:mapper_capmouse Cattura mouse . @@ -2981,7 +2984,7 @@ Visualizza mixer volume Visualizza configurazione Sound Blaster . :MENU:midi_info -Visualizza configurazione MIDI +Visualizza configurazione MIDI/OPL . :MENU:DOSMenu DOS @@ -3655,3 +3658,837 @@ CPU: core singolo :MAPPER:togmenu Barra menu ON/OFF . +:PROGRAM_FLAGSAVE_UNFLAGALL +All files unflagged for saving. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +File %s unflagged for saving. + +. +:PROGRAM_FLAGSAVE_FLAGGED +File already flagged for saving - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Too many files to flag for saving. + +. +:PROGRAM_FLAGSAVE_SAVED +File %s flagged for saving + +. +:PROGRAM_FLAGSAVE_LIST +Files flagged for saving: +. +:PROGRAM_FLAGSAVE_HLP +Marks or flags files to be saved for the save state feature. + +FLAGSAVE [file(s) [/F] [/R]] [/U] + + file(s) Specifies one or more files to be flagged for saving. + /F Forces to flag the file(s) even if they are not found. + /R Removes flags from the specified file(s). + /U Removes flags from all flagged files. + +Type FLAGSAVE without a parameter to list flagged files. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh hook has not been set. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh hook has already been set. + +. +:PROGRAM_INT2FDBG_HELP +Hooks INT 2Fh for debugging purposes. + +INT2FDBG [option] + /I Installs hook + +It will hook INT 2Fh at the top of the call chain for debugging information. + +Type INT2FDBG without a parameter to show the current hook status. +. +:PROGRAM_SET80x25 +Changes to 80x25 text mode. +. +:PROGRAM_SET80x43 +Changes to 80x43 text mode. +. +:PROGRAM_SET80x50 +Changes to 80x50 text mode. +. +:PROGRAM_SET80x60 +Changes to 80x60 text mode. +. +:PROGRAM_SET132x25 +Changes to 132x25 text mode. +. +:PROGRAM_SET132x43 +Changes to 132x43 text mode. +. +:PROGRAM_SET132x50 +Changes to 132x50 text mode. +. +:PROGRAM_SET132x60 +Changes to 132x60 text mode. +. +:PROGRAM_RESCAN_HELP +Rescans for changes on mounted drives made on the host by clearing caches. + +RESCAN [/A] [/Q] +RESCAN [drive:] [/Q] + + [/A] Rescan all drives + [/Q] Enable quiet mode + [drive:] The drive to rescan + +Type RESCAN with no parameters to rescan the current drive. + +. +:PROGRAM_CFGTOOL_HELP +Starts DOSBox-X's graphical configuration tool. + +CFGTOOL + +Note: You can also use CONFIG command for command-line configurations. +. +:PROGRAM_IMGSWAP_HELP +Swaps floppy, hard drive and optical disc images. + +←[32;1mIMGSWAP←[0m ←[37;1mdrive←[0m ←[36;1m[position]←[0m + ←[37;1mdrive←[0m Drive letter to swap the image. + ←[36;1m[position]←[0m Disk position to swap to. +. +:PROGRAM_INTRO_HELP +A full-screen introduction to DOSBox-X. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS disk index does not have an image assigned. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Invalid mount number. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Invalid fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Invalid size parameter. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +Drive number %d is not mounted. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Incorrect IMGMOUNT unmount usage. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Invalid drive letter. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Partitions cannot be mounted in conflict with the standard INT 13h hard disk +allotment. Choose a different drive letter to mount to. +. +:PROGRAM_ELTORITO_LETTER +El Torito emulation requires a proper CD-ROM drive letter. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +El Torito CD-ROM drive specified already exists as a non-CD-ROM device +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +El Torito CD-ROM drive specified is not actually a CD-ROM drive. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito emulation must be used with -t floppy at this time. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM boot record not found. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito entries unreadable. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +El Torito bootable floppy not found. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Unable to locate bootable section +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito boot sector unreadable +. +:PROGRAM_IMGMAKE_ALIGNMENT +Invalid alignment +. +:PROGRAM_IMGMAKE_PARTOFS +Invalid -partofs +. +:PROGRAM_IMGMAKE_FAT +Invalid -fat option. Must be 12, 16, or 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +Invalid -fatcopies option +. +:PROGRAM_IMGMAKE_SPC +Invalid -spc option, out of range +. +:PROGRAM_IMGMAKE_SPC2 +Invalid -spc option, must be a power of 2 +. +:PROGRAM_IMGMAKE_ROOTDIR +Invalid -rootdir option +. +PROGRAM_IMGMAKE_BOOTSECT +Invalid bootsector position +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Sanity check failed: FAT tables not aligned +. +:PROGRAM_IMGMAKE_SECTPERFAT +Error: Generated filesystem has more than 256 sectors per FAT and is not FAT32 +. +:PROGRAM_IMGMAKE_VOLSIZE +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_CLUSTERS +Error: Generated filesystem has too few clusters given the parameters +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Warning: Cluster count is too high given the volume size. + Reporting a smaller sector count. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Sanity check failed: First cluster not aligned +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +WARNING: Cluster sizes >= 64KB are not compatible with MS-DOS and SCANDISK +. +:PROGRAM_BOOT_UNSUPPORTED +Unsupported boot mode +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +Existing overlay has been replaced with new overlay. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS handle %u: unable to free +. +:PROGRAM_LOADFIX_XMS_FREE +XMS handle %u: unable to free +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +Unable to allocate EMS block +. +PROGRAM_LOADFIX_NOEMS +EMS not active +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +Unable to allocate XMS block +. +:PROGRAM_LOADFIX_NOXMS +XMS not active +. +:PROGRAM_LOADFIX_NOALLOC +Lowest MCB is above 64KB, nothing allocated +. +:PROGRAM_BOOT_SWAP_ALREADY +Multiple disk images specified and another drive is already connected to the swap list +. +:PROGRAM_BOOT_NOT_SPECIFIED +No images specified +. +:PROGRAM_BOOT_IS_PC88 +The D88 image appears to target PC-88 and cannot be booted. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Bytes/sector too large +. +:PROGRAM_BOOT_DRIVE_READERROR +Error reading drive +. +:PROGRAM_START_HELP_WIN +Starts a separate window to run a specified program or command. + +START [+|-|_] command [arguments] + + [+|-|_]: To maximize/minimize/hide the program. + The options /MAX, /MIN, /HID are also accepted. + command: The command, program or file to start. + arguments: Arguments to pass to the application. + +START opens the Windows command prompt automatically to run these commands +and wait for a key press before exiting (specified by "startincon" option): +%s + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_HELP +Starts a separate window to run a specified program or command. + +START /OPEN file +START command [arguments] + + /OPEN: To open a file or URL with the associated program. + file: The file or URL to open with the associated program. + command: The command or program to start or run. + arguments: Arguments to pass to the application. + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_COMPLETED +The command execution is completed. +. +:PROGRAM_START_COMMAND +Starting %s... +. +:PROGRAM_START_CTRLC +(Press Ctrl+C to exit immediately) +. +:PROGRAM_START_HOST_ERROR +Error: START cannot launch application to run on your current host system. +. +:PROGRAM_START_LAUNCH_ERROR +Error: START could not launch application. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +Do not specify files when mounting floppy drives from El Torito bootable CDs +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +Do not specify files when mounting RAM drives +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +Unable to open '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 image '%s' is not supported +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Unable to detect geometry +. +:PROGRAM_IMGMOUNT_DOS_VERSION +Mounting this image file requires a reported DOS version of %u.%u or higher. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Floppy size not recognized +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +Multiple images given and another drive already uses multiple images +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Multiple disk images not supported for that drive +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +Cannot mount hard drive in floppy position. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +Cannot mount floppy in hard drive position. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito bootable CD: -fs iso mounting not supported +. +:PROGRAM_MODE_STATUS +Status for device CON: +---------------------- +Columns=%d +Lines=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +Code page operation not supported on this device +. +:PROGRAM_MODE_RATE_DELAY +Rate and delay must be specified together +. +:PROGRAM_UTF8_HELP +Converts UTF-8 text to view in the current code page. + +UTF8 < [drive:][path]filename +command-name | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +No input text found. +. +:PROGRAM_UTF8_INVALIDCP +Invalid code page for text conversion. +. +:PROGRAM_UTF8_NOT_UTF8 +The input text is UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +An error occurred during text conversion. +. +:PROGRAM_UTF16_HELP +Converts UTF-16 text to view in the current code page. + +UTF16 [/BE|/LE] < [drive:][path]filename +command-name | UTF16 [/BE|/LE] + + /BE Use UTF-16 Big Endian + /LE Use UTF-16 Little Endian +. +:PROGRAM_VTEXT_HELP +Changes V-text mode for the DOS/V emulation. + +VTEXT [mode] + + [mode] can be 0, 1, 2, for no V-text, V-text 1, and V-text 2 respectively. + +Type VTEXT without a parameter to show the current V-text mode status. +. +:PROGRAM_NMITEST_HELP +Generates a non-maskable interrupt (NMI). + +NMITEST + +Note: This is a debugging tool to test if the interrupt handler works properly. +. +:PROGRAM_NMITEST_GENERATE_NMI +Generating a non-maskable interrupt (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +Captures or releases the mouse inside DOSBox-X. + +CAPMOUSE [/C|/R] + + /C Capture the mouse + /R Release the mouse +. +:PROGRAM_CAPMOUSE_MOUSE +Mouse +. +:PROGRAM_CAPMOUSE_CURRENTLY +is currently +. +:PROGRAM_CAPMOUSE_CAPTURED +captured +. +:PROGRAM_CAPMOUSE_RELEASED +released +. +:PROGRAM_AUTOTYPE_HELP +Performs scripted keyboard entry into a running DOS program. + +AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]] + +Where: + -list: prints all available button names. + -w WAIT: seconds before typing begins. Two second default; max of 30. + -p PACE: seconds between each keystroke. Half-second default; max of 10. + + The sequence is comprised of one or more space-separated buttons. + Autotyping begins after WAIT seconds, and each button is entered + every PACE seconds. The , character inserts an extra PACE delay. + +Some examples: + ←[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter←[0m + ←[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: The mapper has no key bindings +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: bounding %s value of %.2f to %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s value '%s' is not a valid floating point number +. +:PROGRAM_ADDKEY_HELP +Generates artificial keypresses. + +ADDKEY [pmsec] [key] + +For example, the command below types "dir" followed by ENTER after 1 second: + +ADDKEY p1000 d i r enter + +You could also try AUTOTYPE command instead of this command to perform +scripted keyboard entry into a running DOS program. +. +:PROGRAM_SETCOLOR_HELP +Views or changes the text-mode color scheme settings. + +SETCOLOR [color# [value]] + +For example: + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Change Color #0 to the specified color value + + ←[32;1mSETCOLOR 7 -←[0m +Return Color #7 to the default color value + + ←[32;1mSETCOLOR 3 +←[0m +Return Color #3 to the preset color value + + ←[32;1mSETCOLOR MONO←[0m +Display current MONO mode status + +To change the current background and foreground colors, use COLOR command. +. +:PROGRAM_SETCOLOR_STATUS +MONO mode status: %s (video mode %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +active +. +:PROGRAM_SETCOLOR_INACTIVE +inactive +. +:PROGRAM_SETCOLOR_UNAVAILABLE +unavailable +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO mode status => active (video mode 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO mode status => inactive (video mode 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +Failed to change MONO mode +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +Must be + or - for MONO: %s +. +:PROGRAM_SETCOLOR_COLOR +Color %d: (%d,%d,%d) or #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Invalid color number - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Invalid color value - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Changing color scheme is not supported for the current video mode. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Unknown boothax mode +. +:PROGRAM_BOOT_SPECIFY_FILE +Must specify BIOS image to boot +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +Unable to open BIOS image +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Must specify BIOS file to load. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Can't open a file +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS File too large +. +:PROGRAM_DELTREE_HELP +Deletes a directory and all the subdirectories and files in it. + +To delete one or more files and directories: +DELTREE [/Y] [drive:]path [[drive:]path[...]] + + /Y Suppresses prompting to confirm you want to delete + the subdirectory. + [drive:]path Specifies the name of the directory you want to delete. + +Note: Use DELTREE cautiously. Every file and subdirectory within the +specified directory will be deleted. + +. +:PROGRAM_TREE_HELP +Graphically displays the directory structure of a drive or path. + +TREE [drive:][path] [/F] [/A] + + /F Displays the names of the files in each directory. + /A Uses ASCII instead of extended characters. + +. +:PROGRAM_TITLE_HELP +Sets the window title for the DOSBox-X window. + +TITLE [string] + + string Specifies the title for the DOSBox-X window. + +. +:PROGRAM_COLOR_HELP +Sets the default console foreground and background colors. + +COLOR [attr] + + attr Specifies color attribute of console output + +Color attributes are specified by TWO hex digits -- the first +corresponds to the background; the second to the foreground. +Each digit can be any of the following values: + + 0 = Black 8 = Gray + 1 = Blue 9 = Light Blue + 2 = Green A = Light Green + 3 = Aqua B = Light Aqua + 4 = Red C = Light Red + 5 = Purple D = Light Purple + 6 = Yellow E = Light Yellow + 7 = White F = Bright White + +If no argument is given, this command restores the original color. + +The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute +the COLOR command with a foreground and background color that are the same. + +Example: "COLOR fc" produces light red on bright white. + +. +:PROGRAM_SWITCH_LANG +You have changed the active code page to %d. +Do you want to load language file %s for this code page ? +. +:PROGRAM_ALREADY_MOUNTED +Drive %s: is already mounted. Unmount it first, and then try again. +. +:PROGRAM_DRIVE_NO_EXIST +Drive %s: does not exist in the system. +. +:PROGRAM_DRIVE_WARN +Do you really want to give DOSBox-X access to your real %s drive %s ? +. +:DRIVE_TYPE_FLOPPY +floppy +. +:DRIVE_TYPE_REMOVABLE +removable +. +:DRIVE_TYPE_NETWORK +network +. +:DRIVE_TYPE_HARD +hard +. +:DRIVE_TYPE_LOCAL +local +. +:DRIVE_TYPE_CDROM +CD-ROM +. +:PROGRAM_CDDRIVE_WARN +CD drive %s is currently mounted with the image: + +%s + +Do you want to change the CD image now? +. +:PROGRAM_CDMOUNT_ERROR +Could not mount the selected CD image. +. +:ELTORITO_IMAGE +El Torito floppy image +. +:RAM_FLOPPY_IMAGE +RAM floppy image +. +:PROGRAM_FLOPPY_WARN +Floppy drive %s is currently mounted with the image: + +%s + +Do you want to change the floppy disk image now? +. +:PROGRAM_FLOPPYMOUNT_ERROR +Could not mount the selected floppy disk image. +. +:PROGRAM_MOUNT_MORE_IMAGES +Do you want to mount more image file(s)? +. +:PROGRAM_MOUNT_PATH_TOOLONG +The path for the file(s) to mount is too long. +. +:PROGRAM_BOOT_FAILED +Drive %s: failed to boot. +. +:PROGRAM_MOUNT_FAILED +Drive %s: failed to mount. +. +:PROGRAM_MOUNT_IMAGE +Mounted %s to Drive %s: +%s %s +. +:ARCHIVE +archive +. +:DISK_IMAGE +disk image +. +:READONLY_MODE +Read-only mode +. +:PROGRAM_MOUNT_SELECT_DRIVE +Select a drive/directory to mount for Drive %s: as %s +. +:PROGRAM_MOUNT_CDROM_SUPPORT +Mounting a directory as CD-ROM gives an limited support. +. +:PROGRAM_MOUNT_NOT_MOUNTED +Drive %s: is not yet mounted. +. +:PROGRAM_PROGRAM_ALREADY +Another program is already running. +. +:PROGRAM_SHELL_ALREADY +Another shell is currently running. +. +:PROGRAM_MOUNT_SUCCESS +Drive %s is now mounted to: +%s +. +:PROGRAM_WARN_QUICKLAUNCH +Quick launch automatically mounts drive C in DOSBox-X. +Drive C has already been mounted. Do you want to continue? +. +:PROGRAM_NO_EXECUTABLE +Executable file not found. +. +:PROGRAM_EXEC_FINISHED +Program has finished execution. Do you want to unmount Drive %s now? +. +:PROGRAM_ASK_CHCP +Drive %c: may require code page %d to be properly accessed. + +Do you want to change the current code page to %d now? +. +:PROGRAM_CHANGING_CODEPAGE +Changing code page +. +:IMAGEMOUNT_CHANGE_DOSVER +Mounting this type of disk images requires a reported DOS version of %s or higher. +Do you want to auto - change the reported DOS version to %s now and mount the disk image ? +. +:MENU_DRIVE_NOTEXIST +Drive does not exist or is mounted from disk image. +. +:MENU_SAVE_IMAGE_FAILED +Failed to save disk image. +. +:MENU_JP_CPONLY +This function is only available for the Japanese code page (932). +. +:MENU_CH_CPONLY +This function is only available for the Chinese code pages (936, 950, or 951). +. +:MENU_GLIDE_ERROR +Glide passthrough cannot be enabled. Check the Glide wrapper installation. +. +:MENU_HIGH_INTENSITY_ERROR +High intensity is not supported for the current video mode. +. +:MENU_SAVE_FILE_ERROR +Cannot save to the file: %s +. +:MENU_INT2F_SUCCESS +The INT 2Fh hook has been successfully set. +. +:MENU_INT2F_ALREADY_SET +The INT 2Fh hook was already set up. +. +:QUIT_DISABLED +Quitting from DOSBox-X with this is currently disabled. +. +:QUIT_CONFIRM +This will quit from DOSBox-X. +Are you sure? +. +:QUIT_GUEST_DISABLED +You cannot quit DOSBox-X while running a guest system. +. +:QUIT_GUEST_CONFIRM +You are currently running a guest system. +Are you sure to quit anyway now? +. +:QUIT_FILE_OPEN_DISABLED +You cannot quit DOSBox-X while one or more files are open. +. +:QUIT_FILE_OPEN_CONFIRM +It may be unsafe to quit from DOSBox-X right now +because one or more files are currently open. +Are you sure to quit anyway now? +. +:QUIT_PROGRAM_DISABLED +You cannot quit DOSBox-X while running a program or game. +. +:QUIT_PROGRAM_CONFIRM +You are currently running a program or game. +Are you sure to quit anyway now? +. +:LANG_JP_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the Japanese PC-98 or JEGA/AX system. + +Are you sure to use the language file for this machine type? +. +:LANG_DOSV_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the current DOS/V system. + +Are you sure to use the language file for this system type? +. +:LANG_CHANGE_CP +The specified language file uses code page %d. Do you want to change to this code page accordingly?. +. +:SCALER_LOAD_WARN +This scaler may not work properly or have undesired effect: + +%s + +Do you want to force load the scaler? +. +:PIXEL_SHADER_WARN +This pixel shader may be unneeded or have undesired effect: + +%s + +Do you want to load the pixel shader anyway? + +(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message) +. +:PIXEL_SHADER_LOADED +Loaded pixel shader - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +Mapper Editor is not currently available. +. +:OPL_REC_COMPLETED +Saved Raw OPL output to the file: + +%s +. +:OPL_CAPTURE_FAILED +Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format. +. +:TTF_DBCS_ONLY +This function is only available for the Chinese/Japanese/Korean code pages. +. +:SAVE_FAILED +Failed to save the current state. +. +:SAVE_CORRUPTED +Save state corrupted! Program may not work. +. +:SAVE_SCREENSHOT +Saved screenshot to the file: + +%s +. diff --git a/contrib/translations/ja/ja_JP.lng b/contrib/translations/ja/ja_JP.lng index c72199267c7..aeefa3b07d9 100644 --- a/contrib/translations/ja/ja_JP.lng +++ b/contrib/translations/ja/ja_JP.lng @@ -1,6 +1,6 @@ :DOSBOX-X:LANGUAGE:Japanese :DOSBOX-X:CODEPAGE:932 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK:PC-98, JEGA, DOS/V エミュレーション、または とコード ページ 932 の日本語フォントを使用して、日本語の表示と印刷を直接サポートします :AUTOEXEC_CONFIGFILE_HELP このセクションに記載の行は起動時に実行されます。 @@ -33,7 +33,7 @@ DOSBox-X 設定ツール マッパーファイルを保存 . :WARNING -注意 +警告 . :YES はい @@ -50,6 +50,9 @@ OK :CLOSE 閉じる . +:THEME +テーマ +. :DEBUGCMD デバッガコマンドを入力します . @@ -150,7 +153,7 @@ DOS コマンドのヘルプ 現在の Sound Blaster 設定 . :CURRENT_MIDICONFIG -現在の MIDI 設定 +現在の MIDI/OPL 設定 . :CREATE_IMAGE 空のディスクイメージ作成 @@ -2414,6 +2417,9 @@ DOSBox-X コマンド・シェルの起動 :MENU:mapper_shutdown DOSBox-Xを終了する . +:MENU:mapper_capkeyboard +Capture keyboard +. :MENU:mapper_capmouse マウスをキャプチャ . @@ -2982,7 +2988,7 @@ TrueTypeフォント(TTF/OTF)の選択... Sound Blaster設定の表示 . :MENU:midi_info -MIDIデバイス設定の表示 +MIDI/OPLデバイス設定の表示 . :MENU:DOSMenu DOS @@ -3683,3 +3689,857 @@ CPU:簡易コア :MAPPER:togmenu メニューバー表示切替 . +:PROGRAM_FLAGSAVE_UNFLAGALL +ファイルをセーブするフラグをすべて解除しました。 + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +ファイル %s をセーブするフラグを解除しました。 + +. +:PROGRAM_FLAGSAVE_FLAGGED +指定したファイルはすでにフラグを設定済みです。 - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +フラグを設定するファイルの数が多すぎます。 + +. +:PROGRAM_FLAGSAVE_SAVED +ファイル %s をセーブするフラグを設定しました。 + +. +:PROGRAM_FLAGSAVE_LIST +フラグを設定したファイル: +. +:PROGRAM_FLAGSAVE_HLP +セーブステート機能でセーブするファイルのフラグを設定します。 + +FLAGSAVE [ファイル] [/F] [/R]] [/U] + + ファイル セーブするファイルのフラグを設定するファイルを指定 (複数指定可) + /F ファイルが見つからなくても強制的にフラグを設定します。 + /R 指定したファイルのフラグを解除します。 + /U すべてのファイルのフラグを解除します。 + +パラメータなしで FLAGSAVE を実行すると設定したファイルの一覧を表示します。 + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh フックは設定されていません。 + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh フックは設定済みです。 + +. +:PROGRAM_INT2FDBG_HELP +デバッグ用途に INT 2Fh をフックします。 + +INT2FDBG [option] + /I フックを設定する + +デバッグ情報のために、コールチェーンの先頭にINT 2Fhをフックします。 + +パラメータなしで INT2FDBG を実行すると現在のフックの状態を表示します。 +. +:PROGRAM_SET80x25 +80x25 テキストモードに切り替えます。 +. +:PROGRAM_SET80x43 +80x43 テキストモードに切り替えます。 +. +:PROGRAM_SET80x50 +80x50 テキストモードに切り替えます。 +. +:PROGRAM_SET80x60 +80x60 テキストモードに切り替えます。 +. +:PROGRAM_SET132x25 +132x25 テキストモードに切り替えます。 +. +:PROGRAM_SET132x43 +132x43 テキストモードに切り替えます。 +. +:PROGRAM_SET132x50 +132x50 テキストモードに切り替えます。 +. +:PROGRAM_SET132x60 +132x60 テキストモードに切り替えます。 +. +:PROGRAM_RESCAN_HELP +再スキャンし、ホストによるマウントされたドライブへの変更をキャッシュします。 + +RESCAN [/A] [/Q] +RESCAN [ドライブ:] [/Q] + + [/A] すべてのドライブを再スキャンします。 + [/Q] 非表示(Quiet) モードで実行します。 + [ドライブ:] 再スキャンするドライブ + +パラメータなしで RESCAN を実行するとカレントドライブを再スキャンします。 + +. +:PROGRAM_CFGTOOL_HELP +DOSBox-X のグラフィカルな設定ツールを起動します。 + +CFGTOOL + +参考: CONFIG コマンドでコマンドラインからも設定の変更が可能です。 +. +:PROGRAM_IMGSWAP_HELP +フロッピー、ハードディスク、光学ドライブのイメージを切り替えます。 + +IMGSWAP drive [position] + drive イメージを切り替えるドライブ + [position] 切り替えるディスク番号を指定 +. +:PROGRAM_INTRO_HELP +フルスクリーン表示で DOSBox-X を紹介します。 + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS ディスクインデックスにイメージが設定されていません。 +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +無効なマウント番号です。 +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +無効な fstype です。 +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +無効なサイズパラメータです。 +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +ドライブ番号 %d はマウントされていません。 +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +無効な IMGMOUNT のアンマウント方法です。 +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +無効なドライブ文字です。 +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +パーティションは、標準INT 13hのハードディスク割り当てと競合してマウントすること +はできません。別のドライブ文字を選択して下さい。 +. +:PROGRAM_ELTORITO_LETTER +El Torito エミュレーションには 適切なCD-ROM ドライブ文字を指定して下さい。 +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +指定したEl Torito CD-ROM ドライブはすでに非CD-ROM デバイスに指定されています。 +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +指定したEl Torito CD-ROM ドライブは CD-ROM ドライブではありません。 +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito エミュレーションには -t floppy を指定する必要があります。 +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM ブートレコードが見つかりません。 +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito エントリが読み取れません。 +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +El Torito 起動用フロッピーが見つかりません。 +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +ブート可能領域が見つかりませんでした。 +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito ブートセクタが読み取れません。 +. +:PROGRAM_IMGMAKE_ALIGNMENT +無効な alignment オプションです。 +. +:PROGRAM_IMGMAKE_PARTOFS +無効な -partofs オプションです。 +. +:PROGRAM_IMGMAKE_FAT +無効な -fat オプションです。 12, 16, 32のいずれかを指定して下さい。 +. +:PROGRAM_IMGMAKE_FATCOPIES +無効な -fatcopies オプションです。 +. +:PROGRAM_IMGMAKE_SPC +無効な -spc オプションです。指定可能な値の範囲外です。 +. +:PROGRAM_IMGMAKE_SPC2 +無効な -spc オプションです。2の累乗で指定して下さい。 +. +:PROGRAM_IMGMAKE_ROOTDIR +無効な -rootdir オプションです。 +. +PROGRAM_IMGMAKE_BOOTSECT +ブートセクタの位置が不正です。 +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +健全性チェック: ボリュームサイズの位置が不正です。 +. +:PROGRAM_IMGMAKE_FAT_ALIGN +健全性チェック: FAT テーブルの位置が不正です。 +. +:PROGRAM_IMGMAKE_SECTPERFAT +エラー: 生成されたファイルシステムは 1FAT あたり256セクタ以上ですが FAT32 では + ありません。 +. +:PROGRAM_IMGMAKE_VOLSIZE +健全性チェック: ボリュームサイズの位置が不正です。 +. +:PROGRAM_IMGMAKE_CLUSTERS +エラー: 設定したパラメータに対して、生成されたファイルシステムのクラスタ数が小 + さすぎます +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +警告: クラスタ数がボリュームのサイズに対して大きすぎます。 + より小さいセクタ数を設定します。 +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +健全性チェック: 第一クラスタの位置が不正です。 +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +警告: クラスタサイズ >= 64KB は MS-DOS と SCANDISK と互換性がありません。 +. +:PROGRAM_BOOT_UNSUPPORTED +サポートされていないブートモードです。 +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +既存のオーバレイは新しいものに置き換えられました。 +. +:PROGRAM_LOADFIX_EMS_FREE +EMS ハンドル %u: 解放できませんでした。 +. +:PROGRAM_LOADFIX_XMS_FREE +XMS ハンドル %u: 解放できませんでした。 +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS ブロックを割り当てました (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +EMS ブロックを割り当てることができませんでした。 +. +:PROGRAM_LOADFIX_NOEMS +EMS は有効ではありません。 +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS ブロックを割り当てました (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +XMS ブロックを割り当てることができませんでした。 +. +:PROGRAM_LOADFIX_NOXMS +XMS は有効ではありません。 +. +:PROGRAM_LOADFIX_NOALLOC +最も低い MCB は 64KBより上のため、メモリを確保しません。 +. +:PROGRAM_BOOT_SWAP_ALREADY +複数イメージを指定しましたが、すでに別のドライブで複数イメージを設定しています +. +:PROGRAM_BOOT_NOT_SPECIFIED +イメージを指定して下さい。 +. +:PROGRAM_BOOT_IS_PC88 +D88 イメージは PC-88 用と思われます。ブートできません。 +. +:PROGRAM_BOOT_BPS_TOOLARGE +バイト/セクタ が大きすぎます +. +:PROGRAM_BOOT_DRIVE_READERROR +ドライブを読み込みできませんでした。 +. +:PROGRAM_START_HELP_WIN +別ウィンドウで指定したコマンドまたはプログラムを実行します。 + +START [+|-|_] コマンド [引数] + + [+|-|_] : プログラムを最大化・最小化・非表示にする。 + /MAX, /MIN, /HID でも指定可能です。 + コマンド : 実行するコマンドまたはプログラム + 引数 : アプリケーションに渡す引数 + +START はWindowsコマンドプロンプトから指定したコマンド・プログラムを実行します。 +"startincon"オプションで指定した以下のコマンドは終了後にキー入力を待ちます: +%s + +参考: ファイル・コマンドへのパスはホストシステムのものを指定します。 +. +:PROGRAM_START_HELP +別ウィンドウで指定したコマンドまたはプログラムを実行します。 + +START /OPEN ファイル +START コマンド [引数] + + /OPEN : 関連付けされたプログラムで指定したファイル・URLを開きます。 + ファイル : 関連付けされたプログラムで開くファイル・URL + コマンド : 実行するコマンドまたはプログラム + 引数 : アプリケーションに渡す引数 + +参考: ファイル・コマンドへのパスはホストシステムのものを指定します。 +. +:PROGRAM_START_COMPLETED +実行したコマンドが終了しました。 +. +:PROGRAM_START_COMMAND +%s を起動します... +. +:PROGRAM_START_CTRLC +(すぐに中止する場合は Ctrl+C を押して下さい) +. +:PROGRAM_START_HOST_ERROR +エラー: START は現在のホストシステムではアプリケーションを起動できません。 +. +:PROGRAM_START_LAUNCH_ERROR +エラー: START はアプリケーションを起動できませんでした。 +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +El Torito ブートCDをフロッピードライブとしてマウントする場合、ファイルを指定し +ないで下さい。 +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +RAM ドライブをマウントする時はファイルを指定しないで下さい。 +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +セクタサイズは 512 バイトより大きく、かつイメージのクラスタサイズ %lu バイトが +セクタサイズの倍数とする必要があります。 +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +ファイルを開くことができませんでした: '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 イメージ '%s' はサポートされていない形式です。 +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +ジオメトリを検出できませんでした。 +. +:PROGRAM_IMGMOUNT_DOS_VERSION +このイメージをマウントするためにDOSバージョンを %u.%u 以上にする必要があります +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +フロッピーのサイズを認識できませんでした。 +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +複数イメージを指定しましたが、すでに別のドライブで複数イメージを設定しています +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +そのドライブは複数イメージのマウントに対応していません。 +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +ハードディスクはフロッピーの場所にマウントできません。 +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +フロッピーはハードディスクの場所にマウントできません。 +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito ブート CD: -fs iso によるマウントはサポートされていません。 +. +:PROGRAM_MODE_STATUS +CON デバイスの状態: +---------------------- +桁 =%d +行 =%d +. +:PROGRAM_MODE_NOTSUPPORTED + +このデバイスではコードページに関する設定はできません。 +. +:PROGRAM_MODE_RATE_DELAY +RATE と DELAY は一緒に指定して下さい。 +. +:PROGRAM_UTF8_HELP +UTF-8 のテキストを表示できるよう、現在のコードページへ変換します。 + +UTF8 < [ドライブ:][パス]ファイル名 +コマンド名 | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +入力テキストがありません。 +. +:PROGRAM_UTF8_INVALIDCP +現在のコードページは変換できません。 +. +:PROGRAM_UTF8_NOT_UTF8 +入力されたテキストは UTF-16 です。 +. +:PROGRAM_UTF8_CONVERSION_ERROR +テキストの変換でエラーがありました。 +. +:PROGRAM_UTF16_HELP +UTF-16のテキストを表示できるよう、現在のコードページへ変換します。 + +UTF16 [/BE|/LE] < [ドライブ:][パス]ファイル名 +コマンド名 | UTF16 [/BE|/LE] + + /BE UTF-16 ビッグエンディアンを使用 + /LE UTF-16 リトルエンディアンを使用 +. +:PROGRAM_VTEXT_HELP +DOS/V エミュレーションの V-text モードを表示・変更します。 + +VTEXT [mode] + + [mode] 設定値: 0, 1, 2 それぞれV-textなし、V-text 1, V-text 2 に該当 + +パラメータなしで VTEXT を実行すると現在の V-text モードの状態を表示します。 +. +:PROGRAM_NMITEST_HELP +マスク不可割り込み(NMI)を生成します。 + +NMITEST + +参考: これは割り込みハンドラが意図通り動作することを確認するデバッグツールです +. +:PROGRAM_NMITEST_GENERATE_NMI +マスク不可割り込み(NMI)を生成します (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +DOSBox-X 内のマウスをキャプチャまたは解放します。 + +CAPMOUSE [/C|/R] + + /C マウスをキャプチャする + /R マウスのキャプチャを解放する +. +:PROGRAM_CAPMOUSE_MOUSE +マウス +. +:PROGRAM_CAPMOUSE_CURRENTLY +は現在 +. +:PROGRAM_CAPMOUSE_CAPTURED +キャプチャされています。 +. +:PROGRAM_CAPMOUSE_RELEASED +解放されています。 +. +:PROGRAM_AUTOTYPE_HELP +実行中の DOS プログラムにスクリプトに基づきキー入力を実施します。 + +AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]] + + -list: 設定可能なボタンの一覧を表示します。 + -w WAIT: タイプを開始するまでの時間(秒)。デフォルト 2秒、最大 30秒 + -p PACE: キー入力間の時間(秒)。 デフォルト 0.5秒、最大10秒 + + シーケンスはスペースで区切られた一つ以上のボタンで構成されます。 + WAIT 秒後にキー入力を開始し、PACE 秒ごとにキーを入力します。 + , (カンマ)で PACE 秒の遅延を追加します。 + +実行例: + AUTOTYPE -w 1 -p 0.3 up enter , right enter + AUTOTYPE -p 0.2 f1 kp_8 , , enter + AUTOTYPE -w 1.3 esc enter , p l a y e r enter +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: マッパーに該当する割り当てがありません。 +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: %s の値を %.2f から %.2f へ変更します。 +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s 値 '%s' は有効な浮動小数ではありません +. +:PROGRAM_ADDKEY_HELP +人工的なキー入力を生成します。 + +ADDKEY [pmsec] [key] + +以下の例では、"dir" コマンドをタイプし、1秒後にエンターキーをタイプします。 + +ADDKEY p1000 d i r enter + +このコマンドの代わりに、AUTOTYPE コマンドで実行中のDOSプログラムにスクリプトに +よるキー入力を設定することもできます。 +. +:PROGRAM_SETCOLOR_HELP +テキストモードの色設定を表示または変更します。 + +SETCOLOR [color# [value]] + +設定例: + + SETCOLOR 0 (50,50,50) +色番号 #0 を設定した値に変更します + + SETCOLOR 7 - +色番号 #7 の設定をデフォルト値に戻します + + SETCOLOR 3 + +色番号 #3 の設定を設定した値に戻します + + SETCOLOR MONO +現在の MONO モードの状態を表示します + +文字色・背景色の変更には COLOR コマンドを使って下さい。 +. +:PROGRAM_SETCOLOR_STATUS +MONO モード 状態: %s (video mode %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +有効 +. +:PROGRAM_SETCOLOR_INACTIVE +無効 +. +:PROGRAM_SETCOLOR_UNAVAILABLE +設定不可 +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO モード 状態 => 有効 (ビデオモード 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO モード 状態 => 無効 (ビデオモード 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +MONO モードへ変更できませんでした。 +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +MONOは + または - を指定して下さい: %s +. +:PROGRAM_SETCOLOR_COLOR +色番号 %d: (%d,%d,%d) または #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +色番号が無効です - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +色の値が無効です - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +現在のビデオモードは色設定の変更ができません。 +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +不明な boothax モードです。 +. +:PROGRAM_BOOT_SPECIFY_FILE +起動する BIOS イメージを指定して下さい。 +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +BIOS イメージを開くことができませんでした。 +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +読み込む BIOS ファイルを指定して下さい。 +. +:PROGRAM_BIOSTEST_OPEN_ERROR +ファイルが開けません。 +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS ファイルが大きすぎます。 +. +:PROGRAM_DELTREE_HELP +ディレクトリとそれ以下のファイル/ディレクトリを全部削除します。 + +ディレクトリを削除するには: +DELTREE [/Y] [drive:]path [[drive:]path[...]] + + /Y ディレクトリの削除の確認を行いません。 + [drive:]path 削除したいディレクトリの名前を指定します。 + +注意: DELTREE コマンドは非常に危険なコマンドなので注意して使用して下さい。 +ディレクトリとそれ以下のファイル/ディレクトリが全部削除されてしまいます。 + +. +:PROGRAM_TREE_HELP +ドライブまたはパスのディレクトリ構造を図式表示します。 + +TREE [drive:][path] [/F] [/A] + + /F 各ディレクトリの中のファイル名を表示します。 + /A 罫線文字の代わりに ASCII 文字を使います。 + +. +:PROGRAM_TITLE_HELP +DOSBox-X ウィンドウのタイトルを指定します。 + +TITLE [文字列] + + 文字列 DOSBox-X ウィンドウのタイトルを指定します。 + +. +:PROGRAM_COLOR_HELP +コンソールの規定の前景色と背景色を設定します。 + +COLOR [属性] + + 属性 コンソール出力の色属性を指定します。 + +色属性は、2 桁の 16 進数で指定します。 +1 桁目は背景に、2 桁目は全景に対応します。 +各桁には、次のいずれかの値を指定することができます: + + 0 = 黒 8 = 灰色 + 1 = 青 9 = 明るい青 + 2 = 緑 A = 明るい緑 + 3 = 水色 B = 明るい水色 + 4 = 赤 C = 明るい赤 + 5 = 紫 D = 明るい紫 + 6 = 黄色 E = 明るい黄色 + 7 = 白 F = 輝く白 + +引数を指定しないでこのコマンドを実行すると規定の色を復元します。 +前景と背景に同じ色を指定すると、COLOR コマンドは ERRORLEVEL を 1 に指定します。 + +例: "COLOR fc" は輝く白の上に明るい赤を表示します。 + +. +:ERROR +エラー +. +:INFORMATION +情報 +. +:PROGRAM_SWITCH_LANG +コードページが %d に変更されました。このコードページに対応する言語ファイル %s を読み込みますか ? +. +:PROGRAM_ALREADY_MOUNTED +%s: ドライブはすでにマウントされています。アンマウントしてから再度試して下さい。 +. +:PROGRAM_DRIVE_NO_EXIST +ドライブ %s: はシステムに存在しません。 +. +:PROGRAM_DRIVE_WARN +DOSBox-X から実際の %s ドライブ %s: をアクセスできるようにしてよろしいですか? +. +:DRIVE_TYPE_FLOPPY +フロッピー +. +:DRIVE_TYPE_REMOVABLE +リムーバブル +. +:DRIVE_TYPE_NETWORK +ネットワーク +. +:DRIVE_TYPE_HARD +HDD +. +:DRIVE_TYPE_LOCAL +ローカル +. +:DRIVE_TYPE_CDROM +CD-ROM +. +:PROGRAM_CDDRIVE_WARN +CD ドライブ %s には現在以下のイメージがマウントされています。: + +%s + +CD イメージを変更しますか? +. +:PROGRAM_CDMOUNT_ERROR +選択された CD イメージをマウントできませんでした。 +. +:ELTORITO_IMAGE +El Torito フロッピーイメージ +. +:RAM_FLOPPY_IMAGE +RAM フロッピーイメージ +. +:PROGRAM_FLOPPY_WARN +フロッピードライブ %s には現在以下のイメージがマウントされています。: + +%s + +フロッピー イメージを変更しますか? +. +:PROGRAM_FLOPPYMOUNT_ERROR +選択された フロッピー イメージをマウントできませんでした。 +. +:PROGRAM_MOUNT_MORE_IMAGES +マウントするイメージを追加しますか? +. +:PROGRAM_MOUNT_PATH_TOOLONG +マウントするファイルのパスが長すぎます。 +. +:PROGRAM_BOOT_FAILED +%s: ドライブをブートできませんでした。 +. +:PROGRAM_MOUNT_FAILED +%s: ドライブをマウントできませんでした。 +. +:PROGRAM_MOUNT_IMAGE +%s を %s ドライブにマウントしました。: +%s %s +. +:ARCHIVE +アーカイブ +. +:DISK_IMAGE +ディスク・イメージ +. +:READONLY_MODE +読み取り専用 +. +:PROGRAM_MOUNT_SELECT_DRIVE +ドライブ %s:に %sとしてマウントするドライブ/ディレクトリを選択して下さい。 +. +:PROGRAM_MOUNT_CDROM_SUPPORT +ディレクトリを CD-ROM としてマウントする場合、一部制約があります。 +. +:PROGRAM_MOUNT_NOT_MOUNTED +%s: ドライブはマウントされていません。 +. +:PROGRAM_PROGRAM_ALREADY +別のプログラムが実行中です。 +. +:PROGRAM_SHELL_ALREADY +別のシェルが実行中です。 +. +:PROGRAM_MOUNT_SUCCESS +ドライブ %s に以下のフォルダをマウントしました。 +%s +. +:PROGRAM_WARN_QUICKLAUNCH +DOSBox-X のクイック起動は C ドライブにマウントします。 +C ドライブはすでにマウントされていますが、続けますか? +. +:PROGRAM_NO_EXECUTABLE +実行ファイルが見つかりません。 +. +:PROGRAM_EXEC_FINISHED +プログラムの実行が終了しました。 %s ドライブのマウントを解除しますか? +. +:PROGRAM_ASK_CHCP +%c: ドライブを正常にアクセスするためにはコードページを %d に変更した方が良いかもしれません。 + +コードページを %d へ変更しますか? +. +:PROGRAM_CHANGING_CODEPAGE +コードページの変更 +. +:IMAGEMOUNT_CHANGE_DOSVER +この形式のイメージをマウントするためには DOS バージョンが %s 以上である必要があります。DOS バージョンを %s へ変更してイメージをマウントしますか ? +. +:MENU_DRIVE_NOTEXIST +ドライブが存在しないか、イメージがマウントされています。 +. +:MENU_SAVE_IMAGE_FAILED +ディスク・イメージが保存できませんでした。. +. +:MENU_JP_CPONLY +この機能は日本語のコードページ (932) のみに使われます。 +. +:MENU_CH_CPONLY +この機能は中国語のコードページ (936、950、または951) のみに使われます。 +. +:MENU_GLIDE_ERROR +Glide パススルーを設定できませんでした。Glide ラッパーが正しくインストールされているか確認して下さい。 +. +:MENU_HIGH_INTENSITY_ERROR +現在のビデオ・モードでは強調表示はサポートされていません。. +. +:MENU_SAVE_FILE_ERROR +指定のファイルに保存できませんでした: %s +. +:MENU_INT2F_SUCCESS +INT 2Fh フックを設定しました。 +. +:MENU_INT2F_ALREADY_SET +INT 2Fh フックは設定済みです。 +. +:QUIT_DISABLED +現在ここから DOSBox-X を終了できません。 +. +:QUIT_CONFIRM +DOSBox-X を終了してよろしいですか? +. +:QUIT_GUEST_DISABLED +ゲストシステムを実行中は DOSBox-X を終了できません。 +. +:QUIT_GUEST_CONFIRM +ゲストシステムを実行中です。 +終了してもよろしいですか? +. +:QUIT_FILE_OPEN_DISABLED +ファイルを一つ以上開いているため DOSBox-X を終了できません。 +. +:QUIT_FILE_OPEN_CONFIRM +ファイルを一つ以上開いているため、DOSBox-X を終了させることは +安全ではないかもしれません。 +終了してもよろしいですか? +. +:QUIT_PROGRAM_DISABLED +プログラムまたはゲームの実行中は DOSBox-X を終了できません。 +. +:QUIT_PROGRAM_CONFIRM +プログラムまたはゲームを実行中です。 +終了してもよろしいですか? +. +:LANG_JP_INCOMPATIBLE +指定した言語ファイルは日本の PC-98、JEGA/AX システムに対応しておりません。 + +この言語ファイルを使用しますか? +. +:LANG_DOSV_INCOMPATIBLE +指定した言語ファイルは現在の DOS/V システムに対応しておりません。 + +この言語ファイルを使用しますか? +. +:LANG_CHANGE_CP +指定した言語ファイルはコードページ %d を使用します。 + +このコードページへ変更しますか? +. +:SCALER_LOAD_WARN +このスケーラは正しく動作しないか意図しない動作をするかもしれません: + +%s + +このスケーラを強制的に適用しますか? +. +:PIXEL_SHADER_WARN +このピクセルシェーダは正しく動作しないか意図しない動作をするかもしれません: + +%s + +このピクセルシェーダを強制的に適用しますか? + +(ピクセルシェーダのオプションに 'forced' を追加すると、このメッセージを表示せずに強制的に適用します) +. +:PIXEL_SHADER_LOADED +適用したピクセルシェーダ - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +マッパー・エディタは現在使用できません。 +. +:OPL_REC_COMPLETED +Raw OPL 出力をファイルに保存しました: + +%s +. +:OPL_CAPTURE_FAILED +現在のアプリケーションが Raw OPL フォーマットに対応していない ESFM ネイティブモードを使用しているため、Raw OPL 出力をキャプチャできません。 +. +:TTF_DBCS_ONLY +この機能は中国語 / 日本語 / 韓国語 のコードページで使います。 +. +:SAVE_FAILED +現在のステートを保存できませんでした。 +. +:SAVE_CORRUPTED +セーブ・ステートは壊れています! プログラムは動作しないかもしれません。 +. +:SAVE_SCREENSHOT +スクリーンショットを以下のファイルに保存しました: + +%s +. +:HELP_ABOUT_VERSION +DOSBox-X バージョン %s (%s %s %s-bit)%s +. +:HELP_ABOUT_UPDATED +ビルド日時: %s +. +:HELP_ABOUT_COPYRIGHT +Copyright %s-%s %s +. +:HELP_ABOUT_MAINTAINER +プロジェクト管理者: %s +. +:HELP_ABOUT_HOMEPAGE +DOSBox-X ホームページ: %s +. diff --git a/contrib/translations/ko/ko_KR.lng b/contrib/translations/ko/ko_KR.lng index ac288ade500..d7e0e17188f 100644 --- a/contrib/translations/ko/ko_KR.lng +++ b/contrib/translations/ko/ko_KR.lng @@ -1,6 +1,6 @@ :DOSBOX-X:LANGUAGE:Korean :DOSBOX-X:CODEPAGE:949 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK:DOS/V 에뮬레이션 또는 코드 페이지 949의 한국어 글꼴을 사용하여 한국어 표시 및 인쇄를 직접 지원합니다. :AUTOEXEC_CONFIGFILE_HELP 이 섹션에 나열된 줄은 시작할 때 실행됩니다. @@ -150,7 +150,7 @@ DOS 명령 도움말 현재 사운드 블라스터 구성 . :CURRENT_MIDICONFIG -현재 미디 구성 +현재 MIDI/OPL 구성 . :CREATE_IMAGE 빈 디스크 이미지를 만듬 @@ -2424,6 +2424,9 @@ DOSBox-X 명령 쉘을 시작합니다. :MENU:mapper_shutdown DOSBox-X를 종료 . +:MENU:mapper_capkeyboard +Capture keyboard +. :MENU:mapper_capmouse 마우스를 갈무리 . @@ -2992,7 +2995,7 @@ TrueType 글꼴 (TTF/OTF)을 선택... 사운드 블래스터 구성을 표시 . :MENU:midi_info -미디 장치 구성을 표시 +MIDI/OPL 장치 구성 표시 . :MENU:DOSMenu 도스 @@ -3693,3 +3696,837 @@ CPU: 간단한 코어 :MAPPER:togmenu 차림표 막대 표시를 바꿈 . +:PROGRAM_FLAGSAVE_UNFLAGALL +All files unflagged for saving. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +File %s unflagged for saving. + +. +:PROGRAM_FLAGSAVE_FLAGGED +File already flagged for saving - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Too many files to flag for saving. + +. +:PROGRAM_FLAGSAVE_SAVED +File %s flagged for saving + +. +:PROGRAM_FLAGSAVE_LIST +Files flagged for saving: +. +:PROGRAM_FLAGSAVE_HLP +Marks or flags files to be saved for the save state feature. + +FLAGSAVE [file(s) [/F] [/R]] [/U] + + file(s) Specifies one or more files to be flagged for saving. + /F Forces to flag the file(s) even if they are not found. + /R Removes flags from the specified file(s). + /U Removes flags from all flagged files. + +Type FLAGSAVE without a parameter to list flagged files. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh hook has not been set. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh hook has already been set. + +. +:PROGRAM_INT2FDBG_HELP +Hooks INT 2Fh for debugging purposes. + +INT2FDBG [option] + /I Installs hook + +It will hook INT 2Fh at the top of the call chain for debugging information. + +Type INT2FDBG without a parameter to show the current hook status. +. +:PROGRAM_SET80x25 +Changes to 80x25 text mode. +. +:PROGRAM_SET80x43 +Changes to 80x43 text mode. +. +:PROGRAM_SET80x50 +Changes to 80x50 text mode. +. +:PROGRAM_SET80x60 +Changes to 80x60 text mode. +. +:PROGRAM_SET132x25 +Changes to 132x25 text mode. +. +:PROGRAM_SET132x43 +Changes to 132x43 text mode. +. +:PROGRAM_SET132x50 +Changes to 132x50 text mode. +. +:PROGRAM_SET132x60 +Changes to 132x60 text mode. +. +:PROGRAM_RESCAN_HELP +Rescans for changes on mounted drives made on the host by clearing caches. + +RESCAN [/A] [/Q] +RESCAN [drive:] [/Q] + + [/A] Rescan all drives + [/Q] Enable quiet mode + [drive:] The drive to rescan + +Type RESCAN with no parameters to rescan the current drive. + +. +:PROGRAM_CFGTOOL_HELP +Starts DOSBox-X's graphical configuration tool. + +CFGTOOL + +Note: You can also use CONFIG command for command-line configurations. +. +:PROGRAM_IMGSWAP_HELP +Swaps floppy, hard drive and optical disc images. + +←[32;1mIMGSWAP←[0m ←[37;1mdrive←[0m ←[36;1m[position]←[0m + ←[37;1mdrive←[0m Drive letter to swap the image. + ←[36;1m[position]←[0m Disk position to swap to. +. +:PROGRAM_INTRO_HELP +A full-screen introduction to DOSBox-X. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS disk index does not have an image assigned. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Invalid mount number. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Invalid fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Invalid size parameter. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +Drive number %d is not mounted. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Incorrect IMGMOUNT unmount usage. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Invalid drive letter. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Partitions cannot be mounted in conflict with the standard INT 13h hard disk +allotment. Choose a different drive letter to mount to. +. +:PROGRAM_ELTORITO_LETTER +El Torito emulation requires a proper CD-ROM drive letter. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +El Torito CD-ROM drive specified already exists as a non-CD-ROM device +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +El Torito CD-ROM drive specified is not actually a CD-ROM drive. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito emulation must be used with -t floppy at this time. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM boot record not found. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito entries unreadable. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +El Torito bootable floppy not found. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Unable to locate bootable section +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito boot sector unreadable +. +:PROGRAM_IMGMAKE_ALIGNMENT +Invalid alignment +. +:PROGRAM_IMGMAKE_PARTOFS +Invalid -partofs +. +:PROGRAM_IMGMAKE_FAT +Invalid -fat option. Must be 12, 16, or 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +Invalid -fatcopies option +. +:PROGRAM_IMGMAKE_SPC +Invalid -spc option, out of range +. +:PROGRAM_IMGMAKE_SPC2 +Invalid -spc option, must be a power of 2 +. +:PROGRAM_IMGMAKE_ROOTDIR +Invalid -rootdir option +. +PROGRAM_IMGMAKE_BOOTSECT +Invalid bootsector position +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Sanity check failed: FAT tables not aligned +. +:PROGRAM_IMGMAKE_SECTPERFAT +Error: Generated filesystem has more than 256 sectors per FAT and is not FAT32 +. +:PROGRAM_IMGMAKE_VOLSIZE +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_CLUSTERS +Error: Generated filesystem has too few clusters given the parameters +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Warning: Cluster count is too high given the volume size. + Reporting a smaller sector count. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Sanity check failed: First cluster not aligned +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +WARNING: Cluster sizes >= 64KB are not compatible with MS-DOS and SCANDISK +. +:PROGRAM_BOOT_UNSUPPORTED +Unsupported boot mode +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +Existing overlay has been replaced with new overlay. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS handle %u: unable to free +. +:PROGRAM_LOADFIX_XMS_FREE +XMS handle %u: unable to free +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +Unable to allocate EMS block +. +PROGRAM_LOADFIX_NOEMS +EMS not active +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +Unable to allocate XMS block +. +:PROGRAM_LOADFIX_NOXMS +XMS not active +. +:PROGRAM_LOADFIX_NOALLOC +Lowest MCB is above 64KB, nothing allocated +. +:PROGRAM_BOOT_SWAP_ALREADY +Multiple disk images specified and another drive is already connected to the swap list +. +:PROGRAM_BOOT_NOT_SPECIFIED +No images specified +. +:PROGRAM_BOOT_IS_PC88 +The D88 image appears to target PC-88 and cannot be booted. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Bytes/sector too large +. +:PROGRAM_BOOT_DRIVE_READERROR +Error reading drive +. +:PROGRAM_START_HELP_WIN +Starts a separate window to run a specified program or command. + +START [+|-|_] command [arguments] + + [+|-|_]: To maximize/minimize/hide the program. + The options /MAX, /MIN, /HID are also accepted. + command: The command, program or file to start. + arguments: Arguments to pass to the application. + +START opens the Windows command prompt automatically to run these commands +and wait for a key press before exiting (specified by "startincon" option): +%s + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_HELP +Starts a separate window to run a specified program or command. + +START /OPEN file +START command [arguments] + + /OPEN: To open a file or URL with the associated program. + file: The file or URL to open with the associated program. + command: The command or program to start or run. + arguments: Arguments to pass to the application. + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_COMPLETED +The command execution is completed. +. +:PROGRAM_START_COMMAND +Starting %s... +. +:PROGRAM_START_CTRLC +(Press Ctrl+C to exit immediately) +. +:PROGRAM_START_HOST_ERROR +Error: START cannot launch application to run on your current host system. +. +:PROGRAM_START_LAUNCH_ERROR +Error: START could not launch application. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +Do not specify files when mounting floppy drives from El Torito bootable CDs +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +Do not specify files when mounting RAM drives +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +Unable to open '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 image '%s' is not supported +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Unable to detect geometry +. +:PROGRAM_IMGMOUNT_DOS_VERSION +Mounting this image file requires a reported DOS version of %u.%u or higher. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Floppy size not recognized +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +Multiple images given and another drive already uses multiple images +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Multiple disk images not supported for that drive +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +Cannot mount hard drive in floppy position. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +Cannot mount floppy in hard drive position. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito bootable CD: -fs iso mounting not supported +. +:PROGRAM_MODE_STATUS +Status for device CON: +---------------------- +Columns=%d +Lines=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +Code page operation not supported on this device +. +:PROGRAM_MODE_RATE_DELAY +Rate and delay must be specified together +. +:PROGRAM_UTF8_HELP +Converts UTF-8 text to view in the current code page. + +UTF8 < [drive:][path]filename +command-name | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +No input text found. +. +:PROGRAM_UTF8_INVALIDCP +Invalid code page for text conversion. +. +:PROGRAM_UTF8_NOT_UTF8 +The input text is UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +An error occurred during text conversion. +. +:PROGRAM_UTF16_HELP +Converts UTF-16 text to view in the current code page. + +UTF16 [/BE|/LE] < [drive:][path]filename +command-name | UTF16 [/BE|/LE] + + /BE Use UTF-16 Big Endian + /LE Use UTF-16 Little Endian +. +:PROGRAM_VTEXT_HELP +Changes V-text mode for the DOS/V emulation. + +VTEXT [mode] + + [mode] can be 0, 1, 2, for no V-text, V-text 1, and V-text 2 respectively. + +Type VTEXT without a parameter to show the current V-text mode status. +. +:PROGRAM_NMITEST_HELP +Generates a non-maskable interrupt (NMI). + +NMITEST + +Note: This is a debugging tool to test if the interrupt handler works properly. +. +:PROGRAM_NMITEST_GENERATE_NMI +Generating a non-maskable interrupt (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +Captures or releases the mouse inside DOSBox-X. + +CAPMOUSE [/C|/R] + + /C Capture the mouse + /R Release the mouse +. +:PROGRAM_CAPMOUSE_MOUSE +Mouse +. +:PROGRAM_CAPMOUSE_CURRENTLY +is currently +. +:PROGRAM_CAPMOUSE_CAPTURED +captured +. +:PROGRAM_CAPMOUSE_RELEASED +released +. +:PROGRAM_AUTOTYPE_HELP +Performs scripted keyboard entry into a running DOS program. + +AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]] + +Where: + -list: prints all available button names. + -w WAIT: seconds before typing begins. Two second default; max of 30. + -p PACE: seconds between each keystroke. Half-second default; max of 10. + + The sequence is comprised of one or more space-separated buttons. + Autotyping begins after WAIT seconds, and each button is entered + every PACE seconds. The , character inserts an extra PACE delay. + +Some examples: + ←[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter←[0m + ←[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: The mapper has no key bindings +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: bounding %s value of %.2f to %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s value '%s' is not a valid floating point number +. +:PROGRAM_ADDKEY_HELP +Generates artificial keypresses. + +ADDKEY [pmsec] [key] + +For example, the command below types "dir" followed by ENTER after 1 second: + +ADDKEY p1000 d i r enter + +You could also try AUTOTYPE command instead of this command to perform +scripted keyboard entry into a running DOS program. +. +:PROGRAM_SETCOLOR_HELP +Views or changes the text-mode color scheme settings. + +SETCOLOR [color# [value]] + +For example: + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Change Color #0 to the specified color value + + ←[32;1mSETCOLOR 7 -←[0m +Return Color #7 to the default color value + + ←[32;1mSETCOLOR 3 +←[0m +Return Color #3 to the preset color value + + ←[32;1mSETCOLOR MONO←[0m +Display current MONO mode status + +To change the current background and foreground colors, use COLOR command. +. +:PROGRAM_SETCOLOR_STATUS +MONO mode status: %s (video mode %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +active +. +:PROGRAM_SETCOLOR_INACTIVE +inactive +. +:PROGRAM_SETCOLOR_UNAVAILABLE +unavailable +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO mode status => active (video mode 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO mode status => inactive (video mode 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +Failed to change MONO mode +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +Must be + or - for MONO: %s +. +:PROGRAM_SETCOLOR_COLOR +Color %d: (%d,%d,%d) or #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Invalid color number - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Invalid color value - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Changing color scheme is not supported for the current video mode. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Unknown boothax mode +. +:PROGRAM_BOOT_SPECIFY_FILE +Must specify BIOS image to boot +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +Unable to open BIOS image +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Must specify BIOS file to load. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Can't open a file +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS File too large +. +:PROGRAM_DELTREE_HELP +Deletes a directory and all the subdirectories and files in it. + +To delete one or more files and directories: +DELTREE [/Y] [drive:]path [[drive:]path[...]] + + /Y Suppresses prompting to confirm you want to delete + the subdirectory. + [drive:]path Specifies the name of the directory you want to delete. + +Note: Use DELTREE cautiously. Every file and subdirectory within the +specified directory will be deleted. + +. +:PROGRAM_TREE_HELP +Graphically displays the directory structure of a drive or path. + +TREE [drive:][path] [/F] [/A] + + /F Displays the names of the files in each directory. + /A Uses ASCII instead of extended characters. + +. +:PROGRAM_TITLE_HELP +Sets the window title for the DOSBox-X window. + +TITLE [string] + + string Specifies the title for the DOSBox-X window. + +. +:PROGRAM_COLOR_HELP +Sets the default console foreground and background colors. + +COLOR [attr] + + attr Specifies color attribute of console output + +Color attributes are specified by TWO hex digits -- the first +corresponds to the background; the second to the foreground. +Each digit can be any of the following values: + + 0 = Black 8 = Gray + 1 = Blue 9 = Light Blue + 2 = Green A = Light Green + 3 = Aqua B = Light Aqua + 4 = Red C = Light Red + 5 = Purple D = Light Purple + 6 = Yellow E = Light Yellow + 7 = White F = Bright White + +If no argument is given, this command restores the original color. + +The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute +the COLOR command with a foreground and background color that are the same. + +Example: "COLOR fc" produces light red on bright white. + +. +:PROGRAM_SWITCH_LANG +You have changed the active code page to %d. +Do you want to load language file %s for this code page ? +. +:PROGRAM_ALREADY_MOUNTED +Drive %s: is already mounted. Unmount it first, and then try again. +. +:PROGRAM_DRIVE_NO_EXIST +Drive %s: does not exist in the system. +. +:PROGRAM_DRIVE_WARN +Do you really want to give DOSBox-X access to your real %s drive %s ? +. +:DRIVE_TYPE_FLOPPY +floppy +. +:DRIVE_TYPE_REMOVABLE +removable +. +:DRIVE_TYPE_NETWORK +network +. +:DRIVE_TYPE_HARD +hard +. +:DRIVE_TYPE_LOCAL +local +. +:DRIVE_TYPE_CDROM +CD-ROM +. +:PROGRAM_CDDRIVE_WARN +CD drive %s is currently mounted with the image: + +%s + +Do you want to change the CD image now? +. +:PROGRAM_CDMOUNT_ERROR +Could not mount the selected CD image. +. +:ELTORITO_IMAGE +El Torito floppy image +. +:RAM_FLOPPY_IMAGE +RAM floppy image +. +:PROGRAM_FLOPPY_WARN +Floppy drive %s is currently mounted with the image: + +%s + +Do you want to change the floppy disk image now? +. +:PROGRAM_FLOPPYMOUNT_ERROR +Could not mount the selected floppy disk image. +. +:PROGRAM_MOUNT_MORE_IMAGES +Do you want to mount more image file(s)? +. +:PROGRAM_MOUNT_PATH_TOOLONG +The path for the file(s) to mount is too long. +. +:PROGRAM_BOOT_FAILED +Drive %s: failed to boot. +. +:PROGRAM_MOUNT_FAILED +Drive %s: failed to mount. +. +:PROGRAM_MOUNT_IMAGE +Mounted %s to Drive %s: +%s %s +. +:ARCHIVE +archive +. +:DISK_IMAGE +disk image +. +:READONLY_MODE +Read-only mode +. +:PROGRAM_MOUNT_SELECT_DRIVE +Select a drive/directory to mount for Drive %s: as %s +. +:PROGRAM_MOUNT_CDROM_SUPPORT +Mounting a directory as CD-ROM gives an limited support. +. +:PROGRAM_MOUNT_NOT_MOUNTED +Drive %s: is not yet mounted. +. +:PROGRAM_PROGRAM_ALREADY +Another program is already running. +. +:PROGRAM_SHELL_ALREADY +Another shell is currently running. +. +:PROGRAM_MOUNT_SUCCESS +Drive %s is now mounted to: +%s +. +:PROGRAM_WARN_QUICKLAUNCH +Quick launch automatically mounts drive C in DOSBox-X. +Drive C has already been mounted. Do you want to continue? +. +:PROGRAM_NO_EXECUTABLE +Executable file not found. +. +:PROGRAM_EXEC_FINISHED +Program has finished execution. Do you want to unmount Drive %s now? +. +:PROGRAM_ASK_CHCP +Drive %c: may require code page %d to be properly accessed. + +Do you want to change the current code page to %d now? +. +:PROGRAM_CHANGING_CODEPAGE +Changing code page +. +:IMAGEMOUNT_CHANGE_DOSVER +Mounting this type of disk images requires a reported DOS version of %s or higher. +Do you want to auto - change the reported DOS version to %s now and mount the disk image ? +. +:MENU_DRIVE_NOTEXIST +Drive does not exist or is mounted from disk image. +. +:MENU_SAVE_IMAGE_FAILED +Failed to save disk image. +. +:MENU_JP_CPONLY +This function is only available for the Japanese code page (932). +. +:MENU_CH_CPONLY +This function is only available for the Chinese code pages (936, 950, or 951). +. +:MENU_GLIDE_ERROR +Glide passthrough cannot be enabled. Check the Glide wrapper installation. +. +:MENU_HIGH_INTENSITY_ERROR +High intensity is not supported for the current video mode. +. +:MENU_SAVE_FILE_ERROR +Cannot save to the file: %s +. +:MENU_INT2F_SUCCESS +The INT 2Fh hook has been successfully set. +. +:MENU_INT2F_ALREADY_SET +The INT 2Fh hook was already set up. +. +:QUIT_DISABLED +Quitting from DOSBox-X with this is currently disabled. +. +:QUIT_CONFIRM +This will quit from DOSBox-X. +Are you sure? +. +:QUIT_GUEST_DISABLED +You cannot quit DOSBox-X while running a guest system. +. +:QUIT_GUEST_CONFIRM +You are currently running a guest system. +Are you sure to quit anyway now? +. +:QUIT_FILE_OPEN_DISABLED +You cannot quit DOSBox-X while one or more files are open. +. +:QUIT_FILE_OPEN_CONFIRM +It may be unsafe to quit from DOSBox-X right now +because one or more files are currently open. +Are you sure to quit anyway now? +. +:QUIT_PROGRAM_DISABLED +You cannot quit DOSBox-X while running a program or game. +. +:QUIT_PROGRAM_CONFIRM +You are currently running a program or game. +Are you sure to quit anyway now? +. +:LANG_JP_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the Japanese PC-98 or JEGA/AX system. + +Are you sure to use the language file for this machine type? +. +:LANG_DOSV_INCOMPATIBLE +You have specified a language file which uses a code page incompatible with the current DOS/V system. + +Are you sure to use the language file for this system type? +. +:LANG_CHANGE_CP +The specified language file uses code page %d. Do you want to change to this code page accordingly?. +. +:SCALER_LOAD_WARN +This scaler may not work properly or have undesired effect: + +%s + +Do you want to force load the scaler? +. +:PIXEL_SHADER_WARN +This pixel shader may be unneeded or have undesired effect: + +%s + +Do you want to load the pixel shader anyway? + +(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message) +. +:PIXEL_SHADER_LOADED +Loaded pixel shader - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +Mapper Editor is not currently available. +. +:OPL_REC_COMPLETED +Saved Raw OPL output to the file: + +%s +. +:OPL_CAPTURE_FAILED +Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format. +. +:TTF_DBCS_ONLY +This function is only available for the Chinese/Japanese/Korean code pages. +. +:SAVE_FAILED +Failed to save the current state. +. +:SAVE_CORRUPTED +Save state corrupted! Program may not work. +. +:SAVE_SCREENSHOT +Saved screenshot to the file: + +%s +. diff --git a/contrib/translations/nl/nl_NL.lng b/contrib/translations/nl/nl_NL.lng index c6339b9d00e..a9f84febe07 100644 --- a/contrib/translations/nl/nl_NL.lng +++ b/contrib/translations/nl/nl_NL.lng @@ -1,6 +1,6 @@ :DOSBOX-X:LANGUAGE:Nederlands (Nederland) :DOSBOX-X:CODEPAGE:858 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK: :AUTOEXEC_CONFIGFILE_HELP Lijnen in dit gedeelte worden uitgevoerd bij opstarten. @@ -93,7 +93,7 @@ Nu uitvoeren Extra content: . :CONTENT -Content: +Inhoud: . :EDIT_FOR Bewerk %s @@ -101,15 +101,9 @@ Bewerk %s :HELP_FOR Help voor %s . -:HELP_INFO -Klik op de "Help" knop hieronder om meer hulpinformatie te zien. -. :SELECT_VALUE Selecteer eigenschapswaarde . -:CONFIGURATION_FOR -Configuratie voor %s -. :CONFIGURATION Configuratie . @@ -150,7 +144,7 @@ Huidige geluidsmixervolumes Sound Blaster configuratie . :CURRENT_MIDICONFIG -Huidige MIDI configuratie +Huidige MIDI/OPL configuratie . :CREATE_IMAGE Lege schijfimage maken @@ -164,9 +158,6 @@ Printerapparaatlijst :INTRODUCTION Introductie . -:CONFIGURE_GROUP -Kies een instellingengroep om te configureren: -. :SHOW_ADVOPT Toon geavanceerde opties . @@ -455,11 +446,11 @@ De huidige gekoppelde schijven zijn: . :PROGRAM_MOUNT_NOT_FORMATTED -Drive not formatted. Format it before accessing the drive. +Schijf niet geformatteerd. Formatteer de schijf voordat u hem gebruikt. . :PROGRAM_MOUNT_UNSUPPORTED_EXT -Unsupported extension %s: Mounted as raw IMG image. +Niet-ondersteunde extensie %s: gekoppeld als rauw IMG-bestand. . :PROGRAM_IMGMOUNT_STATUS_FORMAT @@ -948,7 +939,7 @@ Opstarten van schijf :PROGRAM_LOADROM_HELP Laadt het opgegeven ROM-imagebestand voor video-BIOS of IBM BASIC. -LOADROM ROM_file +LOADROM ROM_bestand . :PROGRAM_LOADROM_SPECIFY_FILE @@ -978,7 +969,7 @@ BASIC-ROM geladen. :PROGRAM_BIOSTEST_HELP Start op in een BIOS-image voor het uitvoeren van CPU-tester BIOS. -BIOSTEST image_file +BIOSTEST image_bestand . :VHD_ERROR_OPENING @@ -1025,10 +1016,6 @@ Moet het stationsnummer (0 tot %d) specificeren om de image (0,1=fda,fdb;2,3=hda Kon imagebestand niet laden. Controleer of het pad correct is en de image toegankelijk is. -. -:PROGRAM_IMGMOUNT_DYNAMIC_VHD_UNSUPPORTED -Dynamische VHD-bestanden worden niet ondersteund. - . :PROGRAM_IMGMOUNT_INVALID_GEOMETRY Kan schijfgeometrie niet uit de image halen. @@ -1092,14 +1079,14 @@ Meerdere bestanden wordt alleen ondersteund voor cue/iso-imagebestanden. . :PROGRAM_IMGMOUNT_HELP -Koppeld floppy, harde schijf en optische schijf-images. -←[32;1mIMGMOUNT←[0m ←[37;1mdrive←[0m ←[36;1mfile←[0m [-ro] [-t floppy] [-fs fat] [-size ss,s,h,c] -←[32;1mIMGMOUNT←[0m ←[37;1mdrive←[0m ←[36;1mfile←[0m [-ro] [-t hdd] [-fs fat] [-size ss,s,h,c] [-ide controller] -←[32;1mIMGMOUNT←[0m ←[37;1mdriveNum←[0m ←[36;1mfile←[0m [-ro] [-fs none] [-size ss,s,h,c] [-reservecyl #] -←[32;1mIMGMOUNT←[0m ←[37;1mdrive←[0m ←[36;1mfile←[0m [-t iso] [-fs iso] -←[32;1mIMGMOUNT←[0m ←[37;1mdrive←[0m [-t floppy] -bootcd cdDrive (of -el-torito cdDrive) -←[32;1mIMGMOUNT←[0m ←[37;1mdrive←[0m -t ram -size size -←[32;1mIMGMOUNT←[0m -u ←[37;1mdrive|driveNum←[0m (of ←[32;1mIMGMOUNT←[0m ←[37;1mdrive|driveNum←[0m ←[36;1mfile←[0m [opties] -u) +Koppelt floppy, harde schijf en optische schijf-images. +←[32;1mIMGMOUNT←[0m ←[37;1mschijf←[0m ←[36;1mbestand←[0m [-ro] [-t floppy] [-fs fat] [-size ss,s,h,c] +←[32;1mIMGMOUNT←[0m ←[37;1mschijf←[0m ←[36;1mbestand←[0m [-ro] [-t hdd] [-fs fat] [-size ss,s,h,c] [-ide controller] +←[32;1mIMGMOUNT←[0m ←[37;1mschijfNum←[0m ←[36;1mbestand←[0m [-ro] [-fs none] [-size ss,s,h,c] [-reservecyl #] +←[32;1mIMGMOUNT←[0m ←[37;1mschijf←[0m ←[36;1mbestand←[0m [-t iso] [-fs iso] +←[32;1mIMGMOUNT←[0m ←[37;1mschijf←[0m [-t floppy] -bootcd cdDrive (of -el-torito cdDrive) +←[32;1mIMGMOUNT←[0m ←[37;1mschijf←[0m -t ram -size groote +←[32;1mIMGMOUNT←[0m -u ←[37;1mschijf|schijfNum←[0m (of ←[32;1mIMGMOUNT←[0m ←[37;1mschijf|schijfNum←[0m ←[36;1mbestand←[0m [opties] -u) ←[37;1mdrive←[0m Schijfletter om image te koppelen. ←[37;1mdriveNum←[0m Schijfnummer, waar 0-1 zijn FDDs, 2-5 zijn HDDs. ←[36;1mfile←[0m Imagebestand(en), of ←[33;1mIMGMAKE.IMG←[0m als niet gespecificeerd. @@ -1307,105 +1294,106 @@ Moet een poortnummer tussen 1 en 9 specificeren. . :PROGRAM_VHDMAKE_WRITERR -Could not write to new VHD image "%s", aborting. +Kon niet schrijven naar nieuwe VHD-bestand "%s", afgebroken. . :PROGRAM_VHDMAKE_REMOVEERR -Could not erase file "%s" +Kon bestand "%s" niet wissen . :PROGRAM_VHDMAKE_RENAME -You'll have to manually rename the newly created VHD image. +U moet de nieuw gemaakte VHD-bestand handmatig hernoemen. . :PROGRAM_VHDMAKE_SUCCESS -New VHD image successfully created. You can mount it with ←[34;1mIMGMOUNT←[0m. +Nieuwe VHD-bestand succesvol aangemaakt. U kunt deze koppelen met ←[34;1mIMGMOUNT←[0m]. . :PROGRAM_VHDMAKE_ERROPEN -Error, could not open image file "%s". +Fout, kon image-bestand "%s" niet openen. . :PROGRAM_VHDMAKE_BADSIZE -Bad VHD size specified, aborting! +Verkeerde VHD-grootte opgegeven, afgebroken! . :PROGRAM_VHDMAKE_FNEEDED -A pre-existing VHD image can't be silently overwritten without -f option! +Een bestaand VHD-abestand kan niet overschreven worden zonder de optie -f! . :PROGRAM_VHDMAKE_BADPARENT -The parent VHD image "%s" can't be opened for linking, aborting! +De bovenliggende VHD-bestand "%s" kan niet worden geopend voor +koppeling, afgebroken! . :PROGRAM_VHDMAKE_NOINFO -Couldn't query info for "%s". +Kan informatie voor "%s" niet opvragen. . :PROGRAM_VHDMAKE_BLOCKSTATS -with %d/%d blocks allocated. + met %d/%d blokken toegewezen. . :PROGRAM_VHDMAKE_INFO VHD "%s" type is %s. -Its virtual size is %.02f MB - +De virtuele grootte is %.02f MB . :PROGRAM_VHDMAKE_CANTMERGE -%s is not a Differencing disk, can't merge! +%s is geen differentiërende schijf, kan niet samenvoegen! . :PROGRAM_VHDMAKE_MERGEREPORT -%d sectors in %d blocks from "%s" merged into "%s". +%d sectoren in %d blokken van "%s" samengevoegd tot "%s". . :PROGRAM_VHDMAKE_MERGENODELETE -Couldn't remove snapshot "%s", you'll have to do it yourself! - +Snapshot "%s" kan niet worden verwijderd. Dit moet u zelf doen! . :PROGRAM_VHDMAKE_MERGEOKDELETE -Snapshot VHD merged and deleted. +VHD snapshot samengevoegd en verwijderd. . :PROGRAM_VHDMAKE_MERGEFAILED -Failure while merging, aborted! -. -:PROGRAM_VHDMAKE_MERGEWARNCORRUPTION -Parent "%s" contents could be corrupted! +Samenvoegen mislukt, afgebroken! . -:PROGRAM_VHDMAKE_ABSPATH_WIN -Warning: an absolute path to parent limits portability to Windows. -Please prefer a path relative to differencing image file! +:PROGRAM_VHDMAKE_MERGEWARNCORRUPTION + De inhoud van bovenliggende "%s" kan beschadigd zijn! . -:PROGRAM_VHDMAKE_ABSPATH_UX -ERROR: an absolute path to parent inhibits portability. -Use a path relative to differencing image file! +:PROGRAM_VHDMAKE_ABSPATH +Waarschuwing: een absoluut pad naar het bovenliggende bestand verhindert +portabiliteit. Geef de voorkeur aan een pad dat relatief is aan het +differentiërende imagebestand! . :PROGRAM_VHDMAKE_HELP -Creates Dynamic or Differencing VHD images, or converts raw images -into Fixed VHD. -←[32;1mVHDMAKE←[0m [-f] new.vhd size[BKMGT] -←[32;1mVHDMAKE←[0m ←[34;1m-convert←[0m raw.hdd new.vhd -←[32;1mVHDMAKE←[0m [-f] ←[34;1m-link←[0m parent.vhd new.vhd +Maakt dynamische of differentiërende VHD-bestanden, converteert ruwe images +naar Fixed VHD, toont informatie over VHD-bestanden en voegt ze samen. +←[32;1mVHDMAKE←[0m [-f] nieuw.vhd groote[BKMGT] +←[32;1mVHDMAKE←[0m ←[34;1m-convert←[0m ruw.hdd nieuw.vhd +←[32;1mVHDMAKE←[0m [-f] ←[34;1m-link←[0m parent.vhd nieuw.vhd ←[32;1mVHDMAKE←[0m ←[34;1m-merge←[0m delta.vhd ←[32;1mVHDMAKE←[0m ←[34;1m-info←[0m a.vhd - -c | -convert convert a raw hd image to Fixed VHD, renaming it to new.vhd - -l | -link create a new Differencing VHD new.vhd and link it to the - pre-existing parent image parent.vhd - -f | -force force overwriting a pre-existing image file - -i | -info show useful information about a.vhd image - -m | -merge merge differencing delta.vhd to its parent - new.vhd name of the new Dynamic VHD image to create - size disk size (eventually with size unit, Bytes is implicit) -When converting a raw disk image to Fixed VHD, it has to be partitioned with -MBR scheme and formatted with FAT format. -When creating a Dynamic VHD, its size must range from 3 MB to 2040 GB. -The Dynamic VHD created is not partitioned nor formatted: to directly mount to -a drive letter with ←[34;1mIMGMOUNT←[0m, please consider using ←[34;1mIMGMAKE←[0m instead. -A merged snapshot VHD is automatically deleted if merge is successful. + -c | -convert een ruw hd-bestand converteren naar Fixed VHD en hernoemen + -l | -link Maak een nieuwe differentiërende VHD bestand en koppel deze aan + een reeds bestaande bovenliggende parent.vhd bestand + -f | -force overschrijven van een bestaand bestand forceren + -i | -info toon informatie over een VHD bestand + -m | -merge voeg een differentiërende VHD bestand samen met zijn + bovenliggende bestand + nieuw.vhd name van een nieuw Dynamisch VHD bestand om aan te maken + groote schijfgrootte (eventueel met grootte-eenheid, bytes is + impliciet) +Bij het converteren van een ruw schijfkopie naar een Fixed VHD moet deze worden +gepartitioneerd met het MBR-schema en geformatteerd met het FAT-formaat. +Dynamische VHD bestanden mogen in grootte variëren van 3 MB tot 2040 GB. +Een nieuw dynamische VHD is niet gepartitioneerd of geformatteerd. Om de VHD +direct te koppelen aan een stationsletter met ←[34;1mIMGMOUNT←[0m, kunt u overwegen om +←[34;1mIMGMAKE←[0m te gebruiken. +Een samengevoegde snapshot-VHD wordt automatisch verwijderd als de samenvoeging +succesvol is. + . :SHELL_CMD_TREE_ERROR Geen mappen aanwezig @@ -1678,7 +1666,7 @@ Wacht op een toetsaanslag om door te gaan. . :SHELL_CMD_PAUSE_HELP_LONG -PAUSE +PAUZE . :SHELL_CMD_COPY_FAILURE @@ -1965,7 +1953,6 @@ IF [NOT] EXIST bestandsnaam commando NOT Commando wordt alleen uitgevoerd als de conditie ONJUIST is. - ERRORLEVEL nummer Commando wordt niet uitgevoerd, als de foutcode van het laatste commando gelijk of hoger is dan het opgegeven nummer. @@ -2070,7 +2057,7 @@ volgende commando hernoemt alle tekst bestanden: ←[37;1mREN *.TXT *.BAK←[0m . :SHELL_CMD_DELETE_HELP -Verwijdert een of meer bestanden. +Verwijdert één of meer bestanden. . :SHELL_CMD_DELETE_HELP_LONG @@ -2087,7 +2074,7 @@ ERASE [/P] [/F] [/Q] namen . :SHELL_CMD_COPY_HELP -Kopieert een of meer bestanden. +Kopieert één of meer bestanden. . :SHELL_CMD_COPY_HELP_LONG @@ -2418,15 +2405,15 @@ Herstart gastsysteem :MENU:mapper_loadmap Mapper-bestand laden... . -:MENU:mapper_loadlanguage -Taalbestand laden... -. :MENU:mapper_quickrun Snelstartprogramma... . :MENU:mapper_shutdown Afsluiten van DOSBox-X . +:MENU:mapper_capkeyboard +Capture keyboard +. :MENU:mapper_capmouse Muis vastleggen . @@ -2545,31 +2532,31 @@ CPU-snelheid emuleren 486DX5 133MHz (~47810 cycli) . :MENU:cpu586-60 -Pentium 60MHz (~31545 cycli) +Pentium 60MHz (~32090 cycli) . :MENU:cpu586-66 Pentium 66MHz (~35620 cycli) . :MENU:cpu586-75 -Pentium 75MHz (~43500 cycli) +Pentium 75MHz (~40072 cycli) . :MENU:cpu586-90 -Pentium 90MHz (~52000 cycli) +Pentium 90MHz (~48087 cycli) . :MENU:cpu586-100 -Pentium 100MHz (~60000 cycli) +Pentium 100MHz (~53430 cycli) . :MENU:cpu586-120 -Pentium 120MHz (~74000 cycli) +Pentium 120MHz (~64180 cycli) . :MENU:cpu586-133 -Pentium 133MHz (~80000 cycli) +Pentium 133MHz (~71240 cycli) . :MENU:cpu586-166 -Pentium 166MHz MMX (~97240 cycli) +Pentium 166MHz MMX (~95548 cycli) . -:MENU:cpuak6-166 -AMD K6 166MHz (~110000 cycli) +:MENU:cpu586-200 +Pentium 200MHz MMX (~114657 cycli) . :MENU:cpuak6-200 AMD K6 200MHz (~130000 cycli) @@ -2968,7 +2955,7 @@ Grafische laag wissen Interne Voodoo kaart . :MENU:3dfx_glide -Glide passthrough +Glide doorgave . :MENU:load_d3d_shader Selecteer Direct3D pixel shader... @@ -2995,7 +2982,7 @@ Geluidsmixervolumes weergeven Sound Blaster-configuratie weergeven . :MENU:midi_info -Configuratie van MIDI-apparaat weergeven +Configuratie van MIDI/OPL-apparaat weergeven . :MENU:DOSMenu DOS @@ -3360,21 +3347,6 @@ Schermafdruk maken :MENU:mapper_rawscrshot Neem onbewerkte schermafdruk . -:MENU:mapper_volup -Volume verhogen -. -:MENU:mapper_voldown -Volume verlagen -. -:MENU:mapper_recvolup -Opnamevolume verhogen -. -:MENU:mapper_recvoldown -Opnamevolume verlagen -. -:MENU:mapper_sendkey_mapper -Speciale toets zenden -. :MENU:mapper_cycledown Cycli verhogen . @@ -3450,11 +3422,26 @@ Pentium III :MENU:cputype_experimental Experimenteel . +:MENU:mapper_volup +Volume verhogen +. +:MENU:mapper_voldown +Volume verlagen +. +:MENU:mapper_recvolup +Opnamevolume verhogen +. +:MENU:mapper_recvoldown +Opnamevolume verlagen +. +:MENU:mapper_sendkey_mapper +Speciale toets zenden +. :MENU:debug_pageflip -Page flip debug line +Pagina omdraaien debug-regel . :MENU:debug_retracepoll -Retrace poll debug line +Retrace poll debug-regel . :MENU:mapper_swapimg Diskette verwisselen @@ -3690,3 +3677,850 @@ CPU: simpele kern :MAPPER:togmenu Menubalk aan/uit . +:PROGRAM_FLAGSAVE_UNFLAGALL +Alle bestanden niet meer gemarkeerd voor opslag. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +Bestand %s niet meer gemarkeerd voor opslag. + +. +:PROGRAM_FLAGSAVE_FLAGGED +Bestand al gemarkeerd voor opslaan - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Er zijn teveel bestanden om te markeren voor opslag. + +. +:PROGRAM_FLAGSAVE_SAVED +Bestand %s gemarkeerd voor opslaan + +. +:PROGRAM_FLAGSAVE_LIST +Bestanden gemarkeerd om op te slaan: +. +:PROGRAM_FLAGSAVE_HLP +Markeert bestanden die moeten worden opgeslagen voor de "save-state" functie. + +FLAGSAVE [bestand(en) [/F] [/R]] [/U] + + bestand(en) Een of meer bestanden om te markeren voor opslag. + /F Forceer het markeren van bestanden, zelfs indien niet gevonden. + /R Verwijdert markering van de opgegeven bestanden. + /U Verwijdert markering van alle bestanden. + +Typ FLAGSAVE zonder parameter om gemarkeerde bestanden weer te geven. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh-haak is niet ingesteld. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh-haak is al ingesteld. + +. +:PROGRAM_INT2FDBG_HELP +Haakt INT 2Fh voor debug doeleinden. + +INT2FDBG [option] + /I Installeert haak + +Haakt INT 2Fh bovenaan de oproepketen voor debug informatie. + +Typ INT2FDBG zonder parameter om de huidige haak status weer te geven. +. +:PROGRAM_SET80x25 +Wijzigingen naar 80x25 tekstmodus. +. +:PROGRAM_SET80x43 +Wijzigingen naar 80x43 tekstmodus. +. +:PROGRAM_SET80x50 +Wijzigingen naar 80x50 tekstmodus. +. +:PROGRAM_SET80x60 +Wijzigingen naar 80x60 tekstmodus. +. +:PROGRAM_SET132x25 +Wijzigingen naar 132x25 tekstmodus. +. +:PROGRAM_SET132x43 +Wijzigingen naar 132x43 tekstmodus. +. +:PROGRAM_SET132x50 +Wijzigingen naar 132x50 tekstmodus. +. +:PROGRAM_SET132x60 +Wijzigingen naar 132x60 tekstmodus. +. +:PROGRAM_RESCAN_HELP +Scant voor wijzigingen op gekoppelde schijven op de host door caches te wissen. + +RESCAN [/A] [/Q] +RESCAN [schijf:] [/Q] + + [/A] Alle schijven opnieuw scannen + [/Q] Stille modus inschakelen + [schijf:] De schijf om opnieuw te scannen + +Typ RESCAN zonder parameters om de huidige schijf opnieuw te scannen. + +. +:PROGRAM_CFGTOOL_HELP +Start het grafische configuratiehulpprogramma van DOSBox-X. + +CFGTOOL + +Opmerking: u kunt de opdracht CONFIG ook gebruiken voor + opdrachtregelconfiguraties. +. +:PROGRAM_IMGSWAP_HELP +Verwisselt floppy-, harde schijf- en optische schijfimages. + +←[32;1mIMGSWAP←[0m ←[37;1mschijf←[0m ←[36;1m[positie]←[0m + ←[37;1mschijf←[0m Stationsletter om de afbeelding te wisselen. + ←[36;1m[positie]←[0m Schijfpositie waarnaar gewisseld moet worden.. +. +:PROGRAM_INTRO_HELP +Een introductie op volledig scherm tot DOSBox-X. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +Er is geen image toegewezen aan de BIOS-schijfindex. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Ongeldig koppelnummer. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Ongeldig fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Ongeldige grootteparameter. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +Stationnummer %d is niet gekoppeld. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Onjuist gebruik van IMGMOUNT-ontkoppeling. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Ongeldige stationsletter. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Partities kunnen niet worden gekoppeld in conflict met de standaard INT 13h +harde schijftoewijzing. Kies een andere stationsletter om op te koppelen. +. +:PROGRAM_ELTORITO_LETTER +Voor El Torito-emulatie is een juiste CD-ROM-stationsletter vereist. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +Het opgegeven El Torito CD-ROM-station bestaat al als een niet-CD-ROM-apparaat +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +Het genoemde El Torito CD-ROM-station is in werkelijkheid geen CD-ROM-station. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito-emulatie moet op dit moment worden gebruikt met -t floppy. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM boot record niet gevonden. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito-sectie niet leesbaar. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +Geen opstartbare El Torito-floppy gevonden. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Kan opstartbare sectie niet vinden +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito opstartsector onleesbaar +. +:PROGRAM_IMGMAKE_ALIGNMENT +Ongeldige uitlijning +. +:PROGRAM_IMGMAKE_PARTOFS +Ongeldige -partofs +. +:PROGRAM_IMGMAKE_FAT +Ongeldige -fat optie. Moet zijn 12, 16, of 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +Ongeldige -fatcopies optie +. +:PROGRAM_IMGMAKE_SPC +Ongeldige -spc optie, buiten bereik +. +:PROGRAM_IMGMAKE_SPC2 +Ongeldige -spc optie, moet een macht van 2 zijn +. +:PROGRAM_IMGMAKE_ROOTDIR +Ongeldige -rootdir optie +. +PROGRAM_IMGMAKE_BOOTSECT +Ongeldige bootsectorpositie +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Controle mislukt: volumegrootte niet uitgelijnd +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Controle mislukt: FAT-tabellen niet uitgelijnd +. +:PROGRAM_IMGMAKE_SECTPERFAT +Fout: Gegenereerd FAT bestandssysteem heeft meer dan 256 sectoren en is niet FAT32 +. +:PROGRAM_IMGMAKE_VOLSIZE +Controle mislukt: volumegrootte niet uitgelijnd +. +:PROGRAM_IMGMAKE_CLUSTERS +Fout: gegenereerd bestandssysteem heeft te weinig clusters gezien de parameters +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Waarschuwing: Het aantal clusters is te hoog gezien de volumegrootte. + Er wordt een kleiner aantal sectoren gerapporteerd. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Controle mislukt: eerste cluster niet uitgelijnd +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +WAARSCHUWING: Clustergroottes >= 64 KB zijn niet compatibel met MS-DOS en SCANDISK +. +:PROGRAM_BOOT_UNSUPPORTED +Niet-ondersteunde opstartmodus +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +Bestaande overlay is vervangen door nieuwe overlay. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS-handle %u: kan niet worden vrijgemaakt +. +:PROGRAM_LOADFIX_XMS_FREE +XMS-handle %u: kan niet worden vrijgemaakt +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS-blok toegewezen (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +Kan EMS-blok niet toewijzen +. +PROGRAM_LOADFIX_NOEMS +EMS niet actief +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS-blok toegewezen (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +Kan XMS-blok niet toewijzen +. +:PROGRAM_LOADFIX_NOXMS +XMS niet actief +. +:PROGRAM_LOADFIX_NOALLOC +De laagste MCB is boven de 64 KB, er is niets toegewezen +. +:PROGRAM_BOOT_SWAP_ALREADY +Meerdere schijfkopieën opgegeven en er is al een andere schijf verbonden met de wissellijst +. +:PROGRAM_BOOT_NOT_SPECIFIED +Geen schijfkopieën opgegeven +. +:PROGRAM_BOOT_IS_PC88 +Het D88-image bestand lijkt te zijn voor op PC-88 en kan niet worden opgestart. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Bytes/sector te groot +. +:PROGRAM_BOOT_DRIVE_READERROR +Fout bij het lezen van de schijf +. +:PROGRAM_START_HELP_WIN +Start een apart Window om een specifiek programma of commando uit te voeren. + +START [+|-|_] commando [argumenten] + + [+|-|_]: Om het programma te maximaliseren/minimaliseren/verbergen. + TDe opties /MAX, /MIN, /HID worden ook geaccepteerd. + commando: De opdracht, het programma of het bestand dat gestart moet worden. + argumenten: Argumenten die aan de applicatie moeten worden doorgegeven. + +START opent automatisch de Windows-opdrachtprompt om deze opdrachten uit te +voeren en te wachten op een toetsaanslag voordat wordt afgesloten +(gespecificeerd door de optie "startincon"): +%s + +Let op: het pad dat in deze opdracht wordt opgegeven, is het pad op het + hostsysteem. +. +:PROGRAM_START_HELP +Start een apart venster om een specifiek programma of commando uit te voeren. + +START /OPEN bestand +START commando [argumenten] + + /OPEN: Om een ​​bestand of URL te openen met het bijbehorende programma. + bestand: Het bestand of URL om te openen met het bijbehorende programma. + command: De opdracht of het programma dat gestart of uitgevoerd moet worden. + arguments: Argumenten die aan de applicatie moeten worden doorgegeven. + +Let op: het pad dat in deze opdracht wordt opgegeven, is het pad op het + hostsysteem. +. +:PROGRAM_START_COMPLETED +De uitvoering van de opdracht is voltooid. +. +:PROGRAM_START_COMMAND +Starten %s... +. +:PROGRAM_START_CTRLC +(Druk op Ctrl+C om onmiddellijk af te sluiten) +. +:PROGRAM_START_HOST_ERROR +Fout: START kan de applicatie niet starten op het hostsysteem. +. +:PROGRAM_START_LAUNCH_ERROR +Fout: START kon de applicatie niet starten. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +Geef geen bestanden op bij het koppelen van floppy drives vanaf opstartbare El Torito CD's +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +Geef geen bestanden op bij het koppelen van RAM-schijven +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +De sectorgrootte moet groter zijn dan 512 bytes en de image-clustergrootte van %lu bytes gelijkmatig verdelen. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +Kan '%s' niet openen +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 bestand '%s' wordt niet ondersteund +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Kan geometrie niet detecteren +. +:PROGRAM_IMGMOUNT_DOS_VERSION +koppelen van dit imagebestand vereist een gerapporteerde DOS-versie van +%u.%u of hoger. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Floppygrootte niet herkend +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +Meerdere imagebestanden opgegeven en een andere schijf gebruikt al meerdere bestanden +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Meerdere schijfkopieën worden niet ondersteund voor dat station +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +De harde schijf kan niet in de floppy-positie worden geplaatst. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +De floppy kan niet in de harde schijf-positie worden geplaatst. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito opstartbare CD: -fs iso koppeling niet ondersteund +. +:PROGRAM_MODE_STATUS +Status voor apparaat CON: +------------------------- +Kolommen=%d +Lijnen=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +Codepaginabewerking wordt niet ondersteund op dit apparaat +. +:PROGRAM_MODE_RATE_DELAY +Snelheid en vertraging moeten samen worden gespecificeerd +. +:PROGRAM_UTF8_HELP +Converteert UTF-8-tekst zodat deze in de huidige codepagina kan worden weergegeven. + +UTF8 < [schijf:][pad]bestand +opdrachtnaam | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +Geen invoertekst gevonden. +. +:PROGRAM_UTF8_INVALIDCP +Ongeldige codepagina voor tekstconversie. +. +:PROGRAM_UTF8_NOT_UTF8 +De invoertekst is UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +Er is een fout opgetreden tijdens de tekstconversie. +. +:PROGRAM_UTF16_HELP +Converteert UTF-16-tekst zodat deze in de huidige codepagina kan worden weergegeven. + +UTF16 [/BE|/LE] < [schijf:][pad]bestand +opdrachtnaam | UTF16 [/BE|/LE] + + /BE Gebruik UTF-16 Big Endian + /LE Gebruik UTF-16 Little Endian +. +:PROGRAM_VTEXT_HELP +Wijzigt de V-tekstmodus voor DOS/V-emulatie. + +VTEXT [modus] + + [modus] kan zijn 0, 1, 2, voor geen V-text, + V-text 1, en V-text 2 respectievelijk. + +Typ VTEXT zonder parameter om de huidige modus weer te geven. +. +:PROGRAM_NMITEST_HELP +Genereert een niet-maskeerbare interrupt (NMI). + +NMITEST + +Let op: dit is een debugtool om te testen of de interrupt-handler correct werkt +. +:PROGRAM_NMITEST_GENERATE_NMI +Genereer een niet-maskeerbare interrupt (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +Legt de muis vast in DOSBox-X of laat deze los. + +CAPMOUSE [/C|/R] + + /C Vang de mouse + /R Laat de muis los +. +:PROGRAM_CAPMOUSE_MOUSE +Muis +. +:PROGRAM_CAPMOUSE_CURRENTLY +is momenteel +. +:PROGRAM_CAPMOUSE_CAPTURED +gevangen +. +:PROGRAM_CAPMOUSE_RELEASED +losgelaten +. +:PROGRAM_AUTOTYPE_HELP +Voert gescripte toetsenbordinvoer uit in een lopend DOS-programma. + +AUTOTYPE [-list] [-w WACHT] [-p TEMPO] knop_1 [knop_2 [...]] + +Waar: + -list: toont alle beschikbare knopnamen. + -w WACHT: seconden voordat het typen begint. Standaard 2; max 30 seconden. + -p TEMPO: seconden tussen elke toetsaanslag. Standaard 0.5; maximaal 10. + + De reeks bestaat uit een of meer door spaties gescheiden knoppen. + Automatisch typen begint na WACHT seconden en elke knop wordt elke TEMPO + seconden ingedrukt. Het teken , voegt een extra TEMPO-vertraging toe. + +Voorbeelden: + ←[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter←[0m + ←[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: De mapper heeft geen toetscombinaties +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: begrenzing van de %s-waarde van %.2f tot %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s-waarde '%s' is geen geldig drijvendekommagetal +. +:PROGRAM_ADDKEY_HELP +Genereert kunstmatige toetsaanslagen. + +ADDKEY [pmsec] [toets] + +In het onderstaande commando typt u bijvoorbeeld "dir" gevolgd door ENTER +na 1 seconde: + +ADDKEY p1000 d i r enter + +In plaats van deze opdracht kunt u ook de opdracht AUTOTYPE proberen om via een +script invoer via het toetsenbord uit te voeren in een lopend DOS-programma. +. +:PROGRAM_SETCOLOR_HELP +Bekijkt of wijzigt de kleurenschema-instellingen van de tekstmodus. + +SETCOLOR [kleur# [waarde]] + +Bijvoorbeeld: + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Verander kleur #0 naar de opgegeven kleurwaarde + + ←[32;1mSETCOLOR 7 -←[0m +Zet kleur #7 terug naar de standaardkleurwaarde + + ←[32;1mSETCOLOR 3 +←[0m +Kleur #3 terugzetten naar de vooraf ingestelde kleurwaarde + + ←[32;1mSETCOLOR MONO←[0m +Weergave van de huidige MONO-modusstatus + +Gebruik de 'COLOR' opdracht om de huidige achtergrond- of voorgrondkleur te +wijzigen. +. +:PROGRAM_SETCOLOR_STATUS +Status MONO-modus: %s (videomodus %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +actief +. +:PROGRAM_SETCOLOR_INACTIVE +inactief +. +:PROGRAM_SETCOLOR_UNAVAILABLE +onbeschikbaar +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO-modusstatus => actief (videomodus 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO-modusstatus => inactief (videomodus 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +Kan de MONO-modus niet wijzigen +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +Moet + of - zijn voor MONO: %s +. +:PROGRAM_SETCOLOR_COLOR +Kleur %d: (%d,%d,%d) of #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Ongeldig kleurnummer - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Ongeldige kleurwaarde - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Wijzigen van het kleurenschema is niet ondersteund voor de huidige videomodus. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Onbekende boothax-modus +. +:PROGRAM_BOOT_SPECIFY_FILE +Specificeer een BIOS-image bestand om op te starten +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +BIOS-image kan niet worden geopend +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Specificeer een BIOS-image bestand om op te laden. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Kan een bestand niet openen +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS-bestand te groot +. +:PROGRAM_DELTREE_HELP +Verwijdert een map en alle submappen en bestanden daarin. + +Om een ​​of meer bestanden en mappen te verwijderen: +DELTREE [/Y] [schijf:]pad [[schijf:]pad[...]] + + /Y Onderdrukt de vraag om te bevestigen dat u de submap wilt + verwijderen. + [schijf:]pad De naam van de map die u wilt verwijderen. + +Let op: Gebruik DELTREE met de nodige voorzichtigheid. Elk bestand en elke + submap in de opgegeven map wordt verwijderd. + +. +:PROGRAM_TREE_HELP +Toon de directorystructuur van een station of pad weer. + +TREE [schijf:][pad] [/F] [/A] + + /F Geeft de namen van de bestanden in elke map weer. + /A Gebruikt ASCII in plaats van uitgebreide tekens. + +. +:PROGRAM_TITLE_HELP +Stelt de venstertitel in voor het DOSBox-X-venster. + +TITLE [tekenreeks] + + tekenreeks Geeft de titel voor het DOSBox-X-venster op. + +. +:PROGRAM_COLOR_HELP +Stelt de standaard voor- en achtergrondkleuren van de console in. + +COLOR [attr] + + attr Specificeert het kleurattribuut van de console-uitvoer + +Kleurkenmerken worden gespecificeerd door TWEE hexadecimale karakters: +het eerste komt overeen met de achtergrond en het tweede met de voorgrond. +Elk cijfer kan een van de volgende waarden hebben: + + 0 = Zwart 8 = Grijs + 1 = Blauw 9 = Lichtblauw + 2 = Groen A = Lichtgroen + 3 = Aqua B = Lichtaqua + 4 = Rood C = Lichtrood + 5 = Paars D = Lichtpaars + 6 = Geel E = Lichtgeel + 7 = Wit F = Helderwit + +Zonder argument, herstelt deze opdracht de originele kleur. + +Met de opdracht COLOR wordt ERRORLEVEL ingesteld op 1 als wordt geprobeerd de +opdracht COLOR uit te voeren met dezelfde voor- en achtergrondkleur. + +Voorbeeld: "COLOR fc" produceert lichtrood op helderwit. + +. +:PROGRAM_SWITCH_LANG +U hebt de actieve codepagina gewijzigd naar %d. +Wilt u taalbestand %s voor deze codepagina laden? +. +:PROGRAM_ALREADY_MOUNTED +Schijf %s: is al gekoppeld. Ontkoppel het eerst en probeer het opnieuw. +. +:PROGRAM_DRIVE_NO_EXIST +Schijf %s: bestaat niet in het systeem. +. +:PROGRAM_DRIVE_WARN +Wilt u DOSBox-X echt toegang geven tot uw echte %s schijf %s? +. +:DRIVE_TYPE_FLOPPY +diskette +. +:DRIVE_TYPE_REMOVABLE +verwijderbaar +. +:DRIVE_TYPE_NETWORK +netwerk +. +:DRIVE_TYPE_HARD +hard +. +:DRIVE_TYPE_LOCAL +lokaal +. +:DRIVE_TYPE_CDROM +CD-ROM +. +:PROGRAM_CDDRIVE_WARN +CD-station %s is momenteel gekoppeld met imagebestand: + +%s + +Wilt u het CD-image nu wijzigen? +. +:PROGRAM_CDMOUNT_ERROR +De geselecteerde CD-image kon niet worden gekoppeld. +. +:ELTORITO_IMAGE +El Torito disketteimage +. +:RAM_FLOPPY_IMAGE +RAM disketteimage +. +:PROGRAM_FLOPPY_WARN +Diskettestation %s is momenteel gekoppeld met image-bestand: + +%s + +Wilt u de disketteimage nu wijzigen? +. +:PROGRAM_FLOPPYMOUNT_ERROR +Kan de geselecteerde disketteimage niet koppelen. +. +:PROGRAM_MOUNT_MORE_IMAGES +Wilt u meer imagebestanden koppelen? +. +:PROGRAM_MOUNT_PATH_TOOLONG +Het pad voor de te koppelen bestanden is te lang. +. +:PROGRAM_BOOT_FAILED +Station %s: opstarten mislukt. +. +:PROGRAM_MOUNT_FAILED +Station %s: koppelen mislukt. +. +:PROGRAM_MOUNT_IMAGE +%s aan schijf %s gekoppeld: +%s %s +. +:ARCHIVE +archief +. +:DISK_IMAGE +schijfimage +. +:READONLY_MODE +Alleen-lezen-modus +. +:PROGRAM_MOUNT_SELECT_DRIVE +Selecteer een station/map om te koppelen voor station %s: als %s +. +:PROGRAM_MOUNT_CDROM_SUPPORT +Het koppelen van een directory als CD-ROM biedt beperkte ondersteuning. +. +:PROGRAM_MOUNT_NOT_MOUNTED +Station %s: is nog niet gekoppeld. +. +:PROGRAM_PROGRAM_ALREADY +Er is al een ander programma actief. +. +:PROGRAM_SHELL_ALREADY +Er is momenteel een andere shell actief. +. +:PROGRAM_MOUNT_SUCCESS +Station %s is nu gekoppeld aan: +%s +. +:PROGRAM_WARN_QUICKLAUNCH +Snel starten koppelt station C automatisch in DOSBox-X. +Station C is al gekoppeld. Wilt u doorgaan? +. +:PROGRAM_NO_EXECUTABLE +Uitvoerbaar bestand niet gevonden. +. +:PROGRAM_EXEC_FINISHED +Het programma is voltooid. Wilt u station %s nu ontkoppelen? +. +:PROGRAM_ASK_CHCP +Schijf %c: vereist mogelijk codepagina %d om correct toegankelijk te zijn. + +Wilt u de huidige codepagina nu wijzigen naar %d? +. +:PROGRAM_CHANGING_CODEPAGE +Codepagina wijzigen +. +:IMAGEMOUNT_CHANGE_DOSVER +Voor het koppelen van dit type schijf-image is een gerapporteerde DOS-versie +van %s of hoger vereist. Wilt u de gerapporteerde DOS-versie automatisch +wijzigen naar %s en de schijf-image koppelen? +. +:MENU_DRIVE_NOTEXIST +Station bestaat niet of is gekoppeld vanaf een schijf-image. +. +:MENU_SAVE_IMAGE_FAILED +Het opslaan van de schijf-image is mislukt. +. +:MENU_JP_CPONLY +Deze functie is alleen beschikbaar voor de Japanse codepagina (932). +. +:MENU_CH_CPONLY +Deze functie is alleen beschikbaar voor Chinese codepagina's (936, 950 of 951). +. +:MENU_GLIDE_ERROR +Glide-passthrough kan niet worden ingeschakeld. Controleer de installatie van +de Glide-wrapper. +. +:MENU_HIGH_INTENSITY_ERROR +Hoge intensiteit wordt niet ondersteund voor de huidige videomodus. +. +:MENU_SAVE_FILE_ERROR +Kan niet opslaan naar bestand: %s +. +:MENU_INT2F_SUCCESS +De INT 2Fh-haak is succesvol ingesteld. +. +:MENU_INT2F_ALREADY_SET +De INT 2Fh-haak was al ingesteld. +. +:QUIT_DISABLED +Momenteel is het afsluiten van DOSBox-X hiermee uitgeschakeld. +. +:QUIT_CONFIRM +Dit sluit DOSBox-X af. +Bent u zeker? +. +:QUIT_GUEST_DISABLED +U kunt DOSBox-X niet afsluiten terwijl u een gastsysteem draait. +. +:QUIT_GUEST_CONFIRM +U gebruikt momenteel een gastsysteem. +Weet u zeker dat u het nu toch wilt afsluiten? +. +:QUIT_FILE_OPEN_DISABLED +U kunt DOSBox-X niet afsluiten terwijl er één of meer bestanden openstaan. +. +:QUIT_FILE_OPEN_CONFIRM +Het is mogelijk onveilig om DOSBox-X nu af te sluiten, +omdat er een of meer bestanden geopend zijn. +Weet u zeker dat u DOSBox-X nu toch wilt afsluiten? +. +:QUIT_PROGRAM_DISABLED +U kunt DOSBox-X niet afsluiten terwijl u een programma of spel draait. +. +:QUIT_PROGRAM_CONFIRM +U voert momenteel een programma of spel uit. +Weet u zeker dat u nu toch wilt stoppen? +. +:LANG_JP_INCOMPATIBLE +U heeft een taalbestand opgegeven dat een codepagina gebruikt die niet +compatibel is met het Japanse PC-98- of JEGA/AX-systeem. + +Weet u zeker dat u het taalbestand voor dit machinetype wilt gebruiken? +. +:LANG_DOSV_INCOMPATIBLE +U heeft een taalbestand opgegeven dat een codepagina gebruikt die niet +compatibel is met het huidige DOS/V-systeem. + +Weet u zeker dat u het taalbestand voor dit systeemtype wilt gebruiken? +. +:LANG_CHANGE_CP +Het opgegeven taalbestand gebruikt codepagina %d. Wilt u naar deze +codepagina overschakelen? +. +:SCALER_LOAD_WARN +This scaler may not work properly or have undesired effect: + +%s + +Do you want to force load the scaler? +. +:PIXEL_SHADER_WARN +This pixel shader may be unneeded or have undesired effect: + +%s + +Do you want to load the pixel shader anyway? + +(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message) +. +:PIXEL_SHADER_LOADED +Loaded pixel shader - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +Mapper Editor is not currently available. +. +:OPL_REC_COMPLETED +Saved Raw OPL output to the file: + +%s +. +:OPL_CAPTURE_FAILED +Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format. +. +:TTF_DBCS_ONLY +This function is only available for the Chinese/Japanese/Korean code pages. +. +:SAVE_FAILED +Failed to save the current state. +. +:SAVE_CORRUPTED +Save state corrupted! Program may not work. +. +:SAVE_SCREENSHOT +Saved screenshot to the file: + +%s +. diff --git a/contrib/translations/pt/pt_BR.lng b/contrib/translations/pt/pt_BR.lng index 507cdcb0867..a62ab4fa40c 100644 --- a/contrib/translations/pt/pt_BR.lng +++ b/contrib/translations/pt/pt_BR.lng @@ -1,6 +1,6 @@ :DOSBOX-X:LANGUAGE:Portuguese (Brazil) :DOSBOX-X:CODEPAGE:860 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK: :AUTOEXEC_CONFIGFILE_HELP As linhas nesta seção serão sempre executadas ao se iniciar o DOSBox-X. @@ -150,7 +150,7 @@ Valores atuais do mixer Configuração da Sound Blaster . :CURRENT_MIDICONFIG -Configuração atual de MIDI +Configuração atual de MIDI/OPL . :CREATE_IMAGE Criar imagem de disco em branco @@ -2446,6 +2446,9 @@ Início rápido de programa... :MENU:mapper_shutdown Sair do DOSBox-X . +:MENU:mapper_capkeyboard +Capture keyboard +. :MENU:mapper_capmouse Capturar mouse . @@ -3014,7 +3017,7 @@ Mostrar mixes de volume de som Mostrar configuração da Sound Blaster . :MENU:midi_info -Mostrar configuração do dispositivo MIDI +Mostrar configuração do dispositivo MIDI/OPL . :MENU:DOSMenu DOS @@ -3709,3 +3712,645 @@ CPU: núcleo simples :MAPPER:togmenu Alternar barra de menu . +:PROGRAM_FLAGSAVE_UNFLAGALL +All files unflagged for saving. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +File %s unflagged for saving. + +. +:PROGRAM_FLAGSAVE_FLAGGED +File already flagged for saving - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Too many files to flag for saving. + +. +:PROGRAM_FLAGSAVE_SAVED +File %s flagged for saving + +. +:PROGRAM_FLAGSAVE_LIST +Files flagged for saving: +. +:PROGRAM_FLAGSAVE_HLP +Marks or flags files to be saved for the save state feature. + +FLAGSAVE [file(s) [/F] [/R]] [/U] + + file(s) Specifies one or more files to be flagged for saving. + /F Forces to flag the file(s) even if they are not found. + /R Removes flags from the specified file(s). + /U Removes flags from all flagged files. + +Type FLAGSAVE without a parameter to list flagged files. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh hook has not been set. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh hook has already been set. + +. +:PROGRAM_INT2FDBG_HELP +Hooks INT 2Fh for debugging purposes. + +INT2FDBG [option] + /I Installs hook + +It will hook INT 2Fh at the top of the call chain for debugging information. + +Type INT2FDBG without a parameter to show the current hook status. +. +:PROGRAM_SET80x25 +Changes to 80x25 text mode. +. +:PROGRAM_SET80x43 +Changes to 80x43 text mode. +. +:PROGRAM_SET80x50 +Changes to 80x50 text mode. +. +:PROGRAM_SET80x60 +Changes to 80x60 text mode. +. +:PROGRAM_SET132x25 +Changes to 132x25 text mode. +. +:PROGRAM_SET132x43 +Changes to 132x43 text mode. +. +:PROGRAM_SET132x50 +Changes to 132x50 text mode. +. +:PROGRAM_SET132x60 +Changes to 132x60 text mode. +. +:PROGRAM_RESCAN_HELP +Rescans for changes on mounted drives made on the host by clearing caches. + +RESCAN [/A] [/Q] +RESCAN [drive:] [/Q] + + [/A] Rescan all drives + [/Q] Enable quiet mode + [drive:] The drive to rescan + +Type RESCAN with no parameters to rescan the current drive. + +. +:PROGRAM_CFGTOOL_HELP +Starts DOSBox-X's graphical configuration tool. + +CFGTOOL + +Note: You can also use CONFIG command for command-line configurations. +. +:PROGRAM_IMGSWAP_HELP +Swaps floppy, hard drive and optical disc images. + +←[32;1mIMGSWAP←[0m ←[37;1mdrive←[0m ←[36;1m[position]←[0m + ←[37;1mdrive←[0m Drive letter to swap the image. + ←[36;1m[position]←[0m Disk position to swap to. +. +:PROGRAM_INTRO_HELP +A full-screen introduction to DOSBox-X. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS disk index does not have an image assigned. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Invalid mount number. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Invalid fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Invalid size parameter. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +Drive number %d is not mounted. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Incorrect IMGMOUNT unmount usage. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Invalid drive letter. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Partitions cannot be mounted in conflict with the standard INT 13h hard disk +allotment. Choose a different drive letter to mount to. +. +:PROGRAM_ELTORITO_LETTER +El Torito emulation requires a proper CD-ROM drive letter. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +El Torito CD-ROM drive specified already exists as a non-CD-ROM device +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +El Torito CD-ROM drive specified is not actually a CD-ROM drive. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito emulation must be used with -t floppy at this time. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM boot record not found. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito entries unreadable. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +El Torito bootable floppy not found. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Unable to locate bootable section +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito boot sector unreadable +. +:PROGRAM_IMGMAKE_ALIGNMENT +Invalid alignment +. +:PROGRAM_IMGMAKE_PARTOFS +Invalid -partofs +. +:PROGRAM_IMGMAKE_FAT +Invalid -fat option. Must be 12, 16, or 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +Invalid -fatcopies option +. +:PROGRAM_IMGMAKE_SPC +Invalid -spc option, out of range +. +:PROGRAM_IMGMAKE_SPC2 +Invalid -spc option, must be a power of 2 +. +:PROGRAM_IMGMAKE_ROOTDIR +Invalid -rootdir option +. +PROGRAM_IMGMAKE_BOOTSECT +Invalid bootsector position +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Sanity check failed: FAT tables not aligned +. +:PROGRAM_IMGMAKE_SECTPERFAT +Error: Generated filesystem has more than 256 sectors per FAT and is not FAT32 +. +:PROGRAM_IMGMAKE_VOLSIZE +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_CLUSTERS +Error: Generated filesystem has too few clusters given the parameters +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Warning: Cluster count is too high given the volume size. + Reporting a smaller sector count. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Sanity check failed: First cluster not aligned +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +WARNING: Cluster sizes >= 64KB are not compatible with MS-DOS and SCANDISK +. +:PROGRAM_BOOT_UNSUPPORTED +Unsupported boot mode +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +Existing overlay has been replaced with new overlay. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS handle %u: unable to free +. +:PROGRAM_LOADFIX_XMS_FREE +XMS handle %u: unable to free +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +Unable to allocate EMS block +. +PROGRAM_LOADFIX_NOEMS +EMS not active +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +Unable to allocate XMS block +. +:PROGRAM_LOADFIX_NOXMS +XMS not active +. +:PROGRAM_LOADFIX_NOALLOC +Lowest MCB is above 64KB, nothing allocated +. +:PROGRAM_BOOT_SWAP_ALREADY +Multiple disk images specified and another drive is already connected to the swap list +. +:PROGRAM_BOOT_NOT_SPECIFIED +No images specified +. +:PROGRAM_BOOT_IS_PC88 +The D88 image appears to target PC-88 and cannot be booted. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Bytes/sector too large +. +:PROGRAM_BOOT_DRIVE_READERROR +Error reading drive +. +:PROGRAM_START_HELP_WIN +Starts a separate window to run a specified program or command. + +START [+|-|_] command [arguments] + + [+|-|_]: To maximize/minimize/hide the program. + The options /MAX, /MIN, /HID are also accepted. + command: The command, program or file to start. + arguments: Arguments to pass to the application. + +START opens the Windows command prompt automatically to run these commands +and wait for a key press before exiting (specified by "startincon" option): +%s + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_HELP +Starts a separate window to run a specified program or command. + +START /OPEN file +START command [arguments] + + /OPEN: To open a file or URL with the associated program. + file: The file or URL to open with the associated program. + command: The command or program to start or run. + arguments: Arguments to pass to the application. + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_COMPLETED +The command execution is completed. +. +:PROGRAM_START_COMMAND +Starting %s... +. +:PROGRAM_START_CTRLC +(Press Ctrl+C to exit immediately) +. +:PROGRAM_START_HOST_ERROR +Error: START cannot launch application to run on your current host system. +. +:PROGRAM_START_LAUNCH_ERROR +Error: START could not launch application. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +Do not specify files when mounting floppy drives from El Torito bootable CDs +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +Do not specify files when mounting RAM drives +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +Unable to open '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 image '%s' is not supported +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Unable to detect geometry +. +:PROGRAM_IMGMOUNT_DOS_VERSION +Mounting this image file requires a reported DOS version of %u.%u or higher. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Floppy size not recognized +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +Multiple images given and another drive already uses multiple images +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Multiple disk images not supported for that drive +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +Cannot mount hard drive in floppy position. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +Cannot mount floppy in hard drive position. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito bootable CD: -fs iso mounting not supported +. +:PROGRAM_MODE_STATUS +Status for device CON: +---------------------- +Columns=%d +Lines=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +Code page operation not supported on this device +. +:PROGRAM_MODE_RATE_DELAY +Rate and delay must be specified together +. +:PROGRAM_UTF8_HELP +Converts UTF-8 text to view in the current code page. + +UTF8 < [drive:][path]filename +command-name | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +No input text found. +. +:PROGRAM_UTF8_INVALIDCP +Invalid code page for text conversion. +. +:PROGRAM_UTF8_NOT_UTF8 +The input text is UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +An error occurred during text conversion. +. +:PROGRAM_UTF16_HELP +Converts UTF-16 text to view in the current code page. + +UTF16 [/BE|/LE] < [drive:][path]filename +command-name | UTF16 [/BE|/LE] + + /BE Use UTF-16 Big Endian + /LE Use UTF-16 Little Endian +. +:PROGRAM_VTEXT_HELP +Changes V-text mode for the DOS/V emulation. + +VTEXT [mode] + + [mode] can be 0, 1, 2, for no V-text, V-text 1, and V-text 2 respectively. + +Type VTEXT without a parameter to show the current V-text mode status. +. +:PROGRAM_NMITEST_HELP +Generates a non-maskable interrupt (NMI). + +NMITEST + +Note: This is a debugging tool to test if the interrupt handler works properly. +. +:PROGRAM_NMITEST_GENERATE_NMI +Generating a non-maskable interrupt (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +Captures or releases the mouse inside DOSBox-X. + +CAPMOUSE [/C|/R] + + /C Capture the mouse + /R Release the mouse +. +:PROGRAM_CAPMOUSE_MOUSE +Mouse +. +:PROGRAM_CAPMOUSE_CURRENTLY +is currently +. +:PROGRAM_CAPMOUSE_CAPTURED +captured +. +:PROGRAM_CAPMOUSE_RELEASED +released +. +:PROGRAM_AUTOTYPE_HELP +Performs scripted keyboard entry into a running DOS program. + +AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]] + +Where: + -list: prints all available button names. + -w WAIT: seconds before typing begins. Two second default; max of 30. + -p PACE: seconds between each keystroke. Half-second default; max of 10. + + The sequence is comprised of one or more space-separated buttons. + Autotyping begins after WAIT seconds, and each button is entered + every PACE seconds. The , character inserts an extra PACE delay. + +Some examples: + ←[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter←[0m + ←[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: The mapper has no key bindings +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: bounding %s value of %.2f to %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s value '%s' is not a valid floating point number +. +:PROGRAM_ADDKEY_HELP +Generates artificial keypresses. + +ADDKEY [pmsec] [key] + +For example, the command below types "dir" followed by ENTER after 1 second: + +ADDKEY p1000 d i r enter + +You could also try AUTOTYPE command instead of this command to perform +scripted keyboard entry into a running DOS program. +. +:PROGRAM_SETCOLOR_HELP +Views or changes the text-mode color scheme settings. + +SETCOLOR [color# [value]] + +For example: + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Change Color #0 to the specified color value + + ←[32;1mSETCOLOR 7 -←[0m +Return Color #7 to the default color value + + ←[32;1mSETCOLOR 3 +←[0m +Return Color #3 to the preset color value + + ←[32;1mSETCOLOR MONO←[0m +Display current MONO mode status + +To change the current background and foreground colors, use COLOR command. +. +:PROGRAM_SETCOLOR_STATUS +MONO mode status: %s (video mode %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +active +. +:PROGRAM_SETCOLOR_INACTIVE +inactive +. +:PROGRAM_SETCOLOR_UNAVAILABLE +unavailable +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO mode status => active (video mode 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO mode status => inactive (video mode 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +Failed to change MONO mode +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +Must be + or - for MONO: %s +. +:PROGRAM_SETCOLOR_COLOR +Color %d: (%d,%d,%d) or #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Invalid color number - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Invalid color value - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Changing color scheme is not supported for the current video mode. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Unknown boothax mode +. +:PROGRAM_BOOT_SPECIFY_FILE +Must specify BIOS image to boot +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +Unable to open BIOS image +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Must specify BIOS file to load. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Can't open a file +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS File too large +. +:PROGRAM_DELTREE_HELP +Deletes a directory and all the subdirectories and files in it. + +To delete one or more files and directories: +DELTREE [/Y] [drive:]path [[drive:]path[...]] + + /Y Suppresses prompting to confirm you want to delete + the subdirectory. + [drive:]path Specifies the name of the directory you want to delete. + +Note: Use DELTREE cautiously. Every file and subdirectory within the +specified directory will be deleted. + +. +:PROGRAM_TREE_HELP +Graphically displays the directory structure of a drive or path. + +TREE [drive:][path] [/F] [/A] + + /F Displays the names of the files in each directory. + /A Uses ASCII instead of extended characters. + +. +:PROGRAM_TITLE_HELP +Sets the window title for the DOSBox-X window. + +TITLE [string] + + string Specifies the title for the DOSBox-X window. + +. +:PROGRAM_COLOR_HELP +Sets the default console foreground and background colors. + +COLOR [attr] + + attr Specifies color attribute of console output + +Color attributes are specified by TWO hex digits -- the first +corresponds to the background; the second to the foreground. +Each digit can be any of the following values: + + 0 = Black 8 = Gray + 1 = Blue 9 = Light Blue + 2 = Green A = Light Green + 3 = Aqua B = Light Aqua + 4 = Red C = Light Red + 5 = Purple D = Light Purple + 6 = Yellow E = Light Yellow + 7 = White F = Bright White + +If no argument is given, this command restores the original color. + +The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute +the COLOR command with a foreground and background color that are the same. + +Example: "COLOR fc" produces light red on bright white. + +. +:SCALER_LOAD_WARN +This scaler may not work properly or have undesired effect: + +%s + +Do you want to force load the scaler? +. +:PIXEL_SHADER_WARN +This pixel shader may be unneeded or have undesired effect: + +%s + +Do you want to load the pixel shader anyway? + +(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message) +. +:PIXEL_SHADER_LOADED +Loaded pixel shader - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +Mapper Editor is not currently available. +. +:OPL_REC_COMPLETED +Saved Raw OPL output to the file: + +%s +. +:OPL_CAPTURE_FAILED +Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format. +. +:TTF_DBCS_ONLY +This function is only available for the Chinese/Japanese/Korean code pages. +. +:SAVE_FAILED +Failed to save the current state. +. +:SAVE_CORRUPTED +Save state corrupted! Program may not work. +. +:SAVE_SCREENSHOT +Saved screenshot to the file: + +%s +. diff --git a/contrib/translations/ru/ru_RU.lng b/contrib/translations/ru/ru_RU.lng index c8e60cacc93..489a642c5ef 100644 --- a/contrib/translations/ru/ru_RU.lng +++ b/contrib/translations/ru/ru_RU.lng @@ -1,6 +1,6 @@ -:DOSBOX-X:LANGUAGE:Русский (Россия) +:DOSBOX-X:LANGUAGE:Russian (Russia) :DOSBOX-X:CODEPAGE:866 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK: :AUTOEXEC_CONFIGFILE_HELP Строки в этом разделе будут выполнены при запуске. @@ -150,7 +150,7 @@ OK Конфигурация Sound Blaster . :CURRENT_MIDICONFIG -Текущая конфигурация MIDI +Текущая конфигурация MIDI/OPL . :CREATE_IMAGE Создать пустой образ диска @@ -2558,6 +2558,9 @@ DEBUGBOX [команда] [опции] :MENU:mapper_shutdown Выйти из DOSBox-X . +:MENU:mapper_capkeyboard +Capture keyboard +. :MENU:mapper_capmouse Захват мыши . @@ -3128,7 +3131,7 @@ CJK: Включить расширенный китайский набор си Показать конфигурацию Sound Blaster . :MENU:midi_info -Показать конфигурацию MIDI устройства +Показать конфигурацию MIDI/OPL устройства . :MENU:DOSMenu DOS @@ -3823,3 +3826,645 @@ CPU: простое ядро :MAPPER:togmenu Переключить панель меню . +:PROGRAM_FLAGSAVE_UNFLAGALL +All files unflagged for saving. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +File %s unflagged for saving. + +. +:PROGRAM_FLAGSAVE_FLAGGED +File already flagged for saving - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Too many files to flag for saving. + +. +:PROGRAM_FLAGSAVE_SAVED +File %s flagged for saving + +. +:PROGRAM_FLAGSAVE_LIST +Files flagged for saving: +. +:PROGRAM_FLAGSAVE_HLP +Marks or flags files to be saved for the save state feature. + +FLAGSAVE [file(s) [/F] [/R]] [/U] + + file(s) Specifies one or more files to be flagged for saving. + /F Forces to flag the file(s) even if they are not found. + /R Removes flags from the specified file(s). + /U Removes flags from all flagged files. + +Type FLAGSAVE without a parameter to list flagged files. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh hook has not been set. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh hook has already been set. + +. +:PROGRAM_INT2FDBG_HELP +Hooks INT 2Fh for debugging purposes. + +INT2FDBG [option] + /I Installs hook + +It will hook INT 2Fh at the top of the call chain for debugging information. + +Type INT2FDBG without a parameter to show the current hook status. +. +:PROGRAM_SET80x25 +Changes to 80x25 text mode. +. +:PROGRAM_SET80x43 +Changes to 80x43 text mode. +. +:PROGRAM_SET80x50 +Changes to 80x50 text mode. +. +:PROGRAM_SET80x60 +Changes to 80x60 text mode. +. +:PROGRAM_SET132x25 +Changes to 132x25 text mode. +. +:PROGRAM_SET132x43 +Changes to 132x43 text mode. +. +:PROGRAM_SET132x50 +Changes to 132x50 text mode. +. +:PROGRAM_SET132x60 +Changes to 132x60 text mode. +. +:PROGRAM_RESCAN_HELP +Rescans for changes on mounted drives made on the host by clearing caches. + +RESCAN [/A] [/Q] +RESCAN [drive:] [/Q] + + [/A] Rescan all drives + [/Q] Enable quiet mode + [drive:] The drive to rescan + +Type RESCAN with no parameters to rescan the current drive. + +. +:PROGRAM_CFGTOOL_HELP +Starts DOSBox-X's graphical configuration tool. + +CFGTOOL + +Note: You can also use CONFIG command for command-line configurations. +. +:PROGRAM_IMGSWAP_HELP +Swaps floppy, hard drive and optical disc images. + +←[32;1mIMGSWAP←[0m ←[37;1mdrive←[0m ←[36;1m[position]←[0m + ←[37;1mdrive←[0m Drive letter to swap the image. + ←[36;1m[position]←[0m Disk position to swap to. +. +:PROGRAM_INTRO_HELP +A full-screen introduction to DOSBox-X. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS disk index does not have an image assigned. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Invalid mount number. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Invalid fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Invalid size parameter. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +Drive number %d is not mounted. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Incorrect IMGMOUNT unmount usage. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Invalid drive letter. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Partitions cannot be mounted in conflict with the standard INT 13h hard disk +allotment. Choose a different drive letter to mount to. +. +:PROGRAM_ELTORITO_LETTER +El Torito emulation requires a proper CD-ROM drive letter. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +El Torito CD-ROM drive specified already exists as a non-CD-ROM device +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +El Torito CD-ROM drive specified is not actually a CD-ROM drive. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito emulation must be used with -t floppy at this time. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM boot record not found. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito entries unreadable. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +El Torito bootable floppy not found. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Unable to locate bootable section +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito boot sector unreadable +. +:PROGRAM_IMGMAKE_ALIGNMENT +Invalid alignment +. +:PROGRAM_IMGMAKE_PARTOFS +Invalid -partofs +. +:PROGRAM_IMGMAKE_FAT +Invalid -fat option. Must be 12, 16, or 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +Invalid -fatcopies option +. +:PROGRAM_IMGMAKE_SPC +Invalid -spc option, out of range +. +:PROGRAM_IMGMAKE_SPC2 +Invalid -spc option, must be a power of 2 +. +:PROGRAM_IMGMAKE_ROOTDIR +Invalid -rootdir option +. +PROGRAM_IMGMAKE_BOOTSECT +Invalid bootsector position +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Sanity check failed: FAT tables not aligned +. +:PROGRAM_IMGMAKE_SECTPERFAT +Error: Generated filesystem has more than 256 sectors per FAT and is not FAT32 +. +:PROGRAM_IMGMAKE_VOLSIZE +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_CLUSTERS +Error: Generated filesystem has too few clusters given the parameters +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Warning: Cluster count is too high given the volume size. + Reporting a smaller sector count. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Sanity check failed: First cluster not aligned +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +WARNING: Cluster sizes >= 64KB are not compatible with MS-DOS and SCANDISK +. +:PROGRAM_BOOT_UNSUPPORTED +Unsupported boot mode +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +Existing overlay has been replaced with new overlay. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS handle %u: unable to free +. +:PROGRAM_LOADFIX_XMS_FREE +XMS handle %u: unable to free +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +Unable to allocate EMS block +. +PROGRAM_LOADFIX_NOEMS +EMS not active +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +Unable to allocate XMS block +. +:PROGRAM_LOADFIX_NOXMS +XMS not active +. +:PROGRAM_LOADFIX_NOALLOC +Lowest MCB is above 64KB, nothing allocated +. +:PROGRAM_BOOT_SWAP_ALREADY +Multiple disk images specified and another drive is already connected to the swap list +. +:PROGRAM_BOOT_NOT_SPECIFIED +No images specified +. +:PROGRAM_BOOT_IS_PC88 +The D88 image appears to target PC-88 and cannot be booted. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Bytes/sector too large +. +:PROGRAM_BOOT_DRIVE_READERROR +Error reading drive +. +:PROGRAM_START_HELP_WIN +Starts a separate window to run a specified program or command. + +START [+|-|_] command [arguments] + + [+|-|_]: To maximize/minimize/hide the program. + The options /MAX, /MIN, /HID are also accepted. + command: The command, program or file to start. + arguments: Arguments to pass to the application. + +START opens the Windows command prompt automatically to run these commands +and wait for a key press before exiting (specified by "startincon" option): +%s + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_HELP +Starts a separate window to run a specified program or command. + +START /OPEN file +START command [arguments] + + /OPEN: To open a file or URL with the associated program. + file: The file or URL to open with the associated program. + command: The command or program to start or run. + arguments: Arguments to pass to the application. + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_COMPLETED +The command execution is completed. +. +:PROGRAM_START_COMMAND +Starting %s... +. +:PROGRAM_START_CTRLC +(Press Ctrl+C to exit immediately) +. +:PROGRAM_START_HOST_ERROR +Error: START cannot launch application to run on your current host system. +. +:PROGRAM_START_LAUNCH_ERROR +Error: START could not launch application. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +Do not specify files when mounting floppy drives from El Torito bootable CDs +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +Do not specify files when mounting RAM drives +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +Unable to open '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 image '%s' is not supported +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Unable to detect geometry +. +:PROGRAM_IMGMOUNT_DOS_VERSION +Mounting this image file requires a reported DOS version of %u.%u or higher. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Floppy size not recognized +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +Multiple images given and another drive already uses multiple images +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Multiple disk images not supported for that drive +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +Cannot mount hard drive in floppy position. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +Cannot mount floppy in hard drive position. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito bootable CD: -fs iso mounting not supported +. +:PROGRAM_MODE_STATUS +Status for device CON: +---------------------- +Columns=%d +Lines=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +Code page operation not supported on this device +. +:PROGRAM_MODE_RATE_DELAY +Rate and delay must be specified together +. +:PROGRAM_UTF8_HELP +Converts UTF-8 text to view in the current code page. + +UTF8 < [drive:][path]filename +command-name | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +No input text found. +. +:PROGRAM_UTF8_INVALIDCP +Invalid code page for text conversion. +. +:PROGRAM_UTF8_NOT_UTF8 +The input text is UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +An error occurred during text conversion. +. +:PROGRAM_UTF16_HELP +Converts UTF-16 text to view in the current code page. + +UTF16 [/BE|/LE] < [drive:][path]filename +command-name | UTF16 [/BE|/LE] + + /BE Use UTF-16 Big Endian + /LE Use UTF-16 Little Endian +. +:PROGRAM_VTEXT_HELP +Changes V-text mode for the DOS/V emulation. + +VTEXT [mode] + + [mode] can be 0, 1, 2, for no V-text, V-text 1, and V-text 2 respectively. + +Type VTEXT without a parameter to show the current V-text mode status. +. +:PROGRAM_NMITEST_HELP +Generates a non-maskable interrupt (NMI). + +NMITEST + +Note: This is a debugging tool to test if the interrupt handler works properly. +. +:PROGRAM_NMITEST_GENERATE_NMI +Generating a non-maskable interrupt (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +Captures or releases the mouse inside DOSBox-X. + +CAPMOUSE [/C|/R] + + /C Capture the mouse + /R Release the mouse +. +:PROGRAM_CAPMOUSE_MOUSE +Mouse +. +:PROGRAM_CAPMOUSE_CURRENTLY +is currently +. +:PROGRAM_CAPMOUSE_CAPTURED +captured +. +:PROGRAM_CAPMOUSE_RELEASED +released +. +:PROGRAM_AUTOTYPE_HELP +Performs scripted keyboard entry into a running DOS program. + +AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]] + +Where: + -list: prints all available button names. + -w WAIT: seconds before typing begins. Two second default; max of 30. + -p PACE: seconds between each keystroke. Half-second default; max of 10. + + The sequence is comprised of one or more space-separated buttons. + Autotyping begins after WAIT seconds, and each button is entered + every PACE seconds. The , character inserts an extra PACE delay. + +Some examples: + ←[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter←[0m + ←[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: The mapper has no key bindings +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: bounding %s value of %.2f to %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s value '%s' is not a valid floating point number +. +:PROGRAM_ADDKEY_HELP +Generates artificial keypresses. + +ADDKEY [pmsec] [key] + +For example, the command below types "dir" followed by ENTER after 1 second: + +ADDKEY p1000 d i r enter + +You could also try AUTOTYPE command instead of this command to perform +scripted keyboard entry into a running DOS program. +. +:PROGRAM_SETCOLOR_HELP +Views or changes the text-mode color scheme settings. + +SETCOLOR [color# [value]] + +For example: + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Change Color #0 to the specified color value + + ←[32;1mSETCOLOR 7 -←[0m +Return Color #7 to the default color value + + ←[32;1mSETCOLOR 3 +←[0m +Return Color #3 to the preset color value + + ←[32;1mSETCOLOR MONO←[0m +Display current MONO mode status + +To change the current background and foreground colors, use COLOR command. +. +:PROGRAM_SETCOLOR_STATUS +MONO mode status: %s (video mode %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +active +. +:PROGRAM_SETCOLOR_INACTIVE +inactive +. +:PROGRAM_SETCOLOR_UNAVAILABLE +unavailable +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO mode status => active (video mode 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO mode status => inactive (video mode 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +Failed to change MONO mode +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +Must be + or - for MONO: %s +. +:PROGRAM_SETCOLOR_COLOR +Color %d: (%d,%d,%d) or #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Invalid color number - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Invalid color value - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Changing color scheme is not supported for the current video mode. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Unknown boothax mode +. +:PROGRAM_BOOT_SPECIFY_FILE +Must specify BIOS image to boot +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +Unable to open BIOS image +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Must specify BIOS file to load. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Can't open a file +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS File too large +. +:PROGRAM_DELTREE_HELP +Deletes a directory and all the subdirectories and files in it. + +To delete one or more files and directories: +DELTREE [/Y] [drive:]path [[drive:]path[...]] + + /Y Suppresses prompting to confirm you want to delete + the subdirectory. + [drive:]path Specifies the name of the directory you want to delete. + +Note: Use DELTREE cautiously. Every file and subdirectory within the +specified directory will be deleted. + +. +:PROGRAM_TREE_HELP +Graphically displays the directory structure of a drive or path. + +TREE [drive:][path] [/F] [/A] + + /F Displays the names of the files in each directory. + /A Uses ASCII instead of extended characters. + +. +:PROGRAM_TITLE_HELP +Sets the window title for the DOSBox-X window. + +TITLE [string] + + string Specifies the title for the DOSBox-X window. + +. +:PROGRAM_COLOR_HELP +Sets the default console foreground and background colors. + +COLOR [attr] + + attr Specifies color attribute of console output + +Color attributes are specified by TWO hex digits -- the first +corresponds to the background; the second to the foreground. +Each digit can be any of the following values: + + 0 = Black 8 = Gray + 1 = Blue 9 = Light Blue + 2 = Green A = Light Green + 3 = Aqua B = Light Aqua + 4 = Red C = Light Red + 5 = Purple D = Light Purple + 6 = Yellow E = Light Yellow + 7 = White F = Bright White + +If no argument is given, this command restores the original color. + +The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute +the COLOR command with a foreground and background color that are the same. + +Example: "COLOR fc" produces light red on bright white. + +. +:SCALER_LOAD_WARN +This scaler may not work properly or have undesired effect: + +%s + +Do you want to force load the scaler? +. +:PIXEL_SHADER_WARN +This pixel shader may be unneeded or have undesired effect: + +%s + +Do you want to load the pixel shader anyway? + +(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message) +. +:PIXEL_SHADER_LOADED +Loaded pixel shader - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +Mapper Editor is not currently available. +. +:OPL_REC_COMPLETED +Saved Raw OPL output to the file: + +%s +. +:OPL_CAPTURE_FAILED +Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format. +. +:TTF_DBCS_ONLY +This function is only available for the Chinese/Japanese/Korean code pages. +. +:SAVE_FAILED +Failed to save the current state. +. +:SAVE_CORRUPTED +Save state corrupted! Program may not work. +. +:SAVE_SCREENSHOT +Saved screenshot to the file: + +%s +. diff --git a/contrib/translations/tr/tr_TR.lng b/contrib/translations/tr/tr_TR.lng index e44110d9a02..b31fd03034b 100644 --- a/contrib/translations/tr/tr_TR.lng +++ b/contrib/translations/tr/tr_TR.lng @@ -1,6 +1,6 @@ :DOSBOX-X:LANGUAGE:Turkish (Turkey) :DOSBOX-X:CODEPAGE:857 -:DOSBOX-X:VERSION:2025.02.01 +:DOSBOX-X:VERSION:2026.05.02 :DOSBOX-X:REMARK: :AUTOEXEC_CONFIGFILE_HELP Lines in this section will be run at startup. @@ -27,7 +27,7 @@ DOSBox-X yapılandırma aracı Yapılandırma aracından çık . :MAPPER_EDITOR_EXIT -Eşlem düzenleyiciden çık +Eşlem düzenleyicisinden çık . :SAVE_MAPPER_FILE Eşlem dosyasını kaydet @@ -50,8 +50,11 @@ Tamam :CLOSE Kapat . +:THEME +Tema +. :DEBUGCMD -Hata Ayıklayıcı Komutu +Hata ayıklayıcısı komutu . :ADD Ekle @@ -78,7 +81,7 @@ Yapılandırmayı kaydet Dil dosyasını kaydet . :SAVE_RESTART -Kaydet/yeniden başl. +Kaydet/Yen. başlat . :PASTE_CLIPBOARD Panoyu yapıştır @@ -87,7 +90,7 @@ Panoyu yapıştır Geçmişi iliştir . :EXECUTE_NOW -Şimdi çalıştır +Şimdi yürüt . :ADDITION_CONTENT Ek içerik: @@ -102,10 +105,10 @@ Düzenle: %s %s yardımı . :HELP_INFO -Ayrıntılı yardım için aşağıdaki "Yardım" düğmesini tıklayın. +Ayrıntılı yardım için aşağıdaki "Yardım" düğmesine tıklayın. . :SELECT_VALUE -Özellik değerini seçin +Özellik değerini seç . :CONFIGURATION_FOR %s yapılandırması @@ -120,7 +123,7 @@ Ayarlar DOSBox-X günlükleme çıktısı . :CODE_OVERVIEW -Kod genel bakış +Koda genel bakış . :VISIT_HOMEPAGE Ana sayfayı ziyaret et @@ -144,13 +147,13 @@ IDE denetimcisi ataması DOS komutları yardımı . :CURRENT_VOLUME -Geçerli ses karıştıcı düzeyi +Geçerli ses karıştıcısı düzeyi . :CURRENT_SBCONFIG Sound Blaster yapılandırması . :CURRENT_MIDICONFIG -Geçerli MIDI yapılandırması +Geçerli MIDI/OPL yapılandırması . :CREATE_IMAGE Boş disk kalıbı oluştur @@ -165,7 +168,7 @@ Yazıcı listesi Giriş . :CONFIGURE_GROUP -Yapılandırmak için bir ayar grubu seçin: +Yapılandırmak için bir ayar grubu seç: . :SHOW_ADVOPT Gelişmiş seçenekler @@ -180,13 +183,13 @@ Taşınabilir yapılandırma Kullanıcı yapılandır. . :CONFIG_SAVETO -Kaydedilecek yapılandırma dosyası için bir ad girin: +Kaydedilecek yapılandırma dosyası için bir ad gir: . :CONFIG_SAVEALL -Tüm yapılandırma seçeneklerini (gelişmişler dahil) dosyaya kaydet +Tüm yapılandırma seçeneklerini (gelişmişler de) dosyaya kaydet . :LANG_FILENAME -Dil dosyası için bir ad girin: +Dil dosyası için bir ad gir: . :LANG_LANGNAME Dil adı (isteğe bağlı): @@ -215,13 +218,13 @@ Disk adı IDE konumu . :SWAP_SLOT -Takas slotu +Takas yuvası . :EMPTY_SLOT -Boş slot +Boş yuva . :SLOT -Slot +Yuva . :SELECT_EVENT Değiştirilecek olayı seçin. @@ -350,7 +353,7 @@ Bu özellik çalışma zamanında değiştirilemez. . :PROGRAM_CONFIG_APPLY_RESTART -ayarını uygulamak için şimdi yeniden başlatmak istiyor musunuz [Y/N]? +ayarını uygulamak için şimdi yeniden başlatmak istiyor musunuz [E/H]? . :PROGRAM_CONFIG_HLP_POSINT pozitif tamsayı @@ -373,7 +376,7 @@ Bu işleme güvenli kipte izin verilmez. . :PROGRAM_CONFIG_SECTION_ERROR -%s mevcut değil. +%s yok. . :PROGRAM_CONFIG_VALUE_ERROR @@ -419,7 +422,7 @@ Halihazırda PS/2 kapısına takılı. . :PROGRAM_MOUSE_NOINSTALLED -Sürücü yüklü değil. +Sürücü kurulu değil. . :PROGRAM_MOUSE_HELP @@ -455,11 +458,11 @@ Bulunan CD-ROM'lar: %d . :PROGRAM_MOUNT_NOT_FORMATTED -Drive not formatted. Format it before accessing the drive. +Sürücü biçimlendirilmemiş. Sürücüye erişmeden önce onu biçimlendirin. . :PROGRAM_MOUNT_UNSUPPORTED_EXT -Unsupported extension %s: Mounted as raw IMG image. +Bilinmeyen genişletme %s: Ham IMG kalıbı olarak bağlanmış. . :PROGRAM_IMGMOUNT_STATUS_FORMAT @@ -491,7 +494,7 @@ Bu sürücü için konum 1 ile %d arasında olmalıdır. . :PROGRAM_MOUNT_ERROR_1 -%s dizini mevcut değil. +%s dizini yok. . :PROGRAM_MOUNT_ERROR_2 @@ -542,9 +545,9 @@ MOUNT komutunun yalın bir örneği: ←[32;1mMOUNT c %s←[0m Bu komut, dizinin DOSBox-X içinde C: sürücüsü olarak davranmasını sağlar. -Dizin ana makinede var olmalıdır. Eğer dizin adında boşluklar varsa dizini -çift tırnak ile düzgünce alıntıladığınızdan emin olun; -örneğin: %s + Dizin ana makinede var olmalıdır. Eğer dizin adında boşluklar varsa dizini + çift tırnak ile düzgünce alıntıladığınızdan emin olun; örneğin: +%s MOUNT komutunun başka örnekleri: @@ -555,7 +558,7 @@ MOUNT komutunun başka örnekleri: ←[32;1mMOUNT c %s -ro←[0m - C: sürücüsünü saltokunur kipte bağla ←[32;1mMOUNT c %s -label TEST←[0m - C: sürücüsünü TEST etiketiyle bağla ←[32;1mMOUNT c %s -nocachedir ←[0m - C: sürücüsünü sürücüyü önbelleklemeden bağla -←[32;1mMOUNT c %s -freesize 128←[0m - C: sürücüsünü 128MB boş alanla bağla +←[32;1mMOUNT c %s -freesize 128←[0m - C: sürücüsünü 128 MB boş alanla bağla ←[32;1mMOUNT c %s -u←[0m - C: sürücüsünü bağlı olsa bile yeniden bağla ←[32;1mMOUNT c %s -t overlay←[0m - C: sürücüsünün üzerine başka dizin bindir ←[32;1mMOUNT c -u←[0m - unmount the C: drive @@ -598,7 +601,8 @@ Bindirme, belirtilen sürücü ile uyumlu DEĞİL. . :PROGRAM_MOUNT_OVERLAY_MIXED_BASE -Bindirme, altındaki sürücü ile aynı adresleme kullanılarak belirtilmelidir. Göreli ve mutlak yollar karıştırılamaz. +Bindirme, altındaki sürücü ile aynı adresleme kullanılarak belirtilmelidir. +Göreli ve mutlak yollar karıştırılamaz. . :PROGRAM_MOUNT_OVERLAY_SAME_AS_BASE Bindirilecek dizin altındaki sürücü ile aynı olamaz. @@ -637,17 +641,17 @@ LOADFIX -f [-xms] [-ems] -xms Geleneksel bellek yerine XMS'den ayırır -ems Geleneksel bellek yerine EMS'den ayırır -{ram} Ayrılacak bellek miktarını KB türünden belirtir - Geleneksel bellek için 64kb; XMS/EMS için 1MB ayrılır. - -a En düşük 64KB belleği doldurmak için kendiliğinden bellek ayırır + Geleneksel bellek için 64 kb; XMS/EMS için 1 MB ayrılır. + -a En düşük 64 KB belleği doldurmak için kendiliğinden bellek ayırır -f (or -d) Daha önceden ayrılan belleği boşaltır {program} Belirtilen programı çalıştırır {options} Program seçenekleri (varsa) Örnekler: - ←[32;1mLOADFIX abc.exe←[0m 64KB geleneksel bellek ayırır ve abc.exe'yi çalıştırır + ←[32;1mLOADFIX abc.exe←[0m 64 KB geleneksel bellek ayırır ve abc.exe'yi çalıştırır ←[32;1mLOADFIX -a←[0m Yeteri kadar geleneksel belleği ayırır - ←[32;1mLOADFIX -128←[0m 128KB geleneksel bellek ayırır - ←[32;1mLOADFIX -xms←[0m 1MB XMS belleği ayırır + ←[32;1mLOADFIX -128←[0m 128 KB geleneksel bellek ayırır + ←[32;1mLOADFIX -xms←[0m 1 MB XMS belleği ayırır ←[32;1mLOADFIX -f←[0m Ayrılan geleneksel belleği boşaltır . @@ -881,7 +885,7 @@ numarayı değiştirin: . :PROGRAM_BOOT_NOT_EXIST -Önyükleme disk dosyası mevcut değil. Başarısız. +Önyükleme disk dosyası yok. Başarısız. . :PROGRAM_BOOT_NOT_OPEN @@ -924,7 +928,7 @@ yapar. . :PROGRAM_BOOT_IMAGE_MOUNTED -Floppy image(s) already mounted. +Disket kalıpları halihazırda bağlanmış. . :PROGRAM_BOOT_IMAGE_OPEN @@ -945,7 +949,7 @@ Kullanılabilir PCjr kartuş komutları: %s Bir PCjr kartuş komutu bulunamadı . :PROGRAM_BOOT_BOOTING -Booting from drive +Şu sürücüden önyükleniyor: . :PROGRAM_LOADROM_HELP Carga el archivo de imagen ROM especificado para BIOS de video o IBM BASIC. @@ -1120,22 +1124,25 @@ Disket, sabit disk ve optik disk sürücülerini bağlar. ←[32;1m-examples Birkaç kulllanım örneği göster.←[0m . :PROGRAM_IMGMOUNT_EXAMPLE -IMGMOUNT için birkaç kullanım örneği: +IMGMOUNT'un bazı kullanım örnekleri: - ←[32;1mIMGMOUNT←[0m - bağlı FAT/ISO sürücü ve numaralarını göster - ←[32;1mIMGMOUNT C←[0m - ←[33;1mIMGMAKE.IMG←[0m sabit disk kalıbını C: olarak bağla - ←[32;1mIMGMOUNT C c:\image.img←[0m - c:\image.img sabit disk kalıbını C: olarak bağla + ←[32;1mIMGMOUNT←[0m - bağlanmış FAT/ISO sürücülerini/numaralarını listele + ←[32;1mIMGMOUNT C←[0m - ←[33;1mIMGMAKE.IMG←[0m disk kalıbını C: olarak bağla + ←[32;1mIMGMOUNT C c:\image.img←[0m - c:\image.img disk kalıbını C: olarak bağla ←[32;1mIMGMOUNT D c:\files\game.iso←[0m - c:\files\game.iso CD kalıbını D: olarak bağla - ←[32;1mIMGMOUNT D cdaudio.cue←[0m - cue/bin ikilisinin cue dosyasını CD sürücüsü olarak bağla + ←[32;1mIMGMOUNT D cdaudio.cue←[0m - cue/bin çiftinin cue dosyasını CD sürücüsü olarak bağla ←[32;1mIMGMOUNT 0 dos.ima←[0m - dos.ima disket kalıbını 0 numaralı sürücü olarak bağla - (←[33;1mBOOT A:←[0m önyüklenebilir ise sürücüden önyüklenecektir) - ←[32;1mIMGMOUNT A -ro dos.ima←[0m - dos.ima diske sürücüsünü A: saltokunur olarak bağla - ←[32;1mIMGMOUNT A :dsk1.img dsk2.img←[0m - dsk1.img ve dsk2.img disket kalıplarını A: sürücüsünde - "Disket değiştir" menü seçeneği ile değiştirilebilir olarak bağla - dsk1.img saltokunur olur (dsk2.img değil) + (←[33;1mBOOT A:←[0m önyüklenebilirse sürücüden önyüklenir) + ←[32;1mIMGMOUNT A -ro dos.ima←[0m - dos.ima disket kalıbını saltokunur A: olarak bağla + ←[32;1mIMGMOUNT A :dsk1.img dsk2.img←[0m - dsk1.img ve dsk2.img disket kalıplarını A: olarak + bağla; A:, "Disketi takas et" menü seçeneğiyle dsk1.img saltokunur + olarak takas edilebilirler (ancak dsk2.img ile değil) ←[32;1mIMGMOUNT A -bootcd D←[0m - önyüklenebilir A: disketini D: CD sürücüsünden bağla - ←[32;1mIMGMOUNT C -t ram -size 10000←[0m - C: sabit disk sürücüsünü 10MB'lık bir RAM sürücüsü olarak bağla - ←[32;1mIMGMOUNT A -u←[0m - daha önceden bağlanan A: sürücüsünün bağlantısını kes + ←[32;1mIMGMOUNT C -t ram -size 10000←[0m - C: sabit diskini 10 MB'lik RAM sürücüsü olarak bağla + ←[32;1mIMGMOUNT D d.img -o partidx=4←[0m - d.img'nin 1. mantıksal bölüntüsünü D: olarak bağla + ←[32;1mIMGMOUNT C disk.img -u←[0m - disk.img disk kalıbını C: olarak bağlamayı zorla, + gerekirse sürücünün önceden bağlantısını kes + ←[32;1mIMGMOUNT A -u←[0m - daha önceden bağlanmış A: sürücüsünün bağlantısını kes . :PROGRAM_IMGMAKE_SYNTAX @@ -1147,14 +1154,14 @@ Kullanım: ←[34;1mIMGMAKE [dosya] [-t tür] [[-size boyut] | [-chs geometri]] ←[33;1mDisket şablonları←[0m (adlar KB veya fd=fd_1440 cinsinden disket boyutuna tekabül eder): fd_160 fd_180 fd_200 fd_320 fd_360 fd_400 fd_720 fd_1200 fd_1440 fd_2880 ←[33;1mSabit disk şablonları:←[0m - hd_250: 250MB kalıp, hd_520: 520MB kalıp, hd_1gig: 1GB kalıp - hd_2gig: 2GB kalıp, hd_4gig: 4GB kalıp, hd_8gig: 8GB kalıp - hd_st251: 40MB kalıp, hd_st225: 20MB kalıp (eski sürücü geometrisi) + hd_250: 250 MB kalıp, hd_520: 520 MB kalıp, hd_1gig: 1 GB kalıp + hd_2gig: 2 GB kalıp, hd_4gig: 4 GB kalıp, hd_8gig: 8 GB kalıp + hd_st251: 40 MB kalıp, hd_st225: 20 MB kalıp (eski sürücü geometrisi) ←[33;1mÖzel sabit disk kalıpları:←[0m hd (-size veya -chs gerektirir) -size: Özel sabit disk kalıbının MB türünden boyutu. -chs: Silindir (1-1023), kafa (1-255), sektör (1-63) türünden disk geometrisi. -nofs: Boş bir kalıp oluşturulması gerekiyorsa bu parametreyi ekleyin. - -force: Mevcut kalıp dosyasının üzerine yazmayı zorla. + -force: Var olan kalıp dosyasının üzerine yazmayı zorla. -bat: Bu kalıp için gerekli içinde IMGMOUNT olan bir .bat dosyası oluştur. -fat: FAT dosya sistemi türü (12, 16, or 32). -spc: Küme başına sektör geçersiz kıl. 2'nin bir üssü olmalıdır. @@ -1167,14 +1174,15 @@ Kullanım: ←[34;1mIMGMAKE [dosya] [-t tür] [[-size boyut] | [-chs geometri]] :PROGRAM_IMGMAKE_EXAMPLE IMGMAKE için birkaç kullanım örneği: - ←[32;1mIMGMAKE -t fd←[0m - 1,44MB ←[33;1mIMGMAKE.IMG←[0m disket kalıbı oluştur - ←[32;1mIMGMAKE -t fd_1440 -force←[0m - ←[33;1mIMGMAKE.IMG←[0m diye bir disket kalıbı oluşturmayı zorla - ←[32;1mIMGMAKE dos.img -t fd_2880←[0m - dos.img diye 2,88MB'lık bir disket kalıbı oluştur - ←[32;1mIMGMAKE c:\disk.img -t hd -size 50←[0m - c:\disk.img diye 50MB'lık bir HDD kalıbı oluştur - ←[32;1mIMGMAKE c:\disk.img -t hd_520 -nofs←[0m - 520MB'lık boş bir HDD kalıbı oluştur - ←[32;1mIMGMAKE c:\disk.img -t hd_2gig -fat 32←[0m - 2GB'lık bir FAT32 HDD kalıbı oluştur - ←[32;1mIMGMAKE c:\disk.img -t hd -chs 130,2,17←[0m - belirtilen CHS'nin bir HDD kalıbını oluştur - ←[32;1mIMGMAKE c:\disk.img -source a←[0m - fiziksel sürücü A:'dan kalıp oku + ←[32;1mIMGMAKE -t fd←[0m - 1,44 MB'lik bir disket kalıbı oluştur ←[33;1mIMGMAKE.IMG←[0m + ←[32;1mIMGMAKE -t fd_1440 -force←[0m - bir disket kalıbı oluşturmayı zorla ←[33;1mIMGMAKE.IMG←[0m + ←[32;1mIMGMAKE dos.img -t fd_2880←[0m - dos.img adında bir 2,88 MB'lik disket kalıbı oluştur + ←[32;1mIMGMAKE new.vhd -t vhd -size 520←[0m- new.vhd adında 520 MB'lik bir Devingen VHD oluştur + ←[32;1mIMGMAKE c:\disk.img -t hd -size 50←[0m - c:\disk.img olarak 50 MB'lik disk kalıbı oluştur + ←[32;1mIMGMAKE c:\disk.img -t hd_520 -nofs←[0m - 520 MB'lik boş disk kalıbı oluştur + ←[32;1mIMGMAKE c:\disk.img -t hd_2gig -fat 32←[0m - 2 GB'lik bir FAT32 disk kalıbı oluştur + ←[32;1mIMGMAKE c:\disk.img -t hd -chs 130,2,17←[0m - belirtilen CHS'nin bir disk kalıbını oluştur + ←[32;1mIMGMAKE c:\disk.img -source a←[0m - fiziksel A: sürücüsünden kalıp oku . :PROGRAM_IMGMAKE_FLREAD @@ -1188,7 +1196,7 @@ Disk geometrisi: %d silindir, %d kafa, %d sektör, %d kilobayt . :PROGRAM_IMGMAKE_FILE_EXISTS -"%s" dosyası halihazırda mevcut. Üzerine yazmak için "-force" kullanın. +"%s" dosyası halihazırda var. Üzerine yazmak için "-force" kullanın. . :PROGRAM_IMGMAKE_CANNOT_WRITE @@ -1209,7 +1217,7 @@ Kalıp dosyası için yeterli boş alan yok. %llu bayt daha gerekli. Disket okunamıyor. . :PROGRAM_IMGMAKE_BADSIZE -Wrong -size or -chs arguments. +Yanlış -size veya -chs argümanları. . :PROGRAM_KEYB_INFO @@ -1217,29 +1225,29 @@ Wrong -size or -chs arguments. . :PROGRAM_KEYB_INFO_LAYOUT -%i kod sayfası %s dizilimi için yüklendi +%i kod sayfası %s yerleşimi için yüklendi . :PROGRAM_KEYB_SHOWHELP Klavyeyi belirli bir dil için yapılandırır. Usage: ←[32;1mKEYB←[0m [klavye dizilimi kimliği [kod sayfası numarası [kod sayfası dosyası]]] - layout ID Yüklenecek düzen veya klavye dosyasının (.kl) adı + layout ID Yüklenecek yerleşim veya klavye dosyasının (.kl) adı codepage number Yüklenecek kod sayfası sayısı codepage file Belirtilen kod sayfası bilgilerini içeren .cpi/.cpx dosyası (.kl, .cpi/.cpx dosyaları dosbox-x dizininin altına yerleştirilecektir yürütülebilir dosya var.) Some examples: - ←[32;1mKEYB←[0m Şu anda yüklü kod sayfasını görüntüle. - ←[32;1mKEYB tr←[0m Türkçe (TR-Q) dizilimini uygun kod sayfası ile yükle. - ←[32;1mKEYB tr440←[0m Türkçe (TR-F) dizilimini uygun kod sayfası ile yükle. - ←[32;1mKEYB tr 857←[0m Türkçe (TR-Q) dizilimin 857 kod sayfası ile yükle. - ←[32;1mKEYB tr 857 mycp.cpi←[0m Yukarıdakinin aynısı, mycp.cpi dosyası ile. - ←[32;1mKEYB tr_mod 857←[0m tr_mod.kl'den klavye düzenini yükleyin, kod sayfası 857'yi kullanın. + ←[32;1mKEYB←[0m Şu anda yüklü kod sayfasını görüntüle + ←[32;1mKEYB tr←[0m Türkçe (TR-Q) yerleşimini uygun kod sayfası ile yükle + ←[32;1mKEYB tr440←[0m Türkçe (TR-F) yerleşimini uygun kod sayfası ile yükle + ←[32;1mKEYB tr 857←[0m Türkçe (TR-Q) yerleşimini 857 kod sayfası ile yükle + ←[32;1mKEYB tr 857 mycp.cpi←[0m Yukarıdakinin aynısı, mycp.cpi dosyası ile + ←[32;1mKEYB tr_mod 857←[0m tr_mod.kl'den klavye yerleşimini yükle, kod sayfası 857'yi kullan . :PROGRAM_KEYB_NOERROR -%s klavye dizilimi %i kod sayfası için yüklendi +%s klavye yerleşimi, %i kod sayfası için yüklendi . :PROGRAM_KEYB_FILENOTFOUND @@ -1252,43 +1260,43 @@ Klavye dosyası %s geçersiz . :PROGRAM_KEYB_LAYOUTNOTFOUND -Şu kod sayfası için %s içinde bir dizilim bulunamadı: %i +Şu kod sayfası için %s içinde bir yerleşim bulunamadı: %i . :PROGRAM_KEYB_INVCPFILE -%s dizilimi için geçersiz veya olmayan kod sayfası dosyası +%s yerleşimi için geçersiz veya olmayan kod sayfası dosyası . :INT21_6523_YESNO_CHARS -yn +eh . :PROGRAM_LABEL_HELP -Creates, changes, or deletes the volume label of a drive. +Bir sürücünün etiketini oluşturur, değiştirir veya siler. LABEL [drive:][label] - [drive:]○Specifies the drive letter - [label]○Specifies the volume label + [drive:]○Sürücü harfini belirtir + [label]○Disk bölümü etiketini belirtir . :PROGRAM_LABEL_DELETE -Delete the volume label (Y/N)? +Disk bölümü etiketi silinsin mi (E/H)? . :PROGRAM_LABEL_TOOLONG -Label is too long (more than 11 characters). +Etiket pek uzun (11 karakterden fazla). . :PROGRAM_LABEL_BADCHARS -Label has invalid characters. +Etikette geçersiz karakterler var. . :PROGRAM_LABEL_VOLUMEIS -Volume in drive %c is %s +%c sürücüsündeki disk bölümü %s . :PROGRAM_LABEL_NOLABEL -Volume in drive %c has no label +%c sürücüsündeki disk bölümünün etiketi yok . :PROGRAM_MODE_USAGE @@ -1308,108 +1316,111 @@ Geçersiz parametre(ler). . :PROGRAM_VHDMAKE_WRITERR -Could not write to new VHD image "%s", aborting. +Yeni "%s" VHD kalıbına yazılamadı, iptal ediliyor. . :PROGRAM_VHDMAKE_REMOVEERR -Could not erase file "%s" +"%s" dosyası silinemedi . :PROGRAM_VHDMAKE_RENAME -You'll have to manually rename the newly created VHD image. +Yeni oluşturulmuş VHD kalıbını elle yeniden adlandırmanız gerekecek. . :PROGRAM_VHDMAKE_SUCCESS -New VHD image successfully created. You can mount it with ←[34;1mIMGMOUNT←[0m. +Yeni VHD kalıbı başarıyla oluşturuldu. Onu, ←[34;1mIMGMOUNT←[0m ile bağlayabilirsiniz. . :PROGRAM_VHDMAKE_ERROPEN -Error, could not open image file "%s". +Hata, "%s" kalıp dosyası açılamadı. . :PROGRAM_VHDMAKE_BADSIZE -Bad VHD size specified, aborting! +Hatalı VHD büyüklüğü belirtildi, iptal ediliyor! . :PROGRAM_VHDMAKE_FNEEDED -A pre-existing VHD image can't be silently overwritten without -f option! +Var olan bir VHD kalıbının üzerine -f olmadan sessizce yazılamaz! . :PROGRAM_VHDMAKE_BADPARENT -The parent VHD image "%s" can't be opened for linking, aborting! +Üst VHD kalıbı "%s", bağlantılama için açılamıyor, iptal ediliyor! . :PROGRAM_VHDMAKE_NOINFO -Couldn't query info for "%s". +"%s" için bilgi sorgulanamadı. . :PROGRAM_VHDMAKE_BLOCKSTATS -with %d/%d blocks allocated. + ayrılmış %d/%d blok ile. . :PROGRAM_VHDMAKE_INFO -VHD "%s" type is %s. -Its virtual size is %.02f MB +VHD "%s" türü %s. +Onun sanal büyüklüğü %.02f MB . :PROGRAM_VHDMAKE_CANTMERGE -%s is not a Differencing disk, can't merge! +%s bir fark diski değil, birleştirilemiyor! . :PROGRAM_VHDMAKE_MERGEREPORT -%d sectors in %d blocks from "%s" merged into "%s". +%d/%d dilim/blok, "%s" konumundan "%s" içine birleştirildi. . :PROGRAM_VHDMAKE_MERGENODELETE -Couldn't remove snapshot "%s", you'll have to do it yourself! +"%s" anlık görüntüsü kaldırılamadı, bunu sizin yapmanız gerekecek! . :PROGRAM_VHDMAKE_MERGEOKDELETE -Snapshot VHD merged and deleted. +VHD anlık görüntüsü birleştirildi ve silindi. . :PROGRAM_VHDMAKE_MERGEFAILED -Failure while merging, aborted! +Birleştirme sırasında hata, iptal edildi! + . :PROGRAM_VHDMAKE_MERGEWARNCORRUPTION -Parent "%s" contents could be corrupted! +Üst öge "%s" içeriği hasar görmüş olabilir! . :PROGRAM_VHDMAKE_ABSPATH_WIN -Warning: an absolute path to parent limits portability to Windows. -Please prefer a path relative to differencing image file! +Uyarı: Üst ögeye olan mutlak bir yol Windows'a olan taşınabilirliği sınırlar. +Lütfen fark kalıbına göreceli olan bir yolu tercih edin! . :PROGRAM_VHDMAKE_ABSPATH_UX -ERROR: an absolute path to parent inhibits portability. -Use a path relative to differencing image file! +HATA: Üst ögeye olan mutlak yol, taşınabilirliği engeller. +Fark kalıbına göreceli olan bir yol kullanın! . :PROGRAM_VHDMAKE_HELP -Creates Dynamic or Differencing VHD images, or converts raw images -into Fixed VHD. -←[32;1mVHDMAKE←[0m [-f] new.vhd size[BKMGT] -←[32;1mVHDMAKE←[0m ←[34;1m-convert←[0m raw.hdd new.vhd -←[32;1mVHDMAKE←[0m [-f] ←[34;1m-link←[0m parent.vhd new.vhd +Devingen veya farksal VHD kalıpları oluşturur veya ham kalıpları sabit VHD +olarak dönüştürür; VHD kalıpları hakkında bilgi gösterir ve onları birleştirir. +←[32;1mVHDMAKE←[0m [-f] yeni.vhd boyut[BKMGT] +←[32;1mVHDMAKE←[0m ←[34;1m-convert←[0m ham.hdd yeni.vhd +←[32;1mVHDMAKE←[0m [-f] ←[34;1m-link←[0m üst-öge.vhd yeni.vhd ←[32;1mVHDMAKE←[0m ←[34;1m-merge←[0m delta.vhd ←[32;1mVHDMAKE←[0m ←[34;1m-info←[0m a.vhd - -c | -convert convert a raw hd image to Fixed VHD, renaming it to new.vhd - -l | -link create a new Differencing VHD new.vhd and link it to the - pre-existing parent image parent.vhd - -f | -force force overwriting a pre-existing image file - -i | -info show useful information about a.vhd image - -m | -merge merge differencing delta.vhd to its parent - new.vhd name of the new Dynamic VHD image to create - size disk size (eventually with size unit, Bytes is implicit) -When converting a raw disk image to Fixed VHD, it has to be partitioned with -MBR scheme and formatted with FAT format. -When creating a Dynamic VHD, its size must range from 3 MB to 2040 GB. -The Dynamic VHD created is not partitioned nor formatted: to directly mount to -a drive letter with ←[34;1mIMGMOUNT←[0m, please consider using ←[34;1mIMGMAKE←[0m instead. -A merged snapshot VHD is automatically deleted if merge is successful. + -c | -convert ham bir disk kalıbını sabit VHD olarak dönüştürür, + yeni.vhd olarak yeniden adlandırır + -l | -link yeni bir farksal new.vhd oluşturur ve onu var olan üst öge + üst-öge.vhd'ye bağlantılar + -f | -force var olan bir kalıp dosyasının üzerine yazmayı zorla + -i | -info bir a.VHD kalıbı hakkında yararlı bilgiler göster + -m | -merge farksal delta.vhd kalıbını üst ögesine birleştir + yeni.vhd oluşturulacak yeni devingen VHD kalıbının adı + boyut disk büyüklüğü (bayt ima edilir) +Ham bir disk kalıbını sabit VHD'ye dönüştürürken MBR şeması ile bölüntülenmeli + ve FAT ile biçimlendirilmelidir. +Devingen bir VHD oluştururken büyüklüğü 3 MB ile 2040 GB arasında olmalıdır. +Oluşturulan devingen VHD ne bölüntülenmiş ne de biçimlendirilmiştir; doğrudan + bir sürücü harfine ←[34;1mIMGMOUNT←[0m ile bağlamak için lütfen←[34;1mIMGMAKE←[0m + kullanmayı düşünün. +Birleştirilmiş bir anlık görüntü VHD, birleştirme başarılıysa doğrudan silinir. . :SHELL_CMD_TREE_ERROR -Bir alt dizin mevcut değil +Var olan alt dizinler yok . :SHELL_CMD_VOL_TREE @@ -1510,14 +1521,14 @@ Belirtilen tarih doğru değil. Geçerli tarih: . :SHELL_CMD_DATE_SETHLP -Değiştirmek için 'date %s' yazın. +Değiştirmek için "date %s" yazın. . :SHELL_CMD_DATE_HELP_LONG DATE [[/T] [/H] [/S] | tarih] tarih: Ayarlanacak yeni tarih /S: Ana makine tarih ve zamanını DOS zamanı olarak kullan - /F: DOSBox-X dahili zamanına geç (/S'in karşıtı) + /F: DOSBox-X içsel zamanına geç (/S'in karşıtı) /T: Yalnızca tarihi görüntüle /H: Ana makine ile eşitle @@ -1534,7 +1545,7 @@ Belirtilen zaman doğru değil. Geçerli zaman: . :SHELL_CMD_TIME_SETHLP -Değiştirmek için 'time %s' yazın. +Değiştirmek için "time %s" yazın. . :SHELL_CMD_TIME_HELP_LONG @@ -1545,7 +1556,7 @@ TIME [[/T] [/H] | zaman] . :SHELL_CMD_MKDIR_EXIST -Dizin halihazırda mevcut - %s +Dizin halihazırda var - %s . :SHELL_CMD_MKDIR_ERROR @@ -1557,10 +1568,10 @@ Geçersiz yol, dizin değil veya dizin boş değil - %s . :SHELL_CMD_RMDIR_FULLTREE_CONFIRM -Delete directory "%s" and all its subdirectories? (Y/N)? +"%s" dizini ve tüm alt dizinleri silinsin mi? (E/H)? . :SHELL_CMD_RMDIR_SINGLE_CONFIRM -Delete file "%s" (Y/N)? +"%s" dosyası silinsin mi (E/H)? . :SHELL_CMD_RENAME_ERROR Yeniden adlandırılamıyor - %s @@ -1579,11 +1590,11 @@ Silinemiyor - %s . :SHELL_CMD_DEL_CONFIRM -Delete %s (Y/N)? +%s silinsin mi (E/H)? . :SHELL_CMD_DEL_SURE Dizindeki tüm dosyalar silinecek! -Emin misiniz [Y/N]? +Emin misiniz [E/H]? . :SHELL_SYNTAXERROR Sözdizim hatası @@ -1626,7 +1637,7 @@ Dosya bulunamadı - %s . :SHELL_CMD_FILE_EXISTS -%s dosyası halihazırda mevcut. +%s dosyası halihazırda var. . :SHELL_CMD_DIR_INTRO @@ -1647,24 +1658,24 @@ Listelenen toplam dosyalar: . :SHELL_EXECUTE_DRIVE_NOT_FOUND -%c sürücüsü mevcut değil! +%c sürücüsü yok! Onu öncelikle ←[31mmount←[0m yapmalısınız. Ek bilgi için ←[1;33mintro←[0m veya ←[1;33mintro mount←[0m yazın. . :SHELL_EXECUTE_DRIVE_ACCESS_CDROM -DOSBox-X'e %c CD-ROM sürücünüze erişim vermek istediğinize emin misiniz [Y/N]? +DOSBox-X'e %c CD-ROM sürücünüze erişim vermek istediğinize emin misiniz [E/H]? . :SHELL_EXECUTE_DRIVE_ACCESS_FLOPPY -DOSBox-X'e %c disket sürücünüze erişim vermek istediğinize emin misiniz [Y/N]? +DOSBox-X'e %c disket sürücünüze erişim vermek istediğinize emin misiniz [E/H]? . :SHELL_EXECUTE_DRIVE_ACCESS_REMOVABLE -DOSBox-X'e %c sürücünüze erişim vermek istediğinize emin misiniz [Y/N]? +DOSBox-X'e %c sürücünüze erişim vermek istediğinize emin misiniz [E/H]? . :SHELL_EXECUTE_DRIVE_ACCESS_NETWORK -DOSBox-X'e %c ağ sürücünüze erişim vermek istediğinize emin misiniz [Y/N]? +DOSBox-X'e %c ağ sürücünüze erişim vermek istediğinize emin misiniz [E/H]? . :SHELL_EXECUTE_DRIVE_ACCESS_FIXED -DOSBox-X'e %c sabit diskinize erişim vermek istediğinize emin misiniz [Y/N]? +DOSBox-X'e %c sabit diskinize erişim vermek istediğinize emin misiniz [E/H]? . :SHELL_EXECUTE_ILLEGAL_COMMAND Hatalı komut veya dosya adı - "%s" @@ -1691,7 +1702,7 @@ Kopyalama hatası - %s . :SHELL_CMD_COPY_CONFIRM -%s üzerine yazılsın mı (Yes/No/All)? +%s üzerine yazılsın mı (Evet/Hayır/Tümü)? . :SHELL_CMD_COPY_NOSPACE Yetersiz disk alanı - %s @@ -1702,7 +1713,8 @@ Kopyalama hatası - %s . :SHELL_CMD_COPY_NOSELF -File cannot be copied onto itself♪ +Dosya kendi üzerine kopyalanamaz + . :SHELL_CMD_SUBST_DRIVE_LIST @@ -1755,7 +1767,7 @@ Kabuk komutları için ←[32mHELP←[37m, kısa bir giriş için ←[32mINTRO . :SHELL_STARTUP_TEXT2_PC98 ←[33mYapılandırma aracı←[37m'nı aracını başlatmak için ←[31mhost+C←[37m kullanın. Ana makine düğmesi ←[32mF11←[37m'dir. -←[33mEşlem düzenleyici←[37m'yi etkinleştirmek için ←[31mhost+M←[37m kullanın. +←[33mEşlem düzenleyicisi←[37m'ni etkinleştirmek için ←[31mhost+M←[37m kullanın. Pencereli ve tam ekran kipi arasında geçiş yapmak için ←[31mhost+F←[37m kullanın. Öykünülen CPU hızını ayarlamak için ←[31mhost+artı←[37m ve ←[31mhost+eksi←[37m kullanın. . @@ -1782,11 +1794,11 @@ Komutların listesini görmek için ←[32mHELP←[37m, kısa bir giriş için . :SHELL_STARTUP_TEXT2 -←[31mF11←[37m+←[31mF←[37m←[37m kestirmesini kullanarak pencereli/tam ekran kip arasında geçiş yapın. --←[31mF11←[37m+←[31mC←[37m←[37m ←[33mYapılandırma aracı←[37m'nı, ←[31mF11←[37m+←[31mM←[37m←[37m ←[33mEşlem düzenleyici←[37m'yi çalıştırır. +-←[31mF11←[37m+←[31mC←[37m←[37m ←[33mYapılandırma aracı←[37m'nı, ←[31mF11←[37m+←[31mM←[37m←[37m ←[33mEşlem düzenleyicisi←[37m'ni çalıştırır. -←[31mF11←[37m+←[31martı←[37m←[37m veya ←[31mF11←[37m+←[31meksi←[37m←[37m düğmeleri ile öykünme hızını artırın veya azaltın. . :SHELL_STARTUP_DOSV -←[32mDOS/V mode←[37m is now active. Try also ←[32mTTF CJK mode←[37m for a general DOS emulation. +←[32mDOS/V kipi←[37m şimdi etkin. Genel DOS öykünmesi için ←[32mTTF CJK kipini←[37m deneyin. . :SHELL_STARTUP_CGA Kompozit CGA kipi desteklenmektedir. ←[31mCtrl+F8←[37m kullanarak kompozit çıkışı açın/kapatın. @@ -1898,7 +1910,7 @@ DOSBox-X komut yardımını gösterir. HELP [/A or /ALL] HELP [komut] - /A veya /ALL Desteklenen tüm dahili komutları listeler. + /A veya /ALL Desteklenen tüm içsel komutları listeler. [komut] Belirli bir komut için yardımı gösterir. ←[0mÖrn., ←[37;1mHELP COPY←[0m veya ←[37;1mCOPY /?←[0m COPY komutu için yardımı gösterir. @@ -2121,7 +2133,7 @@ toplu-iş-ayarları Toplu iş dosyası tarafından gerektirilen herhangi bir ko . :SHELL_CMD_SUBST_HELP -Bir sürücüye bir dahili dizin atar. +Bir sürücüye bir içsel dizin atar. . :SHELL_CMD_SUBST_HELP_LONG @@ -2145,7 +2157,7 @@ LOADHIGH [sürücü:][yol]dosyaadı [parametreler] . :SHELL_CMD_CHOICE_HELP -Seçeneklerden birini seçmek için kullanıcının tuşa basmasını bekler. +Seçeneklerden birini seçmek için kullanıcının düğmeye basmasını bekler. . :SHELL_CMD_CHOICE_HELP_LONG @@ -2165,22 +2177,21 @@ Dosya özniteliklerini görüntüler veya değiştirir. . :SHELL_CMD_ATTRIB_HELP_LONG -ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [sürücü:][yol][dosyaadı] [/S] +ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [sürücü:][yol][dosya-adı] [/S] + Bir öznitelik ayarlar. - Bir özniteliği temizler. - R Saltokunur dosya özniteliği. - A Arşiv dosyası özniteliği. - S Sistem dosyası özniteliği. - H Gizli dosya özniteliği. - - [sürücü:][yol][dosyaadı] - ATTRIB'in işleyeceği dosya veya dizinleri belirtir. + R Saltokunur dosya özniteliği + A Arşiv dosyası özniteliği + S Sistem dosyası özniteliği + H Gizli dosya özniteliği + [sürücü:][yol][dosya-ado] + ATTRIB'in işlemesi için dosyaları veya dizini belirtir. /S Belirtilen yoldaki tüm dizinlerdeki dosyaları işler. . :SHELL_CMD_PATH_HELP -Çalıştırılabilir dosyalar için bir yol ayarlar veya görüntüler. +Yürütülebilir dosyalar için bir yol ayarlar veya görüntüler. . :SHELL_CMD_PATH_HELP_LONG @@ -2193,7 +2204,7 @@ Geçerli yolu görüntülemek için parametresiz PATH yazın. . :SHELL_CMD_PUSHD_HELP Geçerli dizini POPD komutuyla kullanılabilmesi için depolar, - sonra belirtilen dizine geçer. + sonra belirtilen dizine geçer. . :SHELL_CMD_PUSHD_HELP_LONG @@ -2361,7 +2372,7 @@ CTTY aygıt . :SHELL_CMD_MORE_HELP -Bir kezde tek ekranlık çıktı görüntüler. +Tek kerede bir ekranlık çıktı görüntüler. . :SHELL_CMD_MORE_HELP_LONG @@ -2383,19 +2394,20 @@ Programı ses ve video yakalaması ile çalıştırır. . :SHELL_CMD_DXCAPTURE_HELP_LONG -DX-CAPTURE [/V|/-V] [/A|/-A] [/M|/-M] [komut] [seçenekler] - -Ses veya video yakalamasını başlatır, programı çalıştırır ve program çıktığında yakalamayı kendiliğinden durdurur. +DX-CAPTURE [/V|/-V] [/A|/-A] [/M|/-M] [/O|/-O] [komut] [seçenekler] +Video veya ses yakalamasını başlatır, program çalıştırır ve program çıktığında +kendiliğinden yakalamayı durdurur. Video için /V, ses için /A for audio, çok +izli ses için /M ve OPL FM (DROv2 biçimi) için /O kullanın. . :SHELL_CMD_DEBUGBOX_HELP -Programı çalıştırır ve giriş noktasında hata ayıklayıcıya geçer. +Programı çalıştırır ve giriş noktasında hata ayıklayıcısına geçer. . :SHELL_CMD_DEBUGBOX_HELP_LONG DEBUGBOX [komut] [seçenekler] -Hata ayıklayıcıya başlatmak için parametresiz DEBUGBOX yazın. +Hata ayıklayıcısını başlatmak için parametresiz DEBUGBOX yazın. . :SHELL_CMD_COMMAND_HELP @@ -2424,6 +2436,9 @@ Hızlı program başlat... :MENU:mapper_shutdown DOSBox-X'ten çık . +:MENU:mapper_capkeyboard +Klavyeyi yakala +. :MENU:mapper_capmouse Fareyi yakala . @@ -2455,7 +2470,7 @@ Yarıda kesmeler etkinken durdur Yapılandırma aracı . :MENU:mapper_mapper -Eşlem düzenleyici +Eşlem düzenleyicisi . :MENU:mapper_fullscr Tam ekrana gir/çık @@ -2515,112 +2530,112 @@ CPU hızını öykün 8088 XT 4.77MHz (~240 çevrim) . :MENU:cpu286-8 -286 8MHz (~750 çevrim) +286 8 MHz (~750 çevrim) . :MENU:cpu286-12 -286 12MHz (~1510 çevrim) +286 12 MHz (~1510 çevrim) . :MENU:cpu286-25 -286 25MHz (~3300 çevrim) +286 25 MHz (~3300 çevrim) . :MENU:cpu386-25 -386DX 25MHz (~4595 çevrim) +386DX 25 MHz (~4595 çevrim) . :MENU:cpu386-33 -386DX 33MHz (~6075 çevrim) +386DX 33 MHz (~6075 çevrim) . :MENU:cpu486-33 -486DX 33MHz (~12010 çevrim) +486DX 33 MHz (~12010 çevrim) . :MENU:cpu486-66 -486DX2 66MHz (~23880 çevrim) +486DX2 66 MHz (~23880 çevrim) . :MENU:cpu486-100 -486DX4 100MHz (~33445 çevrim) +486DX4 100 MHz (~33445 çevrim) . :MENU:cpu486-133 -486DX5 133MHz (~47810 çevrim) +486DX5 133 MHz (~47810 çevrim) . :MENU:cpu586-60 -Pentium 60MHz (~31545 çevrim) +Pentium 60 MHz (~31545 çevrim) . :MENU:cpu586-66 -Pentium 66MHz (~35620 çevrim) +Pentium 66 MHz (~35620 çevrim) . :MENU:cpu586-75 -Pentium 75MHz (~43500 çevrim) +Pentium 75 MHz (~43500 çevrim) . :MENU:cpu586-90 -Pentium 90MHz (~52000 çevrim) +Pentium 90 MHz (~52000 çevrim) . :MENU:cpu586-100 -Pentium 100MHz (~60000 çevrim) +Pentium 100 MHz (~60000 çevrim) . :MENU:cpu586-120 -Pentium 120MHz (~74000 çevrim) +Pentium 120 MHz (~74000 çevrim) . :MENU:cpu586-133 -Pentium 133MHz (~80000 çevrim) +Pentium 133 MHz (~80000 çevrim) . :MENU:cpu586-166 -Pentium 166MHz MMX (~97240 çevrim) +Pentium 166 MHz MMX (~97240 çevrim) . :MENU:cpuak6-166 -AMD K6 166MHz (~110000 çevrim) +AMD K6 166 MHz (~110000 çevrim) . :MENU:cpuak6-200 -AMD K6 200MHz (~130000 çevrim) +AMD K6 200 MHz (~130000 çevrim) . :MENU:cpuak6-300 -AMD K6-2 300MHz (~193000 çevrim) +AMD K6-2 300 MHz (~193000 çevrim) . :MENU:cpuath-600 -AMD Athlon 600MHz (~306000 çevrim) +AMD Athlon 600 MHz (~306000 çevrim) . :MENU:cpu686-866 -Pentium III 866MHz EB (~407000 çevrim) +Pentium III 866 MHz EB (~407000 çevrim) . :MENU:VideoMenu Video . :MENU:VideoFrameskipMenu -Çerçeve atlama +Kare atla . :MENU:frameskip_0 Kapalı . :MENU:frameskip_1 -1 çerçeve +1 kare . :MENU:frameskip_2 -2 çerçeve +2 kare . :MENU:frameskip_3 -3 çerçeve +3 kare . :MENU:frameskip_4 -4 çerçeve +4 kare . :MENU:frameskip_5 -5 çerçeve +5 kare . :MENU:frameskip_6 -6 çerçeve +6 kare . :MENU:frameskip_7 -7 çerçeve +7 kare . :MENU:frameskip_8 -8 çerçeve +8 kare . :MENU:frameskip_9 -9 çerçeve +9 kare . :MENU:frameskip_10 -10 çerçeve +10 kare . :MENU:VideoRatioMenu -en boy oranı +En-boy oranı . :MENU:video_ratio_1_1 1:1 @@ -2641,28 +2656,28 @@ en boy oranı 18:10 . :MENU:video_ratio_original -orijinal oran +Özgün oran . :MENU:video_ratio_set Oranı ayarla . :MENU:VideoPreventCaptureMenu -Screen capture control +Ekran yakalama denetimi . :MENU:prevcap_none -Allow +İzin ver . :MENU:prevcap_blank -Show as blank +Boş olarak göster . :MENU:prevcap_invisible -Make invisible +Görünmez yap . :MENU:VideoScalerMenu Ölçekleyici . :MENU:scaler_set_none -Hiçbiri +Yok . :MENU:scaler_set_normal2x Normal 2X @@ -2749,13 +2764,13 @@ xBRZ xBRZ İkidoğrulu . :MENU:center_window -Center window +Pencereyi ortala . :MENU:set_titletext Başlık çubuğu metnini ayarla... . :MENU:set_transparency -Şeffaflığı ayarla... +Saydamlığı ayarla... . :MENU:refresh_rate Yenileme hızını ayarla... @@ -2782,7 +2797,7 @@ OpenGL mükemmel TrueType yazıtipi . :MENU:output_gamelink -Game Link +Oyun bağlantısı . :MENU:doublescan Çift tarama @@ -2992,7 +3007,7 @@ Ses karıştırıcısı düzeyini göster Sound Blaster yapılandırmasını göster . :MENU:midi_info -MIDI aygıt yapılandırmasını göster +MIDI/OPL aygıt yapılandırmasını göster . :MENU:DOSMenu DOS @@ -3052,10 +3067,10 @@ Uzun dosya adı öykünmesini devre dışı bırak PC-98 PIT ana saat . :MENU:dos_pc98_pit_4mhz -4MHz/8MHz PIT ana saat +4 MHz/8 MHz PIT ana saat . :MENU:dos_pc98_pit_5mhz -5MHz/10MHz PIT ana saat +5 MHz/10 MHz PIT ana saat . :MENU:DOSEMSMenu Genişletilmiş bellek (EMS) @@ -3112,7 +3127,7 @@ MPEG-TS + H.264 Kaydetme/yükleme seçenekleri . :MENU:saveslotmenu -Kayıt slotu seç +Kayıt yuvası seç . :MENU:enable_autosave Kendiliğinden durum kaydetmesini etkinleştir @@ -3124,7 +3139,7 @@ Durum kaydedilirken bildirim yapma Durum yüklenirken uyarı verme . :MENU:removestate -Slottaki durumu kaldır +Yuvadaki durumu kaldır . :MENU:refreshslot Ekran durumunu yenile @@ -3133,7 +3148,7 @@ Ekran durumunu yenile Son kendiliğinden kaydedilen slotu seç . :MENU:usesavefile -Slota kaydetme yerine dosyaya kaydetme kullan +Yuvaya kaydetme yerine dosyaya kaydetme kullan . :MENU:autosavecfg Kendiliğinden kaydetme ayarları... @@ -3235,7 +3250,7 @@ DOSBox-X hakkında Günlükleme konsolunu göster . :MENU:clear_console -Clear logging console +Günlükleme konsolunu temizle . :MENU:disable_logging Günlük çıkışını devre dışı bırak @@ -3262,13 +3277,13 @@ Hata ayıklayıcı seçeneğil: Normal kipte çalış Hata ayıklayıcı seçeneğil: İzlemeyi çalıştır . :MENU:video_debug_overlay -Video debug overlay +Video hata ayıklama bindirmesi . :MENU:HelpCommandMenu DOS komutları . :MENU:DebugMenu -Hata Ayıklama +Hata ayıkla . :MENU:HelpDebugMenu Günlükleme konsolu @@ -3346,7 +3361,7 @@ MIDI çıktısı kaydet FM (OPL) çıktısı kaydet . :MENU:mapper_capnetrf -Record network traffic +Ağ trafiğini kaydet . :MENU:mapper_video Videoyu AVI olarak kaydet @@ -3355,7 +3370,7 @@ Videoyu AVI olarak kaydet Ekran görüntüsü al . :MENU:mapper_rawscrshot -Take raw screenshot +Ham ekran görüntüsü al . :MENU:mapper_volup Ses düzeyini artır @@ -3499,7 +3514,7 @@ DOS ekranındaki tüm metni kopyala DOS pano aygıt erişimini etkinleştir . :MENU:clipboard_dosapi -Uygulamalar için DOS pano API'ını etkinleştir +Uygulamalar için DOS pano API'sini etkinleştir . :MENU:clipboard_biospaste Pano yapıştırması için BIOS işlevini kullan @@ -3607,7 +3622,7 @@ IDE disk veya CD durumunu göster ABD klavye dizilimi kullan . :MAPPER:capnetrf -Record Network traffic +Ağ trafiğini kaydet . :MAPPER:caprawopl FM/OPL çıktısı kaydet @@ -3693,3 +3708,858 @@ CPU: Yalın çekirdek :MAPPER:togmenu Menü çubuğunu aç/kapa . +:PROGRAM_FLAGSAVE_UNFLAGALL +Tüm dosyaların bayrağı kaydedilmemeleri için kaldırıldı. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +%s dosyasının bayrağı kaydedilmemesi için kaldırıldı. + +. +:PROGRAM_FLAGSAVE_FLAGGED +Dosya halihazırda kaydedilmesi için bayraklandı - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Kaydetme için pek fazla dosya bayraklanması gerekiyor. + +. +:PROGRAM_FLAGSAVE_SAVED +%s dosyası kaydedilmesi için bayraklandı + +. +:PROGRAM_FLAGSAVE_LIST +Kaydedilmeleri için bayraklanan dosyalar: +. +:PROGRAM_FLAGSAVE_HLP +Durumu kaydet özelliği için dosyaları imler veya bayrak koyar. + +FLAGSAVE [dosya(lar) [/F] [/R]] [/U] + + dosya(lar) Kayıt için bir veya daha fazla dosyaya bayrak koyar. + /F Bulunamasalar bile dosyalara bayrak koymayı zorlar. + /R Belirtilen dosyalardan bayrakları kaldırır. + /U Tüm bayrak koyulan dosyalardan bayrakları kaldırır. + +Bayrak koyulan dosyaları listelemek için parametresiz FLAGSAVE yazın. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh kancası ayarlanmamış. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh kancası halihazırda ayarlı. + +. +:PROGRAM_INT2FDBG_HELP +Hata ayıklama amaçlı olarak INT 2Fh kancalarını kurar. + +INT2FDBG [seçenek] + /I Kancayı kurar + +Hata ayıklama bilgisi için çağrı zincirinin en üstüne INT 2Fh kancasını kurar. + +Şu anki kanca durumunu görmek için parametresiz INT2FDBG yazın. +. +:PROGRAM_SET80x25 +80 x 25 metin kipine geçer. +. +:PROGRAM_SET80x43 +80 x 43 metin kipine geçer. +. +:PROGRAM_SET80x50 +80 x 50 metin kipine geçer. +. +:PROGRAM_SET80x60 +80 x 60 metin kipine geçer. +. +:PROGRAM_SET132x25 +132 x 25 metin kipine geçer. +. +:PROGRAM_SET132x43 +132 x 43 metin kipine geçer. +. +:PROGRAM_SET132x50 +132 x 50 metin kipine geçer. +. +:PROGRAM_SET132x60 +132 x 60 metin kipine geçer. +. +:PROGRAM_RESCAN_HELP +Önbellekleri temizleyerek makinedeki bağlı sürücüleri değişiklikler için tarar. + +RESCAN [/A] [/Q] +RESCAN [sürücü:] [/Q] + + [/A] Tüm sürücüleri yeniden tara + [/Q] Sessiz kipi etkinleştir + [sürücü:] Yeniden taranacak sürücü + +Geçerli sürücüyü yeniden taramak için parametresiz RESCAN yazın. + +. +:PROGRAM_CFGTOOL_HELP +DOSBox-X'in grafiksel yapılandırma aracını başlatır. + +CFGTOOL + +Not: Komut satırı yapılandırması için ayrıca CONFIG komutunu kullanabilirsiniz. +. +:PROGRAM_IMGSWAP_HELP +Disket, sabit ve optik sürücü kalıplarını takas eder. + +←[32;1mIMGSWAP←[0m ←[37;1mdrive←[0m ←[36;1m[position]←[0m + ←[37;1msürücü←[0m Kalıbın takas edileceği sürücü harfi. + ←[36;1m[konum]←[0m Takas edilecek disk konumu. +. +:PROGRAM_INTRO_HELP +DOSBox-X'e bir tam ekran giriş kılavuzu. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS disk indeksine atalı bir kalıp yok. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Geçersiz bağlantı numarası. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Geçersiz fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Geçersiz boyut parametresi. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +%d sürücü numarası bağlı değil. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Geçersiz IMGMOUNT bağlantı kesme kullanımı. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Geçersiz sürücü harfi. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Bölüntüler, standart INT 13h sabit disk ayrımı ile çakıştıklarında bağlanamaz. +Bağlamak için farklı bir sürücü harfi seçin. +. +:PROGRAM_ELTORITO_LETTER +El Torito öykünmesi düzgün bir CD-ROM sürücü harfi gerektirir. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +Belirtilen El Torito CD-ROM sürücüsü halihazırda CD-ROM dıyı bir aygıt olarak +var. + +:PROGRAM_ELTORITO_NOT_CDDRIVE +Belirtilen El Torito CD-ROM sürücüsü aslında bir CD-ROM sürücüsü değil. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito öykünmesi bu sefer -t disketi ile kullanılmalı. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM önyükleme kaydı bulunamadı. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito girdileri okunabilir değil. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +El Torito önyüklenebilir disketi bulunamadı. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Önyüklenebilir bölüm bulunamadı. +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito önyükleme dilimi okunabilir değil. +. +:PROGRAM_IMGMAKE_ALIGNMENT +Geçersiz hizalama +. +:PROGRAM_IMGMAKE_PARTOFS +Geçersiz -partofs +. +:PROGRAM_IMGMAKE_FAT +Geçersiz -fat seçeneği. 12, 16 veya 32 olmalıdır. +. +:PROGRAM_IMGMAKE_FATCOPIES +Geçersiz -fatcopies seçeneği +. +:PROGRAM_IMGMAKE_SPC +Geçersiz -spc seçeneği, erim dışında +. +:PROGRAM_IMGMAKE_SPC2 +Geçersiz -spc seçeneği, 2'nin bir üssü olmalı +. +:PROGRAM_IMGMAKE_ROOTDIR +Geçersiz -rootdir seçeneği +. +PROGRAM_IMGMAKE_BOOTSECT +Geçersiz önyükleme dilimi konumu +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Düzgünlük denetimi başarısız: Disk bölümü büyüklüğü hizalı değil +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Düzgünlük denetimi başarısız: FAT tabloları hizalı değil +. +:PROGRAM_IMGMAKE_SECTPERFAT +Hata: Üretilen dosya sisteminde FAT başına 256 dilimden fazla var ve FAT32 değil +. +:PROGRAM_IMGMAKE_VOLSIZE +Düzgünlük denetimi başarısız: Disk bölümü büyüklüğü hizalı değil +. +:PROGRAM_IMGMAKE_CLUSTERS +Hata: Üretilen dosya sisteminde parametrelere göre pek az küme var +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Uyarı: Küme boyutu verilen disk bölümü büyüklüğüne göre pek yüksek. + Daha küçük bir dilim sayısı bildiriliyor. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Düzgünlük denetimi başarısız: İlk küme hizalanmamış +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +UYARI: 64 KB'den büyük küme boyutları MS-DOS ve SCANDISK ile uyumlu değildir +. +:PROGRAM_BOOT_UNSUPPORTED +Desteklenmeyen önyükleme kipi +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +Var olan bindirme yenisiyle değiştirildi. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS tutacı %u: Boşaltılamıyor +. +:PROGRAM_LOADFIX_XMS_FREE +XMS tutacı %u: Boşaltılamıyor +. +:PROGRAM_LOADFIX_EMS_ALLOC +Ayrılan EMS bloku (%u KB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +EMS bloku ayrılamıyor +. +PROGRAM_LOADFIX_NOEMS +EMS etkin değil +. +:PROGRAM_LOADFIX_XMS_ALLOC +Ayrılan XMS bloku (%u KB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +XML bloku ayrılamıyor +. +:PROGRAM_LOADFIX_NOXMS +XMS etkin değil +. +:PROGRAM_LOADFIX_NOALLOC +En düşük MCB 64 KB'den yüksek, bir şey ayrılmadı +. +:PROGRAM_BOOT_SWAP_ALREADY +Birden çok disk kalıbı belirtildi ve başka bir sürücü halihazırda takas +listesinde kayıtlı +. +:PROGRAM_BOOT_NOT_SPECIFIED +Belirtilen kalıp yok +. +:PROGRAM_BOOT_IS_PC88 +D88 kalıbı PC-88'i hedefliyor gibi görünüyor ve önyüklenemez. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Bayt/dilim pek büyük +. +:PROGRAM_BOOT_DRIVE_READERROR +Sürücü okunurken hata +. +:PROGRAM_START_HELP_WIN +Belirli bir komutu veya programı çalıştırmak için ayrı bir pencere başlatır. + +START [+|-|_] komut [argümanlar] + + [+|-|_]: Programı büyüt/küçült/gizle. + /MAX, /MIN, /HID seçenekleri de kabul edilir. + komut: Başlatılacak komut, program veya dosya. + argümanlar: Uygulamaya geçirilecek argümanlar. + +START, bu komutları çalıştırmak için Windows komut istemini kendiliğinden açar + ve çıkmadan önce bir düğme basımını bekler ("startincon" seçeneği ile): +%s + +Not: Bu komutta belirtilen yol, ana makine sistemindeki yoldur. +. +:PROGRAM_START_HELP +Belirli bir programı veya komutu çalıştırmak için ayrı bir pencere başlatır. + +START /OPEN dosya +START komut [argümanlar] + + /OPEN: İlişkili programla dosya veya URL açmak için kullanın. + dosya: İlişkili programla açılacak dosya veya URL. + komut: Başlatılacak veya çalıştırılacak komut veya program. + argümanlar: Uygulamaya geçirilecek argümanlar. + +Not: Bu komutta belirtilen yol, ana makine sistemindeki yoldur. +. +:PROGRAM_START_COMPLETED +Komut yürütmesi tamamlandı. +. +:PROGRAM_START_COMMAND +%s başlatılıyor... +. +:PROGRAM_START_CTRLC +(Hemen çıkmak için Ctrl+C kısayolunu kullanın) +. +:PROGRAM_START_HOST_ERROR +Hata: START, geçerli makinenizde çalıştırmak üzere uygulamayı başlatamıyor. +. +:PROGRAM_START_LAUNCH_ERROR +Hata: START, uygulamayı başlatamadı. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +El Torito önyüklenebilir CD'lerinden disketleri bağlarken dosyaları belirtme +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +RAM sürücülerini bağlarken dosyaları belirtme +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +Dilim boyutu 512 bayttan daha büyük ve %lu baytlık kalıp kümesini kalansız + bölmelidir. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +"%s" açılamıyor +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 kalıbı "%s" desteklenmiyor +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Geometri algılanamıyor +. +:PROGRAM_IMGMOUNT_DOS_VERSION +Bu kalıbı bağlamak için bildirilen DOS sürümü %u.%u veya daha yüksek olmalıdır. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Disket büyüklüğü tanınamadı +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +Çoklu kalıp verildi ve başka sürücü halihazırda birden çok kalıp kullanıyor. +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Bu sürücü için birden çok disk kalıbı desteklenmiyor. +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +Disket konumuna sabit disk bağlanamıyor. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +Sabit disk konumuna disket bağlanamıyor. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito önyüklenebilir CD'si: -fs ISO bağlama desteklenmiyor +. +:PROGRAM_MODE_STATUS +Aygıt CON'u için durum: +---------------------- +Sütun = %d +Satır = %d +. +:PROGRAM_MODE_NOTSUPPORTED + +Bu aygıtta kod sayfası işlemi desteklenmiyor +. +:PROGRAM_MODE_RATE_DELAY +Hız ve gecikme birlikte belirtilmelidir +. +:PROGRAM_UTF8_HELP +UTF-8 metni geçerli kod sayfasında görüntülemek üzere dönüştürür. + +UTF8 < [sürücü:][yol]dosya-adı +komut-adı | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +Girdi metni bulunamadı. +. +:PROGRAM_UTF8_INVALIDCP +Metin dönüşümü için geçersiz kod sayfası. +. +:PROGRAM_UTF8_NOT_UTF8 +Girdi metni UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +Metin dönüştürme sırasında bir hata oluştu. +. +:PROGRAM_UTF16_HELP +UTF-16 metni geçerli kod sayfasında görüntülemek üzere dönüştürür. + +UTF16 [/BE|/LE] < [sürücü:][yol]dosya-adı +komut-adı | UTF16 [/BE|/LE] + + /BE UTF-16 büyük son haneli kullan + /LE UTF-16 küçük son haneli kullan +. +:PROGRAM_VTEXT_HELP +DOS-V öykünmesi için V-text kipini değiştirir. + +VTEXT [kip] + + [kip]; V-text yok, V-text 1 ve V-text 2 dönüşümü için 0, 1, 2 olabilir. + +Geçerli V-text kipi durumunu görmek için parametresiz VTEXT yazın. +. +:PROGRAM_NMITEST_HELP +Bir maskelenemez yarıda kesme üretir (NMI). + +NMITEST + +Not: Bu, yarıda kesme işleyicisini sınayan bir hata ayıklama aracıdır. +. +:PROGRAM_NMITEST_GENERATE_NMI +Maskelenemez yarıda kesme (NMI) üretiliyor... +. +:PROGRAM_CAPMOUSE_HELP +DOSBox-X içinde fareyi yakalar veya bırakır. + +CAPMOUSE [/C|/R] + + /C Fareyi yakala + /R Fareyi bırak +. +:PROGRAM_CAPMOUSE_MOUSE +Fare +. +:PROGRAM_CAPMOUSE_CURRENTLY +şu anda +. +:PROGRAM_CAPMOUSE_CAPTURED +yakalandı +. +:PROGRAM_CAPMOUSE_RELEASED +bırakıldı +. +:PROGRAM_AUTOTYPE_HELP +Çalışan bir DOS programına önceden ayarlanmış bir klavye girişi yapar. + +AUTOTYPE [-list] [-w WAIT] [-p PACE] düğme_1 [düğme_2 [...]] + +Kullanım: + -list: Tüm kullanılabilir düğme adlarını yazdırır. + -w SAN: Yazma başlamadan önceki bekleme saniyesi. Öntanımlı 2, en çok 30. + -p HIZ: Her bir düğme basımı arasındaki saniye. Öntanımlı yarım, en çok 10. + + Sekans, bir veya birden çok boşlukla ayrılmış düğmeden oluşur. + Kendiliğinden yazma SAN sonrası başlar ve her bir düğme HIZ ile girilir. "," + karakteri ek bir HIZ gecikmesi ekler. + +Bazı örnekler: + ←[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter←[0m + ←[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: Eşlemleyicide bir düğme bağıntısı yok +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: Sınır %s değeri %.2f ila %.2f arasında +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s değeri "%s", geçerli bir kayan noktalı değer değil +. +:PROGRAM_ADDKEY_HELP +Yapay düğme basımları üretir. + +ADDKEY [pmsan] [düğme] + +Örneğin, aşağıdaki komut, 1 saniye sonra ardından ENTER gelen bir "dir" yazar: + +ADDKEY p1000 d i r enter + +Çalışan bir DOS programına önceden ayarlanmış klavye girişleri yapmak için + bu komut yerine ayrıca AUTOTYPE programını kullanmayı da deneyebilirsiniz. +. +:PROGRAM_SETCOLOR_HELP +Metin kipi renk şeması ayarlarını görüntüler veya değiştirir. + +SETCOLOR [renk# [değer]] + +Örneğin: + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Renk #0 değerini belirtilen renk değerine değiştirir + + ←[32;1mSETCOLOR 7 -←[0m +Renk #7 değerini öntanımlı renk değerine döndürür + + ←[32;1mSETCOLOR 3 +←[0m +Renk #3 değerini önayar renk değerine döndürür + + ←[32;1mSETCOLOR MONO←[0m +Geçerli MONO durumunu görüntüler + +Geçerli arka ve ön plan renklerini değiştirmek için COLOR komutunu kullanın. +. +:PROGRAM_SETCOLOR_STATUS +MONO kipi durumu: %s (video kipi %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +etkin +. +:PROGRAM_SETCOLOR_INACTIVE +pasif +. +:PROGRAM_SETCOLOR_UNAVAILABLE +kullanılamıyor +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO kipi durumu => etkin (video kipi 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO kipi durumu => pasif (video kipi 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +MONO kipi değiştirilemedi +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +MONO için + veya - olmalı: %s +. +:PROGRAM_SETCOLOR_COLOR +Renk %d: (%d,%d,%d) veya #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Geçersiz renk adı - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Geçersiz renk değeri - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Geçerli video kipinde renk şemasını değiştirme desteklenmiyor. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Bilinmeyen boothax kipi +. +:PROGRAM_BOOT_SPECIFY_FILE +Önyüklenecek BIOS kalıbı belirtilmelidir +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +BIOS kalıbı açılamıyor +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Yüklenecek BIOS dosyası belirtilmelidir. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Bir dosya açılamıyor +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS dosyası pek büyük +. +:PROGRAM_DELTREE_HELP +Bir dizini ve içindeki tüm alt dizinleri ve dosyaları siler. + +Bir veya birden çok dosyayı veya dizini silmek için: +DELTREE [/Y] [sürücü:]yol [[sürücü:]yol[...]] + + /Y Alt dizini silmek istediğinize dair olan ek onayı susturur.. + [sürücü:]yol Silmek istediğiniz dizinin adını belirtir. + +Not: DELTREE komutunu dikkatlice kullanın. Belirtilen dizindeki her bir dosya + ve alt dizin silinecektir. + +. +:PROGRAM_TREE_HELP +Bir sürücünün veya yolun dizin yapısını grafiksel olarak görüntüler. + +TREE [sürücü:][yol] [/F] [/A] + + /F Her bir dizindeki dosyaların adını görüntüler. + /A Genişletilmiş karakterler yerine ASCII kullanır. + +. +:PROGRAM_TITLE_HELP +DOSBox-X penceresi için olan pencere başlığını ayarlar. + +TITLE [dizi] + + dizi DOSBox-X penceresi için olan başlığı ayarlar. + +. +:PROGRAM_COLOR_HELP +Öntanımlı konsol ön ve arka plan renklerini ayarlar. + +COLOR [öznitelik] + + öznitelik Konsol çıktısının renk özniteliğini belirtir. + +Renk öznitelikleri İKİ adet onaltılık rakamla belirtilir - ilki arka plana, + ikincisi de ön plana aittir. Her bir rakam, aşağıdaki değerlerden biri + olabilir: + + 0 = Siyah 8 = Gri + 1 = Mavi 9 = Açık Mavi + 2 = Yeşil A = Açık Yeşil + 3 = Camgöbeği B = Açık Camgöbeği + 4 = Kırmızı C = Açık Kırmızı + 5 = Mor D = Açık Mor + 6 = Sarı E = Açık Sarı + 7 = Beyaz F = Parlak Beyaz + +Bir argüman verilmemişse bu komut özgün rengi geri yükler. + +COLOR komutunu aynı ön ve arka plan rengi ile yürütmeye çalışırsanız COLOR + komutu ERRORLEVEL'i 1 olarak ayarlar. + +Örnek: "COLOR fc", parlak beyazın üzerine açık kırmızı üretir. + +. +:PROGRAM_SWITCH_LANG +Etkin kod sayfasını %d olarak değiştirdini. +Bu kod sayfası için olan %s dil dosyasını yüklemek istiyor musunuz? +. +:PROGRAM_ALREADY_MOUNTED +%s: sürücüsü halihazırda bağlanmış. Önce bağlantısını kesip yeniden deneyin. +. +:PROGRAM_DRIVE_NO_EXIST +Sistemde %s: sürücüsü yok. +. +:PROGRAM_DRIVE_WARN +DOSBox-X'e gerçekten %s sürücünüz %s erişimini vermek istiyor musunuz? +. +:DRIVE_TYPE_FLOPPY +disket +. +:DRIVE_TYPE_REMOVABLE +kaldırılabilir +. +:DRIVE_TYPE_NETWORK +ağ + +:DRIVE_TYPE_HARD +sabit +. +:DRIVE_TYPE_LOCAL +yerel +. +:DRIVE_TYPE_CDROM +CD-ROM +. +:PROGRAM_CDDRIVE_WARN +CD sürücüsü %s, şu anda şu kalıpla bağlanmış: + +%s + +CD kalıbını şimdi değiştirmek istiyor musunuz? +. +:PROGRAM_CDMOUNT_ERROR +Seçili CD kalıbı yüklenemedi. +. +:ELTORITO_IMAGE +El Torito disket kalıbı +. +:RAM_FLOPPY_IMAGE +RAM disket kalıbı +. +:PROGRAM_FLOPPY_WARN +Disket sürücüsü %s, şu anda şu kalıpla bağlanmış: + +%s + +Disket sürücüsü kalıbını şimdi değiştirmek istiyor musunuz? +. +:PROGRAM_FLOPPYMOUNT_ERROR +Seçili disket kalıbıyla bağlama yapılamadı. +. +:PROGRAM_MOUNT_MORE_IMAGES +Daha fazla kalıp dosyası bağlamak istiyor musunuz? +. +:PROGRAM_MOUNT_PATH_TOOLONG +Bağlanacak dosyalar için olan yol pek uzun. +. +:PROGRAM_BOOT_FAILED +%s: sürücüsü önyüklenemedi. +. +:PROGRAM_MOUNT_FAILED +%s: sürücüsü bağlanamadı. +. +:PROGRAM_MOUNT_IMAGE +%s, %s: sürücüsüne bağlandı +%s %s +. +:ARCHIVE +arşiv +. +:DISK_IMAGE +disk kalıbı +. +:READONLY_MODE +Saltokunur kip +. +:PROGRAM_MOUNT_SELECT_DRIVE +%s: sürücüsünü %s olarak bağlamak üzere bir sürücü/dizin seçin +. +:PROGRAM_MOUNT_CDROM_SUPPORT +Bir dizini CD-ROM olarak bağlamak, sınırlı destek verir. +. +:PROGRAM_MOUNT_NOT_MOUNTED +%s: sürücüsü henüz bağlı değil. +. +:PROGRAM_PROGRAM_ALREADY +Başka bir program halihazırda çalışıyor. +. +:PROGRAM_SHELL_ALREADY +Başka bir kabuk halihazırda çalışıyor. +. +:PROGRAM_MOUNT_SUCCESS +%s sürücüsü şuraya bağlandı: +%s +. +:PROGRAM_WARN_QUICKLAUNCH +Tez başlat, DOSBox-X'te kendiliğinden C sürücüsünü bağlar. +C sürücüsü halihazırda bağlanmış. Sürdürmek istiyor musunuz? +. +:PROGRAM_NO_EXECUTABLE +Yürütülebilir dosya bulunamadı. +. +:PROGRAM_EXEC_FINISHED +Program yürütmeyi bitirdi. %s sürücüsünün bağlantısını kesmek istiyor musunuz? +. +:PROGRAM_ASK_CHCP +%c: sürücüsüne düzgünce erişmek için %d kod sayfasının kurulu olması gerekir. + +Geçerli kod sayfasını %d olarak değiştirmek istiyor musunuz? +. +:PROGRAM_CHANGING_CODEPAGE +Kod sayfası değiştiriliyor... +. +:IMAGEMOUNT_CHANGE_DOSVER +Bu tür bir disk kalıbını bağlamak için bildirilen DOS sürümünün %s veya daha + yüksek olması gerekir. Bildirilen DOS sürümünü kendiliğinden %s olarak + değiştirmek ve disk kalıbını bağlamak istiyor musunuz? +. +:MENU_DRIVE_NOTEXIST +Sürücü yok veya disk kalıbından bağlanmış. +. +:MENU_SAVE_IMAGE_FAILED +Disk kalıbı kaydedilemedi. +. +:MENU_JP_CPONLY +Bu işlev yalnızca Japonca kod sayfası (932) için kullanılabilir. +. +:MENU_CH_CPONLY +Bu işlev yalnızca Çince kod sayfaları (936, 950, or 951) için kullanılabilir. +. +:MENU_GLIDE_ERROR +Glide geçişi etkinleştirilemiyor. Glide sarmalayıcısı kurulumunu denetleyin. +. +:MENU_HIGH_INTENSITY_ERROR +Geçerli video kipi için yüksek yoğunluk desteklenmiyor. +. +:MENU_SAVE_FILE_ERROR +Dosyaya kaydedilemiyor: %s +. +:MENU_INT2F_SUCCESS +INT 2Fh kancası başarıyla ayarlandı. +. +:MENU_INT2F_ALREADY_SET +INT 2Fh kancası halihazırda ayarlanmıştı. +. +:QUIT_DISABLED +Bununla DOSBox-X'ten çıkma desteklenmiyor. +. +:QUIT_CONFIRM +Bu, DOSBox-X'ten çıkacaktır. +Emin misiniz? +. +:QUIT_GUEST_DISABLED +Bir misafir sistem çalışırken DOSBox-X'ten çıkamazsınız. +. +:QUIT_GUEST_CONFIRM +Şu anda bir misafir sistem çalıştırıyorsunuz. +Yine de çıkmak istediğinizden emin misiniz? +. +:QUIT_FILE_OPEN_DISABLED +Bir veya birden çok dosya açıkken DOSBox-X'ten çıkamazsınız. +. +:QUIT_FILE_OPEN_CONFIRM +Şu anda DOSBox-X'ten çıkmak güvenli olmayabilir; çünkü bir veya daha fazla + dosya açık. +Yine de çıkmak istediğinizden emin misiniz? +. +:QUIT_PROGRAM_DISABLED +Bir program veya oyun açıkken DOSBox-X'ten çıkamazsınız. +. +:QUIT_PROGRAM_CONFIRM +Şu anda bir program veya oyun çalıştırıyorsunuz. +Yine de çıkmak istediğinizden emin misiniz?? +. +:LANG_JP_INCOMPATIBLE +Japonca PC-98 veya JEGA/AX sistemiyle uyumsuz bir dil dosyası belirttiniz. + +Bu makine türü için bu dil dosyasını kullanmak istediğinizden emin misiniz? +. +:LANG_DOSV_INCOMPATIBLE +Geçerli DOS/V ile uyumsuz bir kod sayfası kullanan bir dil dosyası belirttiniz. + +Bu makine türü için bu dil dosyasını kullanmak istediğinizden emin misiniz? +. +:LANG_CHANGE_CP +Belirtilen dil dosyası %d kod sayfasını kullanıyor. Bu kod sayfasına geçiş + yapmak istiyor musunuz? +. +:SCALER_LOAD_WARN +Bu ölçekleyici düzgünce çalışmayabilir veya istenmeyen sonuçlar doğurabilir: + +%s + +Ölçekleyiciyi yüklemeyi zorlamak istiyor musunuz? +. +:PIXEL_SHADER_WARN +Bu piksel gölgelendiricisine gerek olmayabilir veya istenmeyen sonuçlar + doğurabilir: + +%s + +Piksel gölgelendiricisini yine de yüklemek istiyor musunuz? + +(Piksel gölgelendiricisi ayarına "forced" iliştirerek bu iletiyi görmeden + gölgelendiriciyi yüklemeyi zorlayabilirsiniz.) +. +:PIXEL_SHADER_LOADED +Yüklenen piksel gölgelendiricisi - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +Eşlem düzenleyicisi şu anda kullanılamıyor. +. +:OPL_REC_COMPLETED +Ham OPL çıktısı dosyaya kaydedildi: + +%s +. +:OPL_CAPTURE_FAILED +Ham OPL çıktısı yakalanamıyor; çünkü ESFM yerel kipi şu anda ham OPL çıktısını + desteklemeyen geçerli uygulama tarafından kullanılıyor. +. +:TTF_DBCS_ONLY +Bu işlev yalnızca Çince/Japonca/Korece kod sayfaları için kullanılabilirdir. +. +:SAVE_FAILED +Geçerli durum kaydedilemedi. +. +:SAVE_CORRUPTED +Kaydedilen durum hasarlı! Program çalışmayabilir. +. +:SAVE_SCREENSHOT +Ekran görüntüsü dosyaya kaydedildi: + +%s +. +:HELP_ABOUT_VERSION +DOSBox-X sürüm %s (%s %s %s bit)%s +. +:HELP_ABOUT_UPDATED +Yapım zamanı: %s +. +:HELP_ABOUT_COPYRIGHT +Telif hakkı %s-%s %s +. +:HELP_ABOUT_MAINTAINER +Proje bakımcısı: %s +. +:HELP_ABOUT_HOMEPAGE +DOSBox-X ana sayfası: %s diff --git a/contrib/translations/zh/zh_CN.lng b/contrib/translations/zh/zh_CN.lng index 828ba664e83..c69009ff4f3 100644 --- a/contrib/translations/zh/zh_CN.lng +++ b/contrib/translations/zh/zh_CN.lng @@ -1,10 +1,11 @@ :DOSBOX-X:LANGUAGE:Simplified Chinese :DOSBOX-X:CODEPAGE:936 -:DOSBOX-X:VERSION:2025.02.01 -:DOSBOX-X:REMARK:建议将国家和代码页设为 86,936 并搭配中文字体; 或使用 chs 或 cn 中文 DOS/V 模式以直接支持中文显示和打印 +:DOSBOX-X:VERSION:2026.05.02 +:DOSBOX-X:REMARK:配置完中文语言与字体后,就可以直接支持中文显示和打印。国家和代码页选项可以留空,或设为 “86,936”。 :AUTOEXEC_CONFIGFILE_HELP Lines in this section will be run at startup. You can put your MOUNT lines here. + . :CONFIGFILE_INTRO # This is the configuration file for DOSBox-X %s. (Please use the latest version of DOSBox-X) @@ -148,7 +149,7 @@ DOS 命令帮助 声卡配置信息 . :CURRENT_MIDICONFIG -MIDI 设备配置信息 +MIDI/OPL 设备配置信息 . :CREATE_IMAGE 创建空白磁盘镜像 @@ -2394,6 +2395,9 @@ To adjust the emulated CPU speed, use host+Plus and host+Minus[3 :MENU:mapper_shutdown 退出 DOSBox-X . +:MENU:mapper_capkeyboard +Capture keyboard +. :MENU:mapper_capmouse 捕获鼠标 . @@ -2962,7 +2966,7 @@ Glide 直通 显示声卡配置 . :MENU:midi_info -显示 MIDI 设备配置 +显示 MIDI/OPL 设备配置 . :MENU:DOSMenu DOS @@ -3657,3 +3661,645 @@ CPU: 简单内核 :MAPPER:togmenu 打开或关闭下拉菜单 . +:PROGRAM_FLAGSAVE_UNFLAGALL +All files unflagged for saving. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +File %s unflagged for saving. + +. +:PROGRAM_FLAGSAVE_FLAGGED +File already flagged for saving - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +Too many files to flag for saving. + +. +:PROGRAM_FLAGSAVE_SAVED +File %s flagged for saving + +. +:PROGRAM_FLAGSAVE_LIST +Files flagged for saving: +. +:PROGRAM_FLAGSAVE_HLP +Marks or flags files to be saved for the save state feature. + +FLAGSAVE [file(s) [/F] [/R]] [/U] + + file(s) Specifies one or more files to be flagged for saving. + /F Forces to flag the file(s) even if they are not found. + /R Removes flags from the specified file(s). + /U Removes flags from all flagged files. + +Type FLAGSAVE without a parameter to list flagged files. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh hook has not been set. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh hook has already been set. + +. +:PROGRAM_INT2FDBG_HELP +Hooks INT 2Fh for debugging purposes. + +INT2FDBG [option] + /I Installs hook + +It will hook INT 2Fh at the top of the call chain for debugging information. + +Type INT2FDBG without a parameter to show the current hook status. +. +:PROGRAM_SET80x25 +Changes to 80x25 text mode. +. +:PROGRAM_SET80x43 +Changes to 80x43 text mode. +. +:PROGRAM_SET80x50 +Changes to 80x50 text mode. +. +:PROGRAM_SET80x60 +Changes to 80x60 text mode. +. +:PROGRAM_SET132x25 +Changes to 132x25 text mode. +. +:PROGRAM_SET132x43 +Changes to 132x43 text mode. +. +:PROGRAM_SET132x50 +Changes to 132x50 text mode. +. +:PROGRAM_SET132x60 +Changes to 132x60 text mode. +. +:PROGRAM_RESCAN_HELP +Rescans for changes on mounted drives made on the host by clearing caches. + +RESCAN [/A] [/Q] +RESCAN [drive:] [/Q] + + [/A] Rescan all drives + [/Q] Enable quiet mode + [drive:] The drive to rescan + +Type RESCAN with no parameters to rescan the current drive. + +. +:PROGRAM_CFGTOOL_HELP +Starts DOSBox-X's graphical configuration tool. + +CFGTOOL + +Note: You can also use CONFIG command for command-line configurations. +. +:PROGRAM_IMGSWAP_HELP +Swaps floppy, hard drive and optical disc images. + +←[32;1mIMGSWAP←[0m ←[37;1mdrive←[0m ←[36;1m[position]←[0m + ←[37;1mdrive←[0m Drive letter to swap the image. + ←[36;1m[position]←[0m Disk position to swap to. +. +:PROGRAM_INTRO_HELP +A full-screen introduction to DOSBox-X. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS disk index does not have an image assigned. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +Invalid mount number. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +Invalid fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +Invalid size parameter. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +Drive number %d is not mounted. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +Incorrect IMGMOUNT unmount usage. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +Invalid drive letter. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +Partitions cannot be mounted in conflict with the standard INT 13h hard disk +allotment. Choose a different drive letter to mount to. +. +:PROGRAM_ELTORITO_LETTER +El Torito emulation requires a proper CD-ROM drive letter. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +El Torito CD-ROM drive specified already exists as a non-CD-ROM device +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +El Torito CD-ROM drive specified is not actually a CD-ROM drive. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +El Torito emulation must be used with -t floppy at this time. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +El Torito CD-ROM boot record not found. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +El Torito entries unreadable. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +El Torito bootable floppy not found. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +Unable to locate bootable section +. +:PROGRAM_ELTORITO_BOOTSECTOR +El Torito boot sector unreadable +. +:PROGRAM_IMGMAKE_ALIGNMENT +Invalid alignment +. +:PROGRAM_IMGMAKE_PARTOFS +Invalid -partofs +. +:PROGRAM_IMGMAKE_FAT +Invalid -fat option. Must be 12, 16, or 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +Invalid -fatcopies option +. +:PROGRAM_IMGMAKE_SPC +Invalid -spc option, out of range +. +:PROGRAM_IMGMAKE_SPC2 +Invalid -spc option, must be a power of 2 +. +:PROGRAM_IMGMAKE_ROOTDIR +Invalid -rootdir option +. +PROGRAM_IMGMAKE_BOOTSECT +Invalid bootsector position +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_FAT_ALIGN +Sanity check failed: FAT tables not aligned +. +:PROGRAM_IMGMAKE_SECTPERFAT +Error: Generated filesystem has more than 256 sectors per FAT and is not FAT32 +. +:PROGRAM_IMGMAKE_VOLSIZE +Sanity check failed: Volume size not aligned +. +:PROGRAM_IMGMAKE_CLUSTERS +Error: Generated filesystem has too few clusters given the parameters +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +Warning: Cluster count is too high given the volume size. + Reporting a smaller sector count. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +Sanity check failed: First cluster not aligned +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +WARNING: Cluster sizes >= 64KB are not compatible with MS-DOS and SCANDISK +. +:PROGRAM_BOOT_UNSUPPORTED +Unsupported boot mode +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +Existing overlay has been replaced with new overlay. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS handle %u: unable to free +. +:PROGRAM_LOADFIX_XMS_FREE +XMS handle %u: unable to free +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +Unable to allocate EMS block +. +PROGRAM_LOADFIX_NOEMS +EMS not active +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS block allocated (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +Unable to allocate XMS block +. +:PROGRAM_LOADFIX_NOXMS +XMS not active +. +:PROGRAM_LOADFIX_NOALLOC +Lowest MCB is above 64KB, nothing allocated +. +:PROGRAM_BOOT_SWAP_ALREADY +Multiple disk images specified and another drive is already connected to the swap list +. +:PROGRAM_BOOT_NOT_SPECIFIED +No images specified +. +:PROGRAM_BOOT_IS_PC88 +The D88 image appears to target PC-88 and cannot be booted. +. +:PROGRAM_BOOT_BPS_TOOLARGE +Bytes/sector too large +. +:PROGRAM_BOOT_DRIVE_READERROR +Error reading drive +. +:PROGRAM_START_HELP_WIN +Starts a separate window to run a specified program or command. + +START [+|-|_] command [arguments] + + [+|-|_]: To maximize/minimize/hide the program. + The options /MAX, /MIN, /HID are also accepted. + command: The command, program or file to start. + arguments: Arguments to pass to the application. + +START opens the Windows command prompt automatically to run these commands +and wait for a key press before exiting (specified by "startincon" option): +%s + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_HELP +Starts a separate window to run a specified program or command. + +START /OPEN file +START command [arguments] + + /OPEN: To open a file or URL with the associated program. + file: The file or URL to open with the associated program. + command: The command or program to start or run. + arguments: Arguments to pass to the application. + +Note: The path specified in this command is the path on the host system. +. +:PROGRAM_START_COMPLETED +The command execution is completed. +. +:PROGRAM_START_COMMAND +Starting %s... +. +:PROGRAM_START_CTRLC +(Press Ctrl+C to exit immediately) +. +:PROGRAM_START_HOST_ERROR +Error: START cannot launch application to run on your current host system. +. +:PROGRAM_START_LAUNCH_ERROR +Error: START could not launch application. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +Do not specify files when mounting floppy drives from El Torito bootable CDs +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +Do not specify files when mounting RAM drives +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +Unable to open '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 image '%s' is not supported +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +Unable to detect geometry +. +:PROGRAM_IMGMOUNT_DOS_VERSION +Mounting this image file requires a reported DOS version of %u.%u or higher. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +Floppy size not recognized +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +Multiple images given and another drive already uses multiple images +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +Multiple disk images not supported for that drive +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +Cannot mount hard drive in floppy position. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +Cannot mount floppy in hard drive position. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito bootable CD: -fs iso mounting not supported +. +:PROGRAM_MODE_STATUS +Status for device CON: +---------------------- +Columns=%d +Lines=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +Code page operation not supported on this device +. +:PROGRAM_MODE_RATE_DELAY +Rate and delay must be specified together +. +:PROGRAM_UTF8_HELP +Converts UTF-8 text to view in the current code page. + +UTF8 < [drive:][path]filename +command-name | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +No input text found. +. +:PROGRAM_UTF8_INVALIDCP +Invalid code page for text conversion. +. +:PROGRAM_UTF8_NOT_UTF8 +The input text is UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +An error occurred during text conversion. +. +:PROGRAM_UTF16_HELP +Converts UTF-16 text to view in the current code page. + +UTF16 [/BE|/LE] < [drive:][path]filename +command-name | UTF16 [/BE|/LE] + + /BE Use UTF-16 Big Endian + /LE Use UTF-16 Little Endian +. +:PROGRAM_VTEXT_HELP +Changes V-text mode for the DOS/V emulation. + +VTEXT [mode] + + [mode] can be 0, 1, 2, for no V-text, V-text 1, and V-text 2 respectively. + +Type VTEXT without a parameter to show the current V-text mode status. +. +:PROGRAM_NMITEST_HELP +Generates a non-maskable interrupt (NMI). + +NMITEST + +Note: This is a debugging tool to test if the interrupt handler works properly. +. +:PROGRAM_NMITEST_GENERATE_NMI +Generating a non-maskable interrupt (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +Captures or releases the mouse inside DOSBox-X. + +CAPMOUSE [/C|/R] + + /C Capture the mouse + /R Release the mouse +. +:PROGRAM_CAPMOUSE_MOUSE +Mouse +. +:PROGRAM_CAPMOUSE_CURRENTLY +is currently +. +:PROGRAM_CAPMOUSE_CAPTURED +captured +. +:PROGRAM_CAPMOUSE_RELEASED +released +. +:PROGRAM_AUTOTYPE_HELP +Performs scripted keyboard entry into a running DOS program. + +AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]] + +Where: + -list: prints all available button names. + -w WAIT: seconds before typing begins. Two second default; max of 30. + -p PACE: seconds between each keystroke. Half-second default; max of 10. + + The sequence is comprised of one or more space-separated buttons. + Autotyping begins after WAIT seconds, and each button is entered + every PACE seconds. The , character inserts an extra PACE delay. + +Some examples: + ←[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter←[0m + ←[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter←[0m + ←[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter←[0m +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: The mapper has no key bindings +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: bounding %s value of %.2f to %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s value '%s' is not a valid floating point number +. +:PROGRAM_ADDKEY_HELP +Generates artificial keypresses. + +ADDKEY [pmsec] [key] + +For example, the command below types "dir" followed by ENTER after 1 second: + +ADDKEY p1000 d i r enter + +You could also try AUTOTYPE command instead of this command to perform +scripted keyboard entry into a running DOS program. +. +:PROGRAM_SETCOLOR_HELP +Views or changes the text-mode color scheme settings. + +SETCOLOR [color# [value]] + +For example: + + ←[32;1mSETCOLOR 0 (50,50,50)←[0m +Change Color #0 to the specified color value + + ←[32;1mSETCOLOR 7 -←[0m +Return Color #7 to the default color value + + ←[32;1mSETCOLOR 3 +←[0m +Return Color #3 to the preset color value + + ←[32;1mSETCOLOR MONO←[0m +Display current MONO mode status + +To change the current background and foreground colors, use COLOR command. +. +:PROGRAM_SETCOLOR_STATUS +MONO mode status: %s (video mode %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +active +. +:PROGRAM_SETCOLOR_INACTIVE +inactive +. +:PROGRAM_SETCOLOR_UNAVAILABLE +unavailable +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO mode status => active (video mode 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO mode status => inactive (video mode 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +Failed to change MONO mode +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +Must be + or - for MONO: %s +. +:PROGRAM_SETCOLOR_COLOR +Color %d: (%d,%d,%d) or #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +Invalid color number - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +Invalid color value - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +Changing color scheme is not supported for the current video mode. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +Unknown boothax mode +. +:PROGRAM_BOOT_SPECIFY_FILE +Must specify BIOS image to boot +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +Unable to open BIOS image +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +Must specify BIOS file to load. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +Can't open a file +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS File too large +. +:PROGRAM_DELTREE_HELP +Deletes a directory and all the subdirectories and files in it. + +To delete one or more files and directories: +DELTREE [/Y] [drive:]path [[drive:]path[...]] + + /Y Suppresses prompting to confirm you want to delete + the subdirectory. + [drive:]path Specifies the name of the directory you want to delete. + +Note: Use DELTREE cautiously. Every file and subdirectory within the +specified directory will be deleted. + +. +:PROGRAM_TREE_HELP +Graphically displays the directory structure of a drive or path. + +TREE [drive:][path] [/F] [/A] + + /F Displays the names of the files in each directory. + /A Uses ASCII instead of extended characters. + +. +:PROGRAM_TITLE_HELP +Sets the window title for the DOSBox-X window. + +TITLE [string] + + string Specifies the title for the DOSBox-X window. + +. +:PROGRAM_COLOR_HELP +Sets the default console foreground and background colors. + +COLOR [attr] + + attr Specifies color attribute of console output + +Color attributes are specified by TWO hex digits -- the first +corresponds to the background; the second to the foreground. +Each digit can be any of the following values: + + 0 = Black 8 = Gray + 1 = Blue 9 = Light Blue + 2 = Green A = Light Green + 3 = Aqua B = Light Aqua + 4 = Red C = Light Red + 5 = Purple D = Light Purple + 6 = Yellow E = Light Yellow + 7 = White F = Bright White + +If no argument is given, this command restores the original color. + +The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute +the COLOR command with a foreground and background color that are the same. + +Example: "COLOR fc" produces light red on bright white. + +. +:SCALER_LOAD_WARN +This scaler may not work properly or have undesired effect: + +%s + +Do you want to force load the scaler? +. +:PIXEL_SHADER_WARN +This pixel shader may be unneeded or have undesired effect: + +%s + +Do you want to load the pixel shader anyway? + +(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message) +. +:PIXEL_SHADER_LOADED +Loaded pixel shader - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +Mapper Editor is not currently available. +. +:OPL_REC_COMPLETED +Saved Raw OPL output to the file: + +%s +. +:OPL_CAPTURE_FAILED +Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format. +. +:TTF_DBCS_ONLY +This function is only available for the Chinese/Japanese/Korean code pages. +. +:SAVE_FAILED +Failed to save the current state. +. +:SAVE_CORRUPTED +Save state corrupted! Program may not work. +. +:SAVE_SCREENSHOT +Saved screenshot to the file: + +%s +. diff --git a/contrib/translations/zh/zh_TW.lng b/contrib/translations/zh/zh_TW.lng index 5f3872d81d2..71950714364 100644 --- a/contrib/translations/zh/zh_TW.lng +++ b/contrib/translations/zh/zh_TW.lng @@ -1,22 +1,24 @@ :DOSBOX-X:LANGUAGE:Traditional Chinese :DOSBOX-X:CODEPAGE:950 -:DOSBOX-X:VERSION:2025.02.01 -:DOSBOX-X:REMARK:建議將國家和字碼頁設為 886,950 並搭配中文字型; 或使用 cht 或 tw 中文 DOS/V 模式以直接支援中文顯示和列印 +:DOSBOX-X:VERSION:2026.05.02 +:DOSBOX-X:REMARK:設定好中文語言與字型後,就可以直接支援中文顯示和列印。國家和字碼頁選項可以留空,或設為「886,950」、「886,951」。 :AUTOEXEC_CONFIGFILE_HELP -區段中的指令行會在啟動時執行. -您可以在這裡下達 MOUNT 指令. +區段中的指令行會在啟動時執行。 +您可以在這裡下達 MOUNT 指令。 + . :CONFIGFILE_INTRO -# 這是給 DOSBox-X %s 使用的組態檔案. (請使用最新版 DOSBox-X) -# 以 # 開頭的行是註解行, 會被 DOSBox-X 忽略. -# 註解行習慣用於 (簡短) 記載每個選項的效果. -# 要寫入「所有的」組態選項, 使用命令 'config -all' 加上 -wc 或 -writeconf 選項. +# 這是給 DOSBox-X %s 使用的組態檔案。(請使用最新版 DOSBox-X) +# 以井號 # 開頭的文字行是註解行,會被 DOSBox-X 忽略。 +# 它被用來 (簡短) 說明每個選項的效果。 +# 要寫入「所有的」組態選項,使用命令 'config -all' 加上 -wc 或 -writeconf 選項。 + . :CONFIG_SUGGESTED_VALUES 可能值 . :CONFIG_ADVANCED_OPTION -進階選項 (請見完整的組態設定參照檔案 [dosbox-x.reference.full.conf] 取得更多詳細資訊) +進階選項 (詳細資訊請見完整的組態設定參照檔案 [dosbox-x.reference.full.conf]) . :CONFIG_TOOL DOSBox-X 組態工具 @@ -48,6 +50,9 @@ DOSBox-X 組態工具 :CLOSE 關閉 . +:THEME +色彩主題 +. :DEBUGCMD 輸入偵錯工具命令 . @@ -99,15 +104,9 @@ DOSBox-X 組態工具 :HELP_FOR %s 的說明 . -:HELP_INFO -按一下下方 [說明] 按鈕檢視詳細說明資訊. -. :SELECT_VALUE 選擇屬性值 . -:CONFIGURATION_FOR -%s 的組態 -. :CONFIGURATION 組態 . @@ -136,7 +135,7 @@ DOSBox-X 記錄輸出 已掛載的磁碟機編號 . :IDE_CONTROLLER_ASSIGNMENT -IDE 控制器分配狀態 +IDE 控制器的位置分配 . :HELP_COMMAND DOS 命令說明 @@ -148,7 +147,7 @@ DOS 命令說明 聲霸卡組態資訊 . :CURRENT_MIDICONFIG -MIDI 裝置組態資訊 +MIDI/OPL 裝置組態資訊 . :CREATE_IMAGE 建立空白磁碟映像 @@ -162,9 +161,6 @@ MIDI 裝置組態資訊 :INTRODUCTION 介紹 . -:CONFIGURE_GROUP -選擇設定組進行組態編輯: -. :SHOW_ADVOPT 顯示進階選項 . @@ -213,7 +209,7 @@ DOSBox-X 模擬 DOS 命令列介面讓您覺得好像在真正使用 DOS. IDE 位置 . :SWAP_SLOT -欄位切換 +切換欄位 . :EMPTY_SLOT 空位 @@ -309,16 +305,16 @@ DOSBox-X 命令列組態工具. 支援的選項有: -ln (或 -langname) 顯示 (不加引數時) 或指定語言名稱. -wcp [檔名] 將組態檔案寫入程式目錄 (dosbox-x.conf 或指定檔名). -wcd 寫入設定目錄中的預設組態檔案. --all, -mod 與 -wc、-wcp 或 -wcd 一起使用以寫入「所有的」或者修改過的組態選項. --wcboot、-wcpboot 或 -wcdboot 將在寫入組態檔案後自動重開 DOSBox-X. +-all, -mod 與 -wc、-wcp、或 -wcd 一起使用以寫入「所有的」或者修改過的組態選項. +-wcboot、-wcpboot、或 -wcdboot 將在寫入組態檔案後自動重開 DOSBox-X. -bootconf (或 -bc) 重開 DOSBox-X 並載入指定的組態檔案 (或已載入的主組態檔案). --norem 與 -wc、-wcp 或 -wcd 一起使用時不寫入組態檔案的註解. +-norem 與 -wc、-wcp、或 -wcd 一起使用時不會寫入組態選項的備註. -l 列出 DOSBox-X 程式的設定參數. -h, -help, -? 顯示本說明; 加上英文單字 "sections" 以顯示區段清單. -h, -help, -? 區段 或 屬性 顯示指定區段或屬性的資訊. -axclear 清除 [autoexec] 區段. -axadd [指令行] 新增指令行至 [autoexec] 區段. --axtype 顯示 [autoexec] 區段中的內容. +-axtype 列出 [autoexec] 區段中的內容. -avistart, -avistop 開始或停止錄製 AVI. -securemode 啟用安全模式, 將停用掛載磁碟機等功能. -startmapper 啟動 DOSBox-X 的對應表編輯器. @@ -428,7 +424,7 @@ MOUSE [/?] [/U] [/V] . :PROGRAM_MOUNT_CDROMS_FOUND -找到的光碟機數: %d +找到的光碟機數: %d 台 . :PROGRAM_MOUNT_STATUS_FORMAT @@ -436,15 +432,15 @@ MOUSE [/?] [/U] [/V] . :PROGRAM_MOUNT_STATUS_ELTORITO -磁碟機 %c 掛載為光碟的開機磁片 +磁碟機 %c 被掛載為可開機光碟 (El Torito) 的軟碟機 . :PROGRAM_MOUNT_STATUS_RAMDRIVE -磁碟機 %c 掛載為記憶體磁碟機 +磁碟機 %c 被掛載為 RAM 磁碟機 . :PROGRAM_MOUNT_STATUS_2 -磁碟機 %c 掛載到 %s +磁碟機 %c 被掛載為 %s . :PROGRAM_MOUNT_STATUS_1 @@ -456,7 +452,7 @@ MOUSE [/?] [/U] [/V] . :PROGRAM_MOUNT_UNSUPPORTED_EXT -不支援的副檔名 %s: 已掛載為原始 IMG 映像. +不支援的副檔名 %s: 已當作原始 IMG 映像來掛載. . :PROGRAM_IMGMOUNT_STATUS_FORMAT @@ -484,7 +480,7 @@ MOUSE [/?] [/U] [/V] . :PROGRAM_IMGSWAP_ERROR -此磁碟機的位置必須在 1 和 %d 之間. +提供給此磁碟機的位置必須在 1 和 %d 之間. . :PROGRAM_MOUNT_ERROR_1 @@ -504,7 +500,7 @@ MOUSE [/?] [/U] [/V] . :PROGRAM_MOUNT_ALREADY_MOUNTED -磁碟機 %c 已掛載到 %s +磁碟機 %c 已經用 %s 掛載 . :PROGRAM_MOUNT_USAGE @@ -517,10 +513,10 @@ MOUSE [/?] [/U] [/V] 支援的磁碟機類型有: dir, floppy, cdrom, overlay (其中 'overlay' 將掛載磁碟機的寫入操作重新導向到另一個目錄) -label [名稱] 設定磁碟機中的磁碟區標籤名稱 (全部大寫). - -nl 如果指定的磁碟機已掛載, 自動使用下一個磁碟機代號. + -nl 如果指定的磁碟機已被掛載, 自動使用下一個磁碟機代號. -ro 以唯讀模式掛載磁碟機. -pr 指定路徑為相對於組態檔案所在目錄. - -cd 顯示包含光碟機編號的本機光碟機清單. + -cd 產生包含光碟機編號的本機光碟機清單. -usecd [光碟機編號] 支援直接硬體模擬比如 CD 音訊播放. -ioctl 使用最低階的硬體存取 (與 -usecd 選項一起使用). -aspi 使用已安裝的 ASPI 層 (與 -usecd 選項一起使用). @@ -547,26 +543,26 @@ MOUSE [/?] [/U] [/V] MOUNT - 列出所有已掛載的磁碟機 MOUNT -cd - 列出本機所有光碟機 MOUNT d %s - 將磁碟機 D: 掛載到指定目錄 -MOUNT c %s -t cdrom - 以光碟機方式將磁碟機 C: 掛載到指定目錄 -MOUNT c %s -ro - 將磁碟機 C: 以唯讀模式掛載 +MOUNT c %s -t cdrom - 用指定目錄將磁碟機 C: 掛載為光碟機 +MOUNT c %s -ro - 以唯讀模式掛載磁碟機 C: MOUNT c %s -label TEST - 掛載磁碟機 C: 並給予標籤 TEST MOUNT c %s -nocachedir  - 掛載磁碟機 C: 且不使用磁碟機快取 MOUNT c %s -freesize 128 - 掛載磁碟機 C: 並報告剩餘磁碟空間為 128MB MOUNT c %s -u - 強制掛載磁碟機 C: 即使之前已掛載 -MOUNT c %s -t overlay - 將重疊目錄掛載到磁碟機 C: 上面 +MOUNT c %s -t overlay - 掛載磁碟機 C: 並且加上重疊目錄 MOUNT c -u - 卸載磁碟機 C: . :PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED -磁碟機 %c 未掛載. +磁碟機 %c 未被掛載. . :PROGRAM_MOUNT_UMOUNT_SUCCESS -磁碟機 %c 已成功卸載. +磁碟機 %c 已被成功卸載. . :PROGRAM_MOUNT_UMOUNT_NUMBER_SUCCESS -磁碟機編號 %c 已成功卸載. +磁碟機編號 %c 已被成功卸載. . :PROGRAM_MOUNT_UMOUNT_NO_VIRTUAL @@ -582,7 +578,7 @@ MOUSE [/?] [/U] [/V] . :PROGRAM_MOUNT_PHYSFS_ERROR -無法從此壓縮檔中掛載 PhysFS 磁碟機. +無法用此壓縮檔掛載 PhysFS 磁碟機. . :PROGRAM_MOUNT_OVERLAY_NO_BASE @@ -594,18 +590,18 @@ MOUSE [/?] [/U] [/V] . :PROGRAM_MOUNT_OVERLAY_MIXED_BASE -指定的重疊目錄需與下方磁碟機所設定的定址方式相同, 不能混合相對路徑和絕對路徑. +重疊目錄需與原先磁碟機所使用的定址方式相同, 不能混用相對路徑和絕對路徑. . :PROGRAM_MOUNT_OVERLAY_SAME_AS_BASE -重疊目錄不能與下方磁碟機的目錄相同. +重疊目錄不能與原先磁碟機的目錄相同. . :PROGRAM_MOUNT_OVERLAY_ERROR -嘗試掛載重疊目錄到磁碟機上時發生錯誤. +建立帶有重疊目錄的磁碟機時發生錯誤. . :PROGRAM_MOUNT_OVERLAY_STATUS -重疊目錄 %s 已掛載到磁碟機 %c 上. +重疊目錄 %s 已被掛載加到磁碟機 %c. . :PROGRAM_LOADFIX_ALLOC @@ -652,7 +648,7 @@ MSCDEX 已安裝. . :MSCDEX_ERROR_MULTIPLE_CDROMS -MSCDEX 錯誤: 多個光碟機的英文代號應保持連續. +MSCDEX 錯誤: 多台光碟機的英文代號應保持連續. . :MSCDEX_ERROR_NOT_SUPPORTED @@ -668,7 +664,7 @@ MSCDEX 錯誤: 無效的檔案或無法開啟檔案. . :MSCDEX_TOO_MANY_DRIVES -MSCDEX 錯誤: 光碟機數量過多 (最多5個). MSCDEX 安裝失敗. +MSCDEX 錯誤: 光碟機數量過多 (最多5台). MSCDEX 安裝失敗. . :MSCDEX_LIMITED_SUPPORT @@ -688,7 +684,7 @@ MSCDEX 錯誤: 未知錯誤. . :PROGRAM_INTRO -歡迎使用 DOSBox-X, 支援聲音和影像且開放原始碼的 x86 模擬器. +歡迎使用 DOSBox-X, 支援聲音和圖像且開放原始碼的 x86 模擬器. DOSBox-X 建立一個 DOS 環境讓您彷彿正在使用原本的 DOS 系統. DOSBox-X 如果遇到錯誤將會在未警告的情況下停止運作或結束! @@ -721,7 +717,7 @@ DOSBox-X 建立一個 DOS 環境讓您彷彿正在使用原本的 DOS 系統. . :PROGRAM_INTRO_MENU_CDROM_HELP - 如果在 DOSBox-X 中掛載光碟, 您需要在掛載它們時指定更多的選項. + 如果要在 DOSBox-X 中掛載光碟機, 在掛載時您需要指定更多的選項. . :PROGRAM_INTRO_MENU_USAGE_HELP @@ -731,7 +727,7 @@ DOSBox-X 建立一個 DOS 環境讓您彷彿正在使用原本的 DOS 系統. . :PROGRAM_INTRO_MENU_INFO_HELP - 怎樣獲得關於 DOSBox-X 的更多資訊. + 如何獲得更多關於 DOSBox-X 的資訊. . :PROGRAM_INTRO_MENU_QUIT_HELP @@ -771,7 +767,7 @@ dosbox-x [名稱] [-exit] [-version] [-fastlaunch] [-fullscreen] :PROGRAM_INTRO_USAGE_2  -conf 組態檔案 以指定組態檔案中的選項啟動 DOSBox-X. - 檢視說明文件取得更詳細資訊. + 詳細資訊請見註解行說明.  -lang 語言檔案 以指定的語言檔案啟動 DOSBox-X. @@ -799,7 +795,7 @@ dosbox-x [名稱] [-exit] [-version] [-fastlaunch] [-fullscreen] 命令可以為內部程式、DOS 命令或者在已掛載磁碟機中的可執行檔.  -set <區段 屬性=值> - 設定組態選項 (覆寫組態檔案中對應的選項). + 設定組態選項 (覆蓋組態檔案中對應的選項). 可以用多個 -set 參數指定多個選項. . @@ -814,7 +810,7 @@ dosbox-x [名稱] [-exit] [-version] [-fastlaunch] [-fullscreen] https://dosbox-x.com/ 或 http://dosbox-x.software -關於 DOSBox-X 的更多資訊, 請造訪其 Wiki 系統: +更多關於 DOSBox-X 的資訊, 請造訪其 Wiki 系統: https://dosbox-x.com/wiki @@ -838,34 +834,34 @@ c:\dosgames\ 為一個例子. 您可以將其替換為您自己的遊戲目 ~/dosgames 為一個例子. 您可以將其替換為您自己的遊戲目錄.  . :PROGRAM_INTRO_MOUNT_END -當掛載成功後您可以輸入 c: 命令進入您剛掛載的磁碟機 C:. +當掛載成功後您可以輸入 c: 命令進入您剛掛載的磁碟機 C:. 輸入 dir 命令將顯示其中的內容. cd 命令將允許您進入一個目錄 (列出的目錄內容 中以 [] 識別). 您可以執行以 .exe、.bat 及 .com 結尾的程式及檔案. . :PROGRAM_INTRO_CDROM 如何在 DOSBox-X 中掛載真實/虛擬光碟機: -DOSBox-X 提供多程度的光碟機模擬. +DOSBox-X 提供多層級的光碟機模擬. -基本的程度能作用在所有光碟機及一般目錄. +基本的層級能在所有光碟機及一般目錄運作. 它將安裝 MSCDEX 並將檔案標記為唯讀. -這對於大部分遊戲通常已經足夠: +這指令對於大部分遊戲通常已經夠用: mount d D:\ -t cdrom 或 mount d C:\example -t cdrom -如果不行的話您可能要讓 DOSBox-X 給予光碟機特定的標籤: -mount d C:\example -t cdrom -label CDLABEL +如果不管用的話您可能要指定光碟機的標籤給 DOSBox-X: +mount d C:\example -t cdrom -label 碟片標籤 -下一個程度增加一些低階支援. -因此只能作用在光碟機: +下一個層級增加一些低階支援. +因此只能在光碟機運作: mount d D:\ -t cdrom -usecd 0 -最後一個支援程度要依使用的作業系統決定: +最後一個支援層級要依您使用的作業系統決定: 對於 Windows 2000、Windows XP 及 Linux: mount d D:\ -t cdrom -usecd 0 -ioctl 對於 Windows 9x 並安裝有 ASPI 層: mount d D:\ -t cdrom -usecd 0 -aspi 替換 D:\ 為您的光碟機所在位置. -替換 -usecd 0 中的 0 為當您輸入以下命令時顯示的光碟機編號: +替換 -usecd 0 中的 0 為當您輸入以下指令時報告的光碟機編號: mount -cd . @@ -882,27 +878,27 @@ DOSBox-X 提供多程度的光碟機模擬. . :PROGRAM_BOOT_PRINT_ERROR -此命令將使 DOSBox-X 從軟碟或硬碟映像開機. +使 DOSBox-X 從軟碟 / PCjr 卡匣或硬碟映像開機. -您可以在此命令中使用多個軟碟映像檔, 並可透過選單指令進行切換. -"磁碟機:" 將從指定的已掛載的磁碟機開機. 如果沒有指定磁碟機代號, -將預設從磁碟機 A: 開機. 如果沒有指定參數將試著從目前磁碟機開機. -只支援從以下磁碟機代號開機: A:、C:, 以及 D:. 如果要從硬碟機 -(C: 或 D:) 開機, 請保證映像檔已用 IMGMOUNT 命令掛載. +BOOT [磁碟機代號:|磁碟機編號] [-convertfat|-convertfatro|-noconvertfat] +BOOT floppyimg1.img [floppyimg2.img ...] [-E <命令>] +BOOT harddrive.img -此命令的語法為如下之一: + 磁碟機代號 代號 A: 代表軟碟機, 代號 C: 或 D: 代表硬碟機. + 磁碟機編號 編號 0 代表軟碟機, 編號 2 或 3 代表硬碟機. + (必須先用 IMGMOUNT 命令掛載好磁碟機.) + floppyimg.img 指定一個或多個軟碟 / PCjr 映像來開機. + 多個映像檔為磁碟機 A: 建立一個切換清單. + harddrive.img 指定單個硬碟映像來從磁碟機 C: 開機. + 加上前導字元冒號 (:) 視同將映像檔加上防寫保護. -BOOT [磁碟機代號:] [-convertfat|-convertfatro|-noconvertfat] - -BOOT diskimg1.img [diskimg2.img ...] [-L 磁碟機代號] - -備註: 如果映像檔以冒號 (:) 開頭將以防寫模式開機, 如果以下組態選項已啟用: -leading colon write protect image = true + [-E <命令>] 為 PCjr 卡匣映像指定一個命令字串. + [-L 磁碟機代號] 可忽略的選項, 僅為了相容性而支援. 舉例: - -BOOT A: - 從磁碟機 A: 開機, 如果此磁碟機已掛載並能開機. -BOOT :DOS.IMG - 以防寫模式從軟碟映像檔 DOS.IMG 開機. +BOOT A: 從磁碟機 A: 開機, 如果此磁碟機已掛載並能開機. +BOOT disk1.img disk2.img 使用位在磁碟機 A: 的切換清單來從多個軟碟映像檔開機. +BOOT :DOS.IMG 以防寫模式從軟碟映像檔 DOS.IMG 開機. . :PROGRAM_BOOT_UNABLE @@ -948,7 +944,7 @@ ROM 檔案無法存取. . :PROGRAM_LOADROM_TOO_LARGE -ROM 檔案太大. +ROM 檔案過大. . :PROGRAM_LOADROM_INCOMPATIBLE @@ -1002,11 +998,11 @@ BIOSTEST 映像檔 . :PROGRAM_IMGMOUNT_SPECIFY_DRIVE -必須指定要掛載的磁碟機代號. +必須指定要將映像檔掛載到的磁碟機代號. . :PROGRAM_IMGMOUNT_SPECIFY2 -必須指定磁碟機編號 (0 至 %d) 來掛載映像檔 (0,1=fda,fdb;2,3=hda,hdb). +必須指定要將映像檔掛載到的磁碟機編號 (0 至 %d) (0,1=fda,fdb;2,3=hda,hdb). . :PROGRAM_IMGMOUNT_INVALID_IMAGE @@ -1020,7 +1016,7 @@ BIOSTEST 映像檔 . :PROGRAM_IMGMOUNT_AUTODET_VALUES -自動檢測映像檔中的磁碟機版面: -size %u,%u,%u,%u +自動偵測映像檔中的磁碟機版面: -size %u,%u,%u,%u . :PROGRAM_IMGMOUNT_TYPE_UNSUPPORTED @@ -1064,7 +1060,7 @@ BIOSTEST 映像檔 . :PROGRAM_IMGMOUNT_MOUNT_NUMBER -磁碟機編號 %d 掛載為 %s +磁碟機編號 %d 被掛載為 %s . :PROGRAM_IMGMOUNT_NON_LOCAL_DRIVE @@ -1076,28 +1072,28 @@ BIOSTEST 映像檔 . :PROGRAM_IMGMOUNT_HELP -掛載軟碟、硬碟或光碟映像檔. +掛載軟碟機、硬碟機、以及光碟片映像檔. IMGMOUNT 磁碟機 檔案 [-ro] [-t floppy] [-fs fat] [-size ss,s,h,c] IMGMOUNT 磁碟機 檔案 [-ro] [-t hdd] [-fs fat] [-size ss,s,h,c] [-ide 控制器] IMGMOUNT 磁碟機編號 檔案 [-ro] [-fs none] [-size ss,s,h,c] [-reservecyl 數字] IMGMOUNT 磁碟機 檔案 [-t iso] [-fs iso] IMGMOUNT 磁碟機 [-t floppy] -bootcd 光碟機代號 (或 -el-torito 光碟機代號) -IMGMOUNT 磁碟機 -t ram -size 大小 +IMGMOUNT 磁碟機 -t ram -size 容量大小 IMGMOUNT -u 磁碟機|磁碟機編號 (或 IMGMOUNT 磁碟機|磁碟機編號 檔案 [選項] -u) 磁碟機 映像檔要掛載到的磁碟機代號. 磁碟機編號 要掛載到的磁碟機編號, 其中 0-1 為軟碟機, 2-5 為硬碟機. 檔案 映像檔名稱, 如果未指定將使用 IMGMAKE.IMG. - -t iso 映像類型為光碟 iso 或 cue / bin 映像. - -t hdd|floppy|ram 映像類型為硬碟 (包括 VHD/HDI 映像)|軟碟|記憶體磁碟機. + -t iso 映像類型為光碟片 iso 或 cue / bin 映像. + -t hdd|floppy|ram 映像類型為硬碟機 (包括 VHD/HDI 映像)|軟碟機|RAM 磁碟機. -fs iso 檔案系統為 ISO 9660 (對於 .iso/.cue 檔案已自動假定). -fs fat 檔案系統為 FAT - 支援 FAT12、FAT16 及 FAT32. - -fs none 不要檢測檔案系統 (在提供磁碟機編號時已自動假定). + -fs none 不要偵測檔案系統 (在提供磁碟機編號時已自動假定). -reservecyl 數字 在 BIOS 中報告使用比實際更少的磁柱數目. -ide 控制器 指定 IDE 控制器 (1m, 1s, 2m, 2s) 以掛載磁碟機. -size size|ss,s,h,c 指定大小 KB 數, 或磁區大小和 CHS 版面. - -bootcd 光碟機代號 指定載入開機磁片映像所用的光碟機代號. + -bootcd 光碟機代號 指定要從中載入開機磁片映像的光碟機代號. -o partidx=數字 指定要掛載為磁碟機的硬碟分割區編號. - -ro 以唯讀模式掛載映像檔 (或用 ':' 首碼表示唯讀). + -ro 以唯讀模式掛載映像檔 (或用前導字元 ':' 表示唯讀). -u 卸載磁碟機或磁碟機編號. -examples 顯示用法舉例. . @@ -1115,8 +1111,8 @@ BIOSTEST 映像檔 IMGMOUNT A :dsk1.img dsk2.img - 將軟碟映像檔 dsk1.img 和 dsk2.img 掛載為 磁碟機 A:, 可在選單中用 "切換軟碟映像" 指令 進行切換, 其中 dsk1.img 映像檔為唯讀 - IMGMOUNT A -bootcd D - 從光碟機 D: 中掛載開機磁片映像為磁碟機 A: - IMGMOUNT C -t ram -size 10000 - 將硬碟機 C: 掛載為 10MB 記憶體磁碟機 + IMGMOUNT A -bootcd D - 從光碟機 D: 中掛載開機磁片映像為軟碟機 A: + IMGMOUNT C -t ram -size 10000 - 將硬碟機 C: 掛載為 10MB RAM 磁碟機 IMGMOUNT D d.img -o partidx=4 - 將 d.img 的第一個邏輯分割區掛載為磁碟機 D: IMGMOUNT C disk.img -u - 強制將硬碟映像檔 disk.img 掛載為磁碟機 C:, 如果之前磁碟機已掛載則將自動卸載 @@ -1136,14 +1132,14 @@ BIOSTEST 映像檔 hd_8gig: 8GB, hd_st251: 40MB, hd_st225: 20MB (舊磁碟機版面) 自訂硬碟: hd vhd (需要 -size 或 -chs) -size: 自訂硬碟映像的大小 MB 數 (vhd: 上限 2088960). - -chs: CHS 磁碟版面: 磁柱(1-1023),磁頭(1-255),磁區(1-63). + -chs: 磁碟版面, 使用 磁柱(1-1023),磁頭(1-255),磁區(1-63) 定址方式. -nofs: 如果想建立空白映像檔請加入此參數. - -force: 覆寫已存在的映像檔. -chs / -lba: 選擇 C/H/S 或者 LBA. + -force: 強制覆寫已存在的映像檔. -chs / -lba: 選擇 C/H/S 或者 LBA 定址. -bat: 建立一個包含 IMGMOUNT 命令的批次檔以掛載此映像檔. - -fat: 檔案系統類型 (12、16, 或 32). -fatcopies: FAT 表格複本數. - -spc: 每個磁簇所包含的磁區數 (必須為 2 的冪次方). -label 磁碟機標籤. + -fat: 檔案系統類型 (12、16、或 32). -fatcopies: 指定 FAT 表格複本數. + -spc: 指定每個叢集所包含的磁區數 (必須為 2 的冪次方). -label 磁碟機標籤. -rootdir: 根目錄下的項目數. -partofs: 硬碟分割區開始位置. - -align: 對齊檔案系統結構. 指定磁區數, 或在字尾加上 'K' 對應 KB. + -align: 對齊檔案系統結構. 指定磁區數, 或加上 'K' 尾碼表示 KB. -source: 軟碟機代號 - 如果指定了此參數, 映像檔將從軟碟機中的磁片讀取. -retries: 當試圖從已損壞磁片中讀取時所需的重試次數 (1-99). -examples: 顯示用法舉例. @@ -1151,15 +1147,15 @@ BIOSTEST 映像檔 :PROGRAM_IMGMAKE_EXAMPLE 一些關於 IMGMAKE 命令的舉例: - IMGMAKE -t fd - 建立 1.44MB 軟碟映像檔 IMGMAKE.IMG - IMGMAKE -t fd_1440 -force - 強制建立軟碟映像檔 IMGMAKE.IMG - IMGMAKE dos.img -t fd_2880 - 建立 2.88MB 軟碟映像檔 dos.img - IMGMAKE new.vhd -t vhd -size 520- 建立 520MB 動態擴充的 VHD 檔案 new.vhd + IMGMAKE -t fd - 建立 1.44MB 軟碟映像檔 IMGMAKE.IMG + IMGMAKE -t fd_1440 -force - 強制建立軟碟映像檔 IMGMAKE.IMG + IMGMAKE dos.img -t fd_2880 - 建立 2.88MB 軟碟映像檔 dos.img + IMGMAKE new.vhd -t vhd -size 520 - 建立 520MB 動態擴充的 VHD 檔案 new.vhd IMGMAKE c:\disk.img -t hd -size 50 - 建立 50MB 硬碟映像檔 c:\disk.img IMGMAKE c:\disk.img -t hd_520 -nofs - 建立 520MB 空白硬碟映像檔 IMGMAKE c:\disk.img -t hd_2gig -fat 32 - 建立 2GB FAT32 硬碟映像檔 IMGMAKE c:\disk.img -t hd -chs 130,2,17 - 以指定的 CHS 版面建立硬碟映像檔 - IMGMAKE c:\disk.img -source a - 從實體磁碟機 A: 中讀取映像 + IMGMAKE c:\disk.img -source a - 從實體軟碟機 A: 中讀取映像 . :PROGRAM_IMGMAKE_FLREAD @@ -1185,13 +1181,13 @@ BIOSTEST 映像檔 . :PROGRAM_IMGMAKE_PRINT_CHS -建立映像檔 "%s", 包含了 %u 個磁柱、%u 個磁頭和 %u 個磁區 +建立映像檔 "%s", 包含了 %u 個磁柱、%u 個磁頭、%u 個磁區 . :PROGRAM_IMGMAKE_CANT_READ_FLOPPY -無法讀取軟碟. +無法讀取磁片. . :PROGRAM_IMGMAKE_BADSIZE 錯誤的 -size 或 -chs 引數. @@ -1215,9 +1211,9 @@ BIOSTEST 映像檔 (.kl、.cpi/.cpx 檔案必須存在於 DOSBox-X 程式目錄中) 舉例: - KEYB 顯示目前載入的字碼頁. - KEYB sp 載入西班牙語 (SP) 配置, 並使用適當的字碼頁. - KEYB sp 850 載入西班牙語 (SP) 配置, 並使用字碼頁 850. + KEYB 顯示目前載入的字碼頁. + KEYB sp 載入西班牙語 (SP) 配置, 並使用適當的字碼頁. + KEYB sp 850 載入西班牙語 (SP) 配置, 並使用字碼頁 850. KEYB sp 850 mycp.cpi 與以上相同, 但使用檔案 mycp.cpi. KEYB sp_mod 850 從 sp_mod.kl 檔案載入鍵盤配置, 使用字碼頁 850. @@ -1248,7 +1244,7 @@ BIOSTEST 映像檔 yn . :PROGRAM_LABEL_HELP -建立、變更或刪除磁碟機中的磁碟區標籤. +建立、變更、或刪除磁碟機中的磁碟區標籤. LABEL [磁碟機:][標籤] @@ -1278,8 +1274,8 @@ LABEL [磁碟機:][標籤] :PROGRAM_MODE_USAGE 設定系統裝置. -MODE 顯示類型 :顯示類型的代碼有 CO80、BW80、CO40、BW40, 或 MONO -MODE CON COLS=c LINES=n :欄數與列數, c=80 或 132, n=25、43、50, 或 60 +MODE 顯示類型 :顯示類型的代碼有 CO80、BW80、CO40、BW40、或 MONO +MODE CON COLS=c LINES=n :欄數與列數, c=80 或 132, n=25、43、50、或 60 MODE CON RATE=r DELAY=d :鍵盤輸入速率與延遲, r=1-32 (32=最快), d=1-4 (1=最低) . @@ -1345,7 +1341,7 @@ VHD "%s" 的類型是 %s. . :PROGRAM_VHDMAKE_MERGENODELETE -不能移除快照 "%s", 你得必須自己動手移除! +不能移除快照 "%s", 必須要由您自己動手移除! . :PROGRAM_VHDMAKE_MERGEOKDELETE @@ -1354,38 +1350,40 @@ VHD "%s" 的類型是 %s. . :PROGRAM_VHDMAKE_MERGEFAILED 合併過程失敗, 中止程序! + . :PROGRAM_VHDMAKE_MERGEWARNCORRUPTION 父檔案 "%s" 內容可能已毀損! . :PROGRAM_VHDMAKE_ABSPATH -警告: 鏈結至父檔案的絕對路徑禁止了檔案可攜性. -請優先使用差異映像檔的相對路徑! +警告: 鏈結至父檔案的絕對路徑阻止了檔案可攜性. +請優先使用差異映像檔之相對路徑! . :PROGRAM_VHDMAKE_HELP -建立動態擴充或差異的 VHD 映像、將原始映像轉成大小固定的 VHD、 +建立動態擴充或差異的 VHD 映像、將原始 (raw) 映像轉成固定的 VHD、 顯示關於 VHD 映像的資訊, 以及合併映像檔. -VHDMAKE [-f] new.vhd size[BKMGT] +VHDMAKE [-f] new.vhd 容量大小[BKMGT] VHDMAKE -convert raw.hdd new.vhd VHDMAKE [-f] -link parent.vhd new.vhd VHDMAKE -merge delta.vhd VHDMAKE -info a.vhd - -c | -convert 將原始硬碟映像檔轉成大小固定的 VHD, 並改名為 new.vhd + -c | -convert 將原始 (raw) 硬碟映像轉成固定的 VHD, 並改名為 new.vhd -l | -link 建立一個新的差異 VHD new.vhd, 並鏈結至先前存在的父系 映像檔 parent.vhd -f | -force 強制覆寫先前存在的映像檔 -i | -info 顯示關於 a.vhd 映像檔的實用資訊 -m | -merge 將差異 delta.vhd 的變化合併到它的父檔案 new.vhd 建立新的動態擴充 VHD 映像檔名稱 - size 磁碟大小 (最後面加上大小單位, 位元組 B 隱含在裡面) -當轉換一個原始磁碟映像到大小固定的 VHD, 這個磁碟映像必須以 MBR 配置分割, -並且用 FAT 格式來格式化. -當建立一個動態擴充 VHD, 它的大小必須介在 3 MB 到 2040 GB. + 容量大小 磁碟容量大小 (最後面加上大小單位, 位元組 (Bytes) 隱含在裡面) +將原始 (raw) 磁碟映像轉成固定的 VHD 時, 它必須是使用 MBR 配置進行分割, +並且是以 FAT 格式來格式化. +建立一個動態擴充的 VHD 時, 它的大小必須是在 3 MB 到 2040 GB 之間. 已建立好的動態擴充 VHD 沒有經過分割也沒有格式化: 直接用 IMGMOUNT 掛載到一個磁碟機代號, 也請考慮改成用 IMGMAKE 製作. 如果合併作業成功, 會自動刪除已被合併的快照 VHD. + . :SHELL_CMD_TREE_ERROR 不存在子目錄 @@ -1532,7 +1530,7 @@ TIME [[/T] [/H] | 時間] . :SHELL_CMD_RMDIR_ERROR -路徑無效、不是目錄, 或目錄非空 - %s +路徑無效、不是目錄、或目錄非空 - %s . :SHELL_CMD_RMDIR_FULLTREE_CONFIRM @@ -1631,19 +1629,19 @@ GOTO: 標籤 %s 找不到. . :SHELL_EXECUTE_DRIVE_ACCESS_CDROM -您是否想讓 DOSBox-X 存取您真實電腦中的光碟機 %c [Y/N]? +是否要讓 DOSBox-X 存取您真實電腦中的唯讀式光碟機 %c [Y/N]? . :SHELL_EXECUTE_DRIVE_ACCESS_FLOPPY -您是否想讓 DOSBox-X 存取您真實電腦中的軟碟機 %c [Y/N]? +是否要讓 DOSBox-X 存取您真實電腦中的軟式磁碟機 %c [Y/N]? . :SHELL_EXECUTE_DRIVE_ACCESS_REMOVABLE -您是否想讓 DOSBox-X 存取您真實電腦中的卸除式磁碟機 %c [Y/N]? +是否要讓 DOSBox-X 存取您真實電腦中的卸除式磁碟機 %c [Y/N]? . :SHELL_EXECUTE_DRIVE_ACCESS_NETWORK -您是否想讓 DOSBox-X 存取您真實電腦中的網路磁碟機 %c [Y/N]? +是否要讓 DOSBox-X 存取您真實電腦中的網路磁碟機 %c [Y/N]? . :SHELL_EXECUTE_DRIVE_ACCESS_FIXED -您是否真的想讓 DOSBox-X 存取您真實電腦中的硬碟機 %c [Y/N]? +是否真的要讓 DOSBox-X 存取您真實電腦中的硬式磁碟機 %c [Y/N]? . :SHELL_EXECUTE_ILLEGAL_COMMAND 錯誤的命令或檔名 - "%s" @@ -1721,7 +1719,7 @@ DOS/V V-text 目前狀態為關. a . :SHELL_STARTUP_TITLE -歡迎使用 DOSBox-X ! +歡迎使用 DOSBox-X! . :SHELL_STARTUP_HEAD1 輕鬆上手 DOSBox-X:  @@ -1742,12 +1740,12 @@ a - 提高或降低模擬速度:F11 + 加號 或 F11 + 減號  . :SHELL_STARTUP_CGA -支援 CGA 合成模式. 按 Ctrl+F8 鍵啟用或停用合成輸出. -按 Ctrl+Shift+[F7/F8] 變更色度; 按 Ctrl+F7 選擇早期/晚期 CGA 型號. +支援 CGA 合成模式。按 Ctrl+F8 鍵啟用或停用合成輸出。 +按 Ctrl+Shift+[F7/F8] 變更色度;按 Ctrl+F7 選擇早期/晚期 CGA 型號。 . :SHELL_STARTUP_HERC -按 Ctrl+F7 鍵在單色間切換: 白色、黃褐色、綠色. -按 Ctrl+F8 鍵切換水平混合 (僅限圖形模式). +按 Ctrl+F7 鍵在單色間切換:白色、黃褐色、綠色。 +按 Ctrl+F8 鍵切換水平混合 (僅限圖形模式)。 . :SHELL_STARTUP_HEAD3 線上 DOSBox-X 專案:  @@ -1758,7 +1756,7 @@ a 問題建議:https://github.com/joncampbell123/dosbox-x/issues  . :SHELL_STARTUP_LAST -祝您使用 DOSBox-X 愉快! +祝您使用 DOSBox-X 愉快! . :SHELL_CMD_BREAK_HELP 設定或清除延伸的 CTRL+C 檢查. @@ -1816,7 +1814,8 @@ DIR [磁碟機:][路徑][檔名] [/[W|B]] [/S] [/P] [/A[D|H|S|R|A]] [/O[N|E|G|S| E 依副檔名 (英文字母) D 依日期時間 (最早的在前) G 先列出子目錄 - 首碼表示相反順序 -選項可能會在 DIRCMD 環境變數中預先設定. 可以用含連字號(-)首碼的選項(比如/-W)進行覆蓋. +選項可能會在 DIRCMD 環境變數中預先設定. +可以在任何選項使用 - (連字號) 首碼覆蓋預先設定的選項--例如: /-W. . :SHELL_CMD_ECHO_HELP @@ -1827,7 +1826,7 @@ DIR [磁碟機:][路徑][檔名] [/[W|B]] [/S] [/P] [/A[D|H|S|R|A]] [/O[N|E|G|S| ECHO [ON | OFF] ECHO [訊息] -輸入不含參數的 ECHO 將顯示目前的 ECHO 設定. +輸入不含參數的 ECHO 命令將顯示目前的 ECHO 設定. . :SHELL_CMD_EXIT_HELP @@ -1851,7 +1850,7 @@ HELP [命令] E.g., HELP COPY 或 COPY /? 顯示 COPY 命令的說明資訊. -備註: 外部命令比如 MOUNT 和 IMGMOUNT 不會被 HELP [/A] 命令列出. +附註: 外部命令比如 MOUNT 和 IMGMOUNT 不會被 HELP [/A] 命令列出. 這些命令可以在 Z 槽中作為程式找到 (比如 MOUNT.COM). 輸入 命令 /? 或 HELP 命令 顯示此命令的說明資訊. @@ -1897,7 +1896,7 @@ SET [變數名稱=[字串]] 變數名稱 指定環境變數名稱. 字串 指定設定給變數的一系列字元. -* 如果沒有指定字串, 指定的環境變數將被移除. +*如果沒有指定字串, 指定的環境變數將被移除. 輸入不含參數的 SET 命令顯示目前環境變數. @@ -1963,7 +1962,7 @@ SHIFT FOR %%變數 IN (檔案組) DO 命令 [命令參數] %%變數 指定可置換參數. - (檔案組) 指定由一或多個檔案組成的檔案組, 可使用萬用字元. + (檔案組) 指定由一個或多個檔案組成的檔案組, 可使用萬用字元. 命令 指定將作用於每個檔案的命令. 命令參數 指定命令所使用的參數. @@ -2039,7 +2038,8 @@ COPY [/Y | /-Y] 來源檔案 [+來源檔案 [+ ...]] [目的名稱] /Y 覆寫現存目的檔案時不進行確認. /-Y 覆寫現存目的檔案時進行確認. -選項 /Y 可能會在 COPYCMD 環境變數中預先設定. 可以在命令列中使用 /-Y 選項進行覆蓋. +選項 /Y 可能會在 COPYCMD 環境變數中預先設定. +可以在命令列中使用 /-Y 選項進行覆蓋. 要連接檔案, 指定一個目的檔案, 及數個來源檔案 (使用萬用字元或 檔案1+檔案2+檔案3 格式). @@ -2156,7 +2156,7 @@ VERIFY [ON | OFF] . :SHELL_CMD_VER_HELP -顯示或設定 DOSBox-X 程式要報告的 DOS 版本. +顯示或設定 DOSBox-X 程式所報告的 DOS 版本. . :SHELL_CMD_VER_HELP_LONG @@ -2170,7 +2170,7 @@ VER [SET] 版本號碼 或 VER SET [主版本號 次版本號] 舉例, VER 6.0 或 VER 7.1 將 DOS 版本分別設定為 6.0 和 7.1. 另一方面, VER SET 7 1 將設定 DOS 版本為 7.01 (而不是 7.1). -輸入不含參數的 VER 命令顯示 DOSBox-X 及報告的 DOS 版本. +輸入不含參數的 VER 命令顯示 DOSBox-X 程式及所報告的 DOS 版本. . :SHELL_CMD_VER_VER @@ -2198,14 +2198,14 @@ PROMPT [文字] 文字 指定新的命令提示字元. 提示字元可以由一般字元和以下特殊代碼組成: - $A & (and 符號) + $A & (and 符號 (ampersand)) $B | (直線) $C ( (左括弧) $D 目前日期 - $E 跳脫字元代碼 (美國標準資訊交換碼 (ASCII) 內碼 27) + $E 跳脫碼 (美國標準資訊交換碼 (ASCII) 內碼 27) $F ) (右括弧) $G > (大於符號) - $H 退位字元 (清除前一個字元) + $H 退位字元(BS) (清除前一個字元) $L < (小於符號) $N 目前磁碟機 $P 目前磁碟機和路徑 @@ -2236,7 +2236,7 @@ ALIAS [名稱[=值] ... ] ASSOC [.副檔名[=命令] ... ] 輸入不含參數的 ASSOC 命令以顯示目前的檔案關聯性. -副檔名必須以點(.)開頭; 允許使用萬用字元(*和?). +副檔名必須以點 (.) 開頭; 允許使用萬用字元 (* 和 ?). . :SHELL_CMD_CHCP_HELP @@ -2251,13 +2251,13 @@ CHCP nnn[:[語言]] 檔案 指定字碼頁檔案. 語言 指定對應的語言. -在 TrueType 字型輸出方式所支援變更的字碼頁包括: +用 TrueType 字型輸出方式, 支援變更的字碼頁有: 437,737,775,808,850,852,853,855-869,872,874,1250-1258,3021 -以及雙位元組字碼頁, 包括: 932, 936, 949, 950/951 +以及雙位元組字碼頁, 包括 932、936、949、950/951. -通過提供字碼頁檔案來支援自訂的字碼頁. +客製化的字碼頁可以透過提供字碼頁檔案來支援. . :SHELL_CMD_CHCP_ACTIVE @@ -2316,10 +2316,12 @@ TRUENAME [/H] 檔案 . :SHELL_CMD_DXCAPTURE_HELP_LONG -DX-CAPTURE [/V|/-V] [/A|/-A] [/M|/-M] [O|/-O] [命令] [選項] +DX-CAPTURE [/V|/-V] [/A|/-A] [/M|/-M] [O|/-O] [/D|/-D] [命令] [選項] 將開始進行影像或音訊擷取、執行程式, 然後在程式結束時自動停止擷取. -/V 為影像、/A 為音訊、/M 為多軌音訊, 以及 /O 為 OPL FM (DROv2 格式) +/V 為影像, /A 為音訊, /M 為多軌音訊, /O 為 OPL FM (DROv2 格式), +以及 /-D 為停用結束後的延遲. + . :SHELL_CMD_DEBUGBOX_HELP 執行程式並在進入點切換到偵錯工具. @@ -2343,35 +2345,35 @@ DEBUGBOX [命令] [選項] . :SHELL_STARTUP_HEAD1_PC98 -Getting Started with DOSBox-X: +輕鬆上手 DOSBox-X: . :SHELL_STARTUP_TEXT1_PC98 -Type HELP for shell commands, and INTRO for a short introduction. -You could also complete various tasks through the drop-down menus. +輸入 HELP 命令檢視 DOS 命令清單,輸入 INTRO 命令進入簡短介紹。 +汝同樣可以透過 DOSBox-X 所帶的下拉式選單來完成各種操作和功能。 . :SHELL_STARTUP_EXAMPLE_PC98 -Example: Try select TrueType font or OpenGL perfect output option. +舉例:汝可以試著選擇 TrueType 字型或者 OpenGL perfect 輸出選項。 . :SHELL_STARTUP_TEXT2_PC98 -To launch the Configuration Tool, use host+C. Host key is F11. -To activate the Mapper Editor for key assignments, use host+M. -To switch between windowed and full-screen mode, use host+F. -To adjust the emulated CPU speed, use host+Plus and host+Minus. +啓動組態工具 - 使用 主機鍵+C;其中主機鍵是 F11。 +啓動對應表編輯器(按鍵設定) - 使用 主機鍵+M。 +切換視窗和全螢幕模式 - 使用 主機鍵+F。 +調整 CPU 模擬速度 - 使用 主機鍵+加號 與 主機鍵+減號。 . :SHELL_STARTUP_INFO_PC98 -DOSBox-X is now running in Japanese NEC PC-98 emulation mode. +DOSBox-X 正在使用日本的 NEC PC-98 模擬模式執行。 . :SHELL_STARTUP_TEXT3_PC98 -DOSBox-X project https://dosbox-x.com/ Complete DOS emulations -DOSBox-X guide https://dosbox-x.com/wiki DOS, Windows 3.x and 9x -DOSBox-X support https://github.com/joncampbell123/dosbox-x/issues +DOSBox-X 首頁 https://dosbox-x.com/ 提供了完整的 DOS 環境模擬 +DOSBox-X 指南 https://dosbox-x.com/wiki 包括 DOS、視窗 3.x 和 9x  +DOSBox-X 支援 https://github.com/joncampbell123/dosbox-x/issues  . :SHELL_STARTUP_DOSV -DOS/V 模式正在執行中。 您亦可以使用中/日/韓 TTF 模式來模擬標準的 DOS 環境。 +DOS/V 模式正在作用中。汝亦可以使用中/日/韓 TTF 模式來模擬標準的 DOS 環境。 . :SHELL_STARTUP_CGA_MONO -按 Ctrl+F7 鍵在單色間切換: 綠色、黃褐色、白色. -按 Ctrl+F8 鍵變更高對比度/亮度設定. +按 Ctrl+F7 鍵在單色間切換:綠色、黃褐色、白色。 +按 Ctrl+F8 鍵變更高對比度/亮度設定。 . :MENU:mapper_reset 重設虛擬機器 @@ -2388,6 +2390,9 @@ To adjust the emulated CPU speed, use host+Plus and host+Minus[3 :MENU:mapper_shutdown 結束 DOSBox-X . +:MENU:mapper_capkeyboard +擷取鍵盤 +. :MENU:mapper_capmouse 擷取滑鼠 . @@ -2431,7 +2436,7 @@ To adjust the emulated CPU speed, use host+Plus and host+Minus[3 中日韓文字: 切換雙位元組/單位元組模式 . :MENU:mapper_autoboxdraw -中日韓文字: 自動檢測製表字元 +中日韓文字: 自動偵測製表字元 . :MENU:mapper_incsize 放大 TTF 字型 @@ -2506,31 +2511,31 @@ CPU 類型 486DX5 133MHz (約 47810 個週期) . :MENU:cpu586-60 -奔騰 60MHz (約 31545 個週期) +奔騰 60MHz (約 32090 個週期) . :MENU:cpu586-66 奔騰 66MHz (約 35620 個週期) . :MENU:cpu586-75 -奔騰 75MHz (約 43500 個週期) +奔騰 75MHz (約 40072 個週期) . :MENU:cpu586-90 -奔騰 90MHz (約 52000 個週期) +奔騰 90MHz (約 48087 個週期) . :MENU:cpu586-100 -奔騰 100MHz (約 60000 個週期) +奔騰 100MHz (約 53430 個週期) . :MENU:cpu586-120 -奔騰 120MHz (約 74000 個週期) +奔騰 120MHz (約 64180 個週期) . :MENU:cpu586-133 -奔騰 133MHz (約 80000 個週期) +奔騰 133MHz (約 71240 個週期) . :MENU:cpu586-166 -奔騰 166MHz MMX (約 97240 個週期) +奔騰 166MHz MMX (約 95548 個週期) . -:MENU:cpuak6-166 -AMD K6 166MHz (約 110000 個週期) +:MENU:cpu586-200 +奔騰 200MHz MMX (約 114657 個週期) . :MENU:cpuak6-200 AMD K6 200MHz (約 130000 個週期) @@ -2713,7 +2718,7 @@ xBRZ xBRZ Bilinear . :MENU:center_window -Center window +將視窗置中 . :MENU:set_titletext 設定標題列文字... @@ -2728,7 +2733,7 @@ Center window 輸出 . :MENU:output_surface -Surface +軟體繪製 (Surface) . :MENU:output_direct3d Direct3D @@ -2932,10 +2937,10 @@ PC-98 選項 Glide 直通 . :MENU:load_d3d_shader -選擇 Direct3D 像素著色檔案... +選擇 Direct3D 像素著色器... . :MENU:load_glsl_shader -選擇 OpenGL (GLSL) 著色檔案... +選擇 OpenGL (GLSL) 著色器... . :MENU:load_ttf_font 選擇 TrueType 字型 (TTF/OTF)... @@ -2956,7 +2961,7 @@ Glide 直通 顯示聲霸卡組態 . :MENU:midi_info -顯示 MIDI 裝置組態 +顯示 MIDI/OPL 裝置組態 . :MENU:DOSMenu DOS @@ -3175,7 +3180,7 @@ MPEG-TS + H.264 說明 . :MENU:help_intro -DOSBox-X 介紹 +介紹 . :MENU:help_homepage DOSBox-X 首頁 @@ -3253,7 +3258,7 @@ DOS 命令 記錄檔案 I/O . :MENU:mapper_speedlock -切換至快轉模式 +高速 (快轉模式): 點放模式 . :MENU:mapper_speedlock2 高速 (快轉模式) @@ -3433,7 +3438,7 @@ DOS 命令 對應表中的定義 . :MENU:showdetails -標題列上顯示 FPS 和 RT 速率 +標題列上顯示 FPS 和 RT 速度 . :MENU:restartinst 重開 DOSBox-X 執行個體 @@ -3550,7 +3555,7 @@ Alt+Shift 啟用高 DPI 模式 . :MENU:sync_host_datetime -日期時間與主機系統同步 +將日期時間與主機系統同步 . :MENU:shell_config_commands 把組態選項當作命令 @@ -3586,7 +3591,7 @@ Alt+Shift 顯示偵錯工具 . :MAPPER:decsize -Decrease TTF size +縮小 TTF 字型 . :MAPPER:dynamic CPU: 動態核心 @@ -3598,7 +3603,7 @@ CPU: 動態核心 CPU: 完全核心 . :MAPPER:incsize -Increase TTF size +放大 TTF 字型 . :MAPPER:loadmap 載入對應表檔案 @@ -3610,13 +3615,13 @@ Increase TTF size CPU: 一般核心 . :MAPPER:paste -Paste from clipboard +將剪貼簿內容貼上 . :MAPPER:pasteend -Stop clipboard paste +停止將剪貼簿內容貼上 . :MAPPER:pauseints -Pause with interrupt +暫停並啟用插斷 . :MAPPER:prevslot 上一個儲存欄位 @@ -3631,7 +3636,7 @@ Pause with interrupt 重開 DOS 系統 . :MAPPER:recmtwave -Record to multi-track AVI +錄製音訊到多軌 AVI . :MAPPER:rescanall 重新整理磁碟機 @@ -3643,11 +3648,869 @@ Record to multi-track AVI 重設色彩配置 . :MAPPER:showstate -Display state info +顯示狀態資訊 . :MAPPER:simple CPU: 簡單核心 . +:MAPPER:speedlock +高速 (快轉模式): 點放模式 +. +:MAPPER:speedlock2 +高速 (快轉模式): 開啟或關閉 +. :MAPPER:togmenu 切換選單列顯示 . +:PROGRAM_FLAGSAVE_UNFLAGALL +所有檔案的儲存標幟已移除. + +. +:PROGRAM_FLAGSAVE_UNFLAGGED +檔案 %s 的儲存標幟已移除. + +. +:PROGRAM_FLAGSAVE_FLAGGED +檔案早已加上儲存標幟 - %s + +. +:PROGRAM_FLAGSAVE_TOOMANY +要加上儲存標幟的檔案數過多. + +. +:PROGRAM_FLAGSAVE_SAVED +檔案 %s 已加上儲存標幟 + +. +:PROGRAM_FLAGSAVE_LIST +已加上儲存標幟的檔案: +. +:PROGRAM_FLAGSAVE_HLP +替儲存狀態功能把要儲存的檔案加上標記或標幟. + +FLAGSAVE [檔案 [/F] [/R]] [/U] + + 檔案 指定一個或多個要加上儲存標幟的檔案. + /F 即使檔案找不到, 也要強制加上標幟. + /R 從指定檔案移除標幟. + /U 從所有已標幟檔案移除標幟. + +輸入不含參數的 FLAGSAVE 命令列出被加上標幟的檔案. + +. +:PROGRAM_INT2FDBG_NOT_SET +INT 2Fh 勾點尚未設定. + +. +:PROGRAM_INT2FDBG_ALREADY +INT 2Fh 勾點已經設定. + +. +:PROGRAM_INT2FDBG_HELP +以偵錯為目的攔截 INT 2Fh. + +INT2FDBG [選項] + /I 安裝勾點 + +將在呼叫鏈的最上層攔截 INT 2Fh 來取得偵錯資訊. + +輸入不含參數的 INT2FDBG 命令顯示目前的攔截狀態. +. +:PROGRAM_SET80x25 +變更為 80x25 文字模式. +. +:PROGRAM_SET80x43 +變更為 80x43 文字模式. +. +:PROGRAM_SET80x50 +變更為 80x50 文字模式. +. +:PROGRAM_SET80x60 +變更為 80x60 文字模式. +. +:PROGRAM_SET132x25 +變更為 132x25 文字模式. +. +:PROGRAM_SET132x43 +變更為 132x43 文字模式. +. +:PROGRAM_SET132x50 +變更為 132x50 文字模式. +. +:PROGRAM_SET132x60 +變更為 132x60 文字模式. +. +:PROGRAM_RESCAN_HELP +清除快取, 重新整理已掛載的磁碟機, 以獲得在主機系統上所作的變更. + +RESCAN [/A] [/Q] +RESCAN [磁碟機:] [/Q] + + [/A] 重新整理所有磁碟機 + [/Q] 啟用安靜模式 + [磁碟機:] 要重新整理的磁碟機 + +輸入不含參數的 RESCAN 命令來重新整理目前磁碟機. + +. +:PROGRAM_CFGTOOL_HELP +啟動 DOSBox-X 程式的圖形介面組態工具. + +CFGTOOL + +附註: 您也可以使用 CONFIG 命令以進行命令列介面的組態設定. +. +:PROGRAM_IMGSWAP_HELP +切換軟碟機、硬碟機、以及光碟片映像檔. + +IMGSWAP 磁碟機 [位置] + 磁碟機 要切換映像的磁碟機代號. + [位置] 要切換到的映像檔位置. + +. +:PROGRAM_INTRO_HELP +全螢幕的 DOSBox-X 介紹. + +INTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME] +. +:PROGRAM_IMGMOUNT_NOT_ASSIGNED +BIOS 的磁碟索引沒有已指派的映像檔. +. +:PROGRAM_IMGMOUNT_INVALID_NUMBER +無效的掛載編號. +. +:PROGRAM_IMGMOUNT_INVALID_FSTYPE +無效的 fstype. +. +:PROGRAM_IMGMOUNT_INVALID_SIZE +無效的大小參數. +. +:PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER +磁碟機編號 %d 沒有被掛載. +. +:PROGRAM_IMGMOUNT_UMOUNT_USAGE +不正確的 IMGMOUNT 卸載用法. +. +:PROGRAM_IMGMOUNT_INVALID_LETTER +無效的磁碟機代號. +. +:PROGRAM_IMGMOUNT_CHOOSE_LETTER +與標準的 INT 13h 硬碟配額衝突, 分割區無法被掛載. +選擇掛載到不同的磁碟機代號. +. +:PROGRAM_ELTORITO_LETTER +可開機光碟 (El Torito) 模擬需要一個合適的光碟機代號. +. +:PROGRAM_ELTORITO_DRIVE_EXISTS +指定的可開機光碟 (El Torito) 光碟機, 已經以非光碟機裝置存在. +. +:PROGRAM_ELTORITO_NOT_CDDRIVE +指定的可開機光碟 (El Torito) 光碟機, 實際上不是光碟機. +. +:PROGRAM_ELTORITO_REQUIRE_FLOPPY +此時可開機光碟 (El Torito) 模擬必須要與 -t floppy 一起使用. +. +:PROGRAM_ELTORITO_NO_BOOT_RECORD +可開機光碟 (El Torito) 的開機紀錄資訊未找到. +. +:PROGRAM_ELTORITO_ENTRY_UNREADABLE +可開機光碟 (El Torito) 的開機項目無法讀取. +. +:PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY +可開機光碟 (El Torito) 的開機磁片映像未找到. +. +:PROGRAM_ELTORITO_BOOTABLE_SECTION +無法找出開機磁區的位置 +. +:PROGRAM_ELTORITO_BOOTSECTOR +可開機光碟 (El Torito) 的開機磁區無法讀取 +. +:PROGRAM_IMGMAKE_ALIGNMENT +無效的對齊方式 +. +:PROGRAM_IMGMAKE_PARTOFS +無效的 -partofs +. +:PROGRAM_IMGMAKE_FAT +無效的 -fat 選項. 必須為 12、16、或 32 +. +:PROGRAM_IMGMAKE_FATCOPIES +無效的 -fatcopies 選項 +. +:PROGRAM_IMGMAKE_SPC +無效的 -spc 選項, 超出範圍 +. +:PROGRAM_IMGMAKE_SPC2 +無效的 -spc 選項, 必須是 2 的冪次方 +. +:PROGRAM_IMGMAKE_ROOTDIR +無效的 -rootdir 選項 +. +PROGRAM_IMGMAKE_BOOTSECT +無效的開機磁區位置 +. +PROGRAM_IMGMAKE_VOLUME_ALIGN +健全性測試失敗: 磁碟區大小未對齊 +. +:PROGRAM_IMGMAKE_FAT_ALIGN +健全性測試失敗: FAT 表格未對齊 +. +:PROGRAM_IMGMAKE_SECTPERFAT +錯誤: 產生的檔案系統中, 每個檔案配置表 (FAT) 佔用的磁區數超過 256 個, + 而且不是 FAT32 檔案系統. +. +:PROGRAM_IMGMAKE_VOLSIZE +健全性測試失敗: 磁碟區大小未對齊 +. +:PROGRAM_IMGMAKE_CLUSTERS +錯誤: 基於設定的參數, 產生的檔案系統中的叢集數過少 +. +:PROGRAM_IMGMAKE_CLUSTERCOUNT +警告: 基於設定的磁碟區大小, 叢集數量過高. + 報告為較小的磁區數量. +. +:PROGRAM_IMGMAKE_CLUSTER_ALIGN +健全性測試失敗: 第一個叢集未對齊 +. +:PROGRAM_IMGMAKE_CLUSTER_SIZE +警告: 叢集大小 >= 64KB 跟 MS-DOS 和 SCANDISK 不相容 +. +:PROGRAM_BOOT_UNSUPPORTED +不支援的開機模式 +. +:PROGRAM_MOUNT_OVERLAY_REPLACE +存在的重疊目錄已經被新的重疊目錄取代. +. +:PROGRAM_LOADFIX_EMS_FREE +EMS 控制代碼 %u: 無法釋放 +. +:PROGRAM_LOADFIX_XMS_FREE +XMS 控制代碼 %u: 無法釋放 +. +:PROGRAM_LOADFIX_EMS_ALLOC +EMS 區塊已配置用量 (%uKB) +. +:PROGRAM_LOADFIX_EMS_ALLOCERROR +無法在 EMS 區塊配置用量 +. +PROGRAM_LOADFIX_NOEMS +EMS 未作用 +. +:PROGRAM_LOADFIX_XMS_ALLOC +XMS 區塊已配置用量 (%uKB) +. +:PROGRAM_LOADFIX_XMS_ALLOCERROR +無法在 XMS 區塊配置用量 +. +:PROGRAM_LOADFIX_NOXMS +XMS 未作用 +. +:PROGRAM_LOADFIX_NOALLOC +最低的 MCB 位址高於 64KB, 無配置用量 +. +:PROGRAM_BOOT_SWAP_ALREADY +所指定的多個磁碟映像, 在另一個磁碟機已設定好連接此切換清單 +. +:PROGRAM_BOOT_NOT_SPECIFIED +沒有指定映像檔 +. +:PROGRAM_BOOT_IS_PC88 +D88 映像檔似乎是用於 PC-88, 不能用它來開機. +. +:PROGRAM_BOOT_BPS_TOOLARGE +位元組數/磁區 過大 +. +:PROGRAM_BOOT_DRIVE_READERROR +讀取磁碟機發生錯誤 +. +:PROGRAM_START_HELP_WIN +啟動個別的視窗以執行指定的程式或命令. + +START [+|-|_] 命令 [引數] + + [+|-|_]: 最大化/最小化/隱藏 程式. + 也支援 /MAX, /MIN, /HID 選項. + 命令: 要啟動的命令、程式、或檔案. + 引數: 傳遞給應用程式的引數. + +START 自動開啟 Windows 命令提示字元來執行這些命令時, +會等待按鍵按下才結束 (由 "startincon" 選項指定): +%s + +附註: 這個命令指定的路徑是主機系統上的路徑. +. +:PROGRAM_START_HELP +啟動個別的視窗以執行指定的程式或命令. + +START /OPEN 檔案 +START 命令 [引數] + + /OPEN: 用關聯的程式開啟檔案或網址 (URL). + 檔案: 要用關聯的程式開啟的檔案或網址 (URL). + 命令: 要啟動或執行的命令或程式. + 引數: 傳遞給應用程式的引數. + +附註: 這個命令指定的路徑是主機系統上的路徑. +. +:PROGRAM_START_COMPLETED +命令執行完成. +. +:PROGRAM_START_COMMAND +正在啟動 %s... +. +:PROGRAM_START_CTRLC +(按下 Ctrl+C 立即結束) +. +:PROGRAM_START_HOST_ERROR +錯誤: START 不能啟動應用程式以在您目前的主機系統上執行. +. +:PROGRAM_START_LAUNCH_ERROR +錯誤: START 不能執行應用程式. +. +:PROGRAM_IMGMOUNT_ELTORITO_NO_FILE +當從 El Torito 可開機光碟掛載軟碟機時不要指定檔案. +. +:PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE +當掛載 RAM 磁碟機時不要指定檔案. +. +:PROGRAM_IMGMOUNT_INVALID_SECTORSIZE +磁區大小必須大於 512 位元組, 而且要整除映像的叢集大小 %lu 位元組. +. +:PROGRAM_IMGMOUNT_OPEN_ERROR +不能開啟 '%s' +. +:PROGRAM_IMGMOUNT_QCOW2_INVALID +qcow2 映像 '%s' 不支援 +. +:PROGRAM_IMGMOUNT_GEOMETRY_ERROR +無法偵測磁碟機版面 +. +:PROGRAM_IMGMOUNT_DOS_VERSION +掛載這個映像檔需要報告為 %u.%u 或以上的 DOS 版本. +%s +. +:PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE +磁片大小無法識別 +. +:PROGRAM_IMGMOUNT_MULTIPLE_USED +設定的多個映像檔, 已經被另一個磁碟機使用. +. +:PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED +多個磁碟映像不被對應的磁碟機支援 +. +:PROGRAM_IMGMOUNT_HD_FDPOSITION +在軟碟機位置不能掛載硬碟機. +. +:PROGRAM_IMGMOUNT_FD_HDPOSITION +在硬碟機位置不能掛載軟碟機. +. +:PROGRAM_ELTORITO_ISOMOUNT +El Torito 可開機光碟: -fs iso 掛載未受支援 +. +:PROGRAM_MODE_STATUS +CON 裝置的狀態: +---------------------- +欄數=%d +列數=%d +. +:PROGRAM_MODE_NOTSUPPORTED + +在此裝置上不支援字碼頁的操作 +. +:PROGRAM_MODE_RATE_DELAY +鍵盤輸入速率與延遲必須一起指定 +. +:PROGRAM_UTF8_HELP +轉換 UTF-8 文字以在目前字碼頁檢視. + +UTF8 < [磁碟機:][路徑]檔名 +命令名稱 | UTF8 +. +:PROGRAM_UTF8_NO_TEXT +找不到輸入文字. +. +:PROGRAM_UTF8_INVALIDCP +提供文字轉換的字碼頁無效. +. +:PROGRAM_UTF8_NOT_UTF8 +輸入的文字是 UTF-16. +. +:PROGRAM_UTF8_CONVERSION_ERROR +在文字轉換過程發生錯誤. +. +:PROGRAM_UTF16_HELP +轉換 UTF-16 文字以在目前字碼頁檢視. + +UTF16 [/BE|/LE] < [磁碟機:][路徑]檔名 +命令名稱 | UTF16 [/BE|/LE] + + /BE 使用 UTF-16 大端序 + /LE 使用 UTF-16 小端序 +. +:PROGRAM_VTEXT_HELP +變更 DOS/V 模擬的 V-text 模式. + +VTEXT [模式] + + [模式] 設定值為 0、1、2, 分別對應: 無 V-text、V-text 1、V-text 2. + +輸入不含參數的 VTEXT 命令顯示目前的 V-text 模式狀態. +. +:PROGRAM_NMITEST_HELP +產生一個非遮罩式插斷 (NMI). + +NMITEST + +附註: 這是一個偵錯工具, 測試插斷處理常式是否能正常運作. +. +:PROGRAM_NMITEST_GENERATE_NMI +正在產生一個非遮罩式插斷 (NMI)... +. +:PROGRAM_CAPMOUSE_HELP +在 DOSBox-X 內擷取或釋放滑鼠. + +CAPMOUSE [/C|/R] + + /C 擷取滑鼠 + /R 釋放滑鼠 +. +:PROGRAM_CAPMOUSE_MOUSE +滑鼠 +. +:PROGRAM_CAPMOUSE_CURRENTLY +目前 +. +:PROGRAM_CAPMOUSE_CAPTURED +已擷取 +. +:PROGRAM_CAPMOUSE_RELEASED +已釋放 +. +:PROGRAM_AUTOTYPE_HELP +對執行中的 DOS 程式執行指令碼的鍵盤項目輸入. + +AUTOTYPE [-list] [-w 等待] [-p 間距] 按鈕_1 [按鈕_2 [...]] + +其中: + -list: 列出所有可用的按鈕名稱. + -w 等待: 鍵入開始前的秒數. 預設兩秒; 最大 30 秒. + -p 間距: 每次按鍵之間的秒數. 預設半秒; 最大 10 秒. + + 序列是由一個或多個以空白分隔的按鈕組成. + 自動鍵入在「等待」秒數後開始, 於每個「間距」秒數再將每項按鈕輸入. + 一個逗號 , 字元額外插入一段「間距」的延遲. + +一些舉例: + AUTOTYPE -w 1 -p 0.3 up enter , right enter + AUTOTYPE -p 0.2 f1 kp_8 , , enter + AUTOTYPE -w 1.3 esc enter , p l a y e r enter +. +:PROGRAM_AUTOTYPE_NO_BINDINGS +AUTOTYPE: 對應表中沒有按鍵繫結 +. +:PROGRAM_AUTOTYPE_CLAMP_VALUE +AUTOTYPE: 限制 %s 的值從 %.2f 改成 %.2f +. +:PROGRAM_AUTOTYPE_INVALID_VALUE +AUTOTYPE: %s 的值 '%s' 不是有效的浮點數 +. +:PROGRAM_ADDKEY_HELP +產生人工的按鍵輸入. + +ADDKEY [p毫秒] [按鍵] + +例如, 下面的命令鍵入 "dir" 接著在 1 秒之後鍵入 ENTER: + +ADDKEY p1000 d i r enter + +您也可以嘗試改用 AUTOTYPE 命令, 來對執行中的 DOS 程式執行指令碼的鍵盤項目輸入. + +. +:PROGRAM_SETCOLOR_HELP +檢視或變更文字模式的色彩配置設定. + +SETCOLOR [色彩編號 [值]] + +舉列: + + SETCOLOR 0 (50,50,50) +變更色彩編號 0 為指定的色彩值 + + SETCOLOR 7 - +變更色彩編號 7 為預設的色彩值 + + SETCOLOR 3 + +色彩編號 3 改回至先前設定的色彩值 + + SETCOLOR MONO +顯示目前的 MONO 模式狀態 + +要變更目前的背景和前景顏色, 使用 COLOR 命令. +. +:PROGRAM_SETCOLOR_STATUS +MONO 模式狀態: %s (影像模式 %d) + +. +:PROGRAM_SETCOLOR_ACTIVE +作用中 +. +:PROGRAM_SETCOLOR_INACTIVE +無作用 +. +:PROGRAM_SETCOLOR_UNAVAILABLE +不能用 +. +:PROGRAM_SETCOLOR_MONO_MODE7 +MONO 模式狀態 => 作用中 (影像模式 7) +. +:PROGRAM_SETCOLOR_MONO_MODE3 +MONO 模式狀態 => 無作用 (影像模式 3) +. +:PROGRAM_SETCOLOR_MONO_FAIL +無法變更 MONO 模式 +. +:PROGRAM_SETCOLOR_MONO_SYNTAX +MONO 必須是 + 或 -: %s +. +:PROGRAM_SETCOLOR_COLOR +色彩 %d: (%d,%d,%d) 或是 #%02x%02x%02x + +. +:PROGRAM_SETCOLOR_INVALID_NUMBER +無效的色彩編號 - %s +. +:PROGRAM_SETCOLOR_INVALID_VALUE +無效的色彩值 - %s +. +:PROGRAM_SETCOLOR_NOT_SUPPORTED +對於目前的影像模式, 不支援變更色彩配置. +. +:PROGRAM_BOOT_UNKNOWN_BOOTHAX +未知的 boothax 模式 +. +:PROGRAM_BOOT_SPECIFY_FILE +必須指定 BIOS 映像來開機 +. +:PROGRAM_BOOT_BIOS_OPEN_ERROR +不能開啟 BIOS 映像 +. +:PROGRAM_BIOSTEST_SPECIFY_FILE +必須指定要載入的 BIOS 檔案. +. +:PROGRAM_BIOSTEST_OPEN_ERROR +不能開啟檔案 +. +:PROGRAM_BIOSTEST_TOO_LARGE +BIOS 檔案過大 +. +:PROGRAM_DELTREE_HELP +刪除目錄以及當中的所有子目錄和檔案. + +刪除一個或多個檔案與目錄: +DELTREE [/Y] [磁碟機:]路徑 [[磁碟機:]路徑[...]] + + /Y 刪除子目錄時不進行確認. + [磁碟機:]路徑 指定要刪除的目錄名稱. + +附註: 小心使用 DELTREE. 指定目錄中的每個檔案和子目錄都會被刪除. + +. +:PROGRAM_TREE_HELP +以圖形顯示磁碟機或路徑的目錄結構. + +TREE [磁碟機:][路徑] [/F] [/A] + + /F 顯示各個目錄中檔案的名稱. + /A 改用 ASCII 取代擴充字元. + +. +:PROGRAM_TITLE_HELP +設定 DOSBox-X 的視窗標題. + +TITLE [字串] + + 字串 指定 DOSBox-X 的視窗標題. + +. +:PROGRAM_COLOR_HELP +設定預設主控台的前景及背景色彩. + +COLOR [屬性] + + 屬性 指定主控台輸出的色彩屬性 + +色彩屬性由十六進位的「兩個」位數來指定 -- 第一個對應到背景色; +第二個對應到前景色. 每一個位數可以是下列的任一個值: + + 0 = 黑色 8 = 灰色 + 1 = 藍色 9 = 淺藍色 + 2 = 綠色 A = 淺綠色 + 3 = 藍綠色 B = 淺藍綠色 + 4 = 紅色 C = 淺紅色 + 5 = 紫色 D = 淺紫色 + 6 = 黃色 E = 淺黃色 + 7 = 白色 F = 亮白色 + +如果沒有設定引數, 則此命令會將原本的色彩回復. +如果嘗試執行帶有相同前景和背景色彩的 COLOR 命令, +ERRORLEVEL 會被 COLOR 命令設定為 1. + +舉例: "COLOR fc" 命令將產生出亮白色為底的淺紅色. + +. +:ERROR +錯誤 +. +:INFORMATION +資訊 +. +:PROGRAM_SWITCH_LANG +您已經將作用中的字碼頁變更為 %d. +您要載入對應此字碼頁的語言檔案 %s 嗎? +. +:PROGRAM_ALREADY_MOUNTED +磁碟機 %s: 已經被掛載. 先將它卸載後再重試一遍. +. +:PROGRAM_DRIVE_NO_EXIST +磁碟機 %s: 不存在於系統中. +. +:PROGRAM_DRIVE_WARN +是否真的要讓 DOSBox-X 存取您真實電腦中的%s機 %s? +. +:DRIVE_TYPE_FLOPPY +軟式磁碟 +. +:DRIVE_TYPE_REMOVABLE +卸除式磁碟 +. +:DRIVE_TYPE_NETWORK +網路磁碟 +. +:DRIVE_TYPE_HARD +硬式磁碟 +. +:DRIVE_TYPE_LOCAL +本機磁碟 +. +:DRIVE_TYPE_CDROM +唯讀式光碟 +. +:PROGRAM_CDDRIVE_WARN +光碟機 %s 目前使用此映像檔掛載: + +%s + +您現在要變更光碟映像檔嗎? +. +:PROGRAM_CDMOUNT_ERROR +不能掛載選取的光碟映像檔. +. +:ELTORITO_IMAGE +可開機光碟 (El Torito) 的軟碟映像 +. +:RAM_FLOPPY_IMAGE +RAM 軟碟映像 +. +:PROGRAM_FLOPPY_WARN +軟碟機 %s 目前使用此映像檔掛載: + +%s + +您要現在變更軟碟映像檔嗎? +. +:PROGRAM_FLOPPYMOUNT_ERROR +不能掛載選取的軟碟映像檔. +. +:PROGRAM_MOUNT_MORE_IMAGES +您還要掛載更多的映像檔嗎? +. +:PROGRAM_MOUNT_PATH_TOOLONG +被掛載的檔案路徑過長. +. +:PROGRAM_BOOT_FAILED +磁碟機 %s: 無法開機. +. +:PROGRAM_MOUNT_FAILED +磁碟機 %s: 無法掛載. +. +:PROGRAM_MOUNT_IMAGE +已掛載%s到磁碟機 %s: +%s %s +. +:ARCHIVE +壓縮檔 +. +:DISK_IMAGE +磁碟映像 +. +:READONLY_MODE +唯讀模式 +. +:PROGRAM_MOUNT_SELECT_DRIVE +替磁碟機 %s 選擇一個要掛載的磁碟機/目錄: 呈現為 %s +. +:PROGRAM_MOUNT_CDROM_SUPPORT +將目錄掛載為光碟機時提供有限支援. +. +:PROGRAM_MOUNT_NOT_MOUNTED +磁碟機 %s: 尚未被掛載. +. +:PROGRAM_PROGRAM_ALREADY +另一個程式早已在執行中. +. +:PROGRAM_SHELL_ALREADY +另一個殼層目前在執行中. +. +:PROGRAM_MOUNT_SUCCESS +磁碟機 %s 現在已被掛載到: +%s +. +:PROGRAM_WARN_QUICKLAUNCH +快速啟動會自動在 DOSBox-X 內掛載磁碟機 C. +C 槽已經被掛載. 您還要繼續嗎? +. +:PROGRAM_NO_EXECUTABLE +未找到可執行檔. +. +:PROGRAM_EXEC_FINISHED +程式已經完成執行. 您現在要卸載磁碟機 %s 嗎? +. +:PROGRAM_ASK_CHCP +磁碟機 %c: 要正常地存取可能需要用到字碼頁 %d. + +您現在想要將目前的字碼頁變更為 %d 嗎? +. +:PROGRAM_CHANGING_CODEPAGE +變更字碼頁 +. +:IMAGEMOUNT_CHANGE_DOSVER +掛載此類型的磁碟映像需要報告為 %s 或以上的 DOS 版本. +現在您想要自動變更報告的 DOS 版本為 %s 以及掛載這個磁碟映像嗎? +. +:MENU_DRIVE_NOTEXIST +磁碟機不存在, 或者是從磁碟映像掛載. +. +:MENU_SAVE_IMAGE_FAILED +無法儲存磁碟映像. +. +:MENU_JP_CPONLY +此功能只適用於日文的字碼頁 (932). +. +:MENU_CH_CPONLY +此功能只適用於中文的字碼頁 (936、950、或 951). +. +:MENU_GLIDE_ERROR +不能啟用 Glide 直通. 檢查 Glide wrapper 安裝. +. +:MENU_HIGH_INTENSITY_ERROR +目前的影像模式不支援醒目標記. +. +:MENU_SAVE_FILE_ERROR +不能儲存到檔案: %s +. +:MENU_INT2F_SUCCESS +INT 2Fh 勾點已被成功設定. +. +:MENU_INT2F_ALREADY_SET +INT 2Fh 勾點早已被設定. +. +:QUIT_DISABLED +在目前的情況, 結束 DOSBox-X 已被停用. +. +:QUIT_CONFIRM +將要結束 DOSBox-X. +您確定嗎? +. +:QUIT_GUEST_DISABLED +有客體系統正在執行時您不能結束 DOSBox-X. +. +:QUIT_GUEST_CONFIRM +目前有客體系統正在執行中. +您確定要現在直接結束嗎? +. +:QUIT_FILE_OPEN_DISABLED +有一個或多個檔案被開啟時您不能結束 DOSBox-X. +. +:QUIT_FILE_OPEN_CONFIRM +目前有一個或多個檔案被開啟中, 現在結束 DOSBox-X 或許會有風險. +您確定要現在直接結束嗎? +. +:QUIT_PROGRAM_DISABLED +有程式或遊戲正在執行時您不能結束 DOSBox-X. +. +:QUIT_PROGRAM_CONFIRM +目前有程式或遊戲正在執行中. +您確定要現在直接結束嗎? +. +:LANG_JP_INCOMPATIBLE +您指定的語言檔案使用了與日本 PC-98、JEGA/AX 系統不相容的字碼頁. + +您確定要在這個機器類型使用此語言檔嗎? +. +:LANG_DOSV_INCOMPATIBLE +您指定的語言檔案使用了與目前 DOS/V 系統不相容的字碼頁. + +您確定要在這個系統類型使用此語言檔嗎? +. +:LANG_CHANGE_CP +指定的語言檔案使用字碼頁 %d. 您想要字碼頁也跟著變更嗎? +. +:SCALER_LOAD_WARN +此縮放器可能不能正常運作、或有非預期的效果: + +%s + +您要強制載入縮放器嗎? +. +:PIXEL_SHADER_WARN +此像素著色器可能非必要、或有非預期的效果: + +%s + +您仍然要載入像素著色器嗎? + +(您可以在 pixelshader 的設定值後方加上 'forced' 來強制載入像素著色器並略過此訊息) +. +:PIXEL_SHADER_LOADED +已載入像素著色器 - %s +. +:MAPPEREDITOR_NOT_AVAILABLE +對應表編輯器目前不能用. +. +:OPL_REC_COMPLETED +Raw OPL 的輸出已存檔: + +%s +. +:OPL_CAPTURE_FAILED +目前應用程式正在使用 ESFM 原生模式, 這種模式不被 Raw OPL 格式支援, 所以不能擷取 Raw OPL 的輸出. +. +:TTF_DBCS_ONLY +此功能只適用於中文/日文/韓文的字碼頁. +. +:SAVE_FAILED +無法儲存目前狀態. +. +:SAVE_CORRUPTED +儲存狀態已損壞! 程式可能不能運作. +. +:SAVE_SCREENSHOT +螢幕抓圖已存檔: + +%s +. +:HELP_ABOUT_VERSION +DOSBox-X 版本 %s (%s %s %s位元)%s +. +:HELP_ABOUT_UPDATED +組建日期和時間: %s +. +:HELP_ABOUT_COPYRIGHT +著作權 %s-%s %s +. +:HELP_ABOUT_MAINTAINER +專案維護者: %s +. +:HELP_ABOUT_HOMEPAGE +DOSBox-X 首頁: %s +. diff --git a/contrib/windows/installer/DOSBox-X-installer.iss b/contrib/windows/installer/DOSBox-X-installer.iss index 8cc64097de5..908c840fb19 100644 --- a/contrib/windows/installer/DOSBox-X-installer.iss +++ b/contrib/windows/installer/DOSBox-X-installer.iss @@ -1,5 +1,5 @@ #define MyAppName "DOSBox-X" -#define MyAppVersion "2025.02.01" +#define MyAppVersion "2026.05.02" #define MyAppBit "(32/64bit for Windows)" #define MyAppPublisher "joncampbell123 [DOSBox-X Team]" #define MyAppURL "https://dosbox-x.com/" @@ -54,9 +54,13 @@ InfoAfterClickLabel=You have now installed DOSBox-X. Please note that you can cu Name: "en"; MessagesFile: "compiler:Default.isl" Name: "fr"; MessagesFile: "compiler:Default.isl" Name: "ge"; MessagesFile: "compiler:Default.isl" +Name: "hu"; MessagesFile: "compiler:Default.isl" +Name: "it"; MessagesFile: "compiler:Default.isl" Name: "ja"; MessagesFile: "compiler:Default.isl" Name: "ko"; MessagesFile: "compiler:Default.isl" +Name: "nl"; MessagesFile: "compiler:Default.isl" Name: "pt"; MessagesFile: "compiler:Default.isl" +Name: "ru"; MessagesFile: "compiler:Default.isl" Name: "sc"; MessagesFile: "compiler:Default.isl" Name: "sp"; MessagesFile: "compiler:Default.isl" Name: "tc"; MessagesFile: "compiler:Default.isl" @@ -66,9 +70,13 @@ Name: "tr"; MessagesFile: "compiler:Default.isl" en.LanguageID=$0409 fr.LanguageID=$040C ge.LanguageID=$0407 +hu.LanguageID=$040E +it.LanguageID=$0410 ja.LanguageID=$0411 ko.LanguageID=$0412 +nl.LanguageID=$0413 pt.LanguageID=$0416 +ru.LanguageID=$0419 sc.LanguageID=$0804 sp.LanguageID=$0C0A tc.LanguageID=$0404 @@ -114,6 +122,7 @@ Source: "..\..\translations\it\it_IT.lng"; DestDir: "{app}\languages"; Flags: ig Source: "..\..\translations\ja\ja_JP.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact Source: "..\..\translations\ko\ko_KR.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact Source: "..\..\translations\nl\nl_NL.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact +Source: "..\..\translations\pt\pt_BR.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact Source: "..\..\translations\ru\ru_RU.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact Source: "..\..\translations\tr\tr_TR.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact Source: "..\..\translations\zh\zh_CN.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact @@ -288,7 +297,7 @@ i: Integer; line, linetmp, section: String; FileLines: TStringList; begin - if FileExists(ExpandConstant('{app}\dosbox-x.conf')) and (PageLang.Values[1] or PageLang.Values[2] or PageLang.Values[3] or PageLang.Values[4] or PageLang.Values[5] or PageLang.Values[6] or PageLang.Values[7] or PageLang.Values[8] or PageLang.Values[9]) then + if FileExists(ExpandConstant('{app}\dosbox-x.conf')) and (PageLang.Values[1] or PageLang.Values[2] or PageLang.Values[3] or PageLang.Values[4] or PageLang.Values[5] or PageLang.Values[6] or PageLang.Values[7] or PageLang.Values[8] or PageLang.Values[9] or PageLang.Values[10] or PageLang.Values[11] or PageLang.Values[12] or PageLang.Values[13]) then begin FileLines := TStringList.Create; FileLines.LoadFromFile(ExpandConstant('{app}\dosbox-x.conf')); @@ -304,67 +313,91 @@ begin if (CompareText(linetmp, 'language') = 0) and (CompareText(section, 'dosbox') = 0) then begin linetmp := Trim(Copy(line, 1, Pos('=', line))); - if (PageLang.Values[1]) and FileExists(ExpandConstant('{app}\languages\fr_FR.lng')) then + if (PageLang.Values[1]) and FileExists(ExpandConstant('{app}\languages\nl_NL.lng')) then + FileLines[i] := linetmp+' nl_NL'; + if (PageLang.Values[2]) and FileExists(ExpandConstant('{app}\languages\fr_FR.lng')) then FileLines[i] := linetmp+' fr_FR'; - if (PageLang.Values[2]) and FileExists(ExpandConstant('{app}\languages\de_DE.lng')) then + if (PageLang.Values[3]) and FileExists(ExpandConstant('{app}\languages\de_DE.lng')) then FileLines[i] := linetmp+' de_DE'; - if (PageLang.Values[3]) and FileExists(ExpandConstant('{app}\languages\ja_JP.lng')) then + if (PageLang.Values[4]) and FileExists(ExpandConstant('{app}\languages\hu_HU.lng')) then + FileLines[i] := linetmp+' hu_HU'; + if (PageLang.Values[5]) and FileExists(ExpandConstant('{app}\languages\it_IT.lng')) then + FileLines[i] := linetmp+' it_IT'; + if (PageLang.Values[6]) and FileExists(ExpandConstant('{app}\languages\ja_JP.lng')) then FileLines[i] := linetmp+' ja_JP'; - if (PageLang.Values[4]) and FileExists(ExpandConstant('{app}\languages\ko_KR.lng')) then + if (PageLang.Values[7]) and FileExists(ExpandConstant('{app}\languages\ko_KR.lng')) then FileLines[i] := linetmp+' ko_KR'; - if (PageLang.Values[5]) and FileExists(ExpandConstant('{app}\languages\pt_BR.lng')) then + if (PageLang.Values[8]) and FileExists(ExpandConstant('{app}\languages\pt_BR.lng')) then FileLines[i] := linetmp+' pt_BR'; - if (PageLang.Values[6]) and FileExists(ExpandConstant('{app}\languages\zh_CN.lng')) then + if (PageLang.Values[9]) and FileExists(ExpandConstant('{app}\languages\ru_RU.lng')) then + FileLines[i] := linetmp+' ru_RU'; + if (PageLang.Values[10]) and FileExists(ExpandConstant('{app}\languages\zh_CN.lng')) then FileLines[i] := linetmp+' zh_CN'; - if (PageLang.Values[7]) and FileExists(ExpandConstant('{app}\languages\es_ES.lng')) then + if (PageLang.Values[11]) and FileExists(ExpandConstant('{app}\languages\es_ES.lng')) then FileLines[i] := linetmp+' es_ES'; - if (PageLang.Values[8]) and FileExists(ExpandConstant('{app}\languages\zh_TW.lng')) then + if (PageLang.Values[12]) and FileExists(ExpandConstant('{app}\languages\zh_TW.lng')) then FileLines[i] := linetmp+' zh_TW'; - if (PageLang.Values[9]) and FileExists(ExpandConstant('{app}\languages\tr_TR.lng')) then + if (PageLang.Values[13]) and FileExists(ExpandConstant('{app}\languages\tr_TR.lng')) then FileLines[i] := linetmp+' tr_TR'; end; if (CompareText(linetmp, 'keyboardlayout') = 0) and (CompareText(section, 'dos') = 0) then begin linetmp := Trim(Copy(line, 1, Pos('=', line))); if (PageLang.Values[1]) then - FileLines[i] := linetmp+' fr'; + FileLines[i] := linetmp+' nl'; if (PageLang.Values[2]) then - FileLines[i] := linetmp+' de'; + FileLines[i] := linetmp+' fr'; if (PageLang.Values[3]) then - FileLines[i] := linetmp+' jp'; + FileLines[i] := linetmp+' de'; if (PageLang.Values[4]) then - FileLines[i] := linetmp+' ko'; + FileLines[i] := linetmp+' hu'; if (PageLang.Values[5]) then - FileLines[i] := linetmp+' br'; + FileLines[i] := linetmp+' it'; if (PageLang.Values[6]) then - FileLines[i] := linetmp+' cn'; + FileLines[i] := linetmp+' jp'; if (PageLang.Values[7]) then - FileLines[i] := linetmp+' sp'; + FileLines[i] := linetmp+' ko'; if (PageLang.Values[8]) then - FileLines[i] := linetmp+' tw'; + FileLines[i] := linetmp+' br'; if (PageLang.Values[9]) then + FileLines[i] := linetmp+' ru'; + if (PageLang.Values[10]) then + FileLines[i] := linetmp+' cn'; + if (PageLang.Values[11]) then + FileLines[i] := linetmp+' sp'; + if (PageLang.Values[12]) then + FileLines[i] := linetmp+' tw'; + if (PageLang.Values[13]) then FileLines[i] := linetmp+' tr'; end; if (CompareText(linetmp, 'country') = 0) and (CompareText(section, 'config') = 0) then begin linetmp := Trim(Copy(line, 1, Pos('=', line))); if (PageLang.Values[1]) then - FileLines[i] := linetmp+' 33,859'; + FileLines[i] := linetmp+' 31,850'; if (PageLang.Values[2]) then - FileLines[i] := linetmp+' 49,850'; + FileLines[i] := linetmp+' 33,859'; if (PageLang.Values[3]) then - FileLines[i] := linetmp+' 81,932'; + FileLines[i] := linetmp+' 49,850'; if (PageLang.Values[4]) then - FileLines[i] := linetmp+' 82,949'; + FileLines[i] := linetmp+' 40,852'; if (PageLang.Values[5]) then - FileLines[i] := linetmp+' 55,860'; + FileLines[i] := linetmp+' 39,850'; if (PageLang.Values[6]) then - FileLines[i] := linetmp+' 86,936'; + FileLines[i] := linetmp+' 81,932'; if (PageLang.Values[7]) then - FileLines[i] := linetmp+' 34,858'; + FileLines[i] := linetmp+' 82,949'; if (PageLang.Values[8]) then - FileLines[i] := linetmp+' 886,950'; + FileLines[i] := linetmp+' 55,860'; if (PageLang.Values[9]) then + FileLines[i] := linetmp+' 7,866'; + if (PageLang.Values[10]) then + FileLines[i] := linetmp+' 86,936'; + if (PageLang.Values[11]) then + FileLines[i] := linetmp+' 34,858'; + if (PageLang.Values[12]) then + FileLines[i] := linetmp+' 886,950'; + if (PageLang.Values[13]) then FileLines[i] := linetmp+' 90,857'; break; end @@ -430,35 +463,47 @@ begin msg:='DOSBox-X supports language files to display messages in different languages. The language for the user interface and internal DOS is English by default, but you can select a different language for its user interface and internal DOS. The language and code page settings can be later modified in the configuration file (dosbox-x.conf).'; PageLang:=CreateInputOptionPage(PageOutput.ID, 'User interface and DOS language', 'Select the language for DOSBox-X''s user interface and internal DOS', msg, True, False); PageLang.Add('Default (English)'); + PageLang.Add('Dutch (Nederlands)'); PageLang.Add('French (Français)'); PageLang.Add('German (Deutsch)'); + PageLang.Add('Hungarian (magyar)'); + PageLang.Add('Italian (italiano)'); PageLang.Add('Japanese (日本語)'); PageLang.Add('Korean (한국어)'); PageLang.Add('Portuguese (português do Brasil)'); + PageLang.Add('Russian (русский (язык))'); PageLang.Add('Simplified Chinese (简体中文)'); PageLang.Add('Spanish (Español)'); PageLang.Add('Traditional Chinese (繁體/正體中文)'); PageLang.Add('Turkish (Türkçe)'); PageLang.Values[0] := True; lang := ExpandConstant('{language}'); - if lang = 'fr' then + if lang = 'nl' then PageLang.Values[1] := True; - if lang = 'ge' then + if lang = 'fr' then PageLang.Values[2] := True; - if lang = 'ja' then + if lang = 'ge' then PageLang.Values[3] := True; - if lang = 'ko' then + if lang = 'hu' then PageLang.Values[4] := True; - if lang = 'pt' then + if lang = 'it' then PageLang.Values[5] := True; - if lang = 'sc' then + if lang = 'ja' then PageLang.Values[6] := True; - if lang = 'sp' then + if lang = 'ko' then PageLang.Values[7] := True; - if lang = 'tc' then + if lang = 'pt' then PageLang.Values[8] := True; - if lang = 'tr' then + if lang = 'ru' then PageLang.Values[9] := True; + if lang = 'sc' then + PageLang.Values[10] := True; + if lang = 'sp' then + PageLang.Values[11] := True; + if lang = 'tc' then + PageLang.Values[12] := True; + if lang = 'tr' then + PageLang.Values[13] := True; msg:='DOSBox-X allows you to select a TrueType font (or OpenType font) for the TrueType font (TTF) output. It has a builtin TTF font as the default font for the output, but you may want to select a different TTF (or TTC/OTF) font than the default one.' #13#13 'This setting can be later modified in the DOSBox-X''s configuration file (dosbox-x.conf).'; PageFont:=CreateInputOptionPage(PageLang.ID, 'TrueType font', 'Select the font for the TrueType font output', msg, True, False); PageFont.Add('Default TrueType font'); @@ -586,22 +631,30 @@ begin begin lang:='Default (English)'; if (PageLang.Values[1]) then - lang:='French (Français)'; + lang:='Dutch (Nederlands)'; if (PageLang.Values[2]) then - lang:='German (Deutsch)'; + lang:='French (Français)'; if (PageLang.Values[3]) then - lang:='Japanese (日本語)'; + lang:='German (Deutsch)'; if (PageLang.Values[4]) then - lang:='Korean (한국어)'; + lang:='Hungarian (magyar)'; if (PageLang.Values[5]) then - lang:='Portuguese (português do Brasil)'; + lang:='Italian (italiano)'; if (PageLang.Values[6]) then - lang:='Simplified Chinese (简体中文)'; + lang:='Japanese (日本語)'; if (PageLang.Values[7]) then - lang:='Spanish (Español)'; + lang:='Korean (한국어)'; if (PageLang.Values[8]) then - lang:='Traditional Chinese (繁體/正體中文)'; + lang:='Portuguese (português do Brasil)'; if (PageLang.Values[9]) then + lang:='Russian (русский (язык))'; + if (PageLang.Values[10]) then + lang:='Simplified Chinese (简体中文)'; + if (PageLang.Values[11]) then + lang:='Spanish (Español)'; + if (PageLang.Values[12]) then + lang:='Traditional Chinese (繁體/正體中文)'; + if (PageLang.Values[13]) then lang:='Turkish (Türkçe)'; end; if not FileExists(ExpandConstant('{app}\dosbox-x.conf')) then @@ -774,25 +827,36 @@ begin SetupType := WizardSetupType(False); if SetupType = 'compact' then begin - if (not PageLang.Values[1]) and FileExists(ExpandConstant('{app}\languages\fr_FR.lng')) then + if (not PageLang.Values[1]) and FileExists(ExpandConstant('{app}\languages\nl_NL.lng')) then + DeleteFile(ExpandConstant('{app}\languages\nl_NL.lng')); + if (not PageLang.Values[2]) and FileExists(ExpandConstant('{app}\languages\fr_FR.lng')) then DeleteFile(ExpandConstant('{app}\languages\fr_FR.lng')); - if (not PageLang.Values[2]) and FileExists(ExpandConstant('{app}\languages\de_DE.lng')) then - DeleteFile(ExpandConstant('{app}\languages\de_DE.lng')); - if (not PageLang.Values[3]) and FileExists(ExpandConstant('{app}\languages\ja_JP.lng')) then + if (not PageLang.Values[3]) and FileExists(ExpandConstant('{app}\languages\de_DE.lng')) then + begin + DeleteFile(ExpandConstant('{app}\languages\de_DE.lng')); + DeleteFile(ExpandConstant('{app}\languages\de_pc98.lng')); + end; + if (not PageLang.Values[4]) and FileExists(ExpandConstant('{app}\languages\hu_HU.lng')) then + DeleteFile(ExpandConstant('{app}\languages\hu_HU.lng')); + if (not PageLang.Values[5]) and FileExists(ExpandConstant('{app}\languages\it_IT.lng')) then + DeleteFile(ExpandConstant('{app}\languages\it_IT.lng')); + if (not PageLang.Values[6]) and FileExists(ExpandConstant('{app}\languages\ja_JP.lng')) then DeleteFile(ExpandConstant('{app}\languages\ja_JP.lng')); - if (not PageLang.Values[4]) and FileExists(ExpandConstant('{app}\languages\ko_KR.lng')) then + if (not PageLang.Values[7]) and FileExists(ExpandConstant('{app}\languages\ko_KR.lng')) then DeleteFile(ExpandConstant('{app}\languages\ko_KR.lng')); - if (not PageLang.Values[5]) and FileExists(ExpandConstant('{app}\languages\pt_BR.lng')) then + if (not PageLang.Values[8]) and FileExists(ExpandConstant('{app}\languages\pt_BR.lng')) then DeleteFile(ExpandConstant('{app}\languages\pt_BR.lng')); - if (not PageLang.Values[6]) and FileExists(ExpandConstant('{app}\languages\zh_CN.lng')) then + if (not PageLang.Values[9]) and FileExists(ExpandConstant('{app}\languages\ru_RU.lng')) then + DeleteFile(ExpandConstant('{app}\languages\ru_RU.lng')); + if (not PageLang.Values[10]) and FileExists(ExpandConstant('{app}\languages\zh_CN.lng')) then DeleteFile(ExpandConstant('{app}\languages\zh_CN.lng')); - if (not PageLang.Values[7]) and FileExists(ExpandConstant('{app}\languages\es_ES.lng')) then + if (not PageLang.Values[11]) and FileExists(ExpandConstant('{app}\languages\es_ES.lng')) then DeleteFile(ExpandConstant('{app}\languages\es_ES.lng')); - if (not PageLang.Values[8]) and FileExists(ExpandConstant('{app}\languages\zh_TW.lng')) then + if (not PageLang.Values[12]) and FileExists(ExpandConstant('{app}\languages\zh_TW.lng')) then DeleteFile(ExpandConstant('{app}\languages\zh_TW.lng')); - if (not PageLang.Values[9]) and FileExists(ExpandConstant('{app}\languages\tr_TR.lng')) then + if (not PageLang.Values[13]) and FileExists(ExpandConstant('{app}\languages\tr_TR.lng')) then DeleteFile(ExpandConstant('{app}\languages\tr_TR.lng')); - if (not PageLang.Values[3]) and (not PageLang.Values[4]) and (not PageLang.Values[6]) and (not PageLang.Values[8]) and (not PageFont.Values[1]) then + if (not PageLang.Values[6]) and (not PageLang.Values[7]) and (not PageLang.Values[10]) and (not PageLang.Values[12]) and (not PageFont.Values[1]) then begin if FileExists(ExpandConstant('{app}\SarasaGothicFixed.ttf')) then DeleteFile(ExpandConstant('{app}\SarasaGothicFixed.ttf')); diff --git a/contrib/windows/installer/DOSBox-X-setup.iss b/contrib/windows/installer/DOSBox-X-setup.iss deleted file mode 100644 index 97f90e91cdf..00000000000 --- a/contrib/windows/installer/DOSBox-X-setup.iss +++ /dev/null @@ -1,1149 +0,0 @@ -#define MyAppName "DOSBox-X" -#define MyAppVersion "2025.02.01" -#define MyAppBit "(32-bit)" -#define MyAppPublisher "joncampbell123 [DOSBox-X Team]" -#define MyAppURL "https://dosbox-x.com/" -#define MyAppExeName "dosbox-x.exe" -#define MyAppBuildDate GetDateTimeString('yyyymmdd_hhnnss', '', '') - -[Setup] -; NOTE: The value of AppId uniquely identifies this application. -; Do not use the same AppId value in installers for other applications. -; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) -AppId={{63E5D76D-0092-415C-B97C-E0D2F4F6D2EC} -AppName={#MyAppName} -AppVersion={#MyAppVersion} {#MyAppBit} -;AppVerName={#MyAppName} {#MyAppVersion} -AppPublisher={#MyAppPublisher} -AppPublisherURL={#MyAppURL} -AppSupportURL={#MyAppURL} -AppUpdatesURL={#MyAppURL} -DefaultDirName={sd}\{#MyAppName} -DefaultGroupName={#MyAppName} -DisableProgramGroupPage=yes -InfoBeforeFile=setup_preamble.txt -InfoAfterFile=setup_epilogue.txt -OutputDir=.\ -OutputBaseFilename=dosbox-x-win32-{#MyAppVersion}-setup -SetupIconFile=..\..\icons\dosbox-x.ico -Compression=lzma -SolidCompression=yes -UsePreviousAppDir=yes -ChangesAssociations=yes -DisableStartupPrompt=yes -DisableWelcomePage=no -DisableDirPage=no -DisableReadyPage=no -ShowLanguageDialog=no -AlwaysShowDirOnReadyPage=yes -AlwaysShowGroupOnReadyPage=yes -ArchitecturesInstallIn64BitMode=x64 -PrivilegesRequired=lowest -;PrivilegesRequiredOverridesAllowed=dialog -UninstallDisplayName={#MyAppName} {#MyAppVersion} {#MyAppBit} -UninstallDisplayIcon={app}\{#MyAppExeName} -WizardSmallImageFile=..\..\icons\dosbox-x.bmp - -[Messages] -InfoBeforeLabel=Please read the general information about DOSBox-X below. -InfoAfterClickLabel=You have now installed DOSBox-X. Please note that you can customize DOSBox-X settings in dosbox-x.conf. Also, when in the DOSBox-X command line, you can type HELP for DOSBox-X help, or EXIT to close the DOSBox-X window. - -[Languages] -Name: "en"; MessagesFile: "compiler:Default.isl" -Name: "fr"; MessagesFile: "compiler:Default.isl" -Name: "ge"; MessagesFile: "compiler:Default.isl" -Name: "ja"; MessagesFile: "compiler:Default.isl" -Name: "ko"; MessagesFile: "compiler:Default.isl" -Name: "pt"; MessagesFile: "compiler:Default.isl" -Name: "sc"; MessagesFile: "compiler:Default.isl" -Name: "sp"; MessagesFile: "compiler:Default.isl" -Name: "tc"; MessagesFile: "compiler:Default.isl" -Name: "tr"; MessagesFile: "compiler:Default.isl" - -[LangOptions] -en.LanguageID=$0409 -fr.LanguageID=$040C -ge.LanguageID=$0407 -ja.LanguageID=$0411 -ko.LanguageID=$0412 -pt.LanguageID=$0416 -sc.LanguageID=$0804 -sp.LanguageID=$0C0A -tc.LanguageID=$0404 -tr.LanguageID=$041F - -[Tasks] -Name: "contextmenu"; Description: "Add ""Run/Open with DOSBox-X"" context menu for Windows Explorer" -Name: "commonoption"; Description: "Write common config options (instead of all) to the configuration file" -Name: "centerwindow"; Description: "Automatically center the window on the screen when DOSBox-X starts" -Name: "drivedelay"; Description: "Emulate the slowness of floppy drive and hard drive data transfers"; Flags: unchecked -Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" -Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked - -[Types] -Name: "typical"; Description: "Typical installation" -Name: "full"; Description: "Full installation" -Name: "compact"; Description: "Compact installation" -Name: "custom"; Description: "Custom installation"; Flags: iscustom - -[Components] -Name: "compact"; Description: "Install core files"; Types: full typical compact custom; Flags: fixed -Name: "typical"; Description: "Include typical components (such as shaders)"; Types: full typical custom -Name: "full"; Description: "Copy all DOSBox-X builds to sub-directories"; Types: full - -[Files] -Source: ".\readme.txt"; DestDir: "{app}"; DestName: "README.txt"; Flags: ignoreversion; Components: full typical compact -Source: ".\dosbox-x.reference.conf"; DestDir: "{app}"; Flags: ignoreversion; Components: full typical compact -Source: ".\dosbox-x.reference.full.conf"; DestDir: "{app}"; Flags: ignoreversion; Components: full typical compact -Source: ".\dosbox-x.reference.setup.conf"; DestDir: "{app}"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\..\CHANGELOG"; DestDir: "{app}"; DestName: "changelog.txt"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\..\COPYING"; DestDir: "{app}"; DestName: "COPYING.txt"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\fonts\FREECG98.BMP"; DestDir: "{app}"; Flags: ignoreversion; Components: full typical -Source: "..\..\fonts\wqy_1?pt.bdf"; DestDir: "{app}"; Flags: ignoreversion; Components: full typical -Source: "..\..\fonts\Nouveau_IBM.ttf"; DestDir: "{app}"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\fonts\SarasaGothicFixed.ttf"; DestDir: "{app}"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\translations\de\de_DE.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\translations\en\en_US.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\translations\es\es_ES.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\translations\fr\fr_FR.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\translations\ja\ja_JP.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\translations\ko\ko_KR.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\translations\tr\tr_TR.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\translations\zh\zh_CN.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\translations\zh\zh_TW.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact -Source: "..\..\glshaders\*"; DestDir: "{app}\glshaders"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: full typical -Source: "..\shaders\*"; DestDir: "{app}\shaders"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: full typical -Source: ".\drivez_readme.txt"; DestDir: "{app}\drivez"; DestName: "README.TXT"; Flags: ignoreversion; Components: full typical -Source: ".\windows_explorer_context_menu_installer.bat"; DestDir: "{app}\scripts"; DestName: "windows_explorer_context_menu_installer.bat"; Flags: ignoreversion; Components: full typical -Source: ".\windows_explorer_context_menu_uninstaller.bat"; DestDir: "{app}\scripts"; DestName: "windows_explorer_context_menu_uninstaller.bat"; Flags: ignoreversion; Components: full typical -Source: ".\inpout32.dll"; DestDir: "{app}"; DestName: "inpout32.dll"; Flags: ignoreversion; Components: full typical -Source: "Win32_builds\x86_Release\dosbox-x.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: CheckDirName('Win32_builds\x86_Release'); Components: full typical compact -Source: "Win32_builds\x86_Release_SDL2\dosbox-x.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: CheckDirName('Win32_builds\x86_Release_SDL2'); Components: full typical compact -Source: "Win32_builds\ARM_Release\dosbox-x.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: CheckDirName('Win32_builds\ARM_Release'); Components: full typical compact -Source: "Win32_builds\ARM_Release_SDL2\dosbox-x.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: CheckDirName('Win32_builds\ARM_Release_SDL2'); Components: full typical compact -Source: "Win32_builds\mingw\dosbox-x.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: CheckDirName('Win32_builds\mingw'); Components: full typical compact -Source: "Win32_builds\mingw-sdl2\dosbox-x.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: CheckDirName('Win32_builds\mingw-sdl2'); Components: full typical compact -Source: "Win32_builds\mingw-lowend\dosbox-x.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: CheckDirName('Win32_builds\mingw-lowend'); Components: full typical compact -Source: "Win32_builds\mingw-lowend-sdl2\dosbox-x.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: CheckDirName('Win32_builds\mingw-lowend-sdl2'); Components: full typical compact -Source: "Win32_builds\*"; DestDir: "{app}\Win32_builds"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: full -; NOTE: Don't use "Flags: ignoreversion" on any shared system files - -[Icons] -Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" -Name: "{group}\View DOSBox-X README file"; Filename: "{app}\README.TXT" -Name: "{group}\View DOSBox-X Wiki guide"; Filename: "https://dosbox-x.com/wiki" -Name: "{group}\View or edit dosbox-x.conf"; Filename: "notepad.exe"; Parameters: "{app}\dosbox-x.conf" -Name: "{group}\Run DOSBox-X Configuration Tool"; Filename: "{app}\{#MyAppExeName}"; Parameters: "-startui" -Name: "{group}\Run DOSBox-X Mapper Editor"; Filename: "{app}\{#MyAppExeName}"; Parameters: "-startmapper" -Name: "{group}\All DOSBox-X builds\x86 Release SDL1"; Filename: "{app}\Win32_builds\x86_Release\dosbox-x.exe"; WorkingDir: "{app}"; Components: full -Name: "{group}\All DOSBox-X builds\x86 Release SDL2"; Filename: "{app}\Win32_builds\x86_Release_SDL2\dosbox-x.exe"; WorkingDir: "{app}"; Components: full -Name: "{group}\All DOSBox-X builds\ARM Release SDL1"; Filename: "{app}\Win32_builds\ARM_Release\dosbox-x.exe"; WorkingDir: "{app}"; Check: not (IsX86 or IsX64); Components: full -Name: "{group}\All DOSBox-X builds\ARM Release SDL2"; Filename: "{app}\Win32_builds\ARM_Release_SDL2\dosbox-x.exe"; WorkingDir: "{app}"; Check: not (IsX86 or IsX64); Components: full -Name: "{group}\All DOSBox-X builds\32-bit MinGW SDL1"; Filename: "{app}\Win32_builds\mingw\dosbox-x.exe"; WorkingDir: "{app}"; Check: IsWindowsVersionOrNewer(6, 0); Components: full -Name: "{group}\All DOSBox-X builds\32-bit MinGW SDL2"; Filename: "{app}\Win32_builds\mingw-sdl2\dosbox-x.exe"; WorkingDir: "{app}"; check: IsWindowsVersionOrNewer(6, 0); Components: full -Name: "{group}\All DOSBox-X builds\32-bit MinGW lowend"; Filename: "{app}\Win32_builds\mingw-lowend\dosbox-x.exe"; WorkingDir: "{app}"; check: Is32BitInstaller(); Components: full -Name: "{group}\All DOSBox-X builds\32-bit MinGW lowend SDL2"; Filename: "{app}\Win32_builds\mingw-lowend-sdl2\dosbox-x.exe"; WorkingDir: "{app}"; check: Is32BitInstaller(); Components: full -Name: "{code:GetDesktopFolder}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon -Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon - -[InstallDelete] -Type: files; Name: "{group}\Run DOSBox-X Configuration UI.lnk" -Type: files; Name: "{group}\All DOSBox-X builds\x86 Release SDL1.lnk"; Components: typical compact -Type: files; Name: "{group}\All DOSBox-X builds\x86 Release SDL2.lnk"; Components: typical compact -Type: files; Name: "{group}\All DOSBox-X builds\ARM Release SDL1.lnk"; Components: typical compact -Type: files; Name: "{group}\All DOSBox-X builds\ARM Release SDL2.lnk"; Components: typical compact -Type: files; Name: "{group}\All DOSBox-X builds\32-bit MinGW SDL1.lnk"; Components: typical compact -Type: files; Name: "{group}\All DOSBox-X builds\32-bit MinGW SDL2.lnk"; Components: typical compact -Type: files; Name: "{group}\All DOSBox-X builds\32-bit MinGW SDL1 lowend.lnk"; Components: typical compact -Type: files; Name: "{group}\All DOSBox-X builds\32-bit MinGW SDL2 lowend.lnk"; Components: typical compact -Type: files; Name: "{group}\All DOSBox-X builds\32-bit MinGW SDL1 drawn.lnk"; Components: typical compact - -[Registry] -Root: HKCU; Subkey: "Software\DOSBox-X"; Flags: uninsdeletekeyifempty -Root: HKCU; Subkey: "Software\DOSBox-X"; ValueType: string; ValueName: "Path"; ValueData: "{app}"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\DOSBox-X"; ValueType: string; ValueName: "Version"; ValueData: "{#MyAppVersion}"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\Directory\shell\DOSBox-X"; ValueType: string; ValueName: ""; ValueData: "Open with DOSBox-X"; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletevalue -Root: HKCU; Subkey: "Software\Classes\Directory\shell\DOSBox-X"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\dosbox-x.exe"",0"; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\Directory\shell\DOSBox-X\command"; ValueType: string; ValueName: ""; ValueData: """{app}\dosbox-x.exe"" -prerun -defaultdir ""{app} "" ""%v """; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\Directory\Background\shell\DOSBox-X"; ValueType: string; ValueName: ""; ValueData: "Open with DOSBox-X"; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletevalue -Root: HKCU; Subkey: "Software\Classes\Directory\Background\shell\DOSBox-X"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\dosbox-x.exe"",0"; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\Directory\Background\shell\DOSBox-X\command"; ValueType: string; ValueName: ""; ValueData: """{app}\dosbox-x.exe"" -prerun -defaultdir ""{app} "" ""%v """; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.exe\shell\Run with DOSBox-X"; ValueType: none; ValueName: ""; ValueData: ""; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletevalue -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.exe\shell\Run with DOSBox-X"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\dosbox-x.exe"",0"; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.exe\shell\Run with DOSBox-X\command"; ValueType: string; ValueName: ""; ValueData: """{app}\dosbox-x.exe"" -fastlaunch -prerun -defaultdir ""{app} "" ""%1"""; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.com\shell\Run with DOSBox-X"; ValueType: none; ValueName: ""; ValueData: ""; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletevalue -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.com\shell\Run with DOSBox-X"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\dosbox-x.exe"",0"; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.com\shell\Run with DOSBox-X\command"; ValueType: string; ValueName: ""; ValueData: """{app}\dosbox-x.exe"" -fastlaunch -prerun -defaultdir ""{app} "" ""%1"""; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.bat\shell\Run with DOSBox-X"; ValueType: none; ValueName: ""; ValueData: ""; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletevalue -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.bat\shell\Run with DOSBox-X"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\dosbox-x.exe"",0"; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.bat\shell\Run with DOSBox-X\command"; ValueType: string; ValueName: ""; ValueData: """{app}\dosbox-x.exe"" -fastlaunch -prerun -defaultdir ""{app} "" ""%1"""; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.conf\shell\Open with DOSBox-X"; ValueType: none; ValueName: ""; ValueData: ""; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletevalue -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.conf\shell\Open with DOSBox-X"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\dosbox-x.exe"",0"; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.conf\shell\Open with DOSBox-X\command"; ValueType: string; ValueName: ""; ValueData: """{app}\dosbox-x.exe"" -conf ""%1"""; Check: IsTaskSelected('contextmenu'); Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\Classes\Directory\shell\DOSBox-X"; ValueType: none; Check: not IsTaskSelected('contextmenu'); Flags: deletekey -Root: HKCU; Subkey: "Software\Classes\Directory\shell\DOSBox-X\command"; ValueType: none; Check: not IsTaskSelected('contextmenu'); Flags: deletekey -Root: HKCU; Subkey: "Software\Classes\Directory\Background\shell\DOSBox-X"; ValueType: none; Check: not IsTaskSelected('contextmenu'); Flags: deletekey -Root: HKCU; Subkey: "Software\Classes\Directory\Background\shell\DOSBox-X\command"; ValueType: none; Check: not IsTaskSelected('contextmenu'); Flags: deletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.exe\shell\Run with DOSBox-X"; ValueType: none; Check: not IsTaskSelected('contextmenu'); Flags: deletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.exe\shell\Run with DOSBox-X\command"; ValueType: none; Check: not IsTaskSelected('contextmenu'); Flags: deletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.com\shell\Run with DOSBox-X"; ValueType: none; Check: not IsTaskSelected('contextmenu'); Flags: deletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.com\shell\Run with DOSBox-X\command"; ValueType: none; Check: not IsTaskSelected('contextmenu'); Flags: deletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.bat\shell\Run with DOSBox-X"; ValueType: none; Check: not IsTaskSelected('contextmenu'); Flags: deletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.bat\shell\Run with DOSBox-X\command"; ValueType: none; Check: not IsTaskSelected('contextmenu'); Flags: deletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.conf\shell\Open with DOSBox-X"; ValueType: none; Check: not IsTaskSelected('contextmenu'); Flags: deletekey -Root: HKCU; Subkey: "Software\Classes\SystemFileAssociations\.conf\shell\Open with DOSBox-X\command"; ValueType: none; Check: not IsTaskSelected('contextmenu'); Flags: deletekey - -[Run] -Filename: "{app}\readme.txt"; Description: "View README.txt"; Flags: waituntilterminated runascurrentuser postinstall shellexec skipifsilent -Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent - -[UninstallDelete] -Type: files; Name: "{app}\stderr.txt" - -[Code] -var - msg, lang: string; - HelpButton: TNewButton; - PageCustom: TInputFileWizardPage; - PageBuild, PageLang, PageOutput, PageFont, PageVer: TInputOptionWizardPage; -function IsVerySilent(): Boolean; -var - k: Integer; -begin - Result := False; - for k := 1 to ParamCount do - if CompareText(ParamStr(k), '/verysilent') = 0 then - begin - Result := True; - Break; - end; -end; -function IsWindowsVersionOrNewer(Major, Minor: Integer): Boolean; -var - Version: TWindowsVersion; -begin - GetWindowsVersionEx(Version); - Result := (Version.Major > Major) or ((Version.Major = Major) and (Version.Minor >= Minor)); -end; -function Is32BitInstaller(): Boolean; -begin - if True then - begin - Result := True; - end - else - Result := False; -end; -procedure HelpButtonOnClick(Sender: TObject); -begin - MsgBox('The Setup pre-selects a Windows build for you according to your platform automatically, but you can change the default build to run if you encounter specific problem(s) with the pre-selected one.' #13#13 'For example, while the SDL1 version is the default version to run, the SDL2 version may be preferred over the SDL1 version for certain features such as improved keyboard and touchscreen support. Also, MinGW builds may work better with certain features (such as the Slirp backend for the NE2000 networking in standard MinGW builds) than Visual Studio builds even though they do not come with the debugger.' #13#13 'If you are not sure about which build to use, then you can just leave it unmodified and use the pre-selected one as the default build.', mbConfirmation, MB_OK); -end; -procedure CreateHelpButton(X: integer; Y: integer; W: integer; H: integer); -begin - HelpButton := TNewButton.Create(WizardForm); - HelpButton.Left := X; - HelpButton.Top := Y; - HelpButton.Width := W; - HelpButton.Height := H; - HelpButton.Caption := '&Help'; - HelpButton.OnClick := @HelpButtonOnClick; - HelpButton.Parent := WizardForm; -end; -procedure SetLanguage(); -var -i: Integer; -line, linetmp, section: String; -FileLines: TStringList; -begin - if FileExists(ExpandConstant('{app}\dosbox-x.conf')) and (PageLang.Values[1] or PageLang.Values[2] or PageLang.Values[3] or PageLang.Values[4] or PageLang.Values[5] or PageLang.Values[6] or PageLang.Values[7] or PageLang.Values[8] or PageLang.Values[9]) then - begin - FileLines := TStringList.Create; - FileLines.LoadFromFile(ExpandConstant('{app}\dosbox-x.conf')); - section := ''; - for i := 0 to FileLines.Count - 1 do - begin - line := Trim(FileLines[i]); - if (Length(line)>2) and (Copy(line, 1, 1) = '[') and (Copy(line, Length(line), 1) = ']') then - section := Copy(line, 2, Length(line)-2); - if (Length(line)>0) and (Copy(line, 1, 1) <> '#') and (Copy(line, 1, 1) <> '[') and (Pos('=', line) > 1) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line) - 1)); - if (CompareText(linetmp, 'language') = 0) and (CompareText(section, 'dosbox') = 0) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line))); - if (PageLang.Values[1]) and FileExists(ExpandConstant('{app}\languages\fr_FR.lng')) then - FileLines[i] := linetmp+' fr_FR'; - if (PageLang.Values[2]) and FileExists(ExpandConstant('{app}\languages\de_DE.lng')) then - FileLines[i] := linetmp+' de_DE'; - if (PageLang.Values[3]) and FileExists(ExpandConstant('{app}\languages\ja_JP.lng')) then - FileLines[i] := linetmp+' ja_JP'; - if (PageLang.Values[4]) and FileExists(ExpandConstant('{app}\languages\ko_KR.lng')) then - FileLines[i] := linetmp+' ko_KR'; - if (PageLang.Values[5]) and FileExists(ExpandConstant('{app}\languages\pt_BR.lng')) then - FileLines[i] := linetmp+' pt_BR'; - if (PageLang.Values[6]) and FileExists(ExpandConstant('{app}\languages\zh_CN.lng')) then - FileLines[i] := linetmp+' zh_CN'; - if (PageLang.Values[7]) and FileExists(ExpandConstant('{app}\languages\es_ES.lng')) then - FileLines[i] := linetmp+' es_ES'; - if (PageLang.Values[8]) and FileExists(ExpandConstant('{app}\languages\zh_TW.lng')) then - FileLines[i] := linetmp+' zh_TW'; - if (PageLang.Values[9]) and FileExists(ExpandConstant('{app}\languages\tr_TR.lng')) then - FileLines[i] := linetmp+' tr_TR'; - end; - if (CompareText(linetmp, 'keyboardlayout') = 0) and (CompareText(section, 'dos') = 0) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line))); - if (PageLang.Values[1]) then - FileLines[i] := linetmp+' fr'; - if (PageLang.Values[2]) then - FileLines[i] := linetmp+' de'; - if (PageLang.Values[3]) then - FileLines[i] := linetmp+' jp'; - if (PageLang.Values[4]) then - FileLines[i] := linetmp+' ko'; - if (PageLang.Values[5]) then - FileLines[i] := linetmp+' br'; - if (PageLang.Values[6]) then - FileLines[i] := linetmp+' cn'; - if (PageLang.Values[7]) then - FileLines[i] := linetmp+' sp'; - if (PageLang.Values[8]) then - FileLines[i] := linetmp+' tw'; - if (PageLang.Values[9]) then - FileLines[i] := linetmp+' tr'; - end; - if (CompareText(linetmp, 'country') = 0) and (CompareText(section, 'config') = 0) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line))); - if (PageLang.Values[1]) then - FileLines[i] := linetmp+' 33,859'; - if (PageLang.Values[2]) then - FileLines[i] := linetmp+' 49,850'; - if (PageLang.Values[3]) then - FileLines[i] := linetmp+' 81,932'; - if (PageLang.Values[4]) then - FileLines[i] := linetmp+' 82,949'; - if (PageLang.Values[5]) then - FileLines[i] := linetmp+' 55,860'; - if (PageLang.Values[6]) then - FileLines[i] := linetmp+' 86,936'; - if (PageLang.Values[7]) then - FileLines[i] := linetmp+' 34,858'; - if (PageLang.Values[8]) then - FileLines[i] := linetmp+' 886,950'; - if (PageLang.Values[9]) then - FileLines[i] := linetmp+' 90,857'; - break; - end - end - end; - FileLines.SaveToFile(ExpandConstant('{app}\dosbox-x.conf')); - end; -end; -procedure InitializeWizard(); -begin - if not Is32BitInstaller() and not IsWin64 then - begin - if not IsVerySilent() then - MsgBox('You are running 32-bit Windows. Use the 32-bit installer instead of this 64-bit installer.', mbInformation, MB_OK); - abort(); - end; - msg:='The selected build will be the default build when you run DOSBox-X from the Windows Start Menu or the desktop. DOSBox-X provides both SDL1 and SDL2 builds, and while SDL1 builds are preselected, you may prefer SDL2 builds if for example you encounter some issues with a non-U.S. keyboard layout in SDL1 builds. Please click the "Help" button below for more information about the DOSBox-X build selection.'; - PageBuild:=CreateInputOptionPage(wpSelectDir, 'Default DOSBox-X build (32-bit)', 'Select the default DOSBox-X build to run', msg, True, False); - PageBuild.AddEx('Visual Studio build (default release)', 0, True); - PageBuild.AddEx('Visual Studio build for ARM platform', 0, True); - if Is32BitInstaller() then - begin - PageBuild.AddEx('MinGW standard build (for newer systems)', 0, True); - PageBuild.AddEx('MinGW low-end build (for older systems)', 0, True); - end - else - begin - PageBuild.AddEx('MinGW standard build (alternative release)', 0, True); - PageBuild.AddEx('MinGW low-end build (32-bit only)', 0, True); - PageBuild.CheckListBox.ItemEnabled[3] := False; - end; - if IsX86 or IsX64 then - begin - PageBuild.CheckListBox.ItemEnabled[1] := False; - end; - if not IsWindowsVersionOrNewer(6, 0) then - PageBuild.CheckListBox.ItemEnabled[2] := False; - if IsARM64 then - begin - PageBuild.Values[1] := True; - end - else - PageBuild.Values[0] := True; - PageBuild.CheckListBox.AddGroup('Check the following box to select the SDL2 build as the default DOSBox-X build.', '', 0, nil); - PageBuild.CheckListBox.AddCheckBox('Default to SDL2 build (instead of SDL1 build) ', '', 0, False, True, False, True, nil); - CreateHelpButton(ScaleX(20), WizardForm.CancelButton.Top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height); - msg:='DOSBox-X supports different video output systems for different purposes.' #13#13 'By default it uses the Direct3D output, but you may want to select the OpenGL pixel-perfect scaling output for improved image quality (not available if you had selected an ARM build). Also, if you use text-mode DOS applications and/or the DOS shell frequently you probably want to select the TrueType font (TTF) output to make the text screen look much better by using scalable TrueType fonts.' #13#13 'This setting can be later modified in the DOSBox-X''s configuration file (dosbox-x.conf), or from DOSBox-X''s Video menu.'; - PageOutput:=CreateInputOptionPage(PageBuild.ID, 'Video output for DOSBox-X', 'Specify the DOSBox-X video output system', msg, True, False); - PageOutput.Add('Default output (Direct3D)'); - PageOutput.Add('OpenGL with pixel-perfect scaling'); - PageOutput.Add('TrueType font (TTF) / Direct3D output'); - PageOutput.Values[2] := True; - msg:='DOSBox-X supports language files to display messages in different languages. The language for the user interface and internal DOS is English by default, but you can select a different language for its user interface and internal DOS. The language and code page settings can be later modified in the configuration file (dosbox-x.conf).'; - PageLang:=CreateInputOptionPage(PageOutput.ID, 'User interface and DOS language', 'Select the language for DOSBox-X''s user interface and internal DOS', msg, True, False); - PageLang.Add('Default (English)'); - PageLang.Add('French (Français)'); - PageLang.Add('German (Deutsch)'); - PageLang.Add('Japanese (日本語)'); - PageLang.Add('Korean (한국어)'); - PageLang.Add('Portuguese (português do Brasil)'); - PageLang.Add('Simplified Chinese (简体中文)'); - PageLang.Add('Spanish (Español)'); - PageLang.Add('Traditional Chinese (繁體/正體中文)'); - PageLang.Add('Turkish (Türkçe)'); - PageLang.Values[0] := True; - lang := ExpandConstant('{language}'); - if lang = 'fr' then - PageLang.Values[1] := True; - if lang = 'ge' then - PageLang.Values[2] := True; - if lang = 'ja' then - PageLang.Values[3] := True; - if lang = 'ko' then - PageLang.Values[4] := True; - if lang = 'pt' then - PageLang.Values[5] := True; - if lang = 'sc' then - PageLang.Values[6] := True; - if lang = 'sp' then - PageLang.Values[7] := True; - if lang = 'tc' then - PageLang.Values[8] := True; - if lang = 'tr' then - PageLang.Values[9] := True; - msg:='DOSBox-X allows you to select a TrueType font (or OpenType font) for the TrueType font (TTF) output. It has a builtin TTF font as the default font for the output, but you may want to select a different TTF (or TTC/OTF) font than the default one.' #13#13 'This setting can be later modified in the DOSBox-X''s configuration file (dosbox-x.conf).'; - PageFont:=CreateInputOptionPage(PageLang.ID, 'TrueType font', 'Select the font for the TrueType font output', msg, True, False); - PageFont.Add('Default TrueType font'); - PageFont.Add('Sarasa Gothic font'); - PageFont.Add('Consolas font'); - PageFont.Add('Courier New font'); - PageFont.Add('Nouveau IBM font'); - PageFont.Add('Custom TrueType font'); - if not FileExists(ExpandConstant('{fonts}\consola.ttf')) then - PageFont.CheckListBox.ItemEnabled[2] := False; - if not FileExists(ExpandConstant('{fonts}\cour.ttf')) then - PageFont.CheckListBox.ItemEnabled[3] := False; - PageFont.Values[0] := True; - PageCustom := CreateInputFilePage(PageFont.ID, 'TrueType font', 'Select a custom TrueType font', 'Please select where your custom TrueType font (or OpenType font) is located, then click "Next" to continue.'); - PageCustom.Add('&Location of your custom TrueType font (TTF/TTC/OTF):', 'TrueType font files|*.ttf;*.ttc;*.otf|All files|*.*','.ttf;.ttc;.otf'); - msg:='You can specify a default DOS version for DOSBox-X to report to itself and DOS programs. This can sometimes change the feature sets of DOSBox-X. For example, selecting 7.10 as the reported DOS version will enable support for Windows-style long filenames (LFN) and FAT32 disk images (>2GB disk images) by default.' #13#13 'If you are not sure about which DOS version to report, you can also leave this unselected, then a preset DOS version will be reported (usually 5.00).' #13#13 'This setting can be later modified in the DOSBox-X''s configuration file (dosbox-x.conf).'; - PageVer:=CreateInputOptionPage(PageCustom.ID, 'Reported DOS version', 'Specify the default DOS version to report', msg, True, False); - PageVer.Add('DOS version 3.30'); - PageVer.Add('DOS version 5.00 (reported by default)'); - PageVer.Add('DOS version 6.22'); - PageVer.Add('DOS version 7.10 (for LFN and FAT32 support)'); -end; -function ShouldSkipPage(PageID: Integer): Boolean; -var - i: Integer; - defcp: Boolean; - line, linetmp, section: String; - FileLines: TStringList; -begin - if (PageID = PageLang.ID) then - begin - if FileExists(ExpandConstant('{app}\dosbox-x.conf')) then - begin - if (ExpandConstant('{language}') = 'en') or (WizardSetupType(False) = 'compact') then - begin - Result := True; - exit; - end; - FileLines := TStringList.Create; - FileLines.LoadFromFile(ExpandConstant('{app}\dosbox-x.conf')); - section := ''; - defcp := False; - for i := 0 to FileLines.Count - 1 do - begin - line := Trim(FileLines[i]); - if (Length(line)>2) and (Copy(line, 1, 1) = '[') and (Copy(line, Length(line), 1) = ']') then - section := Copy(line, 2, Length(line)-2); - if (Length(line)>0) and (Copy(line, 1, 1) <> '#') and (Copy(line, 1, 1) <> '[') and (Pos('=', line) > 1) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line) - 1)); - if (CompareText(linetmp, 'country') = 0) and (CompareText(section, 'config') = 0) then - begin - linetmp := Trim(Copy(line, Pos('=', line) + 1, Length(line))); - if (CompareText(linetmp, '') = 0) then - defcp := True; - break; - end; - end; - end; - Result := not defcp; - end - else - Result := False; - end - else - Result := ((PageID = PageOutput.ID) or (PageID = PageFont.ID) or (PageID = PageCustom.ID) or (PageID = PageVer.ID)) and FileExists(ExpandConstant('{app}\dosbox-x.conf')) or ((PageID = PageFont.ID) and (not PageOutput.Values[2] or PageLang.Values[3] or PageLang.Values[4] or PageLang.Values[6] or PageLang.Values[8])) or ((PageID = PageCustom.ID) and (not PageOutput.Values[2] or not PageFont.Values[5])); -end; -function NextButtonClick(CurPageID: Integer): Boolean; -begin - Result := True; - if (CurPageID = PageCustom.ID) and (Length(PageCustom.Edits[0].Text) = 0) then - begin - MsgBox('Please select a custom TrueType font (or OpenType font) file.', mbError, MB_OK); - WizardForm.ActiveControl := PageCustom.Edits[0]; - Result := False; - end; -end; -procedure CurPageChanged(CurPageID: Integer); -begin - HelpButton.Visible := CurPageID = PageBuild.ID; - if (CurPageID=wpSelectDir) then - begin - if (IsAdminLoggedOn or IsPowerUserLoggedOn) and (WizardDirValue=ExpandConstant('{localappdata}\{#MyAppName}')) then - begin - WizardForm.DirEdit.Text:=ExpandConstant('{commonappdata}\{#MyAppName}'); - MsgBox('You had previously installed DOSBox-X in a standard user directory, but you are currently running as an administrator or privileged user.' #13#13 'The installer will automatically change the default install directory.', mbConfirmation, MB_OK); - end - else if not (IsAdminLoggedOn or IsPowerUserLoggedOn) and (WizardDirValue=ExpandConstant('{pf}\{#MyAppName}')) then - begin - WizardForm.DirEdit.Text:=ExpandConstant('{commonappdata}\{#MyAppName}'); - MsgBox('You had installed DOSBox-X in ' + ExpandConstant('{pf}\{#MyAppName}') + ' previously, but you are currently running as an unprivileged user.' #13#13 'The installer will automatically change the default install directory, or you might want to run the installer as an administrator instead.', mbConfirmation, MB_OK); - end - end - else if (CurPageID = wpReady) then - begin - Wizardform.ReadyMemo.Lines.Add(''); - Wizardform.ReadyMemo.Lines.Add('Default DOSBox-X build:'); - msg:='32-bit '; - if (PageBuild.Values[0]) and (not PageBuild.Values[5]) then - msg:=msg+'Visual Studio build SDL1'; - if (PageBuild.Values[0]) and (PageBuild.Values[5]) then - msg:=msg+'Visual Studio build SDL2'; - if (PageBuild.Values[1]) and (not PageBuild.Values[5]) then - msg:=msg+'Visual Studio ARM build SDL1'; - if (PageBuild.Values[1]) and (PageBuild.Values[5]) then - msg:=msg+'Visual Studio ARM build SDL2'; - if (PageBuild.Values[2]) and (not PageBuild.Values[5]) then - msg:=msg+'MinGW standard build SDL1'; - if (PageBuild.Values[2]) and (PageBuild.Values[5]) then - msg:=msg+'MinGW standard build SDL2'; - if Is32BitInstaller() and (PageBuild.Values[3]) and (not PageBuild.Values[5]) then - msg:=msg+'MinGW low-end build SDL1'; - if Is32BitInstaller() and (PageBuild.Values[3]) and (PageBuild.Values[5]) then - msg:=msg+'MinGW low-end build SDL2'; - Wizardform.ReadyMemo.Lines.Add(' '+msg); - lang:=''; - if PageLang.Values[0] or PageLang.Values[1] or PageLang.Values[2] or PageLang.Values[3] or PageLang.Values[4] or PageLang.Values[5] or PageLang.Values[6] or PageLang.Values[7] or PageLang.Values[8] or PageLang.Values[9] then - begin - lang:='Default (English)'; - if (PageLang.Values[1]) then - lang:='French (Français)'; - if (PageLang.Values[2]) then - lang:='German (Deutsch)'; - if (PageLang.Values[3]) then - lang:='Japanese (日本語)'; - if (PageLang.Values[4]) then - lang:='Korean (한국어)'; - if (PageLang.Values[5]) then - lang:='Portuguese (português do Brasil)'; - if (PageLang.Values[6]) then - lang:='Simplified Chinese (简体中文)'; - if (PageLang.Values[7]) then - lang:='Spanish (Español)'; - if (PageLang.Values[8]) then - lang:='Traditional Chinese (繁體/正體中文)'; - if (PageLang.Values[9]) then - lang:='Turkish (Türkçe)'; - end; - if not FileExists(ExpandConstant('{app}\dosbox-x.conf')) then - begin - if PageOutput.Values[0] or PageOutput.Values[1] or PageOutput.Values[2] then - begin - Wizardform.ReadyMemo.Lines.Add(''); - Wizardform.ReadyMemo.Lines.Add('Video output for DOSBox-X:'); - msg:='Default output (Direct3D)'; - if (PageOutput.Values[1]) then - msg:='OpenGL with pixel-perfect scaling'; - if (PageOutput.Values[2]) then - msg:='TrueType font (TTF) / Direct3D output'; - Wizardform.ReadyMemo.Lines.Add(' '+msg); - end; - if Length(lang) > 0 then - begin - Wizardform.ReadyMemo.Lines.Add(''); - Wizardform.ReadyMemo.Lines.Add('User interface and DOS language:'); - Wizardform.ReadyMemo.Lines.Add(' '+lang); - end; - if PageFont.Values[0] or PageFont.Values[1] or PageFont.Values[2] or PageFont.Values[3] or PageFont.Values[4] or PageFont.Values[5] then - begin - Wizardform.ReadyMemo.Lines.Add(''); - Wizardform.ReadyMemo.Lines.Add('TrueType font:'); - msg:='Default TrueType font'; - if (PageFont.Values[1]) then - msg:='SarasaGothicFixed font'; - if (PageFont.Values[2]) then - msg:='Consolas font'; - if (PageFont.Values[3]) then - msg:='Courier New font'; - if (PageFont.Values[4]) then - msg:='Nouveau IBM font'; - if (PageFont.Values[5]) then - msg:='Custom TrueType font: ' + PageCustom.Values[0]; - Wizardform.ReadyMemo.Lines.Add(' '+msg); - end; - if PageVer.Values[0] or PageVer.Values[1] or PageVer.Values[2] or PageVer.Values[3] then - begin - Wizardform.ReadyMemo.Lines.Add(''); - Wizardform.ReadyMemo.Lines.Add('Reported DOS version:'); - msg:='Default'; - if (PageVer.Values[0]) then - msg:='3.30'; - if (PageVer.Values[1]) then - msg:='5.00'; - if (PageVer.Values[2]) then - msg:='6.22'; - if (PageVer.Values[3]) then - msg:='7.10'; - Wizardform.ReadyMemo.Lines.Add(' '+msg); - end - end - else if Length(lang) > 0 then - begin - Wizardform.ReadyMemo.Lines.Add(''); - Wizardform.ReadyMemo.Lines.Add('User interface and DOS language:'); - Wizardform.ReadyMemo.Lines.Add(' '+lang); - end - end -end; -procedure CurStepChanged(CurrentStep: TSetupStep); -var - i, j, k, adv, res: Integer; - tsection, vsection, addcp, dosvcn, dosvtw, dosvset, found1, found2, found3, found4, found5: Boolean; - refname, section, line, linetmp, lineold, linenew, SetupType: String; - FileLines, FileLinesold, FileLinesnew, FileLinesave: TStringList; -begin - if (CurrentStep = ssPostInstall) then - begin - refname:='{app}\dosbox-x.reference.full.conf'; - if FileExists(ExpandConstant('{app}\dosbox-x.conf')) then - begin - refname:='{app}\dosbox-x.reference.setup.conf'; - end - else if IsTaskSelected('commonoption') then - begin - refname:='{app}\dosbox-x.reference.conf'; - end; - if not FileExists(ExpandConstant(refname)) then - begin - MsgBox('Cannot find the ' + Copy(refname, 7, 33) + ' file.', mbError, MB_OK); - DeleteFile(ExpandConstant('{app}\dosbox-x.reference.setup.conf')); - Exit; - end; - refname:='{app}\dosbox-x.reference.full.conf'; - if IsTaskSelected('commonoption') then - refname:='{app}\dosbox-x.reference.conf'; - if FileExists(ExpandConstant(refname)) then - begin - FileLines := TStringList.Create; - FileLines.LoadFromFile(ExpandConstant(refname)); - section := ''; - found1 := False; - found2 := False; - for i := 0 to FileLines.Count - 1 do - begin - line := Trim(FileLines[i]); - if (Length(line)>2) and (Copy(line, 1, 1) = '[') and (Copy(line, Length(line), 1) = ']') then - section := Copy(line, 2, Length(line)-2); - if (Length(line)>0) and (Copy(line, 1, 1) <> '#') and (Copy(line, 1, 1) <> '[') and (Pos('=', line) > 1) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line) - 1)); - if (CompareText(linetmp, 'printoutput') = 0) and (CompareText(section, 'printer') = 0) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line))); - FileLines[i] := linetmp+' printer'; - found1 := True; - end; - if (CompareText(linetmp, 'file access tries') = 0) and (CompareText(section, 'dos') = 0) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line))); - FileLines[i] := linetmp+' 3'; - found2 := True; - end; - if IsTaskSelected('centerwindow') and (CompareText(linetmp, 'windowposition') = 0) and (CompareText(section, 'sdl') = 0) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line))); - FileLines[i] := linetmp+' '; - found3 := True; - end; - if not IsTaskSelected('drivedelay') and (CompareText(linetmp, 'hard drive data rate limit') = 0) and (CompareText(section, 'dos') = 0) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line))); - FileLines[i] := linetmp+' 0'; - found4 := True; - end; - if not IsTaskSelected('drivedelay') and (CompareText(linetmp, 'floppy drive data rate limit') = 0) and (CompareText(section, 'dos') = 0) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line))); - FileLines[i] := linetmp+' 0'; - found5 := True; - end; - if found1 and found2 and (found3 or not IsTaskSelected('centerwindow')) and ((found4 and found5) or IsTaskSelected('drivedelay')) then - break; - end - end; - FileLines.SaveToFile(ExpandConstant(refname)); - end; - if not FileExists(ExpandConstant('{app}\dosbox-x.conf')) then - begin - FileCopy(ExpandConstant(refname), ExpandConstant('{app}\dosbox-x.conf'), false); - if FileExists(ExpandConstant('{app}\dosbox-x.conf')) and (PageOutput.Values[1] or PageOutput.Values[2]) then - begin - FileLines := TStringList.Create; - FileLines.LoadFromFile(ExpandConstant('{app}\dosbox-x.conf')); - section := ''; - for i := 0 to FileLines.Count - 1 do - begin - line := Trim(FileLines[i]); - if (Length(line)>2) and (Copy(line, 1, 1) = '[') and (Copy(line, Length(line), 1) = ']') then - section := Copy(line, 2, Length(line)-2); - if (Length(line)>0) and (Copy(line, 1, 1) <> '#') and (Copy(line, 1, 1) <> '[') and (Pos('=', line) > 1) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line) - 1)); - if (CompareText(linetmp, 'output') = 0) and (CompareText(section, 'sdl') = 0) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line))); - if (PageOutput.Values[1]) then - FileLines[i] := linetmp+' openglpp'; - if (PageOutput.Values[2]) then - FileLines[i] := linetmp+' ttf'; - break; - end - end - end; - FileLines.SaveToFile(ExpandConstant('{app}\dosbox-x.conf')); - end; - SetupType := WizardSetupType(False); - if SetupType = 'compact' then - begin - if (not PageLang.Values[1]) and FileExists(ExpandConstant('{app}\languages\fr_FR.lng')) then - DeleteFile(ExpandConstant('{app}\languages\fr_FR.lng')); - if (not PageLang.Values[2]) and FileExists(ExpandConstant('{app}\languages\de_DE.lng')) then - DeleteFile(ExpandConstant('{app}\languages\de_DE.lng')); - if (not PageLang.Values[3]) and FileExists(ExpandConstant('{app}\languages\ja_JP.lng')) then - DeleteFile(ExpandConstant('{app}\languages\ja_JP.lng')); - if (not PageLang.Values[4]) and FileExists(ExpandConstant('{app}\languages\ko_KR.lng')) then - DeleteFile(ExpandConstant('{app}\languages\ko_KR.lng')); - if (not PageLang.Values[5]) and FileExists(ExpandConstant('{app}\languages\pt_BR.lng')) then - DeleteFile(ExpandConstant('{app}\languages\pt_BR.lng')); - if (not PageLang.Values[6]) and FileExists(ExpandConstant('{app}\languages\zh_CN.lng')) then - DeleteFile(ExpandConstant('{app}\languages\zh_CN.lng')); - if (not PageLang.Values[7]) and FileExists(ExpandConstant('{app}\languages\es_ES.lng')) then - DeleteFile(ExpandConstant('{app}\languages\es_ES.lng')); - if (not PageLang.Values[8]) and FileExists(ExpandConstant('{app}\languages\zh_TW.lng')) then - DeleteFile(ExpandConstant('{app}\languages\zh_TW.lng')); - if (not PageLang.Values[9]) and FileExists(ExpandConstant('{app}\languages\tr_TR.lng')) then - DeleteFile(ExpandConstant('{app}\languages\tr_TR.lng')); - if (not PageLang.Values[3]) and (not PageLang.Values[4]) and (not PageLang.Values[6]) and (not PageLang.Values[8]) and (not PageFont.Values[1]) then - begin - if FileExists(ExpandConstant('{app}\SarasaGothicFixed.ttf')) then - DeleteFile(ExpandConstant('{app}\SarasaGothicFixed.ttf')); - end; - if (not PageFont.Values[4]) then - begin - if FileExists(ExpandConstant('{app}\Nouveau_IBM.ttf')) then - DeleteFile(ExpandConstant('{app}\Nouveau_IBM.ttf')); - end; - end; - SetLanguage(); - if FileExists(ExpandConstant('{app}\dosbox-x.conf')) and (PageFont.Values[1] or PageFont.Values[2] or PageFont.Values[3] or PageFont.Values[4] or PageFont.Values[5]) then - begin - FileLines := TStringList.Create; - FileLines.LoadFromFile(ExpandConstant('{app}\dosbox-x.conf')); - section := ''; - for i := 0 to FileLines.Count - 1 do - begin - line := Trim(FileLines[i]); - if (Length(line)>2) and (Copy(line, 1, 1) = '[') and (Copy(line, Length(line), 1) = ']') then - section := Copy(line, 2, Length(line)-2); - if (Length(line)>0) and (Copy(line, 1, 1) <> '#') and (Copy(line, 1, 1) <> '[') and (Pos('=', line) > 1) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line) - 1)); - if (CompareText(linetmp, 'font') = 0) and (CompareText(section, 'ttf') = 0) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line))); - if (PageFont.Values[1]) then - FileLines[i] := linetmp+' SarasaGothicFixed'; - if (PageFont.Values[2]) then - FileLines[i] := linetmp+' Consola'; - if (PageFont.Values[3]) then - FileLines[i] := linetmp+' Cour'; - if (PageFont.Values[4]) then - FileLines[i] := linetmp+' Nouveau_IBM'; - if (PageFont.Values[5]) then - FileLines[i] := linetmp+' '+PageCustom.Values[0]; - break; - end - end - end; - FileLines.SaveToFile(ExpandConstant('{app}\dosbox-x.conf')); - end; - if FileExists(ExpandConstant('{app}\dosbox-x.conf')) and (PageVer.Values[0] or PageVer.Values[1] or PageVer.Values[2] or PageVer.Values[3]) then - begin - FileLines := TStringList.Create; - FileLines.LoadFromFile(ExpandConstant('{app}\dosbox-x.conf')); - section := ''; - for i := 0 to FileLines.Count - 1 do - begin - line := Trim(FileLines[i]); - if (Length(line)>2) and (Copy(line, 1, 1) = '[') and (Copy(line, Length(line), 1) = ']') then - section := Copy(line, 2, Length(line)-2); - if (Length(line)>0) and (Copy(line, 1, 1) <> '#') and (Copy(line, 1, 1) <> '[') and (Pos('=', line) > 1) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line) - 1)); - if (CompareText(linetmp, 'ver') = 0) and (CompareText(section, 'dos') = 0) then - begin - linetmp := Trim(Copy(line, 1, Pos('=', line))); - if (PageVer.Values[0]) then - FileLines[i] := linetmp+' 3.3'; - if (PageVer.Values[1]) then - FileLines[i] := linetmp+' 5.0'; - if (PageVer.Values[2]) then - FileLines[i] := linetmp+' 6.22'; - if (PageVer.Values[3]) then - FileLines[i] := linetmp+' 7.1'; - break; - end - end - end; - FileLines.SaveToFile(ExpandConstant('{app}\dosbox-x.conf')); - end - end - else if (CompareStr(GetSHA1OfFile(ExpandConstant('{app}\dosbox-x.conf')), GetSHA1OfFile(ExpandConstant(refname))) <> 0) or (CompareStr(GetMD5OfFile(ExpandConstant('{app}\dosbox-x.conf')), GetMD5OfFile(ExpandConstant(refname))) <> 0) then - begin - msg:='The configuration file dosbox-x.conf already exists in the destination. Do you want to keep your current settings?' #13#13 'If you choose "Yes", your current settings will be kept and the file dosbox-x.conf will be automatically upgraded to the latest version format (recommended).' #13#13 'If you choose "No", the dosbox-x.conf file will be reset to the new default configuration, and your old dosbox-x.conf file will be named dosbox-x.conf.old in the installation directory.' #13#13 'If you choose "Cancel", your current dosbox-x.conf file will be kept as is without any modifications.' #13 #13 'In any case, the new default configuration file will be named dosbox-x.reference.conf in the installation directory.'; - if IsVerySilent() then - begin - res := IDYES; - end - else - begin - res := MsgBox(msg, mbConfirmation, MB_YESNOCANCEL); - end; - if (res = IDNO) then - begin - FileCopy(ExpandConstant('{app}\dosbox-x.conf'), ExpandConstant('{app}\dosbox-x.conf.old'), false); - FileCopy(ExpandConstant(refname), ExpandConstant('{app}\dosbox-x.conf'), false); - end - else if (res = IDYES) then - begin - FileCopy(ExpandConstant('{app}\dosbox-x.conf'), ExpandConstant('{app}\dosbox-x.conf.old'), false); - FileLines := TStringList.Create; - FileLinesold := TStringList.Create; - FileLinesold.LoadFromFile(ExpandConstant('{app}\dosbox-x.conf.old')); - FileLinesnew := TStringList.Create; - FileLinesnew.LoadFromFile(ExpandConstant('{app}\dosbox-x.reference.setup.conf')); - FileLinesave := TStringList.Create; - section := ''; - tsection := False; - vsection := False; - dosvcn := False; - dosvtw := False; - dosvset := False; - addcp := True; - if not FileExists(ExpandConstant('{app}\SarasaGothicFixed.ttf')) then - dosvset:= True; - for j := 0 to FileLinesold.Count - 1 do - begin - lineold := Trim(FileLinesold[j]); - if (Length(lineold)>2) and (Copy(lineold, 1, 1) = '[') and (Copy(lineold, Length(lineold), 1) = ']') then - begin - section := Copy(lineold, 2, Length(lineold)-2); - if (CompareText(section, 'ttf') = 0) then - begin - tsection := True; - if (vsection and dosvset) then - break; - end - else if(CompareText(section, 'video') = 0) then - begin - vsection := True; - if (tsection and dosvset) then - break; - end - end - else if not dosvset and (CompareText(section, 'dosv') = 0) and (Length(lineold)>0) and (Copy(lineold, 1, 1) <> '#') then - begin - linetmp := Copy(lineold, 1, Pos('=', lineold) - 1); - if (CompareText(Trim(linetmp), 'dosv') = 0) then - begin - dosvset := True; - linetmp := Copy(lineold, Pos('=', lineold) + 1, Length(lineold)); - msg:='Your existing DOSBox-X is configured for the Chinese DOS/V mode. Do you want to change it to the Chinese TrueType font (TTF) mode for a general DOS emulation environment?'; - if ((CompareText(Trim(linetmp), 'cn') = 0) or (CompareText(Trim(linetmp), 'chs') = 0)) and (MsgBox(msg, mbConfirmation, MB_YESNO) = IDYES) then - begin - dosvcn := True; - addcp := False; - end - else if ((CompareText(Trim(linetmp), 'tw') = 0) or (CompareText(Trim(linetmp), 'cht') = 0)) and (MsgBox(msg, mbConfirmation, MB_YESNO) = IDYES) then - begin - dosvtw := True; - addcp := False; - end; - if (tsection and vsection) then - break; - end - end - end; - section := ''; - for i := 0 to FileLinesnew.Count - 1 do - begin - linenew := Trim(FileLinesnew[i]); - if (Length(linenew)>2) and (Copy(linenew, 1, 1) = '[') and (Copy(linenew, Length(linenew), 1) = ']') then - begin - FileLinesave.add(linenew); - section := Copy(linenew, 2, Length(linenew)-2); - for j := 0 to FileLinesold.Count - 1 do - begin - lineold := Trim(FileLinesold[j]); - if (Length(lineold)>2) and (Copy(lineold, 1, 1) = '[') and (Copy(lineold, Length(lineold), 1) = ']') and ((((CompareText(section, 'ttf') <> 0) or (tsection)) and (section = Copy(lineold, 2, Length(lineold)-2))) or ((not tsection) and (CompareText(section, 'ttf') = 0) and (CompareText(Copy(lineold, 2, Length(lineold)-2), 'render') = 0)) or (((CompareText(section, 'video') <> 0) or (vsection)) and (section = Copy(lineold, 2, Length(lineold)-2))) or ((not vsection) and (CompareText(section, 'video') = 0) and (CompareText(Copy(lineold, 2, Length(lineold)-2), 'dosbox') = 0))) then - begin - FileLines := TStringList.Create; - for k := j+1 to FileLinesold.Count - 1 do - begin - lineold := Trim(FileLinesold[k]); - if (Copy(lineold, 1, 4) = 'ttf.') and (CompareText(section, 'ttf') = 0) then - lineold := Copy(lineold, 5, Length(lineold)-4); - if (Length(lineold)>2) and (Copy(lineold, 1, 1) = '[') and (Copy(lineold, Length(lineold), 1) = ']') then - begin - break; - end; - if (CompareText(section, '4dos') = 0) or (CompareText(section, 'config') = 0) or (CompareText(section, 'autoexec') = 0) then - begin - if (Length(lineold)>0) or (FileLines.Count>0) then - begin - linetmp := Copy(FileLinesold[k], 1, Pos('=', FileLinesold[k]) - 1); - if (CompareText(section, 'config') = 0) and (CompareText(Trim(linetmp), 'country') = 0) and dosvcn then - begin - addcp := True; - FileLinesold[k] := linetmp + '= 86,936'; - end - else if (CompareText(section, 'config') = 0) and (CompareText(Trim(linetmp), 'country') = 0) and dosvtw then - begin - addcp := True; - FileLinesold[k] := linetmp + '= 886,950'; - end; - FileLinesave.add(FileLinesold[k]); - end; - if (Length(lineold)>0) then - begin - linetmp := Copy(lineold, 1, Pos('=', lineold) - 1); - if (CompareText(section, 'config') = 0) and (CompareText(Trim(linetmp), 'country') = 0) and dosvcn then - begin - lineold := linetmp + '= 86,936'; - end - else if (CompareText(section, 'config') = 0) and (CompareText(Trim(linetmp), 'country') = 0) and dosvtw then - begin - lineold := linetmp + '= 886,950'; - end; - FileLines.add(lineold); - end - end - else if (Length(lineold)>0) and (Copy(lineold, 1, 1) <> '#') then - FileLines.add(lineold); - end; - break; - end - end - end - else if (CompareText(section, '4dos') = 0) or (CompareText(section, 'config') = 0) or (CompareText(section, 'autoexec') = 0) then - begin - linetmp := Copy(FileLinesnew[i], 1, Pos('=', FileLinesnew[i]) - 1); - if (FileLines.Count=0) or (not addcp and (CompareText(section, 'config') = 0) and (CompareText(Trim(linetmp), 'country') = 0)) then - begin - if (CompareText(section, 'config') = 0) and (CompareText(Trim(linetmp), 'country') = 0) and dosvcn then - begin - addcp := True; - FileLinesnew[i] := linetmp + '= 86,936'; - end - else if (CompareText(section, 'config') = 0) and (CompareText(Trim(linetmp), 'country') = 0) and dosvtw then - begin - addcp := True; - FileLinesnew[i] := linetmp + '= 886,950'; - end; - FileLinesave.add(FileLinesnew[i]); - end; - continue; - end - else if (Length(linenew)=0) or ((Copy(linenew, 1, 1) = '#') and (Copy(linenew, 1, 14) <> '#DOSBOX-X-ADV:') and (Copy(linenew, 1, 18) <> '#DOSBOX-X-ADV-SEE:')) then - begin - FileLinesave.add(FileLinesnew[i]); - continue; - end - else if not IsTaskSelected('commonoption') and (Copy(linenew, 1, 15) = '#DOSBOX-X-ADV:#') then - begin - Delete(linenew, 1, 14); - FileLinesave.add(linenew); - continue; - end - else if IsTaskSelected('commonoption') and (Copy(linenew, 1, 19) = '#DOSBOX-X-ADV-SEE:#') then - begin - Delete(linenew, 1, 18); - FileLinesave.add(linenew); - continue; - end - else if (Copy(linenew, 1, 15) = '#DOSBOX-X-ADV:#') or (Copy(linenew, 1, 19) = '#DOSBOX-X-ADV-SEE:#') then - begin - continue; - end - else if (Length(section)>0) and (Length(linenew)>0) and (Pos('=', linenew) > 1) then - begin - adv := 0; - if (Copy(linenew, 1, 14) = '#DOSBOX-X-ADV:') then - begin - Delete(linenew, 1, 14); - adv := 1; - end; - res := 0; - linetmp := Copy(linenew, 1, Pos('=', linenew) - 1); - for j := 0 to FileLines.Count - 1 do - begin - lineold := Trim(FileLines[j]); - if (Length(lineold)>0) and (Pos('=', lineold) > 1) and (CompareText(Trim(linetmp), Trim(Copy(lineold, 1, Pos('=', lineold) - 1))) = 0) then - begin - res := 1; - if (CompareText(section, 'dos') = 0) and (CompareText(Trim(linetmp), 'file access tries') = 0) and (Trim(Copy(lineold, Pos('=', lineold) + 1, Length(lineold))) = '0') then - begin - FileLinesave.add(linetmp + '= 3'); - continue; - end; - if (CompareText(section, 'dos') = 0) and ((CompareText(Trim(linetmp), 'hard drive data rate limit') = 0) or (CompareText(Trim(linetmp), 'floppy drive data rate limit') = 0)) then - begin - if IsTaskSelected('drivedelay') and (Trim(Copy(lineold, Pos('=', lineold) + 1, Length(lineold))) = '0') then - begin - FileLinesave.add(linetmp + '= -1'); - continue; - end; - if not IsTaskSelected('drivedelay') and (Trim(Copy(lineold, Pos('=', lineold) + 1, Length(lineold))) = '-1') then - begin - FileLinesave.add(linetmp + '= 0'); - continue; - end; - end; - if (CompareText(section, 'sdl') = 0) and (CompareText(Trim(linetmp), 'windowposition') = 0) then - begin - if IsTaskSelected('centerwindow') and (Trim(Copy(lineold, Pos('=', lineold) + 1, Length(lineold))) = '-') then - begin - FileLinesave.add(linetmp + '= '); - continue; - end; - if not IsTaskSelected('centerwindow') and ((Trim(Copy(lineold, Pos('=', lineold) + 1, Length(lineold))) = '') or (Trim(Copy(lineold, Pos('=', lineold) + 1, Length(lineold))) = ',')) then - begin - FileLinesave.add(linetmp + '= -'); - continue; - end; - end; - if (CompareText(section, 'sdl') = 0) and (CompareText(Trim(linetmp), 'output') = 0) and (dosvcn or dosvtw) then - begin - FileLinesave.add(linetmp + '= ttf'); - continue; - end; - if (CompareText(section, 'dosbox') = 0) and (CompareText(Trim(linetmp), 'language') = 0) and (SetupType <> 'compact') and dosvcn then - begin - FileLinesave.add(linetmp + '= zh_CN'); - continue; - end; - if (CompareText(section, 'dosbox') = 0) and (CompareText(Trim(linetmp), 'language') = 0) and (SetupType <> 'compact') and dosvtw then - begin - FileLinesave.add(linetmp + '= zh_TW'); - continue; - end; - if (CompareText(section, 'dosv') = 0) and (CompareText(Trim(linetmp), 'dosv') = 0) and ((CompareText(Trim(Copy(lineold, Pos('=', lineold) + 1, Length(lineold))), 'cn') = 0) and dosvcn) or ((CompareText(Trim(Copy(lineold, Pos('=', lineold) + 1, Length(lineold))), 'tw') = 0) and dosvtw) then - begin - FileLinesave.add(linetmp + '= off'); - continue; - end; - if not ((adv = 1) and IsTaskSelected('commonoption') and ((Trim(Copy(lineold, Pos('=', lineold) + 1, Length(lineold))) = Trim(Copy(linenew, Pos('=', linenew) + 1, Length(linenew)))) or ((CompareText(Trim(linetmp), 'drive z hide files') = 0) and (Trim(Copy(lineold, Pos('=', lineold) + 1, Length(lineold))) = '/A20GATE.COM /DSXMENU.EXE /HEXMEM16.EXE /HEXMEM32.EXE /LOADROM.COM /NMITEST.COM /VESAMOED.COM /VFRCRATE.COM')))) then - FileLinesave.add(linetmp + '= ' + Trim(Copy(lineold, Pos('=', lineold) + 1, Length(lineold)))); - FileLines.Delete(j); - break; - end - end; - if (res = 0) and ((adv = 0) or not IsTaskSelected('commonoption')) then - begin - linetmp := Copy(linenew, 1, Pos('=', linenew) - 1); - if (CompareText(Trim(linetmp), 'output') = 0) and (dosvcn or dosvtw) then - linenew := linetmp + '= ttf'; - if (CompareText(Trim(linetmp), 'dosv') = 0) and (dosvcn or dosvtw) then - linenew := linetmp + '= off'; - if (CompareText(Trim(linetmp), 'language') = 0) and (SetupType <> 'compact') and dosvcn then - linenew := linetmp + '= zh_CN'; - if (CompareText(Trim(linetmp), 'language') = 0) and (SetupType <> 'compact') and dosvtw then - linenew := linetmp + '= zh_TW'; - if (CompareText(Trim(linetmp), 'country') = 0) and dosvcn then - linenew := linetmp + '= 86,936'; - if (CompareText(Trim(linetmp), 'country') = 0) and dosvtw then - linenew := linetmp + '= 886,950'; - if (CompareText(Trim(linetmp), 'file access tries') = 0) then - linenew := Copy(Trim(linenew), 1, Length(Trim(linenew)) - 1) + '3'; - if IsTaskSelected('centerwindow') and (CompareText(Trim(linetmp), 'windowposition') = 0) then - linenew := Copy(Trim(linenew), 1, Length(Trim(linenew)) - 2) + ''; - if not IsTaskSelected('drivedelay') and ((CompareText(Trim(linetmp), 'hard drive data rate limit') = 0) or (CompareText(Trim(linetmp), 'floppy drive data rate limit') = 0)) then - linenew := Copy(Trim(linenew), 1, Length(Trim(linenew)) - 2) + '0'; - FileLinesave.add(linenew); - end - end - end; - FileLinesave.SaveToFile(ExpandConstant('{app}\dosbox-x.conf')); - FileLinesold.free; - FileLinesnew.free; - DeleteFile(ExpandConstant('{app}\dosbox-x.conf.old')); - end; - SetLanguage(); - end; - DeleteFile(ExpandConstant('{app}\dosbox-x.reference.setup.conf')); - end -end; -procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); -begin - case CurUninstallStep of - usUninstall: - begin - if FileExists(ExpandConstant('{app}\dosbox-x.conf.old')) then - DeleteFile(ExpandConstant('{app}\dosbox-x.conf.old')); - msg:='Do you want to keep the configuration file dosbox-x.conf?'; - if FileExists(ExpandConstant('{app}\dosbox-x.conf')) and (IsVerySilent() or (MsgBox(msg, mbConfirmation, MB_YESNO) = IDNO)) then - DeleteFile(ExpandConstant('{app}\dosbox-x.conf')); - end - end; -end; -function CheckDirName(name: String): Boolean; -var - dir: string; -begin - dir:='Win32_builds\'; - if (PageBuild.Values[0]) and (not PageBuild.Values[5]) then - dir:=dir+'x86_Release'; - if (PageBuild.Values[0]) and (PageBuild.Values[5]) then - dir:=dir+'x86_Release_SDL2'; - if (PageBuild.Values[1]) and (not PageBuild.Values[5]) then - dir:=dir+'ARM_Release'; - if (PageBuild.Values[1]) and (PageBuild.Values[5]) then - dir:=dir+'ARM_Release_SDL2'; - if (PageBuild.Values[2]) and (not PageBuild.Values[5]) then - dir:=dir+'mingw'; - if (PageBuild.Values[2]) and (PageBuild.Values[5]) then - dir:=dir+'mingw-sdl2'; - if Is32BitInstaller() and (PageBuild.Values[3]) and (not PageBuild.Values[5]) then - dir:=dir+'mingw-lowend'; - if Is32BitInstaller() and (PageBuild.Values[3]) and (PageBuild.Values[5]) then - dir:=dir+'mingw-lowend-sdl2'; - Result := False; - if (dir=name) then - Result := True; -end; -function GetDesktopFolder(Param: String): String; -begin - if (IsAdminLoggedOn or IsPowerUserLoggedOn) then - Result := ExpandConstant('{commondesktop}') - else - Result := ExpandConstant('{userdesktop}'); -end; diff --git a/contrib/windows/installer/DOSBox-X-setupXP.iss b/contrib/windows/installer/DOSBox-X-setupXP.iss index 4794d5b39ce..687e02c5600 100644 --- a/contrib/windows/installer/DOSBox-X-setupXP.iss +++ b/contrib/windows/installer/DOSBox-X-setupXP.iss @@ -1,5 +1,5 @@ #define MyAppName "DOSBox-X" -#define MyAppVersion "2025.02.01" +#define MyAppVersion "2026.05.02" #define MyAppBit "(32/64bit for XP)" #define MyAppPublisher "joncampbell123 [DOSBox-X Team]" #define MyAppURL "https://dosbox-x.com/" @@ -53,9 +53,13 @@ InfoAfterClickLabel=You have now installed DOSBox-X. Please note that you can cu Name: "en"; MessagesFile: "compiler:Default.isl" Name: "fr"; MessagesFile: "compiler:Default.isl" Name: "ge"; MessagesFile: "compiler:Default.isl" +Name: "hu"; MessagesFile: "compiler:Default.isl" +Name: "it"; MessagesFile: "compiler:Default.isl" Name: "ja"; MessagesFile: "compiler:Default.isl" Name: "ko"; MessagesFile: "compiler:Default.isl" +Name: "nl"; MessagesFile: "compiler:Default.isl" Name: "pt"; MessagesFile: "compiler:Default.isl" +Name: "ru"; MessagesFile: "compiler:Default.isl" Name: "sc"; MessagesFile: "compiler:Default.isl" Name: "sp"; MessagesFile: "compiler:Default.isl" Name: "tc"; MessagesFile: "compiler:Default.isl" @@ -65,9 +69,13 @@ Name: "tr"; MessagesFile: "compiler:Default.isl" en.LanguageID=$0409 fr.LanguageID=$040C ge.LanguageID=$0407 +hu.LanguageID=$040E +it.LanguageID=$0410 ja.LanguageID=$0411 ko.LanguageID=$0412 +nl.LanguageID=$0413 pt.LanguageID=$0416 +ru.LanguageID=$0419 sc.LanguageID=$0804 sp.LanguageID=$0C0A tc.LanguageID=$0404 @@ -113,6 +121,7 @@ Source: "..\..\translations\it\it_IT.lng"; DestDir: "{app}\languages"; Flags: ig Source: "..\..\translations\ja\ja_JP.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact Source: "..\..\translations\ko\ko_KR.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact Source: "..\..\translations\nl\nl_NL.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact +Source: "..\..\translations\pt\pt_BR.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact Source: "..\..\translations\ru\ru_RU.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact Source: "..\..\translations\tr\tr_TR.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact Source: "..\..\translations\zh\zh_CN.lng"; DestDir: "{app}\languages"; Flags: ignoreversion; Components: full typical compact @@ -262,7 +271,7 @@ i: Integer; line, linetmp, section: String; FileLines: TStringList; begin - if FileExists(ExpandConstant('{app}\dosbox-x.conf')) and (PageLang.Values[1] or PageLang.Values[2] or PageLang.Values[3] or PageLang.Values[4] or PageLang.Values[5] or PageLang.Values[6] or PageLang.Values[7] or PageLang.Values[8] or PageLang.Values[9]) then + if FileExists(ExpandConstant('{app}\dosbox-x.conf')) and (PageLang.Values[1] or PageLang.Values[2] or PageLang.Values[3] or PageLang.Values[4] or PageLang.Values[5] or PageLang.Values[6] or PageLang.Values[7] or PageLang.Values[8] or PageLang.Values[9] or PageLang.Values[10] or PageLang.Values[11] or PageLang.Values[12] or PageLang.Values[13]) then begin FileLines := TStringList.Create; FileLines.LoadFromFile(ExpandConstant('{app}\dosbox-x.conf')); @@ -278,67 +287,91 @@ begin if (CompareText(linetmp, 'language') = 0) and (CompareText(section, 'dosbox') = 0) then begin linetmp := Trim(Copy(line, 1, Pos('=', line))); - if (PageLang.Values[1]) and FileExists(ExpandConstant('{app}\languages\fr_FR.lng')) then + if (PageLang.Values[1]) and FileExists(ExpandConstant('{app}\languages\nl_NL.lng')) then + FileLines[i] := linetmp+' nl_NL'; + if (PageLang.Values[2]) and FileExists(ExpandConstant('{app}\languages\fr_FR.lng')) then FileLines[i] := linetmp+' fr_FR'; - if (PageLang.Values[2]) and FileExists(ExpandConstant('{app}\languages\de_DE.lng')) then + if (PageLang.Values[3]) and FileExists(ExpandConstant('{app}\languages\de_DE.lng')) then FileLines[i] := linetmp+' de_DE'; - if (PageLang.Values[3]) and FileExists(ExpandConstant('{app}\languages\ja_JP.lng')) then + if (PageLang.Values[4]) and FileExists(ExpandConstant('{app}\languages\hu_HU.lng')) then + FileLines[i] := linetmp+' hu_HU'; + if (PageLang.Values[5]) and FileExists(ExpandConstant('{app}\languages\it_IT.lng')) then + FileLines[i] := linetmp+' it_IT'; + if (PageLang.Values[6]) and FileExists(ExpandConstant('{app}\languages\ja_JP.lng')) then FileLines[i] := linetmp+' ja_JP'; - if (PageLang.Values[4]) and FileExists(ExpandConstant('{app}\languages\ko_KR.lng')) then + if (PageLang.Values[7]) and FileExists(ExpandConstant('{app}\languages\ko_KR.lng')) then FileLines[i] := linetmp+' ko_KR'; - if (PageLang.Values[5]) and FileExists(ExpandConstant('{app}\languages\pt_BR.lng')) then + if (PageLang.Values[8]) and FileExists(ExpandConstant('{app}\languages\pt_BR.lng')) then FileLines[i] := linetmp+' pt_BR'; - if (PageLang.Values[6]) and FileExists(ExpandConstant('{app}\languages\zh_CN.lng')) then + if (PageLang.Values[9]) and FileExists(ExpandConstant('{app}\languages\ru_RU.lng')) then + FileLines[i] := linetmp+' ru_RU'; + if (PageLang.Values[10]) and FileExists(ExpandConstant('{app}\languages\zh_CN.lng')) then FileLines[i] := linetmp+' zh_CN'; - if (PageLang.Values[7]) and FileExists(ExpandConstant('{app}\languages\es_ES.lng')) then + if (PageLang.Values[11]) and FileExists(ExpandConstant('{app}\languages\es_ES.lng')) then FileLines[i] := linetmp+' es_ES'; - if (PageLang.Values[8]) and FileExists(ExpandConstant('{app}\languages\zh_TW.lng')) then + if (PageLang.Values[12]) and FileExists(ExpandConstant('{app}\languages\zh_TW.lng')) then FileLines[i] := linetmp+' zh_TW'; - if (PageLang.Values[9]) and FileExists(ExpandConstant('{app}\languages\tr_TR.lng')) then + if (PageLang.Values[13]) and FileExists(ExpandConstant('{app}\languages\tr_TR.lng')) then FileLines[i] := linetmp+' tr_TR'; end; if (CompareText(linetmp, 'keyboardlayout') = 0) and (CompareText(section, 'dos') = 0) then begin linetmp := Trim(Copy(line, 1, Pos('=', line))); if (PageLang.Values[1]) then - FileLines[i] := linetmp+' fr'; + FileLines[i] := linetmp+' nl'; if (PageLang.Values[2]) then - FileLines[i] := linetmp+' de'; + FileLines[i] := linetmp+' fr'; if (PageLang.Values[3]) then - FileLines[i] := linetmp+' jp'; + FileLines[i] := linetmp+' de'; if (PageLang.Values[4]) then - FileLines[i] := linetmp+' ko'; + FileLines[i] := linetmp+' hu'; if (PageLang.Values[5]) then - FileLines[i] := linetmp+' br'; + FileLines[i] := linetmp+' it'; if (PageLang.Values[6]) then - FileLines[i] := linetmp+' cn'; + FileLines[i] := linetmp+' jp'; if (PageLang.Values[7]) then - FileLines[i] := linetmp+' sp'; + FileLines[i] := linetmp+' ko'; if (PageLang.Values[8]) then - FileLines[i] := linetmp+' tw'; + FileLines[i] := linetmp+' br'; if (PageLang.Values[9]) then + FileLines[i] := linetmp+' ru'; + if (PageLang.Values[10]) then + FileLines[i] := linetmp+' cn'; + if (PageLang.Values[11]) then + FileLines[i] := linetmp+' sp'; + if (PageLang.Values[12]) then + FileLines[i] := linetmp+' tw'; + if (PageLang.Values[13]) then FileLines[i] := linetmp+' tr'; end; if (CompareText(linetmp, 'country') = 0) and (CompareText(section, 'config') = 0) then begin linetmp := Trim(Copy(line, 1, Pos('=', line))); if (PageLang.Values[1]) then - FileLines[i] := linetmp+' 33,859'; + FileLines[i] := linetmp+' 31,850'; if (PageLang.Values[2]) then - FileLines[i] := linetmp+' 49,850'; + FileLines[i] := linetmp+' 33,859'; if (PageLang.Values[3]) then - FileLines[i] := linetmp+' 81,932'; + FileLines[i] := linetmp+' 49,850'; if (PageLang.Values[4]) then - FileLines[i] := linetmp+' 82,949'; + FileLines[i] := linetmp+' 40,852'; if (PageLang.Values[5]) then - FileLines[i] := linetmp+' 55,860'; + FileLines[i] := linetmp+' 39,850'; if (PageLang.Values[6]) then - FileLines[i] := linetmp+' 86,936'; + FileLines[i] := linetmp+' 81,932'; if (PageLang.Values[7]) then - FileLines[i] := linetmp+' 34,858'; + FileLines[i] := linetmp+' 82,949'; if (PageLang.Values[8]) then - FileLines[i] := linetmp+' 886,950'; + FileLines[i] := linetmp+' 55,860'; if (PageLang.Values[9]) then + FileLines[i] := linetmp+' 7,866'; + if (PageLang.Values[10]) then + FileLines[i] := linetmp+' 86,936'; + if (PageLang.Values[11]) then + FileLines[i] := linetmp+' 34,858'; + if (PageLang.Values[12]) then + FileLines[i] := linetmp+' 886,950'; + if (PageLang.Values[13]) then FileLines[i] := linetmp+' 90,857'; break; end @@ -373,35 +406,47 @@ begin msg:='DOSBox-X supports language files to display messages in different languages. The language for the user interface and internal DOS is English by default, but you can select a different language for its user interface and internal DOS. The language and code page settings can be later modified in the configuration file (dosbox-x.conf).'; PageLang:=CreateInputOptionPage(PageOutput.ID, 'User interface and DOS language', 'Select the language for DOSBox-X''s user interface and internal DOS', msg, True, False); PageLang.Add('Default (English)'); + PageLang.Add('Dutch (Nederlands)'); PageLang.Add('French (Français)'); PageLang.Add('German (Deutsch)'); + PageLang.Add('Hungarian (magyar)'); + PageLang.Add('Italian (italiano)'); PageLang.Add('Japanese (日本語)'); PageLang.Add('Korean (한국어)'); PageLang.Add('Portuguese (português do Brasil)'); + PageLang.Add('Russian (русский (язык))'); PageLang.Add('Simplified Chinese (简体中文)'); PageLang.Add('Spanish (Español)'); PageLang.Add('Traditional Chinese (繁體/正體中文)'); PageLang.Add('Turkish (Türkçe)'); PageLang.Values[0] := True; lang := ExpandConstant('{language}'); - if lang = 'fr' then + if lang = 'nl' then PageLang.Values[1] := True; - if lang = 'ge' then + if lang = 'fr' then PageLang.Values[2] := True; - if lang = 'ja' then + if lang = 'ge' then PageLang.Values[3] := True; - if lang = 'ko' then + if lang = 'hu' then PageLang.Values[4] := True; - if lang = 'pt' then + if lang = 'it' then PageLang.Values[5] := True; - if lang = 'sc' then + if lang = 'ja' then PageLang.Values[6] := True; - if lang = 'sp' then + if lang = 'ko' then PageLang.Values[7] := True; - if lang = 'tc' then + if lang = 'pt' then PageLang.Values[8] := True; - if lang = 'tr' then + if lang = 'ru' then PageLang.Values[9] := True; + if lang = 'sc' then + PageLang.Values[10] := True; + if lang = 'sp' then + PageLang.Values[11] := True; + if lang = 'tc' then + PageLang.Values[12] := True; + if lang = 'tr' then + PageLang.Values[13] := True; msg:='DOSBox-X allows you to select a TrueType font (or OpenType font) for the TrueType font (TTF) output. It has a builtin TTF font as the default font for the output, but you may want to select a different TTF (or TTC/OTF) font than the default one.' #13#13 'This setting can be later modified in the DOSBox-X''s configuration file (dosbox-x.conf).'; PageFont:=CreateInputOptionPage(PageLang.ID, 'TrueType font', 'Select the font for the TrueType font output', msg, True, False); PageFont.Add('Default TrueType font'); @@ -517,22 +562,30 @@ begin begin lang:='Default (English)'; if (PageLang.Values[1]) then - lang:='French (Français)'; + lang:='Dutch (Nederlands)'; if (PageLang.Values[2]) then - lang:='German (Deutsch)'; + lang:='French (Français)'; if (PageLang.Values[3]) then - lang:='Japanese (日本語)'; + lang:='German (Deutsch)'; if (PageLang.Values[4]) then - lang:='Korean (한국어)'; + lang:='Hungarian (magyar)'; if (PageLang.Values[5]) then - lang:='Portuguese (português do Brasil)'; + lang:='Italian (italiano)'; if (PageLang.Values[6]) then - lang:='Simplified Chinese (简体中文)'; + lang:='Japanese (日本語)'; if (PageLang.Values[7]) then - lang:='Spanish (Español)'; + lang:='Korean (한국어)'; if (PageLang.Values[8]) then - lang:='Traditional Chinese (繁體/正體中文)'; + lang:='Portuguese (português do Brasil)'; if (PageLang.Values[9]) then + lang:='Russian (русский (язык))'; + if (PageLang.Values[10]) then + lang:='Simplified Chinese (简体中文)'; + if (PageLang.Values[11]) then + lang:='Spanish (Español)'; + if (PageLang.Values[12]) then + lang:='Traditional Chinese (繁體/正體中文)'; + if (PageLang.Values[13]) then lang:='Turkish (Türkçe)'; end; if not FileExists(ExpandConstant('{app}\dosbox-x.conf')) then @@ -705,25 +758,36 @@ begin SetupType := WizardSetupType(False); if SetupType = 'compact' then begin - if (not PageLang.Values[1]) and FileExists(ExpandConstant('{app}\languages\fr_FR.lng')) then + if (not PageLang.Values[1]) and FileExists(ExpandConstant('{app}\languages\nl_NL.lng')) then + DeleteFile(ExpandConstant('{app}\languages\nl_NL.lng')); + if (not PageLang.Values[2]) and FileExists(ExpandConstant('{app}\languages\fr_FR.lng')) then DeleteFile(ExpandConstant('{app}\languages\fr_FR.lng')); - if (not PageLang.Values[2]) and FileExists(ExpandConstant('{app}\languages\de_DE.lng')) then - DeleteFile(ExpandConstant('{app}\languages\de_DE.lng')); - if (not PageLang.Values[3]) and FileExists(ExpandConstant('{app}\languages\ja_JP.lng')) then + if (not PageLang.Values[3]) and FileExists(ExpandConstant('{app}\languages\de_DE.lng')) then + begin + DeleteFile(ExpandConstant('{app}\languages\de_DE.lng')); + DeleteFile(ExpandConstant('{app}\languages\de_pc98.lng')); + end; + if (not PageLang.Values[4]) and FileExists(ExpandConstant('{app}\languages\hu_HU.lng')) then + DeleteFile(ExpandConstant('{app}\languages\hu_HU.lng')); + if (not PageLang.Values[5]) and FileExists(ExpandConstant('{app}\languages\it_IT.lng')) then + DeleteFile(ExpandConstant('{app}\languages\it_IT.lng')); + if (not PageLang.Values[6]) and FileExists(ExpandConstant('{app}\languages\ja_JP.lng')) then DeleteFile(ExpandConstant('{app}\languages\ja_JP.lng')); - if (not PageLang.Values[4]) and FileExists(ExpandConstant('{app}\languages\ko_KR.lng')) then + if (not PageLang.Values[7]) and FileExists(ExpandConstant('{app}\languages\ko_KR.lng')) then DeleteFile(ExpandConstant('{app}\languages\ko_KR.lng')); - if (not PageLang.Values[5]) and FileExists(ExpandConstant('{app}\languages\pt_BR.lng')) then + if (not PageLang.Values[8]) and FileExists(ExpandConstant('{app}\languages\pt_BR.lng')) then DeleteFile(ExpandConstant('{app}\languages\pt_BR.lng')); - if (not PageLang.Values[6]) and FileExists(ExpandConstant('{app}\languages\zh_CN.lng')) then + if (not PageLang.Values[9]) and FileExists(ExpandConstant('{app}\languages\ru_RU.lng')) then + DeleteFile(ExpandConstant('{app}\languages\ru_RU.lng')); + if (not PageLang.Values[10]) and FileExists(ExpandConstant('{app}\languages\zh_CN.lng')) then DeleteFile(ExpandConstant('{app}\languages\zh_CN.lng')); - if (not PageLang.Values[7]) and FileExists(ExpandConstant('{app}\languages\es_ES.lng')) then + if (not PageLang.Values[11]) and FileExists(ExpandConstant('{app}\languages\es_ES.lng')) then DeleteFile(ExpandConstant('{app}\languages\es_ES.lng')); - if (not PageLang.Values[8]) and FileExists(ExpandConstant('{app}\languages\zh_TW.lng')) then + if (not PageLang.Values[12]) and FileExists(ExpandConstant('{app}\languages\zh_TW.lng')) then DeleteFile(ExpandConstant('{app}\languages\zh_TW.lng')); - if (not PageLang.Values[9]) and FileExists(ExpandConstant('{app}\languages\tr_TR.lng')) then + if (not PageLang.Values[13]) and FileExists(ExpandConstant('{app}\languages\tr_TR.lng')) then DeleteFile(ExpandConstant('{app}\languages\tr_TR.lng')); - if (not PageLang.Values[3]) and (not PageLang.Values[4]) and (not PageLang.Values[6]) and (not PageLang.Values[8]) and (not PageFont.Values[1]) then + if (not PageLang.Values[6]) and (not PageLang.Values[7]) and (not PageLang.Values[10]) and (not PageLang.Values[12]) and (not PageFont.Values[1]) then begin if FileExists(ExpandConstant('{app}\SarasaGothicFixed.ttf')) then DeleteFile(ExpandConstant('{app}\SarasaGothicFixed.ttf')); diff --git a/contrib/windows/installer/dosbox-x.reference.setup.conf b/contrib/windows/installer/dosbox-x.reference.setup.conf index a1d888db55b..6e7f36ae49c 100644 --- a/contrib/windows/installer/dosbox-x.reference.setup.conf +++ b/contrib/windows/installer/dosbox-x.reference.setup.conf @@ -1,4 +1,4 @@ -# This is the configuration file for DOSBox-X 2025.02.01. (Please use the latest version of DOSBox-X) +# This is the configuration file for DOSBox-X 2026.05.02. (Please use the latest version of DOSBox-X) # Lines starting with a # are comment lines and are ignored by DOSBox-X. # They are used to (briefly) document the effect of each option. # To write out ALL options, use command 'config -all' with -wc or -writeconf options. @@ -14,8 +14,8 @@ # windowposition: Set the window position at startup in the positionX,positionY format (e.g.: 1300,200). # The window will be centered with "," (or empty), and will be in the original position with "-". # display: Specify a screen/display number to use for a multi-screen setup (0 = default). -# output: What video system to use for output (openglnb = OpenGL nearest; openglpp = OpenGL perfect; ttf = TrueType font output). -# Possible values: default, surface, overlay, ttf, opengl, openglnb, openglhq, openglpp, ddraw, direct3d. +# output: What video system to use for output (surface = software (SDL_Surface); openglnb = OpenGL nearest; openglpp = OpenGL perfect; ttf = TrueType font output). +# Possible values: default, surface, overlay, ttf, opengl, openglnb, openglhq, openglpp, ddraw. # videodriver: Forces a video driver (e.g. windib/windows, directx, x11, fbcon, dummy, etc) for the SDL library to use. # transparency: Set the transparency of the DOSBox-X screen (both windowed and full-screen modes, on SDL2 and Windows SDL1 builds). # The valid value is from 0 (no transparency, the default setting) to 90 (high transparency). @@ -200,6 +200,7 @@ debuggerrun = debugger [dosbox] # language: Select a language file for DOSBox-X to use. Encoded with either UTF-8 or a DOS code page. # You can set code page either in the language file or with "country" setting in [config] section. +# beep duration: If nonzero, set the duration of a beep when DOS or INT 10h is given a BEL character # title: Additional text to place in the title bar of the window. # logo text: Text to place at the bottom of the screen during the startup logo. Text will line wrap automatically. # To explicitly break to the next line, put \n in the string. @@ -258,7 +259,7 @@ debuggerrun = debugger #DOSBOX-X-ADV:# weitek: If set, emulate the Weitek coprocessor. This option only has effect if cputype=386 or cputype=486. #DOSBOX-X-ADV:# bochs debug port e9: If set, emulate Bochs debug port E9h. ASCII text written to this I/O port is assumed to be debug output, and logged. # machine: The type of machine DOSBox-X tries to emulate. -# Possible values: mda, cga, cga_mono, cga_rgb, cga_composite, cga_composite2, hercules, hercules_plus, hercules_incolor, hercules_color, tandy, pcjr, pcjr_composite, pcjr_composite2, amstrad, ega, ega200, jega, mcga, vgaonly, svga_s3, svga_s386c928, svga_s3vision864, svga_s3vision868, svga_s3vision964, svga_s3vision968, svga_s3trio32, svga_s3trio64, svga_s3trio64v+, svga_s3virge, svga_s3virgevx, svga_et3000, svga_et4000, svga_paradise, vesa_nolfb, vesa_oldvbe, vesa_oldvbe10, pc98, pc9801, pc9821, svga_ati_egavgawonder, svga_ati_vgawonder, svga_ati_vgawonderplus, svga_ati_vgawonderxl, svga_ati_vgawonderxl24, svga_ati_mach8, svga_ati_mach32, svga_ati_mach64, fm_towns. +# Possible values: mda, cga, cga_mono, cga_rgb, cga_composite, cga_composite2, hercules, hercules_plus, hercules_incolor, hercules_color, tandy, pcjr, pcjr_composite, pcjr_composite2, amstrad, ega, ega200, jega, mcga, vgaonly, svga_s3, svga_s386c928, svga_s3vision864, svga_s3vision868, svga_s3vision964, svga_s3vision968, svga_s3trio32, svga_s3trio64, svga_s3trio64v+, svga_s3virge, svga_s3virgevx, svga_et3000, svga_et4000, svga_paradise, vesa_nolfb, vesa_oldvbe, vesa_oldvbe10, vesa_vbe3, pc98, pc9801, pc9821, svga_ati_egavgawonder, svga_ati_vgawonder, svga_ati_vgawonderplus, svga_ati_vgawonderxl, svga_ati_vgawonderxl24, svga_ati_mach8, svga_ati_mach32, svga_ati_mach64, svga_dosbox, svga_dosbox_vbe2, fm_towns. # captures: Directory where things like wave, midi, screenshot get captured. # autosave: Enable the auto-save state feature. Specify a time interval in seconds, and optionally a save slot or start and end save slots. # For example, "autosave=10 11-20" will set a 10-second time interval for auto-saving, and the save slots used will be between 11 and 20. @@ -287,6 +288,7 @@ debuggerrun = debugger #DOSBOX-X-ADV:# shell environment size: Size of the initial DOSBox-X shell environment block, in bytes. Setting to 0 implies a default size of 720 bytes as in DOSBox. #DOSBOX-X-ADV:# You can increase this size to store more environment variables in DOS, although this does not affect the environment block #DOSBOX-X-ADV:# of sub-processes spawned from the DOS shell. This option has no effect unless the dynamic kernel allocation is enabled. +#DOSBOX-X-ADV:# shell permanent: If enabled, initial DOSBox-X shell will stay permanent (equivalent to /P switch). #DOSBOX-X-ADV:# private area size: Set DOSBox-X private memory area size. This area contains private memory structures used by the DOS kernel. #DOSBOX-X-ADV:# It is discarded when you boot into another OS. Mainline DOSBox uses 32KB. Testing shows that it is possible #DOSBOX-X-ADV:# to run DOSBox with as little as 4KB. If DOSBox-X aborts with error "not enough memory for internal tables" @@ -415,7 +417,7 @@ debuggerrun = debugger #DOSBOX-X-ADV:# starting with cputype=8086 will use a memalias of 20 even if you later change cputype to 386. #DOSBOX-X-ADV:# 24: 16MB aliasing. Common on 386SX systems (CPU had 24 external address bits) #DOSBOX-X-ADV:# or 386DX and 486 systems where the CPU communicated directly with the ISA bus (A24-A31 tied off) -#DOSBOX-X-ADV:# 26: 64MB aliasing. Some 486s had only 26 external address bits, some motherboards tied off A26-A31 +#DOSBOX-X-ADV:# 26: 64MB aliasing. Some 486 clones (and 386EX/CX) had only 26 external address bits, some motherboards tied off A26-A31 #DOSBOX-X-ADV:# 32: 4GB aliasing. This is normal for most 486/Pentium and later systems and is the default for most values of cputype. #DOSBOX-X-ADV:# 36: 64GB aliasing. Recommended if you are emulating more than 3.5GB of RAM and Pentium Pro/II Page Size Extensions. #DOSBOX-X-ADV:# 40: 1TB aliasing. Recommended if you are emulating more than 63GB of RAM and Pentium Pro/II Page Size Extensions. @@ -464,9 +466,10 @@ debuggerrun = debugger #DOSBOX-X-ADV:# enable pci bus: Enable PCI bus emulation #DOSBOX-X-ADV-SEE:# #DOSBOX-X-ADV-SEE:# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): -#DOSBOX-X-ADV-SEE:# -> disable graphical splash; allow quit after warning; keyboard hook; weitek; bochs debug port e9; video debug at startup; compresssaveparts; show recorded filename; skip encoding unchanged frames; capture chroma format; capture format; shell environment size; private area size; turn off a20 gate on boot; cbus bus clock; isa bus clock; pci bus clock; call binary on reset; unhandled irq handler; call binary on boot; ibm rom basic; rom bios allocation max; rom bios minimum size; irq delay ns; iodelay; iodelay16; iodelay32; acpi; acpi rsd ptr location; acpi sci irq; acpi iobase; acpi reserved size; memsizekb; dos mem limit; isa memory hole at 512kb; isa memory hole at 15mb; reboot delay; memalias; convert fat free space; convert fat timeout; leading colon write protect image; locking disk image mount; unmask keyboard on int 16 read; int16 keyboard polling undocumented cf behavior; allow port 92 reset; enable port 92; enable 1st dma controller; enable 2nd dma controller; allow dma address decrement; enable 128k capable 16-bit dma; enable dma extra page registers; dma page registers write-only; cascade interrupt never in service; cascade interrupt ignore in service; enable slave pic; enable pc nmi mask; allow more than 640kb base memory; enable pci bus +#DOSBOX-X-ADV-SEE:# -> disable graphical splash; allow quit after warning; keyboard hook; weitek; bochs debug port e9; video debug at startup; compresssaveparts; show recorded filename; skip encoding unchanged frames; capture chroma format; capture format; shell environment size; shell permanent; private area size; turn off a20 gate on boot; cbus bus clock; isa bus clock; pci bus clock; call binary on reset; unhandled irq handler; call binary on boot; ibm rom basic; rom bios allocation max; rom bios minimum size; irq delay ns; iodelay; iodelay16; iodelay32; acpi; acpi rsd ptr location; acpi sci irq; acpi iobase; acpi reserved size; memsizekb; dos mem limit; isa memory hole at 512kb; isa memory hole at 15mb; reboot delay; memalias; convert fat free space; convert fat timeout; leading colon write protect image; locking disk image mount; unmask keyboard on int 16 read; int16 keyboard polling undocumented cf behavior; allow port 92 reset; enable port 92; enable 1st dma controller; enable 2nd dma controller; allow dma address decrement; enable 128k capable 16-bit dma; enable dma extra page registers; dma page registers write-only; cascade interrupt never in service; cascade interrupt ignore in service; enable slave pic; enable pc nmi mask; allow more than 640kb base memory; enable pci bus #DOSBOX-X-ADV-SEE:# language = +beep duration = 0 title = logo text = logo = @@ -503,6 +506,7 @@ forceloadstate = false #DOSBOX-X-ADV:capture chroma format = auto #DOSBOX-X-ADV:capture format = default #DOSBOX-X-ADV:shell environment size = 0 +#DOSBOX-X-ADV:shell permanent = false #DOSBOX-X-ADV:private area size = 32768 a20 = mask #DOSBOX-X-ADV:turn off a20 gate on boot = true @@ -600,6 +604,7 @@ convertdrivefat = true # Setting this option may prevent some scalers to work as expected. # Try turning this option off in such case. # For pixel-perfect scaling (output=openglpp), it is recommended to turn this option off. +#DOSBOX-X-ADV:# modeswitch: Let DOSBox-X determine the resolution of the monitor. This feature is only available when DOSBox-X is compiled with SDL2 support. # scaler: Scaler used to enlarge/enhance low resolution modes. Add keyword 'forced', after the name of the scaler to always use the scaler even if the result might not be desired.(e.g. 'normal2x forced') # Appending 'prompt' will cause a confirmation message for forcing the scaler. # To fit a scaler in the resolution used at full screen may require a border or side bars. @@ -621,7 +626,7 @@ convertdrivefat = true # Possible values: green, amber, gray, white. #DOSBOX-X-ADV-SEE:# #DOSBOX-X-ADV-SEE:# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): -#DOSBOX-X-ADV-SEE:# -> xbrz slice; xbrz fixed scale factor; xbrz max scale factor +#DOSBOX-X-ADV-SEE:# -> modeswitch; xbrz slice; xbrz fixed scale factor; xbrz max scale factor #DOSBOX-X-ADV-SEE:# frameskip = 0 aspect = false @@ -629,6 +634,7 @@ aspect_ratio = 0:0 char9 = true euro = -1 doublescan = true +#DOSBOX-X-ADV:modeswitch = false scaler = normal2x glshader = none pixelshader = none @@ -712,9 +718,14 @@ monochrome_pal = green #DOSBOX-X-ADV:# pc-98 show graphics layer on initialize: If PC-98 mode and INT 33h emulation is enabled, the graphics layer will be automatically enabled #DOSBOX-X-ADV:# at driver startup AND when INT 33h AX=0 is called. This is NEC MOUSE.COM behavior and default #DOSBOX-X-ADV:# enabled. To emulate other drivers like QMOUSE that do not follow this behavior, set to false. +#DOSBOX-X-ADV:# pc-98 chargen vsync-limited access: If set, reading pixels from the character generator while in Code Access mode (or always, for ANK +#DOSBOX-X-ADV:# characters) will be invalid. Some models (i.e. PC-9821As3) dont seem to have this limitation, but +#DOSBOX-X-ADV:# many others do. +#DOSBOX-X-ADV:# This option is set to false by default, set this option to true if you suffer text glitches. +#DOSBOX-X-ADV:# It is reported that setting this option to true will result in glitches in some titles;therefore revert this option to false in such cases. #DOSBOX-X-ADV-SEE:# #DOSBOX-X-ADV-SEE:# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): -#DOSBOX-X-ADV-SEE:# -> pc-98 int 1b fdc timer wait; pc-98 pic init to read isr; pc-98 fm board irq; pc-98 fm board io port; pc-98 time stamp; pc-98 sound bios; pc-98 load sound bios rom file; pc-98 buffer page flip; pc-98 enable 256-color planar; pc-98 enable 188 user cg; pc-98 start gdc at 5mhz; pc-98 allow scanline effect; pc-98 nec mouse function; pc-98 video mode; pc-98 timer always cycles; pc-98 timer master frequency; pc-98 allow 4 display partition graphics; pc-98 fontx sbcs; pc-98 fontx dbcs; pc-98 fontx internal symbol; pc-98 show graphics layer on initialize +#DOSBOX-X-ADV-SEE:# -> pc-98 int 1b fdc timer wait; pc-98 pic init to read isr; pc-98 fm board irq; pc-98 fm board io port; pc-98 time stamp; pc-98 sound bios; pc-98 load sound bios rom file; pc-98 buffer page flip; pc-98 enable 256-color planar; pc-98 enable 188 user cg; pc-98 start gdc at 5mhz; pc-98 allow scanline effect; pc-98 nec mouse function; pc-98 video mode; pc-98 timer always cycles; pc-98 timer master frequency; pc-98 allow 4 display partition graphics; pc-98 fontx sbcs; pc-98 fontx dbcs; pc-98 fontx internal symbol; pc-98 show graphics layer on initialize; pc-98 chargen vsync-limited access #DOSBOX-X-ADV-SEE:# pc-98 BIOS copyright string = false #DOSBOX-X-ADV:pc-98 int 1b fdc timer wait = false @@ -748,6 +759,7 @@ pc-98 anex86 font = #DOSBOX-X-ADV:pc-98 fontx dbcs = #DOSBOX-X-ADV:pc-98 fontx internal symbol = false #DOSBOX-X-ADV:pc-98 show graphics layer on initialize = true +#DOSBOX-X-ADV:pc-98 chargen vsync-limited access = false [dosv] # dosv: Enable DOS/V emulation and specify which version to emulate. This option is intended for use with games or software @@ -844,6 +856,11 @@ j3100colorscroll = false #DOSBOX-X-ADV:# #DOSBOX-X-ADV:# This option may be useful if you would like to prevent your DOS gaming from appearing in the Windows 11 Recall feature #DOSBOX-X-ADV:# Possible values: , none, blank, invisible. +# vbememsize: Amount of video memory in kilobytes to report through the VESA BIOS extensions. +# Set this value to an amount lower than vmemsize to handle DOS programs that cannot handle +# more than the small amount of video memory they were designed for. This option also affects +# what video modes are reported through the VBE. +# vbememsizekb: Amount of video memory to report in kilobytes, in addition to vbememsize. # vmemsize: Amount of video memory in megabytes. # The maximum resolution and color depth the svga_s3 will be able to display # is determined by this value. @@ -853,12 +870,14 @@ j3100colorscroll = false # 2: 1600x1200 at 256 colors or 1024x768 at 64k colors or 640x480 at 16M colors # 4: 1600x1200 at 64k colors or 1024x768 at 16M colors # 8: up to 1600x1200 at 16M colors +# Larger values are available depending on machine type. # For build engine games, use more memory than in the list above so it can # use triple buffering and thus won't flicker. # # vmemsizekb: Amount of video memory in kilobytes, in addition to vmemsize. #DOSBOX-X-ADV:# vbe window granularity: Controls VESA BIOS non-linear framebuffer window granularity in KB. This affects ONLY the VESA BIOS extensions. Set 0 to functional normally. #DOSBOX-X-ADV:# vbe window size: Controls VESA BIOS non-linear framebuffer window size in KB. This affects ONLY the VESA BIOS extensions. Set 0 to functional normally. +#DOSBOX-X-ADV:# vbe protected mode interface: If set, enable the VBE protected mode interface #DOSBOX-X-ADV:# enable 8-bit dac: If set, allow VESA BIOS calls in IBM PC mode to set DAC width. Has no effect in PC-98 mode. # high intensity blinking: Set to false if you want to see high-intensity background colors instead of blinking foreground text. # This option has no effect in PC-98 and some other video modes. @@ -1035,22 +1054,31 @@ j3100colorscroll = false #DOSBOX-X-ADV:# This should not be set except for DOS games with bugs in their display handling code. # memory io optimization 1: Enable one class of EGA/VGA memory I/O optimizations. Default ON (true). # If graphical artifacts or errors occur, try turning this off first. May provide a performance benefit. +# skip render if nothing changed: If set, DOSBox-X will skip rendering entirely unless any change is made to the guest display. +# This may provide a performance benefit, especially in SVGA modes. This option has no effect unless render on demand is true or auto. +# Normally in DOSBox and DOSBox-X, video is rendered constantly, whether or not anything changed, +# and then compared with the previous frame to determine where to update the host display. +# In addition to the render on demand option, this option may further break timing dependent effects and/or cause problems with some games. +# Possible values: true, false, 1, 0, auto. # scanline render on demand: Render video output at vsync or when something is changed mid frame, instead of stopping to render every scanline. -# May provide a performance benefit to most DOS games. However this may also break timing-dependent game or Demoscene effects. -# Default auto, which will turn if off for VGA modes and turn it on for SVGA modes. +# This may provide a performance benefit to most DOS games. However this may also break timing-dependent game or Demoscene effects. +# Default is auto, which will turn it off for VGA modes and turn it on for SVGA modes. # Possible values: true, false, 1, 0, auto. #DOSBOX-X-ADV-SEE:# #DOSBOX-X-ADV-SEE:# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): -#DOSBOX-X-ADV-SEE:# -> int 10h use video parameter table; vmemdelay; lfb vmemdelay; prevent capture; vbe window granularity; vbe window size; enable 8-bit dac; svga lfb base; pci vga; vga attribute controller mapping; enable supermegazeux tweakmode; vga bios use rom image; vga bios rom image; vga bios size override; video bios dont duplicate cga first half rom font; video bios always offer 14-pixel high rom font; video bios always offer 16-pixel high rom font; video bios enable cga second half rom font; forcerate; sierra ramdac; sierra ramdac lock 565; vga fill active memory; page flip debug line; vertical retrace poll debug line; cgasnow; vga 3da undefined bits; rom bios 8x8 CGA font; rom bios video parameter table; int 10h points at vga bios; unmask timer on int 10 setmode; vesa bank switching window mirroring; vesa bank switching window range check; vesa zero buffer on get information; vesa set display vsync; vesa lfb base scanline adjust; vesa lfb pel scanline adjust; vesa map non-lfb modes to 128kb region; ega per scanline hpel; allow hpel effects; allow hretrace effects; hretrace effect weight; vesa modelist cap; vesa modelist width limit; vesa modelist height limit; vesa vbe put modelist in vesa information; vesa vbe 1.2 modes are 32bpp; allow low resolution vesa modes; allow explicit 24bpp vesa modes; allow high definition vesa modes; allow unusual vesa modes; allow 32bpp vesa modes; allow 24bpp vesa modes; allow 16bpp vesa modes; allow 15bpp vesa modes; allow 8bpp vesa modes; allow 4bpp vesa modes; allow 4bpp packed vesa modes; allow tty vesa modes; double-buffered line compare; ignore vblank wraparound; ignore extended memory bit; enable vga resize delay; resize only on vga active display width increase; vga palette update on full load; ignore odd-even mode in non-cga modes; ignore sequencer blanking +#DOSBOX-X-ADV-SEE:# -> int 10h use video parameter table; vmemdelay; lfb vmemdelay; prevent capture; vbe window granularity; vbe window size; vbe protected mode interface; enable 8-bit dac; svga lfb base; pci vga; vga attribute controller mapping; enable supermegazeux tweakmode; vga bios use rom image; vga bios rom image; vga bios size override; video bios dont duplicate cga first half rom font; video bios always offer 14-pixel high rom font; video bios always offer 16-pixel high rom font; video bios enable cga second half rom font; forcerate; sierra ramdac; sierra ramdac lock 565; vga fill active memory; page flip debug line; vertical retrace poll debug line; cgasnow; vga 3da undefined bits; rom bios 8x8 CGA font; rom bios video parameter table; int 10h points at vga bios; unmask timer on int 10 setmode; vesa bank switching window mirroring; vesa bank switching window range check; vesa zero buffer on get information; vesa set display vsync; vesa lfb base scanline adjust; vesa lfb pel scanline adjust; vesa map non-lfb modes to 128kb region; ega per scanline hpel; allow hpel effects; allow hretrace effects; hretrace effect weight; vesa modelist cap; vesa modelist width limit; vesa modelist height limit; vesa vbe put modelist in vesa information; vesa vbe 1.2 modes are 32bpp; allow low resolution vesa modes; allow explicit 24bpp vesa modes; allow high definition vesa modes; allow unusual vesa modes; allow 32bpp vesa modes; allow 24bpp vesa modes; allow 16bpp vesa modes; allow 15bpp vesa modes; allow 8bpp vesa modes; allow 4bpp vesa modes; allow 4bpp packed vesa modes; allow tty vesa modes; double-buffered line compare; ignore vblank wraparound; ignore extended memory bit; enable vga resize delay; resize only on vga active display width increase; vga palette update on full load; ignore odd-even mode in non-cga modes; ignore sequencer blanking #DOSBOX-X-ADV-SEE:# #DOSBOX-X-ADV:int 10h use video parameter table = auto #DOSBOX-X-ADV:vmemdelay = 0 #DOSBOX-X-ADV:lfb vmemdelay = false #DOSBOX-X-ADV:prevent capture = +vbememsize = 0 +vbememsizekb = 0 vmemsize = -1 vmemsizekb = 0 #DOSBOX-X-ADV:vbe window granularity = 0 #DOSBOX-X-ADV:vbe window size = 0 +#DOSBOX-X-ADV:vbe protected mode interface = true #DOSBOX-X-ADV:enable 8-bit dac = true high intensity blinking = true #DOSBOX-X-ADV:svga lfb base = 0 @@ -1113,8 +1141,17 @@ high intensity blinking = true #DOSBOX-X-ADV:ignore odd-even mode in non-cga modes = false #DOSBOX-X-ADV:ignore sequencer blanking = false memory io optimization 1 = true +skip render if nothing changed = auto scanline render on demand = auto +[script] +#DOSBOX-X-ADV:# startup.js: script to run at startup +#DOSBOX-X-ADV-SEE:# +#DOSBOX-X-ADV-SEE:# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): +#DOSBOX-X-ADV-SEE:# -> startup.js +#DOSBOX-X-ADV-SEE:# +#DOSBOX-X-ADV:startup.js = + [vsync] # vsyncmode: Synchronize vsync timing to the host display. Requires calibration within DOSBox-X. # Possible values: off, on, force, host. @@ -1127,7 +1164,7 @@ vsyncrate = 75 # core: CPU Core used in emulation. auto will switch to dynamic if available and appropriate. # For the dynamic core, both dynamic_x86 and dynamic_rec are supported (dynamic_x86 is preferred). # Windows 95 or other preemptive multitasking OSes will not work with the dynamic_rec core. -# Possible values: auto, dynamic, dynamic_x86, dynamic_nodhfpu, dynamic, dynamic_rec, normal, full, simple. +# Possible values: auto, dynamic, dynamic_x86, dynamic_nodhfpu, dynamic_rec, normal, full, simple. # fpu: Enable FPU emulation # Possible values: true, false, 1, 0, auto, 8087, 287, 387. #DOSBOX-X-ADV:# cpuid string: If set, changes the string returned by the CPUID instruction. Normally by default the string is 'GenuineIntel'. @@ -1138,6 +1175,7 @@ vsyncrate = 75 #DOSBOX-X-ADV:# Note that the processor info and feature bits form the topmost 32 bits of the PSN and cannot be changed. # rdtsc rate: If nonzero, the Pentium RDTSC counter will tick at this rate per millisecond instead of by the cycle count # segment limits: Enforce checks for segment limits on 80286 and higher CPU types. +# lds wraparound: For LDS/LES instructions, in 16-bit code, check for 64KB wraparound case. #DOSBOX-X-ADV:# double fault: Emulate double fault exception #DOSBOX-X-ADV:# clear trap flag on unhandled int 1: If set, the DOS kernel INT 01h handler will clear the trap flag when called. #DOSBOX-X-ADV:# Normally a DOS program using INT 01h and the trap flag (usually for debugging) @@ -1244,6 +1282,7 @@ fpu = true #DOSBOX-X-ADV:processor serial number = rdtsc rate = 0 segment limits = true +lds wraparound = true #DOSBOX-X-ADV:double fault = true #DOSBOX-X-ADV:clear trap flag on unhandled int 1 = false #DOSBOX-X-ADV:reset on triple fault = true @@ -1323,7 +1362,7 @@ auxdevice = intellimouse # gray scaled color scheme: (0,0,0) #0e0e0e (75,75,75) (89,89,89) (38,38,38) (52,52,52) #717171 #c0c0c0 #808080 (28,28,28) (150,150,150) (178,178,178) (76,76,76) (104,104,104) (226,226,226) (255,255,255) # An optional leading "+" sign allows the preset color scheme to be used when switching from another output. # outputswitch: Specifies the output that DOSBox-X should switch to from the TTF output when a graphical mode is requested, or auto for automatic selection. -# Possible values: auto, surface, opengl, openglnb, openglhq, openglpp, direct3d. +# Possible values: auto, surface, opengl, openglnb, openglhq, openglpp. # winperc: Specifies the window percentage for the TTF output (100 = full screen). Ignored if the ptsize setting is specified. # ptsize: Specifies the font point size for the TTF output. If specified (minimum: 9), it will override the winperc setting. # lins: Specifies the number of rows on the screen for the TTF output (0 = default). @@ -1610,7 +1649,7 @@ fluid.soundfont = [sblaster] # sbtype: Type of Sound Blaster to emulate. 'gb' is Game Blaster. -# Possible values: sb1, sb2, sbpro1, sbpro2, sb16, sb16vibra, gb, ess688, ess1688, reveal_sc400, none. +# Possible values: sb1, sb1.0, sb1.5, sb2, sb2.0, sb2.01, sbpro1, sbpro2, sb16, sb16vibra, gb, ess688, ess1688, reveal_sc400, none. # sbbase: The IO address of the Sound Blaster. # 220h to 2E0h are for use with IBM PC Sound Blaster emulation. # D2h to DEh are for use with NEC PC-98 Sound Blaster 16 emulation. @@ -1623,8 +1662,12 @@ fluid.soundfont = #DOSBOX-X-ADV:# the DMA transfer per block poorly in a way that causes popping and artifacts. Setting this option to 0 for #DOSBOX-X-ADV:# such DOS applications may reduce audible popping and artifacts. # listen to recording source: When the guest records audio from the Sound Blaster card, send the input source to the speakers as well so it can be heard. -# recording source: Audio source to use when guest is recording audio. At this time only generated audio sources are available. -# Possible values: silence, hiss, 1khz tone. +# recording source: Audio source to use when guest is recording audio. Options: silence, hiss, 1khz tone, or microphone (Windows WASAPI input). +# Possible values: silence, hiss, 1khz tone, microphone. +# prefer hfp: Prefer Bluetooth HFP (Hands-Free Profile) microphone mode. +# This allows using the microphone of a BT headset but reduces +# audio quality (typically 8kHz–16kHz telephone quality). +# When disabled, higher-quality microphones are preferred. #DOSBOX-X-ADV:# irq hack: Specify a hack related to the Sound Blaster IRQ to avoid crashes in a handful of games and demos. #DOSBOX-X-ADV:# none Emulate IRQs normally #DOSBOX-X-ADV:# cs_equ_ds Do not fire IRQ unless two CPU segment registers match: CS == DS. Read DOSBox-X Wiki or source code for details. @@ -1669,6 +1712,9 @@ fluid.soundfont = # oplmode: Type of OPL emulation. On 'auto' the mode is determined by the 'sbtype' setting. # All OPL modes are AdLib-compatible. # Possible values: auto, opl2, dualopl2, opl3, opl3gold, none, hardware, hardwaregb, esfm. +#DOSBOX-X-ADV:# adlib pcm boost: If set, and Adlib emulation detects that the guest application is playing digitized speech +#DOSBOX-X-ADV:# or music through the FM chip, the FM audio will be amplified to make the audio more audible. +#DOSBOX-X-ADV:# Audio levels will be reset for any other use including FM music synthesis. #DOSBOX-X-ADV:# adlib force timer overflow on detect: If set, Adlib/OPL emulation will signal 'overflow' on timers after 50 I/O reads. #DOSBOX-X-ADV:# This is a temporary hack to work around timing bugs noted in DOSBox-X. Certain #DOSBOX-X-ADV:# games (Wolfenstein 3D) poll the Adlib status port a fixed number of times assuming @@ -1731,7 +1777,7 @@ fluid.soundfont = #DOSBOX-X-ADV:# relies on this behavior for Sound Blaster output and should be enabled for accuracy in emulation. #DOSBOX-X-ADV-SEE:# #DOSBOX-X-ADV-SEE:# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): -#DOSBOX-X-ADV-SEE:# -> mindma; irq hack; dsp command aliases; pic unmask irq; enable asp; disable filtering; dsp write buffer status must return 0x7f or 0xff; pre-set sbpro stereo; cms; adlib force timer overflow on detect; retrowave_spi_cs; force dsp auto-init; force goldplay; goldplay stereo; dsp require interrupt acknowledge; dsp write busy delay; sample rate limits; instant direct dac; stereo control with sbpro only; dsp busy cycle rate; dsp busy cycle always; dsp busy cycle duty; io port aliasing +#DOSBOX-X-ADV-SEE:# -> mindma; irq hack; dsp command aliases; pic unmask irq; enable asp; disable filtering; dsp write buffer status must return 0x7f or 0xff; pre-set sbpro stereo; cms; adlib pcm boost; adlib force timer overflow on detect; retrowave_spi_cs; force dsp auto-init; force goldplay; goldplay stereo; dsp require interrupt acknowledge; dsp write busy delay; sample rate limits; instant direct dac; stereo control with sbpro only; dsp busy cycle rate; dsp busy cycle always; dsp busy cycle duty; io port aliasing #DOSBOX-X-ADV-SEE:# sbtype = sb16 sbbase = 220 @@ -1739,6 +1785,7 @@ irq = 7 #DOSBOX-X-ADV:mindma = -1 listen to recording source = false recording source = silence +prefer hfp = false #DOSBOX-X-ADV:irq hack = none dma = 1 hdma = 5 @@ -1752,9 +1799,10 @@ enable speaker = false sbmixer = true #DOSBOX-X-ADV:cms = auto oplmode = auto +#DOSBOX-X-ADV:adlib pcm boost = false #DOSBOX-X-ADV:adlib force timer overflow on detect = false oplemu = default -oplrate = 48000 +oplrate = 49716 oplport = retrowave_bus = serial #DOSBOX-X-ADV:retrowave_spi_cs = 0,6 @@ -1775,6 +1823,182 @@ blaster environment variable = true #DOSBOX-X-ADV:dsp busy cycle duty = -1 #DOSBOX-X-ADV:io port aliasing = true +[sblaster2] +# sbtype: Type of Sound Blaster to emulate. 'gb' is Game Blaster. +# Possible values: sb1, sb1.0, sb1.5, sb2, sb2.0, sb2.01, sbpro1, sbpro2, sb16, sb16vibra, gb, ess688, ess1688, reveal_sc400, none. +# sbbase: The IO address of the Sound Blaster. +# 220h to 2E0h are for use with IBM PC Sound Blaster emulation. +# D2h to DEh are for use with NEC PC-98 Sound Blaster 16 emulation. +# Possible values: 220, 240, 260, 280, 2a0, 2c0, 2e0, d2, d4, d6, d8, da, dc, de. +# irq: The IRQ number of the Sound Blaster (usually 5 or 7, depending on the sound card type and the game). +# Set to 0 for the default setting of the sound card, or set to -1 to start DOSBox-X with the IRQ unassigned. +# Possible values: 7, 5, 3, 9, 10, 11, 12, 0, -1. +#DOSBOX-X-ADV:# mindma: Minimum DMA transfer left to increase attention across DSP blocks, in milliseconds. Set to -1 for default. +#DOSBOX-X-ADV:# There are some DOS games/demos that use single-cycle DSP playback in their music tracker and they micromanage +#DOSBOX-X-ADV:# the DMA transfer per block poorly in a way that causes popping and artifacts. Setting this option to 0 for +#DOSBOX-X-ADV:# such DOS applications may reduce audible popping and artifacts. +# listen to recording source: When the guest records audio from the Sound Blaster card, send the input source to the speakers as well so it can be heard. +# recording source: Audio source to use when guest is recording audio. Options: silence, hiss, 1khz tone, or microphone (Windows WASAPI input). +# Possible values: silence, hiss, 1khz tone, microphone. +# prefer hfp: Prefer Bluetooth HFP (Hands-Free Profile) microphone mode. +# This allows using the microphone of a BT headset but reduces +# audio quality (typically 8kHz–16kHz telephone quality). +# When disabled, higher-quality microphones are preferred. +#DOSBOX-X-ADV:# irq hack: Specify a hack related to the Sound Blaster IRQ to avoid crashes in a handful of games and demos. +#DOSBOX-X-ADV:# none Emulate IRQs normally +#DOSBOX-X-ADV:# cs_equ_ds Do not fire IRQ unless two CPU segment registers match: CS == DS. Read DOSBox-X Wiki or source code for details. +# dma: The DMA number of the Sound Blaster. Set to -1 to start DOSBox-X with the DMA unassigned. +# Possible values: 1, 5, 0, 3, 6, 7, -1. +# hdma: The High DMA number of the Sound Blaster. Set to -1 to start DOSBox-X with the High DMA unassigned. +# Possible values: 1, 5, 0, 3, 6, 7, -1. +#DOSBOX-X-ADV:# dsp command aliases: If set (on by default), emulation will support known undocumented aliases +#DOSBOX-X-ADV:# of common Sound Blaster DSP commands. Some broken DOS games and demos rely on these aliases. +#DOSBOX-X-ADV:# For more information: https://www.vogons.org/viewtopic.php?f=62&t=61098&start=280 +#DOSBOX-X-ADV:# pic unmask irq: Start the DOS virtual machine with the Sound Blaster IRQ already unmasked at the PIC. +#DOSBOX-X-ADV:# Some early DOS games/demos that support Sound Blaster expect the IRQ to fire but make +#DOSBOX-X-ADV:# no attempt to unmask the IRQ. If audio cuts out no matter what IRQ you try, then try +#DOSBOX-X-ADV:# setting this option. +#DOSBOX-X-ADV:# Option is needed for: +#DOSBOX-X-ADV:# Public NMI "jump" demo (1992) +# enable speaker: Start the DOS virtual machine with the Sound Blaster speaker enabled. +# Sound Blaster Pro and older cards have a speaker disable/enable command. +# Normally the card boots up with the speaker disabled. If a DOS game or demo +# attempts to play without enabling the speaker, set this option to true to +# compensate. This setting has no meaning if emulating a Sound Blaster 16 card. +#DOSBOX-X-ADV:# enable asp: If set, emulate the presence of the Sound Blaster 16 Advanced Sound Processor/Creative Sound Processor chip. +#DOSBOX-X-ADV:# NOTE: This only emulates its presence and the basic DSP commands to communicate with it. Actual ASP/CSP functions are not yet implemented. +#DOSBOX-X-ADV:# disable filtering: By default DOSBox-X filters Sound Blaster output to emulate lowpass filters and analog output limitations. +#DOSBOX-X-ADV:# Set this option to true to disable filtering. Note that doing so disables emulation of the Sound Blaster Pro +#DOSBOX-X-ADV:# output filter and ESS AudioDrive lowpass filter. +#DOSBOX-X-ADV:# dsp write buffer status must return 0x7f or 0xff: If set, force port 22Ch (DSP write buffer status) to return 0x7F or 0xFF. If not set, the port +#DOSBOX-X-ADV:# may return 0x7F or 0xFF depending on what type of Sound Blaster is being emulated. +#DOSBOX-X-ADV:# Set this option for some early DOS demos that make that assumption about port 22Ch. +#DOSBOX-X-ADV:# Option is needed for: +#DOSBOX-X-ADV:# Overload by Hysteria (1992) - Audio will crackle/saturate (8-bit overflow) except when sbtype=sb16 +#DOSBOX-X-ADV:# pre-set sbpro stereo: Start the DOS virtual machine with the Sound Blaster Pro stereo bit set (in the mixer). +#DOSBOX-X-ADV:# A few demos support Sound Blaster Pro but forget to set this bit. +#DOSBOX-X-ADV:# Option is needed for: +#DOSBOX-X-ADV:# Inconexia by Iguana (1993) +# sbmixer: Allow the Sound Blaster mixer to modify the DOSBox-X mixer. +#DOSBOX-X-ADV:# cms: Enable CMS emulation ('auto' by default). +#DOSBOX-X-ADV:# off: Disable CMS emulation (except when the Game Blaster is selected). +#DOSBOX-X-ADV:# on: Enable CMS emulation on Sound Blaster 1 and 2. +#DOSBOX-X-ADV:# auto: Auto-enable CMS emulation for Sound Blaster 1 and Game Blaster. +#DOSBOX-X-ADV:# Possible values: on, off, auto. +# oplmode: Type of OPL emulation. On 'auto' the mode is determined by the 'sbtype' setting. +# All OPL modes are AdLib-compatible. +# Possible values: auto, opl2, dualopl2, opl3, opl3gold, none, hardware, hardwaregb, esfm. +#DOSBOX-X-ADV:# adlib pcm boost: If set, and Adlib emulation detects that the guest application is playing digitized speech +#DOSBOX-X-ADV:# or music through the FM chip, the FM audio will be amplified to make the audio more audible. +#DOSBOX-X-ADV:# Audio levels will be reset for any other use including FM music synthesis. +#DOSBOX-X-ADV:# adlib force timer overflow on detect: If set, Adlib/OPL emulation will signal 'overflow' on timers after 50 I/O reads. +#DOSBOX-X-ADV:# This is a temporary hack to work around timing bugs noted in DOSBox-X. Certain +#DOSBOX-X-ADV:# games (Wolfenstein 3D) poll the Adlib status port a fixed number of times assuming +#DOSBOX-X-ADV:# that the poll loop takes long enough for the Adlib timer to run out. If the game +#DOSBOX-X-ADV:# cannot reliably detect Adlib at higher cycles counts, but can reliably detect at +#DOSBOX-X-ADV:# lower cycles counts, set this option. +# oplemu: Provider for the OPL emulation. 'compat' might provide better quality. +# 'nuked' is the most accurate (but the most CPU-intensive). See oplrate as well. +# Possible values: default, compat, fast, nuked, mame, opl2board, opl3duoboard, retrowave_opl3, esfmu. +# oplrate: Sample rate of OPL music emulation. Use 49716 for highest quality (set the mixer rate accordingly). +# Possible values: 49716, 48000, 44100, 32000, 22050, 16000, 11025, 8000. +# oplport: Serial port of the OPL2 Audio Board when oplemu=opl2board, opl2mode will become 'opl2' automatically. +# retrowave_bus: Bus of the Retrowave series board (serial/spi). SPI is only supported on Linux. +#DOSBOX-X-ADV:# retrowave_spi_cs: SPI chip select pin of the Retrowave series board. Only supported on Linux. +# retrowave_port: Serial port of the Retrowave series board. +# hardwarebase: base address of the real hardware Sound Blaster: +# 210,220,230,240,250,260,280 +#DOSBOX-X-ADV:# force dsp auto-init: Treat all single-cycle DSP commands as auto-init to keep playback going. +#DOSBOX-X-ADV:# This option is a workaround for DOS games or demos that use single-cycle DSP playback commands and +#DOSBOX-X-ADV:# have problems with missing the Sound Blaster IRQ under load. Do not enable unless you need this workaround. +#DOSBOX-X-ADV:# Needed for: +#DOSBOX-X-ADV:# - Extreme "lunatic" demo (1993) +#DOSBOX-X-ADV:# force goldplay: Always render Sound Blaster output sample-at-a-time. Testing option. You probably don't want to enable this. +# goldplay: Enable goldplay emulation. +#DOSBOX-X-ADV:# goldplay stereo: Enable workaround for goldplay stereo playback. Many DOS demos using this technique +#DOSBOX-X-ADV:# don't seem to know they need to double the frequency when programming the DSP time constant for Pro stereo output. +#DOSBOX-X-ADV:# If stereo playback seems to have artifacts consider enabling this option. For accurate emulation of Sound Blaster +#DOSBOX-X-ADV:# hardware, disable this option. +#DOSBOX-X-ADV:# dsp require interrupt acknowledge: If set, the DSP will halt DMA playback until IRQ acknowledgement occurs even in auto-init mode (SB16 behavior). +#DOSBOX-X-ADV:# If clear, IRQ acknowledgement will have no effect on auto-init playback (SB Pro and earlier & clone behavior) +#DOSBOX-X-ADV:# If set to 'auto' then behavior is determined by sbtype= setting. +#DOSBOX-X-ADV:# This is a setting for hardware accuracy in emulation. If audio briefly plays then stops then your DOS game +#DOSBOX-X-ADV:# and it's not using IRQ (but using DMA), try setting this option to 'false' +#DOSBOX-X-ADV:# dsp write busy delay: Amount of time in nanoseconds the DSP chip signals 'busy' after writing to the DSP (port 2xCh). Set to -1 to use card-specific defaults. +#DOSBOX-X-ADV:# WARNING: Setting the value too high (above 20000ns) may have detrimental effects to DOS games that use IRQ 0 and DSP command 0x10 to play audio. +#DOSBOX-X-ADV:# Setting the value way too high (above 1000000ns) can cause significant lag in DOS games. +# blaster environment variable: Whether or not to set the BLASTER environment variable automatically at startup +#DOSBOX-X-ADV:# sample rate limits: If set (default), limit DSP sample rate to what real hardware is limited to +#DOSBOX-X-ADV:# instant direct dac: If set, direct DAC output commands are instantaneous. This option is intended as a quick fix for +#DOSBOX-X-ADV:# games or demos that play direct DAC music/sound from the IRQ 0 timer who a) write the DSP command +#DOSBOX-X-ADV:# and data without polling the DSP to ensure it's ready or b) can get locked into the IRQ 0 handler +#DOSBOX-X-ADV:# waiting for DSP status when instructed to play at or beyond the DSP's maximum direct DAC sample rate. +#DOSBOX-X-ADV:# This fix allows broken Sound Blaster code to work and should not be enabled unless necessary. +#DOSBOX-X-ADV:# stereo control with sbpro only: Default on. If set, Sound Blaster Pro stereo is not available when emulating sb16 or sb16vibra. +#DOSBOX-X-ADV:# If clear, sb16 emulation will honor the sbpro stereo bit. Note that Creative SB16 cards do not +#DOSBOX-X-ADV:# honor the stereo bit, and this option allows DOSBox-X emulate that fact. Accuracy setting. +#DOSBOX-X-ADV:# dsp busy cycle rate: Sound Blaster 16 DSP chips appear to go busy periodically at some high clock rate +#DOSBOX-X-ADV:# whether the DSP is actually doing anything for the system or not. This is an accuracy +#DOSBOX-X-ADV:# option for Sound Blaster emulation. If this option is nonzero, it will be interpreted +#DOSBOX-X-ADV:# as the busy cycle rate in Hz. If zero, busy cycle will not be emulated. If -1, sound +#DOSBOX-X-ADV:# blaster emulation will automatically choose a setting based on the sbtype= setting +#DOSBOX-X-ADV:# dsp busy cycle always: If set, the DSP busy cycle always happens. If clear, DSP busy cycle only happens when +#DOSBOX-X-ADV:# audio playback is running. Default setting is to pick according to the sound card. +#DOSBOX-X-ADV:# dsp busy cycle duty: If emulating SB16 busy cycle, this value (0 to 100) controls the duty cycle of the busy cycle. +#DOSBOX-X-ADV:# If this option is set to -1, Sound Blaster emulation will choose a value automatically according +#DOSBOX-X-ADV:# to sbtype=. If 0, busy cycle emulation is disabled. +#DOSBOX-X-ADV:# io port aliasing: If set, Sound Blaster ports alias by not decoding the LSB of the I/O port. +#DOSBOX-X-ADV:# This option only applies when sbtype is set to sb1 or sb2 (not SBPro or SB16). +#DOSBOX-X-ADV:# This is a hack for the Electromotive Force 'Internal Damage' demo which apparently +#DOSBOX-X-ADV:# relies on this behavior for Sound Blaster output and should be enabled for accuracy in emulation. +#DOSBOX-X-ADV-SEE:# +#DOSBOX-X-ADV-SEE:# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): +#DOSBOX-X-ADV-SEE:# -> mindma; irq hack; dsp command aliases; pic unmask irq; enable asp; disable filtering; dsp write buffer status must return 0x7f or 0xff; pre-set sbpro stereo; cms; adlib pcm boost; adlib force timer overflow on detect; retrowave_spi_cs; force dsp auto-init; force goldplay; goldplay stereo; dsp require interrupt acknowledge; dsp write busy delay; sample rate limits; instant direct dac; stereo control with sbpro only; dsp busy cycle rate; dsp busy cycle always; dsp busy cycle duty; io port aliasing +#DOSBOX-X-ADV-SEE:# +sbtype = none +sbbase = 260 +irq = 3 +#DOSBOX-X-ADV:mindma = -1 +listen to recording source = false +recording source = silence +prefer hfp = false +#DOSBOX-X-ADV:irq hack = none +dma = 0 +hdma = 7 +#DOSBOX-X-ADV:dsp command aliases = true +#DOSBOX-X-ADV:pic unmask irq = false +enable speaker = false +#DOSBOX-X-ADV:enable asp = false +#DOSBOX-X-ADV:disable filtering = false +#DOSBOX-X-ADV:dsp write buffer status must return 0x7f or 0xff = false +#DOSBOX-X-ADV:pre-set sbpro stereo = false +sbmixer = true +#DOSBOX-X-ADV:cms = off +oplmode = none +#DOSBOX-X-ADV:adlib pcm boost = false +#DOSBOX-X-ADV:adlib force timer overflow on detect = false +oplemu = default +oplrate = 49716 +oplport = +retrowave_bus = serial +#DOSBOX-X-ADV:retrowave_spi_cs = 0,6 +retrowave_port = +hardwarebase = 220 +#DOSBOX-X-ADV:force dsp auto-init = false +#DOSBOX-X-ADV:force goldplay = false +goldplay = true +#DOSBOX-X-ADV:goldplay stereo = true +#DOSBOX-X-ADV:dsp require interrupt acknowledge = auto +#DOSBOX-X-ADV:dsp write busy delay = -1 +blaster environment variable = false +#DOSBOX-X-ADV:sample rate limits = true +#DOSBOX-X-ADV:instant direct dac = false +#DOSBOX-X-ADV:stereo control with sbpro only = true +#DOSBOX-X-ADV:dsp busy cycle rate = -1 +#DOSBOX-X-ADV:dsp busy cycle always = -1 +#DOSBOX-X-ADV:dsp busy cycle duty = -1 +#DOSBOX-X-ADV:io port aliasing = true + [gus] # gus: Enable the Gravis Ultrasound emulation. # global register read alias: If true, all GUS global registers have a read alias at N and N+0x80. @@ -2218,6 +2442,8 @@ timeout = 0 #DOSBOX-X-ADV:# turn off a20 gate on load if loadfix needed: If enabled, and loading a program below the 64kb boundary, turn off the A20 gate. #DOSBOX-X-ADV:# This can help with any program with startup code that assumes the segment wraparound of the 8086. #DOSBOX-X-ADV:# Depending on DOS configuration the A20 gate may be re-enabled later such as calling INT 21h. +# break on int3: If set, a breakpoint on INT 3 is automatically set up at startup +#DOSBOX-X-ADV:# xms log memmove: If set, XMS move/copy operations are logged for debugging purposes. #DOSBOX-X-ADV:# xms memmove causes flat real mode: If set, any call to XMS to move/copy memory sets up flat real mode for segment registers DS and ES. #DOSBOX-X-ADV:# xms init causes flat real mode: If set, when the DOS kernel initializes XMS it will switch on flat real mode for segment registers DS and ES if appropriate. #DOSBOX-X-ADV:# resized free memory block becomes allocated: If set, and the DOS application resizes a freed memory block, that block will be marked as allocated to that program. @@ -2227,6 +2453,12 @@ timeout = 0 # This is disabled by default to avoid conflicts between commands and executables. # It is recommended to get and set dosbox-x.conf settings using the CONFIG command instead. # Compatibility with DOSBox SVN can be improved by enabling this option. +#DOSBOX-X-ADV:# exepack: If loading an EXE file compressed using ExEPACK, what to do. +#DOSBOX-X-ADV:# This setting can help avoid Packed File is Corrupt errors when running such executables. +#DOSBOX-X-ADV:# none = don't do anything +#DOSBOX-X-ADV:# a20off = switch off the A20 gate before running the executable +#DOSBOX-X-ADV:# unpack = decompress the EXE and then run it, rather than run the EXEPACK code (default). +#DOSBOX-X-ADV:# Possible values: none, a20off, unpack. #DOSBOX-X-ADV:# badcommandhandler: Allow to specify a custom error handler command for the internal DOS shell before the "Bad command or file name" message shows up. #DOSBOX-X-ADV:# mscdex device name: If set, use this name as the MSCDEX device name instead of MSCD001 # hma: Report through XMS that HMA exists (not necessarily available) @@ -2279,6 +2511,7 @@ timeout = 0 # network redirector: Report DOS network redirector as resident. This will allow the host name to be returned unless the secure mode is enabled. # You can also directly access UNC network paths in the form \\MACHINE\SHARE even if they are not mounted as drives on Windows systems. # Set either "ipx=true" in [ipx] section or "ne2000=true" in [ne2000] section for a full network redirector environment. +# mcb corruption becomes application free memory: If MCB chain corruption occurs following the DOS program PSP segment and the DOS program does anything to cause memory allocation,make a new free memory block in it's place instead of halting emulation with an MCB chain error. Some DOS programs are sloppywith memory to corrupt the MCB chain after itself in memory. This is apparently real MS-DOS behavior, set to true to enable.If set to false, all MCB chain corruption will halt emulation as DOSBox forks typically do already. #DOSBOX-X-ADV:# minimum dos initial private segment: In non-mainline mapping mode, where DOS structures are allocated from base memory, this sets the #DOSBOX-X-ADV:# minimum segment value. Recommended value is 0x70. You may reduce the value down to 0x50 if freeing #DOSBOX-X-ADV:# up more memory is important. Set to 0 for default. @@ -2419,6 +2652,7 @@ timeout = 0 #DOSBOX-X-ADV:# This option is OFF by default. #DOSBOX-X-ADV:# int 13 disk change detect: Enable INT 13h disk change detect function (AH=16h) #DOSBOX-X-ADV:# int 13 extensions: Enable INT 13h extensions (functions 0x40-0x48). You will need this enabled if the virtual hard drive image is 8.4GB or larger. +#DOSBOX-X-ADV:# int 13 enable 48-bit LBA: Enable 48-bit LBA support for INT 13h extensions. Needed for drives larger than 28-bit LBA limit (128GiB). #DOSBOX-X-ADV:# biosps2: Emulate BIOS INT 15h PS/2 mouse services #DOSBOX-X-ADV:# Note that some OS's like Microsoft Windows neither use INT 33h nor #DOSBOX-X-ADV:# probe the AUX port directly and depend on this BIOS interface exclusively @@ -2456,15 +2690,18 @@ timeout = 0 # dos idle api: If set, DOSBox-X can lower the host system's CPU load when a supported guest program is idle. #DOSBOX-X-ADV-SEE:# #DOSBOX-X-ADV-SEE:# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): -#DOSBOX-X-ADV-SEE:# -> turn off a20 gate on load if loadfix needed; xms memmove causes flat real mode; xms init causes flat real mode; resized free memory block becomes allocated; badcommandhandler; mscdex device name; hma allow reservation; command shell flush keyboard buffer; special operation file prefix; drive z is remote; drive z convert fat; drive z expand path; drive z hide files; automount drive directories; hidenonrepresentable; hma minimum allocation; dos sda size; hma free space; cpm compatibility mode; minimum dos initial private segment; minimum mcb segment; enable dummy device mcb; maximum environment block size on exec; additional environment block size on exec; enable a20 on windows init; zero memory on xms memory allocation; vcpi; unmask timer on disk io; zero int 67h if no ems; zero unused int 68h; emm386 startup active; zero memory on ems memory allocation; ems system handle memory size; ems system handle on even megabyte; ems frame; umb start; umb end; kernel allocation in umb; keep umb on boot; keep private area on boot; private area in umb; private area write protect; autoa20fix; autoloadfix; startincon; int33 max x; int33 max y; int33 xy adjust; int33 mickey threshold; int33 hide host cursor if interrupt subroutine; int33 hide host cursor when polling; int33 disable cell granularity; int 13 disk change detect; int 13 extensions; biosps2; int15 wait force unmask irq; int15 mouse callback does not preserve registers; filenamechar; collating and uppercase; con device use int 16h to detect keyboard input; zero memory on int 21h memory allocation; pipe temporary device +#DOSBOX-X-ADV-SEE:# -> turn off a20 gate on load if loadfix needed; xms log memmove; xms memmove causes flat real mode; xms init causes flat real mode; resized free memory block becomes allocated; exepack; badcommandhandler; mscdex device name; hma allow reservation; command shell flush keyboard buffer; special operation file prefix; drive z is remote; drive z convert fat; drive z expand path; drive z hide files; automount drive directories; hidenonrepresentable; hma minimum allocation; dos sda size; hma free space; cpm compatibility mode; minimum dos initial private segment; minimum mcb segment; enable dummy device mcb; maximum environment block size on exec; additional environment block size on exec; enable a20 on windows init; zero memory on xms memory allocation; vcpi; unmask timer on disk io; zero int 67h if no ems; zero unused int 68h; emm386 startup active; zero memory on ems memory allocation; ems system handle memory size; ems system handle on even megabyte; ems frame; umb start; umb end; kernel allocation in umb; keep umb on boot; keep private area on boot; private area in umb; private area write protect; autoa20fix; autoloadfix; startincon; int33 max x; int33 max y; int33 xy adjust; int33 mickey threshold; int33 hide host cursor if interrupt subroutine; int33 hide host cursor when polling; int33 disable cell granularity; int 13 disk change detect; int 13 extensions; int 13 enable 48-bit LBA; biosps2; int15 wait force unmask irq; int15 mouse callback does not preserve registers; filenamechar; collating and uppercase; con device use int 16h to detect keyboard input; zero memory on int 21h memory allocation; pipe temporary device #DOSBOX-X-ADV-SEE:# xms = true #DOSBOX-X-ADV:turn off a20 gate on load if loadfix needed = false +break on int3 = false +#DOSBOX-X-ADV:xms log memmove = false #DOSBOX-X-ADV:xms memmove causes flat real mode = true #DOSBOX-X-ADV:xms init causes flat real mode = false #DOSBOX-X-ADV:resized free memory block becomes allocated = true xms handles = 0 shell configuration as commands = false +#DOSBOX-X-ADV:exepack = unpack #DOSBOX-X-ADV:badcommandhandler = #DOSBOX-X-ADV:mscdex device name = hma = true @@ -2488,6 +2725,7 @@ log console = false share = true file access tries = 0 network redirector = true +mcb corruption becomes application free memory = false #DOSBOX-X-ADV:minimum dos initial private segment = 0 #DOSBOX-X-ADV:minimum mcb segment = 0 minimum mcb free = 0 @@ -2543,6 +2781,7 @@ mouse report rate = 0 #DOSBOX-X-ADV:int33 disable cell granularity = false #DOSBOX-X-ADV:int 13 disk change detect = true #DOSBOX-X-ADV:int 13 extensions = true +#DOSBOX-X-ADV:int 13 enable 48-bit LBA = true #DOSBOX-X-ADV:biosps2 = true #DOSBOX-X-ADV:int15 wait force unmask irq = true #DOSBOX-X-ADV:int15 mouse callback does not preserve registers = false @@ -2849,27 +3088,33 @@ mode = ps2 rem = This section is the 4DOS.INI file, if you use 4DOS as the command shell [config] -# rem: Records comments (remarks). -# break: Sets or clears extended CTRL+C checking. -# Possible values: on, off. -# numlock: Sets the initial state of the NumLock key. -# Possible values: on, off. -# shell: Specifies the command shell (COMMAND.COM or 4DOS.COM). -# dos: Reports whether DOS occupies HMA and allocates UMB memory (if available). -# fcbs: Number of FCB handles available to DOS programs (1-255). Set to 0 to automatically use a reasonable default. -# files: Number of file handles available to DOS programs (8-255). Set to 0 to automatically use a reasonable default. -# country: Country code for date/time/decimal formats and optionally code page for TTF output and language files. -# lastdrive: The maximum drive letter (A-Z) that can be accessed by programs. -# Possible values: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z. -rem = This section is DOS's CONFIG.SYS file, not all CONFIG.SYS options supported -break = off -numlock = -shell = -dos = high, umb -fcbs = 0 -files = 0 -country = -lastdrive = a +# rem: Records comments (remarks). +# break: Sets or clears extended CTRL+C checking. +# Possible values: on, off. +# numlock: Sets the initial state of the NumLock key. +# Possible values: on, off. +# shell: Specifies the command shell (COMMAND.COM or 4DOS.COM). +# dos: Reports whether DOS occupies HMA and allocates UMB memory (if available). +# fcbs: Number of FCB handles available to DOS programs (1-255). Set to 0 to automatically use a reasonable default. +# files: Number of file handles available to DOS programs (8-255). Set to 0 to automatically use a reasonable default. +# country: Country code for date/time/decimal formats and optionally code page for TTF output and language files. +# lastdrive: The maximum drive letter (A-Z) that can be accessed by programs. +# Possible values: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z. +#DOSBOX-X-ADV:# device driver mcb: If set, allocate a memory block per device driver. If not set, then where possible, the device driver chain is packed together within the DOS kernel without any MCB blocks to cover them, which is normal MS-DOS behavior +#DOSBOX-X-ADV-SEE:# +#DOSBOX-X-ADV-SEE:# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): +#DOSBOX-X-ADV-SEE:# -> device driver mcb +#DOSBOX-X-ADV-SEE:# +rem = This section is DOS's CONFIG.SYS file, not all CONFIG.SYS options supported +break = off +numlock = +shell = +dos = high, umb +fcbs = 0 +files = 0 +country = +lastdrive = a +#DOSBOX-X-ADV:device driver mcb = false set path = Z:\;Z:\SYSTEM;Z:\BIN;Z:\DOS;Z:\4DOS;Z:\DEBUG;Z:\TEXTUTIL set prompt = $P$G set temp = @@ -2882,3 +3127,5 @@ devicehigh = # Lines in this section will be run at startup. # You can put your MOUNT lines here. +[devices] + diff --git a/contrib/windows/installer/readme.txt b/contrib/windows/installer/readme.txt index b8dcad6c601..c5cbd0797a0 100644 --- a/contrib/windows/installer/readme.txt +++ b/contrib/windows/installer/readme.txt @@ -7,6 +7,24 @@ Like DOSBox, it emulates a PC necessary for running many MS-DOS games and applic As a general-purpose DOS emulator, DOSBox-X has many useful and unique features that do not exist in other emulators like DOSBox, such as GUI menu and configuration tool, the ability to save and load state, support for more DOS commands and utilities, better compatibility with DOS applications, as well as Windows clipboard and long filename support for a tighter Windows integration. With DOSBox-X you can run most DOS applications and games reliably in a DOS virtual machine. When in the DOSBox-X command-line, you can type HELP for DOSBox-X command help. You can also open the file dosbox-x.conf for various optional settings in DOSBox-X. + +Installing DOSBox-X +=================== + +- Choosing the appropriate build for your Windows version + Windows 7 and later: Use the standard installer or portable builds (non-XP, non-lowend) + Windows XP: Use the XP compatible installer or portable builds with "XP" in the file name. + May work on ReactOS but support is considered experimental. + Windows Vista: Use the XP installer or standard Visual Studio portable builds or MinGW 32-bit low-end portable build + Windows 9x/NT4/2000: Use the MinGW lowend 9x builds (32-bit SDL1 only). + + Note: MinGW low-end builds may lack some features, currently Slirp support is known to be missing. + + +- Choosing SDL1 and SDL2 builds + Most packages include both SDL1 and SDL2 builds, and most features are the same for both builds. While SDL1 builds may be the default one to use, you may want to try SDL2 builds if you want certain features specific to SDL2 builds (such as the raw mouse input option, touchscreen support) or you encounter specific issue(s) with SDL1 builds (such as incorrect keys in some international keyboard layouts). + + DOSBox-X Quick Start ==================== @@ -21,17 +39,34 @@ Hint: DOSBox-X supports different video output systems for different purposes. B Troubleshooting =============== -- Choosing the appropriate build for your Windows version - Modern Windows users (7 and after) should use the standard (non-XP, non-lowend) builds but may try the non-standard builds if you prefer, although officially not supported. - Windows 9x/NT4/2000 users should use the MinGW lowend 9x builds (32-bit SDL1 only). - Windows XP users must use the XP compatible installer with "XP" in the file name, which includes Visual Studio XP builds and the 32-bit MinGW low-end builds. Note that not all features are available in the MinGW low-end builds, currently Slirp support is known to be missing. You also need to install the DirectX runtime or DOSBox-X will complain you're missing XInput9_1_0.dll. XP compatible builds works in ReactOS as well, but support is considered experimental. - Windows Vista users can use the XP installer or standard (non-XP) Visual Studio builds, because standard (non-XP) installer doesn't work in Vista. MinGW dropped support for XP/Vista, so install the 32-bit low-end builds from the XP compatible installer if you prefer MinGW builds. - -- Joystick support for SDL1 builds - Regarding Joystick support, the SDL1 builds requires XInput compatible devices. If your joystick is not Xinput compatible, you may want to try the SDL2 builds or DirectInput to XInput wrappers such as XOutput or Xbox 360 controller emulator. +- Mouse doesn't work + Try pressing CTRL+F10 or middle button of your mouse. + You can also try mouse drivers such as CuteMouse or VirtualBox Mouse Driver(vbmouse). + +- Incorrect calculation results (Visual Studio builds Intel/ARM) + Floating point precision is an issue for Visual Studio builds or non-Intel CPU platforms. + Possible measures: + o Disable FPU support (fpu=false) + o Change CPU core to `dynamic` (core=dynamic / core=dynamic_x86 / core=dynamic_rec) + o Try it on MinGW builds + +- A game silently crashes or fails to launch, or a log shows "Detected 'Packed file is corrupt' message" + Possible measures: + o Run your program by `loadfix -a your_program` + o Run `A20GATE OFF` before launching your program + o Change the `exepack` option in the dosbox-x.conf to 'a20off' or 'unpack' + +- Joystick issues (SDL1 builds starting from 2022.12.26 to and including 2026.01.02 build) + SDL1 builds may work only with XInput compatible devices. If your joystick is not Xinput compatible, + Use the SDL2 builds + or use DirectInput to XInput wrappers XOutput: https://github.com/csutorasa/XOutput Xbox 360 controller emulator: https://www.x360ce.com/ +- DOSBox-X complains you're missing XInput9_1_0.dll + Old SDL1 versions may require XInput9_1_0.dll. You need to install the DirectX runtime in such case. + Windows Vista and after should already have the required DLL installed. + Further Information =================== Please visit the DOSBox-X homepage for the latest information about DOSBox-X: diff --git a/docs/IPS patch format/ZeroSoft IPS File Format.html b/docs/IPS patch format/ZeroSoft IPS File Format.html new file mode 100644 index 00000000000..06164539a4a --- /dev/null +++ b/docs/IPS patch format/ZeroSoft IPS File Format.html @@ -0,0 +1,244 @@ + + +:: ZeroSoft :: + + + + + + + + + + + + + + + + + + + + + + +
ZeroSoft
+ +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Home
 
Articles
IPS Format
 
Projects
EMUStation
JIPS
IPSWin
SmartDATs
Stalker
 
+
+ + + + + + + + +
+

IPS File Format

+
+

IPS specifications.
+ IPS format was created a lot of time ago and so the specs for many people are too restrictive for the modern needs. + Well, let see these specs.

+
    +
  • IPS files can patch every file not larger than 2^24-1 bits (2047 Mb)
  • +
  • Every patch should not be larger than 2^16-1 bits (7.99 Mb)
  • +
  • An IPS file can hold as many patches he can, assumed that the specified offset and the size of every single patch doesn't overflow + the specified bounds.
  • +
+

As you should realize it isn't so restrictive... 8 )

+

IPS file format
+ The IPS file structure is made just like that:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
SectionSize (Bytes)Description
Header5The header show ever the same string: PATCH note that the string is not NULL terminated.
Record3+2+VariableIt's the record of a single patch, see below
.... The numbers of record may vary
End Of file marker3A string (not NULL terminated) saying EOF
+

IPS Record structure:

+ + + + + + + + + + + + + + + + + + + + + +
SectionSize (Bytes)Description
Offset3The offset where the patch will be placed in the file to patch
Size2The size of the data to put from the specified offset in the patching file
DataSizeContains a number of Size bytes of data to be copied in the file to patch
+

And that's the info you can find around. Now the technical stuff and RLE infos.

+

IPS RLE encoding
+ The next big step in the comprehension of the IPS format is that some patches can be RLE encoded to save space. The + encoding is very simple but can easily be overlooked if someone is not aware of that. If when you read the size value + of a record this field contains 0 you have a RLE encoded patch. You should read again a 16 bit value to obtain the size + of the RLE patch and then you should read a single byte. This byte must be repeated as many times as the value of the + second 16 bit read. An IPS RLE Record should look like that:

+

IPS RLE Record structure:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SectionSize(Bytes)Description

Offset

3Any Value
Size20
RLE_Size2Any nonzero value
Value1This is the value to write RLE_Size times starting from Offset
+

 

+

Encoding Of Offset and Size
+ For peoples using low level languages a little bytes-swapping is needed to make read right the values of Offset and Size. + These values are written linearly, just like Pascal and Basic does when handling numerical variables. The problem is that + low level languages like ASM and C/C++ use the same endianess format of the machine, so every couple of two bytes are + swapped. A 16 bit value is written like this in the IPS: 0x6712, a 24 bit value in this way: 0x671234. If read with a low + level language they'll throw up: 0x1267 and 0x341267 respectively. Here two C macros that does + the conversion after you read them. bp should be a char array:

+

#define BYTE3_TO_UINT(bp) \
+      (((unsigned int)(bp)[0] << 16) & 0x00FF0000) | \
+      (((unsigned int)(bp)[1] << 8) & 0x0000FF00) | \
+      ((unsigned int)(bp)[2] & 0x000000FF)

+ #define BYTE2_TO_UINT(bp) \
+     (((unsigned int)(bp)[0] << 8) & 0xFF00) | \
+     ((unsigned int) (bp)[1] & 0x00FF)

+

16 bit compiler users may find useful to substitute unsigned int + to unsigned + long in  + the BYTE3_TO_UINT macro...

+

Real simple once someone has hacked the format for you, isn't it?

+

Z.e.r.o

+
+
+
+

Copyright (C) 1998-2002 Z.e.r.o and ZeroSoft

+ + + + + \ No newline at end of file diff --git a/dos2unix.sh b/dos2unix.sh index 105c3ed0643..2d41136b8fd 100755 --- a/dos2unix.sh +++ b/dos2unix.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh for ext in c cpp h; do find . -iname \*.$ext | while read -r X; do dos2unix -- "${X}" || exit 1; done done diff --git a/dosbox-sdl2-diff.sh b/dosbox-sdl2-diff.sh index 617f588675e..0167d706c67 100755 --- a/dosbox-sdl2-diff.sh +++ b/dosbox-sdl2-diff.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # dosbox-x-sdl2 should be master-sdl2 branch # dosbox-x should be master branch diff --git a/dosbox-x.reference.conf b/dosbox-x.reference.conf index d2d2059c77b..6a41c69b677 100644 --- a/dosbox-x.reference.conf +++ b/dosbox-x.reference.conf @@ -1,4 +1,4 @@ -# This is the configuration file for DOSBox-X 2025.02.01. (Please use the latest version of DOSBox-X) +# This is the configuration file for DOSBox-X 2026.05.02. (Please use the latest version of DOSBox-X) # Lines starting with a # are comment lines and are ignored by DOSBox-X. # They are used to (briefly) document the effect of each option. # To write out ALL options, use command 'config -all' with -wc or -writeconf options. @@ -14,8 +14,8 @@ # windowposition: Set the window position at startup in the positionX,positionY format (e.g.: 1300,200). # The window will be centered with "," (or empty), and will be in the original position with "-". # display: Specify a screen/display number to use for a multi-screen setup (0 = default). -# output: What video system to use for output (openglnb = OpenGL nearest; openglpp = OpenGL perfect; ttf = TrueType font output). -# Possible values: default, surface, overlay, ttf, opengl, openglnb, openglhq, openglpp, ddraw, direct3d. +# output: What video system to use for output (surface = software (SDL_Surface); openglnb = OpenGL nearest; openglpp = OpenGL perfect; ttf = TrueType font output). +# Possible values: default, surface, overlay, ttf, opengl, openglnb, openglhq, openglpp, ddraw. # videodriver: Forces a video driver (e.g. windib/windows, directx, x11, fbcon, dummy, etc) for the SDL library to use. # transparency: Set the transparency of the DOSBox-X screen (both windowed and full-screen modes, on SDL2 and Windows SDL1 builds). # The valid value is from 0 (no transparency, the default setting) to 90 (high transparency). @@ -118,6 +118,7 @@ debuggerrun = debugger [dosbox] # language: Select a language file for DOSBox-X to use. Encoded with either UTF-8 or a DOS code page. # You can set code page either in the language file or with "country" setting in [config] section. +# beep duration: If nonzero, set the duration of a beep when DOS or INT 10h is given a BEL character # title: Additional text to place in the title bar of the window. # logo text: Text to place at the bottom of the screen during the startup logo. Text will line wrap automatically. # To explicitly break to the next line, put \n in the string. @@ -170,7 +171,7 @@ debuggerrun = debugger # Possible values: true, false, 1, 0, auto. # synchronize time: If set, DOSBox-X will try to automatically synchronize time with the host, unless you decide to change the date/time manually. # machine: The type of machine DOSBox-X tries to emulate. -# Possible values: mda, cga, cga_mono, cga_rgb, cga_composite, cga_composite2, hercules, hercules_plus, hercules_incolor, hercules_color, tandy, pcjr, pcjr_composite, pcjr_composite2, amstrad, ega, ega200, jega, mcga, vgaonly, svga_s3, svga_s386c928, svga_s3vision864, svga_s3vision868, svga_s3vision964, svga_s3vision968, svga_s3trio32, svga_s3trio64, svga_s3trio64v+, svga_s3virge, svga_s3virgevx, svga_et3000, svga_et4000, svga_paradise, vesa_nolfb, vesa_oldvbe, vesa_oldvbe10, pc98, pc9801, pc9821, svga_ati_egavgawonder, svga_ati_vgawonder, svga_ati_vgawonderplus, svga_ati_vgawonderxl, svga_ati_vgawonderxl24, svga_ati_mach8, svga_ati_mach32, svga_ati_mach64, fm_towns. +# Possible values: mda, cga, cga_mono, cga_rgb, cga_composite, cga_composite2, hercules, hercules_plus, hercules_incolor, hercules_color, tandy, pcjr, pcjr_composite, pcjr_composite2, amstrad, ega, ega200, jega, mcga, vgaonly, svga_s3, svga_s386c928, svga_s3vision864, svga_s3vision868, svga_s3vision964, svga_s3vision968, svga_s3trio32, svga_s3trio64, svga_s3trio64v+, svga_s3virge, svga_s3virgevx, svga_et3000, svga_et4000, svga_paradise, vesa_nolfb, vesa_oldvbe, vesa_oldvbe10, vesa_vbe3, pc98, pc9801, pc9821, svga_ati_egavgawonder, svga_ati_vgawonder, svga_ati_vgawonderplus, svga_ati_vgawonderxl, svga_ati_vgawonderxl24, svga_ati_mach8, svga_ati_mach32, svga_ati_mach64, svga_dosbox, svga_dosbox_vbe2, fm_towns. # captures: Directory where things like wave, midi, screenshot get captured. # autosave: Enable the auto-save state feature. Specify a time interval in seconds, and optionally a save slot or start and end save slots. # For example, "autosave=10 11-20" will set a 10-second time interval for auto-saving, and the save slots used will be between 11 and 20. @@ -212,9 +213,10 @@ debuggerrun = debugger # convertdrivefat: If set, DOSBox-X will auto-convert mounted non-FAT drives (such as local drives) to FAT format for use with guest systems. # # Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): -# -> disable graphical splash; allow quit after warning; keyboard hook; weitek; bochs debug port e9; video debug at startup; compresssaveparts; show recorded filename; skip encoding unchanged frames; capture chroma format; capture format; shell environment size; private area size; turn off a20 gate on boot; cbus bus clock; isa bus clock; pci bus clock; call binary on reset; unhandled irq handler; call binary on boot; ibm rom basic; rom bios allocation max; rom bios minimum size; irq delay ns; iodelay; iodelay16; iodelay32; acpi; acpi rsd ptr location; acpi sci irq; acpi iobase; acpi reserved size; memsizekb; dos mem limit; isa memory hole at 512kb; isa memory hole at 15mb; reboot delay; memalias; convert fat free space; convert fat timeout; leading colon write protect image; locking disk image mount; unmask keyboard on int 16 read; int16 keyboard polling undocumented cf behavior; allow port 92 reset; enable port 92; enable 1st dma controller; enable 2nd dma controller; allow dma address decrement; enable 128k capable 16-bit dma; enable dma extra page registers; dma page registers write-only; cascade interrupt never in service; cascade interrupt ignore in service; enable slave pic; enable pc nmi mask; allow more than 640kb base memory; enable pci bus +# -> disable graphical splash; allow quit after warning; keyboard hook; weitek; bochs debug port e9; video debug at startup; compresssaveparts; show recorded filename; skip encoding unchanged frames; capture chroma format; capture format; shell environment size; shell permanent; private area size; turn off a20 gate on boot; cbus bus clock; isa bus clock; pci bus clock; call binary on reset; unhandled irq handler; call binary on boot; ibm rom basic; rom bios allocation max; rom bios minimum size; irq delay ns; iodelay; iodelay16; iodelay32; acpi; acpi rsd ptr location; acpi sci irq; acpi iobase; acpi reserved size; memsizekb; dos mem limit; isa memory hole at 512kb; isa memory hole at 15mb; reboot delay; memalias; convert fat free space; convert fat timeout; leading colon write protect image; locking disk image mount; unmask keyboard on int 16 read; int16 keyboard polling undocumented cf behavior; allow port 92 reset; enable port 92; enable 1st dma controller; enable 2nd dma controller; allow dma address decrement; enable 128k capable 16-bit dma; enable dma extra page registers; dma page registers write-only; cascade interrupt never in service; cascade interrupt ignore in service; enable slave pic; enable pc nmi mask; allow more than 640kb base memory; enable pci bus # language = +beep duration = 0 title = logo text = logo = @@ -308,7 +310,7 @@ convertdrivefat = true # Possible values: green, amber, gray, white. # # Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): -# -> xbrz slice; xbrz fixed scale factor; xbrz max scale factor +# -> modeswitch; xbrz slice; xbrz fixed scale factor; xbrz max scale factor # frameskip = 0 aspect = false @@ -342,7 +344,7 @@ monochrome_pal = green # If you specify a font here then it will be tried first, perhaps before FONT.ROM (see previous option). # # Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): -# -> pc-98 int 1b fdc timer wait; pc-98 pic init to read isr; pc-98 fm board irq; pc-98 fm board io port; pc-98 time stamp; pc-98 sound bios; pc-98 load sound bios rom file; pc-98 buffer page flip; pc-98 enable 256-color planar; pc-98 enable 188 user cg; pc-98 start gdc at 5mhz; pc-98 allow scanline effect; pc-98 nec mouse function; pc-98 video mode; pc-98 timer always cycles; pc-98 timer master frequency; pc-98 allow 4 display partition graphics; pc-98 fontx sbcs; pc-98 fontx dbcs; pc-98 fontx internal symbol; pc-98 show graphics layer on initialize +# -> pc-98 int 1b fdc timer wait; pc-98 pic init to read isr; pc-98 fm board irq; pc-98 fm board io port; pc-98 time stamp; pc-98 sound bios; pc-98 load sound bios rom file; pc-98 buffer page flip; pc-98 enable 256-color planar; pc-98 enable 188 user cg; pc-98 start gdc at 5mhz; pc-98 allow scanline effect; pc-98 nec mouse function; pc-98 video mode; pc-98 timer always cycles; pc-98 timer master frequency; pc-98 allow 4 display partition graphics; pc-98 fontx sbcs; pc-98 fontx dbcs; pc-98 fontx internal symbol; pc-98 show graphics layer on initialize; pc-98 chargen vsync-limited access # pc-98 BIOS copyright string = false pc-98 fm board = auto @@ -425,36 +427,57 @@ j3100type = default j3100colorscroll = false [video] -# vmemsize: Amount of video memory in megabytes. -# The maximum resolution and color depth the svga_s3 will be able to display -# is determined by this value. -# -1: auto (vmemsizekb is ignored) -# 0: 512k (800x600 at 256 colors) if vmemsizekb=0 -# 1: 1024x768 at 256 colors or 800x600 at 64k colors -# 2: 1600x1200 at 256 colors or 1024x768 at 64k colors or 640x480 at 16M colors -# 4: 1600x1200 at 64k colors or 1024x768 at 16M colors -# 8: up to 1600x1200 at 16M colors -# For build engine games, use more memory than in the list above so it can -# use triple buffering and thus won't flicker. -# -# vmemsizekb: Amount of video memory in kilobytes, in addition to vmemsize. -# high intensity blinking: Set to false if you want to see high-intensity background colors instead of blinking foreground text. -# This option has no effect in PC-98 and some other video modes. -# memory io optimization 1: Enable one class of EGA/VGA memory I/O optimizations. Default ON (true). -# If graphical artifacts or errors occur, try turning this off first. May provide a performance benefit. -# scanline render on demand: Render video output at vsync or when something is changed mid frame, instead of stopping to render every scanline. -# May provide a performance benefit to most DOS games. However this may also break timing-dependent game or Demoscene effects. -# Default auto, which will turn if off for VGA modes and turn it on for SVGA modes. -# Possible values: true, false, 1, 0, auto. +# vbememsize: Amount of video memory in kilobytes to report through the VESA BIOS extensions. +# Set this value to an amount lower than vmemsize to handle DOS programs that cannot handle +# more than the small amount of video memory they were designed for. This option also affects +# what video modes are reported through the VBE. +# vbememsizekb: Amount of video memory to report in kilobytes, in addition to vbememsize. +# vmemsize: Amount of video memory in megabytes. +# The maximum resolution and color depth the svga_s3 will be able to display +# is determined by this value. +# -1: auto (vmemsizekb is ignored) +# 0: 512k (800x600 at 256 colors) if vmemsizekb=0 +# 1: 1024x768 at 256 colors or 800x600 at 64k colors +# 2: 1600x1200 at 256 colors or 1024x768 at 64k colors or 640x480 at 16M colors +# 4: 1600x1200 at 64k colors or 1024x768 at 16M colors +# 8: up to 1600x1200 at 16M colors +# Larger values are available depending on machine type. +# For build engine games, use more memory than in the list above so it can +# use triple buffering and thus won't flicker. +# +# vmemsizekb: Amount of video memory in kilobytes, in addition to vmemsize. +# high intensity blinking: Set to false if you want to see high-intensity background colors instead of blinking foreground text. +# This option has no effect in PC-98 and some other video modes. +# memory io optimization 1: Enable one class of EGA/VGA memory I/O optimizations. Default ON (true). +# If graphical artifacts or errors occur, try turning this off first. May provide a performance benefit. +# skip render if nothing changed: If set, DOSBox-X will skip rendering entirely unless any change is made to the guest display. +# This may provide a performance benefit, especially in SVGA modes. This option has no effect unless render on demand is true or auto. +# Normally in DOSBox and DOSBox-X, video is rendered constantly, whether or not anything changed, +# and then compared with the previous frame to determine where to update the host display. +# In addition to the render on demand option, this option may further break timing dependent effects and/or cause problems with some games. +# Possible values: true, false, 1, 0, auto. +# scanline render on demand: Render video output at vsync or when something is changed mid frame, instead of stopping to render every scanline. +# This may provide a performance benefit to most DOS games. However this may also break timing-dependent game or Demoscene effects. +# Default is auto, which will turn it off for VGA modes and turn it on for SVGA modes. +# Possible values: true, false, 1, 0, auto. +# +# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): +# -> int 10h use video parameter table; vmemdelay; lfb vmemdelay; prevent capture; vbe window granularity; vbe window size; vbe protected mode interface; enable 8-bit dac; svga lfb base; pci vga; vga attribute controller mapping; enable supermegazeux tweakmode; vga bios use rom image; vga bios rom image; vga bios size override; video bios dont duplicate cga first half rom font; video bios always offer 14-pixel high rom font; video bios always offer 16-pixel high rom font; video bios enable cga second half rom font; forcerate; sierra ramdac; sierra ramdac lock 565; vga fill active memory; page flip debug line; vertical retrace poll debug line; cgasnow; vga 3da undefined bits; rom bios 8x8 CGA font; rom bios video parameter table; int 10h points at vga bios; unmask timer on int 10 setmode; vesa bank switching window mirroring; vesa bank switching window range check; vesa zero buffer on get information; vesa set display vsync; vesa lfb base scanline adjust; vesa lfb pel scanline adjust; vesa map non-lfb modes to 128kb region; ega per scanline hpel; allow hpel effects; allow hretrace effects; hretrace effect weight; vesa modelist cap; vesa modelist width limit; vesa modelist height limit; vesa vbe put modelist in vesa information; vesa vbe 1.2 modes are 32bpp; allow low resolution vesa modes; allow explicit 24bpp vesa modes; allow high definition vesa modes; allow unusual vesa modes; allow 32bpp vesa modes; allow 24bpp vesa modes; allow 16bpp vesa modes; allow 15bpp vesa modes; allow 8bpp vesa modes; allow 4bpp vesa modes; allow 4bpp packed vesa modes; allow tty vesa modes; double-buffered line compare; ignore vblank wraparound; ignore extended memory bit; enable vga resize delay; resize only on vga active display width increase; vga palette update on full load; ignore odd-even mode in non-cga modes; ignore sequencer blanking +# +vbememsize = 0 +vbememsizekb = 0 +vmemsize = -1 +vmemsizekb = 0 +high intensity blinking = true +memory io optimization 1 = true +skip render if nothing changed = auto +scanline render on demand = auto + +[script] # # Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): -# -> int 10h use video parameter table; vmemdelay; lfb vmemdelay; prevent capture; vbe window granularity; vbe window size; enable 8-bit dac; svga lfb base; pci vga; vga attribute controller mapping; enable supermegazeux tweakmode; vga bios use rom image; vga bios rom image; vga bios size override; video bios dont duplicate cga first half rom font; video bios always offer 14-pixel high rom font; video bios always offer 16-pixel high rom font; video bios enable cga second half rom font; forcerate; sierra ramdac; sierra ramdac lock 565; vga fill active memory; page flip debug line; vertical retrace poll debug line; cgasnow; vga 3da undefined bits; rom bios 8x8 CGA font; rom bios video parameter table; int 10h points at vga bios; unmask timer on int 10 setmode; vesa bank switching window mirroring; vesa bank switching window range check; vesa zero buffer on get information; vesa set display vsync; vesa lfb base scanline adjust; vesa lfb pel scanline adjust; vesa map non-lfb modes to 128kb region; ega per scanline hpel; allow hpel effects; allow hretrace effects; hretrace effect weight; vesa modelist cap; vesa modelist width limit; vesa modelist height limit; vesa vbe put modelist in vesa information; vesa vbe 1.2 modes are 32bpp; allow low resolution vesa modes; allow explicit 24bpp vesa modes; allow high definition vesa modes; allow unusual vesa modes; allow 32bpp vesa modes; allow 24bpp vesa modes; allow 16bpp vesa modes; allow 15bpp vesa modes; allow 8bpp vesa modes; allow 4bpp vesa modes; allow 4bpp packed vesa modes; allow tty vesa modes; double-buffered line compare; ignore vblank wraparound; ignore extended memory bit; enable vga resize delay; resize only on vga active display width increase; vga palette update on full load; ignore odd-even mode in non-cga modes; ignore sequencer blanking +# -> startup.js # -vmemsize = -1 -vmemsizekb = 0 -high intensity blinking = true -memory io optimization 1 = true -scanline render on demand = auto [vsync] # vsyncmode: Synchronize vsync timing to the host display. Requires calibration within DOSBox-X. @@ -468,11 +491,12 @@ vsyncrate = 75 # core: CPU Core used in emulation. auto will switch to dynamic if available and appropriate. # For the dynamic core, both dynamic_x86 and dynamic_rec are supported (dynamic_x86 is preferred). # Windows 95 or other preemptive multitasking OSes will not work with the dynamic_rec core. -# Possible values: auto, dynamic, dynamic_x86, dynamic_nodhfpu, dynamic, dynamic_rec, normal, full, simple. +# Possible values: auto, dynamic, dynamic_x86, dynamic_nodhfpu, dynamic_rec, normal, full, simple. # fpu: Enable FPU emulation # Possible values: true, false, 1, 0, auto, 8087, 287, 387. # rdtsc rate: If nonzero, the Pentium RDTSC counter will tick at this rate per millisecond instead of by the cycle count # segment limits: Enforce checks for segment limits on 80286 and higher CPU types. +# lds wraparound: For LDS/LES instructions, in 16-bit code, check for 64KB wraparound case. # cputype: CPU Type used in emulation. "auto" emulates a 486 which tolerates Pentium instructions. # "experimental" enables newer instructions not normally found in the CPU types emulated by DOSBox-X, such as FISTTP. # Possible values: auto, 8086, 8086_prefetch, 80186, 80186_prefetch, 286, 286_prefetch, 386, 386_prefetch, 486old, 486old_prefetch, 486, 486_prefetch, pentium, pentium_mmx, ppro_slow, pentium_ii, pentium_iii, experimental. @@ -502,6 +526,7 @@ core = auto fpu = true rdtsc rate = 0 segment limits = true +lds wraparound = true cputype = auto cycles = auto cycleup = 10 @@ -552,7 +577,7 @@ auxdevice = intellimouse # gray scaled color scheme: (0,0,0) #0e0e0e (75,75,75) (89,89,89) (38,38,38) (52,52,52) #717171 #c0c0c0 #808080 (28,28,28) (150,150,150) (178,178,178) (76,76,76) (104,104,104) (226,226,226) (255,255,255) # An optional leading "+" sign allows the preset color scheme to be used when switching from another output. # outputswitch: Specifies the output that DOSBox-X should switch to from the TTF output when a graphical mode is requested, or auto for automatic selection. -# Possible values: auto, surface, opengl, openglnb, openglhq, openglpp, direct3d. +# Possible values: auto, surface, opengl, openglnb, openglhq, openglpp. # winperc: Specifies the window percentage for the TTF output (100 = full screen). Ignored if the ptsize setting is specified. # ptsize: Specifies the font point size for the TTF output. If specified (minimum: 9), it will override the winperc setting. # lins: Specifies the number of rows on the screen for the TTF output (0 = default). @@ -687,7 +712,7 @@ fluid.soundfont = [sblaster] # sbtype: Type of Sound Blaster to emulate. 'gb' is Game Blaster. -# Possible values: sb1, sb2, sbpro1, sbpro2, sb16, sb16vibra, gb, ess688, ess1688, reveal_sc400, none. +# Possible values: sb1, sb1.0, sb1.5, sb2, sb2.0, sb2.01, sbpro1, sbpro2, sb16, sb16vibra, gb, ess688, ess1688, reveal_sc400, none. # sbbase: The IO address of the Sound Blaster. # 220h to 2E0h are for use with IBM PC Sound Blaster emulation. # D2h to DEh are for use with NEC PC-98 Sound Blaster 16 emulation. @@ -696,8 +721,12 @@ fluid.soundfont = # Set to 0 for the default setting of the sound card, or set to -1 to start DOSBox-X with the IRQ unassigned. # Possible values: 7, 5, 3, 9, 10, 11, 12, 0, -1. # listen to recording source: When the guest records audio from the Sound Blaster card, send the input source to the speakers as well so it can be heard. -# recording source: Audio source to use when guest is recording audio. At this time only generated audio sources are available. -# Possible values: silence, hiss, 1khz tone. +# recording source: Audio source to use when guest is recording audio. Options: silence, hiss, 1khz tone, or microphone (Windows WASAPI input). +# Possible values: silence, hiss, 1khz tone, microphone. +# prefer hfp: Prefer Bluetooth HFP (Hands-Free Profile) microphone mode. +# This allows using the microphone of a BT headset but reduces +# audio quality (typically 8kHz–16kHz telephone quality). +# When disabled, higher-quality microphones are preferred. # dma: The DMA number of the Sound Blaster. Set to -1 to start DOSBox-X with the DMA unassigned. # Possible values: 1, 5, 0, 3, 6, 7, -1. # hdma: The High DMA number of the Sound Blaster. Set to -1 to start DOSBox-X with the High DMA unassigned. @@ -725,20 +754,21 @@ fluid.soundfont = # blaster environment variable: Whether or not to set the BLASTER environment variable automatically at startup # # Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): -# -> mindma; irq hack; dsp command aliases; pic unmask irq; enable asp; disable filtering; dsp write buffer status must return 0x7f or 0xff; pre-set sbpro stereo; cms; adlib force timer overflow on detect; retrowave_spi_cs; force dsp auto-init; force goldplay; goldplay stereo; dsp require interrupt acknowledge; dsp write busy delay; sample rate limits; instant direct dac; stereo control with sbpro only; dsp busy cycle rate; dsp busy cycle always; dsp busy cycle duty; io port aliasing +# -> mindma; irq hack; dsp command aliases; pic unmask irq; enable asp; disable filtering; dsp write buffer status must return 0x7f or 0xff; pre-set sbpro stereo; cms; adlib pcm boost; adlib force timer overflow on detect; retrowave_spi_cs; force dsp auto-init; force goldplay; goldplay stereo; dsp require interrupt acknowledge; dsp write busy delay; sample rate limits; instant direct dac; stereo control with sbpro only; dsp busy cycle rate; dsp busy cycle always; dsp busy cycle duty; io port aliasing # sbtype = sb16 sbbase = 220 irq = 7 listen to recording source = false recording source = silence +prefer hfp = false dma = 1 hdma = 5 enable speaker = false sbmixer = true oplmode = auto oplemu = default -oplrate = 48000 +oplrate = 49716 oplport = retrowave_bus = serial retrowave_port = @@ -746,6 +776,72 @@ hardwarebase = 220 goldplay = true blaster environment variable = true +[sblaster2] +# sbtype: Type of Sound Blaster to emulate. 'gb' is Game Blaster. +# Possible values: sb1, sb1.0, sb1.5, sb2, sb2.0, sb2.01, sbpro1, sbpro2, sb16, sb16vibra, gb, ess688, ess1688, reveal_sc400, none. +# sbbase: The IO address of the Sound Blaster. +# 220h to 2E0h are for use with IBM PC Sound Blaster emulation. +# D2h to DEh are for use with NEC PC-98 Sound Blaster 16 emulation. +# Possible values: 220, 240, 260, 280, 2a0, 2c0, 2e0, d2, d4, d6, d8, da, dc, de. +# irq: The IRQ number of the Sound Blaster (usually 5 or 7, depending on the sound card type and the game). +# Set to 0 for the default setting of the sound card, or set to -1 to start DOSBox-X with the IRQ unassigned. +# Possible values: 7, 5, 3, 9, 10, 11, 12, 0, -1. +# listen to recording source: When the guest records audio from the Sound Blaster card, send the input source to the speakers as well so it can be heard. +# recording source: Audio source to use when guest is recording audio. Options: silence, hiss, 1khz tone, or microphone (Windows WASAPI input). +# Possible values: silence, hiss, 1khz tone, microphone. +# prefer hfp: Prefer Bluetooth HFP (Hands-Free Profile) microphone mode. +# This allows using the microphone of a BT headset but reduces +# audio quality (typically 8kHz–16kHz telephone quality). +# When disabled, higher-quality microphones are preferred. +# dma: The DMA number of the Sound Blaster. Set to -1 to start DOSBox-X with the DMA unassigned. +# Possible values: 1, 5, 0, 3, 6, 7, -1. +# hdma: The High DMA number of the Sound Blaster. Set to -1 to start DOSBox-X with the High DMA unassigned. +# Possible values: 1, 5, 0, 3, 6, 7, -1. +# enable speaker: Start the DOS virtual machine with the Sound Blaster speaker enabled. +# Sound Blaster Pro and older cards have a speaker disable/enable command. +# Normally the card boots up with the speaker disabled. If a DOS game or demo +# attempts to play without enabling the speaker, set this option to true to +# compensate. This setting has no meaning if emulating a Sound Blaster 16 card. +# sbmixer: Allow the Sound Blaster mixer to modify the DOSBox-X mixer. +# oplmode: Type of OPL emulation. On 'auto' the mode is determined by the 'sbtype' setting. +# All OPL modes are AdLib-compatible. +# Possible values: auto, opl2, dualopl2, opl3, opl3gold, none, hardware, hardwaregb, esfm. +# oplemu: Provider for the OPL emulation. 'compat' might provide better quality. +# 'nuked' is the most accurate (but the most CPU-intensive). See oplrate as well. +# Possible values: default, compat, fast, nuked, mame, opl2board, opl3duoboard, retrowave_opl3, esfmu. +# oplrate: Sample rate of OPL music emulation. Use 49716 for highest quality (set the mixer rate accordingly). +# Possible values: 49716, 48000, 44100, 32000, 22050, 16000, 11025, 8000. +# oplport: Serial port of the OPL2 Audio Board when oplemu=opl2board, opl2mode will become 'opl2' automatically. +# retrowave_bus: Bus of the Retrowave series board (serial/spi). SPI is only supported on Linux. +# retrowave_port: Serial port of the Retrowave series board. +# hardwarebase: base address of the real hardware Sound Blaster: +# 210,220,230,240,250,260,280 +# goldplay: Enable goldplay emulation. +# blaster environment variable: Whether or not to set the BLASTER environment variable automatically at startup +# +# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): +# -> mindma; irq hack; dsp command aliases; pic unmask irq; enable asp; disable filtering; dsp write buffer status must return 0x7f or 0xff; pre-set sbpro stereo; cms; adlib pcm boost; adlib force timer overflow on detect; retrowave_spi_cs; force dsp auto-init; force goldplay; goldplay stereo; dsp require interrupt acknowledge; dsp write busy delay; sample rate limits; instant direct dac; stereo control with sbpro only; dsp busy cycle rate; dsp busy cycle always; dsp busy cycle duty; io port aliasing +# +sbtype = none +sbbase = 260 +irq = 3 +listen to recording source = false +recording source = silence +prefer hfp = false +dma = 0 +hdma = 7 +enable speaker = false +sbmixer = true +oplmode = none +oplemu = default +oplrate = 49716 +oplport = +retrowave_bus = serial +retrowave_port = +hardwarebase = 220 +goldplay = true +blaster environment variable = false + [gus] # gus: Enable the Gravis Ultrasound emulation. # global register read alias: If true, all GUS global registers have a read alias at N and N+0x80. @@ -1075,135 +1171,139 @@ shellhide = false timeout = 0 [dos] -# xms: Enable XMS support. -# xms handles: Number of XMS handles available for the DOS environment, or 0 to use a reasonable default -# shell configuration as commands: Allow entering dosbox-x.conf configuration parameters as shell commands to get and set settings. -# This is disabled by default to avoid conflicts between commands and executables. -# It is recommended to get and set dosbox-x.conf settings using the CONFIG command instead. -# Compatibility with DOSBox SVN can be improved by enabling this option. -# hma: Report through XMS that HMA exists (not necessarily available) -# hard drive data rate limit: Slow down (limit) hard disk throughput. This setting controls the limit in bytes/second. -# Set to 0 to disable the limit, or -1 (default) to use a reasonable limit. -# The disk I/O performance as in DOSBox SVN can be achieved by setting this to 0. -# floppy drive data rate limit: Slow down (limit) floppy disk throughput. This setting controls the limit in bytes/second. -# Set to 0 to disable the limit, or -1 (default) to use a reasonable limit. -# The disk I/O performance as in DOSBox SVN can be achieved by setting this to 0. -# ansi.sys: If set (by default), ANSI.SYS emulation is on. If clear, ANSI.SYS is not emulated and will not appear to be installed. -# NOTE: This option has no effect in PC-98 mode where MS-DOS systems integrate ANSI.SYS into the DOS kernel. -# log console: If set, log DOS CON output to the log file. Setting to "quiet" will log DOS CON output only (no debugging output). -# Possible values: true, false, 1, 0, quiet. -# share: Reports SHARE.EXE as resident and provides functions such as file-locking and record-locking, although not all SHARE functions are emulated. -# file access tries: If a positive integer is set, DOSBox-X will try to read/write/lock files directly on mounted local drives for the specified number of times without caching before failing on Windows systems. -# For networked database applications (e.g. dBase, FoxPro, etc), it is strongly recommended to set this to e.g. 3 for correct operations. -# network redirector: Report DOS network redirector as resident. This will allow the host name to be returned unless the secure mode is enabled. -# You can also directly access UNC network paths in the form \\MACHINE\SHARE even if they are not mounted as drives on Windows systems. -# Set either "ipx=true" in [ipx] section or "ne2000=true" in [ne2000] section for a full network redirector environment. -# minimum mcb free: Minimum free segment value to leave free. At startup, the DOS kernel will allocate memory -# up to this point. This can be used to deal with EXEPACK issues or DOS programs that cannot -# be loaded too low in memory. If you want more free conventional memory to be reported, -# you can for example set its value to 1. -# ems: Enable EMS support. The default (=true) provides the best -# compatibility but certain applications may run better with -# other choices, or require EMS support to be disabled (=false) -# to work at all. -# Possible values: true, emsboard, emm386, false, 1, 0. -# umb: Enable UMB support. -# quick reboot: If set, the DOS restart call will reboot the emulated DOS (integrated DOS or guest DOS) instead of the virtual machine. -# -# ver: Set DOS version. Specify as major.minor format. A single number is treated as the major version (compatible with LFN support). Common settings are: -# auto (or unset) Pick DOS kernel version 5.0 (DOSBox default) -# 3.3 MS-DOS 3.3 emulation (not tested!) -# 5.0 MS-DOS 5.0 emulation (recommended for DOS gaming) -# 6.22 MS-DOS 6.22 emulation -# 7.0 MS-DOS 7.0 (or Windows 95 pure DOS mode) emulation -# 7.1 MS-DOS 7.1 (or Windows 98 pure DOS mode) emulation -# Long filename (LFN) support will be enabled with a reported DOS version of 7.0 or higher with "lfn=auto" (default). -# Similarly, FAT32 disk images will be supported with a reported DOS version of 7.1 or higher. -# -# lfn: Enable long filename support. If set to auto (default), LFN support is enabled if the reported DOS version is at least 7.0. -# If set to autostart, the built-in VER command won't activate/deactivate LFN support according to the reported DOS version. -# Possible values: true, false, 1, 0, auto, autostart. -# fat32setversion: Whether DOSBox-X should automatically set the reported DOS version to 7.0/7.10 when it is less than 7.0/7.10 and mounting LBA/FAT32 disk images is requested. -# If set to "ask", a popup message will show up to ask whether DOSBox-X should automatically change the reported DOS version in order to mount the disk image. -# Possible values: ask, auto, manual. -# shellhigh: Load the DOSBox-X command shell into the upper memory when the UMB is available. -# If set to auto (default), it is enabled if the reported DOS version is at least 7.0. -# Possible values: true, false, 1, 0, auto. -# automount: Enable automatic drive mounting in Windows. -# automountall: Automatically mount all available Windows drives at start. -# Possible values: true, false, 1, 0, quiet. -# mountwarning: If set, a warning message will be displayed while trying to auto-mount your Windows host drives. -# autofixwarning: If set to true or both, DOSBox-X shows messages while trying to automatically fix the "Packed file is corrupt" error. -# If set to false or none, DOSBox-X will not show such messages on the screen when the error occurred. -# If set to "a20fix" or "loadfix", DOSBox-X will show the message for the a20fix or the loadfix only. -# Possible values: true, false, 1, 0, both, a20fix, loadfix, none. -# startcmd: Enable START command to start programs to run on the host system. On Windows host programs or commands may also be launched directly. -# starttranspath: Specify whether DOSBox-X should automatically translate all paths in the command-line to host system paths when starting programs to run on the host system. -# startwait: Specify whether DOSBox-X should wait for the host system applications after they are started. -# startquiet: If set, before launching host system applications to run on the host DOSBox-X will not show messages like "Now run it as a Windows application". -# startnopause: If set, DOSBox-X will not pause after host command execution is completed. -# vmware: Enable VMware interface emulation including guest mouse integration (when used along with e.g. VMware mouse driver for Windows 3.x). -# int33: Enable INT 33H for mouse support. -# mouse report rate: Mouse reporting rate, or 0 for auto. This affects how often mouse events are reported to the guest through the mouse interrupt. -# Some games including CyClone need a lower reporting rate to function correctly. Auto mode allows the guest to change the report rate through the PS/2 mouse emulation. -# This option does not affect any DOS game that uses polling through INT 33h to detect mouse movement. -# keyboardlayout: Language code of the keyboard layout (or none). -# customcodepage: Set a custom code page for CHCP command and specify a SBCS code page file, following the standard SBCS code page format. -# Examples of SBCS code pages are available from the Unicode Consortium website: https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/ -# dbcs: Enable DBCS table and Chinese, Japanese, Korean support for the TrueType font (TTF) output. -# CAUTION: Some software will crash without the DBCS table, including the Open Watcom installer. -# dos clipboard device enable: If enabled, a DOS device will be added for bidirectional communications with the shared clipboard. -# Setting to "read" will only allow read access, and setting to "write" will only allow write access. -# Setting to "full" or "true" enables both; setting to "false" or "disabled" disables the access or device. -# The default device name is CLIP$, but can be changed with the "dos clipboard device name" setting below. -# dos clipboard device name: Set DOS device name (up to 8 characters) for bidirectional communications with the shared clipboard. -# If unset or invalid, the default name CLIP$ will be used (e.g. "TYPE CLIP$" shows the clipboard contents). -# It has no effect if "dos clipboard device enable" is disabled, and it is deactivated if the secure mode is enabled. -# dos clipboard api: If set, DOS APIs for communications with the Windows clipboard will be enabled for shared clipboard communications. -# Caution: Enabling this API may cause some programs to think they are running under Windows -# dos idle api: If set, DOSBox-X can lower the host system's CPU load when a supported guest program is idle. +# xms: Enable XMS support. +# break on int3: If set, a breakpoint on INT 3 is automatically set up at startup +# xms handles: Number of XMS handles available for the DOS environment, or 0 to use a reasonable default +# shell configuration as commands: Allow entering dosbox-x.conf configuration parameters as shell commands to get and set settings. +# This is disabled by default to avoid conflicts between commands and executables. +# It is recommended to get and set dosbox-x.conf settings using the CONFIG command instead. +# Compatibility with DOSBox SVN can be improved by enabling this option. +# hma: Report through XMS that HMA exists (not necessarily available) +# hard drive data rate limit: Slow down (limit) hard disk throughput. This setting controls the limit in bytes/second. +# Set to 0 to disable the limit, or -1 (default) to use a reasonable limit. +# The disk I/O performance as in DOSBox SVN can be achieved by setting this to 0. +# floppy drive data rate limit: Slow down (limit) floppy disk throughput. This setting controls the limit in bytes/second. +# Set to 0 to disable the limit, or -1 (default) to use a reasonable limit. +# The disk I/O performance as in DOSBox SVN can be achieved by setting this to 0. +# ansi.sys: If set (by default), ANSI.SYS emulation is on. If clear, ANSI.SYS is not emulated and will not appear to be installed. +# NOTE: This option has no effect in PC-98 mode where MS-DOS systems integrate ANSI.SYS into the DOS kernel. +# log console: If set, log DOS CON output to the log file. Setting to "quiet" will log DOS CON output only (no debugging output). +# Possible values: true, false, 1, 0, quiet. +# share: Reports SHARE.EXE as resident and provides functions such as file-locking and record-locking, although not all SHARE functions are emulated. +# file access tries: If a positive integer is set, DOSBox-X will try to read/write/lock files directly on mounted local drives for the specified number of times without caching before failing on Windows systems. +# For networked database applications (e.g. dBase, FoxPro, etc), it is strongly recommended to set this to e.g. 3 for correct operations. +# network redirector: Report DOS network redirector as resident. This will allow the host name to be returned unless the secure mode is enabled. +# You can also directly access UNC network paths in the form \\MACHINE\SHARE even if they are not mounted as drives on Windows systems. +# Set either "ipx=true" in [ipx] section or "ne2000=true" in [ne2000] section for a full network redirector environment. +# mcb corruption becomes application free memory: If MCB chain corruption occurs following the DOS program PSP segment and the DOS program does anything to cause memory allocation,make a new free memory block in it's place instead of halting emulation with an MCB chain error. Some DOS programs are sloppywith memory to corrupt the MCB chain after itself in memory. This is apparently real MS-DOS behavior, set to true to enable.If set to false, all MCB chain corruption will halt emulation as DOSBox forks typically do already. +# minimum mcb free: Minimum free segment value to leave free. At startup, the DOS kernel will allocate memory +# up to this point. This can be used to deal with EXEPACK issues or DOS programs that cannot +# be loaded too low in memory. If you want more free conventional memory to be reported, +# you can for example set its value to 1. +# ems: Enable EMS support. The default (=true) provides the best +# compatibility but certain applications may run better with +# other choices, or require EMS support to be disabled (=false) +# to work at all. +# Possible values: true, emsboard, emm386, false, 1, 0. +# umb: Enable UMB support. +# quick reboot: If set, the DOS restart call will reboot the emulated DOS (integrated DOS or guest DOS) instead of the virtual machine. +# +# ver: Set DOS version. Specify as major.minor format. A single number is treated as the major version (compatible with LFN support). Common settings are: +# auto (or unset) Pick DOS kernel version 5.0 (DOSBox default) +# 3.3 MS-DOS 3.3 emulation (not tested!) +# 5.0 MS-DOS 5.0 emulation (recommended for DOS gaming) +# 6.22 MS-DOS 6.22 emulation +# 7.0 MS-DOS 7.0 (or Windows 95 pure DOS mode) emulation +# 7.1 MS-DOS 7.1 (or Windows 98 pure DOS mode) emulation +# Long filename (LFN) support will be enabled with a reported DOS version of 7.0 or higher with "lfn=auto" (default). +# Similarly, FAT32 disk images will be supported with a reported DOS version of 7.1 or higher. +# +# lfn: Enable long filename support. If set to auto (default), LFN support is enabled if the reported DOS version is at least 7.0. +# If set to autostart, the built-in VER command won't activate/deactivate LFN support according to the reported DOS version. +# Possible values: true, false, 1, 0, auto, autostart. +# fat32setversion: Whether DOSBox-X should automatically set the reported DOS version to 7.0/7.10 when it is less than 7.0/7.10 and mounting LBA/FAT32 disk images is requested. +# If set to "ask", a popup message will show up to ask whether DOSBox-X should automatically change the reported DOS version in order to mount the disk image. +# Possible values: ask, auto, manual. +# shellhigh: Load the DOSBox-X command shell into the upper memory when the UMB is available. +# If set to auto (default), it is enabled if the reported DOS version is at least 7.0. +# Possible values: true, false, 1, 0, auto. +# automount: Enable automatic drive mounting in Windows. +# automountall: Automatically mount all available Windows drives at start. +# Possible values: true, false, 1, 0, quiet. +# mountwarning: If set, a warning message will be displayed while trying to auto-mount your Windows host drives. +# autofixwarning: If set to true or both, DOSBox-X shows messages while trying to automatically fix the "Packed file is corrupt" error. +# If set to false or none, DOSBox-X will not show such messages on the screen when the error occurred. +# If set to "a20fix" or "loadfix", DOSBox-X will show the message for the a20fix or the loadfix only. +# Possible values: true, false, 1, 0, both, a20fix, loadfix, none. +# startcmd: Enable START command to start programs to run on the host system. On Windows host programs or commands may also be launched directly. +# starttranspath: Specify whether DOSBox-X should automatically translate all paths in the command-line to host system paths when starting programs to run on the host system. +# startwait: Specify whether DOSBox-X should wait for the host system applications after they are started. +# startquiet: If set, before launching host system applications to run on the host DOSBox-X will not show messages like "Now run it as a Windows application". +# startnopause: If set, DOSBox-X will not pause after host command execution is completed. +# vmware: Enable VMware interface emulation including guest mouse integration (when used along with e.g. VMware mouse driver for Windows 3.x). +# int33: Enable INT 33H for mouse support. +# mouse report rate: Mouse reporting rate, or 0 for auto. This affects how often mouse events are reported to the guest through the mouse interrupt. +# Some games including CyClone need a lower reporting rate to function correctly. Auto mode allows the guest to change the report rate through the PS/2 mouse emulation. +# This option does not affect any DOS game that uses polling through INT 33h to detect mouse movement. +# keyboardlayout: Language code of the keyboard layout (or none). +# customcodepage: Set a custom code page for CHCP command and specify a SBCS code page file, following the standard SBCS code page format. +# Examples of SBCS code pages are available from the Unicode Consortium website: https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/ +# dbcs: Enable DBCS table and Chinese, Japanese, Korean support for the TrueType font (TTF) output. +# CAUTION: Some software will crash without the DBCS table, including the Open Watcom installer. +# dos clipboard device enable: If enabled, a DOS device will be added for bidirectional communications with the shared clipboard. +# Setting to "read" will only allow read access, and setting to "write" will only allow write access. +# Setting to "full" or "true" enables both; setting to "false" or "disabled" disables the access or device. +# The default device name is CLIP$, but can be changed with the "dos clipboard device name" setting below. +# dos clipboard device name: Set DOS device name (up to 8 characters) for bidirectional communications with the shared clipboard. +# If unset or invalid, the default name CLIP$ will be used (e.g. "TYPE CLIP$" shows the clipboard contents). +# It has no effect if "dos clipboard device enable" is disabled, and it is deactivated if the secure mode is enabled. +# dos clipboard api: If set, DOS APIs for communications with the Windows clipboard will be enabled for shared clipboard communications. +# Caution: Enabling this API may cause some programs to think they are running under Windows +# dos idle api: If set, DOSBox-X can lower the host system's CPU load when a supported guest program is idle. # # Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): -# -> turn off a20 gate on load if loadfix needed; xms memmove causes flat real mode; xms init causes flat real mode; resized free memory block becomes allocated; badcommandhandler; mscdex device name; hma allow reservation; command shell flush keyboard buffer; special operation file prefix; drive z is remote; drive z convert fat; drive z expand path; drive z hide files; automount drive directories; hidenonrepresentable; hma minimum allocation; dos sda size; hma free space; cpm compatibility mode; minimum dos initial private segment; minimum mcb segment; enable dummy device mcb; maximum environment block size on exec; additional environment block size on exec; enable a20 on windows init; zero memory on xms memory allocation; vcpi; unmask timer on disk io; zero int 67h if no ems; zero unused int 68h; emm386 startup active; zero memory on ems memory allocation; ems system handle memory size; ems system handle on even megabyte; ems frame; umb start; umb end; kernel allocation in umb; keep umb on boot; keep private area on boot; private area in umb; private area write protect; autoa20fix; autoloadfix; startincon; int33 max x; int33 max y; int33 xy adjust; int33 mickey threshold; int33 hide host cursor if interrupt subroutine; int33 hide host cursor when polling; int33 disable cell granularity; int 13 disk change detect; int 13 extensions; biosps2; int15 wait force unmask irq; int15 mouse callback does not preserve registers; filenamechar; collating and uppercase; con device use int 16h to detect keyboard input; zero memory on int 21h memory allocation; pipe temporary device +# -> turn off a20 gate on load if loadfix needed; xms log memmove; xms memmove causes flat real mode; xms init causes flat real mode; resized free memory block becomes allocated; exepack; badcommandhandler; mscdex device name; hma allow reservation; command shell flush keyboard buffer; special operation file prefix; drive z is remote; drive z convert fat; drive z expand path; drive z hide files; automount drive directories; hidenonrepresentable; hma minimum allocation; dos sda size; hma free space; cpm compatibility mode; minimum dos initial private segment; minimum mcb segment; enable dummy device mcb; maximum environment block size on exec; additional environment block size on exec; enable a20 on windows init; zero memory on xms memory allocation; vcpi; unmask timer on disk io; zero int 67h if no ems; zero unused int 68h; emm386 startup active; zero memory on ems memory allocation; ems system handle memory size; ems system handle on even megabyte; ems frame; umb start; umb end; kernel allocation in umb; keep umb on boot; keep private area on boot; private area in umb; private area write protect; autoa20fix; autoloadfix; startincon; int33 max x; int33 max y; int33 xy adjust; int33 mickey threshold; int33 hide host cursor if interrupt subroutine; int33 hide host cursor when polling; int33 disable cell granularity; int 13 disk change detect; int 13 extensions; int 13 enable 48-bit LBA; biosps2; int15 wait force unmask irq; int15 mouse callback does not preserve registers; filenamechar; collating and uppercase; con device use int 16h to detect keyboard input; zero memory on int 21h memory allocation; pipe temporary device # -xms = true -xms handles = 0 -shell configuration as commands = false -hma = true -hard drive data rate limit = -1 -floppy drive data rate limit = -1 -ansi.sys = true -log console = false -share = true -file access tries = 0 -network redirector = true -minimum mcb free = 0 -ems = true -umb = true -quick reboot = false -ver = -lfn = auto -fat32setversion = ask -shellhigh = auto -automount = true -automountall = false -mountwarning = true -autofixwarning = false -startcmd = false -starttranspath = true -startwait = true -startquiet = false -startnopause = false -vmware = true -int33 = true -mouse report rate = 0 -keyboardlayout = auto -customcodepage = -dbcs = true -dos clipboard device enable = false -dos clipboard device name = CLIP$ -dos clipboard api = false -dos idle api = true +xms = true +break on int3 = false +xms handles = 0 +shell configuration as commands = false +hma = true +hard drive data rate limit = -1 +floppy drive data rate limit = -1 +ansi.sys = true +log console = false +share = true +file access tries = 0 +network redirector = true +mcb corruption becomes application free memory = false +minimum mcb free = 0 +ems = true +umb = true +quick reboot = false +ver = +lfn = auto +fat32setversion = ask +shellhigh = auto +automount = true +automountall = false +mountwarning = true +autofixwarning = false +startcmd = false +starttranspath = true +startwait = true +startquiet = false +startnopause = false +vmware = true +int33 = true +mouse report rate = 0 +keyboardlayout = auto +customcodepage = +dbcs = true +dos clipboard device enable = false +dos clipboard device name = CLIP$ +dos clipboard api = false +dos idle api = true [ipx] # ipx: Enable ipx over UDP/IP emulation. @@ -1326,6 +1426,10 @@ rem = This section is the 4DOS.INI file, if you use 4DOS as the command shell # country: Country code for date/time/decimal formats and optionally code page for TTF output and language files. # lastdrive: The maximum drive letter (A-Z) that can be accessed by programs. # Possible values: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z. +# +# Advanced options (see full configuration reference file [dosbox-x.reference.full.conf] for more details): +# -> device driver mcb +# rem = This section is DOS's CONFIG.SYS file, not all CONFIG.SYS options supported break = off numlock = @@ -1347,3 +1451,5 @@ devicehigh = # Lines in this section will be run at startup. # You can put your MOUNT lines here. +[devices] + diff --git a/dosbox-x.reference.full.conf b/dosbox-x.reference.full.conf index a2943164a34..07b7f4b8041 100644 --- a/dosbox-x.reference.full.conf +++ b/dosbox-x.reference.full.conf @@ -1,4 +1,4 @@ -# This is the configuration file for DOSBox-X 2025.02.01. (Please use the latest version of DOSBox-X) +# This is the configuration file for DOSBox-X 2026.05.02. (Please use the latest version of DOSBox-X) # Lines starting with a # are comment lines and are ignored by DOSBox-X. # They are used to (briefly) document the effect of each option. # To write out ALL options, use command 'config -all' with -wc or -writeconf options. @@ -14,8 +14,8 @@ # windowposition: Set the window position at startup in the positionX,positionY format (e.g.: 1300,200). # The window will be centered with "," (or empty), and will be in the original position with "-". # display: Specify a screen/display number to use for a multi-screen setup (0 = default). -# output: What video system to use for output (openglnb = OpenGL nearest; openglpp = OpenGL perfect; ttf = TrueType font output). -# Possible values: default, surface, overlay, ttf, opengl, openglnb, openglhq, openglpp, ddraw, direct3d. +# output: What video system to use for output (surface = software (SDL_Surface); openglnb = OpenGL nearest; openglpp = OpenGL perfect; ttf = TrueType font output). +# Possible values: default, surface, overlay, ttf, opengl, openglnb, openglhq, openglpp, ddraw. # videodriver: Forces a video driver (e.g. windib/windows, directx, x11, fbcon, dummy, etc) for the SDL library to use. # transparency: Set the transparency of the DOSBox-X screen (both windowed and full-screen modes, on SDL2 and Windows SDL1 builds). # The valid value is from 0 (no transparency, the default setting) to 90 (high transparency). @@ -192,6 +192,7 @@ debuggerrun = debugger [dosbox] # language: Select a language file for DOSBox-X to use. Encoded with either UTF-8 or a DOS code page. # You can set code page either in the language file or with "country" setting in [config] section. +# beep duration: If nonzero, set the duration of a beep when DOS or INT 10h is given a BEL character # title: Additional text to place in the title bar of the window. # logo text: Text to place at the bottom of the screen during the startup logo. Text will line wrap automatically. # To explicitly break to the next line, put \n in the string. @@ -250,7 +251,7 @@ debuggerrun = debugger # weitek: If set, emulate the Weitek coprocessor. This option only has effect if cputype=386 or cputype=486. # bochs debug port e9: If set, emulate Bochs debug port E9h. ASCII text written to this I/O port is assumed to be debug output, and logged. # machine: The type of machine DOSBox-X tries to emulate. -# Possible values: mda, cga, cga_mono, cga_rgb, cga_composite, cga_composite2, hercules, hercules_plus, hercules_incolor, hercules_color, tandy, pcjr, pcjr_composite, pcjr_composite2, amstrad, ega, ega200, jega, mcga, vgaonly, svga_s3, svga_s386c928, svga_s3vision864, svga_s3vision868, svga_s3vision964, svga_s3vision968, svga_s3trio32, svga_s3trio64, svga_s3trio64v+, svga_s3virge, svga_s3virgevx, svga_et3000, svga_et4000, svga_paradise, vesa_nolfb, vesa_oldvbe, vesa_oldvbe10, pc98, pc9801, pc9821, svga_ati_egavgawonder, svga_ati_vgawonder, svga_ati_vgawonderplus, svga_ati_vgawonderxl, svga_ati_vgawonderxl24, svga_ati_mach8, svga_ati_mach32, svga_ati_mach64, fm_towns. +# Possible values: mda, cga, cga_mono, cga_rgb, cga_composite, cga_composite2, hercules, hercules_plus, hercules_incolor, hercules_color, tandy, pcjr, pcjr_composite, pcjr_composite2, amstrad, ega, ega200, jega, mcga, vgaonly, svga_s3, svga_s386c928, svga_s3vision864, svga_s3vision868, svga_s3vision964, svga_s3vision968, svga_s3trio32, svga_s3trio64, svga_s3trio64v+, svga_s3virge, svga_s3virgevx, svga_et3000, svga_et4000, svga_paradise, vesa_nolfb, vesa_oldvbe, vesa_oldvbe10, vesa_vbe3, pc98, pc9801, pc9821, svga_ati_egavgawonder, svga_ati_vgawonder, svga_ati_vgawonderplus, svga_ati_vgawonderxl, svga_ati_vgawonderxl24, svga_ati_mach8, svga_ati_mach32, svga_ati_mach64, svga_dosbox, svga_dosbox_vbe2, fm_towns. # captures: Directory where things like wave, midi, screenshot get captured. # autosave: Enable the auto-save state feature. Specify a time interval in seconds, and optionally a save slot or start and end save slots. # For example, "autosave=10 11-20" will set a 10-second time interval for auto-saving, and the save slots used will be between 11 and 20. @@ -279,6 +280,7 @@ debuggerrun = debugger # shell environment size: Size of the initial DOSBox-X shell environment block, in bytes. Setting to 0 implies a default size of 720 bytes as in DOSBox. # You can increase this size to store more environment variables in DOS, although this does not affect the environment block # of sub-processes spawned from the DOS shell. This option has no effect unless the dynamic kernel allocation is enabled. +# shell permanent: If enabled, initial DOSBox-X shell will stay permanent (equivalent to /P switch). # private area size: Set DOSBox-X private memory area size. This area contains private memory structures used by the DOS kernel. # It is discarded when you boot into another OS. Mainline DOSBox uses 32KB. Testing shows that it is possible # to run DOSBox with as little as 4KB. If DOSBox-X aborts with error "not enough memory for internal tables" @@ -407,7 +409,7 @@ debuggerrun = debugger # starting with cputype=8086 will use a memalias of 20 even if you later change cputype to 386. # 24: 16MB aliasing. Common on 386SX systems (CPU had 24 external address bits) # or 386DX and 486 systems where the CPU communicated directly with the ISA bus (A24-A31 tied off) -# 26: 64MB aliasing. Some 486s had only 26 external address bits, some motherboards tied off A26-A31 +# 26: 64MB aliasing. Some 486 clones (and 386EX/CX) had only 26 external address bits, some motherboards tied off A26-A31 # 32: 4GB aliasing. This is normal for most 486/Pentium and later systems and is the default for most values of cputype. # 36: 64GB aliasing. Recommended if you are emulating more than 3.5GB of RAM and Pentium Pro/II Page Size Extensions. # 40: 1TB aliasing. Recommended if you are emulating more than 63GB of RAM and Pentium Pro/II Page Size Extensions. @@ -455,6 +457,7 @@ debuggerrun = debugger # For machine=tandy, this enables up to 768KB of memory which is then provided as 640KB to DOS to emulate the Tandy 768KB configuration with no overlap between DOS and video memory # enable pci bus: Enable PCI bus emulation language = +beep duration = 0 title = logo text = logo = @@ -491,6 +494,7 @@ skip encoding unchanged frames = false capture chroma format = auto capture format = default shell environment size = 0 +shell permanent = false private area size = 32768 a20 = mask turn off a20 gate on boot = true @@ -588,6 +592,7 @@ enable pci bus = true # Setting this option may prevent some scalers to work as expected. # Try turning this option off in such case. # For pixel-perfect scaling (output=openglpp), it is recommended to turn this option off. +# modeswitch: Let DOSBox-X determine the resolution of the monitor. This feature is only available when DOSBox-X is compiled with SDL2 support. # scaler: Scaler used to enlarge/enhance low resolution modes. Add keyword 'forced', after the name of the scaler to always use the scaler even if the result might not be desired.(e.g. 'normal2x forced') # Appending 'prompt' will cause a confirmation message for forcing the scaler. # To fit a scaler in the resolution used at full screen may require a border or side bars. @@ -613,6 +618,7 @@ aspect_ratio = 0:0 char9 = true euro = -1 doublescan = true +modeswitch = false scaler = normal2x glshader = none pixelshader = none @@ -696,6 +702,11 @@ monochrome_pal = green # pc-98 show graphics layer on initialize: If PC-98 mode and INT 33h emulation is enabled, the graphics layer will be automatically enabled # at driver startup AND when INT 33h AX=0 is called. This is NEC MOUSE.COM behavior and default # enabled. To emulate other drivers like QMOUSE that do not follow this behavior, set to false. +# pc-98 chargen vsync-limited access: If set, reading pixels from the character generator while in Code Access mode (or always, for ANK +# characters) will be invalid. Some models (i.e. PC-9821As3) dont seem to have this limitation, but +# many others do. +# This option is set to false by default, set this option to true if you suffer text glitches. +# It is reported that setting this option to true will result in glitches in some titles;therefore revert this option to false in such cases. pc-98 BIOS copyright string = false pc-98 int 1b fdc timer wait = false pc-98 pic init to read isr = true @@ -728,6 +739,7 @@ pc-98 fontx sbcs = pc-98 fontx dbcs = pc-98 fontx internal symbol = false pc-98 show graphics layer on initialize = true +pc-98 chargen vsync-limited access = false [dosv] # dosv: Enable DOS/V emulation and specify which version to emulate. This option is intended for use with games or software @@ -820,6 +832,11 @@ j3100textcolor = # # This option may be useful if you would like to prevent your DOS gaming from appearing in the Windows 11 Recall feature # Possible values: , none, blank, invisible. +# vbememsize: Amount of video memory in kilobytes to report through the VESA BIOS extensions. +# Set this value to an amount lower than vmemsize to handle DOS programs that cannot handle +# more than the small amount of video memory they were designed for. This option also affects +# what video modes are reported through the VBE. +# vbememsizekb: Amount of video memory to report in kilobytes, in addition to vbememsize. # vmemsize: Amount of video memory in megabytes. # The maximum resolution and color depth the svga_s3 will be able to display # is determined by this value. @@ -829,12 +846,14 @@ j3100textcolor = # 2: 1600x1200 at 256 colors or 1024x768 at 64k colors or 640x480 at 16M colors # 4: 1600x1200 at 64k colors or 1024x768 at 16M colors # 8: up to 1600x1200 at 16M colors +# Larger values are available depending on machine type. # For build engine games, use more memory than in the list above so it can # use triple buffering and thus won't flicker. # # vmemsizekb: Amount of video memory in kilobytes, in addition to vmemsize. # vbe window granularity: Controls VESA BIOS non-linear framebuffer window granularity in KB. This affects ONLY the VESA BIOS extensions. Set 0 to functional normally. # vbe window size: Controls VESA BIOS non-linear framebuffer window size in KB. This affects ONLY the VESA BIOS extensions. Set 0 to functional normally. +# vbe protected mode interface: If set, enable the VBE protected mode interface # enable 8-bit dac: If set, allow VESA BIOS calls in IBM PC mode to set DAC width. Has no effect in PC-98 mode. # high intensity blinking: Set to false if you want to see high-intensity background colors instead of blinking foreground text. # This option has no effect in PC-98 and some other video modes. @@ -1011,18 +1030,27 @@ j3100textcolor = # This should not be set except for DOS games with bugs in their display handling code. # memory io optimization 1: Enable one class of EGA/VGA memory I/O optimizations. Default ON (true). # If graphical artifacts or errors occur, try turning this off first. May provide a performance benefit. +# skip render if nothing changed: If set, DOSBox-X will skip rendering entirely unless any change is made to the guest display. +# This may provide a performance benefit, especially in SVGA modes. This option has no effect unless render on demand is true or auto. +# Normally in DOSBox and DOSBox-X, video is rendered constantly, whether or not anything changed, +# and then compared with the previous frame to determine where to update the host display. +# In addition to the render on demand option, this option may further break timing dependent effects and/or cause problems with some games. +# Possible values: true, false, 1, 0, auto. # scanline render on demand: Render video output at vsync or when something is changed mid frame, instead of stopping to render every scanline. -# May provide a performance benefit to most DOS games. However this may also break timing-dependent game or Demoscene effects. -# Default auto, which will turn if off for VGA modes and turn it on for SVGA modes. +# This may provide a performance benefit to most DOS games. However this may also break timing-dependent game or Demoscene effects. +# Default is auto, which will turn it off for VGA modes and turn it on for SVGA modes. # Possible values: true, false, 1, 0, auto. int 10h use video parameter table = auto vmemdelay = 0 lfb vmemdelay = false prevent capture = +vbememsize = 0 +vbememsizekb = 0 vmemsize = -1 vmemsizekb = 0 vbe window granularity = 0 vbe window size = 0 +vbe protected mode interface = true enable 8-bit dac = true high intensity blinking = true svga lfb base = 0 @@ -1085,8 +1113,13 @@ vga palette update on full load = true ignore odd-even mode in non-cga modes = false ignore sequencer blanking = false memory io optimization 1 = true +skip render if nothing changed = auto scanline render on demand = auto +[script] +# startup.js: script to run at startup +startup.js = + [vsync] # vsyncmode: Synchronize vsync timing to the host display. Requires calibration within DOSBox-X. # Possible values: off, on, force, host. @@ -1099,7 +1132,7 @@ vsyncrate = 75 # core: CPU Core used in emulation. auto will switch to dynamic if available and appropriate. # For the dynamic core, both dynamic_x86 and dynamic_rec are supported (dynamic_x86 is preferred). # Windows 95 or other preemptive multitasking OSes will not work with the dynamic_rec core. -# Possible values: auto, dynamic, dynamic_x86, dynamic_nodhfpu, dynamic, dynamic_rec, normal, full, simple. +# Possible values: auto, dynamic, dynamic_x86, dynamic_nodhfpu, dynamic_rec, normal, full, simple. # fpu: Enable FPU emulation # Possible values: true, false, 1, 0, auto, 8087, 287, 387. # cpuid string: If set, changes the string returned by the CPUID instruction. Normally by default the string is 'GenuineIntel'. @@ -1110,6 +1143,7 @@ vsyncrate = 75 # Note that the processor info and feature bits form the topmost 32 bits of the PSN and cannot be changed. # rdtsc rate: If nonzero, the Pentium RDTSC counter will tick at this rate per millisecond instead of by the cycle count # segment limits: Enforce checks for segment limits on 80286 and higher CPU types. +# lds wraparound: For LDS/LES instructions, in 16-bit code, check for 64KB wraparound case. # double fault: Emulate double fault exception # clear trap flag on unhandled int 1: If set, the DOS kernel INT 01h handler will clear the trap flag when called. # Normally a DOS program using INT 01h and the trap flag (usually for debugging) @@ -1212,6 +1246,7 @@ cpuid string = processor serial number = rdtsc rate = 0 segment limits = true +lds wraparound = true double fault = true clear trap flag on unhandled int 1 = false reset on triple fault = true @@ -1291,7 +1326,7 @@ auxdevice = intellimouse # gray scaled color scheme: (0,0,0) #0e0e0e (75,75,75) (89,89,89) (38,38,38) (52,52,52) #717171 #c0c0c0 #808080 (28,28,28) (150,150,150) (178,178,178) (76,76,76) (104,104,104) (226,226,226) (255,255,255) # An optional leading "+" sign allows the preset color scheme to be used when switching from another output. # outputswitch: Specifies the output that DOSBox-X should switch to from the TTF output when a graphical mode is requested, or auto for automatic selection. -# Possible values: auto, surface, opengl, openglnb, openglhq, openglpp, direct3d. +# Possible values: auto, surface, opengl, openglnb, openglhq, openglpp. # winperc: Specifies the window percentage for the TTF output (100 = full screen). Ignored if the ptsize setting is specified. # ptsize: Specifies the font point size for the TTF output. If specified (minimum: 9), it will override the winperc setting. # lins: Specifies the number of rows on the screen for the TTF output (0 = default). @@ -1570,7 +1605,7 @@ fluid.chorus.type = 0 [sblaster] # sbtype: Type of Sound Blaster to emulate. 'gb' is Game Blaster. -# Possible values: sb1, sb2, sbpro1, sbpro2, sb16, sb16vibra, gb, ess688, ess1688, reveal_sc400, none. +# Possible values: sb1, sb1.0, sb1.5, sb2, sb2.0, sb2.01, sbpro1, sbpro2, sb16, sb16vibra, gb, ess688, ess1688, reveal_sc400, none. # sbbase: The IO address of the Sound Blaster. # 220h to 2E0h are for use with IBM PC Sound Blaster emulation. # D2h to DEh are for use with NEC PC-98 Sound Blaster 16 emulation. @@ -1583,8 +1618,12 @@ fluid.chorus.type = 0 # the DMA transfer per block poorly in a way that causes popping and artifacts. Setting this option to 0 for # such DOS applications may reduce audible popping and artifacts. # listen to recording source: When the guest records audio from the Sound Blaster card, send the input source to the speakers as well so it can be heard. -# recording source: Audio source to use when guest is recording audio. At this time only generated audio sources are available. -# Possible values: silence, hiss, 1khz tone. +# recording source: Audio source to use when guest is recording audio. Options: silence, hiss, 1khz tone, or microphone (Windows WASAPI input). +# Possible values: silence, hiss, 1khz tone, microphone. +# prefer hfp: Prefer Bluetooth HFP (Hands-Free Profile) microphone mode. +# This allows using the microphone of a BT headset but reduces +# audio quality (typically 8kHz–16kHz telephone quality). +# When disabled, higher-quality microphones are preferred. # irq hack: Specify a hack related to the Sound Blaster IRQ to avoid crashes in a handful of games and demos. # none Emulate IRQs normally # cs_equ_ds Do not fire IRQ unless two CPU segment registers match: CS == DS. Read DOSBox-X Wiki or source code for details. @@ -1629,6 +1668,9 @@ fluid.chorus.type = 0 # oplmode: Type of OPL emulation. On 'auto' the mode is determined by the 'sbtype' setting. # All OPL modes are AdLib-compatible. # Possible values: auto, opl2, dualopl2, opl3, opl3gold, none, hardware, hardwaregb, esfm. +# adlib pcm boost: If set, and Adlib emulation detects that the guest application is playing digitized speech +# or music through the FM chip, the FM audio will be amplified to make the audio more audible. +# Audio levels will be reset for any other use including FM music synthesis. # adlib force timer overflow on detect: If set, Adlib/OPL emulation will signal 'overflow' on timers after 50 I/O reads. # This is a temporary hack to work around timing bugs noted in DOSBox-X. Certain # games (Wolfenstein 3D) poll the Adlib status port a fixed number of times assuming @@ -1695,6 +1737,7 @@ irq = 7 mindma = -1 listen to recording source = false recording source = silence +prefer hfp = false irq hack = none dma = 1 hdma = 5 @@ -1708,9 +1751,10 @@ pre-set sbpro stereo = false sbmixer = true cms = auto oplmode = auto +adlib pcm boost = false adlib force timer overflow on detect = false oplemu = default -oplrate = 48000 +oplrate = 49716 oplport = retrowave_bus = serial retrowave_spi_cs = 0,6 @@ -1731,6 +1775,178 @@ dsp busy cycle always = -1 dsp busy cycle duty = -1 io port aliasing = true +[sblaster2] +# sbtype: Type of Sound Blaster to emulate. 'gb' is Game Blaster. +# Possible values: sb1, sb1.0, sb1.5, sb2, sb2.0, sb2.01, sbpro1, sbpro2, sb16, sb16vibra, gb, ess688, ess1688, reveal_sc400, none. +# sbbase: The IO address of the Sound Blaster. +# 220h to 2E0h are for use with IBM PC Sound Blaster emulation. +# D2h to DEh are for use with NEC PC-98 Sound Blaster 16 emulation. +# Possible values: 220, 240, 260, 280, 2a0, 2c0, 2e0, d2, d4, d6, d8, da, dc, de. +# irq: The IRQ number of the Sound Blaster (usually 5 or 7, depending on the sound card type and the game). +# Set to 0 for the default setting of the sound card, or set to -1 to start DOSBox-X with the IRQ unassigned. +# Possible values: 7, 5, 3, 9, 10, 11, 12, 0, -1. +# mindma: Minimum DMA transfer left to increase attention across DSP blocks, in milliseconds. Set to -1 for default. +# There are some DOS games/demos that use single-cycle DSP playback in their music tracker and they micromanage +# the DMA transfer per block poorly in a way that causes popping and artifacts. Setting this option to 0 for +# such DOS applications may reduce audible popping and artifacts. +# listen to recording source: When the guest records audio from the Sound Blaster card, send the input source to the speakers as well so it can be heard. +# recording source: Audio source to use when guest is recording audio. Options: silence, hiss, 1khz tone, or microphone (Windows WASAPI input). +# Possible values: silence, hiss, 1khz tone, microphone. +# prefer hfp: Prefer Bluetooth HFP (Hands-Free Profile) microphone mode. +# This allows using the microphone of a BT headset but reduces +# audio quality (typically 8kHz–16kHz telephone quality). +# When disabled, higher-quality microphones are preferred. +# irq hack: Specify a hack related to the Sound Blaster IRQ to avoid crashes in a handful of games and demos. +# none Emulate IRQs normally +# cs_equ_ds Do not fire IRQ unless two CPU segment registers match: CS == DS. Read DOSBox-X Wiki or source code for details. +# dma: The DMA number of the Sound Blaster. Set to -1 to start DOSBox-X with the DMA unassigned. +# Possible values: 1, 5, 0, 3, 6, 7, -1. +# hdma: The High DMA number of the Sound Blaster. Set to -1 to start DOSBox-X with the High DMA unassigned. +# Possible values: 1, 5, 0, 3, 6, 7, -1. +# dsp command aliases: If set (on by default), emulation will support known undocumented aliases +# of common Sound Blaster DSP commands. Some broken DOS games and demos rely on these aliases. +# For more information: https://www.vogons.org/viewtopic.php?f=62&t=61098&start=280 +# pic unmask irq: Start the DOS virtual machine with the Sound Blaster IRQ already unmasked at the PIC. +# Some early DOS games/demos that support Sound Blaster expect the IRQ to fire but make +# no attempt to unmask the IRQ. If audio cuts out no matter what IRQ you try, then try +# setting this option. +# Option is needed for: +# Public NMI "jump" demo (1992) +# enable speaker: Start the DOS virtual machine with the Sound Blaster speaker enabled. +# Sound Blaster Pro and older cards have a speaker disable/enable command. +# Normally the card boots up with the speaker disabled. If a DOS game or demo +# attempts to play without enabling the speaker, set this option to true to +# compensate. This setting has no meaning if emulating a Sound Blaster 16 card. +# enable asp: If set, emulate the presence of the Sound Blaster 16 Advanced Sound Processor/Creative Sound Processor chip. +# NOTE: This only emulates its presence and the basic DSP commands to communicate with it. Actual ASP/CSP functions are not yet implemented. +# disable filtering: By default DOSBox-X filters Sound Blaster output to emulate lowpass filters and analog output limitations. +# Set this option to true to disable filtering. Note that doing so disables emulation of the Sound Blaster Pro +# output filter and ESS AudioDrive lowpass filter. +# dsp write buffer status must return 0x7f or 0xff: If set, force port 22Ch (DSP write buffer status) to return 0x7F or 0xFF. If not set, the port +# may return 0x7F or 0xFF depending on what type of Sound Blaster is being emulated. +# Set this option for some early DOS demos that make that assumption about port 22Ch. +# Option is needed for: +# Overload by Hysteria (1992) - Audio will crackle/saturate (8-bit overflow) except when sbtype=sb16 +# pre-set sbpro stereo: Start the DOS virtual machine with the Sound Blaster Pro stereo bit set (in the mixer). +# A few demos support Sound Blaster Pro but forget to set this bit. +# Option is needed for: +# Inconexia by Iguana (1993) +# sbmixer: Allow the Sound Blaster mixer to modify the DOSBox-X mixer. +# cms: Enable CMS emulation ('auto' by default). +# off: Disable CMS emulation (except when the Game Blaster is selected). +# on: Enable CMS emulation on Sound Blaster 1 and 2. +# auto: Auto-enable CMS emulation for Sound Blaster 1 and Game Blaster. +# Possible values: on, off, auto. +# oplmode: Type of OPL emulation. On 'auto' the mode is determined by the 'sbtype' setting. +# All OPL modes are AdLib-compatible. +# Possible values: auto, opl2, dualopl2, opl3, opl3gold, none, hardware, hardwaregb, esfm. +# adlib pcm boost: If set, and Adlib emulation detects that the guest application is playing digitized speech +# or music through the FM chip, the FM audio will be amplified to make the audio more audible. +# Audio levels will be reset for any other use including FM music synthesis. +# adlib force timer overflow on detect: If set, Adlib/OPL emulation will signal 'overflow' on timers after 50 I/O reads. +# This is a temporary hack to work around timing bugs noted in DOSBox-X. Certain +# games (Wolfenstein 3D) poll the Adlib status port a fixed number of times assuming +# that the poll loop takes long enough for the Adlib timer to run out. If the game +# cannot reliably detect Adlib at higher cycles counts, but can reliably detect at +# lower cycles counts, set this option. +# oplemu: Provider for the OPL emulation. 'compat' might provide better quality. +# 'nuked' is the most accurate (but the most CPU-intensive). See oplrate as well. +# Possible values: default, compat, fast, nuked, mame, opl2board, opl3duoboard, retrowave_opl3, esfmu. +# oplrate: Sample rate of OPL music emulation. Use 49716 for highest quality (set the mixer rate accordingly). +# Possible values: 49716, 48000, 44100, 32000, 22050, 16000, 11025, 8000. +# oplport: Serial port of the OPL2 Audio Board when oplemu=opl2board, opl2mode will become 'opl2' automatically. +# retrowave_bus: Bus of the Retrowave series board (serial/spi). SPI is only supported on Linux. +# retrowave_spi_cs: SPI chip select pin of the Retrowave series board. Only supported on Linux. +# retrowave_port: Serial port of the Retrowave series board. +# hardwarebase: base address of the real hardware Sound Blaster: +# 210,220,230,240,250,260,280 +# force dsp auto-init: Treat all single-cycle DSP commands as auto-init to keep playback going. +# This option is a workaround for DOS games or demos that use single-cycle DSP playback commands and +# have problems with missing the Sound Blaster IRQ under load. Do not enable unless you need this workaround. +# Needed for: +# - Extreme "lunatic" demo (1993) +# force goldplay: Always render Sound Blaster output sample-at-a-time. Testing option. You probably don't want to enable this. +# goldplay: Enable goldplay emulation. +# goldplay stereo: Enable workaround for goldplay stereo playback. Many DOS demos using this technique +# don't seem to know they need to double the frequency when programming the DSP time constant for Pro stereo output. +# If stereo playback seems to have artifacts consider enabling this option. For accurate emulation of Sound Blaster +# hardware, disable this option. +# dsp require interrupt acknowledge: If set, the DSP will halt DMA playback until IRQ acknowledgement occurs even in auto-init mode (SB16 behavior). +# If clear, IRQ acknowledgement will have no effect on auto-init playback (SB Pro and earlier & clone behavior) +# If set to 'auto' then behavior is determined by sbtype= setting. +# This is a setting for hardware accuracy in emulation. If audio briefly plays then stops then your DOS game +# and it's not using IRQ (but using DMA), try setting this option to 'false' +# dsp write busy delay: Amount of time in nanoseconds the DSP chip signals 'busy' after writing to the DSP (port 2xCh). Set to -1 to use card-specific defaults. +# WARNING: Setting the value too high (above 20000ns) may have detrimental effects to DOS games that use IRQ 0 and DSP command 0x10 to play audio. +# Setting the value way too high (above 1000000ns) can cause significant lag in DOS games. +# blaster environment variable: Whether or not to set the BLASTER environment variable automatically at startup +# sample rate limits: If set (default), limit DSP sample rate to what real hardware is limited to +# instant direct dac: If set, direct DAC output commands are instantaneous. This option is intended as a quick fix for +# games or demos that play direct DAC music/sound from the IRQ 0 timer who a) write the DSP command +# and data without polling the DSP to ensure it's ready or b) can get locked into the IRQ 0 handler +# waiting for DSP status when instructed to play at or beyond the DSP's maximum direct DAC sample rate. +# This fix allows broken Sound Blaster code to work and should not be enabled unless necessary. +# stereo control with sbpro only: Default on. If set, Sound Blaster Pro stereo is not available when emulating sb16 or sb16vibra. +# If clear, sb16 emulation will honor the sbpro stereo bit. Note that Creative SB16 cards do not +# honor the stereo bit, and this option allows DOSBox-X emulate that fact. Accuracy setting. +# dsp busy cycle rate: Sound Blaster 16 DSP chips appear to go busy periodically at some high clock rate +# whether the DSP is actually doing anything for the system or not. This is an accuracy +# option for Sound Blaster emulation. If this option is nonzero, it will be interpreted +# as the busy cycle rate in Hz. If zero, busy cycle will not be emulated. If -1, sound +# blaster emulation will automatically choose a setting based on the sbtype= setting +# dsp busy cycle always: If set, the DSP busy cycle always happens. If clear, DSP busy cycle only happens when +# audio playback is running. Default setting is to pick according to the sound card. +# dsp busy cycle duty: If emulating SB16 busy cycle, this value (0 to 100) controls the duty cycle of the busy cycle. +# If this option is set to -1, Sound Blaster emulation will choose a value automatically according +# to sbtype=. If 0, busy cycle emulation is disabled. +# io port aliasing: If set, Sound Blaster ports alias by not decoding the LSB of the I/O port. +# This option only applies when sbtype is set to sb1 or sb2 (not SBPro or SB16). +# This is a hack for the Electromotive Force 'Internal Damage' demo which apparently +# relies on this behavior for Sound Blaster output and should be enabled for accuracy in emulation. +sbtype = none +sbbase = 260 +irq = 3 +mindma = -1 +listen to recording source = false +recording source = silence +prefer hfp = false +irq hack = none +dma = 0 +hdma = 7 +dsp command aliases = true +pic unmask irq = false +enable speaker = false +enable asp = false +disable filtering = false +dsp write buffer status must return 0x7f or 0xff = false +pre-set sbpro stereo = false +sbmixer = true +cms = off +oplmode = none +adlib pcm boost = false +adlib force timer overflow on detect = false +oplemu = default +oplrate = 49716 +oplport = +retrowave_bus = serial +retrowave_spi_cs = 0,6 +retrowave_port = +hardwarebase = 220 +force dsp auto-init = false +force goldplay = false +goldplay = true +goldplay stereo = true +dsp require interrupt acknowledge = auto +dsp write busy delay = -1 +blaster environment variable = false +sample rate limits = true +instant direct dac = false +stereo control with sbpro only = true +dsp busy cycle rate = -1 +dsp busy cycle always = -1 +dsp busy cycle duty = -1 +io port aliasing = true + [gus] # gus: Enable the Gravis Ultrasound emulation. # global register read alias: If true, all GUS global registers have a read alias at N and N+0x80. @@ -2158,6 +2374,8 @@ timeout = 0 # turn off a20 gate on load if loadfix needed: If enabled, and loading a program below the 64kb boundary, turn off the A20 gate. # This can help with any program with startup code that assumes the segment wraparound of the 8086. # Depending on DOS configuration the A20 gate may be re-enabled later such as calling INT 21h. +# break on int3: If set, a breakpoint on INT 3 is automatically set up at startup +# xms log memmove: If set, XMS move/copy operations are logged for debugging purposes. # xms memmove causes flat real mode: If set, any call to XMS to move/copy memory sets up flat real mode for segment registers DS and ES. # xms init causes flat real mode: If set, when the DOS kernel initializes XMS it will switch on flat real mode for segment registers DS and ES if appropriate. # resized free memory block becomes allocated: If set, and the DOS application resizes a freed memory block, that block will be marked as allocated to that program. @@ -2167,6 +2385,12 @@ timeout = 0 # This is disabled by default to avoid conflicts between commands and executables. # It is recommended to get and set dosbox-x.conf settings using the CONFIG command instead. # Compatibility with DOSBox SVN can be improved by enabling this option. +# exepack: If loading an EXE file compressed using ExEPACK, what to do. +# This setting can help avoid Packed File is Corrupt errors when running such executables. +# none = don't do anything +# a20off = switch off the A20 gate before running the executable +# unpack = decompress the EXE and then run it, rather than run the EXEPACK code (default). +# Possible values: none, a20off, unpack. # badcommandhandler: Allow to specify a custom error handler command for the internal DOS shell before the "Bad command or file name" message shows up. # mscdex device name: If set, use this name as the MSCDEX device name instead of MSCD001 # hma: Report through XMS that HMA exists (not necessarily available) @@ -2219,6 +2443,7 @@ timeout = 0 # network redirector: Report DOS network redirector as resident. This will allow the host name to be returned unless the secure mode is enabled. # You can also directly access UNC network paths in the form \\MACHINE\SHARE even if they are not mounted as drives on Windows systems. # Set either "ipx=true" in [ipx] section or "ne2000=true" in [ne2000] section for a full network redirector environment. +# mcb corruption becomes application free memory: If MCB chain corruption occurs following the DOS program PSP segment and the DOS program does anything to cause memory allocation,make a new free memory block in it's place instead of halting emulation with an MCB chain error. Some DOS programs are sloppywith memory to corrupt the MCB chain after itself in memory. This is apparently real MS-DOS behavior, set to true to enable.If set to false, all MCB chain corruption will halt emulation as DOSBox forks typically do already. # minimum dos initial private segment: In non-mainline mapping mode, where DOS structures are allocated from base memory, this sets the # minimum segment value. Recommended value is 0x70. You may reduce the value down to 0x50 if freeing # up more memory is important. Set to 0 for default. @@ -2359,6 +2584,7 @@ timeout = 0 # This option is OFF by default. # int 13 disk change detect: Enable INT 13h disk change detect function (AH=16h) # int 13 extensions: Enable INT 13h extensions (functions 0x40-0x48). You will need this enabled if the virtual hard drive image is 8.4GB or larger. +# int 13 enable 48-bit LBA: Enable 48-bit LBA support for INT 13h extensions. Needed for drives larger than 28-bit LBA limit (128GiB). # biosps2: Emulate BIOS INT 15h PS/2 mouse services # Note that some OS's like Microsoft Windows neither use INT 33h nor # probe the AUX port directly and depend on this BIOS interface exclusively @@ -2396,11 +2622,14 @@ timeout = 0 # dos idle api: If set, DOSBox-X can lower the host system's CPU load when a supported guest program is idle. xms = true turn off a20 gate on load if loadfix needed = false +break on int3 = false +xms log memmove = false xms memmove causes flat real mode = true xms init causes flat real mode = false resized free memory block becomes allocated = true xms handles = 0 shell configuration as commands = false +exepack = unpack badcommandhandler = mscdex device name = hma = true @@ -2424,6 +2653,7 @@ cpm compatibility mode = auto share = true file access tries = 0 network redirector = true +mcb corruption becomes application free memory = false minimum dos initial private segment = 0 minimum mcb segment = 0 minimum mcb free = 0 @@ -2479,6 +2709,7 @@ int33 hide host cursor when polling = false int33 disable cell granularity = false int 13 disk change detect = true int 13 extensions = true +int 13 enable 48-bit LBA = true biosps2 = true int15 wait force unmask irq = true int15 mouse callback does not preserve registers = false @@ -2773,27 +3004,29 @@ chip = 82077aa rem = This section is the 4DOS.INI file, if you use 4DOS as the command shell [config] -# rem: Records comments (remarks). -# break: Sets or clears extended CTRL+C checking. -# Possible values: on, off. -# numlock: Sets the initial state of the NumLock key. -# Possible values: on, off. -# shell: Specifies the command shell (COMMAND.COM or 4DOS.COM). -# dos: Reports whether DOS occupies HMA and allocates UMB memory (if available). -# fcbs: Number of FCB handles available to DOS programs (1-255). Set to 0 to automatically use a reasonable default. -# files: Number of file handles available to DOS programs (8-255). Set to 0 to automatically use a reasonable default. -# country: Country code for date/time/decimal formats and optionally code page for TTF output and language files. -# lastdrive: The maximum drive letter (A-Z) that can be accessed by programs. -# Possible values: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z. -rem = This section is DOS's CONFIG.SYS file, not all CONFIG.SYS options supported -break = off -numlock = -shell = -dos = high, umb -fcbs = 0 -files = 0 -country = -lastdrive = a +# rem: Records comments (remarks). +# break: Sets or clears extended CTRL+C checking. +# Possible values: on, off. +# numlock: Sets the initial state of the NumLock key. +# Possible values: on, off. +# shell: Specifies the command shell (COMMAND.COM or 4DOS.COM). +# dos: Reports whether DOS occupies HMA and allocates UMB memory (if available). +# fcbs: Number of FCB handles available to DOS programs (1-255). Set to 0 to automatically use a reasonable default. +# files: Number of file handles available to DOS programs (8-255). Set to 0 to automatically use a reasonable default. +# country: Country code for date/time/decimal formats and optionally code page for TTF output and language files. +# lastdrive: The maximum drive letter (A-Z) that can be accessed by programs. +# Possible values: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z. +# device driver mcb: If set, allocate a memory block per device driver. If not set, then where possible, the device driver chain is packed together within the DOS kernel without any MCB blocks to cover them, which is normal MS-DOS behavior +rem = This section is DOS's CONFIG.SYS file, not all CONFIG.SYS options supported +break = off +numlock = +shell = +dos = high, umb +fcbs = 0 +files = 0 +country = +lastdrive = a +device driver mcb = false set path = Z:\;Z:\SYSTEM;Z:\BIN;Z:\DOS;Z:\4DOS;Z:\DEBUG;Z:\TEXTUTIL set prompt = $P$G set temp = @@ -2806,3 +3039,5 @@ devicehigh = # Lines in this section will be run at startup. # You can put your MOUNT lines here. +[devices] + diff --git a/dosboxpng-to-h.sh b/dosboxpng-to-h.sh index 3239104351d..bb1ca08a183 100755 --- a/dosboxpng-to-h.sh +++ b/dosboxpng-to-h.sh @@ -1,2 +1,2 @@ -#!/bin/bash +#!/bin/sh for h in 93 163 186 224; do xxd -i dosbox224x$h.png >include/dosbox224x$h.h || break; done diff --git a/env-gcc-4.8-rpi.sh b/env-gcc-4.8-rpi.sh index d6b69e71ca0..1a5ad1150fe 100755 --- a/env-gcc-4.8-rpi.sh +++ b/env-gcc-4.8-rpi.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # # Look for GCC-4.8 x=$(which gcc-4.8) diff --git a/env-gcc-4.8.sh b/env-gcc-4.8.sh index 1dc155e9455..ad9dcca48f3 100755 --- a/env-gcc-4.8.sh +++ b/env-gcc-4.8.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # # Look for GCC-4.8 x=$(which gcc-4.8 2>/dev/null) diff --git a/env-gcc-8.3.sh b/env-gcc-8.3.sh index 9ad5c48df54..73659e10a5d 100755 --- a/env-gcc-8.3.sh +++ b/env-gcc-8.3.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # # Look for GCC-8.3 x=$(which gcc-8.3 2>/dev/null) diff --git a/env-gcc-8.4.sh b/env-gcc-8.4.sh index d92b57fc70a..3b00c404d25 100755 --- a/env-gcc-8.4.sh +++ b/env-gcc-8.4.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # # Look for GCC-8.4 x=$(which gcc-8.4 2>/dev/null) diff --git a/env-gcc-9.2.sh b/env-gcc-9.2.sh index fa2a81e02a5..6e454d5f373 100755 --- a/env-gcc-9.2.sh +++ b/env-gcc-9.2.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # # Look for GCC-9.2 x=$(which gcc-9.2 2>/dev/null) diff --git a/env-gcc-9.3.sh b/env-gcc-9.3.sh index 60957df069a..cf34897682c 100755 --- a/env-gcc-9.3.sh +++ b/env-gcc-9.3.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # # Look for GCC-9.3 x=$(which gcc-9.3 2>/dev/null) diff --git a/experiments/opcodes/Makefile b/experiments/opcodes/Makefile new file mode 100644 index 00000000000..d397bbeff19 --- /dev/null +++ b/experiments/opcodes/Makefile @@ -0,0 +1,14 @@ +all: opgen + +opgt.o: opgt.c + gcc -Wall -Wextra -pedantic -std=c11 -c -o $@ $< + +opgen.o: opgen.cpp + g++ -Wall -Wextra -pedantic -std=c++11 -c -o $@ $< + +opgen: opgen.o opgt.o + g++ -o $@ opgen.o opgt.o + +clean: + rm -f opgen *.o + diff --git a/experiments/opcodes/opgen.cpp b/experiments/opcodes/opgen.cpp new file mode 100644 index 00000000000..43b57041b6d --- /dev/null +++ b/experiments/opcodes/opgen.cpp @@ -0,0 +1,270 @@ + +#include +#include +#include +#include + +#include "opgen.h" + +#include + +using namespace std; + +struct opcode_pat_t { + vector pat; + unsigned int mrm:1; //mod/reg/rm + unsigned int mrm_chk_mod:1; //does mod matter? + unsigned int mrm_mod3:1; //mod==3 + unsigned int mrm_chk_reg:1; //does reg matter? + unsigned int mrm_reg:3; //value of reg + const struct opcode_t* op; +}; + +vector opflst; + +void addlist_pattmrm(opcode_pat_t &opt,size_t parmi) { + if (parmi < MAX_PATPARAM && opt.op->patparam[parmi] == CPUPPM_MODREGRM) { + opcode_pat_t c_opt = opt; + c_opt.mrm = 1; + parmi++; + + for (unsigned int mod3=0;mod3<2;mod3++) { + for (unsigned int reg=0;reg<8;reg++) { + if (c_opt.mrm_chk_mod) c_opt.mrm_mod3=mod3; + if (c_opt.mrm_chk_reg) c_opt.mrm_reg=reg; + if ((c_opt.mrm_chk_mod || mod3 == 0) && (c_opt.mrm_chk_reg || reg == 0)) opflst.push_back(c_opt); + } + } + } + else { + opflst.push_back(opt); + } +} + +void addlist_pattlb(opcode_pat_t &opt,size_t parmi) { + if (opt.op->pattern_lb_mask.mask != 0) { + assert(opt.op->pattern_sz != 0); + assert(opt.pat.size() == opt.op->pattern_sz); + assert((opt.pat[opt.pat.size()-1u] & opt.op->pattern_lb_mask.mask) == 0); + + opcode_pat_t c_opt = opt; + for (unsigned int c=0;c <= c_opt.op->pattern_lb_mask.mask;c++) { + c_opt.pat[c_opt.pat.size()-1u] = (c_opt.pat[c_opt.pat.size()-1u] & ~c_opt.op->pattern_lb_mask.mask) + c; + if (c_opt.op->pattern_lb_mask.match & (1u << c)) addlist_pattmrm(c_opt,parmi); + } + } + else { + addlist_pattmrm(opt,parmi); + } +} + +void addlist(const struct opcode_t** oplist) { + while (*oplist) { + const struct opcode_t* op = *oplist++; + opcode_pat_t opt = { {}, 0, 0, 0, 0, 0, NULL }; + + if (op->pattern_sz == 0) continue; + opt.pat.resize(op->pattern_sz); + memcpy(opt.pat.data(),op->pattern,op->pattern_sz); + opt.op = op; + + addlist_pattlb(opt,0); + } +} + +const char *param2str(const uint8_t p,const uint8_t s) { + switch (p) { + case CPUP_NONE: return "none"; + case CPUP_ZERO: return "0"; + case CPUP_ONE: return "1"; + case CPUP_IMMEDIATE: return "imm"; + case CPUP_IMMEDIATE_SX: return "immsx"; + case CPUP_MEM_RM: return "mem(rm)"; + case CPUP_MEM_IMM: return "mem(imm)"; + + case CPUP_GREG_EAX: + switch (s) { + case CPUPS_BYTE: return "al"; + case CPUPS_WORD: return "ax"; + case CPUPS_DWORD: return "eax"; + case CPUPS_QWORD: return "rax"; + case CPUPS_NATIVEWORD: return "ax/al"; + default: return "a?"; + }; + break; + + case CPUP_GREG_ECX: + switch (s) { + case CPUPS_BYTE: return "cl"; + case CPUPS_WORD: return "cx"; + case CPUPS_DWORD: return "ecx"; + case CPUPS_QWORD: return "rcx"; + case CPUPS_NATIVEWORD: return "cx/cl"; + default: return "c?"; + }; + break; + + case CPUP_GREG_EDX: + switch (s) { + case CPUPS_BYTE: return "dl"; + case CPUPS_WORD: return "dx"; + case CPUPS_DWORD: return "edx"; + case CPUPS_QWORD: return "rdx"; + case CPUPS_NATIVEWORD: return "dx/dl"; + default: return "d?"; + }; + break; + + case CPUP_GREG_EBX: + switch (s) { + case CPUPS_BYTE: return "bl"; + case CPUPS_WORD: return "bx"; + case CPUPS_DWORD: return "ebx"; + case CPUPS_QWORD: return "rbx"; + case CPUPS_NATIVEWORD: return "bx/bl"; + default: return "b?"; + }; + break; + + case CPUP_GREG_ESP: + switch (s) { + case CPUPS_BYTE: return "ah"; + case CPUPS_WORD: return "sp"; + case CPUPS_DWORD: return "esp"; + case CPUPS_QWORD: return "rsp"; + case CPUPS_NATIVEWORD: return "sp/ah"; + default: return "sp?"; + }; + break; + + case CPUP_GREG_EBP: + switch (s) { + case CPUPS_BYTE: return "ch"; + case CPUPS_WORD: return "bp"; + case CPUPS_DWORD: return "ebp"; + case CPUPS_QWORD: return "rbp"; + case CPUPS_NATIVEWORD: return "bp/ch"; + default: return "bp?"; + }; + break; + + case CPUP_GREG_ESI: + switch (s) { + case CPUPS_BYTE: return "dh"; + case CPUPS_WORD: return "si"; + case CPUPS_DWORD: return "esi"; + case CPUPS_QWORD: return "rsi"; + case CPUPS_NATIVEWORD: return "si/cl"; + default: return "si?"; + }; + break; + + case CPUP_GREG_EDI: + switch (s) { + case CPUPS_BYTE: return "bh"; + case CPUPS_WORD: return "di"; + case CPUPS_DWORD: return "edi"; + case CPUPS_QWORD: return "rdi"; + case CPUPS_NATIVEWORD: return "di/bl"; + default: return "di?"; + }; + break; + + case CPUP_GREG_DXAX: + switch (s) { + case CPUPS_BYTE: return "ax"; + case CPUPS_WORD: return "dx:ax"; + case CPUPS_DWORD: return "edx:eax"; + case CPUPS_QWORD: return "rdx:rax"; + case CPUPS_NATIVEWORD: return "d:a/ax"; + default: return "d:a?"; + }; + break; + + case CPUP_GREG_REG: return "genreg(reg)"; + case CPUP_GREG_RM: return "genreg(r/m)"; + + case CPUP_SREG_ES: return "es"; + case CPUP_SREG_CS: return "cs"; + case CPUP_SREG_SS: return "ss"; + case CPUP_SREG_DS: return "ds"; + case CPUP_SREG_FS: return "fs"; + case CPUP_SREG_GS: return "gs"; + case CPUP_SREG_REG: return "sreg(reg)"; + case CPUP_SREG_RM: return "sreg(r/m)"; + }; + + return "?"; +} + +const char *paramsz2str(const uint8_t s) { + switch (s) { + case CPUPS_BYTE: return "b"; + case CPUPS_WORD: return "w"; + case CPUPS_DWORD: return "d"; + case CPUPS_QWORD: return "q"; + case CPUPS_NATIVEWORD: return "n/w"; + default: break; + }; + + return "?"; +} + +int main(int argc,char **argv) { + addlist(oplist_gen_8086); + + printf("Opcodes:\n"); + for (const auto &o : opflst) { + printf(" "); + for (const auto &p : o.pat) + printf("%02x ",p); + + for (size_t i=0;i < MAX_PATPARAM;i++) { + if (o.op->patparam[i] == CPUPPM_NONE) break; + switch (o.op->patparam[i]) { + case CPUPPM_MODREGRM: + printf("mod/reg/rm "); + break; + case CPUPPM_IMMEDIATEB: + printf("imm8 "); + break; + case CPUPPM_IMMEDIATEW: + printf("imm16 "); + break; + case CPUPPM_IMMEDIATED: + printf("imm32 "); + break; + case CPUPPM_IMMEDIATENW: + printf("immnw "); + break; + default: + break; + } + } + + if (o.mrm && o.mrm_chk_mod) + printf("(mod%s3) ",o.mrm_mod3?"==":"!="); + if (o.mrm && o.mrm_chk_reg) + printf("(reg=%u) ",o.mrm_reg); + + printf("-> '%s' ",o.op->opcode_name); + + if (o.op->p_dst.p != CPUP_NONE) + printf("d:%s(%s) ",param2str(o.op->p_dst.p,o.op->p_dst.s),paramsz2str(o.op->p_dst.s)); + + for (size_t i=0;i < MAX_SPARAM;i++) { + if (o.op->p_src[i].p == CPUP_NONE) break; + printf("s:%s(%s) ",param2str(o.op->p_src[i].p,o.op->p_src[i].s),paramsz2str(o.op->p_src[i].s)); + } + + if (o.op->flags & CPUFL_PREFIX_SEGMENT) + printf("(prefix:segov) "); + if (o.op->flags & CPUFL_REG_FROM_OPCODE) + printf("(reg:opcode) "); + + printf("\n"); + } + + return 0; +} + diff --git a/experiments/opcodes/opgen.h b/experiments/opcodes/opgen.h new file mode 100644 index 00000000000..27d5108dc2f --- /dev/null +++ b/experiments/opcodes/opgen.h @@ -0,0 +1,125 @@ + +#include + +#define MAX_PATTERN 2 +#define MAX_PATPARAM 1 +#define MAX_SPARAM 1 + +struct opcode_param_t { + const uint8_t p; + const uint8_t s; +}; + +struct opcode_patmask_t { + const uint8_t mask;//can be 0, 1, 3, or 7 + const uint8_t match;//bitmask for which values are valid (bit 0==x&mask&1) +}; + +struct opcode_t { + const char* opcode_name; + const uint8_t pattern_sz; + const uint8_t pattern[MAX_PATTERN]; + const uint8_t patparam[MAX_PATPARAM]; + const struct opcode_patmask_t pattern_lb_mask; // range matching of last byte in pattern if mask!=0 + const uint8_t flags; + const struct opcode_param_t p_dst; + const struct opcode_param_t p_src[MAX_SPARAM]; +}; + +enum { + CPUFL_PREFIX_SEGMENT=1 << 0, // segment prefix + CPUFL_REG_FROM_OPCODE=1 << 1 // reg field from opcode (last byte & 7) needed for INC/DEC/XCHG +}; + +enum { + CPUPPM_NONE=0, + CPUPPM_MODREGRM=1, + CPUPPM_IMMEDIATEB=2, + CPUPPM_IMMEDIATEW=3, + CPUPPM_IMMEDIATED=4, + CPUPPM_IMMEDIATENW=5 // depends on CPU mode, 16-bit = word, 32-bit = dword +}; + +enum { + CPUPS_BYTE=1, // 8-bit + CPUPS_WORD=2, // 16-bit + CPUPS_DWORD=3, // 32-bit + CPUPS_QWORD=4, // 64-bit + + CPUPS_NATIVEWORD=0x40 // depends on CPU mode, 16-bit = word, 32-bit = dword +}; + +enum { + ////////////////////////////////// + CPUP_NONE=0x00, + CPUP_ZERO=0x01, + CPUP_ONE=0x02, + CPUP_IMMEDIATE=0x03, + CPUP_IMMEDIATE_SX=0x04, // sign extend + + //////////////////////////// + CPUP_MEM_RM=0x08, + + CPUP_MEM_IMM_MIN=0x0C, + CPUP_MEM_IMM=0x0C, // ex: mov al,[immediate] + CPUP_MEM_IMM_MAX=0x0F, + + ///////////////////////////////////////////// + CPUP_GREG_MIN=0x10, + + CPUP_GREG_A=0x10, + CPUP_GREG_C=0x11, + CPUP_GREG_D=0x12, + CPUP_GREG_B=0x13, + + CPUP_GREG_EAX=0x10, + CPUP_GREG_ECX=0x11, + CPUP_GREG_EDX=0x12, + CPUP_GREG_EBX=0x13, + CPUP_GREG_ESP=0x14, + CPUP_GREG_EBP=0x15, + CPUP_GREG_ESI=0x16, + CPUP_GREG_EDI=0x17, + + CPUP_GREG_AX=0x10, + CPUP_GREG_CX=0x11, + CPUP_GREG_DX=0x12, + CPUP_GREG_BX=0x13, + CPUP_GREG_SP=0x14, + CPUP_GREG_BP=0x15, + CPUP_GREG_SI=0x16, + CPUP_GREG_DI=0x17, + + CPUP_GREG_AL=0x10, + CPUP_GREG_CL=0x11, + CPUP_GREG_DL=0x12, + CPUP_GREG_BL=0x13, + CPUP_GREG_AH=0x14, + CPUP_GREG_CH=0x15, + CPUP_GREG_DH=0x16, + CPUP_GREG_BH=0x17, + + CPUP_GREG_DXAX=0x1D, + CPUP_GREG_REG=0x1E, + CPUP_GREG_RM=0x1F, + + CPUP_GREG_MAX=0x1F, + + //////////////////////////////////////////////////// + CPUP_SREG_MIN=0x20, + + CPUP_SREG_ES=0x20, + CPUP_SREG_CS=0x21, + CPUP_SREG_SS=0x22, + CPUP_SREG_DS=0x23, + CPUP_SREG_FS=0x24, + CPUP_SREG_GS=0x25, + + CPUP_SREG_REG=0x2E, + CPUP_SREG_RM=0x2F, + + CPUP_SREG_MAX=0x2F +}; + +extern const struct opcode_t* oplist_gen_8086[]; + diff --git a/experiments/opcodes/opgt.c b/experiments/opcodes/opgt.c new file mode 100644 index 00000000000..e7e3d44fb21 --- /dev/null +++ b/experiments/opcodes/opgt.c @@ -0,0 +1,807 @@ + +#include +#include + +#include "opgen.h" + +const struct opcode_t op_00_add = { // ADD r/m(b), reg(b) 0x00 mod/reg/rm + .opcode_name = "add", + .pattern_sz = 1, + .pattern = {0x00}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_01_add = { // ADD r/m(w), reg(w) 0x01 mod/reg/rm + .opcode_name = "add", + .pattern_sz = 1, + .pattern = {0x01}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_02_add = { // ADD reg(b), r/m(b) 0x02 mod/reg/rm + .opcode_name = "add", + .pattern_sz = 1, + .pattern = {0x02}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_03_add = { // ADD reg(w), r/m(w) 0x03 mod/reg/rm + .opcode_name = "add", + .pattern_sz = 1, + .pattern = {0x03}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_04_add = { // ADD a(b), imm(b) 0x04 mod/reg/rm + .opcode_name = "add", + .pattern_sz = 1, + .pattern = {0x04}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_05_add = { // ADD a(w), imm(w) 0x05 mod/reg/rm + .opcode_name = "add", + .pattern_sz = 1, + .pattern = {0x05}, + .patparam = { CPUPPM_IMMEDIATENW }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_06_push = { // PUSH ES 0x06 + .opcode_name = "push", + .pattern_sz = 1, + .pattern = {0x06}, + .p_src = { { .p = CPUP_SREG_ES, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_07_pop = { // POP ES 0x07 + .opcode_name = "pop", + .pattern_sz = 1, + .pattern = {0x07}, + .p_dst = { .p = CPUP_SREG_ES, .s = CPUPS_NATIVEWORD } +}; +const struct opcode_t op_08_or = { // OR r/m(b), reg(b) 0x08 mod/reg/rm + .opcode_name = "or", + .pattern_sz = 1, + .pattern = {0x08}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_09_or = { // OR r/m(w), reg(w) 0x09 mod/reg/rm + .opcode_name = "or", + .pattern_sz = 1, + .pattern = {0x09}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_0a_or = { // OR reg(b), r/m(b) 0x0A mod/reg/rm + .opcode_name = "or", + .pattern_sz = 1, + .pattern = {0x0a}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_0b_or = { // OR reg(w), r/m(w) 0x0B mod/reg/rm + .opcode_name = "or", + .pattern_sz = 1, + .pattern = {0x0b}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_0c_or = { // OR a(b), imm(b) 0x0C mod/reg/rm + .opcode_name = "or", + .pattern_sz = 1, + .pattern = {0x0c}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_0d_or = { // OR a(w), imm(w) 0x0D mod/reg/rm + .opcode_name = "or", + .pattern_sz = 1, + .pattern = {0x0d}, + .patparam = { CPUPPM_IMMEDIATENW }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_0e_push = { // PUSH CS 0x0E + .opcode_name = "push", + .pattern_sz = 1, + .pattern = {0x0e}, + .p_src = { { .p = CPUP_SREG_CS, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_0f_pop = { // POP CS 0x0F + .opcode_name = "pop", + .pattern_sz = 1, + .pattern = {0x0f}, + .p_dst = { .p = CPUP_SREG_CS, .s = CPUPS_NATIVEWORD } +}; +const struct opcode_t op_10_adc = { // ADC r/m(b), reg(b) 0x10 mod/reg/rm + .opcode_name = "adc", + .pattern_sz = 1, + .pattern = {0x10}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_11_adc = { // ADC r/m(w), reg(w) 0x11 mod/reg/rm + .opcode_name = "adc", + .pattern_sz = 1, + .pattern = {0x11}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_12_adc = { // ADC reg(b), r/m(b) 0x12 mod/reg/rm + .opcode_name = "adc", + .pattern_sz = 1, + .pattern = {0x12}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_13_adc = { // ADC reg(w), r/m(w) 0x13 mod/reg/rm + .opcode_name = "adc", + .pattern_sz = 1, + .pattern = {0x13}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_14_adc = { // ADC a(b), imm(b) 0x14 mod/reg/rm + .opcode_name = "adc", + .pattern_sz = 1, + .pattern = {0x14}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_15_adc = { // ADC a(w), imm(w) 0x15 mod/reg/rm + .opcode_name = "adc", + .pattern_sz = 1, + .pattern = {0x15}, + .patparam = { CPUPPM_IMMEDIATENW }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_16_push = { // PUSH SS 0x16 + .opcode_name = "push", + .pattern_sz = 1, + .pattern = {0x16}, + .p_src = { { .p = CPUP_SREG_SS, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_17_pop = { // POP SS 0x17 + .opcode_name = "pop", + .pattern_sz = 1, + .pattern = {0x17}, + .p_dst = { .p = CPUP_SREG_SS, .s = CPUPS_NATIVEWORD } +}; +const struct opcode_t op_18_sbb = { // SBB r/m(b), reg(b) 0x18 mod/reg/rm + .opcode_name = "sbb", + .pattern_sz = 1, + .pattern = {0x18}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_19_sbb = { // SBB r/m(w), reg(w) 0x19 mod/reg/rm + .opcode_name = "sbb", + .pattern_sz = 1, + .pattern = {0x19}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_1a_sbb = { // SBB reg(b), r/m(b) 0x1A mod/reg/rm + .opcode_name = "sbb", + .pattern_sz = 1, + .pattern = {0x1a}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_1b_sbb = { // SBB reg(w), r/m(w) 0x1B mod/reg/rm + .opcode_name = "sbb", + .pattern_sz = 1, + .pattern = {0x1b}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_1c_sbb = { // SBB a(b), imm(b) 0x1C mod/reg/rm + .opcode_name = "sbb", + .pattern_sz = 1, + .pattern = {0x1c}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_1d_sbb = { // SBB a(w), imm(w) 0x1D mod/reg/rm + .opcode_name = "sbb", + .pattern_sz = 1, + .pattern = {0x1d}, + .patparam = { CPUPPM_IMMEDIATENW }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_1e_push = { // PUSH DS 0x1E + .opcode_name = "push", + .pattern_sz = 1, + .pattern = {0x1e}, + .p_src = { { .p = CPUP_SREG_DS, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_1f_pop = { // POP DS 0x1F + .opcode_name = "pop", + .pattern_sz = 1, + .pattern = {0x1f}, + .p_dst = { .p = CPUP_SREG_DS, .s = CPUPS_NATIVEWORD } +}; +const struct opcode_t op_20_and = { // AND r/m(b), reg(b) 0x20 mod/reg/rm + .opcode_name = "and", + .pattern_sz = 1, + .pattern = {0x20}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_21_and = { // AND r/m(w), reg(w) 0x21 mod/reg/rm + .opcode_name = "and", + .pattern_sz = 1, + .pattern = {0x21}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_22_and = { // AND reg(b), r/m(b) 0x22 mod/reg/rm + .opcode_name = "and", + .pattern_sz = 1, + .pattern = {0x22}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_23_and = { // AND reg(w), r/m(w) 0x23 mod/reg/rm + .opcode_name = "and", + .pattern_sz = 1, + .pattern = {0x23}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_24_and = { // AND a(b), imm(b) 0x24 mod/reg/rm + .opcode_name = "and", + .pattern_sz = 1, + .pattern = {0x24}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_25_and = { // AND a(w), imm(w) 0x25 mod/reg/rm + .opcode_name = "and", + .pattern_sz = 1, + .pattern = {0x25}, + .patparam = { CPUPPM_IMMEDIATENW }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_26_es_segov = { // ES: 0x26 + .opcode_name = "es:", + .pattern_sz = 1, + .pattern = {0x26}, + .flags = CPUFL_PREFIX_SEGMENT +}; +const struct opcode_t op_27_daa = { // DAA 0x27 + .opcode_name = "daa", + .pattern_sz = 1, + .pattern = {0x27}, + .p_dst = { .p = CPUP_GREG_AL, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_AL, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_28_sub = { // SUB r/m(b), reg(b) 0x28 mod/reg/rm + .opcode_name = "sub", + .pattern_sz = 1, + .pattern = {0x28}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_29_sub = { // SUB r/m(w), reg(w) 0x29 mod/reg/rm + .opcode_name = "sub", + .pattern_sz = 1, + .pattern = {0x29}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_2a_sub = { // SUB reg(b), r/m(b) 0x2A mod/reg/rm + .opcode_name = "sub", + .pattern_sz = 1, + .pattern = {0x2A}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_2b_sub = { // SUB reg(w), r/m(w) 0x2B mod/reg/rm + .opcode_name = "sub", + .pattern_sz = 1, + .pattern = {0x2B}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_2c_sub = { // SUB a(b), imm(b) 0x2C mod/reg/rm + .opcode_name = "sub", + .pattern_sz = 1, + .pattern = {0x2C}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_2d_sub = { // SUB a(w), imm(w) 0x2D mod/reg/rm + .opcode_name = "sub", + .pattern_sz = 1, + .pattern = {0x2D}, + .patparam = { CPUPPM_IMMEDIATENW }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_2e_cs_segov = { // CS: 0x2E + .opcode_name = "cs:", + .pattern_sz = 1, + .pattern = {0x2E}, + .flags = CPUFL_PREFIX_SEGMENT +}; +const struct opcode_t op_2f_das = { // DAS 0x2F + .opcode_name = "das", + .pattern_sz = 1, + .pattern = {0x2F}, + .p_dst = { .p = CPUP_GREG_AL, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_AL, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_30_xor = { // XOR r/m(b), reg(b) 0x30 mod/reg/rm + .opcode_name = "xor", + .pattern_sz = 1, + .pattern = {0x30}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_31_xor = { // XOR r/m(w), reg(w) 0x31 mod/reg/rm + .opcode_name = "xor", + .pattern_sz = 1, + .pattern = {0x31}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_32_xor = { // XOR reg(b), r/m(b) 0x32 mod/reg/rm + .opcode_name = "xor", + .pattern_sz = 1, + .pattern = {0x32}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_33_xor = { // XOR reg(w), r/m(w) 0x33 mod/reg/rm + .opcode_name = "xor", + .pattern_sz = 1, + .pattern = {0x33}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_34_xor = { // XOR a(b), imm(b) 0x34 mod/reg/rm + .opcode_name = "xor", + .pattern_sz = 1, + .pattern = {0x34}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_35_xor = { // XOR a(w), imm(w) 0x35 mod/reg/rm + .opcode_name = "xor", + .pattern_sz = 1, + .pattern = {0x35}, + .patparam = { CPUPPM_IMMEDIATENW }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_36_ss_segov = { // SS: 0x36 + .opcode_name = "ss:", + .pattern_sz = 1, + .pattern = {0x36}, + .flags = CPUFL_PREFIX_SEGMENT +}; +const struct opcode_t op_37_aaa = { // AAA 0x37 + .opcode_name = "aaa", + .pattern_sz = 1, + .pattern = {0x37}, + .p_dst = { .p = CPUP_GREG_AL, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_AL, .s = CPUPS_BYTE } } +}; + +const struct opcode_t op_38_cmp = { // CMP r/m(b), reg(b) 0x38 mod/reg/rm + .opcode_name = "cmp", + .pattern_sz = 1, + .pattern = {0x38}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_39_cmp = { // CMP r/m(w), reg(w) 0x39 mod/reg/rm + .opcode_name = "cmp", + .pattern_sz = 1, + .pattern = {0x39}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_3a_cmp = { // CMP reg(b), r/m(b) 0x3A mod/reg/rm + .opcode_name = "cmp", + .pattern_sz = 1, + .pattern = {0x3A}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_3b_cmp = { // CMP reg(w), r/m(w) 0x3B mod/reg/rm + .opcode_name = "cmp", + .pattern_sz = 1, + .pattern = {0x3B}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_3c_cmp = { // CMP a(b), imm(b) 0x3C mod/reg/rm + .opcode_name = "cmp", + .pattern_sz = 1, + .pattern = {0x3C}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_3d_cmp = { // CMP a(w), imm(w) 0x3D mod/reg/rm + .opcode_name = "cmp", + .pattern_sz = 1, + .pattern = {0x3D}, + .patparam = { CPUPPM_IMMEDIATENW }, + .p_dst = { .p = CPUP_GREG_A, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_3e_ds_segov = { // DS: 0x3E + .opcode_name = "ds:", + .pattern_sz = 1, + .pattern = {0x3E}, + .flags = CPUFL_PREFIX_SEGMENT +}; +const struct opcode_t op_3f_aas = { // AAS 0x3F + .opcode_name = "aas", + .pattern_sz = 1, + .pattern = {0x3F}, + .p_dst = { .p = CPUP_GREG_AL, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_AL, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_40_inc = { // INC 0x40-0x47 + .opcode_name = "inc", + .pattern_sz = 1, + .pattern = {0x40}, + .pattern_lb_mask = { .mask=0x07, .match=0xFF }, // match 0x40-0x47 + .flags = CPUFL_REG_FROM_OPCODE, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD } +}; +const struct opcode_t op_48_dec = { // DEC 0x48-0x4F + .opcode_name = "dec", + .pattern_sz = 1, + .pattern = {0x48}, + .pattern_lb_mask = { .mask=0x07, .match=0xFF }, // match 0x48-0x4F + .flags = CPUFL_REG_FROM_OPCODE, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD } +}; +const struct opcode_t op_50_push = { // PUSH 0x50-0x57 + .opcode_name = "push", + .pattern_sz = 1, + .pattern = {0x50}, + .pattern_lb_mask = { .mask=0x07, .match=0xFF }, // match 0x50-0x57 + .flags = CPUFL_REG_FROM_OPCODE, + .p_src = { { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_58_pop = { // POP 0x58-0x5F + .opcode_name = "pop", + .pattern_sz = 1, + .pattern = {0x58}, + .pattern_lb_mask = { .mask=0x07, .match=0xFF }, // match 0x58-0x5F + .flags = CPUFL_REG_FROM_OPCODE, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD } +}; + +const struct opcode_t op_70_jcc = { // JO 0x70 + .opcode_name = "jo", + .pattern_sz = 1, + .pattern = {0x70}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_71_jcc = { // JNO 0x71 + .opcode_name = "jno", + .pattern_sz = 1, + .pattern = {0x71}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_72_jcc = { // JB 0x72 + .opcode_name = "jb", + .pattern_sz = 1, + .pattern = {0x72}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_73_jcc = { // JNB 0x73 + .opcode_name = "jnb", + .pattern_sz = 1, + .pattern = {0x73}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_74_jcc = { // JZ 0x74 + .opcode_name = "jz", + .pattern_sz = 1, + .pattern = {0x74}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_75_jcc = { // JNZ 0x75 + .opcode_name = "jnz", + .pattern_sz = 1, + .pattern = {0x75}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_76_jcc = { // JBE 0x76 + .opcode_name = "jbe", + .pattern_sz = 1, + .pattern = {0x76}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_77_jcc = { // JA 0x77 + .opcode_name = "ja", + .pattern_sz = 1, + .pattern = {0x77}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_78_jcc = { // JS 0x78 + .opcode_name = "js", + .pattern_sz = 1, + .pattern = {0x78}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_79_jcc = { // JNS 0x79 + .opcode_name = "jns", + .pattern_sz = 1, + .pattern = {0x79}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_7a_jcc = { // JPE 0x7A + .opcode_name = "jpe", + .pattern_sz = 1, + .pattern = {0x7A}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_7b_jcc = { // JPO 0x7B + .opcode_name = "jpo", + .pattern_sz = 1, + .pattern = {0x7B}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_7c_jcc = { // JL 0x7C + .opcode_name = "jl", + .pattern_sz = 1, + .pattern = {0x7C}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_7d_jcc = { // JGE 0x7D + .opcode_name = "jge", + .pattern_sz = 1, + .pattern = {0x7D}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_7e_jcc = { // JLE 0x7E + .opcode_name = "jle", + .pattern_sz = 1, + .pattern = {0x7E}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_7f_jcc = { // JG 0x7F + .opcode_name = "jg", + .pattern_sz = 1, + .pattern = {0x7F}, + .patparam = { CPUPPM_IMMEDIATEB }, + .p_src = { { .p = CPUP_IMMEDIATE_SX, .s = CPUPS_NATIVEWORD } } +}; + +const struct opcode_t op_84_test = { // TEST reg(b), r/m(b) 0x84 mod/reg/rm + .opcode_name = "test", + .pattern_sz = 1, + .pattern = {0x84}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_85_test = { // TEST reg(w), r/m(w) 0x85 mod/reg/rm + .opcode_name = "test", + .pattern_sz = 1, + .pattern = {0x85}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD } } +}; +const struct opcode_t op_86_xchg = { // XCHG reg(b), r/m(b) 0x86 mod/reg/rm + .opcode_name = "xchg", + .pattern_sz = 1, + .pattern = {0x86}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_87_xchg = { // XCHG reg(w), r/m(w) 0x87 mod/reg/rm + .opcode_name = "xchg", + .pattern_sz = 1, + .pattern = {0x87}, + .patparam = { CPUPPM_MODREGRM }, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_RM, .s = CPUPS_NATIVEWORD } } +}; + +const struct opcode_t op_90_nop = { // NOP 0x90 (NTS: This is technically XCHG AX,AX) + .opcode_name = "nop", + .pattern_sz = 1, + .pattern = {0x90} +}; +const struct opcode_t op_91_xchg = { // XCHG ,AX 0x91-0x97 + .opcode_name = "xchg", + .pattern_sz = 1, + .pattern = {0x90}, + .pattern_lb_mask = { .mask=0x07, .match=0xFE }, // match 0x91-0x97 (11111110b) (0x97,0x96,0x95,0x94,0x93,0x92,0x91,x) + .flags = CPUFL_REG_FROM_OPCODE, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_GREG_A, .s = CPUPS_NATIVEWORD } } +}; + +const struct opcode_t op_b0_mov = { // MOV , 0xB0-0xB7 + .opcode_name = "mov", + .pattern_sz = 1, + .pattern = {0xB0}, + .patparam = { CPUPPM_IMMEDIATEB }, + .pattern_lb_mask = { .mask=0x07, .match=0xFF }, + .flags = CPUFL_REG_FROM_OPCODE, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_BYTE }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_BYTE } } +}; +const struct opcode_t op_b8_mov = { // MOV , 0xB8-0xBF + .opcode_name = "mov", + .pattern_sz = 1, + .pattern = {0xB8}, + .patparam = { CPUPPM_IMMEDIATENW }, + .pattern_lb_mask = { .mask=0x07, .match=0xFF }, + .flags = CPUFL_REG_FROM_OPCODE, + .p_dst = { .p = CPUP_GREG_REG, .s = CPUPS_NATIVEWORD }, + .p_src = { { .p = CPUP_IMMEDIATE, .s = CPUPS_NATIVEWORD } } +}; + +// general instruction decoding (8086 level) +const struct opcode_t* oplist_gen_8086[] = { + &op_00_add, + &op_01_add, + &op_02_add, + &op_03_add, + &op_04_add, + &op_05_add, + &op_06_push, + &op_07_pop, + &op_08_or, + &op_09_or, + &op_0a_or, + &op_0b_or, + &op_0c_or, + &op_0d_or, + &op_0e_push, + &op_0f_pop, + &op_10_adc, + &op_11_adc, + &op_12_adc, + &op_13_adc, + &op_14_adc, + &op_15_adc, + &op_16_push, + &op_17_pop, + &op_18_sbb, + &op_19_sbb, + &op_1a_sbb, + &op_1b_sbb, + &op_1c_sbb, + &op_1d_sbb, + &op_1e_push, + &op_1f_pop, + &op_20_and, + &op_21_and, + &op_22_and, + &op_23_and, + &op_24_and, + &op_25_and, + &op_26_es_segov, + &op_27_daa, + &op_28_sub, + &op_29_sub, + &op_2a_sub, + &op_2b_sub, + &op_2c_sub, + &op_2d_sub, + &op_2e_cs_segov, + &op_2f_das, + &op_30_xor, + &op_31_xor, + &op_32_xor, + &op_33_xor, + &op_34_xor, + &op_35_xor, + &op_36_ss_segov, + &op_37_aaa, + &op_38_cmp, + &op_39_cmp, + &op_3a_cmp, + &op_3b_cmp, + &op_3c_cmp, + &op_3d_cmp, + &op_3e_ds_segov, + &op_3f_aas, + &op_40_inc, + &op_48_dec, + &op_50_push, + &op_58_pop, + &op_70_jcc, + &op_71_jcc, + &op_72_jcc, + &op_73_jcc, + &op_74_jcc, + &op_75_jcc, + &op_76_jcc, + &op_77_jcc, + &op_78_jcc, + &op_79_jcc, + &op_7a_jcc, + &op_7b_jcc, + &op_7c_jcc, + &op_7d_jcc, + &op_7e_jcc, + &op_7f_jcc, + + &op_84_test, + &op_85_test, + &op_86_xchg, + &op_87_xchg, + + &op_90_nop, + &op_91_xchg, + + &op_b0_mov, + &op_b8_mov, + + NULL +}; + diff --git a/git-pull-mainline.sh b/git-pull-mainline.sh index 02a4935962d..86c72a29d72 100755 --- a/git-pull-mainline.sh +++ b/git-pull-mainline.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh git remote add mainline svn://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk git fetch mainline diff --git a/git-push-to-github.sh b/git-push-to-github.sh index 97f9ed7d905..4d930707592 100755 --- a/git-push-to-github.sh +++ b/git-push-to-github.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh git remote add github https://joncampbell123@github.com/joncampbell123/dosbox-x.git # might fail git remote set-url github https://joncampbell123@github.com/joncampbell123/dosbox-x.git # might fail git push github master diff --git a/git-setup-sdl2-work.sh b/git-setup-sdl2-work.sh index 82ad9f30299..beac0f5d494 100755 --- a/git-setup-sdl2-work.sh +++ b/git-setup-sdl2-work.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh url="https://github.com/wcp16/dosbox-xe.git" branch="dosbox-sdl2-upstream" git remote add "${branch}" "${url}" || git remote set-url "${branch}" "${url}" || exit 1 diff --git a/include/bios_disk.h b/include/bios_disk.h index 8b28caacacc..7fb0abfa1ca 100644 --- a/include/bios_disk.h +++ b/include/bios_disk.h @@ -82,7 +82,8 @@ class imageDisk { ID_D88, ID_NFD, ID_EMPTY_DRIVE, - ID_INT13 + ID_INT13, + ID_MSDOSBLOCKDEV }; virtual uint8_t Read_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,void * data,unsigned int req_sector_size=0); @@ -97,8 +98,9 @@ class imageDisk { virtual void Get_Geometry(uint32_t * getHeads, uint32_t *getCyl, uint32_t *getSect, uint32_t *getSectSize); virtual uint8_t GetBiosType(void); virtual uint32_t getSectSize(void); + virtual uint64_t getLBA(void) { LBA = image_length / sector_size; return LBA; } imageDisk(class DOS_Drive *useDrive, unsigned int letter, uint32_t freeMB, int timeout); - imageDisk(FILE *imgFile, const char *imgName, uint32_t imgSizeK, bool isHardDisk); + imageDisk(FILE *imgFile, const char *imgName, uint64_t imgSize, bool isHardDisk); imageDisk(FILE* diskimg, const char* diskName, uint32_t cylinders, uint32_t heads, uint32_t sectors, uint32_t sector_size, bool hardDrive); imageDisk() = default; @@ -117,6 +119,7 @@ class imageDisk { bool hardDrive = false; uint64_t diskSizeK = 0; bool diskChangeFlag = false; + uint64_t LBA = 0; /* this is intended only for when the disk can change out from under us while mounted */ virtual bool detectDiskChange(void) { const bool r = diskChangeFlag; diskChangeFlag = false; return r; } @@ -126,6 +129,7 @@ class imageDisk { imageDisk(IMAGE_TYPE class_id); uint8_t floppytype = 0; + public: uint32_t reserved_cylinders = 0; uint64_t image_base = 0; uint64_t image_length = 0; @@ -405,6 +409,7 @@ class imageDiskVHD : public imageDisk { uint32_t CreateSnapshot(); void DetectGeometry(Bitu sizes[]); static void DetectGeometry(uint8_t* buf, Bitu sizes[], uint64_t currentSize); + static void DetectGeometry(Bitu sizes[], uint64_t currentSize); static uint64_t scanMBR(uint8_t* mbr, Bitu sizes[], uint64_t disksize=0); bool MergeSnapshot(uint32_t* totalSectorsMerged, uint32_t* totalBlocksUpdated); static void SizeToCHS(uint64_t size, uint16_t* c, uint8_t* h, uint8_t* s); @@ -463,6 +468,7 @@ class imageDiskVHD : public imageDisk { bool currentBlockAllocated = false; uint32_t currentBlockSectorOffset = 0; uint8_t* currentBlockDirtyMap = nullptr; + //uint64_t image_length = 0; }; /* C++ class implementing El Torito floppy emulation */ @@ -473,14 +479,12 @@ class imageDiskElToritoFloppy : public imageDisk { uint8_t Read_AbsoluteSector(uint32_t sectnum, void * data) override { unsigned char buffer[2048]; - bool GetMSCDEXDrive(unsigned char drive_letter,CDROM_Interface **_cdrom); - - CDROM_Interface *src_drive=NULL; - if (!GetMSCDEXDrive(CDROM_drive-'A',&src_drive)) return 0x05; - + if (!src_drive) + return 0x05; if (!src_drive->ReadSectorsHost(buffer,false,cdrom_sector_offset+(sectnum>>2)/*512 byte/sector to 2048 byte/sector conversion*/,1)) return 0x05; + if ((sectnum & 3) * 512 + 512 > sizeof(buffer)) return 0x05; memcpy(data,buffer+((sectnum&3)*512),512); return 0x00; } @@ -494,6 +498,9 @@ class imageDiskElToritoFloppy : public imageDisk { sector_size = 512; class_id = ID_EL_TORITO_FLOPPY; + bool GetMSCDEXDrive(unsigned char drive_letter,CDROM_Interface **_cdrom); + GetMSCDEXDrive(CDROM_drive-'A',&src_drive);/*addref src_drive*/ + if (floppy_emu_type == 1) { /* 1.2MB */ heads = 2; cylinders = 80; @@ -520,8 +527,13 @@ class imageDiskElToritoFloppy : public imageDisk { active = true; } virtual ~imageDiskElToritoFloppy() { + if (src_drive) { + src_drive->Release(); + src_drive = NULL; + } } + CDROM_Interface *src_drive=NULL; unsigned char CDROM_drive; unsigned long cdrom_sector_offset; unsigned char floppy_type; @@ -613,8 +625,10 @@ void LogPrintPartitionTable(const std::vector &parts); extern unsigned char INT13_ElTorito_NoEmuDriveNumber; extern signed char INT13_ElTorito_IDEInterface; +extern CDROM_Interface * INT13_ElTorito_cdrom; extern char INT13_ElTorito_NoEmuCDROMDrive; +#if !defined(OSFREE) class imageDiskINT13Drive : public imageDisk { public: uint8_t Read_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,void * data,unsigned int req_sector_size=0) override; @@ -639,6 +653,27 @@ class imageDiskINT13Drive : public imageDisk { imageDisk* subdisk = NULL; bool busy = false; }; +#endif + +#if !defined(OSFREE) +class imageDiskMSDOSBlockDevice : public imageDisk { +public: + uint8_t Read_AbsoluteSector(uint32_t sectnum, void * data) override; + uint8_t Write_AbsoluteSector(uint32_t sectnum, const void * data) override; + + bool detectDiskChange(void) override; + + imageDiskMSDOSBlockDevice(); + virtual ~imageDiskMSDOSBlockDevice(); + + uint8_t media_dpb = 0; + uint8_t unit_code = 0; + uint16_t devseg = 0; + uint16_t attr = 0; + PhysPt devhdr = 0; + PhysPt bpbptr = 0; +}; +#endif diff --git a/include/bitop.h b/include/bitop.h index 13c889119fc..83c1565ed98 100644 --- a/include/bitop.h +++ b/include/bitop.h @@ -343,6 +343,30 @@ template static inline unsigned int log2(T v) { return ~0u; } +/* round up to the next power of 2 */ +/* 0x7000 0111 0000 0000 0000 16 bits + * 0x7070 0111 0000 0111 0000 shf = 8 + * 0x7777 0111 0111 0111 0111 shf = 4 + * 0x7FFF 0111 1111 1111 1111 shf = 2 + * 0x7FFF 0111 1111 1111 1111 shf = 1 + * + * 0x2000 0010 0000 0000 0000 16 bits + * 0x2020 0010 0000 0010 0000 shf = 8 + * 0x2222 0010 0010 0010 0010 shf = 4 + * 0x2AAA 0010 1010 1010 1010 shf = 2 + * 0x3FFF 0011 1111 1111 1111 shf = 1 + */ +template static inline constexpr unsigned int _rounduppow2mask(const T v,const T shf) { + return shf != T(0u) ? _rounduppow2mask(v | (v >> shf),shf >> T(1u)) : v; +} + +template static inline constexpr unsigned int rounduppow2mask(const T v) { + return _rounduppow2mask(v,type_bits() >> T(1u)); +} + +static_assert( rounduppow2mask(0x7000) == 0x7FFF, "oops" ); +static_assert( rounduppow2mask(0x2000) == 0x3FFF, "oops" ); +static_assert( rounduppow2mask(0x0FFF) == 0x0FFF, "oops" ); /* return type, pair */ class bitseqlengthandpos_ret_t { diff --git a/include/build_timestamp.h b/include/build_timestamp.h index b70f96c4a92..f8315d60430 100644 --- a/include/build_timestamp.h +++ b/include/build_timestamp.h @@ -1,4 +1,4 @@ /*auto-generated*/ -#define UPDATED_STR "Feb 6, 2025 8:20:30am" -#define GIT_COMMIT_HASH "e1bb71b" -#define COPYRIGHT_END_YEAR "2025" +#define UPDATED_STR "May 2, 2026 8:39:45am" +#define GIT_COMMIT_HASH "5817c64" +#define COPYRIGHT_END_YEAR "2026" diff --git a/include/builtin.h b/include/builtin.h index 8a5b582edaa..e584c2f25dc 100644 --- a/include/builtin.h +++ b/include/builtin.h @@ -11,6 +11,7 @@ #include "../src/builtin/shutdown.h" #include "../src/builtin/textutil.h" #include "../src/builtin/4DOS_img.h" +#include "../src/builtin/patchutil.h" extern char i4dos_data[CONFIG_SIZE]; extern char config_data[CONFIG_SIZE]; diff --git a/include/byteorder.h b/include/byteorder.h index c91c16bfa65..cf6ab341afa 100644 --- a/include/byteorder.h +++ b/include/byteorder.h @@ -132,7 +132,7 @@ #define be64toh(x) betoh64(x) #define le64toh(x) letoh64(x) -#elif defined(__HAIKU__) +#elif defined(__HAIKU__) || defined(OS2) #include diff --git a/include/control.h b/include/control.h index c476872b162..82ad42db7fd 100644 --- a/include/control.h +++ b/include/control.h @@ -74,6 +74,7 @@ class Config{ signed char opt_promptfolder = -1; bool opt_disable_dpi_awareness = false; bool opt_disable_numlock_check = false; + bool opt_force_gfx_hardware = false; bool opt_date_host_forced = false; bool opt_used_defaultdir = false; bool opt_defaultmapper = false; diff --git a/include/cp950_uni.h b/include/cp950_uni.h index f9846c32023..846d65616b0 100644 --- a/include/cp950_uni.h +++ b/include/cp950_uni.h @@ -3445,9 +3445,9 @@ void makestdcp950table() { cp950_to_unicode_raw[64*6+37] = 0x255e; cp950_to_unicode_raw[64*6+38] = 0x256a; cp950_to_unicode_raw[64*6+39] = 0x2561; - cp950_to_unicode_raw[64*7+12] = 0x5341; + cp950_to_unicode_raw[64*7+12] = 0x0000; /* 0x5341 is duplicate mapping so replace it with 0x0000 */ cp950_to_unicode_raw[64*7+13] = 0x5344; - cp950_to_unicode_raw[64*7+14] = 0x5345; + cp950_to_unicode_raw[64*7+14] = 0x0000; /* 0x5345 is duplicate mapping so replace it with 0x0000 */ cp950_to_unicode_raw[64*101+21] = 0x5f5d; cp950_to_unicode_raw[64*260+58] = 0x256d; cp950_to_unicode_raw[64*260+59] = 0x256e; diff --git a/include/cp951_uni.h b/include/cp951_uni.h index 979014bbfbd..6bfa4ea2c29 100644 --- a/include/cp951_uni.h +++ b/include/cp951_uni.h @@ -3472,12 +3472,12 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x7798,0x77af,0x77be,0x77c3,0x77c5,0x77cb,0x77dd,0x77e6, /* 0x81F0-0x81F7 */ 0x77f4,0x781e,0x783d,0x7842,0x7844,0x784b,0x7851,0x0000, /* 0x81F8-0x81FF */ /* codebase=0x8240 rawbase=0x0140 */ - 0x5516,0x58f7,0x9834,0x845b,0x7114,0x8276,0x8956,0x9d2c, /* 0x8240-0x8247 */ - 0x9d0e,0x8eaf,0x6062,0x6666,0x86ce,0x64b9,0x938c,0x565b, /* 0x8248-0x824F */ - 0x6f45,0x8acc,0x7149,0x5dcc,0x8749,0x9a28,0x7baa,0x8d0b, /* 0x8250-0x8257 */ - 0x9957,0x5c2d,0x7e4b,0x981a,0x5026,0x6372,0x9e78,0x783f, /* 0x8258-0x825F */ + 0x5516,0x58f7,0x9834,0x0000,0x7114,0x8276,0x0000,0x9d2c, /* 0x8240-0x8247 */ + 0x9d0e,0x8eaf,0x0000,0x0000,0x86ce,0x64b9,0x0000,0x565b, /* 0x8248-0x824F */ + 0x6f45,0x8acc,0x0000,0x5dcc,0x8749,0x9a28,0x7baa,0x8d0b, /* 0x8250-0x8257 */ + 0x0000,0x5c2d,0x7e4b,0x981a,0x0000,0x0000,0x9e78,0x783f, /* 0x8258-0x825F */ 0x9eb9,0x9eba,0x8cce,0x8b83,0xef79,0x848b,0x91a4,0x7a63, /* 0x8260-0x8267 */ - 0x64b0,0x5dfd,0x5e96,0x8061,0x6955,0x7aea,0x7026,0x68bc, /* 0x8268-0x826F */ + 0x0000,0x0000,0x0000,0x8061,0x6955,0x7aea,0x0000,0x68bc, /* 0x8268-0x826F */ 0x7977,0x6d9c,0x8fe9,0x7962,0x56a2,0x877f,0x5265,0x7984, /* 0x8270-0x8277 */ 0x6e8c,0x9197,0x7b86,0x982c,0x685d,0x4fad,0x85ae,0x0000, /* 0x8278-0x827F */ /* codebase=0x8280 rawbase=0x0180 */ @@ -3485,9 +3485,9 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8288-0x828F */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8290-0x8297 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8298-0x829F */ - 0x0000,0x7bed,0x874b,0x5036,0x690d,0x6b96,0x614e,0x5177, /* 0x82A0-0x82A7 */ - 0x771f,0x5024,0x7f6e,0x76f4,0x69d9,0x60e3,0x62f6,0x545f, /* 0x82A8-0x82AF */ - 0x9784,0x564c,0x50c5,0x5618,0x865e,0x5932,0x595b,0x595d, /* 0x82B0-0x82B7 */ + 0x0000,0x7bed,0x874b,0x5036,0x0000,0x0000,0x0000,0x0000, /* 0x82A0-0x82A7 */ + 0x0000,0x5024,0x0000,0x0000,0x0000,0x60e3,0x0000,0x545f, /* 0x82A8-0x82AF */ + 0x0000,0x0000,0x0000,0x5618,0x0000,0x5932,0x595b,0x595d, /* 0x82B0-0x82B7 */ 0x5963,0x596c,0x599b,0x59d7,0x59eb,0x5a1a,0x5aaa,0x5ad0, /* 0x82B8-0x82BF */ /* codebase=0x82c0 rawbase=0x01c0 */ 0x5af1,0x5b36,0x5bc9,0x5bf3,0x5c13,0x5c1c,0x5c1e,0x5c53, /* 0x82C0-0x82C7 */ @@ -3499,13 +3499,13 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x608b,0x60a6,0x60de,0x6111,0x6120,0x6121,0x613c,0x613d, /* 0x82F0-0x82F7 */ 0x6198,0x61b7,0x61f4,0x6213,0x621d,0x621e,0x6237,0x0000, /* 0x82F8-0x82FF */ /* codebase=0x8340 rawbase=0x0200 */ - 0x5e7a,0x6c10,0x53ce,0x4f2b,0x4f4e,0x5434,0x56f1,0x58ee, /* 0x8340-0x8347 */ - 0x5939,0x5986,0x5c2c,0x51b3,0x51b2,0x707e,0x89c1,0x89d2, /* 0x8348-0x834F */ + 0x5e7a,0x0000,0x53ce,0x4f2b,0x0000,0x5434,0x56f1,0x58ee, /* 0x8340-0x8347 */ + 0x5939,0x5986,0x0000,0x51b3,0x51b2,0x707e,0x89c1,0x0000, /* 0x8348-0x834F */ 0x8d1d,0x8f66,0x4e9a,0x6765,0x4ed1,0x4e24,0x534f,0x5c4a, /* 0x8350-0x8357 */ - 0x5188,0x5e95,0x62b5,0x4e1c,0x4e89,0x72b6,0x7c7c,0x7ea0, /* 0x8358-0x835F */ - 0x5367,0x8f67,0x90b8,0x957f,0x95e8,0x4fa0,0x4fa3,0x5156, /* 0x8360-0x8367 */ - 0x5219,0x52b2,0x5374,0x5942,0x5e05,0x67e2,0x6c79,0x4e3a, /* 0x8368-0x836F */ - 0x7ea3,0x7ea2,0x7eaa,0x7eab,0x7ea5,0x7ea6,0x7ea1,0x80dd, /* 0x8370-0x8377 */ + 0x5188,0x0000,0x0000,0x4e1c,0x4e89,0x72b6,0x7c7c,0x7ea0, /* 0x8358-0x835F */ + 0x5367,0x8f67,0x0000,0x957f,0x95e8,0x4fa0,0x4fa3,0x5156, /* 0x8360-0x8367 */ + 0x5219,0x52b2,0x5374,0x5942,0x5e05,0x0000,0x6c79,0x4e3a, /* 0x8368-0x836F */ + 0x7ea3,0x7ea2,0x7eaa,0x7eab,0x7ea5,0x7ea6,0x7ea1,0x0000, /* 0x8370-0x8377 */ 0x82ce,0x8ba1,0x8ba2,0x8ba3,0x8d1e,0x8d1f,0x519b,0x0000, /* 0x8378-0x837F */ /* codebase=0x8380 rawbase=0x0240 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8380-0x8387 */ @@ -3517,23 +3517,23 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x5458,0x5a31,0x5b59,0x5ce1,0x5c9b,0x5c98,0x5e08,0x5e93, /* 0x83B0-0x83B7 */ 0x5f84,0x631f,0x65f6,0x664b,0x4e66,0x6cfe,0x6d43,0x4e4c, /* 0x83B8-0x83BF */ /* codebase=0x83c0 rawbase=0x0280 */ - 0x72ed,0x72c8,0x4ea9,0x7825,0x79ea,0x7eba,0x7eb1,0x7eb9, /* 0x83C0-0x83C7 */ + 0x72ed,0x72c8,0x4ea9,0x0000,0x0000,0x7eba,0x7eb1,0x7eb9, /* 0x83C0-0x83C7 */ 0x7eaf,0x7ebd,0x7eb0,0x7ea7,0x7ead,0x7eb3,0x7eb8,0x7eb7, /* 0x83C8-0x83CF */ 0x80c1,0x8109,0x520d,0x8bb0,0x8ba6,0x8ba8,0x8ba7,0x8baa, /* 0x83D0-0x83D7 */ 0x8baf,0x8bad,0x8bab,0x5c82,0x8d22,0x8d21,0x8f69,0x8f6b, /* 0x83D8-0x83DF */ 0x9489,0x9488,0x948a,0x948b,0x95ea,0x9635,0x9655,0x9649, /* 0x83E0-0x83E7 */ - 0x9965,0x9a6c,0x9aa8,0x4f2a,0x4f1f,0x4fa6,0x4fa7,0x52a1, /* 0x83E8-0x83EF */ + 0x9965,0x9a6c,0x0000,0x4f2a,0x4f1f,0x4fa6,0x4fa7,0x52a1, /* 0x83E8-0x83EF */ 0x52a8,0x533a,0x53c2,0x54d1,0x95ee,0x8854,0x56fd,0x575a, /* 0x83F0-0x83F7 */ 0x57a9,0x6267,0x591f,0x5a04,0x5987,0x4e13,0x5c06,0x0000, /* 0x83F8-0x83FF */ /* codebase=0x8440 rawbase=0x02c0 */ 0x5c49,0x5ce5,0x5c97,0x5e26,0x5e10,0x5f20,0x5f3a,0x4ece, /* 0x8440-0x8447 */ - 0x5f95,0x51c4,0x6005,0x626b,0x6302,0x626a,0x62a1,0x6323, /* 0x8448-0x844F */ - 0x8d25,0x542f,0x659b,0x65a9,0x663c,0x52d6,0x5f03,0x6761, /* 0x8450-0x8457 */ + 0x5f95,0x0000,0x6005,0x626b,0x0000,0x626a,0x62a1,0x6323, /* 0x8448-0x844F */ + 0x8d25,0x542f,0x0000,0x65a9,0x663c,0x0000,0x5f03,0x6761, /* 0x8450-0x8457 */ 0x67ad,0x6740,0x6c22,0x51c9,0x6d45,0x6e0a,0x6cea,0x6ca6, /* 0x8458-0x845F */ - 0x51c0,0x7275,0x72f0,0x73b0,0x4ea7,0x6bd5,0x5f02,0x4f17, /* 0x8460-0x8467 */ + 0x51c0,0x7275,0x72f0,0x73b0,0x4ea7,0x6bd5,0x0000,0x4f17, /* 0x8460-0x8467 */ 0x7eca,0x7edf,0x7ecd,0x7ecb,0x7ecc,0x7ec6,0x7ec5,0x7ec4, /* 0x8468-0x846F */ - 0x7ec8,0x7ec1,0x7ec2,0x94b5,0x4e60,0x835a,0x830e,0x8392, /* 0x8470-0x8477 */ - 0x5e84,0x82cb,0x5904,0x672f,0x886e,0x89c5,0x89c4,0x0000, /* 0x8478-0x847F */ + 0x7ec8,0x7ec1,0x7ec2,0x94b5,0x4e60,0x835a,0x830e,0x0000, /* 0x8470-0x8477 */ + 0x0000,0x82cb,0x5904,0x672f,0x886e,0x89c5,0x89c4,0x0000, /* 0x8478-0x847F */ /* codebase=0x8480 rawbase=0x0300 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8480-0x8487 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8488-0x848F */ @@ -3549,9 +3549,9 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x5c27,0x573a,0x62a5,0x57da,0x58f6,0x5a32,0x5bfb,0x5c9a, /* 0x84D0-0x84D7 */ 0x5e27,0x5e0f,0x5395,0x53a9,0x6076,0x95f7,0x60ec,0x607b, /* 0x84D8-0x84DF */ 0x607c,0x62e3,0x6325,0x6362,0x626c,0x67a3,0x680b,0x6808, /* 0x84E0-0x84E7 */ - 0x94a6,0x6b8b,0x58f3,0x6c2f,0x6c29,0x6d8c,0x51d1,0x6e6e, /* 0x84E8-0x84EF */ + 0x94a6,0x6b8b,0x58f3,0x0000,0x6c29,0x0000,0x51d1,0x0000, /* 0x84E8-0x84EF */ 0x6da1,0x6c64,0x6d4b,0x6d51,0x6da3,0x65e0,0x72b9,0x82cf, /* 0x84F0-0x84F7 */ - 0x753b,0x75c9,0x53d1,0x76d7,0x781a,0x79c6,0x7a97,0x0000, /* 0x84F8-0x84FF */ + 0x753b,0x75c9,0x53d1,0x76d7,0x781a,0x79c6,0x0000,0x0000, /* 0x84F8-0x84FF */ /* codebase=0x8540 rawbase=0x0380 */ 0x7b14,0x7b0b,0x7ede,0x7ed3,0x7ed2,0x7edd,0x4e1d,0x7edc, /* 0x8540-0x8547 */ 0x7ed9,0x7eda,0x7ed6,0x7edb,0x8083,0x80be,0x80c0,0x534e, /* 0x8548-0x854F */ @@ -3569,18 +3569,18 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x0000,0x961f,0x9636,0x9633,0x97e7,0x9879,0x987a,0x987b, /* 0x85A0-0x85A7 */ 0x996a,0x996d,0x9968,0x996e,0x996c,0x51af,0x9a6d,0x4e71, /* 0x85A8-0x85AF */ 0x503a,0x4f20,0x4ec5,0x503e,0x4f24,0x506c,0x94f2,0x52bf, /* 0x85B0-0x85B7 */ - 0x79ef,0x6c47,0x5417,0x545c,0x545b,0x56ed,0x5706,0x6d82, /* 0x85B8-0x85BF */ + 0x79ef,0x6c47,0x5417,0x545c,0x545b,0x56ed,0x5706,0x0000, /* 0x85B8-0x85BF */ /* codebase=0x85c0 rawbase=0x0400 */ 0x5757,0x575e,0x57d8,0x8314,0x5965,0x5988,0x7231,0x5ffe, /* 0x85C0-0x85C7 */ - 0x6006,0x607a,0x635f,0x62a2,0x6363,0x6784,0x6656,0x6655, /* 0x85C8-0x85CF */ - 0x65f8,0x4f1a,0x4e1a,0x6781,0x6768,0x6862,0x67ab,0x5c81, /* 0x85D0-0x85D7 */ - 0x6c9f,0x706d,0x6e7f,0x6ed1,0x6ca7,0x70e6,0x70bc,0x7080, /* 0x85D8-0x85DF */ - 0x7115,0x7237,0x72ee,0x733e,0x73f2,0x5f53,0x76cf,0x7750, /* 0x85E0-0x85E7 */ - 0x7741,0x96ce,0x788c,0x8282,0x7b15,0x7ca4,0x7ecf,0x7ee2, /* 0x85E8-0x85EF */ - 0x7ed1,0x7ee5,0x7ee6,0x4e49,0x7fa1,0x5723,0x80a0,0x811a, /* 0x85F0-0x85F7 */ - 0x80bf,0x8111,0x8364,0x82c7,0x53f6,0x83b4,0x865e,0x0000, /* 0x85F8-0x85FF */ + 0x6006,0x607a,0x635f,0x62a2,0x6363,0x0000,0x6656,0x6655, /* 0x85C8-0x85CF */ + 0x65f8,0x4f1a,0x4e1a,0x0000,0x6768,0x6862,0x67ab,0x5c81, /* 0x85D0-0x85D7 */ + 0x6c9f,0x706d,0x6e7f,0x0000,0x6ca7,0x70e6,0x70bc,0x7080, /* 0x85D8-0x85DF */ + 0x7115,0x7237,0x72ee,0x0000,0x73f2,0x5f53,0x76cf,0x7750, /* 0x85E0-0x85E7 */ + 0x7741,0x0000,0x0000,0x8282,0x7b15,0x7ca4,0x7ecf,0x7ee2, /* 0x85E8-0x85EF */ + 0x7ed1,0x7ee5,0x7ee6,0x4e49,0x0000,0x0000,0x80a0,0x811a, /* 0x85F0-0x85F7 */ + 0x80bf,0x8111,0x8364,0x82c7,0x53f6,0x83b4,0x0000,0x0000, /* 0x85F8-0x85FF */ /* codebase=0x8640 rawbase=0x0440 */ - 0x864f,0x53f7,0x8708,0x86ac,0x8865,0x88c5,0x8be7,0x8be5, /* 0x8640-0x8647 */ + 0x864f,0x53f7,0x0000,0x86ac,0x8865,0x88c5,0x8be7,0x8be5, /* 0x8640-0x8647 */ 0x8be6,0x8bd5,0x8bd7,0x8bd8,0x8bd9,0x8be3,0x8bda,0x8bdd, /* 0x8648-0x864F */ 0x8bdb,0x8be1,0x8be2,0x8be0,0x8bdf,0x8d3c,0x8d44,0x8d3e, /* 0x8650-0x8657 */ 0x8d3f,0x8d40,0x8d41,0x8d42,0x8d45,0x8f83,0x8f7d,0x8f7c, /* 0x8658-0x865F */ @@ -3603,36 +3603,36 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x7545,0x8363,0x67aa,0x6eda,0x6e0d,0x6c49,0x6ee1,0x6ede, /* 0x86D0-0x86D7 */ 0x6e10,0x6da8,0x6d9f,0x6caa,0x6e14,0x6e17,0x6da4,0x8367, /* 0x86D8-0x86DF */ 0x5c14,0x8366,0x72f1,0x7410,0x739b,0x759f,0x75a1,0x75af, /* 0x86E0-0x86E7 */ - 0x75ea,0x5c3d,0x76d1,0x7855,0x796f,0x7978,0x79cd,0x79f0, /* 0x86E8-0x86EF */ - 0x6d3c,0x7a9d,0x7b3a,0x7b5d,0x7efd,0x7efe,0x7efc,0x7ef0, /* 0x86F0-0x86F7 */ + 0x75ea,0x5c3d,0x76d1,0x7855,0x796f,0x7978,0x0000,0x79f0, /* 0x86E8-0x86EF */ + 0x0000,0x7a9d,0x7b3a,0x7b5d,0x7efd,0x7efe,0x7efc,0x7ef0, /* 0x86F0-0x86F7 */ 0x7eeb,0x7eff,0x7d27,0x7f00,0x7eb2,0x7eee,0x7ef8,0x0000, /* 0x86F8-0x86FF */ /* codebase=0x8740 rawbase=0x0500 */ 0x7ef5,0x7eb6,0x7ef4,0x7eea,0x7f01,0x7ef6,0x7f5a,0x95fb, /* 0x8740-0x8747 */ 0x8385,0x76d6,0x836a,0x82cd,0x8680,0x8bf5,0x8bed,0x8bec, /* 0x8748-0x874F */ 0x8ba4,0x8beb,0x8bef,0x8bf4,0x8bf0,0x8bf2,0x8bf1,0x8bf3, /* 0x8750-0x8757 */ - 0x8bee,0x5bbe,0x8d48,0x8d4a,0x8d75,0x8d76,0x8f85,0x8f84, /* 0x8758-0x875F */ + 0x8bee,0x5bbe,0x8d48,0x8d4a,0x8d75,0x0000,0x8f85,0x8f84, /* 0x8758-0x875F */ 0x8f7b,0x8fdc,0x900a,0x9012,0x94f0,0x94f6,0x94dc,0x94ed, /* 0x8760-0x8767 */ 0x94e2,0x94ec,0x94e8,0x94f5,0x94e3,0x9602,0x95fa,0x95fd, /* 0x8768-0x876F */ 0x9601,0x9600,0x9645,0x9887,0x9886,0x98d2,0x997a,0x997c, /* 0x8770-0x8777 */ - 0x9975,0x9977,0x9a73,0x80ae,0x9ab0,0x9e23,0x9e22,0x0000, /* 0x8778-0x877F */ + 0x9975,0x9977,0x9a73,0x0000,0x0000,0x9e23,0x9e22,0x0000, /* 0x8778-0x877F */ /* codebase=0x8780 rawbase=0x0540 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8780-0x8787 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8788-0x878F */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8790-0x8797 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8798-0x879F */ - 0x0000,0x51e4,0x9f50,0x4ebf,0x4eea,0x4ef7,0x4fac,0x4fa9, /* 0x87A0-0x87A7 */ - 0x4fed,0x5267,0x5218,0x5251,0x523d,0x5389,0x5520,0x5634, /* 0x87A8-0x87AF */ - 0x54d7,0x5618,0x55b7,0x5578,0x53fd,0x589f,0x575f,0x5760, /* 0x87B0-0x87B7 */ + 0x0000,0x51e4,0x9f50,0x4ebf,0x4eea,0x0000,0x4fac,0x4fa9, /* 0x87A0-0x87A7 */ + 0x4fed,0x5267,0x5218,0x5251,0x523d,0x5389,0x5520,0x0000, /* 0x87A8-0x87AF */ + 0x54d7,0x5618,0x55b7,0x5578,0x53fd,0x0000,0x575f,0x5760, /* 0x87B0-0x87B7 */ 0x5815,0x5a34,0x5a75,0x59a9,0x5a07,0x5a06,0x5bbd,0x5ba1, /* 0x87B8-0x87BF */ /* codebase=0x87c0 rawbase=0x0580 */ - 0x5199,0x5c42,0x5d94,0x5e1c,0x5e9f,0x53a8,0x5e99,0x53ae, /* 0x87C0-0x87C7 */ + 0x5199,0x5c42,0x0000,0x5e1c,0x5e9f,0x53a8,0x5e99,0x53ae, /* 0x87C0-0x87C7 */ 0x5e7f,0x5f39,0x5e86,0x8651,0x5fe7,0x6002,0x60af,0x60ee, /* 0x87C8-0x87CF */ - 0x6124,0x6003,0x631a,0x6251,0x635e,0x62e8,0x6320,0x629a, /* 0x87D0-0x87D7 */ - 0x63b8,0x63ff,0x654c,0x6570,0x6682,0x6635,0x6837,0x6869, /* 0x87D8-0x87DF */ + 0x6124,0x6003,0x631a,0x0000,0x635e,0x62e8,0x6320,0x629a, /* 0x87D0-0x87D7 */ + 0x63b8,0x63ff,0x654c,0x6570,0x6682,0x0000,0x6837,0x6869, /* 0x87D8-0x87DF */ 0x67a2,0x6807,0x697c,0x6868,0x4e50,0x679e,0x6b27,0x6b87, /* 0x87E0-0x87E7 */ - 0x6bb4,0x6d46,0x6cfc,0x6d01,0x6d47,0x6e83,0x6da6,0x6da7, /* 0x87E8-0x87EF */ + 0x6bb4,0x6d46,0x6cfc,0x0000,0x6d47,0x6e83,0x6da6,0x6da7, /* 0x87E8-0x87EF */ 0x6d54,0x70ed,0x5956,0x83b9,0x75ae,0x7691,0x76b1,0x76d8, /* 0x87F0-0x87F7 */ - 0x786e,0x7801,0x7a91,0x7a77,0x7f14,0x7ec3,0x7eac,0x0000, /* 0x87F8-0x87FF */ + 0x0000,0x7801,0x7a91,0x7a77,0x7f14,0x7ec3,0x7eac,0x0000, /* 0x87F8-0x87FF */ /* codebase=0x8840 rawbase=0x05c0 */ 0x7f04,0x7f05,0x7f09,0x7f16,0x7f18,0x7ebf,0x7f0e,0x7f13, /* 0x8840-0x8847 */ 0x7f0d,0x7f02,0x7f08,0x7f07,0x9a82,0x7f62,0x80f6,0x80a4, /* 0x8848-0x884F */ @@ -3641,7 +3641,7 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x8c03,0x8c01,0x8bba,0x8be4,0x8c07,0x8bfd,0x8c00,0x7ad6, /* 0x8860-0x8867 */ 0x8d54,0x8d4f,0x8d4b,0x8d31,0x8d26,0x8d4c,0x8d24,0x5356, /* 0x8868-0x886F */ 0x8d50,0x8d28,0x8d53,0x8df5,0x8f89,0x8f86,0x8f8d,0x8f88, /* 0x8870-0x8877 */ - 0x8f87,0x8f6e,0x8f8e,0x8f8b,0x8f8a,0x9002,0x8fc1,0x0000, /* 0x8878-0x887F */ + 0x8f87,0x8f6e,0x8f8e,0x8f8b,0x8f8a,0x0000,0x8fc1,0x0000, /* 0x8878-0x887F */ /* codebase=0x8880 rawbase=0x0600 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8880-0x8887 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8888-0x888F */ @@ -3652,13 +3652,13 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x95fe,0x9605,0x5de9,0x9889,0x988c,0x517b,0x997f,0x9981, /* 0x88B0-0x88B7 */ 0x9a7c,0x9a7b,0x9a77,0x9a76,0x9a7d,0x9a7e,0x9a79,0x9a78, /* 0x88B8-0x88BF */ /* codebase=0x88c0 rawbase=0x0640 */ - 0x9ab7,0x95f9,0x9c7f,0x9c81,0x9e29,0x9e26,0x9eb8,0x9f7f, /* 0x88C0-0x88C7 */ - 0x4fe6,0x50a7,0x4faa,0x5e42,0x5242,0x5428,0x54dd,0x55f3, /* 0x88C8-0x88CF */ + 0x0000,0x95f9,0x9c7f,0x9c81,0x9e29,0x9e26,0x9eb8,0x9f7f, /* 0x88C0-0x88C7 */ + 0x4fe6,0x50a7,0x4faa,0x5e42,0x5242,0x0000,0x54dd,0x55f3, /* 0x88C8-0x88CF */ 0x57a6,0x575b,0x594b,0x8885,0x5b66,0x5bfc,0x5baa,0x51ed, /* 0x88D0-0x88D7 */ - 0x60eb,0x61d4,0x5fc6,0x6218,0x62e5,0x6321,0x631e,0x636e, /* 0x88D8-0x88DF */ + 0x60eb,0x61d4,0x5fc6,0x6218,0x62e5,0x6321,0x631e,0x0000, /* 0x88D8-0x88DF */ 0x63b3,0x62e9,0x6361,0x62c5,0x631d,0x5386,0x6653,0x6654, /* 0x88E0-0x88E7 */ - 0x6619,0x6866,0x6a2a,0x6811,0x692d,0x6865,0x673a,0x6861, /* 0x88E8-0x88EF */ - 0x6dc0,0x6d53,0x6cfd,0x6d4a,0x6ca3,0x6fa6,0x6e11,0x70bd, /* 0x88F0-0x88F7 */ + 0x6619,0x6866,0x6a2a,0x6811,0x692d,0x6865,0x0000,0x6861, /* 0x88E8-0x88EF */ + 0x0000,0x6d53,0x6cfd,0x6d4a,0x6ca3,0x0000,0x6e11,0x70bd, /* 0x88F0-0x88F7 */ 0x70e7,0x706f,0x70eb,0x7116,0x72ec,0x7391,0x74ef,0x0000, /* 0x88F8-0x88FF */ /* codebase=0x8940 rawbase=0x0680 */ 0x7618,0x5362,0x7792,0x7816,0x789b,0x79ef,0x9896,0x7a23, /* 0x8940-0x8947 */ @@ -3677,16 +3677,16 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x0000,0x94a2,0x9521,0x5f55,0x94ee,0x9525,0x9526,0x951f, /* 0x89A0-0x89A7 */ 0x9522,0x9531,0x960e,0x968f,0x9669,0x9759,0x817c,0x988a, /* 0x89A8-0x89AF */ 0x9888,0x9891,0x9894,0x5934,0x9893,0x9890,0x9986,0x996f, /* 0x89B0-0x89B7 */ - 0x9984,0x9985,0x9a87,0x9a88,0x9a86,0x9ab8,0x9abc,0x9c8d, /* 0x89B8-0x89BF */ + 0x9984,0x9985,0x9a87,0x9a88,0x9a86,0x0000,0x0000,0x9c8d, /* 0x89B8-0x89BF */ /* codebase=0x89c0 rawbase=0x0700 */ - 0x9e35,0x9e2a,0x9e2f,0x9e2d,0x9e33,0x9f99,0x9f9f,0x4f18, /* 0x89C0-0x89C7 */ + 0x9e35,0x9e2a,0x9e2f,0x9e2d,0x9e33,0x9f99,0x9f9f,0x0000, /* 0x89C0-0x89C7 */ 0x507f,0x50a8,0x52b1,0x549b,0x5413,0x538b,0x57d9,0x5a74, /* 0x89C8-0x89CF */ 0x5ad4,0x5b37,0x5c34,0x5c66,0x5c7f,0x5d58,0x5e2e,0x5f25, /* 0x89D0-0x89D7 */ 0x5e94,0x6073,0x620f,0x51fb,0x6324,0x62e7,0x62df,0x6401, /* 0x89D8-0x89DF */ 0x655b,0x6bd9,0x66a7,0x6863,0x68c0,0x6867,0x6809,0x6a2f, /* 0x89E0-0x89E7 */ - 0x6b93,0x6be1,0x6cde,0x6ee8,0x6d4e,0x6d9b,0x6ee5,0x6da9, /* 0x89E8-0x89EF */ + 0x6b93,0x6be1,0x0000,0x6ee8,0x6d4e,0x6d9b,0x6ee5,0x6da9, /* 0x89E8-0x89EF */ 0x6f4d,0x8425,0x707f,0x70db,0x70e9,0x5899,0x72de,0x83b7, /* 0x89F0-0x89F7 */ - 0x73af,0x7477,0x75e8,0x7597,0x77eb,0x78fa,0x77f6,0x0000, /* 0x89F8-0x89FF */ + 0x73af,0x7477,0x75e8,0x7597,0x77eb,0x0000,0x77f6,0x0000, /* 0x89F8-0x89FF */ /* codebase=0x8a40 rawbase=0x0740 */ 0x7bd3,0x7caa,0x9546,0x7cc1,0x7f29,0x7ee9,0x7f2a,0x7f15, /* 0x8A40-0x8A47 */ 0x7f27,0x7ef7,0x7f1d,0x603b,0x7eb5,0x7f2b,0x7ea4,0x7f25, /* 0x8A48-0x8A4F */ @@ -3706,11 +3706,11 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x97e9,0x9897,0x98d3,0x9a8b,0x9a8f,0x9c9c,0x9c9b,0x9c94, /* 0x8AB0-0x8AB7 */ 0x9c91,0x9e3f,0x9e3d,0x70b9,0x658b,0x4e1b,0x565c,0x5739, /* 0x8AB8-0x8ABF */ /* codebase=0x8ac0 rawbase=0x07c0 */ - 0x5792,0x5a76,0x61d1,0x6269,0x63b7,0x6270,0x64b5,0x6446, /* 0x8AC0-0x8AC7 */ - 0x64de,0x64b7,0x65ad,0x69df,0x67dc,0x69db,0x67e0,0x6b24, /* 0x8AC8-0x8ACF */ + 0x5792,0x5a76,0x61d1,0x6269,0x63b7,0x0000,0x64b5,0x6446, /* 0x8AC0-0x8AC7 */ + 0x64de,0x64b7,0x65ad,0x69df,0x0000,0x69db,0x67e0,0x6b24, /* 0x8AC8-0x8ACF */ 0x5f52,0x6ba1,0x6cfb,0x6e16,0x6ee4,0x6e0e,0x6e85,0x6d4f, /* 0x8AD0-0x8AD7 */ - 0x70ec,0x7118,0x72b7,0x730e,0x74ee,0x75a0,0x7751,0x7840, /* 0x8AD8-0x8ADF */ - 0x793c,0x7a51,0x79fd,0x7a9c,0x7a8d,0x7bab,0x7c27,0x7baa, /* 0x8AE0-0x8AE7 */ + 0x70ec,0x7118,0x72b7,0x730e,0x0000,0x75a0,0x7751,0x7840, /* 0x8AD8-0x8ADF */ + 0x793c,0x7a51,0x79fd,0x7a9c,0x7a8d,0x7bab,0x0000,0x7baa, /* 0x8AE0-0x8AE7 */ 0x7bd1,0x7b80,0x7cae,0x7ec7,0x7f2e,0x7ed5,0x7f2d,0x7ee3, /* 0x8AE8-0x8AEF */ 0x7f2f,0x7fd8,0x804c,0x8042,0x8110,0x8191,0x65e7,0x8428, /* 0x8AF0-0x8AF7 */ 0x84dd,0x8360,0x86f2,0x8749,0x89d0,0x89de,0x8c1f,0x0000, /* 0x8AF8-0x8AFF */ @@ -3719,9 +3719,9 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x8f6c,0x8f99,0x8fe9,0x533b,0x9171,0x9551,0x9501,0x94a8, /* 0x8B48-0x8B4F */ 0x954d,0x9547,0x9550,0x9552,0x9549,0x9616,0x95ef,0x9617, /* 0x8B50-0x8B57 */ 0x9619,0x6742,0x53cc,0x96cf,0x9e21,0x989d,0x989c,0x9898, /* 0x8B58-0x8B5F */ - 0x989a,0x989b,0x998f,0x998a,0x9988,0x9a91,0x9ac1,0x9ca8, /* 0x8B60-0x8B67 */ + 0x989a,0x989b,0x998f,0x998a,0x9988,0x9a91,0x0000,0x9ca8, /* 0x8B60-0x8B67 */ 0x9ca4,0x9cab,0x9ca7,0x9e43,0x9e45,0x9e44,0x5784,0x575c, /* 0x8B68-0x8B6F */ - 0x5ba0,0x5e9e,0x5e90,0x60e9,0x6000,0x61d2,0x62e2,0x65f7, /* 0x8B70-0x8B77 */ + 0x5ba0,0x5e9e,0x5e90,0x60e9,0x0000,0x61d2,0x62e2,0x65f7, /* 0x8B70-0x8B77 */ 0x6a71,0x691f,0x6988,0x6a79,0x6f47,0x6fd1,0x6ca5,0x0000, /* 0x8B78-0x8B7F */ /* codebase=0x8b80 rawbase=0x0840 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8B80-0x8B87 */ @@ -3730,7 +3730,7 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8B98-0x8B9F */ 0x0000,0x6fd2,0x6cf8,0x70c1,0x724d,0x728a,0x517d,0x736d, /* 0x8BA0-0x8BA7 */ 0x73ba,0x743c,0x7574,0x762a,0x788d,0x7977,0x7a33,0x7b7e, /* 0x8BA8-0x8BAF */ - 0x8327,0x7ece,0x7ef3,0x7ed8,0x7f57,0x7f34,0x81bb,0x827a, /* 0x8BB0-0x8BB7 */ + 0x0000,0x7ece,0x7ef3,0x7ed8,0x7f57,0x7f34,0x0000,0x827a, /* 0x8BB0-0x8BB7 */ 0x85ae,0x836f,0x8681,0x8747,0x88c6,0x8884,0x8c31,0x8bc6, /* 0x8BB8-0x8BBF */ /* codebase=0x8bc0 rawbase=0x0880 */ 0x8c2d,0x8c32,0x8ba5,0x8c2f,0x8d60,0x8d5e,0x8df7,0x8f9a, /* 0x8BC0-0x8BC7 */ @@ -3738,16 +3738,16 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x9558,0x9556,0x9559,0x9535,0x9542,0x94ff,0x933e,0x5173, /* 0x8BD0-0x8BD7 */ 0x9647,0x96be,0x96fe,0x97ec,0x97f5,0x7c7b,0x98a0,0x98d5, /* 0x8BD8-0x8BDF */ 0x9992,0x9991,0x9a9b,0x9a97,0x9cb8,0x9cb3,0x9cad,0x9cb7, /* 0x8BE0-0x8BE7 */ - 0x9e51,0x9e49,0x9e4a,0x9e4c,0x9e4f,0x4e3d,0x9eb4,0x529d, /* 0x8BE8-0x8BEF */ - 0x5499,0x5624,0x4e25,0x5b9d,0x60ac,0x5fcf,0x62e6,0x6400, /* 0x8BF0-0x8BF7 */ + 0x9e51,0x9e49,0x9e4a,0x9e4c,0x9e4f,0x4e3d,0x0000,0x529d, /* 0x8BE8-0x8BEF */ + 0x5499,0x5624,0x4e25,0x5b9d,0x60ac,0x0000,0x62e6,0x6400, /* 0x8BF0-0x8BF7 */ 0x80e7,0x6987,0x6f9c,0x6f4b,0x7089,0x73d1,0x77ff,0x0000, /* 0x8BF8-0x8BFF */ /* codebase=0x8c40 rawbase=0x08c0 */ 0x783a,0x77fe,0x783e,0x7aa6,0x7ade,0x7b79,0x7bee,0x8fab, /* 0x8C40-0x8C47 */ 0x7f24,0x7ee7,0x7f42,0x80ea,0x8230,0x853c,0x853a,0x82a6, /* 0x8C48-0x8C4F */ - 0x82f9,0x8574,0x869d,0x8934,0x89c9,0x89e6,0x8bae,0x8bd1, /* 0x8C50-0x8C57 */ + 0x0000,0x8574,0x0000,0x8934,0x89c9,0x0000,0x8bae,0x8bd1, /* 0x8C50-0x8C57 */ 0x8c35,0x8d62,0x8d61,0x8db8,0x91ca,0x949f,0x94d9,0x9508, /* 0x8C58-0x8C5F */ 0x9610,0x98d8,0x9976,0x9965,0x9a9e,0x817e,0x9a9a,0x9cc3, /* 0x8C60-0x8C67 */ - 0x9cc5,0x515a,0x9f83,0x9f84,0x4fea,0x55eb,0x556d,0x56a3, /* 0x8C68-0x8C6F */ + 0x9cc5,0x0000,0x9f83,0x9f84,0x4fea,0x55eb,0x556d,0x56a3, /* 0x8C68-0x8C6F */ 0x5c5e,0x60e7,0x6151,0x6444,0x643a,0x6593,0x6a31,0x680f, /* 0x8C70-0x8C77 */ 0x68c2,0x6b7c,0x70c2,0x727a,0x9576,0x748e,0x765e,0x0000, /* 0x8C78-0x8C7F */ /* codebase=0x8c80 rawbase=0x0900 */ @@ -3767,15 +3767,15 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x8e2f,0x8e2c,0x8f94,0x90e6,0x94f8,0x9274,0x9701,0x9791, /* 0x8CE0-0x8CE7 */ 0x7e6e,0x98a4,0x9a84,0x9a81,0x9cd6,0x9ca2,0x9cd4,0x9cd7, /* 0x8CE8-0x8CEF */ 0x9e67,0x9e25,0x9f39,0x9f89,0x9f8a,0x9f9a,0x604b,0x631b, /* 0x8CF0-0x8CF7 */ - 0x6405,0x74d2,0x7a83,0x7f28,0x81e2,0x841d,0x86ca,0x0000, /* 0x8CF8-0x8CFF */ + 0x6405,0x74d2,0x7a83,0x7f28,0x0000,0x841d,0x86ca,0x0000, /* 0x8CF8-0x8CFF */ /* codebase=0x8d40 rawbase=0x0980 */ 0x53d8,0x9026,0x903b,0x9573,0x94c4,0x9765,0x663e,0x990d, /* 0x8D40-0x8D47 */ - 0x60ca,0x9a7f,0x9a8c,0x9ad3,0x9ad1,0x9cdd,0x9cde,0x9cdc, /* 0x8D48-0x8D4F */ - 0x9e36,0x5631,0x575d,0x63fd,0x762b,0x766b,0x7f81,0x8695, /* 0x8D50-0x8D57 */ + 0x0000,0x9a7f,0x9a8c,0x0000,0x0000,0x9cdd,0x9cde,0x9cdc, /* 0x8D48-0x8D4F */ + 0x9e36,0x5631,0x575d,0x63fd,0x762b,0x766b,0x7f81,0x0000, /* 0x8D50-0x8D57 */ 0x8ba9,0x8c17,0x8c36,0x8273,0x8d63,0x917f,0x96f3,0x7075, /* 0x8D58-0x8D5F */ 0x972d,0x98a6,0x9aa4,0x9b13,0x9b47,0x9c8e,0x9e70,0x9e6d, /* 0x8D60-0x8D67 */ 0x7877,0x76d0,0x9ccc,0x9f8c,0x9f8b,0x5385,0x6984,0x6e7e, /* 0x8D68-0x8D6F */ - 0x7bf1,0x7ba9,0x86ee,0x89c2,0x8e51,0x8845,0x94a5,0x9885, /* 0x8D70-0x8D77 */ + 0x0000,0x7ba9,0x86ee,0x89c2,0x8e51,0x8845,0x94a5,0x9885, /* 0x8D70-0x8D77 */ 0x998b,0x9acb,0x9ec9,0x6ee6,0x77a9,0x954a,0x97af,0x0000, /* 0x8D78-0x8D7F */ /* codebase=0x8d80 rawbase=0x09c0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8D80-0x8D87 */ @@ -3784,21 +3784,21 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8D98-0x8D9F */ 0x0000,0x9a74,0x9aa5,0x7f06,0x8c20,0x8e8f,0x917d,0x94bb, /* 0x8DA0-0x8DA7 */ 0x92ae,0x9523,0x9cc4,0x9c88,0x9ee9,0x51ff,0x9e66,0x9a8a, /* 0x8DA8-0x8DAF */ - 0x9e73,0x9e3e,0x94ba,0x4ec2,0x864d,0x6b92,0x57a7,0x577b, /* 0x8DB0-0x8DB7 */ - 0x620b,0x4fe3,0x522d,0x538d,0x5459,0x537a,0x7ea8,0x8307, /* 0x8DB8-0x8DBF */ + 0x9e73,0x9e3e,0x94ba,0x0000,0x0000,0x6b92,0x57a7,0x0000, /* 0x8DB0-0x8DB7 */ + 0x620b,0x4fe3,0x522d,0x538d,0x5459,0x537a,0x7ea8,0x0000, /* 0x8DB8-0x8DBF */ /* codebase=0x8dc0 rawbase=0x0a00 */ - 0x9487,0x9486,0x5457,0x5f2a,0x7953,0x7ebe,0x90cf,0x948c, /* 0x8DC0-0x8DC7 */ + 0x9487,0x9486,0x5457,0x5f2a,0x0000,0x7ebe,0x90cf,0x948c, /* 0x8DC0-0x8DC7 */ 0x5250,0x5326,0x56f5,0x57ad,0x5a05,0x5cbd,0x5d03,0x6d9e, /* 0x8DC8-0x8DCF */ 0x6e0c,0x70c3,0x7726,0x7ec0,0x7ed0,0x80eb,0x948e,0x9490, /* 0x8DD0-0x8DD7 */ 0x9495,0x948d,0x95eb,0x59ab,0x5d5b,0x607d,0x6860,0x67a8, /* 0x8DD8-0x8DDF */ - 0x6ca9,0x6d48,0x7572,0x7817,0x7ed7,0x83dd,0x89c7,0x8bb5, /* 0x8DE0-0x8DE7 */ - 0x8bce,0x8bd2,0x8d36,0x8d33,0x8f7a,0x8f75,0x8f78,0x902f, /* 0x8DE8-0x8DEF */ - 0x90d3,0x9104,0x94ab,0x94ac,0x949b,0x94af,0x94ad,0x94aa, /* 0x8DF0-0x8DF7 */ - 0x95f6,0x9667,0x9878,0x996b,0x9ef9,0x4f1b,0x507b,0x0000, /* 0x8DF8-0x8DFF */ + 0x6ca9,0x6d48,0x7572,0x7817,0x7ed7,0x0000,0x89c7,0x8bb5, /* 0x8DE0-0x8DE7 */ + 0x8bce,0x8bd2,0x8d36,0x8d33,0x8f7a,0x8f75,0x8f78,0x0000, /* 0x8DE8-0x8DEF */ + 0x90d3,0x0000,0x94ab,0x94ac,0x949b,0x94af,0x94ad,0x94aa, /* 0x8DF0-0x8DF7 */ + 0x95f6,0x9667,0x9878,0x996b,0x0000,0x4f1b,0x507b,0x0000, /* 0x8DF8-0x8DFF */ /* codebase=0x8e40 rawbase=0x0a40 */ - 0x4f65,0x5522,0x57b2,0x5def,0x5fad,0x709c,0x8315,0x72f2, /* 0x8E40-0x8E47 */ + 0x4f65,0x5522,0x57b2,0x5def,0x0000,0x709c,0x8315,0x72f2, /* 0x8E40-0x8E47 */ 0x73ae,0x7ee8,0x7ee0,0x7ee1,0x7f9f,0x836d,0x86f1,0x8bd3, /* 0x8E48-0x8E4F */ - 0x8bd6,0x8be9,0x8bd4,0x8bdc,0x8d91,0x8f82,0x8f81,0x90ac, /* 0x8E50-0x8E57 */ + 0x8bd6,0x8be9,0x8bd4,0x8bdc,0x0000,0x8f82,0x8f81,0x90ac, /* 0x8E50-0x8E57 */ 0x94ca,0x94c8,0x94b0,0x94b2,0x94b6,0x950d,0x94cc,0x94bd, /* 0x8E58-0x8E5F */ 0x94bc,0x9883,0x9880,0x51eb,0x9efe,0x507e,0x551b,0x5d5d, /* 0x8E60-0x8E67 */ 0x5e3b,0x60ab,0x60ad,0x6004,0x622c,0x6217,0x629f,0x62a0, /* 0x8E68-0x8E6F */ @@ -3812,25 +3812,25 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x0000,0x8bf6,0x8d47,0x94f1,0x94d2,0x94d1,0x94d5,0x94df, /* 0x8EA0-0x8EA7 */ 0x94eb,0x94ef,0x94ea,0x94f7,0x94d6,0x94e5,0x98d1,0x523f, /* 0x8EA8-0x8EAF */ 0x52a2,0x54d3,0x5452,0x5d02,0x5ce4,0x5e91,0x6126,0x6322, /* 0x8EB0-0x8EB7 */ - 0x6920,0x6bf5,0x988d,0x6d9d,0x6f62,0x6da0,0x6ed7,0x740f, /* 0x8EB8-0x8EBF */ + 0x6920,0x6bf5,0x988d,0x6d9d,0x0000,0x6da0,0x6ed7,0x740f, /* 0x8EB8-0x8EBF */ /* codebase=0x8ec0 rawbase=0x0ac0 */ - 0x7481,0x7617,0x7f03,0x7f17,0x7f0c,0x7f0f,0x7f11,0x835c, /* 0x8EC0-0x8EC7 */ + 0x0000,0x7617,0x7f03,0x7f17,0x7f0c,0x7f0f,0x7f11,0x835c, /* 0x8EC0-0x8EC7 */ 0x848c,0x8311,0x82c1,0x8bf9,0x8bfc,0x8c02,0x8d55,0x90f8, /* 0x8EC8-0x8ECF */ 0x9512,0x94d7,0x94fd,0x9513,0x950a,0x94e4,0x9506,0x9507, /* 0x8ED0-0x8ED7 */ 0x9514,0x9606,0x9603,0x9753,0x988f,0x997d,0x9a75,0x9a80, /* 0x8ED8-0x8EDF */ 0x9c82,0x9e28,0x54d2,0x54d5,0x54d9,0x5ad2,0x5cc4,0x603f, /* 0x8EE0-0x8EE7 */ - 0x6b9a,0x6d4d,0x70e8,0x7303,0x72ef,0x789c,0x7aad,0x7e17, /* 0x8EE8-0x8EEF */ + 0x6b9a,0x6d4d,0x70e8,0x7303,0x72ef,0x789c,0x7aad,0x0000, /* 0x8EE8-0x8EEF */ 0x7f1b,0x8487,0x8368,0x8489,0x835e,0x83b8,0x8297,0x86f3, /* 0x8EF0-0x8EF7 */ 0x8be8,0x8c11,0x8c14,0x8c1d,0x90d0,0x9529,0x952c,0x0000, /* 0x8EF8-0x8EFF */ /* codebase=0x8f40 rawbase=0x0b00 */ 0x9516,0x9517,0x94fc,0x951b,0x9515,0x951e,0x9494,0x960f, /* 0x8F40-0x8F47 */ 0x9608,0x9609,0x960a,0x960c,0x960d,0x9e32,0x9e31,0x54dc, /* 0x8F48-0x8F4F */ - 0x5e31,0x6079,0x6448,0xe3c1,0x6cf6,0x7315,0x7513,0x7605, /* 0x8F50-0x8F57 */ - 0x75eb,0x7857,0x7ba6,0x7b5a,0x7ce8,0x7f21,0x8027,0x835f, /* 0x8F58-0x8F5F */ + 0x5e31,0x6079,0x6448,0xe3c1,0x6cf6,0x7315,0x0000,0x7605, /* 0x8F50-0x8F57 */ + 0x75eb,0x7857,0x7ba6,0x7b5a,0x0000,0x7f21,0x8027,0x835f, /* 0x8F58-0x8F5F */ 0x83b6,0x86f0,0x88e2,0x89cf,0x8c21,0x8bcc,0x8c25,0x8dc4, /* 0x8F60-0x8F67 */ 0x9538,0x9534,0x94e1,0x9536,0x9612,0x9967,0x9c92,0x9c95, /* 0x8F68-0x8F6F */ 0x9e38,0x9e39,0x9e3a,0x9f80,0x603c,0x6445,0x64b8,0x6cfa, /* 0x8F70-0x8F77 */ - 0x7596,0x7f0b,0x8069,0x8369,0x87e5,0x866e,0x8bb4,0x0000, /* 0x8F78-0x8F7F */ + 0x7596,0x7f0b,0x8069,0x8369,0x0000,0x0000,0x8bb4,0x0000, /* 0x8F78-0x8F7F */ /* codebase=0x8f80 rawbase=0x0b40 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8F80-0x8F87 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x8F88-0x8F8F */ @@ -3843,8 +3843,8 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { /* codebase=0x8fc0 rawbase=0x0b80 */ 0x7f33,0x7f74,0x8223,0x86cf,0x867f,0x88e3,0x89d1,0x89ef, /* 0x8FC0-0x8FC7 */ 0x8c2e,0x955b,0x955f,0x956a,0x9546,0x94e9,0x97eb,0x98a1, /* 0x8FC8-0x8FCF */ - 0x9990,0x9ac2,0x9cb5,0x9cb6,0x9cbb,0x9cb1,0x9e4e,0x9e2b, /* 0x8FD0-0x8FD7 */ - 0x9efc,0x55be,0x6484,0x680a,0x67a5,0x680c,0x7f31,0x804d, /* 0x8FD8-0x8FDF */ + 0x9990,0x0000,0x9cb5,0x9cb6,0x9cbb,0x9cb1,0x9e4e,0x9e2b, /* 0x8FD0-0x8FD7 */ + 0x0000,0x55be,0x6484,0x680a,0x67a5,0x680c,0x7f31,0x804d, /* 0x8FD8-0x8FDF */ 0x830f,0x82c8,0x8572,0x86f4,0x877e,0x94f4,0x9566,0x9568, /* 0x8FE0-0x8FE7 */ 0x9561,0x9563,0x9544,0x956b,0x94e7,0x9564,0x94f9,0x961a, /* 0x8FE8-0x8FEF */ 0x989f,0x9994,0x9a7a,0x9a9d,0x9a9f,0x9a98,0x9e57,0x9e5a, /* 0x8FF0-0x8FF7 */ @@ -3852,7 +3852,7 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { /* codebase=0x9040 rawbase=0x0bc0 */ 0x6989,0x6ee0,0x783b,0x7c9d,0x7ea9,0x7f2c,0x8539,0x8d46, /* 0x9040-0x9047 */ 0x9571,0x95fc,0x98d9,0x9aa2,0x9a96,0x9a9c,0x9ca5,0x9cce, /* 0x9048-0x904F */ - 0x9cd0,0x9e63,0x9e58,0x9e7e,0x5181,0x5a08,0x7055,0x6512, /* 0x9050-0x9057 */ + 0x9cd0,0x9e63,0x9e58,0x9e7e,0x5181,0x5a08,0x0000,0x6512, /* 0x9050-0x9057 */ 0x763f,0x7ba8,0x7c74,0x823b,0x89cc,0x8df9,0x8dde,0x8f79, /* 0x9058-0x905F */ 0x9554,0x956c,0x9aa3,0x9a85,0x9cd5,0x9ca3,0x9ca6,0x9e68, /* 0x9060-0x9067 */ 0x9e37,0x9f9b,0x683e,0x6924,0x84e0,0x96e0,0x8f73,0x9cdf, /* 0x9068-0x906F */ @@ -3864,8 +3864,8 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9090-0x9097 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9098-0x909F */ 0x0000,0x9567,0x9c9a,0x8db1,0x8e9c,0x917e,0x8c33,0x989e, /* 0x90A0-0x90A7 */ - 0x98a7,0x9aa7,0x9e2c,0x6206,0x9604,0x9ca1,0x9e42,0x79b8, /* 0x90A8-0x90AF */ - 0x62d4,0x8dcb,0x73d0,0x5bab,0x62d0,0x6bc1,0x51cf,0x7984, /* 0x90B0-0x90B7 */ + 0x98a7,0x9aa7,0x9e2c,0x6206,0x9604,0x9ca1,0x9e42,0x0000, /* 0x90A8-0x90AF */ + 0x0000,0x0000,0x73d0,0x5bab,0x0000,0x6bc1,0x51cf,0x7984, /* 0x90B0-0x90B7 */ 0x5415,0x6f5c,0x889c,0x90e7,0x5179,0x6238,0x629b,0x6327, /* 0x90B8-0x90BF */ /* codebase=0x90c0 rawbase=0x0c40 */ 0x63bb,0x63de,0x63fa,0x6491,0x64c0,0x64e1,0x64f6,0x6505, /* 0x90C0-0x90C7 */ @@ -3896,76 +3896,76 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x9115,0x91d6,0x91db,0x91de,0x91e1,0x91e5,0x91f6,0x91fc, /* 0x91B8-0x91BF */ /* codebase=0x91c0 rawbase=0x0d00 */ 0x9229,0x922c,0xff07,0x9259,0x9277,0x92ed,0x933a,0xe54d, /* 0x91C0-0x91C7 */ - 0xe54e,0x722b,0x5182,0x5196,0x4e37,0x516b,0x513f,0xe555, /* 0x91C8-0x91CF */ - 0xe556,0x6729,0x6c3a,0x5382,0x7592,0x8080,0x8864,0x4e06, /* 0x91D0-0x91D7 */ - 0xe55e,0xe55f,0xe560,0x2e97,0x52f9,0x5315,0x2021,0xe565, /* 0x91D8-0x91DF */ - 0x3404,0xe567,0xe568,0xe569,0xe56a,0xe56b,0x51f5,0xe56d, /* 0x91E0-0x91E7 */ - 0x5c6e,0xe56f,0x56d7,0x4ea0,0x51ab,0x2e80,0x69c7,0xe575, /* 0x91E8-0x91EF */ + 0xe54e,0x722b,0x5182,0x5196,0x4e37,0x0000,0x0000,0xe555, /* 0x91C8-0x91CF */ + 0xe556,0x6729,0x6c3a,0x0000,0x7592,0x8080,0x8864,0x4e06, /* 0x91D0-0x91D7 */ + 0xe55e,0xe55f,0xe560,0x2e97,0x52f9,0x0000,0x2021,0xe565, /* 0x91D8-0x91DF */ + 0x3404,0xe567,0xe568,0xe569,0xe56a,0xe56b,0x0000,0xe56d, /* 0x91E0-0x91E7 */ + 0x0000,0xe56f,0x0000,0x4ea0,0x51ab,0x2e80,0x69c7,0xe575, /* 0x91E8-0x91EF */ 0x254e,0x25d8,0x25d9,0x2642,0x25b6,0x25c4,0x2195,0x203c, /* 0x91F0-0x91F7 */ 0x00b6,0x2200,0x21a8,0x2194,0x2302,0xe583,0xe584,0x0000, /* 0x91F8-0x91FF */ /* codebase=0x9240 rawbase=0x0d40 */ - 0x4e9c,0x60aa,0x5727,0x56f2,0x533b,0x58f1,0x9038,0x96a0, /* 0x9240-0x9247 */ - 0x6804,0x55b6,0x99c5,0x8b01,0x5186,0x7e01,0x5fdc,0x6b27, /* 0x9248-0x924F */ - 0x6bb4,0x685c,0x5965,0x7a4f,0x4eee,0x4fa1,0x753b,0x7070, /* 0x9250-0x9257 */ - 0x4f1a,0x6094,0x6d77,0x7d75,0x58ca,0x61d0,0x62e1,0x6bbb, /* 0x9258-0x925F */ - 0x899a,0x5b66,0x697d,0x559d,0x6e07,0xe5aa,0x5dfb,0x9665, /* 0x9260-0x9267 */ - 0x52e7,0x5bdb,0x6f22,0x95a2,0x6b53,0x89b3,0x6c17,0x5e30, /* 0x9268-0x926F */ - 0x622f,0x72a0,0x8650,0x65e7,0x6025,0x62e0,0x6319,0x865a, /* 0x9270-0x9277 */ - 0x5ce1,0x631f,0x72ed,0x90f7,0x97ff,0x6681,0x52e4,0x0000, /* 0x9278-0x927F */ + 0x4e9c,0x60aa,0x5727,0x56f2,0x533b,0x58f1,0x0000,0x96a0, /* 0x9240-0x9247 */ + 0x6804,0x55b6,0x99c5,0x0000,0x5186,0x7e01,0x5fdc,0x6b27, /* 0x9248-0x924F */ + 0x6bb4,0x685c,0x5965,0x7a4f,0x4eee,0x4fa1,0x753b,0x0000, /* 0x9250-0x9257 */ + 0x4f1a,0x0000,0x0000,0x7d75,0x58ca,0x61d0,0x62e1,0x6bbb, /* 0x9258-0x925F */ + 0x899a,0x5b66,0x697d,0x0000,0x6e07,0xe5aa,0x5dfb,0x9665, /* 0x9260-0x9267 */ + 0x52e7,0x5bdb,0x0000,0x95a2,0x6b53,0x89b3,0x6c17,0x5e30, /* 0x9268-0x926F */ + 0x622f,0x72a0,0x0000,0x65e7,0x0000,0x62e0,0x6319,0x865a, /* 0x9270-0x9277 */ + 0x5ce1,0x631f,0x72ed,0x90f7,0x0000,0x6681,0x0000,0x0000, /* 0x9278-0x927F */ /* codebase=0x9280 rawbase=0x0d80 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9280-0x9287 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9288-0x928F */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9290-0x9297 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9298-0x929F */ - 0x0000,0x8b39,0x533a,0x99c6,0x52f2,0xe5c8,0x5f84,0x830e, /* 0x92A0-0x92A7 */ + 0x0000,0x0000,0x533a,0x99c6,0x52f2,0xe5c8,0x5f84,0x830e, /* 0x92A0-0x92A7 */ 0x6075,0x63b2,0x6e13,0x7d4c,0x86cd,0x8efd,0x7d99,0x9d8f, /* 0x92A8-0x92AF */ 0x6483,0x770c,0x5039,0x5263,0x967a,0x570f,0x691c,0x6a29, /* 0x92B0-0x92B7 */ - 0x9855,0x9a13,0x53b3,0x5449,0x5a2f,0x8aa4,0x5e83,0x6e2f, /* 0x92B8-0x92BF */ + 0x9855,0x9a13,0x53b3,0x5449,0x5a2f,0x0000,0x5e83,0x0000, /* 0x92B8-0x92BF */ /* codebase=0x92c0 rawbase=0x0dc0 */ - 0x9271,0x53f7,0x56fd,0x9ed2,0x7a40,0x7815,0x6e08,0x658e, /* 0x92C0-0x92C7 */ + 0x9271,0x53f7,0x56fd,0x9ed2,0x0000,0x7815,0x6e08,0x658e, /* 0x92C0-0x92C7 */ 0x6b73,0x5264,0x96d1,0x53c2,0x685f,0x60e8,0x8cdb,0x6b8b, /* 0x92C8-0x92CF */ - 0x6b6f,0x5150,0x8f9e,0x6e7f,0x5b9f,0x5199,0x820e,0x6368, /* 0x92D0-0x92D7 */ + 0x6b6f,0x5150,0x8f9e,0x6e7f,0x5b9f,0x5199,0x820e,0x0000, /* 0x92D0-0x92D7 */ 0x91c8,0x5bff,0x53ce,0x8846,0x5f93,0x6e0b,0x7363,0x7e26, /* 0x92D8-0x92DF */ 0x7c9b,0x51e6,0x5c06,0x79f0,0x6e09,0x713c,0x5968,0x6761, /* 0x92E0-0x92E7 */ 0x72b6,0x4e57,0x6d44,0x5270,0x7573,0x7e04,0x58cc,0x5b22, /* 0x92E8-0x92EF */ - 0x8b72,0x91b8,0x89e6,0x5631,0x5bdd,0x5c3d,0x56f3,0x7c8b, /* 0x92F0-0x92F7 */ - 0x9154,0x7a42,0x968f,0x9ac4,0x67a2,0x6570,0x636e,0x0000, /* 0x92F8-0x92FF */ + 0x8b72,0x91b8,0x0000,0x5631,0x5bdd,0x5c3d,0x56f3,0x7c8b, /* 0x92F0-0x92F7 */ + 0x9154,0x7a42,0x968f,0x9ac4,0x67a2,0x6570,0x0000,0x0000, /* 0x92F8-0x92FF */ /* codebase=0x9340 rawbase=0x0e00 */ 0x702c,0x58f0,0x6589,0x9759,0x7a83,0x6442,0x7d76,0x5c02, /* 0x9340-0x9347 */ - 0x6d45,0x6226,0x8df5,0x92ad,0x6f5c,0x9077,0x9078,0x7e4a, /* 0x9348-0x934F */ + 0x6d45,0x6226,0x8df5,0x92ad,0x6f5c,0x0000,0x0000,0x7e4a, /* 0x9348-0x934F */ 0x7985,0x758e,0x58ee,0x4e89,0x8358,0x635c,0x633f,0x5de3, /* 0x9350-0x9357 */ - 0x7a93,0x88c5,0x50e7,0x5c64,0x7dcf,0x9a12,0x5897,0x618e, /* 0x9358-0x935F */ - 0x8535,0x8d08,0x81d3,0x5c5e,0x7d9a,0x5815,0x5bfe,0x5e2f, /* 0x9360-0x9367 */ - 0x6ede,0x6edd,0x629e,0x6ca2,0x6fef,0x5358,0x5606,0x56e3, /* 0x9368-0x936F */ + 0x7a93,0x88c5,0x0000,0x0000,0x7dcf,0x9a12,0x5897,0x0000, /* 0x9358-0x935F */ + 0x8535,0x0000,0x81d3,0x5c5e,0x7d9a,0x5815,0x5bfe,0x5e2f, /* 0x9360-0x9367 */ + 0x6ede,0x6edd,0x629e,0x6ca2,0x0000,0x5358,0x0000,0x56e3, /* 0x9368-0x936F */ 0x65ad,0x5f3e,0x9045,0x663c,0x92f3,0x5e81,0x5fb4,0x8074, /* 0x9370-0x9377 */ - 0x61f2,0x585a,0x9013,0x9244,0x70b9,0x8ee2,0x4f1d,0x0000, /* 0x9378-0x937F */ + 0x0000,0x0000,0x9013,0x9244,0x70b9,0x8ee2,0x0000,0x0000, /* 0x9378-0x937F */ /* codebase=0x9380 rawbase=0x0e40 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9380-0x9387 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9388-0x938F */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9390-0x9397 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9398-0x939F */ - 0x0000,0x96fb,0x706f,0x5f53,0x515a,0x76d7,0x7a32,0x95d8, /* 0x93A0-0x93A7 */ - 0x5fb3,0x6bd2,0x72ec,0x8aad,0x5c4a,0x96e3,0x5f10,0x60a9, /* 0x93A8-0x93AF */ - 0x8133,0x62dd,0x5ec3,0x58f2,0x6885,0x535a,0x8584,0x9ea6, /* 0x93B0-0x93B7 */ - 0x7e1b,0x767a,0x9aea,0x629c,0x6d5c,0x6d5c,0x654f,0x6577, /* 0x93B8-0x93BF */ + 0x0000,0x0000,0x706f,0x5f53,0x0000,0x76d7,0x7a32,0x95d8, /* 0x93A0-0x93A7 */ + 0x5fb3,0x0000,0x72ec,0x8aad,0x5c4a,0x0000,0x5f10,0x60a9, /* 0x93A8-0x93AF */ + 0x8133,0x62dd,0x5ec3,0x58f2,0x0000,0x0000,0x0000,0x9ea6, /* 0x93B0-0x93B7 */ + 0x0000,0x767a,0x9aea,0x629c,0x6d5c,0x6d5c,0x0000,0x0000, /* 0x93B8-0x93BF */ /* codebase=0x93c0 rawbase=0x0e80 */ - 0x4fae,0x6255,0x4ecf,0x8fba,0x5909,0x6b69,0x8217,0x7c3f, /* 0x93C0-0x93C7 */ - 0x5305,0x5b9d,0x62b1,0x6ce1,0x80de,0x7832,0x8c4a,0x98fd, /* 0x93C8-0x93CF */ - 0x58a8,0x6bce,0x6e80,0x8108,0x9ed9,0x8a33,0x85ac,0x8e8d, /* 0x93D0-0x93D7 */ - 0x4e0e,0x8a89,0x6447,0x69d8,0x8b21,0x66dc,0x6765,0x983c, /* 0x93D8-0x93DF */ - 0x4e71,0x89a7,0x7adc,0x9686,0x65c5,0x4e21,0x731f,0x7dd1, /* 0x93E0-0x93E7 */ + 0x0000,0x6255,0x4ecf,0x8fba,0x5909,0x6b69,0x8217,0x0000, /* 0x93C0-0x93C7 */ + 0x0000,0x5b9d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x93C8-0x93CF */ + 0x0000,0x6bce,0x6e80,0x0000,0x9ed9,0x8a33,0x85ac,0x0000, /* 0x93D0-0x93D7 */ + 0x0000,0x8a89,0x6447,0x69d8,0x8b21,0x0000,0x6765,0x983c, /* 0x93D8-0x93DF */ + 0x4e71,0x89a7,0x7adc,0x0000,0x0000,0x4e21,0x731f,0x7dd1, /* 0x93E0-0x93E7 */ 0x6d99,0x5841,0x793c,0x52b1,0x623b,0x970a,0x9f62,0x66a6, /* 0x93E8-0x93EF */ - 0x6b74,0x604b,0x7df4,0x932c,0x7089,0x52b4,0x697c,0x9332, /* 0x93F0-0x93F7 */ + 0x6b74,0x604b,0x0000,0x932c,0x7089,0x52b4,0x697c,0x9332, /* 0x93F0-0x93F7 */ 0x6e7e,0x5f25,0x4e80,0x66fd,0x59c9,0x5b8d,0x5d8b,0x0000, /* 0x93F8-0x93FF */ /* codebase=0x9440 rawbase=0x0ec0 */ 0x6a2b,0x691b,0x55b0,0x7c82,0x8fbc,0x698a,0x54b2,0x9d2b, /* 0x9440-0x9447 */ - 0x96eb,0x6919,0x63c3,0x99c4,0x51e7,0x6802,0x8fbb,0x50cd, /* 0x9448-0x944F */ + 0x96eb,0x6919,0x0000,0x99c4,0x51e7,0x6802,0x8fbb,0x50cd, /* 0x9448-0x944F */ 0x5ce0,0x6803,0x51ea,0x5302,0x7872,0x7551,0x7560,0x567a, /* 0x9450-0x9457 */ 0x92f2,0x5840,0x67fe,0x4fe3,0x6762,0x7c7e,0x5301,0x4fe4, /* 0x9458-0x945F */ 0x4fe5,0x51e9,0x53fa,0x54d8,0x56ce,0x5726,0x5737,0x5738, /* 0x9460-0x9467 */ 0x5788,0x57b3,0x57aa,0x57b0,0x57d6,0x5870,0x58b9,0x58d7, /* 0x9468-0x946F */ 0x5c76,0x5cbc,0x5cc5,0x5cbe,0x5d76,0x5f16,0x603a,0x63b5, /* 0x9470-0x9477 */ - 0x6741,0x6763,0x67a1,0x68ba,0x6925,0x6928,0x6a7a,0x0000, /* 0x9478-0x947F */ + 0x6741,0x6763,0x67a1,0x68ba,0x0000,0x6928,0x6a7a,0x0000, /* 0x9478-0x947F */ /* codebase=0x9480 rawbase=0x0f00 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9480-0x9487 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9488-0x948F */ @@ -3973,25 +3973,25 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9498-0x949F */ 0x0000,0x6923,0x6921,0x697e,0x6981,0x69dd,0x6a2e,0x6a72, /* 0x94A0-0x94A7 */ 0x6b1f,0x6bdf,0x6e15,0x7195,0x74e7,0x74f2,0x74f0,0x74f1, /* 0x94A8-0x94AF */ - 0x74f8,0x7505,0x7569,0x766a,0x7874,0x7acd,0x7acf,0x7ad5, /* 0x94B0-0x94B7 */ + 0x74f8,0x7505,0x7569,0x0000,0x7874,0x7acd,0x7acf,0x7ad5, /* 0x94B0-0x94B7 */ 0x7ad3,0x7ae1,0x7af0,0x7b02,0x7c13,0x7c17,0x7c90,0x7cad, /* 0x94B8-0x94BF */ /* codebase=0x94c0 rawbase=0x0f40 */ 0x7cc0,0x7cd8,0x7d9b,0x7e05,0x7e67,0x7e83,0x7e90,0x81a4, /* 0x94C0-0x94C7 */ 0x825d,0x8422,0x84d9,0x8630,0x86ab,0x86ef,0x88b0,0x88c3, /* 0x94C8-0x94CF */ 0x88c4,0x8904,0xe72f,0x8ebe,0x8ec8,0x8f4c,0x8fb7,0x8fda, /* 0x94D0-0x94D7 */ - 0x9027,0x9056,0x9335,0x933b,0x93b9,0x958a,0x9596,0x9779, /* 0x94D8-0x94DF */ + 0x9027,0x9056,0x0000,0x933b,0x93b9,0x958a,0x9596,0x9779, /* 0x94D8-0x94DF */ 0x9786,0x9790,0x98aa,0x9b96,0x9b97,0x9bb4,0x9bcf,0x9bd1, /* 0x94E0-0x94E7 */ 0x9bd2,0x9bf2,0x9bf1,0x9c30,0x9c47,0x9c5a,0x9cf0,0x9d46, /* 0x94E8-0x94EF */ - 0x9d64,0x9dab,0x4e44,0x544f,0x6318,0x9bb1,0x9c69,0x9d47, /* 0x94F0-0x94F7 */ + 0x9d64,0x9dab,0x4e44,0x0000,0x6318,0x9bb1,0x9c69,0x9d47, /* 0x94F0-0x94F7 */ 0x9d65,0x9c2f,0x9ebf,0x51b4,0x546a,0x67a0,0x9b8e,0x0000, /* 0x94F8-0x94FF */ /* codebase=0x9540 rawbase=0x0f80 */ - 0x90a8,0x51b2,0x362d,0x62c5,0x52c5,0x67b1,0x54cd,0x6052, /* 0x9540-0x9547 */ - 0x53c1,0x70f1,0x5803,0x555f,0x920e,0x7740,0x743c,0x714a, /* 0x9548-0x954F */ - 0x6ed9,0x53e0,0x732e,0x88cf,0x788d,0x7fa3,0x7dab,0x8e2a, /* 0x9550-0x9557 */ + 0x90a8,0x51b2,0x362d,0x62c5,0x52c5,0x67b1,0x54cd,0x0000, /* 0x9540-0x9547 */ + 0x53c1,0x70f1,0x5803,0x0000,0x920e,0x7740,0x743c,0x714a, /* 0x9548-0x954F */ + 0x6ed9,0x53e0,0x732e,0x0000,0x788d,0x7fa3,0x7dab,0x8e2a, /* 0x9550-0x9557 */ 0x945b,0x636c,0x5fa7,0x5c05,0x803b,0x5cef,0x39b8,0x7151, /* 0x9558-0x955F */ 0x8ccd,0x97ee,0x5872,0x5a63,0x7f78,0x5d57,0x616f,0x6998, /* 0x9560-0x9567 */ - 0x7d89,0x7cae,0x7db3,0x6f81,0x5afa,0x58bb,0x7255,0x764e, /* 0x9568-0x956F */ - 0x8f2d,0x92b9,0x9d5e,0x9eaf,0x7f47,0x9dc4,0x8d18,0x51b3, /* 0x9570-0x9577 */ + 0x7d89,0x7cae,0x7db3,0x6f81,0x0000,0x0000,0x7255,0x764e, /* 0x9568-0x956F */ + 0x8f2d,0x0000,0x9d5e,0x9eaf,0x7f47,0x9dc4,0x8d18,0x51b3, /* 0x9570-0x9577 */ 0x866c,0x54a4,0x53a6,0x5226,0x6736,0x4e21,0x5374,0x0000, /* 0x9578-0x957F */ /* codebase=0x9580 rawbase=0x0fc0 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9580-0x9587 */ @@ -3999,21 +3999,21 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9590-0x9597 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0x9598-0x959F */ 0x0000,0x5ef9,0x52b9,0x548f,0x5ef8,0x59ac,0x6031,0x7240, /* 0x95A0-0x95A7 */ - 0x8117,0x763b,0x5f0d,0x664b,0x66a8,0x6164,0x634f,0x70df, /* 0x95A8-0x95AF */ - 0x6d24,0x7ca7,0x7cc9,0x53d9,0x654d,0x5742,0x73cf,0x80c6, /* 0x95B0-0x95B7 */ - 0x3551,0x6b35,0x7881,0x53cc,0x732b,0x732a,0x73c9,0x754a, /* 0x95B8-0x95BF */ + 0x8117,0x763b,0x5f0d,0x664b,0x0000,0x6164,0x0000,0x70df, /* 0x95A8-0x95AF */ + 0x6d24,0x0000,0x7cc9,0x53d9,0x654d,0x5742,0x73cf,0x80c6, /* 0x95B0-0x95B7 */ + 0x3551,0x6b35,0x0000,0x53cc,0x732b,0x732a,0x73c9,0x754a, /* 0x95B8-0x95BF */ /* codebase=0x95c0 rawbase=0x1000 */ - 0x59f9,0x71c4,0x750e,0x7ddc,0x99e1,0x89a9,0x6ff6,0x3a57, /* 0x95C0-0x95C7 */ + 0x59f9,0x0000,0x750e,0x7ddc,0x99e1,0x89a9,0x6ff6,0x3a57, /* 0x95C0-0x95C7 */ 0x64ea,0x3bed,0x6ca1,0x6e7c,0x7567,0x5869,0x5869,0x5204, /* 0x95C8-0x95CF */ 0xe7ca,0x6187,0x643a,0x81ef,0xe7ce,0x51b5,0x51d1,0x6c79, /* 0x95D0-0x95D7 */ - 0x591f,0x8ff9,0x98f1,0x6537,0x8109,0x88b4,0x3a2a,0x8ead, /* 0x95D8-0x95DF */ + 0x591f,0x8ff9,0x98f1,0x0000,0x8109,0x88b4,0x3a2a,0x8ead, /* 0x95D8-0x95DF */ 0x7f97,0x9a10,0x7d25,0x6ac8,0x518c,0x5227,0xe7e0,0x811a, /* 0x95E0-0x95E7 */ 0x53a0,0x53a2,0x6c5a,0x6c37,0x8218,0x5586,0x5efb,0x51c9, /* 0x95E8-0x95EF */ 0x78b1,0x9262,0x536d,0x51c3,0xe7ee,0x8471,0x8987,0x976d, /* 0x95F0-0x95F7 */ 0x8b90,0x96a3,0x5efc,0x96b7,0x514e,0x9c10,0x6630,0x0000, /* 0x95F8-0x95FF */ /* codebase=0x9640 rawbase=0x1040 */ 0x9255,0x7808,0x9345,0x9273,0x9369,0xe7fe,0xe7ff,0xe800, /* 0x9640-0x9647 */ - 0xe801,0x91df,0x91da,0x7854,0x7866,0x7888,0x78b6,0x78c7, /* 0x9648-0x964F */ + 0xe801,0x91df,0x0000,0x7854,0x7866,0x7888,0x78b6,0x78c7, /* 0x9648-0x964F */ 0x78d2,0x78d7,0x212b,0x21cb,0x78e4,0x78ee,0x78f0,0x78f1, /* 0x9650-0x9657 */ 0x78f5,0x7932,0x7933,0x7936,0x7958,0x3013,0x7959,0x7971, /* 0x9658-0x965F */ 0x797e,0x7983,0x7986,0x7987,0x7991,0x7999,0x799f,0x79a5, /* 0x9660-0x9667 */ @@ -4028,10 +4028,10 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x0000,0x9176,0x815a,0x82f7,0x544b,0x8132,0x80bd,0x8418, /* 0x96A0-0x96A7 */ 0x915e,0x9170,0x918c,0x8148,0xe843,0x4436,0x8159,0x809f, /* 0x96A8-0x96AF */ 0xe847,0x5549,0x5421,0x54da,0x5432,0x55b9,0x5494,0xe84e, /* 0x96B0-0x96B7 */ - 0x7852,0x7845,0x784c,0xe852,0x84bd,0x841c,0x82c4,0xe856, /* 0x96B8-0x96BF */ + 0x0000,0x0000,0x0000,0xe852,0x84bd,0x841c,0x82c4,0xe856, /* 0x96B8-0x96BF */ /* codebase=0x96c0 rawbase=0x10c0 */ - 0x847b,0x8b2d,0xe859,0x574b,0xe85b,0xe85c,0x5745,0x87ce, /* 0x96C0-0x96C7 */ - 0x5660,0x55ea,0x567b,0x80bc,0xe863,0x78b8,0x6a0c,0x54cc, /* 0x96C8-0x96CF */ + 0x847b,0x8b2d,0xe859,0x0000,0xe85b,0xe85c,0x0000,0x87ce, /* 0x96C0-0x96C7 */ + 0x0000,0x55ea,0x567b,0x80bc,0xe863,0x78b8,0x6a0c,0x54cc, /* 0x96C8-0x96CF */ 0x7bd0,0x7bec,0x7bfa,0x7c15,0x7c1b,0x7c35,0x7c44,0x7c6d, /* 0x96D0-0x96D7 */ 0x7c8e,0x7cb8,0x7cc3,0x7ce6,0x7ced,0x7cf3,0x7cf5,0x7cf9, /* 0x96D8-0x96DF */ 0xe877,0x7cfc,0x7d8b,0x7d97,0x7da4,0x7da8,0x7dcd,0x7dd0, /* 0x96E0-0x96E7 */ @@ -4192,14 +4192,14 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x7414,0x7415,0x7417,0x7419,0x741c,0x741e,0x741f,0x7437, /* 0x9CB0-0x9CB7 */ 0x7438,0x7439,0x7443,0x7445,0x7447,0x7448,0x7449,0x7453, /* 0x9CB8-0x9CBF */ /* codebase=0x9cc0 rawbase=0x1540 */ - 0x7456,0x7465,0x746b,0x746c,0x7474,0x747a,0x7482,0x5382, /* 0x9CC0-0x9CC7 */ + 0x7456,0x7465,0x746b,0x746c,0x7474,0x747a,0x7482,0x0000, /* 0x9CC0-0x9CC7 */ 0x5e7f,0x4e28,0x5e7a,0x5196,0x5b80,0x5369,0x2e87,0xec14, /* 0x9CC8-0x9CCF */ 0x5303,0x2612,0x8279,0x4491,0x2e8c,0x2e8a,0x4e36,0xec1c, /* 0x9CD0-0x9CD7 */ - 0x531a,0xec1e,0xec1f,0x2e95,0xec21,0xec22,0x2514,0x4e5a, /* 0x9CD8-0x9CDF */ + 0x0000,0xec1e,0xec1f,0x2e95,0xec21,0xec22,0x2514,0x4e5a, /* 0x9CD8-0x9CDF */ 0x8fb6,0x5ef4,0x5188,0x4e85,0xec29,0x4e3f,0xec2b,0xec2c, /* 0x9CE0-0x9CE7 */ 0x4e5b,0x53b6,0x8f66,0x7e9f,0x8ba0,0x8d1d,0x9e1f,0x95e8, /* 0x9CE8-0x9CEF */ 0x9485,0x961d,0x624c,0x6c35,0x4ebb,0x5fc4,0x706c,0x2eae, /* 0x9CF0-0x9CF7 */ - 0x53e3,0x6ae2,0x9a3b,0x9a3c,0x9a58,0x9a5c,0x9a63,0x0000, /* 0x9CF8-0x9CFF */ + 0x0000,0x6ae2,0x9a3b,0x9a3c,0x9a58,0x9a5c,0x9a63,0x0000, /* 0x9CF8-0x9CFF */ /* codebase=0x9d40 rawbase=0x1580 */ 0x260e,0x2192,0x2190,0x2191,0x2193,0x21e8,0x21e6,0x21e7, /* 0x9D40-0x9D47 */ 0x21e9,0x21e8,0x21e6,0x21e7,0x21e9,0x261e,0x261c,0x261b, /* 0x9D48-0x9D4F */ @@ -4355,7 +4355,7 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0xff19,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166, /* 0xA2B8-0xA2BF */ /* codebase=0xa2c0 rawbase=0x19c0 */ 0x2167,0x2168,0x2169,0x3021,0x3022,0x3023,0x3024,0x3025, /* 0xA2C0-0xA2C7 */ - 0x3026,0x3027,0x3028,0x3029,0x5341,0x5344,0x5345,0xff21, /* 0xA2C8-0xA2CF */ + 0x3026,0x3027,0x3028,0x3029,0x0000,0x5344,0x0000,0xff21, /* 0xA2C8-0xA2CF */ 0xff22,0xff23,0xff24,0xff25,0xff26,0xff27,0xff28,0xff29, /* 0xA2D0-0xA2D7 */ 0xff2a,0xff2b,0xff2c,0xff2d,0xff2e,0xff2f,0xff30,0xff31, /* 0xA2D8-0xA2DF */ 0xff32,0xff33,0xff34,0xff35,0xff36,0xff37,0xff38,0xff39, /* 0xA2E0-0xA2E7 */ @@ -5329,7 +5329,7 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x4e3f,0x4e85,0x4ea0,0x5182,0x5196,0x51ab,0x52f9,0x5338, /* 0xC6C0-0xC6C7 */ 0x5369,0x53b6,0x590a,0x5b80,0x5ddb,0x5e7a,0x5e7f,0x5ef4, /* 0xC6C8-0xC6CF */ 0x5f50,0x5f61,0x6534,0x65e0,0x7592,0x7676,0x8fb5,0x96b6, /* 0xC6D0-0xC6D7 */ - 0x00a8,0x02c6,0x30fd,0x30fe,0x309d,0x309e,0x3003,0x4edd, /* 0xC6D8-0xC6DF */ + 0x00a8,0x02c6,0x30fd,0x30fe,0x309d,0x309e,0x3003,0x0000, /* 0xC6D8-0xC6DF */ 0x3005,0x3006,0x3007,0x30fc,0xff3b,0xff3d,0x273d,0x3041, /* 0xC6E0-0xC6E7 */ 0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,0x3048,0x3049, /* 0xC6E8-0xC6EF */ 0x304a,0x304b,0x304c,0x304d,0x304e,0x304f,0x3050,0x3051, /* 0xC6F0-0xC6F7 */ @@ -6746,7 +6746,7 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0xe0bd,0xe0be,0xe0bf,0x88c7,0x609e,0x5625,0x7145,0x5af2, /* 0xFB60-0xFB67 */ 0xe0c5,0x528f,0x564f,0x7793,0x8786,0x8e2d,0x81b6,0x35fe, /* 0xFB68-0xFB6F */ 0x71f6,0xe0ce,0x8804,0x9385,0xe0d1,0xe0d2,0x7666,0xe0d4, /* 0xFB70-0xFB77 */ - 0x9c72,0xe0d6,0x62ce,0xe0d8,0x9e96,0x4989,0x7cd3,0x0000, /* 0xFB78-0xFB7F */ + 0x9c72,0xe0d6,0x0000,0xe0d8,0x9e96,0x4989,0x7cd3,0x0000, /* 0xFB78-0xFB7F */ /* codebase=0xfb80 rawbase=0x5c40 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0xFB80-0xFB87 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0xFB88-0xFB8F */ @@ -6757,7 +6757,7 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x460f,0xe0ec,0x98c8,0x9940,0x994d,0x9a0c,0x9ad7,0x9e98, /* 0xFBB0-0xFBB7 */ 0x9f26,0xe0f4,0x4f03,0xe0f6,0x4f39,0x4f32,0x4fab,0x5056, /* 0xFBB8-0xFBBF */ /* codebase=0xfbc0 rawbase=0x5c80 */ - 0xe0fb,0x502e,0x50a6,0x50d9,0x510e,0x50ed,0x5101,0x51f4, /* 0xFBC0-0xFBC7 */ + 0xe0fb,0x502e,0x50a6,0x50d9,0x510e,0x0000,0x5101,0x51f4, /* 0xFBC0-0xFBC7 */ 0x521f,0x5260,0x5257,0x529a,0x52d1,0x52e0,0x52e1,0x51d3, /* 0xFBC8-0xFBCF */ 0x51df,0x7546,0x51fe,0x5332,0x532c,0x5333,0x53ab,0x53aa, /* 0xFBD0-0xFBD7 */ 0x9f8e,0x5469,0x549c,0x53da,0x6aca,0x5573,0xe119,0x35d6, /* 0xFBD8-0xFBDF */ @@ -6767,10 +6767,10 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x5d8e,0xe134,0x5df5,0x5e0b,0x5e12,0x5e2e,0x5e5e,0x0000, /* 0xFBF8-0xFBFF */ /* codebase=0xfc40 rawbase=0x5cc0 */ 0xe13a,0x5f4d,0x7a7d,0x5bc3,0x7abb,0xe13f,0xe140,0x5fa4, /* 0xFC40-0xFC47 */ - 0x5fba,0x5fbc,0xe144,0x6077,0x60a4,0x60b3,0x60fd,0x6130, /* 0xFC48-0xFC4F */ + 0x5fba,0x0000,0xe144,0x6077,0x60a4,0x60b3,0x60fd,0x6130, /* 0xFC48-0xFC4F */ 0xe14a,0x619c,0x6159,0x617d,0x615c,0x637f,0x61e2,0x70d5, /* 0xFC50-0xFC57 */ 0x6239,0x6268,0x6285,0x6282,0x62a6,0x62d5,0x6364,0x6335, /* 0xFC58-0xFC5F */ - 0x6490,0x3a5c,0x6648,0x6667,0x671e,0x6803,0x67ac,0x67f9, /* 0xFC60-0xFC67 */ + 0x0000,0x3a5c,0x6648,0x6667,0x671e,0x6803,0x67ac,0x67f9, /* 0xFC60-0xFC67 */ 0x68b6,0x692c,0x6901,0x6900,0x68ca,0x6973,0x6980,0x693e, /* 0xFC68-0xFC6F */ 0xe16a,0x69b2,0x69c0,0x698a,0x69fa,0x69e9,0x6ab2,0x6a52, /* 0xFC70-0xFC77 */ 0x6a9d,0x6b1d,0x6b52,0x6bfa,0x3cd1,0x6cce,0x6e4f,0x0000, /* 0xFC78-0xFC7F */ @@ -6795,8 +6795,8 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { /* codebase=0xfd40 rawbase=0x5d80 */ 0xe1d7,0x8fa0,0x81f6,0x821a,0xe1db,0x8771,0x87a9,0x878c, /* 0xFD40-0xFD47 */ 0x9e9e,0x87c1,0x9e1c,0xe1e2,0x87d6,0x87f5,0x880f,0x8818, /* 0xFD48-0xFD4F */ - 0x882d,0x8842,0x8845,0x9c35,0x886e,0x88aa,0x88a0,0x629d, /* 0xFD50-0xFD57 */ - 0x8943,0x894d,0x7172,0x885e,0xe1f3,0x82fd,0x44b7,0x82d0, /* 0xFD58-0xFD5F */ + 0x882d,0x8842,0x8845,0x9c35,0x886e,0x0000,0x88a0,0x629d, /* 0xFD50-0xFD57 */ + 0x8943,0x894d,0x0000,0x885e,0xe1f3,0x82fd,0x44b7,0x82d0, /* 0xFD58-0xFD5F */ 0x8385,0x9d02,0x9f69,0x8420,0xe1fb,0x84da,0x84ad,0x44fb, /* 0xFD60-0xFD67 */ 0x854b,0xe200,0x8602,0x8610,0x63d1,0x8989,0x898a,0x8994, /* 0xFD68-0xFD6F */ 0x9c45,0x89bc,0x8a7e,0x8a49,0x8b0c,0x8b43,0x8b81,0x8b4c, /* 0xFD70-0xFD77 */ @@ -6811,7 +6811,7 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x9167,0x917c,0x918e,0x91bb,0x9ea8,0x9056,0x904c,0x91fe, /* 0xFDB0-0xFDB7 */ 0x9262,0x92be,0x936b,0x936e,0x93ba,0x9427,0x9597,0x95a7, /* 0xFDB8-0xFDBF */ /* codebase=0xfdc0 rawbase=0x5e00 */ - 0xe235,0x9638,0xe237,0x9683,0x9696,0x9681,0x96bd,0x9703, /* 0xFDC0-0xFDC7 */ + 0xe235,0x9638,0xe237,0x0000,0x9696,0x9681,0x96bd,0x9703, /* 0xFDC0-0xFDC7 */ 0x9721,0x9731,0x975f,0x979f,0x97b4,0x97b8,0x97ba,0x97be, /* 0xFDC8-0xFDCF */ 0x97c8,0x9ebf,0x981f,0x982e,0x9fa5,0x9847,0x984b,0x9866, /* 0xFDD0-0xFDD7 */ 0x986c,0x98b4,0x9f5a,0x98dc,0x98e6,0x9942,0x9939,0x993b, /* 0xFDD8-0xFDDF */ @@ -6821,11 +6821,11 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x9c0a,0x9bff,0x9c2e,0x80e8,0x80e9,0x80ec,0x810e,0x0000, /* 0xFDF8-0xFDFF */ /* codebase=0xfe40 rawbase=0x5e40 */ 0x6c39,0x4e6a,0x9641,0x58f2,0x7962,0x6822,0xe27a,0xe27b, /* 0xFE40-0xFE47 */ - 0x8107,0x57d7,0x44ea,0x6435,0x8534,0x40df,0xe282,0x691a, /* 0xFE48-0xFE4F */ + 0x8107,0x57d7,0x44ea,0x0000,0x8534,0x40df,0xe282,0x691a, /* 0xFE48-0xFE4F */ 0x9c02,0x75b1,0x83d3,0x7171,0x6a0b,0xe289,0x6a7a,0x9af4, /* 0xFE50-0xFE57 */ 0xe28c,0xe28d,0x77b9,0x6530,0x6d96,0x5637,0x6725,0x6a2b, /* 0xFE58-0xFE5F */ 0x7d5d,0x9061,0x4e98,0x7ca6,0x7b39,0xe299,0x5975,0x36c7, /* 0xFE60-0xFE67 */ - 0x707f,0xe29d,0x6e8b,0xe29f,0xe2a0,0x975d,0x92d0,0x5754, /* 0xFE68-0xFE6F */ + 0x707f,0xe29d,0x6e8b,0xe29f,0xe2a0,0x975d,0x0000,0x5754, /* 0xFE68-0xFE6F */ 0xe2a4,0x3ed9,0xe2a6,0xe2a7,0x6199,0x7460,0x713f,0x792e, /* 0xFE70-0xFE77 */ 0x5a96,0x9348,0x668e,0x4ffd,0x9341,0x3654,0x5d75,0x0000, /* 0xFE78-0xFE7F */ /* codebase=0xfe80 rawbase=0x5e80 */ @@ -6833,7 +6833,7 @@ const uint16_t cp951uao_to_unicode_raw[24320] = { 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0xFE88-0xFE8F */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0xFE90-0xFE97 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, /* 0xFE98-0xFE9F */ - 0x0000,0x701e,0x657b,0x708d,0x5ecd,0xe2b7,0x60a7,0x7ab0, /* 0xFEA0-0xFEA7 */ + 0x0000,0x701e,0x0000,0x708d,0x5ecd,0xe2b7,0x60a7,0x7ab0, /* 0xFEA0-0xFEA7 */ 0x5f63,0xe2bb,0x73f7,0xe2bd,0x7468,0x75b4,0xe2c0,0x9b69, /* 0xFEA8-0xFEAF */ 0x00bd,0x2153,0x2154,0x00bc,0x00be,0x2155,0x2156,0x2157, /* 0xFEB0-0xFEB7 */ 0x2158,0x2159,0x215a,0x8692,0x86a0,0x86ad,0x86b2,0x87a5, /* 0xFEB8-0xFEBF */ @@ -6851,19 +6851,21 @@ bool madecp951 = false; uint16_t cp951sea_to_unicode_raw[24320], cp951uaosea_to_unicode_raw[24320]; void makeseacp951table() { if (madecp951) return; - for (int i=0; i<64*41; i++) { + for (int i=0; i<64*50; i++) { cp951sea_to_unicode_raw[i] = cp951_to_unicode_raw[i]; cp951uaosea_to_unicode_raw[i] = cp951uao_to_unicode_raw[i]; } - for (int i=64*41; i<64*98; i++) { + for (int i=64*50; i<64*107; i++) { + /* 0x9140-0xA3FE */ cp951sea_to_unicode_raw[i] = cp950ext_to_unicode_raw[i]; cp951uaosea_to_unicode_raw[i] = cp950ext_to_unicode_raw[i]; } - for (int i=64*98; i<64*365; i++) { + for (int i=64*107; i<64*210; i++) { cp951sea_to_unicode_raw[i] = cp951_to_unicode_raw[i]; cp951uaosea_to_unicode_raw[i] = cp951uao_to_unicode_raw[i]; } - for (int i=64*365; i<64*380; i++) { + for (int i=64*210; i<64*380; i++) { + /* 0xC6A1-0xFEFE */ cp951sea_to_unicode_raw[i] = cp950ext_to_unicode_raw[i]; cp951uaosea_to_unicode_raw[i] = cp950ext_to_unicode_raw[i]; } diff --git a/include/cross.h b/include/cross.h index df288ba7822..38463cf148c 100644 --- a/include/cross.h +++ b/include/cross.h @@ -66,10 +66,10 @@ static inline float powf (float x, float y) { return (float) pow (x,y); } class Cross { public: - static void GetPlatformResDir(std::string& in); - static void GetPlatformConfigDir(std::string& in); - static void GetPlatformConfigName(std::string& in); - static void CreatePlatformConfigDir(std::string& in); + static std::string GetPlatformResDir(void); + static std::string GetPlatformConfigDir(void); + static std::string GetPlatformConfigName(void); + static std::string CreatePlatformConfigDir(void); static void ResolveHomedir(std::string & temp_line); static void CreateDir(std::string const& in); static bool IsPathAbsolute(std::string const& in); @@ -129,4 +129,6 @@ bool read_directory_next(dir_information* dirp, char* entry_name, char* entry_sn void close_directory(dir_information* dirp); FILE* fopen_wrap(const char* path, const char* mode); + +const char* get_time(void); #endif diff --git a/include/dma.h b/include/dma.h index 60e4dd21ea0..7350b1a5467 100644 --- a/include/dma.h +++ b/include/dma.h @@ -24,6 +24,7 @@ enum DMAEvent { DMA_REACHED_TC, DMA_MASKED, DMA_UNMASKED, + DMA_READ_COUNTER, /* the guest is reading the counter, which if accuracy is required, means process up to current time */ // DMA_TRANSFEREND, this shouldn't really be a signal }; @@ -33,137 +34,151 @@ enum DMATransfer { DMAT_READ=2 }; +enum DMAActor { /* i.e. who masked/unmasked the register */ + DMAA_NONE=0, + DMAA_CONTROLLER=1, + DMAA_GUEST=2, + DMAA_REISSUE=3 +}; + +const char *DMAActorStr(const DMAActor a); + class DmaChannel; typedef void (* DMA_CallBack)(DmaChannel * chan,DMAEvent event); class DmaChannel { -public: - uint32_t pagebase; - uint16_t baseaddr; - uint32_t curraddr; - uint16_t basecnt; - uint16_t currcnt; - uint8_t channum; - uint8_t pagenum; - uint8_t DMA16_PAGESHIFT; - uint32_t DMA16_ADDRMASK; - uint8_t DMA16; - uint8_t transfer_mode; - bool increment; - bool autoinit; - bool masked; - bool tcount; - bool request; - DMA_CallBack callback; - - // additional PC-98 proprietary feature: - // auto "bank" increment on DMA wraparound. - // - // I/O port 29h: - // bits [7:4] = 0 - // bits [3:2] = increment mode 0=64KB wraparound (no incr) 1=1MB boundary wrap 2=invalid 3=16MB boundary wrap - // bits [1:0] = which DMA channel to set - // - // This value is set by: - // 0 = 0x00 - // 1 = 0x0F - // 2 = 0xF0 (probably why it's invalid) - // 3 = 0xFF - // - // TODO: Does this setting stick or does it reset after normal legacy programming? - // TODO: When the bank auto increments does it increment the actual register or just - // an internal copy? - uint8_t page_bank_increment_wraparound = 0u; - - void page_bank_increment(void) { // to be called on DMA wraparound - if (page_bank_increment_wraparound != 0u) { - // FIXME: Improve this. - // Currently this code assumes that the auto increment in PC-98 modifies the - // register value (and therefore visible to the guest). Change this code if - // that model is wrong. - const uint8_t add = - increment ? 0x01u : 0xFFu; - const uint8_t nv = - ( pagenum & (~page_bank_increment_wraparound)) + - ((pagenum + add) & ( page_bank_increment_wraparound)); - SetPage(nv); - } - } - - DmaChannel(uint8_t num, bool dma16); - void DoCallBack(DMAEvent event) { - if (callback) (*callback)(this,event); - } - void SetMask(bool _mask) { - masked=_mask; - DoCallBack(masked ? DMA_MASKED : DMA_UNMASKED); - } - void Set128KMode(bool en) { - // 128KB mode (legacy ISA) (en=true): - // page shift = 1 (discard bit 0 of page register) - // addr mask = 0x1FFFF (all bits 0-15 become bits 1-16, bit 15 of addr takes the place of page register bit 0) - // 64KB mode (modern PCI including Intel chipsets) (en=false): - // page shift = 0 (all 8 bits of page register are used) - // addr mask = 0xFFFF (discard bit 15, bits 0-14 become bits 1-15 on ISA bus) - DMA16_PAGESHIFT = (en && DMA16) ? 0x1 : 0x0; // nonzero if we're to discard bit 0 of page register - DMA16_ADDRMASK = (1UL << ((en && DMA16) ? 17UL : 16UL)) - 1UL; // nonzero if (addrreg << 1) to cover 128KB, zero if (addrreg << 1) to discard MSB, limit to 64KB - } - void Register_Callback(DMA_CallBack _cb) { - callback = _cb; - SetMask(masked); - if (callback) Raise_Request(); - else Clear_Request(); - } - void ReachedTC(void) { - tcount=true; - DoCallBack(DMA_REACHED_TC); - } - void SetPage(uint8_t val) { - pagenum=val; - pagebase=(uint32_t)(pagenum >> DMA16_PAGESHIFT) << (uint32_t)((uint8_t)16u + DMA16_PAGESHIFT); - } - void Raise_Request(void) { - request=true; - } - void Clear_Request(void) { - request=false; - } - Bitu Read(Bitu want, uint8_t * buffer); - Bitu Write(Bitu want, uint8_t * buffer); - - void SaveState( std::ostream& stream ); - void LoadState( std::istream& stream ); + public: + uint32_t pagebase; + uint16_t baseaddr; + uint32_t curraddr; + uint16_t basecnt; + uint16_t currcnt; + uint8_t channum; + uint8_t pagenum; + uint8_t DMA16_PAGESHIFT; + uint32_t DMA16_ADDRMASK; + uint8_t DMA16; + uint8_t transfer_mode; + DMAActor masked_by; + bool increment; + bool autoinit; + bool masked; + bool tcount; + bool request; + DMA_CallBack callback; + + // additional PC-98 proprietary feature: + // auto "bank" increment on DMA wraparound. + // + // I/O port 29h: + // bits [7:4] = 0 + // bits [3:2] = increment mode 0=64KB wraparound (no incr) 1=1MB boundary wrap 2=invalid 3=16MB boundary wrap + // bits [1:0] = which DMA channel to set + // + // This value is set by: + // 0 = 0x00 + // 1 = 0x0F + // 2 = 0xF0 (probably why it's invalid) + // 3 = 0xFF + // + // TODO: Does this setting stick or does it reset after normal legacy programming? + // TODO: When the bank auto increments does it increment the actual register or just + // an internal copy? + uint8_t page_bank_increment_wraparound = 0u; + + // user data for emulation + uint64_t userData = 0; + + void page_bank_increment(void) { // to be called on DMA wraparound + if (page_bank_increment_wraparound != 0u) { + // FIXME: Improve this. + // Currently this code assumes that the auto increment in PC-98 modifies the + // register value (and therefore visible to the guest). Change this code if + // that model is wrong. + const uint8_t add = + increment ? 0x01u : 0xFFu; + const uint8_t nv = + ( pagenum & (~page_bank_increment_wraparound)) + + ((pagenum + add) & ( page_bank_increment_wraparound)); + SetPage(nv); + } + } + + DmaChannel(uint8_t num, bool dma16); + void DoCallBack(DMAEvent event) { + if (callback) (*callback)(this,event); + } + void SetMask(bool _mask) { + masked=_mask; + DoCallBack(masked ? DMA_MASKED : DMA_UNMASKED); + } + void Set128KMode(bool en) { + // 128KB mode (legacy ISA) (en=true): + // page shift = 1 (discard bit 0 of page register) + // addr mask = 0x1FFFF (all bits 0-15 become bits 1-16, bit 15 of addr takes the place of page register bit 0) + // 64KB mode (modern PCI including Intel chipsets) (en=false): + // page shift = 0 (all 8 bits of page register are used) + // addr mask = 0xFFFF (discard bit 15, bits 0-14 become bits 1-15 on ISA bus) + DMA16_PAGESHIFT = (en && DMA16) ? 0x1 : 0x0; // nonzero if we're to discard bit 0 of page register + DMA16_ADDRMASK = (1UL << ((en && DMA16) ? 17UL : 16UL)) - 1UL; // nonzero if (addrreg << 1) to cover 128KB, zero if (addrreg << 1) to discard MSB, limit to 64KB + } + void Register_Callback(DMA_CallBack _cb) { + callback = _cb; + masked_by = DMAA_REISSUE; + SetMask(masked); + if (callback) Raise_Request(); + else Clear_Request(); + } + void ReachedTC(void) { + tcount=true; + DoCallBack(DMA_REACHED_TC); + } + void SetPage(uint8_t val) { + pagenum=val; + pagebase=(uint32_t)(pagenum >> DMA16_PAGESHIFT) << (uint32_t)((uint8_t)16u + DMA16_PAGESHIFT); + } + void Raise_Request(void) { + request=true; + } + void Clear_Request(void) { + request=false; + } + Bitu Read(Bitu want, uint8_t * buffer); + Bitu Write(Bitu want, uint8_t * buffer); + + void SaveState( std::ostream& stream ); + void LoadState( std::istream& stream ); }; class DmaController { -private: - uint8_t ctrlnum; - bool flipflop; - DmaChannel* DmaChannels[4] = {}; -public: - IO_ReadHandleObject DMA_ReadHandler[0x15]; - IO_WriteHandleObject DMA_WriteHandler[0x15]; - DmaController(uint8_t num) { - flipflop = false; - ctrlnum = num; /* first or second DMA controller */ - for(uint8_t i=0;i<4;i++) { - DmaChannels[i] = new DmaChannel(i+ctrlnum*4,ctrlnum==1); + private: + uint8_t ctrlnum; + bool flipflop; + DmaChannel* DmaChannels[4] = {}; + public: + IO_ReadHandleObject DMA_ReadHandler[0x15]; + IO_WriteHandleObject DMA_WriteHandler[0x15]; + DmaController(uint8_t num) { + flipflop = false; + ctrlnum = num; /* first or second DMA controller */ + for(uint8_t i=0;i<4;i++) { + DmaChannels[i] = new DmaChannel(i+ctrlnum*4,ctrlnum==1); + } } - } - ~DmaController(void) { - for(uint8_t i=0;i<4;i++) { - delete DmaChannels[i]; + ~DmaController(void) { + for(uint8_t i=0;i<4;i++) { + delete DmaChannels[i]; + } } - } - DmaChannel * GetChannel(uint8_t chan) { - if (chan<4) return DmaChannels[chan]; - else return NULL; - } - void WriteControllerReg(Bitu reg,Bitu val,Bitu len); - Bitu ReadControllerReg(Bitu reg,Bitu len); - - void SaveState( std::ostream& stream ); - void LoadState( std::istream& stream ); + DmaChannel * GetChannel(uint8_t chan) { + if (chan<4) return DmaChannels[chan]; + else return NULL; + } + void WriteControllerReg(Bitu reg,Bitu val,Bitu len); + Bitu ReadControllerReg(Bitu reg,Bitu len); + + void SaveState( std::ostream& stream ); + void LoadState( std::istream& stream ); }; DmaChannel * GetDMAChannel(uint8_t chan); diff --git a/include/dos_inc.h b/include/dos_inc.h index d97e07b7bc1..89e58903a14 100644 --- a/include/dos_inc.h +++ b/include/dos_inc.h @@ -82,6 +82,7 @@ struct CommandTail{ extern bool dos_kernel_disabled; +#if !defined(OSFREE) #define IS_DOS_JAPANESE (!dos_kernel_disabled && mem_readb(Real2Phys(dos.tables.dbcs) + 0x02) == 0x81 && mem_readb(Real2Phys(dos.tables.dbcs) + 0x03) == 0x9F) #define IS_DOS_CJK (!dos_kernel_disabled && ((mem_readb(Real2Phys(dos.tables.dbcs) + 0x02) == 0x81 || mem_readb(Real2Phys(dos.tables.dbcs) + 0x02) == 0xA1) && (mem_readb(Real2Phys(dos.tables.dbcs) + 0x03) == 0x9F || mem_readb(Real2Phys(dos.tables.dbcs) + 0x03) == 0xFE))) #define IS_DOSV (dos.set_jdosv_enabled || dos.set_kdosv_enabled || dos.set_pdosv_enabled || dos.set_tdosv_enabled) @@ -90,8 +91,17 @@ extern bool dos_kernel_disabled; #define IS_PDOSV (dos.set_pdosv_enabled) #define IS_TDOSV (dos.set_tdosv_enabled) #define IS_J3100 (dos.set_j3100_enabled) - -#define EXT_DEVICE_BIT 0x0200 +#else +/* OSFREE: You don't get any of this! */ +#define IS_DOS_JAPANESE (0) +#define IS_DOS_CJK (0) +#define IS_DOSV (0) +#define IS_JDOSV (0) +#define IS_KDOSV (0) +#define IS_PDOSV (0) +#define IS_TDOSV (0) +#define IS_J3100 (0) +#endif extern uint16_t first_umb_seg; extern uint16_t first_umb_size; @@ -230,6 +240,7 @@ namespace DeviceInfoFlags constexpr uint16_t Binary = 1<<5; constexpr uint16_t EofOnInput = 1<<6; constexpr uint16_t Device = 1<<7; + constexpr uint16_t ExternalDevice = 1<<9; constexpr uint16_t OpenCloseSupport = 1<<11; constexpr uint16_t OutputUntilBusy = 1<<13; constexpr uint16_t IoctlSupport = 1<<14; @@ -270,6 +281,7 @@ bool DOS_SetFileDate(uint16_t entry, uint16_t ntime, uint16_t ndate); /* Routines for Drive Class */ bool DOS_OpenFile(char const * name,uint8_t flags,uint16_t * entry,bool fcb = false); +bool DOS_OpenExistingSFTEntry(uint16_t jft_handle,int sft_handle); bool DOS_OpenFileExtended(char const * name, uint16_t flags, uint16_t createAttr, uint16_t action, uint16_t *entry, uint16_t* status); bool DOS_CreateFile(char const * name,uint16_t attributes,uint16_t * entry, bool fcb = false); bool DOS_UnlinkFile(char const * const name); @@ -281,7 +293,7 @@ bool DOS_CreateTempFile(char * const name,uint16_t * entry); bool DOS_FileExists(char const * const name); /* Helper Functions */ -bool DOS_MakeName(char const * const name,char * const fullname,uint8_t * drive,bool isVolume = false); +bool DOS_MakeName(char const * const name,char * const fullname,uint8_t * drive); /* Drive Handing Routines */ uint8_t DOS_GetDefaultDrive(void); void DOS_SetDefaultDrive(uint8_t drive); @@ -313,7 +325,8 @@ uint32_t DOS_CheckExtDevice(const char *name, bool already_flag); /* Execute and new process creation */ bool DOS_NewPSP(uint16_t segment,uint16_t size); bool DOS_ChildPSP(uint16_t segment,uint16_t size); -bool DOS_Execute(const char* name, PhysPt block_pt, uint8_t flags); +bool DOS_Execute(const char* name, PhysPt block_pt, uint16_t flags); +#define DOSEXEC_DEVICEDRIVER 0x0100 /* special flags param for DOS_Execute() that DOS programs cannot pass through INT 21h, block_pt becomes direct segment */ void DOS_Terminate(uint16_t pspseg,bool tsr,uint8_t exitcode); /* Memory Handling Routines */ @@ -367,7 +380,8 @@ enum { KEYB_FILENOTFOUND, KEYB_INVALIDFILE, KEYB_LAYOUTNOTFOUND, - KEYB_INVALIDCPFILE + KEYB_INVALIDCPFILE, + KEYB_LOADERROR }; @@ -500,6 +514,7 @@ class DOS_PSP :public MemStruct { void RestoreCommandTail (void); bool SetNumFiles (uint16_t fileNum); uint16_t FindEntryByHandle (uint8_t handle); + uint16_t GetSegment (void) const { return seg; } private: #ifdef _MSC_VER @@ -573,8 +588,9 @@ class DOS_InfoBlock:public MemStruct { public: DOS_InfoBlock() {}; void SetLocation(uint16_t segment); - void SetFirstDPB(uint32_t _first_dpb); + void SetFirstDPB(uint32_t _first_dpb); void SetFirstMCB(uint16_t _firstmcb); + uint16_t GetFirstMCB(void); void SetBuffers(uint16_t x,uint16_t y); void SetCurDirStruct(uint32_t _curdirstruct); void SetFCBTable(uint32_t _fcbtable); @@ -587,6 +603,7 @@ class DOS_InfoBlock:public MemStruct { uint8_t GetUMBChainState(void); RealPt GetPointer(void); uint32_t GetDeviceChain(void); + uint32_t GetStartOfDeviceChain(void);/*this one includes the NUL driver at the very start*/ void SetBootDrive(uint8_t drv) { sSave(sDIB,bootDrive,drv); } uint8_t GetBootDrive(void) { return sGet(sDIB,bootDrive); } @@ -657,7 +674,7 @@ class DOS_DTA:public MemStruct{ int GetFindData(int fmt,char * finddata,int *c); - void SetupSearch(uint8_t _sdrive,uint8_t _sattr,char * pattern); + void SetupSearch(uint8_t _sdrive,uint8_t _sattr,const char * pattern); void SetResult(const char * _name,const char * _lname,uint32_t _size,uint32_t _hsize,uint16_t _date,uint16_t _time,uint8_t _attr); uint8_t GetSearchDrive(void); @@ -821,6 +838,126 @@ class DOS_SDA : public MemStruct { #pragma pack() #endif }; + +static constexpr uint32_t NONEXTDEV = 0xFFFFFFFFul; + +static constexpr uint16_t DEVATTR_ISCHAR = 1u << 15u;/*which determines which of the following flags apply*/ + +static constexpr uint16_t DEVATTRCHR_IOCTL_CTLSTRINGS = 1u << 14u;/*MS-DOS 4.0: 1 IF THE DEVICE UNDERSTANDS IOCTL CONTROL STRINGS*/ +static constexpr uint16_t DEVATTRCHR_IOCTL_OUTPUT_UNTIL_BUSY = 1u << 13u;/*MS-DOS 4.0: 1 IF THE DEVICE SUPPORTS OUTPUT-UNTIL-BUSY*/ +static constexpr uint16_t DEVATTRCHR_OPENCLOSE = 1u << 11u;/*MS-DOS 4.0: 1 IF THE DEVICE UNDERSTANDS OPEN/CLOSE*/ +static constexpr uint16_t DEVATTRCHR_INT29 = 1u << 4u;/*MS-DOS 4.0: 1 IF DEVICE IS RECIPIENT OF INT 29H*/ +static constexpr uint16_t DEVATTRCHR_CLOCK = 1u << 3u;/*MS-DOS 4.0: 1 IF DEVICE IS CLOCK DEVICE*/ +static constexpr uint16_t DEVATTRCHR_NULL = 1u << 2u;/*MS-DOS 4.0: 1 IF DEVICE IS NULL DEVICE*/ +static constexpr uint16_t DEVATTRCHR_CONOUT = 1u << 1u;/*MS-DOS 4.0: 1 IF DEVICE IS CONSOLE OUTPUT*/ +static constexpr uint16_t DEVATTRCHR_CONIN = 1u << 0u;/*MS-DOS 4.0: 1 IF DEVICE IS CONSOLE INPUT*/ + +static constexpr uint16_t DEVATTRBLK_IOCTL_CTLSTRINGS = 1u << 14u;/*MS-DOS 4.0: 1 IF THE DEVICE UNDERSTANDS IOCTL CONTROL STRINGS*/ +static constexpr uint16_t DEVATTRBLK_IOCTL_MEDIA_FAT_BYTE = 1u << 13u;/*MS-DOS 4.0: 1 IF THE DEVICE DETERMINES MEDIA BY EXAMINING THE FAT ID BYTE*/ +static constexpr uint16_t DEVATTRBLK_OPENCLOSEREMOVABLE = 1u << 11u;/*MS-DOS 4.0: 1 IF THE DEVICE UNDERSTANDS OPEN/CLOSE/REMOVABLE MEDIA*/ +static constexpr uint16_t DEVATTRBLK_IBM_DRIVE_SHARED = 1u << 9u;/*MS-DOS 4.0: ... IS CURRENTLY USED ON IBM SYSTEMS TO INDICATE "DRIVE IS SHARED" ... THIS USE IS NOT DOCUMENTED ... used by utilities like FORMAT which are supposed to fail on shared drives on server machines */ +static constexpr uint16_t DEVATTRBLK_IOCTL_GEN = 1u << 6u;/*MS-DOS 4.0: IF DEVICE HAS SUPPORT FOR GETMAP/SETMAP OF LOGICAL DRIVES / UNDERSTANDS GENERIC IOCTL FUNCTION CALLS*/ +static constexpr uint16_t DEVATTRBLK_EXTENDED = 1u << 1u;/*MS-DOS 4.0: Extended block device (>=32MB) aka EXTDRVR*/ + +enum DEVFUNC { + DEVFUNC_INIT=0, + DEVFUNC_MEDIACHECK=1, + DEVFUNC_GETPBP=2, + DEVFUNC_IOCTL_READ=3, + DEVFUNC_READ=4, + DEVFUNC_NDREAD=5,/*non destructive read*/ + DEVFUNC_INPUT_STATUS=6, + DEVFUNC_INPUT_FLUSH=7, + DEVFUNC_WRITE=8, + DEVFUNC_WRITEVERIFY=9, + DEVFUNC_OUTPUT_STATUS=10, + DEVFUNC_OUTPUT_FLUSH=11, + DEVFUNC_IOCTL_WRITE=12, + DEVFUNC_OPEN=13, + DEVFUNC_CLOSE=14, + DEVFUNC_REMOVABLE_MEDIA=15, + DEVFUNC_OUTPUT_UNTIL_BUSY=16,/*MS-DOS 4.0*/ + DEVFUNC_GENERAL_IOCTL=19, + DEVFUNC_GET_OWNER=23,/*MS-DOS 4.0*/ + DEVFUNC_SET_OWNER=24/*MS-DOS 4.0*/ +}; + +enum DOSDEVERR { + DOSDEVERR_WRITEPROTECT=0, + DOSDEVERR_UNKNOWNUNIT=1, + DOSDEVERR_DRIVENOTREADY=2, + DOSDEVERR_UNKNOWNCOMMAND=3, + DOSDEVERR_CRC=4, + DOSDEVERR_BADDRIVEREQUEST=5, + DOSDEVERR_SEEKERR=6, + DOSDEVERR_UNKNOWNMEDIA=7, + DOSDEVERR_SECTORNOTFOUND=8, + DOSDEVERR_PRINTEROUTOFPAPER=9, + DOSDEVERR_WRITEFAULT=10, + DOSDEVERR_READFAULT=11, + DOSDEVERR_GENERALFAILURE=12 +}; + +class DOS_DEVHDR : public MemStruct{/*device driver header*/ +public: + DOS_DEVHDR(uint16_t seg) { SetPt(seg); } + uint32_t GetNextDriver(void) { return (uint32_t)sGet(hdr,nextdev); }; /* NONEXTDEV if end of list */ + void SetNextDriver(const uint32_t p) { sSave(hdr,nextdev,p); }; + uint16_t GetAttributes(void) { return (uint16_t)sGet(hdr,attributes); }; + uint16_t GetStrategyOffset(void) { return (uint16_t)sGet(hdr,strategy_entry); }; + uint16_t GetInterruptOffset(void) { return (uint16_t)sGet(hdr,interrupt_entry); }; + void GetName(char * const _name) { MEM_BlockRead(pt+offsetof(hdr,name),_name,8);_name[8]=0;} + + #ifdef _MSC_VER + #pragma pack (1) + #endif + struct hdr { + uint32_t nextdev; /* pointer to next device or FFFF:FFFF */ + uint16_t attributes; + uint16_t strategy_entry; + uint16_t interrupt_entry; + uint8_t name[8]; + } GCC_ATTRIBUTE(packed);/*=18 bytes*/ + + /* structure used in passing requests to device driver, head structure: "Static Request Header" */ + struct streqhdr { + uint8_t record_length; /* length of the driver request */ + uint8_t unit_code; + uint8_t cmd_code; + uint16_t status; /* status word: 15=ERR 9=BUSY 8=DONE 7..0=ERR CODE */ + uint32_t reserved[2]; /* reserved for internal DOS use, queue links */ + } GCC_ATTRIBUTE(packed);/*=13 bytes*/ + + /* init request */ + struct req_init { + struct streqhdr hdr; /* static request header (13 bytes) DEVFUNC_INIT */ + uint8_t num_of_units; /* number of units */ + uint32_t end_ptr; /* ending address of driver, filled in by INIT */ + uint32_t bpb_ptr; /* in: init arguments out: BPB array */ + /* MS-DOS 2.0 ends here == 22 bytes */ + uint8_t drive_num; /* driver number */ + uint16_t config_err; /* config.sys error flag */ + } GCC_ATTRIBUTE(packed);/*=25 bytes*/ + + /* read/write request */ + struct req_rwio { + struct streqhdr hdr; /* static request header (13 bytes) DEVFUNC_READ/DEVFUNC_WRITE/DEVFUNC_WRITEVERIFY */ + uint8_t media_dpb; /* from DPB */ + uint32_t xfer_addr; /* transfer address (16:16) */ + uint16_t count; /* byte or sector count */ + uint16_t start_sector; /* starting sector (if block device) */ + /* block device with 16-bit sector stops here (prior to MS-DOS 3.3) == 22 bytes */ + /* the following applies if EXTDRVR */ + uint32_t ptr_volid; /* pointer to volume ID (R/W according to MS-DOS 4.0 source code) */ + uint32_t start_sector32; /* starting sector (if block device) */ + /* EXTDRVR stops here == 30 bytes */ + } GCC_ATTRIBUTE(packed);/*=30 bytes*/ + + #ifdef _MSC_VER + #pragma pack () + #endif +}; + extern DOS_InfoBlock dos_infoblock; struct DOS_Block { @@ -854,13 +991,22 @@ struct DOS_Block { uint16_t mediaid_offset = 0x17; // media ID offset in DPB (MS-DOS 4.x-6.x case) } tables; uint16_t loaded_codepage = 0; +#if !defined(OSFREE) bool set_jdosv_enabled = false; bool set_kdosv_enabled = false; bool set_pdosv_enabled = false; bool set_tdosv_enabled = false; bool set_j3100_enabled = false; +#else + static constexpr bool set_jdosv_enabled = false; + static constexpr bool set_kdosv_enabled = false; + static constexpr bool set_pdosv_enabled = false; + static constexpr bool set_tdosv_enabled = false; + static constexpr bool set_j3100_enabled = false; +#endif bool im_enable_flag; uint16_t dcp; // Device command packet + static constexpr uint16_t dcp_size_seg = 3;//allocated size of DCP buffer }; extern DOS_Block dos; @@ -1079,4 +1225,13 @@ const std::map country_code_map { void DOS_FlushSTDIN(void); + +extern unsigned char exepack_handling; + +enum { + EXEPACK_NONE, + EXEPACK_A20OFF, + EXEPACK_UNPACK +}; + #endif diff --git a/include/dos_system.h b/include/dos_system.h index e4e348f68d8..46c52d17d33 100644 --- a/include/dos_system.h +++ b/include/dos_system.h @@ -96,6 +96,7 @@ class DOS_File { char* name = NULL; uint8_t drive = 0; uint32_t flags = 0; + bool neverclose = false; /* set for CON/AUX/PRN so MS-DOS always has a console even if all JFT's closed the handles */ bool open = false; uint16_t attr = 0; @@ -168,7 +169,7 @@ class DOS_ExtDevice : public DOS_Device { bool WriteToControlChannel(PhysPt bufptr, uint16_t size, uint16_t* retcode) override; uint8_t GetStatus(bool input_flag) override; bool CheckSameDevice(uint16_t seg, uint16_t s_off, uint16_t i_off); - uint16_t CallDeviceFunction(uint8_t command, uint8_t length, uint16_t seg, uint16_t offset, uint16_t size); + uint16_t CallRWIODeviceFunction(uint8_t command, uint8_t length, uint16_t seg, uint16_t offset, uint16_t size); private: struct ExtDeviceData ext; @@ -275,24 +276,24 @@ class DOS_Drive_Cache { uint16_t GetFreeID (CFileInfo* dir); void Clear (void); - CFileInfo* dirBase; + CFileInfo* dirBase = NULL; char dirPath [CROSS_LEN] = {}; DOS_Drive* drive = NULL; char basePath [CROSS_LEN] = {}; bool dirFirstTime = false; - TDirSort sortDirType; - CFileInfo* save_dir; + TDirSort sortDirType = NOSORT; + CFileInfo* save_dir = NULL; char save_path [CROSS_LEN] = {}; char save_expanded [CROSS_LEN] = {}; - uint16_t srchNr; - CFileInfo* dirSearch [MAX_OPENDIRS]; + uint16_t srchNr = 0; + CFileInfo* dirSearch [MAX_OPENDIRS] = {}; char dirSearchName [MAX_OPENDIRS] = {}; - CFileInfo* dirFindFirst [MAX_OPENDIRS]; - uint16_t nextFreeFindFirst; + CFileInfo* dirFindFirst [MAX_OPENDIRS] = {}; + uint16_t nextFreeFindFirst = 0; - char label [CROSS_LEN]; - bool updatelabel; + char label [CROSS_LEN] = {}; + bool updatelabel = false; }; class DOS_Drive { @@ -330,16 +331,16 @@ class DOS_Drive { /* these 4 may only be used by DOS_Drive_Cache because they have special calling conventions */ virtual void *opendir(const char *dir) { (void)dir; return NULL; }; virtual void closedir(void *handle) { (void)handle; }; - virtual bool read_directory_first(void *handle, char* entry_name, char* entry_sname, bool& is_directory) { (void)handle; (void)entry_name; (void)entry_sname; (void)is_directory; return false; }; - virtual bool read_directory_next(void *handle, char* entry_name, char* entry_sname, bool& is_directory) { (void)handle; (void)entry_name; (void)entry_sname; (void)is_directory; return false; }; + virtual bool read_directory_first(void *handle, char* entry_name, char* entry_sname, bool& is_directory) { (void)handle; (void)entry_name; (void)entry_sname; (void)is_directory; return false; }; + virtual bool read_directory_next(void *handle, char* entry_name, char* entry_sname, bool& is_directory) { (void)handle; (void)entry_name; (void)entry_sname; (void)is_directory; return false; }; virtual const char * GetInfo(void); char * GetBaseDir(void); - bool readonly; - bool nocachedir; - bool partitionMount = false; - char curdir[DOS_PATHLENGTH]; - char info[256]; + bool readonly; + bool nocachedir; + bool partitionMount = false; + char curdir[DOS_PATHLENGTH]={0}; + char info[256]={0}; /* Can be overridden for example in iso images */ virtual char const * GetLabel() {return "NOLABEL";}; virtual void SetLabel(const char *label, bool iscdrom, bool updatable) { (void)label; (void)iscdrom; (void)updatable; }; @@ -351,9 +352,9 @@ class DOS_Drive { virtual void LoadState( std::istream& stream ); virtual void UpdateDPB(unsigned char dos_drive) { (void)dos_drive; }; - // INT 25h/INT 26h - virtual uint32_t GetSectorCount(void) { return 0; } - virtual uint32_t GetSectorSize(void) { return 0; } // LOGICAL sector size (from the FAT driver) not PHYSICAL disk sector size + // INT 25h/INT 26h + virtual uint32_t GetSectorCount(void) { return 0; } + virtual uint32_t GetSectorSize(void) { return 0; } // LOGICAL sector size (from the FAT driver) not PHYSICAL disk sector size virtual uint8_t Read_AbsoluteSector_INT25(uint32_t sectnum, void * data) { (void)sectnum; (void)data; return 0x05; } virtual uint8_t Write_AbsoluteSector_INT25(uint32_t sectnum, void * data) { (void)sectnum; (void)data; return 0x05; } }; diff --git a/include/dosbox.h b/include/dosbox.h index 7dae1ddfab5..32f636f2897 100644 --- a/include/dosbox.h +++ b/include/dosbox.h @@ -33,6 +33,21 @@ #include "clockdomain.h" #include "config.h" +/* HACK: To make SDL3 porting easier, define SDL2 to prevent SDL1 code from compiling */ +#if defined(C_SDL3) && !defined(C_SDL2) +# define C_SDL2 1 +#endif + +/* allow for OS-free builds where the MS-DOS emulation is disabled and + * you have to provide your own boot disks to run MS-DOS or whatever you like. */ +#ifdef C_OSFREE +# define OSFREE 1 +#endif + +#if defined(OS2) && defined(C_SDL2) +#undef VERSION +#endif + #if defined(C_HAVE_LINUX_KVM) && (C_TARGETCPU == X86 || C_TARGETCPU == X86_64) # define C_HAVE_LINUX_KVM_X86 #endif @@ -136,7 +151,8 @@ enum SVGACards { SVGA_TsengET4K, SVGA_TsengET3K, SVGA_ParadisePVGA1A, - SVGA_ATI + SVGA_ATI, + SVGA_DOSBoxIG // special "integrated graphics" emulator accelerated card }; enum S3Card { @@ -185,8 +201,9 @@ extern bool sse2_available; extern bool avx2_available; #endif -void MSG_Add(const char*,const char*); //add messages to the internal languagefile -const char* MSG_Get(char const *); //get messages from the internal languagefile +void MSG_Add(const char*,const char*); // Add messages to the internal languagefile +const char* MSG_Get(char const *); // Get messages from the internal languagefile +std::string formatString(const char* format, ...); // Generates a formatted string using a format specifier and variable arguments. void DOSBOX_RunMachine(); void DOSBOX_SetLoop(LoopHandler * handler); @@ -236,36 +253,37 @@ enum { extern uint32_t guest_msdos_LoL; extern uint16_t guest_msdos_mcb_chain; +extern uint32_t guest_msdos_dev_chain; extern int boothax; /* C++11 user-defined literal, to help with byte units */ typedef unsigned long long bytecount_t; -static inline constexpr bytecount_t operator "" _bytes(const bytecount_t x) { +static inline constexpr bytecount_t operator""_bytes(const bytecount_t x) { return x; } -static inline constexpr bytecount_t operator "" _parabytes(const bytecount_t x) { /* AKA bytes per segment increment in real mode */ +static inline constexpr bytecount_t operator""_parabytes(const bytecount_t x) { /* AKA bytes per segment increment in real mode */ return x << bytecount_t(4u); } -static inline constexpr bytecount_t operator "" _kibibytes(const bytecount_t x) { +static inline constexpr bytecount_t operator""_kibibytes(const bytecount_t x) { return x << bytecount_t(10u); } -static inline constexpr bytecount_t operator "" _pagebytes(const bytecount_t x) { /* bytes per 4KB page in protected mode */ +static inline constexpr bytecount_t operator""_pagebytes(const bytecount_t x) { /* bytes per 4KB page in protected mode */ return x << bytecount_t(12u); } -static inline constexpr bytecount_t operator "" _mibibytes(const bytecount_t x) { +static inline constexpr bytecount_t operator""_mibibytes(const bytecount_t x) { return x << bytecount_t(20u); } -static inline constexpr bytecount_t operator "" _gibibytes(const bytecount_t x) { +static inline constexpr bytecount_t operator""_gibibytes(const bytecount_t x) { return x << bytecount_t(30u); } -static inline constexpr bytecount_t operator "" _tebibytes(const bytecount_t x) { +static inline constexpr bytecount_t operator""_tebibytes(const bytecount_t x) { return x << bytecount_t(40u); } @@ -399,14 +417,15 @@ class SerializeGlobalPOD : public SaveState::Component protected: void getBytes(std::ostream& stream) override { - // std::for_each(podRef.begin(), podRef.end(), std::bind(WriteGlobalPOD(), &stream)); + // std::for_each(podRef.begin(), podRef.end(), std::bind1st(WriteGlobalPOD(), &stream)); } void setBytes(std::istream& stream) override { - // std::for_each(podRef.begin(), podRef.end(), std::bind(ReadGlobalPOD(), &stream)); + // std::for_each(podRef.begin(), podRef.end(), std::bind1st(ReadGlobalPOD(), &stream)); } + private: struct POD { @@ -416,7 +435,7 @@ class SerializeGlobalPOD : public SaveState::Component size_t size; }; - // struct WriteGlobalPOD : public std::__binary_function + // struct WriteGlobalPOD : public std::binary_function // { // void operator()(std::ostream* stream, const POD& data) const // { @@ -424,7 +443,7 @@ class SerializeGlobalPOD : public SaveState::Component // } // }; - // struct ReadGlobalPOD : public std::__binary_function + // struct ReadGlobalPOD : public std::binary_function // { // void operator()(std::istream* stream, const POD& data) const // { @@ -477,3 +496,9 @@ int _wmkdir_p(const wchar_t *pathname); int mkdir_p(const char *pathname, mode_t mode); #endif +#if defined(C_HAVE_DUKTAPE) +# include "duktape.h" + +extern duk_context *js_heap; +#endif + diff --git a/include/enet.h b/include/enet.h index 8ce3aaa6a2b..2dfc3e5e4ea 100644 --- a/include/enet.h +++ b/include/enet.h @@ -1550,6 +1550,9 @@ extern "C" { packet->data = (enet_uint8 *)data; } else { + if (dataLength > SIZE_MAX - sizeof(ENetPacket)) { + return NULL; + } packet = (ENetPacket *)enet_malloc(sizeof (ENetPacket) + dataLength); if (packet == NULL) { return NULL; @@ -5085,6 +5088,7 @@ extern "C" { return (t); } + #ifndef WIN_PTHREADS_TIME_H int clock_gettime(int X, struct timespec *tv) { LARGE_INTEGER t; FILETIME f; @@ -5122,7 +5126,56 @@ extern "C" { tv->tv_nsec = t.QuadPart % 1000000 * 1000; return (0); } + #endif #elif __APPLE__ && __MAC_OS_X_VERSION_MIN_REQUIRED < 101200 +#include +#define STR2(x) #x +#define STR(x) STR2(x) +#pragma message("__MAC_OS_X_VERSION_MIN_REQUIRED = " STR(__MAC_OS_X_VERSION_MIN_REQUIRED)) + +typedef enum { + _CLOCK_REALTIME = 0, +#if !defined(CLOCK_REALTIME) +#define CLOCK_REALTIME _CLOCK_REALTIME +#endif + _CLOCK_MONOTONIC = 6, +#if !defined(CLOCK_MONOTONIC) +#define CLOCK_MONOTONIC _CLOCK_MONOTONIC +#endif +#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) + _CLOCK_MONOTONIC_RAW = 4, +#if !defined(CLOCK_MONOTONIC_RAW) +#define CLOCK_MONOTONIC_RAW _CLOCK_MONOTONIC_RAW +#endif + _CLOCK_MONOTONIC_RAW_APPROX = 5, +#if !defined(CLOCK_MONOTONIC_RAW_APPROX) +#define CLOCK_MONOTONIC_RAW_APPROX _CLOCK_MONOTONIC_RAW_APPROX +#endif + _CLOCK_UPTIME_RAW = 8, +#if !defined(CLOCK_UPTIME_RAW) +#define CLOCK_UPTIME_RAW _CLOCK_UPTIME_RAW +#endif + _CLOCK_UPTIME_RAW_APPROX = 9, +#if !defined(CLOCK_UPTIME_RAW_APPROX) +#define CLOCK_UPTIME_RAW_APPROX _CLOCK_UPTIME_RAW_APPROX +#endif +#endif + _CLOCK_PROCESS_CPUTIME_ID = 12, +#if !defined(CLOCK_PROCESS_CPUTIME_ID) +#define CLOCK_PROCESS_CPUTIME_ID _CLOCK_PROCESS_CPUTIME_ID +#endif + _CLOCK_THREAD_CPUTIME_ID = 16 +#if !defined(CLOCK_THREAD_CPUTIME_ID) +#define CLOCK_THREAD_CPUTIME_ID _CLOCK_THREAD_CPUTIME_ID +#endif +} clockid_t; + + extern "C" { + /* clock_gettime() only available in macOS 10.12+ (Sierra) */ + int clock_gettime(clockid_t clk_id, struct timespec *tp); + } + + #if 0 #define CLOCK_MONOTONIC 0 int clock_gettime(int X, struct timespec *ts) { @@ -5138,6 +5191,7 @@ extern "C" { return 0; } + #endif #endif enet_uint32 enet_time_get() { @@ -6098,4 +6152,4 @@ extern "C" { #endif #endif // ENET_IMPLEMENTATION -#endif // ENET_INCLUDE_H \ No newline at end of file +#endif // ENET_INCLUDE_H diff --git a/include/fpu.h b/include/fpu.h index e27f8889663..f1280d93902 100644 --- a/include/fpu.h +++ b/include/fpu.h @@ -172,6 +172,10 @@ union alignas(8) MMX_reg { } uw; static_assert(sizeof(uw) == 8, "MMX packing error"); + uint8_t uba[8]; + uint16_t uwa[4]; + uint32_t uda[2]; + struct { uint16_t w3,w2,w1,w0; } sw; diff --git a/include/iglib.h b/include/iglib.h new file mode 100644 index 00000000000..7d48d4f0269 --- /dev/null +++ b/include/iglib.h @@ -0,0 +1,248 @@ + +/* this header is copied to/from the doslib.h copy */ + +#ifndef __DOSLIB_HW_IDE_DOSBOXIGLIB_H +#define __DOSLIB_HW_IDE_DOSBOXIGLIB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef DOSBOX_INCLUDE + /* In order to be usable as part of a VxD, code must be combined with data. + * In Watcom C we can do this by declaring all global variables __based on _CODE. */ +# ifdef TARGET_VXD +# define DOSBOXID_VAR __based( __segname("_CODE") ) +# else +# define DOSBOXID_VAR +# endif + +extern uint16_t DOSBOXID_VAR dosbox_id_baseio; + +# define DOSBOX_IDPORT(x) (dosbox_id_baseio+(x)) +#endif + +#define DOSBOX_ID_INDEX (0U) /* R/W */ +#define DOSBOX_ID_DATA (1U) /* R/W */ +#define DOSBOX_ID_STATUS (2U) /* R */ +#define DOSBOX_ID_COMMAND (2U) /* W */ + +/* bits 7-6: register select byte index + * bits 5-4: register byte index + * bit 1: error + * bit 0: busy */ +/* DOSBOX_ID_STATUS */ +#define DOSBOX_ID_STATUS_BUSY (0x01U) +#define DOSBOX_ID_STATUS_ERROR (0x02U) +#define DOSBOX_ID_STATUS_REGBYTE_SHIFT (4U) +#define DOSBOX_ID_STATUS_REGBYTE_MASK (0x03U << DOSBOX_ID_STATUS_REGBYTE_SHIFT) +#define DOSBOX_ID_STATUS_REGSEL_SHIFT (6U) +#define DOSBOX_ID_STATUS_REGSEL_MASK (0x03U << DOSBOX_ID_STATUS_REGSEL_SHIFT) + +/* DOSBOX_ID_COMMAND */ +#define DOSBOX_ID_CMD_RESET_LATCH (0x00U) +#define DOSBOX_ID_CMD_FLUSH_WRITE (0x01U) +#define DOSBOX_ID_CMD_PUSH_STATE (0x20U) +#define DOSBOX_ID_CMD_POP_STATE (0x21U) +#define DOSBOX_ID_CMD_DISCARD_STATE (0x22U) +#define DOSBOX_ID_CMD_DISCARD_ALL_STATE (0x23U) +#define DOSBOX_ID_CMD_CLEAR_ERROR (0xFEU) +#define DOSBOX_ID_CMD_RESET_INTERFACE (0xFFU) + +/* DOSBOX_ID_DATA after reset */ +#define DOSBOX_ID_RESET_DATA_CODE (0x0D05B0C5UL) +#define DOSBOX_ID_RESET_INDEX_CODE (0xAA55BB66UL) + +/* DOSBOX_ID_INDEX */ +#define DOSBOX_ID_REG_IDENTIFY (0x00000000UL) +#define DOSBOX_ID_REG_TEST (0x00000001UL) +#define DOSBOX_ID_REG_VERSION_STRING (0x00000002UL) +#define DOSBOX_ID_REG_VERSION_NUMBER (0x00000003UL) +#define DOSBOX_ID_REG_READ_EMTIME (0x00000004UL) +#define DOSBOX_ID_REG_DOSBOX_VERSION_MAJOR (0x00000005UL) +#define DOSBOX_ID_REG_DOSBOX_VERSION_MINOR (0x00000006UL) +#define DOSBOX_ID_REG_DOSBOX_VERSION_SUB (0x00000007UL) +#define DOSBOX_ID_REG_DOSBOX_PLATFORM_TYPE (0x00000008UL) /* a code describing the platform, see src/ints/bios.cpp */ +#define DOSBOX_ID_REG_DOSBOX_MACHINE_TYPE (0x00000009UL) /* machine type code (MCH_* constant), see include/dosbox.h */ + +#define DOSBOX_ID_REG_DEBUG_OUT (0x0000DEB0UL) +#define DOSBOX_ID_REG_DEBUG_CLEAR (0x0000DEB1UL) + +#define DOSBOX_ID_REG_USER_MOUSE_STATUS (0x00434D54UL) /* status (cursor capture, etc) */ +# define DOSBOX_ID_REG_USER_MOUSE_STATUS_CAPTURE (0x00000001UL) + +#define DOSBOX_ID_REG_USER_MOUSE_CURSOR (0x00434D55UL) /* screen coordinates, pixels */ +#define DOSBOX_ID_REG_USER_MOUSE_CURSOR_NORMALIZED (0x00434D56UL) /* screen coordinates, normalized to 0...65535 for Windows 3.x */ + +#define DOSBOX_ID_REG_RELEASE_MOUSE_CAPTURE (0x0052434DUL) /* release mouse capture (W) / mouse capture status (R) */ + +#define DOSBOX_ID_REG_GET_VGA_MEMBASE (0x00684580UL) /* get VGA video memory base in extended memory */ +#define DOSBOX_ID_REG_GET_VGA_MEMSIZE (0x00684581UL) /* get VGA video memory size */ +#define DOSBOX_ID_REG_VGAIG_CTL (0x00684590UL) /* integrated device control */ +# define DOSBOX_ID_REG_VGAIG_CTL_OVERRIDE (1UL << 0UL) /* override the standard VGA with IG video mode */ +# define DOSBOX_ID_REG_VGAIG_CTL_VGAREG_LOCKOUT (1UL << 1UL) /* lock out access to most VGA registers except 3DAh and DAC */ +# define DOSBOX_ID_REG_VGAIG_CTL_3DA_LOCKOUT (1UL << 2UL) /* lock out access to 3BAh/3DAh */ +# define DOSBOX_ID_REG_VGAIG_CTL_DAC_LOCKOUT (1UL << 3UL) /* lock out access to DAC registers */ +# define DOSBOX_ID_REG_VGAIG_CTL_OVERRIDE_REFRESH (1UL << 4UL) /* override refresh rate */ +# define DOSBOX_ID_REG_VGAIG_CTL_ACPAL_BYPASS (1UL << 5UL) /* for 16-color planar modes, bypass the attribute controller palette mapping */ +# define DOSBOX_ID_REG_VGAIG_CTL_VBEMODESET_DISABLE (1uL << 6UL) /* disable VESA BIOS modesetting, intended for the Windows driver */ +# define DOSBOX_ID_REG_VGAIG_CTL_A0000_FORCE (1UL << 7UL) /* Force VGA memory map to A0000-AFFFF regardless of VGA registers */ +#define DOSBOX_ID_REG_VGAIG_DISPLAYSIZE (0x00684591UL) /* integrated device width/height (16:16 = HEIGHT:WIDTH) */ +#define DOSBOX_ID_REG_VGAIG_HVTOTALADD (0x00684592UL) /* integrated device add to width/height to get htotal/vtotal = (16:16 V:H) */ +#define DOSBOX_ID_REG_VGAIG_FMT_BYTESPERSCANLINE (0x00684593UL) /* integrated device fmt/bytes per scanline (16:16 FMT:BYTESPERSCANLINE) */ +/* fmt codes must match enum VGA_DOSBoxIG_VidFormat << 16 */ +# define DOSBOX_ID_REG_VGAIG_FMT_MASK (0xFFUL << 16UL)/* mask value to extract format */ +# define DOSBOX_ID_REG_VGAIG_FMT_NONE (0x00UL << 16UL)/* none (blank screen) */ +# define DOSBOX_ID_REG_VGAIG_FMT_1BPP (0x01UL << 16UL)/* 1bpp */ +# define DOSBOX_ID_REG_VGAIG_FMT_4BPP (0x02UL << 16UL)/* 4bpp */ +# define DOSBOX_ID_REG_VGAIG_FMT_8BPP (0x03UL << 16UL)/* 8bpp */ +# define DOSBOX_ID_REG_VGAIG_FMT_15BPP (0x04UL << 16UL)/* 15bpp 1:5:5:5 */ +# define DOSBOX_ID_REG_VGAIG_FMT_16BPP (0x05UL << 16UL)/* 16bpp 5:6:5 */ +# define DOSBOX_ID_REG_VGAIG_FMT_24BPP8 (0x06UL << 16UL)/* 24bpp 8:8:8 */ +# define DOSBOX_ID_REG_VGAIG_FMT_32BPP8 (0x07UL << 16UL)/* 32bpp 8:8:8:8 */ +# define DOSBOX_ID_REG_VGAIG_FMT_32BPP10 (0x08UL << 16UL)/* 32bpp 2:10:10:10 */ +# define DOSBOX_ID_REG_VGAIG_FMT_1BPP4PLANE (0x09UL << 16UL)/* 1bpp planar */ +#define DOSBOX_ID_REG_VGAIG_REFRESHRATE (0x00684594UL) /* integrated device refresh rate as a 16.16 fixed point number */ +#define DOSBOX_ID_REG_VGAIG_DISPLAYOFFSET (0x00684595UL) /* display video memory offset */ +#define DOSBOX_ID_REG_VGAIG_HVPELSCALE (0x00684596UL) /* h/v scale and h/v pel (8:8:8:8 = vscale:hscale:vpel:hpel) */ +#define DOSBOX_ID_REG_VGAIG_BANKWINDOW (0x00684597UL) /* bank switching window offset (4KB granularity) */ +#define DOSBOX_ID_REG_VGAIG_ASPECTRATIO (0x00684598UL) /* display aspect ratio (16:16 = h:w), set to zero for square pixels */ +#define DOSBOX_ID_REG_VGAIG_CAPS (0x00684599UL) /* read-only capabilities, 0 if machine type is not DOSBox IG */ +# define DOSBOX_ID_REG_VGAIG_CAPS_ENABLED (1UL << 0UL) /* DOSBox IG is enabled (machine=svga_dosbox) */ +#define DOSBOX_ID_REG_VGAIG_RBANKWINDOW (0x0068459AUL) /* read bank switching window offset (4KB granularity) */ +#define DOSBOX_ID_REG_VGAIG_WBANKWINDOW (0x0068459BUL) /* write bank switching window offset (4KB granularity) */ +#define DOSBOX_ID_REG_GET_VGA_SIZE (0x006845C0UL) /* size of the VGA screen */ +#define DOSBOX_ID_REG_GET_WINDOW_SIZE (0x006845FFUL) /* size of the emulator window (to give USER_MOUSE_CURSOR meaning) */ + +#define DOSBOX_ID_REG_8042_KB_INJECT (0x00804200UL) +# define DOSBOX_ID_8042_KB_INJECT_KB (0x00UL << 8UL) +# define DOSBOX_ID_8042_KB_INJECT_AUX (0x01UL << 8UL) +# define DOSBOX_ID_8042_KB_INJECT_MOUSEBTN (0x08UL << 8UL) +# define DOSBOX_ID_8042_KB_INJECT_MOUSEMX (0x09UL << 8UL) +# define DOSBOX_ID_8042_KB_INJECT_MOUSEMY (0x0AUL << 8UL) +# define DOSBOX_ID_8042_KB_INJECT_MOUSESCRW (0x0BUL << 8UL) + +#define DOSBOX_ID_REG_8042_KB_STATUS (0x00804201UL) +/* WARNING: bitfields may change over time! */ +# define DOSBOX_ID_8042_KB_STATUS_LED_STATE_SHIFT (0UL) +# define DOSBOX_ID_8042_KB_STATUS_LED_STATE_MASK (0xFFUL << DOSBOX_ID_8042_KB_STATUS_LED_STATE_SHIFT) +# define DOSBOX_ID_8042_KB_STATUS_SCANSET_SHIFT (8UL) +# define DOSBOX_ID_8042_KB_STATUS_SCANSET_MASK (0x3UL << DOSBOX_ID_8042_KB_STATUS_SCANSET_SHIFT) +# define DOSBOX_ID_8042_KB_STATUS_RESET (0x1UL << 10UL) +# define DOSBOX_ID_8042_KB_STATUS_ACTIVE (0x1UL << 11UL) +# define DOSBOX_ID_8042_KB_STATUS_SCANNING (0x1UL << 12UL) +# define DOSBOX_ID_8042_KB_STATUS_AUXACTIVE (0x1UL << 13UL) +# define DOSBOX_ID_8042_KB_STATUS_SCHEDULED (0x1UL << 14UL) +# define DOSBOX_ID_8042_KB_STATUS_P60CHANGED (0x1UL << 15UL) +# define DOSBOX_ID_8042_KB_STATUS_AUXCHANGED (0x1UL << 16UL) +# define DOSBOX_ID_8042_KB_STATUS_CB_XLAT (0x1UL << 17UL) +# define DOSBOX_ID_8042_KB_STATUS_PS2_MOUSE_LBTN (0x1UL << 18UL) +# define DOSBOX_ID_8042_KB_STATUS_PS2_MOUSE_MBTN (0x1UL << 19UL) +# define DOSBOX_ID_8042_KB_STATUS_PS2_MOUSE_RBTN (0x1UL << 20UL) +# define DOSBOX_ID_8042_KB_STATUS_MOUSE_REPORTING (0x1UL << 21UL) +# define DOSBOX_ID_8042_KB_STATUS_MOUSE_STREAM_MODE (0x1UL << 22UL) +# define DOSBOX_ID_8042_KB_STATUS_MOUSE_LBTN (0x1UL << 23UL) +# define DOSBOX_ID_8042_KB_STATUS_MOUSE_RBTN (0x1UL << 24UL) +# define DOSBOX_ID_8042_KB_STATUS_MOUSE_MBTN (0x1UL << 25UL) + +#define DOSBOX_ID_REG_INJECT_NMI (0x00808602UL) + +#define DOSBOX_ID_REG_CPU_CYCLES (0x55504300UL) /* fixed cycle count, which may vary if max or auto */ +#define DOSBOX_ID_REG_CPU_MAX_PERCENT (0x55504301UL) /* for max cycles, percentage from 0 to 100 */ +#define DOSBOX_ID_REG_CPU_CYCLES_INFO (0x55504302UL) /* info about cycles, including fixed, auto, max */ +# define DOSBOX_ID_REG_CPU_CYCLES_INFO_MODE_MASK (0xFUL << 0UL) +# define DOSBOX_ID_REG_CPU_CYCLES_INFO_FIXED (1UL << 0UL) +# define DOSBOX_ID_REG_CPU_CYCLES_INFO_MAX (2UL << 0UL) +# define DOSBOX_ID_REG_CPU_CYCLES_INFO_AUTO (3UL << 0UL) + +#define DOSBOX_ID_REG_8237_INJECT_WRITE (0x00823700UL) +#define DOSBOX_ID_REG_8237_INJECT_READ (0x00823780UL) + +#define DOSBOX_ID_REG_8259_INJECT_IRQ (0x00825900UL) +#define DOSBOX_ID_REG_8259_PIC_INFO (0x00825901UL) + +#define DOSBOX_ID_REG_SCREENSHOT_TRIGGER (0x00C54010UL) +/* DOSBOX_ID_REG_SCREENSHOT_TRIGGER bitfield for writing */ +# define DOSBOX_ID_SCREENSHOT_IMAGE (1UL << 0UL) /* trigger a screenshot. wait for vertical retrace, then read the register to check it happened */ +# define DOSBOX_ID_SCREENSHOT_VIDEO (1UL << 1UL) /* toggle on/off video capture */ +# define DOSBOX_ID_SCREENSHOT_WAVE (1UL << 2UL) /* toggle on/off WAVE capture */ +/* DOSBOX_ID_REG_SCREENSHOT_TRIGGER readback */ +# define DOSBOX_ID_SCREENSHOT_STATUS_IMAGE_IN_PROGRESS (1UL << 0UL) /* if set, DOSBox is prepared to write a screenshot on vertical retrace. will clear itself when it happens */ +# define DOSBOX_ID_SCREENSHOT_STATUS_VIDEO_IN_PROGRESS (1UL << 1UL) /* if set, DOSBox is capturing video. */ +# define DOSBOX_ID_SCREENSHOT_STATUS_WAVE_IN_PROGRESS (1UL << 2UL) /* if set, DOSBox is capturing WAVE audio */ +# define DOSBOX_ID_SCREENSHOT_STATUS_NOT_ENABLED (1UL << 30UL) /* if set, DOSBox has not enabled this register. */ +# define DOSBOX_ID_SCREENSHOT_STATUS_NOT_AVAILABLE (1UL << 31UL) /* if set, DOSBox was compiled without screenshot/video support (C_SSHOT not defined) */ + +#define DOSBOX_ID_REG_DOS_KERNEL_STATUS (0x4B6F4400UL) +#define DOSBOX_ID_REG_DOS_KERNEL_CODEPAGE (0x4B6F4401UL) +#define DOSBOX_ID_REG_DOS_KERNEL_COUNTRY (0x4B6F4402UL) +#define DOSBOX_ID_REG_DOS_KERNEL_VERSION_MAJOR (0x4B6F4403UL) +#define DOSBOX_ID_REG_DOS_KERNEL_VERSION_MINOR (0x4B6F4404UL) +#define DOSBOX_ID_REG_DOS_KERNEL_ERROR_CODE (0x4B6F4405UL) +#define DOSBOX_ID_REG_DOS_KERNEL_BOOT_DRIVE (0x4B6F4406UL) +#define DOSBOX_ID_REG_DOS_KERNEL_CURRENT_DRIVE (0x4B6F4407UL) +#define DOSBOX_ID_REG_DOS_KERNEL_LFN_STATUS (0x4B6F4408UL) + +#define DOSBOX_ID_REG_MIXER_QUERY (0x5158494DUL) + +#define DOSBOX_ID_REG_SET_WATCHDOG (0x57415444UL) + +/* return value of DOSBOX_ID_REG_IDENTIFY */ +#define DOSBOX_ID_IDENTIFICATION (0xD05B0740UL) + +#ifndef DOSBOX_INCLUDE +static inline void dosbox_id_reset_latch() { + outp(DOSBOX_IDPORT(DOSBOX_ID_COMMAND),DOSBOX_ID_CMD_RESET_LATCH); +} + +static inline void dosbox_id_reset_interface() { + outp(DOSBOX_IDPORT(DOSBOX_ID_COMMAND),DOSBOX_ID_CMD_RESET_INTERFACE); +} + +static inline void dosbox_id_flush_write() { + outp(DOSBOX_IDPORT(DOSBOX_ID_COMMAND),DOSBOX_ID_CMD_FLUSH_WRITE); +} + +static inline uint8_t dosbox_id_read_data_nrl_u8() { + return inp(DOSBOX_IDPORT(DOSBOX_ID_DATA)); +} + +static inline void dosbox_id_write_data_nrl_u8(const unsigned char c) { + outp(DOSBOX_IDPORT(DOSBOX_ID_DATA),c); +} + +static inline void dosbox_id_push_state() { + outp(DOSBOX_IDPORT(DOSBOX_ID_COMMAND),DOSBOX_ID_CMD_PUSH_STATE); +} + +static inline void dosbox_id_pop_state() { + outp(DOSBOX_IDPORT(DOSBOX_ID_COMMAND),DOSBOX_ID_CMD_POP_STATE); +} + +static inline void dosbox_id_discard_state() { + outp(DOSBOX_IDPORT(DOSBOX_ID_COMMAND),DOSBOX_ID_CMD_DISCARD_STATE); +} + +static inline void dosbox_id_discard_all_state() { + outp(DOSBOX_IDPORT(DOSBOX_ID_COMMAND),DOSBOX_ID_CMD_DISCARD_ALL_STATE); +} + +uint32_t dosbox_id_read_regsel(); +void dosbox_id_write_regsel(const uint32_t reg); +uint32_t dosbox_id_read_data_nrl(); +uint32_t dosbox_id_read_data(); +int dosbox_id_reset(); +uint32_t dosbox_id_read_identification(); +int probe_dosbox_id(); +int probe_dosbox_id_version_string(char *buf,size_t len); +void dosbox_id_write_data_nrl(const uint32_t val); +void dosbox_id_write_data(const uint32_t val); +void dosbox_id_debug_message(const char *str); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __DOSLIB_HW_IDE_DOSBOXIGLIB_H */ + diff --git a/include/ioapi.h b/include/ioapi.h index a743301728b..ef487172f5a 100644 --- a/include/ioapi.h +++ b/include/ioapi.h @@ -44,7 +44,7 @@ #include // #include "zlib.h" -#if defined(__APPLE__) || defined(USE_FILE32API) +#if defined(__APPLE__) || defined(USE_FILE32API) || defined(OS2) #define fopen64 fopen #define ftello64 ftell #define fseeko64 fseek diff --git a/include/ipx.h b/include/ipx.h index a61c560cc57..dd8aa2a20f4 100644 --- a/include/ipx.h +++ b/include/ipx.h @@ -65,7 +65,11 @@ #endif // For Uint8 type +#if defined(C_SDL2_NET) && C_SDL2_NET +#include +#else #include "SDL_net.h" +#endif #ifndef SDLNet_GetError #define SDLNet_GetError SDL_GetError diff --git a/include/ipxserver.h b/include/ipxserver.h index 4efaab87509..fea5d98045f 100644 --- a/include/ipxserver.h +++ b/include/ipxserver.h @@ -21,7 +21,11 @@ #if C_IPX +#if defined(C_SDL2_NET) && C_SDL2_NET +#include +#else #include "SDL_net.h" +#endif struct packetBuffer { uint8_t buffer[1024]; diff --git a/include/jfont.h b/include/jfont.h index 23ffd42bcc3..a6e15a29f75 100644 --- a/include/jfont.h +++ b/include/jfont.h @@ -83,6 +83,7 @@ bool J3_IsJapanese(); void INT8_J3(); void INT60_J3_Setup(); uint8_t GetKanjiAttr(); +uint8_t GetKanjiAttr(Bitu x, Bitu y); uint16_t GetGaijiSeg(); uint16_t J3_GetMachineCode(); void J3_SetBiosArea(uint16_t mode); diff --git a/include/mem.h b/include/mem.h index dac1512fabd..ad979b1fa78 100644 --- a/include/mem.h +++ b/include/mem.h @@ -60,6 +60,7 @@ Bitu MEM_FreeTotal(void); //Free 4 kb pages Bitu MEM_FreeLargest(void); //Largest free 4 kb pages block Bitu MEM_TotalPages(void); //Total amount of 4 kb pages Bitu MEM_TotalPagesAt4GB(void); //Total amount of 4 kb pages starting at 4GB +Bitu MEM_ConventionalPages(void); Bitu MEM_AllocatedPages(MemHandle handle); // amount of allocated pages of handle MemHandle MEM_AllocatePages(Bitu pages,bool sequence); MemHandle MEM_AllocatePages_A20_friendly(Bitu pages,bool sequence); diff --git a/include/menu.h b/include/menu.h index e6574b42513..e7a6ab6d6cc 100644 --- a/include/menu.h +++ b/include/menu.h @@ -330,6 +330,18 @@ class DOSBoxMenu { return *this; } +#if __APPLE__ && __MAC_OS_X_VERSION_MIN_REQUIRED < 101300 + /* A copy of check() required to avoid conflict in macro definition */ + inline item &check2(const bool f=true) { + if (status.checked != f) { + status.checked = f; + if (can_check() && has_vis_checked()) + status.changed = 1; + } + + return *this; + } +#endif inline bool is_checked(void) const { return status.checked; } diff --git a/include/mouse.h b/include/mouse.h index 89590a71c56..c78acb19544 100644 --- a/include/mouse.h +++ b/include/mouse.h @@ -127,6 +127,7 @@ struct mouse_t { bool first_range_setx; bool first_range_sety; bool in_UIR; + bool polled; uint8_t mode; int16_t gran_x,gran_y; int scrollwheel; @@ -136,6 +137,7 @@ struct mouse_t { uint8_t ps2_unlock_idx; }; + extern mouse_t mouse; extern void Mouse_AddEvent(uint8_t type); #endif diff --git a/include/np2glue.h b/include/np2glue.h index 13565da1a3e..f6a9e5b5af6 100644 --- a/include/np2glue.h +++ b/include/np2glue.h @@ -27,7 +27,7 @@ #define MAX_PATH PATH_MAX #endif -#ifdef WIN32 +#if defined(WIN32) || defined(OS2) # define BYTESEX_LITTLE # define _G_DIR_SEPARATOR '\\' #elif defined(EMSCRIPTEN) diff --git a/include/pci_bus.h b/include/pci_bus.h index 9e8edd4241c..bae0700d721 100644 --- a/include/pci_bus.h +++ b/include/pci_bus.h @@ -84,7 +84,7 @@ class PCI_Device { /* NTS: If I recall, this virtual function call means that we'll call the * C++ subclass's config_read() NOT our own--right? */ for (Bitu i=0;i < iolen;i++) - v += ((config_read((uint8_t)(regnum+i),1)&0xFF) << ((iolen-i-1)*8)); + v += ((config_read((uint8_t)(regnum+i),1)&0xFF) << (i*8)); } return v; @@ -96,6 +96,9 @@ bool PCI_IsInitialized(); void PCI_AddSVGAS3_Device(void); void PCI_RemoveSVGAS3_Device(void); +void PCI_AddSVGADOSBoxIG_Device(void); +void PCI_RemoveSVGADOSBoxIG_Device(void); + void PCI_AddSST_Device(Bitu type); void PCI_RemoveSST_Device(void); diff --git a/include/pic.h b/include/pic.h index 850397d1fd4..10593ec5649 100644 --- a/include/pic.h +++ b/include/pic.h @@ -75,6 +75,7 @@ static INLINE pic_tickindex_t PIC_FullIndex(void) { void PIC_ActivateIRQ(Bitu irq); void PIC_DeActivateIRQ(Bitu irq); +void PIC_EdgeTrigger(Bitu irq,bool set=true); void PIC_runIRQs(void); bool PIC_RunQueue(void); diff --git a/include/qcow2_disk.h b/include/qcow2_disk.h index 3e7c10144c2..0f59c33d521 100644 --- a/include/qcow2_disk.h +++ b/include/qcow2_disk.h @@ -120,7 +120,7 @@ class QCow2Disk : public imageDisk{ public: - QCow2Disk(QCow2Image::QCow2Header& qcow2Header, FILE *qcow2File, const char *imgName, uint32_t imgSizeK, uint32_t sectorSizeBytes, bool isHardDisk); + QCow2Disk(QCow2Image::QCow2Header& qcow2Header, FILE *qcow2File, const char *imgName, uint64_t imgSize, uint32_t sectorSizeBytes, bool isHardDisk); ~QCow2Disk(); diff --git a/include/render.h b/include/render.h index 84aefeec7a6..ab0817f9421 100644 --- a/include/render.h +++ b/include/render.h @@ -34,7 +34,7 @@ enum ASPECT_MODES { ASPECT_FALSE = 0 ,ASPECT_TRUE -#if C_SURFACE_POSTRENDER_ASPECT +#if C_SURFACE_POSTRENDER_ASPECT || ((defined(WIN32) || defined(MACOSX)) && defined(C_SDL2)) ,ASPECT_NEAREST ,ASPECT_BILINEAR #endif @@ -94,6 +94,7 @@ typedef struct Render_t { uint8_t *outWrite; Bitu cachePitch; uint8_t *cacheRead; + Bitu frameCachePitch; Bitu inHeight, inLine, outLine; } scale; struct { @@ -102,13 +103,14 @@ typedef struct Render_t { } cache; #if C_OPENGL char* shader_src; - bool shader_def=false; + bool shader_def=false; #endif - RenderPal_t pal; + RenderPal_t pal; bool updating; bool active; int aspect; - bool aspectOffload; + bool aspectOffload; + bool disablerender; bool fullFrame; bool forceUpdate; bool autofit; @@ -191,4 +193,9 @@ void RENDER_SetPal(uint8_t entry,uint8_t red,uint8_t green,uint8_t blue); bool RENDER_GetForceUpdate(void); void RENDER_SetForceUpdate(bool); +bool TempLineAlloc(unsigned int w); +void TempLineFree(void); +void scalerSourceCacheBufferFree(void); +bool scalerSourceCacheBufferAlloc(unsigned int p,unsigned int h); + #endif diff --git a/include/sdlmain.h b/include/sdlmain.h index 656405199e9..c2c999055f5 100644 --- a/include/sdlmain.h +++ b/include/sdlmain.h @@ -24,6 +24,12 @@ enum SCREEN_TYPES { #endif ,SCREEN_TTF ,SCREEN_GAMELINK +#if C_DIRECT3D && defined(C_SDL2) + ,SCREEN_DIRECT3D11 +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + , SCREEN_METAL +#endif }; enum AUTOLOCK_FEEDBACK @@ -163,7 +169,6 @@ struct SDL_Block { } texture; #endif int displayNumber = 0; - SDL_cond *cond = NULL; struct { bool autolock = false; AUTOLOCK_FEEDBACK autolock_feedback = (AUTOLOCK_FEEDBACK)0; @@ -174,6 +179,9 @@ struct SDL_Block { int ysensitivity = 0; MOUSE_EMULATION emulation = (MOUSE_EMULATION)0; } mouse; +#if defined(C_SDL2) + bool capture_keyboard = false; +#endif SDL_Rect updateRects[1024] = {}; Bitu overscan_color = 0; Bitu overscan_width = 0; @@ -240,6 +248,10 @@ SDL_Window* GFX_SetSDLWindowMode(uint16_t width, uint16_t height, SCREEN_TYPES s void SDL_GL_SwapBuffers(void); #endif +#if defined(C_SDL2) +void GFX_KeyboardCapture(bool enabled); +#endif + #if defined(WIN32) && !defined(HX_DOS) extern int curscreen; extern RECT monrect; diff --git a/include/shell.h b/include/shell.h index f82233612c6..f17e950af23 100644 --- a/include/shell.h +++ b/include/shell.h @@ -110,6 +110,10 @@ class DOS_Shell : public Program { DOS_Shell(); virtual ~DOS_Shell(); +#if defined(OSFREE) + bool OSFreeOperatingSystemNotFound(void); +#endif + void Prepare(void); /*! \brief Program entry point, when the command is run */ @@ -364,7 +368,20 @@ class DOS_Shell : public Program { bool lfnfor; /* Status */ bool input_eof; //! STDIN has hit EOF + bool config_shell = false; +}; + +#if !defined(OSFREE) +class DOS_ConfigShell : public DOS_Shell { +public: + DOS_ConfigShell(); + virtual ~DOS_ConfigShell(); + + /*! \brief Program entry point, when the command is run + */ + void Run(void) override; }; +#endif struct SHELL_Cmd { const char * name; /* Command name*/ diff --git a/include/version_string.h b/include/version_string.h index 73c17881a3b..e553eeeb5fc 100644 --- a/include/version_string.h +++ b/include/version_string.h @@ -31,8 +31,13 @@ #define OS_PLATFORM_LONG "Visual Studio ARM" #endif #elif defined(__MINGW32__) +#ifdef _UCRT +#define OS_PLATFORM "UCRT" +#define OS_PLATFORM_LONG "UCRT" +#else #define OS_PLATFORM "MinGW" #define OS_PLATFORM_LONG "MinGW" +#endif #else #define OS_PLATFORM "Windows" #define OS_PLATFORM_LONG "Windows" diff --git a/include/vga.h b/include/vga.h index 821e72fe76b..6b549aaad3a 100644 --- a/include/vga.h +++ b/include/vga.h @@ -163,7 +163,7 @@ inline MonochromeColor& operator++(MonochromeColor& color) return color; } -typedef struct { +struct VGA_Draw { bool resizing; Bitu width; Bitu height; @@ -173,7 +173,7 @@ typedef struct { Bitu bytes_skip; uint8_t *linear_base; Bitu linear_mask; - Bitu planar_mask; + Bitu planar_mask; Bitu address_add; Bitu line_length; Bitu address_line_total; @@ -184,7 +184,7 @@ typedef struct { Bitu split_line; Bitu hsync_events; Bitu byte_panning_shift; - Bitu render_step,render_max; + Bitu render_step,render_max; struct { double framestart; double vrstart, vrend; // V-retrace @@ -210,20 +210,33 @@ typedef struct { } cursor; Drawmode mode; bool has_split; + bool must_draw_again; + bool must_complete_frame; bool vret_triggered; bool vga_override; + bool modeswitch_set; bool doublescan_set; bool doublescan_effect; bool char9_set; Bitu bpp; double clock; double oscclock; + + /* memory write checker will do: + * + * if ((addr-draw_base_planar) < draw_base_size) + * ... + * + * memory write checking must be as simple as possible because mem write code is called VERY OFTEN */ + unsigned int draw_base_planar = 0; + unsigned int draw_base_size = 0; + uint8_t cga_snow[80]; // one bit per horizontal column where snow should occur /*Color and brightness for monochrome display*/ MonochromeColor monochrome_pal; uint8_t monochrome_bright; -} VGA_Draw; +}; typedef struct { uint8_t curmode; @@ -581,6 +594,7 @@ typedef struct { uint8_t bank_read; uint8_t bank_write; Bitu bank_size; + uint16_t bank_mask; } VGA_SVGA; typedef union CGA_Latch { @@ -607,6 +621,7 @@ typedef struct VGA_Memory_t { uint32_t memmask = 0; uint32_t memmask_crtc = 0; // in CRTC-visible units (depends on byte/word/dword mode) uint32_t memsize_original = 0; // memsize prior to rounding up to a power of 2 + uint32_t vbe_memsize = 0; // memory size reported through the VBE } VGA_Memory; typedef struct { @@ -656,6 +671,45 @@ typedef struct VGA_Override_t { uint32_t start = ~uint32_t(0u); } VGA_Override; +enum VGA_DOSBoxIG_VidFormat { + DBIGVF_NONE=0, // none (blank screen) + DBIGVF_1BPP=1, // 1bpp monochrome + DBIGVF_4BPP=2, // 4bpp packed 16-color + DBIGVF_8BPP=3, // 8bpp packed 256-color + DBIGVF_15BPP=4, // 16bpp R:G:B 1:5:5:5 + DBIGVF_16BPP=5, // 16bpp R:G:B 5:6:5 + DBIGVF_24BPP8=6, // 24bpp RGB + DBIGVF_32BPP8=7, // 32bpp XRGB 8:8:8:8 + DBIGVF_32BPP10=8, // 32bpp XRGB 2:10:10:10 + DBIGVF_1BPP4PLANE=9 // 1bpp planar +}; + +typedef struct VGA_DOSBoxIG { + bool svga = false; /* override VGA output with DOSBoxIG SVGA graphics */ + bool vga_reg_lockout = false; /* lock out standard VGA registers except 3BAh/3DAh and DAC registers */ + bool vga_3da_lockout = false; /* lock out port 3BAh/3DAh */ + bool vga_dac_lockout = false; /* lock out DAC registers */ + bool vga_acpal_bypass = false; /* VGA DAC bypass AC palette */ + bool override_refresh = false; /* force a refresh rate */ + bool vesa_bios_lockout = false; /* disable VESA BIOS modesetting (for Windows driver) */ + bool force_A0000 = false; /* force VGA memory map to A0000-AFFFF */ + unsigned int width = 16; + unsigned int height = 16; + unsigned int bytes_per_scanline = 0; + unsigned int wa_total = 0,ha_total = 0; /* additional cols/rows to add to get htotal/vtotal */ + uint16_t dar_width = 0,dar_height = 0; /* display aspect ratio, if nonzero */ + uint32_t vratefp16 = 0; /* video sync rate as a fixed point 16.16 number */ + uint32_t display_offset = 0; /* offset in video memory to display */ + uint32_t rbank_offset = 0; /* offset of 64KB bank window in video memory */ + uint32_t wbank_offset = 0; /* offset of 64KB bank window in video memory */ + uint8_t vidformat = 0; /* video pixel format (VGA_DOSBoxIG_VidFormat) */ + uint8_t hpel = 0; /* horizontal pan */ + uint8_t vpel = 0; /* vertical pan */ + uint8_t hscale = 0; /* horizontal pixel duplication */ + uint8_t vscale = 0; /* vertical pixel duplication */ + uint32_t ctlreg = 0; /* raw data written to CTL register */ +} VGA_DOSBoxIG; + typedef struct VGA_Type_t { VGAModes mode = {}; /* The mode the vga system is in */ VGAModes lastmode = {}; @@ -680,6 +734,8 @@ typedef struct VGA_Type_t { VGA_LFB lfb = {}; VGA_Complexity complexity = {}; VGA_Override overopts = {}; + VGA_DOSBoxIG dosboxig = {}; + unsigned int max_svga_width = 0,max_svga_height = 0; } VGA_Type; diff --git a/make-flatpak.sh b/make-flatpak.sh index 5a1c9bb5292..777948ef8fb 100755 --- a/make-flatpak.sh +++ b/make-flatpak.sh @@ -1,11 +1,11 @@ -#!/usr/bin/env bash +#!/bin/sh -if [[ ! -x $(which flatpak-builder) ]]; then +if [ ! -x $(which flatpak-builder) ]; then echo "Please install flatpak-builder" exit fi -if [[ ! $(flatpak list|grep -c org.freedesktop.Sdk) -ge 1 ]]; then +if [ ! $(flatpak list|grep -c org.freedesktop.Sdk) -ge 1 ]; then echo "Please ensure the necessary SDK and matching runtime are installed by running:" echo "flatpak install flathub org.freedesktop.Platform//22.08 org.freedesktop.Sdk//22.08" exit diff --git a/merge-dev-to-master.sh b/merge-dev-to-master.sh index 557b5235427..baafe88e380 100755 --- a/merge-dev-to-master.sh +++ b/merge-dev-to-master.sh @@ -1,7 +1,7 @@ -#!/usr/bin/env bash +#!/bin/sh curbranch=$(git branch --show-current) -if [[ "${curbranch}" == "master" || "${curbranch}" == "develop" ]]; then +if [ "${curbranch}" = "master" ] || [ "${curbranch}" = "develop" ]; then rm -f include/build_timestamp.h git checkout include/build_timestamp.h diff --git a/merge-to-win-ci b/merge-to-win-ci index 03653742eeb..fe0be546485 100755 --- a/merge-to-win-ci +++ b/merge-to-win-ci @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh doit() { git checkout master-win-ci || return 1 diff --git a/mod2wav.sh b/mod2wav.sh index 22f07d52820..7112dabfcb7 100755 --- a/mod2wav.sh +++ b/mod2wav.sh @@ -1,2 +1,2 @@ -#!/usr/bin/env bash +#!/bin/sh mikmod -o 16s -f 48000 -hq -p 0 -d wav,file="${1}.wav" "${1}" diff --git a/mtavi2wav.sh b/mtavi2wav.sh index 893a587f5fd..1e1efcf4919 100755 --- a/mtavi2wav.sh +++ b/mtavi2wav.sh @@ -1,19 +1,22 @@ -#!/usr/bin/env bash +#!/bin/sh # # Stupid multitrack audio hack for stupid Premiere. # Turns a DOSBox-X multitrack AVI capture into several WAV files. # Requires FFMPEG 3.0 or higher. # get the track names. DOSBox-X always writes track names -declare -a NAMES -for x in $(ffprobe "${1}" 2>&1 | grep title | cut -d ':' -f 2 | sed -e 's/^ *//'); do - NAMES=("${NAMES[@]}" "${x}") -done +NAMES="" +while IFS= read -r line; do + line=$(echo "$line" | grep title | cut -d ':' -f 2 | sed -e 's/^ *//') + [ -n "$line" ] && NAMES="${NAMES}${NAMES:+ }${line}" +done <&1) +EOF # do it i=0 -for name in "${NAMES[@]}"; do - name="${name// /_}" # in case of spaces - ffmpeg -i "${1}" -acodec copy -map 0:${i} -vn -y -f wav "${1}.${i}-${name}.wav" || break +for name in $NAMES; do + name=$(echo "$name" | tr ' ' '_') # in case of spaces + ffmpeg -i "${1}" -acodec copy -map "0:${i}" -vn -y -f wav "${1}.${i}-${name}.wav" || break i=$((i+1)) done diff --git a/mts_to_1080p.sh b/mts_to_1080p.sh index 4a47a0d4104..1700ea465ad 100755 --- a/mts_to_1080p.sh +++ b/mts_to_1080p.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh file="${1}" bitrate=15000000 aspect_ratio=4:3 diff --git a/mts_to_2160p.sh b/mts_to_2160p.sh index c8ffde6f3a3..f9493165b7d 100755 --- a/mts_to_2160p.sh +++ b/mts_to_2160p.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh file="${1}" bitrate=15000000 aspect_ratio=4:3 diff --git a/mts_to_720p.sh b/mts_to_720p.sh index bf5a1df6207..46e1e79ac37 100755 --- a/mts_to_720p.sh +++ b/mts_to_720p.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh file="${1}" bitrate=15000000 aspect_ratio=4:3 diff --git a/scaleup-4x3-mp4-to-1080p.sh b/scaleup-4x3-mp4-to-1080p.sh index 13a4f0b8c45..701189ee776 100755 --- a/scaleup-4x3-mp4-to-1080p.sh +++ b/scaleup-4x3-mp4-to-1080p.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh src="${1}" dst="${1}.1080p.mp4" diff --git a/scaleup-4x3-mts-to-1080p.sh b/scaleup-4x3-mts-to-1080p.sh index f5b16d963e8..f172e445a33 100755 --- a/scaleup-4x3-mts-to-1080p.sh +++ b/scaleup-4x3-mts-to-1080p.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh src="${1}" dst="${1}.1080p.mp4" diff --git a/src/Makefile.am b/src/Makefile.am index 2664be96300..de38afc64c8 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -15,7 +15,8 @@ res_DATA = \ ../dosbox-x.reference.conf \ ../dosbox-x.reference.full.conf \ ../contrib/fonts/FREECG98.BMP \ - ../contrib/fonts/wqy_1?pt.bdf \ + ../contrib/fonts/wqy_11pt.bdf \ + ../contrib/fonts/wqy_12pt.bdf \ ../contrib/fonts/Nouveau_IBM.ttf \ ../contrib/fonts/SarasaGothicFixed.ttf \ ../CHANGELOG @@ -32,7 +33,15 @@ dosbox_x_LDADD = debug/libdebug.a dos/libdos.a shell/libshell.a builtin/libbuilt ints/libints.a hardware/serialport/libserial.a hardware/parport/libparallel.a \ libs/passthroughio/libpassthroughio.a gui/libgui.a libs/gui_tk/libgui_tk.a hardware/libhardware.a \ cpu/libcpu.a hardware/reSID/libresid.a fpu/libfpu.a gui/libgui.a \ - misc/libmisc.a output/liboutput.a hardware/mame/libmame.a libs/zmbv/libzmbv.a libs/decoders/internal/libopusint.a + misc/libmisc.a output/liboutput.a hardware/mame/libmame.a libs/zmbv/libzmbv.a libs/decoders/internal/libopusint.a dos/libdos.a + +if OS2 +dosbox_x_LDADD += os2res.res + +.rc.res: + wrc $< -i=. -r $@ + +endif if !EMSCRIPTEN dosbox_x_LDADD += aviwriter/libaviwriter.a @@ -49,6 +58,10 @@ if C_DIRECT3D dosbox_x_LDADD += output/direct3d/liboutputdirect3d.a endif +if C_METAL +dosbox_x_LDADD += $(METAL_LIBS) +endif + if C_XBRZ if !EMSCRIPTEN dosbox_x_LDADD += libs/xBRZ/libxbrz.a @@ -65,6 +78,10 @@ if !EMSCRIPTEN dosbox_x_LDADD += libs/fluidsynth/libfluidsynth.a endif +if DUKTAPE +dosbox_x_LDADD += -lduktape +endif + if EMSCRIPTEN dosbox_x_js: cp dosbox-x dosbox-x.js @@ -73,7 +90,7 @@ dosbox_x_js_install: sudo cp -v dosbox-x.js dosbox-x.wasm /var/www/html/em/ endif -EXTRA_DIST = winres.rc ../contrib/icons/dosbox-x.ico +EXTRA_DIST = winres.rc ../contrib/icons/dosbox-x.ico os2res.rc # Ensure the macOS universal executables are correctly removed when cleaning distclean-local: diff --git a/src/builtin/25_com.cpp b/src/builtin/25_com.cpp index c22b0dad135..0ab7256c594 100644 --- a/src/builtin/25_com.cpp +++ b/src/builtin/25_com.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_25_com[] = { 0xB8, 0x14, 0x11, 0x30, 0xDB, 0xCD, 0x10, 0xC3 }; struct BuiltinFileBlob bfb_25_COM = { @@ -24,4 +25,5 @@ struct BuiltinFileBlob bfb_25_COM_other = { /*data*/ bin_25_com_other, /*length*/ sizeof(bin_25_com_other) }; +#endif diff --git a/src/builtin/28_com.cpp b/src/builtin/28_com.cpp index b08222c8140..b900caca35c 100644 --- a/src/builtin/28_com.cpp +++ b/src/builtin/28_com.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_28_com[] = { 0xB8, 0x11, 0x11, 0x30, 0xDB, 0xCD, 0x10, 0xC3 }; struct BuiltinFileBlob bfb_28_COM = { @@ -16,4 +17,5 @@ struct BuiltinFileBlob bfb_28_COM_ega = { /*data*/ bin_28_com_ega, /*length*/ sizeof(bin_28_com_ega) }; +#endif diff --git a/src/builtin/4dos.cpp b/src/builtin/4dos.cpp index 8c6043a5a72..15ca4080594 100644 --- a/src/builtin/4dos.cpp +++ b/src/builtin/4dos.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_4dos_com[] = { 0x4D,0x5A,0x38,0x01,0x55,0x02,0xC0,0x0C,0x40,0x03,0xC0, 0x04,0xFF,0xFF,0x7B,0x48,0x00,0x20,0x00,0x00,0x41,0x88, @@ -132779,5 +132780,5 @@ struct BuiltinFileBlob bfb_OPTION_EXE = { /*recommended file name*/ "OPTION.EXE", /*data*/ bin_option_exe, /*length*/ sizeof(bin_option_exe) -} -; +}; +#endif //OSFREE diff --git a/src/builtin/50_com.cpp b/src/builtin/50_com.cpp index 2a2d3b78411..d53f63b72f4 100644 --- a/src/builtin/50_com.cpp +++ b/src/builtin/50_com.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_50_com[] = { 0xB8, 0x12, 0x11, 0x30, 0xDB, 0xCD, 0x10, 0xC3 }; struct BuiltinFileBlob bfb_50_COM = { @@ -8,4 +9,5 @@ struct BuiltinFileBlob bfb_50_COM = { /*data*/ bin_50_com, /*length*/ sizeof(bin_50_com) }; +#endif diff --git a/src/builtin/Makefile.am b/src/builtin/Makefile.am index bc57c7ef465..7d9ba5b4638 100644 --- a/src/builtin/Makefile.am +++ b/src/builtin/Makefile.am @@ -33,9 +33,11 @@ libbuiltin_a_SOURCES = \ format_exe.cpp \ chkdsk_exe.cpp \ ne2000bin.cpp \ + ipspatch.cpp \ textutil.cpp \ emsmagic.cpp \ shutdown.cpp \ + ipsmake.cpp \ glide2x.cpp \ mpxplay.cpp \ sys_com.cpp \ diff --git a/src/builtin/append_exe.cpp b/src/builtin/append_exe.cpp index 39b0d9d5883..b62869c1013 100644 --- a/src/builtin/append_exe.cpp +++ b/src/builtin/append_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_append_exe[] = { 0x4d,0x5a,0x2b,0x00,0x07,0x00,0x01,0x00,0x02,0x00,0xb2,0x01,0xb2,0x01,0x22,0x01, 0x08,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x02,0x00,0xc0,0x00, @@ -203,4 +204,5 @@ struct BuiltinFileBlob bfb_APPEND_EXE = { /*data*/ bin_append_exe, /*length*/ sizeof(bin_append_exe) }; +#endif diff --git a/src/builtin/buffers_com.cpp b/src/builtin/buffers_com.cpp index 8baa2e79ee6..543427f16b5 100644 --- a/src/builtin/buffers_com.cpp +++ b/src/builtin/buffers_com.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_buffers_com[] = { 0xE9,0xAD,0x0A,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06, @@ -303,4 +304,4 @@ struct BuiltinFileBlob bfb_BUFFERS_COM = { /*data*/ bin_buffers_com, /*length*/ sizeof(bin_buffers_com) }; - +#endif diff --git a/src/builtin/cdplay.cpp b/src/builtin/cdplay.cpp index 74c4337e43c..a41a772b244 100644 --- a/src/builtin/cdplay.cpp +++ b/src/builtin/cdplay.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_cdplay_exe[] = { 0x4D,0x5A,0x50,0x01,0x48,0x01,0x00,0x00,0x20,0x00,0xAD, 0x01,0xFF,0xFF,0x7A,0x2A,0x80,0x00,0x00,0x00,0x10,0x00, @@ -32174,4 +32175,4 @@ struct BuiltinFileBlob bfb_CDPLAY_ZIP = { /*data*/ bin_cdplay_zip, /*length*/ sizeof(bin_cdplay_zip) }; - +#endif diff --git a/src/builtin/chkdsk_exe.cpp b/src/builtin/chkdsk_exe.cpp index cf3c8862dc7..9408756beb9 100644 --- a/src/builtin/chkdsk_exe.cpp +++ b/src/builtin/chkdsk_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_chkdsk_exe[] = { 0x4d, 0x5a, 0x32, 0x01, 0x52, 0x00, 0x01, 0x00, 0x02, 0x00, 0x36, 0x11, 0xff, 0xff, 0x47, 0x1b, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -3491,4 +3492,4 @@ struct BuiltinFileBlob bfb_CHKDSK_EXE = { /*data*/ bin_chkdsk_exe, /*length*/ sizeof(bin_chkdsk_exe) }; - +#endif diff --git a/src/builtin/cwsdpmi_exe.cpp b/src/builtin/cwsdpmi_exe.cpp index a1591530540..7cb526aff6f 100644 --- a/src/builtin/cwsdpmi_exe.cpp +++ b/src/builtin/cwsdpmi_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_cwsdpmi_exe[] = { 0x4d,0x5a,0x4d,0x01,0x2a,0x00,0x19,0x00,0x20,0x00,0xa1,0x04,0xa1,0x05,0xad,0x08, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0xfb,0x30, @@ -1341,4 +1342,5 @@ struct BuiltinFileBlob bfb_CWSDPMI_EXE = { /*data*/ bin_cwsdpmi_exe, /*length*/ sizeof(bin_cwsdpmi_exe) }; +#endif diff --git a/src/builtin/cwsdpmi_exe_pc98.cpp b/src/builtin/cwsdpmi_exe_pc98.cpp index 55c872941dc..57566598eaa 100644 --- a/src/builtin/cwsdpmi_exe_pc98.cpp +++ b/src/builtin/cwsdpmi_exe_pc98.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_cwsdpmi_pc98_exe[] = { 0x4d,0x5a,0x7d,0x00,0x2b,0x00,0x17,0x00,0x20,0x00,0xa1,0x04, 0xa1,0x05,0xc0,0x08,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, @@ -1811,4 +1812,4 @@ struct BuiltinFileBlob bfb_CWSDPMI_PC98_EXE = { /*data*/ bin_cwsdpmi_pc98_exe, /*length*/ sizeof(bin_cwsdpmi_pc98_exe) }; - +#endif diff --git a/src/builtin/debug_exe.cpp b/src/builtin/debug_exe.cpp index 734f6a37dde..430628c9abc 100644 --- a/src/builtin/debug_exe.cpp +++ b/src/builtin/debug_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_debug_exe[] = { 0xe9, 0x8c, 0x55, 0xfc, 0x8c, 0xc8, 0x8e, 0xd8, 0x8e, 0xd0, 0x8b, 0x26, 0x74, 0x54, 0xc7, 0x06, 0x76, 0x54, 0x0a, 0x01, 0x1e, 0x07, 0xe8, 0x92, @@ -1882,4 +1883,5 @@ struct BuiltinFileBlob bfb_DEBUG_EXE = { /*data*/ bin_debug_exe, /*length*/ sizeof(bin_debug_exe) }; +#endif diff --git a/src/builtin/defrag_exe.cpp b/src/builtin/defrag_exe.cpp index 13c8dd58c76..f65e2ec1f8c 100644 --- a/src/builtin/defrag_exe.cpp +++ b/src/builtin/defrag_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_defrag_exe[] = { 0x4d, 0x5a, 0xe6, 0x00, 0x6a, 0x00, 0x01, 0x00, 0x02, 0x00, 0xa5, 0x18, 0xff, 0xff, 0xb1, 0x25, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -4509,4 +4510,5 @@ struct BuiltinFileBlob bfb_DEFRAG_EXE = { /*data*/ bin_defrag_exe, /*length*/ sizeof(bin_defrag_exe) }; +#endif diff --git a/src/builtin/device_com.cpp b/src/builtin/device_com.cpp index 9c875cd9832..45b33fbecf5 100644 --- a/src/builtin/device_com.cpp +++ b/src/builtin/device_com.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_device_com[] = { 0xE9, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -109,4 +110,5 @@ struct BuiltinFileBlob bfb_DEVICE_COM = { /*data*/ bin_device_com, /*length*/ sizeof(bin_device_com) }; +#endif diff --git a/src/builtin/diskcopy_exe.cpp b/src/builtin/diskcopy_exe.cpp index 4745a2b29ba..f9849bec32b 100644 --- a/src/builtin/diskcopy_exe.cpp +++ b/src/builtin/diskcopy_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_diskcopy_exe[] = { 0x4D,0x5A,0xB0,0x01,0x53,0x00,0x05,0x00,0x20,0x00,0xC8, 0x00,0xFF,0xFF,0xFB,0x0A,0x80,0x00,0x00,0x00,0x00,0x00, @@ -3865,3 +3866,5 @@ struct BuiltinFileBlob bfb_DISKCOPY_EXE = { /*data*/ bin_diskcopy_exe, /*length*/ sizeof(bin_diskcopy_exe) }; +#endif + diff --git a/src/builtin/dos32a_exe.cpp b/src/builtin/dos32a_exe.cpp index aad50aa9274..cc487de6800 100644 --- a/src/builtin/dos32a_exe.cpp +++ b/src/builtin/dos32a_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_dos32a_exe[] = { 0x4d,0x5a,0x3b,0x01,0x24,0x00,0x01,0x00,0x02,0x00,0xbf,0x02,0xff,0xff,0xb5,0x06, 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x02,0x00,0x71,0x04, @@ -1148,4 +1149,5 @@ struct BuiltinFileBlob bfb_DOS32A_EXE = { /*data*/ bin_dos32a_exe, /*length*/ sizeof(bin_dos32a_exe) }; +#endif diff --git a/src/builtin/dos4gw_exe.cpp b/src/builtin/dos4gw_exe.cpp index 277bb5ae107..00059b095cb 100644 --- a/src/builtin/dos4gw_exe.cpp +++ b/src/builtin/dos4gw_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_dos4gw_exe[] = { 0x4d,0x5a,0x24,0x00,0x7b,0x00,0x4e,0x00,0x20,0x00,0x01,0x00,0xff,0xff,0x21,0x01, 0x40,0x03,0xec,0x44,0x84,0x23,0xbd,0x01,0x1e,0x00,0x00,0x00,0x01,0x00,0x20,0x00, @@ -22113,4 +22114,5 @@ struct BuiltinFileBlob bfb_DOS4GW_EXE = { /*data*/ bin_dos4gw_exe, /*length*/ sizeof(bin_dos4gw_exe) }; +#endif diff --git a/src/builtin/dosidle_exe.cpp b/src/builtin/dosidle_exe.cpp index 332ce463ec4..11150590c31 100644 --- a/src/builtin/dosidle_exe.cpp +++ b/src/builtin/dosidle_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_dosidle_exe[] = { 0x4d,0x5a,0x8c,0x01,0x0e,0x00,0x01,0x00,0x02,0x00,0xa3,0x01,0xff,0xff,0xe2,0x02, 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x03,0x00,0xb6,0x01, @@ -449,4 +450,5 @@ struct BuiltinFileBlob bfb_DOSIDLE_EXE = { /*data*/ bin_dosidle_exe, /*length*/ sizeof(bin_dosidle_exe) }; +#endif diff --git a/src/builtin/dosmid.cpp b/src/builtin/dosmid.cpp index 740b9c969f8..b65bbb3ed69 100644 --- a/src/builtin/dosmid.cpp +++ b/src/builtin/dosmid.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_dosmid_exe[] = { 0x4D,0x5A,0xA0,0x01,0x98,0x00,0x06,0x00,0x04,0x00,0x3D, 0x03,0xFF,0xFF,0xB3,0x15,0x00,0x08,0x00,0x00,0x04,0x98, @@ -7076,4 +7077,5 @@ struct BuiltinFileBlob bfb_DOSMID_EXE = { /*data*/ bin_dosmid_exe, /*length*/ sizeof(bin_dosmid_exe) }; +#endif diff --git a/src/builtin/dsxmenu_exe_pc.cpp b/src/builtin/dsxmenu_exe_pc.cpp index f38ad36669f..2ded213d7d7 100644 --- a/src/builtin/dsxmenu_exe_pc.cpp +++ b/src/builtin/dsxmenu_exe_pc.cpp @@ -2,627 +2,811 @@ #include "dos_inc.h" static const unsigned char bin_dsxmenu_exe_pc[] = { - 0x4d, 0x5a, 0xb2, 0x01, 0x31, 0x00, 0x04, 0x00, 0x03, 0x00, 0xba, 0x00, - 0xff, 0xff, 0x52, 0x06, 0x00, 0x08, 0x00, 0x00, 0xe8, 0x1a, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x1b, 0x00, 0x00, - 0xaf, 0x1b, 0x00, 0x00, 0x94, 0x1c, 0x00, 0x00, 0x77, 0x1d, 0x00, 0x00, - 0xcc, 0xeb, 0xfd, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0xa1, 0x10, 0x06, 0x3d, 0x14, 0x00, 0x7c, - 0x04, 0x31, 0xc0, 0x5a, 0xc3, 0x89, 0xc2, 0xd1, 0xe2, 0x40, 0xd1, 0xe2, - 0xa3, 0x10, 0x06, 0xb8, 0x3a, 0x09, 0x01, 0xd0, 0x5a, 0xc3, 0x53, 0x52, - 0x83, 0x3e, 0x14, 0x06, 0x64, 0x7c, 0x06, 0xb8, 0xff, 0xff, 0x5a, 0x5b, - 0xc3, 0xe8, 0xa0, 0x0c, 0x8b, 0x16, 0x14, 0x06, 0x89, 0xd3, 0x42, 0xd1, - 0xe3, 0x89, 0x16, 0x14, 0x06, 0x89, 0x87, 0x8a, 0x09, 0x31, 0xc0, 0x5a, - 0x5b, 0xc3, 0x53, 0x83, 0x3e, 0x16, 0x06, 0x64, 0x7c, 0x05, 0xb8, 0xff, - 0xff, 0x5b, 0xc3, 0x8b, 0x1e, 0x16, 0x06, 0x88, 0x97, 0x52, 0x0a, 0xe8, - 0x72, 0x0c, 0x8b, 0x16, 0x16, 0x06, 0x89, 0xd3, 0x42, 0xd1, 0xe3, 0x89, - 0x16, 0x16, 0x06, 0x89, 0x87, 0x72, 0x08, 0x31, 0xc0, 0x5b, 0xc3, 0x83, - 0x3e, 0x18, 0x06, 0x00, 0x75, 0x09, 0xb8, 0x01, 0x10, 0xe8, 0x8b, 0x0c, - 0xa3, 0x18, 0x06, 0x83, 0x3e, 0x18, 0x06, 0x00, 0x74, 0x03, 0x31, 0xc0, - 0xc3, 0xb8, 0xff, 0xff, 0xc3, 0xa1, 0x18, 0x06, 0x85, 0xc0, 0x74, 0x08, - 0xe8, 0x29, 0x0d, 0x31, 0xc0, 0xa3, 0x18, 0x06, 0xc3, 0xb8, 0x22, 0x00, - 0x50, 0xb8, 0x40, 0x06, 0x50, 0xe8, 0xdb, 0x0d, 0x83, 0xc4, 0x04, 0xb8, - 0x45, 0x00, 0x50, 0xb8, 0x40, 0x06, 0x50, 0xe8, 0xcd, 0x0d, 0x83, 0xc4, - 0x04, 0xb8, 0x6c, 0x00, 0x50, 0xb8, 0x40, 0x06, 0x50, 0xe8, 0xbf, 0x0d, - 0x83, 0xc4, 0x04, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, - 0x50, 0x52, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xb9, 0x01, 0x00, 0xba, 0x02, - 0x00, 0x3b, 0x4e, 0xfc, 0x7c, 0x03, 0xe9, 0xb7, 0x00, 0x89, 0xd3, 0x03, - 0x5e, 0xfa, 0x8b, 0x1f, 0x41, 0x8a, 0x07, 0x42, 0x42, 0x3c, 0x2d, 0x74, - 0x04, 0x3c, 0x2f, 0x75, 0x58, 0x43, 0x8a, 0x07, 0x3c, 0x2d, 0x74, 0xf9, - 0x3c, 0x2f, 0x74, 0xf5, 0xbf, 0x91, 0x00, 0x89, 0xde, 0xac, 0x8a, 0x25, - 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, - 0xc0, 0x74, 0x2e, 0xbf, 0x93, 0x00, 0x89, 0xde, 0xac, 0x8a, 0x25, 0x2a, - 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, 0xc0, - 0x74, 0x17, 0xbf, 0x98, 0x00, 0x89, 0xde, 0xac, 0x8a, 0x25, 0x2a, 0xc4, - 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, 0xc0, 0x75, - 0x0a, 0xe8, 0x51, 0xff, 0xb8, 0xff, 0xff, 0xeb, 0x67, 0xeb, 0x33, 0xbf, - 0x9a, 0x00, 0x89, 0xde, 0xac, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, - 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, 0xc0, 0x74, 0x14, 0x53, 0xb8, - 0x9c, 0x00, 0x50, 0xb8, 0x40, 0x06, 0x50, 0xe8, 0x0d, 0x0d, 0xb8, 0xff, - 0xff, 0x83, 0xc4, 0x06, 0xeb, 0x3a, 0xc6, 0x06, 0x05, 0x06, 0x01, 0xe9, - 0x57, 0xff, 0x83, 0x7e, 0xfe, 0x00, 0x74, 0x06, 0x53, 0xb8, 0xb1, 0x00, - 0xeb, 0xdc, 0xff, 0x46, 0xfe, 0x89, 0x1e, 0x08, 0x06, 0xe9, 0x41, 0xff, - 0x83, 0x3e, 0x08, 0x06, 0x00, 0x75, 0x13, 0xb8, 0xca, 0x00, 0x50, 0xb8, - 0x40, 0x06, 0x50, 0xe8, 0xd5, 0x0c, 0xb8, 0xff, 0xff, 0x83, 0xc4, 0x04, - 0xeb, 0x02, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, - 0x53, 0x89, 0xc3, 0x85, 0xc0, 0x74, 0x0d, 0x8b, 0x07, 0x85, 0xc0, 0x74, - 0x07, 0xe8, 0xf0, 0x0b, 0xc7, 0x07, 0x00, 0x00, 0x5b, 0xc3, 0x53, 0x89, - 0xc3, 0xe8, 0xe4, 0xff, 0x85, 0xd2, 0x74, 0x07, 0x89, 0xd0, 0xe8, 0xe7, - 0x0a, 0x89, 0x07, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x57, 0x89, 0xc2, 0x89, - 0xc7, 0x89, 0xd3, 0x8c, 0xd8, 0x8e, 0xc0, 0x83, 0xc9, 0xff, 0x33, 0xc0, - 0xf2, 0xae, 0xf7, 0xd1, 0x49, 0x01, 0xcb, 0x4b, 0x39, 0xd3, 0x72, 0x0f, - 0x8a, 0x07, 0x3c, 0x0d, 0x74, 0x04, 0x3c, 0x0a, 0x75, 0x05, 0xc6, 0x07, - 0x00, 0xeb, 0xec, 0x5f, 0xe9, 0xd4, 0x05, 0x53, 0x51, 0x52, 0xbb, 0x3a, - 0x09, 0x31, 0xd2, 0x43, 0x43, 0x3b, 0x16, 0x10, 0x06, 0x73, 0x1a, 0x89, - 0xd1, 0xd1, 0xe1, 0x89, 0xd8, 0xd1, 0xe1, 0xe8, 0x8a, 0xff, 0x81, 0xc1, - 0x3a, 0x09, 0x83, 0xc3, 0x04, 0x89, 0xc8, 0x42, 0xe8, 0x7d, 0xff, 0xeb, - 0xe0, 0xbb, 0x8a, 0x09, 0x31, 0xc0, 0x31, 0xd2, 0xa3, 0x10, 0x06, 0x3b, - 0x16, 0x14, 0x06, 0x73, 0x0a, 0x89, 0xd8, 0xe8, 0x66, 0xff, 0x42, 0x43, - 0x43, 0xeb, 0xf0, 0xba, 0x72, 0x08, 0x31, 0xc0, 0x31, 0xdb, 0xa3, 0x14, - 0x06, 0x3b, 0x1e, 0x16, 0x06, 0x73, 0x0f, 0x89, 0xd0, 0xe8, 0x4c, 0xff, - 0x43, 0x42, 0x42, 0xc6, 0x87, 0x51, 0x0a, 0x00, 0xeb, 0xeb, 0x31, 0xc0, - 0xa3, 0x16, 0x06, 0xb8, 0x06, 0x06, 0xe8, 0x37, 0xff, 0xe9, 0x63, 0x05, - 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x1a, 0x31, - 0xc0, 0x89, 0x46, 0xea, 0x89, 0x46, 0xe8, 0x89, 0x46, 0xfc, 0x83, 0x3e, - 0x08, 0x06, 0x00, 0x75, 0x14, 0xb8, 0xe2, 0x00, 0x50, 0xb8, 0x40, 0x06, - 0x50, 0xe8, 0xcf, 0x0b, 0xb8, 0x01, 0x00, 0x83, 0xc4, 0x04, 0xe9, 0x2d, - 0x05, 0xe8, 0xaf, 0xfd, 0x85, 0xc0, 0x74, 0x05, 0xb8, 0xf6, 0x00, 0xeb, - 0xe3, 0xba, 0x09, 0x01, 0xa1, 0x08, 0x06, 0xe8, 0xb3, 0x0d, 0x89, 0x46, - 0xf2, 0x85, 0xc0, 0x75, 0x18, 0xff, 0x36, 0x08, 0x06, 0xb8, 0x0b, 0x01, - 0x50, 0xb8, 0x40, 0x06, 0x50, 0xe8, 0x9b, 0x0b, 0xb8, 0x01, 0x00, 0x83, - 0xc4, 0x06, 0xe9, 0xf9, 0x04, 0xe9, 0xe8, 0x01, 0x3c, 0x23, 0x74, 0x6a, - 0x84, 0xc0, 0x74, 0x66, 0x3c, 0x5b, 0x75, 0x65, 0xff, 0x46, 0xfe, 0xb2, - 0x5d, 0x8b, 0x76, 0xfe, 0x8a, 0x04, 0x3a, 0xc2, 0x74, 0x12, 0x84, 0xc0, - 0x74, 0x0c, 0x46, 0x8a, 0x04, 0x3a, 0xc2, 0x74, 0x07, 0x46, 0x84, 0xc0, - 0x75, 0xea, 0x2b, 0xf6, 0x85, 0xf6, 0x74, 0x03, 0xc6, 0x04, 0x00, 0x8b, - 0x56, 0xfe, 0x8d, 0x46, 0xea, 0xe8, 0xa6, 0xfe, 0x83, 0x7e, 0xea, 0x00, - 0x75, 0x0f, 0xb9, 0xf8, 0x00, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, 0xb8, - 0x39, 0x01, 0xe8, 0xe2, 0x0d, 0xbf, 0x51, 0x01, 0x8b, 0x76, 0xea, 0xac, - 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, - 0xe4, 0x85, 0xc0, 0x75, 0x0b, 0xc7, 0x46, 0xfc, 0x01, 0x00, 0xe9, 0x77, - 0x01, 0xe9, 0x86, 0x00, 0xbf, 0x56, 0x01, 0x8b, 0x76, 0xea, 0xac, 0x8a, - 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, - 0x85, 0xc0, 0x75, 0x07, 0xc7, 0x46, 0xfc, 0x02, 0x00, 0xeb, 0xdb, 0x8b, - 0x5e, 0xea, 0xc7, 0x46, 0xfc, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x74, 0x4e, - 0xc7, 0x46, 0xfa, 0x00, 0x00, 0xc7, 0x46, 0xf6, 0x3a, 0x09, 0x8b, 0x46, - 0xfa, 0x3b, 0x06, 0x10, 0x06, 0x73, 0x3b, 0x8b, 0x76, 0xf6, 0x83, 0x7c, - 0x02, 0x00, 0x75, 0x0f, 0xb9, 0x09, 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, - 0x01, 0xb8, 0x5d, 0x01, 0xe8, 0x68, 0x0d, 0x8b, 0x7e, 0xea, 0x8b, 0x74, - 0x02, 0xac, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, - 0xf4, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x0e, 0x8b, 0x46, 0xfa, 0xc7, 0x46, - 0xfc, 0x03, 0x00, 0x89, 0x46, 0xe8, 0xe9, 0xf7, 0x00, 0x83, 0x46, 0xf6, - 0x04, 0xff, 0x46, 0xfa, 0xeb, 0xb0, 0x8b, 0x46, 0xfc, 0x3d, 0x01, 0x00, - 0x75, 0x4f, 0xb2, 0x3d, 0x89, 0xde, 0x8a, 0x04, 0x3a, 0xc2, 0x74, 0x12, - 0x84, 0xc0, 0x74, 0x0c, 0x46, 0x8a, 0x04, 0x3a, 0xc2, 0x74, 0x07, 0x46, - 0x84, 0xc0, 0x75, 0xea, 0x2b, 0xf6, 0x85, 0xf6, 0x74, 0x64, 0xbf, 0x7a, - 0x01, 0x8d, 0x5c, 0x01, 0xc6, 0x04, 0x00, 0x8b, 0x76, 0xfe, 0xac, 0x8a, - 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, - 0x85, 0xc0, 0x75, 0x48, 0x89, 0xda, 0x31, 0xf6, 0x8a, 0x07, 0x84, 0xc0, - 0x74, 0x0a, 0x3c, 0x2c, 0x74, 0x06, 0x43, 0xeb, 0xf3, 0xe9, 0x21, 0x01, - 0x80, 0x3f, 0x2c, 0x75, 0x06, 0x8d, 0x77, 0x01, 0xc6, 0x07, 0x00, 0x85, - 0xf6, 0x74, 0x23, 0x80, 0x3c, 0x00, 0x74, 0x1e, 0xe8, 0x9d, 0xfb, 0x89, - 0xc3, 0x85, 0xc0, 0x75, 0x06, 0xb8, 0x83, 0x01, 0xe9, 0x41, 0x01, 0x89, - 0xf0, 0xe8, 0x5c, 0x08, 0x89, 0x07, 0x89, 0xd0, 0xe8, 0x55, 0x08, 0x89, - 0x47, 0x02, 0xeb, 0x60, 0xbf, 0x98, 0x01, 0x8b, 0x76, 0xfe, 0xac, 0x8a, - 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, - 0x85, 0xc0, 0x75, 0x11, 0x89, 0xda, 0x31, 0xf6, 0x8a, 0x07, 0x84, 0xc0, - 0x74, 0x0a, 0x3c, 0x2c, 0x74, 0x06, 0x43, 0xeb, 0xf3, 0xe9, 0x71, 0x00, - 0x80, 0x3f, 0x2c, 0x75, 0x06, 0x8d, 0x77, 0x01, 0xc6, 0x07, 0x00, 0x31, - 0xc0, 0xa3, 0x0e, 0x06, 0x85, 0xf6, 0x74, 0x0d, 0x80, 0x3c, 0x00, 0x74, - 0x08, 0x89, 0xf0, 0xe8, 0xdc, 0x0d, 0xa3, 0x0e, 0x06, 0x83, 0x3e, 0x0e, - 0x06, 0x00, 0x7f, 0x06, 0xc7, 0x06, 0x0e, 0x06, 0x05, 0x00, 0xb8, 0x0c, - 0x06, 0xe8, 0xfa, 0xfc, 0x8b, 0x5e, 0xf2, 0x8a, 0x47, 0x06, 0xa8, 0x10, - 0x75, 0x52, 0xa8, 0x20, 0x75, 0x4e, 0xba, 0x00, 0x10, 0xa1, 0x18, 0x06, - 0xe8, 0x00, 0x0e, 0x85, 0xc0, 0x74, 0x41, 0xa1, 0x18, 0x06, 0xe8, 0xec, - 0xfc, 0x8b, 0x1e, 0x18, 0x06, 0x89, 0x5e, 0xfe, 0x8b, 0x5e, 0xfe, 0x8a, - 0x07, 0x3c, 0x20, 0x74, 0x07, 0x3c, 0x09, 0x74, 0x03, 0xe9, 0xe0, 0xfd, - 0xff, 0x46, 0xfe, 0xeb, 0xeb, 0xbf, 0xa4, 0x01, 0x8b, 0x76, 0xfe, 0xac, - 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, - 0xe4, 0x85, 0xc0, 0x75, 0x0a, 0xb8, 0x06, 0x06, 0x89, 0xda, 0xeb, 0xa1, - 0xe9, 0x7c, 0x00, 0xbf, 0xb0, 0x01, 0x8b, 0x76, 0xfe, 0xac, 0x8a, 0x25, - 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, - 0xc0, 0x75, 0x89, 0x89, 0xd8, 0xe8, 0x4a, 0x0d, 0x85, 0xc0, 0x7e, 0x05, - 0xb8, 0x01, 0x00, 0xeb, 0x02, 0x31, 0xc0, 0xa2, 0x04, 0x06, 0xe9, 0x73, - 0xff, 0x3d, 0x02, 0x00, 0x75, 0x11, 0x89, 0xd8, 0xe8, 0xa7, 0xfa, 0x85, - 0xc0, 0x75, 0x03, 0xe9, 0x62, 0xff, 0xb8, 0xb9, 0x01, 0xeb, 0x2d, 0x3d, - 0x03, 0x00, 0x75, 0xf3, 0x8b, 0x46, 0xe8, 0x3b, 0x06, 0x10, 0x06, 0x72, - 0x0f, 0xb9, 0x59, 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, 0xb8, 0xd3, - 0x01, 0xe8, 0x8b, 0x0b, 0x8b, 0x56, 0xe8, 0x8b, 0x46, 0xfe, 0xe8, 0x9d, - 0xfa, 0x85, 0xc0, 0x74, 0xce, 0xb8, 0xf2, 0x01, 0x50, 0xb8, 0x40, 0x06, - 0x50, 0xe8, 0xcf, 0x08, 0x83, 0xc4, 0x04, 0x8d, 0x46, 0xea, 0xe8, 0x03, - 0xfc, 0x8b, 0x46, 0xf2, 0xe8, 0x2e, 0x0e, 0xe8, 0xc7, 0xfa, 0x83, 0x3e, - 0x06, 0x06, 0x00, 0x75, 0x09, 0xb8, 0x0c, 0x02, 0xe8, 0xf9, 0x06, 0xa3, - 0x06, 0x06, 0x8b, 0x1e, 0x06, 0x06, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x08, - 0xc7, 0x06, 0x0a, 0x06, 0x02, 0x00, 0xeb, 0x05, 0x30, 0xe4, 0xa3, 0x0a, - 0x06, 0x31, 0xc0, 0xc7, 0x46, 0xf8, 0x3a, 0x09, 0xa3, 0x12, 0x06, 0x89, - 0x46, 0xf0, 0x8b, 0x46, 0xf0, 0x3b, 0x06, 0x10, 0x06, 0x73, 0x42, 0x8b, - 0x76, 0xf8, 0x83, 0x7c, 0x02, 0x00, 0x75, 0x0f, 0xb9, 0x76, 0x01, 0xbb, - 0x25, 0x01, 0xba, 0x2f, 0x01, 0xb8, 0x5d, 0x01, 0xe8, 0x0c, 0x0b, 0x8b, - 0x3e, 0x0c, 0x06, 0x8b, 0x74, 0x02, 0xac, 0x8a, 0x25, 0x2a, 0xc4, 0x75, - 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x08, - 0x8b, 0x46, 0xf0, 0xa3, 0x12, 0x06, 0xeb, 0x09, 0x83, 0x46, 0xf8, 0x04, - 0xff, 0x46, 0xf0, 0xeb, 0xb5, 0x80, 0x3e, 0x05, 0x06, 0x00, 0x74, 0x68, - 0xb8, 0x2b, 0x02, 0x50, 0xb8, 0x40, 0x06, 0xc7, 0x46, 0xf4, 0x00, 0x00, - 0x50, 0xbf, 0x3a, 0x09, 0xe8, 0x24, 0x08, 0x83, 0xc4, 0x04, 0x8b, 0x46, - 0xf4, 0x3b, 0x06, 0x10, 0x06, 0x73, 0x4c, 0x89, 0xfe, 0x83, 0x7d, 0x02, - 0x00, 0x75, 0x0f, 0xb9, 0x85, 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, - 0xb8, 0x5d, 0x01, 0xe8, 0xa5, 0x0a, 0x83, 0x3c, 0x00, 0x75, 0x0f, 0xb9, - 0x86, 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, 0xb8, 0x38, 0x02, 0xe8, - 0x91, 0x0a, 0xff, 0x34, 0xff, 0x74, 0x02, 0xff, 0x76, 0xf4, 0xb8, 0x50, - 0x02, 0x50, 0xb8, 0x40, 0x06, 0x83, 0xc7, 0x04, 0x50, 0xff, 0x46, 0xf4, - 0xe8, 0xd4, 0x07, 0x83, 0xc4, 0x0a, 0xeb, 0xae, 0xe9, 0x24, 0x01, 0xb8, - 0x6b, 0x02, 0x50, 0xb8, 0x40, 0x06, 0x31, 0xf6, 0x50, 0x31, 0xff, 0xe8, - 0xbd, 0x07, 0x83, 0xc4, 0x04, 0x3b, 0x36, 0x14, 0x06, 0x73, 0x30, 0x8b, - 0x85, 0x8a, 0x09, 0x89, 0x46, 0xec, 0x85, 0xc0, 0x75, 0x0f, 0xb9, 0x92, - 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, 0xb8, 0x7d, 0x02, 0xe8, 0x3e, - 0x0a, 0xff, 0x76, 0xec, 0xb8, 0x87, 0x02, 0x50, 0xb8, 0x40, 0x06, 0x47, - 0x47, 0x50, 0x46, 0xe8, 0x89, 0x07, 0x83, 0xc4, 0x06, 0xeb, 0xca, 0xb8, - 0x8e, 0x02, 0x50, 0xb8, 0x40, 0x06, 0x31, 0xff, 0x50, 0x89, 0x7e, 0xee, - 0xe8, 0x74, 0x07, 0x83, 0xc4, 0x04, 0x3b, 0x3e, 0x16, 0x06, 0x72, 0x03, - 0xe9, 0x74, 0x00, 0x8b, 0x5e, 0xee, 0x8b, 0x87, 0x72, 0x08, 0x89, 0x46, - 0xe6, 0x8a, 0x85, 0x52, 0x0a, 0x30, 0xe4, 0x89, 0xc6, 0x83, 0x7e, 0xe6, - 0x00, 0x75, 0x0f, 0xb9, 0x9f, 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, - 0xb8, 0x7d, 0x02, 0xe8, 0xe5, 0x09, 0x3b, 0x36, 0x10, 0x06, 0x72, 0x0f, - 0xb9, 0xa0, 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, 0xb8, 0xa0, 0x02, - 0xe8, 0xd0, 0x09, 0xd1, 0xe6, 0xd1, 0xe6, 0x81, 0xc6, 0x3a, 0x09, 0x83, - 0x7c, 0x02, 0x00, 0x75, 0x0f, 0xb9, 0xa5, 0x01, 0xbb, 0x25, 0x01, 0xba, - 0x2f, 0x01, 0xb8, 0x5d, 0x01, 0xe8, 0xb3, 0x09, 0xff, 0x76, 0xe6, 0xff, - 0x74, 0x02, 0xb8, 0xb5, 0x02, 0x50, 0xb8, 0x40, 0x06, 0x83, 0x46, 0xee, - 0x02, 0x50, 0x47, 0xe8, 0xf9, 0x06, 0x83, 0xc4, 0x08, 0xeb, 0x83, 0xa1, - 0x0c, 0x06, 0x85, 0xc0, 0x74, 0x0f, 0x50, 0xb8, 0xcd, 0x02, 0x50, 0xb8, - 0x40, 0x06, 0x50, 0xe8, 0xe1, 0x06, 0x83, 0xc4, 0x06, 0xff, 0x36, 0x0e, - 0x06, 0xb8, 0xe1, 0x02, 0x50, 0xb8, 0x40, 0x06, 0x50, 0xe8, 0xcf, 0x06, - 0x83, 0xc4, 0x06, 0xff, 0x36, 0x12, 0x06, 0xb8, 0xfe, 0x02, 0x50, 0xb8, - 0x40, 0x06, 0x50, 0xe8, 0xbd, 0x06, 0x83, 0xc4, 0x06, 0xff, 0x36, 0x06, - 0x06, 0xb8, 0x17, 0x03, 0x50, 0xb8, 0x40, 0x06, 0x50, 0xe8, 0xab, 0x06, - 0x83, 0xc4, 0x06, 0x83, 0x3e, 0x10, 0x06, 0x00, 0x75, 0x06, 0xb8, 0x2b, - 0x03, 0xe9, 0xc4, 0xfa, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, - 0x59, 0x5b, 0xc3, 0x53, 0x89, 0xc3, 0xb8, 0x40, 0x00, 0x8e, 0xc0, 0x26, - 0x8b, 0x07, 0x5b, 0xc3, 0xb8, 0x49, 0x00, 0x53, 0x89, 0xc3, 0xb8, 0x40, - 0x00, 0x8e, 0xc0, 0x26, 0x8a, 0x07, 0x5b, 0xc3, 0x51, 0x56, 0x57, 0x55, - 0x89, 0xe5, 0x50, 0x89, 0xc1, 0x89, 0xd6, 0x89, 0xdf, 0x89, 0xca, 0x31, - 0xc0, 0xd1, 0xe2, 0x3b, 0x06, 0xb8, 0x0a, 0x73, 0x20, 0x80, 0x3c, 0x00, - 0x74, 0x1b, 0x8a, 0x1c, 0x30, 0xff, 0x01, 0xfb, 0x40, 0x89, 0x5e, 0xfe, - 0x46, 0x8b, 0x4e, 0xfe, 0xc4, 0x1e, 0x1a, 0x06, 0x01, 0xd3, 0x42, 0x42, - 0x26, 0x89, 0x0f, 0xeb, 0xda, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, - 0x53, 0x52, 0x56, 0x89, 0xc3, 0x3b, 0x06, 0x10, 0x06, 0x73, 0x26, 0x89, - 0xc6, 0xa1, 0x0a, 0x06, 0x01, 0xd8, 0xf7, 0x26, 0xb8, 0x0a, 0xd1, 0xe6, - 0xd1, 0xe6, 0x81, 0xc6, 0x3a, 0x09, 0x3b, 0x1e, 0x12, 0x06, 0x75, 0x05, - 0xbb, 0x00, 0x70, 0xeb, 0x03, 0xbb, 0x00, 0x07, 0x8b, 0x14, 0xe8, 0x8f, - 0xff, 0x5e, 0x5a, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x83, 0xec, 0x10, 0xe8, 0xdc, 0xf7, 0xc6, 0x46, 0xfc, 0x00, 0x85, - 0xc0, 0x74, 0x06, 0xb8, 0x01, 0x00, 0xe9, 0x49, 0xff, 0x9c, 0x58, 0xba, - 0x43, 0x00, 0x89, 0xc3, 0xb0, 0x34, 0xee, 0xba, 0x40, 0x00, 0x30, 0xc0, - 0xee, 0xee, 0x30, 0xe4, 0xc7, 0x06, 0x40, 0x07, 0x01, 0x00, 0xa3, 0x3e, - 0x07, 0xf6, 0xc7, 0x02, 0x74, 0x01, 0xfb, 0xbb, 0xdc, 0x34, 0xa1, 0x0e, - 0x06, 0xb9, 0x12, 0x00, 0x99, 0xe8, 0x44, 0x0b, 0x89, 0x46, 0xf6, 0x89, - 0x56, 0xf8, 0x89, 0x46, 0xf0, 0x89, 0x56, 0xf2, 0x9c, 0x58, 0xba, 0x43, - 0x00, 0x89, 0xc1, 0x30, 0xc0, 0xee, 0xba, 0x40, 0x00, 0xec, 0x88, 0xc3, - 0xba, 0x40, 0x00, 0x30, 0xff, 0xec, 0x89, 0xda, 0x88, 0xc6, 0xf6, 0xc5, - 0x02, 0x74, 0x01, 0xfb, 0x89, 0x56, 0xfa, 0xf6, 0x06, 0xe9, 0x0a, 0x01, - 0x75, 0x09, 0xb0, 0x03, 0x32, 0xe4, 0xcd, 0x10, 0xe8, 0x2e, 0x0c, 0xa1, - 0xe0, 0x0a, 0x8b, 0x16, 0xde, 0x0a, 0x85, 0xc0, 0x75, 0x07, 0x85, 0xd2, - 0x75, 0x03, 0xe9, 0x7a, 0xff, 0xb8, 0x4a, 0x00, 0xe8, 0xcc, 0xfe, 0xa3, - 0xb8, 0x0a, 0x85, 0xc0, 0x75, 0x06, 0xc7, 0x06, 0xb8, 0x0a, 0x50, 0x00, - 0xb8, 0x84, 0x00, 0xe8, 0xc9, 0xfe, 0x30, 0xe4, 0xa3, 0xb6, 0x0a, 0x85, - 0xc0, 0x75, 0x06, 0xc7, 0x06, 0xb6, 0x0a, 0x18, 0x00, 0xa1, 0xde, 0x0a, - 0x8b, 0x16, 0xe0, 0x0a, 0xff, 0x06, 0xb6, 0x0a, 0xa3, 0x1a, 0x06, 0x89, - 0x16, 0x1c, 0x06, 0xb4, 0x01, 0xb9, 0x00, 0x20, 0xcd, 0x10, 0x80, 0x3e, - 0x05, 0x06, 0x00, 0x74, 0x2c, 0xff, 0x36, 0xb6, 0x0a, 0xff, 0x36, 0xb8, - 0x0a, 0xb8, 0x42, 0x03, 0x50, 0xb8, 0x40, 0x06, 0x50, 0xe8, 0x07, 0x05, - 0x83, 0xc4, 0x08, 0xff, 0x36, 0x1c, 0x06, 0xff, 0x36, 0x1a, 0x06, 0xb8, - 0x55, 0x03, 0x50, 0xb8, 0x40, 0x06, 0x50, 0xe8, 0xf1, 0x04, 0x83, 0xc4, - 0x08, 0x8b, 0x0e, 0x0a, 0x06, 0x03, 0x0e, 0x10, 0x06, 0xa1, 0xb6, 0x0a, - 0x41, 0x41, 0x39, 0xc1, 0x76, 0x02, 0x89, 0xc1, 0x31, 0xdb, 0x39, 0xcb, - 0x73, 0x26, 0xa1, 0xb8, 0x0a, 0xf7, 0xe3, 0xd1, 0xe0, 0x31, 0xd2, 0x3b, - 0x16, 0xb8, 0x0a, 0x73, 0x14, 0x8b, 0x36, 0x1a, 0x06, 0x42, 0x8e, 0x06, - 0x1c, 0x06, 0x01, 0xc6, 0x40, 0x40, 0x26, 0xc7, 0x04, 0x20, 0x07, 0xeb, - 0xe6, 0x43, 0xeb, 0xd6, 0xc6, 0x46, 0xfe, 0x01, 0x83, 0x7e, 0xf8, 0xff, - 0x75, 0x06, 0x83, 0x7e, 0xf6, 0xff, 0x74, 0x41, 0x9c, 0x58, 0xba, 0x43, - 0x00, 0x89, 0xc1, 0x30, 0xc0, 0xee, 0xba, 0x40, 0x00, 0xec, 0x88, 0xc3, - 0xba, 0x40, 0x00, 0x30, 0xff, 0xec, 0x89, 0xda, 0x8b, 0x76, 0xfa, 0x88, - 0xc6, 0xf6, 0xc5, 0x02, 0x74, 0x01, 0xfb, 0x89, 0xf0, 0x89, 0x56, 0xfa, - 0x29, 0xd0, 0x31, 0xd2, 0x83, 0x7e, 0xf8, 0x00, 0x77, 0x07, 0x75, 0x10, - 0x3b, 0x46, 0xf6, 0x77, 0x0b, 0x29, 0x46, 0xf6, 0x19, 0x56, 0xf8, 0xeb, - 0x09, 0xe9, 0x42, 0x01, 0x89, 0x56, 0xf6, 0x89, 0x56, 0xf8, 0x8b, 0x46, - 0xf8, 0x3b, 0x46, 0xf2, 0x72, 0x0a, 0x75, 0x24, 0x8b, 0x46, 0xf6, 0x3b, - 0x46, 0xf0, 0x73, 0x1c, 0x8b, 0x46, 0xf2, 0x3d, 0x12, 0x00, 0x77, 0x09, - 0x75, 0x14, 0x81, 0x7e, 0xf0, 0xdc, 0x34, 0x72, 0x0d, 0x81, 0x46, 0xf0, - 0x24, 0xcb, 0x83, 0x56, 0xf2, 0xed, 0xeb, 0x0a, 0xeb, 0x59, 0x31, 0xc0, - 0x89, 0x46, 0xf0, 0x89, 0x46, 0xf2, 0x8b, 0x46, 0xf0, 0x8b, 0x56, 0xf2, - 0xbb, 0xdc, 0x34, 0xb9, 0x12, 0x00, 0xbe, 0x00, 0x03, 0xe8, 0xad, 0x0e, - 0x89, 0xc7, 0x83, 0x3e, 0x18, 0x06, 0x00, 0x75, 0x0f, 0xb9, 0x7f, 0x02, - 0xbb, 0x25, 0x01, 0xba, 0x62, 0x03, 0xb8, 0x6b, 0x03, 0xe8, 0x97, 0x06, - 0x47, 0x57, 0xb8, 0x78, 0x03, 0x50, 0xff, 0x36, 0x18, 0x06, 0xe8, 0x0c, - 0x0f, 0xa1, 0x0a, 0x06, 0x03, 0x06, 0x10, 0x06, 0x40, 0xf7, 0x26, 0xb8, - 0x0a, 0x89, 0xf3, 0x8b, 0x0e, 0x18, 0x06, 0x83, 0xc4, 0x06, 0x89, 0xca, - 0xe8, 0x59, 0xfd, 0x83, 0x7e, 0xf8, 0x00, 0x75, 0x2b, 0x83, 0x7e, 0xf6, - 0x00, 0x75, 0x25, 0xa1, 0x0a, 0x06, 0x03, 0x06, 0x10, 0x06, 0x40, 0xf7, - 0x26, 0xb8, 0x0a, 0xbb, 0x00, 0x07, 0xba, 0x9b, 0x03, 0xe8, 0x38, 0xfd, - 0xa1, 0x12, 0x06, 0x85, 0xc0, 0x7c, 0x0c, 0x3b, 0x06, 0x10, 0x06, 0x7d, - 0x06, 0xe9, 0xe2, 0x00, 0xe9, 0x7f, 0x00, 0xe9, 0xe0, 0x00, 0xc6, 0x46, - 0xfe, 0x00, 0xe8, 0xd4, 0x0e, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0xdc, 0xfe, - 0xe8, 0xdc, 0x0e, 0x89, 0xc2, 0x85, 0xc0, 0x75, 0x07, 0xe8, 0xd3, 0x0e, - 0x88, 0xc6, 0x30, 0xd2, 0x83, 0xfa, 0x1b, 0x74, 0xda, 0x81, 0xfa, 0x00, - 0x48, 0x74, 0x03, 0xe9, 0x7c, 0x00, 0xa1, 0x12, 0x06, 0x89, 0xc2, 0x4a, - 0x89, 0x16, 0x12, 0x06, 0x85, 0xd2, 0x7d, 0x09, 0x8b, 0x16, 0x10, 0x06, - 0x4a, 0x89, 0x16, 0x12, 0x06, 0x3b, 0x06, 0x12, 0x06, 0x74, 0x09, 0xe8, - 0x16, 0xfd, 0xa1, 0x12, 0x06, 0xe8, 0x10, 0xfd, 0x83, 0x7e, 0xf8, 0xff, - 0x75, 0x06, 0x83, 0x7e, 0xf6, 0xff, 0x74, 0xad, 0xb8, 0xff, 0xff, 0x89, - 0x46, 0xf6, 0x89, 0x46, 0xf8, 0xa1, 0x0a, 0x06, 0x03, 0x06, 0x10, 0x06, - 0x40, 0xf7, 0x26, 0xb8, 0x0a, 0xbb, 0x00, 0x07, 0xba, 0x9b, 0x03, 0xe8, - 0xa6, 0xfc, 0x80, 0x7e, 0xfe, 0x00, 0x74, 0x82, 0x83, 0x3e, 0x0a, 0x06, - 0x00, 0x76, 0x0c, 0xbb, 0x00, 0x07, 0x8b, 0x16, 0x06, 0x06, 0x31, 0xc0, - 0xe8, 0x8d, 0xfc, 0x31, 0xd2, 0x3b, 0x16, 0x10, 0x06, 0x72, 0x03, 0xe9, - 0x60, 0xff, 0x89, 0xd0, 0xe8, 0xbd, 0xfc, 0x42, 0xeb, 0xef, 0x81, 0xfa, - 0x00, 0x50, 0x75, 0x19, 0xa1, 0x12, 0x06, 0x89, 0xc2, 0x42, 0x89, 0x16, - 0x12, 0x06, 0x3b, 0x16, 0x10, 0x06, 0x7c, 0x85, 0xc7, 0x06, 0x12, 0x06, - 0x00, 0x00, 0xe9, 0x7c, 0xff, 0x83, 0xfa, 0x0d, 0x74, 0x03, 0xe9, 0x1b, - 0xfe, 0xa1, 0x12, 0x06, 0x85, 0xc0, 0x7c, 0xf6, 0x3b, 0x06, 0x10, 0x06, - 0x7d, 0xf0, 0xc6, 0x46, 0xfc, 0x01, 0xb4, 0x01, 0xb9, 0x07, 0x06, 0xcd, - 0x10, 0xa1, 0xb6, 0x0a, 0xb1, 0x08, 0x48, 0xd3, 0xe0, 0x89, 0x46, 0xf4, - 0xb4, 0x02, 0x32, 0xff, 0x8b, 0x96, 0xf4, 0xff, 0xcd, 0x10, 0x80, 0x7e, - 0xfc, 0x00, 0x75, 0x03, 0xe9, 0xa8, 0xfc, 0xe9, 0xf2, 0xfb, 0x53, 0x51, - 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0x50, 0xa1, 0x12, 0x06, 0x3b, - 0x06, 0x10, 0x06, 0x7c, 0x03, 0xe9, 0xde, 0xfb, 0x89, 0xc6, 0xd1, 0xe6, - 0xd1, 0xe6, 0x81, 0xc6, 0x3a, 0x09, 0x83, 0x7c, 0x02, 0x00, 0x75, 0x0f, - 0xb9, 0x1a, 0x03, 0xbb, 0x25, 0x01, 0xba, 0xc4, 0x03, 0xb8, 0x5d, 0x01, - 0xe8, 0xfc, 0x04, 0x31, 0xff, 0x31, 0xf6, 0x3b, 0x3e, 0x14, 0x06, 0x73, - 0x25, 0x8b, 0x84, 0x8a, 0x09, 0x89, 0x46, 0xfc, 0x85, 0xc0, 0x75, 0x0f, - 0xb9, 0x1f, 0x03, 0xbb, 0x25, 0x01, 0xba, 0xc4, 0x03, 0xb8, 0x7d, 0x02, - 0xe8, 0xd8, 0x04, 0x8b, 0x46, 0xfc, 0xe8, 0x9b, 0x0d, 0x46, 0x46, 0x47, - 0xeb, 0xd5, 0x31, 0xf6, 0x31, 0xff, 0x3b, 0x36, 0x16, 0x06, 0x73, 0xa5, - 0x8a, 0x84, 0x52, 0x0a, 0x30, 0xe4, 0x3b, 0x06, 0x12, 0x06, 0x75, 0x20, - 0x8b, 0x85, 0x72, 0x08, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x75, 0x0f, 0xb9, - 0x27, 0x03, 0xbb, 0x25, 0x01, 0xba, 0xc4, 0x03, 0xb8, 0x7d, 0x02, 0xe8, - 0x9d, 0x04, 0x8b, 0x46, 0xfe, 0xe8, 0x60, 0x0d, 0x47, 0x47, 0x46, 0xeb, - 0xc9, 0xe8, 0x30, 0xf4, 0x85, 0xc0, 0x74, 0x04, 0xb8, 0x01, 0x00, 0xc3, - 0xe8, 0x28, 0x0a, 0x85, 0xc0, 0x74, 0xf5, 0xe8, 0x9a, 0x0d, 0x85, 0xc0, - 0x74, 0xee, 0xe8, 0xdb, 0xf5, 0x85, 0xc0, 0x75, 0x11, 0xe8, 0xcd, 0xfb, - 0x85, 0xc0, 0x75, 0x0a, 0xe8, 0x37, 0xff, 0x80, 0x3e, 0x04, 0x06, 0x00, - 0x75, 0xef, 0xe8, 0x52, 0xf5, 0x31, 0xc0, 0xc3, 0x51, 0x52, 0x56, 0x57, - 0x89, 0xc6, 0x89, 0xc7, 0x8c, 0xd8, 0x8e, 0xc0, 0x83, 0xc9, 0xff, 0x33, - 0xc0, 0xf2, 0xae, 0xf7, 0xd1, 0x49, 0x41, 0x89, 0xc8, 0xe8, 0x1f, 0x00, - 0x89, 0xc2, 0x85, 0xc0, 0x75, 0x07, 0x89, 0xd0, 0x5f, 0x5e, 0x5a, 0x59, - 0xc3, 0x89, 0xc7, 0x57, 0x8c, 0xd8, 0x8e, 0xc0, 0xd1, 0xe9, 0xf3, 0xa5, - 0x13, 0xc9, 0xf3, 0xa4, 0x5f, 0xeb, 0xe7, 0x53, 0x51, 0x52, 0x56, 0x57, - 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc7, 0x85, 0xc0, 0x74, 0x52, - 0x3d, 0xea, 0xff, 0x77, 0x4d, 0x05, 0x03, 0x00, 0x24, 0xfe, 0x89, 0x46, - 0xfc, 0x3d, 0x06, 0x00, 0x72, 0x4b, 0xc6, 0x46, 0xfe, 0x00, 0x31, 0xd2, - 0x8b, 0x46, 0xfc, 0x3b, 0x06, 0x22, 0x06, 0x76, 0x4d, 0x8b, 0x36, 0x20, - 0x06, 0x85, 0xf6, 0x74, 0x3b, 0x85, 0xf6, 0x74, 0x52, 0x8b, 0x4c, 0x0a, - 0x89, 0x36, 0x20, 0x06, 0x39, 0xf9, 0x72, 0x0f, 0x8c, 0xda, 0x89, 0xf3, - 0x89, 0xf8, 0xe8, 0x13, 0x10, 0x89, 0xc2, 0x85, 0xc0, 0x75, 0x5d, 0x3b, - 0x0e, 0x22, 0x06, 0x77, 0x2c, 0x8b, 0x74, 0x04, 0xeb, 0xd7, 0x31, 0xc0, - 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xc7, 0x46, 0xfc, - 0x06, 0x00, 0xeb, 0xae, 0x89, 0x36, 0x22, 0x06, 0x8b, 0x36, 0x1e, 0x06, - 0xeb, 0xbb, 0x31, 0xc0, 0x8b, 0x36, 0x1e, 0x06, 0xa3, 0x22, 0x06, 0xeb, - 0xb0, 0x89, 0x0e, 0x22, 0x06, 0xeb, 0xce, 0x80, 0x7e, 0xfe, 0x00, 0x74, - 0x0f, 0x89, 0xf8, 0xe8, 0x0c, 0x12, 0x85, 0xc0, 0x74, 0x16, 0xc6, 0x46, - 0xfe, 0x00, 0xeb, 0x84, 0x89, 0xf8, 0xe8, 0xcd, 0x12, 0x85, 0xc0, 0x74, - 0xe8, 0xc6, 0x46, 0xfe, 0x01, 0xe9, 0x74, 0xff, 0x89, 0xd0, 0xeb, 0xac, - 0x53, 0x52, 0x56, 0x85, 0xc0, 0x74, 0x55, 0x8b, 0x36, 0xba, 0x0a, 0x85, - 0xf6, 0x74, 0x34, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, - 0xd0, 0x72, 0x43, 0x89, 0xf3, 0x8b, 0x74, 0x02, 0x85, 0xf6, 0x74, 0x0c, - 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x2e, - 0x8b, 0x77, 0x04, 0x85, 0xf6, 0x74, 0x0c, 0x39, 0xc6, 0x77, 0x08, 0x8b, - 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x51, 0x8b, 0x36, 0x20, 0x06, 0x85, - 0xf6, 0x75, 0x15, 0x8b, 0x36, 0x1e, 0x06, 0x85, 0xf6, 0x74, 0x09, 0x39, - 0xc6, 0x76, 0x5a, 0x8b, 0x74, 0x04, 0xeb, 0xf3, 0xeb, 0x4f, 0xeb, 0x34, - 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x28, - 0x89, 0xf3, 0x8b, 0x74, 0x02, 0x85, 0xf6, 0x74, 0x0c, 0x39, 0xc6, 0x77, - 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x13, 0x8b, 0x77, 0x04, - 0x85, 0xf6, 0x74, 0xc3, 0x39, 0xc6, 0x77, 0xbf, 0x8b, 0x14, 0x01, 0xf2, - 0x39, 0xd0, 0x73, 0xb7, 0x8c, 0xda, 0x89, 0xf3, 0xe8, 0xd9, 0x0f, 0x89, - 0x36, 0xba, 0x0a, 0x3b, 0x36, 0x20, 0x06, 0x73, 0x08, 0xa1, 0x22, 0x06, - 0x3b, 0x44, 0x0a, 0x72, 0x0e, 0x5e, 0x5a, 0x5b, 0xc3, 0x8b, 0x14, 0x01, - 0xf2, 0x39, 0xd0, 0x72, 0xdb, 0xeb, 0x9c, 0x8b, 0x44, 0x0a, 0xa3, 0x22, - 0x06, 0xeb, 0xea, 0x53, 0x52, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x8d, - 0x46, 0x0c, 0x8d, 0x5e, 0xfe, 0x8b, 0x56, 0x0a, 0x89, 0x46, 0xfe, 0x8b, - 0x46, 0x08, 0xe8, 0xaa, 0x13, 0x89, 0xec, 0x5d, 0x5a, 0x5b, 0xc3, 0x53, - 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, - 0xd3, 0xba, 0x01, 0x00, 0x31, 0xc0, 0x31, 0xff, 0x31, 0xc9, 0x89, 0x46, - 0xfc, 0x89, 0x46, 0xfe, 0x85, 0xdb, 0x74, 0x08, 0x3b, 0x16, 0x76, 0x07, - 0x75, 0x26, 0x89, 0x17, 0x8a, 0x04, 0x3c, 0x77, 0x75, 0x22, 0x80, 0xc9, - 0x02, 0x46, 0x8a, 0x04, 0x84, 0xc0, 0x74, 0x53, 0x85, 0xd2, 0x74, 0x4f, - 0x3c, 0x63, 0x73, 0x37, 0x3c, 0x62, 0x75, 0x57, 0x85, 0xff, 0x74, 0x51, - 0x31, 0xd2, 0xeb, 0xe5, 0x89, 0x07, 0xeb, 0xd8, 0x3c, 0x72, 0x75, 0x05, - 0x80, 0xc9, 0x01, 0xeb, 0xd8, 0x3c, 0x61, 0x75, 0x05, 0x80, 0xc9, 0x82, - 0xeb, 0xcf, 0xe8, 0xdc, 0x13, 0x89, 0xc3, 0x31, 0xd2, 0xc7, 0x07, 0x09, - 0x00, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x77, - 0x08, 0x83, 0x7e, 0xfe, 0x00, 0x74, 0x3f, 0xeb, 0xc7, 0x3c, 0x74, 0x75, - 0x08, 0x85, 0xff, 0x74, 0x26, 0xeb, 0xbd, 0xeb, 0x47, 0x3c, 0x6e, 0x75, - 0xa0, 0x83, 0x7e, 0xfe, 0x00, 0x74, 0x32, 0xeb, 0xaf, 0xeb, 0x1a, 0x3c, - 0x2b, 0x75, 0x92, 0x83, 0x7e, 0xfc, 0x00, 0x75, 0xa3, 0xc7, 0x46, 0xfc, - 0x01, 0x00, 0x80, 0xc9, 0x03, 0xeb, 0x82, 0xbf, 0x01, 0x00, 0xe9, 0x7c, - 0xff, 0xbf, 0x01, 0x00, 0x80, 0xc9, 0x40, 0xe9, 0x73, 0xff, 0xc7, 0x46, - 0xfe, 0x01, 0x00, 0x80, 0x0f, 0x01, 0xe9, 0x68, 0xff, 0xc7, 0x46, 0xfe, - 0x01, 0x00, 0x80, 0x27, 0xfe, 0xe9, 0x5d, 0xff, 0x85, 0xff, 0x75, 0x0b, - 0x81, 0x3e, 0x78, 0x07, 0x00, 0x02, 0x75, 0x03, 0x80, 0xc9, 0x40, 0x89, - 0xca, 0xeb, 0x86, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x8b, 0x76, 0x0a, 0x89, - 0xc7, 0x88, 0xd0, 0x30, 0xe4, 0xe8, 0x4d, 0x13, 0x3c, 0x72, 0x75, 0x6e, - 0x31, 0xc0, 0xf6, 0xc3, 0x02, 0x74, 0x03, 0xb8, 0x02, 0x00, 0xf6, 0xc3, - 0x40, 0x74, 0x5a, 0x80, 0xcc, 0x02, 0x31, 0xd2, 0x52, 0xff, 0x76, 0x08, - 0x50, 0x57, 0xe8, 0x10, 0x15, 0x83, 0xc4, 0x08, 0x89, 0x44, 0x08, 0x3d, - 0xff, 0xff, 0x74, 0x6b, 0xc7, 0x44, 0x02, 0x00, 0x00, 0xc7, 0x44, 0x0a, - 0x00, 0x00, 0x8b, 0x7c, 0x04, 0x09, 0x5c, 0x06, 0xc7, 0x45, 0x06, 0x00, - 0x00, 0x8b, 0x7c, 0x04, 0x89, 0x4d, 0x08, 0x8b, 0x7c, 0x04, 0xc7, 0x45, - 0x04, 0x00, 0x00, 0xf6, 0xc3, 0x80, 0x74, 0x0c, 0xba, 0x02, 0x00, 0x89, - 0xf0, 0x31, 0xdb, 0x31, 0xc9, 0xe8, 0x4a, 0x15, 0x89, 0xf0, 0xe8, 0x56, - 0x16, 0x89, 0xf0, 0x5d, 0x5f, 0x5e, 0xc2, 0x04, 0x00, 0x80, 0xcc, 0x01, - 0xeb, 0xa4, 0xf6, 0xc3, 0x01, 0x74, 0x17, 0xb8, 0x22, 0x00, 0xf6, 0xc3, - 0x80, 0x74, 0x14, 0x0c, 0x10, 0xf6, 0xc3, 0x40, 0x74, 0x13, 0x80, 0xcc, - 0x02, 0xba, 0x80, 0x01, 0xeb, 0x8a, 0xb8, 0x21, 0x00, 0xeb, 0xe7, 0x0c, - 0x40, 0xeb, 0xea, 0xeb, 0x05, 0x80, 0xcc, 0x01, 0xeb, 0xeb, 0x89, 0xf0, - 0xe8, 0x3d, 0x16, 0x31, 0xc0, 0xeb, 0xc0, 0x51, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc7, 0x89, 0xd6, 0x89, 0xd9, 0x8d, 0x56, - 0xfe, 0x89, 0xf0, 0xe8, 0x49, 0xfe, 0x89, 0xc3, 0x85, 0xc0, 0x75, 0x07, - 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, 0xe8, 0x4d, 0x16, 0x89, 0xc2, - 0x85, 0xc0, 0x74, 0x11, 0x50, 0x8a, 0x04, 0x51, 0x98, 0x8b, 0x4e, 0xfe, - 0x89, 0xc2, 0x89, 0xf8, 0xe8, 0x0c, 0xff, 0x89, 0xc2, 0x89, 0xd0, 0xeb, - 0xdb, 0x53, 0x31, 0xdb, 0xe8, 0xb8, 0xff, 0x5b, 0xc3, 0x53, 0x51, 0x52, - 0x56, 0x89, 0xc1, 0x8b, 0x1e, 0xbc, 0x0a, 0x85, 0xdb, 0x75, 0x12, 0xbe, - 0xbe, 0x0a, 0x8b, 0x1c, 0x85, 0xdb, 0x74, 0x33, 0x3b, 0x4f, 0x02, 0x74, - 0x1e, 0x89, 0xde, 0xeb, 0xf1, 0x8b, 0x47, 0x02, 0x39, 0xc1, 0x74, 0x04, - 0x8b, 0x1f, 0xeb, 0xdf, 0xba, 0x01, 0x00, 0xe8, 0x94, 0x02, 0x89, 0xcb, - 0x89, 0xd8, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x8b, 0x07, 0x89, 0x04, 0x8b, - 0x36, 0xbc, 0x0a, 0x89, 0x1e, 0xbc, 0x0a, 0x89, 0x37, 0xeb, 0xe7, 0xe8, - 0x0b, 0x12, 0x89, 0xc3, 0xc7, 0x07, 0x04, 0x00, 0x31, 0xc3, 0xeb, 0xdc, - 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc7, 0x89, - 0xd6, 0x8d, 0x56, 0xfe, 0x89, 0xf0, 0xe8, 0xaa, 0xfd, 0x89, 0xc2, 0x85, - 0xc0, 0x75, 0x03, 0xe9, 0x5e, 0xff, 0x89, 0xd8, 0xe8, 0x86, 0xff, 0x89, - 0xc3, 0x85, 0xc0, 0x74, 0x15, 0x50, 0x31, 0xc0, 0x50, 0x8a, 0x04, 0x8b, - 0x4e, 0xfe, 0x98, 0x89, 0xd3, 0x89, 0xc2, 0x89, 0xf8, 0xe8, 0x6b, 0xfe, - 0x89, 0xc3, 0x89, 0xd8, 0xe9, 0x39, 0xff, 0x56, 0x57, 0x55, 0x89, 0xe5, - 0x81, 0xec, 0x02, 0x01, 0x89, 0xc6, 0x89, 0xd8, 0xbb, 0x01, 0x00, 0x83, - 0x3e, 0x3c, 0x07, 0x00, 0x74, 0x09, 0xc7, 0x06, 0x3c, 0x07, 0x00, 0x00, - 0xbb, 0x02, 0x00, 0x51, 0x50, 0x52, 0x56, 0xb8, 0xd2, 0x03, 0x50, 0xb8, - 0x00, 0x01, 0x50, 0x8d, 0x86, 0xfe, 0xfe, 0x50, 0xe8, 0x52, 0x16, 0x83, - 0xc4, 0x0e, 0x80, 0x3e, 0x7a, 0x07, 0x00, 0x75, 0x03, 0xe9, 0x0a, 0x01, - 0x8d, 0xbe, 0xfe, 0xfe, 0x8c, 0xd8, 0x8e, 0xc0, 0x83, 0xc9, 0xff, 0x33, - 0xc0, 0xf2, 0xae, 0xf7, 0xd1, 0x49, 0x89, 0xca, 0x83, 0xc2, 0x13, 0x80, - 0xe2, 0xfe, 0xe8, 0x69, 0x16, 0x39, 0xc2, 0x72, 0x03, 0xe9, 0xcb, 0x00, - 0x8d, 0xbe, 0xfe, 0xfe, 0x8c, 0xd8, 0x8e, 0xc0, 0x83, 0xc9, 0xff, 0x33, - 0xc0, 0xf2, 0xae, 0xf7, 0xd1, 0x49, 0x89, 0xc8, 0x05, 0x13, 0x00, 0x24, - 0xfe, 0x2b, 0xe0, 0x89, 0xe2, 0xbe, 0xf9, 0x03, 0x89, 0xd7, 0x57, 0x8a, - 0x04, 0x88, 0x05, 0x84, 0xc0, 0x74, 0x10, 0x8a, 0x44, 0x01, 0x83, 0xc6, - 0x02, 0x88, 0x45, 0x01, 0x83, 0xc7, 0x02, 0x84, 0xc0, 0x75, 0xe8, 0x5f, - 0xbe, 0x0a, 0x04, 0x1e, 0x07, 0x57, 0x83, 0xc9, 0xff, 0x32, 0xc0, 0xf2, - 0xae, 0x4f, 0x8a, 0x04, 0x88, 0x05, 0x84, 0xc0, 0x74, 0x10, 0x8a, 0x44, - 0x01, 0x83, 0xc6, 0x02, 0x88, 0x45, 0x01, 0x83, 0xc7, 0x02, 0x84, 0xc0, - 0x75, 0xe8, 0x5f, 0x8d, 0xb6, 0xfe, 0xfe, 0x89, 0x56, 0xfe, 0x1e, 0x07, - 0x57, 0x83, 0xc9, 0xff, 0x32, 0xc0, 0xf2, 0xae, 0x4f, 0x8a, 0x04, 0x88, - 0x05, 0x84, 0xc0, 0x74, 0x10, 0x8a, 0x44, 0x01, 0x83, 0xc6, 0x02, 0x88, - 0x45, 0x01, 0x83, 0xc7, 0x02, 0x84, 0xc0, 0x75, 0xe8, 0x5f, 0xe8, 0xd1, - 0x15, 0x3d, 0x12, 0x00, 0x76, 0x3a, 0xb8, 0x12, 0x00, 0x2b, 0xe0, 0x89, - 0xe2, 0x53, 0xb8, 0x0d, 0x04, 0x50, 0x52, 0xe8, 0x77, 0x07, 0x83, 0xc4, - 0x06, 0x80, 0x3e, 0x7a, 0x07, 0x00, 0x74, 0x0e, 0x1e, 0x52, 0xcc, 0xeb, - 0x06, 0x57, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x83, 0xc4, 0x04, 0x80, 0x3e, - 0x7a, 0x07, 0x00, 0x75, 0x0f, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x31, - 0xd2, 0xe9, 0x4d, 0xff, 0x31, 0xd2, 0xeb, 0xc9, 0x1e, 0xff, 0x76, 0xfe, - 0xcc, 0xeb, 0x06, 0x57, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x83, 0xc4, 0x04, - 0xeb, 0xdf, 0x8d, 0x96, 0xfe, 0xfe, 0xb8, 0xf9, 0x03, 0xe8, 0x79, 0x15, - 0xe9, 0x92, 0x15, 0x56, 0x55, 0x89, 0xe5, 0x89, 0xc6, 0x89, 0xd0, 0x89, - 0xda, 0x89, 0xcb, 0x8b, 0x4e, 0x06, 0x85, 0xf6, 0x74, 0x05, 0x5d, 0x5e, - 0xc2, 0x02, 0x00, 0xc7, 0x06, 0x3c, 0x07, 0x01, 0x00, 0xe8, 0x87, 0xfe, - 0xeb, 0xf0, 0x53, 0x51, 0x52, 0x56, 0x89, 0xc3, 0x8a, 0x07, 0x30, 0xe4, - 0x89, 0xc6, 0xf6, 0x84, 0xdd, 0x04, 0x02, 0x74, 0x03, 0x43, 0xeb, 0xf0, - 0x30, 0xc9, 0x3c, 0x2d, 0x75, 0x24, 0xb1, 0x01, 0x43, 0x31, 0xc0, 0x8a, - 0x17, 0x30, 0xf6, 0x89, 0xd6, 0xf6, 0x84, 0xdd, 0x04, 0x20, 0x74, 0x18, + 0x4d, 0x5a, 0x76, 0x00, 0x44, 0x00, 0x78, 0x01, 0x60, 0x00, 0xdc, 0x00, + 0xff, 0xff, 0x63, 0x08, 0x00, 0x08, 0x00, 0x00, 0xa0, 0x1d, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x39, 0x00, 0x00, + 0x19, 0x39, 0x00, 0x00, 0x21, 0x39, 0x00, 0x00, 0x3c, 0x39, 0x00, 0x00, + 0x6b, 0x39, 0x00, 0x00, 0x91, 0x39, 0x00, 0x00, 0xa7, 0x39, 0x00, 0x00, + 0xae, 0x39, 0x00, 0x00, 0xc6, 0x39, 0x00, 0x00, 0xce, 0x39, 0x00, 0x00, + 0xe0, 0x39, 0x00, 0x00, 0x22, 0x3a, 0x00, 0x00, 0x76, 0x3a, 0x00, 0x00, + 0xa1, 0x3a, 0x00, 0x00, 0xca, 0x3a, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x00, + 0x12, 0x3b, 0x00, 0x00, 0x21, 0x3b, 0x00, 0x00, 0x47, 0x3b, 0x00, 0x00, + 0x69, 0x3b, 0x00, 0x00, 0x89, 0x3b, 0x00, 0x00, 0xb3, 0x42, 0x00, 0x00, + 0x08, 0x45, 0x00, 0x00, 0xe7, 0x48, 0x00, 0x00, 0xa0, 0x4a, 0x00, 0x00, + 0xc5, 0x4a, 0x00, 0x00, 0x7c, 0x08, 0x75, 0x07, 0x35, 0x4b, 0x00, 0x00, + 0x51, 0x4b, 0x00, 0x00, 0xa5, 0x4b, 0x00, 0x00, 0xf3, 0x4b, 0x00, 0x00, + 0x03, 0x4c, 0x00, 0x00, 0x52, 0x4c, 0x00, 0x00, 0x6a, 0x4c, 0x00, 0x00, + 0x88, 0x4c, 0x00, 0x00, 0x9e, 0x4c, 0x00, 0x00, 0xaa, 0x4c, 0x00, 0x00, + 0xc2, 0x4c, 0x00, 0x00, 0xdd, 0x4c, 0x00, 0x00, 0xe9, 0x4c, 0x00, 0x00, + 0x01, 0x4d, 0x00, 0x00, 0x2a, 0x4e, 0x00, 0x00, 0x7f, 0x4e, 0x00, 0x00, + 0x07, 0x53, 0x00, 0x00, 0x4c, 0x53, 0x00, 0x00, 0x6c, 0x53, 0x00, 0x00, + 0x7e, 0x53, 0x00, 0x00, 0x87, 0x53, 0x00, 0x00, 0x97, 0x53, 0x00, 0x00, + 0xa0, 0x53, 0x00, 0x00, 0xb4, 0x53, 0x00, 0x00, 0xcf, 0x53, 0x00, 0x00, + 0xf2, 0x53, 0x00, 0x00, 0x15, 0x54, 0x00, 0x00, 0x76, 0x54, 0x00, 0x00, + 0xd6, 0x54, 0x00, 0x00, 0x9a, 0x08, 0x75, 0x07, 0x9e, 0x08, 0x75, 0x07, + 0x6b, 0x55, 0x00, 0x00, 0x7d, 0x56, 0x00, 0x00, 0xe5, 0x56, 0x00, 0x00, + 0x39, 0x57, 0x00, 0x00, 0xba, 0x57, 0x00, 0x00, 0xe0, 0x57, 0x00, 0x00, + 0x05, 0x58, 0x00, 0x00, 0x45, 0x58, 0x00, 0x00, 0x66, 0x58, 0x00, 0x00, + 0xdf, 0x58, 0x00, 0x00, 0xea, 0x58, 0x00, 0x00, 0x2d, 0x59, 0x00, 0x00, + 0x62, 0x59, 0x00, 0x00, 0x76, 0x59, 0x00, 0x00, 0x8f, 0x59, 0x00, 0x00, + 0x9c, 0x59, 0x00, 0x00, 0xbd, 0x59, 0x00, 0x00, 0xd1, 0x59, 0x00, 0x00, + 0xe3, 0x59, 0x00, 0x00, 0x12, 0x5a, 0x00, 0x00, 0x30, 0x5a, 0x00, 0x00, + 0x6d, 0x5a, 0x00, 0x00, 0x7e, 0x5a, 0x00, 0x00, 0x86, 0x5a, 0x00, 0x00, + 0xb2, 0x5a, 0x00, 0x00, 0x4f, 0x5b, 0x00, 0x00, 0x8c, 0x5c, 0x00, 0x00, + 0xf5, 0x5c, 0x00, 0x00, 0x2e, 0x5d, 0x00, 0x00, 0x4b, 0x5d, 0x00, 0x00, + 0x6f, 0x5d, 0x00, 0x00, 0xa4, 0x5d, 0x00, 0x00, 0xc6, 0x5d, 0x00, 0x00, + 0xdc, 0x5d, 0x00, 0x00, 0x39, 0x5e, 0x00, 0x00, 0xb4, 0x5e, 0x00, 0x00, + 0x32, 0x5f, 0x00, 0x00, 0x6d, 0x60, 0x00, 0x00, 0x2a, 0x61, 0x00, 0x00, + 0x87, 0x61, 0x00, 0x00, 0xfd, 0x61, 0x00, 0x00, 0x05, 0x62, 0x00, 0x00, + 0x6d, 0x62, 0x00, 0x00, 0xc3, 0x62, 0x00, 0x00, 0x14, 0x63, 0x00, 0x00, + 0x88, 0x63, 0x00, 0x00, 0x90, 0x63, 0x00, 0x00, 0xc3, 0x63, 0x00, 0x00, + 0xda, 0x63, 0x00, 0x00, 0x71, 0x64, 0x00, 0x00, 0x5e, 0x65, 0x00, 0x00, + 0x67, 0x66, 0x00, 0x00, 0xd7, 0x66, 0x00, 0x00, 0xdd, 0x66, 0x00, 0x00, + 0x2a, 0x67, 0x00, 0x00, 0x3d, 0x67, 0x00, 0x00, 0x9a, 0x69, 0x00, 0x00, + 0xe2, 0x69, 0x00, 0x00, 0xe4, 0x08, 0x75, 0x07, 0xe8, 0x08, 0x75, 0x07, + 0xb7, 0x6e, 0x00, 0x00, 0xe8, 0x6e, 0x00, 0x00, 0x9e, 0x15, 0x00, 0x00, + 0x18, 0x17, 0x00, 0x00, 0x2d, 0x17, 0x00, 0x00, 0x99, 0x17, 0x00, 0x00, + 0xaf, 0x17, 0x00, 0x00, 0x4b, 0x18, 0x00, 0x00, 0x74, 0x18, 0x00, 0x00, + 0x8b, 0x18, 0x00, 0x00, 0xcb, 0x18, 0x00, 0x00, 0xd5, 0x18, 0x00, 0x00, + 0xe4, 0x18, 0x00, 0x00, 0x12, 0x19, 0x00, 0x00, 0x1c, 0x19, 0x00, 0x00, + 0x2b, 0x19, 0x00, 0x00, 0x48, 0x19, 0x00, 0x00, 0xb0, 0x19, 0x00, 0x00, + 0xd4, 0x19, 0x00, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x4e, 0x1b, 0x00, 0x00, + 0xa3, 0x1b, 0x00, 0x00, 0xb9, 0x70, 0x00, 0x00, 0xc8, 0x70, 0x00, 0x00, + 0xd7, 0x70, 0x00, 0x00, 0xe6, 0x70, 0x00, 0x00, 0xf9, 0x70, 0x00, 0x00, + 0x32, 0x71, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x62, 0x71, 0x00, 0x00, + 0x7a, 0x71, 0x00, 0x00, 0x96, 0x71, 0x00, 0x00, 0xfb, 0x71, 0x00, 0x00, + 0x2d, 0x72, 0x00, 0x00, 0x3a, 0x72, 0x00, 0x00, 0x5b, 0x72, 0x00, 0x00, + 0x90, 0x72, 0x00, 0x00, 0xac, 0x72, 0x00, 0x00, 0xb9, 0x72, 0x00, 0x00, + 0xf3, 0x72, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x1c, 0x73, 0x00, 0x00, + 0x3a, 0x73, 0x00, 0x00, 0x49, 0x73, 0x00, 0x00, 0x5a, 0x73, 0x00, 0x00, + 0x69, 0x73, 0x00, 0x00, 0x92, 0x73, 0x00, 0x00, 0x9e, 0x73, 0x00, 0x00, + 0xad, 0x73, 0x00, 0x00, 0xe2, 0x73, 0x00, 0x00, 0x05, 0x74, 0x00, 0x00, + 0x47, 0x74, 0x00, 0x00, 0x55, 0x74, 0x00, 0x00, 0x96, 0x74, 0x00, 0x00, + 0xa4, 0x74, 0x00, 0x00, 0xc3, 0x74, 0x00, 0x00, 0xfb, 0x74, 0x00, 0x00, + 0x32, 0x75, 0x00, 0x00, 0x54, 0x75, 0x00, 0x00, 0x5e, 0x75, 0x00, 0x00, + 0xa5, 0x75, 0x00, 0x00, 0xbc, 0x75, 0x00, 0x00, 0xf3, 0x75, 0x00, 0x00, + 0xfd, 0x75, 0x00, 0x00, 0x66, 0x76, 0x00, 0x00, 0x90, 0x76, 0x00, 0x00, + 0xf1, 0x1c, 0x00, 0x00, 0x0c, 0x1d, 0x00, 0x00, 0x37, 0x1d, 0x00, 0x00, + 0x5a, 0x1d, 0x00, 0x00, 0x7d, 0x1d, 0x00, 0x00, 0xba, 0x76, 0x00, 0x00, + 0x21, 0x77, 0x00, 0x00, 0x2f, 0x77, 0x00, 0x00, 0xd9, 0x1d, 0x00, 0x00, + 0x65, 0x1e, 0x00, 0x00, 0x4d, 0x1f, 0x00, 0x00, 0x9c, 0x1f, 0x00, 0x00, + 0x47, 0x20, 0x00, 0x00, 0xd4, 0x22, 0x00, 0x00, 0xfb, 0x22, 0x00, 0x00, + 0xa1, 0x23, 0x00, 0x00, 0x6b, 0x24, 0x00, 0x00, 0x85, 0x24, 0x00, 0x00, + 0xa6, 0x24, 0x00, 0x00, 0xb1, 0x24, 0x00, 0x00, 0x1a, 0x25, 0x00, 0x00, + 0x5f, 0x25, 0x00, 0x00, 0x98, 0x25, 0x00, 0x00, 0xb1, 0x25, 0x00, 0x00, + 0xcb, 0x25, 0x00, 0x00, 0xe3, 0x25, 0x00, 0x00, 0xf0, 0x25, 0x00, 0x00, + 0x01, 0x26, 0x00, 0x00, 0x1c, 0x26, 0x00, 0x00, 0x36, 0x26, 0x00, 0x00, + 0x4e, 0x26, 0x00, 0x00, 0x58, 0x26, 0x00, 0x00, 0x73, 0x26, 0x00, 0x00, + 0x96, 0x26, 0x00, 0x00, 0xb2, 0x26, 0x00, 0x00, 0xd6, 0x26, 0x00, 0x00, + 0xe1, 0x26, 0x00, 0x00, 0xf6, 0x26, 0x00, 0x00, 0x52, 0x27, 0x00, 0x00, + 0x73, 0x27, 0x00, 0x00, 0xd3, 0x28, 0x00, 0x00, 0x27, 0x29, 0x00, 0x00, + 0xf4, 0x29, 0x00, 0x00, 0x20, 0x2a, 0x00, 0x00, 0xcb, 0x2a, 0x00, 0x00, + 0x2a, 0x2d, 0x00, 0x00, 0x65, 0x2d, 0x00, 0x00, 0x78, 0x2d, 0x00, 0x00, + 0x95, 0x2d, 0x00, 0x00, 0x98, 0x2d, 0x00, 0x00, 0xd7, 0x2d, 0x00, 0x00, + 0x10, 0x2e, 0x00, 0x00, 0x64, 0x2e, 0x00, 0x00, 0x7b, 0x2e, 0x00, 0x00, + 0x9d, 0x2f, 0x00, 0x00, 0xc4, 0x2f, 0x00, 0x00, 0x50, 0x30, 0x00, 0x00, + 0x5b, 0x30, 0x00, 0x00, 0x6b, 0x30, 0x00, 0x00, 0x7a, 0x30, 0x00, 0x00, + 0x98, 0x30, 0x00, 0x00, 0xeb, 0x34, 0x00, 0x00, 0x0d, 0x36, 0x00, 0x00, + 0x6d, 0x38, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, + 0x13, 0x01, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00, + 0x3a, 0x01, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, + 0x5a, 0x01, 0x00, 0x00, 0xbe, 0x01, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, + 0x60, 0x02, 0x00, 0x00, 0x65, 0x02, 0x00, 0x00, 0x7a, 0x02, 0x00, 0x00, + 0x45, 0x03, 0x00, 0x00, 0x4d, 0x03, 0x00, 0x00, 0x6c, 0x03, 0x00, 0x00, + 0x87, 0x03, 0x00, 0x00, 0xac, 0x03, 0x00, 0x00, 0xbf, 0x03, 0x00, 0x00, + 0xfc, 0x03, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x3b, 0x04, 0x00, 0x00, + 0x40, 0x04, 0x00, 0x00, 0x64, 0x04, 0x00, 0x00, 0xe5, 0x04, 0x00, 0x00, + 0xe8, 0x04, 0x00, 0x00, 0xfd, 0x04, 0x00, 0x00, 0x5e, 0x05, 0x00, 0x00, + 0x8b, 0x05, 0x00, 0x00, 0x8e, 0x05, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, + 0x7a, 0x06, 0x00, 0x00, 0x90, 0x06, 0x00, 0x00, 0x2b, 0x07, 0x00, 0x00, + 0x4b, 0x07, 0x00, 0x00, 0x53, 0x07, 0x00, 0x00, 0x68, 0x07, 0x00, 0x00, + 0x85, 0x07, 0x00, 0x00, 0xa2, 0x07, 0x00, 0x00, 0xb1, 0x07, 0x00, 0x00, + 0x2f, 0x08, 0x00, 0x00, 0x4a, 0x08, 0x00, 0x00, 0x58, 0x08, 0x00, 0x00, + 0x91, 0x08, 0x00, 0x00, 0x99, 0x08, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x00, + 0xd9, 0x08, 0x00, 0x00, 0xea, 0x08, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, + 0x1e, 0x09, 0x00, 0x00, 0x4e, 0x09, 0x00, 0x00, 0x51, 0x09, 0x00, 0x00, + 0x63, 0x09, 0x00, 0x00, 0x87, 0x09, 0x00, 0x00, 0x9d, 0x09, 0x00, 0x00, + 0xc2, 0x09, 0x00, 0x00, 0xcd, 0x09, 0x00, 0x00, 0xfd, 0x09, 0x00, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, 0x2c, 0x0a, 0x00, 0x00, + 0x4f, 0x0a, 0x00, 0x00, 0x57, 0x0a, 0x00, 0x00, 0x8a, 0x0a, 0x00, 0x00, + 0xcd, 0x0a, 0x00, 0x00, 0xd5, 0x0a, 0x00, 0x00, 0x06, 0x0b, 0x00, 0x00, + 0x53, 0x0b, 0x00, 0x00, 0x81, 0x0b, 0x00, 0x00, 0xa1, 0x0b, 0x00, 0x00, + 0xa4, 0x0b, 0x00, 0x00, 0xc5, 0x0b, 0x00, 0x00, 0xcd, 0x0b, 0x00, 0x00, + 0x10, 0x0c, 0x00, 0x00, 0x2a, 0x0c, 0x00, 0x00, 0x47, 0x0c, 0x00, 0x00, + 0x6b, 0x0c, 0x00, 0x00, 0xaf, 0x0c, 0x00, 0x00, 0xef, 0x0c, 0x00, 0x00, + 0x72, 0x0d, 0x00, 0x00, 0x82, 0x0d, 0x00, 0x00, 0xb7, 0x0d, 0x00, 0x00, + 0xd1, 0x0d, 0x00, 0x00, 0xeb, 0x0d, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, + 0x1c, 0x0e, 0x00, 0x00, 0x5c, 0x0e, 0x00, 0x00, 0x80, 0x0e, 0x00, 0x00, + 0x9e, 0x0e, 0x00, 0x00, 0xae, 0x0e, 0x00, 0x00, 0x66, 0x0f, 0x00, 0x00, + 0x9b, 0x0f, 0x00, 0x00, 0xa3, 0x0f, 0x00, 0x00, 0xb5, 0x0f, 0x00, 0x00, + 0xe3, 0x0f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x4d, 0x10, 0x00, 0x00, + 0x5b, 0x10, 0x00, 0x00, 0x6f, 0x10, 0x00, 0x00, 0x91, 0x10, 0x00, 0x00, + 0xb5, 0x10, 0x00, 0x00, 0xdb, 0x10, 0x00, 0x00, 0xfa, 0x10, 0x00, 0x00, + 0x17, 0x11, 0x00, 0x00, 0x20, 0x11, 0x00, 0x00, 0x37, 0x11, 0x00, 0x00, + 0x58, 0x11, 0x00, 0x00, 0x75, 0x11, 0x00, 0x00, 0xb0, 0x11, 0x00, 0x00, + 0xfa, 0x11, 0x00, 0x00, 0x4b, 0x12, 0x00, 0x00, 0xdd, 0x12, 0x00, 0x00, + 0x68, 0x13, 0x00, 0x00, 0x80, 0x13, 0x00, 0x00, 0xa7, 0x13, 0x00, 0x00, + 0x11, 0x14, 0x00, 0x00, 0x1a, 0x14, 0x00, 0x00, 0x58, 0x14, 0x00, 0x00, + 0x64, 0x14, 0x00, 0x00, 0x8c, 0x14, 0x00, 0x00, 0xce, 0x14, 0x00, 0x00, + 0x53, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x52, 0x06, 0x3d, 0x14, 0x00, + 0x7c, 0x06, 0x31, 0xc0, 0x31, 0xd2, 0x5b, 0xcb, 0xba, 0x0a, 0x00, 0x89, + 0xc3, 0xf7, 0xea, 0x43, 0x89, 0x1e, 0x52, 0x06, 0x8c, 0xda, 0x05, 0xb6, + 0x0a, 0x5b, 0xcb, 0x53, 0x51, 0xbb, 0x75, 0x07, 0x8e, 0xdb, 0x83, 0x3e, + 0x56, 0x06, 0x64, 0x7c, 0x06, 0xb8, 0xff, 0xff, 0x59, 0x5b, 0xcb, 0x0e, + 0x3e, 0xe8, 0xc0, 0x12, 0x8e, 0xdb, 0x8b, 0x0e, 0x56, 0x06, 0x89, 0xcb, + 0xd1, 0xe3, 0xd1, 0xe3, 0x41, 0x89, 0x87, 0x7e, 0x0b, 0x89, 0x0e, 0x56, + 0x06, 0x89, 0x97, 0x80, 0x0b, 0x31, 0xc0, 0x59, 0x5b, 0xcb, 0x51, 0x55, + 0x89, 0xe5, 0x53, 0xbb, 0x75, 0x07, 0x8e, 0xdb, 0x83, 0x3e, 0x58, 0x06, + 0x64, 0x7c, 0x05, 0xb8, 0xff, 0xff, 0xeb, 0x30, 0x8b, 0x1e, 0x58, 0x06, + 0x8a, 0x4e, 0xfe, 0x88, 0x8f, 0x0e, 0x0d, 0x0e, 0x3e, 0xe8, 0x7c, 0x12, + 0x89, 0xd1, 0xba, 0x75, 0x07, 0x8e, 0xda, 0x8b, 0x16, 0x58, 0x06, 0x89, + 0xd3, 0xd1, 0xe3, 0xd1, 0xe3, 0x42, 0x89, 0x87, 0x26, 0x09, 0x89, 0x16, + 0x58, 0x06, 0x89, 0x8f, 0x28, 0x09, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x59, + 0xcb, 0x53, 0x52, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x5c, 0x06, 0x8b, + 0x16, 0x5a, 0x06, 0x85, 0xc0, 0x75, 0x18, 0x85, 0xd2, 0x75, 0x14, 0xb8, + 0x01, 0x10, 0xbb, 0x75, 0x07, 0x0e, 0x3e, 0xe8, 0x73, 0x12, 0x8e, 0xdb, + 0xa3, 0x5a, 0x06, 0x89, 0x16, 0x5c, 0x06, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0x8b, 0x16, 0x5c, 0x06, 0xa1, 0x5a, 0x06, 0x85, 0xd2, 0x75, 0x04, 0x85, + 0xc0, 0x74, 0x05, 0x31, 0xc0, 0x5a, 0x5b, 0xc3, 0xb8, 0xff, 0xff, 0x5a, + 0x5b, 0xc3, 0x52, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x5c, 0x06, 0x8b, + 0x16, 0x5a, 0x06, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, 0x18, 0x89, + 0xd0, 0x8b, 0x16, 0x5c, 0x06, 0x0e, 0x3e, 0xe8, 0x3c, 0x13, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0x31, 0xc0, 0xa3, 0x5a, 0x06, 0xa3, 0x5c, 0x06, 0x5a, + 0xc3, 0xb8, 0x75, 0x07, 0x50, 0xb8, 0x22, 0x00, 0x50, 0xb8, 0x75, 0x07, + 0x50, 0xb8, 0x8c, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0x60, 0x13, 0x83, 0xc4, + 0x08, 0xb8, 0x75, 0x07, 0x50, 0xb8, 0x45, 0x00, 0x50, 0xb8, 0x75, 0x07, + 0x50, 0xb8, 0x8c, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0x48, 0x13, 0x83, 0xc4, + 0x08, 0xb8, 0x75, 0x07, 0x50, 0xb8, 0x6c, 0x00, 0x50, 0xb8, 0x75, 0x07, + 0x50, 0xb8, 0x8c, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0x30, 0x13, 0x83, 0xc4, + 0x08, 0xc3, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0x50, 0x50, 0x53, + 0x51, 0xc7, 0x46, 0xfe, 0x01, 0x00, 0xba, 0x04, 0x00, 0x31, 0xc9, 0x8b, + 0x46, 0xfe, 0x3b, 0x46, 0xfa, 0x7c, 0x03, 0xe9, 0xef, 0x00, 0x89, 0xd6, + 0x8e, 0x5e, 0xf6, 0x03, 0x76, 0xf8, 0xff, 0x46, 0xfe, 0x8b, 0x44, 0x02, + 0x8b, 0x1c, 0x8e, 0xd8, 0x89, 0x46, 0xfc, 0x8a, 0x07, 0x83, 0xc2, 0x04, + 0x3c, 0x2d, 0x74, 0x04, 0x3c, 0x2f, 0x75, 0x64, 0x8e, 0x5e, 0xfc, 0x43, + 0x8a, 0x07, 0x3c, 0x2d, 0x74, 0xf9, 0x3c, 0x2f, 0x74, 0xf5, 0xbf, 0x91, + 0x00, 0xb8, 0x75, 0x07, 0x89, 0xde, 0x8e, 0xc0, 0xac, 0x26, 0x8a, 0x25, + 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, + 0xc0, 0x74, 0x30, 0xbf, 0x93, 0x00, 0x89, 0xde, 0xac, 0x26, 0x8a, 0x25, + 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, + 0xc0, 0x74, 0x18, 0xbf, 0x98, 0x00, 0x89, 0xde, 0xac, 0x26, 0x8a, 0x25, + 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, + 0xc0, 0x75, 0x0b, 0xe8, 0x17, 0xff, 0xb8, 0xff, 0xff, 0xe9, 0x9a, 0x00, + 0xeb, 0x3f, 0xbf, 0x9a, 0x00, 0x89, 0xde, 0xac, 0x26, 0x8a, 0x25, 0x2a, + 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, 0xc0, + 0x74, 0x1d, 0x1e, 0x53, 0x8c, 0xc0, 0x50, 0xb8, 0x9c, 0x00, 0x50, 0x8c, + 0xc0, 0x50, 0xb8, 0x8c, 0x06, 0x50, 0x0e, 0xe8, 0x58, 0x12, 0x90, 0xb8, + 0xff, 0xff, 0x83, 0xc4, 0x0c, 0xeb, 0x63, 0x06, 0x1f, 0xc6, 0x06, 0x41, + 0x06, 0x01, 0xe9, 0x2e, 0xff, 0x85, 0xc9, 0x74, 0x0f, 0x1e, 0x53, 0xb8, + 0x75, 0x07, 0x50, 0xb8, 0xb1, 0x00, 0x50, 0xb8, 0x75, 0x07, 0xeb, 0xd1, + 0xb8, 0x75, 0x07, 0xb9, 0x01, 0x00, 0x8e, 0xd8, 0x8b, 0x46, 0xfc, 0x89, + 0x1e, 0x46, 0x06, 0xa3, 0x48, 0x06, 0xe9, 0x06, 0xff, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0x8b, 0x16, 0x48, 0x06, 0xa1, 0x46, 0x06, 0x85, 0xd2, 0x75, + 0x1f, 0x85, 0xc0, 0x75, 0x1b, 0x8c, 0xd8, 0x50, 0xb8, 0xca, 0x00, 0x50, + 0x8c, 0xd8, 0x50, 0xb8, 0x8c, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0xf6, 0x11, + 0xb8, 0xff, 0xff, 0x83, 0xc4, 0x08, 0xeb, 0x02, 0x31, 0xc0, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x5a, 0xc3, 0x53, 0x51, 0x89, 0xc3, 0x89, 0xd1, 0x85, + 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x1f, 0x8e, 0xda, 0x8b, 0x57, 0x02, + 0x8b, 0x07, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x10, 0x0e, 0xe8, + 0x7c, 0x11, 0x90, 0x8e, 0xd9, 0xc7, 0x07, 0x00, 0x00, 0xc7, 0x47, 0x02, + 0x00, 0x00, 0x59, 0x5b, 0xcb, 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd7, 0x0e, + 0xe8, 0xc6, 0xff, 0x85, 0xc9, 0x75, 0x04, 0x85, 0xdb, 0x74, 0x10, 0x89, + 0xd8, 0x89, 0xca, 0x0e, 0x3e, 0xe8, 0x04, 0x10, 0x8e, 0xdf, 0x89, 0x04, + 0x89, 0x54, 0x02, 0x5f, 0x5e, 0xcb, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc6, + 0x89, 0xc7, 0x8e, 0xc2, 0x89, 0xf3, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0xf2, + 0xae, 0xf7, 0xd1, 0x49, 0x01, 0xcb, 0x8e, 0xda, 0x4b, 0x39, 0xf3, 0x72, + 0x12, 0x8a, 0x07, 0x3c, 0x0d, 0x74, 0x04, 0x3c, 0x0a, 0x75, 0x08, 0xc6, + 0x07, 0x00, 0x83, 0xc3, 0xff, 0xeb, 0xea, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, + 0x53, 0x51, 0x52, 0x56, 0x57, 0xb9, 0xb6, 0x0a, 0xbf, 0x75, 0x07, 0x31, + 0xdb, 0x83, 0xc1, 0x04, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x3b, 0x1e, 0x52, + 0x06, 0x73, 0x23, 0xbe, 0x0a, 0x00, 0x89, 0xd8, 0xf7, 0xee, 0xbe, 0xb6, + 0x0a, 0x89, 0xfa, 0x01, 0xc6, 0x89, 0xc8, 0x0e, 0xe8, 0x46, 0xff, 0xba, + 0x75, 0x07, 0x89, 0xf0, 0x43, 0x0e, 0xe8, 0x3c, 0xff, 0x83, 0xc1, 0x0a, + 0xeb, 0xd2, 0xbb, 0x7e, 0x0b, 0x8c, 0xde, 0x31, 0xc0, 0x31, 0xc9, 0xa3, + 0x52, 0x06, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x3b, 0x0e, 0x56, 0x06, 0x73, + 0x0e, 0x89, 0xd8, 0x89, 0xf2, 0x0e, 0xe8, 0x18, 0xff, 0x41, 0x83, 0xc3, + 0x04, 0xeb, 0xe7, 0xb9, 0x26, 0x09, 0x8c, 0xde, 0x31, 0xc0, 0x31, 0xdb, + 0xa3, 0x56, 0x06, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x3b, 0x1e, 0x58, 0x06, + 0x73, 0x18, 0x89, 0xc8, 0x89, 0xf2, 0x0e, 0xe8, 0xf3, 0xfe, 0xb8, 0x75, + 0x07, 0x43, 0x8e, 0xd8, 0x83, 0xc1, 0x04, 0xc6, 0x87, 0x0d, 0x0d, 0x00, + 0xeb, 0xdd, 0x31, 0xc0, 0x8c, 0xda, 0xa3, 0x58, 0x06, 0xb8, 0x42, 0x06, + 0x0e, 0xe8, 0xd5, 0xfe, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xcb, 0x53, 0x51, + 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x3a, 0x31, 0xc0, 0x89, + 0x46, 0xc6, 0x89, 0x46, 0xc8, 0x89, 0x46, 0xca, 0x89, 0x46, 0xcc, 0xb8, + 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x16, 0x48, 0x06, 0xa1, 0x46, 0x06, 0x85, + 0xd2, 0x75, 0x20, 0x85, 0xc0, 0x75, 0x1c, 0x8c, 0xd8, 0x50, 0xb8, 0xe2, + 0x00, 0x50, 0x8c, 0xd8, 0x50, 0xb8, 0x8c, 0x06, 0x50, 0x0e, 0x3e, 0xe8, + 0x74, 0x10, 0xb8, 0x01, 0x00, 0x83, 0xc4, 0x08, 0xe9, 0x54, 0x08, 0xe8, + 0x7b, 0xfc, 0x85, 0xc0, 0x74, 0x0d, 0xb8, 0x75, 0x07, 0x50, 0xb8, 0xf6, + 0x00, 0x50, 0xb8, 0x75, 0x07, 0xeb, 0xd9, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0xbb, 0x09, 0x01, 0x8c, 0xd9, 0xa1, 0x46, 0x06, 0x8b, 0x16, 0x48, 0x06, + 0x0e, 0xe8, 0xab, 0x12, 0x90, 0x89, 0x46, 0xf4, 0x89, 0x56, 0xce, 0x85, + 0xd2, 0x75, 0x2b, 0x85, 0xc0, 0x75, 0x27, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0xff, 0x36, 0x48, 0x06, 0xff, 0x36, 0x46, 0x06, 0x50, 0xb8, 0x0b, 0x01, + 0x50, 0x8c, 0xd8, 0x50, 0xb8, 0x8c, 0x06, 0x50, 0x0e, 0xe8, 0x16, 0x10, + 0x90, 0xb8, 0x01, 0x00, 0x83, 0xc4, 0x0c, 0xe9, 0xf5, 0x07, 0xe9, 0xe5, + 0x02, 0x3c, 0x23, 0x74, 0xf9, 0x84, 0xc0, 0x74, 0xf5, 0x3c, 0x5b, 0x74, + 0x03, 0xe9, 0x3a, 0x01, 0xff, 0x46, 0xf6, 0xb1, 0x5d, 0x8b, 0x76, 0xf6, + 0x8c, 0xda, 0x8a, 0x04, 0x3a, 0xc1, 0x74, 0x09, 0x46, 0x84, 0xc0, 0x75, + 0xf5, 0x2b, 0xf6, 0x2b, 0xd2, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xf6, 0x74, + 0x05, 0x8e, 0xda, 0xc6, 0x04, 0x00, 0x8b, 0x5e, 0xf6, 0x8b, 0x4e, 0xf8, + 0x8d, 0x46, 0xc6, 0x8c, 0xd2, 0x0e, 0xe8, 0x10, 0xfe, 0x83, 0x7e, 0xc8, + 0x00, 0x75, 0x22, 0x83, 0x7e, 0xc6, 0x00, 0x75, 0x1c, 0xb8, 0xfe, 0x00, + 0xbb, 0x2f, 0x01, 0x50, 0xb8, 0x75, 0x07, 0xb9, 0x75, 0x07, 0x50, 0xb8, + 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x39, 0x01, 0x0e, 0xe8, 0x49, 0x13, + 0x90, 0xbf, 0x51, 0x01, 0xb8, 0x75, 0x07, 0xc5, 0x76, 0xc6, 0x8e, 0xc0, + 0xac, 0x26, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, + 0xf3, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x08, 0xc7, 0x46, 0xcc, 0x01, 0x00, + 0xe9, 0x53, 0x02, 0xbf, 0x56, 0x01, 0xc5, 0x76, 0xc6, 0xac, 0x26, 0x8a, + 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, + 0x85, 0xc0, 0x75, 0x08, 0xc7, 0x46, 0xcc, 0x02, 0x00, 0xe9, 0x32, 0x02, + 0xc5, 0x5e, 0xc6, 0xc7, 0x46, 0xcc, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x75, + 0x03, 0xe9, 0x22, 0x02, 0xc7, 0x46, 0xfc, 0x00, 0x00, 0xc7, 0x46, 0xea, + 0xb6, 0x0a, 0x8c, 0x46, 0xec, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x46, + 0xfc, 0x3b, 0x06, 0x52, 0x06, 0x73, 0x5f, 0x8b, 0x7e, 0xec, 0x8b, 0x76, + 0xea, 0x8e, 0xdf, 0x89, 0xf3, 0x8b, 0x47, 0x06, 0x8b, 0x57, 0x04, 0x85, + 0xc0, 0x75, 0x20, 0x85, 0xd2, 0x75, 0x1c, 0xb8, 0x0f, 0x01, 0xbb, 0x2f, + 0x01, 0x50, 0xb8, 0x75, 0x07, 0xb9, 0x75, 0x07, 0x50, 0xb8, 0x25, 0x01, + 0x89, 0xca, 0x50, 0xb8, 0x5d, 0x01, 0x0e, 0xe8, 0xa3, 0x12, 0x90, 0x8e, + 0xdf, 0x8b, 0x7e, 0xc6, 0xc5, 0x54, 0x04, 0x8e, 0x46, 0xc8, 0x89, 0xd6, + 0xac, 0x26, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, + 0xf3, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x0e, 0x8b, 0x46, 0xfc, 0xc7, 0x46, + 0xcc, 0x03, 0x00, 0x89, 0x46, 0xca, 0xe9, 0xa5, 0x01, 0x83, 0x46, 0xea, + 0x0a, 0xff, 0x46, 0xfc, 0xeb, 0x87, 0x8b, 0x46, 0xcc, 0x3d, 0x01, 0x00, + 0x75, 0x61, 0xb1, 0x3d, 0x89, 0xde, 0x8c, 0xda, 0x8a, 0x04, 0x3a, 0xc1, + 0x74, 0x09, 0x46, 0x84, 0xc0, 0x75, 0xf5, 0x2b, 0xf6, 0x2b, 0xd2, 0x85, + 0xd2, 0x75, 0x04, 0x85, 0xf6, 0x74, 0xcf, 0xbf, 0x7a, 0x01, 0xb8, 0x75, + 0x07, 0x8e, 0xda, 0x8d, 0x5c, 0x01, 0xc6, 0x04, 0x00, 0xc5, 0x76, 0xf6, + 0x8e, 0xc0, 0x89, 0x56, 0xfa, 0xac, 0x26, 0x8a, 0x25, 0x2a, 0xc4, 0x75, + 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x5f, + 0x8e, 0x5e, 0xfa, 0x89, 0xd9, 0x89, 0x56, 0xd0, 0x89, 0x46, 0xd2, 0x89, + 0x46, 0xd4, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x0a, 0x3c, 0x2c, 0x74, 0x06, + 0x43, 0xeb, 0xf3, 0xe9, 0xf6, 0x01, 0x8e, 0x5e, 0xfa, 0x80, 0x3f, 0x2c, + 0x75, 0x0a, 0xc6, 0x07, 0x00, 0x43, 0x8c, 0x5e, 0xd4, 0x89, 0x5e, 0xd2, + 0x83, 0x7e, 0xd4, 0x00, 0x75, 0x06, 0x83, 0x7e, 0xd2, 0x00, 0x74, 0x25, + 0xc5, 0x5e, 0xd2, 0x80, 0x3f, 0x00, 0x74, 0x1d, 0x0e, 0xe8, 0x94, 0xf9, + 0x89, 0xc3, 0x89, 0x56, 0xfe, 0x85, 0xd2, 0x75, 0x13, 0x85, 0xc0, 0x75, + 0x0f, 0xb8, 0x75, 0x07, 0x50, 0xb8, 0x83, 0x01, 0xe9, 0x14, 0x02, 0xeb, + 0x61, 0xe9, 0xea, 0x00, 0xbf, 0x98, 0x01, 0x8e, 0xda, 0x89, 0xc6, 0xb8, + 0x75, 0x07, 0xc6, 0x44, 0x08, 0x00, 0x8e, 0x5e, 0xd0, 0x8e, 0xc0, 0x89, + 0xce, 0xac, 0x26, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, + 0x75, 0xf3, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x0e, 0xb9, 0xa1, 0x01, 0x8e, + 0xda, 0x89, 0xde, 0x8c, 0x46, 0xd0, 0xc6, 0x44, 0x08, 0x01, 0x8b, 0x46, + 0xd2, 0x8b, 0x56, 0xd4, 0x0e, 0xe8, 0x38, 0x0c, 0x90, 0x8e, 0x5e, 0xfe, + 0x89, 0x07, 0x89, 0x57, 0x02, 0x8b, 0x56, 0xd0, 0x89, 0xc8, 0x0e, 0xe8, + 0x26, 0x0c, 0x90, 0x8e, 0x5e, 0xfe, 0x89, 0x47, 0x04, 0x89, 0x57, 0x06, + 0xeb, 0x9f, 0xbf, 0xa2, 0x01, 0x8b, 0x76, 0xf6, 0xac, 0x26, 0x8a, 0x25, + 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, + 0xc0, 0x75, 0x18, 0x8e, 0x5e, 0xfa, 0x89, 0xd9, 0x89, 0xd7, 0x31, 0xf6, + 0x31, 0xd2, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x0a, 0x3c, 0x2c, 0x74, 0x06, + 0x43, 0xeb, 0xf3, 0xe9, 0xc3, 0x00, 0x8e, 0x5e, 0xfa, 0x80, 0x3f, 0x2c, + 0x75, 0x08, 0x8d, 0x77, 0x01, 0x8c, 0xda, 0xc6, 0x07, 0x00, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0x31, 0xc0, 0xa3, 0x50, 0x06, 0x85, 0xd2, 0x75, 0x04, + 0x85, 0xf6, 0x74, 0x16, 0x8e, 0xda, 0x80, 0x3c, 0x00, 0x74, 0x0f, 0x89, + 0xf0, 0x0e, 0x3e, 0xe8, 0x7c, 0x12, 0xba, 0x75, 0x07, 0x8e, 0xda, 0xa3, + 0x50, 0x06, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x83, 0x3e, 0x50, 0x06, 0x00, + 0x7f, 0x06, 0xc7, 0x06, 0x50, 0x06, 0x05, 0x00, 0xb8, 0x4c, 0x06, 0xba, + 0x75, 0x07, 0x89, 0xcb, 0x89, 0xf9, 0x0e, 0xe8, 0x6f, 0xfb, 0x8e, 0x5e, + 0xce, 0x8b, 0x5e, 0xf4, 0x8a, 0x47, 0x0a, 0xa8, 0x10, 0x75, 0x5b, 0xa8, + 0x20, 0x75, 0x57, 0x1e, 0xb8, 0x75, 0x07, 0x53, 0x8e, 0xd8, 0xbb, 0x00, + 0x10, 0xa1, 0x5a, 0x06, 0x8b, 0x16, 0x5c, 0x06, 0x0e, 0xe8, 0x9e, 0x12, + 0x90, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x39, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xa1, 0x5a, 0x06, 0x8b, 0x16, 0x5c, 0x06, 0xe8, 0x56, 0xfb, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x5c, 0x06, 0x8b, 0x1e, 0x5a, 0x06, + 0x89, 0x46, 0xf8, 0x89, 0x5e, 0xf6, 0x8e, 0x5e, 0xf8, 0x8b, 0x5e, 0xf6, + 0x8a, 0x07, 0x3c, 0x20, 0x74, 0x07, 0x3c, 0x09, 0x74, 0x03, 0xe9, 0xb8, + 0xfc, 0xff, 0x46, 0xf6, 0xeb, 0xeb, 0xe9, 0xcb, 0x00, 0xbf, 0xae, 0x01, + 0x8b, 0x76, 0xf6, 0xac, 0x26, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, + 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x0a, 0xb8, 0x42, + 0x06, 0x89, 0xd1, 0x8c, 0xc2, 0xe9, 0x6e, 0xff, 0xbf, 0xba, 0x01, 0x8b, + 0x76, 0xf6, 0xac, 0x26, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, + 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x56, 0xff, + 0x89, 0xd8, 0x0e, 0xe8, 0xa4, 0x11, 0x90, 0x85, 0xc0, 0x7e, 0x05, 0xb8, + 0x01, 0x00, 0xeb, 0x02, 0x31, 0xc0, 0xba, 0x75, 0x07, 0x8e, 0xda, 0xa2, + 0x40, 0x06, 0xeb, 0xe1, 0x3d, 0x02, 0x00, 0x75, 0x15, 0x89, 0xd8, 0x8c, + 0xda, 0x0e, 0xe8, 0xe2, 0xf7, 0x85, 0xc0, 0x74, 0xd0, 0xb8, 0x75, 0x07, + 0x50, 0xb8, 0xc3, 0x01, 0xeb, 0x45, 0x3d, 0x03, 0x00, 0x75, 0xc2, 0xb8, + 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x46, 0xca, 0x3b, 0x06, 0x52, 0x06, 0x72, + 0x1a, 0xb8, 0x67, 0x01, 0xbb, 0x2f, 0x01, 0x50, 0x8c, 0xd8, 0x8c, 0xd9, + 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0xdd, 0x01, 0x0e, 0xe8, + 0xc3, 0x0f, 0x90, 0x8b, 0x5e, 0xca, 0x8b, 0x46, 0xf6, 0x8b, 0x56, 0xf8, + 0x0e, 0xe8, 0xd2, 0xf7, 0x85, 0xc0, 0x74, 0x89, 0xb8, 0x75, 0x07, 0x50, + 0xb8, 0xfc, 0x01, 0x50, 0xb8, 0x75, 0x07, 0x50, 0xb8, 0x8c, 0x06, 0x50, + 0x0e, 0xe8, 0xf2, 0x0b, 0x90, 0x83, 0xc4, 0x08, 0x8d, 0x46, 0xc6, 0x8c, + 0xd2, 0x0e, 0xe8, 0x00, 0xfa, 0x8b, 0x46, 0xf4, 0x8b, 0x56, 0xce, 0x0e, + 0x3e, 0xe8, 0xde, 0x12, 0xe8, 0x33, 0xf8, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0xa1, 0x44, 0x06, 0x8b, 0x16, 0x42, 0x06, 0x85, 0xc0, 0x75, 0x1a, 0x85, + 0xd2, 0x75, 0x16, 0xb8, 0x16, 0x02, 0x8c, 0xda, 0xbb, 0x75, 0x07, 0x0e, + 0x3e, 0xe8, 0x20, 0x0a, 0x8e, 0xdb, 0xa3, 0x42, 0x06, 0x89, 0x16, 0x44, + 0x06, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xc5, 0x1e, 0x42, 0x06, 0x80, 0x3f, + 0x00, 0x74, 0x0a, 0x8e, 0xd8, 0xc7, 0x06, 0x4a, 0x06, 0x02, 0x00, 0xeb, + 0x07, 0x8e, 0xd8, 0x31, 0xc0, 0xa3, 0x4a, 0x06, 0xb8, 0x75, 0x07, 0xc7, + 0x46, 0xee, 0xb6, 0x0a, 0x8e, 0xd8, 0x31, 0xc0, 0x8c, 0x5e, 0xf0, 0x89, + 0x46, 0xd6, 0xa3, 0x54, 0x06, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x46, + 0xd6, 0x3b, 0x06, 0x52, 0x06, 0x73, 0x71, 0x8b, 0x46, 0xf0, 0x8b, 0x76, + 0xee, 0x8e, 0xd8, 0x89, 0xf3, 0x89, 0x46, 0xd8, 0x8b, 0x47, 0x06, 0x8b, + 0x57, 0x04, 0x85, 0xc0, 0x75, 0x20, 0x85, 0xd2, 0x75, 0x1c, 0xb8, 0x84, + 0x01, 0xbb, 0x2f, 0x01, 0x50, 0xb8, 0x75, 0x07, 0xb9, 0x75, 0x07, 0x50, + 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x5d, 0x01, 0x0e, 0x3e, 0xe8, + 0xdf, 0x0e, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xc4, 0x3e, 0x4c, 0x06, 0x8e, + 0x5e, 0xd8, 0xc5, 0x44, 0x04, 0x89, 0xc6, 0xac, 0x26, 0x8a, 0x25, 0x2a, + 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, 0xc0, + 0x75, 0x0d, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x46, 0xd6, 0xa3, 0x54, + 0x06, 0xeb, 0x09, 0x83, 0x46, 0xee, 0x0a, 0xff, 0x46, 0xd6, 0xeb, 0x81, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x80, 0x3e, 0x41, 0x06, 0x00, 0x75, 0x03, + 0xe9, 0xbf, 0x02, 0x50, 0xb8, 0x35, 0x02, 0x50, 0x8c, 0xd8, 0xc7, 0x46, + 0xda, 0x00, 0x00, 0x50, 0xb8, 0x8c, 0x06, 0xbf, 0xb6, 0x0a, 0x50, 0xc7, + 0x46, 0xf2, 0x75, 0x07, 0x0e, 0xe8, 0xce, 0x0a, 0x90, 0x83, 0xc4, 0x08, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x46, 0xda, 0x3b, 0x06, 0x52, 0x06, + 0x72, 0x03, 0xe9, 0x92, 0x00, 0x8b, 0x46, 0xf2, 0x89, 0xfe, 0x8e, 0xd8, + 0x89, 0x46, 0xdc, 0x8b, 0x45, 0x06, 0x8b, 0x55, 0x04, 0x85, 0xc0, 0x75, + 0x20, 0x85, 0xd2, 0x75, 0x1c, 0xb8, 0x93, 0x01, 0xbb, 0x2f, 0x01, 0x50, + 0xb8, 0x75, 0x07, 0xb9, 0x75, 0x07, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, + 0x50, 0xb8, 0x5d, 0x01, 0x0e, 0xe8, 0x31, 0x0e, 0x90, 0x8e, 0x5e, 0xdc, + 0x8b, 0x44, 0x02, 0x8b, 0x14, 0x85, 0xc0, 0x75, 0x20, 0x85, 0xd2, 0x75, + 0x1c, 0xb8, 0x94, 0x01, 0xbb, 0x2f, 0x01, 0x50, 0xb8, 0x75, 0x07, 0xb9, + 0x75, 0x07, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x42, 0x02, + 0x0e, 0xe8, 0x05, 0x0e, 0x90, 0x8e, 0x5e, 0xdc, 0xff, 0x74, 0x02, 0xff, + 0x34, 0xff, 0x74, 0x06, 0xff, 0x74, 0x04, 0xff, 0x76, 0xda, 0xb8, 0x75, + 0x07, 0x50, 0xb8, 0x5a, 0x02, 0x50, 0xb8, 0x75, 0x07, 0x50, 0xb8, 0x8c, + 0x06, 0x83, 0xc7, 0x0a, 0x50, 0xff, 0x46, 0xda, 0x0e, 0xe8, 0x2e, 0x0a, + 0x90, 0x83, 0xc4, 0x12, 0xe9, 0x5d, 0xff, 0x8c, 0xd8, 0x50, 0xb8, 0x75, + 0x02, 0x50, 0x8c, 0xd8, 0x50, 0xb8, 0x8c, 0x06, 0x31, 0xff, 0x50, 0x31, + 0xf6, 0x0e, 0x3e, 0xe8, 0x10, 0x0a, 0x83, 0xc4, 0x08, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0x3b, 0x3e, 0x56, 0x06, 0x73, 0x56, 0x8b, 0x84, 0x7e, 0x0b, + 0x89, 0x46, 0xde, 0x8b, 0x84, 0x80, 0x0b, 0x89, 0x46, 0xe0, 0x85, 0xc0, + 0x75, 0x20, 0x83, 0x7e, 0xde, 0x00, 0x75, 0x1a, 0xb8, 0xa0, 0x01, 0xbb, + 0x2f, 0x01, 0x50, 0x8c, 0xd8, 0x8c, 0xd9, 0x50, 0xb8, 0x25, 0x01, 0x89, + 0xca, 0x50, 0xb8, 0x87, 0x02, 0x0e, 0x3e, 0xe8, 0x7b, 0x0d, 0xff, 0x76, + 0xe0, 0xff, 0x76, 0xde, 0xb8, 0x75, 0x07, 0x50, 0xb8, 0x91, 0x02, 0x50, + 0xb8, 0x75, 0x07, 0x50, 0xb8, 0x8c, 0x06, 0x83, 0xc6, 0x04, 0x50, 0x47, + 0x0e, 0xe8, 0xb2, 0x09, 0x90, 0x83, 0xc4, 0x0c, 0xeb, 0x9f, 0x50, 0xb8, + 0x98, 0x02, 0x50, 0x8c, 0xd8, 0x50, 0xb8, 0x8c, 0x06, 0xc7, 0x46, 0xe2, + 0x00, 0x00, 0x50, 0x31, 0xff, 0x0e, 0x3e, 0xe8, 0x94, 0x09, 0x83, 0xc4, + 0x08, 0xb8, 0x75, 0x07, 0x8b, 0x5e, 0xe2, 0x8e, 0xd8, 0x3b, 0x1e, 0x58, + 0x06, 0x72, 0x03, 0xe9, 0xcf, 0x00, 0x8b, 0x85, 0x26, 0x09, 0x89, 0x46, + 0xe4, 0x8b, 0x85, 0x28, 0x09, 0x89, 0x46, 0xe6, 0x8a, 0x87, 0x0e, 0x0d, + 0x30, 0xe4, 0x89, 0xc6, 0x83, 0x7e, 0xe6, 0x00, 0x75, 0x20, 0x83, 0x7e, + 0xe4, 0x00, 0x75, 0x1a, 0xb8, 0xad, 0x01, 0xbb, 0x2f, 0x01, 0x50, 0x8c, + 0xd8, 0x8c, 0xd9, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x87, + 0x02, 0x0e, 0x3e, 0xe8, 0xef, 0x0c, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x3b, + 0x36, 0x52, 0x06, 0x72, 0x1a, 0xb8, 0xae, 0x01, 0xbb, 0x2f, 0x01, 0x50, + 0x8c, 0xd8, 0x8c, 0xd9, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, + 0xaa, 0x02, 0x0e, 0xe8, 0xcb, 0x0c, 0x90, 0xba, 0x0a, 0x00, 0x89, 0xf0, + 0xf7, 0xea, 0xc7, 0x46, 0xe8, 0x75, 0x07, 0xbe, 0xb6, 0x0a, 0x8e, 0x5e, + 0xe8, 0x01, 0xc6, 0x8b, 0x44, 0x06, 0x8b, 0x54, 0x04, 0x85, 0xc0, 0x75, + 0x20, 0x85, 0xd2, 0x75, 0x1c, 0xb8, 0xb3, 0x01, 0xbb, 0x2f, 0x01, 0x50, + 0xb8, 0x75, 0x07, 0xb9, 0x75, 0x07, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, + 0x50, 0xb8, 0x5d, 0x01, 0x0e, 0xe8, 0x8d, 0x0c, 0x90, 0xff, 0x76, 0xe6, + 0x8e, 0x5e, 0xe8, 0xff, 0x76, 0xe4, 0xff, 0x74, 0x06, 0xff, 0x74, 0x04, + 0xb8, 0x75, 0x07, 0x50, 0xb8, 0xbf, 0x02, 0x50, 0xb8, 0x75, 0x07, 0x50, + 0xb8, 0x8c, 0x06, 0xff, 0x46, 0xe2, 0x50, 0x83, 0xc7, 0x04, 0x0e, 0xe8, + 0xb8, 0x08, 0x90, 0x83, 0xc4, 0x10, 0xe9, 0x20, 0xff, 0xa1, 0x4e, 0x06, + 0x8b, 0x16, 0x4c, 0x06, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, 0x1b, + 0xff, 0x36, 0x4e, 0x06, 0x52, 0x8c, 0xd8, 0x50, 0xb8, 0xd7, 0x02, 0x50, + 0x8c, 0xd8, 0x50, 0xb8, 0x8c, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0x8a, 0x08, + 0x83, 0xc4, 0x0c, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xff, 0x36, 0x50, 0x06, + 0x50, 0xb8, 0xeb, 0x02, 0x50, 0x8c, 0xd8, 0x50, 0xb8, 0x8c, 0x06, 0x50, + 0x0e, 0xe8, 0x6e, 0x08, 0x90, 0xb8, 0x75, 0x07, 0x83, 0xc4, 0x0a, 0x8e, + 0xd8, 0xff, 0x36, 0x54, 0x06, 0x50, 0xb8, 0x08, 0x03, 0x50, 0x8c, 0xd8, + 0x50, 0xb8, 0x8c, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0x50, 0x08, 0xb8, 0x75, + 0x07, 0x83, 0xc4, 0x0a, 0x8e, 0xd8, 0xff, 0x36, 0x44, 0x06, 0xff, 0x36, + 0x42, 0x06, 0x50, 0xb8, 0x21, 0x03, 0x50, 0x8c, 0xd8, 0x50, 0xb8, 0x8c, + 0x06, 0x50, 0x0e, 0xe8, 0x30, 0x08, 0x90, 0x83, 0xc4, 0x0c, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0x83, 0x3e, 0x52, 0x06, 0x00, 0x75, 0x07, 0x50, 0xb8, + 0x35, 0x03, 0xe9, 0x98, 0xf7, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0xe9, 0x57, + 0xf7, 0x53, 0x89, 0xc3, 0xb8, 0x40, 0x00, 0x8e, 0xd8, 0x8b, 0x07, 0x5b, + 0xcb, 0xb8, 0x49, 0x00, 0x53, 0x89, 0xc3, 0xb8, 0x40, 0x00, 0x8e, 0xd8, + 0x8a, 0x07, 0x5b, 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0x8e, 0xd9, + 0x89, 0xd7, 0xd1, 0xe0, 0x31, 0xd2, 0xb9, 0x75, 0x07, 0x8e, 0xc1, 0x26, + 0x3b, 0x16, 0x74, 0x0d, 0x73, 0x28, 0x80, 0x3f, 0x00, 0x74, 0x23, 0xc6, + 0x46, 0xff, 0x00, 0x42, 0x8a, 0x0f, 0x26, 0x8b, 0x36, 0x5e, 0x06, 0x88, + 0x4e, 0xfe, 0x43, 0x26, 0x8e, 0x06, 0x60, 0x06, 0x8b, 0x4e, 0xfe, 0x01, + 0xc6, 0x01, 0xf9, 0x40, 0x40, 0x26, 0x89, 0x0c, 0xeb, 0xcc, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0xcb, 0x53, 0x51, 0x52, 0x56, 0x89, 0xc1, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0x3b, 0x0e, 0x52, 0x06, 0x72, 0x03, 0xe9, 0xe1, 0xf6, + 0xba, 0x0a, 0x00, 0x89, 0xc8, 0xf7, 0xea, 0xbb, 0xb6, 0x0a, 0x1e, 0x07, + 0x01, 0xc3, 0x26, 0xa1, 0x4a, 0x06, 0x01, 0xc8, 0x26, 0xf7, 0x26, 0x74, + 0x0d, 0x80, 0x7f, 0x08, 0x01, 0x75, 0x05, 0xba, 0x00, 0x02, 0xeb, 0x0f, + 0x26, 0x3b, 0x0e, 0x54, 0x06, 0x75, 0x05, 0xba, 0x00, 0x70, 0xeb, 0x03, + 0xba, 0x00, 0x07, 0x8b, 0x0f, 0x8b, 0x77, 0x02, 0x89, 0xcb, 0x89, 0xf1, + 0x0e, 0xe8, 0x64, 0xff, 0xeb, 0xbb, 0x45, 0x55, 0x89, 0xe5, 0x53, 0x51, + 0x52, 0x56, 0x57, 0x83, 0xec, 0x10, 0xe8, 0x5c, 0xf3, 0xc6, 0x46, 0xf4, + 0x00, 0x85, 0xc0, 0x74, 0x06, 0xb8, 0x01, 0x00, 0xe9, 0x3e, 0x04, 0x9c, + 0xfa, 0xb0, 0x34, 0xba, 0x43, 0x00, 0xee, 0x31, 0xdb, 0xba, 0x40, 0x00, + 0x88, 0xd8, 0xee, 0xba, 0x40, 0x00, 0x30, 0xc0, 0xee, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xc7, 0x06, 0xd4, 0x07, 0x01, 0x00, 0x89, 0x1e, 0xd2, 0x07, + 0x9d, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xb9, 0x12, 0x00, 0xa1, 0x50, 0x06, + 0xbb, 0xdc, 0x34, 0x99, 0x0e, 0xe8, 0x50, 0x0e, 0x90, 0x89, 0x46, 0xea, + 0x89, 0x56, 0xec, 0x89, 0x46, 0xe8, 0x89, 0x56, 0xf0, 0x9c, 0xfa, 0xba, + 0x43, 0x00, 0x30, 0xc0, 0xee, 0xba, 0x40, 0x00, 0xec, 0xba, 0x40, 0x00, + 0x88, 0xc3, 0xec, 0x88, 0xc7, 0x9d, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x89, + 0x5e, 0xe6, 0xf6, 0x06, 0xa9, 0x0d, 0x01, 0x75, 0x0b, 0xb0, 0x03, 0x32, + 0xe4, 0xcd, 0x10, 0x0e, 0x3e, 0xe8, 0x28, 0x64, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0xa1, 0xa1, 0x0d, 0x8b, 0x16, 0x9f, 0x0d, 0x85, 0xc0, 0x75, 0x07, + 0x85, 0xd2, 0x75, 0x03, 0xe9, 0x6e, 0xff, 0xb8, 0x4a, 0x00, 0xba, 0x75, + 0x07, 0x0e, 0xe8, 0x94, 0xfe, 0x8e, 0xda, 0xa3, 0x74, 0x0d, 0x85, 0xc0, + 0x75, 0x06, 0xc7, 0x06, 0x74, 0x0d, 0x50, 0x00, 0xb8, 0x84, 0x00, 0xba, + 0x75, 0x07, 0x0e, 0xe8, 0x8a, 0xfe, 0x8e, 0xda, 0x30, 0xe4, 0xa3, 0x72, + 0x0d, 0x85, 0xc0, 0x75, 0x06, 0xc7, 0x06, 0x72, 0x0d, 0x18, 0x00, 0xb8, + 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x16, 0x9f, 0x0d, 0xa1, 0xa1, 0x0d, 0xff, + 0x06, 0x72, 0x0d, 0x89, 0x16, 0x5e, 0x06, 0xa3, 0x60, 0x06, 0xb4, 0x01, + 0xb9, 0x00, 0x20, 0xcd, 0x10, 0x80, 0x3e, 0x41, 0x06, 0x00, 0x74, 0x3f, + 0xff, 0x36, 0x72, 0x0d, 0xff, 0x36, 0x74, 0x0d, 0x8c, 0xd8, 0x50, 0xb8, + 0x4c, 0x03, 0x50, 0x8c, 0xd8, 0x50, 0xb8, 0x8c, 0x06, 0x50, 0x0e, 0xe8, + 0x3c, 0x06, 0x90, 0xb8, 0x75, 0x07, 0x83, 0xc4, 0x0c, 0x8e, 0xd8, 0xff, + 0x36, 0x60, 0x06, 0xff, 0x36, 0x5e, 0x06, 0x50, 0xb8, 0x5f, 0x03, 0x50, + 0x8c, 0xd8, 0x50, 0xb8, 0x8c, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0x1a, 0x06, + 0x83, 0xc4, 0x0c, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x0e, 0x4a, 0x06, + 0x03, 0x0e, 0x52, 0x06, 0xa1, 0x72, 0x0d, 0x41, 0x41, 0x39, 0xc1, 0x76, + 0x02, 0x89, 0xc1, 0x31, 0xdb, 0x39, 0xcb, 0x73, 0x2d, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xa1, 0x74, 0x0d, 0xf7, 0xe3, 0x89, 0xc2, 0xd1, 0xe2, 0x31, + 0xc0, 0xbe, 0x75, 0x07, 0x8e, 0xde, 0x3b, 0x06, 0x74, 0x0d, 0x73, 0x0f, + 0x40, 0xc5, 0x36, 0x5e, 0x06, 0x01, 0xd6, 0x42, 0x42, 0xc7, 0x04, 0x20, + 0x07, 0xeb, 0xe6, 0x43, 0xeb, 0xcf, 0xc6, 0x46, 0xf2, 0x01, 0x83, 0x7e, + 0xec, 0xff, 0x75, 0x06, 0x83, 0x7e, 0xea, 0xff, 0x74, 0x36, 0x9c, 0xfa, + 0xba, 0x43, 0x00, 0x30, 0xc0, 0xee, 0xba, 0x40, 0x00, 0x8b, 0x4e, 0xe6, + 0xec, 0xba, 0x40, 0x00, 0x88, 0xc3, 0xec, 0x88, 0xc7, 0x9d, 0x31, 0xd2, + 0x89, 0xc8, 0x89, 0x5e, 0xe6, 0x29, 0xd8, 0x83, 0x7e, 0xec, 0x00, 0x77, + 0x07, 0x75, 0x10, 0x3b, 0x46, 0xea, 0x77, 0x0b, 0x29, 0x46, 0xea, 0x19, + 0x56, 0xec, 0xeb, 0x09, 0xe9, 0xbe, 0x01, 0x89, 0x56, 0xea, 0x89, 0x56, + 0xec, 0x8b, 0x46, 0xec, 0x3b, 0x46, 0xf0, 0x72, 0x0a, 0x75, 0x24, 0x8b, + 0x46, 0xea, 0x3b, 0x46, 0xe8, 0x73, 0x1c, 0x8b, 0x46, 0xf0, 0x3d, 0x12, + 0x00, 0x77, 0x09, 0x75, 0x15, 0x81, 0x7e, 0xe8, 0xdc, 0x34, 0x72, 0x0e, + 0x81, 0x46, 0xe8, 0x24, 0xcb, 0x83, 0x56, 0xf0, 0xed, 0xeb, 0x0b, 0xe9, + 0x8c, 0x00, 0x31, 0xc0, 0x89, 0x46, 0xe8, 0x89, 0x46, 0xf0, 0x8b, 0x46, + 0xe8, 0x8b, 0x56, 0xf0, 0xbb, 0xdc, 0x34, 0xb9, 0x12, 0x00, 0x0e, 0xe8, + 0xe9, 0x0c, 0x90, 0x89, 0xc7, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xbe, 0x00, + 0x03, 0x8b, 0x16, 0x5c, 0x06, 0xa1, 0x5a, 0x06, 0x85, 0xd2, 0x75, 0x1e, + 0x85, 0xc0, 0x75, 0x1a, 0xb8, 0x96, 0x02, 0xbb, 0x6c, 0x03, 0x50, 0x8c, + 0xd8, 0x8c, 0xd9, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x75, + 0x03, 0x0e, 0x3e, 0xe8, 0xab, 0x08, 0x8d, 0x45, 0x01, 0x50, 0xb8, 0x75, + 0x07, 0x50, 0xb8, 0x82, 0x03, 0x50, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xff, + 0x36, 0x5c, 0x06, 0xff, 0x36, 0x5a, 0x06, 0x0e, 0x3e, 0xe8, 0x1b, 0x0d, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x4a, 0x06, 0x03, 0x06, 0x52, 0x06, + 0x40, 0xf7, 0x26, 0x74, 0x0d, 0x83, 0xc4, 0x0a, 0x8b, 0x1e, 0x5a, 0x06, + 0x8b, 0x0e, 0x5c, 0x06, 0x89, 0xf2, 0x0e, 0xe8, 0xca, 0xfc, 0x83, 0x7e, + 0xec, 0x00, 0x75, 0x38, 0x83, 0x7e, 0xea, 0x00, 0x75, 0x32, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0xa1, 0x4a, 0x06, 0x03, 0x06, 0x52, 0x06, 0x40, 0xf7, + 0x26, 0x74, 0x0d, 0xbb, 0xa5, 0x03, 0x8c, 0xd9, 0xba, 0x00, 0x07, 0x0e, + 0xe8, 0xa1, 0xfc, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x54, 0x06, 0x85, + 0xc0, 0x7c, 0x0c, 0x3b, 0x06, 0x52, 0x06, 0x7d, 0x06, 0xe9, 0x55, 0x01, + 0xe9, 0xba, 0x00, 0xe9, 0x53, 0x01, 0xc6, 0x46, 0xf2, 0x00, 0x0e, 0xe8, + 0xce, 0x0c, 0x90, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0xa4, 0xfe, 0x0e, 0xe8, + 0xdd, 0x0c, 0x90, 0x89, 0xc2, 0x85, 0xc0, 0x75, 0x09, 0x0e, 0x3e, 0xe8, + 0xd1, 0x0c, 0x88, 0xc6, 0x30, 0xd2, 0x83, 0xfa, 0x1b, 0x74, 0xd4, 0x81, + 0xfa, 0x00, 0x48, 0x74, 0x03, 0xe9, 0xc4, 0x00, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0x8b, 0x0e, 0x52, 0x06, 0x8b, 0x36, 0x54, 0x06, 0x49, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0xff, 0x0e, 0x54, 0x06, 0x83, 0x3e, 0x54, 0x06, 0x00, + 0x7d, 0x04, 0x89, 0x0e, 0x54, 0x06, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xba, + 0x0a, 0x00, 0xa1, 0x54, 0x06, 0xf7, 0xea, 0x89, 0xc3, 0x80, 0xbf, 0xbe, + 0x0a, 0x01, 0x74, 0xd6, 0x3b, 0x36, 0x54, 0x06, 0x74, 0x12, 0x89, 0xf0, + 0x0e, 0xe8, 0x58, 0xfc, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x54, 0x06, + 0x0e, 0xe8, 0x4c, 0xfc, 0x83, 0x7e, 0xec, 0xff, 0x75, 0x09, 0x83, 0x7e, + 0xea, 0xff, 0x75, 0x03, 0xe9, 0x23, 0xfe, 0xb8, 0xff, 0xff, 0x89, 0x46, + 0xea, 0x89, 0x46, 0xec, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x4a, 0x06, + 0x03, 0x06, 0x52, 0x06, 0x40, 0xf7, 0x26, 0x74, 0x0d, 0xbb, 0xa5, 0x03, + 0x8c, 0xd9, 0xba, 0x00, 0x07, 0x0e, 0xe8, 0xcf, 0xfb, 0x80, 0x7e, 0xf2, + 0x00, 0x75, 0x03, 0xe9, 0x44, 0xff, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x83, + 0x3e, 0x4a, 0x06, 0x00, 0x76, 0x11, 0xba, 0x00, 0x07, 0x8b, 0x1e, 0x42, + 0x06, 0x8b, 0x0e, 0x44, 0x06, 0x31, 0xc0, 0x0e, 0xe8, 0xa9, 0xfb, 0x31, + 0xd2, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x3b, 0x16, 0x52, 0x06, 0x72, 0x03, + 0xe9, 0x13, 0xff, 0x89, 0xd0, 0x0e, 0xe8, 0xdb, 0xfb, 0x42, 0xeb, 0xe9, + 0x81, 0xfa, 0x00, 0x50, 0x75, 0x39, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, + 0x36, 0x54, 0x06, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xff, 0x06, 0x54, 0x06, + 0xa1, 0x54, 0x06, 0x3b, 0x06, 0x52, 0x06, 0x7c, 0x05, 0x31, 0xc0, 0xa3, + 0x54, 0x06, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xba, 0x0a, 0x00, 0xa1, 0x54, + 0x06, 0xf7, 0xea, 0x89, 0xc3, 0x80, 0xbf, 0xbe, 0x0a, 0x01, 0x74, 0xd3, + 0xe9, 0x35, 0xff, 0x83, 0xfa, 0x0d, 0x74, 0x03, 0xe9, 0x77, 0xfd, 0xb8, + 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x54, 0x06, 0x85, 0xc0, 0x7c, 0xf1, 0x3b, + 0x06, 0x52, 0x06, 0x7d, 0xeb, 0xc6, 0x46, 0xf4, 0x01, 0xb4, 0x01, 0xb9, + 0x07, 0x06, 0xcd, 0x10, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x72, 0x0d, + 0xb1, 0x08, 0x48, 0xd3, 0xe0, 0x89, 0x46, 0xee, 0xb4, 0x02, 0x32, 0xff, + 0x8b, 0x96, 0xee, 0xff, 0xcd, 0x10, 0x80, 0x7e, 0xf4, 0x00, 0x75, 0x03, + 0xe9, 0xbe, 0xfb, 0x31, 0xc0, 0x8d, 0x66, 0xf6, 0x5f, 0x5e, 0x5a, 0x59, + 0x5b, 0x5d, 0x4d, 0xcb, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, + 0x83, 0xec, 0x08, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x54, 0x06, 0x3b, + 0x06, 0x52, 0x06, 0x7c, 0x03, 0xe9, 0xbf, 0xfa, 0xbe, 0x0a, 0x00, 0xf7, + 0xee, 0xbe, 0xb6, 0x0a, 0x01, 0xc6, 0x8b, 0x44, 0x06, 0x8b, 0x7c, 0x04, + 0x85, 0xc0, 0x75, 0x1e, 0x85, 0xff, 0x75, 0x1a, 0xb8, 0x3b, 0x03, 0xbb, + 0xce, 0x03, 0x50, 0x8c, 0xd8, 0x8c, 0xd9, 0x50, 0xb8, 0x25, 0x01, 0x89, + 0xca, 0x50, 0xb8, 0x5d, 0x01, 0x0e, 0x3e, 0xe8, 0x4f, 0x06, 0xc7, 0x46, + 0xfe, 0x00, 0x00, 0x31, 0xf6, 0xb8, 0x75, 0x07, 0x8b, 0x7e, 0xfe, 0x8e, + 0xd8, 0x3b, 0x3e, 0x56, 0x06, 0x73, 0x3f, 0x8b, 0x84, 0x7e, 0x0b, 0x8b, + 0xbc, 0x80, 0x0b, 0x89, 0x46, 0xf8, 0x85, 0xff, 0x75, 0x1e, 0x85, 0xc0, + 0x75, 0x1a, 0xb8, 0x40, 0x03, 0xbb, 0xce, 0x03, 0x50, 0x8c, 0xd8, 0x8c, + 0xd9, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x87, 0x02, 0x0e, + 0x3e, 0xe8, 0x0d, 0x06, 0x8b, 0x46, 0xf8, 0x89, 0xfa, 0xff, 0x46, 0xfe, + 0x0e, 0xe8, 0xe5, 0x0a, 0x90, 0x83, 0xc6, 0x04, 0xeb, 0xb3, 0x31, 0xff, + 0x31, 0xf6, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x3b, 0x3e, 0x58, 0x06, 0x72, + 0x03, 0xe9, 0x27, 0xfa, 0x8a, 0x85, 0x0e, 0x0d, 0x30, 0xe4, 0x3b, 0x06, + 0x54, 0x06, 0x75, 0x3d, 0x8b, 0x84, 0x26, 0x09, 0x89, 0x46, 0xfa, 0x8b, + 0x84, 0x28, 0x09, 0x89, 0x46, 0xfc, 0x85, 0xc0, 0x75, 0x20, 0x83, 0x7e, + 0xfa, 0x00, 0x75, 0x1a, 0xb8, 0x48, 0x03, 0xbb, 0xce, 0x03, 0x50, 0x8c, + 0xd8, 0x8c, 0xd9, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x87, + 0x02, 0x0e, 0x3e, 0xe8, 0xab, 0x05, 0x8b, 0x46, 0xfa, 0x8b, 0x56, 0xfc, + 0x0e, 0xe8, 0x85, 0x0a, 0x90, 0x83, 0xc6, 0x04, 0x47, 0xeb, 0xa3, 0x55, + 0x89, 0xe5, 0xe8, 0xbd, 0xee, 0x85, 0xc0, 0x74, 0x05, 0xb8, 0x01, 0x00, + 0xeb, 0x38, 0x0e, 0xe8, 0x38, 0x61, 0x90, 0x85, 0xc0, 0x74, 0xf2, 0x0e, + 0x3e, 0xe8, 0xef, 0x63, 0x85, 0xc0, 0x74, 0xe9, 0x0e, 0xe8, 0x16, 0xf1, + 0x85, 0xc0, 0x75, 0x18, 0x0e, 0xe8, 0x6a, 0xfa, 0x85, 0xc0, 0x75, 0x10, + 0x0e, 0xe8, 0xc8, 0xfe, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x80, 0x3e, 0x40, + 0x06, 0x00, 0x75, 0xe8, 0x0e, 0xe8, 0x50, 0xf0, 0x31, 0xc0, 0x5d, 0xca, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x02, 0x89, 0xc3, 0x89, 0xd1, 0x0e, 0xe8, 0x3e, 0x0d, 0x90, 0x40, + 0x89, 0xc6, 0x0e, 0xe8, 0x23, 0x00, 0x90, 0x89, 0xc7, 0x89, 0x56, 0xfe, + 0x85, 0xd2, 0x75, 0x11, 0x85, 0xc0, 0x75, 0x0d, 0x8b, 0x56, 0xfe, 0x89, + 0xf8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xcb, 0x56, 0x0e, 0xe8, + 0x2b, 0x0d, 0x90, 0xeb, 0xeb, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, + 0x83, 0xec, 0x04, 0x89, 0xc6, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x70, 0x00, + 0x3d, 0xe6, 0xff, 0x77, 0xf8, 0x05, 0x03, 0x00, 0x24, 0xfe, 0x89, 0x46, + 0xfc, 0x3d, 0x06, 0x00, 0x72, 0x6c, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xb8, + 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x46, 0xfc, 0x3b, 0x06, 0x66, 0x06, 0x76, + 0x60, 0x8b, 0x0e, 0x64, 0x06, 0x31, 0xff, 0x85, 0xc9, 0x74, 0x63, 0xb8, + 0x75, 0x07, 0x89, 0xfb, 0x89, 0xca, 0x8e, 0xd8, 0x89, 0xf0, 0x89, 0x0e, + 0x64, 0x06, 0x0e, 0xe8, 0xfe, 0x0c, 0x90, 0x89, 0xc3, 0x85, 0xc0, 0x75, + 0x47, 0x89, 0xf2, 0x89, 0xc8, 0x0e, 0x3e, 0xe8, 0x2b, 0x0f, 0x85, 0xc0, + 0x75, 0xd9, 0xb8, 0x75, 0x07, 0x8e, 0xc0, 0x8e, 0xd9, 0x26, 0xa1, 0x66, + 0x06, 0x3b, 0x45, 0x0a, 0x72, 0x61, 0x8e, 0xd9, 0x89, 0x4e, 0xfe, 0x8b, + 0x4d, 0x04, 0xeb, 0xbb, 0x31, 0xc0, 0x31, 0xc9, 0x89, 0xca, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xcb, 0xc7, 0x46, 0xfc, 0x06, 0x00, 0xeb, + 0x8d, 0x31, 0xc0, 0x8b, 0x0e, 0x62, 0x06, 0xa3, 0x66, 0x06, 0xeb, 0x99, + 0xeb, 0x31, 0x89, 0xf0, 0x0e, 0xe8, 0xb4, 0x0f, 0x90, 0x89, 0xc2, 0x89, + 0xc1, 0x85, 0xc0, 0x75, 0x28, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, 0x43, 0x10, + 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x68, 0xff, 0x85, 0xd2, 0x75, 0x10, 0x89, + 0xf0, 0x0e, 0x3e, 0xe8, 0x34, 0x10, 0x89, 0xc3, 0x85, 0xc0, 0x74, 0x03, + 0xb9, 0x75, 0x07, 0x89, 0xd8, 0xeb, 0xad, 0xeb, 0x22, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0x3b, 0x3e, 0x62, 0x06, 0x75, 0x07, 0x89, 0x16, 0x62, 0x06, + 0xe9, 0x54, 0xff, 0x8e, 0xda, 0x8b, 0x46, 0xfe, 0x89, 0x45, 0x02, 0x8e, + 0xd8, 0x89, 0x55, 0x04, 0xe9, 0x44, 0xff, 0x8c, 0xc2, 0x8b, 0x45, 0x0a, + 0x8e, 0xda, 0xa3, 0x66, 0x06, 0xe9, 0x6e, 0xff, 0x0e, 0xe8, 0xca, 0x10, + 0x90, 0xc3, 0x53, 0x51, 0x89, 0xd1, 0x85, 0xd2, 0x74, 0x25, 0x81, 0xfa, + 0x75, 0x07, 0x74, 0x22, 0x31, 0xdb, 0x0e, 0xe8, 0xf4, 0x0c, 0x90, 0xb8, + 0x75, 0x07, 0x8e, 0xd8, 0x3b, 0x0e, 0x64, 0x06, 0x74, 0x0d, 0x8e, 0xc1, + 0x31, 0xdb, 0xa1, 0x66, 0x06, 0x26, 0x3b, 0x47, 0x0a, 0x72, 0x0b, 0x59, + 0x5b, 0xcb, 0x0e, 0xe8, 0x0b, 0x11, 0x90, 0x59, 0x5b, 0xcb, 0x8e, 0xd9, + 0x8b, 0x47, 0x0a, 0xbb, 0x75, 0x07, 0x8e, 0xdb, 0xa3, 0x66, 0x06, 0x59, + 0x5b, 0xcb, 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0x8d, 0x56, 0x14, 0x8b, + 0x5e, 0x10, 0x8b, 0x4e, 0x12, 0x16, 0x8b, 0x46, 0x0c, 0x52, 0x8b, 0x56, + 0x0e, 0xe8, 0x5c, 0x13, 0x5d, 0x5a, 0x59, 0x5b, 0xcb, 0x56, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc6, 0x8e, 0xda, 0x89, 0x4e, 0xfa, 0x31, + 0xd2, 0x85, 0xc9, 0x75, 0x04, 0x85, 0xdb, 0x74, 0x14, 0xb8, 0x75, 0x07, + 0x8e, 0xc0, 0x26, 0xa1, 0x16, 0x08, 0x26, 0x3d, 0x01, 0x00, 0x75, 0x36, + 0x8e, 0xc1, 0x26, 0x89, 0x07, 0x8a, 0x04, 0x3c, 0x77, 0x75, 0x32, 0x80, + 0xca, 0x02, 0xb4, 0x01, 0x30, 0xc9, 0x46, 0x88, 0x4e, 0xfc, 0x88, 0x4e, + 0xfe, 0x30, 0xed, 0x8a, 0x04, 0x38, 0xc5, 0x74, 0x55, 0x84, 0xe4, 0x74, + 0x51, 0x3c, 0x63, 0x73, 0x3a, 0x3c, 0x62, 0x75, 0x58, 0x84, 0xc9, 0x74, + 0x52, 0x88, 0xec, 0x46, 0xeb, 0xe5, 0x8e, 0xc1, 0x26, 0x89, 0x17, 0xeb, + 0xc8, 0x3c, 0x72, 0x75, 0x05, 0x80, 0xca, 0x01, 0xeb, 0xc8, 0x3c, 0x61, + 0x75, 0x05, 0x80, 0xca, 0x82, 0xeb, 0xbf, 0x0e, 0x3e, 0xe8, 0x9f, 0x13, + 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x09, 0x00, 0x31, 0xc0, 0x89, 0xec, + 0x5d, 0x5e, 0xc3, 0x77, 0x07, 0x3a, 0x6e, 0xfe, 0x74, 0x38, 0xeb, 0xc5, + 0x3c, 0x74, 0x75, 0x08, 0x84, 0xc9, 0x74, 0x23, 0xeb, 0xbb, 0xeb, 0x45, + 0x3c, 0x6e, 0x75, 0xb7, 0x3a, 0x6e, 0xfe, 0x74, 0x2e, 0xeb, 0xae, 0xeb, + 0x16, 0x3c, 0x2b, 0x75, 0xaa, 0x3a, 0x6e, 0xfc, 0x75, 0xa3, 0xc6, 0x46, + 0xfc, 0x01, 0x80, 0xca, 0x03, 0xeb, 0x9c, 0xb1, 0x01, 0xeb, 0x98, 0xb1, + 0x01, 0x80, 0xca, 0x40, 0xeb, 0x91, 0x8e, 0x46, 0xfa, 0xc6, 0x46, 0xfe, + 0x01, 0x26, 0x80, 0x0f, 0x01, 0xeb, 0x84, 0x8e, 0x46, 0xfa, 0xc6, 0x46, + 0xfe, 0x01, 0x26, 0x80, 0x27, 0xfe, 0xe9, 0x76, 0xff, 0x84, 0xc9, 0x75, + 0x10, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x81, 0x3e, 0x18, 0x08, 0x00, 0x02, + 0x75, 0x03, 0x80, 0xca, 0x40, 0x89, 0xd0, 0xeb, 0x89, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x02, 0x8b, 0x76, 0x0c, 0x89, 0xc7, 0x89, 0x56, + 0xfe, 0x88, 0xd8, 0x30, 0xe4, 0x0e, 0x3e, 0xe8, 0x0c, 0x13, 0x3c, 0x72, + 0x74, 0x03, 0xe9, 0xa2, 0x00, 0x31, 0xc0, 0xf6, 0xc1, 0x02, 0x74, 0x03, + 0xb8, 0x02, 0x00, 0xf6, 0xc1, 0x40, 0x75, 0x03, 0xe9, 0x7e, 0x00, 0x80, + 0xcc, 0x02, 0x31, 0xd2, 0x52, 0xff, 0x76, 0x0a, 0x50, 0xff, 0x76, 0xfe, + 0x57, 0x0e, 0x3e, 0xe8, 0x0a, 0x15, 0x8e, 0x5e, 0x0e, 0x83, 0xc4, 0x0a, + 0x89, 0x44, 0x0c, 0x3d, 0xff, 0xff, 0x74, 0x62, 0xc7, 0x44, 0x04, 0x00, + 0x00, 0xc7, 0x44, 0x0e, 0x00, 0x00, 0x09, 0x4c, 0x0a, 0xc5, 0x5c, 0x06, + 0xc7, 0x47, 0x0c, 0x00, 0x00, 0x8e, 0x5e, 0x0e, 0xc5, 0x5c, 0x06, 0x8b, + 0x46, 0x08, 0x89, 0x47, 0x0e, 0x8e, 0x5e, 0x0e, 0xc5, 0x5c, 0x06, 0xc7, + 0x47, 0x08, 0x00, 0x00, 0xc7, 0x47, 0x0a, 0x00, 0x00, 0xf6, 0xc1, 0x80, + 0x74, 0x12, 0xb8, 0x02, 0x00, 0x8b, 0x56, 0x0e, 0x31, 0xdb, 0x31, 0xc9, + 0x50, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, 0x3e, 0x15, 0x8b, 0x56, 0x0e, 0x89, + 0xf0, 0xe8, 0x9c, 0x16, 0x8b, 0x56, 0x0e, 0x89, 0xf0, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0xc2, 0x08, 0x00, 0x80, 0xcc, 0x01, 0xeb, 0x80, 0x89, 0xf0, + 0x8c, 0xda, 0xe8, 0xae, 0x16, 0x31, 0xc0, 0x31, 0xd2, 0xeb, 0xe6, 0xf6, + 0xc1, 0x01, 0x74, 0x18, 0xb8, 0x22, 0x00, 0xf6, 0xc1, 0x80, 0x74, 0x15, + 0x0c, 0x10, 0xf6, 0xc1, 0x40, 0x74, 0x12, 0x80, 0xcc, 0x02, 0xba, 0x80, + 0x01, 0xe9, 0x58, 0xff, 0xb8, 0x21, 0x00, 0xeb, 0xe6, 0x0c, 0x40, 0xeb, + 0xe9, 0x80, 0xcc, 0x01, 0xeb, 0xec, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x06, 0x50, 0x89, 0xd7, 0x89, 0xde, 0x89, 0x4e, 0xfe, 0x8d, 0x5e, + 0xfa, 0x8b, 0x56, 0xfe, 0x8c, 0xd1, 0x89, 0xf0, 0xe8, 0xfa, 0xfd, 0x89, + 0xc1, 0x85, 0xc0, 0x75, 0x0a, 0x31, 0xd2, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0xca, 0x02, 0x00, 0xe8, 0xfe, 0x16, 0x89, 0xc3, 0x89, 0x56, 0xfc, 0x85, + 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x1d, 0x52, 0x8e, 0x5e, 0xfe, 0x50, + 0x89, 0xfa, 0x8a, 0x04, 0xff, 0x76, 0x0a, 0x98, 0xff, 0x76, 0xfa, 0x89, + 0xc3, 0x8b, 0x46, 0xf8, 0xe8, 0xbe, 0xfe, 0x89, 0xc3, 0x89, 0x56, 0xfc, + 0x8b, 0x56, 0xfc, 0x89, 0xd8, 0xeb, 0xc4, 0x56, 0x31, 0xf6, 0x56, 0x0e, + 0xe8, 0x97, 0xff, 0x5e, 0xcb, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, + 0x83, 0xec, 0x02, 0x89, 0xc1, 0x89, 0xd7, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0x8b, 0x1e, 0x76, 0x0d, 0x8b, 0x16, 0x78, 0x0d, 0x85, 0xd2, 0x75, 0x35, + 0x85, 0xdb, 0x75, 0x31, 0xb8, 0x75, 0x07, 0xbe, 0x7a, 0x0d, 0x8e, 0xd8, + 0x8b, 0x44, 0x02, 0x8b, 0x1c, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x75, 0x04, + 0x85, 0xdb, 0x74, 0x48, 0x8e, 0xc0, 0x26, 0x8b, 0x47, 0x06, 0x26, 0x8b, + 0x57, 0x04, 0x39, 0xf8, 0x75, 0x04, 0x39, 0xca, 0x74, 0x38, 0x8e, 0x5e, + 0xfe, 0x89, 0xde, 0xeb, 0xd7, 0x8e, 0xda, 0x8b, 0x47, 0x06, 0x8b, 0x77, + 0x04, 0x39, 0xf8, 0x75, 0x04, 0x39, 0xce, 0x74, 0x09, 0x8b, 0x37, 0x8b, + 0x57, 0x02, 0x89, 0xf3, 0xeb, 0xae, 0xbb, 0x01, 0x00, 0x89, 0xc8, 0x89, + 0xfa, 0xe8, 0x45, 0x03, 0x89, 0xc8, 0x89, 0xfa, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0x59, 0x5b, 0xc3, 0xeb, 0x34, 0x26, 0x8b, 0x47, 0x02, 0x26, 0x8b, + 0x17, 0x89, 0x44, 0x02, 0xb8, 0x75, 0x07, 0x89, 0x14, 0x8e, 0xd8, 0x8b, + 0x16, 0x76, 0x0d, 0xa1, 0x78, 0x0d, 0x8e, 0x5e, 0xfe, 0x89, 0x17, 0x89, + 0x47, 0x02, 0xb8, 0x75, 0x07, 0x89, 0xfa, 0x8e, 0xd8, 0x8c, 0xc0, 0x89, + 0x1e, 0x76, 0x0d, 0xa3, 0x78, 0x0d, 0x89, 0xc8, 0xeb, 0xc2, 0x0e, 0xe8, + 0x09, 0x11, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x04, 0x00, 0x31, + 0xc0, 0x31, 0xd2, 0xeb, 0xaf, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x06, 0x89, 0xc7, 0x89, 0x56, 0xfc, 0x89, 0xde, 0x89, 0x4e, 0xfe, 0x8d, + 0x5e, 0xfa, 0x8b, 0x56, 0xfe, 0x8c, 0xd1, 0x89, 0xf0, 0xe8, 0xc1, 0xfc, + 0x89, 0xc1, 0x85, 0xc0, 0x75, 0x0a, 0x31, 0xd2, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0xca, 0x04, 0x00, 0x8b, 0x46, 0x0a, 0x8b, 0x56, 0x0c, 0xe8, 0xfc, + 0xfe, 0x89, 0x46, 0x0a, 0x89, 0x56, 0x0c, 0x85, 0xd2, 0x75, 0x04, 0x85, + 0xc0, 0x74, 0x1e, 0x52, 0x50, 0x31, 0xc0, 0x8e, 0x5e, 0xfe, 0x50, 0x8a, + 0x04, 0x8b, 0x56, 0xfc, 0x98, 0xff, 0x76, 0xfa, 0x89, 0xc3, 0x89, 0xf8, + 0xe8, 0x7e, 0xfd, 0x89, 0x46, 0x0a, 0x89, 0x56, 0x0c, 0x8b, 0x46, 0x0a, + 0x8b, 0x56, 0x0c, 0xeb, 0xbb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x81, 0xec, + 0x06, 0x01, 0xbe, 0x75, 0x07, 0x8e, 0xde, 0xc7, 0x46, 0xfe, 0x01, 0x00, + 0x83, 0x3e, 0xd0, 0x07, 0x00, 0x74, 0x0b, 0xc7, 0x46, 0xfe, 0x02, 0x00, + 0xc7, 0x06, 0xd0, 0x07, 0x00, 0x00, 0xff, 0x76, 0x0e, 0xff, 0x76, 0x0c, + 0xff, 0x76, 0x0a, 0x51, 0x53, 0x52, 0x50, 0xb8, 0x75, 0x07, 0x50, 0xb8, + 0xdc, 0x03, 0x50, 0xb8, 0x00, 0x01, 0x50, 0x16, 0x8d, 0x96, 0xfa, 0xfe, + 0x52, 0x0e, 0x3e, 0xe8, 0xf0, 0x16, 0xb8, 0x75, 0x07, 0x83, 0xc4, 0x18, + 0x8e, 0xd8, 0x80, 0x3e, 0x1a, 0x08, 0x00, 0x75, 0x03, 0xe9, 0xe0, 0x00, + 0x8d, 0x86, 0xfa, 0xfe, 0x8c, 0xd2, 0x0e, 0xe8, 0xaa, 0x07, 0x90, 0x05, + 0x13, 0x00, 0x24, 0xfe, 0x89, 0xc2, 0x0e, 0xe8, 0x0d, 0x17, 0x90, 0x39, + 0xc2, 0x72, 0x03, 0xe9, 0xa1, 0x00, 0x8d, 0x86, 0xfa, 0xfe, 0x8c, 0xd2, + 0x0e, 0xe8, 0x8c, 0x07, 0x90, 0x05, 0x13, 0x00, 0x24, 0xfe, 0xbe, 0x75, + 0x07, 0x2b, 0xe0, 0x89, 0xe7, 0xbb, 0x03, 0x04, 0xb9, 0x75, 0x07, 0x89, + 0xf8, 0x89, 0xf2, 0x0e, 0x3e, 0xe8, 0xf3, 0x16, 0xbb, 0x14, 0x04, 0xb9, + 0x75, 0x07, 0x89, 0xf8, 0x89, 0xf2, 0x89, 0x7e, 0xfa, 0x0e, 0x3e, 0xe8, + 0x29, 0x17, 0x8d, 0x9e, 0xfa, 0xfe, 0x8c, 0xd1, 0x89, 0xf8, 0x89, 0xf2, + 0x89, 0x76, 0xfc, 0x0e, 0x3e, 0xe8, 0x17, 0x17, 0x0e, 0xe8, 0xb7, 0x16, + 0x90, 0x3d, 0x12, 0x00, 0x76, 0x54, 0xb8, 0x12, 0x00, 0xbe, 0x75, 0x07, + 0x2b, 0xe0, 0x89, 0xe7, 0xff, 0x76, 0xfe, 0xb8, 0x75, 0x07, 0x50, 0xb8, + 0x17, 0x04, 0x50, 0x56, 0x57, 0x0e, 0x3e, 0xe8, 0xa5, 0x03, 0xb8, 0x75, + 0x07, 0x83, 0xc4, 0x0a, 0x8e, 0xd8, 0x80, 0x3e, 0x1a, 0x08, 0x00, 0x74, + 0x0e, 0x56, 0x57, 0xcc, 0xeb, 0x06, 0x57, 0x56, 0x49, 0x44, 0x45, 0x4f, + 0x83, 0xc4, 0x04, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x80, 0x3e, 0x1a, 0x08, + 0x00, 0x75, 0x15, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x06, 0x00, 0x31, + 0xff, 0x31, 0xf6, 0xe9, 0x6f, 0xff, 0x31, 0xff, 0x31, 0xf6, 0xeb, 0xb0, + 0xff, 0x76, 0xfc, 0xff, 0x76, 0xfa, 0xcc, 0xeb, 0x06, 0x57, 0x56, 0x49, + 0x44, 0x45, 0x4f, 0x83, 0xc4, 0x04, 0xeb, 0xd7, 0x8d, 0x9e, 0xfa, 0xfe, + 0xb8, 0x03, 0x04, 0x8c, 0xd1, 0x8c, 0xda, 0x0e, 0x3e, 0xe8, 0xba, 0x16, + 0xe9, 0xea, 0x16, 0x89, 0xc0, 0x52, 0x56, 0x55, 0x89, 0xe5, 0x89, 0xc6, + 0x89, 0xca, 0x8b, 0x4e, 0x0c, 0x89, 0xd8, 0x8b, 0x5e, 0x0a, 0x85, 0xf6, + 0x74, 0x06, 0x5d, 0x5e, 0x5a, 0xca, 0x0a, 0x00, 0xff, 0x76, 0x12, 0xbe, + 0x75, 0x07, 0xff, 0x76, 0x10, 0x8e, 0xde, 0xff, 0x76, 0x0e, 0xc7, 0x06, + 0xd0, 0x07, 0x01, 0x00, 0x0e, 0xe8, 0x7d, 0xfe, 0xeb, 0xe0, 0x53, 0x51, + 0x56, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc3, 0x8e, 0xda, 0xb8, + 0x75, 0x07, 0x8a, 0x17, 0x30, 0xf6, 0x8e, 0xc0, 0x89, 0xd6, 0x26, 0xf6, + 0x84, 0x19, 0x05, 0x02, 0x74, 0x03, 0x43, 0xeb, 0xed, 0x88, 0xd0, 0x30, + 0xc9, 0x80, 0xfa, 0x2d, 0x75, 0x30, 0xb1, 0x01, 0x43, 0x31, 0xc0, 0x8a, + 0x17, 0xc6, 0x46, 0xff, 0x00, 0x88, 0x56, 0xfe, 0xba, 0x75, 0x07, 0x8b, + 0x76, 0xfe, 0x8e, 0xc2, 0x26, 0xf6, 0x84, 0x19, 0x05, 0x20, 0x74, 0x19, 0xba, 0x0a, 0x00, 0xf7, 0xea, 0x89, 0xc2, 0x8a, 0x07, 0x98, 0x01, 0xd0, - 0x43, 0x2d, 0x30, 0x00, 0xeb, 0xe1, 0x3c, 0x2b, 0x74, 0xda, 0xeb, 0xd9, - 0x84, 0xc9, 0x74, 0x02, 0xf7, 0xd8, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x51, - 0x56, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x50, 0x89, 0xde, 0x8b, 0x47, - 0x06, 0x30, 0xe4, 0x80, 0x67, 0x06, 0xcf, 0x24, 0x30, 0x8b, 0x5e, 0xfc, - 0x89, 0x46, 0xfe, 0x4a, 0x85, 0xd2, 0x7f, 0x24, 0x83, 0xf9, 0xff, 0x75, - 0x34, 0x3b, 0x5e, 0xfc, 0x74, 0x06, 0xf6, 0x44, 0x06, 0x20, 0x74, 0x29, - 0xc7, 0x46, 0xfc, 0x00, 0x00, 0x8b, 0x46, 0xfe, 0x09, 0x44, 0x06, 0x8b, - 0x46, 0xfc, 0x89, 0xec, 0x5d, 0x5e, 0x59, 0xc3, 0x89, 0xf0, 0xe8, 0xa4, - 0x15, 0x89, 0xc1, 0x3d, 0xff, 0xff, 0x74, 0xd0, 0x88, 0x07, 0x43, 0x3c, - 0x0a, 0x74, 0xc9, 0xeb, 0xc2, 0xc6, 0x07, 0x00, 0xeb, 0xd7, 0x53, 0x51, - 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, 0x56, - 0xfe, 0xf6, 0x44, 0x06, 0x03, 0x74, 0x68, 0x31, 0xff, 0xf6, 0x44, 0x07, - 0x10, 0x75, 0x65, 0x8b, 0x44, 0x02, 0x85, 0xc0, 0x74, 0x16, 0xf7, 0xd8, - 0x8b, 0x5c, 0x08, 0x99, 0x89, 0x5e, 0xfc, 0x89, 0xd1, 0x89, 0xc3, 0xba, - 0x01, 0x00, 0x8b, 0x46, 0xfc, 0xe8, 0xd7, 0x15, 0x83, 0x7e, 0xfe, 0x00, - 0x74, 0x08, 0x8b, 0x44, 0x08, 0xe8, 0x03, 0x16, 0x09, 0xc7, 0xf6, 0x44, - 0x06, 0x08, 0x74, 0x11, 0x8b, 0x5c, 0x04, 0x8b, 0x47, 0x04, 0xe8, 0x17, - 0xfa, 0x8b, 0x5c, 0x04, 0xc7, 0x47, 0x04, 0x00, 0x00, 0xf6, 0x44, 0x07, - 0x08, 0x74, 0x06, 0x89, 0xf0, 0xff, 0x16, 0xc0, 0x0a, 0xc6, 0x44, 0x06, - 0x00, 0x80, 0x64, 0x07, 0x40, 0x89, 0xf8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0x59, 0x5b, 0xc3, 0xbf, 0xff, 0xff, 0xeb, 0xf1, 0xe8, 0xf6, 0x15, 0x85, - 0xc0, 0x74, 0x94, 0xbf, 0xff, 0xff, 0xeb, 0x8f, 0x53, 0x89, 0xc3, 0xe8, - 0x6c, 0xff, 0x89, 0xc2, 0x89, 0xd8, 0xe8, 0x8f, 0x12, 0x89, 0xd0, 0x5b, - 0xc3, 0x53, 0x52, 0x8b, 0x1e, 0xbc, 0x0a, 0x85, 0xdb, 0x74, 0x12, 0x3b, - 0x47, 0x02, 0x74, 0x04, 0x8b, 0x1f, 0xeb, 0xf3, 0xba, 0x01, 0x00, 0xe8, - 0xd6, 0xff, 0x5a, 0x5b, 0xc3, 0xb8, 0xff, 0xff, 0x5a, 0x5b, 0xc3, 0x00, + 0x43, 0x2d, 0x30, 0x00, 0xeb, 0xd5, 0x80, 0xfa, 0x2b, 0x74, 0xcd, 0xeb, + 0xcc, 0x84, 0xc9, 0x74, 0x02, 0xf7, 0xd8, 0x89, 0xec, 0x5d, 0x5e, 0x59, + 0x5b, 0xcb, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x8b, + 0x76, 0x0c, 0x89, 0xc7, 0x89, 0x56, 0xfa, 0x89, 0xd9, 0x8e, 0x5e, 0x0e, + 0x8b, 0x44, 0x0a, 0x89, 0xfb, 0x30, 0xe4, 0x89, 0x56, 0xfc, 0x24, 0x30, + 0x80, 0x64, 0x0a, 0xcf, 0x89, 0x46, 0xf8, 0x49, 0x85, 0xc9, 0x7f, 0x37, + 0x83, 0x7e, 0xfe, 0xff, 0x75, 0x53, 0x8b, 0x46, 0xfc, 0x3b, 0x46, 0xfa, + 0x75, 0x04, 0x39, 0xfb, 0x74, 0x09, 0x8e, 0x5e, 0x0e, 0xf6, 0x44, 0x0a, + 0x20, 0x74, 0x3e, 0x31, 0xff, 0x89, 0x7e, 0xfa, 0x8b, 0x46, 0xf8, 0x8e, + 0x5e, 0x0e, 0x8b, 0x56, 0xfa, 0x09, 0x44, 0x0a, 0x89, 0xf8, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x59, 0xca, 0x04, 0x00, 0x8b, 0x56, 0x0e, 0x89, 0xf0, + 0x0e, 0xe8, 0xe5, 0x16, 0x90, 0x89, 0x46, 0xfe, 0x3d, 0xff, 0xff, 0x74, + 0xb7, 0x8e, 0x5e, 0xfc, 0x8a, 0x56, 0xfe, 0x88, 0x17, 0x43, 0x3d, 0x0a, + 0x00, 0x74, 0xa9, 0xeb, 0xa2, 0x8e, 0x5e, 0xfc, 0xc6, 0x07, 0x00, 0xeb, + 0xbf, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc6, + 0x89, 0x56, 0xfe, 0x89, 0x5e, 0xfc, 0x8e, 0xda, 0xf6, 0x44, 0x0a, 0x03, + 0x75, 0x03, 0xe9, 0x8d, 0x00, 0x31, 0xff, 0xf6, 0x44, 0x0b, 0x10, 0x74, + 0x03, 0xe9, 0x87, 0x00, 0x8e, 0x5e, 0xfe, 0x8b, 0x44, 0x04, 0x85, 0xc0, + 0x74, 0x16, 0xf7, 0xd8, 0x99, 0x89, 0xd1, 0x8b, 0x54, 0x0c, 0x89, 0xc3, + 0x89, 0x56, 0xfa, 0xba, 0x01, 0x00, 0x8b, 0x46, 0xfa, 0xe8, 0x24, 0x17, + 0x83, 0x7e, 0xfc, 0x00, 0x74, 0x0b, 0x8e, 0x5e, 0xfe, 0x8b, 0x44, 0x0c, + 0xe8, 0x53, 0x17, 0x09, 0xc7, 0x8e, 0x5e, 0xfe, 0xf6, 0x44, 0x0a, 0x08, + 0x74, 0x1e, 0xc5, 0x5c, 0x06, 0x8b, 0x47, 0x08, 0x8b, 0x57, 0x0a, 0x0e, + 0x3e, 0xe8, 0x1a, 0xf9, 0x8e, 0x5e, 0xfe, 0xc5, 0x5c, 0x06, 0xc7, 0x47, + 0x08, 0x00, 0x00, 0xc7, 0x47, 0x0a, 0x00, 0x00, 0x8e, 0x5e, 0xfe, 0xf6, + 0x44, 0x0b, 0x08, 0x74, 0x0d, 0xbb, 0x75, 0x07, 0x89, 0xf0, 0x8c, 0xda, + 0x8e, 0xdb, 0xff, 0x16, 0x7e, 0x0d, 0x8e, 0x5e, 0xfe, 0xc6, 0x44, 0x0a, + 0x00, 0x80, 0x64, 0x0b, 0x40, 0x89, 0xf8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0x59, 0xc3, 0xbf, 0xff, 0xff, 0xeb, 0xf2, 0xe8, 0x21, 0x17, 0x85, 0xc0, + 0x75, 0x03, 0xe9, 0x6f, 0xff, 0xbf, 0xff, 0xff, 0xe9, 0x69, 0xff, 0x51, + 0x56, 0x89, 0xc1, 0x89, 0xd6, 0xe8, 0x39, 0xff, 0x89, 0xc3, 0x89, 0xf2, + 0x89, 0xc8, 0xe8, 0x86, 0x11, 0x89, 0xd8, 0x5e, 0x59, 0xc3, 0x53, 0x51, + 0x56, 0x57, 0x89, 0xc1, 0x89, 0xd6, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, + 0x1e, 0x76, 0x0d, 0x8b, 0x3e, 0x78, 0x0d, 0x85, 0xff, 0x75, 0x04, 0x85, + 0xdb, 0x74, 0x28, 0x8e, 0xdf, 0x8b, 0x47, 0x06, 0x8b, 0x57, 0x04, 0x39, + 0xf0, 0x75, 0x04, 0x39, 0xca, 0x74, 0x09, 0x8b, 0x17, 0x8b, 0x7f, 0x02, + 0x89, 0xd3, 0xeb, 0xdf, 0xbb, 0x01, 0x00, 0x89, 0xc8, 0x89, 0xf2, 0xe8, + 0xa9, 0xff, 0x5f, 0x5e, 0x59, 0x5b, 0xcb, 0xb8, 0xff, 0xff, 0xeb, 0xf6, 0x93, 0x50, 0x92, 0x0b, 0xc0, 0x74, 0x02, 0xf7, 0xe2, 0x91, 0x0b, 0xc0, - 0x74, 0x04, 0xf7, 0xe3, 0x03, 0xc8, 0x58, 0xf7, 0xe3, 0x03, 0xd1, 0xc3, - 0x53, 0x51, 0x52, 0x8b, 0x16, 0xca, 0x0a, 0xb0, 0x0f, 0x83, 0xc2, 0x04, - 0xee, 0x8b, 0x16, 0xca, 0x0a, 0x83, 0xc2, 0x05, 0xec, 0x8b, 0x16, 0xca, - 0x0a, 0x88, 0xc1, 0xb0, 0x0e, 0x83, 0xc2, 0x04, 0xee, 0x8b, 0x16, 0xca, - 0x0a, 0x83, 0xc2, 0x05, 0x30, 0xed, 0xec, 0x88, 0xc7, 0x31, 0xd2, 0x88, - 0xcb, 0x8a, 0x0e, 0xc5, 0x0a, 0x89, 0xd8, 0xf7, 0xf1, 0x88, 0x16, 0xc2, - 0x0a, 0x89, 0xd8, 0x31, 0xd2, 0xf7, 0xf1, 0xa2, 0xc3, 0x0a, 0xe9, 0xc4, - 0x00, 0x53, 0x51, 0x52, 0x56, 0x57, 0x3c, 0x01, 0x72, 0x0c, 0x76, 0x24, - 0x3c, 0x03, 0x74, 0x43, 0x3c, 0x02, 0x74, 0x2c, 0xeb, 0x54, 0x84, 0xc0, - 0x75, 0x50, 0xc7, 0x06, 0xd0, 0x0a, 0x0a, 0x00, 0x30, 0xe4, 0xc7, 0x06, - 0xd4, 0x0a, 0x02, 0x00, 0xa3, 0xce, 0x0a, 0xa3, 0xd2, 0x0a, 0xeb, 0x3a, - 0xc7, 0x06, 0xd0, 0x0a, 0x0a, 0x00, 0x31, 0xc0, 0xc7, 0x06, 0xd4, 0x0a, - 0x01, 0x00, 0xeb, 0xe8, 0xc7, 0x06, 0xd0, 0x0a, 0x0b, 0x00, 0x31, 0xc0, - 0xc7, 0x06, 0xd2, 0x0a, 0x00, 0x80, 0xa3, 0xce, 0x0a, 0xeb, 0x14, 0xc7, - 0x06, 0xce, 0x0a, 0x00, 0x80, 0xc7, 0x06, 0xd0, 0x0a, 0x0b, 0x00, 0x31, - 0xc0, 0xc7, 0x06, 0xd2, 0x0a, 0x00, 0x80, 0xa3, 0xd4, 0x0a, 0x8b, 0x3e, - 0xce, 0x0a, 0xa1, 0xce, 0x0a, 0x8b, 0x16, 0xd0, 0x0a, 0x8b, 0x36, 0xce, - 0x0a, 0x8b, 0x1e, 0xce, 0x0a, 0x83, 0xe7, 0x0f, 0xb9, 0x04, 0x00, 0xd1, - 0xea, 0xd1, 0xd8, 0xe2, 0xfa, 0x03, 0x36, 0xd2, 0x0a, 0x8b, 0x16, 0xd0, - 0x0a, 0x89, 0x3e, 0xd6, 0x0a, 0xa3, 0xd8, 0x0a, 0x83, 0xe6, 0x0f, 0x89, - 0x3e, 0xde, 0x0a, 0xa3, 0xe0, 0x0a, 0x03, 0x1e, 0xd2, 0x0a, 0x13, 0x16, - 0xd4, 0x0a, 0x89, 0x36, 0xda, 0x0a, 0xb9, 0x04, 0x00, 0xd1, 0xea, 0xd1, - 0xdb, 0xe2, 0xfa, 0x89, 0x36, 0xe2, 0x0a, 0x89, 0x1e, 0xdc, 0x0a, 0x89, - 0x1e, 0xe4, 0x0a, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x53, 0x52, 0xc6, - 0x06, 0xc5, 0x0a, 0x50, 0xc7, 0x06, 0xc8, 0x0a, 0x19, 0x00, 0x30, 0xc0, - 0xc7, 0x06, 0xc6, 0x0a, 0x50, 0x00, 0xa2, 0xc2, 0x0a, 0xa2, 0xc3, 0x0a, - 0xa0, 0xcc, 0x0a, 0x80, 0x26, 0xe9, 0x0a, 0xfd, 0xa8, 0x10, 0x74, 0x57, - 0xba, 0xcc, 0x03, 0xec, 0xa8, 0x01, 0x74, 0x08, 0xc7, 0x06, 0xca, 0x0a, - 0xd0, 0x03, 0xeb, 0x06, 0xc7, 0x06, 0xca, 0x0a, 0xb0, 0x03, 0xb0, 0x06, - 0xba, 0xce, 0x03, 0xee, 0xba, 0xcf, 0x03, 0xec, 0x88, 0xc4, 0xa8, 0x01, - 0x75, 0x04, 0xb0, 0x01, 0xeb, 0x02, 0x30, 0xc0, 0x80, 0x26, 0xe9, 0x0a, - 0xfe, 0x24, 0x01, 0x08, 0x06, 0xe9, 0x0a, 0x88, 0xe0, 0x30, 0xe4, 0xd1, - 0xf8, 0xd1, 0xf8, 0x25, 0x03, 0x00, 0xba, 0xc4, 0x03, 0xe8, 0xc9, 0xfe, - 0xb0, 0x01, 0xee, 0xba, 0xc5, 0x03, 0xec, 0xa8, 0x01, 0x75, 0x06, 0xb0, - 0x01, 0xeb, 0x04, 0xeb, 0x38, 0x30, 0xc0, 0x80, 0x26, 0xe9, 0x0a, 0xfd, - 0x24, 0x01, 0x8b, 0x16, 0xca, 0x0a, 0xd0, 0xe0, 0x83, 0xc2, 0x04, 0x08, - 0x06, 0xe9, 0x0a, 0xb0, 0x13, 0xee, 0x8b, 0x16, 0xca, 0x0a, 0x83, 0xc2, - 0x05, 0xec, 0xd0, 0xe0, 0xa2, 0xc5, 0x0a, 0xf6, 0x06, 0xe9, 0x0a, 0x01, - 0x74, 0x08, 0x30, 0xe4, 0xa3, 0xc6, 0x0a, 0xe8, 0x3a, 0xfe, 0xe9, 0xca, - 0x00, 0xa8, 0x20, 0x74, 0x55, 0xb8, 0x40, 0x00, 0xbb, 0x63, 0x00, 0x8e, - 0xc0, 0x26, 0x8a, 0x07, 0x24, 0xf0, 0x3c, 0xd0, 0x74, 0x0c, 0x3c, 0xb0, - 0x75, 0x08, 0xc7, 0x06, 0xca, 0x0a, 0xb0, 0x03, 0xeb, 0x06, 0xc7, 0x06, - 0xca, 0x0a, 0xd0, 0x03, 0xb8, 0x00, 0x0f, 0xcd, 0x10, 0x3c, 0x04, 0x72, - 0x08, 0x3c, 0x06, 0x76, 0x1b, 0x3c, 0x07, 0x77, 0x23, 0x80, 0x0e, 0xe9, - 0x0a, 0x01, 0x81, 0x3e, 0xca, 0x0a, 0xb0, 0x03, 0x75, 0x05, 0xb8, 0x02, - 0x00, 0xeb, 0x19, 0xb8, 0x03, 0x00, 0xeb, 0x14, 0xb8, 0x03, 0x00, 0x80, - 0x26, 0xe9, 0x0a, 0xfe, 0xeb, 0x0a, 0xeb, 0x20, 0xb8, 0x01, 0x00, 0x80, - 0x26, 0xe9, 0x0a, 0xfe, 0xe8, 0x1a, 0xfe, 0x8b, 0x16, 0xca, 0x0a, 0xb0, - 0x13, 0x83, 0xc2, 0x04, 0xee, 0x8b, 0x16, 0xca, 0x0a, 0x83, 0xc2, 0x05, - 0xec, 0xe9, 0x6e, 0xff, 0xa8, 0x40, 0x74, 0x36, 0xc7, 0x06, 0xca, 0x0a, - 0xd0, 0x03, 0xb8, 0x00, 0x0f, 0xcd, 0x10, 0x88, 0xc4, 0x3c, 0x07, 0x74, - 0x04, 0x3c, 0x03, 0x77, 0x07, 0x80, 0x0e, 0xe9, 0x0a, 0x01, 0xeb, 0x05, - 0x80, 0x26, 0xe9, 0x0a, 0xfe, 0x80, 0xfc, 0x01, 0x77, 0x0b, 0xc6, 0x06, - 0xc5, 0x0a, 0x28, 0xc7, 0x06, 0xc6, 0x0a, 0x28, 0x00, 0xb8, 0x03, 0x00, - 0xeb, 0x12, 0xa8, 0x80, 0x74, 0x11, 0xc7, 0x06, 0xca, 0x0a, 0xb0, 0x03, - 0xb8, 0x02, 0x00, 0x80, 0x0e, 0xe9, 0x0a, 0x01, 0xe8, 0xb6, 0xfd, 0xa0, - 0xc5, 0x0a, 0xa2, 0xe7, 0x0a, 0xa2, 0xe8, 0x0a, 0x5a, 0x5b, 0xc3, 0x53, - 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x30, 0xb9, 0x07, - 0x00, 0x8d, 0x7e, 0xde, 0x8d, 0x5e, 0xde, 0x1e, 0x07, 0xbe, 0x4a, 0x07, - 0x31, 0xc0, 0xf3, 0xa5, 0x8d, 0x56, 0xde, 0xa3, 0xcc, 0x0a, 0xa3, 0xca, - 0x0a, 0xb8, 0x10, 0x00, 0xc7, 0x46, 0xde, 0x00, 0x1a, 0xe8, 0x41, 0x14, - 0x80, 0x7e, 0xde, 0x1a, 0x75, 0x48, 0x8a, 0x46, 0xe0, 0x3c, 0x01, 0x75, - 0x07, 0x80, 0x0e, 0xcc, 0x0a, 0x80, 0xeb, 0x3a, 0x3c, 0x02, 0x75, 0x07, - 0x80, 0x0e, 0xcc, 0x0a, 0x40, 0xeb, 0x2f, 0x3c, 0x04, 0x74, 0x04, 0x3c, - 0x05, 0x75, 0x07, 0x80, 0x0e, 0xcc, 0x0a, 0x60, 0xeb, 0x20, 0x3c, 0x07, - 0x74, 0x04, 0x3c, 0x08, 0x75, 0x07, 0x80, 0x0e, 0xcc, 0x0a, 0x70, 0xeb, - 0x11, 0x3c, 0x0a, 0x74, 0x08, 0x3c, 0x0b, 0x74, 0x04, 0x3c, 0x0c, 0x75, - 0x05, 0x80, 0x0e, 0xcc, 0x0a, 0x48, 0x83, 0x3e, 0xcc, 0x0a, 0x00, 0x75, - 0x21, 0xc7, 0x46, 0xde, 0x00, 0x12, 0x8d, 0x5e, 0xde, 0x8d, 0x56, 0xde, - 0xb8, 0x10, 0x00, 0xc7, 0x46, 0xe0, 0x10, 0xff, 0xe8, 0xd6, 0x13, 0x80, - 0x7e, 0xe1, 0xff, 0x74, 0x05, 0x80, 0x0e, 0xcc, 0x0a, 0x60, 0xa1, 0xcc, - 0x0a, 0x85, 0xc0, 0x75, 0x29, 0x89, 0x46, 0xfa, 0x50, 0xcd, 0x11, 0x89, - 0x86, 0xfa, 0xff, 0x58, 0x8b, 0x46, 0xfa, 0x25, 0x30, 0x00, 0x3d, 0x30, - 0x00, 0x75, 0x07, 0x80, 0x0e, 0xcc, 0x0a, 0x80, 0xeb, 0x0c, 0x8b, 0x46, - 0xfa, 0xa8, 0x30, 0x74, 0x05, 0x80, 0x0e, 0xcc, 0x0a, 0x40, 0xf6, 0x06, - 0xcc, 0x0a, 0x40, 0x74, 0x1c, 0xf7, 0x06, 0xcc, 0x0a, 0x02, 0x02, 0x75, - 0x14, 0xb8, 0x00, 0xf0, 0xbe, 0xfe, 0xff, 0x8e, 0xc0, 0x26, 0x8a, 0x04, - 0x3c, 0xfd, 0x75, 0x05, 0x80, 0x0e, 0xcd, 0x0a, 0x02, 0xf6, 0x06, 0xcc, - 0x0a, 0x40, 0x74, 0x6e, 0xf7, 0x06, 0xcc, 0x0a, 0x02, 0x02, 0x75, 0x66, - 0xb9, 0x07, 0x00, 0x8d, 0x7e, 0xd0, 0x8d, 0x5e, 0xd0, 0x1e, 0x07, 0xbe, - 0x58, 0x07, 0x8d, 0x56, 0xd0, 0xf3, 0xa5, 0xb8, 0x1a, 0x00, 0xc7, 0x46, - 0xd0, 0x00, 0x81, 0xe8, 0x4b, 0x13, 0xf6, 0x46, 0xd0, 0x80, 0x74, 0x0b, - 0xf6, 0x46, 0xdc, 0x01, 0x75, 0x05, 0x80, 0x0e, 0xcc, 0x0a, 0x02, 0xb9, - 0x07, 0x00, 0x8d, 0x7e, 0xec, 0x8d, 0x5e, 0xec, 0x1e, 0x07, 0xbe, 0x66, - 0x07, 0x31, 0xc0, 0xf3, 0xa5, 0x8d, 0x56, 0xec, 0x89, 0x46, 0xee, 0x89, - 0x46, 0xf8, 0xb8, 0x15, 0x00, 0xc7, 0x46, 0xec, 0x00, 0x06, 0xe8, 0x14, - 0x13, 0x83, 0x7e, 0xee, 0x00, 0x74, 0x0b, 0xf6, 0x46, 0xf8, 0x01, 0x75, - 0x05, 0x80, 0x0e, 0xcd, 0x0a, 0x01, 0xf6, 0x06, 0xcc, 0x0a, 0x80, 0x74, - 0x49, 0xba, 0xba, 0x03, 0xb9, 0xff, 0xff, 0xec, 0x31, 0xf6, 0x88, 0xc3, - 0x49, 0x74, 0x3d, 0xba, 0xba, 0x03, 0xec, 0x88, 0x46, 0xfe, 0x88, 0xc2, - 0x88, 0xdc, 0x80, 0xe2, 0x80, 0x80, 0xe4, 0x80, 0x38, 0xe2, 0x75, 0x28, - 0x88, 0xc2, 0x30, 0xf6, 0x88, 0x5e, 0xfc, 0x88, 0x76, 0xfd, 0x33, 0x56, - 0xfc, 0xf6, 0xc2, 0x01, 0x74, 0x0e, 0x80, 0xf3, 0x01, 0xa8, 0x01, 0x74, - 0x07, 0x46, 0x81, 0xfe, 0x58, 0x02, 0x73, 0x08, 0xba, 0x80, 0x00, 0xec, - 0xeb, 0xc2, 0xeb, 0x43, 0x85, 0xc9, 0x76, 0x3f, 0x8a, 0x46, 0xfe, 0x30, - 0xe4, 0x30, 0xc3, 0xf6, 0xc3, 0x80, 0x74, 0x33, 0xb1, 0x04, 0xd3, 0xf8, - 0x89, 0xc1, 0x30, 0xe5, 0x80, 0xe1, 0x07, 0x80, 0x0e, 0xcc, 0x0a, 0x04, - 0x88, 0x0e, 0xc4, 0x0a, 0x83, 0xf9, 0x05, 0x74, 0x05, 0x83, 0xf9, 0x01, - 0x75, 0x10, 0x8a, 0x46, 0xfe, 0xb1, 0x04, 0x30, 0xe4, 0xd3, 0xf8, 0x24, - 0x07, 0xa2, 0xc4, 0x0a, 0xeb, 0x05, 0xc6, 0x06, 0xc4, 0x0a, 0x00, 0xe8, - 0x6b, 0xfc, 0xb8, 0x01, 0x00, 0x89, 0xec, 0x5d, 0xe9, 0x5c, 0xfc, 0x00, - 0x0b, 0xd2, 0x78, 0x16, 0x0b, 0xc9, 0x79, 0x41, 0xf7, 0xd9, 0xf7, 0xdb, - 0x83, 0xd9, 0x00, 0xe8, 0x37, 0x00, 0xf7, 0xda, 0xf7, 0xd8, 0x83, 0xda, - 0x00, 0xc3, 0xf7, 0xda, 0xf7, 0xd8, 0x83, 0xda, 0x00, 0x0b, 0xc9, 0x79, - 0x12, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xe8, 0x1a, 0x00, 0xf7, - 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xc3, 0xe8, 0x0f, 0x00, 0xf7, 0xd9, - 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xf7, 0xda, 0xf7, 0xd8, 0x83, 0xda, 0x00, - 0xc3, 0x0b, 0xc9, 0x75, 0x1a, 0x4b, 0x74, 0x16, 0x43, 0x3b, 0xda, 0x77, - 0x09, 0x8b, 0xc8, 0x8b, 0xc2, 0x2b, 0xd2, 0xf7, 0xf3, 0x91, 0xf7, 0xf3, - 0x8b, 0xda, 0x8b, 0xd1, 0x2b, 0xc9, 0xc3, 0x3b, 0xca, 0x72, 0x1a, 0x75, - 0x10, 0x3b, 0xd8, 0x77, 0x0c, 0x2b, 0xc3, 0x8b, 0xd8, 0x2b, 0xc9, 0x2b, - 0xd2, 0xb8, 0x01, 0x00, 0xc3, 0x2b, 0xc9, 0x2b, 0xdb, 0x93, 0x87, 0xca, - 0xc3, 0x55, 0x56, 0x2b, 0xf6, 0x8b, 0xee, 0x03, 0xdb, 0x13, 0xc9, 0x72, - 0x11, 0x45, 0x3b, 0xca, 0x72, 0xf5, 0x77, 0x04, 0x3b, 0xd8, 0x76, 0xef, - 0xf8, 0x13, 0xf6, 0x4d, 0x78, 0x20, 0xd1, 0xd9, 0xd1, 0xdb, 0x2b, 0xc3, - 0x19, 0xca, 0xf5, 0x72, 0xf0, 0x03, 0xf6, 0x4d, 0x78, 0x0c, 0xd1, 0xe9, - 0xd1, 0xdb, 0x03, 0xc3, 0x13, 0xd1, 0x73, 0xf1, 0xeb, 0xdf, 0x03, 0xc3, - 0x13, 0xd1, 0x8b, 0xd8, 0x8b, 0xca, 0x8b, 0xc6, 0x33, 0xd2, 0x5e, 0x5d, - 0xc3, 0x53, 0x52, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x8d, 0x46, 0x0c, - 0x8d, 0x5e, 0xfe, 0x8b, 0x56, 0x0a, 0x89, 0x46, 0xfe, 0x8b, 0x46, 0x08, - 0xe8, 0xab, 0x11, 0x89, 0xec, 0x5d, 0x5a, 0x5b, 0xc3, 0x83, 0x3e, 0x8a, - 0x07, 0x00, 0x74, 0x04, 0xb8, 0x01, 0x00, 0xc3, 0xb4, 0x0b, 0xcd, 0x21, - 0x30, 0xe4, 0xc3, 0xa1, 0x8a, 0x07, 0xc7, 0x06, 0x8a, 0x07, 0x00, 0x00, - 0x85, 0xc0, 0x74, 0x01, 0xc3, 0xb4, 0x08, 0xcd, 0x21, 0x30, 0xe4, 0xc3, - 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc2, 0xb8, - 0x1e, 0x04, 0xe8, 0x7f, 0x11, 0x89, 0xc3, 0x85, 0xd2, 0x74, 0x33, 0x30, - 0xc9, 0x85, 0xc0, 0x75, 0x03, 0xbb, 0x2e, 0x04, 0x31, 0xc0, 0x50, 0x88, - 0xc8, 0x30, 0xe4, 0x52, 0x89, 0xc2, 0x8d, 0x46, 0xfc, 0xe8, 0xd1, 0x11, - 0x50, 0x84, 0xc9, 0x74, 0x1a, 0xb8, 0x3a, 0x04, 0x50, 0x53, 0x31, 0xc0, - 0x50, 0xe8, 0xe0, 0x11, 0x83, 0xc4, 0x0c, 0x89, 0xec, 0x5d, 0x5a, 0x59, - 0x5b, 0xc3, 0xb8, 0x01, 0x00, 0xeb, 0xf4, 0xb8, 0x3e, 0x04, 0xeb, 0xe4, - 0x53, 0x51, 0x52, 0x56, 0xa0, 0x74, 0x07, 0x84, 0xc0, 0x7c, 0x04, 0x98, - 0xe9, 0x7c, 0x00, 0xbb, 0x80, 0x00, 0x9c, 0x58, 0xba, 0x43, 0x00, 0x89, - 0xc6, 0x30, 0xc0, 0xee, 0xba, 0x40, 0x00, 0xec, 0x2a, 0xe4, 0x89, 0xc1, - 0xec, 0x2a, 0xe4, 0x88, 0xc4, 0x89, 0xca, 0x30, 0xc0, 0x09, 0xc2, 0xf7, - 0xc6, 0x00, 0x02, 0x74, 0x01, 0xfb, 0x89, 0xd0, 0x83, 0xfa, 0xff, 0x75, - 0x26, 0x9c, 0x58, 0xba, 0x43, 0x00, 0x89, 0xc6, 0x30, 0xc0, 0xee, 0xba, - 0x40, 0x00, 0xec, 0x2a, 0xe4, 0x89, 0xc1, 0xec, 0x2a, 0xe4, 0x88, 0xc4, - 0x30, 0xc0, 0x89, 0xc2, 0x09, 0xca, 0xf7, 0xc6, 0x00, 0x02, 0x74, 0x01, - 0xfb, 0x89, 0xd0, 0x3d, 0xff, 0xff, 0x75, 0x0d, 0x31, 0xd2, 0x42, 0x83, - 0xfa, 0xff, 0x75, 0xfa, 0x4b, 0x39, 0xd3, 0x75, 0x9d, 0x3d, 0xff, 0x00, - 0x75, 0x09, 0x30, 0xc0, 0xa2, 0x74, 0x07, 0x30, 0xe4, 0xeb, 0x08, 0xc6, - 0x06, 0x74, 0x07, 0x01, 0xb8, 0x01, 0x00, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, - 0xeb, 0x37, 0x03, 0x00, 0x2a, 0x2a, 0x2a, 0x20, 0x4e, 0x55, 0x4c, 0x4c, - 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, - 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x00, 0x4e, 0x6f, 0x74, - 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x6d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x00, 0x63, 0x6f, 0x6e, 0x00, 0x0d, 0x0a, 0xfb, 0xb9, 0x91, - 0x05, 0x8e, 0xc1, 0xbb, 0x0a, 0x0c, 0x83, 0xc3, 0x0f, 0x80, 0xe3, 0xf0, - 0x26, 0x89, 0x1e, 0x86, 0x07, 0x26, 0x8c, 0x1e, 0x80, 0x07, 0x03, 0xdc, - 0x83, 0xc3, 0x0f, 0x80, 0xe3, 0xf0, 0x8e, 0xd1, 0x8b, 0xe3, 0x26, 0x89, - 0x1e, 0x88, 0x07, 0x8b, 0xd3, 0xd1, 0xea, 0xd1, 0xea, 0xd1, 0xea, 0xd1, - 0xea, 0x26, 0x80, 0x3e, 0x84, 0x07, 0x00, 0x75, 0x3d, 0x8b, 0x0e, 0x02, - 0x00, 0x8c, 0xc0, 0x2b, 0xc8, 0x3b, 0xd1, 0x72, 0x0b, 0xbb, 0x01, 0x00, - 0xb8, 0x09, 0x1b, 0x8c, 0xca, 0xe9, 0xc8, 0x10, 0x8c, 0xc0, 0x8b, 0xda, - 0xd1, 0xe3, 0xd1, 0xe3, 0xd1, 0xe3, 0xd1, 0xe3, 0x75, 0x03, 0xbb, 0xfe, - 0xff, 0x26, 0x89, 0x1e, 0x7e, 0x07, 0x8b, 0xda, 0x03, 0xd8, 0x26, 0xa1, - 0x80, 0x07, 0x8e, 0xc0, 0x2b, 0xd8, 0xb4, 0x4a, 0xcd, 0x21, 0x8c, 0xdf, - 0x8e, 0xc7, 0xbf, 0x81, 0x00, 0x8a, 0x4d, 0xff, 0x32, 0xed, 0xfc, 0xb0, - 0x20, 0xf3, 0xae, 0x8d, 0x75, 0xff, 0xba, 0x91, 0x05, 0x8e, 0xc2, 0x26, - 0x8b, 0x3e, 0x86, 0x07, 0x26, 0x89, 0x3e, 0x9f, 0x07, 0x26, 0x8c, 0x06, - 0xa1, 0x07, 0x74, 0x03, 0x41, 0xf3, 0xa4, 0x2a, 0xc0, 0xaa, 0xaa, 0x4f, - 0xb4, 0x30, 0xcd, 0x21, 0x26, 0xa2, 0x82, 0x07, 0x26, 0x88, 0x26, 0x83, - 0x07, 0x8b, 0xcf, 0x3c, 0x03, 0x72, 0x58, 0x8e, 0x1e, 0x2c, 0x00, 0x2b, - 0xf6, 0xbd, 0x00, 0x01, 0x8b, 0x04, 0x0d, 0x20, 0x20, 0x3d, 0x6e, 0x6f, - 0x75, 0x12, 0x81, 0x7c, 0x02, 0x38, 0x37, 0x75, 0x27, 0x80, 0x7c, 0x04, - 0x3d, 0x75, 0x21, 0x83, 0xcd, 0x01, 0xeb, 0x1c, 0x3d, 0x6c, 0x66, 0x75, - 0x1a, 0x8b, 0x44, 0x02, 0x0c, 0x20, 0x3d, 0x6e, 0x3d, 0x75, 0x10, 0x8a, - 0x44, 0x04, 0x0c, 0x20, 0x3c, 0x6e, 0x75, 0x07, 0x81, 0xe5, 0xff, 0xfe, - 0x83, 0xc6, 0x05, 0x80, 0x3c, 0x00, 0xac, 0x75, 0xfa, 0x80, 0x3c, 0x00, - 0x75, 0xba, 0xac, 0x46, 0x46, 0x80, 0x3c, 0x00, 0xa4, 0x75, 0xfa, 0x8e, - 0xda, 0x8b, 0xf1, 0x89, 0x36, 0xa3, 0x07, 0x8c, 0x06, 0xa5, 0x07, 0x8b, - 0xdc, 0x8b, 0xc5, 0xa2, 0x8e, 0x07, 0x20, 0x26, 0xa8, 0x07, 0x89, 0x3e, - 0x86, 0x07, 0xb9, 0x0a, 0x0c, 0xbf, 0x72, 0x08, 0x2b, 0xcf, 0x32, 0xc0, - 0xf3, 0xaa, 0x83, 0x3e, 0x8f, 0x07, 0x00, 0x75, 0x18, 0xb8, 0x7e, 0x1d, - 0xa3, 0x8f, 0x07, 0x8c, 0x0e, 0x91, 0x07, 0xa3, 0x93, 0x07, 0x8c, 0x0e, - 0x95, 0x07, 0xa3, 0x97, 0x07, 0x8c, 0x0e, 0x99, 0x07, 0x33, 0xed, 0xb8, - 0x7d, 0x1d, 0xa3, 0x9b, 0x07, 0x8c, 0x0e, 0x9d, 0x07, 0xb8, 0xff, 0x00, - 0xe8, 0x11, 0x10, 0xe8, 0xc1, 0x0f, 0x50, 0xba, 0x91, 0x05, 0x8e, 0xda, - 0xfc, 0x8d, 0x3e, 0x00, 0x00, 0x8e, 0xc2, 0xb9, 0x10, 0x00, 0xb8, 0x01, - 0x01, 0xf3, 0xaf, 0x74, 0x39, 0x5b, 0xb8, 0xec, 0x1a, 0x8c, 0xca, 0xbc, - 0x8a, 0x0c, 0x53, 0x50, 0x52, 0x8c, 0xcf, 0x8e, 0xdf, 0xba, 0x1b, 0x1b, - 0xb8, 0x01, 0x3d, 0xcd, 0x21, 0x8b, 0xd8, 0x1f, 0x5a, 0x8b, 0xf2, 0xfc, - 0xac, 0x84, 0xc0, 0x75, 0xfb, 0x8b, 0xce, 0x2b, 0xca, 0x49, 0xb4, 0x40, - 0xcd, 0x21, 0x8e, 0xdf, 0xba, 0x1f, 0x1b, 0xb9, 0x02, 0x00, 0xb4, 0x40, - 0xcd, 0x21, 0x33, 0xc0, 0xba, 0x0f, 0x00, 0xe8, 0x15, 0x10, 0x58, 0xb4, + 0x74, 0x04, 0xf7, 0xe3, 0x03, 0xc8, 0x58, 0xf7, 0xe3, 0x03, 0xd1, 0xcb, + 0x0b, 0xd2, 0x78, 0x18, 0x0b, 0xc9, 0x79, 0x47, 0xf7, 0xd9, 0xf7, 0xdb, + 0x83, 0xd9, 0x00, 0x0e, 0x3e, 0xe8, 0x3b, 0x00, 0xf7, 0xda, 0xf7, 0xd8, + 0x83, 0xda, 0x00, 0xcb, 0xf7, 0xda, 0xf7, 0xd8, 0x83, 0xda, 0x00, 0x0b, + 0xc9, 0x79, 0x14, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0x0e, 0xe8, + 0x1d, 0x00, 0x90, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xcb, 0x0e, + 0x3e, 0xe8, 0x0f, 0x00, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xf7, + 0xda, 0xf7, 0xd8, 0x83, 0xda, 0x00, 0xcb, 0x0b, 0xc9, 0x75, 0x1a, 0x4b, + 0x74, 0x16, 0x43, 0x3b, 0xda, 0x77, 0x09, 0x8b, 0xc8, 0x8b, 0xc2, 0x2b, + 0xd2, 0xf7, 0xf3, 0x91, 0xf7, 0xf3, 0x8b, 0xda, 0x8b, 0xd1, 0x2b, 0xc9, + 0xcb, 0x3b, 0xca, 0x72, 0x1a, 0x75, 0x10, 0x3b, 0xd8, 0x77, 0x0c, 0x2b, + 0xc3, 0x8b, 0xd8, 0x2b, 0xc9, 0x2b, 0xd2, 0xb8, 0x01, 0x00, 0xcb, 0x2b, + 0xc9, 0x2b, 0xdb, 0x93, 0x87, 0xca, 0xcb, 0x55, 0x56, 0x2b, 0xf6, 0x8b, + 0xee, 0x03, 0xdb, 0x13, 0xc9, 0x72, 0x11, 0x45, 0x3b, 0xca, 0x72, 0xf5, + 0x77, 0x04, 0x3b, 0xd8, 0x76, 0xef, 0xf8, 0x13, 0xf6, 0x4d, 0x78, 0x20, + 0xd1, 0xd9, 0xd1, 0xdb, 0x2b, 0xc3, 0x19, 0xca, 0xf5, 0x72, 0xf0, 0x03, + 0xf6, 0x4d, 0x78, 0x0c, 0xd1, 0xe9, 0xd1, 0xdb, 0x03, 0xc3, 0x13, 0xd1, + 0x73, 0xf1, 0xeb, 0xdf, 0x03, 0xc3, 0x13, 0xd1, 0x8b, 0xd8, 0x8b, 0xca, + 0x8b, 0xc6, 0x33, 0xd2, 0x5e, 0x5d, 0xcb, 0x53, 0x51, 0x52, 0x55, 0x89, + 0xe5, 0x8d, 0x56, 0x14, 0x8b, 0x5e, 0x10, 0x8b, 0x4e, 0x12, 0x16, 0x8b, + 0x46, 0x0c, 0x52, 0x8b, 0x56, 0x0e, 0x0e, 0xe8, 0xcc, 0x17, 0x90, 0x5d, + 0x5a, 0x59, 0x5b, 0xcb, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x83, 0x3e, 0x2c, + 0x08, 0x00, 0x74, 0x04, 0xb8, 0x01, 0x00, 0xcb, 0xb4, 0x0b, 0xcd, 0x21, + 0x84, 0xc0, 0x75, 0xf4, 0x30, 0xe4, 0xcb, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0xa1, 0x2c, 0x08, 0xc7, 0x06, 0x2c, 0x08, 0x00, 0x00, 0x85, 0xc0, 0x74, + 0x01, 0xcb, 0xb4, 0x08, 0xcd, 0x21, 0x30, 0xe4, 0xcb, 0x53, 0x51, 0x56, + 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc1, 0x89, 0xd3, 0xb8, + 0x28, 0x04, 0xba, 0x75, 0x07, 0x0e, 0x3e, 0xe8, 0xa0, 0x17, 0x89, 0xc7, + 0x89, 0xd6, 0x85, 0xdb, 0x75, 0x04, 0x85, 0xc9, 0x74, 0x4c, 0xc6, 0x46, + 0xfe, 0x00, 0x85, 0xd2, 0x75, 0x0a, 0x85, 0xc0, 0x75, 0x06, 0xbf, 0x38, + 0x04, 0xbe, 0x75, 0x07, 0x31, 0xc0, 0x50, 0x8c, 0xd2, 0x50, 0x8d, 0x46, + 0xfa, 0x53, 0x8a, 0x5e, 0xfe, 0x51, 0x30, 0xff, 0x0e, 0xe8, 0x3d, 0x18, + 0x90, 0x52, 0x50, 0x80, 0x7e, 0xfe, 0x00, 0x74, 0x22, 0xb8, 0x44, 0x04, + 0xba, 0x75, 0x07, 0x52, 0x50, 0x56, 0x57, 0x31, 0xc0, 0x50, 0x0e, 0xe8, + 0x46, 0x18, 0x90, 0x83, 0xc4, 0x16, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, + 0x5b, 0xcb, 0xb8, 0x01, 0x00, 0xeb, 0xf3, 0xb8, 0x48, 0x04, 0xeb, 0xdc, + 0xeb, 0x35, 0x2a, 0x2a, 0x2a, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x20, 0x61, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, + 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x00, 0x4e, 0x6f, 0x74, 0x20, 0x65, + 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x00, 0x63, 0x6f, 0x6e, 0x00, 0x0d, 0x0a, 0xfb, 0xb9, 0x75, 0x07, 0x8e, + 0xc1, 0xbb, 0xdc, 0x0e, 0x83, 0xc3, 0x0f, 0x80, 0xe3, 0xf0, 0x26, 0x89, + 0x1e, 0x28, 0x08, 0x26, 0x8c, 0x1e, 0x22, 0x08, 0x03, 0xdc, 0x83, 0xc3, + 0x0f, 0x80, 0xe3, 0xf0, 0x8e, 0xd1, 0x8b, 0xe3, 0x26, 0x89, 0x1e, 0x2a, + 0x08, 0x8b, 0xd3, 0xd1, 0xea, 0xd1, 0xea, 0xd1, 0xea, 0xd1, 0xea, 0x26, + 0x80, 0x3e, 0x26, 0x08, 0x00, 0x75, 0x3d, 0x8b, 0x0e, 0x02, 0x00, 0x8c, + 0xc0, 0x2b, 0xc8, 0x3b, 0xd1, 0x72, 0x0b, 0xbb, 0x01, 0x00, 0xb8, 0xbf, + 0x1d, 0x8c, 0xca, 0xe9, 0xc7, 0x17, 0x8c, 0xc0, 0x8b, 0xda, 0xd1, 0xe3, + 0xd1, 0xe3, 0xd1, 0xe3, 0xd1, 0xe3, 0x75, 0x03, 0xbb, 0xfe, 0xff, 0x26, + 0x89, 0x1e, 0x20, 0x08, 0x8b, 0xda, 0x03, 0xd8, 0x26, 0xa1, 0x22, 0x08, + 0x8e, 0xc0, 0x2b, 0xd8, 0xb4, 0x4a, 0xcd, 0x21, 0x8c, 0xdf, 0x8e, 0xc7, + 0xbf, 0x81, 0x00, 0x8a, 0x4d, 0xff, 0x32, 0xed, 0xfc, 0xb0, 0x20, 0xf3, + 0xae, 0x8d, 0x75, 0xff, 0xba, 0x75, 0x07, 0x8e, 0xc2, 0x26, 0x8b, 0x3e, + 0x28, 0x08, 0x26, 0x89, 0x3e, 0x41, 0x08, 0x26, 0x8c, 0x06, 0x43, 0x08, + 0x74, 0x03, 0x41, 0xf3, 0xa4, 0x2a, 0xc0, 0xaa, 0xaa, 0x4f, 0xb4, 0x30, + 0xcd, 0x21, 0x26, 0xa2, 0x24, 0x08, 0x26, 0x88, 0x26, 0x25, 0x08, 0x8b, + 0xcf, 0x3c, 0x03, 0x72, 0x58, 0x8e, 0x1e, 0x2c, 0x00, 0x2b, 0xf6, 0xbd, + 0x00, 0x01, 0x8b, 0x04, 0x0d, 0x20, 0x20, 0x3d, 0x6e, 0x6f, 0x75, 0x12, + 0x81, 0x7c, 0x02, 0x38, 0x37, 0x75, 0x27, 0x80, 0x7c, 0x04, 0x3d, 0x75, + 0x21, 0x83, 0xcd, 0x01, 0xeb, 0x1c, 0x3d, 0x6c, 0x66, 0x75, 0x1a, 0x8b, + 0x44, 0x02, 0x0c, 0x20, 0x3d, 0x6e, 0x3d, 0x75, 0x10, 0x8a, 0x44, 0x04, + 0x0c, 0x20, 0x3c, 0x6e, 0x75, 0x07, 0x81, 0xe5, 0xff, 0xfe, 0x83, 0xc6, + 0x05, 0x80, 0x3c, 0x00, 0xac, 0x75, 0xfa, 0x80, 0x3c, 0x00, 0x75, 0xba, + 0xac, 0x46, 0x46, 0x80, 0x3c, 0x00, 0xa4, 0x75, 0xfa, 0x8e, 0xda, 0x8b, + 0xf1, 0x89, 0x36, 0x45, 0x08, 0x8c, 0x06, 0x47, 0x08, 0x8b, 0xdc, 0x8b, + 0xc5, 0xa2, 0x30, 0x08, 0x20, 0x26, 0x4a, 0x08, 0x89, 0x3e, 0x28, 0x08, + 0xb9, 0xdc, 0x0e, 0xbf, 0x26, 0x09, 0x2b, 0xcf, 0x32, 0xc0, 0xf3, 0xaa, + 0x83, 0x3e, 0x31, 0x08, 0x00, 0x75, 0x18, 0xb8, 0x4e, 0x20, 0xa3, 0x31, + 0x08, 0x8c, 0x0e, 0x33, 0x08, 0xa3, 0x35, 0x08, 0x8c, 0x0e, 0x37, 0x08, + 0xa3, 0x39, 0x08, 0x8c, 0x0e, 0x3b, 0x08, 0x33, 0xed, 0x55, 0x8b, 0xec, + 0xb8, 0x4d, 0x20, 0xa3, 0x3d, 0x08, 0x8c, 0x0e, 0x3f, 0x08, 0xb8, 0xff, + 0x00, 0xe8, 0x10, 0x17, 0xe9, 0xbf, 0x16, 0x50, 0xba, 0x75, 0x07, 0x8e, + 0xda, 0xfc, 0x8d, 0x3e, 0x00, 0x00, 0x8e, 0xc2, 0xb9, 0x10, 0x00, 0xb8, + 0x01, 0x01, 0xf3, 0xaf, 0x74, 0x39, 0x5b, 0xb8, 0xa2, 0x1d, 0x8c, 0xca, + 0xbc, 0x5c, 0x0f, 0x53, 0x50, 0x52, 0x8c, 0xcf, 0x8e, 0xdf, 0xba, 0xd1, + 0x1d, 0xb8, 0x01, 0x3d, 0xcd, 0x21, 0x8b, 0xd8, 0x1f, 0x5a, 0x8b, 0xf2, + 0xfc, 0xac, 0x84, 0xc0, 0x75, 0xfb, 0x8b, 0xce, 0x2b, 0xca, 0x49, 0xb4, + 0x40, 0xcd, 0x21, 0x8e, 0xdf, 0xba, 0xd5, 0x1d, 0xb9, 0x02, 0x00, 0xb4, + 0x40, 0xcd, 0x21, 0xba, 0x75, 0x07, 0x8e, 0xda, 0x80, 0x3e, 0x0a, 0x08, + 0x00, 0x74, 0x0b, 0xa0, 0x0b, 0x08, 0xb4, 0x25, 0xc5, 0x16, 0x0c, 0x08, + 0xcd, 0x21, 0x33, 0xc0, 0xba, 0x0f, 0x00, 0xe8, 0xf5, 0x16, 0x58, 0xb4, 0x4c, 0xcd, 0x21, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x57, 0x61, 0x74, 0x63, 0x6f, 0x6d, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x31, 0x36, 0x20, 0x52, 0x75, 0x6e, 0x2d, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, @@ -630,827 +814,1017 @@ static const unsigned char bin_dsxmenu_exe_pc[] = { 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x57, 0x61, 0x74, 0x63, 0x6f, 0x6d, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x20, 0x32, 0x30, 0x30, 0x32, 0x2d, - 0x32, 0x30, 0x31, 0x38, 0x2e, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x69, 0x6f, + 0x32, 0x30, 0x32, 0x35, 0x2e, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x53, 0x79, 0x62, 0x61, 0x73, 0x65, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x31, 0x39, 0x38, 0x38, 0x2d, 0x32, - 0x30, 0x30, 0x32, 0x2e, 0x00, 0x50, 0xb8, 0x91, 0x05, 0x8e, 0xd8, 0x58, - 0xc3, 0xcb, 0xcb, 0x00, 0x51, 0x56, 0x57, 0x1e, 0x55, 0x89, 0xe5, 0x83, - 0xec, 0x02, 0x89, 0xde, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0x85, 0xc0, 0x75, - 0x03, 0xe9, 0x6c, 0x00, 0x89, 0xc7, 0x83, 0xc7, 0x03, 0x83, 0xe7, 0xfe, - 0x39, 0xc7, 0x72, 0x60, 0x8e, 0xda, 0x8b, 0x44, 0x0a, 0x83, 0xff, 0x06, - 0x73, 0x03, 0xbf, 0x06, 0x00, 0x39, 0xc7, 0x77, 0x4f, 0x8e, 0xda, 0x8b, - 0x4c, 0x08, 0x8b, 0x5c, 0x06, 0x39, 0xcf, 0x76, 0x50, 0x8e, 0xda, 0x8b, - 0x07, 0x39, 0xc7, 0x77, 0x4f, 0x89, 0x4c, 0x08, 0x29, 0xf8, 0xff, 0x44, - 0x0c, 0x3d, 0x06, 0x00, 0x72, 0x5e, 0x89, 0xd9, 0x01, 0xf9, 0x89, 0x4c, - 0x06, 0x89, 0xce, 0x89, 0x04, 0x89, 0x3f, 0x89, 0xcf, 0x8b, 0x77, 0x02, - 0x89, 0x75, 0x02, 0x8b, 0x47, 0x04, 0x89, 0x45, 0x04, 0x89, 0x4c, 0x04, - 0x89, 0xc6, 0x89, 0x4c, 0x02, 0x8e, 0xda, 0x80, 0x0f, 0x01, 0x83, 0xc3, - 0x02, 0x89, 0x5e, 0xfe, 0x8b, 0x56, 0xfe, 0x89, 0xd0, 0x89, 0xec, 0x5d, - 0x1f, 0x5f, 0x5e, 0x59, 0xc3, 0x8b, 0x5c, 0x14, 0x31, 0xc9, 0xeb, 0xa9, - 0x39, 0xc1, 0x73, 0x02, 0x89, 0xc1, 0x89, 0xf0, 0x8e, 0xda, 0x05, 0x10, - 0x00, 0x8b, 0x5f, 0x04, 0x39, 0xc3, 0x75, 0x95, 0x8b, 0x56, 0xfe, 0x89, - 0x4c, 0x0a, 0xeb, 0xd3, 0xff, 0x4c, 0x0e, 0x8b, 0x7f, 0x02, 0x89, 0x7c, - 0x06, 0x8b, 0x77, 0x04, 0x89, 0x75, 0x04, 0x89, 0x7c, 0x02, 0xeb, 0xb1, - 0x51, 0x56, 0x57, 0x1e, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xd1, - 0x89, 0x5e, 0xfe, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x84, 0x00, 0x89, 0xc6, - 0x8e, 0xda, 0x83, 0xee, 0x02, 0xf6, 0x04, 0x01, 0x74, 0xf1, 0x8b, 0x04, - 0x89, 0xf3, 0x24, 0xfe, 0x01, 0xc3, 0xf6, 0x07, 0x01, 0x74, 0x03, 0xe9, - 0x7e, 0x00, 0x03, 0x07, 0x8b, 0x7e, 0xfe, 0x89, 0x04, 0x3b, 0x5d, 0x06, - 0x75, 0x03, 0x89, 0x75, 0x06, 0x8e, 0xd9, 0x8b, 0x7f, 0x02, 0x8b, 0x5f, - 0x04, 0x89, 0x5d, 0x04, 0x89, 0x7f, 0x02, 0x8b, 0x7e, 0xfe, 0xff, 0x4d, - 0x0e, 0x8e, 0xd9, 0x8b, 0x7f, 0x02, 0x89, 0xfa, 0x8b, 0x04, 0x03, 0x15, - 0x89, 0x7e, 0xfc, 0x39, 0xd6, 0x75, 0x3b, 0x89, 0xfb, 0x03, 0x07, 0x89, - 0x07, 0x8b, 0x5e, 0xfe, 0x3b, 0x57, 0x06, 0x75, 0x03, 0x89, 0x7f, 0x06, - 0x8b, 0x76, 0xfc, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0xff, 0x4f, 0x0c, 0x3b, - 0x77, 0x06, 0x73, 0x08, 0x3b, 0x47, 0x08, 0x76, 0x03, 0x89, 0x47, 0x08, - 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0x3b, 0x47, 0x0a, 0x77, 0x0b, 0x89, 0xec, - 0x5d, 0x1f, 0x5f, 0x5e, 0x59, 0xc3, 0xe9, 0xbd, 0x00, 0x89, 0x47, 0x0a, - 0x89, 0xec, 0x5d, 0x1f, 0x5f, 0x5e, 0x59, 0xc3, 0x8b, 0x5e, 0xfe, 0x89, - 0x04, 0x8b, 0x5f, 0x06, 0x39, 0xde, 0x72, 0x03, 0xe9, 0x6c, 0x00, 0x3b, - 0x77, 0x02, 0x77, 0x91, 0x8b, 0x5e, 0xfe, 0x8b, 0x5f, 0x14, 0x39, 0xde, - 0x72, 0x87, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0x8b, 0x5f, 0x0e, 0x89, 0xd8, - 0x8b, 0x7e, 0xfe, 0x40, 0x31, 0xd2, 0x89, 0x46, 0xfa, 0x8b, 0x45, 0x0c, - 0xf7, 0x76, 0xfa, 0x39, 0xd8, 0x73, 0x18, 0x8b, 0x55, 0x0c, 0x29, 0xda, - 0xd1, 0xe0, 0x39, 0xd3, 0x73, 0x4e, 0x8e, 0xd9, 0x8b, 0x1c, 0x8e, 0xd9, - 0x01, 0xf3, 0x83, 0x3f, 0xff, 0x75, 0x46, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, - 0x8b, 0x5f, 0x06, 0x39, 0xde, 0x72, 0x4b, 0x8e, 0xd9, 0x39, 0xde, 0x73, - 0x03, 0xe9, 0x3d, 0xff, 0x8b, 0x5f, 0x04, 0x39, 0xde, 0x72, 0xf6, 0x8b, - 0x5f, 0x04, 0x39, 0xde, 0x72, 0xef, 0x8b, 0x5f, 0x04, 0xeb, 0xe6, 0x8b, - 0x5f, 0x04, 0x39, 0xde, 0x72, 0xe3, 0x8b, 0x7e, 0xfe, 0x83, 0xc7, 0x10, - 0x8b, 0x45, 0x02, 0x89, 0xfb, 0x39, 0xc6, 0x76, 0x8d, 0xe9, 0x11, 0xff, - 0xb8, 0xff, 0xff, 0xeb, 0xad, 0xf6, 0x07, 0x01, 0x74, 0xc7, 0x8b, 0x17, - 0x80, 0xe2, 0xfe, 0x01, 0xd3, 0x48, 0x74, 0xab, 0xeb, 0xa4, 0x8b, 0x5e, - 0xfe, 0x8b, 0x5f, 0x14, 0xeb, 0xad, 0x8b, 0x7e, 0xfe, 0xff, 0x45, 0x0e, - 0x8b, 0x7e, 0xfc, 0x89, 0x5c, 0x04, 0x89, 0x7c, 0x02, 0x89, 0x75, 0x04, - 0x89, 0x77, 0x02, 0xe9, 0x01, 0xff, 0x31, 0xc0, 0xc3, 0x53, 0x56, 0x57, - 0x89, 0xc6, 0x8b, 0x1e, 0x1e, 0x06, 0x31, 0xff, 0x85, 0xdb, 0x74, 0x0e, - 0x39, 0xde, 0x72, 0x07, 0x89, 0xdf, 0x8b, 0x5f, 0x04, 0xeb, 0xf1, 0x89, - 0x77, 0x02, 0x89, 0x7c, 0x02, 0x89, 0x5c, 0x04, 0x85, 0xff, 0x74, 0x39, - 0x89, 0x75, 0x04, 0xc7, 0x44, 0x10, 0x00, 0x00, 0xc7, 0x44, 0x08, 0x00, - 0x00, 0xc7, 0x44, 0x0c, 0x00, 0x00, 0x8d, 0x44, 0x10, 0xc7, 0x44, 0x0e, - 0x00, 0x00, 0x89, 0x44, 0x12, 0x8b, 0x1c, 0x89, 0x44, 0x14, 0x83, 0xeb, - 0x16, 0x89, 0x44, 0x06, 0x89, 0x5c, 0x16, 0x01, 0xf3, 0x8d, 0x44, 0x16, - 0xc7, 0x47, 0x16, 0xff, 0xff, 0x5f, 0x5e, 0x5b, 0xc3, 0x89, 0x36, 0x1e, - 0x06, 0xeb, 0xc4, 0x53, 0xa1, 0x1e, 0x06, 0x85, 0xc0, 0x74, 0x14, 0x89, - 0xc3, 0x8b, 0x5f, 0x12, 0x8b, 0x07, 0x01, 0xd8, 0x05, 0x02, 0x00, 0x3b, - 0x06, 0x7e, 0x07, 0x75, 0x04, 0x8b, 0x07, 0x5b, 0xc3, 0x31, 0xc0, 0x5b, - 0xc3, 0x53, 0x52, 0x89, 0xc3, 0x8b, 0x07, 0x89, 0xc2, 0x83, 0xc2, 0x03, - 0x80, 0xe2, 0xfe, 0x39, 0xc2, 0x73, 0x05, 0x31, 0xc0, 0x5a, 0x5b, 0xc3, - 0xe8, 0xc4, 0xff, 0x39, 0xd0, 0x72, 0x23, 0x31, 0xd2, 0x89, 0xd0, 0x83, - 0xc2, 0x1e, 0x39, 0xc2, 0x72, 0xe9, 0xa1, 0xaa, 0x07, 0x39, 0xc2, 0x73, - 0x05, 0x89, 0xc2, 0x80, 0xe2, 0xfe, 0x89, 0x17, 0x85, 0xd2, 0x74, 0xd7, - 0xb8, 0x01, 0x00, 0x5a, 0x5b, 0xc3, 0x29, 0xc2, 0xeb, 0xdb, 0x53, 0x56, - 0x57, 0x55, 0x89, 0xe5, 0x50, 0xa1, 0xac, 0x07, 0x85, 0xc0, 0x74, 0x09, - 0x83, 0x3e, 0x7e, 0x07, 0xfe, 0x75, 0x08, 0x31, 0xc0, 0x89, 0xec, 0x5d, - 0xe9, 0x72, 0xff, 0x8d, 0x46, 0xfe, 0xe8, 0x98, 0xff, 0x85, 0xc0, 0x74, - 0xf0, 0x8b, 0x5e, 0xfe, 0x03, 0x1e, 0x7e, 0x07, 0x3b, 0x1e, 0x7e, 0x07, - 0x73, 0x03, 0xbb, 0xfe, 0xff, 0x89, 0xd8, 0xe8, 0x44, 0x0e, 0x89, 0xc6, - 0x3d, 0xff, 0xff, 0x74, 0xd2, 0x3d, 0xf8, 0xff, 0x77, 0xcd, 0x39, 0xc3, - 0x76, 0xc9, 0x29, 0xc3, 0x89, 0x5e, 0xfe, 0x8d, 0x47, 0xfe, 0x39, 0xd8, - 0x77, 0xbd, 0x8b, 0x1e, 0x1e, 0x06, 0x89, 0x46, 0xfe, 0x85, 0xdb, 0x74, - 0x06, 0x83, 0x7f, 0x04, 0x00, 0x75, 0x3c, 0x85, 0xdb, 0x74, 0x4e, 0x8b, - 0x07, 0x8d, 0x7c, 0xfe, 0x01, 0xd8, 0x39, 0xc7, 0x75, 0x43, 0x83, 0x46, - 0xfe, 0x02, 0x8b, 0x46, 0xfe, 0x01, 0x07, 0x8b, 0x46, 0xfe, 0x89, 0xc6, - 0x01, 0xfe, 0x89, 0x05, 0xc7, 0x04, 0xff, 0xff, 0x80, 0x0d, 0x01, 0xc7, - 0x47, 0x0a, 0xff, 0xff, 0x8d, 0x45, 0x02, 0xff, 0x47, 0x0c, 0xe8, 0xa3, - 0xec, 0xb8, 0x01, 0x00, 0xe9, 0x72, 0xff, 0x39, 0xf3, 0x76, 0x05, 0x8b, - 0x5f, 0x04, 0xeb, 0xb1, 0x8b, 0x07, 0x01, 0xd8, 0x05, 0x02, 0x00, 0x39, - 0xf0, 0x73, 0xb0, 0xeb, 0xee, 0x8b, 0x46, 0xfe, 0x3d, 0x1c, 0x00, 0x73, - 0x03, 0xe9, 0x4f, 0xff, 0x89, 0x04, 0x89, 0xf0, 0x89, 0xf3, 0xe8, 0x64, - 0xfe, 0x89, 0xc7, 0xeb, 0xbb, 0x53, 0x52, 0x56, 0x57, 0x80, 0x26, 0x47, - 0x06, 0xf8, 0xbe, 0x24, 0x06, 0x80, 0x0e, 0x47, 0x06, 0x04, 0x8b, 0x44, - 0x06, 0x85, 0xc0, 0x75, 0x08, 0xa3, 0xbe, 0x0a, 0x5f, 0x5e, 0x5a, 0x5b, - 0xc3, 0xb8, 0x0c, 0x00, 0xe8, 0x90, 0xeb, 0x85, 0xc0, 0x74, 0x2a, 0x89, - 0xc7, 0xa1, 0xbc, 0x0a, 0x89, 0x75, 0x02, 0x89, 0x05, 0x89, 0x7c, 0x04, - 0xc7, 0x45, 0x04, 0x00, 0x00, 0x89, 0x3e, 0xbc, 0x0a, 0x8b, 0x7c, 0x04, - 0xc6, 0x45, 0x0a, 0x00, 0x8b, 0x7c, 0x04, 0x83, 0xc6, 0x0e, 0xc7, 0x45, - 0x06, 0x00, 0x00, 0xeb, 0xbd, 0xb8, 0x0c, 0x00, 0xe8, 0x5c, 0xeb, 0x89, - 0xc7, 0x85, 0xc0, 0x75, 0xcc, 0xbb, 0x01, 0x00, 0xb8, 0x46, 0x04, 0x8c, - 0xda, 0xe9, 0x6c, 0x0a, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, - 0x83, 0xec, 0x02, 0xd1, 0xe0, 0xb1, 0x03, 0x89, 0xc2, 0xd3, 0xe0, 0x8b, - 0x1e, 0xbc, 0x0a, 0x29, 0xd0, 0xba, 0x24, 0x06, 0x31, 0xf6, 0x01, 0xc2, - 0x31, 0xc9, 0x89, 0x56, 0xfe, 0x85, 0xdb, 0x74, 0x2e, 0x8b, 0x3f, 0x8b, - 0x5f, 0x02, 0x8a, 0x47, 0x07, 0xba, 0x01, 0x00, 0xa8, 0x40, 0x74, 0x0c, - 0x89, 0xd8, 0xe8, 0xe7, 0xf1, 0x41, 0x09, 0xc6, 0x89, 0xfb, 0xeb, 0xe1, - 0xa8, 0x08, 0x75, 0xf0, 0x3b, 0x5e, 0xfe, 0x72, 0xf3, 0x81, 0xfb, 0x6a, - 0x06, 0x73, 0xe5, 0x31, 0xd2, 0xeb, 0xe1, 0x85, 0xf6, 0x74, 0x0e, 0xbb, - 0xff, 0xff, 0x89, 0xd8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, - 0xc3, 0x89, 0xcb, 0xeb, 0xf1, 0xb8, 0x05, 0x00, 0xeb, 0x8e, 0x31, 0xc0, - 0xe8, 0x89, 0xff, 0xe9, 0x6a, 0x04, 0x53, 0x89, 0xc3, 0x88, 0xd0, 0x8b, - 0x17, 0x30, 0xe4, 0xe8, 0x16, 0x0d, 0xff, 0x47, 0x0a, 0x5b, 0xc3, 0x51, - 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, 0xd7, - 0x89, 0xda, 0x8b, 0x5c, 0x04, 0x8b, 0x47, 0x06, 0x3d, 0x01, 0x00, 0x74, - 0x0c, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x72, 0x00, 0xc7, 0x47, 0x06, 0x01, - 0x00, 0x8b, 0x44, 0x06, 0x30, 0xe4, 0x8b, 0x5c, 0x04, 0x24, 0x30, 0x80, - 0x64, 0x06, 0xcf, 0x89, 0x46, 0xfc, 0x83, 0x7f, 0x04, 0x00, 0x75, 0x05, - 0x89, 0xf0, 0xe8, 0x78, 0x0d, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xf6, 0x44, - 0x07, 0x04, 0x74, 0x0d, 0x80, 0x64, 0x07, 0xfa, 0xc7, 0x46, 0xfe, 0x01, - 0x00, 0x80, 0x4c, 0x07, 0x01, 0xb9, 0x4a, 0x22, 0x89, 0xd3, 0x89, 0xf0, - 0x89, 0xfa, 0xe8, 0xc0, 0x0d, 0x89, 0xc2, 0x83, 0x7e, 0xfe, 0x00, 0x74, - 0x0d, 0x80, 0x64, 0x07, 0xfa, 0x89, 0xf0, 0x80, 0x4c, 0x07, 0x04, 0xe8, - 0x0b, 0x07, 0xf6, 0x44, 0x06, 0x20, 0x74, 0x03, 0xba, 0xff, 0xff, 0x8b, - 0x46, 0xfc, 0x09, 0x44, 0x06, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0x59, 0xc3, 0x31, 0xc0, 0xeb, 0xf5, 0xc7, 0x06, 0x76, 0x07, 0x01, 0x00, - 0xcb, 0xb8, 0xf2, 0x0a, 0xc3, 0x3d, 0x41, 0x00, 0x7c, 0x08, 0x3d, 0x5a, - 0x00, 0x7f, 0x03, 0x05, 0x20, 0x00, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, - 0x83, 0xec, 0x0a, 0x89, 0xc6, 0x89, 0x56, 0xfc, 0x89, 0x5e, 0xf8, 0x89, - 0xcf, 0xc7, 0x46, 0xf6, 0xff, 0xff, 0x80, 0x3c, 0x20, 0x75, 0x03, 0x46, - 0xeb, 0xf8, 0x8b, 0x46, 0xfc, 0x25, 0x83, 0x00, 0x8d, 0x5e, 0xf6, 0x89, - 0xc2, 0x89, 0x46, 0xfa, 0x0b, 0x56, 0xf8, 0x89, 0xf0, 0xe8, 0xac, 0x18, - 0x85, 0xc0, 0x75, 0x09, 0x8b, 0x46, 0xf6, 0x3b, 0x06, 0xae, 0x07, 0x73, - 0x50, 0xf6, 0x46, 0xfc, 0x03, 0x74, 0x35, 0x8b, 0x46, 0xf6, 0x3d, 0xff, - 0xff, 0x74, 0x2d, 0xe8, 0xce, 0x18, 0x85, 0xc0, 0x75, 0x26, 0xf6, 0x46, - 0xfd, 0x04, 0x74, 0x06, 0xf6, 0x46, 0xfc, 0x20, 0x75, 0x45, 0xf6, 0x46, - 0xfc, 0x40, 0x74, 0x14, 0x8d, 0x56, 0xfe, 0x8b, 0x5e, 0xf6, 0x31, 0xc9, - 0xb4, 0x40, 0xcd, 0x21, 0x19, 0xd2, 0x89, 0xc1, 0x85, 0xd2, 0x7c, 0x42, - 0x83, 0x7e, 0xf6, 0xff, 0x75, 0x4c, 0xf6, 0x46, 0xfc, 0x20, 0x75, 0x48, - 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x89, 0xc3, 0xb4, - 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0xe8, 0x51, 0xff, 0x89, 0xc6, 0xb8, 0xff, - 0xff, 0xc7, 0x04, 0x0b, 0x00, 0xeb, 0xe4, 0x8b, 0x5e, 0xf6, 0xb4, 0x3e, - 0xcd, 0x21, 0x19, 0xd2, 0xe8, 0x3a, 0xff, 0x89, 0xc6, 0xb8, 0xff, 0xff, - 0xc7, 0x04, 0x07, 0x00, 0xeb, 0xcd, 0x8b, 0x5e, 0xf6, 0xb4, 0x3e, 0xcd, - 0x21, 0x19, 0xd2, 0x89, 0xc8, 0xe8, 0x7c, 0x18, 0xeb, 0xbd, 0xeb, 0x4d, - 0xe8, 0xdf, 0x18, 0x89, 0xc3, 0x8b, 0x07, 0x3d, 0x02, 0x00, 0x75, 0xac, - 0x01, 0x05, 0x8b, 0x1d, 0x8b, 0x47, 0xfe, 0xc7, 0x05, 0x00, 0x00, 0x85, - 0xc0, 0x75, 0x03, 0xb8, 0x80, 0x01, 0x8b, 0x16, 0xee, 0x07, 0xf7, 0xd2, - 0x21, 0xd0, 0x31, 0xd2, 0xa8, 0x80, 0x75, 0x03, 0xba, 0x01, 0x00, 0x8d, - 0x5e, 0xf6, 0x89, 0xf0, 0xe8, 0xaf, 0x18, 0x85, 0xc0, 0x74, 0x03, 0xe9, - 0x7a, 0xff, 0x8b, 0x46, 0xf6, 0x3b, 0x06, 0xae, 0x07, 0x73, 0x63, 0x83, - 0x7e, 0xf8, 0x00, 0x75, 0x68, 0x8b, 0x46, 0xf6, 0xe8, 0xd1, 0x17, 0x24, - 0x3c, 0x89, 0xc2, 0x8b, 0x46, 0xf6, 0xe8, 0xf3, 0x17, 0x85, 0xc0, 0x74, - 0x03, 0x80, 0xce, 0x20, 0x80, 0x66, 0xfa, 0x7f, 0x83, 0x7e, 0xfa, 0x02, - 0x75, 0x03, 0x80, 0xca, 0x03, 0x83, 0x7e, 0xfa, 0x00, 0x75, 0x03, 0x80, - 0xca, 0x01, 0x83, 0x7e, 0xfa, 0x01, 0x75, 0x03, 0x80, 0xca, 0x02, 0xf6, - 0x46, 0xfc, 0x10, 0x74, 0x03, 0x80, 0xca, 0x80, 0x89, 0xd0, 0x0c, 0x40, - 0xf6, 0x46, 0xfd, 0x03, 0x74, 0x46, 0xf6, 0x46, 0xfd, 0x02, 0x74, 0x02, - 0x89, 0xc2, 0x8b, 0x46, 0xf6, 0xe8, 0x06, 0x19, 0x8b, 0x46, 0xf6, 0xe9, - 0x11, 0xff, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0xe9, 0x14, - 0xff, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7d, - 0x03, 0xe9, 0x35, 0xff, 0x8b, 0x56, 0xfa, 0x8d, 0x5e, 0xf6, 0x89, 0xf0, - 0x0b, 0x56, 0xf8, 0xe8, 0x3e, 0x17, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x74, - 0xff, 0xe9, 0xdc, 0xfe, 0x81, 0x3e, 0x78, 0x07, 0x00, 0x02, 0x75, 0xba, - 0xeb, 0xb6, 0x53, 0x55, 0x89, 0xe5, 0x8d, 0x5e, 0x0a, 0x8b, 0x07, 0x50, - 0x31, 0xc0, 0x50, 0xff, 0x76, 0x08, 0xff, 0x76, 0x06, 0x83, 0xc3, 0x02, - 0xe8, 0x06, 0x00, 0x83, 0xc4, 0x08, 0x5d, 0x5b, 0xc3, 0x53, 0x51, 0x52, - 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x8d, 0x46, 0x10, 0x8d, 0x4e, 0xfe, - 0x8b, 0x5e, 0x0e, 0x8b, 0x56, 0x0c, 0x89, 0x46, 0xfe, 0x8b, 0x46, 0x0a, - 0xe8, 0x0c, 0xfe, 0x89, 0xec, 0x5d, 0x5a, 0x59, 0x5b, 0xc3, 0x51, 0x56, - 0x57, 0x89, 0xc1, 0x89, 0xd6, 0x8b, 0x47, 0x02, 0x99, 0x39, 0xd6, 0x7c, - 0x06, 0x75, 0x17, 0x39, 0xc1, 0x77, 0x13, 0x8b, 0x7f, 0x04, 0x8b, 0x45, - 0x04, 0x2b, 0x07, 0x99, 0x39, 0xd6, 0x7f, 0x0d, 0x75, 0x04, 0x39, 0xc1, - 0x73, 0x07, 0xb8, 0x01, 0x00, 0x5f, 0x5e, 0x59, 0xc3, 0x80, 0x67, 0x06, - 0xef, 0x01, 0x0f, 0x31, 0xc0, 0x29, 0x4f, 0x02, 0xeb, 0xef, 0x53, 0x56, - 0x89, 0xc3, 0x8b, 0x77, 0x04, 0x80, 0x67, 0x06, 0xef, 0x8b, 0x74, 0x04, - 0xc7, 0x47, 0x02, 0x00, 0x00, 0x89, 0x37, 0x5e, 0x5b, 0xc3, 0x56, 0x57, - 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x89, 0xc6, 0x89, 0xdf, 0x89, 0x56, - 0xfe, 0xf6, 0x44, 0x06, 0x06, 0x74, 0x5e, 0xf6, 0x44, 0x07, 0x10, 0x75, - 0x3c, 0x83, 0xfa, 0x01, 0x75, 0x08, 0x8b, 0x44, 0x02, 0x99, 0x29, 0xc7, - 0x19, 0xd1, 0x8b, 0x5c, 0x04, 0x8b, 0x47, 0x04, 0xc7, 0x44, 0x02, 0x00, - 0x00, 0x89, 0x04, 0x8b, 0x56, 0xfe, 0x89, 0xfb, 0x8b, 0x44, 0x08, 0x80, - 0x64, 0x06, 0xeb, 0xe8, 0x39, 0x18, 0x83, 0xfa, 0xff, 0x75, 0x28, 0x3d, - 0xff, 0xff, 0x75, 0x23, 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0xc3, 0xe8, 0x2d, 0x04, 0x85, 0xc0, 0x74, 0xd7, 0x85, 0xd2, 0x75, 0xec, - 0x85, 0xc9, 0x7d, 0xe8, 0xe8, 0x36, 0xfd, 0x89, 0xc6, 0xc7, 0x04, 0x09, - 0x00, 0xeb, 0xdd, 0xeb, 0x57, 0x83, 0xfa, 0x02, 0x74, 0x56, 0x83, 0xfa, - 0x01, 0x74, 0x55, 0x85, 0xd2, 0x75, 0x4f, 0x8b, 0x44, 0x08, 0xe8, 0x21, - 0x18, 0x89, 0x46, 0xf6, 0x8b, 0x44, 0x02, 0x89, 0xd3, 0x99, 0x89, 0x56, - 0xf8, 0x8b, 0x56, 0xf6, 0x29, 0xc2, 0x89, 0xd0, 0x89, 0xfa, 0x1b, 0x5e, - 0xf8, 0x29, 0xc2, 0x89, 0xd0, 0x89, 0xca, 0x19, 0xda, 0x89, 0xf3, 0xe8, - 0x00, 0xff, 0x85, 0xc0, 0x74, 0x1a, 0x8b, 0x56, 0xfe, 0x89, 0xfb, 0x8b, - 0x44, 0x08, 0xe8, 0xc2, 0x17, 0x83, 0xfa, 0xff, 0x75, 0x05, 0x3d, 0xff, - 0xff, 0x74, 0x89, 0x89, 0xf0, 0xe8, 0x1e, 0xff, 0x31, 0xc0, 0xeb, 0x83, - 0xeb, 0x29, 0xeb, 0x30, 0x8b, 0x44, 0x02, 0x99, 0x89, 0xf3, 0x89, 0x46, - 0xfa, 0x89, 0x56, 0xfc, 0x89, 0xf8, 0x89, 0xca, 0xe8, 0xc7, 0xfe, 0x85, - 0xc0, 0x74, 0xe1, 0x8b, 0x56, 0xfe, 0x89, 0xfb, 0x8b, 0x44, 0x08, 0x2b, - 0x5e, 0xfa, 0x1b, 0x4e, 0xfc, 0xeb, 0xbf, 0xe8, 0xec, 0xfe, 0x8b, 0x44, - 0x08, 0xe9, 0x3f, 0xff, 0xe8, 0x9a, 0xfc, 0x89, 0xc6, 0xb8, 0xff, 0xff, - 0xc7, 0x04, 0x09, 0x00, 0xe9, 0x40, 0xff, 0x53, 0x89, 0xc3, 0xf6, 0x47, - 0x07, 0x20, 0x74, 0x02, 0x5b, 0xc3, 0x8b, 0x47, 0x08, 0xe8, 0xb0, 0x15, - 0x85, 0xc0, 0x74, 0xf4, 0x80, 0x4f, 0x07, 0x20, 0xf6, 0x47, 0x07, 0x07, - 0x75, 0xea, 0x80, 0x4f, 0x07, 0x02, 0x5b, 0xc3, 0x53, 0x56, 0xbe, 0xbc, - 0x0a, 0x8b, 0x1c, 0x85, 0xdb, 0x74, 0x16, 0x3b, 0x47, 0x02, 0x74, 0x04, - 0x89, 0xde, 0xeb, 0xf1, 0x8b, 0x07, 0x89, 0x04, 0xa1, 0xbe, 0x0a, 0x89, - 0x1e, 0xbe, 0x0a, 0x89, 0x07, 0x5e, 0x5b, 0xc3, 0x53, 0x8b, 0x1e, 0xbe, - 0x0a, 0x85, 0xdb, 0x75, 0x02, 0x5b, 0xc3, 0x8b, 0x07, 0xa3, 0xbe, 0x0a, - 0x89, 0xd8, 0xe8, 0x0b, 0xe7, 0xeb, 0xea, 0x53, 0x51, 0x52, 0x56, 0x57, - 0x8b, 0x36, 0xbe, 0x0a, 0x85, 0xf6, 0x75, 0x14, 0xbb, 0x24, 0x06, 0x81, - 0xfb, 0x3c, 0x07, 0x73, 0x55, 0xf6, 0x47, 0x06, 0x03, 0x74, 0x3f, 0x83, - 0xc3, 0x0e, 0xeb, 0xef, 0x8b, 0x04, 0x8b, 0x5c, 0x02, 0xa3, 0xbe, 0x0a, - 0x8b, 0x57, 0x06, 0xb9, 0x0e, 0x00, 0x89, 0xdf, 0x30, 0xc0, 0x57, 0x1e, - 0x07, 0x8a, 0xe0, 0xd1, 0xe9, 0xf3, 0xab, 0x13, 0xc9, 0xf3, 0xaa, 0x5f, - 0x89, 0x57, 0x06, 0x89, 0x5c, 0x02, 0xa1, 0xbc, 0x0a, 0x89, 0x77, 0x04, - 0x89, 0x36, 0xbc, 0x0a, 0x89, 0x04, 0x89, 0xd8, 0x5f, 0x5e, 0x5a, 0x59, - 0x5b, 0xc3, 0xb8, 0x0c, 0x00, 0xe8, 0xef, 0xe5, 0x89, 0xc6, 0x85, 0xc0, - 0x74, 0x18, 0x31, 0xd2, 0xeb, 0xc1, 0xb8, 0x1a, 0x00, 0xe8, 0xdf, 0xe5, - 0x89, 0xc6, 0x85, 0xc0, 0x74, 0x08, 0xba, 0x00, 0x40, 0x8d, 0x5c, 0x0c, - 0xeb, 0xad, 0xe8, 0xac, 0xfb, 0x89, 0xc3, 0xc7, 0x07, 0x05, 0x00, 0x31, - 0xc3, 0xeb, 0xc7, 0x53, 0x56, 0x57, 0x89, 0xc3, 0x8b, 0x37, 0x8b, 0x7f, - 0x0a, 0x3b, 0x7c, 0x02, 0x73, 0x10, 0x8b, 0x3c, 0x8d, 0x45, 0x01, 0x89, - 0x04, 0x88, 0x15, 0xff, 0x47, 0x0a, 0x5f, 0x5e, 0x5b, 0xc3, 0xc7, 0x44, - 0x04, 0xff, 0xff, 0xeb, 0xf5, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, - 0x06, 0x89, 0xc7, 0x89, 0xd6, 0x89, 0xda, 0x89, 0xcb, 0xc7, 0x46, 0xfe, - 0x00, 0x00, 0xb9, 0x57, 0x27, 0x89, 0x46, 0xfa, 0x8d, 0x46, 0xfa, 0x89, - 0x76, 0xfc, 0xe8, 0xe0, 0x08, 0x89, 0xc2, 0x39, 0xf0, 0x72, 0x0e, 0x83, - 0x7e, 0xfe, 0x00, 0x75, 0x0f, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0xc3, 0x01, 0xc7, 0xc6, 0x05, 0x00, 0xeb, 0xeb, 0xb8, 0xff, 0xff, 0xeb, - 0xee, 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x8d, 0x46, - 0x10, 0x8d, 0x4e, 0xfe, 0x8b, 0x5e, 0x0e, 0x8b, 0x56, 0x0c, 0x89, 0x46, - 0xfe, 0x8b, 0x46, 0x0a, 0xe8, 0x9e, 0xff, 0x89, 0xec, 0x5d, 0x5a, 0x59, - 0x5b, 0xc3, 0x80, 0x3e, 0x7a, 0x07, 0x00, 0x75, 0x03, 0x31, 0xc0, 0xc3, + 0x30, 0x30, 0x32, 0x2e, 0x00, 0x50, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x58, + 0xc3, 0xcb, 0xcb, 0x00, 0x51, 0x57, 0x89, 0xc7, 0x8e, 0xc2, 0x83, 0xc9, + 0xff, 0x33, 0xc0, 0xf2, 0xae, 0xf7, 0xd1, 0x49, 0x89, 0xc8, 0x5f, 0x59, + 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xcf, 0x8b, 0x4e, 0x0a, 0x89, + 0xde, 0x8e, 0xdf, 0x8e, 0xc2, 0x89, 0xc7, 0x57, 0xd1, 0xe9, 0xf3, 0xa5, + 0x13, 0xc9, 0xf3, 0xa4, 0x5f, 0x5d, 0x5f, 0x5e, 0xca, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xde, 0xc7, 0x46, 0xfe, 0x00, 0x00, + 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x6c, 0x00, 0x89, 0xc7, 0x83, 0xc7, 0x03, + 0x83, 0xe7, 0xfe, 0x39, 0xc7, 0x72, 0x60, 0x8e, 0xda, 0x8b, 0x44, 0x0a, + 0x83, 0xff, 0x06, 0x73, 0x03, 0xbf, 0x06, 0x00, 0x39, 0xc7, 0x77, 0x4f, + 0x8e, 0xda, 0x8b, 0x4c, 0x08, 0x8b, 0x5c, 0x06, 0x39, 0xcf, 0x76, 0x4f, + 0x8e, 0xda, 0x8b, 0x07, 0x39, 0xc7, 0x77, 0x4e, 0x89, 0x4c, 0x08, 0x29, + 0xf8, 0xff, 0x44, 0x0c, 0x3d, 0x06, 0x00, 0x72, 0x5d, 0x89, 0xd9, 0x01, + 0xf9, 0x89, 0x4c, 0x06, 0x89, 0xce, 0x89, 0x04, 0x89, 0x3f, 0x89, 0xcf, + 0x8b, 0x77, 0x02, 0x89, 0x75, 0x02, 0x8b, 0x47, 0x04, 0x89, 0x45, 0x04, + 0x89, 0x4c, 0x04, 0x89, 0xc6, 0x89, 0x4c, 0x02, 0x8e, 0xda, 0x80, 0x0f, + 0x01, 0x83, 0xc3, 0x02, 0x89, 0x5e, 0xfe, 0x8b, 0x56, 0xfe, 0x89, 0xd0, + 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xcb, 0x8b, 0x5c, 0x14, 0x31, 0xc9, + 0xeb, 0xaa, 0x39, 0xc1, 0x73, 0x02, 0x89, 0xc1, 0x89, 0xf0, 0x8e, 0xda, + 0x05, 0x10, 0x00, 0x8b, 0x5f, 0x04, 0x39, 0xc3, 0x75, 0x96, 0x8b, 0x56, + 0xfe, 0x89, 0x4c, 0x0a, 0xeb, 0xd4, 0xff, 0x4c, 0x0e, 0x8b, 0x7f, 0x02, + 0x89, 0x7c, 0x06, 0x8b, 0x77, 0x04, 0x89, 0x75, 0x04, 0x89, 0x7c, 0x02, + 0xeb, 0xb2, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, + 0xd1, 0x89, 0x5e, 0xfe, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x84, 0x00, 0x89, + 0xc6, 0x8e, 0xda, 0x83, 0xee, 0x02, 0xf6, 0x04, 0x01, 0x74, 0xf1, 0x8b, + 0x04, 0x89, 0xf3, 0x24, 0xfe, 0x01, 0xc3, 0xf6, 0x07, 0x01, 0x74, 0x03, + 0xe9, 0x7c, 0x00, 0x03, 0x07, 0x8b, 0x7e, 0xfe, 0x89, 0x04, 0x3b, 0x5d, + 0x06, 0x75, 0x03, 0x89, 0x75, 0x06, 0x8e, 0xd9, 0x8b, 0x7f, 0x02, 0x8b, + 0x5f, 0x04, 0x89, 0x5d, 0x04, 0x89, 0x7f, 0x02, 0x8b, 0x7e, 0xfe, 0xff, + 0x4d, 0x0e, 0x8e, 0xd9, 0x8b, 0x7f, 0x02, 0x89, 0xfa, 0x8b, 0x04, 0x03, + 0x15, 0x89, 0x7e, 0xfc, 0x39, 0xd6, 0x75, 0x3a, 0x89, 0xfb, 0x03, 0x07, + 0x89, 0x07, 0x8b, 0x5e, 0xfe, 0x3b, 0x57, 0x06, 0x75, 0x03, 0x89, 0x7f, + 0x06, 0x8b, 0x76, 0xfc, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0xff, 0x4f, 0x0c, + 0x3b, 0x77, 0x06, 0x73, 0x08, 0x3b, 0x47, 0x08, 0x76, 0x03, 0x89, 0x47, + 0x08, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0x3b, 0x47, 0x0a, 0x77, 0x0a, 0x89, + 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xcb, 0xe9, 0xbc, 0x00, 0x89, 0x47, 0x0a, + 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xcb, 0x8b, 0x5e, 0xfe, 0x89, 0x04, + 0x8b, 0x5f, 0x06, 0x39, 0xde, 0x72, 0x03, 0xe9, 0x6c, 0x00, 0x3b, 0x77, + 0x02, 0x77, 0x93, 0x8b, 0x5e, 0xfe, 0x8b, 0x5f, 0x14, 0x39, 0xde, 0x72, + 0x89, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0x8b, 0x5f, 0x0e, 0x89, 0xd8, 0x8b, + 0x7e, 0xfe, 0x40, 0x31, 0xd2, 0x89, 0x46, 0xfa, 0x8b, 0x45, 0x0c, 0xf7, + 0x76, 0xfa, 0x39, 0xd8, 0x73, 0x18, 0x8b, 0x55, 0x0c, 0x29, 0xda, 0xd1, + 0xe0, 0x39, 0xd3, 0x73, 0x4e, 0x8e, 0xd9, 0x8b, 0x1c, 0x8e, 0xd9, 0x01, + 0xf3, 0x83, 0x3f, 0xff, 0x75, 0x46, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0x8b, + 0x5f, 0x06, 0x39, 0xde, 0x72, 0x4b, 0x8e, 0xd9, 0x39, 0xde, 0x73, 0x03, + 0xe9, 0x3f, 0xff, 0x8b, 0x5f, 0x04, 0x39, 0xde, 0x72, 0xf6, 0x8b, 0x5f, + 0x04, 0x39, 0xde, 0x72, 0xef, 0x8b, 0x5f, 0x04, 0xeb, 0xe6, 0x8b, 0x5f, + 0x04, 0x39, 0xde, 0x72, 0xe3, 0x8b, 0x7e, 0xfe, 0x83, 0xc7, 0x10, 0x8b, + 0x45, 0x02, 0x89, 0xfb, 0x39, 0xc6, 0x76, 0x8d, 0xe9, 0x13, 0xff, 0xb8, + 0xff, 0xff, 0xeb, 0xad, 0xf6, 0x07, 0x01, 0x74, 0xc7, 0x8b, 0x17, 0x80, + 0xe2, 0xfe, 0x01, 0xd3, 0x48, 0x74, 0xab, 0xeb, 0xa4, 0x8b, 0x5e, 0xfe, + 0x8b, 0x5f, 0x14, 0xeb, 0xad, 0x8b, 0x7e, 0xfe, 0xff, 0x45, 0x0e, 0x8b, + 0x7e, 0xfc, 0x89, 0x5c, 0x04, 0x89, 0x7c, 0x02, 0x89, 0x75, 0x04, 0x89, + 0x77, 0x02, 0xe9, 0x03, 0xff, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc6, 0xb8, + 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x4c, 0x08, 0x85, 0xc0, 0x75, 0x03, 0xe9, + 0xb1, 0x00, 0x8e, 0xde, 0x31, 0xff, 0x8b, 0x3d, 0x85, 0xff, 0x75, 0x03, + 0xe9, 0xa9, 0x00, 0x83, 0xc2, 0x02, 0x83, 0xfa, 0x02, 0x73, 0x03, 0xba, + 0xff, 0xff, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x4e, 0x08, 0x39, 0xc2, + 0x73, 0x02, 0x89, 0xc2, 0xb1, 0x04, 0x83, 0xc2, 0x0f, 0xd3, 0xea, 0x85, + 0xd2, 0x75, 0x03, 0xba, 0x00, 0x10, 0xb1, 0x04, 0x89, 0xf8, 0xd3, 0xe8, + 0x01, 0xc2, 0x81, 0xfa, 0x00, 0x10, 0x76, 0x03, 0xba, 0x00, 0x10, 0x89, + 0xd3, 0x8e, 0xc6, 0xb4, 0x4a, 0xcd, 0x21, 0x19, 0xdb, 0x85, 0xdb, 0x7c, + 0x63, 0xb1, 0x04, 0x8e, 0xde, 0x31, 0xdb, 0xd3, 0xe2, 0x89, 0x17, 0x8b, + 0x5f, 0x12, 0x8b, 0x07, 0x83, 0xef, 0x04, 0x01, 0xd8, 0x39, 0xf8, 0x74, + 0x1a, 0x89, 0x5d, 0x02, 0x8b, 0x47, 0x04, 0x89, 0x45, 0x04, 0x89, 0x7f, + 0x04, 0x31, 0xdb, 0x31, 0xc0, 0x89, 0x7f, 0x12, 0x89, 0xfb, 0x89, 0xc7, + 0xff, 0x45, 0x0e, 0x89, 0xd0, 0x29, 0xd8, 0x8e, 0xde, 0x2d, 0x04, 0x00, + 0x31, 0xff, 0x89, 0x07, 0x8b, 0x45, 0x0a, 0x3b, 0x07, 0x73, 0x05, 0x8b, + 0x07, 0x89, 0x45, 0x0a, 0x89, 0xd3, 0x8e, 0xde, 0x83, 0xeb, 0x04, 0xc7, + 0x47, 0x02, 0x00, 0x00, 0xb8, 0x01, 0x00, 0xc7, 0x07, 0xff, 0xff, 0x5f, + 0x5e, 0x59, 0x5b, 0xcb, 0x31, 0xc0, 0xeb, 0xf7, 0x53, 0x51, 0x52, 0x56, + 0xba, 0x75, 0x07, 0x8e, 0xda, 0x83, 0x3e, 0x4c, 0x08, 0x00, 0x75, 0x03, + 0xe9, 0x88, 0x00, 0x3d, 0xe0, 0xff, 0x77, 0xf8, 0x05, 0x1c, 0x00, 0x3b, + 0x06, 0x4e, 0x08, 0x73, 0x03, 0xa1, 0x4e, 0x08, 0x89, 0xc2, 0xb1, 0x04, + 0x83, 0xc2, 0x0f, 0xd3, 0xea, 0x85, 0xd2, 0x75, 0x03, 0xba, 0x00, 0x10, + 0x89, 0xd3, 0xb4, 0x48, 0xcd, 0x21, 0x19, 0xdb, 0x85, 0xdb, 0x7c, 0x5b, + 0x8e, 0xd8, 0x31, 0xdb, 0xc7, 0x47, 0x06, 0x16, 0x00, 0xc7, 0x47, 0x0e, + 0x01, 0x00, 0xc7, 0x47, 0x12, 0x16, 0x00, 0xc7, 0x47, 0x14, 0x16, 0x00, + 0x89, 0x5f, 0x02, 0x89, 0x5f, 0x04, 0x89, 0x5f, 0x08, 0xb1, 0x04, 0x89, + 0x5f, 0x0c, 0xd3, 0xe2, 0x89, 0x5f, 0x10, 0x89, 0x17, 0x89, 0xd3, 0x31, + 0xf6, 0x83, 0xc3, 0xe6, 0x89, 0x5c, 0x0a, 0xbe, 0x16, 0x00, 0x89, 0x1c, + 0x89, 0xf3, 0xc7, 0x47, 0x02, 0x10, 0x00, 0xc7, 0x47, 0x04, 0x10, 0x00, + 0x89, 0xd3, 0x83, 0xeb, 0x04, 0xc7, 0x47, 0x02, 0x00, 0x00, 0xc7, 0x07, + 0xff, 0xff, 0x5e, 0x5a, 0x59, 0x5b, 0xcb, 0x31, 0xc0, 0xeb, 0xf7, 0x31, + 0xc0, 0xcb, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x04, 0x89, 0xc7, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x68, 0x00, 0x3d, 0xea, + 0xff, 0x77, 0x63, 0x05, 0x03, 0x00, 0x24, 0xfe, 0x89, 0x46, 0xfc, 0x3d, + 0x06, 0x00, 0x72, 0x61, 0xc6, 0x46, 0xfe, 0x00, 0x31, 0xd2, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0x8b, 0x46, 0xfc, 0x3b, 0x06, 0x14, 0x08, 0x76, 0x5e, + 0x8b, 0x36, 0x12, 0x08, 0x85, 0xf6, 0x74, 0x4c, 0x85, 0xf6, 0x74, 0x63, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x4c, 0x0a, 0x89, 0x36, 0x12, 0x08, + 0x39, 0xf9, 0x72, 0x11, 0x89, 0xf3, 0x89, 0xc2, 0x89, 0xf8, 0x0e, 0xe8, + 0xf2, 0xfb, 0x90, 0x89, 0xc2, 0x85, 0xc0, 0x75, 0x6c, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0x3b, 0x0e, 0x14, 0x08, 0x77, 0x31, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0x8b, 0x74, 0x04, 0xeb, 0xc6, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0x5a, 0x59, 0x5b, 0xcb, 0xc7, 0x46, 0xfc, 0x06, 0x00, 0xeb, 0x98, + 0x89, 0x36, 0x14, 0x08, 0x8b, 0x36, 0x10, 0x08, 0xeb, 0xaa, 0x31, 0xc0, + 0x8b, 0x36, 0x10, 0x08, 0xa3, 0x14, 0x08, 0xeb, 0x9f, 0x89, 0x0e, 0x14, + 0x08, 0xeb, 0xc9, 0x80, 0x7e, 0xfe, 0x00, 0x74, 0x12, 0x89, 0xf8, 0x0e, + 0x3e, 0xe8, 0xaa, 0x14, 0x85, 0xc0, 0x74, 0x19, 0xc6, 0x46, 0xfe, 0x00, + 0xe9, 0x6b, 0xff, 0x89, 0xf8, 0x0e, 0x3e, 0xe8, 0x92, 0x15, 0x85, 0xc0, + 0x74, 0xe3, 0xc6, 0x46, 0xfe, 0x01, 0xe9, 0x59, 0xff, 0x89, 0xd0, 0xeb, + 0xa7, 0xcb, 0x53, 0x51, 0x52, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x16, + 0x20, 0x08, 0xb1, 0x04, 0x83, 0xc2, 0x10, 0xd3, 0xea, 0x85, 0xd2, 0x74, + 0x0e, 0x80, 0x3e, 0x26, 0x08, 0x01, 0x75, 0x0b, 0xb8, 0x00, 0x10, 0x39, + 0xd0, 0x77, 0x21, 0x5a, 0x59, 0x5b, 0xcb, 0x8e, 0x06, 0x22, 0x08, 0x31, + 0xdb, 0x4b, 0xb4, 0x4a, 0xcd, 0x21, 0x8c, 0xd8, 0x2b, 0x06, 0x22, 0x08, + 0x29, 0xc3, 0x89, 0xd8, 0x81, 0xfb, 0x00, 0x10, 0x76, 0xdd, 0xeb, 0xd8, + 0x29, 0xd0, 0xba, 0x75, 0x07, 0xb1, 0x04, 0x8e, 0xda, 0xd3, 0xe0, 0x8b, + 0x1e, 0x20, 0x08, 0x89, 0xc2, 0x30, 0xff, 0x83, 0xc2, 0x10, 0x80, 0xe3, + 0x0f, 0x29, 0xda, 0x0e, 0x3e, 0xe8, 0xa4, 0x14, 0x01, 0xd0, 0x2d, 0x08, + 0x00, 0x0e, 0x3e, 0xe8, 0xb8, 0xfe, 0x0e, 0xe8, 0x03, 0x00, 0x90, 0xeb, + 0xae, 0x53, 0x52, 0x56, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0xd7, 0x00, 0xba, + 0x75, 0x07, 0x8e, 0xda, 0x8b, 0x36, 0xb6, 0x0d, 0x85, 0xf6, 0x74, 0x3e, + 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x5a, + 0xba, 0x75, 0x07, 0x8e, 0xda, 0x89, 0xf3, 0x8b, 0x74, 0x02, 0x85, 0xf6, + 0x74, 0x0c, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, + 0x72, 0x40, 0xba, 0x75, 0x07, 0x8e, 0xda, 0x8b, 0x77, 0x04, 0x85, 0xf6, + 0x74, 0x0c, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, + 0x72, 0x28, 0xba, 0x75, 0x07, 0x8e, 0xda, 0x8b, 0x36, 0x12, 0x08, 0x85, + 0xf6, 0x75, 0x20, 0xba, 0x75, 0x07, 0x8e, 0xda, 0x8b, 0x36, 0x10, 0x08, + 0x85, 0xf6, 0x74, 0x98, 0x39, 0xc6, 0x76, 0x0c, 0xba, 0x75, 0x07, 0x8e, + 0xda, 0x8b, 0x74, 0x04, 0xeb, 0xee, 0xeb, 0x41, 0xe9, 0x63, 0x00, 0x39, + 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x32, 0xba, + 0x75, 0x07, 0x8e, 0xda, 0x89, 0xf3, 0x8b, 0x74, 0x02, 0x85, 0xf6, 0x74, + 0x0c, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, + 0x18, 0xba, 0x75, 0x07, 0x8e, 0xda, 0x8b, 0x77, 0x04, 0x85, 0xf6, 0x74, + 0xae, 0x39, 0xc6, 0x77, 0xaa, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x73, + 0xa2, 0xba, 0x75, 0x07, 0x89, 0xf3, 0x0e, 0xe8, 0x00, 0xfb, 0x90, 0xb8, + 0x75, 0x07, 0x8e, 0xd8, 0x89, 0x36, 0xb6, 0x0d, 0x3b, 0x36, 0x12, 0x08, + 0x73, 0x08, 0xa1, 0x14, 0x08, 0x3b, 0x44, 0x0a, 0x72, 0x14, 0x5e, 0x5a, + 0x5b, 0xcb, 0xba, 0x75, 0x07, 0x8e, 0xda, 0x8b, 0x14, 0x01, 0xf2, 0x39, + 0xd0, 0x72, 0xce, 0xe9, 0x7e, 0xff, 0x8b, 0x44, 0x0a, 0xa3, 0x14, 0x08, + 0xeb, 0xe4, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x02, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xbe, 0x68, 0x06, 0x80, 0x26, 0x97, + 0x06, 0xf8, 0x89, 0xc1, 0x80, 0x0e, 0x97, 0x06, 0x04, 0x8e, 0xd9, 0x83, + 0x7c, 0x0a, 0x00, 0x75, 0x16, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x31, 0xc0, + 0xa3, 0x7a, 0x0d, 0xa3, 0x7c, 0x0d, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, + 0x59, 0x5b, 0xc3, 0xb8, 0x12, 0x00, 0x0e, 0xe8, 0x70, 0xfd, 0x90, 0x85, + 0xc0, 0x74, 0x63, 0xc7, 0x46, 0xfe, 0x75, 0x07, 0x89, 0xc7, 0x8e, 0x5e, + 0xfe, 0x89, 0x75, 0x04, 0xb8, 0x75, 0x07, 0x89, 0x4d, 0x06, 0x8e, 0xd8, + 0x8b, 0x16, 0x76, 0x0d, 0xa1, 0x78, 0x0d, 0x8e, 0x5e, 0xfe, 0x89, 0x45, + 0x02, 0xb8, 0x75, 0x07, 0x89, 0x15, 0x8e, 0xd8, 0x8b, 0x46, 0xfe, 0x89, + 0x3e, 0x76, 0x0d, 0xa3, 0x78, 0x0d, 0x8e, 0xd9, 0x89, 0x7c, 0x06, 0x89, + 0x44, 0x08, 0x8b, 0x7c, 0x06, 0x8e, 0xd8, 0xc7, 0x45, 0x08, 0x00, 0x00, + 0xc7, 0x45, 0x0a, 0x00, 0x00, 0x8e, 0xd9, 0xc5, 0x7c, 0x06, 0xc6, 0x45, + 0x10, 0x00, 0x8e, 0xd9, 0xc5, 0x7c, 0x06, 0x83, 0xc6, 0x12, 0xc7, 0x45, + 0x0c, 0x00, 0x00, 0xe9, 0x73, 0xff, 0xb8, 0x12, 0x00, 0x0e, 0x3e, 0xe8, + 0xff, 0xeb, 0x89, 0xc7, 0x89, 0x56, 0xfe, 0x85, 0xd2, 0x75, 0x93, 0x85, + 0xc0, 0x75, 0x8f, 0xbb, 0x01, 0x00, 0xb8, 0x50, 0x04, 0xba, 0x75, 0x07, + 0xe9, 0x9a, 0x0e, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x06, 0x89, 0xc3, 0xb1, 0x03, 0xd3, 0xe0, 0x01, 0xd8, 0xd1, 0xe0, + 0x05, 0x68, 0x06, 0x89, 0x46, 0xfa, 0xb8, 0x75, 0x07, 0x31, 0xff, 0x8e, + 0xd8, 0x31, 0xc9, 0x8b, 0x1e, 0x76, 0x0d, 0x8b, 0x16, 0x78, 0x0d, 0x85, + 0xd2, 0x75, 0x04, 0x85, 0xdb, 0x74, 0x42, 0x8e, 0xda, 0x8b, 0x07, 0x8b, + 0x77, 0x04, 0x89, 0x46, 0xfc, 0x8b, 0x47, 0x02, 0x8e, 0x5f, 0x06, 0x89, + 0x46, 0xfe, 0x8a, 0x44, 0x0b, 0xbb, 0x01, 0x00, 0xa8, 0x40, 0x74, 0x12, + 0x89, 0xf0, 0x8c, 0xda, 0xe8, 0xd4, 0xf3, 0x41, 0x09, 0xc7, 0x8b, 0x5e, + 0xfc, 0x8b, 0x56, 0xfe, 0xeb, 0xc9, 0xa8, 0x08, 0x75, 0xea, 0x3b, 0x76, + 0xfa, 0x72, 0xef, 0x81, 0xfe, 0xc2, 0x06, 0x73, 0xdf, 0x31, 0xdb, 0xeb, + 0xdb, 0x85, 0xff, 0x74, 0x0c, 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x89, 0xc8, 0xeb, 0xf3, 0xb8, 0x05, 0x00, + 0xe8, 0x70, 0xff, 0xcb, 0x31, 0xc0, 0xe8, 0x6a, 0xff, 0xe9, 0xa0, 0x05, + 0x51, 0x56, 0x89, 0xc6, 0x88, 0xd8, 0x8e, 0xda, 0x30, 0xe4, 0x8b, 0x1c, + 0x8b, 0x4c, 0x02, 0x0e, 0x3e, 0xe8, 0x99, 0x13, 0x8e, 0xda, 0xff, 0x44, + 0x0c, 0x5e, 0x59, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, + 0x89, 0xc6, 0x89, 0x56, 0xfe, 0x89, 0xdf, 0x8e, 0xda, 0xc5, 0x5c, 0x06, + 0x8b, 0x47, 0x0c, 0x3d, 0x01, 0x00, 0x74, 0x0c, 0x85, 0xc0, 0x74, 0x03, + 0xe9, 0x9c, 0x00, 0xc7, 0x47, 0x0c, 0x01, 0x00, 0x8e, 0x5e, 0xfe, 0x8b, + 0x44, 0x0a, 0x8b, 0x5c, 0x06, 0x30, 0xe4, 0x80, 0x64, 0x0a, 0xcf, 0x24, + 0x30, 0x8e, 0x5c, 0x08, 0x89, 0x46, 0xfa, 0x8b, 0x47, 0x0a, 0x8b, 0x57, + 0x08, 0x85, 0xc0, 0x75, 0x0c, 0x85, 0xd2, 0x75, 0x08, 0x8b, 0x56, 0xfe, + 0x89, 0xf0, 0xe8, 0x0b, 0x14, 0x8e, 0x5e, 0xfe, 0xc7, 0x46, 0xfc, 0x00, + 0x00, 0xf6, 0x44, 0x0b, 0x04, 0x74, 0x0d, 0x80, 0x64, 0x0b, 0xfa, 0xc7, + 0x46, 0xfc, 0x01, 0x00, 0x80, 0x4c, 0x0b, 0x01, 0xb8, 0xf0, 0x27, 0x50, + 0x8b, 0x56, 0xfe, 0xff, 0x76, 0x0a, 0x89, 0xfb, 0xff, 0x76, 0x08, 0x89, + 0xf0, 0x0e, 0x3e, 0xe8, 0xb3, 0x1f, 0x89, 0xc3, 0x83, 0x7e, 0xfc, 0x00, + 0x74, 0x12, 0x8e, 0x5e, 0xfe, 0x89, 0xf0, 0x80, 0x64, 0x0b, 0xfa, 0x8c, + 0xda, 0x80, 0x4c, 0x0b, 0x04, 0xe8, 0xeb, 0x09, 0x8e, 0x5e, 0xfe, 0xf6, + 0x44, 0x0a, 0x20, 0x74, 0x03, 0xbb, 0xff, 0xff, 0x8e, 0x5e, 0xfe, 0x8b, + 0x46, 0xfa, 0x09, 0x44, 0x0a, 0x89, 0xd8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0xc2, 0x04, 0x00, 0x31, 0xc0, 0xeb, 0xf4, 0xb8, 0xb8, 0x0d, 0xba, 0x75, + 0x07, 0xcb, 0x3d, 0x41, 0x00, 0x7c, 0x08, 0x3d, 0x5a, 0x00, 0x7f, 0x03, + 0x05, 0x20, 0x00, 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, + 0x89, 0xc6, 0x89, 0x56, 0xfc, 0x89, 0x5e, 0xfa, 0x89, 0xcf, 0xc7, 0x46, + 0xf6, 0xff, 0xff, 0x8e, 0x5e, 0xfc, 0x80, 0x3c, 0x20, 0x75, 0x03, 0x46, + 0xeb, 0xf8, 0x8b, 0x46, 0xfa, 0x8d, 0x56, 0xf6, 0x16, 0x30, 0xe4, 0x52, + 0x24, 0x83, 0x8c, 0xda, 0x89, 0x46, 0xf8, 0x89, 0xc3, 0x89, 0xf0, 0x09, + 0xfb, 0x0e, 0x3e, 0xe8, 0x57, 0x21, 0x85, 0xc0, 0x75, 0x0e, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0x8b, 0x46, 0xf6, 0x3b, 0x06, 0x50, 0x08, 0x73, 0x58, + 0xf6, 0x46, 0xfa, 0x03, 0x74, 0x3b, 0x8b, 0x46, 0xf6, 0x3d, 0xff, 0xff, + 0x74, 0x33, 0x0e, 0xe8, 0x9f, 0x21, 0x90, 0x85, 0xc0, 0x75, 0x2a, 0xf6, + 0x46, 0xfb, 0x04, 0x74, 0x06, 0xf6, 0x46, 0xfa, 0x20, 0x75, 0x4f, 0xf6, + 0x46, 0xfa, 0x40, 0x74, 0x18, 0x8d, 0x56, 0xfe, 0x8b, 0x5e, 0xf6, 0x8c, + 0xd0, 0x31, 0xc9, 0x8e, 0xd8, 0xb4, 0x40, 0xcd, 0x21, 0x19, 0xd2, 0x89, + 0xc1, 0x85, 0xd2, 0x7c, 0x4c, 0x83, 0x7e, 0xf6, 0xff, 0x75, 0x56, 0xf6, + 0x46, 0xfa, 0x20, 0x75, 0x52, 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0xc2, 0x04, 0x00, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, + 0x0e, 0xe8, 0x37, 0xff, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xff, 0xff, + 0xc7, 0x07, 0x0b, 0x00, 0xeb, 0xde, 0x8b, 0x5e, 0xf6, 0xb4, 0x3e, 0xcd, + 0x21, 0x19, 0xd2, 0x0e, 0x3e, 0xe8, 0x1b, 0xff, 0x89, 0xc3, 0x8e, 0xda, + 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x07, 0x00, 0xeb, 0xc3, 0x8b, 0x5e, 0xf6, + 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x89, 0xc8, 0xe8, 0x3c, 0x21, 0xeb, + 0xb3, 0xeb, 0x5e, 0x0e, 0x3e, 0xe8, 0xc9, 0x21, 0x89, 0xc3, 0x8e, 0xda, + 0x8b, 0x07, 0x3d, 0x02, 0x00, 0x75, 0x9e, 0x01, 0x46, 0x08, 0xc5, 0x5e, + 0x08, 0x8b, 0x47, 0xfe, 0x85, 0xc0, 0x75, 0x03, 0xb8, 0x80, 0x01, 0xba, + 0x75, 0x07, 0x8e, 0xda, 0x8b, 0x16, 0x92, 0x08, 0xf7, 0xd2, 0x21, 0xd0, + 0x31, 0xdb, 0xa8, 0x80, 0x75, 0x03, 0xbb, 0x01, 0x00, 0x8d, 0x56, 0xf6, + 0x16, 0x89, 0xf0, 0x52, 0x8b, 0x56, 0xfc, 0x0e, 0x3e, 0xe8, 0x90, 0x21, + 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x62, 0xff, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0x8b, 0x46, 0xf6, 0x3b, 0x06, 0x50, 0x08, 0x73, 0x65, 0x85, 0xff, 0x75, + 0x5f, 0x8b, 0x46, 0xf6, 0xe8, 0x66, 0x20, 0x24, 0x3c, 0x89, 0xc2, 0x8b, + 0x46, 0xf6, 0x0e, 0xe8, 0xa3, 0x20, 0x90, 0x85, 0xc0, 0x74, 0x03, 0x80, + 0xce, 0x20, 0x80, 0x66, 0xf8, 0x7f, 0x83, 0x7e, 0xf8, 0x02, 0x75, 0x03, + 0x80, 0xca, 0x03, 0x83, 0x7e, 0xf8, 0x00, 0x75, 0x03, 0x80, 0xca, 0x01, + 0x83, 0x7e, 0xf8, 0x01, 0x75, 0x03, 0x80, 0xca, 0x02, 0xf6, 0x46, 0xfa, + 0x10, 0x74, 0x03, 0x80, 0xca, 0x80, 0x89, 0xd0, 0x0c, 0x40, 0xf6, 0x46, + 0xfb, 0x03, 0x74, 0x4e, 0xf6, 0x46, 0xfb, 0x02, 0x74, 0x02, 0x89, 0xc2, + 0x8b, 0x46, 0xf6, 0xe8, 0x4d, 0x22, 0x8b, 0x46, 0xf6, 0xe9, 0xf4, 0xfe, + 0xeb, 0x0b, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0xe9, 0xf7, + 0xfe, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7d, + 0x03, 0xe9, 0x20, 0xff, 0x8d, 0x56, 0xf6, 0x8b, 0x5e, 0xf8, 0x16, 0x89, + 0xf0, 0x52, 0x09, 0xfb, 0x8b, 0x56, 0xfc, 0x0e, 0x3e, 0xe8, 0xb9, 0x1f, + 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x6a, 0xff, 0xe9, 0xb7, 0xfe, 0xbb, 0x75, + 0x07, 0x8e, 0xdb, 0x81, 0x3e, 0x18, 0x08, 0x00, 0x02, 0x75, 0xad, 0xeb, + 0xa9, 0x53, 0x55, 0x89, 0xe5, 0x8c, 0xd0, 0x8d, 0x5e, 0x0e, 0x8e, 0xd8, + 0x8b, 0x07, 0x50, 0x31, 0xc0, 0x50, 0xff, 0x76, 0x0c, 0xff, 0x76, 0x0a, + 0xff, 0x76, 0x08, 0x83, 0xc3, 0x02, 0x0e, 0xe8, 0x06, 0x00, 0x83, 0xc4, + 0x0a, 0x5d, 0x5b, 0xcb, 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0x8d, 0x56, + 0x14, 0x8b, 0x4e, 0x12, 0x8b, 0x5e, 0x10, 0x16, 0x8b, 0x46, 0x0c, 0x52, + 0x8b, 0x56, 0x0e, 0xe8, 0xca, 0xfd, 0x5d, 0x5a, 0x59, 0x5b, 0xcb, 0x56, + 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc6, 0x89, 0x56, 0xfe, + 0x8e, 0xd9, 0x8b, 0x47, 0x04, 0x99, 0x3b, 0x56, 0xfe, 0x7f, 0x06, 0x75, + 0x19, 0x39, 0xc6, 0x77, 0x15, 0xc4, 0x7f, 0x06, 0x26, 0x8b, 0x45, 0x08, + 0x2b, 0x07, 0x99, 0x3b, 0x56, 0xfe, 0x7c, 0x0f, 0x75, 0x04, 0x39, 0xc6, + 0x73, 0x09, 0xb8, 0x01, 0x00, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x80, + 0x67, 0x0a, 0xef, 0x01, 0x37, 0x31, 0xc0, 0x29, 0x77, 0x04, 0xeb, 0xed, + 0x53, 0x56, 0x89, 0xc3, 0x8e, 0xda, 0x80, 0x67, 0x0a, 0xef, 0xc4, 0x77, + 0x06, 0x26, 0x8b, 0x44, 0x08, 0x26, 0x8b, 0x74, 0x0a, 0xc7, 0x47, 0x04, + 0x00, 0x00, 0x89, 0x07, 0x89, 0x77, 0x02, 0x5e, 0x5b, 0xc3, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0x89, + 0x5e, 0xfc, 0x89, 0xcf, 0x8e, 0xda, 0xf6, 0x44, 0x0a, 0x06, 0x74, 0x5a, + 0xf6, 0x44, 0x0b, 0x10, 0x75, 0x56, 0x83, 0x7e, 0x0a, 0x01, 0x75, 0x09, + 0x8b, 0x44, 0x04, 0x99, 0x29, 0x46, 0xfc, 0x19, 0xd7, 0x8e, 0x5e, 0xfe, + 0xc5, 0x5c, 0x06, 0x8b, 0x47, 0x08, 0x8b, 0x57, 0x0a, 0x8e, 0x5e, 0xfe, + 0xc7, 0x44, 0x04, 0x00, 0x00, 0x89, 0x04, 0x89, 0x54, 0x02, 0x8e, 0x5e, + 0xfe, 0x8b, 0x56, 0x0a, 0x8b, 0x5e, 0xfc, 0x89, 0xf9, 0x8b, 0x44, 0x0c, + 0x80, 0x64, 0x0a, 0xeb, 0x0e, 0xe8, 0x47, 0x21, 0x90, 0x83, 0xfa, 0xff, + 0x75, 0x32, 0x3d, 0xff, 0xff, 0x75, 0x2d, 0xb8, 0xff, 0xff, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0xca, 0x02, 0x00, 0xeb, 0x23, 0xe8, 0x94, 0x06, 0x85, + 0xc0, 0x74, 0xcb, 0x83, 0x7e, 0x0a, 0x00, 0x75, 0xe6, 0x85, 0xc9, 0x7d, + 0xe2, 0x0e, 0x3e, 0xe8, 0xb9, 0xfc, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, + 0x09, 0x00, 0xeb, 0xd3, 0xe9, 0x70, 0x00, 0x8b, 0x46, 0x0a, 0x3d, 0x02, + 0x00, 0x74, 0x6d, 0x3d, 0x01, 0x00, 0x74, 0x6c, 0x85, 0xc0, 0x75, 0x66, + 0x8b, 0x44, 0x0c, 0x0e, 0x3e, 0xe8, 0x1e, 0x21, 0x8e, 0x5e, 0xfe, 0x89, + 0xc3, 0x8b, 0x44, 0x04, 0x89, 0x56, 0xf6, 0x99, 0x29, 0xc3, 0x89, 0xd8, + 0x8b, 0x5e, 0xf6, 0x19, 0xd3, 0x89, 0xda, 0x8b, 0x5e, 0xfc, 0x29, 0xc3, + 0x89, 0xd8, 0x89, 0xcb, 0x19, 0xd3, 0x8c, 0xd9, 0x89, 0xda, 0x89, 0xf3, + 0xe8, 0xb8, 0xfe, 0x85, 0xc0, 0x74, 0x28, 0x8e, 0x5e, 0xfe, 0x8b, 0x56, + 0x0a, 0x8b, 0x5e, 0xfc, 0x89, 0xf9, 0x8b, 0x44, 0x0c, 0x0e, 0x3e, 0xe8, + 0xb1, 0x20, 0x83, 0xfa, 0xff, 0x75, 0x08, 0x3d, 0xff, 0xff, 0x75, 0x03, + 0xe9, 0x68, 0xff, 0x8b, 0x56, 0xfe, 0x89, 0xf0, 0xe8, 0xd5, 0xfe, 0x31, + 0xc0, 0xe9, 0x5e, 0xff, 0xeb, 0x32, 0xeb, 0x41, 0x8b, 0x44, 0x04, 0x89, + 0xf3, 0x99, 0x8c, 0xd9, 0x89, 0x46, 0xf8, 0x89, 0x56, 0xfa, 0x8b, 0x46, + 0xfc, 0x89, 0xfa, 0xe8, 0x6d, 0xfe, 0x85, 0xc0, 0x74, 0xdd, 0x8b, 0x46, + 0xf8, 0x8e, 0x5e, 0xfe, 0x8b, 0x56, 0x0a, 0x89, 0xf9, 0x29, 0x46, 0xfc, + 0x8b, 0x5e, 0xfc, 0x1b, 0x4e, 0xfa, 0xeb, 0xaa, 0x89, 0xf0, 0xe8, 0x97, + 0xfe, 0x8e, 0x5e, 0xfe, 0x8b, 0x56, 0x0a, 0x8b, 0x44, 0x0c, 0xe9, 0x07, + 0xff, 0x0e, 0x3e, 0xe8, 0xed, 0xfb, 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xff, + 0xff, 0xc7, 0x07, 0x09, 0x00, 0xe9, 0x06, 0xff, 0x53, 0x89, 0xc3, 0x8e, + 0xda, 0xf6, 0x47, 0x0b, 0x20, 0x74, 0x02, 0x5b, 0xc3, 0x8b, 0x47, 0x0c, + 0x0e, 0xe8, 0xe1, 0x1d, 0x90, 0x85, 0xc0, 0x74, 0xf2, 0x8e, 0xda, 0x80, + 0x4f, 0x0b, 0x20, 0xf6, 0x47, 0x0b, 0x07, 0x75, 0xe6, 0x80, 0x4f, 0x0b, + 0x02, 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x02, 0x89, 0xc1, 0x89, 0xd7, 0xb8, 0x75, 0x07, 0xbe, 0x76, 0x0d, 0x8e, + 0xd8, 0x8b, 0x44, 0x02, 0x8b, 0x1c, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x75, + 0x04, 0x85, 0xdb, 0x74, 0x47, 0x8e, 0xc0, 0x26, 0x8b, 0x57, 0x06, 0x26, + 0x8b, 0x47, 0x04, 0x39, 0xfa, 0x75, 0x04, 0x39, 0xc8, 0x74, 0x07, 0x8e, + 0x5e, 0xfe, 0x89, 0xde, 0xeb, 0xd7, 0x26, 0x8b, 0x47, 0x02, 0x26, 0x8b, + 0x17, 0x89, 0x44, 0x02, 0xb8, 0x75, 0x07, 0x89, 0x14, 0x8e, 0xd8, 0xa1, + 0x7a, 0x0d, 0x8b, 0x16, 0x7c, 0x0d, 0x8e, 0x5e, 0xfe, 0x89, 0x07, 0xb8, + 0x75, 0x07, 0x89, 0x57, 0x02, 0x8e, 0xd8, 0x8c, 0xc0, 0x89, 0x1e, 0x7a, + 0x0d, 0xa3, 0x7c, 0x0d, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, + 0x53, 0x51, 0x52, 0x56, 0xb9, 0x75, 0x07, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0x8b, 0x36, 0x7c, 0x0d, 0x8b, 0x1e, 0x7a, 0x0d, 0x85, 0xf6, 0x75, 0x09, + 0x85, 0xdb, 0x75, 0x05, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x8e, 0xde, 0x8b, + 0x07, 0x8b, 0x57, 0x02, 0x8e, 0xd9, 0xa3, 0x7a, 0x0d, 0x89, 0x16, 0x7c, + 0x0d, 0x89, 0xd8, 0x89, 0xf2, 0x0e, 0x3e, 0xe8, 0x84, 0xe6, 0xeb, 0xcb, + 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0xa1, 0x7c, 0x0d, 0x8b, 0x3e, 0x7a, 0x0d, 0x89, 0x46, + 0xfc, 0x85, 0xc0, 0x75, 0x24, 0x85, 0xff, 0x75, 0x20, 0x8c, 0x5e, 0xfe, + 0xbe, 0x68, 0x06, 0x8e, 0x5e, 0xfe, 0x81, 0xfe, 0xd0, 0x07, 0x73, 0x0b, + 0xf6, 0x44, 0x0a, 0x03, 0x74, 0x08, 0x83, 0xc6, 0x12, 0xeb, 0xef, 0xe9, + 0xa8, 0x00, 0xe9, 0x89, 0x00, 0x8e, 0xd8, 0xbb, 0x75, 0x07, 0x8b, 0x05, + 0x8b, 0x55, 0x02, 0x8e, 0xdb, 0xa3, 0x7a, 0x0d, 0x89, 0x16, 0x7c, 0x0d, + 0x8e, 0x5e, 0xfc, 0x8b, 0x45, 0x06, 0x8b, 0x75, 0x04, 0x8e, 0xd8, 0x89, + 0x46, 0xfe, 0x8b, 0x44, 0x0a, 0x89, 0x46, 0xfa, 0xb9, 0x12, 0x00, 0x8b, + 0x56, 0xfe, 0x89, 0xf0, 0x31, 0xdb, 0x0e, 0xe8, 0x27, 0x1f, 0x90, 0x8e, + 0x5e, 0xfe, 0x8b, 0x46, 0xfa, 0x89, 0x44, 0x0a, 0x8e, 0x5e, 0xfc, 0x8b, + 0x46, 0xfe, 0x89, 0x75, 0x04, 0x89, 0x45, 0x06, 0x8b, 0x5d, 0x04, 0x8e, + 0xd8, 0x8b, 0x46, 0xfc, 0x89, 0x47, 0x08, 0xb8, 0x75, 0x07, 0x89, 0x7f, + 0x06, 0x8e, 0xd8, 0xa1, 0x76, 0x0d, 0x8b, 0x16, 0x78, 0x0d, 0x8e, 0x5e, + 0xfc, 0x89, 0x05, 0x89, 0x55, 0x02, 0xb8, 0x75, 0x07, 0x8b, 0x56, 0xfe, + 0x8e, 0xd8, 0x8b, 0x46, 0xfc, 0x89, 0x3e, 0x76, 0x0d, 0xa3, 0x78, 0x0d, + 0x89, 0xf0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xb8, 0x12, + 0x00, 0x0e, 0x3e, 0xe8, 0x9f, 0xe4, 0x89, 0xc7, 0x89, 0x56, 0xfc, 0x85, + 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x2a, 0xc7, 0x46, 0xfa, 0x00, 0x00, + 0xeb, 0x82, 0xb8, 0x24, 0x00, 0x0e, 0x3e, 0xe8, 0x83, 0xe4, 0x89, 0xc7, + 0x89, 0x56, 0xfc, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x0e, 0xc7, + 0x46, 0xfa, 0x00, 0x40, 0x89, 0x56, 0xfe, 0x8d, 0x75, 0x12, 0xe9, 0x5f, + 0xff, 0x0e, 0x3e, 0xe8, 0xf5, 0xf9, 0x89, 0xc3, 0x8e, 0xda, 0x31, 0xf6, + 0xc7, 0x07, 0x05, 0x00, 0x31, 0xd2, 0xeb, 0xa4, 0x51, 0x56, 0x57, 0x89, + 0xc6, 0x8e, 0xc2, 0x88, 0xd8, 0x26, 0xc5, 0x1c, 0x26, 0x8b, 0x7c, 0x0c, + 0x3b, 0x7f, 0x04, 0x73, 0x16, 0x8b, 0x3f, 0x8d, 0x55, 0x01, 0x8b, 0x4f, + 0x02, 0x89, 0x17, 0x8e, 0xd9, 0x88, 0x05, 0x26, 0xff, 0x44, 0x0c, 0x5f, + 0x5e, 0x59, 0xc3, 0xc7, 0x47, 0x06, 0xff, 0xff, 0xeb, 0xf5, 0x51, 0x56, + 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x89, 0xc7, 0x89, 0x56, 0xfe, + 0x89, 0xde, 0x8b, 0x5e, 0x0c, 0x89, 0x46, 0xf6, 0x89, 0xd0, 0x31, 0xd0, + 0x8b, 0x4e, 0x0e, 0x89, 0x46, 0xfc, 0xb8, 0xe8, 0x2e, 0x89, 0x56, 0xf8, + 0x50, 0x8c, 0xd2, 0xff, 0x76, 0x12, 0x8d, 0x46, 0xf6, 0xff, 0x76, 0x10, + 0x89, 0x76, 0xfa, 0x0e, 0x3e, 0xe8, 0xf1, 0x18, 0x89, 0xc2, 0x39, 0xf0, + 0x72, 0x11, 0x83, 0x7e, 0xfc, 0x00, 0x75, 0x15, 0x89, 0xd0, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x59, 0xca, 0x08, 0x00, 0x8e, 0x5e, 0xfe, 0x01, 0xc7, + 0xc6, 0x05, 0x00, 0xeb, 0xe5, 0xb8, 0xff, 0xff, 0xeb, 0xe8, 0x53, 0x52, + 0x55, 0x89, 0xe5, 0x16, 0x8d, 0x56, 0x14, 0x52, 0x8b, 0x5e, 0x0e, 0xff, + 0x76, 0x12, 0x8b, 0x46, 0x0a, 0xff, 0x76, 0x10, 0x8b, 0x56, 0x0c, 0x0e, + 0xe8, 0x83, 0xff, 0x5d, 0x5a, 0x5b, 0xcb, 0x53, 0xbb, 0x75, 0x07, 0x8e, + 0xdb, 0x80, 0x3e, 0x1a, 0x08, 0x00, 0x75, 0x04, 0x31, 0xc0, 0x5b, 0xcb, 0x52, 0x50, 0xcc, 0xeb, 0x06, 0x57, 0x56, 0x49, 0x44, 0x45, 0x4f, 0xb8, - 0x01, 0x00, 0x83, 0xc4, 0x04, 0xc3, 0x8b, 0xc4, 0x2b, 0x06, 0x86, 0x07, - 0xc3, 0x53, 0x89, 0xd3, 0xba, 0x40, 0x06, 0xe8, 0xff, 0x15, 0xba, 0x40, - 0x06, 0xb8, 0x74, 0x04, 0xe8, 0xf6, 0x15, 0xba, 0x40, 0x06, 0x89, 0xd8, - 0xe8, 0xee, 0x15, 0x5b, 0xc3, 0x83, 0x3e, 0x7c, 0x07, 0x00, 0x74, 0x04, - 0xff, 0x16, 0x7c, 0x07, 0xe8, 0x00, 0x00, 0x53, 0x52, 0xbb, 0xff, 0x00, - 0xb8, 0x78, 0x04, 0x8c, 0xda, 0xe9, 0xfc, 0x03, 0x53, 0x52, 0x56, 0x89, - 0xc6, 0x8b, 0x5c, 0x04, 0x83, 0x7f, 0x04, 0x00, 0x74, 0x4c, 0x8a, 0x44, - 0x07, 0xa8, 0x20, 0x74, 0x0a, 0xa8, 0x06, 0x74, 0x06, 0xb8, 0x00, 0x20, - 0xe8, 0x28, 0x16, 0x8b, 0x5c, 0x04, 0x80, 0x64, 0x06, 0xfb, 0x8b, 0x47, - 0x04, 0x89, 0x04, 0x8b, 0x44, 0x06, 0x30, 0xc0, 0x80, 0xe4, 0x24, 0x3d, - 0x00, 0x24, 0x75, 0x32, 0x8b, 0x44, 0x08, 0x85, 0xc0, 0x75, 0x2b, 0x89, - 0x44, 0x02, 0xe8, 0x38, 0x16, 0x89, 0xc2, 0x3d, 0xff, 0xff, 0x75, 0x13, - 0x8b, 0x44, 0x02, 0x85, 0xc0, 0x7e, 0x32, 0x8b, 0x44, 0x02, 0x5e, 0x5a, - 0x5b, 0xc3, 0xe8, 0x78, 0x07, 0xeb, 0xaf, 0x8b, 0x1c, 0x88, 0x07, 0xc7, - 0x44, 0x02, 0x01, 0x00, 0xeb, 0xe9, 0xf6, 0x44, 0x07, 0x04, 0x74, 0x10, - 0xbb, 0x01, 0x00, 0x8b, 0x14, 0x8b, 0x44, 0x08, 0xe8, 0x17, 0x16, 0x89, - 0x44, 0x02, 0xeb, 0xcc, 0x8b, 0x5c, 0x0a, 0xeb, 0xee, 0x75, 0x06, 0x80, - 0x4c, 0x06, 0x10, 0xeb, 0xc6, 0xc7, 0x44, 0x02, 0x00, 0x00, 0x80, 0x4c, - 0x06, 0x20, 0xeb, 0xbb, 0x53, 0x89, 0xc3, 0xe8, 0x62, 0xff, 0x85, 0xc0, - 0x75, 0x05, 0xb8, 0xff, 0xff, 0x5b, 0xc3, 0xff, 0x4f, 0x02, 0xff, 0x07, - 0x8b, 0x1f, 0x8a, 0x47, 0xff, 0x30, 0xe4, 0x5b, 0xc3, 0x53, 0x56, 0x89, - 0xc3, 0x8b, 0x77, 0x04, 0x8b, 0x44, 0x06, 0x3d, 0x01, 0x00, 0x74, 0x09, - 0x85, 0xc0, 0x75, 0x47, 0xc7, 0x44, 0x06, 0x01, 0x00, 0xf6, 0x47, 0x06, - 0x01, 0x75, 0x42, 0xe8, 0xe3, 0xf9, 0x89, 0xc6, 0xc7, 0x04, 0x04, 0x00, - 0xb8, 0xff, 0xff, 0x80, 0x4f, 0x06, 0x20, 0xf6, 0x47, 0x06, 0x40, 0x75, - 0x23, 0x3d, 0x0d, 0x00, 0x75, 0x12, 0xff, 0x4f, 0x02, 0x83, 0x7f, 0x02, - 0x00, 0x7c, 0x39, 0x8b, 0x37, 0x8a, 0x04, 0x46, 0x30, 0xe4, 0x89, 0x37, - 0x3d, 0x1a, 0x00, 0x75, 0x07, 0xb8, 0xff, 0xff, 0x80, 0x4f, 0x06, 0x10, - 0x5e, 0x5b, 0xc3, 0xb8, 0xff, 0xff, 0x5e, 0x5b, 0xc3, 0xff, 0x4f, 0x02, - 0x83, 0x7f, 0x02, 0x00, 0x7c, 0x0b, 0x8b, 0x37, 0x8a, 0x04, 0x46, 0x30, - 0xe4, 0x89, 0x37, 0xeb, 0xba, 0x89, 0xd8, 0xe8, 0x6a, 0xff, 0xeb, 0xb3, - 0x89, 0xd8, 0xe8, 0x63, 0xff, 0xeb, 0xc9, 0x56, 0x57, 0x55, 0x89, 0xe5, - 0x83, 0xec, 0x04, 0x89, 0xc6, 0x8d, 0x7e, 0xfc, 0x88, 0xd0, 0x89, 0xda, - 0x89, 0xf3, 0xb4, 0x42, 0xcd, 0x21, 0x36, 0x89, 0x05, 0x36, 0x89, 0x55, - 0x02, 0xd1, 0xd2, 0xd1, 0xca, 0x85, 0xd2, 0x7c, 0x0c, 0x8b, 0x46, 0xfc, - 0x8b, 0x56, 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0xe8, 0xa8, 0x12, - 0x99, 0xeb, 0xf4, 0x53, 0x51, 0x52, 0x56, 0x89, 0xc1, 0x89, 0xc3, 0xb4, - 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x31, 0xf6, 0x85, 0xd2, 0x7f, 0x02, 0x75, - 0x0e, 0x89, 0xc8, 0x31, 0xd2, 0xe8, 0x4b, 0x12, 0x89, 0xf0, 0x5e, 0x5a, - 0x59, 0x5b, 0xc3, 0xe8, 0x23, 0xf9, 0x89, 0xc6, 0xc7, 0x04, 0x04, 0x00, - 0xbe, 0xff, 0xff, 0xeb, 0xe4, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc6, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xf6, - 0x44, 0x07, 0x10, 0x74, 0x03, 0xe9, 0x6c, 0x00, 0x8b, 0x5c, 0x04, 0x83, - 0x7f, 0x04, 0x00, 0x74, 0x3b, 0x80, 0x64, 0x06, 0xef, 0xf6, 0x44, 0x07, - 0x20, 0x75, 0x31, 0x8b, 0x44, 0x02, 0x99, 0x89, 0xd3, 0x09, 0xc3, 0x74, - 0x14, 0x89, 0xd1, 0x89, 0xc3, 0xba, 0x01, 0x00, 0xf7, 0xd9, 0x8b, 0x44, - 0x08, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xe8, 0x4a, 0xff, 0x83, 0xfa, 0xff, - 0x75, 0x0e, 0x3d, 0xff, 0xff, 0x75, 0x09, 0xc7, 0x46, 0xfe, 0xff, 0xff, - 0x80, 0x4c, 0x06, 0x20, 0x8b, 0x5c, 0x04, 0x8b, 0x47, 0x04, 0xc7, 0x44, - 0x02, 0x00, 0x00, 0x89, 0x04, 0x83, 0x7e, 0xfe, 0x00, 0x75, 0x09, 0x8b, - 0x5c, 0x04, 0xf6, 0x47, 0x08, 0x01, 0x75, 0x61, 0x8b, 0x46, 0xfe, 0x89, - 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x80, 0x64, 0x07, 0xef, - 0xf6, 0x44, 0x06, 0x02, 0x74, 0xce, 0x8b, 0x7c, 0x04, 0x8b, 0x45, 0x04, - 0x85, 0xc0, 0x74, 0xc4, 0x89, 0xc7, 0x8b, 0x4c, 0x02, 0x85, 0xc9, 0x74, - 0xbb, 0x83, 0x7e, 0xfe, 0x00, 0x75, 0xb5, 0x89, 0xcb, 0x89, 0xfa, 0x8b, - 0x44, 0x08, 0xe8, 0x53, 0x14, 0x89, 0xc2, 0x3d, 0xff, 0xff, 0x75, 0x0d, - 0x89, 0x46, 0xfe, 0x80, 0x4c, 0x06, 0x20, 0x01, 0xd7, 0x29, 0xd1, 0xeb, - 0xd8, 0x85, 0xc0, 0x75, 0xf6, 0xe8, 0x49, 0xf8, 0x89, 0xc3, 0xc7, 0x07, - 0x0c, 0x00, 0xc7, 0x46, 0xfe, 0xff, 0xff, 0xeb, 0xe2, 0x8b, 0x44, 0x08, - 0xe8, 0x7e, 0x14, 0x3d, 0xff, 0xff, 0x75, 0x94, 0x89, 0x46, 0xfe, 0xeb, - 0x8f, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x14, 0x50, 0x89, 0xd6, - 0x89, 0xcf, 0x8b, 0x04, 0x89, 0x46, 0xec, 0x8b, 0x44, 0x02, 0x89, 0x46, - 0xee, 0x8b, 0x44, 0x04, 0x89, 0x46, 0xf0, 0x8b, 0x44, 0x06, 0x89, 0x46, - 0xf2, 0x8b, 0x44, 0x08, 0x89, 0x46, 0xf6, 0x8b, 0x44, 0x0a, 0x89, 0x46, - 0xf8, 0x8b, 0x45, 0x06, 0x89, 0x46, 0xfa, 0x8b, 0x05, 0x8d, 0x56, 0xec, - 0x89, 0x46, 0xfc, 0x8b, 0x46, 0xea, 0xe8, 0x33, 0x14, 0x8b, 0x46, 0xec, - 0x89, 0x07, 0x8b, 0x46, 0xee, 0x89, 0x47, 0x02, 0x8b, 0x46, 0xf0, 0x89, - 0x47, 0x04, 0x8b, 0x46, 0xf2, 0x89, 0x47, 0x06, 0x8b, 0x46, 0xf6, 0x89, - 0x47, 0x08, 0x8b, 0x46, 0xf8, 0x89, 0x47, 0x0a, 0x8b, 0x46, 0xfe, 0x25, - 0x01, 0x00, 0x89, 0x47, 0x0c, 0x8b, 0x46, 0xfa, 0x89, 0x45, 0x06, 0x8b, - 0x46, 0xfc, 0x89, 0x05, 0x8b, 0x46, 0xec, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0xc3, 0x51, 0x56, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x89, 0xc6, 0x8d, - 0x46, 0xf8, 0x8d, 0x4e, 0xf8, 0xe8, 0xf2, 0x13, 0x89, 0xf0, 0xe8, 0x64, - 0xff, 0x89, 0xec, 0x5d, 0x5e, 0x59, 0xc3, 0x53, 0x56, 0x89, 0xc3, 0x8b, - 0x37, 0x8d, 0x44, 0x01, 0x89, 0x07, 0x88, 0x14, 0xff, 0x47, 0x0a, 0x5e, - 0x5b, 0xc3, 0x51, 0x56, 0x89, 0xc6, 0xb9, 0x6f, 0x2b, 0xe8, 0xf5, 0x04, - 0x01, 0xc6, 0xc6, 0x04, 0x00, 0x5e, 0x59, 0xc3, 0x53, 0x51, 0x52, 0x56, - 0x57, 0x89, 0xc7, 0x8b, 0x36, 0xfe, 0x0a, 0x85, 0xf6, 0x74, 0x5e, 0x85, - 0xc0, 0x74, 0x5a, 0x8b, 0x14, 0x85, 0xd2, 0x74, 0x54, 0x89, 0xfb, 0x89, - 0xd0, 0xe8, 0xba, 0x13, 0x85, 0xc0, 0x74, 0x05, 0x83, 0xc6, 0x02, 0xeb, - 0xea, 0x89, 0xd8, 0xe8, 0xac, 0x13, 0x85, 0xc0, 0x75, 0x26, 0x89, 0xd0, - 0xe8, 0xda, 0x13, 0xe8, 0x01, 0x14, 0x89, 0xc1, 0x89, 0xd8, 0xe8, 0xd0, - 0x13, 0xe8, 0xf7, 0x13, 0x29, 0xc1, 0x75, 0xdc, 0x89, 0xd0, 0xe8, 0x02, - 0x14, 0x89, 0xc2, 0x89, 0xd8, 0xe8, 0xfb, 0x13, 0x89, 0xc3, 0xeb, 0xc3, - 0x89, 0xd0, 0xe8, 0xb4, 0x13, 0x3d, 0x3d, 0x00, 0x75, 0xc2, 0x89, 0xd0, - 0xe8, 0xe8, 0x13, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x31, 0xc0, 0xeb, - 0xf6, 0x53, 0x89, 0xc3, 0x84, 0xd2, 0x74, 0x0f, 0xc6, 0x07, 0x2f, 0xc6, - 0x47, 0x01, 0x63, 0x89, 0xd8, 0xc6, 0x47, 0x02, 0x00, 0x5b, 0xc3, 0xb8, - 0x00, 0x37, 0xcd, 0x21, 0x88, 0x17, 0xeb, 0xeb, 0x53, 0x52, 0x55, 0x89, - 0xe5, 0x8b, 0x46, 0x08, 0x8d, 0x5e, 0x0c, 0x8b, 0x56, 0x0a, 0xe8, 0xda, - 0x13, 0x5d, 0x5a, 0x5b, 0xc3, 0xe9, 0x73, 0xf0, 0x89, 0xc1, 0x89, 0xd6, - 0xe8, 0xa3, 0xfb, 0x85, 0xc0, 0x75, 0x07, 0x89, 0xc8, 0x89, 0xf2, 0xe9, - 0x61, 0xf0, 0x89, 0xd8, 0xe9, 0x3f, 0xf0, 0x52, 0x8b, 0x16, 0x02, 0x0b, - 0xa1, 0x00, 0x0b, 0xe8, 0x4b, 0xe0, 0xe9, 0xb9, 0x13, 0x53, 0x52, 0x55, - 0x89, 0xe5, 0x89, 0xc3, 0x83, 0x3f, 0x00, 0x75, 0x06, 0x89, 0xec, 0x5d, - 0x5a, 0x5b, 0xc3, 0x1e, 0xff, 0x17, 0x1f, 0xeb, 0xf4, 0x53, 0x55, 0x89, - 0xe5, 0x89, 0xc3, 0x8e, 0xc2, 0x26, 0x8b, 0x47, 0x02, 0x26, 0x8b, 0x17, - 0x85, 0xc0, 0x75, 0x09, 0x85, 0xd2, 0x75, 0x05, 0x89, 0xec, 0x5d, 0x5b, - 0xc3, 0x1e, 0x26, 0xff, 0x1f, 0x1f, 0xeb, 0xf4, 0xe8, 0x01, 0x00, 0xcb, - 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xc1, 0x1e, 0xe8, - 0xc7, 0xf0, 0xbf, 0x5a, 0x08, 0xbb, 0x3c, 0x08, 0x89, 0xfe, 0x88, 0xc8, - 0x81, 0xfb, 0x5a, 0x08, 0x73, 0x16, 0x80, 0x3f, 0x02, 0x75, 0x05, 0x83, - 0xc3, 0x06, 0xeb, 0xf0, 0x3a, 0x47, 0x01, 0x72, 0xf6, 0x89, 0xde, 0x8a, - 0x47, 0x01, 0xeb, 0xef, 0x81, 0xfe, 0x5a, 0x08, 0x74, 0x17, 0x8d, 0x44, - 0x02, 0x80, 0x3c, 0x00, 0x75, 0x08, 0xe8, 0x7c, 0xff, 0xc6, 0x04, 0x02, - 0xeb, 0xc7, 0x8c, 0xda, 0xe8, 0x8a, 0xff, 0xeb, 0xf4, 0x1f, 0x89, 0xec, - 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xe8, 0x01, 0x00, 0xcb, 0x53, - 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xc1, 0x1e, 0x88, 0xcd, 0xe8, - 0x67, 0xf0, 0x88, 0xd1, 0xbf, 0x72, 0x08, 0xbb, 0x5a, 0x08, 0x89, 0xfe, - 0x88, 0xe8, 0x81, 0xfb, 0x72, 0x08, 0x73, 0x16, 0x80, 0x3f, 0x02, 0x75, - 0x05, 0x83, 0xc3, 0x06, 0xeb, 0xf0, 0x3a, 0x47, 0x01, 0x77, 0xf6, 0x89, - 0xde, 0x8a, 0x47, 0x01, 0xeb, 0xef, 0x81, 0xfe, 0x72, 0x08, 0x74, 0x1e, - 0x3a, 0x4c, 0x01, 0x73, 0x05, 0xc6, 0x04, 0x02, 0xeb, 0xcd, 0x8d, 0x44, - 0x02, 0x80, 0x3c, 0x00, 0x75, 0x05, 0xe8, 0x10, 0xff, 0xeb, 0xee, 0x8c, - 0xda, 0xe8, 0x21, 0xff, 0xeb, 0xe7, 0x1f, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0x59, 0x5b, 0xc3, 0x00, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, - 0x04, 0x50, 0x89, 0xd6, 0x89, 0x4e, 0xfe, 0x89, 0xda, 0x31, 0xc9, 0x8a, - 0x04, 0x3c, 0x20, 0x75, 0x03, 0x46, 0xeb, 0xf7, 0x3c, 0x09, 0x74, 0xf9, - 0x84, 0xc0, 0x74, 0x49, 0x30, 0xc0, 0x80, 0x3c, 0x22, 0x74, 0x19, 0x89, - 0x76, 0xfc, 0x89, 0xf3, 0x80, 0x3c, 0x22, 0x75, 0x3b, 0x83, 0x7e, 0xfa, - 0x00, 0x75, 0x12, 0x46, 0x84, 0xc0, 0x75, 0x09, 0xb0, 0x02, 0xeb, 0xec, - 0xb0, 0x01, 0x46, 0xeb, 0xe2, 0x30, 0xc0, 0xeb, 0xe3, 0x3c, 0x01, 0x75, - 0x1f, 0x85, 0xd2, 0x74, 0x58, 0x89, 0xcf, 0xd1, 0xe7, 0x01, 0xd7, 0x8b, - 0x46, 0xfc, 0x89, 0x05, 0x8a, 0x04, 0x41, 0x84, 0xc0, 0x74, 0x48, 0x46, - 0xc6, 0x07, 0x00, 0xeb, 0xa6, 0xe9, 0x56, 0x00, 0x80, 0x3c, 0x20, 0x75, - 0x28, 0x84, 0xc0, 0x74, 0xd8, 0x80, 0x3c, 0x00, 0x74, 0xd3, 0x80, 0x3c, - 0x5c, 0x75, 0x13, 0x83, 0x7e, 0xfa, 0x00, 0x75, 0x1b, 0x80, 0x7c, 0x01, - 0x22, 0x75, 0x07, 0x46, 0x80, 0x7c, 0xfe, 0x5c, 0x74, 0x9a, 0x85, 0xd2, - 0x75, 0x23, 0x46, 0xeb, 0x93, 0x80, 0x3c, 0x09, 0x74, 0xd3, 0xeb, 0xd5, - 0x80, 0x7c, 0x01, 0x22, 0x75, 0x07, 0x46, 0xeb, 0xe9, 0xeb, 0x24, 0xeb, - 0x13, 0x80, 0x7c, 0x01, 0x5c, 0x75, 0xdf, 0x3c, 0x01, 0x74, 0xef, 0xeb, - 0xd9, 0x8a, 0x24, 0x88, 0x27, 0x43, 0xeb, 0xd6, 0x88, 0x07, 0x8b, 0x5e, - 0xfe, 0x89, 0xc8, 0x89, 0x37, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x41, - 0x80, 0x3c, 0x00, 0x74, 0xed, 0xe9, 0x3d, 0xff, 0x55, 0x89, 0xe5, 0x56, - 0x57, 0x83, 0xec, 0x06, 0x50, 0x52, 0x89, 0xde, 0x89, 0x4e, 0xf8, 0x8d, - 0x4e, 0xf6, 0x89, 0xf2, 0x31, 0xdb, 0xe8, 0x0c, 0xff, 0x8b, 0x56, 0xf6, - 0x40, 0x29, 0xf2, 0xd1, 0xe0, 0x89, 0xd1, 0x83, 0xc2, 0x02, 0x05, 0x02, - 0x00, 0x80, 0xe2, 0xfe, 0x01, 0xd0, 0x31, 0xff, 0x40, 0x41, 0x24, 0xfe, - 0x89, 0xd3, 0xe8, 0xa2, 0xde, 0x89, 0xc2, 0x89, 0x46, 0xfa, 0x31, 0xc0, - 0x85, 0xd2, 0x75, 0x16, 0x8b, 0x5e, 0xf8, 0x89, 0x07, 0x8b, 0x5e, 0x04, - 0x8b, 0x46, 0xfa, 0x89, 0x3f, 0x8d, 0x66, 0xfc, 0x5f, 0x5e, 0x5d, 0xc2, - 0x02, 0x00, 0x89, 0xd7, 0x57, 0x8c, 0xd8, 0x8e, 0xc0, 0xd1, 0xe9, 0xf3, - 0xa5, 0x13, 0xc9, 0xf3, 0xa4, 0x5f, 0x8b, 0x46, 0xf2, 0x01, 0xdf, 0x8d, - 0x4e, 0xf6, 0x8d, 0x5d, 0x02, 0x89, 0x05, 0x8b, 0x46, 0xf4, 0xe8, 0xa8, - 0xfe, 0x40, 0x89, 0xc3, 0xd1, 0xe3, 0x01, 0xfb, 0xc7, 0x07, 0x00, 0x00, - 0xeb, 0xba, 0x53, 0x51, 0x52, 0xb8, 0xec, 0x0a, 0xb9, 0xea, 0x0a, 0x8b, - 0x1e, 0x9f, 0x07, 0x8b, 0x16, 0xa3, 0x07, 0x50, 0xa1, 0x04, 0x0b, 0xe8, - 0x5e, 0xff, 0xa3, 0xf4, 0x0a, 0xa1, 0xea, 0x0a, 0xa3, 0xee, 0x0a, 0xa3, - 0x00, 0x0b, 0xa1, 0xec, 0x0a, 0xa3, 0xf0, 0x0a, 0xa3, 0x02, 0x0b, 0x5a, - 0x59, 0x5b, 0xc3, 0xa1, 0xf4, 0x0a, 0x85, 0xc0, 0x75, 0x01, 0xc3, 0xe9, - 0xce, 0xde, 0x52, 0x89, 0xc2, 0xa1, 0xac, 0x07, 0x89, 0x16, 0xac, 0x07, - 0x5a, 0xc3, 0x53, 0x51, 0x52, 0x89, 0xc2, 0x3b, 0x06, 0x88, 0x07, 0x72, - 0x3b, 0x89, 0xd3, 0xb1, 0x04, 0x83, 0xc3, 0x0f, 0xd3, 0xeb, 0x8c, 0xd8, - 0x85, 0xdb, 0x75, 0x03, 0xbb, 0x00, 0x10, 0x80, 0x3e, 0x84, 0x07, 0x00, - 0x75, 0x0b, 0x8c, 0xd0, 0x2b, 0x06, 0x80, 0x07, 0x01, 0xc3, 0xa1, 0x80, - 0x07, 0x8e, 0xc0, 0xb4, 0x4a, 0xcd, 0x21, 0x19, 0xc0, 0x85, 0xc0, 0x7c, - 0x0b, 0xa1, 0x7e, 0x07, 0x89, 0x16, 0x7e, 0x07, 0x5a, 0x59, 0x5b, 0xc3, - 0xe8, 0x9e, 0xf3, 0x89, 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x05, 0x00, - 0xeb, 0xee, 0x03, 0x06, 0x7e, 0x07, 0xeb, 0xa6, 0x53, 0x51, 0x56, 0x57, - 0x89, 0xc1, 0x89, 0xd3, 0x8b, 0x77, 0x04, 0x8b, 0x44, 0x06, 0x3d, 0x01, - 0x00, 0x74, 0x0c, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x6f, 0x00, 0xc7, 0x44, - 0x06, 0x01, 0x00, 0xf6, 0x47, 0x06, 0x02, 0x75, 0x03, 0xe9, 0x69, 0x00, - 0x8b, 0x77, 0x04, 0x83, 0x7c, 0x04, 0x00, 0x75, 0x05, 0x89, 0xd8, 0xe8, - 0x73, 0x00, 0xbe, 0x00, 0x04, 0x83, 0xf9, 0x0a, 0x75, 0x28, 0xbe, 0x00, - 0x06, 0xf6, 0x47, 0x06, 0x40, 0x75, 0x1f, 0x8b, 0x3f, 0x80, 0x4f, 0x07, - 0x10, 0xc6, 0x05, 0x0d, 0xff, 0x07, 0xff, 0x47, 0x02, 0x8b, 0x47, 0x02, - 0x3b, 0x47, 0x0a, 0x75, 0x09, 0x89, 0xd8, 0xe8, 0x13, 0xfa, 0x85, 0xc0, - 0x75, 0x23, 0x8b, 0x3f, 0x80, 0x4f, 0x07, 0x10, 0x88, 0x0d, 0xff, 0x07, - 0xff, 0x47, 0x02, 0x85, 0x77, 0x06, 0x75, 0x08, 0x8b, 0x47, 0x02, 0x3b, - 0x47, 0x0a, 0x75, 0x23, 0x89, 0xd8, 0xe8, 0xf0, 0xf9, 0x85, 0xc0, 0x74, - 0x1a, 0xb8, 0xff, 0xff, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xe8, 0xf9, 0xf2, - 0x89, 0xc6, 0xc7, 0x04, 0x04, 0x00, 0xb8, 0xff, 0xff, 0x80, 0x4f, 0x06, - 0x20, 0xeb, 0xe9, 0x88, 0xc8, 0x30, 0xe4, 0xeb, 0xe3, 0x53, 0x56, 0x89, - 0xc3, 0xe8, 0x4f, 0xf6, 0x83, 0x7f, 0x0a, 0x00, 0x75, 0x0c, 0x8a, 0x47, - 0x07, 0xa8, 0x02, 0x74, 0x40, 0xc7, 0x47, 0x0a, 0x86, 0x00, 0x8b, 0x47, - 0x0a, 0xe8, 0xe7, 0xdc, 0x8b, 0x77, 0x04, 0x89, 0x44, 0x04, 0x8b, 0x77, - 0x04, 0x83, 0x7c, 0x04, 0x00, 0x75, 0x38, 0x80, 0x67, 0x07, 0xf8, 0x8d, - 0x47, 0x0c, 0x8b, 0x77, 0x04, 0x80, 0x4f, 0x07, 0x04, 0x89, 0x44, 0x04, - 0xc7, 0x47, 0x0a, 0x01, 0x00, 0x8b, 0x77, 0x04, 0x8b, 0x44, 0x04, 0xc7, - 0x47, 0x02, 0x00, 0x00, 0x89, 0x07, 0x5e, 0x5b, 0xc3, 0xa8, 0x04, 0x74, - 0x07, 0xc7, 0x47, 0x0a, 0x40, 0x00, 0xeb, 0xba, 0xc7, 0x47, 0x0a, 0x00, - 0x02, 0xeb, 0xb3, 0x80, 0x4f, 0x06, 0x08, 0xeb, 0xd8, 0x56, 0x57, 0x55, - 0x89, 0xe5, 0x83, 0xec, 0x70, 0x89, 0xde, 0x89, 0x4e, 0xf8, 0xc6, 0x46, - 0xfe, 0x00, 0xc7, 0x46, 0xda, 0x00, 0x00, 0xc7, 0x46, 0xdc, 0xc8, 0x00, - 0xc7, 0x46, 0xe2, 0x00, 0x00, 0x89, 0x46, 0xd8, 0x89, 0x56, 0xfc, 0x8b, - 0x5e, 0xfc, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x6b, 0x8d, 0x4f, 0x01, 0x3c, - 0x25, 0x74, 0x0e, 0x98, 0x89, 0xc2, 0x8d, 0x46, 0xd8, 0x89, 0x4e, 0xfc, - 0xff, 0x56, 0xf8, 0xeb, 0xe2, 0x8d, 0x5e, 0xd8, 0x8b, 0x04, 0x8d, 0x56, - 0xf4, 0x89, 0x46, 0xf4, 0x89, 0xc8, 0xe8, 0xce, 0x01, 0x89, 0xc3, 0x8b, - 0x46, 0xf4, 0x89, 0x04, 0x8a, 0x07, 0x43, 0x88, 0x46, 0xf0, 0x89, 0x5e, - 0xfc, 0x84, 0xc0, 0x74, 0x32, 0x3c, 0x6e, 0x75, 0x50, 0x8a, 0x46, 0xdb, - 0xa8, 0x04, 0x74, 0x17, 0x83, 0x04, 0x04, 0x8b, 0x3c, 0xc4, 0x5d, 0xfc, - 0x8a, 0x46, 0xda, 0xa8, 0x10, 0x74, 0x1b, 0x8a, 0x46, 0xe2, 0x26, 0x88, - 0x07, 0xeb, 0x9c, 0xa8, 0x02, 0x83, 0x04, 0x02, 0x8c, 0xd8, 0x8b, 0x1c, - 0x8e, 0xc0, 0x8b, 0x5f, 0xfe, 0xeb, 0xe1, 0xe9, 0x7c, 0x01, 0xa8, 0x20, - 0x74, 0x09, 0x8b, 0x46, 0xe2, 0x26, 0x89, 0x07, 0xe9, 0x7c, 0xff, 0xa8, - 0x40, 0x74, 0x10, 0x8b, 0x46, 0xe2, 0x99, 0x26, 0x89, 0x07, 0x26, 0x89, - 0x57, 0x02, 0xe9, 0x6a, 0xff, 0xeb, 0x1f, 0xa8, 0x80, 0x74, 0xdf, 0x8b, - 0x46, 0xe2, 0x99, 0x26, 0x89, 0x07, 0xb1, 0x0f, 0x26, 0x89, 0x57, 0x02, - 0x26, 0xd3, 0xfa, 0x26, 0x89, 0x57, 0x04, 0x26, 0x89, 0x57, 0x06, 0xe9, - 0x49, 0xff, 0x8d, 0x4e, 0xfe, 0x8d, 0x5e, 0xd8, 0x8b, 0x04, 0x8d, 0x56, - 0xf6, 0x89, 0x46, 0xf6, 0x8d, 0x46, 0x90, 0xe8, 0x0e, 0x05, 0x89, 0xc7, - 0x8b, 0x46, 0xf6, 0x89, 0x04, 0x8b, 0x46, 0xe4, 0x03, 0x46, 0xe6, 0x03, - 0x46, 0xe8, 0x03, 0x46, 0xea, 0x03, 0x46, 0xec, 0x03, 0x46, 0xee, 0x89, - 0x56, 0xfa, 0x29, 0x46, 0xde, 0xf6, 0x46, 0xda, 0x08, 0x74, 0x1a, 0x8d, - 0x5e, 0x90, 0x83, 0x7e, 0xe4, 0x00, 0x7e, 0x2b, 0x8a, 0x07, 0x98, 0x89, - 0xc2, 0x8d, 0x46, 0xd8, 0x43, 0xff, 0x56, 0xf8, 0xff, 0x4e, 0xe4, 0xeb, - 0xe9, 0x80, 0x7e, 0xf1, 0x20, 0x75, 0xe0, 0x83, 0x7e, 0xde, 0x00, 0x7e, - 0xda, 0xba, 0x20, 0x00, 0x8d, 0x46, 0xd8, 0xff, 0x56, 0xf8, 0xff, 0x4e, - 0xde, 0xeb, 0xec, 0x83, 0x7e, 0xe6, 0x00, 0x7e, 0x0e, 0xba, 0x30, 0x00, - 0x8d, 0x46, 0xd8, 0xff, 0x56, 0xf8, 0xff, 0x4e, 0xe6, 0xeb, 0xec, 0x8a, - 0x46, 0xf0, 0x3c, 0x73, 0x75, 0x45, 0xf6, 0x46, 0xda, 0x40, 0x75, 0x1d, - 0x83, 0x7e, 0xe8, 0x00, 0x7e, 0x25, 0x8e, 0x46, 0xfa, 0x89, 0xfb, 0x26, - 0x8a, 0x07, 0x98, 0x89, 0xc2, 0x8d, 0x46, 0xd8, 0x47, 0xff, 0x56, 0xf8, - 0xff, 0x4e, 0xe8, 0xeb, 0xe3, 0x8b, 0x4e, 0xf8, 0x8d, 0x5e, 0xd8, 0x8b, - 0x56, 0xfa, 0x89, 0xf8, 0xe8, 0x14, 0x04, 0x83, 0x7e, 0xea, 0x00, 0x7e, - 0x2f, 0xba, 0x30, 0x00, 0x8d, 0x46, 0xd8, 0xff, 0x56, 0xf8, 0xff, 0x4e, - 0xea, 0xeb, 0xec, 0x3c, 0x53, 0x74, 0xda, 0x83, 0x7e, 0xe8, 0x00, 0x7e, - 0xe2, 0x8e, 0x46, 0xfa, 0x89, 0xfb, 0x26, 0x8a, 0x07, 0x98, 0x89, 0xc2, - 0x8d, 0x46, 0xd8, 0x47, 0xff, 0x56, 0xf8, 0xff, 0x4e, 0xe8, 0xeb, 0xe3, - 0x83, 0x7e, 0xec, 0x00, 0x7e, 0x17, 0x8e, 0x46, 0xfa, 0x89, 0xfb, 0x26, - 0x8a, 0x07, 0x98, 0x89, 0xc2, 0x8d, 0x46, 0xd8, 0x47, 0xff, 0x56, 0xf8, - 0xff, 0x4e, 0xec, 0xeb, 0xe3, 0x83, 0x7e, 0xee, 0x00, 0x7e, 0x0e, 0xba, - 0x30, 0x00, 0x8d, 0x46, 0xd8, 0xff, 0x56, 0xf8, 0xff, 0x4e, 0xee, 0xeb, - 0xec, 0xf6, 0x46, 0xda, 0x08, 0x75, 0x03, 0xe9, 0x21, 0xfe, 0x83, 0x7e, - 0xde, 0x00, 0x7e, 0xf7, 0xba, 0x20, 0x00, 0x8d, 0x46, 0xd8, 0xff, 0x56, - 0xf8, 0xff, 0x4e, 0xde, 0xeb, 0xec, 0x8b, 0x46, 0xe2, 0x89, 0xec, 0x5d, - 0x5f, 0x5e, 0xc3, 0x51, 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd1, 0x89, 0xda, - 0xc6, 0x47, 0x19, 0x20, 0xe8, 0x36, 0x01, 0x89, 0xc7, 0xc7, 0x47, 0x06, - 0x00, 0x00, 0x89, 0xc6, 0x80, 0x3d, 0x2a, 0x74, 0x22, 0x8a, 0x04, 0x3c, - 0x30, 0x7c, 0x2e, 0x3c, 0x39, 0x7f, 0x2a, 0xba, 0x0a, 0x00, 0x8b, 0x47, - 0x06, 0xf7, 0xea, 0x89, 0xc2, 0x8a, 0x04, 0x98, 0x2d, 0x30, 0x00, 0x01, - 0xc2, 0x46, 0x89, 0x57, 0x06, 0xeb, 0xde, 0x89, 0xcf, 0x83, 0x05, 0x02, - 0x8b, 0x3d, 0x8b, 0x45, 0xfe, 0x89, 0x47, 0x06, 0x85, 0xc0, 0x7c, 0x38, - 0x46, 0xc7, 0x47, 0x08, 0xff, 0xff, 0x80, 0x3c, 0x2e, 0x75, 0x48, 0x46, - 0xc7, 0x47, 0x08, 0x00, 0x00, 0x80, 0x3c, 0x2a, 0x74, 0x2b, 0x8a, 0x04, - 0x3c, 0x30, 0x7c, 0x37, 0x3c, 0x39, 0x7f, 0x33, 0xba, 0x0a, 0x00, 0x8b, - 0x47, 0x08, 0xf7, 0xea, 0x89, 0xc2, 0x8a, 0x04, 0x98, 0x2d, 0x30, 0x00, - 0x01, 0xc2, 0x46, 0x89, 0x57, 0x08, 0xeb, 0xde, 0xf7, 0x5f, 0x06, 0x80, - 0x4f, 0x02, 0x08, 0xeb, 0xbf, 0x89, 0xcf, 0x83, 0x05, 0x02, 0x8b, 0x3d, - 0x8b, 0x45, 0xfe, 0x89, 0x47, 0x08, 0x85, 0xc0, 0x7c, 0x21, 0x46, 0x8a, - 0x04, 0x8d, 0x7c, 0x01, 0x3c, 0x68, 0x73, 0x1e, 0x3c, 0x4c, 0x73, 0x56, - 0x3c, 0x49, 0x75, 0x54, 0x80, 0x7c, 0x01, 0x36, 0x75, 0x36, 0x80, 0x7c, - 0x02, 0x34, 0x75, 0x30, 0xe9, 0x7a, 0x00, 0xc7, 0x47, 0x08, 0xff, 0xff, - 0xeb, 0xd8, 0x8d, 0x54, 0x02, 0x77, 0x0e, 0x80, 0x7c, 0x01, 0x68, 0x75, - 0x53, 0x89, 0xd6, 0x80, 0x4f, 0x02, 0x10, 0xeb, 0x13, 0x3c, 0x74, 0x73, - 0x14, 0x3c, 0x6c, 0x75, 0x25, 0x3a, 0x44, 0x01, 0x75, 0x15, 0x89, 0xd6, - 0x80, 0x4f, 0x02, 0x80, 0x89, 0xf0, 0xe9, 0xf5, 0x00, 0x76, 0x4b, 0x3c, - 0x7a, 0x74, 0x47, 0x3c, 0x77, 0x75, 0xf1, 0x46, 0x80, 0x4f, 0x02, 0x40, - 0xeb, 0xea, 0xeb, 0x0e, 0xeb, 0x20, 0x3c, 0x6a, 0x75, 0xe2, 0x46, 0x81, - 0x4f, 0x02, 0x80, 0x01, 0xeb, 0xda, 0x76, 0xf6, 0x3c, 0x57, 0x74, 0x12, - 0x3c, 0x4e, 0x75, 0xd0, 0x89, 0xfe, 0x80, 0x4f, 0x03, 0x02, 0xeb, 0xc8, - 0xeb, 0x0b, 0x3c, 0x46, 0x75, 0xc2, 0x46, 0x80, 0x4f, 0x03, 0x04, 0xeb, - 0xbb, 0x89, 0xfe, 0x80, 0x4f, 0x02, 0x20, 0xeb, 0xb3, 0x83, 0xc6, 0x03, - 0xeb, 0xaa, 0x46, 0xeb, 0xab, 0x53, 0x56, 0x89, 0xc6, 0x89, 0xd3, 0xc7, - 0x47, 0x02, 0x00, 0x00, 0x8a, 0x04, 0x3c, 0x2d, 0x74, 0x0b, 0x3c, 0x23, - 0x75, 0x0d, 0x80, 0x4f, 0x02, 0x01, 0x46, 0xeb, 0xef, 0x80, 0x4f, 0x02, - 0x08, 0xeb, 0xf7, 0x3c, 0x2b, 0x75, 0x0a, 0x80, 0x4f, 0x02, 0x04, 0x80, - 0x67, 0x02, 0xfd, 0xeb, 0xe9, 0x3c, 0x20, 0x75, 0x0c, 0xf6, 0x47, 0x02, - 0x04, 0x75, 0xdf, 0x80, 0x4f, 0x02, 0x02, 0xeb, 0xd9, 0x3c, 0x30, 0x75, - 0x05, 0x88, 0x47, 0x19, 0xeb, 0xd0, 0x89, 0xf0, 0x5e, 0x5b, 0xc3, 0x56, - 0x57, 0x89, 0xc6, 0x89, 0xd7, 0x89, 0xda, 0x8e, 0xc7, 0x31, 0xc0, 0x39, - 0xd0, 0x75, 0x03, 0xe9, 0x56, 0xfe, 0x89, 0xf3, 0x46, 0x26, 0x80, 0x3f, - 0x00, 0x74, 0xf4, 0x40, 0xeb, 0xed, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, - 0x83, 0xec, 0x02, 0x89, 0xde, 0x89, 0xc3, 0x89, 0xd7, 0x31, 0xc9, 0x83, - 0xfe, 0xff, 0x75, 0x26, 0x8e, 0xc7, 0x26, 0x8b, 0x07, 0x85, 0xc0, 0x74, - 0x14, 0x89, 0xc2, 0x8d, 0x46, 0xfe, 0x83, 0xc3, 0x02, 0xe8, 0xba, 0x0b, - 0x3d, 0xff, 0xff, 0x74, 0xe7, 0x01, 0xc1, 0xeb, 0xe3, 0x89, 0xc8, 0x89, - 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, 0x8e, 0xc7, 0x26, 0x8b, 0x07, 0x85, - 0xc0, 0x74, 0x18, 0x39, 0xf1, 0x7f, 0x14, 0x89, 0xc2, 0x8d, 0x46, 0xfe, - 0x83, 0xc3, 0x02, 0xe8, 0x90, 0x0b, 0x3d, 0xff, 0xff, 0x74, 0xe3, 0x01, - 0xc1, 0xeb, 0xdf, 0x39, 0xf1, 0x7e, 0xd2, 0x89, 0xf0, 0xeb, 0xd0, 0x51, - 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x52, 0x53, 0xbb, 0x10, - 0x00, 0x8d, 0x56, 0xf6, 0x8d, 0x7e, 0xf6, 0xe8, 0xca, 0x0b, 0x8c, 0xd8, - 0x8e, 0xc0, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0xf2, 0xae, 0xf7, 0xd1, 0x49, - 0x8b, 0x46, 0xf2, 0x89, 0xc3, 0x89, 0xce, 0x03, 0x5e, 0xf4, 0x89, 0xf2, - 0x4e, 0x85, 0xd2, 0x7e, 0x0f, 0x89, 0xc2, 0x4b, 0x48, 0x85, 0xd2, 0x7e, - 0x07, 0x8a, 0x52, 0xf6, 0x88, 0x17, 0xeb, 0xea, 0x8b, 0x76, 0xf4, 0x01, - 0xc6, 0x89, 0xc2, 0x4e, 0x48, 0x85, 0xd2, 0x7e, 0x05, 0xc6, 0x04, 0x30, - 0xeb, 0xf3, 0x8b, 0x5e, 0xf4, 0x03, 0x5e, 0xf2, 0xc6, 0x07, 0x00, 0xe9, - 0x6d, 0xff, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x89, 0xc6, - 0x89, 0x56, 0xfc, 0x89, 0x5e, 0xfa, 0x89, 0x4e, 0xfe, 0x85, 0xc9, 0x7c, - 0x28, 0x8b, 0x5e, 0xfc, 0x83, 0x7f, 0x08, 0xff, 0x75, 0x05, 0xc7, 0x47, - 0x08, 0x04, 0x00, 0xbb, 0x0a, 0x00, 0x8b, 0x46, 0xfe, 0x89, 0xf2, 0xe8, - 0x4e, 0x0b, 0x89, 0x76, 0xf8, 0x8d, 0x44, 0x01, 0x80, 0x3c, 0x00, 0x74, - 0x14, 0x89, 0xc6, 0xeb, 0xf4, 0xf7, 0x5e, 0xfe, 0xc6, 0x04, 0x2d, 0xf7, - 0x5e, 0xfa, 0x83, 0x5e, 0xfe, 0x00, 0x46, 0xeb, 0xc8, 0x8b, 0x5e, 0xfc, - 0x83, 0x7f, 0x08, 0x00, 0x74, 0x35, 0xc6, 0x04, 0x2e, 0x31, 0xff, 0x89, - 0xc6, 0x8b, 0x5e, 0xfc, 0x3b, 0x7f, 0x08, 0x7d, 0x23, 0x8b, 0x46, 0xfa, - 0xbb, 0x0a, 0x00, 0x31, 0xd2, 0x31, 0xc9, 0xc7, 0x46, 0xfe, 0x00, 0x00, - 0xe8, 0x91, 0xde, 0x89, 0x56, 0xfe, 0x89, 0x46, 0xfa, 0x8a, 0x46, 0xfe, - 0x04, 0x30, 0x47, 0x88, 0x04, 0x46, 0xeb, 0xd5, 0xc6, 0x04, 0x00, 0xf6, - 0x46, 0xfb, 0x80, 0x75, 0x03, 0xe9, 0xe9, 0xfc, 0x3b, 0x76, 0xf8, 0x74, - 0x11, 0x4e, 0x80, 0x3c, 0x2e, 0x75, 0x01, 0x4e, 0x80, 0x3c, 0x39, 0x75, - 0x34, 0xc6, 0x04, 0x30, 0xeb, 0xea, 0xc6, 0x04, 0x31, 0x46, 0x8a, 0x04, - 0x8d, 0x7c, 0x01, 0x3c, 0x30, 0x75, 0x04, 0x89, 0xfe, 0xeb, 0xf3, 0x3c, - 0x2e, 0x75, 0x10, 0xc6, 0x04, 0x30, 0x8d, 0x75, 0x01, 0x88, 0x05, 0x80, - 0x3c, 0x30, 0x75, 0x03, 0x46, 0xeb, 0xf8, 0xc6, 0x04, 0x30, 0x46, 0xc6, - 0x04, 0x00, 0xe9, 0xa4, 0xfc, 0xfe, 0x04, 0xe9, 0x9f, 0xfc, 0x53, 0x89, - 0xc3, 0xf6, 0x47, 0x02, 0x08, 0x75, 0x22, 0x80, 0x7f, 0x19, 0x30, 0x75, - 0x1c, 0x8b, 0x47, 0x06, 0x2b, 0x47, 0x0c, 0x2b, 0x47, 0x0e, 0x2b, 0x47, - 0x10, 0x2b, 0x47, 0x12, 0x2b, 0x47, 0x14, 0x2b, 0x47, 0x16, 0x85, 0xc0, - 0x7e, 0x03, 0x01, 0x47, 0x0e, 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, - 0x83, 0xec, 0x06, 0x89, 0xc7, 0x89, 0x56, 0xfe, 0x89, 0x4e, 0xfc, 0x83, - 0x7f, 0x10, 0x00, 0x7f, 0x03, 0xe9, 0x59, 0xfc, 0x8e, 0x46, 0xfe, 0x8d, - 0x46, 0xfa, 0x26, 0x8b, 0x15, 0xe8, 0xea, 0x09, 0x83, 0xc7, 0x02, 0x89, - 0xc1, 0x3d, 0xff, 0xff, 0x74, 0xe1, 0x3b, 0x47, 0x10, 0x7f, 0x19, 0x8d, - 0x76, 0xfa, 0x49, 0x83, 0xf9, 0xff, 0x74, 0xd3, 0x8a, 0x04, 0x98, 0x89, - 0xc2, 0x89, 0xd8, 0x46, 0xff, 0x56, 0xfc, 0xff, 0x4f, 0x10, 0xeb, 0xea, - 0xc7, 0x47, 0x10, 0x00, 0x00, 0xe9, 0x1d, 0xfc, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x83, 0xec, 0x12, 0x50, 0x89, 0xd7, 0x89, 0xde, 0xc7, 0x47, 0x16, - 0x00, 0x00, 0x89, 0x46, 0xf8, 0x8b, 0x47, 0x16, 0x89, 0x47, 0x14, 0x89, - 0x47, 0x12, 0x89, 0x47, 0x10, 0x89, 0x47, 0x0e, 0x89, 0x47, 0x0c, 0x8a, - 0x47, 0x18, 0x8c, 0x5e, 0xfa, 0x3c, 0x62, 0x75, 0x23, 0x8a, 0x44, 0x02, - 0xa8, 0x80, 0x74, 0x54, 0x83, 0x05, 0x08, 0x8b, 0x1d, 0x8b, 0x47, 0xfc, - 0x89, 0x46, 0xf6, 0x8b, 0x47, 0xfa, 0x89, 0x46, 0xf4, 0x8b, 0x47, 0xf8, - 0x8b, 0x4f, 0xfe, 0x89, 0x46, 0xf2, 0xeb, 0x4d, 0x3c, 0x6f, 0x74, 0xd9, - 0x3c, 0x75, 0x74, 0xd5, 0x3c, 0x78, 0x74, 0xd1, 0x3c, 0x58, 0x74, 0xcd, - 0x3c, 0x64, 0x75, 0x66, 0x8a, 0x44, 0x02, 0xa8, 0x80, 0x74, 0x61, 0x83, - 0x05, 0x08, 0x8b, 0x1d, 0x8b, 0x47, 0xfc, 0x89, 0x46, 0xf6, 0x8b, 0x47, - 0xfa, 0x89, 0x46, 0xf4, 0x8b, 0x47, 0xf8, 0x8b, 0x4f, 0xfe, 0x89, 0x46, - 0xf2, 0xe9, 0xbf, 0x00, 0xa8, 0x40, 0x74, 0x42, 0x83, 0x05, 0x04, 0x8b, - 0x1d, 0x8b, 0x47, 0xfc, 0x89, 0x46, 0xfc, 0x8b, 0x47, 0xfe, 0x89, 0x46, - 0xfe, 0x8a, 0x44, 0x18, 0xc7, 0x46, 0xf0, 0x0a, 0x00, 0x3c, 0x64, 0x73, - 0x5b, 0x3c, 0x50, 0x73, 0x5a, 0x3c, 0x45, 0x73, 0x59, 0x3c, 0x43, 0x74, - 0x58, 0xc7, 0x44, 0x06, 0x00, 0x00, 0x8b, 0x5e, 0xec, 0x8a, 0x44, 0x18, - 0x88, 0x07, 0xc7, 0x44, 0x0c, 0x01, 0x00, 0xe9, 0xb1, 0x01, 0xeb, 0x31, - 0xeb, 0x42, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x47, 0xfe, 0xc7, 0x46, - 0xfe, 0x00, 0x00, 0x89, 0x46, 0xfc, 0xf6, 0x44, 0x02, 0x20, 0x74, 0x07, - 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xeb, 0xb2, 0xf6, 0x44, 0x02, 0x10, 0x74, - 0xac, 0x8a, 0x46, 0xfc, 0x30, 0xe4, 0x89, 0x46, 0xfc, 0x30, 0xc0, 0xeb, - 0x9d, 0x3c, 0x69, 0x75, 0x9c, 0xe9, 0x60, 0xff, 0xe9, 0xec, 0x00, 0xe9, - 0xb1, 0x02, 0xe9, 0xf1, 0x02, 0xe9, 0x3a, 0x04, 0xa8, 0x40, 0x74, 0x13, - 0x83, 0x05, 0x04, 0x8b, 0x1d, 0x8b, 0x47, 0xfc, 0x89, 0x46, 0xfc, 0x8b, - 0x47, 0xfe, 0x89, 0x46, 0xfe, 0xeb, 0x20, 0x83, 0x05, 0x02, 0x8b, 0x1d, - 0x8b, 0x47, 0xfe, 0x99, 0x89, 0x46, 0xfc, 0x8a, 0x44, 0x02, 0x89, 0x56, - 0xfe, 0xa8, 0x20, 0x74, 0x61, 0x8b, 0x46, 0xfc, 0x99, 0x89, 0x46, 0xfc, - 0x89, 0x56, 0xfe, 0x31, 0xc0, 0xf6, 0x44, 0x02, 0x80, 0x74, 0x59, 0x85, - 0xc9, 0x7c, 0x10, 0x75, 0x0a, 0x83, 0x7e, 0xf6, 0x00, 0x75, 0x04, 0x83, - 0x7e, 0xf4, 0x00, 0x85, 0xc0, 0x74, 0x5a, 0x8b, 0x44, 0x0c, 0x89, 0xc2, - 0x8b, 0x5e, 0xec, 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, 0x07, 0x2d, - 0xf6, 0x44, 0x02, 0x80, 0x74, 0x36, 0x31, 0xc0, 0x2b, 0x46, 0xf2, 0x89, - 0x46, 0xf2, 0xb8, 0x00, 0x00, 0x1b, 0x46, 0xf4, 0x89, 0x46, 0xf4, 0xb8, - 0x00, 0x00, 0x1b, 0x46, 0xf6, 0x89, 0x46, 0xf6, 0xb8, 0x00, 0x00, 0x19, - 0xc8, 0x89, 0xc1, 0xe9, 0xff, 0xfe, 0xa8, 0x10, 0x74, 0xa5, 0x8a, 0x46, - 0xfc, 0x98, 0xeb, 0x98, 0x83, 0x7e, 0xfe, 0x00, 0x7c, 0xb5, 0xeb, 0xaf, - 0xf7, 0x5e, 0xfe, 0xf7, 0x5e, 0xfc, 0x83, 0x5e, 0xfe, 0x00, 0xe9, 0xe0, - 0xfe, 0x8a, 0x44, 0x02, 0xa8, 0x04, 0x74, 0x14, 0x8b, 0x44, 0x0c, 0x89, - 0xc2, 0x8b, 0x5e, 0xec, 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, 0x07, - 0x2b, 0xe9, 0xc5, 0xfe, 0xa8, 0x02, 0x75, 0x03, 0xe9, 0xbe, 0xfe, 0x8b, - 0x44, 0x0c, 0x89, 0xc2, 0x8b, 0x5e, 0xec, 0x42, 0x01, 0xc3, 0x89, 0x54, - 0x0c, 0xc6, 0x07, 0x20, 0xe9, 0xaa, 0xfe, 0x77, 0x4a, 0x83, 0x7c, 0x08, - 0xff, 0x74, 0x04, 0xc6, 0x44, 0x19, 0x20, 0x8b, 0x5e, 0xec, 0x03, 0x5c, - 0x0c, 0x8c, 0x5e, 0xfa, 0x89, 0x5e, 0xf8, 0xf6, 0x44, 0x02, 0x80, 0x74, - 0x28, 0x83, 0x7c, 0x08, 0x00, 0x75, 0x25, 0x85, 0xc9, 0x75, 0x21, 0x83, - 0x7e, 0xf6, 0x00, 0x75, 0x1b, 0x83, 0x7e, 0xf4, 0x00, 0x75, 0x15, 0x83, - 0x7e, 0xf2, 0x00, 0x75, 0x0f, 0x8e, 0x46, 0xfa, 0x31, 0xc0, 0x26, 0xc6, - 0x07, 0x00, 0xe9, 0x9f, 0x02, 0xe9, 0xc8, 0x02, 0xe9, 0x69, 0x02, 0x3c, - 0x6f, 0x73, 0x46, 0x3c, 0x66, 0x72, 0x4c, 0x77, 0x4d, 0xf6, 0x44, 0x02, - 0x20, 0x74, 0x44, 0x83, 0x05, 0x04, 0x8b, 0x1d, 0x8b, 0x47, 0xfc, 0x89, - 0xf2, 0x89, 0x46, 0xfc, 0x8b, 0x47, 0xfe, 0x8b, 0x5e, 0xfc, 0x89, 0x46, - 0xfe, 0x89, 0xc1, 0x8b, 0x46, 0xec, 0xe8, 0x2d, 0xfc, 0xbb, 0xff, 0xff, - 0x8b, 0x46, 0xec, 0x8c, 0xda, 0xe8, 0x3b, 0xfb, 0x89, 0x44, 0x10, 0x89, - 0xf0, 0x8b, 0x56, 0xfa, 0xe8, 0xf7, 0xfc, 0x8b, 0x46, 0xf8, 0xe9, 0x90, - 0xf9, 0x77, 0x0e, 0xc7, 0x46, 0xf0, 0x08, 0x00, 0xe9, 0x62, 0xff, 0xe9, - 0x0c, 0x01, 0xe9, 0xfe, 0x00, 0x3c, 0x73, 0x73, 0x71, 0x3c, 0x70, 0x74, - 0x03, 0xe9, 0x11, 0xfe, 0x83, 0x7c, 0x06, 0x00, 0x75, 0x0b, 0xf6, 0x44, - 0x03, 0x04, 0x74, 0x58, 0xc7, 0x44, 0x06, 0x09, 0x00, 0x80, 0x64, 0x02, - 0xf9, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x4f, 0xfe, 0xf6, 0x44, 0x03, - 0x04, 0x74, 0x44, 0x83, 0xc3, 0x02, 0x89, 0x1d, 0x8b, 0x56, 0xec, 0x8b, - 0x47, 0xfe, 0xbb, 0x04, 0x00, 0xe8, 0x5f, 0xfb, 0x8b, 0x5e, 0xec, 0x89, - 0xc8, 0x8d, 0x57, 0x05, 0xc6, 0x47, 0x04, 0x3a, 0xbb, 0x04, 0x00, 0xe8, - 0x4d, 0xfb, 0x80, 0x7c, 0x18, 0x50, 0x75, 0x06, 0x8b, 0x46, 0xec, 0xe8, - 0x3d, 0x07, 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xf8, 0x8b, 0x56, 0xfa, 0xe8, - 0xb1, 0xfa, 0x89, 0x44, 0x0c, 0xe9, 0x73, 0xff, 0xe9, 0x2c, 0x02, 0xe9, - 0x31, 0x02, 0x77, 0x2c, 0x8b, 0x5e, 0xec, 0xc6, 0x07, 0x00, 0x8a, 0x44, - 0x03, 0xa8, 0x04, 0x74, 0x1c, 0x83, 0x05, 0x04, 0x8b, 0x1d, 0x8b, 0x47, - 0xfe, 0x8b, 0x7f, 0xfc, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xff, 0x74, 0x06, - 0x89, 0x7e, 0xf8, 0x89, 0x46, 0xfa, 0xe9, 0x2d, 0x01, 0xe9, 0x16, 0x01, - 0x3c, 0x78, 0x75, 0x4d, 0x8a, 0x44, 0x02, 0xa8, 0x01, 0x74, 0x3e, 0xa8, - 0x80, 0x74, 0x68, 0x85, 0xc9, 0x75, 0x12, 0x83, 0x7e, 0xf6, 0x00, 0x75, - 0x0c, 0x83, 0x7e, 0xf4, 0x00, 0x75, 0x06, 0x83, 0x7e, 0xf2, 0x00, 0x74, - 0x24, 0x8b, 0x44, 0x0c, 0x89, 0xc2, 0x8b, 0x5e, 0xec, 0x42, 0x01, 0xc3, - 0x89, 0x54, 0x0c, 0xc6, 0x07, 0x30, 0x8b, 0x44, 0x0c, 0x8b, 0x5e, 0xec, - 0x89, 0xc2, 0x01, 0xc3, 0x42, 0x8a, 0x44, 0x18, 0x89, 0x54, 0x0c, 0x88, - 0x07, 0xc7, 0x46, 0xf0, 0x10, 0x00, 0xe9, 0x68, 0xfe, 0x3c, 0x75, 0x75, - 0x03, 0xe9, 0x61, 0xfe, 0xe9, 0x1e, 0xfd, 0x3c, 0x69, 0x74, 0xf6, 0x3c, - 0x67, 0x74, 0x03, 0xe9, 0x13, 0xfd, 0x8b, 0x46, 0xec, 0x89, 0xf3, 0x89, - 0xfa, 0xff, 0x46, 0xf8, 0xff, 0x16, 0xf4, 0x07, 0xe9, 0xc8, 0xfe, 0x8b, - 0x46, 0xfe, 0x0b, 0x46, 0xfc, 0xeb, 0xa4, 0x77, 0x03, 0xe9, 0xe4, 0xfe, - 0x3c, 0x58, 0x73, 0x0a, 0x3c, 0x53, 0x75, 0x03, 0xe9, 0x45, 0xff, 0xe9, - 0xe7, 0xfc, 0x77, 0x03, 0xe9, 0x6d, 0xff, 0x3c, 0x63, 0x75, 0x1b, 0xc7, - 0x44, 0x10, 0x01, 0x00, 0xf6, 0x44, 0x02, 0x40, 0x75, 0x2c, 0x83, 0x05, - 0x02, 0x8b, 0x1d, 0x8a, 0x47, 0xfe, 0x8b, 0x5e, 0xec, 0x88, 0x07, 0xe9, - 0x89, 0xfe, 0x3c, 0x62, 0x75, 0xa9, 0xc7, 0x46, 0xf0, 0x02, 0x00, 0xe9, - 0xf7, 0xfd, 0x76, 0xa2, 0x3c, 0x47, 0x74, 0x9e, 0x3c, 0x46, 0x75, 0x03, - 0xe9, 0x3e, 0xfe, 0xe9, 0xa7, 0xfc, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8d, - 0x46, 0xee, 0x8b, 0x57, 0xfe, 0xe8, 0x9a, 0x05, 0x3d, 0xff, 0xff, 0x75, - 0x03, 0xe9, 0x57, 0xfe, 0x8b, 0x5e, 0xec, 0x8a, 0x46, 0xee, 0x88, 0x07, - 0x83, 0x3e, 0xf8, 0x07, 0x00, 0x74, 0xee, 0x88, 0xc3, 0x30, 0xff, 0x8a, - 0x87, 0x07, 0x0b, 0x24, 0x01, 0x30, 0xe4, 0x85, 0xc0, 0x74, 0xde, 0x8b, - 0x5e, 0xec, 0x8a, 0x46, 0xef, 0x88, 0x47, 0x01, 0xff, 0x44, 0x0c, 0xe9, - 0x29, 0xfe, 0xa8, 0x02, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x5f, 0xfe, - 0x85, 0xdb, 0x74, 0x06, 0x8c, 0x5e, 0xfa, 0x89, 0x5e, 0xf8, 0x80, 0x7c, - 0x18, 0x53, 0x75, 0x34, 0xf6, 0x44, 0x02, 0x20, 0x74, 0x20, 0x8b, 0x46, - 0xf8, 0x8b, 0x56, 0xfa, 0x8b, 0x5c, 0x08, 0xe8, 0x35, 0xf9, 0x89, 0x44, - 0x10, 0x83, 0x7c, 0x08, 0x00, 0x7c, 0x9a, 0x3b, 0x44, 0x08, 0x7e, 0x95, - 0x8b, 0x44, 0x08, 0xe9, 0xe6, 0xfd, 0x8b, 0x46, 0xf8, 0x8b, 0x56, 0xfa, - 0x8b, 0x5c, 0x08, 0xe8, 0x34, 0xf9, 0xeb, 0xde, 0xf6, 0x44, 0x02, 0x40, - 0x75, 0xec, 0xeb, 0xca, 0xff, 0x76, 0xf0, 0x8b, 0x46, 0xec, 0x8b, 0x5e, - 0xf6, 0x03, 0x44, 0x0c, 0x8b, 0x56, 0xf2, 0x50, 0x89, 0xc8, 0x8b, 0x4e, - 0xf4, 0xe8, 0xb5, 0x05, 0x80, 0x7c, 0x18, 0x58, 0x75, 0x06, 0x8b, 0x46, - 0xec, 0xe8, 0x67, 0x05, 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xf8, 0x8b, 0x56, - 0xfa, 0xe8, 0xdb, 0xf8, 0x89, 0x44, 0x10, 0x89, 0xc2, 0x3b, 0x44, 0x08, - 0x7c, 0x4a, 0xf6, 0x44, 0x02, 0x01, 0x75, 0x03, 0xe9, 0x90, 0xfd, 0x83, - 0x7e, 0xf0, 0x0a, 0x7d, 0xf7, 0x85, 0xc0, 0x74, 0x09, 0xc4, 0x5e, 0xf8, - 0x26, 0x80, 0x3f, 0x30, 0x74, 0xea, 0xff, 0x44, 0x0e, 0xe9, 0x77, 0xfd, - 0x83, 0x7c, 0x08, 0x00, 0x75, 0x0e, 0x8b, 0x46, 0xfe, 0x0b, 0x46, 0xfc, - 0x75, 0x06, 0x8e, 0x46, 0xfa, 0xe9, 0x1a, 0xfd, 0x8b, 0x5e, 0xec, 0x8b, - 0x4e, 0xf0, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0x03, 0x5c, 0x0c, 0xe8, - 0x63, 0x06, 0xeb, 0x94, 0x8b, 0x44, 0x08, 0x29, 0xd0, 0x89, 0x44, 0x0e, - 0xe9, 0x44, 0xfd, 0xc7, 0x44, 0x06, 0x04, 0x00, 0xe9, 0x76, 0xfd, 0xbb, - 0x04, 0x00, 0x8b, 0x56, 0xec, 0x89, 0xc8, 0xe9, 0x9d, 0xfd, 0x83, 0x05, - 0x02, 0x8b, 0x1d, 0x8b, 0x46, 0xec, 0x8b, 0x57, 0xfe, 0xe8, 0x5e, 0x04, - 0x3d, 0xff, 0xff, 0x74, 0x03, 0xe9, 0x18, 0xfd, 0xc7, 0x44, 0x10, 0x00, - 0x00, 0xe9, 0x13, 0xfd, 0x51, 0x89, 0xd1, 0x89, 0xc2, 0x8a, 0xc1, 0xb4, - 0x3d, 0xcd, 0x21, 0x72, 0x02, 0x89, 0x07, 0xe8, 0x86, 0x06, 0x59, 0xc3, - 0x53, 0x3b, 0x06, 0xae, 0x07, 0x72, 0x04, 0x31, 0xc0, 0x5b, 0xc3, 0x8b, - 0x1e, 0xd8, 0x07, 0xd1, 0xe0, 0x01, 0xc3, 0x8b, 0x07, 0x5b, 0xc3, 0x53, - 0x3b, 0x06, 0xae, 0x07, 0x72, 0x02, 0x5b, 0xc3, 0x8b, 0x1e, 0xd8, 0x07, - 0xd1, 0xe0, 0x01, 0xc3, 0x89, 0x17, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x89, - 0xc3, 0xb8, 0x00, 0x44, 0xcd, 0x21, 0x19, 0xc9, 0xf6, 0xc2, 0x80, 0x74, - 0x07, 0xb8, 0x01, 0x00, 0x5a, 0x59, 0x5b, 0xc3, 0x31, 0xc0, 0xeb, 0xf8, - 0x85, 0xd2, 0x75, 0x08, 0xc3, 0x85, 0xd2, 0x75, 0x03, 0x31, 0xc0, 0xc3, - 0x53, 0x51, 0x52, 0x56, 0x89, 0xc3, 0x88, 0xc2, 0x30, 0xe4, 0x89, 0xc1, - 0xe8, 0x5b, 0x00, 0x89, 0xc6, 0x89, 0x0c, 0x81, 0xfb, 0x00, 0x01, 0x73, - 0x41, 0x80, 0x3e, 0x82, 0x07, 0x03, 0x72, 0x33, 0x80, 0xfb, 0x50, 0x75, - 0x04, 0xb2, 0x0e, 0xeb, 0x07, 0x80, 0xfb, 0x22, 0x72, 0x1c, 0xb2, 0x13, - 0x88, 0xd3, 0x30, 0xff, 0x8a, 0x87, 0xda, 0x07, 0x98, 0x89, 0xc6, 0xe8, - 0x67, 0xe6, 0x89, 0xc3, 0x89, 0x37, 0xb8, 0xff, 0xff, 0x5e, 0x5a, 0x59, - 0x5b, 0xc3, 0x80, 0xfb, 0x20, 0x72, 0x04, 0xb2, 0x05, 0xeb, 0xdd, 0x80, - 0xfa, 0x13, 0x76, 0xd8, 0xeb, 0xd4, 0x88, 0xf8, 0x30, 0xe4, 0xeb, 0xd9, - 0x52, 0x89, 0xc2, 0xe8, 0x9a, 0xff, 0x89, 0xd0, 0x5a, 0xc3, 0xb8, 0xf6, - 0x0a, 0xc3, 0x51, 0x89, 0xd1, 0x89, 0xc2, 0xb4, 0x3c, 0xcd, 0x21, 0x72, - 0x02, 0x89, 0x07, 0xe8, 0xb2, 0x05, 0x59, 0xc3, 0x51, 0x89, 0xd1, 0x89, - 0xc2, 0xb4, 0x5b, 0xcd, 0x21, 0x72, 0x02, 0x89, 0x07, 0xe8, 0xa0, 0x05, - 0x59, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x57, 0x89, 0xc3, 0xd1, 0xe0, 0x81, - 0x3e, 0xd8, 0x07, 0xb0, 0x07, 0x74, 0x20, 0x8b, 0x0e, 0xd8, 0x07, 0x89, - 0xc2, 0x89, 0xc8, 0xe8, 0x98, 0x05, 0x89, 0xc2, 0x85, 0xd2, 0x75, 0x3b, - 0xe8, 0xee, 0xe5, 0x89, 0xc3, 0xc7, 0x07, 0x05, 0x00, 0x5f, 0x5e, 0x5a, - 0x59, 0x5b, 0xc3, 0x8b, 0x16, 0xae, 0x07, 0x89, 0x16, 0xf8, 0x0a, 0xe8, - 0xf9, 0xcf, 0x89, 0xc7, 0x89, 0xc2, 0x85, 0xc0, 0x74, 0xda, 0x8b, 0x0e, - 0xae, 0x07, 0xbe, 0xb0, 0x07, 0xd1, 0xe1, 0x57, 0x8c, 0xd8, 0x8e, 0xc0, - 0xd1, 0xe9, 0xf3, 0xa5, 0x13, 0xc9, 0xf3, 0xa4, 0x5f, 0xeb, 0xc1, 0x8b, - 0x3e, 0xae, 0x07, 0x89, 0xd9, 0x30, 0xc0, 0x2b, 0x0e, 0xae, 0x07, 0xd1, - 0xe7, 0xd1, 0xe1, 0x01, 0xd7, 0x57, 0x1e, 0x07, 0x8a, 0xe0, 0xd1, 0xe9, - 0xf3, 0xab, 0x13, 0xc9, 0xf3, 0xaa, 0x5f, 0x89, 0x16, 0xd8, 0x07, 0x89, - 0x1e, 0xae, 0x07, 0xeb, 0xa4, 0xa1, 0xd8, 0x07, 0x3d, 0xb0, 0x07, 0x75, - 0x01, 0xc3, 0xe8, 0x5b, 0xd0, 0xa1, 0xf8, 0x0a, 0xc7, 0x06, 0xd8, 0x07, - 0xb0, 0x07, 0xa3, 0xae, 0x07, 0xc3, 0x53, 0x51, 0x56, 0x89, 0xc3, 0xa1, - 0xae, 0x07, 0x39, 0xc3, 0x72, 0x10, 0x89, 0xc1, 0x3d, 0x01, 0x00, 0x7e, - 0x2d, 0xb8, 0x01, 0x00, 0x01, 0xc8, 0x40, 0xe8, 0x44, 0xff, 0x3b, 0x1e, - 0xae, 0x07, 0x73, 0x22, 0x89, 0xd9, 0xd1, 0xe1, 0x85, 0xd2, 0x74, 0x1f, - 0x89, 0xd8, 0xe8, 0x51, 0x05, 0x8b, 0x36, 0xd8, 0x07, 0x01, 0xce, 0x80, - 0xce, 0x40, 0x89, 0x14, 0x89, 0xd8, 0x5e, 0x59, 0x5b, 0xc3, 0x31, 0xc0, - 0xeb, 0xd2, 0xbb, 0xff, 0xff, 0xeb, 0xf1, 0x8b, 0x36, 0xd8, 0x07, 0x01, - 0xce, 0xeb, 0xe7, 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd7, 0xe8, 0x20, 0xfe, - 0x85, 0xc9, 0x7f, 0x06, 0x75, 0x12, 0x85, 0xdb, 0x76, 0x0e, 0xa8, 0x80, - 0x75, 0x0a, 0x80, 0xcc, 0x80, 0x89, 0xc2, 0x89, 0xf0, 0xe8, 0x1f, 0xfe, - 0x89, 0xfa, 0x89, 0xf0, 0xe8, 0x78, 0xeb, 0x5f, 0x5e, 0xc3, 0x53, 0x51, - 0xba, 0x01, 0x00, 0x31, 0xdb, 0x31, 0xc9, 0xe8, 0x69, 0xeb, 0x59, 0x5b, - 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, - 0xc6, 0x89, 0xd3, 0x8b, 0x7f, 0x04, 0x83, 0x7d, 0x04, 0x00, 0x74, 0x4b, - 0x31, 0xff, 0xf6, 0x47, 0x07, 0x04, 0x75, 0x4a, 0x89, 0x76, 0xfe, 0x31, - 0xc9, 0x8a, 0x04, 0x98, 0x85, 0xc0, 0x74, 0x0d, 0x89, 0xda, 0x46, 0xe8, - 0x2a, 0xf1, 0x3d, 0xff, 0xff, 0x75, 0xee, 0x89, 0xc1, 0x85, 0xff, 0x74, - 0x13, 0x80, 0x67, 0x07, 0xf9, 0x80, 0x4f, 0x07, 0x04, 0x85, 0xc9, 0x75, - 0x07, 0x89, 0xd8, 0xe8, 0x83, 0xeb, 0x89, 0xc1, 0x85, 0xc9, 0x75, 0x05, - 0x89, 0xf1, 0x2b, 0x4e, 0xfe, 0x89, 0xc8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0x59, 0x5b, 0xc3, 0x89, 0xd0, 0xe8, 0x9d, 0xf1, 0xeb, 0xae, 0x80, 0x67, - 0x07, 0xf9, 0xbf, 0x01, 0x00, 0x80, 0x4f, 0x07, 0x02, 0xeb, 0xa9, 0x53, - 0x51, 0x52, 0x56, 0x89, 0xc1, 0x8b, 0x36, 0xbc, 0x0a, 0x31, 0xd2, 0x85, - 0xf6, 0x74, 0x1a, 0x8b, 0x5c, 0x02, 0x85, 0x4f, 0x06, 0x75, 0x04, 0x8b, - 0x34, 0xeb, 0xf0, 0x42, 0xf6, 0x47, 0x07, 0x10, 0x74, 0xf5, 0x89, 0xd8, - 0xe8, 0x32, 0xeb, 0xeb, 0xee, 0x89, 0xd0, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, - 0xb8, 0xff, 0xff, 0xeb, 0xca, 0xa1, 0x8a, 0x07, 0xc7, 0x06, 0x8a, 0x07, - 0x00, 0x00, 0x85, 0xc0, 0x74, 0x01, 0xc3, 0xb4, 0x01, 0xcd, 0x21, 0x30, - 0xe4, 0xc3, 0x51, 0x89, 0xd9, 0x89, 0xc3, 0xb4, 0x3f, 0xcd, 0x21, 0x19, - 0xd2, 0x85, 0xd2, 0x7c, 0x02, 0x59, 0xc3, 0xe8, 0x6e, 0xfd, 0x59, 0xc3, - 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc6, 0x89, - 0x56, 0xfe, 0x89, 0xdf, 0xe8, 0x05, 0xfd, 0xa8, 0x80, 0x74, 0x14, 0xb0, - 0x02, 0x89, 0xf3, 0x31, 0xd2, 0x31, 0xc9, 0xb4, 0x42, 0xcd, 0x21, 0xd1, - 0xd2, 0xd1, 0xca, 0x85, 0xd2, 0x7c, 0x29, 0x8b, 0x56, 0xfe, 0x89, 0xf9, - 0x89, 0xf3, 0xb4, 0x40, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7c, 0x18, - 0x89, 0xc2, 0x39, 0xf8, 0x74, 0x09, 0xe8, 0xcc, 0xe3, 0x89, 0xc6, 0xc7, - 0x04, 0x0c, 0x00, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, - 0xe8, 0x15, 0xfd, 0xeb, 0xf4, 0xe9, 0x0d, 0x04, 0x53, 0x51, 0x56, 0x57, - 0x89, 0xc3, 0x89, 0xd0, 0x8c, 0xda, 0xe8, 0x0d, 0x04, 0x5f, 0x5e, 0x59, - 0x5b, 0xc3, 0x53, 0x89, 0xc3, 0x8c, 0xc8, 0x89, 0x47, 0x02, 0x8c, 0xd8, - 0x89, 0x47, 0x06, 0x8c, 0xc0, 0x89, 0x07, 0x8c, 0xd0, 0x89, 0x47, 0x04, - 0x5b, 0xc3, 0x53, 0x56, 0x89, 0xc3, 0x80, 0x3f, 0x00, 0x74, 0x23, 0x83, - 0x3e, 0xf8, 0x07, 0x00, 0x74, 0x22, 0x8a, 0x07, 0x30, 0xe4, 0x89, 0xc6, - 0x8a, 0x84, 0x07, 0x0b, 0x24, 0x01, 0x85, 0xc0, 0x74, 0x12, 0x80, 0x7f, - 0x01, 0x00, 0x75, 0x0c, 0xb8, 0x02, 0x00, 0x5e, 0x5b, 0xc3, 0xb8, 0x01, - 0x00, 0x5e, 0x5b, 0xc3, 0x31, 0xc0, 0x5e, 0x5b, 0xc3, 0x53, 0x52, 0x56, - 0x89, 0xc3, 0x8a, 0x07, 0x30, 0xe4, 0x83, 0x3e, 0xf8, 0x07, 0x00, 0x74, - 0x16, 0x89, 0xc6, 0x30, 0xf6, 0x8a, 0x94, 0x07, 0x0b, 0x80, 0xe2, 0x01, - 0x85, 0xd2, 0x74, 0x07, 0x88, 0xc4, 0x8a, 0x57, 0x01, 0x88, 0xd0, 0x5e, - 0x5a, 0x5b, 0xc3, 0xf6, 0xc4, 0xff, 0x74, 0x0c, 0x81, 0x3e, 0xfa, 0x07, - 0xa4, 0x03, 0x74, 0x01, 0xc3, 0xe9, 0x8d, 0x08, 0xe9, 0x98, 0x08, 0x53, - 0x56, 0x89, 0xc3, 0x83, 0x3e, 0xf8, 0x07, 0x00, 0x74, 0x1e, 0x8a, 0x07, - 0x30, 0xe4, 0x89, 0xc6, 0x8a, 0x84, 0x07, 0x0b, 0x24, 0x01, 0x85, 0xc0, - 0x74, 0x0e, 0x80, 0x7f, 0x01, 0x00, 0x74, 0x08, 0x83, 0xc3, 0x02, 0x89, - 0xd8, 0x5e, 0x5b, 0xc3, 0x43, 0xeb, 0xf8, 0x51, 0x8b, 0x0e, 0xfe, 0x0a, - 0xe8, 0x72, 0x08, 0x59, 0xc3, 0xc3, 0x89, 0xc3, 0xff, 0x16, 0xf0, 0x07, - 0xba, 0xff, 0x00, 0xb8, 0x10, 0x00, 0xe8, 0xd6, 0xec, 0x89, 0xd8, 0x89, - 0xc2, 0xff, 0x16, 0xf0, 0x07, 0xff, 0x16, 0xf2, 0x07, 0x89, 0xd0, 0xe9, - 0x58, 0xdc, 0x53, 0x89, 0xc3, 0x85, 0xc0, 0x74, 0x0d, 0xf6, 0xc6, 0xff, - 0x74, 0x0a, 0x88, 0x37, 0xb8, 0x02, 0x00, 0x88, 0x57, 0x01, 0x5b, 0xc3, - 0xb8, 0x01, 0x00, 0x88, 0x17, 0x5b, 0xc3, 0x51, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x83, 0xec, 0x24, 0x52, 0x89, 0xd9, 0xc6, 0x46, 0xdc, 0x00, 0x8d, - 0x76, 0xdd, 0x89, 0xd7, 0x8d, 0x5e, 0xfe, 0x89, 0x4e, 0xfe, 0x33, 0xd2, - 0xf7, 0x37, 0x89, 0x07, 0x89, 0xd3, 0x8a, 0x87, 0xde, 0x05, 0x88, 0x04, - 0x8b, 0x46, 0xfe, 0x46, 0x85, 0xc0, 0x75, 0xe4, 0x4e, 0x8a, 0x04, 0x88, - 0x05, 0x47, 0x84, 0xc0, 0x75, 0xf6, 0x8b, 0x46, 0xda, 0x89, 0xec, 0x5d, - 0x5f, 0x5e, 0x59, 0xc3, 0x56, 0x89, 0xd6, 0x83, 0xfb, 0x0a, 0x75, 0x04, - 0x85, 0xc0, 0x7c, 0x07, 0xe8, 0xac, 0xff, 0x89, 0xf0, 0x5e, 0xc3, 0xf7, - 0xd8, 0x42, 0xc6, 0x04, 0x2d, 0xeb, 0xf1, 0x53, 0x52, 0x89, 0xc2, 0x89, - 0xc3, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x0f, 0x2c, 0x61, 0x3c, 0x19, 0x76, - 0x03, 0x43, 0xeb, 0xf1, 0x04, 0x41, 0x88, 0x07, 0xeb, 0xf7, 0x89, 0xd0, - 0x5a, 0x5b, 0xc3, 0x53, 0x52, 0xbb, 0x01, 0x00, 0xb8, 0x8e, 0x04, 0x8c, - 0xda, 0xe9, 0x58, 0xeb, 0x53, 0x89, 0xc3, 0x8a, 0x9f, 0x07, 0x0b, 0x80, - 0xe3, 0x01, 0x30, 0xe7, 0x89, 0xd8, 0x5b, 0xc3, 0x31, 0xc0, 0xe9, 0x0a, - 0x07, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x48, 0x53, 0x8b, 0x76, - 0x08, 0x89, 0x76, 0xfc, 0x8d, 0x76, 0xb9, 0xc6, 0x46, 0xb8, 0x00, 0x89, - 0x76, 0xfe, 0x8b, 0x76, 0x0a, 0x8b, 0x5e, 0xb6, 0x89, 0x76, 0xfa, 0x8d, - 0x76, 0xfa, 0x8b, 0xfa, 0x85, 0xc0, 0x74, 0x28, 0x8b, 0xd0, 0x8b, 0xc3, - 0x33, 0xdb, 0x3b, 0x14, 0x72, 0x09, 0x8b, 0xd8, 0x8b, 0xc2, 0x33, 0xd2, - 0xf7, 0x34, 0x93, 0xf7, 0x34, 0x91, 0xf7, 0x34, 0x97, 0xf7, 0x34, 0x89, - 0x14, 0x8b, 0xd0, 0x8b, 0xc3, 0x8b, 0xd9, 0x8b, 0xcf, 0xe9, 0x2c, 0x00, - 0x85, 0xdb, 0x74, 0x14, 0x8b, 0xd3, 0x8b, 0xc1, 0x33, 0xdb, 0x33, 0xc9, - 0x3b, 0x14, 0x72, 0xde, 0x8b, 0xc8, 0x8b, 0xc2, 0x33, 0xd2, 0xeb, 0xd3, - 0x8b, 0xd1, 0x8b, 0xc7, 0x33, 0xc9, 0x33, 0xff, 0x3b, 0x14, 0x72, 0xcd, - 0x8b, 0xf8, 0x8b, 0xc2, 0x33, 0xd2, 0xeb, 0xc2, 0x8b, 0x7e, 0xfa, 0x89, - 0xde, 0x89, 0x5e, 0xb6, 0x8a, 0x9d, 0xde, 0x05, 0x8b, 0x7e, 0xfe, 0xff, - 0x46, 0xfe, 0x88, 0x1d, 0x85, 0xc0, 0x75, 0x82, 0x85, 0xf6, 0x74, 0x03, - 0xe9, 0x7b, 0xff, 0x85, 0xc9, 0x75, 0xf9, 0x85, 0xd2, 0x75, 0xf5, 0xff, - 0x4e, 0xfe, 0x8b, 0x76, 0xfe, 0x8a, 0x04, 0x8b, 0x76, 0xfc, 0xff, 0x46, - 0xfc, 0x88, 0x04, 0x84, 0xc0, 0x75, 0xec, 0x8b, 0x46, 0x08, 0x89, 0xec, - 0x5d, 0x5f, 0x5e, 0xc2, 0x04, 0x00, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, - 0xec, 0x02, 0x8b, 0x76, 0x08, 0x89, 0x76, 0xfe, 0x83, 0x7e, 0x0a, 0x0a, - 0x75, 0x0c, 0x85, 0xc0, 0x7c, 0x15, 0x75, 0x06, 0x85, 0xdb, 0x75, 0x02, - 0x85, 0xc9, 0xff, 0x76, 0x0a, 0xff, 0x76, 0xfe, 0xe8, 0x12, 0xff, 0x89, - 0xf0, 0xeb, 0xcb, 0x31, 0xff, 0x29, 0xd7, 0x89, 0xfa, 0xbf, 0x00, 0x00, - 0x19, 0xcf, 0x89, 0xf9, 0xbf, 0x00, 0x00, 0x19, 0xdf, 0x89, 0xfb, 0xbf, - 0x00, 0x00, 0x19, 0xc7, 0x89, 0xf8, 0x8d, 0x7c, 0x01, 0xc6, 0x04, 0x2d, - 0x89, 0x7e, 0xfe, 0xeb, 0xcd, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, - 0x24, 0x53, 0x51, 0xc6, 0x46, 0xdc, 0x00, 0x8d, 0x76, 0xdd, 0x89, 0xdf, - 0x8b, 0x5e, 0xd8, 0x89, 0x5e, 0xfe, 0x8d, 0x5e, 0xfe, 0x33, 0xc9, 0x3b, - 0x17, 0x72, 0x06, 0x92, 0x87, 0xd1, 0xf7, 0x37, 0x91, 0xf7, 0x37, 0x89, - 0x17, 0x8b, 0xd1, 0x8b, 0x5e, 0xfe, 0x8a, 0x9f, 0xde, 0x05, 0x88, 0x1c, - 0x46, 0x85, 0xd2, 0x75, 0xd7, 0x85, 0xc0, 0x75, 0xd3, 0x4e, 0x8a, 0x04, - 0x88, 0x05, 0x47, 0x84, 0xc0, 0x75, 0xf6, 0x8b, 0x46, 0xda, 0x89, 0xec, - 0x5d, 0x5f, 0x5e, 0xc3, 0x56, 0x89, 0xde, 0x83, 0xf9, 0x0a, 0x75, 0x04, - 0x85, 0xd2, 0x7c, 0x07, 0xe8, 0x9e, 0xff, 0x89, 0xf0, 0x5e, 0xc3, 0xf7, - 0xda, 0xc6, 0x07, 0x2d, 0xf7, 0xd8, 0x83, 0xda, 0x00, 0x43, 0xeb, 0xec, - 0x73, 0x07, 0x50, 0xe8, 0xca, 0xf9, 0x58, 0xeb, 0x02, 0x2b, 0xc0, 0xc3, - 0x73, 0x05, 0xe8, 0xbf, 0xf9, 0xeb, 0x02, 0x2b, 0xc0, 0xc3, 0x53, 0x51, - 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc3, 0x89, 0xd1, - 0x85, 0xc0, 0x74, 0x43, 0x85, 0xd2, 0x74, 0x46, 0xe8, 0xe7, 0x06, 0x89, - 0xc6, 0x89, 0xd8, 0xe8, 0xef, 0x06, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x75, - 0x23, 0x89, 0xc8, 0xe8, 0x55, 0xca, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x74, - 0x30, 0x8c, 0xda, 0x89, 0xf1, 0x89, 0xc7, 0x89, 0xde, 0x8e, 0xc2, 0x89, - 0xd8, 0xd1, 0xe9, 0xf3, 0xa5, 0x13, 0xc9, 0xf3, 0xa4, 0xe8, 0xf0, 0xca, - 0x8b, 0x46, 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x89, - 0xd0, 0xe8, 0x27, 0xca, 0xeb, 0xf1, 0xe8, 0xdb, 0xca, 0x31, 0xc0, 0xeb, - 0xea, 0x89, 0xf2, 0x89, 0xd8, 0xe8, 0xa5, 0x06, 0xeb, 0xde, 0x53, 0x52, - 0x3d, 0x05, 0x00, 0x7d, 0x10, 0x89, 0xc2, 0x8b, 0x1e, 0xd8, 0x07, 0xd1, - 0xe2, 0x01, 0xd3, 0xf6, 0x47, 0x01, 0x40, 0x74, 0x03, 0x5a, 0x5b, 0xc3, - 0x80, 0x4f, 0x01, 0x40, 0xe8, 0x05, 0xf9, 0x85, 0xc0, 0x74, 0xf2, 0x8b, - 0x1e, 0xd8, 0x07, 0x01, 0xd3, 0x80, 0x4f, 0x01, 0x20, 0x5a, 0x5b, 0xc3, - 0x52, 0x89, 0xc2, 0xe8, 0xc8, 0xff, 0x89, 0xd0, 0xe8, 0xbd, 0xf8, 0x5a, - 0xc3, 0x53, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0xe8, 0x35, 0xff, 0x5b, - 0xc3, 0x53, 0x89, 0xc3, 0xb4, 0x68, 0xf8, 0xcd, 0x21, 0xe8, 0x28, 0xff, - 0x5b, 0xc3, 0x55, 0x1e, 0x52, 0x50, 0x32, 0xff, 0x8b, 0xcb, 0xd1, 0xe3, - 0x03, 0xd9, 0x81, 0xc3, 0xc3, 0x43, 0x8c, 0xc9, 0x8e, 0xc1, 0xe8, 0x2c, - 0x00, 0x53, 0x1e, 0x55, 0x8b, 0xec, 0xc5, 0x5e, 0x06, 0x9c, 0x8f, 0x47, - 0x12, 0x89, 0x07, 0x89, 0x4f, 0x04, 0x89, 0x57, 0x06, 0x89, 0x77, 0x0a, - 0x89, 0x7f, 0x0c, 0x8f, 0x47, 0x08, 0x8f, 0x47, 0x0e, 0x8f, 0x47, 0x02, - 0x8c, 0x47, 0x10, 0x83, 0xc4, 0x04, 0x1f, 0x5d, 0xc3, 0x06, 0x53, 0x8e, - 0xda, 0x8b, 0xd8, 0xff, 0x77, 0x0e, 0x8b, 0x07, 0x8b, 0x4f, 0x04, 0x8b, - 0x57, 0x06, 0x8b, 0x77, 0x0a, 0x8b, 0x7f, 0x0c, 0x8b, 0x6f, 0x08, 0x8e, + 0x01, 0x00, 0x83, 0xc4, 0x04, 0x5b, 0xcb, 0x52, 0x55, 0x89, 0xe5, 0xba, + 0x75, 0x07, 0x89, 0xe0, 0x8e, 0xda, 0x2b, 0x06, 0x28, 0x08, 0x89, 0xec, + 0x5d, 0x5a, 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x52, 0x89, 0xca, 0x8e, + 0x46, 0xfe, 0x89, 0xde, 0x89, 0xc7, 0x57, 0x1e, 0x8e, 0xda, 0xf7, 0xc6, + 0x01, 0x00, 0x74, 0x06, 0xac, 0xaa, 0x3c, 0x00, 0x74, 0x1d, 0x8b, 0x04, + 0x84, 0xc0, 0x74, 0x16, 0xab, 0x84, 0xe4, 0x74, 0x12, 0x8b, 0x44, 0x02, + 0x84, 0xc0, 0x74, 0x0a, 0xab, 0x83, 0xc6, 0x04, 0x84, 0xe4, 0x75, 0xe6, + 0x74, 0x01, 0xaa, 0x1f, 0x5f, 0x89, 0xf8, 0x8c, 0xc2, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0xcb, 0x56, 0x57, 0x89, 0xde, 0x8e, 0xd9, 0x89, 0xc7, 0x8e, + 0xc2, 0x57, 0x83, 0xc9, 0xff, 0x32, 0xc0, 0xf2, 0xae, 0x4f, 0x8a, 0x04, + 0xaa, 0x84, 0xc0, 0x74, 0x0b, 0x8a, 0x44, 0x01, 0x83, 0xc6, 0x02, 0xaa, + 0x84, 0xc0, 0x75, 0xee, 0x5f, 0x89, 0xf8, 0x5f, 0x5e, 0xcb, 0x56, 0x57, + 0x89, 0xde, 0x89, 0xcf, 0xbb, 0x8c, 0x06, 0xb9, 0x75, 0x07, 0x0e, 0xe8, + 0x2a, 0x1d, 0x90, 0xbb, 0x8c, 0x06, 0xb9, 0x75, 0x07, 0xb8, 0x7e, 0x04, + 0x89, 0xca, 0x0e, 0xe8, 0x1a, 0x1d, 0x90, 0xbb, 0x8c, 0x06, 0xb9, 0x75, + 0x07, 0x89, 0xf0, 0x89, 0xfa, 0x0e, 0x3e, 0xe8, 0x0a, 0x1d, 0x5f, 0x5e, + 0xcb, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x1e, 0x08, 0x8b, 0x16, 0x1c, + 0x08, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, 0x04, 0xff, 0x1e, 0x1c, + 0x08, 0xbb, 0xff, 0x00, 0xb8, 0x82, 0x04, 0xba, 0x75, 0x07, 0xe9, 0x54, + 0x05, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd7, 0x8e, 0xda, 0xc5, + 0x5c, 0x06, 0x8b, 0x47, 0x0a, 0x8b, 0x57, 0x08, 0x85, 0xc0, 0x75, 0x04, + 0x85, 0xd2, 0x74, 0x5f, 0x8e, 0xdf, 0x8a, 0x44, 0x0b, 0xa8, 0x20, 0x74, + 0x0a, 0xa8, 0x06, 0x74, 0x06, 0xb8, 0x00, 0x20, 0xe8, 0x51, 0x1d, 0x8e, + 0xdf, 0x80, 0x64, 0x0a, 0xfb, 0xc5, 0x5c, 0x06, 0x8b, 0x57, 0x08, 0x8b, + 0x47, 0x0a, 0x8e, 0xdf, 0x89, 0x44, 0x02, 0x8b, 0x44, 0x0a, 0x30, 0xc0, + 0x80, 0xe4, 0x24, 0x89, 0x14, 0x3d, 0x00, 0x24, 0x75, 0x41, 0x8b, 0x44, + 0x0c, 0x85, 0xc0, 0x75, 0x3a, 0x89, 0x44, 0x04, 0x0e, 0xe8, 0x82, 0x1d, + 0x90, 0x89, 0xc2, 0x3d, 0xff, 0xff, 0x75, 0x1c, 0x8e, 0xdf, 0x8b, 0x44, + 0x04, 0x85, 0xc0, 0x7e, 0x46, 0x8e, 0xdf, 0x8b, 0x44, 0x04, 0x5f, 0x5e, + 0x59, 0x5b, 0xc3, 0x89, 0xf0, 0x89, 0xfa, 0xe8, 0x4e, 0x0b, 0xeb, 0x98, + 0x8e, 0xdf, 0xc5, 0x1c, 0x88, 0x07, 0x8e, 0xdf, 0xc7, 0x44, 0x04, 0x01, + 0x00, 0xeb, 0xde, 0x8e, 0xdf, 0xf6, 0x44, 0x0b, 0x04, 0x74, 0x17, 0xba, + 0x01, 0x00, 0x8e, 0xdf, 0x8b, 0x1c, 0x8b, 0x4c, 0x02, 0x8b, 0x44, 0x0c, + 0xe8, 0x51, 0x1d, 0x8e, 0xdf, 0x89, 0x44, 0x04, 0xeb, 0xb6, 0x8b, 0x54, + 0x0e, 0xeb, 0xe7, 0x75, 0x06, 0x80, 0x4c, 0x0a, 0x10, 0xeb, 0xb2, 0xc7, + 0x44, 0x04, 0x00, 0x00, 0x80, 0x4c, 0x0a, 0x20, 0xeb, 0xa7, 0x53, 0x51, + 0x56, 0x89, 0xc3, 0x89, 0xd1, 0xe8, 0x2d, 0xff, 0x85, 0xc0, 0x75, 0x05, + 0xb8, 0xff, 0xff, 0xeb, 0x9a, 0x8e, 0xd9, 0xff, 0x4f, 0x04, 0xff, 0x07, + 0xc5, 0x37, 0x8a, 0x44, 0xff, 0x30, 0xe4, 0xeb, 0x8a, 0x53, 0x51, 0x56, + 0x89, 0xc3, 0x89, 0xd1, 0x8e, 0xda, 0xc5, 0x77, 0x06, 0x8b, 0x44, 0x0c, + 0x3d, 0x01, 0x00, 0x74, 0x09, 0x85, 0xc0, 0x75, 0x5c, 0xc7, 0x44, 0x0c, + 0x01, 0x00, 0x8e, 0xd9, 0xf6, 0x47, 0x0a, 0x01, 0x75, 0x54, 0x0e, 0xe8, + 0x1d, 0xf7, 0x90, 0x89, 0xc6, 0x8e, 0xda, 0xc7, 0x04, 0x04, 0x00, 0x8e, + 0xd9, 0xb8, 0xff, 0xff, 0x80, 0x4f, 0x0a, 0x20, 0x8e, 0xd9, 0xf6, 0x47, + 0x0a, 0x40, 0x75, 0x2d, 0x3d, 0x0d, 0x00, 0x75, 0x1a, 0xff, 0x4f, 0x04, + 0x83, 0x7f, 0x04, 0x00, 0x7c, 0x4d, 0xc5, 0x37, 0x8a, 0x04, 0x8e, 0xc1, + 0x46, 0x26, 0x8c, 0x5f, 0x02, 0x8e, 0xd9, 0x30, 0xe4, 0x89, 0x37, 0x3d, + 0x1a, 0x00, 0x75, 0x09, 0x8e, 0xd9, 0xb8, 0xff, 0xff, 0x80, 0x4f, 0x0a, + 0x10, 0x5e, 0x59, 0x5b, 0xcb, 0xb8, 0xff, 0xff, 0xeb, 0xf7, 0xff, 0x4f, + 0x04, 0x83, 0x7f, 0x04, 0x00, 0x7c, 0x13, 0xc5, 0x37, 0x8a, 0x04, 0x8e, + 0xc1, 0x46, 0x26, 0x8c, 0x5f, 0x02, 0x8e, 0xd9, 0x30, 0xe4, 0x89, 0x37, + 0xeb, 0xa6, 0x89, 0xd8, 0x89, 0xca, 0xe8, 0x41, 0xff, 0xeb, 0x9d, 0x89, + 0xd8, 0x89, 0xca, 0xe8, 0x38, 0xff, 0xeb, 0xbb, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x04, 0x50, 0x89, 0xde, 0x89, 0xc8, 0x89, 0xd3, 0x8d, + 0x7e, 0xfc, 0x8b, 0x5e, 0xfa, 0x88, 0xd0, 0x89, 0xf2, 0xb4, 0x42, 0xcd, + 0x21, 0x36, 0x89, 0x05, 0x36, 0x89, 0x55, 0x02, 0xd1, 0xd2, 0xd1, 0xca, + 0x85, 0xd2, 0x7c, 0x0c, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0xc3, 0xe8, 0xa0, 0x18, 0x99, 0xeb, 0xf4, 0x53, 0x51, + 0x52, 0x56, 0x89, 0xc1, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, + 0x31, 0xf6, 0x85, 0xd2, 0x7c, 0x0e, 0x89, 0xc8, 0x31, 0xd2, 0xe8, 0x39, + 0x18, 0x89, 0xf0, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xe8, 0x78, 0x18, 0x89, + 0xc6, 0xeb, 0xeb, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x08, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0x8e, 0xda, 0xc7, 0x46, 0xfc, 0x00, + 0x00, 0xf6, 0x44, 0x0b, 0x10, 0x74, 0x03, 0xe9, 0x85, 0x00, 0xc5, 0x5c, + 0x06, 0x8b, 0x47, 0x0a, 0x8b, 0x57, 0x08, 0x85, 0xc0, 0x75, 0x04, 0x85, + 0xd2, 0x74, 0x41, 0x8e, 0x5e, 0xfe, 0x80, 0x64, 0x0a, 0xef, 0xf6, 0x44, + 0x0b, 0x20, 0x75, 0x34, 0x8b, 0x44, 0x04, 0x99, 0x89, 0xd3, 0x09, 0xc3, + 0x74, 0x14, 0x89, 0xd1, 0x89, 0xc3, 0xba, 0x01, 0x00, 0xf7, 0xd9, 0x8b, + 0x44, 0x0c, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xe8, 0x3e, 0xff, 0x83, 0xfa, + 0xff, 0x75, 0x11, 0x3d, 0xff, 0xff, 0x75, 0x0c, 0x8e, 0x5e, 0xfe, 0xc7, + 0x46, 0xfc, 0xff, 0xff, 0x80, 0x4c, 0x0a, 0x20, 0x8e, 0x5e, 0xfe, 0xc5, + 0x5c, 0x06, 0x8b, 0x47, 0x08, 0x8b, 0x57, 0x0a, 0x8e, 0x5e, 0xfe, 0xc7, + 0x44, 0x04, 0x00, 0x00, 0x89, 0x04, 0x89, 0x54, 0x02, 0x83, 0x7e, 0xfc, + 0x00, 0x75, 0x09, 0xc5, 0x5c, 0x06, 0xf6, 0x47, 0x0e, 0x01, 0x75, 0x65, + 0x8b, 0x46, 0xfc, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x80, + 0x64, 0x0b, 0xef, 0xf6, 0x44, 0x0a, 0x02, 0x74, 0xc3, 0xc5, 0x5c, 0x06, + 0x8b, 0x57, 0x0a, 0x8b, 0x47, 0x08, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, + 0x74, 0xb2, 0x8e, 0x5e, 0xfe, 0x89, 0x46, 0xf8, 0x89, 0x56, 0xfa, 0x8b, + 0x7c, 0x04, 0x85, 0xff, 0x74, 0xa2, 0x83, 0x7e, 0xfc, 0x00, 0x75, 0x9c, + 0x8e, 0x5e, 0xfe, 0x8b, 0x5e, 0xf8, 0x8b, 0x4e, 0xfa, 0x89, 0xfa, 0x8b, + 0x44, 0x0c, 0xe8, 0x39, 0x1b, 0x89, 0xc1, 0x3d, 0xff, 0xff, 0x75, 0x13, + 0x8e, 0x5e, 0xfe, 0x89, 0x46, 0xfc, 0x80, 0x4c, 0x0a, 0x20, 0x01, 0x4e, + 0xf8, 0x29, 0xcf, 0xeb, 0xcd, 0xeb, 0x1b, 0x85, 0xc0, 0x75, 0xf3, 0x0e, + 0x3e, 0xe8, 0x2f, 0xf5, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x0c, 0x00, + 0x8e, 0x5e, 0xfe, 0xc7, 0x46, 0xfc, 0xff, 0xff, 0xeb, 0xd8, 0x8e, 0x5e, + 0xfe, 0x8b, 0x44, 0x0c, 0x0e, 0xe8, 0x58, 0x1b, 0x90, 0x3d, 0xff, 0xff, + 0x74, 0x03, 0xe9, 0x6b, 0xff, 0x89, 0x46, 0xfc, 0xe9, 0x65, 0xff, 0xe8, + 0xc9, 0xfe, 0xcb, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x14, + 0x89, 0xc2, 0x8e, 0xd9, 0x8b, 0x07, 0x89, 0x46, 0xec, 0x8b, 0x47, 0x02, + 0x89, 0x46, 0xee, 0x8b, 0x47, 0x04, 0x89, 0x46, 0xf0, 0x8b, 0x47, 0x06, + 0x89, 0x46, 0xf2, 0x8b, 0x47, 0x08, 0x89, 0x46, 0xf6, 0x8b, 0x47, 0x0a, + 0xc5, 0x5e, 0x10, 0x89, 0x46, 0xf8, 0x8b, 0x47, 0x06, 0x89, 0x46, 0xfa, + 0x8b, 0x07, 0x8c, 0xd1, 0x89, 0x46, 0xfc, 0x88, 0xd0, 0x8d, 0x5e, 0xec, + 0x30, 0xe4, 0x31, 0xd2, 0x0e, 0xe8, 0xfe, 0x1a, 0x90, 0xc5, 0x5e, 0x0c, + 0x8b, 0x46, 0xec, 0x89, 0x07, 0x8b, 0x46, 0xee, 0x89, 0x47, 0x02, 0x8b, + 0x46, 0xf0, 0x89, 0x47, 0x04, 0x8b, 0x46, 0xf2, 0x89, 0x47, 0x06, 0x8b, + 0x46, 0xf6, 0x89, 0x47, 0x08, 0x8b, 0x46, 0xf8, 0x89, 0x47, 0x0a, 0xf6, + 0x46, 0xfe, 0x01, 0x74, 0x23, 0xb8, 0x01, 0x00, 0xc5, 0x5e, 0x0c, 0x89, + 0x47, 0x0c, 0xc5, 0x5e, 0x10, 0x8b, 0x46, 0xfa, 0x89, 0x47, 0x06, 0x8b, + 0x46, 0xfc, 0x89, 0x07, 0x8b, 0x46, 0xec, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0x5a, 0xca, 0x08, 0x00, 0x31, 0xc0, 0xeb, 0xdc, 0x52, 0x56, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x08, 0x89, 0xc6, 0x8d, 0x46, 0xf8, 0x8c, 0xd2, 0x0e, + 0x3e, 0xe8, 0x0b, 0x1e, 0x16, 0x8d, 0x56, 0xf8, 0x52, 0xff, 0x76, 0x0c, + 0xff, 0x76, 0x0a, 0x89, 0xf0, 0x0e, 0xe8, 0x3a, 0xff, 0x89, 0xec, 0x5d, + 0x5e, 0x5a, 0xca, 0x04, 0x00, 0x56, 0x89, 0xc6, 0x8e, 0xda, 0x88, 0xd8, + 0x8b, 0x1c, 0x8d, 0x57, 0x01, 0x8e, 0x44, 0x02, 0x89, 0x14, 0x26, 0x88, + 0x07, 0xff, 0x44, 0x0c, 0x5e, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, + 0xc6, 0x89, 0xd7, 0xb8, 0x9d, 0x34, 0x50, 0xff, 0x76, 0x0c, 0xff, 0x76, + 0x0a, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, 0x75, 0x13, 0x8e, 0xdf, 0x01, 0xc6, + 0xc6, 0x04, 0x00, 0x5d, 0x5f, 0x5e, 0xca, 0x04, 0x00, 0x00, 0x53, 0x51, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x50, 0x52, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0x8b, 0x1e, 0xc6, 0x0d, 0xa1, 0xc8, 0x0d, 0x89, 0x5e, + 0xfc, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xdb, 0x74, 0x33, + 0x85, 0xd2, 0x75, 0x06, 0x83, 0x7e, 0xf8, 0x00, 0x74, 0x29, 0xc5, 0x5e, + 0xfc, 0x8b, 0x0f, 0x8b, 0x5f, 0x02, 0x85, 0xdb, 0x75, 0x04, 0x85, 0xc9, + 0x74, 0x19, 0x8b, 0x7e, 0xf8, 0x8b, 0x76, 0xf6, 0x89, 0xc8, 0x89, 0xda, + 0x0e, 0xe8, 0x83, 0x1d, 0x90, 0x85, 0xc0, 0x74, 0x08, 0x83, 0x46, 0xfc, + 0x04, 0xeb, 0xd7, 0xeb, 0x6e, 0x89, 0xf8, 0x89, 0xf2, 0x0e, 0x3e, 0xe8, + 0x6d, 0x1d, 0x85, 0xc0, 0x75, 0x42, 0x89, 0xc8, 0x89, 0xda, 0x0e, 0xe8, + 0x8d, 0x1d, 0x36, 0x0e, 0x3e, 0xe8, 0xac, 0x1d, 0x89, 0x46, 0xfa, 0x89, + 0xf2, 0x89, 0xf8, 0x0e, 0x3e, 0xe8, 0x7b, 0x1d, 0x8b, 0x56, 0xfa, 0x0e, + 0x3e, 0xe8, 0x98, 0x1d, 0x29, 0xc2, 0x75, 0xc5, 0x89, 0xc8, 0x89, 0xda, + 0x0e, 0xe8, 0xaf, 0x1d, 0x90, 0x89, 0xd3, 0x89, 0xc1, 0x89, 0xf8, 0x89, + 0xf2, 0x0e, 0x3e, 0xe8, 0xa1, 0x1d, 0x89, 0xd6, 0x89, 0xc7, 0xeb, 0x9c, + 0x89, 0xc8, 0x89, 0xda, 0x0e, 0xe8, 0x4b, 0x1d, 0x90, 0x3d, 0x3d, 0x00, + 0x75, 0x9b, 0x89, 0xc8, 0x89, 0xda, 0x0e, 0xe8, 0x85, 0x1d, 0x90, 0x89, + 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xcb, 0x31, 0xc0, 0x31, 0xd2, 0xeb, + 0xf2, 0x56, 0x89, 0xc6, 0x8e, 0xda, 0x84, 0xdb, 0x74, 0x11, 0xc6, 0x04, + 0x2f, 0x89, 0xf0, 0xc6, 0x44, 0x01, 0x63, 0x8c, 0xda, 0xc6, 0x44, 0x02, + 0x00, 0x5e, 0xcb, 0xb8, 0x00, 0x37, 0xcd, 0x21, 0x88, 0x14, 0xeb, 0xe9, + 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0x8d, 0x56, 0x12, 0x8b, 0x5e, 0x0e, + 0x16, 0x8b, 0x4e, 0x10, 0x52, 0x8b, 0x46, 0x0c, 0x0e, 0xe8, 0x5f, 0x1d, + 0x90, 0x5d, 0x5a, 0x59, 0x5b, 0xcb, 0xe9, 0x77, 0xe9, 0x89, 0xc1, 0x89, + 0xd6, 0x0e, 0x3e, 0xe8, 0xa1, 0xf9, 0x85, 0xc0, 0x75, 0x07, 0x89, 0xc8, + 0x89, 0xf2, 0xe9, 0x63, 0xe9, 0x89, 0xd8, 0xe9, 0x41, 0xe9, 0x53, 0x51, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x1e, 0xce, 0x0d, 0x8b, 0x0e, 0xd0, + 0x0d, 0xa1, 0xd2, 0x0d, 0x0e, 0xe8, 0x87, 0xdc, 0x90, 0xe9, 0x45, 0x1d, + 0x89, 0xc0, 0x53, 0x52, 0x55, 0x89, 0xe5, 0x89, 0xc3, 0x83, 0x3f, 0x00, + 0x75, 0x06, 0x89, 0xec, 0x5d, 0x5a, 0x5b, 0xc3, 0x1e, 0xff, 0x17, 0x1f, + 0xeb, 0xf4, 0x53, 0x52, 0x55, 0x89, 0xe5, 0x89, 0xc3, 0x8b, 0x47, 0x02, + 0x8b, 0x17, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, 0xe0, 0x1e, 0xff, + 0x1f, 0x1f, 0xeb, 0xda, 0x53, 0x51, 0x52, 0x56, 0x55, 0x89, 0xe5, 0x89, + 0xc2, 0x1e, 0xe8, 0xe0, 0xe9, 0xb9, 0x0e, 0x09, 0xbb, 0xea, 0x08, 0x89, + 0xce, 0x88, 0xd0, 0x81, 0xfb, 0x0e, 0x09, 0x73, 0x16, 0x80, 0x3f, 0x02, + 0x75, 0x05, 0x83, 0xc3, 0x06, 0xeb, 0xf0, 0x3a, 0x47, 0x01, 0x72, 0xf6, + 0x89, 0xde, 0x8a, 0x47, 0x01, 0xeb, 0xef, 0x81, 0xfe, 0x0e, 0x09, 0x74, + 0x15, 0x8d, 0x44, 0x02, 0x80, 0x3c, 0x00, 0x75, 0x08, 0xe8, 0x8a, 0xff, + 0xc6, 0x04, 0x02, 0xeb, 0xc7, 0xe8, 0x9a, 0xff, 0xeb, 0xf6, 0x1f, 0x89, + 0xec, 0x5d, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x55, 0x89, + 0xe5, 0x89, 0xc3, 0x89, 0xd1, 0x1e, 0xe8, 0x88, 0xe9, 0x88, 0xde, 0xb9, + 0x26, 0x09, 0xbb, 0x0e, 0x09, 0x89, 0xce, 0x88, 0xf0, 0x81, 0xfb, 0x26, + 0x09, 0x73, 0x16, 0x80, 0x3f, 0x02, 0x75, 0x05, 0x83, 0xc3, 0x06, 0xeb, + 0xf0, 0x3a, 0x47, 0x01, 0x77, 0xf6, 0x89, 0xde, 0x8a, 0x47, 0x01, 0xeb, + 0xef, 0x81, 0xfe, 0x26, 0x09, 0x74, 0x1c, 0x3a, 0x54, 0x01, 0x73, 0x05, + 0xc6, 0x04, 0x02, 0xeb, 0xcd, 0x8d, 0x44, 0x02, 0x80, 0x3c, 0x00, 0x75, + 0x05, 0xe8, 0x26, 0xff, 0xeb, 0xee, 0xe8, 0x39, 0xff, 0xeb, 0xe9, 0x1f, + 0x89, 0xec, 0x5d, 0x5e, 0x59, 0x5b, 0xc3, 0x00, 0xc3, 0x52, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x89, 0xc2, 0x8e, 0xd9, 0x8b, 0x4e, + 0x0c, 0xc7, 0x46, 0xfc, 0x00, 0x00, 0x8a, 0x07, 0x3c, 0x20, 0x75, 0x03, + 0x43, 0xeb, 0xf7, 0x3c, 0x09, 0x74, 0xf9, 0x84, 0xc0, 0x74, 0x30, 0x30, + 0xc0, 0x80, 0x3f, 0x22, 0x74, 0x20, 0x89, 0x5e, 0xf8, 0x8c, 0x5e, 0xfa, + 0x8c, 0x5e, 0xfe, 0x89, 0xde, 0x8e, 0x46, 0xfe, 0x80, 0x3f, 0x22, 0x75, + 0x53, 0x85, 0xd2, 0x75, 0x15, 0x43, 0x84, 0xc0, 0x75, 0x09, 0xb0, 0x02, + 0xeb, 0xee, 0xb0, 0x01, 0x43, 0xeb, 0xdb, 0x30, 0xc0, 0xeb, 0xe5, 0xe9, + 0x9a, 0x00, 0x3c, 0x01, 0x75, 0x36, 0x85, 0xc9, 0x75, 0x06, 0x83, 0x7e, + 0x0a, 0x00, 0x74, 0x5e, 0x8b, 0x7e, 0xfc, 0xd1, 0xe7, 0xd1, 0xe7, 0x8e, + 0xc1, 0x03, 0x7e, 0x0a, 0x8b, 0x46, 0xf8, 0x26, 0x89, 0x05, 0x8b, 0x46, + 0xfa, 0x26, 0x89, 0x45, 0x02, 0x8a, 0x07, 0xff, 0x46, 0xfc, 0x84, 0xc0, + 0x74, 0x4e, 0x8e, 0x46, 0xfe, 0x43, 0x26, 0xc6, 0x04, 0x00, 0xeb, 0x82, + 0x80, 0x3f, 0x20, 0x75, 0x2f, 0x84, 0xc0, 0x74, 0xc1, 0x80, 0x3f, 0x00, + 0x74, 0xbc, 0x80, 0x3f, 0x5c, 0x75, 0x11, 0x85, 0xd2, 0x75, 0x24, 0x80, + 0x7f, 0x01, 0x22, 0x75, 0x07, 0x43, 0x80, 0x7f, 0xfe, 0x5c, 0x74, 0x84, + 0x85, 0xc9, 0x75, 0x2a, 0x83, 0x7e, 0x0a, 0x00, 0x75, 0x24, 0x43, 0xe9, + 0x76, 0xff, 0xeb, 0x44, 0x80, 0x3f, 0x09, 0x74, 0xcc, 0xeb, 0xce, 0x80, + 0x7f, 0x01, 0x22, 0x75, 0x05, 0x43, 0xeb, 0xe0, 0xeb, 0x14, 0x80, 0x7f, + 0x01, 0x5c, 0x75, 0xd8, 0x3c, 0x01, 0x74, 0xf1, 0xeb, 0xd2, 0x8a, 0x27, + 0x26, 0x88, 0x24, 0x46, 0xeb, 0xd4, 0x8e, 0x46, 0xfe, 0x26, 0x88, 0x04, + 0xc4, 0x76, 0x0e, 0x26, 0x89, 0x1c, 0x89, 0xf3, 0x8b, 0x46, 0xfc, 0x26, + 0x8c, 0x5f, 0x02, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0xc2, 0x08, 0x00, + 0xff, 0x46, 0xfc, 0x80, 0x3f, 0x00, 0x74, 0xe0, 0xe9, 0x05, 0xff, 0x55, + 0x89, 0xe5, 0x56, 0x57, 0x83, 0xec, 0x0a, 0x50, 0x53, 0x51, 0x8d, 0x56, + 0xf2, 0x16, 0x31, 0xc0, 0x52, 0x8b, 0x5e, 0x04, 0x50, 0x8b, 0x4e, 0x06, + 0x50, 0x8b, 0x46, 0xf0, 0xe8, 0xca, 0xfe, 0x89, 0xc2, 0x8b, 0x46, 0xf2, + 0x2b, 0x46, 0x04, 0x89, 0xc3, 0x05, 0x02, 0x00, 0x24, 0xfe, 0x42, 0x89, + 0x46, 0xf6, 0x89, 0xd0, 0xd1, 0xe0, 0xd1, 0xe0, 0x8b, 0x56, 0xf6, 0x05, + 0x04, 0x00, 0x01, 0xc2, 0x42, 0x80, 0xe2, 0xfe, 0xbe, 0x75, 0x07, 0x89, + 0xd0, 0x43, 0x0e, 0xe8, 0xc8, 0xeb, 0x90, 0x89, 0xc7, 0x85, 0xc0, 0x74, + 0x30, 0x31, 0xc0, 0x89, 0x46, 0xf8, 0x89, 0x46, 0xfa, 0x85, 0xf6, 0x75, + 0x31, 0x85, 0xff, 0x75, 0x2d, 0xc5, 0x5e, 0x08, 0x89, 0x07, 0xc5, 0x5e, + 0x0c, 0x8b, 0x46, 0xf8, 0x89, 0x07, 0x8b, 0x46, 0xfa, 0x89, 0xf2, 0x89, + 0x47, 0x02, 0x89, 0xf8, 0x8d, 0x66, 0xfc, 0x5f, 0x5e, 0x5d, 0xc2, 0x0c, + 0x00, 0x89, 0xd0, 0x0e, 0x3e, 0xe8, 0x89, 0xda, 0x89, 0xc7, 0x89, 0xd6, + 0xeb, 0xc3, 0x8b, 0x4e, 0x06, 0x53, 0x89, 0xf8, 0x89, 0xf2, 0x8b, 0x5e, + 0x04, 0x0e, 0x3e, 0xe8, 0x9b, 0xe7, 0x8b, 0x5e, 0xf6, 0x8b, 0x46, 0xee, + 0x8d, 0x56, 0xf2, 0x8e, 0xde, 0x16, 0x01, 0xfb, 0x52, 0x89, 0x5e, 0xf8, + 0x89, 0x07, 0x8b, 0x46, 0xec, 0x56, 0x89, 0x47, 0x02, 0x8d, 0x47, 0x04, + 0x89, 0xf1, 0x50, 0x89, 0xfb, 0x8b, 0x46, 0xf0, 0xe8, 0x1e, 0xfe, 0x40, + 0x89, 0xc3, 0xd1, 0xe3, 0xd1, 0xe3, 0x8e, 0xde, 0x03, 0x5e, 0xf8, 0xc7, + 0x07, 0x00, 0x00, 0x89, 0x76, 0xfa, 0xc7, 0x47, 0x02, 0x00, 0x00, 0xeb, + 0x80, 0x53, 0x51, 0x52, 0xb8, 0x75, 0x07, 0x50, 0xb8, 0xaa, 0x0d, 0x50, + 0xb8, 0x75, 0x07, 0x50, 0xb8, 0xb2, 0x0d, 0x50, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0xff, 0x36, 0x43, 0x08, 0x8b, 0x1e, 0x45, 0x08, 0x8b, 0x0e, 0x47, + 0x08, 0xff, 0x36, 0x41, 0x08, 0xa1, 0xd4, 0x0d, 0xe8, 0xec, 0xfe, 0xbb, + 0x75, 0x07, 0x8e, 0xdb, 0xa3, 0xba, 0x0d, 0x89, 0x16, 0xbc, 0x0d, 0xa1, + 0xb2, 0x0d, 0x8b, 0x16, 0xac, 0x0d, 0xa3, 0xb4, 0x0d, 0xa3, 0xd2, 0x0d, + 0x89, 0x16, 0xb0, 0x0d, 0xa1, 0xaa, 0x0d, 0x89, 0x16, 0xd0, 0x0d, 0xa3, + 0xae, 0x0d, 0xa3, 0xce, 0x0d, 0x5a, 0x59, 0x5b, 0xc3, 0x52, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0xa1, 0xbc, 0x0d, 0x8b, 0x16, 0xba, 0x0d, 0x85, 0xc0, + 0x75, 0x06, 0x85, 0xd2, 0x75, 0x02, 0x5a, 0xc3, 0x89, 0xd0, 0x8b, 0x16, + 0xbc, 0x0d, 0x0e, 0xe8, 0xc4, 0xda, 0x90, 0x5a, 0xc3, 0x52, 0x89, 0xc2, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x4c, 0x08, 0x89, 0x16, 0x4c, 0x08, + 0x5a, 0xcb, 0x31, 0xc0, 0xcb, 0x53, 0x56, 0x57, 0x89, 0xc6, 0xb8, 0x75, + 0x07, 0x31, 0xff, 0x8e, 0xd8, 0xb8, 0x75, 0x07, 0x8b, 0x1e, 0x10, 0x08, + 0x85, 0xdb, 0x74, 0x15, 0x39, 0xde, 0x72, 0x09, 0x8e, 0xd8, 0x89, 0xdf, + 0x8b, 0x5f, 0x04, 0xeb, 0xef, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x89, 0x77, + 0x02, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x89, 0x7c, 0x02, 0x89, 0x5c, 0x04, + 0x85, 0xff, 0x74, 0x3e, 0x89, 0x75, 0x04, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0xc7, 0x44, 0x10, 0x00, 0x00, 0xc7, 0x44, 0x08, 0x00, 0x00, 0xc7, 0x44, + 0x0c, 0x00, 0x00, 0x8d, 0x44, 0x10, 0xc7, 0x44, 0x0e, 0x00, 0x00, 0x89, + 0x44, 0x12, 0x8b, 0x1c, 0x89, 0x44, 0x14, 0x83, 0xeb, 0x16, 0x89, 0x44, + 0x06, 0x89, 0x5c, 0x16, 0x01, 0xf3, 0x8d, 0x44, 0x16, 0xc7, 0x47, 0x16, + 0xff, 0xff, 0x5f, 0x5e, 0x5b, 0xc3, 0x89, 0x36, 0x10, 0x08, 0xeb, 0xbf, + 0x53, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x10, 0x08, 0x85, 0xc0, 0x74, + 0x14, 0x89, 0xc3, 0x8b, 0x5f, 0x12, 0x8b, 0x07, 0x01, 0xd8, 0x05, 0x02, + 0x00, 0x3b, 0x06, 0x20, 0x08, 0x75, 0x04, 0x8b, 0x07, 0x5b, 0xcb, 0x31, + 0xc0, 0x5b, 0xcb, 0x53, 0x51, 0x89, 0xc3, 0x89, 0xd1, 0x8e, 0xda, 0x8b, + 0x07, 0x89, 0xc2, 0x83, 0xc2, 0x03, 0x80, 0xe2, 0xfe, 0x39, 0xc2, 0x73, + 0x05, 0x31, 0xc0, 0x59, 0x5b, 0xc3, 0x0e, 0xe8, 0xba, 0xff, 0x39, 0xd0, + 0x72, 0x2a, 0x31, 0xd2, 0x89, 0xd0, 0x83, 0xc2, 0x1e, 0x39, 0xc2, 0x72, + 0xe8, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x4e, 0x08, 0x39, 0xc2, 0x73, + 0x05, 0x89, 0xc2, 0x80, 0xe2, 0xfe, 0x8e, 0xd9, 0x89, 0x17, 0x85, 0xd2, + 0x74, 0xcf, 0xb8, 0x01, 0x00, 0x59, 0x5b, 0xc3, 0x29, 0xc2, 0xeb, 0xd4, + 0x53, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0xa1, 0x4c, 0x08, 0x85, 0xc0, 0x74, 0x09, 0x83, 0x3e, 0x20, 0x08, + 0xfe, 0x75, 0x0a, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x5b, + 0xcb, 0x8d, 0x46, 0xfe, 0x8c, 0xd2, 0xe8, 0x82, 0xff, 0x85, 0xc0, 0x74, + 0xec, 0xb8, 0x75, 0x07, 0x8b, 0x5e, 0xfe, 0x8e, 0xd8, 0x03, 0x1e, 0x20, + 0x08, 0x3b, 0x1e, 0x20, 0x08, 0x73, 0x03, 0xbb, 0xfe, 0xff, 0x89, 0xd8, + 0x0e, 0xe8, 0xca, 0x18, 0x90, 0x89, 0xc6, 0x3d, 0xff, 0xff, 0x74, 0xc7, + 0x3d, 0xf8, 0xff, 0x77, 0xc2, 0x39, 0xc3, 0x76, 0xbe, 0x29, 0xc3, 0x89, + 0x5e, 0xfe, 0x8d, 0x47, 0xfe, 0x39, 0xd8, 0x77, 0xb2, 0xba, 0x75, 0x07, + 0x8e, 0xda, 0x89, 0x46, 0xfe, 0x8b, 0x1e, 0x10, 0x08, 0x85, 0xdb, 0x74, + 0x0b, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x83, 0x7f, 0x04, 0x00, 0x75, 0x48, + 0x85, 0xdb, 0x74, 0x5f, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x07, 0x8d, + 0x7c, 0xfe, 0x01, 0xd8, 0x39, 0xc7, 0x75, 0x4f, 0x83, 0x46, 0xfe, 0x02, + 0x8b, 0x46, 0xfe, 0x01, 0x07, 0x8b, 0x46, 0xfe, 0x89, 0xc6, 0x01, 0xfe, + 0x89, 0x05, 0xc7, 0x04, 0xff, 0xff, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x80, + 0x0d, 0x01, 0xc7, 0x47, 0x0a, 0xff, 0xff, 0x8d, 0x45, 0x02, 0xff, 0x47, + 0x0c, 0x0e, 0x3e, 0xe8, 0x2f, 0xea, 0xb8, 0x01, 0x00, 0xe9, 0x51, 0xff, + 0x39, 0xf3, 0x76, 0x0a, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x5f, 0x04, + 0xeb, 0x9b, 0x8b, 0x07, 0x01, 0xd8, 0x05, 0x02, 0x00, 0x39, 0xf0, 0x73, + 0x9f, 0xeb, 0xe9, 0x83, 0x7e, 0xfe, 0x1c, 0x73, 0x03, 0xe9, 0x2b, 0xff, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x46, 0xfe, 0x89, 0x04, 0x89, 0xf0, + 0x89, 0xf3, 0xe8, 0x08, 0xfe, 0x89, 0xc7, 0xeb, 0xa9, 0x52, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x50, 0x8e, 0xd9, 0xc5, 0x77, 0x06, 0x8b, 0x44, 0x0c, + 0x3d, 0x01, 0x00, 0x74, 0x0c, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x8b, 0x00, + 0xc7, 0x44, 0x0c, 0x01, 0x00, 0x8e, 0xd9, 0xf6, 0x47, 0x0a, 0x02, 0x75, + 0x03, 0xe9, 0x85, 0x00, 0xc5, 0x77, 0x06, 0x8b, 0x44, 0x0a, 0x8b, 0x7c, + 0x08, 0x85, 0xc0, 0x75, 0x0b, 0x85, 0xff, 0x75, 0x07, 0x89, 0xd8, 0x89, + 0xca, 0xe8, 0x8c, 0x00, 0xbe, 0x00, 0x04, 0x83, 0x7e, 0xfe, 0x0a, 0x75, + 0x2e, 0x8e, 0xd9, 0xbe, 0x00, 0x06, 0xf6, 0x47, 0x0a, 0x40, 0x75, 0x23, + 0x80, 0x4f, 0x0b, 0x10, 0xc5, 0x3f, 0xc6, 0x05, 0x0d, 0x8e, 0xd9, 0xff, + 0x07, 0xff, 0x47, 0x04, 0x8b, 0x47, 0x04, 0x3b, 0x47, 0x0e, 0x75, 0x0b, + 0x89, 0xd8, 0x89, 0xca, 0xe8, 0x84, 0xf6, 0x85, 0xc0, 0x75, 0x2c, 0x8e, + 0xd9, 0x80, 0x4f, 0x0b, 0x10, 0xc5, 0x3f, 0x8a, 0x46, 0xfe, 0x88, 0x05, + 0x8e, 0xd9, 0xff, 0x07, 0xff, 0x47, 0x04, 0x85, 0x77, 0x0a, 0x75, 0x08, + 0x8b, 0x47, 0x04, 0x3b, 0x47, 0x0e, 0x75, 0x2d, 0x89, 0xd8, 0x89, 0xca, + 0xe8, 0x58, 0xf6, 0x85, 0xc0, 0x74, 0x22, 0xb8, 0xff, 0xff, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x5a, 0xcb, 0x0e, 0x3e, 0xe8, 0x7d, 0xec, 0x89, 0xc6, + 0x8e, 0xda, 0xc7, 0x04, 0x04, 0x00, 0x8e, 0xd9, 0xb8, 0xff, 0xff, 0x80, + 0x4f, 0x0a, 0x20, 0xeb, 0xe1, 0x8a, 0x46, 0xfe, 0x30, 0xe4, 0xeb, 0xda, + 0x53, 0x51, 0x56, 0x89, 0xc3, 0x89, 0xd1, 0xe8, 0x7a, 0xf0, 0x8e, 0xd9, + 0x83, 0x7f, 0x0e, 0x00, 0x75, 0x0c, 0x8a, 0x47, 0x0b, 0xa8, 0x02, 0x74, + 0x65, 0xc7, 0x47, 0x0e, 0x86, 0x00, 0x8e, 0xd9, 0x8b, 0x47, 0x0e, 0x0e, + 0x3e, 0xe8, 0xa9, 0xd6, 0x8e, 0xd9, 0xc5, 0x77, 0x06, 0x89, 0x44, 0x08, + 0x89, 0x54, 0x0a, 0x8e, 0xd9, 0xc5, 0x77, 0x06, 0x8b, 0x44, 0x0a, 0x8b, + 0x54, 0x08, 0x85, 0xc0, 0x75, 0x4e, 0x85, 0xd2, 0x75, 0x4a, 0x8e, 0xd9, + 0x80, 0x67, 0x0b, 0xf8, 0x80, 0x4f, 0x0b, 0x04, 0xc5, 0x77, 0x06, 0x8d, + 0x47, 0x10, 0x89, 0x4c, 0x0a, 0x89, 0x44, 0x08, 0x8e, 0xd9, 0xc7, 0x47, + 0x0e, 0x01, 0x00, 0x8e, 0xd9, 0xc5, 0x77, 0x06, 0x8b, 0x44, 0x08, 0x8b, + 0x54, 0x0a, 0x8e, 0xd9, 0xc7, 0x47, 0x04, 0x00, 0x00, 0x89, 0x07, 0x89, + 0x57, 0x02, 0x5e, 0x59, 0x5b, 0xc3, 0xa8, 0x04, 0x74, 0x07, 0xc7, 0x47, + 0x0e, 0x40, 0x00, 0xeb, 0x95, 0xc7, 0x47, 0x0e, 0x00, 0x02, 0xeb, 0x8e, + 0x8e, 0xd9, 0x80, 0x4f, 0x0a, 0x08, 0xeb, 0xcb, 0x56, 0x89, 0xc6, 0x8e, + 0xc2, 0x8e, 0xd9, 0xc7, 0x47, 0x04, 0x00, 0x00, 0x26, 0x8a, 0x04, 0x3c, + 0x2d, 0x74, 0x0b, 0x3c, 0x23, 0x75, 0x0d, 0x80, 0x4f, 0x04, 0x01, 0x46, + 0xeb, 0xee, 0x80, 0x4f, 0x04, 0x08, 0xeb, 0xf7, 0x3c, 0x2b, 0x75, 0x0a, + 0x80, 0x4f, 0x04, 0x04, 0x80, 0x67, 0x04, 0xfd, 0xeb, 0xe9, 0x3c, 0x20, + 0x75, 0x0c, 0xf6, 0x47, 0x04, 0x04, 0x75, 0xdf, 0x80, 0x4f, 0x04, 0x02, + 0xeb, 0xd9, 0x3c, 0x30, 0x75, 0x05, 0x88, 0x47, 0x1b, 0xeb, 0xd0, 0x89, + 0xf0, 0x8c, 0xc2, 0x5e, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x04, 0x8b, 0x7e, 0x08, 0x89, 0xc6, 0x8e, 0xda, 0x89, 0x5e, 0xfc, 0x89, + 0x4e, 0xfe, 0x8e, 0x46, 0x0a, 0x89, 0xfb, 0x8c, 0xc1, 0x26, 0xc6, 0x45, + 0x1b, 0x20, 0xe8, 0x8b, 0xff, 0x8e, 0x46, 0x0a, 0x89, 0xc3, 0x8e, 0xda, + 0x26, 0xc7, 0x45, 0x08, 0x00, 0x00, 0x89, 0xc6, 0x80, 0x3f, 0x2a, 0x74, + 0x27, 0x8e, 0x46, 0x0a, 0x8a, 0x04, 0x3c, 0x30, 0x7c, 0x3a, 0x3c, 0x39, + 0x7f, 0x36, 0xba, 0x0a, 0x00, 0x26, 0x8b, 0x45, 0x08, 0xf7, 0xea, 0x89, + 0xc2, 0x8a, 0x04, 0x98, 0x2d, 0x30, 0x00, 0x01, 0xc2, 0x46, 0x26, 0x89, + 0x55, 0x08, 0xeb, 0xdc, 0xc4, 0x5e, 0xfc, 0x26, 0x83, 0x07, 0x02, 0x26, + 0xc4, 0x07, 0x89, 0xc3, 0x26, 0x8b, 0x47, 0xfe, 0x8e, 0x46, 0x0a, 0x26, + 0x89, 0x45, 0x08, 0x85, 0xc0, 0x7c, 0x42, 0x46, 0x8e, 0x46, 0x0a, 0x26, + 0xc7, 0x45, 0x0a, 0xff, 0xff, 0x80, 0x3c, 0x2e, 0x75, 0x5a, 0x46, 0x26, + 0xc7, 0x45, 0x0a, 0x00, 0x00, 0x80, 0x3c, 0x2a, 0x74, 0x32, 0x8e, 0x46, + 0x0a, 0x8a, 0x04, 0x3c, 0x30, 0x7c, 0x45, 0x3c, 0x39, 0x7f, 0x41, 0xba, + 0x0a, 0x00, 0x26, 0x8b, 0x45, 0x0a, 0xf7, 0xea, 0x89, 0xc2, 0x8a, 0x04, + 0x98, 0x2d, 0x30, 0x00, 0x01, 0xc2, 0x46, 0x26, 0x89, 0x55, 0x0a, 0xeb, + 0xdc, 0x26, 0xf7, 0x5d, 0x08, 0x26, 0x80, 0x4d, 0x04, 0x08, 0xeb, 0xb3, + 0xc4, 0x5e, 0xfc, 0x26, 0x83, 0x07, 0x02, 0x26, 0xc4, 0x07, 0x89, 0xc3, + 0x26, 0x8b, 0x47, 0xfe, 0x8e, 0x46, 0x0a, 0x26, 0x89, 0x45, 0x0a, 0x85, + 0xc0, 0x7c, 0x21, 0x46, 0x8a, 0x04, 0x8d, 0x54, 0x01, 0x3c, 0x68, 0x73, + 0x1f, 0x3c, 0x4c, 0x73, 0x55, 0x3c, 0x49, 0x75, 0x53, 0x80, 0x7c, 0x01, + 0x36, 0x75, 0x3f, 0x80, 0x7c, 0x02, 0x34, 0x75, 0x39, 0xe9, 0x99, 0x00, + 0x26, 0xc7, 0x45, 0x0a, 0xff, 0xff, 0xeb, 0xd7, 0x8d, 0x5c, 0x02, 0x77, + 0x12, 0x80, 0x7c, 0x01, 0x68, 0x75, 0x53, 0x8e, 0x46, 0x0a, 0x89, 0xde, + 0x26, 0x80, 0x4d, 0x04, 0x10, 0xeb, 0x17, 0x3c, 0x74, 0x73, 0x23, 0x3c, + 0x6c, 0x75, 0x34, 0x3a, 0x44, 0x01, 0x75, 0x24, 0x8e, 0x46, 0x0a, 0x89, + 0xde, 0x26, 0x80, 0x4d, 0x04, 0x80, 0x89, 0xf0, 0x8c, 0xda, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0xc2, 0x04, 0x00, 0xeb, 0x24, 0xeb, 0x38, 0x76, 0x59, + 0x3c, 0x7a, 0x74, 0x55, 0x3c, 0x77, 0x75, 0xe6, 0x8e, 0x46, 0x0a, 0x46, + 0x26, 0x80, 0x4d, 0x04, 0x40, 0xeb, 0xdb, 0x3c, 0x6a, 0x75, 0xd7, 0x8e, + 0x46, 0x0a, 0x89, 0xd6, 0xeb, 0xcb, 0xeb, 0x25, 0x76, 0x39, 0x3c, 0x57, + 0x74, 0x14, 0x3c, 0x4e, 0x75, 0xc4, 0x8e, 0x46, 0x0a, 0x89, 0xd6, 0x26, + 0x80, 0x4d, 0x05, 0x02, 0xeb, 0xb8, 0x3c, 0x46, 0x75, 0xb4, 0x8e, 0x46, + 0x0a, 0x46, 0x26, 0x80, 0x4d, 0x05, 0x04, 0xeb, 0xa9, 0x8e, 0x46, 0x0a, + 0x89, 0xd6, 0x26, 0x80, 0x4d, 0x04, 0x20, 0xeb, 0x9d, 0x8e, 0x46, 0x0a, + 0x83, 0xc6, 0x03, 0xeb, 0x90, 0xeb, 0x0c, 0x8e, 0x46, 0x0a, 0x89, 0xd6, + 0x26, 0x80, 0x4d, 0x05, 0x01, 0xeb, 0x87, 0x46, 0xeb, 0x84, 0x56, 0x57, + 0x89, 0xc6, 0x89, 0xd7, 0x89, 0xda, 0x8e, 0xdf, 0x31, 0xc0, 0x39, 0xd0, + 0x74, 0x0b, 0x89, 0xf3, 0x46, 0x80, 0x3f, 0x00, 0x74, 0x03, 0x40, 0xeb, + 0xf1, 0x5f, 0x5e, 0xc3, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x04, 0x89, 0xdf, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0x31, 0xc9, 0x83, 0xfb, + 0xff, 0x75, 0x2a, 0x8e, 0x5e, 0xfe, 0x8b, 0x04, 0x85, 0xc0, 0x74, 0x18, + 0x89, 0xc3, 0x8c, 0xd2, 0x8d, 0x46, 0xfc, 0x83, 0xc6, 0x02, 0x0e, 0xe8, + 0xcd, 0x14, 0x90, 0x3d, 0xff, 0xff, 0x74, 0xe3, 0x01, 0xc1, 0xeb, 0xdf, + 0x89, 0xc8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, 0x8e, 0x5e, 0xfe, + 0x8b, 0x04, 0x85, 0xc0, 0x74, 0x1c, 0x39, 0xf9, 0x7f, 0x18, 0x89, 0xc3, + 0x8c, 0xd2, 0x8d, 0x46, 0xfc, 0x83, 0xc6, 0x02, 0x0e, 0xe8, 0x9f, 0x14, + 0x90, 0x3d, 0xff, 0xff, 0x74, 0xdf, 0x01, 0xc1, 0xeb, 0xdb, 0x39, 0xf9, + 0x7e, 0xce, 0x89, 0xf8, 0xeb, 0xcc, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x0c, 0x53, 0x89, 0xcf, 0x89, 0x56, 0xfe, 0xba, 0x10, 0x00, 0x8d, + 0x5e, 0xf4, 0x8c, 0xd1, 0x0e, 0xe8, 0xf9, 0x14, 0x90, 0x8d, 0x46, 0xf4, + 0x8c, 0xd2, 0x8b, 0x5e, 0xf2, 0x0e, 0x3e, 0xe8, 0x92, 0xe0, 0x89, 0xc6, + 0x8b, 0x46, 0xfe, 0x8e, 0xdf, 0x01, 0xc3, 0x89, 0xf2, 0x83, 0xc6, 0xff, + 0x85, 0xd2, 0x7e, 0x13, 0x89, 0xc2, 0x83, 0xc3, 0xff, 0x05, 0xff, 0xff, + 0x85, 0xd2, 0x7e, 0x07, 0x8a, 0x52, 0xf4, 0x88, 0x17, 0xeb, 0xe4, 0x8b, + 0x5e, 0xf2, 0x8e, 0xdf, 0x01, 0xc3, 0x89, 0xc2, 0x83, 0xc3, 0xff, 0x05, + 0xff, 0xff, 0x85, 0xd2, 0x7e, 0x05, 0xc6, 0x07, 0x30, 0xeb, 0xef, 0x8b, + 0x5e, 0xf2, 0x8e, 0xdf, 0x03, 0x5e, 0xfe, 0xc6, 0x07, 0x00, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, + 0x89, 0xc6, 0x89, 0x56, 0xfa, 0x89, 0x5e, 0xf6, 0x89, 0x4e, 0xf8, 0x85, + 0xc9, 0x7c, 0x36, 0xc5, 0x5e, 0x08, 0x83, 0x7f, 0x0a, 0xff, 0x75, 0x05, + 0xc7, 0x47, 0x0a, 0x04, 0x00, 0xba, 0x0a, 0x00, 0x8b, 0x4e, 0xfa, 0x8b, + 0x46, 0xf8, 0x89, 0xf3, 0x0e, 0xe8, 0x69, 0x14, 0x90, 0x89, 0x76, 0xfc, + 0x8b, 0x46, 0xfa, 0x8e, 0x5e, 0xfa, 0x89, 0x46, 0xfe, 0x8d, 0x44, 0x01, + 0x80, 0x3c, 0x00, 0x74, 0x16, 0x89, 0xc6, 0xeb, 0xf4, 0x8e, 0xda, 0xf7, + 0x5e, 0xf8, 0xc6, 0x04, 0x2d, 0xf7, 0x5e, 0xf6, 0x83, 0x5e, 0xf8, 0x00, + 0x46, 0xeb, 0xb8, 0xc5, 0x5e, 0x08, 0x83, 0x7f, 0x0a, 0x00, 0x74, 0x40, + 0x8e, 0x5e, 0xfa, 0x31, 0xff, 0xc6, 0x04, 0x2e, 0x89, 0xc6, 0xc5, 0x5e, + 0x08, 0x3b, 0x7f, 0x0a, 0x7d, 0x28, 0x8b, 0x46, 0xf6, 0xbb, 0x0a, 0x00, + 0x31, 0xd2, 0x31, 0xc9, 0xc7, 0x46, 0xf8, 0x00, 0x00, 0x0e, 0x3e, 0xe8, + 0x4a, 0xdb, 0x89, 0x56, 0xf8, 0x89, 0x46, 0xf6, 0x8a, 0x46, 0xf8, 0x8e, + 0x5e, 0xfa, 0x04, 0x30, 0x47, 0x88, 0x04, 0x46, 0xeb, 0xd0, 0x8e, 0x5e, + 0xfa, 0xc6, 0x04, 0x00, 0xf6, 0x46, 0xf7, 0x80, 0x75, 0x03, 0xe9, 0xd5, + 0xfd, 0x8b, 0x46, 0xfa, 0x3b, 0x46, 0xfe, 0x75, 0x05, 0x3b, 0x76, 0xfc, + 0x74, 0x1a, 0x83, 0xc6, 0xff, 0x8e, 0xd8, 0x80, 0x3c, 0x2e, 0x75, 0x03, + 0x83, 0xc6, 0xff, 0x8e, 0x5e, 0xfa, 0x80, 0x3c, 0x39, 0x75, 0x3f, 0xc6, + 0x04, 0x30, 0xeb, 0xdc, 0x8e, 0xd8, 0xc6, 0x04, 0x31, 0x8e, 0x5e, 0xfa, + 0x46, 0x8a, 0x04, 0x8d, 0x7c, 0x01, 0x3c, 0x30, 0x75, 0x04, 0x89, 0xfe, + 0xeb, 0xf3, 0x3c, 0x2e, 0x75, 0x13, 0xc6, 0x04, 0x30, 0x8d, 0x75, 0x01, + 0x88, 0x05, 0x8e, 0x5e, 0xfa, 0x80, 0x3c, 0x30, 0x75, 0x03, 0x46, 0xeb, + 0xf8, 0x8e, 0x5e, 0xfa, 0xc6, 0x04, 0x30, 0x46, 0xc6, 0x04, 0x00, 0xe9, + 0x74, 0xfd, 0xfe, 0x04, 0xe9, 0x6f, 0xfd, 0x53, 0x89, 0xc3, 0x8e, 0xda, + 0xf6, 0x47, 0x04, 0x08, 0x75, 0x22, 0x80, 0x7f, 0x1b, 0x30, 0x75, 0x1c, + 0x8b, 0x47, 0x08, 0x2b, 0x47, 0x0e, 0x2b, 0x47, 0x10, 0x2b, 0x47, 0x12, + 0x2b, 0x47, 0x14, 0x2b, 0x47, 0x16, 0x2b, 0x47, 0x18, 0x85, 0xc0, 0x7e, + 0x03, 0x01, 0x47, 0x10, 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x06, 0x50, 0x52, 0x89, 0xde, 0x89, 0x4e, 0xfe, 0x8e, 0x5e, 0xfe, + 0x83, 0x7c, 0x12, 0x00, 0x7f, 0x08, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, + 0x02, 0x00, 0x8e, 0x5e, 0xf6, 0x8b, 0x5e, 0xf8, 0x8d, 0x46, 0xfa, 0x8c, + 0xd2, 0x8b, 0x1f, 0x83, 0x46, 0xf8, 0x02, 0x0e, 0x3e, 0xe8, 0x9b, 0x12, + 0x89, 0xc1, 0x3d, 0xff, 0xff, 0x74, 0xd2, 0x8e, 0x5e, 0xfe, 0x3b, 0x44, + 0x12, 0x7f, 0x25, 0x8d, 0x7e, 0xfa, 0x8c, 0x56, 0xfc, 0x49, 0x83, 0xf9, + 0xff, 0x74, 0xbe, 0x8e, 0x5e, 0xfc, 0x8a, 0x05, 0x98, 0x8b, 0x56, 0xfe, + 0x89, 0xc3, 0x89, 0xf0, 0xff, 0x56, 0x08, 0x8e, 0x5e, 0xfe, 0x47, 0xff, + 0x4c, 0x12, 0xeb, 0xe1, 0xc7, 0x44, 0x12, 0x00, 0x00, 0xeb, 0xa7, 0xfc, + 0xa9, 0x42, 0x27, 0x48, 0x01, 0x48, 0x27, 0x48, 0xa9, 0x42, 0x8d, 0x44, + 0xa9, 0x42, 0x27, 0x48, 0x27, 0x48, 0x27, 0x48, 0x27, 0x48, 0x27, 0x48, + 0x27, 0x48, 0x27, 0x48, 0x27, 0x48, 0xe7, 0x46, 0x27, 0x48, 0x27, 0x48, + 0xe3, 0x44, 0x27, 0x48, 0x27, 0x48, 0x27, 0x48, 0x27, 0x48, 0x73, 0x45, + 0x27, 0x48, 0x27, 0x48, 0x27, 0x48, 0x27, 0x48, 0x27, 0x48, 0x27, 0x48, + 0x27, 0x48, 0x27, 0x48, 0xa9, 0x42, 0x27, 0x46, 0xa2, 0x47, 0xd2, 0x45, + 0xa9, 0x42, 0x8d, 0x44, 0xa9, 0x42, 0x27, 0x48, 0xd2, 0x45, 0x27, 0x48, + 0x27, 0x48, 0x27, 0x48, 0x27, 0x48, 0x27, 0x48, 0x2e, 0x46, 0xe7, 0x46, + 0x27, 0x48, 0x27, 0x48, 0xe3, 0x44, 0x27, 0x48, 0xd2, 0x45, 0x27, 0x48, + 0x27, 0x48, 0x73, 0x45, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x1a, + 0x8b, 0x76, 0x08, 0x89, 0x46, 0xfc, 0x89, 0x56, 0xfe, 0x8e, 0xd9, 0x8e, + 0x46, 0x0a, 0x26, 0xc7, 0x44, 0x18, 0x00, 0x00, 0x89, 0x46, 0xf4, 0x26, + 0x8b, 0x44, 0x18, 0x26, 0x89, 0x44, 0x16, 0x26, 0x89, 0x44, 0x14, 0x26, + 0x89, 0x44, 0x12, 0x26, 0x89, 0x44, 0x10, 0x26, 0x89, 0x44, 0x0e, 0x26, + 0x8a, 0x44, 0x1a, 0x89, 0x56, 0xf6, 0x3c, 0x69, 0x73, 0x53, 0x3c, 0x64, + 0x75, 0x4a, 0x8e, 0x46, 0x0a, 0x26, 0x8a, 0x44, 0x04, 0xa8, 0x80, 0x74, + 0x41, 0x83, 0x07, 0x08, 0xc4, 0x3f, 0x26, 0x8b, 0x45, 0xfe, 0x89, 0x46, + 0xf2, 0x26, 0x8b, 0x45, 0xfc, 0x89, 0x46, 0xf0, 0x26, 0x8b, 0x45, 0xfa, + 0x89, 0x46, 0xee, 0x26, 0x8b, 0x45, 0xf8, 0x89, 0x46, 0xec, 0xe9, 0x13, + 0x01, 0xff, 0x76, 0x0a, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0xbf, 0x75, + 0x07, 0x8c, 0xd9, 0x56, 0x8e, 0xdf, 0xff, 0x46, 0xf4, 0xff, 0x1e, 0x98, + 0x08, 0xe9, 0x09, 0x02, 0xeb, 0x41, 0xe9, 0xaf, 0x00, 0x76, 0xaf, 0x3c, + 0x78, 0x75, 0x2e, 0x8e, 0x46, 0x0a, 0x26, 0x8a, 0x44, 0x04, 0xa8, 0x80, + 0x74, 0x35, 0x83, 0x07, 0x08, 0xc4, 0x3f, 0x26, 0x8b, 0x45, 0xfe, 0x89, + 0x46, 0xf2, 0x26, 0x8b, 0x45, 0xfc, 0x89, 0x46, 0xf0, 0x26, 0x8b, 0x45, + 0xfa, 0x89, 0x46, 0xee, 0x26, 0x8b, 0x45, 0xf8, 0x89, 0x46, 0xec, 0xeb, + 0x29, 0x3c, 0x75, 0x74, 0xce, 0x3c, 0x6f, 0x74, 0xca, 0xeb, 0x1f, 0x3c, + 0x62, 0x74, 0xc4, 0x3c, 0x58, 0xeb, 0xf4, 0xa8, 0x40, 0x74, 0x30, 0x83, + 0x07, 0x04, 0xc4, 0x3f, 0x26, 0x8b, 0x45, 0xfc, 0x89, 0x46, 0xf8, 0x26, + 0x8b, 0x45, 0xfe, 0x89, 0x46, 0xfa, 0x8e, 0x46, 0x0a, 0x26, 0x8a, 0x44, + 0x1a, 0x2c, 0x41, 0xc7, 0x46, 0xea, 0x0a, 0x00, 0x3c, 0x37, 0x77, 0x59, + 0x30, 0xe4, 0x89, 0xc7, 0xd1, 0xe7, 0x2e, 0xff, 0xa5, 0xc4, 0x41, 0x83, + 0x07, 0x02, 0xc4, 0x3f, 0xc7, 0x46, 0xfa, 0x00, 0x00, 0x26, 0x8b, 0x45, + 0xfe, 0x8e, 0x46, 0x0a, 0x89, 0x46, 0xf8, 0x26, 0xf6, 0x44, 0x04, 0x20, + 0x74, 0x07, 0xc7, 0x46, 0xfa, 0x00, 0x00, 0xeb, 0xc1, 0x26, 0xf6, 0x44, + 0x04, 0x10, 0x74, 0xba, 0x8a, 0x46, 0xf8, 0x30, 0xe4, 0x89, 0x46, 0xf8, + 0x30, 0xc0, 0xeb, 0xab, 0xa8, 0x40, 0x74, 0x18, 0x83, 0x07, 0x04, 0xc4, + 0x3f, 0x26, 0x8b, 0x45, 0xfc, 0x89, 0x46, 0xf8, 0x26, 0x8b, 0x45, 0xfe, + 0x89, 0x46, 0xfa, 0xeb, 0x2b, 0xe9, 0x93, 0x04, 0x83, 0x07, 0x02, 0xc4, + 0x3f, 0x26, 0x8b, 0x45, 0xfe, 0x99, 0x8e, 0x46, 0x0a, 0x89, 0x46, 0xf8, + 0x26, 0x8a, 0x44, 0x04, 0x89, 0x56, 0xfa, 0xa8, 0x20, 0x75, 0x03, 0xe9, + 0x76, 0x00, 0x8b, 0x46, 0xf8, 0x99, 0x89, 0x46, 0xf8, 0x89, 0x56, 0xfa, + 0x8e, 0x46, 0x0a, 0x30, 0xc0, 0x26, 0xf6, 0x44, 0x04, 0x80, 0x74, 0x6a, + 0x83, 0x7e, 0xf2, 0x00, 0x7c, 0x10, 0x75, 0x0a, 0x83, 0x7e, 0xf0, 0x00, + 0x75, 0x04, 0x83, 0x7e, 0xee, 0x00, 0x84, 0xc0, 0x74, 0x69, 0x8e, 0x46, + 0x0a, 0x26, 0x8b, 0x44, 0x0e, 0x89, 0xc2, 0x8b, 0x7e, 0xfc, 0x42, 0x01, + 0xc7, 0x26, 0x89, 0x54, 0x0e, 0x8e, 0x46, 0xfe, 0x26, 0xc6, 0x05, 0x2d, + 0x8e, 0x46, 0x0a, 0x26, 0xf6, 0x44, 0x04, 0x80, 0x74, 0x38, 0x31, 0xc0, + 0x2b, 0x46, 0xec, 0x89, 0x46, 0xec, 0xb8, 0x00, 0x00, 0x1b, 0x46, 0xee, + 0x89, 0x46, 0xee, 0xb8, 0x00, 0x00, 0x1b, 0x46, 0xf0, 0x89, 0x46, 0xf0, + 0xb8, 0x00, 0x00, 0x1b, 0x46, 0xf2, 0x89, 0x46, 0xf2, 0xe9, 0xfe, 0xfe, + 0xa8, 0x10, 0x74, 0x90, 0x8a, 0x46, 0xf8, 0x98, 0xeb, 0x83, 0x83, 0x7e, + 0xfa, 0x00, 0x7c, 0xa6, 0xeb, 0xa0, 0xf7, 0x5e, 0xfa, 0xf7, 0x5e, 0xf8, + 0x83, 0x5e, 0xfa, 0x00, 0xe9, 0xdf, 0xfe, 0x8e, 0x46, 0x0a, 0x26, 0x8a, + 0x44, 0x04, 0xa8, 0x04, 0x74, 0x1a, 0x26, 0x8b, 0x44, 0x0e, 0x89, 0xc2, + 0x8b, 0x7e, 0xfc, 0x42, 0x01, 0xc7, 0x26, 0x89, 0x54, 0x0e, 0x8e, 0x46, + 0xfe, 0x26, 0xc6, 0x05, 0x2b, 0xe9, 0xba, 0xfe, 0xa8, 0x02, 0x75, 0x03, + 0xe9, 0xb3, 0xfe, 0x26, 0x8b, 0x44, 0x0e, 0x89, 0xc2, 0x8b, 0x7e, 0xfc, + 0x42, 0x01, 0xc7, 0x26, 0x89, 0x54, 0x0e, 0x8e, 0x46, 0xfe, 0x26, 0xc6, + 0x05, 0x20, 0xe9, 0x99, 0xfe, 0x8e, 0x46, 0x0a, 0x26, 0xf6, 0x44, 0x04, + 0x20, 0x75, 0x03, 0xe9, 0x0f, 0xfe, 0x83, 0x07, 0x04, 0x8b, 0x56, 0xfe, + 0xc5, 0x3f, 0x06, 0x8b, 0x45, 0xfc, 0x56, 0x89, 0x46, 0xf8, 0x8b, 0x45, + 0xfe, 0x8b, 0x5e, 0xf8, 0x89, 0x46, 0xfa, 0x89, 0xc1, 0x8b, 0x46, 0xfc, + 0xe8, 0x51, 0xfb, 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, + 0xe8, 0x43, 0xfa, 0x8e, 0x5e, 0x0a, 0x89, 0x44, 0x12, 0x8b, 0x56, 0x0a, + 0x89, 0xf0, 0xe8, 0x4e, 0xfc, 0x8b, 0x46, 0xf4, 0x8b, 0x56, 0xf6, 0x89, + 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x08, 0x00, 0xc4, 0x7e, 0xfc, 0x26, 0xc6, + 0x05, 0x00, 0x8e, 0x46, 0x0a, 0x26, 0x8a, 0x44, 0x05, 0xa8, 0x04, 0x75, + 0x1a, 0xa8, 0x02, 0x74, 0x16, 0x83, 0x07, 0x02, 0xc5, 0x3f, 0x8b, 0x5d, + 0xfe, 0x85, 0xdb, 0x74, 0x23, 0xc7, 0x46, 0xf6, 0x75, 0x07, 0x89, 0x5e, + 0xf4, 0xeb, 0x19, 0x83, 0x07, 0x04, 0xc5, 0x3f, 0x8b, 0x45, 0xfe, 0x8b, + 0x5d, 0xfc, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xdb, 0x74, 0x06, 0x89, 0x5e, + 0xf4, 0x89, 0x46, 0xf6, 0x8e, 0x5e, 0x0a, 0x80, 0x7c, 0x1a, 0x53, 0x75, + 0x3a, 0xf6, 0x44, 0x04, 0x20, 0x74, 0x26, 0x8b, 0x46, 0xf4, 0x8b, 0x56, + 0xf6, 0x8b, 0x5c, 0x0a, 0xe8, 0xc7, 0xf9, 0x8e, 0x5e, 0x0a, 0x89, 0x44, + 0x12, 0x83, 0x7c, 0x0a, 0x00, 0x7d, 0x03, 0xe9, 0x7b, 0xff, 0x3b, 0x44, + 0x0a, 0x7e, 0xf8, 0x8b, 0x44, 0x0a, 0xe9, 0x6d, 0xff, 0x8b, 0x46, 0xf4, + 0x8b, 0x56, 0xf6, 0x8b, 0x5c, 0x0a, 0xe8, 0xbf, 0xf9, 0xeb, 0xd8, 0xf6, + 0x44, 0x04, 0x40, 0x75, 0xec, 0xeb, 0xc4, 0x8e, 0x5e, 0x0a, 0x8a, 0x44, + 0x04, 0xa8, 0x01, 0x74, 0x50, 0xa8, 0x80, 0x75, 0x03, 0xe9, 0x9a, 0x00, + 0x83, 0x7e, 0xf2, 0x00, 0x75, 0x12, 0x83, 0x7e, 0xf0, 0x00, 0x75, 0x0c, + 0x83, 0x7e, 0xee, 0x00, 0x75, 0x06, 0x83, 0x7e, 0xec, 0x00, 0x74, 0x31, + 0x8b, 0x44, 0x0e, 0x89, 0xc2, 0x8b, 0x5e, 0xfc, 0x42, 0x01, 0xc3, 0x89, + 0x54, 0x0e, 0x8e, 0x5e, 0xfe, 0xc6, 0x07, 0x30, 0x8e, 0x5e, 0x0a, 0x8b, + 0x44, 0x0e, 0x89, 0xc2, 0x8b, 0x5e, 0xfc, 0x42, 0x01, 0xc3, 0x89, 0x54, + 0x0e, 0x8e, 0x46, 0x0a, 0x8e, 0x5e, 0xfe, 0x26, 0x8a, 0x44, 0x1a, 0x88, + 0x07, 0xc7, 0x46, 0xea, 0x10, 0x00, 0x8e, 0x5e, 0x0a, 0x83, 0x7c, 0x0a, + 0xff, 0x74, 0x04, 0xc6, 0x44, 0x1b, 0x20, 0x8e, 0x5e, 0x0a, 0x8b, 0x5e, + 0xfc, 0x8b, 0x46, 0xfe, 0x03, 0x5c, 0x0e, 0x89, 0x46, 0xf6, 0x89, 0x5e, + 0xf4, 0xf6, 0x44, 0x04, 0x80, 0x74, 0x3e, 0x83, 0x7c, 0x0a, 0x00, 0x75, + 0x3b, 0x83, 0x7e, 0xf2, 0x00, 0x75, 0x35, 0x83, 0x7e, 0xf0, 0x00, 0x75, + 0x2f, 0x83, 0x7e, 0xee, 0x00, 0x75, 0x29, 0x83, 0x7e, 0xec, 0x00, 0x75, + 0x23, 0x8e, 0xd8, 0xc6, 0x07, 0x00, 0x31, 0xc0, 0xeb, 0x5b, 0x8b, 0x46, + 0xfa, 0x0b, 0x46, 0xf8, 0xe9, 0x73, 0xff, 0xc7, 0x46, 0xea, 0x02, 0x00, + 0xeb, 0xa4, 0xc7, 0x46, 0xea, 0x08, 0x00, 0xeb, 0x9d, 0xe9, 0x70, 0x00, + 0xff, 0x76, 0xea, 0x8e, 0x5e, 0x0a, 0x8b, 0x46, 0xfc, 0x8b, 0x5e, 0xf0, + 0x8b, 0x4e, 0xee, 0xff, 0x76, 0xfe, 0x03, 0x44, 0x0e, 0x8b, 0x56, 0xec, + 0x50, 0x8b, 0x46, 0xf2, 0x0e, 0xe8, 0x83, 0x0e, 0x90, 0x8e, 0x5e, 0x0a, + 0x80, 0x7c, 0x1a, 0x58, 0x75, 0x0b, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, + 0x0e, 0xe8, 0xb5, 0x0f, 0x90, 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xf4, 0x8b, + 0x56, 0xf6, 0xe8, 0x91, 0xf8, 0x8e, 0x5e, 0x0a, 0x89, 0x44, 0x12, 0x3b, + 0x44, 0x0a, 0x7c, 0x57, 0xf6, 0x44, 0x04, 0x01, 0x75, 0x03, 0xe9, 0x40, + 0xfe, 0x83, 0x7e, 0xea, 0x0a, 0x7d, 0xf7, 0x85, 0xc0, 0x74, 0x08, 0xc5, + 0x5e, 0xf4, 0x80, 0x3f, 0x30, 0x74, 0xeb, 0x8e, 0x5e, 0x0a, 0xff, 0x44, + 0x10, 0xe9, 0x25, 0xfe, 0x83, 0x7c, 0x0a, 0x00, 0x75, 0x10, 0x8b, 0x46, + 0xfa, 0x0b, 0x46, 0xf8, 0x75, 0x08, 0x8e, 0x5e, 0xf6, 0xc6, 0x07, 0x00, + 0xeb, 0xbb, 0xff, 0x76, 0xea, 0x8e, 0x5e, 0x0a, 0x8b, 0x5e, 0xfc, 0x8b, + 0x4e, 0xfe, 0x8b, 0x46, 0xf8, 0x8b, 0x56, 0xfa, 0x03, 0x5c, 0x0e, 0x0e, + 0x3e, 0xe8, 0x6b, 0x0f, 0xe9, 0x7e, 0xff, 0x8b, 0x44, 0x0a, 0x2b, 0x44, + 0x12, 0x89, 0x44, 0x10, 0xe9, 0xe6, 0xfd, 0x8e, 0x46, 0x0a, 0x26, 0xf6, + 0x44, 0x05, 0x06, 0x75, 0x03, 0xe9, 0x92, 0x00, 0x8e, 0x46, 0x0a, 0x26, + 0x83, 0x7c, 0x08, 0x00, 0x75, 0x10, 0x26, 0xf6, 0x44, 0x05, 0x02, 0x75, + 0x03, 0xe9, 0x86, 0x00, 0x26, 0xc7, 0x44, 0x08, 0x04, 0x00, 0x8e, 0x46, + 0x0a, 0x26, 0x80, 0x64, 0x04, 0xf9, 0x83, 0x07, 0x02, 0x8b, 0x57, 0x02, + 0x8b, 0x3f, 0x8e, 0xc2, 0x26, 0x8b, 0x45, 0xfe, 0x8e, 0x46, 0x0a, 0x89, + 0x46, 0xe8, 0x26, 0xf6, 0x44, 0x05, 0x04, 0x74, 0x66, 0x83, 0xc7, 0x02, + 0xba, 0x04, 0x00, 0x89, 0x3f, 0x8b, 0x4e, 0xfe, 0x8e, 0x5f, 0x02, 0x8b, + 0x5e, 0xfc, 0x8b, 0x45, 0xfe, 0xe8, 0x4e, 0xf8, 0xc5, 0x5e, 0xfc, 0xba, + 0x04, 0x00, 0x8b, 0x46, 0xe8, 0x83, 0xc3, 0x05, 0x8c, 0xd9, 0xc6, 0x47, + 0xff, 0x3a, 0xe8, 0x39, 0xf8, 0x8e, 0x5e, 0x0a, 0x80, 0x7c, 0x1a, 0x50, + 0x75, 0x0b, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0x0e, 0xe8, 0xb1, 0x0e, + 0x90, 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xf4, 0x8b, 0x56, 0xf6, 0xe8, 0x8d, + 0xf7, 0x8e, 0x5e, 0x0a, 0x89, 0x44, 0x0e, 0xe9, 0x47, 0xfd, 0x26, 0x80, + 0x4c, 0x05, 0x04, 0xe9, 0x66, 0xff, 0x26, 0xc7, 0x44, 0x08, 0x09, 0x00, + 0xe9, 0x77, 0xff, 0xba, 0x04, 0x00, 0x8b, 0x5e, 0xfc, 0x8b, 0x4e, 0xfe, + 0xeb, 0xb8, 0x26, 0xc7, 0x44, 0x12, 0x01, 0x00, 0x26, 0xf6, 0x44, 0x04, + 0x40, 0x75, 0x13, 0x83, 0x07, 0x02, 0xc5, 0x3f, 0x8b, 0x5e, 0xfc, 0x8a, + 0x45, 0xfe, 0x8e, 0x5e, 0xfe, 0x88, 0x07, 0xe9, 0x0b, 0xfd, 0x83, 0x07, + 0x02, 0x8d, 0x46, 0xe6, 0xc5, 0x3f, 0x8c, 0xd2, 0x8b, 0x5d, 0xfe, 0x0e, + 0x3e, 0xe8, 0x4f, 0x0c, 0x3d, 0xff, 0xff, 0x75, 0x03, 0xe9, 0xf1, 0xfc, + 0xc5, 0x5e, 0xfc, 0x8a, 0x46, 0xe6, 0x88, 0x07, 0x30, 0xe4, 0x0e, 0xe8, + 0xf7, 0x0e, 0x90, 0x85, 0xc0, 0x74, 0xea, 0x8e, 0x5e, 0xfe, 0x8a, 0x46, + 0xe7, 0x88, 0x47, 0x01, 0x8e, 0x5e, 0x0a, 0xff, 0x44, 0x0e, 0xe9, 0xcc, + 0xfc, 0x83, 0x07, 0x02, 0x8b, 0x46, 0xfc, 0xc5, 0x3f, 0x8b, 0x56, 0xfe, + 0x8b, 0x5d, 0xfe, 0x0e, 0x3e, 0xe8, 0x0f, 0x0c, 0x3d, 0xff, 0xff, 0x74, + 0x03, 0xe9, 0xab, 0xfc, 0x8e, 0x5e, 0x0a, 0xc7, 0x44, 0x12, 0x00, 0x00, + 0xe9, 0xa6, 0xfc, 0x8e, 0x5e, 0x0a, 0xc7, 0x44, 0x08, 0x00, 0x00, 0x8b, + 0x5e, 0xfc, 0x8a, 0x44, 0x1a, 0x8e, 0x5e, 0xfe, 0x88, 0x07, 0x8e, 0x5e, + 0x0a, 0xc7, 0x44, 0x0e, 0x01, 0x00, 0xe9, 0x88, 0xfc, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x70, 0x8b, 0x7e, 0x0e, 0xc6, 0x46, 0xfe, 0x00, + 0xc7, 0x46, 0xdc, 0x00, 0x00, 0xc7, 0x46, 0xde, 0xc8, 0x00, 0xc7, 0x46, + 0xe4, 0x00, 0x00, 0x89, 0x46, 0xd8, 0x89, 0x56, 0xda, 0x89, 0x5e, 0xfc, + 0x89, 0x4e, 0xf6, 0x8e, 0x5e, 0xf6, 0x8b, 0x5e, 0xfc, 0x8a, 0x07, 0x84, + 0xc0, 0x74, 0x60, 0x8d, 0x57, 0x01, 0x3c, 0x25, 0x74, 0x0f, 0x98, 0x89, + 0x56, 0xfc, 0x89, 0xc3, 0x8c, 0xd2, 0x8d, 0x46, 0xd8, 0xff, 0xd7, 0xeb, + 0xde, 0x8d, 0x5e, 0xd8, 0x16, 0x8c, 0xd1, 0x89, 0xd0, 0x53, 0x8c, 0xda, + 0x8d, 0x5e, 0x0a, 0xe8, 0xb3, 0xf4, 0x89, 0xc3, 0x8e, 0xda, 0x89, 0x56, + 0xf6, 0x8a, 0x07, 0x43, 0x88, 0x46, 0xf2, 0x89, 0x5e, 0xfc, 0x84, 0xc0, + 0x74, 0x25, 0x3c, 0x6e, 0x75, 0x56, 0xc5, 0x76, 0x0a, 0x8a, 0x46, 0xdd, + 0x83, 0xc6, 0x04, 0xa8, 0x04, 0x74, 0x17, 0x89, 0x76, 0x0a, 0xc5, 0x5c, + 0xfc, 0x8a, 0x46, 0xdc, 0xa8, 0x10, 0x74, 0x20, 0x8a, 0x46, 0xe4, 0x88, + 0x07, 0xeb, 0x94, 0xe9, 0x90, 0x01, 0xa8, 0x02, 0x74, 0xe5, 0x83, 0x46, + 0x0a, 0x02, 0xb8, 0x75, 0x07, 0xc4, 0x5e, 0x0a, 0x8e, 0xd8, 0x26, 0x8b, + 0x5f, 0xfe, 0xeb, 0xd9, 0xa8, 0x20, 0x74, 0x08, 0x8b, 0x46, 0xe4, 0x89, + 0x07, 0xe9, 0x6f, 0xff, 0xa8, 0x40, 0x74, 0x0e, 0x8b, 0x46, 0xe4, 0x99, + 0x89, 0x07, 0x89, 0x57, 0x02, 0xe9, 0x5f, 0xff, 0xeb, 0x1a, 0xa8, 0x80, + 0x74, 0xe2, 0x8b, 0x46, 0xe4, 0x99, 0x89, 0x07, 0xb1, 0x0f, 0x89, 0x57, + 0x02, 0xd3, 0xfa, 0x89, 0x57, 0x04, 0x89, 0x57, 0x06, 0xe9, 0x43, 0xff, + 0x8d, 0x56, 0xfe, 0x8d, 0x5e, 0x0a, 0x16, 0x8d, 0x46, 0x90, 0x52, 0x8d, + 0x56, 0xd8, 0x16, 0x8c, 0xd1, 0x52, 0x8c, 0xd2, 0xe8, 0xf1, 0xf8, 0x89, + 0xc6, 0x8b, 0x46, 0xe6, 0x03, 0x46, 0xe8, 0x03, 0x46, 0xea, 0x03, 0x46, + 0xec, 0x03, 0x46, 0xee, 0x03, 0x46, 0xf0, 0x89, 0x56, 0xfa, 0x29, 0x46, + 0xe0, 0xf6, 0x46, 0xdc, 0x08, 0x74, 0x23, 0x8d, 0x4e, 0x90, 0x8c, 0x56, + 0xf8, 0x83, 0x7e, 0xe6, 0x00, 0x7e, 0x32, 0x8e, 0x5e, 0xf8, 0x89, 0xcb, + 0x8a, 0x07, 0x98, 0x8c, 0xd2, 0x89, 0xc3, 0x8d, 0x46, 0xd8, 0x41, 0xff, + 0xd7, 0xff, 0x4e, 0xe6, 0xeb, 0xe3, 0x80, 0x7e, 0xf3, 0x20, 0x75, 0xd7, + 0x83, 0x7e, 0xe0, 0x00, 0x7e, 0xd1, 0xbb, 0x20, 0x00, 0x8d, 0x46, 0xd8, + 0x8c, 0xd2, 0xff, 0xd7, 0xff, 0x4e, 0xe0, 0xeb, 0xeb, 0x83, 0x7e, 0xe8, + 0x00, 0x7e, 0x0f, 0xbb, 0x30, 0x00, 0x8d, 0x46, 0xd8, 0x8c, 0xd2, 0xff, + 0xd7, 0xff, 0x4e, 0xe8, 0xeb, 0xeb, 0x8a, 0x46, 0xf2, 0x3c, 0x73, 0x75, + 0x44, 0xf6, 0x46, 0xdc, 0x40, 0x75, 0x1b, 0x83, 0x7e, 0xea, 0x00, 0x7e, + 0x23, 0x8e, 0x5e, 0xfa, 0x8a, 0x04, 0x98, 0x8c, 0xd2, 0x89, 0xc3, 0x8d, + 0x46, 0xd8, 0x46, 0xff, 0xd7, 0xff, 0x4e, 0xea, 0xeb, 0xe5, 0x8d, 0x5e, + 0xd8, 0x8b, 0x56, 0xfa, 0x57, 0x8c, 0xd1, 0x89, 0xf0, 0xe8, 0x66, 0xf7, + 0x83, 0x7e, 0xec, 0x00, 0x7e, 0x2e, 0xbb, 0x30, 0x00, 0x8d, 0x46, 0xd8, + 0x8c, 0xd2, 0xff, 0xd7, 0xff, 0x4e, 0xec, 0xeb, 0xeb, 0x3c, 0x53, 0x74, + 0xd9, 0x83, 0x7e, 0xea, 0x00, 0x7e, 0xe1, 0x8e, 0x5e, 0xfa, 0x8a, 0x04, + 0x98, 0x8c, 0xd2, 0x89, 0xc3, 0x8d, 0x46, 0xd8, 0x46, 0xff, 0xd7, 0xff, + 0x4e, 0xea, 0xeb, 0xe5, 0x83, 0x7e, 0xee, 0x00, 0x7e, 0x15, 0x8e, 0x5e, + 0xfa, 0x8a, 0x04, 0x98, 0x8c, 0xd2, 0x89, 0xc3, 0x8d, 0x46, 0xd8, 0x46, + 0xff, 0xd7, 0xff, 0x4e, 0xee, 0xeb, 0xe5, 0x83, 0x7e, 0xf0, 0x00, 0x7e, + 0x0f, 0xbb, 0x30, 0x00, 0x8d, 0x46, 0xd8, 0x8c, 0xd2, 0xff, 0xd7, 0xff, + 0x4e, 0xf0, 0xeb, 0xeb, 0xf6, 0x46, 0xdc, 0x08, 0x75, 0x03, 0xe9, 0x16, + 0xfe, 0x83, 0x7e, 0xe0, 0x00, 0x7e, 0xf7, 0xbb, 0x20, 0x00, 0x8d, 0x46, + 0xd8, 0x8c, 0xd2, 0xff, 0xd7, 0xff, 0x4e, 0xe0, 0xeb, 0xeb, 0x8b, 0x46, + 0xe4, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x06, 0x00, 0x51, 0x55, 0x89, + 0xe5, 0x89, 0xd9, 0x8b, 0x5e, 0x08, 0x8e, 0x46, 0x0a, 0x1e, 0x92, 0x8e, + 0xd8, 0x8a, 0xc1, 0xb4, 0x3d, 0xcd, 0x21, 0x1f, 0x72, 0x03, 0x26, 0x89, + 0x07, 0xe8, 0x66, 0x0c, 0x5d, 0x59, 0xca, 0x04, 0x00, 0x53, 0x52, 0xba, + 0x75, 0x07, 0x8e, 0xda, 0x3b, 0x06, 0x50, 0x08, 0x73, 0x13, 0x89, 0xc3, + 0x8b, 0x16, 0x7a, 0x08, 0xd1, 0xe3, 0x8e, 0x1e, 0x7c, 0x08, 0x01, 0xd3, + 0x8b, 0x07, 0x5a, 0x5b, 0xc3, 0x31, 0xc0, 0x5a, 0x5b, 0xc3, 0x53, 0x51, + 0xbb, 0x75, 0x07, 0x8e, 0xdb, 0x3b, 0x06, 0x50, 0x08, 0x72, 0x03, 0x59, + 0x5b, 0xc3, 0x89, 0xc3, 0x8b, 0x0e, 0x7a, 0x08, 0xd1, 0xe3, 0x8e, 0x1e, + 0x7c, 0x08, 0x01, 0xcb, 0x89, 0x17, 0x59, 0x5b, 0xc3, 0x53, 0x52, 0x89, + 0xc3, 0xb8, 0x00, 0x44, 0xcd, 0x21, 0x19, 0xdb, 0x75, 0x02, 0x89, 0xd0, + 0x89, 0xc2, 0x85, 0xdb, 0x7f, 0x02, 0x75, 0x0a, 0xa8, 0x80, 0x74, 0x06, + 0xb8, 0x01, 0x00, 0x5a, 0x5b, 0xcb, 0x31, 0xc0, 0x5a, 0x5b, 0xcb, 0x53, + 0x51, 0x52, 0x56, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc3, 0xc6, + 0x46, 0xff, 0x00, 0x88, 0xc1, 0x88, 0x46, 0xfe, 0x0e, 0xe8, 0x7d, 0x00, + 0x90, 0x89, 0xc6, 0x8e, 0xda, 0x8b, 0x46, 0xfe, 0x89, 0x04, 0x81, 0xfb, + 0x00, 0x01, 0x73, 0x52, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x80, 0x3e, 0x24, + 0x08, 0x03, 0x72, 0x3f, 0x80, 0xfb, 0x50, 0x75, 0x04, 0xb1, 0x0e, 0xeb, + 0x07, 0x80, 0xfb, 0x22, 0x72, 0x28, 0xb1, 0x13, 0xb8, 0x75, 0x07, 0x88, + 0xcb, 0x8e, 0xd8, 0x30, 0xff, 0x8a, 0x87, 0x7e, 0x08, 0x98, 0x89, 0xc6, + 0x0e, 0xe8, 0x6b, 0xdd, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0x89, 0x37, 0xb8, + 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x80, 0xfb, + 0x20, 0x72, 0x04, 0xb1, 0x05, 0xeb, 0xd1, 0x80, 0xf9, 0x13, 0x76, 0xcc, + 0xeb, 0xc8, 0x88, 0xfb, 0x0e, 0xe8, 0x43, 0xdd, 0x90, 0x30, 0xff, 0x8e, + 0xda, 0x89, 0xde, 0x89, 0xc3, 0xeb, 0xd2, 0x52, 0x89, 0xc2, 0xe8, 0x6e, + 0xff, 0x89, 0xd0, 0x5a, 0xc3, 0xb8, 0xbe, 0x0d, 0xba, 0x75, 0x07, 0xcb, + 0x51, 0x55, 0x89, 0xe5, 0x89, 0xd9, 0x8b, 0x5e, 0x08, 0x8e, 0x46, 0x0a, + 0x1e, 0x92, 0x8e, 0xd8, 0xb4, 0x3c, 0xcd, 0x21, 0x1f, 0x72, 0x03, 0x26, + 0x89, 0x07, 0xe8, 0x39, 0x0b, 0x5d, 0x59, 0xca, 0x04, 0x00, 0x51, 0x55, + 0x89, 0xe5, 0x89, 0xd9, 0x8b, 0x5e, 0x08, 0x8e, 0x46, 0x0a, 0x1e, 0x92, + 0x8e, 0xd8, 0xb4, 0x5b, 0xcd, 0x21, 0x1f, 0x72, 0x03, 0x26, 0x89, 0x07, + 0xe8, 0x17, 0x0b, 0xeb, 0xdc, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x50, 0xba, 0x75, 0x07, 0x8e, 0xda, 0xd1, 0xe0, 0x8b, 0x16, 0x7c, + 0x08, 0x8b, 0x0e, 0x7a, 0x08, 0x81, 0xfa, 0x75, 0x07, 0x75, 0x06, 0x81, + 0xf9, 0x52, 0x08, 0x74, 0x2b, 0x89, 0xc3, 0x89, 0xc8, 0x0e, 0x3e, 0xe8, + 0xfe, 0x0a, 0x89, 0xc7, 0x89, 0xd6, 0x85, 0xf6, 0x75, 0x4b, 0x85, 0xff, + 0x75, 0x47, 0x0e, 0xe8, 0xa9, 0xdc, 0x90, 0x89, 0xc6, 0x8e, 0xda, 0xc7, + 0x04, 0x05, 0x00, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, + 0x8b, 0x16, 0x50, 0x08, 0x89, 0x16, 0xc0, 0x0d, 0x0e, 0xe8, 0xf9, 0xc6, + 0x90, 0x89, 0xc7, 0x89, 0xd6, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, + 0xc9, 0xb9, 0x75, 0x07, 0x8e, 0xd9, 0x8b, 0x0e, 0x50, 0x08, 0xd1, 0xe1, + 0xbb, 0x52, 0x08, 0x51, 0x8c, 0xd9, 0x0e, 0xe8, 0xff, 0xd3, 0x90, 0xeb, + 0xb1, 0xb8, 0x75, 0x07, 0x8b, 0x4e, 0xfe, 0x89, 0xf2, 0x8e, 0xd8, 0x31, + 0xdb, 0xa1, 0x50, 0x08, 0x2b, 0x0e, 0x50, 0x08, 0xd1, 0xe0, 0xd1, 0xe1, + 0x01, 0xf8, 0x0e, 0xe8, 0xe3, 0x00, 0x90, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0x8b, 0x46, 0xfe, 0x89, 0x3e, 0x7a, 0x08, 0x89, 0x36, 0x7c, 0x08, 0xa3, + 0x50, 0x08, 0xeb, 0x93, 0x52, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0x7c, + 0x08, 0x8b, 0x16, 0x7a, 0x08, 0x3d, 0x75, 0x07, 0x75, 0x08, 0x81, 0xfa, + 0x52, 0x08, 0x75, 0x02, 0x5a, 0xc3, 0x89, 0xd0, 0x8b, 0x16, 0x7c, 0x08, + 0x0e, 0xe8, 0x8e, 0xc7, 0x90, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa3, 0x7c, + 0x08, 0xa1, 0xc0, 0x0d, 0xc7, 0x06, 0x7a, 0x08, 0x52, 0x08, 0xa3, 0x50, + 0x08, 0x5a, 0xc3, 0x53, 0x51, 0x56, 0x89, 0xc3, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0xa1, 0x50, 0x08, 0x39, 0xc3, 0x73, 0x2e, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0x3b, 0x1e, 0x50, 0x08, 0x73, 0x2f, 0x89, 0xd9, 0xd1, 0xe1, 0x85, + 0xd2, 0x74, 0x2c, 0x89, 0xd8, 0xe8, 0xd8, 0x0a, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0xc5, 0x36, 0x7a, 0x08, 0x01, 0xce, 0x80, 0xce, 0x40, 0x89, 0x14, + 0x89, 0xd8, 0x5e, 0x59, 0x5b, 0xc3, 0x89, 0xc1, 0xd1, 0xf9, 0x01, 0xc8, + 0x40, 0xe8, 0xc9, 0xfe, 0xeb, 0xc6, 0xbb, 0xff, 0xff, 0xeb, 0xe9, 0xc5, + 0x36, 0x7a, 0x08, 0x01, 0xce, 0xeb, 0xdf, 0x56, 0x57, 0x89, 0xc6, 0x89, + 0xd7, 0xe8, 0x65, 0xfd, 0x85, 0xc9, 0x7f, 0x06, 0x75, 0x12, 0x85, 0xdb, + 0x76, 0x0e, 0xa8, 0x80, 0x75, 0x0a, 0x80, 0xcc, 0x80, 0x89, 0xc2, 0x89, + 0xf0, 0xe8, 0x72, 0xfd, 0x89, 0xfa, 0x89, 0xf0, 0xe8, 0xd9, 0xe4, 0x5f, + 0x5e, 0xcb, 0x53, 0x51, 0xba, 0x01, 0x00, 0x31, 0xdb, 0x31, 0xc9, 0xe8, + 0xca, 0xe4, 0x59, 0x5b, 0xcb, 0x57, 0x89, 0xc7, 0x88, 0xd8, 0x8e, 0xc2, + 0x57, 0x8a, 0xe0, 0xd1, 0xe9, 0xf3, 0xab, 0x13, 0xc9, 0xf3, 0xaa, 0x5f, + 0x89, 0xf8, 0x5f, 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, + 0x89, 0xc7, 0x89, 0x56, 0xfe, 0x89, 0xde, 0x89, 0x4e, 0xfc, 0x8e, 0xd9, + 0xc5, 0x5c, 0x06, 0x8b, 0x47, 0x0a, 0x8b, 0x57, 0x08, 0x85, 0xc0, 0x75, + 0x04, 0x85, 0xd2, 0x74, 0x5f, 0x8e, 0x5e, 0xfc, 0xc7, 0x46, 0xfa, 0x00, + 0x00, 0xf6, 0x44, 0x0b, 0x04, 0x75, 0x5a, 0x89, 0x7e, 0xf8, 0x31, 0xd2, + 0x8e, 0x5e, 0xfe, 0x8a, 0x05, 0x30, 0xe4, 0x85, 0xc0, 0x74, 0x12, 0x8b, + 0x4e, 0xfc, 0x89, 0xf3, 0x47, 0x0e, 0x3e, 0xe8, 0xcf, 0xed, 0x3d, 0xff, + 0xff, 0x75, 0xe5, 0x89, 0xc2, 0x83, 0x7e, 0xfa, 0x00, 0x74, 0x18, 0x8e, + 0x5e, 0xfc, 0x80, 0x64, 0x0b, 0xf9, 0x80, 0x4c, 0x0b, 0x04, 0x85, 0xd2, + 0x75, 0x09, 0x89, 0xf0, 0x8c, 0xda, 0xe8, 0xa6, 0xe4, 0x89, 0xc2, 0x85, + 0xd2, 0x75, 0x05, 0x89, 0xfa, 0x2b, 0x56, 0xf8, 0x89, 0xd0, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0xcb, 0x89, 0xf0, 0x89, 0xca, 0xe8, 0x61, 0xee, 0xeb, + 0x98, 0x80, 0x64, 0x0b, 0xf9, 0xc7, 0x46, 0xfa, 0x01, 0x00, 0x80, 0x4c, + 0x0b, 0x02, 0xeb, 0x97, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, + 0x83, 0xec, 0x02, 0x89, 0xc7, 0xbb, 0x75, 0x07, 0x8e, 0xdb, 0x31, 0xc9, + 0x8b, 0x36, 0x78, 0x0d, 0x8b, 0x1e, 0x76, 0x0d, 0x89, 0x76, 0xfe, 0x8b, + 0x46, 0xfe, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xdb, 0x74, 0x26, 0x8e, 0xd8, + 0xc5, 0x77, 0x04, 0x85, 0x7c, 0x0a, 0x75, 0x0c, 0x8e, 0x5e, 0xfe, 0xc5, + 0x37, 0x89, 0xf3, 0x8c, 0x5e, 0xfe, 0xeb, 0xdf, 0x41, 0xf6, 0x44, 0x0b, + 0x10, 0x74, 0xed, 0x89, 0xf0, 0x8c, 0xda, 0xe8, 0x2d, 0xe4, 0xeb, 0xe4, + 0x89, 0xc8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xb8, + 0xff, 0xff, 0xe8, 0x9f, 0xff, 0xcb, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, + 0x2c, 0x08, 0xc7, 0x06, 0x2c, 0x08, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x01, + 0xcb, 0xb4, 0x01, 0xcd, 0x21, 0x30, 0xe4, 0xcb, 0x56, 0x89, 0xc6, 0x89, + 0xc8, 0x89, 0xd1, 0x8e, 0xd8, 0x89, 0xda, 0x89, 0xf3, 0xb4, 0x3f, 0xcd, + 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7c, 0x02, 0x5e, 0xc3, 0xe8, 0x57, 0xfc, + 0x5e, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, + 0x89, 0x5e, 0xfc, 0x89, 0x4e, 0xfe, 0x89, 0xd7, 0xe8, 0xd2, 0xfb, 0xa8, + 0x80, 0x74, 0x14, 0xb0, 0x02, 0x89, 0xf3, 0x31, 0xd2, 0x31, 0xc9, 0xb4, + 0x42, 0xcd, 0x21, 0xd1, 0xd2, 0xd1, 0xca, 0x85, 0xd2, 0x7c, 0x2c, 0xc5, + 0x56, 0xfc, 0x89, 0xf9, 0x89, 0xf3, 0xb4, 0x40, 0xcd, 0x21, 0x19, 0xd2, + 0x85, 0xd2, 0x7c, 0x1b, 0x89, 0xc3, 0x39, 0xf8, 0x74, 0x0d, 0x0e, 0xe8, + 0xd1, 0xd9, 0x90, 0x89, 0xc6, 0x8e, 0xda, 0xc7, 0x04, 0x0c, 0x00, 0x89, + 0xd8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0xe8, 0xf9, 0xfb, 0xeb, 0xf5, + 0xe9, 0x18, 0x09, 0x89, 0xc0, 0x00, 0x9c, 0x55, 0x1e, 0x51, 0x53, 0x8e, + 0xd9, 0xe8, 0x2d, 0x00, 0x1e, 0x55, 0x53, 0x8b, 0xec, 0xc5, 0x5e, 0x06, + 0x89, 0x07, 0x8f, 0x47, 0x02, 0x89, 0x4f, 0x04, 0x89, 0x57, 0x06, 0x8f, + 0x47, 0x08, 0x89, 0x77, 0x0a, 0x89, 0x7f, 0x0c, 0x8f, 0x47, 0x0e, 0x8c, + 0x47, 0x10, 0x9c, 0x8f, 0x47, 0x12, 0x83, 0xc4, 0x04, 0x1f, 0x5d, 0x9d, + 0xcb, 0x8b, 0xc8, 0xd1, 0xe0, 0x03, 0xc1, 0x05, 0x7b, 0x4f, 0x0e, 0x50, + 0x8a, 0xe2, 0x9e, 0x8b, 0x07, 0x8b, 0x4f, 0x04, 0x8b, 0x57, 0x06, 0x8b, + 0x6f, 0x08, 0x8b, 0x77, 0x0a, 0x8b, 0x7f, 0x0c, 0xff, 0x77, 0x0e, 0x8e, 0x47, 0x10, 0x8b, 0x5f, 0x02, 0x1f, 0xcb, 0xcd, 0x00, 0xc3, 0xcd, 0x01, 0xc3, 0xcd, 0x02, 0xc3, 0xcc, 0x90, 0xc3, 0xcd, 0x04, 0xc3, 0xcd, 0x05, 0xc3, 0xcd, 0x06, 0xc3, 0xcd, 0x07, 0xc3, 0xcd, 0x08, 0xc3, 0xcd, 0x09, @@ -1517,510 +1891,910 @@ static const unsigned char bin_dsxmenu_exe_pc[] = { 0xc3, 0xcd, 0xfa, 0xc3, 0xcd, 0xfb, 0xc3, 0xcd, 0xfc, 0xc3, 0xcd, 0xfd, 0xc3, 0xcd, 0xfe, 0xc3, 0xcd, 0xff, 0xc3, 0xcd, 0x25, 0x73, 0x03, 0x9d, 0xf9, 0xc3, 0x9d, 0xf8, 0xc3, 0xcd, 0x26, 0x73, 0x03, 0x9d, 0xf9, 0xc3, - 0x9d, 0xf8, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, - 0xec, 0x02, 0x83, 0x3e, 0xfe, 0x0a, 0x00, 0x75, 0x3a, 0xbb, 0x2c, 0x00, - 0x8e, 0x06, 0x80, 0x07, 0x31, 0xf6, 0x26, 0x8b, 0x07, 0x31, 0xd2, 0x89, - 0x46, 0xfe, 0x8e, 0xc0, 0x31, 0xdb, 0x30, 0xc0, 0x26, 0x3a, 0x07, 0x74, - 0x0a, 0x43, 0x26, 0x3a, 0x07, 0x75, 0xfa, 0x42, 0x43, 0xeb, 0xf1, 0x89, - 0xd8, 0x29, 0xf0, 0x75, 0x03, 0xb8, 0x01, 0x00, 0xe8, 0x00, 0xc6, 0x89, - 0xc1, 0x89, 0xc3, 0x85, 0xc0, 0x75, 0x09, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0x5a, 0x59, 0x5b, 0xc3, 0x89, 0xd0, 0xd1, 0xe0, 0x05, 0x02, 0x00, 0x01, - 0xd0, 0xe8, 0xe3, 0xc5, 0x89, 0xc7, 0x85, 0xc0, 0x74, 0x39, 0xa3, 0xfe, - 0x0a, 0x8e, 0x46, 0xfe, 0x89, 0x0e, 0x08, 0x0c, 0x30, 0xc9, 0x8d, 0x45, - 0x02, 0x26, 0x3a, 0x0c, 0x75, 0x14, 0x89, 0xc3, 0xa3, 0xfa, 0x0a, 0xc7, - 0x05, 0x00, 0x00, 0x85, 0xd2, 0x74, 0xc4, 0x4a, 0xc6, 0x07, 0x00, 0x43, - 0xeb, 0xf5, 0x89, 0x1d, 0x89, 0xc7, 0x26, 0x8a, 0x04, 0x46, 0x88, 0x07, - 0x43, 0x84, 0xc0, 0x75, 0xf5, 0xeb, 0xd3, 0x89, 0xc8, 0xe8, 0x58, 0xc6, - 0xeb, 0xa5, 0xe8, 0x76, 0x02, 0xa1, 0xfe, 0x0a, 0x85, 0xc0, 0x75, 0x08, - 0xa1, 0x08, 0x0c, 0x85, 0xc0, 0x75, 0x0b, 0xc3, 0xe8, 0x41, 0xc6, 0x31, - 0xc0, 0xa3, 0xfe, 0x0a, 0xeb, 0xee, 0xe8, 0x37, 0xc6, 0x31, 0xc0, 0xa3, - 0x08, 0x0c, 0xc3, 0x51, 0x57, 0xb9, 0x01, 0x01, 0x31, 0xc0, 0xbf, 0x06, - 0x0b, 0xa3, 0xf8, 0x07, 0xa3, 0xfa, 0x07, 0x30, 0xc0, 0x57, 0x1e, 0x07, - 0xf3, 0xaa, 0x5f, 0x5f, 0x59, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc3, - 0x89, 0xd6, 0xe8, 0xda, 0xff, 0x8e, 0xc2, 0x26, 0x83, 0x3f, 0x00, 0x74, - 0x2d, 0xc7, 0x06, 0xf8, 0x07, 0x01, 0x00, 0x8e, 0xc6, 0x26, 0x8b, 0x07, - 0x85, 0xc0, 0x74, 0x1e, 0x88, 0xe2, 0x30, 0xe4, 0x30, 0xf6, 0x89, 0xc7, - 0x89, 0xd1, 0x81, 0xc7, 0x06, 0x0b, 0x29, 0xc1, 0xb0, 0x01, 0x41, 0x47, - 0x43, 0x43, 0x57, 0x1e, 0x07, 0xf3, 0xaa, 0x5f, 0xeb, 0xd9, 0x5f, 0x5e, - 0x59, 0x5b, 0xc3, 0x51, 0x52, 0x57, 0x3d, 0xff, 0xff, 0x74, 0x48, 0x3d, - 0xfe, 0xff, 0x74, 0x43, 0x3d, 0xfd, 0xff, 0x75, 0x05, 0xe8, 0x8b, 0xff, - 0xeb, 0x4d, 0x3d, 0xfc, 0xff, 0x75, 0x2b, 0xe8, 0x81, 0xff, 0xb9, 0x1f, - 0x00, 0xb0, 0x01, 0xbf, 0x88, 0x0b, 0x57, 0x1e, 0x07, 0xf3, 0xaa, 0x5f, - 0xb9, 0x1d, 0x00, 0xbf, 0xe7, 0x0b, 0x57, 0x1e, 0x07, 0xf3, 0xaa, 0x5f, - 0xc7, 0x06, 0xf8, 0x07, 0x01, 0x00, 0xc7, 0x06, 0xfa, 0x07, 0xa4, 0x03, - 0xeb, 0x1d, 0x85, 0xc0, 0x74, 0x05, 0xb8, 0x01, 0x00, 0xeb, 0x16, 0xe8, - 0x10, 0x02, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x09, 0xe8, 0x5d, - 0xff, 0xe8, 0x2b, 0x02, 0xa3, 0xfa, 0x07, 0x31, 0xc0, 0x5f, 0x5a, 0x59, - 0xc3, 0x3d, 0x81, 0x82, 0x72, 0x08, 0x3d, 0x9a, 0x82, 0x77, 0x03, 0x2d, - 0x21, 0x00, 0xc3, 0x3d, 0x61, 0x00, 0x7c, 0x08, 0x3d, 0x7a, 0x00, 0x7f, - 0x03, 0x2d, 0x20, 0x00, 0xc3, 0x50, 0xb8, 0xa4, 0x00, 0xe8, 0x15, 0x02, - 0x58, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x81, 0xec, 0x9a, 0x00, 0x50, 0x81, - 0xed, 0x80, 0x00, 0x89, 0xd6, 0x89, 0x5e, 0x7c, 0x89, 0x4e, 0x78, 0xe8, - 0x7f, 0x02, 0x89, 0xc2, 0x3d, 0xff, 0xff, 0x74, 0x03, 0xe9, 0xdc, 0x00, - 0xe8, 0x42, 0xda, 0x89, 0xc7, 0x83, 0x3d, 0x01, 0x74, 0x0a, 0xe8, 0x38, - 0xda, 0x89, 0xc7, 0x83, 0x3d, 0x09, 0x75, 0xe9, 0x8a, 0x04, 0x3c, 0x5c, - 0x74, 0xe3, 0x84, 0xc0, 0x74, 0xdf, 0x80, 0x7c, 0x01, 0x3a, 0x74, 0xd9, - 0xb8, 0xb0, 0x04, 0xe8, 0xb6, 0xe2, 0x89, 0xc7, 0x85, 0xc0, 0x74, 0xcd, - 0x89, 0xf0, 0xe8, 0x9d, 0x05, 0x40, 0x89, 0x46, 0x7a, 0xb8, 0x90, 0x00, - 0x2b, 0x46, 0x7a, 0x89, 0x46, 0x76, 0x80, 0x3d, 0x00, 0x74, 0xb6, 0xba, - 0x3b, 0x00, 0x89, 0xf8, 0xe8, 0x9a, 0x05, 0x89, 0x46, 0x7e, 0x85, 0xc0, - 0x75, 0x0c, 0x89, 0xf8, 0x89, 0xfb, 0xe8, 0x75, 0x05, 0x01, 0xc3, 0x89, - 0x5e, 0x7e, 0x8b, 0x4e, 0x7e, 0x29, 0xf9, 0x3b, 0x4e, 0x76, 0x76, 0x17, - 0xe8, 0xd6, 0xd9, 0x89, 0xc6, 0xc7, 0x04, 0x02, 0x00, 0xe8, 0x92, 0xf3, - 0x89, 0xc6, 0xb8, 0xff, 0xff, 0xc7, 0x04, 0x0a, 0x00, 0xeb, 0x5b, 0x8d, - 0x46, 0xe6, 0x89, 0xfa, 0x8d, 0x7e, 0xe6, 0x89, 0xcb, 0x01, 0xcf, 0xe8, - 0x70, 0x05, 0x80, 0x7d, 0xff, 0x5c, 0x74, 0x04, 0xc6, 0x05, 0x5c, 0x47, - 0x8b, 0x5e, 0x7a, 0x89, 0xf2, 0x89, 0xf8, 0x8b, 0x4e, 0x78, 0xe8, 0x59, - 0x05, 0x8b, 0x5e, 0x7c, 0x8d, 0x56, 0xe6, 0x8b, 0x46, 0xe4, 0xe8, 0xc0, - 0x01, 0x89, 0xc2, 0x3d, 0xff, 0xff, 0x75, 0x20, 0xe8, 0x86, 0xd9, 0x89, - 0xc7, 0x83, 0x3d, 0x01, 0x74, 0x0a, 0xe8, 0x7c, 0xd9, 0x89, 0xc7, 0x83, - 0x3d, 0x09, 0x75, 0x0c, 0x8b, 0x7e, 0x7e, 0x80, 0x3d, 0x3b, 0x75, 0x04, - 0x47, 0xe9, 0x66, 0xff, 0x89, 0xd0, 0x8d, 0xa6, 0x80, 0x00, 0x5d, 0x5f, - 0x5e, 0xc3, 0x53, 0x89, 0xc3, 0x83, 0xeb, 0x02, 0x8b, 0x07, 0x24, 0xfe, - 0x2d, 0x02, 0x00, 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, - 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, 0xd7, 0x80, 0x66, 0xfe, 0xfe, 0x8d, - 0x4e, 0xfc, 0x8c, 0xd8, 0x89, 0xfb, 0x89, 0xf2, 0xe8, 0x0c, 0x05, 0x85, - 0xc0, 0x74, 0x12, 0x3d, 0x01, 0x00, 0x74, 0x0b, 0x3d, 0x02, 0x00, 0x75, - 0xe6, 0xf6, 0x46, 0xfe, 0x01, 0x74, 0x0c, 0x31, 0xf6, 0x89, 0xf0, 0x89, - 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x8b, 0x46, 0xfc, 0xe8, 0xa5, - 0xd6, 0x85, 0xc0, 0x74, 0xea, 0x80, 0x4e, 0xfe, 0x01, 0xeb, 0xc4, 0x53, - 0x52, 0x56, 0xa1, 0xfe, 0x0a, 0x85, 0xc0, 0x74, 0x5a, 0x89, 0xc3, 0x8b, - 0x07, 0x85, 0xc0, 0x74, 0x28, 0x83, 0x3e, 0xfa, 0x0a, 0x00, 0x75, 0x05, - 0x83, 0xc3, 0x02, 0xeb, 0xee, 0x89, 0xda, 0x2b, 0x16, 0xfe, 0x0a, 0x8b, - 0x36, 0xfa, 0x0a, 0xd1, 0xfa, 0x01, 0xd6, 0x80, 0x3c, 0x00, 0x74, 0x03, - 0xe8, 0xa9, 0xc3, 0xc7, 0x07, 0x00, 0x00, 0xeb, 0xdf, 0x83, 0x3e, 0xfa, - 0x0a, 0x00, 0x74, 0x06, 0xa1, 0xfe, 0x0a, 0xe8, 0x96, 0xc3, 0xb8, 0x03, - 0x00, 0xe8, 0xd7, 0xc2, 0x89, 0xc3, 0x85, 0xc0, 0x74, 0x17, 0xc7, 0x07, - 0x00, 0x00, 0x83, 0xc3, 0x02, 0xa3, 0xfe, 0x0a, 0x89, 0x1e, 0xfa, 0x0a, - 0xc6, 0x07, 0x00, 0x31, 0xc0, 0x5e, 0x5a, 0x5b, 0xc3, 0xb8, 0xff, 0xff, - 0xeb, 0xf7, 0x53, 0x51, 0x56, 0x57, 0x55, 0x1e, 0x33, 0xc0, 0x8e, 0xd8, - 0xb4, 0x63, 0xcd, 0x21, 0x8c, 0xdf, 0x72, 0x08, 0x84, 0xc0, 0x75, 0x04, - 0x85, 0xff, 0x75, 0x04, 0x33, 0xff, 0x33, 0xf6, 0x1f, 0x5d, 0x89, 0xf0, - 0x89, 0xfa, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x53, 0x52, 0xb8, 0x01, 0x66, - 0xcd, 0x21, 0x73, 0x02, 0x33, 0xdb, 0x89, 0xd8, 0x5a, 0x5b, 0xc3, 0x00, - 0x8c, 0x16, 0xfc, 0x07, 0xc3, 0x3b, 0xc4, 0x73, 0x13, 0x2b, 0xc4, 0xf7, - 0xd8, 0x3b, 0x06, 0x86, 0x07, 0x77, 0x08, 0x8c, 0xd0, 0x3b, 0x06, 0xfc, - 0x07, 0x74, 0x01, 0xc3, 0x0e, 0x5a, 0xb8, 0xc7, 0x4a, 0xbb, 0x01, 0x00, - 0xe9, 0x75, 0xe1, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x4f, 0x76, 0x65, - 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x21, 0x00, 0x53, 0x52, 0x55, 0x89, 0xe5, - 0x83, 0xec, 0x2c, 0x8d, 0x5e, 0xd4, 0xba, 0x07, 0x00, 0xe8, 0x7a, 0x05, - 0x85, 0xc0, 0x75, 0x09, 0xb8, 0x01, 0x00, 0x89, 0xec, 0x5d, 0x5a, 0x5b, - 0xc3, 0x31, 0xc0, 0xeb, 0xf6, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, - 0x02, 0x50, 0x89, 0xd6, 0x89, 0xdf, 0x89, 0x4e, 0xfe, 0x8b, 0x56, 0x08, - 0x89, 0xf0, 0x31, 0xc9, 0xe8, 0xc8, 0x06, 0xff, 0x76, 0xfe, 0x57, 0x56, - 0xff, 0x76, 0xfc, 0xe8, 0x11, 0x07, 0x83, 0xc4, 0x08, 0x89, 0xec, 0x5d, - 0x5f, 0x5e, 0xc2, 0x02, 0x00, 0x50, 0xb8, 0x9c, 0x00, 0xe8, 0x75, 0xff, - 0x58, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x81, 0xec, 0x84, 0x00, 0x50, 0x81, - 0xed, 0x80, 0x00, 0x89, 0xd7, 0x89, 0x5e, 0x78, 0x89, 0xca, 0xc6, 0x46, - 0x7e, 0x00, 0x3d, 0x02, 0x00, 0x75, 0x24, 0xe8, 0xc1, 0x07, 0x89, 0xc1, - 0x85, 0xc0, 0x74, 0x0c, 0x89, 0xd3, 0x89, 0xf8, 0x8b, 0x56, 0x78, 0xff, - 0xd1, 0xe9, 0xee, 0x01, 0xe8, 0x92, 0xd7, 0x89, 0xc3, 0xb8, 0xff, 0xff, - 0xc7, 0x07, 0x09, 0x00, 0xe9, 0xdf, 0x01, 0x30, 0xc0, 0x88, 0x46, 0x7c, - 0x30, 0xe4, 0x50, 0x8d, 0x46, 0x5e, 0x8d, 0x4e, 0x68, 0x50, 0x8d, 0x46, - 0x60, 0x8d, 0x5e, 0x66, 0x50, 0x8b, 0x46, 0x78, 0xe8, 0x13, 0x05, 0x89, - 0x46, 0x7a, 0x3d, 0xff, 0xff, 0x75, 0x03, 0xe9, 0xb8, 0x01, 0x89, 0x46, - 0x72, 0x89, 0xf8, 0xe8, 0xe4, 0x02, 0x05, 0x9a, 0x00, 0x89, 0xc2, 0xe8, - 0x71, 0xc1, 0x89, 0x46, 0x74, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0xa6, 0x01, - 0x89, 0xd1, 0x41, 0x80, 0xe1, 0xfe, 0xe8, 0x45, 0xdc, 0x39, 0xc1, 0x72, - 0x03, 0xe9, 0x80, 0x01, 0x89, 0xc8, 0x2b, 0xe0, 0x89, 0xe0, 0x89, 0xc6, - 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x76, 0x01, 0x8d, 0x46, 0x6e, 0x8d, 0x4e, - 0x64, 0x8d, 0x5e, 0x62, 0x81, 0xea, 0x93, 0x00, 0x50, 0x8d, 0x46, 0x6a, - 0x01, 0xf2, 0x50, 0x89, 0xf8, 0xe8, 0x73, 0x07, 0x8d, 0x46, 0xfc, 0xff, - 0x16, 0x38, 0x08, 0x80, 0x3e, 0x84, 0x07, 0x00, 0x74, 0x2b, 0x8d, 0x56, - 0x6c, 0x8b, 0x46, 0x72, 0xe8, 0x5f, 0x08, 0x85, 0xc0, 0x74, 0x03, 0xe9, - 0x55, 0x01, 0x8b, 0x46, 0x6c, 0xb1, 0x04, 0x89, 0x46, 0x60, 0x8b, 0x46, - 0x72, 0x8b, 0x5e, 0x68, 0xd3, 0xe0, 0x8b, 0x56, 0x6c, 0x50, 0x8c, 0xd9, - 0x31, 0xc0, 0xe8, 0x79, 0x08, 0x8b, 0x46, 0x5e, 0xe8, 0xf0, 0xc0, 0x89, - 0x46, 0x70, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x37, 0x01, 0x8b, 0x46, 0x5e, - 0x40, 0x24, 0xfe, 0x89, 0xc2, 0xe8, 0xc2, 0xdb, 0x39, 0xc2, 0x72, 0x03, - 0xe9, 0x20, 0x01, 0x8b, 0x46, 0x5e, 0x40, 0x24, 0xfe, 0x2b, 0xe0, 0x89, - 0xe0, 0x89, 0xc7, 0x85, 0xc0, 0x75, 0x17, 0xe8, 0x9f, 0xd6, 0x89, 0xc3, - 0xc7, 0x07, 0x02, 0x00, 0xe8, 0x5b, 0xf0, 0x89, 0xc3, 0xc7, 0x46, 0x7a, - 0xff, 0xff, 0xc7, 0x07, 0x0a, 0x00, 0x85, 0xff, 0x75, 0x03, 0xe9, 0xa4, - 0x00, 0x80, 0x3e, 0x82, 0x07, 0x03, 0x72, 0x15, 0x8b, 0x5e, 0x62, 0x80, - 0x3f, 0x00, 0x75, 0x0d, 0x8b, 0x5e, 0x64, 0x80, 0x3f, 0x00, 0x75, 0x05, - 0xc7, 0x46, 0x64, 0xb6, 0x04, 0xff, 0x76, 0x6e, 0x8b, 0x4e, 0x6a, 0x8b, - 0x5e, 0x64, 0x8b, 0x56, 0x62, 0x89, 0xf0, 0xe8, 0x3b, 0x08, 0xe8, 0x54, - 0xd6, 0x89, 0xc3, 0xc7, 0x07, 0x01, 0x00, 0x8b, 0x5e, 0x6e, 0x80, 0x3f, - 0x00, 0x75, 0x03, 0xe9, 0xdb, 0x00, 0xba, 0xb9, 0x04, 0x89, 0xd8, 0xe8, - 0xc9, 0x09, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0xb1, 0x00, 0x89, 0xf0, 0xc7, - 0x46, 0x7a, 0xff, 0xff, 0xe8, 0x08, 0xfe, 0x85, 0xc0, 0x74, 0x46, 0x8b, - 0x46, 0x66, 0xb9, 0x01, 0x00, 0x8b, 0x56, 0x78, 0xe8, 0xf5, 0xc0, 0x89, - 0xfb, 0x89, 0xf0, 0xc7, 0x46, 0x66, 0x00, 0x00, 0xe8, 0xf0, 0x04, 0x31, - 0xc0, 0x50, 0x8a, 0x56, 0x7c, 0x57, 0x30, 0xf6, 0x56, 0x8d, 0x46, 0x5a, - 0xe8, 0x0a, 0xdf, 0x50, 0x80, 0x7e, 0x7c, 0x00, 0x74, 0x6f, 0xb8, 0xbe, - 0x04, 0x50, 0xb8, 0xca, 0x04, 0xe8, 0x88, 0xde, 0x50, 0xff, 0x76, 0xfa, - 0xe8, 0xb0, 0x09, 0x83, 0xc4, 0x0e, 0x89, 0x46, 0x7a, 0x8b, 0x46, 0x70, - 0xe8, 0xb5, 0xc0, 0x8b, 0x46, 0x74, 0xe8, 0xaf, 0xc0, 0x8b, 0x46, 0x66, - 0xe8, 0xa9, 0xc0, 0x80, 0x3e, 0x84, 0x07, 0x00, 0x74, 0x06, 0x8b, 0x46, - 0x60, 0xe8, 0x44, 0x07, 0x8d, 0x46, 0xfc, 0xff, 0x16, 0x3a, 0x08, 0x8b, - 0x46, 0x7a, 0xeb, 0x0e, 0x31, 0xc0, 0xe9, 0x81, 0xfe, 0x8b, 0x46, 0x66, - 0xe8, 0x85, 0xc0, 0xb8, 0xff, 0xff, 0x8d, 0xa6, 0x80, 0x00, 0x5d, 0x5f, - 0x5e, 0xc3, 0x89, 0xc6, 0xe9, 0x74, 0xfe, 0x8b, 0x46, 0x74, 0xe8, 0x6f, - 0xc0, 0xeb, 0xe2, 0x31, 0xc0, 0xe9, 0xe5, 0xfe, 0x89, 0xc7, 0xe9, 0xfd, - 0xfe, 0xb8, 0xc2, 0x04, 0xeb, 0x8f, 0xe8, 0x80, 0xd5, 0xff, 0x76, 0x78, - 0x89, 0xc3, 0x89, 0xf2, 0xc7, 0x07, 0x00, 0x00, 0x8b, 0x46, 0xfa, 0x8b, - 0x4e, 0x60, 0x89, 0xfb, 0xe8, 0x6a, 0xfd, 0xeb, 0x85, 0x89, 0xf0, 0x89, - 0xf2, 0xe8, 0xee, 0x00, 0x01, 0xc2, 0x89, 0x56, 0x76, 0x80, 0x7e, 0x7e, - 0x00, 0x75, 0x03, 0xe9, 0x98, 0x00, 0xe8, 0x50, 0xd5, 0x89, 0xc3, 0xc7, - 0x07, 0x01, 0x00, 0xe8, 0x47, 0xd5, 0x89, 0xc3, 0x83, 0x3f, 0x01, 0x74, - 0x03, 0xe9, 0xba, 0x00, 0xe8, 0x3a, 0xd5, 0xba, 0xd7, 0x04, 0x89, 0xc3, - 0x8b, 0x46, 0x76, 0xc7, 0x07, 0x00, 0x00, 0xe8, 0x10, 0x09, 0xff, 0x76, - 0x78, 0x8b, 0x4e, 0x60, 0x8b, 0x46, 0xfa, 0x89, 0xfb, 0x89, 0xf2, 0xe8, - 0x1b, 0xfd, 0x89, 0x46, 0x7a, 0xe8, 0x15, 0xd5, 0x89, 0xc3, 0x83, 0x3f, - 0x01, 0x75, 0x7b, 0xe8, 0x0b, 0xd5, 0xba, 0xb9, 0x04, 0x89, 0xc3, 0x8b, - 0x46, 0x76, 0xc7, 0x07, 0x00, 0x00, 0xe8, 0xe1, 0x08, 0x89, 0xf0, 0xe8, - 0xd5, 0xfc, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x10, 0xff, 0x8b, 0x46, 0x66, - 0xb9, 0x01, 0x00, 0x8b, 0x56, 0x78, 0xe8, 0xbf, 0xbf, 0x89, 0xfb, 0x89, - 0xf0, 0xc7, 0x46, 0x66, 0x00, 0x00, 0xe8, 0xba, 0x03, 0x31, 0xc0, 0x50, - 0x8a, 0x56, 0x7c, 0x57, 0x30, 0xf6, 0x56, 0x8d, 0x46, 0x5a, 0xe8, 0xd4, - 0xdd, 0x50, 0x80, 0x7e, 0x7c, 0x00, 0x75, 0x03, 0xe9, 0x36, 0xff, 0xe9, - 0xc4, 0xfe, 0xba, 0xd2, 0x04, 0x8b, 0x46, 0x76, 0xe8, 0x97, 0x08, 0xe8, - 0xaf, 0xd4, 0xff, 0x76, 0x78, 0x89, 0xc3, 0x89, 0xf2, 0xc7, 0x07, 0x00, - 0x00, 0x8b, 0x46, 0xfa, 0x8b, 0x4e, 0x60, 0x89, 0xfb, 0xe8, 0x99, 0xfc, - 0x89, 0x46, 0x7a, 0xe9, 0x49, 0xff, 0xe8, 0x90, 0xd4, 0x89, 0xc3, 0x83, - 0x3f, 0x09, 0x75, 0x03, 0xe9, 0x78, 0xff, 0xe9, 0xa3, 0xfe, 0xe8, 0x80, - 0xd4, 0x89, 0xc3, 0x83, 0x3f, 0x09, 0x75, 0x03, 0xe9, 0x39, 0xff, 0xe9, - 0x93, 0xfe, 0x51, 0x57, 0x89, 0xc7, 0x8c, 0xd8, 0x8e, 0xc0, 0x83, 0xc9, - 0xff, 0x33, 0xc0, 0xf2, 0xae, 0xf7, 0xd1, 0x49, 0x89, 0xc8, 0x5f, 0x59, - 0xc3, 0x53, 0x56, 0x89, 0xc3, 0x88, 0xd0, 0x3a, 0x07, 0x74, 0x0a, 0x89, - 0xde, 0x43, 0x80, 0x3c, 0x00, 0x75, 0xf4, 0x31, 0xdb, 0x89, 0xd8, 0x5e, - 0x5b, 0xc3, 0x51, 0x56, 0x57, 0x89, 0xd9, 0x89, 0xd6, 0x89, 0xc7, 0x57, - 0x8c, 0xd8, 0x8e, 0xc0, 0xd1, 0xe9, 0xf3, 0xa5, 0x13, 0xc9, 0xf3, 0xa4, - 0x5f, 0x89, 0xf8, 0x5f, 0x5e, 0x59, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, - 0x83, 0xec, 0x0c, 0x89, 0xd6, 0x89, 0x4e, 0xfc, 0x8d, 0x57, 0x03, 0x80, - 0xe2, 0xfe, 0x39, 0xda, 0x73, 0x69, 0xba, 0xff, 0xff, 0x83, 0xee, 0x02, - 0x8e, 0xc0, 0x26, 0x8b, 0x1c, 0x80, 0xe3, 0xfe, 0x39, 0xda, 0x76, 0x67, - 0x89, 0xf7, 0x29, 0xda, 0x01, 0xdf, 0x8b, 0x5e, 0xfc, 0x89, 0x7e, 0xfe, - 0x89, 0x17, 0x8b, 0x5e, 0xfe, 0x8e, 0xc0, 0x26, 0x83, 0x3f, 0xff, 0x74, - 0x48, 0x26, 0xf6, 0x07, 0x01, 0x75, 0x4b, 0x8b, 0x7e, 0xfe, 0x26, 0x8b, - 0x0d, 0x26, 0x8b, 0x7d, 0x04, 0x89, 0x7e, 0xfa, 0x8b, 0x7e, 0xfe, 0x8c, - 0xda, 0x26, 0x8b, 0x7d, 0x02, 0x31, 0xdb, 0x89, 0x7e, 0xf8, 0x39, 0xd0, - 0x75, 0x38, 0x8b, 0x1e, 0x1e, 0x06, 0x8e, 0xc0, 0x26, 0x83, 0x7f, 0x04, - 0x00, 0x74, 0x2b, 0x39, 0xf3, 0x76, 0x1e, 0x8e, 0xc0, 0x26, 0x8b, 0x5f, - 0x04, 0xeb, 0xeb, 0x83, 0xfa, 0x06, 0x73, 0x95, 0xba, 0x06, 0x00, 0xeb, - 0x90, 0xb8, 0x02, 0x00, 0xe9, 0x9b, 0x00, 0xe9, 0xa3, 0x00, 0xe9, 0x9b, - 0x00, 0x26, 0x8b, 0x17, 0x01, 0xda, 0x39, 0xd6, 0x73, 0xd9, 0x8e, 0xc0, - 0x26, 0x8b, 0x57, 0x06, 0x3b, 0x56, 0xfe, 0x75, 0x0a, 0x89, 0xd7, 0x26, - 0x8b, 0x55, 0x02, 0x26, 0x89, 0x57, 0x06, 0x8b, 0x7e, 0xfc, 0x3b, 0x0d, - 0x73, 0x2b, 0x8b, 0x7e, 0xf8, 0x8e, 0xc0, 0x8b, 0x56, 0xfa, 0x26, 0x89, - 0x55, 0x04, 0x89, 0xd7, 0x8b, 0x56, 0xf8, 0x26, 0x89, 0x55, 0x02, 0x26, - 0x01, 0x0c, 0x26, 0xff, 0x4f, 0x0e, 0x8b, 0x5e, 0xfc, 0x3b, 0x0f, 0x73, - 0x4b, 0x01, 0x4e, 0xfe, 0x29, 0x0f, 0xe9, 0x51, 0xff, 0x89, 0xca, 0x2b, - 0x15, 0x89, 0x56, 0xf6, 0x83, 0xfa, 0x06, 0x72, 0xc9, 0x8b, 0x15, 0x01, - 0x56, 0xfe, 0x8e, 0xc0, 0x8b, 0x56, 0xf6, 0x8b, 0x5e, 0xfe, 0x8b, 0x7e, - 0xf8, 0x26, 0x89, 0x17, 0x26, 0x89, 0x7f, 0x02, 0x8b, 0x7e, 0xfa, 0x26, - 0x89, 0x7f, 0x04, 0x8b, 0x5e, 0xf8, 0x8b, 0x7e, 0xfe, 0x26, 0x89, 0x7f, - 0x04, 0x8b, 0x5e, 0xfa, 0x26, 0x89, 0x7f, 0x02, 0x8b, 0x5e, 0xfc, 0x8b, - 0x07, 0x26, 0x01, 0x04, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, - 0xb8, 0x01, 0x00, 0xeb, 0xf5, 0x89, 0xd9, 0x29, 0xd1, 0x83, 0xf9, 0x06, - 0x72, 0xea, 0x89, 0xd7, 0x83, 0xcf, 0x01, 0x26, 0x89, 0x3c, 0x89, 0xf7, - 0x80, 0xc9, 0x01, 0x01, 0xd7, 0x31, 0xdb, 0x89, 0x7e, 0xf4, 0x8c, 0xda, - 0x26, 0x89, 0x0d, 0x39, 0xd0, 0x75, 0x22, 0x8b, 0x1e, 0x1e, 0x06, 0x8e, - 0xc0, 0x26, 0x83, 0x7f, 0x04, 0x00, 0x74, 0x15, 0x39, 0xf3, 0x76, 0x08, - 0x8e, 0xc0, 0x26, 0x8b, 0x5f, 0x04, 0xeb, 0xeb, 0x26, 0x8b, 0x17, 0x01, - 0xda, 0x39, 0xd6, 0x73, 0xef, 0x8b, 0x56, 0xf4, 0x8e, 0xc0, 0x83, 0xc2, - 0x02, 0x26, 0xff, 0x47, 0x0c, 0xe8, 0xbd, 0x06, 0xeb, 0x9a, 0x51, 0x89, - 0xd1, 0x89, 0xda, 0x89, 0xc3, 0xb4, 0x1a, 0xcd, 0x21, 0x8b, 0xd3, 0xb4, - 0x4e, 0xcd, 0x21, 0xe8, 0x0e, 0xf2, 0x59, 0xc3, 0x52, 0x89, 0xc2, 0xb4, - 0x1a, 0xcd, 0x21, 0xb4, 0x4f, 0xcd, 0x21, 0xe8, 0xfe, 0xf1, 0x5a, 0xc3, - 0x31, 0xc0, 0xc3, 0x53, 0x56, 0x89, 0xc3, 0x89, 0xd6, 0x8a, 0x04, 0x88, - 0x07, 0x84, 0xc0, 0x74, 0x04, 0x43, 0x46, 0xeb, 0xf4, 0x89, 0xd8, 0x5e, - 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0x53, 0x51, 0x85, 0xd2, - 0x75, 0x04, 0x8b, 0x16, 0xfe, 0x0a, 0x31, 0xf6, 0x85, 0xd2, 0x74, 0x12, - 0x89, 0xd3, 0x8b, 0x07, 0x85, 0xc0, 0x74, 0x0a, 0xe8, 0xc3, 0xfd, 0x40, - 0x43, 0x43, 0x01, 0xc6, 0xeb, 0xf0, 0x46, 0x83, 0x7e, 0x0c, 0x00, 0x74, - 0x0d, 0x8b, 0x5e, 0xfe, 0x8b, 0x07, 0x46, 0x46, 0xe8, 0xab, 0xfd, 0x40, - 0x01, 0xc6, 0x83, 0xc6, 0x0f, 0x83, 0xe6, 0xf0, 0x83, 0xc6, 0x0f, 0x8b, - 0x0e, 0xaa, 0x07, 0x89, 0xf0, 0xc7, 0x06, 0xaa, 0x07, 0x10, 0x00, 0xe8, - 0x25, 0xbc, 0x89, 0xc3, 0x85, 0xc0, 0x75, 0x27, 0x89, 0xf0, 0xe8, 0x1a, - 0xbc, 0x89, 0xc3, 0x85, 0xc0, 0x75, 0x1c, 0xe8, 0xef, 0xd1, 0x89, 0xc3, - 0xc7, 0x07, 0x05, 0x00, 0xe8, 0xab, 0xeb, 0x89, 0xc3, 0x89, 0x0e, 0xaa, - 0x07, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x08, 0x00, 0xe9, 0xb0, 0x00, 0x8b, - 0x7e, 0xfc, 0x89, 0x1d, 0x83, 0xc3, 0x0f, 0x89, 0x0e, 0xaa, 0x07, 0x80, - 0xe3, 0xf0, 0xb1, 0x04, 0x89, 0xdf, 0xd3, 0xef, 0x8c, 0xd8, 0x89, 0xf9, - 0x8b, 0x7e, 0x08, 0x01, 0xc1, 0x89, 0x0d, 0x8b, 0x7e, 0xfa, 0x83, 0xee, - 0x0f, 0x89, 0x1d, 0x85, 0xd2, 0x74, 0x16, 0x89, 0xd7, 0x8b, 0x05, 0x85, - 0xc0, 0x74, 0x0e, 0x89, 0xc2, 0x89, 0xd8, 0xe8, 0x2d, 0xff, 0x89, 0xc3, - 0x47, 0x47, 0x43, 0xeb, 0xec, 0xc6, 0x07, 0x00, 0x43, 0x83, 0x7e, 0x0c, - 0x00, 0x74, 0x12, 0xc6, 0x07, 0x01, 0x43, 0x8b, 0x7e, 0xfe, 0xc6, 0x07, - 0x00, 0x8d, 0x47, 0x01, 0x8b, 0x15, 0xe8, 0x5d, 0x05, 0x8b, 0x5e, 0xfe, - 0x31, 0xd2, 0x83, 0x3f, 0x00, 0x74, 0x17, 0x43, 0x43, 0x83, 0x3f, 0x00, - 0x74, 0x10, 0x85, 0xd2, 0x74, 0x01, 0x42, 0x8b, 0x07, 0xe8, 0xea, 0xfc, - 0x43, 0x43, 0x01, 0xc2, 0xeb, 0xeb, 0x83, 0xfa, 0x7e, 0x76, 0x1f, 0xe8, - 0x4f, 0xd1, 0x89, 0xc3, 0xc7, 0x07, 0x02, 0x00, 0xe8, 0x0b, 0xeb, 0x89, - 0xc3, 0xc7, 0x07, 0x0a, 0x00, 0x8b, 0x5e, 0xfc, 0x8b, 0x07, 0xe8, 0x13, - 0xbc, 0xb8, 0xff, 0xff, 0xeb, 0x0d, 0x8b, 0x5e, 0x0a, 0xb1, 0x04, 0x89, - 0xf0, 0xc7, 0x07, 0x90, 0x00, 0xd3, 0xe8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0xc2, 0x06, 0x00, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0x89, 0xd6, 0x89, - 0x5e, 0xfe, 0x85, 0xc9, 0x75, 0x01, 0x43, 0x83, 0x3c, 0x00, 0x74, 0x21, - 0x46, 0x46, 0x83, 0x3c, 0x00, 0x74, 0x1a, 0x89, 0xd8, 0x8b, 0x14, 0xe8, - 0x8d, 0xfe, 0x89, 0xc7, 0x46, 0x46, 0x89, 0xc3, 0x83, 0x3c, 0x00, 0x74, - 0x08, 0x8d, 0x5d, 0x01, 0xc6, 0x05, 0x20, 0xeb, 0xe6, 0x85, 0xc9, 0x74, - 0x05, 0xc6, 0x07, 0x00, 0xeb, 0x0f, 0x88, 0xda, 0xc6, 0x07, 0x0d, 0x2a, - 0x56, 0xfe, 0x8b, 0x5e, 0xfe, 0xfe, 0xca, 0x88, 0x17, 0x89, 0xec, 0x5d, - 0x5f, 0x5e, 0xc3, 0x55, 0x8b, 0xec, 0x56, 0x57, 0x52, 0x51, 0x53, 0x06, - 0x1e, 0x8c, 0xd0, 0x8e, 0xd8, 0x8b, 0x46, 0x0a, 0xa3, 0x1e, 0x08, 0x8b, - 0x46, 0x08, 0xa3, 0x20, 0x08, 0x8c, 0x1e, 0x22, 0x08, 0x8c, 0x1e, 0x2a, - 0x08, 0x1e, 0x07, 0x8b, 0xf0, 0x46, 0xbf, 0xfe, 0x07, 0x89, 0x3e, 0x24, - 0x08, 0x8c, 0x1e, 0x26, 0x08, 0xb0, 0x01, 0xb4, 0x29, 0xcd, 0x21, 0xbf, - 0x0e, 0x08, 0x89, 0x3e, 0x28, 0x08, 0x8c, 0x1e, 0x2a, 0x08, 0xb0, 0x01, - 0xb4, 0x29, 0xcd, 0x21, 0x55, 0x06, 0x1e, 0x8c, 0x16, 0x2e, 0x08, 0x89, - 0x26, 0x2c, 0x08, 0x8c, 0x1e, 0x34, 0x08, 0x80, 0x3e, 0x82, 0x07, 0x02, - 0x75, 0x10, 0xbf, 0x2e, 0x00, 0x8b, 0x35, 0x89, 0x36, 0x30, 0x08, 0x8b, - 0x75, 0x02, 0x89, 0x36, 0x32, 0x08, 0xbb, 0x1e, 0x08, 0x83, 0x7e, 0x04, - 0x01, 0x75, 0x06, 0xb0, 0x04, 0x33, 0xc9, 0xeb, 0x02, 0x32, 0xc0, 0xf8, - 0x50, 0xb4, 0x0b, 0xcd, 0x21, 0x58, 0xc7, 0x06, 0x8c, 0x07, 0x01, 0x00, - 0x8b, 0x56, 0x06, 0x50, 0xff, 0x1e, 0x97, 0x07, 0x58, 0xb4, 0x4b, 0xcd, - 0x21, 0x50, 0x9f, 0x5b, 0x50, 0xe8, 0xa5, 0xca, 0x58, 0x8e, 0x16, 0x2e, - 0x08, 0x8b, 0x26, 0x2c, 0x08, 0x8e, 0x1e, 0x34, 0x08, 0x80, 0x3e, 0x82, - 0x07, 0x02, 0x75, 0x10, 0xbf, 0x2e, 0x00, 0x8b, 0x36, 0x32, 0x08, 0x89, - 0x75, 0x02, 0x8b, 0x36, 0x30, 0x08, 0x89, 0x35, 0x9e, 0x93, 0x1f, 0xc7, - 0x06, 0x8c, 0x07, 0x00, 0x00, 0x07, 0x5d, 0x72, 0x04, 0xb4, 0x4d, 0xcd, - 0x21, 0x19, 0xd2, 0xe8, 0x3e, 0xe9, 0x1f, 0x07, 0x5b, 0x59, 0x5a, 0x5f, - 0x5e, 0x5d, 0xc3, 0xa1, 0x36, 0x08, 0xc3, 0x56, 0x57, 0x89, 0xd6, 0x89, - 0xdf, 0x85, 0xc0, 0x74, 0x39, 0x89, 0xc3, 0x89, 0x17, 0x89, 0xca, 0x29, - 0xfa, 0x81, 0xfa, 0x93, 0x00, 0x72, 0x03, 0xba, 0x92, 0x00, 0x89, 0xf8, - 0xe8, 0x07, 0x04, 0x89, 0xc1, 0x89, 0xc3, 0x89, 0xfa, 0x89, 0xf0, 0xe8, - 0x24, 0x04, 0x89, 0xca, 0x89, 0xf0, 0x89, 0xf7, 0xe8, 0x37, 0x04, 0x89, - 0xca, 0x01, 0xc7, 0x89, 0xf0, 0xc6, 0x05, 0x00, 0xe8, 0x2b, 0x04, 0x01, - 0xc6, 0x46, 0x89, 0xf0, 0x5f, 0x5e, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, - 0x83, 0xec, 0x06, 0x89, 0xc6, 0x89, 0x56, 0xfc, 0x89, 0xdf, 0x89, 0x4e, - 0xfe, 0x89, 0xc3, 0x8a, 0x04, 0x3c, 0x2f, 0x75, 0x39, 0x8a, 0x44, 0x01, - 0x3c, 0x2f, 0x75, 0x5f, 0x83, 0xc6, 0x02, 0x8a, 0x04, 0x84, 0xc0, 0x75, - 0x5c, 0x8b, 0x56, 0xfc, 0x89, 0xf1, 0x89, 0xf8, 0xe8, 0x84, 0xff, 0x89, - 0x46, 0xfc, 0x89, 0x76, 0xfa, 0x89, 0xf3, 0x31, 0xff, 0x89, 0xf0, 0xe8, - 0x03, 0xec, 0x89, 0xc2, 0x85, 0xc0, 0x74, 0x52, 0x3d, 0x2e, 0x00, 0x75, - 0x4f, 0x89, 0xf7, 0x46, 0xeb, 0xeb, 0x3c, 0x5c, 0x74, 0xc3, 0x80, 0x3c, - 0x00, 0x74, 0x43, 0x8a, 0x44, 0x01, 0x3c, 0x3a, 0x75, 0x3c, 0x85, 0xff, - 0x74, 0x14, 0x8b, 0x5e, 0xfc, 0x89, 0x1d, 0x8a, 0x14, 0xc6, 0x47, 0x02, - 0x00, 0x88, 0x17, 0x83, 0x46, 0xfc, 0x03, 0x88, 0x47, 0x01, 0x83, 0xc6, - 0x02, 0xeb, 0xb7, 0x3c, 0x5c, 0x74, 0x9d, 0xeb, 0xd1, 0x3c, 0x2f, 0x74, - 0xa0, 0x3c, 0x5c, 0x74, 0x9c, 0x3c, 0x2e, 0x74, 0x98, 0x89, 0xf0, 0xe8, - 0xed, 0xeb, 0x89, 0xc6, 0xeb, 0x89, 0xeb, 0x2d, 0xeb, 0x11, 0x85, 0xff, - 0x74, 0x94, 0x8b, 0x5e, 0xfc, 0x89, 0x1d, 0xff, 0x46, 0xfc, 0xc6, 0x07, - 0x00, 0xeb, 0x87, 0x89, 0xf0, 0xe8, 0xcf, 0xeb, 0x89, 0xc6, 0x83, 0xfa, - 0x2f, 0x75, 0x06, 0x89, 0x76, 0xfa, 0xe9, 0x7a, 0xff, 0x83, 0xfa, 0x5c, - 0x74, 0xf5, 0xe9, 0x74, 0xff, 0x8b, 0x4e, 0xfa, 0x8b, 0x56, 0xfc, 0x8b, - 0x46, 0xfe, 0xe8, 0xe2, 0xfe, 0x89, 0x46, 0xfc, 0x85, 0xff, 0x75, 0x02, - 0x89, 0xf7, 0x8b, 0x5e, 0xfa, 0x8b, 0x56, 0xfc, 0x8b, 0x46, 0x08, 0x89, - 0xf9, 0xe8, 0xcb, 0xfe, 0x89, 0xc2, 0x89, 0xf1, 0x89, 0xfb, 0x8b, 0x46, - 0x0a, 0xe8, 0xbf, 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x04, 0x00, - 0xc3, 0x00, 0x53, 0x52, 0x8b, 0xd8, 0xb4, 0x48, 0xcd, 0x21, 0x87, 0xd3, - 0x72, 0x06, 0x8b, 0xd0, 0x2b, 0xc0, 0xeb, 0x03, 0xe8, 0x0d, 0xee, 0x89, - 0x17, 0x5a, 0x5b, 0xc3, 0x06, 0x8e, 0xc0, 0xb4, 0x49, 0xcd, 0x21, 0xe8, - 0xfe, 0xed, 0x07, 0xc3, 0x06, 0x53, 0x8e, 0xc2, 0x8b, 0xd8, 0xb4, 0x4a, - 0xcd, 0x21, 0x8b, 0xd3, 0x5b, 0x73, 0x02, 0x89, 0x17, 0xe8, 0xe8, 0xed, - 0x07, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xc7, 0x8b, 0x46, 0x08, - 0x89, 0xde, 0x8e, 0xc2, 0x1e, 0x57, 0x91, 0x8e, 0xd8, 0xd1, 0xe9, 0xf3, - 0xa5, 0x13, 0xc9, 0xf3, 0xa4, 0x5f, 0x1f, 0x89, 0xf8, 0x5d, 0x5f, 0x5e, - 0xc2, 0x02, 0x00, 0x53, 0x89, 0xd3, 0x3d, 0x2f, 0x00, 0x75, 0x0b, 0x83, - 0x3f, 0x00, 0x75, 0x02, 0x89, 0x07, 0x8b, 0x07, 0x5b, 0xc3, 0x3d, 0x5c, - 0x00, 0x74, 0xf0, 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, - 0x04, 0x50, 0x53, 0x89, 0xcb, 0xc7, 0x46, 0xfc, 0x00, 0x00, 0x89, 0x46, - 0xfe, 0x85, 0xd2, 0x74, 0x44, 0x89, 0xd6, 0x8a, 0x04, 0x84, 0xc0, 0x74, - 0x3c, 0x3c, 0x5c, 0x74, 0x03, 0xe9, 0x07, 0x01, 0x3a, 0x44, 0x01, 0x75, - 0xf8, 0x8b, 0x7e, 0xfa, 0x57, 0x8a, 0x04, 0x88, 0x05, 0x84, 0xc0, 0x74, - 0x10, 0x8a, 0x44, 0x01, 0x83, 0xc6, 0x02, 0x88, 0x45, 0x01, 0x83, 0xc7, - 0x02, 0x84, 0xc0, 0x75, 0xe8, 0x5f, 0x89, 0xd7, 0x8c, 0xd8, 0x8e, 0xc0, - 0x83, 0xc9, 0xff, 0x33, 0xc0, 0xf2, 0xae, 0xf7, 0xd1, 0x49, 0x01, 0x4e, - 0xfa, 0x8b, 0x76, 0xfa, 0x8b, 0x46, 0xf8, 0xc6, 0x04, 0x00, 0x85, 0xc0, - 0x74, 0x62, 0x89, 0xc6, 0x80, 0x3c, 0x00, 0x74, 0x5b, 0x8b, 0x46, 0xf8, - 0x8d, 0x56, 0xfc, 0xe8, 0x4f, 0xea, 0xe8, 0x6a, 0xff, 0x8b, 0x56, 0xfa, - 0xe8, 0x89, 0x02, 0x8b, 0x46, 0xfa, 0x8b, 0x76, 0xfa, 0xe8, 0x95, 0x02, - 0x01, 0xc6, 0x8b, 0x46, 0xfa, 0xc6, 0x04, 0x00, 0xe8, 0x70, 0xea, 0x89, - 0x46, 0xfa, 0x8b, 0x46, 0xf8, 0xe8, 0x67, 0xea, 0x89, 0xc6, 0x89, 0x46, - 0xf8, 0x80, 0x3c, 0x00, 0x75, 0xc7, 0x83, 0x7e, 0xfc, 0x00, 0x75, 0x05, - 0xc7, 0x46, 0xfc, 0x5c, 0x00, 0x8b, 0x56, 0xfa, 0x8b, 0x46, 0xfe, 0xe8, - 0x87, 0x02, 0x89, 0xc6, 0x8a, 0x04, 0x30, 0xe4, 0x3b, 0x46, 0xfc, 0x75, - 0x5c, 0xff, 0x4e, 0xfa, 0x83, 0x7e, 0xfc, 0x00, 0x75, 0x05, 0xc7, 0x46, - 0xfc, 0x5c, 0x00, 0x8b, 0x76, 0xfa, 0x46, 0x85, 0xdb, 0x74, 0x68, 0x89, - 0xd8, 0x8d, 0x56, 0xfc, 0xe8, 0xe2, 0xe9, 0xe8, 0xfd, 0xfe, 0x3b, 0x46, - 0xfc, 0x75, 0x5a, 0x80, 0x3f, 0x00, 0x74, 0x65, 0x89, 0xd8, 0x8d, 0x56, - 0xfc, 0xe8, 0xcd, 0xe9, 0xe8, 0xe8, 0xfe, 0x8b, 0x56, 0xfa, 0xe8, 0x07, - 0x02, 0x8b, 0x46, 0xfa, 0x8b, 0x76, 0xfa, 0xe8, 0x13, 0x02, 0x01, 0xc6, - 0x8b, 0x46, 0xfa, 0xc6, 0x04, 0x00, 0xe8, 0xee, 0xe9, 0x89, 0x46, 0xfa, - 0x89, 0xd8, 0xe8, 0xe6, 0xe9, 0x89, 0xc3, 0xeb, 0xca, 0x8b, 0x76, 0xfa, - 0x8a, 0x46, 0xfc, 0x88, 0x04, 0xeb, 0x9d, 0x89, 0xd6, 0x8a, 0x04, 0x8b, - 0x76, 0xfa, 0xff, 0x46, 0xfa, 0x88, 0x04, 0x8b, 0x76, 0xfa, 0xff, 0x46, - 0xfa, 0xc6, 0x04, 0x3a, 0xe9, 0x16, 0xff, 0xeb, 0x12, 0x8b, 0x7e, 0xfa, - 0x8a, 0x05, 0x98, 0x3b, 0x46, 0xfc, 0x75, 0x9b, 0x89, 0x76, 0xfa, 0xeb, - 0x96, 0xeb, 0x0e, 0x8b, 0x5e, 0xfa, 0x8a, 0x07, 0x98, 0x3b, 0x46, 0xfc, - 0x75, 0x03, 0x89, 0x76, 0xfa, 0x8b, 0x46, 0x08, 0x85, 0xc0, 0x74, 0x2d, - 0x89, 0xc3, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x25, 0x3c, 0x2e, 0x75, 0x16, - 0x8b, 0x5e, 0x08, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x18, 0x8b, 0x5e, 0xfa, - 0xff, 0x46, 0x08, 0xff, 0x46, 0xfa, 0x88, 0x07, 0xeb, 0xea, 0x8b, 0x5e, - 0xfa, 0xff, 0x46, 0xfa, 0xc6, 0x07, 0x2e, 0xeb, 0xdf, 0x8b, 0x5e, 0xfa, - 0xc6, 0x07, 0x00, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x02, 0x00, 0x53, - 0x56, 0x89, 0xc3, 0x89, 0xd6, 0x8a, 0x07, 0x8a, 0x24, 0x3c, 0x41, 0x72, - 0x06, 0x3c, 0x5a, 0x77, 0x02, 0x04, 0x20, 0x80, 0xfc, 0x41, 0x72, 0x08, - 0x80, 0xfc, 0x5a, 0x77, 0x03, 0x80, 0xc4, 0x20, 0x38, 0xe0, 0x75, 0x08, - 0x84, 0xe4, 0x74, 0x04, 0x43, 0x46, 0xeb, 0xd9, 0x88, 0xc3, 0x88, 0xe0, - 0x30, 0xff, 0x30, 0xe4, 0x29, 0xc3, 0x89, 0xd8, 0x5e, 0x5b, 0xc3, 0x53, - 0x51, 0x52, 0x55, 0x89, 0xe5, 0x8b, 0x46, 0x0a, 0x8d, 0x5e, 0x0e, 0x8b, - 0x56, 0x0c, 0x8b, 0x0e, 0xfe, 0x0a, 0xe8, 0x50, 0xf4, 0x5d, 0x5a, 0x59, - 0x5b, 0xc3, 0x56, 0x57, 0x89, 0xc7, 0x89, 0xd6, 0x57, 0xf7, 0xc6, 0x01, - 0x00, 0x74, 0x08, 0xac, 0x88, 0x05, 0x47, 0x3c, 0x00, 0x74, 0x26, 0x8b, - 0x04, 0x84, 0xc0, 0x74, 0x1e, 0x89, 0x05, 0x83, 0xc7, 0x02, 0x84, 0xe4, - 0x74, 0x17, 0x8b, 0x44, 0x02, 0x84, 0xc0, 0x74, 0x0e, 0x89, 0x05, 0x83, - 0xc6, 0x04, 0x83, 0xc7, 0x02, 0x84, 0xe4, 0x75, 0xde, 0x74, 0x02, 0x88, - 0x05, 0x58, 0x5f, 0x5e, 0xc3, 0x53, 0x51, 0x89, 0xc1, 0x89, 0xd0, 0x83, - 0xfa, 0xff, 0x74, 0x09, 0x8c, 0xda, 0x39, 0xd1, 0x75, 0x06, 0xe8, 0xa3, - 0xb6, 0x59, 0x5b, 0xc3, 0x89, 0xca, 0x31, 0xdb, 0xe8, 0x0d, 0xc7, 0x59, - 0x5b, 0xc3, 0x53, 0x51, 0x89, 0xc3, 0x31, 0xc9, 0x89, 0xd8, 0xe8, 0x25, - 0xe8, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x77, 0x05, 0x89, 0xc8, 0x59, - 0x5b, 0xc3, 0x89, 0xd8, 0xe8, 0xa2, 0x00, 0x39, 0xc2, 0x72, 0xf2, 0x41, - 0x29, 0xc2, 0x01, 0xc3, 0xeb, 0xde, 0x51, 0x56, 0x89, 0xc1, 0x89, 0xd6, - 0x89, 0xda, 0x89, 0xf0, 0xe8, 0x0f, 0x00, 0x89, 0xc3, 0x89, 0xf2, 0x43, - 0x89, 0xc8, 0xe8, 0x29, 0x01, 0x89, 0xc8, 0x5e, 0x59, 0xc3, 0x53, 0x51, - 0x56, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc3, 0x89, 0xd1, 0x31, - 0xd2, 0x89, 0xd8, 0xe8, 0xd8, 0xe7, 0x85, 0xc0, 0x75, 0x42, 0x85, 0xc9, - 0x76, 0x3e, 0x83, 0x3e, 0xf8, 0x07, 0x00, 0x74, 0x40, 0x8a, 0x07, 0xc6, - 0x46, 0xff, 0x00, 0x88, 0x46, 0xfe, 0x8b, 0x76, 0xfe, 0x8a, 0x84, 0x07, - 0x0b, 0x24, 0x01, 0xc6, 0x46, 0xff, 0x00, 0x88, 0x46, 0xfe, 0x8b, 0x46, - 0xfe, 0x85, 0xc0, 0x74, 0x20, 0x80, 0x7f, 0x01, 0x00, 0x74, 0x11, 0x89, - 0xd8, 0xe8, 0x2d, 0x00, 0x01, 0xc2, 0x89, 0xd8, 0xe8, 0x0c, 0xe8, 0x49, - 0x89, 0xc3, 0xeb, 0xb5, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5e, 0x59, 0x5b, - 0xc3, 0x42, 0xeb, 0xea, 0x53, 0x89, 0xd3, 0xf6, 0xc4, 0xff, 0x74, 0x09, - 0x88, 0x27, 0x88, 0x47, 0x01, 0x89, 0xd8, 0x5b, 0xc3, 0x88, 0x07, 0xeb, - 0xf8, 0x53, 0x89, 0xc3, 0x83, 0x3e, 0xf8, 0x07, 0x00, 0x74, 0x15, 0x8a, - 0x1f, 0x30, 0xe7, 0x8a, 0x87, 0x07, 0x0b, 0x24, 0x01, 0x30, 0xe4, 0x85, - 0xc0, 0x74, 0x05, 0xb8, 0x02, 0x00, 0x5b, 0xc3, 0xb8, 0x01, 0x00, 0x5b, - 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x8b, - 0x3e, 0xf8, 0x07, 0x89, 0xc1, 0x39, 0xd0, 0x73, 0x48, 0x89, 0xd3, 0x4b, - 0x85, 0xff, 0x75, 0x45, 0x4b, 0x39, 0xd9, 0x77, 0x14, 0x85, 0xff, 0x74, - 0x10, 0x8a, 0x07, 0x30, 0xe4, 0x89, 0xc6, 0x8a, 0x84, 0x07, 0x0b, 0x24, - 0x01, 0x85, 0xc0, 0x75, 0xe7, 0x89, 0xd0, 0x29, 0xd8, 0xb1, 0x0f, 0x89, - 0xc3, 0xd3, 0xf8, 0x31, 0xc3, 0x29, 0xc3, 0x83, 0xe3, 0x01, 0x89, 0xd1, - 0x31, 0xc3, 0x49, 0x29, 0xc3, 0x29, 0xd9, 0x89, 0xc8, 0x89, 0x3e, 0xf8, - 0x07, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x31, 0xc1, 0xeb, - 0xee, 0x8a, 0x07, 0xc6, 0x46, 0xff, 0x00, 0x88, 0x46, 0xfe, 0x8b, 0x76, - 0xfe, 0x8a, 0x84, 0x07, 0x0b, 0x24, 0x01, 0xc6, 0x46, 0xff, 0x00, 0x88, - 0x46, 0xfe, 0x8b, 0x46, 0xfe, 0x85, 0xc0, 0x74, 0x9b, 0x8d, 0x4f, 0xff, - 0xeb, 0xc9, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0x89, 0xd6, 0x89, - 0xc7, 0x85, 0xdb, 0x76, 0x06, 0x8a, 0x04, 0x84, 0xc0, 0x75, 0x33, 0x80, - 0x3c, 0x00, 0x74, 0x20, 0x3b, 0x7e, 0xfe, 0x76, 0x1b, 0x83, 0x3e, 0xf8, - 0x07, 0x00, 0x74, 0x14, 0x8a, 0x44, 0xff, 0x30, 0xe4, 0x89, 0xc6, 0x8a, - 0x84, 0x07, 0x0b, 0x24, 0x01, 0x85, 0xc0, 0x74, 0x03, 0x88, 0x65, 0xff, - 0x85, 0xdb, 0x77, 0x11, 0x8b, 0x46, 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0x59, 0xc3, 0x46, 0x4b, 0x88, 0x05, 0x47, 0xeb, 0xbc, 0x89, 0xd9, 0x30, - 0xc0, 0x57, 0x1e, 0x07, 0x8a, 0xe0, 0xd1, 0xe9, 0xf3, 0xab, 0x13, 0xc9, - 0xf3, 0xaa, 0x5f, 0xeb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9d, 0xf8, 0xc3, 0x53, 0x89, 0xc3, 0x8c, 0xc8, 0x8e, 0xda, 0x89, 0x47, + 0x02, 0x8c, 0xd8, 0x8e, 0xda, 0x89, 0x47, 0x06, 0x8c, 0xc0, 0x8e, 0xda, + 0x89, 0x07, 0x8c, 0xd0, 0x8e, 0xda, 0x89, 0x47, 0x04, 0x5b, 0xcb, 0x53, + 0x89, 0xc3, 0x8e, 0xda, 0x8a, 0x07, 0x84, 0xc0, 0x75, 0x05, 0xb8, 0x01, + 0x00, 0x5b, 0xcb, 0x30, 0xe4, 0x0e, 0x3e, 0xe8, 0x1b, 0x04, 0x85, 0xc0, + 0x74, 0x0d, 0x8e, 0xda, 0x80, 0x7f, 0x01, 0x00, 0x75, 0x05, 0xb8, 0x02, + 0x00, 0x5b, 0xcb, 0x31, 0xc0, 0x5b, 0xcb, 0x53, 0x51, 0x89, 0xc3, 0x89, + 0xd1, 0x8e, 0xda, 0x8a, 0x07, 0x30, 0xe4, 0x89, 0xc2, 0x0e, 0x3e, 0xe8, + 0xf3, 0x03, 0x85, 0xc0, 0x74, 0x09, 0x8e, 0xd9, 0x88, 0xd6, 0x8a, 0x47, + 0x01, 0x88, 0xc2, 0x89, 0xd0, 0x59, 0x5b, 0xcb, 0x52, 0xf6, 0xc4, 0xff, + 0x74, 0x16, 0xba, 0x75, 0x07, 0x8e, 0xda, 0x81, 0x3e, 0xa0, 0x08, 0xa4, + 0x03, 0x74, 0x02, 0x5a, 0xcb, 0x0e, 0x3e, 0xe8, 0xaa, 0x07, 0x5a, 0xcb, + 0x0e, 0xe8, 0xb2, 0x07, 0x90, 0x5a, 0xcb, 0x53, 0x89, 0xc3, 0x8e, 0xda, + 0x8a, 0x07, 0x30, 0xe4, 0x0e, 0xe8, 0xb1, 0x03, 0x90, 0x85, 0xc0, 0x74, + 0x0d, 0x8e, 0xda, 0x80, 0x7f, 0x01, 0x00, 0x74, 0x05, 0x8d, 0x47, 0x02, + 0x5b, 0xcb, 0x8d, 0x47, 0x01, 0x5b, 0xcb, 0x52, 0x55, 0x89, 0xe5, 0xba, + 0x75, 0x07, 0x8e, 0xda, 0xff, 0x36, 0xc8, 0x0d, 0xff, 0x36, 0xc6, 0x0d, + 0xff, 0x76, 0x0a, 0xff, 0x76, 0x08, 0x0e, 0xe8, 0x7e, 0x07, 0x90, 0x5d, + 0x5a, 0xca, 0x04, 0x00, 0xc3, 0x89, 0xc3, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0xba, 0xff, 0x00, 0xff, 0x16, 0x94, 0x08, 0xb8, 0x10, 0x00, 0xe8, 0x32, + 0xe3, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xff, 0x16, 0x94, 0x08, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0xff, 0x16, 0x96, 0x08, 0x89, 0xd8, 0xe9, 0xb7, 0xcb, + 0x89, 0xc2, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xff, 0x16, 0x94, 0x08, 0xb8, + 0x75, 0x07, 0x8e, 0xd8, 0xff, 0x16, 0x96, 0x08, 0x89, 0xd0, 0xe9, 0x9e, + 0xcb, 0x00, 0x53, 0x51, 0x52, 0x89, 0xc2, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0x3b, 0x16, 0x2a, 0x08, 0x72, 0x43, 0x89, 0xd3, 0xb1, 0x04, 0x83, 0xc3, + 0x0f, 0xd3, 0xeb, 0x85, 0xdb, 0x75, 0x03, 0xbb, 0x00, 0x10, 0xb9, 0x75, + 0x07, 0x8e, 0xd9, 0x80, 0x3e, 0x26, 0x08, 0x00, 0x75, 0x0b, 0x8c, 0xd0, + 0x2b, 0x06, 0x22, 0x08, 0x01, 0xc3, 0xa1, 0x22, 0x08, 0x8e, 0xc0, 0xb4, + 0x4a, 0xcd, 0x21, 0x19, 0xdb, 0x85, 0xdb, 0x7c, 0x10, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xa1, 0x20, 0x08, 0x89, 0x16, 0x20, 0x08, 0x5a, 0x59, 0x5b, + 0xcb, 0x0e, 0x3e, 0xe8, 0xc9, 0xd4, 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xff, + 0xff, 0xc7, 0x07, 0x05, 0x00, 0xeb, 0xea, 0x52, 0xba, 0x75, 0x07, 0x8e, + 0xda, 0x03, 0x06, 0x20, 0x08, 0x0e, 0xe8, 0x8d, 0xff, 0x5a, 0xcb, 0x56, + 0x89, 0xc6, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x11, 0xf6, 0xc7, + 0xff, 0x74, 0x10, 0x8e, 0xda, 0x88, 0x3c, 0xb8, 0x02, 0x00, 0x88, 0x5c, + 0x01, 0x5e, 0xcb, 0x31, 0xc0, 0x5e, 0xcb, 0x8e, 0xda, 0xb8, 0x01, 0x00, + 0x88, 0x1c, 0x5e, 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x26, + 0x53, 0x51, 0x89, 0xd1, 0x8e, 0x46, 0xd6, 0xc6, 0x46, 0xda, 0x00, 0x8d, + 0x76, 0xdb, 0x89, 0xdf, 0x8c, 0x56, 0xfe, 0x8d, 0x5e, 0xfc, 0x89, 0x4e, + 0xfc, 0x33, 0xd2, 0x36, 0xf7, 0x37, 0x36, 0x89, 0x07, 0xb8, 0x75, 0x07, + 0x89, 0xd3, 0x8e, 0xd8, 0x8a, 0x87, 0x1a, 0x06, 0x8e, 0x5e, 0xfe, 0x88, + 0x04, 0x8b, 0x46, 0xfc, 0x46, 0x85, 0xc0, 0x75, 0xda, 0x8e, 0x5e, 0xfe, + 0x83, 0xc6, 0xff, 0x8a, 0x04, 0x26, 0x88, 0x05, 0x47, 0x84, 0xc0, 0x75, + 0xf3, 0x8b, 0x46, 0xd8, 0x8b, 0x56, 0xd6, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0xcb, 0x56, 0x57, 0x89, 0xde, 0x89, 0xcf, 0x83, 0xfa, 0x0a, 0x75, 0x04, + 0x85, 0xc0, 0x7c, 0x0b, 0x0e, 0xe8, 0x90, 0xff, 0x89, 0xf0, 0x89, 0xfa, + 0x5f, 0x5e, 0xcb, 0x8e, 0xd9, 0xf7, 0xd8, 0x43, 0xc6, 0x04, 0x2d, 0xeb, + 0xeb, 0x53, 0x52, 0xbb, 0x01, 0x00, 0xb8, 0x98, 0x04, 0xba, 0x75, 0x07, + 0xe9, 0x16, 0xe1, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x4c, 0x52, + 0x8b, 0x76, 0x0a, 0xc6, 0x46, 0xb4, 0x00, 0x8d, 0x7e, 0xb5, 0x8c, 0x56, + 0xfe, 0x89, 0x76, 0xfa, 0x8b, 0x76, 0x0c, 0x89, 0x7e, 0xf8, 0x89, 0x76, + 0xfc, 0x8b, 0x76, 0x0e, 0x8b, 0x56, 0xb2, 0x89, 0x76, 0xf6, 0x8d, 0x76, + 0xf6, 0x8b, 0xfa, 0x85, 0xc0, 0x74, 0x2d, 0x8b, 0xd0, 0x8b, 0xc3, 0x33, + 0xdb, 0x36, 0x3b, 0x14, 0x72, 0x0a, 0x8b, 0xd8, 0x8b, 0xc2, 0x33, 0xd2, + 0x36, 0xf7, 0x34, 0x93, 0x36, 0xf7, 0x34, 0x91, 0x36, 0xf7, 0x34, 0x97, + 0x36, 0xf7, 0x34, 0x36, 0x89, 0x14, 0x8b, 0xd0, 0x8b, 0xc3, 0x8b, 0xd9, + 0x8b, 0xcf, 0xeb, 0x2e, 0x85, 0xdb, 0x74, 0x15, 0x8b, 0xd3, 0x8b, 0xc1, + 0x33, 0xdb, 0x33, 0xc9, 0x36, 0x3b, 0x14, 0x72, 0xdb, 0x8b, 0xc8, 0x8b, + 0xc2, 0x33, 0xd2, 0xeb, 0xcf, 0x8b, 0xd1, 0x8b, 0xc7, 0x33, 0xc9, 0x33, + 0xff, 0x36, 0x3b, 0x14, 0x72, 0xca, 0x8b, 0xf8, 0x8b, 0xc2, 0x33, 0xd2, + 0xeb, 0xbe, 0xbf, 0x75, 0x07, 0x89, 0xd6, 0x8e, 0xdf, 0x8b, 0x7e, 0xf6, + 0x89, 0x56, 0xb2, 0x8a, 0x95, 0x1a, 0x06, 0x8e, 0x5e, 0xfe, 0x8b, 0x7e, + 0xf8, 0xff, 0x46, 0xf8, 0x88, 0x15, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x70, + 0xff, 0x85, 0xdb, 0x75, 0xf9, 0x85, 0xc9, 0x75, 0xf5, 0x85, 0xf6, 0x75, + 0xf1, 0x83, 0x46, 0xf8, 0xff, 0x8e, 0x5e, 0xfe, 0x8b, 0x5e, 0xf8, 0x8a, + 0x07, 0xc5, 0x5e, 0xfa, 0xff, 0x46, 0xfa, 0x88, 0x07, 0x84, 0xc0, 0x75, + 0xe8, 0x8b, 0x46, 0x0a, 0x8b, 0x56, 0x0c, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0xca, 0x06, 0x00, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x8b, + 0x76, 0x0a, 0x8b, 0x7e, 0x0c, 0x89, 0x76, 0xfc, 0x89, 0x7e, 0xfe, 0x83, + 0x7e, 0x0e, 0x0a, 0x75, 0x0c, 0x85, 0xc0, 0x7c, 0x1c, 0x75, 0x06, 0x85, + 0xdb, 0x75, 0x02, 0x85, 0xc9, 0xff, 0x76, 0x0e, 0xff, 0x76, 0xfe, 0xff, + 0x76, 0xfc, 0x0e, 0xe8, 0xe9, 0xfe, 0x8b, 0x56, 0x0c, 0x89, 0xf0, 0xeb, + 0xbe, 0x8e, 0xdf, 0x31, 0xff, 0x29, 0xd7, 0x89, 0xfa, 0xbf, 0x00, 0x00, + 0x19, 0xcf, 0x89, 0xf9, 0xbf, 0x00, 0x00, 0x19, 0xdf, 0x89, 0xfb, 0xbf, + 0x00, 0x00, 0x19, 0xc7, 0x89, 0xf8, 0x8d, 0x7c, 0x01, 0xc6, 0x04, 0x2d, + 0x89, 0x7e, 0xfc, 0xeb, 0xc4, 0x53, 0x51, 0x89, 0xc1, 0x89, 0xc3, 0x8e, + 0xda, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x0f, 0x2c, 0x61, 0x3c, 0x19, 0x76, + 0x03, 0x43, 0xeb, 0xf1, 0x04, 0x41, 0x88, 0x07, 0xeb, 0xf7, 0x89, 0xc8, + 0x59, 0x5b, 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x26, 0x53, + 0x51, 0xc6, 0x46, 0xda, 0x00, 0x8d, 0x76, 0xdb, 0x89, 0xdf, 0x8c, 0xd3, + 0x89, 0x4e, 0xfe, 0x8e, 0xc3, 0x8b, 0x5e, 0x0a, 0x89, 0x5e, 0xfc, 0x8d, + 0x5e, 0xfc, 0x33, 0xc9, 0x36, 0x3b, 0x17, 0x72, 0x07, 0x92, 0x87, 0xd1, + 0x36, 0xf7, 0x37, 0x91, 0x36, 0xf7, 0x37, 0x36, 0x89, 0x17, 0x8b, 0xd1, + 0xbb, 0x75, 0x07, 0x8e, 0xdb, 0x8b, 0x5e, 0xfc, 0x8a, 0x9f, 0x1a, 0x06, + 0x26, 0x88, 0x1c, 0x46, 0x85, 0xd2, 0x75, 0xcd, 0x85, 0xc0, 0x75, 0xc9, + 0x8e, 0x5e, 0xfe, 0x83, 0xc6, 0xff, 0x26, 0x8a, 0x04, 0x88, 0x05, 0x47, + 0x84, 0xc0, 0x75, 0xf3, 0x8b, 0x46, 0xd8, 0x8b, 0x56, 0xd6, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0xca, 0x02, 0x00, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, + 0xde, 0x89, 0xcf, 0x83, 0x7e, 0x0a, 0x0a, 0x75, 0x04, 0x85, 0xd2, 0x7c, + 0x0d, 0xff, 0x76, 0x0a, 0x0e, 0xe8, 0x77, 0xff, 0x89, 0xf0, 0x89, 0xfa, + 0xeb, 0xda, 0x8e, 0xd9, 0xf7, 0xda, 0xc6, 0x04, 0x2d, 0xf7, 0xd8, 0x83, + 0xda, 0x00, 0x43, 0xeb, 0xe4, 0x53, 0x89, 0xc3, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0x8a, 0x9f, 0xd7, 0x0d, 0x80, 0xe3, 0x01, 0x30, 0xff, 0x89, 0xd8, + 0x5b, 0xcb, 0x31, 0xc0, 0x0e, 0xe8, 0x4b, 0x03, 0x90, 0xc3, 0x73, 0x07, + 0x50, 0xe8, 0x07, 0xf4, 0x58, 0xeb, 0x02, 0x2b, 0xc0, 0xc3, 0x73, 0x05, + 0xe8, 0xfc, 0xf3, 0xeb, 0x02, 0x2b, 0xc0, 0xc3, 0x51, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc6, 0x89, 0xd7, 0x89, 0xd9, 0x85, + 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x5c, 0x85, 0xdb, 0x74, 0x61, 0x0e, + 0x3e, 0xe8, 0x33, 0x05, 0x89, 0x46, 0xfa, 0x81, 0xff, 0x75, 0x07, 0x75, + 0x5e, 0x89, 0x76, 0xfc, 0x89, 0xda, 0x89, 0xf0, 0x89, 0x7e, 0xfe, 0x0e, + 0x3e, 0xe8, 0x2c, 0x05, 0x85, 0xc0, 0x75, 0x5a, 0x89, 0xc8, 0x0e, 0xe8, + 0xe7, 0xbb, 0x90, 0x89, 0x46, 0xfc, 0x89, 0x56, 0xfe, 0x85, 0xd2, 0x75, + 0x04, 0x85, 0xc0, 0x74, 0x53, 0xff, 0x76, 0xfa, 0x89, 0xf3, 0x89, 0xf9, + 0x0e, 0xe8, 0x58, 0x05, 0x90, 0x89, 0xf0, 0x89, 0xfa, 0x0e, 0x3e, 0xe8, + 0xd4, 0xbc, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0x59, 0xcb, 0x89, 0xd8, 0x0e, 0x3e, 0xe8, 0xaf, 0xbb, 0xeb, 0xf0, + 0x0e, 0xe8, 0xba, 0xbc, 0x90, 0x31, 0xc0, 0x31, 0xd2, 0xeb, 0xe5, 0x89, + 0xf0, 0x89, 0xfa, 0x0e, 0x3e, 0xe8, 0x49, 0x05, 0x89, 0x46, 0xfc, 0x89, + 0x56, 0xfe, 0x83, 0x7e, 0xfe, 0x00, 0x75, 0xca, 0x83, 0x7e, 0xfc, 0x00, + 0x74, 0x9a, 0xeb, 0xc2, 0x81, 0xff, 0x75, 0x07, 0x75, 0x0c, 0x8b, 0x56, + 0xfa, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, 0xb0, 0x04, 0xeb, 0xb0, 0x8b, 0x5e, + 0xfa, 0x89, 0xf0, 0x89, 0xfa, 0x0e, 0x3e, 0xe8, 0x17, 0x05, 0xeb, 0xa2, + 0x53, 0x52, 0x3d, 0x05, 0x00, 0x7d, 0x15, 0xbb, 0x75, 0x07, 0x89, 0xc2, + 0x8e, 0xdb, 0xd1, 0xe2, 0xc5, 0x1e, 0x7a, 0x08, 0x01, 0xd3, 0xf6, 0x47, + 0x01, 0x40, 0x74, 0x03, 0x5a, 0x5b, 0xc3, 0x80, 0x4f, 0x01, 0x40, 0x0e, + 0x3e, 0xe8, 0xe5, 0xf2, 0x85, 0xc0, 0x74, 0xf0, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0xc5, 0x1e, 0x7a, 0x08, 0x01, 0xd3, 0x80, 0x4f, 0x01, 0x20, 0x5a, + 0x5b, 0xc3, 0x52, 0x89, 0xc2, 0xe8, 0xbc, 0xff, 0x89, 0xd0, 0xe8, 0x7c, + 0xf2, 0x5a, 0xcb, 0x53, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0xe8, 0xd1, + 0xfe, 0x5b, 0xcb, 0x53, 0x89, 0xc3, 0xb4, 0x68, 0xf8, 0xcd, 0x21, 0xe8, + 0xc4, 0xfe, 0x5b, 0xcb, 0x53, 0x89, 0xc2, 0x0e, 0x3e, 0xe8, 0xfa, 0xcb, + 0xbb, 0x75, 0x07, 0x85, 0xc0, 0x74, 0x04, 0x89, 0xda, 0x5b, 0xc3, 0x89, + 0xd0, 0x0e, 0x3e, 0xe8, 0xe7, 0xba, 0x89, 0xd3, 0xeb, 0xf1, 0x53, 0x51, + 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xa1, 0xc8, 0x0d, 0x8b, 0x16, 0xc6, 0x0d, 0x85, 0xc0, 0x75, + 0x45, 0x85, 0xd2, 0x75, 0x41, 0xbb, 0x2c, 0x00, 0xc7, 0x46, 0xf6, 0x00, + 0x00, 0x8e, 0x1e, 0x22, 0x08, 0x31, 0xc9, 0x8e, 0x1f, 0x30, 0xc0, 0x8c, + 0x5e, 0xf8, 0x31, 0xdb, 0x3a, 0x07, 0x74, 0x09, 0x43, 0x3a, 0x07, 0x75, + 0xfb, 0x41, 0x43, 0xeb, 0xf3, 0x89, 0xd8, 0x2b, 0x46, 0xf6, 0x75, 0x03, + 0xb8, 0x01, 0x00, 0xe8, 0x92, 0xff, 0x89, 0x56, 0xfa, 0x89, 0xc3, 0x89, + 0x56, 0xfe, 0x85, 0xd2, 0x75, 0x0d, 0x85, 0xc0, 0x75, 0x09, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x89, 0xc8, 0xd1, 0xe0, 0xd1, + 0xe0, 0x01, 0xc8, 0x05, 0x04, 0x00, 0xe8, 0x6b, 0xff, 0x89, 0xc7, 0x89, + 0x56, 0xfc, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x70, 0xbe, 0x75, + 0x07, 0x8e, 0xde, 0x8b, 0x76, 0xf6, 0xa3, 0xc6, 0x0d, 0xb8, 0x75, 0x07, + 0x89, 0x16, 0xc8, 0x0d, 0x8e, 0xc0, 0x89, 0xd8, 0x8e, 0x5e, 0xf8, 0x26, + 0xa3, 0xd8, 0x0e, 0x8b, 0x46, 0xfa, 0x8b, 0x56, 0xfe, 0x26, 0xa3, 0xda, + 0x0e, 0x8d, 0x45, 0x04, 0x80, 0x3c, 0x00, 0x74, 0x1c, 0x8e, 0x46, 0xfc, + 0x26, 0x89, 0x1d, 0x26, 0x89, 0x55, 0x02, 0x8e, 0x46, 0xfe, 0x89, 0xc7, + 0x8a, 0x04, 0x46, 0x26, 0x88, 0x07, 0x43, 0x84, 0xc0, 0x75, 0xf5, 0xeb, + 0xdc, 0x8e, 0x5e, 0xfc, 0xba, 0x75, 0x07, 0xc7, 0x05, 0x00, 0x00, 0x31, + 0xdb, 0xc7, 0x45, 0x02, 0x00, 0x00, 0x8e, 0xda, 0x8b, 0x56, 0xfc, 0xa3, + 0xc2, 0x0d, 0x89, 0x16, 0xc4, 0x0d, 0x0e, 0xe8, 0x1f, 0xf4, 0x90, 0xe9, + 0x6c, 0xff, 0x8b, 0x56, 0xfa, 0x89, 0xd8, 0x0e, 0x3e, 0xe8, 0xf6, 0xba, + 0xe9, 0x5f, 0xff, 0x52, 0x0e, 0xe8, 0xc2, 0x03, 0x90, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xa1, 0xc8, 0x0d, 0x8b, 0x16, 0xc6, 0x0d, 0x85, 0xc0, 0x75, + 0x40, 0x85, 0xd2, 0x75, 0x3c, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x16, + 0xcc, 0x0d, 0xa1, 0xca, 0x0d, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, + 0x12, 0x0e, 0x3e, 0xe8, 0xc0, 0xba, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x31, + 0xc0, 0xa3, 0xca, 0x0d, 0xa3, 0xcc, 0x0d, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0x8b, 0x16, 0xda, 0x0e, 0xa1, 0xd8, 0x0e, 0x85, 0xd2, 0x75, 0x20, 0x85, + 0xc0, 0x75, 0x1c, 0x5a, 0xc3, 0x89, 0xd0, 0x8b, 0x16, 0xc8, 0x0d, 0x0e, + 0x3e, 0xe8, 0x92, 0xba, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x31, 0xc0, 0xa3, + 0xc6, 0x0d, 0xa3, 0xc8, 0x0d, 0xeb, 0xaa, 0x0e, 0x3e, 0xe8, 0x7e, 0xba, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x31, 0xc0, 0xa3, 0xd8, 0x0e, 0xa3, 0xda, + 0x0e, 0x5a, 0xc3, 0x53, 0x51, 0x52, 0xb8, 0x75, 0x07, 0xb9, 0x01, 0x01, + 0x31, 0xdb, 0x8e, 0xd8, 0x31, 0xc0, 0x8c, 0xda, 0xa3, 0xa2, 0x08, 0xa3, + 0xa0, 0x08, 0xb8, 0xd6, 0x0d, 0x0e, 0x3e, 0xe8, 0x6b, 0xf3, 0x5a, 0x59, + 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd7, 0x8e, 0xda, + 0x83, 0x3c, 0x00, 0x74, 0x31, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xc7, 0x06, + 0xa2, 0x08, 0x01, 0x00, 0x8e, 0xdf, 0x8b, 0x04, 0x85, 0xc0, 0x74, 0x1e, + 0x88, 0xe2, 0xbb, 0x01, 0x00, 0x30, 0xf6, 0x30, 0xe4, 0x89, 0xd1, 0xba, + 0x75, 0x07, 0x29, 0xc1, 0x05, 0xd6, 0x0d, 0x41, 0x40, 0x46, 0x46, 0x0e, + 0x3e, 0xe8, 0x29, 0xf3, 0xeb, 0xda, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x53, + 0x51, 0x52, 0x89, 0xc2, 0xe8, 0x90, 0xff, 0x83, 0xfa, 0xff, 0x74, 0x4d, + 0x83, 0xfa, 0xfe, 0x74, 0x48, 0x83, 0xfa, 0xfd, 0x74, 0x60, 0x83, 0xfa, + 0xfc, 0x75, 0x35, 0xb9, 0x1f, 0x00, 0xbb, 0x01, 0x00, 0xb8, 0x58, 0x0e, + 0xba, 0x75, 0x07, 0x0e, 0x3e, 0xe8, 0xf5, 0xf2, 0xb9, 0x1d, 0x00, 0xbb, + 0x01, 0x00, 0xb8, 0xb7, 0x0e, 0xba, 0x75, 0x07, 0x0e, 0xe8, 0xe5, 0xf2, + 0x90, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xc7, 0x06, 0xa2, 0x08, 0x01, 0x00, + 0xc7, 0x06, 0xa0, 0x08, 0xa4, 0x03, 0xeb, 0x26, 0x85, 0xd2, 0x74, 0x05, + 0xb8, 0x01, 0x00, 0xeb, 0x1f, 0x0e, 0x3e, 0xe8, 0xc5, 0x03, 0x85, 0xd2, + 0x75, 0x04, 0x85, 0xc0, 0x74, 0x10, 0xe8, 0x51, 0xff, 0xba, 0x75, 0x07, + 0x0e, 0xe8, 0xdc, 0x03, 0x90, 0x8e, 0xda, 0xa3, 0xa0, 0x08, 0x31, 0xc0, + 0x5a, 0x59, 0x5b, 0xcb, 0x3d, 0x81, 0x82, 0x72, 0x08, 0x3d, 0x9a, 0x82, + 0x77, 0x03, 0x2d, 0x21, 0x00, 0xcb, 0x3d, 0x61, 0x00, 0x7c, 0x08, 0x3d, + 0x7a, 0x00, 0x7f, 0x03, 0x2d, 0x20, 0x00, 0xcb, 0x50, 0xb8, 0xb2, 0x00, + 0x0e, 0xe8, 0xc1, 0x03, 0x90, 0x58, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, + 0x81, 0xec, 0x9c, 0x00, 0x50, 0x83, 0xed, 0x78, 0x89, 0xde, 0x89, 0x4e, + 0x76, 0xff, 0xb6, 0x8a, 0x00, 0xff, 0xb6, 0x88, 0x00, 0xff, 0xb6, 0x86, + 0x00, 0xff, 0xb6, 0x84, 0x00, 0x0e, 0x3e, 0xe8, 0x37, 0x04, 0x89, 0xc3, + 0x3d, 0xff, 0xff, 0x74, 0x03, 0xe9, 0x3f, 0x01, 0x0e, 0xe8, 0xaf, 0xcd, + 0x90, 0x89, 0xc7, 0x8e, 0xda, 0x83, 0x3d, 0x01, 0x74, 0x0e, 0x0e, 0xe8, + 0xa1, 0xcd, 0x90, 0x89, 0xc7, 0x8e, 0xda, 0x83, 0x3d, 0x09, 0x75, 0xe1, + 0x8e, 0x5e, 0x76, 0x8a, 0x04, 0x3c, 0x5c, 0x74, 0xd8, 0x84, 0xc0, 0x74, + 0xd4, 0x80, 0x7c, 0x01, 0x3a, 0x74, 0xce, 0xb8, 0xba, 0x04, 0xba, 0x75, + 0x07, 0x0e, 0x3e, 0xe8, 0x88, 0xd9, 0x89, 0xc7, 0x89, 0xd1, 0x85, 0xd2, + 0x75, 0x04, 0x85, 0xc0, 0x74, 0xb7, 0x8b, 0x56, 0x76, 0x89, 0xf0, 0x0e, + 0x3e, 0xe8, 0xe4, 0xc4, 0x40, 0x89, 0x46, 0x70, 0xb8, 0x90, 0x00, 0x2b, + 0x46, 0x70, 0x89, 0x46, 0x6e, 0x8e, 0xd9, 0x80, 0x3d, 0x00, 0x74, 0x99, + 0xbb, 0x3b, 0x00, 0x89, 0xf8, 0x89, 0xca, 0x0e, 0x3e, 0xe8, 0x65, 0x08, + 0x89, 0x46, 0x6c, 0x89, 0x56, 0x74, 0x85, 0xd2, 0x75, 0x17, 0x85, 0xc0, + 0x75, 0x13, 0x89, 0xf8, 0x89, 0xca, 0x89, 0xfb, 0x0e, 0xe8, 0xac, 0xc4, + 0x90, 0x01, 0xc3, 0x89, 0x4e, 0x74, 0x89, 0x5e, 0x6c, 0x8b, 0x5e, 0x6c, + 0x29, 0xfb, 0x89, 0x5e, 0x72, 0x3b, 0x5e, 0x6e, 0x76, 0x20, 0x0e, 0xe8, + 0x11, 0xcd, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x02, 0x00, 0x0e, + 0x3e, 0xe8, 0xd5, 0xef, 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xff, 0xff, 0xc7, + 0x07, 0x0a, 0x00, 0xe9, 0x83, 0x00, 0x8d, 0x46, 0xdc, 0x53, 0x8c, 0xd2, + 0x89, 0xfb, 0x0e, 0xe8, 0x7f, 0xc4, 0x90, 0x8d, 0x7e, 0xdc, 0x16, 0x1f, + 0x03, 0x7e, 0x72, 0x80, 0x7d, 0xff, 0x5c, 0x74, 0x04, 0xc6, 0x05, 0x5c, + 0x47, 0xff, 0x76, 0x70, 0x8b, 0x4e, 0x76, 0x89, 0xf3, 0x89, 0xf8, 0x8c, + 0xda, 0x0e, 0x3e, 0xe8, 0x5b, 0xc4, 0xff, 0xb6, 0x8a, 0x00, 0xff, 0xb6, + 0x88, 0x00, 0x8d, 0x5e, 0xdc, 0xff, 0xb6, 0x86, 0x00, 0x8b, 0x46, 0xda, + 0xff, 0xb6, 0x84, 0x00, 0x8c, 0xd1, 0x0e, 0xe8, 0x23, 0x03, 0x90, 0x89, + 0xc3, 0x3d, 0xff, 0xff, 0x75, 0x2d, 0x0e, 0xe8, 0x9d, 0xcc, 0x90, 0x89, + 0xc7, 0x8e, 0xda, 0x83, 0x3d, 0x01, 0x74, 0x0e, 0x0e, 0xe8, 0x8f, 0xcc, + 0x90, 0x89, 0xc7, 0x8e, 0xda, 0x83, 0x3d, 0x09, 0x75, 0x11, 0x8e, 0x5e, + 0x74, 0x8b, 0x7e, 0x6c, 0x80, 0x3d, 0x3b, 0x75, 0x06, 0x8c, 0xd9, 0x47, + 0xe9, 0x1e, 0xff, 0x89, 0xd8, 0x8d, 0x66, 0x78, 0x5d, 0x5f, 0x5e, 0x5a, + 0xca, 0x08, 0x00, 0x53, 0x89, 0xc3, 0x8e, 0xda, 0x83, 0xeb, 0x02, 0x8b, + 0x07, 0x24, 0xfe, 0x2d, 0x02, 0x00, 0x5b, 0xcb, 0x53, 0x51, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc1, 0x89, 0xd7, 0x31, 0xf6, + 0x8d, 0x56, 0xfe, 0xb8, 0x75, 0x07, 0x16, 0x89, 0xfb, 0x52, 0x89, 0xca, + 0x0e, 0xe8, 0x7b, 0x07, 0x90, 0x85, 0xc0, 0x74, 0x10, 0x3d, 0x01, 0x00, + 0x74, 0x09, 0x3d, 0x02, 0x00, 0x75, 0xe1, 0x85, 0xf6, 0x74, 0x0c, 0x31, + 0xc9, 0x89, 0xc8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xcb, 0x8b, + 0x46, 0xfe, 0x0e, 0xe8, 0xda, 0xdd, 0x90, 0x85, 0xc0, 0x74, 0xe8, 0xbe, + 0x01, 0x00, 0xeb, 0xc0, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xc7, 0x8b, + 0x46, 0x0a, 0x89, 0xde, 0x8e, 0xc2, 0x1e, 0x57, 0x91, 0x8e, 0xd8, 0xd1, + 0xe9, 0xf3, 0xa5, 0x13, 0xc9, 0xf3, 0xa4, 0x5f, 0x1f, 0x89, 0xf8, 0x5d, + 0x5f, 0x5e, 0xca, 0x02, 0x00, 0x51, 0x56, 0x89, 0xc1, 0x89, 0xd6, 0x81, + 0xfa, 0x75, 0x07, 0x75, 0x10, 0x89, 0xda, 0x0e, 0x3e, 0xe8, 0x78, 0xff, + 0x85, 0xc0, 0x75, 0x17, 0x31, 0xd2, 0x5e, 0x59, 0xcb, 0x89, 0xc2, 0x89, + 0xf0, 0x0e, 0x3e, 0xe8, 0x81, 0x08, 0x3d, 0xff, 0xff, 0x75, 0x04, 0x31, + 0xc0, 0xeb, 0xe9, 0x89, 0xc8, 0x89, 0xf2, 0x5e, 0x59, 0xcb, 0x53, 0x51, + 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0x8b, 0x16, 0xc8, 0x0d, 0xa1, + 0xc6, 0x0d, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x4c, 0x31, 0xc9, + 0x31, 0xf6, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0xc6, 0x0d, 0x8b, 0x16, + 0xc8, 0x0d, 0x89, 0xc3, 0x8e, 0xda, 0x01, 0xf3, 0x8b, 0x3f, 0x89, 0x7e, + 0xfc, 0x8b, 0x7f, 0x02, 0x85, 0xff, 0x75, 0x06, 0x83, 0x7e, 0xfc, 0x00, + 0x74, 0x26, 0xb8, 0x75, 0x07, 0x8e, 0xc0, 0x26, 0xc4, 0x3e, 0xc2, 0x0d, + 0x01, 0xcf, 0x26, 0x80, 0x3d, 0x00, 0x75, 0x06, 0x83, 0xc6, 0x04, 0x41, + 0xeb, 0xc4, 0x8b, 0x07, 0x8b, 0x57, 0x02, 0x0e, 0x3e, 0xe8, 0xbe, 0xb6, + 0xeb, 0xee, 0xeb, 0x31, 0x0e, 0xe8, 0xb6, 0xb6, 0x90, 0xb8, 0x04, 0x00, + 0x0e, 0xe8, 0x9d, 0xb5, 0x90, 0x89, 0xc3, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0x89, 0x1e, 0xc6, 0x0d, 0x89, 0x16, 0xc8, 0x0d, 0x85, 0xd2, 0x75, 0x59, + 0x85, 0xdb, 0x75, 0x55, 0x31, 0xc0, 0xc7, 0x46, 0xfe, 0xff, 0xff, 0xa3, + 0xc2, 0x0d, 0xa3, 0xc4, 0x0d, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x16, + 0xcc, 0x0d, 0xa1, 0xca, 0x0d, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, + 0x4e, 0x31, 0xc9, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, 0xca, 0x0d, 0x8b, + 0x16, 0xcc, 0x0d, 0x89, 0xc3, 0x8e, 0xda, 0x01, 0xcb, 0x8b, 0x37, 0x89, + 0x76, 0xfc, 0x8b, 0x77, 0x02, 0x85, 0xf6, 0x75, 0x06, 0x83, 0x7e, 0xfc, + 0x00, 0x74, 0x2a, 0x89, 0xf2, 0x8b, 0x07, 0x0e, 0x3e, 0xe8, 0x46, 0xb6, + 0x83, 0xc1, 0x04, 0xeb, 0xce, 0x8e, 0xda, 0xc7, 0x07, 0x00, 0x00, 0xc7, + 0x47, 0x02, 0x00, 0x00, 0x8e, 0xd8, 0x83, 0xc3, 0x04, 0x89, 0x16, 0xc4, + 0x0d, 0x89, 0x1e, 0xc2, 0x0d, 0xeb, 0x9e, 0xeb, 0x29, 0x0e, 0x3e, 0xe8, + 0x20, 0xb6, 0xb8, 0x04, 0x00, 0x0e, 0x3e, 0xe8, 0x07, 0xb5, 0x89, 0xc3, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x89, 0x1e, 0xca, 0x0d, 0x89, 0x16, 0xcc, + 0x0d, 0x85, 0xd2, 0x75, 0x15, 0x85, 0xdb, 0x75, 0x11, 0xc7, 0x46, 0xfe, + 0xff, 0xff, 0x8b, 0x46, 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, + 0x5b, 0xcb, 0x8e, 0xda, 0xc7, 0x07, 0x00, 0x00, 0xc7, 0x47, 0x02, 0x00, + 0x00, 0xeb, 0xe7, 0x53, 0x51, 0x56, 0x57, 0x55, 0x1e, 0x33, 0xc0, 0x8e, + 0xd8, 0xb4, 0x63, 0xcd, 0x21, 0x8c, 0xdf, 0x72, 0x08, 0x84, 0xc0, 0x75, + 0x04, 0x85, 0xff, 0x75, 0x04, 0x33, 0xff, 0x33, 0xf6, 0x1f, 0x5d, 0x89, + 0xf0, 0x89, 0xfa, 0x5f, 0x5e, 0x59, 0x5b, 0xcb, 0x53, 0x52, 0xb8, 0x01, + 0x66, 0xcd, 0x21, 0x73, 0x02, 0x33, 0xdb, 0x89, 0xd8, 0x5a, 0x5b, 0xcb, + 0x8c, 0x16, 0xa4, 0x08, 0xc3, 0x3b, 0xc4, 0x73, 0x1c, 0x2b, 0xc4, 0xf7, + 0xd8, 0x1e, 0x50, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x58, 0x3b, 0x06, 0x28, + 0x08, 0x77, 0x06, 0x8c, 0xd0, 0x3b, 0x06, 0xa4, 0x08, 0x1f, 0x74, 0x01, + 0xcb, 0x0e, 0x5a, 0xb8, 0xd4, 0x5e, 0xbb, 0x01, 0x00, 0xe9, 0x1d, 0xd7, + 0x53, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x4f, 0x76, 0x65, 0x72, 0x66, 0x6c, + 0x6f, 0x77, 0x21, 0x00, 0x53, 0x51, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x2c, + 0x16, 0x8d, 0x4e, 0xd4, 0x51, 0xbb, 0x07, 0x00, 0x0e, 0xe8, 0xf4, 0x06, + 0x90, 0x85, 0xc0, 0x75, 0x05, 0xb8, 0x01, 0x00, 0xeb, 0x02, 0x31, 0xc0, + 0x89, 0xec, 0x5d, 0x59, 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, + 0x50, 0x89, 0xd6, 0x89, 0xdf, 0x89, 0x4e, 0xfe, 0x31, 0xc0, 0x8b, 0x4e, + 0x0a, 0x50, 0x8c, 0xd2, 0x16, 0x89, 0xf0, 0x53, 0x8b, 0x5e, 0x08, 0x0e, + 0x3e, 0xe8, 0x3e, 0x09, 0xff, 0x76, 0xfe, 0x57, 0x56, 0xb8, 0x75, 0x07, + 0xff, 0x76, 0xfc, 0x8e, 0xd8, 0x0e, 0x3e, 0xe8, 0xbd, 0x09, 0x83, 0xc4, + 0x08, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x04, 0x00, 0x50, 0xb8, 0xbc, + 0x00, 0x0e, 0x3e, 0xe8, 0x57, 0xff, 0x58, 0x52, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x81, 0xec, 0x94, 0x00, 0x50, 0x83, 0xed, 0x78, 0x89, 0xdf, 0x89, + 0x4e, 0x70, 0xc6, 0x46, 0x76, 0x00, 0x3d, 0x02, 0x00, 0x75, 0x3f, 0xe8, + 0x6f, 0x0a, 0x89, 0x46, 0x5e, 0x89, 0x56, 0x60, 0x85, 0xd2, 0x75, 0x04, + 0x85, 0xc0, 0x74, 0x1b, 0xff, 0xb6, 0x8a, 0x00, 0x8b, 0x9e, 0x84, 0x00, + 0x8b, 0x8e, 0x86, 0x00, 0x8b, 0x56, 0x70, 0xff, 0xb6, 0x88, 0x00, 0x89, + 0xf8, 0xff, 0x5e, 0x5e, 0xe9, 0x4c, 0x04, 0x0e, 0x3e, 0xe8, 0x2f, 0xc9, + 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x09, 0x00, 0xe9, + 0x39, 0x04, 0x30, 0xc0, 0x88, 0x46, 0x74, 0x30, 0xe4, 0x50, 0x16, 0x8d, + 0x56, 0x66, 0x52, 0x8d, 0x56, 0x64, 0x16, 0x8b, 0x9e, 0x88, 0x00, 0x52, + 0x8d, 0x56, 0x46, 0x16, 0x8b, 0x8e, 0x8a, 0x00, 0x52, 0x8d, 0x56, 0x42, + 0x16, 0x8b, 0x86, 0x84, 0x00, 0x52, 0x8b, 0x96, 0x86, 0x00, 0x0e, 0xe8, + 0x6d, 0x06, 0x90, 0x89, 0x46, 0x68, 0x3d, 0xff, 0xff, 0x74, 0x57, 0x8b, + 0x56, 0x70, 0x89, 0x46, 0x6e, 0x89, 0xf8, 0x0e, 0x3e, 0xe8, 0x5c, 0xc0, + 0x05, 0x9a, 0x00, 0x8c, 0xd2, 0x89, 0xc3, 0x0e, 0x3e, 0xe8, 0x3e, 0xc4, + 0x89, 0x46, 0x6c, 0x85, 0xd2, 0x75, 0x3a, 0x85, 0xc0, 0x75, 0x36, 0x8d, + 0x57, 0x01, 0x80, 0xe2, 0xfe, 0x0e, 0x3e, 0xe8, 0xa9, 0xcf, 0x39, 0xc2, + 0x73, 0x08, 0x89, 0xd0, 0x2b, 0xe0, 0x89, 0xe0, 0xeb, 0x02, 0x31, 0xc0, + 0x8c, 0xd2, 0x89, 0xc6, 0x85, 0xd2, 0x75, 0x17, 0x85, 0xc0, 0x75, 0x13, + 0x8b, 0x46, 0x42, 0x8b, 0x56, 0x44, 0x0e, 0xe8, 0x14, 0xb4, 0x90, 0xb8, + 0xff, 0xff, 0xe9, 0xa6, 0x03, 0x89, 0xc6, 0x8d, 0x56, 0x5a, 0x16, 0x81, + 0xeb, 0x93, 0x00, 0x52, 0x8d, 0x56, 0x56, 0x16, 0x8c, 0xd1, 0x52, 0x8d, + 0x56, 0x52, 0x16, 0x89, 0xf8, 0x52, 0x8d, 0x56, 0x4e, 0x16, 0x01, 0xf3, + 0x52, 0x8b, 0x56, 0x70, 0x0e, 0xe8, 0x00, 0x0a, 0x90, 0x8d, 0x46, 0xe4, + 0xbb, 0x75, 0x07, 0x8c, 0xd2, 0x8e, 0xdb, 0xff, 0x1e, 0xe2, 0x08, 0x8e, + 0xdb, 0x80, 0x3e, 0x26, 0x08, 0x01, 0x75, 0x39, 0x8d, 0x5e, 0x62, 0x8b, + 0x46, 0x6e, 0x8c, 0xd1, 0x0e, 0xe8, 0x8e, 0x0b, 0x90, 0x85, 0xc0, 0x74, + 0x0a, 0x8b, 0x46, 0x6c, 0x0e, 0xe8, 0xf5, 0xc4, 0x90, 0xeb, 0x95, 0x8b, + 0x46, 0x62, 0xb1, 0x04, 0x8b, 0x5e, 0x46, 0x89, 0x46, 0x64, 0x8b, 0x46, + 0x6e, 0x8b, 0x56, 0x62, 0xd3, 0xe0, 0x8b, 0x4e, 0x48, 0x50, 0x31, 0xc0, + 0x0e, 0xe8, 0x10, 0xfc, 0x90, 0x8b, 0x46, 0x66, 0x0e, 0xe8, 0x7e, 0xc3, + 0x90, 0x8c, 0xd2, 0x89, 0x46, 0x6a, 0x85, 0xd2, 0x75, 0x50, 0x85, 0xc0, + 0x75, 0x4c, 0x8b, 0x46, 0x66, 0x40, 0x24, 0xfe, 0x89, 0xc2, 0x0e, 0xe8, + 0xe5, 0xce, 0x90, 0x39, 0xc2, 0x73, 0x0c, 0x8b, 0x46, 0x66, 0x40, 0x24, + 0xfe, 0x2b, 0xe0, 0x89, 0xe0, 0xeb, 0x02, 0x31, 0xc0, 0x8c, 0xd2, 0x89, + 0xc7, 0x85, 0xd2, 0x75, 0x27, 0x85, 0xc0, 0x75, 0x23, 0x0e, 0x3e, 0xe8, + 0xd1, 0xc7, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x02, 0x00, 0x0e, 0xe8, + 0x97, 0xea, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x46, 0x68, 0xff, 0xff, + 0xc7, 0x07, 0x0a, 0x00, 0xeb, 0x02, 0x89, 0xc7, 0x8c, 0xd0, 0x85, 0xc0, + 0x75, 0x07, 0x85, 0xff, 0x75, 0x03, 0xe9, 0x7e, 0x02, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0x80, 0x3e, 0x24, 0x08, 0x03, 0x72, 0x18, 0xc5, 0x5e, 0x4e, + 0x80, 0x3f, 0x00, 0x75, 0x10, 0xc5, 0x5e, 0x52, 0x80, 0x3f, 0x00, 0x75, + 0x08, 0xc7, 0x46, 0x52, 0xc0, 0x04, 0x89, 0x46, 0x54, 0xff, 0x76, 0x5c, + 0xff, 0x76, 0x5a, 0xff, 0x76, 0x58, 0x8b, 0x5e, 0x4e, 0xff, 0x76, 0x56, + 0x8b, 0x4e, 0x50, 0xff, 0x76, 0x54, 0x8c, 0xd2, 0xff, 0x76, 0x52, 0x89, + 0xf0, 0x0e, 0x3e, 0xe8, 0x09, 0x0b, 0x0e, 0xe8, 0x5d, 0xc7, 0x90, 0x89, + 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x01, 0x00, 0xc5, 0x5e, 0x5a, 0x80, 0x3f, + 0x00, 0x74, 0x72, 0xbb, 0xc3, 0x04, 0xb9, 0x75, 0x07, 0x8b, 0x46, 0x5a, + 0x8c, 0xda, 0x0e, 0xe8, 0xe3, 0x0c, 0x90, 0x85, 0xc0, 0x75, 0x60, 0x8c, + 0xd2, 0x89, 0xf0, 0xc7, 0x46, 0x68, 0xff, 0xff, 0xe8, 0x41, 0xfd, 0x85, + 0xc0, 0x74, 0x75, 0x8b, 0x46, 0x42, 0x8b, 0x56, 0x44, 0x0e, 0x3e, 0xe8, + 0x9c, 0xb2, 0x31, 0xc0, 0x89, 0x46, 0x42, 0x89, 0x46, 0x44, 0xb8, 0x01, + 0x00, 0x8b, 0x9e, 0x84, 0x00, 0x50, 0x8b, 0x8e, 0x86, 0x00, 0x16, 0x8c, + 0xd2, 0x57, 0x89, 0xf0, 0x0e, 0xe8, 0x9a, 0x06, 0x90, 0x31, 0xc0, 0x50, + 0x50, 0x16, 0x8a, 0x5e, 0x74, 0x57, 0x8c, 0xd2, 0x16, 0x30, 0xff, 0x56, + 0x8d, 0x46, 0x4a, 0x0e, 0x3e, 0xe8, 0xc5, 0xd3, 0x52, 0x50, 0x80, 0x7e, + 0x74, 0x00, 0x74, 0x09, 0xba, 0xc8, 0x04, 0xeb, 0x07, 0xeb, 0x4d, 0xeb, + 0x26, 0xba, 0xcc, 0x04, 0xb8, 0x75, 0x07, 0x50, 0xb8, 0xd4, 0x04, 0x52, + 0xba, 0x75, 0x07, 0x0e, 0x3e, 0xe8, 0xd2, 0xd2, 0x52, 0x50, 0xff, 0x76, + 0xe2, 0x0e, 0x3e, 0xe8, 0x9a, 0x0c, 0x83, 0xc4, 0x1a, 0xe9, 0x88, 0x01, + 0xe9, 0x88, 0x01, 0x0e, 0x3e, 0xe8, 0xab, 0xc6, 0xff, 0xb6, 0x86, 0x00, + 0x89, 0xc3, 0x8e, 0xda, 0xff, 0xb6, 0x84, 0x00, 0x8b, 0x46, 0xe2, 0xc7, + 0x07, 0x00, 0x00, 0x89, 0xf2, 0x8b, 0x4e, 0x64, 0x89, 0xfb, 0xe8, 0xc9, + 0xfc, 0xe9, 0x60, 0x01, 0x8c, 0xd2, 0x89, 0xf0, 0x0e, 0xe8, 0x04, 0xbe, + 0x90, 0x89, 0xf2, 0x01, 0xc2, 0x89, 0x56, 0x72, 0x80, 0x7e, 0x76, 0x00, + 0x74, 0x0f, 0x0e, 0xe8, 0x71, 0xc6, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xc7, + 0x07, 0x01, 0x00, 0xeb, 0x35, 0xbb, 0xdc, 0x04, 0xb9, 0x75, 0x07, 0x8b, + 0x46, 0x72, 0x8c, 0xd2, 0x0e, 0xe8, 0x5b, 0xcd, 0x36, 0x0e, 0x3e, 0xe8, + 0x51, 0xc6, 0xff, 0xb6, 0x86, 0x00, 0x89, 0xc3, 0x8e, 0xda, 0xff, 0xb6, + 0x84, 0x00, 0x8b, 0x46, 0xe2, 0xc7, 0x07, 0x00, 0x00, 0x89, 0xf2, 0x8b, + 0x4e, 0x64, 0x89, 0xfb, 0xe8, 0x6f, 0xfc, 0x89, 0x46, 0x68, 0x0e, 0xe8, + 0x2d, 0xc6, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0x83, 0x3f, 0x01, 0x74, 0x11, + 0x0e, 0xe8, 0x1f, 0xc6, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0x83, 0x3f, 0x09, + 0x74, 0x03, 0xe9, 0xea, 0x00, 0x0e, 0x3e, 0xe8, 0x0d, 0xc6, 0xb9, 0x75, + 0x07, 0x89, 0xc3, 0x8e, 0xda, 0x8b, 0x46, 0x72, 0x8c, 0xd2, 0xc7, 0x07, + 0x00, 0x00, 0xbb, 0xe1, 0x04, 0x0e, 0x3e, 0xe8, 0xf9, 0xcc, 0xff, 0xb6, + 0x86, 0x00, 0x8b, 0x4e, 0x64, 0x8b, 0x46, 0xe2, 0x89, 0xfb, 0xff, 0xb6, + 0x84, 0x00, 0x89, 0xf2, 0xe8, 0x1b, 0xfc, 0x89, 0x46, 0x68, 0x0e, 0xe8, + 0xd9, 0xc5, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0x83, 0x3f, 0x01, 0x74, 0x0e, + 0x0e, 0xe8, 0xcb, 0xc5, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0x83, 0x3f, 0x09, + 0x75, 0xac, 0x0e, 0xe8, 0xbd, 0xc5, 0x90, 0xb9, 0x75, 0x07, 0x89, 0xc3, + 0x8e, 0xda, 0x8b, 0x46, 0x72, 0x8c, 0xd2, 0xc7, 0x07, 0x00, 0x00, 0xbb, + 0xc3, 0x04, 0x0e, 0xe8, 0xa9, 0xcc, 0x90, 0x8c, 0xd2, 0x89, 0xf0, 0xe8, + 0xb2, 0xfb, 0x85, 0xc0, 0x74, 0x71, 0x8b, 0x46, 0x42, 0x8b, 0x56, 0x44, + 0x0e, 0xe8, 0x0e, 0xb1, 0x90, 0x31, 0xc0, 0x89, 0x46, 0x42, 0x89, 0x46, + 0x44, 0xb8, 0x01, 0x00, 0x8b, 0x9e, 0x84, 0x00, 0x50, 0x8b, 0x8e, 0x86, + 0x00, 0x16, 0x8c, 0xd2, 0x57, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, 0x0a, 0x05, + 0x31, 0xc0, 0x50, 0x50, 0x16, 0x8a, 0x5e, 0x74, 0x57, 0x8c, 0xd2, 0x16, + 0x30, 0xff, 0x56, 0x8d, 0x46, 0x4a, 0x0e, 0xe8, 0x37, 0xd2, 0x90, 0x52, + 0x50, 0x80, 0x7e, 0x74, 0x00, 0x74, 0x05, 0xba, 0xc8, 0x04, 0xeb, 0x03, + 0xba, 0xcc, 0x04, 0xb8, 0x75, 0x07, 0x50, 0xb8, 0xd4, 0x04, 0x52, 0xba, + 0x75, 0x07, 0x0e, 0xe8, 0x48, 0xd1, 0x90, 0x52, 0x50, 0xff, 0x76, 0xe2, + 0x0e, 0xe8, 0x10, 0x0b, 0x90, 0x83, 0xc4, 0x1a, 0x89, 0x46, 0x68, 0x8b, + 0x46, 0x6a, 0x0e, 0xe8, 0xdf, 0xc1, 0x90, 0x8b, 0x46, 0x6c, 0x0e, 0xe8, + 0xd7, 0xc1, 0x90, 0x8b, 0x46, 0x42, 0x8b, 0x56, 0x44, 0x0e, 0x3e, 0xe8, + 0x8c, 0xb0, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x80, 0x3e, 0x26, 0x08, 0x01, + 0x75, 0x08, 0x8b, 0x46, 0x64, 0x0e, 0x3e, 0xe8, 0x64, 0x08, 0x8d, 0x46, + 0xe4, 0xbb, 0x75, 0x07, 0x8c, 0xd2, 0x8e, 0xdb, 0xff, 0x1e, 0xe6, 0x08, + 0x8b, 0x46, 0x68, 0x8d, 0x66, 0x78, 0x5d, 0x5f, 0x5e, 0x5a, 0xca, 0x08, + 0x00, 0x56, 0x89, 0xc6, 0x8e, 0xda, 0x89, 0xda, 0x8a, 0x04, 0x30, 0xe4, + 0x39, 0xd0, 0x74, 0x0d, 0x89, 0xf3, 0x8a, 0x07, 0x46, 0x84, 0xc0, 0x75, + 0xef, 0x31, 0xd2, 0x5e, 0xcb, 0x89, 0xf0, 0x8c, 0xda, 0x5e, 0xcb, 0x51, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x8e, 0x46, 0x0e, 0x89, + 0xd6, 0x8d, 0x57, 0x03, 0x80, 0xe2, 0xfe, 0x39, 0xda, 0x73, 0x61, 0xba, + 0xff, 0xff, 0x83, 0xee, 0x02, 0x8e, 0xd8, 0x8b, 0x1c, 0x80, 0xe3, 0xfe, + 0x39, 0xda, 0x76, 0x60, 0x89, 0xf7, 0x29, 0xda, 0x01, 0xdf, 0x8b, 0x5e, + 0x0c, 0x89, 0x7e, 0xfe, 0x26, 0x89, 0x17, 0x8b, 0x5e, 0xfe, 0x8e, 0xd8, + 0x83, 0x3f, 0xff, 0x74, 0x41, 0xf6, 0x07, 0x01, 0x75, 0x45, 0x8b, 0x7e, + 0xfe, 0x8b, 0x0d, 0x8b, 0x7d, 0x04, 0x89, 0x7e, 0xfc, 0x8b, 0x7e, 0xfe, + 0x8b, 0x7d, 0x02, 0x31, 0xdb, 0x89, 0x7e, 0xfa, 0x3d, 0x75, 0x07, 0x75, + 0x35, 0x8b, 0x1e, 0x10, 0x08, 0x8e, 0xd8, 0x83, 0x7f, 0x04, 0x00, 0x74, + 0x29, 0x39, 0xf3, 0x76, 0x1d, 0x8e, 0xd8, 0x8b, 0x5f, 0x04, 0xeb, 0xed, + 0x83, 0xfa, 0x06, 0x73, 0x9d, 0xba, 0x06, 0x00, 0xeb, 0x98, 0xb8, 0x02, + 0x00, 0xe9, 0x95, 0x00, 0xe9, 0xa0, 0x00, 0xe9, 0x98, 0x00, 0x8b, 0x17, + 0x01, 0xda, 0x39, 0xd6, 0x73, 0xdb, 0x8e, 0xd8, 0x8b, 0x57, 0x06, 0x3b, + 0x56, 0xfe, 0x75, 0x08, 0x89, 0xd7, 0x8b, 0x55, 0x02, 0x89, 0x57, 0x06, + 0x8b, 0x7e, 0x0c, 0x26, 0x3b, 0x0d, 0x73, 0x29, 0x8b, 0x7e, 0xfa, 0x8e, + 0xd8, 0x8b, 0x56, 0xfc, 0x89, 0x55, 0x04, 0x89, 0xd7, 0x8b, 0x56, 0xfa, + 0x89, 0x55, 0x02, 0x01, 0x0c, 0xff, 0x4f, 0x0e, 0x8b, 0x5e, 0x0c, 0x26, + 0x3b, 0x0f, 0x73, 0x4b, 0x01, 0x4e, 0xfe, 0x26, 0x29, 0x0f, 0xe9, 0x5e, + 0xff, 0x89, 0xca, 0x26, 0x2b, 0x15, 0x89, 0x56, 0xf8, 0x83, 0xfa, 0x06, + 0x72, 0xca, 0x89, 0xfb, 0x26, 0x8b, 0x17, 0x01, 0x56, 0xfe, 0x8e, 0xd8, + 0x8b, 0x56, 0xf8, 0x8b, 0x5e, 0xfe, 0x8b, 0x7e, 0xfa, 0x89, 0x17, 0x89, + 0x7f, 0x02, 0x8b, 0x7e, 0xfc, 0x89, 0x7f, 0x04, 0x8b, 0x5e, 0xfa, 0x8b, + 0x7e, 0xfe, 0x89, 0x7f, 0x04, 0x8b, 0x5e, 0xfc, 0x89, 0x7f, 0x02, 0x8b, + 0x5e, 0x0c, 0x26, 0x8b, 0x07, 0x01, 0x04, 0x31, 0xc0, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0x59, 0xca, 0x04, 0x00, 0xb8, 0x01, 0x00, 0xeb, 0xf2, 0x89, + 0xd9, 0x29, 0xd1, 0x83, 0xf9, 0x06, 0x72, 0xe7, 0x89, 0xd7, 0x83, 0xcf, + 0x01, 0x89, 0x3c, 0x89, 0xf7, 0x80, 0xc9, 0x01, 0x01, 0xd7, 0x31, 0xdb, + 0x89, 0x7e, 0xf6, 0x89, 0x0d, 0x3d, 0x75, 0x07, 0x75, 0x1f, 0x8b, 0x1e, + 0x10, 0x08, 0x8e, 0xd8, 0x83, 0x7f, 0x04, 0x00, 0x74, 0x13, 0x39, 0xf3, + 0x76, 0x07, 0x8e, 0xd8, 0x8b, 0x5f, 0x04, 0xeb, 0xed, 0x8b, 0x17, 0x01, + 0xda, 0x39, 0xd6, 0x73, 0xf1, 0x8b, 0x56, 0xf6, 0x8e, 0xd8, 0x83, 0xc2, + 0x02, 0xff, 0x47, 0x0c, 0x0e, 0xe8, 0x4b, 0x09, 0x90, 0xeb, 0x9c, 0x51, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc1, 0x89, 0xd6, + 0x89, 0xdf, 0x80, 0x66, 0xfe, 0xfe, 0x8d, 0x56, 0xfc, 0x16, 0x89, 0xfb, + 0x89, 0xc8, 0x52, 0x89, 0xf2, 0x0e, 0x3e, 0xe8, 0x5d, 0xfe, 0x85, 0xc0, + 0x74, 0x1a, 0x3d, 0x01, 0x00, 0x74, 0x0b, 0x3d, 0x02, 0x00, 0x75, 0xe2, + 0xf6, 0x46, 0xfe, 0x01, 0x74, 0x0e, 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0x59, 0xcb, 0x89, 0xf0, 0xeb, 0xf5, 0x8b, 0x56, 0xfc, 0x89, + 0xc8, 0x0e, 0x3e, 0xe8, 0xeb, 0xbc, 0x85, 0xc0, 0x74, 0xe4, 0x80, 0x4e, + 0xfe, 0x01, 0xeb, 0xba, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xc6, + 0x89, 0xd7, 0x8b, 0x46, 0x0c, 0x8b, 0x56, 0x0e, 0x89, 0xd9, 0x8e, 0xc7, + 0x89, 0xf3, 0x1e, 0x92, 0x8e, 0xd8, 0x06, 0x53, 0xb4, 0x1a, 0xcd, 0x21, + 0x5a, 0x1f, 0xb4, 0x4e, 0xcd, 0x21, 0x1f, 0xe8, 0xe8, 0xf0, 0x5d, 0x5f, + 0x5e, 0x59, 0xca, 0x04, 0x00, 0x1e, 0x92, 0x8e, 0xd8, 0xb4, 0x1a, 0xcd, + 0x21, 0x1f, 0xb4, 0x4f, 0xcd, 0x21, 0xe8, 0xd1, 0xf0, 0xcb, 0x31, 0xc0, + 0xcb, 0x56, 0x89, 0xc6, 0x8e, 0xda, 0x8e, 0xc1, 0x26, 0x8a, 0x07, 0x88, + 0x04, 0x84, 0xc0, 0x74, 0x04, 0x46, 0x43, 0xeb, 0xf3, 0x89, 0xf0, 0x8c, + 0xda, 0x5e, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0c, 0x89, + 0xc7, 0x89, 0x56, 0xfc, 0x89, 0x5e, 0xf8, 0x89, 0x4e, 0xfa, 0x85, 0xc9, + 0x75, 0x15, 0x85, 0xdb, 0x75, 0x11, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, + 0xc6, 0x0d, 0x89, 0x46, 0xf8, 0xa1, 0xc8, 0x0d, 0x89, 0x46, 0xfa, 0xc7, + 0x46, 0xfe, 0x00, 0x00, 0x83, 0x7e, 0xfa, 0x00, 0x75, 0x06, 0x83, 0x7e, + 0xf8, 0x00, 0x74, 0x28, 0x8b, 0x76, 0xf8, 0x8b, 0x5e, 0xfa, 0x8e, 0xdb, + 0x8b, 0x44, 0x02, 0x8b, 0x14, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, + 0x13, 0x89, 0xd0, 0x8b, 0x54, 0x02, 0x0e, 0xe8, 0xaa, 0xb9, 0x90, 0x40, + 0x83, 0xc6, 0x04, 0x01, 0x46, 0xfe, 0xeb, 0xde, 0xff, 0x46, 0xfe, 0x80, + 0x7e, 0x1a, 0x00, 0x74, 0x15, 0x8e, 0x5e, 0xfc, 0x8b, 0x05, 0x8b, 0x55, + 0x02, 0x83, 0x46, 0xfe, 0x02, 0x0e, 0x3e, 0xe8, 0x86, 0xb9, 0x40, 0x01, + 0x46, 0xfe, 0x8b, 0x46, 0xfe, 0x05, 0x0f, 0x00, 0x24, 0xf0, 0xba, 0x75, + 0x07, 0x89, 0x46, 0xfe, 0xb8, 0x75, 0x07, 0x83, 0x46, 0xfe, 0x0f, 0x8e, + 0xd8, 0x8b, 0x46, 0xfe, 0x8b, 0x0e, 0x4e, 0x08, 0xc7, 0x06, 0x4e, 0x08, + 0x10, 0x00, 0x0e, 0xe8, 0x48, 0xbd, 0x90, 0x8e, 0xda, 0x89, 0xc6, 0x85, + 0xc0, 0x75, 0x3d, 0x8b, 0x46, 0xfe, 0x0e, 0xe8, 0x37, 0xac, 0x90, 0x89, + 0xc6, 0x8e, 0xda, 0x85, 0xd2, 0x75, 0x2d, 0x85, 0xc0, 0x75, 0x29, 0x0e, + 0x3e, 0xe8, 0xb7, 0xc1, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x05, 0x00, + 0x0e, 0xe8, 0x7d, 0xe4, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0x75, 0x07, + 0xc7, 0x07, 0x08, 0x00, 0x8e, 0xd8, 0xb8, 0xff, 0xff, 0x89, 0x0e, 0x4e, + 0x08, 0xe9, 0x26, 0x01, 0xb8, 0x75, 0x07, 0x8e, 0xc0, 0x8b, 0x5e, 0x0a, + 0x26, 0x89, 0x0e, 0x4e, 0x08, 0x8e, 0x46, 0x0c, 0x26, 0x89, 0x37, 0x8d, + 0x44, 0x0f, 0xb1, 0x04, 0x24, 0xf0, 0x26, 0x8c, 0x5f, 0x02, 0x89, 0xc3, + 0x8c, 0xda, 0xd3, 0xeb, 0x8e, 0x46, 0x14, 0x89, 0xd9, 0x8b, 0x5e, 0x12, + 0x01, 0xd1, 0x26, 0x89, 0x0f, 0xc4, 0x5e, 0x0e, 0x83, 0x6e, 0xfe, 0x0f, + 0x26, 0x89, 0x07, 0x89, 0xc6, 0x26, 0x8c, 0x5f, 0x02, 0x83, 0x7e, 0xfa, + 0x00, 0x75, 0x06, 0x83, 0x7e, 0xf8, 0x00, 0x74, 0x37, 0x8b, 0x5e, 0xf8, + 0x8b, 0x46, 0xfa, 0x89, 0x5e, 0xf6, 0x89, 0x46, 0xf4, 0x8e, 0x46, 0xf4, + 0x8b, 0x5e, 0xf6, 0x26, 0x8b, 0x47, 0x02, 0x26, 0x8b, 0x17, 0x85, 0xc0, + 0x75, 0x04, 0x85, 0xd2, 0x74, 0x16, 0x89, 0xc1, 0x89, 0xd3, 0x89, 0xf0, + 0x8c, 0xda, 0x83, 0x46, 0xf6, 0x04, 0xe8, 0x78, 0xfe, 0x89, 0xc6, 0x8e, + 0xda, 0x46, 0xeb, 0xd5, 0xc6, 0x04, 0x00, 0x46, 0x80, 0x7e, 0x1a, 0x00, + 0x74, 0x1b, 0xc6, 0x04, 0x01, 0x46, 0x8c, 0xda, 0xc6, 0x04, 0x00, 0x8e, + 0x46, 0xfc, 0x8d, 0x44, 0x01, 0x26, 0x8b, 0x1d, 0x26, 0x8b, 0x4d, 0x02, + 0x0e, 0xe8, 0xef, 0xc7, 0x90, 0x8e, 0x5e, 0xfc, 0x31, 0xdb, 0x8b, 0x45, + 0x02, 0x8b, 0x15, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, 0x2c, 0x8d, + 0x75, 0x04, 0x8c, 0xd9, 0x8e, 0xd9, 0x8b, 0x54, 0x02, 0x8b, 0x04, 0x85, + 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x18, 0x85, 0xdb, 0x74, 0x01, 0x43, + 0x8e, 0xd9, 0x8b, 0x04, 0x8b, 0x54, 0x02, 0x0e, 0x3e, 0xe8, 0x34, 0xb8, + 0x83, 0xc6, 0x04, 0x01, 0xc3, 0xeb, 0xd9, 0x83, 0xfb, 0x7e, 0x76, 0x2c, + 0x0e, 0xe8, 0xa3, 0xc0, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x02, + 0x00, 0x0e, 0x3e, 0xe8, 0x67, 0xe3, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, + 0x0a, 0x00, 0xc5, 0x5e, 0x0a, 0x8b, 0x07, 0x8b, 0x57, 0x02, 0x0e, 0xe8, + 0x00, 0xac, 0x90, 0xb8, 0xff, 0xff, 0xeb, 0x0e, 0xc5, 0x5e, 0x16, 0xb1, + 0x04, 0x8b, 0x46, 0xfe, 0xc7, 0x07, 0x90, 0x00, 0xd3, 0xe8, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0xca, 0x12, 0x00, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, + 0x89, 0xde, 0x89, 0x4e, 0xfe, 0xc5, 0x7e, 0x0a, 0x83, 0x7e, 0x0e, 0x00, + 0x75, 0x01, 0x47, 0x8e, 0x46, 0xfe, 0x26, 0x8b, 0x5c, 0x02, 0x26, 0x8b, + 0x0c, 0x85, 0xdb, 0x75, 0x04, 0x85, 0xc9, 0x74, 0x46, 0x83, 0xc6, 0x04, + 0x26, 0x8b, 0x4c, 0x02, 0x26, 0x8b, 0x1c, 0x85, 0xc9, 0x75, 0x04, 0x85, + 0xdb, 0x74, 0x34, 0x8e, 0x46, 0xfe, 0x89, 0xf8, 0x8c, 0xda, 0x26, 0x8b, + 0x1c, 0x26, 0x8b, 0x4c, 0x02, 0xe8, 0x7d, 0xfd, 0x8e, 0x46, 0xfe, 0x89, + 0xc3, 0x89, 0xc7, 0x83, 0xc6, 0x04, 0x8e, 0xda, 0x26, 0x8b, 0x4c, 0x02, + 0x26, 0x8b, 0x04, 0x85, 0xc9, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x08, 0x8d, + 0x7f, 0x01, 0xc6, 0x07, 0x20, 0xeb, 0xcc, 0x83, 0x7e, 0x0e, 0x00, 0x74, + 0x05, 0xc6, 0x05, 0x00, 0xeb, 0x11, 0x8b, 0x76, 0x0a, 0x89, 0xfb, 0xc6, + 0x05, 0x0d, 0x2b, 0x5e, 0x0a, 0x8e, 0x5e, 0x0c, 0x4b, 0x88, 0x1c, 0x89, + 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x06, 0x00, 0x55, 0x8b, 0xec, 0x56, 0x57, + 0x52, 0x51, 0x53, 0x06, 0x1e, 0x8c, 0xd0, 0x8e, 0xd8, 0x8b, 0x46, 0x0c, + 0xa3, 0xc6, 0x08, 0x8b, 0x46, 0x0a, 0xa3, 0xc8, 0x08, 0x8c, 0x1e, 0xca, + 0x08, 0x8c, 0x1e, 0xd2, 0x08, 0x1e, 0x07, 0x8b, 0xf0, 0x46, 0xbf, 0xa6, + 0x08, 0x89, 0x3e, 0xcc, 0x08, 0x8c, 0x1e, 0xce, 0x08, 0xb0, 0x01, 0xb4, + 0x29, 0xcd, 0x21, 0xbf, 0xb6, 0x08, 0x89, 0x3e, 0xd0, 0x08, 0x8c, 0x1e, + 0xd2, 0x08, 0xb0, 0x01, 0xb4, 0x29, 0xcd, 0x21, 0x55, 0x06, 0x1e, 0x8c, + 0x16, 0xd6, 0x08, 0x89, 0x26, 0xd4, 0x08, 0x8c, 0x1e, 0xdc, 0x08, 0x80, + 0x3e, 0x24, 0x08, 0x02, 0x75, 0x10, 0xbf, 0x2e, 0x00, 0x8b, 0x35, 0x89, + 0x36, 0xd8, 0x08, 0x8b, 0x75, 0x02, 0x89, 0x36, 0xda, 0x08, 0xbb, 0xc6, + 0x08, 0x83, 0x7e, 0x06, 0x01, 0x75, 0x06, 0xb0, 0x04, 0x33, 0xc9, 0xeb, + 0x02, 0x32, 0xc0, 0xf8, 0x50, 0xb4, 0x0b, 0xcd, 0x21, 0x58, 0xc7, 0x06, + 0x2e, 0x08, 0x01, 0x00, 0x8b, 0x56, 0x08, 0x50, 0xff, 0x1e, 0x39, 0x08, + 0x58, 0xb4, 0x4b, 0xcd, 0x21, 0x50, 0x9f, 0x5b, 0x50, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0x58, 0x8e, 0x16, 0xd6, 0x08, 0x8b, 0x26, 0xd4, 0x08, 0x8e, + 0x1e, 0xdc, 0x08, 0x80, 0x3e, 0x24, 0x08, 0x02, 0x75, 0x10, 0xbf, 0x2e, + 0x00, 0x8b, 0x36, 0xda, 0x08, 0x89, 0x75, 0x02, 0x8b, 0x36, 0xd8, 0x08, + 0x89, 0x35, 0x9e, 0x93, 0x1f, 0xc7, 0x06, 0x2e, 0x08, 0x00, 0x00, 0x07, + 0x5d, 0x72, 0x04, 0xb4, 0x4d, 0xcd, 0x21, 0x73, 0x03, 0xe8, 0x33, 0xe1, + 0x1f, 0x07, 0x5b, 0x59, 0x5a, 0x5f, 0x5e, 0x5d, 0xcb, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xa1, 0xde, 0x08, 0x8b, 0x16, 0xe0, 0x08, 0xc3, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xdf, 0x89, 0xce, 0x8b, 0x4e, + 0x08, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x57, 0x8e, 0xda, 0x89, + 0xc3, 0x89, 0x3f, 0x89, 0x77, 0x02, 0x8b, 0x5e, 0x0c, 0x29, 0xcb, 0x81, + 0xfb, 0x93, 0x00, 0x72, 0x03, 0xbb, 0x92, 0x00, 0x8b, 0x56, 0x0a, 0x89, + 0xc8, 0x0e, 0x3e, 0xe8, 0xda, 0x04, 0x89, 0x46, 0xfe, 0x50, 0x89, 0xcb, + 0x89, 0xf2, 0x8b, 0x4e, 0x0a, 0x89, 0xf8, 0x0e, 0x3e, 0xe8, 0xfc, 0x04, + 0x8b, 0x5e, 0xfe, 0x89, 0xf8, 0x89, 0xf2, 0x0e, 0x3e, 0xe8, 0x26, 0x05, + 0x8e, 0xde, 0x89, 0xfb, 0x89, 0xf2, 0x01, 0xc3, 0x89, 0xf8, 0xc6, 0x07, + 0x00, 0x8b, 0x5e, 0xfe, 0x0e, 0xe8, 0x12, 0x05, 0x90, 0x01, 0xc7, 0x47, + 0x89, 0xf8, 0x89, 0xf2, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x08, 0x00, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0e, 0x8b, 0x7e, 0x0a, 0x89, + 0xc6, 0x89, 0x56, 0xfe, 0x89, 0x5e, 0xf4, 0x89, 0x4e, 0xfa, 0x8e, 0xda, + 0x89, 0xc3, 0x8a, 0x04, 0x89, 0xd1, 0x3c, 0x2f, 0x75, 0x67, 0x8e, 0x5e, + 0xfe, 0x8a, 0x44, 0x01, 0x3c, 0x2f, 0x75, 0x59, 0x83, 0xc6, 0x02, 0x8e, + 0x5e, 0xfe, 0x8a, 0x04, 0x84, 0xc0, 0x75, 0x4f, 0xff, 0x76, 0xfe, 0x8b, + 0x56, 0x0c, 0x56, 0x89, 0xf8, 0x51, 0x8b, 0x4e, 0xfa, 0x53, 0x8b, 0x5e, + 0xf4, 0xe8, 0x3a, 0xff, 0x89, 0x46, 0xf4, 0x89, 0x56, 0xfa, 0xc7, 0x46, + 0xfc, 0x00, 0x00, 0x8b, 0x56, 0xfe, 0x89, 0x76, 0xf6, 0x89, 0xf1, 0x31, + 0xff, 0x89, 0x56, 0xf8, 0x89, 0x56, 0xf2, 0x8b, 0x56, 0xfe, 0x89, 0xf0, + 0x0e, 0xe8, 0x03, 0xe8, 0x90, 0x89, 0xc3, 0x85, 0xc0, 0x74, 0x5b, 0x3d, + 0x2e, 0x00, 0x75, 0x59, 0x8b, 0x7e, 0xfe, 0x89, 0x76, 0xfc, 0x46, 0xeb, + 0xe2, 0xeb, 0x44, 0xeb, 0x4e, 0x3c, 0x5c, 0x74, 0x95, 0x8e, 0x5e, 0xfe, + 0x80, 0x3c, 0x00, 0x74, 0x62, 0x80, 0x7c, 0x01, 0x3a, 0x75, 0x5c, 0x8b, + 0x46, 0x0c, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xff, 0x74, 0x20, 0x8b, 0x5e, + 0xf4, 0x8e, 0xd8, 0x8b, 0x56, 0xfa, 0x89, 0x1d, 0x89, 0x55, 0x02, 0x8e, + 0x5e, 0xfe, 0x8a, 0x14, 0x8e, 0x5e, 0xfa, 0xc7, 0x47, 0x01, 0x3a, 0x00, + 0x83, 0x46, 0xf4, 0x03, 0x88, 0x17, 0x83, 0xc6, 0x02, 0xeb, 0x87, 0x3c, + 0x5c, 0x75, 0xbe, 0xe9, 0x5a, 0xff, 0xe9, 0x77, 0x00, 0xeb, 0x46, 0x3c, + 0x2f, 0x75, 0x03, 0xe9, 0x5a, 0xff, 0x3c, 0x5c, 0x74, 0xf9, 0x3c, 0x2e, + 0x74, 0xf5, 0x89, 0xf0, 0x8c, 0xda, 0x0e, 0xe8, 0xcd, 0xe7, 0x90, 0x89, + 0xc6, 0x89, 0x56, 0xfe, 0xe9, 0x38, 0xff, 0x8b, 0x46, 0x0c, 0x85, 0xc0, + 0x75, 0x07, 0x85, 0xff, 0x75, 0x03, 0xe9, 0x4d, 0xff, 0x8b, 0x5e, 0xf4, + 0x8e, 0xd8, 0x8b, 0x56, 0xfa, 0x89, 0x1d, 0x89, 0x55, 0x02, 0x8e, 0xda, + 0xff, 0x46, 0xf4, 0xc6, 0x07, 0x00, 0xe9, 0x35, 0xff, 0x8b, 0x56, 0xfe, + 0x89, 0xf0, 0x0e, 0xe8, 0x95, 0xe7, 0x90, 0x89, 0xc6, 0x89, 0x56, 0xfe, + 0x83, 0xfb, 0x2f, 0x75, 0x13, 0x8b, 0x56, 0xfe, 0xc7, 0x46, 0xfc, 0x00, + 0x00, 0x89, 0x76, 0xf6, 0x31, 0xff, 0x89, 0x56, 0xf8, 0xe9, 0x23, 0xff, + 0x83, 0xfb, 0x5c, 0x74, 0xe8, 0xe9, 0x1b, 0xff, 0xff, 0x76, 0xf8, 0x8b, + 0x5e, 0xf4, 0xff, 0x76, 0xf6, 0x8b, 0x46, 0x0e, 0xff, 0x76, 0xf2, 0x8b, + 0x56, 0x10, 0x51, 0x8b, 0x4e, 0xfa, 0xe8, 0x21, 0xfe, 0x89, 0x46, 0xf4, + 0x89, 0x56, 0xfa, 0x85, 0xff, 0x75, 0x0c, 0x83, 0x7e, 0xfc, 0x00, 0x75, + 0x06, 0x8b, 0x7e, 0xfe, 0x89, 0x76, 0xfc, 0x57, 0x8b, 0x5e, 0xf4, 0xff, + 0x76, 0xfc, 0x8b, 0x4e, 0xfa, 0xff, 0x76, 0xf8, 0x8b, 0x46, 0x12, 0xff, + 0x76, 0xf6, 0x8b, 0x56, 0x14, 0xe8, 0xf2, 0xfd, 0xff, 0x76, 0xfe, 0x89, + 0xc3, 0x56, 0x89, 0xd1, 0x57, 0x8b, 0x46, 0x16, 0xff, 0x76, 0xfc, 0x8b, + 0x56, 0x18, 0xe8, 0xdd, 0xfd, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x10, + 0x00, 0xcb, 0x53, 0x52, 0x1e, 0x8e, 0xd9, 0x8b, 0xd3, 0x8b, 0xd8, 0xb4, + 0x48, 0xcd, 0x21, 0x87, 0xd3, 0x72, 0x06, 0x8b, 0xd0, 0x2b, 0xc0, 0xeb, + 0x03, 0xe8, 0xca, 0xea, 0x89, 0x17, 0x1f, 0x5a, 0x5b, 0xcb, 0x06, 0x8e, + 0xc0, 0xb4, 0x49, 0xcd, 0x21, 0xe8, 0xba, 0xea, 0x07, 0xcb, 0x06, 0x1e, + 0x8e, 0xd9, 0x53, 0x8e, 0xc2, 0x8b, 0xd8, 0xb4, 0x4a, 0xcd, 0x21, 0x8b, + 0xd3, 0x5b, 0x73, 0x02, 0x89, 0x17, 0x1f, 0xe8, 0xa0, 0xea, 0x07, 0xcb, + 0x8e, 0xd9, 0x3d, 0x2f, 0x00, 0x75, 0x0a, 0x83, 0x3f, 0x00, 0x75, 0x02, + 0x89, 0x07, 0x8b, 0x07, 0xc3, 0x3d, 0x5c, 0x00, 0x74, 0xf1, 0xc3, 0x56, + 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0c, 0x8b, 0x7e, 0x0e, 0x89, 0xc6, + 0x89, 0x56, 0xfe, 0x89, 0x5e, 0xfa, 0x89, 0x4e, 0xfc, 0xc7, 0x46, 0xf4, + 0x00, 0x00, 0x89, 0x46, 0xf6, 0x89, 0x56, 0xf8, 0x85, 0xc9, 0x75, 0x04, + 0x85, 0xdb, 0x74, 0x28, 0x8e, 0xd9, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x20, + 0x3c, 0x5c, 0x74, 0x03, 0xe9, 0x46, 0x01, 0x3a, 0x47, 0x01, 0x75, 0xf8, + 0x89, 0xf0, 0x0e, 0xe8, 0x19, 0xc3, 0x90, 0x8b, 0x46, 0xfa, 0x8b, 0x56, + 0xfc, 0x0e, 0x3e, 0xe8, 0x8a, 0xb3, 0x01, 0xc6, 0x8e, 0x5e, 0xfe, 0xc6, + 0x04, 0x00, 0x83, 0x7e, 0x0c, 0x00, 0x75, 0x09, 0x83, 0x7e, 0x0a, 0x00, + 0x75, 0x03, 0xe9, 0x8d, 0x00, 0xc5, 0x5e, 0x0a, 0x80, 0x3f, 0x00, 0x74, + 0xf5, 0x8b, 0x46, 0x0a, 0x8b, 0x56, 0x0c, 0x8d, 0x5e, 0xf4, 0x8c, 0xd1, + 0x0e, 0xe8, 0xe7, 0xe5, 0x90, 0xe8, 0x68, 0xff, 0x8b, 0x4e, 0xfe, 0x89, + 0xf3, 0x0e, 0x3e, 0xe8, 0xbf, 0x02, 0x8b, 0x56, 0xfe, 0x89, 0xf0, 0x0e, + 0x3e, 0xe8, 0xca, 0x02, 0x89, 0xf3, 0x8e, 0x5e, 0xfe, 0x01, 0xc3, 0x89, + 0xf0, 0x8c, 0xda, 0xc6, 0x07, 0x00, 0x0e, 0xe8, 0x05, 0xe6, 0x90, 0x89, + 0xc6, 0x89, 0x56, 0xfe, 0x8b, 0x46, 0x0a, 0x8b, 0x56, 0x0c, 0x0e, 0xe8, + 0xf5, 0xe5, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0x89, 0x46, 0x0a, 0x89, 0x56, + 0x0c, 0x80, 0x3f, 0x00, 0x75, 0xa7, 0x83, 0x7e, 0xf4, 0x00, 0x75, 0x05, + 0xc7, 0x46, 0xf4, 0x5c, 0x00, 0x8b, 0x4e, 0xfe, 0x8b, 0x46, 0xf6, 0x8b, + 0x56, 0xf8, 0x89, 0xf3, 0x0e, 0xe8, 0x9a, 0x02, 0x90, 0x89, 0xc3, 0x8e, + 0xda, 0x8a, 0x07, 0x30, 0xe4, 0x3b, 0x46, 0xf4, 0x74, 0x03, 0xe9, 0x9e, + 0x00, 0x4e, 0x83, 0x7e, 0xf4, 0x00, 0x75, 0x05, 0xc7, 0x46, 0xf4, 0x5c, + 0x00, 0x8b, 0x46, 0x10, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xff, 0x74, 0x73, + 0x8e, 0xd8, 0x80, 0x3d, 0x00, 0x74, 0x6c, 0x8d, 0x5e, 0xf4, 0x89, 0xf8, + 0x8c, 0xda, 0x8c, 0xd1, 0x0e, 0xe8, 0x47, 0xe5, 0x90, 0xe8, 0xc8, 0xfe, + 0x3b, 0x46, 0xf4, 0x75, 0x77, 0x8e, 0x5e, 0x10, 0x80, 0x3d, 0x00, 0x74, + 0x6d, 0x8d, 0x5e, 0xf4, 0x89, 0xf8, 0x8c, 0xda, 0x8c, 0xd1, 0x0e, 0xe8, + 0x29, 0xe5, 0x90, 0xe8, 0xaa, 0xfe, 0x8b, 0x4e, 0xfe, 0x89, 0xf3, 0x0e, + 0x3e, 0xe8, 0x01, 0x02, 0x8b, 0x56, 0xfe, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, + 0x0c, 0x02, 0x89, 0xf3, 0x8e, 0x5e, 0xfe, 0x01, 0xc3, 0x89, 0xf0, 0x8c, + 0xda, 0xc6, 0x07, 0x00, 0x0e, 0xe8, 0x47, 0xe5, 0x90, 0x89, 0xc6, 0x89, + 0x56, 0xfe, 0x8b, 0x56, 0x10, 0x89, 0xf8, 0x0e, 0x3e, 0xe8, 0x37, 0xe5, + 0x89, 0xc7, 0x89, 0x56, 0x10, 0xeb, 0xaa, 0xeb, 0x31, 0xc5, 0x5e, 0xfa, + 0x8a, 0x07, 0x8e, 0x5e, 0xfe, 0x88, 0x04, 0x46, 0xc6, 0x04, 0x3a, 0x46, + 0xe9, 0xc1, 0xfe, 0x8e, 0x5e, 0xfe, 0x8a, 0x46, 0xf4, 0x88, 0x04, 0xe9, + 0x58, 0xff, 0xeb, 0x1e, 0x8e, 0x5e, 0xfe, 0x8a, 0x04, 0x98, 0x3b, 0x46, + 0xf4, 0x74, 0x03, 0xe9, 0x7b, 0xff, 0x46, 0xe9, 0x77, 0xff, 0x8e, 0x5e, + 0xfe, 0x8a, 0x04, 0x98, 0x3b, 0x46, 0xf4, 0x75, 0x01, 0x46, 0x83, 0x7e, + 0x14, 0x00, 0x75, 0x06, 0x83, 0x7e, 0x12, 0x00, 0x74, 0x29, 0xc5, 0x5e, + 0x12, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x20, 0x3c, 0x2e, 0x75, 0x14, 0xc5, + 0x5e, 0x12, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x13, 0x8e, 0x5e, 0xfe, 0xff, + 0x46, 0x12, 0x88, 0x04, 0x46, 0xeb, 0xec, 0x8e, 0x5e, 0xfe, 0xc6, 0x04, + 0x2e, 0xeb, 0xf5, 0x8e, 0x5e, 0xfe, 0xc6, 0x04, 0x00, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0xca, 0x0c, 0x00, 0x56, 0x89, 0xc6, 0x8e, 0xda, 0x8e, 0xc1, + 0x8a, 0x04, 0x46, 0x3c, 0x41, 0x72, 0x06, 0x3c, 0x5a, 0x77, 0x02, 0x04, + 0x20, 0x26, 0x8a, 0x27, 0x43, 0x80, 0xfc, 0x41, 0x72, 0x08, 0x80, 0xfc, + 0x5a, 0x77, 0x03, 0x80, 0xc4, 0x20, 0x38, 0xe0, 0x75, 0x04, 0x84, 0xe4, + 0x75, 0xda, 0x88, 0xc3, 0x88, 0xe0, 0x30, 0xff, 0x30, 0xe4, 0x29, 0xc3, + 0x89, 0xd8, 0x5e, 0xcb, 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0xff, 0x36, 0xc8, 0x0d, 0x8d, 0x56, 0x12, 0xff, 0x36, + 0xc6, 0x0d, 0x8b, 0x5e, 0x0e, 0x16, 0x8b, 0x4e, 0x10, 0x52, 0x8b, 0x46, + 0x0c, 0x0e, 0x3e, 0xe8, 0x73, 0xf0, 0x5d, 0x5a, 0x59, 0x5b, 0xcb, 0x53, + 0x51, 0x89, 0xc1, 0x89, 0xd0, 0x83, 0xfa, 0xff, 0x74, 0x0b, 0x81, 0xf9, + 0x75, 0x07, 0x75, 0x08, 0x0e, 0xe8, 0x9d, 0xb6, 0x90, 0x59, 0x5b, 0xcb, + 0x89, 0xca, 0x31, 0xdb, 0x0e, 0xe8, 0x5a, 0xb2, 0x90, 0x59, 0x5b, 0xcb, + 0x51, 0x56, 0x57, 0x89, 0xc1, 0x89, 0xd6, 0x31, 0xff, 0x89, 0xc8, 0x89, + 0xf2, 0x0e, 0x3e, 0xe8, 0x9d, 0xe3, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xdb, + 0x77, 0x06, 0x89, 0xf8, 0x5f, 0x5e, 0x59, 0xcb, 0x89, 0xc8, 0x89, 0xf2, + 0x0e, 0xe8, 0xae, 0x00, 0x90, 0x39, 0xc3, 0x72, 0xed, 0x47, 0x29, 0xc3, + 0x01, 0xc1, 0xeb, 0xd5, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, + 0x89, 0xc6, 0x89, 0xd7, 0x89, 0x5e, 0xfe, 0x8b, 0x5e, 0x0a, 0x8b, 0x46, + 0xfe, 0x89, 0xca, 0x0e, 0x3e, 0xe8, 0x1a, 0x00, 0x8b, 0x5e, 0xfe, 0x40, + 0x89, 0xfa, 0x50, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, 0xf6, 0x00, 0x89, 0xf0, + 0x89, 0xfa, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x02, 0x00, 0x51, 0x56, + 0x57, 0x89, 0xc6, 0x89, 0xd7, 0x89, 0xd9, 0x31, 0xdb, 0x89, 0xf0, 0x89, + 0xfa, 0x0e, 0x3e, 0xe8, 0x31, 0xe3, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xc9, + 0x77, 0x06, 0x89, 0xd8, 0x5f, 0x5e, 0x59, 0xcb, 0x8e, 0xdf, 0x8a, 0x04, + 0x30, 0xe4, 0x0e, 0xe8, 0x4b, 0xe7, 0x90, 0x85, 0xc0, 0x74, 0x23, 0x8e, + 0xdf, 0x80, 0x7c, 0x01, 0x00, 0x74, 0xe3, 0x89, 0xf0, 0x89, 0xfa, 0x0e, + 0x3e, 0xe8, 0x2a, 0x00, 0x01, 0xc3, 0x89, 0xf0, 0x89, 0xfa, 0x0e, 0xe8, + 0x6d, 0xe3, 0x90, 0x49, 0x89, 0xc6, 0x89, 0xd7, 0xeb, 0xb7, 0x43, 0xeb, + 0xed, 0x8e, 0xd9, 0xf6, 0xc4, 0xff, 0x74, 0x0a, 0x88, 0x27, 0x88, 0x47, + 0x01, 0x89, 0xd8, 0x8c, 0xda, 0xcb, 0x88, 0x07, 0xeb, 0xf7, 0x53, 0x89, + 0xc3, 0x8e, 0xda, 0x8a, 0x07, 0x30, 0xe4, 0x0e, 0x3e, 0xe8, 0xfd, 0xe6, + 0x85, 0xc0, 0x74, 0x05, 0xb8, 0x02, 0x00, 0x5b, 0xcb, 0xb8, 0x01, 0x00, + 0x5b, 0xcb, 0x56, 0x57, 0x89, 0xc2, 0x89, 0xde, 0x89, 0xcf, 0x39, 0xd8, + 0x72, 0x07, 0x31, 0xc0, 0x31, 0xd2, 0x5f, 0x5e, 0xcb, 0x4b, 0x8e, 0xd9, + 0x8a, 0x07, 0x30, 0xe4, 0x0e, 0xe8, 0xd1, 0xe6, 0x90, 0x85, 0xc0, 0x75, + 0x37, 0x83, 0xc3, 0xff, 0x39, 0xda, 0x77, 0x0f, 0x8e, 0xd9, 0x8a, 0x07, + 0x30, 0xe4, 0x0e, 0xe8, 0xbb, 0xe6, 0x90, 0x85, 0xc0, 0x75, 0xea, 0x89, + 0xf2, 0x29, 0xda, 0xb1, 0x0f, 0x89, 0xd0, 0xd3, 0xf8, 0x31, 0xc2, 0x29, + 0xc2, 0x83, 0xe2, 0x01, 0x31, 0xc2, 0x29, 0xc2, 0x4e, 0x89, 0xd0, 0x29, + 0xc6, 0x89, 0xfa, 0x89, 0xf0, 0x5f, 0x5e, 0xcb, 0x89, 0xca, 0x8d, 0x47, + 0xff, 0x5f, 0x5e, 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, + 0x89, 0xc7, 0x89, 0x56, 0xfe, 0x8e, 0xd9, 0x8b, 0x4e, 0x0a, 0x89, 0xc6, + 0x8e, 0xc2, 0x85, 0xc9, 0x76, 0x06, 0x8a, 0x07, 0x84, 0xc0, 0x75, 0x2e, + 0x80, 0x3f, 0x00, 0x74, 0x18, 0x39, 0xfe, 0x76, 0x14, 0x8a, 0x47, 0xff, + 0x30, 0xe4, 0x0e, 0xe8, 0x5b, 0xe6, 0x90, 0x85, 0xc0, 0x74, 0x06, 0x8e, + 0xda, 0xc6, 0x44, 0xff, 0x00, 0x85, 0xc9, 0x77, 0x15, 0x8b, 0x56, 0xfe, + 0x89, 0xf8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x02, 0x00, 0x43, 0x49, + 0x26, 0x88, 0x04, 0x46, 0xeb, 0xc0, 0x89, 0xf0, 0x31, 0xdb, 0x0e, 0xe8, + 0xb7, 0xdc, 0x90, 0xeb, 0xe0, 0x53, 0x51, 0x52, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0x8b, 0x16, 0x8b, 0x0d, 0xb0, 0x0f, 0x83, 0xc2, 0x04, 0xee, 0xb8, + 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x16, 0x8b, 0x0d, 0x83, 0xc2, 0x05, 0xec, + 0x88, 0xc1, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x16, 0x8b, 0x0d, 0xb0, + 0x0e, 0x83, 0xc2, 0x04, 0xee, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x16, + 0x8b, 0x0d, 0x83, 0xc2, 0x05, 0x30, 0xed, 0xec, 0x88, 0xc7, 0x31, 0xd2, + 0xb8, 0x75, 0x07, 0x88, 0xcb, 0x8e, 0xd8, 0x89, 0xd8, 0x8a, 0x0e, 0x83, + 0x0d, 0xf7, 0xf1, 0x89, 0xd8, 0x88, 0x16, 0x80, 0x0d, 0x31, 0xd2, 0xf7, + 0xf1, 0xa2, 0x81, 0x0d, 0x5a, 0x59, 0x5b, 0xcb, 0x53, 0x51, 0x52, 0x56, + 0x57, 0x3c, 0x01, 0x72, 0x0c, 0x76, 0x29, 0x3c, 0x03, 0x74, 0x52, 0x3c, + 0x02, 0x74, 0x36, 0xeb, 0x68, 0x84, 0xc0, 0x75, 0x64, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xc7, 0x06, 0x91, 0x0d, 0x0a, 0x00, 0x31, 0xc0, 0xc7, 0x06, + 0x95, 0x0d, 0x02, 0x00, 0xa3, 0x8f, 0x0d, 0xa3, 0x93, 0x0d, 0xeb, 0x49, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xc7, 0x06, 0x91, 0x0d, 0x0a, 0x00, 0x31, + 0xc0, 0xc7, 0x06, 0x95, 0x0d, 0x01, 0x00, 0xeb, 0xe3, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xc7, 0x06, 0x91, 0x0d, 0x0b, 0x00, 0x31, 0xc0, 0xc7, 0x06, + 0x93, 0x0d, 0x00, 0x80, 0xa3, 0x8f, 0x0d, 0xeb, 0x19, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xc7, 0x06, 0x8f, 0x0d, 0x00, 0x80, 0xc7, 0x06, 0x91, 0x0d, + 0x0b, 0x00, 0x31, 0xc0, 0xc7, 0x06, 0x93, 0x0d, 0x00, 0x80, 0xa3, 0x95, + 0x0d, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x36, 0x8f, 0x0d, 0xa1, 0x8f, + 0x0d, 0x8b, 0x16, 0x91, 0x0d, 0x8b, 0x3e, 0x8f, 0x0d, 0x8b, 0x1e, 0x8f, + 0x0d, 0x83, 0xe6, 0x0f, 0x03, 0x3e, 0x93, 0x0d, 0xb9, 0x04, 0x00, 0xd1, + 0xea, 0xd1, 0xd8, 0xe2, 0xfa, 0x83, 0xe7, 0x0f, 0x8b, 0x16, 0x91, 0x0d, + 0x89, 0x36, 0x97, 0x0d, 0xa3, 0x99, 0x0d, 0x89, 0x36, 0x9f, 0x0d, 0xa3, + 0xa1, 0x0d, 0x03, 0x1e, 0x93, 0x0d, 0x13, 0x16, 0x95, 0x0d, 0x89, 0x3e, + 0x9b, 0x0d, 0xb9, 0x04, 0x00, 0xd1, 0xea, 0xd1, 0xdb, 0xe2, 0xfa, 0x89, + 0x3e, 0xa3, 0x0d, 0x89, 0x1e, 0x9d, 0x0d, 0x89, 0x1e, 0xa5, 0x0d, 0x5f, + 0x5e, 0xe9, 0x1c, 0xff, 0x53, 0x52, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xc6, + 0x06, 0x83, 0x0d, 0x50, 0xc7, 0x06, 0x89, 0x0d, 0x19, 0x00, 0x30, 0xc0, + 0xc7, 0x06, 0x87, 0x0d, 0x50, 0x00, 0xa2, 0x80, 0x0d, 0xa2, 0x81, 0x0d, + 0xa0, 0x8d, 0x0d, 0x80, 0x26, 0xa9, 0x0d, 0xfd, 0xa8, 0x10, 0x74, 0x67, + 0xba, 0xcc, 0x03, 0xec, 0xa8, 0x01, 0x74, 0x0d, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0xc7, 0x06, 0x8b, 0x0d, 0xd0, 0x03, 0xeb, 0x0b, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xc7, 0x06, 0x8b, 0x0d, 0xb0, 0x03, 0xb0, 0x06, 0xba, 0xce, + 0x03, 0xee, 0xba, 0xcf, 0x03, 0xec, 0x88, 0xc4, 0xa8, 0x01, 0x75, 0x04, + 0xb0, 0x01, 0xeb, 0x02, 0x30, 0xc0, 0xba, 0x75, 0x07, 0x8e, 0xda, 0x24, + 0x01, 0x80, 0x26, 0xa9, 0x0d, 0xfe, 0x08, 0x06, 0xa9, 0x0d, 0x88, 0xe0, + 0x30, 0xe4, 0xd1, 0xf8, 0xd1, 0xf8, 0x25, 0x03, 0x00, 0xba, 0xc4, 0x03, + 0x0e, 0xe8, 0x9c, 0xfe, 0xb0, 0x01, 0xee, 0xba, 0xc5, 0x03, 0xec, 0xa8, + 0x01, 0x75, 0x06, 0xb0, 0x01, 0xeb, 0x04, 0xeb, 0x4d, 0x30, 0xc0, 0xba, + 0x75, 0x07, 0x24, 0x01, 0x8e, 0xda, 0xd0, 0xe0, 0x8b, 0x16, 0x8b, 0x0d, + 0x80, 0x26, 0xa9, 0x0d, 0xfd, 0x83, 0xc2, 0x04, 0x08, 0x06, 0xa9, 0x0d, + 0xb0, 0x13, 0xee, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x16, 0x8b, 0x0d, + 0x83, 0xc2, 0x05, 0xec, 0xba, 0x75, 0x07, 0xd0, 0xe0, 0x8e, 0xda, 0xa2, + 0x83, 0x0d, 0xf6, 0x06, 0xa9, 0x0d, 0x01, 0x74, 0x0e, 0x89, 0xd0, 0xa0, + 0x83, 0x0d, 0x30, 0xf4, 0xa3, 0x87, 0x0d, 0x0e, 0xe8, 0xde, 0xfd, 0xe9, + 0x07, 0x01, 0xa8, 0x20, 0x74, 0x59, 0xb8, 0x40, 0x00, 0xbb, 0x63, 0x00, + 0x8e, 0xd8, 0x8a, 0x07, 0x24, 0xf0, 0x3c, 0xd0, 0x74, 0x11, 0x3c, 0xb0, + 0x75, 0x0d, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xc7, 0x06, 0x8b, 0x0d, 0xb0, + 0x03, 0xeb, 0x0b, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xc7, 0x06, 0x8b, 0x0d, + 0xd0, 0x03, 0xb8, 0x00, 0x0f, 0xcd, 0x10, 0x3c, 0x04, 0x72, 0x08, 0x3c, + 0x06, 0x76, 0x22, 0x3c, 0x07, 0x77, 0x2d, 0xb8, 0x75, 0x07, 0x8e, 0xd8, + 0x80, 0x0e, 0xa9, 0x0d, 0x01, 0x81, 0x3e, 0x8b, 0x0d, 0xb0, 0x03, 0x75, + 0x05, 0xb8, 0x02, 0x00, 0xeb, 0x23, 0xb8, 0x03, 0x00, 0xeb, 0x1e, 0xeb, + 0x3f, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xb8, 0x03, 0x00, 0x80, 0x26, 0xa9, + 0x0d, 0xfe, 0xeb, 0x0d, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xb8, 0x01, 0x00, + 0x80, 0x26, 0xa9, 0x0d, 0xfe, 0x0e, 0xe8, 0xbf, 0xfd, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0x8b, 0x16, 0x8b, 0x0d, 0xb0, 0x13, 0x83, 0xc2, 0x04, 0xee, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x8b, 0x16, 0x8b, 0x0d, 0x83, 0xc2, 0x05, + 0xec, 0xe9, 0x40, 0xff, 0xa8, 0x48, 0x74, 0x4f, 0xc7, 0x06, 0x8b, 0x0d, + 0xd0, 0x03, 0xb8, 0x00, 0x0f, 0xcd, 0x10, 0x88, 0xc4, 0x3c, 0x07, 0x74, + 0x04, 0x3c, 0x03, 0x77, 0x0c, 0xba, 0x75, 0x07, 0x8e, 0xda, 0x80, 0x0e, + 0xa9, 0x0d, 0x01, 0xeb, 0x0a, 0xba, 0x75, 0x07, 0x8e, 0xda, 0x80, 0x26, + 0xa9, 0x0d, 0xfe, 0x80, 0xfc, 0x01, 0x77, 0x10, 0xba, 0x75, 0x07, 0x8e, + 0xda, 0xc6, 0x06, 0x83, 0x0d, 0x28, 0xc7, 0x06, 0x87, 0x0d, 0x28, 0x00, + 0x80, 0xfc, 0x08, 0x72, 0x05, 0xb8, 0x01, 0x00, 0xeb, 0x17, 0xb8, 0x03, + 0x00, 0xeb, 0x12, 0xa8, 0x80, 0x74, 0x12, 0xb8, 0x02, 0x00, 0xc7, 0x06, + 0x8b, 0x0d, 0xb0, 0x03, 0x80, 0x0e, 0xa9, 0x0d, 0x01, 0x0e, 0xe8, 0x37, + 0xfd, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa0, 0x83, 0x0d, 0xa2, 0x85, 0x0d, + 0xa2, 0x86, 0x0d, 0x5a, 0x5b, 0xcb, 0x45, 0x55, 0x89, 0xe5, 0x53, 0x51, + 0x52, 0x56, 0x57, 0x83, 0xec, 0x30, 0xb9, 0x07, 0x00, 0x8d, 0x7e, 0xd4, + 0xb8, 0x75, 0x07, 0x8d, 0x56, 0xd4, 0x8d, 0x5e, 0xd4, 0x16, 0x07, 0x16, + 0x8e, 0xd8, 0xbe, 0xde, 0x07, 0x52, 0xf3, 0xa5, 0x31, 0xc0, 0xc7, 0x46, + 0xd4, 0x00, 0x1a, 0x8c, 0xd1, 0xa3, 0x8d, 0x0d, 0xa3, 0x8b, 0x0d, 0xb8, + 0x10, 0x00, 0xc7, 0x06, 0xa7, 0x0d, 0x00, 0x01, 0x0e, 0xe8, 0x3c, 0xc0, + 0x90, 0x80, 0x7e, 0xd4, 0x1a, 0x75, 0x19, 0x8a, 0x46, 0xd6, 0x3c, 0x0d, + 0x73, 0x12, 0x88, 0xc3, 0x30, 0xff, 0xb8, 0x75, 0x07, 0xd1, 0xe3, 0x8e, + 0xd8, 0x8b, 0x87, 0xe6, 0x04, 0xa3, 0x8d, 0x0d, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0xa1, 0x8d, 0x0d, 0x85, 0xc0, 0x74, 0x08, 0x25, 0x30, 0x00, 0x3d, + 0x20, 0x00, 0x75, 0x5a, 0xc7, 0x46, 0xd4, 0x00, 0x12, 0x8d, 0x56, 0xd4, + 0x8d, 0x5e, 0xd4, 0xb8, 0x10, 0x00, 0x16, 0x8c, 0xd1, 0x52, 0xc7, 0x46, + 0xd6, 0x10, 0xff, 0x0e, 0x3e, 0xe8, 0xec, 0xbf, 0x80, 0x7e, 0xd7, 0xff, + 0x74, 0x38, 0x8a, 0x46, 0xd8, 0x3c, 0x0c, 0x73, 0x12, 0x88, 0xc3, 0x30, + 0xff, 0xb8, 0x75, 0x07, 0xd1, 0xe3, 0x8e, 0xd8, 0x8b, 0x87, 0x00, 0x05, + 0xa3, 0x8d, 0x0d, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xf6, 0x06, 0x8d, 0x0d, + 0x20, 0x74, 0x13, 0x8a, 0x46, 0xd6, 0x3c, 0x03, 0x77, 0x0c, 0xb1, 0x06, + 0x30, 0xe4, 0xd3, 0xe0, 0x05, 0x40, 0x00, 0xa3, 0xa7, 0x0d, 0xb8, 0x75, + 0x07, 0x8e, 0xd8, 0xa1, 0x8d, 0x0d, 0x85, 0xc0, 0x75, 0x2c, 0x89, 0x46, + 0xf0, 0x50, 0xcd, 0x11, 0x89, 0x86, 0xf0, 0xff, 0x58, 0x8b, 0x46, 0xf0, + 0x30, 0xe4, 0x24, 0x30, 0x3d, 0x30, 0x00, 0x75, 0x08, 0xc7, 0x06, 0x8d, + 0x0d, 0x80, 0x28, 0xeb, 0x0d, 0x8b, 0x46, 0xf0, 0xa8, 0x30, 0x74, 0x06, + 0xc7, 0x06, 0x8d, 0x0d, 0x40, 0x20, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xa1, + 0x8d, 0x0d, 0x25, 0x3a, 0x02, 0x3d, 0x08, 0x00, 0x75, 0x08, 0xc7, 0x06, + 0xa7, 0x0d, 0x40, 0x00, 0xeb, 0x1f, 0xa1, 0x8d, 0x0d, 0x30, 0xe4, 0x24, + 0xf8, 0x3d, 0x40, 0x00, 0x75, 0x08, 0xc7, 0x06, 0xa7, 0x0d, 0x10, 0x00, + 0xeb, 0x0b, 0x3d, 0x80, 0x00, 0x75, 0x06, 0xc7, 0x06, 0xa7, 0x0d, 0x04, + 0x00, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xf6, 0x06, 0x8d, 0x0d, 0x40, 0x74, + 0x20, 0xf7, 0x06, 0x8d, 0x0d, 0xba, 0x06, 0x75, 0x18, 0xb8, 0x00, 0xf0, + 0xbb, 0xfe, 0xff, 0x8e, 0xd8, 0x8a, 0x07, 0x3c, 0xfd, 0x75, 0x0a, 0xb8, + 0x75, 0x07, 0x8e, 0xd8, 0x80, 0x0e, 0x8e, 0x0d, 0x02, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xf6, 0x06, 0x8d, 0x0d, 0x40, 0x75, 0x03, 0xe9, 0x90, 0x00, + 0xf7, 0x06, 0x8d, 0x0d, 0x3a, 0x02, 0x75, 0xf5, 0xb9, 0x07, 0x00, 0x8d, + 0x7e, 0xe2, 0x8d, 0x56, 0xe2, 0x8d, 0x5e, 0xe2, 0xb8, 0x1a, 0x00, 0x16, + 0x07, 0xbe, 0xec, 0x07, 0x16, 0xf3, 0xa5, 0x52, 0x8c, 0xd1, 0xc7, 0x46, + 0xe2, 0x00, 0x81, 0x0e, 0x3e, 0xe8, 0xd8, 0xbe, 0xf6, 0x46, 0xe2, 0x80, + 0x74, 0x17, 0xf6, 0x46, 0xee, 0x01, 0x75, 0x11, 0xb8, 0x75, 0x07, 0x8e, + 0xd8, 0xc7, 0x06, 0xa7, 0x0d, 0x20, 0x00, 0x81, 0x0e, 0x8d, 0x0d, 0x02, + 0x20, 0xb9, 0x07, 0x00, 0x8d, 0x7e, 0xc6, 0xb8, 0x75, 0x07, 0x8d, 0x56, + 0xc6, 0x8d, 0x5e, 0xc6, 0x16, 0x07, 0x16, 0x8e, 0xd8, 0xbe, 0xfa, 0x07, + 0x31, 0xc0, 0xf3, 0xa5, 0x52, 0x89, 0x46, 0xc8, 0x89, 0x46, 0xd2, 0x8c, + 0xd1, 0xb8, 0x15, 0x00, 0xc7, 0x46, 0xc6, 0x00, 0x06, 0x0e, 0x3e, 0xe8, + 0x8a, 0xbe, 0x83, 0x7e, 0xc8, 0x00, 0x74, 0x10, 0xf6, 0x46, 0xd2, 0x01, + 0x75, 0x0a, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x80, 0x0e, 0x8e, 0x0d, 0x21, + 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xf6, 0x06, 0x8d, 0x0d, 0x80, 0x74, 0x49, + 0xba, 0xba, 0x03, 0xb9, 0xff, 0xff, 0xec, 0x31, 0xf6, 0x88, 0xc3, 0x49, + 0x74, 0x3d, 0xba, 0xba, 0x03, 0xec, 0x88, 0x46, 0xf4, 0x88, 0xc2, 0x88, + 0xdc, 0x80, 0xe2, 0x80, 0x80, 0xe4, 0x80, 0x38, 0xe2, 0x75, 0x28, 0x88, + 0xc2, 0x30, 0xf6, 0x88, 0x5e, 0xf2, 0x88, 0x76, 0xf3, 0x33, 0x56, 0xf2, + 0xf6, 0xc2, 0x01, 0x74, 0x0e, 0x80, 0xf3, 0x01, 0xa8, 0x01, 0x74, 0x07, + 0x46, 0x81, 0xfe, 0x58, 0x02, 0x73, 0x08, 0xba, 0x80, 0x00, 0xec, 0xeb, + 0xc2, 0xeb, 0x4e, 0x85, 0xc9, 0x76, 0x4a, 0x8a, 0x46, 0xf4, 0x30, 0xe4, + 0x30, 0xc3, 0xf6, 0xc3, 0x80, 0x74, 0x3e, 0xb1, 0x04, 0xba, 0x75, 0x07, + 0xd3, 0xf8, 0x8e, 0xda, 0x30, 0xe4, 0xc7, 0x06, 0xa7, 0x0d, 0x40, 0x00, + 0x24, 0x07, 0x80, 0x0e, 0x8d, 0x0d, 0x04, 0xa2, 0x82, 0x0d, 0x3d, 0x05, + 0x00, 0x74, 0x05, 0x3d, 0x01, 0x00, 0x75, 0x12, 0x8a, 0x46, 0xf4, 0xb1, + 0x04, 0x30, 0xe4, 0xba, 0x75, 0x07, 0xd3, 0xf8, 0x8e, 0xda, 0x24, 0x07, + 0xeb, 0x04, 0x89, 0xd0, 0x30, 0xd0, 0xa2, 0x82, 0x0d, 0x0e, 0xe8, 0x53, + 0xfb, 0xb8, 0x01, 0x00, 0x8d, 0x66, 0xf6, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, + 0x5d, 0x4d, 0xcb, 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0xb8, 0x75, 0x07, + 0x8e, 0xd8, 0xa0, 0x08, 0x08, 0x84, 0xc0, 0x7c, 0x04, 0x98, 0xe9, 0x72, + 0x00, 0xbb, 0x80, 0x00, 0x9c, 0xfa, 0xba, 0x43, 0x00, 0x30, 0xc0, 0xee, + 0xba, 0x40, 0x00, 0xec, 0x2a, 0xe4, 0x89, 0xc1, 0xec, 0x2a, 0xe4, 0x88, + 0xc4, 0x30, 0xc0, 0x09, 0xc1, 0x9d, 0x89, 0xc8, 0x83, 0xf9, 0xff, 0x75, + 0x1c, 0x9c, 0xfa, 0xba, 0x43, 0x00, 0x30, 0xc0, 0xee, 0xba, 0x40, 0x00, + 0xec, 0x2a, 0xe4, 0x89, 0xc1, 0xec, 0x2a, 0xe4, 0x88, 0xc4, 0x30, 0xc0, + 0x09, 0xc1, 0x9d, 0x89, 0xc8, 0x3d, 0xff, 0xff, 0x75, 0x0d, 0x31, 0xd2, + 0x42, 0x83, 0xfa, 0xff, 0x75, 0xfa, 0x4b, 0x39, 0xd3, 0x75, 0xb1, 0x3d, + 0xff, 0xff, 0x75, 0x0e, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0x30, 0xc0, 0xa2, + 0x08, 0x08, 0x30, 0xe4, 0xeb, 0x0d, 0xb8, 0x75, 0x07, 0x8e, 0xd8, 0xb8, + 0x01, 0x00, 0xc6, 0x06, 0x08, 0x08, 0x01, 0x89, 0xec, 0x5d, 0x5a, 0x59, + 0x5b, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x44, 0x53, - 0x58, 0x4d, 0x45, 0x4e, 0x55, 0x20, 0x5b, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x5d, 0x20, 0x3c, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x49, 0x4e, - 0x49, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x3e, 0x0a, 0x00, 0x20, 0x2d, 0x68, - 0x20, 0x20, 0x2d, 0x2d, 0x68, 0x65, 0x6c, 0x70, 0x20, 0x20, 0x20, 0x2f, - 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x68, 0x6f, 0x77, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x00, - 0x20, 0x2d, 0x64, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, - 0x65, 0x62, 0x75, 0x67, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x0a, - 0x00, 0x68, 0x00, 0x68, 0x65, 0x6c, 0x70, 0x00, 0x3f, 0x00, 0x64, 0x00, - 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x73, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x55, 0x6e, 0x68, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x4d, 0x65, - 0x6e, 0x75, 0x20, 0x49, 0x4e, 0x49, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x0a, 0x00, 0x6d, 0x65, - 0x6e, 0x75, 0x5f, 0x69, 0x6e, 0x69, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, - 0x4c, 0x4c, 0x3f, 0x3f, 0x0a, 0x00, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x0a, - 0x00, 0x72, 0x00, 0x55, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, - 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x27, - 0x25, 0x73, 0x27, 0x0a, 0x00, 0x64, 0x73, 0x78, 0x6d, 0x65, 0x6e, 0x75, - 0x2e, 0x63, 0x00, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x65, 0x6e, 0x75, - 0x00, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, - 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x00, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x00, 0x69, 0x74, 0x65, 0x6d, 0x2d, 0x3e, 0x6d, 0x65, 0x6e, 0x75, 0x5f, - 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x21, 0x3d, - 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x69, 0x74, - 0x65, 0x6d, 0x00, 0x54, 0x6f, 0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, - 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x0a, 0x00, - 0x6d, 0x65, 0x6e, 0x75, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x00, - 0x6d, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x00, - 0x6d, 0x65, 0x6e, 0x75, 0x6c, 0x6f, 0x6f, 0x70, 0x00, 0x54, 0x6f, 0x6f, - 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x0a, 0x00, 0x6c, - 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x5f, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x00, 0x54, 0x6f, 0x6f, 0x20, 0x6d, 0x61, - 0x6e, 0x79, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x0a, 0x00, 0x4d, 0x61, 0x6b, 0x65, - 0x20, 0x61, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x68, 0x69, 0x74, 0x20, 0x45, 0x4e, 0x54, - 0x45, 0x52, 0x00, 0x4d, 0x65, 0x6e, 0x75, 0x20, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x3a, 0x0a, 0x00, 0x69, 0x74, 0x65, 0x6d, 0x2d, 0x3e, 0x6d, 0x65, - 0x6e, 0x75, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x20, 0x21, 0x3d, 0x20, 0x4e, - 0x55, 0x4c, 0x4c, 0x00, 0x20, 0x5b, 0x25, 0x64, 0x5d, 0x20, 0x69, 0x74, - 0x65, 0x6d, 0x3d, 0x27, 0x25, 0x73, 0x27, 0x20, 0x74, 0x65, 0x78, 0x74, - 0x3d, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x3a, 0x0a, - 0x00, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x20, - 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, - 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x3a, 0x0a, 0x00, - 0x6d, 0x65, 0x6e, 0x75, 0x69, 0x64, 0x78, 0x20, 0x3c, 0x20, 0x6d, 0x65, - 0x6e, 0x75, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x00, 0x20, 0x46, 0x6f, - 0x72, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x27, 0x25, 0x73, - 0x27, 0x3a, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x3a, 0x20, 0x27, - 0x25, 0x73, 0x27, 0x0a, 0x00, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x20, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x3a, 0x20, 0x25, 0x64, - 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x0a, 0x00, 0x49, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x3a, 0x20, 0x25, 0x64, 0x0a, 0x00, 0x4d, - 0x65, 0x6e, 0x75, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, - 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x4e, 0x6f, 0x20, 0x6d, 0x65, - 0x6e, 0x75, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x64, 0x0a, 0x00, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x20, 0x69, 0x73, 0x20, 0x25, 0x75, 0x20, 0x78, 0x20, 0x25, 0x75, 0x0a, - 0x00, 0x52, 0x61, 0x6d, 0x20, 0x70, 0x74, 0x72, 0x20, 0x25, 0x46, 0x70, - 0x0a, 0x00, 0x72, 0x75, 0x6e, 0x5f, 0x6d, 0x65, 0x6e, 0x75, 0x00, 0x74, - 0x65, 0x6d, 0x70, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, - 0x57, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x25, - 0x75, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x00, 0x20, + 0x00, 0x00, 0x44, 0x53, 0x58, 0x4d, 0x45, 0x4e, 0x55, 0x20, 0x5b, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5d, 0x20, 0x3c, 0x6d, 0x65, 0x6e, + 0x75, 0x20, 0x49, 0x4e, 0x49, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x3e, 0x0a, + 0x00, 0x20, 0x2d, 0x68, 0x20, 0x20, 0x2d, 0x2d, 0x68, 0x65, 0x6c, 0x70, + 0x20, 0x20, 0x20, 0x2f, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x53, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x65, + 0x6c, 0x70, 0x0a, 0x00, 0x20, 0x2d, 0x64, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x44, 0x65, 0x62, 0x75, 0x67, 0x20, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x0a, 0x00, 0x68, 0x00, 0x68, 0x65, 0x6c, 0x70, 0x00, + 0x3f, 0x00, 0x64, 0x00, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, + 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, + 0x00, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x20, 0x61, + 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x27, 0x25, 0x73, 0x27, + 0x0a, 0x00, 0x4d, 0x65, 0x6e, 0x75, 0x20, 0x49, 0x4e, 0x49, 0x20, 0x66, + 0x69, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x0a, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x5f, 0x69, 0x6e, 0x69, 0x20, 0x3d, + 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x3f, 0x3f, 0x0a, 0x00, 0x43, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x20, 0x74, + 0x65, 0x6d, 0x70, 0x0a, 0x00, 0x72, 0x00, 0x55, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x66, 0x69, + 0x6c, 0x65, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x64, 0x73, 0x78, + 0x6d, 0x65, 0x6e, 0x75, 0x2e, 0x63, 0x00, 0x6c, 0x6f, 0x61, 0x64, 0x5f, + 0x6d, 0x65, 0x6e, 0x75, 0x00, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x21, 0x3d, 0x20, + 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x00, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x00, 0x69, 0x74, 0x65, 0x6d, 0x2d, 0x3e, 0x6d, + 0x65, 0x6e, 0x75, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x6d, 0x65, + 0x6e, 0x75, 0x69, 0x74, 0x65, 0x6d, 0x00, 0x54, 0x6f, 0x6f, 0x20, 0x6d, + 0x61, 0x6e, 0x79, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x0a, 0x00, 0x5f, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x5f, + 0x00, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x6c, 0x6f, 0x6f, 0x70, 0x00, 0x54, + 0x6f, 0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x0a, + 0x00, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, + 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x6d, 0x65, 0x6e, + 0x75, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x00, 0x54, 0x6f, 0x6f, 0x20, + 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x0a, 0x00, 0x4d, 0x61, + 0x6b, 0x65, 0x20, 0x61, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x68, 0x69, 0x74, 0x20, 0x45, + 0x4e, 0x54, 0x45, 0x52, 0x00, 0x4d, 0x65, 0x6e, 0x75, 0x20, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x3a, 0x0a, 0x00, 0x69, 0x74, 0x65, 0x6d, 0x2d, 0x3e, + 0x6d, 0x65, 0x6e, 0x75, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x20, 0x21, 0x3d, + 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x20, 0x5b, 0x25, 0x64, 0x5d, 0x20, + 0x69, 0x74, 0x65, 0x6d, 0x3d, 0x27, 0x25, 0x73, 0x27, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x3d, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x3a, 0x0a, 0x00, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, + 0x00, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x43, 0x68, 0x6f, 0x69, + 0x63, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x3a, + 0x0a, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x69, 0x64, 0x78, 0x20, 0x3c, 0x20, + 0x6d, 0x65, 0x6e, 0x75, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x00, 0x20, + 0x46, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x27, + 0x25, 0x73, 0x27, 0x3a, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x3a, + 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x3a, 0x20, + 0x25, 0x64, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x0a, 0x00, + 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x6e, 0x75, + 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x3a, 0x20, 0x25, 0x64, 0x0a, + 0x00, 0x4d, 0x65, 0x6e, 0x75, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x3a, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x4e, 0x6f, 0x20, + 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x0a, 0x00, 0x53, 0x63, 0x72, 0x65, + 0x65, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x25, 0x75, 0x20, 0x78, 0x20, 0x25, + 0x75, 0x0a, 0x00, 0x52, 0x61, 0x6d, 0x20, 0x70, 0x74, 0x72, 0x20, 0x25, + 0x46, 0x70, 0x0a, 0x00, 0x72, 0x75, 0x6e, 0x5f, 0x6d, 0x65, 0x6e, 0x75, + 0x00, 0x74, 0x65, 0x6d, 0x70, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, + 0x4c, 0x00, 0x57, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x68, 0x6f, 0x6f, 0x73, + 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, + 0x20, 0x25, 0x75, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x20, + 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x00, 0x72, 0x75, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x00, 0x00, 0x25, 0x68, 0x73, 0x2c, 0x20, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x25, 0x68, 0x73, 0x2c, - 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x25, 0x68, 0x73, 0x2c, 0x20, 0x6c, - 0x69, 0x6e, 0x65, 0x20, 0x25, 0x64, 0x2e, 0x0a, 0x00, 0x41, 0x73, 0x73, - 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x00, 0x3a, 0x20, 0x00, 0x21, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x52, - 0x45, 0x54, 0x55, 0x52, 0x4e, 0x20, 0x25, 0x33, 0x64, 0x00, 0x43, 0x4f, - 0x4d, 0x53, 0x50, 0x45, 0x43, 0x00, 0x43, 0x4d, 0x44, 0x2e, 0x45, 0x58, - 0x45, 0x00, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x2e, 0x43, 0x4f, - 0x4d, 0x00, 0x43, 0x4d, 0x44, 0x00, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, - 0x44, 0x00, 0x4e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x61, - 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, - 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x00, - 0x3a, 0x20, 0x00, 0x00, 0x41, 0x42, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, - 0x20, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x00, 0x00, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x00, - 0x50, 0x41, 0x54, 0x48, 0x00, 0x00, 0x2e, 0x5c, 0x00, 0x2e, 0x62, 0x61, - 0x74, 0x00, 0x43, 0x4d, 0x44, 0x00, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, - 0x44, 0x00, 0x43, 0x4f, 0x4d, 0x53, 0x50, 0x45, 0x43, 0x00, 0x2e, 0x63, - 0x6f, 0x6d, 0x00, 0x2e, 0x65, 0x78, 0x65, 0x00, 0x00, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x0a, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x38, 0x38, 0x38, - 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0c, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x48, 0x48, 0x48, 0x48, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x72, 0x75, 0x6e, 0x5f, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x00, 0x00, 0x25, 0x68, 0x73, 0x2c, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x25, 0x68, + 0x73, 0x2c, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x25, 0x68, 0x73, 0x2c, + 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x25, 0x64, 0x2e, 0x0a, 0x00, 0x41, + 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x00, 0x3a, 0x20, 0x00, 0x21, 0x42, 0x52, 0x45, 0x41, + 0x4b, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x20, 0x25, 0x33, 0x64, 0x00, + 0x43, 0x4f, 0x4d, 0x53, 0x50, 0x45, 0x43, 0x00, 0x43, 0x4d, 0x44, 0x2e, + 0x45, 0x58, 0x45, 0x00, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x2e, + 0x43, 0x4f, 0x4d, 0x00, 0x43, 0x4d, 0x44, 0x00, 0x43, 0x4f, 0x4d, 0x4d, + 0x41, 0x4e, 0x44, 0x00, 0x4e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, + 0x67, 0x68, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x6f, + 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x66, 0x69, + 0x6c, 0x65, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x00, 0x3a, 0x20, 0x00, 0x00, 0x41, 0x42, 0x4e, 0x4f, 0x52, 0x4d, + 0x41, 0x4c, 0x20, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x00, 0x00, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, + 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, + 0x72, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, + 0x64, 0x00, 0x50, 0x41, 0x54, 0x48, 0x00, 0x00, 0x2e, 0x5c, 0x00, 0x2e, + 0x62, 0x61, 0x74, 0x00, 0x43, 0x4d, 0x44, 0x00, 0x43, 0x4f, 0x4d, 0x4d, + 0x41, 0x4e, 0x44, 0x00, 0x43, 0x4f, 0x4d, 0x53, 0x50, 0x45, 0x43, 0x00, + 0x2e, 0x63, 0x6f, 0x6d, 0x00, 0x2e, 0x65, 0x78, 0x65, 0x00, 0x01, 0x00, + 0x80, 0x28, 0x40, 0x20, 0x00, 0x00, 0x60, 0x20, 0x60, 0x28, 0xc0, 0x14, + 0x70, 0x18, 0x70, 0x10, 0x00, 0x00, 0x48, 0x20, 0x48, 0x18, 0x48, 0x10, + 0x80, 0x28, 0x80, 0x28, 0x80, 0x28, 0x80, 0x28, 0x40, 0x20, 0x40, 0x20, + 0x60, 0x20, 0x60, 0x20, 0x60, 0x20, 0x60, 0x20, 0x60, 0x28, 0x60, 0x28, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0a, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x98, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x0c, 0x0c, 0x0c, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x88, 0x88, 0x88, 0x0c, 0x0c, 0x0c, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2031,18 +2805,21 @@ static const unsigned char bin_dsxmenu_exe_pc[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, - 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2060,37 +2837,44 @@ static const unsigned char bin_dsxmenu_exe_pc[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x14, 0x00, - 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb0, 0x07, 0x00, 0x09, 0x01, 0x01, 0x0b, 0x06, - 0x04, 0x05, 0x05, 0x05, 0x02, 0x03, 0xff, 0x0e, 0x07, 0x24, 0x06, 0x08, - 0x01, 0xff, 0x00, 0x00, 0x19, 0x40, 0x19, 0x40, 0xd7, 0x40, 0xd7, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x20, 0x14, 0x00, 0x01, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x08, 0x75, 0x07, 0x00, 0x09, 0x01, 0x01, 0x0b, 0x06, + 0x04, 0x05, 0x05, 0x05, 0x02, 0x03, 0xff, 0x0e, 0x07, 0x24, 0x06, 0x08, + 0x01, 0xff, 0x00, 0x00, 0x68, 0x53, 0x68, 0x53, 0xcd, 0x54, 0x00, 0x00, + 0xcd, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x54, 0x60, 0x54, 0x00, 0x20, 0x65, 0x21, - 0x00, 0x00, 0x00, 0x01, 0xca, 0x2e, 0x00, 0x00, 0x00, 0x20, 0xd7, 0x46, - 0x00, 0x00, 0x00, 0x20, 0xf4, 0x40, 0x00, 0x00, 0x00, 0x20, 0xa0, 0x4a, - 0x00, 0x00, 0x00, 0x20, 0x42, 0x22, 0x00, 0x00, 0x00, 0x01, 0xfb, 0x2e, - 0x00, 0x00, 0x00, 0x14, 0x6d, 0x3d, 0x00, 0x00, 0x00, 0x1f, 0x7e, 0x47, - 0x00, 0x00 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x6c, + 0x00, 0x00, 0x19, 0x6c, 0x00, 0x00, 0x00, 0x38, 0x48, 0x14, 0x00, 0x00, + 0x00, 0x20, 0x8a, 0x26, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x39, 0x00, 0x00, + 0x00, 0x20, 0x5a, 0x58, 0x00, 0x00, 0x00, 0x20, 0xf6, 0x56, 0x00, 0x00, + 0x00, 0x20, 0xa4, 0x5e, 0x00, 0x00, 0x00, 0x20, 0xe8, 0x27, 0x00, 0x00, + 0x00, 0x01, 0x69, 0x39, 0x00, 0x00, 0x00, 0x14, 0x9c, 0x4c, 0x00, 0x00, + 0x00, 0x1f, 0x5b, 0x59, 0x00, 0x00 }; struct BuiltinFileBlob bfb_DSXMENU_EXE_PC = { - /*recommended file name*/ "DSXMENU.EXE", + /*recommended file name*/ "DSXMENU.EXE", /*data*/ bin_dsxmenu_exe_pc, /*length*/ sizeof(bin_dsxmenu_exe_pc) }; diff --git a/src/builtin/dsxmenu_exe_pc98.cpp b/src/builtin/dsxmenu_exe_pc98.cpp index 64888f4f572..5b078495981 100644 --- a/src/builtin/dsxmenu_exe_pc98.cpp +++ b/src/builtin/dsxmenu_exe_pc98.cpp @@ -2,1871 +2,2608 @@ #include "dos_inc.h" static const unsigned char bin_dsxmenu_exe_pc98[] = { - 0x4d, 0x5a, 0x4a, 0x01, 0x2d, 0x00, 0x04, 0x00, 0x03, 0x00, 0xb8, 0x00, - 0xff, 0xff, 0xc9, 0x05, 0x00, 0x08, 0x00, 0x00, 0xb2, 0x16, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x16, 0x00, 0x00, - 0x79, 0x17, 0x00, 0x00, 0x5e, 0x18, 0x00, 0x00, 0x41, 0x19, 0x00, 0x00, - 0xcc, 0xeb, 0xfd, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0xa1, 0x3e, 0x06, 0x3d, 0x14, 0x00, 0x7c, - 0x04, 0x31, 0xc0, 0x5a, 0xc3, 0x89, 0xc2, 0xd1, 0xe2, 0x40, 0xd1, 0xe2, - 0xa3, 0x3e, 0x06, 0xb8, 0x42, 0x09, 0x01, 0xd0, 0x5a, 0xc3, 0x53, 0x52, - 0x83, 0x3e, 0x42, 0x06, 0x64, 0x7c, 0x06, 0xb8, 0xff, 0xff, 0x5a, 0x5b, - 0xc3, 0xe8, 0xcb, 0x0c, 0x8b, 0x16, 0x42, 0x06, 0x89, 0xd3, 0x42, 0xd1, - 0xe3, 0x89, 0x16, 0x42, 0x06, 0x89, 0x87, 0x92, 0x09, 0x31, 0xc0, 0x5a, - 0x5b, 0xc3, 0x53, 0x83, 0x3e, 0x44, 0x06, 0x64, 0x7c, 0x05, 0xb8, 0xff, - 0xff, 0x5b, 0xc3, 0x8b, 0x1e, 0x44, 0x06, 0x88, 0x97, 0x5a, 0x0a, 0xe8, - 0x9d, 0x0c, 0x8b, 0x16, 0x44, 0x06, 0x89, 0xd3, 0x42, 0xd1, 0xe3, 0x89, - 0x16, 0x44, 0x06, 0x89, 0x87, 0x7a, 0x08, 0x31, 0xc0, 0x5b, 0xc3, 0x83, - 0x3e, 0x46, 0x06, 0x00, 0x75, 0x09, 0xb8, 0x01, 0x10, 0xe8, 0xb6, 0x0c, - 0xa3, 0x46, 0x06, 0x83, 0x3e, 0x46, 0x06, 0x00, 0x74, 0x03, 0x31, 0xc0, - 0xc3, 0xb8, 0xff, 0xff, 0xc3, 0xa1, 0x46, 0x06, 0x85, 0xc0, 0x74, 0x08, - 0xe8, 0x54, 0x0d, 0x31, 0xc0, 0xa3, 0x46, 0x06, 0xc3, 0xb8, 0x22, 0x00, - 0x50, 0xb8, 0x6e, 0x06, 0x50, 0xe8, 0x06, 0x0e, 0x83, 0xc4, 0x04, 0xb8, - 0x45, 0x00, 0x50, 0xb8, 0x6e, 0x06, 0x50, 0xe8, 0xf8, 0x0d, 0x83, 0xc4, - 0x04, 0xb8, 0x6c, 0x00, 0x50, 0xb8, 0x6e, 0x06, 0x50, 0xe8, 0xea, 0x0d, - 0x83, 0xc4, 0x04, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, - 0x50, 0x52, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xb9, 0x01, 0x00, 0xba, 0x02, - 0x00, 0x3b, 0x4e, 0xfc, 0x7c, 0x03, 0xe9, 0xb7, 0x00, 0x89, 0xd3, 0x03, - 0x5e, 0xfa, 0x8b, 0x1f, 0x41, 0x8a, 0x07, 0x42, 0x42, 0x3c, 0x2d, 0x74, - 0x04, 0x3c, 0x2f, 0x75, 0x58, 0x43, 0x8a, 0x07, 0x3c, 0x2d, 0x74, 0xf9, - 0x3c, 0x2f, 0x74, 0xf5, 0xbf, 0x91, 0x00, 0x89, 0xde, 0xac, 0x8a, 0x25, - 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, - 0xc0, 0x74, 0x2e, 0xbf, 0x93, 0x00, 0x89, 0xde, 0xac, 0x8a, 0x25, 0x2a, - 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, 0xc0, - 0x74, 0x17, 0xbf, 0x98, 0x00, 0x89, 0xde, 0xac, 0x8a, 0x25, 0x2a, 0xc4, - 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, 0xc0, 0x75, - 0x0a, 0xe8, 0x51, 0xff, 0xb8, 0xff, 0xff, 0xeb, 0x67, 0xeb, 0x33, 0xbf, - 0x9a, 0x00, 0x89, 0xde, 0xac, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, - 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, 0xc0, 0x74, 0x14, 0x53, 0xb8, - 0x9c, 0x00, 0x50, 0xb8, 0x6e, 0x06, 0x50, 0xe8, 0x38, 0x0d, 0xb8, 0xff, - 0xff, 0x83, 0xc4, 0x06, 0xeb, 0x3a, 0xc6, 0x06, 0x33, 0x06, 0x01, 0xe9, - 0x57, 0xff, 0x83, 0x7e, 0xfe, 0x00, 0x74, 0x06, 0x53, 0xb8, 0xb1, 0x00, - 0xeb, 0xdc, 0xff, 0x46, 0xfe, 0x89, 0x1e, 0x36, 0x06, 0xe9, 0x41, 0xff, - 0x83, 0x3e, 0x36, 0x06, 0x00, 0x75, 0x13, 0xb8, 0xca, 0x00, 0x50, 0xb8, - 0x6e, 0x06, 0x50, 0xe8, 0x00, 0x0d, 0xb8, 0xff, 0xff, 0x83, 0xc4, 0x04, - 0xeb, 0x02, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, - 0x53, 0x89, 0xc3, 0x85, 0xc0, 0x74, 0x0d, 0x8b, 0x07, 0x85, 0xc0, 0x74, - 0x07, 0xe8, 0x1b, 0x0c, 0xc7, 0x07, 0x00, 0x00, 0x5b, 0xc3, 0x53, 0x89, - 0xc3, 0xe8, 0xe4, 0xff, 0x85, 0xd2, 0x74, 0x07, 0x89, 0xd0, 0xe8, 0x12, - 0x0b, 0x89, 0x07, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x57, 0x89, 0xc2, 0x89, - 0xc7, 0x89, 0xd3, 0x8c, 0xd8, 0x8e, 0xc0, 0x83, 0xc9, 0xff, 0x33, 0xc0, - 0xf2, 0xae, 0xf7, 0xd1, 0x49, 0x01, 0xcb, 0x4b, 0x39, 0xd3, 0x72, 0x0f, - 0x8a, 0x07, 0x3c, 0x0d, 0x74, 0x04, 0x3c, 0x0a, 0x75, 0x05, 0xc6, 0x07, - 0x00, 0xeb, 0xec, 0x5f, 0xe9, 0xd4, 0x05, 0x53, 0x51, 0x52, 0xbb, 0x42, - 0x09, 0x31, 0xd2, 0x43, 0x43, 0x3b, 0x16, 0x3e, 0x06, 0x73, 0x1a, 0x89, - 0xd1, 0xd1, 0xe1, 0x89, 0xd8, 0xd1, 0xe1, 0xe8, 0x8a, 0xff, 0x81, 0xc1, - 0x42, 0x09, 0x83, 0xc3, 0x04, 0x89, 0xc8, 0x42, 0xe8, 0x7d, 0xff, 0xeb, - 0xe0, 0xbb, 0x92, 0x09, 0x31, 0xc0, 0x31, 0xd2, 0xa3, 0x3e, 0x06, 0x3b, - 0x16, 0x42, 0x06, 0x73, 0x0a, 0x89, 0xd8, 0xe8, 0x66, 0xff, 0x42, 0x43, - 0x43, 0xeb, 0xf0, 0xba, 0x7a, 0x08, 0x31, 0xc0, 0x31, 0xdb, 0xa3, 0x42, - 0x06, 0x3b, 0x1e, 0x44, 0x06, 0x73, 0x0f, 0x89, 0xd0, 0xe8, 0x4c, 0xff, - 0x43, 0x42, 0x42, 0xc6, 0x87, 0x59, 0x0a, 0x00, 0xeb, 0xeb, 0x31, 0xc0, - 0xa3, 0x44, 0x06, 0xb8, 0x34, 0x06, 0xe8, 0x37, 0xff, 0xe9, 0x63, 0x05, - 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x1a, 0x31, - 0xc0, 0x89, 0x46, 0xea, 0x89, 0x46, 0xe8, 0x89, 0x46, 0xfc, 0x83, 0x3e, - 0x36, 0x06, 0x00, 0x75, 0x14, 0xb8, 0xe2, 0x00, 0x50, 0xb8, 0x6e, 0x06, - 0x50, 0xe8, 0xfa, 0x0b, 0xb8, 0x01, 0x00, 0x83, 0xc4, 0x04, 0xe9, 0x2d, - 0x05, 0xe8, 0xaf, 0xfd, 0x85, 0xc0, 0x74, 0x05, 0xb8, 0xf6, 0x00, 0xeb, - 0xe3, 0xba, 0x09, 0x01, 0xa1, 0x36, 0x06, 0xe8, 0xde, 0x0d, 0x89, 0x46, - 0xf2, 0x85, 0xc0, 0x75, 0x18, 0xff, 0x36, 0x36, 0x06, 0xb8, 0x0b, 0x01, - 0x50, 0xb8, 0x6e, 0x06, 0x50, 0xe8, 0xc6, 0x0b, 0xb8, 0x01, 0x00, 0x83, - 0xc4, 0x06, 0xe9, 0xf9, 0x04, 0xe9, 0xe8, 0x01, 0x3c, 0x23, 0x74, 0x6a, - 0x84, 0xc0, 0x74, 0x66, 0x3c, 0x5b, 0x75, 0x65, 0xff, 0x46, 0xfe, 0xb2, - 0x5d, 0x8b, 0x76, 0xfe, 0x8a, 0x04, 0x3a, 0xc2, 0x74, 0x12, 0x84, 0xc0, - 0x74, 0x0c, 0x46, 0x8a, 0x04, 0x3a, 0xc2, 0x74, 0x07, 0x46, 0x84, 0xc0, - 0x75, 0xea, 0x2b, 0xf6, 0x85, 0xf6, 0x74, 0x03, 0xc6, 0x04, 0x00, 0x8b, - 0x56, 0xfe, 0x8d, 0x46, 0xea, 0xe8, 0xa6, 0xfe, 0x83, 0x7e, 0xea, 0x00, - 0x75, 0x0f, 0xb9, 0xf8, 0x00, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, 0xb8, - 0x39, 0x01, 0xe8, 0x0d, 0x0e, 0xbf, 0x51, 0x01, 0x8b, 0x76, 0xea, 0xac, - 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, - 0xe4, 0x85, 0xc0, 0x75, 0x0b, 0xc7, 0x46, 0xfc, 0x01, 0x00, 0xe9, 0x77, - 0x01, 0xe9, 0x86, 0x00, 0xbf, 0x56, 0x01, 0x8b, 0x76, 0xea, 0xac, 0x8a, - 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, - 0x85, 0xc0, 0x75, 0x07, 0xc7, 0x46, 0xfc, 0x02, 0x00, 0xeb, 0xdb, 0x8b, - 0x5e, 0xea, 0xc7, 0x46, 0xfc, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x74, 0x4e, - 0xc7, 0x46, 0xfa, 0x00, 0x00, 0xc7, 0x46, 0xf6, 0x42, 0x09, 0x8b, 0x46, - 0xfa, 0x3b, 0x06, 0x3e, 0x06, 0x73, 0x3b, 0x8b, 0x76, 0xf6, 0x83, 0x7c, - 0x02, 0x00, 0x75, 0x0f, 0xb9, 0x09, 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, - 0x01, 0xb8, 0x5d, 0x01, 0xe8, 0x93, 0x0d, 0x8b, 0x7e, 0xea, 0x8b, 0x74, - 0x02, 0xac, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, - 0xf4, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x0e, 0x8b, 0x46, 0xfa, 0xc7, 0x46, - 0xfc, 0x03, 0x00, 0x89, 0x46, 0xe8, 0xe9, 0xf7, 0x00, 0x83, 0x46, 0xf6, - 0x04, 0xff, 0x46, 0xfa, 0xeb, 0xb0, 0x8b, 0x46, 0xfc, 0x3d, 0x01, 0x00, - 0x75, 0x4f, 0xb2, 0x3d, 0x89, 0xde, 0x8a, 0x04, 0x3a, 0xc2, 0x74, 0x12, - 0x84, 0xc0, 0x74, 0x0c, 0x46, 0x8a, 0x04, 0x3a, 0xc2, 0x74, 0x07, 0x46, - 0x84, 0xc0, 0x75, 0xea, 0x2b, 0xf6, 0x85, 0xf6, 0x74, 0x64, 0xbf, 0x7a, - 0x01, 0x8d, 0x5c, 0x01, 0xc6, 0x04, 0x00, 0x8b, 0x76, 0xfe, 0xac, 0x8a, - 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, - 0x85, 0xc0, 0x75, 0x48, 0x89, 0xda, 0x31, 0xf6, 0x8a, 0x07, 0x84, 0xc0, - 0x74, 0x0a, 0x3c, 0x2c, 0x74, 0x06, 0x43, 0xeb, 0xf3, 0xe9, 0x21, 0x01, - 0x80, 0x3f, 0x2c, 0x75, 0x06, 0x8d, 0x77, 0x01, 0xc6, 0x07, 0x00, 0x85, - 0xf6, 0x74, 0x23, 0x80, 0x3c, 0x00, 0x74, 0x1e, 0xe8, 0x9d, 0xfb, 0x89, - 0xc3, 0x85, 0xc0, 0x75, 0x06, 0xb8, 0x83, 0x01, 0xe9, 0x41, 0x01, 0x89, - 0xf0, 0xe8, 0x87, 0x08, 0x89, 0x07, 0x89, 0xd0, 0xe8, 0x80, 0x08, 0x89, - 0x47, 0x02, 0xeb, 0x60, 0xbf, 0x98, 0x01, 0x8b, 0x76, 0xfe, 0xac, 0x8a, - 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, - 0x85, 0xc0, 0x75, 0x11, 0x89, 0xda, 0x31, 0xf6, 0x8a, 0x07, 0x84, 0xc0, - 0x74, 0x0a, 0x3c, 0x2c, 0x74, 0x06, 0x43, 0xeb, 0xf3, 0xe9, 0x71, 0x00, - 0x80, 0x3f, 0x2c, 0x75, 0x06, 0x8d, 0x77, 0x01, 0xc6, 0x07, 0x00, 0x31, - 0xc0, 0xa3, 0x3c, 0x06, 0x85, 0xf6, 0x74, 0x0d, 0x80, 0x3c, 0x00, 0x74, - 0x08, 0x89, 0xf0, 0xe8, 0x07, 0x0e, 0xa3, 0x3c, 0x06, 0x83, 0x3e, 0x3c, - 0x06, 0x00, 0x7f, 0x06, 0xc7, 0x06, 0x3c, 0x06, 0x05, 0x00, 0xb8, 0x3a, - 0x06, 0xe8, 0xfa, 0xfc, 0x8b, 0x5e, 0xf2, 0x8a, 0x47, 0x06, 0xa8, 0x10, - 0x75, 0x52, 0xa8, 0x20, 0x75, 0x4e, 0xba, 0x00, 0x10, 0xa1, 0x46, 0x06, - 0xe8, 0x2b, 0x0e, 0x85, 0xc0, 0x74, 0x41, 0xa1, 0x46, 0x06, 0xe8, 0xec, - 0xfc, 0x8b, 0x1e, 0x46, 0x06, 0x89, 0x5e, 0xfe, 0x8b, 0x5e, 0xfe, 0x8a, - 0x07, 0x3c, 0x20, 0x74, 0x07, 0x3c, 0x09, 0x74, 0x03, 0xe9, 0xe0, 0xfd, - 0xff, 0x46, 0xfe, 0xeb, 0xeb, 0xbf, 0xa4, 0x01, 0x8b, 0x76, 0xfe, 0xac, - 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, - 0xe4, 0x85, 0xc0, 0x75, 0x0a, 0xb8, 0x34, 0x06, 0x89, 0xda, 0xeb, 0xa1, - 0xe9, 0x7c, 0x00, 0xbf, 0xb0, 0x01, 0x8b, 0x76, 0xfe, 0xac, 0x8a, 0x25, - 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, - 0xc0, 0x75, 0x89, 0x89, 0xd8, 0xe8, 0x75, 0x0d, 0x85, 0xc0, 0x7e, 0x05, - 0xb8, 0x01, 0x00, 0xeb, 0x02, 0x31, 0xc0, 0xa2, 0x32, 0x06, 0xe9, 0x73, - 0xff, 0x3d, 0x02, 0x00, 0x75, 0x11, 0x89, 0xd8, 0xe8, 0xa7, 0xfa, 0x85, - 0xc0, 0x75, 0x03, 0xe9, 0x62, 0xff, 0xb8, 0xb9, 0x01, 0xeb, 0x2d, 0x3d, - 0x03, 0x00, 0x75, 0xf3, 0x8b, 0x46, 0xe8, 0x3b, 0x06, 0x3e, 0x06, 0x72, - 0x0f, 0xb9, 0x59, 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, 0xb8, 0xd3, - 0x01, 0xe8, 0xb6, 0x0b, 0x8b, 0x56, 0xe8, 0x8b, 0x46, 0xfe, 0xe8, 0x9d, - 0xfa, 0x85, 0xc0, 0x74, 0xce, 0xb8, 0xf2, 0x01, 0x50, 0xb8, 0x6e, 0x06, - 0x50, 0xe8, 0xfa, 0x08, 0x83, 0xc4, 0x04, 0x8d, 0x46, 0xea, 0xe8, 0x03, - 0xfc, 0x8b, 0x46, 0xf2, 0xe8, 0x59, 0x0e, 0xe8, 0xc7, 0xfa, 0x83, 0x3e, - 0x34, 0x06, 0x00, 0x75, 0x09, 0xb8, 0x0c, 0x02, 0xe8, 0x24, 0x07, 0xa3, - 0x34, 0x06, 0x8b, 0x1e, 0x34, 0x06, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x08, - 0xc7, 0x06, 0x38, 0x06, 0x02, 0x00, 0xeb, 0x05, 0x30, 0xe4, 0xa3, 0x38, - 0x06, 0x31, 0xc0, 0xc7, 0x46, 0xf8, 0x42, 0x09, 0xa3, 0x40, 0x06, 0x89, - 0x46, 0xf0, 0x8b, 0x46, 0xf0, 0x3b, 0x06, 0x3e, 0x06, 0x73, 0x42, 0x8b, - 0x76, 0xf8, 0x83, 0x7c, 0x02, 0x00, 0x75, 0x0f, 0xb9, 0x76, 0x01, 0xbb, - 0x25, 0x01, 0xba, 0x2f, 0x01, 0xb8, 0x5d, 0x01, 0xe8, 0x37, 0x0b, 0x8b, - 0x3e, 0x3a, 0x06, 0x8b, 0x74, 0x02, 0xac, 0x8a, 0x25, 0x2a, 0xc4, 0x75, - 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x08, - 0x8b, 0x46, 0xf0, 0xa3, 0x40, 0x06, 0xeb, 0x09, 0x83, 0x46, 0xf8, 0x04, - 0xff, 0x46, 0xf0, 0xeb, 0xb5, 0x80, 0x3e, 0x33, 0x06, 0x00, 0x74, 0x68, - 0xb8, 0x2b, 0x02, 0x50, 0xb8, 0x6e, 0x06, 0xc7, 0x46, 0xf4, 0x00, 0x00, - 0x50, 0xbf, 0x42, 0x09, 0xe8, 0x4f, 0x08, 0x83, 0xc4, 0x04, 0x8b, 0x46, - 0xf4, 0x3b, 0x06, 0x3e, 0x06, 0x73, 0x4c, 0x89, 0xfe, 0x83, 0x7d, 0x02, - 0x00, 0x75, 0x0f, 0xb9, 0x85, 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, - 0xb8, 0x5d, 0x01, 0xe8, 0xd0, 0x0a, 0x83, 0x3c, 0x00, 0x75, 0x0f, 0xb9, - 0x86, 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, 0xb8, 0x38, 0x02, 0xe8, - 0xbc, 0x0a, 0xff, 0x34, 0xff, 0x74, 0x02, 0xff, 0x76, 0xf4, 0xb8, 0x50, - 0x02, 0x50, 0xb8, 0x6e, 0x06, 0x83, 0xc7, 0x04, 0x50, 0xff, 0x46, 0xf4, - 0xe8, 0xff, 0x07, 0x83, 0xc4, 0x0a, 0xeb, 0xae, 0xe9, 0x24, 0x01, 0xb8, - 0x6b, 0x02, 0x50, 0xb8, 0x6e, 0x06, 0x31, 0xf6, 0x50, 0x31, 0xff, 0xe8, - 0xe8, 0x07, 0x83, 0xc4, 0x04, 0x3b, 0x36, 0x42, 0x06, 0x73, 0x30, 0x8b, - 0x85, 0x92, 0x09, 0x89, 0x46, 0xec, 0x85, 0xc0, 0x75, 0x0f, 0xb9, 0x92, - 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, 0xb8, 0x7d, 0x02, 0xe8, 0x69, - 0x0a, 0xff, 0x76, 0xec, 0xb8, 0x87, 0x02, 0x50, 0xb8, 0x6e, 0x06, 0x47, - 0x47, 0x50, 0x46, 0xe8, 0xb4, 0x07, 0x83, 0xc4, 0x06, 0xeb, 0xca, 0xb8, - 0x8e, 0x02, 0x50, 0xb8, 0x6e, 0x06, 0x31, 0xff, 0x50, 0x89, 0x7e, 0xee, - 0xe8, 0x9f, 0x07, 0x83, 0xc4, 0x04, 0x3b, 0x3e, 0x44, 0x06, 0x72, 0x03, - 0xe9, 0x74, 0x00, 0x8b, 0x5e, 0xee, 0x8b, 0x87, 0x7a, 0x08, 0x89, 0x46, - 0xe6, 0x8a, 0x85, 0x5a, 0x0a, 0x30, 0xe4, 0x89, 0xc6, 0x83, 0x7e, 0xe6, - 0x00, 0x75, 0x0f, 0xb9, 0x9f, 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, - 0xb8, 0x7d, 0x02, 0xe8, 0x10, 0x0a, 0x3b, 0x36, 0x3e, 0x06, 0x72, 0x0f, - 0xb9, 0xa0, 0x01, 0xbb, 0x25, 0x01, 0xba, 0x2f, 0x01, 0xb8, 0xa0, 0x02, - 0xe8, 0xfb, 0x09, 0xd1, 0xe6, 0xd1, 0xe6, 0x81, 0xc6, 0x42, 0x09, 0x83, - 0x7c, 0x02, 0x00, 0x75, 0x0f, 0xb9, 0xa5, 0x01, 0xbb, 0x25, 0x01, 0xba, - 0x2f, 0x01, 0xb8, 0x5d, 0x01, 0xe8, 0xde, 0x09, 0xff, 0x76, 0xe6, 0xff, - 0x74, 0x02, 0xb8, 0xb5, 0x02, 0x50, 0xb8, 0x6e, 0x06, 0x83, 0x46, 0xee, - 0x02, 0x50, 0x47, 0xe8, 0x24, 0x07, 0x83, 0xc4, 0x08, 0xeb, 0x83, 0xa1, - 0x3a, 0x06, 0x85, 0xc0, 0x74, 0x0f, 0x50, 0xb8, 0xcd, 0x02, 0x50, 0xb8, - 0x6e, 0x06, 0x50, 0xe8, 0x0c, 0x07, 0x83, 0xc4, 0x06, 0xff, 0x36, 0x3c, - 0x06, 0xb8, 0xe1, 0x02, 0x50, 0xb8, 0x6e, 0x06, 0x50, 0xe8, 0xfa, 0x06, - 0x83, 0xc4, 0x06, 0xff, 0x36, 0x40, 0x06, 0xb8, 0xfe, 0x02, 0x50, 0xb8, - 0x6e, 0x06, 0x50, 0xe8, 0xe8, 0x06, 0x83, 0xc4, 0x06, 0xff, 0x36, 0x34, - 0x06, 0xb8, 0x17, 0x03, 0x50, 0xb8, 0x6e, 0x06, 0x50, 0xe8, 0xd6, 0x06, - 0x83, 0xc4, 0x06, 0x83, 0x3e, 0x3e, 0x06, 0x00, 0x75, 0x06, 0xb8, 0x2b, - 0x03, 0xe9, 0xc4, 0xfa, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, - 0x59, 0x5b, 0xc3, 0x53, 0x89, 0xc3, 0xb8, 0x40, 0x00, 0x8e, 0xc0, 0x26, - 0x8b, 0x07, 0x5b, 0xc3, 0xb8, 0x49, 0x00, 0x53, 0x89, 0xc3, 0xb8, 0x40, - 0x00, 0x8e, 0xc0, 0x26, 0x8a, 0x07, 0x5b, 0xc3, 0x51, 0x56, 0x57, 0x55, - 0x89, 0xe5, 0x50, 0x89, 0xd6, 0x89, 0xd9, 0xd1, 0xe0, 0x31, 0xd2, 0x3b, - 0x16, 0xc0, 0x0a, 0x73, 0x30, 0x80, 0x3c, 0x00, 0x74, 0x2b, 0x8a, 0x1c, - 0xc6, 0x46, 0xff, 0x00, 0x88, 0x5e, 0xfe, 0xc4, 0x1e, 0x48, 0x06, 0x01, - 0xc3, 0x8b, 0x7e, 0xfe, 0x26, 0x89, 0x3f, 0x42, 0x8b, 0x1e, 0x48, 0x06, - 0x46, 0x80, 0xc7, 0x20, 0x8e, 0x06, 0x4a, 0x06, 0x01, 0xc3, 0x40, 0x40, - 0x26, 0x89, 0x0f, 0xeb, 0xca, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, - 0x53, 0x52, 0x56, 0x89, 0xc3, 0x3b, 0x06, 0x3e, 0x06, 0x73, 0x26, 0x89, - 0xc6, 0xa1, 0x38, 0x06, 0x01, 0xd8, 0xf7, 0x26, 0xc0, 0x0a, 0xd1, 0xe6, - 0xd1, 0xe6, 0x81, 0xc6, 0x42, 0x09, 0x3b, 0x1e, 0x40, 0x06, 0x75, 0x05, - 0xbb, 0xe5, 0x00, 0xeb, 0x03, 0xbb, 0xe1, 0x00, 0x8b, 0x14, 0xe8, 0x83, - 0xff, 0x5e, 0x5a, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x83, 0xec, 0x18, 0xe8, 0xd0, 0xf7, 0xc6, 0x46, 0xfe, 0x00, 0x85, - 0xc0, 0x74, 0x06, 0xb8, 0x01, 0x00, 0xe9, 0x3d, 0xff, 0x9c, 0x58, 0xba, - 0x77, 0x00, 0x89, 0xc3, 0xb0, 0x34, 0xee, 0xba, 0x71, 0x00, 0x30, 0xc0, - 0xee, 0xee, 0x30, 0xe4, 0xc7, 0x06, 0x6e, 0x07, 0x01, 0x00, 0xa3, 0x6c, - 0x07, 0xf6, 0xc7, 0x02, 0x74, 0x01, 0xfb, 0xa1, 0x3c, 0x06, 0x99, 0x89, - 0xc3, 0x89, 0xd1, 0xa1, 0x78, 0x07, 0x8b, 0x16, 0x7a, 0x07, 0xe8, 0x5d, - 0x0b, 0x89, 0xc7, 0x89, 0xd6, 0x89, 0x46, 0xf8, 0x89, 0x56, 0xfa, 0x9c, - 0x58, 0xba, 0x77, 0x00, 0x89, 0xc3, 0x30, 0xc0, 0xee, 0xba, 0x71, 0x00, - 0xec, 0xba, 0x71, 0x00, 0x88, 0xc1, 0xec, 0x88, 0xc4, 0x30, 0xc0, 0x89, - 0xc2, 0x88, 0xca, 0xf6, 0xc7, 0x02, 0x74, 0x01, 0xfb, 0x31, 0xc0, 0xc7, - 0x06, 0x4a, 0x06, 0x00, 0xa0, 0xa3, 0x48, 0x06, 0xb8, 0x42, 0x03, 0xc7, - 0x06, 0xc0, 0x0a, 0x50, 0x00, 0x50, 0xc7, 0x06, 0xbe, 0x0a, 0x19, 0x00, - 0xe8, 0x2b, 0x0b, 0x83, 0xc4, 0x02, 0xb8, 0x48, 0x03, 0x50, 0xe8, 0x21, - 0x0b, 0xb8, 0x60, 0x06, 0x83, 0xc4, 0x02, 0x89, 0x56, 0xf4, 0xe8, 0x35, - 0x0b, 0x80, 0x3e, 0x33, 0x06, 0x00, 0x74, 0x46, 0xff, 0x36, 0xbe, 0x0a, - 0xff, 0x36, 0xc0, 0x0a, 0xb8, 0x4e, 0x03, 0x50, 0xb8, 0x6e, 0x06, 0x50, - 0xe8, 0x53, 0x05, 0x83, 0xc4, 0x08, 0xff, 0x36, 0x4a, 0x06, 0xff, 0x36, - 0x48, 0x06, 0xb8, 0x61, 0x03, 0x50, 0xb8, 0x6e, 0x06, 0x50, 0xe8, 0x3d, - 0x05, 0xa1, 0x4a, 0x06, 0x83, 0xc4, 0x08, 0x8b, 0x16, 0x48, 0x06, 0x50, - 0x80, 0xc6, 0x20, 0x52, 0xb8, 0x6e, 0x03, 0x50, 0xb8, 0x6e, 0x06, 0x50, - 0xe8, 0x23, 0x05, 0x83, 0xc4, 0x08, 0xa1, 0x38, 0x06, 0x03, 0x06, 0x3e, - 0x06, 0x40, 0x40, 0x89, 0x46, 0xf2, 0x3b, 0x06, 0xbe, 0x0a, 0x76, 0x06, - 0xa1, 0xbe, 0x0a, 0x89, 0x46, 0xf2, 0x31, 0xc9, 0x3b, 0x4e, 0xf2, 0x73, - 0x59, 0xa1, 0xc0, 0x0a, 0xf7, 0xe1, 0xc7, 0x46, 0xf6, 0x00, 0x00, 0x89, - 0x46, 0xe8, 0xd1, 0xe0, 0x8b, 0x56, 0xf6, 0x3b, 0x16, 0xc0, 0x0a, 0x73, - 0x12, 0xff, 0x46, 0xf6, 0xc4, 0x1e, 0x48, 0x06, 0x01, 0xc3, 0x40, 0x40, - 0x26, 0xc7, 0x07, 0x20, 0x00, 0xeb, 0xe5, 0x8b, 0x56, 0xe8, 0xd1, 0xe2, - 0x31, 0xc0, 0x89, 0x56, 0xea, 0x3b, 0x06, 0xc0, 0x0a, 0x73, 0x1c, 0x8b, - 0x16, 0x48, 0x06, 0x40, 0x89, 0xd3, 0x8e, 0x06, 0x4a, 0x06, 0x80, 0xc7, - 0x20, 0x03, 0x5e, 0xea, 0x83, 0x46, 0xea, 0x02, 0x26, 0xc7, 0x07, 0x00, - 0x00, 0xeb, 0xde, 0x41, 0xeb, 0xa2, 0xc6, 0x46, 0xfc, 0x01, 0x83, 0xfe, - 0xff, 0x75, 0x05, 0x83, 0xff, 0xff, 0x74, 0x42, 0x8b, 0x46, 0xf4, 0xba, - 0x77, 0x00, 0x89, 0x46, 0xec, 0x9c, 0x58, 0x89, 0xc3, 0x30, 0xc0, 0xee, - 0xba, 0x71, 0x00, 0xec, 0xba, 0x71, 0x00, 0x88, 0xc1, 0xec, 0x88, 0xc4, - 0x30, 0xc0, 0x89, 0xc2, 0x88, 0xca, 0xf6, 0xc7, 0x02, 0x74, 0x01, 0xfb, - 0x8b, 0x46, 0xec, 0x89, 0x56, 0xf4, 0x29, 0xd0, 0x31, 0xd2, 0x85, 0xf6, - 0x77, 0x06, 0x75, 0x0d, 0x39, 0xc7, 0x72, 0x09, 0x29, 0xc7, 0x19, 0xd6, - 0xeb, 0x07, 0xe9, 0x2f, 0x01, 0x31, 0xff, 0x31, 0xf6, 0x8b, 0x46, 0xfa, - 0x39, 0xc6, 0x72, 0x07, 0x75, 0x24, 0x3b, 0x7e, 0xf8, 0x73, 0x1f, 0x3b, - 0x06, 0x7a, 0x07, 0x77, 0x0b, 0x75, 0x19, 0x8b, 0x46, 0xf8, 0x3b, 0x06, - 0x78, 0x07, 0x72, 0x10, 0xa1, 0x78, 0x07, 0x29, 0x46, 0xf8, 0xa1, 0x7a, - 0x07, 0x19, 0x46, 0xfa, 0xeb, 0x0a, 0xeb, 0x62, 0x31, 0xc0, 0x89, 0x46, - 0xf8, 0x89, 0x46, 0xfa, 0x8b, 0x46, 0xf8, 0x8b, 0x56, 0xfa, 0x8b, 0x1e, - 0x78, 0x07, 0x8b, 0x0e, 0x7a, 0x07, 0xc7, 0x46, 0xee, 0xa1, 0x00, 0xe8, - 0x23, 0x0a, 0x89, 0x46, 0xf0, 0x83, 0x3e, 0x46, 0x06, 0x00, 0x75, 0x0f, - 0xb9, 0x7f, 0x02, 0xbb, 0x25, 0x01, 0xba, 0x7c, 0x03, 0xb8, 0x85, 0x03, - 0xe8, 0x8f, 0x06, 0x8b, 0x46, 0xf0, 0x40, 0x50, 0xb8, 0x92, 0x03, 0x50, - 0xff, 0x36, 0x46, 0x06, 0xe8, 0x7e, 0x0a, 0xa1, 0x38, 0x06, 0x03, 0x06, - 0x3e, 0x06, 0x40, 0xf7, 0x26, 0xc0, 0x0a, 0x8b, 0x5e, 0xee, 0x8b, 0x0e, - 0x46, 0x06, 0x83, 0xc4, 0x06, 0x89, 0xca, 0xe8, 0x22, 0xfd, 0x85, 0xf6, - 0x75, 0x29, 0x85, 0xff, 0x75, 0x25, 0xa1, 0x38, 0x06, 0x03, 0x06, 0x3e, - 0x06, 0x40, 0xf7, 0x26, 0xc0, 0x0a, 0xbb, 0xe1, 0x00, 0xba, 0xb5, 0x03, - 0xe8, 0x05, 0xfd, 0xa1, 0x40, 0x06, 0x85, 0xc0, 0x7c, 0x0b, 0x3b, 0x06, - 0x3e, 0x06, 0x7d, 0x05, 0xe9, 0xcb, 0x00, 0xeb, 0x6b, 0xe9, 0xca, 0x00, - 0xc6, 0x46, 0xfc, 0x00, 0xe8, 0x4a, 0x0a, 0x85, 0xc0, 0x75, 0x03, 0xe9, - 0xdc, 0xfe, 0xe8, 0x52, 0x0a, 0x3d, 0x1b, 0x00, 0x74, 0xe7, 0x3d, 0x0b, - 0x00, 0x74, 0x03, 0xe9, 0x76, 0x00, 0xa1, 0x40, 0x06, 0x89, 0xc2, 0x4a, - 0x89, 0x16, 0x40, 0x06, 0x85, 0xd2, 0x7d, 0x09, 0x8b, 0x16, 0x3e, 0x06, - 0x4a, 0x89, 0x16, 0x40, 0x06, 0x3b, 0x06, 0x40, 0x06, 0x74, 0x09, 0xe8, - 0xfe, 0xfc, 0xa1, 0x40, 0x06, 0xe8, 0xf8, 0xfc, 0x83, 0xfe, 0xff, 0x75, - 0x05, 0x83, 0xff, 0xff, 0x74, 0xbd, 0xa1, 0x38, 0x06, 0x03, 0x06, 0x3e, - 0x06, 0x40, 0xf7, 0x26, 0xc0, 0x0a, 0xbf, 0xff, 0xff, 0xbb, 0xe1, 0x00, - 0xba, 0xb5, 0x03, 0x89, 0xfe, 0xe8, 0x88, 0xfc, 0x80, 0x7e, 0xfc, 0x00, - 0x74, 0x96, 0x83, 0x3e, 0x38, 0x06, 0x00, 0x76, 0x0c, 0xbb, 0xe1, 0x00, - 0x8b, 0x16, 0x34, 0x06, 0x31, 0xc0, 0xe8, 0x6f, 0xfc, 0x31, 0xd2, 0x3b, - 0x16, 0x3e, 0x06, 0x72, 0x03, 0xe9, 0x74, 0xff, 0x89, 0xd0, 0xe8, 0xab, - 0xfc, 0x42, 0xeb, 0xef, 0x3d, 0x0a, 0x00, 0x75, 0x18, 0xa1, 0x40, 0x06, - 0x89, 0xc2, 0x42, 0x89, 0x16, 0x40, 0x06, 0x3b, 0x16, 0x3e, 0x06, 0x7c, - 0x8c, 0xc7, 0x06, 0x40, 0x06, 0x00, 0x00, 0xeb, 0x84, 0x3d, 0x0d, 0x00, - 0x74, 0x03, 0xe9, 0x31, 0xfe, 0xa1, 0x40, 0x06, 0x85, 0xc0, 0x7c, 0xf6, - 0x3b, 0x06, 0x3e, 0x06, 0x7d, 0xf0, 0xc6, 0x46, 0xfe, 0x01, 0xb8, 0xde, - 0x03, 0x50, 0xe8, 0x65, 0x08, 0x83, 0xc4, 0x02, 0xb8, 0xe0, 0x03, 0x50, - 0xe8, 0x5b, 0x08, 0x83, 0xc4, 0x02, 0xb8, 0xe6, 0x03, 0x50, 0xe8, 0x51, - 0x08, 0x83, 0xc4, 0x02, 0xff, 0x36, 0xbe, 0x0a, 0xb8, 0xec, 0x03, 0x50, - 0xe8, 0x43, 0x08, 0x83, 0xc4, 0x04, 0xb8, 0x60, 0x06, 0xe8, 0x5a, 0x08, - 0x80, 0x7e, 0xfe, 0x00, 0x75, 0x03, 0xe9, 0x82, 0xfc, 0xe9, 0xc0, 0xfb, - 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0x50, 0xa1, 0x40, - 0x06, 0x3b, 0x06, 0x3e, 0x06, 0x7c, 0x03, 0xe9, 0xac, 0xfb, 0x89, 0xc6, - 0xd1, 0xe6, 0xd1, 0xe6, 0x81, 0xc6, 0x42, 0x09, 0x83, 0x7c, 0x02, 0x00, - 0x75, 0x0f, 0xb9, 0x19, 0x03, 0xbb, 0x25, 0x01, 0xba, 0xf2, 0x03, 0xb8, - 0x5d, 0x01, 0xe8, 0xf5, 0x04, 0x31, 0xff, 0x31, 0xf6, 0x3b, 0x3e, 0x42, - 0x06, 0x73, 0x25, 0x8b, 0x84, 0x92, 0x09, 0x89, 0x46, 0xfc, 0x85, 0xc0, - 0x75, 0x0f, 0xb9, 0x1e, 0x03, 0xbb, 0x25, 0x01, 0xba, 0xf2, 0x03, 0xb8, - 0x7d, 0x02, 0xe8, 0xd1, 0x04, 0x8b, 0x46, 0xfc, 0xe8, 0x11, 0x09, 0x46, - 0x46, 0x47, 0xeb, 0xd5, 0x31, 0xf6, 0x31, 0xff, 0x3b, 0x36, 0x44, 0x06, - 0x73, 0xa5, 0x8a, 0x84, 0x5a, 0x0a, 0x30, 0xe4, 0x3b, 0x06, 0x40, 0x06, - 0x75, 0x20, 0x8b, 0x85, 0x7a, 0x08, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x75, - 0x0f, 0xb9, 0x26, 0x03, 0xbb, 0x25, 0x01, 0xba, 0xf2, 0x03, 0xb8, 0x7d, - 0x02, 0xe8, 0x96, 0x04, 0x8b, 0x46, 0xfe, 0xe8, 0xd6, 0x08, 0x47, 0x47, - 0x46, 0xeb, 0xc9, 0xe8, 0xfe, 0xf3, 0x85, 0xc0, 0x74, 0x04, 0xb8, 0x01, - 0x00, 0xc3, 0xe8, 0x17, 0x09, 0x85, 0xc0, 0x74, 0xf5, 0xe8, 0xb0, 0xf5, - 0x85, 0xc0, 0x75, 0x11, 0xe8, 0xae, 0xfb, 0x85, 0xc0, 0x75, 0x0a, 0xe8, - 0x3e, 0xff, 0x80, 0x3e, 0x32, 0x06, 0x00, 0x75, 0xef, 0xe8, 0x27, 0xf5, - 0x31, 0xc0, 0xc3, 0x51, 0x52, 0x56, 0x57, 0x89, 0xc6, 0x89, 0xc7, 0x8c, - 0xd8, 0x8e, 0xc0, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0xf2, 0xae, 0xf7, 0xd1, - 0x49, 0x41, 0x89, 0xc8, 0xe8, 0x1f, 0x00, 0x89, 0xc2, 0x85, 0xc0, 0x75, - 0x07, 0x89, 0xd0, 0x5f, 0x5e, 0x5a, 0x59, 0xc3, 0x89, 0xc7, 0x57, 0x8c, - 0xd8, 0x8e, 0xc0, 0xd1, 0xe9, 0xf3, 0xa5, 0x13, 0xc9, 0xf3, 0xa4, 0x5f, - 0xeb, 0xe7, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, - 0x04, 0x89, 0xc7, 0x85, 0xc0, 0x74, 0x52, 0x3d, 0xea, 0xff, 0x77, 0x4d, - 0x05, 0x03, 0x00, 0x24, 0xfe, 0x89, 0x46, 0xfc, 0x3d, 0x06, 0x00, 0x72, - 0x4b, 0xc6, 0x46, 0xfe, 0x00, 0x31, 0xd2, 0x8b, 0x46, 0xfc, 0x3b, 0x06, - 0x50, 0x06, 0x76, 0x4d, 0x8b, 0x36, 0x4e, 0x06, 0x85, 0xf6, 0x74, 0x3b, - 0x85, 0xf6, 0x74, 0x52, 0x8b, 0x4c, 0x0a, 0x89, 0x36, 0x4e, 0x06, 0x39, - 0xf9, 0x72, 0x0f, 0x8c, 0xda, 0x89, 0xf3, 0x89, 0xf8, 0xe8, 0xb8, 0x0b, - 0x89, 0xc2, 0x85, 0xc0, 0x75, 0x5d, 0x3b, 0x0e, 0x50, 0x06, 0x77, 0x2c, - 0x8b, 0x74, 0x04, 0xeb, 0xd7, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0x5a, 0x59, 0x5b, 0xc3, 0xc7, 0x46, 0xfc, 0x06, 0x00, 0xeb, 0xae, 0x89, - 0x36, 0x50, 0x06, 0x8b, 0x36, 0x4c, 0x06, 0xeb, 0xbb, 0x31, 0xc0, 0x8b, - 0x36, 0x4c, 0x06, 0xa3, 0x50, 0x06, 0xeb, 0xb0, 0x89, 0x0e, 0x50, 0x06, - 0xeb, 0xce, 0x80, 0x7e, 0xfe, 0x00, 0x74, 0x0f, 0x89, 0xf8, 0xe8, 0xb1, - 0x0d, 0x85, 0xc0, 0x74, 0x16, 0xc6, 0x46, 0xfe, 0x00, 0xeb, 0x84, 0x89, - 0xf8, 0xe8, 0x72, 0x0e, 0x85, 0xc0, 0x74, 0xe8, 0xc6, 0x46, 0xfe, 0x01, - 0xe9, 0x74, 0xff, 0x89, 0xd0, 0xeb, 0xac, 0x53, 0x52, 0x56, 0x85, 0xc0, - 0x74, 0x55, 0x8b, 0x36, 0xc2, 0x0a, 0x85, 0xf6, 0x74, 0x34, 0x39, 0xc6, - 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x43, 0x89, 0xf3, - 0x8b, 0x74, 0x02, 0x85, 0xf6, 0x74, 0x0c, 0x39, 0xc6, 0x77, 0x08, 0x8b, - 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x2e, 0x8b, 0x77, 0x04, 0x85, 0xf6, - 0x74, 0x0c, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, - 0x72, 0x51, 0x8b, 0x36, 0x4e, 0x06, 0x85, 0xf6, 0x75, 0x15, 0x8b, 0x36, - 0x4c, 0x06, 0x85, 0xf6, 0x74, 0x09, 0x39, 0xc6, 0x76, 0x5a, 0x8b, 0x74, - 0x04, 0xeb, 0xf3, 0xeb, 0x4f, 0xeb, 0x34, 0x39, 0xc6, 0x77, 0x08, 0x8b, - 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x28, 0x89, 0xf3, 0x8b, 0x74, 0x02, - 0x85, 0xf6, 0x74, 0x0c, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, - 0x39, 0xd0, 0x72, 0x13, 0x8b, 0x77, 0x04, 0x85, 0xf6, 0x74, 0xc3, 0x39, - 0xc6, 0x77, 0xbf, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x73, 0xb7, 0x8c, - 0xda, 0x89, 0xf3, 0xe8, 0x7e, 0x0b, 0x89, 0x36, 0xc2, 0x0a, 0x3b, 0x36, - 0x4e, 0x06, 0x73, 0x08, 0xa1, 0x50, 0x06, 0x3b, 0x44, 0x0a, 0x72, 0x0e, - 0x5e, 0x5a, 0x5b, 0xc3, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0xdb, - 0xeb, 0x9c, 0x8b, 0x44, 0x0a, 0xa3, 0x50, 0x06, 0xeb, 0xea, 0x53, 0x52, - 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x8d, 0x46, 0x0c, 0x8d, 0x5e, 0xfe, - 0x8b, 0x56, 0x0a, 0x89, 0x46, 0xfe, 0x8b, 0x46, 0x08, 0xe8, 0x4f, 0x0f, - 0x89, 0xec, 0x5d, 0x5a, 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, 0xd3, 0xba, 0x01, 0x00, 0x31, - 0xc0, 0x31, 0xff, 0x31, 0xc9, 0x89, 0x46, 0xfc, 0x89, 0x46, 0xfe, 0x85, - 0xdb, 0x74, 0x08, 0x3b, 0x16, 0x7e, 0x07, 0x75, 0x26, 0x89, 0x17, 0x8a, - 0x04, 0x3c, 0x77, 0x75, 0x22, 0x80, 0xc9, 0x02, 0x46, 0x8a, 0x04, 0x84, - 0xc0, 0x74, 0x53, 0x85, 0xd2, 0x74, 0x4f, 0x3c, 0x63, 0x73, 0x37, 0x3c, - 0x62, 0x75, 0x57, 0x85, 0xff, 0x74, 0x51, 0x31, 0xd2, 0xeb, 0xe5, 0x89, - 0x07, 0xeb, 0xd8, 0x3c, 0x72, 0x75, 0x05, 0x80, 0xc9, 0x01, 0xeb, 0xd8, - 0x3c, 0x61, 0x75, 0x05, 0x80, 0xc9, 0x82, 0xeb, 0xcf, 0xe8, 0x81, 0x0f, - 0x89, 0xc3, 0x31, 0xd2, 0xc7, 0x07, 0x09, 0x00, 0x89, 0xd0, 0x89, 0xec, - 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x77, 0x08, 0x83, 0x7e, 0xfe, 0x00, - 0x74, 0x3f, 0xeb, 0xc7, 0x3c, 0x74, 0x75, 0x08, 0x85, 0xff, 0x74, 0x26, - 0xeb, 0xbd, 0xeb, 0x47, 0x3c, 0x6e, 0x75, 0xa0, 0x83, 0x7e, 0xfe, 0x00, - 0x74, 0x32, 0xeb, 0xaf, 0xeb, 0x1a, 0x3c, 0x2b, 0x75, 0x92, 0x83, 0x7e, - 0xfc, 0x00, 0x75, 0xa3, 0xc7, 0x46, 0xfc, 0x01, 0x00, 0x80, 0xc9, 0x03, - 0xeb, 0x82, 0xbf, 0x01, 0x00, 0xe9, 0x7c, 0xff, 0xbf, 0x01, 0x00, 0x80, - 0xc9, 0x40, 0xe9, 0x73, 0xff, 0xc7, 0x46, 0xfe, 0x01, 0x00, 0x80, 0x0f, - 0x01, 0xe9, 0x68, 0xff, 0xc7, 0x46, 0xfe, 0x01, 0x00, 0x80, 0x27, 0xfe, - 0xe9, 0x5d, 0xff, 0x85, 0xff, 0x75, 0x0b, 0x81, 0x3e, 0x80, 0x07, 0x00, - 0x02, 0x75, 0x03, 0x80, 0xc9, 0x40, 0x89, 0xca, 0xeb, 0x86, 0x56, 0x57, - 0x55, 0x89, 0xe5, 0x8b, 0x76, 0x0a, 0x89, 0xc7, 0x88, 0xd0, 0x30, 0xe4, - 0xe8, 0xf2, 0x0e, 0x3c, 0x72, 0x75, 0x6e, 0x31, 0xc0, 0xf6, 0xc3, 0x02, - 0x74, 0x03, 0xb8, 0x02, 0x00, 0xf6, 0xc3, 0x40, 0x74, 0x5a, 0x80, 0xcc, - 0x02, 0x31, 0xd2, 0x52, 0xff, 0x76, 0x08, 0x50, 0x57, 0xe8, 0xb5, 0x10, - 0x83, 0xc4, 0x08, 0x89, 0x44, 0x08, 0x3d, 0xff, 0xff, 0x74, 0x6b, 0xc7, - 0x44, 0x02, 0x00, 0x00, 0xc7, 0x44, 0x0a, 0x00, 0x00, 0x8b, 0x7c, 0x04, - 0x09, 0x5c, 0x06, 0xc7, 0x45, 0x06, 0x00, 0x00, 0x8b, 0x7c, 0x04, 0x89, - 0x4d, 0x08, 0x8b, 0x7c, 0x04, 0xc7, 0x45, 0x04, 0x00, 0x00, 0xf6, 0xc3, - 0x80, 0x74, 0x0c, 0xba, 0x02, 0x00, 0x89, 0xf0, 0x31, 0xdb, 0x31, 0xc9, - 0xe8, 0xef, 0x10, 0x89, 0xf0, 0xe8, 0xfb, 0x11, 0x89, 0xf0, 0x5d, 0x5f, - 0x5e, 0xc2, 0x04, 0x00, 0x80, 0xcc, 0x01, 0xeb, 0xa4, 0xf6, 0xc3, 0x01, - 0x74, 0x17, 0xb8, 0x22, 0x00, 0xf6, 0xc3, 0x80, 0x74, 0x14, 0x0c, 0x10, - 0xf6, 0xc3, 0x40, 0x74, 0x13, 0x80, 0xcc, 0x02, 0xba, 0x80, 0x01, 0xeb, - 0x8a, 0xb8, 0x21, 0x00, 0xeb, 0xe7, 0x0c, 0x40, 0xeb, 0xea, 0xeb, 0x05, - 0x80, 0xcc, 0x01, 0xeb, 0xeb, 0x89, 0xf0, 0xe8, 0xe2, 0x11, 0x31, 0xc0, - 0xeb, 0xc0, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, - 0xc7, 0x89, 0xd6, 0x89, 0xd9, 0x8d, 0x56, 0xfe, 0x89, 0xf0, 0xe8, 0x49, - 0xfe, 0x89, 0xc3, 0x85, 0xc0, 0x75, 0x07, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0x59, 0xc3, 0xe8, 0xf2, 0x11, 0x89, 0xc2, 0x85, 0xc0, 0x74, 0x11, 0x50, - 0x8a, 0x04, 0x51, 0x98, 0x8b, 0x4e, 0xfe, 0x89, 0xc2, 0x89, 0xf8, 0xe8, - 0x0c, 0xff, 0x89, 0xc2, 0x89, 0xd0, 0xeb, 0xdb, 0x53, 0x31, 0xdb, 0xe8, - 0xb8, 0xff, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x89, 0xc1, 0x8b, 0x1e, - 0xc4, 0x0a, 0x85, 0xdb, 0x75, 0x12, 0xbe, 0xc6, 0x0a, 0x8b, 0x1c, 0x85, - 0xdb, 0x74, 0x33, 0x3b, 0x4f, 0x02, 0x74, 0x1e, 0x89, 0xde, 0xeb, 0xf1, - 0x8b, 0x47, 0x02, 0x39, 0xc1, 0x74, 0x04, 0x8b, 0x1f, 0xeb, 0xdf, 0xba, - 0x01, 0x00, 0xe8, 0x94, 0x02, 0x89, 0xcb, 0x89, 0xd8, 0x5e, 0x5a, 0x59, - 0x5b, 0xc3, 0x8b, 0x07, 0x89, 0x04, 0x8b, 0x36, 0xc4, 0x0a, 0x89, 0x1e, - 0xc4, 0x0a, 0x89, 0x37, 0xeb, 0xe7, 0xe8, 0xb0, 0x0d, 0x89, 0xc3, 0xc7, - 0x07, 0x04, 0x00, 0x31, 0xc3, 0xeb, 0xdc, 0x51, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc7, 0x89, 0xd6, 0x8d, 0x56, 0xfe, 0x89, - 0xf0, 0xe8, 0xaa, 0xfd, 0x89, 0xc2, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x5e, - 0xff, 0x89, 0xd8, 0xe8, 0x86, 0xff, 0x89, 0xc3, 0x85, 0xc0, 0x74, 0x15, - 0x50, 0x31, 0xc0, 0x50, 0x8a, 0x04, 0x8b, 0x4e, 0xfe, 0x98, 0x89, 0xd3, - 0x89, 0xc2, 0x89, 0xf8, 0xe8, 0x6b, 0xfe, 0x89, 0xc3, 0x89, 0xd8, 0xe9, - 0x39, 0xff, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x81, 0xec, 0x02, 0x01, 0x89, - 0xc6, 0x89, 0xd8, 0xbb, 0x01, 0x00, 0x83, 0x3e, 0x6a, 0x07, 0x00, 0x74, - 0x09, 0xc7, 0x06, 0x6a, 0x07, 0x00, 0x00, 0xbb, 0x02, 0x00, 0x51, 0x50, - 0x52, 0x56, 0xb8, 0x00, 0x04, 0x50, 0xb8, 0x00, 0x01, 0x50, 0x8d, 0x86, - 0xfe, 0xfe, 0x50, 0xe8, 0xf7, 0x11, 0x83, 0xc4, 0x0e, 0x80, 0x3e, 0x82, - 0x07, 0x00, 0x75, 0x03, 0xe9, 0x0a, 0x01, 0x8d, 0xbe, 0xfe, 0xfe, 0x8c, - 0xd8, 0x8e, 0xc0, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0xf2, 0xae, 0xf7, 0xd1, - 0x49, 0x89, 0xca, 0x83, 0xc2, 0x13, 0x80, 0xe2, 0xfe, 0xe8, 0x0e, 0x12, - 0x39, 0xc2, 0x72, 0x03, 0xe9, 0xcb, 0x00, 0x8d, 0xbe, 0xfe, 0xfe, 0x8c, - 0xd8, 0x8e, 0xc0, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0xf2, 0xae, 0xf7, 0xd1, - 0x49, 0x89, 0xc8, 0x05, 0x13, 0x00, 0x24, 0xfe, 0x2b, 0xe0, 0x89, 0xe2, - 0xbe, 0x27, 0x04, 0x89, 0xd7, 0x57, 0x8a, 0x04, 0x88, 0x05, 0x84, 0xc0, - 0x74, 0x10, 0x8a, 0x44, 0x01, 0x83, 0xc6, 0x02, 0x88, 0x45, 0x01, 0x83, - 0xc7, 0x02, 0x84, 0xc0, 0x75, 0xe8, 0x5f, 0xbe, 0x38, 0x04, 0x1e, 0x07, - 0x57, 0x83, 0xc9, 0xff, 0x32, 0xc0, 0xf2, 0xae, 0x4f, 0x8a, 0x04, 0x88, - 0x05, 0x84, 0xc0, 0x74, 0x10, 0x8a, 0x44, 0x01, 0x83, 0xc6, 0x02, 0x88, - 0x45, 0x01, 0x83, 0xc7, 0x02, 0x84, 0xc0, 0x75, 0xe8, 0x5f, 0x8d, 0xb6, - 0xfe, 0xfe, 0x89, 0x56, 0xfe, 0x1e, 0x07, 0x57, 0x83, 0xc9, 0xff, 0x32, - 0xc0, 0xf2, 0xae, 0x4f, 0x8a, 0x04, 0x88, 0x05, 0x84, 0xc0, 0x74, 0x10, - 0x8a, 0x44, 0x01, 0x83, 0xc6, 0x02, 0x88, 0x45, 0x01, 0x83, 0xc7, 0x02, - 0x84, 0xc0, 0x75, 0xe8, 0x5f, 0xe8, 0x76, 0x11, 0x3d, 0x12, 0x00, 0x76, - 0x3a, 0xb8, 0x12, 0x00, 0x2b, 0xe0, 0x89, 0xe2, 0x53, 0xb8, 0x3b, 0x04, - 0x50, 0x52, 0xe8, 0xf4, 0x02, 0x83, 0xc4, 0x06, 0x80, 0x3e, 0x82, 0x07, - 0x00, 0x74, 0x0e, 0x1e, 0x52, 0xcc, 0xeb, 0x06, 0x57, 0x56, 0x49, 0x44, - 0x45, 0x4f, 0x83, 0xc4, 0x04, 0x80, 0x3e, 0x82, 0x07, 0x00, 0x75, 0x0f, - 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x31, 0xd2, 0xe9, 0x4d, 0xff, 0x31, - 0xd2, 0xeb, 0xc9, 0x1e, 0xff, 0x76, 0xfe, 0xcc, 0xeb, 0x06, 0x57, 0x56, - 0x49, 0x44, 0x45, 0x4f, 0x83, 0xc4, 0x04, 0xeb, 0xdf, 0x8d, 0x96, 0xfe, - 0xfe, 0xb8, 0x27, 0x04, 0xe8, 0x1e, 0x11, 0xe9, 0x37, 0x11, 0x56, 0x55, - 0x89, 0xe5, 0x89, 0xc6, 0x89, 0xd0, 0x89, 0xda, 0x89, 0xcb, 0x8b, 0x4e, - 0x06, 0x85, 0xf6, 0x74, 0x05, 0x5d, 0x5e, 0xc2, 0x02, 0x00, 0xc7, 0x06, - 0x6a, 0x07, 0x01, 0x00, 0xe8, 0x87, 0xfe, 0xeb, 0xf0, 0x53, 0x51, 0x52, - 0x56, 0x89, 0xc3, 0x8a, 0x07, 0x30, 0xe4, 0x89, 0xc6, 0xf6, 0x84, 0x0b, - 0x05, 0x02, 0x74, 0x03, 0x43, 0xeb, 0xf0, 0x30, 0xc9, 0x3c, 0x2d, 0x75, - 0x24, 0xb1, 0x01, 0x43, 0x31, 0xc0, 0x8a, 0x17, 0x30, 0xf6, 0x89, 0xd6, - 0xf6, 0x84, 0x0b, 0x05, 0x20, 0x74, 0x18, 0xba, 0x0a, 0x00, 0xf7, 0xea, - 0x89, 0xc2, 0x8a, 0x07, 0x98, 0x01, 0xd0, 0x43, 0x2d, 0x30, 0x00, 0xeb, - 0xe1, 0x3c, 0x2b, 0x74, 0xda, 0xeb, 0xd9, 0x84, 0xc9, 0x74, 0x02, 0xf7, - 0xd8, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x51, 0x56, 0x55, 0x89, 0xe5, 0x83, - 0xec, 0x02, 0x50, 0x89, 0xde, 0x8b, 0x47, 0x06, 0x30, 0xe4, 0x80, 0x67, - 0x06, 0xcf, 0x24, 0x30, 0x8b, 0x5e, 0xfc, 0x89, 0x46, 0xfe, 0x4a, 0x85, - 0xd2, 0x7f, 0x24, 0x83, 0xf9, 0xff, 0x75, 0x34, 0x3b, 0x5e, 0xfc, 0x74, - 0x06, 0xf6, 0x44, 0x06, 0x20, 0x74, 0x29, 0xc7, 0x46, 0xfc, 0x00, 0x00, - 0x8b, 0x46, 0xfe, 0x09, 0x44, 0x06, 0x8b, 0x46, 0xfc, 0x89, 0xec, 0x5d, - 0x5e, 0x59, 0xc3, 0x89, 0xf0, 0xe8, 0x49, 0x11, 0x89, 0xc1, 0x3d, 0xff, - 0xff, 0x74, 0xd0, 0x88, 0x07, 0x43, 0x3c, 0x0a, 0x74, 0xc9, 0xeb, 0xc2, - 0xc6, 0x07, 0x00, 0xeb, 0xd7, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, - 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0xf6, 0x44, 0x06, 0x03, - 0x74, 0x68, 0x31, 0xff, 0xf6, 0x44, 0x07, 0x10, 0x75, 0x65, 0x8b, 0x44, - 0x02, 0x85, 0xc0, 0x74, 0x16, 0xf7, 0xd8, 0x8b, 0x5c, 0x08, 0x99, 0x89, - 0x5e, 0xfc, 0x89, 0xd1, 0x89, 0xc3, 0xba, 0x01, 0x00, 0x8b, 0x46, 0xfc, - 0xe8, 0x7c, 0x11, 0x83, 0x7e, 0xfe, 0x00, 0x74, 0x08, 0x8b, 0x44, 0x08, - 0xe8, 0xa8, 0x11, 0x09, 0xc7, 0xf6, 0x44, 0x06, 0x08, 0x74, 0x11, 0x8b, - 0x5c, 0x04, 0x8b, 0x47, 0x04, 0xe8, 0x17, 0xfa, 0x8b, 0x5c, 0x04, 0xc7, - 0x47, 0x04, 0x00, 0x00, 0xf6, 0x44, 0x07, 0x08, 0x74, 0x06, 0x89, 0xf0, - 0xff, 0x16, 0xc8, 0x0a, 0xc6, 0x44, 0x06, 0x00, 0x80, 0x64, 0x07, 0x40, - 0x89, 0xf8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xbf, 0xff, - 0xff, 0xeb, 0xf1, 0xe8, 0x9b, 0x11, 0x85, 0xc0, 0x74, 0x94, 0xbf, 0xff, - 0xff, 0xeb, 0x8f, 0x53, 0x89, 0xc3, 0xe8, 0x6c, 0xff, 0x89, 0xc2, 0x89, - 0xd8, 0xe8, 0x34, 0x0e, 0x89, 0xd0, 0x5b, 0xc3, 0x53, 0x52, 0x8b, 0x1e, - 0xc4, 0x0a, 0x85, 0xdb, 0x74, 0x12, 0x3b, 0x47, 0x02, 0x74, 0x04, 0x8b, - 0x1f, 0xeb, 0xf3, 0xba, 0x01, 0x00, 0xe8, 0xd6, 0xff, 0x5a, 0x5b, 0xc3, - 0xb8, 0xff, 0xff, 0x5a, 0x5b, 0xc3, 0x93, 0x50, 0x92, 0x0b, 0xc0, 0x74, - 0x02, 0xf7, 0xe2, 0x91, 0x0b, 0xc0, 0x74, 0x04, 0xf7, 0xe3, 0x03, 0xc8, - 0x58, 0xf7, 0xe3, 0x03, 0xd1, 0xc3, 0x53, 0x52, 0x55, 0x89, 0xe5, 0x83, - 0xec, 0x02, 0x8d, 0x46, 0x0a, 0x8d, 0x5e, 0xfe, 0x8b, 0x56, 0x08, 0x89, - 0x46, 0xfe, 0xb8, 0x60, 0x06, 0xe8, 0xa7, 0x09, 0x89, 0xec, 0x5d, 0x5a, - 0x5b, 0xc3, 0x85, 0xc0, 0x75, 0x06, 0xe8, 0x3d, 0x12, 0x31, 0xc0, 0xc3, - 0xe9, 0x1a, 0x11, 0x00, 0x0b, 0xd2, 0x78, 0x16, 0x0b, 0xc9, 0x79, 0x41, - 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xe8, 0x37, 0x00, 0xf7, 0xda, - 0xf7, 0xd8, 0x83, 0xda, 0x00, 0xc3, 0xf7, 0xda, 0xf7, 0xd8, 0x83, 0xda, - 0x00, 0x0b, 0xc9, 0x79, 0x12, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, - 0xe8, 0x1a, 0x00, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xc3, 0xe8, - 0x0f, 0x00, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xf7, 0xda, 0xf7, - 0xd8, 0x83, 0xda, 0x00, 0xc3, 0x0b, 0xc9, 0x75, 0x1a, 0x4b, 0x74, 0x16, - 0x43, 0x3b, 0xda, 0x77, 0x09, 0x8b, 0xc8, 0x8b, 0xc2, 0x2b, 0xd2, 0xf7, - 0xf3, 0x91, 0xf7, 0xf3, 0x8b, 0xda, 0x8b, 0xd1, 0x2b, 0xc9, 0xc3, 0x3b, - 0xca, 0x72, 0x1a, 0x75, 0x10, 0x3b, 0xd8, 0x77, 0x0c, 0x2b, 0xc3, 0x8b, - 0xd8, 0x2b, 0xc9, 0x2b, 0xd2, 0xb8, 0x01, 0x00, 0xc3, 0x2b, 0xc9, 0x2b, - 0xdb, 0x93, 0x87, 0xca, 0xc3, 0x55, 0x56, 0x2b, 0xf6, 0x8b, 0xee, 0x03, - 0xdb, 0x13, 0xc9, 0x72, 0x11, 0x45, 0x3b, 0xca, 0x72, 0xf5, 0x77, 0x04, - 0x3b, 0xd8, 0x76, 0xef, 0xf8, 0x13, 0xf6, 0x4d, 0x78, 0x20, 0xd1, 0xd9, - 0xd1, 0xdb, 0x2b, 0xc3, 0x19, 0xca, 0xf5, 0x72, 0xf0, 0x03, 0xf6, 0x4d, - 0x78, 0x0c, 0xd1, 0xe9, 0xd1, 0xdb, 0x03, 0xc3, 0x13, 0xd1, 0x73, 0xf1, - 0xeb, 0xdf, 0x03, 0xc3, 0x13, 0xd1, 0x8b, 0xd8, 0x8b, 0xca, 0x8b, 0xc6, - 0x33, 0xd2, 0x5e, 0x5d, 0xc3, 0x53, 0x52, 0x55, 0x89, 0xe5, 0x83, 0xec, - 0x02, 0x8d, 0x46, 0x0c, 0x8d, 0x5e, 0xfe, 0x8b, 0x56, 0x0a, 0x89, 0x46, - 0xfe, 0x8b, 0x46, 0x08, 0xe8, 0x67, 0x11, 0x89, 0xec, 0x5d, 0x5a, 0x5b, - 0xc3, 0x83, 0x3e, 0x92, 0x07, 0x00, 0x74, 0x04, 0xb8, 0x01, 0x00, 0xc3, - 0xb4, 0x0b, 0xcd, 0x21, 0x30, 0xe4, 0xc3, 0xa1, 0x92, 0x07, 0xc7, 0x06, - 0x92, 0x07, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x01, 0xc3, 0xb4, 0x08, 0xcd, - 0x21, 0x30, 0xe4, 0xc3, 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0x83, 0xec, - 0x04, 0x89, 0xc2, 0xb8, 0x4c, 0x04, 0xe8, 0x3b, 0x11, 0x89, 0xc3, 0x85, - 0xd2, 0x74, 0x33, 0x30, 0xc9, 0x85, 0xc0, 0x75, 0x03, 0xbb, 0x5c, 0x04, - 0x31, 0xc0, 0x50, 0x88, 0xc8, 0x30, 0xe4, 0x52, 0x89, 0xc2, 0x8d, 0x46, - 0xfc, 0xe8, 0x8d, 0x11, 0x50, 0x84, 0xc9, 0x74, 0x1a, 0xb8, 0x68, 0x04, - 0x50, 0x53, 0x31, 0xc0, 0x50, 0xe8, 0x9c, 0x11, 0x83, 0xc4, 0x0c, 0x89, - 0xec, 0x5d, 0x5a, 0x59, 0x5b, 0xc3, 0xb8, 0x01, 0x00, 0xeb, 0xf4, 0xb8, - 0x6c, 0x04, 0xeb, 0xe4, 0x53, 0x51, 0x52, 0x56, 0xa0, 0x7c, 0x07, 0x84, - 0xc0, 0x7c, 0x04, 0x98, 0xe9, 0x9d, 0x00, 0xbb, 0x80, 0x00, 0x9c, 0x58, - 0xba, 0x77, 0x00, 0x89, 0xc6, 0x30, 0xc0, 0xee, 0xba, 0x71, 0x00, 0xec, - 0x2a, 0xe4, 0x89, 0xc1, 0xec, 0x2a, 0xe4, 0x88, 0xc4, 0x89, 0xca, 0x30, - 0xc0, 0x09, 0xc2, 0xf7, 0xc6, 0x00, 0x02, 0x74, 0x01, 0xfb, 0x89, 0xd0, - 0x83, 0xfa, 0xff, 0x75, 0x25, 0x9c, 0x58, 0xba, 0x77, 0x00, 0x89, 0xc1, - 0x30, 0xc0, 0xee, 0xba, 0x71, 0x00, 0xec, 0x2a, 0xe4, 0x89, 0xc6, 0xec, - 0x2a, 0xe4, 0x88, 0xc4, 0x30, 0xc0, 0x89, 0xc2, 0x09, 0xf2, 0xf6, 0xc5, - 0x02, 0x74, 0x01, 0xfb, 0x89, 0xd0, 0x3d, 0xff, 0xff, 0x75, 0x0d, 0x31, - 0xd2, 0x42, 0x83, 0xfa, 0xff, 0x75, 0xfa, 0x4b, 0x39, 0xd3, 0x75, 0x9e, - 0x3d, 0xff, 0x00, 0x75, 0x09, 0x30, 0xc0, 0xa2, 0x7c, 0x07, 0x30, 0xe4, - 0xeb, 0x2a, 0x31, 0xc0, 0xbb, 0x01, 0x05, 0x8e, 0xc0, 0x26, 0xf6, 0x07, - 0x80, 0x74, 0x08, 0xb8, 0x00, 0x78, 0xba, 0x1e, 0x00, 0xeb, 0x06, 0xb8, - 0x00, 0x80, 0xba, 0x25, 0x00, 0xc6, 0x06, 0x7c, 0x07, 0x01, 0xa3, 0x78, - 0x07, 0x89, 0x16, 0x7a, 0x07, 0xb8, 0x01, 0x00, 0x5e, 0x5a, 0x59, 0x5b, - 0xc3, 0x00, 0xeb, 0x37, 0x03, 0x00, 0x2a, 0x2a, 0x2a, 0x20, 0x4e, 0x55, - 0x4c, 0x4c, 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x00, 0x4e, - 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x00, 0x63, 0x6f, 0x6e, 0x00, 0x0d, 0x0a, 0xfb, - 0xb9, 0x0a, 0x05, 0x8e, 0xc1, 0xbb, 0xea, 0x0b, 0x83, 0xc3, 0x0f, 0x80, - 0xe3, 0xf0, 0x26, 0x89, 0x1e, 0x8e, 0x07, 0x26, 0x8c, 0x1e, 0x88, 0x07, - 0x03, 0xdc, 0x83, 0xc3, 0x0f, 0x80, 0xe3, 0xf0, 0x8e, 0xd1, 0x8b, 0xe3, - 0x26, 0x89, 0x1e, 0x90, 0x07, 0x8b, 0xd3, 0xd1, 0xea, 0xd1, 0xea, 0xd1, - 0xea, 0xd1, 0xea, 0x26, 0x80, 0x3e, 0x8c, 0x07, 0x00, 0x75, 0x3d, 0x8b, - 0x0e, 0x02, 0x00, 0x8c, 0xc0, 0x2b, 0xc8, 0x3b, 0xd1, 0x72, 0x0b, 0xbb, - 0x01, 0x00, 0xb8, 0xd3, 0x16, 0x8c, 0xca, 0xe9, 0x62, 0x10, 0x8c, 0xc0, - 0x8b, 0xda, 0xd1, 0xe3, 0xd1, 0xe3, 0xd1, 0xe3, 0xd1, 0xe3, 0x75, 0x03, - 0xbb, 0xfe, 0xff, 0x26, 0x89, 0x1e, 0x86, 0x07, 0x8b, 0xda, 0x03, 0xd8, - 0x26, 0xa1, 0x88, 0x07, 0x8e, 0xc0, 0x2b, 0xd8, 0xb4, 0x4a, 0xcd, 0x21, - 0x8c, 0xdf, 0x8e, 0xc7, 0xbf, 0x81, 0x00, 0x8a, 0x4d, 0xff, 0x32, 0xed, - 0xfc, 0xb0, 0x20, 0xf3, 0xae, 0x8d, 0x75, 0xff, 0xba, 0x0a, 0x05, 0x8e, - 0xc2, 0x26, 0x8b, 0x3e, 0x8e, 0x07, 0x26, 0x89, 0x3e, 0xa7, 0x07, 0x26, - 0x8c, 0x06, 0xa9, 0x07, 0x74, 0x03, 0x41, 0xf3, 0xa4, 0x2a, 0xc0, 0xaa, - 0xaa, 0x4f, 0xb4, 0x30, 0xcd, 0x21, 0x26, 0xa2, 0x8a, 0x07, 0x26, 0x88, - 0x26, 0x8b, 0x07, 0x8b, 0xcf, 0x3c, 0x03, 0x72, 0x58, 0x8e, 0x1e, 0x2c, - 0x00, 0x2b, 0xf6, 0xbd, 0x00, 0x01, 0x8b, 0x04, 0x0d, 0x20, 0x20, 0x3d, - 0x6e, 0x6f, 0x75, 0x12, 0x81, 0x7c, 0x02, 0x38, 0x37, 0x75, 0x27, 0x80, - 0x7c, 0x04, 0x3d, 0x75, 0x21, 0x83, 0xcd, 0x01, 0xeb, 0x1c, 0x3d, 0x6c, - 0x66, 0x75, 0x1a, 0x8b, 0x44, 0x02, 0x0c, 0x20, 0x3d, 0x6e, 0x3d, 0x75, - 0x10, 0x8a, 0x44, 0x04, 0x0c, 0x20, 0x3c, 0x6e, 0x75, 0x07, 0x81, 0xe5, - 0xff, 0xfe, 0x83, 0xc6, 0x05, 0x80, 0x3c, 0x00, 0xac, 0x75, 0xfa, 0x80, - 0x3c, 0x00, 0x75, 0xba, 0xac, 0x46, 0x46, 0x80, 0x3c, 0x00, 0xa4, 0x75, - 0xfa, 0x8e, 0xda, 0x8b, 0xf1, 0x89, 0x36, 0xab, 0x07, 0x8c, 0x06, 0xad, - 0x07, 0x8b, 0xdc, 0x8b, 0xc5, 0xa2, 0x96, 0x07, 0x20, 0x26, 0xb0, 0x07, - 0x89, 0x3e, 0x8e, 0x07, 0xb9, 0xea, 0x0b, 0xbf, 0x7a, 0x08, 0x2b, 0xcf, - 0x32, 0xc0, 0xf3, 0xaa, 0x83, 0x3e, 0x97, 0x07, 0x00, 0x75, 0x18, 0xb8, - 0x48, 0x19, 0xa3, 0x97, 0x07, 0x8c, 0x0e, 0x99, 0x07, 0xa3, 0x9b, 0x07, - 0x8c, 0x0e, 0x9d, 0x07, 0xa3, 0x9f, 0x07, 0x8c, 0x0e, 0xa1, 0x07, 0x33, - 0xed, 0xb8, 0x47, 0x19, 0xa3, 0xa3, 0x07, 0x8c, 0x0e, 0xa5, 0x07, 0xb8, - 0xff, 0x00, 0xe8, 0xab, 0x0f, 0xe8, 0x5b, 0x0f, 0x50, 0xba, 0x0a, 0x05, - 0x8e, 0xda, 0xfc, 0x8d, 0x3e, 0x00, 0x00, 0x8e, 0xc2, 0xb9, 0x10, 0x00, - 0xb8, 0x01, 0x01, 0xf3, 0xaf, 0x74, 0x39, 0x5b, 0xb8, 0xb6, 0x16, 0x8c, - 0xca, 0xbc, 0x6a, 0x0c, 0x53, 0x50, 0x52, 0x8c, 0xcf, 0x8e, 0xdf, 0xba, - 0xe5, 0x16, 0xb8, 0x01, 0x3d, 0xcd, 0x21, 0x8b, 0xd8, 0x1f, 0x5a, 0x8b, - 0xf2, 0xfc, 0xac, 0x84, 0xc0, 0x75, 0xfb, 0x8b, 0xce, 0x2b, 0xca, 0x49, - 0xb4, 0x40, 0xcd, 0x21, 0x8e, 0xdf, 0xba, 0xe9, 0x16, 0xb9, 0x02, 0x00, - 0xb4, 0x40, 0xcd, 0x21, 0x33, 0xc0, 0xba, 0x0f, 0x00, 0xe8, 0xaf, 0x0f, - 0x58, 0xb4, 0x4c, 0xcd, 0x21, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x57, 0x61, - 0x74, 0x63, 0x6f, 0x6d, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x31, 0x36, - 0x20, 0x52, 0x75, 0x6e, 0x2d, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x4f, 0x70, 0x65, 0x6e, - 0x20, 0x57, 0x61, 0x74, 0x63, 0x6f, 0x6d, 0x20, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x20, 0x32, 0x30, 0x30, - 0x32, 0x2d, 0x32, 0x30, 0x31, 0x38, 0x2e, 0x20, 0x50, 0x6f, 0x72, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x53, 0x79, 0x62, 0x61, 0x73, - 0x65, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x31, 0x39, 0x38, 0x38, - 0x2d, 0x32, 0x30, 0x30, 0x32, 0x2e, 0x00, 0x50, 0xb8, 0x0a, 0x05, 0x8e, - 0xd8, 0x58, 0xc3, 0xcb, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x51, 0x56, 0x57, 0x1e, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xde, - 0xc7, 0x46, 0xfe, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x6c, 0x00, - 0x89, 0xc7, 0x83, 0xc7, 0x03, 0x83, 0xe7, 0xfe, 0x39, 0xc7, 0x72, 0x60, - 0x8e, 0xda, 0x8b, 0x44, 0x0a, 0x83, 0xff, 0x06, 0x73, 0x03, 0xbf, 0x06, - 0x00, 0x39, 0xc7, 0x77, 0x4f, 0x8e, 0xda, 0x8b, 0x4c, 0x08, 0x8b, 0x5c, - 0x06, 0x39, 0xcf, 0x76, 0x50, 0x8e, 0xda, 0x8b, 0x07, 0x39, 0xc7, 0x77, - 0x4f, 0x89, 0x4c, 0x08, 0x29, 0xf8, 0xff, 0x44, 0x0c, 0x3d, 0x06, 0x00, - 0x72, 0x5e, 0x89, 0xd9, 0x01, 0xf9, 0x89, 0x4c, 0x06, 0x89, 0xce, 0x89, - 0x04, 0x89, 0x3f, 0x89, 0xcf, 0x8b, 0x77, 0x02, 0x89, 0x75, 0x02, 0x8b, - 0x47, 0x04, 0x89, 0x45, 0x04, 0x89, 0x4c, 0x04, 0x89, 0xc6, 0x89, 0x4c, - 0x02, 0x8e, 0xda, 0x80, 0x0f, 0x01, 0x83, 0xc3, 0x02, 0x89, 0x5e, 0xfe, - 0x8b, 0x56, 0xfe, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x1f, 0x5f, 0x5e, 0x59, - 0xc3, 0x8b, 0x5c, 0x14, 0x31, 0xc9, 0xeb, 0xa9, 0x39, 0xc1, 0x73, 0x02, - 0x89, 0xc1, 0x89, 0xf0, 0x8e, 0xda, 0x05, 0x10, 0x00, 0x8b, 0x5f, 0x04, - 0x39, 0xc3, 0x75, 0x95, 0x8b, 0x56, 0xfe, 0x89, 0x4c, 0x0a, 0xeb, 0xd3, - 0xff, 0x4c, 0x0e, 0x8b, 0x7f, 0x02, 0x89, 0x7c, 0x06, 0x8b, 0x77, 0x04, - 0x89, 0x75, 0x04, 0x89, 0x7c, 0x02, 0xeb, 0xb1, 0x51, 0x56, 0x57, 0x1e, - 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xd1, 0x89, 0x5e, 0xfe, 0x85, - 0xc0, 0x75, 0x03, 0xe9, 0x84, 0x00, 0x89, 0xc6, 0x8e, 0xda, 0x83, 0xee, - 0x02, 0xf6, 0x04, 0x01, 0x74, 0xf1, 0x8b, 0x04, 0x89, 0xf3, 0x24, 0xfe, - 0x01, 0xc3, 0xf6, 0x07, 0x01, 0x74, 0x03, 0xe9, 0x7e, 0x00, 0x03, 0x07, - 0x8b, 0x7e, 0xfe, 0x89, 0x04, 0x3b, 0x5d, 0x06, 0x75, 0x03, 0x89, 0x75, - 0x06, 0x8e, 0xd9, 0x8b, 0x7f, 0x02, 0x8b, 0x5f, 0x04, 0x89, 0x5d, 0x04, - 0x89, 0x7f, 0x02, 0x8b, 0x7e, 0xfe, 0xff, 0x4d, 0x0e, 0x8e, 0xd9, 0x8b, - 0x7f, 0x02, 0x89, 0xfa, 0x8b, 0x04, 0x03, 0x15, 0x89, 0x7e, 0xfc, 0x39, - 0xd6, 0x75, 0x3b, 0x89, 0xfb, 0x03, 0x07, 0x89, 0x07, 0x8b, 0x5e, 0xfe, - 0x3b, 0x57, 0x06, 0x75, 0x03, 0x89, 0x7f, 0x06, 0x8b, 0x76, 0xfc, 0x8b, - 0x5e, 0xfe, 0x8e, 0xd9, 0xff, 0x4f, 0x0c, 0x3b, 0x77, 0x06, 0x73, 0x08, - 0x3b, 0x47, 0x08, 0x76, 0x03, 0x89, 0x47, 0x08, 0x8b, 0x5e, 0xfe, 0x8e, - 0xd9, 0x3b, 0x47, 0x0a, 0x77, 0x0b, 0x89, 0xec, 0x5d, 0x1f, 0x5f, 0x5e, - 0x59, 0xc3, 0xe9, 0xbd, 0x00, 0x89, 0x47, 0x0a, 0x89, 0xec, 0x5d, 0x1f, - 0x5f, 0x5e, 0x59, 0xc3, 0x8b, 0x5e, 0xfe, 0x89, 0x04, 0x8b, 0x5f, 0x06, - 0x39, 0xde, 0x72, 0x03, 0xe9, 0x6c, 0x00, 0x3b, 0x77, 0x02, 0x77, 0x91, - 0x8b, 0x5e, 0xfe, 0x8b, 0x5f, 0x14, 0x39, 0xde, 0x72, 0x87, 0x8b, 0x5e, - 0xfe, 0x8e, 0xd9, 0x8b, 0x5f, 0x0e, 0x89, 0xd8, 0x8b, 0x7e, 0xfe, 0x40, - 0x31, 0xd2, 0x89, 0x46, 0xfa, 0x8b, 0x45, 0x0c, 0xf7, 0x76, 0xfa, 0x39, - 0xd8, 0x73, 0x18, 0x8b, 0x55, 0x0c, 0x29, 0xda, 0xd1, 0xe0, 0x39, 0xd3, - 0x73, 0x4e, 0x8e, 0xd9, 0x8b, 0x1c, 0x8e, 0xd9, 0x01, 0xf3, 0x83, 0x3f, - 0xff, 0x75, 0x46, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0x8b, 0x5f, 0x06, 0x39, - 0xde, 0x72, 0x4b, 0x8e, 0xd9, 0x39, 0xde, 0x73, 0x03, 0xe9, 0x3d, 0xff, - 0x8b, 0x5f, 0x04, 0x39, 0xde, 0x72, 0xf6, 0x8b, 0x5f, 0x04, 0x39, 0xde, - 0x72, 0xef, 0x8b, 0x5f, 0x04, 0xeb, 0xe6, 0x8b, 0x5f, 0x04, 0x39, 0xde, - 0x72, 0xe3, 0x8b, 0x7e, 0xfe, 0x83, 0xc7, 0x10, 0x8b, 0x45, 0x02, 0x89, - 0xfb, 0x39, 0xc6, 0x76, 0x8d, 0xe9, 0x11, 0xff, 0xb8, 0xff, 0xff, 0xeb, - 0xad, 0xf6, 0x07, 0x01, 0x74, 0xc7, 0x8b, 0x17, 0x80, 0xe2, 0xfe, 0x01, - 0xd3, 0x48, 0x74, 0xab, 0xeb, 0xa4, 0x8b, 0x5e, 0xfe, 0x8b, 0x5f, 0x14, - 0xeb, 0xad, 0x8b, 0x7e, 0xfe, 0xff, 0x45, 0x0e, 0x8b, 0x7e, 0xfc, 0x89, - 0x5c, 0x04, 0x89, 0x7c, 0x02, 0x89, 0x75, 0x04, 0x89, 0x77, 0x02, 0xe9, - 0x01, 0xff, 0x31, 0xc0, 0xc3, 0x53, 0x56, 0x57, 0x89, 0xc6, 0x8b, 0x1e, - 0x4c, 0x06, 0x31, 0xff, 0x85, 0xdb, 0x74, 0x0e, 0x39, 0xde, 0x72, 0x07, - 0x89, 0xdf, 0x8b, 0x5f, 0x04, 0xeb, 0xf1, 0x89, 0x77, 0x02, 0x89, 0x7c, - 0x02, 0x89, 0x5c, 0x04, 0x85, 0xff, 0x74, 0x39, 0x89, 0x75, 0x04, 0xc7, - 0x44, 0x10, 0x00, 0x00, 0xc7, 0x44, 0x08, 0x00, 0x00, 0xc7, 0x44, 0x0c, - 0x00, 0x00, 0x8d, 0x44, 0x10, 0xc7, 0x44, 0x0e, 0x00, 0x00, 0x89, 0x44, - 0x12, 0x8b, 0x1c, 0x89, 0x44, 0x14, 0x83, 0xeb, 0x16, 0x89, 0x44, 0x06, - 0x89, 0x5c, 0x16, 0x01, 0xf3, 0x8d, 0x44, 0x16, 0xc7, 0x47, 0x16, 0xff, - 0xff, 0x5f, 0x5e, 0x5b, 0xc3, 0x89, 0x36, 0x4c, 0x06, 0xeb, 0xc4, 0x53, - 0xa1, 0x4c, 0x06, 0x85, 0xc0, 0x74, 0x14, 0x89, 0xc3, 0x8b, 0x5f, 0x12, - 0x8b, 0x07, 0x01, 0xd8, 0x05, 0x02, 0x00, 0x3b, 0x06, 0x86, 0x07, 0x75, - 0x04, 0x8b, 0x07, 0x5b, 0xc3, 0x31, 0xc0, 0x5b, 0xc3, 0x53, 0x52, 0x89, - 0xc3, 0x8b, 0x07, 0x89, 0xc2, 0x83, 0xc2, 0x03, 0x80, 0xe2, 0xfe, 0x39, - 0xc2, 0x73, 0x05, 0x31, 0xc0, 0x5a, 0x5b, 0xc3, 0xe8, 0xc4, 0xff, 0x39, - 0xd0, 0x72, 0x23, 0x31, 0xd2, 0x89, 0xd0, 0x83, 0xc2, 0x1e, 0x39, 0xc2, - 0x72, 0xe9, 0xa1, 0xb2, 0x07, 0x39, 0xc2, 0x73, 0x05, 0x89, 0xc2, 0x80, - 0xe2, 0xfe, 0x89, 0x17, 0x85, 0xd2, 0x74, 0xd7, 0xb8, 0x01, 0x00, 0x5a, - 0x5b, 0xc3, 0x29, 0xc2, 0xeb, 0xdb, 0x53, 0x56, 0x57, 0x55, 0x89, 0xe5, - 0x50, 0xa1, 0xb4, 0x07, 0x85, 0xc0, 0x74, 0x09, 0x83, 0x3e, 0x86, 0x07, - 0xfe, 0x75, 0x08, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0xe9, 0x72, 0xff, 0x8d, - 0x46, 0xfe, 0xe8, 0x98, 0xff, 0x85, 0xc0, 0x74, 0xf0, 0x8b, 0x5e, 0xfe, - 0x03, 0x1e, 0x86, 0x07, 0x3b, 0x1e, 0x86, 0x07, 0x73, 0x03, 0xbb, 0xfe, - 0xff, 0x89, 0xd8, 0xe8, 0xd8, 0x0d, 0x89, 0xc6, 0x3d, 0xff, 0xff, 0x74, - 0xd2, 0x3d, 0xf8, 0xff, 0x77, 0xcd, 0x39, 0xc3, 0x76, 0xc9, 0x29, 0xc3, - 0x89, 0x5e, 0xfe, 0x8d, 0x47, 0xfe, 0x39, 0xd8, 0x77, 0xbd, 0x8b, 0x1e, - 0x4c, 0x06, 0x89, 0x46, 0xfe, 0x85, 0xdb, 0x74, 0x06, 0x83, 0x7f, 0x04, - 0x00, 0x75, 0x3c, 0x85, 0xdb, 0x74, 0x4e, 0x8b, 0x07, 0x8d, 0x7c, 0xfe, - 0x01, 0xd8, 0x39, 0xc7, 0x75, 0x43, 0x83, 0x46, 0xfe, 0x02, 0x8b, 0x46, - 0xfe, 0x01, 0x07, 0x8b, 0x46, 0xfe, 0x89, 0xc6, 0x01, 0xfe, 0x89, 0x05, - 0xc7, 0x04, 0xff, 0xff, 0x80, 0x0d, 0x01, 0xc7, 0x47, 0x0a, 0xff, 0xff, - 0x8d, 0x45, 0x02, 0xff, 0x47, 0x0c, 0xe8, 0xfe, 0xf0, 0xb8, 0x01, 0x00, - 0xe9, 0x72, 0xff, 0x39, 0xf3, 0x76, 0x05, 0x8b, 0x5f, 0x04, 0xeb, 0xb1, - 0x8b, 0x07, 0x01, 0xd8, 0x05, 0x02, 0x00, 0x39, 0xf0, 0x73, 0xb0, 0xeb, - 0xee, 0x8b, 0x46, 0xfe, 0x3d, 0x1c, 0x00, 0x73, 0x03, 0xe9, 0x4f, 0xff, - 0x89, 0x04, 0x89, 0xf0, 0x89, 0xf3, 0xe8, 0x64, 0xfe, 0x89, 0xc7, 0xeb, - 0xbb, 0x53, 0x52, 0x56, 0x57, 0x80, 0x26, 0x75, 0x06, 0xf8, 0xbe, 0x52, - 0x06, 0x80, 0x0e, 0x75, 0x06, 0x04, 0x8b, 0x44, 0x06, 0x85, 0xc0, 0x75, - 0x08, 0xa3, 0xc6, 0x0a, 0x5f, 0x5e, 0x5a, 0x5b, 0xc3, 0xb8, 0x0c, 0x00, - 0xe8, 0xeb, 0xef, 0x85, 0xc0, 0x74, 0x2a, 0x89, 0xc7, 0xa1, 0xc4, 0x0a, - 0x89, 0x75, 0x02, 0x89, 0x05, 0x89, 0x7c, 0x04, 0xc7, 0x45, 0x04, 0x00, - 0x00, 0x89, 0x3e, 0xc4, 0x0a, 0x8b, 0x7c, 0x04, 0xc6, 0x45, 0x0a, 0x00, - 0x8b, 0x7c, 0x04, 0x83, 0xc6, 0x0e, 0xc7, 0x45, 0x06, 0x00, 0x00, 0xeb, - 0xbd, 0xb8, 0x0c, 0x00, 0xe8, 0xb7, 0xef, 0x89, 0xc7, 0x85, 0xc0, 0x75, - 0xcc, 0xbb, 0x01, 0x00, 0xb8, 0x74, 0x04, 0x8c, 0xda, 0xe9, 0x00, 0x0a, - 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0xd1, - 0xe0, 0xb1, 0x03, 0x89, 0xc2, 0xd3, 0xe0, 0x8b, 0x1e, 0xc4, 0x0a, 0x29, - 0xd0, 0xba, 0x52, 0x06, 0x31, 0xf6, 0x01, 0xc2, 0x31, 0xc9, 0x89, 0x56, - 0xfe, 0x85, 0xdb, 0x74, 0x2e, 0x8b, 0x3f, 0x8b, 0x5f, 0x02, 0x8a, 0x47, - 0x07, 0xba, 0x01, 0x00, 0xa8, 0x40, 0x74, 0x0c, 0x89, 0xd8, 0xe8, 0x42, - 0xf6, 0x41, 0x09, 0xc6, 0x89, 0xfb, 0xeb, 0xe1, 0xa8, 0x08, 0x75, 0xf0, - 0x3b, 0x5e, 0xfe, 0x72, 0xf3, 0x81, 0xfb, 0x98, 0x06, 0x73, 0xe5, 0x31, - 0xd2, 0xeb, 0xe1, 0x85, 0xf6, 0x74, 0x0e, 0xbb, 0xff, 0xff, 0x89, 0xd8, - 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x89, 0xcb, 0xeb, - 0xf1, 0xb8, 0x05, 0x00, 0xeb, 0x8e, 0x31, 0xc0, 0xe8, 0x89, 0xff, 0xe9, - 0x6a, 0x04, 0x53, 0x89, 0xc3, 0x88, 0xd0, 0x8b, 0x17, 0x30, 0xe4, 0xe8, - 0xaa, 0x0c, 0xff, 0x47, 0x0a, 0x5b, 0xc3, 0x51, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, 0xd7, 0x89, 0xda, 0x8b, 0x5c, - 0x04, 0x8b, 0x47, 0x06, 0x3d, 0x01, 0x00, 0x74, 0x0c, 0x85, 0xc0, 0x74, - 0x03, 0xe9, 0x72, 0x00, 0xc7, 0x47, 0x06, 0x01, 0x00, 0x8b, 0x44, 0x06, - 0x30, 0xe4, 0x8b, 0x5c, 0x04, 0x24, 0x30, 0x80, 0x64, 0x06, 0xcf, 0x89, - 0x46, 0xfc, 0x83, 0x7f, 0x04, 0x00, 0x75, 0x05, 0x89, 0xf0, 0xe8, 0x0c, - 0x0d, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xf6, 0x44, 0x07, 0x04, 0x74, 0x0d, - 0x80, 0x64, 0x07, 0xfa, 0xc7, 0x46, 0xfe, 0x01, 0x00, 0x80, 0x4c, 0x07, - 0x01, 0xb9, 0x1a, 0x1e, 0x89, 0xd3, 0x89, 0xf0, 0x89, 0xfa, 0xe8, 0x54, - 0x0d, 0x89, 0xc2, 0x83, 0x7e, 0xfe, 0x00, 0x74, 0x0d, 0x80, 0x64, 0x07, - 0xfa, 0x89, 0xf0, 0x80, 0x4c, 0x07, 0x04, 0xe8, 0x0b, 0x07, 0xf6, 0x44, - 0x06, 0x20, 0x74, 0x03, 0xba, 0xff, 0xff, 0x8b, 0x46, 0xfc, 0x09, 0x44, - 0x06, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, 0x31, 0xc0, - 0xeb, 0xf5, 0xc7, 0x06, 0x7e, 0x07, 0x01, 0x00, 0xcb, 0xb8, 0xd2, 0x0a, - 0xc3, 0x3d, 0x41, 0x00, 0x7c, 0x08, 0x3d, 0x5a, 0x00, 0x7f, 0x03, 0x05, - 0x20, 0x00, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x89, - 0xc6, 0x89, 0x56, 0xfc, 0x89, 0x5e, 0xf8, 0x89, 0xcf, 0xc7, 0x46, 0xf6, - 0xff, 0xff, 0x80, 0x3c, 0x20, 0x75, 0x03, 0x46, 0xeb, 0xf8, 0x8b, 0x46, - 0xfc, 0x25, 0x83, 0x00, 0x8d, 0x5e, 0xf6, 0x89, 0xc2, 0x89, 0x46, 0xfa, - 0x0b, 0x56, 0xf8, 0x89, 0xf0, 0xe8, 0x40, 0x18, 0x85, 0xc0, 0x75, 0x09, - 0x8b, 0x46, 0xf6, 0x3b, 0x06, 0xb6, 0x07, 0x73, 0x50, 0xf6, 0x46, 0xfc, - 0x03, 0x74, 0x35, 0x8b, 0x46, 0xf6, 0x3d, 0xff, 0xff, 0x74, 0x2d, 0xe8, - 0x62, 0x18, 0x85, 0xc0, 0x75, 0x26, 0xf6, 0x46, 0xfd, 0x04, 0x74, 0x06, - 0xf6, 0x46, 0xfc, 0x20, 0x75, 0x45, 0xf6, 0x46, 0xfc, 0x40, 0x74, 0x14, - 0x8d, 0x56, 0xfe, 0x8b, 0x5e, 0xf6, 0x31, 0xc9, 0xb4, 0x40, 0xcd, 0x21, - 0x19, 0xd2, 0x89, 0xc1, 0x85, 0xd2, 0x7c, 0x42, 0x83, 0x7e, 0xf6, 0xff, - 0x75, 0x4c, 0xf6, 0x46, 0xfc, 0x20, 0x75, 0x48, 0xb8, 0xff, 0xff, 0x89, - 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, - 0xd2, 0xe8, 0x51, 0xff, 0x89, 0xc6, 0xb8, 0xff, 0xff, 0xc7, 0x04, 0x0b, - 0x00, 0xeb, 0xe4, 0x8b, 0x5e, 0xf6, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, - 0xe8, 0x3a, 0xff, 0x89, 0xc6, 0xb8, 0xff, 0xff, 0xc7, 0x04, 0x07, 0x00, - 0xeb, 0xcd, 0x8b, 0x5e, 0xf6, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x89, - 0xc8, 0xe8, 0x10, 0x18, 0xeb, 0xbd, 0xeb, 0x4d, 0xe8, 0x73, 0x18, 0x89, - 0xc3, 0x8b, 0x07, 0x3d, 0x02, 0x00, 0x75, 0xac, 0x01, 0x05, 0x8b, 0x1d, - 0x8b, 0x47, 0xfe, 0xc7, 0x05, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x03, 0xb8, - 0x80, 0x01, 0x8b, 0x16, 0xf6, 0x07, 0xf7, 0xd2, 0x21, 0xd0, 0x31, 0xd2, - 0xa8, 0x80, 0x75, 0x03, 0xba, 0x01, 0x00, 0x8d, 0x5e, 0xf6, 0x89, 0xf0, - 0xe8, 0x43, 0x18, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x7a, 0xff, 0x8b, 0x46, - 0xf6, 0x3b, 0x06, 0xb6, 0x07, 0x73, 0x63, 0x83, 0x7e, 0xf8, 0x00, 0x75, - 0x68, 0x8b, 0x46, 0xf6, 0xe8, 0x65, 0x17, 0x24, 0x3c, 0x89, 0xc2, 0x8b, - 0x46, 0xf6, 0xe8, 0x87, 0x17, 0x85, 0xc0, 0x74, 0x03, 0x80, 0xce, 0x20, - 0x80, 0x66, 0xfa, 0x7f, 0x83, 0x7e, 0xfa, 0x02, 0x75, 0x03, 0x80, 0xca, - 0x03, 0x83, 0x7e, 0xfa, 0x00, 0x75, 0x03, 0x80, 0xca, 0x01, 0x83, 0x7e, - 0xfa, 0x01, 0x75, 0x03, 0x80, 0xca, 0x02, 0xf6, 0x46, 0xfc, 0x10, 0x74, - 0x03, 0x80, 0xca, 0x80, 0x89, 0xd0, 0x0c, 0x40, 0xf6, 0x46, 0xfd, 0x03, - 0x74, 0x46, 0xf6, 0x46, 0xfd, 0x02, 0x74, 0x02, 0x89, 0xc2, 0x8b, 0x46, - 0xf6, 0xe8, 0x9a, 0x18, 0x8b, 0x46, 0xf6, 0xe9, 0x11, 0xff, 0x89, 0xc3, - 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0xe9, 0x14, 0xff, 0x89, 0xc3, 0xb4, - 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7d, 0x03, 0xe9, 0x35, 0xff, - 0x8b, 0x56, 0xfa, 0x8d, 0x5e, 0xf6, 0x89, 0xf0, 0x0b, 0x56, 0xf8, 0xe8, - 0xd2, 0x16, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x74, 0xff, 0xe9, 0xdc, 0xfe, - 0x81, 0x3e, 0x80, 0x07, 0x00, 0x02, 0x75, 0xba, 0xeb, 0xb6, 0x53, 0x55, - 0x89, 0xe5, 0x8d, 0x5e, 0x0a, 0x8b, 0x07, 0x50, 0x31, 0xc0, 0x50, 0xff, - 0x76, 0x08, 0xff, 0x76, 0x06, 0x83, 0xc3, 0x02, 0xe8, 0x06, 0x00, 0x83, - 0xc4, 0x08, 0x5d, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0x83, - 0xec, 0x02, 0x8d, 0x46, 0x10, 0x8d, 0x4e, 0xfe, 0x8b, 0x5e, 0x0e, 0x8b, - 0x56, 0x0c, 0x89, 0x46, 0xfe, 0x8b, 0x46, 0x0a, 0xe8, 0x0c, 0xfe, 0x89, - 0xec, 0x5d, 0x5a, 0x59, 0x5b, 0xc3, 0x51, 0x56, 0x57, 0x89, 0xc1, 0x89, - 0xd6, 0x8b, 0x47, 0x02, 0x99, 0x39, 0xd6, 0x7c, 0x06, 0x75, 0x17, 0x39, - 0xc1, 0x77, 0x13, 0x8b, 0x7f, 0x04, 0x8b, 0x45, 0x04, 0x2b, 0x07, 0x99, - 0x39, 0xd6, 0x7f, 0x0d, 0x75, 0x04, 0x39, 0xc1, 0x73, 0x07, 0xb8, 0x01, - 0x00, 0x5f, 0x5e, 0x59, 0xc3, 0x80, 0x67, 0x06, 0xef, 0x01, 0x0f, 0x31, - 0xc0, 0x29, 0x4f, 0x02, 0xeb, 0xef, 0x53, 0x56, 0x89, 0xc3, 0x8b, 0x77, - 0x04, 0x80, 0x67, 0x06, 0xef, 0x8b, 0x74, 0x04, 0xc7, 0x47, 0x02, 0x00, - 0x00, 0x89, 0x37, 0x5e, 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, - 0xec, 0x0a, 0x89, 0xc6, 0x89, 0xdf, 0x89, 0x56, 0xfe, 0xf6, 0x44, 0x06, - 0x06, 0x74, 0x5e, 0xf6, 0x44, 0x07, 0x10, 0x75, 0x3c, 0x83, 0xfa, 0x01, - 0x75, 0x08, 0x8b, 0x44, 0x02, 0x99, 0x29, 0xc7, 0x19, 0xd1, 0x8b, 0x5c, - 0x04, 0x8b, 0x47, 0x04, 0xc7, 0x44, 0x02, 0x00, 0x00, 0x89, 0x04, 0x8b, - 0x56, 0xfe, 0x89, 0xfb, 0x8b, 0x44, 0x08, 0x80, 0x64, 0x06, 0xeb, 0xe8, - 0xcd, 0x17, 0x83, 0xfa, 0xff, 0x75, 0x28, 0x3d, 0xff, 0xff, 0x75, 0x23, - 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0xe8, 0x2d, 0x04, - 0x85, 0xc0, 0x74, 0xd7, 0x85, 0xd2, 0x75, 0xec, 0x85, 0xc9, 0x7d, 0xe8, - 0xe8, 0x36, 0xfd, 0x89, 0xc6, 0xc7, 0x04, 0x09, 0x00, 0xeb, 0xdd, 0xeb, - 0x57, 0x83, 0xfa, 0x02, 0x74, 0x56, 0x83, 0xfa, 0x01, 0x74, 0x55, 0x85, - 0xd2, 0x75, 0x4f, 0x8b, 0x44, 0x08, 0xe8, 0xb5, 0x17, 0x89, 0x46, 0xf6, - 0x8b, 0x44, 0x02, 0x89, 0xd3, 0x99, 0x89, 0x56, 0xf8, 0x8b, 0x56, 0xf6, - 0x29, 0xc2, 0x89, 0xd0, 0x89, 0xfa, 0x1b, 0x5e, 0xf8, 0x29, 0xc2, 0x89, - 0xd0, 0x89, 0xca, 0x19, 0xda, 0x89, 0xf3, 0xe8, 0x00, 0xff, 0x85, 0xc0, - 0x74, 0x1a, 0x8b, 0x56, 0xfe, 0x89, 0xfb, 0x8b, 0x44, 0x08, 0xe8, 0x56, - 0x17, 0x83, 0xfa, 0xff, 0x75, 0x05, 0x3d, 0xff, 0xff, 0x74, 0x89, 0x89, - 0xf0, 0xe8, 0x1e, 0xff, 0x31, 0xc0, 0xeb, 0x83, 0xeb, 0x29, 0xeb, 0x30, - 0x8b, 0x44, 0x02, 0x99, 0x89, 0xf3, 0x89, 0x46, 0xfa, 0x89, 0x56, 0xfc, - 0x89, 0xf8, 0x89, 0xca, 0xe8, 0xc7, 0xfe, 0x85, 0xc0, 0x74, 0xe1, 0x8b, - 0x56, 0xfe, 0x89, 0xfb, 0x8b, 0x44, 0x08, 0x2b, 0x5e, 0xfa, 0x1b, 0x4e, - 0xfc, 0xeb, 0xbf, 0xe8, 0xec, 0xfe, 0x8b, 0x44, 0x08, 0xe9, 0x3f, 0xff, - 0xe8, 0x9a, 0xfc, 0x89, 0xc6, 0xb8, 0xff, 0xff, 0xc7, 0x04, 0x09, 0x00, - 0xe9, 0x40, 0xff, 0x53, 0x89, 0xc3, 0xf6, 0x47, 0x07, 0x20, 0x74, 0x02, - 0x5b, 0xc3, 0x8b, 0x47, 0x08, 0xe8, 0x44, 0x15, 0x85, 0xc0, 0x74, 0xf4, - 0x80, 0x4f, 0x07, 0x20, 0xf6, 0x47, 0x07, 0x07, 0x75, 0xea, 0x80, 0x4f, - 0x07, 0x02, 0x5b, 0xc3, 0x53, 0x56, 0xbe, 0xc4, 0x0a, 0x8b, 0x1c, 0x85, - 0xdb, 0x74, 0x16, 0x3b, 0x47, 0x02, 0x74, 0x04, 0x89, 0xde, 0xeb, 0xf1, - 0x8b, 0x07, 0x89, 0x04, 0xa1, 0xc6, 0x0a, 0x89, 0x1e, 0xc6, 0x0a, 0x89, - 0x07, 0x5e, 0x5b, 0xc3, 0x53, 0x8b, 0x1e, 0xc6, 0x0a, 0x85, 0xdb, 0x75, - 0x02, 0x5b, 0xc3, 0x8b, 0x07, 0xa3, 0xc6, 0x0a, 0x89, 0xd8, 0xe8, 0x66, - 0xeb, 0xeb, 0xea, 0x53, 0x51, 0x52, 0x56, 0x57, 0x8b, 0x36, 0xc6, 0x0a, - 0x85, 0xf6, 0x75, 0x14, 0xbb, 0x52, 0x06, 0x81, 0xfb, 0x6a, 0x07, 0x73, - 0x55, 0xf6, 0x47, 0x06, 0x03, 0x74, 0x3f, 0x83, 0xc3, 0x0e, 0xeb, 0xef, - 0x8b, 0x04, 0x8b, 0x5c, 0x02, 0xa3, 0xc6, 0x0a, 0x8b, 0x57, 0x06, 0xb9, - 0x0e, 0x00, 0x89, 0xdf, 0x30, 0xc0, 0x57, 0x1e, 0x07, 0x8a, 0xe0, 0xd1, - 0xe9, 0xf3, 0xab, 0x13, 0xc9, 0xf3, 0xaa, 0x5f, 0x89, 0x57, 0x06, 0x89, - 0x5c, 0x02, 0xa1, 0xc4, 0x0a, 0x89, 0x77, 0x04, 0x89, 0x36, 0xc4, 0x0a, - 0x89, 0x04, 0x89, 0xd8, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xb8, 0x0c, - 0x00, 0xe8, 0x4a, 0xea, 0x89, 0xc6, 0x85, 0xc0, 0x74, 0x18, 0x31, 0xd2, - 0xeb, 0xc1, 0xb8, 0x1a, 0x00, 0xe8, 0x3a, 0xea, 0x89, 0xc6, 0x85, 0xc0, - 0x74, 0x08, 0xba, 0x00, 0x40, 0x8d, 0x5c, 0x0c, 0xeb, 0xad, 0xe8, 0xac, - 0xfb, 0x89, 0xc3, 0xc7, 0x07, 0x05, 0x00, 0x31, 0xc3, 0xeb, 0xc7, 0x53, - 0x56, 0x57, 0x89, 0xc3, 0x8b, 0x37, 0x8b, 0x7f, 0x0a, 0x3b, 0x7c, 0x02, - 0x73, 0x10, 0x8b, 0x3c, 0x8d, 0x45, 0x01, 0x89, 0x04, 0x88, 0x15, 0xff, - 0x47, 0x0a, 0x5f, 0x5e, 0x5b, 0xc3, 0xc7, 0x44, 0x04, 0xff, 0xff, 0xeb, - 0xf5, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc7, 0x89, - 0xd6, 0x89, 0xda, 0x89, 0xcb, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xb9, 0x27, - 0x23, 0x89, 0x46, 0xfa, 0x8d, 0x46, 0xfa, 0x89, 0x76, 0xfc, 0xe8, 0x74, - 0x08, 0x89, 0xc2, 0x39, 0xf0, 0x72, 0x0e, 0x83, 0x7e, 0xfe, 0x00, 0x75, - 0x0f, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x01, 0xc7, 0xc6, - 0x05, 0x00, 0xeb, 0xeb, 0xb8, 0xff, 0xff, 0xeb, 0xee, 0x53, 0x51, 0x52, - 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x8d, 0x46, 0x10, 0x8d, 0x4e, 0xfe, - 0x8b, 0x5e, 0x0e, 0x8b, 0x56, 0x0c, 0x89, 0x46, 0xfe, 0x8b, 0x46, 0x0a, - 0xe8, 0x9e, 0xff, 0x89, 0xec, 0x5d, 0x5a, 0x59, 0x5b, 0xc3, 0x80, 0x3e, - 0x82, 0x07, 0x00, 0x75, 0x03, 0x31, 0xc0, 0xc3, 0x52, 0x50, 0xcc, 0xeb, - 0x06, 0x57, 0x56, 0x49, 0x44, 0x45, 0x4f, 0xb8, 0x01, 0x00, 0x83, 0xc4, - 0x04, 0xc3, 0x8b, 0xc4, 0x2b, 0x06, 0x8e, 0x07, 0xc3, 0x53, 0x89, 0xd3, - 0xba, 0x6e, 0x06, 0xe8, 0x93, 0x15, 0xba, 0x6e, 0x06, 0xb8, 0xa2, 0x04, - 0xe8, 0x8a, 0x15, 0xba, 0x6e, 0x06, 0x89, 0xd8, 0xe8, 0x82, 0x15, 0x5b, - 0xc3, 0x83, 0x3e, 0x84, 0x07, 0x00, 0x74, 0x04, 0xff, 0x16, 0x84, 0x07, - 0xe8, 0x00, 0x00, 0x53, 0x52, 0xbb, 0xff, 0x00, 0xb8, 0xa6, 0x04, 0x8c, - 0xda, 0xe9, 0x90, 0x03, 0x53, 0x52, 0x56, 0x89, 0xc6, 0x8b, 0x5c, 0x04, - 0x83, 0x7f, 0x04, 0x00, 0x74, 0x4c, 0x8a, 0x44, 0x07, 0xa8, 0x20, 0x74, - 0x0a, 0xa8, 0x06, 0x74, 0x06, 0xb8, 0x00, 0x20, 0xe8, 0x6e, 0x02, 0x8b, - 0x5c, 0x04, 0x80, 0x64, 0x06, 0xfb, 0x8b, 0x47, 0x04, 0x89, 0x04, 0x8b, - 0x44, 0x06, 0x30, 0xc0, 0x80, 0xe4, 0x24, 0x3d, 0x00, 0x24, 0x75, 0x32, - 0x8b, 0x44, 0x08, 0x85, 0xc0, 0x75, 0x2b, 0x89, 0x44, 0x02, 0xe8, 0x96, - 0x15, 0x89, 0xc2, 0x3d, 0xff, 0xff, 0x75, 0x13, 0x8b, 0x44, 0x02, 0x85, - 0xc0, 0x7e, 0x32, 0x8b, 0x44, 0x02, 0x5e, 0x5a, 0x5b, 0xc3, 0xe8, 0x0c, - 0x07, 0xeb, 0xaf, 0x8b, 0x1c, 0x88, 0x07, 0xc7, 0x44, 0x02, 0x01, 0x00, - 0xeb, 0xe9, 0xf6, 0x44, 0x07, 0x04, 0x74, 0x10, 0xbb, 0x01, 0x00, 0x8b, - 0x14, 0x8b, 0x44, 0x08, 0xe8, 0x75, 0x15, 0x89, 0x44, 0x02, 0xeb, 0xcc, - 0x8b, 0x5c, 0x0a, 0xeb, 0xee, 0x75, 0x06, 0x80, 0x4c, 0x06, 0x10, 0xeb, - 0xc6, 0xc7, 0x44, 0x02, 0x00, 0x00, 0x80, 0x4c, 0x06, 0x20, 0xeb, 0xbb, - 0x53, 0x89, 0xc3, 0xe8, 0x62, 0xff, 0x85, 0xc0, 0x75, 0x05, 0xb8, 0xff, - 0xff, 0x5b, 0xc3, 0xff, 0x4f, 0x02, 0xff, 0x07, 0x8b, 0x1f, 0x8a, 0x47, - 0xff, 0x30, 0xe4, 0x5b, 0xc3, 0x53, 0x56, 0x89, 0xc3, 0x8b, 0x77, 0x04, - 0x8b, 0x44, 0x06, 0x3d, 0x01, 0x00, 0x74, 0x09, 0x85, 0xc0, 0x75, 0x47, - 0xc7, 0x44, 0x06, 0x01, 0x00, 0xf6, 0x47, 0x06, 0x01, 0x75, 0x42, 0xe8, - 0xe3, 0xf9, 0x89, 0xc6, 0xc7, 0x04, 0x04, 0x00, 0xb8, 0xff, 0xff, 0x80, - 0x4f, 0x06, 0x20, 0xf6, 0x47, 0x06, 0x40, 0x75, 0x23, 0x3d, 0x0d, 0x00, - 0x75, 0x12, 0xff, 0x4f, 0x02, 0x83, 0x7f, 0x02, 0x00, 0x7c, 0x39, 0x8b, - 0x37, 0x8a, 0x04, 0x46, 0x30, 0xe4, 0x89, 0x37, 0x3d, 0x1a, 0x00, 0x75, - 0x07, 0xb8, 0xff, 0xff, 0x80, 0x4f, 0x06, 0x10, 0x5e, 0x5b, 0xc3, 0xb8, - 0xff, 0xff, 0x5e, 0x5b, 0xc3, 0xff, 0x4f, 0x02, 0x83, 0x7f, 0x02, 0x00, - 0x7c, 0x0b, 0x8b, 0x37, 0x8a, 0x04, 0x46, 0x30, 0xe4, 0x89, 0x37, 0xeb, - 0xba, 0x89, 0xd8, 0xe8, 0x6a, 0xff, 0xeb, 0xb3, 0x89, 0xd8, 0xe8, 0x63, - 0xff, 0xeb, 0xc9, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, - 0xc6, 0x8d, 0x7e, 0xfc, 0x88, 0xd0, 0x89, 0xda, 0x89, 0xf3, 0xb4, 0x42, - 0xcd, 0x21, 0x36, 0x89, 0x05, 0x36, 0x89, 0x55, 0x02, 0xd1, 0xd2, 0xd1, - 0xca, 0x85, 0xd2, 0x7c, 0x0c, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0x89, - 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0xe8, 0x3c, 0x12, 0x99, 0xeb, 0xf4, 0x53, - 0x51, 0x52, 0x56, 0x89, 0xc1, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, - 0xd2, 0x31, 0xf6, 0x85, 0xd2, 0x7f, 0x02, 0x75, 0x0e, 0x89, 0xc8, 0x31, - 0xd2, 0xe8, 0xdf, 0x11, 0x89, 0xf0, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xe8, - 0x23, 0xf9, 0x89, 0xc6, 0xc7, 0x04, 0x04, 0x00, 0xbe, 0xff, 0xff, 0xeb, - 0xe4, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, - 0x89, 0xc6, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xf6, 0x44, 0x07, 0x10, 0x74, - 0x03, 0xe9, 0x6c, 0x00, 0x8b, 0x5c, 0x04, 0x83, 0x7f, 0x04, 0x00, 0x74, - 0x3b, 0x80, 0x64, 0x06, 0xef, 0xf6, 0x44, 0x07, 0x20, 0x75, 0x31, 0x8b, - 0x44, 0x02, 0x99, 0x89, 0xd3, 0x09, 0xc3, 0x74, 0x14, 0x89, 0xd1, 0x89, - 0xc3, 0xba, 0x01, 0x00, 0xf7, 0xd9, 0x8b, 0x44, 0x08, 0xf7, 0xdb, 0x83, - 0xd9, 0x00, 0xe8, 0x4a, 0xff, 0x83, 0xfa, 0xff, 0x75, 0x0e, 0x3d, 0xff, - 0xff, 0x75, 0x09, 0xc7, 0x46, 0xfe, 0xff, 0xff, 0x80, 0x4c, 0x06, 0x20, - 0x8b, 0x5c, 0x04, 0x8b, 0x47, 0x04, 0xc7, 0x44, 0x02, 0x00, 0x00, 0x89, - 0x04, 0x83, 0x7e, 0xfe, 0x00, 0x75, 0x09, 0x8b, 0x5c, 0x04, 0xf6, 0x47, - 0x08, 0x01, 0x75, 0x61, 0x8b, 0x46, 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0x5a, 0x59, 0x5b, 0xc3, 0x80, 0x64, 0x07, 0xef, 0xf6, 0x44, 0x06, 0x02, - 0x74, 0xce, 0x8b, 0x7c, 0x04, 0x8b, 0x45, 0x04, 0x85, 0xc0, 0x74, 0xc4, - 0x89, 0xc7, 0x8b, 0x4c, 0x02, 0x85, 0xc9, 0x74, 0xbb, 0x83, 0x7e, 0xfe, - 0x00, 0x75, 0xb5, 0x89, 0xcb, 0x89, 0xfa, 0x8b, 0x44, 0x08, 0xe8, 0xb1, - 0x13, 0x89, 0xc2, 0x3d, 0xff, 0xff, 0x75, 0x0d, 0x89, 0x46, 0xfe, 0x80, - 0x4c, 0x06, 0x20, 0x01, 0xd7, 0x29, 0xd1, 0xeb, 0xd8, 0x85, 0xc0, 0x75, - 0xf6, 0xe8, 0x49, 0xf8, 0x89, 0xc3, 0xc7, 0x07, 0x0c, 0x00, 0xc7, 0x46, - 0xfe, 0xff, 0xff, 0xeb, 0xe2, 0x8b, 0x44, 0x08, 0xe8, 0xdc, 0x13, 0x3d, - 0xff, 0xff, 0x75, 0x94, 0x89, 0x46, 0xfe, 0xeb, 0x8f, 0x53, 0x51, 0x52, - 0x56, 0x89, 0xc1, 0x8b, 0x36, 0xc4, 0x0a, 0x31, 0xd2, 0x85, 0xf6, 0x74, - 0x1a, 0x8b, 0x5c, 0x02, 0x85, 0x4f, 0x06, 0x75, 0x04, 0x8b, 0x34, 0xeb, - 0xf0, 0x42, 0xf6, 0x47, 0x07, 0x10, 0x74, 0xf5, 0x89, 0xd8, 0xe8, 0xec, - 0xfe, 0xeb, 0xee, 0x89, 0xd0, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xb8, 0xff, - 0xff, 0xeb, 0xca, 0x53, 0x56, 0x89, 0xc3, 0x8b, 0x37, 0x8d, 0x44, 0x01, - 0x89, 0x07, 0x88, 0x14, 0xff, 0x47, 0x0a, 0x5e, 0x5b, 0xc3, 0x51, 0x56, - 0x89, 0xc6, 0xb9, 0xd3, 0x26, 0xe8, 0xf5, 0x04, 0x01, 0xc6, 0xc6, 0x04, - 0x00, 0x5e, 0x59, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x57, 0x89, 0xc7, 0x8b, - 0x36, 0xde, 0x0a, 0x85, 0xf6, 0x74, 0x5e, 0x85, 0xc0, 0x74, 0x5a, 0x8b, - 0x14, 0x85, 0xd2, 0x74, 0x54, 0x89, 0xfb, 0x89, 0xd0, 0xe8, 0x5a, 0x13, - 0x85, 0xc0, 0x74, 0x05, 0x83, 0xc6, 0x02, 0xeb, 0xea, 0x89, 0xd8, 0xe8, - 0x4c, 0x13, 0x85, 0xc0, 0x75, 0x26, 0x89, 0xd0, 0xe8, 0x7a, 0x13, 0xe8, - 0xa1, 0x13, 0x89, 0xc1, 0x89, 0xd8, 0xe8, 0x70, 0x13, 0xe8, 0x97, 0x13, - 0x29, 0xc1, 0x75, 0xdc, 0x89, 0xd0, 0xe8, 0xa2, 0x13, 0x89, 0xc2, 0x89, - 0xd8, 0xe8, 0x9b, 0x13, 0x89, 0xc3, 0xeb, 0xc3, 0x89, 0xd0, 0xe8, 0x54, - 0x13, 0x3d, 0x3d, 0x00, 0x75, 0xc2, 0x89, 0xd0, 0xe8, 0x88, 0x13, 0x5f, - 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x31, 0xc0, 0xeb, 0xf6, 0x53, 0x89, 0xc3, - 0x84, 0xd2, 0x74, 0x0f, 0xc6, 0x07, 0x2f, 0xc6, 0x47, 0x01, 0x63, 0x89, - 0xd8, 0xc6, 0x47, 0x02, 0x00, 0x5b, 0xc3, 0xb8, 0x00, 0x37, 0xcd, 0x21, - 0x88, 0x17, 0xeb, 0xeb, 0x53, 0x52, 0x55, 0x89, 0xe5, 0x8b, 0x46, 0x08, - 0x8d, 0x5e, 0x0c, 0x8b, 0x56, 0x0a, 0xe8, 0x7a, 0x13, 0x5d, 0x5a, 0x5b, - 0xc3, 0xe9, 0xd9, 0xf0, 0x89, 0xc1, 0x89, 0xd6, 0xe8, 0x0f, 0xfc, 0x85, - 0xc0, 0x75, 0x07, 0x89, 0xc8, 0x89, 0xf2, 0xe9, 0xc7, 0xf0, 0x89, 0xd8, - 0xe9, 0xa5, 0xf0, 0x52, 0x8b, 0x16, 0xe2, 0x0a, 0xa1, 0xe0, 0x0a, 0xe8, - 0x19, 0xe5, 0xe9, 0x59, 0x13, 0x53, 0x52, 0x55, 0x89, 0xe5, 0x89, 0xc3, - 0x83, 0x3f, 0x00, 0x75, 0x06, 0x89, 0xec, 0x5d, 0x5a, 0x5b, 0xc3, 0x1e, - 0xff, 0x17, 0x1f, 0xeb, 0xf4, 0x53, 0x55, 0x89, 0xe5, 0x89, 0xc3, 0x8e, - 0xc2, 0x26, 0x8b, 0x47, 0x02, 0x26, 0x8b, 0x17, 0x85, 0xc0, 0x75, 0x09, - 0x85, 0xd2, 0x75, 0x05, 0x89, 0xec, 0x5d, 0x5b, 0xc3, 0x1e, 0x26, 0xff, - 0x1f, 0x1f, 0xeb, 0xf4, 0xe8, 0x01, 0x00, 0xcb, 0x53, 0x51, 0x52, 0x56, - 0x57, 0x55, 0x89, 0xe5, 0x89, 0xc1, 0x1e, 0xe8, 0x2d, 0xf1, 0xbf, 0x62, - 0x08, 0xbb, 0x44, 0x08, 0x89, 0xfe, 0x88, 0xc8, 0x81, 0xfb, 0x62, 0x08, - 0x73, 0x16, 0x80, 0x3f, 0x02, 0x75, 0x05, 0x83, 0xc3, 0x06, 0xeb, 0xf0, - 0x3a, 0x47, 0x01, 0x72, 0xf6, 0x89, 0xde, 0x8a, 0x47, 0x01, 0xeb, 0xef, - 0x81, 0xfe, 0x62, 0x08, 0x74, 0x17, 0x8d, 0x44, 0x02, 0x80, 0x3c, 0x00, - 0x75, 0x08, 0xe8, 0x7c, 0xff, 0xc6, 0x04, 0x02, 0xeb, 0xc7, 0x8c, 0xda, - 0xe8, 0x8a, 0xff, 0xeb, 0xf4, 0x1f, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, - 0x59, 0x5b, 0xc3, 0xe8, 0x01, 0x00, 0xcb, 0x53, 0x51, 0x56, 0x57, 0x55, - 0x89, 0xe5, 0x89, 0xc1, 0x1e, 0x88, 0xcd, 0xe8, 0xcd, 0xf0, 0x88, 0xd1, - 0xbf, 0x7a, 0x08, 0xbb, 0x62, 0x08, 0x89, 0xfe, 0x88, 0xe8, 0x81, 0xfb, - 0x7a, 0x08, 0x73, 0x16, 0x80, 0x3f, 0x02, 0x75, 0x05, 0x83, 0xc3, 0x06, - 0xeb, 0xf0, 0x3a, 0x47, 0x01, 0x77, 0xf6, 0x89, 0xde, 0x8a, 0x47, 0x01, - 0xeb, 0xef, 0x81, 0xfe, 0x7a, 0x08, 0x74, 0x1e, 0x3a, 0x4c, 0x01, 0x73, - 0x05, 0xc6, 0x04, 0x02, 0xeb, 0xcd, 0x8d, 0x44, 0x02, 0x80, 0x3c, 0x00, - 0x75, 0x05, 0xe8, 0x10, 0xff, 0xeb, 0xee, 0x8c, 0xda, 0xe8, 0x21, 0xff, - 0xeb, 0xe7, 0x1f, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x00, - 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x50, 0x89, 0xd6, - 0x89, 0x4e, 0xfe, 0x89, 0xda, 0x31, 0xc9, 0x8a, 0x04, 0x3c, 0x20, 0x75, - 0x03, 0x46, 0xeb, 0xf7, 0x3c, 0x09, 0x74, 0xf9, 0x84, 0xc0, 0x74, 0x49, - 0x30, 0xc0, 0x80, 0x3c, 0x22, 0x74, 0x19, 0x89, 0x76, 0xfc, 0x89, 0xf3, - 0x80, 0x3c, 0x22, 0x75, 0x3b, 0x83, 0x7e, 0xfa, 0x00, 0x75, 0x12, 0x46, - 0x84, 0xc0, 0x75, 0x09, 0xb0, 0x02, 0xeb, 0xec, 0xb0, 0x01, 0x46, 0xeb, - 0xe2, 0x30, 0xc0, 0xeb, 0xe3, 0x3c, 0x01, 0x75, 0x1f, 0x85, 0xd2, 0x74, - 0x58, 0x89, 0xcf, 0xd1, 0xe7, 0x01, 0xd7, 0x8b, 0x46, 0xfc, 0x89, 0x05, - 0x8a, 0x04, 0x41, 0x84, 0xc0, 0x74, 0x48, 0x46, 0xc6, 0x07, 0x00, 0xeb, - 0xa6, 0xe9, 0x56, 0x00, 0x80, 0x3c, 0x20, 0x75, 0x28, 0x84, 0xc0, 0x74, - 0xd8, 0x80, 0x3c, 0x00, 0x74, 0xd3, 0x80, 0x3c, 0x5c, 0x75, 0x13, 0x83, - 0x7e, 0xfa, 0x00, 0x75, 0x1b, 0x80, 0x7c, 0x01, 0x22, 0x75, 0x07, 0x46, - 0x80, 0x7c, 0xfe, 0x5c, 0x74, 0x9a, 0x85, 0xd2, 0x75, 0x23, 0x46, 0xeb, - 0x93, 0x80, 0x3c, 0x09, 0x74, 0xd3, 0xeb, 0xd5, 0x80, 0x7c, 0x01, 0x22, - 0x75, 0x07, 0x46, 0xeb, 0xe9, 0xeb, 0x24, 0xeb, 0x13, 0x80, 0x7c, 0x01, - 0x5c, 0x75, 0xdf, 0x3c, 0x01, 0x74, 0xef, 0xeb, 0xd9, 0x8a, 0x24, 0x88, - 0x27, 0x43, 0xeb, 0xd6, 0x88, 0x07, 0x8b, 0x5e, 0xfe, 0x89, 0xc8, 0x89, - 0x37, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x41, 0x80, 0x3c, 0x00, 0x74, - 0xed, 0xe9, 0x3d, 0xff, 0x55, 0x89, 0xe5, 0x56, 0x57, 0x83, 0xec, 0x06, - 0x50, 0x52, 0x89, 0xde, 0x89, 0x4e, 0xf8, 0x8d, 0x4e, 0xf6, 0x89, 0xf2, - 0x31, 0xdb, 0xe8, 0x0c, 0xff, 0x8b, 0x56, 0xf6, 0x40, 0x29, 0xf2, 0xd1, - 0xe0, 0x89, 0xd1, 0x83, 0xc2, 0x02, 0x05, 0x02, 0x00, 0x80, 0xe2, 0xfe, - 0x01, 0xd0, 0x31, 0xff, 0x40, 0x41, 0x24, 0xfe, 0x89, 0xd3, 0xe8, 0x69, - 0xe3, 0x89, 0xc2, 0x89, 0x46, 0xfa, 0x31, 0xc0, 0x85, 0xd2, 0x75, 0x16, - 0x8b, 0x5e, 0xf8, 0x89, 0x07, 0x8b, 0x5e, 0x04, 0x8b, 0x46, 0xfa, 0x89, - 0x3f, 0x8d, 0x66, 0xfc, 0x5f, 0x5e, 0x5d, 0xc2, 0x02, 0x00, 0x89, 0xd7, - 0x57, 0x8c, 0xd8, 0x8e, 0xc0, 0xd1, 0xe9, 0xf3, 0xa5, 0x13, 0xc9, 0xf3, - 0xa4, 0x5f, 0x8b, 0x46, 0xf2, 0x01, 0xdf, 0x8d, 0x4e, 0xf6, 0x8d, 0x5d, - 0x02, 0x89, 0x05, 0x8b, 0x46, 0xf4, 0xe8, 0xa8, 0xfe, 0x40, 0x89, 0xc3, - 0xd1, 0xe3, 0x01, 0xfb, 0xc7, 0x07, 0x00, 0x00, 0xeb, 0xba, 0x53, 0x51, - 0x52, 0xb8, 0xcc, 0x0a, 0xb9, 0xca, 0x0a, 0x8b, 0x1e, 0xa7, 0x07, 0x8b, - 0x16, 0xab, 0x07, 0x50, 0xa1, 0xe4, 0x0a, 0xe8, 0x5e, 0xff, 0xa3, 0xd4, - 0x0a, 0xa1, 0xca, 0x0a, 0xa3, 0xce, 0x0a, 0xa3, 0xe0, 0x0a, 0xa1, 0xcc, - 0x0a, 0xa3, 0xd0, 0x0a, 0xa3, 0xe2, 0x0a, 0x5a, 0x59, 0x5b, 0xc3, 0xa1, - 0xd4, 0x0a, 0x85, 0xc0, 0x75, 0x01, 0xc3, 0xe9, 0x95, 0xe3, 0x52, 0x89, - 0xc2, 0xa1, 0xb4, 0x07, 0x89, 0x16, 0xb4, 0x07, 0x5a, 0xc3, 0x53, 0x51, - 0x52, 0x89, 0xc2, 0x3b, 0x06, 0x90, 0x07, 0x72, 0x3b, 0x89, 0xd3, 0xb1, - 0x04, 0x83, 0xc3, 0x0f, 0xd3, 0xeb, 0x8c, 0xd8, 0x85, 0xdb, 0x75, 0x03, - 0xbb, 0x00, 0x10, 0x80, 0x3e, 0x8c, 0x07, 0x00, 0x75, 0x0b, 0x8c, 0xd0, - 0x2b, 0x06, 0x88, 0x07, 0x01, 0xc3, 0xa1, 0x88, 0x07, 0x8e, 0xc0, 0xb4, - 0x4a, 0xcd, 0x21, 0x19, 0xc0, 0x85, 0xc0, 0x7c, 0x0b, 0xa1, 0x86, 0x07, - 0x89, 0x16, 0x86, 0x07, 0x5a, 0x59, 0x5b, 0xc3, 0xe8, 0x0a, 0xf4, 0x89, - 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x05, 0x00, 0xeb, 0xee, 0x03, 0x06, - 0x86, 0x07, 0xeb, 0xa6, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc1, 0x89, 0xd3, - 0x8b, 0x77, 0x04, 0x8b, 0x44, 0x06, 0x3d, 0x01, 0x00, 0x74, 0x0c, 0x85, - 0xc0, 0x74, 0x03, 0xe9, 0x6f, 0x00, 0xc7, 0x44, 0x06, 0x01, 0x00, 0xf6, - 0x47, 0x06, 0x02, 0x75, 0x03, 0xe9, 0x69, 0x00, 0x8b, 0x77, 0x04, 0x83, - 0x7c, 0x04, 0x00, 0x75, 0x05, 0x89, 0xd8, 0xe8, 0x73, 0x00, 0xbe, 0x00, - 0x04, 0x83, 0xf9, 0x0a, 0x75, 0x28, 0xbe, 0x00, 0x06, 0xf6, 0x47, 0x06, - 0x40, 0x75, 0x1f, 0x8b, 0x3f, 0x80, 0x4f, 0x07, 0x10, 0xc6, 0x05, 0x0d, - 0xff, 0x07, 0xff, 0x47, 0x02, 0x8b, 0x47, 0x02, 0x3b, 0x47, 0x0a, 0x75, - 0x09, 0x89, 0xd8, 0xe8, 0x7f, 0xfa, 0x85, 0xc0, 0x75, 0x23, 0x8b, 0x3f, - 0x80, 0x4f, 0x07, 0x10, 0x88, 0x0d, 0xff, 0x07, 0xff, 0x47, 0x02, 0x85, - 0x77, 0x06, 0x75, 0x08, 0x8b, 0x47, 0x02, 0x3b, 0x47, 0x0a, 0x75, 0x23, - 0x89, 0xd8, 0xe8, 0x5c, 0xfa, 0x85, 0xc0, 0x74, 0x1a, 0xb8, 0xff, 0xff, - 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xe8, 0x65, 0xf3, 0x89, 0xc6, 0xc7, 0x04, - 0x04, 0x00, 0xb8, 0xff, 0xff, 0x80, 0x4f, 0x06, 0x20, 0xeb, 0xe9, 0x88, - 0xc8, 0x30, 0xe4, 0xeb, 0xe3, 0x53, 0x56, 0x89, 0xc3, 0xe8, 0xbb, 0xf6, - 0x83, 0x7f, 0x0a, 0x00, 0x75, 0x0c, 0x8a, 0x47, 0x07, 0xa8, 0x02, 0x74, - 0x40, 0xc7, 0x47, 0x0a, 0x86, 0x00, 0x8b, 0x47, 0x0a, 0xe8, 0xae, 0xe1, - 0x8b, 0x77, 0x04, 0x89, 0x44, 0x04, 0x8b, 0x77, 0x04, 0x83, 0x7c, 0x04, - 0x00, 0x75, 0x38, 0x80, 0x67, 0x07, 0xf8, 0x8d, 0x47, 0x0c, 0x8b, 0x77, - 0x04, 0x80, 0x4f, 0x07, 0x04, 0x89, 0x44, 0x04, 0xc7, 0x47, 0x0a, 0x01, - 0x00, 0x8b, 0x77, 0x04, 0x8b, 0x44, 0x04, 0xc7, 0x47, 0x02, 0x00, 0x00, - 0x89, 0x07, 0x5e, 0x5b, 0xc3, 0xa8, 0x04, 0x74, 0x07, 0xc7, 0x47, 0x0a, - 0x40, 0x00, 0xeb, 0xba, 0xc7, 0x47, 0x0a, 0x00, 0x02, 0xeb, 0xb3, 0x80, - 0x4f, 0x06, 0x08, 0xeb, 0xd8, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, - 0x70, 0x89, 0xde, 0x89, 0x4e, 0xf8, 0xc6, 0x46, 0xfe, 0x00, 0xc7, 0x46, - 0xda, 0x00, 0x00, 0xc7, 0x46, 0xdc, 0xc8, 0x00, 0xc7, 0x46, 0xe2, 0x00, - 0x00, 0x89, 0x46, 0xd8, 0x89, 0x56, 0xfc, 0x8b, 0x5e, 0xfc, 0x8a, 0x07, - 0x84, 0xc0, 0x74, 0x6b, 0x8d, 0x4f, 0x01, 0x3c, 0x25, 0x74, 0x0e, 0x98, - 0x89, 0xc2, 0x8d, 0x46, 0xd8, 0x89, 0x4e, 0xfc, 0xff, 0x56, 0xf8, 0xeb, - 0xe2, 0x8d, 0x5e, 0xd8, 0x8b, 0x04, 0x8d, 0x56, 0xf4, 0x89, 0x46, 0xf4, - 0x89, 0xc8, 0xe8, 0xce, 0x01, 0x89, 0xc3, 0x8b, 0x46, 0xf4, 0x89, 0x04, - 0x8a, 0x07, 0x43, 0x88, 0x46, 0xf0, 0x89, 0x5e, 0xfc, 0x84, 0xc0, 0x74, - 0x32, 0x3c, 0x6e, 0x75, 0x50, 0x8a, 0x46, 0xdb, 0xa8, 0x04, 0x74, 0x17, - 0x83, 0x04, 0x04, 0x8b, 0x3c, 0xc4, 0x5d, 0xfc, 0x8a, 0x46, 0xda, 0xa8, - 0x10, 0x74, 0x1b, 0x8a, 0x46, 0xe2, 0x26, 0x88, 0x07, 0xeb, 0x9c, 0xa8, - 0x02, 0x83, 0x04, 0x02, 0x8c, 0xd8, 0x8b, 0x1c, 0x8e, 0xc0, 0x8b, 0x5f, - 0xfe, 0xeb, 0xe1, 0xe9, 0x7c, 0x01, 0xa8, 0x20, 0x74, 0x09, 0x8b, 0x46, - 0xe2, 0x26, 0x89, 0x07, 0xe9, 0x7c, 0xff, 0xa8, 0x40, 0x74, 0x10, 0x8b, - 0x46, 0xe2, 0x99, 0x26, 0x89, 0x07, 0x26, 0x89, 0x57, 0x02, 0xe9, 0x6a, - 0xff, 0xeb, 0x1f, 0xa8, 0x80, 0x74, 0xdf, 0x8b, 0x46, 0xe2, 0x99, 0x26, - 0x89, 0x07, 0xb1, 0x0f, 0x26, 0x89, 0x57, 0x02, 0x26, 0xd3, 0xfa, 0x26, - 0x89, 0x57, 0x04, 0x26, 0x89, 0x57, 0x06, 0xe9, 0x49, 0xff, 0x8d, 0x4e, - 0xfe, 0x8d, 0x5e, 0xd8, 0x8b, 0x04, 0x8d, 0x56, 0xf6, 0x89, 0x46, 0xf6, - 0x8d, 0x46, 0x90, 0xe8, 0x0e, 0x05, 0x89, 0xc7, 0x8b, 0x46, 0xf6, 0x89, - 0x04, 0x8b, 0x46, 0xe4, 0x03, 0x46, 0xe6, 0x03, 0x46, 0xe8, 0x03, 0x46, - 0xea, 0x03, 0x46, 0xec, 0x03, 0x46, 0xee, 0x89, 0x56, 0xfa, 0x29, 0x46, - 0xde, 0xf6, 0x46, 0xda, 0x08, 0x74, 0x1a, 0x8d, 0x5e, 0x90, 0x83, 0x7e, - 0xe4, 0x00, 0x7e, 0x2b, 0x8a, 0x07, 0x98, 0x89, 0xc2, 0x8d, 0x46, 0xd8, - 0x43, 0xff, 0x56, 0xf8, 0xff, 0x4e, 0xe4, 0xeb, 0xe9, 0x80, 0x7e, 0xf1, - 0x20, 0x75, 0xe0, 0x83, 0x7e, 0xde, 0x00, 0x7e, 0xda, 0xba, 0x20, 0x00, - 0x8d, 0x46, 0xd8, 0xff, 0x56, 0xf8, 0xff, 0x4e, 0xde, 0xeb, 0xec, 0x83, - 0x7e, 0xe6, 0x00, 0x7e, 0x0e, 0xba, 0x30, 0x00, 0x8d, 0x46, 0xd8, 0xff, - 0x56, 0xf8, 0xff, 0x4e, 0xe6, 0xeb, 0xec, 0x8a, 0x46, 0xf0, 0x3c, 0x73, - 0x75, 0x45, 0xf6, 0x46, 0xda, 0x40, 0x75, 0x1d, 0x83, 0x7e, 0xe8, 0x00, - 0x7e, 0x25, 0x8e, 0x46, 0xfa, 0x89, 0xfb, 0x26, 0x8a, 0x07, 0x98, 0x89, - 0xc2, 0x8d, 0x46, 0xd8, 0x47, 0xff, 0x56, 0xf8, 0xff, 0x4e, 0xe8, 0xeb, - 0xe3, 0x8b, 0x4e, 0xf8, 0x8d, 0x5e, 0xd8, 0x8b, 0x56, 0xfa, 0x89, 0xf8, - 0xe8, 0x14, 0x04, 0x83, 0x7e, 0xea, 0x00, 0x7e, 0x2f, 0xba, 0x30, 0x00, - 0x8d, 0x46, 0xd8, 0xff, 0x56, 0xf8, 0xff, 0x4e, 0xea, 0xeb, 0xec, 0x3c, - 0x53, 0x74, 0xda, 0x83, 0x7e, 0xe8, 0x00, 0x7e, 0xe2, 0x8e, 0x46, 0xfa, - 0x89, 0xfb, 0x26, 0x8a, 0x07, 0x98, 0x89, 0xc2, 0x8d, 0x46, 0xd8, 0x47, - 0xff, 0x56, 0xf8, 0xff, 0x4e, 0xe8, 0xeb, 0xe3, 0x83, 0x7e, 0xec, 0x00, - 0x7e, 0x17, 0x8e, 0x46, 0xfa, 0x89, 0xfb, 0x26, 0x8a, 0x07, 0x98, 0x89, - 0xc2, 0x8d, 0x46, 0xd8, 0x47, 0xff, 0x56, 0xf8, 0xff, 0x4e, 0xec, 0xeb, - 0xe3, 0x83, 0x7e, 0xee, 0x00, 0x7e, 0x0e, 0xba, 0x30, 0x00, 0x8d, 0x46, - 0xd8, 0xff, 0x56, 0xf8, 0xff, 0x4e, 0xee, 0xeb, 0xec, 0xf6, 0x46, 0xda, - 0x08, 0x75, 0x03, 0xe9, 0x21, 0xfe, 0x83, 0x7e, 0xde, 0x00, 0x7e, 0xf7, - 0xba, 0x20, 0x00, 0x8d, 0x46, 0xd8, 0xff, 0x56, 0xf8, 0xff, 0x4e, 0xde, - 0xeb, 0xec, 0x8b, 0x46, 0xe2, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x51, - 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd1, 0x89, 0xda, 0xc6, 0x47, 0x19, 0x20, - 0xe8, 0x36, 0x01, 0x89, 0xc7, 0xc7, 0x47, 0x06, 0x00, 0x00, 0x89, 0xc6, - 0x80, 0x3d, 0x2a, 0x74, 0x22, 0x8a, 0x04, 0x3c, 0x30, 0x7c, 0x2e, 0x3c, - 0x39, 0x7f, 0x2a, 0xba, 0x0a, 0x00, 0x8b, 0x47, 0x06, 0xf7, 0xea, 0x89, - 0xc2, 0x8a, 0x04, 0x98, 0x2d, 0x30, 0x00, 0x01, 0xc2, 0x46, 0x89, 0x57, - 0x06, 0xeb, 0xde, 0x89, 0xcf, 0x83, 0x05, 0x02, 0x8b, 0x3d, 0x8b, 0x45, - 0xfe, 0x89, 0x47, 0x06, 0x85, 0xc0, 0x7c, 0x38, 0x46, 0xc7, 0x47, 0x08, - 0xff, 0xff, 0x80, 0x3c, 0x2e, 0x75, 0x48, 0x46, 0xc7, 0x47, 0x08, 0x00, - 0x00, 0x80, 0x3c, 0x2a, 0x74, 0x2b, 0x8a, 0x04, 0x3c, 0x30, 0x7c, 0x37, - 0x3c, 0x39, 0x7f, 0x33, 0xba, 0x0a, 0x00, 0x8b, 0x47, 0x08, 0xf7, 0xea, - 0x89, 0xc2, 0x8a, 0x04, 0x98, 0x2d, 0x30, 0x00, 0x01, 0xc2, 0x46, 0x89, - 0x57, 0x08, 0xeb, 0xde, 0xf7, 0x5f, 0x06, 0x80, 0x4f, 0x02, 0x08, 0xeb, - 0xbf, 0x89, 0xcf, 0x83, 0x05, 0x02, 0x8b, 0x3d, 0x8b, 0x45, 0xfe, 0x89, - 0x47, 0x08, 0x85, 0xc0, 0x7c, 0x21, 0x46, 0x8a, 0x04, 0x8d, 0x7c, 0x01, - 0x3c, 0x68, 0x73, 0x1e, 0x3c, 0x4c, 0x73, 0x56, 0x3c, 0x49, 0x75, 0x54, - 0x80, 0x7c, 0x01, 0x36, 0x75, 0x36, 0x80, 0x7c, 0x02, 0x34, 0x75, 0x30, - 0xe9, 0x7a, 0x00, 0xc7, 0x47, 0x08, 0xff, 0xff, 0xeb, 0xd8, 0x8d, 0x54, - 0x02, 0x77, 0x0e, 0x80, 0x7c, 0x01, 0x68, 0x75, 0x53, 0x89, 0xd6, 0x80, - 0x4f, 0x02, 0x10, 0xeb, 0x13, 0x3c, 0x74, 0x73, 0x14, 0x3c, 0x6c, 0x75, - 0x25, 0x3a, 0x44, 0x01, 0x75, 0x15, 0x89, 0xd6, 0x80, 0x4f, 0x02, 0x80, - 0x89, 0xf0, 0xe9, 0xf5, 0x00, 0x76, 0x4b, 0x3c, 0x7a, 0x74, 0x47, 0x3c, - 0x77, 0x75, 0xf1, 0x46, 0x80, 0x4f, 0x02, 0x40, 0xeb, 0xea, 0xeb, 0x0e, - 0xeb, 0x20, 0x3c, 0x6a, 0x75, 0xe2, 0x46, 0x81, 0x4f, 0x02, 0x80, 0x01, - 0xeb, 0xda, 0x76, 0xf6, 0x3c, 0x57, 0x74, 0x12, 0x3c, 0x4e, 0x75, 0xd0, - 0x89, 0xfe, 0x80, 0x4f, 0x03, 0x02, 0xeb, 0xc8, 0xeb, 0x0b, 0x3c, 0x46, - 0x75, 0xc2, 0x46, 0x80, 0x4f, 0x03, 0x04, 0xeb, 0xbb, 0x89, 0xfe, 0x80, - 0x4f, 0x02, 0x20, 0xeb, 0xb3, 0x83, 0xc6, 0x03, 0xeb, 0xaa, 0x46, 0xeb, - 0xab, 0x53, 0x56, 0x89, 0xc6, 0x89, 0xd3, 0xc7, 0x47, 0x02, 0x00, 0x00, - 0x8a, 0x04, 0x3c, 0x2d, 0x74, 0x0b, 0x3c, 0x23, 0x75, 0x0d, 0x80, 0x4f, - 0x02, 0x01, 0x46, 0xeb, 0xef, 0x80, 0x4f, 0x02, 0x08, 0xeb, 0xf7, 0x3c, - 0x2b, 0x75, 0x0a, 0x80, 0x4f, 0x02, 0x04, 0x80, 0x67, 0x02, 0xfd, 0xeb, - 0xe9, 0x3c, 0x20, 0x75, 0x0c, 0xf6, 0x47, 0x02, 0x04, 0x75, 0xdf, 0x80, - 0x4f, 0x02, 0x02, 0xeb, 0xd9, 0x3c, 0x30, 0x75, 0x05, 0x88, 0x47, 0x19, - 0xeb, 0xd0, 0x89, 0xf0, 0x5e, 0x5b, 0xc3, 0x56, 0x57, 0x89, 0xc6, 0x89, - 0xd7, 0x89, 0xda, 0x8e, 0xc7, 0x31, 0xc0, 0x39, 0xd0, 0x75, 0x03, 0xe9, - 0x56, 0xfe, 0x89, 0xf3, 0x46, 0x26, 0x80, 0x3f, 0x00, 0x74, 0xf4, 0x40, - 0xeb, 0xed, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, - 0xde, 0x89, 0xc3, 0x89, 0xd7, 0x31, 0xc9, 0x83, 0xfe, 0xff, 0x75, 0x26, - 0x8e, 0xc7, 0x26, 0x8b, 0x07, 0x85, 0xc0, 0x74, 0x14, 0x89, 0xc2, 0x8d, - 0x46, 0xfe, 0x83, 0xc3, 0x02, 0xe8, 0x5a, 0x0b, 0x3d, 0xff, 0xff, 0x74, - 0xe7, 0x01, 0xc1, 0xeb, 0xe3, 0x89, 0xc8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0x59, 0xc3, 0x8e, 0xc7, 0x26, 0x8b, 0x07, 0x85, 0xc0, 0x74, 0x18, 0x39, - 0xf1, 0x7f, 0x14, 0x89, 0xc2, 0x8d, 0x46, 0xfe, 0x83, 0xc3, 0x02, 0xe8, - 0x30, 0x0b, 0x3d, 0xff, 0xff, 0x74, 0xe3, 0x01, 0xc1, 0xeb, 0xdf, 0x39, - 0xf1, 0x7e, 0xd2, 0x89, 0xf0, 0xeb, 0xd0, 0x51, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x83, 0xec, 0x0a, 0x52, 0x53, 0xbb, 0x10, 0x00, 0x8d, 0x56, 0xf6, - 0x8d, 0x7e, 0xf6, 0xe8, 0x6a, 0x0b, 0x8c, 0xd8, 0x8e, 0xc0, 0x83, 0xc9, - 0xff, 0x33, 0xc0, 0xf2, 0xae, 0xf7, 0xd1, 0x49, 0x8b, 0x46, 0xf2, 0x89, - 0xc3, 0x89, 0xce, 0x03, 0x5e, 0xf4, 0x89, 0xf2, 0x4e, 0x85, 0xd2, 0x7e, - 0x0f, 0x89, 0xc2, 0x4b, 0x48, 0x85, 0xd2, 0x7e, 0x07, 0x8a, 0x52, 0xf6, - 0x88, 0x17, 0xeb, 0xea, 0x8b, 0x76, 0xf4, 0x01, 0xc6, 0x89, 0xc2, 0x4e, - 0x48, 0x85, 0xd2, 0x7e, 0x05, 0xc6, 0x04, 0x30, 0xeb, 0xf3, 0x8b, 0x5e, - 0xf4, 0x03, 0x5e, 0xf2, 0xc6, 0x07, 0x00, 0xe9, 0x6d, 0xff, 0x56, 0x57, - 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x89, 0xc6, 0x89, 0x56, 0xfc, 0x89, - 0x5e, 0xfa, 0x89, 0x4e, 0xfe, 0x85, 0xc9, 0x7c, 0x28, 0x8b, 0x5e, 0xfc, - 0x83, 0x7f, 0x08, 0xff, 0x75, 0x05, 0xc7, 0x47, 0x08, 0x04, 0x00, 0xbb, - 0x0a, 0x00, 0x8b, 0x46, 0xfe, 0x89, 0xf2, 0xe8, 0xee, 0x0a, 0x89, 0x76, - 0xf8, 0x8d, 0x44, 0x01, 0x80, 0x3c, 0x00, 0x74, 0x14, 0x89, 0xc6, 0xeb, - 0xf4, 0xf7, 0x5e, 0xfe, 0xc6, 0x04, 0x2d, 0xf7, 0x5e, 0xfa, 0x83, 0x5e, - 0xfe, 0x00, 0x46, 0xeb, 0xc8, 0x8b, 0x5e, 0xfc, 0x83, 0x7f, 0x08, 0x00, - 0x74, 0x35, 0xc6, 0x04, 0x2e, 0x31, 0xff, 0x89, 0xc6, 0x8b, 0x5e, 0xfc, - 0x3b, 0x7f, 0x08, 0x7d, 0x23, 0x8b, 0x46, 0xfa, 0xbb, 0x0a, 0x00, 0x31, - 0xd2, 0x31, 0xc9, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xe8, 0x57, 0xe3, 0x89, - 0x56, 0xfe, 0x89, 0x46, 0xfa, 0x8a, 0x46, 0xfe, 0x04, 0x30, 0x47, 0x88, - 0x04, 0x46, 0xeb, 0xd5, 0xc6, 0x04, 0x00, 0xf6, 0x46, 0xfb, 0x80, 0x75, - 0x03, 0xe9, 0xe9, 0xfc, 0x3b, 0x76, 0xf8, 0x74, 0x11, 0x4e, 0x80, 0x3c, - 0x2e, 0x75, 0x01, 0x4e, 0x80, 0x3c, 0x39, 0x75, 0x34, 0xc6, 0x04, 0x30, - 0xeb, 0xea, 0xc6, 0x04, 0x31, 0x46, 0x8a, 0x04, 0x8d, 0x7c, 0x01, 0x3c, - 0x30, 0x75, 0x04, 0x89, 0xfe, 0xeb, 0xf3, 0x3c, 0x2e, 0x75, 0x10, 0xc6, - 0x04, 0x30, 0x8d, 0x75, 0x01, 0x88, 0x05, 0x80, 0x3c, 0x30, 0x75, 0x03, - 0x46, 0xeb, 0xf8, 0xc6, 0x04, 0x30, 0x46, 0xc6, 0x04, 0x00, 0xe9, 0xa4, - 0xfc, 0xfe, 0x04, 0xe9, 0x9f, 0xfc, 0x53, 0x89, 0xc3, 0xf6, 0x47, 0x02, - 0x08, 0x75, 0x22, 0x80, 0x7f, 0x19, 0x30, 0x75, 0x1c, 0x8b, 0x47, 0x06, - 0x2b, 0x47, 0x0c, 0x2b, 0x47, 0x0e, 0x2b, 0x47, 0x10, 0x2b, 0x47, 0x12, - 0x2b, 0x47, 0x14, 0x2b, 0x47, 0x16, 0x85, 0xc0, 0x7e, 0x03, 0x01, 0x47, - 0x0e, 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, - 0xc7, 0x89, 0x56, 0xfe, 0x89, 0x4e, 0xfc, 0x83, 0x7f, 0x10, 0x00, 0x7f, - 0x03, 0xe9, 0x59, 0xfc, 0x8e, 0x46, 0xfe, 0x8d, 0x46, 0xfa, 0x26, 0x8b, - 0x15, 0xe8, 0x8a, 0x09, 0x83, 0xc7, 0x02, 0x89, 0xc1, 0x3d, 0xff, 0xff, - 0x74, 0xe1, 0x3b, 0x47, 0x10, 0x7f, 0x19, 0x8d, 0x76, 0xfa, 0x49, 0x83, - 0xf9, 0xff, 0x74, 0xd3, 0x8a, 0x04, 0x98, 0x89, 0xc2, 0x89, 0xd8, 0x46, - 0xff, 0x56, 0xfc, 0xff, 0x4f, 0x10, 0xeb, 0xea, 0xc7, 0x47, 0x10, 0x00, - 0x00, 0xe9, 0x1d, 0xfc, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x12, - 0x50, 0x89, 0xd7, 0x89, 0xde, 0xc7, 0x47, 0x16, 0x00, 0x00, 0x89, 0x46, - 0xf8, 0x8b, 0x47, 0x16, 0x89, 0x47, 0x14, 0x89, 0x47, 0x12, 0x89, 0x47, - 0x10, 0x89, 0x47, 0x0e, 0x89, 0x47, 0x0c, 0x8a, 0x47, 0x18, 0x8c, 0x5e, - 0xfa, 0x3c, 0x62, 0x75, 0x23, 0x8a, 0x44, 0x02, 0xa8, 0x80, 0x74, 0x54, - 0x83, 0x05, 0x08, 0x8b, 0x1d, 0x8b, 0x47, 0xfc, 0x89, 0x46, 0xf6, 0x8b, - 0x47, 0xfa, 0x89, 0x46, 0xf4, 0x8b, 0x47, 0xf8, 0x8b, 0x4f, 0xfe, 0x89, - 0x46, 0xf2, 0xeb, 0x4d, 0x3c, 0x6f, 0x74, 0xd9, 0x3c, 0x75, 0x74, 0xd5, - 0x3c, 0x78, 0x74, 0xd1, 0x3c, 0x58, 0x74, 0xcd, 0x3c, 0x64, 0x75, 0x66, - 0x8a, 0x44, 0x02, 0xa8, 0x80, 0x74, 0x61, 0x83, 0x05, 0x08, 0x8b, 0x1d, - 0x8b, 0x47, 0xfc, 0x89, 0x46, 0xf6, 0x8b, 0x47, 0xfa, 0x89, 0x46, 0xf4, - 0x8b, 0x47, 0xf8, 0x8b, 0x4f, 0xfe, 0x89, 0x46, 0xf2, 0xe9, 0xbf, 0x00, - 0xa8, 0x40, 0x74, 0x42, 0x83, 0x05, 0x04, 0x8b, 0x1d, 0x8b, 0x47, 0xfc, - 0x89, 0x46, 0xfc, 0x8b, 0x47, 0xfe, 0x89, 0x46, 0xfe, 0x8a, 0x44, 0x18, - 0xc7, 0x46, 0xf0, 0x0a, 0x00, 0x3c, 0x64, 0x73, 0x5b, 0x3c, 0x50, 0x73, - 0x5a, 0x3c, 0x45, 0x73, 0x59, 0x3c, 0x43, 0x74, 0x58, 0xc7, 0x44, 0x06, - 0x00, 0x00, 0x8b, 0x5e, 0xec, 0x8a, 0x44, 0x18, 0x88, 0x07, 0xc7, 0x44, - 0x0c, 0x01, 0x00, 0xe9, 0xb1, 0x01, 0xeb, 0x31, 0xeb, 0x42, 0x83, 0x05, - 0x02, 0x8b, 0x1d, 0x8b, 0x47, 0xfe, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0x89, - 0x46, 0xfc, 0xf6, 0x44, 0x02, 0x20, 0x74, 0x07, 0xc7, 0x46, 0xfe, 0x00, - 0x00, 0xeb, 0xb2, 0xf6, 0x44, 0x02, 0x10, 0x74, 0xac, 0x8a, 0x46, 0xfc, - 0x30, 0xe4, 0x89, 0x46, 0xfc, 0x30, 0xc0, 0xeb, 0x9d, 0x3c, 0x69, 0x75, - 0x9c, 0xe9, 0x60, 0xff, 0xe9, 0xec, 0x00, 0xe9, 0xb1, 0x02, 0xe9, 0xf1, - 0x02, 0xe9, 0x3a, 0x04, 0xa8, 0x40, 0x74, 0x13, 0x83, 0x05, 0x04, 0x8b, - 0x1d, 0x8b, 0x47, 0xfc, 0x89, 0x46, 0xfc, 0x8b, 0x47, 0xfe, 0x89, 0x46, - 0xfe, 0xeb, 0x20, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x47, 0xfe, 0x99, - 0x89, 0x46, 0xfc, 0x8a, 0x44, 0x02, 0x89, 0x56, 0xfe, 0xa8, 0x20, 0x74, - 0x61, 0x8b, 0x46, 0xfc, 0x99, 0x89, 0x46, 0xfc, 0x89, 0x56, 0xfe, 0x31, - 0xc0, 0xf6, 0x44, 0x02, 0x80, 0x74, 0x59, 0x85, 0xc9, 0x7c, 0x10, 0x75, - 0x0a, 0x83, 0x7e, 0xf6, 0x00, 0x75, 0x04, 0x83, 0x7e, 0xf4, 0x00, 0x85, - 0xc0, 0x74, 0x5a, 0x8b, 0x44, 0x0c, 0x89, 0xc2, 0x8b, 0x5e, 0xec, 0x42, - 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, 0x07, 0x2d, 0xf6, 0x44, 0x02, 0x80, - 0x74, 0x36, 0x31, 0xc0, 0x2b, 0x46, 0xf2, 0x89, 0x46, 0xf2, 0xb8, 0x00, - 0x00, 0x1b, 0x46, 0xf4, 0x89, 0x46, 0xf4, 0xb8, 0x00, 0x00, 0x1b, 0x46, - 0xf6, 0x89, 0x46, 0xf6, 0xb8, 0x00, 0x00, 0x19, 0xc8, 0x89, 0xc1, 0xe9, - 0xff, 0xfe, 0xa8, 0x10, 0x74, 0xa5, 0x8a, 0x46, 0xfc, 0x98, 0xeb, 0x98, - 0x83, 0x7e, 0xfe, 0x00, 0x7c, 0xb5, 0xeb, 0xaf, 0xf7, 0x5e, 0xfe, 0xf7, - 0x5e, 0xfc, 0x83, 0x5e, 0xfe, 0x00, 0xe9, 0xe0, 0xfe, 0x8a, 0x44, 0x02, - 0xa8, 0x04, 0x74, 0x14, 0x8b, 0x44, 0x0c, 0x89, 0xc2, 0x8b, 0x5e, 0xec, - 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, 0x07, 0x2b, 0xe9, 0xc5, 0xfe, - 0xa8, 0x02, 0x75, 0x03, 0xe9, 0xbe, 0xfe, 0x8b, 0x44, 0x0c, 0x89, 0xc2, - 0x8b, 0x5e, 0xec, 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, 0x07, 0x20, - 0xe9, 0xaa, 0xfe, 0x77, 0x4a, 0x83, 0x7c, 0x08, 0xff, 0x74, 0x04, 0xc6, - 0x44, 0x19, 0x20, 0x8b, 0x5e, 0xec, 0x03, 0x5c, 0x0c, 0x8c, 0x5e, 0xfa, - 0x89, 0x5e, 0xf8, 0xf6, 0x44, 0x02, 0x80, 0x74, 0x28, 0x83, 0x7c, 0x08, - 0x00, 0x75, 0x25, 0x85, 0xc9, 0x75, 0x21, 0x83, 0x7e, 0xf6, 0x00, 0x75, - 0x1b, 0x83, 0x7e, 0xf4, 0x00, 0x75, 0x15, 0x83, 0x7e, 0xf2, 0x00, 0x75, - 0x0f, 0x8e, 0x46, 0xfa, 0x31, 0xc0, 0x26, 0xc6, 0x07, 0x00, 0xe9, 0x9f, - 0x02, 0xe9, 0xc8, 0x02, 0xe9, 0x69, 0x02, 0x3c, 0x6f, 0x73, 0x46, 0x3c, - 0x66, 0x72, 0x4c, 0x77, 0x4d, 0xf6, 0x44, 0x02, 0x20, 0x74, 0x44, 0x83, - 0x05, 0x04, 0x8b, 0x1d, 0x8b, 0x47, 0xfc, 0x89, 0xf2, 0x89, 0x46, 0xfc, - 0x8b, 0x47, 0xfe, 0x8b, 0x5e, 0xfc, 0x89, 0x46, 0xfe, 0x89, 0xc1, 0x8b, - 0x46, 0xec, 0xe8, 0x2d, 0xfc, 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xec, 0x8c, - 0xda, 0xe8, 0x3b, 0xfb, 0x89, 0x44, 0x10, 0x89, 0xf0, 0x8b, 0x56, 0xfa, - 0xe8, 0xf7, 0xfc, 0x8b, 0x46, 0xf8, 0xe9, 0x90, 0xf9, 0x77, 0x0e, 0xc7, - 0x46, 0xf0, 0x08, 0x00, 0xe9, 0x62, 0xff, 0xe9, 0x0c, 0x01, 0xe9, 0xfe, - 0x00, 0x3c, 0x73, 0x73, 0x71, 0x3c, 0x70, 0x74, 0x03, 0xe9, 0x11, 0xfe, - 0x83, 0x7c, 0x06, 0x00, 0x75, 0x0b, 0xf6, 0x44, 0x03, 0x04, 0x74, 0x58, - 0xc7, 0x44, 0x06, 0x09, 0x00, 0x80, 0x64, 0x02, 0xf9, 0x83, 0x05, 0x02, - 0x8b, 0x1d, 0x8b, 0x4f, 0xfe, 0xf6, 0x44, 0x03, 0x04, 0x74, 0x44, 0x83, - 0xc3, 0x02, 0x89, 0x1d, 0x8b, 0x56, 0xec, 0x8b, 0x47, 0xfe, 0xbb, 0x04, - 0x00, 0xe8, 0x5f, 0xfb, 0x8b, 0x5e, 0xec, 0x89, 0xc8, 0x8d, 0x57, 0x05, - 0xc6, 0x47, 0x04, 0x3a, 0xbb, 0x04, 0x00, 0xe8, 0x4d, 0xfb, 0x80, 0x7c, - 0x18, 0x50, 0x75, 0x06, 0x8b, 0x46, 0xec, 0xe8, 0xdd, 0x06, 0xbb, 0xff, - 0xff, 0x8b, 0x46, 0xf8, 0x8b, 0x56, 0xfa, 0xe8, 0xb1, 0xfa, 0x89, 0x44, - 0x0c, 0xe9, 0x73, 0xff, 0xe9, 0x2c, 0x02, 0xe9, 0x31, 0x02, 0x77, 0x2c, - 0x8b, 0x5e, 0xec, 0xc6, 0x07, 0x00, 0x8a, 0x44, 0x03, 0xa8, 0x04, 0x74, - 0x1c, 0x83, 0x05, 0x04, 0x8b, 0x1d, 0x8b, 0x47, 0xfe, 0x8b, 0x7f, 0xfc, - 0x85, 0xc0, 0x75, 0x04, 0x85, 0xff, 0x74, 0x06, 0x89, 0x7e, 0xf8, 0x89, - 0x46, 0xfa, 0xe9, 0x2d, 0x01, 0xe9, 0x16, 0x01, 0x3c, 0x78, 0x75, 0x4d, - 0x8a, 0x44, 0x02, 0xa8, 0x01, 0x74, 0x3e, 0xa8, 0x80, 0x74, 0x68, 0x85, - 0xc9, 0x75, 0x12, 0x83, 0x7e, 0xf6, 0x00, 0x75, 0x0c, 0x83, 0x7e, 0xf4, - 0x00, 0x75, 0x06, 0x83, 0x7e, 0xf2, 0x00, 0x74, 0x24, 0x8b, 0x44, 0x0c, - 0x89, 0xc2, 0x8b, 0x5e, 0xec, 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, - 0x07, 0x30, 0x8b, 0x44, 0x0c, 0x8b, 0x5e, 0xec, 0x89, 0xc2, 0x01, 0xc3, - 0x42, 0x8a, 0x44, 0x18, 0x89, 0x54, 0x0c, 0x88, 0x07, 0xc7, 0x46, 0xf0, - 0x10, 0x00, 0xe9, 0x68, 0xfe, 0x3c, 0x75, 0x75, 0x03, 0xe9, 0x61, 0xfe, - 0xe9, 0x1e, 0xfd, 0x3c, 0x69, 0x74, 0xf6, 0x3c, 0x67, 0x74, 0x03, 0xe9, - 0x13, 0xfd, 0x8b, 0x46, 0xec, 0x89, 0xf3, 0x89, 0xfa, 0xff, 0x46, 0xf8, - 0xff, 0x16, 0xfc, 0x07, 0xe9, 0xc8, 0xfe, 0x8b, 0x46, 0xfe, 0x0b, 0x46, - 0xfc, 0xeb, 0xa4, 0x77, 0x03, 0xe9, 0xe4, 0xfe, 0x3c, 0x58, 0x73, 0x0a, - 0x3c, 0x53, 0x75, 0x03, 0xe9, 0x45, 0xff, 0xe9, 0xe7, 0xfc, 0x77, 0x03, - 0xe9, 0x6d, 0xff, 0x3c, 0x63, 0x75, 0x1b, 0xc7, 0x44, 0x10, 0x01, 0x00, - 0xf6, 0x44, 0x02, 0x40, 0x75, 0x2c, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8a, - 0x47, 0xfe, 0x8b, 0x5e, 0xec, 0x88, 0x07, 0xe9, 0x89, 0xfe, 0x3c, 0x62, - 0x75, 0xa9, 0xc7, 0x46, 0xf0, 0x02, 0x00, 0xe9, 0xf7, 0xfd, 0x76, 0xa2, - 0x3c, 0x47, 0x74, 0x9e, 0x3c, 0x46, 0x75, 0x03, 0xe9, 0x3e, 0xfe, 0xe9, - 0xa7, 0xfc, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8d, 0x46, 0xee, 0x8b, 0x57, - 0xfe, 0xe8, 0x3a, 0x05, 0x3d, 0xff, 0xff, 0x75, 0x03, 0xe9, 0x57, 0xfe, - 0x8b, 0x5e, 0xec, 0x8a, 0x46, 0xee, 0x88, 0x07, 0x83, 0x3e, 0x00, 0x08, - 0x00, 0x74, 0xee, 0x88, 0xc3, 0x30, 0xff, 0x8a, 0x87, 0xe7, 0x0a, 0x24, - 0x01, 0x30, 0xe4, 0x85, 0xc0, 0x74, 0xde, 0x8b, 0x5e, 0xec, 0x8a, 0x46, - 0xef, 0x88, 0x47, 0x01, 0xff, 0x44, 0x0c, 0xe9, 0x29, 0xfe, 0xa8, 0x02, - 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x5f, 0xfe, 0x85, 0xdb, 0x74, 0x06, - 0x8c, 0x5e, 0xfa, 0x89, 0x5e, 0xf8, 0x80, 0x7c, 0x18, 0x53, 0x75, 0x34, - 0xf6, 0x44, 0x02, 0x20, 0x74, 0x20, 0x8b, 0x46, 0xf8, 0x8b, 0x56, 0xfa, - 0x8b, 0x5c, 0x08, 0xe8, 0x35, 0xf9, 0x89, 0x44, 0x10, 0x83, 0x7c, 0x08, - 0x00, 0x7c, 0x9a, 0x3b, 0x44, 0x08, 0x7e, 0x95, 0x8b, 0x44, 0x08, 0xe9, - 0xe6, 0xfd, 0x8b, 0x46, 0xf8, 0x8b, 0x56, 0xfa, 0x8b, 0x5c, 0x08, 0xe8, - 0x34, 0xf9, 0xeb, 0xde, 0xf6, 0x44, 0x02, 0x40, 0x75, 0xec, 0xeb, 0xca, - 0xff, 0x76, 0xf0, 0x8b, 0x46, 0xec, 0x8b, 0x5e, 0xf6, 0x03, 0x44, 0x0c, - 0x8b, 0x56, 0xf2, 0x50, 0x89, 0xc8, 0x8b, 0x4e, 0xf4, 0xe8, 0x55, 0x05, - 0x80, 0x7c, 0x18, 0x58, 0x75, 0x06, 0x8b, 0x46, 0xec, 0xe8, 0x07, 0x05, - 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xf8, 0x8b, 0x56, 0xfa, 0xe8, 0xdb, 0xf8, - 0x89, 0x44, 0x10, 0x89, 0xc2, 0x3b, 0x44, 0x08, 0x7c, 0x4a, 0xf6, 0x44, - 0x02, 0x01, 0x75, 0x03, 0xe9, 0x90, 0xfd, 0x83, 0x7e, 0xf0, 0x0a, 0x7d, - 0xf7, 0x85, 0xc0, 0x74, 0x09, 0xc4, 0x5e, 0xf8, 0x26, 0x80, 0x3f, 0x30, - 0x74, 0xea, 0xff, 0x44, 0x0e, 0xe9, 0x77, 0xfd, 0x83, 0x7c, 0x08, 0x00, - 0x75, 0x0e, 0x8b, 0x46, 0xfe, 0x0b, 0x46, 0xfc, 0x75, 0x06, 0x8e, 0x46, - 0xfa, 0xe9, 0x1a, 0xfd, 0x8b, 0x5e, 0xec, 0x8b, 0x4e, 0xf0, 0x8b, 0x46, - 0xfc, 0x8b, 0x56, 0xfe, 0x03, 0x5c, 0x0c, 0xe8, 0x03, 0x06, 0xeb, 0x94, - 0x8b, 0x44, 0x08, 0x29, 0xd0, 0x89, 0x44, 0x0e, 0xe9, 0x44, 0xfd, 0xc7, - 0x44, 0x06, 0x04, 0x00, 0xe9, 0x76, 0xfd, 0xbb, 0x04, 0x00, 0x8b, 0x56, - 0xec, 0x89, 0xc8, 0xe9, 0x9d, 0xfd, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, - 0x46, 0xec, 0x8b, 0x57, 0xfe, 0xe8, 0xfe, 0x03, 0x3d, 0xff, 0xff, 0x74, - 0x03, 0xe9, 0x18, 0xfd, 0xc7, 0x44, 0x10, 0x00, 0x00, 0xe9, 0x13, 0xfd, - 0x51, 0x89, 0xd1, 0x89, 0xc2, 0x8a, 0xc1, 0xb4, 0x3d, 0xcd, 0x21, 0x72, - 0x02, 0x89, 0x07, 0xe8, 0x26, 0x06, 0x59, 0xc3, 0x53, 0x3b, 0x06, 0xb6, - 0x07, 0x72, 0x04, 0x31, 0xc0, 0x5b, 0xc3, 0x8b, 0x1e, 0xe0, 0x07, 0xd1, - 0xe0, 0x01, 0xc3, 0x8b, 0x07, 0x5b, 0xc3, 0x53, 0x3b, 0x06, 0xb6, 0x07, - 0x72, 0x02, 0x5b, 0xc3, 0x8b, 0x1e, 0xe0, 0x07, 0xd1, 0xe0, 0x01, 0xc3, - 0x89, 0x17, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x89, 0xc3, 0xb8, 0x00, 0x44, - 0xcd, 0x21, 0x19, 0xc9, 0xf6, 0xc2, 0x80, 0x74, 0x07, 0xb8, 0x01, 0x00, - 0x5a, 0x59, 0x5b, 0xc3, 0x31, 0xc0, 0xeb, 0xf8, 0x85, 0xd2, 0x75, 0x08, - 0xc3, 0x85, 0xd2, 0x75, 0x03, 0x31, 0xc0, 0xc3, 0x53, 0x51, 0x52, 0x56, - 0x89, 0xc3, 0x88, 0xc2, 0x30, 0xe4, 0x89, 0xc1, 0xe8, 0x5b, 0x00, 0x89, - 0xc6, 0x89, 0x0c, 0x81, 0xfb, 0x00, 0x01, 0x73, 0x41, 0x80, 0x3e, 0x8a, - 0x07, 0x03, 0x72, 0x33, 0x80, 0xfb, 0x50, 0x75, 0x04, 0xb2, 0x0e, 0xeb, - 0x07, 0x80, 0xfb, 0x22, 0x72, 0x1c, 0xb2, 0x13, 0x88, 0xd3, 0x30, 0xff, - 0x8a, 0x87, 0xe2, 0x07, 0x98, 0x89, 0xc6, 0xe8, 0xd3, 0xe6, 0x89, 0xc3, - 0x89, 0x37, 0xb8, 0xff, 0xff, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x80, 0xfb, - 0x20, 0x72, 0x04, 0xb2, 0x05, 0xeb, 0xdd, 0x80, 0xfa, 0x13, 0x76, 0xd8, - 0xeb, 0xd4, 0x88, 0xf8, 0x30, 0xe4, 0xeb, 0xd9, 0x52, 0x89, 0xc2, 0xe8, - 0x9a, 0xff, 0x89, 0xd0, 0x5a, 0xc3, 0xb8, 0xd6, 0x0a, 0xc3, 0x51, 0x89, - 0xd1, 0x89, 0xc2, 0xb4, 0x3c, 0xcd, 0x21, 0x72, 0x02, 0x89, 0x07, 0xe8, - 0x52, 0x05, 0x59, 0xc3, 0x51, 0x89, 0xd1, 0x89, 0xc2, 0xb4, 0x5b, 0xcd, - 0x21, 0x72, 0x02, 0x89, 0x07, 0xe8, 0x40, 0x05, 0x59, 0xc3, 0x53, 0x51, - 0x52, 0x56, 0x57, 0x89, 0xc3, 0xd1, 0xe0, 0x81, 0x3e, 0xe0, 0x07, 0xb8, - 0x07, 0x74, 0x20, 0x8b, 0x0e, 0xe0, 0x07, 0x89, 0xc2, 0x89, 0xc8, 0xe8, - 0x38, 0x05, 0x89, 0xc2, 0x85, 0xd2, 0x75, 0x3b, 0xe8, 0x5a, 0xe6, 0x89, - 0xc3, 0xc7, 0x07, 0x05, 0x00, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x8b, - 0x16, 0xb6, 0x07, 0x89, 0x16, 0xd8, 0x0a, 0xe8, 0xc0, 0xd4, 0x89, 0xc7, - 0x89, 0xc2, 0x85, 0xc0, 0x74, 0xda, 0x8b, 0x0e, 0xb6, 0x07, 0xbe, 0xb8, - 0x07, 0xd1, 0xe1, 0x57, 0x8c, 0xd8, 0x8e, 0xc0, 0xd1, 0xe9, 0xf3, 0xa5, - 0x13, 0xc9, 0xf3, 0xa4, 0x5f, 0xeb, 0xc1, 0x8b, 0x3e, 0xb6, 0x07, 0x89, - 0xd9, 0x30, 0xc0, 0x2b, 0x0e, 0xb6, 0x07, 0xd1, 0xe7, 0xd1, 0xe1, 0x01, - 0xd7, 0x57, 0x1e, 0x07, 0x8a, 0xe0, 0xd1, 0xe9, 0xf3, 0xab, 0x13, 0xc9, - 0xf3, 0xaa, 0x5f, 0x89, 0x16, 0xe0, 0x07, 0x89, 0x1e, 0xb6, 0x07, 0xeb, - 0xa4, 0xa1, 0xe0, 0x07, 0x3d, 0xb8, 0x07, 0x75, 0x01, 0xc3, 0xe8, 0x22, - 0xd5, 0xa1, 0xd8, 0x0a, 0xc7, 0x06, 0xe0, 0x07, 0xb8, 0x07, 0xa3, 0xb6, - 0x07, 0xc3, 0x53, 0x51, 0x56, 0x89, 0xc3, 0xa1, 0xb6, 0x07, 0x39, 0xc3, - 0x72, 0x10, 0x89, 0xc1, 0x3d, 0x01, 0x00, 0x7e, 0x2d, 0xb8, 0x01, 0x00, - 0x01, 0xc8, 0x40, 0xe8, 0x44, 0xff, 0x3b, 0x1e, 0xb6, 0x07, 0x73, 0x22, - 0x89, 0xd9, 0xd1, 0xe1, 0x85, 0xd2, 0x74, 0x1f, 0x89, 0xd8, 0xe8, 0xf1, - 0x04, 0x8b, 0x36, 0xe0, 0x07, 0x01, 0xce, 0x80, 0xce, 0x40, 0x89, 0x14, - 0x89, 0xd8, 0x5e, 0x59, 0x5b, 0xc3, 0x31, 0xc0, 0xeb, 0xd2, 0xbb, 0xff, - 0xff, 0xeb, 0xf1, 0x8b, 0x36, 0xe0, 0x07, 0x01, 0xce, 0xeb, 0xe7, 0x56, - 0x57, 0x89, 0xc6, 0x89, 0xd7, 0xe8, 0x20, 0xfe, 0x85, 0xc9, 0x7f, 0x06, - 0x75, 0x12, 0x85, 0xdb, 0x76, 0x0e, 0xa8, 0x80, 0x75, 0x0a, 0x80, 0xcc, - 0x80, 0x89, 0xc2, 0x89, 0xf0, 0xe8, 0x1f, 0xfe, 0x89, 0xfa, 0x89, 0xf0, - 0xe8, 0xe4, 0xeb, 0x5f, 0x5e, 0xc3, 0x53, 0x51, 0xba, 0x01, 0x00, 0x31, - 0xdb, 0x31, 0xc9, 0xe8, 0xd5, 0xeb, 0x59, 0x5b, 0xc3, 0x53, 0x51, 0x56, - 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc6, 0x89, 0xd3, 0x8b, - 0x7f, 0x04, 0x83, 0x7d, 0x04, 0x00, 0x74, 0x4b, 0x31, 0xff, 0xf6, 0x47, - 0x07, 0x04, 0x75, 0x4a, 0x89, 0x76, 0xfe, 0x31, 0xc9, 0x8a, 0x04, 0x98, - 0x85, 0xc0, 0x74, 0x0d, 0x89, 0xda, 0x46, 0xe8, 0x2a, 0xf1, 0x3d, 0xff, - 0xff, 0x75, 0xee, 0x89, 0xc1, 0x85, 0xff, 0x74, 0x13, 0x80, 0x67, 0x07, - 0xf9, 0x80, 0x4f, 0x07, 0x04, 0x85, 0xc9, 0x75, 0x07, 0x89, 0xd8, 0xe8, - 0xef, 0xeb, 0x89, 0xc1, 0x85, 0xc9, 0x75, 0x05, 0x89, 0xf1, 0x2b, 0x4e, - 0xfe, 0x89, 0xc8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x89, - 0xd0, 0xe8, 0x9d, 0xf1, 0xeb, 0xae, 0x80, 0x67, 0x07, 0xf9, 0xbf, 0x01, - 0x00, 0x80, 0x4f, 0x07, 0x02, 0xeb, 0xa9, 0xa1, 0x92, 0x07, 0xc7, 0x06, - 0x92, 0x07, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x01, 0xc3, 0xb4, 0x01, 0xcd, - 0x21, 0x30, 0xe4, 0xc3, 0x51, 0x89, 0xd9, 0x89, 0xc3, 0xb4, 0x3f, 0xcd, - 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7c, 0x02, 0x59, 0xc3, 0xe8, 0xa4, 0xfd, - 0x59, 0xc3, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, - 0xc6, 0x89, 0x56, 0xfe, 0x89, 0xdf, 0xe8, 0x3b, 0xfd, 0xa8, 0x80, 0x74, - 0x14, 0xb0, 0x02, 0x89, 0xf3, 0x31, 0xd2, 0x31, 0xc9, 0xb4, 0x42, 0xcd, - 0x21, 0xd1, 0xd2, 0xd1, 0xca, 0x85, 0xd2, 0x7c, 0x29, 0x8b, 0x56, 0xfe, - 0x89, 0xf9, 0x89, 0xf3, 0xb4, 0x40, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, - 0x7c, 0x18, 0x89, 0xc2, 0x39, 0xf8, 0x74, 0x09, 0xe8, 0x6e, 0xe4, 0x89, - 0xc6, 0xc7, 0x04, 0x0c, 0x00, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0x59, 0xc3, 0xe8, 0x4b, 0xfd, 0xeb, 0xf4, 0xe9, 0xe3, 0x03, 0x53, 0x56, - 0x89, 0xc3, 0x80, 0x3f, 0x00, 0x74, 0x23, 0x83, 0x3e, 0x00, 0x08, 0x00, - 0x74, 0x22, 0x8a, 0x07, 0x30, 0xe4, 0x89, 0xc6, 0x8a, 0x84, 0xe7, 0x0a, - 0x24, 0x01, 0x85, 0xc0, 0x74, 0x12, 0x80, 0x7f, 0x01, 0x00, 0x75, 0x0c, - 0xb8, 0x02, 0x00, 0x5e, 0x5b, 0xc3, 0xb8, 0x01, 0x00, 0x5e, 0x5b, 0xc3, - 0x31, 0xc0, 0x5e, 0x5b, 0xc3, 0x53, 0x52, 0x56, 0x89, 0xc3, 0x8a, 0x07, - 0x30, 0xe4, 0x83, 0x3e, 0x00, 0x08, 0x00, 0x74, 0x16, 0x89, 0xc6, 0x30, - 0xf6, 0x8a, 0x94, 0xe7, 0x0a, 0x80, 0xe2, 0x01, 0x85, 0xd2, 0x74, 0x07, - 0x88, 0xc4, 0x8a, 0x57, 0x01, 0x88, 0xd0, 0x5e, 0x5a, 0x5b, 0xc3, 0xf6, - 0xc4, 0xff, 0x74, 0x0c, 0x81, 0x3e, 0x02, 0x08, 0xa4, 0x03, 0x74, 0x01, - 0xc3, 0xe9, 0x14, 0x05, 0xe9, 0x1f, 0x05, 0x53, 0x56, 0x89, 0xc3, 0x83, - 0x3e, 0x00, 0x08, 0x00, 0x74, 0x1e, 0x8a, 0x07, 0x30, 0xe4, 0x89, 0xc6, - 0x8a, 0x84, 0xe7, 0x0a, 0x24, 0x01, 0x85, 0xc0, 0x74, 0x0e, 0x80, 0x7f, - 0x01, 0x00, 0x74, 0x08, 0x83, 0xc3, 0x02, 0x89, 0xd8, 0x5e, 0x5b, 0xc3, - 0x43, 0xeb, 0xf8, 0x51, 0x8b, 0x0e, 0xde, 0x0a, 0xe8, 0xf9, 0x04, 0x59, - 0xc3, 0xc3, 0x89, 0xc3, 0xff, 0x16, 0xf8, 0x07, 0xba, 0xff, 0x00, 0xb8, - 0x10, 0x00, 0xe8, 0x36, 0xed, 0x89, 0xd8, 0x89, 0xc2, 0xff, 0x16, 0xf8, - 0x07, 0xff, 0x16, 0xfa, 0x07, 0x89, 0xd0, 0xe9, 0x1e, 0xdd, 0x53, 0x89, - 0xc3, 0x85, 0xc0, 0x74, 0x0d, 0xf6, 0xc6, 0xff, 0x74, 0x0a, 0x88, 0x37, - 0xb8, 0x02, 0x00, 0x88, 0x57, 0x01, 0x5b, 0xc3, 0xb8, 0x01, 0x00, 0x88, - 0x17, 0x5b, 0xc3, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x24, - 0x52, 0x89, 0xd9, 0xc6, 0x46, 0xdc, 0x00, 0x8d, 0x76, 0xdd, 0x89, 0xd7, - 0x8d, 0x5e, 0xfe, 0x89, 0x4e, 0xfe, 0x33, 0xd2, 0xf7, 0x37, 0x89, 0x07, - 0x89, 0xd3, 0x8a, 0x87, 0x0c, 0x06, 0x88, 0x04, 0x8b, 0x46, 0xfe, 0x46, - 0x85, 0xc0, 0x75, 0xe4, 0x4e, 0x8a, 0x04, 0x88, 0x05, 0x47, 0x84, 0xc0, - 0x75, 0xf6, 0x8b, 0x46, 0xda, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, - 0x56, 0x89, 0xd6, 0x83, 0xfb, 0x0a, 0x75, 0x04, 0x85, 0xc0, 0x7c, 0x07, - 0xe8, 0xac, 0xff, 0x89, 0xf0, 0x5e, 0xc3, 0xf7, 0xd8, 0x42, 0xc6, 0x04, - 0x2d, 0xeb, 0xf1, 0x53, 0x52, 0x89, 0xc2, 0x89, 0xc3, 0x8a, 0x07, 0x84, - 0xc0, 0x74, 0x0f, 0x2c, 0x61, 0x3c, 0x19, 0x76, 0x03, 0x43, 0xeb, 0xf1, - 0x04, 0x41, 0x88, 0x07, 0xeb, 0xf7, 0x89, 0xd0, 0x5a, 0x5b, 0xc3, 0x53, - 0x52, 0xbb, 0x01, 0x00, 0xb8, 0xbc, 0x04, 0x8c, 0xda, 0xe9, 0xb8, 0xeb, - 0x53, 0x89, 0xc3, 0x8a, 0x9f, 0xe7, 0x0a, 0x80, 0xe3, 0x01, 0x30, 0xe7, - 0x89, 0xd8, 0x5b, 0xc3, 0x31, 0xc0, 0xe9, 0x91, 0x03, 0x56, 0x57, 0x55, - 0x89, 0xe5, 0x83, 0xec, 0x48, 0x53, 0x8b, 0x76, 0x08, 0x89, 0x76, 0xfc, - 0x8d, 0x76, 0xb9, 0xc6, 0x46, 0xb8, 0x00, 0x89, 0x76, 0xfe, 0x8b, 0x76, - 0x0a, 0x8b, 0x5e, 0xb6, 0x89, 0x76, 0xfa, 0x8d, 0x76, 0xfa, 0x8b, 0xfa, - 0x85, 0xc0, 0x74, 0x28, 0x8b, 0xd0, 0x8b, 0xc3, 0x33, 0xdb, 0x3b, 0x14, - 0x72, 0x09, 0x8b, 0xd8, 0x8b, 0xc2, 0x33, 0xd2, 0xf7, 0x34, 0x93, 0xf7, - 0x34, 0x91, 0xf7, 0x34, 0x97, 0xf7, 0x34, 0x89, 0x14, 0x8b, 0xd0, 0x8b, - 0xc3, 0x8b, 0xd9, 0x8b, 0xcf, 0xe9, 0x2c, 0x00, 0x85, 0xdb, 0x74, 0x14, - 0x8b, 0xd3, 0x8b, 0xc1, 0x33, 0xdb, 0x33, 0xc9, 0x3b, 0x14, 0x72, 0xde, - 0x8b, 0xc8, 0x8b, 0xc2, 0x33, 0xd2, 0xeb, 0xd3, 0x8b, 0xd1, 0x8b, 0xc7, - 0x33, 0xc9, 0x33, 0xff, 0x3b, 0x14, 0x72, 0xcd, 0x8b, 0xf8, 0x8b, 0xc2, - 0x33, 0xd2, 0xeb, 0xc2, 0x8b, 0x7e, 0xfa, 0x89, 0xde, 0x89, 0x5e, 0xb6, - 0x8a, 0x9d, 0x0c, 0x06, 0x8b, 0x7e, 0xfe, 0xff, 0x46, 0xfe, 0x88, 0x1d, - 0x85, 0xc0, 0x75, 0x82, 0x85, 0xf6, 0x74, 0x03, 0xe9, 0x7b, 0xff, 0x85, - 0xc9, 0x75, 0xf9, 0x85, 0xd2, 0x75, 0xf5, 0xff, 0x4e, 0xfe, 0x8b, 0x76, - 0xfe, 0x8a, 0x04, 0x8b, 0x76, 0xfc, 0xff, 0x46, 0xfc, 0x88, 0x04, 0x84, - 0xc0, 0x75, 0xec, 0x8b, 0x46, 0x08, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, - 0x04, 0x00, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x8b, 0x76, - 0x08, 0x89, 0x76, 0xfe, 0x83, 0x7e, 0x0a, 0x0a, 0x75, 0x0c, 0x85, 0xc0, - 0x7c, 0x15, 0x75, 0x06, 0x85, 0xdb, 0x75, 0x02, 0x85, 0xc9, 0xff, 0x76, - 0x0a, 0xff, 0x76, 0xfe, 0xe8, 0x12, 0xff, 0x89, 0xf0, 0xeb, 0xcb, 0x31, - 0xff, 0x29, 0xd7, 0x89, 0xfa, 0xbf, 0x00, 0x00, 0x19, 0xcf, 0x89, 0xf9, - 0xbf, 0x00, 0x00, 0x19, 0xdf, 0x89, 0xfb, 0xbf, 0x00, 0x00, 0x19, 0xc7, - 0x89, 0xf8, 0x8d, 0x7c, 0x01, 0xc6, 0x04, 0x2d, 0x89, 0x7e, 0xfe, 0xeb, - 0xcd, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x24, 0x53, 0x51, 0xc6, - 0x46, 0xdc, 0x00, 0x8d, 0x76, 0xdd, 0x89, 0xdf, 0x8b, 0x5e, 0xd8, 0x89, - 0x5e, 0xfe, 0x8d, 0x5e, 0xfe, 0x33, 0xc9, 0x3b, 0x17, 0x72, 0x06, 0x92, - 0x87, 0xd1, 0xf7, 0x37, 0x91, 0xf7, 0x37, 0x89, 0x17, 0x8b, 0xd1, 0x8b, - 0x5e, 0xfe, 0x8a, 0x9f, 0x0c, 0x06, 0x88, 0x1c, 0x46, 0x85, 0xd2, 0x75, - 0xd7, 0x85, 0xc0, 0x75, 0xd3, 0x4e, 0x8a, 0x04, 0x88, 0x05, 0x47, 0x84, - 0xc0, 0x75, 0xf6, 0x8b, 0x46, 0xda, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, - 0x56, 0x89, 0xde, 0x83, 0xf9, 0x0a, 0x75, 0x04, 0x85, 0xd2, 0x7c, 0x07, - 0xe8, 0x9e, 0xff, 0x89, 0xf0, 0x5e, 0xc3, 0xf7, 0xda, 0xc6, 0x07, 0x2d, - 0xf7, 0xd8, 0x83, 0xda, 0x00, 0x43, 0xeb, 0xec, 0x73, 0x07, 0x50, 0xe8, - 0x2a, 0xfa, 0x58, 0xeb, 0x02, 0x2b, 0xc0, 0xc3, 0x73, 0x05, 0xe8, 0x1f, - 0xfa, 0xeb, 0x02, 0x2b, 0xc0, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc3, 0x89, 0xd1, 0x85, 0xc0, 0x74, 0x43, - 0x85, 0xd2, 0x74, 0x46, 0xe8, 0x6e, 0x03, 0x89, 0xc6, 0x89, 0xd8, 0xe8, - 0x76, 0x03, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x75, 0x23, 0x89, 0xc8, 0xe8, - 0x7c, 0xcf, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x74, 0x30, 0x8c, 0xda, 0x89, - 0xf1, 0x89, 0xc7, 0x89, 0xde, 0x8e, 0xc2, 0x89, 0xd8, 0xd1, 0xe9, 0xf3, - 0xa5, 0x13, 0xc9, 0xf3, 0xa4, 0xe8, 0x17, 0xd0, 0x8b, 0x46, 0xfe, 0x89, - 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x89, 0xd0, 0xe8, 0x4e, 0xcf, - 0xeb, 0xf1, 0xe8, 0x02, 0xd0, 0x31, 0xc0, 0xeb, 0xea, 0x89, 0xf2, 0x89, - 0xd8, 0xe8, 0x2c, 0x03, 0xeb, 0xde, 0x53, 0x52, 0x3d, 0x05, 0x00, 0x7d, - 0x10, 0x89, 0xc2, 0x8b, 0x1e, 0xe0, 0x07, 0xd1, 0xe2, 0x01, 0xd3, 0xf6, - 0x47, 0x01, 0x40, 0x74, 0x03, 0x5a, 0x5b, 0xc3, 0x80, 0x4f, 0x01, 0x40, - 0xe8, 0x65, 0xf9, 0x85, 0xc0, 0x74, 0xf2, 0x8b, 0x1e, 0xe0, 0x07, 0x01, - 0xd3, 0x80, 0x4f, 0x01, 0x20, 0x5a, 0x5b, 0xc3, 0x52, 0x89, 0xc2, 0xe8, - 0xc8, 0xff, 0x89, 0xd0, 0xe8, 0x1d, 0xf9, 0x5a, 0xc3, 0x53, 0x89, 0xc3, - 0xb4, 0x3e, 0xcd, 0x21, 0xe8, 0x35, 0xff, 0x5b, 0xc3, 0x53, 0x89, 0xc3, - 0xb4, 0x68, 0xf8, 0xcd, 0x21, 0xe8, 0x28, 0xff, 0x5b, 0xc3, 0x53, 0x51, - 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x83, 0x3e, 0xde, - 0x0a, 0x00, 0x75, 0x3a, 0xbb, 0x2c, 0x00, 0x8e, 0x06, 0x88, 0x07, 0x31, - 0xf6, 0x26, 0x8b, 0x07, 0x31, 0xd2, 0x89, 0x46, 0xfe, 0x8e, 0xc0, 0x31, - 0xdb, 0x30, 0xc0, 0x26, 0x3a, 0x07, 0x74, 0x0a, 0x43, 0x26, 0x3a, 0x07, - 0x75, 0xfa, 0x42, 0x43, 0xeb, 0xf1, 0x89, 0xd8, 0x29, 0xf0, 0x75, 0x03, - 0xb8, 0x01, 0x00, 0xe8, 0xa0, 0xce, 0x89, 0xc1, 0x89, 0xc3, 0x85, 0xc0, - 0x75, 0x09, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x89, - 0xd0, 0xd1, 0xe0, 0x05, 0x02, 0x00, 0x01, 0xd0, 0xe8, 0x83, 0xce, 0x89, - 0xc7, 0x85, 0xc0, 0x74, 0x39, 0xa3, 0xde, 0x0a, 0x8e, 0x46, 0xfe, 0x89, - 0x0e, 0xe8, 0x0b, 0x30, 0xc9, 0x8d, 0x45, 0x02, 0x26, 0x3a, 0x0c, 0x75, - 0x14, 0x89, 0xc3, 0xa3, 0xda, 0x0a, 0xc7, 0x05, 0x00, 0x00, 0x85, 0xd2, - 0x74, 0xc4, 0x4a, 0xc6, 0x07, 0x00, 0x43, 0xeb, 0xf5, 0x89, 0x1d, 0x89, - 0xc7, 0x26, 0x8a, 0x04, 0x46, 0x88, 0x07, 0x43, 0x84, 0xc0, 0x75, 0xf5, - 0xeb, 0xd3, 0x89, 0xc8, 0xe8, 0xf8, 0xce, 0xeb, 0xa5, 0xe8, 0x76, 0x02, - 0xa1, 0xde, 0x0a, 0x85, 0xc0, 0x75, 0x08, 0xa1, 0xe8, 0x0b, 0x85, 0xc0, - 0x75, 0x0b, 0xc3, 0xe8, 0xe1, 0xce, 0x31, 0xc0, 0xa3, 0xde, 0x0a, 0xeb, - 0xee, 0xe8, 0xd7, 0xce, 0x31, 0xc0, 0xa3, 0xe8, 0x0b, 0xc3, 0x51, 0x57, - 0xb9, 0x01, 0x01, 0x31, 0xc0, 0xbf, 0xe6, 0x0a, 0xa3, 0x00, 0x08, 0xa3, - 0x02, 0x08, 0x30, 0xc0, 0x57, 0x1e, 0x07, 0xf3, 0xaa, 0x5f, 0x5f, 0x59, - 0xc3, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc3, 0x89, 0xd6, 0xe8, 0xda, 0xff, - 0x8e, 0xc2, 0x26, 0x83, 0x3f, 0x00, 0x74, 0x2d, 0xc7, 0x06, 0x00, 0x08, - 0x01, 0x00, 0x8e, 0xc6, 0x26, 0x8b, 0x07, 0x85, 0xc0, 0x74, 0x1e, 0x88, - 0xe2, 0x30, 0xe4, 0x30, 0xf6, 0x89, 0xc7, 0x89, 0xd1, 0x81, 0xc7, 0xe6, - 0x0a, 0x29, 0xc1, 0xb0, 0x01, 0x41, 0x47, 0x43, 0x43, 0x57, 0x1e, 0x07, - 0xf3, 0xaa, 0x5f, 0xeb, 0xd9, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x51, 0x52, - 0x57, 0x3d, 0xff, 0xff, 0x74, 0x48, 0x3d, 0xfe, 0xff, 0x74, 0x43, 0x3d, - 0xfd, 0xff, 0x75, 0x05, 0xe8, 0x8b, 0xff, 0xeb, 0x4d, 0x3d, 0xfc, 0xff, - 0x75, 0x2b, 0xe8, 0x81, 0xff, 0xb9, 0x1f, 0x00, 0xb0, 0x01, 0xbf, 0x68, - 0x0b, 0x57, 0x1e, 0x07, 0xf3, 0xaa, 0x5f, 0xb9, 0x1d, 0x00, 0xbf, 0xc7, - 0x0b, 0x57, 0x1e, 0x07, 0xf3, 0xaa, 0x5f, 0xc7, 0x06, 0x00, 0x08, 0x01, - 0x00, 0xc7, 0x06, 0x02, 0x08, 0xa4, 0x03, 0xeb, 0x1d, 0x85, 0xc0, 0x74, - 0x05, 0xb8, 0x01, 0x00, 0xeb, 0x16, 0xe8, 0x10, 0x02, 0x85, 0xd2, 0x75, - 0x04, 0x85, 0xc0, 0x74, 0x09, 0xe8, 0x5d, 0xff, 0xe8, 0x2b, 0x02, 0xa3, - 0x02, 0x08, 0x31, 0xc0, 0x5f, 0x5a, 0x59, 0xc3, 0x3d, 0x81, 0x82, 0x72, - 0x08, 0x3d, 0x9a, 0x82, 0x77, 0x03, 0x2d, 0x21, 0x00, 0xc3, 0x3d, 0x61, - 0x00, 0x7c, 0x08, 0x3d, 0x7a, 0x00, 0x7f, 0x03, 0x2d, 0x20, 0x00, 0xc3, - 0x50, 0xb8, 0xa4, 0x00, 0xe8, 0x14, 0x02, 0x58, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x81, 0xec, 0x9a, 0x00, 0x50, 0x81, 0xed, 0x80, 0x00, 0x89, 0xd6, - 0x89, 0x5e, 0x7c, 0x89, 0x4e, 0x78, 0xe8, 0x7e, 0x02, 0x89, 0xc2, 0x3d, - 0xff, 0xff, 0x74, 0x03, 0xe9, 0xdc, 0x00, 0xe8, 0x87, 0xde, 0x89, 0xc7, - 0x83, 0x3d, 0x01, 0x74, 0x0a, 0xe8, 0x7d, 0xde, 0x89, 0xc7, 0x83, 0x3d, - 0x09, 0x75, 0xe9, 0x8a, 0x04, 0x3c, 0x5c, 0x74, 0xe3, 0x84, 0xc0, 0x74, - 0xdf, 0x80, 0x7c, 0x01, 0x3a, 0x74, 0xd9, 0xb8, 0xde, 0x04, 0xe8, 0x8f, - 0xe6, 0x89, 0xc7, 0x85, 0xc0, 0x74, 0xcd, 0x89, 0xf0, 0xe8, 0x9c, 0x05, - 0x40, 0x89, 0x46, 0x7a, 0xb8, 0x90, 0x00, 0x2b, 0x46, 0x7a, 0x89, 0x46, - 0x76, 0x80, 0x3d, 0x00, 0x74, 0xb6, 0xba, 0x3b, 0x00, 0x89, 0xf8, 0xe8, - 0x99, 0x05, 0x89, 0x46, 0x7e, 0x85, 0xc0, 0x75, 0x0c, 0x89, 0xf8, 0x89, - 0xfb, 0xe8, 0x74, 0x05, 0x01, 0xc3, 0x89, 0x5e, 0x7e, 0x8b, 0x4e, 0x7e, - 0x29, 0xf9, 0x3b, 0x4e, 0x76, 0x76, 0x17, 0xe8, 0x1b, 0xde, 0x89, 0xc6, - 0xc7, 0x04, 0x02, 0x00, 0xe8, 0x6b, 0xf7, 0x89, 0xc6, 0xb8, 0xff, 0xff, - 0xc7, 0x04, 0x0a, 0x00, 0xeb, 0x5b, 0x8d, 0x46, 0xe6, 0x89, 0xfa, 0x8d, - 0x7e, 0xe6, 0x89, 0xcb, 0x01, 0xcf, 0xe8, 0x6f, 0x05, 0x80, 0x7d, 0xff, - 0x5c, 0x74, 0x04, 0xc6, 0x05, 0x5c, 0x47, 0x8b, 0x5e, 0x7a, 0x89, 0xf2, - 0x89, 0xf8, 0x8b, 0x4e, 0x78, 0xe8, 0x58, 0x05, 0x8b, 0x5e, 0x7c, 0x8d, - 0x56, 0xe6, 0x8b, 0x46, 0xe4, 0xe8, 0xbf, 0x01, 0x89, 0xc2, 0x3d, 0xff, - 0xff, 0x75, 0x20, 0xe8, 0xcb, 0xdd, 0x89, 0xc7, 0x83, 0x3d, 0x01, 0x74, - 0x0a, 0xe8, 0xc1, 0xdd, 0x89, 0xc7, 0x83, 0x3d, 0x09, 0x75, 0x0c, 0x8b, - 0x7e, 0x7e, 0x80, 0x3d, 0x3b, 0x75, 0x04, 0x47, 0xe9, 0x66, 0xff, 0x89, - 0xd0, 0x8d, 0xa6, 0x80, 0x00, 0x5d, 0x5f, 0x5e, 0xc3, 0x53, 0x89, 0xc3, - 0x83, 0xeb, 0x02, 0x8b, 0x07, 0x24, 0xfe, 0x2d, 0x02, 0x00, 0x5b, 0xc3, - 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, - 0x89, 0xd7, 0x80, 0x66, 0xfe, 0xfe, 0x8d, 0x4e, 0xfc, 0x8c, 0xd8, 0x89, - 0xfb, 0x89, 0xf2, 0xe8, 0x0b, 0x05, 0x85, 0xc0, 0x74, 0x12, 0x3d, 0x01, - 0x00, 0x74, 0x0b, 0x3d, 0x02, 0x00, 0x75, 0xe6, 0xf6, 0x46, 0xfe, 0x01, - 0x74, 0x0c, 0x31, 0xf6, 0x89, 0xf0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, - 0x5b, 0xc3, 0x8b, 0x46, 0xfc, 0xe8, 0xea, 0xda, 0x85, 0xc0, 0x74, 0xea, - 0x80, 0x4e, 0xfe, 0x01, 0xeb, 0xc4, 0x53, 0x52, 0x56, 0xa1, 0xde, 0x0a, - 0x85, 0xc0, 0x74, 0x5a, 0x89, 0xc3, 0x8b, 0x07, 0x85, 0xc0, 0x74, 0x28, - 0x83, 0x3e, 0xda, 0x0a, 0x00, 0x75, 0x05, 0x83, 0xc3, 0x02, 0xeb, 0xee, - 0x89, 0xda, 0x2b, 0x16, 0xde, 0x0a, 0x8b, 0x36, 0xda, 0x0a, 0xd1, 0xfa, - 0x01, 0xd6, 0x80, 0x3c, 0x00, 0x74, 0x03, 0xe8, 0x49, 0xcc, 0xc7, 0x07, - 0x00, 0x00, 0xeb, 0xdf, 0x83, 0x3e, 0xda, 0x0a, 0x00, 0x74, 0x06, 0xa1, - 0xde, 0x0a, 0xe8, 0x36, 0xcc, 0xb8, 0x03, 0x00, 0xe8, 0x77, 0xcb, 0x89, - 0xc3, 0x85, 0xc0, 0x74, 0x17, 0xc7, 0x07, 0x00, 0x00, 0x83, 0xc3, 0x02, - 0xa3, 0xde, 0x0a, 0x89, 0x1e, 0xda, 0x0a, 0xc6, 0x07, 0x00, 0x31, 0xc0, - 0x5e, 0x5a, 0x5b, 0xc3, 0xb8, 0xff, 0xff, 0xeb, 0xf7, 0x53, 0x51, 0x56, - 0x57, 0x55, 0x1e, 0x33, 0xc0, 0x8e, 0xd8, 0xb4, 0x63, 0xcd, 0x21, 0x8c, - 0xdf, 0x72, 0x08, 0x84, 0xc0, 0x75, 0x04, 0x85, 0xff, 0x75, 0x04, 0x33, - 0xff, 0x33, 0xf6, 0x1f, 0x5d, 0x89, 0xf0, 0x89, 0xfa, 0x5f, 0x5e, 0x59, - 0x5b, 0xc3, 0x53, 0x52, 0xb8, 0x01, 0x66, 0xcd, 0x21, 0x73, 0x02, 0x33, - 0xdb, 0x89, 0xd8, 0x5a, 0x5b, 0xc3, 0x8c, 0x16, 0x04, 0x08, 0xc3, 0x3b, - 0xc4, 0x73, 0x13, 0x2b, 0xc4, 0xf7, 0xd8, 0x3b, 0x06, 0x8e, 0x07, 0x77, - 0x08, 0x8c, 0xd0, 0x3b, 0x06, 0x04, 0x08, 0x74, 0x01, 0xc3, 0x0e, 0x5a, - 0xb8, 0x51, 0x42, 0xbb, 0x01, 0x00, 0xe9, 0x4f, 0xe5, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x20, 0x4f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x21, - 0x00, 0x53, 0x52, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x2c, 0x8d, 0x5e, 0xd4, - 0xba, 0x07, 0x00, 0xe8, 0x7a, 0x05, 0x85, 0xc0, 0x75, 0x09, 0xb8, 0x01, - 0x00, 0x89, 0xec, 0x5d, 0x5a, 0x5b, 0xc3, 0x31, 0xc0, 0xeb, 0xf6, 0x56, - 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x50, 0x89, 0xd6, 0x89, 0xdf, - 0x89, 0x4e, 0xfe, 0x8b, 0x56, 0x08, 0x89, 0xf0, 0x31, 0xc9, 0xe8, 0xc8, - 0x06, 0xff, 0x76, 0xfe, 0x57, 0x56, 0xff, 0x76, 0xfc, 0xe8, 0x11, 0x07, - 0x83, 0xc4, 0x08, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x02, 0x00, 0x50, - 0xb8, 0x9c, 0x00, 0xe8, 0x75, 0xff, 0x58, 0x56, 0x57, 0x55, 0x89, 0xe5, - 0x81, 0xec, 0x84, 0x00, 0x50, 0x81, 0xed, 0x80, 0x00, 0x89, 0xd7, 0x89, - 0x5e, 0x78, 0x89, 0xca, 0xc6, 0x46, 0x7e, 0x00, 0x3d, 0x02, 0x00, 0x75, - 0x24, 0xe8, 0xc1, 0x07, 0x89, 0xc1, 0x85, 0xc0, 0x74, 0x0c, 0x89, 0xd3, - 0x89, 0xf8, 0x8b, 0x56, 0x78, 0xff, 0xd1, 0xe9, 0xee, 0x01, 0xe8, 0xd8, - 0xdb, 0x89, 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x09, 0x00, 0xe9, 0xdf, - 0x01, 0x30, 0xc0, 0x88, 0x46, 0x7c, 0x30, 0xe4, 0x50, 0x8d, 0x46, 0x5e, - 0x8d, 0x4e, 0x68, 0x50, 0x8d, 0x46, 0x60, 0x8d, 0x5e, 0x66, 0x50, 0x8b, - 0x46, 0x78, 0xe8, 0x13, 0x05, 0x89, 0x46, 0x7a, 0x3d, 0xff, 0xff, 0x75, - 0x03, 0xe9, 0xb8, 0x01, 0x89, 0x46, 0x72, 0x89, 0xf8, 0xe8, 0xe4, 0x02, - 0x05, 0x9a, 0x00, 0x89, 0xc2, 0xe8, 0x12, 0xca, 0x89, 0x46, 0x74, 0x85, - 0xc0, 0x74, 0x03, 0xe9, 0xa6, 0x01, 0x89, 0xd1, 0x41, 0x80, 0xe1, 0xfe, - 0xe8, 0x8b, 0xe0, 0x39, 0xc1, 0x72, 0x03, 0xe9, 0x80, 0x01, 0x89, 0xc8, - 0x2b, 0xe0, 0x89, 0xe0, 0x89, 0xc6, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x76, - 0x01, 0x8d, 0x46, 0x6e, 0x8d, 0x4e, 0x64, 0x8d, 0x5e, 0x62, 0x81, 0xea, - 0x93, 0x00, 0x50, 0x8d, 0x46, 0x6a, 0x01, 0xf2, 0x50, 0x89, 0xf8, 0xe8, - 0x73, 0x07, 0x8d, 0x46, 0xfc, 0xff, 0x16, 0x40, 0x08, 0x80, 0x3e, 0x8c, - 0x07, 0x00, 0x74, 0x2b, 0x8d, 0x56, 0x6c, 0x8b, 0x46, 0x72, 0xe8, 0x5f, - 0x08, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x55, 0x01, 0x8b, 0x46, 0x6c, 0xb1, - 0x04, 0x89, 0x46, 0x60, 0x8b, 0x46, 0x72, 0x8b, 0x5e, 0x68, 0xd3, 0xe0, - 0x8b, 0x56, 0x6c, 0x50, 0x8c, 0xd9, 0x31, 0xc0, 0xe8, 0x79, 0x08, 0x8b, - 0x46, 0x5e, 0xe8, 0x91, 0xc9, 0x89, 0x46, 0x70, 0x85, 0xc0, 0x74, 0x03, - 0xe9, 0x37, 0x01, 0x8b, 0x46, 0x5e, 0x40, 0x24, 0xfe, 0x89, 0xc2, 0xe8, - 0x08, 0xe0, 0x39, 0xc2, 0x72, 0x03, 0xe9, 0x20, 0x01, 0x8b, 0x46, 0x5e, - 0x40, 0x24, 0xfe, 0x2b, 0xe0, 0x89, 0xe0, 0x89, 0xc7, 0x85, 0xc0, 0x75, - 0x17, 0xe8, 0xe5, 0xda, 0x89, 0xc3, 0xc7, 0x07, 0x02, 0x00, 0xe8, 0x35, - 0xf4, 0x89, 0xc3, 0xc7, 0x46, 0x7a, 0xff, 0xff, 0xc7, 0x07, 0x0a, 0x00, - 0x85, 0xff, 0x75, 0x03, 0xe9, 0xa4, 0x00, 0x80, 0x3e, 0x8a, 0x07, 0x03, - 0x72, 0x15, 0x8b, 0x5e, 0x62, 0x80, 0x3f, 0x00, 0x75, 0x0d, 0x8b, 0x5e, - 0x64, 0x80, 0x3f, 0x00, 0x75, 0x05, 0xc7, 0x46, 0x64, 0xe4, 0x04, 0xff, - 0x76, 0x6e, 0x8b, 0x4e, 0x6a, 0x8b, 0x5e, 0x64, 0x8b, 0x56, 0x62, 0x89, - 0xf0, 0xe8, 0x3b, 0x08, 0xe8, 0x9a, 0xda, 0x89, 0xc3, 0xc7, 0x07, 0x01, - 0x00, 0x8b, 0x5e, 0x6e, 0x80, 0x3f, 0x00, 0x75, 0x03, 0xe9, 0xdb, 0x00, - 0xba, 0xe7, 0x04, 0x89, 0xd8, 0xe8, 0xc9, 0x09, 0x85, 0xc0, 0x74, 0x03, - 0xe9, 0xb1, 0x00, 0x89, 0xf0, 0xc7, 0x46, 0x7a, 0xff, 0xff, 0xe8, 0x08, - 0xfe, 0x85, 0xc0, 0x74, 0x46, 0x8b, 0x46, 0x66, 0xb9, 0x01, 0x00, 0x8b, - 0x56, 0x78, 0xe8, 0x96, 0xc9, 0x89, 0xfb, 0x89, 0xf0, 0xc7, 0x46, 0x66, - 0x00, 0x00, 0xe8, 0xf0, 0x04, 0x31, 0xc0, 0x50, 0x8a, 0x56, 0x7c, 0x57, - 0x30, 0xf6, 0x56, 0x8d, 0x46, 0x5a, 0xe8, 0xe4, 0xe2, 0x50, 0x80, 0x7e, - 0x7c, 0x00, 0x74, 0x6f, 0xb8, 0xec, 0x04, 0x50, 0xb8, 0xf8, 0x04, 0xe8, - 0x62, 0xe2, 0x50, 0xff, 0x76, 0xfa, 0xe8, 0xb0, 0x09, 0x83, 0xc4, 0x0e, - 0x89, 0x46, 0x7a, 0x8b, 0x46, 0x70, 0xe8, 0x56, 0xc9, 0x8b, 0x46, 0x74, - 0xe8, 0x50, 0xc9, 0x8b, 0x46, 0x66, 0xe8, 0x4a, 0xc9, 0x80, 0x3e, 0x8c, - 0x07, 0x00, 0x74, 0x06, 0x8b, 0x46, 0x60, 0xe8, 0x44, 0x07, 0x8d, 0x46, - 0xfc, 0xff, 0x16, 0x42, 0x08, 0x8b, 0x46, 0x7a, 0xeb, 0x0e, 0x31, 0xc0, - 0xe9, 0x81, 0xfe, 0x8b, 0x46, 0x66, 0xe8, 0x26, 0xc9, 0xb8, 0xff, 0xff, - 0x8d, 0xa6, 0x80, 0x00, 0x5d, 0x5f, 0x5e, 0xc3, 0x89, 0xc6, 0xe9, 0x74, - 0xfe, 0x8b, 0x46, 0x74, 0xe8, 0x10, 0xc9, 0xeb, 0xe2, 0x31, 0xc0, 0xe9, - 0xe5, 0xfe, 0x89, 0xc7, 0xe9, 0xfd, 0xfe, 0xb8, 0xf0, 0x04, 0xeb, 0x8f, - 0xe8, 0xc6, 0xd9, 0xff, 0x76, 0x78, 0x89, 0xc3, 0x89, 0xf2, 0xc7, 0x07, - 0x00, 0x00, 0x8b, 0x46, 0xfa, 0x8b, 0x4e, 0x60, 0x89, 0xfb, 0xe8, 0x6a, - 0xfd, 0xeb, 0x85, 0x89, 0xf0, 0x89, 0xf2, 0xe8, 0xee, 0x00, 0x01, 0xc2, - 0x89, 0x56, 0x76, 0x80, 0x7e, 0x7e, 0x00, 0x75, 0x03, 0xe9, 0x98, 0x00, - 0xe8, 0x96, 0xd9, 0x89, 0xc3, 0xc7, 0x07, 0x01, 0x00, 0xe8, 0x8d, 0xd9, - 0x89, 0xc3, 0x83, 0x3f, 0x01, 0x74, 0x03, 0xe9, 0xba, 0x00, 0xe8, 0x80, - 0xd9, 0xba, 0x05, 0x05, 0x89, 0xc3, 0x8b, 0x46, 0x76, 0xc7, 0x07, 0x00, - 0x00, 0xe8, 0x10, 0x09, 0xff, 0x76, 0x78, 0x8b, 0x4e, 0x60, 0x8b, 0x46, - 0xfa, 0x89, 0xfb, 0x89, 0xf2, 0xe8, 0x1b, 0xfd, 0x89, 0x46, 0x7a, 0xe8, - 0x5b, 0xd9, 0x89, 0xc3, 0x83, 0x3f, 0x01, 0x75, 0x7b, 0xe8, 0x51, 0xd9, - 0xba, 0xe7, 0x04, 0x89, 0xc3, 0x8b, 0x46, 0x76, 0xc7, 0x07, 0x00, 0x00, - 0xe8, 0xe1, 0x08, 0x89, 0xf0, 0xe8, 0xd5, 0xfc, 0x85, 0xc0, 0x75, 0x03, - 0xe9, 0x10, 0xff, 0x8b, 0x46, 0x66, 0xb9, 0x01, 0x00, 0x8b, 0x56, 0x78, - 0xe8, 0x60, 0xc8, 0x89, 0xfb, 0x89, 0xf0, 0xc7, 0x46, 0x66, 0x00, 0x00, - 0xe8, 0xba, 0x03, 0x31, 0xc0, 0x50, 0x8a, 0x56, 0x7c, 0x57, 0x30, 0xf6, - 0x56, 0x8d, 0x46, 0x5a, 0xe8, 0xae, 0xe1, 0x50, 0x80, 0x7e, 0x7c, 0x00, - 0x75, 0x03, 0xe9, 0x36, 0xff, 0xe9, 0xc4, 0xfe, 0xba, 0x00, 0x05, 0x8b, - 0x46, 0x76, 0xe8, 0x97, 0x08, 0xe8, 0xf5, 0xd8, 0xff, 0x76, 0x78, 0x89, - 0xc3, 0x89, 0xf2, 0xc7, 0x07, 0x00, 0x00, 0x8b, 0x46, 0xfa, 0x8b, 0x4e, - 0x60, 0x89, 0xfb, 0xe8, 0x99, 0xfc, 0x89, 0x46, 0x7a, 0xe9, 0x49, 0xff, - 0xe8, 0xd6, 0xd8, 0x89, 0xc3, 0x83, 0x3f, 0x09, 0x75, 0x03, 0xe9, 0x78, - 0xff, 0xe9, 0xa3, 0xfe, 0xe8, 0xc6, 0xd8, 0x89, 0xc3, 0x83, 0x3f, 0x09, - 0x75, 0x03, 0xe9, 0x39, 0xff, 0xe9, 0x93, 0xfe, 0x51, 0x57, 0x89, 0xc7, - 0x8c, 0xd8, 0x8e, 0xc0, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0xf2, 0xae, 0xf7, - 0xd1, 0x49, 0x89, 0xc8, 0x5f, 0x59, 0xc3, 0x53, 0x56, 0x89, 0xc3, 0x88, - 0xd0, 0x3a, 0x07, 0x74, 0x0a, 0x89, 0xde, 0x43, 0x80, 0x3c, 0x00, 0x75, - 0xf4, 0x31, 0xdb, 0x89, 0xd8, 0x5e, 0x5b, 0xc3, 0x51, 0x56, 0x57, 0x89, - 0xd9, 0x89, 0xd6, 0x89, 0xc7, 0x57, 0x8c, 0xd8, 0x8e, 0xc0, 0xd1, 0xe9, - 0xf3, 0xa5, 0x13, 0xc9, 0xf3, 0xa4, 0x5f, 0x89, 0xf8, 0x5f, 0x5e, 0x59, - 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0c, 0x89, 0xd6, 0x89, - 0x4e, 0xfc, 0x8d, 0x57, 0x03, 0x80, 0xe2, 0xfe, 0x39, 0xda, 0x73, 0x69, - 0xba, 0xff, 0xff, 0x83, 0xee, 0x02, 0x8e, 0xc0, 0x26, 0x8b, 0x1c, 0x80, - 0xe3, 0xfe, 0x39, 0xda, 0x76, 0x67, 0x89, 0xf7, 0x29, 0xda, 0x01, 0xdf, - 0x8b, 0x5e, 0xfc, 0x89, 0x7e, 0xfe, 0x89, 0x17, 0x8b, 0x5e, 0xfe, 0x8e, - 0xc0, 0x26, 0x83, 0x3f, 0xff, 0x74, 0x48, 0x26, 0xf6, 0x07, 0x01, 0x75, - 0x4b, 0x8b, 0x7e, 0xfe, 0x26, 0x8b, 0x0d, 0x26, 0x8b, 0x7d, 0x04, 0x89, - 0x7e, 0xfa, 0x8b, 0x7e, 0xfe, 0x8c, 0xda, 0x26, 0x8b, 0x7d, 0x02, 0x31, - 0xdb, 0x89, 0x7e, 0xf8, 0x39, 0xd0, 0x75, 0x38, 0x8b, 0x1e, 0x4c, 0x06, - 0x8e, 0xc0, 0x26, 0x83, 0x7f, 0x04, 0x00, 0x74, 0x2b, 0x39, 0xf3, 0x76, - 0x1e, 0x8e, 0xc0, 0x26, 0x8b, 0x5f, 0x04, 0xeb, 0xeb, 0x83, 0xfa, 0x06, - 0x73, 0x95, 0xba, 0x06, 0x00, 0xeb, 0x90, 0xb8, 0x02, 0x00, 0xe9, 0x9b, - 0x00, 0xe9, 0xa3, 0x00, 0xe9, 0x9b, 0x00, 0x26, 0x8b, 0x17, 0x01, 0xda, - 0x39, 0xd6, 0x73, 0xd9, 0x8e, 0xc0, 0x26, 0x8b, 0x57, 0x06, 0x3b, 0x56, - 0xfe, 0x75, 0x0a, 0x89, 0xd7, 0x26, 0x8b, 0x55, 0x02, 0x26, 0x89, 0x57, - 0x06, 0x8b, 0x7e, 0xfc, 0x3b, 0x0d, 0x73, 0x2b, 0x8b, 0x7e, 0xf8, 0x8e, - 0xc0, 0x8b, 0x56, 0xfa, 0x26, 0x89, 0x55, 0x04, 0x89, 0xd7, 0x8b, 0x56, - 0xf8, 0x26, 0x89, 0x55, 0x02, 0x26, 0x01, 0x0c, 0x26, 0xff, 0x4f, 0x0e, - 0x8b, 0x5e, 0xfc, 0x3b, 0x0f, 0x73, 0x4b, 0x01, 0x4e, 0xfe, 0x29, 0x0f, - 0xe9, 0x51, 0xff, 0x89, 0xca, 0x2b, 0x15, 0x89, 0x56, 0xf6, 0x83, 0xfa, - 0x06, 0x72, 0xc9, 0x8b, 0x15, 0x01, 0x56, 0xfe, 0x8e, 0xc0, 0x8b, 0x56, - 0xf6, 0x8b, 0x5e, 0xfe, 0x8b, 0x7e, 0xf8, 0x26, 0x89, 0x17, 0x26, 0x89, - 0x7f, 0x02, 0x8b, 0x7e, 0xfa, 0x26, 0x89, 0x7f, 0x04, 0x8b, 0x5e, 0xf8, - 0x8b, 0x7e, 0xfe, 0x26, 0x89, 0x7f, 0x04, 0x8b, 0x5e, 0xfa, 0x26, 0x89, - 0x7f, 0x02, 0x8b, 0x5e, 0xfc, 0x8b, 0x07, 0x26, 0x01, 0x04, 0x31, 0xc0, - 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0xb8, 0x01, 0x00, 0xeb, 0xf5, 0x89, - 0xd9, 0x29, 0xd1, 0x83, 0xf9, 0x06, 0x72, 0xea, 0x89, 0xd7, 0x83, 0xcf, - 0x01, 0x26, 0x89, 0x3c, 0x89, 0xf7, 0x80, 0xc9, 0x01, 0x01, 0xd7, 0x31, - 0xdb, 0x89, 0x7e, 0xf4, 0x8c, 0xda, 0x26, 0x89, 0x0d, 0x39, 0xd0, 0x75, - 0x22, 0x8b, 0x1e, 0x4c, 0x06, 0x8e, 0xc0, 0x26, 0x83, 0x7f, 0x04, 0x00, - 0x74, 0x15, 0x39, 0xf3, 0x76, 0x08, 0x8e, 0xc0, 0x26, 0x8b, 0x5f, 0x04, - 0xeb, 0xeb, 0x26, 0x8b, 0x17, 0x01, 0xda, 0x39, 0xd6, 0x73, 0xef, 0x8b, - 0x56, 0xf4, 0x8e, 0xc0, 0x83, 0xc2, 0x02, 0x26, 0xff, 0x47, 0x0c, 0xe8, - 0xbd, 0x06, 0xeb, 0x9a, 0x51, 0x89, 0xd1, 0x89, 0xda, 0x89, 0xc3, 0xb4, - 0x1a, 0xcd, 0x21, 0x8b, 0xd3, 0xb4, 0x4e, 0xcd, 0x21, 0xe8, 0x88, 0xf5, - 0x59, 0xc3, 0x52, 0x89, 0xc2, 0xb4, 0x1a, 0xcd, 0x21, 0xb4, 0x4f, 0xcd, - 0x21, 0xe8, 0x78, 0xf5, 0x5a, 0xc3, 0x31, 0xc0, 0xc3, 0x53, 0x56, 0x89, - 0xc3, 0x89, 0xd6, 0x8a, 0x04, 0x88, 0x07, 0x84, 0xc0, 0x74, 0x04, 0x43, - 0x46, 0xeb, 0xf4, 0x89, 0xd8, 0x5e, 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x50, 0x53, 0x51, 0x85, 0xd2, 0x75, 0x04, 0x8b, 0x16, 0xde, 0x0a, - 0x31, 0xf6, 0x85, 0xd2, 0x74, 0x12, 0x89, 0xd3, 0x8b, 0x07, 0x85, 0xc0, - 0x74, 0x0a, 0xe8, 0xc3, 0xfd, 0x40, 0x43, 0x43, 0x01, 0xc6, 0xeb, 0xf0, - 0x46, 0x83, 0x7e, 0x0c, 0x00, 0x74, 0x0d, 0x8b, 0x5e, 0xfe, 0x8b, 0x07, - 0x46, 0x46, 0xe8, 0xab, 0xfd, 0x40, 0x01, 0xc6, 0x83, 0xc6, 0x0f, 0x83, - 0xe6, 0xf0, 0x83, 0xc6, 0x0f, 0x8b, 0x0e, 0xb2, 0x07, 0x89, 0xf0, 0xc7, - 0x06, 0xb2, 0x07, 0x10, 0x00, 0xe8, 0xc6, 0xc4, 0x89, 0xc3, 0x85, 0xc0, - 0x75, 0x27, 0x89, 0xf0, 0xe8, 0xbb, 0xc4, 0x89, 0xc3, 0x85, 0xc0, 0x75, - 0x1c, 0xe8, 0x35, 0xd6, 0x89, 0xc3, 0xc7, 0x07, 0x05, 0x00, 0xe8, 0x85, - 0xef, 0x89, 0xc3, 0x89, 0x0e, 0xb2, 0x07, 0xb8, 0xff, 0xff, 0xc7, 0x07, - 0x08, 0x00, 0xe9, 0xb0, 0x00, 0x8b, 0x7e, 0xfc, 0x89, 0x1d, 0x83, 0xc3, - 0x0f, 0x89, 0x0e, 0xb2, 0x07, 0x80, 0xe3, 0xf0, 0xb1, 0x04, 0x89, 0xdf, - 0xd3, 0xef, 0x8c, 0xd8, 0x89, 0xf9, 0x8b, 0x7e, 0x08, 0x01, 0xc1, 0x89, - 0x0d, 0x8b, 0x7e, 0xfa, 0x83, 0xee, 0x0f, 0x89, 0x1d, 0x85, 0xd2, 0x74, - 0x16, 0x89, 0xd7, 0x8b, 0x05, 0x85, 0xc0, 0x74, 0x0e, 0x89, 0xc2, 0x89, - 0xd8, 0xe8, 0x2d, 0xff, 0x89, 0xc3, 0x47, 0x47, 0x43, 0xeb, 0xec, 0xc6, - 0x07, 0x00, 0x43, 0x83, 0x7e, 0x0c, 0x00, 0x74, 0x12, 0xc6, 0x07, 0x01, - 0x43, 0x8b, 0x7e, 0xfe, 0xc6, 0x07, 0x00, 0x8d, 0x47, 0x01, 0x8b, 0x15, - 0xe8, 0x5d, 0x05, 0x8b, 0x5e, 0xfe, 0x31, 0xd2, 0x83, 0x3f, 0x00, 0x74, - 0x17, 0x43, 0x43, 0x83, 0x3f, 0x00, 0x74, 0x10, 0x85, 0xd2, 0x74, 0x01, - 0x42, 0x8b, 0x07, 0xe8, 0xea, 0xfc, 0x43, 0x43, 0x01, 0xc2, 0xeb, 0xeb, - 0x83, 0xfa, 0x7e, 0x76, 0x1f, 0xe8, 0x95, 0xd5, 0x89, 0xc3, 0xc7, 0x07, - 0x02, 0x00, 0xe8, 0xe5, 0xee, 0x89, 0xc3, 0xc7, 0x07, 0x0a, 0x00, 0x8b, - 0x5e, 0xfc, 0x8b, 0x07, 0xe8, 0xb4, 0xc4, 0xb8, 0xff, 0xff, 0xeb, 0x0d, - 0x8b, 0x5e, 0x0a, 0xb1, 0x04, 0x89, 0xf0, 0xc7, 0x07, 0x90, 0x00, 0xd3, - 0xe8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x06, 0x00, 0x56, 0x57, 0x55, - 0x89, 0xe5, 0x50, 0x89, 0xd6, 0x89, 0x5e, 0xfe, 0x85, 0xc9, 0x75, 0x01, - 0x43, 0x83, 0x3c, 0x00, 0x74, 0x21, 0x46, 0x46, 0x83, 0x3c, 0x00, 0x74, - 0x1a, 0x89, 0xd8, 0x8b, 0x14, 0xe8, 0x8d, 0xfe, 0x89, 0xc7, 0x46, 0x46, - 0x89, 0xc3, 0x83, 0x3c, 0x00, 0x74, 0x08, 0x8d, 0x5d, 0x01, 0xc6, 0x05, - 0x20, 0xeb, 0xe6, 0x85, 0xc9, 0x74, 0x05, 0xc6, 0x07, 0x00, 0xeb, 0x0f, - 0x88, 0xda, 0xc6, 0x07, 0x0d, 0x2a, 0x56, 0xfe, 0x8b, 0x5e, 0xfe, 0xfe, - 0xca, 0x88, 0x17, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x55, 0x8b, 0xec, - 0x56, 0x57, 0x52, 0x51, 0x53, 0x06, 0x1e, 0x8c, 0xd0, 0x8e, 0xd8, 0x8b, - 0x46, 0x0a, 0xa3, 0x26, 0x08, 0x8b, 0x46, 0x08, 0xa3, 0x28, 0x08, 0x8c, - 0x1e, 0x2a, 0x08, 0x8c, 0x1e, 0x32, 0x08, 0x1e, 0x07, 0x8b, 0xf0, 0x46, - 0xbf, 0x06, 0x08, 0x89, 0x3e, 0x2c, 0x08, 0x8c, 0x1e, 0x2e, 0x08, 0xb0, - 0x01, 0xb4, 0x29, 0xcd, 0x21, 0xbf, 0x16, 0x08, 0x89, 0x3e, 0x30, 0x08, - 0x8c, 0x1e, 0x32, 0x08, 0xb0, 0x01, 0xb4, 0x29, 0xcd, 0x21, 0x55, 0x06, - 0x1e, 0x8c, 0x16, 0x36, 0x08, 0x89, 0x26, 0x34, 0x08, 0x8c, 0x1e, 0x3c, - 0x08, 0x80, 0x3e, 0x8a, 0x07, 0x02, 0x75, 0x10, 0xbf, 0x2e, 0x00, 0x8b, - 0x35, 0x89, 0x36, 0x38, 0x08, 0x8b, 0x75, 0x02, 0x89, 0x36, 0x3a, 0x08, - 0xbb, 0x26, 0x08, 0x83, 0x7e, 0x04, 0x01, 0x75, 0x06, 0xb0, 0x04, 0x33, - 0xc9, 0xeb, 0x02, 0x32, 0xc0, 0xf8, 0x50, 0xb4, 0x0b, 0xcd, 0x21, 0x58, - 0xc7, 0x06, 0x94, 0x07, 0x01, 0x00, 0x8b, 0x56, 0x06, 0x50, 0xff, 0x1e, - 0x9f, 0x07, 0x58, 0xb4, 0x4b, 0xcd, 0x21, 0x50, 0x9f, 0x5b, 0x50, 0xe8, - 0xe5, 0xce, 0x58, 0x8e, 0x16, 0x36, 0x08, 0x8b, 0x26, 0x34, 0x08, 0x8e, - 0x1e, 0x3c, 0x08, 0x80, 0x3e, 0x8a, 0x07, 0x02, 0x75, 0x10, 0xbf, 0x2e, - 0x00, 0x8b, 0x36, 0x3a, 0x08, 0x89, 0x75, 0x02, 0x8b, 0x36, 0x38, 0x08, - 0x89, 0x35, 0x9e, 0x93, 0x1f, 0xc7, 0x06, 0x94, 0x07, 0x00, 0x00, 0x07, - 0x5d, 0x72, 0x04, 0xb4, 0x4d, 0xcd, 0x21, 0x19, 0xd2, 0xe8, 0x18, 0xed, - 0x1f, 0x07, 0x5b, 0x59, 0x5a, 0x5f, 0x5e, 0x5d, 0xc3, 0xa1, 0x3e, 0x08, - 0xc3, 0x56, 0x57, 0x89, 0xd6, 0x89, 0xdf, 0x85, 0xc0, 0x74, 0x39, 0x89, - 0xc3, 0x89, 0x17, 0x89, 0xca, 0x29, 0xfa, 0x81, 0xfa, 0x93, 0x00, 0x72, - 0x03, 0xba, 0x92, 0x00, 0x89, 0xf8, 0xe8, 0x07, 0x04, 0x89, 0xc1, 0x89, - 0xc3, 0x89, 0xfa, 0x89, 0xf0, 0xe8, 0x24, 0x04, 0x89, 0xca, 0x89, 0xf0, - 0x89, 0xf7, 0xe8, 0x37, 0x04, 0x89, 0xca, 0x01, 0xc7, 0x89, 0xf0, 0xc6, - 0x05, 0x00, 0xe8, 0x2b, 0x04, 0x01, 0xc6, 0x46, 0x89, 0xf0, 0x5f, 0x5e, - 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc6, 0x89, - 0x56, 0xfc, 0x89, 0xdf, 0x89, 0x4e, 0xfe, 0x89, 0xc3, 0x8a, 0x04, 0x3c, - 0x2f, 0x75, 0x39, 0x8a, 0x44, 0x01, 0x3c, 0x2f, 0x75, 0x5f, 0x83, 0xc6, - 0x02, 0x8a, 0x04, 0x84, 0xc0, 0x75, 0x5c, 0x8b, 0x56, 0xfc, 0x89, 0xf1, - 0x89, 0xf8, 0xe8, 0x84, 0xff, 0x89, 0x46, 0xfc, 0x89, 0x76, 0xfa, 0x89, - 0xf3, 0x31, 0xff, 0x89, 0xf0, 0xe8, 0x7d, 0xef, 0x89, 0xc2, 0x85, 0xc0, - 0x74, 0x52, 0x3d, 0x2e, 0x00, 0x75, 0x4f, 0x89, 0xf7, 0x46, 0xeb, 0xeb, - 0x3c, 0x5c, 0x74, 0xc3, 0x80, 0x3c, 0x00, 0x74, 0x43, 0x8a, 0x44, 0x01, - 0x3c, 0x3a, 0x75, 0x3c, 0x85, 0xff, 0x74, 0x14, 0x8b, 0x5e, 0xfc, 0x89, - 0x1d, 0x8a, 0x14, 0xc6, 0x47, 0x02, 0x00, 0x88, 0x17, 0x83, 0x46, 0xfc, - 0x03, 0x88, 0x47, 0x01, 0x83, 0xc6, 0x02, 0xeb, 0xb7, 0x3c, 0x5c, 0x74, - 0x9d, 0xeb, 0xd1, 0x3c, 0x2f, 0x74, 0xa0, 0x3c, 0x5c, 0x74, 0x9c, 0x3c, - 0x2e, 0x74, 0x98, 0x89, 0xf0, 0xe8, 0x67, 0xef, 0x89, 0xc6, 0xeb, 0x89, - 0xeb, 0x2d, 0xeb, 0x11, 0x85, 0xff, 0x74, 0x94, 0x8b, 0x5e, 0xfc, 0x89, - 0x1d, 0xff, 0x46, 0xfc, 0xc6, 0x07, 0x00, 0xeb, 0x87, 0x89, 0xf0, 0xe8, - 0x49, 0xef, 0x89, 0xc6, 0x83, 0xfa, 0x2f, 0x75, 0x06, 0x89, 0x76, 0xfa, - 0xe9, 0x7a, 0xff, 0x83, 0xfa, 0x5c, 0x74, 0xf5, 0xe9, 0x74, 0xff, 0x8b, - 0x4e, 0xfa, 0x8b, 0x56, 0xfc, 0x8b, 0x46, 0xfe, 0xe8, 0xe2, 0xfe, 0x89, - 0x46, 0xfc, 0x85, 0xff, 0x75, 0x02, 0x89, 0xf7, 0x8b, 0x5e, 0xfa, 0x8b, - 0x56, 0xfc, 0x8b, 0x46, 0x08, 0x89, 0xf9, 0xe8, 0xcb, 0xfe, 0x89, 0xc2, - 0x89, 0xf1, 0x89, 0xfb, 0x8b, 0x46, 0x0a, 0xe8, 0xbf, 0xfe, 0x89, 0xec, - 0x5d, 0x5f, 0x5e, 0xc2, 0x04, 0x00, 0xc3, 0x00, 0x53, 0x52, 0x8b, 0xd8, - 0xb4, 0x48, 0xcd, 0x21, 0x87, 0xd3, 0x72, 0x06, 0x8b, 0xd0, 0x2b, 0xc0, - 0xeb, 0x03, 0xe8, 0x87, 0xf1, 0x89, 0x17, 0x5a, 0x5b, 0xc3, 0x06, 0x8e, - 0xc0, 0xb4, 0x49, 0xcd, 0x21, 0xe8, 0x78, 0xf1, 0x07, 0xc3, 0x06, 0x53, - 0x8e, 0xc2, 0x8b, 0xd8, 0xb4, 0x4a, 0xcd, 0x21, 0x8b, 0xd3, 0x5b, 0x73, - 0x02, 0x89, 0x17, 0xe8, 0x62, 0xf1, 0x07, 0xc3, 0x56, 0x57, 0x55, 0x89, - 0xe5, 0x89, 0xc7, 0x8b, 0x46, 0x08, 0x89, 0xde, 0x8e, 0xc2, 0x1e, 0x57, - 0x91, 0x8e, 0xd8, 0xd1, 0xe9, 0xf3, 0xa5, 0x13, 0xc9, 0xf3, 0xa4, 0x5f, - 0x1f, 0x89, 0xf8, 0x5d, 0x5f, 0x5e, 0xc2, 0x02, 0x00, 0x53, 0x89, 0xd3, - 0x3d, 0x2f, 0x00, 0x75, 0x0b, 0x83, 0x3f, 0x00, 0x75, 0x02, 0x89, 0x07, - 0x8b, 0x07, 0x5b, 0xc3, 0x3d, 0x5c, 0x00, 0x74, 0xf0, 0x5b, 0xc3, 0x56, - 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x50, 0x53, 0x89, 0xcb, 0xc7, - 0x46, 0xfc, 0x00, 0x00, 0x89, 0x46, 0xfe, 0x85, 0xd2, 0x74, 0x44, 0x89, - 0xd6, 0x8a, 0x04, 0x84, 0xc0, 0x74, 0x3c, 0x3c, 0x5c, 0x74, 0x03, 0xe9, - 0x07, 0x01, 0x3a, 0x44, 0x01, 0x75, 0xf8, 0x8b, 0x7e, 0xfa, 0x57, 0x8a, - 0x04, 0x88, 0x05, 0x84, 0xc0, 0x74, 0x10, 0x8a, 0x44, 0x01, 0x83, 0xc6, - 0x02, 0x88, 0x45, 0x01, 0x83, 0xc7, 0x02, 0x84, 0xc0, 0x75, 0xe8, 0x5f, - 0x89, 0xd7, 0x8c, 0xd8, 0x8e, 0xc0, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0xf2, - 0xae, 0xf7, 0xd1, 0x49, 0x01, 0x4e, 0xfa, 0x8b, 0x76, 0xfa, 0x8b, 0x46, - 0xf8, 0xc6, 0x04, 0x00, 0x85, 0xc0, 0x74, 0x62, 0x89, 0xc6, 0x80, 0x3c, - 0x00, 0x74, 0x5b, 0x8b, 0x46, 0xf8, 0x8d, 0x56, 0xfc, 0xe8, 0xc9, 0xed, - 0xe8, 0x6a, 0xff, 0x8b, 0x56, 0xfa, 0xe8, 0x89, 0x02, 0x8b, 0x46, 0xfa, - 0x8b, 0x76, 0xfa, 0xe8, 0x95, 0x02, 0x01, 0xc6, 0x8b, 0x46, 0xfa, 0xc6, - 0x04, 0x00, 0xe8, 0xea, 0xed, 0x89, 0x46, 0xfa, 0x8b, 0x46, 0xf8, 0xe8, - 0xe1, 0xed, 0x89, 0xc6, 0x89, 0x46, 0xf8, 0x80, 0x3c, 0x00, 0x75, 0xc7, - 0x83, 0x7e, 0xfc, 0x00, 0x75, 0x05, 0xc7, 0x46, 0xfc, 0x5c, 0x00, 0x8b, - 0x56, 0xfa, 0x8b, 0x46, 0xfe, 0xe8, 0x87, 0x02, 0x89, 0xc6, 0x8a, 0x04, - 0x30, 0xe4, 0x3b, 0x46, 0xfc, 0x75, 0x5c, 0xff, 0x4e, 0xfa, 0x83, 0x7e, - 0xfc, 0x00, 0x75, 0x05, 0xc7, 0x46, 0xfc, 0x5c, 0x00, 0x8b, 0x76, 0xfa, - 0x46, 0x85, 0xdb, 0x74, 0x68, 0x89, 0xd8, 0x8d, 0x56, 0xfc, 0xe8, 0x5c, - 0xed, 0xe8, 0xfd, 0xfe, 0x3b, 0x46, 0xfc, 0x75, 0x5a, 0x80, 0x3f, 0x00, - 0x74, 0x65, 0x89, 0xd8, 0x8d, 0x56, 0xfc, 0xe8, 0x47, 0xed, 0xe8, 0xe8, - 0xfe, 0x8b, 0x56, 0xfa, 0xe8, 0x07, 0x02, 0x8b, 0x46, 0xfa, 0x8b, 0x76, - 0xfa, 0xe8, 0x13, 0x02, 0x01, 0xc6, 0x8b, 0x46, 0xfa, 0xc6, 0x04, 0x00, - 0xe8, 0x68, 0xed, 0x89, 0x46, 0xfa, 0x89, 0xd8, 0xe8, 0x60, 0xed, 0x89, - 0xc3, 0xeb, 0xca, 0x8b, 0x76, 0xfa, 0x8a, 0x46, 0xfc, 0x88, 0x04, 0xeb, - 0x9d, 0x89, 0xd6, 0x8a, 0x04, 0x8b, 0x76, 0xfa, 0xff, 0x46, 0xfa, 0x88, - 0x04, 0x8b, 0x76, 0xfa, 0xff, 0x46, 0xfa, 0xc6, 0x04, 0x3a, 0xe9, 0x16, - 0xff, 0xeb, 0x12, 0x8b, 0x7e, 0xfa, 0x8a, 0x05, 0x98, 0x3b, 0x46, 0xfc, - 0x75, 0x9b, 0x89, 0x76, 0xfa, 0xeb, 0x96, 0xeb, 0x0e, 0x8b, 0x5e, 0xfa, - 0x8a, 0x07, 0x98, 0x3b, 0x46, 0xfc, 0x75, 0x03, 0x89, 0x76, 0xfa, 0x8b, - 0x46, 0x08, 0x85, 0xc0, 0x74, 0x2d, 0x89, 0xc3, 0x8a, 0x07, 0x84, 0xc0, - 0x74, 0x25, 0x3c, 0x2e, 0x75, 0x16, 0x8b, 0x5e, 0x08, 0x8a, 0x07, 0x84, - 0xc0, 0x74, 0x18, 0x8b, 0x5e, 0xfa, 0xff, 0x46, 0x08, 0xff, 0x46, 0xfa, - 0x88, 0x07, 0xeb, 0xea, 0x8b, 0x5e, 0xfa, 0xff, 0x46, 0xfa, 0xc6, 0x07, - 0x2e, 0xeb, 0xdf, 0x8b, 0x5e, 0xfa, 0xc6, 0x07, 0x00, 0x89, 0xec, 0x5d, - 0x5f, 0x5e, 0xc2, 0x02, 0x00, 0x53, 0x56, 0x89, 0xc3, 0x89, 0xd6, 0x8a, - 0x07, 0x8a, 0x24, 0x3c, 0x41, 0x72, 0x06, 0x3c, 0x5a, 0x77, 0x02, 0x04, - 0x20, 0x80, 0xfc, 0x41, 0x72, 0x08, 0x80, 0xfc, 0x5a, 0x77, 0x03, 0x80, - 0xc4, 0x20, 0x38, 0xe0, 0x75, 0x08, 0x84, 0xe4, 0x74, 0x04, 0x43, 0x46, - 0xeb, 0xd9, 0x88, 0xc3, 0x88, 0xe0, 0x30, 0xff, 0x30, 0xe4, 0x29, 0xc3, - 0x89, 0xd8, 0x5e, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0x8b, - 0x46, 0x0a, 0x8d, 0x5e, 0x0e, 0x8b, 0x56, 0x0c, 0x8b, 0x0e, 0xde, 0x0a, - 0xe8, 0x50, 0xf4, 0x5d, 0x5a, 0x59, 0x5b, 0xc3, 0x56, 0x57, 0x89, 0xc7, - 0x89, 0xd6, 0x57, 0xf7, 0xc6, 0x01, 0x00, 0x74, 0x08, 0xac, 0x88, 0x05, - 0x47, 0x3c, 0x00, 0x74, 0x26, 0x8b, 0x04, 0x84, 0xc0, 0x74, 0x1e, 0x89, - 0x05, 0x83, 0xc7, 0x02, 0x84, 0xe4, 0x74, 0x17, 0x8b, 0x44, 0x02, 0x84, - 0xc0, 0x74, 0x0e, 0x89, 0x05, 0x83, 0xc6, 0x04, 0x83, 0xc7, 0x02, 0x84, - 0xe4, 0x75, 0xde, 0x74, 0x02, 0x88, 0x05, 0x58, 0x5f, 0x5e, 0xc3, 0x53, - 0x51, 0x89, 0xc1, 0x89, 0xd0, 0x83, 0xfa, 0xff, 0x74, 0x09, 0x8c, 0xda, - 0x39, 0xd1, 0x75, 0x06, 0xe8, 0x44, 0xbf, 0x59, 0x5b, 0xc3, 0x89, 0xca, - 0x31, 0xdb, 0xe8, 0x53, 0xcb, 0x59, 0x5b, 0xc3, 0x53, 0x51, 0x89, 0xc3, - 0x31, 0xc9, 0x89, 0xd8, 0xe8, 0x9f, 0xeb, 0x85, 0xc0, 0x75, 0x04, 0x85, - 0xd2, 0x77, 0x05, 0x89, 0xc8, 0x59, 0x5b, 0xc3, 0x89, 0xd8, 0xe8, 0xa2, - 0x00, 0x39, 0xc2, 0x72, 0xf2, 0x41, 0x29, 0xc2, 0x01, 0xc3, 0xeb, 0xde, - 0x51, 0x56, 0x89, 0xc1, 0x89, 0xd6, 0x89, 0xda, 0x89, 0xf0, 0xe8, 0x0f, - 0x00, 0x89, 0xc3, 0x89, 0xf2, 0x43, 0x89, 0xc8, 0xe8, 0x29, 0x01, 0x89, - 0xc8, 0x5e, 0x59, 0xc3, 0x53, 0x51, 0x56, 0x55, 0x89, 0xe5, 0x83, 0xec, - 0x02, 0x89, 0xc3, 0x89, 0xd1, 0x31, 0xd2, 0x89, 0xd8, 0xe8, 0x52, 0xeb, - 0x85, 0xc0, 0x75, 0x42, 0x85, 0xc9, 0x76, 0x3e, 0x83, 0x3e, 0x00, 0x08, - 0x00, 0x74, 0x40, 0x8a, 0x07, 0xc6, 0x46, 0xff, 0x00, 0x88, 0x46, 0xfe, - 0x8b, 0x76, 0xfe, 0x8a, 0x84, 0xe7, 0x0a, 0x24, 0x01, 0xc6, 0x46, 0xff, - 0x00, 0x88, 0x46, 0xfe, 0x8b, 0x46, 0xfe, 0x85, 0xc0, 0x74, 0x20, 0x80, - 0x7f, 0x01, 0x00, 0x74, 0x11, 0x89, 0xd8, 0xe8, 0x2d, 0x00, 0x01, 0xc2, - 0x89, 0xd8, 0xe8, 0x86, 0xeb, 0x49, 0x89, 0xc3, 0xeb, 0xb5, 0x89, 0xd0, - 0x89, 0xec, 0x5d, 0x5e, 0x59, 0x5b, 0xc3, 0x42, 0xeb, 0xea, 0x53, 0x89, - 0xd3, 0xf6, 0xc4, 0xff, 0x74, 0x09, 0x88, 0x27, 0x88, 0x47, 0x01, 0x89, - 0xd8, 0x5b, 0xc3, 0x88, 0x07, 0xeb, 0xf8, 0x53, 0x89, 0xc3, 0x83, 0x3e, - 0x00, 0x08, 0x00, 0x74, 0x15, 0x8a, 0x1f, 0x30, 0xe7, 0x8a, 0x87, 0xe7, - 0x0a, 0x24, 0x01, 0x30, 0xe4, 0x85, 0xc0, 0x74, 0x05, 0xb8, 0x02, 0x00, - 0x5b, 0xc3, 0xb8, 0x01, 0x00, 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, - 0x89, 0xe5, 0x83, 0xec, 0x02, 0x8b, 0x3e, 0x00, 0x08, 0x89, 0xc1, 0x39, - 0xd0, 0x73, 0x48, 0x89, 0xd3, 0x4b, 0x85, 0xff, 0x75, 0x45, 0x4b, 0x39, - 0xd9, 0x77, 0x14, 0x85, 0xff, 0x74, 0x10, 0x8a, 0x07, 0x30, 0xe4, 0x89, - 0xc6, 0x8a, 0x84, 0xe7, 0x0a, 0x24, 0x01, 0x85, 0xc0, 0x75, 0xe7, 0x89, - 0xd0, 0x29, 0xd8, 0xb1, 0x0f, 0x89, 0xc3, 0xd3, 0xf8, 0x31, 0xc3, 0x29, - 0xc3, 0x83, 0xe3, 0x01, 0x89, 0xd1, 0x31, 0xc3, 0x49, 0x29, 0xc3, 0x29, - 0xd9, 0x89, 0xc8, 0x89, 0x3e, 0x00, 0x08, 0x89, 0xec, 0x5d, 0x5f, 0x5e, - 0x59, 0x5b, 0xc3, 0x31, 0xc1, 0xeb, 0xee, 0x8a, 0x07, 0xc6, 0x46, 0xff, - 0x00, 0x88, 0x46, 0xfe, 0x8b, 0x76, 0xfe, 0x8a, 0x84, 0xe7, 0x0a, 0x24, - 0x01, 0xc6, 0x46, 0xff, 0x00, 0x88, 0x46, 0xfe, 0x8b, 0x46, 0xfe, 0x85, - 0xc0, 0x74, 0x9b, 0x8d, 0x4f, 0xff, 0xeb, 0xc9, 0x51, 0x56, 0x57, 0x55, - 0x89, 0xe5, 0x50, 0x89, 0xd6, 0x89, 0xc7, 0x85, 0xdb, 0x76, 0x06, 0x8a, - 0x04, 0x84, 0xc0, 0x75, 0x33, 0x80, 0x3c, 0x00, 0x74, 0x20, 0x3b, 0x7e, - 0xfe, 0x76, 0x1b, 0x83, 0x3e, 0x00, 0x08, 0x00, 0x74, 0x14, 0x8a, 0x44, - 0xff, 0x30, 0xe4, 0x89, 0xc6, 0x8a, 0x84, 0xe7, 0x0a, 0x24, 0x01, 0x85, - 0xc0, 0x74, 0x03, 0x88, 0x65, 0xff, 0x85, 0xdb, 0x77, 0x11, 0x8b, 0x46, - 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, 0x46, 0x4b, 0x88, 0x05, - 0x47, 0xeb, 0xbc, 0x89, 0xd9, 0x30, 0xc0, 0x57, 0x1e, 0x07, 0x8a, 0xe0, - 0xd1, 0xe9, 0xf3, 0xab, 0x13, 0xc9, 0xf3, 0xaa, 0x5f, 0xeb, 0xdb, 0x00, + 0x4d, 0x5a, 0xfc, 0x01, 0x3e, 0x00, 0x54, 0x01, 0x57, 0x00, 0xda, 0x00, + 0xff, 0xff, 0xc2, 0x07, 0x00, 0x08, 0x00, 0x00, 0x24, 0x1e, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x4c, 0x00, 0x00, + 0xbe, 0x4c, 0x00, 0x00, 0xd6, 0x4c, 0x00, 0x00, 0xf1, 0x4c, 0x00, 0x00, + 0xfd, 0x4c, 0x00, 0x00, 0x15, 0x4d, 0x00, 0x00, 0x31, 0x4e, 0x00, 0x00, + 0x23, 0x4f, 0x00, 0x00, 0x68, 0x4f, 0x00, 0x00, 0x88, 0x4f, 0x00, 0x00, + 0x9a, 0x4f, 0x00, 0x00, 0xa3, 0x4f, 0x00, 0x00, 0xb3, 0x4f, 0x00, 0x00, + 0xbc, 0x4f, 0x00, 0x00, 0xd0, 0x4f, 0x00, 0x00, 0xeb, 0x4f, 0x00, 0x00, + 0x0e, 0x50, 0x00, 0x00, 0x31, 0x50, 0x00, 0x00, 0x92, 0x50, 0x00, 0x00, + 0xf2, 0x50, 0x00, 0x00, 0x70, 0x08, 0xd9, 0x06, 0x74, 0x08, 0xd9, 0x06, + 0x87, 0x51, 0x00, 0x00, 0x99, 0x52, 0x00, 0x00, 0x01, 0x53, 0x00, 0x00, + 0x55, 0x53, 0x00, 0x00, 0xd6, 0x53, 0x00, 0x00, 0xfc, 0x53, 0x00, 0x00, + 0x21, 0x54, 0x00, 0x00, 0x61, 0x54, 0x00, 0x00, 0x82, 0x54, 0x00, 0x00, + 0xfb, 0x54, 0x00, 0x00, 0x06, 0x55, 0x00, 0x00, 0x49, 0x55, 0x00, 0x00, + 0x7e, 0x55, 0x00, 0x00, 0x92, 0x55, 0x00, 0x00, 0xab, 0x55, 0x00, 0x00, + 0xb8, 0x55, 0x00, 0x00, 0xd9, 0x55, 0x00, 0x00, 0xed, 0x55, 0x00, 0x00, + 0xff, 0x55, 0x00, 0x00, 0x2e, 0x56, 0x00, 0x00, 0x4c, 0x56, 0x00, 0x00, + 0x89, 0x56, 0x00, 0x00, 0x9a, 0x56, 0x00, 0x00, 0xa2, 0x56, 0x00, 0x00, + 0xce, 0x56, 0x00, 0x00, 0x6b, 0x57, 0x00, 0x00, 0xa8, 0x58, 0x00, 0x00, + 0x11, 0x59, 0x00, 0x00, 0x4a, 0x59, 0x00, 0x00, 0x67, 0x59, 0x00, 0x00, + 0x8b, 0x59, 0x00, 0x00, 0xc0, 0x59, 0x00, 0x00, 0xe2, 0x59, 0x00, 0x00, + 0xf8, 0x59, 0x00, 0x00, 0x55, 0x5a, 0x00, 0x00, 0xd0, 0x5a, 0x00, 0x00, + 0x4e, 0x5b, 0x00, 0x00, 0x89, 0x5c, 0x00, 0x00, 0x46, 0x5d, 0x00, 0x00, + 0xa3, 0x5d, 0x00, 0x00, 0x19, 0x5e, 0x00, 0x00, 0x21, 0x5e, 0x00, 0x00, + 0x89, 0x5e, 0x00, 0x00, 0xdf, 0x5e, 0x00, 0x00, 0x30, 0x5f, 0x00, 0x00, + 0xa4, 0x5f, 0x00, 0x00, 0xac, 0x5f, 0x00, 0x00, 0xdf, 0x5f, 0x00, 0x00, + 0xf6, 0x5f, 0x00, 0x00, 0x8d, 0x60, 0x00, 0x00, 0x7a, 0x61, 0x00, 0x00, + 0x83, 0x62, 0x00, 0x00, 0xf3, 0x62, 0x00, 0x00, 0xf9, 0x62, 0x00, 0x00, + 0x46, 0x63, 0x00, 0x00, 0x59, 0x63, 0x00, 0x00, 0xb6, 0x65, 0x00, 0x00, + 0xfe, 0x65, 0x00, 0x00, 0xba, 0x08, 0xd9, 0x06, 0xbe, 0x08, 0xd9, 0x06, + 0xd3, 0x6a, 0x00, 0x00, 0x04, 0x6b, 0x00, 0x00, 0xf7, 0x13, 0x00, 0x00, + 0x61, 0x14, 0x00, 0x00, 0x6a, 0x14, 0x00, 0x00, 0xa8, 0x14, 0x00, 0x00, + 0xb4, 0x14, 0x00, 0x00, 0xdc, 0x14, 0x00, 0x00, 0x1e, 0x15, 0x00, 0x00, + 0xee, 0x15, 0x00, 0x00, 0x68, 0x17, 0x00, 0x00, 0x7d, 0x17, 0x00, 0x00, + 0xe9, 0x17, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0x9b, 0x18, 0x00, 0x00, + 0xc4, 0x18, 0x00, 0x00, 0xdb, 0x18, 0x00, 0x00, 0x1b, 0x19, 0x00, 0x00, + 0x25, 0x19, 0x00, 0x00, 0x34, 0x19, 0x00, 0x00, 0x62, 0x19, 0x00, 0x00, + 0x6c, 0x19, 0x00, 0x00, 0x7b, 0x19, 0x00, 0x00, 0x98, 0x19, 0x00, 0x00, + 0x00, 0x1a, 0x00, 0x00, 0x24, 0x1a, 0x00, 0x00, 0x51, 0x1a, 0x00, 0x00, + 0x9e, 0x1b, 0x00, 0x00, 0xf3, 0x1b, 0x00, 0x00, 0x61, 0x1c, 0x00, 0x00, + 0x75, 0x1d, 0x00, 0x00, 0x90, 0x1d, 0x00, 0x00, 0xbb, 0x1d, 0x00, 0x00, + 0xde, 0x1d, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0xd8, 0x6c, 0x00, 0x00, + 0x3f, 0x6d, 0x00, 0x00, 0x67, 0x6d, 0x00, 0x00, 0x5d, 0x1e, 0x00, 0x00, + 0xe9, 0x1e, 0x00, 0x00, 0xd1, 0x1f, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, + 0xcb, 0x20, 0x00, 0x00, 0x54, 0x23, 0x00, 0x00, 0x7b, 0x23, 0x00, 0x00, + 0x21, 0x24, 0x00, 0x00, 0xeb, 0x24, 0x00, 0x00, 0x05, 0x25, 0x00, 0x00, + 0x26, 0x25, 0x00, 0x00, 0x31, 0x25, 0x00, 0x00, 0x9a, 0x25, 0x00, 0x00, + 0xdf, 0x25, 0x00, 0x00, 0x18, 0x26, 0x00, 0x00, 0x31, 0x26, 0x00, 0x00, + 0x4b, 0x26, 0x00, 0x00, 0x63, 0x26, 0x00, 0x00, 0x70, 0x26, 0x00, 0x00, + 0x81, 0x26, 0x00, 0x00, 0x9c, 0x26, 0x00, 0x00, 0xb6, 0x26, 0x00, 0x00, + 0xce, 0x26, 0x00, 0x00, 0xd8, 0x26, 0x00, 0x00, 0xf3, 0x26, 0x00, 0x00, + 0x16, 0x27, 0x00, 0x00, 0x32, 0x27, 0x00, 0x00, 0x56, 0x27, 0x00, 0x00, + 0x61, 0x27, 0x00, 0x00, 0x76, 0x27, 0x00, 0x00, 0xd2, 0x27, 0x00, 0x00, + 0xf3, 0x27, 0x00, 0x00, 0x53, 0x29, 0x00, 0x00, 0xa7, 0x29, 0x00, 0x00, + 0x74, 0x2a, 0x00, 0x00, 0xa0, 0x2a, 0x00, 0x00, 0x4b, 0x2b, 0x00, 0x00, + 0xaa, 0x2d, 0x00, 0x00, 0xe5, 0x2d, 0x00, 0x00, 0xf8, 0x2d, 0x00, 0x00, + 0x15, 0x2e, 0x00, 0x00, 0x18, 0x2e, 0x00, 0x00, 0x57, 0x2e, 0x00, 0x00, + 0x90, 0x2e, 0x00, 0x00, 0xe4, 0x2e, 0x00, 0x00, 0xfb, 0x2e, 0x00, 0x00, + 0x1d, 0x30, 0x00, 0x00, 0x44, 0x30, 0x00, 0x00, 0xd0, 0x30, 0x00, 0x00, + 0xdb, 0x30, 0x00, 0x00, 0xeb, 0x30, 0x00, 0x00, 0xfa, 0x30, 0x00, 0x00, + 0x18, 0x31, 0x00, 0x00, 0x5d, 0x34, 0x00, 0x00, 0xff, 0x34, 0x00, 0x00, + 0x21, 0x36, 0x00, 0x00, 0x81, 0x38, 0x00, 0x00, 0x25, 0x39, 0x00, 0x00, + 0x2d, 0x39, 0x00, 0x00, 0x35, 0x39, 0x00, 0x00, 0x50, 0x39, 0x00, 0x00, + 0x7f, 0x39, 0x00, 0x00, 0xa5, 0x39, 0x00, 0x00, 0xbb, 0x39, 0x00, 0x00, + 0xc2, 0x39, 0x00, 0x00, 0xda, 0x39, 0x00, 0x00, 0xe2, 0x39, 0x00, 0x00, + 0xf4, 0x39, 0x00, 0x00, 0x36, 0x3a, 0x00, 0x00, 0x8a, 0x3a, 0x00, 0x00, + 0xb5, 0x3a, 0x00, 0x00, 0xde, 0x3a, 0x00, 0x00, 0x16, 0x3b, 0x00, 0x00, + 0x26, 0x3b, 0x00, 0x00, 0x35, 0x3b, 0x00, 0x00, 0x5b, 0x3b, 0x00, 0x00, + 0x7d, 0x3b, 0x00, 0x00, 0x9d, 0x3b, 0x00, 0x00, 0xc7, 0x42, 0x00, 0x00, + 0x1c, 0x45, 0x00, 0x00, 0xfb, 0x48, 0x00, 0x00, 0xb4, 0x4a, 0x00, 0x00, + 0xd9, 0x4a, 0x00, 0x00, 0x52, 0x08, 0xd9, 0x06, 0x49, 0x4b, 0x00, 0x00, + 0x65, 0x4b, 0x00, 0x00, 0xb9, 0x4b, 0x00, 0x00, 0x07, 0x4c, 0x00, 0x00, + 0x17, 0x4c, 0x00, 0x00, 0x66, 0x4c, 0x00, 0x00, 0x7e, 0x4c, 0x00, 0x00, + 0x9c, 0x4c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, + 0x13, 0x01, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00, + 0x3a, 0x01, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, + 0x5a, 0x01, 0x00, 0x00, 0xbe, 0x01, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, + 0x60, 0x02, 0x00, 0x00, 0x65, 0x02, 0x00, 0x00, 0x7a, 0x02, 0x00, 0x00, + 0x45, 0x03, 0x00, 0x00, 0x4d, 0x03, 0x00, 0x00, 0x6c, 0x03, 0x00, 0x00, + 0x87, 0x03, 0x00, 0x00, 0xac, 0x03, 0x00, 0x00, 0xbf, 0x03, 0x00, 0x00, + 0xf9, 0x03, 0x00, 0x00, 0x30, 0x04, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, + 0x3d, 0x04, 0x00, 0x00, 0x61, 0x04, 0x00, 0x00, 0xe2, 0x04, 0x00, 0x00, + 0xe5, 0x04, 0x00, 0x00, 0xfa, 0x04, 0x00, 0x00, 0x5b, 0x05, 0x00, 0x00, + 0x88, 0x05, 0x00, 0x00, 0x8b, 0x05, 0x00, 0x00, 0xfc, 0x05, 0x00, 0x00, + 0x77, 0x06, 0x00, 0x00, 0x8d, 0x06, 0x00, 0x00, 0x28, 0x07, 0x00, 0x00, + 0x48, 0x07, 0x00, 0x00, 0x50, 0x07, 0x00, 0x00, 0x65, 0x07, 0x00, 0x00, + 0x82, 0x07, 0x00, 0x00, 0x9f, 0x07, 0x00, 0x00, 0xae, 0x07, 0x00, 0x00, + 0x2c, 0x08, 0x00, 0x00, 0x47, 0x08, 0x00, 0x00, 0x55, 0x08, 0x00, 0x00, + 0x8e, 0x08, 0x00, 0x00, 0x96, 0x08, 0x00, 0x00, 0xbd, 0x08, 0x00, 0x00, + 0xd6, 0x08, 0x00, 0x00, 0xe7, 0x08, 0x00, 0x00, 0x06, 0x09, 0x00, 0x00, + 0x1b, 0x09, 0x00, 0x00, 0x4b, 0x09, 0x00, 0x00, 0x4e, 0x09, 0x00, 0x00, + 0x60, 0x09, 0x00, 0x00, 0x84, 0x09, 0x00, 0x00, 0x9a, 0x09, 0x00, 0x00, + 0xbf, 0x09, 0x00, 0x00, 0xca, 0x09, 0x00, 0x00, 0xfa, 0x09, 0x00, 0x00, + 0xfd, 0x09, 0x00, 0x00, 0x26, 0x0a, 0x00, 0x00, 0x29, 0x0a, 0x00, 0x00, + 0x4c, 0x0a, 0x00, 0x00, 0x54, 0x0a, 0x00, 0x00, 0x87, 0x0a, 0x00, 0x00, + 0xca, 0x0a, 0x00, 0x00, 0xd2, 0x0a, 0x00, 0x00, 0x03, 0x0b, 0x00, 0x00, + 0x50, 0x0b, 0x00, 0x00, 0x7e, 0x0b, 0x00, 0x00, 0x9e, 0x0b, 0x00, 0x00, + 0xa1, 0x0b, 0x00, 0x00, 0xc2, 0x0b, 0x00, 0x00, 0xca, 0x0b, 0x00, 0x00, + 0x0d, 0x0c, 0x00, 0x00, 0x27, 0x0c, 0x00, 0x00, 0x44, 0x0c, 0x00, 0x00, + 0x68, 0x0c, 0x00, 0x00, 0xaf, 0x0c, 0x00, 0x00, 0xdb, 0x0c, 0x00, 0x00, + 0x05, 0x0d, 0x00, 0x00, 0x87, 0x0d, 0x00, 0x00, 0x97, 0x0d, 0x00, 0x00, + 0xcf, 0x0d, 0x00, 0x00, 0xfa, 0x0d, 0x00, 0x00, 0x02, 0x0e, 0x00, 0x00, + 0x15, 0x0e, 0x00, 0x00, 0x3d, 0x0e, 0x00, 0x00, 0x5e, 0x0e, 0x00, 0x00, + 0x88, 0x0e, 0x00, 0x00, 0xac, 0x0e, 0x00, 0x00, 0xc0, 0x0e, 0x00, 0x00, + 0xe9, 0x0e, 0x00, 0x00, 0x6a, 0x0f, 0x00, 0x00, 0x9c, 0x0f, 0x00, 0x00, + 0xea, 0x0f, 0x00, 0x00, 0xf2, 0x0f, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, + 0x2f, 0x10, 0x00, 0x00, 0x4c, 0x10, 0x00, 0x00, 0x89, 0x10, 0x00, 0x00, + 0x99, 0x10, 0x00, 0x00, 0xaf, 0x10, 0x00, 0x00, 0xd1, 0x10, 0x00, 0x00, + 0xe7, 0x10, 0x00, 0x00, 0x12, 0x11, 0x00, 0x00, 0x31, 0x11, 0x00, 0x00, + 0x4d, 0x11, 0x00, 0x00, 0x56, 0x11, 0x00, 0x00, 0x6d, 0x11, 0x00, 0x00, + 0x8e, 0x11, 0x00, 0x00, 0xa4, 0x11, 0x00, 0x00, 0xb4, 0x11, 0x00, 0x00, + 0xc4, 0x11, 0x00, 0x00, 0xd1, 0x11, 0x00, 0x00, 0xe2, 0x11, 0x00, 0x00, + 0x0c, 0x12, 0x00, 0x00, 0x56, 0x12, 0x00, 0x00, 0xa7, 0x12, 0x00, 0x00, + 0x30, 0x13, 0x00, 0x00, 0xb8, 0x13, 0x00, 0x00, 0xd0, 0x13, 0x00, 0x00, + 0x53, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x4e, 0x06, 0x3d, 0x14, 0x00, + 0x7c, 0x06, 0x31, 0xc0, 0x31, 0xd2, 0x5b, 0xcb, 0xba, 0x0a, 0x00, 0x89, + 0xc3, 0xf7, 0xea, 0x43, 0x89, 0x1e, 0x4e, 0x06, 0x8c, 0xda, 0x05, 0x8c, + 0x0a, 0x5b, 0xcb, 0x53, 0x51, 0xbb, 0xd9, 0x06, 0x8e, 0xdb, 0x83, 0x3e, + 0x52, 0x06, 0x64, 0x7c, 0x06, 0xb8, 0xff, 0xff, 0x59, 0x5b, 0xcb, 0x0e, + 0x3e, 0xe8, 0x10, 0x13, 0x8e, 0xdb, 0x8b, 0x0e, 0x52, 0x06, 0x89, 0xcb, + 0xd1, 0xe3, 0xd1, 0xe3, 0x41, 0x89, 0x87, 0x54, 0x0b, 0x89, 0x0e, 0x52, + 0x06, 0x89, 0x97, 0x56, 0x0b, 0x31, 0xc0, 0x59, 0x5b, 0xcb, 0x51, 0x55, + 0x89, 0xe5, 0x53, 0xbb, 0xd9, 0x06, 0x8e, 0xdb, 0x83, 0x3e, 0x54, 0x06, + 0x64, 0x7c, 0x05, 0xb8, 0xff, 0xff, 0xeb, 0x30, 0x8b, 0x1e, 0x54, 0x06, + 0x8a, 0x4e, 0xfe, 0x88, 0x8f, 0xe4, 0x0c, 0x0e, 0x3e, 0xe8, 0xcc, 0x12, + 0x89, 0xd1, 0xba, 0xd9, 0x06, 0x8e, 0xda, 0x8b, 0x16, 0x54, 0x06, 0x89, + 0xd3, 0xd1, 0xe3, 0xd1, 0xe3, 0x42, 0x89, 0x87, 0xfc, 0x08, 0x89, 0x16, + 0x54, 0x06, 0x89, 0x8f, 0xfe, 0x08, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x59, + 0xcb, 0x53, 0x52, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x58, 0x06, 0x8b, + 0x16, 0x56, 0x06, 0x85, 0xc0, 0x75, 0x18, 0x85, 0xd2, 0x75, 0x14, 0xb8, + 0x01, 0x10, 0xbb, 0xd9, 0x06, 0x0e, 0x3e, 0xe8, 0xc3, 0x12, 0x8e, 0xdb, + 0xa3, 0x56, 0x06, 0x89, 0x16, 0x58, 0x06, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0x8b, 0x16, 0x58, 0x06, 0xa1, 0x56, 0x06, 0x85, 0xd2, 0x75, 0x04, 0x85, + 0xc0, 0x74, 0x05, 0x31, 0xc0, 0x5a, 0x5b, 0xc3, 0xb8, 0xff, 0xff, 0x5a, + 0x5b, 0xc3, 0x52, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x58, 0x06, 0x8b, + 0x16, 0x56, 0x06, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, 0x18, 0x89, + 0xd0, 0x8b, 0x16, 0x58, 0x06, 0x0e, 0x3e, 0xe8, 0x8c, 0x13, 0xb8, 0xd9, + 0x06, 0x8e, 0xd8, 0x31, 0xc0, 0xa3, 0x56, 0x06, 0xa3, 0x58, 0x06, 0x5a, + 0xc3, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x22, 0x00, 0x50, 0xb8, 0xd9, 0x06, + 0x50, 0xb8, 0x88, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0xb0, 0x13, 0x83, 0xc4, + 0x08, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x45, 0x00, 0x50, 0xb8, 0xd9, 0x06, + 0x50, 0xb8, 0x88, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0x98, 0x13, 0x83, 0xc4, + 0x08, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x6c, 0x00, 0x50, 0xb8, 0xd9, 0x06, + 0x50, 0xb8, 0x88, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0x80, 0x13, 0x83, 0xc4, + 0x08, 0xc3, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0x50, 0x50, 0x53, + 0x51, 0xc7, 0x46, 0xfe, 0x01, 0x00, 0xba, 0x04, 0x00, 0x31, 0xc9, 0x8b, + 0x46, 0xfe, 0x3b, 0x46, 0xfa, 0x7c, 0x03, 0xe9, 0xef, 0x00, 0x89, 0xd6, + 0x8e, 0x5e, 0xf6, 0x03, 0x76, 0xf8, 0xff, 0x46, 0xfe, 0x8b, 0x44, 0x02, + 0x8b, 0x1c, 0x8e, 0xd8, 0x89, 0x46, 0xfc, 0x8a, 0x07, 0x83, 0xc2, 0x04, + 0x3c, 0x2d, 0x74, 0x04, 0x3c, 0x2f, 0x75, 0x64, 0x8e, 0x5e, 0xfc, 0x43, + 0x8a, 0x07, 0x3c, 0x2d, 0x74, 0xf9, 0x3c, 0x2f, 0x74, 0xf5, 0xbf, 0x91, + 0x00, 0xb8, 0xd9, 0x06, 0x89, 0xde, 0x8e, 0xc0, 0xac, 0x26, 0x8a, 0x25, + 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, + 0xc0, 0x74, 0x30, 0xbf, 0x93, 0x00, 0x89, 0xde, 0xac, 0x26, 0x8a, 0x25, + 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, + 0xc0, 0x74, 0x18, 0xbf, 0x98, 0x00, 0x89, 0xde, 0xac, 0x26, 0x8a, 0x25, + 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, + 0xc0, 0x75, 0x0b, 0xe8, 0x17, 0xff, 0xb8, 0xff, 0xff, 0xe9, 0x9a, 0x00, + 0xeb, 0x3f, 0xbf, 0x9a, 0x00, 0x89, 0xde, 0xac, 0x26, 0x8a, 0x25, 0x2a, + 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, 0xc0, + 0x74, 0x1d, 0x1e, 0x53, 0x8c, 0xc0, 0x50, 0xb8, 0x9c, 0x00, 0x50, 0x8c, + 0xc0, 0x50, 0xb8, 0x88, 0x06, 0x50, 0x0e, 0xe8, 0xa8, 0x12, 0x90, 0xb8, + 0xff, 0xff, 0x83, 0xc4, 0x0c, 0xeb, 0x63, 0x06, 0x1f, 0xc6, 0x06, 0x3d, + 0x06, 0x01, 0xe9, 0x2e, 0xff, 0x85, 0xc9, 0x74, 0x0f, 0x1e, 0x53, 0xb8, + 0xd9, 0x06, 0x50, 0xb8, 0xb1, 0x00, 0x50, 0xb8, 0xd9, 0x06, 0xeb, 0xd1, + 0xb8, 0xd9, 0x06, 0xb9, 0x01, 0x00, 0x8e, 0xd8, 0x8b, 0x46, 0xfc, 0x89, + 0x1e, 0x42, 0x06, 0xa3, 0x44, 0x06, 0xe9, 0x06, 0xff, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0x8b, 0x16, 0x44, 0x06, 0xa1, 0x42, 0x06, 0x85, 0xd2, 0x75, + 0x1f, 0x85, 0xc0, 0x75, 0x1b, 0x8c, 0xd8, 0x50, 0xb8, 0xca, 0x00, 0x50, + 0x8c, 0xd8, 0x50, 0xb8, 0x88, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0x46, 0x12, + 0xb8, 0xff, 0xff, 0x83, 0xc4, 0x08, 0xeb, 0x02, 0x31, 0xc0, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x5a, 0xc3, 0x53, 0x51, 0x89, 0xc3, 0x89, 0xd1, 0x85, + 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x1f, 0x8e, 0xda, 0x8b, 0x57, 0x02, + 0x8b, 0x07, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x10, 0x0e, 0xe8, + 0xcc, 0x11, 0x90, 0x8e, 0xd9, 0xc7, 0x07, 0x00, 0x00, 0xc7, 0x47, 0x02, + 0x00, 0x00, 0x59, 0x5b, 0xcb, 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd7, 0x0e, + 0xe8, 0xc6, 0xff, 0x85, 0xc9, 0x75, 0x04, 0x85, 0xdb, 0x74, 0x10, 0x89, + 0xd8, 0x89, 0xca, 0x0e, 0x3e, 0xe8, 0x54, 0x10, 0x8e, 0xdf, 0x89, 0x04, + 0x89, 0x54, 0x02, 0x5f, 0x5e, 0xcb, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc6, + 0x89, 0xc7, 0x8e, 0xc2, 0x89, 0xf3, 0x83, 0xc9, 0xff, 0x33, 0xc0, 0xf2, + 0xae, 0xf7, 0xd1, 0x49, 0x01, 0xcb, 0x8e, 0xda, 0x4b, 0x39, 0xf3, 0x72, + 0x12, 0x8a, 0x07, 0x3c, 0x0d, 0x74, 0x04, 0x3c, 0x0a, 0x75, 0x08, 0xc6, + 0x07, 0x00, 0x83, 0xc3, 0xff, 0xeb, 0xea, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, + 0x53, 0x51, 0x52, 0x56, 0x57, 0xb9, 0x8c, 0x0a, 0xbf, 0xd9, 0x06, 0x31, + 0xdb, 0x83, 0xc1, 0x04, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x3b, 0x1e, 0x4e, + 0x06, 0x73, 0x23, 0xbe, 0x0a, 0x00, 0x89, 0xd8, 0xf7, 0xee, 0xbe, 0x8c, + 0x0a, 0x89, 0xfa, 0x01, 0xc6, 0x89, 0xc8, 0x0e, 0xe8, 0x46, 0xff, 0xba, + 0xd9, 0x06, 0x89, 0xf0, 0x43, 0x0e, 0xe8, 0x3c, 0xff, 0x83, 0xc1, 0x0a, + 0xeb, 0xd2, 0xbb, 0x54, 0x0b, 0x8c, 0xde, 0x31, 0xc0, 0x31, 0xc9, 0xa3, + 0x4e, 0x06, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x3b, 0x0e, 0x52, 0x06, 0x73, + 0x0e, 0x89, 0xd8, 0x89, 0xf2, 0x0e, 0xe8, 0x18, 0xff, 0x41, 0x83, 0xc3, + 0x04, 0xeb, 0xe7, 0xb9, 0xfc, 0x08, 0x8c, 0xde, 0x31, 0xc0, 0x31, 0xdb, + 0xa3, 0x52, 0x06, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x3b, 0x1e, 0x54, 0x06, + 0x73, 0x18, 0x89, 0xc8, 0x89, 0xf2, 0x0e, 0xe8, 0xf3, 0xfe, 0xb8, 0xd9, + 0x06, 0x43, 0x8e, 0xd8, 0x83, 0xc1, 0x04, 0xc6, 0x87, 0xe3, 0x0c, 0x00, + 0xeb, 0xdd, 0x31, 0xc0, 0x8c, 0xda, 0xa3, 0x54, 0x06, 0xb8, 0x3e, 0x06, + 0x0e, 0xe8, 0xd5, 0xfe, 0xe9, 0xa0, 0x08, 0x53, 0x51, 0x52, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x3a, 0x31, 0xc0, 0x89, 0x46, 0xc6, 0x89, + 0x46, 0xc8, 0x89, 0x46, 0xca, 0x89, 0x46, 0xcc, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0x8b, 0x16, 0x44, 0x06, 0xa1, 0x42, 0x06, 0x85, 0xd2, 0x75, 0x20, + 0x85, 0xc0, 0x75, 0x1c, 0x8c, 0xd8, 0x50, 0xb8, 0xe2, 0x00, 0x50, 0x8c, + 0xd8, 0x50, 0xb8, 0x88, 0x06, 0x50, 0x0e, 0xe8, 0xc8, 0x10, 0x90, 0xb8, + 0x01, 0x00, 0x83, 0xc4, 0x08, 0xe9, 0x54, 0x08, 0xe8, 0x7e, 0xfc, 0x85, + 0xc0, 0x74, 0x0d, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0xf6, 0x00, 0x50, 0xb8, + 0xd9, 0x06, 0xeb, 0xd9, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xbb, 0x09, 0x01, + 0x8c, 0xd9, 0xa1, 0x42, 0x06, 0x8b, 0x16, 0x44, 0x06, 0x0e, 0x3e, 0xe8, + 0xfd, 0x12, 0x89, 0x46, 0xf4, 0x89, 0x56, 0xce, 0x85, 0xd2, 0x75, 0x2b, + 0x85, 0xc0, 0x75, 0x27, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xff, 0x36, 0x44, + 0x06, 0xff, 0x36, 0x42, 0x06, 0x50, 0xb8, 0x0b, 0x01, 0x50, 0x8c, 0xd8, + 0x50, 0xb8, 0x88, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0x68, 0x10, 0xb8, 0x01, + 0x00, 0x83, 0xc4, 0x0c, 0xe9, 0xf5, 0x07, 0xe9, 0xe5, 0x02, 0x3c, 0x23, + 0x74, 0xf9, 0x84, 0xc0, 0x74, 0xf5, 0x3c, 0x5b, 0x74, 0x03, 0xe9, 0x3a, + 0x01, 0xff, 0x46, 0xf6, 0xb1, 0x5d, 0x8b, 0x76, 0xf6, 0x8c, 0xda, 0x8a, + 0x04, 0x3a, 0xc1, 0x74, 0x09, 0x46, 0x84, 0xc0, 0x75, 0xf5, 0x2b, 0xf6, + 0x2b, 0xd2, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xf6, 0x74, 0x05, 0x8e, 0xda, + 0xc6, 0x04, 0x00, 0x8b, 0x5e, 0xf6, 0x8b, 0x4e, 0xf8, 0x8d, 0x46, 0xc6, + 0x8c, 0xd2, 0x0e, 0xe8, 0x13, 0xfe, 0x83, 0x7e, 0xc8, 0x00, 0x75, 0x22, + 0x83, 0x7e, 0xc6, 0x00, 0x75, 0x1c, 0xb8, 0xfe, 0x00, 0xbb, 0x2f, 0x01, + 0x50, 0xb8, 0xd9, 0x06, 0xb9, 0xd9, 0x06, 0x50, 0xb8, 0x25, 0x01, 0x89, + 0xca, 0x50, 0xb8, 0x39, 0x01, 0x0e, 0x3e, 0xe8, 0x9b, 0x13, 0xbf, 0x51, + 0x01, 0xb8, 0xd9, 0x06, 0xc5, 0x76, 0xc6, 0x8e, 0xc0, 0xac, 0x26, 0x8a, + 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, + 0x85, 0xc0, 0x75, 0x08, 0xc7, 0x46, 0xcc, 0x01, 0x00, 0xe9, 0x53, 0x02, + 0xbf, 0x56, 0x01, 0xc5, 0x76, 0xc6, 0xac, 0x26, 0x8a, 0x25, 0x2a, 0xc4, + 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, 0xc0, 0x75, + 0x08, 0xc7, 0x46, 0xcc, 0x02, 0x00, 0xe9, 0x32, 0x02, 0xc5, 0x5e, 0xc6, + 0xc7, 0x46, 0xcc, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x75, 0x03, 0xe9, 0x22, + 0x02, 0xc7, 0x46, 0xfc, 0x00, 0x00, 0xc7, 0x46, 0xea, 0x8c, 0x0a, 0x8c, + 0x46, 0xec, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x46, 0xfc, 0x3b, 0x06, + 0x4e, 0x06, 0x73, 0x5f, 0x8b, 0x7e, 0xec, 0x8b, 0x76, 0xea, 0x8e, 0xdf, + 0x89, 0xf3, 0x8b, 0x47, 0x06, 0x8b, 0x57, 0x04, 0x85, 0xc0, 0x75, 0x20, + 0x85, 0xd2, 0x75, 0x1c, 0xb8, 0x0f, 0x01, 0xbb, 0x2f, 0x01, 0x50, 0xb8, + 0xd9, 0x06, 0xb9, 0xd9, 0x06, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, + 0xb8, 0x5d, 0x01, 0x0e, 0x3e, 0xe8, 0xf5, 0x12, 0x8e, 0xdf, 0x8b, 0x7e, + 0xc6, 0xc5, 0x54, 0x04, 0x8e, 0x46, 0xc8, 0x89, 0xd6, 0xac, 0x26, 0x8a, + 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, + 0x85, 0xc0, 0x75, 0x0e, 0x8b, 0x46, 0xfc, 0xc7, 0x46, 0xcc, 0x03, 0x00, + 0x89, 0x46, 0xca, 0xe9, 0xa5, 0x01, 0x83, 0x46, 0xea, 0x0a, 0xff, 0x46, + 0xfc, 0xeb, 0x87, 0x8b, 0x46, 0xcc, 0x3d, 0x01, 0x00, 0x75, 0x61, 0xb1, + 0x3d, 0x89, 0xde, 0x8c, 0xda, 0x8a, 0x04, 0x3a, 0xc1, 0x74, 0x09, 0x46, + 0x84, 0xc0, 0x75, 0xf5, 0x2b, 0xf6, 0x2b, 0xd2, 0x85, 0xd2, 0x75, 0x04, + 0x85, 0xf6, 0x74, 0xcf, 0xbf, 0x7a, 0x01, 0xb8, 0xd9, 0x06, 0x8e, 0xda, + 0x8d, 0x5c, 0x01, 0xc6, 0x04, 0x00, 0xc5, 0x76, 0xf6, 0x8e, 0xc0, 0x89, + 0x56, 0xfa, 0xac, 0x26, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, + 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x5f, 0x8e, 0x5e, 0xfa, + 0x89, 0xd9, 0x89, 0x56, 0xd0, 0x89, 0x46, 0xd2, 0x89, 0x46, 0xd4, 0x8a, + 0x07, 0x84, 0xc0, 0x74, 0x0a, 0x3c, 0x2c, 0x74, 0x06, 0x43, 0xeb, 0xf3, + 0xe9, 0xf6, 0x01, 0x8e, 0x5e, 0xfa, 0x80, 0x3f, 0x2c, 0x75, 0x0a, 0xc6, + 0x07, 0x00, 0x43, 0x8c, 0x5e, 0xd4, 0x89, 0x5e, 0xd2, 0x83, 0x7e, 0xd4, + 0x00, 0x75, 0x06, 0x83, 0x7e, 0xd2, 0x00, 0x74, 0x25, 0xc5, 0x5e, 0xd2, + 0x80, 0x3f, 0x00, 0x74, 0x1d, 0x0e, 0xe8, 0x97, 0xf9, 0x89, 0xc3, 0x89, + 0x56, 0xfe, 0x85, 0xd2, 0x75, 0x13, 0x85, 0xc0, 0x75, 0x0f, 0xb8, 0xd9, + 0x06, 0x50, 0xb8, 0x83, 0x01, 0xe9, 0x14, 0x02, 0xeb, 0x61, 0xe9, 0xea, + 0x00, 0xbf, 0x98, 0x01, 0x8e, 0xda, 0x89, 0xc6, 0xb8, 0xd9, 0x06, 0xc6, + 0x44, 0x08, 0x00, 0x8e, 0x5e, 0xd0, 0x8e, 0xc0, 0x89, 0xce, 0xac, 0x26, + 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, + 0xe4, 0x85, 0xc0, 0x75, 0x0e, 0xb9, 0xa1, 0x01, 0x8e, 0xda, 0x89, 0xde, + 0x8c, 0x46, 0xd0, 0xc6, 0x44, 0x08, 0x01, 0x8b, 0x46, 0xd2, 0x8b, 0x56, + 0xd4, 0x0e, 0x3e, 0xe8, 0x8a, 0x0c, 0x8e, 0x5e, 0xfe, 0x89, 0x07, 0x89, + 0x57, 0x02, 0x8b, 0x56, 0xd0, 0x89, 0xc8, 0x0e, 0x3e, 0xe8, 0x78, 0x0c, + 0x8e, 0x5e, 0xfe, 0x89, 0x47, 0x04, 0x89, 0x57, 0x06, 0xeb, 0x9f, 0xbf, + 0xa2, 0x01, 0x8b, 0x76, 0xf6, 0xac, 0x26, 0x8a, 0x25, 0x2a, 0xc4, 0x75, + 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x18, + 0x8e, 0x5e, 0xfa, 0x89, 0xd9, 0x89, 0xd7, 0x31, 0xf6, 0x31, 0xd2, 0x8a, + 0x07, 0x84, 0xc0, 0x74, 0x0a, 0x3c, 0x2c, 0x74, 0x06, 0x43, 0xeb, 0xf3, + 0xe9, 0xc3, 0x00, 0x8e, 0x5e, 0xfa, 0x80, 0x3f, 0x2c, 0x75, 0x08, 0x8d, + 0x77, 0x01, 0x8c, 0xda, 0xc6, 0x07, 0x00, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0x31, 0xc0, 0xa3, 0x4c, 0x06, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xf6, 0x74, + 0x16, 0x8e, 0xda, 0x80, 0x3c, 0x00, 0x74, 0x0f, 0x89, 0xf0, 0x0e, 0xe8, + 0xd0, 0x12, 0x90, 0xba, 0xd9, 0x06, 0x8e, 0xda, 0xa3, 0x4c, 0x06, 0xb8, + 0xd9, 0x06, 0x8e, 0xd8, 0x83, 0x3e, 0x4c, 0x06, 0x00, 0x7f, 0x06, 0xc7, + 0x06, 0x4c, 0x06, 0x05, 0x00, 0xb8, 0x48, 0x06, 0xba, 0xd9, 0x06, 0x89, + 0xcb, 0x89, 0xf9, 0x0e, 0xe8, 0x72, 0xfb, 0x8e, 0x5e, 0xce, 0x8b, 0x5e, + 0xf4, 0x8a, 0x47, 0x0a, 0xa8, 0x10, 0x75, 0x5b, 0xa8, 0x20, 0x75, 0x57, + 0x1e, 0xb8, 0xd9, 0x06, 0x53, 0x8e, 0xd8, 0xbb, 0x00, 0x10, 0xa1, 0x56, + 0x06, 0x8b, 0x16, 0x58, 0x06, 0x0e, 0x3e, 0xe8, 0xf0, 0x12, 0x85, 0xd2, + 0x75, 0x04, 0x85, 0xc0, 0x74, 0x39, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, + 0x56, 0x06, 0x8b, 0x16, 0x58, 0x06, 0xe8, 0x59, 0xfb, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0xa1, 0x58, 0x06, 0x8b, 0x1e, 0x56, 0x06, 0x89, 0x46, 0xf8, + 0x89, 0x5e, 0xf6, 0x8e, 0x5e, 0xf8, 0x8b, 0x5e, 0xf6, 0x8a, 0x07, 0x3c, + 0x20, 0x74, 0x07, 0x3c, 0x09, 0x74, 0x03, 0xe9, 0xb8, 0xfc, 0xff, 0x46, + 0xf6, 0xeb, 0xeb, 0xe9, 0xcb, 0x00, 0xbf, 0xae, 0x01, 0x8b, 0x76, 0xf6, + 0xac, 0x26, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, + 0xf3, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x0a, 0xb8, 0x3e, 0x06, 0x89, 0xd1, + 0x8c, 0xc2, 0xe9, 0x6e, 0xff, 0xbf, 0xba, 0x01, 0x8b, 0x76, 0xf6, 0xac, + 0x26, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf3, + 0x18, 0xe4, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x56, 0xff, 0x89, 0xd8, 0x0e, + 0x3e, 0xe8, 0xf6, 0x11, 0x85, 0xc0, 0x7e, 0x05, 0xb8, 0x01, 0x00, 0xeb, + 0x02, 0x31, 0xc0, 0xba, 0xd9, 0x06, 0x8e, 0xda, 0xa2, 0x3c, 0x06, 0xeb, + 0xe1, 0x3d, 0x02, 0x00, 0x75, 0x15, 0x89, 0xd8, 0x8c, 0xda, 0x0e, 0xe8, + 0xe5, 0xf7, 0x85, 0xc0, 0x74, 0xd0, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0xc3, + 0x01, 0xeb, 0x45, 0x3d, 0x03, 0x00, 0x75, 0xc2, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0x8b, 0x46, 0xca, 0x3b, 0x06, 0x4e, 0x06, 0x72, 0x1a, 0xb8, 0x67, + 0x01, 0xbb, 0x2f, 0x01, 0x50, 0x8c, 0xd8, 0x8c, 0xd9, 0x50, 0xb8, 0x25, + 0x01, 0x89, 0xca, 0x50, 0xb8, 0xdd, 0x01, 0x0e, 0x3e, 0xe8, 0x15, 0x10, + 0x8b, 0x5e, 0xca, 0x8b, 0x46, 0xf6, 0x8b, 0x56, 0xf8, 0x0e, 0xe8, 0xd5, + 0xf7, 0x85, 0xc0, 0x74, 0x89, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0xfc, 0x01, + 0x50, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x88, 0x06, 0x50, 0x0e, 0x3e, 0xe8, + 0x44, 0x0c, 0x83, 0xc4, 0x08, 0x8d, 0x46, 0xc6, 0x8c, 0xd2, 0x0e, 0xe8, + 0x03, 0xfa, 0x8b, 0x46, 0xf4, 0x8b, 0x56, 0xce, 0x0e, 0xe8, 0x32, 0x13, + 0x90, 0xe8, 0x36, 0xf8, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x40, 0x06, + 0x8b, 0x16, 0x3e, 0x06, 0x85, 0xc0, 0x75, 0x1a, 0x85, 0xd2, 0x75, 0x16, + 0xb8, 0x16, 0x02, 0x8c, 0xda, 0xbb, 0xd9, 0x06, 0x0e, 0xe8, 0x74, 0x0a, + 0x90, 0x8e, 0xdb, 0xa3, 0x3e, 0x06, 0x89, 0x16, 0x40, 0x06, 0xb8, 0xd9, + 0x06, 0x8e, 0xd8, 0xc5, 0x1e, 0x3e, 0x06, 0x80, 0x3f, 0x00, 0x74, 0x0a, + 0x8e, 0xd8, 0xc7, 0x06, 0x46, 0x06, 0x02, 0x00, 0xeb, 0x07, 0x8e, 0xd8, + 0x31, 0xc0, 0xa3, 0x46, 0x06, 0xb8, 0xd9, 0x06, 0xc7, 0x46, 0xee, 0x8c, + 0x0a, 0x8e, 0xd8, 0x31, 0xc0, 0x8c, 0x5e, 0xf0, 0x89, 0x46, 0xd6, 0xa3, + 0x50, 0x06, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x46, 0xd6, 0x3b, 0x06, + 0x4e, 0x06, 0x73, 0x71, 0x8b, 0x46, 0xf0, 0x8b, 0x76, 0xee, 0x8e, 0xd8, + 0x89, 0xf3, 0x89, 0x46, 0xd8, 0x8b, 0x47, 0x06, 0x8b, 0x57, 0x04, 0x85, + 0xc0, 0x75, 0x20, 0x85, 0xd2, 0x75, 0x1c, 0xb8, 0x84, 0x01, 0xbb, 0x2f, + 0x01, 0x50, 0xb8, 0xd9, 0x06, 0xb9, 0xd9, 0x06, 0x50, 0xb8, 0x25, 0x01, + 0x89, 0xca, 0x50, 0xb8, 0x5d, 0x01, 0x0e, 0xe8, 0x33, 0x0f, 0x90, 0xb8, + 0xd9, 0x06, 0x8e, 0xd8, 0xc4, 0x3e, 0x48, 0x06, 0x8e, 0x5e, 0xd8, 0xc5, + 0x44, 0x04, 0x89, 0xc6, 0xac, 0x26, 0x8a, 0x25, 0x2a, 0xc4, 0x75, 0x05, + 0x47, 0x3a, 0xc4, 0x75, 0xf3, 0x18, 0xe4, 0x85, 0xc0, 0x75, 0x0d, 0xb8, + 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x46, 0xd6, 0xa3, 0x50, 0x06, 0xeb, 0x09, + 0x83, 0x46, 0xee, 0x0a, 0xff, 0x46, 0xd6, 0xeb, 0x81, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0x80, 0x3e, 0x3d, 0x06, 0x00, 0x75, 0x03, 0xe9, 0xbf, 0x02, + 0x50, 0xb8, 0x35, 0x02, 0x50, 0x8c, 0xd8, 0xc7, 0x46, 0xda, 0x00, 0x00, + 0x50, 0xb8, 0x88, 0x06, 0xbf, 0x8c, 0x0a, 0x50, 0xc7, 0x46, 0xf2, 0xd9, + 0x06, 0x0e, 0x3e, 0xe8, 0x20, 0x0b, 0x83, 0xc4, 0x08, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0x8b, 0x46, 0xda, 0x3b, 0x06, 0x4e, 0x06, 0x72, 0x03, 0xe9, + 0x92, 0x00, 0x8b, 0x46, 0xf2, 0x89, 0xfe, 0x8e, 0xd8, 0x89, 0x46, 0xdc, + 0x8b, 0x45, 0x06, 0x8b, 0x55, 0x04, 0x85, 0xc0, 0x75, 0x20, 0x85, 0xd2, + 0x75, 0x1c, 0xb8, 0x93, 0x01, 0xbb, 0x2f, 0x01, 0x50, 0xb8, 0xd9, 0x06, + 0xb9, 0xd9, 0x06, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x5d, + 0x01, 0x0e, 0x3e, 0xe8, 0x83, 0x0e, 0x8e, 0x5e, 0xdc, 0x8b, 0x44, 0x02, + 0x8b, 0x14, 0x85, 0xc0, 0x75, 0x20, 0x85, 0xd2, 0x75, 0x1c, 0xb8, 0x94, + 0x01, 0xbb, 0x2f, 0x01, 0x50, 0xb8, 0xd9, 0x06, 0xb9, 0xd9, 0x06, 0x50, + 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x42, 0x02, 0x0e, 0x3e, 0xe8, + 0x57, 0x0e, 0x8e, 0x5e, 0xdc, 0xff, 0x74, 0x02, 0xff, 0x34, 0xff, 0x74, + 0x06, 0xff, 0x74, 0x04, 0xff, 0x76, 0xda, 0xb8, 0xd9, 0x06, 0x50, 0xb8, + 0x5a, 0x02, 0x50, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x88, 0x06, 0x83, 0xc7, + 0x0a, 0x50, 0xff, 0x46, 0xda, 0x0e, 0x3e, 0xe8, 0x80, 0x0a, 0x83, 0xc4, + 0x12, 0xe9, 0x5d, 0xff, 0x8c, 0xd8, 0x50, 0xb8, 0x75, 0x02, 0x50, 0x8c, + 0xd8, 0x50, 0xb8, 0x88, 0x06, 0x31, 0xff, 0x50, 0x31, 0xf6, 0x0e, 0xe8, + 0x64, 0x0a, 0x90, 0x83, 0xc4, 0x08, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x3b, + 0x3e, 0x52, 0x06, 0x73, 0x56, 0x8b, 0x84, 0x54, 0x0b, 0x89, 0x46, 0xde, + 0x8b, 0x84, 0x56, 0x0b, 0x89, 0x46, 0xe0, 0x85, 0xc0, 0x75, 0x20, 0x83, + 0x7e, 0xde, 0x00, 0x75, 0x1a, 0xb8, 0xa0, 0x01, 0xbb, 0x2f, 0x01, 0x50, + 0x8c, 0xd8, 0x8c, 0xd9, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, + 0x87, 0x02, 0x0e, 0xe8, 0xcf, 0x0d, 0x90, 0xff, 0x76, 0xe0, 0xff, 0x76, + 0xde, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x91, 0x02, 0x50, 0xb8, 0xd9, 0x06, + 0x50, 0xb8, 0x88, 0x06, 0x83, 0xc6, 0x04, 0x50, 0x47, 0x0e, 0x3e, 0xe8, + 0x04, 0x0a, 0x83, 0xc4, 0x0c, 0xeb, 0x9f, 0x50, 0xb8, 0x98, 0x02, 0x50, + 0x8c, 0xd8, 0x50, 0xb8, 0x88, 0x06, 0xc7, 0x46, 0xe2, 0x00, 0x00, 0x50, + 0x31, 0xff, 0x0e, 0xe8, 0xe8, 0x09, 0x90, 0x83, 0xc4, 0x08, 0xb8, 0xd9, + 0x06, 0x8b, 0x5e, 0xe2, 0x8e, 0xd8, 0x3b, 0x1e, 0x54, 0x06, 0x72, 0x03, + 0xe9, 0xcf, 0x00, 0x8b, 0x85, 0xfc, 0x08, 0x89, 0x46, 0xe4, 0x8b, 0x85, + 0xfe, 0x08, 0x89, 0x46, 0xe6, 0x8a, 0x87, 0xe4, 0x0c, 0x30, 0xe4, 0x89, + 0xc6, 0x83, 0x7e, 0xe6, 0x00, 0x75, 0x20, 0x83, 0x7e, 0xe4, 0x00, 0x75, + 0x1a, 0xb8, 0xad, 0x01, 0xbb, 0x2f, 0x01, 0x50, 0x8c, 0xd8, 0x8c, 0xd9, + 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x87, 0x02, 0x0e, 0xe8, + 0x43, 0x0d, 0x90, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x3b, 0x36, 0x4e, 0x06, + 0x72, 0x1a, 0xb8, 0xae, 0x01, 0xbb, 0x2f, 0x01, 0x50, 0x8c, 0xd8, 0x8c, + 0xd9, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0xaa, 0x02, 0x0e, + 0x3e, 0xe8, 0x1d, 0x0d, 0xba, 0x0a, 0x00, 0x89, 0xf0, 0xf7, 0xea, 0xc7, + 0x46, 0xe8, 0xd9, 0x06, 0xbe, 0x8c, 0x0a, 0x8e, 0x5e, 0xe8, 0x01, 0xc6, + 0x8b, 0x44, 0x06, 0x8b, 0x54, 0x04, 0x85, 0xc0, 0x75, 0x20, 0x85, 0xd2, + 0x75, 0x1c, 0xb8, 0xb3, 0x01, 0xbb, 0x2f, 0x01, 0x50, 0xb8, 0xd9, 0x06, + 0xb9, 0xd9, 0x06, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x5d, + 0x01, 0x0e, 0x3e, 0xe8, 0xdf, 0x0c, 0xff, 0x76, 0xe6, 0x8e, 0x5e, 0xe8, + 0xff, 0x76, 0xe4, 0xff, 0x74, 0x06, 0xff, 0x74, 0x04, 0xb8, 0xd9, 0x06, + 0x50, 0xb8, 0xbf, 0x02, 0x50, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x88, 0x06, + 0xff, 0x46, 0xe2, 0x50, 0x83, 0xc7, 0x04, 0x0e, 0x3e, 0xe8, 0x0a, 0x09, + 0x83, 0xc4, 0x10, 0xe9, 0x20, 0xff, 0xa1, 0x4a, 0x06, 0x8b, 0x16, 0x48, + 0x06, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, 0x1b, 0xff, 0x36, 0x4a, + 0x06, 0x52, 0x8c, 0xd8, 0x50, 0xb8, 0xd7, 0x02, 0x50, 0x8c, 0xd8, 0x50, + 0xb8, 0x88, 0x06, 0x50, 0x0e, 0xe8, 0xde, 0x08, 0x90, 0x83, 0xc4, 0x0c, + 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xff, 0x36, 0x4c, 0x06, 0x50, 0xb8, 0xeb, + 0x02, 0x50, 0x8c, 0xd8, 0x50, 0xb8, 0x88, 0x06, 0x50, 0x0e, 0x3e, 0xe8, + 0xc0, 0x08, 0xb8, 0xd9, 0x06, 0x83, 0xc4, 0x0a, 0x8e, 0xd8, 0xff, 0x36, + 0x50, 0x06, 0x50, 0xb8, 0x08, 0x03, 0x50, 0x8c, 0xd8, 0x50, 0xb8, 0x88, + 0x06, 0x50, 0x0e, 0xe8, 0xa4, 0x08, 0x90, 0xb8, 0xd9, 0x06, 0x83, 0xc4, + 0x0a, 0x8e, 0xd8, 0xff, 0x36, 0x40, 0x06, 0xff, 0x36, 0x3e, 0x06, 0x50, + 0xb8, 0x21, 0x03, 0x50, 0x8c, 0xd8, 0x50, 0xb8, 0x88, 0x06, 0x50, 0x0e, + 0x3e, 0xe8, 0x82, 0x08, 0x83, 0xc4, 0x0c, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0x83, 0x3e, 0x4e, 0x06, 0x00, 0x75, 0x07, 0x50, 0xb8, 0x35, 0x03, 0xe9, + 0x98, 0xf7, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, + 0xcb, 0x53, 0x89, 0xc3, 0xb8, 0x40, 0x00, 0x8e, 0xd8, 0x8b, 0x07, 0x5b, + 0xcb, 0xb8, 0x49, 0x00, 0x53, 0x89, 0xc3, 0xb8, 0x40, 0x00, 0x8e, 0xd8, + 0x8a, 0x07, 0x5b, 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0x8e, 0xd9, + 0x89, 0xd7, 0xd1, 0xe0, 0x31, 0xd2, 0xbe, 0xd9, 0x06, 0x8e, 0xc6, 0x26, + 0x3b, 0x16, 0x4a, 0x0d, 0x73, 0x3e, 0x80, 0x3f, 0x00, 0x74, 0x39, 0xc6, + 0x46, 0xff, 0x00, 0x8a, 0x0f, 0x26, 0x8b, 0x36, 0x5a, 0x06, 0x88, 0x4e, + 0xfe, 0x26, 0x8e, 0x06, 0x5c, 0x06, 0x01, 0xc6, 0x8b, 0x4e, 0xfe, 0x26, + 0x89, 0x0c, 0xb9, 0xd9, 0x06, 0x8e, 0xc1, 0x42, 0x26, 0x8b, 0x36, 0x5a, + 0x06, 0x43, 0x81, 0xc6, 0x00, 0x20, 0x26, 0x8e, 0x06, 0x5c, 0x06, 0x01, + 0xc6, 0x40, 0x40, 0x26, 0x89, 0x3c, 0xeb, 0xb6, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0xcb, 0x53, 0x51, 0x52, 0x56, 0x89, 0xc1, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0x3b, 0x0e, 0x4e, 0x06, 0x72, 0x03, 0xe9, 0x6e, 0xff, 0xba, 0x0a, + 0x00, 0x89, 0xc8, 0xf7, 0xea, 0xbb, 0x8c, 0x0a, 0x1e, 0x07, 0x01, 0xc3, + 0x26, 0xa1, 0x46, 0x06, 0x01, 0xc8, 0x26, 0xf7, 0x26, 0x4a, 0x0d, 0x80, + 0x7f, 0x08, 0x01, 0x75, 0x05, 0xba, 0x81, 0x00, 0xeb, 0x0f, 0x26, 0x3b, + 0x0e, 0x50, 0x06, 0x75, 0x05, 0xba, 0xe5, 0x00, 0xeb, 0x03, 0xba, 0xe1, + 0x00, 0x8b, 0x0f, 0x8b, 0x77, 0x02, 0x89, 0xcb, 0x89, 0xf1, 0x0e, 0xe8, + 0x4e, 0xff, 0xeb, 0xbb, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, + 0x83, 0xec, 0x18, 0xe8, 0x47, 0xf3, 0xc6, 0x46, 0xfc, 0x00, 0x85, 0xc0, + 0x74, 0x06, 0xb8, 0x01, 0x00, 0xe9, 0x0c, 0xff, 0x9c, 0xfa, 0xb0, 0x34, + 0xba, 0x77, 0x00, 0xee, 0x31, 0xdb, 0xba, 0x71, 0x00, 0x88, 0xd8, 0xee, + 0xba, 0x71, 0x00, 0x30, 0xc0, 0xee, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xc7, + 0x06, 0xd0, 0x07, 0x01, 0x00, 0x89, 0x1e, 0xce, 0x07, 0x9d, 0xb8, 0xd9, + 0x06, 0x8e, 0xd8, 0xa1, 0x4c, 0x06, 0x99, 0x89, 0xc3, 0x89, 0xd1, 0xa1, + 0xda, 0x07, 0x8b, 0x16, 0xdc, 0x07, 0x0e, 0xe8, 0x86, 0x0e, 0x90, 0x89, + 0xc7, 0x89, 0xd6, 0x89, 0x46, 0xf8, 0x89, 0x56, 0xfa, 0x9c, 0xfa, 0xba, + 0x77, 0x00, 0x30, 0xc0, 0xee, 0xba, 0x71, 0x00, 0xec, 0xba, 0x71, 0x00, + 0x88, 0xc3, 0xec, 0x88, 0xc7, 0x9d, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x31, + 0xc0, 0xa3, 0x5a, 0x06, 0x8c, 0xd8, 0xc7, 0x06, 0x5c, 0x06, 0x00, 0xa0, + 0x50, 0xb8, 0x4c, 0x03, 0xc7, 0x06, 0x4a, 0x0d, 0x50, 0x00, 0x50, 0xc7, + 0x06, 0x48, 0x0d, 0x19, 0x00, 0x0e, 0x3e, 0xe8, 0x56, 0x0e, 0x83, 0xc4, + 0x04, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x52, 0x03, 0x50, 0xba, 0xd9, 0x06, + 0x0e, 0xe8, 0x44, 0x0e, 0x90, 0x83, 0xc4, 0x04, 0xb8, 0x76, 0x06, 0x0e, + 0x3e, 0xe8, 0x57, 0x0e, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x89, 0x5e, 0xe8, + 0x80, 0x3e, 0x3d, 0x06, 0x00, 0x74, 0x64, 0xff, 0x36, 0x48, 0x0d, 0xff, + 0x36, 0x4a, 0x0d, 0x50, 0xb8, 0x58, 0x03, 0x50, 0x8c, 0xd8, 0x50, 0xb8, + 0x88, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0xaa, 0x06, 0xb8, 0xd9, 0x06, 0x83, + 0xc4, 0x0c, 0x8e, 0xd8, 0xff, 0x36, 0x5c, 0x06, 0xff, 0x36, 0x5a, 0x06, + 0x50, 0xb8, 0x6b, 0x03, 0x50, 0x8c, 0xd8, 0x50, 0xb8, 0x88, 0x06, 0x50, + 0x0e, 0xe8, 0x8a, 0x06, 0x90, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x83, 0xc4, + 0x0c, 0x8b, 0x16, 0x5c, 0x06, 0xa1, 0x5a, 0x06, 0x52, 0x80, 0xc4, 0x20, + 0x50, 0x8c, 0xd8, 0x50, 0xb8, 0x78, 0x03, 0x50, 0x8c, 0xd8, 0x50, 0xb8, + 0x88, 0x06, 0x50, 0x0e, 0x3e, 0xe8, 0x62, 0x06, 0x83, 0xc4, 0x0c, 0xb8, + 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x46, 0x06, 0x03, 0x06, 0x4e, 0x06, 0x40, + 0x40, 0x89, 0x46, 0xea, 0x3b, 0x06, 0x48, 0x0d, 0x76, 0x06, 0xa1, 0x48, + 0x0d, 0x89, 0x46, 0xea, 0x31, 0xc9, 0x3b, 0x4e, 0xea, 0x73, 0x66, 0xb8, + 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x4a, 0x0d, 0xf7, 0xe1, 0xc7, 0x46, 0xf4, + 0x00, 0x00, 0x89, 0x46, 0xf2, 0xd1, 0xe0, 0xba, 0xd9, 0x06, 0x8e, 0xda, + 0x8b, 0x56, 0xf4, 0x3b, 0x16, 0x4a, 0x0d, 0x73, 0x11, 0xff, 0x46, 0xf4, + 0xc5, 0x1e, 0x5a, 0x06, 0x01, 0xc3, 0x40, 0x40, 0xc7, 0x07, 0x20, 0x00, + 0xeb, 0xe1, 0x8b, 0x56, 0xf2, 0xd1, 0xe2, 0x31, 0xc0, 0x89, 0x56, 0xf6, + 0xba, 0xd9, 0x06, 0x8e, 0xda, 0x3b, 0x06, 0x4a, 0x0d, 0x73, 0x1b, 0x8b, + 0x5e, 0xf6, 0x8b, 0x16, 0x5a, 0x06, 0x40, 0x80, 0xc6, 0x20, 0x8e, 0x1e, + 0x5c, 0x06, 0x01, 0xd3, 0x83, 0x46, 0xf6, 0x02, 0xc7, 0x07, 0x00, 0x00, + 0xeb, 0xda, 0x41, 0xeb, 0x95, 0xc6, 0x46, 0xfe, 0x01, 0x83, 0xfe, 0xff, + 0x75, 0x05, 0x83, 0xff, 0xff, 0x74, 0x35, 0x9c, 0xfa, 0xba, 0x77, 0x00, + 0x30, 0xc0, 0xee, 0xba, 0x71, 0x00, 0xec, 0x88, 0xc3, 0xba, 0x71, 0x00, + 0x30, 0xff, 0xec, 0x89, 0xda, 0x8b, 0x4e, 0xe8, 0x88, 0xc6, 0x9d, 0x89, + 0xc8, 0x89, 0x56, 0xe8, 0x29, 0xd0, 0x31, 0xd2, 0x85, 0xf6, 0x77, 0x06, + 0x75, 0x0d, 0x39, 0xc7, 0x72, 0x09, 0x29, 0xc7, 0x19, 0xd6, 0xeb, 0x07, + 0xe9, 0xb1, 0x01, 0x31, 0xff, 0x31, 0xf6, 0x8b, 0x46, 0xfa, 0x39, 0xc6, + 0x72, 0x07, 0x75, 0x2c, 0x3b, 0x7e, 0xf8, 0x73, 0x27, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0x8b, 0x46, 0xfa, 0x3b, 0x06, 0xdc, 0x07, 0x77, 0x0b, 0x75, + 0x1a, 0x8b, 0x46, 0xf8, 0x3b, 0x06, 0xda, 0x07, 0x72, 0x11, 0xa1, 0xda, + 0x07, 0x29, 0x46, 0xf8, 0xa1, 0xdc, 0x07, 0x19, 0x46, 0xfa, 0xeb, 0x0b, + 0xe9, 0x93, 0x00, 0x31, 0xc0, 0x89, 0x46, 0xf8, 0x89, 0x46, 0xfa, 0xb8, + 0xd9, 0x06, 0x8b, 0x56, 0xfa, 0x8e, 0xd8, 0x8b, 0x46, 0xf8, 0x8b, 0x1e, + 0xda, 0x07, 0x8b, 0x0e, 0xdc, 0x07, 0xc7, 0x46, 0xf0, 0xa1, 0x00, 0x0e, + 0x3e, 0xe8, 0x17, 0x0d, 0x89, 0x46, 0xee, 0x8b, 0x16, 0x58, 0x06, 0xa1, + 0x56, 0x06, 0x85, 0xd2, 0x75, 0x1e, 0x85, 0xc0, 0x75, 0x1a, 0xb8, 0x93, + 0x02, 0xbb, 0x86, 0x03, 0x50, 0x8c, 0xd8, 0x8c, 0xd9, 0x50, 0xb8, 0x25, + 0x01, 0x89, 0xca, 0x50, 0xb8, 0x8f, 0x03, 0x0e, 0x3e, 0xe8, 0xad, 0x08, + 0x8b, 0x46, 0xee, 0x40, 0x50, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x9c, 0x03, + 0x50, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xff, 0x36, 0x58, 0x06, 0xff, 0x36, + 0x56, 0x06, 0x0e, 0xe8, 0x51, 0x0d, 0x90, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0xa1, 0x46, 0x06, 0x03, 0x06, 0x4e, 0x06, 0x40, 0xf7, 0x26, 0x4a, 0x0d, + 0x83, 0xc4, 0x0a, 0x8b, 0x1e, 0x56, 0x06, 0x8b, 0x0e, 0x58, 0x06, 0x8b, + 0x56, 0xf0, 0x0e, 0xe8, 0x7a, 0xfc, 0x85, 0xf6, 0x75, 0x36, 0x85, 0xff, + 0x75, 0x32, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x46, 0x06, 0x03, 0x06, + 0x4e, 0x06, 0x40, 0xf7, 0x26, 0x4a, 0x0d, 0xbb, 0xbf, 0x03, 0x8c, 0xd9, + 0xba, 0xe1, 0x00, 0x0e, 0xe8, 0x55, 0xfc, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0xa1, 0x50, 0x06, 0x85, 0xc0, 0x7c, 0x0c, 0x3b, 0x06, 0x4e, 0x06, 0x7d, + 0x06, 0xe9, 0x3f, 0x01, 0xe9, 0xa5, 0x00, 0xe9, 0x3d, 0x01, 0xc6, 0x46, + 0xfe, 0x00, 0x0e, 0xe8, 0x06, 0x0d, 0x90, 0x85, 0xc0, 0x75, 0x03, 0xe9, + 0x9f, 0xfe, 0x0e, 0xe8, 0x15, 0x0d, 0x90, 0x3d, 0x1b, 0x00, 0x74, 0xe3, + 0x3d, 0x0b, 0x00, 0x74, 0x03, 0xe9, 0xbf, 0x00, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0xa1, 0x4e, 0x06, 0x48, 0x8b, 0x0e, 0x50, 0x06, 0x89, 0x46, 0xec, + 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xff, 0x0e, 0x50, 0x06, 0x83, 0x3e, 0x50, + 0x06, 0x00, 0x7d, 0x06, 0x8b, 0x46, 0xec, 0xa3, 0x50, 0x06, 0xb8, 0xd9, + 0x06, 0x8e, 0xd8, 0xba, 0x0a, 0x00, 0xa1, 0x50, 0x06, 0xf7, 0xea, 0x89, + 0xc3, 0x80, 0xbf, 0x94, 0x0a, 0x01, 0x74, 0xd4, 0x3b, 0x0e, 0x50, 0x06, + 0x74, 0x12, 0x89, 0xc8, 0x0e, 0xe8, 0x2e, 0xfc, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0xa1, 0x50, 0x06, 0x0e, 0xe8, 0x22, 0xfc, 0x83, 0xfe, 0xff, 0x75, + 0x05, 0x83, 0xff, 0xff, 0x74, 0x8d, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, + 0x46, 0x06, 0x03, 0x06, 0x4e, 0x06, 0x40, 0xf7, 0x26, 0x4a, 0x0d, 0xbf, + 0xff, 0xff, 0xbb, 0xbf, 0x03, 0x8c, 0xd9, 0xba, 0xe1, 0x00, 0x89, 0xfe, + 0x0e, 0xe8, 0x98, 0xfb, 0x80, 0x7e, 0xfe, 0x00, 0x75, 0x03, 0xe9, 0x59, + 0xff, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x83, 0x3e, 0x46, 0x06, 0x00, 0x76, + 0x11, 0xba, 0xe1, 0x00, 0x8b, 0x1e, 0x3e, 0x06, 0x8b, 0x0e, 0x40, 0x06, + 0x31, 0xc0, 0x0e, 0xe8, 0x72, 0xfb, 0x31, 0xd2, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0x3b, 0x16, 0x4e, 0x06, 0x72, 0x03, 0xe9, 0x28, 0xff, 0x89, 0xd0, + 0x0e, 0xe8, 0xba, 0xfb, 0x42, 0xeb, 0xe9, 0x3d, 0x0a, 0x00, 0x75, 0x39, + 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x0e, 0x50, 0x06, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0xff, 0x06, 0x50, 0x06, 0xa1, 0x50, 0x06, 0x3b, 0x06, 0x4e, + 0x06, 0x7c, 0x05, 0x31, 0xc0, 0xa3, 0x50, 0x06, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0xba, 0x0a, 0x00, 0xa1, 0x50, 0x06, 0xf7, 0xea, 0x89, 0xc3, 0x80, + 0xbf, 0x94, 0x0a, 0x01, 0x74, 0xd3, 0xe9, 0x3f, 0xff, 0x3d, 0x0d, 0x00, + 0x74, 0x03, 0xe9, 0x88, 0xfd, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x50, + 0x06, 0x85, 0xc0, 0x7c, 0xf1, 0x3b, 0x06, 0x4e, 0x06, 0x7d, 0xeb, 0xc6, + 0x46, 0xfc, 0x01, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0xe8, 0x03, 0x50, 0x0e, + 0x3e, 0xe8, 0x9c, 0x0a, 0x83, 0xc4, 0x04, 0xb8, 0xd9, 0x06, 0x50, 0xb8, + 0xea, 0x03, 0x50, 0x0e, 0x3e, 0xe8, 0x8c, 0x0a, 0x83, 0xc4, 0x04, 0xb8, + 0xd9, 0x06, 0x50, 0xb8, 0xf0, 0x03, 0x50, 0x0e, 0x3e, 0xe8, 0x7c, 0x0a, + 0xb8, 0xd9, 0x06, 0x83, 0xc4, 0x04, 0x8e, 0xd8, 0xff, 0x36, 0x48, 0x0d, + 0x50, 0xb8, 0xf6, 0x03, 0x50, 0xba, 0xd9, 0x06, 0x0e, 0xe8, 0x64, 0x0a, + 0x90, 0x83, 0xc4, 0x06, 0xb8, 0x76, 0x06, 0x0e, 0x3e, 0xe8, 0x77, 0x0a, + 0x80, 0x7e, 0xfc, 0x00, 0x75, 0x03, 0xe9, 0x6d, 0xfb, 0xe9, 0x7a, 0xfa, + 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0xb8, + 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x50, 0x06, 0x3b, 0x06, 0x4e, 0x06, 0x7c, + 0x03, 0xe9, 0x60, 0xfa, 0xbe, 0x0a, 0x00, 0xf7, 0xee, 0xbe, 0x8c, 0x0a, + 0x01, 0xc6, 0x8b, 0x44, 0x06, 0x8b, 0x7c, 0x04, 0x85, 0xc0, 0x75, 0x1e, + 0x85, 0xff, 0x75, 0x1a, 0xb8, 0x31, 0x03, 0xbb, 0xfc, 0x03, 0x50, 0x8c, + 0xd8, 0x8c, 0xd9, 0x50, 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x5d, + 0x01, 0x0e, 0x3e, 0xe8, 0x43, 0x06, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0x31, + 0xf6, 0xb8, 0xd9, 0x06, 0x8b, 0x7e, 0xfe, 0x8e, 0xd8, 0x3b, 0x3e, 0x52, + 0x06, 0x73, 0x3f, 0x8b, 0x84, 0x54, 0x0b, 0x8b, 0xbc, 0x56, 0x0b, 0x89, + 0x46, 0xf8, 0x85, 0xff, 0x75, 0x1e, 0x85, 0xc0, 0x75, 0x1a, 0xb8, 0x36, + 0x03, 0xbb, 0xfc, 0x03, 0x50, 0x8c, 0xd8, 0x8c, 0xd9, 0x50, 0xb8, 0x25, + 0x01, 0x89, 0xca, 0x50, 0xb8, 0x87, 0x02, 0x0e, 0x3e, 0xe8, 0x01, 0x06, + 0x8b, 0x46, 0xf8, 0x89, 0xfa, 0xff, 0x46, 0xfe, 0x0e, 0xe8, 0x0d, 0x0b, + 0x90, 0x83, 0xc6, 0x04, 0xeb, 0xb3, 0x31, 0xff, 0x31, 0xf6, 0xb8, 0xd9, + 0x06, 0x8e, 0xd8, 0x3b, 0x3e, 0x54, 0x06, 0x72, 0x03, 0xe9, 0xc8, 0xf9, + 0x8a, 0x85, 0xe4, 0x0c, 0x30, 0xe4, 0x3b, 0x06, 0x50, 0x06, 0x75, 0x3d, + 0x8b, 0x84, 0xfc, 0x08, 0x89, 0x46, 0xfa, 0x8b, 0x84, 0xfe, 0x08, 0x89, + 0x46, 0xfc, 0x85, 0xc0, 0x75, 0x20, 0x83, 0x7e, 0xfa, 0x00, 0x75, 0x1a, + 0xb8, 0x3e, 0x03, 0xbb, 0xfc, 0x03, 0x50, 0x8c, 0xd8, 0x8c, 0xd9, 0x50, + 0xb8, 0x25, 0x01, 0x89, 0xca, 0x50, 0xb8, 0x87, 0x02, 0x0e, 0x3e, 0xe8, + 0x9f, 0x05, 0x8b, 0x46, 0xfa, 0x8b, 0x56, 0xfc, 0x0e, 0xe8, 0xad, 0x0a, + 0x90, 0x83, 0xc6, 0x04, 0x47, 0xeb, 0xa3, 0x55, 0x89, 0xe5, 0xe8, 0x61, + 0xee, 0x85, 0xc0, 0x74, 0x05, 0xb8, 0x01, 0x00, 0xeb, 0x2f, 0x0e, 0xe8, + 0xbb, 0x59, 0x90, 0x85, 0xc0, 0x74, 0xf2, 0x0e, 0xe8, 0xc0, 0xf0, 0x85, + 0xc0, 0x75, 0x18, 0x0e, 0xe8, 0x2d, 0xfa, 0x85, 0xc0, 0x75, 0x10, 0x0e, + 0xe8, 0xd1, 0xfe, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x80, 0x3e, 0x3c, 0x06, + 0x00, 0x75, 0xe8, 0x0e, 0xe8, 0xfd, 0xef, 0x31, 0xc0, 0x5d, 0xca, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc3, + 0x89, 0xd1, 0x0e, 0xe8, 0x72, 0x0d, 0x90, 0x40, 0x89, 0xc6, 0x0e, 0xe8, + 0x23, 0x00, 0x90, 0x89, 0xc7, 0x89, 0x56, 0xfe, 0x85, 0xd2, 0x75, 0x11, + 0x85, 0xc0, 0x75, 0x0d, 0x8b, 0x56, 0xfe, 0x89, 0xf8, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0x59, 0x5b, 0xcb, 0x56, 0x0e, 0xe8, 0x5f, 0x0d, 0x90, 0xeb, + 0xeb, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, + 0xc6, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x70, 0x00, 0x3d, 0xe6, 0xff, 0x77, + 0xf8, 0x05, 0x03, 0x00, 0x24, 0xfe, 0x89, 0x46, 0xfc, 0x3d, 0x06, 0x00, + 0x72, 0x6c, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0x8b, 0x46, 0xfc, 0x3b, 0x06, 0x62, 0x06, 0x76, 0x60, 0x8b, 0x0e, 0x60, + 0x06, 0x31, 0xff, 0x85, 0xc9, 0x74, 0x63, 0xb8, 0xd9, 0x06, 0x89, 0xfb, + 0x89, 0xca, 0x8e, 0xd8, 0x89, 0xf0, 0x89, 0x0e, 0x60, 0x06, 0x0e, 0xe8, + 0x2e, 0x0d, 0x90, 0x89, 0xc3, 0x85, 0xc0, 0x75, 0x47, 0x89, 0xf2, 0x89, + 0xc8, 0x0e, 0x3e, 0xe8, 0x5b, 0x0f, 0x85, 0xc0, 0x75, 0xd9, 0xb8, 0xd9, + 0x06, 0x8e, 0xc0, 0x8e, 0xd9, 0x26, 0xa1, 0x62, 0x06, 0x3b, 0x45, 0x0a, + 0x72, 0x61, 0x8e, 0xd9, 0x89, 0x4e, 0xfe, 0x8b, 0x4d, 0x04, 0xeb, 0xbb, + 0x31, 0xc0, 0x31, 0xc9, 0x89, 0xca, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, + 0x5b, 0xcb, 0xc7, 0x46, 0xfc, 0x06, 0x00, 0xeb, 0x8d, 0x31, 0xc0, 0x8b, + 0x0e, 0x5e, 0x06, 0xa3, 0x62, 0x06, 0xeb, 0x99, 0xeb, 0x31, 0x89, 0xf0, + 0x0e, 0xe8, 0xe4, 0x0f, 0x90, 0x89, 0xc2, 0x89, 0xc1, 0x85, 0xc0, 0x75, + 0x28, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, 0x73, 0x10, 0x85, 0xc0, 0x74, 0x03, + 0xe9, 0x68, 0xff, 0x85, 0xd2, 0x75, 0x10, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, + 0x64, 0x10, 0x89, 0xc3, 0x85, 0xc0, 0x74, 0x03, 0xb9, 0xd9, 0x06, 0x89, + 0xd8, 0xeb, 0xad, 0xeb, 0x22, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x3b, 0x3e, + 0x5e, 0x06, 0x75, 0x07, 0x89, 0x16, 0x5e, 0x06, 0xe9, 0x54, 0xff, 0x8e, + 0xda, 0x8b, 0x46, 0xfe, 0x89, 0x45, 0x02, 0x8e, 0xd8, 0x89, 0x55, 0x04, + 0xe9, 0x44, 0xff, 0x8c, 0xc2, 0x8b, 0x45, 0x0a, 0x8e, 0xda, 0xa3, 0x62, + 0x06, 0xe9, 0x6e, 0xff, 0x0e, 0xe8, 0xfa, 0x10, 0x90, 0xc3, 0x53, 0x51, + 0x89, 0xd1, 0x85, 0xd2, 0x74, 0x25, 0x81, 0xfa, 0xd9, 0x06, 0x74, 0x22, + 0x31, 0xdb, 0x0e, 0xe8, 0x24, 0x0d, 0x90, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0x3b, 0x0e, 0x60, 0x06, 0x74, 0x0d, 0x8e, 0xc1, 0x31, 0xdb, 0xa1, 0x62, + 0x06, 0x26, 0x3b, 0x47, 0x0a, 0x72, 0x0b, 0x59, 0x5b, 0xcb, 0x0e, 0xe8, + 0x3b, 0x11, 0x90, 0x59, 0x5b, 0xcb, 0x8e, 0xd9, 0x8b, 0x47, 0x0a, 0xbb, + 0xd9, 0x06, 0x8e, 0xdb, 0xa3, 0x62, 0x06, 0x59, 0x5b, 0xcb, 0x53, 0x51, + 0x52, 0x55, 0x89, 0xe5, 0x8d, 0x56, 0x14, 0x8b, 0x5e, 0x10, 0x8b, 0x4e, + 0x12, 0x16, 0x8b, 0x46, 0x0c, 0x52, 0x8b, 0x56, 0x0e, 0xe8, 0x8c, 0x13, + 0x5d, 0x5a, 0x59, 0x5b, 0xcb, 0x56, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, + 0x89, 0xc6, 0x8e, 0xda, 0x89, 0x4e, 0xfa, 0x31, 0xd2, 0x85, 0xc9, 0x75, + 0x04, 0x85, 0xdb, 0x74, 0x14, 0xb8, 0xd9, 0x06, 0x8e, 0xc0, 0x26, 0xa1, + 0xec, 0x07, 0x26, 0x3d, 0x01, 0x00, 0x75, 0x36, 0x8e, 0xc1, 0x26, 0x89, + 0x07, 0x8a, 0x04, 0x3c, 0x77, 0x75, 0x32, 0x80, 0xca, 0x02, 0xb4, 0x01, + 0x30, 0xc9, 0x46, 0x88, 0x4e, 0xfc, 0x88, 0x4e, 0xfe, 0x30, 0xed, 0x8a, + 0x04, 0x38, 0xc5, 0x74, 0x55, 0x84, 0xe4, 0x74, 0x51, 0x3c, 0x63, 0x73, + 0x3a, 0x3c, 0x62, 0x75, 0x58, 0x84, 0xc9, 0x74, 0x52, 0x88, 0xec, 0x46, + 0xeb, 0xe5, 0x8e, 0xc1, 0x26, 0x89, 0x17, 0xeb, 0xc8, 0x3c, 0x72, 0x75, + 0x05, 0x80, 0xca, 0x01, 0xeb, 0xc8, 0x3c, 0x61, 0x75, 0x05, 0x80, 0xca, + 0x82, 0xeb, 0xbf, 0x0e, 0x3e, 0xe8, 0xcf, 0x13, 0x89, 0xc3, 0x8e, 0xda, + 0xc7, 0x07, 0x09, 0x00, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5e, 0xc3, 0x77, + 0x07, 0x3a, 0x6e, 0xfe, 0x74, 0x38, 0xeb, 0xc5, 0x3c, 0x74, 0x75, 0x08, + 0x84, 0xc9, 0x74, 0x23, 0xeb, 0xbb, 0xeb, 0x45, 0x3c, 0x6e, 0x75, 0xb7, + 0x3a, 0x6e, 0xfe, 0x74, 0x2e, 0xeb, 0xae, 0xeb, 0x16, 0x3c, 0x2b, 0x75, + 0xaa, 0x3a, 0x6e, 0xfc, 0x75, 0xa3, 0xc6, 0x46, 0xfc, 0x01, 0x80, 0xca, + 0x03, 0xeb, 0x9c, 0xb1, 0x01, 0xeb, 0x98, 0xb1, 0x01, 0x80, 0xca, 0x40, + 0xeb, 0x91, 0x8e, 0x46, 0xfa, 0xc6, 0x46, 0xfe, 0x01, 0x26, 0x80, 0x0f, + 0x01, 0xeb, 0x84, 0x8e, 0x46, 0xfa, 0xc6, 0x46, 0xfe, 0x01, 0x26, 0x80, + 0x27, 0xfe, 0xe9, 0x76, 0xff, 0x84, 0xc9, 0x75, 0x10, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0x81, 0x3e, 0xee, 0x07, 0x00, 0x02, 0x75, 0x03, 0x80, 0xca, + 0x40, 0x89, 0xd0, 0xeb, 0x89, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x02, 0x8b, 0x76, 0x0c, 0x89, 0xc7, 0x89, 0x56, 0xfe, 0x88, 0xd8, 0x30, + 0xe4, 0x0e, 0x3e, 0xe8, 0x3c, 0x13, 0x3c, 0x72, 0x74, 0x03, 0xe9, 0xa2, + 0x00, 0x31, 0xc0, 0xf6, 0xc1, 0x02, 0x74, 0x03, 0xb8, 0x02, 0x00, 0xf6, + 0xc1, 0x40, 0x75, 0x03, 0xe9, 0x7e, 0x00, 0x80, 0xcc, 0x02, 0x31, 0xd2, + 0x52, 0xff, 0x76, 0x0a, 0x50, 0xff, 0x76, 0xfe, 0x57, 0x0e, 0x3e, 0xe8, + 0x3a, 0x15, 0x8e, 0x5e, 0x0e, 0x83, 0xc4, 0x0a, 0x89, 0x44, 0x0c, 0x3d, + 0xff, 0xff, 0x74, 0x62, 0xc7, 0x44, 0x04, 0x00, 0x00, 0xc7, 0x44, 0x0e, + 0x00, 0x00, 0x09, 0x4c, 0x0a, 0xc5, 0x5c, 0x06, 0xc7, 0x47, 0x0c, 0x00, + 0x00, 0x8e, 0x5e, 0x0e, 0xc5, 0x5c, 0x06, 0x8b, 0x46, 0x08, 0x89, 0x47, + 0x0e, 0x8e, 0x5e, 0x0e, 0xc5, 0x5c, 0x06, 0xc7, 0x47, 0x08, 0x00, 0x00, + 0xc7, 0x47, 0x0a, 0x00, 0x00, 0xf6, 0xc1, 0x80, 0x74, 0x12, 0xb8, 0x02, + 0x00, 0x8b, 0x56, 0x0e, 0x31, 0xdb, 0x31, 0xc9, 0x50, 0x89, 0xf0, 0x0e, + 0x3e, 0xe8, 0x6e, 0x15, 0x8b, 0x56, 0x0e, 0x89, 0xf0, 0xe8, 0xcc, 0x16, + 0x8b, 0x56, 0x0e, 0x89, 0xf0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x08, + 0x00, 0x80, 0xcc, 0x01, 0xeb, 0x80, 0x89, 0xf0, 0x8c, 0xda, 0xe8, 0xde, + 0x16, 0x31, 0xc0, 0x31, 0xd2, 0xeb, 0xe6, 0xf6, 0xc1, 0x01, 0x74, 0x18, + 0xb8, 0x22, 0x00, 0xf6, 0xc1, 0x80, 0x74, 0x15, 0x0c, 0x10, 0xf6, 0xc1, + 0x40, 0x74, 0x12, 0x80, 0xcc, 0x02, 0xba, 0x80, 0x01, 0xe9, 0x58, 0xff, + 0xb8, 0x21, 0x00, 0xeb, 0xe6, 0x0c, 0x40, 0xeb, 0xe9, 0x80, 0xcc, 0x01, + 0xeb, 0xec, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x50, 0x89, + 0xd7, 0x89, 0xde, 0x89, 0x4e, 0xfe, 0x8d, 0x5e, 0xfa, 0x8b, 0x56, 0xfe, + 0x8c, 0xd1, 0x89, 0xf0, 0xe8, 0xfa, 0xfd, 0x89, 0xc1, 0x85, 0xc0, 0x75, + 0x0a, 0x31, 0xd2, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x02, 0x00, 0xe8, + 0x2e, 0x17, 0x89, 0xc3, 0x89, 0x56, 0xfc, 0x85, 0xd2, 0x75, 0x04, 0x85, + 0xc0, 0x74, 0x1d, 0x52, 0x8e, 0x5e, 0xfe, 0x50, 0x89, 0xfa, 0x8a, 0x04, + 0xff, 0x76, 0x0a, 0x98, 0xff, 0x76, 0xfa, 0x89, 0xc3, 0x8b, 0x46, 0xf8, + 0xe8, 0xbe, 0xfe, 0x89, 0xc3, 0x89, 0x56, 0xfc, 0x8b, 0x56, 0xfc, 0x89, + 0xd8, 0xeb, 0xc4, 0x56, 0x31, 0xf6, 0x56, 0x0e, 0xe8, 0x97, 0xff, 0x5e, + 0xcb, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, + 0xc1, 0x89, 0xd7, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x1e, 0x4c, 0x0d, + 0x8b, 0x16, 0x4e, 0x0d, 0x85, 0xd2, 0x75, 0x35, 0x85, 0xdb, 0x75, 0x31, + 0xb8, 0xd9, 0x06, 0xbe, 0x50, 0x0d, 0x8e, 0xd8, 0x8b, 0x44, 0x02, 0x8b, + 0x1c, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xdb, 0x74, 0x48, + 0x8e, 0xc0, 0x26, 0x8b, 0x47, 0x06, 0x26, 0x8b, 0x57, 0x04, 0x39, 0xf8, + 0x75, 0x04, 0x39, 0xca, 0x74, 0x38, 0x8e, 0x5e, 0xfe, 0x89, 0xde, 0xeb, + 0xd7, 0x8e, 0xda, 0x8b, 0x47, 0x06, 0x8b, 0x77, 0x04, 0x39, 0xf8, 0x75, + 0x04, 0x39, 0xce, 0x74, 0x09, 0x8b, 0x37, 0x8b, 0x57, 0x02, 0x89, 0xf3, + 0xeb, 0xae, 0xbb, 0x01, 0x00, 0x89, 0xc8, 0x89, 0xfa, 0xe8, 0x45, 0x03, + 0x89, 0xc8, 0x89, 0xfa, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, + 0xeb, 0x34, 0x26, 0x8b, 0x47, 0x02, 0x26, 0x8b, 0x17, 0x89, 0x44, 0x02, + 0xb8, 0xd9, 0x06, 0x89, 0x14, 0x8e, 0xd8, 0x8b, 0x16, 0x4c, 0x0d, 0xa1, + 0x4e, 0x0d, 0x8e, 0x5e, 0xfe, 0x89, 0x17, 0x89, 0x47, 0x02, 0xb8, 0xd9, + 0x06, 0x89, 0xfa, 0x8e, 0xd8, 0x8c, 0xc0, 0x89, 0x1e, 0x4c, 0x0d, 0xa3, + 0x4e, 0x0d, 0x89, 0xc8, 0xeb, 0xc2, 0x0e, 0xe8, 0x39, 0x11, 0x90, 0x89, + 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x04, 0x00, 0x31, 0xc0, 0x31, 0xd2, 0xeb, + 0xaf, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc7, 0x89, + 0x56, 0xfc, 0x89, 0xde, 0x89, 0x4e, 0xfe, 0x8d, 0x5e, 0xfa, 0x8b, 0x56, + 0xfe, 0x8c, 0xd1, 0x89, 0xf0, 0xe8, 0xc1, 0xfc, 0x89, 0xc1, 0x85, 0xc0, + 0x75, 0x0a, 0x31, 0xd2, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x04, 0x00, + 0x8b, 0x46, 0x0a, 0x8b, 0x56, 0x0c, 0xe8, 0xfc, 0xfe, 0x89, 0x46, 0x0a, + 0x89, 0x56, 0x0c, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x1e, 0x52, + 0x50, 0x31, 0xc0, 0x8e, 0x5e, 0xfe, 0x50, 0x8a, 0x04, 0x8b, 0x56, 0xfc, + 0x98, 0xff, 0x76, 0xfa, 0x89, 0xc3, 0x89, 0xf8, 0xe8, 0x7e, 0xfd, 0x89, + 0x46, 0x0a, 0x89, 0x56, 0x0c, 0x8b, 0x46, 0x0a, 0x8b, 0x56, 0x0c, 0xeb, + 0xbb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x81, 0xec, 0x06, 0x01, 0xbe, 0xd9, + 0x06, 0x8e, 0xde, 0xc7, 0x46, 0xfe, 0x01, 0x00, 0x83, 0x3e, 0xcc, 0x07, + 0x00, 0x74, 0x0b, 0xc7, 0x46, 0xfe, 0x02, 0x00, 0xc7, 0x06, 0xcc, 0x07, + 0x00, 0x00, 0xff, 0x76, 0x0e, 0xff, 0x76, 0x0c, 0xff, 0x76, 0x0a, 0x51, + 0x53, 0x52, 0x50, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x0a, 0x04, 0x50, 0xb8, + 0x00, 0x01, 0x50, 0x16, 0x8d, 0x96, 0xfa, 0xfe, 0x52, 0x0e, 0x3e, 0xe8, + 0x20, 0x17, 0xb8, 0xd9, 0x06, 0x83, 0xc4, 0x18, 0x8e, 0xd8, 0x80, 0x3e, + 0xf0, 0x07, 0x00, 0x75, 0x03, 0xe9, 0xe0, 0x00, 0x8d, 0x86, 0xfa, 0xfe, + 0x8c, 0xd2, 0x0e, 0xe8, 0xde, 0x07, 0x90, 0x05, 0x13, 0x00, 0x24, 0xfe, + 0x89, 0xc2, 0x0e, 0xe8, 0x3d, 0x17, 0x90, 0x39, 0xc2, 0x72, 0x03, 0xe9, + 0xa1, 0x00, 0x8d, 0x86, 0xfa, 0xfe, 0x8c, 0xd2, 0x0e, 0xe8, 0xc0, 0x07, + 0x90, 0x05, 0x13, 0x00, 0x24, 0xfe, 0xbe, 0xd9, 0x06, 0x2b, 0xe0, 0x89, + 0xe7, 0xbb, 0x31, 0x04, 0xb9, 0xd9, 0x06, 0x89, 0xf8, 0x89, 0xf2, 0x0e, + 0x3e, 0xe8, 0x23, 0x17, 0xbb, 0x42, 0x04, 0xb9, 0xd9, 0x06, 0x89, 0xf8, + 0x89, 0xf2, 0x89, 0x7e, 0xfa, 0x0e, 0x3e, 0xe8, 0x59, 0x17, 0x8d, 0x9e, + 0xfa, 0xfe, 0x8c, 0xd1, 0x89, 0xf8, 0x89, 0xf2, 0x89, 0x76, 0xfc, 0x0e, + 0x3e, 0xe8, 0x47, 0x17, 0x0e, 0xe8, 0xe7, 0x16, 0x90, 0x3d, 0x12, 0x00, + 0x76, 0x54, 0xb8, 0x12, 0x00, 0xbe, 0xd9, 0x06, 0x2b, 0xe0, 0x89, 0xe7, + 0xff, 0x76, 0xfe, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x45, 0x04, 0x50, 0x56, + 0x57, 0x0e, 0x3e, 0xe8, 0xd9, 0x03, 0xb8, 0xd9, 0x06, 0x83, 0xc4, 0x0a, + 0x8e, 0xd8, 0x80, 0x3e, 0xf0, 0x07, 0x00, 0x74, 0x0e, 0x56, 0x57, 0xcc, + 0xeb, 0x06, 0x57, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x83, 0xc4, 0x04, 0xb8, + 0xd9, 0x06, 0x8e, 0xd8, 0x80, 0x3e, 0xf0, 0x07, 0x00, 0x75, 0x15, 0x89, + 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x06, 0x00, 0x31, 0xff, 0x31, 0xf6, 0xe9, + 0x6f, 0xff, 0x31, 0xff, 0x31, 0xf6, 0xeb, 0xb0, 0xff, 0x76, 0xfc, 0xff, + 0x76, 0xfa, 0xcc, 0xeb, 0x06, 0x57, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x83, + 0xc4, 0x04, 0xeb, 0xd7, 0x8d, 0x9e, 0xfa, 0xfe, 0xb8, 0x31, 0x04, 0x8c, + 0xd1, 0x8c, 0xda, 0x0e, 0x3e, 0xe8, 0xea, 0x16, 0xe9, 0x1a, 0x17, 0x89, + 0xc0, 0x52, 0x56, 0x55, 0x89, 0xe5, 0x89, 0xc6, 0x89, 0xca, 0x8b, 0x4e, + 0x0c, 0x89, 0xd8, 0x8b, 0x5e, 0x0a, 0x85, 0xf6, 0x74, 0x06, 0x5d, 0x5e, + 0x5a, 0xca, 0x0a, 0x00, 0xff, 0x76, 0x12, 0xbe, 0xd9, 0x06, 0xff, 0x76, + 0x10, 0x8e, 0xde, 0xff, 0x76, 0x0e, 0xc7, 0x06, 0xcc, 0x07, 0x01, 0x00, + 0x0e, 0xe8, 0x7d, 0xfe, 0xeb, 0xe0, 0x53, 0x51, 0x56, 0x55, 0x89, 0xe5, + 0x83, 0xec, 0x02, 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xd9, 0x06, 0x8a, 0x17, + 0x30, 0xf6, 0x8e, 0xc0, 0x89, 0xd6, 0x26, 0xf6, 0x84, 0x15, 0x05, 0x02, + 0x74, 0x03, 0x43, 0xeb, 0xed, 0x88, 0xd0, 0x30, 0xc9, 0x80, 0xfa, 0x2d, + 0x75, 0x30, 0xb1, 0x01, 0x43, 0x31, 0xc0, 0x8a, 0x17, 0xc6, 0x46, 0xff, + 0x00, 0x88, 0x56, 0xfe, 0xba, 0xd9, 0x06, 0x8b, 0x76, 0xfe, 0x8e, 0xc2, + 0x26, 0xf6, 0x84, 0x15, 0x05, 0x20, 0x74, 0x19, 0xba, 0x0a, 0x00, 0xf7, + 0xea, 0x89, 0xc2, 0x8a, 0x07, 0x98, 0x01, 0xd0, 0x43, 0x2d, 0x30, 0x00, + 0xeb, 0xd5, 0x80, 0xfa, 0x2b, 0x74, 0xcd, 0xeb, 0xcc, 0x84, 0xc9, 0x74, + 0x02, 0xf7, 0xd8, 0x89, 0xec, 0x5d, 0x5e, 0x59, 0x5b, 0xcb, 0x51, 0x56, + 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x8b, 0x76, 0x0c, 0x89, 0xc7, + 0x89, 0x56, 0xfa, 0x89, 0xd9, 0x8e, 0x5e, 0x0e, 0x8b, 0x44, 0x0a, 0x89, + 0xfb, 0x30, 0xe4, 0x89, 0x56, 0xfc, 0x24, 0x30, 0x80, 0x64, 0x0a, 0xcf, + 0x89, 0x46, 0xf8, 0x49, 0x85, 0xc9, 0x7f, 0x37, 0x83, 0x7e, 0xfe, 0xff, + 0x75, 0x53, 0x8b, 0x46, 0xfc, 0x3b, 0x46, 0xfa, 0x75, 0x04, 0x39, 0xfb, + 0x74, 0x09, 0x8e, 0x5e, 0x0e, 0xf6, 0x44, 0x0a, 0x20, 0x74, 0x3e, 0x31, + 0xff, 0x89, 0x7e, 0xfa, 0x8b, 0x46, 0xf8, 0x8e, 0x5e, 0x0e, 0x8b, 0x56, + 0xfa, 0x09, 0x44, 0x0a, 0x89, 0xf8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, + 0xca, 0x04, 0x00, 0x8b, 0x56, 0x0e, 0x89, 0xf0, 0x0e, 0xe8, 0x15, 0x17, + 0x90, 0x89, 0x46, 0xfe, 0x3d, 0xff, 0xff, 0x74, 0xb7, 0x8e, 0x5e, 0xfc, + 0x8a, 0x56, 0xfe, 0x88, 0x17, 0x43, 0x3d, 0x0a, 0x00, 0x74, 0xa9, 0xeb, + 0xa2, 0x8e, 0x5e, 0xfc, 0xc6, 0x07, 0x00, 0xeb, 0xbf, 0x51, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0x89, + 0x5e, 0xfc, 0x8e, 0xda, 0xf6, 0x44, 0x0a, 0x03, 0x75, 0x03, 0xe9, 0x8d, + 0x00, 0x31, 0xff, 0xf6, 0x44, 0x0b, 0x10, 0x74, 0x03, 0xe9, 0x87, 0x00, + 0x8e, 0x5e, 0xfe, 0x8b, 0x44, 0x04, 0x85, 0xc0, 0x74, 0x16, 0xf7, 0xd8, + 0x99, 0x89, 0xd1, 0x8b, 0x54, 0x0c, 0x89, 0xc3, 0x89, 0x56, 0xfa, 0xba, + 0x01, 0x00, 0x8b, 0x46, 0xfa, 0xe8, 0x54, 0x17, 0x83, 0x7e, 0xfc, 0x00, + 0x74, 0x0b, 0x8e, 0x5e, 0xfe, 0x8b, 0x44, 0x0c, 0xe8, 0x83, 0x17, 0x09, + 0xc7, 0x8e, 0x5e, 0xfe, 0xf6, 0x44, 0x0a, 0x08, 0x74, 0x1e, 0xc5, 0x5c, + 0x06, 0x8b, 0x47, 0x08, 0x8b, 0x57, 0x0a, 0x0e, 0x3e, 0xe8, 0x1a, 0xf9, + 0x8e, 0x5e, 0xfe, 0xc5, 0x5c, 0x06, 0xc7, 0x47, 0x08, 0x00, 0x00, 0xc7, + 0x47, 0x0a, 0x00, 0x00, 0x8e, 0x5e, 0xfe, 0xf6, 0x44, 0x0b, 0x08, 0x74, + 0x0d, 0xbb, 0xd9, 0x06, 0x89, 0xf0, 0x8c, 0xda, 0x8e, 0xdb, 0xff, 0x16, + 0x54, 0x0d, 0x8e, 0x5e, 0xfe, 0xc6, 0x44, 0x0a, 0x00, 0x80, 0x64, 0x0b, + 0x40, 0x89, 0xf8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, 0xbf, 0xff, + 0xff, 0xeb, 0xf2, 0xe8, 0x51, 0x17, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x6f, + 0xff, 0xbf, 0xff, 0xff, 0xe9, 0x69, 0xff, 0x51, 0x56, 0x89, 0xc1, 0x89, + 0xd6, 0xe8, 0x39, 0xff, 0x89, 0xc3, 0x89, 0xf2, 0x89, 0xc8, 0xe8, 0xb6, + 0x11, 0x89, 0xd8, 0x5e, 0x59, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc1, + 0x89, 0xd6, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x1e, 0x4c, 0x0d, 0x8b, + 0x3e, 0x4e, 0x0d, 0x85, 0xff, 0x75, 0x04, 0x85, 0xdb, 0x74, 0x28, 0x8e, + 0xdf, 0x8b, 0x47, 0x06, 0x8b, 0x57, 0x04, 0x39, 0xf0, 0x75, 0x04, 0x39, + 0xca, 0x74, 0x09, 0x8b, 0x17, 0x8b, 0x7f, 0x02, 0x89, 0xd3, 0xeb, 0xdf, + 0xbb, 0x01, 0x00, 0x89, 0xc8, 0x89, 0xf2, 0xe8, 0xa9, 0xff, 0x5f, 0x5e, + 0x59, 0x5b, 0xcb, 0xb8, 0xff, 0xff, 0xeb, 0xf6, 0x93, 0x50, 0x92, 0x0b, + 0xc0, 0x74, 0x02, 0xf7, 0xe2, 0x91, 0x0b, 0xc0, 0x74, 0x04, 0xf7, 0xe3, + 0x03, 0xc8, 0x58, 0xf7, 0xe3, 0x03, 0xd1, 0xcb, 0x53, 0x51, 0x52, 0x55, + 0x89, 0xe5, 0x8d, 0x56, 0x10, 0x8b, 0x5e, 0x0c, 0x8b, 0x4e, 0x0e, 0x16, + 0xb8, 0x76, 0x06, 0x52, 0xba, 0xd9, 0x06, 0xe8, 0x26, 0x0c, 0x5d, 0x5a, + 0x59, 0x5b, 0xcb, 0x85, 0xd2, 0x75, 0x0c, 0x85, 0xc0, 0x75, 0x08, 0x0e, + 0x3e, 0xe8, 0x32, 0x18, 0x31, 0xc0, 0xcb, 0xe8, 0x99, 0x16, 0xcb, 0x00, + 0x0b, 0xd2, 0x78, 0x18, 0x0b, 0xc9, 0x79, 0x47, 0xf7, 0xd9, 0xf7, 0xdb, + 0x83, 0xd9, 0x00, 0x0e, 0x3e, 0xe8, 0x3b, 0x00, 0xf7, 0xda, 0xf7, 0xd8, + 0x83, 0xda, 0x00, 0xcb, 0xf7, 0xda, 0xf7, 0xd8, 0x83, 0xda, 0x00, 0x0b, + 0xc9, 0x79, 0x14, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0x0e, 0xe8, + 0x1d, 0x00, 0x90, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xcb, 0x0e, + 0x3e, 0xe8, 0x0f, 0x00, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xf7, + 0xda, 0xf7, 0xd8, 0x83, 0xda, 0x00, 0xcb, 0x0b, 0xc9, 0x75, 0x1a, 0x4b, + 0x74, 0x16, 0x43, 0x3b, 0xda, 0x77, 0x09, 0x8b, 0xc8, 0x8b, 0xc2, 0x2b, + 0xd2, 0xf7, 0xf3, 0x91, 0xf7, 0xf3, 0x8b, 0xda, 0x8b, 0xd1, 0x2b, 0xc9, + 0xcb, 0x3b, 0xca, 0x72, 0x1a, 0x75, 0x10, 0x3b, 0xd8, 0x77, 0x0c, 0x2b, + 0xc3, 0x8b, 0xd8, 0x2b, 0xc9, 0x2b, 0xd2, 0xb8, 0x01, 0x00, 0xcb, 0x2b, + 0xc9, 0x2b, 0xdb, 0x93, 0x87, 0xca, 0xcb, 0x55, 0x56, 0x2b, 0xf6, 0x8b, + 0xee, 0x03, 0xdb, 0x13, 0xc9, 0x72, 0x11, 0x45, 0x3b, 0xca, 0x72, 0xf5, + 0x77, 0x04, 0x3b, 0xd8, 0x76, 0xef, 0xf8, 0x13, 0xf6, 0x4d, 0x78, 0x20, + 0xd1, 0xd9, 0xd1, 0xdb, 0x2b, 0xc3, 0x19, 0xca, 0xf5, 0x72, 0xf0, 0x03, + 0xf6, 0x4d, 0x78, 0x0c, 0xd1, 0xe9, 0xd1, 0xdb, 0x03, 0xc3, 0x13, 0xd1, + 0x73, 0xf1, 0xeb, 0xdf, 0x03, 0xc3, 0x13, 0xd1, 0x8b, 0xd8, 0x8b, 0xca, + 0x8b, 0xc6, 0x33, 0xd2, 0x5e, 0x5d, 0xcb, 0x53, 0x51, 0x52, 0x55, 0x89, + 0xe5, 0x8d, 0x56, 0x14, 0x8b, 0x5e, 0x10, 0x8b, 0x4e, 0x12, 0x16, 0x8b, + 0x46, 0x0c, 0x52, 0x8b, 0x56, 0x0e, 0x0e, 0xe8, 0x5c, 0x17, 0x90, 0x5d, + 0x5a, 0x59, 0x5b, 0xcb, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x83, 0x3e, 0x02, + 0x08, 0x00, 0x74, 0x04, 0xb8, 0x01, 0x00, 0xcb, 0xb4, 0x0b, 0xcd, 0x21, + 0x84, 0xc0, 0x75, 0xf4, 0x30, 0xe4, 0xcb, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0xa1, 0x02, 0x08, 0xc7, 0x06, 0x02, 0x08, 0x00, 0x00, 0x85, 0xc0, 0x74, + 0x01, 0xcb, 0xb4, 0x08, 0xcd, 0x21, 0x30, 0xe4, 0xcb, 0x53, 0x51, 0x56, + 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc1, 0x89, 0xd3, 0xb8, + 0x56, 0x04, 0xba, 0xd9, 0x06, 0x0e, 0x3e, 0xe8, 0x30, 0x17, 0x89, 0xc7, + 0x89, 0xd6, 0x85, 0xdb, 0x75, 0x04, 0x85, 0xc9, 0x74, 0x4c, 0xc6, 0x46, + 0xfe, 0x00, 0x85, 0xd2, 0x75, 0x0a, 0x85, 0xc0, 0x75, 0x06, 0xbf, 0x66, + 0x04, 0xbe, 0xd9, 0x06, 0x31, 0xc0, 0x50, 0x8c, 0xd2, 0x50, 0x8d, 0x46, + 0xfa, 0x53, 0x8a, 0x5e, 0xfe, 0x51, 0x30, 0xff, 0x0e, 0xe8, 0xcd, 0x17, + 0x90, 0x52, 0x50, 0x80, 0x7e, 0xfe, 0x00, 0x74, 0x22, 0xb8, 0x72, 0x04, + 0xba, 0xd9, 0x06, 0x52, 0x50, 0x56, 0x57, 0x31, 0xc0, 0x50, 0x0e, 0xe8, + 0xd6, 0x17, 0x90, 0x83, 0xc4, 0x16, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, + 0x5b, 0xcb, 0xb8, 0x01, 0x00, 0xeb, 0xf3, 0xb8, 0x76, 0x04, 0xeb, 0xdc, + 0xeb, 0x35, 0x2a, 0x2a, 0x2a, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x20, 0x61, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, + 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x00, 0x4e, 0x6f, 0x74, 0x20, 0x65, + 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x00, 0x63, 0x6f, 0x6e, 0x00, 0x0d, 0x0a, 0xfb, 0xb9, 0xd9, 0x06, 0x8e, + 0xc1, 0xbb, 0x88, 0x0e, 0x83, 0xc3, 0x0f, 0x80, 0xe3, 0xf0, 0x26, 0x89, + 0x1e, 0xfe, 0x07, 0x26, 0x8c, 0x1e, 0xf8, 0x07, 0x03, 0xdc, 0x83, 0xc3, + 0x0f, 0x80, 0xe3, 0xf0, 0x8e, 0xd1, 0x8b, 0xe3, 0x26, 0x89, 0x1e, 0x00, + 0x08, 0x8b, 0xd3, 0xd1, 0xea, 0xd1, 0xea, 0xd1, 0xea, 0xd1, 0xea, 0x26, + 0x80, 0x3e, 0xfc, 0x07, 0x00, 0x75, 0x3d, 0x8b, 0x0e, 0x02, 0x00, 0x8c, + 0xc0, 0x2b, 0xc8, 0x3b, 0xd1, 0x72, 0x0b, 0xbb, 0x01, 0x00, 0xb8, 0x43, + 0x1e, 0x8c, 0xca, 0xe9, 0x57, 0x17, 0x8c, 0xc0, 0x8b, 0xda, 0xd1, 0xe3, + 0xd1, 0xe3, 0xd1, 0xe3, 0xd1, 0xe3, 0x75, 0x03, 0xbb, 0xfe, 0xff, 0x26, + 0x89, 0x1e, 0xf6, 0x07, 0x8b, 0xda, 0x03, 0xd8, 0x26, 0xa1, 0xf8, 0x07, + 0x8e, 0xc0, 0x2b, 0xd8, 0xb4, 0x4a, 0xcd, 0x21, 0x8c, 0xdf, 0x8e, 0xc7, + 0xbf, 0x81, 0x00, 0x8a, 0x4d, 0xff, 0x32, 0xed, 0xfc, 0xb0, 0x20, 0xf3, + 0xae, 0x8d, 0x75, 0xff, 0xba, 0xd9, 0x06, 0x8e, 0xc2, 0x26, 0x8b, 0x3e, + 0xfe, 0x07, 0x26, 0x89, 0x3e, 0x17, 0x08, 0x26, 0x8c, 0x06, 0x19, 0x08, + 0x74, 0x03, 0x41, 0xf3, 0xa4, 0x2a, 0xc0, 0xaa, 0xaa, 0x4f, 0xb4, 0x30, + 0xcd, 0x21, 0x26, 0xa2, 0xfa, 0x07, 0x26, 0x88, 0x26, 0xfb, 0x07, 0x8b, + 0xcf, 0x3c, 0x03, 0x72, 0x58, 0x8e, 0x1e, 0x2c, 0x00, 0x2b, 0xf6, 0xbd, + 0x00, 0x01, 0x8b, 0x04, 0x0d, 0x20, 0x20, 0x3d, 0x6e, 0x6f, 0x75, 0x12, + 0x81, 0x7c, 0x02, 0x38, 0x37, 0x75, 0x27, 0x80, 0x7c, 0x04, 0x3d, 0x75, + 0x21, 0x83, 0xcd, 0x01, 0xeb, 0x1c, 0x3d, 0x6c, 0x66, 0x75, 0x1a, 0x8b, + 0x44, 0x02, 0x0c, 0x20, 0x3d, 0x6e, 0x3d, 0x75, 0x10, 0x8a, 0x44, 0x04, + 0x0c, 0x20, 0x3c, 0x6e, 0x75, 0x07, 0x81, 0xe5, 0xff, 0xfe, 0x83, 0xc6, + 0x05, 0x80, 0x3c, 0x00, 0xac, 0x75, 0xfa, 0x80, 0x3c, 0x00, 0x75, 0xba, + 0xac, 0x46, 0x46, 0x80, 0x3c, 0x00, 0xa4, 0x75, 0xfa, 0x8e, 0xda, 0x8b, + 0xf1, 0x89, 0x36, 0x1b, 0x08, 0x8c, 0x06, 0x1d, 0x08, 0x8b, 0xdc, 0x8b, + 0xc5, 0xa2, 0x06, 0x08, 0x20, 0x26, 0x20, 0x08, 0x89, 0x3e, 0xfe, 0x07, + 0xb9, 0x88, 0x0e, 0xbf, 0xfc, 0x08, 0x2b, 0xcf, 0x32, 0xc0, 0xf3, 0xaa, + 0x83, 0x3e, 0x07, 0x08, 0x00, 0x75, 0x18, 0xb8, 0xd2, 0x20, 0xa3, 0x07, + 0x08, 0x8c, 0x0e, 0x09, 0x08, 0xa3, 0x0b, 0x08, 0x8c, 0x0e, 0x0d, 0x08, + 0xa3, 0x0f, 0x08, 0x8c, 0x0e, 0x11, 0x08, 0x33, 0xed, 0x55, 0x8b, 0xec, + 0xb8, 0xd1, 0x20, 0xa3, 0x13, 0x08, 0x8c, 0x0e, 0x15, 0x08, 0xb8, 0xff, + 0x00, 0xe8, 0xa0, 0x16, 0xe9, 0x4f, 0x16, 0x50, 0xba, 0xd9, 0x06, 0x8e, + 0xda, 0xfc, 0x8d, 0x3e, 0x00, 0x00, 0x8e, 0xc2, 0xb9, 0x10, 0x00, 0xb8, + 0x01, 0x01, 0xf3, 0xaf, 0x74, 0x39, 0x5b, 0xb8, 0x26, 0x1e, 0x8c, 0xca, + 0xbc, 0x08, 0x0f, 0x53, 0x50, 0x52, 0x8c, 0xcf, 0x8e, 0xdf, 0xba, 0x55, + 0x1e, 0xb8, 0x01, 0x3d, 0xcd, 0x21, 0x8b, 0xd8, 0x1f, 0x5a, 0x8b, 0xf2, + 0xfc, 0xac, 0x84, 0xc0, 0x75, 0xfb, 0x8b, 0xce, 0x2b, 0xca, 0x49, 0xb4, + 0x40, 0xcd, 0x21, 0x8e, 0xdf, 0xba, 0x59, 0x1e, 0xb9, 0x02, 0x00, 0xb4, + 0x40, 0xcd, 0x21, 0xba, 0xd9, 0x06, 0x8e, 0xda, 0x80, 0x3e, 0xe0, 0x07, + 0x00, 0x74, 0x0b, 0xa0, 0xe1, 0x07, 0xb4, 0x25, 0xc5, 0x16, 0xe2, 0x07, + 0xcd, 0x21, 0x33, 0xc0, 0xba, 0x0f, 0x00, 0xe8, 0x85, 0x16, 0x58, 0xb4, + 0x4c, 0xcd, 0x21, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x57, 0x61, 0x74, 0x63, + 0x6f, 0x6d, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x31, 0x36, 0x20, 0x52, + 0x75, 0x6e, 0x2d, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2e, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, + 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x57, + 0x61, 0x74, 0x63, 0x6f, 0x6d, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x20, 0x32, 0x30, 0x30, 0x32, 0x2d, + 0x32, 0x30, 0x32, 0x35, 0x2e, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x20, 0x28, 0x43, 0x29, 0x20, 0x53, 0x79, 0x62, 0x61, 0x73, 0x65, 0x2c, + 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x31, 0x39, 0x38, 0x38, 0x2d, 0x32, + 0x30, 0x30, 0x32, 0x2e, 0x00, 0x50, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x58, + 0xc3, 0xcb, 0xcb, 0x00, 0x51, 0x57, 0x89, 0xc7, 0x8e, 0xc2, 0x83, 0xc9, + 0xff, 0x33, 0xc0, 0xf2, 0xae, 0xf7, 0xd1, 0x49, 0x89, 0xc8, 0x5f, 0x59, + 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xcf, 0x8b, 0x4e, 0x0a, 0x89, + 0xde, 0x8e, 0xdf, 0x8e, 0xc2, 0x89, 0xc7, 0x57, 0xd1, 0xe9, 0xf3, 0xa5, + 0x13, 0xc9, 0xf3, 0xa4, 0x5f, 0x5d, 0x5f, 0x5e, 0xca, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x02, 0x89, 0xde, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x03, + 0xe9, 0x6c, 0x00, 0x89, 0xc7, 0x83, 0xc7, 0x03, 0x83, 0xe7, 0xfe, 0x39, + 0xc7, 0x72, 0x60, 0x8e, 0xda, 0x8b, 0x44, 0x0a, 0x83, 0xff, 0x06, 0x73, + 0x03, 0xbf, 0x06, 0x00, 0x39, 0xc7, 0x77, 0x4f, 0x8e, 0xda, 0x8b, 0x4c, + 0x08, 0x8b, 0x5c, 0x06, 0x39, 0xcf, 0x76, 0x4f, 0x8e, 0xda, 0x8b, 0x07, + 0x39, 0xc7, 0x77, 0x4e, 0x89, 0x4c, 0x08, 0x29, 0xf8, 0xff, 0x44, 0x0c, + 0x3d, 0x06, 0x00, 0x72, 0x5d, 0x89, 0xd9, 0x01, 0xf9, 0x89, 0x4c, 0x06, + 0x89, 0xce, 0x89, 0x04, 0x89, 0x3f, 0x89, 0xcf, 0x8b, 0x77, 0x02, 0x89, + 0x75, 0x02, 0x8b, 0x47, 0x04, 0x89, 0x45, 0x04, 0x89, 0x4c, 0x04, 0x89, + 0xc6, 0x89, 0x4c, 0x02, 0x8e, 0xda, 0x80, 0x0f, 0x01, 0x83, 0xc3, 0x02, + 0x89, 0x5e, 0xfe, 0x8b, 0x56, 0xfe, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0x59, 0xcb, 0x8b, 0x5c, 0x14, 0x31, 0xc9, 0xeb, 0xaa, 0x39, 0xc1, + 0x73, 0x02, 0x89, 0xc1, 0x89, 0xf0, 0x8e, 0xda, 0x05, 0x10, 0x00, 0x8b, + 0x5f, 0x04, 0x39, 0xc3, 0x75, 0x96, 0x8b, 0x56, 0xfe, 0x89, 0x4c, 0x0a, + 0xeb, 0xd4, 0xff, 0x4c, 0x0e, 0x8b, 0x7f, 0x02, 0x89, 0x7c, 0x06, 0x8b, + 0x77, 0x04, 0x89, 0x75, 0x04, 0x89, 0x7c, 0x02, 0xeb, 0xb2, 0x51, 0x56, + 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xd1, 0x89, 0x5e, 0xfe, + 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x84, 0x00, 0x89, 0xc6, 0x8e, 0xda, 0x83, + 0xee, 0x02, 0xf6, 0x04, 0x01, 0x74, 0xf1, 0x8b, 0x04, 0x89, 0xf3, 0x24, + 0xfe, 0x01, 0xc3, 0xf6, 0x07, 0x01, 0x74, 0x03, 0xe9, 0x7c, 0x00, 0x03, + 0x07, 0x8b, 0x7e, 0xfe, 0x89, 0x04, 0x3b, 0x5d, 0x06, 0x75, 0x03, 0x89, + 0x75, 0x06, 0x8e, 0xd9, 0x8b, 0x7f, 0x02, 0x8b, 0x5f, 0x04, 0x89, 0x5d, + 0x04, 0x89, 0x7f, 0x02, 0x8b, 0x7e, 0xfe, 0xff, 0x4d, 0x0e, 0x8e, 0xd9, + 0x8b, 0x7f, 0x02, 0x89, 0xfa, 0x8b, 0x04, 0x03, 0x15, 0x89, 0x7e, 0xfc, + 0x39, 0xd6, 0x75, 0x3a, 0x89, 0xfb, 0x03, 0x07, 0x89, 0x07, 0x8b, 0x5e, + 0xfe, 0x3b, 0x57, 0x06, 0x75, 0x03, 0x89, 0x7f, 0x06, 0x8b, 0x76, 0xfc, + 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0xff, 0x4f, 0x0c, 0x3b, 0x77, 0x06, 0x73, + 0x08, 0x3b, 0x47, 0x08, 0x76, 0x03, 0x89, 0x47, 0x08, 0x8b, 0x5e, 0xfe, + 0x8e, 0xd9, 0x3b, 0x47, 0x0a, 0x77, 0x0a, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0x59, 0xcb, 0xe9, 0xbc, 0x00, 0x89, 0x47, 0x0a, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0x59, 0xcb, 0x8b, 0x5e, 0xfe, 0x89, 0x04, 0x8b, 0x5f, 0x06, 0x39, + 0xde, 0x72, 0x03, 0xe9, 0x6c, 0x00, 0x3b, 0x77, 0x02, 0x77, 0x93, 0x8b, + 0x5e, 0xfe, 0x8b, 0x5f, 0x14, 0x39, 0xde, 0x72, 0x89, 0x8b, 0x5e, 0xfe, + 0x8e, 0xd9, 0x8b, 0x5f, 0x0e, 0x89, 0xd8, 0x8b, 0x7e, 0xfe, 0x40, 0x31, + 0xd2, 0x89, 0x46, 0xfa, 0x8b, 0x45, 0x0c, 0xf7, 0x76, 0xfa, 0x39, 0xd8, + 0x73, 0x18, 0x8b, 0x55, 0x0c, 0x29, 0xda, 0xd1, 0xe0, 0x39, 0xd3, 0x73, + 0x4e, 0x8e, 0xd9, 0x8b, 0x1c, 0x8e, 0xd9, 0x01, 0xf3, 0x83, 0x3f, 0xff, + 0x75, 0x46, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0x8b, 0x5f, 0x06, 0x39, 0xde, + 0x72, 0x4b, 0x8e, 0xd9, 0x39, 0xde, 0x73, 0x03, 0xe9, 0x3f, 0xff, 0x8b, + 0x5f, 0x04, 0x39, 0xde, 0x72, 0xf6, 0x8b, 0x5f, 0x04, 0x39, 0xde, 0x72, + 0xef, 0x8b, 0x5f, 0x04, 0xeb, 0xe6, 0x8b, 0x5f, 0x04, 0x39, 0xde, 0x72, + 0xe3, 0x8b, 0x7e, 0xfe, 0x83, 0xc7, 0x10, 0x8b, 0x45, 0x02, 0x89, 0xfb, + 0x39, 0xc6, 0x76, 0x8d, 0xe9, 0x13, 0xff, 0xb8, 0xff, 0xff, 0xeb, 0xad, + 0xf6, 0x07, 0x01, 0x74, 0xc7, 0x8b, 0x17, 0x80, 0xe2, 0xfe, 0x01, 0xd3, + 0x48, 0x74, 0xab, 0xeb, 0xa4, 0x8b, 0x5e, 0xfe, 0x8b, 0x5f, 0x14, 0xeb, + 0xad, 0x8b, 0x7e, 0xfe, 0xff, 0x45, 0x0e, 0x8b, 0x7e, 0xfc, 0x89, 0x5c, + 0x04, 0x89, 0x7c, 0x02, 0x89, 0x75, 0x04, 0x89, 0x77, 0x02, 0xe9, 0x03, + 0xff, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc6, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0xa1, 0x22, 0x08, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0xb1, 0x00, 0x8e, 0xde, + 0x31, 0xff, 0x8b, 0x3d, 0x85, 0xff, 0x75, 0x03, 0xe9, 0xa9, 0x00, 0x83, + 0xc2, 0x02, 0x83, 0xfa, 0x02, 0x73, 0x03, 0xba, 0xff, 0xff, 0xb8, 0xd9, + 0x06, 0x8e, 0xd8, 0xa1, 0x24, 0x08, 0x39, 0xc2, 0x73, 0x02, 0x89, 0xc2, + 0xb1, 0x04, 0x83, 0xc2, 0x0f, 0xd3, 0xea, 0x85, 0xd2, 0x75, 0x03, 0xba, + 0x00, 0x10, 0xb1, 0x04, 0x89, 0xf8, 0xd3, 0xe8, 0x01, 0xc2, 0x81, 0xfa, + 0x00, 0x10, 0x76, 0x03, 0xba, 0x00, 0x10, 0x89, 0xd3, 0x8e, 0xc6, 0xb4, + 0x4a, 0xcd, 0x21, 0x19, 0xdb, 0x85, 0xdb, 0x7c, 0x63, 0xb1, 0x04, 0x8e, + 0xde, 0x31, 0xdb, 0xd3, 0xe2, 0x89, 0x17, 0x8b, 0x5f, 0x12, 0x8b, 0x07, + 0x83, 0xef, 0x04, 0x01, 0xd8, 0x39, 0xf8, 0x74, 0x1a, 0x89, 0x5d, 0x02, + 0x8b, 0x47, 0x04, 0x89, 0x45, 0x04, 0x89, 0x7f, 0x04, 0x31, 0xdb, 0x31, + 0xc0, 0x89, 0x7f, 0x12, 0x89, 0xfb, 0x89, 0xc7, 0xff, 0x45, 0x0e, 0x89, + 0xd0, 0x29, 0xd8, 0x8e, 0xde, 0x2d, 0x04, 0x00, 0x31, 0xff, 0x89, 0x07, + 0x8b, 0x45, 0x0a, 0x3b, 0x07, 0x73, 0x05, 0x8b, 0x07, 0x89, 0x45, 0x0a, + 0x89, 0xd3, 0x8e, 0xde, 0x83, 0xeb, 0x04, 0xc7, 0x47, 0x02, 0x00, 0x00, + 0xb8, 0x01, 0x00, 0xc7, 0x07, 0xff, 0xff, 0x5f, 0x5e, 0x59, 0x5b, 0xcb, + 0x31, 0xc0, 0xeb, 0xf7, 0x53, 0x51, 0x52, 0x56, 0xba, 0xd9, 0x06, 0x8e, + 0xda, 0x83, 0x3e, 0x22, 0x08, 0x00, 0x75, 0x03, 0xe9, 0x88, 0x00, 0x3d, + 0xe0, 0xff, 0x77, 0xf8, 0x05, 0x1c, 0x00, 0x3b, 0x06, 0x24, 0x08, 0x73, + 0x03, 0xa1, 0x24, 0x08, 0x89, 0xc2, 0xb1, 0x04, 0x83, 0xc2, 0x0f, 0xd3, + 0xea, 0x85, 0xd2, 0x75, 0x03, 0xba, 0x00, 0x10, 0x89, 0xd3, 0xb4, 0x48, + 0xcd, 0x21, 0x19, 0xdb, 0x85, 0xdb, 0x7c, 0x5b, 0x8e, 0xd8, 0x31, 0xdb, + 0xc7, 0x47, 0x06, 0x16, 0x00, 0xc7, 0x47, 0x0e, 0x01, 0x00, 0xc7, 0x47, + 0x12, 0x16, 0x00, 0xc7, 0x47, 0x14, 0x16, 0x00, 0x89, 0x5f, 0x02, 0x89, + 0x5f, 0x04, 0x89, 0x5f, 0x08, 0xb1, 0x04, 0x89, 0x5f, 0x0c, 0xd3, 0xe2, + 0x89, 0x5f, 0x10, 0x89, 0x17, 0x89, 0xd3, 0x31, 0xf6, 0x83, 0xc3, 0xe6, + 0x89, 0x5c, 0x0a, 0xbe, 0x16, 0x00, 0x89, 0x1c, 0x89, 0xf3, 0xc7, 0x47, + 0x02, 0x10, 0x00, 0xc7, 0x47, 0x04, 0x10, 0x00, 0x89, 0xd3, 0x83, 0xeb, + 0x04, 0xc7, 0x47, 0x02, 0x00, 0x00, 0xc7, 0x07, 0xff, 0xff, 0x5e, 0x5a, + 0x59, 0x5b, 0xcb, 0x31, 0xc0, 0xeb, 0xf7, 0x31, 0xc0, 0xcb, 0x53, 0x51, + 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc7, 0x85, + 0xc0, 0x75, 0x03, 0xe9, 0x68, 0x00, 0x3d, 0xea, 0xff, 0x77, 0x63, 0x05, + 0x03, 0x00, 0x24, 0xfe, 0x89, 0x46, 0xfc, 0x3d, 0x06, 0x00, 0x72, 0x61, + 0xc6, 0x46, 0xfe, 0x00, 0x31, 0xd2, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, + 0x46, 0xfc, 0x3b, 0x06, 0xea, 0x07, 0x76, 0x5e, 0x8b, 0x36, 0xe8, 0x07, + 0x85, 0xf6, 0x74, 0x4c, 0x85, 0xf6, 0x74, 0x63, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0x8b, 0x4c, 0x0a, 0x89, 0x36, 0xe8, 0x07, 0x39, 0xf9, 0x72, 0x11, + 0x89, 0xf3, 0x89, 0xc2, 0x89, 0xf8, 0x0e, 0xe8, 0xf2, 0xfb, 0x90, 0x89, + 0xc2, 0x85, 0xc0, 0x75, 0x6c, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x3b, 0x0e, + 0xea, 0x07, 0x77, 0x31, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x74, 0x04, + 0xeb, 0xc6, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, + 0xcb, 0xc7, 0x46, 0xfc, 0x06, 0x00, 0xeb, 0x98, 0x89, 0x36, 0xea, 0x07, + 0x8b, 0x36, 0xe6, 0x07, 0xeb, 0xaa, 0x31, 0xc0, 0x8b, 0x36, 0xe6, 0x07, + 0xa3, 0xea, 0x07, 0xeb, 0x9f, 0x89, 0x0e, 0xea, 0x07, 0xeb, 0xc9, 0x80, + 0x7e, 0xfe, 0x00, 0x74, 0x12, 0x89, 0xf8, 0x0e, 0x3e, 0xe8, 0x3e, 0x14, + 0x85, 0xc0, 0x74, 0x19, 0xc6, 0x46, 0xfe, 0x00, 0xe9, 0x6b, 0xff, 0x89, + 0xf8, 0x0e, 0x3e, 0xe8, 0x26, 0x15, 0x85, 0xc0, 0x74, 0xe3, 0xc6, 0x46, + 0xfe, 0x01, 0xe9, 0x59, 0xff, 0x89, 0xd0, 0xeb, 0xa7, 0xcb, 0x53, 0x51, + 0x52, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x16, 0xf6, 0x07, 0xb1, 0x04, + 0x83, 0xc2, 0x10, 0xd3, 0xea, 0x85, 0xd2, 0x74, 0x0e, 0x80, 0x3e, 0xfc, + 0x07, 0x01, 0x75, 0x0b, 0xb8, 0x00, 0x10, 0x39, 0xd0, 0x77, 0x21, 0x5a, + 0x59, 0x5b, 0xcb, 0x8e, 0x06, 0xf8, 0x07, 0x31, 0xdb, 0x4b, 0xb4, 0x4a, + 0xcd, 0x21, 0x8c, 0xd8, 0x2b, 0x06, 0xf8, 0x07, 0x29, 0xc3, 0x89, 0xd8, + 0x81, 0xfb, 0x00, 0x10, 0x76, 0xdd, 0xeb, 0xd8, 0x29, 0xd0, 0xba, 0xd9, + 0x06, 0xb1, 0x04, 0x8e, 0xda, 0xd3, 0xe0, 0x8b, 0x1e, 0xf6, 0x07, 0x89, + 0xc2, 0x30, 0xff, 0x83, 0xc2, 0x10, 0x80, 0xe3, 0x0f, 0x29, 0xda, 0x0e, + 0x3e, 0xe8, 0x38, 0x14, 0x01, 0xd0, 0x2d, 0x08, 0x00, 0x0e, 0x3e, 0xe8, + 0xb8, 0xfe, 0x0e, 0xe8, 0x03, 0x00, 0x90, 0xeb, 0xae, 0x53, 0x52, 0x56, + 0x85, 0xc0, 0x75, 0x03, 0xe9, 0xd7, 0x00, 0xba, 0xd9, 0x06, 0x8e, 0xda, + 0x8b, 0x36, 0x62, 0x0d, 0x85, 0xf6, 0x74, 0x3e, 0x39, 0xc6, 0x77, 0x08, + 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x5a, 0xba, 0xd9, 0x06, 0x8e, + 0xda, 0x89, 0xf3, 0x8b, 0x74, 0x02, 0x85, 0xf6, 0x74, 0x0c, 0x39, 0xc6, + 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x40, 0xba, 0xd9, + 0x06, 0x8e, 0xda, 0x8b, 0x77, 0x04, 0x85, 0xf6, 0x74, 0x0c, 0x39, 0xc6, + 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x28, 0xba, 0xd9, + 0x06, 0x8e, 0xda, 0x8b, 0x36, 0xe8, 0x07, 0x85, 0xf6, 0x75, 0x20, 0xba, + 0xd9, 0x06, 0x8e, 0xda, 0x8b, 0x36, 0xe6, 0x07, 0x85, 0xf6, 0x74, 0x98, + 0x39, 0xc6, 0x76, 0x0c, 0xba, 0xd9, 0x06, 0x8e, 0xda, 0x8b, 0x74, 0x04, + 0xeb, 0xee, 0xeb, 0x41, 0xe9, 0x63, 0x00, 0x39, 0xc6, 0x77, 0x08, 0x8b, + 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x32, 0xba, 0xd9, 0x06, 0x8e, 0xda, + 0x89, 0xf3, 0x8b, 0x74, 0x02, 0x85, 0xf6, 0x74, 0x0c, 0x39, 0xc6, 0x77, + 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x18, 0xba, 0xd9, 0x06, + 0x8e, 0xda, 0x8b, 0x77, 0x04, 0x85, 0xf6, 0x74, 0xae, 0x39, 0xc6, 0x77, + 0xaa, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x73, 0xa2, 0xba, 0xd9, 0x06, + 0x89, 0xf3, 0x0e, 0xe8, 0x00, 0xfb, 0x90, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0x89, 0x36, 0x62, 0x0d, 0x3b, 0x36, 0xe8, 0x07, 0x73, 0x08, 0xa1, 0xea, + 0x07, 0x3b, 0x44, 0x0a, 0x72, 0x14, 0x5e, 0x5a, 0x5b, 0xcb, 0xba, 0xd9, + 0x06, 0x8e, 0xda, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0xce, 0xe9, + 0x7e, 0xff, 0x8b, 0x44, 0x0a, 0xa3, 0xea, 0x07, 0xeb, 0xe4, 0x53, 0x51, + 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0xbe, 0x64, 0x06, 0x80, 0x26, 0x93, 0x06, 0xf8, 0x89, 0xc1, + 0x80, 0x0e, 0x93, 0x06, 0x04, 0x8e, 0xd9, 0x83, 0x7c, 0x0a, 0x00, 0x75, + 0x16, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x31, 0xc0, 0xa3, 0x50, 0x0d, 0xa3, + 0x52, 0x0d, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xb8, + 0x12, 0x00, 0x0e, 0xe8, 0x70, 0xfd, 0x90, 0x85, 0xc0, 0x74, 0x63, 0xc7, + 0x46, 0xfe, 0xd9, 0x06, 0x89, 0xc7, 0x8e, 0x5e, 0xfe, 0x89, 0x75, 0x04, + 0xb8, 0xd9, 0x06, 0x89, 0x4d, 0x06, 0x8e, 0xd8, 0x8b, 0x16, 0x4c, 0x0d, + 0xa1, 0x4e, 0x0d, 0x8e, 0x5e, 0xfe, 0x89, 0x45, 0x02, 0xb8, 0xd9, 0x06, + 0x89, 0x15, 0x8e, 0xd8, 0x8b, 0x46, 0xfe, 0x89, 0x3e, 0x4c, 0x0d, 0xa3, + 0x4e, 0x0d, 0x8e, 0xd9, 0x89, 0x7c, 0x06, 0x89, 0x44, 0x08, 0x8b, 0x7c, + 0x06, 0x8e, 0xd8, 0xc7, 0x45, 0x08, 0x00, 0x00, 0xc7, 0x45, 0x0a, 0x00, + 0x00, 0x8e, 0xd9, 0xc5, 0x7c, 0x06, 0xc6, 0x45, 0x10, 0x00, 0x8e, 0xd9, + 0xc5, 0x7c, 0x06, 0x83, 0xc6, 0x12, 0xc7, 0x45, 0x0c, 0x00, 0x00, 0xe9, + 0x73, 0xff, 0xb8, 0x12, 0x00, 0x0e, 0x3e, 0xe8, 0xcf, 0xeb, 0x89, 0xc7, + 0x89, 0x56, 0xfe, 0x85, 0xd2, 0x75, 0x93, 0x85, 0xc0, 0x75, 0x8f, 0xbb, + 0x01, 0x00, 0xb8, 0x7e, 0x04, 0xba, 0xd9, 0x06, 0xe9, 0x2e, 0x0e, 0x53, + 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc3, + 0xb1, 0x03, 0xd3, 0xe0, 0x01, 0xd8, 0xd1, 0xe0, 0x05, 0x64, 0x06, 0x89, + 0x46, 0xfa, 0xb8, 0xd9, 0x06, 0x31, 0xff, 0x8e, 0xd8, 0x31, 0xc9, 0x8b, + 0x1e, 0x4c, 0x0d, 0x8b, 0x16, 0x4e, 0x0d, 0x85, 0xd2, 0x75, 0x04, 0x85, + 0xdb, 0x74, 0x42, 0x8e, 0xda, 0x8b, 0x07, 0x8b, 0x77, 0x04, 0x89, 0x46, + 0xfc, 0x8b, 0x47, 0x02, 0x8e, 0x5f, 0x06, 0x89, 0x46, 0xfe, 0x8a, 0x44, + 0x0b, 0xbb, 0x01, 0x00, 0xa8, 0x40, 0x74, 0x12, 0x89, 0xf0, 0x8c, 0xda, + 0xe8, 0xa4, 0xf3, 0x41, 0x09, 0xc7, 0x8b, 0x5e, 0xfc, 0x8b, 0x56, 0xfe, + 0xeb, 0xc9, 0xa8, 0x08, 0x75, 0xea, 0x3b, 0x76, 0xfa, 0x72, 0xef, 0x81, + 0xfe, 0xbe, 0x06, 0x73, 0xdf, 0x31, 0xdb, 0xeb, 0xdb, 0x85, 0xff, 0x74, + 0x0c, 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, + 0xc3, 0x89, 0xc8, 0xeb, 0xf3, 0xb8, 0x05, 0x00, 0xe8, 0x70, 0xff, 0xcb, + 0x31, 0xc0, 0xe8, 0x6a, 0xff, 0xe9, 0xa0, 0x05, 0x51, 0x56, 0x89, 0xc6, + 0x88, 0xd8, 0x8e, 0xda, 0x30, 0xe4, 0x8b, 0x1c, 0x8b, 0x4c, 0x02, 0x0e, + 0x3e, 0xe8, 0x2d, 0x13, 0x8e, 0xda, 0xff, 0x44, 0x0c, 0x5e, 0x59, 0xc3, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc6, 0x89, 0x56, + 0xfe, 0x89, 0xdf, 0x8e, 0xda, 0xc5, 0x5c, 0x06, 0x8b, 0x47, 0x0c, 0x3d, + 0x01, 0x00, 0x74, 0x0c, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x9c, 0x00, 0xc7, + 0x47, 0x0c, 0x01, 0x00, 0x8e, 0x5e, 0xfe, 0x8b, 0x44, 0x0a, 0x8b, 0x5c, + 0x06, 0x30, 0xe4, 0x80, 0x64, 0x0a, 0xcf, 0x24, 0x30, 0x8e, 0x5c, 0x08, + 0x89, 0x46, 0xfa, 0x8b, 0x47, 0x0a, 0x8b, 0x57, 0x08, 0x85, 0xc0, 0x75, + 0x0c, 0x85, 0xd2, 0x75, 0x08, 0x8b, 0x56, 0xfe, 0x89, 0xf0, 0xe8, 0x9f, + 0x13, 0x8e, 0x5e, 0xfe, 0xc7, 0x46, 0xfc, 0x00, 0x00, 0xf6, 0x44, 0x0b, + 0x04, 0x74, 0x0d, 0x80, 0x64, 0x0b, 0xfa, 0xc7, 0x46, 0xfc, 0x01, 0x00, + 0x80, 0x4c, 0x0b, 0x01, 0xb8, 0x70, 0x28, 0x50, 0x8b, 0x56, 0xfe, 0xff, + 0x76, 0x0a, 0x89, 0xfb, 0xff, 0x76, 0x08, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, + 0x47, 0x1f, 0x89, 0xc3, 0x83, 0x7e, 0xfc, 0x00, 0x74, 0x12, 0x8e, 0x5e, + 0xfe, 0x89, 0xf0, 0x80, 0x64, 0x0b, 0xfa, 0x8c, 0xda, 0x80, 0x4c, 0x0b, + 0x04, 0xe8, 0xeb, 0x09, 0x8e, 0x5e, 0xfe, 0xf6, 0x44, 0x0a, 0x20, 0x74, + 0x03, 0xbb, 0xff, 0xff, 0x8e, 0x5e, 0xfe, 0x8b, 0x46, 0xfa, 0x09, 0x44, + 0x0a, 0x89, 0xd8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x04, 0x00, 0x31, + 0xc0, 0xeb, 0xf4, 0xb8, 0x64, 0x0d, 0xba, 0xd9, 0x06, 0xcb, 0x3d, 0x41, + 0x00, 0x7c, 0x08, 0x3d, 0x5a, 0x00, 0x7f, 0x03, 0x05, 0x20, 0x00, 0xcb, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x89, 0xc6, 0x89, 0x56, + 0xfc, 0x89, 0x5e, 0xfa, 0x89, 0xcf, 0xc7, 0x46, 0xf6, 0xff, 0xff, 0x8e, + 0x5e, 0xfc, 0x80, 0x3c, 0x20, 0x75, 0x03, 0x46, 0xeb, 0xf8, 0x8b, 0x46, + 0xfa, 0x8d, 0x56, 0xf6, 0x16, 0x30, 0xe4, 0x52, 0x24, 0x83, 0x8c, 0xda, + 0x89, 0x46, 0xf8, 0x89, 0xc3, 0x89, 0xf0, 0x09, 0xfb, 0x0e, 0x3e, 0xe8, + 0xeb, 0x20, 0x85, 0xc0, 0x75, 0x0e, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, + 0x46, 0xf6, 0x3b, 0x06, 0x26, 0x08, 0x73, 0x58, 0xf6, 0x46, 0xfa, 0x03, + 0x74, 0x3b, 0x8b, 0x46, 0xf6, 0x3d, 0xff, 0xff, 0x74, 0x33, 0x0e, 0xe8, + 0x33, 0x21, 0x90, 0x85, 0xc0, 0x75, 0x2a, 0xf6, 0x46, 0xfb, 0x04, 0x74, + 0x06, 0xf6, 0x46, 0xfa, 0x20, 0x75, 0x4f, 0xf6, 0x46, 0xfa, 0x40, 0x74, + 0x18, 0x8d, 0x56, 0xfe, 0x8b, 0x5e, 0xf6, 0x8c, 0xd0, 0x31, 0xc9, 0x8e, + 0xd8, 0xb4, 0x40, 0xcd, 0x21, 0x19, 0xd2, 0x89, 0xc1, 0x85, 0xd2, 0x7c, + 0x4c, 0x83, 0x7e, 0xf6, 0xff, 0x75, 0x56, 0xf6, 0x46, 0xfa, 0x20, 0x75, + 0x52, 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x04, 0x00, + 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x0e, 0xe8, 0x37, 0xff, + 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x0b, 0x00, + 0xeb, 0xde, 0x8b, 0x5e, 0xf6, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x0e, + 0x3e, 0xe8, 0x1b, 0xff, 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xff, 0xff, 0xc7, + 0x07, 0x07, 0x00, 0xeb, 0xc3, 0x8b, 0x5e, 0xf6, 0xb4, 0x3e, 0xcd, 0x21, + 0x19, 0xd2, 0x89, 0xc8, 0xe8, 0xd0, 0x20, 0xeb, 0xb3, 0xeb, 0x5e, 0x0e, + 0x3e, 0xe8, 0x5d, 0x21, 0x89, 0xc3, 0x8e, 0xda, 0x8b, 0x07, 0x3d, 0x02, + 0x00, 0x75, 0x9e, 0x01, 0x46, 0x08, 0xc5, 0x5e, 0x08, 0x8b, 0x47, 0xfe, + 0x85, 0xc0, 0x75, 0x03, 0xb8, 0x80, 0x01, 0xba, 0xd9, 0x06, 0x8e, 0xda, + 0x8b, 0x16, 0x68, 0x08, 0xf7, 0xd2, 0x21, 0xd0, 0x31, 0xdb, 0xa8, 0x80, + 0x75, 0x03, 0xbb, 0x01, 0x00, 0x8d, 0x56, 0xf6, 0x16, 0x89, 0xf0, 0x52, + 0x8b, 0x56, 0xfc, 0x0e, 0x3e, 0xe8, 0x24, 0x21, 0x85, 0xc0, 0x74, 0x03, + 0xe9, 0x62, 0xff, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x46, 0xf6, 0x3b, + 0x06, 0x26, 0x08, 0x73, 0x65, 0x85, 0xff, 0x75, 0x5f, 0x8b, 0x46, 0xf6, + 0xe8, 0xfa, 0x1f, 0x24, 0x3c, 0x89, 0xc2, 0x8b, 0x46, 0xf6, 0x0e, 0xe8, + 0x37, 0x20, 0x90, 0x85, 0xc0, 0x74, 0x03, 0x80, 0xce, 0x20, 0x80, 0x66, + 0xf8, 0x7f, 0x83, 0x7e, 0xf8, 0x02, 0x75, 0x03, 0x80, 0xca, 0x03, 0x83, + 0x7e, 0xf8, 0x00, 0x75, 0x03, 0x80, 0xca, 0x01, 0x83, 0x7e, 0xf8, 0x01, + 0x75, 0x03, 0x80, 0xca, 0x02, 0xf6, 0x46, 0xfa, 0x10, 0x74, 0x03, 0x80, + 0xca, 0x80, 0x89, 0xd0, 0x0c, 0x40, 0xf6, 0x46, 0xfb, 0x03, 0x74, 0x4e, + 0xf6, 0x46, 0xfb, 0x02, 0x74, 0x02, 0x89, 0xc2, 0x8b, 0x46, 0xf6, 0xe8, + 0xe1, 0x21, 0x8b, 0x46, 0xf6, 0xe9, 0xf4, 0xfe, 0xeb, 0x0b, 0x89, 0xc3, + 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0xe9, 0xf7, 0xfe, 0x89, 0xc3, 0xb4, + 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7d, 0x03, 0xe9, 0x20, 0xff, + 0x8d, 0x56, 0xf6, 0x8b, 0x5e, 0xf8, 0x16, 0x89, 0xf0, 0x52, 0x09, 0xfb, + 0x8b, 0x56, 0xfc, 0x0e, 0x3e, 0xe8, 0x4d, 0x1f, 0x85, 0xc0, 0x75, 0x03, + 0xe9, 0x6a, 0xff, 0xe9, 0xb7, 0xfe, 0xbb, 0xd9, 0x06, 0x8e, 0xdb, 0x81, + 0x3e, 0xee, 0x07, 0x00, 0x02, 0x75, 0xad, 0xeb, 0xa9, 0x53, 0x55, 0x89, + 0xe5, 0x8c, 0xd0, 0x8d, 0x5e, 0x0e, 0x8e, 0xd8, 0x8b, 0x07, 0x50, 0x31, + 0xc0, 0x50, 0xff, 0x76, 0x0c, 0xff, 0x76, 0x0a, 0xff, 0x76, 0x08, 0x83, + 0xc3, 0x02, 0x0e, 0xe8, 0x06, 0x00, 0x83, 0xc4, 0x0a, 0x5d, 0x5b, 0xcb, + 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0x8d, 0x56, 0x14, 0x8b, 0x4e, 0x12, + 0x8b, 0x5e, 0x10, 0x16, 0x8b, 0x46, 0x0c, 0x52, 0x8b, 0x56, 0x0e, 0xe8, + 0xca, 0xfd, 0x5d, 0x5a, 0x59, 0x5b, 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, + 0x83, 0xec, 0x02, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0x8e, 0xd9, 0x8b, 0x47, + 0x04, 0x99, 0x3b, 0x56, 0xfe, 0x7f, 0x06, 0x75, 0x19, 0x39, 0xc6, 0x77, + 0x15, 0xc4, 0x7f, 0x06, 0x26, 0x8b, 0x45, 0x08, 0x2b, 0x07, 0x99, 0x3b, + 0x56, 0xfe, 0x7c, 0x0f, 0x75, 0x04, 0x39, 0xc6, 0x73, 0x09, 0xb8, 0x01, + 0x00, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x80, 0x67, 0x0a, 0xef, 0x01, + 0x37, 0x31, 0xc0, 0x29, 0x77, 0x04, 0xeb, 0xed, 0x53, 0x56, 0x89, 0xc3, + 0x8e, 0xda, 0x80, 0x67, 0x0a, 0xef, 0xc4, 0x77, 0x06, 0x26, 0x8b, 0x44, + 0x08, 0x26, 0x8b, 0x74, 0x0a, 0xc7, 0x47, 0x04, 0x00, 0x00, 0x89, 0x07, + 0x89, 0x77, 0x02, 0x5e, 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x0a, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0x89, 0x5e, 0xfc, 0x89, 0xcf, + 0x8e, 0xda, 0xf6, 0x44, 0x0a, 0x06, 0x74, 0x5a, 0xf6, 0x44, 0x0b, 0x10, + 0x75, 0x56, 0x83, 0x7e, 0x0a, 0x01, 0x75, 0x09, 0x8b, 0x44, 0x04, 0x99, + 0x29, 0x46, 0xfc, 0x19, 0xd7, 0x8e, 0x5e, 0xfe, 0xc5, 0x5c, 0x06, 0x8b, + 0x47, 0x08, 0x8b, 0x57, 0x0a, 0x8e, 0x5e, 0xfe, 0xc7, 0x44, 0x04, 0x00, + 0x00, 0x89, 0x04, 0x89, 0x54, 0x02, 0x8e, 0x5e, 0xfe, 0x8b, 0x56, 0x0a, + 0x8b, 0x5e, 0xfc, 0x89, 0xf9, 0x8b, 0x44, 0x0c, 0x80, 0x64, 0x0a, 0xeb, + 0x0e, 0xe8, 0xdb, 0x20, 0x90, 0x83, 0xfa, 0xff, 0x75, 0x32, 0x3d, 0xff, + 0xff, 0x75, 0x2d, 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xca, + 0x02, 0x00, 0xeb, 0x23, 0xe8, 0x94, 0x06, 0x85, 0xc0, 0x74, 0xcb, 0x83, + 0x7e, 0x0a, 0x00, 0x75, 0xe6, 0x85, 0xc9, 0x7d, 0xe2, 0x0e, 0x3e, 0xe8, + 0xb9, 0xfc, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x09, 0x00, 0xeb, 0xd3, + 0xe9, 0x70, 0x00, 0x8b, 0x46, 0x0a, 0x3d, 0x02, 0x00, 0x74, 0x6d, 0x3d, + 0x01, 0x00, 0x74, 0x6c, 0x85, 0xc0, 0x75, 0x66, 0x8b, 0x44, 0x0c, 0x0e, + 0x3e, 0xe8, 0xb2, 0x20, 0x8e, 0x5e, 0xfe, 0x89, 0xc3, 0x8b, 0x44, 0x04, + 0x89, 0x56, 0xf6, 0x99, 0x29, 0xc3, 0x89, 0xd8, 0x8b, 0x5e, 0xf6, 0x19, + 0xd3, 0x89, 0xda, 0x8b, 0x5e, 0xfc, 0x29, 0xc3, 0x89, 0xd8, 0x89, 0xcb, + 0x19, 0xd3, 0x8c, 0xd9, 0x89, 0xda, 0x89, 0xf3, 0xe8, 0xb8, 0xfe, 0x85, + 0xc0, 0x74, 0x28, 0x8e, 0x5e, 0xfe, 0x8b, 0x56, 0x0a, 0x8b, 0x5e, 0xfc, + 0x89, 0xf9, 0x8b, 0x44, 0x0c, 0x0e, 0x3e, 0xe8, 0x45, 0x20, 0x83, 0xfa, + 0xff, 0x75, 0x08, 0x3d, 0xff, 0xff, 0x75, 0x03, 0xe9, 0x68, 0xff, 0x8b, + 0x56, 0xfe, 0x89, 0xf0, 0xe8, 0xd5, 0xfe, 0x31, 0xc0, 0xe9, 0x5e, 0xff, + 0xeb, 0x32, 0xeb, 0x41, 0x8b, 0x44, 0x04, 0x89, 0xf3, 0x99, 0x8c, 0xd9, + 0x89, 0x46, 0xf8, 0x89, 0x56, 0xfa, 0x8b, 0x46, 0xfc, 0x89, 0xfa, 0xe8, + 0x6d, 0xfe, 0x85, 0xc0, 0x74, 0xdd, 0x8b, 0x46, 0xf8, 0x8e, 0x5e, 0xfe, + 0x8b, 0x56, 0x0a, 0x89, 0xf9, 0x29, 0x46, 0xfc, 0x8b, 0x5e, 0xfc, 0x1b, + 0x4e, 0xfa, 0xeb, 0xaa, 0x89, 0xf0, 0xe8, 0x97, 0xfe, 0x8e, 0x5e, 0xfe, + 0x8b, 0x56, 0x0a, 0x8b, 0x44, 0x0c, 0xe9, 0x07, 0xff, 0x0e, 0x3e, 0xe8, + 0xed, 0xfb, 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x09, + 0x00, 0xe9, 0x06, 0xff, 0x53, 0x89, 0xc3, 0x8e, 0xda, 0xf6, 0x47, 0x0b, + 0x20, 0x74, 0x02, 0x5b, 0xc3, 0x8b, 0x47, 0x0c, 0x0e, 0xe8, 0x75, 0x1d, + 0x90, 0x85, 0xc0, 0x74, 0xf2, 0x8e, 0xda, 0x80, 0x4f, 0x0b, 0x20, 0xf6, + 0x47, 0x0b, 0x07, 0x75, 0xe6, 0x80, 0x4f, 0x0b, 0x02, 0x5b, 0xc3, 0x53, + 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc1, 0x89, + 0xd7, 0xb8, 0xd9, 0x06, 0xbe, 0x4c, 0x0d, 0x8e, 0xd8, 0x8b, 0x44, 0x02, + 0x8b, 0x1c, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xdb, 0x74, + 0x47, 0x8e, 0xc0, 0x26, 0x8b, 0x57, 0x06, 0x26, 0x8b, 0x47, 0x04, 0x39, + 0xfa, 0x75, 0x04, 0x39, 0xc8, 0x74, 0x07, 0x8e, 0x5e, 0xfe, 0x89, 0xde, + 0xeb, 0xd7, 0x26, 0x8b, 0x47, 0x02, 0x26, 0x8b, 0x17, 0x89, 0x44, 0x02, + 0xb8, 0xd9, 0x06, 0x89, 0x14, 0x8e, 0xd8, 0xa1, 0x50, 0x0d, 0x8b, 0x16, + 0x52, 0x0d, 0x8e, 0x5e, 0xfe, 0x89, 0x07, 0xb8, 0xd9, 0x06, 0x89, 0x57, + 0x02, 0x8e, 0xd8, 0x8c, 0xc0, 0x89, 0x1e, 0x50, 0x0d, 0xa3, 0x52, 0x0d, + 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x56, + 0xb9, 0xd9, 0x06, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x36, 0x52, 0x0d, + 0x8b, 0x1e, 0x50, 0x0d, 0x85, 0xf6, 0x75, 0x09, 0x85, 0xdb, 0x75, 0x05, + 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x8e, 0xde, 0x8b, 0x07, 0x8b, 0x57, 0x02, + 0x8e, 0xd9, 0xa3, 0x50, 0x0d, 0x89, 0x16, 0x52, 0x0d, 0x89, 0xd8, 0x89, + 0xf2, 0x0e, 0x3e, 0xe8, 0x54, 0xe6, 0xeb, 0xcb, 0x53, 0x51, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, + 0x52, 0x0d, 0x8b, 0x3e, 0x50, 0x0d, 0x89, 0x46, 0xfc, 0x85, 0xc0, 0x75, + 0x24, 0x85, 0xff, 0x75, 0x20, 0x8c, 0x5e, 0xfe, 0xbe, 0x64, 0x06, 0x8e, + 0x5e, 0xfe, 0x81, 0xfe, 0xcc, 0x07, 0x73, 0x0b, 0xf6, 0x44, 0x0a, 0x03, + 0x74, 0x08, 0x83, 0xc6, 0x12, 0xeb, 0xef, 0xe9, 0xa8, 0x00, 0xe9, 0x89, + 0x00, 0x8e, 0xd8, 0xbb, 0xd9, 0x06, 0x8b, 0x05, 0x8b, 0x55, 0x02, 0x8e, + 0xdb, 0xa3, 0x50, 0x0d, 0x89, 0x16, 0x52, 0x0d, 0x8e, 0x5e, 0xfc, 0x8b, + 0x45, 0x06, 0x8b, 0x75, 0x04, 0x8e, 0xd8, 0x89, 0x46, 0xfe, 0x8b, 0x44, + 0x0a, 0x89, 0x46, 0xfa, 0xb9, 0x12, 0x00, 0x8b, 0x56, 0xfe, 0x89, 0xf0, + 0x31, 0xdb, 0x0e, 0xe8, 0xbb, 0x1e, 0x90, 0x8e, 0x5e, 0xfe, 0x8b, 0x46, + 0xfa, 0x89, 0x44, 0x0a, 0x8e, 0x5e, 0xfc, 0x8b, 0x46, 0xfe, 0x89, 0x75, + 0x04, 0x89, 0x45, 0x06, 0x8b, 0x5d, 0x04, 0x8e, 0xd8, 0x8b, 0x46, 0xfc, + 0x89, 0x47, 0x08, 0xb8, 0xd9, 0x06, 0x89, 0x7f, 0x06, 0x8e, 0xd8, 0xa1, + 0x4c, 0x0d, 0x8b, 0x16, 0x4e, 0x0d, 0x8e, 0x5e, 0xfc, 0x89, 0x05, 0x89, + 0x55, 0x02, 0xb8, 0xd9, 0x06, 0x8b, 0x56, 0xfe, 0x8e, 0xd8, 0x8b, 0x46, + 0xfc, 0x89, 0x3e, 0x4c, 0x0d, 0xa3, 0x4e, 0x0d, 0x89, 0xf0, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xb8, 0x12, 0x00, 0x0e, 0x3e, 0xe8, + 0x6f, 0xe4, 0x89, 0xc7, 0x89, 0x56, 0xfc, 0x85, 0xd2, 0x75, 0x04, 0x85, + 0xc0, 0x74, 0x2a, 0xc7, 0x46, 0xfa, 0x00, 0x00, 0xeb, 0x82, 0xb8, 0x24, + 0x00, 0x0e, 0x3e, 0xe8, 0x53, 0xe4, 0x89, 0xc7, 0x89, 0x56, 0xfc, 0x85, + 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x0e, 0xc7, 0x46, 0xfa, 0x00, 0x40, + 0x89, 0x56, 0xfe, 0x8d, 0x75, 0x12, 0xe9, 0x5f, 0xff, 0x0e, 0x3e, 0xe8, + 0xf5, 0xf9, 0x89, 0xc3, 0x8e, 0xda, 0x31, 0xf6, 0xc7, 0x07, 0x05, 0x00, + 0x31, 0xd2, 0xeb, 0xa4, 0x51, 0x56, 0x57, 0x89, 0xc6, 0x8e, 0xc2, 0x88, + 0xd8, 0x26, 0xc5, 0x1c, 0x26, 0x8b, 0x7c, 0x0c, 0x3b, 0x7f, 0x04, 0x73, + 0x16, 0x8b, 0x3f, 0x8d, 0x55, 0x01, 0x8b, 0x4f, 0x02, 0x89, 0x17, 0x8e, + 0xd9, 0x88, 0x05, 0x26, 0xff, 0x44, 0x0c, 0x5f, 0x5e, 0x59, 0xc3, 0xc7, + 0x47, 0x06, 0xff, 0xff, 0xeb, 0xf5, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, + 0x83, 0xec, 0x0a, 0x89, 0xc7, 0x89, 0x56, 0xfe, 0x89, 0xde, 0x8b, 0x5e, + 0x0c, 0x89, 0x46, 0xf6, 0x89, 0xd0, 0x31, 0xd0, 0x8b, 0x4e, 0x0e, 0x89, + 0x46, 0xfc, 0xb8, 0x68, 0x2f, 0x89, 0x56, 0xf8, 0x50, 0x8c, 0xd2, 0xff, + 0x76, 0x12, 0x8d, 0x46, 0xf6, 0xff, 0x76, 0x10, 0x89, 0x76, 0xfa, 0x0e, + 0x3e, 0xe8, 0x85, 0x18, 0x89, 0xc2, 0x39, 0xf0, 0x72, 0x11, 0x83, 0x7e, + 0xfc, 0x00, 0x75, 0x15, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, + 0xca, 0x08, 0x00, 0x8e, 0x5e, 0xfe, 0x01, 0xc7, 0xc6, 0x05, 0x00, 0xeb, + 0xe5, 0xb8, 0xff, 0xff, 0xeb, 0xe8, 0x53, 0x52, 0x55, 0x89, 0xe5, 0x16, + 0x8d, 0x56, 0x14, 0x52, 0x8b, 0x5e, 0x0e, 0xff, 0x76, 0x12, 0x8b, 0x46, + 0x0a, 0xff, 0x76, 0x10, 0x8b, 0x56, 0x0c, 0x0e, 0xe8, 0x83, 0xff, 0x5d, + 0x5a, 0x5b, 0xcb, 0x53, 0xbb, 0xd9, 0x06, 0x8e, 0xdb, 0x80, 0x3e, 0xf0, + 0x07, 0x00, 0x75, 0x04, 0x31, 0xc0, 0x5b, 0xcb, 0x52, 0x50, 0xcc, 0xeb, + 0x06, 0x57, 0x56, 0x49, 0x44, 0x45, 0x4f, 0xb8, 0x01, 0x00, 0x83, 0xc4, + 0x04, 0x5b, 0xcb, 0x52, 0x55, 0x89, 0xe5, 0xba, 0xd9, 0x06, 0x89, 0xe0, + 0x8e, 0xda, 0x2b, 0x06, 0xfe, 0x07, 0x89, 0xec, 0x5d, 0x5a, 0xcb, 0x56, + 0x57, 0x55, 0x89, 0xe5, 0x52, 0x89, 0xca, 0x8e, 0x46, 0xfe, 0x89, 0xde, + 0x89, 0xc7, 0x57, 0x1e, 0x8e, 0xda, 0xf7, 0xc6, 0x01, 0x00, 0x74, 0x06, + 0xac, 0xaa, 0x3c, 0x00, 0x74, 0x1d, 0x8b, 0x04, 0x84, 0xc0, 0x74, 0x16, + 0xab, 0x84, 0xe4, 0x74, 0x12, 0x8b, 0x44, 0x02, 0x84, 0xc0, 0x74, 0x0a, + 0xab, 0x83, 0xc6, 0x04, 0x84, 0xe4, 0x75, 0xe6, 0x74, 0x01, 0xaa, 0x1f, + 0x5f, 0x89, 0xf8, 0x8c, 0xc2, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xcb, 0x56, + 0x57, 0x89, 0xde, 0x8e, 0xd9, 0x89, 0xc7, 0x8e, 0xc2, 0x57, 0x83, 0xc9, + 0xff, 0x32, 0xc0, 0xf2, 0xae, 0x4f, 0x8a, 0x04, 0xaa, 0x84, 0xc0, 0x74, + 0x0b, 0x8a, 0x44, 0x01, 0x83, 0xc6, 0x02, 0xaa, 0x84, 0xc0, 0x75, 0xee, + 0x5f, 0x89, 0xf8, 0x5f, 0x5e, 0xcb, 0x56, 0x57, 0x89, 0xde, 0x89, 0xcf, + 0xbb, 0x88, 0x06, 0xb9, 0xd9, 0x06, 0x0e, 0xe8, 0xbe, 0x1c, 0x90, 0xbb, + 0x88, 0x06, 0xb9, 0xd9, 0x06, 0xb8, 0xac, 0x04, 0x89, 0xca, 0x0e, 0xe8, + 0xae, 0x1c, 0x90, 0xbb, 0x88, 0x06, 0xb9, 0xd9, 0x06, 0x89, 0xf0, 0x89, + 0xfa, 0x0e, 0x3e, 0xe8, 0x9e, 0x1c, 0x5f, 0x5e, 0xcb, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0xa1, 0xf4, 0x07, 0x8b, 0x16, 0xf2, 0x07, 0x85, 0xc0, 0x75, + 0x04, 0x85, 0xd2, 0x74, 0x04, 0xff, 0x1e, 0xf2, 0x07, 0xbb, 0xff, 0x00, + 0xb8, 0xb0, 0x04, 0xba, 0xd9, 0x06, 0xe9, 0xe8, 0x04, 0x53, 0x51, 0x56, + 0x57, 0x89, 0xc6, 0x89, 0xd7, 0x8e, 0xda, 0xc5, 0x5c, 0x06, 0x8b, 0x47, + 0x0a, 0x8b, 0x57, 0x08, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, 0x5f, + 0x8e, 0xdf, 0x8a, 0x44, 0x0b, 0xa8, 0x20, 0x74, 0x0a, 0xa8, 0x06, 0x74, + 0x06, 0xb8, 0x00, 0x20, 0xe8, 0x04, 0x03, 0x8e, 0xdf, 0x80, 0x64, 0x0a, + 0xfb, 0xc5, 0x5c, 0x06, 0x8b, 0x57, 0x08, 0x8b, 0x47, 0x0a, 0x8e, 0xdf, + 0x89, 0x44, 0x02, 0x8b, 0x44, 0x0a, 0x30, 0xc0, 0x80, 0xe4, 0x24, 0x89, + 0x14, 0x3d, 0x00, 0x24, 0x75, 0x41, 0x8b, 0x44, 0x0c, 0x85, 0xc0, 0x75, + 0x3a, 0x89, 0x44, 0x04, 0x0e, 0xe8, 0xb4, 0x1c, 0x90, 0x89, 0xc2, 0x3d, + 0xff, 0xff, 0x75, 0x1c, 0x8e, 0xdf, 0x8b, 0x44, 0x04, 0x85, 0xc0, 0x7e, + 0x46, 0x8e, 0xdf, 0x8b, 0x44, 0x04, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x89, + 0xf0, 0x89, 0xfa, 0xe8, 0xe2, 0x0a, 0xeb, 0x98, 0x8e, 0xdf, 0xc5, 0x1c, + 0x88, 0x07, 0x8e, 0xdf, 0xc7, 0x44, 0x04, 0x01, 0x00, 0xeb, 0xde, 0x8e, + 0xdf, 0xf6, 0x44, 0x0b, 0x04, 0x74, 0x17, 0xba, 0x01, 0x00, 0x8e, 0xdf, + 0x8b, 0x1c, 0x8b, 0x4c, 0x02, 0x8b, 0x44, 0x0c, 0xe8, 0x83, 0x1c, 0x8e, + 0xdf, 0x89, 0x44, 0x04, 0xeb, 0xb6, 0x8b, 0x54, 0x0e, 0xeb, 0xe7, 0x75, + 0x06, 0x80, 0x4c, 0x0a, 0x10, 0xeb, 0xb2, 0xc7, 0x44, 0x04, 0x00, 0x00, + 0x80, 0x4c, 0x0a, 0x20, 0xeb, 0xa7, 0x53, 0x51, 0x56, 0x89, 0xc3, 0x89, + 0xd1, 0xe8, 0x2d, 0xff, 0x85, 0xc0, 0x75, 0x05, 0xb8, 0xff, 0xff, 0xeb, + 0x9a, 0x8e, 0xd9, 0xff, 0x4f, 0x04, 0xff, 0x07, 0xc5, 0x37, 0x8a, 0x44, + 0xff, 0x30, 0xe4, 0xeb, 0x8a, 0x53, 0x51, 0x56, 0x89, 0xc3, 0x89, 0xd1, + 0x8e, 0xda, 0xc5, 0x77, 0x06, 0x8b, 0x44, 0x0c, 0x3d, 0x01, 0x00, 0x74, + 0x09, 0x85, 0xc0, 0x75, 0x5c, 0xc7, 0x44, 0x0c, 0x01, 0x00, 0x8e, 0xd9, + 0xf6, 0x47, 0x0a, 0x01, 0x75, 0x54, 0x0e, 0xe8, 0x1d, 0xf7, 0x90, 0x89, + 0xc6, 0x8e, 0xda, 0xc7, 0x04, 0x04, 0x00, 0x8e, 0xd9, 0xb8, 0xff, 0xff, + 0x80, 0x4f, 0x0a, 0x20, 0x8e, 0xd9, 0xf6, 0x47, 0x0a, 0x40, 0x75, 0x2d, + 0x3d, 0x0d, 0x00, 0x75, 0x1a, 0xff, 0x4f, 0x04, 0x83, 0x7f, 0x04, 0x00, + 0x7c, 0x4d, 0xc5, 0x37, 0x8a, 0x04, 0x8e, 0xc1, 0x46, 0x26, 0x8c, 0x5f, + 0x02, 0x8e, 0xd9, 0x30, 0xe4, 0x89, 0x37, 0x3d, 0x1a, 0x00, 0x75, 0x09, + 0x8e, 0xd9, 0xb8, 0xff, 0xff, 0x80, 0x4f, 0x0a, 0x10, 0x5e, 0x59, 0x5b, + 0xcb, 0xb8, 0xff, 0xff, 0xeb, 0xf7, 0xff, 0x4f, 0x04, 0x83, 0x7f, 0x04, + 0x00, 0x7c, 0x13, 0xc5, 0x37, 0x8a, 0x04, 0x8e, 0xc1, 0x46, 0x26, 0x8c, + 0x5f, 0x02, 0x8e, 0xd9, 0x30, 0xe4, 0x89, 0x37, 0xeb, 0xa6, 0x89, 0xd8, + 0x89, 0xca, 0xe8, 0x41, 0xff, 0xeb, 0x9d, 0x89, 0xd8, 0x89, 0xca, 0xe8, + 0x38, 0xff, 0xeb, 0xbb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, + 0x50, 0x89, 0xde, 0x89, 0xc8, 0x89, 0xd3, 0x8d, 0x7e, 0xfc, 0x8b, 0x5e, + 0xfa, 0x88, 0xd0, 0x89, 0xf2, 0xb4, 0x42, 0xcd, 0x21, 0x36, 0x89, 0x05, + 0x36, 0x89, 0x55, 0x02, 0xd1, 0xd2, 0xd1, 0xca, 0x85, 0xd2, 0x7c, 0x0c, + 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, + 0xe8, 0x34, 0x18, 0x99, 0xeb, 0xf4, 0x53, 0x51, 0x52, 0x56, 0x89, 0xc1, + 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x31, 0xf6, 0x85, 0xd2, + 0x7c, 0x0e, 0x89, 0xc8, 0x31, 0xd2, 0xe8, 0xcd, 0x17, 0x89, 0xf0, 0x5e, + 0x5a, 0x59, 0x5b, 0xc3, 0xe8, 0x0c, 0x18, 0x89, 0xc6, 0xeb, 0xeb, 0x53, + 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x89, 0xc6, 0x89, + 0x56, 0xfe, 0x8e, 0xda, 0xc7, 0x46, 0xfc, 0x00, 0x00, 0xf6, 0x44, 0x0b, + 0x10, 0x74, 0x03, 0xe9, 0x85, 0x00, 0xc5, 0x5c, 0x06, 0x8b, 0x47, 0x0a, + 0x8b, 0x57, 0x08, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, 0x41, 0x8e, + 0x5e, 0xfe, 0x80, 0x64, 0x0a, 0xef, 0xf6, 0x44, 0x0b, 0x20, 0x75, 0x34, + 0x8b, 0x44, 0x04, 0x99, 0x89, 0xd3, 0x09, 0xc3, 0x74, 0x14, 0x89, 0xd1, + 0x89, 0xc3, 0xba, 0x01, 0x00, 0xf7, 0xd9, 0x8b, 0x44, 0x0c, 0xf7, 0xdb, + 0x83, 0xd9, 0x00, 0xe8, 0x3e, 0xff, 0x83, 0xfa, 0xff, 0x75, 0x11, 0x3d, + 0xff, 0xff, 0x75, 0x0c, 0x8e, 0x5e, 0xfe, 0xc7, 0x46, 0xfc, 0xff, 0xff, + 0x80, 0x4c, 0x0a, 0x20, 0x8e, 0x5e, 0xfe, 0xc5, 0x5c, 0x06, 0x8b, 0x47, + 0x08, 0x8b, 0x57, 0x0a, 0x8e, 0x5e, 0xfe, 0xc7, 0x44, 0x04, 0x00, 0x00, + 0x89, 0x04, 0x89, 0x54, 0x02, 0x83, 0x7e, 0xfc, 0x00, 0x75, 0x09, 0xc5, + 0x5c, 0x06, 0xf6, 0x47, 0x0e, 0x01, 0x75, 0x65, 0x8b, 0x46, 0xfc, 0x89, + 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x80, 0x64, 0x0b, 0xef, 0xf6, + 0x44, 0x0a, 0x02, 0x74, 0xc3, 0xc5, 0x5c, 0x06, 0x8b, 0x57, 0x0a, 0x8b, + 0x47, 0x08, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0xb2, 0x8e, 0x5e, + 0xfe, 0x89, 0x46, 0xf8, 0x89, 0x56, 0xfa, 0x8b, 0x7c, 0x04, 0x85, 0xff, + 0x74, 0xa2, 0x83, 0x7e, 0xfc, 0x00, 0x75, 0x9c, 0x8e, 0x5e, 0xfe, 0x8b, + 0x5e, 0xf8, 0x8b, 0x4e, 0xfa, 0x89, 0xfa, 0x8b, 0x44, 0x0c, 0xe8, 0x6b, + 0x1a, 0x89, 0xc1, 0x3d, 0xff, 0xff, 0x75, 0x13, 0x8e, 0x5e, 0xfe, 0x89, + 0x46, 0xfc, 0x80, 0x4c, 0x0a, 0x20, 0x01, 0x4e, 0xf8, 0x29, 0xcf, 0xeb, + 0xcd, 0xeb, 0x1b, 0x85, 0xc0, 0x75, 0xf3, 0x0e, 0x3e, 0xe8, 0x2f, 0xf5, + 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x0c, 0x00, 0x8e, 0x5e, 0xfe, 0xc7, + 0x46, 0xfc, 0xff, 0xff, 0xeb, 0xd8, 0x8e, 0x5e, 0xfe, 0x8b, 0x44, 0x0c, + 0x0e, 0xe8, 0x8a, 0x1a, 0x90, 0x3d, 0xff, 0xff, 0x74, 0x03, 0xe9, 0x6b, + 0xff, 0x89, 0x46, 0xfc, 0xe9, 0x65, 0xff, 0xe8, 0xc9, 0xfe, 0xcb, 0x53, + 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc7, + 0xbb, 0xd9, 0x06, 0x8e, 0xdb, 0x31, 0xc9, 0x8b, 0x36, 0x4e, 0x0d, 0x8b, + 0x1e, 0x4c, 0x0d, 0x89, 0x76, 0xfe, 0x8b, 0x46, 0xfe, 0x85, 0xc0, 0x75, + 0x04, 0x85, 0xdb, 0x74, 0x26, 0x8e, 0xd8, 0xc5, 0x77, 0x04, 0x85, 0x7c, + 0x0a, 0x75, 0x0c, 0x8e, 0x5e, 0xfe, 0xc5, 0x37, 0x89, 0xf3, 0x8c, 0x5e, + 0xfe, 0xeb, 0xdf, 0x41, 0xf6, 0x44, 0x0b, 0x10, 0x74, 0xed, 0x89, 0xf0, + 0x8c, 0xda, 0xe8, 0x7a, 0xfe, 0xeb, 0xe4, 0x89, 0xc8, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xb8, 0xff, 0xff, 0xe8, 0x9f, 0xff, + 0xcb, 0x56, 0x89, 0xc6, 0x8e, 0xda, 0x88, 0xd8, 0x8b, 0x1c, 0x8d, 0x57, + 0x01, 0x8e, 0x44, 0x02, 0x89, 0x14, 0x26, 0x88, 0x07, 0xff, 0x44, 0x0c, + 0x5e, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xc6, 0x89, 0xd7, 0xb8, + 0xb1, 0x34, 0x50, 0xff, 0x76, 0x0c, 0xff, 0x76, 0x0a, 0x89, 0xf0, 0x0e, + 0x3e, 0xe8, 0x75, 0x13, 0x8e, 0xdf, 0x01, 0xc6, 0xc6, 0x04, 0x00, 0x5d, + 0x5f, 0x5e, 0xca, 0x04, 0x00, 0x00, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x06, 0x50, 0x52, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, + 0x1e, 0x72, 0x0d, 0xa1, 0x74, 0x0d, 0x89, 0x5e, 0xfc, 0x89, 0x46, 0xfe, + 0x85, 0xc0, 0x75, 0x04, 0x85, 0xdb, 0x74, 0x33, 0x85, 0xd2, 0x75, 0x06, + 0x83, 0x7e, 0xf8, 0x00, 0x74, 0x29, 0xc5, 0x5e, 0xfc, 0x8b, 0x0f, 0x8b, + 0x5f, 0x02, 0x85, 0xdb, 0x75, 0x04, 0x85, 0xc9, 0x74, 0x19, 0x8b, 0x7e, + 0xf8, 0x8b, 0x76, 0xf6, 0x89, 0xc8, 0x89, 0xda, 0x0e, 0xe8, 0x8b, 0x19, + 0x90, 0x85, 0xc0, 0x74, 0x08, 0x83, 0x46, 0xfc, 0x04, 0xeb, 0xd7, 0xeb, + 0x6e, 0x89, 0xf8, 0x89, 0xf2, 0x0e, 0x3e, 0xe8, 0x75, 0x19, 0x85, 0xc0, + 0x75, 0x42, 0x89, 0xc8, 0x89, 0xda, 0x0e, 0xe8, 0x95, 0x19, 0x36, 0x0e, + 0x3e, 0xe8, 0xb4, 0x19, 0x89, 0x46, 0xfa, 0x89, 0xf2, 0x89, 0xf8, 0x0e, + 0x3e, 0xe8, 0x83, 0x19, 0x8b, 0x56, 0xfa, 0x0e, 0x3e, 0xe8, 0xa0, 0x19, + 0x29, 0xc2, 0x75, 0xc5, 0x89, 0xc8, 0x89, 0xda, 0x0e, 0xe8, 0xb7, 0x19, + 0x90, 0x89, 0xd3, 0x89, 0xc1, 0x89, 0xf8, 0x89, 0xf2, 0x0e, 0x3e, 0xe8, + 0xa9, 0x19, 0x89, 0xd6, 0x89, 0xc7, 0xeb, 0x9c, 0x89, 0xc8, 0x89, 0xda, + 0x0e, 0xe8, 0x53, 0x19, 0x90, 0x3d, 0x3d, 0x00, 0x75, 0x9b, 0x89, 0xc8, + 0x89, 0xda, 0x0e, 0xe8, 0x8d, 0x19, 0x90, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0x59, 0x5b, 0xcb, 0x31, 0xc0, 0x31, 0xd2, 0xeb, 0xf2, 0x56, 0x89, 0xc6, + 0x8e, 0xda, 0x84, 0xdb, 0x74, 0x11, 0xc6, 0x04, 0x2f, 0x89, 0xf0, 0xc6, + 0x44, 0x01, 0x63, 0x8c, 0xda, 0xc6, 0x44, 0x02, 0x00, 0x5e, 0xcb, 0xb8, + 0x00, 0x37, 0xcd, 0x21, 0x88, 0x14, 0xeb, 0xe9, 0x53, 0x51, 0x52, 0x55, + 0x89, 0xe5, 0x8d, 0x56, 0x12, 0x8b, 0x5e, 0x0e, 0x16, 0x8b, 0x4e, 0x10, + 0x52, 0x8b, 0x46, 0x0c, 0x0e, 0xe8, 0x67, 0x19, 0x90, 0x5d, 0x5a, 0x59, + 0x5b, 0xcb, 0xe9, 0xe7, 0xe9, 0x89, 0xc1, 0x89, 0xd6, 0x0e, 0x3e, 0xe8, + 0x0d, 0xfa, 0x85, 0xc0, 0x75, 0x07, 0x89, 0xc8, 0x89, 0xf2, 0xe9, 0xd3, + 0xe9, 0x89, 0xd8, 0xe9, 0xb1, 0xe9, 0x53, 0x51, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0x8b, 0x1e, 0x7a, 0x0d, 0x8b, 0x0e, 0x7c, 0x0d, 0xa1, 0x7e, 0x0d, + 0x0e, 0xe8, 0xcf, 0xdc, 0x90, 0xe9, 0x4d, 0x19, 0x89, 0xc0, 0x53, 0x52, + 0x55, 0x89, 0xe5, 0x89, 0xc3, 0x83, 0x3f, 0x00, 0x75, 0x06, 0x89, 0xec, + 0x5d, 0x5a, 0x5b, 0xc3, 0x1e, 0xff, 0x17, 0x1f, 0xeb, 0xf4, 0x53, 0x52, + 0x55, 0x89, 0xe5, 0x89, 0xc3, 0x8b, 0x47, 0x02, 0x8b, 0x17, 0x85, 0xc0, + 0x75, 0x04, 0x85, 0xd2, 0x74, 0xe0, 0x1e, 0xff, 0x1f, 0x1f, 0xeb, 0xda, + 0x53, 0x51, 0x52, 0x56, 0x55, 0x89, 0xe5, 0x89, 0xc2, 0x1e, 0xe8, 0x50, + 0xea, 0xb9, 0xe4, 0x08, 0xbb, 0xc0, 0x08, 0x89, 0xce, 0x88, 0xd0, 0x81, + 0xfb, 0xe4, 0x08, 0x73, 0x16, 0x80, 0x3f, 0x02, 0x75, 0x05, 0x83, 0xc3, + 0x06, 0xeb, 0xf0, 0x3a, 0x47, 0x01, 0x72, 0xf6, 0x89, 0xde, 0x8a, 0x47, + 0x01, 0xeb, 0xef, 0x81, 0xfe, 0xe4, 0x08, 0x74, 0x15, 0x8d, 0x44, 0x02, + 0x80, 0x3c, 0x00, 0x75, 0x08, 0xe8, 0x8a, 0xff, 0xc6, 0x04, 0x02, 0xeb, + 0xc7, 0xe8, 0x9a, 0xff, 0xeb, 0xf6, 0x1f, 0x89, 0xec, 0x5d, 0x5e, 0x5a, + 0x59, 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x55, 0x89, 0xe5, 0x89, 0xc3, 0x89, + 0xd1, 0x1e, 0xe8, 0xf8, 0xe9, 0x88, 0xde, 0xb9, 0xfc, 0x08, 0xbb, 0xe4, + 0x08, 0x89, 0xce, 0x88, 0xf0, 0x81, 0xfb, 0xfc, 0x08, 0x73, 0x16, 0x80, + 0x3f, 0x02, 0x75, 0x05, 0x83, 0xc3, 0x06, 0xeb, 0xf0, 0x3a, 0x47, 0x01, + 0x77, 0xf6, 0x89, 0xde, 0x8a, 0x47, 0x01, 0xeb, 0xef, 0x81, 0xfe, 0xfc, + 0x08, 0x74, 0x1c, 0x3a, 0x54, 0x01, 0x73, 0x05, 0xc6, 0x04, 0x02, 0xeb, + 0xcd, 0x8d, 0x44, 0x02, 0x80, 0x3c, 0x00, 0x75, 0x05, 0xe8, 0x26, 0xff, + 0xeb, 0xee, 0xe8, 0x39, 0xff, 0xeb, 0xe9, 0x1f, 0x89, 0xec, 0x5d, 0x5e, + 0x59, 0x5b, 0xc3, 0x00, 0xc3, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x08, 0x89, 0xc2, 0x8e, 0xd9, 0x8b, 0x4e, 0x0c, 0xc7, 0x46, 0xfc, + 0x00, 0x00, 0x8a, 0x07, 0x3c, 0x20, 0x75, 0x03, 0x43, 0xeb, 0xf7, 0x3c, + 0x09, 0x74, 0xf9, 0x84, 0xc0, 0x74, 0x30, 0x30, 0xc0, 0x80, 0x3f, 0x22, + 0x74, 0x20, 0x89, 0x5e, 0xf8, 0x8c, 0x5e, 0xfa, 0x8c, 0x5e, 0xfe, 0x89, + 0xde, 0x8e, 0x46, 0xfe, 0x80, 0x3f, 0x22, 0x75, 0x53, 0x85, 0xd2, 0x75, + 0x15, 0x43, 0x84, 0xc0, 0x75, 0x09, 0xb0, 0x02, 0xeb, 0xee, 0xb0, 0x01, + 0x43, 0xeb, 0xdb, 0x30, 0xc0, 0xeb, 0xe5, 0xe9, 0x9a, 0x00, 0x3c, 0x01, + 0x75, 0x36, 0x85, 0xc9, 0x75, 0x06, 0x83, 0x7e, 0x0a, 0x00, 0x74, 0x5e, + 0x8b, 0x7e, 0xfc, 0xd1, 0xe7, 0xd1, 0xe7, 0x8e, 0xc1, 0x03, 0x7e, 0x0a, + 0x8b, 0x46, 0xf8, 0x26, 0x89, 0x05, 0x8b, 0x46, 0xfa, 0x26, 0x89, 0x45, + 0x02, 0x8a, 0x07, 0xff, 0x46, 0xfc, 0x84, 0xc0, 0x74, 0x4e, 0x8e, 0x46, + 0xfe, 0x43, 0x26, 0xc6, 0x04, 0x00, 0xeb, 0x82, 0x80, 0x3f, 0x20, 0x75, + 0x2f, 0x84, 0xc0, 0x74, 0xc1, 0x80, 0x3f, 0x00, 0x74, 0xbc, 0x80, 0x3f, + 0x5c, 0x75, 0x11, 0x85, 0xd2, 0x75, 0x24, 0x80, 0x7f, 0x01, 0x22, 0x75, + 0x07, 0x43, 0x80, 0x7f, 0xfe, 0x5c, 0x74, 0x84, 0x85, 0xc9, 0x75, 0x2a, + 0x83, 0x7e, 0x0a, 0x00, 0x75, 0x24, 0x43, 0xe9, 0x76, 0xff, 0xeb, 0x44, + 0x80, 0x3f, 0x09, 0x74, 0xcc, 0xeb, 0xce, 0x80, 0x7f, 0x01, 0x22, 0x75, + 0x05, 0x43, 0xeb, 0xe0, 0xeb, 0x14, 0x80, 0x7f, 0x01, 0x5c, 0x75, 0xd8, + 0x3c, 0x01, 0x74, 0xf1, 0xeb, 0xd2, 0x8a, 0x27, 0x26, 0x88, 0x24, 0x46, + 0xeb, 0xd4, 0x8e, 0x46, 0xfe, 0x26, 0x88, 0x04, 0xc4, 0x76, 0x0e, 0x26, + 0x89, 0x1c, 0x89, 0xf3, 0x8b, 0x46, 0xfc, 0x26, 0x8c, 0x5f, 0x02, 0x89, + 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0xc2, 0x08, 0x00, 0xff, 0x46, 0xfc, 0x80, + 0x3f, 0x00, 0x74, 0xe0, 0xe9, 0x05, 0xff, 0x55, 0x89, 0xe5, 0x56, 0x57, + 0x83, 0xec, 0x0a, 0x50, 0x53, 0x51, 0x8d, 0x56, 0xf2, 0x16, 0x31, 0xc0, + 0x52, 0x8b, 0x5e, 0x04, 0x50, 0x8b, 0x4e, 0x06, 0x50, 0x8b, 0x46, 0xf0, + 0xe8, 0xca, 0xfe, 0x89, 0xc2, 0x8b, 0x46, 0xf2, 0x2b, 0x46, 0x04, 0x89, + 0xc3, 0x05, 0x02, 0x00, 0x24, 0xfe, 0x42, 0x89, 0x46, 0xf6, 0x89, 0xd0, + 0xd1, 0xe0, 0xd1, 0xe0, 0x8b, 0x56, 0xf6, 0x05, 0x04, 0x00, 0x01, 0xc2, + 0x42, 0x80, 0xe2, 0xfe, 0xbe, 0xd9, 0x06, 0x89, 0xd0, 0x43, 0x0e, 0xe8, + 0x34, 0xec, 0x90, 0x89, 0xc7, 0x85, 0xc0, 0x74, 0x30, 0x31, 0xc0, 0x89, + 0x46, 0xf8, 0x89, 0x46, 0xfa, 0x85, 0xf6, 0x75, 0x31, 0x85, 0xff, 0x75, + 0x2d, 0xc5, 0x5e, 0x08, 0x89, 0x07, 0xc5, 0x5e, 0x0c, 0x8b, 0x46, 0xf8, + 0x89, 0x07, 0x8b, 0x46, 0xfa, 0x89, 0xf2, 0x89, 0x47, 0x02, 0x89, 0xf8, + 0x8d, 0x66, 0xfc, 0x5f, 0x5e, 0x5d, 0xc2, 0x0c, 0x00, 0x89, 0xd0, 0x0e, + 0x3e, 0xe8, 0xc5, 0xda, 0x89, 0xc7, 0x89, 0xd6, 0xeb, 0xc3, 0x8b, 0x4e, + 0x06, 0x53, 0x89, 0xf8, 0x89, 0xf2, 0x8b, 0x5e, 0x04, 0x0e, 0x3e, 0xe8, + 0x0b, 0xe8, 0x8b, 0x5e, 0xf6, 0x8b, 0x46, 0xee, 0x8d, 0x56, 0xf2, 0x8e, + 0xde, 0x16, 0x01, 0xfb, 0x52, 0x89, 0x5e, 0xf8, 0x89, 0x07, 0x8b, 0x46, + 0xec, 0x56, 0x89, 0x47, 0x02, 0x8d, 0x47, 0x04, 0x89, 0xf1, 0x50, 0x89, + 0xfb, 0x8b, 0x46, 0xf0, 0xe8, 0x1e, 0xfe, 0x40, 0x89, 0xc3, 0xd1, 0xe3, + 0xd1, 0xe3, 0x8e, 0xde, 0x03, 0x5e, 0xf8, 0xc7, 0x07, 0x00, 0x00, 0x89, + 0x76, 0xfa, 0xc7, 0x47, 0x02, 0x00, 0x00, 0xeb, 0x80, 0x53, 0x51, 0x52, + 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x56, 0x0d, 0x50, 0xb8, 0xd9, 0x06, 0x50, + 0xb8, 0x5e, 0x0d, 0x50, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xff, 0x36, 0x19, + 0x08, 0x8b, 0x1e, 0x1b, 0x08, 0x8b, 0x0e, 0x1d, 0x08, 0xff, 0x36, 0x17, + 0x08, 0xa1, 0x80, 0x0d, 0xe8, 0xec, 0xfe, 0xbb, 0xd9, 0x06, 0x8e, 0xdb, + 0xa3, 0x66, 0x0d, 0x89, 0x16, 0x68, 0x0d, 0xa1, 0x5e, 0x0d, 0x8b, 0x16, + 0x58, 0x0d, 0xa3, 0x60, 0x0d, 0xa3, 0x7e, 0x0d, 0x89, 0x16, 0x5c, 0x0d, + 0xa1, 0x56, 0x0d, 0x89, 0x16, 0x7c, 0x0d, 0xa3, 0x5a, 0x0d, 0xa3, 0x7a, + 0x0d, 0x5a, 0x59, 0x5b, 0xc3, 0x52, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, + 0x68, 0x0d, 0x8b, 0x16, 0x66, 0x0d, 0x85, 0xc0, 0x75, 0x06, 0x85, 0xd2, + 0x75, 0x02, 0x5a, 0xc3, 0x89, 0xd0, 0x8b, 0x16, 0x68, 0x0d, 0x0e, 0xe8, + 0x00, 0xdb, 0x90, 0x5a, 0xc3, 0x52, 0x89, 0xc2, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0xa1, 0x22, 0x08, 0x89, 0x16, 0x22, 0x08, 0x5a, 0xcb, 0x31, 0xc0, + 0xcb, 0x53, 0x56, 0x57, 0x89, 0xc6, 0xb8, 0xd9, 0x06, 0x31, 0xff, 0x8e, + 0xd8, 0xb8, 0xd9, 0x06, 0x8b, 0x1e, 0xe6, 0x07, 0x85, 0xdb, 0x74, 0x15, + 0x39, 0xde, 0x72, 0x09, 0x8e, 0xd8, 0x89, 0xdf, 0x8b, 0x5f, 0x04, 0xeb, + 0xef, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x89, 0x77, 0x02, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0x89, 0x7c, 0x02, 0x89, 0x5c, 0x04, 0x85, 0xff, 0x74, 0x3e, + 0x89, 0x75, 0x04, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xc7, 0x44, 0x10, 0x00, + 0x00, 0xc7, 0x44, 0x08, 0x00, 0x00, 0xc7, 0x44, 0x0c, 0x00, 0x00, 0x8d, + 0x44, 0x10, 0xc7, 0x44, 0x0e, 0x00, 0x00, 0x89, 0x44, 0x12, 0x8b, 0x1c, + 0x89, 0x44, 0x14, 0x83, 0xeb, 0x16, 0x89, 0x44, 0x06, 0x89, 0x5c, 0x16, + 0x01, 0xf3, 0x8d, 0x44, 0x16, 0xc7, 0x47, 0x16, 0xff, 0xff, 0x5f, 0x5e, + 0x5b, 0xc3, 0x89, 0x36, 0xe6, 0x07, 0xeb, 0xbf, 0x53, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0xa1, 0xe6, 0x07, 0x85, 0xc0, 0x74, 0x14, 0x89, 0xc3, 0x8b, + 0x5f, 0x12, 0x8b, 0x07, 0x01, 0xd8, 0x05, 0x02, 0x00, 0x3b, 0x06, 0xf6, + 0x07, 0x75, 0x04, 0x8b, 0x07, 0x5b, 0xcb, 0x31, 0xc0, 0x5b, 0xcb, 0x53, + 0x51, 0x89, 0xc3, 0x89, 0xd1, 0x8e, 0xda, 0x8b, 0x07, 0x89, 0xc2, 0x83, + 0xc2, 0x03, 0x80, 0xe2, 0xfe, 0x39, 0xc2, 0x73, 0x05, 0x31, 0xc0, 0x59, + 0x5b, 0xc3, 0x0e, 0xe8, 0xba, 0xff, 0x39, 0xd0, 0x72, 0x2a, 0x31, 0xd2, + 0x89, 0xd0, 0x83, 0xc2, 0x1e, 0x39, 0xc2, 0x72, 0xe8, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0xa1, 0x24, 0x08, 0x39, 0xc2, 0x73, 0x05, 0x89, 0xc2, 0x80, + 0xe2, 0xfe, 0x8e, 0xd9, 0x89, 0x17, 0x85, 0xd2, 0x74, 0xcf, 0xb8, 0x01, + 0x00, 0x59, 0x5b, 0xc3, 0x29, 0xc2, 0xeb, 0xd4, 0x53, 0x52, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x50, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x22, 0x08, + 0x85, 0xc0, 0x74, 0x09, 0x83, 0x3e, 0xf6, 0x07, 0xfe, 0x75, 0x0a, 0x31, + 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x5b, 0xcb, 0x8d, 0x46, 0xfe, + 0x8c, 0xd2, 0xe8, 0x82, 0xff, 0x85, 0xc0, 0x74, 0xec, 0xb8, 0xd9, 0x06, + 0x8b, 0x5e, 0xfe, 0x8e, 0xd8, 0x03, 0x1e, 0xf6, 0x07, 0x3b, 0x1e, 0xf6, + 0x07, 0x73, 0x03, 0xbb, 0xfe, 0xff, 0x89, 0xd8, 0x0e, 0xe8, 0xd2, 0x14, + 0x90, 0x89, 0xc6, 0x3d, 0xff, 0xff, 0x74, 0xc7, 0x3d, 0xf8, 0xff, 0x77, + 0xc2, 0x39, 0xc3, 0x76, 0xbe, 0x29, 0xc3, 0x89, 0x5e, 0xfe, 0x8d, 0x47, + 0xfe, 0x39, 0xd8, 0x77, 0xb2, 0xba, 0xd9, 0x06, 0x8e, 0xda, 0x89, 0x46, + 0xfe, 0x8b, 0x1e, 0xe6, 0x07, 0x85, 0xdb, 0x74, 0x0b, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0x83, 0x7f, 0x04, 0x00, 0x75, 0x48, 0x85, 0xdb, 0x74, 0x5f, + 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x07, 0x8d, 0x7c, 0xfe, 0x01, 0xd8, + 0x39, 0xc7, 0x75, 0x4f, 0x83, 0x46, 0xfe, 0x02, 0x8b, 0x46, 0xfe, 0x01, + 0x07, 0x8b, 0x46, 0xfe, 0x89, 0xc6, 0x01, 0xfe, 0x89, 0x05, 0xc7, 0x04, + 0xff, 0xff, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x80, 0x0d, 0x01, 0xc7, 0x47, + 0x0a, 0xff, 0xff, 0x8d, 0x45, 0x02, 0xff, 0x47, 0x0c, 0x0e, 0x3e, 0xe8, + 0x9b, 0xea, 0xb8, 0x01, 0x00, 0xe9, 0x51, 0xff, 0x39, 0xf3, 0x76, 0x0a, + 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x5f, 0x04, 0xeb, 0x9b, 0x8b, 0x07, + 0x01, 0xd8, 0x05, 0x02, 0x00, 0x39, 0xf0, 0x73, 0x9f, 0xeb, 0xe9, 0x83, + 0x7e, 0xfe, 0x1c, 0x73, 0x03, 0xe9, 0x2b, 0xff, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0x8b, 0x46, 0xfe, 0x89, 0x04, 0x89, 0xf0, 0x89, 0xf3, 0xe8, 0x08, + 0xfe, 0x89, 0xc7, 0xeb, 0xa9, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, + 0x8e, 0xd9, 0xc5, 0x77, 0x06, 0x8b, 0x44, 0x0c, 0x3d, 0x01, 0x00, 0x74, + 0x0c, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x8b, 0x00, 0xc7, 0x44, 0x0c, 0x01, + 0x00, 0x8e, 0xd9, 0xf6, 0x47, 0x0a, 0x02, 0x75, 0x03, 0xe9, 0x85, 0x00, + 0xc5, 0x77, 0x06, 0x8b, 0x44, 0x0a, 0x8b, 0x7c, 0x08, 0x85, 0xc0, 0x75, + 0x0b, 0x85, 0xff, 0x75, 0x07, 0x89, 0xd8, 0x89, 0xca, 0xe8, 0x8c, 0x00, + 0xbe, 0x00, 0x04, 0x83, 0x7e, 0xfe, 0x0a, 0x75, 0x2e, 0x8e, 0xd9, 0xbe, + 0x00, 0x06, 0xf6, 0x47, 0x0a, 0x40, 0x75, 0x23, 0x80, 0x4f, 0x0b, 0x10, + 0xc5, 0x3f, 0xc6, 0x05, 0x0d, 0x8e, 0xd9, 0xff, 0x07, 0xff, 0x47, 0x04, + 0x8b, 0x47, 0x04, 0x3b, 0x47, 0x0e, 0x75, 0x0b, 0x89, 0xd8, 0x89, 0xca, + 0xe8, 0xf0, 0xf6, 0x85, 0xc0, 0x75, 0x2c, 0x8e, 0xd9, 0x80, 0x4f, 0x0b, + 0x10, 0xc5, 0x3f, 0x8a, 0x46, 0xfe, 0x88, 0x05, 0x8e, 0xd9, 0xff, 0x07, + 0xff, 0x47, 0x04, 0x85, 0x77, 0x0a, 0x75, 0x08, 0x8b, 0x47, 0x04, 0x3b, + 0x47, 0x0e, 0x75, 0x2d, 0x89, 0xd8, 0x89, 0xca, 0xe8, 0xc4, 0xf6, 0x85, + 0xc0, 0x74, 0x22, 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, + 0xcb, 0x0e, 0x3e, 0xe8, 0xe9, 0xec, 0x89, 0xc6, 0x8e, 0xda, 0xc7, 0x04, + 0x04, 0x00, 0x8e, 0xd9, 0xb8, 0xff, 0xff, 0x80, 0x4f, 0x0a, 0x20, 0xeb, + 0xe1, 0x8a, 0x46, 0xfe, 0x30, 0xe4, 0xeb, 0xda, 0x53, 0x51, 0x56, 0x89, + 0xc3, 0x89, 0xd1, 0xe8, 0xe6, 0xf0, 0x8e, 0xd9, 0x83, 0x7f, 0x0e, 0x00, + 0x75, 0x0c, 0x8a, 0x47, 0x0b, 0xa8, 0x02, 0x74, 0x65, 0xc7, 0x47, 0x0e, + 0x86, 0x00, 0x8e, 0xd9, 0x8b, 0x47, 0x0e, 0x0e, 0x3e, 0xe8, 0xe5, 0xd6, + 0x8e, 0xd9, 0xc5, 0x77, 0x06, 0x89, 0x44, 0x08, 0x89, 0x54, 0x0a, 0x8e, + 0xd9, 0xc5, 0x77, 0x06, 0x8b, 0x44, 0x0a, 0x8b, 0x54, 0x08, 0x85, 0xc0, + 0x75, 0x4e, 0x85, 0xd2, 0x75, 0x4a, 0x8e, 0xd9, 0x80, 0x67, 0x0b, 0xf8, + 0x80, 0x4f, 0x0b, 0x04, 0xc5, 0x77, 0x06, 0x8d, 0x47, 0x10, 0x89, 0x4c, + 0x0a, 0x89, 0x44, 0x08, 0x8e, 0xd9, 0xc7, 0x47, 0x0e, 0x01, 0x00, 0x8e, + 0xd9, 0xc5, 0x77, 0x06, 0x8b, 0x44, 0x08, 0x8b, 0x54, 0x0a, 0x8e, 0xd9, + 0xc7, 0x47, 0x04, 0x00, 0x00, 0x89, 0x07, 0x89, 0x57, 0x02, 0x5e, 0x59, + 0x5b, 0xc3, 0xa8, 0x04, 0x74, 0x07, 0xc7, 0x47, 0x0e, 0x40, 0x00, 0xeb, + 0x95, 0xc7, 0x47, 0x0e, 0x00, 0x02, 0xeb, 0x8e, 0x8e, 0xd9, 0x80, 0x4f, + 0x0a, 0x08, 0xeb, 0xcb, 0x56, 0x89, 0xc6, 0x8e, 0xc2, 0x8e, 0xd9, 0xc7, + 0x47, 0x04, 0x00, 0x00, 0x26, 0x8a, 0x04, 0x3c, 0x2d, 0x74, 0x0b, 0x3c, + 0x23, 0x75, 0x0d, 0x80, 0x4f, 0x04, 0x01, 0x46, 0xeb, 0xee, 0x80, 0x4f, + 0x04, 0x08, 0xeb, 0xf7, 0x3c, 0x2b, 0x75, 0x0a, 0x80, 0x4f, 0x04, 0x04, + 0x80, 0x67, 0x04, 0xfd, 0xeb, 0xe9, 0x3c, 0x20, 0x75, 0x0c, 0xf6, 0x47, + 0x04, 0x04, 0x75, 0xdf, 0x80, 0x4f, 0x04, 0x02, 0xeb, 0xd9, 0x3c, 0x30, + 0x75, 0x05, 0x88, 0x47, 0x1b, 0xeb, 0xd0, 0x89, 0xf0, 0x8c, 0xc2, 0x5e, + 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x8b, 0x7e, 0x08, + 0x89, 0xc6, 0x8e, 0xda, 0x89, 0x5e, 0xfc, 0x89, 0x4e, 0xfe, 0x8e, 0x46, + 0x0a, 0x89, 0xfb, 0x8c, 0xc1, 0x26, 0xc6, 0x45, 0x1b, 0x20, 0xe8, 0x8b, + 0xff, 0x8e, 0x46, 0x0a, 0x89, 0xc3, 0x8e, 0xda, 0x26, 0xc7, 0x45, 0x08, + 0x00, 0x00, 0x89, 0xc6, 0x80, 0x3f, 0x2a, 0x74, 0x27, 0x8e, 0x46, 0x0a, + 0x8a, 0x04, 0x3c, 0x30, 0x7c, 0x3a, 0x3c, 0x39, 0x7f, 0x36, 0xba, 0x0a, + 0x00, 0x26, 0x8b, 0x45, 0x08, 0xf7, 0xea, 0x89, 0xc2, 0x8a, 0x04, 0x98, + 0x2d, 0x30, 0x00, 0x01, 0xc2, 0x46, 0x26, 0x89, 0x55, 0x08, 0xeb, 0xdc, + 0xc4, 0x5e, 0xfc, 0x26, 0x83, 0x07, 0x02, 0x26, 0xc4, 0x07, 0x89, 0xc3, + 0x26, 0x8b, 0x47, 0xfe, 0x8e, 0x46, 0x0a, 0x26, 0x89, 0x45, 0x08, 0x85, + 0xc0, 0x7c, 0x42, 0x46, 0x8e, 0x46, 0x0a, 0x26, 0xc7, 0x45, 0x0a, 0xff, + 0xff, 0x80, 0x3c, 0x2e, 0x75, 0x5a, 0x46, 0x26, 0xc7, 0x45, 0x0a, 0x00, + 0x00, 0x80, 0x3c, 0x2a, 0x74, 0x32, 0x8e, 0x46, 0x0a, 0x8a, 0x04, 0x3c, + 0x30, 0x7c, 0x45, 0x3c, 0x39, 0x7f, 0x41, 0xba, 0x0a, 0x00, 0x26, 0x8b, + 0x45, 0x0a, 0xf7, 0xea, 0x89, 0xc2, 0x8a, 0x04, 0x98, 0x2d, 0x30, 0x00, + 0x01, 0xc2, 0x46, 0x26, 0x89, 0x55, 0x0a, 0xeb, 0xdc, 0x26, 0xf7, 0x5d, + 0x08, 0x26, 0x80, 0x4d, 0x04, 0x08, 0xeb, 0xb3, 0xc4, 0x5e, 0xfc, 0x26, + 0x83, 0x07, 0x02, 0x26, 0xc4, 0x07, 0x89, 0xc3, 0x26, 0x8b, 0x47, 0xfe, + 0x8e, 0x46, 0x0a, 0x26, 0x89, 0x45, 0x0a, 0x85, 0xc0, 0x7c, 0x21, 0x46, + 0x8a, 0x04, 0x8d, 0x54, 0x01, 0x3c, 0x68, 0x73, 0x1f, 0x3c, 0x4c, 0x73, + 0x55, 0x3c, 0x49, 0x75, 0x53, 0x80, 0x7c, 0x01, 0x36, 0x75, 0x3f, 0x80, + 0x7c, 0x02, 0x34, 0x75, 0x39, 0xe9, 0x99, 0x00, 0x26, 0xc7, 0x45, 0x0a, + 0xff, 0xff, 0xeb, 0xd7, 0x8d, 0x5c, 0x02, 0x77, 0x12, 0x80, 0x7c, 0x01, + 0x68, 0x75, 0x53, 0x8e, 0x46, 0x0a, 0x89, 0xde, 0x26, 0x80, 0x4d, 0x04, + 0x10, 0xeb, 0x17, 0x3c, 0x74, 0x73, 0x23, 0x3c, 0x6c, 0x75, 0x34, 0x3a, + 0x44, 0x01, 0x75, 0x24, 0x8e, 0x46, 0x0a, 0x89, 0xde, 0x26, 0x80, 0x4d, + 0x04, 0x80, 0x89, 0xf0, 0x8c, 0xda, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, + 0x04, 0x00, 0xeb, 0x24, 0xeb, 0x38, 0x76, 0x59, 0x3c, 0x7a, 0x74, 0x55, + 0x3c, 0x77, 0x75, 0xe6, 0x8e, 0x46, 0x0a, 0x46, 0x26, 0x80, 0x4d, 0x04, + 0x40, 0xeb, 0xdb, 0x3c, 0x6a, 0x75, 0xd7, 0x8e, 0x46, 0x0a, 0x89, 0xd6, + 0xeb, 0xcb, 0xeb, 0x25, 0x76, 0x39, 0x3c, 0x57, 0x74, 0x14, 0x3c, 0x4e, + 0x75, 0xc4, 0x8e, 0x46, 0x0a, 0x89, 0xd6, 0x26, 0x80, 0x4d, 0x05, 0x02, + 0xeb, 0xb8, 0x3c, 0x46, 0x75, 0xb4, 0x8e, 0x46, 0x0a, 0x46, 0x26, 0x80, + 0x4d, 0x05, 0x04, 0xeb, 0xa9, 0x8e, 0x46, 0x0a, 0x89, 0xd6, 0x26, 0x80, + 0x4d, 0x04, 0x20, 0xeb, 0x9d, 0x8e, 0x46, 0x0a, 0x83, 0xc6, 0x03, 0xeb, + 0x90, 0xeb, 0x0c, 0x8e, 0x46, 0x0a, 0x89, 0xd6, 0x26, 0x80, 0x4d, 0x05, + 0x01, 0xeb, 0x87, 0x46, 0xeb, 0x84, 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd7, + 0x89, 0xda, 0x8e, 0xdf, 0x31, 0xc0, 0x39, 0xd0, 0x74, 0x0b, 0x89, 0xf3, + 0x46, 0x80, 0x3f, 0x00, 0x74, 0x03, 0x40, 0xeb, 0xf1, 0x5f, 0x5e, 0xc3, + 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xdf, 0x89, + 0xc6, 0x89, 0x56, 0xfe, 0x31, 0xc9, 0x83, 0xfb, 0xff, 0x75, 0x2a, 0x8e, + 0x5e, 0xfe, 0x8b, 0x04, 0x85, 0xc0, 0x74, 0x18, 0x89, 0xc3, 0x8c, 0xd2, + 0x8d, 0x46, 0xfc, 0x83, 0xc6, 0x02, 0x0e, 0xe8, 0xd5, 0x10, 0x90, 0x3d, + 0xff, 0xff, 0x74, 0xe3, 0x01, 0xc1, 0xeb, 0xdf, 0x89, 0xc8, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x59, 0xc3, 0x8e, 0x5e, 0xfe, 0x8b, 0x04, 0x85, 0xc0, + 0x74, 0x1c, 0x39, 0xf9, 0x7f, 0x18, 0x89, 0xc3, 0x8c, 0xd2, 0x8d, 0x46, + 0xfc, 0x83, 0xc6, 0x02, 0x0e, 0xe8, 0xa7, 0x10, 0x90, 0x3d, 0xff, 0xff, + 0x74, 0xdf, 0x01, 0xc1, 0xeb, 0xdb, 0x39, 0xf9, 0x7e, 0xce, 0x89, 0xf8, + 0xeb, 0xcc, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0c, 0x53, 0x89, + 0xcf, 0x89, 0x56, 0xfe, 0xba, 0x10, 0x00, 0x8d, 0x5e, 0xf4, 0x8c, 0xd1, + 0x0e, 0xe8, 0x01, 0x11, 0x90, 0x8d, 0x46, 0xf4, 0x8c, 0xd2, 0x8b, 0x5e, + 0xf2, 0x0e, 0x3e, 0xe8, 0x02, 0xe1, 0x89, 0xc6, 0x8b, 0x46, 0xfe, 0x8e, + 0xdf, 0x01, 0xc3, 0x89, 0xf2, 0x83, 0xc6, 0xff, 0x85, 0xd2, 0x7e, 0x13, + 0x89, 0xc2, 0x83, 0xc3, 0xff, 0x05, 0xff, 0xff, 0x85, 0xd2, 0x7e, 0x07, + 0x8a, 0x52, 0xf4, 0x88, 0x17, 0xeb, 0xe4, 0x8b, 0x5e, 0xf2, 0x8e, 0xdf, + 0x01, 0xc3, 0x89, 0xc2, 0x83, 0xc3, 0xff, 0x05, 0xff, 0xff, 0x85, 0xd2, + 0x7e, 0x05, 0xc6, 0x07, 0x30, 0xeb, 0xef, 0x8b, 0x5e, 0xf2, 0x8e, 0xdf, + 0x03, 0x5e, 0xfe, 0xc6, 0x07, 0x00, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x89, 0xc6, 0x89, 0x56, + 0xfa, 0x89, 0x5e, 0xf6, 0x89, 0x4e, 0xf8, 0x85, 0xc9, 0x7c, 0x36, 0xc5, + 0x5e, 0x08, 0x83, 0x7f, 0x0a, 0xff, 0x75, 0x05, 0xc7, 0x47, 0x0a, 0x04, + 0x00, 0xba, 0x0a, 0x00, 0x8b, 0x4e, 0xfa, 0x8b, 0x46, 0xf8, 0x89, 0xf3, + 0x0e, 0xe8, 0x71, 0x10, 0x90, 0x89, 0x76, 0xfc, 0x8b, 0x46, 0xfa, 0x8e, + 0x5e, 0xfa, 0x89, 0x46, 0xfe, 0x8d, 0x44, 0x01, 0x80, 0x3c, 0x00, 0x74, + 0x16, 0x89, 0xc6, 0xeb, 0xf4, 0x8e, 0xda, 0xf7, 0x5e, 0xf8, 0xc6, 0x04, + 0x2d, 0xf7, 0x5e, 0xf6, 0x83, 0x5e, 0xf8, 0x00, 0x46, 0xeb, 0xb8, 0xc5, + 0x5e, 0x08, 0x83, 0x7f, 0x0a, 0x00, 0x74, 0x40, 0x8e, 0x5e, 0xfa, 0x31, + 0xff, 0xc6, 0x04, 0x2e, 0x89, 0xc6, 0xc5, 0x5e, 0x08, 0x3b, 0x7f, 0x0a, + 0x7d, 0x28, 0x8b, 0x46, 0xf6, 0xbb, 0x0a, 0x00, 0x31, 0xd2, 0x31, 0xc9, + 0xc7, 0x46, 0xf8, 0x00, 0x00, 0x0e, 0x3e, 0xe8, 0x86, 0xdb, 0x89, 0x56, + 0xf8, 0x89, 0x46, 0xf6, 0x8a, 0x46, 0xf8, 0x8e, 0x5e, 0xfa, 0x04, 0x30, + 0x47, 0x88, 0x04, 0x46, 0xeb, 0xd0, 0x8e, 0x5e, 0xfa, 0xc6, 0x04, 0x00, + 0xf6, 0x46, 0xf7, 0x80, 0x75, 0x03, 0xe9, 0xd5, 0xfd, 0x8b, 0x46, 0xfa, + 0x3b, 0x46, 0xfe, 0x75, 0x05, 0x3b, 0x76, 0xfc, 0x74, 0x1a, 0x83, 0xc6, + 0xff, 0x8e, 0xd8, 0x80, 0x3c, 0x2e, 0x75, 0x03, 0x83, 0xc6, 0xff, 0x8e, + 0x5e, 0xfa, 0x80, 0x3c, 0x39, 0x75, 0x3f, 0xc6, 0x04, 0x30, 0xeb, 0xdc, + 0x8e, 0xd8, 0xc6, 0x04, 0x31, 0x8e, 0x5e, 0xfa, 0x46, 0x8a, 0x04, 0x8d, + 0x7c, 0x01, 0x3c, 0x30, 0x75, 0x04, 0x89, 0xfe, 0xeb, 0xf3, 0x3c, 0x2e, + 0x75, 0x13, 0xc6, 0x04, 0x30, 0x8d, 0x75, 0x01, 0x88, 0x05, 0x8e, 0x5e, + 0xfa, 0x80, 0x3c, 0x30, 0x75, 0x03, 0x46, 0xeb, 0xf8, 0x8e, 0x5e, 0xfa, + 0xc6, 0x04, 0x30, 0x46, 0xc6, 0x04, 0x00, 0xe9, 0x74, 0xfd, 0xfe, 0x04, + 0xe9, 0x6f, 0xfd, 0x53, 0x89, 0xc3, 0x8e, 0xda, 0xf6, 0x47, 0x04, 0x08, + 0x75, 0x22, 0x80, 0x7f, 0x1b, 0x30, 0x75, 0x1c, 0x8b, 0x47, 0x08, 0x2b, + 0x47, 0x0e, 0x2b, 0x47, 0x10, 0x2b, 0x47, 0x12, 0x2b, 0x47, 0x14, 0x2b, + 0x47, 0x16, 0x2b, 0x47, 0x18, 0x85, 0xc0, 0x7e, 0x03, 0x01, 0x47, 0x10, + 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x50, 0x52, + 0x89, 0xde, 0x89, 0x4e, 0xfe, 0x8e, 0x5e, 0xfe, 0x83, 0x7c, 0x12, 0x00, + 0x7f, 0x08, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x02, 0x00, 0x8e, 0x5e, + 0xf6, 0x8b, 0x5e, 0xf8, 0x8d, 0x46, 0xfa, 0x8c, 0xd2, 0x8b, 0x1f, 0x83, + 0x46, 0xf8, 0x02, 0x0e, 0x3e, 0xe8, 0xa3, 0x0e, 0x89, 0xc1, 0x3d, 0xff, + 0xff, 0x74, 0xd2, 0x8e, 0x5e, 0xfe, 0x3b, 0x44, 0x12, 0x7f, 0x25, 0x8d, + 0x7e, 0xfa, 0x8c, 0x56, 0xfc, 0x49, 0x83, 0xf9, 0xff, 0x74, 0xbe, 0x8e, + 0x5e, 0xfc, 0x8a, 0x05, 0x98, 0x8b, 0x56, 0xfe, 0x89, 0xc3, 0x89, 0xf0, + 0xff, 0x56, 0x08, 0x8e, 0x5e, 0xfe, 0x47, 0xff, 0x4c, 0x12, 0xeb, 0xe1, + 0xc7, 0x44, 0x12, 0x00, 0x00, 0xeb, 0xa7, 0xfc, 0xbd, 0x42, 0x3b, 0x48, + 0x15, 0x48, 0x3b, 0x48, 0xbd, 0x42, 0xa1, 0x44, 0xbd, 0x42, 0x3b, 0x48, + 0x3b, 0x48, 0x3b, 0x48, 0x3b, 0x48, 0x3b, 0x48, 0x3b, 0x48, 0x3b, 0x48, + 0x3b, 0x48, 0xfb, 0x46, 0x3b, 0x48, 0x3b, 0x48, 0xf7, 0x44, 0x3b, 0x48, + 0x3b, 0x48, 0x3b, 0x48, 0x3b, 0x48, 0x87, 0x45, 0x3b, 0x48, 0x3b, 0x48, + 0x3b, 0x48, 0x3b, 0x48, 0x3b, 0x48, 0x3b, 0x48, 0x3b, 0x48, 0x3b, 0x48, + 0xbd, 0x42, 0x3b, 0x46, 0xb6, 0x47, 0xe6, 0x45, 0xbd, 0x42, 0xa1, 0x44, + 0xbd, 0x42, 0x3b, 0x48, 0xe6, 0x45, 0x3b, 0x48, 0x3b, 0x48, 0x3b, 0x48, + 0x3b, 0x48, 0x3b, 0x48, 0x42, 0x46, 0xfb, 0x46, 0x3b, 0x48, 0x3b, 0x48, + 0xf7, 0x44, 0x3b, 0x48, 0xe6, 0x45, 0x3b, 0x48, 0x3b, 0x48, 0x87, 0x45, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x1a, 0x8b, 0x76, 0x08, 0x89, + 0x46, 0xfc, 0x89, 0x56, 0xfe, 0x8e, 0xd9, 0x8e, 0x46, 0x0a, 0x26, 0xc7, + 0x44, 0x18, 0x00, 0x00, 0x89, 0x46, 0xf4, 0x26, 0x8b, 0x44, 0x18, 0x26, + 0x89, 0x44, 0x16, 0x26, 0x89, 0x44, 0x14, 0x26, 0x89, 0x44, 0x12, 0x26, + 0x89, 0x44, 0x10, 0x26, 0x89, 0x44, 0x0e, 0x26, 0x8a, 0x44, 0x1a, 0x89, + 0x56, 0xf6, 0x3c, 0x69, 0x73, 0x53, 0x3c, 0x64, 0x75, 0x4a, 0x8e, 0x46, + 0x0a, 0x26, 0x8a, 0x44, 0x04, 0xa8, 0x80, 0x74, 0x41, 0x83, 0x07, 0x08, + 0xc4, 0x3f, 0x26, 0x8b, 0x45, 0xfe, 0x89, 0x46, 0xf2, 0x26, 0x8b, 0x45, + 0xfc, 0x89, 0x46, 0xf0, 0x26, 0x8b, 0x45, 0xfa, 0x89, 0x46, 0xee, 0x26, + 0x8b, 0x45, 0xf8, 0x89, 0x46, 0xec, 0xe9, 0x13, 0x01, 0xff, 0x76, 0x0a, + 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0xbf, 0xd9, 0x06, 0x8c, 0xd9, 0x56, + 0x8e, 0xdf, 0xff, 0x46, 0xf4, 0xff, 0x1e, 0x6e, 0x08, 0xe9, 0x09, 0x02, + 0xeb, 0x41, 0xe9, 0xaf, 0x00, 0x76, 0xaf, 0x3c, 0x78, 0x75, 0x2e, 0x8e, + 0x46, 0x0a, 0x26, 0x8a, 0x44, 0x04, 0xa8, 0x80, 0x74, 0x35, 0x83, 0x07, + 0x08, 0xc4, 0x3f, 0x26, 0x8b, 0x45, 0xfe, 0x89, 0x46, 0xf2, 0x26, 0x8b, + 0x45, 0xfc, 0x89, 0x46, 0xf0, 0x26, 0x8b, 0x45, 0xfa, 0x89, 0x46, 0xee, + 0x26, 0x8b, 0x45, 0xf8, 0x89, 0x46, 0xec, 0xeb, 0x29, 0x3c, 0x75, 0x74, + 0xce, 0x3c, 0x6f, 0x74, 0xca, 0xeb, 0x1f, 0x3c, 0x62, 0x74, 0xc4, 0x3c, + 0x58, 0xeb, 0xf4, 0xa8, 0x40, 0x74, 0x30, 0x83, 0x07, 0x04, 0xc4, 0x3f, + 0x26, 0x8b, 0x45, 0xfc, 0x89, 0x46, 0xf8, 0x26, 0x8b, 0x45, 0xfe, 0x89, + 0x46, 0xfa, 0x8e, 0x46, 0x0a, 0x26, 0x8a, 0x44, 0x1a, 0x2c, 0x41, 0xc7, + 0x46, 0xea, 0x0a, 0x00, 0x3c, 0x37, 0x77, 0x59, 0x30, 0xe4, 0x89, 0xc7, + 0xd1, 0xe7, 0x2e, 0xff, 0xa5, 0xd8, 0x41, 0x83, 0x07, 0x02, 0xc4, 0x3f, + 0xc7, 0x46, 0xfa, 0x00, 0x00, 0x26, 0x8b, 0x45, 0xfe, 0x8e, 0x46, 0x0a, + 0x89, 0x46, 0xf8, 0x26, 0xf6, 0x44, 0x04, 0x20, 0x74, 0x07, 0xc7, 0x46, + 0xfa, 0x00, 0x00, 0xeb, 0xc1, 0x26, 0xf6, 0x44, 0x04, 0x10, 0x74, 0xba, + 0x8a, 0x46, 0xf8, 0x30, 0xe4, 0x89, 0x46, 0xf8, 0x30, 0xc0, 0xeb, 0xab, + 0xa8, 0x40, 0x74, 0x18, 0x83, 0x07, 0x04, 0xc4, 0x3f, 0x26, 0x8b, 0x45, + 0xfc, 0x89, 0x46, 0xf8, 0x26, 0x8b, 0x45, 0xfe, 0x89, 0x46, 0xfa, 0xeb, + 0x2b, 0xe9, 0x93, 0x04, 0x83, 0x07, 0x02, 0xc4, 0x3f, 0x26, 0x8b, 0x45, + 0xfe, 0x99, 0x8e, 0x46, 0x0a, 0x89, 0x46, 0xf8, 0x26, 0x8a, 0x44, 0x04, + 0x89, 0x56, 0xfa, 0xa8, 0x20, 0x75, 0x03, 0xe9, 0x76, 0x00, 0x8b, 0x46, + 0xf8, 0x99, 0x89, 0x46, 0xf8, 0x89, 0x56, 0xfa, 0x8e, 0x46, 0x0a, 0x30, + 0xc0, 0x26, 0xf6, 0x44, 0x04, 0x80, 0x74, 0x6a, 0x83, 0x7e, 0xf2, 0x00, + 0x7c, 0x10, 0x75, 0x0a, 0x83, 0x7e, 0xf0, 0x00, 0x75, 0x04, 0x83, 0x7e, + 0xee, 0x00, 0x84, 0xc0, 0x74, 0x69, 0x8e, 0x46, 0x0a, 0x26, 0x8b, 0x44, + 0x0e, 0x89, 0xc2, 0x8b, 0x7e, 0xfc, 0x42, 0x01, 0xc7, 0x26, 0x89, 0x54, + 0x0e, 0x8e, 0x46, 0xfe, 0x26, 0xc6, 0x05, 0x2d, 0x8e, 0x46, 0x0a, 0x26, + 0xf6, 0x44, 0x04, 0x80, 0x74, 0x38, 0x31, 0xc0, 0x2b, 0x46, 0xec, 0x89, + 0x46, 0xec, 0xb8, 0x00, 0x00, 0x1b, 0x46, 0xee, 0x89, 0x46, 0xee, 0xb8, + 0x00, 0x00, 0x1b, 0x46, 0xf0, 0x89, 0x46, 0xf0, 0xb8, 0x00, 0x00, 0x1b, + 0x46, 0xf2, 0x89, 0x46, 0xf2, 0xe9, 0xfe, 0xfe, 0xa8, 0x10, 0x74, 0x90, + 0x8a, 0x46, 0xf8, 0x98, 0xeb, 0x83, 0x83, 0x7e, 0xfa, 0x00, 0x7c, 0xa6, + 0xeb, 0xa0, 0xf7, 0x5e, 0xfa, 0xf7, 0x5e, 0xf8, 0x83, 0x5e, 0xfa, 0x00, + 0xe9, 0xdf, 0xfe, 0x8e, 0x46, 0x0a, 0x26, 0x8a, 0x44, 0x04, 0xa8, 0x04, + 0x74, 0x1a, 0x26, 0x8b, 0x44, 0x0e, 0x89, 0xc2, 0x8b, 0x7e, 0xfc, 0x42, + 0x01, 0xc7, 0x26, 0x89, 0x54, 0x0e, 0x8e, 0x46, 0xfe, 0x26, 0xc6, 0x05, + 0x2b, 0xe9, 0xba, 0xfe, 0xa8, 0x02, 0x75, 0x03, 0xe9, 0xb3, 0xfe, 0x26, + 0x8b, 0x44, 0x0e, 0x89, 0xc2, 0x8b, 0x7e, 0xfc, 0x42, 0x01, 0xc7, 0x26, + 0x89, 0x54, 0x0e, 0x8e, 0x46, 0xfe, 0x26, 0xc6, 0x05, 0x20, 0xe9, 0x99, + 0xfe, 0x8e, 0x46, 0x0a, 0x26, 0xf6, 0x44, 0x04, 0x20, 0x75, 0x03, 0xe9, + 0x0f, 0xfe, 0x83, 0x07, 0x04, 0x8b, 0x56, 0xfe, 0xc5, 0x3f, 0x06, 0x8b, + 0x45, 0xfc, 0x56, 0x89, 0x46, 0xf8, 0x8b, 0x45, 0xfe, 0x8b, 0x5e, 0xf8, + 0x89, 0x46, 0xfa, 0x89, 0xc1, 0x8b, 0x46, 0xfc, 0xe8, 0x51, 0xfb, 0xbb, + 0xff, 0xff, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0xe8, 0x43, 0xfa, 0x8e, + 0x5e, 0x0a, 0x89, 0x44, 0x12, 0x8b, 0x56, 0x0a, 0x89, 0xf0, 0xe8, 0x4e, + 0xfc, 0x8b, 0x46, 0xf4, 0x8b, 0x56, 0xf6, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0xc2, 0x08, 0x00, 0xc4, 0x7e, 0xfc, 0x26, 0xc6, 0x05, 0x00, 0x8e, 0x46, + 0x0a, 0x26, 0x8a, 0x44, 0x05, 0xa8, 0x04, 0x75, 0x1a, 0xa8, 0x02, 0x74, + 0x16, 0x83, 0x07, 0x02, 0xc5, 0x3f, 0x8b, 0x5d, 0xfe, 0x85, 0xdb, 0x74, + 0x23, 0xc7, 0x46, 0xf6, 0xd9, 0x06, 0x89, 0x5e, 0xf4, 0xeb, 0x19, 0x83, + 0x07, 0x04, 0xc5, 0x3f, 0x8b, 0x45, 0xfe, 0x8b, 0x5d, 0xfc, 0x85, 0xc0, + 0x75, 0x04, 0x85, 0xdb, 0x74, 0x06, 0x89, 0x5e, 0xf4, 0x89, 0x46, 0xf6, + 0x8e, 0x5e, 0x0a, 0x80, 0x7c, 0x1a, 0x53, 0x75, 0x3a, 0xf6, 0x44, 0x04, + 0x20, 0x74, 0x26, 0x8b, 0x46, 0xf4, 0x8b, 0x56, 0xf6, 0x8b, 0x5c, 0x0a, + 0xe8, 0xc7, 0xf9, 0x8e, 0x5e, 0x0a, 0x89, 0x44, 0x12, 0x83, 0x7c, 0x0a, + 0x00, 0x7d, 0x03, 0xe9, 0x7b, 0xff, 0x3b, 0x44, 0x0a, 0x7e, 0xf8, 0x8b, + 0x44, 0x0a, 0xe9, 0x6d, 0xff, 0x8b, 0x46, 0xf4, 0x8b, 0x56, 0xf6, 0x8b, + 0x5c, 0x0a, 0xe8, 0xbf, 0xf9, 0xeb, 0xd8, 0xf6, 0x44, 0x04, 0x40, 0x75, + 0xec, 0xeb, 0xc4, 0x8e, 0x5e, 0x0a, 0x8a, 0x44, 0x04, 0xa8, 0x01, 0x74, + 0x50, 0xa8, 0x80, 0x75, 0x03, 0xe9, 0x9a, 0x00, 0x83, 0x7e, 0xf2, 0x00, + 0x75, 0x12, 0x83, 0x7e, 0xf0, 0x00, 0x75, 0x0c, 0x83, 0x7e, 0xee, 0x00, + 0x75, 0x06, 0x83, 0x7e, 0xec, 0x00, 0x74, 0x31, 0x8b, 0x44, 0x0e, 0x89, + 0xc2, 0x8b, 0x5e, 0xfc, 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0e, 0x8e, 0x5e, + 0xfe, 0xc6, 0x07, 0x30, 0x8e, 0x5e, 0x0a, 0x8b, 0x44, 0x0e, 0x89, 0xc2, + 0x8b, 0x5e, 0xfc, 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0e, 0x8e, 0x46, 0x0a, + 0x8e, 0x5e, 0xfe, 0x26, 0x8a, 0x44, 0x1a, 0x88, 0x07, 0xc7, 0x46, 0xea, + 0x10, 0x00, 0x8e, 0x5e, 0x0a, 0x83, 0x7c, 0x0a, 0xff, 0x74, 0x04, 0xc6, + 0x44, 0x1b, 0x20, 0x8e, 0x5e, 0x0a, 0x8b, 0x5e, 0xfc, 0x8b, 0x46, 0xfe, + 0x03, 0x5c, 0x0e, 0x89, 0x46, 0xf6, 0x89, 0x5e, 0xf4, 0xf6, 0x44, 0x04, + 0x80, 0x74, 0x3e, 0x83, 0x7c, 0x0a, 0x00, 0x75, 0x3b, 0x83, 0x7e, 0xf2, + 0x00, 0x75, 0x35, 0x83, 0x7e, 0xf0, 0x00, 0x75, 0x2f, 0x83, 0x7e, 0xee, + 0x00, 0x75, 0x29, 0x83, 0x7e, 0xec, 0x00, 0x75, 0x23, 0x8e, 0xd8, 0xc6, + 0x07, 0x00, 0x31, 0xc0, 0xeb, 0x5b, 0x8b, 0x46, 0xfa, 0x0b, 0x46, 0xf8, + 0xe9, 0x73, 0xff, 0xc7, 0x46, 0xea, 0x02, 0x00, 0xeb, 0xa4, 0xc7, 0x46, + 0xea, 0x08, 0x00, 0xeb, 0x9d, 0xe9, 0x70, 0x00, 0xff, 0x76, 0xea, 0x8e, + 0x5e, 0x0a, 0x8b, 0x46, 0xfc, 0x8b, 0x5e, 0xf0, 0x8b, 0x4e, 0xee, 0xff, + 0x76, 0xfe, 0x03, 0x44, 0x0e, 0x8b, 0x56, 0xec, 0x50, 0x8b, 0x46, 0xf2, + 0x0e, 0xe8, 0x8b, 0x0a, 0x90, 0x8e, 0x5e, 0x0a, 0x80, 0x7c, 0x1a, 0x58, + 0x75, 0x0b, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0x0e, 0xe8, 0xbd, 0x0b, + 0x90, 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xf4, 0x8b, 0x56, 0xf6, 0xe8, 0x91, + 0xf8, 0x8e, 0x5e, 0x0a, 0x89, 0x44, 0x12, 0x3b, 0x44, 0x0a, 0x7c, 0x57, + 0xf6, 0x44, 0x04, 0x01, 0x75, 0x03, 0xe9, 0x40, 0xfe, 0x83, 0x7e, 0xea, + 0x0a, 0x7d, 0xf7, 0x85, 0xc0, 0x74, 0x08, 0xc5, 0x5e, 0xf4, 0x80, 0x3f, + 0x30, 0x74, 0xeb, 0x8e, 0x5e, 0x0a, 0xff, 0x44, 0x10, 0xe9, 0x25, 0xfe, + 0x83, 0x7c, 0x0a, 0x00, 0x75, 0x10, 0x8b, 0x46, 0xfa, 0x0b, 0x46, 0xf8, + 0x75, 0x08, 0x8e, 0x5e, 0xf6, 0xc6, 0x07, 0x00, 0xeb, 0xbb, 0xff, 0x76, + 0xea, 0x8e, 0x5e, 0x0a, 0x8b, 0x5e, 0xfc, 0x8b, 0x4e, 0xfe, 0x8b, 0x46, + 0xf8, 0x8b, 0x56, 0xfa, 0x03, 0x5c, 0x0e, 0x0e, 0x3e, 0xe8, 0x73, 0x0b, + 0xe9, 0x7e, 0xff, 0x8b, 0x44, 0x0a, 0x2b, 0x44, 0x12, 0x89, 0x44, 0x10, + 0xe9, 0xe6, 0xfd, 0x8e, 0x46, 0x0a, 0x26, 0xf6, 0x44, 0x05, 0x06, 0x75, + 0x03, 0xe9, 0x92, 0x00, 0x8e, 0x46, 0x0a, 0x26, 0x83, 0x7c, 0x08, 0x00, + 0x75, 0x10, 0x26, 0xf6, 0x44, 0x05, 0x02, 0x75, 0x03, 0xe9, 0x86, 0x00, + 0x26, 0xc7, 0x44, 0x08, 0x04, 0x00, 0x8e, 0x46, 0x0a, 0x26, 0x80, 0x64, + 0x04, 0xf9, 0x83, 0x07, 0x02, 0x8b, 0x57, 0x02, 0x8b, 0x3f, 0x8e, 0xc2, + 0x26, 0x8b, 0x45, 0xfe, 0x8e, 0x46, 0x0a, 0x89, 0x46, 0xe8, 0x26, 0xf6, + 0x44, 0x05, 0x04, 0x74, 0x66, 0x83, 0xc7, 0x02, 0xba, 0x04, 0x00, 0x89, + 0x3f, 0x8b, 0x4e, 0xfe, 0x8e, 0x5f, 0x02, 0x8b, 0x5e, 0xfc, 0x8b, 0x45, + 0xfe, 0xe8, 0x4e, 0xf8, 0xc5, 0x5e, 0xfc, 0xba, 0x04, 0x00, 0x8b, 0x46, + 0xe8, 0x83, 0xc3, 0x05, 0x8c, 0xd9, 0xc6, 0x47, 0xff, 0x3a, 0xe8, 0x39, + 0xf8, 0x8e, 0x5e, 0x0a, 0x80, 0x7c, 0x1a, 0x50, 0x75, 0x0b, 0x8b, 0x46, + 0xfc, 0x8b, 0x56, 0xfe, 0x0e, 0xe8, 0xb9, 0x0a, 0x90, 0xbb, 0xff, 0xff, + 0x8b, 0x46, 0xf4, 0x8b, 0x56, 0xf6, 0xe8, 0x8d, 0xf7, 0x8e, 0x5e, 0x0a, + 0x89, 0x44, 0x0e, 0xe9, 0x47, 0xfd, 0x26, 0x80, 0x4c, 0x05, 0x04, 0xe9, + 0x66, 0xff, 0x26, 0xc7, 0x44, 0x08, 0x09, 0x00, 0xe9, 0x77, 0xff, 0xba, + 0x04, 0x00, 0x8b, 0x5e, 0xfc, 0x8b, 0x4e, 0xfe, 0xeb, 0xb8, 0x26, 0xc7, + 0x44, 0x12, 0x01, 0x00, 0x26, 0xf6, 0x44, 0x04, 0x40, 0x75, 0x13, 0x83, + 0x07, 0x02, 0xc5, 0x3f, 0x8b, 0x5e, 0xfc, 0x8a, 0x45, 0xfe, 0x8e, 0x5e, + 0xfe, 0x88, 0x07, 0xe9, 0x0b, 0xfd, 0x83, 0x07, 0x02, 0x8d, 0x46, 0xe6, + 0xc5, 0x3f, 0x8c, 0xd2, 0x8b, 0x5d, 0xfe, 0x0e, 0x3e, 0xe8, 0x57, 0x08, + 0x3d, 0xff, 0xff, 0x75, 0x03, 0xe9, 0xf1, 0xfc, 0xc5, 0x5e, 0xfc, 0x8a, + 0x46, 0xe6, 0x88, 0x07, 0x30, 0xe4, 0x0e, 0xe8, 0xff, 0x0a, 0x90, 0x85, + 0xc0, 0x74, 0xea, 0x8e, 0x5e, 0xfe, 0x8a, 0x46, 0xe7, 0x88, 0x47, 0x01, + 0x8e, 0x5e, 0x0a, 0xff, 0x44, 0x0e, 0xe9, 0xcc, 0xfc, 0x83, 0x07, 0x02, + 0x8b, 0x46, 0xfc, 0xc5, 0x3f, 0x8b, 0x56, 0xfe, 0x8b, 0x5d, 0xfe, 0x0e, + 0x3e, 0xe8, 0x17, 0x08, 0x3d, 0xff, 0xff, 0x74, 0x03, 0xe9, 0xab, 0xfc, + 0x8e, 0x5e, 0x0a, 0xc7, 0x44, 0x12, 0x00, 0x00, 0xe9, 0xa6, 0xfc, 0x8e, + 0x5e, 0x0a, 0xc7, 0x44, 0x08, 0x00, 0x00, 0x8b, 0x5e, 0xfc, 0x8a, 0x44, + 0x1a, 0x8e, 0x5e, 0xfe, 0x88, 0x07, 0x8e, 0x5e, 0x0a, 0xc7, 0x44, 0x0e, + 0x01, 0x00, 0xe9, 0x88, 0xfc, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x70, 0x8b, 0x7e, 0x0e, 0xc6, 0x46, 0xfe, 0x00, 0xc7, 0x46, 0xdc, 0x00, + 0x00, 0xc7, 0x46, 0xde, 0xc8, 0x00, 0xc7, 0x46, 0xe4, 0x00, 0x00, 0x89, + 0x46, 0xd8, 0x89, 0x56, 0xda, 0x89, 0x5e, 0xfc, 0x89, 0x4e, 0xf6, 0x8e, + 0x5e, 0xf6, 0x8b, 0x5e, 0xfc, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x60, 0x8d, + 0x57, 0x01, 0x3c, 0x25, 0x74, 0x0f, 0x98, 0x89, 0x56, 0xfc, 0x89, 0xc3, + 0x8c, 0xd2, 0x8d, 0x46, 0xd8, 0xff, 0xd7, 0xeb, 0xde, 0x8d, 0x5e, 0xd8, + 0x16, 0x8c, 0xd1, 0x89, 0xd0, 0x53, 0x8c, 0xda, 0x8d, 0x5e, 0x0a, 0xe8, + 0xb3, 0xf4, 0x89, 0xc3, 0x8e, 0xda, 0x89, 0x56, 0xf6, 0x8a, 0x07, 0x43, + 0x88, 0x46, 0xf2, 0x89, 0x5e, 0xfc, 0x84, 0xc0, 0x74, 0x25, 0x3c, 0x6e, + 0x75, 0x56, 0xc5, 0x76, 0x0a, 0x8a, 0x46, 0xdd, 0x83, 0xc6, 0x04, 0xa8, + 0x04, 0x74, 0x17, 0x89, 0x76, 0x0a, 0xc5, 0x5c, 0xfc, 0x8a, 0x46, 0xdc, + 0xa8, 0x10, 0x74, 0x20, 0x8a, 0x46, 0xe4, 0x88, 0x07, 0xeb, 0x94, 0xe9, + 0x90, 0x01, 0xa8, 0x02, 0x74, 0xe5, 0x83, 0x46, 0x0a, 0x02, 0xb8, 0xd9, + 0x06, 0xc4, 0x5e, 0x0a, 0x8e, 0xd8, 0x26, 0x8b, 0x5f, 0xfe, 0xeb, 0xd9, + 0xa8, 0x20, 0x74, 0x08, 0x8b, 0x46, 0xe4, 0x89, 0x07, 0xe9, 0x6f, 0xff, + 0xa8, 0x40, 0x74, 0x0e, 0x8b, 0x46, 0xe4, 0x99, 0x89, 0x07, 0x89, 0x57, + 0x02, 0xe9, 0x5f, 0xff, 0xeb, 0x1a, 0xa8, 0x80, 0x74, 0xe2, 0x8b, 0x46, + 0xe4, 0x99, 0x89, 0x07, 0xb1, 0x0f, 0x89, 0x57, 0x02, 0xd3, 0xfa, 0x89, + 0x57, 0x04, 0x89, 0x57, 0x06, 0xe9, 0x43, 0xff, 0x8d, 0x56, 0xfe, 0x8d, + 0x5e, 0x0a, 0x16, 0x8d, 0x46, 0x90, 0x52, 0x8d, 0x56, 0xd8, 0x16, 0x8c, + 0xd1, 0x52, 0x8c, 0xd2, 0xe8, 0xf1, 0xf8, 0x89, 0xc6, 0x8b, 0x46, 0xe6, + 0x03, 0x46, 0xe8, 0x03, 0x46, 0xea, 0x03, 0x46, 0xec, 0x03, 0x46, 0xee, + 0x03, 0x46, 0xf0, 0x89, 0x56, 0xfa, 0x29, 0x46, 0xe0, 0xf6, 0x46, 0xdc, + 0x08, 0x74, 0x23, 0x8d, 0x4e, 0x90, 0x8c, 0x56, 0xf8, 0x83, 0x7e, 0xe6, + 0x00, 0x7e, 0x32, 0x8e, 0x5e, 0xf8, 0x89, 0xcb, 0x8a, 0x07, 0x98, 0x8c, + 0xd2, 0x89, 0xc3, 0x8d, 0x46, 0xd8, 0x41, 0xff, 0xd7, 0xff, 0x4e, 0xe6, + 0xeb, 0xe3, 0x80, 0x7e, 0xf3, 0x20, 0x75, 0xd7, 0x83, 0x7e, 0xe0, 0x00, + 0x7e, 0xd1, 0xbb, 0x20, 0x00, 0x8d, 0x46, 0xd8, 0x8c, 0xd2, 0xff, 0xd7, + 0xff, 0x4e, 0xe0, 0xeb, 0xeb, 0x83, 0x7e, 0xe8, 0x00, 0x7e, 0x0f, 0xbb, + 0x30, 0x00, 0x8d, 0x46, 0xd8, 0x8c, 0xd2, 0xff, 0xd7, 0xff, 0x4e, 0xe8, + 0xeb, 0xeb, 0x8a, 0x46, 0xf2, 0x3c, 0x73, 0x75, 0x44, 0xf6, 0x46, 0xdc, + 0x40, 0x75, 0x1b, 0x83, 0x7e, 0xea, 0x00, 0x7e, 0x23, 0x8e, 0x5e, 0xfa, + 0x8a, 0x04, 0x98, 0x8c, 0xd2, 0x89, 0xc3, 0x8d, 0x46, 0xd8, 0x46, 0xff, + 0xd7, 0xff, 0x4e, 0xea, 0xeb, 0xe5, 0x8d, 0x5e, 0xd8, 0x8b, 0x56, 0xfa, + 0x57, 0x8c, 0xd1, 0x89, 0xf0, 0xe8, 0x66, 0xf7, 0x83, 0x7e, 0xec, 0x00, + 0x7e, 0x2e, 0xbb, 0x30, 0x00, 0x8d, 0x46, 0xd8, 0x8c, 0xd2, 0xff, 0xd7, + 0xff, 0x4e, 0xec, 0xeb, 0xeb, 0x3c, 0x53, 0x74, 0xd9, 0x83, 0x7e, 0xea, + 0x00, 0x7e, 0xe1, 0x8e, 0x5e, 0xfa, 0x8a, 0x04, 0x98, 0x8c, 0xd2, 0x89, + 0xc3, 0x8d, 0x46, 0xd8, 0x46, 0xff, 0xd7, 0xff, 0x4e, 0xea, 0xeb, 0xe5, + 0x83, 0x7e, 0xee, 0x00, 0x7e, 0x15, 0x8e, 0x5e, 0xfa, 0x8a, 0x04, 0x98, + 0x8c, 0xd2, 0x89, 0xc3, 0x8d, 0x46, 0xd8, 0x46, 0xff, 0xd7, 0xff, 0x4e, + 0xee, 0xeb, 0xe5, 0x83, 0x7e, 0xf0, 0x00, 0x7e, 0x0f, 0xbb, 0x30, 0x00, + 0x8d, 0x46, 0xd8, 0x8c, 0xd2, 0xff, 0xd7, 0xff, 0x4e, 0xf0, 0xeb, 0xeb, + 0xf6, 0x46, 0xdc, 0x08, 0x75, 0x03, 0xe9, 0x16, 0xfe, 0x83, 0x7e, 0xe0, + 0x00, 0x7e, 0xf7, 0xbb, 0x20, 0x00, 0x8d, 0x46, 0xd8, 0x8c, 0xd2, 0xff, + 0xd7, 0xff, 0x4e, 0xe0, 0xeb, 0xeb, 0x8b, 0x46, 0xe4, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0xca, 0x06, 0x00, 0x51, 0x55, 0x89, 0xe5, 0x89, 0xd9, 0x8b, + 0x5e, 0x08, 0x8e, 0x46, 0x0a, 0x1e, 0x92, 0x8e, 0xd8, 0x8a, 0xc1, 0xb4, + 0x3d, 0xcd, 0x21, 0x1f, 0x72, 0x03, 0x26, 0x89, 0x07, 0xe8, 0x6e, 0x08, + 0x5d, 0x59, 0xca, 0x04, 0x00, 0x53, 0x52, 0xba, 0xd9, 0x06, 0x8e, 0xda, + 0x3b, 0x06, 0x26, 0x08, 0x73, 0x13, 0x89, 0xc3, 0x8b, 0x16, 0x50, 0x08, + 0xd1, 0xe3, 0x8e, 0x1e, 0x52, 0x08, 0x01, 0xd3, 0x8b, 0x07, 0x5a, 0x5b, + 0xc3, 0x31, 0xc0, 0x5a, 0x5b, 0xc3, 0x53, 0x51, 0xbb, 0xd9, 0x06, 0x8e, + 0xdb, 0x3b, 0x06, 0x26, 0x08, 0x72, 0x03, 0x59, 0x5b, 0xc3, 0x89, 0xc3, + 0x8b, 0x0e, 0x50, 0x08, 0xd1, 0xe3, 0x8e, 0x1e, 0x52, 0x08, 0x01, 0xcb, + 0x89, 0x17, 0x59, 0x5b, 0xc3, 0x53, 0x52, 0x89, 0xc3, 0xb8, 0x00, 0x44, + 0xcd, 0x21, 0x19, 0xdb, 0x75, 0x02, 0x89, 0xd0, 0x89, 0xc2, 0x85, 0xdb, + 0x7f, 0x02, 0x75, 0x0a, 0xa8, 0x80, 0x74, 0x06, 0xb8, 0x01, 0x00, 0x5a, + 0x5b, 0xcb, 0x31, 0xc0, 0x5a, 0x5b, 0xcb, 0x53, 0x51, 0x52, 0x56, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc3, 0xc6, 0x46, 0xff, 0x00, 0x88, + 0xc1, 0x88, 0x46, 0xfe, 0x0e, 0xe8, 0x7d, 0x00, 0x90, 0x89, 0xc6, 0x8e, + 0xda, 0x8b, 0x46, 0xfe, 0x89, 0x04, 0x81, 0xfb, 0x00, 0x01, 0x73, 0x52, + 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x80, 0x3e, 0xfa, 0x07, 0x03, 0x72, 0x3f, + 0x80, 0xfb, 0x50, 0x75, 0x04, 0xb1, 0x0e, 0xeb, 0x07, 0x80, 0xfb, 0x22, + 0x72, 0x28, 0xb1, 0x13, 0xb8, 0xd9, 0x06, 0x88, 0xcb, 0x8e, 0xd8, 0x30, + 0xff, 0x8a, 0x87, 0x54, 0x08, 0x98, 0x89, 0xc6, 0x0e, 0xe8, 0xd7, 0xdd, + 0x90, 0x89, 0xc3, 0x8e, 0xda, 0x89, 0x37, 0xb8, 0xff, 0xff, 0x89, 0xec, + 0x5d, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x80, 0xfb, 0x20, 0x72, 0x04, 0xb1, + 0x05, 0xeb, 0xd1, 0x80, 0xf9, 0x13, 0x76, 0xcc, 0xeb, 0xc8, 0x88, 0xfb, + 0x0e, 0xe8, 0xaf, 0xdd, 0x90, 0x30, 0xff, 0x8e, 0xda, 0x89, 0xde, 0x89, + 0xc3, 0xeb, 0xd2, 0x52, 0x89, 0xc2, 0xe8, 0x6e, 0xff, 0x89, 0xd0, 0x5a, + 0xc3, 0xb8, 0x6a, 0x0d, 0xba, 0xd9, 0x06, 0xcb, 0x51, 0x55, 0x89, 0xe5, + 0x89, 0xd9, 0x8b, 0x5e, 0x08, 0x8e, 0x46, 0x0a, 0x1e, 0x92, 0x8e, 0xd8, + 0xb4, 0x3c, 0xcd, 0x21, 0x1f, 0x72, 0x03, 0x26, 0x89, 0x07, 0xe8, 0x41, + 0x07, 0x5d, 0x59, 0xca, 0x04, 0x00, 0x51, 0x55, 0x89, 0xe5, 0x89, 0xd9, + 0x8b, 0x5e, 0x08, 0x8e, 0x46, 0x0a, 0x1e, 0x92, 0x8e, 0xd8, 0xb4, 0x5b, + 0xcd, 0x21, 0x1f, 0x72, 0x03, 0x26, 0x89, 0x07, 0xe8, 0x1f, 0x07, 0xeb, + 0xdc, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0xba, 0xd9, + 0x06, 0x8e, 0xda, 0xd1, 0xe0, 0x8b, 0x16, 0x52, 0x08, 0x8b, 0x0e, 0x50, + 0x08, 0x81, 0xfa, 0xd9, 0x06, 0x75, 0x06, 0x81, 0xf9, 0x28, 0x08, 0x74, + 0x2b, 0x89, 0xc3, 0x89, 0xc8, 0x0e, 0x3e, 0xe8, 0x06, 0x07, 0x89, 0xc7, + 0x89, 0xd6, 0x85, 0xf6, 0x75, 0x4b, 0x85, 0xff, 0x75, 0x47, 0x0e, 0xe8, + 0x15, 0xdd, 0x90, 0x89, 0xc6, 0x8e, 0xda, 0xc7, 0x04, 0x05, 0x00, 0x89, + 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x8b, 0x16, 0x26, 0x08, + 0x89, 0x16, 0x6c, 0x0d, 0x0e, 0xe8, 0x35, 0xc7, 0x90, 0x89, 0xc7, 0x89, + 0xd6, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0xc9, 0xb9, 0xd9, 0x06, + 0x8e, 0xd9, 0x8b, 0x0e, 0x26, 0x08, 0xd1, 0xe1, 0xbb, 0x28, 0x08, 0x51, + 0x8c, 0xd9, 0x0e, 0xe8, 0x6f, 0xd4, 0x90, 0xeb, 0xb1, 0xb8, 0xd9, 0x06, + 0x8b, 0x4e, 0xfe, 0x89, 0xf2, 0x8e, 0xd8, 0x31, 0xdb, 0xa1, 0x26, 0x08, + 0x2b, 0x0e, 0x26, 0x08, 0xd1, 0xe0, 0xd1, 0xe1, 0x01, 0xf8, 0x0e, 0xe8, + 0xe3, 0x00, 0x90, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x46, 0xfe, 0x89, + 0x3e, 0x50, 0x08, 0x89, 0x36, 0x52, 0x08, 0xa3, 0x26, 0x08, 0xeb, 0x93, + 0x52, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x52, 0x08, 0x8b, 0x16, 0x50, + 0x08, 0x3d, 0xd9, 0x06, 0x75, 0x08, 0x81, 0xfa, 0x28, 0x08, 0x75, 0x02, + 0x5a, 0xc3, 0x89, 0xd0, 0x8b, 0x16, 0x52, 0x08, 0x0e, 0xe8, 0xca, 0xc7, + 0x90, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa3, 0x52, 0x08, 0xa1, 0x6c, 0x0d, + 0xc7, 0x06, 0x50, 0x08, 0x28, 0x08, 0xa3, 0x26, 0x08, 0x5a, 0xc3, 0x53, + 0x51, 0x56, 0x89, 0xc3, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x26, 0x08, + 0x39, 0xc3, 0x73, 0x2e, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x3b, 0x1e, 0x26, + 0x08, 0x73, 0x2f, 0x89, 0xd9, 0xd1, 0xe1, 0x85, 0xd2, 0x74, 0x2c, 0x89, + 0xd8, 0xe8, 0xe0, 0x06, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xc5, 0x36, 0x50, + 0x08, 0x01, 0xce, 0x80, 0xce, 0x40, 0x89, 0x14, 0x89, 0xd8, 0x5e, 0x59, + 0x5b, 0xc3, 0x89, 0xc1, 0xd1, 0xf9, 0x01, 0xc8, 0x40, 0xe8, 0xc9, 0xfe, + 0xeb, 0xc6, 0xbb, 0xff, 0xff, 0xeb, 0xe9, 0xc5, 0x36, 0x50, 0x08, 0x01, + 0xce, 0xeb, 0xdf, 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd7, 0xe8, 0x65, 0xfd, + 0x85, 0xc9, 0x7f, 0x06, 0x75, 0x12, 0x85, 0xdb, 0x76, 0x0e, 0xa8, 0x80, + 0x75, 0x0a, 0x80, 0xcc, 0x80, 0x89, 0xc2, 0x89, 0xf0, 0xe8, 0x72, 0xfd, + 0x89, 0xfa, 0x89, 0xf0, 0xe8, 0x45, 0xe5, 0x5f, 0x5e, 0xcb, 0x53, 0x51, + 0xba, 0x01, 0x00, 0x31, 0xdb, 0x31, 0xc9, 0xe8, 0x36, 0xe5, 0x59, 0x5b, + 0xcb, 0x57, 0x89, 0xc7, 0x88, 0xd8, 0x8e, 0xc2, 0x57, 0x8a, 0xe0, 0xd1, + 0xe9, 0xf3, 0xab, 0x13, 0xc9, 0xf3, 0xaa, 0x5f, 0x89, 0xf8, 0x5f, 0xcb, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x89, 0xc7, 0x89, 0x56, + 0xfe, 0x89, 0xde, 0x89, 0x4e, 0xfc, 0x8e, 0xd9, 0xc5, 0x5c, 0x06, 0x8b, + 0x47, 0x0a, 0x8b, 0x57, 0x08, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, + 0x5f, 0x8e, 0x5e, 0xfc, 0xc7, 0x46, 0xfa, 0x00, 0x00, 0xf6, 0x44, 0x0b, + 0x04, 0x75, 0x5a, 0x89, 0x7e, 0xf8, 0x31, 0xd2, 0x8e, 0x5e, 0xfe, 0x8a, + 0x05, 0x30, 0xe4, 0x85, 0xc0, 0x74, 0x12, 0x8b, 0x4e, 0xfc, 0x89, 0xf3, + 0x47, 0x0e, 0x3e, 0xe8, 0xcf, 0xed, 0x3d, 0xff, 0xff, 0x75, 0xe5, 0x89, + 0xc2, 0x83, 0x7e, 0xfa, 0x00, 0x74, 0x18, 0x8e, 0x5e, 0xfc, 0x80, 0x64, + 0x0b, 0xf9, 0x80, 0x4c, 0x0b, 0x04, 0x85, 0xd2, 0x75, 0x09, 0x89, 0xf0, + 0x8c, 0xda, 0xe8, 0x12, 0xe5, 0x89, 0xc2, 0x85, 0xd2, 0x75, 0x05, 0x89, + 0xfa, 0x2b, 0x56, 0xf8, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xcb, + 0x89, 0xf0, 0x89, 0xca, 0xe8, 0x61, 0xee, 0xeb, 0x98, 0x80, 0x64, 0x0b, + 0xf9, 0xc7, 0x46, 0xfa, 0x01, 0x00, 0x80, 0x4c, 0x0b, 0x02, 0xeb, 0x97, + 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x02, 0x08, 0xc7, 0x06, 0x02, 0x08, + 0x00, 0x00, 0x85, 0xc0, 0x74, 0x01, 0xcb, 0xb4, 0x01, 0xcd, 0x21, 0x30, + 0xe4, 0xcb, 0x56, 0x89, 0xc6, 0x89, 0xc8, 0x89, 0xd1, 0x8e, 0xd8, 0x89, + 0xda, 0x89, 0xf3, 0xb4, 0x3f, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7c, + 0x02, 0x5e, 0xc3, 0xe8, 0xb9, 0xfc, 0x5e, 0xc3, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, 0x5e, 0xfc, 0x89, 0x4e, 0xfe, + 0x89, 0xd7, 0xe8, 0x34, 0xfc, 0xa8, 0x80, 0x74, 0x14, 0xb0, 0x02, 0x89, + 0xf3, 0x31, 0xd2, 0x31, 0xc9, 0xb4, 0x42, 0xcd, 0x21, 0xd1, 0xd2, 0xd1, + 0xca, 0x85, 0xd2, 0x7c, 0x2c, 0xc5, 0x56, 0xfc, 0x89, 0xf9, 0x89, 0xf3, + 0xb4, 0x40, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7c, 0x1b, 0x89, 0xc3, + 0x39, 0xf8, 0x74, 0x0d, 0x0e, 0xe8, 0x9f, 0xda, 0x90, 0x89, 0xc6, 0x8e, + 0xda, 0xc7, 0x04, 0x0c, 0x00, 0x89, 0xd8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0xc3, 0xe8, 0x5b, 0xfc, 0xeb, 0xf5, 0xe9, 0x82, 0x05, 0x89, 0xc0, 0x53, + 0x89, 0xc3, 0x8e, 0xda, 0x8a, 0x07, 0x84, 0xc0, 0x75, 0x05, 0xb8, 0x01, + 0x00, 0x5b, 0xcb, 0x30, 0xe4, 0x0e, 0x3e, 0xe8, 0x1b, 0x04, 0x85, 0xc0, + 0x74, 0x0d, 0x8e, 0xda, 0x80, 0x7f, 0x01, 0x00, 0x75, 0x05, 0xb8, 0x02, + 0x00, 0x5b, 0xcb, 0x31, 0xc0, 0x5b, 0xcb, 0x53, 0x51, 0x89, 0xc3, 0x89, + 0xd1, 0x8e, 0xda, 0x8a, 0x07, 0x30, 0xe4, 0x89, 0xc2, 0x0e, 0x3e, 0xe8, + 0xf3, 0x03, 0x85, 0xc0, 0x74, 0x09, 0x8e, 0xd9, 0x88, 0xd6, 0x8a, 0x47, + 0x01, 0x88, 0xc2, 0x89, 0xd0, 0x59, 0x5b, 0xcb, 0x52, 0xf6, 0xc4, 0xff, + 0x74, 0x16, 0xba, 0xd9, 0x06, 0x8e, 0xda, 0x81, 0x3e, 0x76, 0x08, 0xa4, + 0x03, 0x74, 0x02, 0x5a, 0xcb, 0x0e, 0x3e, 0xe8, 0xaa, 0x07, 0x5a, 0xcb, + 0x0e, 0xe8, 0xb2, 0x07, 0x90, 0x5a, 0xcb, 0x53, 0x89, 0xc3, 0x8e, 0xda, + 0x8a, 0x07, 0x30, 0xe4, 0x0e, 0xe8, 0xb1, 0x03, 0x90, 0x85, 0xc0, 0x74, + 0x0d, 0x8e, 0xda, 0x80, 0x7f, 0x01, 0x00, 0x74, 0x05, 0x8d, 0x47, 0x02, + 0x5b, 0xcb, 0x8d, 0x47, 0x01, 0x5b, 0xcb, 0x52, 0x55, 0x89, 0xe5, 0xba, + 0xd9, 0x06, 0x8e, 0xda, 0xff, 0x36, 0x74, 0x0d, 0xff, 0x36, 0x72, 0x0d, + 0xff, 0x76, 0x0a, 0xff, 0x76, 0x08, 0x0e, 0xe8, 0x7e, 0x07, 0x90, 0x5d, + 0x5a, 0xca, 0x04, 0x00, 0xc3, 0x89, 0xc3, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0xba, 0xff, 0x00, 0xff, 0x16, 0x6a, 0x08, 0xb8, 0x10, 0x00, 0xe8, 0x2a, + 0xe7, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xff, 0x16, 0x6a, 0x08, 0xb8, 0xd9, + 0x06, 0x8e, 0xd8, 0xff, 0x16, 0x6c, 0x08, 0x89, 0xd8, 0xe9, 0x1f, 0xd0, + 0x89, 0xc2, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xff, 0x16, 0x6a, 0x08, 0xb8, + 0xd9, 0x06, 0x8e, 0xd8, 0xff, 0x16, 0x6c, 0x08, 0x89, 0xd0, 0xe9, 0x06, + 0xd0, 0x00, 0x53, 0x51, 0x52, 0x89, 0xc2, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0x3b, 0x16, 0x00, 0x08, 0x72, 0x43, 0x89, 0xd3, 0xb1, 0x04, 0x83, 0xc3, + 0x0f, 0xd3, 0xeb, 0x85, 0xdb, 0x75, 0x03, 0xbb, 0x00, 0x10, 0xb9, 0xd9, + 0x06, 0x8e, 0xd9, 0x80, 0x3e, 0xfc, 0x07, 0x00, 0x75, 0x0b, 0x8c, 0xd0, + 0x2b, 0x06, 0xf8, 0x07, 0x01, 0xc3, 0xa1, 0xf8, 0x07, 0x8e, 0xc0, 0xb4, + 0x4a, 0xcd, 0x21, 0x19, 0xdb, 0x85, 0xdb, 0x7c, 0x10, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0xa1, 0xf6, 0x07, 0x89, 0x16, 0xf6, 0x07, 0x5a, 0x59, 0x5b, + 0xcb, 0x0e, 0x3e, 0xe8, 0x2d, 0xd9, 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xff, + 0xff, 0xc7, 0x07, 0x05, 0x00, 0xeb, 0xea, 0x52, 0xba, 0xd9, 0x06, 0x8e, + 0xda, 0x03, 0x06, 0xf6, 0x07, 0x0e, 0xe8, 0x8d, 0xff, 0x5a, 0xcb, 0x56, + 0x89, 0xc6, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x11, 0xf6, 0xc7, + 0xff, 0x74, 0x10, 0x8e, 0xda, 0x88, 0x3c, 0xb8, 0x02, 0x00, 0x88, 0x5c, + 0x01, 0x5e, 0xcb, 0x31, 0xc0, 0x5e, 0xcb, 0x8e, 0xda, 0xb8, 0x01, 0x00, + 0x88, 0x1c, 0x5e, 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x26, + 0x53, 0x51, 0x89, 0xd1, 0x8e, 0x46, 0xd6, 0xc6, 0x46, 0xda, 0x00, 0x8d, + 0x76, 0xdb, 0x89, 0xdf, 0x8c, 0x56, 0xfe, 0x8d, 0x5e, 0xfc, 0x89, 0x4e, + 0xfc, 0x33, 0xd2, 0x36, 0xf7, 0x37, 0x36, 0x89, 0x07, 0xb8, 0xd9, 0x06, + 0x89, 0xd3, 0x8e, 0xd8, 0x8a, 0x87, 0x16, 0x06, 0x8e, 0x5e, 0xfe, 0x88, + 0x04, 0x8b, 0x46, 0xfc, 0x46, 0x85, 0xc0, 0x75, 0xda, 0x8e, 0x5e, 0xfe, + 0x83, 0xc6, 0xff, 0x8a, 0x04, 0x26, 0x88, 0x05, 0x47, 0x84, 0xc0, 0x75, + 0xf3, 0x8b, 0x46, 0xd8, 0x8b, 0x56, 0xd6, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0xcb, 0x56, 0x57, 0x89, 0xde, 0x89, 0xcf, 0x83, 0xfa, 0x0a, 0x75, 0x04, + 0x85, 0xc0, 0x7c, 0x0b, 0x0e, 0xe8, 0x90, 0xff, 0x89, 0xf0, 0x89, 0xfa, + 0x5f, 0x5e, 0xcb, 0x8e, 0xd9, 0xf7, 0xd8, 0x43, 0xc6, 0x04, 0x2d, 0xeb, + 0xeb, 0x53, 0x52, 0xbb, 0x01, 0x00, 0xb8, 0xc6, 0x04, 0xba, 0xd9, 0x06, + 0xe9, 0x0e, 0xe5, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x4c, 0x52, + 0x8b, 0x76, 0x0a, 0xc6, 0x46, 0xb4, 0x00, 0x8d, 0x7e, 0xb5, 0x8c, 0x56, + 0xfe, 0x89, 0x76, 0xfa, 0x8b, 0x76, 0x0c, 0x89, 0x7e, 0xf8, 0x89, 0x76, + 0xfc, 0x8b, 0x76, 0x0e, 0x8b, 0x56, 0xb2, 0x89, 0x76, 0xf6, 0x8d, 0x76, + 0xf6, 0x8b, 0xfa, 0x85, 0xc0, 0x74, 0x2d, 0x8b, 0xd0, 0x8b, 0xc3, 0x33, + 0xdb, 0x36, 0x3b, 0x14, 0x72, 0x0a, 0x8b, 0xd8, 0x8b, 0xc2, 0x33, 0xd2, + 0x36, 0xf7, 0x34, 0x93, 0x36, 0xf7, 0x34, 0x91, 0x36, 0xf7, 0x34, 0x97, + 0x36, 0xf7, 0x34, 0x36, 0x89, 0x14, 0x8b, 0xd0, 0x8b, 0xc3, 0x8b, 0xd9, + 0x8b, 0xcf, 0xeb, 0x2e, 0x85, 0xdb, 0x74, 0x15, 0x8b, 0xd3, 0x8b, 0xc1, + 0x33, 0xdb, 0x33, 0xc9, 0x36, 0x3b, 0x14, 0x72, 0xdb, 0x8b, 0xc8, 0x8b, + 0xc2, 0x33, 0xd2, 0xeb, 0xcf, 0x8b, 0xd1, 0x8b, 0xc7, 0x33, 0xc9, 0x33, + 0xff, 0x36, 0x3b, 0x14, 0x72, 0xca, 0x8b, 0xf8, 0x8b, 0xc2, 0x33, 0xd2, + 0xeb, 0xbe, 0xbf, 0xd9, 0x06, 0x89, 0xd6, 0x8e, 0xdf, 0x8b, 0x7e, 0xf6, + 0x89, 0x56, 0xb2, 0x8a, 0x95, 0x16, 0x06, 0x8e, 0x5e, 0xfe, 0x8b, 0x7e, + 0xf8, 0xff, 0x46, 0xf8, 0x88, 0x15, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x70, + 0xff, 0x85, 0xdb, 0x75, 0xf9, 0x85, 0xc9, 0x75, 0xf5, 0x85, 0xf6, 0x75, + 0xf1, 0x83, 0x46, 0xf8, 0xff, 0x8e, 0x5e, 0xfe, 0x8b, 0x5e, 0xf8, 0x8a, + 0x07, 0xc5, 0x5e, 0xfa, 0xff, 0x46, 0xfa, 0x88, 0x07, 0x84, 0xc0, 0x75, + 0xe8, 0x8b, 0x46, 0x0a, 0x8b, 0x56, 0x0c, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0xca, 0x06, 0x00, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x8b, + 0x76, 0x0a, 0x8b, 0x7e, 0x0c, 0x89, 0x76, 0xfc, 0x89, 0x7e, 0xfe, 0x83, + 0x7e, 0x0e, 0x0a, 0x75, 0x0c, 0x85, 0xc0, 0x7c, 0x1c, 0x75, 0x06, 0x85, + 0xdb, 0x75, 0x02, 0x85, 0xc9, 0xff, 0x76, 0x0e, 0xff, 0x76, 0xfe, 0xff, + 0x76, 0xfc, 0x0e, 0xe8, 0xe9, 0xfe, 0x8b, 0x56, 0x0c, 0x89, 0xf0, 0xeb, + 0xbe, 0x8e, 0xdf, 0x31, 0xff, 0x29, 0xd7, 0x89, 0xfa, 0xbf, 0x00, 0x00, + 0x19, 0xcf, 0x89, 0xf9, 0xbf, 0x00, 0x00, 0x19, 0xdf, 0x89, 0xfb, 0xbf, + 0x00, 0x00, 0x19, 0xc7, 0x89, 0xf8, 0x8d, 0x7c, 0x01, 0xc6, 0x04, 0x2d, + 0x89, 0x7e, 0xfc, 0xeb, 0xc4, 0x53, 0x51, 0x89, 0xc1, 0x89, 0xc3, 0x8e, + 0xda, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x0f, 0x2c, 0x61, 0x3c, 0x19, 0x76, + 0x03, 0x43, 0xeb, 0xf1, 0x04, 0x41, 0x88, 0x07, 0xeb, 0xf7, 0x89, 0xc8, + 0x59, 0x5b, 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x26, 0x53, + 0x51, 0xc6, 0x46, 0xda, 0x00, 0x8d, 0x76, 0xdb, 0x89, 0xdf, 0x8c, 0xd3, + 0x89, 0x4e, 0xfe, 0x8e, 0xc3, 0x8b, 0x5e, 0x0a, 0x89, 0x5e, 0xfc, 0x8d, + 0x5e, 0xfc, 0x33, 0xc9, 0x36, 0x3b, 0x17, 0x72, 0x07, 0x92, 0x87, 0xd1, + 0x36, 0xf7, 0x37, 0x91, 0x36, 0xf7, 0x37, 0x36, 0x89, 0x17, 0x8b, 0xd1, + 0xbb, 0xd9, 0x06, 0x8e, 0xdb, 0x8b, 0x5e, 0xfc, 0x8a, 0x9f, 0x16, 0x06, + 0x26, 0x88, 0x1c, 0x46, 0x85, 0xd2, 0x75, 0xcd, 0x85, 0xc0, 0x75, 0xc9, + 0x8e, 0x5e, 0xfe, 0x83, 0xc6, 0xff, 0x26, 0x8a, 0x04, 0x88, 0x05, 0x47, + 0x84, 0xc0, 0x75, 0xf3, 0x8b, 0x46, 0xd8, 0x8b, 0x56, 0xd6, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0xca, 0x02, 0x00, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, + 0xde, 0x89, 0xcf, 0x83, 0x7e, 0x0a, 0x0a, 0x75, 0x04, 0x85, 0xd2, 0x7c, + 0x0d, 0xff, 0x76, 0x0a, 0x0e, 0xe8, 0x77, 0xff, 0x89, 0xf0, 0x89, 0xfa, + 0xeb, 0xda, 0x8e, 0xd9, 0xf7, 0xda, 0xc6, 0x04, 0x2d, 0xf7, 0xd8, 0x83, + 0xda, 0x00, 0x43, 0xeb, 0xe4, 0x53, 0x89, 0xc3, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0x8a, 0x9f, 0x83, 0x0d, 0x80, 0xe3, 0x01, 0x30, 0xff, 0x89, 0xd8, + 0x5b, 0xcb, 0x31, 0xc0, 0x0e, 0xe8, 0x4b, 0x03, 0x90, 0xc3, 0x73, 0x07, + 0x50, 0xe8, 0xff, 0xf7, 0x58, 0xeb, 0x02, 0x2b, 0xc0, 0xc3, 0x73, 0x05, + 0xe8, 0xf4, 0xf7, 0xeb, 0x02, 0x2b, 0xc0, 0xc3, 0x51, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc6, 0x89, 0xd7, 0x89, 0xd9, 0x85, + 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x5c, 0x85, 0xdb, 0x74, 0x61, 0x0e, + 0x3e, 0xe8, 0x33, 0x05, 0x89, 0x46, 0xfa, 0x81, 0xff, 0xd9, 0x06, 0x75, + 0x5e, 0x89, 0x76, 0xfc, 0x89, 0xda, 0x89, 0xf0, 0x89, 0x7e, 0xfe, 0x0e, + 0x3e, 0xe8, 0x2c, 0x05, 0x85, 0xc0, 0x75, 0x5a, 0x89, 0xc8, 0x0e, 0xe8, + 0x1b, 0xc0, 0x90, 0x89, 0x46, 0xfc, 0x89, 0x56, 0xfe, 0x85, 0xd2, 0x75, + 0x04, 0x85, 0xc0, 0x74, 0x53, 0xff, 0x76, 0xfa, 0x89, 0xf3, 0x89, 0xf9, + 0x0e, 0xe8, 0x58, 0x05, 0x90, 0x89, 0xf0, 0x89, 0xfa, 0x0e, 0x3e, 0xe8, + 0x08, 0xc1, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0x59, 0xcb, 0x89, 0xd8, 0x0e, 0x3e, 0xe8, 0xe3, 0xbf, 0xeb, 0xf0, + 0x0e, 0xe8, 0xee, 0xc0, 0x90, 0x31, 0xc0, 0x31, 0xd2, 0xeb, 0xe5, 0x89, + 0xf0, 0x89, 0xfa, 0x0e, 0x3e, 0xe8, 0x49, 0x05, 0x89, 0x46, 0xfc, 0x89, + 0x56, 0xfe, 0x83, 0x7e, 0xfe, 0x00, 0x75, 0xca, 0x83, 0x7e, 0xfc, 0x00, + 0x74, 0x9a, 0xeb, 0xc2, 0x81, 0xff, 0xd9, 0x06, 0x75, 0x0c, 0x8b, 0x56, + 0xfa, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, 0xb0, 0x04, 0xeb, 0xb0, 0x8b, 0x5e, + 0xfa, 0x89, 0xf0, 0x89, 0xfa, 0x0e, 0x3e, 0xe8, 0x17, 0x05, 0xeb, 0xa2, + 0x53, 0x52, 0x3d, 0x05, 0x00, 0x7d, 0x15, 0xbb, 0xd9, 0x06, 0x89, 0xc2, + 0x8e, 0xdb, 0xd1, 0xe2, 0xc5, 0x1e, 0x50, 0x08, 0x01, 0xd3, 0xf6, 0x47, + 0x01, 0x40, 0x74, 0x03, 0x5a, 0x5b, 0xc3, 0x80, 0x4f, 0x01, 0x40, 0x0e, + 0x3e, 0xe8, 0xdd, 0xf6, 0x85, 0xc0, 0x74, 0xf0, 0xb8, 0xd9, 0x06, 0x8e, + 0xd8, 0xc5, 0x1e, 0x50, 0x08, 0x01, 0xd3, 0x80, 0x4f, 0x01, 0x20, 0x5a, + 0x5b, 0xc3, 0x52, 0x89, 0xc2, 0xe8, 0xbc, 0xff, 0x89, 0xd0, 0xe8, 0x74, + 0xf6, 0x5a, 0xcb, 0x53, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0xe8, 0xd1, + 0xfe, 0x5b, 0xcb, 0x53, 0x89, 0xc3, 0xb4, 0x68, 0xf8, 0xcd, 0x21, 0xe8, + 0xc4, 0xfe, 0x5b, 0xcb, 0x53, 0x89, 0xc2, 0x0e, 0x3e, 0xe8, 0x5e, 0xd0, + 0xbb, 0xd9, 0x06, 0x85, 0xc0, 0x74, 0x04, 0x89, 0xda, 0x5b, 0xc3, 0x89, + 0xd0, 0x0e, 0x3e, 0xe8, 0x1b, 0xbf, 0x89, 0xd3, 0xeb, 0xf1, 0x53, 0x51, + 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0xa1, 0x74, 0x0d, 0x8b, 0x16, 0x72, 0x0d, 0x85, 0xc0, 0x75, + 0x45, 0x85, 0xd2, 0x75, 0x41, 0xbb, 0x2c, 0x00, 0xc7, 0x46, 0xf6, 0x00, + 0x00, 0x8e, 0x1e, 0xf8, 0x07, 0x31, 0xc9, 0x8e, 0x1f, 0x30, 0xc0, 0x8c, + 0x5e, 0xf8, 0x31, 0xdb, 0x3a, 0x07, 0x74, 0x09, 0x43, 0x3a, 0x07, 0x75, + 0xfb, 0x41, 0x43, 0xeb, 0xf3, 0x89, 0xd8, 0x2b, 0x46, 0xf6, 0x75, 0x03, + 0xb8, 0x01, 0x00, 0xe8, 0x92, 0xff, 0x89, 0x56, 0xfa, 0x89, 0xc3, 0x89, + 0x56, 0xfe, 0x85, 0xd2, 0x75, 0x0d, 0x85, 0xc0, 0x75, 0x09, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x89, 0xc8, 0xd1, 0xe0, 0xd1, + 0xe0, 0x01, 0xc8, 0x05, 0x04, 0x00, 0xe8, 0x6b, 0xff, 0x89, 0xc7, 0x89, + 0x56, 0xfc, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x70, 0xbe, 0xd9, + 0x06, 0x8e, 0xde, 0x8b, 0x76, 0xf6, 0xa3, 0x72, 0x0d, 0xb8, 0xd9, 0x06, + 0x89, 0x16, 0x74, 0x0d, 0x8e, 0xc0, 0x89, 0xd8, 0x8e, 0x5e, 0xf8, 0x26, + 0xa3, 0x84, 0x0e, 0x8b, 0x46, 0xfa, 0x8b, 0x56, 0xfe, 0x26, 0xa3, 0x86, + 0x0e, 0x8d, 0x45, 0x04, 0x80, 0x3c, 0x00, 0x74, 0x1c, 0x8e, 0x46, 0xfc, + 0x26, 0x89, 0x1d, 0x26, 0x89, 0x55, 0x02, 0x8e, 0x46, 0xfe, 0x89, 0xc7, + 0x8a, 0x04, 0x46, 0x26, 0x88, 0x07, 0x43, 0x84, 0xc0, 0x75, 0xf5, 0xeb, + 0xdc, 0x8e, 0x5e, 0xfc, 0xba, 0xd9, 0x06, 0xc7, 0x05, 0x00, 0x00, 0x31, + 0xdb, 0xc7, 0x45, 0x02, 0x00, 0x00, 0x8e, 0xda, 0x8b, 0x56, 0xfc, 0xa3, + 0x6e, 0x0d, 0x89, 0x16, 0x70, 0x0d, 0x0e, 0xe8, 0x17, 0xf8, 0x90, 0xe9, + 0x6c, 0xff, 0x8b, 0x56, 0xfa, 0x89, 0xd8, 0x0e, 0x3e, 0xe8, 0x2a, 0xbf, + 0xe9, 0x5f, 0xff, 0x52, 0x0e, 0xe8, 0xc2, 0x03, 0x90, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0xa1, 0x74, 0x0d, 0x8b, 0x16, 0x72, 0x0d, 0x85, 0xc0, 0x75, + 0x40, 0x85, 0xd2, 0x75, 0x3c, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x16, + 0x78, 0x0d, 0xa1, 0x76, 0x0d, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, + 0x12, 0x0e, 0x3e, 0xe8, 0xf4, 0xbe, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x31, + 0xc0, 0xa3, 0x76, 0x0d, 0xa3, 0x78, 0x0d, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0x8b, 0x16, 0x86, 0x0e, 0xa1, 0x84, 0x0e, 0x85, 0xd2, 0x75, 0x20, 0x85, + 0xc0, 0x75, 0x1c, 0x5a, 0xc3, 0x89, 0xd0, 0x8b, 0x16, 0x74, 0x0d, 0x0e, + 0x3e, 0xe8, 0xc6, 0xbe, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x31, 0xc0, 0xa3, + 0x72, 0x0d, 0xa3, 0x74, 0x0d, 0xeb, 0xaa, 0x0e, 0x3e, 0xe8, 0xb2, 0xbe, + 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x31, 0xc0, 0xa3, 0x84, 0x0e, 0xa3, 0x86, + 0x0e, 0x5a, 0xc3, 0x53, 0x51, 0x52, 0xb8, 0xd9, 0x06, 0xb9, 0x01, 0x01, + 0x31, 0xdb, 0x8e, 0xd8, 0x31, 0xc0, 0x8c, 0xda, 0xa3, 0x78, 0x08, 0xa3, + 0x76, 0x08, 0xb8, 0x82, 0x0d, 0x0e, 0x3e, 0xe8, 0x63, 0xf7, 0x5a, 0x59, + 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd7, 0x8e, 0xda, + 0x83, 0x3c, 0x00, 0x74, 0x31, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xc7, 0x06, + 0x78, 0x08, 0x01, 0x00, 0x8e, 0xdf, 0x8b, 0x04, 0x85, 0xc0, 0x74, 0x1e, + 0x88, 0xe2, 0xbb, 0x01, 0x00, 0x30, 0xf6, 0x30, 0xe4, 0x89, 0xd1, 0xba, + 0xd9, 0x06, 0x29, 0xc1, 0x05, 0x82, 0x0d, 0x41, 0x40, 0x46, 0x46, 0x0e, + 0x3e, 0xe8, 0x21, 0xf7, 0xeb, 0xda, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x53, + 0x51, 0x52, 0x89, 0xc2, 0xe8, 0x90, 0xff, 0x83, 0xfa, 0xff, 0x74, 0x4d, + 0x83, 0xfa, 0xfe, 0x74, 0x48, 0x83, 0xfa, 0xfd, 0x74, 0x60, 0x83, 0xfa, + 0xfc, 0x75, 0x35, 0xb9, 0x1f, 0x00, 0xbb, 0x01, 0x00, 0xb8, 0x04, 0x0e, + 0xba, 0xd9, 0x06, 0x0e, 0x3e, 0xe8, 0xed, 0xf6, 0xb9, 0x1d, 0x00, 0xbb, + 0x01, 0x00, 0xb8, 0x63, 0x0e, 0xba, 0xd9, 0x06, 0x0e, 0xe8, 0xdd, 0xf6, + 0x90, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xc7, 0x06, 0x78, 0x08, 0x01, 0x00, + 0xc7, 0x06, 0x76, 0x08, 0xa4, 0x03, 0xeb, 0x26, 0x85, 0xd2, 0x74, 0x05, + 0xb8, 0x01, 0x00, 0xeb, 0x1f, 0x0e, 0x3e, 0xe8, 0xc5, 0x03, 0x85, 0xd2, + 0x75, 0x04, 0x85, 0xc0, 0x74, 0x10, 0xe8, 0x51, 0xff, 0xba, 0xd9, 0x06, + 0x0e, 0xe8, 0xdc, 0x03, 0x90, 0x8e, 0xda, 0xa3, 0x76, 0x08, 0x31, 0xc0, + 0x5a, 0x59, 0x5b, 0xcb, 0x3d, 0x81, 0x82, 0x72, 0x08, 0x3d, 0x9a, 0x82, + 0x77, 0x03, 0x2d, 0x21, 0x00, 0xcb, 0x3d, 0x61, 0x00, 0x7c, 0x08, 0x3d, + 0x7a, 0x00, 0x7f, 0x03, 0x2d, 0x20, 0x00, 0xcb, 0x50, 0xb8, 0xb2, 0x00, + 0x0e, 0xe8, 0xc1, 0x03, 0x90, 0x58, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, + 0x81, 0xec, 0x9c, 0x00, 0x50, 0x83, 0xed, 0x78, 0x89, 0xde, 0x89, 0x4e, + 0x76, 0xff, 0xb6, 0x8a, 0x00, 0xff, 0xb6, 0x88, 0x00, 0xff, 0xb6, 0x86, + 0x00, 0xff, 0xb6, 0x84, 0x00, 0x0e, 0x3e, 0xe8, 0x37, 0x04, 0x89, 0xc3, + 0x3d, 0xff, 0xff, 0x74, 0x03, 0xe9, 0x3f, 0x01, 0x0e, 0xe8, 0x13, 0xd2, + 0x90, 0x89, 0xc7, 0x8e, 0xda, 0x83, 0x3d, 0x01, 0x74, 0x0e, 0x0e, 0xe8, + 0x05, 0xd2, 0x90, 0x89, 0xc7, 0x8e, 0xda, 0x83, 0x3d, 0x09, 0x75, 0xe1, + 0x8e, 0x5e, 0x76, 0x8a, 0x04, 0x3c, 0x5c, 0x74, 0xd8, 0x84, 0xc0, 0x74, + 0xd4, 0x80, 0x7c, 0x01, 0x3a, 0x74, 0xce, 0xb8, 0xe8, 0x04, 0xba, 0xd9, + 0x06, 0x0e, 0x3e, 0xe8, 0x80, 0xdd, 0x89, 0xc7, 0x89, 0xd1, 0x85, 0xd2, + 0x75, 0x04, 0x85, 0xc0, 0x74, 0xb7, 0x8b, 0x56, 0x76, 0x89, 0xf0, 0x0e, + 0x3e, 0xe8, 0x4c, 0xc9, 0x40, 0x89, 0x46, 0x70, 0xb8, 0x90, 0x00, 0x2b, + 0x46, 0x70, 0x89, 0x46, 0x6e, 0x8e, 0xd9, 0x80, 0x3d, 0x00, 0x74, 0x99, + 0xbb, 0x3b, 0x00, 0x89, 0xf8, 0x89, 0xca, 0x0e, 0x3e, 0xe8, 0x65, 0x08, + 0x89, 0x46, 0x6c, 0x89, 0x56, 0x74, 0x85, 0xd2, 0x75, 0x17, 0x85, 0xc0, + 0x75, 0x13, 0x89, 0xf8, 0x89, 0xca, 0x89, 0xfb, 0x0e, 0xe8, 0x14, 0xc9, + 0x90, 0x01, 0xc3, 0x89, 0x4e, 0x74, 0x89, 0x5e, 0x6c, 0x8b, 0x5e, 0x6c, + 0x29, 0xfb, 0x89, 0x5e, 0x72, 0x3b, 0x5e, 0x6e, 0x76, 0x20, 0x0e, 0xe8, + 0x75, 0xd1, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x02, 0x00, 0x0e, + 0x3e, 0xe8, 0xcd, 0xf3, 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xff, 0xff, 0xc7, + 0x07, 0x0a, 0x00, 0xe9, 0x83, 0x00, 0x8d, 0x46, 0xdc, 0x53, 0x8c, 0xd2, + 0x89, 0xfb, 0x0e, 0xe8, 0xe7, 0xc8, 0x90, 0x8d, 0x7e, 0xdc, 0x16, 0x1f, + 0x03, 0x7e, 0x72, 0x80, 0x7d, 0xff, 0x5c, 0x74, 0x04, 0xc6, 0x05, 0x5c, + 0x47, 0xff, 0x76, 0x70, 0x8b, 0x4e, 0x76, 0x89, 0xf3, 0x89, 0xf8, 0x8c, + 0xda, 0x0e, 0x3e, 0xe8, 0xc3, 0xc8, 0xff, 0xb6, 0x8a, 0x00, 0xff, 0xb6, + 0x88, 0x00, 0x8d, 0x5e, 0xdc, 0xff, 0xb6, 0x86, 0x00, 0x8b, 0x46, 0xda, + 0xff, 0xb6, 0x84, 0x00, 0x8c, 0xd1, 0x0e, 0xe8, 0x23, 0x03, 0x90, 0x89, + 0xc3, 0x3d, 0xff, 0xff, 0x75, 0x2d, 0x0e, 0xe8, 0x01, 0xd1, 0x90, 0x89, + 0xc7, 0x8e, 0xda, 0x83, 0x3d, 0x01, 0x74, 0x0e, 0x0e, 0xe8, 0xf3, 0xd0, + 0x90, 0x89, 0xc7, 0x8e, 0xda, 0x83, 0x3d, 0x09, 0x75, 0x11, 0x8e, 0x5e, + 0x74, 0x8b, 0x7e, 0x6c, 0x80, 0x3d, 0x3b, 0x75, 0x06, 0x8c, 0xd9, 0x47, + 0xe9, 0x1e, 0xff, 0x89, 0xd8, 0x8d, 0x66, 0x78, 0x5d, 0x5f, 0x5e, 0x5a, + 0xca, 0x08, 0x00, 0x53, 0x89, 0xc3, 0x8e, 0xda, 0x83, 0xeb, 0x02, 0x8b, + 0x07, 0x24, 0xfe, 0x2d, 0x02, 0x00, 0x5b, 0xcb, 0x53, 0x51, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc1, 0x89, 0xd7, 0x31, 0xf6, + 0x8d, 0x56, 0xfe, 0xb8, 0xd9, 0x06, 0x16, 0x89, 0xfb, 0x52, 0x89, 0xca, + 0x0e, 0xe8, 0x7b, 0x07, 0x90, 0x85, 0xc0, 0x74, 0x10, 0x3d, 0x01, 0x00, + 0x74, 0x09, 0x3d, 0x02, 0x00, 0x75, 0xe1, 0x85, 0xf6, 0x74, 0x0c, 0x31, + 0xc9, 0x89, 0xc8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xcb, 0x8b, + 0x46, 0xfe, 0x0e, 0xe8, 0xd2, 0xe1, 0x90, 0x85, 0xc0, 0x74, 0xe8, 0xbe, + 0x01, 0x00, 0xeb, 0xc0, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xc7, 0x8b, + 0x46, 0x0a, 0x89, 0xde, 0x8e, 0xc2, 0x1e, 0x57, 0x91, 0x8e, 0xd8, 0xd1, + 0xe9, 0xf3, 0xa5, 0x13, 0xc9, 0xf3, 0xa4, 0x5f, 0x1f, 0x89, 0xf8, 0x5d, + 0x5f, 0x5e, 0xca, 0x02, 0x00, 0x51, 0x56, 0x89, 0xc1, 0x89, 0xd6, 0x81, + 0xfa, 0xd9, 0x06, 0x75, 0x10, 0x89, 0xda, 0x0e, 0x3e, 0xe8, 0x78, 0xff, + 0x85, 0xc0, 0x75, 0x17, 0x31, 0xd2, 0x5e, 0x59, 0xcb, 0x89, 0xc2, 0x89, + 0xf0, 0x0e, 0x3e, 0xe8, 0x81, 0x08, 0x3d, 0xff, 0xff, 0x75, 0x04, 0x31, + 0xc0, 0xeb, 0xe9, 0x89, 0xc8, 0x89, 0xf2, 0x5e, 0x59, 0xcb, 0x53, 0x51, + 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0x8b, 0x16, 0x74, 0x0d, 0xa1, + 0x72, 0x0d, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x4c, 0x31, 0xc9, + 0x31, 0xf6, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x72, 0x0d, 0x8b, 0x16, + 0x74, 0x0d, 0x89, 0xc3, 0x8e, 0xda, 0x01, 0xf3, 0x8b, 0x3f, 0x89, 0x7e, + 0xfc, 0x8b, 0x7f, 0x02, 0x85, 0xff, 0x75, 0x06, 0x83, 0x7e, 0xfc, 0x00, + 0x74, 0x26, 0xb8, 0xd9, 0x06, 0x8e, 0xc0, 0x26, 0xc4, 0x3e, 0x6e, 0x0d, + 0x01, 0xcf, 0x26, 0x80, 0x3d, 0x00, 0x75, 0x06, 0x83, 0xc6, 0x04, 0x41, + 0xeb, 0xc4, 0x8b, 0x07, 0x8b, 0x57, 0x02, 0x0e, 0x3e, 0xe8, 0xf2, 0xba, + 0xeb, 0xee, 0xeb, 0x31, 0x0e, 0xe8, 0xea, 0xba, 0x90, 0xb8, 0x04, 0x00, + 0x0e, 0xe8, 0xd1, 0xb9, 0x90, 0x89, 0xc3, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, + 0x89, 0x1e, 0x72, 0x0d, 0x89, 0x16, 0x74, 0x0d, 0x85, 0xd2, 0x75, 0x59, + 0x85, 0xdb, 0x75, 0x55, 0x31, 0xc0, 0xc7, 0x46, 0xfe, 0xff, 0xff, 0xa3, + 0x6e, 0x0d, 0xa3, 0x70, 0x0d, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x8b, 0x16, + 0x78, 0x0d, 0xa1, 0x76, 0x0d, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, + 0x4e, 0x31, 0xc9, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, 0x76, 0x0d, 0x8b, + 0x16, 0x78, 0x0d, 0x89, 0xc3, 0x8e, 0xda, 0x01, 0xcb, 0x8b, 0x37, 0x89, + 0x76, 0xfc, 0x8b, 0x77, 0x02, 0x85, 0xf6, 0x75, 0x06, 0x83, 0x7e, 0xfc, + 0x00, 0x74, 0x2a, 0x89, 0xf2, 0x8b, 0x07, 0x0e, 0x3e, 0xe8, 0x7a, 0xba, + 0x83, 0xc1, 0x04, 0xeb, 0xce, 0x8e, 0xda, 0xc7, 0x07, 0x00, 0x00, 0xc7, + 0x47, 0x02, 0x00, 0x00, 0x8e, 0xd8, 0x83, 0xc3, 0x04, 0x89, 0x16, 0x70, + 0x0d, 0x89, 0x1e, 0x6e, 0x0d, 0xeb, 0x9e, 0xeb, 0x29, 0x0e, 0x3e, 0xe8, + 0x54, 0xba, 0xb8, 0x04, 0x00, 0x0e, 0x3e, 0xe8, 0x3b, 0xb9, 0x89, 0xc3, + 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x89, 0x1e, 0x76, 0x0d, 0x89, 0x16, 0x78, + 0x0d, 0x85, 0xd2, 0x75, 0x15, 0x85, 0xdb, 0x75, 0x11, 0xc7, 0x46, 0xfe, + 0xff, 0xff, 0x8b, 0x46, 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, + 0x5b, 0xcb, 0x8e, 0xda, 0xc7, 0x07, 0x00, 0x00, 0xc7, 0x47, 0x02, 0x00, + 0x00, 0xeb, 0xe7, 0x53, 0x51, 0x56, 0x57, 0x55, 0x1e, 0x33, 0xc0, 0x8e, + 0xd8, 0xb4, 0x63, 0xcd, 0x21, 0x8c, 0xdf, 0x72, 0x08, 0x84, 0xc0, 0x75, + 0x04, 0x85, 0xff, 0x75, 0x04, 0x33, 0xff, 0x33, 0xf6, 0x1f, 0x5d, 0x89, + 0xf0, 0x89, 0xfa, 0x5f, 0x5e, 0x59, 0x5b, 0xcb, 0x53, 0x52, 0xb8, 0x01, + 0x66, 0xcd, 0x21, 0x73, 0x02, 0x33, 0xdb, 0x89, 0xd8, 0x5a, 0x5b, 0xcb, + 0x8c, 0x16, 0x7a, 0x08, 0xc3, 0x3b, 0xc4, 0x73, 0x1c, 0x2b, 0xc4, 0xf7, + 0xd8, 0x1e, 0x50, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x58, 0x3b, 0x06, 0xfe, + 0x07, 0x77, 0x06, 0x8c, 0xd0, 0x3b, 0x06, 0x7a, 0x08, 0x1f, 0x74, 0x01, + 0xcb, 0x0e, 0x5a, 0xb8, 0xf0, 0x5a, 0xbb, 0x01, 0x00, 0xe9, 0x15, 0xdb, + 0x53, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x4f, 0x76, 0x65, 0x72, 0x66, 0x6c, + 0x6f, 0x77, 0x21, 0x00, 0x53, 0x51, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x2c, + 0x16, 0x8d, 0x4e, 0xd4, 0x51, 0xbb, 0x07, 0x00, 0x0e, 0xe8, 0xf4, 0x06, + 0x90, 0x85, 0xc0, 0x75, 0x05, 0xb8, 0x01, 0x00, 0xeb, 0x02, 0x31, 0xc0, + 0x89, 0xec, 0x5d, 0x59, 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, + 0x50, 0x89, 0xd6, 0x89, 0xdf, 0x89, 0x4e, 0xfe, 0x31, 0xc0, 0x8b, 0x4e, + 0x0a, 0x50, 0x8c, 0xd2, 0x16, 0x89, 0xf0, 0x53, 0x8b, 0x5e, 0x08, 0x0e, + 0x3e, 0xe8, 0x3e, 0x09, 0xff, 0x76, 0xfe, 0x57, 0x56, 0xb8, 0xd9, 0x06, + 0xff, 0x76, 0xfc, 0x8e, 0xd8, 0x0e, 0x3e, 0xe8, 0xbd, 0x09, 0x83, 0xc4, + 0x08, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x04, 0x00, 0x50, 0xb8, 0xbc, + 0x00, 0x0e, 0x3e, 0xe8, 0x57, 0xff, 0x58, 0x52, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x81, 0xec, 0x94, 0x00, 0x50, 0x83, 0xed, 0x78, 0x89, 0xdf, 0x89, + 0x4e, 0x70, 0xc6, 0x46, 0x76, 0x00, 0x3d, 0x02, 0x00, 0x75, 0x3f, 0xe8, + 0x6f, 0x0a, 0x89, 0x46, 0x5e, 0x89, 0x56, 0x60, 0x85, 0xd2, 0x75, 0x04, + 0x85, 0xc0, 0x74, 0x1b, 0xff, 0xb6, 0x8a, 0x00, 0x8b, 0x9e, 0x84, 0x00, + 0x8b, 0x8e, 0x86, 0x00, 0x8b, 0x56, 0x70, 0xff, 0xb6, 0x88, 0x00, 0x89, + 0xf8, 0xff, 0x5e, 0x5e, 0xe9, 0x4c, 0x04, 0x0e, 0x3e, 0xe8, 0x93, 0xcd, + 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x09, 0x00, 0xe9, + 0x39, 0x04, 0x30, 0xc0, 0x88, 0x46, 0x74, 0x30, 0xe4, 0x50, 0x16, 0x8d, + 0x56, 0x66, 0x52, 0x8d, 0x56, 0x64, 0x16, 0x8b, 0x9e, 0x88, 0x00, 0x52, + 0x8d, 0x56, 0x46, 0x16, 0x8b, 0x8e, 0x8a, 0x00, 0x52, 0x8d, 0x56, 0x42, + 0x16, 0x8b, 0x86, 0x84, 0x00, 0x52, 0x8b, 0x96, 0x86, 0x00, 0x0e, 0xe8, + 0x6d, 0x06, 0x90, 0x89, 0x46, 0x68, 0x3d, 0xff, 0xff, 0x74, 0x57, 0x8b, + 0x56, 0x70, 0x89, 0x46, 0x6e, 0x89, 0xf8, 0x0e, 0x3e, 0xe8, 0xc4, 0xc4, + 0x05, 0x9a, 0x00, 0x8c, 0xd2, 0x89, 0xc3, 0x0e, 0x3e, 0xe8, 0xa2, 0xc8, + 0x89, 0x46, 0x6c, 0x85, 0xd2, 0x75, 0x3a, 0x85, 0xc0, 0x75, 0x36, 0x8d, + 0x57, 0x01, 0x80, 0xe2, 0xfe, 0x0e, 0x3e, 0xe8, 0x0d, 0xd4, 0x39, 0xc2, + 0x73, 0x08, 0x89, 0xd0, 0x2b, 0xe0, 0x89, 0xe0, 0xeb, 0x02, 0x31, 0xc0, + 0x8c, 0xd2, 0x89, 0xc6, 0x85, 0xd2, 0x75, 0x17, 0x85, 0xc0, 0x75, 0x13, + 0x8b, 0x46, 0x42, 0x8b, 0x56, 0x44, 0x0e, 0xe8, 0x48, 0xb8, 0x90, 0xb8, + 0xff, 0xff, 0xe9, 0xa6, 0x03, 0x89, 0xc6, 0x8d, 0x56, 0x5a, 0x16, 0x81, + 0xeb, 0x93, 0x00, 0x52, 0x8d, 0x56, 0x56, 0x16, 0x8c, 0xd1, 0x52, 0x8d, + 0x56, 0x52, 0x16, 0x89, 0xf8, 0x52, 0x8d, 0x56, 0x4e, 0x16, 0x01, 0xf3, + 0x52, 0x8b, 0x56, 0x70, 0x0e, 0xe8, 0x00, 0x0a, 0x90, 0x8d, 0x46, 0xe4, + 0xbb, 0xd9, 0x06, 0x8c, 0xd2, 0x8e, 0xdb, 0xff, 0x1e, 0xb8, 0x08, 0x8e, + 0xdb, 0x80, 0x3e, 0xfc, 0x07, 0x01, 0x75, 0x39, 0x8d, 0x5e, 0x62, 0x8b, + 0x46, 0x6e, 0x8c, 0xd1, 0x0e, 0xe8, 0x8e, 0x0b, 0x90, 0x85, 0xc0, 0x74, + 0x0a, 0x8b, 0x46, 0x6c, 0x0e, 0xe8, 0x59, 0xc9, 0x90, 0xeb, 0x95, 0x8b, + 0x46, 0x62, 0xb1, 0x04, 0x8b, 0x5e, 0x46, 0x89, 0x46, 0x64, 0x8b, 0x46, + 0x6e, 0x8b, 0x56, 0x62, 0xd3, 0xe0, 0x8b, 0x4e, 0x48, 0x50, 0x31, 0xc0, + 0x0e, 0xe8, 0x10, 0xfc, 0x90, 0x8b, 0x46, 0x66, 0x0e, 0xe8, 0xe2, 0xc7, + 0x90, 0x8c, 0xd2, 0x89, 0x46, 0x6a, 0x85, 0xd2, 0x75, 0x50, 0x85, 0xc0, + 0x75, 0x4c, 0x8b, 0x46, 0x66, 0x40, 0x24, 0xfe, 0x89, 0xc2, 0x0e, 0xe8, + 0x49, 0xd3, 0x90, 0x39, 0xc2, 0x73, 0x0c, 0x8b, 0x46, 0x66, 0x40, 0x24, + 0xfe, 0x2b, 0xe0, 0x89, 0xe0, 0xeb, 0x02, 0x31, 0xc0, 0x8c, 0xd2, 0x89, + 0xc7, 0x85, 0xd2, 0x75, 0x27, 0x85, 0xc0, 0x75, 0x23, 0x0e, 0x3e, 0xe8, + 0x35, 0xcc, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x02, 0x00, 0x0e, 0xe8, + 0x8f, 0xee, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x46, 0x68, 0xff, 0xff, + 0xc7, 0x07, 0x0a, 0x00, 0xeb, 0x02, 0x89, 0xc7, 0x8c, 0xd0, 0x85, 0xc0, + 0x75, 0x07, 0x85, 0xff, 0x75, 0x03, 0xe9, 0x7e, 0x02, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0x80, 0x3e, 0xfa, 0x07, 0x03, 0x72, 0x18, 0xc5, 0x5e, 0x4e, + 0x80, 0x3f, 0x00, 0x75, 0x10, 0xc5, 0x5e, 0x52, 0x80, 0x3f, 0x00, 0x75, + 0x08, 0xc7, 0x46, 0x52, 0xee, 0x04, 0x89, 0x46, 0x54, 0xff, 0x76, 0x5c, + 0xff, 0x76, 0x5a, 0xff, 0x76, 0x58, 0x8b, 0x5e, 0x4e, 0xff, 0x76, 0x56, + 0x8b, 0x4e, 0x50, 0xff, 0x76, 0x54, 0x8c, 0xd2, 0xff, 0x76, 0x52, 0x89, + 0xf0, 0x0e, 0x3e, 0xe8, 0x09, 0x0b, 0x0e, 0xe8, 0xc1, 0xcb, 0x90, 0x89, + 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x01, 0x00, 0xc5, 0x5e, 0x5a, 0x80, 0x3f, + 0x00, 0x74, 0x72, 0xbb, 0xf1, 0x04, 0xb9, 0xd9, 0x06, 0x8b, 0x46, 0x5a, + 0x8c, 0xda, 0x0e, 0xe8, 0xe3, 0x0c, 0x90, 0x85, 0xc0, 0x75, 0x60, 0x8c, + 0xd2, 0x89, 0xf0, 0xc7, 0x46, 0x68, 0xff, 0xff, 0xe8, 0x41, 0xfd, 0x85, + 0xc0, 0x74, 0x75, 0x8b, 0x46, 0x42, 0x8b, 0x56, 0x44, 0x0e, 0x3e, 0xe8, + 0xd0, 0xb6, 0x31, 0xc0, 0x89, 0x46, 0x42, 0x89, 0x46, 0x44, 0xb8, 0x01, + 0x00, 0x8b, 0x9e, 0x84, 0x00, 0x50, 0x8b, 0x8e, 0x86, 0x00, 0x16, 0x8c, + 0xd2, 0x57, 0x89, 0xf0, 0x0e, 0xe8, 0x9a, 0x06, 0x90, 0x31, 0xc0, 0x50, + 0x50, 0x16, 0x8a, 0x5e, 0x74, 0x57, 0x8c, 0xd2, 0x16, 0x30, 0xff, 0x56, + 0x8d, 0x46, 0x4a, 0x0e, 0x3e, 0xe8, 0xbd, 0xd7, 0x52, 0x50, 0x80, 0x7e, + 0x74, 0x00, 0x74, 0x09, 0xba, 0xf6, 0x04, 0xeb, 0x07, 0xeb, 0x4d, 0xeb, + 0x26, 0xba, 0xfa, 0x04, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x02, 0x05, 0x52, + 0xba, 0xd9, 0x06, 0x0e, 0x3e, 0xe8, 0xca, 0xd6, 0x52, 0x50, 0xff, 0x76, + 0xe2, 0x0e, 0x3e, 0xe8, 0x9a, 0x0c, 0x83, 0xc4, 0x1a, 0xe9, 0x88, 0x01, + 0xe9, 0x88, 0x01, 0x0e, 0x3e, 0xe8, 0x0f, 0xcb, 0xff, 0xb6, 0x86, 0x00, + 0x89, 0xc3, 0x8e, 0xda, 0xff, 0xb6, 0x84, 0x00, 0x8b, 0x46, 0xe2, 0xc7, + 0x07, 0x00, 0x00, 0x89, 0xf2, 0x8b, 0x4e, 0x64, 0x89, 0xfb, 0xe8, 0xc9, + 0xfc, 0xe9, 0x60, 0x01, 0x8c, 0xd2, 0x89, 0xf0, 0x0e, 0xe8, 0x6c, 0xc2, + 0x90, 0x89, 0xf2, 0x01, 0xc2, 0x89, 0x56, 0x72, 0x80, 0x7e, 0x76, 0x00, + 0x74, 0x0f, 0x0e, 0xe8, 0xd5, 0xca, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xc7, + 0x07, 0x01, 0x00, 0xeb, 0x35, 0xbb, 0x0a, 0x05, 0xb9, 0xd9, 0x06, 0x8b, + 0x46, 0x72, 0x8c, 0xd2, 0x0e, 0xe8, 0xbf, 0xd1, 0x36, 0x0e, 0x3e, 0xe8, + 0xb5, 0xca, 0xff, 0xb6, 0x86, 0x00, 0x89, 0xc3, 0x8e, 0xda, 0xff, 0xb6, + 0x84, 0x00, 0x8b, 0x46, 0xe2, 0xc7, 0x07, 0x00, 0x00, 0x89, 0xf2, 0x8b, + 0x4e, 0x64, 0x89, 0xfb, 0xe8, 0x6f, 0xfc, 0x89, 0x46, 0x68, 0x0e, 0xe8, + 0x91, 0xca, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0x83, 0x3f, 0x01, 0x74, 0x11, + 0x0e, 0xe8, 0x83, 0xca, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0x83, 0x3f, 0x09, + 0x74, 0x03, 0xe9, 0xea, 0x00, 0x0e, 0x3e, 0xe8, 0x71, 0xca, 0xb9, 0xd9, + 0x06, 0x89, 0xc3, 0x8e, 0xda, 0x8b, 0x46, 0x72, 0x8c, 0xd2, 0xc7, 0x07, + 0x00, 0x00, 0xbb, 0x0f, 0x05, 0x0e, 0x3e, 0xe8, 0x5d, 0xd1, 0xff, 0xb6, + 0x86, 0x00, 0x8b, 0x4e, 0x64, 0x8b, 0x46, 0xe2, 0x89, 0xfb, 0xff, 0xb6, + 0x84, 0x00, 0x89, 0xf2, 0xe8, 0x1b, 0xfc, 0x89, 0x46, 0x68, 0x0e, 0xe8, + 0x3d, 0xca, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0x83, 0x3f, 0x01, 0x74, 0x0e, + 0x0e, 0xe8, 0x2f, 0xca, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0x83, 0x3f, 0x09, + 0x75, 0xac, 0x0e, 0xe8, 0x21, 0xca, 0x90, 0xb9, 0xd9, 0x06, 0x89, 0xc3, + 0x8e, 0xda, 0x8b, 0x46, 0x72, 0x8c, 0xd2, 0xc7, 0x07, 0x00, 0x00, 0xbb, + 0xf1, 0x04, 0x0e, 0xe8, 0x0d, 0xd1, 0x90, 0x8c, 0xd2, 0x89, 0xf0, 0xe8, + 0xb2, 0xfb, 0x85, 0xc0, 0x74, 0x71, 0x8b, 0x46, 0x42, 0x8b, 0x56, 0x44, + 0x0e, 0xe8, 0x42, 0xb5, 0x90, 0x31, 0xc0, 0x89, 0x46, 0x42, 0x89, 0x46, + 0x44, 0xb8, 0x01, 0x00, 0x8b, 0x9e, 0x84, 0x00, 0x50, 0x8b, 0x8e, 0x86, + 0x00, 0x16, 0x8c, 0xd2, 0x57, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, 0x0a, 0x05, + 0x31, 0xc0, 0x50, 0x50, 0x16, 0x8a, 0x5e, 0x74, 0x57, 0x8c, 0xd2, 0x16, + 0x30, 0xff, 0x56, 0x8d, 0x46, 0x4a, 0x0e, 0xe8, 0x2f, 0xd6, 0x90, 0x52, + 0x50, 0x80, 0x7e, 0x74, 0x00, 0x74, 0x05, 0xba, 0xf6, 0x04, 0xeb, 0x03, + 0xba, 0xfa, 0x04, 0xb8, 0xd9, 0x06, 0x50, 0xb8, 0x02, 0x05, 0x52, 0xba, + 0xd9, 0x06, 0x0e, 0xe8, 0x40, 0xd5, 0x90, 0x52, 0x50, 0xff, 0x76, 0xe2, + 0x0e, 0xe8, 0x10, 0x0b, 0x90, 0x83, 0xc4, 0x1a, 0x89, 0x46, 0x68, 0x8b, + 0x46, 0x6a, 0x0e, 0xe8, 0x43, 0xc6, 0x90, 0x8b, 0x46, 0x6c, 0x0e, 0xe8, + 0x3b, 0xc6, 0x90, 0x8b, 0x46, 0x42, 0x8b, 0x56, 0x44, 0x0e, 0x3e, 0xe8, + 0xc0, 0xb4, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x80, 0x3e, 0xfc, 0x07, 0x01, + 0x75, 0x08, 0x8b, 0x46, 0x64, 0x0e, 0x3e, 0xe8, 0x64, 0x08, 0x8d, 0x46, + 0xe4, 0xbb, 0xd9, 0x06, 0x8c, 0xd2, 0x8e, 0xdb, 0xff, 0x1e, 0xbc, 0x08, + 0x8b, 0x46, 0x68, 0x8d, 0x66, 0x78, 0x5d, 0x5f, 0x5e, 0x5a, 0xca, 0x08, + 0x00, 0x56, 0x89, 0xc6, 0x8e, 0xda, 0x89, 0xda, 0x8a, 0x04, 0x30, 0xe4, + 0x39, 0xd0, 0x74, 0x0d, 0x89, 0xf3, 0x8a, 0x07, 0x46, 0x84, 0xc0, 0x75, + 0xef, 0x31, 0xd2, 0x5e, 0xcb, 0x89, 0xf0, 0x8c, 0xda, 0x5e, 0xcb, 0x51, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x8e, 0x46, 0x0e, 0x89, + 0xd6, 0x8d, 0x57, 0x03, 0x80, 0xe2, 0xfe, 0x39, 0xda, 0x73, 0x61, 0xba, + 0xff, 0xff, 0x83, 0xee, 0x02, 0x8e, 0xd8, 0x8b, 0x1c, 0x80, 0xe3, 0xfe, + 0x39, 0xda, 0x76, 0x60, 0x89, 0xf7, 0x29, 0xda, 0x01, 0xdf, 0x8b, 0x5e, + 0x0c, 0x89, 0x7e, 0xfe, 0x26, 0x89, 0x17, 0x8b, 0x5e, 0xfe, 0x8e, 0xd8, + 0x83, 0x3f, 0xff, 0x74, 0x41, 0xf6, 0x07, 0x01, 0x75, 0x45, 0x8b, 0x7e, + 0xfe, 0x8b, 0x0d, 0x8b, 0x7d, 0x04, 0x89, 0x7e, 0xfc, 0x8b, 0x7e, 0xfe, + 0x8b, 0x7d, 0x02, 0x31, 0xdb, 0x89, 0x7e, 0xfa, 0x3d, 0xd9, 0x06, 0x75, + 0x35, 0x8b, 0x1e, 0xe6, 0x07, 0x8e, 0xd8, 0x83, 0x7f, 0x04, 0x00, 0x74, + 0x29, 0x39, 0xf3, 0x76, 0x1d, 0x8e, 0xd8, 0x8b, 0x5f, 0x04, 0xeb, 0xed, + 0x83, 0xfa, 0x06, 0x73, 0x9d, 0xba, 0x06, 0x00, 0xeb, 0x98, 0xb8, 0x02, + 0x00, 0xe9, 0x95, 0x00, 0xe9, 0xa0, 0x00, 0xe9, 0x98, 0x00, 0x8b, 0x17, + 0x01, 0xda, 0x39, 0xd6, 0x73, 0xdb, 0x8e, 0xd8, 0x8b, 0x57, 0x06, 0x3b, + 0x56, 0xfe, 0x75, 0x08, 0x89, 0xd7, 0x8b, 0x55, 0x02, 0x89, 0x57, 0x06, + 0x8b, 0x7e, 0x0c, 0x26, 0x3b, 0x0d, 0x73, 0x29, 0x8b, 0x7e, 0xfa, 0x8e, + 0xd8, 0x8b, 0x56, 0xfc, 0x89, 0x55, 0x04, 0x89, 0xd7, 0x8b, 0x56, 0xfa, + 0x89, 0x55, 0x02, 0x01, 0x0c, 0xff, 0x4f, 0x0e, 0x8b, 0x5e, 0x0c, 0x26, + 0x3b, 0x0f, 0x73, 0x4b, 0x01, 0x4e, 0xfe, 0x26, 0x29, 0x0f, 0xe9, 0x5e, + 0xff, 0x89, 0xca, 0x26, 0x2b, 0x15, 0x89, 0x56, 0xf8, 0x83, 0xfa, 0x06, + 0x72, 0xca, 0x89, 0xfb, 0x26, 0x8b, 0x17, 0x01, 0x56, 0xfe, 0x8e, 0xd8, + 0x8b, 0x56, 0xf8, 0x8b, 0x5e, 0xfe, 0x8b, 0x7e, 0xfa, 0x89, 0x17, 0x89, + 0x7f, 0x02, 0x8b, 0x7e, 0xfc, 0x89, 0x7f, 0x04, 0x8b, 0x5e, 0xfa, 0x8b, + 0x7e, 0xfe, 0x89, 0x7f, 0x04, 0x8b, 0x5e, 0xfc, 0x89, 0x7f, 0x02, 0x8b, + 0x5e, 0x0c, 0x26, 0x8b, 0x07, 0x01, 0x04, 0x31, 0xc0, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0x59, 0xca, 0x04, 0x00, 0xb8, 0x01, 0x00, 0xeb, 0xf2, 0x89, + 0xd9, 0x29, 0xd1, 0x83, 0xf9, 0x06, 0x72, 0xe7, 0x89, 0xd7, 0x83, 0xcf, + 0x01, 0x89, 0x3c, 0x89, 0xf7, 0x80, 0xc9, 0x01, 0x01, 0xd7, 0x31, 0xdb, + 0x89, 0x7e, 0xf6, 0x89, 0x0d, 0x3d, 0xd9, 0x06, 0x75, 0x1f, 0x8b, 0x1e, + 0xe6, 0x07, 0x8e, 0xd8, 0x83, 0x7f, 0x04, 0x00, 0x74, 0x13, 0x39, 0xf3, + 0x76, 0x07, 0x8e, 0xd8, 0x8b, 0x5f, 0x04, 0xeb, 0xed, 0x8b, 0x17, 0x01, + 0xda, 0x39, 0xd6, 0x73, 0xf1, 0x8b, 0x56, 0xf6, 0x8e, 0xd8, 0x83, 0xc2, + 0x02, 0xff, 0x47, 0x0c, 0x0e, 0xe8, 0x4b, 0x09, 0x90, 0xeb, 0x9c, 0x51, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc1, 0x89, 0xd6, + 0x89, 0xdf, 0x80, 0x66, 0xfe, 0xfe, 0x8d, 0x56, 0xfc, 0x16, 0x89, 0xfb, + 0x89, 0xc8, 0x52, 0x89, 0xf2, 0x0e, 0x3e, 0xe8, 0x5d, 0xfe, 0x85, 0xc0, + 0x74, 0x1a, 0x3d, 0x01, 0x00, 0x74, 0x0b, 0x3d, 0x02, 0x00, 0x75, 0xe2, + 0xf6, 0x46, 0xfe, 0x01, 0x74, 0x0e, 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0x59, 0xcb, 0x89, 0xf0, 0xeb, 0xf5, 0x8b, 0x56, 0xfc, 0x89, + 0xc8, 0x0e, 0x3e, 0xe8, 0x4f, 0xc1, 0x85, 0xc0, 0x74, 0xe4, 0x80, 0x4e, + 0xfe, 0x01, 0xeb, 0xba, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xc6, + 0x89, 0xd7, 0x8b, 0x46, 0x0c, 0x8b, 0x56, 0x0e, 0x89, 0xd9, 0x8e, 0xc7, + 0x89, 0xf3, 0x1e, 0x92, 0x8e, 0xd8, 0x06, 0x53, 0xb4, 0x1a, 0xcd, 0x21, + 0x5a, 0x1f, 0xb4, 0x4e, 0xcd, 0x21, 0x1f, 0xe8, 0xe8, 0xf0, 0x5d, 0x5f, + 0x5e, 0x59, 0xca, 0x04, 0x00, 0x1e, 0x92, 0x8e, 0xd8, 0xb4, 0x1a, 0xcd, + 0x21, 0x1f, 0xb4, 0x4f, 0xcd, 0x21, 0xe8, 0xd1, 0xf0, 0xcb, 0x31, 0xc0, + 0xcb, 0x56, 0x89, 0xc6, 0x8e, 0xda, 0x8e, 0xc1, 0x26, 0x8a, 0x07, 0x88, + 0x04, 0x84, 0xc0, 0x74, 0x04, 0x46, 0x43, 0xeb, 0xf3, 0x89, 0xf0, 0x8c, + 0xda, 0x5e, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0c, 0x89, + 0xc7, 0x89, 0x56, 0xfc, 0x89, 0x5e, 0xf8, 0x89, 0x4e, 0xfa, 0x85, 0xc9, + 0x75, 0x15, 0x85, 0xdb, 0x75, 0x11, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0xa1, + 0x72, 0x0d, 0x89, 0x46, 0xf8, 0xa1, 0x74, 0x0d, 0x89, 0x46, 0xfa, 0xc7, + 0x46, 0xfe, 0x00, 0x00, 0x83, 0x7e, 0xfa, 0x00, 0x75, 0x06, 0x83, 0x7e, + 0xf8, 0x00, 0x74, 0x28, 0x8b, 0x76, 0xf8, 0x8b, 0x5e, 0xfa, 0x8e, 0xdb, + 0x8b, 0x44, 0x02, 0x8b, 0x14, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, + 0x13, 0x89, 0xd0, 0x8b, 0x54, 0x02, 0x0e, 0xe8, 0x12, 0xbe, 0x90, 0x40, + 0x83, 0xc6, 0x04, 0x01, 0x46, 0xfe, 0xeb, 0xde, 0xff, 0x46, 0xfe, 0x80, + 0x7e, 0x1a, 0x00, 0x74, 0x15, 0x8e, 0x5e, 0xfc, 0x8b, 0x05, 0x8b, 0x55, + 0x02, 0x83, 0x46, 0xfe, 0x02, 0x0e, 0x3e, 0xe8, 0xee, 0xbd, 0x40, 0x01, + 0x46, 0xfe, 0x8b, 0x46, 0xfe, 0x05, 0x0f, 0x00, 0x24, 0xf0, 0xba, 0xd9, + 0x06, 0x89, 0x46, 0xfe, 0xb8, 0xd9, 0x06, 0x83, 0x46, 0xfe, 0x0f, 0x8e, + 0xd8, 0x8b, 0x46, 0xfe, 0x8b, 0x0e, 0x24, 0x08, 0xc7, 0x06, 0x24, 0x08, + 0x10, 0x00, 0x0e, 0xe8, 0xac, 0xc1, 0x90, 0x8e, 0xda, 0x89, 0xc6, 0x85, + 0xc0, 0x75, 0x3d, 0x8b, 0x46, 0xfe, 0x0e, 0xe8, 0x6b, 0xb0, 0x90, 0x89, + 0xc6, 0x8e, 0xda, 0x85, 0xd2, 0x75, 0x2d, 0x85, 0xc0, 0x75, 0x29, 0x0e, + 0x3e, 0xe8, 0x1b, 0xc6, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x05, 0x00, + 0x0e, 0xe8, 0x75, 0xe8, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xb8, 0xd9, 0x06, + 0xc7, 0x07, 0x08, 0x00, 0x8e, 0xd8, 0xb8, 0xff, 0xff, 0x89, 0x0e, 0x24, + 0x08, 0xe9, 0x26, 0x01, 0xb8, 0xd9, 0x06, 0x8e, 0xc0, 0x8b, 0x5e, 0x0a, + 0x26, 0x89, 0x0e, 0x24, 0x08, 0x8e, 0x46, 0x0c, 0x26, 0x89, 0x37, 0x8d, + 0x44, 0x0f, 0xb1, 0x04, 0x24, 0xf0, 0x26, 0x8c, 0x5f, 0x02, 0x89, 0xc3, + 0x8c, 0xda, 0xd3, 0xeb, 0x8e, 0x46, 0x14, 0x89, 0xd9, 0x8b, 0x5e, 0x12, + 0x01, 0xd1, 0x26, 0x89, 0x0f, 0xc4, 0x5e, 0x0e, 0x83, 0x6e, 0xfe, 0x0f, + 0x26, 0x89, 0x07, 0x89, 0xc6, 0x26, 0x8c, 0x5f, 0x02, 0x83, 0x7e, 0xfa, + 0x00, 0x75, 0x06, 0x83, 0x7e, 0xf8, 0x00, 0x74, 0x37, 0x8b, 0x5e, 0xf8, + 0x8b, 0x46, 0xfa, 0x89, 0x5e, 0xf6, 0x89, 0x46, 0xf4, 0x8e, 0x46, 0xf4, + 0x8b, 0x5e, 0xf6, 0x26, 0x8b, 0x47, 0x02, 0x26, 0x8b, 0x17, 0x85, 0xc0, + 0x75, 0x04, 0x85, 0xd2, 0x74, 0x16, 0x89, 0xc1, 0x89, 0xd3, 0x89, 0xf0, + 0x8c, 0xda, 0x83, 0x46, 0xf6, 0x04, 0xe8, 0x78, 0xfe, 0x89, 0xc6, 0x8e, + 0xda, 0x46, 0xeb, 0xd5, 0xc6, 0x04, 0x00, 0x46, 0x80, 0x7e, 0x1a, 0x00, + 0x74, 0x1b, 0xc6, 0x04, 0x01, 0x46, 0x8c, 0xda, 0xc6, 0x04, 0x00, 0x8e, + 0x46, 0xfc, 0x8d, 0x44, 0x01, 0x26, 0x8b, 0x1d, 0x26, 0x8b, 0x4d, 0x02, + 0x0e, 0xe8, 0x53, 0xcc, 0x90, 0x8e, 0x5e, 0xfc, 0x31, 0xdb, 0x8b, 0x45, + 0x02, 0x8b, 0x15, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, 0x2c, 0x8d, + 0x75, 0x04, 0x8c, 0xd9, 0x8e, 0xd9, 0x8b, 0x54, 0x02, 0x8b, 0x04, 0x85, + 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x18, 0x85, 0xdb, 0x74, 0x01, 0x43, + 0x8e, 0xd9, 0x8b, 0x04, 0x8b, 0x54, 0x02, 0x0e, 0x3e, 0xe8, 0x9c, 0xbc, + 0x83, 0xc6, 0x04, 0x01, 0xc3, 0xeb, 0xd9, 0x83, 0xfb, 0x7e, 0x76, 0x2c, + 0x0e, 0xe8, 0x07, 0xc5, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, 0x02, + 0x00, 0x0e, 0x3e, 0xe8, 0x5f, 0xe7, 0x89, 0xc3, 0x8e, 0xda, 0xc7, 0x07, + 0x0a, 0x00, 0xc5, 0x5e, 0x0a, 0x8b, 0x07, 0x8b, 0x57, 0x02, 0x0e, 0xe8, + 0x34, 0xb0, 0x90, 0xb8, 0xff, 0xff, 0xeb, 0x0e, 0xc5, 0x5e, 0x16, 0xb1, + 0x04, 0x8b, 0x46, 0xfe, 0xc7, 0x07, 0x90, 0x00, 0xd3, 0xe8, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0xca, 0x12, 0x00, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, + 0x89, 0xde, 0x89, 0x4e, 0xfe, 0xc5, 0x7e, 0x0a, 0x83, 0x7e, 0x0e, 0x00, + 0x75, 0x01, 0x47, 0x8e, 0x46, 0xfe, 0x26, 0x8b, 0x5c, 0x02, 0x26, 0x8b, + 0x0c, 0x85, 0xdb, 0x75, 0x04, 0x85, 0xc9, 0x74, 0x46, 0x83, 0xc6, 0x04, + 0x26, 0x8b, 0x4c, 0x02, 0x26, 0x8b, 0x1c, 0x85, 0xc9, 0x75, 0x04, 0x85, + 0xdb, 0x74, 0x34, 0x8e, 0x46, 0xfe, 0x89, 0xf8, 0x8c, 0xda, 0x26, 0x8b, + 0x1c, 0x26, 0x8b, 0x4c, 0x02, 0xe8, 0x7d, 0xfd, 0x8e, 0x46, 0xfe, 0x89, + 0xc3, 0x89, 0xc7, 0x83, 0xc6, 0x04, 0x8e, 0xda, 0x26, 0x8b, 0x4c, 0x02, + 0x26, 0x8b, 0x04, 0x85, 0xc9, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x08, 0x8d, + 0x7f, 0x01, 0xc6, 0x07, 0x20, 0xeb, 0xcc, 0x83, 0x7e, 0x0e, 0x00, 0x74, + 0x05, 0xc6, 0x05, 0x00, 0xeb, 0x11, 0x8b, 0x76, 0x0a, 0x89, 0xfb, 0xc6, + 0x05, 0x0d, 0x2b, 0x5e, 0x0a, 0x8e, 0x5e, 0x0c, 0x4b, 0x88, 0x1c, 0x89, + 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x06, 0x00, 0x55, 0x8b, 0xec, 0x56, 0x57, + 0x52, 0x51, 0x53, 0x06, 0x1e, 0x8c, 0xd0, 0x8e, 0xd8, 0x8b, 0x46, 0x0c, + 0xa3, 0x9c, 0x08, 0x8b, 0x46, 0x0a, 0xa3, 0x9e, 0x08, 0x8c, 0x1e, 0xa0, + 0x08, 0x8c, 0x1e, 0xa8, 0x08, 0x1e, 0x07, 0x8b, 0xf0, 0x46, 0xbf, 0x7c, + 0x08, 0x89, 0x3e, 0xa2, 0x08, 0x8c, 0x1e, 0xa4, 0x08, 0xb0, 0x01, 0xb4, + 0x29, 0xcd, 0x21, 0xbf, 0x8c, 0x08, 0x89, 0x3e, 0xa6, 0x08, 0x8c, 0x1e, + 0xa8, 0x08, 0xb0, 0x01, 0xb4, 0x29, 0xcd, 0x21, 0x55, 0x06, 0x1e, 0x8c, + 0x16, 0xac, 0x08, 0x89, 0x26, 0xaa, 0x08, 0x8c, 0x1e, 0xb2, 0x08, 0x80, + 0x3e, 0xfa, 0x07, 0x02, 0x75, 0x10, 0xbf, 0x2e, 0x00, 0x8b, 0x35, 0x89, + 0x36, 0xae, 0x08, 0x8b, 0x75, 0x02, 0x89, 0x36, 0xb0, 0x08, 0xbb, 0x9c, + 0x08, 0x83, 0x7e, 0x06, 0x01, 0x75, 0x06, 0xb0, 0x04, 0x33, 0xc9, 0xeb, + 0x02, 0x32, 0xc0, 0xf8, 0x50, 0xb4, 0x0b, 0xcd, 0x21, 0x58, 0xc7, 0x06, + 0x04, 0x08, 0x01, 0x00, 0x8b, 0x56, 0x08, 0x50, 0xff, 0x1e, 0x0f, 0x08, + 0x58, 0xb4, 0x4b, 0xcd, 0x21, 0x50, 0x9f, 0x5b, 0x50, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0x58, 0x8e, 0x16, 0xac, 0x08, 0x8b, 0x26, 0xaa, 0x08, 0x8e, + 0x1e, 0xb2, 0x08, 0x80, 0x3e, 0xfa, 0x07, 0x02, 0x75, 0x10, 0xbf, 0x2e, + 0x00, 0x8b, 0x36, 0xb0, 0x08, 0x89, 0x75, 0x02, 0x8b, 0x36, 0xae, 0x08, + 0x89, 0x35, 0x9e, 0x93, 0x1f, 0xc7, 0x06, 0x04, 0x08, 0x00, 0x00, 0x07, + 0x5d, 0x72, 0x04, 0xb4, 0x4d, 0xcd, 0x21, 0x73, 0x03, 0xe8, 0x2b, 0xe5, + 0x1f, 0x07, 0x5b, 0x59, 0x5a, 0x5f, 0x5e, 0x5d, 0xcb, 0xb8, 0xd9, 0x06, + 0x8e, 0xd8, 0xa1, 0xb4, 0x08, 0x8b, 0x16, 0xb6, 0x08, 0xc3, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xdf, 0x89, 0xce, 0x8b, 0x4e, + 0x08, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, 0x57, 0x8e, 0xda, 0x89, + 0xc3, 0x89, 0x3f, 0x89, 0x77, 0x02, 0x8b, 0x5e, 0x0c, 0x29, 0xcb, 0x81, + 0xfb, 0x93, 0x00, 0x72, 0x03, 0xbb, 0x92, 0x00, 0x8b, 0x56, 0x0a, 0x89, + 0xc8, 0x0e, 0x3e, 0xe8, 0xda, 0x04, 0x89, 0x46, 0xfe, 0x50, 0x89, 0xcb, + 0x89, 0xf2, 0x8b, 0x4e, 0x0a, 0x89, 0xf8, 0x0e, 0x3e, 0xe8, 0xfc, 0x04, + 0x8b, 0x5e, 0xfe, 0x89, 0xf8, 0x89, 0xf2, 0x0e, 0x3e, 0xe8, 0x26, 0x05, + 0x8e, 0xde, 0x89, 0xfb, 0x89, 0xf2, 0x01, 0xc3, 0x89, 0xf8, 0xc6, 0x07, + 0x00, 0x8b, 0x5e, 0xfe, 0x0e, 0xe8, 0x12, 0x05, 0x90, 0x01, 0xc7, 0x47, + 0x89, 0xf8, 0x89, 0xf2, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x08, 0x00, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0e, 0x8b, 0x7e, 0x0a, 0x89, + 0xc6, 0x89, 0x56, 0xfe, 0x89, 0x5e, 0xf4, 0x89, 0x4e, 0xfa, 0x8e, 0xda, + 0x89, 0xc3, 0x8a, 0x04, 0x89, 0xd1, 0x3c, 0x2f, 0x75, 0x67, 0x8e, 0x5e, + 0xfe, 0x8a, 0x44, 0x01, 0x3c, 0x2f, 0x75, 0x59, 0x83, 0xc6, 0x02, 0x8e, + 0x5e, 0xfe, 0x8a, 0x04, 0x84, 0xc0, 0x75, 0x4f, 0xff, 0x76, 0xfe, 0x8b, + 0x56, 0x0c, 0x56, 0x89, 0xf8, 0x51, 0x8b, 0x4e, 0xfa, 0x53, 0x8b, 0x5e, + 0xf4, 0xe8, 0x3a, 0xff, 0x89, 0x46, 0xf4, 0x89, 0x56, 0xfa, 0xc7, 0x46, + 0xfc, 0x00, 0x00, 0x8b, 0x56, 0xfe, 0x89, 0x76, 0xf6, 0x89, 0xf1, 0x31, + 0xff, 0x89, 0x56, 0xf8, 0x89, 0x56, 0xf2, 0x8b, 0x56, 0xfe, 0x89, 0xf0, + 0x0e, 0xe8, 0x03, 0xe8, 0x90, 0x89, 0xc3, 0x85, 0xc0, 0x74, 0x5b, 0x3d, + 0x2e, 0x00, 0x75, 0x59, 0x8b, 0x7e, 0xfe, 0x89, 0x76, 0xfc, 0x46, 0xeb, + 0xe2, 0xeb, 0x44, 0xeb, 0x4e, 0x3c, 0x5c, 0x74, 0x95, 0x8e, 0x5e, 0xfe, + 0x80, 0x3c, 0x00, 0x74, 0x62, 0x80, 0x7c, 0x01, 0x3a, 0x75, 0x5c, 0x8b, + 0x46, 0x0c, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xff, 0x74, 0x20, 0x8b, 0x5e, + 0xf4, 0x8e, 0xd8, 0x8b, 0x56, 0xfa, 0x89, 0x1d, 0x89, 0x55, 0x02, 0x8e, + 0x5e, 0xfe, 0x8a, 0x14, 0x8e, 0x5e, 0xfa, 0xc7, 0x47, 0x01, 0x3a, 0x00, + 0x83, 0x46, 0xf4, 0x03, 0x88, 0x17, 0x83, 0xc6, 0x02, 0xeb, 0x87, 0x3c, + 0x5c, 0x75, 0xbe, 0xe9, 0x5a, 0xff, 0xe9, 0x77, 0x00, 0xeb, 0x46, 0x3c, + 0x2f, 0x75, 0x03, 0xe9, 0x5a, 0xff, 0x3c, 0x5c, 0x74, 0xf9, 0x3c, 0x2e, + 0x74, 0xf5, 0x89, 0xf0, 0x8c, 0xda, 0x0e, 0xe8, 0xcd, 0xe7, 0x90, 0x89, + 0xc6, 0x89, 0x56, 0xfe, 0xe9, 0x38, 0xff, 0x8b, 0x46, 0x0c, 0x85, 0xc0, + 0x75, 0x07, 0x85, 0xff, 0x75, 0x03, 0xe9, 0x4d, 0xff, 0x8b, 0x5e, 0xf4, + 0x8e, 0xd8, 0x8b, 0x56, 0xfa, 0x89, 0x1d, 0x89, 0x55, 0x02, 0x8e, 0xda, + 0xff, 0x46, 0xf4, 0xc6, 0x07, 0x00, 0xe9, 0x35, 0xff, 0x8b, 0x56, 0xfe, + 0x89, 0xf0, 0x0e, 0xe8, 0x95, 0xe7, 0x90, 0x89, 0xc6, 0x89, 0x56, 0xfe, + 0x83, 0xfb, 0x2f, 0x75, 0x13, 0x8b, 0x56, 0xfe, 0xc7, 0x46, 0xfc, 0x00, + 0x00, 0x89, 0x76, 0xf6, 0x31, 0xff, 0x89, 0x56, 0xf8, 0xe9, 0x23, 0xff, + 0x83, 0xfb, 0x5c, 0x74, 0xe8, 0xe9, 0x1b, 0xff, 0xff, 0x76, 0xf8, 0x8b, + 0x5e, 0xf4, 0xff, 0x76, 0xf6, 0x8b, 0x46, 0x0e, 0xff, 0x76, 0xf2, 0x8b, + 0x56, 0x10, 0x51, 0x8b, 0x4e, 0xfa, 0xe8, 0x21, 0xfe, 0x89, 0x46, 0xf4, + 0x89, 0x56, 0xfa, 0x85, 0xff, 0x75, 0x0c, 0x83, 0x7e, 0xfc, 0x00, 0x75, + 0x06, 0x8b, 0x7e, 0xfe, 0x89, 0x76, 0xfc, 0x57, 0x8b, 0x5e, 0xf4, 0xff, + 0x76, 0xfc, 0x8b, 0x4e, 0xfa, 0xff, 0x76, 0xf8, 0x8b, 0x46, 0x12, 0xff, + 0x76, 0xf6, 0x8b, 0x56, 0x14, 0xe8, 0xf2, 0xfd, 0xff, 0x76, 0xfe, 0x89, + 0xc3, 0x56, 0x89, 0xd1, 0x57, 0x8b, 0x46, 0x16, 0xff, 0x76, 0xfc, 0x8b, + 0x56, 0x18, 0xe8, 0xdd, 0xfd, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x10, + 0x00, 0xcb, 0x53, 0x52, 0x1e, 0x8e, 0xd9, 0x8b, 0xd3, 0x8b, 0xd8, 0xb4, + 0x48, 0xcd, 0x21, 0x87, 0xd3, 0x72, 0x06, 0x8b, 0xd0, 0x2b, 0xc0, 0xeb, + 0x03, 0xe8, 0xca, 0xea, 0x89, 0x17, 0x1f, 0x5a, 0x5b, 0xcb, 0x06, 0x8e, + 0xc0, 0xb4, 0x49, 0xcd, 0x21, 0xe8, 0xba, 0xea, 0x07, 0xcb, 0x06, 0x1e, + 0x8e, 0xd9, 0x53, 0x8e, 0xc2, 0x8b, 0xd8, 0xb4, 0x4a, 0xcd, 0x21, 0x8b, + 0xd3, 0x5b, 0x73, 0x02, 0x89, 0x17, 0x1f, 0xe8, 0xa0, 0xea, 0x07, 0xcb, + 0x8e, 0xd9, 0x3d, 0x2f, 0x00, 0x75, 0x0a, 0x83, 0x3f, 0x00, 0x75, 0x02, + 0x89, 0x07, 0x8b, 0x07, 0xc3, 0x3d, 0x5c, 0x00, 0x74, 0xf1, 0xc3, 0x56, + 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0c, 0x8b, 0x7e, 0x0e, 0x89, 0xc6, + 0x89, 0x56, 0xfe, 0x89, 0x5e, 0xfa, 0x89, 0x4e, 0xfc, 0xc7, 0x46, 0xf4, + 0x00, 0x00, 0x89, 0x46, 0xf6, 0x89, 0x56, 0xf8, 0x85, 0xc9, 0x75, 0x04, + 0x85, 0xdb, 0x74, 0x28, 0x8e, 0xd9, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x20, + 0x3c, 0x5c, 0x74, 0x03, 0xe9, 0x46, 0x01, 0x3a, 0x47, 0x01, 0x75, 0xf8, + 0x89, 0xf0, 0x0e, 0xe8, 0x7d, 0xc7, 0x90, 0x8b, 0x46, 0xfa, 0x8b, 0x56, + 0xfc, 0x0e, 0x3e, 0xe8, 0xf2, 0xb7, 0x01, 0xc6, 0x8e, 0x5e, 0xfe, 0xc6, + 0x04, 0x00, 0x83, 0x7e, 0x0c, 0x00, 0x75, 0x09, 0x83, 0x7e, 0x0a, 0x00, + 0x75, 0x03, 0xe9, 0x8d, 0x00, 0xc5, 0x5e, 0x0a, 0x80, 0x3f, 0x00, 0x74, + 0xf5, 0x8b, 0x46, 0x0a, 0x8b, 0x56, 0x0c, 0x8d, 0x5e, 0xf4, 0x8c, 0xd1, + 0x0e, 0xe8, 0xe7, 0xe5, 0x90, 0xe8, 0x68, 0xff, 0x8b, 0x4e, 0xfe, 0x89, + 0xf3, 0x0e, 0x3e, 0xe8, 0xbf, 0x02, 0x8b, 0x56, 0xfe, 0x89, 0xf0, 0x0e, + 0x3e, 0xe8, 0xca, 0x02, 0x89, 0xf3, 0x8e, 0x5e, 0xfe, 0x01, 0xc3, 0x89, + 0xf0, 0x8c, 0xda, 0xc6, 0x07, 0x00, 0x0e, 0xe8, 0x05, 0xe6, 0x90, 0x89, + 0xc6, 0x89, 0x56, 0xfe, 0x8b, 0x46, 0x0a, 0x8b, 0x56, 0x0c, 0x0e, 0xe8, + 0xf5, 0xe5, 0x90, 0x89, 0xc3, 0x8e, 0xda, 0x89, 0x46, 0x0a, 0x89, 0x56, + 0x0c, 0x80, 0x3f, 0x00, 0x75, 0xa7, 0x83, 0x7e, 0xf4, 0x00, 0x75, 0x05, + 0xc7, 0x46, 0xf4, 0x5c, 0x00, 0x8b, 0x4e, 0xfe, 0x8b, 0x46, 0xf6, 0x8b, + 0x56, 0xf8, 0x89, 0xf3, 0x0e, 0xe8, 0x9a, 0x02, 0x90, 0x89, 0xc3, 0x8e, + 0xda, 0x8a, 0x07, 0x30, 0xe4, 0x3b, 0x46, 0xf4, 0x74, 0x03, 0xe9, 0x9e, + 0x00, 0x4e, 0x83, 0x7e, 0xf4, 0x00, 0x75, 0x05, 0xc7, 0x46, 0xf4, 0x5c, + 0x00, 0x8b, 0x46, 0x10, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xff, 0x74, 0x73, + 0x8e, 0xd8, 0x80, 0x3d, 0x00, 0x74, 0x6c, 0x8d, 0x5e, 0xf4, 0x89, 0xf8, + 0x8c, 0xda, 0x8c, 0xd1, 0x0e, 0xe8, 0x47, 0xe5, 0x90, 0xe8, 0xc8, 0xfe, + 0x3b, 0x46, 0xf4, 0x75, 0x77, 0x8e, 0x5e, 0x10, 0x80, 0x3d, 0x00, 0x74, + 0x6d, 0x8d, 0x5e, 0xf4, 0x89, 0xf8, 0x8c, 0xda, 0x8c, 0xd1, 0x0e, 0xe8, + 0x29, 0xe5, 0x90, 0xe8, 0xaa, 0xfe, 0x8b, 0x4e, 0xfe, 0x89, 0xf3, 0x0e, + 0x3e, 0xe8, 0x01, 0x02, 0x8b, 0x56, 0xfe, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, + 0x0c, 0x02, 0x89, 0xf3, 0x8e, 0x5e, 0xfe, 0x01, 0xc3, 0x89, 0xf0, 0x8c, + 0xda, 0xc6, 0x07, 0x00, 0x0e, 0xe8, 0x47, 0xe5, 0x90, 0x89, 0xc6, 0x89, + 0x56, 0xfe, 0x8b, 0x56, 0x10, 0x89, 0xf8, 0x0e, 0x3e, 0xe8, 0x37, 0xe5, + 0x89, 0xc7, 0x89, 0x56, 0x10, 0xeb, 0xaa, 0xeb, 0x31, 0xc5, 0x5e, 0xfa, + 0x8a, 0x07, 0x8e, 0x5e, 0xfe, 0x88, 0x04, 0x46, 0xc6, 0x04, 0x3a, 0x46, + 0xe9, 0xc1, 0xfe, 0x8e, 0x5e, 0xfe, 0x8a, 0x46, 0xf4, 0x88, 0x04, 0xe9, + 0x58, 0xff, 0xeb, 0x1e, 0x8e, 0x5e, 0xfe, 0x8a, 0x04, 0x98, 0x3b, 0x46, + 0xf4, 0x74, 0x03, 0xe9, 0x7b, 0xff, 0x46, 0xe9, 0x77, 0xff, 0x8e, 0x5e, + 0xfe, 0x8a, 0x04, 0x98, 0x3b, 0x46, 0xf4, 0x75, 0x01, 0x46, 0x83, 0x7e, + 0x14, 0x00, 0x75, 0x06, 0x83, 0x7e, 0x12, 0x00, 0x74, 0x29, 0xc5, 0x5e, + 0x12, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x20, 0x3c, 0x2e, 0x75, 0x14, 0xc5, + 0x5e, 0x12, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x13, 0x8e, 0x5e, 0xfe, 0xff, + 0x46, 0x12, 0x88, 0x04, 0x46, 0xeb, 0xec, 0x8e, 0x5e, 0xfe, 0xc6, 0x04, + 0x2e, 0xeb, 0xf5, 0x8e, 0x5e, 0xfe, 0xc6, 0x04, 0x00, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0xca, 0x0c, 0x00, 0x56, 0x89, 0xc6, 0x8e, 0xda, 0x8e, 0xc1, + 0x8a, 0x04, 0x46, 0x3c, 0x41, 0x72, 0x06, 0x3c, 0x5a, 0x77, 0x02, 0x04, + 0x20, 0x26, 0x8a, 0x27, 0x43, 0x80, 0xfc, 0x41, 0x72, 0x08, 0x80, 0xfc, + 0x5a, 0x77, 0x03, 0x80, 0xc4, 0x20, 0x38, 0xe0, 0x75, 0x04, 0x84, 0xe4, + 0x75, 0xda, 0x88, 0xc3, 0x88, 0xe0, 0x30, 0xff, 0x30, 0xe4, 0x29, 0xc3, + 0x89, 0xd8, 0x5e, 0xcb, 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0xb8, 0xd9, + 0x06, 0x8e, 0xd8, 0xff, 0x36, 0x74, 0x0d, 0x8d, 0x56, 0x12, 0xff, 0x36, + 0x72, 0x0d, 0x8b, 0x5e, 0x0e, 0x16, 0x8b, 0x4e, 0x10, 0x52, 0x8b, 0x46, + 0x0c, 0x0e, 0x3e, 0xe8, 0x73, 0xf0, 0x5d, 0x5a, 0x59, 0x5b, 0xcb, 0x53, + 0x51, 0x89, 0xc1, 0x89, 0xd0, 0x83, 0xfa, 0xff, 0x74, 0x0b, 0x81, 0xf9, + 0xd9, 0x06, 0x75, 0x08, 0x0e, 0xe8, 0x01, 0xbb, 0x90, 0x59, 0x5b, 0xcb, + 0x89, 0xca, 0x31, 0xdb, 0x0e, 0xe8, 0xbe, 0xb6, 0x90, 0x59, 0x5b, 0xcb, + 0x51, 0x56, 0x57, 0x89, 0xc1, 0x89, 0xd6, 0x31, 0xff, 0x89, 0xc8, 0x89, + 0xf2, 0x0e, 0x3e, 0xe8, 0x9d, 0xe3, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xdb, + 0x77, 0x06, 0x89, 0xf8, 0x5f, 0x5e, 0x59, 0xcb, 0x89, 0xc8, 0x89, 0xf2, + 0x0e, 0xe8, 0xae, 0x00, 0x90, 0x39, 0xc3, 0x72, 0xed, 0x47, 0x29, 0xc3, + 0x01, 0xc1, 0xeb, 0xd5, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, + 0x89, 0xc6, 0x89, 0xd7, 0x89, 0x5e, 0xfe, 0x8b, 0x5e, 0x0a, 0x8b, 0x46, + 0xfe, 0x89, 0xca, 0x0e, 0x3e, 0xe8, 0x1a, 0x00, 0x8b, 0x5e, 0xfe, 0x40, + 0x89, 0xfa, 0x50, 0x89, 0xf0, 0x0e, 0x3e, 0xe8, 0xf6, 0x00, 0x89, 0xf0, + 0x89, 0xfa, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x02, 0x00, 0x51, 0x56, + 0x57, 0x89, 0xc6, 0x89, 0xd7, 0x89, 0xd9, 0x31, 0xdb, 0x89, 0xf0, 0x89, + 0xfa, 0x0e, 0x3e, 0xe8, 0x31, 0xe3, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xc9, + 0x77, 0x06, 0x89, 0xd8, 0x5f, 0x5e, 0x59, 0xcb, 0x8e, 0xdf, 0x8a, 0x04, + 0x30, 0xe4, 0x0e, 0xe8, 0x4b, 0xe7, 0x90, 0x85, 0xc0, 0x74, 0x23, 0x8e, + 0xdf, 0x80, 0x7c, 0x01, 0x00, 0x74, 0xe3, 0x89, 0xf0, 0x89, 0xfa, 0x0e, + 0x3e, 0xe8, 0x2a, 0x00, 0x01, 0xc3, 0x89, 0xf0, 0x89, 0xfa, 0x0e, 0xe8, + 0x6d, 0xe3, 0x90, 0x49, 0x89, 0xc6, 0x89, 0xd7, 0xeb, 0xb7, 0x43, 0xeb, + 0xed, 0x8e, 0xd9, 0xf6, 0xc4, 0xff, 0x74, 0x0a, 0x88, 0x27, 0x88, 0x47, + 0x01, 0x89, 0xd8, 0x8c, 0xda, 0xcb, 0x88, 0x07, 0xeb, 0xf7, 0x53, 0x89, + 0xc3, 0x8e, 0xda, 0x8a, 0x07, 0x30, 0xe4, 0x0e, 0x3e, 0xe8, 0xfd, 0xe6, + 0x85, 0xc0, 0x74, 0x05, 0xb8, 0x02, 0x00, 0x5b, 0xcb, 0xb8, 0x01, 0x00, + 0x5b, 0xcb, 0x56, 0x57, 0x89, 0xc2, 0x89, 0xde, 0x89, 0xcf, 0x39, 0xd8, + 0x72, 0x07, 0x31, 0xc0, 0x31, 0xd2, 0x5f, 0x5e, 0xcb, 0x4b, 0x8e, 0xd9, + 0x8a, 0x07, 0x30, 0xe4, 0x0e, 0xe8, 0xd1, 0xe6, 0x90, 0x85, 0xc0, 0x75, + 0x37, 0x83, 0xc3, 0xff, 0x39, 0xda, 0x77, 0x0f, 0x8e, 0xd9, 0x8a, 0x07, + 0x30, 0xe4, 0x0e, 0xe8, 0xbb, 0xe6, 0x90, 0x85, 0xc0, 0x75, 0xea, 0x89, + 0xf2, 0x29, 0xda, 0xb1, 0x0f, 0x89, 0xd0, 0xd3, 0xf8, 0x31, 0xc2, 0x29, + 0xc2, 0x83, 0xe2, 0x01, 0x31, 0xc2, 0x29, 0xc2, 0x4e, 0x89, 0xd0, 0x29, + 0xc6, 0x89, 0xfa, 0x89, 0xf0, 0x5f, 0x5e, 0xcb, 0x89, 0xca, 0x8d, 0x47, + 0xff, 0x5f, 0x5e, 0xcb, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, + 0x89, 0xc7, 0x89, 0x56, 0xfe, 0x8e, 0xd9, 0x8b, 0x4e, 0x0a, 0x89, 0xc6, + 0x8e, 0xc2, 0x85, 0xc9, 0x76, 0x06, 0x8a, 0x07, 0x84, 0xc0, 0x75, 0x2e, + 0x80, 0x3f, 0x00, 0x74, 0x18, 0x39, 0xfe, 0x76, 0x14, 0x8a, 0x47, 0xff, + 0x30, 0xe4, 0x0e, 0xe8, 0x5b, 0xe6, 0x90, 0x85, 0xc0, 0x74, 0x06, 0x8e, + 0xda, 0xc6, 0x44, 0xff, 0x00, 0x85, 0xc9, 0x77, 0x15, 0x8b, 0x56, 0xfe, + 0x89, 0xf8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xca, 0x02, 0x00, 0x43, 0x49, + 0x26, 0x88, 0x04, 0x46, 0xeb, 0xc0, 0x89, 0xf0, 0x31, 0xdb, 0x0e, 0xe8, + 0xaf, 0xe0, 0x90, 0xeb, 0xe0, 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0xb8, + 0xd9, 0x06, 0x8e, 0xd8, 0xa0, 0xde, 0x07, 0x84, 0xc0, 0x7c, 0x04, 0x98, + 0xe9, 0x93, 0x00, 0xbb, 0x80, 0x00, 0x9c, 0xfa, 0xba, 0x77, 0x00, 0x30, + 0xc0, 0xee, 0xba, 0x71, 0x00, 0xec, 0x2a, 0xe4, 0x89, 0xc1, 0xec, 0x2a, + 0xe4, 0x88, 0xc4, 0x30, 0xc0, 0x09, 0xc1, 0x9d, 0x89, 0xca, 0x83, 0xf9, + 0xff, 0x75, 0x1c, 0x9c, 0xfa, 0xba, 0x77, 0x00, 0x30, 0xc0, 0xee, 0xba, + 0x71, 0x00, 0xec, 0x2a, 0xe4, 0x89, 0xc1, 0xec, 0x2a, 0xe4, 0x88, 0xc4, + 0x89, 0xca, 0x30, 0xc0, 0x09, 0xc2, 0x9d, 0x83, 0xfa, 0xff, 0x75, 0x0d, + 0x31, 0xc0, 0x40, 0x3d, 0xff, 0xff, 0x75, 0xfa, 0x4b, 0x39, 0xc3, 0x75, + 0xb1, 0x83, 0xfa, 0xff, 0x75, 0x0e, 0xb8, 0xd9, 0x06, 0x8e, 0xd8, 0x30, + 0xc0, 0xa2, 0xde, 0x07, 0x30, 0xe4, 0xeb, 0x2e, 0x31, 0xc0, 0xbb, 0x01, + 0x05, 0x8e, 0xd8, 0xf6, 0x07, 0x80, 0x74, 0x08, 0xb8, 0x00, 0x78, 0xba, + 0x1e, 0x00, 0xeb, 0x06, 0xb8, 0x00, 0x80, 0xba, 0x25, 0x00, 0xbb, 0xd9, + 0x06, 0x8e, 0xdb, 0xc6, 0x06, 0xde, 0x07, 0x01, 0xa3, 0xda, 0x07, 0x89, + 0x16, 0xdc, 0x07, 0xb8, 0x01, 0x00, 0x89, 0xec, 0x5d, 0x5a, 0x59, 0x5b, + 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x44, 0x53, - 0x58, 0x4d, 0x45, 0x4e, 0x55, 0x20, 0x5b, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x5d, 0x20, 0x3c, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x49, 0x4e, - 0x49, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x3e, 0x0a, 0x00, 0x20, 0x2d, 0x68, - 0x20, 0x20, 0x2d, 0x2d, 0x68, 0x65, 0x6c, 0x70, 0x20, 0x20, 0x20, 0x2f, - 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x68, 0x6f, 0x77, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x00, - 0x20, 0x2d, 0x64, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, - 0x65, 0x62, 0x75, 0x67, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x0a, - 0x00, 0x68, 0x00, 0x68, 0x65, 0x6c, 0x70, 0x00, 0x3f, 0x00, 0x64, 0x00, - 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x73, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x55, 0x6e, 0x68, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x4d, 0x65, - 0x6e, 0x75, 0x20, 0x49, 0x4e, 0x49, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x0a, 0x00, 0x6d, 0x65, - 0x6e, 0x75, 0x5f, 0x69, 0x6e, 0x69, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, - 0x4c, 0x4c, 0x3f, 0x3f, 0x0a, 0x00, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x0a, - 0x00, 0x72, 0x00, 0x55, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, - 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x27, - 0x25, 0x73, 0x27, 0x0a, 0x00, 0x64, 0x73, 0x78, 0x6d, 0x65, 0x6e, 0x75, - 0x2e, 0x63, 0x00, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x65, 0x6e, 0x75, - 0x00, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, - 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x00, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x00, 0x69, 0x74, 0x65, 0x6d, 0x2d, 0x3e, 0x6d, 0x65, 0x6e, 0x75, 0x5f, - 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x21, 0x3d, - 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x69, 0x74, - 0x65, 0x6d, 0x00, 0x54, 0x6f, 0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, - 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x0a, 0x00, - 0x6d, 0x65, 0x6e, 0x75, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x00, - 0x6d, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x00, - 0x6d, 0x65, 0x6e, 0x75, 0x6c, 0x6f, 0x6f, 0x70, 0x00, 0x54, 0x6f, 0x6f, - 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x0a, 0x00, 0x6c, - 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x5f, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x00, 0x54, 0x6f, 0x6f, 0x20, 0x6d, 0x61, - 0x6e, 0x79, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x0a, 0x00, 0x4d, 0x61, 0x6b, 0x65, - 0x20, 0x61, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x68, 0x69, 0x74, 0x20, 0x45, 0x4e, 0x54, - 0x45, 0x52, 0x00, 0x4d, 0x65, 0x6e, 0x75, 0x20, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x3a, 0x0a, 0x00, 0x69, 0x74, 0x65, 0x6d, 0x2d, 0x3e, 0x6d, 0x65, - 0x6e, 0x75, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x20, 0x21, 0x3d, 0x20, 0x4e, - 0x55, 0x4c, 0x4c, 0x00, 0x20, 0x5b, 0x25, 0x64, 0x5d, 0x20, 0x69, 0x74, - 0x65, 0x6d, 0x3d, 0x27, 0x25, 0x73, 0x27, 0x20, 0x74, 0x65, 0x78, 0x74, - 0x3d, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x3a, 0x0a, - 0x00, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x20, - 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, - 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x3a, 0x0a, 0x00, - 0x6d, 0x65, 0x6e, 0x75, 0x69, 0x64, 0x78, 0x20, 0x3c, 0x20, 0x6d, 0x65, - 0x6e, 0x75, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x00, 0x20, 0x46, 0x6f, - 0x72, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x27, 0x25, 0x73, - 0x27, 0x3a, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x3a, 0x20, 0x27, - 0x25, 0x73, 0x27, 0x0a, 0x00, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x20, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x3a, 0x20, 0x25, 0x64, - 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x0a, 0x00, 0x49, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x3a, 0x20, 0x25, 0x64, 0x0a, 0x00, 0x4d, - 0x65, 0x6e, 0x75, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x3a, - 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x4e, 0x6f, 0x20, 0x6d, 0x65, - 0x6e, 0x75, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x64, 0x0a, 0x00, 0x1b, 0x5b, 0x31, 0x3e, 0x68, 0x00, - 0x1b, 0x5b, 0x35, 0x3e, 0x68, 0x00, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x20, 0x69, 0x73, 0x20, 0x25, 0x75, 0x20, 0x78, 0x20, 0x25, 0x75, 0x0a, - 0x00, 0x52, 0x61, 0x6d, 0x20, 0x70, 0x74, 0x72, 0x20, 0x25, 0x46, 0x70, - 0x0a, 0x00, 0x52, 0x61, 0x6d, 0x20, 0x70, 0x74, 0x72, 0x32, 0x20, 0x25, - 0x46, 0x70, 0x0a, 0x00, 0x72, 0x75, 0x6e, 0x5f, 0x6d, 0x65, 0x6e, 0x75, - 0x00, 0x74, 0x65, 0x6d, 0x70, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, - 0x4c, 0x00, 0x57, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x68, 0x6f, 0x6f, 0x73, - 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, - 0x20, 0x25, 0x75, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x20, - 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x00, 0x00, 0x44, 0x53, 0x58, 0x4d, 0x45, 0x4e, 0x55, 0x20, 0x5b, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5d, 0x20, 0x3c, 0x6d, 0x65, 0x6e, + 0x75, 0x20, 0x49, 0x4e, 0x49, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x3e, 0x0a, + 0x00, 0x20, 0x2d, 0x68, 0x20, 0x20, 0x2d, 0x2d, 0x68, 0x65, 0x6c, 0x70, + 0x20, 0x20, 0x20, 0x2f, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x53, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x65, + 0x6c, 0x70, 0x0a, 0x00, 0x20, 0x2d, 0x64, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x44, 0x65, 0x62, 0x75, 0x67, 0x20, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x0a, 0x00, 0x68, 0x00, 0x68, 0x65, 0x6c, 0x70, 0x00, + 0x3f, 0x00, 0x64, 0x00, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, + 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, + 0x00, 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x20, 0x61, + 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x27, 0x25, 0x73, 0x27, + 0x0a, 0x00, 0x4d, 0x65, 0x6e, 0x75, 0x20, 0x49, 0x4e, 0x49, 0x20, 0x66, + 0x69, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x0a, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x5f, 0x69, 0x6e, 0x69, 0x20, 0x3d, + 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x3f, 0x3f, 0x0a, 0x00, 0x43, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x20, 0x74, + 0x65, 0x6d, 0x70, 0x0a, 0x00, 0x72, 0x00, 0x55, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x66, 0x69, + 0x6c, 0x65, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x64, 0x73, 0x78, + 0x6d, 0x65, 0x6e, 0x75, 0x2e, 0x63, 0x00, 0x6c, 0x6f, 0x61, 0x64, 0x5f, + 0x6d, 0x65, 0x6e, 0x75, 0x00, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x21, 0x3d, 0x20, + 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x00, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x00, 0x69, 0x74, 0x65, 0x6d, 0x2d, 0x3e, 0x6d, + 0x65, 0x6e, 0x75, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x6d, 0x65, + 0x6e, 0x75, 0x69, 0x74, 0x65, 0x6d, 0x00, 0x54, 0x6f, 0x6f, 0x20, 0x6d, + 0x61, 0x6e, 0x79, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x0a, 0x00, 0x5f, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x5f, + 0x00, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x6c, 0x6f, 0x6f, 0x70, 0x00, 0x54, + 0x6f, 0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x0a, + 0x00, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, + 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x6d, 0x65, 0x6e, + 0x75, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x00, 0x54, 0x6f, 0x6f, 0x20, + 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x0a, 0x00, 0x4d, 0x61, + 0x6b, 0x65, 0x20, 0x61, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x68, 0x69, 0x74, 0x20, 0x45, + 0x4e, 0x54, 0x45, 0x52, 0x00, 0x4d, 0x65, 0x6e, 0x75, 0x20, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x3a, 0x0a, 0x00, 0x69, 0x74, 0x65, 0x6d, 0x2d, 0x3e, + 0x6d, 0x65, 0x6e, 0x75, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x20, 0x21, 0x3d, + 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x20, 0x5b, 0x25, 0x64, 0x5d, 0x20, + 0x69, 0x74, 0x65, 0x6d, 0x3d, 0x27, 0x25, 0x73, 0x27, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x3d, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, + 0x3a, 0x0a, 0x00, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, + 0x00, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x43, 0x68, 0x6f, 0x69, + 0x63, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x3a, + 0x0a, 0x00, 0x6d, 0x65, 0x6e, 0x75, 0x69, 0x64, 0x78, 0x20, 0x3c, 0x20, + 0x6d, 0x65, 0x6e, 0x75, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x00, 0x20, + 0x46, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x27, + 0x25, 0x73, 0x27, 0x3a, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x3a, + 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x3a, 0x20, + 0x25, 0x64, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x0a, 0x00, + 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x6e, 0x75, + 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x3a, 0x20, 0x25, 0x64, 0x0a, + 0x00, 0x4d, 0x65, 0x6e, 0x75, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x3a, 0x20, 0x27, 0x25, 0x73, 0x27, 0x0a, 0x00, 0x4e, 0x6f, 0x20, + 0x6d, 0x65, 0x6e, 0x75, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x0a, 0x00, 0x1b, 0x5b, 0x31, 0x3e, + 0x68, 0x00, 0x1b, 0x5b, 0x35, 0x3e, 0x68, 0x00, 0x53, 0x63, 0x72, 0x65, + 0x65, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x25, 0x75, 0x20, 0x78, 0x20, 0x25, + 0x75, 0x0a, 0x00, 0x52, 0x61, 0x6d, 0x20, 0x70, 0x74, 0x72, 0x20, 0x25, + 0x46, 0x70, 0x0a, 0x00, 0x52, 0x61, 0x6d, 0x20, 0x70, 0x74, 0x72, 0x32, + 0x20, 0x25, 0x46, 0x70, 0x0a, 0x00, 0x72, 0x75, 0x6e, 0x5f, 0x6d, 0x65, + 0x6e, 0x75, 0x00, 0x74, 0x65, 0x6d, 0x70, 0x20, 0x21, 0x3d, 0x20, 0x4e, + 0x55, 0x4c, 0x4c, 0x00, 0x57, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x68, 0x6f, + 0x6f, 0x73, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, + 0x69, 0x6e, 0x20, 0x25, 0x75, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x20, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x0a, 0x00, 0x1b, 0x5b, 0x31, 0x3e, - 0x6c, 0x00, 0x1b, 0x5b, 0x35, 0x3e, 0x6c, 0x00, 0x1b, 0x5b, 0x25, 0x64, - 0x42, 0x00, 0x72, 0x75, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x00, 0x00, 0x25, 0x68, 0x73, 0x2c, 0x20, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x25, 0x68, 0x73, 0x2c, 0x20, 0x66, - 0x69, 0x6c, 0x65, 0x20, 0x25, 0x68, 0x73, 0x2c, 0x20, 0x6c, 0x69, 0x6e, - 0x65, 0x20, 0x25, 0x64, 0x2e, 0x0a, 0x00, 0x41, 0x73, 0x73, 0x65, 0x72, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x00, - 0x3a, 0x20, 0x00, 0x21, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x52, 0x45, 0x54, - 0x55, 0x52, 0x4e, 0x20, 0x25, 0x33, 0x64, 0x00, 0x43, 0x4f, 0x4d, 0x53, - 0x50, 0x45, 0x43, 0x00, 0x43, 0x4d, 0x44, 0x2e, 0x45, 0x58, 0x45, 0x00, - 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x2e, 0x43, 0x4f, 0x4d, 0x00, - 0x43, 0x4d, 0x44, 0x00, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x00, - 0x4e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x6d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x00, 0x3a, 0x20, - 0x00, 0x00, 0x41, 0x42, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x20, 0x54, - 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x00, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x00, 0x50, 0x41, - 0x54, 0x48, 0x00, 0x00, 0x2e, 0x5c, 0x00, 0x2e, 0x62, 0x61, 0x74, 0x00, - 0x43, 0x4d, 0x44, 0x00, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x00, - 0x43, 0x4f, 0x4d, 0x53, 0x50, 0x45, 0x43, 0x00, 0x2e, 0x63, 0x6f, 0x6d, - 0x00, 0x2e, 0x65, 0x78, 0x65, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x0a, 0x00, 0x1b, 0x5b, + 0x31, 0x3e, 0x6c, 0x00, 0x1b, 0x5b, 0x35, 0x3e, 0x6c, 0x00, 0x1b, 0x5b, + 0x25, 0x64, 0x42, 0x00, 0x72, 0x75, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x73, 0x00, 0x00, 0x25, 0x68, 0x73, 0x2c, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x25, 0x68, 0x73, 0x2c, + 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x25, 0x68, 0x73, 0x2c, 0x20, 0x6c, + 0x69, 0x6e, 0x65, 0x20, 0x25, 0x64, 0x2e, 0x0a, 0x00, 0x41, 0x73, 0x73, + 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x46, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x00, 0x3a, 0x20, 0x00, 0x21, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x52, + 0x45, 0x54, 0x55, 0x52, 0x4e, 0x20, 0x25, 0x33, 0x64, 0x00, 0x43, 0x4f, + 0x4d, 0x53, 0x50, 0x45, 0x43, 0x00, 0x43, 0x4d, 0x44, 0x2e, 0x45, 0x58, + 0x45, 0x00, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x2e, 0x43, 0x4f, + 0x4d, 0x00, 0x43, 0x4d, 0x44, 0x00, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, + 0x44, 0x00, 0x4e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, + 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x61, + 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, + 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x00, + 0x3a, 0x20, 0x00, 0x00, 0x41, 0x42, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, + 0x20, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x00, 0x00, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x00, + 0x50, 0x41, 0x54, 0x48, 0x00, 0x00, 0x2e, 0x5c, 0x00, 0x2e, 0x62, 0x61, + 0x74, 0x00, 0x43, 0x4d, 0x44, 0x00, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, + 0x44, 0x00, 0x43, 0x4f, 0x4d, 0x53, 0x50, 0x45, 0x43, 0x00, 0x2e, 0x63, + 0x6f, 0x6d, 0x00, 0x2e, 0x65, 0x78, 0x65, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x0a, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x38, 0x38, 0x38, 0x38, 0x38, - 0x38, 0x38, 0x38, 0x38, 0x38, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x0a, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x38, 0x38, 0x38, + 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x0c, 0x0c, - 0x0c, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x48, 0x48, 0x48, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x98, 0x98, + 0x98, 0x98, 0x98, 0x98, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x0c, 0x0c, 0x0c, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1884,33 +2621,36 @@ static const unsigned char bin_dsxmenu_exe_pc98[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x14, 0x00, 0x01, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x20, 0x14, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x07, 0x00, 0x09, 0x01, 0x01, 0x0b, 0x06, 0x04, 0x05, 0x05, 0x05, - 0x02, 0x03, 0xff, 0x0e, 0x07, 0x24, 0x06, 0x08, 0x01, 0xff, 0x00, 0x00, - 0x1d, 0x3b, 0x1d, 0x3b, 0xdb, 0x3b, 0xdb, 0x3b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x08, 0xd9, 0x06, + 0x00, 0x09, 0x01, 0x01, 0x0b, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x03, + 0xff, 0x0e, 0x07, 0x24, 0x06, 0x08, 0x01, 0xff, 0x00, 0x00, 0x84, 0x4f, + 0x84, 0x4f, 0xe9, 0x50, 0x00, 0x00, 0xe9, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xea, 0x4b, 0xea, 0x4b, 0x00, 0x20, 0x35, 0x1d, 0x00, 0x00, 0x00, 0x01, - 0x2e, 0x2a, 0x00, 0x00, 0x00, 0x20, 0x62, 0x3e, 0x00, 0x00, 0x00, 0x20, - 0xf8, 0x3b, 0x00, 0x00, 0x00, 0x20, 0x2a, 0x42, 0x00, 0x00, 0x00, 0x20, - 0x12, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x5f, 0x2a, 0x00, 0x00, 0x00, 0x14, - 0xd1, 0x38, 0x00, 0x00, 0x00, 0x1f, 0x09, 0x3f, 0x00, 0x00 + 0x00, 0x00, 0x00, 0x00, 0x35, 0x68, 0x00, 0x00, 0x35, 0x68, 0x00, 0x00, + 0x00, 0x38, 0x98, 0x14, 0x00, 0x00, 0x00, 0x20, 0x0a, 0x27, 0x00, 0x00, + 0x00, 0x01, 0x21, 0x39, 0x00, 0x00, 0x00, 0x20, 0x76, 0x54, 0x00, 0x00, + 0x00, 0x20, 0x12, 0x53, 0x00, 0x00, 0x00, 0x20, 0xc0, 0x5a, 0x00, 0x00, + 0x00, 0x20, 0x68, 0x28, 0x00, 0x00, 0x00, 0x01, 0x7d, 0x39, 0x00, 0x00, + 0x00, 0x14, 0xb0, 0x4c, 0x00, 0x00, 0x00, 0x1f, 0x77, 0x55, 0x00, 0x00 }; struct BuiltinFileBlob bfb_DSXMENU_EXE_PC98 = { - /*recommended file name*/ "DSXMENU.EXE", + /*recommended file name*/ "DSXMENU.EXE", /*data*/ bin_dsxmenu_exe_pc98, /*length*/ sizeof(bin_dsxmenu_exe_pc98) }; diff --git a/src/builtin/edit_com.cpp b/src/builtin/edit_com.cpp index a15b05ad924..f290318a1c5 100644 --- a/src/builtin/edit_com.cpp +++ b/src/builtin/edit_com.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_edit_com[] = { 0x4D,0x5A,0x08,0x00,0xB5,0x00,0x78,0x06,0xC0,0x01,0xAB, 0x00,0xFF,0xFF,0x63,0x15,0x80,0x00,0x00,0x00,0x00,0x00, @@ -13181,3 +13182,4 @@ struct BuiltinFileBlob bfb_EDLIN_EXE = { /*data*/ bin_edlin_exe, /*length*/ sizeof(bin_edlin_exe) }; +#endif diff --git a/src/builtin/emsmagic.cpp b/src/builtin/emsmagic.cpp index 8d1d9ccef28..f4f9e95fc12 100644 --- a/src/builtin/emsmagic.cpp +++ b/src/builtin/emsmagic.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_emsmagic_com[] = { 0xE9,0xA9,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0xAA,0x01, @@ -1193,4 +1194,5 @@ struct BuiltinFileBlob bfb_EMSMAGIC_COM = { /*data*/ bin_emsmagic_com, /*length*/ sizeof(bin_emsmagic_com) }; +#endif diff --git a/src/builtin/eval.cpp b/src/builtin/eval.cpp index 5b801007f6f..aa5599f31b6 100644 --- a/src/builtin/eval.cpp +++ b/src/builtin/eval.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_eval_exe[] = { 0x4D,0x5A,0xE0,0x01,0x89,0x00,0x0C,0x00,0x20,0x00,0x00, 0x00,0xFF,0xFF,0xF6,0x10,0x80,0x00,0x00,0x00,0x00,0x00, @@ -7121,4 +7122,5 @@ struct BuiltinFileBlob bfb_EVAL_HLP = { /*data*/ bin_eval_hlp, /*length*/ sizeof(bin_eval_hlp) }; +#endif diff --git a/src/builtin/fc_exe.cpp b/src/builtin/fc_exe.cpp index 2cf53931674..09932c8e106 100644 --- a/src/builtin/fc_exe.cpp +++ b/src/builtin/fc_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_fc_exe[] = { 0x4D,0x5A,0xF3,0x01,0x1D,0x00,0x01,0x00,0x02,0x00,0xAA, 0x07,0xFF,0xFF,0xD5,0x06,0x00,0x02,0x00,0x00,0x00,0x00, @@ -1526,3 +1527,5 @@ struct BuiltinFileBlob bfb_COMP_COM = { /*data*/ bin_comp_com, /*length*/ sizeof(bin_comp_com) }; +#endif + diff --git a/src/builtin/fcbs_com.cpp b/src/builtin/fcbs_com.cpp index fa4ecbfe4f4..75bdcea8ad6 100644 --- a/src/builtin/fcbs_com.cpp +++ b/src/builtin/fcbs_com.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_fcbs_com[] = { 0xE9,0x9A,0x02,0x00,0x00,0x00,0x00,0x51,0x00,0x00,0x00, 0x1E,0x00,0x1A,0x00,0xB8,0xFF,0xFF,0xAB,0xAB,0x8B,0xC3, @@ -290,4 +291,5 @@ struct BuiltinFileBlob bfb_FCBS_COM = { /*data*/ bin_fcbs_com, /*length*/ sizeof(bin_fcbs_com) }; +#endif diff --git a/src/builtin/fdisk_exe.cpp b/src/builtin/fdisk_exe.cpp index 20492f6c3e1..879f0d40490 100644 --- a/src/builtin/fdisk_exe.cpp +++ b/src/builtin/fdisk_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_fdisk_exe[] = { 0x4d, 0x5a, 0x12, 0x00, 0x44, 0x00, 0x01, 0x00, 0x02, 0x00, 0x15, 0x12, 0xff, 0xff, 0xa2, 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2870,4 +2871,5 @@ struct BuiltinFileBlob bfb_FDISK_EXE = { /*data*/ bin_fdisk_exe, /*length*/ sizeof(bin_fdisk_exe) }; +#endif diff --git a/src/builtin/files_com.cpp b/src/builtin/files_com.cpp index 5a278379f7e..c090ae33e49 100644 --- a/src/builtin/files_com.cpp +++ b/src/builtin/files_com.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_files_com[] = { 0xEB,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x35,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xBC,0x7A, @@ -264,4 +265,5 @@ struct BuiltinFileBlob bfb_FILES_COM = { /*data*/ bin_files_com, /*length*/ sizeof(bin_files_com) }; +#endif diff --git a/src/builtin/find_exe.cpp b/src/builtin/find_exe.cpp index f1444a3cde1..b011c02f341 100644 --- a/src/builtin/find_exe.cpp +++ b/src/builtin/find_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_find_exe[] = { 0x81,0xfc,0xa3,0x36,0x77,0x02,0xcd,0x20,0xb9,0x22,0x1e,0xbe,0x22,0x1f,0xbf,0x43, 0x36,0xbb,0x00,0x80,0xfd,0xf3,0xa4,0xfc,0x87,0xf7,0x83,0xee,0xc8,0x57,0x57,0xe9, @@ -491,4 +492,5 @@ struct BuiltinFileBlob bfb_FIND_EXE = { /*data*/ bin_find_exe, /*length*/ sizeof(bin_find_exe) }; +#endif diff --git a/src/builtin/format_exe.cpp b/src/builtin/format_exe.cpp index 0ec9679aa2d..10297d5b358 100644 --- a/src/builtin/format_exe.cpp +++ b/src/builtin/format_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_format_exe[] = { 0x4d, 0x5a, 0x41, 0x01, 0x43, 0x00, 0x01, 0x00, 0x02, 0x00, 0x38, 0x0d, 0xff, 0xff, 0x0a, 0x15, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2852,4 +2853,5 @@ struct BuiltinFileBlob bfb_FORMAT_EXE = { /*data*/ bin_format_exe, /*length*/ sizeof(bin_format_exe) }; +#endif diff --git a/src/builtin/glide2x.cpp b/src/builtin/glide2x.cpp index c3b1f4672b3..58a55b94bf2 100644 --- a/src/builtin/glide2x.cpp +++ b/src/builtin/glide2x.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_glide2x_ovl[] = { 0x4D,0x5A,0x80,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00, 0x00,0xFF,0xFF,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0x00, @@ -2862,3 +2863,5 @@ struct BuiltinFileBlob bfb_GLIDE2X_OVL = { /*data*/ bin_glide2x_ovl, /*length*/ sizeof(bin_glide2x_ovl) }; +#endif + diff --git a/src/builtin/hexmem16_exe.cpp b/src/builtin/hexmem16_exe.cpp index cf3a1f360a7..c2745b3fb1e 100644 --- a/src/builtin/hexmem16_exe.cpp +++ b/src/builtin/hexmem16_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_hexmem16_exe[] = { 0x4d, 0x5a, 0xb2, 0x00, 0x7a, 0x00, 0xd1, 0x00, 0x37, 0x00, 0xda, 0x00, 0xff, 0xff, 0x4e, 0x0f, 0x00, 0x08, 0x00, 0x00, 0x56, 0x13, 0x00, 0x00, @@ -5187,4 +5188,5 @@ struct BuiltinFileBlob bfb_HEXMEM16_EXE = { /*data*/ bin_hexmem16_exe, /*length*/ sizeof(bin_hexmem16_exe) }; +#endif diff --git a/src/builtin/hexmem32_exe.cpp b/src/builtin/hexmem32_exe.cpp index 8c7f607944b..c43c3024ddb 100644 --- a/src/builtin/hexmem32_exe.cpp +++ b/src/builtin/hexmem32_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_hexmem32_exe[] = { 0x4d, 0x5a, 0xf6, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x05, 0x00, 0xac, 0x00, 0xff, 0xff, 0x96, 0x03, 0x00, 0x08, 0x00, 0x00, 0xdc, 0x04, 0x00, 0x00, @@ -7227,4 +7228,5 @@ struct BuiltinFileBlob bfb_HEXMEM32_EXE = { /*data*/ bin_hexmem32_exe, /*length*/ sizeof(bin_hexmem32_exe) }; +#endif diff --git a/src/builtin/ipsmake.cpp b/src/builtin/ipsmake.cpp new file mode 100644 index 00000000000..e1f1aea9bdb --- /dev/null +++ b/src/builtin/ipsmake.cpp @@ -0,0 +1,1657 @@ + +#include "dos_inc.h" + +#if !defined(OSFREE) +static const unsigned char bin_ipsmake_exe[] = { + 0x4d, 0x5a, 0xfc, 0x00, 0x27, 0x00, 0x04, 0x00, 0x03, 0x00, 0x96, 0x03, + 0xff, 0xff, 0xe2, 0x07, 0x00, 0x08, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x0c, 0x00, 0x00, + 0xc9, 0x0c, 0x00, 0x00, 0xae, 0x0d, 0x00, 0x00, 0x91, 0x0e, 0x00, 0x00, + 0xcc, 0xeb, 0xfd, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x22, 0x00, 0x50, 0xb8, 0x06, 0x03, 0x50, + 0xe8, 0x88, 0x03, 0x83, 0xc4, 0x04, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x34, 0x50, 0x52, 0xbe, 0x01, 0x00, 0xb8, 0x02, + 0x00, 0x31, 0xc9, 0x3b, 0x76, 0xca, 0x7d, 0x61, 0x89, 0xc3, 0x03, 0x5e, + 0xc8, 0x46, 0x8b, 0x1f, 0x40, 0x40, 0x80, 0x3f, 0x2d, 0x75, 0x54, 0x43, + 0x80, 0x3f, 0x2d, 0x74, 0xfa, 0xbf, 0x53, 0x00, 0x89, 0xde, 0xac, 0x8a, + 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, + 0x85, 0xc0, 0x74, 0x17, 0xbf, 0x55, 0x00, 0x89, 0xde, 0xac, 0x8a, 0x25, + 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, + 0xc0, 0x75, 0x09, 0xe8, 0x92, 0xff, 0xb8, 0x01, 0x00, 0xe9, 0xb2, 0x00, + 0x53, 0xb8, 0x5a, 0x00, 0x50, 0xb8, 0x06, 0x03, 0x50, 0xe8, 0x13, 0x03, + 0xb8, 0x01, 0x00, 0x83, 0xc4, 0x06, 0xe9, 0x9d, 0x00, 0xeb, 0x2a, 0x89, + 0xca, 0x41, 0x83, 0xfa, 0x02, 0x74, 0x16, 0x83, 0xfa, 0x01, 0x74, 0x0a, + 0x85, 0xd2, 0x75, 0x14, 0x89, 0x1e, 0xde, 0x02, 0xeb, 0x81, 0x89, 0x1e, + 0xe0, 0x02, 0xe9, 0x7a, 0xff, 0x89, 0x1e, 0xdc, 0x02, 0xe9, 0x73, 0xff, + 0xb8, 0x6d, 0x00, 0xeb, 0x37, 0x83, 0x3e, 0xdc, 0x02, 0x00, 0x75, 0x05, + 0xb8, 0x7d, 0x00, 0xeb, 0x2b, 0xa1, 0xde, 0x02, 0x85, 0xc0, 0x75, 0x05, + 0xb8, 0x90, 0x00, 0xeb, 0x1f, 0x8d, 0x56, 0xcc, 0xe8, 0x33, 0x03, 0x85, + 0xc0, 0x74, 0x05, 0xb8, 0xa4, 0x00, 0xeb, 0x10, 0x8b, 0x46, 0xd0, 0x30, + 0xc0, 0x80, 0xe4, 0xf0, 0x3d, 0x00, 0x80, 0x74, 0x13, 0xb8, 0xbb, 0x00, + 0x50, 0xb8, 0x06, 0x03, 0x50, 0xe8, 0x9f, 0x02, 0xb8, 0x01, 0x00, 0x83, + 0xc4, 0x04, 0xeb, 0x2a, 0xa1, 0xe0, 0x02, 0x85, 0xc0, 0x75, 0x05, 0xb8, + 0xc7, 0x00, 0xeb, 0xe4, 0x8d, 0x56, 0xcc, 0xe8, 0xf8, 0x02, 0x85, 0xc0, + 0x74, 0x05, 0xb8, 0xd9, 0x00, 0xeb, 0xd5, 0x8b, 0x46, 0xd0, 0x30, 0xc0, + 0x80, 0xe4, 0xf0, 0x3d, 0x00, 0x80, 0x75, 0xc5, 0x30, 0xe4, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x89, 0xc6, + 0x83, 0x3e, 0xe7, 0x02, 0x00, 0x74, 0x2d, 0x80, 0x3e, 0xe2, 0x02, 0x00, + 0x74, 0x29, 0xbb, 0x01, 0x00, 0x3b, 0x1e, 0xe7, 0x02, 0x73, 0x20, 0xa0, + 0x1c, 0x06, 0x3a, 0x87, 0x1c, 0x06, 0x74, 0x11, 0xb8, 0xee, 0x00, 0x50, + 0xb8, 0x06, 0x03, 0x50, 0xe8, 0x34, 0x02, 0x83, 0xc4, 0x04, 0xe9, 0xf7, + 0x04, 0x43, 0xeb, 0xdd, 0xe9, 0x9a, 0x00, 0x8b, 0x16, 0xe5, 0x02, 0xa1, + 0xe3, 0x02, 0x88, 0x16, 0x1c, 0x26, 0xb9, 0x08, 0x00, 0xd1, 0xea, 0xd1, + 0xd8, 0xe2, 0xfa, 0xa2, 0x1d, 0x26, 0xa0, 0xe3, 0x02, 0xa2, 0x1e, 0x26, + 0x80, 0x3e, 0xe2, 0x02, 0x00, 0x74, 0x36, 0x83, 0x3e, 0xe7, 0x02, 0x04, + 0x72, 0x2f, 0x30, 0xc0, 0xa2, 0x1f, 0x26, 0xa2, 0x20, 0x26, 0xa0, 0xe8, + 0x02, 0xa2, 0x21, 0x26, 0xa0, 0xe7, 0x02, 0xbb, 0x08, 0x00, 0xa2, 0x22, + 0x26, 0xa0, 0x1c, 0x06, 0xba, 0x1c, 0x26, 0xa2, 0x23, 0x26, 0x89, 0xf0, + 0xe8, 0xc0, 0x05, 0x3d, 0x08, 0x00, 0x74, 0x33, 0xb8, 0xff, 0xff, 0xeb, + 0x42, 0xa0, 0xe8, 0x02, 0xbb, 0x05, 0x00, 0xa2, 0x1f, 0x26, 0xa0, 0xe7, + 0x02, 0xba, 0x1c, 0x26, 0xa2, 0x20, 0x26, 0x89, 0xf0, 0xe8, 0x9f, 0x05, + 0x3d, 0x05, 0x00, 0x75, 0xdf, 0xba, 0x1c, 0x06, 0x8b, 0x1e, 0xe7, 0x02, + 0x89, 0xf0, 0xe8, 0x8e, 0x05, 0x3b, 0x06, 0xe7, 0x02, 0xeb, 0xcb, 0x31, + 0xc0, 0xa3, 0xe3, 0x02, 0xa3, 0xe5, 0x02, 0x30, 0xc0, 0xa2, 0xe2, 0x02, + 0x30, 0xe4, 0xa3, 0xe7, 0x02, 0x31, 0xc0, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, + 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0xe8, 0xf6, + 0xfd, 0xc7, 0x46, 0xfc, 0x00, 0x00, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0x85, + 0xc0, 0x74, 0x06, 0xb8, 0x01, 0x00, 0xe9, 0xf9, 0xfe, 0xb8, 0x00, 0x02, + 0x50, 0xff, 0x36, 0xde, 0x02, 0xe8, 0xa6, 0x08, 0x83, 0xc4, 0x04, 0x89, + 0x46, 0xfa, 0x85, 0xc0, 0x7c, 0xe5, 0xb8, 0x00, 0x02, 0x50, 0xff, 0x36, + 0xe0, 0x02, 0xe8, 0x91, 0x08, 0x83, 0xc4, 0x04, 0x89, 0xc7, 0x85, 0xc0, + 0x7c, 0xd1, 0xb8, 0xa4, 0x01, 0x50, 0xb8, 0x61, 0x02, 0x50, 0xff, 0x36, + 0xdc, 0x02, 0xe8, 0x79, 0x08, 0x83, 0xc4, 0x06, 0x89, 0xc1, 0x85, 0xc0, + 0x7c, 0xb9, 0xbb, 0x05, 0x00, 0xba, 0xff, 0x00, 0xe8, 0x04, 0x05, 0x3d, + 0x05, 0x00, 0x75, 0xab, 0xbb, 0x00, 0x10, 0xba, 0x2c, 0x26, 0x8b, 0x46, + 0xfa, 0xe8, 0x8f, 0x08, 0x89, 0xc6, 0x85, 0xc0, 0x7d, 0x02, 0x31, 0xc6, + 0xbb, 0x00, 0x10, 0xba, 0x1c, 0x16, 0x89, 0xf8, 0xe8, 0x7c, 0x08, 0x89, + 0xc2, 0x85, 0xc0, 0x7d, 0x02, 0x31, 0xc2, 0x89, 0x76, 0xf8, 0x39, 0xd6, + 0x7d, 0x03, 0x89, 0x56, 0xf8, 0x83, 0x7e, 0xf8, 0x00, 0x74, 0x4b, 0x31, + 0xdb, 0x3b, 0x5e, 0xf8, 0x73, 0x46, 0x8a, 0x87, 0x2c, 0x26, 0x3a, 0x87, + 0x1c, 0x16, 0x75, 0x0c, 0x89, 0xc8, 0xe8, 0x65, 0xfe, 0x85, 0xc0, 0x7d, + 0x5b, 0xe9, 0x57, 0xff, 0x81, 0x3e, 0xe7, 0x02, 0x00, 0x10, 0x72, 0x0c, + 0x89, 0xc8, 0xe8, 0x51, 0xfe, 0x85, 0xc0, 0x7d, 0x03, 0xe9, 0x43, 0xff, + 0x83, 0x3e, 0xe7, 0x02, 0x00, 0x75, 0x17, 0x8b, 0x46, 0xfc, 0xa3, 0xe3, + 0x02, 0x8b, 0x46, 0xfe, 0xc6, 0x06, 0xe2, 0x02, 0x01, 0xa3, 0xe5, 0x02, + 0xeb, 0x19, 0xeb, 0x62, 0xeb, 0x31, 0x80, 0x3e, 0xe2, 0x02, 0x00, 0x74, + 0x0e, 0xa0, 0x1c, 0x06, 0x3a, 0x87, 0x1c, 0x16, 0x74, 0x05, 0xc6, 0x06, + 0xe2, 0x02, 0x00, 0x8b, 0x36, 0xe7, 0x02, 0x46, 0x8a, 0x87, 0x1c, 0x16, + 0x88, 0x84, 0x1b, 0x06, 0x89, 0x36, 0xe7, 0x02, 0x83, 0x46, 0xfc, 0x01, + 0x83, 0x56, 0xfe, 0x00, 0x43, 0xeb, 0x82, 0x39, 0xd3, 0x72, 0x03, 0xe9, + 0x42, 0xff, 0x81, 0x3e, 0xe7, 0x02, 0x00, 0x10, 0x72, 0x05, 0x89, 0xc8, + 0xe8, 0xe7, 0xfd, 0x83, 0x3e, 0xe7, 0x02, 0x00, 0x75, 0x11, 0xc6, 0x06, + 0xe2, 0x02, 0x00, 0x8a, 0x87, 0x1c, 0x16, 0xc6, 0x06, 0xe2, 0x02, 0x01, + 0xa2, 0x1c, 0x06, 0x43, 0xeb, 0xd1, 0x89, 0xc8, 0xe8, 0xc7, 0xfd, 0x85, + 0xc0, 0x7d, 0x03, 0xe9, 0xb9, 0xfe, 0xbb, 0x03, 0x00, 0xba, 0x05, 0x01, + 0x89, 0xc8, 0xe8, 0x02, 0x04, 0x3d, 0x03, 0x00, 0x75, 0xed, 0x89, 0xc8, + 0xe8, 0x6b, 0x08, 0x8b, 0x46, 0xfa, 0xe8, 0x65, 0x08, 0x89, 0xf8, 0xe8, + 0x60, 0x08, 0x31, 0xc0, 0xe9, 0x93, 0xfd, 0x53, 0x52, 0x55, 0x89, 0xe5, + 0x8b, 0x46, 0x08, 0x8d, 0x5e, 0x0c, 0x8b, 0x56, 0x0a, 0xe8, 0xdc, 0x0b, + 0x5d, 0x5a, 0x5b, 0xc3, 0x53, 0x51, 0x55, 0x89, 0xe5, 0x50, 0x89, 0xd0, + 0xf6, 0x46, 0xfe, 0x10, 0x74, 0x05, 0xbb, 0x49, 0x40, 0xeb, 0x36, 0xf6, + 0x46, 0xfe, 0x40, 0x74, 0x05, 0xbb, 0x00, 0x20, 0xeb, 0x2b, 0xba, 0x2e, + 0x00, 0xbb, 0x00, 0x80, 0xe8, 0x48, 0x0c, 0x85, 0xc0, 0x74, 0x1e, 0x89, + 0xc1, 0x41, 0xba, 0x0a, 0x01, 0x89, 0xc8, 0xe8, 0x92, 0x0c, 0x85, 0xc0, + 0x74, 0x0c, 0xba, 0x0e, 0x01, 0x89, 0xc8, 0xe8, 0x86, 0x0c, 0x85, 0xc0, + 0x75, 0x03, 0x80, 0xcb, 0x49, 0x81, 0xcb, 0x24, 0x01, 0xf6, 0x46, 0xfe, + 0x01, 0x75, 0x03, 0x80, 0xcb, 0x92, 0x89, 0xd8, 0x89, 0xec, 0x5d, 0x59, + 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x81, 0xec, 0x54, + 0x01, 0x81, 0xed, 0x80, 0x00, 0x89, 0xc7, 0x89, 0xd6, 0x31, 0xc9, 0x80, + 0x3d, 0x00, 0x74, 0x0a, 0xba, 0x12, 0x01, 0xe8, 0xa3, 0x0c, 0x85, 0xc0, + 0x74, 0x0f, 0xe8, 0xce, 0x0c, 0x89, 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, + 0x01, 0x00, 0xe9, 0x19, 0x02, 0xbb, 0x90, 0x00, 0x8d, 0x86, 0x2c, 0xff, + 0x89, 0xfa, 0xe8, 0x85, 0x0e, 0x85, 0xc0, 0x74, 0x25, 0x8a, 0x9e, 0x2c, + 0xff, 0x30, 0xff, 0xf6, 0x87, 0x81, 0x01, 0xc0, 0x74, 0x18, 0x80, 0xbe, + 0x2d, 0xff, 0x3a, 0x75, 0x11, 0x80, 0xbe, 0x2e, 0xff, 0x5c, 0x75, 0x0a, + 0x80, 0xbe, 0x2f, 0xff, 0x00, 0x75, 0x03, 0xb9, 0x01, 0x00, 0x8a, 0x1d, + 0x30, 0xff, 0x89, 0xf8, 0xf6, 0x87, 0x81, 0x01, 0xc0, 0x74, 0x09, 0x80, + 0x7d, 0x01, 0x3a, 0x75, 0x03, 0x8d, 0x45, 0x02, 0x89, 0xc3, 0x80, 0x3f, + 0x2f, 0x74, 0x05, 0x80, 0x3f, 0x5c, 0x75, 0x08, 0x89, 0xc3, 0x80, 0x7f, + 0x01, 0x00, 0x74, 0x04, 0x85, 0xc9, 0x74, 0x37, 0xba, 0x90, 0x00, 0x8d, + 0x46, 0xbc, 0xe8, 0x8b, 0x0e, 0x89, 0xf8, 0xe8, 0xfe, 0x0e, 0x85, 0xc0, + 0x74, 0x06, 0xb8, 0xff, 0xff, 0xe9, 0x9e, 0x01, 0x8d, 0x46, 0xbc, 0xe8, + 0xee, 0x0e, 0xc6, 0x46, 0x61, 0x10, 0x31, 0xc0, 0xc6, 0x46, 0x6a, 0x00, + 0x89, 0x46, 0x62, 0x89, 0x46, 0x64, 0x89, 0x46, 0x66, 0x89, 0x46, 0x68, + 0xe9, 0xc9, 0x00, 0x8d, 0x5e, 0x4c, 0xba, 0x37, 0x00, 0x89, 0xf8, 0xe8, + 0xd6, 0x0e, 0x85, 0xc0, 0x74, 0x3c, 0x30, 0xc0, 0x88, 0x46, 0x7e, 0x88, + 0x46, 0x7c, 0x88, 0x46, 0x7a, 0x30, 0xe4, 0x89, 0x46, 0x78, 0xb8, 0x01, + 0x00, 0x50, 0x57, 0xe8, 0xe4, 0x05, 0x83, 0xc4, 0x04, 0x89, 0xc1, 0x3d, + 0xff, 0xff, 0x74, 0x21, 0x89, 0xf2, 0xc6, 0x46, 0x7c, 0x01, 0xe8, 0xd0, + 0x0e, 0x3d, 0xff, 0xff, 0x75, 0x0f, 0xe8, 0xe6, 0x0b, 0x89, 0xc3, 0x8b, + 0x07, 0x89, 0x46, 0x78, 0xeb, 0x07, 0xe9, 0x75, 0x00, 0xc6, 0x46, 0x7a, + 0x01, 0x89, 0xc8, 0xe8, 0xc4, 0x06, 0x31, 0xc0, 0x50, 0x57, 0xe8, 0xad, + 0x05, 0x83, 0xc4, 0x04, 0x89, 0xc1, 0x3d, 0xff, 0xff, 0x74, 0x1e, 0xc6, + 0x46, 0x7e, 0x01, 0x80, 0x7e, 0x7a, 0x00, 0x75, 0x14, 0x89, 0xf2, 0xe8, + 0x93, 0x0e, 0x3d, 0xff, 0xff, 0x75, 0x0a, 0xe8, 0xa9, 0x0b, 0x89, 0xc3, + 0x8b, 0x07, 0x89, 0x46, 0x78, 0x89, 0xc8, 0xe8, 0x90, 0x06, 0x80, 0x7e, + 0x7e, 0x00, 0x75, 0x09, 0x80, 0x7e, 0x7c, 0x00, 0x75, 0x03, 0xe9, 0xbd, + 0xfe, 0xe8, 0x8b, 0x0b, 0x89, 0xc3, 0x8b, 0x46, 0x78, 0x89, 0x07, 0x85, + 0xc0, 0x74, 0x03, 0xe9, 0x30, 0xff, 0x80, 0x7e, 0x7e, 0x00, 0x74, 0x05, + 0x81, 0x4c, 0x04, 0x24, 0x01, 0x80, 0x7e, 0x7c, 0x00, 0x74, 0x04, 0x80, + 0x4c, 0x04, 0x92, 0xe9, 0xba, 0x00, 0x8d, 0x46, 0x4c, 0xe8, 0x3e, 0x0e, + 0x8a, 0x1d, 0x30, 0xff, 0xf6, 0x87, 0x81, 0x01, 0xc0, 0x74, 0x11, 0x80, + 0x7d, 0x01, 0x3a, 0x75, 0x0b, 0x89, 0xd8, 0xe8, 0x56, 0x0f, 0x98, 0x2d, + 0x61, 0x00, 0xeb, 0x06, 0xb4, 0x19, 0xcd, 0x21, 0x30, 0xe4, 0x89, 0x04, + 0x8b, 0x04, 0x89, 0x44, 0x0e, 0x8b, 0x46, 0x66, 0x89, 0x44, 0x10, 0x8b, + 0x46, 0x68, 0x89, 0x44, 0x12, 0x8a, 0x46, 0x61, 0x8d, 0x56, 0x6a, 0x98, + 0xe8, 0xcd, 0xfd, 0x89, 0x44, 0x04, 0x8b, 0x56, 0x62, 0x8b, 0x46, 0x64, + 0xe8, 0x2f, 0x0f, 0xc7, 0x44, 0x06, 0x01, 0x00, 0xc7, 0x44, 0x0c, 0x00, + 0x00, 0x89, 0x44, 0x18, 0x89, 0x54, 0x1a, 0x89, 0x54, 0x22, 0x8b, 0x44, + 0x18, 0x8b, 0x54, 0x18, 0x89, 0x44, 0x20, 0x89, 0x54, 0x14, 0x8b, 0x44, + 0x1a, 0x89, 0x44, 0x16, 0x8b, 0x44, 0x18, 0x89, 0x44, 0x1c, 0x8b, 0x54, + 0x1a, 0x8b, 0x44, 0x0c, 0x89, 0x54, 0x1e, 0x99, 0x89, 0x44, 0x08, 0x89, + 0x54, 0x0a, 0x8b, 0x44, 0x08, 0x89, 0x44, 0x02, 0x8a, 0x46, 0x61, 0xc7, + 0x44, 0x28, 0x00, 0x00, 0xc7, 0x44, 0x2a, 0x00, 0x00, 0xc7, 0x44, 0x2c, + 0x00, 0x00, 0xc7, 0x44, 0x2e, 0x00, 0x00, 0xc7, 0x44, 0x30, 0x00, 0x00, + 0x98, 0xc6, 0x44, 0x32, 0x00, 0x99, 0x89, 0x44, 0x24, 0x89, 0x54, 0x26, + 0x31, 0xc0, 0x8d, 0xa6, 0x80, 0x00, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, + 0x83, 0x3e, 0x02, 0x04, 0x00, 0x74, 0x04, 0xff, 0x16, 0x02, 0x04, 0xbb, + 0xff, 0x00, 0xb8, 0x16, 0x01, 0x8c, 0xda, 0xe9, 0x10, 0x0f, 0x53, 0x51, + 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x81, 0xec, 0x04, 0x02, 0x50, 0xba, + 0x01, 0x00, 0x31, 0xdb, 0x31, 0xc9, 0xe8, 0x10, 0x0f, 0x89, 0xc6, 0x89, + 0x56, 0xfe, 0x83, 0xfa, 0xff, 0x75, 0x11, 0x3d, 0xff, 0xff, 0x75, 0x0c, + 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, + 0xba, 0x02, 0x00, 0x8b, 0x86, 0xfa, 0xfd, 0x31, 0xdb, 0x31, 0xc9, 0xe8, + 0xe7, 0x0e, 0x89, 0x46, 0xfc, 0x89, 0xd1, 0x83, 0xfa, 0xff, 0x75, 0x05, + 0x3d, 0xff, 0xff, 0x74, 0xd7, 0x8b, 0x46, 0xfe, 0x39, 0xc2, 0x7c, 0x07, + 0x75, 0x4f, 0x3b, 0x76, 0xfc, 0x76, 0x4a, 0xbb, 0x00, 0x02, 0x8d, 0x86, + 0xfc, 0xfd, 0x31, 0xd2, 0xe8, 0xfc, 0x0e, 0x2b, 0x76, 0xfc, 0x8b, 0x46, + 0xfe, 0x19, 0xc8, 0xbf, 0x00, 0x02, 0x89, 0xc1, 0x85, 0xc9, 0x7f, 0x06, + 0x75, 0x45, 0x85, 0xf6, 0x76, 0x41, 0x85, 0xc9, 0x7c, 0x08, 0x75, 0x08, + 0x81, 0xfe, 0x00, 0x02, 0x73, 0x02, 0x89, 0xf7, 0x8d, 0x96, 0xfc, 0xfd, + 0x8b, 0x86, 0xfa, 0xfd, 0x89, 0xfb, 0xe8, 0x6e, 0x00, 0x85, 0xc0, 0x7c, + 0x8a, 0x31, 0xc0, 0x29, 0xfe, 0x19, 0xc1, 0xeb, 0xcf, 0x89, 0xf3, 0x89, + 0xc1, 0x31, 0xd2, 0x8b, 0x86, 0xfa, 0xfd, 0xe8, 0x73, 0x0e, 0x83, 0xfa, + 0xff, 0x75, 0x08, 0x3d, 0xff, 0xff, 0x75, 0x03, 0xe9, 0x65, 0xff, 0x31, + 0xc0, 0xe9, 0x63, 0xff, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, + 0x89, 0xde, 0x89, 0xcf, 0x89, 0xd9, 0x89, 0xc3, 0xc7, 0x46, 0xfe, 0x00, + 0x00, 0xb4, 0x40, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7c, 0x0f, 0x89, + 0x05, 0x39, 0xc6, 0x75, 0x0e, 0x8b, 0x46, 0xfe, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0xc3, 0xe8, 0x89, 0x0e, 0xeb, 0xf5, 0xe8, 0x8d, 0x09, 0x89, 0xc6, + 0xc7, 0x46, 0xfe, 0x0c, 0x00, 0xc7, 0x04, 0x0c, 0x00, 0xeb, 0xe2, 0x51, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x50, 0x52, 0x53, 0xe8, + 0xd2, 0x0e, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x7a, 0x00, + 0xa8, 0x02, 0x74, 0x68, 0xa8, 0x80, 0x74, 0x1a, 0xf6, 0xc4, 0x20, 0x75, + 0x15, 0xb0, 0x02, 0x8b, 0x5e, 0xf6, 0x31, 0xd2, 0x31, 0xc9, 0xb4, 0x42, + 0xcd, 0x21, 0xd1, 0xd2, 0xd1, 0xca, 0x85, 0xd2, 0x7c, 0x66, 0xc7, 0x46, + 0xf8, 0x00, 0x00, 0x31, 0xc9, 0xf6, 0x46, 0xff, 0x80, 0x74, 0x14, 0x8b, + 0x56, 0xfe, 0x8b, 0x46, 0xf6, 0x80, 0xe6, 0x7f, 0xe8, 0xa4, 0x0e, 0x8b, + 0x46, 0xf6, 0xe8, 0x9d, 0xfe, 0x89, 0xc1, 0x85, 0xc9, 0x75, 0x17, 0xf6, + 0x46, 0xfe, 0x40, 0x74, 0x43, 0x8d, 0x4e, 0xf8, 0x8b, 0x5e, 0xf2, 0x8b, + 0x56, 0xf4, 0x8b, 0x46, 0xf6, 0xe8, 0x48, 0xff, 0x89, 0xc1, 0x83, 0xf9, + 0xff, 0x75, 0x2a, 0x89, 0xc8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, + 0xe8, 0xf8, 0x08, 0x89, 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x06, 0x00, + 0xeb, 0xeb, 0xe8, 0xea, 0x08, 0x89, 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, + 0x04, 0x00, 0xeb, 0xdd, 0xe8, 0xd3, 0x0d, 0xeb, 0xd8, 0xe9, 0x06, 0x01, + 0xe8, 0x61, 0x0e, 0x89, 0x46, 0xfa, 0x3d, 0xb0, 0x00, 0x73, 0x03, 0xe9, + 0x80, 0x0e, 0xbe, 0x00, 0x02, 0x81, 0x7e, 0xfa, 0x30, 0x02, 0x73, 0x03, + 0xe9, 0x72, 0x00, 0x8d, 0x44, 0x01, 0x24, 0xfe, 0x2b, 0xe0, 0x31, 0xc0, + 0x89, 0xe7, 0x89, 0x46, 0xfc, 0x89, 0x46, 0xfa, 0x8b, 0x46, 0xfa, 0x3b, + 0x46, 0xf2, 0x73, 0x32, 0x8b, 0x5e, 0xf4, 0x01, 0xc3, 0x80, 0x3f, 0x0a, + 0x75, 0x6c, 0x8b, 0x5e, 0xfc, 0x01, 0xfb, 0xc6, 0x07, 0x0d, 0xff, 0x46, + 0xfc, 0x8b, 0x46, 0xfc, 0x39, 0xc6, 0x75, 0x5a, 0x8d, 0x4e, 0xfc, 0x89, + 0xc3, 0x89, 0xfa, 0x8b, 0x46, 0xf6, 0xe8, 0xb7, 0xfe, 0x89, 0xc2, 0x89, + 0xc1, 0x3d, 0xff, 0xff, 0x75, 0x2e, 0x8b, 0x46, 0xfc, 0x85, 0xc0, 0x75, + 0x03, 0xe9, 0x5e, 0xff, 0x8d, 0x4e, 0xfa, 0x89, 0xc3, 0x89, 0xfa, 0x8b, + 0x46, 0xf6, 0xe8, 0x97, 0xfe, 0x89, 0xc1, 0x3d, 0x0c, 0x00, 0x75, 0x0e, + 0x8b, 0x46, 0xfa, 0x01, 0x46, 0xf8, 0xe9, 0x41, 0xff, 0xbe, 0x80, 0x00, + 0xeb, 0x89, 0xeb, 0x69, 0x8b, 0x46, 0xfc, 0x01, 0x46, 0xf8, 0x83, 0xfa, + 0x0c, 0x74, 0xc7, 0x8b, 0x46, 0xfa, 0xc7, 0x46, 0xfc, 0x00, 0x00, 0x89, + 0x46, 0xf8, 0x8b, 0x5e, 0xf4, 0x8b, 0x56, 0xfc, 0x03, 0x5e, 0xfa, 0x01, + 0xfa, 0x8a, 0x07, 0x89, 0xd3, 0x88, 0x07, 0xff, 0x46, 0xfc, 0x8b, 0x46, + 0xfc, 0xff, 0x46, 0xfa, 0x39, 0xc6, 0x74, 0x03, 0xe9, 0x61, 0xff, 0x8d, + 0x4e, 0xfc, 0x89, 0xc3, 0x89, 0xfa, 0x8b, 0x46, 0xf6, 0xe8, 0x3c, 0xfe, + 0x89, 0xc2, 0x89, 0xc1, 0x3d, 0xff, 0xff, 0x74, 0x85, 0x8b, 0x46, 0xfc, + 0x01, 0x46, 0xf8, 0x83, 0xfa, 0x0c, 0x75, 0x03, 0xe9, 0x77, 0xff, 0x8b, + 0x46, 0xfa, 0xc7, 0x46, 0xfc, 0x00, 0x00, 0x89, 0x46, 0xf8, 0xe9, 0x2f, + 0xff, 0x8b, 0x46, 0xf2, 0x89, 0x46, 0xf8, 0xe9, 0xc8, 0xfe, 0x8b, 0x46, + 0xf8, 0xe9, 0xc9, 0xfe, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, + 0x89, 0xc6, 0x89, 0x56, 0xfc, 0x89, 0x5e, 0xf8, 0x89, 0xcf, 0xc7, 0x46, + 0xf6, 0xff, 0xff, 0x80, 0x3c, 0x20, 0x75, 0x03, 0x46, 0xeb, 0xf8, 0x8b, + 0x46, 0xfc, 0x25, 0x83, 0x00, 0x8d, 0x5e, 0xf6, 0x89, 0xc2, 0x89, 0x46, + 0xfa, 0x0b, 0x56, 0xf8, 0x89, 0xf0, 0xe8, 0x68, 0x0d, 0x85, 0xc0, 0x75, + 0x09, 0x8b, 0x46, 0xf6, 0x3b, 0x06, 0x18, 0x04, 0x73, 0x50, 0xf6, 0x46, + 0xfc, 0x03, 0x74, 0x35, 0x8b, 0x46, 0xf6, 0x3d, 0xff, 0xff, 0x74, 0x2d, + 0xe8, 0x5e, 0x0d, 0x85, 0xc0, 0x75, 0x26, 0xf6, 0x46, 0xfd, 0x04, 0x74, + 0x06, 0xf6, 0x46, 0xfc, 0x20, 0x75, 0x45, 0xf6, 0x46, 0xfc, 0x40, 0x74, + 0x14, 0x8d, 0x56, 0xfe, 0x8b, 0x5e, 0xf6, 0x31, 0xc9, 0xb4, 0x40, 0xcd, + 0x21, 0x19, 0xd2, 0x89, 0xc1, 0x85, 0xd2, 0x7c, 0x42, 0x83, 0x7e, 0xf6, + 0xff, 0x75, 0x4c, 0xf6, 0x46, 0xfc, 0x20, 0x75, 0x48, 0xb8, 0xff, 0xff, + 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, + 0x19, 0xd2, 0xe8, 0x2e, 0x07, 0x89, 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, + 0x0b, 0x00, 0xeb, 0xe4, 0x8b, 0x5e, 0xf6, 0xb4, 0x3e, 0xcd, 0x21, 0x19, + 0xd2, 0xe8, 0x17, 0x07, 0x89, 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x07, + 0x00, 0xeb, 0xcd, 0x8b, 0x5e, 0xf6, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, + 0x89, 0xc8, 0xe8, 0xf5, 0x0b, 0xeb, 0xbd, 0xeb, 0x44, 0xe8, 0x03, 0x0d, + 0x89, 0xc3, 0x8b, 0x07, 0x3d, 0x02, 0x00, 0x75, 0xac, 0x01, 0xc7, 0x8b, + 0x45, 0xfe, 0x85, 0xc0, 0x75, 0x03, 0xb8, 0x80, 0x01, 0x8b, 0x16, 0x46, + 0x04, 0xf7, 0xd2, 0x21, 0xd0, 0x31, 0xd2, 0xa8, 0x80, 0x75, 0x03, 0xba, + 0x01, 0x00, 0x8d, 0x5e, 0xf6, 0x89, 0xf0, 0xe8, 0xd9, 0x0c, 0x85, 0xc0, + 0x75, 0x83, 0x8b, 0x46, 0xf6, 0x3b, 0x06, 0x18, 0x04, 0x73, 0x63, 0x83, + 0x7e, 0xf8, 0x00, 0x75, 0x68, 0x8b, 0x46, 0xf6, 0xe8, 0x11, 0x0c, 0x24, + 0x3c, 0x89, 0xc2, 0x8b, 0x46, 0xf6, 0xe8, 0x8c, 0x0c, 0x85, 0xc0, 0x74, + 0x03, 0x80, 0xce, 0x20, 0x80, 0x66, 0xfa, 0x7f, 0x83, 0x7e, 0xfa, 0x02, + 0x75, 0x03, 0x80, 0xca, 0x03, 0x83, 0x7e, 0xfa, 0x00, 0x75, 0x03, 0x80, + 0xca, 0x01, 0x83, 0x7e, 0xfa, 0x01, 0x75, 0x03, 0x80, 0xca, 0x02, 0xf6, + 0x46, 0xfc, 0x10, 0x74, 0x03, 0x80, 0xca, 0x80, 0x89, 0xd0, 0x0c, 0x40, + 0xf6, 0x46, 0xfd, 0x03, 0x74, 0x46, 0xf6, 0x46, 0xfd, 0x02, 0x74, 0x02, + 0x89, 0xc2, 0x8b, 0x46, 0xf6, 0xe8, 0x18, 0x0d, 0x8b, 0x46, 0xf6, 0xe9, + 0x1a, 0xff, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0xe9, 0x1d, + 0xff, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7d, + 0x03, 0xe9, 0x3e, 0xff, 0x8b, 0x56, 0xfa, 0x8d, 0x5e, 0xf6, 0x89, 0xf0, + 0x0b, 0x56, 0xf8, 0xe8, 0x03, 0x0c, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x74, + 0xff, 0xe9, 0xe5, 0xfe, 0x81, 0x3e, 0x48, 0x04, 0x00, 0x02, 0x75, 0xba, + 0xeb, 0xb6, 0x53, 0x55, 0x89, 0xe5, 0x8d, 0x5e, 0x0a, 0x8b, 0x07, 0x50, + 0x31, 0xc0, 0x50, 0xff, 0x76, 0x08, 0xff, 0x76, 0x06, 0x83, 0xc3, 0x02, + 0xe8, 0x06, 0x00, 0x83, 0xc4, 0x08, 0x5d, 0x5b, 0xc3, 0x53, 0x51, 0x52, + 0x55, 0x89, 0xe5, 0x8b, 0x46, 0x0a, 0x8d, 0x4e, 0x10, 0x8b, 0x5e, 0x0e, + 0x8b, 0x56, 0x0c, 0xe8, 0x1e, 0xfe, 0x5d, 0x5a, 0x59, 0x5b, 0xc3, 0x51, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x50, 0xe8, 0xd9, 0x0c, + 0x8b, 0x46, 0xf6, 0x89, 0x56, 0xfc, 0xe8, 0x2f, 0x0b, 0x89, 0x46, 0xf8, + 0x85, 0xc0, 0x74, 0x41, 0xa8, 0x01, 0x74, 0x4b, 0xa8, 0x40, 0x75, 0x55, + 0x89, 0x5e, 0xfe, 0x31, 0xff, 0x8b, 0x4e, 0xfe, 0x8b, 0x56, 0xfc, 0x8b, + 0x5e, 0xf6, 0xb4, 0x3f, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7c, 0x57, + 0x89, 0x46, 0xfa, 0x85, 0xc0, 0x74, 0x47, 0x8b, 0x5e, 0xfc, 0x31, 0xc0, + 0x31, 0xd2, 0x3b, 0x56, 0xfa, 0x73, 0x63, 0x80, 0x3f, 0x1a, 0x74, 0x44, + 0x80, 0x3f, 0x0d, 0x75, 0x5b, 0x43, 0x42, 0xeb, 0xed, 0xe8, 0x83, 0x05, + 0x89, 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x04, 0x00, 0xeb, 0x21, 0xe8, + 0x75, 0x05, 0x89, 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x06, 0x00, 0xeb, + 0x13, 0x89, 0xd9, 0x8b, 0x5e, 0xf6, 0xb4, 0x3f, 0xcd, 0x21, 0x19, 0xd2, + 0x85, 0xd2, 0x7c, 0x0b, 0x89, 0xc7, 0x89, 0xf8, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0x59, 0xc3, 0xe8, 0x44, 0x0a, 0xeb, 0xf4, 0x8b, 0x46, 0xf6, 0x89, + 0xd3, 0x31, 0xc9, 0xba, 0x01, 0x00, 0x2b, 0x5e, 0xfa, 0x19, 0xc9, 0x83, + 0xc3, 0x01, 0x83, 0xd1, 0x00, 0xe8, 0xd1, 0x09, 0xeb, 0xd8, 0xeb, 0x0d, + 0x89, 0xc6, 0x47, 0x8a, 0x0f, 0x03, 0x76, 0xfc, 0x40, 0x88, 0x0c, 0xeb, + 0x98, 0x01, 0x46, 0xfc, 0x29, 0x46, 0xfe, 0xf6, 0x46, 0xf9, 0x20, 0x75, + 0xbd, 0x83, 0x7e, 0xfe, 0x00, 0x74, 0xb7, 0xe9, 0x53, 0xff, 0xe9, 0x4b, + 0x0c, 0x00, 0xeb, 0x37, 0x03, 0x00, 0x2a, 0x2a, 0x2a, 0x20, 0x4e, 0x55, + 0x4c, 0x4c, 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x00, 0x4e, + 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x6d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x00, 0x63, 0x6f, 0x6e, 0x00, 0x0d, 0x0a, 0xfb, + 0xb9, 0x6b, 0x04, 0x8e, 0xc1, 0xbb, 0x66, 0x37, 0x83, 0xc3, 0x0f, 0x80, + 0xe3, 0xf0, 0x26, 0x89, 0x1e, 0x52, 0x04, 0x26, 0x8c, 0x1e, 0x4c, 0x04, + 0x03, 0xdc, 0x83, 0xc3, 0x0f, 0x80, 0xe3, 0xf0, 0x8e, 0xd1, 0x8b, 0xe3, + 0x26, 0x89, 0x1e, 0x54, 0x04, 0x8b, 0xd3, 0xd1, 0xea, 0xd1, 0xea, 0xd1, + 0xea, 0xd1, 0xea, 0x26, 0x80, 0x3e, 0x50, 0x04, 0x00, 0x75, 0x3d, 0x8b, + 0x0e, 0x02, 0x00, 0x8c, 0xc0, 0x2b, 0xc8, 0x3b, 0xd1, 0x72, 0x0b, 0xbb, + 0x01, 0x00, 0xb8, 0x23, 0x0c, 0x8c, 0xca, 0xe9, 0x04, 0x09, 0x8c, 0xc0, + 0x8b, 0xda, 0xd1, 0xe3, 0xd1, 0xe3, 0xd1, 0xe3, 0xd1, 0xe3, 0x75, 0x03, + 0xbb, 0xfe, 0xff, 0x26, 0x89, 0x1e, 0x4a, 0x04, 0x8b, 0xda, 0x03, 0xd8, + 0x26, 0xa1, 0x4c, 0x04, 0x8e, 0xc0, 0x2b, 0xd8, 0xb4, 0x4a, 0xcd, 0x21, + 0x8c, 0xdf, 0x8e, 0xc7, 0xbf, 0x81, 0x00, 0x8a, 0x4d, 0xff, 0x32, 0xed, + 0xfc, 0xb0, 0x20, 0xf3, 0xae, 0x8d, 0x75, 0xff, 0xba, 0x6b, 0x04, 0x8e, + 0xc2, 0x26, 0x8b, 0x3e, 0x52, 0x04, 0x26, 0x89, 0x3e, 0x6b, 0x04, 0x26, + 0x8c, 0x06, 0x6d, 0x04, 0x74, 0x03, 0x41, 0xf3, 0xa4, 0x2a, 0xc0, 0xaa, + 0xaa, 0x4f, 0xb4, 0x30, 0xcd, 0x21, 0x26, 0xa2, 0x4e, 0x04, 0x26, 0x88, + 0x26, 0x4f, 0x04, 0x8b, 0xcf, 0x3c, 0x03, 0x72, 0x58, 0x8e, 0x1e, 0x2c, + 0x00, 0x2b, 0xf6, 0xbd, 0x00, 0x01, 0x8b, 0x04, 0x0d, 0x20, 0x20, 0x3d, + 0x6e, 0x6f, 0x75, 0x12, 0x81, 0x7c, 0x02, 0x38, 0x37, 0x75, 0x27, 0x80, + 0x7c, 0x04, 0x3d, 0x75, 0x21, 0x83, 0xcd, 0x01, 0xeb, 0x1c, 0x3d, 0x6c, + 0x66, 0x75, 0x1a, 0x8b, 0x44, 0x02, 0x0c, 0x20, 0x3d, 0x6e, 0x3d, 0x75, + 0x10, 0x8a, 0x44, 0x04, 0x0c, 0x20, 0x3c, 0x6e, 0x75, 0x07, 0x81, 0xe5, + 0xff, 0xfe, 0x83, 0xc6, 0x05, 0x80, 0x3c, 0x00, 0xac, 0x75, 0xfa, 0x80, + 0x3c, 0x00, 0x75, 0xba, 0xac, 0x46, 0x46, 0x80, 0x3c, 0x00, 0xa4, 0x75, + 0xfa, 0x8e, 0xda, 0x8b, 0xf1, 0x89, 0x36, 0x6f, 0x04, 0x8c, 0x06, 0x71, + 0x04, 0x8b, 0xdc, 0x8b, 0xc5, 0xa2, 0x5a, 0x04, 0x20, 0x26, 0x74, 0x04, + 0x89, 0x3e, 0x52, 0x04, 0xb9, 0x66, 0x37, 0xbf, 0x1c, 0x06, 0x2b, 0xcf, + 0x32, 0xc0, 0xf3, 0xaa, 0x83, 0x3e, 0x5b, 0x04, 0x00, 0x75, 0x18, 0xb8, + 0x98, 0x0e, 0xa3, 0x5b, 0x04, 0x8c, 0x0e, 0x5d, 0x04, 0xa3, 0x5f, 0x04, + 0x8c, 0x0e, 0x61, 0x04, 0xa3, 0x63, 0x04, 0x8c, 0x0e, 0x65, 0x04, 0x33, + 0xed, 0xb8, 0x97, 0x0e, 0xa3, 0x67, 0x04, 0x8c, 0x0e, 0x69, 0x04, 0xb8, + 0xff, 0x00, 0xe8, 0x0c, 0x0b, 0xe9, 0xc9, 0x0a, 0x50, 0xba, 0x6b, 0x04, + 0x8e, 0xda, 0xfc, 0x8d, 0x3e, 0x00, 0x00, 0x8e, 0xc2, 0xb9, 0x10, 0x00, + 0xb8, 0x01, 0x01, 0xf3, 0xaf, 0x74, 0x39, 0x5b, 0xb8, 0x06, 0x0c, 0x8c, + 0xca, 0xbc, 0xe6, 0x37, 0x53, 0x50, 0x52, 0x8c, 0xcf, 0x8e, 0xdf, 0xba, + 0x35, 0x0c, 0xb8, 0x01, 0x3d, 0xcd, 0x21, 0x8b, 0xd8, 0x1f, 0x5a, 0x8b, + 0xf2, 0xfc, 0xac, 0x84, 0xc0, 0x75, 0xfb, 0x8b, 0xce, 0x2b, 0xca, 0x49, + 0xb4, 0x40, 0xcd, 0x21, 0x8e, 0xdf, 0xba, 0x39, 0x0c, 0xb9, 0x02, 0x00, + 0xb4, 0x40, 0xcd, 0x21, 0x33, 0xc0, 0xba, 0x0f, 0x00, 0xe8, 0x08, 0x0b, + 0x58, 0xb4, 0x4c, 0xcd, 0x21, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x57, 0x61, + 0x74, 0x63, 0x6f, 0x6d, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x31, 0x36, + 0x20, 0x52, 0x75, 0x6e, 0x2d, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x4f, 0x70, 0x65, 0x6e, + 0x20, 0x57, 0x61, 0x74, 0x63, 0x6f, 0x6d, 0x20, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x20, 0x32, 0x30, 0x30, + 0x32, 0x2d, 0x32, 0x30, 0x32, 0x35, 0x2e, 0x20, 0x50, 0x6f, 0x72, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, + 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x53, 0x79, 0x62, 0x61, 0x73, + 0x65, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x31, 0x39, 0x38, 0x38, + 0x2d, 0x32, 0x30, 0x30, 0x32, 0x2e, 0x00, 0x50, 0xb8, 0x6b, 0x04, 0x8e, + 0xd8, 0x58, 0xc3, 0xcb, 0xcb, 0x00, 0x53, 0x52, 0x56, 0x57, 0x80, 0x26, + 0x0d, 0x03, 0xf8, 0xbe, 0xea, 0x02, 0x80, 0x0e, 0x0d, 0x03, 0x04, 0x8b, + 0x44, 0x06, 0x85, 0xc0, 0x75, 0x08, 0xa3, 0x2e, 0x36, 0x5f, 0x5e, 0x5a, + 0x5b, 0xc3, 0xb8, 0x0c, 0x00, 0xe8, 0x4d, 0x0c, 0x85, 0xc0, 0x74, 0x2a, + 0x89, 0xc7, 0xa1, 0x2c, 0x36, 0x89, 0x75, 0x02, 0x89, 0x05, 0x89, 0x7c, + 0x04, 0xc7, 0x45, 0x04, 0x00, 0x00, 0x89, 0x3e, 0x2c, 0x36, 0x8b, 0x7c, + 0x04, 0xc6, 0x45, 0x0a, 0x00, 0x8b, 0x7c, 0x04, 0x83, 0xc6, 0x0e, 0xc7, + 0x45, 0x06, 0x00, 0x00, 0xeb, 0xbd, 0xb8, 0x0c, 0x00, 0xe8, 0x19, 0x0c, + 0x89, 0xc7, 0x85, 0xc0, 0x75, 0xcc, 0xbb, 0x01, 0x00, 0xb8, 0x2c, 0x01, + 0x8c, 0xda, 0xe9, 0x8d, 0x06, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x02, 0xd1, 0xe0, 0xb1, 0x03, 0x89, 0xc2, 0xd3, 0xe0, + 0x8b, 0x1e, 0x2c, 0x36, 0x29, 0xd0, 0xba, 0xea, 0x02, 0x31, 0xf6, 0x01, + 0xc2, 0x31, 0xc9, 0x89, 0x56, 0xfe, 0x85, 0xdb, 0x74, 0x2e, 0x8b, 0x3f, + 0x8b, 0x5f, 0x02, 0x8a, 0x47, 0x07, 0xba, 0x01, 0x00, 0xa8, 0x40, 0x74, + 0x0c, 0x89, 0xd8, 0xe8, 0x12, 0x0d, 0x41, 0x09, 0xc6, 0x89, 0xfb, 0xeb, + 0xe1, 0xa8, 0x08, 0x75, 0xf0, 0x3b, 0x5e, 0xfe, 0x72, 0xf3, 0x81, 0xfb, + 0x30, 0x03, 0x73, 0xe5, 0x31, 0xd2, 0xeb, 0xe1, 0x85, 0xf6, 0x74, 0x0e, + 0xbb, 0xff, 0xff, 0x89, 0xd8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, + 0x5b, 0xc3, 0x89, 0xcb, 0xeb, 0xf1, 0xb8, 0x05, 0x00, 0xeb, 0x8e, 0x31, + 0xc0, 0xe8, 0x89, 0xff, 0xe9, 0x2c, 0x0d, 0x53, 0x89, 0xc3, 0x88, 0xd0, + 0x8b, 0x17, 0x30, 0xe4, 0xe8, 0x37, 0x0d, 0xff, 0x47, 0x0a, 0x5b, 0xc3, + 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, + 0xd7, 0x89, 0xda, 0x8b, 0x5c, 0x04, 0x8b, 0x47, 0x06, 0x3d, 0x01, 0x00, + 0x74, 0x0c, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x72, 0x00, 0xc7, 0x47, 0x06, + 0x01, 0x00, 0x8b, 0x44, 0x06, 0x30, 0xe4, 0x8b, 0x5c, 0x04, 0x24, 0x30, + 0x80, 0x64, 0x06, 0xcf, 0x89, 0x46, 0xfc, 0x83, 0x7f, 0x04, 0x00, 0x75, + 0x05, 0x89, 0xf0, 0xe8, 0x99, 0x0d, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xf6, + 0x44, 0x07, 0x04, 0x74, 0x0d, 0x80, 0x64, 0x07, 0xfa, 0xc7, 0x46, 0xfe, + 0x01, 0x00, 0x80, 0x4c, 0x07, 0x01, 0xb9, 0x7f, 0x0f, 0x89, 0xd3, 0x89, + 0xf0, 0x89, 0xfa, 0xe8, 0xfc, 0x16, 0x89, 0xc2, 0x83, 0x7e, 0xfe, 0x00, + 0x74, 0x0d, 0x80, 0x64, 0x07, 0xfa, 0x89, 0xf0, 0x80, 0x4c, 0x07, 0x04, + 0xe8, 0xeb, 0x18, 0xf6, 0x44, 0x06, 0x20, 0x74, 0x03, 0xba, 0xff, 0xff, + 0x8b, 0x46, 0xfc, 0x09, 0x44, 0x06, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0x59, 0xc3, 0x31, 0xc0, 0xeb, 0xf5, 0x53, 0x51, 0x56, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc3, 0x89, 0xd1, 0x8d, 0x56, 0xfc, 0x89, + 0xc8, 0xe8, 0xa6, 0x19, 0x8d, 0x46, 0xfc, 0xe8, 0xb5, 0x19, 0x89, 0xc6, + 0xc6, 0x42, 0xfc, 0x00, 0x89, 0xd8, 0xe8, 0xc2, 0x19, 0x85, 0xc0, 0x75, + 0x15, 0x8d, 0x56, 0xfc, 0x89, 0xd8, 0xe8, 0xdc, 0x19, 0x85, 0xc0, 0x74, + 0x09, 0x89, 0xd8, 0xe8, 0x01, 0x1a, 0x89, 0xc3, 0xeb, 0xe2, 0x89, 0xd8, + 0xe8, 0xa4, 0x19, 0x85, 0xc0, 0x74, 0x04, 0x85, 0xc9, 0x75, 0x09, 0x89, + 0xd8, 0x89, 0xec, 0x5d, 0x5e, 0x59, 0x5b, 0xc3, 0x31, 0xc0, 0xeb, 0xf5, + 0x53, 0x56, 0x89, 0xc3, 0x89, 0xd6, 0x89, 0xd8, 0xe8, 0x84, 0x19, 0x85, + 0xc0, 0x75, 0x09, 0x89, 0xf0, 0xe8, 0x7b, 0x19, 0x85, 0xc0, 0x74, 0x17, + 0x89, 0xd8, 0xe8, 0x72, 0x19, 0x85, 0xc0, 0x74, 0x29, 0x89, 0xf0, 0xe8, + 0x69, 0x19, 0x85, 0xc0, 0x74, 0x20, 0x31, 0xc0, 0x5e, 0x5b, 0xc3, 0x89, + 0xf2, 0x89, 0xd8, 0xe8, 0x7f, 0x19, 0x85, 0xc0, 0x75, 0xf2, 0x89, 0xd8, + 0xe8, 0xa4, 0x19, 0x89, 0xc3, 0x89, 0xf0, 0xe8, 0x9d, 0x19, 0x89, 0xc6, + 0xeb, 0xbc, 0x8a, 0x07, 0x30, 0xe4, 0x89, 0xc3, 0x8a, 0x04, 0x29, 0xc3, + 0x89, 0xd8, 0x5e, 0x5b, 0xc3, 0x53, 0x51, 0x89, 0xc3, 0x89, 0xd1, 0x89, + 0xd8, 0xe8, 0x2b, 0x19, 0x85, 0xc0, 0x74, 0x05, 0x31, 0xc0, 0x59, 0x5b, + 0xc3, 0x89, 0xd8, 0xe8, 0x8f, 0x19, 0x89, 0xc2, 0x89, 0xc8, 0xe8, 0x2e, + 0xff, 0x85, 0xc0, 0x74, 0x05, 0x89, 0xd8, 0x59, 0x5b, 0xc3, 0x89, 0xd8, + 0xe8, 0x5c, 0x19, 0x89, 0xc3, 0xeb, 0xd4, 0xb8, 0x38, 0x36, 0xc3, 0x50, + 0xb8, 0xa0, 0x00, 0xe8, 0x95, 0x05, 0x58, 0x51, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x81, 0xec, 0x92, 0x00, 0x50, 0x52, 0x81, 0xed, 0x80, 0x00, 0x89, + 0xd9, 0x89, 0xd6, 0x89, 0xc3, 0x83, 0xf9, 0x03, 0x72, 0x64, 0x8a, 0x04, + 0x30, 0xe4, 0x89, 0xc7, 0x83, 0xe9, 0x02, 0xf6, 0x85, 0x81, 0x01, 0xc0, + 0x74, 0x68, 0x80, 0x7c, 0x01, 0x3a, 0x75, 0x62, 0xe8, 0xcd, 0x03, 0x98, + 0x89, 0xc2, 0x8a, 0x04, 0x89, 0xde, 0x88, 0x04, 0x8b, 0x76, 0xea, 0x8a, + 0x44, 0x01, 0x89, 0xde, 0x88, 0x44, 0x01, 0x8b, 0x76, 0xea, 0x83, 0xea, + 0x60, 0x83, 0xc6, 0x02, 0x8a, 0x04, 0x83, 0xc3, 0x02, 0x3c, 0x2f, 0x74, + 0x04, 0x3c, 0x5c, 0x75, 0x50, 0x89, 0xf0, 0xe8, 0x24, 0x19, 0x40, 0x39, + 0xc8, 0x77, 0x17, 0x89, 0xf2, 0x89, 0xd8, 0xe8, 0x2f, 0x19, 0x8b, 0x5e, + 0xec, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x30, 0x3c, 0x2f, 0x74, 0x2f, 0x43, + 0xeb, 0xf3, 0xe8, 0x72, 0xff, 0x89, 0xc3, 0xc7, 0x07, 0x0e, 0x00, 0x31, + 0xc0, 0x8d, 0xa6, 0x80, 0x00, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, 0xb4, 0x19, + 0xcd, 0x21, 0x30, 0xe4, 0x89, 0xc2, 0x42, 0x88, 0xd0, 0xc6, 0x47, 0x01, + 0x3a, 0x04, 0x40, 0x88, 0x07, 0xeb, 0xa9, 0xe9, 0x12, 0x01, 0xe9, 0x09, + 0x01, 0x8d, 0x46, 0xee, 0x30, 0xf6, 0xe8, 0x29, 0x19, 0x85, 0xc0, 0x75, + 0x3c, 0x8d, 0x46, 0xee, 0xe8, 0xc7, 0x18, 0x89, 0xc7, 0x80, 0x7e, 0xee, + 0x5c, 0x74, 0x0a, 0x83, 0xf9, 0x02, 0x72, 0xb2, 0x49, 0xc6, 0x07, 0x5c, + 0x43, 0x8d, 0x45, 0x01, 0x39, 0xc8, 0x77, 0xa6, 0x8d, 0x56, 0xee, 0x89, + 0xd8, 0xe8, 0xbd, 0x18, 0x01, 0xfb, 0x29, 0xf9, 0x80, 0x7f, 0xff, 0x5c, + 0x75, 0x16, 0x80, 0x3c, 0x00, 0x75, 0x20, 0xc6, 0x07, 0x00, 0xe9, 0x79, + 0xff, 0xe8, 0xfb, 0xfe, 0x89, 0xc3, 0xc7, 0x07, 0x01, 0x00, 0xeb, 0x87, + 0x83, 0xf9, 0x02, 0x73, 0x03, 0xe9, 0x76, 0xff, 0x49, 0xc6, 0x07, 0x5c, + 0x43, 0xeb, 0xdb, 0x8d, 0x47, 0x01, 0x89, 0x46, 0x7e, 0x89, 0xc8, 0x8d, + 0x7c, 0x01, 0x48, 0x80, 0x3c, 0x2e, 0x74, 0x12, 0x83, 0xf9, 0x02, 0x72, + 0xe0, 0x8a, 0x0c, 0x89, 0xfe, 0x88, 0x0f, 0x8b, 0x5e, 0x7e, 0x89, 0xc1, + 0xeb, 0xb8, 0x89, 0xfe, 0x80, 0x3d, 0x2f, 0x75, 0x0a, 0x8a, 0x47, 0xff, + 0x3c, 0x2f, 0x75, 0x3b, 0x46, 0xeb, 0xa7, 0x80, 0x3d, 0x5c, 0x74, 0xf1, + 0x80, 0x3d, 0x00, 0x74, 0xa2, 0x80, 0x3d, 0x2e, 0x75, 0x51, 0x8d, 0x75, + 0x01, 0x8a, 0x04, 0x3c, 0x2f, 0x75, 0x2a, 0x46, 0x8a, 0x47, 0xff, 0x3c, + 0x2f, 0x75, 0x28, 0x83, 0xeb, 0x02, 0x3b, 0x5e, 0xec, 0x73, 0x03, 0xe9, + 0x19, 0xff, 0x8a, 0x07, 0x3c, 0x2f, 0x75, 0x1e, 0x43, 0xc6, 0x07, 0x00, + 0xe9, 0x6f, 0xff, 0x3c, 0x5c, 0x74, 0xc1, 0xc6, 0x07, 0x5c, 0x43, 0xeb, + 0xbb, 0x3c, 0x5c, 0x74, 0xd2, 0xeb, 0xd1, 0x3c, 0x5c, 0x74, 0xd4, 0xe9, + 0xf5, 0xfe, 0x3c, 0x5c, 0x74, 0xde, 0x3c, 0x3a, 0x74, 0x03, 0x4b, 0xeb, + 0xc9, 0x43, 0xc6, 0x07, 0x5c, 0xeb, 0xd1, 0x83, 0xf9, 0x02, 0x73, 0x03, + 0xe9, 0xd3, 0xfe, 0x89, 0xc1, 0xc6, 0x07, 0x2e, 0x8b, 0x5e, 0x7e, 0xe9, + 0x34, 0xff, 0xc6, 0x07, 0x5c, 0xe9, 0xbf, 0xfe, 0x8b, 0x46, 0xec, 0xe9, + 0xc7, 0xfe, 0x50, 0xb8, 0x08, 0x00, 0xe8, 0xca, 0x03, 0x58, 0x51, 0x56, + 0x57, 0x89, 0xc6, 0x89, 0xd7, 0x31, 0xc9, 0x85, 0xc0, 0x74, 0x26, 0x85, + 0xf6, 0x74, 0x1d, 0xc6, 0x04, 0x00, 0x85, 0xff, 0x74, 0x05, 0x80, 0x3d, + 0x00, 0x75, 0x31, 0x89, 0xda, 0x89, 0xf0, 0xe8, 0x3a, 0x00, 0x89, 0xc6, + 0x85, 0xf6, 0x75, 0x04, 0x85, 0xc9, 0x75, 0x29, 0x89, 0xf0, 0xe9, 0x91, + 0xfe, 0xbb, 0x90, 0x00, 0x89, 0xd8, 0xe8, 0xf0, 0x07, 0x89, 0xc1, 0x85, + 0xc0, 0x75, 0x09, 0xe8, 0xe5, 0xfd, 0x89, 0xc6, 0xc7, 0x04, 0x05, 0x00, + 0x89, 0xce, 0xeb, 0xbf, 0x89, 0xfa, 0x89, 0xf0, 0xe8, 0xd8, 0xfd, 0xeb, + 0xcd, 0x89, 0xc8, 0xe8, 0xc4, 0x17, 0xeb, 0xd0, 0x53, 0x51, 0x55, 0x89, + 0xe5, 0x81, 0xec, 0x90, 0x00, 0x89, 0xc1, 0x89, 0xd3, 0x8d, 0x86, 0x73, + 0xff, 0x31, 0xd2, 0xe8, 0xa0, 0x17, 0x85, 0xc0, 0x75, 0x3e, 0xb4, 0x19, + 0xcd, 0x21, 0x04, 0x41, 0xc6, 0x86, 0x71, 0xff, 0x3a, 0x88, 0x86, 0x70, + 0xff, 0x8d, 0x86, 0x70, 0xff, 0xc6, 0x86, 0x72, 0xff, 0x5c, 0xe8, 0x29, + 0x17, 0x89, 0xc2, 0x42, 0x85, 0xc9, 0x75, 0x11, 0x39, 0xd3, 0x76, 0x29, + 0x89, 0xd8, 0xe8, 0x88, 0x07, 0x89, 0xc1, 0x85, 0xc0, 0x74, 0x22, 0x89, + 0xd3, 0x8d, 0x96, 0x70, 0xff, 0x89, 0xc8, 0xe8, 0x2f, 0x18, 0xeb, 0x0b, + 0xe8, 0x70, 0xfd, 0x89, 0xc3, 0xc7, 0x07, 0x01, 0x00, 0x31, 0xc0, 0x89, + 0xec, 0x5d, 0x59, 0x5b, 0xc3, 0x89, 0xd0, 0xeb, 0xd5, 0xe8, 0x5b, 0xfd, + 0x89, 0xc3, 0xc7, 0x07, 0x05, 0x00, 0xeb, 0xe9, 0x52, 0x89, 0xc2, 0xb4, + 0x3b, 0xcd, 0x21, 0xe8, 0x38, 0x18, 0x5a, 0xc3, 0x51, 0x89, 0xd1, 0x89, + 0xda, 0x89, 0xc3, 0xb4, 0x1a, 0xcd, 0x21, 0x8b, 0xd3, 0xb4, 0x4e, 0xcd, + 0x21, 0xe8, 0x16, 0x18, 0x59, 0xc3, 0x52, 0x89, 0xc2, 0xb4, 0x1a, 0xcd, + 0x21, 0xb4, 0x4f, 0xcd, 0x21, 0xe8, 0x06, 0x18, 0x5a, 0xc3, 0x31, 0xc0, + 0xc3, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc7, 0x89, 0xd6, 0x89, 0xc3, 0xb8, + 0x00, 0x44, 0xcd, 0x21, 0x19, 0xdb, 0x75, 0x02, 0x89, 0xd0, 0x89, 0xc1, + 0x85, 0xdb, 0x7d, 0x03, 0xe9, 0xa9, 0x00, 0xc7, 0x44, 0x28, 0x00, 0x00, + 0xc7, 0x44, 0x2a, 0x00, 0x00, 0xc7, 0x44, 0x2c, 0x00, 0x00, 0xc7, 0x44, + 0x2e, 0x00, 0x00, 0xc7, 0x44, 0x30, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x00, + 0x00, 0xc7, 0x44, 0x26, 0x00, 0x00, 0xc7, 0x44, 0x06, 0x01, 0x00, 0xc7, + 0x44, 0x0c, 0x00, 0x00, 0x30, 0xe4, 0xc7, 0x44, 0x04, 0x00, 0x00, 0x24, + 0x1f, 0x89, 0x04, 0x89, 0x44, 0x0e, 0x88, 0x64, 0x32, 0x8b, 0x44, 0x0c, + 0x89, 0x7c, 0x02, 0x99, 0x89, 0x44, 0x08, 0x89, 0xf8, 0x89, 0x54, 0x0a, + 0xe8, 0x11, 0x02, 0x89, 0xc2, 0xa8, 0x01, 0x74, 0x05, 0x81, 0x4c, 0x04, + 0x24, 0x01, 0xf6, 0xc2, 0x02, 0x74, 0x04, 0x80, 0x4c, 0x04, 0x92, 0xf6, + 0xc1, 0x80, 0x74, 0x45, 0xc7, 0x44, 0x18, 0x00, 0x00, 0xc7, 0x44, 0x1a, + 0x00, 0x00, 0xc7, 0x44, 0x10, 0x00, 0x00, 0xc7, 0x44, 0x12, 0x00, 0x00, + 0x80, 0x4c, 0x05, 0x20, 0x8b, 0x54, 0x18, 0x8b, 0x44, 0x1a, 0x89, 0x54, + 0x20, 0x89, 0x44, 0x22, 0x8b, 0x44, 0x20, 0x8b, 0x54, 0x22, 0x89, 0x44, + 0x1c, 0x89, 0x54, 0x1e, 0x89, 0x54, 0x16, 0x8b, 0x44, 0x1c, 0x89, 0x44, + 0x14, 0x31, 0xc0, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xe8, 0x4b, 0x01, 0xeb, + 0xf6, 0x89, 0xfb, 0xb8, 0x00, 0x57, 0xcd, 0x21, 0x73, 0x07, 0xe8, 0x3d, + 0x01, 0x8b, 0xd0, 0xeb, 0x02, 0x8b, 0xc1, 0x89, 0xc3, 0x89, 0xd0, 0x83, + 0xfa, 0xff, 0x75, 0x0a, 0x83, 0xfb, 0xff, 0x75, 0x05, 0xb8, 0xff, 0xff, + 0xeb, 0xd1, 0x89, 0xda, 0xe8, 0x43, 0x00, 0x89, 0x44, 0x18, 0x89, 0x54, + 0x1a, 0x89, 0x54, 0x22, 0x89, 0x54, 0x1e, 0x8b, 0x44, 0x18, 0x89, 0x44, + 0x20, 0x8b, 0x44, 0x20, 0x89, 0x44, 0x1c, 0x8b, 0x44, 0x1e, 0x8b, 0x54, + 0x1c, 0x89, 0x44, 0x16, 0x89, 0xf8, 0x89, 0x54, 0x14, 0xe8, 0xf8, 0x16, + 0x89, 0x44, 0x10, 0x89, 0x54, 0x12, 0x80, 0x4c, 0x05, 0x80, 0xeb, 0x95, + 0x3d, 0x41, 0x00, 0x7c, 0x08, 0x3d, 0x5a, 0x00, 0x7f, 0x03, 0x05, 0x20, + 0x00, 0xc3, 0x53, 0x51, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x12, 0xb1, 0x09, + 0x89, 0xc3, 0xd3, 0xeb, 0x83, 0xe3, 0x7f, 0x83, 0xc3, 0x50, 0xb1, 0x05, + 0x89, 0x5e, 0xf8, 0x89, 0xc3, 0x30, 0xe4, 0xd3, 0xeb, 0x24, 0x1f, 0xb1, + 0x0b, 0x89, 0x46, 0xf4, 0x89, 0xd0, 0xd3, 0xe8, 0x30, 0xff, 0x30, 0xe4, + 0x80, 0xe3, 0x0f, 0x24, 0x1f, 0xb1, 0x05, 0x89, 0x46, 0xf2, 0x89, 0xd0, + 0x4b, 0xd3, 0xe8, 0x89, 0x5e, 0xf6, 0x30, 0xe4, 0x30, 0xf6, 0x24, 0x3f, + 0x80, 0xe2, 0x1f, 0x89, 0x46, 0xf0, 0xb8, 0xff, 0xff, 0xd1, 0xe2, 0x89, + 0x46, 0xfa, 0x89, 0x46, 0xfc, 0x89, 0x46, 0xfe, 0x8d, 0x46, 0xee, 0x89, + 0x56, 0xee, 0xe8, 0xd3, 0x16, 0x89, 0xec, 0x5d, 0x59, 0x5b, 0xc3, 0xe9, + 0x37, 0xf8, 0x89, 0xc1, 0x89, 0xd6, 0xe8, 0x5e, 0x17, 0x85, 0xc0, 0x75, + 0x07, 0x89, 0xc8, 0x89, 0xf2, 0xe9, 0x25, 0xf8, 0x89, 0xd8, 0xe9, 0x03, + 0xf8, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x50, 0x89, 0xde, + 0x89, 0xc8, 0x89, 0xd3, 0x8d, 0x7e, 0xfc, 0x8b, 0x5e, 0xfa, 0x88, 0xd0, + 0x89, 0xf2, 0xb4, 0x42, 0xcd, 0x21, 0x36, 0x89, 0x05, 0x36, 0x89, 0x55, + 0x02, 0xd1, 0xd2, 0xd1, 0xca, 0x85, 0xd2, 0x7c, 0x0c, 0x8b, 0x46, 0xfc, + 0x8b, 0x56, 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0xe8, 0x1e, 0x00, + 0x99, 0xeb, 0xf4, 0x51, 0x57, 0x89, 0xc7, 0x89, 0xd9, 0x88, 0xd0, 0x57, + 0x1e, 0x07, 0x8a, 0xe0, 0xd1, 0xe9, 0xf3, 0xab, 0x13, 0xc9, 0xf3, 0xaa, + 0x5f, 0x89, 0xf8, 0x5f, 0x59, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x89, 0xc3, + 0x88, 0xc2, 0x30, 0xe4, 0x89, 0xc1, 0xe8, 0x06, 0x01, 0x89, 0xc6, 0x89, + 0x0c, 0x81, 0xfb, 0x00, 0x01, 0x73, 0x41, 0x80, 0x3e, 0x4e, 0x04, 0x03, + 0x72, 0x33, 0x80, 0xfb, 0x50, 0x75, 0x04, 0xb2, 0x0e, 0xeb, 0x07, 0x80, + 0xfb, 0x22, 0x72, 0x1c, 0xb2, 0x13, 0x88, 0xd3, 0x30, 0xff, 0x8a, 0x87, + 0x04, 0x04, 0x98, 0x89, 0xc6, 0xe8, 0xcb, 0xfa, 0x89, 0xc3, 0x89, 0x37, + 0xb8, 0xff, 0xff, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x80, 0xfb, 0x20, 0x72, + 0x04, 0xb2, 0x05, 0xeb, 0xdd, 0x80, 0xfa, 0x13, 0x76, 0xd8, 0xeb, 0xd4, + 0x88, 0xf8, 0x30, 0xe4, 0xeb, 0xd9, 0x52, 0x89, 0xc2, 0xe8, 0x9a, 0xff, + 0x89, 0xd0, 0x5a, 0xc3, 0x53, 0x3b, 0x06, 0x18, 0x04, 0x73, 0x0c, 0x8b, + 0x1e, 0x42, 0x04, 0xd1, 0xe0, 0x01, 0xc3, 0x8b, 0x07, 0x5b, 0xc3, 0x31, + 0xc0, 0x5b, 0xc3, 0x53, 0x3b, 0x06, 0x18, 0x04, 0x72, 0x02, 0x5b, 0xc3, + 0x8b, 0x1e, 0x42, 0x04, 0xd1, 0xe0, 0x01, 0xc3, 0x89, 0x17, 0x5b, 0xc3, + 0x55, 0x89, 0xe5, 0x89, 0xe0, 0x2b, 0x06, 0x52, 0x04, 0x89, 0xec, 0x5d, + 0xc3, 0x00, 0x8c, 0x16, 0x44, 0x04, 0xc3, 0x3b, 0xc4, 0x73, 0x13, 0x2b, + 0xc4, 0xf7, 0xd8, 0x3b, 0x06, 0x52, 0x04, 0x77, 0x06, 0x8c, 0xd0, 0x3b, + 0x06, 0x44, 0x04, 0x74, 0x01, 0xc3, 0x0e, 0x5a, 0xb8, 0xcd, 0x16, 0xbb, + 0x01, 0x00, 0xe9, 0xc5, 0xfe, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x4f, + 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x21, 0x00, 0x51, 0x89, 0xd1, + 0x89, 0xc2, 0x8a, 0xc1, 0xb4, 0x3d, 0xcd, 0x21, 0x72, 0x02, 0x89, 0x07, + 0xe8, 0xff, 0x14, 0x59, 0xc3, 0x53, 0x52, 0x89, 0xc3, 0xb8, 0x00, 0x44, + 0xcd, 0x21, 0x19, 0xdb, 0x75, 0x02, 0x89, 0xd0, 0x89, 0xc2, 0x85, 0xdb, + 0x7f, 0x02, 0x75, 0x0a, 0xa8, 0x80, 0x74, 0x06, 0xb8, 0x01, 0x00, 0x5a, + 0x5b, 0xc3, 0x31, 0xc0, 0x5a, 0x5b, 0xc3, 0xb8, 0x3a, 0x36, 0xc3, 0x51, + 0x89, 0xd1, 0x89, 0xc2, 0xb4, 0x3c, 0xcd, 0x21, 0x72, 0x02, 0x89, 0x07, + 0xe8, 0xc3, 0x14, 0x59, 0xc3, 0x51, 0x89, 0xd1, 0x89, 0xc2, 0xb4, 0x5b, + 0xcd, 0x21, 0x72, 0x02, 0x89, 0x07, 0xe8, 0xb1, 0x14, 0x59, 0xc3, 0x53, + 0x51, 0x52, 0x56, 0x89, 0xc6, 0xd1, 0xe0, 0x81, 0x3e, 0x42, 0x04, 0x1a, + 0x04, 0x74, 0x1f, 0x8b, 0x1e, 0x42, 0x04, 0x89, 0xc2, 0x89, 0xd8, 0xe8, + 0xb9, 0x15, 0x89, 0xc1, 0x85, 0xc9, 0x75, 0x2d, 0xe8, 0xa8, 0xf9, 0x89, + 0xc6, 0xc7, 0x04, 0x05, 0x00, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x8b, 0x1e, + 0x18, 0x04, 0x89, 0x1e, 0x3c, 0x36, 0xe8, 0x94, 0x03, 0x89, 0xc1, 0x85, + 0xc0, 0x74, 0xdd, 0x8b, 0x1e, 0x18, 0x04, 0xba, 0x1a, 0x04, 0xd1, 0xe3, + 0xe8, 0xdd, 0x15, 0xeb, 0xcf, 0xa1, 0x18, 0x04, 0x89, 0xf3, 0x31, 0xd2, + 0x2b, 0x1e, 0x18, 0x04, 0xd1, 0xe0, 0xd1, 0xe3, 0x01, 0xc8, 0xe8, 0x46, + 0xfe, 0x89, 0x0e, 0x42, 0x04, 0x89, 0x36, 0x18, 0x04, 0xeb, 0xbe, 0xa1, + 0x42, 0x04, 0x3d, 0x1a, 0x04, 0x75, 0x01, 0xc3, 0xe8, 0x4b, 0x13, 0xa1, + 0x3c, 0x36, 0xc7, 0x06, 0x42, 0x04, 0x1a, 0x04, 0xa3, 0x18, 0x04, 0xc3, + 0x53, 0x51, 0x56, 0x89, 0xc3, 0xa1, 0x18, 0x04, 0x39, 0xc3, 0x73, 0x24, + 0x3b, 0x1e, 0x18, 0x04, 0x73, 0x2a, 0x89, 0xd9, 0xd1, 0xe1, 0x85, 0xd2, + 0x74, 0x27, 0x89, 0xd8, 0xe8, 0x2a, 0x00, 0x8b, 0x36, 0x42, 0x04, 0x01, + 0xce, 0x80, 0xce, 0x40, 0x89, 0x14, 0x89, 0xd8, 0x5e, 0x59, 0x5b, 0xc3, + 0x89, 0xc1, 0xd1, 0xf9, 0x01, 0xc8, 0x40, 0xe8, 0x41, 0xff, 0xeb, 0xd0, + 0xbb, 0xff, 0xff, 0xeb, 0xe9, 0x8b, 0x36, 0x42, 0x04, 0x01, 0xce, 0xeb, + 0xdf, 0x53, 0x52, 0x3d, 0x05, 0x00, 0x7d, 0x10, 0x89, 0xc2, 0x8b, 0x1e, + 0x42, 0x04, 0xd1, 0xe2, 0x01, 0xd3, 0xf6, 0x47, 0x01, 0x40, 0x74, 0x03, + 0x5a, 0x5b, 0xc3, 0x80, 0x4f, 0x01, 0x40, 0xe8, 0xc3, 0xfe, 0x85, 0xc0, + 0x74, 0xf2, 0x8b, 0x1e, 0x42, 0x04, 0x01, 0xd3, 0x80, 0x4f, 0x01, 0x20, + 0x5a, 0x5b, 0xc3, 0x52, 0x89, 0xc2, 0xe8, 0xc8, 0xff, 0x89, 0xd0, 0xe8, + 0x22, 0xfe, 0x5a, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x89, 0xc1, 0x89, 0xc3, + 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x31, 0xf6, 0x85, 0xd2, 0x7c, 0x0e, + 0x89, 0xc8, 0x31, 0xd2, 0xe8, 0x1c, 0xfe, 0x89, 0xf0, 0x5e, 0x5a, 0x59, + 0x5b, 0xc3, 0xe8, 0x91, 0xfd, 0x89, 0xc6, 0xeb, 0xeb, 0x52, 0x8b, 0x16, + 0x46, 0x36, 0xa1, 0x44, 0x36, 0xe8, 0x9c, 0xe9, 0xe9, 0x03, 0x15, 0x53, + 0x52, 0x55, 0x89, 0xe5, 0x89, 0xc3, 0x83, 0x3f, 0x00, 0x75, 0x06, 0x89, + 0xec, 0x5d, 0x5a, 0x5b, 0xc3, 0x1e, 0xff, 0x17, 0x1f, 0xeb, 0xf4, 0x53, + 0x52, 0x55, 0x89, 0xe5, 0x89, 0xc3, 0x8b, 0x47, 0x02, 0x8b, 0x17, 0x85, + 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x74, 0xe0, 0x1e, 0xff, 0x1f, 0x1f, 0xeb, + 0xda, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xc1, 0x1e, + 0xe8, 0xcc, 0xf5, 0xbf, 0x04, 0x06, 0x89, 0xfa, 0xbb, 0xe6, 0x05, 0x89, + 0xfe, 0x88, 0xc8, 0x39, 0xfb, 0x73, 0x16, 0x80, 0x3f, 0x02, 0x75, 0x05, + 0x83, 0xc3, 0x06, 0xeb, 0xf2, 0x3a, 0x47, 0x01, 0x72, 0xf6, 0x89, 0xde, + 0x8a, 0x47, 0x01, 0xeb, 0xef, 0x39, 0xfe, 0x74, 0x15, 0x8d, 0x44, 0x02, + 0x80, 0x3c, 0x00, 0x75, 0x08, 0xe8, 0x8b, 0xff, 0xc6, 0x04, 0x02, 0xeb, + 0xcb, 0xe8, 0x9b, 0xff, 0xeb, 0xf6, 0x1f, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0x5a, 0x59, 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, + 0xc1, 0x1e, 0xe8, 0x76, 0xf5, 0x88, 0xd5, 0xbf, 0x1c, 0x06, 0x89, 0xfa, + 0xbb, 0x04, 0x06, 0x89, 0xfe, 0x88, 0xc8, 0x39, 0xfb, 0x73, 0x16, 0x80, + 0x3f, 0x02, 0x75, 0x05, 0x83, 0xc3, 0x06, 0xeb, 0xf2, 0x3a, 0x47, 0x01, + 0x77, 0xf6, 0x89, 0xde, 0x8a, 0x47, 0x01, 0xeb, 0xef, 0x39, 0xfe, 0x74, + 0x1c, 0x3a, 0x6c, 0x01, 0x73, 0x05, 0xc6, 0x04, 0x02, 0xeb, 0xd1, 0x8d, + 0x44, 0x02, 0x80, 0x3c, 0x00, 0x75, 0x05, 0xe8, 0x29, 0xff, 0xeb, 0xee, + 0xe8, 0x3c, 0xff, 0xeb, 0xe9, 0x1f, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, + 0x5b, 0xc3, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x50, + 0x89, 0xd6, 0x89, 0x4e, 0xfe, 0x89, 0xda, 0x31, 0xc9, 0x8a, 0x04, 0x3c, + 0x20, 0x75, 0x03, 0x46, 0xeb, 0xf7, 0x3c, 0x09, 0x74, 0xf9, 0x84, 0xc0, + 0x74, 0x49, 0x30, 0xc0, 0x80, 0x3c, 0x22, 0x74, 0x19, 0x89, 0x76, 0xfc, + 0x89, 0xf3, 0x80, 0x3c, 0x22, 0x75, 0x3b, 0x83, 0x7e, 0xfa, 0x00, 0x75, + 0x12, 0x46, 0x84, 0xc0, 0x75, 0x09, 0xb0, 0x02, 0xeb, 0xec, 0xb0, 0x01, + 0x46, 0xeb, 0xe2, 0x30, 0xc0, 0xeb, 0xe3, 0x3c, 0x01, 0x75, 0x1f, 0x85, + 0xd2, 0x74, 0x58, 0x89, 0xcf, 0xd1, 0xe7, 0x01, 0xd7, 0x8b, 0x46, 0xfc, + 0x89, 0x05, 0x8a, 0x04, 0x41, 0x84, 0xc0, 0x74, 0x48, 0x46, 0xc6, 0x07, + 0x00, 0xeb, 0xa6, 0xe9, 0x56, 0x00, 0x80, 0x3c, 0x20, 0x75, 0x28, 0x84, + 0xc0, 0x74, 0xd8, 0x80, 0x3c, 0x00, 0x74, 0xd3, 0x80, 0x3c, 0x5c, 0x75, + 0x13, 0x83, 0x7e, 0xfa, 0x00, 0x75, 0x1b, 0x80, 0x7c, 0x01, 0x22, 0x75, + 0x07, 0x46, 0x80, 0x7c, 0xfe, 0x5c, 0x74, 0x9a, 0x85, 0xd2, 0x75, 0x23, + 0x46, 0xeb, 0x93, 0x80, 0x3c, 0x09, 0x74, 0xd3, 0xeb, 0xd5, 0x80, 0x7c, + 0x01, 0x22, 0x75, 0x07, 0x46, 0xeb, 0xe9, 0xeb, 0x24, 0xeb, 0x13, 0x80, + 0x7c, 0x01, 0x5c, 0x75, 0xdf, 0x3c, 0x01, 0x74, 0xef, 0xeb, 0xd9, 0x8a, + 0x24, 0x88, 0x27, 0x43, 0xeb, 0xd6, 0x88, 0x07, 0x8b, 0x5e, 0xfe, 0x89, + 0xc8, 0x89, 0x37, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x41, 0x80, 0x3c, + 0x00, 0x74, 0xed, 0xe9, 0x3d, 0xff, 0x55, 0x89, 0xe5, 0x56, 0x57, 0x83, + 0xec, 0x08, 0x50, 0x52, 0x89, 0xdf, 0x89, 0x4e, 0xf6, 0x8d, 0x4e, 0xf4, + 0x89, 0xfa, 0x31, 0xdb, 0xe8, 0x0c, 0xff, 0x8b, 0x4e, 0xf4, 0x40, 0x29, + 0xf9, 0xd1, 0xe0, 0x89, 0xcb, 0x83, 0xc1, 0x02, 0x05, 0x02, 0x00, 0x80, + 0xe1, 0xfe, 0x01, 0xc8, 0x40, 0x24, 0xfe, 0xe8, 0x93, 0x00, 0x89, 0xc6, + 0x89, 0x46, 0xf8, 0x31, 0xc0, 0x43, 0x89, 0x46, 0xfa, 0x85, 0xf6, 0x75, + 0x19, 0x8b, 0x5e, 0xf6, 0x8b, 0x76, 0xfa, 0x89, 0x07, 0x8b, 0x5e, 0x04, + 0x8b, 0x46, 0xf8, 0x89, 0x37, 0x8d, 0x66, 0xfc, 0x5f, 0x5e, 0x5d, 0xc2, + 0x02, 0x00, 0x89, 0xfa, 0x89, 0xf0, 0xe8, 0xbf, 0x12, 0x8b, 0x46, 0xf0, + 0x89, 0xf3, 0x89, 0xf2, 0x01, 0xcb, 0x8d, 0x4e, 0xf4, 0x89, 0x5e, 0xfa, + 0x89, 0x07, 0x8b, 0x46, 0xf2, 0x83, 0xc3, 0x02, 0xe8, 0xa8, 0xfe, 0x40, + 0x89, 0xc3, 0xd1, 0xe3, 0x03, 0x5e, 0xfa, 0xc7, 0x07, 0x00, 0x00, 0xeb, + 0xb8, 0x53, 0x51, 0x52, 0xb8, 0x32, 0x36, 0xb9, 0x30, 0x36, 0x8b, 0x1e, + 0x6b, 0x04, 0x8b, 0x16, 0x6f, 0x04, 0x50, 0xa1, 0x48, 0x36, 0xe8, 0x5d, + 0xff, 0xa3, 0x3e, 0x36, 0xa1, 0x30, 0x36, 0xa3, 0x34, 0x36, 0xa3, 0x44, + 0x36, 0xa1, 0x32, 0x36, 0xa3, 0x36, 0x36, 0xa3, 0x46, 0x36, 0x5a, 0x59, + 0x5b, 0xc3, 0xa1, 0x3e, 0x36, 0x85, 0xc0, 0x75, 0x01, 0xc3, 0xe9, 0xf5, + 0x0f, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, + 0x89, 0xc7, 0x85, 0xc0, 0x74, 0x52, 0x3d, 0xea, 0xff, 0x77, 0x4d, 0x05, + 0x03, 0x00, 0x24, 0xfe, 0x89, 0x46, 0xfc, 0x3d, 0x06, 0x00, 0x72, 0x4b, + 0xc6, 0x46, 0xfe, 0x00, 0x31, 0xd2, 0x8b, 0x46, 0xfc, 0x3b, 0x06, 0x7a, + 0x04, 0x76, 0x4d, 0x8b, 0x36, 0x78, 0x04, 0x85, 0xf6, 0x74, 0x3b, 0x85, + 0xf6, 0x74, 0x52, 0x8b, 0x4c, 0x0a, 0x89, 0x36, 0x78, 0x04, 0x39, 0xf9, + 0x72, 0x0f, 0x8c, 0xda, 0x89, 0xf3, 0x89, 0xf8, 0xe8, 0x61, 0x12, 0x89, + 0xc2, 0x85, 0xc0, 0x75, 0x5d, 0x3b, 0x0e, 0x7a, 0x04, 0x77, 0x2c, 0x8b, + 0x74, 0x04, 0xeb, 0xd7, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, + 0x59, 0x5b, 0xc3, 0xc7, 0x46, 0xfc, 0x06, 0x00, 0xeb, 0xae, 0x89, 0x36, + 0x7a, 0x04, 0x8b, 0x36, 0x76, 0x04, 0xeb, 0xbb, 0x31, 0xc0, 0x8b, 0x36, + 0x76, 0x04, 0xa3, 0x7a, 0x04, 0xeb, 0xb0, 0x89, 0x0e, 0x7a, 0x04, 0xeb, + 0xce, 0x80, 0x7e, 0xfe, 0x00, 0x74, 0x0f, 0x89, 0xf8, 0xe8, 0x5a, 0x14, + 0x85, 0xc0, 0x74, 0x16, 0xc6, 0x46, 0xfe, 0x00, 0xeb, 0x84, 0x89, 0xf8, + 0xe8, 0x1b, 0x15, 0x85, 0xc0, 0x74, 0xe8, 0xc6, 0x46, 0xfe, 0x01, 0xe9, + 0x74, 0xff, 0x89, 0xd0, 0xeb, 0xac, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0xf6, 0x44, 0x06, + 0x03, 0x74, 0x68, 0x31, 0xff, 0xf6, 0x44, 0x07, 0x10, 0x75, 0x65, 0x8b, + 0x44, 0x02, 0x85, 0xc0, 0x74, 0x16, 0xf7, 0xd8, 0x8b, 0x5c, 0x08, 0x99, + 0x89, 0x5e, 0xfc, 0x89, 0xd1, 0x89, 0xc3, 0xba, 0x01, 0x00, 0x8b, 0x46, + 0xfc, 0xe8, 0xa9, 0xf9, 0x83, 0x7e, 0xfe, 0x00, 0x74, 0x08, 0x8b, 0x44, + 0x08, 0xe8, 0x40, 0xfc, 0x09, 0xc7, 0xf6, 0x44, 0x06, 0x08, 0x74, 0x11, + 0x8b, 0x5c, 0x04, 0x8b, 0x47, 0x04, 0xe8, 0xe5, 0x0e, 0x8b, 0x5c, 0x04, + 0xc7, 0x47, 0x04, 0x00, 0x00, 0xf6, 0x44, 0x07, 0x08, 0x74, 0x06, 0x89, + 0xf0, 0xff, 0x16, 0x40, 0x36, 0xc6, 0x44, 0x06, 0x00, 0x80, 0x64, 0x07, + 0x40, 0x89, 0xf8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xbf, + 0xff, 0xff, 0xeb, 0xf1, 0xe8, 0xab, 0x0c, 0x85, 0xc0, 0x74, 0x94, 0xbf, + 0xff, 0xff, 0xeb, 0x8f, 0x53, 0x89, 0xc3, 0xe8, 0x6c, 0xff, 0x89, 0xc2, + 0x89, 0xd8, 0xe8, 0x26, 0x00, 0x89, 0xd0, 0x5b, 0xc3, 0x53, 0x52, 0x8b, + 0x1e, 0x2c, 0x36, 0x85, 0xdb, 0x74, 0x12, 0x3b, 0x47, 0x02, 0x74, 0x04, + 0x8b, 0x1f, 0xeb, 0xf3, 0xba, 0x01, 0x00, 0xe8, 0xd6, 0xff, 0x5a, 0x5b, + 0xc3, 0xb8, 0xff, 0xff, 0x5a, 0x5b, 0xc3, 0x53, 0x56, 0xbe, 0x2c, 0x36, + 0x8b, 0x1c, 0x85, 0xdb, 0x74, 0x16, 0x3b, 0x47, 0x02, 0x74, 0x04, 0x89, + 0xde, 0xeb, 0xf1, 0x8b, 0x07, 0x89, 0x04, 0xa1, 0x2e, 0x36, 0x89, 0x1e, + 0x2e, 0x36, 0x89, 0x07, 0x5e, 0x5b, 0xc3, 0x53, 0x8b, 0x1e, 0x2e, 0x36, + 0x85, 0xdb, 0x75, 0x02, 0x5b, 0xc3, 0x8b, 0x07, 0xa3, 0x2e, 0x36, 0x89, + 0xd8, 0xe8, 0x42, 0x0e, 0xeb, 0xea, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc1, + 0x89, 0xd3, 0x8b, 0x77, 0x04, 0x8b, 0x44, 0x06, 0x3d, 0x01, 0x00, 0x74, + 0x0c, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x6f, 0x00, 0xc7, 0x44, 0x06, 0x01, + 0x00, 0xf6, 0x47, 0x06, 0x02, 0x75, 0x03, 0xe9, 0x69, 0x00, 0x8b, 0x77, + 0x04, 0x83, 0x7c, 0x04, 0x00, 0x75, 0x05, 0x89, 0xd8, 0xe8, 0x73, 0x00, + 0xbe, 0x00, 0x04, 0x83, 0xf9, 0x0a, 0x75, 0x28, 0xbe, 0x00, 0x06, 0xf6, + 0x47, 0x06, 0x40, 0x75, 0x1f, 0x8b, 0x3f, 0x80, 0x4f, 0x07, 0x10, 0xc6, + 0x05, 0x0d, 0xff, 0x07, 0xff, 0x47, 0x02, 0x8b, 0x47, 0x02, 0x3b, 0x47, + 0x0a, 0x75, 0x09, 0x89, 0xd8, 0xe8, 0xd2, 0x0b, 0x85, 0xc0, 0x75, 0x23, + 0x8b, 0x3f, 0x80, 0x4f, 0x07, 0x10, 0x88, 0x0d, 0xff, 0x07, 0xff, 0x47, + 0x02, 0x85, 0x77, 0x06, 0x75, 0x08, 0x8b, 0x47, 0x02, 0x3b, 0x47, 0x0a, + 0x75, 0x23, 0x89, 0xd8, 0xe8, 0xaf, 0x0b, 0x85, 0xc0, 0x74, 0x1a, 0xb8, + 0xff, 0xff, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xe8, 0xb5, 0xf3, 0x89, 0xc6, + 0xc7, 0x04, 0x04, 0x00, 0xb8, 0xff, 0xff, 0x80, 0x4f, 0x06, 0x20, 0xeb, + 0xe9, 0x88, 0xc8, 0x30, 0xe4, 0xeb, 0xe3, 0x53, 0x56, 0x89, 0xc3, 0xe8, + 0x33, 0x14, 0x83, 0x7f, 0x0a, 0x00, 0x75, 0x0c, 0x8a, 0x47, 0x07, 0xa8, + 0x02, 0x74, 0x40, 0xc7, 0x47, 0x0a, 0x86, 0x00, 0x8b, 0x47, 0x0a, 0xe8, + 0x83, 0xfd, 0x8b, 0x77, 0x04, 0x89, 0x44, 0x04, 0x8b, 0x77, 0x04, 0x83, + 0x7c, 0x04, 0x00, 0x75, 0x38, 0x80, 0x67, 0x07, 0xf8, 0x8d, 0x47, 0x0c, + 0x8b, 0x77, 0x04, 0x80, 0x4f, 0x07, 0x04, 0x89, 0x44, 0x04, 0xc7, 0x47, + 0x0a, 0x01, 0x00, 0x8b, 0x77, 0x04, 0x8b, 0x44, 0x04, 0xc7, 0x47, 0x02, + 0x00, 0x00, 0x89, 0x07, 0x5e, 0x5b, 0xc3, 0xa8, 0x04, 0x74, 0x07, 0xc7, + 0x47, 0x0a, 0x40, 0x00, 0xeb, 0xba, 0xc7, 0x47, 0x0a, 0x00, 0x02, 0xeb, + 0xb3, 0x80, 0x4f, 0x06, 0x08, 0xeb, 0xd8, 0x53, 0x56, 0x89, 0xc6, 0x89, + 0xd3, 0xc7, 0x47, 0x02, 0x00, 0x00, 0x8a, 0x04, 0x3c, 0x2d, 0x74, 0x0b, + 0x3c, 0x23, 0x75, 0x0d, 0x80, 0x4f, 0x02, 0x01, 0x46, 0xeb, 0xef, 0x80, + 0x4f, 0x02, 0x08, 0xeb, 0xf7, 0x3c, 0x2b, 0x75, 0x0a, 0x80, 0x4f, 0x02, + 0x04, 0x80, 0x67, 0x02, 0xfd, 0xeb, 0xe9, 0x3c, 0x20, 0x75, 0x0c, 0xf6, + 0x47, 0x02, 0x04, 0x75, 0xdf, 0x80, 0x4f, 0x02, 0x02, 0xeb, 0xd9, 0x3c, + 0x30, 0x75, 0x05, 0x88, 0x47, 0x19, 0xeb, 0xd0, 0x89, 0xf0, 0x5e, 0x5b, + 0xc3, 0x51, 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd1, 0x89, 0xda, 0xc6, 0x47, + 0x19, 0x20, 0xe8, 0xa2, 0xff, 0x89, 0xc7, 0xc7, 0x47, 0x06, 0x00, 0x00, + 0x89, 0xc6, 0x80, 0x3d, 0x2a, 0x74, 0x22, 0x8a, 0x04, 0x3c, 0x30, 0x7c, + 0x2e, 0x3c, 0x39, 0x7f, 0x2a, 0xba, 0x0a, 0x00, 0x8b, 0x47, 0x06, 0xf7, + 0xea, 0x89, 0xc2, 0x8a, 0x04, 0x98, 0x2d, 0x30, 0x00, 0x01, 0xc2, 0x46, + 0x89, 0x57, 0x06, 0xeb, 0xde, 0x89, 0xcf, 0x83, 0x05, 0x02, 0x8b, 0x3d, + 0x8b, 0x45, 0xfe, 0x89, 0x47, 0x06, 0x85, 0xc0, 0x7c, 0x38, 0x46, 0xc7, + 0x47, 0x08, 0xff, 0xff, 0x80, 0x3c, 0x2e, 0x75, 0x48, 0x46, 0xc7, 0x47, + 0x08, 0x00, 0x00, 0x80, 0x3c, 0x2a, 0x74, 0x2b, 0x8a, 0x04, 0x3c, 0x30, + 0x7c, 0x37, 0x3c, 0x39, 0x7f, 0x33, 0xba, 0x0a, 0x00, 0x8b, 0x47, 0x08, + 0xf7, 0xea, 0x89, 0xc2, 0x8a, 0x04, 0x98, 0x2d, 0x30, 0x00, 0x01, 0xc2, + 0x46, 0x89, 0x57, 0x08, 0xeb, 0xde, 0xf7, 0x5f, 0x06, 0x80, 0x4f, 0x02, + 0x08, 0xeb, 0xbf, 0x89, 0xcf, 0x83, 0x05, 0x02, 0x8b, 0x3d, 0x8b, 0x45, + 0xfe, 0x89, 0x47, 0x08, 0x85, 0xc0, 0x7c, 0x21, 0x46, 0x8a, 0x04, 0x8d, + 0x54, 0x01, 0x3c, 0x68, 0x73, 0x1e, 0x3c, 0x4c, 0x73, 0x57, 0x3c, 0x49, + 0x75, 0x55, 0x80, 0x7c, 0x01, 0x36, 0x75, 0x36, 0x80, 0x7c, 0x02, 0x34, + 0x75, 0x30, 0xe9, 0x77, 0x00, 0xc7, 0x47, 0x08, 0xff, 0xff, 0xeb, 0xd8, + 0x8d, 0x7c, 0x02, 0x77, 0x0e, 0x80, 0x7c, 0x01, 0x68, 0x75, 0x50, 0x89, + 0xfe, 0x80, 0x4f, 0x02, 0x10, 0xeb, 0x13, 0x3c, 0x74, 0x73, 0x15, 0x3c, + 0x6c, 0x75, 0x26, 0x3a, 0x44, 0x01, 0x75, 0x16, 0x89, 0xfe, 0x80, 0x4f, + 0x02, 0x80, 0x89, 0xf0, 0x5f, 0x5e, 0x59, 0xc3, 0x76, 0x4f, 0x3c, 0x7a, + 0x74, 0x4b, 0x3c, 0x77, 0x75, 0xf0, 0x46, 0x80, 0x4f, 0x02, 0x40, 0xeb, + 0xe9, 0xeb, 0x0a, 0xeb, 0x1c, 0x3c, 0x6a, 0x75, 0xe1, 0x89, 0xd6, 0xeb, + 0xd9, 0x76, 0x2a, 0x3c, 0x57, 0x74, 0x12, 0x3c, 0x4e, 0x75, 0xd3, 0x89, + 0xd6, 0x80, 0x4f, 0x03, 0x02, 0xeb, 0xcb, 0xeb, 0x0b, 0x3c, 0x46, 0x75, + 0xc5, 0x46, 0x80, 0x4f, 0x03, 0x04, 0xeb, 0xbe, 0x89, 0xd6, 0x80, 0x4f, + 0x02, 0x20, 0xeb, 0xb6, 0x83, 0xc6, 0x03, 0xeb, 0xad, 0x89, 0xd6, 0x80, + 0x4f, 0x03, 0x01, 0xeb, 0xa9, 0x46, 0xeb, 0xa6, 0x56, 0x57, 0x89, 0xc6, + 0x89, 0xd7, 0x89, 0xda, 0x8e, 0xc7, 0x31, 0xc0, 0x39, 0xd0, 0x74, 0x0c, + 0x89, 0xf3, 0x46, 0x26, 0x80, 0x3f, 0x00, 0x74, 0x03, 0x40, 0xeb, 0xf0, + 0x5f, 0x5e, 0xc3, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, + 0x89, 0xde, 0x89, 0xc3, 0x89, 0xd7, 0x31, 0xc9, 0x83, 0xfe, 0xff, 0x75, + 0x25, 0x8e, 0xc7, 0x26, 0x8b, 0x07, 0x85, 0xc0, 0x74, 0x14, 0x89, 0xc2, + 0x8d, 0x46, 0xfe, 0x83, 0xc3, 0x02, 0xe8, 0x11, 0x12, 0x3d, 0xff, 0xff, + 0x74, 0xe7, 0x01, 0xc1, 0xeb, 0xe3, 0x89, 0xc8, 0x89, 0xec, 0x5d, 0xe9, + 0x4e, 0xff, 0x8e, 0xc7, 0x26, 0x8b, 0x07, 0x85, 0xc0, 0x74, 0x18, 0x39, + 0xf1, 0x7f, 0x14, 0x89, 0xc2, 0x8d, 0x46, 0xfe, 0x83, 0xc3, 0x02, 0xe8, + 0xe8, 0x11, 0x3d, 0xff, 0xff, 0x74, 0xe3, 0x01, 0xc1, 0xeb, 0xdf, 0x39, + 0xf1, 0x7e, 0xd3, 0x89, 0xf0, 0xeb, 0xd1, 0x51, 0x56, 0x55, 0x89, 0xe5, + 0x83, 0xec, 0x0a, 0x52, 0x89, 0xd9, 0xbb, 0x10, 0x00, 0x8d, 0x56, 0xf6, + 0xe8, 0x25, 0x12, 0x8d, 0x46, 0xf6, 0x8b, 0x5e, 0xf4, 0xe8, 0x8e, 0x0a, + 0x89, 0xc6, 0x01, 0xcb, 0x89, 0xc8, 0x89, 0xf2, 0x4e, 0x85, 0xd2, 0x7e, + 0x0f, 0x89, 0xc2, 0x4b, 0x48, 0x85, 0xd2, 0x7e, 0x07, 0x8a, 0x52, 0xf6, + 0x88, 0x17, 0xeb, 0xea, 0x8b, 0x76, 0xf4, 0x01, 0xc6, 0x89, 0xc2, 0x4e, + 0x48, 0x85, 0xd2, 0x7e, 0x05, 0xc6, 0x04, 0x30, 0xeb, 0xf3, 0x8b, 0x5e, + 0xf4, 0x01, 0xcb, 0xc6, 0x07, 0x00, 0x89, 0xec, 0x5d, 0x5e, 0x59, 0xc3, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x89, 0xc6, 0x89, 0x56, + 0xfc, 0x89, 0x5e, 0xfa, 0x89, 0x4e, 0xfe, 0x85, 0xc9, 0x7c, 0x28, 0x8b, + 0x5e, 0xfc, 0x83, 0x7f, 0x08, 0xff, 0x75, 0x05, 0xc7, 0x47, 0x08, 0x04, + 0x00, 0xbb, 0x0a, 0x00, 0x8b, 0x46, 0xfe, 0x89, 0xf2, 0xe8, 0xb0, 0x11, + 0x89, 0x76, 0xf8, 0x8d, 0x44, 0x01, 0x80, 0x3c, 0x00, 0x74, 0x14, 0x89, + 0xc6, 0xeb, 0xf4, 0xf7, 0x5e, 0xfe, 0xc6, 0x04, 0x2d, 0xf7, 0x5e, 0xfa, + 0x83, 0x5e, 0xfe, 0x00, 0x46, 0xeb, 0xc8, 0x8b, 0x5e, 0xfc, 0x83, 0x7f, + 0x08, 0x00, 0x74, 0x35, 0xc6, 0x04, 0x2e, 0x31, 0xff, 0x89, 0xc6, 0x8b, + 0x5e, 0xfc, 0x3b, 0x7f, 0x08, 0x7d, 0x23, 0x8b, 0x46, 0xfa, 0xbb, 0x0a, + 0x00, 0x31, 0xd2, 0x31, 0xc9, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xe8, 0x83, + 0x11, 0x89, 0x56, 0xfe, 0x89, 0x46, 0xfa, 0x8a, 0x46, 0xfe, 0x04, 0x30, + 0x47, 0x88, 0x04, 0x46, 0xeb, 0xd5, 0xc6, 0x04, 0x00, 0xf6, 0x46, 0xfb, + 0x80, 0x74, 0x42, 0x3b, 0x76, 0xf8, 0x74, 0x11, 0x4e, 0x80, 0x3c, 0x2e, + 0x75, 0x01, 0x4e, 0x80, 0x3c, 0x39, 0x75, 0x37, 0xc6, 0x04, 0x30, 0xeb, + 0xea, 0xc6, 0x04, 0x31, 0x46, 0x8a, 0x04, 0x8d, 0x7c, 0x01, 0x3c, 0x30, + 0x75, 0x04, 0x89, 0xfe, 0xeb, 0xf3, 0x3c, 0x2e, 0x75, 0x10, 0xc6, 0x04, + 0x30, 0x8d, 0x75, 0x01, 0x88, 0x05, 0x80, 0x3c, 0x30, 0x75, 0x03, 0x46, + 0xeb, 0xf8, 0xc6, 0x04, 0x30, 0x46, 0xc6, 0x04, 0x00, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0xc3, 0xfe, 0x04, 0xeb, 0xf6, 0x53, 0x89, 0xc3, 0xf6, 0x47, + 0x02, 0x08, 0x75, 0x22, 0x80, 0x7f, 0x19, 0x30, 0x75, 0x1c, 0x8b, 0x47, + 0x06, 0x2b, 0x47, 0x0c, 0x2b, 0x47, 0x0e, 0x2b, 0x47, 0x10, 0x2b, 0x47, + 0x12, 0x2b, 0x47, 0x14, 0x2b, 0x47, 0x16, 0x85, 0xc0, 0x7e, 0x03, 0x01, + 0x47, 0x0e, 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, + 0x89, 0xc7, 0x89, 0x56, 0xfe, 0x89, 0x4e, 0xfc, 0x83, 0x7f, 0x10, 0x00, + 0x7e, 0xb3, 0x8e, 0x46, 0xfe, 0x8d, 0x46, 0xfa, 0x26, 0x8b, 0x15, 0xe8, + 0x50, 0x10, 0x83, 0xc7, 0x02, 0x89, 0xc1, 0x3d, 0xff, 0xff, 0x74, 0xe4, + 0x3b, 0x47, 0x10, 0x7f, 0x19, 0x8d, 0x76, 0xfa, 0x49, 0x83, 0xf9, 0xff, + 0x74, 0xd6, 0x8a, 0x04, 0x98, 0x89, 0xc2, 0x89, 0xd8, 0x46, 0xff, 0x56, + 0xfc, 0xff, 0x4f, 0x10, 0xeb, 0xea, 0xc7, 0x47, 0x10, 0x00, 0x00, 0xe9, + 0x77, 0xff, 0xfc, 0x74, 0x22, 0xdd, 0x26, 0xbf, 0x26, 0xdd, 0x26, 0x74, + 0x22, 0x05, 0x24, 0x74, 0x22, 0xdd, 0x26, 0xdd, 0x26, 0xdd, 0x26, 0xdd, + 0x26, 0xdd, 0x26, 0xdd, 0x26, 0xdd, 0x26, 0xdd, 0x26, 0xfc, 0x25, 0xdd, + 0x26, 0xdd, 0x26, 0x48, 0x24, 0xdd, 0x26, 0xdd, 0x26, 0xdd, 0x26, 0xdd, + 0x26, 0xc5, 0x24, 0xdd, 0x26, 0xdd, 0x26, 0xdd, 0x26, 0xdd, 0x26, 0xdd, + 0x26, 0xdd, 0x26, 0xdd, 0x26, 0xdd, 0x26, 0x74, 0x22, 0x5d, 0x25, 0x71, + 0x26, 0x12, 0x25, 0x74, 0x22, 0x05, 0x24, 0x74, 0x22, 0xdd, 0x26, 0x12, + 0x25, 0xdd, 0x26, 0xdd, 0x26, 0xdd, 0x26, 0xdd, 0x26, 0xdd, 0x26, 0x64, + 0x25, 0xfc, 0x25, 0xdd, 0x26, 0xdd, 0x26, 0x48, 0x24, 0xdd, 0x26, 0x12, + 0x25, 0xdd, 0x26, 0xdd, 0x26, 0xc5, 0x24, 0x56, 0x57, 0x55, 0x89, 0xe5, + 0x83, 0xec, 0x12, 0x50, 0x89, 0xd7, 0x89, 0xde, 0xc7, 0x47, 0x16, 0x00, + 0x00, 0x89, 0x46, 0xf8, 0x8b, 0x47, 0x16, 0x89, 0x47, 0x14, 0x89, 0x47, + 0x12, 0x89, 0x47, 0x10, 0x89, 0x47, 0x0e, 0x89, 0x47, 0x0c, 0x8a, 0x47, + 0x18, 0x8c, 0x5e, 0xfa, 0x3c, 0x69, 0x73, 0x39, 0x3c, 0x64, 0x75, 0x6a, + 0x8a, 0x44, 0x02, 0xa8, 0x80, 0x74, 0x61, 0x83, 0x05, 0x08, 0x8b, 0x1d, + 0x8b, 0x47, 0xfc, 0x89, 0x46, 0xf6, 0x8b, 0x47, 0xfa, 0x89, 0x46, 0xf4, + 0x8b, 0x47, 0xf8, 0x8b, 0x4f, 0xfe, 0x89, 0x46, 0xf2, 0xe9, 0xe5, 0x00, + 0x8b, 0x46, 0xec, 0x89, 0xf3, 0x89, 0xfa, 0xff, 0x46, 0xf8, 0xff, 0x16, + 0x82, 0x04, 0xe9, 0xb5, 0x01, 0x76, 0xc9, 0x3c, 0x78, 0x75, 0x23, 0x8a, + 0x44, 0x02, 0xa8, 0x80, 0x74, 0x30, 0x83, 0x05, 0x08, 0x8b, 0x1d, 0x8b, + 0x47, 0xfc, 0x89, 0x46, 0xf6, 0x8b, 0x47, 0xfa, 0x89, 0x46, 0xf4, 0x8b, + 0x47, 0xf8, 0x8b, 0x4f, 0xfe, 0x89, 0x46, 0xf2, 0xeb, 0x29, 0x3c, 0x75, + 0x74, 0xd9, 0x3c, 0x6f, 0x74, 0xd5, 0xeb, 0x1f, 0xeb, 0x65, 0x3c, 0x62, + 0x74, 0xcd, 0x3c, 0x58, 0xeb, 0xf2, 0xa8, 0x40, 0x74, 0x2a, 0x83, 0x05, + 0x04, 0x8b, 0x1d, 0x8b, 0x47, 0xfc, 0x89, 0x46, 0xfc, 0x8b, 0x47, 0xfe, + 0x89, 0x46, 0xfe, 0x8a, 0x44, 0x18, 0x2c, 0x41, 0xc7, 0x46, 0xf0, 0x0a, + 0x00, 0x3c, 0x37, 0x77, 0x51, 0x30, 0xe4, 0x89, 0xc3, 0xd1, 0xe3, 0x2e, + 0xff, 0xa7, 0xab, 0x21, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x47, 0xfe, + 0xc7, 0x46, 0xfe, 0x00, 0x00, 0x89, 0x46, 0xfc, 0xf6, 0x44, 0x02, 0x20, + 0x74, 0x07, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xeb, 0xca, 0xf6, 0x44, 0x02, + 0x10, 0x74, 0xc4, 0x8a, 0x46, 0xfc, 0x30, 0xe4, 0x89, 0x46, 0xfc, 0x30, + 0xc0, 0xeb, 0xb5, 0xa8, 0x40, 0x74, 0x16, 0x83, 0x05, 0x04, 0x8b, 0x1d, + 0x8b, 0x47, 0xfc, 0x89, 0x46, 0xfc, 0x8b, 0x47, 0xfe, 0x89, 0x46, 0xfe, + 0xeb, 0x23, 0xe9, 0xa4, 0x03, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x47, + 0xfe, 0x99, 0x89, 0x46, 0xfc, 0x8a, 0x44, 0x02, 0x89, 0x56, 0xfe, 0xa8, + 0x20, 0x74, 0x61, 0x8b, 0x46, 0xfc, 0x99, 0x89, 0x46, 0xfc, 0x89, 0x56, + 0xfe, 0x30, 0xc0, 0xf6, 0x44, 0x02, 0x80, 0x74, 0x59, 0x85, 0xc9, 0x7c, + 0x10, 0x75, 0x0a, 0x83, 0x7e, 0xf6, 0x00, 0x75, 0x04, 0x83, 0x7e, 0xf4, + 0x00, 0x84, 0xc0, 0x74, 0x5a, 0x8b, 0x44, 0x0c, 0x89, 0xc2, 0x8b, 0x5e, + 0xec, 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, 0x07, 0x2d, 0xf6, 0x44, + 0x02, 0x80, 0x74, 0x36, 0x31, 0xc0, 0x2b, 0x46, 0xf2, 0x89, 0x46, 0xf2, + 0xb8, 0x00, 0x00, 0x1b, 0x46, 0xf4, 0x89, 0x46, 0xf4, 0xb8, 0x00, 0x00, + 0x1b, 0x46, 0xf6, 0x89, 0x46, 0xf6, 0xb8, 0x00, 0x00, 0x19, 0xc8, 0x89, + 0xc1, 0xe9, 0x27, 0xff, 0xa8, 0x10, 0x74, 0xa5, 0x8a, 0x46, 0xfc, 0x98, + 0xeb, 0x98, 0x83, 0x7e, 0xfe, 0x00, 0x7c, 0xb5, 0xeb, 0xaf, 0xf7, 0x5e, + 0xfe, 0xf7, 0x5e, 0xfc, 0x83, 0x5e, 0xfe, 0x00, 0xe9, 0x08, 0xff, 0x8a, + 0x44, 0x02, 0xa8, 0x04, 0x74, 0x14, 0x8b, 0x44, 0x0c, 0x89, 0xc2, 0x8b, + 0x5e, 0xec, 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, 0x07, 0x2b, 0xe9, + 0xed, 0xfe, 0xa8, 0x02, 0x75, 0x03, 0xe9, 0xe6, 0xfe, 0x8b, 0x44, 0x0c, + 0x89, 0xc2, 0x8b, 0x5e, 0xec, 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, + 0x07, 0x20, 0xe9, 0xd2, 0xfe, 0xf6, 0x44, 0x02, 0x20, 0x75, 0x03, 0xe9, + 0x66, 0xfe, 0x83, 0x05, 0x04, 0x8b, 0x1d, 0x8b, 0x47, 0xfc, 0x89, 0xf2, + 0x89, 0x46, 0xfc, 0x8b, 0x47, 0xfe, 0x8b, 0x5e, 0xfc, 0x89, 0x46, 0xfe, + 0x89, 0xc1, 0x8b, 0x46, 0xec, 0xe8, 0x20, 0xfc, 0xbb, 0xff, 0xff, 0x8b, + 0x46, 0xec, 0x8c, 0xda, 0xe8, 0x39, 0xfb, 0x89, 0x44, 0x10, 0x89, 0xf0, + 0x8b, 0x56, 0xfa, 0xe8, 0xe9, 0xfc, 0x8b, 0x46, 0xf8, 0xe9, 0xd9, 0xfc, + 0x8b, 0x5e, 0xec, 0xc6, 0x07, 0x00, 0x8a, 0x44, 0x03, 0xa8, 0x04, 0x75, + 0x3f, 0xa8, 0x02, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x5f, 0xfe, 0x85, + 0xdb, 0x74, 0x06, 0x8c, 0x5e, 0xfa, 0x89, 0x5e, 0xf8, 0x80, 0x7c, 0x18, + 0x53, 0x75, 0x4e, 0xf6, 0x44, 0x02, 0x20, 0x74, 0x3a, 0x8b, 0x46, 0xf8, + 0x8b, 0x56, 0xfa, 0x8b, 0x5c, 0x08, 0xe8, 0xef, 0xfa, 0x89, 0x44, 0x10, + 0x83, 0x7c, 0x08, 0x00, 0x7c, 0xb0, 0x3b, 0x44, 0x08, 0x7e, 0xab, 0x8b, + 0x44, 0x08, 0xeb, 0xa3, 0x83, 0x05, 0x04, 0x8b, 0x1d, 0x8b, 0x47, 0xfe, + 0x8b, 0x7f, 0xfc, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xff, 0x74, 0xc2, 0x89, + 0x7e, 0xf8, 0x89, 0x46, 0xfa, 0xeb, 0xba, 0x8b, 0x46, 0xf8, 0x8b, 0x56, + 0xfa, 0x8b, 0x5c, 0x08, 0xe8, 0xd4, 0xfa, 0xeb, 0xc4, 0xf6, 0x44, 0x02, + 0x40, 0x75, 0xec, 0xeb, 0xb0, 0x8a, 0x44, 0x02, 0xa8, 0x01, 0x74, 0x41, + 0xa8, 0x80, 0x75, 0x03, 0xe9, 0x82, 0x00, 0x85, 0xc9, 0x75, 0x12, 0x83, + 0x7e, 0xf6, 0x00, 0x75, 0x0c, 0x83, 0x7e, 0xf4, 0x00, 0x75, 0x06, 0x83, + 0x7e, 0xf2, 0x00, 0x74, 0x24, 0x8b, 0x44, 0x0c, 0x89, 0xc2, 0x8b, 0x5e, + 0xec, 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, 0x07, 0x30, 0x8b, 0x44, + 0x0c, 0x8b, 0x5e, 0xec, 0x89, 0xc2, 0x01, 0xc3, 0x42, 0x8a, 0x44, 0x18, + 0x89, 0x54, 0x0c, 0x88, 0x07, 0xc7, 0x46, 0xf0, 0x10, 0x00, 0x83, 0x7c, + 0x08, 0xff, 0x74, 0x04, 0xc6, 0x44, 0x19, 0x20, 0x8b, 0x5e, 0xec, 0x03, + 0x5c, 0x0c, 0x8c, 0x5e, 0xfa, 0x89, 0x5e, 0xf8, 0xf6, 0x44, 0x02, 0x80, + 0x74, 0x3d, 0x83, 0x7c, 0x08, 0x00, 0x75, 0x39, 0x85, 0xc9, 0x75, 0x35, + 0x83, 0x7e, 0xf6, 0x00, 0x75, 0x2f, 0x83, 0x7e, 0xf4, 0x00, 0x75, 0x29, + 0x83, 0x7e, 0xf2, 0x00, 0x75, 0x23, 0x8e, 0x46, 0xfa, 0x31, 0xc0, 0x26, + 0xc6, 0x07, 0x00, 0xeb, 0x48, 0x8b, 0x46, 0xfe, 0x0b, 0x46, 0xfc, 0xeb, + 0x8a, 0xc7, 0x46, 0xf0, 0x02, 0x00, 0xeb, 0xae, 0xc7, 0x46, 0xf0, 0x08, + 0x00, 0xeb, 0xa7, 0xeb, 0x5c, 0xff, 0x76, 0xf0, 0x8b, 0x46, 0xec, 0x8b, + 0x5e, 0xf6, 0x03, 0x44, 0x0c, 0x8b, 0x56, 0xf2, 0x50, 0x89, 0xc8, 0x8b, + 0x4e, 0xf4, 0xe8, 0xe8, 0x0c, 0x80, 0x7c, 0x18, 0x58, 0x75, 0x06, 0x8b, + 0x46, 0xec, 0xe8, 0xf3, 0x0d, 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xf8, 0x8b, + 0x56, 0xfa, 0xe8, 0xd3, 0xf9, 0x89, 0x44, 0x10, 0x89, 0xc2, 0x3b, 0x44, + 0x08, 0x7c, 0x4a, 0xf6, 0x44, 0x02, 0x01, 0x75, 0x03, 0xe9, 0x8a, 0xfe, + 0x83, 0x7e, 0xf0, 0x0a, 0x7d, 0xf7, 0x85, 0xc0, 0x74, 0x09, 0xc4, 0x5e, + 0xf8, 0x26, 0x80, 0x3f, 0x30, 0x74, 0xea, 0xff, 0x44, 0x0e, 0xe9, 0x71, + 0xfe, 0x83, 0x7c, 0x08, 0x00, 0x75, 0x0e, 0x8b, 0x46, 0xfe, 0x0b, 0x46, + 0xfc, 0x75, 0x06, 0x8e, 0x46, 0xfa, 0xe9, 0x72, 0xff, 0x8b, 0x5e, 0xec, + 0x8b, 0x4e, 0xf0, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0x03, 0x5c, 0x0c, + 0xe8, 0xb5, 0x0d, 0xeb, 0x94, 0x8b, 0x44, 0x08, 0x29, 0xd0, 0x89, 0x44, + 0x0e, 0xe9, 0x3e, 0xfe, 0x83, 0x7c, 0x06, 0x00, 0x75, 0x0b, 0xf6, 0x44, + 0x03, 0x04, 0x74, 0x58, 0xc7, 0x44, 0x06, 0x09, 0x00, 0x80, 0x64, 0x02, + 0xf9, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x4f, 0xfe, 0xf6, 0x44, 0x03, + 0x04, 0x74, 0x48, 0x83, 0xc3, 0x02, 0x89, 0x1d, 0x8b, 0x56, 0xec, 0x8b, + 0x47, 0xfe, 0xbb, 0x04, 0x00, 0xe8, 0xc3, 0xf9, 0x8b, 0x5e, 0xec, 0x89, + 0xc8, 0x8d, 0x57, 0x05, 0xc6, 0x47, 0x04, 0x3a, 0xbb, 0x04, 0x00, 0xe8, + 0xb1, 0xf9, 0x80, 0x7c, 0x18, 0x50, 0x75, 0x06, 0x8b, 0x46, 0xec, 0xe8, + 0x36, 0x0d, 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xf8, 0x8b, 0x56, 0xfa, 0xe8, + 0x16, 0xf9, 0x89, 0x44, 0x0c, 0xe9, 0xda, 0xfd, 0xc7, 0x44, 0x06, 0x04, + 0x00, 0xeb, 0xa6, 0xbb, 0x04, 0x00, 0x8b, 0x56, 0xec, 0x89, 0xc8, 0xeb, + 0xce, 0xc7, 0x44, 0x10, 0x01, 0x00, 0xf6, 0x44, 0x02, 0x40, 0x75, 0x10, + 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8a, 0x47, 0xfe, 0x8b, 0x5e, 0xec, 0x88, + 0x07, 0xe9, 0xae, 0xfd, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8d, 0x46, 0xee, + 0x8b, 0x57, 0xfe, 0xe8, 0x30, 0x0b, 0x3d, 0xff, 0xff, 0x75, 0x03, 0xe9, + 0x98, 0xfd, 0x8b, 0x5e, 0xec, 0x8a, 0x46, 0xee, 0x88, 0x07, 0x30, 0xe4, + 0xe8, 0x68, 0x0d, 0x85, 0xc0, 0x74, 0xec, 0x8a, 0x46, 0xef, 0x88, 0x47, + 0x01, 0xff, 0x44, 0x0c, 0xe9, 0x7b, 0xfd, 0x83, 0x05, 0x02, 0x8b, 0x1d, + 0x8b, 0x46, 0xec, 0x8b, 0x57, 0xfe, 0xe8, 0xfd, 0x0a, 0x3d, 0xff, 0xff, + 0x74, 0x03, 0xe9, 0x62, 0xfd, 0xc7, 0x44, 0x10, 0x00, 0x00, 0xe9, 0x5d, + 0xfd, 0xc7, 0x44, 0x06, 0x00, 0x00, 0x8b, 0x5e, 0xec, 0x8a, 0x44, 0x18, + 0x88, 0x07, 0xc7, 0x44, 0x0c, 0x01, 0x00, 0xe9, 0x48, 0xfd, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x6a, 0x53, 0x89, 0xcf, 0xc6, 0x46, 0xfe, + 0x00, 0xc7, 0x46, 0xe0, 0x00, 0x00, 0xc7, 0x46, 0xe2, 0xc8, 0x00, 0xc7, + 0x46, 0xe8, 0x00, 0x00, 0x89, 0x46, 0xde, 0x89, 0x56, 0xfc, 0x8b, 0x5e, + 0xfc, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x58, 0x8d, 0x4f, 0x01, 0x3c, 0x25, + 0x74, 0x0d, 0x98, 0x89, 0xc2, 0x8d, 0x46, 0xde, 0x89, 0x4e, 0xfc, 0xff, + 0xd7, 0xeb, 0xe3, 0x8d, 0x5e, 0xde, 0x8d, 0x56, 0x94, 0x89, 0xc8, 0xe8, + 0xe7, 0xf6, 0x89, 0xc3, 0x8a, 0x07, 0x43, 0x88, 0x46, 0xf6, 0x89, 0x5e, + 0xfc, 0x84, 0xc0, 0x74, 0x2a, 0x3c, 0x6e, 0x75, 0x5c, 0x8a, 0x46, 0xe1, + 0xa8, 0x04, 0x74, 0x22, 0x83, 0x46, 0x94, 0x04, 0x8b, 0x5e, 0x94, 0x8b, + 0x76, 0x94, 0x8b, 0x5f, 0xfc, 0x8e, 0x44, 0xfe, 0x8a, 0x46, 0xe0, 0xa8, + 0x10, 0x74, 0x1f, 0x8a, 0x46, 0xe8, 0x26, 0x88, 0x07, 0xeb, 0x9f, 0xe9, + 0x76, 0x01, 0x8b, 0x5e, 0x94, 0x83, 0xc3, 0x02, 0xa8, 0x02, 0x8c, 0xd8, + 0x89, 0x5e, 0x94, 0x8e, 0xc0, 0x8b, 0x5f, 0xfe, 0xeb, 0xda, 0xa8, 0x20, + 0x74, 0x09, 0x8b, 0x46, 0xe8, 0x26, 0x89, 0x07, 0xe9, 0x7b, 0xff, 0xa8, + 0x40, 0x74, 0x10, 0x8b, 0x46, 0xe8, 0x99, 0x26, 0x89, 0x07, 0x26, 0x89, + 0x57, 0x02, 0xe9, 0x69, 0xff, 0xeb, 0x1f, 0xa8, 0x80, 0x74, 0xdf, 0x8b, + 0x46, 0xe8, 0x99, 0x26, 0x89, 0x07, 0xb1, 0x0f, 0x26, 0x89, 0x57, 0x02, + 0x26, 0xd3, 0xfa, 0x26, 0x89, 0x57, 0x04, 0x26, 0x89, 0x57, 0x06, 0xe9, + 0x48, 0xff, 0x8d, 0x4e, 0xfe, 0x8d, 0x5e, 0xde, 0x8d, 0x56, 0x94, 0x8d, + 0x46, 0x96, 0xe8, 0x3e, 0xfa, 0x89, 0xc6, 0x8b, 0x46, 0xea, 0x03, 0x46, + 0xec, 0x03, 0x46, 0xee, 0x03, 0x46, 0xf0, 0x03, 0x46, 0xf2, 0x03, 0x46, + 0xf4, 0x89, 0x56, 0xfa, 0x29, 0x46, 0xe4, 0xf6, 0x46, 0xe0, 0x08, 0x74, + 0x19, 0x8d, 0x5e, 0x96, 0x83, 0x7e, 0xea, 0x00, 0x7e, 0x29, 0x8a, 0x07, + 0x98, 0x89, 0xc2, 0x8d, 0x46, 0xde, 0x43, 0xff, 0xd7, 0xff, 0x4e, 0xea, + 0xeb, 0xea, 0x80, 0x7e, 0xf7, 0x20, 0x75, 0xe1, 0x83, 0x7e, 0xe4, 0x00, + 0x7e, 0xdb, 0xba, 0x20, 0x00, 0x8d, 0x46, 0xde, 0xff, 0xd7, 0xff, 0x4e, + 0xe4, 0xeb, 0xed, 0x83, 0x7e, 0xec, 0x00, 0x7e, 0x0d, 0xba, 0x30, 0x00, + 0x8d, 0x46, 0xde, 0xff, 0xd7, 0xff, 0x4e, 0xec, 0xeb, 0xed, 0x8a, 0x46, + 0xf6, 0x3c, 0x73, 0x75, 0x40, 0xf6, 0x46, 0xe0, 0x40, 0x75, 0x1a, 0x83, + 0x7e, 0xee, 0x00, 0x7e, 0x21, 0x8e, 0x46, 0xfa, 0x26, 0x8a, 0x04, 0x98, + 0x89, 0xc2, 0x8d, 0x46, 0xde, 0x46, 0xff, 0xd7, 0xff, 0x4e, 0xee, 0xeb, + 0xe6, 0x8d, 0x5e, 0xde, 0x8b, 0x56, 0xfa, 0x89, 0xf9, 0x89, 0xf0, 0xe8, + 0xe2, 0xf8, 0x83, 0x7e, 0xf0, 0x00, 0x7e, 0x2b, 0xba, 0x30, 0x00, 0x8d, + 0x46, 0xde, 0xff, 0xd7, 0xff, 0x4e, 0xf0, 0xeb, 0xed, 0x3c, 0x53, 0x74, + 0xdc, 0x83, 0x7e, 0xee, 0x00, 0x7e, 0xe3, 0x8e, 0x46, 0xfa, 0x26, 0x8a, + 0x04, 0x98, 0x89, 0xc2, 0x8d, 0x46, 0xde, 0x46, 0xff, 0xd7, 0xff, 0x4e, + 0xee, 0xeb, 0xe6, 0x83, 0x7e, 0xf2, 0x00, 0x7e, 0x14, 0x8e, 0x46, 0xfa, + 0x26, 0x8a, 0x04, 0x98, 0x89, 0xc2, 0x8d, 0x46, 0xde, 0x46, 0xff, 0xd7, + 0xff, 0x4e, 0xf2, 0xeb, 0xe6, 0x83, 0x7e, 0xf4, 0x00, 0x7e, 0x0d, 0xba, + 0x30, 0x00, 0x8d, 0x46, 0xde, 0xff, 0xd7, 0xff, 0x4e, 0xf4, 0xeb, 0xed, + 0xf6, 0x46, 0xe0, 0x08, 0x75, 0x03, 0xe9, 0x39, 0xfe, 0x83, 0x7e, 0xe4, + 0x00, 0x7e, 0xf7, 0xba, 0x20, 0x00, 0x8d, 0x46, 0xde, 0xff, 0xd7, 0xff, + 0x4e, 0xe4, 0xeb, 0xed, 0x8b, 0x46, 0xe8, 0xe9, 0x2b, 0xf8, 0x53, 0x51, + 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc6, 0xc7, + 0x46, 0xfe, 0x00, 0x00, 0xf6, 0x44, 0x07, 0x10, 0x74, 0x03, 0xe9, 0x6c, + 0x00, 0x8b, 0x5c, 0x04, 0x83, 0x7f, 0x04, 0x00, 0x74, 0x3b, 0x80, 0x64, + 0x06, 0xef, 0xf6, 0x44, 0x07, 0x20, 0x75, 0x31, 0x8b, 0x44, 0x02, 0x99, + 0x89, 0xd3, 0x09, 0xc3, 0x74, 0x14, 0x89, 0xd1, 0x89, 0xc3, 0xba, 0x01, + 0x00, 0xf7, 0xd9, 0x8b, 0x44, 0x08, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xe8, + 0x67, 0xec, 0x83, 0xfa, 0xff, 0x75, 0x0e, 0x3d, 0xff, 0xff, 0x75, 0x09, + 0xc7, 0x46, 0xfe, 0xff, 0xff, 0x80, 0x4c, 0x06, 0x20, 0x8b, 0x5c, 0x04, + 0x8b, 0x47, 0x04, 0xc7, 0x44, 0x02, 0x00, 0x00, 0x89, 0x04, 0x83, 0x7e, + 0xfe, 0x00, 0x75, 0x09, 0x8b, 0x5c, 0x04, 0xf6, 0x47, 0x08, 0x01, 0x75, + 0x61, 0x8b, 0x46, 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, + 0xc3, 0x80, 0x64, 0x07, 0xef, 0xf6, 0x44, 0x06, 0x02, 0x74, 0xce, 0x8b, + 0x7c, 0x04, 0x8b, 0x45, 0x04, 0x85, 0xc0, 0x74, 0xc4, 0x89, 0xc7, 0x8b, + 0x4c, 0x02, 0x85, 0xc9, 0x74, 0xbb, 0x83, 0x7e, 0xfe, 0x00, 0x75, 0xb5, + 0x89, 0xcb, 0x89, 0xfa, 0x8b, 0x44, 0x08, 0xe8, 0x82, 0x0a, 0x89, 0xc2, + 0x3d, 0xff, 0xff, 0x75, 0x0d, 0x89, 0x46, 0xfe, 0x80, 0x4c, 0x06, 0x20, + 0x01, 0xd7, 0x29, 0xd1, 0xeb, 0xd8, 0x85, 0xc0, 0x75, 0xf6, 0xe8, 0x46, + 0xe7, 0x89, 0xc3, 0xc7, 0x07, 0x0c, 0x00, 0xc7, 0x46, 0xfe, 0xff, 0xff, + 0xeb, 0xe2, 0x8b, 0x44, 0x08, 0xe8, 0xad, 0x0a, 0x3d, 0xff, 0xff, 0x75, + 0x94, 0x89, 0x46, 0xfe, 0xeb, 0x8f, 0x53, 0x89, 0xd3, 0xf6, 0xc4, 0xff, + 0x74, 0x09, 0x88, 0x27, 0x88, 0x47, 0x01, 0x89, 0xd8, 0x5b, 0xc3, 0x88, + 0x07, 0xeb, 0xf8, 0x53, 0x89, 0xc3, 0x8a, 0x07, 0x30, 0xe4, 0xe8, 0x16, + 0x0a, 0x85, 0xc0, 0x74, 0x05, 0xb8, 0x02, 0x00, 0x5b, 0xc3, 0xb8, 0x01, + 0x00, 0x5b, 0xc3, 0x53, 0x89, 0xc3, 0x8a, 0x07, 0x84, 0xc0, 0x75, 0x05, + 0xb8, 0x01, 0x00, 0x5b, 0xc3, 0x30, 0xe4, 0xe8, 0xf5, 0x09, 0x85, 0xc0, + 0x74, 0x0b, 0x80, 0x7f, 0x01, 0x00, 0x75, 0x05, 0xb8, 0x02, 0x00, 0x5b, + 0xc3, 0x31, 0xc0, 0x5b, 0xc3, 0x53, 0x56, 0x89, 0xc3, 0x89, 0xd6, 0x8a, + 0x07, 0x30, 0xe4, 0x89, 0xc2, 0x8a, 0x04, 0x29, 0xc2, 0x74, 0x05, 0x89, + 0xd0, 0x5e, 0x5b, 0xc3, 0x8a, 0x07, 0xe8, 0xc6, 0x09, 0x85, 0xc0, 0x74, + 0xf2, 0x8a, 0x47, 0x01, 0x30, 0xe4, 0x89, 0xc2, 0x8a, 0x44, 0x01, 0x29, + 0xc2, 0xeb, 0xe4, 0x53, 0x89, 0xc3, 0x8a, 0x07, 0x30, 0xe4, 0xe8, 0xaa, + 0x09, 0x85, 0xc0, 0x74, 0x0d, 0x80, 0x7f, 0x01, 0x00, 0x74, 0x07, 0x83, + 0xc3, 0x02, 0x89, 0xd8, 0x5b, 0xc3, 0x43, 0xeb, 0xf9, 0x53, 0x52, 0x89, + 0xc3, 0x8a, 0x17, 0x30, 0xf6, 0x89, 0xd0, 0xe8, 0x89, 0x09, 0x85, 0xc0, + 0x74, 0x07, 0x88, 0xd6, 0x8a, 0x5f, 0x01, 0x88, 0xda, 0x89, 0xd0, 0x5a, + 0x5b, 0xc3, 0x51, 0x57, 0x89, 0xc7, 0x8c, 0xd8, 0x8e, 0xc0, 0x83, 0xc9, + 0xff, 0x33, 0xc0, 0xf2, 0xae, 0xf7, 0xd1, 0x49, 0x89, 0xc8, 0x5f, 0x59, + 0xc3, 0x56, 0x57, 0x89, 0xd6, 0x89, 0xc7, 0x57, 0xf7, 0xc6, 0x01, 0x00, + 0x74, 0x08, 0xac, 0x88, 0x05, 0x47, 0x3c, 0x00, 0x74, 0x26, 0x8b, 0x04, + 0x84, 0xc0, 0x74, 0x1e, 0x89, 0x05, 0x83, 0xc7, 0x02, 0x84, 0xe4, 0x74, + 0x17, 0x8b, 0x44, 0x02, 0x84, 0xc0, 0x74, 0x0e, 0x89, 0x05, 0x83, 0xc6, + 0x04, 0x83, 0xc7, 0x02, 0x84, 0xe4, 0x75, 0xde, 0x74, 0x02, 0x88, 0x05, + 0x5f, 0x89, 0xf8, 0x5f, 0x5e, 0xc3, 0x56, 0x89, 0xc6, 0xb4, 0x47, 0xcd, + 0x21, 0xe8, 0xee, 0x00, 0x5e, 0xc3, 0x53, 0x52, 0x56, 0x85, 0xc0, 0x74, + 0x55, 0x8b, 0x36, 0x42, 0x36, 0x85, 0xf6, 0x74, 0x34, 0x39, 0xc6, 0x77, + 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x43, 0x89, 0xf3, 0x8b, + 0x74, 0x02, 0x85, 0xf6, 0x74, 0x0c, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, + 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x2e, 0x8b, 0x77, 0x04, 0x85, 0xf6, 0x74, + 0x0c, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, + 0x51, 0x8b, 0x36, 0x78, 0x04, 0x85, 0xf6, 0x75, 0x15, 0x8b, 0x36, 0x76, + 0x04, 0x85, 0xf6, 0x74, 0x09, 0x39, 0xc6, 0x76, 0x5a, 0x8b, 0x74, 0x04, + 0xeb, 0xf3, 0xeb, 0x4f, 0xeb, 0x34, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, + 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x28, 0x89, 0xf3, 0x8b, 0x74, 0x02, 0x85, + 0xf6, 0x74, 0x0c, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, + 0xd0, 0x72, 0x13, 0x8b, 0x77, 0x04, 0x85, 0xf6, 0x74, 0xc3, 0x39, 0xc6, + 0x77, 0xbf, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x73, 0xb7, 0x8c, 0xda, + 0x89, 0xf3, 0xe8, 0xeb, 0x02, 0x89, 0x36, 0x42, 0x36, 0x3b, 0x36, 0x78, + 0x04, 0x73, 0x08, 0xa1, 0x7a, 0x04, 0x3b, 0x44, 0x0a, 0x72, 0x0e, 0x5e, + 0x5a, 0x5b, 0xc3, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0xdb, 0xeb, + 0x9c, 0x8b, 0x44, 0x0a, 0xa3, 0x7a, 0x04, 0xeb, 0xea, 0x51, 0x56, 0x57, + 0x89, 0xd6, 0x85, 0xdb, 0x75, 0x04, 0x5f, 0x5e, 0x59, 0xc3, 0x8c, 0xda, + 0x89, 0xd9, 0x89, 0xc7, 0x8e, 0xc2, 0x57, 0xac, 0xaa, 0x84, 0xc0, 0xe0, + 0xfa, 0x33, 0xc0, 0xd1, 0xe9, 0xf3, 0xab, 0x13, 0xc9, 0xf3, 0xaa, 0x58, + 0xeb, 0xe0, 0x73, 0x07, 0x50, 0xe8, 0x0e, 0xea, 0x58, 0xeb, 0x02, 0x2b, + 0xc0, 0xc3, 0x73, 0x05, 0xe8, 0x03, 0xea, 0xeb, 0x02, 0x2b, 0xc0, 0xc3, + 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc6, + 0xba, 0x01, 0x00, 0x31, 0xdb, 0x31, 0xc9, 0xe8, 0x8f, 0xe9, 0x89, 0x46, + 0xfe, 0x89, 0xd7, 0x83, 0xfa, 0xff, 0x75, 0x12, 0x3d, 0xff, 0xff, 0x75, + 0x0d, 0xb8, 0xff, 0xff, 0x89, 0xc2, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, + 0x5b, 0xc3, 0xba, 0x02, 0x00, 0x89, 0xf0, 0x31, 0xdb, 0x31, 0xc9, 0xe8, + 0x67, 0xe9, 0x8b, 0x5e, 0xfe, 0x89, 0x46, 0xfa, 0x89, 0x56, 0xfc, 0x89, + 0xf9, 0x89, 0xf0, 0x31, 0xd2, 0xe8, 0x55, 0xe9, 0x8b, 0x46, 0xfa, 0x8b, + 0x56, 0xfc, 0xeb, 0xd2, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x0a, 0x89, 0xc6, 0x8d, 0x5e, 0xfa, 0x8d, 0x56, 0xf6, 0xe8, 0x17, + 0x08, 0x8b, 0x5e, 0xfa, 0x8b, 0x4e, 0xfc, 0x89, 0x46, 0xfe, 0x56, 0x31, + 0xc0, 0x89, 0xd7, 0x50, 0x8b, 0x56, 0xf8, 0x50, 0x8b, 0x46, 0xf6, 0xe8, + 0xd8, 0x09, 0xe8, 0x0a, 0x10, 0x8b, 0x4e, 0xfe, 0x89, 0xf0, 0x03, 0x0e, + 0xb0, 0x05, 0x8b, 0x1e, 0xb2, 0x05, 0x11, 0xfb, 0xe8, 0x10, 0x11, 0x85, + 0xc0, 0x74, 0x08, 0xa1, 0xb6, 0x05, 0x99, 0x29, 0xc1, 0x19, 0xd3, 0x8b, + 0x46, 0xf8, 0x3d, 0x01, 0x00, 0x7f, 0x3d, 0x75, 0x07, 0x81, 0x7e, 0xf6, + 0x0f, 0x26, 0x73, 0x34, 0x85, 0xdb, 0x7f, 0x02, 0x75, 0x0e, 0x3d, 0x01, + 0x00, 0x7f, 0x29, 0x75, 0x07, 0x81, 0x7e, 0xf6, 0x0c, 0x26, 0x73, 0x20, + 0x85, 0xdb, 0x7c, 0x0c, 0x89, 0xc8, 0x89, 0xda, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0x59, 0x5b, 0xc3, 0x8b, 0x46, 0xf8, 0x85, 0xc0, 0x7c, 0x09, 0x75, + 0xeb, 0x81, 0x7e, 0xf6, 0xdf, 0x63, 0x77, 0xe4, 0xb9, 0xff, 0xff, 0x89, + 0xcb, 0xeb, 0xdd, 0x80, 0x3e, 0x7c, 0x04, 0x00, 0x75, 0x03, 0x31, 0xc0, + 0xc3, 0x52, 0x50, 0xcc, 0xeb, 0x06, 0x57, 0x56, 0x49, 0x44, 0x45, 0x4f, + 0xb8, 0x01, 0x00, 0x83, 0xc4, 0x04, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x89, + 0xc1, 0x89, 0xd3, 0x85, 0xc0, 0x74, 0x32, 0x85, 0xd2, 0x74, 0x35, 0xe8, + 0xfe, 0x12, 0x89, 0xc6, 0x89, 0xc8, 0xe8, 0x06, 0x13, 0x89, 0xc7, 0x85, + 0xc0, 0x75, 0x17, 0x89, 0xd8, 0xe8, 0xd5, 0xed, 0x89, 0xc7, 0x85, 0xc0, + 0x74, 0x21, 0x89, 0xf3, 0x89, 0xca, 0xe8, 0x23, 0x00, 0x89, 0xc8, 0xe8, + 0xb8, 0xfd, 0x89, 0xf8, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x89, 0xd0, 0xe8, + 0xb7, 0xed, 0xeb, 0xf4, 0xe8, 0xa7, 0xfd, 0x31, 0xc0, 0xeb, 0xed, 0x89, + 0xf2, 0x89, 0xc8, 0xe8, 0xcd, 0x12, 0xeb, 0xe2, 0x51, 0x56, 0x57, 0x89, + 0xd9, 0x89, 0xd6, 0x89, 0xc7, 0x57, 0x8c, 0xd8, 0x8e, 0xc0, 0xd1, 0xe9, + 0xf3, 0xa5, 0x13, 0xc9, 0xf3, 0xa4, 0x5f, 0x89, 0xf8, 0x5f, 0x5e, 0x59, + 0xc3, 0xc3, 0x89, 0xc3, 0xff, 0x16, 0x7e, 0x04, 0xba, 0xff, 0x00, 0xb8, + 0x10, 0x00, 0xe8, 0x77, 0xeb, 0xff, 0x16, 0x7e, 0x04, 0xff, 0x16, 0x80, + 0x04, 0x89, 0xd8, 0xe9, 0x0a, 0xe0, 0x89, 0xc2, 0xff, 0x16, 0x7e, 0x04, + 0xff, 0x16, 0x80, 0x04, 0x89, 0xd0, 0xe9, 0xfb, 0xdf, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x51, 0x56, 0x57, 0x1e, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xde, + 0xc7, 0x46, 0xfe, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x6c, 0x00, + 0x89, 0xc7, 0x83, 0xc7, 0x03, 0x83, 0xe7, 0xfe, 0x39, 0xc7, 0x72, 0x60, + 0x8e, 0xda, 0x8b, 0x44, 0x0a, 0x83, 0xff, 0x06, 0x73, 0x03, 0xbf, 0x06, + 0x00, 0x39, 0xc7, 0x77, 0x4f, 0x8e, 0xda, 0x8b, 0x4c, 0x08, 0x8b, 0x5c, + 0x06, 0x39, 0xcf, 0x76, 0x50, 0x8e, 0xda, 0x8b, 0x07, 0x39, 0xc7, 0x77, + 0x4f, 0x89, 0x4c, 0x08, 0x29, 0xf8, 0xff, 0x44, 0x0c, 0x3d, 0x06, 0x00, + 0x72, 0x5e, 0x89, 0xd9, 0x01, 0xf9, 0x89, 0x4c, 0x06, 0x89, 0xce, 0x89, + 0x04, 0x89, 0x3f, 0x89, 0xcf, 0x8b, 0x77, 0x02, 0x89, 0x75, 0x02, 0x8b, + 0x47, 0x04, 0x89, 0x45, 0x04, 0x89, 0x4c, 0x04, 0x89, 0xc6, 0x89, 0x4c, + 0x02, 0x8e, 0xda, 0x80, 0x0f, 0x01, 0x83, 0xc3, 0x02, 0x89, 0x5e, 0xfe, + 0x8b, 0x56, 0xfe, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x1f, 0x5f, 0x5e, 0x59, + 0xc3, 0x8b, 0x5c, 0x14, 0x31, 0xc9, 0xeb, 0xa9, 0x39, 0xc1, 0x73, 0x02, + 0x89, 0xc1, 0x89, 0xf0, 0x8e, 0xda, 0x05, 0x10, 0x00, 0x8b, 0x5f, 0x04, + 0x39, 0xc3, 0x75, 0x95, 0x8b, 0x56, 0xfe, 0x89, 0x4c, 0x0a, 0xeb, 0xd3, + 0xff, 0x4c, 0x0e, 0x8b, 0x7f, 0x02, 0x89, 0x7c, 0x06, 0x8b, 0x77, 0x04, + 0x89, 0x75, 0x04, 0x89, 0x7c, 0x02, 0xeb, 0xb1, 0x51, 0x56, 0x57, 0x1e, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xd1, 0x89, 0x5e, 0xfe, 0x85, + 0xc0, 0x75, 0x03, 0xe9, 0x84, 0x00, 0x89, 0xc6, 0x8e, 0xda, 0x83, 0xee, + 0x02, 0xf6, 0x04, 0x01, 0x74, 0xf1, 0x8b, 0x04, 0x89, 0xf3, 0x24, 0xfe, + 0x01, 0xc3, 0xf6, 0x07, 0x01, 0x74, 0x03, 0xe9, 0x7e, 0x00, 0x03, 0x07, + 0x8b, 0x7e, 0xfe, 0x89, 0x04, 0x3b, 0x5d, 0x06, 0x75, 0x03, 0x89, 0x75, + 0x06, 0x8e, 0xd9, 0x8b, 0x7f, 0x02, 0x8b, 0x5f, 0x04, 0x89, 0x5d, 0x04, + 0x89, 0x7f, 0x02, 0x8b, 0x7e, 0xfe, 0xff, 0x4d, 0x0e, 0x8e, 0xd9, 0x8b, + 0x7f, 0x02, 0x89, 0xfa, 0x8b, 0x04, 0x03, 0x15, 0x89, 0x7e, 0xfc, 0x39, + 0xd6, 0x75, 0x3b, 0x89, 0xfb, 0x03, 0x07, 0x89, 0x07, 0x8b, 0x5e, 0xfe, + 0x3b, 0x57, 0x06, 0x75, 0x03, 0x89, 0x7f, 0x06, 0x8b, 0x76, 0xfc, 0x8b, + 0x5e, 0xfe, 0x8e, 0xd9, 0xff, 0x4f, 0x0c, 0x3b, 0x77, 0x06, 0x73, 0x08, + 0x3b, 0x47, 0x08, 0x76, 0x03, 0x89, 0x47, 0x08, 0x8b, 0x5e, 0xfe, 0x8e, + 0xd9, 0x3b, 0x47, 0x0a, 0x77, 0x0b, 0x89, 0xec, 0x5d, 0x1f, 0x5f, 0x5e, + 0x59, 0xc3, 0xe9, 0xbd, 0x00, 0x89, 0x47, 0x0a, 0x89, 0xec, 0x5d, 0x1f, + 0x5f, 0x5e, 0x59, 0xc3, 0x8b, 0x5e, 0xfe, 0x89, 0x04, 0x8b, 0x5f, 0x06, + 0x39, 0xde, 0x72, 0x03, 0xe9, 0x6c, 0x00, 0x3b, 0x77, 0x02, 0x77, 0x91, + 0x8b, 0x5e, 0xfe, 0x8b, 0x5f, 0x14, 0x39, 0xde, 0x72, 0x87, 0x8b, 0x5e, + 0xfe, 0x8e, 0xd9, 0x8b, 0x5f, 0x0e, 0x89, 0xd8, 0x8b, 0x7e, 0xfe, 0x40, + 0x31, 0xd2, 0x89, 0x46, 0xfa, 0x8b, 0x45, 0x0c, 0xf7, 0x76, 0xfa, 0x39, + 0xd8, 0x73, 0x18, 0x8b, 0x55, 0x0c, 0x29, 0xda, 0xd1, 0xe0, 0x39, 0xd3, + 0x73, 0x4e, 0x8e, 0xd9, 0x8b, 0x1c, 0x8e, 0xd9, 0x01, 0xf3, 0x83, 0x3f, + 0xff, 0x75, 0x46, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0x8b, 0x5f, 0x06, 0x39, + 0xde, 0x72, 0x4b, 0x8e, 0xd9, 0x39, 0xde, 0x73, 0x03, 0xe9, 0x3d, 0xff, + 0x8b, 0x5f, 0x04, 0x39, 0xde, 0x72, 0xf6, 0x8b, 0x5f, 0x04, 0x39, 0xde, + 0x72, 0xef, 0x8b, 0x5f, 0x04, 0xeb, 0xe6, 0x8b, 0x5f, 0x04, 0x39, 0xde, + 0x72, 0xe3, 0x8b, 0x7e, 0xfe, 0x83, 0xc7, 0x10, 0x8b, 0x45, 0x02, 0x89, + 0xfb, 0x39, 0xc6, 0x76, 0x8d, 0xe9, 0x11, 0xff, 0xb8, 0xff, 0xff, 0xeb, + 0xad, 0xf6, 0x07, 0x01, 0x74, 0xc7, 0x8b, 0x17, 0x80, 0xe2, 0xfe, 0x01, + 0xd3, 0x48, 0x74, 0xab, 0xeb, 0xa4, 0x8b, 0x5e, 0xfe, 0x8b, 0x5f, 0x14, + 0xeb, 0xad, 0x8b, 0x7e, 0xfe, 0xff, 0x45, 0x0e, 0x8b, 0x7e, 0xfc, 0x89, + 0x5c, 0x04, 0x89, 0x7c, 0x02, 0x89, 0x75, 0x04, 0x89, 0x77, 0x02, 0xe9, + 0x01, 0xff, 0x31, 0xc0, 0xc3, 0x53, 0x56, 0x57, 0x89, 0xc6, 0x8b, 0x1e, + 0x76, 0x04, 0x31, 0xff, 0x85, 0xdb, 0x74, 0x0e, 0x39, 0xde, 0x72, 0x07, + 0x89, 0xdf, 0x8b, 0x5f, 0x04, 0xeb, 0xf1, 0x89, 0x77, 0x02, 0x89, 0x7c, + 0x02, 0x89, 0x5c, 0x04, 0x85, 0xff, 0x74, 0x39, 0x89, 0x75, 0x04, 0xc7, + 0x44, 0x10, 0x00, 0x00, 0xc7, 0x44, 0x08, 0x00, 0x00, 0xc7, 0x44, 0x0c, + 0x00, 0x00, 0x8d, 0x44, 0x10, 0xc7, 0x44, 0x0e, 0x00, 0x00, 0x89, 0x44, + 0x12, 0x8b, 0x1c, 0x89, 0x44, 0x14, 0x83, 0xeb, 0x16, 0x89, 0x44, 0x06, + 0x89, 0x5c, 0x16, 0x01, 0xf3, 0x8d, 0x44, 0x16, 0xc7, 0x47, 0x16, 0xff, + 0xff, 0x5f, 0x5e, 0x5b, 0xc3, 0x89, 0x36, 0x76, 0x04, 0xeb, 0xc4, 0x53, + 0xa1, 0x76, 0x04, 0x85, 0xc0, 0x74, 0x14, 0x89, 0xc3, 0x8b, 0x5f, 0x12, + 0x8b, 0x07, 0x01, 0xd8, 0x05, 0x02, 0x00, 0x3b, 0x06, 0x4a, 0x04, 0x75, + 0x04, 0x8b, 0x07, 0x5b, 0xc3, 0x31, 0xc0, 0x5b, 0xc3, 0x53, 0x52, 0x89, + 0xc3, 0x8b, 0x07, 0x89, 0xc2, 0x83, 0xc2, 0x03, 0x80, 0xe2, 0xfe, 0x39, + 0xc2, 0x73, 0x05, 0x31, 0xc0, 0x5a, 0x5b, 0xc3, 0xe8, 0xc4, 0xff, 0x39, + 0xd0, 0x72, 0x23, 0x31, 0xd2, 0x89, 0xd0, 0x83, 0xc2, 0x1e, 0x39, 0xc2, + 0x72, 0xe9, 0xa1, 0xde, 0x05, 0x39, 0xc2, 0x73, 0x05, 0x89, 0xc2, 0x80, + 0xe2, 0xfe, 0x89, 0x17, 0x85, 0xd2, 0x74, 0xd7, 0xb8, 0x01, 0x00, 0x5a, + 0x5b, 0xc3, 0x29, 0xc2, 0xeb, 0xdb, 0x53, 0x56, 0x57, 0x55, 0x89, 0xe5, + 0x50, 0xa1, 0xe0, 0x05, 0x85, 0xc0, 0x74, 0x09, 0x83, 0x3e, 0x4a, 0x04, + 0xfe, 0x75, 0x08, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0xe9, 0x72, 0xff, 0x8d, + 0x46, 0xfe, 0xe8, 0x98, 0xff, 0x85, 0xc0, 0x74, 0xf0, 0x8b, 0x5e, 0xfe, + 0x03, 0x1e, 0x4a, 0x04, 0x3b, 0x1e, 0x4a, 0x04, 0x73, 0x03, 0xbb, 0xfe, + 0xff, 0x89, 0xd8, 0xe8, 0x7c, 0x0f, 0x89, 0xc6, 0x3d, 0xff, 0xff, 0x74, + 0xd2, 0x3d, 0xf8, 0xff, 0x77, 0xcd, 0x39, 0xc3, 0x76, 0xc9, 0x29, 0xc3, + 0x89, 0x5e, 0xfe, 0x8d, 0x47, 0xfe, 0x39, 0xd8, 0x77, 0xbd, 0x8b, 0x1e, + 0x76, 0x04, 0x89, 0x46, 0xfe, 0x85, 0xdb, 0x74, 0x06, 0x83, 0x7f, 0x04, + 0x00, 0x75, 0x3c, 0x85, 0xdb, 0x74, 0x4e, 0x8b, 0x07, 0x8d, 0x7c, 0xfe, + 0x01, 0xd8, 0x39, 0xc7, 0x75, 0x43, 0x83, 0x46, 0xfe, 0x02, 0x8b, 0x46, + 0xfe, 0x01, 0x07, 0x8b, 0x46, 0xfe, 0x89, 0xc6, 0x01, 0xfe, 0x89, 0x05, + 0xc7, 0x04, 0xff, 0xff, 0x80, 0x0d, 0x01, 0xc7, 0x47, 0x0a, 0xff, 0xff, + 0x8d, 0x45, 0x02, 0xff, 0x47, 0x0c, 0xe8, 0x91, 0xf9, 0xb8, 0x01, 0x00, + 0xe9, 0x72, 0xff, 0x39, 0xf3, 0x76, 0x05, 0x8b, 0x5f, 0x04, 0xeb, 0xb1, + 0x8b, 0x07, 0x01, 0xd8, 0x05, 0x02, 0x00, 0x39, 0xf0, 0x73, 0xb0, 0xeb, + 0xee, 0x8b, 0x46, 0xfe, 0x3d, 0x1c, 0x00, 0x73, 0x03, 0xe9, 0x4f, 0xff, + 0x89, 0x04, 0x89, 0xf0, 0x89, 0xf3, 0xe8, 0x64, 0xfe, 0x89, 0xc7, 0xeb, + 0xbb, 0x53, 0x89, 0xc3, 0xf6, 0x47, 0x07, 0x20, 0x74, 0x02, 0x5b, 0xc3, + 0x8b, 0x47, 0x08, 0xe8, 0x3b, 0xe5, 0x85, 0xc0, 0x74, 0xf4, 0x80, 0x4f, + 0x07, 0x20, 0xf6, 0x47, 0x07, 0x07, 0x75, 0xea, 0x80, 0x4f, 0x07, 0x02, + 0x5b, 0xc3, 0x53, 0x89, 0xc3, 0x85, 0xc0, 0x74, 0x0d, 0xf6, 0xc6, 0xff, + 0x74, 0x0a, 0x88, 0x37, 0xb8, 0x02, 0x00, 0x88, 0x57, 0x01, 0x5b, 0xc3, + 0xb8, 0x01, 0x00, 0x88, 0x17, 0x5b, 0xc3, 0x51, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x24, 0x52, 0x89, 0xd9, 0xc6, 0x46, 0xdc, 0x00, 0x8d, + 0x76, 0xdd, 0x89, 0xd7, 0x8d, 0x5e, 0xfe, 0x89, 0x4e, 0xfe, 0x33, 0xd2, + 0xf7, 0x37, 0x89, 0x07, 0x89, 0xd3, 0x8a, 0x87, 0x82, 0x02, 0x88, 0x04, + 0x8b, 0x46, 0xfe, 0x46, 0x85, 0xc0, 0x75, 0xe4, 0x4e, 0x8a, 0x04, 0x88, + 0x05, 0x47, 0x84, 0xc0, 0x75, 0xf6, 0x8b, 0x46, 0xda, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0x59, 0xc3, 0x56, 0x89, 0xd6, 0x83, 0xfb, 0x0a, 0x75, 0x04, + 0x85, 0xc0, 0x7c, 0x07, 0xe8, 0xac, 0xff, 0x89, 0xf0, 0x5e, 0xc3, 0xf7, + 0xd8, 0x42, 0xc6, 0x04, 0x2d, 0xeb, 0xf1, 0x00, 0x93, 0x50, 0x92, 0x0b, + 0xc0, 0x74, 0x02, 0xf7, 0xe2, 0x91, 0x0b, 0xc0, 0x74, 0x04, 0xf7, 0xe3, + 0x03, 0xc8, 0x58, 0xf7, 0xe3, 0x03, 0xd1, 0xc3, 0x53, 0x52, 0xbb, 0x01, + 0x00, 0xb8, 0x5a, 0x01, 0x8c, 0xda, 0xe9, 0x25, 0xe3, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x48, 0x53, 0x8b, 0x76, 0x08, 0x89, 0x76, 0xfc, + 0x8d, 0x76, 0xb9, 0xc6, 0x46, 0xb8, 0x00, 0x89, 0x76, 0xfe, 0x8b, 0x76, + 0x0a, 0x8b, 0x5e, 0xb6, 0x89, 0x76, 0xfa, 0x8d, 0x76, 0xfa, 0x8b, 0xfa, + 0x85, 0xc0, 0x74, 0x27, 0x8b, 0xd0, 0x8b, 0xc3, 0x33, 0xdb, 0x3b, 0x14, + 0x72, 0x09, 0x8b, 0xd8, 0x8b, 0xc2, 0x33, 0xd2, 0xf7, 0x34, 0x93, 0xf7, + 0x34, 0x91, 0xf7, 0x34, 0x97, 0xf7, 0x34, 0x89, 0x14, 0x8b, 0xd0, 0x8b, + 0xc3, 0x8b, 0xd9, 0x8b, 0xcf, 0xeb, 0x2c, 0x85, 0xdb, 0x74, 0x14, 0x8b, + 0xd3, 0x8b, 0xc1, 0x33, 0xdb, 0x33, 0xc9, 0x3b, 0x14, 0x72, 0xdf, 0x8b, + 0xc8, 0x8b, 0xc2, 0x33, 0xd2, 0xeb, 0xd4, 0x8b, 0xd1, 0x8b, 0xc7, 0x33, + 0xc9, 0x33, 0xff, 0x3b, 0x14, 0x72, 0xce, 0x8b, 0xf8, 0x8b, 0xc2, 0x33, + 0xd2, 0xeb, 0xc3, 0x8b, 0x7e, 0xfa, 0x89, 0xde, 0x89, 0x5e, 0xb6, 0x8a, + 0x9d, 0x82, 0x02, 0x8b, 0x7e, 0xfe, 0xff, 0x46, 0xfe, 0x88, 0x1d, 0x85, + 0xc0, 0x75, 0x83, 0x85, 0xf6, 0x74, 0x03, 0xe9, 0x7c, 0xff, 0x85, 0xc9, + 0x75, 0xf9, 0x85, 0xd2, 0x75, 0xf5, 0xff, 0x4e, 0xfe, 0x8b, 0x76, 0xfe, + 0x8a, 0x04, 0x8b, 0x76, 0xfc, 0xff, 0x46, 0xfc, 0x88, 0x04, 0x84, 0xc0, + 0x75, 0xec, 0x8b, 0x46, 0x08, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x04, + 0x00, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x8b, 0x76, 0x08, + 0x89, 0x76, 0xfe, 0x83, 0x7e, 0x0a, 0x0a, 0x75, 0x0c, 0x85, 0xc0, 0x7c, + 0x15, 0x75, 0x06, 0x85, 0xdb, 0x75, 0x02, 0x85, 0xc9, 0xff, 0x76, 0x0a, + 0xff, 0x76, 0xfe, 0xe8, 0x13, 0xff, 0x89, 0xf0, 0xeb, 0xcb, 0x31, 0xff, + 0x29, 0xd7, 0x89, 0xfa, 0xbf, 0x00, 0x00, 0x19, 0xcf, 0x89, 0xf9, 0xbf, + 0x00, 0x00, 0x19, 0xdf, 0x89, 0xfb, 0xbf, 0x00, 0x00, 0x19, 0xc7, 0x89, + 0xf8, 0x8d, 0x7c, 0x01, 0xc6, 0x04, 0x2d, 0x89, 0x7e, 0xfe, 0xeb, 0xcd, + 0x53, 0x52, 0x89, 0xc2, 0x89, 0xc3, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x0f, + 0x2c, 0x61, 0x3c, 0x19, 0x76, 0x03, 0x43, 0xeb, 0xf1, 0x04, 0x41, 0x88, + 0x07, 0xeb, 0xf7, 0x89, 0xd0, 0x5a, 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x24, 0x53, 0x51, 0xc6, 0x46, 0xdc, 0x00, 0x8d, 0x76, + 0xdd, 0x89, 0xdf, 0x8b, 0x5e, 0xd8, 0x89, 0x5e, 0xfe, 0x8d, 0x5e, 0xfe, + 0x33, 0xc9, 0x3b, 0x17, 0x72, 0x06, 0x92, 0x87, 0xd1, 0xf7, 0x37, 0x91, + 0xf7, 0x37, 0x89, 0x17, 0x8b, 0xd1, 0x8b, 0x5e, 0xfe, 0x8a, 0x9f, 0x82, + 0x02, 0x88, 0x1c, 0x46, 0x85, 0xd2, 0x75, 0xd7, 0x85, 0xc0, 0x75, 0xd3, + 0x4e, 0x8a, 0x04, 0x88, 0x05, 0x47, 0x84, 0xc0, 0x75, 0xf6, 0x8b, 0x46, + 0xda, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x56, 0x89, 0xde, 0x83, 0xf9, + 0x0a, 0x75, 0x04, 0x85, 0xd2, 0x7c, 0x07, 0xe8, 0x9e, 0xff, 0x89, 0xf0, + 0x5e, 0xc3, 0xf7, 0xda, 0xc6, 0x07, 0x2d, 0xf7, 0xd8, 0x83, 0xda, 0x00, + 0x43, 0xeb, 0xec, 0x53, 0x89, 0xc3, 0x8a, 0x9f, 0x4b, 0x36, 0x80, 0xe3, + 0x01, 0x30, 0xe7, 0x89, 0xd8, 0x5b, 0xc3, 0x31, 0xc0, 0xe9, 0x0b, 0x0d, + 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc6, 0x89, + 0x56, 0xfe, 0x89, 0xdf, 0xe8, 0x2d, 0xe2, 0xa8, 0x80, 0x74, 0x14, 0xb0, + 0x02, 0x89, 0xf3, 0x31, 0xd2, 0x31, 0xc9, 0xb4, 0x42, 0xcd, 0x21, 0xd1, + 0xd2, 0xd1, 0xca, 0x85, 0xd2, 0x7c, 0x29, 0x8b, 0x56, 0xfe, 0x89, 0xf9, + 0x89, 0xf3, 0xb4, 0x40, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7c, 0x18, + 0x89, 0xc2, 0x39, 0xf8, 0x74, 0x09, 0xe8, 0x9a, 0xdc, 0x89, 0xc6, 0xc7, + 0x04, 0x0c, 0x00, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, + 0xe8, 0x7f, 0xe1, 0xeb, 0xf4, 0xe9, 0x1f, 0x0d, 0x51, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x50, 0x52, 0x53, 0x89, 0xc3, 0x8b, 0x47, + 0x08, 0xbb, 0x0c, 0x00, 0x99, 0xf7, 0xfb, 0x8b, 0x7e, 0xf4, 0xc7, 0x46, + 0xfa, 0xa8, 0x02, 0x8b, 0x7d, 0x0a, 0x89, 0xd6, 0x81, 0xff, 0xfd, 0xf4, + 0x7c, 0x16, 0x8b, 0x5e, 0xf4, 0x8b, 0x47, 0x08, 0xbb, 0x0c, 0x00, 0x99, + 0xf7, 0xfb, 0x01, 0xc7, 0x85, 0xf6, 0x7c, 0x10, 0x85, 0xff, 0x7d, 0x12, + 0xb8, 0xff, 0xff, 0x89, 0xc2, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, + 0x4f, 0x83, 0xc6, 0x0c, 0xeb, 0xe6, 0x8d, 0x85, 0x6c, 0x07, 0xe8, 0xd3, + 0x0c, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0xcd, 0x00, 0x8d, 0x45, 0x03, 0x99, + 0xb1, 0x02, 0xd3, 0xe2, 0x1b, 0xc2, 0xd3, 0xf8, 0xbb, 0x6d, 0x01, 0x99, + 0x31, 0xc9, 0x89, 0x46, 0xf6, 0x89, 0xf8, 0x89, 0x56, 0xf8, 0x99, 0xe8, + 0x42, 0xfd, 0x8b, 0x4e, 0xf6, 0x01, 0xc1, 0x8b, 0x46, 0xf8, 0x11, 0xd0, + 0x89, 0x46, 0xf8, 0x8d, 0x45, 0x63, 0xbb, 0x64, 0x00, 0x99, 0xf7, 0xfb, + 0x99, 0x29, 0xc1, 0x8b, 0x46, 0xf8, 0x19, 0xd0, 0x89, 0x46, 0xf8, 0x8d, + 0x85, 0x2b, 0x01, 0xbb, 0x90, 0x01, 0x99, 0xf7, 0xfb, 0x99, 0x89, 0xf3, + 0x01, 0xc1, 0x8b, 0x7e, 0xf8, 0x11, 0xd7, 0xd1, 0xe3, 0x03, 0x5e, 0xfa, + 0x8b, 0x07, 0x8b, 0x76, 0xf4, 0x99, 0x89, 0xfb, 0x01, 0xc1, 0x8b, 0x44, + 0x06, 0x11, 0xd3, 0x99, 0x01, 0xc8, 0x11, 0xda, 0xbb, 0x3c, 0x00, 0x05, + 0xff, 0xff, 0x83, 0xd2, 0xff, 0x89, 0x46, 0xfc, 0x89, 0x56, 0xfe, 0x8b, + 0x44, 0x04, 0x31, 0xc9, 0x99, 0x8b, 0x7e, 0xf4, 0xe8, 0xd9, 0xfc, 0x89, + 0xc6, 0x8b, 0x45, 0x02, 0x89, 0xd3, 0x99, 0x01, 0xf0, 0x11, 0xda, 0xbb, + 0x3c, 0x00, 0x31, 0xc9, 0xe8, 0xc5, 0xfc, 0x8b, 0x5e, 0xf4, 0x89, 0xc7, + 0x8b, 0x07, 0x89, 0xd6, 0x99, 0x01, 0xc7, 0x11, 0xd6, 0x85, 0xf6, 0x7f, + 0x02, 0x75, 0x26, 0x83, 0xfe, 0x01, 0x7c, 0x32, 0x75, 0x06, 0x81, 0xff, + 0x80, 0x51, 0x72, 0x2a, 0x83, 0x46, 0xfc, 0x01, 0x83, 0x56, 0xfe, 0x00, + 0x81, 0xc7, 0x80, 0xae, 0x83, 0xd6, 0xfe, 0xeb, 0xe2, 0xc7, 0x46, 0xfa, + 0xc2, 0x02, 0xe9, 0x2b, 0xff, 0x83, 0x46, 0xfc, 0xff, 0x83, 0x56, 0xfe, + 0xff, 0x81, 0xc7, 0x80, 0x51, 0x83, 0xd6, 0x01, 0xeb, 0xc3, 0x8b, 0x46, + 0xfe, 0x85, 0xc0, 0x7d, 0x03, 0xe9, 0xf0, 0xfe, 0x75, 0x07, 0x81, 0x7e, + 0xfc, 0xde, 0x63, 0x72, 0xf4, 0x83, 0x7e, 0xf2, 0x00, 0x74, 0x0e, 0x8b, + 0x5e, 0xf2, 0x8b, 0x46, 0xfc, 0x89, 0x07, 0x8b, 0x46, 0xfe, 0x89, 0x47, + 0x02, 0x8b, 0x46, 0xf0, 0x85, 0xc0, 0x74, 0x07, 0x89, 0xc3, 0x89, 0x3f, + 0x89, 0x77, 0x02, 0x8b, 0x46, 0xfc, 0xbb, 0x80, 0x51, 0xb9, 0x01, 0x00, + 0x05, 0x21, 0x9c, 0x8b, 0x56, 0xfe, 0x83, 0xd2, 0xff, 0xe8, 0x30, 0xfc, + 0x01, 0xf8, 0x11, 0xf2, 0xe9, 0xae, 0xfe, 0x53, 0x51, 0x56, 0x57, 0x89, + 0xc1, 0x89, 0xc3, 0xbf, 0x64, 0x00, 0x81, 0xc3, 0x6b, 0x07, 0x31, 0xd2, + 0x89, 0xd8, 0xf7, 0xf7, 0x89, 0xde, 0xd1, 0xee, 0xd1, 0xee, 0x29, 0xc6, + 0x31, 0xd2, 0x89, 0xd8, 0xbb, 0x90, 0x01, 0xf7, 0xf3, 0xbb, 0x6d, 0x01, + 0x01, 0xc6, 0x31, 0xd2, 0x89, 0xc8, 0x31, 0xc9, 0x81, 0xee, 0xcc, 0x01, + 0xe8, 0xf1, 0xfb, 0x31, 0xdb, 0x01, 0xf0, 0x11, 0xda, 0x5f, 0x5e, 0x59, + 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0x52, 0x89, 0xde, 0x89, + 0xcf, 0x8b, 0x56, 0x08, 0x8b, 0x46, 0x0a, 0x85, 0xc9, 0x75, 0x1f, 0x81, + 0xfb, 0xc0, 0xa8, 0x73, 0x19, 0x85, 0xc0, 0x7f, 0x06, 0x75, 0x13, 0x85, + 0xd2, 0x76, 0x0f, 0x81, 0xc6, 0x80, 0x51, 0x83, 0xd7, 0x01, 0x83, 0x46, + 0xfe, 0xff, 0x83, 0x56, 0xfc, 0xff, 0xbb, 0x80, 0x51, 0xb9, 0x01, 0x00, + 0x29, 0xd6, 0x19, 0xc7, 0x89, 0xf0, 0x89, 0xfa, 0xe8, 0x80, 0x0b, 0xbb, + 0x80, 0x51, 0xb9, 0x01, 0x00, 0x01, 0x46, 0xfe, 0x11, 0x56, 0xfc, 0x89, + 0xf0, 0x89, 0xfa, 0xe8, 0x6d, 0x0b, 0x89, 0xdf, 0x89, 0xce, 0x89, 0xd8, + 0x89, 0xca, 0xbb, 0x10, 0x0e, 0x31, 0xc9, 0xe8, 0x5d, 0x0b, 0x8b, 0x5e, + 0x0c, 0x89, 0xf2, 0x31, 0xc9, 0x89, 0x47, 0x04, 0xbb, 0x10, 0x0e, 0x89, + 0xf8, 0xe8, 0x4b, 0x0b, 0x89, 0xdf, 0x89, 0xce, 0x89, 0xd8, 0x89, 0xca, + 0xbb, 0x3c, 0x00, 0x31, 0xc9, 0xe8, 0x3b, 0x0b, 0x8b, 0x5e, 0x0c, 0x89, + 0xf2, 0x31, 0xc9, 0x89, 0x47, 0x02, 0xbb, 0x3c, 0x00, 0x89, 0xf8, 0x8b, + 0x76, 0x0c, 0xe8, 0x26, 0x0b, 0x8b, 0x46, 0xfe, 0x8b, 0x56, 0xfc, 0x31, + 0xc9, 0x89, 0x1c, 0xbb, 0x6d, 0x01, 0xe8, 0x16, 0x0b, 0x8b, 0x4e, 0xfe, + 0x89, 0xc3, 0x89, 0xc6, 0xe8, 0x04, 0xff, 0x81, 0xc3, 0x6b, 0x07, 0x29, + 0xc1, 0x85, 0xc9, 0x7c, 0x62, 0x8b, 0x5e, 0x0c, 0xbf, 0xa8, 0x02, 0x89, + 0x77, 0x0a, 0x8d, 0x84, 0x6c, 0x07, 0x89, 0x4f, 0x0e, 0xe8, 0x7c, 0x0a, + 0x85, 0xc0, 0x74, 0x03, 0xbf, 0xc2, 0x02, 0x89, 0xc8, 0xbb, 0x1f, 0x00, + 0x99, 0xf7, 0xfb, 0x89, 0xc3, 0xd1, 0xe3, 0x01, 0xfb, 0x3b, 0x4f, 0x02, + 0x7c, 0x01, 0x40, 0x8b, 0x5e, 0x0c, 0x89, 0x47, 0x08, 0xd1, 0xe0, 0x01, + 0xc7, 0x2b, 0x0d, 0x41, 0x8b, 0x46, 0xfe, 0x89, 0x4f, 0x06, 0xbb, 0x07, + 0x00, 0x05, 0x01, 0x00, 0x8b, 0x56, 0xfc, 0x83, 0xd2, 0x00, 0x31, 0xc9, + 0x8b, 0x76, 0x0c, 0xe8, 0xad, 0x0a, 0x89, 0xf0, 0x89, 0x5c, 0x0c, 0x89, + 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x06, 0x00, 0x89, 0xd8, 0x4e, 0xe8, 0x27, + 0x0a, 0x05, 0x6d, 0x01, 0x4b, 0x01, 0xc1, 0xeb, 0x8c, 0x53, 0x51, 0x56, + 0x89, 0xc3, 0x89, 0xd6, 0x52, 0x31, 0xc0, 0xc7, 0x44, 0x10, 0x00, 0x00, + 0x50, 0x8b, 0x4f, 0x02, 0x50, 0x8b, 0x07, 0x31, 0xd2, 0x89, 0xc3, 0xb8, + 0xdf, 0x63, 0xe8, 0xad, 0xfe, 0xe9, 0xa6, 0xfe, 0x52, 0xba, 0x4c, 0x37, + 0xe8, 0xd6, 0xff, 0x5a, 0xc3, 0x52, 0xa1, 0xb8, 0x05, 0x89, 0xc2, 0x30, + 0xe6, 0x24, 0xfc, 0x80, 0xe2, 0x01, 0xa3, 0xb8, 0x05, 0x89, 0xd0, 0x5a, + 0xc3, 0x52, 0xa1, 0xb8, 0x05, 0x89, 0xc2, 0x30, 0xe6, 0x0c, 0x01, 0xa3, + 0xb8, 0x05, 0x80, 0xe2, 0x01, 0x80, 0x26, 0xb8, 0x05, 0xfd, 0xeb, 0xe5, + 0x53, 0x56, 0x89, 0xc3, 0x89, 0xd6, 0x8d, 0x57, 0x01, 0x31, 0xc0, 0x80, + 0x3f, 0x2d, 0x74, 0x0e, 0x80, 0x3f, 0x2b, 0x75, 0x02, 0x89, 0xd3, 0x89, + 0x04, 0x89, 0xd8, 0x5e, 0x5b, 0xc3, 0xb8, 0x01, 0x00, 0xeb, 0xf2, 0x53, + 0x56, 0x89, 0xc3, 0x89, 0xd6, 0x31, 0xc0, 0x80, 0x3f, 0x30, 0x7c, 0xe7, + 0x80, 0x3f, 0x39, 0x7f, 0xe2, 0xba, 0x0a, 0x00, 0xf7, 0xea, 0x89, 0xc2, + 0x8a, 0x07, 0x98, 0x01, 0xd0, 0x43, 0x2d, 0x30, 0x00, 0xeb, 0xe4, 0x56, + 0x89, 0xde, 0xe8, 0xd6, 0xff, 0x89, 0xc3, 0x80, 0x3f, 0x3a, 0x74, 0x02, + 0x5e, 0xc3, 0x40, 0x89, 0xf2, 0xe8, 0xc7, 0xff, 0x89, 0xc3, 0x80, 0x3f, + 0x3a, 0x75, 0xf1, 0x40, 0x89, 0xca, 0xe8, 0xba, 0xff, 0x5e, 0xc3, 0x53, + 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, + 0x56, 0xfc, 0x31, 0xff, 0x80, 0x3c, 0x3c, 0x74, 0x40, 0x89, 0xf2, 0x8a, + 0x0c, 0x84, 0xc9, 0x75, 0x3f, 0x89, 0xf3, 0x29, 0xd3, 0x89, 0x5e, 0xfe, + 0x81, 0xfb, 0x80, 0x00, 0x7e, 0x05, 0xc7, 0x46, 0xfe, 0x80, 0x00, 0x8b, + 0x5e, 0xfe, 0x8b, 0x46, 0xfc, 0xe8, 0xd8, 0xf4, 0x8b, 0x5e, 0xfc, 0x03, + 0x5e, 0xfe, 0xc6, 0x07, 0x00, 0x85, 0xff, 0x74, 0x06, 0x80, 0xf9, 0x3e, + 0x75, 0x01, 0x46, 0x89, 0xf0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, + 0xc3, 0xbf, 0x01, 0x00, 0x01, 0xfe, 0xeb, 0xb9, 0x85, 0xff, 0x74, 0x08, + 0x80, 0xf9, 0x3e, 0x74, 0xb8, 0x46, 0xeb, 0xaf, 0x80, 0xf9, 0x2c, 0x74, + 0xb0, 0x80, 0xf9, 0x2d, 0x74, 0xab, 0x80, 0xf9, 0x2b, 0x74, 0xa6, 0x80, + 0xf9, 0x30, 0x7c, 0xe9, 0x80, 0xf9, 0x39, 0x7e, 0x9c, 0xeb, 0xe2, 0x53, + 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x89, 0xc7, 0x89, + 0xd6, 0x8d, 0x56, 0xfa, 0xe8, 0xfd, 0xfe, 0x89, 0xc7, 0x8a, 0x05, 0x3c, + 0x30, 0x7c, 0x04, 0x3c, 0x39, 0x7e, 0x04, 0x89, 0xf8, 0xeb, 0xa6, 0x8d, + 0x4e, 0xf6, 0x8d, 0x5e, 0xf8, 0x31, 0xc0, 0x8d, 0x56, 0xfe, 0x89, 0x46, + 0xf6, 0x89, 0x46, 0xf8, 0x89, 0x46, 0xfe, 0x89, 0xf8, 0xe8, 0x1b, 0xff, + 0x89, 0xc7, 0x8b, 0x46, 0xfe, 0xd1, 0xe0, 0xd1, 0xe0, 0xb1, 0x04, 0x89, + 0xc2, 0xd3, 0xe0, 0x29, 0xd0, 0xbb, 0x3c, 0x00, 0x03, 0x46, 0xf8, 0x31, + 0xc9, 0x99, 0xe8, 0x13, 0xf9, 0x89, 0xc1, 0x8b, 0x46, 0xf6, 0x89, 0x56, + 0xfc, 0x99, 0x01, 0xc8, 0x89, 0x04, 0x8b, 0x46, 0xfc, 0x11, 0xd0, 0x89, + 0x44, 0x02, 0x83, 0x7e, 0xfa, 0x00, 0x74, 0xab, 0xf7, 0x5c, 0x02, 0xf7, + 0x1c, 0x83, 0x5c, 0x02, 0x00, 0xeb, 0xa0, 0x53, 0x51, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x08, 0x89, 0xc6, 0x89, 0xd7, 0xbb, 0xff, 0xff, + 0x80, 0x3c, 0x4a, 0x75, 0x05, 0xbb, 0x01, 0x00, 0x01, 0xde, 0x80, 0x3c, + 0x4d, 0x75, 0x03, 0x46, 0x31, 0xdb, 0x8d, 0x56, 0xf8, 0x89, 0xf0, 0x89, + 0x5d, 0x10, 0xe8, 0x86, 0xfe, 0x89, 0xc2, 0x89, 0xc6, 0x85, 0xdb, 0x74, + 0x2c, 0x8b, 0x46, 0xf8, 0x89, 0x45, 0x0e, 0x31, 0xc0, 0xc7, 0x46, 0xfa, + 0x02, 0x00, 0x89, 0x46, 0xfe, 0x89, 0x46, 0xfc, 0x80, 0x3c, 0x2f, 0x74, + 0x52, 0x8b, 0x46, 0xfe, 0x89, 0x05, 0x8b, 0x46, 0xfc, 0x89, 0x45, 0x02, + 0x8b, 0x46, 0xfa, 0x89, 0x45, 0x04, 0xe9, 0xe6, 0xfe, 0x8b, 0x46, 0xf8, + 0x48, 0x89, 0xd3, 0x89, 0x45, 0x08, 0x80, 0x3f, 0x2e, 0x75, 0x29, 0x8d, + 0x56, 0xf8, 0x8d, 0x44, 0x01, 0xe8, 0x3b, 0xfe, 0x89, 0xc3, 0x89, 0xc6, + 0x8b, 0x46, 0xf8, 0x89, 0x45, 0x06, 0x80, 0x3f, 0x2e, 0x75, 0x11, 0x8d, + 0x56, 0xf8, 0x8d, 0x47, 0x01, 0xe8, 0x23, 0xfe, 0x89, 0xc6, 0x8b, 0x46, + 0xf8, 0x89, 0x45, 0x0c, 0xc7, 0x45, 0x0e, 0x00, 0x00, 0xeb, 0x9c, 0x8d, + 0x4e, 0xfe, 0x8d, 0x5e, 0xfc, 0x8d, 0x56, 0xfa, 0x89, 0xf0, 0xe8, 0x2a, + 0xfe, 0x89, 0xc6, 0xeb, 0x9c, 0x53, 0x51, 0x56, 0x89, 0xc6, 0x89, 0xd1, + 0x89, 0xd0, 0xbb, 0x10, 0x0e, 0x99, 0xf7, 0xfb, 0x29, 0x44, 0x04, 0x89, + 0xc8, 0xbb, 0x3c, 0x00, 0x99, 0xf7, 0xfb, 0x99, 0xf7, 0xfb, 0x89, 0xc8, + 0x29, 0x54, 0x02, 0x99, 0xf7, 0xfb, 0x29, 0x14, 0xe9, 0x72, 0xfe, 0x53, + 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x89, 0xd3, 0x8d, + 0x56, 0xf8, 0x89, 0xc1, 0xe8, 0xc4, 0xfd, 0x89, 0xc6, 0x39, 0xc1, 0x74, + 0x05, 0x80, 0x3c, 0x2c, 0x74, 0x05, 0x89, 0xc8, 0xe9, 0x4a, 0xfe, 0x40, + 0x8d, 0x56, 0xfe, 0x89, 0xc1, 0xe8, 0x88, 0xfd, 0x8d, 0x56, 0xfa, 0xe8, + 0xa5, 0xfd, 0x89, 0xc6, 0x39, 0xc1, 0x74, 0xe6, 0x80, 0x3c, 0x2c, 0x75, + 0xe1, 0x83, 0x7e, 0xfe, 0x00, 0x74, 0x06, 0x83, 0x7e, 0xfa, 0x01, 0x75, + 0xd5, 0x40, 0x83, 0x7e, 0xfe, 0x00, 0x74, 0x0b, 0x83, 0x7e, 0xfa, 0x01, + 0x75, 0x05, 0xc7, 0x46, 0xfa, 0x05, 0x00, 0x8d, 0x56, 0xf6, 0x89, 0xc1, + 0xe8, 0x74, 0xfd, 0x89, 0xc6, 0x39, 0xc1, 0x74, 0xb5, 0x80, 0x3c, 0x2c, + 0x75, 0xb0, 0x46, 0x83, 0x7e, 0xfa, 0x00, 0x75, 0x2e, 0x8b, 0x7e, 0xf8, + 0xd1, 0xe7, 0x8b, 0x56, 0xf6, 0x8b, 0x85, 0xa6, 0x02, 0xc7, 0x47, 0x10, + 0x01, 0x00, 0x01, 0xc2, 0x89, 0x57, 0x0e, 0x8d, 0x56, 0xfc, 0x89, 0xf0, + 0x89, 0xf1, 0xe8, 0x42, 0xfd, 0x89, 0xc6, 0x39, 0xc1, 0x74, 0x83, 0x80, + 0x3c, 0x2c, 0x74, 0x1d, 0xe9, 0x7b, 0xff, 0xc7, 0x47, 0x10, 0x00, 0x00, + 0x8b, 0x46, 0xf8, 0x48, 0x89, 0x47, 0x08, 0x8b, 0x46, 0xfa, 0x89, 0x47, + 0x06, 0x8b, 0x46, 0xf6, 0x89, 0x47, 0x0c, 0xeb, 0xce, 0x8b, 0x56, 0xfc, + 0x89, 0xd8, 0xf7, 0xda, 0xe8, 0x0e, 0xff, 0xe9, 0xa1, 0xfd, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x26, 0x50, 0x52, 0x53, 0x51, 0x8c, 0xd8, + 0x8d, 0x7e, 0xda, 0x8e, 0xc0, 0xbe, 0xba, 0x05, 0xa5, 0xa5, 0xa5, 0xa5, + 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0x8d, 0x7e, 0xec, 0xbe, 0xcc, 0x05, 0xa5, + 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0x8b, 0x76, 0xd8, 0x8d, + 0x56, 0xda, 0x89, 0xf0, 0xe8, 0xfc, 0xfe, 0x89, 0xc3, 0x39, 0xf0, 0x74, + 0x05, 0x80, 0x3f, 0x2c, 0x74, 0x08, 0x89, 0xf0, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0xc3, 0x8d, 0x77, 0x01, 0x8d, 0x56, 0xec, 0x89, 0xf0, 0x89, 0xf1, + 0xe8, 0xdc, 0xfe, 0x89, 0xc3, 0x39, 0xc6, 0x74, 0x4e, 0x80, 0x3f, 0x2c, + 0x75, 0x49, 0x80, 0x7f, 0x01, 0x00, 0x74, 0x43, 0x8d, 0x56, 0xfe, 0x40, + 0xe8, 0x9c, 0xfc, 0x89, 0xc3, 0x89, 0xc6, 0x80, 0x3f, 0x00, 0x75, 0xca, + 0xbb, 0x12, 0x00, 0x8d, 0x56, 0xda, 0x8b, 0x46, 0xd6, 0xe8, 0xe0, 0xf1, + 0xbb, 0x12, 0x00, 0x8d, 0x56, 0xec, 0x8b, 0x46, 0xd4, 0xe8, 0xd4, 0xf1, + 0x8b, 0x46, 0xfe, 0x99, 0x8b, 0x7e, 0xd2, 0x89, 0xc1, 0xa1, 0xb0, 0x05, + 0x8b, 0x1e, 0xb2, 0x05, 0x29, 0xc8, 0x19, 0xd3, 0x89, 0x05, 0x89, 0x5d, + 0x02, 0xeb, 0x97, 0x89, 0xc8, 0xeb, 0x95, 0x53, 0x51, 0x52, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc3, 0x31, 0xc0, 0xa3, 0xb4, 0x05, 0x80, + 0x3f, 0x3a, 0x75, 0x01, 0x43, 0xba, 0xaa, 0x04, 0x89, 0xd8, 0xe8, 0x86, + 0xfc, 0xba, 0xb0, 0x05, 0xe8, 0x04, 0xfd, 0x89, 0xc3, 0x8a, 0x07, 0x84, + 0xc0, 0x75, 0x05, 0xa2, 0x2b, 0x05, 0xeb, 0x52, 0xa1, 0xb0, 0x05, 0xc7, + 0x06, 0xb4, 0x05, 0x01, 0x00, 0x05, 0xf0, 0xf1, 0x89, 0x46, 0xfc, 0xa1, + 0xb2, 0x05, 0x15, 0xff, 0xff, 0xba, 0x2b, 0x05, 0x89, 0x46, 0xfe, 0x89, + 0xd8, 0xc7, 0x06, 0xb6, 0x05, 0x10, 0x0e, 0xe8, 0x4d, 0xfc, 0x89, 0xc3, + 0x80, 0x3f, 0x2c, 0x75, 0x2c, 0x8d, 0x4e, 0xfc, 0xbb, 0x98, 0x04, 0xba, + 0x86, 0x04, 0x40, 0xe8, 0xe4, 0xfe, 0x89, 0xc3, 0x80, 0x3f, 0x00, 0x75, + 0x11, 0xa1, 0xb0, 0x05, 0x2b, 0x46, 0xfc, 0xa3, 0xb6, 0x05, 0x89, 0xc2, + 0xb8, 0x98, 0x04, 0xe8, 0xd7, 0xfd, 0x89, 0xec, 0x5d, 0x5a, 0x59, 0x5b, + 0xc3, 0x8d, 0x56, 0xfc, 0xe8, 0x98, 0xfc, 0x89, 0xc3, 0xa1, 0xb0, 0x05, + 0x2b, 0x46, 0xfc, 0xa3, 0xb6, 0x05, 0x80, 0x3f, 0x2c, 0x75, 0xe3, 0xba, + 0x86, 0x04, 0x8d, 0x47, 0x01, 0xe8, 0xff, 0xfc, 0x89, 0xc3, 0x80, 0x3f, + 0x2c, 0x75, 0xd3, 0xba, 0x98, 0x04, 0x40, 0xe8, 0xf1, 0xfc, 0xb8, 0x98, + 0x04, 0x8b, 0x16, 0xb6, 0x05, 0xeb, 0xc0, 0x85, 0xc0, 0x75, 0x0f, 0xa0, + 0xb8, 0x05, 0xa8, 0x01, 0x74, 0x10, 0xa8, 0x02, 0x74, 0x0c, 0xb8, 0x01, + 0x00, 0xc3, 0x80, 0x26, 0xb8, 0x05, 0xfd, 0x31, 0xc0, 0xc3, 0xb8, 0x01, + 0x00, 0x80, 0x0e, 0xb8, 0x05, 0x02, 0xc3, 0x52, 0xb8, 0x7c, 0x01, 0xe8, + 0x0d, 0x06, 0x89, 0xc2, 0xe8, 0xd0, 0xff, 0x85, 0xc0, 0x75, 0x04, 0x85, + 0xd2, 0x75, 0x02, 0x5a, 0xc3, 0x89, 0xd0, 0xe8, 0x01, 0xff, 0x5a, 0xc3, + 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x14, 0x89, 0xc6, + 0x8b, 0x44, 0x10, 0x85, 0xc0, 0x74, 0x14, 0x3d, 0x01, 0x00, 0x75, 0x0c, + 0x8b, 0x44, 0x0e, 0x48, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, + 0xe9, 0x93, 0x00, 0x89, 0xd0, 0x05, 0x6c, 0x07, 0xe8, 0xd1, 0x04, 0x85, + 0xc0, 0x75, 0x03, 0xe9, 0x78, 0x00, 0xbb, 0xc2, 0x02, 0x8b, 0x44, 0x08, + 0xd1, 0xe0, 0x01, 0xc3, 0x8b, 0x47, 0x02, 0x2b, 0x07, 0x89, 0x46, 0xfe, + 0x31, 0xc0, 0xc7, 0x46, 0xf2, 0x01, 0x00, 0x89, 0x46, 0xec, 0x89, 0x46, + 0xee, 0x89, 0x46, 0xf0, 0x8b, 0x44, 0x08, 0xc7, 0x46, 0xfc, 0x00, 0x00, + 0x89, 0x46, 0xf4, 0x8d, 0x46, 0xec, 0x89, 0x56, 0xf6, 0xe8, 0x3c, 0xef, + 0x8b, 0x44, 0x0c, 0x2b, 0x46, 0xf8, 0x05, 0x07, 0x00, 0xbb, 0x07, 0x00, + 0x99, 0xf7, 0xfb, 0x8b, 0x44, 0x06, 0x3d, 0x05, 0x00, 0x75, 0x34, 0xb1, + 0x03, 0x48, 0x89, 0xd7, 0x89, 0xc3, 0xd3, 0xe0, 0x47, 0x29, 0xd8, 0x01, + 0xf8, 0x3b, 0x46, 0xfe, 0x7e, 0x1d, 0x8b, 0x44, 0x06, 0x2d, 0x02, 0x00, + 0x8b, 0x5e, 0xfa, 0xb1, 0x03, 0x01, 0xd3, 0x89, 0xc2, 0xd3, 0xe0, 0x29, + 0xd0, 0x01, 0xd8, 0xe9, 0x6e, 0xff, 0xbb, 0xa8, 0x02, 0xeb, 0x86, 0x89, + 0xd8, 0xeb, 0xe5, 0x48, 0xeb, 0xe2, 0x8b, 0x44, 0x0e, 0xe9, 0x5c, 0xff, + 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd7, 0x83, 0x7c, 0x10, 0x00, 0x75, 0x10, + 0x83, 0x7d, 0x10, 0x00, 0x75, 0x0a, 0x8b, 0x44, 0x08, 0x3b, 0x45, 0x08, + 0x7f, 0x16, 0x7c, 0x1a, 0x89, 0xda, 0x89, 0xf0, 0xe8, 0x1d, 0xff, 0x89, + 0xc6, 0x89, 0xda, 0x89, 0xf8, 0xe8, 0x14, 0xff, 0x39, 0xc6, 0x7e, 0x06, + 0xb8, 0x01, 0x00, 0x5f, 0x5e, 0xc3, 0x31, 0xc0, 0x5f, 0x5e, 0xc3, 0x53, + 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x16, 0x89, 0xc6, + 0x8b, 0x44, 0x10, 0x85, 0xc0, 0x7c, 0x05, 0x89, 0xc7, 0xe9, 0x90, 0x00, + 0x31, 0xff, 0x83, 0x3e, 0xb4, 0x05, 0x00, 0x75, 0x03, 0xe9, 0x81, 0x00, + 0xba, 0x98, 0x04, 0xb8, 0x86, 0x04, 0x8b, 0x5c, 0x0a, 0xe8, 0x94, 0xff, + 0x89, 0x46, 0xf8, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x79, 0x00, 0xc7, 0x46, + 0xfc, 0x98, 0x04, 0xc7, 0x46, 0xfe, 0x86, 0x04, 0x8b, 0x44, 0x08, 0x89, + 0x46, 0xfa, 0x8b, 0x44, 0x0a, 0x05, 0x6c, 0x07, 0xe8, 0xb1, 0x03, 0x85, + 0xc0, 0x74, 0x68, 0xbb, 0xc2, 0x02, 0x8b, 0x46, 0xfa, 0xd1, 0xe0, 0x01, + 0xc3, 0x8b, 0x57, 0x02, 0x2b, 0x17, 0x8b, 0x5e, 0xfc, 0xc7, 0x46, 0xea, + 0x00, 0x00, 0x8b, 0x47, 0x10, 0x89, 0x56, 0xee, 0x85, 0xc0, 0x75, 0x4c, + 0x8b, 0x46, 0xfa, 0x3b, 0x47, 0x08, 0x7e, 0x4d, 0xbf, 0x01, 0x00, 0x83, + 0x7e, 0xea, 0x00, 0x74, 0x0f, 0x8b, 0x56, 0xfc, 0x89, 0xf0, 0xe8, 0xbb, + 0x01, 0x85, 0xc0, 0x75, 0x32, 0xbf, 0x01, 0x00, 0x85, 0xff, 0x75, 0x2e, + 0x8b, 0x46, 0xf8, 0x85, 0xc0, 0x74, 0x02, 0x89, 0xc7, 0x89, 0x7c, 0x10, + 0x89, 0xf8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xc7, + 0x46, 0xfc, 0x86, 0x04, 0xc7, 0x46, 0xfe, 0x98, 0x04, 0xeb, 0x85, 0xbb, + 0xa8, 0x02, 0xeb, 0x96, 0xe9, 0x7d, 0x00, 0xe9, 0xa6, 0x00, 0xe9, 0xa8, + 0x00, 0x75, 0xb4, 0x8b, 0x44, 0x0c, 0x05, 0x07, 0x00, 0x2b, 0x47, 0x0c, + 0xbb, 0x07, 0x00, 0x99, 0xf7, 0xfb, 0x8b, 0x44, 0x06, 0x29, 0xd0, 0x89, + 0x46, 0xf0, 0x8b, 0x44, 0x0c, 0x8b, 0x5e, 0xfc, 0x05, 0x06, 0x00, 0x2b, + 0x47, 0x0c, 0xbb, 0x07, 0x00, 0x99, 0xf7, 0xfb, 0x8b, 0x44, 0x06, 0x48, + 0x29, 0xd0, 0x8b, 0x5e, 0xfc, 0x89, 0x46, 0xf4, 0x8b, 0x47, 0x06, 0x3d, + 0x05, 0x00, 0x75, 0x1c, 0x8b, 0x46, 0xee, 0x2d, 0x07, 0x00, 0x3b, 0x46, + 0xf0, 0x7c, 0x03, 0xe9, 0x69, 0xff, 0xbf, 0x01, 0x00, 0x3b, 0x46, 0xf4, + 0x7c, 0x03, 0xe9, 0x64, 0xff, 0xe9, 0x5b, 0xff, 0x48, 0xb1, 0x03, 0x89, + 0xc2, 0xd3, 0xe2, 0x29, 0xc2, 0x89, 0xd0, 0x40, 0x3b, 0x46, 0xf0, 0x7f, + 0xde, 0xbf, 0x01, 0x00, 0x3b, 0x46, 0xf4, 0x7f, 0xe1, 0xe9, 0x3f, 0xff, + 0x8b, 0x57, 0x0e, 0x3d, 0x01, 0x00, 0x75, 0x15, 0x8b, 0x44, 0x0a, 0x05, + 0x6c, 0x07, 0xe8, 0xaf, 0x02, 0x85, 0xc0, 0x74, 0x07, 0x3b, 0x16, 0xac, + 0x02, 0x7e, 0x01, 0x42, 0x4a, 0x8b, 0x44, 0x0e, 0x39, 0xc2, 0x7f, 0xaf, + 0xbf, 0x01, 0x00, 0x74, 0xb5, 0xe9, 0x13, 0xff, 0x31, 0xff, 0xe9, 0x23, + 0xff, 0x8b, 0x5e, 0xfe, 0x8b, 0x47, 0x10, 0xc7, 0x46, 0xec, 0x00, 0x00, + 0x85, 0xc0, 0x75, 0x0c, 0x8b, 0x46, 0xfa, 0x3b, 0x47, 0x08, 0x7e, 0x07, + 0x31, 0xff, 0xeb, 0x52, 0xe9, 0x8d, 0x00, 0x75, 0x4d, 0x8b, 0x44, 0x0c, + 0x05, 0x07, 0x00, 0x2b, 0x47, 0x0c, 0xbb, 0x07, 0x00, 0x99, 0xf7, 0xfb, + 0x8b, 0x44, 0x06, 0x29, 0xd0, 0x89, 0x46, 0xf6, 0x8b, 0x44, 0x0c, 0x8b, + 0x5e, 0xfe, 0x05, 0x06, 0x00, 0x2b, 0x47, 0x0c, 0xbb, 0x07, 0x00, 0x99, + 0xf7, 0xfb, 0x8b, 0x44, 0x06, 0x48, 0x29, 0xd0, 0x8b, 0x5e, 0xfe, 0x89, + 0x46, 0xf2, 0x8b, 0x47, 0x06, 0x31, 0xff, 0x3d, 0x05, 0x00, 0x75, 0x34, + 0x8b, 0x46, 0xee, 0x2d, 0x07, 0x00, 0x3b, 0x46, 0xf6, 0x7c, 0x22, 0xbf, + 0x01, 0x00, 0x83, 0x7e, 0xec, 0x00, 0x74, 0x0a, 0x8b, 0x56, 0xfe, 0x89, + 0xf0, 0xe8, 0x5c, 0x00, 0x89, 0xc7, 0x8b, 0x46, 0xf8, 0x85, 0xc0, 0x75, + 0x03, 0xe9, 0xa9, 0xfe, 0x29, 0xf8, 0xe9, 0xa2, 0xfe, 0x3b, 0x46, 0xf2, + 0x7d, 0xe2, 0xeb, 0xda, 0x48, 0xb1, 0x03, 0x89, 0xc2, 0xd3, 0xe2, 0x29, + 0xc2, 0x89, 0xd0, 0x40, 0x3b, 0x46, 0xf6, 0x7f, 0xc6, 0x3b, 0x46, 0xf2, + 0x7f, 0xca, 0xeb, 0xc2, 0x8b, 0x57, 0x0e, 0x3d, 0x01, 0x00, 0x75, 0x15, + 0x8b, 0x44, 0x0a, 0x05, 0x6c, 0x07, 0xe8, 0xd3, 0x01, 0x85, 0xc0, 0x74, + 0x07, 0x3b, 0x16, 0xac, 0x02, 0x7e, 0x01, 0x42, 0x4a, 0x8b, 0x44, 0x0e, + 0x39, 0xc2, 0x7f, 0x9e, 0x31, 0xff, 0x39, 0xc2, 0x74, 0x9e, 0xeb, 0x96, + 0x53, 0x56, 0x89, 0xc6, 0x89, 0xd3, 0x8b, 0x54, 0x04, 0x31, 0xc0, 0x3b, + 0x57, 0x04, 0x7c, 0x12, 0x75, 0x13, 0x8b, 0x54, 0x02, 0x3b, 0x57, 0x02, + 0x7c, 0x08, 0x75, 0x09, 0x8b, 0x34, 0x3b, 0x37, 0x7d, 0x03, 0xb8, 0x01, + 0x00, 0x5e, 0x5b, 0xc3, 0x53, 0x89, 0xc3, 0x83, 0xeb, 0x02, 0x8b, 0x07, + 0x24, 0xfe, 0x2d, 0x02, 0x00, 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0x31, 0xff, + 0x8d, 0x4e, 0xfc, 0x8b, 0x5e, 0xfe, 0x8c, 0xd8, 0x89, 0xf2, 0xe8, 0xcb, + 0x02, 0x85, 0xc0, 0x74, 0x10, 0x3d, 0x01, 0x00, 0x74, 0x09, 0x3d, 0x02, + 0x00, 0x75, 0xe5, 0x85, 0xff, 0x74, 0x0c, 0x31, 0xf6, 0x89, 0xf0, 0x89, + 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x8b, 0x46, 0xfc, 0xe8, 0x5d, + 0xf0, 0x85, 0xc0, 0x74, 0xea, 0xbf, 0x01, 0x00, 0xeb, 0xc6, 0x52, 0x89, + 0xc2, 0xa1, 0xe0, 0x05, 0x89, 0x16, 0xe0, 0x05, 0x5a, 0xc3, 0x53, 0x51, + 0x52, 0x89, 0xc2, 0x3b, 0x06, 0x54, 0x04, 0x72, 0x3b, 0x89, 0xd3, 0xb1, + 0x04, 0x83, 0xc3, 0x0f, 0xd3, 0xeb, 0x8c, 0xd8, 0x85, 0xdb, 0x75, 0x03, + 0xbb, 0x00, 0x10, 0x80, 0x3e, 0x50, 0x04, 0x00, 0x75, 0x0b, 0x8c, 0xd0, + 0x2b, 0x06, 0x4c, 0x04, 0x01, 0xc3, 0xa1, 0x4c, 0x04, 0x8e, 0xc0, 0xb4, + 0x4a, 0xcd, 0x21, 0x19, 0xdb, 0x85, 0xdb, 0x7c, 0x0b, 0xa1, 0x4a, 0x04, + 0x89, 0x16, 0x4a, 0x04, 0x5a, 0x59, 0x5b, 0xc3, 0xe8, 0x38, 0xd0, 0x89, + 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x05, 0x00, 0xeb, 0xee, 0x03, 0x06, + 0x4a, 0x04, 0xeb, 0xa6, 0x53, 0x52, 0xbb, 0x01, 0x01, 0x31, 0xc0, 0x31, + 0xd2, 0xa3, 0xe4, 0x05, 0xa3, 0xe2, 0x05, 0xb8, 0x4a, 0x36, 0xe8, 0xee, + 0xd4, 0x5a, 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x89, 0xc6, 0x89, 0xd1, 0x8e, + 0xc2, 0x26, 0x83, 0x3c, 0x00, 0x74, 0x28, 0xc7, 0x06, 0xe4, 0x05, 0x01, + 0x00, 0x8e, 0xc1, 0x26, 0x8b, 0x04, 0x85, 0xc0, 0x74, 0x19, 0x88, 0xe2, + 0x30, 0xf6, 0x30, 0xe4, 0x89, 0xd3, 0xba, 0x01, 0x00, 0x29, 0xc3, 0x05, + 0x4a, 0x36, 0x43, 0x40, 0x46, 0x46, 0xe8, 0xb6, 0xd4, 0xeb, 0xde, 0x5e, + 0x59, 0x5b, 0xc3, 0x53, 0x52, 0x89, 0xc2, 0xe8, 0xa6, 0xff, 0x83, 0xfa, + 0xff, 0x74, 0x3f, 0x83, 0xfa, 0xfe, 0x74, 0x3a, 0x83, 0xfa, 0xfd, 0x74, + 0x49, 0x83, 0xfa, 0xfc, 0x75, 0x26, 0xbb, 0x1f, 0x00, 0xba, 0x01, 0x00, + 0xb8, 0xcc, 0x36, 0xe8, 0x89, 0xd4, 0xbb, 0x1d, 0x00, 0xba, 0x01, 0x00, + 0xb8, 0x2b, 0x37, 0xe8, 0x7d, 0xd4, 0xc7, 0x06, 0xe4, 0x05, 0x01, 0x00, + 0xc7, 0x06, 0xe2, 0x05, 0xa4, 0x03, 0xeb, 0x1e, 0x85, 0xd2, 0x74, 0x06, + 0xb8, 0x01, 0x00, 0x5a, 0x5b, 0xc3, 0xe8, 0x26, 0x03, 0x85, 0xd2, 0x75, + 0x04, 0x85, 0xc0, 0x74, 0x09, 0xe8, 0x6c, 0xff, 0xe8, 0x41, 0x03, 0xa3, + 0xe2, 0x05, 0x31, 0xc0, 0x5a, 0x5b, 0xc3, 0x53, 0x89, 0xc3, 0xb4, 0x3e, + 0xcd, 0x21, 0xe8, 0x49, 0xea, 0x5b, 0xc3, 0x53, 0x89, 0xc3, 0xb4, 0x68, + 0xf8, 0xcd, 0x21, 0xe8, 0x3c, 0xea, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x89, + 0xc3, 0xa8, 0x03, 0x75, 0x1d, 0xb9, 0x64, 0x00, 0x31, 0xd2, 0xf7, 0xf1, + 0x85, 0xd2, 0x75, 0x0b, 0x89, 0xd8, 0xbb, 0x90, 0x01, 0xf7, 0xf3, 0x85, + 0xd2, 0x75, 0x07, 0xb8, 0x01, 0x00, 0x5a, 0x59, 0x5b, 0xc3, 0x31, 0xc0, + 0xeb, 0xf8, 0x0b, 0xd2, 0x78, 0x16, 0x0b, 0xc9, 0x79, 0x41, 0xf7, 0xd9, + 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xe8, 0x37, 0x00, 0xf7, 0xda, 0xf7, 0xd8, + 0x83, 0xda, 0x00, 0xc3, 0xf7, 0xda, 0xf7, 0xd8, 0x83, 0xda, 0x00, 0x0b, + 0xc9, 0x79, 0x12, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xe8, 0x1a, + 0x00, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xc3, 0xe8, 0x0f, 0x00, + 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xf7, 0xda, 0xf7, 0xd8, 0x83, + 0xda, 0x00, 0xc3, 0x0b, 0xc9, 0x75, 0x1a, 0x4b, 0x74, 0x16, 0x43, 0x3b, + 0xda, 0x77, 0x09, 0x8b, 0xc8, 0x8b, 0xc2, 0x2b, 0xd2, 0xf7, 0xf3, 0x91, + 0xf7, 0xf3, 0x8b, 0xda, 0x8b, 0xd1, 0x2b, 0xc9, 0xc3, 0x3b, 0xca, 0x72, + 0x1a, 0x75, 0x10, 0x3b, 0xd8, 0x77, 0x0c, 0x2b, 0xc3, 0x8b, 0xd8, 0x2b, + 0xc9, 0x2b, 0xd2, 0xb8, 0x01, 0x00, 0xc3, 0x2b, 0xc9, 0x2b, 0xdb, 0x93, + 0x87, 0xca, 0xc3, 0x55, 0x56, 0x2b, 0xf6, 0x8b, 0xee, 0x03, 0xdb, 0x13, + 0xc9, 0x72, 0x11, 0x45, 0x3b, 0xca, 0x72, 0xf5, 0x77, 0x04, 0x3b, 0xd8, + 0x76, 0xef, 0xf8, 0x13, 0xf6, 0x4d, 0x78, 0x20, 0xd1, 0xd9, 0xd1, 0xdb, + 0x2b, 0xc3, 0x19, 0xca, 0xf5, 0x72, 0xf0, 0x03, 0xf6, 0x4d, 0x78, 0x0c, + 0xd1, 0xe9, 0xd1, 0xdb, 0x03, 0xc3, 0x13, 0xd1, 0x73, 0xf1, 0xeb, 0xdf, + 0x03, 0xc3, 0x13, 0xd1, 0x8b, 0xd8, 0x8b, 0xca, 0x8b, 0xc6, 0x33, 0xd2, + 0x5e, 0x5d, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x57, 0x89, 0xc7, 0x8b, 0x36, + 0x60, 0x37, 0x85, 0xf6, 0x74, 0x5e, 0x85, 0xc0, 0x74, 0x5a, 0x8b, 0x14, + 0x85, 0xd2, 0x74, 0x54, 0x89, 0xfb, 0x89, 0xd0, 0xe8, 0x44, 0xe7, 0x85, + 0xc0, 0x74, 0x05, 0x83, 0xc6, 0x02, 0xeb, 0xea, 0x89, 0xd8, 0xe8, 0x36, + 0xe7, 0x85, 0xc0, 0x75, 0x26, 0x89, 0xd0, 0xe8, 0x9f, 0xe7, 0xe8, 0xff, + 0x01, 0x89, 0xc1, 0x89, 0xd8, 0xe8, 0x95, 0xe7, 0xe8, 0xf5, 0x01, 0x29, + 0xc1, 0x75, 0xdc, 0x89, 0xd0, 0xe8, 0x6b, 0xe7, 0x89, 0xc2, 0x89, 0xd8, + 0xe8, 0x64, 0xe7, 0x89, 0xc3, 0xeb, 0xc3, 0x89, 0xd0, 0xe8, 0x79, 0xe7, + 0x3d, 0x3d, 0x00, 0x75, 0xc2, 0x89, 0xd0, 0xe8, 0x51, 0xe7, 0x5f, 0x5e, + 0x5a, 0x59, 0x5b, 0xc3, 0x31, 0xc0, 0xeb, 0xf6, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x0c, 0x89, 0xd6, 0x89, 0x4e, 0xfc, 0x8d, 0x57, 0x03, + 0x80, 0xe2, 0xfe, 0x39, 0xda, 0x73, 0x69, 0xba, 0xff, 0xff, 0x83, 0xee, + 0x02, 0x8e, 0xc0, 0x26, 0x8b, 0x1c, 0x80, 0xe3, 0xfe, 0x39, 0xda, 0x76, + 0x67, 0x89, 0xf7, 0x29, 0xda, 0x01, 0xdf, 0x8b, 0x5e, 0xfc, 0x89, 0x7e, + 0xfe, 0x89, 0x17, 0x8b, 0x5e, 0xfe, 0x8e, 0xc0, 0x26, 0x83, 0x3f, 0xff, + 0x74, 0x48, 0x26, 0xf6, 0x07, 0x01, 0x75, 0x4b, 0x8b, 0x7e, 0xfe, 0x26, + 0x8b, 0x0d, 0x26, 0x8b, 0x7d, 0x04, 0x89, 0x7e, 0xfa, 0x8b, 0x7e, 0xfe, + 0x8c, 0xda, 0x26, 0x8b, 0x7d, 0x02, 0x31, 0xdb, 0x89, 0x7e, 0xf8, 0x39, + 0xd0, 0x75, 0x38, 0x8b, 0x1e, 0x76, 0x04, 0x8e, 0xc0, 0x26, 0x83, 0x7f, + 0x04, 0x00, 0x74, 0x2b, 0x39, 0xf3, 0x76, 0x1e, 0x8e, 0xc0, 0x26, 0x8b, + 0x5f, 0x04, 0xeb, 0xeb, 0x83, 0xfa, 0x06, 0x73, 0x95, 0xba, 0x06, 0x00, + 0xeb, 0x90, 0xb8, 0x02, 0x00, 0xe9, 0x9b, 0x00, 0xe9, 0xa3, 0x00, 0xe9, + 0x9b, 0x00, 0x26, 0x8b, 0x17, 0x01, 0xda, 0x39, 0xd6, 0x73, 0xd9, 0x8e, + 0xc0, 0x26, 0x8b, 0x57, 0x06, 0x3b, 0x56, 0xfe, 0x75, 0x0a, 0x89, 0xd7, + 0x26, 0x8b, 0x55, 0x02, 0x26, 0x89, 0x57, 0x06, 0x8b, 0x7e, 0xfc, 0x3b, + 0x0d, 0x73, 0x2b, 0x8b, 0x7e, 0xf8, 0x8e, 0xc0, 0x8b, 0x56, 0xfa, 0x26, + 0x89, 0x55, 0x04, 0x89, 0xd7, 0x8b, 0x56, 0xf8, 0x26, 0x89, 0x55, 0x02, + 0x26, 0x01, 0x0c, 0x26, 0xff, 0x4f, 0x0e, 0x8b, 0x5e, 0xfc, 0x3b, 0x0f, + 0x73, 0x4b, 0x01, 0x4e, 0xfe, 0x29, 0x0f, 0xe9, 0x51, 0xff, 0x89, 0xca, + 0x2b, 0x15, 0x89, 0x56, 0xf6, 0x83, 0xfa, 0x06, 0x72, 0xc9, 0x8b, 0x15, + 0x01, 0x56, 0xfe, 0x8e, 0xc0, 0x8b, 0x56, 0xf6, 0x8b, 0x5e, 0xfe, 0x8b, + 0x7e, 0xf8, 0x26, 0x89, 0x17, 0x26, 0x89, 0x7f, 0x02, 0x8b, 0x7e, 0xfa, + 0x26, 0x89, 0x7f, 0x04, 0x8b, 0x5e, 0xf8, 0x8b, 0x7e, 0xfe, 0x26, 0x89, + 0x7f, 0x04, 0x8b, 0x5e, 0xfa, 0x26, 0x89, 0x7f, 0x02, 0x8b, 0x5e, 0xfc, + 0x8b, 0x07, 0x26, 0x01, 0x04, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0xc3, 0xb8, 0x01, 0x00, 0xeb, 0xf5, 0x89, 0xd9, 0x29, 0xd1, 0x83, 0xf9, + 0x06, 0x72, 0xea, 0x89, 0xd7, 0x83, 0xcf, 0x01, 0x26, 0x89, 0x3c, 0x89, + 0xf7, 0x80, 0xc9, 0x01, 0x01, 0xd7, 0x31, 0xdb, 0x89, 0x7e, 0xf4, 0x8c, + 0xda, 0x26, 0x89, 0x0d, 0x39, 0xd0, 0x75, 0x22, 0x8b, 0x1e, 0x76, 0x04, + 0x8e, 0xc0, 0x26, 0x83, 0x7f, 0x04, 0x00, 0x74, 0x15, 0x39, 0xf3, 0x76, + 0x08, 0x8e, 0xc0, 0x26, 0x8b, 0x5f, 0x04, 0xeb, 0xeb, 0x26, 0x8b, 0x17, + 0x01, 0xda, 0x39, 0xd6, 0x73, 0xef, 0x8b, 0x56, 0xf4, 0x8e, 0xc0, 0x83, + 0xc2, 0x02, 0x26, 0xff, 0x47, 0x0c, 0xe8, 0x4f, 0x00, 0xeb, 0x9a, 0x53, + 0x51, 0x56, 0x57, 0x55, 0x1e, 0x33, 0xc0, 0x8e, 0xd8, 0xb4, 0x63, 0xcd, + 0x21, 0x8c, 0xdf, 0x72, 0x08, 0x84, 0xc0, 0x75, 0x04, 0x85, 0xff, 0x75, + 0x04, 0x33, 0xff, 0x33, 0xf6, 0x1f, 0x5d, 0x89, 0xf0, 0x89, 0xfa, 0x5f, + 0x5e, 0x59, 0x5b, 0xc3, 0x53, 0x52, 0xb8, 0x01, 0x66, 0xcd, 0x21, 0x73, + 0x02, 0x33, 0xdb, 0x89, 0xd8, 0x5a, 0x5b, 0xc3, 0xf6, 0xc4, 0xff, 0x74, + 0x0c, 0x81, 0x3e, 0xe2, 0x05, 0xa4, 0x03, 0x74, 0x01, 0xc3, 0xe9, 0xfd, + 0x00, 0xe9, 0x08, 0x01, 0x53, 0x51, 0x89, 0xc1, 0x89, 0xd0, 0x83, 0xfa, + 0xff, 0x74, 0x09, 0x8c, 0xda, 0x39, 0xd1, 0x75, 0x06, 0xe8, 0xf6, 0xe5, + 0x59, 0x5b, 0xc3, 0x89, 0xca, 0x31, 0xdb, 0xe8, 0x72, 0xe9, 0x59, 0x5b, + 0xc3, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, + 0x83, 0x3e, 0x60, 0x37, 0x00, 0x75, 0x3a, 0xbb, 0x2c, 0x00, 0x8e, 0x06, + 0x4c, 0x04, 0x31, 0xf6, 0x26, 0x8b, 0x07, 0x31, 0xd2, 0x89, 0x46, 0xfe, + 0x8e, 0xc0, 0x31, 0xdb, 0x30, 0xc0, 0x26, 0x3a, 0x07, 0x74, 0x0a, 0x43, + 0x26, 0x3a, 0x07, 0x75, 0xfa, 0x42, 0x43, 0xeb, 0xf1, 0x89, 0xd8, 0x29, + 0xf0, 0x75, 0x03, 0xb8, 0x01, 0x00, 0xe8, 0xb0, 0xd5, 0x89, 0xc1, 0x89, + 0xc3, 0x85, 0xc0, 0x75, 0x09, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, + 0x5b, 0xc3, 0x89, 0xd0, 0xd1, 0xe0, 0xd1, 0xe0, 0x29, 0xd0, 0x05, 0x02, + 0x00, 0xe8, 0x91, 0xd5, 0x89, 0xc7, 0x85, 0xc0, 0x74, 0x35, 0xa3, 0x60, + 0x37, 0x8e, 0x46, 0xfe, 0x89, 0x0e, 0x64, 0x37, 0x30, 0xc9, 0x8d, 0x45, + 0x02, 0x26, 0x3a, 0x0c, 0x74, 0x11, 0x89, 0x1d, 0x89, 0xc7, 0x26, 0x8a, + 0x04, 0x46, 0x88, 0x07, 0x43, 0x84, 0xc0, 0x75, 0xf5, 0xeb, 0xe7, 0xa3, + 0x5e, 0x37, 0x89, 0xd3, 0x31, 0xd2, 0xc7, 0x05, 0x00, 0x00, 0xe8, 0x32, + 0xd0, 0xeb, 0xae, 0x89, 0xc8, 0xe8, 0x46, 0xe5, 0xeb, 0xa7, 0xe8, 0x4d, + 0x00, 0xa1, 0x60, 0x37, 0x85, 0xc0, 0x75, 0x17, 0xa1, 0x62, 0x37, 0x85, + 0xc0, 0x74, 0x08, 0xe8, 0x30, 0xe5, 0x31, 0xc0, 0xa3, 0x62, 0x37, 0xa1, + 0x64, 0x37, 0x85, 0xc0, 0x75, 0x0b, 0xc3, 0xe8, 0x20, 0xe5, 0x31, 0xc0, + 0xa3, 0x60, 0x37, 0xeb, 0xdf, 0xe8, 0x16, 0xe5, 0x31, 0xc0, 0xa3, 0x64, + 0x37, 0xc3, 0x3d, 0x81, 0x82, 0x72, 0x08, 0x3d, 0x9a, 0x82, 0x77, 0x03, + 0x2d, 0x21, 0x00, 0xc3, 0x3d, 0x61, 0x00, 0x7c, 0x08, 0x3d, 0x7a, 0x00, + 0x7f, 0x03, 0x2d, 0x20, 0x00, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x57, 0x31, + 0xff, 0x83, 0x3e, 0x60, 0x37, 0x00, 0x74, 0x40, 0x31, 0xc9, 0x31, 0xd2, + 0xa1, 0x60, 0x37, 0x89, 0xc3, 0x01, 0xd3, 0x83, 0x3f, 0x00, 0x74, 0x18, + 0x8b, 0x36, 0x5e, 0x37, 0x01, 0xce, 0x80, 0x3c, 0x00, 0x75, 0x06, 0x83, + 0xc2, 0x02, 0x41, 0xeb, 0xe3, 0x8b, 0x07, 0xe8, 0xc0, 0xe4, 0xeb, 0xf3, + 0xe8, 0xbb, 0xe4, 0xb8, 0x02, 0x00, 0xe8, 0xc0, 0xd4, 0x89, 0xc3, 0xa3, + 0x60, 0x37, 0x85, 0xc0, 0x75, 0x25, 0xbf, 0xff, 0xff, 0xa3, 0x5e, 0x37, + 0x83, 0x3e, 0x62, 0x37, 0x00, 0x74, 0x3a, 0x31, 0xd2, 0xa1, 0x62, 0x37, + 0x89, 0xc3, 0x01, 0xd3, 0x83, 0x3f, 0x00, 0x74, 0x17, 0x8b, 0x07, 0xe8, + 0x8c, 0xe4, 0x83, 0xc2, 0x02, 0xeb, 0xea, 0xc7, 0x07, 0x00, 0x00, 0x83, + 0xc3, 0x02, 0x89, 0x1e, 0x5e, 0x37, 0xeb, 0xd4, 0xe8, 0x77, 0xe4, 0xb8, + 0x02, 0x00, 0xe8, 0x7c, 0xd4, 0x89, 0xc3, 0xa3, 0x62, 0x37, 0x85, 0xc0, + 0x75, 0x0b, 0xbf, 0xff, 0xff, 0x89, 0xf8, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, + 0xc3, 0xc7, 0x07, 0x00, 0x00, 0xeb, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x69, 0x70, + 0x73, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x3c, 0x66, 0x72, 0x6f, 0x6d, 0x20, + 0x66, 0x69, 0x6c, 0x65, 0x3e, 0x20, 0x3c, 0x74, 0x6f, 0x20, 0x66, 0x69, + 0x6c, 0x65, 0x3e, 0x20, 0x3c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, + 0x49, 0x50, 0x53, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x3e, 0x0a, 0x00, 0x68, + 0x00, 0x68, 0x65, 0x6c, 0x70, 0x00, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, + 0x6e, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x25, 0x73, 0x0a, + 0x00, 0x55, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, + 0x61, 0x72, 0x67, 0x0a, 0x00, 0x49, 0x50, 0x53, 0x20, 0x66, 0x69, 0x6c, + 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x0a, 0x00, + 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x0a, 0x00, 0x43, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, + 0x20, 0x66, 0x69, 0x6c, 0x65, 0x0a, 0x00, 0x4e, 0x6f, 0x74, 0x20, 0x61, + 0x20, 0x66, 0x69, 0x6c, 0x65, 0x0a, 0x00, 0x54, 0x6f, 0x20, 0x66, 0x69, + 0x6c, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x0a, + 0x00, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, + 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x0a, 0x00, 0x52, 0x75, + 0x6e, 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x20, 0x66, 0x61, 0x69, + 0x6c, 0x0a, 0x00, 0x50, 0x41, 0x54, 0x43, 0x48, 0x00, 0x45, 0x4f, 0x46, + 0x00, 0x00, 0x45, 0x58, 0x45, 0x00, 0x43, 0x4f, 0x4d, 0x00, 0x2a, 0x3f, + 0x00, 0x00, 0x41, 0x42, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x20, 0x54, + 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x00, + 0x4e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x00, 0x46, 0x6c, + 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x00, 0x54, 0x5a, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0a, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x0c, 0x0c, 0x0c, 0x0c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 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, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, + 0x3b, 0x00, 0x5a, 0x00, 0x78, 0x00, 0x97, 0x00, 0xb5, 0x00, 0xd4, 0x00, + 0xf3, 0x00, 0x11, 0x01, 0x30, 0x01, 0x4e, 0x01, 0x6d, 0x01, 0x00, 0x00, + 0x1f, 0x00, 0x3c, 0x00, 0x5b, 0x00, 0x79, 0x00, 0x98, 0x00, 0xb6, 0x00, + 0xd5, 0x00, 0xf4, 0x00, 0x12, 0x01, 0x31, 0x01, 0x4f, 0x01, 0x6e, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x01, 0x01, + 0x0b, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x03, 0xff, 0x0e, 0x07, 0x24, + 0x06, 0x08, 0x01, 0xff, 0x14, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x2d, + 0x85, 0x2d, 0x60, 0x32, 0x60, 0x32, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0x04, 0x2b, 0x05, 0x50, 0x46, 0x00, 0x00, 0x01, 0x00, 0x10, 0x0e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x9a, 0x0e, 0x00, 0x00, 0x00, 0x01, 0xd1, 0x1a, 0x00, 0x00, 0x00, 0x20, + 0xa6, 0x16, 0x00, 0x00, 0x00, 0x20, 0x27, 0x34, 0x00, 0x00, 0x00, 0x20, + 0x19, 0x45, 0x00, 0x00, 0x00, 0x20, 0x77, 0x0f, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x1b, 0x00, 0x00, 0x00, 0x14, 0xab, 0x17, 0x00, 0x00, 0x00, 0x1f, + 0xbe, 0x45, 0x00, 0x00 +}; + +struct BuiltinFileBlob bfb_IPSMAKE_EXE = { + /*recommended file name*/ "IPSMAKE.EXE", + /*data*/ bin_ipsmake_exe, + /*length*/ sizeof(bin_ipsmake_exe) +}; +#endif + diff --git a/src/builtin/ipspatch.cpp b/src/builtin/ipspatch.cpp new file mode 100644 index 00000000000..6fefdafbeef --- /dev/null +++ b/src/builtin/ipspatch.cpp @@ -0,0 +1,1640 @@ + +#include "dos_inc.h" + +#if !defined(OSFREE) +static const unsigned char bin_ipspatch_exe[] = { + 0x4d, 0x5a, 0x32, 0x00, 0x27, 0x00, 0x04, 0x00, 0x03, 0x00, 0x94, 0x01, + 0xff, 0xff, 0xd4, 0x05, 0x00, 0x08, 0x00, 0x00, 0x64, 0x0b, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x0b, 0x00, 0x00, + 0x2b, 0x0c, 0x00, 0x00, 0x10, 0x0d, 0x00, 0x00, 0xf3, 0x0d, 0x00, 0x00, + 0xcc, 0xeb, 0xfd, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x22, 0x00, 0x50, 0xb8, 0xde, 0x02, 0x50, + 0xe8, 0xd6, 0x02, 0x83, 0xc4, 0x04, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x34, 0x50, 0x52, 0xba, 0x01, 0x00, 0xb8, 0x02, + 0x00, 0x31, 0xf6, 0x3b, 0x56, 0xca, 0x7d, 0x61, 0x89, 0xc3, 0x03, 0x5e, + 0xc8, 0x42, 0x8b, 0x1f, 0x40, 0x40, 0x80, 0x3f, 0x2d, 0x75, 0x54, 0x43, + 0x80, 0x3f, 0x2d, 0x74, 0xfa, 0xbf, 0x4d, 0x00, 0x89, 0xde, 0xac, 0x8a, + 0x25, 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, + 0x85, 0xc0, 0x74, 0x17, 0xbf, 0x4f, 0x00, 0x89, 0xde, 0xac, 0x8a, 0x25, + 0x2a, 0xc4, 0x75, 0x05, 0x47, 0x3a, 0xc4, 0x75, 0xf4, 0x18, 0xe4, 0x85, + 0xc0, 0x75, 0x09, 0xe8, 0x92, 0xff, 0xb8, 0x01, 0x00, 0xe9, 0x99, 0x00, + 0x53, 0xb8, 0x54, 0x00, 0x50, 0xb8, 0xde, 0x02, 0x50, 0xe8, 0x61, 0x02, + 0xb8, 0x01, 0x00, 0x83, 0xc4, 0x06, 0xe9, 0x84, 0x00, 0xeb, 0x1d, 0x89, + 0xf1, 0x46, 0x83, 0xf9, 0x01, 0x74, 0x0a, 0x85, 0xc9, 0x75, 0x0c, 0x89, + 0x1e, 0xbe, 0x02, 0xeb, 0x86, 0x89, 0x1e, 0xc0, 0x02, 0xeb, 0x80, 0xb8, + 0x67, 0x00, 0xeb, 0x2b, 0xa1, 0xbe, 0x02, 0x85, 0xc0, 0x75, 0x05, 0xb8, + 0x77, 0x00, 0xeb, 0x1f, 0x8d, 0x56, 0xcc, 0xe8, 0x9a, 0x02, 0x85, 0xc0, + 0x74, 0x05, 0xb8, 0x8a, 0x00, 0xeb, 0x10, 0x8b, 0x46, 0xd0, 0x30, 0xc0, + 0x80, 0xe4, 0xf0, 0x3d, 0x00, 0x80, 0x74, 0x13, 0xb8, 0xa0, 0x00, 0x50, + 0xb8, 0xde, 0x02, 0x50, 0xe8, 0x06, 0x02, 0xb8, 0x01, 0x00, 0x83, 0xc4, + 0x04, 0xeb, 0x2a, 0xa1, 0xc0, 0x02, 0x85, 0xc0, 0x75, 0x05, 0xb8, 0xac, + 0x00, 0xeb, 0xe4, 0x8d, 0x56, 0xcc, 0xe8, 0x5f, 0x02, 0x85, 0xc0, 0x74, + 0x05, 0xb8, 0xc4, 0x00, 0xeb, 0xd5, 0x8b, 0x46, 0xd0, 0x30, 0xc0, 0x80, + 0xe4, 0xf0, 0x3d, 0x00, 0x80, 0x75, 0xc5, 0x30, 0xe4, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, + 0x83, 0xec, 0x06, 0xe8, 0xed, 0xfe, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x41, + 0x01, 0xb8, 0x00, 0x02, 0x50, 0xff, 0x36, 0xbe, 0x02, 0xe8, 0x24, 0x06, + 0x83, 0xc4, 0x04, 0x89, 0x46, 0xfe, 0x85, 0xc0, 0x7c, 0xe8, 0xbb, 0x05, + 0x00, 0xba, 0xf2, 0x05, 0xe8, 0x4a, 0x06, 0x3d, 0x05, 0x00, 0x75, 0xda, + 0xbf, 0xdf, 0x00, 0xbe, 0xf2, 0x05, 0x89, 0xc1, 0x8c, 0xd8, 0x8e, 0xc0, + 0x33, 0xc0, 0xf3, 0xa6, 0x74, 0x05, 0x19, 0xc0, 0x83, 0xd8, 0xff, 0x85, + 0xc0, 0x75, 0xbf, 0xb8, 0x02, 0x02, 0x50, 0xff, 0x36, 0xc0, 0x02, 0xe8, + 0xe6, 0x05, 0x83, 0xc4, 0x04, 0x89, 0x46, 0xfc, 0x85, 0xc0, 0x7c, 0xaa, + 0xbb, 0x05, 0x00, 0xba, 0xf2, 0x05, 0x8b, 0x46, 0xfe, 0xe8, 0x09, 0x06, + 0x3d, 0x03, 0x00, 0x75, 0x2c, 0xbf, 0xe5, 0x00, 0xbe, 0xf2, 0x05, 0x89, + 0xc1, 0x8c, 0xd8, 0x8e, 0xc0, 0x33, 0xc0, 0xf3, 0xa6, 0x74, 0x05, 0x19, + 0xc0, 0x83, 0xd8, 0xff, 0x85, 0xc0, 0x74, 0x0e, 0xb8, 0xe9, 0x00, 0x50, + 0xb8, 0xde, 0x02, 0x50, 0xe8, 0x2e, 0x01, 0x83, 0xc4, 0x04, 0xe9, 0x1d, + 0x01, 0x3d, 0x05, 0x00, 0x75, 0xf8, 0xa0, 0xf3, 0x05, 0x8a, 0x16, 0xf2, + 0x05, 0x31, 0xff, 0x30, 0xe4, 0x31, 0xf6, 0xb9, 0x08, 0x00, 0xd1, 0xe0, + 0xd1, 0xd7, 0xe2, 0xfa, 0x30, 0xf6, 0x01, 0xc6, 0xa0, 0xf4, 0x05, 0x11, + 0xfa, 0x30, 0xe4, 0x31, 0xff, 0x01, 0xc6, 0x8a, 0x26, 0xf5, 0x05, 0x11, + 0xfa, 0x89, 0xf3, 0x89, 0x56, 0xfa, 0x30, 0xc0, 0x8b, 0x4e, 0xfa, 0x8a, + 0x16, 0xf6, 0x05, 0x89, 0xc7, 0x30, 0xf6, 0x8b, 0x46, 0xfc, 0x01, 0xd7, + 0x30, 0xd2, 0xe8, 0x63, 0x06, 0x3b, 0x56, 0xfa, 0x75, 0x60, 0x39, 0xf0, + 0x75, 0x5c, 0x85, 0xff, 0x74, 0x5e, 0x81, 0xff, 0x00, 0x10, 0x72, 0x25, + 0xbb, 0x00, 0x10, 0xba, 0xf2, 0x05, 0x8b, 0x46, 0xfe, 0xe8, 0x6d, 0x05, + 0x3d, 0x00, 0x10, 0x75, 0x41, 0xba, 0xf2, 0x05, 0x89, 0xc3, 0x8b, 0x46, + 0xfc, 0xe8, 0x68, 0x07, 0x3d, 0x00, 0x10, 0x75, 0x31, 0x29, 0xc7, 0xeb, + 0xd5, 0x73, 0x2b, 0x85, 0xff, 0x76, 0x20, 0xba, 0xf2, 0x05, 0x8b, 0x46, + 0xfe, 0x89, 0xfb, 0xe8, 0x43, 0x05, 0x39, 0xf8, 0x75, 0x18, 0xba, 0xf2, + 0x05, 0x8b, 0x46, 0xfc, 0x89, 0xfb, 0xe8, 0x3f, 0x07, 0x39, 0xf8, 0x75, + 0x09, 0x29, 0xff, 0x85, 0xff, 0x75, 0x03, 0xe9, 0x12, 0xff, 0xb8, 0x01, + 0x00, 0xe9, 0x9d, 0xfe, 0xbb, 0x03, 0x00, 0xba, 0xf2, 0x05, 0x8b, 0x46, + 0xfe, 0xe8, 0x15, 0x05, 0x3d, 0x03, 0x00, 0x75, 0x55, 0xb9, 0x00, 0x10, + 0x8a, 0x26, 0xf2, 0x05, 0xbf, 0xf2, 0x05, 0x30, 0xc0, 0x8a, 0x16, 0xf3, + 0x05, 0x89, 0xc6, 0xa0, 0xf4, 0x05, 0x30, 0xf6, 0x57, 0x1e, 0x07, 0xf3, + 0xaa, 0x5f, 0x01, 0xd6, 0x81, 0xfe, 0x00, 0x10, 0x72, 0x15, 0xbb, 0x00, + 0x10, 0xba, 0xf2, 0x05, 0x8b, 0x46, 0xfc, 0xe8, 0xea, 0x06, 0x3d, 0x00, + 0x10, 0x75, 0xb3, 0x29, 0xc6, 0xeb, 0xe5, 0x73, 0xad, 0x85, 0xf6, 0x76, + 0x11, 0xba, 0xf2, 0x05, 0x8b, 0x46, 0xfc, 0x89, 0xf3, 0xe8, 0xd0, 0x06, + 0x39, 0xf0, 0x75, 0x9a, 0x29, 0xf6, 0x85, 0xf6, 0xeb, 0x8f, 0x8b, 0x46, + 0xfe, 0xe8, 0x75, 0x08, 0x31, 0xc0, 0xe9, 0x2c, 0xfe, 0x53, 0x52, 0x55, + 0x89, 0xe5, 0x8b, 0x46, 0x08, 0x8d, 0x5e, 0x0c, 0x8b, 0x56, 0x0a, 0xe8, + 0xf0, 0x0b, 0x5d, 0x5a, 0x5b, 0xc3, 0x53, 0x51, 0x55, 0x89, 0xe5, 0x50, + 0x89, 0xd0, 0xf6, 0x46, 0xfe, 0x10, 0x74, 0x05, 0xbb, 0x49, 0x40, 0xeb, + 0x36, 0xf6, 0x46, 0xfe, 0x40, 0x74, 0x05, 0xbb, 0x00, 0x20, 0xeb, 0x2b, + 0xba, 0x2e, 0x00, 0xbb, 0x00, 0x80, 0xe8, 0x5c, 0x0c, 0x85, 0xc0, 0x74, + 0x1e, 0x89, 0xc1, 0x41, 0xba, 0x02, 0x01, 0x89, 0xc8, 0xe8, 0xa6, 0x0c, + 0x85, 0xc0, 0x74, 0x0c, 0xba, 0x06, 0x01, 0x89, 0xc8, 0xe8, 0x9a, 0x0c, + 0x85, 0xc0, 0x75, 0x03, 0x80, 0xcb, 0x49, 0x81, 0xcb, 0x24, 0x01, 0xf6, + 0x46, 0xfe, 0x01, 0x75, 0x03, 0x80, 0xcb, 0x92, 0x89, 0xd8, 0x89, 0xec, + 0x5d, 0x59, 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x81, + 0xec, 0x54, 0x01, 0x81, 0xed, 0x80, 0x00, 0x89, 0xc7, 0x89, 0xd6, 0x31, + 0xc9, 0x80, 0x3d, 0x00, 0x74, 0x0a, 0xba, 0x0a, 0x01, 0xe8, 0xb7, 0x0c, + 0x85, 0xc0, 0x74, 0x0f, 0xe8, 0xe2, 0x0c, 0x89, 0xc3, 0xb8, 0xff, 0xff, + 0xc7, 0x07, 0x01, 0x00, 0xe9, 0x19, 0x02, 0xbb, 0x90, 0x00, 0x8d, 0x86, + 0x2c, 0xff, 0x89, 0xfa, 0xe8, 0x99, 0x0e, 0x85, 0xc0, 0x74, 0x25, 0x8a, + 0x9e, 0x2c, 0xff, 0x30, 0xff, 0xf6, 0x87, 0x63, 0x01, 0xc0, 0x74, 0x18, + 0x80, 0xbe, 0x2d, 0xff, 0x3a, 0x75, 0x11, 0x80, 0xbe, 0x2e, 0xff, 0x5c, + 0x75, 0x0a, 0x80, 0xbe, 0x2f, 0xff, 0x00, 0x75, 0x03, 0xb9, 0x01, 0x00, + 0x8a, 0x1d, 0x30, 0xff, 0x89, 0xf8, 0xf6, 0x87, 0x63, 0x01, 0xc0, 0x74, + 0x09, 0x80, 0x7d, 0x01, 0x3a, 0x75, 0x03, 0x8d, 0x45, 0x02, 0x89, 0xc3, + 0x80, 0x3f, 0x2f, 0x74, 0x05, 0x80, 0x3f, 0x5c, 0x75, 0x08, 0x89, 0xc3, + 0x80, 0x7f, 0x01, 0x00, 0x74, 0x04, 0x85, 0xc9, 0x74, 0x37, 0xba, 0x90, + 0x00, 0x8d, 0x46, 0xbc, 0xe8, 0x9f, 0x0e, 0x89, 0xf8, 0xe8, 0x12, 0x0f, + 0x85, 0xc0, 0x74, 0x06, 0xb8, 0xff, 0xff, 0xe9, 0x9e, 0x01, 0x8d, 0x46, + 0xbc, 0xe8, 0x02, 0x0f, 0xc6, 0x46, 0x61, 0x10, 0x31, 0xc0, 0xc6, 0x46, + 0x6a, 0x00, 0x89, 0x46, 0x62, 0x89, 0x46, 0x64, 0x89, 0x46, 0x66, 0x89, + 0x46, 0x68, 0xe9, 0xc9, 0x00, 0x8d, 0x5e, 0x4c, 0xba, 0x37, 0x00, 0x89, + 0xf8, 0xe8, 0xea, 0x0e, 0x85, 0xc0, 0x74, 0x3c, 0x30, 0xc0, 0x88, 0x46, + 0x7e, 0x88, 0x46, 0x7c, 0x88, 0x46, 0x7a, 0x30, 0xe4, 0x89, 0x46, 0x78, + 0xb8, 0x01, 0x00, 0x50, 0x57, 0xe8, 0x10, 0x03, 0x83, 0xc4, 0x04, 0x89, + 0xc1, 0x3d, 0xff, 0xff, 0x74, 0x21, 0x89, 0xf2, 0xc6, 0x46, 0x7c, 0x01, + 0xe8, 0xe4, 0x0e, 0x3d, 0xff, 0xff, 0x75, 0x0f, 0xe8, 0xfa, 0x0b, 0x89, + 0xc3, 0x8b, 0x07, 0x89, 0x46, 0x78, 0xeb, 0x07, 0xe9, 0x75, 0x00, 0xc6, + 0x46, 0x7a, 0x01, 0x89, 0xc8, 0xe8, 0xd9, 0x06, 0x31, 0xc0, 0x50, 0x57, + 0xe8, 0xd9, 0x02, 0x83, 0xc4, 0x04, 0x89, 0xc1, 0x3d, 0xff, 0xff, 0x74, + 0x1e, 0xc6, 0x46, 0x7e, 0x01, 0x80, 0x7e, 0x7a, 0x00, 0x75, 0x14, 0x89, + 0xf2, 0xe8, 0xa7, 0x0e, 0x3d, 0xff, 0xff, 0x75, 0x0a, 0xe8, 0xbd, 0x0b, + 0x89, 0xc3, 0x8b, 0x07, 0x89, 0x46, 0x78, 0x89, 0xc8, 0xe8, 0xa5, 0x06, + 0x80, 0x7e, 0x7e, 0x00, 0x75, 0x09, 0x80, 0x7e, 0x7c, 0x00, 0x75, 0x03, + 0xe9, 0xbd, 0xfe, 0xe8, 0x9f, 0x0b, 0x89, 0xc3, 0x8b, 0x46, 0x78, 0x89, + 0x07, 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x30, 0xff, 0x80, 0x7e, 0x7e, 0x00, + 0x74, 0x05, 0x81, 0x4c, 0x04, 0x24, 0x01, 0x80, 0x7e, 0x7c, 0x00, 0x74, + 0x04, 0x80, 0x4c, 0x04, 0x92, 0xe9, 0xba, 0x00, 0x8d, 0x46, 0x4c, 0xe8, + 0x52, 0x0e, 0x8a, 0x1d, 0x30, 0xff, 0xf6, 0x87, 0x63, 0x01, 0xc0, 0x74, + 0x11, 0x80, 0x7d, 0x01, 0x3a, 0x75, 0x0b, 0x89, 0xd8, 0xe8, 0x6a, 0x0f, + 0x98, 0x2d, 0x61, 0x00, 0xeb, 0x06, 0xb4, 0x19, 0xcd, 0x21, 0x30, 0xe4, + 0x89, 0x04, 0x8b, 0x04, 0x89, 0x44, 0x0e, 0x8b, 0x46, 0x66, 0x89, 0x44, + 0x10, 0x8b, 0x46, 0x68, 0x89, 0x44, 0x12, 0x8a, 0x46, 0x61, 0x8d, 0x56, + 0x6a, 0x98, 0xe8, 0xcd, 0xfd, 0x89, 0x44, 0x04, 0x8b, 0x56, 0x62, 0x8b, + 0x46, 0x64, 0xe8, 0x43, 0x0f, 0xc7, 0x44, 0x06, 0x01, 0x00, 0xc7, 0x44, + 0x0c, 0x00, 0x00, 0x89, 0x44, 0x18, 0x89, 0x54, 0x1a, 0x89, 0x54, 0x22, + 0x8b, 0x44, 0x18, 0x8b, 0x54, 0x18, 0x89, 0x44, 0x20, 0x89, 0x54, 0x14, + 0x8b, 0x44, 0x1a, 0x89, 0x44, 0x16, 0x8b, 0x44, 0x18, 0x89, 0x44, 0x1c, + 0x8b, 0x54, 0x1a, 0x8b, 0x44, 0x0c, 0x89, 0x54, 0x1e, 0x99, 0x89, 0x44, + 0x08, 0x89, 0x54, 0x0a, 0x8b, 0x44, 0x08, 0x89, 0x44, 0x02, 0x8a, 0x46, + 0x61, 0xc7, 0x44, 0x28, 0x00, 0x00, 0xc7, 0x44, 0x2a, 0x00, 0x00, 0xc7, + 0x44, 0x2c, 0x00, 0x00, 0xc7, 0x44, 0x2e, 0x00, 0x00, 0xc7, 0x44, 0x30, + 0x00, 0x00, 0x98, 0xc6, 0x44, 0x32, 0x00, 0x99, 0x89, 0x44, 0x24, 0x89, + 0x54, 0x26, 0x31, 0xc0, 0x8d, 0xa6, 0x80, 0x00, 0x5d, 0x5f, 0x5e, 0x59, + 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x89, 0xc6, + 0x89, 0x56, 0xfc, 0x89, 0x5e, 0xf8, 0x89, 0xcf, 0xc7, 0x46, 0xf6, 0xff, + 0xff, 0x80, 0x3c, 0x20, 0x75, 0x03, 0x46, 0xeb, 0xf8, 0x8b, 0x46, 0xfc, + 0x25, 0x83, 0x00, 0x8d, 0x5e, 0xf6, 0x89, 0xc2, 0x89, 0x46, 0xfa, 0x0b, + 0x56, 0xf8, 0x89, 0xf0, 0xe8, 0x02, 0x0f, 0x85, 0xc0, 0x75, 0x09, 0x8b, + 0x46, 0xf6, 0x3b, 0x06, 0xda, 0x03, 0x73, 0x50, 0xf6, 0x46, 0xfc, 0x03, + 0x74, 0x35, 0x8b, 0x46, 0xf6, 0x3d, 0xff, 0xff, 0x74, 0x2d, 0xe8, 0x24, + 0x0f, 0x85, 0xc0, 0x75, 0x26, 0xf6, 0x46, 0xfd, 0x04, 0x74, 0x06, 0xf6, + 0x46, 0xfc, 0x20, 0x75, 0x45, 0xf6, 0x46, 0xfc, 0x40, 0x74, 0x14, 0x8d, + 0x56, 0xfe, 0x8b, 0x5e, 0xf6, 0x31, 0xc9, 0xb4, 0x40, 0xcd, 0x21, 0x19, + 0xd2, 0x89, 0xc1, 0x85, 0xd2, 0x7c, 0x42, 0x83, 0x7e, 0xf6, 0xff, 0x75, + 0x4c, 0xf6, 0x46, 0xfc, 0x20, 0x75, 0x48, 0xb8, 0xff, 0xff, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0xc3, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, + 0xe8, 0x16, 0x0a, 0x89, 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x0b, 0x00, + 0xeb, 0xe4, 0x8b, 0x5e, 0xf6, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0xe8, + 0xff, 0x09, 0x89, 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x07, 0x00, 0xeb, + 0xcd, 0x8b, 0x5e, 0xf6, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x89, 0xc8, + 0xe8, 0xd0, 0x0e, 0xeb, 0xbd, 0xeb, 0x44, 0xe8, 0x33, 0x0f, 0x89, 0xc3, + 0x8b, 0x07, 0x3d, 0x02, 0x00, 0x75, 0xac, 0x01, 0xc7, 0x8b, 0x45, 0xfe, + 0x85, 0xc0, 0x75, 0x03, 0xb8, 0x80, 0x01, 0x8b, 0x16, 0x1a, 0x04, 0xf7, + 0xd2, 0x21, 0xd0, 0x31, 0xd2, 0xa8, 0x80, 0x75, 0x03, 0xba, 0x01, 0x00, + 0x8d, 0x5e, 0xf6, 0x89, 0xf0, 0xe8, 0x09, 0x0f, 0x85, 0xc0, 0x75, 0x83, + 0x8b, 0x46, 0xf6, 0x3b, 0x06, 0xda, 0x03, 0x73, 0x63, 0x83, 0x7e, 0xf8, + 0x00, 0x75, 0x68, 0x8b, 0x46, 0xf6, 0xe8, 0x30, 0x0e, 0x24, 0x3c, 0x89, + 0xc2, 0x8b, 0x46, 0xf6, 0xe8, 0x52, 0x0e, 0x85, 0xc0, 0x74, 0x03, 0x80, + 0xce, 0x20, 0x80, 0x66, 0xfa, 0x7f, 0x83, 0x7e, 0xfa, 0x02, 0x75, 0x03, + 0x80, 0xca, 0x03, 0x83, 0x7e, 0xfa, 0x00, 0x75, 0x03, 0x80, 0xca, 0x01, + 0x83, 0x7e, 0xfa, 0x01, 0x75, 0x03, 0x80, 0xca, 0x02, 0xf6, 0x46, 0xfc, + 0x10, 0x74, 0x03, 0x80, 0xca, 0x80, 0x89, 0xd0, 0x0c, 0x40, 0xf6, 0x46, + 0xfd, 0x03, 0x74, 0x46, 0xf6, 0x46, 0xfd, 0x02, 0x74, 0x02, 0x89, 0xc2, + 0x8b, 0x46, 0xf6, 0xe8, 0x48, 0x0f, 0x8b, 0x46, 0xf6, 0xe9, 0x1a, 0xff, + 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0xe9, 0x1d, 0xff, 0x89, + 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7d, 0x03, 0xe9, + 0x3e, 0xff, 0x8b, 0x56, 0xfa, 0x8d, 0x5e, 0xf6, 0x89, 0xf0, 0x0b, 0x56, + 0xf8, 0xe8, 0x9d, 0x0d, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x74, 0xff, 0xe9, + 0xe5, 0xfe, 0x81, 0x3e, 0x1c, 0x04, 0x00, 0x02, 0x75, 0xba, 0xeb, 0xb6, + 0x53, 0x55, 0x89, 0xe5, 0x8d, 0x5e, 0x0a, 0x8b, 0x07, 0x50, 0x31, 0xc0, + 0x50, 0xff, 0x76, 0x08, 0xff, 0x76, 0x06, 0x83, 0xc3, 0x02, 0xe8, 0x06, + 0x00, 0x83, 0xc4, 0x08, 0x5d, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x55, 0x89, + 0xe5, 0x8b, 0x46, 0x0a, 0x8d, 0x4e, 0x10, 0x8b, 0x5e, 0x0e, 0x8b, 0x56, + 0x0c, 0xe8, 0x1e, 0xfe, 0x5d, 0x5a, 0x59, 0x5b, 0xc3, 0x51, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x50, 0xe8, 0x09, 0x0f, 0x8b, 0x46, + 0xf6, 0x89, 0x56, 0xfc, 0xe8, 0x4e, 0x0d, 0x89, 0x46, 0xf8, 0x85, 0xc0, + 0x74, 0x41, 0xa8, 0x01, 0x74, 0x4b, 0xa8, 0x40, 0x75, 0x55, 0x89, 0x5e, + 0xfe, 0x31, 0xff, 0x8b, 0x4e, 0xfe, 0x8b, 0x56, 0xfc, 0x8b, 0x5e, 0xf6, + 0xb4, 0x3f, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7c, 0x57, 0x89, 0x46, + 0xfa, 0x85, 0xc0, 0x74, 0x47, 0x8b, 0x5e, 0xfc, 0x31, 0xc0, 0x31, 0xd2, + 0x3b, 0x56, 0xfa, 0x73, 0x63, 0x80, 0x3f, 0x1a, 0x74, 0x44, 0x80, 0x3f, + 0x0d, 0x75, 0x5b, 0x43, 0x42, 0xeb, 0xed, 0xe8, 0x6b, 0x08, 0x89, 0xc3, + 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x04, 0x00, 0xeb, 0x21, 0xe8, 0x5d, 0x08, + 0x89, 0xc3, 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x06, 0x00, 0xeb, 0x13, 0x89, + 0xd9, 0x8b, 0x5e, 0xf6, 0xb4, 0x3f, 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, + 0x7c, 0x0b, 0x89, 0xc7, 0x89, 0xf8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, + 0xc3, 0xe8, 0x1f, 0x0d, 0xeb, 0xf4, 0x8b, 0x46, 0xf6, 0x89, 0xd3, 0x31, + 0xc9, 0xba, 0x01, 0x00, 0x2b, 0x5e, 0xfa, 0x19, 0xc9, 0x83, 0xc3, 0x01, + 0x83, 0xd1, 0x00, 0xe8, 0xa4, 0x0e, 0xeb, 0xd8, 0xeb, 0x0d, 0x89, 0xc6, + 0x47, 0x8a, 0x0f, 0x03, 0x76, 0xfc, 0x40, 0x88, 0x0c, 0xeb, 0x98, 0x01, + 0x46, 0xfc, 0x29, 0x46, 0xfe, 0xf6, 0x46, 0xf9, 0x20, 0x75, 0xbd, 0x83, + 0x7e, 0xfe, 0x00, 0x74, 0xb7, 0xe9, 0x53, 0xff, 0x56, 0x57, 0x89, 0xc6, + 0x89, 0xd7, 0xe8, 0x84, 0x0c, 0x85, 0xc9, 0x7f, 0x06, 0x75, 0x12, 0x85, + 0xdb, 0x76, 0x0e, 0xa8, 0x80, 0x75, 0x0a, 0x80, 0xcc, 0x80, 0x89, 0xc2, + 0x89, 0xf0, 0xe8, 0x83, 0x0c, 0x89, 0xfa, 0x89, 0xf0, 0xe8, 0x56, 0x0e, + 0x5f, 0x5e, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x81, + 0xec, 0x04, 0x02, 0x50, 0xba, 0x01, 0x00, 0x31, 0xdb, 0x31, 0xc9, 0xe8, + 0x3c, 0x0e, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0x83, 0xfa, 0xff, 0x75, 0x11, + 0x3d, 0xff, 0xff, 0x75, 0x0c, 0xb8, 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5f, + 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xba, 0x02, 0x00, 0x8b, 0x86, 0xfa, 0xfd, + 0x31, 0xdb, 0x31, 0xc9, 0xe8, 0x13, 0x0e, 0x89, 0x46, 0xfc, 0x89, 0xd1, + 0x83, 0xfa, 0xff, 0x75, 0x05, 0x3d, 0xff, 0xff, 0x74, 0xd7, 0x8b, 0x46, + 0xfe, 0x39, 0xc2, 0x7c, 0x07, 0x75, 0x4f, 0x3b, 0x76, 0xfc, 0x76, 0x4a, + 0xbb, 0x00, 0x02, 0x8d, 0x86, 0xfc, 0xfd, 0x31, 0xd2, 0xe8, 0x28, 0x0e, + 0x2b, 0x76, 0xfc, 0x8b, 0x46, 0xfe, 0x19, 0xc8, 0xbf, 0x00, 0x02, 0x89, + 0xc1, 0x85, 0xc9, 0x7f, 0x06, 0x75, 0x45, 0x85, 0xf6, 0x76, 0x41, 0x85, + 0xc9, 0x7c, 0x08, 0x75, 0x08, 0x81, 0xfe, 0x00, 0x02, 0x73, 0x02, 0x89, + 0xf7, 0x8d, 0x96, 0xfc, 0xfd, 0x8b, 0x86, 0xfa, 0xfd, 0x89, 0xfb, 0xe8, + 0x6e, 0x00, 0x85, 0xc0, 0x7c, 0x8a, 0x31, 0xc0, 0x29, 0xfe, 0x19, 0xc1, + 0xeb, 0xcf, 0x89, 0xf3, 0x89, 0xc1, 0x31, 0xd2, 0x8b, 0x86, 0xfa, 0xfd, + 0xe8, 0x9f, 0x0d, 0x83, 0xfa, 0xff, 0x75, 0x08, 0x3d, 0xff, 0xff, 0x75, + 0x03, 0xe9, 0x65, 0xff, 0x31, 0xc0, 0xe9, 0x63, 0xff, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xde, 0x89, 0xcf, 0x89, 0xd9, 0x89, + 0xc3, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xb4, 0x40, 0xcd, 0x21, 0x19, 0xd2, + 0x85, 0xd2, 0x7c, 0x0f, 0x89, 0x05, 0x39, 0xc6, 0x75, 0x0e, 0x8b, 0x46, + 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0xe8, 0xbd, 0x0b, 0xeb, 0xf5, + 0xe8, 0xce, 0x06, 0x89, 0xc6, 0xc7, 0x46, 0xfe, 0x0c, 0x00, 0xc7, 0x04, + 0x0c, 0x00, 0xeb, 0xe2, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x08, 0x50, 0x52, 0x53, 0xe8, 0x4a, 0x0b, 0x89, 0x46, 0xfe, 0x85, 0xc0, + 0x75, 0x03, 0xe9, 0x7a, 0x00, 0xa8, 0x02, 0x74, 0x68, 0xa8, 0x80, 0x74, + 0x1a, 0xf6, 0xc4, 0x20, 0x75, 0x15, 0xb0, 0x02, 0x8b, 0x5e, 0xf6, 0x31, + 0xd2, 0x31, 0xc9, 0xb4, 0x42, 0xcd, 0x21, 0xd1, 0xd2, 0xd1, 0xca, 0x85, + 0xd2, 0x7c, 0x66, 0xc7, 0x46, 0xf8, 0x00, 0x00, 0x31, 0xc9, 0xf6, 0x46, + 0xff, 0x80, 0x74, 0x14, 0x8b, 0x56, 0xfe, 0x8b, 0x46, 0xf6, 0x80, 0xe6, + 0x7f, 0xe8, 0x1c, 0x0b, 0x8b, 0x46, 0xf6, 0xe8, 0x9d, 0xfe, 0x89, 0xc1, + 0x85, 0xc9, 0x75, 0x17, 0xf6, 0x46, 0xfe, 0x40, 0x74, 0x43, 0x8d, 0x4e, + 0xf8, 0x8b, 0x5e, 0xf2, 0x8b, 0x56, 0xf4, 0x8b, 0x46, 0xf6, 0xe8, 0x48, + 0xff, 0x89, 0xc1, 0x83, 0xf9, 0xff, 0x75, 0x2a, 0x89, 0xc8, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x59, 0xc3, 0xe8, 0x39, 0x06, 0x89, 0xc3, 0xb8, 0xff, + 0xff, 0xc7, 0x07, 0x06, 0x00, 0xeb, 0xeb, 0xe8, 0x2b, 0x06, 0x89, 0xc3, + 0xb8, 0xff, 0xff, 0xc7, 0x07, 0x04, 0x00, 0xeb, 0xdd, 0xe8, 0x07, 0x0b, + 0xeb, 0xd8, 0xe9, 0x06, 0x01, 0xe8, 0xf7, 0x0c, 0x89, 0x46, 0xfa, 0x3d, + 0xb0, 0x00, 0x73, 0x03, 0xe9, 0x15, 0x0d, 0xbe, 0x00, 0x02, 0x81, 0x7e, + 0xfa, 0x30, 0x02, 0x73, 0x03, 0xe9, 0x72, 0x00, 0x8d, 0x44, 0x01, 0x24, + 0xfe, 0x2b, 0xe0, 0x31, 0xc0, 0x89, 0xe7, 0x89, 0x46, 0xfc, 0x89, 0x46, + 0xfa, 0x8b, 0x46, 0xfa, 0x3b, 0x46, 0xf2, 0x73, 0x32, 0x8b, 0x5e, 0xf4, + 0x01, 0xc3, 0x80, 0x3f, 0x0a, 0x75, 0x6c, 0x8b, 0x5e, 0xfc, 0x01, 0xfb, + 0xc6, 0x07, 0x0d, 0xff, 0x46, 0xfc, 0x8b, 0x46, 0xfc, 0x39, 0xc6, 0x75, + 0x5a, 0x8d, 0x4e, 0xfc, 0x89, 0xc3, 0x89, 0xfa, 0x8b, 0x46, 0xf6, 0xe8, + 0xb7, 0xfe, 0x89, 0xc2, 0x89, 0xc1, 0x3d, 0xff, 0xff, 0x75, 0x2e, 0x8b, + 0x46, 0xfc, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x5e, 0xff, 0x8d, 0x4e, 0xfa, + 0x89, 0xc3, 0x89, 0xfa, 0x8b, 0x46, 0xf6, 0xe8, 0x97, 0xfe, 0x89, 0xc1, + 0x3d, 0x0c, 0x00, 0x75, 0x0e, 0x8b, 0x46, 0xfa, 0x01, 0x46, 0xf8, 0xe9, + 0x41, 0xff, 0xbe, 0x80, 0x00, 0xeb, 0x89, 0xeb, 0x69, 0x8b, 0x46, 0xfc, + 0x01, 0x46, 0xf8, 0x83, 0xfa, 0x0c, 0x74, 0xc7, 0x8b, 0x46, 0xfa, 0xc7, + 0x46, 0xfc, 0x00, 0x00, 0x89, 0x46, 0xf8, 0x8b, 0x5e, 0xf4, 0x8b, 0x56, + 0xfc, 0x03, 0x5e, 0xfa, 0x01, 0xfa, 0x8a, 0x07, 0x89, 0xd3, 0x88, 0x07, + 0xff, 0x46, 0xfc, 0x8b, 0x46, 0xfc, 0xff, 0x46, 0xfa, 0x39, 0xc6, 0x74, + 0x03, 0xe9, 0x61, 0xff, 0x8d, 0x4e, 0xfc, 0x89, 0xc3, 0x89, 0xfa, 0x8b, + 0x46, 0xf6, 0xe8, 0x3c, 0xfe, 0x89, 0xc2, 0x89, 0xc1, 0x3d, 0xff, 0xff, + 0x74, 0x85, 0x8b, 0x46, 0xfc, 0x01, 0x46, 0xf8, 0x83, 0xfa, 0x0c, 0x75, + 0x03, 0xe9, 0x77, 0xff, 0x8b, 0x46, 0xfa, 0xc7, 0x46, 0xfc, 0x00, 0x00, + 0x89, 0x46, 0xf8, 0xe9, 0x2f, 0xff, 0x8b, 0x46, 0xf2, 0x89, 0x46, 0xf8, + 0xe9, 0xc8, 0xfe, 0x8b, 0x46, 0xf8, 0xe9, 0xc9, 0xfe, 0xe9, 0x2f, 0x0c, + 0xeb, 0x37, 0x03, 0x00, 0x2a, 0x2a, 0x2a, 0x20, 0x4e, 0x55, 0x4c, 0x4c, + 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, + 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x00, 0x4e, 0x6f, 0x74, + 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x00, 0x63, 0x6f, 0x6e, 0x00, 0x0d, 0x0a, 0xfb, 0xb9, 0x61, + 0x04, 0x8e, 0xc1, 0xbb, 0x2c, 0x17, 0x83, 0xc3, 0x0f, 0x80, 0xe3, 0xf0, + 0x26, 0x89, 0x1e, 0x28, 0x04, 0x26, 0x8c, 0x1e, 0x22, 0x04, 0x03, 0xdc, + 0x83, 0xc3, 0x0f, 0x80, 0xe3, 0xf0, 0x8e, 0xd1, 0x8b, 0xe3, 0x26, 0x89, + 0x1e, 0x2a, 0x04, 0x8b, 0xd3, 0xd1, 0xea, 0xd1, 0xea, 0xd1, 0xea, 0xd1, + 0xea, 0x26, 0x80, 0x3e, 0x26, 0x04, 0x00, 0x75, 0x3d, 0x8b, 0x0e, 0x02, + 0x00, 0x8c, 0xc0, 0x2b, 0xc8, 0x3b, 0xd1, 0x72, 0x0b, 0xbb, 0x01, 0x00, + 0xb8, 0x85, 0x0b, 0x8c, 0xca, 0xe9, 0xcf, 0x0b, 0x8c, 0xc0, 0x8b, 0xda, + 0xd1, 0xe3, 0xd1, 0xe3, 0xd1, 0xe3, 0xd1, 0xe3, 0x75, 0x03, 0xbb, 0xfe, + 0xff, 0x26, 0x89, 0x1e, 0x20, 0x04, 0x8b, 0xda, 0x03, 0xd8, 0x26, 0xa1, + 0x22, 0x04, 0x8e, 0xc0, 0x2b, 0xd8, 0xb4, 0x4a, 0xcd, 0x21, 0x8c, 0xdf, + 0x8e, 0xc7, 0xbf, 0x81, 0x00, 0x8a, 0x4d, 0xff, 0x32, 0xed, 0xfc, 0xb0, + 0x20, 0xf3, 0xae, 0x8d, 0x75, 0xff, 0xba, 0x61, 0x04, 0x8e, 0xc2, 0x26, + 0x8b, 0x3e, 0x28, 0x04, 0x26, 0x89, 0x3e, 0x41, 0x04, 0x26, 0x8c, 0x06, + 0x43, 0x04, 0x74, 0x03, 0x41, 0xf3, 0xa4, 0x2a, 0xc0, 0xaa, 0xaa, 0x4f, + 0xb4, 0x30, 0xcd, 0x21, 0x26, 0xa2, 0x24, 0x04, 0x26, 0x88, 0x26, 0x25, + 0x04, 0x8b, 0xcf, 0x3c, 0x03, 0x72, 0x58, 0x8e, 0x1e, 0x2c, 0x00, 0x2b, + 0xf6, 0xbd, 0x00, 0x01, 0x8b, 0x04, 0x0d, 0x20, 0x20, 0x3d, 0x6e, 0x6f, + 0x75, 0x12, 0x81, 0x7c, 0x02, 0x38, 0x37, 0x75, 0x27, 0x80, 0x7c, 0x04, + 0x3d, 0x75, 0x21, 0x83, 0xcd, 0x01, 0xeb, 0x1c, 0x3d, 0x6c, 0x66, 0x75, + 0x1a, 0x8b, 0x44, 0x02, 0x0c, 0x20, 0x3d, 0x6e, 0x3d, 0x75, 0x10, 0x8a, + 0x44, 0x04, 0x0c, 0x20, 0x3c, 0x6e, 0x75, 0x07, 0x81, 0xe5, 0xff, 0xfe, + 0x83, 0xc6, 0x05, 0x80, 0x3c, 0x00, 0xac, 0x75, 0xfa, 0x80, 0x3c, 0x00, + 0x75, 0xba, 0xac, 0x46, 0x46, 0x80, 0x3c, 0x00, 0xa4, 0x75, 0xfa, 0x8e, + 0xda, 0x8b, 0xf1, 0x89, 0x36, 0x45, 0x04, 0x8c, 0x06, 0x47, 0x04, 0x8b, + 0xdc, 0x8b, 0xc5, 0xa2, 0x30, 0x04, 0x20, 0x26, 0x4a, 0x04, 0x89, 0x3e, + 0x28, 0x04, 0xb9, 0x2c, 0x17, 0xbf, 0xf2, 0x05, 0x2b, 0xcf, 0x32, 0xc0, + 0xf3, 0xaa, 0x83, 0x3e, 0x31, 0x04, 0x00, 0x75, 0x18, 0xb8, 0xfa, 0x0d, + 0xa3, 0x31, 0x04, 0x8c, 0x0e, 0x33, 0x04, 0xa3, 0x35, 0x04, 0x8c, 0x0e, + 0x37, 0x04, 0xa3, 0x39, 0x04, 0x8c, 0x0e, 0x3b, 0x04, 0x33, 0xed, 0xb8, + 0xf9, 0x0d, 0xa3, 0x3d, 0x04, 0x8c, 0x0e, 0x3f, 0x04, 0xb8, 0xff, 0x00, + 0xe8, 0x0b, 0x0b, 0xe9, 0xc8, 0x0a, 0x50, 0xba, 0x61, 0x04, 0x8e, 0xda, + 0xfc, 0x8d, 0x3e, 0x00, 0x00, 0x8e, 0xc2, 0xb9, 0x10, 0x00, 0xb8, 0x01, + 0x01, 0xf3, 0xaf, 0x74, 0x39, 0x5b, 0xb8, 0x68, 0x0b, 0x8c, 0xca, 0xbc, + 0xac, 0x17, 0x53, 0x50, 0x52, 0x8c, 0xcf, 0x8e, 0xdf, 0xba, 0x97, 0x0b, + 0xb8, 0x01, 0x3d, 0xcd, 0x21, 0x8b, 0xd8, 0x1f, 0x5a, 0x8b, 0xf2, 0xfc, + 0xac, 0x84, 0xc0, 0x75, 0xfb, 0x8b, 0xce, 0x2b, 0xca, 0x49, 0xb4, 0x40, + 0xcd, 0x21, 0x8e, 0xdf, 0xba, 0x9b, 0x0b, 0xb9, 0x02, 0x00, 0xb4, 0x40, + 0xcd, 0x21, 0x33, 0xc0, 0xba, 0x0f, 0x00, 0xe8, 0x07, 0x0b, 0x58, 0xb4, + 0x4c, 0xcd, 0x21, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x57, 0x61, 0x74, 0x63, + 0x6f, 0x6d, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x31, 0x36, 0x20, 0x52, + 0x75, 0x6e, 0x2d, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2e, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, + 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x57, + 0x61, 0x74, 0x63, 0x6f, 0x6d, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x20, 0x32, 0x30, 0x30, 0x32, 0x2d, + 0x32, 0x30, 0x32, 0x35, 0x2e, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x20, 0x28, 0x43, 0x29, 0x20, 0x53, 0x79, 0x62, 0x61, 0x73, 0x65, 0x2c, + 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x31, 0x39, 0x38, 0x38, 0x2d, 0x32, + 0x30, 0x30, 0x32, 0x2e, 0x00, 0x50, 0xb8, 0x61, 0x04, 0x8e, 0xd8, 0x58, + 0xc3, 0xcb, 0xcb, 0x00, 0x53, 0x52, 0x56, 0x57, 0x80, 0x26, 0xe5, 0x02, + 0xf8, 0xbe, 0xc2, 0x02, 0x80, 0x0e, 0xe5, 0x02, 0x04, 0x8b, 0x44, 0x06, + 0x85, 0xc0, 0x75, 0x08, 0xa3, 0xf4, 0x15, 0x5f, 0x5e, 0x5a, 0x5b, 0xc3, + 0xb8, 0x0c, 0x00, 0xe8, 0x4d, 0x0c, 0x85, 0xc0, 0x74, 0x2a, 0x89, 0xc7, + 0xa1, 0xf2, 0x15, 0x89, 0x75, 0x02, 0x89, 0x05, 0x89, 0x7c, 0x04, 0xc7, + 0x45, 0x04, 0x00, 0x00, 0x89, 0x3e, 0xf2, 0x15, 0x8b, 0x7c, 0x04, 0xc6, + 0x45, 0x0a, 0x00, 0x8b, 0x7c, 0x04, 0x83, 0xc6, 0x0e, 0xc7, 0x45, 0x06, + 0x00, 0x00, 0xeb, 0xbd, 0xb8, 0x0c, 0x00, 0xe8, 0x19, 0x0c, 0x89, 0xc7, + 0x85, 0xc0, 0x75, 0xcc, 0xbb, 0x01, 0x00, 0xb8, 0x0e, 0x01, 0x8c, 0xda, + 0xe9, 0x58, 0x09, 0x53, 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x02, 0xd1, 0xe0, 0xb1, 0x03, 0x89, 0xc2, 0xd3, 0xe0, 0x8b, 0x1e, + 0xf2, 0x15, 0x29, 0xd0, 0xba, 0xc2, 0x02, 0x31, 0xf6, 0x01, 0xc2, 0x31, + 0xc9, 0x89, 0x56, 0xfe, 0x85, 0xdb, 0x74, 0x2e, 0x8b, 0x3f, 0x8b, 0x5f, + 0x02, 0x8a, 0x47, 0x07, 0xba, 0x01, 0x00, 0xa8, 0x40, 0x74, 0x0c, 0x89, + 0xd8, 0xe8, 0x12, 0x0d, 0x41, 0x09, 0xc6, 0x89, 0xfb, 0xeb, 0xe1, 0xa8, + 0x08, 0x75, 0xf0, 0x3b, 0x5e, 0xfe, 0x72, 0xf3, 0x81, 0xfb, 0x08, 0x03, + 0x73, 0xe5, 0x31, 0xd2, 0xeb, 0xe1, 0x85, 0xf6, 0x74, 0x0e, 0xbb, 0xff, + 0xff, 0x89, 0xd8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, + 0x89, 0xcb, 0xeb, 0xf1, 0xb8, 0x05, 0x00, 0xeb, 0x8e, 0x31, 0xc0, 0xe8, + 0x89, 0xff, 0xe9, 0x2c, 0x0d, 0x53, 0x89, 0xc3, 0x88, 0xd0, 0x8b, 0x17, + 0x30, 0xe4, 0xe8, 0x37, 0x0d, 0xff, 0x47, 0x0a, 0x5b, 0xc3, 0x51, 0x56, + 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, 0xd7, 0x89, + 0xda, 0x8b, 0x5c, 0x04, 0x8b, 0x47, 0x06, 0x3d, 0x01, 0x00, 0x74, 0x0c, + 0x85, 0xc0, 0x74, 0x03, 0xe9, 0x72, 0x00, 0xc7, 0x47, 0x06, 0x01, 0x00, + 0x8b, 0x44, 0x06, 0x30, 0xe4, 0x8b, 0x5c, 0x04, 0x24, 0x30, 0x80, 0x64, + 0x06, 0xcf, 0x89, 0x46, 0xfc, 0x83, 0x7f, 0x04, 0x00, 0x75, 0x05, 0x89, + 0xf0, 0xe8, 0x99, 0x0d, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xf6, 0x44, 0x07, + 0x04, 0x74, 0x0d, 0x80, 0x64, 0x07, 0xfa, 0xc7, 0x46, 0xfe, 0x01, 0x00, + 0x80, 0x4c, 0x07, 0x01, 0xb9, 0xe1, 0x0e, 0x89, 0xd3, 0x89, 0xf0, 0x89, + 0xfa, 0xe8, 0xfc, 0x16, 0x89, 0xc2, 0x83, 0x7e, 0xfe, 0x00, 0x74, 0x0d, + 0x80, 0x64, 0x07, 0xfa, 0x89, 0xf0, 0x80, 0x4c, 0x07, 0x04, 0xe8, 0xeb, + 0x18, 0xf6, 0x44, 0x06, 0x20, 0x74, 0x03, 0xba, 0xff, 0xff, 0x8b, 0x46, + 0xfc, 0x09, 0x44, 0x06, 0x89, 0xd0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, + 0xc3, 0x31, 0xc0, 0xeb, 0xf5, 0x53, 0x51, 0x56, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x04, 0x89, 0xc3, 0x89, 0xd1, 0x8d, 0x56, 0xfc, 0x89, 0xc8, 0xe8, + 0xa6, 0x19, 0x8d, 0x46, 0xfc, 0xe8, 0xb5, 0x19, 0x89, 0xc6, 0xc6, 0x42, + 0xfc, 0x00, 0x89, 0xd8, 0xe8, 0xc2, 0x19, 0x85, 0xc0, 0x75, 0x15, 0x8d, + 0x56, 0xfc, 0x89, 0xd8, 0xe8, 0xdc, 0x19, 0x85, 0xc0, 0x74, 0x09, 0x89, + 0xd8, 0xe8, 0x01, 0x1a, 0x89, 0xc3, 0xeb, 0xe2, 0x89, 0xd8, 0xe8, 0xa4, + 0x19, 0x85, 0xc0, 0x74, 0x04, 0x85, 0xc9, 0x75, 0x09, 0x89, 0xd8, 0x89, + 0xec, 0x5d, 0x5e, 0x59, 0x5b, 0xc3, 0x31, 0xc0, 0xeb, 0xf5, 0x53, 0x56, + 0x89, 0xc3, 0x89, 0xd6, 0x89, 0xd8, 0xe8, 0x84, 0x19, 0x85, 0xc0, 0x75, + 0x09, 0x89, 0xf0, 0xe8, 0x7b, 0x19, 0x85, 0xc0, 0x74, 0x17, 0x89, 0xd8, + 0xe8, 0x72, 0x19, 0x85, 0xc0, 0x74, 0x29, 0x89, 0xf0, 0xe8, 0x69, 0x19, + 0x85, 0xc0, 0x74, 0x20, 0x31, 0xc0, 0x5e, 0x5b, 0xc3, 0x89, 0xf2, 0x89, + 0xd8, 0xe8, 0x7f, 0x19, 0x85, 0xc0, 0x75, 0xf2, 0x89, 0xd8, 0xe8, 0xa4, + 0x19, 0x89, 0xc3, 0x89, 0xf0, 0xe8, 0x9d, 0x19, 0x89, 0xc6, 0xeb, 0xbc, + 0x8a, 0x07, 0x30, 0xe4, 0x89, 0xc3, 0x8a, 0x04, 0x29, 0xc3, 0x89, 0xd8, + 0x5e, 0x5b, 0xc3, 0x53, 0x51, 0x89, 0xc3, 0x89, 0xd1, 0x89, 0xd8, 0xe8, + 0x2b, 0x19, 0x85, 0xc0, 0x74, 0x05, 0x31, 0xc0, 0x59, 0x5b, 0xc3, 0x89, + 0xd8, 0xe8, 0x8f, 0x19, 0x89, 0xc2, 0x89, 0xc8, 0xe8, 0x2e, 0xff, 0x85, + 0xc0, 0x74, 0x05, 0x89, 0xd8, 0x59, 0x5b, 0xc3, 0x89, 0xd8, 0xe8, 0x5c, + 0x19, 0x89, 0xc3, 0xeb, 0xd4, 0xb8, 0xfe, 0x15, 0xc3, 0x50, 0xb8, 0xa0, + 0x00, 0xe8, 0xe9, 0x06, 0x58, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x81, + 0xec, 0x92, 0x00, 0x50, 0x52, 0x81, 0xed, 0x80, 0x00, 0x89, 0xd9, 0x89, + 0xd6, 0x89, 0xc3, 0x83, 0xf9, 0x03, 0x72, 0x64, 0x8a, 0x04, 0x30, 0xe4, + 0x89, 0xc7, 0x83, 0xe9, 0x02, 0xf6, 0x85, 0x63, 0x01, 0xc0, 0x74, 0x68, + 0x80, 0x7c, 0x01, 0x3a, 0x75, 0x62, 0xe8, 0xcd, 0x03, 0x98, 0x89, 0xc2, + 0x8a, 0x04, 0x89, 0xde, 0x88, 0x04, 0x8b, 0x76, 0xea, 0x8a, 0x44, 0x01, + 0x89, 0xde, 0x88, 0x44, 0x01, 0x8b, 0x76, 0xea, 0x83, 0xea, 0x60, 0x83, + 0xc6, 0x02, 0x8a, 0x04, 0x83, 0xc3, 0x02, 0x3c, 0x2f, 0x74, 0x04, 0x3c, + 0x5c, 0x75, 0x50, 0x89, 0xf0, 0xe8, 0x24, 0x19, 0x40, 0x39, 0xc8, 0x77, + 0x17, 0x89, 0xf2, 0x89, 0xd8, 0xe8, 0x2f, 0x19, 0x8b, 0x5e, 0xec, 0x8a, + 0x07, 0x84, 0xc0, 0x74, 0x30, 0x3c, 0x2f, 0x74, 0x2f, 0x43, 0xeb, 0xf3, + 0xe8, 0x72, 0xff, 0x89, 0xc3, 0xc7, 0x07, 0x0e, 0x00, 0x31, 0xc0, 0x8d, + 0xa6, 0x80, 0x00, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, 0xb4, 0x19, 0xcd, 0x21, + 0x30, 0xe4, 0x89, 0xc2, 0x42, 0x88, 0xd0, 0xc6, 0x47, 0x01, 0x3a, 0x04, + 0x40, 0x88, 0x07, 0xeb, 0xa9, 0xe9, 0x12, 0x01, 0xe9, 0x09, 0x01, 0x8d, + 0x46, 0xee, 0x30, 0xf6, 0xe8, 0x29, 0x19, 0x85, 0xc0, 0x75, 0x3c, 0x8d, + 0x46, 0xee, 0xe8, 0xc7, 0x18, 0x89, 0xc7, 0x80, 0x7e, 0xee, 0x5c, 0x74, + 0x0a, 0x83, 0xf9, 0x02, 0x72, 0xb2, 0x49, 0xc6, 0x07, 0x5c, 0x43, 0x8d, + 0x45, 0x01, 0x39, 0xc8, 0x77, 0xa6, 0x8d, 0x56, 0xee, 0x89, 0xd8, 0xe8, + 0xbd, 0x18, 0x01, 0xfb, 0x29, 0xf9, 0x80, 0x7f, 0xff, 0x5c, 0x75, 0x16, + 0x80, 0x3c, 0x00, 0x75, 0x20, 0xc6, 0x07, 0x00, 0xe9, 0x79, 0xff, 0xe8, + 0xfb, 0xfe, 0x89, 0xc3, 0xc7, 0x07, 0x01, 0x00, 0xeb, 0x87, 0x83, 0xf9, + 0x02, 0x73, 0x03, 0xe9, 0x76, 0xff, 0x49, 0xc6, 0x07, 0x5c, 0x43, 0xeb, + 0xdb, 0x8d, 0x47, 0x01, 0x89, 0x46, 0x7e, 0x89, 0xc8, 0x8d, 0x7c, 0x01, + 0x48, 0x80, 0x3c, 0x2e, 0x74, 0x12, 0x83, 0xf9, 0x02, 0x72, 0xe0, 0x8a, + 0x0c, 0x89, 0xfe, 0x88, 0x0f, 0x8b, 0x5e, 0x7e, 0x89, 0xc1, 0xeb, 0xb8, + 0x89, 0xfe, 0x80, 0x3d, 0x2f, 0x75, 0x0a, 0x8a, 0x47, 0xff, 0x3c, 0x2f, + 0x75, 0x3b, 0x46, 0xeb, 0xa7, 0x80, 0x3d, 0x5c, 0x74, 0xf1, 0x80, 0x3d, + 0x00, 0x74, 0xa2, 0x80, 0x3d, 0x2e, 0x75, 0x51, 0x8d, 0x75, 0x01, 0x8a, + 0x04, 0x3c, 0x2f, 0x75, 0x2a, 0x46, 0x8a, 0x47, 0xff, 0x3c, 0x2f, 0x75, + 0x28, 0x83, 0xeb, 0x02, 0x3b, 0x5e, 0xec, 0x73, 0x03, 0xe9, 0x19, 0xff, + 0x8a, 0x07, 0x3c, 0x2f, 0x75, 0x1e, 0x43, 0xc6, 0x07, 0x00, 0xe9, 0x6f, + 0xff, 0x3c, 0x5c, 0x74, 0xc1, 0xc6, 0x07, 0x5c, 0x43, 0xeb, 0xbb, 0x3c, + 0x5c, 0x74, 0xd2, 0xeb, 0xd1, 0x3c, 0x5c, 0x74, 0xd4, 0xe9, 0xf5, 0xfe, + 0x3c, 0x5c, 0x74, 0xde, 0x3c, 0x3a, 0x74, 0x03, 0x4b, 0xeb, 0xc9, 0x43, + 0xc6, 0x07, 0x5c, 0xeb, 0xd1, 0x83, 0xf9, 0x02, 0x73, 0x03, 0xe9, 0xd3, + 0xfe, 0x89, 0xc1, 0xc6, 0x07, 0x2e, 0x8b, 0x5e, 0x7e, 0xe9, 0x34, 0xff, + 0xc6, 0x07, 0x5c, 0xe9, 0xbf, 0xfe, 0x8b, 0x46, 0xec, 0xe9, 0xc7, 0xfe, + 0x50, 0xb8, 0x08, 0x00, 0xe8, 0x1e, 0x05, 0x58, 0x51, 0x56, 0x57, 0x89, + 0xc6, 0x89, 0xd7, 0x31, 0xc9, 0x85, 0xc0, 0x74, 0x26, 0x85, 0xf6, 0x74, + 0x1d, 0xc6, 0x04, 0x00, 0x85, 0xff, 0x74, 0x05, 0x80, 0x3d, 0x00, 0x75, + 0x31, 0x89, 0xda, 0x89, 0xf0, 0xe8, 0x3a, 0x00, 0x89, 0xc6, 0x85, 0xf6, + 0x75, 0x04, 0x85, 0xc9, 0x75, 0x29, 0x89, 0xf0, 0xe9, 0x91, 0xfe, 0xbb, + 0x90, 0x00, 0x89, 0xd8, 0xe8, 0xf0, 0x07, 0x89, 0xc1, 0x85, 0xc0, 0x75, + 0x09, 0xe8, 0xe5, 0xfd, 0x89, 0xc6, 0xc7, 0x04, 0x05, 0x00, 0x89, 0xce, + 0xeb, 0xbf, 0x89, 0xfa, 0x89, 0xf0, 0xe8, 0xd8, 0xfd, 0xeb, 0xcd, 0x89, + 0xc8, 0xe8, 0xc4, 0x17, 0xeb, 0xd0, 0x53, 0x51, 0x55, 0x89, 0xe5, 0x81, + 0xec, 0x90, 0x00, 0x89, 0xc1, 0x89, 0xd3, 0x8d, 0x86, 0x73, 0xff, 0x31, + 0xd2, 0xe8, 0xa0, 0x17, 0x85, 0xc0, 0x75, 0x3e, 0xb4, 0x19, 0xcd, 0x21, + 0x04, 0x41, 0xc6, 0x86, 0x71, 0xff, 0x3a, 0x88, 0x86, 0x70, 0xff, 0x8d, + 0x86, 0x70, 0xff, 0xc6, 0x86, 0x72, 0xff, 0x5c, 0xe8, 0x29, 0x17, 0x89, + 0xc2, 0x42, 0x85, 0xc9, 0x75, 0x11, 0x39, 0xd3, 0x76, 0x29, 0x89, 0xd8, + 0xe8, 0x88, 0x07, 0x89, 0xc1, 0x85, 0xc0, 0x74, 0x22, 0x89, 0xd3, 0x8d, + 0x96, 0x70, 0xff, 0x89, 0xc8, 0xe8, 0x2f, 0x18, 0xeb, 0x0b, 0xe8, 0x70, + 0xfd, 0x89, 0xc3, 0xc7, 0x07, 0x01, 0x00, 0x31, 0xc0, 0x89, 0xec, 0x5d, + 0x59, 0x5b, 0xc3, 0x89, 0xd0, 0xeb, 0xd5, 0xe8, 0x5b, 0xfd, 0x89, 0xc3, + 0xc7, 0x07, 0x05, 0x00, 0xeb, 0xe9, 0x52, 0x89, 0xc2, 0xb4, 0x3b, 0xcd, + 0x21, 0xe8, 0x38, 0x18, 0x5a, 0xc3, 0x51, 0x89, 0xd1, 0x89, 0xda, 0x89, + 0xc3, 0xb4, 0x1a, 0xcd, 0x21, 0x8b, 0xd3, 0xb4, 0x4e, 0xcd, 0x21, 0xe8, + 0x16, 0x18, 0x59, 0xc3, 0x52, 0x89, 0xc2, 0xb4, 0x1a, 0xcd, 0x21, 0xb4, + 0x4f, 0xcd, 0x21, 0xe8, 0x06, 0x18, 0x5a, 0xc3, 0x31, 0xc0, 0xc3, 0x53, + 0x51, 0x56, 0x57, 0x89, 0xc7, 0x89, 0xd6, 0x89, 0xc3, 0xb8, 0x00, 0x44, + 0xcd, 0x21, 0x19, 0xdb, 0x75, 0x02, 0x89, 0xd0, 0x89, 0xc1, 0x85, 0xdb, + 0x7d, 0x03, 0xe9, 0xa9, 0x00, 0xc7, 0x44, 0x28, 0x00, 0x00, 0xc7, 0x44, + 0x2a, 0x00, 0x00, 0xc7, 0x44, 0x2c, 0x00, 0x00, 0xc7, 0x44, 0x2e, 0x00, + 0x00, 0xc7, 0x44, 0x30, 0x00, 0x00, 0xc7, 0x44, 0x24, 0x00, 0x00, 0xc7, + 0x44, 0x26, 0x00, 0x00, 0xc7, 0x44, 0x06, 0x01, 0x00, 0xc7, 0x44, 0x0c, + 0x00, 0x00, 0x30, 0xe4, 0xc7, 0x44, 0x04, 0x00, 0x00, 0x24, 0x1f, 0x89, + 0x04, 0x89, 0x44, 0x0e, 0x88, 0x64, 0x32, 0x8b, 0x44, 0x0c, 0x89, 0x7c, + 0x02, 0x99, 0x89, 0x44, 0x08, 0x89, 0xf8, 0x89, 0x54, 0x0a, 0xe8, 0x48, + 0x01, 0x89, 0xc2, 0xa8, 0x01, 0x74, 0x05, 0x81, 0x4c, 0x04, 0x24, 0x01, + 0xf6, 0xc2, 0x02, 0x74, 0x04, 0x80, 0x4c, 0x04, 0x92, 0xf6, 0xc1, 0x80, + 0x74, 0x45, 0xc7, 0x44, 0x18, 0x00, 0x00, 0xc7, 0x44, 0x1a, 0x00, 0x00, + 0xc7, 0x44, 0x10, 0x00, 0x00, 0xc7, 0x44, 0x12, 0x00, 0x00, 0x80, 0x4c, + 0x05, 0x20, 0x8b, 0x54, 0x18, 0x8b, 0x44, 0x1a, 0x89, 0x54, 0x20, 0x89, + 0x44, 0x22, 0x8b, 0x44, 0x20, 0x8b, 0x54, 0x22, 0x89, 0x44, 0x1c, 0x89, + 0x54, 0x1e, 0x89, 0x54, 0x16, 0x8b, 0x44, 0x1c, 0x89, 0x44, 0x14, 0x31, + 0xc0, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xe8, 0x3e, 0x01, 0xeb, 0xf6, 0x89, + 0xfb, 0xb8, 0x00, 0x57, 0xcd, 0x21, 0x73, 0x07, 0xe8, 0x30, 0x01, 0x8b, + 0xd0, 0xeb, 0x02, 0x8b, 0xc1, 0x89, 0xc3, 0x89, 0xd0, 0x83, 0xfa, 0xff, + 0x75, 0x0a, 0x83, 0xfb, 0xff, 0x75, 0x05, 0xb8, 0xff, 0xff, 0xeb, 0xd1, + 0x89, 0xda, 0xe8, 0x43, 0x00, 0x89, 0x44, 0x18, 0x89, 0x54, 0x1a, 0x89, + 0x54, 0x22, 0x89, 0x54, 0x1e, 0x8b, 0x44, 0x18, 0x89, 0x44, 0x20, 0x8b, + 0x44, 0x20, 0x89, 0x44, 0x1c, 0x8b, 0x44, 0x1e, 0x8b, 0x54, 0x1c, 0x89, + 0x44, 0x16, 0x89, 0xf8, 0x89, 0x54, 0x14, 0xe8, 0xf8, 0x16, 0x89, 0x44, + 0x10, 0x89, 0x54, 0x12, 0x80, 0x4c, 0x05, 0x80, 0xeb, 0x95, 0x3d, 0x41, + 0x00, 0x7c, 0x08, 0x3d, 0x5a, 0x00, 0x7f, 0x03, 0x05, 0x20, 0x00, 0xc3, + 0x53, 0x51, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x12, 0xb1, 0x09, 0x89, 0xc3, + 0xd3, 0xeb, 0x83, 0xe3, 0x7f, 0x83, 0xc3, 0x50, 0xb1, 0x05, 0x89, 0x5e, + 0xf8, 0x89, 0xc3, 0x30, 0xe4, 0xd3, 0xeb, 0x24, 0x1f, 0xb1, 0x0b, 0x89, + 0x46, 0xf4, 0x89, 0xd0, 0xd3, 0xe8, 0x30, 0xff, 0x30, 0xe4, 0x80, 0xe3, + 0x0f, 0x24, 0x1f, 0xb1, 0x05, 0x89, 0x46, 0xf2, 0x89, 0xd0, 0x4b, 0xd3, + 0xe8, 0x89, 0x5e, 0xf6, 0x30, 0xe4, 0x30, 0xf6, 0x24, 0x3f, 0x80, 0xe2, + 0x1f, 0x89, 0x46, 0xf0, 0xb8, 0xff, 0xff, 0xd1, 0xe2, 0x89, 0x46, 0xfa, + 0x89, 0x46, 0xfc, 0x89, 0x46, 0xfe, 0x8d, 0x46, 0xee, 0x89, 0x56, 0xee, + 0xe8, 0xd3, 0x16, 0x89, 0xec, 0x5d, 0x59, 0x5b, 0xc3, 0x51, 0x89, 0xd1, + 0x89, 0xc2, 0x8a, 0xc1, 0xb4, 0x3d, 0xcd, 0x21, 0x72, 0x02, 0x89, 0x07, + 0xe8, 0x4d, 0x16, 0x59, 0xc3, 0x53, 0x3b, 0x06, 0xda, 0x03, 0x73, 0x0c, + 0x8b, 0x1e, 0x04, 0x04, 0xd1, 0xe0, 0x01, 0xc3, 0x8b, 0x07, 0x5b, 0xc3, + 0x31, 0xc0, 0x5b, 0xc3, 0x53, 0x3b, 0x06, 0xda, 0x03, 0x72, 0x02, 0x5b, + 0xc3, 0x8b, 0x1e, 0x04, 0x04, 0xd1, 0xe0, 0x01, 0xc3, 0x89, 0x17, 0x5b, + 0xc3, 0x53, 0x52, 0x89, 0xc3, 0xb8, 0x00, 0x44, 0xcd, 0x21, 0x19, 0xdb, + 0x75, 0x02, 0x89, 0xd0, 0x89, 0xc2, 0x85, 0xdb, 0x7f, 0x02, 0x75, 0x0a, + 0xa8, 0x80, 0x74, 0x06, 0xb8, 0x01, 0x00, 0x5a, 0x5b, 0xc3, 0x31, 0xc0, + 0x5a, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x89, 0xc3, 0x88, 0xc2, 0x30, + 0xe4, 0x89, 0xc1, 0xe8, 0x5b, 0x00, 0x89, 0xc6, 0x89, 0x0c, 0x81, 0xfb, + 0x00, 0x01, 0x73, 0x41, 0x80, 0x3e, 0x24, 0x04, 0x03, 0x72, 0x33, 0x80, + 0xfb, 0x50, 0x75, 0x04, 0xb2, 0x0e, 0xeb, 0x07, 0x80, 0xfb, 0x22, 0x72, + 0x1c, 0xb2, 0x13, 0x88, 0xd3, 0x30, 0xff, 0x8a, 0x87, 0x06, 0x04, 0x98, + 0x89, 0xc6, 0xe8, 0xd8, 0xfa, 0x89, 0xc3, 0x89, 0x37, 0xb8, 0xff, 0xff, + 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x80, 0xfb, 0x20, 0x72, 0x04, 0xb2, 0x05, + 0xeb, 0xdd, 0x80, 0xfa, 0x13, 0x76, 0xd8, 0xeb, 0xd4, 0x88, 0xf8, 0x30, + 0xe4, 0xeb, 0xd9, 0x52, 0x89, 0xc2, 0xe8, 0x9a, 0xff, 0x89, 0xd0, 0x5a, + 0xc3, 0xb8, 0x00, 0x16, 0xc3, 0x51, 0x89, 0xd1, 0x89, 0xc2, 0xb4, 0x3c, + 0xcd, 0x21, 0x72, 0x02, 0x89, 0x07, 0xe8, 0x7b, 0x15, 0x59, 0xc3, 0x51, + 0x89, 0xd1, 0x89, 0xc2, 0xb4, 0x5b, 0xcd, 0x21, 0x72, 0x02, 0x89, 0x07, + 0xe8, 0x69, 0x15, 0x59, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x89, 0xc6, 0xd1, + 0xe0, 0x81, 0x3e, 0x04, 0x04, 0xdc, 0x03, 0x74, 0x1f, 0x8b, 0x1e, 0x04, + 0x04, 0x89, 0xc2, 0x89, 0xd8, 0xe8, 0x55, 0x16, 0x89, 0xc1, 0x85, 0xc9, + 0x75, 0x2d, 0xe8, 0x60, 0xfa, 0x89, 0xc6, 0xc7, 0x04, 0x05, 0x00, 0x5e, + 0x5a, 0x59, 0x5b, 0xc3, 0x8b, 0x1e, 0xda, 0x03, 0x89, 0x1e, 0x02, 0x16, + 0xe8, 0x4c, 0x04, 0x89, 0xc1, 0x85, 0xc0, 0x74, 0xdd, 0x8b, 0x1e, 0xda, + 0x03, 0xba, 0xdc, 0x03, 0xd1, 0xe3, 0xe8, 0x79, 0x16, 0xeb, 0xcf, 0xa1, + 0xda, 0x03, 0x89, 0xf3, 0x31, 0xd2, 0x2b, 0x1e, 0xda, 0x03, 0xd1, 0xe0, + 0xd1, 0xe3, 0x01, 0xc8, 0xe8, 0xe9, 0x00, 0x89, 0x0e, 0x04, 0x04, 0x89, + 0x36, 0xda, 0x03, 0xeb, 0xbe, 0xa1, 0x04, 0x04, 0x3d, 0xdc, 0x03, 0x75, + 0x01, 0xc3, 0xe8, 0x03, 0x14, 0xa1, 0x02, 0x16, 0xc7, 0x06, 0x04, 0x04, + 0xdc, 0x03, 0xa3, 0xda, 0x03, 0xc3, 0x53, 0x51, 0x56, 0x89, 0xc3, 0xa1, + 0xda, 0x03, 0x39, 0xc3, 0x73, 0x24, 0x3b, 0x1e, 0xda, 0x03, 0x73, 0x2a, + 0x89, 0xd9, 0xd1, 0xe1, 0x85, 0xd2, 0x74, 0x27, 0x89, 0xd8, 0xe8, 0x2a, + 0x00, 0x8b, 0x36, 0x04, 0x04, 0x01, 0xce, 0x80, 0xce, 0x40, 0x89, 0x14, + 0x89, 0xd8, 0x5e, 0x59, 0x5b, 0xc3, 0x89, 0xc1, 0xd1, 0xf9, 0x01, 0xc8, + 0x40, 0xe8, 0x41, 0xff, 0xeb, 0xd0, 0xbb, 0xff, 0xff, 0xeb, 0xe9, 0x8b, + 0x36, 0x04, 0x04, 0x01, 0xce, 0xeb, 0xdf, 0x53, 0x52, 0x3d, 0x05, 0x00, + 0x7d, 0x10, 0x89, 0xc2, 0x8b, 0x1e, 0x04, 0x04, 0xd1, 0xe2, 0x01, 0xd3, + 0xf6, 0x47, 0x01, 0x40, 0x74, 0x03, 0x5a, 0x5b, 0xc3, 0x80, 0x4f, 0x01, + 0x40, 0xe8, 0x59, 0xfe, 0x85, 0xc0, 0x74, 0xf2, 0x8b, 0x1e, 0x04, 0x04, + 0x01, 0xd3, 0x80, 0x4f, 0x01, 0x20, 0x5a, 0x5b, 0xc3, 0x52, 0x89, 0xc2, + 0xe8, 0xc8, 0xff, 0x89, 0xd0, 0xe8, 0x11, 0xfe, 0x5a, 0xc3, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x50, 0x89, 0xde, 0x89, 0xc8, 0x89, + 0xd3, 0x8d, 0x7e, 0xfc, 0x8b, 0x5e, 0xfa, 0x88, 0xd0, 0x89, 0xf2, 0xb4, + 0x42, 0xcd, 0x21, 0x36, 0x89, 0x05, 0x36, 0x89, 0x55, 0x02, 0xd1, 0xd2, + 0xd1, 0xca, 0x85, 0xd2, 0x7c, 0x0c, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, + 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0xe8, 0x26, 0xfe, 0x99, 0xeb, 0xf4, + 0x51, 0x57, 0x89, 0xc7, 0x89, 0xd9, 0x88, 0xd0, 0x57, 0x1e, 0x07, 0x8a, + 0xe0, 0xd1, 0xe9, 0xf3, 0xab, 0x13, 0xc9, 0xf3, 0xaa, 0x5f, 0x89, 0xf8, + 0x5f, 0x59, 0xc3, 0x55, 0x89, 0xe5, 0x89, 0xe0, 0x2b, 0x06, 0x28, 0x04, + 0x89, 0xec, 0x5d, 0xc3, 0x8c, 0x16, 0x1e, 0x04, 0xc3, 0x3b, 0xc4, 0x73, + 0x13, 0x2b, 0xc4, 0xf7, 0xd8, 0x3b, 0x06, 0x28, 0x04, 0x77, 0x06, 0x8c, + 0xd0, 0x3b, 0x06, 0x1e, 0x04, 0x74, 0x01, 0xc3, 0x0e, 0x5a, 0xb8, 0x83, + 0x17, 0xbb, 0x01, 0x00, 0xe9, 0x3c, 0x00, 0x53, 0x74, 0x61, 0x63, 0x6b, + 0x20, 0x4f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x21, 0x00, 0x53, + 0x51, 0x52, 0x56, 0x89, 0xc1, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0x19, + 0xd2, 0x31, 0xf6, 0x85, 0xd2, 0x7c, 0x0e, 0x89, 0xc8, 0x31, 0xd2, 0xe8, + 0x6e, 0xfd, 0x89, 0xf0, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xe8, 0x9f, 0xfd, + 0x89, 0xc6, 0xeb, 0xeb, 0xe9, 0x6c, 0xf5, 0x89, 0xc1, 0x89, 0xd6, 0xe8, + 0x05, 0x15, 0x85, 0xc0, 0x75, 0x07, 0x89, 0xc8, 0x89, 0xf2, 0xe9, 0x5a, + 0xf5, 0x89, 0xd8, 0xe9, 0x38, 0xf5, 0x52, 0x8b, 0x16, 0x0c, 0x16, 0xa1, + 0x0a, 0x16, 0xe8, 0x44, 0xe9, 0xe9, 0x04, 0x15, 0x53, 0x52, 0x55, 0x89, + 0xe5, 0x89, 0xc3, 0x83, 0x3f, 0x00, 0x75, 0x06, 0x89, 0xec, 0x5d, 0x5a, + 0x5b, 0xc3, 0x1e, 0xff, 0x17, 0x1f, 0xeb, 0xf4, 0x53, 0x52, 0x55, 0x89, + 0xe5, 0x89, 0xc3, 0x8b, 0x47, 0x02, 0x8b, 0x17, 0x85, 0xc0, 0x75, 0x04, + 0x85, 0xd2, 0x74, 0xe0, 0x1e, 0xff, 0x1f, 0x1f, 0xeb, 0xda, 0x53, 0x51, + 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xc1, 0x1e, 0xe8, 0xcd, 0xf5, + 0xbf, 0xda, 0x05, 0x89, 0xfa, 0xbb, 0xbc, 0x05, 0x89, 0xfe, 0x88, 0xc8, + 0x39, 0xfb, 0x73, 0x16, 0x80, 0x3f, 0x02, 0x75, 0x05, 0x83, 0xc3, 0x06, + 0xeb, 0xf2, 0x3a, 0x47, 0x01, 0x72, 0xf6, 0x89, 0xde, 0x8a, 0x47, 0x01, + 0xeb, 0xef, 0x39, 0xfe, 0x74, 0x15, 0x8d, 0x44, 0x02, 0x80, 0x3c, 0x00, + 0x75, 0x08, 0xe8, 0x8b, 0xff, 0xc6, 0x04, 0x02, 0xeb, 0xcb, 0xe8, 0x9b, + 0xff, 0xeb, 0xf6, 0x1f, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, + 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x89, 0xc1, 0x1e, 0xe8, + 0x77, 0xf5, 0x88, 0xd5, 0xbf, 0xf2, 0x05, 0x89, 0xfa, 0xbb, 0xda, 0x05, + 0x89, 0xfe, 0x88, 0xc8, 0x39, 0xfb, 0x73, 0x16, 0x80, 0x3f, 0x02, 0x75, + 0x05, 0x83, 0xc3, 0x06, 0xeb, 0xf2, 0x3a, 0x47, 0x01, 0x77, 0xf6, 0x89, + 0xde, 0x8a, 0x47, 0x01, 0xeb, 0xef, 0x39, 0xfe, 0x74, 0x1c, 0x3a, 0x6c, + 0x01, 0x73, 0x05, 0xc6, 0x04, 0x02, 0xeb, 0xd1, 0x8d, 0x44, 0x02, 0x80, + 0x3c, 0x00, 0x75, 0x05, 0xe8, 0x29, 0xff, 0xeb, 0xee, 0xe8, 0x3c, 0xff, + 0xeb, 0xe9, 0x1f, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x00, + 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x50, 0x89, 0xd6, + 0x89, 0x4e, 0xfe, 0x89, 0xda, 0x31, 0xc9, 0x8a, 0x04, 0x3c, 0x20, 0x75, + 0x03, 0x46, 0xeb, 0xf7, 0x3c, 0x09, 0x74, 0xf9, 0x84, 0xc0, 0x74, 0x49, + 0x30, 0xc0, 0x80, 0x3c, 0x22, 0x74, 0x19, 0x89, 0x76, 0xfc, 0x89, 0xf3, + 0x80, 0x3c, 0x22, 0x75, 0x3b, 0x83, 0x7e, 0xfa, 0x00, 0x75, 0x12, 0x46, + 0x84, 0xc0, 0x75, 0x09, 0xb0, 0x02, 0xeb, 0xec, 0xb0, 0x01, 0x46, 0xeb, + 0xe2, 0x30, 0xc0, 0xeb, 0xe3, 0x3c, 0x01, 0x75, 0x1f, 0x85, 0xd2, 0x74, + 0x58, 0x89, 0xcf, 0xd1, 0xe7, 0x01, 0xd7, 0x8b, 0x46, 0xfc, 0x89, 0x05, + 0x8a, 0x04, 0x41, 0x84, 0xc0, 0x74, 0x48, 0x46, 0xc6, 0x07, 0x00, 0xeb, + 0xa6, 0xe9, 0x56, 0x00, 0x80, 0x3c, 0x20, 0x75, 0x28, 0x84, 0xc0, 0x74, + 0xd8, 0x80, 0x3c, 0x00, 0x74, 0xd3, 0x80, 0x3c, 0x5c, 0x75, 0x13, 0x83, + 0x7e, 0xfa, 0x00, 0x75, 0x1b, 0x80, 0x7c, 0x01, 0x22, 0x75, 0x07, 0x46, + 0x80, 0x7c, 0xfe, 0x5c, 0x74, 0x9a, 0x85, 0xd2, 0x75, 0x23, 0x46, 0xeb, + 0x93, 0x80, 0x3c, 0x09, 0x74, 0xd3, 0xeb, 0xd5, 0x80, 0x7c, 0x01, 0x22, + 0x75, 0x07, 0x46, 0xeb, 0xe9, 0xeb, 0x24, 0xeb, 0x13, 0x80, 0x7c, 0x01, + 0x5c, 0x75, 0xdf, 0x3c, 0x01, 0x74, 0xef, 0xeb, 0xd9, 0x8a, 0x24, 0x88, + 0x27, 0x43, 0xeb, 0xd6, 0x88, 0x07, 0x8b, 0x5e, 0xfe, 0x89, 0xc8, 0x89, + 0x37, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x41, 0x80, 0x3c, 0x00, 0x74, + 0xed, 0xe9, 0x3d, 0xff, 0x55, 0x89, 0xe5, 0x56, 0x57, 0x83, 0xec, 0x08, + 0x50, 0x52, 0x89, 0xdf, 0x89, 0x4e, 0xf6, 0x8d, 0x4e, 0xf4, 0x89, 0xfa, + 0x31, 0xdb, 0xe8, 0x0c, 0xff, 0x8b, 0x4e, 0xf4, 0x40, 0x29, 0xf9, 0xd1, + 0xe0, 0x89, 0xcb, 0x83, 0xc1, 0x02, 0x05, 0x02, 0x00, 0x80, 0xe1, 0xfe, + 0x01, 0xc8, 0x40, 0x24, 0xfe, 0xe8, 0x93, 0x00, 0x89, 0xc6, 0x89, 0x46, + 0xf8, 0x31, 0xc0, 0x43, 0x89, 0x46, 0xfa, 0x85, 0xf6, 0x75, 0x19, 0x8b, + 0x5e, 0xf6, 0x8b, 0x76, 0xfa, 0x89, 0x07, 0x8b, 0x5e, 0x04, 0x8b, 0x46, + 0xf8, 0x89, 0x37, 0x8d, 0x66, 0xfc, 0x5f, 0x5e, 0x5d, 0xc2, 0x02, 0x00, + 0x89, 0xfa, 0x89, 0xf0, 0xe8, 0xa3, 0x12, 0x8b, 0x46, 0xf0, 0x89, 0xf3, + 0x89, 0xf2, 0x01, 0xcb, 0x8d, 0x4e, 0xf4, 0x89, 0x5e, 0xfa, 0x89, 0x07, + 0x8b, 0x46, 0xf2, 0x83, 0xc3, 0x02, 0xe8, 0xa8, 0xfe, 0x40, 0x89, 0xc3, + 0xd1, 0xe3, 0x03, 0x5e, 0xfa, 0xc7, 0x07, 0x00, 0x00, 0xeb, 0xb8, 0x53, + 0x51, 0x52, 0xb8, 0xf8, 0x15, 0xb9, 0xf6, 0x15, 0x8b, 0x1e, 0x41, 0x04, + 0x8b, 0x16, 0x45, 0x04, 0x50, 0xa1, 0x0e, 0x16, 0xe8, 0x5d, 0xff, 0xa3, + 0x04, 0x16, 0xa1, 0xf6, 0x15, 0xa3, 0xfa, 0x15, 0xa3, 0x0a, 0x16, 0xa1, + 0xf8, 0x15, 0xa3, 0xfc, 0x15, 0xa3, 0x0c, 0x16, 0x5a, 0x59, 0x5b, 0xc3, + 0xa1, 0x04, 0x16, 0x85, 0xc0, 0x75, 0x01, 0xc3, 0xe9, 0xf5, 0x0f, 0x53, + 0x51, 0x52, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc7, + 0x85, 0xc0, 0x74, 0x52, 0x3d, 0xea, 0xff, 0x77, 0x4d, 0x05, 0x03, 0x00, + 0x24, 0xfe, 0x89, 0x46, 0xfc, 0x3d, 0x06, 0x00, 0x72, 0x4b, 0xc6, 0x46, + 0xfe, 0x00, 0x31, 0xd2, 0x8b, 0x46, 0xfc, 0x3b, 0x06, 0x50, 0x04, 0x76, + 0x4d, 0x8b, 0x36, 0x4e, 0x04, 0x85, 0xf6, 0x74, 0x3b, 0x85, 0xf6, 0x74, + 0x52, 0x8b, 0x4c, 0x0a, 0x89, 0x36, 0x4e, 0x04, 0x39, 0xf9, 0x72, 0x0f, + 0x8c, 0xda, 0x89, 0xf3, 0x89, 0xf8, 0xe8, 0x5f, 0x12, 0x89, 0xc2, 0x85, + 0xc0, 0x75, 0x5d, 0x3b, 0x0e, 0x50, 0x04, 0x77, 0x2c, 0x8b, 0x74, 0x04, + 0xeb, 0xd7, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, + 0xc3, 0xc7, 0x46, 0xfc, 0x06, 0x00, 0xeb, 0xae, 0x89, 0x36, 0x50, 0x04, + 0x8b, 0x36, 0x4c, 0x04, 0xeb, 0xbb, 0x31, 0xc0, 0x8b, 0x36, 0x4c, 0x04, + 0xa3, 0x50, 0x04, 0xeb, 0xb0, 0x89, 0x0e, 0x50, 0x04, 0xeb, 0xce, 0x80, + 0x7e, 0xfe, 0x00, 0x74, 0x0f, 0x89, 0xf8, 0xe8, 0x58, 0x14, 0x85, 0xc0, + 0x74, 0x16, 0xc6, 0x46, 0xfe, 0x00, 0xeb, 0x84, 0x89, 0xf8, 0xe8, 0x19, + 0x15, 0x85, 0xc0, 0x74, 0xe8, 0xc6, 0x46, 0xfe, 0x01, 0xe9, 0x74, 0xff, + 0x89, 0xd0, 0xeb, 0xac, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x04, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0xf6, 0x44, 0x06, 0x03, 0x74, + 0x68, 0x31, 0xff, 0xf6, 0x44, 0x07, 0x10, 0x75, 0x65, 0x8b, 0x44, 0x02, + 0x85, 0xc0, 0x74, 0x16, 0xf7, 0xd8, 0x8b, 0x5c, 0x08, 0x99, 0x89, 0x5e, + 0xfc, 0x89, 0xd1, 0x89, 0xc3, 0xba, 0x01, 0x00, 0x8b, 0x46, 0xfc, 0xe8, + 0x94, 0xfb, 0x83, 0x7e, 0xfe, 0x00, 0x74, 0x08, 0x8b, 0x44, 0x08, 0xe8, + 0x25, 0xfc, 0x09, 0xc7, 0xf6, 0x44, 0x06, 0x08, 0x74, 0x11, 0x8b, 0x5c, + 0x04, 0x8b, 0x47, 0x04, 0xe8, 0xe5, 0x0e, 0x8b, 0x5c, 0x04, 0xc7, 0x47, + 0x04, 0x00, 0x00, 0xf6, 0x44, 0x07, 0x08, 0x74, 0x06, 0x89, 0xf0, 0xff, + 0x16, 0x06, 0x16, 0xc6, 0x44, 0x06, 0x00, 0x80, 0x64, 0x07, 0x40, 0x89, + 0xf8, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xbf, 0xff, 0xff, + 0xeb, 0xf1, 0xe8, 0xab, 0x0c, 0x85, 0xc0, 0x74, 0x94, 0xbf, 0xff, 0xff, + 0xeb, 0x8f, 0x53, 0x89, 0xc3, 0xe8, 0x6c, 0xff, 0x89, 0xc2, 0x89, 0xd8, + 0xe8, 0x26, 0x00, 0x89, 0xd0, 0x5b, 0xc3, 0x53, 0x52, 0x8b, 0x1e, 0xf2, + 0x15, 0x85, 0xdb, 0x74, 0x12, 0x3b, 0x47, 0x02, 0x74, 0x04, 0x8b, 0x1f, + 0xeb, 0xf3, 0xba, 0x01, 0x00, 0xe8, 0xd6, 0xff, 0x5a, 0x5b, 0xc3, 0xb8, + 0xff, 0xff, 0x5a, 0x5b, 0xc3, 0x53, 0x56, 0xbe, 0xf2, 0x15, 0x8b, 0x1c, + 0x85, 0xdb, 0x74, 0x16, 0x3b, 0x47, 0x02, 0x74, 0x04, 0x89, 0xde, 0xeb, + 0xf1, 0x8b, 0x07, 0x89, 0x04, 0xa1, 0xf4, 0x15, 0x89, 0x1e, 0xf4, 0x15, + 0x89, 0x07, 0x5e, 0x5b, 0xc3, 0x53, 0x8b, 0x1e, 0xf4, 0x15, 0x85, 0xdb, + 0x75, 0x02, 0x5b, 0xc3, 0x8b, 0x07, 0xa3, 0xf4, 0x15, 0x89, 0xd8, 0xe8, + 0x42, 0x0e, 0xeb, 0xea, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc1, 0x89, 0xd3, + 0x8b, 0x77, 0x04, 0x8b, 0x44, 0x06, 0x3d, 0x01, 0x00, 0x74, 0x0c, 0x85, + 0xc0, 0x74, 0x03, 0xe9, 0x6f, 0x00, 0xc7, 0x44, 0x06, 0x01, 0x00, 0xf6, + 0x47, 0x06, 0x02, 0x75, 0x03, 0xe9, 0x69, 0x00, 0x8b, 0x77, 0x04, 0x83, + 0x7c, 0x04, 0x00, 0x75, 0x05, 0x89, 0xd8, 0xe8, 0x73, 0x00, 0xbe, 0x00, + 0x04, 0x83, 0xf9, 0x0a, 0x75, 0x28, 0xbe, 0x00, 0x06, 0xf6, 0x47, 0x06, + 0x40, 0x75, 0x1f, 0x8b, 0x3f, 0x80, 0x4f, 0x07, 0x10, 0xc6, 0x05, 0x0d, + 0xff, 0x07, 0xff, 0x47, 0x02, 0x8b, 0x47, 0x02, 0x3b, 0x47, 0x0a, 0x75, + 0x09, 0x89, 0xd8, 0xe8, 0xd2, 0x0b, 0x85, 0xc0, 0x75, 0x23, 0x8b, 0x3f, + 0x80, 0x4f, 0x07, 0x10, 0x88, 0x0d, 0xff, 0x07, 0xff, 0x47, 0x02, 0x85, + 0x77, 0x06, 0x75, 0x08, 0x8b, 0x47, 0x02, 0x3b, 0x47, 0x0a, 0x75, 0x23, + 0x89, 0xd8, 0xe8, 0xaf, 0x0b, 0x85, 0xc0, 0x74, 0x1a, 0xb8, 0xff, 0xff, + 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xe8, 0xb5, 0xf3, 0x89, 0xc6, 0xc7, 0x04, + 0x04, 0x00, 0xb8, 0xff, 0xff, 0x80, 0x4f, 0x06, 0x20, 0xeb, 0xe9, 0x88, + 0xc8, 0x30, 0xe4, 0xeb, 0xe3, 0x53, 0x56, 0x89, 0xc3, 0xe8, 0x31, 0x14, + 0x83, 0x7f, 0x0a, 0x00, 0x75, 0x0c, 0x8a, 0x47, 0x07, 0xa8, 0x02, 0x74, + 0x40, 0xc7, 0x47, 0x0a, 0x86, 0x00, 0x8b, 0x47, 0x0a, 0xe8, 0x83, 0xfd, + 0x8b, 0x77, 0x04, 0x89, 0x44, 0x04, 0x8b, 0x77, 0x04, 0x83, 0x7c, 0x04, + 0x00, 0x75, 0x38, 0x80, 0x67, 0x07, 0xf8, 0x8d, 0x47, 0x0c, 0x8b, 0x77, + 0x04, 0x80, 0x4f, 0x07, 0x04, 0x89, 0x44, 0x04, 0xc7, 0x47, 0x0a, 0x01, + 0x00, 0x8b, 0x77, 0x04, 0x8b, 0x44, 0x04, 0xc7, 0x47, 0x02, 0x00, 0x00, + 0x89, 0x07, 0x5e, 0x5b, 0xc3, 0xa8, 0x04, 0x74, 0x07, 0xc7, 0x47, 0x0a, + 0x40, 0x00, 0xeb, 0xba, 0xc7, 0x47, 0x0a, 0x00, 0x02, 0xeb, 0xb3, 0x80, + 0x4f, 0x06, 0x08, 0xeb, 0xd8, 0x53, 0x56, 0x89, 0xc6, 0x89, 0xd3, 0xc7, + 0x47, 0x02, 0x00, 0x00, 0x8a, 0x04, 0x3c, 0x2d, 0x74, 0x0b, 0x3c, 0x23, + 0x75, 0x0d, 0x80, 0x4f, 0x02, 0x01, 0x46, 0xeb, 0xef, 0x80, 0x4f, 0x02, + 0x08, 0xeb, 0xf7, 0x3c, 0x2b, 0x75, 0x0a, 0x80, 0x4f, 0x02, 0x04, 0x80, + 0x67, 0x02, 0xfd, 0xeb, 0xe9, 0x3c, 0x20, 0x75, 0x0c, 0xf6, 0x47, 0x02, + 0x04, 0x75, 0xdf, 0x80, 0x4f, 0x02, 0x02, 0xeb, 0xd9, 0x3c, 0x30, 0x75, + 0x05, 0x88, 0x47, 0x19, 0xeb, 0xd0, 0x89, 0xf0, 0x5e, 0x5b, 0xc3, 0x51, + 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd1, 0x89, 0xda, 0xc6, 0x47, 0x19, 0x20, + 0xe8, 0xa2, 0xff, 0x89, 0xc7, 0xc7, 0x47, 0x06, 0x00, 0x00, 0x89, 0xc6, + 0x80, 0x3d, 0x2a, 0x74, 0x22, 0x8a, 0x04, 0x3c, 0x30, 0x7c, 0x2e, 0x3c, + 0x39, 0x7f, 0x2a, 0xba, 0x0a, 0x00, 0x8b, 0x47, 0x06, 0xf7, 0xea, 0x89, + 0xc2, 0x8a, 0x04, 0x98, 0x2d, 0x30, 0x00, 0x01, 0xc2, 0x46, 0x89, 0x57, + 0x06, 0xeb, 0xde, 0x89, 0xcf, 0x83, 0x05, 0x02, 0x8b, 0x3d, 0x8b, 0x45, + 0xfe, 0x89, 0x47, 0x06, 0x85, 0xc0, 0x7c, 0x38, 0x46, 0xc7, 0x47, 0x08, + 0xff, 0xff, 0x80, 0x3c, 0x2e, 0x75, 0x48, 0x46, 0xc7, 0x47, 0x08, 0x00, + 0x00, 0x80, 0x3c, 0x2a, 0x74, 0x2b, 0x8a, 0x04, 0x3c, 0x30, 0x7c, 0x37, + 0x3c, 0x39, 0x7f, 0x33, 0xba, 0x0a, 0x00, 0x8b, 0x47, 0x08, 0xf7, 0xea, + 0x89, 0xc2, 0x8a, 0x04, 0x98, 0x2d, 0x30, 0x00, 0x01, 0xc2, 0x46, 0x89, + 0x57, 0x08, 0xeb, 0xde, 0xf7, 0x5f, 0x06, 0x80, 0x4f, 0x02, 0x08, 0xeb, + 0xbf, 0x89, 0xcf, 0x83, 0x05, 0x02, 0x8b, 0x3d, 0x8b, 0x45, 0xfe, 0x89, + 0x47, 0x08, 0x85, 0xc0, 0x7c, 0x21, 0x46, 0x8a, 0x04, 0x8d, 0x54, 0x01, + 0x3c, 0x68, 0x73, 0x1e, 0x3c, 0x4c, 0x73, 0x57, 0x3c, 0x49, 0x75, 0x55, + 0x80, 0x7c, 0x01, 0x36, 0x75, 0x36, 0x80, 0x7c, 0x02, 0x34, 0x75, 0x30, + 0xe9, 0x77, 0x00, 0xc7, 0x47, 0x08, 0xff, 0xff, 0xeb, 0xd8, 0x8d, 0x7c, + 0x02, 0x77, 0x0e, 0x80, 0x7c, 0x01, 0x68, 0x75, 0x50, 0x89, 0xfe, 0x80, + 0x4f, 0x02, 0x10, 0xeb, 0x13, 0x3c, 0x74, 0x73, 0x15, 0x3c, 0x6c, 0x75, + 0x26, 0x3a, 0x44, 0x01, 0x75, 0x16, 0x89, 0xfe, 0x80, 0x4f, 0x02, 0x80, + 0x89, 0xf0, 0x5f, 0x5e, 0x59, 0xc3, 0x76, 0x4f, 0x3c, 0x7a, 0x74, 0x4b, + 0x3c, 0x77, 0x75, 0xf0, 0x46, 0x80, 0x4f, 0x02, 0x40, 0xeb, 0xe9, 0xeb, + 0x0a, 0xeb, 0x1c, 0x3c, 0x6a, 0x75, 0xe1, 0x89, 0xd6, 0xeb, 0xd9, 0x76, + 0x2a, 0x3c, 0x57, 0x74, 0x12, 0x3c, 0x4e, 0x75, 0xd3, 0x89, 0xd6, 0x80, + 0x4f, 0x03, 0x02, 0xeb, 0xcb, 0xeb, 0x0b, 0x3c, 0x46, 0x75, 0xc5, 0x46, + 0x80, 0x4f, 0x03, 0x04, 0xeb, 0xbe, 0x89, 0xd6, 0x80, 0x4f, 0x02, 0x20, + 0xeb, 0xb6, 0x83, 0xc6, 0x03, 0xeb, 0xad, 0x89, 0xd6, 0x80, 0x4f, 0x03, + 0x01, 0xeb, 0xa9, 0x46, 0xeb, 0xa6, 0x56, 0x57, 0x89, 0xc6, 0x89, 0xd7, + 0x89, 0xda, 0x8e, 0xc7, 0x31, 0xc0, 0x39, 0xd0, 0x74, 0x0c, 0x89, 0xf3, + 0x46, 0x26, 0x80, 0x3f, 0x00, 0x74, 0x03, 0x40, 0xeb, 0xf0, 0x5f, 0x5e, + 0xc3, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xde, + 0x89, 0xc3, 0x89, 0xd7, 0x31, 0xc9, 0x83, 0xfe, 0xff, 0x75, 0x25, 0x8e, + 0xc7, 0x26, 0x8b, 0x07, 0x85, 0xc0, 0x74, 0x14, 0x89, 0xc2, 0x8d, 0x46, + 0xfe, 0x83, 0xc3, 0x02, 0xe8, 0x0f, 0x12, 0x3d, 0xff, 0xff, 0x74, 0xe7, + 0x01, 0xc1, 0xeb, 0xe3, 0x89, 0xc8, 0x89, 0xec, 0x5d, 0xe9, 0x4e, 0xff, + 0x8e, 0xc7, 0x26, 0x8b, 0x07, 0x85, 0xc0, 0x74, 0x18, 0x39, 0xf1, 0x7f, + 0x14, 0x89, 0xc2, 0x8d, 0x46, 0xfe, 0x83, 0xc3, 0x02, 0xe8, 0xe6, 0x11, + 0x3d, 0xff, 0xff, 0x74, 0xe3, 0x01, 0xc1, 0xeb, 0xdf, 0x39, 0xf1, 0x7e, + 0xd3, 0x89, 0xf0, 0xeb, 0xd1, 0x51, 0x56, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x0a, 0x52, 0x89, 0xd9, 0xbb, 0x10, 0x00, 0x8d, 0x56, 0xf6, 0xe8, 0x23, + 0x12, 0x8d, 0x46, 0xf6, 0x8b, 0x5e, 0xf4, 0xe8, 0x8e, 0x0a, 0x89, 0xc6, + 0x01, 0xcb, 0x89, 0xc8, 0x89, 0xf2, 0x4e, 0x85, 0xd2, 0x7e, 0x0f, 0x89, + 0xc2, 0x4b, 0x48, 0x85, 0xd2, 0x7e, 0x07, 0x8a, 0x52, 0xf6, 0x88, 0x17, + 0xeb, 0xea, 0x8b, 0x76, 0xf4, 0x01, 0xc6, 0x89, 0xc2, 0x4e, 0x48, 0x85, + 0xd2, 0x7e, 0x05, 0xc6, 0x04, 0x30, 0xeb, 0xf3, 0x8b, 0x5e, 0xf4, 0x01, + 0xcb, 0xc6, 0x07, 0x00, 0x89, 0xec, 0x5d, 0x5e, 0x59, 0xc3, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x08, 0x89, 0xc6, 0x89, 0x56, 0xfc, 0x89, + 0x5e, 0xfa, 0x89, 0x4e, 0xfe, 0x85, 0xc9, 0x7c, 0x28, 0x8b, 0x5e, 0xfc, + 0x83, 0x7f, 0x08, 0xff, 0x75, 0x05, 0xc7, 0x47, 0x08, 0x04, 0x00, 0xbb, + 0x0a, 0x00, 0x8b, 0x46, 0xfe, 0x89, 0xf2, 0xe8, 0xae, 0x11, 0x89, 0x76, + 0xf8, 0x8d, 0x44, 0x01, 0x80, 0x3c, 0x00, 0x74, 0x14, 0x89, 0xc6, 0xeb, + 0xf4, 0xf7, 0x5e, 0xfe, 0xc6, 0x04, 0x2d, 0xf7, 0x5e, 0xfa, 0x83, 0x5e, + 0xfe, 0x00, 0x46, 0xeb, 0xc8, 0x8b, 0x5e, 0xfc, 0x83, 0x7f, 0x08, 0x00, + 0x74, 0x35, 0xc6, 0x04, 0x2e, 0x31, 0xff, 0x89, 0xc6, 0x8b, 0x5e, 0xfc, + 0x3b, 0x7f, 0x08, 0x7d, 0x23, 0x8b, 0x46, 0xfa, 0xbb, 0x0a, 0x00, 0x31, + 0xd2, 0x31, 0xc9, 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xe8, 0x81, 0x11, 0x89, + 0x56, 0xfe, 0x89, 0x46, 0xfa, 0x8a, 0x46, 0xfe, 0x04, 0x30, 0x47, 0x88, + 0x04, 0x46, 0xeb, 0xd5, 0xc6, 0x04, 0x00, 0xf6, 0x46, 0xfb, 0x80, 0x74, + 0x42, 0x3b, 0x76, 0xf8, 0x74, 0x11, 0x4e, 0x80, 0x3c, 0x2e, 0x75, 0x01, + 0x4e, 0x80, 0x3c, 0x39, 0x75, 0x37, 0xc6, 0x04, 0x30, 0xeb, 0xea, 0xc6, + 0x04, 0x31, 0x46, 0x8a, 0x04, 0x8d, 0x7c, 0x01, 0x3c, 0x30, 0x75, 0x04, + 0x89, 0xfe, 0xeb, 0xf3, 0x3c, 0x2e, 0x75, 0x10, 0xc6, 0x04, 0x30, 0x8d, + 0x75, 0x01, 0x88, 0x05, 0x80, 0x3c, 0x30, 0x75, 0x03, 0x46, 0xeb, 0xf8, + 0xc6, 0x04, 0x30, 0x46, 0xc6, 0x04, 0x00, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0xc3, 0xfe, 0x04, 0xeb, 0xf6, 0x53, 0x89, 0xc3, 0xf6, 0x47, 0x02, 0x08, + 0x75, 0x22, 0x80, 0x7f, 0x19, 0x30, 0x75, 0x1c, 0x8b, 0x47, 0x06, 0x2b, + 0x47, 0x0c, 0x2b, 0x47, 0x0e, 0x2b, 0x47, 0x10, 0x2b, 0x47, 0x12, 0x2b, + 0x47, 0x14, 0x2b, 0x47, 0x16, 0x85, 0xc0, 0x7e, 0x03, 0x01, 0x47, 0x0e, + 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc7, + 0x89, 0x56, 0xfe, 0x89, 0x4e, 0xfc, 0x83, 0x7f, 0x10, 0x00, 0x7e, 0xb3, + 0x8e, 0x46, 0xfe, 0x8d, 0x46, 0xfa, 0x26, 0x8b, 0x15, 0xe8, 0x4e, 0x10, + 0x83, 0xc7, 0x02, 0x89, 0xc1, 0x3d, 0xff, 0xff, 0x74, 0xe4, 0x3b, 0x47, + 0x10, 0x7f, 0x19, 0x8d, 0x76, 0xfa, 0x49, 0x83, 0xf9, 0xff, 0x74, 0xd6, + 0x8a, 0x04, 0x98, 0x89, 0xc2, 0x89, 0xd8, 0x46, 0xff, 0x56, 0xfc, 0xff, + 0x4f, 0x10, 0xeb, 0xea, 0xc7, 0x47, 0x10, 0x00, 0x00, 0xe9, 0x77, 0xff, + 0xfc, 0xd6, 0x21, 0x3f, 0x26, 0x21, 0x26, 0x3f, 0x26, 0xd6, 0x21, 0x67, + 0x23, 0xd6, 0x21, 0x3f, 0x26, 0x3f, 0x26, 0x3f, 0x26, 0x3f, 0x26, 0x3f, + 0x26, 0x3f, 0x26, 0x3f, 0x26, 0x3f, 0x26, 0x5e, 0x25, 0x3f, 0x26, 0x3f, + 0x26, 0xaa, 0x23, 0x3f, 0x26, 0x3f, 0x26, 0x3f, 0x26, 0x3f, 0x26, 0x27, + 0x24, 0x3f, 0x26, 0x3f, 0x26, 0x3f, 0x26, 0x3f, 0x26, 0x3f, 0x26, 0x3f, + 0x26, 0x3f, 0x26, 0x3f, 0x26, 0xd6, 0x21, 0xbf, 0x24, 0xd3, 0x25, 0x74, + 0x24, 0xd6, 0x21, 0x67, 0x23, 0xd6, 0x21, 0x3f, 0x26, 0x74, 0x24, 0x3f, + 0x26, 0x3f, 0x26, 0x3f, 0x26, 0x3f, 0x26, 0x3f, 0x26, 0xc6, 0x24, 0x5e, + 0x25, 0x3f, 0x26, 0x3f, 0x26, 0xaa, 0x23, 0x3f, 0x26, 0x74, 0x24, 0x3f, + 0x26, 0x3f, 0x26, 0x27, 0x24, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x12, 0x50, 0x89, 0xd7, 0x89, 0xde, 0xc7, 0x47, 0x16, 0x00, 0x00, 0x89, + 0x46, 0xf8, 0x8b, 0x47, 0x16, 0x89, 0x47, 0x14, 0x89, 0x47, 0x12, 0x89, + 0x47, 0x10, 0x89, 0x47, 0x0e, 0x89, 0x47, 0x0c, 0x8a, 0x47, 0x18, 0x8c, + 0x5e, 0xfa, 0x3c, 0x69, 0x73, 0x39, 0x3c, 0x64, 0x75, 0x6a, 0x8a, 0x44, + 0x02, 0xa8, 0x80, 0x74, 0x61, 0x83, 0x05, 0x08, 0x8b, 0x1d, 0x8b, 0x47, + 0xfc, 0x89, 0x46, 0xf6, 0x8b, 0x47, 0xfa, 0x89, 0x46, 0xf4, 0x8b, 0x47, + 0xf8, 0x8b, 0x4f, 0xfe, 0x89, 0x46, 0xf2, 0xe9, 0xe5, 0x00, 0x8b, 0x46, + 0xec, 0x89, 0xf3, 0x89, 0xfa, 0xff, 0x46, 0xf8, 0xff, 0x16, 0x58, 0x04, + 0xe9, 0xb5, 0x01, 0x76, 0xc9, 0x3c, 0x78, 0x75, 0x23, 0x8a, 0x44, 0x02, + 0xa8, 0x80, 0x74, 0x30, 0x83, 0x05, 0x08, 0x8b, 0x1d, 0x8b, 0x47, 0xfc, + 0x89, 0x46, 0xf6, 0x8b, 0x47, 0xfa, 0x89, 0x46, 0xf4, 0x8b, 0x47, 0xf8, + 0x8b, 0x4f, 0xfe, 0x89, 0x46, 0xf2, 0xeb, 0x29, 0x3c, 0x75, 0x74, 0xd9, + 0x3c, 0x6f, 0x74, 0xd5, 0xeb, 0x1f, 0xeb, 0x65, 0x3c, 0x62, 0x74, 0xcd, + 0x3c, 0x58, 0xeb, 0xf2, 0xa8, 0x40, 0x74, 0x2a, 0x83, 0x05, 0x04, 0x8b, + 0x1d, 0x8b, 0x47, 0xfc, 0x89, 0x46, 0xfc, 0x8b, 0x47, 0xfe, 0x89, 0x46, + 0xfe, 0x8a, 0x44, 0x18, 0x2c, 0x41, 0xc7, 0x46, 0xf0, 0x0a, 0x00, 0x3c, + 0x37, 0x77, 0x51, 0x30, 0xe4, 0x89, 0xc3, 0xd1, 0xe3, 0x2e, 0xff, 0xa7, + 0x0d, 0x21, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x47, 0xfe, 0xc7, 0x46, + 0xfe, 0x00, 0x00, 0x89, 0x46, 0xfc, 0xf6, 0x44, 0x02, 0x20, 0x74, 0x07, + 0xc7, 0x46, 0xfe, 0x00, 0x00, 0xeb, 0xca, 0xf6, 0x44, 0x02, 0x10, 0x74, + 0xc4, 0x8a, 0x46, 0xfc, 0x30, 0xe4, 0x89, 0x46, 0xfc, 0x30, 0xc0, 0xeb, + 0xb5, 0xa8, 0x40, 0x74, 0x16, 0x83, 0x05, 0x04, 0x8b, 0x1d, 0x8b, 0x47, + 0xfc, 0x89, 0x46, 0xfc, 0x8b, 0x47, 0xfe, 0x89, 0x46, 0xfe, 0xeb, 0x23, + 0xe9, 0xa4, 0x03, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x47, 0xfe, 0x99, + 0x89, 0x46, 0xfc, 0x8a, 0x44, 0x02, 0x89, 0x56, 0xfe, 0xa8, 0x20, 0x74, + 0x61, 0x8b, 0x46, 0xfc, 0x99, 0x89, 0x46, 0xfc, 0x89, 0x56, 0xfe, 0x30, + 0xc0, 0xf6, 0x44, 0x02, 0x80, 0x74, 0x59, 0x85, 0xc9, 0x7c, 0x10, 0x75, + 0x0a, 0x83, 0x7e, 0xf6, 0x00, 0x75, 0x04, 0x83, 0x7e, 0xf4, 0x00, 0x84, + 0xc0, 0x74, 0x5a, 0x8b, 0x44, 0x0c, 0x89, 0xc2, 0x8b, 0x5e, 0xec, 0x42, + 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, 0x07, 0x2d, 0xf6, 0x44, 0x02, 0x80, + 0x74, 0x36, 0x31, 0xc0, 0x2b, 0x46, 0xf2, 0x89, 0x46, 0xf2, 0xb8, 0x00, + 0x00, 0x1b, 0x46, 0xf4, 0x89, 0x46, 0xf4, 0xb8, 0x00, 0x00, 0x1b, 0x46, + 0xf6, 0x89, 0x46, 0xf6, 0xb8, 0x00, 0x00, 0x19, 0xc8, 0x89, 0xc1, 0xe9, + 0x27, 0xff, 0xa8, 0x10, 0x74, 0xa5, 0x8a, 0x46, 0xfc, 0x98, 0xeb, 0x98, + 0x83, 0x7e, 0xfe, 0x00, 0x7c, 0xb5, 0xeb, 0xaf, 0xf7, 0x5e, 0xfe, 0xf7, + 0x5e, 0xfc, 0x83, 0x5e, 0xfe, 0x00, 0xe9, 0x08, 0xff, 0x8a, 0x44, 0x02, + 0xa8, 0x04, 0x74, 0x14, 0x8b, 0x44, 0x0c, 0x89, 0xc2, 0x8b, 0x5e, 0xec, + 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, 0x07, 0x2b, 0xe9, 0xed, 0xfe, + 0xa8, 0x02, 0x75, 0x03, 0xe9, 0xe6, 0xfe, 0x8b, 0x44, 0x0c, 0x89, 0xc2, + 0x8b, 0x5e, 0xec, 0x42, 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, 0x07, 0x20, + 0xe9, 0xd2, 0xfe, 0xf6, 0x44, 0x02, 0x20, 0x75, 0x03, 0xe9, 0x66, 0xfe, + 0x83, 0x05, 0x04, 0x8b, 0x1d, 0x8b, 0x47, 0xfc, 0x89, 0xf2, 0x89, 0x46, + 0xfc, 0x8b, 0x47, 0xfe, 0x8b, 0x5e, 0xfc, 0x89, 0x46, 0xfe, 0x89, 0xc1, + 0x8b, 0x46, 0xec, 0xe8, 0x20, 0xfc, 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xec, + 0x8c, 0xda, 0xe8, 0x39, 0xfb, 0x89, 0x44, 0x10, 0x89, 0xf0, 0x8b, 0x56, + 0xfa, 0xe8, 0xe9, 0xfc, 0x8b, 0x46, 0xf8, 0xe9, 0xd9, 0xfc, 0x8b, 0x5e, + 0xec, 0xc6, 0x07, 0x00, 0x8a, 0x44, 0x03, 0xa8, 0x04, 0x75, 0x3f, 0xa8, + 0x02, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x5f, 0xfe, 0x85, 0xdb, 0x74, + 0x06, 0x8c, 0x5e, 0xfa, 0x89, 0x5e, 0xf8, 0x80, 0x7c, 0x18, 0x53, 0x75, + 0x4e, 0xf6, 0x44, 0x02, 0x20, 0x74, 0x3a, 0x8b, 0x46, 0xf8, 0x8b, 0x56, + 0xfa, 0x8b, 0x5c, 0x08, 0xe8, 0xef, 0xfa, 0x89, 0x44, 0x10, 0x83, 0x7c, + 0x08, 0x00, 0x7c, 0xb0, 0x3b, 0x44, 0x08, 0x7e, 0xab, 0x8b, 0x44, 0x08, + 0xeb, 0xa3, 0x83, 0x05, 0x04, 0x8b, 0x1d, 0x8b, 0x47, 0xfe, 0x8b, 0x7f, + 0xfc, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xff, 0x74, 0xc2, 0x89, 0x7e, 0xf8, + 0x89, 0x46, 0xfa, 0xeb, 0xba, 0x8b, 0x46, 0xf8, 0x8b, 0x56, 0xfa, 0x8b, + 0x5c, 0x08, 0xe8, 0xd4, 0xfa, 0xeb, 0xc4, 0xf6, 0x44, 0x02, 0x40, 0x75, + 0xec, 0xeb, 0xb0, 0x8a, 0x44, 0x02, 0xa8, 0x01, 0x74, 0x41, 0xa8, 0x80, + 0x75, 0x03, 0xe9, 0x82, 0x00, 0x85, 0xc9, 0x75, 0x12, 0x83, 0x7e, 0xf6, + 0x00, 0x75, 0x0c, 0x83, 0x7e, 0xf4, 0x00, 0x75, 0x06, 0x83, 0x7e, 0xf2, + 0x00, 0x74, 0x24, 0x8b, 0x44, 0x0c, 0x89, 0xc2, 0x8b, 0x5e, 0xec, 0x42, + 0x01, 0xc3, 0x89, 0x54, 0x0c, 0xc6, 0x07, 0x30, 0x8b, 0x44, 0x0c, 0x8b, + 0x5e, 0xec, 0x89, 0xc2, 0x01, 0xc3, 0x42, 0x8a, 0x44, 0x18, 0x89, 0x54, + 0x0c, 0x88, 0x07, 0xc7, 0x46, 0xf0, 0x10, 0x00, 0x83, 0x7c, 0x08, 0xff, + 0x74, 0x04, 0xc6, 0x44, 0x19, 0x20, 0x8b, 0x5e, 0xec, 0x03, 0x5c, 0x0c, + 0x8c, 0x5e, 0xfa, 0x89, 0x5e, 0xf8, 0xf6, 0x44, 0x02, 0x80, 0x74, 0x3d, + 0x83, 0x7c, 0x08, 0x00, 0x75, 0x39, 0x85, 0xc9, 0x75, 0x35, 0x83, 0x7e, + 0xf6, 0x00, 0x75, 0x2f, 0x83, 0x7e, 0xf4, 0x00, 0x75, 0x29, 0x83, 0x7e, + 0xf2, 0x00, 0x75, 0x23, 0x8e, 0x46, 0xfa, 0x31, 0xc0, 0x26, 0xc6, 0x07, + 0x00, 0xeb, 0x48, 0x8b, 0x46, 0xfe, 0x0b, 0x46, 0xfc, 0xeb, 0x8a, 0xc7, + 0x46, 0xf0, 0x02, 0x00, 0xeb, 0xae, 0xc7, 0x46, 0xf0, 0x08, 0x00, 0xeb, + 0xa7, 0xeb, 0x5c, 0xff, 0x76, 0xf0, 0x8b, 0x46, 0xec, 0x8b, 0x5e, 0xf6, + 0x03, 0x44, 0x0c, 0x8b, 0x56, 0xf2, 0x50, 0x89, 0xc8, 0x8b, 0x4e, 0xf4, + 0xe8, 0xe6, 0x0c, 0x80, 0x7c, 0x18, 0x58, 0x75, 0x06, 0x8b, 0x46, 0xec, + 0xe8, 0xf1, 0x0d, 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xf8, 0x8b, 0x56, 0xfa, + 0xe8, 0xd3, 0xf9, 0x89, 0x44, 0x10, 0x89, 0xc2, 0x3b, 0x44, 0x08, 0x7c, + 0x4a, 0xf6, 0x44, 0x02, 0x01, 0x75, 0x03, 0xe9, 0x8a, 0xfe, 0x83, 0x7e, + 0xf0, 0x0a, 0x7d, 0xf7, 0x85, 0xc0, 0x74, 0x09, 0xc4, 0x5e, 0xf8, 0x26, + 0x80, 0x3f, 0x30, 0x74, 0xea, 0xff, 0x44, 0x0e, 0xe9, 0x71, 0xfe, 0x83, + 0x7c, 0x08, 0x00, 0x75, 0x0e, 0x8b, 0x46, 0xfe, 0x0b, 0x46, 0xfc, 0x75, + 0x06, 0x8e, 0x46, 0xfa, 0xe9, 0x72, 0xff, 0x8b, 0x5e, 0xec, 0x8b, 0x4e, + 0xf0, 0x8b, 0x46, 0xfc, 0x8b, 0x56, 0xfe, 0x03, 0x5c, 0x0c, 0xe8, 0xb3, + 0x0d, 0xeb, 0x94, 0x8b, 0x44, 0x08, 0x29, 0xd0, 0x89, 0x44, 0x0e, 0xe9, + 0x3e, 0xfe, 0x83, 0x7c, 0x06, 0x00, 0x75, 0x0b, 0xf6, 0x44, 0x03, 0x04, + 0x74, 0x58, 0xc7, 0x44, 0x06, 0x09, 0x00, 0x80, 0x64, 0x02, 0xf9, 0x83, + 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x4f, 0xfe, 0xf6, 0x44, 0x03, 0x04, 0x74, + 0x48, 0x83, 0xc3, 0x02, 0x89, 0x1d, 0x8b, 0x56, 0xec, 0x8b, 0x47, 0xfe, + 0xbb, 0x04, 0x00, 0xe8, 0xc3, 0xf9, 0x8b, 0x5e, 0xec, 0x89, 0xc8, 0x8d, + 0x57, 0x05, 0xc6, 0x47, 0x04, 0x3a, 0xbb, 0x04, 0x00, 0xe8, 0xb1, 0xf9, + 0x80, 0x7c, 0x18, 0x50, 0x75, 0x06, 0x8b, 0x46, 0xec, 0xe8, 0x34, 0x0d, + 0xbb, 0xff, 0xff, 0x8b, 0x46, 0xf8, 0x8b, 0x56, 0xfa, 0xe8, 0x16, 0xf9, + 0x89, 0x44, 0x0c, 0xe9, 0xda, 0xfd, 0xc7, 0x44, 0x06, 0x04, 0x00, 0xeb, + 0xa6, 0xbb, 0x04, 0x00, 0x8b, 0x56, 0xec, 0x89, 0xc8, 0xeb, 0xce, 0xc7, + 0x44, 0x10, 0x01, 0x00, 0xf6, 0x44, 0x02, 0x40, 0x75, 0x10, 0x83, 0x05, + 0x02, 0x8b, 0x1d, 0x8a, 0x47, 0xfe, 0x8b, 0x5e, 0xec, 0x88, 0x07, 0xe9, + 0xae, 0xfd, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8d, 0x46, 0xee, 0x8b, 0x57, + 0xfe, 0xe8, 0x2e, 0x0b, 0x3d, 0xff, 0xff, 0x75, 0x03, 0xe9, 0x98, 0xfd, + 0x8b, 0x5e, 0xec, 0x8a, 0x46, 0xee, 0x88, 0x07, 0x30, 0xe4, 0xe8, 0x66, + 0x0d, 0x85, 0xc0, 0x74, 0xec, 0x8a, 0x46, 0xef, 0x88, 0x47, 0x01, 0xff, + 0x44, 0x0c, 0xe9, 0x7b, 0xfd, 0x83, 0x05, 0x02, 0x8b, 0x1d, 0x8b, 0x46, + 0xec, 0x8b, 0x57, 0xfe, 0xe8, 0xfb, 0x0a, 0x3d, 0xff, 0xff, 0x74, 0x03, + 0xe9, 0x62, 0xfd, 0xc7, 0x44, 0x10, 0x00, 0x00, 0xe9, 0x5d, 0xfd, 0xc7, + 0x44, 0x06, 0x00, 0x00, 0x8b, 0x5e, 0xec, 0x8a, 0x44, 0x18, 0x88, 0x07, + 0xc7, 0x44, 0x0c, 0x01, 0x00, 0xe9, 0x48, 0xfd, 0x56, 0x57, 0x55, 0x89, + 0xe5, 0x83, 0xec, 0x6a, 0x53, 0x89, 0xcf, 0xc6, 0x46, 0xfe, 0x00, 0xc7, + 0x46, 0xe0, 0x00, 0x00, 0xc7, 0x46, 0xe2, 0xc8, 0x00, 0xc7, 0x46, 0xe8, + 0x00, 0x00, 0x89, 0x46, 0xde, 0x89, 0x56, 0xfc, 0x8b, 0x5e, 0xfc, 0x8a, + 0x07, 0x84, 0xc0, 0x74, 0x58, 0x8d, 0x4f, 0x01, 0x3c, 0x25, 0x74, 0x0d, + 0x98, 0x89, 0xc2, 0x8d, 0x46, 0xde, 0x89, 0x4e, 0xfc, 0xff, 0xd7, 0xeb, + 0xe3, 0x8d, 0x5e, 0xde, 0x8d, 0x56, 0x94, 0x89, 0xc8, 0xe8, 0xe7, 0xf6, + 0x89, 0xc3, 0x8a, 0x07, 0x43, 0x88, 0x46, 0xf6, 0x89, 0x5e, 0xfc, 0x84, + 0xc0, 0x74, 0x2a, 0x3c, 0x6e, 0x75, 0x5c, 0x8a, 0x46, 0xe1, 0xa8, 0x04, + 0x74, 0x22, 0x83, 0x46, 0x94, 0x04, 0x8b, 0x5e, 0x94, 0x8b, 0x76, 0x94, + 0x8b, 0x5f, 0xfc, 0x8e, 0x44, 0xfe, 0x8a, 0x46, 0xe0, 0xa8, 0x10, 0x74, + 0x1f, 0x8a, 0x46, 0xe8, 0x26, 0x88, 0x07, 0xeb, 0x9f, 0xe9, 0x76, 0x01, + 0x8b, 0x5e, 0x94, 0x83, 0xc3, 0x02, 0xa8, 0x02, 0x8c, 0xd8, 0x89, 0x5e, + 0x94, 0x8e, 0xc0, 0x8b, 0x5f, 0xfe, 0xeb, 0xda, 0xa8, 0x20, 0x74, 0x09, + 0x8b, 0x46, 0xe8, 0x26, 0x89, 0x07, 0xe9, 0x7b, 0xff, 0xa8, 0x40, 0x74, + 0x10, 0x8b, 0x46, 0xe8, 0x99, 0x26, 0x89, 0x07, 0x26, 0x89, 0x57, 0x02, + 0xe9, 0x69, 0xff, 0xeb, 0x1f, 0xa8, 0x80, 0x74, 0xdf, 0x8b, 0x46, 0xe8, + 0x99, 0x26, 0x89, 0x07, 0xb1, 0x0f, 0x26, 0x89, 0x57, 0x02, 0x26, 0xd3, + 0xfa, 0x26, 0x89, 0x57, 0x04, 0x26, 0x89, 0x57, 0x06, 0xe9, 0x48, 0xff, + 0x8d, 0x4e, 0xfe, 0x8d, 0x5e, 0xde, 0x8d, 0x56, 0x94, 0x8d, 0x46, 0x96, + 0xe8, 0x3e, 0xfa, 0x89, 0xc6, 0x8b, 0x46, 0xea, 0x03, 0x46, 0xec, 0x03, + 0x46, 0xee, 0x03, 0x46, 0xf0, 0x03, 0x46, 0xf2, 0x03, 0x46, 0xf4, 0x89, + 0x56, 0xfa, 0x29, 0x46, 0xe4, 0xf6, 0x46, 0xe0, 0x08, 0x74, 0x19, 0x8d, + 0x5e, 0x96, 0x83, 0x7e, 0xea, 0x00, 0x7e, 0x29, 0x8a, 0x07, 0x98, 0x89, + 0xc2, 0x8d, 0x46, 0xde, 0x43, 0xff, 0xd7, 0xff, 0x4e, 0xea, 0xeb, 0xea, + 0x80, 0x7e, 0xf7, 0x20, 0x75, 0xe1, 0x83, 0x7e, 0xe4, 0x00, 0x7e, 0xdb, + 0xba, 0x20, 0x00, 0x8d, 0x46, 0xde, 0xff, 0xd7, 0xff, 0x4e, 0xe4, 0xeb, + 0xed, 0x83, 0x7e, 0xec, 0x00, 0x7e, 0x0d, 0xba, 0x30, 0x00, 0x8d, 0x46, + 0xde, 0xff, 0xd7, 0xff, 0x4e, 0xec, 0xeb, 0xed, 0x8a, 0x46, 0xf6, 0x3c, + 0x73, 0x75, 0x40, 0xf6, 0x46, 0xe0, 0x40, 0x75, 0x1a, 0x83, 0x7e, 0xee, + 0x00, 0x7e, 0x21, 0x8e, 0x46, 0xfa, 0x26, 0x8a, 0x04, 0x98, 0x89, 0xc2, + 0x8d, 0x46, 0xde, 0x46, 0xff, 0xd7, 0xff, 0x4e, 0xee, 0xeb, 0xe6, 0x8d, + 0x5e, 0xde, 0x8b, 0x56, 0xfa, 0x89, 0xf9, 0x89, 0xf0, 0xe8, 0xe2, 0xf8, + 0x83, 0x7e, 0xf0, 0x00, 0x7e, 0x2b, 0xba, 0x30, 0x00, 0x8d, 0x46, 0xde, + 0xff, 0xd7, 0xff, 0x4e, 0xf0, 0xeb, 0xed, 0x3c, 0x53, 0x74, 0xdc, 0x83, + 0x7e, 0xee, 0x00, 0x7e, 0xe3, 0x8e, 0x46, 0xfa, 0x26, 0x8a, 0x04, 0x98, + 0x89, 0xc2, 0x8d, 0x46, 0xde, 0x46, 0xff, 0xd7, 0xff, 0x4e, 0xee, 0xeb, + 0xe6, 0x83, 0x7e, 0xf2, 0x00, 0x7e, 0x14, 0x8e, 0x46, 0xfa, 0x26, 0x8a, + 0x04, 0x98, 0x89, 0xc2, 0x8d, 0x46, 0xde, 0x46, 0xff, 0xd7, 0xff, 0x4e, + 0xf2, 0xeb, 0xe6, 0x83, 0x7e, 0xf4, 0x00, 0x7e, 0x0d, 0xba, 0x30, 0x00, + 0x8d, 0x46, 0xde, 0xff, 0xd7, 0xff, 0x4e, 0xf4, 0xeb, 0xed, 0xf6, 0x46, + 0xe0, 0x08, 0x75, 0x03, 0xe9, 0x39, 0xfe, 0x83, 0x7e, 0xe4, 0x00, 0x7e, + 0xf7, 0xba, 0x20, 0x00, 0x8d, 0x46, 0xde, 0xff, 0xd7, 0xff, 0x4e, 0xe4, + 0xeb, 0xed, 0x8b, 0x46, 0xe8, 0xe9, 0x2b, 0xf8, 0x53, 0x51, 0x52, 0x56, + 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc6, 0xc7, 0x46, 0xfe, + 0x00, 0x00, 0xf6, 0x44, 0x07, 0x10, 0x74, 0x03, 0xe9, 0x6c, 0x00, 0x8b, + 0x5c, 0x04, 0x83, 0x7f, 0x04, 0x00, 0x74, 0x3b, 0x80, 0x64, 0x06, 0xef, + 0xf6, 0x44, 0x07, 0x20, 0x75, 0x31, 0x8b, 0x44, 0x02, 0x99, 0x89, 0xd3, + 0x09, 0xc3, 0x74, 0x14, 0x89, 0xd1, 0x89, 0xc3, 0xba, 0x01, 0x00, 0xf7, + 0xd9, 0x8b, 0x44, 0x08, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xe8, 0x52, 0xee, + 0x83, 0xfa, 0xff, 0x75, 0x0e, 0x3d, 0xff, 0xff, 0x75, 0x09, 0xc7, 0x46, + 0xfe, 0xff, 0xff, 0x80, 0x4c, 0x06, 0x20, 0x8b, 0x5c, 0x04, 0x8b, 0x47, + 0x04, 0xc7, 0x44, 0x02, 0x00, 0x00, 0x89, 0x04, 0x83, 0x7e, 0xfe, 0x00, + 0x75, 0x09, 0x8b, 0x5c, 0x04, 0xf6, 0x47, 0x08, 0x01, 0x75, 0x61, 0x8b, + 0x46, 0xfe, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x80, + 0x64, 0x07, 0xef, 0xf6, 0x44, 0x06, 0x02, 0x74, 0xce, 0x8b, 0x7c, 0x04, + 0x8b, 0x45, 0x04, 0x85, 0xc0, 0x74, 0xc4, 0x89, 0xc7, 0x8b, 0x4c, 0x02, + 0x85, 0xc9, 0x74, 0xbb, 0x83, 0x7e, 0xfe, 0x00, 0x75, 0xb5, 0x89, 0xcb, + 0x89, 0xfa, 0x8b, 0x44, 0x08, 0xe8, 0x80, 0x0a, 0x89, 0xc2, 0x3d, 0xff, + 0xff, 0x75, 0x0d, 0x89, 0x46, 0xfe, 0x80, 0x4c, 0x06, 0x20, 0x01, 0xd7, + 0x29, 0xd1, 0xeb, 0xd8, 0x85, 0xc0, 0x75, 0xf6, 0xe8, 0x46, 0xe7, 0x89, + 0xc3, 0xc7, 0x07, 0x0c, 0x00, 0xc7, 0x46, 0xfe, 0xff, 0xff, 0xeb, 0xe2, + 0x8b, 0x44, 0x08, 0xe8, 0xab, 0x0a, 0x3d, 0xff, 0xff, 0x75, 0x94, 0x89, + 0x46, 0xfe, 0xeb, 0x8f, 0x53, 0x89, 0xd3, 0xf6, 0xc4, 0xff, 0x74, 0x09, + 0x88, 0x27, 0x88, 0x47, 0x01, 0x89, 0xd8, 0x5b, 0xc3, 0x88, 0x07, 0xeb, + 0xf8, 0x53, 0x89, 0xc3, 0x8a, 0x07, 0x30, 0xe4, 0xe8, 0x14, 0x0a, 0x85, + 0xc0, 0x74, 0x05, 0xb8, 0x02, 0x00, 0x5b, 0xc3, 0xb8, 0x01, 0x00, 0x5b, + 0xc3, 0x53, 0x89, 0xc3, 0x8a, 0x07, 0x84, 0xc0, 0x75, 0x05, 0xb8, 0x01, + 0x00, 0x5b, 0xc3, 0x30, 0xe4, 0xe8, 0xf3, 0x09, 0x85, 0xc0, 0x74, 0x0b, + 0x80, 0x7f, 0x01, 0x00, 0x75, 0x05, 0xb8, 0x02, 0x00, 0x5b, 0xc3, 0x31, + 0xc0, 0x5b, 0xc3, 0x53, 0x56, 0x89, 0xc3, 0x89, 0xd6, 0x8a, 0x07, 0x30, + 0xe4, 0x89, 0xc2, 0x8a, 0x04, 0x29, 0xc2, 0x74, 0x05, 0x89, 0xd0, 0x5e, + 0x5b, 0xc3, 0x8a, 0x07, 0xe8, 0xc4, 0x09, 0x85, 0xc0, 0x74, 0xf2, 0x8a, + 0x47, 0x01, 0x30, 0xe4, 0x89, 0xc2, 0x8a, 0x44, 0x01, 0x29, 0xc2, 0xeb, + 0xe4, 0x53, 0x89, 0xc3, 0x8a, 0x07, 0x30, 0xe4, 0xe8, 0xa8, 0x09, 0x85, + 0xc0, 0x74, 0x0d, 0x80, 0x7f, 0x01, 0x00, 0x74, 0x07, 0x83, 0xc3, 0x02, + 0x89, 0xd8, 0x5b, 0xc3, 0x43, 0xeb, 0xf9, 0x53, 0x52, 0x89, 0xc3, 0x8a, + 0x17, 0x30, 0xf6, 0x89, 0xd0, 0xe8, 0x87, 0x09, 0x85, 0xc0, 0x74, 0x07, + 0x88, 0xd6, 0x8a, 0x5f, 0x01, 0x88, 0xda, 0x89, 0xd0, 0x5a, 0x5b, 0xc3, + 0x51, 0x57, 0x89, 0xc7, 0x8c, 0xd8, 0x8e, 0xc0, 0x83, 0xc9, 0xff, 0x33, + 0xc0, 0xf2, 0xae, 0xf7, 0xd1, 0x49, 0x89, 0xc8, 0x5f, 0x59, 0xc3, 0x56, + 0x57, 0x89, 0xd6, 0x89, 0xc7, 0x57, 0xf7, 0xc6, 0x01, 0x00, 0x74, 0x08, + 0xac, 0x88, 0x05, 0x47, 0x3c, 0x00, 0x74, 0x26, 0x8b, 0x04, 0x84, 0xc0, + 0x74, 0x1e, 0x89, 0x05, 0x83, 0xc7, 0x02, 0x84, 0xe4, 0x74, 0x17, 0x8b, + 0x44, 0x02, 0x84, 0xc0, 0x74, 0x0e, 0x89, 0x05, 0x83, 0xc6, 0x04, 0x83, + 0xc7, 0x02, 0x84, 0xe4, 0x75, 0xde, 0x74, 0x02, 0x88, 0x05, 0x5f, 0x89, + 0xf8, 0x5f, 0x5e, 0xc3, 0x56, 0x89, 0xc6, 0xb4, 0x47, 0xcd, 0x21, 0xe8, + 0xee, 0x00, 0x5e, 0xc3, 0x53, 0x52, 0x56, 0x85, 0xc0, 0x74, 0x55, 0x8b, + 0x36, 0x08, 0x16, 0x85, 0xf6, 0x74, 0x34, 0x39, 0xc6, 0x77, 0x08, 0x8b, + 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x43, 0x89, 0xf3, 0x8b, 0x74, 0x02, + 0x85, 0xf6, 0x74, 0x0c, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, + 0x39, 0xd0, 0x72, 0x2e, 0x8b, 0x77, 0x04, 0x85, 0xf6, 0x74, 0x0c, 0x39, + 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0x51, 0x8b, + 0x36, 0x4e, 0x04, 0x85, 0xf6, 0x75, 0x15, 0x8b, 0x36, 0x4c, 0x04, 0x85, + 0xf6, 0x74, 0x09, 0x39, 0xc6, 0x76, 0x5a, 0x8b, 0x74, 0x04, 0xeb, 0xf3, + 0xeb, 0x4f, 0xeb, 0x34, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, + 0x39, 0xd0, 0x72, 0x28, 0x89, 0xf3, 0x8b, 0x74, 0x02, 0x85, 0xf6, 0x74, + 0x0c, 0x39, 0xc6, 0x77, 0x08, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, + 0x13, 0x8b, 0x77, 0x04, 0x85, 0xf6, 0x74, 0xc3, 0x39, 0xc6, 0x77, 0xbf, + 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x73, 0xb7, 0x8c, 0xda, 0x89, 0xf3, + 0xe8, 0xe9, 0x02, 0x89, 0x36, 0x08, 0x16, 0x3b, 0x36, 0x4e, 0x04, 0x73, + 0x08, 0xa1, 0x50, 0x04, 0x3b, 0x44, 0x0a, 0x72, 0x0e, 0x5e, 0x5a, 0x5b, + 0xc3, 0x8b, 0x14, 0x01, 0xf2, 0x39, 0xd0, 0x72, 0xdb, 0xeb, 0x9c, 0x8b, + 0x44, 0x0a, 0xa3, 0x50, 0x04, 0xeb, 0xea, 0x51, 0x56, 0x57, 0x89, 0xd6, + 0x85, 0xdb, 0x75, 0x04, 0x5f, 0x5e, 0x59, 0xc3, 0x8c, 0xda, 0x89, 0xd9, + 0x89, 0xc7, 0x8e, 0xc2, 0x57, 0xac, 0xaa, 0x84, 0xc0, 0xe0, 0xfa, 0x33, + 0xc0, 0xd1, 0xe9, 0xf3, 0xab, 0x13, 0xc9, 0xf3, 0xaa, 0x58, 0xeb, 0xe0, + 0x73, 0x07, 0x50, 0xe8, 0x01, 0xea, 0x58, 0xeb, 0x02, 0x2b, 0xc0, 0xc3, + 0x73, 0x05, 0xe8, 0xf6, 0xe9, 0xeb, 0x02, 0x2b, 0xc0, 0xc3, 0x53, 0x51, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x06, 0x89, 0xc6, 0xba, 0x01, + 0x00, 0x31, 0xdb, 0x31, 0xc9, 0xe8, 0x7a, 0xeb, 0x89, 0x46, 0xfe, 0x89, + 0xd7, 0x83, 0xfa, 0xff, 0x75, 0x12, 0x3d, 0xff, 0xff, 0x75, 0x0d, 0xb8, + 0xff, 0xff, 0x89, 0xc2, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, + 0xba, 0x02, 0x00, 0x89, 0xf0, 0x31, 0xdb, 0x31, 0xc9, 0xe8, 0x52, 0xeb, + 0x8b, 0x5e, 0xfe, 0x89, 0x46, 0xfa, 0x89, 0x56, 0xfc, 0x89, 0xf9, 0x89, + 0xf0, 0x31, 0xd2, 0xe8, 0x40, 0xeb, 0x8b, 0x46, 0xfa, 0x8b, 0x56, 0xfc, + 0xeb, 0xd2, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0a, + 0x89, 0xc6, 0x8d, 0x5e, 0xfa, 0x8d, 0x56, 0xf6, 0xe8, 0x15, 0x08, 0x8b, + 0x5e, 0xfa, 0x8b, 0x4e, 0xfc, 0x89, 0x46, 0xfe, 0x56, 0x31, 0xc0, 0x89, + 0xd7, 0x50, 0x8b, 0x56, 0xf8, 0x50, 0x8b, 0x46, 0xf6, 0xe8, 0xd6, 0x09, + 0xe8, 0x08, 0x10, 0x8b, 0x4e, 0xfe, 0x89, 0xf0, 0x03, 0x0e, 0x86, 0x05, + 0x8b, 0x1e, 0x88, 0x05, 0x11, 0xfb, 0xe8, 0x0e, 0x11, 0x85, 0xc0, 0x74, + 0x08, 0xa1, 0x8c, 0x05, 0x99, 0x29, 0xc1, 0x19, 0xd3, 0x8b, 0x46, 0xf8, + 0x3d, 0x01, 0x00, 0x7f, 0x3d, 0x75, 0x07, 0x81, 0x7e, 0xf6, 0x0f, 0x26, + 0x73, 0x34, 0x85, 0xdb, 0x7f, 0x02, 0x75, 0x0e, 0x3d, 0x01, 0x00, 0x7f, + 0x29, 0x75, 0x07, 0x81, 0x7e, 0xf6, 0x0c, 0x26, 0x73, 0x20, 0x85, 0xdb, + 0x7c, 0x0c, 0x89, 0xc8, 0x89, 0xda, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, + 0x5b, 0xc3, 0x8b, 0x46, 0xf8, 0x85, 0xc0, 0x7c, 0x09, 0x75, 0xeb, 0x81, + 0x7e, 0xf6, 0xdf, 0x63, 0x77, 0xe4, 0xb9, 0xff, 0xff, 0x89, 0xcb, 0xeb, + 0xdd, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc1, 0x89, 0xd3, 0x85, 0xc0, 0x74, + 0x32, 0x85, 0xd2, 0x74, 0x35, 0xe8, 0x18, 0x13, 0x89, 0xc6, 0x89, 0xc8, + 0xe8, 0x20, 0x13, 0x89, 0xc7, 0x85, 0xc0, 0x75, 0x17, 0x89, 0xd8, 0xe8, + 0xf1, 0xed, 0x89, 0xc7, 0x85, 0xc0, 0x74, 0x21, 0x89, 0xf3, 0x89, 0xca, + 0xe8, 0x23, 0x00, 0x89, 0xc8, 0xe8, 0xd4, 0xfd, 0x89, 0xf8, 0x5f, 0x5e, + 0x59, 0x5b, 0xc3, 0x89, 0xd0, 0xe8, 0xd3, 0xed, 0xeb, 0xf4, 0xe8, 0xc3, + 0xfd, 0x31, 0xc0, 0xeb, 0xed, 0x89, 0xf2, 0x89, 0xc8, 0xe8, 0xe7, 0x12, + 0xeb, 0xe2, 0x51, 0x56, 0x57, 0x89, 0xd9, 0x89, 0xd6, 0x89, 0xc7, 0x57, + 0x8c, 0xd8, 0x8e, 0xc0, 0xd1, 0xe9, 0xf3, 0xa5, 0x13, 0xc9, 0xf3, 0xa4, + 0x5f, 0x89, 0xf8, 0x5f, 0x5e, 0x59, 0xc3, 0x80, 0x3e, 0x52, 0x04, 0x00, + 0x75, 0x03, 0x31, 0xc0, 0xc3, 0x52, 0x50, 0xcc, 0xeb, 0x06, 0x57, 0x56, + 0x49, 0x44, 0x45, 0x4f, 0xb8, 0x01, 0x00, 0x83, 0xc4, 0x04, 0xc3, 0xc3, + 0x89, 0xc3, 0xff, 0x16, 0x54, 0x04, 0xba, 0xff, 0x00, 0xb8, 0x10, 0x00, + 0xe8, 0x76, 0xeb, 0xff, 0x16, 0x54, 0x04, 0xff, 0x16, 0x56, 0x04, 0x89, + 0xd8, 0xe9, 0x0a, 0xe0, 0x89, 0xc2, 0xff, 0x16, 0x54, 0x04, 0xff, 0x16, + 0x56, 0x04, 0x89, 0xd0, 0xe9, 0xfb, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x56, 0x57, 0x1e, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xde, 0xc7, 0x46, 0xfe, 0x00, + 0x00, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0x6c, 0x00, 0x89, 0xc7, 0x83, 0xc7, + 0x03, 0x83, 0xe7, 0xfe, 0x39, 0xc7, 0x72, 0x60, 0x8e, 0xda, 0x8b, 0x44, + 0x0a, 0x83, 0xff, 0x06, 0x73, 0x03, 0xbf, 0x06, 0x00, 0x39, 0xc7, 0x77, + 0x4f, 0x8e, 0xda, 0x8b, 0x4c, 0x08, 0x8b, 0x5c, 0x06, 0x39, 0xcf, 0x76, + 0x50, 0x8e, 0xda, 0x8b, 0x07, 0x39, 0xc7, 0x77, 0x4f, 0x89, 0x4c, 0x08, + 0x29, 0xf8, 0xff, 0x44, 0x0c, 0x3d, 0x06, 0x00, 0x72, 0x5e, 0x89, 0xd9, + 0x01, 0xf9, 0x89, 0x4c, 0x06, 0x89, 0xce, 0x89, 0x04, 0x89, 0x3f, 0x89, + 0xcf, 0x8b, 0x77, 0x02, 0x89, 0x75, 0x02, 0x8b, 0x47, 0x04, 0x89, 0x45, + 0x04, 0x89, 0x4c, 0x04, 0x89, 0xc6, 0x89, 0x4c, 0x02, 0x8e, 0xda, 0x80, + 0x0f, 0x01, 0x83, 0xc3, 0x02, 0x89, 0x5e, 0xfe, 0x8b, 0x56, 0xfe, 0x89, + 0xd0, 0x89, 0xec, 0x5d, 0x1f, 0x5f, 0x5e, 0x59, 0xc3, 0x8b, 0x5c, 0x14, + 0x31, 0xc9, 0xeb, 0xa9, 0x39, 0xc1, 0x73, 0x02, 0x89, 0xc1, 0x89, 0xf0, + 0x8e, 0xda, 0x05, 0x10, 0x00, 0x8b, 0x5f, 0x04, 0x39, 0xc3, 0x75, 0x95, + 0x8b, 0x56, 0xfe, 0x89, 0x4c, 0x0a, 0xeb, 0xd3, 0xff, 0x4c, 0x0e, 0x8b, + 0x7f, 0x02, 0x89, 0x7c, 0x06, 0x8b, 0x77, 0x04, 0x89, 0x75, 0x04, 0x89, + 0x7c, 0x02, 0xeb, 0xb1, 0x51, 0x56, 0x57, 0x1e, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x06, 0x89, 0xd1, 0x89, 0x5e, 0xfe, 0x85, 0xc0, 0x75, 0x03, 0xe9, + 0x84, 0x00, 0x89, 0xc6, 0x8e, 0xda, 0x83, 0xee, 0x02, 0xf6, 0x04, 0x01, + 0x74, 0xf1, 0x8b, 0x04, 0x89, 0xf3, 0x24, 0xfe, 0x01, 0xc3, 0xf6, 0x07, + 0x01, 0x74, 0x03, 0xe9, 0x7e, 0x00, 0x03, 0x07, 0x8b, 0x7e, 0xfe, 0x89, + 0x04, 0x3b, 0x5d, 0x06, 0x75, 0x03, 0x89, 0x75, 0x06, 0x8e, 0xd9, 0x8b, + 0x7f, 0x02, 0x8b, 0x5f, 0x04, 0x89, 0x5d, 0x04, 0x89, 0x7f, 0x02, 0x8b, + 0x7e, 0xfe, 0xff, 0x4d, 0x0e, 0x8e, 0xd9, 0x8b, 0x7f, 0x02, 0x89, 0xfa, + 0x8b, 0x04, 0x03, 0x15, 0x89, 0x7e, 0xfc, 0x39, 0xd6, 0x75, 0x3b, 0x89, + 0xfb, 0x03, 0x07, 0x89, 0x07, 0x8b, 0x5e, 0xfe, 0x3b, 0x57, 0x06, 0x75, + 0x03, 0x89, 0x7f, 0x06, 0x8b, 0x76, 0xfc, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, + 0xff, 0x4f, 0x0c, 0x3b, 0x77, 0x06, 0x73, 0x08, 0x3b, 0x47, 0x08, 0x76, + 0x03, 0x89, 0x47, 0x08, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0x3b, 0x47, 0x0a, + 0x77, 0x0b, 0x89, 0xec, 0x5d, 0x1f, 0x5f, 0x5e, 0x59, 0xc3, 0xe9, 0xbd, + 0x00, 0x89, 0x47, 0x0a, 0x89, 0xec, 0x5d, 0x1f, 0x5f, 0x5e, 0x59, 0xc3, + 0x8b, 0x5e, 0xfe, 0x89, 0x04, 0x8b, 0x5f, 0x06, 0x39, 0xde, 0x72, 0x03, + 0xe9, 0x6c, 0x00, 0x3b, 0x77, 0x02, 0x77, 0x91, 0x8b, 0x5e, 0xfe, 0x8b, + 0x5f, 0x14, 0x39, 0xde, 0x72, 0x87, 0x8b, 0x5e, 0xfe, 0x8e, 0xd9, 0x8b, + 0x5f, 0x0e, 0x89, 0xd8, 0x8b, 0x7e, 0xfe, 0x40, 0x31, 0xd2, 0x89, 0x46, + 0xfa, 0x8b, 0x45, 0x0c, 0xf7, 0x76, 0xfa, 0x39, 0xd8, 0x73, 0x18, 0x8b, + 0x55, 0x0c, 0x29, 0xda, 0xd1, 0xe0, 0x39, 0xd3, 0x73, 0x4e, 0x8e, 0xd9, + 0x8b, 0x1c, 0x8e, 0xd9, 0x01, 0xf3, 0x83, 0x3f, 0xff, 0x75, 0x46, 0x8b, + 0x5e, 0xfe, 0x8e, 0xd9, 0x8b, 0x5f, 0x06, 0x39, 0xde, 0x72, 0x4b, 0x8e, + 0xd9, 0x39, 0xde, 0x73, 0x03, 0xe9, 0x3d, 0xff, 0x8b, 0x5f, 0x04, 0x39, + 0xde, 0x72, 0xf6, 0x8b, 0x5f, 0x04, 0x39, 0xde, 0x72, 0xef, 0x8b, 0x5f, + 0x04, 0xeb, 0xe6, 0x8b, 0x5f, 0x04, 0x39, 0xde, 0x72, 0xe3, 0x8b, 0x7e, + 0xfe, 0x83, 0xc7, 0x10, 0x8b, 0x45, 0x02, 0x89, 0xfb, 0x39, 0xc6, 0x76, + 0x8d, 0xe9, 0x11, 0xff, 0xb8, 0xff, 0xff, 0xeb, 0xad, 0xf6, 0x07, 0x01, + 0x74, 0xc7, 0x8b, 0x17, 0x80, 0xe2, 0xfe, 0x01, 0xd3, 0x48, 0x74, 0xab, + 0xeb, 0xa4, 0x8b, 0x5e, 0xfe, 0x8b, 0x5f, 0x14, 0xeb, 0xad, 0x8b, 0x7e, + 0xfe, 0xff, 0x45, 0x0e, 0x8b, 0x7e, 0xfc, 0x89, 0x5c, 0x04, 0x89, 0x7c, + 0x02, 0x89, 0x75, 0x04, 0x89, 0x77, 0x02, 0xe9, 0x01, 0xff, 0x31, 0xc0, + 0xc3, 0x53, 0x56, 0x57, 0x89, 0xc6, 0x8b, 0x1e, 0x4c, 0x04, 0x31, 0xff, + 0x85, 0xdb, 0x74, 0x0e, 0x39, 0xde, 0x72, 0x07, 0x89, 0xdf, 0x8b, 0x5f, + 0x04, 0xeb, 0xf1, 0x89, 0x77, 0x02, 0x89, 0x7c, 0x02, 0x89, 0x5c, 0x04, + 0x85, 0xff, 0x74, 0x39, 0x89, 0x75, 0x04, 0xc7, 0x44, 0x10, 0x00, 0x00, + 0xc7, 0x44, 0x08, 0x00, 0x00, 0xc7, 0x44, 0x0c, 0x00, 0x00, 0x8d, 0x44, + 0x10, 0xc7, 0x44, 0x0e, 0x00, 0x00, 0x89, 0x44, 0x12, 0x8b, 0x1c, 0x89, + 0x44, 0x14, 0x83, 0xeb, 0x16, 0x89, 0x44, 0x06, 0x89, 0x5c, 0x16, 0x01, + 0xf3, 0x8d, 0x44, 0x16, 0xc7, 0x47, 0x16, 0xff, 0xff, 0x5f, 0x5e, 0x5b, + 0xc3, 0x89, 0x36, 0x4c, 0x04, 0xeb, 0xc4, 0x53, 0xa1, 0x4c, 0x04, 0x85, + 0xc0, 0x74, 0x14, 0x89, 0xc3, 0x8b, 0x5f, 0x12, 0x8b, 0x07, 0x01, 0xd8, + 0x05, 0x02, 0x00, 0x3b, 0x06, 0x20, 0x04, 0x75, 0x04, 0x8b, 0x07, 0x5b, + 0xc3, 0x31, 0xc0, 0x5b, 0xc3, 0x53, 0x52, 0x89, 0xc3, 0x8b, 0x07, 0x89, + 0xc2, 0x83, 0xc2, 0x03, 0x80, 0xe2, 0xfe, 0x39, 0xc2, 0x73, 0x05, 0x31, + 0xc0, 0x5a, 0x5b, 0xc3, 0xe8, 0xc4, 0xff, 0x39, 0xd0, 0x72, 0x23, 0x31, + 0xd2, 0x89, 0xd0, 0x83, 0xc2, 0x1e, 0x39, 0xc2, 0x72, 0xe9, 0xa1, 0xb4, + 0x05, 0x39, 0xc2, 0x73, 0x05, 0x89, 0xc2, 0x80, 0xe2, 0xfe, 0x89, 0x17, + 0x85, 0xd2, 0x74, 0xd7, 0xb8, 0x01, 0x00, 0x5a, 0x5b, 0xc3, 0x29, 0xc2, + 0xeb, 0xdb, 0x53, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x50, 0xa1, 0xb6, 0x05, + 0x85, 0xc0, 0x74, 0x09, 0x83, 0x3e, 0x20, 0x04, 0xfe, 0x75, 0x08, 0x31, + 0xc0, 0x89, 0xec, 0x5d, 0xe9, 0x72, 0xff, 0x8d, 0x46, 0xfe, 0xe8, 0x98, + 0xff, 0x85, 0xc0, 0x74, 0xf0, 0x8b, 0x5e, 0xfe, 0x03, 0x1e, 0x20, 0x04, + 0x3b, 0x1e, 0x20, 0x04, 0x73, 0x03, 0xbb, 0xfe, 0xff, 0x89, 0xd8, 0xe8, + 0x7c, 0x0f, 0x89, 0xc6, 0x3d, 0xff, 0xff, 0x74, 0xd2, 0x3d, 0xf8, 0xff, + 0x77, 0xcd, 0x39, 0xc3, 0x76, 0xc9, 0x29, 0xc3, 0x89, 0x5e, 0xfe, 0x8d, + 0x47, 0xfe, 0x39, 0xd8, 0x77, 0xbd, 0x8b, 0x1e, 0x4c, 0x04, 0x89, 0x46, + 0xfe, 0x85, 0xdb, 0x74, 0x06, 0x83, 0x7f, 0x04, 0x00, 0x75, 0x3c, 0x85, + 0xdb, 0x74, 0x4e, 0x8b, 0x07, 0x8d, 0x7c, 0xfe, 0x01, 0xd8, 0x39, 0xc7, + 0x75, 0x43, 0x83, 0x46, 0xfe, 0x02, 0x8b, 0x46, 0xfe, 0x01, 0x07, 0x8b, + 0x46, 0xfe, 0x89, 0xc6, 0x01, 0xfe, 0x89, 0x05, 0xc7, 0x04, 0xff, 0xff, + 0x80, 0x0d, 0x01, 0xc7, 0x47, 0x0a, 0xff, 0xff, 0x8d, 0x45, 0x02, 0xff, + 0x47, 0x0c, 0xe8, 0x93, 0xf9, 0xb8, 0x01, 0x00, 0xe9, 0x72, 0xff, 0x39, + 0xf3, 0x76, 0x05, 0x8b, 0x5f, 0x04, 0xeb, 0xb1, 0x8b, 0x07, 0x01, 0xd8, + 0x05, 0x02, 0x00, 0x39, 0xf0, 0x73, 0xb0, 0xeb, 0xee, 0x8b, 0x46, 0xfe, + 0x3d, 0x1c, 0x00, 0x73, 0x03, 0xe9, 0x4f, 0xff, 0x89, 0x04, 0x89, 0xf0, + 0x89, 0xf3, 0xe8, 0x64, 0xfe, 0x89, 0xc7, 0xeb, 0xbb, 0x53, 0x89, 0xc3, + 0xf6, 0x47, 0x07, 0x20, 0x74, 0x02, 0x5b, 0xc3, 0x8b, 0x47, 0x08, 0xe8, + 0x1b, 0xe4, 0x85, 0xc0, 0x74, 0xf4, 0x80, 0x4f, 0x07, 0x20, 0xf6, 0x47, + 0x07, 0x07, 0x75, 0xea, 0x80, 0x4f, 0x07, 0x02, 0x5b, 0xc3, 0x53, 0x89, + 0xc3, 0x85, 0xc0, 0x74, 0x0d, 0xf6, 0xc6, 0xff, 0x74, 0x0a, 0x88, 0x37, + 0xb8, 0x02, 0x00, 0x88, 0x57, 0x01, 0x5b, 0xc3, 0xb8, 0x01, 0x00, 0x88, + 0x17, 0x5b, 0xc3, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x24, + 0x52, 0x89, 0xd9, 0xc6, 0x46, 0xdc, 0x00, 0x8d, 0x76, 0xdd, 0x89, 0xd7, + 0x8d, 0x5e, 0xfe, 0x89, 0x4e, 0xfe, 0x33, 0xd2, 0xf7, 0x37, 0x89, 0x07, + 0x89, 0xd3, 0x8a, 0x87, 0x64, 0x02, 0x88, 0x04, 0x8b, 0x46, 0xfe, 0x46, + 0x85, 0xc0, 0x75, 0xe4, 0x4e, 0x8a, 0x04, 0x88, 0x05, 0x47, 0x84, 0xc0, + 0x75, 0xf6, 0x8b, 0x46, 0xda, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, + 0x56, 0x89, 0xd6, 0x83, 0xfb, 0x0a, 0x75, 0x04, 0x85, 0xc0, 0x7c, 0x07, + 0xe8, 0xac, 0xff, 0x89, 0xf0, 0x5e, 0xc3, 0xf7, 0xd8, 0x42, 0xc6, 0x04, + 0x2d, 0xeb, 0xf1, 0x00, 0x93, 0x50, 0x92, 0x0b, 0xc0, 0x74, 0x02, 0xf7, + 0xe2, 0x91, 0x0b, 0xc0, 0x74, 0x04, 0xf7, 0xe3, 0x03, 0xc8, 0x58, 0xf7, + 0xe3, 0x03, 0xd1, 0xc3, 0x53, 0x52, 0xbb, 0x01, 0x00, 0xb8, 0x3c, 0x01, + 0x8c, 0xda, 0xe9, 0xf2, 0xe5, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x48, 0x53, 0x8b, 0x76, 0x08, 0x89, 0x76, 0xfc, 0x8d, 0x76, 0xb9, 0xc6, + 0x46, 0xb8, 0x00, 0x89, 0x76, 0xfe, 0x8b, 0x76, 0x0a, 0x8b, 0x5e, 0xb6, + 0x89, 0x76, 0xfa, 0x8d, 0x76, 0xfa, 0x8b, 0xfa, 0x85, 0xc0, 0x74, 0x27, + 0x8b, 0xd0, 0x8b, 0xc3, 0x33, 0xdb, 0x3b, 0x14, 0x72, 0x09, 0x8b, 0xd8, + 0x8b, 0xc2, 0x33, 0xd2, 0xf7, 0x34, 0x93, 0xf7, 0x34, 0x91, 0xf7, 0x34, + 0x97, 0xf7, 0x34, 0x89, 0x14, 0x8b, 0xd0, 0x8b, 0xc3, 0x8b, 0xd9, 0x8b, + 0xcf, 0xeb, 0x2c, 0x85, 0xdb, 0x74, 0x14, 0x8b, 0xd3, 0x8b, 0xc1, 0x33, + 0xdb, 0x33, 0xc9, 0x3b, 0x14, 0x72, 0xdf, 0x8b, 0xc8, 0x8b, 0xc2, 0x33, + 0xd2, 0xeb, 0xd4, 0x8b, 0xd1, 0x8b, 0xc7, 0x33, 0xc9, 0x33, 0xff, 0x3b, + 0x14, 0x72, 0xce, 0x8b, 0xf8, 0x8b, 0xc2, 0x33, 0xd2, 0xeb, 0xc3, 0x8b, + 0x7e, 0xfa, 0x89, 0xde, 0x89, 0x5e, 0xb6, 0x8a, 0x9d, 0x64, 0x02, 0x8b, + 0x7e, 0xfe, 0xff, 0x46, 0xfe, 0x88, 0x1d, 0x85, 0xc0, 0x75, 0x83, 0x85, + 0xf6, 0x74, 0x03, 0xe9, 0x7c, 0xff, 0x85, 0xc9, 0x75, 0xf9, 0x85, 0xd2, + 0x75, 0xf5, 0xff, 0x4e, 0xfe, 0x8b, 0x76, 0xfe, 0x8a, 0x04, 0x8b, 0x76, + 0xfc, 0xff, 0x46, 0xfc, 0x88, 0x04, 0x84, 0xc0, 0x75, 0xec, 0x8b, 0x46, + 0x08, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc2, 0x04, 0x00, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x02, 0x8b, 0x76, 0x08, 0x89, 0x76, 0xfe, 0x83, + 0x7e, 0x0a, 0x0a, 0x75, 0x0c, 0x85, 0xc0, 0x7c, 0x15, 0x75, 0x06, 0x85, + 0xdb, 0x75, 0x02, 0x85, 0xc9, 0xff, 0x76, 0x0a, 0xff, 0x76, 0xfe, 0xe8, + 0x13, 0xff, 0x89, 0xf0, 0xeb, 0xcb, 0x31, 0xff, 0x29, 0xd7, 0x89, 0xfa, + 0xbf, 0x00, 0x00, 0x19, 0xcf, 0x89, 0xf9, 0xbf, 0x00, 0x00, 0x19, 0xdf, + 0x89, 0xfb, 0xbf, 0x00, 0x00, 0x19, 0xc7, 0x89, 0xf8, 0x8d, 0x7c, 0x01, + 0xc6, 0x04, 0x2d, 0x89, 0x7e, 0xfe, 0xeb, 0xcd, 0x53, 0x52, 0x89, 0xc2, + 0x89, 0xc3, 0x8a, 0x07, 0x84, 0xc0, 0x74, 0x0f, 0x2c, 0x61, 0x3c, 0x19, + 0x76, 0x03, 0x43, 0xeb, 0xf1, 0x04, 0x41, 0x88, 0x07, 0xeb, 0xf7, 0x89, + 0xd0, 0x5a, 0x5b, 0xc3, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x24, + 0x53, 0x51, 0xc6, 0x46, 0xdc, 0x00, 0x8d, 0x76, 0xdd, 0x89, 0xdf, 0x8b, + 0x5e, 0xd8, 0x89, 0x5e, 0xfe, 0x8d, 0x5e, 0xfe, 0x33, 0xc9, 0x3b, 0x17, + 0x72, 0x06, 0x92, 0x87, 0xd1, 0xf7, 0x37, 0x91, 0xf7, 0x37, 0x89, 0x17, + 0x8b, 0xd1, 0x8b, 0x5e, 0xfe, 0x8a, 0x9f, 0x64, 0x02, 0x88, 0x1c, 0x46, + 0x85, 0xd2, 0x75, 0xd7, 0x85, 0xc0, 0x75, 0xd3, 0x4e, 0x8a, 0x04, 0x88, + 0x05, 0x47, 0x84, 0xc0, 0x75, 0xf6, 0x8b, 0x46, 0xda, 0x89, 0xec, 0x5d, + 0x5f, 0x5e, 0xc3, 0x56, 0x89, 0xde, 0x83, 0xf9, 0x0a, 0x75, 0x04, 0x85, + 0xd2, 0x7c, 0x07, 0xe8, 0x9e, 0xff, 0x89, 0xf0, 0x5e, 0xc3, 0xf7, 0xda, + 0xc6, 0x07, 0x2d, 0xf7, 0xd8, 0x83, 0xda, 0x00, 0x43, 0xeb, 0xec, 0x53, + 0x89, 0xc3, 0x8a, 0x9f, 0x11, 0x16, 0x80, 0xe3, 0x01, 0x30, 0xe7, 0x89, + 0xd8, 0x5b, 0xc3, 0x31, 0xc0, 0xe9, 0x0b, 0x0d, 0x51, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x02, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0x89, 0xdf, + 0xe8, 0x66, 0xe1, 0xa8, 0x80, 0x74, 0x14, 0xb0, 0x02, 0x89, 0xf3, 0x31, + 0xd2, 0x31, 0xc9, 0xb4, 0x42, 0xcd, 0x21, 0xd1, 0xd2, 0xd1, 0xca, 0x85, + 0xd2, 0x7c, 0x29, 0x8b, 0x56, 0xfe, 0x89, 0xf9, 0x89, 0xf3, 0xb4, 0x40, + 0xcd, 0x21, 0x19, 0xd2, 0x85, 0xd2, 0x7c, 0x18, 0x89, 0xc2, 0x39, 0xf8, + 0x74, 0x09, 0xe8, 0x9c, 0xdc, 0x89, 0xc6, 0xc7, 0x04, 0x0c, 0x00, 0x89, + 0xd0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, 0xe8, 0x74, 0xe1, 0xeb, + 0xf4, 0xe9, 0x1f, 0x0d, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x0a, 0x50, 0x52, 0x53, 0x89, 0xc3, 0x8b, 0x47, 0x08, 0xbb, 0x0c, 0x00, + 0x99, 0xf7, 0xfb, 0x8b, 0x7e, 0xf4, 0xc7, 0x46, 0xfa, 0x8a, 0x02, 0x8b, + 0x7d, 0x0a, 0x89, 0xd6, 0x81, 0xff, 0xfd, 0xf4, 0x7c, 0x16, 0x8b, 0x5e, + 0xf4, 0x8b, 0x47, 0x08, 0xbb, 0x0c, 0x00, 0x99, 0xf7, 0xfb, 0x01, 0xc7, + 0x85, 0xf6, 0x7c, 0x10, 0x85, 0xff, 0x7d, 0x12, 0xb8, 0xff, 0xff, 0x89, + 0xc2, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0xc3, 0x4f, 0x83, 0xc6, 0x0c, + 0xeb, 0xe6, 0x8d, 0x85, 0x6c, 0x07, 0xe8, 0xd3, 0x0c, 0x85, 0xc0, 0x74, + 0x03, 0xe9, 0xcd, 0x00, 0x8d, 0x45, 0x03, 0x99, 0xb1, 0x02, 0xd3, 0xe2, + 0x1b, 0xc2, 0xd3, 0xf8, 0xbb, 0x6d, 0x01, 0x99, 0x31, 0xc9, 0x89, 0x46, + 0xf6, 0x89, 0xf8, 0x89, 0x56, 0xf8, 0x99, 0xe8, 0x42, 0xfd, 0x8b, 0x4e, + 0xf6, 0x01, 0xc1, 0x8b, 0x46, 0xf8, 0x11, 0xd0, 0x89, 0x46, 0xf8, 0x8d, + 0x45, 0x63, 0xbb, 0x64, 0x00, 0x99, 0xf7, 0xfb, 0x99, 0x29, 0xc1, 0x8b, + 0x46, 0xf8, 0x19, 0xd0, 0x89, 0x46, 0xf8, 0x8d, 0x85, 0x2b, 0x01, 0xbb, + 0x90, 0x01, 0x99, 0xf7, 0xfb, 0x99, 0x89, 0xf3, 0x01, 0xc1, 0x8b, 0x7e, + 0xf8, 0x11, 0xd7, 0xd1, 0xe3, 0x03, 0x5e, 0xfa, 0x8b, 0x07, 0x8b, 0x76, + 0xf4, 0x99, 0x89, 0xfb, 0x01, 0xc1, 0x8b, 0x44, 0x06, 0x11, 0xd3, 0x99, + 0x01, 0xc8, 0x11, 0xda, 0xbb, 0x3c, 0x00, 0x05, 0xff, 0xff, 0x83, 0xd2, + 0xff, 0x89, 0x46, 0xfc, 0x89, 0x56, 0xfe, 0x8b, 0x44, 0x04, 0x31, 0xc9, + 0x99, 0x8b, 0x7e, 0xf4, 0xe8, 0xd9, 0xfc, 0x89, 0xc6, 0x8b, 0x45, 0x02, + 0x89, 0xd3, 0x99, 0x01, 0xf0, 0x11, 0xda, 0xbb, 0x3c, 0x00, 0x31, 0xc9, + 0xe8, 0xc5, 0xfc, 0x8b, 0x5e, 0xf4, 0x89, 0xc7, 0x8b, 0x07, 0x89, 0xd6, + 0x99, 0x01, 0xc7, 0x11, 0xd6, 0x85, 0xf6, 0x7f, 0x02, 0x75, 0x26, 0x83, + 0xfe, 0x01, 0x7c, 0x32, 0x75, 0x06, 0x81, 0xff, 0x80, 0x51, 0x72, 0x2a, + 0x83, 0x46, 0xfc, 0x01, 0x83, 0x56, 0xfe, 0x00, 0x81, 0xc7, 0x80, 0xae, + 0x83, 0xd6, 0xfe, 0xeb, 0xe2, 0xc7, 0x46, 0xfa, 0xa4, 0x02, 0xe9, 0x2b, + 0xff, 0x83, 0x46, 0xfc, 0xff, 0x83, 0x56, 0xfe, 0xff, 0x81, 0xc7, 0x80, + 0x51, 0x83, 0xd6, 0x01, 0xeb, 0xc3, 0x8b, 0x46, 0xfe, 0x85, 0xc0, 0x7d, + 0x03, 0xe9, 0xf0, 0xfe, 0x75, 0x07, 0x81, 0x7e, 0xfc, 0xde, 0x63, 0x72, + 0xf4, 0x83, 0x7e, 0xf2, 0x00, 0x74, 0x0e, 0x8b, 0x5e, 0xf2, 0x8b, 0x46, + 0xfc, 0x89, 0x07, 0x8b, 0x46, 0xfe, 0x89, 0x47, 0x02, 0x8b, 0x46, 0xf0, + 0x85, 0xc0, 0x74, 0x07, 0x89, 0xc3, 0x89, 0x3f, 0x89, 0x77, 0x02, 0x8b, + 0x46, 0xfc, 0xbb, 0x80, 0x51, 0xb9, 0x01, 0x00, 0x05, 0x21, 0x9c, 0x8b, + 0x56, 0xfe, 0x83, 0xd2, 0xff, 0xe8, 0x30, 0xfc, 0x01, 0xf8, 0x11, 0xf2, + 0xe9, 0xae, 0xfe, 0x53, 0x51, 0x56, 0x57, 0x89, 0xc1, 0x89, 0xc3, 0xbf, + 0x64, 0x00, 0x81, 0xc3, 0x6b, 0x07, 0x31, 0xd2, 0x89, 0xd8, 0xf7, 0xf7, + 0x89, 0xde, 0xd1, 0xee, 0xd1, 0xee, 0x29, 0xc6, 0x31, 0xd2, 0x89, 0xd8, + 0xbb, 0x90, 0x01, 0xf7, 0xf3, 0xbb, 0x6d, 0x01, 0x01, 0xc6, 0x31, 0xd2, + 0x89, 0xc8, 0x31, 0xc9, 0x81, 0xee, 0xcc, 0x01, 0xe8, 0xf1, 0xfb, 0x31, + 0xdb, 0x01, 0xf0, 0x11, 0xda, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x50, 0x52, 0x89, 0xde, 0x89, 0xcf, 0x8b, 0x56, 0x08, + 0x8b, 0x46, 0x0a, 0x85, 0xc9, 0x75, 0x1f, 0x81, 0xfb, 0xc0, 0xa8, 0x73, + 0x19, 0x85, 0xc0, 0x7f, 0x06, 0x75, 0x13, 0x85, 0xd2, 0x76, 0x0f, 0x81, + 0xc6, 0x80, 0x51, 0x83, 0xd7, 0x01, 0x83, 0x46, 0xfe, 0xff, 0x83, 0x56, + 0xfc, 0xff, 0xbb, 0x80, 0x51, 0xb9, 0x01, 0x00, 0x29, 0xd6, 0x19, 0xc7, + 0x89, 0xf0, 0x89, 0xfa, 0xe8, 0x80, 0x0b, 0xbb, 0x80, 0x51, 0xb9, 0x01, + 0x00, 0x01, 0x46, 0xfe, 0x11, 0x56, 0xfc, 0x89, 0xf0, 0x89, 0xfa, 0xe8, + 0x6d, 0x0b, 0x89, 0xdf, 0x89, 0xce, 0x89, 0xd8, 0x89, 0xca, 0xbb, 0x10, + 0x0e, 0x31, 0xc9, 0xe8, 0x5d, 0x0b, 0x8b, 0x5e, 0x0c, 0x89, 0xf2, 0x31, + 0xc9, 0x89, 0x47, 0x04, 0xbb, 0x10, 0x0e, 0x89, 0xf8, 0xe8, 0x4b, 0x0b, + 0x89, 0xdf, 0x89, 0xce, 0x89, 0xd8, 0x89, 0xca, 0xbb, 0x3c, 0x00, 0x31, + 0xc9, 0xe8, 0x3b, 0x0b, 0x8b, 0x5e, 0x0c, 0x89, 0xf2, 0x31, 0xc9, 0x89, + 0x47, 0x02, 0xbb, 0x3c, 0x00, 0x89, 0xf8, 0x8b, 0x76, 0x0c, 0xe8, 0x26, + 0x0b, 0x8b, 0x46, 0xfe, 0x8b, 0x56, 0xfc, 0x31, 0xc9, 0x89, 0x1c, 0xbb, + 0x6d, 0x01, 0xe8, 0x16, 0x0b, 0x8b, 0x4e, 0xfe, 0x89, 0xc3, 0x89, 0xc6, + 0xe8, 0x04, 0xff, 0x81, 0xc3, 0x6b, 0x07, 0x29, 0xc1, 0x85, 0xc9, 0x7c, + 0x62, 0x8b, 0x5e, 0x0c, 0xbf, 0x8a, 0x02, 0x89, 0x77, 0x0a, 0x8d, 0x84, + 0x6c, 0x07, 0x89, 0x4f, 0x0e, 0xe8, 0x7c, 0x0a, 0x85, 0xc0, 0x74, 0x03, + 0xbf, 0xa4, 0x02, 0x89, 0xc8, 0xbb, 0x1f, 0x00, 0x99, 0xf7, 0xfb, 0x89, + 0xc3, 0xd1, 0xe3, 0x01, 0xfb, 0x3b, 0x4f, 0x02, 0x7c, 0x01, 0x40, 0x8b, + 0x5e, 0x0c, 0x89, 0x47, 0x08, 0xd1, 0xe0, 0x01, 0xc7, 0x2b, 0x0d, 0x41, + 0x8b, 0x46, 0xfe, 0x89, 0x4f, 0x06, 0xbb, 0x07, 0x00, 0x05, 0x01, 0x00, + 0x8b, 0x56, 0xfc, 0x83, 0xd2, 0x00, 0x31, 0xc9, 0x8b, 0x76, 0x0c, 0xe8, + 0xad, 0x0a, 0x89, 0xf0, 0x89, 0x5c, 0x0c, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0xc2, 0x06, 0x00, 0x89, 0xd8, 0x4e, 0xe8, 0x27, 0x0a, 0x05, 0x6d, 0x01, + 0x4b, 0x01, 0xc1, 0xeb, 0x8c, 0x53, 0x51, 0x56, 0x89, 0xc3, 0x89, 0xd6, + 0x52, 0x31, 0xc0, 0xc7, 0x44, 0x10, 0x00, 0x00, 0x50, 0x8b, 0x4f, 0x02, + 0x50, 0x8b, 0x07, 0x31, 0xd2, 0x89, 0xc3, 0xb8, 0xdf, 0x63, 0xe8, 0xad, + 0xfe, 0xe9, 0xa6, 0xfe, 0x52, 0xba, 0x12, 0x17, 0xe8, 0xd6, 0xff, 0x5a, + 0xc3, 0x52, 0xa1, 0x8e, 0x05, 0x89, 0xc2, 0x30, 0xe6, 0x24, 0xfc, 0x80, + 0xe2, 0x01, 0xa3, 0x8e, 0x05, 0x89, 0xd0, 0x5a, 0xc3, 0x52, 0xa1, 0x8e, + 0x05, 0x89, 0xc2, 0x30, 0xe6, 0x0c, 0x01, 0xa3, 0x8e, 0x05, 0x80, 0xe2, + 0x01, 0x80, 0x26, 0x8e, 0x05, 0xfd, 0xeb, 0xe5, 0x53, 0x56, 0x89, 0xc3, + 0x89, 0xd6, 0x8d, 0x57, 0x01, 0x31, 0xc0, 0x80, 0x3f, 0x2d, 0x74, 0x0e, + 0x80, 0x3f, 0x2b, 0x75, 0x02, 0x89, 0xd3, 0x89, 0x04, 0x89, 0xd8, 0x5e, + 0x5b, 0xc3, 0xb8, 0x01, 0x00, 0xeb, 0xf2, 0x53, 0x56, 0x89, 0xc3, 0x89, + 0xd6, 0x31, 0xc0, 0x80, 0x3f, 0x30, 0x7c, 0xe7, 0x80, 0x3f, 0x39, 0x7f, + 0xe2, 0xba, 0x0a, 0x00, 0xf7, 0xea, 0x89, 0xc2, 0x8a, 0x07, 0x98, 0x01, + 0xd0, 0x43, 0x2d, 0x30, 0x00, 0xeb, 0xe4, 0x56, 0x89, 0xde, 0xe8, 0xd6, + 0xff, 0x89, 0xc3, 0x80, 0x3f, 0x3a, 0x74, 0x02, 0x5e, 0xc3, 0x40, 0x89, + 0xf2, 0xe8, 0xc7, 0xff, 0x89, 0xc3, 0x80, 0x3f, 0x3a, 0x75, 0xf1, 0x40, + 0x89, 0xca, 0xe8, 0xba, 0xff, 0x5e, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x04, 0x89, 0xc6, 0x89, 0x56, 0xfc, 0x31, 0xff, + 0x80, 0x3c, 0x3c, 0x74, 0x40, 0x89, 0xf2, 0x8a, 0x0c, 0x84, 0xc9, 0x75, + 0x3f, 0x89, 0xf3, 0x29, 0xd3, 0x89, 0x5e, 0xfe, 0x81, 0xfb, 0x80, 0x00, + 0x7e, 0x05, 0xc7, 0x46, 0xfe, 0x80, 0x00, 0x8b, 0x5e, 0xfe, 0x8b, 0x46, + 0xfc, 0xe8, 0xbe, 0xf4, 0x8b, 0x5e, 0xfc, 0x03, 0x5e, 0xfe, 0xc6, 0x07, + 0x00, 0x85, 0xff, 0x74, 0x06, 0x80, 0xf9, 0x3e, 0x75, 0x01, 0x46, 0x89, + 0xf0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xbf, 0x01, 0x00, + 0x01, 0xfe, 0xeb, 0xb9, 0x85, 0xff, 0x74, 0x08, 0x80, 0xf9, 0x3e, 0x74, + 0xb8, 0x46, 0xeb, 0xaf, 0x80, 0xf9, 0x2c, 0x74, 0xb0, 0x80, 0xf9, 0x2d, + 0x74, 0xab, 0x80, 0xf9, 0x2b, 0x74, 0xa6, 0x80, 0xf9, 0x30, 0x7c, 0xe9, + 0x80, 0xf9, 0x39, 0x7e, 0x9c, 0xeb, 0xe2, 0x53, 0x51, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x89, 0xc7, 0x89, 0xd6, 0x8d, 0x56, 0xfa, + 0xe8, 0xfd, 0xfe, 0x89, 0xc7, 0x8a, 0x05, 0x3c, 0x30, 0x7c, 0x04, 0x3c, + 0x39, 0x7e, 0x04, 0x89, 0xf8, 0xeb, 0xa6, 0x8d, 0x4e, 0xf6, 0x8d, 0x5e, + 0xf8, 0x31, 0xc0, 0x8d, 0x56, 0xfe, 0x89, 0x46, 0xf6, 0x89, 0x46, 0xf8, + 0x89, 0x46, 0xfe, 0x89, 0xf8, 0xe8, 0x1b, 0xff, 0x89, 0xc7, 0x8b, 0x46, + 0xfe, 0xd1, 0xe0, 0xd1, 0xe0, 0xb1, 0x04, 0x89, 0xc2, 0xd3, 0xe0, 0x29, + 0xd0, 0xbb, 0x3c, 0x00, 0x03, 0x46, 0xf8, 0x31, 0xc9, 0x99, 0xe8, 0x13, + 0xf9, 0x89, 0xc1, 0x8b, 0x46, 0xf6, 0x89, 0x56, 0xfc, 0x99, 0x01, 0xc8, + 0x89, 0x04, 0x8b, 0x46, 0xfc, 0x11, 0xd0, 0x89, 0x44, 0x02, 0x83, 0x7e, + 0xfa, 0x00, 0x74, 0xab, 0xf7, 0x5c, 0x02, 0xf7, 0x1c, 0x83, 0x5c, 0x02, + 0x00, 0xeb, 0xa0, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x08, 0x89, 0xc6, 0x89, 0xd7, 0xbb, 0xff, 0xff, 0x80, 0x3c, 0x4a, 0x75, + 0x05, 0xbb, 0x01, 0x00, 0x01, 0xde, 0x80, 0x3c, 0x4d, 0x75, 0x03, 0x46, + 0x31, 0xdb, 0x8d, 0x56, 0xf8, 0x89, 0xf0, 0x89, 0x5d, 0x10, 0xe8, 0x86, + 0xfe, 0x89, 0xc2, 0x89, 0xc6, 0x85, 0xdb, 0x74, 0x2c, 0x8b, 0x46, 0xf8, + 0x89, 0x45, 0x0e, 0x31, 0xc0, 0xc7, 0x46, 0xfa, 0x02, 0x00, 0x89, 0x46, + 0xfe, 0x89, 0x46, 0xfc, 0x80, 0x3c, 0x2f, 0x74, 0x52, 0x8b, 0x46, 0xfe, + 0x89, 0x05, 0x8b, 0x46, 0xfc, 0x89, 0x45, 0x02, 0x8b, 0x46, 0xfa, 0x89, + 0x45, 0x04, 0xe9, 0xe6, 0xfe, 0x8b, 0x46, 0xf8, 0x48, 0x89, 0xd3, 0x89, + 0x45, 0x08, 0x80, 0x3f, 0x2e, 0x75, 0x29, 0x8d, 0x56, 0xf8, 0x8d, 0x44, + 0x01, 0xe8, 0x3b, 0xfe, 0x89, 0xc3, 0x89, 0xc6, 0x8b, 0x46, 0xf8, 0x89, + 0x45, 0x06, 0x80, 0x3f, 0x2e, 0x75, 0x11, 0x8d, 0x56, 0xf8, 0x8d, 0x47, + 0x01, 0xe8, 0x23, 0xfe, 0x89, 0xc6, 0x8b, 0x46, 0xf8, 0x89, 0x45, 0x0c, + 0xc7, 0x45, 0x0e, 0x00, 0x00, 0xeb, 0x9c, 0x8d, 0x4e, 0xfe, 0x8d, 0x5e, + 0xfc, 0x8d, 0x56, 0xfa, 0x89, 0xf0, 0xe8, 0x2a, 0xfe, 0x89, 0xc6, 0xeb, + 0x9c, 0x53, 0x51, 0x56, 0x89, 0xc6, 0x89, 0xd1, 0x89, 0xd0, 0xbb, 0x10, + 0x0e, 0x99, 0xf7, 0xfb, 0x29, 0x44, 0x04, 0x89, 0xc8, 0xbb, 0x3c, 0x00, + 0x99, 0xf7, 0xfb, 0x99, 0xf7, 0xfb, 0x89, 0xc8, 0x29, 0x54, 0x02, 0x99, + 0xf7, 0xfb, 0x29, 0x14, 0xe9, 0x72, 0xfe, 0x53, 0x51, 0x56, 0x57, 0x55, + 0x89, 0xe5, 0x83, 0xec, 0x0a, 0x89, 0xd3, 0x8d, 0x56, 0xf8, 0x89, 0xc1, + 0xe8, 0xc4, 0xfd, 0x89, 0xc6, 0x39, 0xc1, 0x74, 0x05, 0x80, 0x3c, 0x2c, + 0x74, 0x05, 0x89, 0xc8, 0xe9, 0x4a, 0xfe, 0x40, 0x8d, 0x56, 0xfe, 0x89, + 0xc1, 0xe8, 0x88, 0xfd, 0x8d, 0x56, 0xfa, 0xe8, 0xa5, 0xfd, 0x89, 0xc6, + 0x39, 0xc1, 0x74, 0xe6, 0x80, 0x3c, 0x2c, 0x75, 0xe1, 0x83, 0x7e, 0xfe, + 0x00, 0x74, 0x06, 0x83, 0x7e, 0xfa, 0x01, 0x75, 0xd5, 0x40, 0x83, 0x7e, + 0xfe, 0x00, 0x74, 0x0b, 0x83, 0x7e, 0xfa, 0x01, 0x75, 0x05, 0xc7, 0x46, + 0xfa, 0x05, 0x00, 0x8d, 0x56, 0xf6, 0x89, 0xc1, 0xe8, 0x74, 0xfd, 0x89, + 0xc6, 0x39, 0xc1, 0x74, 0xb5, 0x80, 0x3c, 0x2c, 0x75, 0xb0, 0x46, 0x83, + 0x7e, 0xfa, 0x00, 0x75, 0x2e, 0x8b, 0x7e, 0xf8, 0xd1, 0xe7, 0x8b, 0x56, + 0xf6, 0x8b, 0x85, 0x88, 0x02, 0xc7, 0x47, 0x10, 0x01, 0x00, 0x01, 0xc2, + 0x89, 0x57, 0x0e, 0x8d, 0x56, 0xfc, 0x89, 0xf0, 0x89, 0xf1, 0xe8, 0x42, + 0xfd, 0x89, 0xc6, 0x39, 0xc1, 0x74, 0x83, 0x80, 0x3c, 0x2c, 0x74, 0x1d, + 0xe9, 0x7b, 0xff, 0xc7, 0x47, 0x10, 0x00, 0x00, 0x8b, 0x46, 0xf8, 0x48, + 0x89, 0x47, 0x08, 0x8b, 0x46, 0xfa, 0x89, 0x47, 0x06, 0x8b, 0x46, 0xf6, + 0x89, 0x47, 0x0c, 0xeb, 0xce, 0x8b, 0x56, 0xfc, 0x89, 0xd8, 0xf7, 0xda, + 0xe8, 0x0e, 0xff, 0xe9, 0xa1, 0xfd, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, + 0xec, 0x26, 0x50, 0x52, 0x53, 0x51, 0x8c, 0xd8, 0x8d, 0x7e, 0xda, 0x8e, + 0xc0, 0xbe, 0x90, 0x05, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, + 0xa5, 0x8d, 0x7e, 0xec, 0xbe, 0xa2, 0x05, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, + 0xa5, 0xa5, 0xa5, 0xa5, 0x8b, 0x76, 0xd8, 0x8d, 0x56, 0xda, 0x89, 0xf0, + 0xe8, 0xfc, 0xfe, 0x89, 0xc3, 0x39, 0xf0, 0x74, 0x05, 0x80, 0x3f, 0x2c, + 0x74, 0x08, 0x89, 0xf0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0x8d, 0x77, + 0x01, 0x8d, 0x56, 0xec, 0x89, 0xf0, 0x89, 0xf1, 0xe8, 0xdc, 0xfe, 0x89, + 0xc3, 0x39, 0xc6, 0x74, 0x4e, 0x80, 0x3f, 0x2c, 0x75, 0x49, 0x80, 0x7f, + 0x01, 0x00, 0x74, 0x43, 0x8d, 0x56, 0xfe, 0x40, 0xe8, 0x9c, 0xfc, 0x89, + 0xc3, 0x89, 0xc6, 0x80, 0x3f, 0x00, 0x75, 0xca, 0xbb, 0x12, 0x00, 0x8d, + 0x56, 0xda, 0x8b, 0x46, 0xd6, 0xe8, 0xc6, 0xf1, 0xbb, 0x12, 0x00, 0x8d, + 0x56, 0xec, 0x8b, 0x46, 0xd4, 0xe8, 0xba, 0xf1, 0x8b, 0x46, 0xfe, 0x99, + 0x8b, 0x7e, 0xd2, 0x89, 0xc1, 0xa1, 0x86, 0x05, 0x8b, 0x1e, 0x88, 0x05, + 0x29, 0xc8, 0x19, 0xd3, 0x89, 0x05, 0x89, 0x5d, 0x02, 0xeb, 0x97, 0x89, + 0xc8, 0xeb, 0x95, 0x53, 0x51, 0x52, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x04, + 0x89, 0xc3, 0x31, 0xc0, 0xa3, 0x8a, 0x05, 0x80, 0x3f, 0x3a, 0x75, 0x01, + 0x43, 0xba, 0x80, 0x04, 0x89, 0xd8, 0xe8, 0x86, 0xfc, 0xba, 0x86, 0x05, + 0xe8, 0x04, 0xfd, 0x89, 0xc3, 0x8a, 0x07, 0x84, 0xc0, 0x75, 0x05, 0xa2, + 0x01, 0x05, 0xeb, 0x52, 0xa1, 0x86, 0x05, 0xc7, 0x06, 0x8a, 0x05, 0x01, + 0x00, 0x05, 0xf0, 0xf1, 0x89, 0x46, 0xfc, 0xa1, 0x88, 0x05, 0x15, 0xff, + 0xff, 0xba, 0x01, 0x05, 0x89, 0x46, 0xfe, 0x89, 0xd8, 0xc7, 0x06, 0x8c, + 0x05, 0x10, 0x0e, 0xe8, 0x4d, 0xfc, 0x89, 0xc3, 0x80, 0x3f, 0x2c, 0x75, + 0x2c, 0x8d, 0x4e, 0xfc, 0xbb, 0x6e, 0x04, 0xba, 0x5c, 0x04, 0x40, 0xe8, + 0xe4, 0xfe, 0x89, 0xc3, 0x80, 0x3f, 0x00, 0x75, 0x11, 0xa1, 0x86, 0x05, + 0x2b, 0x46, 0xfc, 0xa3, 0x8c, 0x05, 0x89, 0xc2, 0xb8, 0x6e, 0x04, 0xe8, + 0xd7, 0xfd, 0x89, 0xec, 0x5d, 0x5a, 0x59, 0x5b, 0xc3, 0x8d, 0x56, 0xfc, + 0xe8, 0x98, 0xfc, 0x89, 0xc3, 0xa1, 0x86, 0x05, 0x2b, 0x46, 0xfc, 0xa3, + 0x8c, 0x05, 0x80, 0x3f, 0x2c, 0x75, 0xe3, 0xba, 0x5c, 0x04, 0x8d, 0x47, + 0x01, 0xe8, 0xff, 0xfc, 0x89, 0xc3, 0x80, 0x3f, 0x2c, 0x75, 0xd3, 0xba, + 0x6e, 0x04, 0x40, 0xe8, 0xf1, 0xfc, 0xb8, 0x6e, 0x04, 0x8b, 0x16, 0x8c, + 0x05, 0xeb, 0xc0, 0x85, 0xc0, 0x75, 0x0f, 0xa0, 0x8e, 0x05, 0xa8, 0x01, + 0x74, 0x10, 0xa8, 0x02, 0x74, 0x0c, 0xb8, 0x01, 0x00, 0xc3, 0x80, 0x26, + 0x8e, 0x05, 0xfd, 0x31, 0xc0, 0xc3, 0xb8, 0x01, 0x00, 0x80, 0x0e, 0x8e, + 0x05, 0x02, 0xc3, 0x52, 0xb8, 0x5e, 0x01, 0xe8, 0x0d, 0x06, 0x89, 0xc2, + 0xe8, 0xd0, 0xff, 0x85, 0xc0, 0x75, 0x04, 0x85, 0xd2, 0x75, 0x02, 0x5a, + 0xc3, 0x89, 0xd0, 0xe8, 0x01, 0xff, 0x5a, 0xc3, 0x53, 0x51, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x14, 0x89, 0xc6, 0x8b, 0x44, 0x10, 0x85, + 0xc0, 0x74, 0x14, 0x3d, 0x01, 0x00, 0x75, 0x0c, 0x8b, 0x44, 0x0e, 0x48, + 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, 0xe9, 0x93, 0x00, 0x89, + 0xd0, 0x05, 0x6c, 0x07, 0xe8, 0xd1, 0x04, 0x85, 0xc0, 0x75, 0x03, 0xe9, + 0x78, 0x00, 0xbb, 0xa4, 0x02, 0x8b, 0x44, 0x08, 0xd1, 0xe0, 0x01, 0xc3, + 0x8b, 0x47, 0x02, 0x2b, 0x07, 0x89, 0x46, 0xfe, 0x31, 0xc0, 0xc7, 0x46, + 0xf2, 0x01, 0x00, 0x89, 0x46, 0xec, 0x89, 0x46, 0xee, 0x89, 0x46, 0xf0, + 0x8b, 0x44, 0x08, 0xc7, 0x46, 0xfc, 0x00, 0x00, 0x89, 0x46, 0xf4, 0x8d, + 0x46, 0xec, 0x89, 0x56, 0xf6, 0xe8, 0x3e, 0xef, 0x8b, 0x44, 0x0c, 0x2b, + 0x46, 0xf8, 0x05, 0x07, 0x00, 0xbb, 0x07, 0x00, 0x99, 0xf7, 0xfb, 0x8b, + 0x44, 0x06, 0x3d, 0x05, 0x00, 0x75, 0x34, 0xb1, 0x03, 0x48, 0x89, 0xd7, + 0x89, 0xc3, 0xd3, 0xe0, 0x47, 0x29, 0xd8, 0x01, 0xf8, 0x3b, 0x46, 0xfe, + 0x7e, 0x1d, 0x8b, 0x44, 0x06, 0x2d, 0x02, 0x00, 0x8b, 0x5e, 0xfa, 0xb1, + 0x03, 0x01, 0xd3, 0x89, 0xc2, 0xd3, 0xe0, 0x29, 0xd0, 0x01, 0xd8, 0xe9, + 0x6e, 0xff, 0xbb, 0x8a, 0x02, 0xeb, 0x86, 0x89, 0xd8, 0xeb, 0xe5, 0x48, + 0xeb, 0xe2, 0x8b, 0x44, 0x0e, 0xe9, 0x5c, 0xff, 0x56, 0x57, 0x89, 0xc6, + 0x89, 0xd7, 0x83, 0x7c, 0x10, 0x00, 0x75, 0x10, 0x83, 0x7d, 0x10, 0x00, + 0x75, 0x0a, 0x8b, 0x44, 0x08, 0x3b, 0x45, 0x08, 0x7f, 0x16, 0x7c, 0x1a, + 0x89, 0xda, 0x89, 0xf0, 0xe8, 0x1d, 0xff, 0x89, 0xc6, 0x89, 0xda, 0x89, + 0xf8, 0xe8, 0x14, 0xff, 0x39, 0xc6, 0x7e, 0x06, 0xb8, 0x01, 0x00, 0x5f, + 0x5e, 0xc3, 0x31, 0xc0, 0x5f, 0x5e, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x57, + 0x55, 0x89, 0xe5, 0x83, 0xec, 0x16, 0x89, 0xc6, 0x8b, 0x44, 0x10, 0x85, + 0xc0, 0x7c, 0x05, 0x89, 0xc7, 0xe9, 0x90, 0x00, 0x31, 0xff, 0x83, 0x3e, + 0x8a, 0x05, 0x00, 0x75, 0x03, 0xe9, 0x81, 0x00, 0xba, 0x6e, 0x04, 0xb8, + 0x5c, 0x04, 0x8b, 0x5c, 0x0a, 0xe8, 0x94, 0xff, 0x89, 0x46, 0xf8, 0x85, + 0xc0, 0x75, 0x03, 0xe9, 0x79, 0x00, 0xc7, 0x46, 0xfc, 0x6e, 0x04, 0xc7, + 0x46, 0xfe, 0x5c, 0x04, 0x8b, 0x44, 0x08, 0x89, 0x46, 0xfa, 0x8b, 0x44, + 0x0a, 0x05, 0x6c, 0x07, 0xe8, 0xb1, 0x03, 0x85, 0xc0, 0x74, 0x68, 0xbb, + 0xa4, 0x02, 0x8b, 0x46, 0xfa, 0xd1, 0xe0, 0x01, 0xc3, 0x8b, 0x57, 0x02, + 0x2b, 0x17, 0x8b, 0x5e, 0xfc, 0xc7, 0x46, 0xea, 0x00, 0x00, 0x8b, 0x47, + 0x10, 0x89, 0x56, 0xee, 0x85, 0xc0, 0x75, 0x4c, 0x8b, 0x46, 0xfa, 0x3b, + 0x47, 0x08, 0x7e, 0x4d, 0xbf, 0x01, 0x00, 0x83, 0x7e, 0xea, 0x00, 0x74, + 0x0f, 0x8b, 0x56, 0xfc, 0x89, 0xf0, 0xe8, 0xbb, 0x01, 0x85, 0xc0, 0x75, + 0x32, 0xbf, 0x01, 0x00, 0x85, 0xff, 0x75, 0x2e, 0x8b, 0x46, 0xf8, 0x85, + 0xc0, 0x74, 0x02, 0x89, 0xc7, 0x89, 0x7c, 0x10, 0x89, 0xf8, 0x89, 0xec, + 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xc7, 0x46, 0xfc, 0x5c, 0x04, + 0xc7, 0x46, 0xfe, 0x6e, 0x04, 0xeb, 0x85, 0xbb, 0x8a, 0x02, 0xeb, 0x96, + 0xe9, 0x7d, 0x00, 0xe9, 0xa6, 0x00, 0xe9, 0xa8, 0x00, 0x75, 0xb4, 0x8b, + 0x44, 0x0c, 0x05, 0x07, 0x00, 0x2b, 0x47, 0x0c, 0xbb, 0x07, 0x00, 0x99, + 0xf7, 0xfb, 0x8b, 0x44, 0x06, 0x29, 0xd0, 0x89, 0x46, 0xf0, 0x8b, 0x44, + 0x0c, 0x8b, 0x5e, 0xfc, 0x05, 0x06, 0x00, 0x2b, 0x47, 0x0c, 0xbb, 0x07, + 0x00, 0x99, 0xf7, 0xfb, 0x8b, 0x44, 0x06, 0x48, 0x29, 0xd0, 0x8b, 0x5e, + 0xfc, 0x89, 0x46, 0xf4, 0x8b, 0x47, 0x06, 0x3d, 0x05, 0x00, 0x75, 0x1c, + 0x8b, 0x46, 0xee, 0x2d, 0x07, 0x00, 0x3b, 0x46, 0xf0, 0x7c, 0x03, 0xe9, + 0x69, 0xff, 0xbf, 0x01, 0x00, 0x3b, 0x46, 0xf4, 0x7c, 0x03, 0xe9, 0x64, + 0xff, 0xe9, 0x5b, 0xff, 0x48, 0xb1, 0x03, 0x89, 0xc2, 0xd3, 0xe2, 0x29, + 0xc2, 0x89, 0xd0, 0x40, 0x3b, 0x46, 0xf0, 0x7f, 0xde, 0xbf, 0x01, 0x00, + 0x3b, 0x46, 0xf4, 0x7f, 0xe1, 0xe9, 0x3f, 0xff, 0x8b, 0x57, 0x0e, 0x3d, + 0x01, 0x00, 0x75, 0x15, 0x8b, 0x44, 0x0a, 0x05, 0x6c, 0x07, 0xe8, 0xaf, + 0x02, 0x85, 0xc0, 0x74, 0x07, 0x3b, 0x16, 0x8e, 0x02, 0x7e, 0x01, 0x42, + 0x4a, 0x8b, 0x44, 0x0e, 0x39, 0xc2, 0x7f, 0xaf, 0xbf, 0x01, 0x00, 0x74, + 0xb5, 0xe9, 0x13, 0xff, 0x31, 0xff, 0xe9, 0x23, 0xff, 0x8b, 0x5e, 0xfe, + 0x8b, 0x47, 0x10, 0xc7, 0x46, 0xec, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x0c, + 0x8b, 0x46, 0xfa, 0x3b, 0x47, 0x08, 0x7e, 0x07, 0x31, 0xff, 0xeb, 0x52, + 0xe9, 0x8d, 0x00, 0x75, 0x4d, 0x8b, 0x44, 0x0c, 0x05, 0x07, 0x00, 0x2b, + 0x47, 0x0c, 0xbb, 0x07, 0x00, 0x99, 0xf7, 0xfb, 0x8b, 0x44, 0x06, 0x29, + 0xd0, 0x89, 0x46, 0xf6, 0x8b, 0x44, 0x0c, 0x8b, 0x5e, 0xfe, 0x05, 0x06, + 0x00, 0x2b, 0x47, 0x0c, 0xbb, 0x07, 0x00, 0x99, 0xf7, 0xfb, 0x8b, 0x44, + 0x06, 0x48, 0x29, 0xd0, 0x8b, 0x5e, 0xfe, 0x89, 0x46, 0xf2, 0x8b, 0x47, + 0x06, 0x31, 0xff, 0x3d, 0x05, 0x00, 0x75, 0x34, 0x8b, 0x46, 0xee, 0x2d, + 0x07, 0x00, 0x3b, 0x46, 0xf6, 0x7c, 0x22, 0xbf, 0x01, 0x00, 0x83, 0x7e, + 0xec, 0x00, 0x74, 0x0a, 0x8b, 0x56, 0xfe, 0x89, 0xf0, 0xe8, 0x5c, 0x00, + 0x89, 0xc7, 0x8b, 0x46, 0xf8, 0x85, 0xc0, 0x75, 0x03, 0xe9, 0xa9, 0xfe, + 0x29, 0xf8, 0xe9, 0xa2, 0xfe, 0x3b, 0x46, 0xf2, 0x7d, 0xe2, 0xeb, 0xda, + 0x48, 0xb1, 0x03, 0x89, 0xc2, 0xd3, 0xe2, 0x29, 0xc2, 0x89, 0xd0, 0x40, + 0x3b, 0x46, 0xf6, 0x7f, 0xc6, 0x3b, 0x46, 0xf2, 0x7f, 0xca, 0xeb, 0xc2, + 0x8b, 0x57, 0x0e, 0x3d, 0x01, 0x00, 0x75, 0x15, 0x8b, 0x44, 0x0a, 0x05, + 0x6c, 0x07, 0xe8, 0xd3, 0x01, 0x85, 0xc0, 0x74, 0x07, 0x3b, 0x16, 0x8e, + 0x02, 0x7e, 0x01, 0x42, 0x4a, 0x8b, 0x44, 0x0e, 0x39, 0xc2, 0x7f, 0x9e, + 0x31, 0xff, 0x39, 0xc2, 0x74, 0x9e, 0xeb, 0x96, 0x53, 0x56, 0x89, 0xc6, + 0x89, 0xd3, 0x8b, 0x54, 0x04, 0x31, 0xc0, 0x3b, 0x57, 0x04, 0x7c, 0x12, + 0x75, 0x13, 0x8b, 0x54, 0x02, 0x3b, 0x57, 0x02, 0x7c, 0x08, 0x75, 0x09, + 0x8b, 0x34, 0x3b, 0x37, 0x7d, 0x03, 0xb8, 0x01, 0x00, 0x5e, 0x5b, 0xc3, + 0x53, 0x89, 0xc3, 0x83, 0xeb, 0x02, 0x8b, 0x07, 0x24, 0xfe, 0x2d, 0x02, + 0x00, 0x5b, 0xc3, 0x53, 0x51, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, + 0x04, 0x89, 0xc6, 0x89, 0x56, 0xfe, 0x31, 0xff, 0x8d, 0x4e, 0xfc, 0x8b, + 0x5e, 0xfe, 0x8c, 0xd8, 0x89, 0xf2, 0xe8, 0xcb, 0x02, 0x85, 0xc0, 0x74, + 0x10, 0x3d, 0x01, 0x00, 0x74, 0x09, 0x3d, 0x02, 0x00, 0x75, 0xe5, 0x85, + 0xff, 0x74, 0x0c, 0x31, 0xf6, 0x89, 0xf0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, + 0x59, 0x5b, 0xc3, 0x8b, 0x46, 0xfc, 0xe8, 0x5d, 0xf0, 0x85, 0xc0, 0x74, + 0xea, 0xbf, 0x01, 0x00, 0xeb, 0xc6, 0x52, 0x89, 0xc2, 0xa1, 0xb6, 0x05, + 0x89, 0x16, 0xb6, 0x05, 0x5a, 0xc3, 0x53, 0x51, 0x52, 0x89, 0xc2, 0x3b, + 0x06, 0x2a, 0x04, 0x72, 0x3b, 0x89, 0xd3, 0xb1, 0x04, 0x83, 0xc3, 0x0f, + 0xd3, 0xeb, 0x8c, 0xd8, 0x85, 0xdb, 0x75, 0x03, 0xbb, 0x00, 0x10, 0x80, + 0x3e, 0x26, 0x04, 0x00, 0x75, 0x0b, 0x8c, 0xd0, 0x2b, 0x06, 0x22, 0x04, + 0x01, 0xc3, 0xa1, 0x22, 0x04, 0x8e, 0xc0, 0xb4, 0x4a, 0xcd, 0x21, 0x19, + 0xdb, 0x85, 0xdb, 0x7c, 0x0b, 0xa1, 0x20, 0x04, 0x89, 0x16, 0x20, 0x04, + 0x5a, 0x59, 0x5b, 0xc3, 0xe8, 0x3a, 0xd0, 0x89, 0xc3, 0xb8, 0xff, 0xff, + 0xc7, 0x07, 0x05, 0x00, 0xeb, 0xee, 0x03, 0x06, 0x20, 0x04, 0xeb, 0xa6, + 0x53, 0x52, 0xbb, 0x01, 0x01, 0x31, 0xc0, 0x31, 0xd2, 0xa3, 0xba, 0x05, + 0xa3, 0xb8, 0x05, 0xb8, 0x10, 0x16, 0xe8, 0xdb, 0xd6, 0x5a, 0x5b, 0xc3, + 0x53, 0x51, 0x56, 0x89, 0xc6, 0x89, 0xd1, 0x8e, 0xc2, 0x26, 0x83, 0x3c, + 0x00, 0x74, 0x28, 0xc7, 0x06, 0xba, 0x05, 0x01, 0x00, 0x8e, 0xc1, 0x26, + 0x8b, 0x04, 0x85, 0xc0, 0x74, 0x19, 0x88, 0xe2, 0x30, 0xf6, 0x30, 0xe4, + 0x89, 0xd3, 0xba, 0x01, 0x00, 0x29, 0xc3, 0x05, 0x10, 0x16, 0x43, 0x40, + 0x46, 0x46, 0xe8, 0xa3, 0xd6, 0xeb, 0xde, 0x5e, 0x59, 0x5b, 0xc3, 0x53, + 0x52, 0x89, 0xc2, 0xe8, 0xa6, 0xff, 0x83, 0xfa, 0xff, 0x74, 0x3f, 0x83, + 0xfa, 0xfe, 0x74, 0x3a, 0x83, 0xfa, 0xfd, 0x74, 0x49, 0x83, 0xfa, 0xfc, + 0x75, 0x26, 0xbb, 0x1f, 0x00, 0xba, 0x01, 0x00, 0xb8, 0x92, 0x16, 0xe8, + 0x76, 0xd6, 0xbb, 0x1d, 0x00, 0xba, 0x01, 0x00, 0xb8, 0xf1, 0x16, 0xe8, + 0x6a, 0xd6, 0xc7, 0x06, 0xba, 0x05, 0x01, 0x00, 0xc7, 0x06, 0xb8, 0x05, + 0xa4, 0x03, 0xeb, 0x1e, 0x85, 0xd2, 0x74, 0x06, 0xb8, 0x01, 0x00, 0x5a, + 0x5b, 0xc3, 0xe8, 0x26, 0x03, 0x85, 0xd2, 0x75, 0x04, 0x85, 0xc0, 0x74, + 0x09, 0xe8, 0x6c, 0xff, 0xe8, 0x41, 0x03, 0xa3, 0xb8, 0x05, 0x31, 0xc0, + 0x5a, 0x5b, 0xc3, 0x53, 0x89, 0xc3, 0xb4, 0x3e, 0xcd, 0x21, 0xe8, 0x4b, + 0xea, 0x5b, 0xc3, 0x53, 0x89, 0xc3, 0xb4, 0x68, 0xf8, 0xcd, 0x21, 0xe8, + 0x3e, 0xea, 0x5b, 0xc3, 0x53, 0x51, 0x52, 0x89, 0xc3, 0xa8, 0x03, 0x75, + 0x1d, 0xb9, 0x64, 0x00, 0x31, 0xd2, 0xf7, 0xf1, 0x85, 0xd2, 0x75, 0x0b, + 0x89, 0xd8, 0xbb, 0x90, 0x01, 0xf7, 0xf3, 0x85, 0xd2, 0x75, 0x07, 0xb8, + 0x01, 0x00, 0x5a, 0x59, 0x5b, 0xc3, 0x31, 0xc0, 0xeb, 0xf8, 0x0b, 0xd2, + 0x78, 0x16, 0x0b, 0xc9, 0x79, 0x41, 0xf7, 0xd9, 0xf7, 0xdb, 0x83, 0xd9, + 0x00, 0xe8, 0x37, 0x00, 0xf7, 0xda, 0xf7, 0xd8, 0x83, 0xda, 0x00, 0xc3, + 0xf7, 0xda, 0xf7, 0xd8, 0x83, 0xda, 0x00, 0x0b, 0xc9, 0x79, 0x12, 0xf7, + 0xd9, 0xf7, 0xdb, 0x83, 0xd9, 0x00, 0xe8, 0x1a, 0x00, 0xf7, 0xd9, 0xf7, + 0xdb, 0x83, 0xd9, 0x00, 0xc3, 0xe8, 0x0f, 0x00, 0xf7, 0xd9, 0xf7, 0xdb, + 0x83, 0xd9, 0x00, 0xf7, 0xda, 0xf7, 0xd8, 0x83, 0xda, 0x00, 0xc3, 0x0b, + 0xc9, 0x75, 0x1a, 0x4b, 0x74, 0x16, 0x43, 0x3b, 0xda, 0x77, 0x09, 0x8b, + 0xc8, 0x8b, 0xc2, 0x2b, 0xd2, 0xf7, 0xf3, 0x91, 0xf7, 0xf3, 0x8b, 0xda, + 0x8b, 0xd1, 0x2b, 0xc9, 0xc3, 0x3b, 0xca, 0x72, 0x1a, 0x75, 0x10, 0x3b, + 0xd8, 0x77, 0x0c, 0x2b, 0xc3, 0x8b, 0xd8, 0x2b, 0xc9, 0x2b, 0xd2, 0xb8, + 0x01, 0x00, 0xc3, 0x2b, 0xc9, 0x2b, 0xdb, 0x93, 0x87, 0xca, 0xc3, 0x55, + 0x56, 0x2b, 0xf6, 0x8b, 0xee, 0x03, 0xdb, 0x13, 0xc9, 0x72, 0x11, 0x45, + 0x3b, 0xca, 0x72, 0xf5, 0x77, 0x04, 0x3b, 0xd8, 0x76, 0xef, 0xf8, 0x13, + 0xf6, 0x4d, 0x78, 0x20, 0xd1, 0xd9, 0xd1, 0xdb, 0x2b, 0xc3, 0x19, 0xca, + 0xf5, 0x72, 0xf0, 0x03, 0xf6, 0x4d, 0x78, 0x0c, 0xd1, 0xe9, 0xd1, 0xdb, + 0x03, 0xc3, 0x13, 0xd1, 0x73, 0xf1, 0xeb, 0xdf, 0x03, 0xc3, 0x13, 0xd1, + 0x8b, 0xd8, 0x8b, 0xca, 0x8b, 0xc6, 0x33, 0xd2, 0x5e, 0x5d, 0xc3, 0x53, + 0x51, 0x52, 0x56, 0x57, 0x89, 0xc7, 0x8b, 0x36, 0x26, 0x17, 0x85, 0xf6, + 0x74, 0x5e, 0x85, 0xc0, 0x74, 0x5a, 0x8b, 0x14, 0x85, 0xd2, 0x74, 0x54, + 0x89, 0xfb, 0x89, 0xd0, 0xe8, 0x46, 0xe7, 0x85, 0xc0, 0x74, 0x05, 0x83, + 0xc6, 0x02, 0xeb, 0xea, 0x89, 0xd8, 0xe8, 0x38, 0xe7, 0x85, 0xc0, 0x75, + 0x26, 0x89, 0xd0, 0xe8, 0xa1, 0xe7, 0xe8, 0xff, 0x01, 0x89, 0xc1, 0x89, + 0xd8, 0xe8, 0x97, 0xe7, 0xe8, 0xf5, 0x01, 0x29, 0xc1, 0x75, 0xdc, 0x89, + 0xd0, 0xe8, 0x6d, 0xe7, 0x89, 0xc2, 0x89, 0xd8, 0xe8, 0x66, 0xe7, 0x89, + 0xc3, 0xeb, 0xc3, 0x89, 0xd0, 0xe8, 0x7b, 0xe7, 0x3d, 0x3d, 0x00, 0x75, + 0xc2, 0x89, 0xd0, 0xe8, 0x53, 0xe7, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, + 0x31, 0xc0, 0xeb, 0xf6, 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x0c, + 0x89, 0xd6, 0x89, 0x4e, 0xfc, 0x8d, 0x57, 0x03, 0x80, 0xe2, 0xfe, 0x39, + 0xda, 0x73, 0x69, 0xba, 0xff, 0xff, 0x83, 0xee, 0x02, 0x8e, 0xc0, 0x26, + 0x8b, 0x1c, 0x80, 0xe3, 0xfe, 0x39, 0xda, 0x76, 0x67, 0x89, 0xf7, 0x29, + 0xda, 0x01, 0xdf, 0x8b, 0x5e, 0xfc, 0x89, 0x7e, 0xfe, 0x89, 0x17, 0x8b, + 0x5e, 0xfe, 0x8e, 0xc0, 0x26, 0x83, 0x3f, 0xff, 0x74, 0x48, 0x26, 0xf6, + 0x07, 0x01, 0x75, 0x4b, 0x8b, 0x7e, 0xfe, 0x26, 0x8b, 0x0d, 0x26, 0x8b, + 0x7d, 0x04, 0x89, 0x7e, 0xfa, 0x8b, 0x7e, 0xfe, 0x8c, 0xda, 0x26, 0x8b, + 0x7d, 0x02, 0x31, 0xdb, 0x89, 0x7e, 0xf8, 0x39, 0xd0, 0x75, 0x38, 0x8b, + 0x1e, 0x4c, 0x04, 0x8e, 0xc0, 0x26, 0x83, 0x7f, 0x04, 0x00, 0x74, 0x2b, + 0x39, 0xf3, 0x76, 0x1e, 0x8e, 0xc0, 0x26, 0x8b, 0x5f, 0x04, 0xeb, 0xeb, + 0x83, 0xfa, 0x06, 0x73, 0x95, 0xba, 0x06, 0x00, 0xeb, 0x90, 0xb8, 0x02, + 0x00, 0xe9, 0x9b, 0x00, 0xe9, 0xa3, 0x00, 0xe9, 0x9b, 0x00, 0x26, 0x8b, + 0x17, 0x01, 0xda, 0x39, 0xd6, 0x73, 0xd9, 0x8e, 0xc0, 0x26, 0x8b, 0x57, + 0x06, 0x3b, 0x56, 0xfe, 0x75, 0x0a, 0x89, 0xd7, 0x26, 0x8b, 0x55, 0x02, + 0x26, 0x89, 0x57, 0x06, 0x8b, 0x7e, 0xfc, 0x3b, 0x0d, 0x73, 0x2b, 0x8b, + 0x7e, 0xf8, 0x8e, 0xc0, 0x8b, 0x56, 0xfa, 0x26, 0x89, 0x55, 0x04, 0x89, + 0xd7, 0x8b, 0x56, 0xf8, 0x26, 0x89, 0x55, 0x02, 0x26, 0x01, 0x0c, 0x26, + 0xff, 0x4f, 0x0e, 0x8b, 0x5e, 0xfc, 0x3b, 0x0f, 0x73, 0x4b, 0x01, 0x4e, + 0xfe, 0x29, 0x0f, 0xe9, 0x51, 0xff, 0x89, 0xca, 0x2b, 0x15, 0x89, 0x56, + 0xf6, 0x83, 0xfa, 0x06, 0x72, 0xc9, 0x8b, 0x15, 0x01, 0x56, 0xfe, 0x8e, + 0xc0, 0x8b, 0x56, 0xf6, 0x8b, 0x5e, 0xfe, 0x8b, 0x7e, 0xf8, 0x26, 0x89, + 0x17, 0x26, 0x89, 0x7f, 0x02, 0x8b, 0x7e, 0xfa, 0x26, 0x89, 0x7f, 0x04, + 0x8b, 0x5e, 0xf8, 0x8b, 0x7e, 0xfe, 0x26, 0x89, 0x7f, 0x04, 0x8b, 0x5e, + 0xfa, 0x26, 0x89, 0x7f, 0x02, 0x8b, 0x5e, 0xfc, 0x8b, 0x07, 0x26, 0x01, + 0x04, 0x31, 0xc0, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0xc3, 0xb8, 0x01, 0x00, + 0xeb, 0xf5, 0x89, 0xd9, 0x29, 0xd1, 0x83, 0xf9, 0x06, 0x72, 0xea, 0x89, + 0xd7, 0x83, 0xcf, 0x01, 0x26, 0x89, 0x3c, 0x89, 0xf7, 0x80, 0xc9, 0x01, + 0x01, 0xd7, 0x31, 0xdb, 0x89, 0x7e, 0xf4, 0x8c, 0xda, 0x26, 0x89, 0x0d, + 0x39, 0xd0, 0x75, 0x22, 0x8b, 0x1e, 0x4c, 0x04, 0x8e, 0xc0, 0x26, 0x83, + 0x7f, 0x04, 0x00, 0x74, 0x15, 0x39, 0xf3, 0x76, 0x08, 0x8e, 0xc0, 0x26, + 0x8b, 0x5f, 0x04, 0xeb, 0xeb, 0x26, 0x8b, 0x17, 0x01, 0xda, 0x39, 0xd6, + 0x73, 0xef, 0x8b, 0x56, 0xf4, 0x8e, 0xc0, 0x83, 0xc2, 0x02, 0x26, 0xff, + 0x47, 0x0c, 0xe8, 0x4f, 0x00, 0xeb, 0x9a, 0x53, 0x51, 0x56, 0x57, 0x55, + 0x1e, 0x33, 0xc0, 0x8e, 0xd8, 0xb4, 0x63, 0xcd, 0x21, 0x8c, 0xdf, 0x72, + 0x08, 0x84, 0xc0, 0x75, 0x04, 0x85, 0xff, 0x75, 0x04, 0x33, 0xff, 0x33, + 0xf6, 0x1f, 0x5d, 0x89, 0xf0, 0x89, 0xfa, 0x5f, 0x5e, 0x59, 0x5b, 0xc3, + 0x53, 0x52, 0xb8, 0x01, 0x66, 0xcd, 0x21, 0x73, 0x02, 0x33, 0xdb, 0x89, + 0xd8, 0x5a, 0x5b, 0xc3, 0xf6, 0xc4, 0xff, 0x74, 0x0c, 0x81, 0x3e, 0xb8, + 0x05, 0xa4, 0x03, 0x74, 0x01, 0xc3, 0xe9, 0xfd, 0x00, 0xe9, 0x08, 0x01, + 0x53, 0x51, 0x89, 0xc1, 0x89, 0xd0, 0x83, 0xfa, 0xff, 0x74, 0x09, 0x8c, + 0xda, 0x39, 0xd1, 0x75, 0x06, 0xe8, 0xf8, 0xe5, 0x59, 0x5b, 0xc3, 0x89, + 0xca, 0x31, 0xdb, 0xe8, 0x72, 0xe9, 0x59, 0x5b, 0xc3, 0x53, 0x51, 0x52, + 0x56, 0x57, 0x55, 0x89, 0xe5, 0x83, 0xec, 0x02, 0x83, 0x3e, 0x26, 0x17, + 0x00, 0x75, 0x3a, 0xbb, 0x2c, 0x00, 0x8e, 0x06, 0x22, 0x04, 0x31, 0xf6, + 0x26, 0x8b, 0x07, 0x31, 0xd2, 0x89, 0x46, 0xfe, 0x8e, 0xc0, 0x31, 0xdb, + 0x30, 0xc0, 0x26, 0x3a, 0x07, 0x74, 0x0a, 0x43, 0x26, 0x3a, 0x07, 0x75, + 0xfa, 0x42, 0x43, 0xeb, 0xf1, 0x89, 0xd8, 0x29, 0xf0, 0x75, 0x03, 0xb8, + 0x01, 0x00, 0xe8, 0xb2, 0xd5, 0x89, 0xc1, 0x89, 0xc3, 0x85, 0xc0, 0x75, + 0x09, 0x89, 0xec, 0x5d, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0x89, 0xd0, + 0xd1, 0xe0, 0xd1, 0xe0, 0x29, 0xd0, 0x05, 0x02, 0x00, 0xe8, 0x93, 0xd5, + 0x89, 0xc7, 0x85, 0xc0, 0x74, 0x35, 0xa3, 0x26, 0x17, 0x8e, 0x46, 0xfe, + 0x89, 0x0e, 0x2a, 0x17, 0x30, 0xc9, 0x8d, 0x45, 0x02, 0x26, 0x3a, 0x0c, + 0x74, 0x11, 0x89, 0x1d, 0x89, 0xc7, 0x26, 0x8a, 0x04, 0x46, 0x88, 0x07, + 0x43, 0x84, 0xc0, 0x75, 0xf5, 0xeb, 0xe7, 0xa3, 0x24, 0x17, 0x89, 0xd3, + 0x31, 0xd2, 0xc7, 0x05, 0x00, 0x00, 0xe8, 0x1f, 0xd2, 0xeb, 0xae, 0x89, + 0xc8, 0xe8, 0x48, 0xe5, 0xeb, 0xa7, 0xe8, 0x4d, 0x00, 0xa1, 0x26, 0x17, + 0x85, 0xc0, 0x75, 0x17, 0xa1, 0x28, 0x17, 0x85, 0xc0, 0x74, 0x08, 0xe8, + 0x32, 0xe5, 0x31, 0xc0, 0xa3, 0x28, 0x17, 0xa1, 0x2a, 0x17, 0x85, 0xc0, + 0x75, 0x0b, 0xc3, 0xe8, 0x22, 0xe5, 0x31, 0xc0, 0xa3, 0x26, 0x17, 0xeb, + 0xdf, 0xe8, 0x18, 0xe5, 0x31, 0xc0, 0xa3, 0x2a, 0x17, 0xc3, 0x3d, 0x81, + 0x82, 0x72, 0x08, 0x3d, 0x9a, 0x82, 0x77, 0x03, 0x2d, 0x21, 0x00, 0xc3, + 0x3d, 0x61, 0x00, 0x7c, 0x08, 0x3d, 0x7a, 0x00, 0x7f, 0x03, 0x2d, 0x20, + 0x00, 0xc3, 0x53, 0x51, 0x52, 0x56, 0x57, 0x31, 0xff, 0x83, 0x3e, 0x26, + 0x17, 0x00, 0x74, 0x40, 0x31, 0xc9, 0x31, 0xd2, 0xa1, 0x26, 0x17, 0x89, + 0xc3, 0x01, 0xd3, 0x83, 0x3f, 0x00, 0x74, 0x18, 0x8b, 0x36, 0x24, 0x17, + 0x01, 0xce, 0x80, 0x3c, 0x00, 0x75, 0x06, 0x83, 0xc2, 0x02, 0x41, 0xeb, + 0xe3, 0x8b, 0x07, 0xe8, 0xc2, 0xe4, 0xeb, 0xf3, 0xe8, 0xbd, 0xe4, 0xb8, + 0x02, 0x00, 0xe8, 0xc2, 0xd4, 0x89, 0xc3, 0xa3, 0x26, 0x17, 0x85, 0xc0, + 0x75, 0x25, 0xbf, 0xff, 0xff, 0xa3, 0x24, 0x17, 0x83, 0x3e, 0x28, 0x17, + 0x00, 0x74, 0x3a, 0x31, 0xd2, 0xa1, 0x28, 0x17, 0x89, 0xc3, 0x01, 0xd3, + 0x83, 0x3f, 0x00, 0x74, 0x17, 0x8b, 0x07, 0xe8, 0x8e, 0xe4, 0x83, 0xc2, + 0x02, 0xeb, 0xea, 0xc7, 0x07, 0x00, 0x00, 0x83, 0xc3, 0x02, 0x89, 0x1e, + 0x24, 0x17, 0xeb, 0xd4, 0xe8, 0x79, 0xe4, 0xb8, 0x02, 0x00, 0xe8, 0x7e, + 0xd4, 0x89, 0xc3, 0xa3, 0x28, 0x17, 0x85, 0xc0, 0x75, 0x0b, 0xbf, 0xff, + 0xff, 0x89, 0xf8, 0x5f, 0x5e, 0x5a, 0x59, 0x5b, 0xc3, 0xc7, 0x07, 0x00, + 0x00, 0xeb, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x69, 0x70, 0x73, 0x70, 0x61, 0x74, + 0x63, 0x68, 0x20, 0x3c, 0x69, 0x70, 0x73, 0x20, 0x70, 0x61, 0x74, 0x63, + 0x68, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x3e, 0x20, 0x3c, 0x66, 0x69, 0x6c, + 0x65, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, 0x74, 0x63, 0x68, 0x3e, 0x0a, + 0x00, 0x68, 0x00, 0x68, 0x65, 0x6c, 0x70, 0x00, 0x55, 0x6e, 0x6b, 0x6e, + 0x6f, 0x77, 0x6e, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x25, + 0x73, 0x0a, 0x00, 0x55, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x20, 0x61, 0x72, 0x67, 0x0a, 0x00, 0x49, 0x50, 0x53, 0x20, 0x66, + 0x69, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x0a, 0x00, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x74, 0x61, + 0x74, 0x20, 0x49, 0x50, 0x53, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x0a, 0x00, + 0x4e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x0a, 0x00, + 0x46, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, 0x74, 0x63, + 0x68, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x0a, 0x00, + 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x20, + 0x66, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, 0x74, 0x63, + 0x68, 0x0a, 0x00, 0x50, 0x41, 0x54, 0x43, 0x48, 0x00, 0x45, 0x4f, 0x46, + 0x00, 0x4e, 0x6f, 0x20, 0x45, 0x4f, 0x46, 0x20, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x61, 0x74, 0x20, 0x65, 0x6e, 0x64, + 0x0a, 0x00, 0x45, 0x58, 0x45, 0x00, 0x43, 0x4f, 0x4d, 0x00, 0x2a, 0x3f, + 0x00, 0x00, 0x4e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, + 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x61, + 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, + 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x00, + 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x00, 0x54, 0x5a, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0a, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, + 0x38, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x58, 0x58, 0x58, 0x58, + 0x58, 0x58, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x0c, 0x0c, 0x0c, 0x0c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 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, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x3b, 0x00, 0x5a, 0x00, 0x78, 0x00, 0x97, 0x00, 0xb5, 0x00, + 0xd4, 0x00, 0xf3, 0x00, 0x11, 0x01, 0x30, 0x01, 0x4e, 0x01, 0x6d, 0x01, + 0x00, 0x00, 0x1f, 0x00, 0x3c, 0x00, 0x5b, 0x00, 0x79, 0x00, 0x98, 0x00, + 0xb6, 0x00, 0xd5, 0x00, 0xf4, 0x00, 0x12, 0x01, 0x31, 0x01, 0x4f, 0x01, + 0x6e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, + 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xdc, 0x03, 0x00, 0x09, 0x01, 0x01, 0x0b, 0x06, + 0x04, 0x05, 0x05, 0x05, 0x02, 0x03, 0xff, 0x0e, 0x07, 0x24, 0x06, 0x08, + 0x01, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe7, 0x2c, 0xe7, 0x2c, 0xc0, 0x31, 0xc0, 0x31, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x00, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x05, 0x50, 0x46, 0x00, 0x00, 0x01, 0x00, + 0x10, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0xfc, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x33, 0x1a, 0x00, 0x00, + 0x00, 0x20, 0x5c, 0x17, 0x00, 0x00, 0x00, 0x20, 0x87, 0x33, 0x00, 0x00, + 0x00, 0x20, 0x79, 0x44, 0x00, 0x00, 0x00, 0x20, 0xd9, 0x0e, 0x00, 0x00, + 0x00, 0x01, 0x64, 0x1a, 0x00, 0x00, 0x00, 0x14, 0x55, 0x16, 0x00, 0x00, + 0x00, 0x1f, 0x1e, 0x45, 0x00, 0x00 +}; + +struct BuiltinFileBlob bfb_IPSPATCH_EXE = { + /*recommended file name*/ "IPSPATCH.EXE", + /*data*/ bin_ipspatch_exe, + /*length*/ sizeof(bin_ipspatch_exe) +}; +#endif + diff --git a/src/builtin/lastdriv_com.cpp b/src/builtin/lastdriv_com.cpp index 875cd3dada1..be21e5d814d 100644 --- a/src/builtin/lastdriv_com.cpp +++ b/src/builtin/lastdriv_com.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_lastdriv_com[] = { 0xE9,0x74,0x02,0x00,0x00,0x00,0x00,0x51,0x00,0x00,0x00, 0x16,0x00,0x21,0x00,0xB2,0x41,0x85,0xED,0x74,0x0F,0xFC, @@ -279,4 +280,5 @@ struct BuiltinFileBlob bfb_LASTDRIV_COM = { /*data*/ bin_lastdriv_com, /*length*/ sizeof(bin_lastdriv_com) }; +#endif diff --git a/src/builtin/mem_com.cpp b/src/builtin/mem_com.cpp index 3d4912f09ea..a1062270034 100644 --- a/src/builtin/mem_com.cpp +++ b/src/builtin/mem_com.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_mem_exe[] = { 0x4d,0x5a,0x21,0x01,0x1e,0x00,0x01,0x00,0x02,0x00,0xbd,0x09,0xff,0xff,0xed,0x0c, 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x0a,0x00,0xaf,0x03, @@ -2551,3 +2552,5 @@ struct BuiltinFileBlob bfb_MEM_EXE_PC98 = { /*data*/ bin_mem98_exe, /*length*/ sizeof(bin_mem98_exe) }; +#endif + diff --git a/src/builtin/move_exe.cpp b/src/builtin/move_exe.cpp index 6762d945314..637ce459af4 100644 --- a/src/builtin/move_exe.cpp +++ b/src/builtin/move_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_move_exe[] = { 0x4d,0x5a,0xdc,0x01,0x1e,0x00,0x01,0x00,0x02,0x00,0xc0,0x0b,0xff,0xff,0x4f,0x06, 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x03,0x00,0xbb,0x03, @@ -966,4 +967,5 @@ struct BuiltinFileBlob bfb_MOVE_EXE = { /*data*/ bin_move_exe, /*length*/ sizeof(bin_move_exe) }; +#endif diff --git a/src/builtin/mpxplay.cpp b/src/builtin/mpxplay.cpp index 7009c985b48..1f10d2427e4 100644 --- a/src/builtin/mpxplay.cpp +++ b/src/builtin/mpxplay.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_mpxplay_exe[] = { 0x4D,0x5A,0x90,0x01,0x36,0x00,0x0E,0x00,0x08,0x00,0x80, 0x00,0xFF,0xFF,0xB1,0x06,0x00,0x08,0x00,0x00,0x6C,0x2C, @@ -65915,3 +65916,5 @@ struct BuiltinFileBlob bfb_MPXPLAY_EXE = { /*data*/ bin_mpxplay_exe, /*length*/ sizeof(bin_mpxplay_exe) }; +#endif + diff --git a/src/builtin/ne2000bin.cpp b/src/builtin/ne2000bin.cpp index 6666548ff5c..ac4d99582de 100644 --- a/src/builtin/ne2000bin.cpp +++ b/src/builtin/ne2000bin.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_ne2000_com[] = { 0xE9,0x20,0x19,0x50,0x4B,0x71,0x22,0x90,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, @@ -800,3 +801,5 @@ struct BuiltinFileBlob bfb_NE2000_COM = { /*data*/ bin_ne2000_com, /*length*/ sizeof(bin_ne2000_com) }; +#endif + diff --git a/src/builtin/patchutil.h b/src/builtin/patchutil.h new file mode 100644 index 00000000000..2abc1990685 --- /dev/null +++ b/src/builtin/patchutil.h @@ -0,0 +1,4 @@ + +extern struct BuiltinFileBlob bfb_IPSMAKE_EXE; +extern struct BuiltinFileBlob bfb_IPSPATCH_EXE; + diff --git a/src/builtin/print_com.cpp b/src/builtin/print_com.cpp index 8e061412bd7..05a054668c3 100644 --- a/src/builtin/print_com.cpp +++ b/src/builtin/print_com.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_print_com[] = { 0x81,0xFC,0x2B,0x0D,0x77,0x02,0xCD,0x20,0xB9,0xF3,0x06, 0xBE,0xF3,0x07,0xBF,0xCB,0x0C,0xBB,0x00,0x80,0xFD,0xF3, @@ -170,3 +171,5 @@ struct BuiltinFileBlob bfb_PRINT_COM = { /*data*/ bin_print_com, /*length*/ sizeof(bin_print_com) }; +#endif + diff --git a/src/builtin/replace_exe.cpp b/src/builtin/replace_exe.cpp index beebe52dfd8..75dfbcfbcbf 100644 --- a/src/builtin/replace_exe.cpp +++ b/src/builtin/replace_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_replace_exe[] = { 0x4D,0x5A,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x27, 0x00,0xFF,0xFF,0x00,0x00,0x60,0x07,0x00,0x00,0x54,0x00, @@ -11686,3 +11687,5 @@ struct BuiltinFileBlob bfb_REPLACE_EXE = { /*data*/ bin_replace_exe, /*length*/ sizeof(bin_replace_exe) }; +#endif + diff --git a/src/builtin/shutdown.cpp b/src/builtin/shutdown.cpp index 30df9842c23..b59a651c1c3 100644 --- a/src/builtin/shutdown.cpp +++ b/src/builtin/shutdown.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_shutdown_com[] = { 0xB8,0x0A,0x16,0xCD,0x2F,0x3D,0x00,0x00,0x75,0x0A,0xBA, 0x17,0x01,0xB4,0x09,0xCD,0x21,0xE9,0x4A,0x01,0xE9,0xD6, @@ -50,3 +51,5 @@ struct BuiltinFileBlob bfb_SHUTDOWN_COM = { /*data*/ bin_shutdown_com, /*length*/ sizeof(bin_shutdown_com) }; +#endif + diff --git a/src/builtin/sort_exe.cpp b/src/builtin/sort_exe.cpp index d6c4ae26f0b..f7570542b62 100644 --- a/src/builtin/sort_exe.cpp +++ b/src/builtin/sort_exe.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_sort_exe[] = { 0x4D,0x5A,0xD9,0x00,0x11,0x00,0x01,0x00,0x02,0x00,0x3F, 0x03,0xFF,0xFF,0x3B,0x03,0x00,0x02,0x00,0x00,0x00,0x00, @@ -774,3 +775,5 @@ struct BuiltinFileBlob bfb_SORT_EXE = { /*data*/ bin_sort_exe, /*length*/ sizeof(bin_sort_exe) }; +#endif + diff --git a/src/builtin/sys_com.cpp b/src/builtin/sys_com.cpp index 1f6d819be96..1c48fb3ea0f 100644 --- a/src/builtin/sys_com.cpp +++ b/src/builtin/sys_com.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_sys_com[] = { 0x81, 0xfc, 0xaa, 0x50, 0x77, 0x02, 0xcd, 0x20, 0xb9, 0xa1, 0x2d, 0xbe, 0xa1, 0x2e, 0xbf, 0x4a, 0x50, 0xbb, 0x00, 0x80, 0xfd, 0xf3, 0xa4, 0xfc, @@ -983,4 +984,5 @@ struct BuiltinFileBlob bfb_SYS_COM = { /*data*/ bin_sys_com, /*length*/ sizeof(bin_sys_com) }; +#endif diff --git a/src/builtin/textutil.cpp b/src/builtin/textutil.cpp index d9865e6fc45..93c99fd4b5f 100644 --- a/src/builtin/textutil.cpp +++ b/src/builtin/textutil.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_cga_com[] = { 0xB8,0x00,0x12,0xB3,0x30,0xCD,0x10,0xB8,0x03,0x00,0xCD, 0x10,0xCD,0x20, @@ -48,4 +49,5 @@ struct BuiltinFileBlob bfb_VGA_COM = { /*data*/ bin_vga_com, /*length*/ sizeof(bin_vga_com) }; +#endif diff --git a/src/builtin/update-dsxmenu-pc98.sh b/src/builtin/update-dsxmenu-pc98.sh index 44d1343185a..f043e262225 100755 --- a/src/builtin/update-dsxmenu-pc98.sh +++ b/src/builtin/update-dsxmenu-pc98.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh (cd /usr/src/doslib/tool/dsxmenu && ./make.sh) || exit 1 filename="DSXMENU.EXE" diff --git a/src/builtin/update-dsxmenu.sh b/src/builtin/update-dsxmenu.sh index 3e6e1d4707a..eb1ed182fae 100755 --- a/src/builtin/update-dsxmenu.sh +++ b/src/builtin/update-dsxmenu.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh (cd /usr/src/doslib/tool/dsxmenu && ./make.sh) || exit 1 filename="DSXMENU.EXE" diff --git a/src/builtin/xcopy/makefile b/src/builtin/xcopy/makefile index 019a6df78c3..7bd27e9ce9b 100644 --- a/src/builtin/xcopy/makefile +++ b/src/builtin/xcopy/makefile @@ -1,4 +1,4 @@ -# Makefile for XCOPY (using Borland C or Turbo C) +# Makefile for XCOPY (using Open Watcom or Borland/Turbo C) # Based on the CHOICE makefile by Tom Ehlert # compression (for final executable) @@ -7,8 +7,8 @@ # if you dont want to UPX choice # if you use upx: --8086 for 8086 compatibility, --best for smallest -UPX=-rem -#UPX=upx -9 +# UPX=-rem +UPX=upx --8086 --best # set where build files (including intermediate ones) placed @@ -29,25 +29,32 @@ RM=del # -ms memory model (s=SMALL), -zq quiet mode # -fe=xxx executable name (must be last) # -o a=relax alias checking s=for size, -zp# 1=byte align -#CC=wcl -#CFLAGS=-oas -bt=DOS -zp1 -s -ms -0 -wx -we -zq -fm -fe=$* +# -k# set stack size, default is 2048 bytes (2KB) but just under 4KB is needed +# Note: we default to Watcom unless Borland MAKE is used +CC=wcl +CFLAGS=-oas -bt=DOS -zp1 -ms -0 -wx -we -zq -fm -k12288 -fe=$* # needed for wmake if phony target -#PHONY=.SYMBOLIC +PHONY=.SYMBOLIC ############# TURBO_C ######################## # -w warn -M create map -f- no floating point -Z register optimize -# -O jump optimize -k- no standard stack frame -K unsigned char +# -O jump optimize -k- no standard stack frome -K unsigned char # -exxx executable name (name must be part of option in CFLAGS) # -mt tiny (default is small -ms) # -N stack checking -a- byte alignment -ln no default libs # -lt create .com file -lx no map file ... # -v- quiet mode # -nPATH to place resulting files -#CC=bcc -CC=tcc +# default stack size is 4KB +!ifdef __MAKE__ # defined for Borland MAKE but not Watcom WMAKE +!ifndef BORLAND +CC=bcc # default to BCC, use -DBORLAND=TCC for Turbo C/C++ +!else +CC=$(BORLAND) # Note: make won't use CC as cmd line define +!endif CFLAGS=-d -v- -w -M -f- -Z -a- -O -k- -K -ln -ms -e$* PHONY= - +!endif CFILES=xcopy.c kitten.c prf.c @@ -62,7 +69,7 @@ all: xcopy.exe xcopy.exe: $(CFILES) makefile shared.inc kitten.h -$(MKDIR) $(OUTDIR) $(CC) $(CFLAGS) $(CFILES) - $(UPX) xcopy.exe + -$(UPX) xcopy.exe $(MV) xcopy.exe $(OUTDIR) diff --git a/src/builtin/xcopy/shared.inc b/src/builtin/xcopy/shared.inc index 7a884f51ed3..1680968ab84 100644 --- a/src/builtin/xcopy/shared.inc +++ b/src/builtin/xcopy/shared.inc @@ -2,21 +2,6 @@ #include #include -struct DiskInfo { - /* buffer to be filled by INT 21h function 0x7303h */ - unsigned short size; - unsigned short version; - unsigned long sectorsPerCluster; - unsigned long bytesPerSector; - unsigned long availableClusters; - unsigned long totalClusters; - unsigned long physicalSectorsAvailable; - unsigned long totalPhysicalSectors; - unsigned long availableAllocationUnits; - unsigned long totalAllocationUnits; - char reserved[8]; -}; - #ifdef __WATCOMC__ #include /* below: Turbo C dir.h values as comments */ #define MAXPATH _MAX_PATH /* 80 */ @@ -34,6 +19,10 @@ struct DiskInfo { #define FA_DIREC _A_SUBDIR #define FA_ARCH _A_ARCH +/* following are defined in fcntl.h (here to avoid other conflicts) */ +#define O_RDONLY 0 +#define O_RDWR 2 + struct ffblk { unsigned short cr_time; /* time of file creation */ unsigned short cr_date; /* date of file creation */ @@ -91,7 +80,8 @@ int getftime(int handle, struct ftime *ftimep) { union borftime ftm; - if( _dos_getftime(handle, + /* Note: fileno() returns POSIX compatible handle, this may or may not match DOS handle, so convert with os_handle() */ + if( _dos_getftime(_os_handle(handle), (unsigned *)&ftm.msc_time.date, (unsigned *)&ftm.msc_time.time ) == 0 ) @@ -105,12 +95,42 @@ int setftime(int handle, struct ftime *ftimep) { union borftime ftm; ftm.bc_time = *ftimep; - return((_dos_setftime(handle,ftm.msc_time.date,ftm.msc_time.time) == 0) ? 0 : -1); + /* Note: fileno() returns POSIX compatible handle, this may or may not match DOS handle, so convert with os_handle() */ + return((_dos_setftime(_os_handle(handle),ftm.msc_time.date,ftm.msc_time.time) == 0) ? 0 : -1); +} + +int os_setftime(const char *src_filename, const char *dest_filename) +{ + int handle; + unsigned date, time; + int ret; + if ((ret = _dos_open(src_filename, O_RDONLY, &handle)) != 0) return ret; + if ((ret = _dos_getftime(handle, &date, &time)) != 0) return ret; + _dos_close(handle); + if ((ret = _dos_open(dest_filename, O_RDWR, &handle)) != 0) return ret; + if ((ret = _dos_setftime(handle, date, time)) != 0) return ret; + _dos_close(handle); + return 0; } #else #include + +/* copy file timestamp */ +int os_setftime(const char *src_filename, const char *dest_filename) +{ + FILE *f; + struct ftime filetime; + if ((f = fopen(src_filename, "r")) == NULL) return 1; + if (getftime(fileno(f), &filetime) != 0) return 1; + fclose(f); + if ((f = fopen(dest_filename, "w")) == NULL) return 1; + if (setftime(fileno(f), &filetime) != 0) return 1; + fclose(f); + return 0; +} + #endif #ifdef __WATCOMC__ /* "dosdate_t" instead of Borland style "date" ... */ @@ -123,6 +143,7 @@ int setftime(int handle, struct ftime *ftimep) #define ti_minute minute #define ti_sec second #define ti_hund hsecond +#define THETIME struct dostime_t time_t dostounix(THEDATE *date, struct dostime_t *time) { @@ -140,6 +161,7 @@ time_t dostounix(THEDATE *date, struct dostime_t *time) } #else #define THEDATE struct date +#define THETIME struct time #endif /*-------------------------------------------------------------------------*/ @@ -233,6 +255,82 @@ void getdfree(unsigned char drive, struct dfree *dtable) } #endif +/*-------------------------------------------------------------------------*/ +/* Gets the free cluster count and clustersize in bytes of disk */ +/* drive 1=A,2=B,3=C,... error can be NULL if don't care */ +/*-------------------------------------------------------------------------*/ +void getdiskfreeclusters(unsigned drive, unsigned long *clustersize, unsigned long *free_clusters) +{ + static char rootname[] = "C:\\"; + static union REGS r; + static struct SREGS s; + static struct { + unsigned short whatever; + unsigned short version; + unsigned long sectors_per_cluster; + unsigned long bytes_per_sector; + unsigned long free_clusters; + unsigned long total_clusters; + unsigned long available_physical_sectors; + unsigned long total_physical_sectors; + unsigned long free_allocation_units; + unsigned long total_allocation_units; + unsigned char reserved[8]; + } FAT32_Free_Space; + + if (!drive) _dos_getdrive(&drive); /* use current drive */ + /* Note: RBIL carry clear and al==0 also means unimplemented + alternately carry set and ax==undefined (usually unchanged) for unimplemented + ecm: RBIL is wrong, CF unchanged al=0 is the typical error return. + EDR-DOS returns NC ax=0 so checking for al!=0 here was wrong. + */ + rootname[0] = 'A' + drive - 1; + /* printf("Looking at drive [%s]\n", rootname); */ + r.w.cflag = 1; /* CY before 21.73 calls! */ + r.w.ax = 0x7303; + s.ds = FP_SEG(rootname); + r.w.dx = FP_OFF(rootname); + s.es = FP_SEG(&FAT32_Free_Space); + r.w.di = FP_OFF(&FAT32_Free_Space); + r.w.cx = sizeof(FAT32_Free_Space); + intdosx( &r, &r, &s ); + + /* see if call supported, if not then fallback to older get disk free API call */ + /* Note: from RBIL returning AL=0 (with carry unchanged/clear) means unimplemented, + in such cases AH is unchanged, so will AH will still by 0x73, i.e. returning AX=0x7300 + EDR kernel returns with AX=0 if successful so error must check AX=7300 instead of just AL for 0 + FreeDOS kernel returns with AX unchanged, i.e. 0x7303 on success + If returns carry set then AX is undefined, but an error. + (carry OR (AX == 0x7300)) indicates error, so we check for NOT (carry OR (AX == 0x7300)) + */ + if (!(r.w.cflag & 0x01) && (r.w.ax != 0x7300)) /* call available and successfully returned */ + { + /* calculate free space, but handle some overflow cases (or switch to 64bit values) */ + if (clustersize != NULL) *clustersize = FAT32_Free_Space.sectors_per_cluster * FAT32_Free_Space.bytes_per_sector; + if (free_clusters != NULL) *free_clusters = FAT32_Free_Space.free_clusters; + + /* total free is cluster size * # of free clusters */ + #if 0 + if (clustersize) + { + /* if (MAX_ULONG / operand1) < operand2 then will overflow (operand1 * operand2 > MAX_ULONG */ + if ((4294967295ul / clustersize) < FAT32_Free_Space.free_clusters) { + freesize = (unsigned long)-1; /* max size */ + } else { + freesize = clustersize * FAT32_Free_Space.free_clusters; + } + } + #endif + } + else /* ((r.w.cflag & 0x01) || (!r.h.al)) */ + { + static struct dfree disktable; + getdfree(drive, &disktable); + if (clustersize != NULL) *clustersize = (unsigned long) disktable.df_bsec * disktable.df_sclus; + if (free_clusters != NULL) *free_clusters = disktable.df_avail; + } +} + /*-------------------------------------------------------------------------*/ /* Works like function strcpy() but stops copying characters into */ @@ -364,37 +462,100 @@ int datevalid(THEDATE * dt) { } +/*-------------------------------------------------------------------------*/ +/* Copies argument into buffer until new option or end of string found. */ +/*-------------------------------------------------------------------------*/ +static char option_buffer[1024]; +static char * get_option(const char **next_argptr, unsigned *count) +{ + unsigned int i, tmp_maxlen; + const char *src = *next_argptr+1; /* +1 skip past option char (/ or -) */ + char *dest = option_buffer+*count; + int expecting_date = 0; /* flag indicating / may be part of option */ + + tmp_maxlen = sizeof(option_buffer) - (*count) - 1; + i = 0; + while ((src[i] != '\0') && + (i < tmp_maxlen) && + ((!expecting_date && ((src[i] != '-') && (src[i] != '/'))) || expecting_date)) + { + dest[i] = src[i]; + expecting_date |= src[i] == ':'; /* currently only /D: option */ + i++; + } + dest[i] = '\0'; + if (i >= tmp_maxlen) *next_argptr = dest+i; /* ensure points to '\0' */ + else *next_argptr = src+i; + *count += i + 1; + return dest; +} + + /*-------------------------------------------------------------------------*/ /* Splits the program arguments into file and switch arguments. */ /*-------------------------------------------------------------------------*/ +#define DESTBUF_SIZE 260 +static char dest_buffer[DESTBUF_SIZE]; + void classify_args(const int argc, const char **argv, int *fileargc, char **fileargv, int *switchargc, - char **switchargv) { - int i; - char *argptr; - - - *fileargc = 0; - *switchargc = 0; - for (i = 1; i < argc; i++) { - argptr = (char *)argv[i]; - if (argptr[0] == '/' || argptr[0] == '-') { - /* first character of parameter is '/' or '-' -> switch argument */ - switchargv[*switchargc] = argptr + 1; - *switchargc = *switchargc + 1; - } - else { - /* file argument */ - fileargv[*fileargc] = argptr; - *fileargc = *fileargc + 1; + char **switchargv) +{ + int i; + unsigned count = 0; + const char *next_argptr; + + *fileargc = 0; + *switchargc = 0; + + for (i = 1; i < argc; i++) { + const char *argptr = argv[i]; + const char *opt; + + /* switch: starts with '/' */ + if (argptr[0] == '/') { + next_argptr = argptr; + do { + switchargv[*switchargc] = get_option(&next_argptr, &count); + (*switchargc)++; + } while (*next_argptr != '\0'); + } + else { + opt = strchr(argptr, '/'); + + if (opt != NULL) { + size_t len = (size_t)(opt - argptr); + + if (len > 0) { + if (len >= DESTBUF_SIZE) + len = DESTBUF_SIZE - 1; + + memcpy(dest_buffer, argptr, len); + dest_buffer[len] = '\0'; + + fileargv[*fileargc] = dest_buffer; + (*fileargc)++; + } + + /* parse switches */ + next_argptr = opt; + do { + switchargv[*switchargc] = get_option(&next_argptr, &count); + (*switchargc)++; + } while (*next_argptr != '\0'); + } + else { + /* normal file */ + fileargv[*fileargc] = (char *)argptr; + (*fileargc)++; + } + } } - } } - /*-------------------------------------------------------------------------*/ /* Appends a trailing directory separator to the path, but only if it is */ /* missing. */ @@ -513,17 +674,13 @@ char confirm(const char *msg, /*-------------------------------------------------------------------------*/ void copy_file(const char *src_filename, const char *dest_filename, - const char return_on_error, - const char keep_attrib, - const char reset_arch) { + const char return_on_error) { FILE *src_file, *dest_file; - char buffer[16384]; + static char buffer[16384]; /* don't put buffer on stack! */ unsigned int buffersize; int readsize, fileattrib; - struct ftime filetime; - /* open source file */ src_file = fopen(src_filename, "rb"); @@ -568,62 +725,14 @@ void copy_file(const char *src_filename, readsize = fread(buffer, sizeof(char), buffersize, src_file); } - /* copy file timestamp */ - getftime(fileno(src_file), &filetime); - setftime(fileno(dest_file), &filetime); - /* close files */ fclose(src_file); fclose(dest_file); + + /* update timestamp after completing copy to ensure OS actually sets to original date and not current time */ + os_setftime(src_filename, dest_filename); /* copy file attributes */ fileattrib = _chmod(src_filename, 0); - if(!keep_attrib) { - fileattrib = fileattrib & FA_ARCH; - } - if(reset_arch){ - fileattrib = fileattrib & !FA_ARCH; - } _chmod(dest_filename, 1, fileattrib); } - -unsigned int getDOSVersion() { - union REGS regs; - - regs.h.ah = 0x30; // Function code for get DOS version - intdos(®s, ®s); - - // AL register will contain the DOS major version - // AH register will contain the DOS minor version - if (regs.h.al == 0) { - regs.h.al++; - } - return (regs.h.al << 8) | regs.h.ah; -} - -unsigned int get_extendedDiskInfo (char driveNumber, struct DiskInfo *diskInfo) { - union REGS regs; - struct SREGS segregs; - char driveString[4]; - - if(driveNumber < 1 || driveNumber > 26) return 0xFFFF; - - // Set up buffer for result - segread(&segregs); /* Get the segment of DS */ - regs.x.di = FP_OFF(diskInfo); - segregs.es = FP_SEG(diskInfo); - - // Convert drive number to ASCIZ string - sprintf(driveString, "%c:\\", 'A' + driveNumber - 1); - - // Set up registers - regs.h.ah = 0x73; /* Function code for get free disk space */ - regs.h.al = 0x03; /* Sub-function code for get disk information */ - regs.x.cx = sizeof(struct DiskInfo); - regs.x.dx = FP_OFF(driveString); - segregs.ds = FP_SEG(driveString); - - // Perform the interrupt - intdosx(®s, ®s, &segregs); - return regs.x.ax; -} diff --git a/src/builtin/xcopy/xcopy.c b/src/builtin/xcopy/xcopy.c index 58027bfec3e..c23ad0a0c12 100644 --- a/src/builtin/xcopy/xcopy.c +++ b/src/builtin/xcopy/xcopy.c @@ -25,9 +25,6 @@ /* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /***************************************************************************/ -/* Downloaded original source from the following link and fixed attribute copy */ -/* https://github.com/FDOS/xcopy/commit/71dd94271057b3a60c6a01d1c3f2c7da856c464c */ - #include #include #include @@ -47,7 +44,7 @@ nl_catd cat; /* message catalog, must be before shared.inc */ #if defined(__TURBOC__) && !defined(__BORLANDC__) #define _splitpath fnsplit -void _fullpath_tc(char * truename, char * rawname, unsigned int namelen) +void _fullpath(char * truename, char * rawname, unsigned int namelen) { union REGS regs; struct SREGS sregs; @@ -102,13 +99,20 @@ char switch_archive = 0, switch_verify = 0, switch_wait = 0, bak_verify = 0, - switch_keep_attr = 0, dest_drive; long int switch_date = 0; long file_counter = 0; int file_found = 0; +/* these are only used by xcopy_files, built up as recurse deeper into + into subdirectory to help avoid overflowing stack with each + recursive call */ +char new_src_pathname[MAXPATH]; +char new_dest_pathname[MAXPATH]; + + + /*-------------------------------------------------------------------------*/ /* PROTOTYPES */ /*-------------------------------------------------------------------------*/ @@ -129,7 +133,7 @@ void xcopy_files(const char *src_pathname, const char *dest_filename); void xcopy_file(const char *src_filename, const char *dest_filename); -unsigned int getDOSVersion(void); + /*-------------------------------------------------------------------------*/ /* MAIN-PROGRAM */ @@ -149,11 +153,7 @@ int main(int argc, const char **argv) { ch; int i, length; THEDATE dt; -#ifdef __WATCOMC__ - struct dostime_t tm; -#else - struct time tm; -#endif + THETIME tm; cat = catopen ("xcopy", 0); /* initialize kitten */ @@ -207,13 +207,9 @@ int main(int argc, const char **argv) { catclose(cat); exit(4); } -#ifdef __WATCOMC__ - memset((void *)&tm, 0, sizeof(struct dostime_t)); - /* tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_hund = 0; */ -#else - memset((void *)&tm, 0, sizeof(struct time)); - /* tm.ti_hour = 0; tm.ti_min = 0; tm.ti_sec = 0; tm.ti_hund = 0; */ -#endif + memset((void *)&tm, 0, sizeof(THETIME)); + /* tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_hund = 0; -- __WATCOM__ */ + /* tm.ti_hour = 0; tm.ti_min = 0; tm.ti_sec = 0; tm.ti_hund = 0; -- all others */ switch_date = dostounix(&dt, &tm); } else if (strcmp(tmp_switch, "E") == 0) @@ -224,8 +220,6 @@ int main(int argc, const char **argv) { switch_hidden = -1; else if (strcmp(tmp_switch, "I") == 0) switch_intodir = -1; - else if (strcmp(tmp_switch, "K") == 0) - switch_keep_attr = -1; else if (strcmp(tmp_switch, "L") == 0) switch_listmode = -1; else if (strcmp(tmp_switch, "M") == 0) @@ -267,11 +261,7 @@ int main(int argc, const char **argv) { catclose(cat); exit(4); } -#if defined(__TURBOC__) && !defined(__BORLANDC__) - _fullpath_tc(src_pathname, fileargv[0], MYMAXPATH); -#else _fullpath(src_pathname, fileargv[0], MYMAXPATH); -#endif if (src_pathname[0] == '\0') { printf("%s\n", catgets(cat, 1, 5, "Invalid source drive specification")); catclose(cat); @@ -318,11 +308,7 @@ int main(int argc, const char **argv) { catclose(cat); exit(4); } -#if defined(__TURBOC__) && !defined(__BORLANDC__) - _fullpath_tc(dest_pathname, fileargv[1], MYMAXPATH); -#else _fullpath(dest_pathname, fileargv[1], MYMAXPATH); -#endif if (dest_pathname[0] == '\0') { printf("%s\n", catgets(cat, 1, 9, "Invalid destination drive specification")); catclose(cat); @@ -400,6 +386,8 @@ int main(int argc, const char **argv) { fflush(stdin); } + strmcpy(new_src_pathname, src_pathname, sizeof(new_src_pathname)); + strmcpy(new_dest_pathname, dest_pathname, sizeof(new_dest_pathname)); xcopy_files(src_pathname, src_filename, dest_pathname, dest_filename); if (!file_found) { printf("%s - %s\n",catgets(cat, 1, 18, "File not found"), src_filename); @@ -416,7 +404,7 @@ int main(int argc, const char **argv) { /* SUB-PROGRAMS */ /*-------------------------------------------------------------------------*/ void print_help(void) { - printf("XCOPY v1.5 - Copyright 2001-2003 by Rene Ableidinger (patches 2005: Eric Auer)\n"); + printf("XCOPY v1.9a - Copyright 2001-2003 by Rene Ableidinger (patches 2005: Eric Auer)\n"); /* VERSION! */ printf("%s\n\n", catgets(cat, 2, 1, "Copies files and directory trees.")); printf("%s\n\n", catgets(cat, 2, 2, "XCOPY source [destination] [/switches]")); @@ -433,32 +421,31 @@ void print_help(void) { printf("%s\n", catgets(cat, 2, 13, " /H Copies hidden and system files as well as unprotected files.")); printf("%s\n", catgets(cat, 2, 14, " /I If destination does not exist and copying more than one file,")); printf("%s\n", catgets(cat, 2, 15, " assume destination is a directory.")); - printf("%s\n", catgets(cat, 2, 16, " /K Keep attributes. Otherwise only archive attribute is copied.")); - printf("%s\n", catgets(cat, 2, 17, " /L List files without copying them. (simulates copying)")); - printf("%s\n", catgets(cat, 2, 18, " /M Copies only files with the archive attribute set and turns off")); + printf("%s\n", catgets(cat, 2, 16, " /L List files without copying them. (simulates copying)")); + printf("%s\n", catgets(cat, 2, 17, " /M Copies only files with the archive attribute set and turns off")); + printf("%s\n", catgets(cat, 2, 18, " the archive attribute of the source files after copying them.")); if (isatty(1)) { printf("-- %s --", catgets(cat, 2, 35, "press enter for more")); (void)getchar(); } /* wait for next page if TTY */ - - printf("%s\n", catgets(cat, 2, 19, " the archive attribute of the source files after copying them.")); - printf("%s\n", catgets(cat, 2, 20, " /N Suppresses prompting to confirm you want to overwrite an")); - printf("%s\n", catgets(cat, 2, 21, " existing destination file and skips these files.")); - printf("%s\n", catgets(cat, 2, 22, " /P Prompts for confirmation before creating each destination file.")); - printf("%s\n", catgets(cat, 2, 23, " /Q Quiet mode, don't show copied filenames.")); - printf("%s\n", catgets(cat, 2, 24, " /R Overwrite read-only files as well as unprotected files.")); - printf("%s\n", catgets(cat, 2, 25, " /S Copies directories and subdirectories except empty ones.")); - printf("%s\n", catgets(cat, 2, 26, " /T Creates directory tree without copying files. Empty directories")); - printf("%s\n", catgets(cat, 2, 27, " will not be copied. To copy them add switch /E.")); - printf("%s\n", catgets(cat, 2, 28, " /V Verifies each new file.")); - printf("%s\n", catgets(cat, 2, 29, " /W Waits for a keypress before beginning.")); - printf("%s\n", catgets(cat, 2, 30, " /Y Suppresses prompting to confirm you want to overwrite an")); - printf("%s\n", catgets(cat, 2, 31, " existing destination file and overwrites these files.")); - printf("%s\n", catgets(cat, 2, 32, " /-Y Causes prompting to confirm you want to overwrite an existing")); - printf("%s\n\n", catgets(cat, 2, 33, " destination file.")); - printf("%s\n", catgets(cat, 2, 34, "The switch /Y or /N may be preset in the COPYCMD environment variable.")); - printf("%s\n", catgets(cat, 2, 35, "This may be overridden with /-Y on the command line.")); + + printf("%s\n", catgets(cat, 2, 19, " /N Suppresses prompting to confirm you want to overwrite an")); + printf("%s\n", catgets(cat, 2, 20, " existing destination file and skips these files.")); + printf("%s\n", catgets(cat, 2, 21, " /P Prompts for confirmation before creating each destination file.")); + printf("%s\n", catgets(cat, 2, 22, " /Q Quiet mode, don't show copied filenames.")); + printf("%s\n", catgets(cat, 2, 23, " /R Overwrite read-only files as well as unprotected files.")); + printf("%s\n", catgets(cat, 2, 24, " /S Copies directories and subdirectories except empty ones.")); + printf("%s\n", catgets(cat, 2, 25, " /T Creates directory tree without copying files. Empty directories")); + printf("%s\n", catgets(cat, 2, 26, " will not be copied. To copy them add switch /E.")); + printf("%s\n", catgets(cat, 2, 27, " /V Verifies each new file.")); + printf("%s\n", catgets(cat, 2, 28, " /W Waits for a keypress before beginning.")); + printf("%s\n", catgets(cat, 2, 29, " /Y Suppresses prompting to confirm you want to overwrite an")); + printf("%s\n", catgets(cat, 2, 30, " existing destination file and overwrites these files.")); + printf("%s\n", catgets(cat, 2, 31, " /-Y Causes prompting to confirm you want to overwrite an existing")); + printf("%s\n\n", catgets(cat, 2, 32, " destination file.")); + printf("%s\n", catgets(cat, 2, 33, "The switch /Y or /N may be preset in the COPYCMD environment variable.")); + printf("%s\n", catgets(cat, 2, 34, "This may be overridden with /-Y on the command line.")); } @@ -610,48 +597,55 @@ void build_name(char *dest, /*-------------------------------------------------------------------------*/ -/* Searches through the source directory (and its subdirectories) and calls */ +/* Searchs through the source directory (and its subdirectories) and calls */ /* function "xcopy_file" for every found file. */ /*-------------------------------------------------------------------------*/ void xcopy_files(const char *src_pathname, const char *src_filename, const char *dest_pathname, const char *dest_filename) { - char filepattern[MAXPATH], - new_src_pathname[MAXPATH], - new_dest_pathname[MAXPATH], - src_path_filename[MAXPATH], - dest_path_filename[MAXPATH], - tmp_filename[MAXFILE + MAXEXT], - tmp_pathname[MAXPATH]; + char src_path_filename[MAXPATH], + dest_path_filename[MAXPATH]; struct ffblk fileblock; int fileattrib, done; - + /* WARNING these path values are overwritten on recursive calls */ + static char filepattern[MAXPATH], + tmp_filename[MAXFILE + MAXEXT], + tmp_pathname[MAXPATH]; if (switch_emptydir || switch_subdir || switch_tree) { + /* store current path in static variable, append path to it and revert back after copy */ + char *end_new_src_pathname = new_src_pathname + strlen(new_src_pathname); + char *end_new_dest_pathname = new_dest_pathname + strlen(new_dest_pathname); /* copy files in subdirectories too */ + strmcpy(filepattern, src_pathname, sizeof(filepattern)); strmcat(filepattern, "*.*", sizeof(filepattern)); done = findfirst(filepattern, &fileblock, FA_DIREC); + while (!done) { if ((fileblock.ff_attrib & FA_DIREC) != 0 && strcmp(fileblock.ff_name, ".") != 0 && strcmp(fileblock.ff_name, "..") != 0) { /* build source pathname */ - strmcpy(new_src_pathname, src_pathname, sizeof(new_src_pathname)); - strmcat(new_src_pathname, fileblock.ff_name, sizeof(new_src_pathname)); - strmcat(new_src_pathname, DIR_SEPARATOR, sizeof(new_src_pathname)); + /*strmcpy(new_src_pathname, src_pathname, sizeof(new_src_pathname));*/ + strmcat(end_new_src_pathname, fileblock.ff_name, sizeof(new_src_pathname)); + strmcat(end_new_src_pathname, DIR_SEPARATOR, sizeof(new_src_pathname)); /* build destination pathname */ - strmcpy(new_dest_pathname, dest_pathname, sizeof(new_dest_pathname)); - strmcat(new_dest_pathname, fileblock.ff_name, sizeof(new_dest_pathname)); - strmcat(new_dest_pathname, DIR_SEPARATOR, sizeof(new_dest_pathname)); + /*strmcpy(new_dest_pathname, dest_pathname, sizeof(new_dest_pathname));*/ + strmcat(end_new_dest_pathname, fileblock.ff_name, sizeof(new_dest_pathname)); + strmcat(end_new_dest_pathname, DIR_SEPARATOR, sizeof(new_dest_pathname)); xcopy_files(new_src_pathname, src_filename, new_dest_pathname, dest_filename); + + + *end_new_src_pathname = '\0'; + *end_new_dest_pathname = '\0'; } done = findnext(&fileblock); @@ -675,7 +669,7 @@ void xcopy_files(const char *src_pathname, /* check if destination directory must be created */ if ((!done || switch_emptydir) && - !dir_exists(dest_pathname)) { + !dir_exists(dest_pathname) && !switch_listmode) { strmcpy(tmp_pathname, dest_pathname, sizeof(tmp_pathname)); if (make_dir(tmp_pathname) != 0) { printf("%s %s\n", catgets(cat, 1, 20, "Unable to create directory"), tmp_pathname); @@ -715,27 +709,22 @@ void xcopy_files(const char *src_pathname, } } + /*-------------------------------------------------------------------------*/ /* Checks all dependencies of the source and destination file and calls */ /* function "copy_file". */ /*-------------------------------------------------------------------------*/ void xcopy_file(const char *src_filename, const char *dest_filename) { + static char msg_prompt[256]; + static struct stat src_statbuf; + static struct stat dest_statbuf; + static unsigned long cluster_size; /* in bytes */ + static unsigned long free_clusters; /* count of clusters */ int dest_file_exists; int fileattrib; - struct stat src_statbuf; - struct stat dest_statbuf; -#if defined(__TURBOC__) && !defined(__BORLANDC__) - struct diskfree_t disk; -#else - struct dfree disktable; -#endif - unsigned long free_diskspace = -1; - unsigned long bsec = 512; char ch; - char msg_prompt[255]; - unsigned int dos_version = 0; - struct DiskInfo diskinfo; + if (switch_prompt) { /* ask for confirmation to create file */ @@ -756,7 +745,7 @@ void xcopy_file(const char *src_filename, } /* check source file for read permission */ - /* (only useful under an OS with the ability to deny read access) */ + /* (only usefull under an OS with the ability to deny read access) */ if (access(src_filename, R_OK) != 0) { printf("%s - %s\n", catgets(cat, 1, 22, "Read access denied"), src_filename); if (switch_continue) { @@ -772,54 +761,24 @@ void xcopy_file(const char *src_filename, stat((char *)src_filename, &src_statbuf); dest_file_exists = !stat((char *)dest_filename, &dest_statbuf); - dos_version = getDOSVersion(); + /* get amount of free disk space in destination drive (in clusters not bytes) */ + getdiskfreeclusters(dest_drive, &cluster_size, &free_clusters); - /* get amount of free disk space in destination drive */ - if(((dos_version >> 8) > 7) || (((dos_version >> 8) == 7) && ((dos_version & 0xFF) >= 10))){ - //printf("%d %s", dest_drive, dest_drive); - if(!get_extendedDiskInfo(dest_drive, &diskinfo)){ - bsec = diskinfo.bytesPerSector; - free_diskspace = diskinfo.availableClusters * diskinfo.sectorsPerCluster; - //printf("free_diskspace=%lu avail_clusters=%lu,sectors_per_cluster=%lu \n", free_diskspace, diskinfo.availableClusters, diskinfo.sectorsPerCluster); - } - else { - goto int21_36h; /* Try the old DOS method if failed */ - } - } - else { -int21_36h: -#if defined(__TURBOC__) && !defined(__BORLANDC__) - if(_dos_getdiskfree(dest_drive, &disk) != 0) { - printf("Failed to obtain free disk space. Aborting\n"); - exit(39); - } - bsec = disk.bytes_per_sector; - free_diskspace = (unsigned long) disk.avail_clusters * disk.sectors_per_cluster; - //printf("dest_drive=%d,free_diskspace=%lu avail_clusters=%u,sectors_per_cluster=%u \n",dest_drive, free_diskspace, disk.avail_clusters, disk.sectors_per_cluster); -#else - getdfree(dest_drive, &disktable); - bsec = disktable.df_bsec; - free_diskspace = (unsigned long) disktable.df_avail * disktable.df_sclus; - //printf("disktable.df_avail=%d,disktable.df_sclus=%d\n",disktable.df_avail * disktable.df_sclus); - //free_diskspace = (unsigned long) disktable.df_avail * - // (unsigned long) disktable.df_sclus * - // (unsigned long) disktable.df_bsec; -#endif + /* only copy files newer than requested date */ + /* -1 =if exists then only copy newer, 0=copy regardless of date, >0 date to compare if newer */ + if (switch_date > 0) { + /* check, that only files changed on or after the specified date */ + /* are copied */ + if (src_statbuf.st_mtime < switch_date) { + return; + } } + if (dest_file_exists) { - if (switch_date) { - if (switch_date < 0) { - /* check, that only newer files are copied */ - if (src_statbuf.st_mtime <= dest_statbuf.st_mtime) { - return; - } - } - else { - /* check, that only files changed on or after the specified date */ - /* are copied */ - if (src_statbuf.st_mtime < switch_date) { - return; - } + if (switch_date < 0) { + /* check, that only newer files are copied */ + if (src_statbuf.st_mtime <= dest_statbuf.st_mtime) { + return; } } @@ -855,9 +814,11 @@ void xcopy_file(const char *src_filename, } /* check free space on destination disk */ - /* *** was wrong, was: "if (src... > free... - dest...) ..." */ + /* Note: if existing file is larger than current then always room for new file even if drive is full; + otherwise need to ensure enough free clusters to support additional file size (additional clusters). + */ if ( (src_statbuf.st_size > dest_statbuf.st_size) && - (((src_statbuf.st_size - dest_statbuf.st_size) / bsec) > free_diskspace) ) { + ((((src_statbuf.st_size - dest_statbuf.st_size) + (cluster_size-1))/cluster_size) > free_clusters) ) { printf("%s - %s\n", catgets(cat, 1, 23, "Insufficient disk space in destination path"), dest_filename); catclose(cat); exit(39); @@ -889,10 +850,11 @@ void xcopy_file(const char *src_filename, } else { /* check free space on destination disk */ - unsigned long st_size_sec = (unsigned long)src_statbuf.st_size / bsec; - - if (st_size_sec > (unsigned long)free_diskspace) { - printf("%lu - %lu\n", st_size_sec, free_diskspace); + /* Note: files are stored in clusters, so we check if enough free clusters, + but we do this to avoid overflow of 32bit integers if freespace > 4GB + */ + + if (((src_statbuf.st_size + (cluster_size-1))/cluster_size) > free_clusters) { printf("%s - %s\n", catgets(cat, 1, 25, "Insufficient disk space in destination path"), dest_filename); catclose(cat); exit(39); @@ -911,7 +873,15 @@ void xcopy_file(const char *src_filename, /* check, if file copying should be simulated */ if (!switch_listmode) { - copy_file(src_filename, dest_filename, switch_continue, switch_keep_attr, switch_archive_reset); + copy_file(src_filename, dest_filename, switch_continue); + fileattrib = _chmod(dest_filename, 0); + _chmod(dest_filename, 1, fileattrib & FA_ARCH); + + if (switch_archive_reset) { + /* remove archive attribute from source file */ + fileattrib = _chmod(src_filename, 0); + _chmod(src_filename, 1, fileattrib ^ FA_ARCH); + } } file_counter++; diff --git a/src/builtin/xcopy_exe.cpp b/src/builtin/xcopy_exe.cpp index 32455210dba..a0b0c19f046 100644 --- a/src/builtin/xcopy_exe.cpp +++ b/src/builtin/xcopy_exe.cpp @@ -1,1054 +1,1417 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_xcopy_exe[] = { -0x4d,0x5a,0x6f,0x01,0x21,0x00,0x01,0x00,0x02,0x00,0xf9,0x06,0xff,0xff,0xd9,0x06, -0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x06,0x00,0x14,0x04, -0xb9,0x7c,0x20,0xbe,0xf6,0x40,0x89,0xf7,0x1e,0xa9,0xb5,0x80,0x8c,0xc8,0x05,0x05, -0x00,0x8e,0xd8,0x05,0xd0,0x02,0x8e,0xc0,0xfd,0xf3,0xa5,0xfc,0x2e,0x80,0x6c,0x12, -0x10,0x73,0xe7,0x92,0xaf,0xad,0x0e,0x0e,0x0e,0x06,0x1f,0x07,0x16,0xbd,0x09,0x00, -0xbb,0x8f,0x80,0x55,0xcb,0x55,0x50,0x58,0x21,0x0d,0x03,0x03,0x09,0xe7,0x0b,0x98, -0xba,0x33,0x10,0x47,0x6a,0x75,0x6d,0x00,0x48,0x40,0x00,0x6a,0x6f,0x00,0x00,0xb0, -0xff,0xba,0x9b,0x05,0x2e,0x89,0x16,0x8d,0x02,0xff,0xb4,0x30,0xcd,0x21,0x8b,0x2e, -0x02,0x00,0xff,0x8b,0x1e,0x2c,0x00,0x8e,0xda,0xa3,0x92,0xff,0x00,0x8c,0x06,0x90, -0x00,0x89,0x1e,0x8c,0x6f,0x03,0x2e,0xa8,0x00,0xfd,0xe8,0x81,0x01,0xc4,0x3e,0x8a, -0xbf,0x1b,0xc7,0x8b,0xd8,0xb9,0xff,0xff,0x7f,0xfc,0xf2,0xae,0xe3,0x61,0x43,0x26, -0xff,0x38,0x05,0x75,0xf6,0x80,0xcd,0x80,0xf7,0xed,0xd9,0x89,0x0e,0x1a,0xff,0xb9, -0x01,0x00,0xd3,0xe3,0x83,0xc3,0x08,0xed,0x83,0xe3,0xf8,0x34,0xb7,0x8e,0x3c,0xda, -0x2b,0xff,0xea,0x8b,0x3e,0x0a,0x13,0x81,0xff,0x00,0xf6,0x02,0x73,0x07,0xbf,0x04, -0xdf,0x89,0x0c,0xc7,0xff,0x9a,0x56,0x72,0x28,0x03,0x3e,0x22,0x12,0xff,0x72,0x22, -0xb1,0x04,0xd3,0xef,0x47,0x3b,0xf7,0xef,0x72,0x19,0x83,0x18,0x7b,0x00,0x74,0x07, -0x83,0x15,0xbb,0x00,0x75,0x0e,0x29,0x6d,0x10,0x14,0xff,0x77,0x07,0x8b,0xfd,0xeb, -0x03,0xe9,0xdc,0xfb,0x01,0x8b,0xdf,0x03,0xda,0x4d,0x6e,0xa0,0x86,0xed,0xa4,0x00, -0xa1,0x8d,0xfe,0x2b,0xd8,0x8e,0xc0,0xb4,0x4a,0x57,0xdf,0xa7,0x5f,0xd3,0xe7,0xfa, -0xff,0x8e,0xd2,0x8b,0xe7,0xfb,0x33,0xc0,0x2e,0xdb,0x8e,0x06,0xbb,0xbf,0xed,0xba, -0x13,0xb9,0x5a,0xfb,0x2b,0xcf,0xfc,0xf3,0xaa,0x47,0x7f,0xf4,0x11,0x14,0x76,0x47, -0x80,0xb7,0x3e,0xc0,0x03,0x72,0xb5,0x40,0x49,0xbf,0x08,0x93,0x00,0x1e,0x72,0x37, -0xf6,0xb8,0x01,0x58,0xbb,0xdb,0xb7,0xe1,0x72,0x2a,0xca,0xb4,0x67,0xd7,0x22,0x09, -0x7d,0x20,0xb4,0x48,0xbb,0x01,0xfd,0x12,0x17,0x40,0xa3,0xb7,0xe1,0x48,0x5a,0x5d, -0x49,0x0c,0x0a,0x7c,0x29,0x00,0xd6,0x73,0x80,0xf6,0x5b,0x01,0xb4,0x08,0xc2,0x1a, -0x1c,0xdb,0x96,0x80,0x0e,0xff,0x98,0x00,0x0a,0xc0,0x74,0x0c,0xb8,0x40,0xb7,0x00, -0x27,0xbb,0x70,0xfe,0x00,0x26,0xc6,0x07,0x01,0x33,0xed,0xc7,0x7b,0xbe,0xa2,0xbb, -0x13,0x7e,0xe8,0xd0,0xf7,0x00,0xff,0x36,0x88,0x03,0x4d,0x86,0x84,0x0b,0x2f,0x86, -0xfb,0x07,0x50,0xe8,0x99,0x29,0x20,0x1f,0x56,0x57,0xbe,0xba,0x63,0x22,0xad,0xf6, -0x00,0x5f,0x5e,0xc3,0x0d,0xb1,0x14,0x6f,0xb8,0x8b,0xf0,0xb9,0xb7,0x2f,0x47,0x02, -0x04,0xff,0x80,0xd4,0x00,0x46,0xe2,0xf7,0x2d,0x5c,0xfe,0x0d,0x74,0x09,0xb9,0x19, -0x00,0xba,0xdd,0x13,0xe8,0xdc,0xff,0x27,0x8b,0xec,0xb4,0x4c,0x8a,0xdb,0x46,0x02, -0x87,0xb9,0xb7,0x0e,0x14,0x48,0x00,0xdb,0xe9,0xd5,0xc5,0xb8,0xda,0x00,0x35,0x0e, -0x16,0x0a,0x74,0x1b,0x99,0x76,0x00,0xd8,0xb8,0x04,0x0c,0xcd,0x78,0x7a,0x2c,0x05, -0x8c,0x7c,0xd2,0x7e,0xc8,0x06,0xcd,0x80,0x82,0x2f,0x00,0x25,0x8c,0x85,0xca,0xce, -0xed,0xba,0xa0,0x01,0x13,0xdd,0x1f,0xc3,0x42,0x25,0xda,0xc5,0x16,0x40,0xe6,0x0b, -0x0a,0xcd,0x04,0x78,0x27,0x05,0x34,0x7c,0x9c,0x06,0xd3,0x80,0xf6,0xc3,0x81,0xfe, -0xd9,0xfc,0x74,0x04,0x32,0xe4,0xeb,0x6f,0x1a,0xff,0x8b,0xd7,0xff,0x8b,0xde,0x3b, -0xdf,0x74,0x23,0x26,0x80,0xf6,0x3f,0xff,0x74,0x18,0x19,0x3f,0x06,0x26,0x3a,0x67, -0x01,0xc6,0xeb,0x04,0x05,0xb6,0x05,0x77,0xd9,0x0b,0x8a,0x70,0x8b,0xd3,0xbf,0xfe, -0x06,0xeb,0xd9,0x3b,0xd7,0xf7,0x74,0x1b,0x8b,0xda,0x28,0x07,0x24,0xc2,0xff,0x06, -0xd9,0xff,0x26,0xff,0x5f,0x02,0x07,0xeb,0xb1,0x6c,0x06,0x57,0xde,0xaa,0xc3,0xb4, -0x40,0x11,0x88,0xed,0xc3,0xb9,0x1e,0xd7,0xc2,0x56,0x00,0x0c,0xcb,0x1e,0xe8,0xf8, -0xea,0xff,0xb8,0x03,0x00,0x5c,0x30,0x77,0x28,0x28,0x78,0x5b,0x91,0x55,0xfa,0x70, -0x83,0xec,0xdf,0x35,0x8b,0x7e,0x04,0x8b,0x56,0xff,0x06,0x8b,0x46,0x08,0x48,0x89, -0x46,0xfe,0xf6,0x33,0xf6,0xeb,0x09,0x55,0x8e,0x81,0xf6,0xde,0x88,0x01,0x46,0x08, -0xe3,0x80,0x38,0x32,0x7f,0x05,0x3b,0x76,0xfe,0x72,0xeb,0x6e,0x10,0xc6,0x01,0x38, -0x97,0x2f,0x31,0x8b,0xe5,0x5d,0xb2,0xc3,0x3a,0x59,0x34,0xff,0x8b,0x76,0x06,0xff, -0x76,0x04,0xe8,0xfb,0x98,0x4e,0x59,0x8b,0xf8,0x3e,0x6d,0x8a,0x4e,0xdc,0x5e,0x04, -0x3d,0x36,0x1b,0x3c,0xf9,0x3c,0x7e,0x6e,0xed,0x10,0x7e,0x3d,0x46,0x04,0xc9,0x3e, -0x7b,0x76,0x73,0x5a,0x34,0xdb,0x2c,0xb4,0x17,0x7f,0xd8,0xf6,0x87,0xad,0x0f,0x02, -0xff,0x74,0x5c,0x56,0xe8,0x30,0x38,0x59,0x88,0xf9,0x45,0x03,0xeb,0x01,0x46,0x39, -0x8a,0x9b,0x07,0xa9,0x6e,0xc7,0x75,0xee,0xde,0x4c,0x2f,0x74,0x0a,0xd9,0x51,0x2d, -0x7f,0xb8,0xff,0xff,0xeb,0x4b,0x46,0x6c,0x2b,0x04,0xf2,0x02,0x11,0xce,0x07,0xdb, -0x1d,0xd2,0x28,0xbf,0xdb,0x37,0x59,0x89,0x05,0x83,0xe3,0x3d,0x50,0x7d,0xee,0x78, -0x05,0x05,0xd0,0x5b,0x1b,0x0a,0x0b,0x64,0x64,0x76,0x6c,0x07,0x17,0x8d,0x20,0x6b, -0x93,0x91,0x37,0x8d,0x7e,0x80,0x7c,0x03,0x01,0x72,0x12,0xee,0x05,0x0c,0x77,0x0c, -0xd9,0x0b,0x02,0x6e,0x06,0x05,0xb5,0x1f,0x17,0xbf,0x24,0xeb,0x59,0x8a,0x44,0x03, -0x6e,0x5e,0x2d,0x02,0xef,0x69,0x83,0xfb,0x09,0x77,0xfe,0x47,0xd1,0xe3,0x2e,0xff, -0xa7,0x1c,0xdf,0xea,0x04,0xbb,0x04,0x00,0xfe,0x99,0xf7,0xfb,0x0b,0xd2,0x75,0x22, -0xe9,0x0b,0x64,0x06,0x0c,0x6c,0x90,0x01,0x9d,0x0a,0xdf,0x43,0x1d,0x76,0x16,0xeb, -0xba,0xdd,0xeb,0x12,0x09,0x1c,0xfc,0x76,0x0c,0xeb,0xb0,0xeb,0x08,0xdb,0x1e,0x76, -0x9e,0x6e,0xa6,0xcc,0x77,0x7e,0xd6,0x03,0x16,0xec,0x04,0x0e,0x04,0x03,0xd8,0x09, -0x61,0x24,0x3c,0x76,0x08,0x2e,0x27,0x0c,0xc7,0xde,0x62,0x00,0xc7,0x05,0xd8,0x03, -0xba,0x5f,0x43,0xeb,0x43,0x8b,0xc2,0xc2,0xd1,0xe0,0x4f,0xfb,0x06,0x03,0xd8,0x8b, -0xc2,0x78,0xc8,0x8b,0xd9,0x57,0xff,0xeb,0x3f,0x06,0x2d,0x75,0xb5,0x15,0xd2,0xf3, -0x1a,0x0e,0x77,0xc1,0x40,0x89,0xe0,0x36,0x04,0x05,0xd6,0x73,0x89,0xbe,0x14,0x0a, -0x77,0x13,0x4b,0x04,0x04,0xb6,0x42,0x42,0x3b,0x17,0x8a,0x7c,0xb6,0x61,0xf8,0xba, -0x65,0x04,0x17,0x25,0xda,0x4c,0x0c,0xbd,0x17,0xe5,0x8a,0x41,0xf0,0xff,0x3a,0x06, -0xe6,0xb5,0x8c,0x0d,0xb6,0x13,0xa0,0x06,0xa5,0x69,0x0d,0xf7,0x41,0x0d,0xba,0xc6, -0x66,0x2c,0x1a,0xf6,0x50,0x5c,0xb8,0x50,0x68,0x44,0x6e,0xf0,0x8d,0x46,0xb0,0x37, -0x4b,0xb8,0xfd,0xec,0x83,0xc4,0x06,0x09,0x6e,0x99,0x40,0xfd,0xf0,0x83,0xfe,0x03, -0x7d,0x14,0xf6,0x1f,0xb8,0x3c,0xd8,0x50,0x20,0xcf,0xd2,0xeb,0xba,0x17,0x18,0x7e, -0xdd,0x8b,0xc6,0x48,0xbd,0x22,0x8a,0x42,0xb0,0xf1,0x61,0x75,0xad,0x12,0x08,0x85, -0x00,0x59,0x67,0x25,0xb3,0xdd,0x36,0x59,0x7e,0x83,0x0a,0x0d,0x37,0xef,0xf7,0xc7, -0x85,0x10,0xc3,0x0f,0x72,0x03,0x0c,0x1c,0x32,0x30,0x74,0x81,0xec,0xa1,0x64,0x0f, -0xe6,0x0a,0xd9,0xb8,0x80,0x7f,0xf6,0x86,0x7e,0xff,0x5f,0xce,0x37,0xe6,0x11,0x71, -0xcc,0xe8,0xc6,0x12,0x5f,0x4d,0xf2,0x24,0x06,0x72,0x4d,0x4c,0xeb,0x87,0x3a,0x25, -0xd9,0x08,0x11,0xcf,0x28,0x0b,0xe3,0xf6,0x74,0x28,0xb8,0xec,0x23,0x2d,0x2e,0x0c, -0x43,0xb3,0x56,0x2b,0xcf,0xfc,0xfc,0xff,0x34,0x3d,0x94,0xe4,0xe0,0xfc,0x1b,0x57, -0x0f,0x39,0xd0,0x37,0x22,0x48,0xed,0x73,0xbd,0xb3,0x0a,0xe1,0x0e,0x21,0x59,0x01, -0x5b,0x07,0xb8,0xc2,0xf1,0x02,0x05,0xe5,0x24,0x46,0xed,0xb8,0xb4,0x10,0x08,0xc6, -0xef,0x36,0x6f,0xe5,0x46,0xff,0x74,0xcb,0x2f,0x6b,0xe5,0x09,0x43,0xf0,0x76,0x8a, -0x07,0x3a,0x07,0x85,0x17,0xad,0xb0,0x0b,0xb6,0x2e,0x0d,0x08,0x43,0x1b,0x42,0xf0, -0x75,0xb1,0x0b,0x2b,0x02,0x0e,0x34,0xb7,0x3a,0xe1,0x94,0x77,0xa6,0x8a,0x05,0x0e, -0xf1,0x9f,0xb0,0x04,0xb8,0xff,0xeb,0x99,0x40,0x42,0x70,0x0a,0x40,0xd9,0xbc,0xf4, -0x02,0xf8,0xe8,0x2e,0x39,0x67,0x71,0x3c,0x6e,0x75,0x30,0x0d,0x5b,0xaf,0x03,0x86, -0x50,0x8a,0x81,0xb8,0x18,0x5b,0x9b,0x41,0x99,0x19,0xb3,0x8f,0xf7,0x01,0xbb,0x5d, -0x0a,0x80,0xda,0x7e,0x08,0xe2,0x05,0xa4,0xf7,0x29,0x01,0xb8,0x1e,0x1d,0x6d,0x2c, -0x24,0xa1,0xc3,0x18,0x03,0x59,0xf0,0xe8,0xec,0x38,0xed,0xb3,0x6f,0xda,0x75,0x36, -0x0d,0xdc,0xdf,0x1b,0x03,0xa3,0x28,0x59,0x42,0xe4,0xfe,0x18,0x99,0x2f,0xc6,0x5d, -0xf6,0xa9,0x35,0x59,0x47,0x0f,0xe1,0x00,0xb8,0x9b,0x1d,0xe4,0x23,0xd6,0x59,0xc7, -0x39,0xfd,0x00,0x40,0xeb,0x53,0x57,0xb7,0x3d,0xfc,0x39,0x85,0x0e,0xdb,0xf6,0xbf, -0x2f,0x7b,0x96,0x3c,0x08,0x37,0x9e,0xfc,0x74,0xbe,0x3b,0x54,0x3a,0x69,0x02,0x06, -0xa9,0x4b,0xc8,0xda,0x1f,0xcb,0x54,0x57,0xd9,0xe8,0x4f,0x59,0x32,0x87,0x72,0x8a, -0xdb,0x56,0x52,0xfe,0x25,0xe6,0x36,0x39,0x97,0x89,0x83,0x7e,0xf0,0xfc,0x00,0x7f, -0x91,0xba,0x6c,0xf6,0x50,0x55,0xcb,0xcd,0x32,0x29,0x96,0xe7,0x59,0xc6,0x0e,0x45, -0x47,0x20,0x2d,0x2b,0x54,0x73,0xff,0x34,0x5a,0xfa,0x04,0x18,0x0e,0x3e,0x26,0x1a, -0x34,0x56,0x3b,0xc2,0xfa,0x8d,0xcb,0x0a,0x0b,0xc0,0xc0,0x75,0xad,0x1c,0x0b,0xee, -0x25,0x20,0x00,0x11,0x6d,0x74,0x0c,0x73,0xde,0xc3,0x69,0xfa,0x97,0x5b,0x6d,0xfa, -0x38,0x7d,0x13,0xeb,0x33,0xc0,0x99,0x40,0x24,0x7e,0x10,0xc6,0x46,0xf1,0x30,0xd8, -0x63,0xf0,0xe9,0xe5,0xf0,0x7b,0x87,0x2e,0x59,0xac,0xa3,0xf0,0xde,0x76,0x03,0xfe, -0x0e,0xb6,0x52,0xf0,0x5f,0xb1,0x08,0xd3,0xe0,0xf6,0x8a,0x56,0xf1,0xb6,0x5b,0xd9, -0xc2,0x33,0x35,0x1c,0xc1,0x8a,0x75,0xab,0x04,0x7e,0xdb,0x05,0x1a,0xac,0x76,0xf1, -0x5d,0x40,0xf8,0x2e,0x68,0x2c,0xdf,0x8c,0x76,0xee,0x8c,0x5e,0xb5,0xf8,0x3c,0xc9, -0xb2,0xe0,0x43,0x1a,0x6e,0x5a,0x03,0x1a,0xba,0xf4,0xcc,0x1e,0xe6,0x79,0x6d,0xed, -0xe5,0x73,0x03,0xda,0xe4,0x03,0x96,0x16,0xa8,0x00,0xe6,0x16,0xa7,0xfb,0xea,0x8c, -0x56,0xfe,0x3a,0xdb,0x03,0xe4,0x3b,0x27,0x73,0x25,0x2e,0x36,0xc5,0xe4,0xcb,0xa3, -0xac,0x18,0x01,0x40,0xd0,0x8f,0x81,0xa3,0x47,0xa5,0x63,0x73,0x52,0x6e,0x29,0x3e, -0xed,0x00,0x60,0x89,0xa8,0x6d,0x68,0xfe,0xb3,0x6e,0xf2,0x33,0x41,0xbd,0xe8,0x03, -0xb9,0x41,0xe3,0x2d,0x82,0x4c,0xc3,0xf4,0x73,0x56,0xc6,0x99,0x8c,0x5e,0x07,0x2c, -0x07,0x8e,0x56,0xf2,0xed,0xf4,0xf9,0x16,0x95,0x89,0xc7,0x46,0x62,0x50,0xd8,0xc1, -0x00,0x5b,0xfe,0x25,0x10,0x67,0x72,0xcd,0xc6,0x01,0x82,0x2c,0x1e,0xd3,0x64,0xe6, -0x48,0x02,0x96,0x0e,0x0d,0x6c,0xe2,0xf8,0xd3,0x56,0xcb,0x82,0xfc,0x96,0x24,0xd4, -0x7b,0xd8,0x21,0x07,0xeb,0x24,0xdb,0xb8,0x5f,0xe4,0xe8,0xfd,0x0b,0x17,0x59,0xa3, -0xbb,0x13,0xd7,0x5f,0xfb,0x86,0x6d,0xfc,0x50,0x08,0xcd,0xf2,0xfd,0xfe,0x0e,0x76, -0x1f,0xa8,0xce,0xfa,0x6c,0x95,0x0c,0xbf,0xfe,0x01,0x7c,0x08,0x81,0xb7,0xbe,0x23, -0x65,0x03,0x16,0xe4,0xff,0xe8,0x21,0x08,0xe8,0x4a,0x1a,0xb8,0x6a,0xa3,0x59,0x65, -0x75,0x5d,0x1b,0x02,0xf1,0x7e,0x27,0xb8,0x67,0x83,0xa7,0x01,0x1d,0x52,0x56,0x91, -0x16,0xc3,0xfc,0x02,0x9a,0x4b,0x1d,0xe8,0xb3,0x1d,0x2c,0x97,0x48,0xb8,0xb8,0xb7, -0x15,0x07,0x96,0x1f,0x2d,0xff,0xd7,0x2a,0x84,0x7d,0x77,0x61,0x3c,0x59,0x72,0x69, -0xf4,0xfa,0x14,0x73,0xc6,0xf8,0xb6,0x62,0xfa,0xdb,0xff,0x40,0x11,0x3d,0x74,0x48, -0xbb,0x27,0x8c,0x03,0x1e,0x07,0x01,0x47,0x68,0x48,0xef,0x28,0x07,0xc6,0x06,0xab, -0x1b,0x19,0xeb,0x12,0xe8,0xd8,0x8f,0x18,0x79,0xe8,0x46,0x2d,0x2d,0xc4,0x05,0xf0, -0x06,0x02,0xb6,0x68,0xf8,0x24,0xf7,0xe9,0xfa,0x02,0x66,0xa5,0xd5,0x83,0xf8,0x54, -0x5e,0xde,0x05,0xaa,0xdd,0xff,0x37,0x6a,0xf9,0x2c,0x5b,0xec,0x0a,0xee,0x10,0x63, -0xb1,0x92,0x4a,0x96,0xf9,0x9d,0x4e,0x08,0x58,0xaa,0xdd,0x7c,0xe9,0xb8,0xb6,0x3e, -0x94,0x19,0x1c,0x83,0x93,0xac,0x34,0x9e,0xb2,0x8a,0x1c,0x69,0x9f,0x0f,0xc7,0x06, -0x96,0xbf,0xff,0xd9,0x05,0xbd,0xba,0xe9,0x7d,0x02,0x46,0x5e,0x96,0xc3,0x24,0xdc, -0xef,0x46,0x70,0xe8,0x25,0x6d,0xf6,0x52,0x37,0xcd,0xf6,0x51,0x91,0xf8,0x8c,0x0c, -0x64,0x77,0xd6,0xf8,0x0b,0x85,0x44,0x9a,0x99,0x02,0x41,0xc9,0x11,0x15,0x39,0x42, -0x1c,0xb2,0xd8,0x18,0x3d,0x03,0x20,0x59,0xe0,0x07,0x71,0xe0,0xfb,0xfa,0xc5,0x3b, -0xca,0xd3,0x08,0xbe,0x47,0x62,0x19,0x24,0x0a,0xef,0xdb,0x88,0xa3,0x85,0x75,0xe9, -0xf9,0xb6,0x58,0xa6,0xbe,0x1e,0xc4,0x45,0x43,0x9a,0xad,0xdf,0xd9,0x19,0xa8,0x0e, -0xaa,0x49,0x9a,0xae,0xc5,0x59,0xaa,0x0e,0x90,0x49,0x9a,0xb0,0xab,0x59,0xac,0x0e, -0x76,0x49,0x9a,0xb1,0x91,0x59,0xae,0x0e,0x5c,0x49,0x9a,0xbc,0x77,0x59,0xb0,0x0e, -0x42,0x49,0x9a,0xb2,0x5d,0x59,0xb2,0x0e,0x28,0x49,0x9a,0xb3,0x43,0x59,0x90,0x0e, -0x0e,0x49,0x0c,0xd9,0x07,0x28,0xb0,0xb4,0x33,0xf2,0xf4,0x44,0x1c,0xb4,0xd6,0x0f, -0x19,0xc8,0xb6,0x72,0xda,0x4c,0xb5,0xde,0xf5,0x00,0xb8,0xb8,0x43,0x92,0xc0,0x66, -0xb6,0x96,0xdb,0xba,0x43,0x92,0xa6,0x66,0xb7,0x96,0xc1,0xbc,0x43,0x92,0x8c,0x66, -0xb8,0x96,0xa7,0xbe,0x43,0x93,0x72,0x96,0x15,0xb9,0x5f,0xe8,0x16,0x1f,0xa2,0x52, -0x74,0x84,0xb5,0x7d,0x14,0x1f,0xe9,0x7f,0xb2,0x26,0xc0,0x1c,0x4b,0x9c,0x07,0xb2, -0xba,0xfb,0xeb,0x67,0xb8,0x8d,0x18,0x0f,0x32,0x44,0x18,0xce,0x1f,0x4e,0xb8,0xc2, -0x61,0x18,0xc8,0x19,0x0a,0xd8,0x32,0x35,0xc2,0xbd,0x71,0xb8,0xc5,0xd2,0x1f,0x03, -0x0e,0xf1,0x12,0x04,0xb7,0x9c,0x22,0x1a,0xdc,0xe8,0xb7,0x16,0x63,0x20,0xe2,0x4b, -0x71,0xff,0x1b,0xfe,0x8b,0x68,0x02,0x1a,0xed,0x7d,0x05,0xbd,0xf4,0xfb,0xfc,0xff, -0xb6,0xbc,0xd1,0xe8,0x53,0x44,0x58,0x07,0xe3,0x4f,0x7e,0x64,0x66,0xd4,0x90,0x04, -0x72,0xac,0x12,0x4e,0xdd,0x19,0x6c,0x73,0x16,0x8e,0x9e,0x1d,0x59,0x82,0x5e,0x39, -0xbd,0x67,0x2e,0x9c,0x2d,0xfb,0x45,0xa0,0x0a,0x56,0x63,0x40,0xcd,0xe9,0x05,0x20, -0xc9,0x6b,0x73,0x9c,0xc9,0x32,0xca,0x5d,0xcf,0x38,0x22,0xf7,0x7c,0xcd,0x64,0x5c, -0xf3,0x0e,0x0a,0x67,0x12,0x70,0x89,0x44,0x21,0xf8,0x46,0xb8,0x0e,0x9d,0xf5,0x73, -0xb4,0x44,0x73,0xcb,0xf4,0x2e,0xf3,0x67,0x32,0xef,0x9e,0xf6,0x44,0xc7,0x0c,0xb8, -0x0c,0xb6,0x04,0xf1,0x06,0x41,0xc9,0xff,0x11,0x39,0x30,0x19,0xf2,0xc5,0x15,0x34, -0xf0,0xbe,0x1e,0xeb,0x15,0xeb,0x13,0xe6,0x50,0x2f,0xca,0x22,0xce,0x53,0x77,0x76, -0x50,0x7b,0x71,0xf6,0x8c,0x07,0x4e,0x43,0x08,0x04,0xc8,0x43,0x36,0x07,0xc3,0x0e, -0xa7,0x11,0x49,0xcd,0xd8,0x18,0x6e,0x67,0x56,0x99,0xac,0x1c,0xdb,0x74,0x7d,0x11, -0x38,0x77,0x1d,0x4c,0x34,0x47,0x36,0xbc,0xe9,0xd8,0x01,0x2c,0x51,0xf4,0xb9,0x01, -0x43,0x26,0x26,0xeb,0xa4,0x08,0x4c,0x06,0x5a,0x4b,0x9e,0x8b,0x21,0x4f,0x4c,0x1c, -0x09,0x51,0xb9,0x39,0x9e,0x4a,0xdb,0xf9,0x11,0x51,0xcf,0xe2,0xf8,0x40,0x74,0x40, -0x09,0x83,0x19,0x25,0xcf,0x4a,0xe0,0x91,0x14,0xd1,0x0b,0x1c,0xbc,0x47,0x9e,0xf4, -0xfd,0x83,0x75,0x0b,0xd8,0x51,0xb3,0x01,0x48,0xc3,0xc0,0xf5,0x2e,0x09,0xa6,0x91, -0xa1,0x4e,0x64,0x0d,0xf8,0x15,0x0b,0x43,0x40,0x64,0xf2,0xd4,0xf8,0xe4,0x66,0xf3, -0xf7,0xb8,0x2a,0x23,0xcd,0xd4,0x78,0x9d,0x41,0x8d,0x3c,0x17,0x2d,0x42,0x3f,0x87, -0x16,0x61,0x25,0xa5,0x76,0x66,0x2d,0x1e,0x50,0x4a,0xc1,0x16,0xd9,0x75,0x14,0x2a, -0xbe,0x13,0x36,0xc3,0x2a,0xd6,0x0c,0xa0,0x0a,0xb5,0x7b,0x8d,0x33,0x9a,0xb7,0x61, -0x77,0xce,0x48,0x0b,0x39,0x4a,0x10,0xd8,0x59,0xee,0xb8,0x72,0x17,0x90,0x0a,0x64, -0x32,0x78,0xb8,0x68,0x04,0xb7,0x48,0x63,0x17,0x32,0xe4,0xd0,0x3d,0x29,0xb0,0xd2, -0x22,0x0e,0x0c,0x0f,0x9d,0xab,0xd2,0x12,0x0d,0x0e,0xfc,0x0f,0x46,0x8b,0x69,0x0c, -0x06,0xe9,0x77,0x4f,0x4b,0xf5,0x0a,0x42,0xd2,0xc4,0xfb,0xb2,0xc1,0xfb,0xe0,0x3d, -0x01,0x97,0x92,0x3d,0x02,0x6f,0x04,0x09,0xeb,0x0c,0x4b,0x7a,0xaf,0x35,0x05,0x63, -0xac,0x80,0xb5,0x3e,0x04,0xb0,0x14,0x2b,0xec,0x89,0x91,0x42,0x2b,0x7a,0x87,0xf2, -0x9e,0x4a,0x02,0x30,0x41,0x3b,0xd4,0x16,0xa7,0x35,0x67,0x21,0x2f,0xd9,0xf4,0x59, -0x08,0xe3,0x0c,0x41,0x41,0x26,0x26,0x1a,0xb3,0x0f,0x41,0xc9,0x65,0x0f,0x39,0x96, -0x16,0xb2,0x2c,0x13,0x3d,0x57,0x1a,0x59,0xb2,0x71,0xad,0xa5,0xcd,0x6c,0x78,0xb7, -0xd6,0x3a,0x44,0x23,0x8b,0x3d,0x38,0x05,0x3d,0xe7,0x74,0xb3,0x47,0xba,0x48,0x10, -0x32,0x1d,0x5c,0x4e,0xf9,0xe4,0x12,0x19,0x0f,0x6e,0x8a,0x39,0xa3,0xb4,0x27,0xa5, -0xa7,0xfb,0x04,0xc0,0xa2,0xba,0x13,0x50,0x66,0xba,0xee,0x40,0xb8,0xd7,0x3d,0x90, -0x11,0x72,0xdf,0x0e,0x4c,0x10,0xda,0xff,0x0e,0x37,0xf2,0x7c,0x0e,0xfd,0x8b,0x1e, -0xbe,0x10,0xff,0x06,0xa8,0x03,0xd6,0xd9,0x3e,0xea,0xeb,0x08,0x47,0x05,0x39,0x33, -0x52,0x0d,0x7c,0xe1,0x2b,0x59,0x25,0x05,0x84,0xd0,0x59,0x9a,0xe1,0x9f,0x06,0x8f, -0xbb,0x83,0x3e,0xc5,0xb8,0xaf,0x2d,0x16,0x4b,0x85,0xf2,0x34,0x12,0x83,0x79,0x92, -0x0e,0x73,0xaa,0x15,0xec,0x3f,0x12,0x17,0x76,0x6a,0x19,0xaf,0xe1,0x34,0x12,0xc3, -0x45,0x9b,0xb8,0x12,0x6d,0x05,0x68,0xcb,0x8a,0x15,0x56,0xbd,0x05,0x36,0xb3,0x3a, -0x02,0x49,0x3e,0xdd,0x51,0x1a,0x6f,0x2b,0x1b,0x66,0x78,0x90,0x02,0x64,0x22,0xb9, -0x53,0xe6,0x9f,0x90,0x03,0x6c,0x06,0xd8,0xbb,0x37,0x1b,0xe6,0xe6,0x90,0x04,0x72, -0xea,0x0d,0x4c,0x1b,0xf7,0x28,0x0c,0x58,0x05,0x1b,0x32,0xce,0x5e,0xff,0x14,0x69, -0x74,0xa4,0x06,0x19,0xb2,0x2e,0xe3,0x79,0x99,0xa4,0x07,0x19,0x96,0x2e,0xc7,0x79, -0xd0,0xa4,0x08,0x19,0x7a,0x2e,0xab,0x7d,0x19,0x07,0x26,0xba,0xf9,0x1b,0x5e,0x2e, -0x8f,0x79,0x68,0xa4,0x0a,0x19,0x42,0x2e,0x73,0x79,0xad,0xa4,0x0b,0x19,0x26,0x2e, -0x57,0x79,0xe6,0xa4,0x0c,0x19,0x0a,0x2e,0x3b,0x7d,0x1f,0x08,0x26,0x0d,0xfc,0x1b, -0xee,0x0c,0x93,0x1f,0x3c,0x6b,0xd2,0x0e,0x0c,0xd2,0x97,0x03,0x3c,0xb8,0xd2,0x0f, -0x0c,0xb6,0x97,0xe7,0x9a,0x13,0xea,0x69,0x10,0x06,0x9a,0x4b,0x9f,0xcb,0x36,0x09, -0x19,0x60,0xbe,0x1b,0x7e,0x4b,0x9e,0xaf,0x7a,0x69,0x12,0x06,0x62,0x4b,0x9c,0x93, -0x7e,0x12,0x0c,0x19,0x3f,0xe2,0x38,0xb8,0xba,0xd1,0x27,0x23,0x41,0x93,0x3a,0xc6, -0xc8,0x09,0xa4,0xe4,0x6b,0x13,0x81,0xdb,0x94,0x30,0x5f,0xe6,0x34,0x13,0x83,0x02, -0x25,0xcf,0x33,0x33,0xb6,0x0a,0x1b,0x14,0x41,0xc9,0xe6,0x0b,0x33,0x17,0xcd,0x7b, -0x15,0x20,0xc9,0xca,0x79,0xfb,0x12,0xa6,0xbb,0x90,0x16,0x64,0xae,0xb9,0xdf,0xf2, -0x0a,0x0b,0xc8,0x17,0x32,0x92,0x5c,0xc3,0xf3,0x42,0x48,0x18,0x32,0x76,0x5c,0xa7, -0xf3,0x89,0x48,0x19,0x32,0x5a,0x5c,0x8b,0xf3,0xd1,0x48,0x1a,0x32,0x3e,0x5c,0x6f, -0xf9,0x20,0x0c,0x64,0x1b,0x19,0x22,0x2e,0x53,0x79,0x5f,0xa4,0x1c,0x19,0x06,0x2e, -0x37,0x79,0x86,0xa4,0x1d,0x1c,0xea,0x0a,0x93,0x1b,0x3c,0xbc,0xd2,0x1e,0x0c,0xce, -0x97,0xff,0x9b,0x11,0x04,0x0d,0x2c,0x1f,0x83,0xb2,0x25,0xcf,0xe3,0x49,0x34,0x20, -0x83,0x96,0x25,0xcf,0xc7,0x96,0x35,0x21,0x20,0xa7,0xe4,0x7a,0x0a,0x9b,0xab,0x1b, -0xe6,0xb7,0x8c,0x22,0xff,0x39,0x0a,0x2d,0xf3,0x1b,0xfe,0x48,0x23,0x32,0x42,0x5c, -0x73,0xd5,0xc3,0xb3,0xc0,0xb9,0x70,0x0a,0xa0,0xbb,0x70,0x37,0x5c,0xed,0xdd,0x15, -0xb9,0x3b,0x0e,0x34,0x22,0x46,0xc7,0x2d,0xff,0x36,0xa1,0xc3,0x90,0x66,0x36,0xd6, -0x33,0x0e,0x95,0xe6,0x3d,0x11,0x1b,0xd6,0x0d,0x10,0x98,0x2e,0xa7,0x60,0xf0,0x57, -0xe8,0x7b,0x3b,0x70,0x80,0x0d,0x97,0x10,0x8d,0x2b,0xbe,0x4e,0x0d,0x0b,0xff,0x9e, -0x0d,0xdd,0x1c,0x1e,0x3b,0x08,0x4b,0xdd,0x05,0x52,0xeb,0x15,0xa0,0xb2,0x12,0x52, -0xf6,0xa2,0x00,0x3f,0x20,0xb6,0x65,0x75,0x85,0xda,0x97,0xff,0x83,0x00,0x13,0xe4, -0xdb,0x57,0x36,0xae,0x75,0x68,0xec,0xcc,0x44,0x09,0x7b,0x38,0xee,0x59,0x07,0x1c, -0x16,0x3b,0x17,0x2c,0x2f,0x8e,0x78,0x0e,0x17,0x12,0x5e,0xff,0x6c,0x6a,0x53,0xe8, -0xd6,0x0e,0x58,0xff,0x3e,0x80,0x7a,0xae,0x5c,0x75,0x30,0xdb,0xc6,0x82,0x15,0x00, -0x67,0x1a,0x2e,0xbe,0xee,0x75,0x1e,0xcf,0x0c,0xdc,0x16,0x76,0x3b,0xfe,0x80,0x2d, -0x48,0x6c,0xec,0x0c,0x53,0xec,0xda,0x8a,0x0d,0x3b,0xe4,0x13,0x8a,0xee,0x42,0xae, -0x88,0x32,0x82,0x46,0xff,0x8f,0x3b,0xc6,0x7f,0xb9,0x65,0x9f,0xba,0xde,0x76,0x29, -0x36,0x9a,0x6c,0xd6,0xe6,0x03,0xcd,0xf2,0x8a,0x00,0xe0,0x9a,0x9b,0x08,0x42,0x27, -0x07,0xe6,0x36,0x18,0xdc,0x69,0xe2,0x01,0xe4,0x08,0xe8,0x29,0xde,0x14,0xfb,0x31, -0xd2,0xc7,0x72,0x56,0x00,0x2f,0x2a,0x7d,0x47,0xcc,0xb3,0x11,0x44,0xbd,0xe8,0xe0, -0x34,0x96,0xe7,0xeb,0xc9,0x0e,0x9a,0x8a,0x80,0x4b,0x9a,0xd2,0x71,0x4b,0x9a,0xcc, -0x62,0x76,0xa0,0x5c,0x04,0x2b,0x3f,0x8e,0xf0,0xfc,0x39,0x4b,0xc5,0xfe,0x7d,0x7f, -0xf2,0xfc,0x09,0xfc,0x33,0xff,0x56,0xe9,0xc4,0x32,0x34,0x48,0x00,0x4d,0x85,0x2a, -0x3c,0x3f,0xb6,0x0e,0xee,0x88,0x68,0x69,0x01,0xaf,0xc0,0x14,0xaf,0x3a,0x0b,0x12, -0x91,0xb1,0x25,0x15,0x98,0xd3,0xad,0xce,0xdc,0x7c,0x18,0x10,0x81,0x18,0xac,0x15, -0x07,0x79,0x3f,0x74,0x0d,0x18,0x2a,0xad,0xeb,0xf2,0x76,0xfc,0x7c,0xac,0x21,0xc2, -0x01,0xc9,0x1c,0x02,0x89,0x60,0x1b,0x11,0x06,0x66,0xb7,0x96,0x0a,0xb8,0x61,0x6e, -0x84,0x03,0x01,0x12,0xcf,0xf6,0x6d,0xea,0xc8,0x62,0x4d,0xda,0xf2,0x11,0x96,0x31, -0x10,0x7e,0x04,0xe4,0xfd,0xcf,0x12,0x52,0x25,0x34,0xe9,0x6f,0x6e,0xf6,0x86,0xf9, -0xdc,0xfd,0x10,0x40,0x37,0x42,0xb8,0xf0,0x17,0x08,0xe5,0x02,0xfe,0xc7,0x86,0x38, -0x46,0xba,0x14,0x9b,0x59,0xef,0x0e,0x71,0x43,0x8c,0x86,0x3a,0xc2,0xed,0x76,0x01, -0x6b,0x1b,0x24,0x16,0x13,0x79,0x28,0xea,0x31,0x4e,0xbb,0xce,0x12,0x15,0x43,0x14, -0xf7,0x24,0x0e,0x38,0x64,0xc8,0xe9,0x2e,0x0e,0x6c,0xef,0xe9,0x84,0xbe,0x12,0xdc, -0x76,0x34,0xce,0x0a,0x3d,0x0f,0x9e,0x4e,0xee,0xfe,0x99,0x1a,0xe2,0xcb,0x96,0x01, -0x24,0x23,0x7d,0xdd,0x97,0x34,0x88,0xff,0xd4,0x08,0xa9,0xb5,0x67,0x66,0xb0,0x10, -0xb8,0x5f,0xfe,0x05,0x34,0xfa,0x30,0xab,0x4b,0x17,0xb0,0x55,0x5e,0xde,0x47,0xfb, -0x10,0x7f,0x5c,0x38,0xfe,0x4b,0x15,0xcc,0x3c,0x24,0xc7,0x4f,0x06,0xc7,0xc0,0x06, -0xc5,0x68,0xd9,0xa5,0x14,0x17,0xcb,0x4d,0xad,0x61,0x0f,0xf4,0x44,0x87,0xeb,0x03, -0xb2,0x56,0xc9,0x71,0x10,0xfe,0x1b,0xa4,0xe8,0x2b,0x0a,0x3c,0x93,0xfc,0x0f,0xff, -0x37,0x63,0x0c,0xb8,0xa6,0x4a,0xde,0x90,0x14,0x75,0x35,0x06,0x8e,0x0c,0x6b,0x04, -0x8e,0x96,0x99,0x0d,0xb3,0x52,0xac,0x37,0xb3,0xae,0x00,0x56,0xd6,0xc5,0x09,0x8d, -0xf2,0x1c,0x68,0x23,0x43,0xcb,0xf6,0x92,0x00,0xe9,0x96,0x02,0xdd,0x8c,0xc9,0xaa, -0x42,0x4a,0x73,0xb3,0x43,0x07,0xa8,0xf0,0x20,0x74,0x6c,0x83,0x7b,0xbe,0x76,0x6d, -0x85,0xe8,0x10,0x42,0xb7,0x13,0xce,0xac,0xc9,0x9e,0xba,0x6e,0x11,0x5f,0x70,0xec, -0x41,0x24,0xee,0x60,0x38,0xc9,0x8c,0xfc,0x33,0x60,0xbe,0x26,0x73,0xce,0xc5,0x6e, -0xc3,0x48,0x02,0xc2,0x85,0xee,0x09,0x61,0xe4,0x5b,0x23,0x3a,0x6d,0x04,0x46,0x07, -0x84,0x01,0x44,0x88,0xf2,0x50,0x4b,0xb0,0x76,0xf2,0xad,0x28,0x04,0x9f,0xf0,0xee, -0x00,0x96,0x00,0xec,0x0b,0x90,0xad,0xe8,0x09,0x6c,0xb9,0xb4,0xd4,0x3f,0x60,0xe9, -0xc3,0x69,0x0f,0x4d,0x03,0x03,0x36,0x25,0x05,0x46,0x65,0xe9,0x12,0x02,0x06,0x12, -0x74,0xda,0x77,0x5a,0xea,0x31,0xd7,0xad,0xeb,0x41,0xa9,0xeb,0xf5,0xe9,0x0f,0x78, -0x56,0xd7,0xe4,0x46,0x36,0x7d,0x29,0x57,0xb8,0x6c,0xd4,0x31,0x15,0x20,0x98,0xe4, -0xe0,0x04,0x9c,0x11,0x0c,0xf8,0xa6,0x08,0x2f,0x31,0xce,0xd1,0x0f,0xdc,0x36,0xf9, -0x1f,0xf9,0x74,0x33,0x66,0x8e,0x90,0x16,0x64,0xa9,0xbc,0xda,0x0b,0x20,0x8b,0x3a, -0xa5,0x03,0x35,0xd6,0xb3,0x40,0x05,0x4b,0x90,0x8d,0xcd,0x46,0xc6,0xe2,0x8a,0x33, -0x6b,0xd8,0xa8,0x95,0xae,0xd8,0x09,0xf8,0xf7,0xd8,0x1b,0xc0,0x40,0xee,0x51,0xe8, -0x6c,0xec,0xd0,0x05,0x6b,0xec,0x02,0x45,0x28,0x74,0x15,0x3c,0x0b,0x43,0x77,0xb2, -0x17,0x0b,0xf3,0x75,0x41,0x6b,0x25,0xff,0x0a,0x50,0xb8,0x06,0x72,0x36,0x59,0x49, -0x7c,0x68,0xa0,0xd6,0xbb,0x51,0xec,0x6e,0xec,0xc0,0x7f,0x24,0x8b,0x86,0x86,0xfe, -0x8b,0xed,0x96,0x84,0xfe,0x3f,0xfe,0xee,0x89,0x56,0xec,0x8b,0x8e,0x8a,0xdd,0x0d, -0x9e,0x88,0xd6,0x11,0x82,0x03,0xfd,0x86,0x80,0xfe,0xeb,0x3c,0x4d,0x94,0x41,0x05, -0xce,0xd8,0x34,0x07,0x25,0xec,0x83,0x3d,0xc0,0x7d,0x10,0xb8,0xa1,0x0e,0xb9,0xd6, -0x2d,0x0b,0x6e,0x27,0x14,0xe2,0xf2,0x0e,0x59,0xb4,0x3c,0x23,0x6a,0x89,0x2a,0xde, -0x26,0xf6,0x33,0xc9,0x03,0xfc,0x7e,0x33,0xd2,0xe8,0xf4,0x11,0xdb,0x53,0xf2,0x12, -0x60,0xf0,0x14,0xc4,0x7f,0x46,0x06,0x02,0xa1,0xab,0xbd,0xa1,0x44,0x2e,0xa5,0x74, -0x44,0x8d,0xdb,0x97,0xbf,0x7f,0x23,0xdb,0x7c,0x07,0x08,0xbd,0x2e,0x73,0x1a,0xdf, -0x2f,0xde,0x8b,0x56,0xdc,0xfb,0x3b,0x46,0xc0,0x7f,0x29,0xf8,0xbf,0xac,0x02,0x3b, -0x56,0xbe,0x77,0xed,0x1f,0xe9,0xa4,0x7c,0x61,0x19,0xbb,0x35,0x7f,0x0e,0xb6,0x7d, -0x1a,0x91,0x5b,0x16,0x31,0x55,0x2f,0x5a,0x88,0x02,0xa0,0xaf,0xab,0xe1,0xbf,0x01, -0x59,0x7b,0x02,0x57,0x6a,0xad,0x3d,0x8d,0xcd,0xa5,0x88,0x70,0xe0,0x72,0xb3,0xc8, -0xcd,0x48,0x01,0x39,0x49,0x03,0xc6,0x69,0xcd,0xa8,0xe2,0x9d,0xe5,0xfb,0x21,0xef, -0x02,0x12,0x07,0x0a,0xe6,0x20,0xd9,0x56,0x22,0xc8,0xfa,0xdd,0xe5,0x40,0x05,0x20, -0xc8,0x08,0xa9,0xe9,0x5d,0x12,0x04,0x20,0xe7,0xf5,0x02,0x18,0x42,0x4e,0xe2,0x02, -0x4a,0x76,0xcf,0x02,0x79,0x5e,0x13,0xe8,0x33,0x46,0xb5,0x8a,0x02,0xd3,0xb6,0x02, -0xf8,0xc4,0x01,0x3d,0x03,0x9b,0x81,0x3d,0x04,0x07,0x99,0x01,0x94,0x78,0xe9,0xb5, -0x01,0x2c,0x8b,0x44,0x27,0x6e,0xa6,0x85,0x01,0x15,0x96,0xd6,0xd4,0x5f,0xb8,0x7c, -0x53,0x7f,0x85,0x05,0x12,0xe9,0xb6,0x76,0x4c,0x36,0x6d,0xee,0x02,0xb3,0xec,0x17, -0xb6,0x2b,0x10,0x1b,0xdd,0x1a,0x50,0x52,0x2d,0xcb,0x0e,0xbe,0x1b,0xf2,0x72,0x30, -0x77,0xd0,0x22,0xba,0x6a,0x76,0x29,0xd8,0x0b,0xee,0xe9,0x92,0x17,0x07,0x4d,0x02, -0x24,0xe7,0x7e,0x09,0xc2,0x13,0x06,0xb3,0x3a,0x3e,0x0d,0x0e,0x07,0x1b,0x46,0x14, -0xc1,0x1e,0x59,0xf6,0x35,0xf7,0x02,0xdf,0x41,0x91,0xc9,0xe0,0x00,0xa0,0xb6,0x3f, -0x46,0x75,0x33,0x6e,0x47,0x1a,0x0f,0x59,0x18,0x06,0x05,0x4b,0x46,0x8f,0x8c,0xa3, -0x07,0x01,0x01,0xe4,0xe8,0xc1,0x05,0x7e,0xec,0x0c,0x59,0xa0,0xb2,0x03,0x82,0x06, -0x81,0xa9,0x13,0x76,0xfc,0x35,0x38,0xb9,0x5a,0x12,0x04,0x68,0x96,0x29,0x1d,0x01, -0xe4,0xbb,0x68,0xeb,0x66,0xc4,0x36,0x02,0xcb,0xd6,0xd4,0xe3,0xe8,0x78,0x0d,0x23, -0x65,0xe6,0xb6,0xe4,0xd3,0xe6,0x5b,0xe4,0xc1,0x5b,0xc8,0x46,0x34,0x56,0xb6,0x3f, -0x1d,0xdb,0xf2,0x02,0xf0,0x2c,0xe6,0xbe,0xe4,0xb8,0x2e,0x0f,0x17,0x41,0xbd,0x08, -0x33,0xde,0x39,0x19,0x07,0x6e,0x01,0x24,0xe7,0x9f,0x08,0xc8,0x34,0x05,0xdd,0x5f, -0x8c,0xb5,0x67,0xc8,0x39,0xe6,0x57,0xb8,0x3f,0xb0,0x1a,0x31,0x64,0x3c,0xee,0x39, -0x4f,0xd8,0x6d,0x08,0xc8,0xcd,0xae,0x0c,0x6d,0x56,0x47,0xd8,0x11,0x5b,0x08,0x54, -0x0d,0x75,0xfd,0xfe,0xdb,0x4e,0x50,0x08,0xce,0x30,0x4d,0x6e,0xa0,0x5a,0xef,0x96, -0x00,0xbc,0xe6,0x03,0xf3,0x8b,0xf5,0x96,0xad,0xdd,0xe7,0x87,0x83,0xa1,0x06,0x15, -0x5b,0x4a,0x16,0xb4,0xc3,0x3c,0x58,0x34,0x0c,0x18,0xff,0xc6,0x46,0xe9,0x3d,0xc6, -0x5c,0x6d,0x83,0xcf,0xe8,0xfe,0x30,0x60,0x3c,0x82,0x17,0x82,0x83,0xfa,0xe9,0x03, -0x9a,0x98,0x3c,0x5c,0x06,0xd5,0x3f,0x5a,0x4e,0x83,0xde,0x55,0x6a,0x82,0x66,0x4d, -0x44,0x00,0xc9,0x3d,0x2a,0x3d,0x4b,0x81,0x43,0x32,0x40,0x50,0xe4,0xf9,0x16,0x2b, -0x44,0xd6,0xd9,0x3e,0x3f,0x34,0xf2,0x48,0xdf,0x70,0xa7,0x1a,0xcd,0xab,0xe0,0x2e, -0x08,0x2e,0x63,0x5b,0x63,0xde,0xdb,0xd1,0xe3,0x01,0x83,0xee,0xbf,0x42,0x34,0xce, -0xe0,0x83,0xfe,0x7f,0x6a,0x7a,0xc7,0xdb,0x30,0x46,0x16,0x3f,0x8a,0x87,0x40,0x34, -0x43,0x55,0x37,0x45,0x75,0xd8,0x61,0x10,0xc8,0x41,0xf6,0x06,0x75,0xc7,0x38,0x03, -0x75,0x4b,0xe1,0xca,0x67,0x0e,0x8b,0x95,0x87,0x52,0x8a,0x1d,0x0a,0xab,0x64,0x18, -0x76,0x50,0x0f,0x57,0xf0,0x1a,0xb8,0x55,0xde,0x96,0x18,0x31,0x59,0x50,0xf0,0x08, -0x8e,0xc0,0x16,0xff,0x2f,0x27,0xd1,0xb9,0x01,0x7e,0xa0,0xeb,0x10,0xb6,0x6e,0xfa, -0xf9,0x3e,0xc7,0x91,0x6b,0xaf,0x13,0x7f,0x81,0x7e,0xfa,0x80,0x00,0x7c,0xea,0xe9, -0xb8,0x5c,0x9d,0x49,0xb5,0x2d,0x30,0x8c,0xb0,0x29,0x07,0x21,0xd8,0x68,0x42,0x39, -0xd3,0xfe,0x9f,0x1d,0x7c,0xed,0x01,0x59,0xa3,0x66,0x67,0x6a,0x06,0xb7,0xa1,0x70, -0xe9,0x65,0xe6,0x01,0xb8,0x72,0xd4,0x4d,0x25,0x38,0xff,0x87,0xe3,0x0b,0xef,0x99, -0x6a,0x43,0x6d,0xaf,0x72,0x10,0xb2,0x09,0x8f,0x3f,0x76,0x09,0x80,0x7d,0x02,0x8e, -0x2d,0xe5,0xd3,0x34,0x01,0xe9,0xd0,0x57,0xfd,0xcb,0xe8,0x79,0x25,0x17,0xa5,0xc4, -0xfe,0x2b,0x7b,0x40,0xb0,0x0c,0x25,0x61,0xa2,0xd3,0x10,0xd4,0x74,0xc0,0x33,0x00, -0xca,0x28,0x5a,0x5e,0x00,0x6c,0x70,0x85,0x2f,0xf0,0xf8,0xb1,0x7b,0xf8,0x33,0x49, -0x0e,0x6d,0x3d,0x51,0x43,0x87,0x37,0x0f,0x2b,0xc6,0x6c,0x14,0xf6,0x5b,0x22,0xf6, -0x33,0xb7,0x19,0x25,0x7d,0x5a,0x03,0xd0,0x81,0xde,0xcb,0x76,0x1c,0xb8,0x7f,0xeb, -0x51,0x14,0x10,0x5b,0xc0,0x7f,0x20,0xce,0x12,0x16,0xb8,0xe9,0x81,0x47,0x71,0x76, -0xf6,0xad,0xba,0x5f,0x5b,0xb5,0xf9,0x9e,0x24,0x92,0xd7,0x20,0x44,0xbe,0x10,0x81, -0xe7,0x68,0x99,0xb1,0x1d,0xa8,0xd6,0x57,0x9f,0x1c,0xb1,0x0c,0x99,0xc9,0xcc,0x63, -0x18,0x67,0xbd,0x7e,0x08,0x71,0x00,0x12,0x0a,0xdb,0xb5,0xf2,0xb0,0xfe,0x4a,0x3d, -0x36,0x2f,0x97,0x30,0x8c,0x7c,0x49,0x94,0x83,0x7f,0xb0,0x2e,0x63,0x1b,0x72,0x4a, -0x0e,0x26,0x42,0x60,0xa7,0x25,0x45,0x8b,0xf8,0xb5,0x91,0xae,0x63,0x04,0x6e,0x0e, -0xf8,0xfe,0xab,0xfc,0x2c,0x35,0xea,0x0c,0x52,0xb8,0xe7,0x01,0x40,0xc3,0xbb,0xfc, -0x1a,0xc1,0xfe,0xfb,0x2d,0x7d,0x05,0xdd,0xb1,0x62,0x01,0xd2,0x66,0x0d,0x61,0xdf, -0x3e,0x46,0x81,0xfe,0x1a,0xdc,0xed,0xe0,0x16,0xbd,0x6a,0x84,0x40,0x36,0xfe,0x0f, -0x00,0x20,0x7c,0xf4,0xdb,0x51,0x1f,0x82,0x5a,0x0e,0xe1,0x44,0x2e,0x0a,0xb3,0xfc, -0x84,0x30,0x5a,0x18,0xd1,0x13,0xf0,0x95,0x01,0xa0,0xa9,0x5b,0x6e,0xc7,0xa2,0x5a, -0x1d,0xd1,0x34,0x6c,0x0c,0xf6,0xf6,0xf4,0x04,0x82,0xd5,0x13,0x4b,0xe8,0xfc,0xe4, -0xe8,0xf8,0x2d,0xef,0x0c,0x3a,0xea,0x00,0xfd,0x59,0xfd,0xa7,0x87,0xc6,0x6d,0xce, -0x4f,0x5b,0x97,0x0d,0x01,0x2d,0x64,0x03,0xd8,0x0a,0x47,0x47,0xdf,0x62,0xfc,0x80, -0x3f,0x30,0x07,0x73,0x6c,0xcb,0x00,0x0a,0x72,0x39,0x76,0xdb,0xc0,0x43,0x3a,0x27, -0xb4,0xaa,0x2d,0x74,0x47,0x63,0x89,0xaa,0x77,0x20,0xfa,0xc6,0x07,0x1e,0x87,0xb5, -0xb1,0x9c,0x1e,0x95,0x8c,0xf8,0x8c,0x8b,0xd2,0xf8,0x37,0xf8,0x1a,0xc2,0x41,0x30, -0xd8,0x50,0x89,0x75,0x83,0x78,0x18,0xe5,0x02,0x6c,0x48,0xf8,0xac,0x17,0x9e,0xf8, -0xe8,0x6b,0x4e,0xf4,0x15,0x14,0xba,0xbb,0x7c,0x4c,0x7a,0xb1,0x7c,0x43,0x61,0x6d, -0x2c,0x88,0x33,0x64,0x0c,0x0f,0xf4,0x88,0x4c,0x60,0xa9,0xaf,0x44,0xa1,0xf7,0x7d, -0x42,0x32,0x73,0x89,0x24,0x6a,0x0c,0x20,0x49,0x89,0xaa,0x9f,0x19,0x46,0xfc,0x89, -0x7e,0xfc,0xe9,0xec,0xfe,0x26,0x89,0x8d,0x5a,0x0d,0xab,0x00,0x82,0xc3,0x10,0x38, -0x1d,0x4e,0x08,0x2c,0x60,0xfe,0xdd,0x56,0x8a,0x05,0x28,0xb6,0x5f,0x4f,0x47,0x83, -0xfe,0x30,0xcb,0x7c,0x0e,0x39,0xa3,0x7f,0xc8,0x42,0x14,0xfe,0xd0,0xff,0x8b,0xd8, -0xeb,0x27,0xde,0x12,0x41,0x7c,0x0c,0x5e,0x5a,0x7f,0x07,0x6a,0xc9,0xdb,0xce,0xeb, -0x10,0x67,0x61,0x91,0x7a,0x96,0xa9,0xda,0xbf,0xe4,0x1c,0x8b,0xa6,0xc3,0xf5,0x85, -0x7c,0x4c,0xa9,0xf2,0x01,0xbe,0xf7,0x6e,0x06,0x03,0xc3,0x1b,0xe3,0x49,0x0b,0xee, -0xc9,0x7f,0xa6,0x0f,0x18,0x08,0x0d,0x06,0x08,0xbd,0x28,0x56,0x0c,0x05,0x8f,0x37, -0xa5,0xbc,0x33,0xc7,0xc4,0x00,0xe1,0x34,0x7f,0x02,0xf9,0xd0,0x47,0xbb,0x7c,0xff, -0x5c,0x14,0xac,0xa1,0x0e,0x10,0x0e,0xb3,0x0e,0x5c,0xa5,0xb9,0xd6,0xfc,0xbb,0x29, -0x25,0x2e,0x8b,0x07,0x00,0xc2,0x58,0xdf,0x4c,0xc3,0x02,0xe2,0xf3,0xff,0xeb,0x55, -0x2e,0xff,0x67,0x12,0xc6,0x04,0xed,0x5c,0xeb,0x7a,0x04,0xe5,0x0a,0xeb,0x75,0xe5, -0x0d,0xeb,0x70,0xe5,0x09,0xeb,0x6b,0xe5,0x0b,0xeb,0x66,0xe5,0x08,0xeb,0x61,0xe5, -0x07,0xeb,0x5c,0x12,0x74,0xc4,0x57,0x8d,0xaa,0x10,0x0f,0x9b,0x01,0x5e,0x57,0x18, -0xc8,0x2c,0x63,0xfa,0xb6,0x0b,0x60,0xfe,0xfa,0x88,0x04,0x46,0x83,0xc7,0x8b,0x00, -0x5b,0x71,0xeb,0xe2,0x2e,0xeb,0x2f,0x46,0xe6,0x08,0xfc,0x28,0xd8,0xfe,0x80,0x7b, -0x03,0xeb,0x4d,0x76,0xd5,0xeb,0x5b,0xdc,0x06,0x9a,0xe1,0x10,0xaf,0x3f,0xc3,0xda, -0x42,0xff,0x64,0x08,0xc9,0x1d,0x5b,0x92,0x61,0xfd,0x00,0x62,0x00,0x66,0x00,0x6e, -0x6b,0x4b,0x1c,0x52,0xd7,0xff,0x00,0x78,0x00,0x95,0x24,0xb3,0x24,0xff,0xae,0x24, -0xb8,0x24,0x9a,0x24,0x9f,0x24,0xf5,0xa4,0x24,0xa9,0x24,0x68,0x3b,0x1e,0x60,0xbe, -0x15,0x35,0x2c,0x3c,0x52,0xbc,0x7f,0x26,0xb8,0x6a,0xdd,0x6a,0x5b,0x13,0x46,0x1d, -0xda,0x83,0xae,0xad,0xa3,0x16,0x66,0x1a,0x0c,0x3f,0x61,0x21,0xb7,0x76,0xbe,0x13, -0x1e,0xb1,0x11,0x01,0x6d,0x83,0x1e,0xb8,0x0c,0x8a,0x07,0x7b,0xac,0xff,0x16,0xb6, -0xff,0x0e,0x14,0x85,0x85,0x80,0x5e,0xc9,0x2c,0x07,0x18,0x05,0x5f,0x09,0xd4,0x80, -0x96,0x49,0x04,0xba,0x9c,0x15,0xcf,0x3e,0xc7,0x06,0x2b,0x4c,0x56,0xa5,0xda,0x54, -0x44,0x0e,0x0b,0xbb,0x50,0xb1,0xeb,0x3b,0x7f,0x70,0x73,0xff,0x59,0x00,0x67,0x5b, -0x7c,0xbb,0x35,0x05,0x0d,0x75,0xbe,0x0a,0x15,0x5d,0x45,0xb2,0xe4,0xfc,0xbb,0x1a, -0x0a,0x74,0x91,0x06,0xb9,0x08,0x35,0x3f,0x3b,0x12,0x46,0x4f,0x6d,0x5c,0x7e,0xc0, -0x13,0x96,0x6c,0xbb,0xc4,0xfb,0x25,0xe2,0xd3,0x56,0xb6,0x2d,0x04,0xe3,0xc4,0x5e, -0x04,0xfe,0x60,0x04,0xa6,0xdd,0xd8,0x75,0xf3,0x9f,0x6d,0x42,0xca,0x04,0x0a,0x29, -0x54,0xad,0xe8,0xbb,0xff,0x59,0xb4,0x02,0x8a,0x56,0x04,0xcd,0x21,0x62,0x19,0xd9, -0xda,0x96,0x77,0x75,0x09,0x78,0xca,0xd6,0xba,0x0c,0x1e,0xd0,0x0f,0x06,0x21,0xc1, -0x88,0x5a,0x17,0xd1,0x08,0x80,0x38,0xda,0x46,0xdb,0xd1,0x33,0xc2,0x57,0xd7,0x4b, -0xb0,0x5b,0x0a,0xda,0x2f,0x6d,0xe7,0x0a,0x2b,0x41,0x0a,0x61,0x06,0x29,0x78,0x24, -0x7c,0x06,0xfd,0x51,0x73,0x1c,0x9a,0x24,0x97,0x33,0xf7,0xda,0xa3,0x1d,0xa8,0xde, -0x2b,0x96,0x8e,0x08,0x59,0x2d,0x77,0x08,0x8b,0x02,0x42,0xf8,0x38,0xb7,0x06,0x0a, -0x99,0xaf,0x52,0x46,0x4f,0x92,0xee,0x82,0x04,0x9b,0x7b,0x98,0x0f,0x0c,0xcd,0xc2, -0x17,0x5a,0xd6,0xd8,0x39,0xfe,0x6f,0x03,0x0b,0xd2,0x77,0xcf,0x85,0x75,0x47,0xe1, -0xc0,0x77,0xc9,0x32,0xe9,0x11,0x27,0xc0,0x4d,0x4f,0x04,0xe3,0x88,0x05,0x47,0x14, -0x1b,0x4e,0xde,0x7d,0x3b,0xc7,0x77,0xe8,0xc0,0x5a,0xac,0x5b,0x06,0x8d,0xd7,0x85, -0x7b,0x25,0x70,0x99,0x96,0xee,0x50,0xd9,0xab,0x37,0xd9,0x99,0x20,0x60,0xb1,0x77, -0xbe,0x08,0xa0,0x36,0xd6,0x24,0x22,0x3c,0x06,0xe8,0x14,0xc8,0x6f,0xaf,0xe8,0xeb, -0xfe,0x59,0xb4,0xa1,0x14,0x1b,0x2c,0x48,0x00,0x64,0xe4,0xc8,0x22,0x3c,0xe9,0x7f, -0x01,0x1d,0x55,0x25,0x1d,0x76,0x6f,0xad,0x01,0xea,0x90,0xf0,0x57,0xf4,0x4d,0x01, -0xf2,0xc1,0x20,0x00,0x5a,0x37,0x03,0x44,0x40,0xf6,0x03,0x46,0x0a,0xf7,0x30,0x75, -0x20,0x14,0x5b,0x30,0xb7,0x18,0x12,0xc8,0x82,0xb8,0x66,0x0d,0xeb,0xf4,0x85,0xba, -0x31,0xc1,0xf7,0xea,0xdd,0x75,0x83,0xc2,0xd0,0xb7,0xe1,0xf4,0x24,0xed,0x72,0x05, -0x04,0x5b,0xed,0xdf,0x6c,0x39,0x6c,0xf9,0xf0,0x01,0x5e,0x2b,0xb8,0xce,0x35,0x11, -0xf8,0x2f,0x7e,0xea,0xb9,0x0a,0x2e,0x23,0x29,0x47,0xea,0x74,0x91,0x08,0xe9,0xe9, -0xea,0x00,0x7f,0xa0,0x14,0x95,0xff,0x16,0xbb,0xa6,0x3f,0xff,0x8b,0xdf,0xff,0x77, -0xfe,0xe9,0xe0,0x00,0xcb,0xb8,0x25,0xe9,0xdf,0xd9,0x00,0x11,0x45,0x8b,0xfe,0x8e, -0x69,0xfc,0x8e,0x47,0x8a,0x2d,0xee,0xdd,0xeb,0x13,0x06,0x08,0xe6,0x00,0xeb,0x0c, -0x96,0x0a,0x05,0x64,0xa3,0x8d,0x3e,0x65,0xf0,0xb6,0x11,0x2a,0x04,0x6e,0x8b,0x55, -0xfc,0xac,0x9b,0xc6,0xed,0x83,0x18,0x1b,0x0b,0x53,0x1f,0x8b,0x47,0xfe,0x99,0xd8, -0xeb,0x0a,0x0a,0x6a,0xd6,0x6a,0x1f,0xc5,0xee,0xc0,0xe8,0x99,0x39,0x5b,0x2e,0x50, -0x46,0x5f,0x7c,0xe8,0xe1,0xfd,0x13,0x93,0x36,0x0f,0x8c,0x14,0xe7,0x30,0x97,0x60, -0xb9,0x3e,0x1d,0x76,0xfd,0x16,0x48,0x29,0x04,0x4e,0x6a,0x01,0xd6,0xfc,0x41,0xb7, -0x12,0xf2,0xe8,0x97,0x97,0xff,0x4e,0x81,0xf4,0x5a,0xf1,0x7f,0xf0,0x6c,0x4f,0xc4, -0xb4,0x26,0xe0,0x45,0xe7,0xdc,0x17,0x35,0x37,0xe3,0x0f,0xac,0xec,0xe7,0x2c,0xe4, -0x6a,0x0e,0x0f,0x8d,0x59,0x74,0x27,0x57,0xc0,0x6c,0xa9,0x50,0xfd,0x0c,0x77,0x16, -0x1f,0x07,0x45,0x48,0x04,0xe2,0x70,0xfe,0x30,0x51,0x42,0x72,0xb7,0xfd,0x58,0x00, -0xfe,0x63,0x00,0x64,0x00,0x69,0x00,0x6f,0x35,0x8a,0xa9,0x4d,0xfb,0xbf,0x18,0x28, -0x26,0x28,0x4d,0x28,0xee,0x1b,0x28,0x38,0x01,0xfb,0x3f,0x28,0x2d,0x28,0x46,0x0d, -0x86,0xf1,0x3c,0xaa,0x0f,0x20,0x52,0x30,0x31,0x13,0xad,0xed,0x0b,0x03,0xb0,0xcb, -0x04,0x40,0x8d,0x56,0xf1,0x6b,0x0c,0x4f,0x42,0xf4,0x3f,0xb4,0x43,0x32,0xc0,0x8b, -0x4f,0x23,0x72,0x88,0x09,0x5b,0xc9,0x89,0x16,0xa0,0xeb,0x97,0xc7,0x0e,0x03,0x60, -0x1c,0xe6,0xb0,0x01,0x02,0xc0,0xdd,0x06,0x1f,0x04,0x67,0x1a,0xf3,0x88,0x02,0x30, -0x09,0xf6,0xb4,0x19,0x16,0xb4,0xa2,0x40,0xa2,0x2c,0x0c,0x1c,0x3a,0x06,0x6f,0x6e, -0xfe,0xca,0xb4,0x0e,0x7b,0x17,0x16,0xc4,0x93,0x97,0xa1,0xb7,0x8a,0x81,0x16,0x88, -0xb8,0x13,0xce,0x2f,0x5e,0xf6,0xa1,0x8c,0x75,0x08,0xf4,0xa2,0x55,0x27,0x52,0xff, -0xf1,0x8b,0xfa,0xbb,0xe0,0x01,0x23,0xda,0xe0,0xb1,0x05,0xd3,0x5f,0xf4,0xe2,0x1f, -0xb9,0x00,0xff,0xfe,0x23,0xcf,0xd1,0xe9,0x86,0xcd,0xf6,0xc6,0xc1,0x03,0x28,0xfe, -0x80,0xfb,0x02,0x76,0x01,0x42,0xef,0xb7,0x9f,0x68,0x13,0x03,0xe2,0xda,0x4b,0x89, -0x6f,0x32,0xc1,0x0a,0x89,0x4e,0x88,0xfa,0x17,0xbb,0xd1,0xe8,0x6f,0x01,0x03,0xd8, -0xb8,0xf7,0x6d,0x01,0xf7,0xe1,0x06,0x70,0xc0,0xa8,0xf7,0x6f,0x8f,0xe0,0xd1,0xd2, -0xff,0x96,0x8b,0xda,0x50,0xb1,0x03,0xd3,0xe8,0xe8,0x88,0x66,0xfe,0x5f,0x40,0xff, -0x00,0x49,0xd2,0xff,0xe8,0xb9,0x3c,0x00,0x86,0xc1,0xf6,0xe4,0xf6,0x03,0xc1,0xb1, -0x3c,0x29,0xfd,0x59,0x83,0xe1,0x1f,0xd1,0xbc,0x2f,0xc1,0x12,0xd6,0x4b,0x8e,0x13, -0xc6,0xd3,0x03,0xc0,0xf4,0x13,0x56,0xf8,0x63,0xba,0x25,0x56,0xfb,0xa4,0x92,0xd3, -0x19,0x07,0xdb,0xc3,0x3a,0x2c,0x76,0x05,0x39,0xe2,0x10,0x0e,0xeb,0x87,0x1d,0xd2, -0x5a,0x58,0x27,0xea,0x83,0xda,0x4e,0x9e,0xc2,0x95,0xa1,0x83,0xed,0x08,0x5d,0xf8, -0x1e,0xc0,0xeb,0x0e,0xa1,0x1e,0x4d,0x42,0x5e,0x78,0xff,0x97,0x55,0x5b,0xb3,0x66, -0xaa,0x50,0xeb,0xab,0xdf,0x64,0x7a,0x16,0xae,0x10,0x37,0x6f,0xd7,0xe8,0xd7,0x98, -0xd6,0x3c,0xee,0x75,0x13,0x2d,0xb7,0x08,0x13,0xb0,0x10,0x6e,0x03,0xb2,0x10,0x9f, -0xab,0xa8,0xd6,0xda,0x59,0x5e,0x4d,0xd7,0x19,0x4c,0x38,0x75,0x08,0x98,0xe1,0xa6, -0xff,0x32,0x14,0x3b,0x98,0x88,0xdd,0x11,0x94,0x33,0x0a,0x98,0x11,0x28,0x5d,0xf2, -0xff,0xc3,0xec,0x0a,0x0b,0x76,0x79,0xff,0x87,0x35,0xb4,0xa1,0x22,0xa2,0xa4,0x76, -0x07,0x17,0x01,0xac,0x5e,0x22,0xba,0xfe,0x59,0xe9,0x4f,0x40,0xd5,0x3c,0x48,0x96, -0x17,0xf1,0x15,0xd6,0x0a,0x40,0x1a,0xca,0x47,0xf6,0x1b,0x1a,0x08,0x36,0xc2,0x00, -0xb6,0x00,0x5e,0x3f,0x0c,0x0c,0x8b,0x97,0x7e,0x0d,0x89,0xd9,0x55,0x02,0x51,0xf2, -0xc5,0x00,0x5f,0xb7,0x1c,0x54,0x99,0x6c,0x1a,0x98,0x63,0x18,0x2e,0x03,0x39,0x01, -0x57,0xff,0x59,0x0e,0x51,0x33,0xc9,0xeb,0xba,0x16,0x06,0xb9,0x3a,0x65,0x0e,0xf9, -0x07,0x02,0x67,0x06,0xb5,0x03,0xd8,0x77,0x4e,0xec,0x8b,0xf9,0x5c,0xf1,0x16,0xe8, -0x0c,0x22,0x50,0x73,0xb1,0xf1,0x10,0x28,0xab,0x55,0x03,0xbf,0xec,0x74,0x69,0x0b, -0xdb,0x74,0xe0,0x65,0xf7,0xc7,0x96,0x70,0x1c,0xdc,0x0d,0x79,0x0a,0x0a,0x46,0x05, -0x4a,0x0d,0x5e,0x83,0xda,0xcf,0x0c,0x1f,0xef,0x0d,0xd9,0xf7,0xdb,0x83,0x96,0xd9, -0xf7,0xd5,0xd5,0x2d,0x9b,0x20,0xa2,0x91,0xb8,0x86,0x3f,0xdb,0xd1,0xd6,0xd1,0xff, -0xd7,0x3b,0xfd,0x72,0x0b,0x77,0x04,0x3b,0xad,0xf3,0x4d,0xff,0x2b,0xf3,0x1b,0xfd, -0x40,0xe2,0xe7,0x5b,0xc1,0xf7,0xc3,0x30,0xae,0x17,0x1f,0x8b,0xd7,0xda,0xd1,0xeb, -0x0b,0x26,0xee,0xb0,0x07,0x4d,0x55,0xd5,0x01,0xca,0xbb,0x0d,0xf7,0xf3,0x66,0x5d, -0x20,0x01,0xa5,0x92,0xd8,0xc2,0xeb,0xed,0xb6,0x72,0x04,0xe2,0x7c,0x15,0xdf,0x5a, -0x58,0x7e,0x03,0xbe,0x8d,0x57,0xa5,0xff,0x36,0x24,0x12,0x8a,0x84,0x26,0x12,0x98, -0x0a,0xe4,0x0d,0x12,0xdb,0xf7,0xde,0x16,0x23,0xc1,0x7f,0xe9,0xb9,0xc5,0x24,0x12, -0x5b,0x19,0x94,0x88,0x00,0xbe,0x79,0xc2,0xd6,0x3f,0x38,0x0a,0x97,0x63,0xbc,0xff, -0x6b,0x69,0x11,0x0c,0x2c,0x2c,0x44,0x8e,0x92,0x25,0x8d,0x48,0x02,0x40,0x58,0x9b, -0x19,0x0a,0x1e,0x83,0x07,0x0d,0xbe,0x83,0xfb,0x24,0x77,0x58,0x3b,0xc0,0x72,0x53, -0x0b,0x00,0x0c,0x6c,0xfa,0x0e,0xbc,0x7d,0x11,0x80,0x76,0x08,0x74,0x0b,0x2d,0xd0, -0xdd,0x2d,0x47,0xe4,0xd8,0x37,0x8d,0x76,0xde,0xfb,0xe3,0x0f,0x91,0x2b,0xd2,0xa6, -0x6d,0x91,0x02,0xf1,0x88,0x14,0x46,0xe3,0x6d,0x5b,0xf1,0xee,0x0d,0x0a,0x43,0xe6, -0x7b,0xf5,0x8d,0x4e,0xde,0x28,0x7c,0x03,0xce,0xfc,0x4e,0x0b,0x2b,0x2c,0xfa,0x0a, -0x73,0x04,0x04,0x3a,0x36,0x46,0x02,0x17,0x78,0xaa,0xe2,0xf8,0xef,0xb0,0x00,0xaa, -0x07,0x61,0x57,0x9c,0x90,0x0c,0x66,0x42,0x0a,0x4d,0xe4,0x0f,0xee,0xb0,0x75,0x02, -0x61,0x52,0xc5,0xdb,0xff,0x1c,0x04,0x3b,0xa7,0x86,0x9d,0xff,0x81,0xa7,0xf6,0x11, -0xff,0xfd,0xb4,0x88,0x42,0x15,0xa6,0xc9,0x0f,0x7e,0x66,0x08,0x0c,0xea,0x2d,0x96, -0x44,0xb0,0xfd,0xe4,0x2a,0x03,0x4e,0xf1,0x39,0xbc,0x0c,0x64,0x49,0xe9,0xcd,0xfe, -0xd9,0x0d,0xea,0x2c,0xfe,0x84,0xbe,0x80,0x56,0xe1,0x63,0x42,0xb1,0xa5,0x1c,0xcb, -0x80,0x12,0x8b,0xab,0xc2,0x87,0xb2,0x22,0x08,0xa2,0xdf,0x4b,0xff,0xb8,0x84,0x12, -0x76,0x0d,0xb6,0x22,0x3a,0x52,0xc6,0x33,0xd9,0x17,0x2f,0xc8,0x02,0x21,0x3d,0x5d, -0xa2,0x83,0xdc,0x3d,0xff,0x39,0x3a,0x22,0x03,0x3a,0xc6,0x01,0xad,0xad,0x74,0x7a, -0x9e,0x2c,0x52,0xf0,0x7b,0x90,0x39,0x70,0x6f,0xfb,0x0f,0x60,0xd7,0x6a,0x3d,0x43, -0x68,0xf6,0x56,0x96,0x92,0x85,0x10,0xd2,0x02,0xdb,0xe1,0xe3,0x05,0x1f,0x69,0xe6, -0xb7,0x6d,0x96,0x09,0xe0,0x03,0xd6,0x5e,0x31,0x3a,0xdb,0x1e,0xc5,0x87,0xc4,0x16, -0x85,0xd6,0xfc,0x2c,0xff,0xf3,0xa5,0x13,0xc9,0xf3,0xa4,0x1f,0x6b,0x34,0xed,0x64, -0x08,0x9c,0xf7,0x87,0xa3,0x19,0xc1,0x70,0x50,0xb7,0x4b,0xb4,0x3f,0x61,0xf2,0x6e, -0xdb,0xc2,0xf1,0xfd,0xb4,0x0c,0x2a,0xa0,0xd9,0xde,0xfc,0xc0,0x74,0x05,0x19,0x50, -0xb5,0x3b,0xf6,0xb1,0x3a,0x20,0xbc,0x47,0xc4,0x3d,0x83,0x2f,0xb8,0x04,0xc3,0x8b, -0x85,0x3d,0xce,0x77,0x08,0x02,0xc3,0x06,0x8a,0xfc,0x16,0x59,0xac,0x80,0x5c,0x79, -0x5e,0x3c,0x4b,0x19,0x5d,0xe0,0x98,0x97,0xff,0xf4,0x09,0xa1,0xd1,0x2f,0x5d,0xb4, -0x7c,0xc5,0x26,0x98,0xbf,0xac,0x78,0x32,0x80,0xbd,0x8a,0x83,0x12,0x0c,0x7f,0x2b, -0x93,0x0a,0xdb,0x78,0x18,0xdf,0x80,0xbf,0x0b,0x11,0x60,0x25,0x7f,0x7f,0xe6,0xe9, -0x4e,0x03,0x75,0x0d,0x53,0xa9,0x0e,0x22,0x40,0xdc,0xfc,0xfa,0xeb,0xb0,0x4b,0xd6, -0x74,0xba,0xac,0x11,0x50,0x43,0xc0,0xe9,0x41,0xb8,0xec,0x3e,0x03,0x98,0x5a,0x6a, -0x79,0xfe,0xc0,0xac,0x98,0x89,0xdb,0x73,0x97,0x5a,0x7c,0x7c,0x19,0x8a,0x9d,0xb8, -0x32,0xff,0xda,0x54,0x15,0xbb,0x31,0x09,0x03,0x15,0x3f,0x59,0xd9,0x32,0x97,0xc1, -0xe9,0x77,0x4b,0x31,0x03,0xff,0x80,0x4e,0xff,0x01,0xeb,0xd4,0x83,0xef,0xc1,0x30, -0x87,0xae,0x8b,0x2b,0x8e,0xca,0x02,0xed,0xf7,0xe7,0x01,0x43,0xdc,0xeb,0xc0,0x19, -0x8d,0x47,0xba,0xba,0x05,0x04,0xad,0xba,0x77,0x0b,0x02,0xeb,0xae,0xfc,0x80,0x66, -0xff,0xdf,0xeb,0xa8,0xdd,0x20,0xeb,0xa2,0x4c,0xbf,0x35,0x6c,0xd8,0xec,0x01,0x74, -0x5c,0x22,0x95,0xbe,0x4f,0x3a,0xbe,0x13,0x38,0x75,0x07,0xbe,0x10,0x0d,0x61,0xf6, -0x4b,0x38,0x20,0x43,0x2f,0x74,0x83,0xff,0x58,0x2b,0xe1,0x40,0xc1,0x23,0xf4,0xfa, -0x00,0xdc,0xc9,0x25,0xff,0x7f,0x2b,0xae,0xd5,0xc4,0x18,0x55,0xc4,0x78,0x6c,0xd3, -0x0e,0x07,0x85,0x6e,0x7e,0x18,0x4c,0x6c,0xf3,0x0f,0xa2,0xde,0xda,0xb7,0xfe,0xab, -0xe8,0x0c,0x04,0x5f,0xbc,0x92,0xab,0xe9,0xc6,0xdb,0xfe,0x7c,0xb4,0x68,0xf4,0x02, -0xe9,0x51,0x02,0x0b,0x38,0xe9,0xd8,0x66,0x02,0xf0,0x1e,0x81,0x66,0xdb,0xea,0x7f, -0x16,0xff,0x75,0x02,0x52,0x3c,0x3a,0x74,0x85,0x15,0x25,0x0a,0x7f,0xc0,0x1f,0xfe, -0x5a,0x8c,0xdb,0xeb,0x1b,0x75,0xb7,0x8b,0x5b,0x1b,0x76,0x10,0x52,0x53,0x1d,0x07, -0x5b,0xb1,0x5a,0x71,0x02,0x67,0xee,0x48,0xfe,0x74,0xbe,0x92,0x72,0x20,0x59,0x93, -0x62,0x53,0xdd,0x28,0xe3,0x01,0x87,0xb2,0xb8,0x6c,0x61,0x23,0x45,0xac,0xc2,0xb1, -0xbc,0x46,0x09,0xb2,0x0c,0x39,0x38,0x8a,0x75,0x98,0xa9,0xdd,0x88,0x29,0xe8,0x05, -0xec,0x42,0xb3,0x46,0xa1,0xcb,0x04,0x0d,0x74,0x0a,0x08,0x1d,0x03,0x08,0x9d,0x00, -0x4d,0xac,0x15,0x77,0x34,0x04,0xe9,0xfa,0xf8,0xfd,0xe8,0x10,0x09,0xe9,0x23,0x32, -0x7f,0x0a,0x09,0x7c,0x9c,0xe9,0x93,0xbf,0x01,0x9a,0x94,0x01,0x63,0x85,0x06,0xe6, -0xe8,0xc2,0xfd,0x63,0xd1,0x74,0xb1,0x29,0x12,0xc3,0x01,0xaa,0xff,0x46,0x06,0x00, -0x0d,0x07,0xd1,0xbf,0x12,0xbc,0x3f,0x78,0x09,0x93,0x63,0x1b,0x93,0xdb,0x7e,0x05, -0xc1,0xf6,0xec,0x7f,0xd7,0x06,0xd0,0x9b,0x07,0xd1,0x98,0x36,0xd3,0x03,0xdf,0x76, -0xe9,0x90,0xfd,0x0b,0x7c,0xe8,0x6c,0xfd,0x6d,0x78,0xf6,0x2c,0x7c,0x7d,0xb0,0x01, -0x5a,0xc6,0xc2,0x50,0xf6,0x7c,0x16,0x67,0x0c,0x4e,0x6b,0x5c,0x2e,0x37,0x81,0x05, -0x2b,0xff,0xfd,0xe9,0xe5,0x00,0x2b,0xc0,0xfc,0x16,0xf8,0x07,0x8d,0x7e,0xd6,0xb9, -0x5e,0xce,0xf3,0xab,0xac,0x1b,0xf7,0xef,0x3c,0xa5,0x5e,0x7c,0x0d,0xca,0x10,0x89, -0xac,0x9d,0x74,0x8a,0xd0,0x68,0xa4,0x9b,0x28,0xef,0xb9,0xff,0x07,0x01,0x22,0xca, -0xd2,0xe5,0x08,0x6b,0xc5,0xd6,0xac,0x4b,0xd0,0x26,0xc4,0x3c,0x5d,0xa8,0x0a,0x6f, -0xdb,0xe1,0x3a,0x14,0x77,0xdd,0xdd,0x80,0x0c,0xd8,0xff,0xac,0x2a,0xc2,0x74,0xe5, -0x02,0xd0,0xd0,0xf7,0xc5,0x83,0xd7,0x00,0x24,0x7a,0xfe,0xc8,0x75,0xf4,0xb7,0x9b, -0xe9,0x9c,0x8e,0x00,0x96,0x62,0xe7,0xe6,0x99,0xa5,0x0d,0xc6,0x6e,0xa5,0x7c,0x50, -0xc8,0x9c,0x62,0x4f,0x5b,0x8f,0xde,0x65,0xa7,0xee,0x97,0xcb,0x84,0x6a,0xe8,0xd6, -0x96,0x93,0x57,0xdc,0x30,0x5a,0x10,0x05,0x2d,0xf2,0x63,0x07,0x09,0x63,0x3e,0xc4, -0xe1,0xaa,0xeb,0xc1,0x07,0x0b,0xdb,0x46,0x3b,0x59,0x7d,0x67,0x1c,0x06,0x70,0xd2, -0x7d,0x10,0x7f,0xfc,0x8c,0x14,0x0c,0x9b,0x11,0x9c,0x17,0xe0,0x33,0x33,0xa4,0x36, -0x35,0x72,0x3e,0x36,0x26,0x5e,0x94,0xc9,0x0d,0x19,0xfc,0x50,0xa9,0xc9,0x79,0x2c, -0x34,0x77,0x13,0x80,0xb5,0xd0,0xb0,0x2a,0xc1,0xbd,0x27,0xe1,0x74,0xf8,0x5b,0x06, -0xbf,0x4b,0x00,0xb9,0x0a,0xec,0x1b,0x87,0x7c,0x45,0xd9,0x52,0x51,0x31,0x7b,0x59, -0x5a,0x33,0xbf,0x35,0xfe,0xc9,0x7c,0x31,0x8a,0xe8,0xe8,0x80,0xed,0xdf,0xbc,0x2a, -0x80,0xfd,0x0a,0xdb,0x72,0x17,0x09,0x11,0xcb,0x72,0x20,0x06,0xcb,0x72,0x0a,0x20, -0xcd,0x72,0x16,0x73,0x02,0xd2,0xfb,0xc5,0x0a,0xd1,0xe2,0x01,0x3f,0x02,0xd5,0xeb, -0xb6,0x0b,0x74,0x80,0x8d,0xf9,0x40,0xb3,0x06,0x60,0xe0,0x59,0xe9,0x5f,0xb3,0x9f, -0xdf,0x46,0x32,0x01,0x30,0xff,0x2f,0x37,0x2f,0x3d,0x2f,0x0f,0x31,0x81,0x97,0x2f, -0x8b,0x2f,0xff,0x4f,0x30,0x51,0x2f,0x5d,0x2f,0x57,0x2f,0xff,0x7c,0x2f,0xb3,0x30, -0x4d,0x31,0x6f,0x2f,0xff,0x86,0x2f,0xe1,0x2f,0x63,0x2f,0x69,0x2f,0xed,0x53,0x80, -0xeb,0x70,0x83,0x22,0x39,0x7b,0x09,0x76,0x12,0x04,0x70,0x2a,0x77,0xa9,0xb1,0x91, -0x40,0xad,0x2e,0x04,0xbf,0x27,0x11,0x0b,0x3a,0xfe,0xd9,0x73,0x07,0x44,0x44,0xf8, -0xb7,0x3b,0x94,0x5b,0xf9,0x56,0xb4,0x4a,0xf5,0x2a,0x86,0xc3,0x35,0x23,0x6c,0x98, -0xfc,0x97,0x68,0xf8,0x98,0x93,0xf6,0xc3,0x80,0x97,0x75,0xbf,0xad,0x0b,0x6f,0x01, -0x0b,0x36,0xe3,0xb7,0x93,0xeb,0x0c,0x7c,0xeb,0x5a,0x3c,0x2b,0xdf,0x43,0xe7,0x6d, -0x16,0xfe,0x38,0x7d,0x0f,0x4a,0x84,0x32,0xf8,0x35,0x2b,0xf6,0x8b,0xb7,0x12,0x4e, -0x0a,0xf0,0xe3,0x4d,0x83,0xf9,0x6f,0xc3,0x2e,0x80,0xf9,0x2d,0x29,0x4d,0xe5,0x6b, -0x6f,0x08,0x10,0x75,0x64,0x7c,0x2e,0x32,0x97,0x3c,0xf5,0x78,0x74,0x51,0x3c,0xbd, -0x21,0x4d,0xeb,0x73,0xc0,0x7a,0x34,0x47,0x54,0x9a,0xec,0x4b,0xa2,0x85,0xfc,0x11, -0xe9,0x99,0xe9,0xa7,0x23,0xad,0x00,0x42,0x00,0xfb,0x49,0x75,0x23,0x42,0xe4,0xef, -0xb7,0x15,0x25,0x63,0x74,0x47,0x04,0xbb,0x75,0x2d,0x0c,0x97,0x7d,0x5d,0x17,0x7d, -0x93,0xfe,0xe8,0xf5,0xfe,0x93,0x72,0xb0,0x96,0xa5,0x2c,0x02,0xf5,0xff,0x66,0x0a, -0x03,0xf0,0x13,0xfa,0x75,0xbe,0x2c,0x39,0x4c,0x4b,0x63,0x25,0xcf,0x2f,0x73,0xdd, -0xeb,0xb7,0x2a,0x24,0xe1,0x97,0xff,0x87,0xca,0xf7,0xe2,0x03,0xf7,0x13,0xc1,0xa1, -0x97,0xdf,0x77,0x75,0x47,0x2b,0xc9,0x20,0x0c,0xa3,0xd6,0xd6,0x9c,0x06,0x2d,0x35, -0x82,0x96,0xd1,0x0e,0x65,0x34,0x81,0xfc,0x62,0x0e,0x17,0x97,0x01,0x1d,0x68,0x07, -0xae,0x0d,0xc5,0x89,0x1d,0xa3,0xda,0x5d,0xa3,0xba,0xe6,0x61,0x02,0x60,0x7e,0x80, -0xd4,0x00,0x83,0xd2,0x70,0x74,0xbd,0xd8,0x3a,0xd5,0x92,0x07,0x6d,0x8c,0x01,0xf6, -0x4c,0x02,0x8c,0x54,0x05,0xf4,0x5c,0x06,0x5e,0x20,0x47,0xce,0x01,0x86,0x43,0xe5, -0x8b,0x0d,0x8b,0x12,0x4f,0x5e,0x7d,0xf7,0x86,0x47,0x83,0xba,0x91,0x7f,0x3b,0x16, -0xf4,0x11,0x73,0x2b,0x46,0xab,0x83,0xa6,0x66,0xc7,0x0a,0x2f,0xd4,0x09,0x56,0x82, -0xf4,0xe3,0xc6,0x87,0x68,0x70,0x97,0x0c,0xc2,0xd3,0xed,0xe0,0x05,0xb4,0x7d,0xc4, -0xda,0xd3,0x2f,0x75,0xc2,0x10,0x42,0x7f,0x2a,0x72,0xd5,0xa0,0x6d,0x19,0x98,0xb1, -0x3e,0x89,0x13,0x7f,0xfb,0x06,0x81,0x26,0xb6,0x27,0x62,0xfd,0xdf,0x7e,0x02,0x50, -0xf7,0x06,0x6b,0x09,0x06,0x57,0xa4,0x49,0x01,0xb8,0x02,0x10,0xf1,0x6f,0x1e,0x03, -0x84,0x6f,0xa0,0xc8,0x33,0x90,0x55,0xe4,0xc6,0x99,0xc6,0x39,0x02,0x2e,0xc4,0x6c, -0xea,0x16,0xc8,0xcb,0x7d,0x46,0x90,0x7b,0xc2,0xf7,0x14,0x98,0xd3,0x8b,0x17,0xb1, -0x83,0xfa,0x38,0xbc,0x6e,0xe4,0x1a,0x8a,0xc2,0x88,0xc1,0x91,0xa5,0x08,0xc0,0x7e, -0x0c,0x05,0xe0,0xd9,0x15,0x04,0xc5,0x9c,0x45,0x41,0x84,0xb5,0xe2,0x02,0xed,0x1c, -0x04,0x07,0x81,0x62,0x94,0x1b,0xb6,0xd1,0x40,0x2f,0xae,0x02,0x54,0xe2,0x8d,0x10, -0x9b,0x63,0xc7,0x03,0x44,0x20,0x3b,0xa3,0x96,0xbd,0x8b,0xd4,0x81,0xea,0xb8,0xa0, -0x3b,0xc2,0xda,0xe8,0xa3,0xd7,0x67,0x41,0x50,0x09,0xa3,0x8f,0x3c,0x68,0x08,0x76, -0x8b,0x21,0x48,0x5e,0xbd,0x03,0x06,0x9c,0x1f,0x8e,0x8b,0xc8,0x17,0x8a,0x76,0x10, -0x81,0xc1,0x2f,0xa5,0x93,0xfb,0x3b,0xcc,0x73,0x06,0x87,0x16,0x99,0x30,0x1b,0xc7, -0xfb,0xa4,0xff,0x59,0x3c,0x0c,0x12,0x7d,0x83,0x9c,0x5a,0x0e,0xee,0x0f,0xba,0x0c, -0x13,0x97,0x58,0xba,0x11,0xc2,0x13,0xb9,0x90,0xa2,0xb3,0x08,0xfd,0xb9,0x27,0x00, -0xba,0x16,0x13,0xad,0x0c,0x09,0xe9,0xe9,0xeb,0xcb,0x5c,0x1a,0x08,0x03,0x52,0xea, -0x15,0x57,0x26,0x07,0x83,0x3d,0x06,0x07,0x29,0x48,0x90,0x61,0xc2,0xe3,0x1e,0x8b, -0x60,0xa8,0x34,0x85,0x93,0x04,0xcd,0x3a,0x01,0xa1,0x5c,0x13,0x6d,0x4c,0x05,0xb6, -0x54,0x0d,0x7c,0x85,0x65,0x5b,0xe4,0x1f,0xd4,0x07,0x55,0xdf,0x26,0x9c,0x9c,0x56, -0x1e,0x06,0x8d,0x8e,0x4f,0x77,0x29,0x8f,0x04,0x8f,0x9a,0x44,0x06,0xdb,0x05,0x08, -0x02,0x65,0x0e,0x06,0x85,0xfb,0x64,0x0c,0x01,0x89,0x2b,0x6d,0x89,0x31,0xb6,0x89, -0x37,0x89,0xde,0x3d,0x89,0x04,0x1f,0x0a,0xd0,0xd9,0x06,0xc3,0xe1,0xf5,0x58,0x12, -0x0f,0x56,0x08,0xc1,0xb4,0x44,0xb1,0xa6,0x06,0x63,0xc1,0x0a,0x53,0x9c,0xab,0x4f, -0x16,0x0c,0xd4,0xc2,0xa1,0x68,0x5e,0xf2,0x28,0xf5,0x86,0x5b,0xb7,0xf4,0x7a,0x06, -0x83,0x6f,0x0f,0x72,0x0e,0x3b,0xe1,0x1e,0x40,0x13,0xde,0x74,0xe8,0x42,0x36,0x64, -0xe8,0x03,0xa0,0x6e,0xbe,0x39,0x1e,0x3e,0xdf,0x10,0x23,0x8b,0x77,0x02,0xc4,0xf6, -0x04,0xad,0xe9,0x66,0xb7,0x36,0x1e,0xeb,0x20,0xdc,0x3b,0x36,0x13,0x29,0xc6,0x70, -0xe8,0x54,0xbd,0x43,0x47,0x02,0xa3,0xce,0x12,0x0c,0x0b,0x6c,0xa3,0x6b,0x15,0x0b, -0xbf,0xa3,0x42,0x13,0x53,0xe8,0x71,0xfd,0xfe,0x5b,0xc3,0xff,0x0f,0x3b,0xf3,0x3b, -0x18,0x36,0xda,0xa8,0x26,0xd9,0xdb,0x03,0x07,0x9f,0x8b,0xf1,0x3f,0x03,0xfb,0x89, -0x2b,0xad,0x2e,0x5d,0x5f,0x32,0xbd,0x00,0x0d,0x0a,0xc6,0xd5,0x1b,0x2e,0x62,0xc3, -0x01,0x05,0x78,0xa5,0xf7,0xa7,0x70,0xc3,0x25,0x49,0xd4,0x7f,0x06,0x0b,0xa2,0x0e, -0xda,0x89,0x3e,0x49,0xd6,0x3b,0xd6,0xb5,0xac,0xb1,0xe2,0x06,0x5b,0x1a,0x42,0x97, -0x13,0x8b,0x36,0x6a,0x06,0x05,0xbf,0x1a,0xe2,0xd6,0x12,0x2b,0xb6,0x02,0x5d,0xd6, -0x1b,0x2c,0xfe,0x89,0x77,0x04,0xc3,0x89,0x1e,0x5c,0x89,0x5f,0xbb,0x5f,0x06,0xce, -0x30,0xa8,0x27,0xee,0x0c,0x52,0x05,0x05,0xab,0x6c,0x62,0x25,0x5d,0x9a,0x3d,0x08, -0x52,0xaa,0x89,0x8c,0xbb,0x83,0x3e,0x3e,0x44,0x7c,0x74,0x1f,0x8b,0x1e,0xd7,0xdb, -0xc1,0x75,0xd3,0x39,0x07,0x4a,0xf3,0xdd,0x33,0x3b,0xda,0x4b,0x2e,0xe8,0xb7,0x66, -0xf3,0x21,0xe8,0xb7,0x8a,0x04,0x1c,0xe8,0xae,0x1c,0x44,0x1d,0x3b,0x13,0x45,0x2f, -0x6d,0xc6,0x08,0x39,0xf8,0x37,0x73,0xe9,0xe8,0x6b,0xd6,0x0e,0x9f,0xf0,0xc3,0x05, -0x04,0xe3,0x11,0xdf,0x1f,0xe8,0xb1,0xfd,0x5b,0xc4,0x5b,0x25,0xd5,0x52,0x09,0x6d, -0x1b,0x52,0xb3,0x0d,0xa3,0x5b,0x58,0x18,0xdb,0xb6,0x53,0x0a,0x98,0x6a,0x3d,0x29, -0x66,0x63,0x14,0xe3,0x5b,0x94,0x3e,0x28,0x6e,0x50,0x58,0x40,0x89,0x2b,0x13,0x5b, -0xfb,0xc3,0xdb,0xc3,0x5b,0x3b,0xc3,0x67,0x26,0x71,0x20,0xcb,0x16,0xa1,0x6c,0x21, -0x89,0x2b,0x46,0x28,0x0b,0x9a,0x58,0x29,0xde,0x72,0xf3,0x03,0x37,0x05,0x4d,0xda, -0x03,0xf8,0x16,0x1c,0xdd,0x33,0x37,0x8f,0x5b,0x1c,0xc6,0x51,0x2b,0x52,0x40,0x63, -0x51,0x58,0xb6,0xff,0x5b,0x3c,0xba,0xe6,0x1f,0x8d,0x63,0x88,0xfc,0xd8,0x35,0x76, -0x16,0x76,0x0c,0xef,0x1f,0x56,0x83,0xe9,0x05,0x47,0xd6,0x80,0x1a,0x8f,0x24,0x14, -0x86,0x28,0xf8,0xae,0x26,0x6e,0x32,0xc2,0x83,0x8d,0xdf,0xfc,0x3b,0xd1,0x77,0x35, -0x8b,0xd1,0x38,0xe2,0x56,0x8c,0x68,0xb7,0xd1,0x03,0xc3,0x76,0x88,0xc6,0xfc,0x58, -0xeb,0xdb,0x87,0xfb,0x65,0x42,0x4d,0xfc,0x02,0x2b,0xd0,0x29,0x17,0x34,0x87,0xf2, -0x2f,0x71,0x02,0x42,0x89,0xe1,0x15,0x8b,0xcb,0x8c,0x76,0xe8,0x37,0x56,0xdc,0xd9, -0x93,0x19,0x56,0x48,0x1d,0xd5,0x08,0xc0,0x39,0x26,0xca,0x0d,0x3f,0x2d,0x1d,0x31, -0x8b,0xe2,0x0f,0x49,0x8b,0x17,0xa8,0x05,0x83,0xb7,0xe2,0x66,0xfa,0x08,0x0b,0x64, -0xba,0x2e,0x3b,0xca,0x34,0x64,0x1a,0x78,0xed,0x32,0xeb,0x08,0x2c,0xbd,0xff,0x36, -0xe7,0x4f,0xff,0xd1,0xd0,0xa2,0x21,0x85,0x1b,0x8d,0xfe,0x73,0x1a,0x1a,0x2d,0x99, -0x6e,0xda,0x5b,0x5d,0x1b,0x47,0xff,0x26,0xdb,0x9c,0x13,0x03,0x9e,0x34,0xa0,0x37, -0xd9,0x8f,0x06,0x48,0xb6,0x13,0x03,0x4a,0x6f,0x4c,0x13,0x2e,0x8c,0xe3,0x1e,0xbc, -0x39,0x6a,0x61,0x4e,0x16,0x7e,0x3e,0x50,0x13,0xfc,0x8e,0xa8,0x55,0xbe,0x6f,0x39, -0x00,0x32,0xe4,0xff,0x26,0xac,0x40,0x8c,0xc5,0x87,0xd6,0x93,0x1a,0x03,0x17,0xa5, -0x46,0x46,0x01,0xaa,0x33,0x84,0x1b,0x6d,0x11,0x20,0x8d,0x8c,0x49,0xfa,0xfe,0xb1, -0x7f,0x32,0xc0,0xa1,0xce,0x7a,0x6e,0x80,0xf1,0x37,0x5f,0x8b,0xc1,0x6c,0xda,0x40, -0x34,0xf7,0x8b,0x1b,0x40,0xf8,0xfc,0x72,0x5c,0x8b,0xe7,0x06,0x1f,0x5b,0xcc,0x51, -0xa9,0x49,0xe6,0x5b,0x21,0xaa,0xfd,0x8e,0xdd,0x87,0xf2,0x87,0xd9,0xad,0x90,0xb5, -0xff,0x43,0xe8,0x19,0x00,0x77,0x07,0x72,0x40,0xdb,0xe8,0x12,0x06,0xf9,0xd2,0x3c, -0x20,0x6f,0xe0,0x3c,0x0d,0xec,0x46,0x09,0x75,0x68,0x97,0x5b,0xfa,0xe4,0xe2,0xbd, -0x07,0x42,0xaa,0x0a,0x6f,0xfc,0x01,0x43,0x86,0xb7,0xe0,0x10,0xf9,0xe3,0xff,0x15, -0xac,0x49,0x2c,0x22,0x74,0x0f,0x04,0xe0,0x22,0x3c,0x5c,0x2d,0x79,0xc2,0x3c,0x22, -0x8b,0xb4,0x10,0x6f,0x88,0xc3,0xe9,0x00,0xfd,0xc8,0x59,0x03,0xca,0x2e,0x8e,0xff, -0xb0,0x1e,0x44,0x13,0x43,0x03,0x8e,0xdb,0x7c,0xfa,0xec,0x2b,0xeb,0x72,0xe6,0x5f, -0xe3,0x89,0x2e,0x46,0x13,0x8d,0xe3,0xc6,0x8d,0x76,0x76,0xea,0xc5,0x02,0x36,0x6f, -0xfb,0xe0,0xfa,0x74,0xf0,0x68,0xfb,0x5b,0x97,0x00,0x2e,0x1b,0x8b,0xdf,0xa6,0x8b, -0xee,0xff,0x36,0x4c,0x03,0x6d,0xf8,0xa1,0xbe,0x3d,0xa3,0x84,0x00,0xa1,0xd8,0x32, -0xa3,0xba,0x7d,0x26,0x14,0x0c,0x72,0xc6,0xa3,0x8d,0x78,0x51,0xe8,0x2f,0x85,0xcf, -0x10,0xd8,0xc7,0x22,0x1e,0x56,0xe6,0x37,0xb5,0xe9,0x4b,0x5b,0xfc,0x57,0xaf,0x36, -0x12,0x06,0xdf,0x34,0x8e,0x00,0xe8,0x11,0x8e,0xfd,0x03,0x5b,0xeb,0x52,0xa2,0x13, -0x71,0xd8,0x2b,0x47,0x5f,0x63,0xb9,0x54,0x50,0x37,0xf4,0x0c,0x89,0x3f,0x14,0xa1, -0x07,0x10,0x55,0x1d,0xdc,0xf4,0x0a,0xec,0x16,0x6f,0xa1,0xdc,0x23,0xa3,0x88,0x17, -0x7d,0x8e,0xbf,0x14,0xd3,0xee,0xa1,0x40,0xd0,0xc8,0x97,0xda,0x16,0xf7,0xd5,0x20, -0x7f,0xee,0xf7,0xc2,0x01,0x5c,0x1a,0x04,0x35,0x39,0x05,0x24,0x3b,0xfa,0x30,0x44, -0xe2,0x8c,0x94,0x68,0x5a,0x3d,0x2e,0x0d,0xe2,0x8a,0x1c,0x46,0xf8,0x10,0xf8,0x09, -0x34,0x45,0xb6,0x59,0x2b,0x39,0xb6,0x04,0x2d,0xdb,0x38,0x45,0x15,0x9b,0x08,0x39, -0x13,0xf4,0x65,0xeb,0x30,0x10,0xb1,0x5a,0xc3,0x2e,0x4a,0x74,0xeb,0x0a,0x5b,0xe5, -0xfa,0x36,0x84,0xf2,0x61,0xd1,0xed,0x92,0x97,0x15,0xd8,0x13,0xd1,0x28,0x33,0x05, -0x78,0x73,0xe1,0x4d,0x7c,0x90,0x40,0xc7,0x15,0x01,0x74,0x26,0x87,0x43,0xad,0x4e, -0xc0,0x9c,0x43,0x18,0x14,0xeb,0x03,0x91,0xb4,0xf0,0x73,0xf0,0x61,0x55,0x83,0xe0, -0x18,0x09,0xa1,0xca,0xb1,0xe8,0x5e,0x4a,0x07,0x24,0x14,0xba,0x52,0xe6,0xbd,0x40, -0x78,0xb4,0x3e,0x2c,0x95,0xd8,0x1a,0x6e,0xdf,0x74,0x43,0x2f,0xe8,0x3c,0x92,0x6b, -0xd0,0x46,0x66,0x06,0x9f,0x06,0xeb,0x5b,0x01,0x86,0x00,0x24,0x1b,0x38,0x4c,0x24, -0xab,0x1f,0x72,0x3e,0xf6,0xc2,0x42,0x0c,0xdb,0x35,0x13,0x42,0x01,0x6d,0x58,0xd1, -0xd8,0x0f,0x2e,0x52,0x09,0x62,0x58,0x0c,0x28,0x15,0x88,0x02,0x8e,0xfb,0x5a,0x59, -0x72,0x19,0x2e,0x6e,0x42,0x1b,0xda,0x12,0x3b,0x0d,0xd0,0x99,0x13,0x0b,0x40,0xfc, -0x6d,0x32,0xb7,0x9e,0x74,0xba,0xef,0xab,0xbc,0x2e,0x04,0x89,0x5f,0x7f,0x39,0x7d, -0x0e,0x75,0x5f,0x83,0x82,0x7d,0x5c,0xd8,0x1c,0x83,0x2a,0xb4,0x36,0xb2,0x57,0x20, -0x51,0xab,0x3f,0x72,0x4b,0xf7,0x45,0x82,0x02,0xe1,0x8e,0x2a,0x33,0x5f,0x43,0x5f, -0xfa,0x59,0x80,0xd1,0x7d,0x04,0x36,0xe2,0x45,0x04,0x26,0x93,0x52,0xf7,0x89,0x00, -0xad,0xc7,0x1e,0x43,0xaf,0x6a,0x45,0x06,0x2c,0xb6,0x6d,0xc6,0x18,0xb6,0xff,0x44, -0x0c,0x5a,0x14,0xf5,0x9a,0x1b,0x45,0xe8,0x80,0x86,0x16,0x2b,0xb2,0x8d,0xa1,0x6b, -0x21,0x14,0x54,0x5e,0x5a,0xcb,0x74,0x51,0xa0,0x64,0x59,0xde,0xce,0x6e,0x66,0x7a, -0x00,0x23,0xfd,0x5e,0x76,0x79,0x7c,0x29,0xe8,0x70,0x08,0x81,0x36,0x44,0xa0,0x4d, -0x6f,0x33,0x39,0x45,0x0a,0x75,0xbd,0x46,0x58,0x93,0x0d,0x38,0xf6,0x8b,0x45,0x08, -0x89,0x07,0x85,0xae,0x51,0x2b,0x1b,0x75,0x7b,0x03,0x05,0x40,0x82,0x7b,0x29,0x35, -0x50,0x14,0x3b,0x50,0x97,0x3a,0x6b,0x0b,0x7a,0xb0,0x3b,0xc6,0x2b,0x55,0x49,0x82, -0x3a,0x8b,0x34,0x7f,0x83,0x4d,0x02,0x10,0xeb,0x9f,0x54,0x21,0xfd,0xf0,0x1e,0xb4, -0x2f,0xa9,0x15,0xfe,0x70,0xb4,0x1a,0x4f,0x45,0xb4,0x86,0x4e,0xd7,0x08,0xd2,0xf6, -0x9c,0x59,0x93,0x13,0xed,0x5a,0x1f,0x08,0xe2,0x51,0x9d,0x1f,0x4d,0xf3,0x6e,0x22, -0x93,0xee,0xc8,0x32,0xe6,0x04,0xb0,0x4f,0x2c,0x2e,0x66,0x4c,0x17,0x2b,0xa2,0xf4, -0x55,0xa1,0x54,0xcc,0x76,0xbe,0xb4,0x7b,0xf8,0x12,0xf7,0x44,0x02,0x0b,0xd6,0x7c, -0x08,0x56,0xe8,0x02,0x2d,0x32,0xff,0x52,0xcf,0x8b,0xba,0x5b,0xcf,0x4f,0x0d,0x5c, -0xe7,0x45,0x96,0x0d,0x38,0x6b,0x06,0x31,0xc0,0x0a,0x24,0xdd,0xd0,0x7a,0x0b,0x78, -0x0a,0x65,0x51,0x89,0x75,0x99,0x54,0xa0,0x51,0x52,0xbc,0xf5,0xc1,0x3c,0x72,0x2a, -0x90,0xa3,0x24,0x63,0xbf,0x16,0x94,0xb8,0xcb,0xf9,0x77,0x5b,0x4a,0xba,0x62,0x56, -0xe6,0xb7,0x09,0x61,0x75,0x96,0x0d,0x09,0xeb,0x29,0x80,0x1b,0x65,0x02,0x7f,0x9a, -0x69,0x8a,0x0c,0xb5,0x46,0x18,0x2d,0x1b,0x0f,0x6f,0x2c,0x2b,0x75,0x1f,0x6c,0x09, -0x74,0x2b,0x6d,0x04,0x7b,0x62,0x75,0x15,0x13,0x96,0x3b,0xb4,0x1b,0x0b,0x30,0xfc, -0xef,0x83,0xca,0x04,0x31,0xda,0x01,0xbf,0xa5,0xe4,0x1e,0x35,0x66,0xca,0x44,0xb7, -0xad,0x1d,0x24,0xbd,0x0a,0x2f,0x1b,0x0f,0xa1,0x1e,0xfc,0x12,0x25,0x00,0xc0,0x0b, -0xd0,0x0b,0xbc,0xa9,0x6f,0x0e,0x74,0x03,0x83,0xd2,0xcf,0x40,0x97,0xfa,0xb0,0x10, -0x2a,0x59,0x06,0x6c,0x8e,0x17,0x92,0x72,0xc7,0x55,0xd9,0x56,0x32,0x62,0x1d,0x31, -0x43,0x61,0xdf,0x8b,0xce,0x06,0x10,0xc0,0x15,0x0f,0x10,0x16,0x5d,0xc2,0x89,0x07, -0xae,0x3f,0x6c,0xaf,0x7c,0x6e,0x44,0x7d,0x27,0x2b,0xa6,0x5d,0x36,0x0b,0x1a,0xf3, -0x22,0xfc,0x2b,0xd5,0x07,0x37,0xb4,0x88,0x44,0x04,0x5b,0x9c,0x7d,0xdb,0x0d,0xc6, -0x06,0xff,0xb5,0xc7,0x2a,0x23,0x20,0x41,0x51,0x2a,0xc0,0x1e,0xff,0xed,0x21,0x53, -0xb8,0x05,0x81,0x4c,0x64,0xd1,0x22,0xfe,0xe4,0x1e,0x61,0x31,0x61,0x5c,0x74,0xef, -0x0c,0x30,0xe5,0x1d,0x2e,0xb5,0x0a,0x25,0xbb,0xaa,0xeb,0xc2,0x42,0x46,0x73,0x2c, -0x93,0x46,0x51,0xc3,0x56,0x89,0x3e,0x78,0x7c,0xb4,0xdf,0x2a,0x95,0x39,0xa7,0x18, -0x9e,0xc3,0xd6,0x8a,0x21,0xa2,0x76,0x77,0xe7,0x18,0x21,0x2b,0xee,0x02,0x2f,0x0e, -0x72,0xa5,0x8f,0xad,0xff,0x91,0x0c,0xa1,0xfa,0x13,0x0d,0x05,0x54,0x43,0xf1,0x8a, -0xea,0xad,0x24,0xc3,0x87,0xa2,0xe9,0x94,0x63,0x59,0xcc,0xc6,0x47,0x6b,0xb7,0x08, -0x76,0x05,0x50,0xb6,0x4c,0xeb,0x0f,0x08,0x99,0x02,0xb1,0x07,0xf7,0x2c,0x48,0x40, -0x41,0xba,0x92,0x83,0x7f,0x6b,0x52,0x5b,0x24,0x3e,0x73,0x53,0x83,0x89,0x37,0x6a, -0x4e,0x56,0xb0,0x4a,0x8d,0xec,0xba,0x0c,0x23,0x03,0xd7,0x1c,0x19,0x58,0x29,0x47, -0x1e,0xe9,0x57,0x1b,0x0d,0x8a,0x47,0x7e,0xf3,0xfa,0xed,0x87,0xa0,0xd0,0xd0,0x01, -0xa0,0x38,0x03,0x00,0x61,0x4b,0x5d,0x60,0x2b,0x56,0x14,0x29,0x3f,0x83,0x4f,0x02, -0x20,0xeb,0x5d,0x08,0x08,0xd4,0x88,0x17,0x2b,0xa8,0x4d,0x9c,0x7a,0xef,0xf6,0x24, -0x4f,0x74,0x21,0x70,0x1d,0xb6,0xec,0x7c,0xd8,0x5a,0x77,0x5d,0x78,0x47,0x0a,0x17, -0x99,0x63,0xeb,0x07,0x4a,0xf0,0xdb,0x03,0x30,0x5f,0x9b,0xe3,0x75,0xca,0x03,0x64, -0xd0,0xbc,0xe8,0x78,0x97,0x8d,0x3e,0xff,0x72,0x38,0x60,0x14,0x81,0xb0,0xaa,0x9a, -0x14,0x36,0x34,0x62,0x15,0xd2,0xaf,0x08,0xea,0x44,0xed,0x11,0xd9,0x6e,0x36,0x01, -0x77,0x39,0xe7,0xb8,0x65,0x73,0x19,0x46,0x0b,0xfc,0x3b,0xa9,0xe8,0xf6,0xa5,0xfe, -0x0e,0x02,0x8a,0xed,0xd0,0x52,0x27,0xe1,0x58,0xf7,0xf6,0x86,0xc0,0x02,0xf1,0x5a, -0xad,0xb4,0x85,0x3c,0xe3,0xa3,0x0a,0x41,0xb8,0x03,0x14,0x42,0x17,0x76,0xeb,0x0b, -0x42,0x78,0xf6,0x99,0x33,0xc2,0xc1,0xb4,0x86,0x28,0x1c,0x60,0xbb,0xba,0x19,0x75, -0x2c,0x36,0x60,0x0a,0xf5,0x23,0x6e,0x9c,0x09,0x49,0xaa,0xe4,0xd4,0xb8,0xda,0x01, -0x47,0xd8,0x5e,0x4a,0x64,0x73,0x5a,0x73,0xdb,0x10,0x41,0x11,0x09,0x1e,0x5a,0x2b, -0xaf,0x35,0x09,0xdc,0xc2,0x0a,0xe4,0xe3,0xb5,0xfb,0x13,0x15,0xf8,0x39,0x47,0x83, -0x86,0x3e,0x76,0x4e,0x7e,0x0b,0xde,0x17,0x7c,0xff,0x99,0x1a,0x52,0x19,0x17,0x36, -0x81,0x64,0xe0,0x02,0x5f,0xfe,0x01,0x51,0x90,0xab,0x84,0x1e,0x7a,0x44,0x0a,0x57, -0x4c,0x5b,0x67,0x50,0xaf,0x8e,0xeb,0x2c,0x57,0x0a,0xc3,0x0a,0x17,0xb1,0x44,0xac, -0x02,0x22,0x90,0x9d,0x0b,0x04,0x9f,0x29,0xb2,0xf3,0x59,0x08,0x04,0x6e,0x28,0x43, -0x29,0xdf,0x1d,0xb7,0x0d,0x6c,0x68,0x13,0xb6,0x01,0x16,0xdb,0x11,0x1c,0xeb,0x74, -0x75,0x06,0xf2,0xfc,0x86,0x14,0x6b,0x02,0x08,0x42,0x0b,0x18,0x1b,0xd3,0x3d,0x5c, -0x0a,0x6d,0xdb,0x37,0x2f,0xf2,0x46,0xae,0x1b,0xc9,0xc0,0x4f,0xea,0x08,0x2c,0xa1, -0x1d,0x31,0xd5,0x80,0xf5,0x99,0xe6,0xc0,0xe8,0x26,0xe4,0xda,0x5e,0x01,0xdd,0xdd, -0xa4,0x05,0x98,0x59,0x99,0xc0,0x0c,0xa0,0x8f,0x5f,0x73,0x01,0x3a,0x75,0x16,0x72, -0x11,0x85,0xb4,0x6c,0x8e,0x39,0xbd,0x05,0xc0,0xff,0x16,0x82,0x80,0x1a,0x8a,0x12, -0xa4,0xd7,0x7c,0x35,0xe7,0x59,0x8b,0xbe,0x05,0x41,0x00,0x48,0xe7,0x21,0x27,0x22, -0x67,0x60,0x4c,0x5e,0x3c,0x5b,0x8b,0x0f,0xea,0xf8,0x15,0x0a,0x44,0x8c,0xed,0x09, -0x04,0xda,0xd6,0x97,0xf4,0x5b,0x1d,0x96,0x08,0xfb,0xd1,0x0e,0x59,0xad,0xa1,0x03, -0x93,0x6d,0xf2,0xea,0xba,0xff,0x36,0x4e,0x70,0x07,0x29,0xd0,0x0c,0xc0,0xc4,0x04, -0xc8,0x6a,0xc6,0xad,0x6f,0xb6,0x57,0xde,0x44,0xda,0x2a,0x59,0x1d,0xd8,0xbe,0x01, -0xdf,0x47,0x8a,0x07,0xe8,0x8a,0xfc,0x6b,0x7b,0x08,0x32,0x66,0x1b,0xd2,0x74,0x6b, -0x3f,0xfb,0xff,0x2e,0x75,0x11,0x44,0x66,0xfe,0x68,0x62,0x7d,0x95,0x83,0xee,0xb6, -0x9d,0x32,0x16,0x36,0x2c,0x1c,0xcb,0xfe,0x26,0x2c,0xfd,0xd9,0xec,0xfe,0xa5,0x1a, -0xb9,0x03,0x1a,0xaa,0xd4,0x94,0x98,0x68,0xbe,0xd7,0x6d,0x4f,0x36,0x19,0xd2,0x78, -0xf2,0x2d,0xfc,0x44,0xac,0x4d,0x8d,0xef,0xc0,0x11,0xd8,0x01,0x4e,0x29,0xdc,0x04, -0x94,0xe0,0x8a,0x0a,0x15,0xd9,0x95,0xfc,0x85,0x6b,0x31,0xc0,0xe5,0x10,0x8d,0x40, -0x52,0x01,0x3e,0x1f,0x1f,0x3b,0x14,0xf0,0x56,0x54,0xde,0x1e,0x17,0x3f,0xf3,0x93, -0x0d,0x6b,0xb0,0x22,0xe1,0xaa,0x2f,0x43,0x83,0x36,0x37,0x52,0xfd,0x0c,0xc3,0xf5, -0xab,0x14,0xa4,0xc0,0x19,0x04,0x0a,0x0d,0x13,0x05,0x34,0xab,0x30,0x63,0xf9,0xc7, -0x1d,0xf8,0x4b,0x92,0xea,0xe4,0x18,0x64,0x12,0xbd,0x0f,0x06,0xa3,0x21,0xf1,0x36, -0x4b,0x6d,0x45,0xe0,0xbf,0x14,0x00,0x7c,0xe8,0x13,0x8b,0xa0,0x5d,0x27,0x03,0x3d, -0xa1,0x02,0xc9,0x42,0x32,0xf0,0x15,0xf9,0x59,0x24,0xe9,0xda,0xe6,0x29,0x09,0x67, -0x05,0x66,0xba,0x8d,0x8c,0x80,0xc8,0x26,0x01,0x19,0x99,0xc6,0x50,0x69,0x70,0x48, -0x3d,0x03,0x89,0xcd,0x6c,0x90,0x8d,0x83,0xba,0xae,0xdf,0x7a,0x8e,0x1e,0x69,0xdf, -0x75,0x0e,0x55,0x7f,0xd5,0xfe,0x0d,0x5a,0x8b,0xd0,0x08,0x28,0xe3,0xf8,0xd0,0x83, -0x16,0x07,0x10,0x89,0xd5,0x0b,0xa2,0xff,0x56,0xd7,0x19,0xa8,0x56,0x8b,0x67,0x1b, -0xd3,0x90,0x1f,0x47,0x97,0xa7,0x00,0x17,0xd6,0x0d,0xff,0x15,0xcb,0x5c,0x44,0x2f, -0x07,0xe9,0x83,0x7e,0x11,0x7c,0x54,0xea,0x88,0x10,0x5b,0x35,0x4d,0x06,0x95,0xd0, -0x3d,0x46,0x35,0x5a,0x80,0xb5,0x17,0x7c,0xd6,0x19,0x0c,0x48,0xc3,0x53,0xc3,0xed, -0xcd,0xeb,0x80,0xb0,0xc9,0xad,0xf1,0x1a,0xff,0x17,0x3d,0xec,0x8e,0x56,0xab,0x1c, -0x9c,0x06,0x67,0x50,0x23,0x67,0x0e,0x3d,0xd1,0xf7,0x59,0x5c,0xe0,0x25,0x6b,0x9a, -0x4c,0x89,0xc0,0xb0,0xf4,0xe9,0x7a,0x56,0xe2,0xb6,0x36,0x0d,0x8d,0xab,0x48,0xf7, -0xef,0x74,0xae,0xda,0xb5,0xa0,0x10,0x6b,0x9b,0xaa,0x81,0x38,0xe6,0xd8,0x75,0x59, -0x01,0xb8,0x19,0x44,0x07,0xe8,0x07,0xff,0xe6,0x04,0x41,0x88,0x46,0xbc,0xc6,0x46, -0xdb,0xbd,0x3a,0x03,0xbe,0x8d,0x5c,0xe5,0xa8,0xbf,0xfc,0x2b,0xd5,0xe5,0x2a,0xbe, -0x70,0xae,0x3d,0x95,0x37,0xb6,0x14,0xbc,0x11,0xa5,0x1f,0xfa,0x59,0x3b,0xc7,0x72, -0x08,0x3e,0x25,0x22,0x36,0x1c,0xe8,0xe8,0xf3,0x13,0xb7,0xb9,0x86,0xf2,0x50,0x62, -0x15,0xc6,0x16,0x08,0x5b,0xd1,0x2a,0x91,0x2e,0xd2,0x81,0x0b,0x60,0x80,0xfe,0xc0, -0x48,0x47,0x9a,0x8e,0x1d,0x49,0x7c,0xd5,0x0a,0x66,0x09,0xe4,0x0d,0x12,0x10,0xed, -0x04,0x40,0x80,0x96,0xb8,0xb9,0x69,0xba,0x75,0x76,0xbb,0x1d,0xa0,0xfe,0x6d,0x1f, -0x73,0xf2,0x7b,0x3a,0xcb,0xb8,0x93,0x94,0x0b,0x0a,0x25,0xc9,0x7c,0x8b,0xe7,0xd0, -0xa0,0x15,0xfb,0xca,0x07,0x7e,0xa4,0xf8,0x06,0xce,0xf6,0x2d,0x95,0xdf,0x02,0x7e, -0xc7,0x26,0x08,0xcb,0x57,0x52,0x4b,0xd1,0x0b,0xde,0xf7,0xb0,0x00,0x8a,0x25,0xa6, -0x2f,0x04,0x1b,0x06,0xf7,0xe0,0xd1,0x49,0x74,0x5a,0x2d,0x3e,0x99,0x47,0x2f,0xe4, -0x7e,0xfe,0x75,0xbb,0x0b,0x6e,0x2a,0x83,0x6d,0x8e,0x02,0xbc,0x2a,0xfe,0x8b,0x3d, -0xd4,0xef,0xa8,0xe0,0x97,0xbc,0xe9,0x3a,0xe0,0xe0,0x75,0xe9,0x6f,0x36,0x39,0x3d, -0x75,0xe2,0x0d,0x33,0xf3,0xfd,0xa6,0x87,0xcb,0x75,0xd9,0x47,0x80,0x5e,0xb5,0x5b, -0xa2,0x58,0xa4,0xfb,0x45,0xda,0xdf,0xd1,0xe9,0x97,0xa9,0xa5,0x73,0xdc,0x01,0xa4, -0xea,0xb0,0xe1,0x58,0x1d,0x35,0x4e,0xad,0x68,0xc1,0xea,0x8a,0xe0,0xfc,0x39,0xc4, -0x5b,0x72,0xe3,0xe0,0x09,0xaa,0x49,0x16,0xb0,0xab,0xdc,0x29,0xaa,0x5f,0x64,0x46, -0xa3,0xf1,0x84,0xf1,0xa0,0x56,0xc0,0xaf,0xf0,0x8e,0x16,0xa0,0x6a,0xb7,0xf6,0xb4, -0x3c,0x45,0x86,0x86,0xa1,0xa3,0x64,0xe5,0x9f,0x2b,0xc9,0x2b,0xd2,0x05,0xc3,0x7c, -0x9c,0xd2,0x66,0x17,0xf7,0xc3,0xc6,0x00,0x16,0x0b,0x4c,0x05,0x5c,0x81,0x0a,0xfc, -0xe4,0xa3,0xf4,0xee,0x1b,0xfe,0x01,0x74,0x78,0x23,0x3e,0x20,0x12,0xd8,0xc5,0xa9, -0xb4,0x8a,0x68,0x2e,0x81,0xd7,0x18,0xe5,0x03,0xe3,0x42,0x57,0xfc,0x23,0x83,0x3e, -0x24,0x12,0x68,0x86,0xd5,0xbf,0x1b,0xe7,0xe8,0xfb,0xfe,0xe4,0xe9,0xed,0x00,0xb1, -0x62,0x80,0x24,0xaa,0xdc,0x27,0xe5,0x3e,0xae,0xb1,0x40,0xe8,0x04,0x74,0x37,0x06, -0x33,0xda,0xeb,0xdc,0x0b,0x02,0x50,0x2f,0x7b,0xaa,0x63,0x80,0x30,0xf5,0x61,0x8e, -0x52,0x2a,0xe1,0xb5,0x00,0x85,0x6b,0x76,0xfb,0x93,0xca,0xaf,0x0d,0xb3,0x36,0x18, -0xa0,0x6c,0xda,0x08,0x56,0xbe,0x87,0x9d,0x77,0x11,0x68,0x7c,0x5a,0x9f,0x29,0x49, -0xef,0x14,0x7d,0x09,0xa9,0xda,0x68,0x1e,0x81,0x36,0xa8,0x20,0xeb,0x60,0x80,0x09, -0x45,0x5a,0x39,0x39,0xd8,0x57,0xca,0xb7,0x22,0x26,0xef,0x14,0x35,0xc1,0x0a,0xcd, -0x19,0x9c,0x44,0x2d,0xf9,0xfe,0xad,0xc5,0x89,0x41,0xcc,0xdd,0xcc,0x6c,0x14,0x85, -0x6f,0x0e,0x29,0x63,0xe8,0xba,0x51,0x72,0xed,0x2d,0xd8,0xba,0x2f,0x1d,0x03,0x00, -0x5c,0x96,0x00,0x10,0xfe,0xd6,0x81,0xe2,0xff,0xd1,0x74,0x2b,0x46,0x3a,0x36,0xd2, -0x6d,0x3d,0xa1,0x5a,0x6c,0xaa,0xdf,0x5c,0xfe,0x89,0x97,0xa3,0x34,0x0b,0xc3,0xb0, -0x01,0xb5,0x75,0xf7,0xc1,0x02,0x36,0x22,0xb0,0x02,0xd9,0x07,0x04,0x5b,0x12,0x00, -0x47,0x97,0x76,0xb1,0xf0,0x22,0x17,0xf8,0x0a,0xc1,0xb4,0x3d,0x68,0x92,0x1a,0x61, -0x10,0x33,0xdb,0xaa,0x41,0x1b,0x41,0x80,0x04,0xae,0x77,0x47,0x99,0x87,0xa1,0x14, -0xaa,0xf1,0xbf,0xe3,0x49,0xf4,0x20,0xd4,0xb4,0xa1,0xec,0xe0,0x54,0x8b,0xcc,0xfb, -0x94,0x97,0x9c,0x06,0x77,0x14,0xa2,0x90,0x56,0x51,0xbc,0xe7,0x7d,0x3a,0xff,0x5b, -0xda,0x5d,0x0a,0x78,0xa5,0x5d,0xd4,0x88,0x07,0x98,0x99,0x58,0x47,0xf5,0x0d,0xef, -0x6c,0x1c,0x0a,0x2b,0x8e,0x06,0xf0,0x0d,0x74,0xb3,0x58,0xe4,0x68,0x27,0xf4,0x2c, -0x7b,0x75,0xd8,0x00,0xff,0x74,0xd7,0x00,0xe9,0xcf,0x00,0x74,0x2f,0x90,0xaf,0x36, -0x72,0xad,0x93,0x86,0xda,0xe3,0x81,0x05,0xd5,0xdc,0x63,0x67,0x45,0x34,0x74,0xd9, -0xee,0xf3,0xea,0xca,0x6e,0xcd,0xf7,0xd8,0x89,0xc1,0x6b,0xb5,0xa0,0x57,0x97,0x6e, -0x86,0x20,0xc8,0x07,0xed,0x75,0x78,0x32,0x9f,0xbb,0x74,0x6f,0xf5,0xeb,0x95,0xeb, -0x6b,0x38,0xf2,0x0a,0xd8,0xf5,0xd8,0x07,0x27,0xe2,0x08,0x74,0x13,0xb5,0x0f,0x7a, -0x2a,0xb0,0x0a,0x71,0xc9,0xe3,0x33,0xe5,0x3d,0x14,0x6b,0xf8,0x4e,0xa5,0x40,0xac, -0x18,0xc6,0x76,0x54,0x13,0x20,0x0d,0x43,0x45,0xcb,0xdd,0xb9,0x98,0x17,0x39,0x90, -0x56,0x06,0x2b,0x41,0x6a,0xe3,0xb3,0x44,0x6e,0x85,0x3f,0xff,0xe5,0x94,0xa9,0x1d, -0x3f,0x04,0x57,0x6b,0x00,0x2f,0x8a,0x00,0x6a,0x79,0x42,0xce,0x43,0x76,0x0f,0xcc, -0x7f,0xba,0x74,0x29,0xeb,0xd0,0x1a,0x57,0xc8,0xa6,0x60,0xa4,0x63,0xe1,0xa2,0xac, -0xfe,0xbd,0xc4,0xfb,0xe4,0x55,0x01,0x28,0x90,0xce,0xba,0xf9,0xf7,0xdc,0xe9,0x45, -0x01,0x9b,0xbf,0xea,0xdf,0x00,0x0e,0x1a,0xec,0x08,0x98,0x00,0x32,0x0f,0x3e,0x32, -0x4f,0x10,0x25,0x73,0xc8,0xf2,0xd9,0xc5,0xee,0x17,0xda,0x99,0xe2,0x58,0x3e,0xd9, -0x08,0xc6,0xe6,0x64,0x0e,0x75,0x46,0x72,0xb1,0x51,0xe0,0x12,0xc7,0xed,0xe9,0xdb, -0x56,0xdb,0x05,0x03,0x55,0x7c,0x98,0x1b,0x68,0x3f,0x6b,0xa8,0x2b,0x65,0x42,0x73, -0xa5,0x3b,0x6c,0x5f,0x68,0xe1,0xca,0xb6,0x62,0xff,0x3f,0x68,0x6e,0x18,0xe8,0xb7, -0xfb,0x9d,0xf1,0xe1,0x30,0x97,0xb9,0x46,0x06,0x01,0x55,0x4a,0x49,0xc8,0x81,0xb9, -0x58,0x23,0xc9,0xe2,0x0d,0xf4,0x73,0x61,0xe9,0x6e,0x8a,0xeb,0x5c,0x11,0xf9,0xe3, -0x3d,0xeb,0x2f,0x54,0x70,0x7d,0x14,0x9a,0xea,0xb8,0xd7,0x38,0x20,0x2b,0xc1,0x51, -0xd0,0xad,0x0f,0x92,0x2f,0x17,0x2e,0x5c,0xfd,0x26,0xd0,0x93,0xa1,0x64,0x2c,0x24, -0x4b,0xa3,0x19,0x60,0x5d,0x79,0x80,0x0c,0x05,0xb3,0x24,0xa9,0x55,0xfe,0x90,0x80, -0xc1,0x57,0x20,0x51,0xc1,0x0a,0x3e,0x98,0xc5,0xe0,0x89,0xc2,0x51,0xd1,0xd8,0x40, -0x47,0xbc,0x41,0x0d,0x20,0x5e,0x61,0x92,0xb0,0x8c,0x00,0x09,0x7b,0x37,0x7f,0xc6, -0x07,0xc7,0x64,0x29,0x70,0x40,0xa9,0xbc,0x45,0xe9,0x62,0x82,0x41,0x43,0x09,0x01, -0x43,0x9b,0x06,0xde,0xfc,0xfc,0xac,0x3c,0x1a,0x74,0x2d,0x42,0xb2,0xff,0x05,0xaa, -0xe2,0xf4,0xeb,0x1c,0xe2,0xe0,0xf0,0x06,0x53,0x2b,0x90,0xfb,0x46,0xfd,0x50,0x4a, -0xe7,0x34,0xc4,0x5b,0x07,0x1b,0x20,0xfd,0xe2,0xaa,0x3b,0xfb,0xa5,0xde,0xec,0x99, -0xeb,0x20,0x20,0x78,0xf7,0xd9,0x1b,0x5b,0x36,0x51,0x22,0xf0,0x23,0xe1,0xcc,0x34, -0x8e,0x73,0x81,0x8f,0xfa,0x5b,0x2b,0xfb,0x97,0x49,0xf2,0x6c,0x47,0x06,0xe2,0x7e, -0x29,0xb8,0xa4,0x57,0x28,0xdb,0xf1,0x44,0xc8,0x70,0x0d,0xe2,0x19,0x1a,0xa9,0x0d, -0x26,0x39,0xb6,0x67,0x75,0x81,0x50,0x75,0x08,0x02,0x6c,0x51,0x81,0x2d,0x33,0x7f, -0xa9,0x9b,0x84,0xe2,0xa4,0xb7,0x66,0x58,0x13,0x17,0x40,0x63,0x81,0xfe,0xae,0x41, -0xed,0x8e,0x0c,0x05,0x33,0x44,0x14,0x66,0x56,0x96,0x0c,0xb4,0x59,0x06,0x66,0x56, -0x17,0x0f,0x68,0x74,0x0f,0x90,0x31,0x68,0x56,0xe7,0x20,0x90,0x09,0xae,0x81,0x3a, -0xf8,0x17,0xe5,0xe8,0x66,0xc4,0xea,0x59,0xde,0xb5,0xf3,0xc7,0x44,0x06,0x09,0x89, -0x65,0xc6,0x8b,0x89,0xb6,0x17,0x6f,0xf6,0x74,0x3e,0x0b,0x9d,0xdb,0x3a,0x45,0xae, -0x6d,0x9e,0x59,0x03,0xd0,0xc6,0x18,0x4b,0x81,0x11,0x40,0xc1,0x37,0xad,0xe8,0x03, -0x61,0xa6,0x72,0x11,0x15,0x7d,0x5b,0x6c,0x6e,0x3b,0x33,0x9f,0x39,0x7c,0x98,0x06, -0x0b,0xe1,0x04,0x75,0x1a,0x08,0x49,0x73,0x20,0xa1,0x01,0x35,0x7d,0x80,0x24,0xb8, -0x42,0x37,0x04,0x9b,0x5b,0x04,0x72,0xb9,0x13,0xf9,0x1d,0x7c,0x7a,0x44,0x72,0x0f, -0x81,0x6d,0xaa,0x00,0xe7,0xd0,0x0f,0x68,0xb7,0x03,0x70,0xc6,0x12,0x9b,0x58,0x64, -0x04,0x62,0x6b,0x8d,0x2d,0x46,0x4e,0x61,0xba,0x95,0x2f,0x0f,0xbb,0xb2,0x4d,0x14, -0x3c,0x08,0xfe,0x83,0x0f,0x2d,0x08,0x1c,0x8e,0xa4,0x8a,0xb1,0x88,0x2f,0x0d,0x69, -0xa9,0x00,0x9e,0x75,0x3a,0x00,0x2e,0xa7,0xa4,0x4d,0xdb,0x01,0x9e,0x03,0x81,0x3c, -0xc6,0x56,0x98,0x07,0x2e,0x77,0x7e,0x06,0xc6,0x07,0x74,0x0b,0x08,0x8c,0x08,0x8c, -0x0a,0x8c,0x0a,0x8c,0x0c,0x8c,0x0c,0xc2,0xdb,0x2c,0xaa,0xf0,0x44,0x4a,0xd2,0xe5, -0xb0,0x6f,0xc4,0x20,0x74,0xf5,0xf0,0x53,0xe8,0x69,0x03,0x74,0x57,0x3d,0x1b,0x99, -0x7e,0xdb,0x03,0xbf,0x04,0xc6,0x6a,0x98,0x95,0x50,0xcd,0xd7,0xd6,0xcd,0xa3,0x03, -0x03,0xba,0xf7,0x10,0x33,0xa4,0x06,0x11,0x43,0xc0,0x7c,0x07,0x00,0xbb,0x1a,0x4f, -0x84,0xcb,0xe2,0x0e,0x15,0x33,0x94,0xbb,0x57,0xaa,0x5a,0x06,0x39,0x14,0x95,0x54, -0xf0,0xa4,0xca,0x70,0x33,0x1b,0x5a,0xc3,0x83,0xb4,0x4e,0x06,0x16,0x3e,0xd1,0x56, -0x4f,0x5b,0xb2,0xa9,0xfe,0x27,0xe3,0xaf,0x37,0x7e,0xac,0x3b,0xc6,0x75,0xa8,0x2e, -0x31,0x8a,0x1d,0x95,0x1f,0xa0,0x88,0xe7,0x5a,0x26,0x4b,0x08,0x08,0x2c,0x41,0xd3, -0x8b,0xf7,0x4e,0xeb,0x47,0x46,0x6c,0x83,0x47,0x21,0x06,0x04,0x59,0x0a,0x66,0x08, -0x91,0x69,0x05,0x0d,0x21,0x22,0x6d,0x04,0x3a,0x76,0x1b,0x5a,0xff,0xc5,0x54,0xc3, -0x09,0x91,0x6e,0xeb,0x8f,0x76,0x08,0x47,0xff,0xef,0x32,0x01,0xe9,0x40,0xff,0x70, -0x21,0x5e,0xfa,0x80,0x7e,0xab,0xce,0x44,0x10,0x09,0xf7,0xea,0xab,0x84,0x66,0x69, -0x21,0x99,0x24,0x40,0xbc,0xf6,0x2a,0x00,0x2e,0x23,0x6b,0x3f,0x0d,0x6d,0x8c,0xff, -0x4e,0xe6,0x4e,0x56,0x4e,0xad,0x4e,0x85,0x73,0x07,0x05,0x44,0x25,0x02,0x79,0x77, -0xfe,0x26,0x34,0x08,0x37,0x70,0x56,0xcc,0xc1,0xb4,0x1a,0xd0,0xde,0x0f,0x77,0xee, -0xb9,0x16,0x00,0xdc,0xb4,0x4e,0x0b,0xda,0x82,0x94,0x83,0x42,0xe2,0x5a,0x8c,0x13, -0x74,0x7c,0x02,0x53,0xc5,0xa5,0x65,0x8b,0x77,0x5d,0x36,0x7d,0xc0,0x95,0x13,0x32, -0x2b,0xae,0x3a,0x63,0xa5,0x14,0x0e,0x64,0x01,0x24,0x7a,0x47,0x03,0x98,0x03,0x73, -0x06,0x38,0x17,0x9f,0x86,0xe7,0x1d,0xbb,0xfa,0xee,0x61,0x7c,0x0a,0x05,0xf8,0x7a, -0x7f,0x04,0xb0,0x61,0xdd,0x1a,0xb0,0x41,0x0b,0xee,0xfa,0xed,0x2a,0xd0,0x88,0x72, -0x1b,0x03,0xe2,0x50,0x37,0x31,0xe4,0x21,0x00,0x3b,0x04,0x65,0xe6,0xfb,0xbe,0x40, -0x41,0xeb,0x46,0x85,0x64,0xfc,0x18,0x9c,0xab,0xbc,0xdb,0x44,0x9d,0xc5,0x73,0x08, -0xfe,0x57,0x5d,0xdc,0xeb,0x72,0xdf,0x3d,0xe1,0x2b,0xf6,0xf6,0xad,0xc2,0x30,0x8b, -0x2b,0x3a,0xbd,0x01,0xfe,0x4e,0xcc,0xbc,0x0b,0x10,0x75,0x0f,0xd6,0x81,0x08,0xf2, -0x01,0x75,0x0a,0x8b,0x55,0x72,0xeb,0x04,0xe8,0x40,0x40,0x85,0xcb,0x6f,0x02,0xe2, -0xe8,0x9b,0xf6,0xd9,0x91,0xeb,0x0d,0x5b,0xd2,0xcc,0xb6,0xbb,0x1a,0x21,0x2b,0x14, -0xa9,0xc9,0x0b,0xab,0x1e,0x36,0xff,0xcc,0x98,0xab,0x93,0x2b,0xc0,0xe3,0xab,0x96, -0xab,0xb2,0x9c,0x05,0xda,0x0c,0xab,0x23,0x19,0x5d,0x03,0xe8,0xf6,0xab,0x91,0xab, -0x92,0x01,0x4a,0x74,0x47,0x24,0xfa,0xd1,0xfc,0x8f,0x57,0x8b,0xd7,0x32,0x40,0xc8, -0x83,0xde,0x52,0x8d,0x75,0xff,0xe7,0x4c,0x0a,0xa3,0x5d,0xbc,0x2b,0xf9,0x87,0xf7, -0x68,0x72,0x3b,0xd9,0x02,0xa4,0x43,0xec,0xa3,0x16,0xe9,0x92,0x82,0x0e,0xfc,0x87, -0xef,0x1a,0xe7,0xc7,0x1e,0x09,0xac,0xd0,0x3a,0xc3,0xb0,0x42,0x22,0xbb,0x35,0x11, -0xad,0x08,0xa6,0x11,0xed,0x08,0x3a,0xe3,0x03,0xf1,0x22,0xe4,0x75,0xef,0x1d,0xee, -0x46,0xe9,0x8d,0x44,0xfe,0xb8,0x0e,0x8c,0x20,0xb6,0x44,0xfc,0x2e,0xc9,0xa9,0xd8, -0x4d,0xec,0xf7,0x74,0xdc,0x69,0x06,0x1c,0x47,0x99,0x80,0x5c,0xcc,0x8a,0x5d,0x1b, -0x68,0xc3,0x49,0xe7,0x2e,0xd5,0x64,0x28,0x2d,0xad,0xa3,0xf3,0x9b,0x2d,0x86,0x50, -0xac,0x0a,0xdf,0x56,0xb9,0xfa,0x7a,0x61,0xac,0x8a,0x1d,0x3b,0xf5,0x1c,0xae,0xff, -0x74,0xf6,0x3a,0xc5,0x72,0x06,0x3a,0xc1,0xff,0x77,0x02,0x2c,0x20,0x3a,0xdd,0x72, -0x07,0xe0,0x3a,0xd9,0x77,0x0d,0x54,0xba,0x20,0xa1,0xdd,0xc9,0x61,0x62,0x3e,0xe6, -0x53,0x3a,0xd8,0xfc,0x60,0xfd,0x91,0xf7,0xd0,0x48,0x5f,0x84,0x59,0xbc,0x7d,0x51, -0xdd,0xe0,0xc8,0xe3,0x1d,0xa8,0x5d,0x9b,0xac,0x2b,0xd9,0xd8,0x8b,0xcb,0xae,0x4f, -0x32,0xe4,0x8a,0xbd,0xfc,0x50,0x94,0x36,0xb5,0x2d,0x17,0x79,0x5e,0xcb,0x32,0xe5, -0x62,0x2b,0x75,0xb8,0x9b,0x03,0xaa,0x60,0xbc,0x6e,0x16,0xc1,0xeb,0x16,0xd8,0x1d, -0xeb,0x0b,0x2a,0x58,0x9b,0x04,0x0f,0x57,0xd3,0x0e,0x46,0x45,0x75,0x75,0xf0,0x47, -0x53,0xdb,0x56,0xe5,0xf1,0x58,0x81,0x8b,0xf0,0x4d,0xff,0x1d,0xc2,0x8b,0xeb,0xce, -0x03,0xca,0x9e,0x44,0x28,0x08,0x2a,0x6b,0xed,0x06,0x34,0xab,0xc1,0xe8,0x6a,0x4a, -0xb6,0x14,0xed,0xb8,0xa2,0x25,0x9b,0xa3,0x2b,0x5b,0x54,0x2c,0xf8,0x61,0x3c,0x19, -0x77,0x05,0x05,0x1e,0x6c,0xa7,0xac,0x2b,0x94,0x54,0x60,0x92,0xb2,0xb2,0x5f,0x7a, -0xe8,0xc4,0xd7,0x02,0x59,0xa5,0xff,0x81,0xc2,0x00,0xa6,0x15,0xce,0x12,0x15,0x27, -0xd7,0x35,0xf0,0x81,0xc6,0x44,0xf8,0x2e,0xbb,0xd1,0xf8,0xdf,0x01,0x99,0x50,0x52, -0xba,0xa9,0x86,0x5e,0x7f,0x80,0x1f,0x59,0x5b,0xe8,0x63,0x82,0xdb,0xc5,0xc1,0xbd, -0x19,0x25,0x03,0x00,0xf9,0x18,0xe1,0x01,0x66,0x33,0x90,0x4a,0x46,0x0b,0xcd,0x03, -0x81,0x6f,0x0b,0x80,0x51,0x83,0x6f,0x0d,0x01,0x33,0xc9,0x12,0x78,0xa5,0x3a,0x88, -0x48,0x37,0x66,0x08,0x4e,0xfe,0x8a,0x84,0x5e,0x13,0x98,0x03,0xc8,0x05,0xb0,0xdb, -0x7f,0xf4,0x14,0x02,0x2b,0x0a,0x6a,0x80,0x5d,0x64,0x02,0x7e,0x0a,0xb7,0x2d,0x31, -0x6e,0xe6,0x01,0x41,0xaa,0x6c,0x52,0x47,0x01,0x54,0xdc,0x48,0xc1,0xba,0x18,0x54, -0xf5,0x47,0xc2,0x1b,0xc6,0x3e,0xa8,0x8c,0xdb,0xf7,0x18,0x18,0x3a,0x51,0x61,0xa3, -0x04,0xb0,0x9b,0x4e,0x5b,0xc2,0x90,0x82,0x03,0x76,0xeb,0x86,0xbb,0x83,0x33,0xd2, -0x11,0x6b,0xb1,0x82,0xb2,0xc7,0xda,0x6f,0x48,0x17,0x1c,0x33,0x19,0xcd,0x3c,0x00, -0xad,0xbf,0xda,0x5c,0x5f,0x03,0x9b,0xb7,0xc3,0x52,0xed,0x99,0x5b,0x59,0x7a,0xb6, -0x13,0x2c,0x4e,0x58,0x5e,0x84,0x7d,0xd2,0x0b,0x58,0x33,0x55,0x16,0xcb,0xe1,0xc0, -0x01,0x16,0x0b,0xad,0x29,0x42,0x85,0x19,0x68,0xa1,0xc6,0xdc,0x9b,0x84,0xba,0x6b, -0x54,0x5b,0x56,0x72,0x0f,0x02,0xd8,0x88,0x6b,0xe0,0x12,0x0b,0xc2,0xe0,0xd7,0x40, -0xae,0x41,0xb0,0x04,0x15,0xbf,0xd9,0xd7,0x88,0x05,0x61,0x27,0x72,0xb8,0x5e,0xf8, -0x88,0x49,0xc4,0xa2,0xd7,0x4b,0xf5,0xe0,0xf6,0x05,0xbc,0x07,0x89,0x18,0x43,0x98, -0x60,0x2e,0x83,0x5e,0xf5,0x7c,0x3c,0x2c,0x26,0x81,0x2f,0xbc,0x50,0x22,0x72,0xee, -0x33,0x81,0x6e,0x06,0xb4,0x83,0xde,0x5a,0x8d,0xfc,0x2f,0x38,0x22,0x93,0x59,0xd9, -0xd7,0x01,0x11,0x0d,0x56,0x86,0x41,0x11,0x54,0xba,0x3a,0x8d,0x18,0x4b,0xec,0x39, -0xd7,0x50,0x10,0x2e,0x19,0x70,0xb2,0x6f,0x04,0x34,0x20,0x0d,0x88,0x08,0xb5,0x83, -0x3b,0x4b,0x8b,0x56,0x2b,0x28,0x0b,0xc2,0xff,0xd6,0x02,0xd8,0x01,0x12,0x5e,0xdd, -0xd6,0xcd,0x69,0x87,0x30,0xf7,0x86,0x04,0xe2,0xa0,0x2e,0x3b,0x4d,0x7c,0x12,0x9a, -0x7f,0x3c,0x05,0xb6,0xb6,0x83,0xb8,0x01,0xf1,0xb7,0xa2,0xfc,0xc6,0x07,0x10,0xf5, -0x15,0xa3,0xe8,0x75,0x46,0x12,0xb7,0x03,0x02,0x1d,0xdc,0xeb,0x3c,0x09,0xda,0x1b, -0x15,0x51,0x5e,0xa8,0x3e,0x0e,0x45,0x1c,0x3a,0x29,0x2f,0x42,0x83,0xb6,0x4c,0xfe, -0xd6,0x11,0x14,0x07,0x3b,0x6e,0x11,0x7c,0xda,0x25,0x9f,0x13,0xfd,0xde,0xd3,0x1a, -0x80,0xd6,0xdb,0x3e,0xa7,0x31,0x14,0xb5,0x2b,0x8e,0x42,0xa7,0xea,0xc3,0xf0,0x31, -0x85,0x80,0x72,0xdd,0x1c,0xfc,0x59,0x45,0xb8,0x29,0x72,0x68,0xa7,0x2c,0x97,0x8a, -0x98,0xa9,0x13,0x85,0x6d,0x59,0x8a,0xbd,0x60,0x0f,0x72,0x49,0xc8,0x02,0x1c,0x39, -0x75,0xa5,0x2d,0x1a,0xb7,0xee,0x05,0x2b,0x74,0x0d,0x3c,0xcd,0x44,0x60,0x94,0xd9, -0x20,0x0c,0xb3,0x28,0x13,0x56,0x5b,0x3f,0x0f,0x04,0x20,0x74,0x2f,0x2c,0x2b,0x8c, -0xcd,0x05,0xe6,0x8a,0x13,0x00,0xb7,0x88,0x8c,0x46,0xb8,0x83,0x91,0x76,0xbe,0x36, -0x84,0x13,0xe8,0x25,0x22,0x5d,0xf4,0xb8,0x95,0xf2,0x0c,0x86,0xcd,0x18,0xe9,0xc1, -0xbb,0x00,0x52,0x13,0x6c,0x12,0x70,0xb1,0xf0,0x72,0x85,0x21,0x31,0xac,0x57,0x2e, -0x6a,0xa9,0x46,0x59,0x1e,0xd8,0x09,0xc6,0x35,0x88,0x17,0xdb,0x2a,0x1b,0x1a,0x1f, -0xe5,0x8c,0x59,0xfb,0xb8,0xcb,0x5b,0xda,0x16,0x66,0x6d,0xa3,0x63,0x78,0x73,0x38, -0x6f,0x34,0x3a,0x64,0x5d,0x21,0x01,0x15,0x87,0x15,0x55,0x01,0x70,0x6d,0x5c,0x02, -0x0f,0xfb,0xb2,0x03,0xfd,0x4f,0x8b,0xdf,0x8a,0x40,0x84,0xf5,0xde,0x3d,0x11,0xc2, -0xf7,0x6f,0x2b,0x7e,0x7b,0x35,0x91,0x3b,0x26,0x82,0x39,0x86,0x16,0xd9,0x69,0xd3, -0x45,0xf6,0x07,0x39,0xe9,0xc4,0x95,0x66,0xad,0x11,0xc8,0xa6,0x2c,0x41,0x17,0xf6, -0x75,0x3b,0x72,0x0c,0xde,0xe5,0x05,0x46,0x00,0xa9,0x9e,0xdd,0x4e,0x0d,0xaa,0x47, -0x0b,0x0b,0xe6,0xd0,0xe8,0x18,0xdf,0xb8,0x39,0xb7,0x6a,0x13,0xd0,0x76,0xf2,0x1c, -0x91,0x2d,0xd0,0xd9,0x72,0x0b,0x28,0x36,0x74,0x20,0xe6,0x4e,0x08,0xa8,0x4b,0x39, -0xce,0xa9,0x21,0xcf,0x5d,0x49,0x06,0x0b,0xd8,0x7b,0xbf,0x74,0x07,0x0a,0x77,0xec, -0x73,0x75,0x6c,0x3d,0x47,0x2a,0x77,0x10,0x7e,0x0f,0x1a,0x88,0x25,0x75,0xd1,0x8f, -0x68,0xb8,0xa1,0xc1,0x07,0x01,0xd0,0x6d,0x8f,0x30,0x43,0x42,0x7f,0x81,0xc3,0xb2, -0x07,0xf6,0xc3,0x03,0x5b,0x1c,0x49,0x77,0x0c,0x43,0xd1,0xfb,0x6e,0x01,0x03,0xd9, -0x80,0x68,0x2f,0x66,0xd0,0x82,0x13,0x06,0x05,0x30,0xc5,0xbb,0x07,0x4b,0x1e,0x2b, -0x81,0xca,0xcf,0x98,0x40,0xe0,0x0e,0x3b,0xdf,0x1c,0x16,0x75,0x19,0x80,0x4b,0xf3, -0x02,0x46,0x3e,0xab,0xd9,0x5b,0x0d,0x72,0xe6,0x08,0x75,0x0b,0xd0,0x01,0x77,0x86, -0xf3,0x29,0x35,0x64,0x08,0x45,0x5e,0x71,0x89,0x12,0xa8,0x34,0x19,0xd1,0x07,0x04, -0xc4,0x2c,0x72,0x9e,0x54,0x7a,0xa0,0x26,0x14,0xfc,0x44,0xb8,0xc2,0x4c,0x0a,0xa5, -0x35,0xed,0x8a,0xc2,0x88,0x8f,0xa3,0x0d,0xf8,0x05,0xf4,0x0d,0x44,0x16,0xd9,0x8a, -0x3a,0x35,0x5e,0x02,0x13,0xba,0x9d,0x88,0xfa,0x4c,0x3b,0x3e,0xb2,0x6d,0x7c,0x57, -0xd4,0xe9,0xdf,0x87,0x73,0x57,0x60,0xe0,0xd1,0x00,0x98,0xd1,0x02,0x37,0x72,0x0f, -0x0a,0x37,0xeb,0x24,0xd5,0x53,0xfe,0xb0,0x1a,0xed,0x40,0xc1,0x43,0xa3,0xb6,0x16, -0xa8,0x08,0x6d,0x9f,0xe9,0x9c,0xe2,0x34,0x8c,0xf4,0xfa,0x89,0x76,0xfa,0x8b,0xbf, -0xd5,0xb9,0x80,0x4d,0xff,0xad,0x5e,0xb8,0x17,0xc9,0x6a,0x07,0x88,0xdd,0x58,0x3c, -0x0a,0x03,0x20,0x6a,0x0d,0x46,0xe8,0x63,0x88,0x9b,0x99,0x86,0x78,0x12,0xef,0xea, -0xd6,0x2b,0x27,0x2b,0xfb,0x7c,0x27,0x2b,0xf0,0x56,0x63,0xb4,0x5b,0x00,0x5e,0x4b, -0x86,0xbc,0x82,0x12,0x30,0xff,0xee,0x3d,0x4c,0x9b,0x2b,0x31,0x8d,0xb5,0xb6,0x30, -0x55,0xf7,0x91,0xa9,0x3a,0xb5,0x30,0xa9,0xe9,0x5f,0x7b,0x76,0x21,0x56,0x0c,0xdd, -0x3a,0x20,0x24,0xc3,0x0e,0x2a,0xdc,0xc5,0x35,0x05,0xc9,0xc2,0x2b,0xc6,0xfb,0xa2, -0x12,0xc7,0xc5,0x19,0xac,0x32,0x01,0x0f,0x1f,0xb4,0x40,0x20,0x3a,0x0f,0x50,0xb2, -0xe0,0xf0,0x10,0x58,0x5d,0x87,0x37,0xa7,0xd3,0xd3,0x46,0xf9,0xa0,0x50,0x38,0xfa, -0x35,0x73,0x16,0xa4,0x25,0x50,0x2e,0x38,0x67,0xe3,0x68,0x47,0x46,0x4b,0xea,0xd4, -0x62,0x0d,0x5f,0x04,0x3d,0x10,0x93,0x22,0xb9,0x2d,0x4f,0xc8,0x23,0xeb,0xbc,0xec, -0x20,0x95,0x92,0x05,0x82,0x6d,0xb9,0xb4,0x36,0xa0,0x6e,0x3a,0x37,0x08,0x02,0x97, -0xb9,0xa3,0x94,0x57,0xef,0x44,0x89,0x16,0xda,0xc2,0x14,0xb8,0xfa,0x04,0x89,0x4c, -0x06,0x8e,0xa7,0xa2,0x44,0xc1,0xa9,0xb0,0x00,0x00,0x3f,0x42,0x6f,0x72,0x6c,0xff, -0x61,0x6e,0x64,0x20,0x43,0x2b,0x2b,0x20,0xb7,0x2d,0x05,0x6f,0x70,0xfa,0x79,0x72, -0x69,0x67,0x68,0xdf,0x13,0x31,0x39,0x39,0x31,0xb0,0x20,0x1c,0xfd,0x49,0x6e,0x74, -0x6c,0x1b,0xbe,0x4e,0x1b,0xb5,0x6c,0xf6,0x20,0x70,0x6f,0x69,0x0c,0xff,0x65,0x72, -0x20,0x61,0x73,0x73,0x69,0xf2,0x67,0x6e,0x6d,0x65,0xff,0x0d,0x0a,0x44,0x69,0x76, -0x69,0x64,0xdb,0x65,0x20,0x15,0x72,0x6b,0x2f,0x0d,0x7b,0x41,0x62,0x6e,0x06,0x77, -0x6d,0x61,0x2a,0x37,0x0e,0x67,0x72,0xee,0x61,0x6d,0x20,0x2e,0xb7,0x6d,0x34,0x61, -0x74,0xed,0x69,0x6f,0x6e,0x1d,0x7b,0x75,0x01,0x2a,0xf2,0x9a,0x56,0xb0,0x10,0x91, -0xac,0x34,0x00,0x02,0x8a,0x7c,0x5c,0x00,0x20,0x28,0x02,0x7a,0xe9,0x29,0x3f,0xd0, -0x70,0x25,0x63,0x6d,0x32,0x62,0xb1,0x05,0x73,0xcd,0xe9,0x04,0x1b,0x8a,0x43,0x1a, -0xdb,0x34,0xaa,0x68,0xea,0xd1,0xf3,0xbf,0xc5,0x20,0x73,0x6f,0x75,0x72,0x8d,0x63, -0xc3,0xfe,0x66,0x69,0x6c,0x65,0x00,0x77,0x62,0xc3,0x1a,0xe3,0x63,0x72,0x65,0xb7, -0x5a,0x15,0x37,0xdc,0x73,0x74,0x18,0xc1,0x2c,0x21,0xe9,0x57,0x24,0x63,0x74,0xf0, -0x05,0xb6,0x3e,0x6e,0x1f,0x56,0xdb,0x68,0x3a,0x76,0x74,0x78,0x63,0xc0,0x4d,0x15, -0xf0,0x2d,0x3d,0x76,0x2a,0x0d,0x5f,0x20,0x20,0x6e,0x75,0x6d,0xdd,0x62,0x65,0x2f, -0x66,0x4b,0x19,0x61,0x4d,0x17,0x65,0x35,0x73,0xbf,0x68,0x4f,0x50,0x59,0x43,0x4d, -0xb6,0x44,0xa0,0x59,0xde,0x02,0x4e,0x00,0x41,0xde,0x0f,0x00,0x44,0x3a,0xc9,0x31, -0xbb,0x64,0x7c,0x00,0x45,0x83,0x00,0x52,0x6d,0x48,0x12,0xfd,0x00,0x4b,0x00,0x4c, -0x00,0x4d,0x6f,0x60,0x00,0x51,0x00,0xf8,0x52,0x00,0x53,0x00,0x54,0x15,0x7a,0xbd, -0x85,0x00,0x2d,0x59,0x93,0x2b,0x73,0xb7,0x77,0x92,0x63,0x68,0x6b,0x19,0xc7,0x36, -0x61,0xe9,0x74,0x68,0x78,0x7d,0x6f,0x6f,0x20,0x6c,0xb6,0x92,0x67,0x23,0x5b,0x1c, -0x3b,0x64,0xbd,0x65,0x76,0xb7,0x73,0xf6,0x63,0x69,0x6d,0xad,0x63,0x8b,0xb6,0x37, -0x09,0x7d,0xf9,0x66,0xa9,0x0f,0xf8,0x7d,0x00,0x2a,0x2e,0x2a,0xac,0x8f,0xdc,0xb6, -0x56,0x10,0xb0,0xfe,0x36,0x5b,0x01,0x86,0x70,0x63,0x02,0x0a,0x6d,0x4b,0x6f,0xb6, -0x2a,0x00,0x1c,0x75,0x79,0xa1,0x42,0x2b,0x16,0x6d,0x86,0x0a,0x86,0x00,0x47,0xed, -0x64,0x69,0x72,0x17,0x6e,0x5b,0x72,0x79,0xc4,0x11,0x3b,0x56,0x6b,0x5b,0x06,0x74, -0x0b,0x2a,0x67,0x0a,0x29,0x14,0x02,0x3d,0x55,0x44,0x86,0x21,0x10,0x9e,0xdb,0x48, -0x72,0xae,0x66,0x6b,0x77,0x49,0x63,0x79,0x63,0x6e,0x89,0x63,0x20,0x11,0x71,0xb5, -0x50,0x25,0x68,0x9c,0x55,0x9c,0xee,0xa6,0xab,0x75,0x13,0x6e,0xdd,0x9d,0x75,0x65, -0x2e,0xac,0x00,0x46,0x58,0xde,0x0c,0x58,0x3f,0x7d,0x20,0x76,0x31,0xd6,0x2e,0x35, -0xfb,0x13,0x32,0xf7,0x30,0x30,0x31,0x2d,0x04,0x76,0x33,0x20,0x62,0x8c,0xf2,0x52, -0x65,0x6e,0xad,0xd3,0x6b,0x37,0xe8,0x5b,0x45,0x67,0x74,0x52,0x28,0x30,0x04,0x56, -0x68,0x62,0xbf,0x26,0x35,0x3a,0xee,0x20,0x45,0x72,0x77,0xb7,0x41,0x5e,0x72,0x29, -0x6b,0xde,0xe2,0x9a,0x04,0xeb,0x47,0x69,0x1d,0x9e,0xdb,0xd0,0x05,0x3b,0x3d,0xd8, -0x2e,0x74,0xd6,0x08,0x13,0xd9,0x2e,0x76,0x84,0x8c,0x38,0x5b,0x40,0x3d,0x6d,0x5d, -0x0d,0x87,0x2f,0xc7,0x7c,0x5e,0x5d,0x6b,0xb6,0x22,0x0d,0x9c,0x00,0x53,0x26,0x53, -0xe0,0x54,0xec,0x17,0x54,0xb7,0x62,0x43,0x2f,0x3e,0x04,0x34,0xec,0x66,0x77,0x7b, -0x28,0x73,0x29,0xf9,0x36,0xd1,0xdc,0x2e,0x46,0xc0,0x61,0x59,0x46,0x18,0x50,0xc7, -0x9b,0xa3,0x45,0x23,0x6d,0xf3,0x77,0x86,0x49,0xfe,0x41,0x2f,0x41,0x20,0xcb,0x00, -0x60,0xe0,0xb7,0x34,0x6c,0x79,0x60,0xe5,0xba,0xb2,0x68,0xc4,0x4e,0x2b,0xac,0xba, -0x43,0xff,0xb5,0x53,0xbd,0xea,0x69,0x62,0x75,0x34,0x23,0x73,0x28,0xbc,0x4c,0x04, -0x37,0xf9,0x6e,0x27,0x74,0x73,0x4b,0x00,0x09,0x6c,0x2e,0x61,0x33,0x54,0x3b,0xd9, -0x33,0x6c,0x70,0x64,0x43,0x24,0x27,0xc1,0x73,0x62,0xd1,0x18,0x85,0x2d,0xdc,0x76, -0x33,0xb2,0xc5,0x52,0x81,0x6e,0x8a,0xc2,0x63,0x63,0x28,0xb1,0x36,0xf6,0x44,0x5b, -0x3a,0x4d,0x04,0xa5,0x4c,0xb0,0x5d,0xa7,0x2d,0xad,0x9c,0x70,0xb5,0x20,0x72,0xc9, -0xa1,0x89,0x5c,0x41,0xce,0x7d,0x64,0x3d,0x6b,0xd8,0xfb,0x61,0x66,0xf7,0x31,0x8a, -0x32,0xa4,0x31,0x83,0xcd,0x65,0x49,0x90,0xf6,0x2e,0x20,0x57,0x22,0xc7,0x6e,0x45, -0x31,0x0d,0x6d,0x85,0x73,0x97,0x1f,0x2c,0x65,0x6c,0x61,0x11,0x59,0x4e,0x48,0x67, -0x5b,0x67,0xb9,0x7b,0xb8,0xbf,0x78,0x69,0x7a,0x9a,0x67,0xca,0x41,0x43,0x53,0x89, -0x6d,0x9a,0xa5,0xf7,0xf2,0x59,0x04,0x84,0x64,0x45,0xad,0xad,0x43,0x6e,0x46,0x4d, -0xc6,0x62,0x0d,0x1b,0x12,0xa1,0x2c,0x1c,0x2f,0x6d,0x70,0xd8,0x74,0x79,0x38,0xc8, -0x46,0x0a,0x56,0x44,0xae,0x89,0xd4,0x5c,0xa4,0x27,0xcd,0x19,0x60,0x87,0xa0,0x61, -0x81,0x23,0x05,0xd8,0x71,0xc9,0x48,0x5b,0xd5,0x77,0x64,0x64,0x5f,0x3f,0x32,0x73, -0x79,0x2b,0x64,0x46,0xe9,0x1b,0xb2,0xa6,0x65,0x72,0x07,0x51,0x5a,0x35,0xfa,0x74, -0xcd,0x90,0xb7,0x66,0x1c,0xc6,0x4b,0x49,0x40,0x76,0x49,0x66,0x6f,0x12,0x3d,0x1c, -0x38,0x96,0x4d,0x0f,0xe1,0x5b,0xe9,0x26,0x6d,0xd8,0xd4,0x65,0x4d,0x2b,0xa0,0x27, -0x4e,0x9e,0x2c,0x12,0x4f,0x31,0x70,0x8a,0x14,0x59,0x08,0xa4,0x5d,0x69,0xc9,0x8f, -0x22,0x2d,0x8c,0x7e,0x4b,0x80,0xc2,0x4b,0xfc,0xc6,0x70,0x6f,0x5b,0x9e,0x70,0x20, -0x4f,0xd0,0xf5,0x72,0xa3,0x71,0xac,0x42,0xc0,0x63,0xc6,0x2b,0x70,0x50,0x40,0x88, -0x64,0x4c,0x06,0x4c,0xf4,0xb1,0x97,0x06,0x6f,0x6b,0x2d,0xbb,0x25,0xd6,0x54,0x6d, -0x5b,0xa5,0x42,0xc2,0x69,0x6d,0x6b,0xb4,0x4a,0x65,0xbe,0xd3,0x29,0x51,0xc9,0x4d, -0x51,0xc2,0x74,0xba,0xdd,0x6e,0x33,0x66,0x83,0x66,0x05,0x41,0xf6,0xce,0x20,0x05, -0xeb,0x00,0x70,0xf9,0x01,0x03,0x18,0x07,0x3c,0x19,0x7d,0x4b,0x54,0x02,0xda,0x46, -0xf1,0x18,0x20,0x05,0x74,0x73,0x9b,0x0f,0xcc,0x0b,0x7c,0xb8,0x4e,0x80,0xf6,0x53, -0x75,0x70,0x73,0x2e,0x2d,0x0c,0xf2,0x39,0x6f,0xe0,0x29,0x4d,0x73,0xa0,0x43,0x6b, -0x98,0x79,0x4f,0x5a,0xca,0xdb,0xac,0x74,0x13,0xf0,0x6f,0x76,0xc2,0x62,0x77,0x37, -0xbd,0x32,0x94,0x34,0x85,0x07,0x23,0x67,0x3e,0x6b,0x69,0x70,0xb1,0xae,0x0c,0x9f, -0x32,0x4f,0xe4,0x50,0x06,0x50,0xc6,0x7c,0x73,0xf6,0xf4,0x7b,0x1b,0x43,0x34,0xae, -0x40,0x12,0x89,0x65,0xc7,0x35,0x8d,0x38,0x61,0xac,0xf9,0x64,0xa5,0x8c,0x4e,0x51, -0x25,0x8e,0xf2,0x20,0x51,0x75,0xc3,0x74,0x3d,0x36,0x28,0x2c,0x39,0x9b,0x73,0xb6, -0x82,0x42,0xd8,0xc6,0x77,0x01,0x0b,0x32,0x14,0xec,0x21,0x86,0xe4,0x52,0x06,0x4f, -0xc9,0xe2,0x76,0x6f,0x64,0x2d,0x1d,0xcf,0x20,0x1d,0x47,0x53,0x19,0x0e,0x5a,0x4b, -0xd4,0x4f,0xe7,0x64,0x24,0x21,0x33,0x82,0xa9,0xb5,0xf3,0x26,0xe5,0x9d,0x1c,0x9c, -0x47,0x54,0x81,0xbd,0xf5,0xe0,0x48,0xc2,0x80,0x46,0xa6,0x52,0xcc,0x84,0x1a,0xc8, -0xf6,0x48,0x74,0x06,0x12,0xa4,0x35,0x8a,0x91,0x75,0xa5,0x97,0x95,0x20,0x83,0x54, -0x65,0x31,0x8b,0x1d,0xa4,0x62,0x64,0xc3,0x86,0x5c,0xab,0xc6,0x8d,0x56,0x12,0x1b, -0xf2,0x20,0x56,0x83,0x77,0x30,0xe0,0x83,0xc9,0x60,0x63,0x26,0x57,0x20,0x3c,0x57, -0x61,0x69,0x26,0xc8,0x9b,0xc1,0x6b,0x65,0x8c,0x79,0xd2,0xc2,0xc6,0x6e,0x06,0xb6, -0x67,0xb0,0x6e,0xe1,0xb3,0x8c,0x88,0x59,0x91,0x52,0xc9,0x39,0x19,0x8d,0x5d,0x2d, -0x80,0x8d,0x8b,0x9d,0x6c,0x75,0x88,0x2a,0x59,0x79,0x2c,0x91,0x8c,0x65,0xac,0x76, -0x54,0x7a,0x84,0x66,0x98,0x59,0x3d,0xb8,0x30,0x92,0xd8,0xee,0x79,0x70,0x96,0xe3, -0x03,0xb9,0xa8,0x69,0x4d,0x3b,0x18,0x5b,0x2b,0x10,0xad,0x76,0x7a,0x80,0x6f,0x71, -0xac,0x6d,0xec,0x61,0xbb,0x70,0x61,0x62,0x46,0x36,0x70,0xb0,0x37,0xdf,0x89,0x72, -0x02,0xd8,0x6b,0x79,0x17,0xce,0xa1,0x80,0x37,0xb8,0x6f,0x6d,0x6d,0xfb,0xb5,0x6c, -0x54,0xdd,0x34,0x25,0x6c,0x64,0x08,0xc8,0x8b,0x65,0x0c,0x67,0x07,0x00,0xde,0x55, -0x6e,0x53,0xf5,0xd3,0x21,0x31,0xa1,0xaa,0x26,0x59,0x3b,0x48,0x4e,0x6f,0x42,0x79, -0x76,0x63,0x48,0x8c,0x3f,0x25,0xce,0x63,0x32,0x0c,0xef,0x95,0x1a,0x6d,0xc5,0x52, -0x30,0x32,0x51,0x08,0x28,0xc9,0x77,0xef,0x88,0x3f,0x56,0x46,0x61,0x74,0x35,0x64, -0x23,0x2a,0x62,0xb4,0x74,0x0b,0x33,0x00,0x55,0x5e,0x5b,0xb4,0x10,0x4c,0x73,0xd6, -0x2a,0x8f,0xa1,0x98,0x9a,0x63,0x1d,0x35,0xa9,0x91,0x7b,0x25,0x96,0x09,0xb7,0x3c, -0x6c,0x6c,0xcc,0x00,0x53,0xf4,0x08,0x72,0xad,0x5a,0x40,0x66,0x3a,0x93,0x69,0x1d, -0x06,0x96,0x43,0x1e,0x2c,0x64,0x8c,0xe2,0x85,0x49,0xdf,0xb2,0x8c,0x16,0xfa,0xd5, -0x75,0xed,0x37,0x05,0xa3,0x0a,0xd0,0x34,0x3c,0xe8,0x79,0x23,0xb0,0x2d,0x84,0x3e, -0x13,0x5d,0x00,0xff,0xd0,0xff,0x00,0xce,0x4f,0x6e,0x4f,0xff,0x79,0x57,0x59,0x80, -0xe4,0xf2,0x63,0x6c,0x20,0xbb,0x5c,0x09,0x4c,0x41,0xc2,0x4e,0x47,0x0d,0xfe,0x4c, -0x53,0x50,0x41,0x54,0x48,0xc3,0x07,0x08,0x7c,0xeb,0x66,0x6c,0x5f,0x5d,0x1f,0x5c, -0x51,0xad,0x25,0x00,0xff,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0xff,0x38,0x39, -0x41,0x42,0x43,0x44,0x45,0x46,0x9e,0x00,0x20,0x43,0x9e,0x21,0x20,0x4a,0x72,0x01, -0x40,0x17,0x02,0x24,0xc9,0x40,0xc8,0x14,0xc8,0x04,0x03,0x40,0x23,0x18,0x23,0x08, -0x20,0x0c,0x40,0xd9,0x20,0x00,0x2a,0x8f,0xa7,0x2a,0x7b,0x01,0x13,0x72,0x09,0x02, -0x5e,0xb4,0x10,0xde,0x0f,0x0a,0x02,0x01,0x49,0x99,0xc4,0xcc,0xf1,0x0f,0x99,0xd4, -0xb9,0x43,0x02,0x03,0x26,0xe4,0x6e,0x42,0x02,0x04,0x49,0x99,0xf4,0x94,0x01,0x45, -0xfc,0x14,0x00,0x01,0x60,0x02,0xde,0x04,0xa0,0x02,0xa0,0xca,0x2a,0x18,0x40,0xe7, -0xcd,0x00,0xff,0x13,0x02,0x02,0x04,0x05,0x06,0x08,0x2f,0x14,0x15,0x05,0xfe,0x13, -0xff,0x16,0x05,0x11,0x02,0xff,0x40,0xf9,0x05,0x05,0xff,0x21,0xed,0x0f,0xff,0x23, -0x22,0x9d,0x0f,0xb6,0x2e,0xff,0x3c,0xef,0x05,0x0f,0x30,0x90,0x13,0xec,0x23,0x04, -0xda,0x0f,0xb7,0x81,0x4d,0x50,0x1b,0xef,0x24,0x68,0x00,0x86,0xdf,0x60,0x00,0xcf, -0x01,0x02,0x25,0x2c,0x12,0x67,0x03,0xdf,0x04,0x02,0x00,0x05,0x24,0xb2,0x23,0xff, -0x07,0x0a,0x15,0x0a,0x0c,0x09,0x2f,0x0b,0x02,0x14,0xb1,0x0e,0x10,0xb6,0x08,0x02, -0x12,0x5b,0x10,0x01,0x9f,0x1f,0x06,0x2c,0x0a,0x8f,0x0d,0x02,0x11,0xcb,0x0e,0x13, -0x0f,0x26,0xcf,0x00,0x00,0x10,0xa5,0x70,0xf1,0x5d,0x16,0x73,0x5c,0xa1,0x85,0x09, -0xd3,0x3a,0x20,0x8e,0x0b,0x2f,0x31,0x1e,0xee,0x0f,0x8d,0x17,0x4f,0x23,0xa2,0x30, -0x35,0x07,0x6b,0x68,0x0d,0x8c,0xc8,0x23,0x99,0x0d,0x2c,0xc7,0x2f,0xbe,0x1f,0x1c, -0x1f,0x1e,0xe6,0x01,0x04,0x2d,0x11,0x6f,0x02,0x3b,0x00,0x5a,0x01,0x4b,0xec,0x97, -0xc6,0x00,0xb5,0x95,0xff,0x00,0xf3,0x00,0x11,0x01,0x30,0x01,0xff,0x4e,0x01,0x6d, -0x01,0x96,0x56,0x92,0x56,0xa6,0x50,0xe1,0x1b,0xc3,0x54,0x6f,0x1e,0x45,0x53,0x54, -0x6c,0x03,0x44,0xbe,0x00,0x6e,0x36,0x73,0xc4,0x01,0x2e,0x17,0xe5,0x34,0xee,0x4e, -0x10,0xbe,0x39,0xfc,0x05,0xcf,0x3a,0xdd,0x1e,0x56,0x55,0xec,0x2d,0x03,0x1c,0x0b, -0x00,0x00,0x00,0x00,0x00,0x00,0x12,0xff,0xa4,0x00,0xff,0x75,0x03,0xe8,0x6a,0x00, -0x72,0xf6,0x41,0x8c,0xc0,0xe8,0x55,0x00,0xe3,0x66,0x73,0xf9,0x49,0x49,0x74,0x11, -0x01,0xc9,0x01,0xc9,0x01,0xc9,0x01,0xc9,0x89,0xcd,0x8a,0x1c,0x46,0xf6,0xd3,0x31, -0xc9,0xe8,0x39,0x00,0x11,0xc9,0x75,0x08,0x41,0xe8,0x31,0x00,0x73,0xfb,0x41,0x41, -0x81,0xfd,0xd1,0x00,0x83,0xd9,0xfe,0x29,0xe8,0x72,0x0e,0x8e,0xd8,0x8d,0x01,0x28, -0xfc,0x96,0xf3,0xa4,0x96,0x8e,0xda,0xeb,0xb0,0xd1,0xe0,0xd1,0xe0,0xd1,0xe0,0xd1, -0xe0,0x50,0x31,0xc0,0x8e,0xd8,0x58,0x01,0xd8,0x01,0xf8,0xeb,0xe2,0x00,0xff,0x75, -0x03,0xe8,0x06,0x00,0x11,0xc9,0x00,0xff,0x75,0x05,0x8a,0x3c,0x46,0x10,0xff,0xc3, -0x5d,0x06,0x1f,0x8d,0xb5,0xf5,0xff,0xad,0x5b,0x91,0xad,0x92,0xad,0x97,0xad,0x01, -0xc3,0x8e,0xc3,0x31,0xc0,0x01,0xc7,0x26,0x01,0x2d,0xac,0x48,0x74,0x03,0x40,0x75, -0xf4,0x81,0xc7,0xfe,0x00,0xe2,0xf3,0x07,0x06,0x1f,0x8d,0x86,0x05,0x0b,0x8e,0xd0, -0xbc,0x80,0x00,0xea,0x00,0x00,0x00,0x00,0x05,0x0b,0x80,0x00,0x37,0x04,0x1e + 0x4d, 0x5a, 0x0d, 0x00, 0x2d, 0x00, 0x01, 0x00, 0x02, 0x00, 0x97, 0x0e, 0xff, 0xff, 0x15, 0x11, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x7e, 0x05, + 0xb9, 0xcc, 0x2b, 0xbe, 0x96, 0x57, 0x89, 0xf7, 0x1e, 0xa9, 0xb5, 0x80, 0x8c, 0xc8, 0x05, 0x05, + 0x00, 0x8e, 0xd8, 0x05, 0xa2, 0x0b, 0x8e, 0xc0, 0xfd, 0xf3, 0xa5, 0xfc, 0x2e, 0x80, 0x6c, 0x12, + 0x10, 0x73, 0xe7, 0x92, 0xaf, 0xad, 0x0e, 0x0e, 0x0e, 0x06, 0x1f, 0x07, 0x16, 0xbd, 0x0f, 0x00, + 0xbb, 0xef, 0x80, 0x55, 0xcb, 0x55, 0x50, 0x58, 0x21, 0x0d, 0x03, 0x03, 0x0a, 0x55, 0x31, 0x40, + 0xbf, 0x8c, 0x7a, 0x39, 0x40, 0x4c, 0x84, 0x00, 0xee, 0x56, 0x00, 0x6e, 0x84, 0x00, 0x00, 0x45, + 0xf3, 0xcc, 0xeb, 0xfd, 0x90, 0x48, 0x00, 0x7f, 0x50, 0xb8, 0x04, 0x00, 0xe8, 0xff, 0x66, 0x21, + 0x58, 0x51, 0x89, 0xd9, 0x89, 0xd3, 0xfe, 0x89, 0xca, 0xe8, 0x8d, 0x21, 0x59, 0xc3, 0xd9, 0x13, + 0x02, 0x65, 0x52, 0xec, 0xe9, 0x96, 0x21, 0x0a, 0x66, 0x47, 0xf6, 0x9b, 0x21, 0xb8, 0x06, 0x09, + 0xff, 0x3d, 0x21, 0x53, 0x52, 0x31, 0xdb, 0x31, 0xed, 0xd2, 0xb8, 0x54, 0x0b, 0xfd, 0x8c, 0x21, + 0x30, 0xe4, 0x5a, 0x5b, 0xce, 0x2c, 0x17, 0xb5, 0x25, 0x21, 0xb9, 0x18, 0x89, 0xc3, 0xa5, 0x2e, + 0xd8, 0x73, 0x21, 0x16, 0xcb, 0x0c, 0x0e, 0x37, 0x56, 0x55, 0x89, 0xff, 0xe5, 0x50, 0x50, 0x89, + 0xd6, 0xe8, 0x6a, 0x21, 0xff, 0x8d, 0x5e, 0xfc, 0x8d, 0x56, 0xfe, 0xe8, 0x63, 0xff, 0x21, 0x85, + 0xc0, 0x75, 0x0f, 0x8b, 0x46, 0xfc, 0xdb, 0x89, 0x04, 0x04, 0xfe, 0xff, 0x89, 0x44, 0x02, 0x31, + 0xc0, 0xeb, 0x03, 0xb8, 0xfd, 0xff, 0xff, 0x89, 0xec, 0x5d, 0x5e, 0x83, 0x4f, 0xd5, 0x95, 0x20, + 0xbb, 0x91, 0xd3, 0x8b, 0x25, 0x7f, 0x57, 0x02, 0xe8, 0x31, 0x21, 0x89, 0xee, 0xcb, 0xe8, 0x4f, + 0x34, 0xbe, 0x74, 0x25, 0x59, 0xf9, 0x22, 0x0e, 0x67, 0xb2, 0x77, 0x5b, 0x83, 0xec, 0x06, 0xdb, + 0x89, 0xd1, 0x59, 0xfa, 0x6e, 0x7b, 0xe8, 0x3a, 0xfb, 0x58, 0x3d, 0x65, 0x65, 0xfe, 0xb7, 0xfc, + 0x59, 0xfa, 0xe8, 0xdd, 0xfa, 0x20, 0x0f, 0x2d, 0x7d, 0x09, 0x34, 0xdb, 0x7b, 0xfa, 0xba, 0xca, + 0x7d, 0x89, 0xc8, 0xe8, 0x15, 0xf9, 0x24, 0x18, 0x8b, 0x64, 0x8b, 0xe7, 0xf6, 0x9f, 0x08, 0x0f, + 0x21, 0x6b, 0x88, 0x83, 0x98, 0x60, 0xcb, 0x1a, 0x51, 0x34, 0x56, 0x8d, 0x12, 0xad, 0xd9, 0xbf, + 0xb5, 0x8a, 0xa7, 0xbd, 0xef, 0x89, 0x46, 0xee, 0xb6, 0x07, 0x01, 0x05, 0xf6, 0xf0, 0x8a, 0x04, + 0x04, 0xf6, 0xf2, 0x8a, 0x07, 0x0f, 0xff, 0xf4, 0x8a, 0x47, 0x01, 0x48, 0x89, 0x46, 0xfc, 0xf6, + 0x8b, 0x47, 0x02, 0x2d, 0x6c, 0xdb, 0xf8, 0xc7, 0xd2, 0x42, 0x55, 0xdb, 0x8d, 0x27, 0xe8, 0xfe, + 0xd9, 0x20, 0xe9, 0x2c, 0xff, 0xb8, 0x0a, 0xdc, 0x48, 0x08, 0x20, 0x28, 0x1b, 0x7f, 0x04, 0x83, + 0x7e, 0x0a, 0x00, 0xcb, 0x74, 0x1c, 0x0c, 0xda, 0x43, 0x43, 0x2d, 0xd7, 0xf7, 0xfa, 0x5b, 0xc2, + 0x76, 0x08, 0xdf, 0xe8, 0x4c, 0xd9, 0x10, 0x36, 0xeb, 0x0e, 0x19, 0x1d, 0xfe, 0x11, 0x49, 0x21, + 0xeb, 0xec, 0x1d, 0x19, 0xb6, 0x8b, 0x5a, 0xec, 0x0e, 0xc5, 0x1f, 0x56, 0x8a, 0x30, 0x08, 0xad, + 0x14, 0x85, 0x6d, 0x26, 0xf8, 0x8f, 0xeb, 0x74, 0x07, 0xc7, 0xdd, 0x47, 0x06, 0x37, 0x17, 0x76, + 0xbd, 0x89, 0x07, 0xdd, 0x04, 0xf8, 0x89, 0xaf, 0x84, 0x37, 0xc3, 0x47, 0x04, 0x5c, 0xb5, 0x1a, + 0xc1, 0x40, 0x88, 0x06, 0x85, 0xde, 0x3f, 0x51, 0x56, 0x57, 0xff, 0x84, 0x89, 0xd7, 0x89, 0xde, + 0x75, 0xf0, 0x06, 0xa1, 0xa1, 0x88, 0x7b, 0x1e, 0x21, 0x8a, 0x05, 0x7f, 0x04, 0x40, 0xa2, 0x0e, + 0x0e, 0xc7, 0xf9, 0x06, 0xc1, 0x19, 0x01, 0x00, 0x7f, 0xb5, 0x19, 0x03, 0x73, 0x8c, 0x1e, 0xdb, + 0xc9, 0x19, 0x09, 0xbb, 0xe5, 0x19, 0x0e, 0x0e, 0x9b, 0xc3, 0xbf, 0x19, 0xbb, 0xcb, 0x05, 0xb9, + 0x19, 0xed, 0x2c, 0x00, 0xbb, 0x0e, 0xb7, 0xba, 0x21, 0x89, 0xd0, 0xf7, 0xe8, 0x09, 0x21, 0xf6, + 0x30, 0xfb, 0x75, 0x35, 0x81, 0x3e, 0x0f, 0x7f, 0x00, 0x73, 0x74, 0x2d, 0x85, 0xff, 0xff, 0x74, + 0x17, 0xa1, 0xcf, 0x19, 0x8b, 0x16, 0xd1, 0x6e, 0x03, 0x1e, 0xd3, 0x5f, 0x0e, 0xd5, 0x19, 0xe8, + 0x85, 0x4e, 0xb6, 0xff, 0x05, 0x89, 0x55, 0x02, 0x85, 0xf6, 0x74, 0x3e, 0x6f, 0x17, 0xd7, 0x19, + 0xa1, 0xb6, 0xd9, 0x39, 0x14, 0x1b, 0xec, 0xeb, 0x30, 0x73, 0x74, 0xc3, 0x76, 0xba, 0xf7, 0x21, + 0xee, 0x23, 0xff, 0x37, 0xee, 0x13, 0xa1, 0xfb, 0x33, 0xff, 0xfd, 0x19, 0x31, 0xd2, 0x31, 0xc9, + 0xe8, 0x1a, 0x24, 0xf6, 0x0a, 0xa1, 0xf7, 0x2f, 0xe5, 0x04, 0xc7, 0x0a, 0x4c, 0xee, 0xc6, 0x5f, + 0x5e, 0x59, 0xcf, 0xc8, 0xbc, 0x1e, 0x24, 0xdb, 0xc1, 0xca, 0x4b, 0x85, 0x89, 0xc6, 0x0d, 0xb3, + 0xfb, 0xf0, 0x01, 0xc3, 0x80, 0x3f, 0xbb, 0x5a, 0x10, 0x3b, 0x58, 0x7f, 0x73, 0x0b, 0x89, 0xce, + 0x01, 0xc6, 0xfe, 0x8a, 0x1f, 0x88, 0x1c, 0x40, 0xeb, 0xe7, 0x35, 0x36, 0xb8, 0x18, 0xc6, 0x07, + 0x6d, 0xf4, 0xeb, 0xbc, 0xb2, 0x3c, 0x08, 0xc8, 0x7f, 0xb7, 0x38, 0x8d, 0x7f, 0x1b, 0x6b, 0xd3, + 0xec, 0xe8, 0xc6, 0x20, 0x34, 0x7d, 0x39, 0xf8, 0x73, 0x0c, 0x8f, 0x33, 0x17, 0x88, 0x14, 0xb6, + 0x43, 0x34, 0xeb, 0x4b, 0x96, 0x8a, 0x0a, 0x59, 0x4a, 0x6c, 0x53, 0x35, 0x46, 0x02, 0x8d, 0x06, + 0x0a, 0xf1, 0x3b, 0x03, 0xc7, 0xf6, 0xfc, 0x85, 0xd1, 0x0c, 0x20, 0x74, 0x4f, 0x77, 0x4c, 0x99, + 0x20, 0x88, 0x1a, 0x0e, 0xc0, 0x14, 0xff, 0x03, 0x43, 0xeb, 0xf0, 0x3c, 0x2f, 0x6f, 0xbd, 0x3c, + 0x2d, 0x74, 0x86, 0x06, 0xd2, 0xff, 0xe9, 0x5e, 0x01, 0x43, 0x89, 0xd8, 0xe8, 0x72, 0x6d, 0x26, + 0x04, 0x80, 0x25, 0x32, 0x04, 0xf1, 0x75, 0xda, 0x8d, 0xa9, 0x3f, 0x6b, 0x61, 0x20, 0x18, 0xad, + 0x8b, 0x02, 0xc2, 0x3d, 0x50, 0x4c, 0xed, 0x07, 0x81, 0x07, 0xfd, 0xd0, 0x07, 0xeb, 0x0a, 0x3d, + 0x64, 0xb3, 0x0b, 0x05, 0x0d, 0x54, 0x6f, 0xe1, 0xe9, 0x17, 0x01, 0x63, 0x8b, 0xbe, 0x9b, 0x1d, + 0x52, 0x56, 0x73, 0x87, 0x34, 0x7f, 0x3c, 0x01, 0x72, 0x4f, 0x3c, 0x0c, 0xda, 0x77, 0x4b, 0x57, + 0xef, 0x09, 0x45, 0x3c, 0x1f, 0x77, 0xbf, 0x41, 0x14, 0x06, 0x72, 0xff, 0x0c, 0x76, 0x41, 0x3c, + 0x0b, 0x74, 0x3d, 0x3c, 0xff, 0x09, 0x74, 0x39, 0xeb, 0x3c, 0x3c, 0x04, 0x74, 0xfc, 0x33, 0x3c, + 0x02, 0x75, 0x34, 0xf6, 0x6f, 0x18, 0x03, 0x75, 0x24, 0xed, 0x8b, 0x4f, 0x02, 0xb3, 0x0b, 0x67, + 0xbe, 0x6d, 0x59, 0xf7, 0xbd, 0x87, 0xd2, 0x75, 0x0b, 0xbf, 0x0c, 0xb9, 0x90, 0x01, 0xf7, 0xf1, + 0x74, 0x0a, 0x09, 0x2f, 0x0a, 0x1d, 0x76, 0x0e, 0x4d, 0x87, 0x0d, 0x6f, 0x08, 0x1c, 0xeb, 0xf5, + 0x6d, 0x04, 0x1e, 0xae, 0xa0, 0xbe, 0xd2, 0x5e, 0x5a, 0x0c, 0x36, 0x16, 0x79, 0xce, 0x44, 0x1c, + 0x78, 0x77, 0x83, 0x0a, 0x89, 0xc6, 0x4c, 0x9a, 0x34, 0x37, 0x77, 0xc1, 0xbf, 0xae, 0x14, 0xfa, + 0x03, 0x3f, 0x89, 0x7e, 0xfc, 0x6f, 0xf8, 0x00, 0x04, 0x2b, 0x07, 0x4d, 0x08, 0xfa, 0x6f, 0x44, + 0x8b, 0x7e, 0xfe, 0xf0, 0x01, 0xc7, 0x80, 0x3d, 0xbb, 0x5b, 0x45, 0x3b, 0x0e, 0x77, 0x73, 0x40, + 0x5e, 0x5a, 0x0a, 0x0d, 0x16, 0x0f, 0x05, 0xde, 0x04, 0x2f, 0x75, 0x04, 0xdd, 0x0d, 0x74, 0x2e, + 0x8b, 0x20, 0x35, 0x6d, 0xf6, 0x07, 0x9e, 0xfc, 0xf8, 0x5e, 0xf6, 0x8a, 0x0d, 0xdc, 0x04, 0xf8, + 0x88, 0xd6, 0xf6, 0x25, 0xf8, 0x3a, 0x75, 0x05, 0xbf, 0xda, 0x8c, 0xeb, 0xde, 0x16, 0xff, 0x09, + 0xfa, 0x16, 0x90, 0xb1, 0xc7, 0x25, 0xc6, 0x05, 0xbe, 0x00, 0x4c, 0x05, 0xcf, 0x3a, 0x3c, 0x40, + 0x8e, 0x01, 0xee, 0x8c, 0xfc, 0x18, 0xdf, 0xa1, 0x18, 0x2f, 0xa2, 0x1c, 0x58, 0x60, 0x9f, 0xeb, + 0x0c, 0x50, 0x8a, 0x7d, 0xde, 0x89, 0x4e, 0xfa, 0xb6, 0x2b, 0x08, 0x8c, 0xa6, 0xa1, 0x4a, 0x1a, + 0x36, 0x54, 0xb9, 0xdf, 0x50, 0x3b, 0x4e, 0xf2, 0x7d, 0x85, 0x33, 0xdd, 0xfe, 0xd1, 0xe3, 0x03, + 0x5e, 0xf0, 0x8b, 0x1f, 0x39, 0x39, 0xad, 0xe5, 0x8f, 0xb6, 0x25, 0x07, 0xf6, 0x96, 0x4e, 0xf4, + 0x97, 0x0d, 0xf6, 0xe8, 0xf7, 0x16, 0xff, 0x8b, 0x1d, 0x1c, 0xb7, 0xde, 0x07, 0xff, 0x6b, 0x67, + 0x16, 0x47, 0x1d, 0x7f, 0x75, 0xe4, 0xe9, 0x78, 0x00, 0xe9, 0x79, 0xf0, 0x00, 0xba, 0x2f, 0x00, + 0xda, 0xc5, 0xfd, 0x1e, 0x64, 0xde, 0xdd, 0x75, 0x58, 0x29, 0xd8, 0xb2, 0x08, 0xfc, 0xf8, 0x76, + 0x2b, 0x3d, 0x04, 0x5d, 0x7a, 0x05, 0xc7, 0xba, 0x0b, 0x03, 0x01, 0xd9, 0x4f, 0xfc, 0x7f, 0xfe, + 0xb8, 0xae, 0x18, 0xe8, 0xf4, 0xbb, 0x1e, 0x0b, 0xc6, 0x87, 0x6f, 0x09, 0x00, 0x8b, 0x1c, 0x7f, + 0x4e, 0xfa, 0xc7, 0x07, 0x6e, 0x0b, 0xff, 0x04, 0xdb, 0x14, 0xf8, 0x6a, 0x2f, 0xab, 0xfe, 0x20, + 0x0a, 0x56, 0xfe, 0x30, 0x0a, 0x76, 0xc2, 0x17, 0xfd, 0x04, 0x41, 0xe9, 0x4c, 0xff, 0x8c, 0xe1, + 0xc2, 0x0a, 0xa1, 0x04, 0x64, 0x73, 0xc0, 0x1b, 0xf6, 0xc2, 0xe8, 0x0d, 0x87, 0xc7, 0xd3, 0xf1, + 0x0d, 0xc4, 0x8d, 0x5c, 0x41, 0x6d, 0x5c, 0x5c, 0xb5, 0x9a, 0xd0, 0x8d, 0x26, 0x9e, 0xb3, 0x21, + 0x9e, 0xaf, 0xb3, 0xe9, 0x81, 0xec, 0x90, 0xad, 0x5a, 0x02, 0xdf, 0x2c, 0x8d, 0x86, 0x70, 0xff, + 0xec, 0xe8, 0xc4, 0xfc, 0x06, 0x7f, 0xd5, 0x1d, 0x3d, 0x03, 0x00, 0x7d, 0xbb, 0x0f, 0x17, 0xba, + 0x22, 0xb1, 0x00, 0x11, 0xfc, 0xe8, 0xfc, 0xeb, 0x11, 0x7e, 0x0f, 0x2f, 0xce, 0x4e, 0x80, 0xba, + 0x6c, 0x0d, 0x5c, 0x2e, 0x76, 0xc6, 0x82, 0xd8, 0x06, 0x00, 0x5b, 0x33, 0x50, 0x1c, 0xff, 0x50, + 0xe8, 0x42, 0xfb, 0x83, 0xc4, 0xc6, 0x04, 0x3d, 0x05, 0xb7, 0x65, 0xa8, 0x10, 0x0a, 0xb8, 0x04, + 0xa4, 0x06, 0x5a, 0x1e, 0x72, 0x90, 0x5c, 0x2f, 0x1b, 0xef, 0x6d, 0xff, 0x82, 0x00, 0x52, 0x83, + 0xed, 0x7e, 0x89, 0xdf, 0x4b, 0x48, 0x8b, 0xdb, 0x8e, 0x86, 0x79, 0x80, 0x38, 0x5e, 0x16, 0xe8, + 0x4b, 0xfc, 0xee, 0x0a, 0xba, 0x24, 0x00, 0xf9, 0x0b, 0x7c, 0xc2, 0x23, 0xdf, 0xfa, 0x17, 0x70, + 0x23, 0x27, 0x23, 0x64, 0xbe, 0xfc, 0x2e, 0xfa, 0x7d, 0x59, 0xfc, 0x37, 0xf8, 0x1c, 0x80, 0x3c, + 0x1b, 0x39, 0x17, 0x65, 0x1f, 0xc8, 0x44, 0xcf, 0xf2, 0x39, 0x2e, 0xc9, 0x74, 0xda, 0xfc, 0xcb, + 0x76, 0xb7, 0x21, 0x03, 0x22, 0x23, 0xca, 0x7c, 0x58, 0x17, 0x8c, 0x29, 0x8e, 0x0b, 0xfc, 0xe6, + 0x05, 0xc5, 0xe5, 0xa9, 0x18, 0xb6, 0x02, 0x09, 0x7c, 0xdd, 0xb1, 0x2d, 0x00, 0xb9, 0xd3, 0xdb, + 0x1d, 0xbf, 0xb8, 0x58, 0x10, 0xe8, 0xe2, 0x1d, 0x5b, 0x86, 0x7c, 0x2f, 0xe8, 0xe7, 0x1d, 0xb4, + 0x88, 0x07, 0x2f, 0x82, 0xfa, 0x3a, 0x07, 0x6f, 0xe2, 0xb0, 0x01, 0xeb, 0xee, 0x23, 0x3a, 0x05, + 0x07, 0x5b, 0xa4, 0x1b, 0x77, 0x89, 0x08, 0x3a, 0x04, 0x77, 0x0b, 0x03, 0xeb, 0x0f, 0x75, 0x75, + 0xb4, 0xcd, 0x2d, 0x78, 0x77, 0x24, 0xab, 0xb0, 0x04, 0xe1, 0x8d, 0x66, 0x7e, 0x95, 0xd6, 0x99, + 0x83, 0x26, 0x1d, 0x2a, 0x1a, 0x66, 0x91, 0x07, 0x9c, 0x03, 0x5d, 0x46, 0x88, 0x57, 0xed, 0xba, + 0x30, 0x15, 0x8d, 0x6f, 0x60, 0x81, 0xc6, 0x66, 0xbf, 0x28, 0xff, 0x76, 0xf6, 0xbb, 0x33, 0xa6, + 0x00, 0x1e, 0xb7, 0x19, 0x13, 0x30, 0x12, 0x6c, 0x83, 0x4b, 0xd7, 0x17, 0x91, 0x63, 0x06, 0x80, + 0xc8, 0x5b, 0xc4, 0x03, 0xf8, 0xe9, 0x22, 0xfb, 0xb8, 0x1e, 0xdf, 0x61, 0xdf, 0x1f, 0xba, 0x54, + 0x2d, 0xf8, 0xb4, 0xe0, 0x1f, 0xce, 0x40, 0x36, 0xf6, 0x29, 0x57, 0xbb, 0x57, 0xc6, 0x8d, 0xb2, + 0x7e, 0x35, 0xfa, 0x11, 0x4f, 0xe1, 0x17, 0x37, 0x89, 0xf0, 0xe8, 0xdf, 0x7d, 0x20, 0x3a, 0x75, + 0xed, 0xc5, 0xb8, 0x1d, 0x37, 0xd2, 0xa7, 0x1f, 0x76, 0xa6, 0x86, 0x1b, 0x59, 0xf1, 0x5a, 0x12, + 0xf8, 0x2e, 0xff, 0x17, 0x53, 0x80, 0x20, 0x1d, 0x9b, 0x8b, 0x1f, 0x9e, 0x7e, 0xd2, 0x3c, 0x8b, + 0x03, 0xb2, 0x17, 0x79, 0xb2, 0x21, 0x3b, 0x76, 0x74, 0x22, 0x58, 0xcb, 0x76, 0x02, 0x23, 0xa1, + 0x20, 0xc8, 0x88, 0x38, 0x24, 0x20, 0x3b, 0x46, 0xeb, 0x9f, 0x68, 0x4b, 0xe4, 0xaa, 0xae, 0x75, + 0x10, 0x9c, 0x13, 0x6b, 0x6d, 0x50, 0x47, 0x91, 0x0d, 0xb3, 0x68, 0x9e, 0xe7, 0x18, 0xce, 0x70, + 0xe8, 0x2b, 0xf9, 0xcd, 0x42, 0x3a, 0x97, 0x01, 0x57, 0xe8, 0xbb, 0x1f, 0x0b, 0x06, 0xe9, 0xd6, + 0x5d, 0xfa, 0x23, 0xfc, 0x40, 0x07, 0xe8, 0x20, 0x19, 0x98, 0xff, 0x10, 0x2a, 0x07, 0x50, 0x81, + 0x85, 0xed, 0x8a, 0x8d, 0xb9, 0x4e, 0xff, 0x1e, 0x07, 0x8d, 0xbe, 0x52, 0xfe, 0xbe, 0x2e, 0xfd, + 0x0e, 0xf3, 0xa4, 0xb9, 0x41, 0x00, 0xdf, 0x0b, 0xff, 0xbe, 0x2d, 0x0f, 0xf3, 0xe5, 0xa5, 0xb9, + 0x07, 0xf7, 0x7e, 0x56, 0xbe, 0xaf, 0x0a, 0xcd, 0x41, 0xd4, 0xd8, 0xbe, 0xbd, 0x15, 0x7e, 0x64, + 0xbe, 0x3f, 0x10, 0x5d, 0xb8, 0x96, 0xbf, 0xa2, 0x67, 0x11, 0xa3, 0xb2, 0x19, 0x1b, 0x8c, 0x54, + 0xc3, 0xfb, 0x50, 0xc0, 0xf8, 0x8d, 0x8e, 0x56, 0xf9, 0x97, 0x3d, 0x7e, 0x8b, 0x6c, 0x0f, 0xf9, + 0x30, 0xdc, 0x97, 0x4d, 0x7e, 0x01, 0xf6, 0x7c, 0x08, 0x81, 0xbe, 0x1c, 0xc2, 0x9c, 0x0d, 0xff, + 0x06, 0xe8, 0x9a, 0x05, 0xe9, 0xb3, 0x02, 0x77, 0x13, 0x02, 0x7e, 0x0b, 0xc3, 0xbb, 0x9e, 0x3b, + 0xa5, 0x15, 0xdb, 0xe9, 0xf0, 0xe7, 0xdf, 0x83, 0x11, 0x53, 0x7b, 0x22, 0xb8, 0xbf, 0x4a, 0x7d, + 0x64, 0x22, 0xbb, 0xff, 0x23, 0x0f, 0x52, 0xfb, 0xfd, 0xe8, 0xb4, 0xf9, 0x80, 0x86, 0x61, 0xfd, + 0x7e, 0x6c, 0x36, 0x0d, 0x7e, 0xbc, 0x22, 0xba, 0xc7, 0x00, 0xc7, 0x09, 0xb5, 0x22, 0x0d, 0x7b, + 0x07, 0xf5, 0xc6, 0x06, 0x13, 0x0e, 0xbd, 0x7d, 0x1a, 0xba, 0xca, 0x9c, 0x14, 0xa0, 0x92, 0x36, + 0x1d, 0x05, 0xf5, 0x06, 0xb5, 0x97, 0xc9, 0xbc, 0x4a, 0x7c, 0x7d, 0x5f, 0x6f, 0xeb, 0xd1, 0xe6, + 0x8b, 0xb5, 0x92, 0x7e, 0xce, 0x57, 0x28, 0x12, 0x4d, 0xec, 0x5e, 0xf9, 0x06, 0x6d, 0x6d, 0x4e, + 0xb3, 0xcd, 0x10, 0xbe, 0x66, 0x39, 0x08, 0x5c, 0x12, 0x0e, 0x1b, 0x07, 0x20, 0xec, 0x02, 0xba, + 0xcf, 0x15, 0xe4, 0x50, 0x19, 0x14, 0xa5, 0x0a, 0x93, 0xd1, 0x9e, 0x3a, 0x0f, 0x9b, 0x5f, 0xa3, + 0x24, 0xf6, 0x0e, 0xa3, 0x26, 0x0e, 0xba, 0xfe, 0x01, 0xe9, 0xf1, 0x01, 0xbb, 0x02, 0xdb, 0xc8, + 0xd3, 0x1f, 0x39, 0x42, 0xc2, 0x01, 0xed, 0x56, 0x72, 0x0d, 0x97, 0x54, 0x65, 0xf9, 0x34, 0x0a, + 0x2c, 0x13, 0x72, 0x6b, 0xbe, 0x09, 0xf8, 0x1a, 0xbb, 0xd6, 0x46, 0xd4, 0x01, 0x5c, 0xcc, 0x0f, + 0xb3, 0xbb, 0x61, 0xb3, 0x15, 0xa4, 0xb6, 0xe9, 0xa1, 0x42, 0xc7, 0x04, 0x7c, 0x36, 0x28, 0x78, + 0x85, 0x44, 0xb6, 0x22, 0x3c, 0x78, 0xfd, 0x31, 0x22, 0xf7, 0xdb, 0x62, 0x89, 0x16, 0x63, 0xbd, + 0x8c, 0x01, 0xba, 0xe3, 0x9e, 0x93, 0xbc, 0x21, 0x4e, 0x15, 0x6b, 0x76, 0x15, 0x64, 0xe5, 0xe4, + 0xa6, 0x19, 0x16, 0xa5, 0x60, 0x93, 0xe7, 0x90, 0x90, 0x66, 0x18, 0x96, 0x4a, 0xe9, 0x4e, 0x7a, + 0x41, 0x9a, 0x19, 0x34, 0x59, 0xeb, 0x39, 0x64, 0x06, 0x1a, 0x69, 0x1e, 0x64, 0xed, 0xe4, 0x4e, + 0x19, 0x1b, 0xa5, 0x08, 0x93, 0xef, 0x93, 0x38, 0x0f, 0x67, 0xe9, 0xb6, 0xf2, 0xce, 0xf1, 0xce, + 0x2b, 0x22, 0x41, 0x9a, 0x1c, 0xdc, 0xd9, 0x15, 0xf3, 0x39, 0x0c, 0x06, 0x1d, 0x69, 0xc6, 0x64, + 0xf5, 0xf2, 0xf6, 0x20, 0x73, 0x1e, 0x4b, 0xb0, 0xf7, 0x27, 0xe0, 0x20, 0xcd, 0x1f, 0x9a, 0x2c, + 0xf9, 0x9c, 0xca, 0x83, 0x20, 0x34, 0x84, 0xb2, 0xfb, 0x73, 0xb4, 0xcb, 0x13, 0x21, 0x2a, 0x37, + 0x0d, 0xf5, 0xa2, 0xc3, 0x23, 0x0e, 0x52, 0xfe, 0x1d, 0xf5, 0xeb, 0x63, 0xba, 0xfd, 0xce, 0x20, + 0x93, 0x79, 0x07, 0x65, 0x22, 0xe1, 0xeb, 0x4e, 0xba, 0xf8, 0x07, 0x7e, 0x20, 0x19, 0x36, 0x71, + 0x39, 0xb6, 0x79, 0x01, 0x14, 0x32, 0x69, 0x4a, 0xde, 0x4c, 0x24, 0xff, 0xb2, 0x3a, 0x26, 0x04, + 0xd8, 0xea, 0x03, 0x47, 0xa3, 0x28, 0x0e, 0x49, 0x78, 0xe6, 0x0f, 0x14, 0xea, 0xe8, 0x1c, 0x11, + 0x6e, 0x81, 0xe9, 0xdd, 0x1b, 0x05, 0xee, 0xc6, 0xa8, 0xfd, 0xda, 0xcb, 0x56, 0x2e, 0xff, 0x18, + 0x3d, 0x8f, 0x00, 0x7e, 0x09, 0xbb, 0x13, 0x6b, 0x2f, 0x18, 0xb8, 0x29, 0xfe, 0xbb, 0x17, 0x5c, + 0x8b, 0x96, 0x68, 0x17, 0xef, 0xb9, 0xff, 0xe8, 0x4b, 0x22, 0x33, 0x76, 0x6d, 0x75, 0x1d, 0x96, + 0x28, 0x05, 0x5d, 0x0b, 0xfe, 0x8d, 0x16, 0x01, 0x7e, 0x34, 0x34, 0xba, 0x0d, 0x0a, 0x63, 0x0d, + 0x89, 0xad, 0x22, 0x7b, 0xe0, 0x46, 0xbb, 0x0e, 0x47, 0x34, 0x56, 0xe8, 0x16, 0x72, 0xec, 0xc6, + 0x04, 0x17, 0xe3, 0xdb, 0x2b, 0x17, 0x0a, 0xf6, 0x50, 0xbb, 0x4b, 0x3e, 0xca, 0x06, 0x05, 0xe5, + 0x77, 0x26, 0xba, 0x61, 0x01, 0x7e, 0x27, 0x9f, 0xf6, 0xc6, 0x24, 0x94, 0xcf, 0x68, 0xa9, 0x17, + 0xd8, 0x3d, 0x83, 0x84, 0x32, 0x07, 0xe9, 0xa4, 0xfd, 0x59, 0xfc, 0x7d, 0x0c, 0xba, 0x90, 0x0d, + 0x59, 0xd4, 0x42, 0x12, 0xfb, 0x22, 0xe9, 0x27, 0x01, 0xab, 0x65, 0x58, 0xda, 0x82, 0x17, 0x6a, + 0xce, 0xad, 0x65, 0x59, 0x08, 0x72, 0x7b, 0xfd, 0x2d, 0x19, 0x7e, 0x26, 0x9e, 0x21, 0xb6, 0xa9, + 0xd4, 0xfb, 0xab, 0x7f, 0x1b, 0x65, 0x09, 0xf6, 0x5f, 0xfd, 0x03, 0xb6, 0x18, 0xe0, 0x80, 0x7c, + 0xe5, 0x68, 0xb6, 0xf7, 0xe7, 0x48, 0x37, 0x49, 0x91, 0xde, 0xf3, 0xb7, 0xed, 0x0c, 0xd2, 0x21, + 0x97, 0xb6, 0x64, 0xcf, 0xe8, 0x10, 0xba, 0xdf, 0x2a, 0x00, 0x0b, 0x84, 0xa9, 0x17, 0xfb, 0xf6, + 0xe9, 0xbf, 0x0f, 0xc8, 0x3f, 0xcd, 0x74, 0x75, 0xbd, 0xf0, 0x1c, 0xd7, 0xb7, 0x67, 0x0c, 0xf2, + 0x0d, 0xba, 0x3f, 0x37, 0x5a, 0x29, 0xf1, 0x07, 0x80, 0x3e, 0xad, 0x86, 0x77, 0xe1, 0x72, 0xbb, + 0xa7, 0x71, 0x64, 0x0b, 0x62, 0xb6, 0xd7, 0x12, 0x37, 0x36, 0xf5, 0xbb, 0x16, 0x82, 0x0a, 0x47, + 0xa5, 0x0c, 0x2e, 0xc0, 0x01, 0x5c, 0x8c, 0x12, 0xa2, 0xe6, 0x24, 0x19, 0xcb, 0xca, 0x0e, 0x23, + 0x8b, 0xb7, 0x0c, 0x85, 0xbb, 0xd4, 0x6c, 0x0d, 0x0d, 0x8c, 0x7d, 0xbc, 0xc7, 0xbb, 0xd9, 0xb2, + 0x0c, 0x3a, 0x6f, 0x0c, 0x5c, 0xfa, 0x89, 0xf3, 0x0b, 0x0e, 0xe8, 0xd0, 0x00, 0xf9, 0xba, 0x54, + 0x74, 0x0b, 0x17, 0x77, 0x75, 0x0e, 0x1b, 0x0a, 0x17, 0x34, 0x07, 0x63, 0xf8, 0xeb, 0x67, 0x78, + 0x74, 0x86, 0x18, 0x03, 0x4b, 0x6c, 0x64, 0x7e, 0xd3, 0x87, 0xf5, 0x13, 0x60, 0x7e, 0xb5, 0x3e, + 0xf5, 0xfc, 0x11, 0x34, 0xf8, 0x23, 0x41, 0x16, 0x09, 0x5e, 0x86, 0x35, 0x97, 0x0f, 0x45, 0xfc, + 0x6c, 0xb1, 0x15, 0xce, 0x3f, 0x9a, 0x1f, 0x17, 0xd8, 0x3c, 0xd4, 0x47, 0x84, 0x6d, 0x04, 0x73, + 0xcd, 0x24, 0x65, 0xf9, 0x97, 0x10, 0x20, 0xfc, 0x06, 0xb0, 0xcd, 0xd4, 0x36, 0xd4, 0x17, 0x2c, + 0xbb, 0xb1, 0xb4, 0x19, 0x2a, 0x66, 0x22, 0xeb, 0x45, 0xbb, 0x16, 0x42, 0x69, 0x11, 0xf9, 0x1c, + 0xd2, 0x0b, 0x9e, 0xb9, 0x11, 0x6e, 0x83, 0x3e, 0x5a, 0xdf, 0x32, 0x7e, 0x10, 0x8b, 0x36, 0x06, + 0xe9, 0xab, 0xa9, 0x5b, 0x34, 0x2d, 0x6d, 0xcd, 0x3d, 0xb8, 0x02, 0x77, 0x08, 0x3e, 0xf8, 0xb4, + 0xad, 0x5c, 0xed, 0x09, 0xff, 0x0e, 0x1e, 0xdc, 0x46, 0x89, 0x1c, 0xfe, 0x10, 0xd8, 0x16, 0xbb, + 0x1a, 0xd6, 0x96, 0xde, 0x6f, 0xb8, 0x8e, 0x13, 0x8d, 0xd0, 0xbd, 0xf4, 0x0c, 0xa0, 0x7f, 0xde, + 0x95, 0x14, 0xe8, 0x8d, 0x2d, 0xab, 0xb7, 0x4e, 0xc5, 0x5e, 0xd4, 0x6c, 0x8e, 0x56, 0x8e, 0xbb, + 0x05, 0xdb, 0x56, 0x2c, 0xa6, 0xa1, 0x24, 0x69, 0x82, 0x31, 0xdb, 0x31, 0x78, 0x12, 0x18, 0xce, + 0xe4, 0x59, 0x0b, 0xf3, 0x40, 0x11, 0xd3, 0x4d, 0x33, 0xe0, 0xe9, 0x0e, 0xda, 0x70, 0x44, 0x3b, + 0x4e, 0x8d, 0xa6, 0xb7, 0x80, 0x0b, 0x5a, 0xf6, 0x47, 0xba, 0xe2, 0x03, 0x13, 0xd0, 0x99, 0x6d, + 0x24, 0x02, 0xb3, 0x26, 0x19, 0x76, 0x02, 0xbb, 0x91, 0xb6, 0xcb, 0x01, 0x02, 0x2c, 0x1b, 0xd9, + 0xb3, 0x02, 0x67, 0x02, 0xb5, 0xbb, 0x11, 0x72, 0xc7, 0xba, 0x60, 0x05, 0xc1, 0x15, 0xcf, 0xec, + 0x10, 0xdf, 0x6c, 0x2c, 0x03, 0x8e, 0xee, 0x0a, 0xce, 0xe3, 0xd5, 0xc7, 0x16, 0x26, 0x03, 0xc8, + 0xba, 0x04, 0xc8, 0xd7, 0x32, 0xbe, 0x32, 0x68, 0xc8, 0x05, 0xc8, 0xc0, 0x32, 0xa7, 0x32, 0xb4, + 0xc8, 0x06, 0xc8, 0xa9, 0x32, 0x90, 0x32, 0xd9, 0xc8, 0x07, 0xc8, 0x92, 0x32, 0x79, 0x3e, 0x10, + 0x04, 0xba, 0x08, 0x46, 0x7b, 0x41, 0x91, 0x62, 0x96, 0x59, 0x09, 0x46, 0x64, 0x41, 0x91, 0x4b, + 0x96, 0xa8, 0x0a, 0x46, 0x4d, 0x41, 0x91, 0x34, 0x96, 0xed, 0x0b, 0xc6, 0xb7, 0x36, 0x41, 0x93, + 0x1d, 0x8f, 0x05, 0x4f, 0x74, 0x16, 0x1f, 0x83, 0x06, 0x23, 0x5f, 0x2c, 0x0d, 0x8c, 0x08, 0x83, + 0xef, 0x9e, 0x0f, 0xab, 0x59, 0x0e, 0x1c, 0xf1, 0x09, 0x9c, 0xd8, 0x8c, 0xf8, 0xb2, 0x0f, 0x32, + 0xda, 0x0c, 0xc1, 0x8f, 0x2a, 0x06, 0xba, 0x91, 0x10, 0x90, 0xc3, 0x64, 0xaa, 0x65, 0x6e, 0x91, + 0x11, 0x90, 0xac, 0x64, 0x93, 0x65, 0xbc, 0x91, 0x12, 0x90, 0x95, 0x67, 0x7c, 0x0e, 0xd4, 0x25, + 0xf5, 0x1d, 0x7a, 0x3f, 0xfb, 0xbb, 0x09, 0x07, 0xba, 0x23, 0x20, 0x19, 0x74, 0x84, 0xa3, 0xc9, + 0x5d, 0x72, 0x5b, 0x0f, 0x03, 0x1e, 0x34, 0x07, 0x85, 0xe4, 0x56, 0x1f, 0xd5, 0xae, 0xf5, 0x1c, + 0xdb, 0xbb, 0x27, 0x3e, 0x13, 0x63, 0x76, 0x35, 0x20, 0xc8, 0x1c, 0xdb, 0x6f, 0x16, 0x14, 0x23, + 0x1e, 0x20, 0xc8, 0x05, 0xcb, 0xaf, 0x15, 0x23, 0x07, 0x20, 0xe7, 0xee, 0x0e, 0x96, 0xfe, 0x16, + 0x47, 0xf0, 0x08, 0x27, 0xd7, 0x23, 0x36, 0xe4, 0x08, 0xba, 0x17, 0x64, 0xd9, 0x19, 0xc0, 0x19, + 0x7d, 0x64, 0x18, 0x64, 0xc2, 0x19, 0xa9, 0x19, 0xc5, 0x64, 0x19, 0x64, 0xab, 0x19, 0x92, 0x1f, + 0x14, 0x09, 0xba, 0x1a, 0x23, 0x94, 0x20, 0xc8, 0x7b, 0xcb, 0x53, 0x1b, 0x23, 0x7d, 0x20, 0xc8, + 0x64, 0xcb, 0x7a, 0x1c, 0x23, 0x66, 0x20, 0xc8, 0x4d, 0xcb, 0xb0, 0x1d, 0x23, 0x4f, 0x20, 0xc8, + 0x36, 0xcb, 0xf8, 0x1e, 0x23, 0x38, 0x20, 0xc8, 0x1f, 0xf9, 0x3d, 0x0a, 0xba, 0x1f, 0x19, 0x21, + 0x06, 0x08, 0x46, 0x8a, 0x59, 0x20, 0x1c, 0x0a, 0x08, 0x67, 0xfa, 0xf1, 0xbe, 0x0d, 0x2d, 0xab, + 0x59, 0x21, 0x1c, 0xf3, 0x07, 0x9d, 0xda, 0x8c, 0x16, 0xf2, 0xb2, 0x22, 0x32, 0xdc, 0x0c, 0xc3, + 0xea, 0x60, 0x97, 0x5d, 0x2c, 0x98, 0xa5, 0x0f, 0x6a, 0x5b, 0x1e, 0x21, 0x36, 0x08, 0xa0, 0x0d, + 0xc2, 0x5d, 0x32, 0x5b, 0x85, 0xee, 0x89, 0x9e, 0x0b, 0x01, 0xe6, 0xff, 0x30, 0xfb, 0xff, 0x36, + 0x2a, 0x0e, 0x03, 0x69, 0x28, 0xa8, 0x76, 0x36, 0x0b, 0x38, 0xcd, 0x8a, 0x08, 0xea, 0xe8, 0x97, + 0x0a, 0xc6, 0x42, 0x9a, 0x5c, 0x5b, 0x0f, 0xb2, 0x51, 0x1e, 0x89, 0xc1, 0x2d, 0xfe, 0x80, 0x11, + 0x5a, 0xed, 0xc3, 0xb1, 0x2d, 0xd5, 0x1f, 0x1e, 0xeb, 0x1f, 0x2a, 0x9a, 0x04, 0x03, 0xfa, 0x70, + 0x3b, 0x1e, 0x36, 0x77, 0x05, 0xb8, 0x01, 0xa8, 0xc4, 0x37, 0x36, 0xe9, 0x74, 0xf2, 0x6f, 0x40, + 0x2e, 0x01, 0xe8, 0x9e, 0x1a, 0x52, 0x8c, 0x06, 0x1d, 0x20, 0x01, 0x1a, 0x05, 0x25, 0xcf, 0x80, + 0x89, 0xe7, 0x0d, 0x2b, 0x02, 0xda, 0xaa, 0x61, 0xb3, 0x95, 0x10, 0xbb, 0x1e, 0x2f, 0xf0, 0x05, + 0xf3, 0x25, 0xf3, 0xfe, 0x3b, 0x11, 0x88, 0xc1, 0xbb, 0x03, 0xba, 0x77, 0xee, 0xdf, 0x0d, 0x7e, + 0xe8, 0xb7, 0x1d, 0xb7, 0xbe, 0x0b, 0x88, 0xc8, 0x6f, 0xb8, 0x39, 0xc6, 0x7d, 0xf0, 0x2f, 0x80, + 0x7a, 0xee, 0x6f, 0x2f, 0x20, 0x88, 0x62, 0xbf, 0x7e, 0x19, 0x19, 0xf3, 0x13, 0x9f, 0xbf, 0x09, + 0xc0, 0x1d, 0x81, 0x84, 0x1a, 0xb0, 0x01, 0xfe, 0x73, 0x24, 0x27, 0x7f, 0xeb, 0x0b, 0x8a, 0x42, + 0xee, 0x88, 0xfe, 0x42, 0x7e, 0x46, 0xeb, 0xc9, 0x30, 0xc8, 0xb5, 0x73, 0xaa, 0x70, 0x5e, 0x9e, + 0xe9, 0x43, 0xf1, 0xa5, 0x9d, 0x97, 0xc2, 0x8c, 0x0e, 0x26, 0xec, 0x8b, 0xb6, 0x00, 0xa0, 0x57, + 0x98, 0xcd, 0x55, 0xd0, 0xa8, 0xa7, 0x6a, 0x0b, 0x52, 0xd9, 0xdc, 0x58, 0x65, 0xcc, 0x6e, 0x4c, + 0xb0, 0x1d, 0x86, 0x18, 0xb6, 0x50, 0x0f, 0x4e, 0x4d, 0x4d, 0x88, 0x9e, 0xb6, 0x1d, 0x0a, 0x4e, + 0x56, 0x20, 0xf0, 0x46, 0x62, 0xe8, 0x76, 0x59, 0x5e, 0x72, 0x84, 0x3c, 0x78, 0x6c, 0xe8, 0x33, + 0x06, 0x55, 0x7a, 0x22, 0x97, 0x1d, 0x6f, 0xef, 0x63, 0x0a, 0xcc, 0x34, 0xa1, 0x9c, 0x62, 0xd2, + 0x96, 0x73, 0x6c, 0x6b, 0x8b, 0xef, 0xfe, 0x65, 0x82, 0xdb, 0x42, 0xef, 0x88, 0x14, 0x2c, 0x03, + 0x98, 0x0e, 0x9f, 0x96, 0x06, 0xdf, 0xbb, 0xe4, 0x45, 0x10, 0x53, 0xaa, 0x00, 0xdb, 0x57, 0x3d, + 0x07, 0x84, 0x68, 0xbe, 0x5f, 0x45, 0x3b, 0x56, 0xfc, 0x7c, 0x82, 0x13, 0xc1, 0xcd, 0xb7, 0x43, + 0x04, 0x3f, 0x74, 0x97, 0x3e, 0x2a, 0x74, 0x80, 0x39, 0xdd, 0xf9, 0x7d, 0x34, 0xf8, 0x17, 0x8a, + 0x0f, 0x58, 0x8a, 0x43, 0x0d, 0xb9, 0x53, 0xa1, 0x75, 0x01, 0xd3, 0x8b, 0x2f, 0x8b, 0x01, 0xd6, + 0x80, 0xb6, 0xf9, 0x24, 0x0b, 0xdf, 0x04, 0x2a, 0x75, 0x0c, 0x8a, 0xe1, 0x0c, 0x88, 0x0f, 0x08, + 0xb8, 0x04, 0x88, 0x07, 0x56, 0x90, 0x09, 0x80, 0xde, 0x43, 0x42, 0xeb, 0xaf, 0xc6, 0x27, 0xc6, + 0x26, 0xc0, 0xc2, 0xbb, 0xee, 0x9b, 0xcb, 0x62, 0x7e, 0x80, 0x0d, 0x41, 0xb0, 0xda, 0x50, 0x01, + 0x84, 0xa7, 0xa0, 0x76, 0x88, 0x4e, 0x7e, 0x0c, 0x7d, 0xed, 0x11, 0x06, 0x9a, 0x1f, 0x0a, 0x59, + 0x20, 0x84, 0xb8, 0x6e, 0xb3, 0x00, 0x3f, 0x10, 0xa0, 0x0f, 0xb5, 0xbb, 0x05, 0xad, 0x79, 0x74, + 0x83, 0x7c, 0x12, 0xfb, 0x92, 0x0f, 0xbe, 0x05, 0x70, 0x01, 0xc6, 0x77, 0x30, 0x8b, 0x96, 0x2e, + 0x2f, 0xff, 0x59, 0xe8, 0xcc, 0x68, 0xee, 0x0e, 0xe1, 0x7c, 0x0b, 0x99, 0xb7, 0x10, 0xfc, 0x5f, + 0x50, 0x0b, 0xa6, 0x8d, 0xeb, 0x3c, 0xff, 0x85, 0xc9, 0x75, 0x6f, 0xf6, 0x46, 0x65, 0x10, 0xf8, + 0x74, 0x61, 0xba, 0x3e, 0x0b, 0x97, 0x9e, 0x6e, 0xe8, 0x9f, 0x54, 0x54, 0xba, 0xb1, 0x40, 0x0c, + 0x9e, 0x47, 0x47, 0x11, 0x2e, 0xb6, 0x6e, 0xae, 0x7c, 0x3c, 0xa5, 0x07, 0x99, 0xbf, 0x0b, 0x4f, + 0xee, 0x66, 0x17, 0x1a, 0x46, 0x44, 0xc1, 0x16, 0x77, 0x0a, 0x39, 0xee, 0x8b, 0x6d, 0xac, 0xbb, + 0xad, 0x80, 0x7b, 0x83, 0x2c, 0xac, 0x1d, 0x2a, 0xff, 0xb7, 0xe0, 0x7c, 0xde, 0x0e, 0x04, 0x6c, + 0x50, 0x50, 0xbe, 0xeb, 0xeb, 0x8b, 0xb9, 0x94, 0x2d, 0x6c, 0xfa, 0x18, 0xde, 0x03, 0xb9, 0x27, + 0x00, 0xc0, 0xa6, 0x76, 0xc1, 0xed, 0x0c, 0x32, 0x2c, 0x3e, 0xf1, 0xed, 0x89, 0xcb, 0xc1, 0xa6, + 0xcc, 0xff, 0xea, 0x29, 0x0e, 0x70, 0xc7, 0x06, 0x68, 0xd9, 0xd0, 0x9e, 0x0a, 0xe8, 0x26, 0x83, + 0x9a, 0x15, 0x4d, 0x3b, 0x04, 0xab, 0xf0, 0x74, 0x19, 0x44, 0x2c, 0x0e, 0x1a, 0xd1, 0x3d, 0xff, + 0xb7, 0xfa, 0xb8, 0x9d, 0x5a, 0xe8, 0xdf, 0x77, 0xed, 0x05, 0x13, 0xba, 0xfd, 0xbc, 0x28, 0xe1, + 0x09, 0x2f, 0x08, 0x43, 0x0b, 0xba, 0x91, 0x14, 0xcb, 0x50, 0x04, 0x5e, 0x97, 0x0b, 0x37, 0x0a, + 0x30, 0x59, 0x45, 0x14, 0x1f, 0x1e, 0xf6, 0xe9, 0x71, 0x84, 0x00, 0x52, 0xe1, 0x6a, 0x0f, 0xa2, + 0x66, 0x59, 0xe9, 0x12, 0x39, 0x1b, 0xa1, 0x06, 0x1d, 0xbb, 0x20, 0x74, 0x48, 0xa7, 0x05, 0x2c, + 0x64, 0x30, 0xbb, 0x18, 0xed, 0xf9, 0x36, 0x0c, 0x33, 0x48, 0x82, 0x68, 0x1b, 0xc0, 0xb6, 0x72, + 0xed, 0xdb, 0xeb, 0x7e, 0x17, 0xb6, 0xb8, 0x8f, 0x7c, 0xe1, 0x24, 0xfd, 0x12, 0xda, 0x08, 0xfd, + 0x17, 0x25, 0xed, 0xb2, 0x2c, 0xc0, 0x30, 0x12, 0x8d, 0x04, 0x42, 0xd8, 0xd0, 0xeb, 0x96, 0x9c, + 0x78, 0x06, 0xa3, 0xa6, 0xd2, 0x97, 0x14, 0x88, 0x0b, 0x38, 0xa4, 0x34, 0x7b, 0xc7, 0x89, 0xd6, + 0x7a, 0x66, 0x1c, 0x8b, 0x30, 0xf5, 0xed, 0x65, 0xba, 0x89, 0x03, 0x6e, 0xf1, 0x96, 0x03, 0x0a, + 0xcb, 0x25, 0x38, 0xab, 0x0b, 0x44, 0xe2, 0x03, 0xdc, 0xe7, 0x87, 0x03, 0xad, 0x6d, 0x15, 0xa1, + 0x9e, 0x73, 0xb1, 0x15, 0xf0, 0x6b, 0xea, 0xc6, 0xb4, 0x93, 0xee, 0x28, 0x96, 0x6d, 0x12, 0x46, + 0x1a, 0x5f, 0x78, 0x57, 0xe0, 0xbb, 0x6c, 0x0b, 0x6e, 0xaa, 0xe9, 0x31, 0xf5, 0x26, 0x80, 0x76, + 0x15, 0x1c, 0x1b, 0x1d, 0x0c, 0xb2, 0x15, 0x8e, 0xc5, 0x16, 0x8e, 0x12, 0x46, 0x03, 0x4f, 0x2d, + 0x09, 0x09, 0x09, 0x34, 0xbd, 0xbd, 0x3b, 0x06, 0xb8, 0x05, 0xbf, 0x33, 0xf4, 0x10, 0xba, 0x2d, + 0x5c, 0x37, 0x78, 0x1b, 0xba, 0xdd, 0x60, 0x5c, 0x5f, 0x70, 0xac, 0x1b, 0x46, 0x0f, 0xc1, 0xa0, + 0x16, 0xd9, 0xa5, 0xcf, 0xfc, 0xbb, 0x97, 0x5c, 0xba, 0x93, 0x5c, 0x2e, 0xf9, 0xeb, 0xa1, 0xad, + 0xa5, 0x6f, 0x1d, 0x7f, 0x09, 0x75, 0x83, 0x1f, 0x71, 0x6d, 0x24, 0x43, 0xff, 0x76, 0x18, 0x8b, + 0x16, 0x45, 0x5c, 0xa1, 0x47, 0xed, 0x5c, 0x3b, 0x06, 0x17, 0xb7, 0x73, 0x93, 0xff, 0xed, 0x0b, + 0xb7, 0x3b, 0xf9, 0x16, 0x24, 0x0e, 0x72, 0xf5, 0xac, 0x2a, 0x2b, 0x76, 0x7d, 0x15, 0x22, 0x4f, + 0x7a, 0x5c, 0x72, 0xbf, 0xdd, 0x1f, 0x78, 0x5c, 0xea, 0x76, 0xd5, 0xa0, 0x54, 0x85, 0x34, 0xb0, + 0x0a, 0xbf, 0x74, 0xca, 0xe9, 0x8d, 0x00, 0x57, 0xcc, 0x6d, 0xbb, 0xa1, 0xeb, 0x91, 0x01, 0x8b, + 0x9b, 0x8b, 0x76, 0x00, 0x01, 0xe9, 0xfe, 0xb8, 0x2d, 0x5b, 0xe8, 0x9d, 0xeb, 0xee, 0x0a, 0xba, + 0xab, 0x0b, 0xf9, 0x0b, 0xce, 0xda, 0xf2, 0xf9, 0x0a, 0xc3, 0x6d, 0xad, 0x2d, 0x91, 0x05, 0xc2, + 0x6d, 0x02, 0x34, 0xdb, 0xb6, 0x0c, 0x04, 0x23, 0x60, 0xb4, 0x02, 0xaf, 0x24, 0x42, 0xe4, 0x53, + 0x02, 0x24, 0x52, 0xce, 0x87, 0x40, 0x7e, 0x3f, 0xd3, 0xee, 0x29, 0x85, 0x7e, 0x10, 0x3c, 0x03, + 0x74, 0x05, 0xde, 0x83, 0xe9, 0x7d, 0xff, 0xac, 0x27, 0xd5, 0x83, 0xe8, 0x3c, 0xb6, 0xed, 0xaf, + 0x3d, 0x59, 0x3f, 0xbf, 0x72, 0x5c, 0x7f, 0x08, 0x75, 0x5d, 0x2c, 0x70, 0xbf, 0x57, 0x89, 0xd3, + 0x2b, 0x1e, 0x6b, 0x07, 0x5d, 0x6d, 0x1b, 0xdb, 0x68, 0x1c, 0x58, 0x09, 0x05, 0xd6, 0x99, 0x26, + 0xff, 0x95, 0x5c, 0x83, 0xd2, 0xff, 0x01, 0xd8, 0xc4, 0x11, 0xca, 0xad, 0x76, 0x11, 0xda, 0x8b, + 0x0e, 0x0e, 0xb6, 0xb6, 0x1c, 0xde, 0x2d, 0x99, 0x5c, 0x77, 0xdf, 0x35, 0x27, 0x3b, 0x06, 0x97, + 0x2f, 0x21, 0x56, 0xbb, 0xb6, 0xc4, 0x7e, 0x17, 0x84, 0x93, 0x72, 0xc5, 0x01, 0x79, 0xac, 0x07, + 0xfc, 0xb9, 0x04, 0xb8, 0x27, 0xb8, 0x7a, 0x0f, 0x65, 0xf2, 0x2e, 0x22, 0x6c, 0xe9, 0x0e, 0x29, + 0x6f, 0x5a, 0xa8, 0x41, 0x74, 0xa5, 0x27, 0xf0, 0x9d, 0x1e, 0xb2, 0x37, 0xf0, 0xdb, 0x18, 0x20, + 0x44, 0x8c, 0xfe, 0xeb, 0xfe, 0x0f, 0x80, 0xf1, 0x01, 0x51, 0xe7, 0x45, 0x2c, 0x61, 0x3f, 0xe9, + 0xc0, 0x19, 0x1d, 0xa1, 0x6e, 0xdf, 0x71, 0x04, 0x0c, 0x3b, 0x2d, 0x5e, 0xa6, 0x66, 0xcb, 0x0c, + 0x0c, 0x4d, 0x3a, 0x36, 0x89, 0x16, 0x7e, 0x56, 0xb8, 0x12, 0xe9, 0x11, 0x3b, 0xbb, 0x04, 0xeb, + 0x42, 0xb4, 0x09, 0xdb, 0x03, 0x06, 0xe2, 0x13, 0xb5, 0x16, 0xe3, 0x93, 0xb8, 0xf7, 0x90, 0x1b, + 0x64, 0xa5, 0x64, 0x9f, 0x6e, 0x19, 0x80, 0x4b, 0x9d, 0x1a, 0x76, 0x43, 0xf7, 0x06, 0x8e, 0x21, + 0x67, 0x8a, 0x45, 0xa5, 0x8a, 0xed, 0x8d, 0x0e, 0xdb, 0x18, 0x7b, 0xec, 0x90, 0xee, 0xbf, 0x73, + 0xac, 0xe8, 0x6d, 0x25, 0x20, 0x9d, 0x67, 0xa1, 0x9d, 0x91, 0xe8, 0x4f, 0x4d, 0x18, 0x77, 0x1f, + 0x57, 0xe8, 0x8c, 0x3e, 0x34, 0x20, 0x0b, 0xa0, 0x3b, 0x7e, 0x1e, 0xf8, 0x83, 0x06, 0x28, 0x5c, + 0x6b, 0x83, 0x16, 0x1a, 0xf5, 0xdd, 0x62, 0xcb, 0xeb, 0xb6, 0x18, 0x1c, 0xc0, 0xe8, 0x75, 0x08, + 0x93, 0x4f, 0xf1, 0x16, 0xc7, 0x46, 0xea, 0x6a, 0xbd, 0x25, 0xd0, 0x85, 0x8c, 0xae, 0x02, 0xe6, + 0xcb, 0xf8, 0xea, 0xb7, 0x8d, 0x10, 0xe8, 0x29, 0x4b, 0xc1, 0x7e, 0xb4, 0xf6, 0x50, 0x18, 0xb1, + 0xed, 0x03, 0x8b, 0x10, 0x44, 0x9d, 0x48, 0x1a, 0xb2, 0x38, 0x3c, 0xb3, 0x37, 0x56, 0xaa, 0xed, + 0xeb, 0x3f, 0x36, 0x81, 0xec, 0x17, 0x52, 0x18, 0xd8, 0x56, 0x3c, 0x5e, 0xec, 0x09, 0x46, 0x06, + 0x24, 0x15, 0x6e, 0xc3, 0x3d, 0xd8, 0xeb, 0xf7, 0x3a, 0xc8, 0x01, 0x0e, 0x40, 0xeb, 0x93, 0x9a, + 0xf6, 0xed, 0x07, 0x58, 0x52, 0x14, 0x32, 0x0e, 0xe2, 0xf3, 0x3e, 0xb5, 0xab, 0xb2, 0x43, 0xf2, + 0xfa, 0xf2, 0xe8, 0xf2, 0x1d, 0x26, 0xfc, 0x74, 0x23, 0x0c, 0xb2, 0xc9, 0xa4, 0xbd, 0x07, 0x89, + 0xda, 0x77, 0x57, 0xc3, 0xd1, 0xe3, 0x6f, 0x01, 0x8a, 0x8f, 0x1c, 0xf6, 0x7d, 0x88, 0x4e, 0xfe, + 0x38, 0xd6, 0xff, 0x3d, 0xb7, 0x06, 0x39, 0xf9, 0xdb, 0x75, 0x12, 0x11, 0x1d, 0x20, 0x7d, 0xf1, + 0x74, 0x19, 0x9f, 0x29, 0x83, 0xbf, 0x1e, 0xbb, 0x7d, 0xcd, 0x3d, 0x7f, 0x42, 0xb4, 0x85, 0xf9, + 0x83, 0xd0, 0x24, 0x5b, 0x7d, 0xbd, 0xda, 0x8b, 0x87, 0x12, 0x9a, 0xb4, 0xf1, 0x89, 0x5b, 0x0d, + 0xd8, 0x8c, 0x60, 0x07, 0x92, 0xb9, 0x54, 0x37, 0x54, 0xc1, 0xa1, 0x4e, 0xba, 0x10, 0x22, 0x14, + 0x17, 0x2f, 0x0c, 0xe8, 0xc4, 0x9a, 0x09, 0x6b, 0x48, 0x07, 0x43, 0xfb, 0xfa, 0x32, 0xff, 0xe9, + 0x3d, 0x5e, 0x19, 0xc6, 0xd1, 0xe6, 0xdd, 0x01, 0xc7, 0x84, 0xdd, 0x57, 0x00, 0x40, 0x3d, 0x6e, + 0x6b, 0x7c, 0xee, 0x01, 0xc4, 0x45, 0xc8, 0x14, 0xd4, 0x8c, 0x74, 0x36, 0x18, 0xa8, 0x15, 0x31, + 0x8c, 0x2c, 0x05, 0x5f, 0x29, 0x1a, 0xdf, 0x01, 0xa3, 0x49, 0x75, 0xe5, 0x60, 0xb8, 0x39, 0xc4, + 0xdc, 0x10, 0xd7, 0x81, 0xc2, 0x25, 0x41, 0x55, 0xba, 0xff, 0x09, 0x3d, 0x5d, 0x2c, 0x72, 0x4d, + 0x75, 0x04, 0x3b, 0xf0, 0x09, 0x76, 0xbc, 0xc6, 0x7c, 0x02, 0x2d, 0x0d, 0x69, 0x02, 0x5d, 0xc8, + 0xfa, 0x47, 0xa9, 0x36, 0xc7, 0xfc, 0x36, 0x6d, 0x3e, 0xd9, 0x32, 0xa9, 0x9d, 0x30, 0x24, 0x4b, + 0x32, 0x9c, 0x68, 0x64, 0xa5, 0x97, 0x5b, 0x39, 0x3b, 0x9b, 0x00, 0x6e, 0x09, 0x4c, 0x71, 0x21, + 0x35, 0x9d, 0x0b, 0xfa, 0x85, 0x08, 0x1b, 0xf0, 0xeb, 0x0a, 0xe9, 0xa7, 0xb6, 0xe0, 0xa1, 0x1a, + 0xf7, 0xc7, 0x29, 0xf7, 0x75, 0x7f, 0xe7, 0x08, 0x8d, 0x55, 0x06, 0x01, 0xd0, 0x77, 0x9c, 0x76, + 0x15, 0xb8, 0xb7, 0x46, 0xc2, 0xd7, 0x08, 0x34, 0x46, 0x8d, 0x6f, 0x16, 0x34, 0xe2, 0xeb, 0xd2, + 0x54, 0x50, 0xcd, 0xdf, 0x51, 0xfb, 0xe8, 0x43, 0x09, 0x81, 0xc7, 0x06, 0x78, 0xba, 0x59, 0x0c, + 0xec, 0x63, 0xd1, 0x1c, 0x2d, 0x80, 0xfa, 0xfb, 0x14, 0x09, 0x1d, 0x10, 0x9f, 0x08, 0x00, 0x0b, + 0x89, 0xca, 0x7e, 0x07, 0xf8, 0x1c, 0xfd, 0x05, 0x4f, 0x00, 0x9d, 0xca, 0x3f, 0x9e, 0x2e, 0xa2, + 0x1c, 0xcf, 0x1c, 0xdb, 0x1c, 0xd8, 0xba, 0x5b, 0x2d, 0xd8, 0xd2, 0x3f, 0x76, 0xc9, 0x2e, 0x32, + 0x20, 0x0a, 0x96, 0x2a, 0x76, 0xd8, 0xa9, 0xf6, 0x1b, 0x46, 0x40, 0xff, 0x0b, 0xfb, 0xfa, 0x40, + 0x8d, 0x45, 0x5f, 0x12, 0x5c, 0x4e, 0xe7, 0x05, 0x10, 0x78, 0x14, 0x6a, 0xa8, 0xde, 0x78, 0xe8, + 0x59, 0xfd, 0x0f, 0x96, 0xa0, 0x7d, 0x6d, 0x74, 0xd4, 0x31, 0xb0, 0x2d, 0xfb, 0xe1, 0xc5, 0xf7, + 0x83, 0xb4, 0x70, 0x47, 0x81, 0xff, 0xd6, 0x6e, 0xed, 0x14, 0x85, 0x12, 0x85, 0x1c, 0xcf, 0x77, + 0x0d, 0x00, 0x20, 0x72, 0xf9, 0xf4, 0xbb, 0xff, 0x1f, 0xba, 0x5d, 0xf4, 0x5a, 0xdb, 0xfd, 0x3d, + 0x0a, 0x74, 0x85, 0xc9, 0xa0, 0x6e, 0x22, 0xc4, 0xbe, 0xd6, 0x11, 0x25, 0xab, 0x97, 0x83, 0x1e, + 0x60, 0x43, 0x08, 0x77, 0xb6, 0x1f, 0x60, 0x89, 0xfd, 0x7d, 0x69, 0x81, 0x89, 0x17, 0xe1, 0x51, + 0x4b, 0x3d, 0x02, 0x0d, 0xae, 0x95, 0x0b, 0x0c, 0x49, 0xd8, 0x99, 0xfe, 0xb7, 0x3c, 0x3c, 0x30, + 0x03, 0x57, 0x7f, 0x84, 0x00, 0x3c, 0x39, 0x77, 0xf9, 0xba, 0xbe, 0x3a, 0x39, 0x09, 0x18, 0x35, + 0x35, 0x7b, 0xeb, 0xd2, 0x2f, 0x43, 0xf7, 0xfc, 0xba, 0x2e, 0x14, 0xe4, 0xf4, 0x07, 0x64, 0x5d, + 0xee, 0xfa, 0x11, 0x99, 0x7a, 0x9d, 0x6a, 0x59, 0x0f, 0x61, 0x46, 0x8a, 0xf8, 0xeb, 0x39, 0x65, + 0x14, 0x37, 0x0a, 0xee, 0x43, 0x00, 0x31, 0xed, 0xf6, 0x7c, 0x2b, 0x35, 0xf1, 0x7c, 0x27, 0x89, + 0xfe, 0xf6, 0x3b, 0x8a, 0x23, 0xe3, 0x88, 0x84, 0xc0, 0xa3, 0x9c, 0xb2, 0x45, 0x6b, 0xad, 0x98, + 0x5a, 0x20, 0x38, 0x4c, 0x43, 0x32, 0x22, 0x5d, 0x3d, 0x89, 0x9c, 0xc1, 0xe7, 0x32, 0x83, 0x2e, + 0x23, 0xe3, 0xe1, 0xc8, 0x06, 0x83, 0x47, 0x54, 0xc3, 0x3e, 0xc3, 0xbb, 0x04, 0x67, 0x63, 0x74, + 0xd7, 0x89, 0xd9, 0x28, 0x33, 0x17, 0xf8, 0x7e, 0x4b, 0x01, 0xdd, 0xe0, 0x46, 0x3d, 0x30, 0xbf, + 0xf1, 0x0c, 0x3d, 0x39, 0x00, 0x7f, 0x77, 0x73, 0x83, 0xeb, 0x30, 0xf7, 0xeb, 0x26, 0x3d, 0x41, + 0x10, 0xc8, 0x5a, 0x3f, 0x37, 0xeb, 0x15, 0x3d, 0x61, 0x2a, 0x59, 0x02, 0x7a, 0x54, 0x3e, 0x97, + 0x09, 0xfd, 0xff, 0x16, 0x57, 0x39, 0xfb, 0x7d, 0x4b, 0x02, 0xd0, 0xc6, 0xf7, 0xef, 0x91, 0xfc, + 0x01, 0xda, 0x49, 0xeb, 0xb1, 0x57, 0x33, 0x42, 0xfc, 0x92, 0xcb, 0x10, 0x54, 0x92, 0x04, 0x53, + 0x76, 0xa0, 0x6f, 0xcb, 0x23, 0xe9, 0x48, 0xfe, 0xc4, 0x3c, 0x72, 0xb8, 0xad, 0xe9, 0x82, 0x5f, + 0x1f, 0x61, 0x72, 0x0d, 0x76, 0xe2, 0x53, 0x3c, 0x66, 0xdf, 0xcb, 0x3c, 0x62, 0x74, 0x46, 0x13, + 0xe0, 0x51, 0x3c, 0xba, 0xa3, 0x29, 0x88, 0x5e, 0x5b, 0xce, 0x8a, 0x05, 0x8e, 0x96, 0xfb, 0x44, + 0x47, 0x8d, 0x4c, 0x01, 0x11, 0xad, 0xee, 0x0d, 0xfc, 0x47, 0x3c, 0x6e, 0x72, 0xd2, 0x76, 0x0b, + 0xfc, 0x74, 0xff, 0x72, 0xc5, 0x76, 0x14, 0x3c, 0x78, 0x74, 0x2b, 0xf0, 0x3c, 0x76, 0x74, 0x11, + 0x28, 0x1e, 0xb6, 0xb0, 0x0a, 0x35, 0x7f, 0xbc, 0x04, 0x0d, 0xeb, 0xcd, 0xbc, 0x09, 0xeb, 0xc8, + 0xbc, 0x0b, 0xeb, 0xc3, 0xbc, 0x08, 0xeb, 0xbe, 0xbc, 0x07, 0xeb, 0xb9, 0xbf, 0x0c, 0xeb, 0xb4, + 0xeb, 0x3b, 0x14, 0xd1, 0xfd, 0x10, 0x3e, 0x5e, 0x06, 0xff, 0x9f, 0x30, 0x7c, 0x08, 0x7c, 0x60, + 0x47, 0x5b, 0xe4, 0x9b, 0x6e, 0x56, 0xeb, 0x93, 0xa5, 0x2d, 0x6c, 0x1c, 0x08, 0xf9, 0xe9, 0xfe, + 0x5c, 0x6e, 0xe9, 0x1f, 0xe8, 0xf0, 0x83, 0xc7, 0xbb, 0xbf, 0x79, 0xff, 0x09, 0x50, 0xdc, 0xff, + 0xe9, 0x99, 0xfd, 0x23, 0x31, 0x89, 0xbe, 0x03, 0xca, 0xb9, 0xd1, 0xf4, 0x2d, 0x44, 0x50, 0xbc, + 0x4f, 0x7f, 0x16, 0xbb, 0x68, 0x31, 0xda, 0x2c, 0x5d, 0x97, 0x7f, 0xfb, 0xa3, 0x68, 0x0e, 0xb7, + 0xfa, 0x7e, 0x20, 0x2e, 0x1c, 0x9f, 0xd6, 0x0f, 0x1c, 0x38, 0x7e, 0x13, 0x15, 0xa3, 0xaa, 0x0c, + 0x3e, 0xa9, 0xc1, 0x15, 0xd9, 0xdb, 0x0a, 0xff, 0x0e, 0x15, 0x46, 0x36, 0xec, 0xe9, 0x54, 0x49, + 0xe5, 0x3f, 0x54, 0x98, 0x09, 0xde, 0x58, 0x85, 0xdb, 0x74, 0xa1, 0xcb, 0x76, 0x75, 0x16, 0x3d, + 0x79, 0xc7, 0x06, 0x5b, 0x60, 0x30, 0xf6, 0xc0, 0xa2, 0x52, 0x10, 0x3b, 0xf4, 0xe9, 0xac, 0xfb, + 0x33, 0x91, 0x20, 0x7f, 0x7e, 0x34, 0x85, 0xff, 0x75, 0x30, 0x1d, 0x75, 0x77, 0x67, 0xc0, 0x25, + 0x01, 0xa1, 0x25, 0xdf, 0x5d, 0x0f, 0x67, 0x37, 0x88, 0x14, 0x83, 0xd6, 0xfa, 0x0a, 0x93, 0xb4, + 0x04, 0x6d, 0x80, 0x09, 0xc0, 0x2d, 0xbb, 0x34, 0x75, 0xfb, 0xc3, 0x46, 0x4b, 0x0c, 0xbb, 0xd6, + 0xe9, 0x69, 0x80, 0xfb, 0x3f, 0x57, 0xcd, 0x02, 0xe5, 0x58, 0x53, 0x56, 0xc5, 0xc0, 0x8e, 0xbd, + 0x8b, 0xde, 0x43, 0x26, 0x17, 0x1a, 0x56, 0x03, 0xbd, 0xc0, 0xf4, 0x1f, 0x26, 0x04, 0x6c, 0x1e, + 0xae, 0xaa, 0x17, 0x10, 0x3d, 0x0a, 0x41, 0xb6, 0x00, 0xb8, 0x5b, 0xff, 0xe8, 0xea, 0xff, 0xb4, + 0x02, 0xcd, 0x21, 0xb3, 0x5a, 0x1b, 0xb9, 0x92, 0x3a, 0xba, 0xd4, 0x54, 0x10, 0xb9, 0x78, 0x2d, + 0xd6, 0xff, 0xad, 0x30, 0xd9, 0x6a, 0x0b, 0x95, 0x1b, 0xcd, 0xd5, 0x06, 0xac, 0x5b, 0xef, 0xed, + 0x70, 0x21, 0x48, 0x73, 0x61, 0x20, 0x40, 0x0d, 0x8e, 0xd7, 0xd2, 0x83, 0xf9, 0xa4, 0xc1, 0x17, + 0xb6, 0x11, 0xf4, 0x50, 0xb7, 0xda, 0x7d, 0x0e, 0xe9, 0xf7, 0xdf, 0xf7, 0x21, 0x78, 0x83, 0xdf, + 0x00, 0xda, 0xe6, 0x2d, 0x5a, 0x1c, 0xf6, 0x85, 0xa6, 0x4c, 0x00, 0xdb, 0x85, 0x8b, 0x1e, 0x68, + 0x99, 0x9a, 0x72, 0x56, 0xa1, 0xa7, 0xdb, 0x04, 0x5e, 0x1b, 0xeb, 0x4e, 0x2f, 0x24, 0x15, 0x8a, + 0xe1, 0x87, 0x5e, 0x0c, 0x77, 0xd9, 0x13, 0x7b, 0x10, 0x15, 0x54, 0x1e, 0x46, 0x09, 0xd0, 0xdb, + 0xfc, 0x77, 0xd7, 0xe3, 0x4e, 0xe9, 0x95, 0xba, 0xd3, 0x76, 0x0f, 0xae, 0x47, 0xf6, 0x8a, 0x24, + 0x88, 0x27, 0x2e, 0xb7, 0x57, 0xfc, 0xeb, 0xa2, 0xe9, 0x55, 0x5d, 0x8d, 0x0f, 0xc3, 0xf8, 0xf1, + 0xdb, 0x01, 0x3c, 0x10, 0x73, 0xf0, 0xa6, 0x56, 0x4a, 0xdb, 0x08, 0x1a, 0x06, 0xf9, 0xe8, 0x4b, + 0x00, 0x5d, 0x5a, 0x19, 0xc0, 0x17, 0x12, 0x31, 0x1b, 0x80, 0x0a, 0x3a, 0x29, 0x2f, 0xa1, 0xad, + 0x7d, 0xe8, 0x0f, 0xff, 0xa1, 0xb6, 0x10, 0x2b, 0x16, 0xdd, 0x48, 0x27, 0x78, 0xff, 0x75, 0x73, + 0x6f, 0x69, 0x64, 0x63, 0x58, 0x25, 0xff, 0x00, 0x65, 0x21, 0xa8, 0x20, 0xb5, 0x20, 0xd4, 0xf7, + 0x20, 0xac, 0x20, 0xc5, 0x01, 0x7d, 0xca, 0x20, 0xbb, 0x20, 0xcf, 0xcd, 0x0d, 0xf8, 0x97, 0x22, + 0x77, 0x01, 0x54, 0x93, 0xcc, 0x16, 0x2a, 0xb5, 0x76, 0x22, 0x43, 0x9b, 0xd2, 0x53, 0x3d, 0x83, + 0x25, 0x28, 0xbe, 0xe8, 0xbd, 0xfe, 0xeb, 0xed, 0x15, 0xcc, 0xed, 0xe5, 0xc0, 0xb4, 0xc7, 0x9d, + 0x01, 0xa9, 0x19, 0xc3, 0x56, 0xcb, 0xd5, 0x80, 0x6d, 0xae, 0x06, 0xc0, 0x0e, 0x5b, 0xf2, 0x46, + 0x0a, 0x67, 0x30, 0xca, 0xfa, 0x30, 0xbf, 0x34, 0x72, 0x1e, 0x5d, 0x31, 0x1a, 0xc4, 0x88, 0xc3, + 0xae, 0xa9, 0xff, 0x4d, 0xf2, 0xf7, 0xd3, 0xea, 0x46, 0x84, 0x0b, 0xac, 0x5d, 0x3e, 0xeb, 0xee, + 0xdf, 0xe9, 0xfb, 0x39, 0x89, 0x6c, 0x71, 0x43, 0xe2, 0x39, 0x51, 0x5a, 0x3c, 0xf0, 0x6b, 0xa9, + 0xb4, 0xb1, 0x7f, 0x78, 0x00, 0x77, 0x5f, 0x0e, 0x07, 0xff, 0xb9, 0x0b, 0x00, 0xbf, 0xdf, 0x1f, + 0xf2, 0xae, 0xff, 0xd1, 0xe1, 0x89, 0xcf, 0x2e, 0x8b, 0x85, 0xe9, 0xa6, 0x1f, 0xff, 0xf5, 0x43, + 0x43, 0xff, 0xe0, 0xcd, 0xf9, 0x98, 0x54, 0xb5, 0x54, 0x47, 0xb2, 0x05, 0x6f, 0xb4, 0x95, 0x6d, + 0x11, 0xff, 0xde, 0x0e, 0x8c, 0xd9, 0x8b, 0x5f, 0xde, 0x52, 0x5a, 0xb9, 0xf6, 0x25, 0x97, 0xe8, + 0x0d, 0xb9, 0x08, 0x6b, 0x46, 0xb9, 0x6c, 0x44, 0xb0, 0xa1, 0xb9, 0xb5, 0xe4, 0x8b, 0x4f, 0x99, + 0x12, 0x85, 0x83, 0x4f, 0x0a, 0x82, 0xeb, 0x35, 0x57, 0x02, 0x6d, 0x7f, 0x27, 0x4b, 0xb1, 0x75, + 0xb1, 0x00, 0x4e, 0x5b, 0x26, 0x7d, 0xb3, 0x0d, 0x4c, 0x0b, 0xba, 0xc3, 0x13, 0x01, 0x5e, 0x06, + 0x0c, 0xd1, 0x48, 0x2a, 0x4b, 0x51, 0xda, 0x2d, 0xb7, 0xea, 0xa2, 0x10, 0x97, 0xd2, 0xec, 0xfd, + 0x6b, 0x5b, 0x0b, 0xdb, 0xb3, 0xca, 0x16, 0x32, 0xed, 0xfd, 0x29, 0xf7, 0xcb, 0x83, 0x7e, 0x75, + 0xb6, 0x11, 0x05, 0xfe, 0x96, 0x15, 0x0b, 0xbf, 0xc2, 0xa9, 0xfd, 0xdb, 0xff, 0x4e, 0x52, 0xef, + 0xe1, 0x8e, 0xc1, 0x26, 0xbc, 0x53, 0xe4, 0x41, 0x08, 0x2f, 0x57, 0x96, 0xfd, 0x43, 0x6b, 0x10, + 0x21, 0xe9, 0x7f, 0x74, 0x77, 0xbc, 0xfe, 0x24, 0xc8, 0x84, 0xf0, 0xec, 0xb8, 0x3f, 0xba, 0x64, + 0x79, 0xfd, 0xed, 0x4d, 0xb4, 0xfe, 0x56, 0xa3, 0x0f, 0x8c, 0x16, 0x56, 0x5b, 0xc1, 0x3b, 0xfe, + 0xc4, 0x73, 0x13, 0x2b, 0xc4, 0xf7, 0xd8, 0x2d, 0xf6, 0xfd, 0x7c, 0x11, 0x77, 0x06, 0x8c, 0xd0, + 0xad, 0x07, 0x14, 0xff, 0x74, 0x01, 0xc3, 0x0e, 0x5a, 0xb8, 0x9f, 0x21, 0xa6, 0xbb, 0x01, 0xff, + 0xc7, 0x16, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x20, 0xff, 0x4f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, + 0x77, 0x56, 0xcc, 0x8d, 0x97, 0xbb, 0xd1, 0xa5, 0xc3, 0xb4, 0x8d, 0x1a, 0xd7, 0xf6, 0x8b, 0xd3, + 0xb4, 0x4e, 0x05, 0x81, 0x00, 0x62, 0x16, 0x51, 0xae, 0xcf, 0xf4, 0x11, 0xdd, 0xb4, 0x4f, 0x0f, + 0xab, 0xd3, 0x16, 0x5a, 0x1f, 0x43, 0xc3, 0xcf, 0x7b, 0x88, 0xc4, 0x88, 0xd8, 0x10, 0x44, 0xff, + 0xce, 0x99, 0xc3, 0x00, 0x55, 0x8b, 0xfe, 0xec, 0x57, 0x52, 0x51, 0x53, 0x53, 0x8b, 0x37, 0x8d, + 0xd8, 0xb8, 0xdb, 0x00, 0x57, 0x17, 0x5b, 0xad, 0x72, 0x1e, 0x1b, 0x90, 0x0f, 0xff, 0xe8, 0x7b, + 0x16, 0x5b, 0x59, 0x5a, 0x5f, 0x5d, 0x6e, 0x30, 0x8b, 0xcb, 0xed, 0x19, 0x01, 0x57, 0xd3, 0x52, + 0x68, 0x3f, 0x68, 0xc2, 0x8a, 0xe5, 0xc1, 0xb4, 0x3d, 0xa3, 0x72, 0xca, 0x60, 0x07, 0x57, 0x00, + 0x13, 0x5d, 0x53, 0x78, 0x3e, 0x75, 0x1f, 0x48, 0xac, 0x32, 0x0b, 0x77, 0x68, 0xf8, 0x0c, 0x4e, + 0x3b, 0x00, 0xcb, 0x0a, 0x04, 0x28, 0x58, 0xdf, 0x8c, 0xf6, 0xe8, 0x3a, 0x16, 0x1b, 0xf5, 0xfa, + 0x2c, 0xfc, 0x34, 0xf2, 0x56, 0x1d, 0xa9, 0xd7, 0xfa, 0x50, 0x8b, 0x56, 0xf8, 0x50, 0x8e, 0x37, + 0xd5, 0xfb, 0x17, 0xb1, 0x06, 0x1e, 0x70, 0x8e, 0x37, 0x1b, 0x03, 0x0e, 0xd2, 0xc8, 0x12, 0x85, + 0xfa, 0xca, 0x12, 0x11, 0xfb, 0xb6, 0x0b, 0x1f, 0x1b, 0xad, 0x08, 0xa1, 0xfe, 0xce, 0x12, 0x99, + 0x29, 0xc1, 0x19, 0xd3, 0x18, 0xbc, 0x1d, 0xb1, 0x7f, 0xad, 0x3d, 0x1c, 0x85, 0x81, 0x74, 0xeb, + 0x0f, 0x26, 0x73, 0x37, 0x75, 0xdb, 0x7f, 0x6d, 0x74, 0x0e, 0xf2, 0x13, 0x29, 0x32, 0x0c, 0xca, + 0x20, 0x05, 0xcf, 0x5a, 0x3b, 0x18, 0x0c, 0x20, 0x50, 0x84, 0xf1, 0x6a, 0x7c, 0xdb, 0x1b, 0xeb, + 0x1f, 0xbd, 0xdf, 0x63, 0x77, 0xe4, 0x75, 0xe0, 0x89, 0x0b, 0xdd, 0xdd, 0x62, 0xc7, 0xd9, 0xd6, + 0x43, 0xb7, 0x91, 0x15, 0xc2, 0x36, 0x0f, 0xd3, 0x60, 0x6b, 0xa7, 0xd6, 0xdc, 0xfd, 0xad, 0x20, + 0x74, 0x3a, 0x57, 0x2c, 0x17, 0x52, 0xdd, 0xd0, 0xb4, 0x36, 0xbf, 0x15, 0x83, 0xf8, 0xff, 0x74, + 0x0f, 0x0d, 0x18, 0x5d, 0x6c, 0x1d, 0x45, 0x2f, 0x20, 0x4d, 0x06, 0x2b, 0x55, 0xa0, 0xe6, 0x2d, + 0xdf, 0x85, 0x5a, 0x24, 0xb4, 0x5f, 0x3c, 0x2a, 0x20, 0xb5, 0x8e, 0xb8, 0x22, 0x40, 0x32, 0xdb, + 0xaf, 0x07, 0x17, 0x5c, 0xf6, 0xd9, 0x35, 0xda, 0x7b, 0x4a, 0xb4, 0x0e, 0x13, 0x59, 0x12, 0x88, + 0x50, 0x34, 0x98, 0x09, 0x58, 0x90, 0xc7, 0xb7, 0x6c, 0x53, 0x1e, 0xc1, 0x52, 0x8e, 0xbf, 0xbe, + 0x6f, 0x06, 0x8b, 0x05, 0x8b, 0x6e, 0x4d, 0x8b, 0x4d, 0x35, 0x88, 0xb0, 0x12, 0x8b, 0x46, 0x59, + 0xf8, 0x7d, 0x0a, 0x8e, 0xdd, 0x6c, 0x38, 0x1e, 0x57, 0x2d, 0x91, 0xc5, 0x0d, 0x7f, 0x05, 0x7b, + 0x6a, 0x1c, 0x65, 0x89, 0x97, 0x89, 0x8f, 0x45, 0xfa, 0x0a, 0x19, 0xed, 0x83, 0xe5, 0x17, 0x4f, + 0x6d, 0x0c, 0x46, 0x61, 0xb6, 0x00, 0x89, 0xdf, 0x3c, 0x8c, 0x07, 0x07, 0x5d, 0xae, 0x8b, 0x76, + 0xc0, 0x7f, 0x0c, 0xe8, 0x2b, 0x4d, 0x9d, 0x16, 0xc3, 0xad, 0xf3, 0xf8, 0x00, 0x93, 0x50, 0x92, + 0x0b, 0x5f, 0x34, 0x02, 0xf7, 0xe2, 0x91, 0x77, 0x06, 0x04, 0xf7, 0xe3, 0xee, 0x03, 0xc8, 0x58, + 0x04, 0xb6, 0xd1, 0x81, 0x57, 0xdf, 0x7c, 0x8c, 0xd8, 0x8e, 0xc0, 0xfa, 0x83, 0xc9, 0xff, 0x33, + 0xc0, 0x5e, 0x48, 0xf7, 0xd1, 0x49, 0x16, 0x26, 0x5f, 0xf0, 0xf9, 0x17, 0x28, 0x80, 0xbb, 0x75, + 0xc6, 0xf6, 0xf3, 0x84, 0xd1, 0x0c, 0x02, 0xe9, 0x30, 0xc9, 0xc4, 0xb0, 0x24, 0xb1, 0xa1, 0x1f, + 0xa3, 0x7a, 0x8a, 0x17, 0x30, 0xdb, 0x77, 0xd6, 0x1a, 0xe8, 0x20, 0x54, 0xb2, 0x88, 0xb4, 0xed, + 0x00, 0x07, 0x98, 0x0b, 0x32, 0x43, 0xa5, 0x2d, 0xd6, 0xff, 0xeb, 0xe1, 0x3c, 0x2b, 0x74, 0xda, + 0xeb, 0xd9, 0xdd, 0x84, 0xc9, 0x71, 0xd8, 0x16, 0xaa, 0x36, 0x53, 0x4e, 0x0f, 0x39, 0xd0, 0x74, + 0x0b, 0x88, 0xde, 0x4b, 0xc5, 0x43, 0x4b, 0x05, 0x75, 0x81, 0xef, 0x89, 0x92, 0x32, 0xb8, 0x04, + 0x1f, 0x17, 0xd9, 0x47, 0x9d, 0x6f, 0xc7, 0x57, 0x8a, 0xff, 0xd1, 0xe9, 0xf3, 0xa5, 0x13, 0xc9, + 0xf3, 0xa4, 0x81, 0x5f, 0xc9, 0x5f, 0xbf, 0x53, 0x7a, 0x89, 0x0c, 0x92, 0x64, 0x12, 0x16, 0x6b, + 0xf0, 0x83, 0xea, 0x0d, 0x36, 0xfd, 0x77, 0x13, 0x2b, 0x36, 0xb6, 0x1f, 0x0b, 0xa4, 0x80, 0x3a, + 0x69, 0x11, 0x34, 0x25, 0x01, 0xd1, 0x5d, 0x46, 0x5c, 0x42, 0x83, 0x9f, 0xbf, 0xeb, 0xe8, 0x80, + 0x4f, 0x08, 0x02, 0x02, 0x22, 0xdb, 0xba, 0x0a, 0xe9, 0xe3, 0xe5, 0x1f, 0x53, 0x73, 0x35, 0xc8, + 0x82, 0xd0, 0x0c, 0xe0, 0xd6, 0x25, 0x4a, 0x6f, 0x0b, 0xf8, 0xb6, 0x24, 0xea, 0xe8, 0x64, 0x2b, + 0x44, 0xa1, 0x0e, 0x1e, 0x04, 0x34, 0x1c, 0xd3, 0xff, 0xc0, 0x9b, 0xd8, 0xe8, 0x28, 0xa6, 0x2e, + 0x1d, 0xe2, 0xe9, 0x27, 0x2e, 0x79, 0xff, 0x08, 0x92, 0xab, 0xd6, 0x2d, 0xca, 0x8f, 0xc1, 0x01, + 0x7c, 0xcb, 0x04, 0xc2, 0xe8, 0x47, 0xdb, 0x23, 0x70, 0x71, 0x0a, 0x13, 0xd8, 0x71, 0x75, 0x33, + 0x55, 0xd8, 0xdf, 0xd2, 0x77, 0x75, 0x2f, 0x80, 0xca, 0xe1, 0x02, 0xb4, 0x01, 0x2f, 0x71, 0x46, + 0x88, 0xaa, 0xd4, 0x6d, 0x54, 0x30, 0xed, 0xbf, 0x15, 0x38, 0xc5, 0x74, 0x4d, 0x84, 0xfe, 0xe4, + 0x74, 0x49, 0x3c, 0x63, 0x73, 0x32, 0x25, 0xf8, 0xc3, 0x75, 0x50, 0x1c, 0x74, 0x4a, 0x88, 0xec, + 0x2f, 0xd1, 0xe5, 0x89, 0x17, 0xc5, 0xeb, 0xcb, 0xa0, 0x1a, 0xd6, 0x68, 0x32, 0xdd, 0x01, 0x08, + 0x61, 0x3f, 0x82, 0xeb, 0xc2, 0x12, 0x14, 0xea, 0x80, 0x9f, 0x55, 0x09, 0x62, 0x06, 0x3f, 0xb0, + 0x77, 0x07, 0xf8, 0x3a, 0x6e, 0xfe, 0x74, 0x38, 0x94, 0xf3, 0x5a, 0x0d, 0x15, 0xf8, 0xd1, 0x3a, + 0x23, 0x28, 0xf3, 0x21, 0xa0, 0x7b, 0x6e, 0x75, 0xbf, 0x16, 0xfe, 0x2a, 0xeb, 0xb6, 0xeb, 0x16, + 0x17, 0x72, 0x75, 0xb2, 0x6f, 0x0c, 0xfc, 0x75, 0xab, 0x47, 0xf9, 0x5b, 0x01, 0x42, 0x03, 0xed, + 0xeb, 0xa4, 0xb1, 0x4f, 0xdc, 0xa0, 0xb1, 0x0a, 0x0d, 0xf3, 0xb6, 0x99, 0x13, 0xfe, 0xdf, 0x08, + 0x0f, 0x01, 0xeb, 0x90, 0x23, 0x27, 0x5b, 0x65, 0x87, 0x6f, 0x43, 0x75, 0x0b, 0x81, 0x52, 0x1f, + 0xe0, 0x13, 0x00, 0x95, 0xa0, 0xcb, 0x22, 0xd7, 0xa9, 0x95, 0x96, 0x1c, 0x8b, 0x76, 0xbd, 0xc7, + 0x88, 0xd0, 0x76, 0xa0, 0x1e, 0x2e, 0xeb, 0x95, 0x6e, 0x81, 0x70, 0xf6, 0xc3, 0xc8, 0xfd, 0x66, + 0x4a, 0x07, 0xfe, 0x40, 0x74, 0x5a, 0x80, 0xcc, 0x02, 0xdf, 0xf0, 0x52, 0xff, 0x76, 0x08, 0x00, + 0xb8, 0x1e, 0xce, 0x2f, 0xa5, 0xfd, 0xe1, 0x89, 0x44, 0x08, 0x7b, 0xe0, 0x6b, 0xa7, 0x6c, 0x6c, + 0x04, 0x0a, 0x0b, 0xdf, 0x8b, 0xf2, 0x7c, 0x04, 0x09, 0x5c, 0xef, 0x45, 0x06, 0x0a, 0x4d, 0x15, + 0x08, 0x73, 0x05, 0x0d, 0x41, 0xae, 0xc0, 0x40, 0x85, 0x80, 0xfc, 0x44, 0xd1, 0xa2, 0xf0, 0x06, + 0x05, 0xfa, 0xc9, 0xe8, 0xfd, 0x2f, 0x1b, 0xf1, 0xf7, 0x30, 0x68, 0x04, 0x0b, 0xa5, 0x16, 0x59, + 0xb6, 0x9e, 0xa4, 0xde, 0x22, 0x01, 0x74, 0x17, 0x0e, 0x65, 0x7f, 0x2a, 0x14, 0x0c, 0x10, 0x7c, + 0x72, 0x13, 0xdb, 0xba, 0x80, 0x1b, 0x75, 0x8a, 0xb8, 0xbd, 0xd0, 0xeb, 0xe7, 0x0c, 0xbd, 0xcc, + 0xea, 0xeb, 0x05, 0xf7, 0x2b, 0xeb, 0x3d, 0x60, 0xde, 0x30, 0x6a, 0xe9, 0xc0, 0xc3, 0x4f, 0xab, + 0x02, 0xe2, 0x18, 0xd9, 0x81, 0x07, 0x51, 0xd9, 0x66, 0x5a, 0xfe, 0xd2, 0x05, 0x5e, 0xee, 0x30, + 0xac, 0x38, 0x70, 0x11, 0x50, 0xba, 0x89, 0x51, 0x98, 0xf8, 0x51, 0xc2, 0xba, 0xff, 0x0c, 0x2e, + 0x4b, 0x76, 0xf9, 0xdb, 0x53, 0xdc, 0x90, 0xe8, 0xb8, 0x4c, 0xe6, 0x3c, 0xf6, 0x5b, 0xa1, 0x8b, + 0xe5, 0x1e, 0x1e, 0x9f, 0xfe, 0x75, 0x12, 0xbe, 0x20, 0x9f, 0x8b, 0x1c, 0x1b, 0xdc, 0x33, 0x3b, + 0x85, 0x4f, 0x01, 0x8d, 0x1e, 0xb5, 0xc4, 0xeb, 0xf1, 0x0b, 0xa7, 0x39, 0xa5, 0xc1, 0x3e, 0xc1, + 0x8b, 0x1f, 0xb5, 0x98, 0xba, 0x75, 0x0a, 0x90, 0xb8, 0xca, 0xcb, 0x89, 0xce, 0xdf, 0x8b, 0xd6, + 0x68, 0x16, 0xda, 0x36, 0x37, 0x2d, 0x21, 0x75, 0x03, 0x37, 0xa1, 0xa7, 0xbe, 0xe9, 0x04, 0x08, + 0x98, 0x9b, 0x4b, 0x99, 0x3d, 0xc0, 0xfd, 0xea, 0x89, 0x6c, 0xcf, 0x63, 0xff, 0x52, 0xbf, 0xea, + 0x8b, 0xff, 0x47, 0x0e, 0x15, 0x50, 0x6b, 0xc9, 0x9a, 0x9d, 0x98, 0x98, 0x1e, 0x9c, 0xeb, 0x9b, + 0x70, 0xc0, 0x9b, 0x1f, 0xe9, 0xdb, 0x3e, 0xff, 0x05, 0xc3, 0xf5, 0xff, 0x16, 0x70, 0x11, 0x5a, + 0x30, 0x8f, 0x5b, 0xde, 0x2d, 0x31, 0x0c, 0xdd, 0x03, 0x72, 0x11, 0xdb, 0x1c, 0x1a, 0x0f, 0x2a, + 0x59, 0x0e, 0x20, 0xdc, 0x30, 0x0b, 0x0f, 0x49, 0x99, 0x33, 0x04, 0xff, 0xfe, 0xf6, 0x44, 0x06, + 0x03, 0x74, 0x68, 0x6b, 0x31, 0x07, 0x7c, 0x07, 0x10, 0x75, 0x65, 0x15, 0xae, 0x23, 0x69, 0xa5, + 0x16, 0x91, 0xf1, 0x8b, 0x5c, 0x08, 0x99, 0x7c, 0x8e, 0xd1, 0x04, 0xea, 0xe0, 0x7c, 0x41, 0x35, + 0x31, 0x1e, 0x89, 0x05, 0x54, 0x68, 0x22, 0xb7, 0x16, 0x67, 0x31, 0xdd, 0x09, 0xc7, 0x38, 0x08, + 0x0a, 0x2b, 0xd6, 0x27, 0x90, 0xf5, 0x47, 0x04, 0xe8, 0x6b, 0x09, 0x08, 0x42, 0xc1, 0xce, 0x47, + 0xd6, 0x47, 0x16, 0x80, 0x95, 0xee, 0xbd, 0x6f, 0x22, 0x9f, 0xc6, 0xa1, 0x22, 0xb3, 0x7b, 0x64, + 0x07, 0x40, 0xaa, 0x40, 0x87, 0x54, 0xbf, 0x01, 0xbe, 0xf0, 0xf1, 0xe8, 0xfa, 0x2a, 0xeb, 0x64, + 0x94, 0x0b, 0xe0, 0x8f, 0x6c, 0xf6, 0xe8, 0x6c, 0x3b, 0x62, 0xe6, 0x76, 0x34, 0x2f, 0x9f, 0x81, + 0x03, 0xc2, 0x5b, 0x62, 0x58, 0x6b, 0x3b, 0x50, 0x49, 0x8c, 0x47, 0xf3, 0xfa, 0xd6, 0xff, 0x0e, + 0x7c, 0xbc, 0xff, 0x05, 0x06, 0x40, 0x08, 0x16, 0x13, 0xce, 0x0e, 0x0c, 0x74, 0x86, 0x01, 0x36, + 0x28, 0x8b, 0x00, 0x55, 0xa1, 0xb9, 0x27, 0xdd, 0x0c, 0xc1, 0x1f, 0x55, 0x83, 0xb5, 0x7d, 0x8d, + 0xd1, 0x0b, 0x80, 0x75, 0x5b, 0xfc, 0xf1, 0x96, 0x06, 0xb0, 0x27, 0x65, 0xac, 0xf9, 0xe0, 0xe1, + 0x1f, 0x6a, 0x78, 0x39, 0xc8, 0x76, 0x5a, 0x70, 0xcf, 0x1f, 0x4e, 0xfb, 0x8b, 0xff, 0x14, 0xe8, + 0x9f, 0xfb, 0x01, 0x7e, 0xfc, 0x29, 0x82, 0xf9, 0xb5, 0xf4, 0xbb, 0xe3, 0x29, 0x7c, 0x22, 0x52, + 0x3d, 0xfe, 0x37, 0x3b, 0x4c, 0x0a, 0x72, 0x4c, 0xec, 0x47, 0x8b, 0x45, 0x41, 0x98, 0x25, 0x5b, + 0x2f, 0xcb, 0xdc, 0xa9, 0x04, 0x13, 0xa9, 0xf9, 0x11, 0x7f, 0x76, 0x05, 0x30, 0xcb, 0x80, 0xe7, + 0x11, 0x2c, 0xe3, 0xfe, 0x3a, 0x0f, 0xd1, 0xed, 0xc8, 0xe0, 0xde, 0x8a, 0x80, 0x4c, 0x06, 0x05, + 0x48, 0xe9, 0x3d, 0xeb, 0x49, 0x98, 0xe6, 0x04, 0x63, 0x0f, 0x35, 0x47, 0x90, 0x7d, 0x39, 0x31, + 0xe9, 0x78, 0xff, 0x8c, 0x3c, 0xae, 0x36, 0xdd, 0xdd, 0x05, 0x1f, 0x63, 0xe9, 0x73, 0xbb, 0xff, + 0x06, 0x0b, 0x01, 0x4c, 0x6d, 0xd0, 0xa0, 0x6f, 0xa5, 0xe9, 0x64, 0xff, 0x74, 0x2e, 0x10, 0x32, + 0x69, 0x5c, 0x3c, 0xf7, 0x76, 0x26, 0x30, 0x35, 0x32, 0xa1, 0x8d, 0x3b, 0x45, 0xfb, 0xe6, 0xfa, + 0x83, 0x94, 0x42, 0x7b, 0xc6, 0x2c, 0x6b, 0xfd, 0xff, 0x4c, 0x02, 0x8a, 0x0f, 0x6c, 0x2b, 0x43, + 0x1d, 0xa9, 0x1c, 0x46, 0x4d, 0xc6, 0x0d, 0x81, 0xb1, 0x18, 0x93, 0x1e, 0x46, 0x7d, 0xae, 0xf7, + 0xed, 0x1c, 0x3d, 0x1a, 0xf7, 0xee, 0x18, 0xeb, 0xb2, 0x68, 0x9f, 0x74, 0xad, 0xeb, 0xba, 0xc9, + 0x0a, 0x69, 0x7f, 0xa2, 0xeb, 0xd7, 0x88, 0x56, 0x32, 0xa3, 0x13, 0xbf, 0x3b, 0x7e, 0xfa, 0x74, + 0x95, 0xeb, 0xa0, 0xab, 0xcb, 0x2f, 0x86, 0xce, 0x47, 0x9a, 0x02, 0x90, 0x40, 0xe4, 0x7b, 0x06, + 0x87, 0xd6, 0x0b, 0x21, 0xc0, 0x25, 0xae, 0xb8, 0x8b, 0xb7, 0x30, 0xd8, 0x64, 0x06, 0x87, 0xcf, + 0x7b, 0x0f, 0x54, 0x5d, 0xde, 0x89, 0xdf, 0x83, 0x37, 0x3b, 0x3b, 0x7c, 0x0b, 0x30, 0x60, 0x0b, + 0x4d, 0x30, 0x86, 0xdb, 0x17, 0x4d, 0x1b, 0x02, 0x68, 0x0a, 0x59, 0x1d, 0xf8, 0xe9, 0xa7, 0x57, + 0x61, 0xc1, 0x1f, 0xe7, 0x4d, 0xda, 0x01, 0x4e, 0xd0, 0x37, 0xc1, 0x29, 0xcf, 0x1a, 0x23, 0xe0, + 0x3d, 0x6d, 0x18, 0xc4, 0x8c, 0x05, 0x05, 0x45, 0xed, 0xd4, 0xfb, 0x96, 0xfa, 0x09, 0xd0, 0x0f, + 0xc1, 0x94, 0x01, 0x64, 0xf6, 0xf0, 0xeb, 0x5e, 0x84, 0x4c, 0xa5, 0xd8, 0x86, 0x14, 0x4e, 0xfb, + 0xea, 0x2f, 0xe9, 0x71, 0xff, 0xa1, 0xa9, 0xb3, 0x42, 0xe5, 0x0c, 0xb7, 0xa7, 0x65, 0x0a, 0x2b, + 0xcb, 0x44, 0x02, 0x39, 0xdb, 0xf8, 0x76, 0x76, 0xf9, 0x30, 0x58, 0xaa, 0x8b, 0xdd, 0x94, 0xca, + 0xf9, 0xa3, 0x33, 0xd4, 0x78, 0x01, 0x0c, 0x01, 0x50, 0x1a, 0xd6, 0xf6, 0x3b, 0x23, 0xe1, 0x74, + 0x09, 0x83, 0x15, 0x78, 0xc1, 0x7b, 0x1d, 0x28, 0x45, 0x96, 0x64, 0xb1, 0x12, 0x84, 0x40, 0xe8, + 0x68, 0x06, 0x95, 0x2f, 0x70, 0x94, 0xee, 0xef, 0x7e, 0xf8, 0x8a, 0x25, 0x47, 0xfc, 0xf2, 0x98, + 0x47, 0xe8, 0x41, 0x30, 0x77, 0xe7, 0x30, 0x74, 0x2d, 0x38, 0x8b, 0xf3, 0xc6, 0x1a, 0xbb, 0x3f, + 0x49, 0xff, 0x1c, 0xd6, 0x03, 0x97, 0x5c, 0x5f, 0xdb, 0x66, 0x2c, 0x47, 0x6c, 0x39, 0x0f, 0x44, + 0x1a, 0x03, 0xe5, 0x10, 0xb0, 0x76, 0xb3, 0x1b, 0xea, 0x3b, 0x12, 0x62, 0xe1, 0x75, 0xbc, 0x79, + 0x46, 0xcd, 0x83, 0x96, 0x7c, 0x64, 0x9f, 0x20, 0x7d, 0x5b, 0xbc, 0x16, 0x6a, 0x06, 0x5f, 0xb5, + 0x42, 0xd1, 0xe3, 0x89, 0x7f, 0x08, 0x87, 0x24, 0x9f, 0x68, 0xd0, 0xc9, 0xd0, 0x5c, 0x52, 0xf0, + 0x1e, 0x6f, 0xac, 0x21, 0x74, 0x1b, 0x4a, 0x70, 0xd6, 0xd3, 0x0a, 0xad, 0xc6, 0x47, 0xae, 0x7a, + 0xd3, 0x49, 0x49, 0x4a, 0xba, 0xe4, 0x08, 0xdd, 0xcb, 0xff, 0x97, 0xa8, 0x2f, 0xd5, 0x08, 0xeb, + 0x43, 0x7d, 0xc4, 0xcb, 0x8e, 0x46, 0x70, 0x86, 0x9f, 0x5b, 0xa8, 0x5e, 0x0d, 0xd3, 0x5a, 0x1a, + 0xbd, 0x20, 0xd8, 0xf2, 0x54, 0x51, 0x6c, 0x5b, 0x23, 0x3a, 0xb9, 0x30, 0x10, 0x5b, 0xf2, 0xc6, + 0x06, 0xd0, 0xa3, 0x67, 0x9a, 0x97, 0xed, 0x0d, 0x75, 0x26, 0xde, 0x16, 0x49, 0x30, 0xe8, 0x63, + 0x19, 0x82, 0xd6, 0x12, 0x3f, 0x09, 0xe3, 0x59, 0x30, 0x6b, 0x77, 0x75, 0xdc, 0x15, 0x69, 0x64, + 0x30, 0x75, 0x1b, 0x5d, 0x06, 0x42, 0x64, 0xdd, 0xc3, 0x0f, 0x23, 0xd4, 0x30, 0x3d, 0x2d, 0x44, + 0xc2, 0xd8, 0x09, 0x4a, 0x30, 0x2c, 0x3b, 0x40, 0xd0, 0x38, 0xf6, 0x02, 0x5e, 0xc4, 0x30, 0xf5, + 0x7b, 0xd7, 0xa2, 0x2c, 0x7a, 0x78, 0xa6, 0x37, 0xb1, 0x4f, 0x4e, 0x16, 0x08, 0x4f, 0x2b, 0xf9, + 0xf3, 0xb6, 0xa6, 0x6f, 0x19, 0x2d, 0x19, 0xc0, 0xd8, 0xff, 0xec, 0x40, 0x27, 0x43, 0xf9, 0x40, + 0x08, 0x1b, 0xc5, 0xc8, 0x7e, 0x10, 0x8c, 0xda, 0x26, 0xb3, 0xfd, 0xc6, 0x8e, 0xc2, 0x8b, 0xd7, + 0x32, 0xd4, 0x2f, 0x8b, 0xbd, 0x6d, 0xfa, 0x2b, 0xcf, 0x8f, 0x31, 0xc9, 0x83, 0xd9, 0x4b, 0xfb, + 0xdb, 0x17, 0x58, 0xb4, 0x20, 0x1b, 0x48, 0x57, 0x89, 0x1e, 0x11, 0x62, 0xe0, 0x69, 0xd2, 0xab, + 0xa7, 0xaa, 0x11, 0xd0, 0x2f, 0xa0, 0x56, 0xcf, 0xd4, 0xf5, 0x21, 0x5b, 0xe8, 0x92, 0x00, 0xb3, + 0x4e, 0x17, 0x03, 0xc6, 0xc3, 0xf8, 0xf1, 0x03, 0x72, 0x64, 0x23, 0xe4, 0xc7, 0xe2, 0x83, 0xe9, + 0x02, 0x2e, 0xf2, 0x6f, 0xf6, 0x65, 0x80, 0x7c, 0xf0, 0x01, 0x3a, 0x75, 0x5f, 0x2e, 0x2c, 0x27, + 0x98, 0x2e, 0x66, 0x4b, 0xab, 0xde, 0x00, 0xb8, 0x2b, 0x76, 0xea, 0xa9, 0x4c, 0x9a, 0x09, 0xd7, + 0x04, 0x0a, 0x0b, 0x0e, 0x61, 0x60, 0x19, 0x9b, 0x19, 0x83, 0x06, 0xab, 0x8a, 0x1f, 0x1a, 0x5c, + 0x75, 0x8e, 0x47, 0x04, 0xeb, 0x21, 0xf7, 0x40, 0x09, 0x70, 0x77, 0x17, 0xab, 0xeb, 0x80, 0xd4, + 0xba, 0x87, 0x5e, 0xec, 0x91, 0x7c, 0xbb, 0x41, 0x21, 0x40, 0x43, 0x5a, 0x79, 0x3e, 0x7b, 0x0e, + 0x64, 0x1e, 0xee, 0xf4, 0xd1, 0x38, 0xae, 0xbe, 0x5b, 0x42, 0xdd, 0xb5, 0xc6, 0x47, 0xba, 0x6f, + 0x04, 0x40, 0x85, 0x0d, 0xa8, 0xac, 0xd1, 0x61, 0xbc, 0x25, 0xe8, 0x52, 0x2f, 0x6e, 0x91, 0x74, + 0x0e, 0x79, 0x01, 0x6a, 0xcc, 0xec, 0x94, 0xe9, 0xf2, 0x54, 0xfa, 0xa6, 0xbf, 0xf6, 0x8d, 0x9e, + 0xe2, 0x7e, 0xee, 0x5c, 0xd6, 0x00, 0xb6, 0xff, 0x02, 0x72, 0xad, 0x49, 0xc6, 0x07, 0x5c, 0xf7, + 0x43, 0x8d, 0x45, 0x01, 0x75, 0x54, 0xa1, 0x6b, 0x8f, 0x76, 0xbd, 0xbd, 0x0a, 0x01, 0xfb, 0x68, + 0x7a, 0x89, 0x6e, 0x96, 0x5a, 0x80, 0xdd, 0x80, 0x75, 0x15, 0x43, 0x50, 0x6e, 0x74, 0xff, 0x2d, + 0x10, 0xbb, 0x2b, 0x7c, 0xff, 0x30, 0x1c, 0xeb, 0xe6, 0x50, 0xa3, 0xc6, 0x9d, 0x61, 0x7e, 0x57, + 0x6d, 0x8d, 0xe6, 0xb6, 0x48, 0x25, 0x2e, 0xae, 0x8a, 0x76, 0x4d, 0xe0, 0x8a, 0x85, 0x29, 0xa8, + 0xfe, 0x5b, 0x8c, 0x5e, 0x18, 0x61, 0xc1, 0xc4, 0xa2, 0xfe, 0x86, 0x01, 0xd2, 0x0a, 0x8a, 0xe1, + 0xb7, 0xbe, 0x75, 0x3b, 0xad, 0x46, 0x02, 0x6b, 0x0e, 0x75, 0x62, 0xf1, 0x86, 0x28, 0xb7, 0xad, + 0x04, 0x2e, 0x75, 0xf6, 0x51, 0x8d, 0x75, 0x01, 0xfe, 0xbb, 0x1a, 0x2a, 0x46, 0x67, 0x22, 0x28, + 0xd2, 0x83, 0xeb, 0x15, 0xb5, 0xf1, 0xcb, 0x65, 0x3d, 0x5a, 0xf6, 0xed, 0x10, 0x1e, 0x43, 0xf6, + 0x7a, 0x7a, 0x1b, 0xb6, 0x36, 0xc1, 0xc6, 0x75, 0xbb, 0xee, 0x09, 0xd2, 0xeb, 0xd1, 0xef, 0x05, + 0xd4, 0xe9, 0xf8, 0xfe, 0x77, 0x06, 0xde, 0x3c, 0x3a, 0x12, 0xe8, 0xc6, 0x4b, 0xd7, 0xba, 0x28, + 0x5c, 0xd6, 0x17, 0xa2, 0x75, 0xd9, 0xae, 0xa3, 0x2d, 0xbb, 0x2e, 0x84, 0xe9, 0x3f, 0xbb, 0xff, + 0x17, 0xe9, 0xc5, 0x57, 0xaa, 0x78, 0xec, 0xe9, 0xca, 0xfe, 0x87, 0x4f, 0xc8, 0x6b, 0xf3, 0x23, + 0x15, 0x43, 0x20, 0x47, 0x26, 0xb6, 0x41, 0x1d, 0x34, 0xbd, 0xff, 0x50, 0xcd, 0xaf, 0xec, 0xa9, + 0x2e, 0x70, 0x84, 0x22, 0xd4, 0x23, 0xbf, 0x69, 0x04, 0x5c, 0xad, 0x26, 0x0e, 0xf5, 0xe9, 0x94, + 0xfe, 0xbb, 0xfd, 0x87, 0xe8, 0x0b, 0x2e, 0x42, 0x3c, 0x61, 0x54, 0xad, 0x05, 0x10, 0xc6, 0xce, + 0xeb, 0x9d, 0x88, 0xef, 0x0c, 0xe1, 0xfd, 0xeb, 0xd0, 0x5d, 0x05, 0x0b, 0xe8, 0x2b, 0xeb, 0xd3, + 0xc3, 0x9b, 0x53, 0x9c, 0x46, 0x32, 0x92, 0x3e, 0x4f, 0x8a, 0xc2, 0xfd, 0xda, 0x07, 0xfc, 0x51, + 0xa3, 0xb4, 0x6d, 0x41, 0x60, 0xa6, 0xaa, 0xc3, 0x6b, 0x4b, 0x51, 0x8d, 0x81, 0x86, 0x74, 0x50, + 0x0b, 0xc7, 0xa7, 0x84, 0x2d, 0xaa, 0xb4, 0x02, 0x92, 0x08, 0x7f, 0xd9, 0x04, 0x41, 0xc6, 0x86, + 0x5b, 0x12, 0x3a, 0xaa, 0x88, 0xd5, 0x8c, 0x5c, 0x90, 0xd8, 0x0c, 0x72, 0x5e, 0x93, 0xe8, 0xff, + 0xf4, 0x19, 0xee, 0xdf, 0x98, 0x11, 0x39, 0xd3, 0x76, 0x18, 0x76, 0x94, 0x76, 0x2d, 0x74, 0x75, + 0x49, 0xd3, 0x56, 0xa8, 0x74, 0x68, 0xb1, 0xf1, 0xbc, 0x75, 0x21, 0xe6, 0x9e, 0xa5, 0xeb, 0xb0, + 0x8f, 0x8d, 0xae, 0xc6, 0x2f, 0x52, 0x62, 0xb7, 0xe6, 0x74, 0x4c, 0x1b, 0x81, 0x07, 0xad, 0xa8, + 0xe0, 0xe2, 0x0a, 0xa8, 0x06, 0xa5, 0xaf, 0xfb, 0x00, 0x20, 0xe8, 0xc9, 0x23, 0x19, 0x80, 0xd1, + 0x3e, 0xfb, 0x30, 0x35, 0xb9, 0x0e, 0x72, 0x5b, 0xdc, 0xd8, 0xe4, 0x24, 0x2f, 0x08, 0x24, 0x75, + 0x32, 0x03, 0x2a, 0x3a, 0xec, 0x2b, 0x2a, 0x5d, 0xa9, 0xe8, 0xcb, 0xb0, 0x63, 0xc2, 0x3c, 0x31, + 0x13, 0x18, 0xae, 0xdd, 0x7e, 0x1a, 0x02, 0x47, 0xb6, 0xf5, 0xe8, 0xf1, 0x2a, 0x4b, 0x73, 0x1c, + 0x1a, 0x73, 0x0e, 0x90, 0x1d, 0x64, 0xe9, 0x5f, 0xba, 0x74, 0xd7, 0x10, 0xbb, 0xaf, 0x40, 0x14, + 0xfb, 0x67, 0xbd, 0x2a, 0x3b, 0x86, 0x7a, 0xb7, 0x60, 0x0a, 0xeb, 0x85, 0xee, 0x34, 0x07, 0x4d, + 0xe0, 0xeb, 0xc6, 0xc4, 0xba, 0x08, 0x3a, 0xc4, 0xbb, 0xf0, 0x6a, 0x62, 0x3a, 0x36, 0x0e, 0x76, + 0x6c, 0x4c, 0xff, 0x5b, 0xb1, 0xff, 0x56, 0x4d, 0xc7, 0x1f, 0x0a, 0x0d, 0xd0, 0x52, 0x7c, 0x7b, + 0x8b, 0x77, 0x90, 0xd1, 0xc0, 0xa3, 0x55, 0x27, 0x1c, 0x98, 0xd0, 0x3a, 0x36, 0x09, 0xf6, 0x47, + 0x26, 0x5e, 0x81, 0x3f, 0x83, 0x37, 0x36, 0x29, 0x2d, 0x5a, 0x49, 0xee, 0x12, 0x40, 0x75, 0x23, + 0x21, 0x6b, 0xae, 0x12, 0x43, 0x6b, 0xe5, 0x60, 0x7c, 0x7c, 0x39, 0x8b, 0x37, 0x6c, 0x59, 0x46, + 0x1d, 0x7c, 0x37, 0x3d, 0x07, 0x9e, 0x28, 0x10, 0x5e, 0xb1, 0xe0, 0x73, 0x05, 0x26, 0x0e, 0x0b, + 0x49, 0xc3, 0xeb, 0xba, 0x49, 0x56, 0x6d, 0x03, 0xdd, 0xb3, 0x06, 0x66, 0x81, 0xff, 0x27, 0xda, + 0x7e, 0x16, 0x1e, 0x44, 0x16, 0x82, 0x19, 0x0f, 0x38, 0xb4, 0xd0, 0xfd, 0x03, 0xa1, 0x85, 0x35, + 0x99, 0x80, 0xae, 0x84, 0xfa, 0x02, 0x2e, 0x2b, 0x60, 0xe6, 0xd6, 0xac, 0x04, 0x5c, 0x99, 0xc7, + 0x7a, 0x57, 0xac, 0xaa, 0x5d, 0xb1, 0xe0, 0xfa, 0x6a, 0x91, 0xc3, 0x41, 0xe3, 0x58, 0xeb, 0xe0, + 0xc4, 0x70, 0x9e, 0x2c, 0x1d, 0xc3, 0x39, 0x00, 0xba, 0xa5, 0xf7, 0x07, 0x94, 0xa8, 0x67, 0x80, + 0x89, 0x9b, 0xda, 0x22, 0x39, 0xdb, 0xcb, 0x7e, 0x61, 0xca, 0x43, 0x3d, 0x63, 0xb5, 0x2c, 0x12, + 0xa3, 0xc3, 0x51, 0x1b, 0xd2, 0x0a, 0x6e, 0xca, 0x06, 0xf1, 0xe7, 0x2c, 0x01, 0xc6, 0xc0, 0x9b, + 0xe1, 0x76, 0x08, 0xb7, 0x2f, 0x36, 0x43, 0x06, 0xe2, 0x4e, 0xfa, 0x3a, 0x1a, 0x37, 0xb1, 0x63, + 0x81, 0x31, 0x6f, 0xba, 0x0f, 0x8a, 0x14, 0x97, 0xb7, 0x15, 0x47, 0x6b, 0x05, 0x04, 0xb1, 0x46, + 0xc6, 0xc2, 0x9b, 0x6d, 0xb1, 0x76, 0xfe, 0x0a, 0x45, 0xf4, 0x25, 0x7e, 0xb3, 0xd6, 0x2a, 0x1b, + 0xc0, 0x2e, 0x00, 0x40, 0x2d, 0x02, 0xf7, 0x2c, 0x87, 0xea, 0x72, 0xec, 0x36, 0x19, 0xd9, 0xe9, + 0x16, 0xf0, 0x60, 0xc6, 0x54, 0xe6, 0xb7, 0x68, 0x05, 0x2f, 0x26, 0x3e, 0xa5, 0xfa, 0x50, 0x86, + 0xf6, 0xaf, 0xf8, 0x5e, 0xf8, 0xb9, 0x81, 0x00, 0xbc, 0x49, 0x1b, 0x60, 0x2b, 0x06, 0x36, 0xe8, + 0xe8, 0x51, 0x0d, 0xb5, 0x0d, 0x04, 0xf7, 0x05, 0xa0, 0x7f, 0xfb, 0xc9, 0xfb, 0x16, 0x65, 0xfa, + 0x41, 0x2e, 0x90, 0xff, 0xb9, 0xd1, 0x9a, 0x0a, 0x93, 0x0a, 0xef, 0x20, 0x29, 0xfb, 0xe8, 0x2b, + 0x15, 0x26, 0xbb, 0x16, 0x56, 0x53, 0x8c, 0x3d, 0x1a, 0xd3, 0x0b, 0xfb, 0xb1, 0x6e, 0xf1, 0x6f, + 0x54, 0x75, 0x12, 0xf6, 0x30, 0x3a, 0x08, 0xfb, 0x85, 0x40, 0x8c, 0x0c, 0xdf, 0x42, 0x88, 0x20, + 0x50, 0xcc, 0xaa, 0x61, 0xdc, 0xae, 0xa6, 0x12, 0x6a, 0x1c, 0x46, 0x13, 0x50, 0x15, 0x66, 0xd2, + 0x26, 0x10, 0xea, 0xbb, 0x49, 0x5b, 0x30, 0x36, 0x0a, 0xa6, 0x40, 0x1b, 0xa1, 0xeb, 0xa0, 0x2b, + 0x56, 0x83, 0x07, 0xf8, 0x80, 0xe8, 0x2a, 0x2c, 0xef, 0xe5, 0x1e, 0x89, 0xc1, 0x41, 0xe6, 0xba, + 0x70, 0x0c, 0xbd, 0x74, 0x0e, 0x4b, 0x9a, 0x74, 0x7c, 0x0b, 0x68, 0xca, 0xef, 0x12, 0xcb, 0x49, + 0x81, 0xcb, 0xde, 0x24, 0x01, 0x6b, 0xf8, 0x0c, 0x92, 0x54, 0xca, 0x98, 0x49, 0xa1, 0xa3, 0x0f, + 0x52, 0x01, 0x03, 0xb2, 0xa3, 0xd5, 0xd2, 0xfa, 0xaf, 0x85, 0xfd, 0x0a, 0xba, 0x78, 0x0c, 0xe8, + 0x85, 0x8a, 0x47, 0x4d, 0x7b, 0x03, 0x28, 0x0b, 0x0d, 0x55, 0x76, 0x8f, 0x46, 0xbe, 0x21, 0x22, + 0x77, 0xce, 0xfb, 0x1a, 0x7d, 0x21, 0x8a, 0x5e, 0xbe, 0x30, 0x0b, 0x2b, 0x87, 0x03, 0xd3, 0xf9, + 0x15, 0x80, 0x7e, 0xbf, 0x6d, 0x0f, 0x05, 0xf2, 0xc0, 0x5c, 0x75, 0x09, 0xc5, 0xc1, 0xc2, 0x87, + 0x6d, 0x63, 0x8a, 0x1d, 0x42, 0xb0, 0xd9, 0xf8, 0x21, 0xb7, 0x15, 0x7d, 0x01, 0x94, 0x3a, 0x0a, + 0x4f, 0xd0, 0xfe, 0x06, 0xd4, 0xd7, 0x2f, 0x53, 0x5b, 0x3f, 0x2a, 0x08, 0x74, 0x0b, 0x7f, 0x72, + 0xc5, 0xe5, 0x4e, 0x28, 0x98, 0x83, 0x52, 0xbe, 0x86, 0x2e, 0xff, 0xe8, 0xf6, 0x25, 0x20, 0x95, + 0xf8, 0xf6, 0xb8, 0x89, 0x0f, 0x3a, 0x2f, 0x2c, 0xb7, 0xe7, 0x63, 0x10, 0x0a, 0x1d, 0xd8, 0x05, + 0x6c, 0xba, 0xd3, 0x64, 0xd9, 0x02, 0x66, 0x65, 0x68, 0xe0, 0x6a, 0xe9, 0xb1, 0x25, 0x8e, 0xe2, + 0x4e, 0xba, 0x37, 0xbb, 0xfb, 0xe1, 0xee, 0x75, 0x90, 0x31, 0x28, 0xa1, 0xa9, 0xc1, 0x5b, 0x02, + 0x7e, 0x2d, 0x7a, 0x42, 0xf3, 0x3a, 0xda, 0x22, 0x8e, 0xe1, 0xab, 0xc3, 0xd3, 0xe0, 0x1a, 0xd6, + 0x38, 0x40, 0xfd, 0x7e, 0x01, 0xe8, 0xed, 0x2b, 0x3a, 0xae, 0x96, 0x1b, 0x0e, 0xdf, 0xd6, 0xeb, + 0x06, 0xeb, 0x69, 0x6e, 0x13, 0x7a, 0x01, 0x3b, 0xd9, 0x02, 0x2d, 0x6b, 0x5f, 0x2f, 0xa4, 0xaa, + 0xbb, 0x18, 0x19, 0x46, 0x42, 0xb6, 0xc9, 0x7a, 0x5b, 0x0e, 0x39, 0x76, 0xe8, 0xb7, 0x35, 0x33, + 0x04, 0xbb, 0x2d, 0xd4, 0x2c, 0x6e, 0xe8, 0x7c, 0x00, 0x7a, 0x7e, 0x1e, 0x70, 0xdb, 0x05, 0x56, + 0x73, 0x17, 0xc2, 0x9b, 0x0a, 0xd6, 0xbd, 0xfe, 0x19, 0xbc, 0xdc, 0x81, 0x4c, 0x04, 0x2b, 0x6f, + 0x1e, 0xdb, 0xda, 0x80, 0x6f, 0x0a, 0x92, 0xe9, 0xba, 0x0d, 0x38, 0x4e, 0xe1, 0xe8, 0x61, 0xee, + 0x11, 0xc2, 0x0f, 0x72, 0x11, 0x37, 0x0b, 0x4d, 0x7e, 0x83, 0x20, 0x98, 0x2d, 0x61, 0x00, 0xd0, + 0x8c, 0x60, 0xb1, 0xb5, 0x64, 0xbd, 0x81, 0x44, 0x0e, 0x8b, 0xad, 0xe2, 0x05, 0x96, 0x10, 0x6a, + 0x5d, 0x12, 0x8a, 0xa0, 0xfe, 0x2d, 0x47, 0xad, 0x98, 0x53, 0xb5, 0xfd, 0x0c, 0xbb, 0x1d, 0x56, + 0x64, 0x15, 0x7d, 0x66, 0xe8, 0x54, 0x2c, 0x22, 0xf4, 0x8d, 0xef, 0x9a, 0x0c, 0x44, 0xb6, 0xed, + 0x54, 0xde, 0xdf, 0x54, 0x22, 0x8b, 0xd9, 0x08, 0x8b, 0xb6, 0x44, 0x20, 0x0b, 0xcc, 0x16, 0xdb, + 0x08, 0x14, 0x05, 0x1b, 0x1c, 0x14, 0xb9, 0x8b, 0x44, 0x0c, 0x70, 0x1e, 0x99, 0x0a, 0xe0, 0xda, + 0x06, 0x0a, 0xe6, 0x82, 0x56, 0xcc, 0x02, 0xd9, 0x3e, 0x28, 0x5b, 0x04, 0x2a, 0x3c, 0x2c, 0xf3, + 0x2e, 0xcb, 0x30, 0x98, 0x56, 0x10, 0xee, 0x32, 0x00, 0x2d, 0x96, 0x24, 0x26, 0x24, 0x54, 0xb1, + 0xbf, 0x31, 0x0b, 0xd2, 0x78, 0x16, 0x0b, 0xfe, 0xc9, 0x79, 0x41, 0xf7, 0xd9, 0xf7, 0xdb, 0x2d, + 0x19, 0x06, 0x33, 0x85, 0x7c, 0xd5, 0xf7, 0xda, 0xbe, 0x82, 0x83, 0xda, 0x00, 0xc3, 0xc1, 0x07, + 0x74, 0x1c, 0x12, 0x86, 0xb5, 0x60, 0x82, 0x09, 0xb6, 0xcd, 0x0f, 0xc3, 0x0a, 0x61, 0x2e, 0xb7, + 0x27, 0x75, 0x1a, 0xa9, 0x4b, 0x5a, 0x7f, 0x43, 0x3b, 0xda, 0x77, 0x09, 0x8b, 0xf5, 0xc8, 0x8b, + 0xc2, 0x2b, 0x2e, 0x4a, 0xf3, 0x91, 0xd1, 0x02, 0x0a, 0x55, 0x2d, 0xab, 0xff, 0xc9, 0xc3, 0x3b, + 0xca, 0x72, 0x1a, 0x75, 0x10, 0xfa, 0x3b, 0xd8, 0x77, 0x0c, 0x2b, 0xdb, 0xeb, 0xd8, 0x10, 0x5a, + 0x1d, 0x1a, 0xcf, 0xc3, 0xef, 0x07, 0xdb, 0x93, 0x87, 0xca, 0xff, 0xc3, 0x55, 0x56, 0x2b, 0xf6, + 0x8b, 0xee, 0x03, 0xad, 0xdb, 0x42, 0xee, 0x72, 0x11, 0x45, 0x2a, 0xe5, 0xf5, 0x77, 0x04, 0xff, + 0x76, 0xef, 0xf8, 0x13, 0xf6, 0x4d, 0x78, 0x20, 0xf6, 0xd1, 0xd9, 0xd1, 0xdb, 0x34, 0xfe, 0x19, + 0xca, 0xf5, 0x72, 0xf0, 0x03, 0xee, 0x0f, 0x0c, 0xd1, 0xe9, 0x5f, 0x03, 0xc3, 0x13, 0xd1, 0xf7, + 0x73, 0xf1, 0xeb, 0xdf, 0x07, 0xb7, 0x4e, 0x8b, 0xca, 0xfe, 0x8b, 0xc6, 0x33, 0xd2, 0x5e, 0x5d, + 0xc3, 0x17, 0x73, 0x37, 0x03, 0xdb, 0x00, 0x2a, 0x00, 0x20, 0xff, 0x4e, 0x55, 0x4c, 0x4c, 0x20, + 0x61, 0x73, 0x73, 0xff, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0xc5, 0x64, 0x65, 0xb6, + 0xa4, 0x63, 0x02, 0xfb, 0x64, 0x00, 0x4e, 0x6f, 0x0c, 0x5b, 0x10, 0x6f, 0xf6, 0x75, 0x67, 0x68, + 0x20, 0x18, 0xff, 0x6d, 0x6f, 0x72, 0x79, 0x00, 0x63, 0x6f, 0xff, 0x6e, 0x00, 0x0d, 0x0a, 0xfb, + 0xb9, 0x0b, 0x07, 0xf8, 0x8e, 0xc1, 0xbb, 0x9a, 0xa0, 0xb4, 0xa2, 0x6e, 0xf3, 0xe3, 0xf0, 0x25, + 0x09, 0xff, 0x1e, 0x7c, 0x11, 0x26, 0x8c, 0x1e, 0x76, 0x11, 0xd9, 0x03, 0xdc, 0x11, 0xdb, 0x8e, + 0x67, 0xe3, 0x77, 0x15, 0x7e, 0x11, 0x8b, 0xec, 0xd3, 0xd1, 0xea, 0x01, 0xfe, 0x26, 0x80, 0x3e, + 0x7a, 0x11, 0x02, 0xd1, 0x3e, 0xab, 0x43, 0x08, 0x7f, 0x8c, 0xc0, 0x2b, 0xc8, 0x3b, 0xd1, 0xe9, + 0x72, 0x0b, 0xbb, 0x59, 0xbf, 0x23, 0x35, 0x8c, 0xca, 0xe9, 0xd8, 0xb5, 0x02, 0x12, 0xaa, 0xfb, + 0x19, 0xdb, 0xe3, 0x01, 0x53, 0x7b, 0xbb, 0xfe, 0xff, 0x3e, 0xa5, 0x74, 0xfb, 0xda, 0x03, 0xd8, + 0x26, 0xa1, 0x57, 0x6d, 0x8e, 0x30, 0xe3, 0xd8, 0xb4, 0x4a, 0x1f, 0x7e, 0x8c, 0xdf, 0x8e, 0xc7, + 0xbf, 0xb7, 0x82, 0x8a, 0x4d, 0x12, 0x44, 0xfe, 0xed, 0xfc, 0xb0, 0x20, 0xf3, 0xae, 0x2d, 0x29, + 0xdd, 0xff, 0xba, 0x8b, 0xc2, 0xed, 0x26, 0x8b, 0x3e, 0x82, 0x6e, 0x87, 0x3e, 0x95, 0x6e, 0x06, + 0x97, 0x11, 0x37, 0x8a, 0x41, 0xf3, 0xff, 0xa4, 0x2a, 0xc0, 0xaa, 0xaa, 0x4f, 0xb4, 0x30, 0x6f, + 0x35, 0x26, 0xa2, 0x78, 0x6f, 0x16, 0x88, 0x26, 0x79, 0x6e, 0x4e, 0xcf, 0x3c, 0x85, 0x8f, 0xe1, + 0x58, 0x8e, 0x1e, 0xeb, 0x42, 0x41, 0xf1, 0xbd, 0x00, 0x01, 0xbe, 0x69, 0x0d, 0x20, 0x20, 0x3d, + 0xd5, 0xdf, 0x6c, 0x9b, 0x81, 0xbf, 0x38, 0x37, 0x75, 0x27, 0x80, 0xff, 0x7c, 0x04, 0x3d, 0x75, + 0x21, 0x83, 0xcd, 0x01, 0x97, 0xeb, 0x6c, 0x66, 0x0a, 0xa1, 0x0e, 0xcd, 0xb9, 0x0c, 0x20, 0xb8, + 0x13, 0x10, 0x8a, 0xd6, 0x79, 0x09, 0x82, 0xdf, 0xa2, 0x07, 0x81, 0xe5, 0xff, 0xa1, 0xfe, 0x9d, + 0x60, 0x05, 0x6c, 0x3e, 0xac, 0x75, 0x0f, 0x6a, 0x75, 0xf7, 0xba, 0xac, 0x46, 0x46, 0x0d, 0x4b, + 0xa4, 0x8e, 0x0b, 0xbc, 0xf1, 0xf6, 0x89, 0x36, 0x99, 0x11, 0x80, 0xdb, 0x9b, 0x69, 0xdc, 0xff, + 0x8b, 0xc5, 0xa2, 0x84, 0x11, 0x20, 0x26, 0x14, 0xdd, 0x13, 0x89, 0x99, 0xb9, 0x0b, 0x2a, 0xbf, + 0xd1, 0x8e, 0x13, 0xa2, 0x53, 0x50, 0xfa, 0x2a, 0xf5, 0x96, 0x67, 0x85, 0x1b, 0x07, 0x18, 0xb8, + 0xed, 0x98, 0x37, 0xa3, 0x08, 0xfd, 0x8c, 0x0e, 0x87, 0x11, 0xa3, 0x89, 0xd2, 0x06, 0x8b, 0xcd, + 0x8d, 0x8f, 0xfb, 0x11, 0x33, 0xed, 0xb8, 0x97, 0x19, 0x66, 0x91, 0xd6, 0x93, 0x11, 0x76, 0xa8, + 0x16, 0xdd, 0x21, 0x17, 0xc1, 0x29, 0x50, 0x7f, 0xe4, 0xda, 0xfc, 0x8d, 0x8d, 0x3e, 0x9a, 0x6a, + 0xeb, 0x05, 0xe4, 0x1b, 0x0e, 0x01, 0xfe, 0xf3, 0xaf, 0x74, 0x39, 0x5b, 0xb8, 0x06, 0x1b, 0x3d, + 0xbc, 0x1a, 0xd1, 0xa1, 0x53, 0xbf, 0x74, 0x8c, 0xcf, 0x8e, 0xdf, 0xba, 0xda, 0x35, 0x35, 0x19, + 0x2b, 0xb7, 0x42, 0xe4, 0xd4, 0x1f, 0xbc, 0x6d, 0xf2, 0xfc, 0xac, 0x46, 0x97, 0x81, 0x94, 0x7f, + 0xce, 0x2b, 0xca, 0x49, 0xb4, 0x40, 0x6b, 0x14, 0x1e, 0xb8, 0x39, 0x35, 0xb9, 0x57, 0x7c, 0x0b, + 0x83, 0x83, 0x74, 0xba, 0x0f, 0x5b, 0x34, 0x21, 0xed, 0x58, 0xb4, 0x4c, 0x0c, 0xc2, 0x4f, 0x70, + 0xf4, 0xff, 0x20, 0x57, 0x61, 0x74, 0x63, 0x6f, 0x6d, 0xff, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, + 0x31, 0x36, 0xfe, 0x20, 0x52, 0x75, 0x6e, 0x2d, 0x54, 0x69, 0x5f, 0x20, 0x73, 0x79, 0x73, 0x1b, + 0x09, 0x6d, 0xb7, 0x2e, 0x18, 0x6f, 0x70, 0xc6, 0x79, 0x72, 0x20, 0xc6, 0x68, 0x10, 0xfb, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x03, 0x6e, 0x19, 0x6e, 0x74, 0x5e, 0x62, 0x75, 0x74, 0x37, 0x1f, 0x73, + 0x20, 0xfb, 0x32, 0x30, 0x30, 0x32, 0x2d, 0x04, 0x76, 0x32, 0x35, 0x31, 0xdb, 0x50, 0x0f, 0x74, + 0xb6, 0x69, 0x1b, 0x73, 0xc0, 0x3a, 0xe5, 0x43, 0xe3, 0x53, 0x79, 0x62, 0x6a, 0x7f, 0x65, 0x2c, + 0x20, 0x49, 0x6e, 0x63, 0x6f, 0x23, 0x31, 0x39, 0x38, 0xdf, 0x38, 0x2d, 0x33, 0x2e, 0x00, 0x6b, + 0xc5, 0xe2, 0xbe, 0xd8, 0x58, 0xc3, 0xcb, 0xcb, 0x0d, 0x27, 0x15, 0x97, 0x4a, 0x1e, 0x8a, 0x52, + 0xc8, 0x44, 0xee, 0xf8, 0xe0, 0xe2, 0xef, 0x5f, 0x1f, 0xb0, 0x3f, 0x9c, 0x89, 0x6d, 0x86, 0x2b, + 0x36, 0x26, 0x08, 0x09, 0xcd, 0x07, 0xe8, 0xa8, 0xa9, 0x0c, 0x23, 0x5a, 0x54, 0x29, 0x96, 0xf0, + 0xf7, 0xc6, 0x36, 0x71, 0x08, 0xac, 0x03, 0x5f, 0x44, 0xc3, 0x02, 0x37, 0x70, 0x04, 0x84, 0x78, + 0x3c, 0x37, 0x82, 0xc7, 0x02, 0x11, 0xb0, 0xd0, 0x17, 0xce, 0xf1, 0x0f, 0x98, 0x0e, 0x4a, 0x5e, + 0xc7, 0x12, 0x75, 0xde, 0xda, 0x74, 0x02, 0x2a, 0x29, 0xbe, 0xc4, 0xef, 0xd5, 0x41, 0x56, 0x04, + 0xd5, 0x57, 0xd3, 0x58, 0x32, 0x41, 0x4f, 0x5a, 0x64, 0xa3, 0xe7, 0x87, 0x1e, 0x54, 0x01, 0xd5, + 0xb2, 0x88, 0x2b, 0x2c, 0x33, 0xc2, 0x74, 0xc5, 0xe8, 0x27, 0xee, 0xe9, 0xd4, 0x63, 0xfe, 0x77, + 0x23, 0xe8, 0xc2, 0x29, 0x10, 0xf0, 0xbd, 0xc8, 0x2f, 0x49, 0xe9, 0x51, 0xfe, 0x05, 0xba, 0xea, + 0x2f, 0xfe, 0x2b, 0xdd, 0x7c, 0x50, 0xe8, 0xc4, 0x0b, 0x5b, 0x01, 0x02, 0xfd, 0x2b, 0xc0, 0xc3, + 0x73, 0x05, 0xe8, 0x2b, 0x50, 0x09, 0x14, 0x18, 0x4d, 0x61, 0xcf, 0x50, 0xc8, 0x04, 0x5d, 0x79, + 0x08, 0xbb, 0xb8, 0xc5, 0x99, 0xf7, 0x5d, 0xc3, 0x7e, 0xf4, 0x16, 0x62, 0xee, 0xd2, 0x0d, 0xfc, + 0x6f, 0x4d, 0x81, 0xff, 0xfd, 0xd0, 0xf4, 0x7c, 0x6d, 0x63, 0xf4, 0x93, 0x1e, 0x01, 0xaa, 0xc7, + 0xd8, 0x51, 0x10, 0x97, 0x8b, 0x7d, 0x12, 0x00, 0x34, 0x50, 0xc2, 0x46, 0x25, 0x76, 0x4f, 0x91, + 0xd4, 0x0c, 0xdf, 0x8d, 0x85, 0x6c, 0x07, 0xe8, 0x5e, 0x70, 0x7f, 0x19, 0x9d, 0x04, 0xbf, 0x8d, + 0x45, 0x03, 0x99, 0xb1, 0x02, 0xff, 0xd3, 0xe2, 0x1b, 0xc2, 0xd3, 0xf8, 0xbb, 0x6d, 0xd5, 0x01, + 0x99, 0xca, 0xff, 0x15, 0x72, 0x42, 0xc2, 0xe1, 0xf8, 0x99, 0x22, 0x7f, 0xea, 0x8b, 0x4e, 0xf6, + 0x01, 0xc1, 0x41, 0xba, 0x4d, 0x11, 0xd0, 0x2d, 0x9e, 0x6f, 0x2a, 0x63, 0xbb, 0x64, 0x7e, 0x5d, + 0x99, 0x29, 0xf9, 0x13, 0x19, 0x1c, 0x85, 0x2b, 0x4d, 0x04, 0x01, 0x78, 0x14, 0x95, 0xdc, 0xd2, + 0x2a, 0x7e, 0xd1, 0xd7, 0x48, 0xa8, 0xa1, 0x9f, 0x76, 0x76, 0xf4, 0x13, 0xcc, 0xfb, 0x05, 0x96, + 0xff, 0x11, 0xd3, 0x99, 0x01, 0xc8, 0x11, 0xda, 0xbb, 0x0a, 0x5e, 0x02, 0xd0, 0xf9, 0x16, 0xf5, + 0x88, 0x18, 0xdb, 0x17, 0x7d, 0x5b, 0x04, 0x6d, 0x99, 0x77, 0xc9, 0xe8, 0x3f, 0xea, 0x47, 0x75, + 0x09, 0x07, 0x9d, 0x26, 0xf0, 0x22, 0x29, 0x3f, 0x77, 0x2b, 0xea, 0xd0, 0x00, 0xdb, 0x2e, 0x07, + 0xdf, 0x5b, 0x15, 0xc7, 0xda, 0x11, 0xd6, 0xd0, 0x86, 0x55, 0xc4, 0x26, 0x83, 0xba, 0xb0, 0x7c, + 0x32, 0x34, 0x20, 0x00, 0xbd, 0xe8, 0x51, 0x72, 0x2a, 0x16, 0xd1, 0x85, 0x5e, 0x6e, 0x47, 0x00, + 0x81, 0xad, 0xa4, 0xc1, 0xae, 0x83, 0xb8, 0x68, 0xeb, 0xe2, 0x6e, 0x12, 0xec, 0x0d, 0xe9, 0x2d, + 0x5e, 0x74, 0x18, 0xff, 0xd3, 0xff, 0x4a, 0x51, 0x95, 0xbb, 0x12, 0x10, 0xdb, 0xfe, 0xef, 0x7d, + 0x2e, 0xf0, 0xfe, 0x89, 0x33, 0xbf, 0xfc, 0xde, 0x63, 0x72, 0xf4, 0x83, 0xab, 0x7e, 0xe3, 0x42, + 0xd6, 0xb6, 0x63, 0xf2, 0x2e, 0xba, 0x51, 0x74, 0x20, 0xfe, 0xf4, 0xf0, 0x03, 0x23, 0x21, 0x59, + 0xbb, 0x3f, 0x89, 0x77, 0x0d, 0x91, 0x4b, 0x31, 0x51, 0x13, 0xb5, 0x71, 0x05, 0x21, 0x9c, 0x73, + 0xe2, 0xb7, 0xbd, 0xe8, 0x96, 0xe9, 0x01, 0xa1, 0xe0, 0xb2, 0x75, 0xae, 0xfe, 0x06, 0xf6, 0x7d, + 0xc3, 0xbf, 0x64, 0xbd, 0x7d, 0xc3, 0x6b, 0x07, 0x4a, 0x98, 0x0b, 0x7a, 0x7e, 0xf7, 0x89, 0xde, + 0xd1, 0xee, 0xdd, 0x01, 0x29, 0xc6, 0xe1, 0x0d, 0x14, 0x80, 0xa1, 0xbc, 0x50, 0xaf, 0x01, 0x0d, + 0xb7, 0xc8, 0xcf, 0x81, 0xee, 0x89, 0xcc, 0x6a, 0x7d, 0x57, 0xe9, 0x31, 0xdb, 0xe3, 0xe1, 0x81, + 0x10, 0x8a, 0xd8, 0x81, 0x8e, 0xf4, 0xcf, 0x8b, 0x0d, 0x98, 0x0a, 0x53, 0xa8, 0x7f, 0x1f, 0x81, + 0xfb, 0xc0, 0xa8, 0x73, 0x19, 0x05, 0x2d, 0xd8, 0x06, 0x4a, 0x40, 0x85, 0xab, 0xf7, 0x76, 0x0f, + 0x81, 0xc6, 0xc1, 0x6d, 0xd7, 0x01, 0xd0, 0x99, 0xfe, 0xac, 0xd4, 0x8f, 0xf8, 0x29, 0xd6, 0x19, + 0xb6, 0x98, 0xf0, 0x2e, 0x75, 0xd9, 0xca, 0xf9, 0x10, 0x88, 0x5b, 0x88, 0x11, 0x1d, 0x58, 0x12, + 0xe8, 0xb7, 0xf9, 0xae, 0x69, 0x50, 0xdc, 0xaa, 0xbb, 0x10, 0x0e, 0x36, 0x46, 0xa7, 0xf9, 0x58, + 0x0c, 0xd0, 0x65, 0xca, 0xd6, 0x57, 0xb4, 0x11, 0x0b, 0x19, 0xac, 0x95, 0x21, 0xbc, 0x3c, 0x00, + 0xd2, 0x85, 0x5d, 0x02, 0xcd, 0x11, 0x21, 0x0a, 0xb8, 0x2d, 0xea, 0xb5, 0x70, 0x14, 0xb2, 0x53, + 0x8b, 0xba, 0x15, 0x1c, 0xed, 0xc5, 0xe8, 0x60, 0xb1, 0x0f, 0x4e, 0x4d, 0xb1, 0xc6, 0xef, 0xe8, + 0x04, 0xff, 0xf0, 0x1a, 0x01, 0xdd, 0xad, 0x7c, 0x62, 0xd1, 0x38, 0xbf, 0xa1, 0x83, 0x2a, 0x7a, + 0x0a, 0x8d, 0x84, 0xa1, 0xdf, 0x7e, 0x4f, 0x0e, 0xe8, 0x07, 0x27, 0x3e, 0x56, 0xbf, 0x15, 0x84, + 0xb8, 0xf2, 0xbb, 0x1f, 0xf0, 0x2a, 0x43, 0x64, 0x62, 0x01, 0xfb, 0xb4, 0x61, 0x5b, 0x3a, 0x40, + 0x78, 0x66, 0xdc, 0xa0, 0xd1, 0xe0, 0x2f, 0xcd, 0x2b, 0x0d, 0x41, 0x0e, 0x70, 0xa5, 0x67, 0xc2, + 0xbb, 0x07, 0x5c, 0xb5, 0xbe, 0xc1, 0x67, 0x5c, 0x5c, 0x8a, 0xfd, 0x78, 0xf7, 0xf8, 0xda, 0xc6, + 0x5c, 0x0c, 0x33, 0x20, 0x80, 0x06, 0x5a, 0x49, 0x4e, 0xdd, 0xef, 0x26, 0x05, 0xb1, 0x81, 0x4b, + 0xb8, 0x48, 0xeb, 0x8c, 0x65, 0x75, 0x47, 0x6e, 0x44, 0x52, 0xa2, 0x80, 0x55, 0x93, 0xab, 0xf2, + 0x20, 0x54, 0x4a, 0xb4, 0xd0, 0x03, 0xe8, 0x7c, 0xdf, 0x23, 0xdf, 0x63, 0xe8, 0xad, 0xff, 0xfe, + 0xe9, 0xa6, 0xfe, 0x52, 0xba, 0x6e, 0x9f, 0x14, 0xdf, 0x71, 0xc3, 0x52, 0xa1, 0xd0, 0x12, 0x1b, + 0xf9, 0x30, 0xfe, 0xe6, 0x24, 0xfc, 0x80, 0xe2, 0x01, 0xa3, 0xeb, 0x0b, 0xd0, 0x13, 0x2e, 0x0c, + 0xf7, 0x10, 0x16, 0x6d, 0x80, 0x26, 0x06, 0xf6, 0xfd, 0xeb, 0xe5, 0x53, 0x55, 0x3c, 0x8d, 0x57, + 0x01, 0x42, 0xa9, 0xe3, 0x3f, 0x2d, 0x14, 0x5b, 0x04, 0x2b, 0x8e, 0x75, 0x8c, 0x16, 0x78, 0xa2, + 0x70, 0xbe, 0x17, 0x15, 0x59, 0xf2, 0x22, 0xbf, 0x1f, 0x30, 0x7c, 0x97, 0xe7, 0x39, 0x7f, 0xa2, + 0xe2, 0xc8, 0x15, 0xed, 0xe4, 0x22, 0xb9, 0xde, 0x79, 0x0f, 0xcc, 0x3a, 0x5a, 0x21, 0xb6, 0x1b, + 0x40, 0x86, 0x25, 0xb3, 0xc7, 0x0e, 0xea, 0x75, 0xf1, 0x40, 0x97, 0x3a, 0xba, 0xff, 0x68, 0x14, + 0xac, 0xc1, 0x26, 0xfc, 0xa7, 0x75, 0xdd, 0x3c, 0x74, 0x29, 0x8a, 0xa0, 0x0c, 0xd1, 0xb1, 0xbb, + 0x74, 0xf3, 0x29, 0x75, 0x56, 0xa9, 0x8d, 0x04, 0x16, 0x5d, 0xc4, 0x7e, 0x73, 0x57, 0x06, 0x57, + 0xb7, 0x0a, 0xed, 0xc0, 0xbb, 0xe7, 0x52, 0xab, 0xda, 0x03, 0x0b, 0x03, 0xe3, 0x54, 0xc8, 0x90, + 0xde, 0x80, 0xf9, 0x3e, 0x75, 0x14, 0xf3, 0x30, 0x28, 0xac, 0x9a, 0x11, 0xc3, 0x02, 0xfe, 0x6e, + 0xb9, 0x1a, 0x9b, 0x08, 0x74, 0xb8, 0x52, 0xb7, 0xdb, 0xaf, 0x07, 0x2c, 0xdb, 0x74, 0xb0, 0x04, + 0x2d, 0xcb, 0x74, 0xab, 0x2b, 0xcb, 0x74, 0xa6, 0x30, 0xcb, 0x7c, 0xe9, 0x39, 0xd2, 0x7e, 0x9c, + 0x25, 0xa8, 0xcb, 0xa1, 0x40, 0xe3, 0xb5, 0x34, 0x76, 0xfd, 0xfe, 0x09, 0xf6, 0x8a, 0x05, 0x3c, + 0x22, 0xed, 0x04, 0x3c, 0x21, 0x6a, 0x99, 0x97, 0xdf, 0xa6, 0x8d, 0x4a, 0xf8, 0x0a, 0x56, 0xb5, + 0xef, 0xa9, 0x97, 0x97, 0x0f, 0xaa, 0xf1, 0xed, 0xd6, 0x3b, 0x1b, 0xcf, 0xc3, 0xc7, 0xb9, 0x05, + 0xc3, 0x6d, 0x01, 0xb1, 0xab, 0x27, 0x32, 0x78, 0xe0, 0x29, 0xd0, 0xeb, 0x32, 0x03, 0x1e, 0x53, + 0xc8, 0x74, 0xe8, 0x79, 0xe6, 0x1a, 0x5c, 0xe6, 0x2c, 0xd6, 0xa6, 0xed, 0x0a, 0x3c, 0xe5, 0xb7, + 0xd4, 0x36, 0x44, 0x56, 0x78, 0xed, 0xfa, 0x00, 0x85, 0xfd, 0xf7, 0x5c, 0x02, 0xf7, 0x1c, 0x83, + 0xa1, 0x04, 0x27, 0x61, 0xa0, 0x03, 0x26, 0x08, 0x6e, 0xd7, 0xbb, 0xff, 0x6a, 0x4a, 0xb6, 0x56, + 0xbb, 0xeb, 0xc3, 0xde, 0x09, 0x76, 0x4d, 0x75, 0x4d, 0xa5, 0x24, 0x68, 0x76, 0xff, 0x06, 0x5d, + 0x10, 0xe8, 0x86, 0x41, 0xd4, 0xc9, 0xc6, 0x0b, 0x52, 0x2c, 0x55, 0x35, 0xc2, 0x45, 0x04, 0xa9, + 0x37, 0xe3, 0x9a, 0x44, 0xf6, 0x8d, 0x5e, 0xc1, 0x80, 0x6c, 0xea, 0x52, 0x7d, 0x48, 0x05, 0x3a, + 0xc3, 0xd5, 0x3f, 0x72, 0x6d, 0x8d, 0xa8, 0xee, 0xe9, 0xe6, 0xfe, 0x2b, 0x86, 0x48, 0xbf, 0x85, + 0x45, 0x0d, 0xf7, 0x3f, 0x2e, 0x75, 0x29, 0x4c, 0x63, 0x8d, 0x44, 0xc2, 0x63, 0x3b, 0xbf, 0x16, + 0x46, 0x37, 0x06, 0x17, 0xcf, 0x11, 0x47, 0x2e, 0x23, 0xfe, 0xc1, 0x15, 0x52, 0xd9, 0xb6, 0x5f, + 0x00, 0xdb, 0x9f, 0x9c, 0xfb, 0x60, 0xfe, 0x01, 0x8d, 0xc0, 0x35, 0x5d, 0x2a, 0xcd, 0x1c, 0x11, + 0x73, 0xb1, 0xaa, 0xa3, 0xd1, 0x42, 0x53, 0x41, 0x0e, 0xd4, 0xad, 0x29, 0xb8, 0x1d, 0xdf, 0x3c, + 0x38, 0xff, 0xe2, 0xc8, 0x29, 0x54, 0x02, 0x7f, 0x15, 0x14, 0xe9, 0x72, 0x84, 0xfe, 0x5b, 0x06, + 0xd3, 0xf8, 0xc4, 0xc1, 0x16, 0xd2, 0xfd, 0xd4, 0x3a, 0x4a, 0x55, 0x2e, 0x1f, 0xb4, 0x2c, 0x04, + 0x05, 0xb5, 0x2f, 0x4a, 0x6b, 0xac, 0x18, 0x66, 0xfe, 0xc3, 0x88, 0xfd, 0x7a, 0xd9, 0xa5, 0x1e, + 0xcd, 0xe6, 0x75, 0xa0, 0xe1, 0xf8, 0xa5, 0x06, 0x65, 0x30, 0x6e, 0x95, 0xd5, 0x40, 0xc6, 0x0c, + 0x0b, 0x46, 0x05, 0xed, 0xf4, 0x05, 0x00, 0xb3, 0x36, 0xf6, 0x59, 0x74, 0x30, 0xcf, 0xb5, 0xb0, + 0xb8, 0x46, 0x1e, 0x16, 0x88, 0x81, 0x76, 0xa3, 0xd1, 0x21, 0x5b, 0x1e, 0x8b, 0xfc, 0x85, 0xd0, + 0x0d, 0xc7, 0x47, 0x10, 0x30, 0x49, 0x5e, 0x34, 0x57, 0x0e, 0x8d, 0xb1, 0x12, 0xec, 0xf1, 0xe8, + 0x42, 0x81, 0xe7, 0x83, 0xf7, 0x1d, 0xe9, 0x7b, 0xff, 0x21, 0x34, 0xe6, 0x3a, 0x22, 0x60, 0x8d, + 0xf8, 0x32, 0x47, 0x06, 0x78, 0xb5, 0x47, 0x36, 0x1a, 0xce, 0x99, 0x88, 0x76, 0xc7, 0xda, 0xe8, + 0x8a, 0x5c, 0xf8, 0xa1, 0xfd, 0x18, 0x78, 0x33, 0x26, 0x7e, 0x51, 0x8c, 0xd8, 0x8d, 0x7e, 0xda, + 0x85, 0x72, 0xf6, 0xbe, 0xd2, 0x12, 0xa5, 0x00, 0x1b, 0x10, 0x7b, 0xec, 0xbe, 0xe4, 0x0e, 0x2d, + 0x2c, 0xbb, 0xd8, 0x2c, 0x31, 0xda, 0xd0, 0xfc, 0xdb, 0x66, 0x39, 0xf0, 0xef, 0xa5, 0x3f, 0x8c, + 0x08, 0xa2, 0x1f, 0xc3, 0x8d, 0x77, 0x01, 0x6c, 0x8d, 0xec, 0x8d, 0xdc, 0xfc, 0x1f, 0xc6, 0x74, + 0x4e, 0xda, 0x75, 0x49, 0xb1, 0xeb, 0x86, 0x43, 0x0f, 0xf0, 0x40, 0xe8, 0x9c, 0xfc, 0xea, 0x9e, + 0x86, 0xed, 0x5b, 0x97, 0x12, 0x75, 0xeb, 0xda, 0xa2, 0x94, 0x5d, 0x26, 0xc3, 0xe4, 0x8c, 0x0b, + 0xec, 0xb5, 0xd4, 0xb0, 0xd9, 0xe4, 0xc0, 0xea, 0xe8, 0x2e, 0xd2, 0x81, 0x7d, 0x40, 0x08, 0x2c, + 0xf8, 0x29, 0xc8, 0x19, 0xd3, 0x91, 0xf3, 0xd5, 0xeb, 0x97, 0x5b, 0x92, 0x95, 0x15, 0xa9, 0x60, + 0x5a, 0x04, 0x12, 0x72, 0xf4, 0xa3, 0xcc, 0x12, 0xfe, 0x78, 0x01, 0x43, 0xba, 0xc2, 0x8b, 0x4a, + 0x46, 0x47, 0xed, 0xfc, 0xba, 0x33, 0x5b, 0xbb, 0xfd, 0x54, 0xc2, 0xa6, 0x6f, 0x8e, 0x05, 0xa2, + 0x43, 0x12, 0xdd, 0xeb, 0x52, 0x46, 0xc7, 0xb4, 0x06, 0x27, 0x0d, 0xe0, 0xf0, 0x8e, 0xf1, 0x4e, + 0xb6, 0xa1, 0x51, 0x15, 0x36, 0x8c, 0xba, 0xd1, 0x19, 0xf6, 0x5d, 0xd8, 0x19, 0xe1, 0xce, 0x12, + 0xed, 0x77, 0xe8, 0x4d, 0x96, 0x3f, 0xaa, 0x2c, 0x8d, 0xff, 0x4e, 0xfc, 0xbb, 0xb0, 0x11, 0xba, + 0x9e, 0x11, 0x2d, 0xe4, 0xcf, 0xc2, 0xa8, 0xba, 0x11, 0x40, 0x2b, 0xdd, 0x37, 0xa3, 0xce, 0x75, + 0x54, 0xb8, 0xbd, 0x1b, 0xe8, 0xd7, 0xfd, 0xc2, 0xed, 0xb8, 0x7d, 0x36, 0x79, 0xe8, 0x98, 0xe6, + 0x38, 0x1f, 0x4b, 0x41, 0xee, 0xe3, 0x3b, 0x1f, 0x6f, 0xff, 0x60, 0x51, 0xf7, 0xd3, 0xba, 0xb0, + 0x4b, 0x6e, 0xf1, 0xfc, 0x39, 0xdb, 0x8b, 0x16, 0x22, 0xeb, 0x80, 0xc0, 0xdf, 0xfd, 0x0f, 0xa0, + 0xd0, 0x12, 0xf9, 0xa8, 0x01, 0x74, 0x10, 0xa8, 0x54, 0xeb, 0xe0, 0xa0, 0x16, 0xcc, 0xaf, 0x83, + 0xdb, 0x80, 0x0e, 0x0a, 0x02, 0x5b, 0xc1, 0xb8, 0x81, 0x7c, 0x23, 0x6b, 0xb4, 0x77, 0xb1, 0xe8, + 0xd0, 0x0c, 0x0e, 0x08, 0xed, 0x66, 0x02, 0x5a, 0x03, 0x02, 0x57, 0x01, 0xf2, 0x0c, 0x7c, 0x98, + 0x14, 0xe8, 0xd1, 0x44, 0x83, 0xa0, 0xd5, 0x35, 0xb5, 0x0c, 0xba, 0x0b, 0x0e, 0x48, 0xc3, 0x2a, + 0xc5, 0xe9, 0x93, 0x0b, 0x91, 0x05, 0x17, 0x01, 0x68, 0x5c, 0x21, 0x9f, 0x27, 0x78, 0x00, 0x81, + 0xbb, 0xad, 0x5a, 0x20, 0x07, 0x96, 0x17, 0x5d, 0x0b, 0x71, 0x6e, 0x07, 0xfc, 0x4f, 0x64, 0xf2, + 0x9a, 0x01, 0xec, 0x58, 0xee, 0x89, 0xff, 0x5c, 0x1e, 0x8b, 0x88, 0xc4, 0x4c, 0x83, 0xe0, 0x13, + 0x06, 0xd1, 0xe0, 0x19, 0xe1, 0x15, 0x3e, 0xbd, 0xda, 0xf8, 0x05, 0x07, 0xb4, 0x3e, 0x07, 0xe2, + 0x07, 0x1a, 0x7c, 0x05, 0xde, 0x6a, 0x34, 0xb1, 0x03, 0xdb, 0x69, 0xd7, 0xdf, 0x56, 0x18, 0xf1, + 0x47, 0x29, 0xd8, 0x2d, 0x2a, 0x3b, 0xbb, 0x4b, 0x7e, 0x1d, 0x1a, 0xb5, 0x2d, 0x02, 0xd6, 0xc8, + 0xfa, 0x1b, 0xeb, 0x01, 0xd3, 0x33, 0x38, 0x01, 0xb6, 0xf0, 0x6e, 0x0d, 0xcb, 0x06, 0x39, 0xe1, + 0xeb, 0x86, 0x67, 0x40, 0xb5, 0x7e, 0x48, 0xae, 0x92, 0xa1, 0xe0, 0xe9, 0x5c, 0xff, 0xb1, 0xea, + 0x8b, 0x83, 0xb8, 0x5b, 0x48, 0x10, 0xdc, 0x83, 0x7d, 0x05, 0x01, 0x97, 0xa9, 0x3b, 0xc5, 0x7c, + 0x7f, 0x16, 0x7c, 0x1a, 0x53, 0x6b, 0xee, 0x1d, 0xff, 0x20, 0xae, 0xda, 0x87, 0xc6, 0x14, 0xff, + 0x42, 0xc4, 0x7e, 0x36, 0x5e, 0x5f, 0x5e, 0x57, 0x04, 0x06, 0xfb, 0x60, 0xfb, 0xc8, 0x16, 0x31, + 0x7c, 0xb4, 0x18, 0xc7, 0x5b, 0x12, 0x31, 0x05, 0x28, 0xda, 0x50, 0xe2, 0x1c, 0x94, 0xad, 0x24, + 0x0d, 0x70, 0xb8, 0x0a, 0x83, 0x23, 0x63, 0x7a, 0xe8, 0x94, 0xff, 0xab, 0xae, 0xd4, 0x2c, 0x63, + 0x79, 0xcd, 0x17, 0x03, 0x6c, 0x39, 0x19, 0xa8, 0x6d, 0xb5, 0x22, 0x12, 0x90, 0x87, 0x1f, 0xa2, + 0x3c, 0x1a, 0xe5, 0x68, 0x1f, 0x1c, 0x46, 0xfa, 0x23, 0x57, 0x2c, 0x17, 0x0c, 0x85, 0x28, 0x66, + 0x14, 0xcd, 0xa5, 0x42, 0x0b, 0x06, 0xee, 0x75, 0x40, 0x4c, 0xd4, 0x1d, 0x3b, 0xb8, 0x46, 0x7e, + 0x4d, 0x19, 0x82, 0x2b, 0x8b, 0x19, 0x74, 0x74, 0x0f, 0xed, 0x43, 0xa9, 0x5a, 0xcd, 0xeb, 0x1c, + 0x32, 0x14, 0x84, 0x2c, 0x0f, 0x2e, 0x10, 0x8a, 0x80, 0xa6, 0x23, 0x6a, 0xda, 0x8c, 0x4f, 0xc7, + 0x25, 0xba, 0x78, 0x9e, 0x76, 0x7d, 0xe1, 0xeb, 0x85, 0x0c, 0xc5, 0xb8, 0x5c, 0x7d, 0x00, 0x35, + 0xc1, 0xb6, 0x02, 0xa8, 0xad, 0xc3, 0xb4, 0x5e, 0x06, 0x5b, 0xa5, 0x2b, 0x94, 0x09, 0x5e, 0x21, + 0x35, 0x42, 0x89, 0x37, 0x0c, 0x82, 0x6c, 0x05, 0x06, 0x19, 0x26, 0x48, 0xd7, 0x1a, 0x14, 0x06, + 0x9c, 0x68, 0x95, 0x46, 0x84, 0x1c, 0xdd, 0x6f, 0xee, 0x2d, 0xb6, 0x1c, 0x3b, 0x2e, 0xe0, 0x7c, + 0x03, 0x8d, 0x1a, 0x73, 0x84, 0x0a, 0x66, 0xf4, 0xa5, 0x64, 0xd5, 0xe1, 0x5b, 0xff, 0x48, 0x85, + 0x43, 0x83, 0x68, 0xe2, 0x29, 0x96, 0x2c, 0x40, 0xed, 0x21, 0x7f, 0xde, 0x9e, 0x1e, 0x7f, 0xe1, + 0x81, 0x00, 0x5b, 0xe2, 0x0e, 0x1f, 0x2f, 0x15, 0x08, 0x01, 0x3a, 0x3a, 0x1f, 0x1f, 0x0c, 0x3b, + 0x16, 0xfc, 0xd6, 0x0d, 0x7e, 0x01, 0x42, 0x4a, 0x37, 0xa2, 0x39, 0xc2, 0x7f, 0xb9, 0xaf, 0x2e, + 0x6f, 0x7b, 0xe9, 0x13, 0xff, 0xb7, 0x31, 0x4c, 0x23, 0xff, 0x07, 0x9d, 0x85, 0x09, 0x0b, 0x11, + 0xec, 0x28, 0x69, 0x0b, 0x0c, 0x06, 0x07, 0xd4, 0x1b, 0xbb, 0x5b, 0xe9, 0x8d, 0xc5, 0x64, 0x4d, + 0x0b, 0x91, 0xf6, 0x90, 0xfe, 0x0e, 0xfe, 0x59, 0xf2, 0x9a, 0x40, 0xf9, 0xc7, 0x34, 0x0d, 0x1b, + 0xca, 0x22, 0x08, 0x5e, 0xb6, 0x66, 0x74, 0x35, 0x11, 0x57, 0x64, 0xe0, 0x5c, 0x00, 0xf0, 0x87, + 0x9f, 0xc1, 0xa9, 0xfe, 0x29, 0xf6, 0xf8, 0xe9, 0xa2, 0xfe, 0x26, 0xfd, 0xf2, 0x7d, 0xe2, 0xeb, + 0xda, 0x85, 0xdf, 0xa3, 0x33, 0x6e, 0xc6, 0x17, 0xf6, 0x7f, 0xca, 0xeb, 0xc2, 0xdb, 0x43, 0x5e, + 0x92, 0x1e, 0xbb, 0x9e, 0x76, 0x5b, 0x05, 0x74, 0x85, 0x9e, 0x87, 0x13, 0xec, 0x00, 0x26, 0xc5, + 0x88, 0x54, 0x97, 0x5b, 0x3b, 0x57, 0xe2, 0x04, 0x7c, 0x12, 0xb4, 0xcb, 0x0a, 0xe1, 0xd1, 0x09, + 0x6f, 0xc3, 0x08, 0x75, 0x09, 0xf4, 0x8b, 0x34, 0x3b, 0x37, 0x68, 0x48, 0xe1, 0x79, 0x70, 0x19, + 0x8e, 0x09, 0x99, 0x09, 0x8e, 0x09, 0x0d, 0x00, 0xc6, 0x06, 0x0e, 0x50, 0x01, 0xc0, 0x89, 0xa6, + 0xf0, 0xf8, 0x89, 0x1e, 0x8c, 0x9f, 0x3d, 0x17, 0x8b, 0x73, 0x38, 0xff, 0x80, 0x3e, 0x78, 0x11, + 0x03, 0x72, 0x2b, 0x3c, 0x80, 0x50, 0x05, 0x33, 0xff, 0x0e, 0xeb, 0x06, 0x3c, 0x22, 0x72, 0x17, + 0xb0, 0xbf, 0x13, 0x21, 0x8a, 0x87, 0xd1, 0xf6, 0x12, 0x2a, 0xf3, 0x9e, 0xa4, 0x16, 0xd1, 0x3a, + 0x5a, 0x26, 0x36, 0x75, 0x72, 0xdf, 0x22, 0x05, 0xeb, 0xe3, 0x3c, 0xfe, 0x13, 0x76, 0xdf, 0xeb, + 0xdb, 0x88, 0xe2, 0x2d, 0xab, 0x4a, 0x1c, 0xed, 0x4d, 0xe8, 0xab, 0xb4, 0x20, 0xd0, 0x8a, 0xe0, + 0x0e, 0x0a, 0x10, 0xd1, 0x8d, 0x55, 0x58, 0xf1, 0x4c, 0x4a, 0x98, 0x01, 0x08, 0x62, 0x3f, 0xbb, + 0xf7, 0x74, 0x39, 0x72, 0x1f, 0x55, 0x49, 0x1b, 0xfe, 0x05, 0x5c, 0xfd, 0xd1, 0xf6, 0x5d, 0xc3, + 0x75, 0xb8, 0x2a, 0x13, 0x0a, 0xfc, 0x81, 0x7e, 0x54, 0xde, 0x79, 0x03, 0x47, 0x0a, 0x48, 0x8e, + 0xf6, 0x8a, 0x37, 0xd5, 0xec, 0x6f, 0xb1, 0x0c, 0x88, 0xc8, 0xfd, 0x80, 0x67, 0x06, 0xef, 0x30, + 0xe4, 0x78, 0x21, 0xa6, 0x6e, 0xbc, 0xf7, 0x5d, 0x2b, 0x1e, 0x26, 0x7d, 0x74, 0xf1, 0xff, 0x0f, + 0xb6, 0x24, 0xff, 0x34, 0xa2, 0xed, 0xb2, 0x39, 0xc8, 0xad, 0xbf, 0x0c, 0xdf, 0xeb, 0xd0, 0x33, + 0xeb, 0xa0, 0xf6, 0x76, 0x76, 0x6a, 0x80, 0x25, 0x21, 0x46, 0x00, 0xd0, 0x06, 0x72, 0xea, 0x04, + 0x30, 0x51, 0xdd, 0xcf, 0xd8, 0xff, 0x14, 0xbb, 0x83, 0x08, 0x02, 0x3b, 0x74, 0xeb, 0xec, 0x20, + 0xb1, 0xb8, 0x9d, 0x4d, 0xe6, 0x4c, 0xfe, 0x08, 0x01, 0x81, 0x64, 0x08, 0x03, 0xfc, 0x88, 0x56, + 0xb8, 0x96, 0xed, 0x43, 0x80, 0x0a, 0xaa, 0xfe, 0xe1, 0x0f, 0x4b, 0x94, 0xfe, 0x8a, 0x1c, 0x64, + 0x3d, 0x35, 0xc7, 0xd0, 0x08, 0x55, 0xd0, 0x43, 0xad, 0x2c, 0x18, 0xed, 0x83, 0xea, 0x30, 0x1b, + 0x07, 0xc7, 0x36, 0x1d, 0xe0, 0x6f, 0x75, 0xe4, 0x89, 0x54, 0xa2, 0x06, 0x5f, 0xe8, 0x57, 0x75, + 0x22, 0x43, 0x77, 0x47, 0x04, 0x8d, 0x4f, 0x55, 0xa8, 0x32, 0x6f, 0xb1, 0x3c, 0x6a, 0x73, 0x22, + 0xf8, 0x3c, 0x68, 0x75, 0x4b, 0x3a, 0x17, 0x58, 0x75, 0x44, 0xdd, 0x89, 0xcb, 0x1a, 0x10, 0xf5, + 0xeb, 0x26, 0x3c, 0x4e, 0x2b, 0xe5, 0x25, 0xff, 0x08, 0xeb, 0xd8, 0x3c, 0x46, 0x74, 0xd4, 0xcf, + 0xeb, 0xb4, 0x47, 0x4c, 0x2e, 0x64, 0x73, 0x14, 0x20, 0x5b, 0x68, 0x0b, 0x27, 0xe4, 0x15, 0x60, + 0x80, 0x17, 0x75, 0xb6, 0x00, 0xfc, 0x76, 0x3e, 0x3c, 0x7a, 0x74, 0x3a, 0x05, 0xb7, 0xd2, 0xf1, + 0x30, 0x80, 0x9b, 0x7d, 0x19, 0x3c, 0xb7, 0x4c, 0x8a, 0x3c, 0x49, 0xc1, 0x75, 0xe0, 0xdd, 0x9b, + 0x36, 0x75, 0xda, 0xbf, 0x05, 0x02, 0x34, 0x75, 0xd4, 0x83, 0xf0, 0xc3, 0x03, 0xeb, 0xcb, 0xae, + 0x78, 0x22, 0xed, 0x20, 0xeb, 0xc7, 0x07, 0xdf, 0xeb, 0xbf, 0x0b, 0x09, 0x56, 0x58, 0xfa, 0xbb, + 0x43, 0xeb, 0xb8, 0x8c, 0xd7, 0x6a, 0xc6, 0x2f, 0xfe, 0xe8, 0xf0, 0xff, 0x17, 0x36, 0xa9, 0x53, + 0xff, 0xce, 0x03, 0x41, 0xeb, 0xee, 0xc3, 0xf6, 0x44, 0x05, 0x5a, 0x08, 0xc2, 0x93, 0xef, 0xd4, + 0x89, 0xf7, 0x36, 0xaa, 0xff, 0x55, 0x0d, 0xae, 0xa1, 0xed, 0x02, 0x09, 0xda, 0xd3, 0x8a, 0x26, + 0x06, 0xf4, 0x02, 0xf8, 0x85, 0x6d, 0x56, 0xd2, 0xc0, 0x07, 0x1a, 0x36, 0x20, 0x5d, 0x8b, 0x8b, + 0x7f, 0x33, 0xd0, 0x05, 0x70, 0x4c, 0x06, 0x23, 0x78, 0x83, 0x85, 0xf9, 0xf0, 0x1b, 0xb0, 0xc9, + 0xc0, 0x7f, 0x1f, 0x42, 0xd8, 0x5e, 0xa8, 0x08, 0xd1, 0x2b, 0x6e, 0xf1, 0x3f, 0x8c, 0x9a, 0x82, + 0x7d, 0x85, 0xfb, 0xab, 0xd5, 0x05, 0xb6, 0xeb, 0xdd, 0x81, 0x6f, 0x75, 0x16, 0x3f, 0x80, 0x16, + 0x2a, 0x49, 0xe6, 0x09, 0x57, 0xdd, 0xc7, 0x05, 0x40, 0x1b, 0xb8, 0x8e, 0x6c, 0x4e, 0x26, 0x06, + 0xe1, 0xb6, 0xaf, 0x88, 0x94, 0xa5, 0x05, 0xba, 0xfe, 0xd3, 0x1b, 0x77, 0x00, 0x2e, 0xb6, 0x0f, + 0xfb, 0x2a, 0xe0, 0x56, 0x05, 0xc2, 0x7d, 0xa5, 0xe4, 0x8f, 0x1b, 0x5c, 0xb9, 0x0e, 0x2c, 0x34, + 0x5e, 0x26, 0x13, 0x04, 0x81, 0xa4, 0x55, 0x2d, 0x4c, 0x89, 0x93, 0xb1, 0x0a, 0x21, 0xc5, 0x40, + 0x5a, 0x75, 0xdb, 0x26, 0x02, 0xbc, 0x1d, 0x75, 0x21, 0x8b, 0xa7, 0x7f, 0x31, 0x75, 0xa4, 0x51, + 0xf7, 0x5d, 0x30, 0x82, 0x05, 0x03, 0xc1, 0xa8, 0x20, 0x0c, 0x94, 0x15, 0x89, 0xd2, 0xdd, 0x10, + 0x13, 0xfa, 0x0a, 0x51, 0xc9, 0xc3, 0x9e, 0xfa, 0xbc, 0x11, 0x2e, 0x89, 0x22, 0x89, 0x9e, 0xb7, + 0x9b, 0xd9, 0x10, 0xff, 0x4a, 0xf3, 0xdc, 0x55, 0x7e, 0xf7, 0x01, 0x2b, 0xd4, 0x0e, 0x6d, 0x4b, + 0x93, 0xd0, 0xfa, 0x26, 0x6f, 0xae, 0xe9, 0xfa, 0xfe, 0x1c, 0xf7, 0x96, 0x12, 0x4a, 0x39, 0x10, + 0xd3, 0x64, 0x29, 0x31, 0xe6, 0xb1, 0x0d, 0x25, 0x9f, 0x27, 0x88, 0x0d, 0x54, 0xd1, 0x1e, 0x5e, + 0x56, 0x27, 0xbe, 0xcc, 0xb2, 0x2d, 0x45, 0xba, 0x1a, 0x28, 0xd7, 0xe0, 0x9c, 0xbc, 0x7e, 0xc8, + 0xff, 0x57, 0xbd, 0xa0, 0xeb, 0x39, 0x40, 0xdb, 0x42, 0x88, 0x4e, 0xef, 0x6f, 0xcc, 0x1a, 0xbc, + 0x09, 0xb7, 0x3c, 0x08, 0xf9, 0x8c, 0xf8, 0x04, 0x76, 0x86, 0xc8, 0x1a, 0xe7, 0x3b, 0x83, 0x6e, + 0x02, 0xff, 0x51, 0x0b, 0x0b, 0xf6, 0x20, 0xdf, 0xa7, 0x85, 0xc7, 0x2b, 0x86, 0x70, 0x73, 0xfe, + 0xc0, 0x11, 0x87, 0x92, 0xee, 0xd8, 0xf6, 0x45, 0x7f, 0xbb, 0x64, 0x05, 0x04, 0x75, 0x99, 0x40, + 0xbc, 0xd4, 0x04, 0x02, 0x8c, 0x5b, 0xbe, 0x1c, 0x55, 0xbb, 0x3c, 0x5f, 0xfe, 0x0f, 0x92, 0x92, + 0xdd, 0x34, 0x05, 0x20, 0x23, 0x40, 0x23, 0x80, 0xed, 0x74, 0x28, 0x99, 0x50, 0xed, 0x07, 0xb1, + 0x0f, 0x04, 0x6f, 0x8e, 0x26, 0xd3, 0xfa, 0x75, 0x06, 0x04, 0xde, 0x03, 0x06, 0xe9, 0xd5, 0x00, + 0xd0, 0x3b, 0xbc, 0x22, 0x34, 0xc4, 0x5c, 0x2d, 0x38, 0xc6, 0xbe, 0xc6, 0x07, 0xe9, 0xc5, 0x00, + 0xe5, 0x26, 0x52, 0xdc, 0xbd, 0x2d, 0xfc, 0x2b, 0xe9, 0xb4, 0x00, 0x10, 0x87, 0x03, 0x02, 0x3e, + 0xbb, 0x20, 0x86, 0xca, 0xa5, 0xfe, 0x3a, 0x5b, 0xf6, 0xe8, 0xd3, 0x6a, 0xe3, 0xa4, 0xbb, 0xcf, + 0x1b, 0x46, 0xd6, 0x3d, 0x5d, 0x16, 0xd7, 0x15, 0x60, 0xfb, 0x24, 0x07, 0xd3, 0xfb, 0xa4, 0x55, + 0xdf, 0x39, 0x8a, 0x85, 0x06, 0x0e, 0x08, 0x8e, 0x07, 0x22, 0xfa, 0xf0, 0xe9, 0xbc, 0xfd, 0x51, + 0x2c, 0x23, 0xe4, 0x2a, 0x61, 0xf6, 0x94, 0x52, 0x92, 0xff, 0x5e, 0x75, 0x5d, 0xb0, 0x01, 0x88, + 0xc5, 0x05, 0xa0, 0xbb, 0x29, 0x75, 0x94, 0x28, 0x5e, 0x0a, 0x6a, 0x91, 0xd6, 0xde, 0x04, 0xe8, + 0x8d, 0xff, 0xd0, 0x7b, 0x9c, 0xe4, 0x40, 0x88, 0x66, 0x7d, 0x6c, 0x8e, 0x9c, 0x47, 0x9f, 0xe3, + 0x76, 0x0c, 0x72, 0x2f, 0x74, 0x4a, 0x09, 0x87, 0x84, 0xb3, 0x78, 0x07, 0xc4, 0x5e, 0xd5, 0x3e, + 0x70, 0xad, 0xc9, 0xb0, 0x68, 0x8b, 0xd8, 0x44, 0xa1, 0xee, 0x03, 0x13, 0x83, 0x05, 0x58, 0x1d, + 0xe1, 0x00, 0xdc, 0x06, 0x89, 0x7e, 0xf8, 0xf2, 0xa9, 0xb6, 0x14, 0x02, 0x60, 0xa3, 0x2d, 0x09, + 0x9a, 0x8e, 0xad, 0x7e, 0xc0, 0x97, 0x88, 0xfe, 0x3f, 0xf6, 0x80, 0xe3, 0x07, 0xd6, 0x9e, 0xc3, + 0xc0, 0xd3, 0xb6, 0x26, 0x9f, 0xbc, 0xff, 0x8a, 0x53, 0xd6, 0x85, 0xda, 0x75, 0x1a, 0x57, 0x26, + 0x6d, 0x88, 0xea, 0x1a, 0xc0, 0x39, 0xd3, 0xa3, 0x94, 0x25, 0x18, 0x17, 0x61, 0xff, 0x16, 0x57, + 0x80, 0x05, 0xae, 0xc5, 0x30, 0xdb, 0xa1, 0x4a, 0xe3, 0xc3, 0xe1, 0x2a, 0xd7, 0x82, 0x7f, 0x47, + 0xff, 0xc1, 0x2a, 0xd8, 0xe3, 0xde, 0x49, 0x31, 0x9d, 0x66, 0xba, 0xd5, 0x7e, 0x9a, 0x2d, 0x58, + 0xab, 0xf3, 0xd6, 0x67, 0xf2, 0x1f, 0xaf, 0xc2, 0x77, 0xcd, 0xe8, 0x9e, 0x18, 0x00, 0x73, 0x80, + 0x33, 0xb6, 0xeb, 0xeb, 0xcd, 0x36, 0x66, 0xc7, 0xcb, 0xf2, 0x4e, 0x4d, 0x06, 0x01, 0x6b, 0x29, + 0xd9, 0x18, 0x42, 0xe4, 0x7d, 0xdf, 0x51, 0x20, 0x74, 0x3f, 0x80, 0x7e, 0xcb, 0x9a, 0x2d, 0xf7, + 0x6f, 0xac, 0xf7, 0xd9, 0x83, 0x6c, 0x04, 0x00, 0x3b, 0x1d, 0xd9, 0x61, 0x2c, 0x31, 0x86, 0xe0, + 0x36, 0xc4, 0xdc, 0xbc, 0x11, 0x2d, 0xf0, 0x1d, 0x28, 0x23, 0x15, 0x15, 0xb2, 0x3a, 0x09, 0xfa, + 0x16, 0x8d, 0x76, 0xea, 0x91, 0x25, 0x6f, 0x4a, 0xe9, 0x3d, 0xfc, 0xfb, 0xe9, 0xae, 0x01, 0xe9, + 0xb8, 0x02, 0x65, 0xc9, 0xc7, 0xd3, 0x01, 0xcb, 0xfc, 0xc3, 0x4b, 0x89, 0x5c, 0x06, 0x18, 0xcb, + 0xc2, 0xca, 0xff, 0xee, 0xfa, 0x2b, 0x07, 0x9b, 0xcf, 0x2d, 0x74, 0xdd, 0xf8, 0x8b, 0x97, 0xe2, + 0x81, 0x17, 0x5b, 0xc3, 0x6c, 0x56, 0x2e, 0x92, 0xbf, 0x0f, 0xd2, 0x17, 0x5a, 0x69, 0xd5, 0xea, + 0x0a, 0xd5, 0xef, 0xae, 0x39, 0xb3, 0x01, 0x8a, 0x6a, 0x12, 0x66, 0xd5, 0x96, 0x31, 0x11, 0x30, + 0x7f, 0x1f, 0x3f, 0xe2, 0x03, 0x6c, 0x13, 0x2d, 0x05, 0xee, 0xed, 0xdd, 0x44, 0x2e, 0x30, 0x55, + 0xfa, 0xe1, 0xdf, 0x9f, 0xcd, 0x2a, 0xff, 0xe8, 0xbe, 0x92, 0x4f, 0xc9, 0x70, 0x47, 0x7a, 0xbf, + 0x39, 0x75, 0x54, 0x76, 0x58, 0x3d, 0x65, 0x88, 0x68, 0x06, 0x45, 0x36, 0x25, 0x47, 0xe7, 0x52, + 0x36, 0x35, 0x55, 0xb4, 0x3d, 0x47, 0x2b, 0xe8, 0x3b, 0x07, 0x74, 0xc4, 0xdb, 0x3d, 0x2b, 0x1f, + 0x55, 0xdb, 0x3d, 0x2d, 0x04, 0x50, 0x7d, 0x85, 0x4c, 0x41, 0xd6, 0xa0, 0x49, 0x29, 0x07, 0xef, + 0x90, 0xf9, 0x7b, 0x9a, 0xe8, 0x2f, 0x62, 0xee, 0xe3, 0x26, 0x08, 0x8e, 0x7b, 0xb3, 0xfe, 0x29, + 0x19, 0xf8, 0x3d, 0xc5, 0xf9, 0x93, 0x8f, 0x9a, 0x0b, 0xb8, 0x1a, 0x16, 0x48, 0xdd, 0x86, 0xab, + 0xf2, 0xcc, 0xeb, 0xcf, 0xd0, 0x1e, 0xbf, 0x63, 0x2e, 0xe8, 0xa4, 0xf9, 0x47, 0x60, 0x4b, 0xfd, + 0xde, 0x84, 0xdb, 0x74, 0x51, 0xf9, 0x6f, 0xdc, 0x16, 0xa4, 0x16, 0x0e, 0x7f, 0xc3, 0x45, 0xb1, + 0xe0, 0xfc, 0x86, 0x37, 0xd3, 0xa1, 0x7e, 0x04, 0xc6, 0x0c, 0xd0, 0xfc, 0xc0, 0x0d, 0x15, 0xe0, + 0x6f, 0x49, 0x8a, 0x17, 0x80, 0x1a, 0x2a, 0x17, 0x2d, 0x88, 0x56, 0xd0, 0xf4, 0xbb, 0x4a, 0x6a, + 0xdf, 0x05, 0xe8, 0x9a, 0xe8, 0x89, 0x2a, 0x5d, 0x03, 0xe8, 0x8e, 0xda, 0x4d, 0x75, 0xa8, 0x39, + 0x71, 0x68, 0x21, 0x67, 0x08, 0x88, 0xcb, 0x11, 0xf4, 0xb0, 0xfe, 0xce, 0x39, 0x20, 0x0f, 0xe4, + 0xe9, 0xd1, 0x0e, 0xff, 0x1f, 0xbd, 0x9a, 0xfe, 0xff, 0x16, 0x1a, 0x13, 0xe9, 0x12, 0xfe, 0x34, + 0xad, 0x22, 0xe8, 0x96, 0xe2, 0xd8, 0xb7, 0xb9, 0x8e, 0xc0, 0x5c, 0xb8, 0xb4, 0xa7, 0x0d, 0x2c, + 0xfa, 0x2d, 0x0d, 0xb6, 0x02, 0x45, 0xeb, 0xdd, 0x1b, 0x0c, 0xf0, 0x6a, 0x21, 0x89, 0x8e, 0x55, + 0xad, 0xb5, 0x36, 0xed, 0xe8, 0xf8, 0x16, 0x18, 0x96, 0x05, 0x55, 0x5d, 0x02, 0xfe, 0x04, 0xd3, + 0x88, 0x09, 0x43, 0x04, 0x9e, 0x03, 0x26, 0x7d, 0x9c, 0x07, 0x3d, 0x61, 0xf3, 0x10, 0x66, 0xca, + 0x57, 0x0a, 0xd5, 0xff, 0x48, 0xbc, 0x35, 0x2c, 0xda, 0x58, 0x56, 0xe2, 0x65, 0x0a, 0xad, 0xa3, + 0xd3, 0x8d, 0xfb, 0xae, 0xc8, 0x31, 0xf6, 0xd4, 0xf0, 0x8c, 0x8f, 0xf4, 0x13, 0x91, 0x86, 0x98, + 0x12, 0x13, 0xc7, 0xf8, 0xbd, 0x81, 0x6f, 0xb1, 0xe1, 0x15, 0x9c, 0xbc, 0xe4, 0x4a, 0x71, 0xb8, + 0x5e, 0x14, 0xc1, 0x0c, 0x53, 0x56, 0x67, 0x30, 0x70, 0x40, 0xf6, 0x4b, 0x21, 0x41, 0xdf, 0x2b, + 0x39, 0xee, 0xa5, 0xb8, 0xbe, 0xbe, 0x1b, 0x45, 0xf0, 0xeb, 0x08, 0x19, 0x07, 0x6f, 0xc6, 0x0f, + 0x7c, 0x58, 0xf2, 0x6c, 0xec, 0xfa, 0xb2, 0x3a, 0xed, 0xe4, 0x01, 0x58, 0xc1, 0x8a, 0x45, 0xf2, + 0x8e, 0x2d, 0xef, 0x75, 0x35, 0xeb, 0x93, 0xe2, 0x99, 0x1f, 0x28, 0xa0, 0xe5, 0xc0, 0xb3, 0xac, + 0x77, 0x00, 0xec, 0x34, 0xf0, 0x26, 0x53, 0x33, 0xd7, 0xee, 0x9c, 0x06, 0x00, 0x00, 0x8f, 0xe9, + 0xe9, 0x7e, 0x02, 0x62, 0x32, 0xb7, 0xc5, 0x3f, 0xc4, 0x97, 0x5d, 0xcf, 0x8b, 0x8c, 0x45, 0xdf, + 0x64, 0x5d, 0xc2, 0x06, 0x83, 0x0c, 0x95, 0xab, 0xca, 0x21, 0x81, 0xa3, 0xcf, 0xe1, 0xc1, 0x5c, + 0xef, 0x0f, 0x1e, 0x73, 0xc8, 0x7a, 0x7b, 0xe8, 0xac, 0xf7, 0xca, 0x46, 0x17, 0x7a, 0x42, 0xff, + 0x93, 0x33, 0x6c, 0x09, 0xef, 0x1d, 0xfc, 0x30, 0x53, 0xa7, 0x4d, 0xa4, 0xf8, 0xb1, 0x0a, 0xd4, + 0x76, 0x0d, 0xb2, 0x01, 0x2e, 0x17, 0xa3, 0xaf, 0x2d, 0xb6, 0xe8, 0x3b, 0x15, 0xdb, 0x7d, 0x25, + 0x09, 0x97, 0x01, 0x3a, 0x75, 0xb6, 0xa0, 0x1d, 0x09, 0x96, 0xb8, 0x9a, 0xfe, 0x4c, 0xfa, 0xe8, + 0x5f, 0x4f, 0x74, 0xb3, 0xdd, 0xe8, 0x87, 0x27, 0xea, 0x3d, 0x80, 0xc0, 0x54, 0x5a, 0x73, 0x99, + 0x78, 0xfb, 0xd4, 0x5b, 0x5e, 0xd6, 0xcb, 0xa2, 0xd3, 0xa5, 0x96, 0xb7, 0xf0, 0x0a, 0xd8, 0x89, + 0x01, 0xaa, 0x6e, 0xa5, 0x60, 0xf4, 0x76, 0xd4, 0xe8, 0xaa, 0x06, 0x98, 0xc2, 0xde, 0x78, 0xc1, + 0xdc, 0x12, 0xad, 0xb4, 0x34, 0x56, 0x90, 0xb5, 0x2f, 0xb6, 0x1b, 0xe0, 0x26, 0xa9, 0xff, 0xb8, + 0x46, 0xe0, 0x11, 0x7f, 0x39, 0x8b, 0x76, 0xdc, 0x11, 0x74, 0x3a, 0xde, 0x16, 0xdb, 0x85, 0xe4, + 0x1f, 0xb7, 0x90, 0x49, 0xb2, 0xc0, 0x3b, 0x52, 0xf2, 0xdb, 0xff, 0x7a, 0xc7, 0x28, 0x81, 0xf2, + 0x76, 0xe2, 0xf6, 0xc9, 0x1c, 0x78, 0x2d, 0xf5, 0x78, 0xbd, 0xec, 0x0d, 0x3d, 0x58, 0x06, 0x61, + 0xbb, 0xc1, 0x08, 0x00, 0x73, 0x28, 0x23, 0x82, 0x77, 0xb6, 0xf2, 0x83, 0x5e, 0x02, 0xe8, 0xb8, + 0xcf, 0x29, 0x74, 0xd6, 0x74, 0x1c, 0x10, 0xb4, 0x1e, 0x6b, 0xf9, 0x05, 0x5d, 0xf6, 0x16, 0x9e, + 0xff, 0xf8, 0xc3, 0x4f, 0xb0, 0x92, 0x25, 0x6f, 0xb0, 0x4c, 0x9b, 0x05, 0x75, 0xdd, 0x60, 0x44, + 0x72, 0x73, 0x0f, 0x91, 0xe9, 0xde, 0xb0, 0xfe, 0xe3, 0x01, 0xcf, 0xc6, 0x14, 0x4e, 0x5c, 0x4e, + 0x96, 0x0f, 0xd6, 0xc6, 0xe1, 0xdc, 0x60, 0x2d, 0x1b, 0x76, 0xb7, 0xcf, 0xde, 0xe6, 0x77, 0x13, + 0x46, 0xdc, 0xe7, 0x30, 0xe4, 0xda, 0x40, 0x13, 0x4f, 0xb2, 0x0f, 0xd2, 0x7d, 0xa5, 0xfd, 0xe9, + 0x80, 0xe8, 0x66, 0x0e, 0x2f, 0xd5, 0xd1, 0x8b, 0xc0, 0x76, 0x36, 0x10, 0x7d, 0xd0, 0x6c, 0xd6, + 0x21, 0xe6, 0x0f, 0xc4, 0x99, 0x0d, 0xf2, 0xf4, 0xdc, 0x11, 0xd1, 0x32, 0xae, 0xea, 0xb7, 0x4e, + 0x19, 0xd7, 0xf5, 0x67, 0x9b, 0xc8, 0x0d, 0xb1, 0xfd, 0x85, 0xfc, 0x89, 0x9b, 0xe6, 0x7c, 0xc1, + 0x0f, 0xae, 0x49, 0x23, 0x43, 0x27, 0xb0, 0x93, 0xf5, 0xf2, 0xa1, 0xe8, 0xd8, 0xfc, 0xcf, 0xec, + 0x29, 0x64, 0x63, 0x32, 0x19, 0x30, 0xec, 0xd0, 0x8f, 0x99, 0x98, 0x8e, 0x64, 0x81, 0xf8, 0x0b, + 0xeb, 0xbd, 0x2b, 0x41, 0x62, 0xfa, 0x45, 0xda, 0x11, 0xa3, 0xbb, 0xf0, 0x1d, 0x0a, 0xf7, 0x2b, + 0xa2, 0x02, 0x76, 0xf4, 0x83, 0x05, 0xc7, 0x00, 0xd9, 0xa0, 0x37, 0x83, 0x5d, 0xfd, 0x18, 0xdc, + 0x1c, 0xf0, 0xd2, 0x30, 0x52, 0xf1, 0x1b, 0x2c, 0xac, 0x25, 0x0d, 0xb9, 0x2a, 0x17, 0xdd, 0x5c, + 0x26, 0x76, 0x31, 0xd9, 0x8f, 0xf6, 0xe6, 0xe3, 0xe9, 0x1c, 0xfd, 0xd7, 0x06, 0x37, 0x27, 0x9d, + 0xdc, 0xd4, 0x8a, 0x1c, 0x26, 0xa0, 0xbb, 0x06, 0x56, 0xf4, 0xe9, 0x6a, 0xd7, 0x10, 0xcf, 0x3a, + 0x5e, 0x21, 0x00, 0x93, 0xb3, 0x44, 0xff, 0x66, 0xa5, 0x8d, 0xe7, 0x75, 0x3a, 0xfa, 0xc2, 0xe4, + 0xae, 0x55, 0xdd, 0x85, 0xd2, 0xf1, 0xd0, 0x04, 0x5a, 0xef, 0x3a, 0xdd, 0x3c, 0x28, 0x6e, 0x2e, + 0xf5, 0x01, 0xc7, 0x0c, 0x6f, 0x6e, 0xdc, 0x23, 0x5b, 0xb5, 0x25, 0x68, 0x7e, 0x7a, 0x39, 0xf2, + 0x09, 0x30, 0xb7, 0xc2, 0xf4, 0xfc, 0x5d, 0x46, 0x14, 0x6e, 0xc5, 0x75, 0x59, 0xcd, 0x95, 0x36, + 0xa2, 0xf0, 0xbb, 0x50, 0xfb, 0xe8, 0xe8, 0x86, 0xf7, 0xeb, 0xd8, 0x81, 0x47, 0xd6, 0x75, 0x2b, + 0xe7, 0x57, 0x8b, 0xd9, 0xe8, 0x99, 0x28, 0x8a, 0xb9, 0x80, 0xd4, 0x55, 0x04, 0x57, 0x77, 0x01, + 0xcd, 0xbd, 0x73, 0x4a, 0x3d, 0x53, 0xbc, 0x04, 0x42, 0x3d, 0x43, 0xb4, 0x5d, 0x16, 0xba, 0xe2, + 0x75, 0x99, 0x4f, 0xaa, 0x3c, 0x25, 0x46, 0x65, 0xa3, 0x21, 0x18, 0x05, 0x11, 0x9b, 0x5c, 0xff, + 0x3d, 0x6f, 0xac, 0x5e, 0x84, 0x60, 0xf7, 0x0e, 0xd6, 0xd9, 0x4d, 0xf8, 0x29, 0xff, 0x39, 0xd0, + 0x75, 0xd6, 0x47, 0xe9, 0x61, 0x6c, 0x10, 0x7c, 0x4b, 0xe7, 0x50, 0xdb, 0x3d, 0x6f, 0x4b, 0x19, + 0xfe, 0x3d, 0x6e, 0x00, 0x74, 0x5c, 0x3d, 0x69, 0x5a, 0x5a, 0x39, 0x6e, 0xc2, 0x92, 0x8e, 0xea, + 0xf6, 0xeb, 0x1d, 0xe9, 0x8f, 0x1f, 0xf2, 0x58, 0x3d, 0x73, 0xf7, 0x2d, 0x3d, 0x70, 0x4b, 0xee, + 0x2f, 0xff, 0x1d, 0xd9, 0xbb, 0x10, 0x20, 0xe0, 0xe8, 0x2c, 0x25, 0x19, 0xe9, 0x7e, 0x99, 0xff, + 0xe4, 0xa2, 0xc7, 0x7c, 0xb0, 0x74, 0xe0, 0xda, 0xe9, 0x0c, 0xb7, 0x62, 0x1c, 0x76, 0x8f, 0x2c, + 0xcc, 0xe5, 0xd4, 0x3d, 0x75, 0xbd, 0xcc, 0x30, 0x05, 0xbb, 0xad, 0xcd, 0xe9, 0x45, 0x7e, 0x3d, + 0x67, 0x00, 0x77, 0xbc, 0xcf, 0x3a, 0x45, 0xf8, 0x15, 0x6f, 0x06, 0x4b, 0x77, 0x0e, 0x53, 0x99, + 0xb3, 0x11, 0xfd, 0x78, 0xf5, 0xeb, 0xb1, 0x3d, 0x5b, 0xb4, 0x69, 0x08, 0xf0, 0x4f, 0x99, 0x52, + 0xad, 0xfb, 0x76, 0x35, 0x3d, 0x64, 0x44, 0x79, 0xc0, 0x3d, 0x63, 0x6c, 0x87, 0x22, 0xe0, 0xa3, + 0x5a, 0xe0, 0x8e, 0xb5, 0x8f, 0x48, 0xcc, 0xc1, 0xee, 0xd4, 0xce, 0x73, 0xb2, 0x82, 0x9f, 0xdb, + 0x47, 0xa1, 0xac, 0xef, 0xe9, 0x97, 0xfe, 0x66, 0x4d, 0x81, 0x65, 0xa0, 0xff, 0x9d, 0x98, 0xff, + 0x2d, 0xf4, 0xf6, 0xe9, 0x5f, 0xff, 0x7d, 0x0a, 0xfb, 0xda, 0x0c, 0x2d, 0xf6, 0x1a, 0xd5, 0x53, + 0xa6, 0xcd, 0xff, 0x80, 0x26, 0x7b, 0x10, 0xf8, 0xbe, 0x58, 0x10, 0xda, 0x80, 0x0e, 0x07, 0x01, + 0x65, 0x81, 0x13, 0x0f, 0x78, 0xa3, 0x20, 0x9f, 0x5f, 0x23, 0xc8, 0x94, 0x5d, 0x76, 0x2e, 0x86, + 0x0a, 0x67, 0x42, 0x3c, 0xe2, 0xc7, 0xa1, 0xa5, 0x0d, 0x41, 0xa1, 0x29, 0x49, 0x45, 0x59, 0x02, + 0xed, 0x89, 0x3e, 0x10, 0x11, 0x2f, 0x8d, 0xc6, 0x45, 0x0a, 0x15, 0x77, 0x26, 0x83, 0xc6, 0x0e, + 0x38, 0xd7, 0x9f, 0x33, 0xed, 0xfa, 0x09, 0x2f, 0x75, 0x47, 0xcc, 0x57, 0xe1, 0x68, 0x80, 0x0c, + 0xde, 0x1f, 0xe9, 0xf6, 0xe5, 0x0b, 0xb4, 0x26, 0x02, 0x81, 0x4f, 0x66, 0x03, 0x14, 0x76, 0x40, + 0x29, 0xd0, 0x80, 0x50, 0xd2, 0x2a, 0xf1, 0xb5, 0xfb, 0x5c, 0x52, 0x85, 0xe0, 0x15, 0xb0, 0xfb, + 0x2e, 0x28, 0x4b, 0xd5, 0x9d, 0x2e, 0x68, 0x47, 0x07, 0x28, 0xd1, 0x4d, 0xd0, 0x98, 0x0c, 0x0b, + 0xd1, 0x82, 0xf6, 0xd5, 0x41, 0x09, 0xc6, 0xb4, 0xe3, 0xeb, 0xe1, 0xc4, 0x71, 0x75, 0xf0, 0x12, + 0xb0, 0xff, 0x72, 0xf3, 0x81, 0xfb, 0x9e, 0x10, 0x73, 0xa3, 0xe5, 0x08, 0x5a, 0x12, 0x0a, 0xda, + 0xa6, 0x0e, 0x05, 0x55, 0x68, 0x25, 0x2c, 0x69, 0x34, 0x12, 0xfc, 0xd5, 0xf1, 0x5a, 0x60, 0x15, + 0x18, 0x14, 0xb0, 0x11, 0x89, 0xb8, 0xcf, 0xaa, 0x04, 0xab, 0x09, 0x31, 0x52, 0xd1, 0xb5, 0x30, + 0xdf, 0x2e, 0x1a, 0x8b, 0x5c, 0x02, 0x85, 0xe8, 0x4f, 0x06, 0x75, 0xee, 0x7a, 0xeb, 0xf0, 0x42, + 0x03, 0x45, 0xb7, 0x74, 0xf5, 0x64, 0x2a, 0x95, 0x8b, 0x6d, 0x11, 0xd0, 0xe0, 0x41, 0x3e, 0x14, + 0xca, 0xc0, 0xaf, 0x46, 0xe6, 0x88, 0xbc, 0xf6, 0x54, 0xc1, 0x79, 0xf1, 0xb0, 0x6c, 0x00, 0x56, + 0x33, 0x0c, 0x3b, 0x15, 0xb7, 0x1f, 0xef, 0x15, 0x25, 0x42, 0xaa, 0x31, 0x51, 0x38, 0xbf, 0x72, + 0xd3, 0x09, 0xc3, 0x74, 0x14, 0x15, 0x26, 0x89, 0x85, 0x2c, 0x10, 0xa0, 0x60, 0x24, 0x08, 0x68, + 0xa4, 0xad, 0xdc, 0x5b, 0x4a, 0x0e, 0x5f, 0x4f, 0x09, 0x73, 0x48, 0x06, 0x41, 0x4c, 0xe6, 0x2a, + 0x44, 0x8f, 0x51, 0x98, 0xb0, 0xf6, 0x97, 0x1b, 0xb9, 0x12, 0xa8, 0x8d, 0x68, 0xe5, 0x5e, 0xbd, + 0x4c, 0x86, 0xcd, 0xd9, 0x62, 0x07, 0xa3, 0x06, 0xad, 0x62, 0xce, 0x8c, 0xe2, 0x43, 0x8b, 0x41, + 0xc4, 0x6c, 0x0e, 0x4c, 0x51, 0xd6, 0xfa, 0xbb, 0x37, 0x36, 0xb5, 0xf0, 0xad, 0x10, 0x05, 0x75, + 0x56, 0xe8, 0x5c, 0x28, 0xfc, 0x64, 0x0d, 0x89, 0xa2, 0x87, 0xc1, 0xea, 0xd7, 0x29, 0xd1, 0xd1, + 0x8a, 0x42, 0x7e, 0xc8, 0xf6, 0xb1, 0x7b, 0x46, 0x36, 0xbf, 0x2a, 0xfb, 0x10, 0x7d, 0x28, 0x97, + 0x14, 0xdb, 0x96, 0x92, 0xb8, 0x1b, 0x7a, 0xc3, 0x3d, 0x41, 0x09, 0x13, 0xa5, 0x5a, 0x95, 0x05, + 0x12, 0xb5, 0x73, 0x0a, 0xa7, 0x86, 0xa0, 0xcf, 0x95, 0x69, 0x07, 0xb9, 0x50, 0x20, 0x6d, 0xaf, + 0xeb, 0x0d, 0xa8, 0xfc, 0xc1, 0x25, 0x83, 0x0b, 0x7c, 0xf6, 0x47, 0x4b, 0xe8, 0xf8, 0x0b, 0x3f, + 0x3a, 0xc8, 0xcd, 0x10, 0x8f, 0x13, 0xf6, 0x3b, 0x06, 0xea, 0x1c, 0x13, 0x72, 0x34, 0x7b, 0x2b, + 0x2d, 0x25, 0x61, 0x03, 0x21, 0x5c, 0x11, 0xbe, 0xe8, 0x33, 0x85, 0x07, 0xba, 0xdb, 0x20, 0x2c, + 0xda, 0x14, 0xfd, 0x36, 0x3b, 0x09, 0xe1, 0x1a, 0x6b, 0xc3, 0x23, 0x67, 0xe3, 0x82, 0x40, 0x0e, + 0xe5, 0x8b, 0xfe, 0x64, 0x82, 0xff, 0x80, 0x1a, 0x99, 0x19, 0x2b, 0xf0, 0x56, 0x35, 0x83, 0xe4, + 0xab, 0xd7, 0xcb, 0x9a, 0x73, 0x06, 0x36, 0x74, 0x2b, 0x75, 0xbc, 0xae, 0x00, 0xa1, 0x16, 0x5e, + 0x82, 0x55, 0xd6, 0xc1, 0x41, 0x05, 0x62, 0xfe, 0x76, 0x5f, 0xb7, 0xa3, 0x4f, 0x7f, 0x16, 0x48, + 0x13, 0xf7, 0xd2, 0x21, 0x85, 0xd0, 0xd7, 0x89, 0xa8, 0x28, 0x83, 0x75, 0x3d, 0x94, 0xb9, 0x8c, + 0x4c, 0x10, 0xa4, 0xcc, 0x1d, 0x73, 0x62, 0x07, 0x36, 0xd1, 0x5e, 0x1c, 0x82, 0x17, 0xbf, 0x24, + 0x3c, 0x6b, 0xb4, 0x09, 0xee, 0x36, 0x8e, 0x6f, 0x82, 0x80, 0xce, 0x20, 0xf6, 0x80, 0x66, 0xf8, + 0x7f, 0x20, 0xd0, 0xf8, 0x4f, 0x39, 0x03, 0x74, 0x08, 0x00, 0xf3, 0x01, 0x4f, 0x01, 0x02, 0x70, + 0x7e, 0x66, 0xf3, 0x08, 0xc6, 0x80, 0x1a, 0xee, 0x0c, 0x40, 0xbd, 0x6d, 0xd2, 0x59, 0xc1, 0x05, + 0x8d, 0x6c, 0x02, 0x46, 0xf7, 0x88, 0x10, 0x05, 0x7e, 0xeb, 0x15, 0xeb, 0x3a, 0xeb, 0x44, 0x8a, + 0x77, 0x22, 0xbf, 0x08, 0x69, 0x27, 0x0b, 0x85, 0x9b, 0x22, 0xd9, 0x99, 0x17, 0x71, 0x07, 0xb6, + 0x63, 0xe6, 0x10, 0x48, 0x3b, 0x22, 0xc2, 0xee, 0xd8, 0xeb, 0xd9, 0x37, 0x7e, 0xeb, 0xc6, 0xeb, + 0x21, 0xc3, 0x0b, 0x0b, 0x01, 0x7c, 0x82, 0xe3, 0xb5, 0x52, 0x88, 0xcd, 0x65, 0x5f, 0x6d, 0xec, + 0xcc, 0xd1, 0xd0, 0xac, 0x32, 0x4c, 0x09, 0xe5, 0x3e, 0x84, 0xeb, 0x80, 0x0a, 0xe6, 0x4c, 0x1f, + 0xd5, 0x0a, 0xb1, 0xb2, 0x50, 0x00, 0xf6, 0x8d, 0x08, 0x02, 0xc5, 0x06, 0x0a, 0x30, 0x36, 0x02, + 0x00, 0x82, 0x50, 0xc7, 0x56, 0x46, 0xa0, 0xc5, 0x1e, 0xbc, 0xa2, 0x0a, 0x8d, 0x4e, 0xbb, 0x5e, + 0x0e, 0x4c, 0x7d, 0x0c, 0xe8, 0x28, 0xfe, 0x03, 0xae, 0xa8, 0x93, 0xb8, 0x15, 0xbe, 0xfe, 0x99, + 0x39, 0xd6, 0x7c, 0x95, 0x06, 0x6f, 0xf9, 0xc1, 0x77, 0x13, 0x56, 0xa2, 0x8f, 0x5b, 0xdd, 0x2b, + 0x07, 0x12, 0x7f, 0xe5, 0x0d, 0x75, 0x04, 0xc5, 0x73, 0x07, 0x7a, 0x6f, 0xb4, 0xc9, 0x43, 0x2a, + 0x6d, 0x01, 0x0f, 0x63, 0xf8, 0x29, 0x4f, 0x02, 0xeb, 0xef, 0x83, 0x7c, 0x37, 0x13, 0xe3, 0x8b, + 0x74, 0xbc, 0x67, 0x47, 0xe3, 0x37, 0x5e, 0x5b, 0x30, 0x03, 0xa0, 0xdf, 0x31, 0xaa, 0x86, 0x06, + 0x27, 0x40, 0x76, 0xa8, 0x3c, 0x83, 0x89, 0xd1, 0x69, 0x08, 0x1d, 0xfc, 0x29, 0xc7, 0x19, 0xd1, + 0x61, 0xf4, 0x22, 0x3a, 0xdc, 0xfb, 0x39, 0x8c, 0x34, 0x44, 0xeb, 0x2d, 0x48, 0x0f, 0x3d, 0x23, + 0x35, 0x00, 0xe1, 0x9d, 0x3b, 0x27, 0xe8, 0x7a, 0x80, 0xfc, 0xe4, 0xcb, 0x0b, 0xf6, 0xec, 0x50, + 0x2c, 0xb8, 0xe8, 0x3c, 0x41, 0x09, 0xb6, 0xe0, 0x29, 0x85, 0x7f, 0xb8, 0x48, 0x57, 0x5a, 0x63, + 0x0e, 0x5f, 0xb7, 0x41, 0x3b, 0xeb, 0x37, 0x78, 0x5f, 0xbe, 0x04, 0xfa, 0x3e, 0xaf, 0xf8, 0xa3, + 0x7d, 0x68, 0x19, 0x06, 0xb2, 0xb0, 0x20, 0x61, 0xe3, 0x2b, 0xc2, 0x68, 0x1b, 0xdd, 0x5a, 0xe8, + 0x24, 0x8c, 0x63, 0x05, 0x7c, 0x8f, 0x9c, 0x70, 0x25, 0x34, 0xb2, 0x12, 0xea, 0xf4, 0x96, 0xeb, + 0x39, 0xf8, 0x0f, 0x34, 0x0f, 0xa7, 0xa9, 0x00, 0x30, 0x94, 0x03, 0x0c, 0x44, 0xc2, 0x7f, 0x9a, + 0x52, 0x89, 0xd0, 0x35, 0x6b, 0xdd, 0x08, 0x1e, 0xca, 0x19, 0xda, 0xde, 0x5e, 0xe8, 0xc4, 0xfe, + 0xe9, 0x54, 0xcb, 0x0f, 0xeb, 0xaf, 0x56, 0x05, 0xa0, 0x39, 0x53, 0x0c, 0xbe, 0x00, 0xd5, 0xab, + 0xc3, 0x46, 0xd2, 0x70, 0x02, 0x5b, 0x07, 0xb3, 0x77, 0xe8, 0xda, 0xd8, 0x27, 0x76, 0xf4, 0x80, + 0x4f, 0x11, 0xbb, 0x15, 0x07, 0x75, 0xb9, 0xea, 0x09, 0xc1, 0x19, 0x3b, 0x60, 0xbe, 0x6a, 0x2f, + 0x1c, 0x09, 0x30, 0x67, 0x16, 0x41, 0x7a, 0x83, 0x0b, 0x69, 0x74, 0xa1, 0x20, 0x16, 0x68, 0xbb, + 0x03, 0x07, 0x5e, 0x75, 0x23, 0x8b, 0xc8, 0x09, 0x06, 0x92, 0x41, 0x70, 0x84, 0x19, 0x83, 0x77, + 0x96, 0xce, 0x01, 0xeb, 0xac, 0xea, 0x8a, 0x77, 0x8b, 0x3e, 0x1a, 0x36, 0xbe, 0x14, 0x06, 0xa9, + 0xf0, 0x81, 0xfe, 0x70, 0x11, 0x6a, 0xf0, 0x0b, 0x10, 0xe0, 0x34, 0x60, 0x77, 0xa0, 0x97, 0x2d, + 0x23, 0x6b, 0x33, 0x2f, 0x84, 0x28, 0x42, 0x2a, 0x68, 0x37, 0xf0, 0xa1, 0x3a, 0x62, 0x4a, 0xd6, + 0x3f, 0x0c, 0x81, 0xaf, 0x80, 0xeb, 0xb5, 0x38, 0x40, 0xe0, 0xab, 0x6a, 0xb9, 0xf0, 0xcc, 0x53, + 0x0f, 0xa1, 0x58, 0x9c, 0x04, 0x01, 0x2f, 0x2a, 0xc9, 0xeb, 0xcc, 0x00, 0x1d, 0x94, 0x48, 0x67, + 0x0f, 0x08, 0xc1, 0xb9, 0x00, 0xa9, 0x7d, 0xc8, 0x71, 0xeb, 0xb8, 0x42, 0x24, 0x21, 0x21, 0xa2, + 0xcc, 0x83, 0xb3, 0xc5, 0x4a, 0xcb, 0x8b, 0x03, 0x62, 0x06, 0x83, 0x89, 0x14, 0x2f, 0xb7, 0x17, + 0x1f, 0xeb, 0xb0, 0xf4, 0x17, 0x47, 0x48, 0x68, 0x8b, 0x17, 0x91, 0x9d, 0x06, 0xee, 0xb6, 0x19, + 0x1f, 0x58, 0xda, 0x10, 0x3a, 0xc6, 0x67, 0xff, 0x1e, 0xe8, 0x26, 0xdf, 0xbf, 0x70, 0x13, 0x0b, + 0x49, 0xbb, 0xc5, 0x52, 0x13, 0x4b, 0x00, 0xc8, 0xf1, 0x39, 0xfb, 0x73, 0x16, 0x28, 0xe2, 0x98, + 0x8e, 0x68, 0xab, 0x58, 0xf4, 0xf2, 0x8d, 0x9f, 0xd1, 0x72, 0xf6, 0x5a, 0x41, 0xd6, 0x06, 0xc2, + 0xfc, 0x39, 0xfe, 0x74, 0x15, 0x8d, 0x28, 0x80, 0x23, 0x52, 0xa8, 0x08, 0x85, 0x48, 0xc6, 0xc6, + 0x04, 0x6e, 0xf1, 0xcb, 0xe8, 0x9b, 0x12, 0x0b, 0xc0, 0x1f, 0x92, 0x0a, 0xd6, 0x56, 0x55, 0x4f, + 0xd0, 0xde, 0x88, 0xef, 0xd5, 0xbf, 0x8e, 0x57, 0x90, 0x70, 0x2e, 0x77, 0x40, 0x7f, 0x1c, 0x3a, + 0x6c, 0x01, 0x73, 0x05, 0x7d, 0x51, 0xd1, 0x83, 0x61, 0x05, 0xdb, 0xe8, 0x29, 0x59, 0xee, 0xdb, + 0xe8, 0x3c, 0x5e, 0xe9, 0x26, 0xe0, 0x5d, 0x59, 0x68, 0xce, 0x06, 0x2a, 0x55, 0xbe, 0xb0, 0x34, + 0x8a, 0x30, 0x86, 0x6d, 0xf7, 0xb4, 0x42, 0x2d, 0x92, 0x36, 0x5b, 0xd6, 0x36, 0x37, 0xd1, 0xd2, + 0xd1, 0xa6, 0xca, 0x9b, 0x40, 0xc8, 0xfb, 0x38, 0xf9, 0x67, 0xa4, 0xfd, 0xc3, 0xea, 0x99, 0x0c, + 0x03, 0x63, 0x14, 0x86, 0xbf, 0x0d, 0xcf, 0x75, 0x25, 0x0e, 0xa1, 0x44, 0x87, 0xb0, 0xab, 0x0b, + 0xac, 0x75, 0xbd, 0x7a, 0xe8, 0xd5, 0xea, 0xa5, 0x5d, 0x89, 0xeb, 0x71, 0x80, 0x07, 0xf3, 0x03, + 0x8d, 0x68, 0x82, 0x0e, 0x18, 0xf4, 0x34, 0x39, 0xc6, 0x77, 0xbc, 0x1d, 0x14, 0x01, 0xf2, 0x5b, + 0x7e, 0x72, 0xb5, 0x43, 0x6a, 0x2d, 0x54, 0x02, 0xd2, 0x14, 0x0c, 0x03, 0x2e, 0x4c, 0x6e, 0xc8, + 0x12, 0x6d, 0x51, 0x3b, 0xc5, 0x10, 0x13, 0x4b, 0x84, 0x15, 0x6c, 0x07, 0x0e, 0xc0, 0x55, 0x4e, + 0x46, 0x49, 0xd3, 0x5a, 0x8e, 0x7d, 0xeb, 0xf3, 0xeb, 0x4f, 0xeb, 0x81, 0x50, 0xc8, 0x28, 0x07, + 0x13, 0x27, 0xc3, 0x74, 0x12, 0xbf, 0x9f, 0x73, 0xb7, 0x8c, 0x1f, 0xdd, 0x16, 0x06, 0x36, 0xba, + 0x93, 0x3b, 0xe1, 0x5b, 0x6f, 0x70, 0xa1, 0x12, 0x13, 0x41, 0x2e, 0x85, 0x72, 0x0e, 0x2f, 0x02, + 0x60, 0x37, 0x8b, 0xfa, 0x68, 0x9c, 0x36, 0x4d, 0xa3, 0xd1, 0x18, 0xa2, 0x8e, 0xa3, 0x21, 0x96, + 0xa8, 0xc8, 0x3f, 0x34, 0x02, 0x52, 0x90, 0xed, 0xfa, 0xe9, 0x04, 0x5e, 0x1b, 0x2d, 0x61, 0x89, + 0xfc, 0x18, 0x6a, 0x0a, 0x14, 0x84, 0x4c, 0xbe, 0xa1, 0xd5, 0x6b, 0x40, 0x21, 0x74, 0x0a, 0x86, + 0x5b, 0x3e, 0x0a, 0xee, 0xe8, 0xea, 0x01, 0x76, 0x10, 0x72, 0xbe, 0x04, 0xa7, 0xeb, 0x38, 0x42, + 0x6a, 0x07, 0xb6, 0x8f, 0x0c, 0xe4, 0x0f, 0xcf, 0x1d, 0x19, 0x72, 0x2a, 0xd4, 0x70, 0x0e, 0xe6, + 0xb0, 0x57, 0x66, 0x07, 0x05, 0xb7, 0x68, 0x07, 0x18, 0x52, 0x40, 0xf4, 0xdc, 0xba, 0x06, 0xb7, + 0xf8, 0xeb, 0xb3, 0x40, 0xa2, 0x8d, 0xb4, 0xe8, 0x46, 0x15, 0x12, 0xb4, 0x73, 0x5c, 0xa3, 0x28, + 0xdd, 0x81, 0x14, 0xb0, 0xb1, 0x0f, 0xf3, 0x45, 0xc1, 0x3d, 0xb1, 0xc2, 0xaa, 0x0d, 0x26, 0x3c, + 0xae, 0xf9, 0x35, 0xc4, 0x40, 0x82, 0xae, 0xad, 0xf1, 0xf8, 0xc2, 0x39, 0xf8, 0x74, 0x06, 0x93, + 0x11, 0x4c, 0xda, 0x8a, 0xcf, 0x52, 0x38, 0xe9, 0x0e, 0xc3, 0x04, 0x1a, 0x68, 0xd3, 0x32, 0x6c, + 0x60, 0x0c, 0x1d, 0x95, 0x1a, 0x0c, 0x83, 0x6f, 0x34, 0x43, 0x78, 0xa3, 0x10, 0x50, 0x60, 0x6c, + 0x20, 0x5d, 0x77, 0xbe, 0x00, 0xbe, 0x0d, 0xf9, 0x0a, 0x75, 0x28, 0xd8, 0x07, 0x06, 0xa9, 0x70, + 0xe2, 0x1f, 0xd7, 0xbf, 0xd2, 0x7e, 0x10, 0xc6, 0x05, 0x0d, 0xff, 0x07, 0x83, 0x4a, 0x53, 0x1e, + 0x25, 0xee, 0x6d, 0x1e, 0x09, 0xd8, 0x2b, 0xac, 0xf7, 0x00, 0xe6, 0x3c, 0x1e, 0x76, 0x88, 0x1d, + 0x74, 0x85, 0x28, 0xbc, 0x19, 0x1d, 0x9c, 0x22, 0x20, 0xd3, 0x89, 0x09, 0x10, 0x40, 0xc3, 0x00, + 0x92, 0x11, 0x52, 0xcd, 0x07, 0xeb, 0x8a, 0xec, 0x60, 0xc6, 0x6d, 0x3f, 0x53, 0x52, 0xd5, 0x08, + 0x19, 0xa0, 0xa2, 0x22, 0xb6, 0xdc, 0xf6, 0x2b, 0x19, 0xaa, 0x0b, 0xb9, 0x5c, 0xd3, 0x13, 0x02, + 0x54, 0x31, 0x5e, 0xa1, 0xe5, 0x26, 0x32, 0x81, 0x9a, 0x7d, 0xd6, 0xff, 0x1f, 0x07, 0x88, 0xd6, + 0x8a, 0xf1, 0x5f, 0x01, 0x88, 0xda, 0x41, 0xfd, 0x22, 0xf6, 0xc4, 0xff, 0xa0, 0xda, 0xdf, 0x4a, + 0x4a, 0x13, 0xa4, 0x03, 0x54, 0x6c, 0x74, 0xe9, 0x44, 0x6e, 0x01, 0xea, 0xc8, 0xc5, 0x56, 0xd3, + 0x4d, 0xa8, 0xce, 0x0d, 0xd0, 0x33, 0x73, 0x50, 0x93, 0x5b, 0x2e, 0x43, 0xd1, 0xeb, 0xf9, 0x33, + 0xe4, 0x77, 0x3f, 0x74, 0x0f, 0x2c, 0x61, 0xea, 0x3c, 0x19, 0x76, 0x2d, 0x42, 0xe2, 0xf1, 0x04, + 0x41, 0x36, 0x70, 0xf7, 0xc5, 0x51, 0x16, 0x43, 0xe2, 0xb4, 0x47, 0xa5, 0xc3, 0xd4, 0x27, 0xdc, + 0x60, 0x9d, 0x2b, 0x52, 0x3f, 0x52, 0x3d, 0xea, 0xff, 0xfd, 0x77, 0x4d, 0x05, 0x03, 0x00, 0x24, + 0x5f, 0x20, 0x3d, 0x06, 0xa1, 0xe0, 0x72, 0x4b, 0x98, 0x17, 0x28, 0xa8, 0x96, 0xa0, 0xfc, 0x51, + 0xb8, 0x50, 0x76, 0x4d, 0xcc, 0xd0, 0x5a, 0x2c, 0xea, 0x03, 0x52, 0xd0, 0xc2, 0x6b, 0x45, 0x0e, + 0xbc, 0x39, 0xf9, 0x72, 0x0f, 0x78, 0x96, 0xa9, 0xfe, 0xaa, 0x09, 0x07, 0x63, 0xed, 0x5d, 0x3b, + 0x0e, 0x2b, 0xc7, 0x77, 0x2c, 0xe8, 0xda, 0xd7, 0xe1, 0xa3, 0x57, 0x01, 0x6e, 0x51, 0xeb, 0xae, + 0xd6, 0x33, 0x1c, 0xa7, 0x0f, 0xda, 0xeb, 0xbb, 0x1b, 0xf1, 0x07, 0xfb, 0xa8, 0xb0, 0x89, 0x31, + 0xb0, 0xeb, 0xce, 0x0f, 0x23, 0x0f, 0x76, 0x48, 0x4c, 0x0d, 0x21, 0x56, 0x9f, 0x7b, 0xeb, 0xbb, + 0x84, 0x0e, 0x0d, 0x0e, 0x34, 0xe8, 0x13, 0x90, 0x0a, 0x54, 0x41, 0x06, 0x17, 0xf8, 0xac, 0xa1, + 0x80, 0x11, 0x6a, 0x71, 0x11, 0x86, 0xde, 0x0d, 0x16, 0xb4, 0x8a, 0x01, 0x19, 0x8f, 0xa8, 0xcd, + 0x9d, 0xd2, 0x14, 0xbf, 0xb1, 0x3c, 0x41, 0x72, 0x06, 0x3c, 0xff, 0x5a, 0x77, 0x02, 0x04, 0x20, + 0x8a, 0x24, 0x46, 0xdb, 0x80, 0xfc, 0x0d, 0x08, 0x6b, 0x04, 0x0e, 0x45, 0xbe, 0x1a, 0xc4, 0x20, + 0x38, 0xe0, 0xb4, 0xfc, 0x40, 0xbf, 0x29, 0xdb, 0x88, 0xc3, 0x88, 0xe0, 0xa0, 0x30, 0x16, 0xa4, + 0x29, 0xa8, 0x76, 0x09, 0x39, 0xca, 0x51, 0x8e, 0xd4, 0xb6, 0xd8, 0x77, 0xfe, 0x04, 0x1e, 0xe0, + 0x77, 0x25, 0x11, 0x73, 0xb1, 0x11, 0xaa, 0x65, 0x17, 0x81, 0x72, 0xf2, 0x83, 0x41, 0x5b, 0x5b, + 0x66, 0xeb, 0xa2, 0xde, 0xfa, 0xe6, 0xd6, 0xa7, 0xf2, 0xdd, 0x0f, 0x00, 0x6c, 0xf2, 0x8b, 0x43, + 0x19, 0xab, 0x5b, 0x3d, 0x87, 0x97, 0x34, 0x43, 0x66, 0xe7, 0x03, 0x18, 0x82, 0x30, 0xba, 0x4b, + 0x00, 0x4e, 0xc9, 0x94, 0xcf, 0x62, 0xbb, 0xe6, 0x4e, 0x9a, 0x80, 0xa6, 0xe6, 0xb4, 0x88, 0xc6, + 0x47, 0x39, 0x61, 0xea, 0x04, 0xbd, 0xa4, 0x17, 0x6e, 0xdf, 0x2d, 0xd4, 0xfd, 0x0d, 0xae, 0x57, + 0x06, 0xe8, 0x22, 0xfe, 0x49, 0x8d, 0x3b, 0xd6, 0xc1, 0x42, 0x21, 0xa8, 0xb2, 0xed, 0x5c, 0x50, + 0x02, 0x66, 0x32, 0x69, 0xe2, 0x37, 0x0e, 0x89, 0x23, 0xa9, 0xd3, 0xfd, 0x7e, 0xc6, 0xc6, 0x42, + 0xfc, 0x00, 0xec, 0x62, 0x9d, 0xfd, 0xd7, 0x15, 0x1c, 0xb6, 0x0b, 0x2f, 0x1c, 0x23, 0x7e, 0xbb, + 0xdf, 0xfd, 0xeb, 0x41, 0xe2, 0x1d, 0xa6, 0x7f, 0x15, 0x30, 0xb0, 0xf5, 0xd1, 0x16, 0xcf, 0x60, + 0xe8, 0x24, 0xf5, 0x4d, 0x26, 0xd3, 0x3d, 0x5f, 0xdd, 0x09, 0xcb, 0x56, 0x7d, 0x28, 0x17, 0xd7, + 0x11, 0x4d, 0x08, 0xdd, 0x29, 0x11, 0x44, 0x3d, 0x20, 0xaa, 0x2d, 0x1a, 0x37, 0xf2, 0xec, 0x2a, + 0xd2, 0x0d, 0xcf, 0x08, 0xb9, 0x82, 0x5c, 0xd8, 0x1f, 0x7b, 0xfd, 0x1a, 0x20, 0xbc, 0x3c, 0x85, + 0x74, 0x6a, 0x04, 0x20, 0x45, 0x39, 0x89, 0xd1, 0xaf, 0x06, 0x3d, 0x94, 0x05, 0x27, 0x41, 0x1e, + 0x6a, 0x2b, 0x86, 0x2d, 0x89, 0x2e, 0xe7, 0xd3, 0x87, 0x33, 0x14, 0xbe, 0x3a, 0xa4, 0xd4, 0x80, + 0xe8, 0x4f, 0x3b, 0xee, 0x8b, 0xa7, 0xd9, 0x5a, 0x64, 0x19, 0xb6, 0xa0, 0x30, 0xb4, 0x34, 0x6c, + 0x61, 0xdb, 0xd8, 0xa9, 0x00, 0xa3, 0xff, 0x08, 0xdb, 0x04, 0x24, 0x3c, 0x26, 0xe2, 0xa4, 0x66, + 0x16, 0x95, 0xb6, 0x06, 0x04, 0x58, 0x24, 0x34, 0x30, 0x54, 0xdc, 0xa0, 0x88, 0x64, 0x32, 0x54, + 0xd9, 0x53, 0x7c, 0x02, 0xe2, 0xf8, 0xa5, 0x55, 0xdb, 0xe8, 0xaa, 0x87, 0xc2, 0xc5, 0xa8, 0x01, + 0x49, 0xfc, 0xf1, 0xf6, 0xc2, 0x02, 0x52, 0xfb, 0x3a, 0xf6, 0xc1, 0xdb, 0x98, 0x45, 0x4a, 0x67, + 0x18, 0xbe, 0x1a, 0x04, 0x10, 0x7a, 0x12, 0x09, 0xeb, 0x94, 0xbd, 0x6a, 0x8b, 0x54, 0x18, 0xa2, + 0x45, 0xa5, 0xba, 0xb4, 0x20, 0x44, 0x54, 0xae, 0xbd, 0x0e, 0x8a, 0x22, 0x94, 0xae, 0x54, 0xa2, + 0xa8, 0xa7, 0xc0, 0x95, 0x1c, 0xa2, 0xee, 0x24, 0xbf, 0x69, 0x99, 0xf8, 0x52, 0xca, 0xc0, 0xfb, + 0x03, 0xbe, 0xa1, 0x99, 0x44, 0xb8, 0x1e, 0xe4, 0x8b, 0xd5, 0xae, 0xa8, 0x59, 0x26, 0x14, 0x8b, + 0xd0, 0xd2, 0xf8, 0x0a, 0x83, 0xfb, 0xb9, 0xd7, 0x5e, 0xb5, 0x00, 0x35, 0x23, 0x68, 0xca, 0xab, + 0x11, 0x25, 0xc2, 0x4a, 0xaf, 0x02, 0xb9, 0x20, 0x5c, 0xcd, 0x59, 0x62, 0x95, 0x1e, 0xd7, 0x56, + 0x16, 0xb0, 0xf6, 0x14, 0xe8, 0x80, 0xbf, 0xb5, 0x8d, 0xb7, 0x08, 0x12, 0x89, 0x74, 0x80, 0xeb, + 0x95, 0x6c, 0x5d, 0xf9, 0x60, 0x6d, 0xcb, 0x12, 0x30, 0xea, 0xc3, 0xb1, 0x09, 0x0d, 0x1d, 0xd6, + 0xd3, 0xeb, 0x02, 0xc1, 0x50, 0x32, 0xe2, 0xed, 0x67, 0xb1, 0x05, 0xbe, 0xfa, 0x81, 0xe3, 0xe0, + 0x01, 0x29, 0x92, 0xad, 0xd0, 0x18, 0xeb, 0x30, 0xd0, 0xb1, 0x73, 0x7e, 0xe4, 0xf8, 0x4b, 0xd3, + 0xe8, 0xd1, 0x1f, 0x4e, 0xaf, 0xde, 0x0f, 0x05, 0x25, 0xe0, 0x16, 0xbb, 0xf6, 0xde, 0x10, 0x80, + 0xe2, 0x1f, 0x29, 0x74, 0x9b, 0x8e, 0xd1, 0x8a, 0xe2, 0x75, 0xb9, 0x0c, 0xdc, 0x8a, 0x50, 0x60, + 0x06, 0x43, 0x8b, 0xcd, 0x63, 0xc1, 0xb4, 0x35, 0x02, 0x47, 0xfd, 0x96, 0xa0, 0xa1, 0x94, 0xa0, + 0xb0, 0x10, 0xa7, 0x2d, 0x78, 0xc6, 0x59, 0x71, 0x38, 0x04, 0x50, 0x68, 0xaa, 0x4e, 0x99, 0x75, + 0x28, 0x37, 0xd5, 0x00, 0x67, 0x6d, 0xf7, 0x15, 0x5b, 0xbf, 0xf9, 0x5d, 0x76, 0x49, 0x44, 0x2e, + 0x7f, 0x3c, 0x22, 0x08, 0x36, 0xc8, 0x76, 0xdb, 0x4e, 0xf3, 0x09, 0xb5, 0x75, 0x3b, 0x23, 0xd6, + 0x12, 0xc7, 0x46, 0x84, 0x6e, 0x0a, 0x85, 0xa7, 0xed, 0xec, 0xb0, 0x01, 0x2c, 0xb5, 0xe2, 0x24, + 0x56, 0x4d, 0xa3, 0x70, 0x62, 0x1f, 0xea, 0x8b, 0x58, 0xb7, 0xb5, 0xd1, 0xe7, 0xd1, 0x01, 0xd7, + 0x35, 0x93, 0x05, 0xb7, 0x4c, 0x41, 0x42, 0x75, 0x48, 0x46, 0xc6, 0x37, 0x80, 0xa6, 0xe9, 0x56, + 0xab, 0x00, 0xc9, 0xee, 0x28, 0x11, 0xa0, 0xd8, 0xba, 0x06, 0xd3, 0xde, 0x4d, 0x5c, 0x75, 0x13, + 0x46, 0x1b, 0x82, 0xd6, 0x37, 0x59, 0xed, 0x07, 0x46, 0x06, 0xf4, 0xfe, 0x5c, 0x74, 0x9a, 0x75, + 0x77, 0x23, 0xbb, 0x53, 0x93, 0x80, 0x81, 0x9b, 0xef, 0xd5, 0x60, 0x1a, 0xdb, 0xeb, 0xaf, 0x24, + 0xdc, 0xeb, 0x13, 0x0c, 0xdb, 0x33, 0xdf, 0x69, 0x75, 0x74, 0xef, 0x28, 0xc0, 0x08, 0x60, 0xc0, + 0x2e, 0x0d, 0xd6, 0x88, 0x8b, 0x44, 0x45, 0xca, 0x37, 0x51, 0x0f, 0x67, 0x16, 0x41, 0x7e, 0x5a, + 0xed, 0xe9, 0x8d, 0x6c, 0x73, 0xd8, 0xdd, 0x44, 0x28, 0x2b, 0x80, 0x70, 0xeb, 0x56, 0x68, 0xc2, + 0x4e, 0x3e, 0xd5, 0xfa, 0x1b, 0xa2, 0x0c, 0xdb, 0xff, 0x8b, 0x09, 0x40, 0xff, 0x29, 0xf9, 0xd1, + 0xe0, 0x89, 0xcb, 0x83, 0xc1, 0xed, 0x02, 0x05, 0x02, 0x94, 0xad, 0xe1, 0x89, 0xe9, 0xc8, 0x40, + 0x24, 0xc4, 0x70, 0xbd, 0xfa, 0x40, 0xe1, 0x39, 0xfb, 0x61, 0x43, 0x3e, 0x84, 0xd5, 0xe8, 0x19, + 0x76, 0x32, 0x8b, 0x76, 0xd7, 0x14, 0x60, 0x44, 0x04, 0x6b, 0x25, 0x61, 0x79, 0x8d, 0x66, 0xfc, + 0x68, 0x5d, 0x2d, 0x51, 0x44, 0x3d, 0x13, 0x8c, 0x5d, 0x89, 0xf0, 0x41, 0xdb, 0x7c, 0x01, 0xcb, + 0x5c, 0xef, 0x5e, 0x28, 0x0a, 0x8f, 0xaf, 0x0c, 0xe1, 0xa8, 0xfe, 0x40, 0xb9, 0x45, 0x56, 0x7a, + 0x63, 0x70, 0x55, 0x3f, 0xbc, 0xb8, 0x68, 0x9f, 0xd1, 0xb9, 0x66, 0xb8, 0x27, 0x1e, 0x95, 0x21, + 0x86, 0x7e, 0x99, 0x11, 0x50, 0xa1, 0x98, 0x17, 0x82, 0x5d, 0xff, 0xf6, 0xa3, 0x8a, 0x9f, 0xa1, + 0x14, 0xed, 0xa3, 0x6c, 0x02, 0x0b, 0x91, 0xa1, 0x6e, 0x20, 0xa3, 0x6a, 0xd0, 0x02, 0xa0, 0x9d, + 0x7b, 0x5c, 0xa1, 0x18, 0x53, 0xa2, 0x03, 0x22, 0xb0, 0x48, 0xf7, 0x50, 0xb0, 0xdc, 0x13, 0x0a, + 0x1b, 0xd0, 0x94, 0xbf, 0xbb, 0x50, 0xcc, 0xeb, 0x06, 0x57, 0xf8, 0x56, 0x49, 0x44, 0x45, 0x4f, + 0x39, 0x82, 0x04, 0xa0, 0x31, 0x76, 0xf1, 0x67, 0xfe, 0xa8, 0x03, 0x75, 0x1d, 0xb9, 0x64, 0x06, + 0xd6, 0x40, 0x1f, 0x47, 0x0b, 0x11, 0x66, 0x14, 0xe5, 0x0a, 0x7a, 0x49, 0x83, 0xa5, 0x3f, 0xf8, + 0xb8, 0x8c, 0x9f, 0x6a, 0x2d, 0x09, 0x8f, 0xfd, 0x3d, 0x80, 0xff, 0x7d, 0x4d, 0x8a, 0x00, 0x89, + 0x7f, 0x0a, 0x68, 0xc3, 0x24, 0x14, 0x54, 0xa0, 0x3f, 0xd9, 0xbe, 0x01, 0x36, 0x23, 0x14, 0xc8, + 0x02, 0x1a, 0xef, 0x25, 0x9f, 0x8f, 0x9f, 0x80, 0xf6, 0xe3, 0x01, 0x30, 0xe7, 0x6d, 0xbf, 0x13, + 0xe9, 0xf8, 0x82, 0x06, 0x11, 0x55, 0x0d, 0xfe, 0x14, 0x53, 0x68, 0x71, 0x15, 0x8a, 0x15, 0x1c, + 0x83, 0x34, 0x24, 0x05, 0xf0, 0x90, 0x14, 0x03, 0x72, 0x06, 0x99, 0xa6, 0xba, 0x27, 0x13, 0x17, + 0xd7, 0xbe, 0x3b, 0x81, 0xef, 0x60, 0x7d, 0x6b, 0x2b, 0xec, 0x0e, 0xa7, 0xaf, 0xa2, 0x17, 0x17, + 0x8a, 0x72, 0x12, 0x43, 0x54, 0x89, 0x2f, 0xa7, 0x5d, 0xaa, 0x14, 0xb7, 0xe4, 0xeb, 0xc7, 0x74, + 0x1f, 0x8f, 0x11, 0xd7, 0x82, 0xc3, 0x1a, 0x5d, 0x02, 0x13, 0x01, 0x2c, 0xb3, 0x4a, 0x13, 0x0b, + 0xdd, 0xa6, 0xae, 0xff, 0x18, 0xd5, 0xa9, 0xf0, 0x7f, 0x74, 0x3e, 0x8a, 0x52, 0xf4, 0xff, 0xe6, + 0x80, 0x03, 0xc9, 0x13, 0xdb, 0x13, 0x1b, 0xab, 0xc5, 0xe1, 0x20, 0x83, 0xd3, 0x1c, 0x6d, 0xd0, + 0x5b, 0xfb, 0x1f, 0x3d, 0xe0, 0x8f, 0x73, 0xca, 0x7f, 0x20, 0x70, 0x72, 0x1e, 0x2d, 0x00, 0xb3, + 0x70, 0x1d, 0x67, 0x05, 0x0a, 0xf5, 0xe6, 0x8b, 0xd3, 0x92, 0xa0, 0x98, 0x56, 0xad, 0x08, 0xe5, + 0x2b, 0xd2, 0xd2, 0x2b, 0xc0, 0xd5, 0xa5, 0x08, 0x88, 0x26, 0x35, 0xf1, 0xd3, 0x03, 0x04, 0x4b, + 0x02, 0x34, 0xf0, 0x8b, 0xf4, 0xe8, 0x05, 0x0c, 0xd2, 0xd0, 0xb6, 0x10, 0xb0, 0xc7, 0x50, 0xda, + 0x68, 0x36, 0x0b, 0xd1, 0x91, 0x76, 0x93, 0xc0, 0x00, 0xdf, 0x08, 0x5c, 0x04, 0x75, 0x53, 0x6f, + 0x05, 0x4c, 0x02, 0x75, 0x96, 0x15, 0x14, 0x0b, 0xce, 0x60, 0xe5, 0xa3, 0x64, 0xbf, 0xf8, 0x36, + 0xf7, 0x24, 0x92, 0x91, 0x65, 0x0b, 0x8d, 0x76, 0x6c, 0x07, 0xfa, 0xbb, 0x64, 0x02, 0x08, 0xe7, + 0xf8, 0x8a, 0x01, 0xdf, 0xb1, 0x56, 0xf2, 0x11, 0x5e, 0xb1, 0xf0, 0x18, 0xb2, 0x24, 0x0e, 0x60, + 0x58, 0x23, 0x0e, 0x58, 0x37, 0x5c, 0xf8, 0xd2, 0x04, 0x43, 0x83, 0xec, 0x56, 0xf0, 0x00, 0x38, + 0xd9, 0x0f, 0x0b, 0x20, 0xdb, 0x55, 0x56, 0x34, 0xfc, 0x8b, 0x0b, 0x37, 0x18, 0xca, 0x04, 0xcd, + 0x15, 0xec, 0x22, 0x66, 0x82, 0x36, 0x4d, 0x76, 0x06, 0x09, 0x37, 0xfe, 0x29, 0xb2, 0x79, 0xd6, + 0xe9, 0xe0, 0xbd, 0x53, 0xbe, 0x19, 0x0c, 0x97, 0x07, 0x46, 0x13, 0x04, 0x7c, 0xee, 0x07, 0x60, + 0x52, 0x82, 0xf0, 0xbd, 0x0c, 0x7d, 0xc1, 0x18, 0xe0, 0x89, 0x17, 0x5b, 0x29, 0x10, 0x1c, 0xb4, + 0x3c, 0x05, 0x27, 0x0e, 0x45, 0xd8, 0xd3, 0x59, 0x11, 0x32, 0x5b, 0x0c, 0x33, 0xca, 0x46, 0xfe, + 0xc6, 0xd4, 0x31, 0x2b, 0x54, 0x37, 0x75, 0x1e, 0x13, 0x6b, 0x71, 0x3f, 0xd5, 0x0e, 0xb5, 0x85, + 0x44, 0x10, 0x5f, 0xfd, 0x2a, 0x00, 0x88, 0x4e, 0xb1, 0xb1, 0x6c, 0x1b, 0x1c, 0xba, 0x1e, 0x90, + 0x5d, 0x78, 0xd5, 0xf6, 0x41, 0xf7, 0xa0, 0xe0, 0x10, 0xda, 0xba, 0x35, 0x97, 0xa8, 0xe8, 0xc1, + 0xf7, 0xbe, 0xeb, 0xd2, 0xa1, 0x1d, 0x23, 0xc5, 0xae, 0x2b, 0x14, 0x6b, 0x4f, 0x13, 0x56, 0x12, + 0x89, 0x72, 0x46, 0xd1, 0xdd, 0x0e, 0x4e, 0x36, 0x6f, 0x10, 0xeb, 0xbe, 0xa1, 0x6d, 0x08, 0x3d, + 0xa9, 0x2a, 0x92, 0x90, 0xbb, 0x16, 0xf3, 0xa1, 0x43, 0x5a, 0x56, 0xfb, 0x6f, 0xa3, 0x19, 0x41, + 0x0f, 0x2d, 0xc3, 0x77, 0x3b, 0x39, 0xc3, 0x73, 0xcd, 0x24, 0x3b, 0x73, 0xa9, 0x2a, 0xa5, 0x74, + 0xd1, 0xe1, 0xd7, 0x08, 0x27, 0x85, 0x56, 0x43, 0x11, 0xdb, 0x36, 0x28, 0x01, 0x42, 0x0a, 0xd6, + 0xce, 0x10, 0xc4, 0x14, 0xc2, 0x56, 0x7e, 0x2e, 0xc1, 0xd1, 0xf9, 0xb8, 0x6e, 0x4a, 0x94, 0x97, + 0x0c, 0xd0, 0xbb, 0x4d, 0x11, 0xe9, 0x67, 0x21, 0xeb, 0xa4, 0xdf, 0x41, 0xc4, 0x1a, 0xb9, 0x02, + 0x5a, 0x82, 0x06, 0x6e, 0x3a, 0xdb, 0x76, 0x0e, 0x21, 0x5c, 0x7c, 0x0a, 0x80, 0xcc, 0x80, 0x41, + 0x7e, 0x06, 0xdb, 0xfe, 0xb1, 0x74, 0xc1, 0xd0, 0xf2, 0x5e, 0x87, 0x98, 0x08, 0x01, 0x3e, 0xff, + 0xc1, 0xf2, 0xeb, 0x52, 0x00, 0x00, 0x09, 0x13, 0x79, 0x45, 0x1e, 0x27, 0x3e, 0xde, 0x3a, 0x87, + 0x13, 0x45, 0x2c, 0xc3, 0xc7, 0x11, 0x6c, 0x9a, 0x83, 0x1b, 0x5b, 0x39, 0xfa, 0xc7, 0x72, 0x60, + 0x8e, 0xda, 0xbb, 0x53, 0x83, 0xff, 0xf4, 0x06, 0x73, 0x03, 0xbf, 0x2b, 0xc4, 0x10, 0x73, 0x77, + 0x4f, 0x54, 0x4c, 0xbf, 0x0f, 0x5c, 0x06, 0x39, 0xcf, 0x76, 0xba, 0x50, 0x0b, 0x07, 0xfb, 0x13, + 0x89, 0x11, 0x78, 0x29, 0xf8, 0xff, 0x95, 0x6c, 0x1f, 0x39, 0x5e, 0x6e, 0xd4, 0x01, 0xf9, 0x03, + 0xd8, 0xa2, 0xce, 0x68, 0x85, 0x3f, 0xab, 0x4b, 0x50, 0xa0, 0x8f, 0x34, 0xe3, 0x16, 0x53, 0x80, + 0xa6, 0xb3, 0x12, 0x6d, 0xb9, 0xb9, 0x2b, 0x0e, 0x37, 0x40, 0x42, 0x1d, 0xa3, 0xba, 0xd1, 0x03, + 0xd9, 0x50, 0xfe, 0x8d, 0x26, 0x1f, 0x4e, 0xe3, 0xd8, 0x56, 0x14, 0x0d, 0xec, 0x82, 0xa9, 0xd5, + 0xdb, 0x56, 0x80, 0xb5, 0xc2, 0xb0, 0x26, 0x05, 0x41, 0xb8, 0x2d, 0x5f, 0x04, 0x5d, 0x30, 0x75, + 0x95, 0xcd, 0x27, 0x38, 0xff, 0x0a, 0xeb, 0xd3, 0xff, 0x4c, 0x0e, 0x8b, 0x7f, 0x2e, 0x7c, 0x06, + 0xaf, 0xad, 0x4a, 0x51, 0x26, 0xde, 0xd9, 0xeb, 0xb1, 0xc7, 0x2d, 0x74, 0xb9, 0xd1, 0x52, 0x8d, + 0xc5, 0x84, 0x50, 0xad, 0x06, 0x3f, 0xf1, 0x83, 0xee, 0x02, 0xf6, 0xba, 0x74, 0x74, 0xf1, 0x29, + 0xb1, 0x60, 0xf3, 0x50, 0xb6, 0xbd, 0x92, 0xf6, 0x07, 0x01, 0x37, 0x99, 0x7e, 0x00, 0x03, 0x80, + 0x07, 0x0e, 0x0e, 0xf6, 0x04, 0x3b, 0x5d, 0x06, 0x2a, 0xb7, 0x45, 0x06, 0x8e, 0xb9, 0xd9, 0x53, + 0xdb, 0x68, 0x89, 0x5d, 0x02, 0x5c, 0x08, 0xa9, 0x82, 0x76, 0x4d, 0x0e, 0x13, 0x22, 0x97, 0xb5, + 0x04, 0x03, 0xaa, 0x15, 0x5c, 0xc8, 0x39, 0xd6, 0x1a, 0xcd, 0x25, 0xdd, 0x68, 0x36, 0x1f, 0xe1, + 0xfe, 0x3b, 0xbe, 0x57, 0x36, 0x7f, 0xd0, 0x82, 0x6b, 0xe8, 0x0d, 0x9b, 0x28, 0xff, 0xf0, 0x4f, + 0x0c, 0x3b, 0x77, 0xb0, 0x21, 0x08, 0x56, 0x6c, 0xda, 0x76, 0x17, 0xd6, 0x04, 0x14, 0x2a, 0xed, + 0x2f, 0x77, 0x0b, 0x87, 0xd8, 0xe9, 0xb5, 0xbd, 0x8e, 0xac, 0x0f, 0xe6, 0x9b, 0x5e, 0x7b, 0x9a, + 0x6e, 0x17, 0x42, 0xde, 0x72, 0x0e, 0x6e, 0xde, 0x3b, 0x02, 0x77, 0x91, 0xe6, 0x13, 0x11, 0xcd, + 0x14, 0x87, 0x62, 0x3d, 0xd8, 0x0b, 0x0e, 0xd7, 0x04, 0x88, 0x40, 0x40, 0xc0, 0x11, 0x37, 0xc9, + 0x45, 0x0c, 0x83, 0xf7, 0x5d, 0x78, 0x39, 0xd8, 0x73, 0xb7, 0x8b, 0x55, 0x0c, 0xc6, 0x29, 0xda, + 0x74, 0xfb, 0x39, 0xd3, 0x73, 0x4e, 0x24, 0xad, 0x1c, 0x03, 0xf1, 0x01, 0xf3, 0x83, 0x3f, 0x6d, + 0x59, 0x46, 0x82, 0x34, 0xfb, 0x52, 0x4b, 0x08, 0x5a, 0x05, 0x14, 0xae, 0x1c, 0xd7, 0xe7, 0xd1, + 0x0f, 0x59, 0xf6, 0x06, 0xcc, 0xef, 0xad, 0x9a, 0x67, 0x0b, 0xe3, 0x70, 0x59, 0x5a, 0xe2, 0x10, + 0x03, 0xe2, 0xa0, 0xfb, 0x37, 0x9a, 0x8d, 0xe9, 0xc5, 0x11, 0xff, 0xf0, 0x9a, 0xad, 0xfa, 0x1e, + 0xc7, 0x8b, 0x36, 0x9c, 0xe2, 0x17, 0x2a, 0xd3, 0x48, 0xf6, 0x74, 0xab, 0xeb, 0xa4, 0x95, 0x6d, + 0x18, 0x0f, 0x12, 0x45, 0x0a, 0x78, 0xab, 0xd0, 0x61, 0x5c, 0x72, 0xc3, 0x78, 0xb7, 0xb4, 0xe9, + 0x01, 0xa0, 0xff, 0x4b, 0x81, 0xf0, 0x83, 0x3e, 0x86, 0x9f, 0x6e, 0x7d, 0x3a, 0xbb, 0x85, 0xa5, + 0xfe, 0x8e, 0x06, 0x76, 0x11, 0x31, 0xf6, 0x26, 0x35, 0x1a, 0xed, 0xbb, 0x96, 0x8d, 0xc0, 0x7e, + 0x12, 0xf3, 0xfe, 0x26, 0x3a, 0x07, 0x74, 0x0a, 0x43, 0xee, 0x05, 0x75, 0xfa, 0x42, 0xae, 0x97, + 0x6e, 0xdb, 0x29, 0xf0, 0x2b, 0x1e, 0x54, 0x6e, 0x49, 0x73, 0xf3, 0x09, 0x93, 0x91, 0xe8, 0x90, + 0x32, 0x1d, 0x69, 0xd0, 0x55, 0x84, 0x4a, 0x95, 0x26, 0x70, 0xea, 0xe8, 0x54, 0xf3, 0xc7, 0xa0, + 0x35, 0xa3, 0x68, 0x5c, 0x23, 0x03, 0x52, 0x64, 0xfa, 0x92, 0xa0, 0x30, 0xc9, 0x83, 0xa1, 0x5b, + 0x48, 0x0c, 0x54, 0x6d, 0x35, 0x1d, 0xb5, 0x1b, 0x26, 0x42, 0x04, 0x82, 0x8d, 0x29, 0x17, 0x61, + 0x7e, 0xf5, 0xeb, 0xe7, 0xa3, 0x84, 0x9f, 0x02, 0xb8, 0x20, 0x10, 0xdd, 0x0e, 0xe8, 0xed, 0xc2, + 0x5c, 0x71, 0x97, 0x98, 0x32, 0xf0, 0xfd, 0xeb, 0xa7, 0xe8, 0x19, 0x04, 0xa1, 0xae, 0x3e, 0x62, + 0xf1, 0x17, 0xa1, 0x88, 0x9f, 0x0d, 0x40, 0xe8, 0xc5, 0x1c, 0xf0, 0x0a, 0x90, 0xdb, 0x0b, 0xa1, + 0x4d, 0x5d, 0x15, 0x0b, 0x4b, 0xa8, 0x0c, 0x7b, 0x0f, 0x22, 0x52, 0x59, 0xef, 0xe8, 0x02, 0x09, + 0x6c, 0x16, 0xc3, 0x1e, 0x39, 0x80, 0x56, 0x7e, 0x4c, 0xe9, 0xa3, 0x4c, 0xbb, 0x7f, 0x4a, 0x13, + 0xb8, 0x8e, 0x9f, 0xe8, 0xc0, 0x9b, 0xc2, 0x28, 0x45, 0xa9, 0x79, 0x34, 0x52, 0xce, 0xc5, 0x83, + 0xd4, 0x3c, 0x28, 0xad, 0xdc, 0x1e, 0x6e, 0xc4, 0x8e, 0xc1, 0xd5, 0xec, 0x3c, 0xd5, 0x19, 0x40, + 0xb5, 0x1f, 0xf6, 0x35, 0x1a, 0xd3, 0x32, 0x73, 0x96, 0x1b, 0x05, 0xdf, 0x33, 0x43, 0x40, 0x46, + 0x46, 0xdb, 0xe8, 0x63, 0x89, 0xde, 0x4e, 0xce, 0x82, 0xbf, 0x0f, 0xa6, 0xff, 0x47, 0x0d, 0x6d, + 0x74, 0x3f, 0x04, 0xe5, 0xfe, 0x74, 0x3a, 0xe5, 0xfd, 0x74, 0x49, 0xfa, 0xfc, 0x75, 0x26, 0xbb, + 0x1f, 0x08, 0xfa, 0x41, 0x10, 0xdf, 0x70, 0x36, 0xc2, 0xbb, 0x1d, 0x63, 0x0b, 0x6f, 0x2e, 0x2a, + 0xc2, 0xcd, 0x5e, 0xa0, 0x05, 0x3b, 0x06, 0xeb, 0x1e, 0x5c, 0x29, 0xa8, 0x4f, 0xc1, 0xe8, 0xe4, + 0x89, 0x03, 0x33, 0x9f, 0x72, 0x09, 0x01, 0x0b, 0xf1, 0xe8, 0xdc, 0xff, 0x03, 0xa2, 0xa8, 0x7e, + 0xd5, 0x3d, 0x81, 0x82, 0xad, 0xf4, 0xe5, 0x3d, 0x9a, 0x82, 0xe0, 0x2d, 0x21, 0x00, 0x66, 0x2f, + 0x74, 0xaf, 0x2b, 0x5b, 0xbd, 0x0e, 0x82, 0x13, 0xaf, 0x05, 0x86, 0x0e, 0xfb, 0x1b, 0xc2, 0xdf, + 0x1f, 0x09, 0xf1, 0x0c, 0xc0, 0x1e, 0xc9, 0x5c, 0xd6, 0x45, 0x8f, 0xc3, 0x39, 0xd0, 0x29, 0x4b, + 0x67, 0x10, 0xc9, 0x08, 0x00, 0xda, 0x8d, 0x0e, 0xda, 0x07, 0x0e, 0x83, 0xba, 0xb4, 0x12, 0x8b, + 0x7f, 0xe6, 0x83, 0xeb, 0x16, 0x6d, 0x05, 0x06, 0xb1, 0x2e, 0x16, 0xad, 0x70, 0x1a, 0xf0, 0x16, + 0xc7, 0x47, 0x16, 0x4c, 0x00, 0x18, 0xab, 0x03, 0xd0, 0x76, 0xc4, 0x53, 0xa1, 0x05, 0x8a, 0x18, + 0xdd, 0x46, 0x6a, 0xda, 0x5f, 0x2e, 0x36, 0x44, 0xd8, 0x18, 0xba, 0x0a, 0xa7, 0x14, 0xa1, 0x1d, + 0xf1, 0x07, 0x01, 0x92, 0xec, 0xd0, 0x0b, 0x41, 0xb8, 0x48, 0xc2, 0x03, 0xee, 0x5d, 0x39, 0xc2, + 0x73, 0xae, 0x26, 0x7e, 0xc8, 0xc4, 0xff, 0x0b, 0xb8, 0x62, 0x23, 0x76, 0xf6, 0x19, 0xc0, 0x1e, + 0x2f, 0x71, 0xe9, 0xa1, 0x4e, 0xbd, 0x13, 0x1d, 0xae, 0x29, 0x26, 0x02, 0xda, 0xba, 0xf2, 0xd7, + 0x4f, 0x29, 0xc2, 0x01, 0x5a, 0x37, 0x82, 0xc7, 0xa2, 0xa1, 0x50, 0x7c, 0x6c, 0x09, 0x6b, 0x70, + 0x60, 0x78, 0xfe, 0x75, 0x08, 0xa2, 0xc7, 0xd0, 0x72, 0xff, 0x45, 0x0d, 0x24, 0x98, 0x17, 0x20, + 0xc7, 0xf0, 0xb4, 0x54, 0x03, 0x0b, 0x99, 0x3b, 0x75, 0x03, 0x73, 0x40, 0xc0, 0xa7, 0x6c, 0x5d, + 0xf9, 0x02, 0x10, 0x63, 0xb3, 0xd2, 0xad, 0x3d, 0xa6, 0xd6, 0x77, 0xcd, 0x4f, 0xea, 0x76, 0xc9, + 0xe6, 0xbb, 0x26, 0xed, 0x8d, 0x47, 0x8a, 0xe1, 0xd8, 0x77, 0xbd, 0x1f, 0xc7, 0xa9, 0x06, 0x20, + 0xa2, 0x06, 0xed, 0x34, 0x75, 0x3c, 0xd6, 0x09, 0x4e, 0xad, 0xd1, 0x8d, 0xad, 0x62, 0xc9, 0x5b, + 0xde, 0x75, 0xa0, 0x43, 0xb5, 0xed, 0x14, 0x35, 0xab, 0x01, 0x10, 0xfa, 0x95, 0xc6, 0x01, 0x01, + 0xdf, 0x70, 0xc7, 0x04, 0x4b, 0xf1, 0x0d, 0x85, 0x01, 0x06, 0x94, 0x0a, 0x77, 0x8e, 0xff, 0x47, + 0x0c, 0xee, 0xe8, 0xc8, 0xed, 0xa8, 0x77, 0x87, 0x39, 0xf3, 0x76, 0x87, 0x05, 0x60, 0x84, 0xb1, + 0x07, 0x1f, 0x39, 0xf0, 0x73, 0xb0, 0xc0, 0xeb, 0xee, 0x5d, 0xd0, 0x1c, 0x50, 0xd8, 0xfc, 0x4f, + 0xff, 0x19, 0x16, 0x1d, 0x0b, 0xe8, 0xa0, 0x64, 0x35, 0xe3, 0x55, 0xe0, 0x48, 0x9f, 0xd3, 0xd4, + 0xf6, 0x28, 0x2c, 0x1b, 0x5c, 0x46, 0x83, 0x02, 0x0d, 0xa0, 0x22, 0x68, 0xdc, 0x06, 0xd1, 0xe3, + 0xd4, 0xdf, 0x23, 0x7c, 0xad, 0x14, 0x0c, 0x75, 0x8a, 0x5b, 0xca, 0xff, 0x31, 0xa7, 0xa2, 0x50, + 0xa8, 0xda, 0x56, 0x7b, 0x22, 0xe0, 0x77, 0x0d, 0x0b, 0x24, 0x1c, 0x46, 0x4b, 0x40, 0xd5, 0x51, + 0xcc, 0x68, 0x3b, 0x8d, 0xd5, 0xc5, 0xec, 0xbf, 0x68, 0x95, 0xd0, 0x8a, 0x5d, 0x48, 0x09, 0x05, + 0x5b, 0xbe, 0x47, 0xa1, 0x01, 0x80, 0xc1, 0x6c, 0x0d, 0xf8, 0x12, 0x2e, 0x60, 0x1a, 0xc3, 0xc2, + 0x5b, 0xc2, 0x76, 0x54, 0x28, 0x53, 0x0e, 0xa4, 0xdf, 0xe8, 0x4f, 0x52, 0xf2, 0x14, 0xac, 0x93, + 0x1a, 0x70, 0x44, 0x01, 0xd1, 0x73, 0xe4, 0xc2, 0xf0, 0x90, 0x75, 0xc1, 0x87, 0x4a, 0x76, 0x88, + 0xec, 0x07, 0x2c, 0x57, 0xd7, 0xd1, 0x12, 0x7a, 0xcd, 0x29, 0xd4, 0x2d, 0xa0, 0x48, 0x83, 0x72, + 0x27, 0x4e, 0xec, 0x5e, 0xe9, 0x81, 0xf2, 0x18, 0xf9, 0xaf, 0xf2, 0xc5, 0x3c, 0xec, 0x22, 0x97, + 0x25, 0x43, 0x10, 0x82, 0xc9, 0xe8, 0x71, 0x32, 0x6e, 0xe5, 0x35, 0xe8, 0xad, 0xda, 0xa0, 0xc6, + 0x6d, 0xb0, 0xb5, 0x01, 0x47, 0x96, 0x80, 0xed, 0x95, 0x58, 0xef, 0x23, 0xfb, 0x21, 0x0a, 0x2c, + 0x83, 0x2e, 0x77, 0x49, 0xb7, 0x1c, 0x5b, 0x64, 0x78, 0xf8, 0x62, 0x63, 0x02, 0x19, 0xa0, 0x4a, + 0xd7, 0x85, 0x78, 0xd1, 0x53, 0xec, 0xd1, 0xb2, 0xed, 0x03, 0x47, 0x54, 0xe8, 0xa8, 0xee, 0x2d, + 0x49, 0x8a, 0x52, 0x17, 0xa7, 0x7d, 0x10, 0x68, 0x8b, 0xb1, 0x1c, 0xda, 0xe2, 0x01, 0xfd, 0xd8, + 0xcb, 0x40, 0x14, 0xf0, 0x76, 0x3e, 0x80, 0x4f, 0xd4, 0x08, 0xb7, 0x35, 0xc2, 0xdf, 0xbd, 0x1b, + 0xae, 0x19, 0x10, 0xa7, 0x20, 0xcf, 0x5e, 0xc0, 0x95, 0x1b, 0x63, 0xbc, 0x74, 0xb5, 0x40, 0xb3, + 0xab, 0xa3, 0x2a, 0x82, 0x1f, 0xb5, 0x1f, 0x02, 0x4b, 0xe2, 0x74, 0x18, 0x5c, 0x92, 0x84, 0x9f, + 0xc2, 0xb4, 0x8e, 0x6a, 0x18, 0x96, 0xcb, 0x41, 0xad, 0xb8, 0x05, 0x6f, 0x7e, 0xe0, 0xeb, 0xeb, + 0x0b, 0xbc, 0xdb, 0x52, 0xa9, 0xae, 0x9c, 0xdb, 0xb7, 0xee, 0x29, 0xa3, 0x58, 0x59, 0xc1, 0x25, + 0x02, 0x80, 0xae, 0x7d, 0x6c, 0x46, 0x88, 0xd7, 0x3a, 0x44, 0x49, 0x88, 0x37, 0x17, 0x33, 0x6e, + 0xac, 0xeb, 0x3e, 0x0a, 0x8e, 0xa7, 0xe2, 0x07, 0xf5, 0xdb, 0x1e, 0x29, 0xeb, 0xec, 0xd4, 0xe8, + 0x97, 0x43, 0x67, 0x73, 0x9e, 0x88, 0x0b, 0x67, 0xde, 0x88, 0x75, 0x32, 0x7c, 0x0c, 0xf2, 0x23, + 0x7b, 0x1e, 0xfd, 0x33, 0xc0, 0x8e, 0xd8, 0xb4, 0x63, 0x45, 0xc9, 0x59, 0xda, 0x47, 0x07, 0x26, + 0xaf, 0x6f, 0x03, 0x33, 0xff, 0x33, 0xe8, 0xf6, 0x1f, 0x5d, 0xa6, 0x60, 0xac, 0x5f, 0x5a, 0xc6, + 0x34, 0xc0, 0x66, 0x6f, 0x77, 0x02, 0x33, 0xdb, 0x0a, 0x37, 0xe5, 0xd5, 0xc9, 0x69, 0x24, 0xb6, + 0x89, 0x16, 0x03, 0x82, 0x67, 0x5f, 0x0d, 0x25, 0x8c, 0xf0, 0x7e, 0x11, 0x72, 0x3b, 0xba, 0x6d, + 0xb1, 0x04, 0x8b, 0xfd, 0x7d, 0xd3, 0xeb, 0x8c, 0xd8, 0x06, 0xc1, 0xa5, 0x1a, 0xd4, 0x00, 0x10, + 0x58, 0xf1, 0xf8, 0x0b, 0x8c, 0xd0, 0x2b, 0x18, 0xb3, 0x4a, 0x1e, 0xa2, 0xfc, 0xc7, 0xb4, 0x4a, + 0x13, 0x85, 0x37, 0x20, 0x7c, 0x0b, 0x81, 0xa1, 0x63, 0xad, 0x16, 0x03, 0x7a, 0x90, 0x13, 0x1c, + 0x07, 0x24, 0xe9, 0xf1, 0x03, 0xd8, 0x84, 0xa3, 0xa3, 0xb8, 0x80, 0x16, 0xf2, 0xb4, 0xdb, 0x4b, + 0x55, 0x2d, 0x1e, 0xb4, 0x08, 0x90, 0x09, 0xb0, 0xaa, 0x51, 0xd1, 0xe7, 0x3b, 0x1b, 0x68, 0x40, + 0x1b, 0x0e, 0x2d, 0x10, 0xd1, 0xad, 0x10, 0x47, 0x19, 0xa8, 0xea, 0x1e, 0xe5, 0xe8, 0x70, 0x0c, + 0x35, 0x1f, 0x11, 0x92, 0x2d, 0x88, 0xea, 0x50, 0x23, 0x2e, 0x46, 0xa2, 0xea, 0x8e, 0x4a, 0xb0, + 0xc6, 0x48, 0x60, 0x0c, 0x3b, 0x67, 0xfc, 0x8d, 0xac, 0x57, 0x2f, 0x7a, 0xda, 0x73, 0x69, 0xb8, + 0x13, 0x4c, 0xcd, 0xda, 0x9e, 0x26, 0xd5, 0x8e, 0x6b, 0x4f, 0x11, 0xbc, 0x76, 0x67, 0x89, 0xf7, + 0x4b, 0x0a, 0x01, 0x8a, 0xdf, 0xba, 0x6a, 0x7e, 0xb9, 0x2a, 0xce, 0x6d, 0x1c, 0x13, 0x0c, 0x70, + 0x74, 0x48, 0x26, 0x76, 0xc7, 0x75, 0x4b, 0x0e, 0xb3, 0x6d, 0x2b, 0x0d, 0xb6, 0x02, 0x7d, 0x92, + 0xee, 0x7e, 0xfa, 0x0c, 0x56, 0x04, 0xba, 0x0b, 0x02, 0x34, 0x98, 0x40, 0xa0, 0xe5, 0x0d, 0x49, + 0xa7, 0x38, 0xf4, 0x7a, 0x30, 0xae, 0x25, 0xa6, 0x2b, 0xb4, 0xbd, 0x1e, 0x5a, 0x30, 0xb7, 0x58, + 0xaa, 0xfa, 0x97, 0xca, 0x95, 0xba, 0x11, 0xb0, 0xb1, 0x90, 0xdb, 0x9f, 0xe9, 0x9b, 0x02, 0x6f, + 0xa3, 0x05, 0x6f, 0x1b, 0x17, 0x01, 0xda, 0x16, 0x05, 0xef, 0x73, 0xd9, 0x26, 0x12, 0xff, 0xda, + 0x3b, 0xe3, 0x22, 0x96, 0xa4, 0xd7, 0xdc, 0x0a, 0x55, 0x02, 0x44, 0xc2, 0x28, 0x6f, 0x19, 0x3b, + 0x0d, 0x73, 0x2b, 0x41, 0x6b, 0xf7, 0x1e, 0x51, 0x42, 0x37, 0x82, 0x95, 0x5f, 0xb6, 0x74, 0xd7, + 0x08, 0xcc, 0xf8, 0xdd, 0x1f, 0x01, 0x0c, 0x5b, 0x25, 0x4f, 0xbb, 0x0e, 0xa7, 0x3b, 0x0f, 0xc1, + 0x73, 0x4b, 0x03, 0xb0, 0x70, 0x0f, 0xe9, 0x51, 0xbc, 0xe9, 0xca, 0x2b, 0x15, 0x40, 0xae, 0xfc, + 0x6c, 0xfb, 0x72, 0xc9, 0x8b, 0x15, 0x01, 0x4e, 0x5f, 0x38, 0xf6, 0x13, 0x6f, 0xdd, 0x7e, 0x35, + 0x17, 0x8b, 0x26, 0x87, 0x17, 0x48, 0x51, 0x7f, 0x47, 0x8d, 0x3d, 0xca, 0x8b, 0x09, 0x10, 0xee, + 0x02, 0x49, 0x0a, 0x77, 0xd8, 0x55, 0x04, 0xa4, 0x62, 0xd1, 0x5f, 0x10, 0xf5, 0x42, 0x75, 0xc0, + 0x29, 0x46, 0x43, 0xb6, 0x4c, 0xea, 0xde, 0x77, 0x83, 0xcf, 0x01, 0x58, 0x3c, 0x5c, 0x1d, 0x80, + 0xc9, 0x1b, 0xc2, 0xd7, 0x7d, 0xef, 0xf4, 0xdb, 0xfa, 0x89, 0x0d, 0xf4, 0xa4, 0x22, 0x0e, 0x15, + 0x69, 0x08, 0x0d, 0x87, 0xde, 0xef, 0x05, 0x6b, 0x96, 0x13, 0x47, 0xad, 0x57, 0x26, 0xd3, 0x80, + 0x58, 0x57, 0x9a, 0x85, 0xdd, 0x82, 0xc1, 0xf0, 0xc3, 0xad, 0xbd, 0x46, 0xc1, 0x39, 0xd1, 0x52, + 0xa5, 0xe9, 0xde, 0xe8, 0x81, 0xe0, 0xca, 0x97, 0x21, 0x85, 0xf6, 0x46, 0x53, 0x13, 0x01, 0x65, + 0x00, 0x0b, 0x21, 0x7f, 0x5c, 0x00, 0x20, 0x28, 0x00, 0x2f, 0x12, 0x1c, 0xfd, 0x3f, 0x20, 0x00, + 0x25, 0x63, 0x1b, 0x2b, 0x62, 0xfa, 0x00, 0x43, 0x61, 0x6e, 0x6e, 0xa9, 0xc2, 0x6a, 0x6f, 0x86, + 0xad, 0xff, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x66, 0xed, 0x69, 0x6c, 0x65, 0x1d, 0xf6, + 0x73, 0x20, 0x2d, 0x20, 0x04, 0xf6, 0x0a, 0x00, 0x77, 0x23, 0x4f, 0x63, 0x72, 0x65, 0xea, 0x61, + 0x74, 0x65, 0xa5, 0xfa, 0xfa, 0x73, 0x74, 0x69, 0x6e, 0x61, 0xa1, 0xb8, 0x99, 0x2a, 0xf7, 0x57, + 0x72, 0x69, 0x16, 0x7d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xb6, 0x47, 0x6e, 0x1f, 0x57, 0x78, 0xaa, + 0x63, 0x16, 0xdd, 0x00, 0x97, 0x89, 0x49, 0x6e, 0xff, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x6e, + 0x75, 0xee, 0x6d, 0x62, 0x65, 0x2a, 0xfe, 0x66, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0xaa, 0xde, + 0x49, 0x72, 0x73, 0x00, 0xff, 0x6a, 0x43, 0x4f, 0x50, 0x59, 0xed, 0x43, 0x4d, 0x44, 0x9f, 0xb7, + 0x59, 0x02, 0x4e, 0x00, 0xb6, 0x41, 0x0f, 0x00, 0xdd, 0x0b, 0x44, 0x3a, 0x93, 0x37, 0x64, 0x77, + 0x7d, 0x00, 0x45, 0x00, 0xed, 0x46, 0x00, 0x48, 0x12, 0xfb, 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x23, + 0x6a, 0x50, 0x5f, 0x42, 0x00, 0x52, 0x00, 0x53, 0xf6, 0x00, 0x54, 0x00, 0x56, 0x86, 0xdb, 0x00, + 0x36, 0x2d, 0xb2, 0x59, 0x2d, 0x76, 0x73, 0x77, 0x95, 0xed, 0x63, 0x68, 0x1b, 0x66, 0xd3, 0xdf, + 0x69, 0x74, 0x68, 0x20, 0x74, 0xf6, 0x6f, 0x6f, 0x20, 0x6c, 0x95, 0xd9, 0x67, 0x23, 0x6c, 0x1c, + 0xed, 0x64, 0xc0, 0xaa, 0x76, 0x34, 0xc6, 0x2e, 0x02, 0x63, 0x69, 0xdb, 0xb0, 0x63, 0xb9, 0x16, + 0x37, 0x12, 0xfb, 0xfc, 0x66, 0x0f, 0x7f, 0x6e, 0x64, 0x00, 0x2a, 0x2e, 0x2a, 0x6b, 0x91, 0xdf, + 0x2d, 0x84, 0x56, 0x21, 0x01, 0x03, 0x60, 0x5b, 0x1b, 0x0d, 0x3e, 0x79, 0x20, 0x61, 0x11, 0x1f, + 0x68, 0x5e, 0x66, 0x03, 0x55, 0xda, 0x6f, 0x34, 0x1d, 0x74, 0x8d, 0x02, 0x0a, 0xbb, 0x0e, 0x69, + 0x72, 0x23, 0x60, 0x74, 0x01, 0x4e, 0xa1, 0x46, 0x42, 0xc3, 0x59, 0x58, 0x64, 0x11, 0x6c, 0x2f, + 0x43, 0x68, 0xb5, 0x7a, 0xb0, 0x06, 0x74, 0xb0, 0x41, 0x67, 0xa1, 0x40, 0xa1, 0x0d, 0xb6, 0x57, + 0x72, 0xa7, 0xee, 0x72, 0x6d, 0x58, 0xed, 0x63, 0x79, 0x63, 0x89, 0xc2, 0x63, 0x20, 0x79, 0x36, + 0x50, 0x38, 0xda, 0x73, 0x55, 0x14, 0xdf, 0x33, 0x67, 0xab, 0x9d, 0x13, 0x6e, 0x77, 0x9d, 0x75, + 0x65, 0x2e, 0x6b, 0x00, 0x5c, 0x16, 0xde, 0x03, 0x58, 0x0f, 0x81, 0x20, 0xf6, 0x76, 0x31, 0x2e, + 0x39, 0x41, 0xd5, 0x2d, 0x49, 0x94, 0x6a, 0xa5, 0x7e, 0xaa, 0x31, 0x9b, 0x83, 0x33, 0x20, 0xb7, + 0x62, 0x7e, 0x52, 0x65, 0x97, 0x6e, 0x41, 0x62, 0x6b, 0x38, 0xe9, 0x5b, 0x46, 0x67, 0x74, 0x53, + 0x28, 0x30, 0x05, 0x56, 0x69, 0x63, 0xbf, 0x26, 0x35, 0x3a, 0xee, 0x20, 0x45, 0x72, 0x78, 0xb7, + 0x41, 0x5f, 0x72, 0x29, 0x6b, 0xc6, 0x42, 0xae, 0x69, 0x18, 0x7b, 0xe6, 0x05, 0x5b, 0xa3, 0x64, + 0x60, 0xc5, 0x36, 0x74, 0x08, 0xb6, 0x13, 0x2e, 0x1e, 0xf7, 0x0a, 0xcc, 0x77, 0x21, 0x8d, 0xc2, + 0x5b, 0x3e, 0x03, 0x5d, 0x6c, 0x0d, 0x2f, 0x3b, 0xc8, 0x5e, 0xe3, 0x5d, 0xba, 0x58, 0x22, 0x6c, + 0x00, 0xe1, 0x53, 0x54, 0x37, 0x59, 0x07, 0x09, 0x65, 0x59, 0xba, 0x67, 0x2f, 0x18, 0x30, 0x27, + 0x26, 0x66, 0x63, 0x7c, 0x28, 0xd9, 0x73, 0x29, 0xfa, 0xb6, 0xd1, 0x2e, 0xe6, 0x46, 0x61, 0x02, + 0xc8, 0x46, 0xc2, 0xc8, 0x84, 0xa4, 0xd9, 0x45, 0x1b, 0xf3, 0x6c, 0x77, 0x49, 0x37, 0x41, 0xf6, + 0x2f, 0x41, 0x20, 0x00, 0x5b, 0xe5, 0x05, 0xbb, 0x34, 0x6c, 0x79, 0xea, 0x05, 0xd6, 0xb2, 0x68, + 0x4e, 0x21, 0x9e, 0x5a, 0xba, 0x3d, 0x00, 0xa0, 0x53, 0x01, 0x00, 0x11, 0xc1, 0x0a, 0xae, 0x42, + 0x09, 0x61, 0xf0, 0xbb, 0x6e, 0x27, 0x74, 0x4b, 0x98, 0x00, 0x4b, 0x2e, 0x61, 0x61, 0x54, 0x9e, + 0x3b, 0xcb, 0x33, 0x63, 0x70, 0x43, 0x21, 0x21, 0xc2, 0x3b, 0x73, 0xd1, 0x10, 0xc1, 0x85, 0xdd, + 0x69, 0x76, 0xbf, 0x9a, 0xc5, 0x93, 0x85, 0x76, 0x8a, 0x63, 0x63, 0x15, 0x28, 0x8f, 0x36, 0x44, + 0x5b, 0x3a, 0xb5, 0x4d, 0x04, 0x2d, 0x51, 0x5d, 0x81, 0xa7, 0x6d, 0x9c, 0x6d, 0x70, 0x20, 0xae, + 0x72, 0xa1, 0x4a, 0x92, 0xe6, 0x41, 0x7d, 0x71, 0x64, 0xee, 0x5d, 0xfb, 0xc7, 0x61, 0x66, 0x32, + 0xb9, 0x8a, 0x91, 0xa4, 0x8c, 0xce, 0x1a, 0x65, 0x4f, 0x93, 0x2e, 0x20, 0xb6, 0x57, 0x22, 0x6e, + 0x39, 0x46, 0x8b, 0x0d, 0x85, 0x6c, 0x73, 0x1f, 0xbb, 0x2c, 0x6c, 0x2b, 0x0a, 0x11, 0xca, 0x4e, + 0x43, 0x5b, 0x3d, 0x67, 0xcd, 0x7b, 0xbf, 0xc3, 0x78, 0x69, 0x9a, 0xd6, 0x67, 0x45, 0x52, 0x1f, + 0x53, 0x6c, 0x6c, 0x73, 0xa5, 0xf2, 0xdc, 0x59, 0x11, 0x84, 0x92, 0x45, 0xb6, 0x43, 0xb7, 0x6e, + 0x73, 0x75, 0x8c, 0x62, 0x0d, 0x37, 0x12, 0x42, 0x2c, 0x1c, 0x5f, 0x6d, 0x70, 0x74, 0xb1, 0x79, + 0x38, 0x90, 0x46, 0x14, 0xad, 0x6a, 0xae, 0xdd, 0x6c, 0x61, 0xa4, 0x75, 0x70, 0x5f, 0xcc, 0x60, + 0x3b, 0xa0, 0x81, 0x09, 0x1e, 0x05, 0xc6, 0x71, 0x48, 0x4a, 0xdb, 0xd5, 0x64, 0x68, 0x2a, 0xc4, + 0x2f, 0x01, 0x26, 0x09, 0x30, 0xee, 0xdd, 0xb2, 0x65, 0x33, 0x07, 0x92, 0x5b, 0xc2, 0x70, 0x96, + 0x80, 0x84, 0x30, 0x59, 0x1c, 0xb1, 0x4b, 0x90, 0x49, 0x1d, 0x49, 0x66, 0x84, 0x6f, 0x8f, 0x1c, + 0x4e, 0x97, 0x13, 0x0f, 0x78, 0x5b, 0x49, 0xe9, 0xb6, 0x6d, 0xd4, 0x65, 0x13, 0x2b, 0x68, 0x27, + 0x13, 0xab, 0x84, 0x2c, 0x4f, 0x8d, 0xa1, 0x71, 0x01, 0x5a, 0xaf, 0xc2, 0x50, 0x6e, 0x69, 0x8f, + 0x49, 0x22, 0x6c, 0x7e, 0x64, 0x4c, 0x06, 0x4c, 0xf1, 0x65, 0x96, 0xba, 0x16, 0x04, 0x74, 0xc9, + 0x6f, 0x68, 0x0d, 0x02, 0x61, 0xdb, 0xb8, 0xf6, 0x69, 0x6d, 0x56, 0x1f, 0x4b, 0x8c, 0x72, 0xba, + 0x29, 0x79, 0x05, 0x4d, 0x2a, 0x38, 0x74, 0x5b, 0x6e, 0x6e, 0x33, 0xb6, 0x66, 0x66, 0xc3, 0x46, + 0xc0, 0x36, 0xb6, 0x28, 0xbc, 0x18, 0x18, 0xa8, 0x1c, 0x73, 0x66, 0xa5, 0xc2, 0xae, 0xf5, 0x00, + 0x70, 0x80, 0xf2, 0x81, 0x11, 0x82, 0x34, 0x20, 0xd0, 0x1c, 0x7d, 0xd0, 0x20, 0xaf, 0x05, 0xb8, + 0x90, 0x4e, 0x1e, 0x53, 0x75, 0x70, 0xc5, 0x2f, 0xc1, 0x4b, 0xa6, 0x87, 0x23, 0x3c, 0x47, 0x09, + 0x28, 0xb4, 0x61, 0x0d, 0x4d, 0x79, 0x6b, 0x6d, 0xca, 0x5b, 0xac, 0x74, 0x7d, 0x13, 0x6f, 0xb8, + 0x8e, 0x72, 0x77, 0x3d, 0xef, 0xcc, 0xbd, 0xb2, 0x8c, 0x61, 0xbb, 0x48, 0xcf, 0x1b, 0x6b, 0x69, + 0xac, 0x70, 0x62, 0x5a, 0x67, 0x30, 0x03, 0x19, 0x50, 0x01, 0xb1, 0x50, 0x7c, 0xbd, 0x73, 0xb0, + 0x86, 0x7b, 0xcc, 0x43, 0x6b, 0xf4, 0x12, 0xa2, 0x65, 0x4d, 0x7f, 0x23, 0xec, 0x61, 0x4c, 0x47, + 0xc8, 0x64, 0xd8, 0x4e, 0xc2, 0x51, 0x8e, 0x5f, 0x20, 0x51, 0x75, 0x2d, 0x74, 0xcd, 0xf9, 0x28, + 0x8e, 0x2c, 0x4f, 0x5c, 0x6a, 0xd0, 0x82, 0xb4, 0xd8, 0x77, 0x82, 0x3e, 0xc4, 0x32, 0x7b, 0xd5, + 0x86, 0x39, 0x52, 0x01, 0xb2, 0x4f, 0xe2, 0x5d, 0x6f, 0x64, 0x87, 0x2d, 0xcf, 0x18, 0xd1, 0x11, + 0xc6, 0x53, 0x0e, 0x56, 0x92, 0x88, 0xd3, 0x9b, 0xc9, 0x64, 0x08, 0x60, 0x33, 0xad, 0xc7, 0xf3, + 0x49, 0x99, 0x8f, 0xd0, 0x67, 0x47, 0x54, 0x20, 0x6f, 0xf5, 0x78, 0x48, 0x30, 0x39, 0x91, 0x94, + 0xa6, 0xb3, 0x84, 0x06, 0x7c, 0xbd, 0x48, 0x81, 0x74, 0x84, 0xa4, 0x8d, 0x62, 0x45, 0x9d, 0x59, + 0x65, 0x49, 0xe0, 0x20, 0x54, 0xcc, 0x19, 0x62, 0x3b, 0xd8, 0xa4, 0x64, 0xb0, 0x3b, 0xd7, 0x5f, + 0x31, 0x8d, 0x84, 0x56, 0x1b, 0xbc, 0x20, 0x56, 0xa0, 0xcc, 0x2b, 0x3a, 0x83, 0xf0, 0xb8, 0x97, + 0x7b, 0x57, 0x20, 0x3c, 0x57, 0x61, 0x69, 0x26, 0xc8, 0x9b, 0x75, 0x6b, 0x65, 0x8c, 0x79, 0x8e, + 0xc2, 0xc6, 0x6e, 0x06, 0xb6, 0x67, 0xb0, 0x6e, 0xe8, 0xb3, 0x2e, 0xf9, 0x88, 0x59, 0x22, 0xa5, + 0x92, 0x39, 0x32, 0x8d, 0xbb, 0x2d, 0x8d, 0x01, 0x16, 0x52, 0xd8, 0x75, 0x88, 0x54, 0xb2, 0x79, + 0x59, 0x91, 0x18, 0xca, 0xac, 0xed, 0x54, 0x7a, 0x09, 0x66, 0x30, 0x59, 0x7a, 0x6c, 0x61, 0x92, + 0xb0, 0xee, 0x79, 0xe1, 0x96, 0x03, 0xc7, 0xb9, 0x45, 0x69, 0x9a, 0xe1, 0x30, 0x14, 0x53, 0xcc, + 0x5b, 0x76, 0x7a, 0x6f, 0x04, 0x18, 0x7d, 0xa1, 0x66, 0x5b, 0x70, 0x61, 0xb3, 0x62, 0x46, 0x6b, + 0x70, 0x37, 0x0d, 0xf0, 0x89, 0x72, 0x26, 0x8c, 0xb1, 0x79, 0x7a, 0xce, 0x13, 0x26, 0x76, 0xb8, + 0x6d, 0x6d, 0xfb, 0xfb, 0x6c, 0x54, 0x5c, 0x34, 0x2c, 0x11, 0x30, 0x98, 0xff, 0xb7, 0x82, 0x6c, + 0x64, 0x42, 0x73, 0x2d, 0x18, 0x43, 0x11, 0x6f, 0x55, 0x6e, 0x58, 0x7a, 0xd8, 0x30, 0xee, 0xd0, + 0x92, 0x89, 0x84, 0x9a, 0x1d, 0x4e, 0x6f, 0x1a, 0x68, 0xd4, 0xa0, 0x27, 0x3a, 0x63, 0x68, 0x54, + 0xc2, 0x4b, 0x5c, 0x6f, 0xe0, 0x39, 0xc9, 0xfb, 0x26, 0x56, 0xd1, 0xd3, 0x52, 0x3e, 0x05, 0x14, + 0x12, 0x89, 0x87, 0xfb, 0x73, 0x94, 0x6a, 0xd2, 0x5b, 0x48, 0x54, 0x20, 0x6a, 0x61, 0xe6, 0x10, + 0x1e, 0x8d, 0x8d, 0x65, 0x14, 0xbd, 0x0d, 0x1c, 0x44, 0x96, 0x22, 0x66, 0x8e, 0x2a, 0xbd, 0x69, + 0xe8, 0xab, 0x7c, 0x36, 0x44, 0xcd, 0x4d, 0x44, 0x87, 0x65, 0x0e, 0xa3, 0x64, 0x79, 0x21, 0x52, + 0x79, 0x6c, 0x62, 0x86, 0x43, 0x93, 0x10, 0x66, 0xad, 0xdd, 0x66, 0x2d, 0x3e, 0x8b, 0xb4, 0x01, + 0x45, 0xce, 0xd6, 0x5f, 0x4f, 0xd2, 0x79, 0x52, 0xed, 0x36, 0x0d, 0x12, 0xa1, 0xf4, 0x1d, 0x20, + 0x5c, 0xde, 0x09, 0x4c, 0x41, 0x4e, 0x47, 0xdf, 0xd8, 0x4c, 0x53, 0x50, 0x41, 0xd8, 0x54, 0x48, + 0x07, 0x61, 0x4f, 0xc5, 0x53, 0x58, 0xba, 0x1f, 0x5c, 0x1a, 0x1c, 0x00, 0x8d, 0x03, 0xff, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0xfd, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0xbd, 0x11, + 0x45, 0x58, 0x45, 0x4c, 0xb4, 0xa5, 0x88, 0xdb, 0x2a, 0x3f, 0x0b, 0x54, 0xc1, 0x5a, 0x00, 0x16, + 0x0c, 0x52, 0x1d, 0x47, 0xc8, 0xd4, 0x71, 0x53, 0x9b, 0x67, 0xcc, 0x52, 0xbd, 0xe0, 0x75, 0x63, + 0x60, 0xf5, 0xed, 0x41, 0x17, 0x58, 0xcf, 0xf6, 0x2d, 0x70, 0x6f, 0x05, 0xae, 0x9d, 0x1c, 0xfd, + 0xda, 0x32, 0x74, 0x45, 0x9c, 0xd7, 0x19, 0x64, 0xcb, 0x2b, 0xd0, 0x2e, 0x03, 0xf9, 0x00, 0x01, + 0x29, 0xc8, 0x0a, 0x0c, 0x5c, 0x38, 0x93, 0x0c, 0x27, 0x58, 0x23, 0x48, 0x20, 0x0c, 0x0c, 0x8c, + 0x98, 0x8c, 0x88, 0x80, 0x33, 0x0c, 0x64, 0x01, 0x00, 0xaa, 0xbf, 0x1f, 0x00, 0x3b, 0x00, 0x0b, + 0x5a, 0x78, 0xff, 0x00, 0x97, 0x00, 0xb5, 0x00, 0xd4, 0x00, 0xf3, 0xff, 0x00, 0x11, 0x01, 0x30, + 0x01, 0x4e, 0x01, 0x6d, 0xbf, 0x01, 0x19, 0x3c, 0x00, 0xc6, 0x5b, 0x00, 0x97, 0xff, 0x98, 0x00, + 0xb6, 0x00, 0xd5, 0x00, 0xf4, 0xff, 0x00, 0x12, 0x01, 0x31, 0x01, 0x4f, 0x01, 0x6e, 0x0b, 0x15, + 0x02, 0xff, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x43, 0x3a, 0xb7, 0x5c, 0x24, 0x02, 0x00, 0x60, + 0x00, 0x15, 0x03, 0xff, 0xb0, 0xff, 0x1b, 0x39, 0x01, 0x09, 0xb0, 0x02, 0x0f, 0x98, 0x02, 0xc2, + 0x68, 0x6e, 0x03, 0x01, 0x60, 0x1b, 0x70, 0x04, 0x91, 0x1f, 0x10, 0xed, 0x75, 0x27, 0x01, 0x60, + 0x31, 0xc8, 0x0c, 0x05, 0x87, 0x35, 0x08, 0x1b, 0x18, 0x7e, 0x55, 0x05, 0x00, 0x09, 0xc9, 0xd1, + 0xe4, 0x45, 0x53, 0x54, 0xa8, 0x96, 0x80, 0xc9, 0x44, 0x54, 0x3f, 0xc2, 0x11, 0x43, 0x12, 0x50, + 0x87, 0x46, 0x17, 0xc0, 0x10, 0x0e, 0x81, 0x7f, 0x0d, 0x09, 0x6f, 0xf2, 0x0b, 0x06, 0x04, 0xb7, + 0x05, 0x00, 0x02, 0x03, 0xff, 0xff, 0x0e, 0x07, 0x24, 0x06, 0x08, 0x01, 0xff, 0x19, 0xae, 0x6f, + 0x06, 0xdb, 0x41, 0x63, 0x01, 0x14, 0x70, 0x09, 0xf8, 0xa5, 0x03, 0x12, 0x12, 0xa7, 0x1e, 0x13, + 0x20, 0xdd, 0x20, 0x3b, 0x20, 0xdf, 0x78, 0x21, 0x09, 0x05, 0xbf, 0x52, 0x4a, 0xf3, 0x61, 0x7c, + 0x0b, 0xa2, 0x4a, 0x78, 0xec, 0x17, 0xd1, 0x62, 0xf3, 0xe2, 0xf7, 0x60, 0x33, 0x2b, 0x1d, 0xdf, + 0x24, 0x11, 0x1f, 0xcd, 0x47, 0x69, 0x14, 0xd9, 0xb6, 0x65, 0x79, 0xc4, 0x0d, 0xbf, 0xe6, 0x03, + 0x8c, 0xe5, 0xe3, 0x01, 0xc0, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0xff, 0xa4, 0x00, + 0xff, 0x75, 0x03, 0xe8, 0x6a, 0x00, 0x72, 0xf6, 0x41, 0x8c, 0xc0, 0xe8, 0x55, 0x00, 0xe3, 0x66, + 0x73, 0xf9, 0x49, 0x49, 0x74, 0x11, 0x01, 0xc9, 0x01, 0xc9, 0x01, 0xc9, 0x01, 0xc9, 0x89, 0xcd, + 0x8a, 0x1c, 0x46, 0xf6, 0xd3, 0x31, 0xc9, 0xe8, 0x39, 0x00, 0x11, 0xc9, 0x75, 0x08, 0x41, 0xe8, + 0x31, 0x00, 0x73, 0xfb, 0x41, 0x41, 0x81, 0xfd, 0xd1, 0x00, 0x83, 0xd9, 0xfe, 0x29, 0xe8, 0x72, + 0x0e, 0x8e, 0xd8, 0x8d, 0x01, 0x28, 0xfc, 0x96, 0xf3, 0xa4, 0x96, 0x8e, 0xda, 0xeb, 0xb0, 0xd1, + 0xe0, 0xd1, 0xe0, 0xd1, 0xe0, 0xd1, 0xe0, 0x50, 0x31, 0xc0, 0x8e, 0xd8, 0x58, 0x01, 0xd8, 0x01, + 0xf8, 0xeb, 0xe2, 0x00, 0xff, 0x75, 0x03, 0xe8, 0x06, 0x00, 0x11, 0xc9, 0x00, 0xff, 0x75, 0x05, + 0x8a, 0x3c, 0x46, 0x10, 0xff, 0xc3, 0x5d, 0x06, 0x1f, 0x8d, 0xb5, 0xf2, 0xff, 0xad, 0x5b, 0x91, + 0xad, 0x92, 0xad, 0x97, 0xad, 0x01, 0xc3, 0x8e, 0xc3, 0x31, 0xc0, 0x01, 0xc7, 0x26, 0x01, 0x2d, + 0xac, 0x48, 0x74, 0x03, 0x40, 0x75, 0xf4, 0x81, 0xc7, 0xfe, 0x00, 0xe2, 0xf3, 0x07, 0x06, 0x1f, + 0xbc, 0x00, 0x30, 0xea, 0x02, 0x35, 0x00, 0x00, 0x00, 0x30, 0xd2, 0x0b, 0x1a }; struct BuiltinFileBlob bfb_XCOPY_EXE = { @@ -1056,4 +1419,5 @@ struct BuiltinFileBlob bfb_XCOPY_EXE = { /*data*/ bin_xcopy_exe, /*length*/ sizeof(bin_xcopy_exe) }; +#endif diff --git a/src/builtin/zip.cpp b/src/builtin/zip.cpp index 3e48534a3a1..ddc7c6a7f42 100644 --- a/src/builtin/zip.cpp +++ b/src/builtin/zip.cpp @@ -1,6 +1,7 @@ #include "dos_inc.h" +#if !defined(OSFREE) static const unsigned char bin_zip_exe[] = { 0x4D,0x5A,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x27, 0x00,0xFF,0xFF,0x00,0x00,0x60,0x07,0x00,0x00,0x54,0x00, @@ -17499,3 +17500,5 @@ struct BuiltinFileBlob bfb_UNZIP_EXE = { /*data*/ bin_unzip_exe, /*length*/ sizeof(bin_unzip_exe) }; +#endif + diff --git a/src/cpu/callback.cpp b/src/cpu/callback.cpp index 18de12b6f8a..4d1fc7f349f 100644 --- a/src/cpu/callback.cpp +++ b/src/cpu/callback.cpp @@ -110,8 +110,8 @@ void CALLBACK_DeAllocate(Bitu in) { void CALLBACK_Idle(void) { #if C_EMSCRIPTEN - void GFX_Events(); - GFX_Events(); + void GFX_Events(); + GFX_Events(); #endif /* this makes the cpu execute instructions to handle irq's and then come back */ @@ -121,33 +121,41 @@ void CALLBACK_Idle(void) { uint32_t oldeip=reg_eip; SegSet16(cs,CB_SEG); reg_eip=CB_SOFFSET+call_idle*CB_SIZE; + CPU_CycleLeft += CPU_Cycles - 1; /* Ahem: This makes the CPU execute instructions to handle IRQs and then come back. Nothing more. */ + CPU_Cycles = 1; DOSBOX_RunMachine(); reg_eip=oldeip; SegSet16(cs,oldcs); SETFLAGBIT(IF,oldIF); - if (!CPU_CycleAutoAdjust && CPU_Cycles>0) - CPU_Cycles=0; + if (!CPU_CycleAutoAdjust && CPU_Cycles>0) { + CPU_CycleLeft += CPU_Cycles; + CPU_Cycles = 0; + } } void CALLBACK_IdleNoInts(void) { #if C_EMSCRIPTEN - void GFX_Events(); - GFX_Events(); + void GFX_Events(); + GFX_Events(); #endif -/* this makes the cpu execute instructions to handle irq's and then come back */ + /* this makes the cpu execute instructions to handle irq's and then come back */ // Bitu oldIF=GETFLAG(IF); // SETFLAGBIT(IF,true); uint16_t oldcs=SegValue(cs); uint32_t oldeip=reg_eip; SegSet16(cs,CB_SEG); reg_eip=CB_SOFFSET+call_idle*CB_SIZE; + CPU_CycleLeft += CPU_Cycles - 1; /* Ahem: This makes the CPU execute instructions to handle IRQs and then come back. Nothing more. */ + CPU_Cycles = 1; DOSBOX_RunMachine(); reg_eip=oldeip; SegSet16(cs,oldcs); // SETFLAGBIT(IF,oldIF); - if (!CPU_CycleAutoAdjust && CPU_Cycles>0) - CPU_Cycles=0; + if (!CPU_CycleAutoAdjust && CPU_Cycles>0) { + CPU_CycleLeft += CPU_Cycles; + CPU_Cycles = 0; + } } static Bitu default_handler(void) { diff --git a/src/cpu/core_dyn_x86.cpp b/src/cpu/core_dyn_x86.cpp index 66c11936485..cf9bc03aa17 100644 --- a/src/cpu/core_dyn_x86.cpp +++ b/src/cpu/core_dyn_x86.cpp @@ -50,6 +50,8 @@ #define DYN_PAGE_HASH (4096>>DYN_HASH_SHIFT) #define DYN_LINKS (16) +extern bool do_lds_wraparound; + //#define DYN_LOG 1 //Turn logging on #if C_FPU diff --git a/src/cpu/core_dynrec.cpp b/src/cpu/core_dynrec.cpp index 651920c08ba..ca04851f6a6 100644 --- a/src/cpu/core_dynrec.cpp +++ b/src/cpu/core_dynrec.cpp @@ -45,6 +45,8 @@ #include "lazyflags.h" #include "pic.h" +extern bool do_lds_wraparound; + #define CACHE_MAXSIZE (4096*2) #define CACHE_TOTAL (1024*1024*8) #define CACHE_PAGES (512) diff --git a/src/cpu/core_full.cpp b/src/cpu/core_full.cpp index c79968c736f..120d6218db6 100644 --- a/src/cpu/core_full.cpp +++ b/src/cpu/core_full.cpp @@ -28,8 +28,10 @@ #include "inout.h" #include "callback.h" +extern bool do_lds_wraparound; extern bool ignore_opcode_63; +#define CPU_OMIT_8086 #define CPU_CORE CPU_ARCHTYPE_386 typedef PhysPt EAPoint; diff --git a/src/cpu/core_normal.cpp b/src/cpu/core_normal.cpp index 441bae40a5d..8cfac536393 100644 --- a/src/cpu/core_normal.cpp +++ b/src/cpu/core_normal.cpp @@ -24,6 +24,8 @@ #include "paging.h" #include "mmx.h" +extern bool do_lds_wraparound; + bool CPU_RDMSR(); bool CPU_WRMSR(); bool CPU_SYSENTER(); @@ -35,6 +37,8 @@ bool CPU_SYSEXIT(); #define DoString DoString_Normal +static uint16_t last_ea86_offset; + extern bool ignore_opcode_63; #if C_DEBUG @@ -162,6 +166,7 @@ Bits CPU_Core_Normal_Run(void) { last_prefix=MP_NONE; core.opcode_index=cpu.code.big*(Bitu)0x200u; core.prefixes=cpu.code.big; + last_ea86_offset=0; core.ea_table=&EATable[cpu.code.big*256u]; BaseDS=SegBase(ds); BaseSS=SegBase(ss); diff --git a/src/cpu/core_normal/helpers.h b/src/cpu/core_normal/helpers.h index e2c66b12a46..0e3872241f2 100644 --- a/src/cpu/core_normal/helpers.h +++ b/src/cpu/core_normal/helpers.h @@ -29,6 +29,20 @@ PhysPt eaa=EALookupTable[rm](); \ (void)eaa +#define GetEAa8086 \ + PhysPt eaa=EATable8086[rm](); \ + (void)eaa + +#define GetEAaNDEF \ + PhysPt eaa; \ + (void)eaa + +#define GetEAaN \ + eaa=EALookupTable[rm](); + +#define GetEAaN8086 \ + eaa=EATable8086[rm](); + #define GetRMEAa \ GetRM; \ GetEAa; diff --git a/src/cpu/core_normal/prefix_0f_mmx.h b/src/cpu/core_normal/prefix_0f_mmx.h index 6f79c27ddf0..5f15242780b 100644 --- a/src/cpu/core_normal/prefix_0f_mmx.h +++ b/src/cpu/core_normal/prefix_0f_mmx.h @@ -47,6 +47,9 @@ XMM_Reg xmmsrc; xmmsrc.u32[0] = LoadMd(eaa); SSE_MOVSS(fpu.xmmreg[reg],xmmsrc); + fpu.xmmreg[reg].u32[1] = 0; + fpu.xmmreg[reg].u32[2] = 0; + fpu.xmmreg[reg].u32[3] = 0; } break; default: @@ -212,7 +215,7 @@ GetEAa; XMM_Reg xmmdst; SSE_MOVHPS(xmmdst,fpu.xmmreg[reg]); - SaveMq(eaa+8,xmmdst.u64[1]); /* modifies only upper 64 bits */ + SaveMq(eaa,xmmdst.u64[1]); /* modifies only upper 64 bits */ } break; default: @@ -1170,7 +1173,7 @@ } CASE_0F_MMX(0x70) /* PSHUFW Pq,Qq,imm8 */ { - if (CPU_ArchitectureTypeuw.w0 * (uint32_t)src.uw.w0; - uint32_t product1 = (uint32_t)dest->uw.w1 * (uint32_t)src.uw.w1; - uint32_t product2 = (uint32_t)dest->uw.w2 * (uint32_t)src.uw.w2; - uint32_t product3 = (uint32_t)dest->uw.w3 * (uint32_t)src.uw.w3; - dest->uw.w0 = (product0 & 0xffff); - dest->uw.w1 = (product1 & 0xffff); - dest->uw.w2 = (product2 & 0xffff); - dest->uw.w3 = (product3 & 0xffff); + int32_t product0 = (uint32_t)dest->sw.w0 * (uint32_t)src.sw.w0; + int32_t product1 = (uint32_t)dest->sw.w1 * (uint32_t)src.sw.w1; + int32_t product2 = (uint32_t)dest->sw.w2 * (uint32_t)src.sw.w2; + int32_t product3 = (uint32_t)dest->sw.w3 * (uint32_t)src.sw.w3; + dest->sw.w0 = product0; + dest->sw.w1 = product1; + dest->sw.w2 = product2; + dest->sw.w3 = product3; break; } CASE_0F_MMX(0xd7) @@ -1695,14 +1698,14 @@ src.q = LoadMq(eaa); } result.q = 0; - if (dest->ub.b0>src.ub.b0) result.ub.b0 = dest->ub.b0 - src.ub.b0; - if (dest->ub.b1>src.ub.b1) result.ub.b1 = dest->ub.b1 - src.ub.b1; - if (dest->ub.b2>src.ub.b2) result.ub.b2 = dest->ub.b2 - src.ub.b2; - if (dest->ub.b3>src.ub.b3) result.ub.b3 = dest->ub.b3 - src.ub.b3; - if (dest->ub.b4>src.ub.b4) result.ub.b4 = dest->ub.b4 - src.ub.b4; - if (dest->ub.b5>src.ub.b5) result.ub.b5 = dest->ub.b5 - src.ub.b5; - if (dest->ub.b6>src.ub.b6) result.ub.b6 = dest->ub.b6 - src.ub.b6; - if (dest->ub.b7>src.ub.b7) result.ub.b7 = dest->ub.b7 - src.ub.b7; + result.ub.b0 = SaturateWordSToByteU((int16_t)dest->ub.b0 - (int16_t)src.ub.b0); + result.ub.b1 = SaturateWordSToByteU((int16_t)dest->ub.b1 - (int16_t)src.ub.b1); + result.ub.b2 = SaturateWordSToByteU((int16_t)dest->ub.b2 - (int16_t)src.ub.b2); + result.ub.b3 = SaturateWordSToByteU((int16_t)dest->ub.b3 - (int16_t)src.ub.b3); + result.ub.b4 = SaturateWordSToByteU((int16_t)dest->ub.b4 - (int16_t)src.ub.b4); + result.ub.b5 = SaturateWordSToByteU((int16_t)dest->ub.b5 - (int16_t)src.ub.b5); + result.ub.b6 = SaturateWordSToByteU((int16_t)dest->ub.b6 - (int16_t)src.ub.b6); + result.ub.b7 = SaturateWordSToByteU((int16_t)dest->ub.b7 - (int16_t)src.ub.b7); dest->q = result.q; break; } @@ -1720,10 +1723,10 @@ src.q = LoadMq(eaa); } result.q = 0; - if (dest->uw.w0>src.uw.w0) result.uw.w0 = dest->uw.w0 - src.uw.w0; - if (dest->uw.w1>src.uw.w1) result.uw.w1 = dest->uw.w1 - src.uw.w1; - if (dest->uw.w2>src.uw.w2) result.uw.w2 = dest->uw.w2 - src.uw.w2; - if (dest->uw.w3>src.uw.w3) result.uw.w3 = dest->uw.w3 - src.uw.w3; + result.uw.w0 = SaturateDwordSToWordU((int32_t)dest->uw.w0 - (int32_t)src.uw.w0); + result.uw.w1 = SaturateDwordSToWordU((int32_t)dest->uw.w1 - (int32_t)src.uw.w1); + result.uw.w2 = SaturateDwordSToWordU((int32_t)dest->uw.w2 - (int32_t)src.uw.w2); + result.uw.w3 = SaturateDwordSToWordU((int32_t)dest->uw.w3 - (int32_t)src.uw.w3); dest->q = result.q; break; } @@ -1984,7 +1987,7 @@ const unsigned char reg = (rm >> 3) & 7; switch (last_prefix) { - case MP_NONE: /* 0F E4 PULHUW reg, r/m */ + case MP_NONE: /* 0F E4 PMULHUW reg, r/m */ if (CPU_ArchitectureType= 0xc0) { MMX_PMULHUW(*reg_mmx[reg],*reg_mmx[rm & 7]); @@ -1995,7 +1998,7 @@ MMX_PMULHUW(*reg_mmx[reg],smmx); } break; - case MP_66: /* 66 0F E4 PULHUW reg, r/m */ + case MP_66: /* 66 0F E4 PMULHUW reg, r/m */ if (CPU_ArchitectureType= 0xc0) { SSE_PMULHUW(fpu.xmmreg[reg],fpu.xmmreg[rm & 7]); @@ -2303,14 +2306,14 @@ else { int32_t product0 = (int32_t)dest->sw.w0 * (int32_t)src.sw.w0; int32_t product1 = (int32_t)dest->sw.w1 * (int32_t)src.sw.w1; - dest->ud.d0 = (uint32_t)(product0 + product1); + dest->sd.d0 = product0 + product1; } if (dest->ud.d1 == 0x80008000 && src.ud.d1 == 0x80008000) dest->ud.d1 = 0x80000000; else { int32_t product2 = (int32_t)dest->sw.w2 * (int32_t)src.sw.w2; int32_t product3 = (int32_t)dest->sw.w3 * (int32_t)src.sw.w3; - dest->sd.d1 = (int32_t)(product2 + product3); + dest->sd.d1 = product2 + product3; } break; } diff --git a/src/cpu/core_normal/prefix_none.h b/src/cpu/core_normal/prefix_none.h index b6ce024b4fa..6790850943d 100644 --- a/src/cpu/core_normal/prefix_none.h +++ b/src/cpu/core_normal/prefix_none.h @@ -934,19 +934,51 @@ reg_eip=Pop_16(); continue; CASE_W(0xc4) /* LES */ - { + { + GetEAaNDEF; GetRMrw; if (rm >= 0xc0) goto illegal_opcode; - GetEAa; +#ifndef CPU_OMIT_8086 + if (do_lds_wraparound && !cpu.code.big/*8086 table is missing latter half for 32-bit!*/) { + /* stack underflow 64KB wraparound? [https://github.com/joncampbell123/dosbox-x/issues/5621] */ + GetEAaN8086; /* 8086 version that also sets last_ea86_offset */ + if (last_ea86_offset > (0x10000u-4u)) { + if (CPU_SetSegGeneral(es,LoadMw(eaa+2-0x10000))) RUNEXCEPTION(); + *rmrw=LoadMw(eaa); + break; + } + } + else { + GetEAaN; + } +#else + GetEAaN; +#endif if (CPU_SetSegGeneral(es,LoadMw(eaa+2))) RUNEXCEPTION(); *rmrw=LoadMw(eaa); break; } CASE_W(0xc5) /* LDS */ - { + { + GetEAaNDEF; GetRMrw; if (rm >= 0xc0) goto illegal_opcode; - GetEAa; +#ifndef CPU_OMIT_8086 + if (do_lds_wraparound && !cpu.code.big/*8086 table is missing latter half for 32-bit!*/) { + /* stack underflow 64KB wraparound? [https://github.com/joncampbell123/dosbox-x/issues/5621] */ + GetEAaN8086; /* 8086 version that also sets last_ea86_offset */ + if (last_ea86_offset > (0x10000u-4u)) { + if (CPU_SetSegGeneral(ds,LoadMw(eaa+2-0x10000))) RUNEXCEPTION(); + *rmrw=LoadMw(eaa); + break; + } + } + else { + GetEAaN; + } +#else + GetEAaN; +#endif if (CPU_SetSegGeneral(ds,LoadMw(eaa+2))) RUNEXCEPTION(); *rmrw=LoadMw(eaa); break; diff --git a/src/cpu/core_normal/support.h b/src/cpu/core_normal/support.h index 350c038d36a..5eee5c9335c 100644 --- a/src/cpu/core_normal/support.h +++ b/src/cpu/core_normal/support.h @@ -239,15 +239,19 @@ static INLINE void SSE_MOVLPS(XMM_Reg &d,const XMM_Reg &s) { //// static INLINE void SSE_UNPCKLPS(XMM_Reg &d,const XMM_Reg &s) { - d.u32[0] = d.u32[1] = s.u32[0]; - d.u32[2] = d.u32[3] = s.u32[1]; + //d.u32[0] = d.u32[0]; + d.u32[2] = d.u32[1]; + d.u32[1] = s.u32[0]; + d.u32[3] = s.u32[1]; } //// static INLINE void SSE_UNPCKHPS(XMM_Reg &d,const XMM_Reg &s) { - d.u32[0] = d.u32[1] = s.u32[2]; - d.u32[2] = d.u32[3] = s.u32[3]; + d.u32[0] = d.u32[2]; + d.u32[2] = d.u32[3]; + d.u32[1] = s.u32[2]; + d.u32[3] = s.u32[3]; } //// @@ -807,9 +811,9 @@ static INLINE void MMX_PSADBW(MMX_reg &d,MMX_reg &s) { static INLINE void SSE_PSADBW(XMM_Reg &d,XMM_Reg &s) { #define STEP(i) (uint16_t)abs((int16_t)(d.u8[i]) - (int16_t)(s.u8[i])) - d.u16[0] = STEP(0) + STEP(1) + STEP(2) + STEP(3) + STEP(4) + STEP(5) + STEP(6) + STEP(7) + - STEP(8) + STEP(9) + STEP(10) + STEP(11) + STEP(12) + STEP(13) + STEP(14) + STEP(15); - d.u16[1] = d.u16[2] = d.u16[3] = d.u16[4] = d.u16[5] = d.u16[6] = d.u16[7] = 0; + d.u16[0] = STEP(0) + STEP(1) + STEP(2) + STEP(3) + STEP(4) + STEP(5) + STEP(6) + STEP(7); + d.u16[4] = STEP(8) + STEP(9) + STEP(10) + STEP(11) + STEP(12) + STEP(13) + STEP(14) + STEP(15); + d.u16[1] = d.u16[2] = d.u16[3] = d.u16[5] = d.u16[6] = d.u16[7] = 0; #undef STEP } @@ -827,10 +831,16 @@ void CPU_FXRSTOR(PhysPt eaa); bool CPU_LDMXCSR(PhysPt eaa); bool CPU_STMXCSR(PhysPt eaa); +typedef PhysPt (*EA_LookupHandler)(void); + #include "helpers.h" #if CPU_CORE <= CPU_ARCHTYPE_8086 +# define EATable EATable8086 # include "table_ea_8086.h" #else +# ifndef CPU_OMIT_8086 +# include "table_ea_8086.h" +# endif # include "table_ea.h" #endif #include "../modrm.h" diff --git a/src/cpu/core_normal/table_ea.h b/src/cpu/core_normal/table_ea.h index e908d4055f0..b9d26ee1181 100644 --- a/src/cpu/core_normal/table_ea.h +++ b/src/cpu/core_normal/table_ea.h @@ -16,8 +16,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -typedef PhysPt (*EA_LookupHandler)(void); - /* The MOD/RM Decoder for EA for this decoder's addressing modes */ static PhysPt EA_16_00_n(void) { return BaseDS+(uint16_t)(reg_bx+reg_si); } static PhysPt EA_16_01_n(void) { return BaseDS+(uint16_t)(reg_bx+reg_di); } diff --git a/src/cpu/core_normal/table_ea_8086.h b/src/cpu/core_normal/table_ea_8086.h index 0c0e286c1bc..83b2f96cecb 100644 --- a/src/cpu/core_normal/table_ea_8086.h +++ b/src/cpu/core_normal/table_ea_8086.h @@ -16,64 +16,62 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -typedef PhysPt (*EA_LookupHandler)(void); - /* The MOD/RM Decoder for EA for this decoder's addressing modes */ -static PhysPt EA_16_00_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+(int16_t)reg_si))); } -static PhysPt EA_16_01_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+(int16_t)reg_di))); } -static PhysPt EA_16_02_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+(int16_t)reg_si))); } -static PhysPt EA_16_03_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+(int16_t)reg_di))); } -static PhysPt EA_16_04_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_si))); } -static PhysPt EA_16_05_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_di))); } -static PhysPt EA_16_06_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(Fetchw())));} -static PhysPt EA_16_07_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx))); } +static PhysPt EA86_16_00_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+(int16_t)reg_si))); } +static PhysPt EA86_16_01_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+(int16_t)reg_di))); } +static PhysPt EA86_16_02_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+(int16_t)reg_si))); } +static PhysPt EA86_16_03_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+(int16_t)reg_di))); } +static PhysPt EA86_16_04_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_si))); } +static PhysPt EA86_16_05_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_di))); } +static PhysPt EA86_16_06_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(Fetchw())));} +static PhysPt EA86_16_07_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx))); } -static PhysPt EA_16_40_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+(int16_t)reg_si+Fetchbs()))); } -static PhysPt EA_16_41_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+(int16_t)reg_di+Fetchbs()))); } -static PhysPt EA_16_42_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+(int16_t)reg_si+Fetchbs()))); } -static PhysPt EA_16_43_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+(int16_t)reg_di+Fetchbs()))); } -static PhysPt EA_16_44_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_si+Fetchbs()))); } -static PhysPt EA_16_45_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_di+Fetchbs()))); } -static PhysPt EA_16_46_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+Fetchbs()))); } -static PhysPt EA_16_47_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+Fetchbs()))); } +static PhysPt EA86_16_40_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+(int16_t)reg_si+Fetchbs()))); } +static PhysPt EA86_16_41_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+(int16_t)reg_di+Fetchbs()))); } +static PhysPt EA86_16_42_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+(int16_t)reg_si+Fetchbs()))); } +static PhysPt EA86_16_43_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+(int16_t)reg_di+Fetchbs()))); } +static PhysPt EA86_16_44_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_si+Fetchbs()))); } +static PhysPt EA86_16_45_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_di+Fetchbs()))); } +static PhysPt EA86_16_46_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+Fetchbs()))); } +static PhysPt EA86_16_47_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+Fetchbs()))); } -static PhysPt EA_16_80_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+(int16_t)reg_si+Fetchws()))); } -static PhysPt EA_16_81_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+(int16_t)reg_di+Fetchws()))); } -static PhysPt EA_16_82_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+(int16_t)reg_si+Fetchws()))); } -static PhysPt EA_16_83_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+(int16_t)reg_di+Fetchws()))); } -static PhysPt EA_16_84_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_si+Fetchws()))); } -static PhysPt EA_16_85_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_di+Fetchws()))); } -static PhysPt EA_16_86_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+Fetchws()))); } -static PhysPt EA_16_87_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+Fetchws()))); } +static PhysPt EA86_16_80_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+(int16_t)reg_si+Fetchws()))); } +static PhysPt EA86_16_81_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+(int16_t)reg_di+Fetchws()))); } +static PhysPt EA86_16_82_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+(int16_t)reg_si+Fetchws()))); } +static PhysPt EA86_16_83_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+(int16_t)reg_di+Fetchws()))); } +static PhysPt EA86_16_84_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_si+Fetchws()))); } +static PhysPt EA86_16_85_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_di+Fetchws()))); } +static PhysPt EA86_16_86_n(void) { return BaseSS+(last_ea86_offset=((uint16_t)(reg_bp+Fetchws()))); } +static PhysPt EA86_16_87_n(void) { return BaseDS+(last_ea86_offset=((uint16_t)(reg_bx+Fetchws()))); } -static GetEAHandler EATable[512]={ +static GetEAHandler EATable8086[512]={ /* 00 */ - EA_16_00_n,EA_16_01_n,EA_16_02_n,EA_16_03_n,EA_16_04_n,EA_16_05_n,EA_16_06_n,EA_16_07_n, - EA_16_00_n,EA_16_01_n,EA_16_02_n,EA_16_03_n,EA_16_04_n,EA_16_05_n,EA_16_06_n,EA_16_07_n, - EA_16_00_n,EA_16_01_n,EA_16_02_n,EA_16_03_n,EA_16_04_n,EA_16_05_n,EA_16_06_n,EA_16_07_n, - EA_16_00_n,EA_16_01_n,EA_16_02_n,EA_16_03_n,EA_16_04_n,EA_16_05_n,EA_16_06_n,EA_16_07_n, - EA_16_00_n,EA_16_01_n,EA_16_02_n,EA_16_03_n,EA_16_04_n,EA_16_05_n,EA_16_06_n,EA_16_07_n, - EA_16_00_n,EA_16_01_n,EA_16_02_n,EA_16_03_n,EA_16_04_n,EA_16_05_n,EA_16_06_n,EA_16_07_n, - EA_16_00_n,EA_16_01_n,EA_16_02_n,EA_16_03_n,EA_16_04_n,EA_16_05_n,EA_16_06_n,EA_16_07_n, - EA_16_00_n,EA_16_01_n,EA_16_02_n,EA_16_03_n,EA_16_04_n,EA_16_05_n,EA_16_06_n,EA_16_07_n, + EA86_16_00_n,EA86_16_01_n,EA86_16_02_n,EA86_16_03_n,EA86_16_04_n,EA86_16_05_n,EA86_16_06_n,EA86_16_07_n, + EA86_16_00_n,EA86_16_01_n,EA86_16_02_n,EA86_16_03_n,EA86_16_04_n,EA86_16_05_n,EA86_16_06_n,EA86_16_07_n, + EA86_16_00_n,EA86_16_01_n,EA86_16_02_n,EA86_16_03_n,EA86_16_04_n,EA86_16_05_n,EA86_16_06_n,EA86_16_07_n, + EA86_16_00_n,EA86_16_01_n,EA86_16_02_n,EA86_16_03_n,EA86_16_04_n,EA86_16_05_n,EA86_16_06_n,EA86_16_07_n, + EA86_16_00_n,EA86_16_01_n,EA86_16_02_n,EA86_16_03_n,EA86_16_04_n,EA86_16_05_n,EA86_16_06_n,EA86_16_07_n, + EA86_16_00_n,EA86_16_01_n,EA86_16_02_n,EA86_16_03_n,EA86_16_04_n,EA86_16_05_n,EA86_16_06_n,EA86_16_07_n, + EA86_16_00_n,EA86_16_01_n,EA86_16_02_n,EA86_16_03_n,EA86_16_04_n,EA86_16_05_n,EA86_16_06_n,EA86_16_07_n, + EA86_16_00_n,EA86_16_01_n,EA86_16_02_n,EA86_16_03_n,EA86_16_04_n,EA86_16_05_n,EA86_16_06_n,EA86_16_07_n, /* 01 */ - EA_16_40_n,EA_16_41_n,EA_16_42_n,EA_16_43_n,EA_16_44_n,EA_16_45_n,EA_16_46_n,EA_16_47_n, - EA_16_40_n,EA_16_41_n,EA_16_42_n,EA_16_43_n,EA_16_44_n,EA_16_45_n,EA_16_46_n,EA_16_47_n, - EA_16_40_n,EA_16_41_n,EA_16_42_n,EA_16_43_n,EA_16_44_n,EA_16_45_n,EA_16_46_n,EA_16_47_n, - EA_16_40_n,EA_16_41_n,EA_16_42_n,EA_16_43_n,EA_16_44_n,EA_16_45_n,EA_16_46_n,EA_16_47_n, - EA_16_40_n,EA_16_41_n,EA_16_42_n,EA_16_43_n,EA_16_44_n,EA_16_45_n,EA_16_46_n,EA_16_47_n, - EA_16_40_n,EA_16_41_n,EA_16_42_n,EA_16_43_n,EA_16_44_n,EA_16_45_n,EA_16_46_n,EA_16_47_n, - EA_16_40_n,EA_16_41_n,EA_16_42_n,EA_16_43_n,EA_16_44_n,EA_16_45_n,EA_16_46_n,EA_16_47_n, - EA_16_40_n,EA_16_41_n,EA_16_42_n,EA_16_43_n,EA_16_44_n,EA_16_45_n,EA_16_46_n,EA_16_47_n, + EA86_16_40_n,EA86_16_41_n,EA86_16_42_n,EA86_16_43_n,EA86_16_44_n,EA86_16_45_n,EA86_16_46_n,EA86_16_47_n, + EA86_16_40_n,EA86_16_41_n,EA86_16_42_n,EA86_16_43_n,EA86_16_44_n,EA86_16_45_n,EA86_16_46_n,EA86_16_47_n, + EA86_16_40_n,EA86_16_41_n,EA86_16_42_n,EA86_16_43_n,EA86_16_44_n,EA86_16_45_n,EA86_16_46_n,EA86_16_47_n, + EA86_16_40_n,EA86_16_41_n,EA86_16_42_n,EA86_16_43_n,EA86_16_44_n,EA86_16_45_n,EA86_16_46_n,EA86_16_47_n, + EA86_16_40_n,EA86_16_41_n,EA86_16_42_n,EA86_16_43_n,EA86_16_44_n,EA86_16_45_n,EA86_16_46_n,EA86_16_47_n, + EA86_16_40_n,EA86_16_41_n,EA86_16_42_n,EA86_16_43_n,EA86_16_44_n,EA86_16_45_n,EA86_16_46_n,EA86_16_47_n, + EA86_16_40_n,EA86_16_41_n,EA86_16_42_n,EA86_16_43_n,EA86_16_44_n,EA86_16_45_n,EA86_16_46_n,EA86_16_47_n, + EA86_16_40_n,EA86_16_41_n,EA86_16_42_n,EA86_16_43_n,EA86_16_44_n,EA86_16_45_n,EA86_16_46_n,EA86_16_47_n, /* 10 */ - EA_16_80_n,EA_16_81_n,EA_16_82_n,EA_16_83_n,EA_16_84_n,EA_16_85_n,EA_16_86_n,EA_16_87_n, - EA_16_80_n,EA_16_81_n,EA_16_82_n,EA_16_83_n,EA_16_84_n,EA_16_85_n,EA_16_86_n,EA_16_87_n, - EA_16_80_n,EA_16_81_n,EA_16_82_n,EA_16_83_n,EA_16_84_n,EA_16_85_n,EA_16_86_n,EA_16_87_n, - EA_16_80_n,EA_16_81_n,EA_16_82_n,EA_16_83_n,EA_16_84_n,EA_16_85_n,EA_16_86_n,EA_16_87_n, - EA_16_80_n,EA_16_81_n,EA_16_82_n,EA_16_83_n,EA_16_84_n,EA_16_85_n,EA_16_86_n,EA_16_87_n, - EA_16_80_n,EA_16_81_n,EA_16_82_n,EA_16_83_n,EA_16_84_n,EA_16_85_n,EA_16_86_n,EA_16_87_n, - EA_16_80_n,EA_16_81_n,EA_16_82_n,EA_16_83_n,EA_16_84_n,EA_16_85_n,EA_16_86_n,EA_16_87_n, - EA_16_80_n,EA_16_81_n,EA_16_82_n,EA_16_83_n,EA_16_84_n,EA_16_85_n,EA_16_86_n,EA_16_87_n, + EA86_16_80_n,EA86_16_81_n,EA86_16_82_n,EA86_16_83_n,EA86_16_84_n,EA86_16_85_n,EA86_16_86_n,EA86_16_87_n, + EA86_16_80_n,EA86_16_81_n,EA86_16_82_n,EA86_16_83_n,EA86_16_84_n,EA86_16_85_n,EA86_16_86_n,EA86_16_87_n, + EA86_16_80_n,EA86_16_81_n,EA86_16_82_n,EA86_16_83_n,EA86_16_84_n,EA86_16_85_n,EA86_16_86_n,EA86_16_87_n, + EA86_16_80_n,EA86_16_81_n,EA86_16_82_n,EA86_16_83_n,EA86_16_84_n,EA86_16_85_n,EA86_16_86_n,EA86_16_87_n, + EA86_16_80_n,EA86_16_81_n,EA86_16_82_n,EA86_16_83_n,EA86_16_84_n,EA86_16_85_n,EA86_16_86_n,EA86_16_87_n, + EA86_16_80_n,EA86_16_81_n,EA86_16_82_n,EA86_16_83_n,EA86_16_84_n,EA86_16_85_n,EA86_16_86_n,EA86_16_87_n, + EA86_16_80_n,EA86_16_81_n,EA86_16_82_n,EA86_16_83_n,EA86_16_84_n,EA86_16_85_n,EA86_16_86_n,EA86_16_87_n, + EA86_16_80_n,EA86_16_81_n,EA86_16_82_n,EA86_16_83_n,EA86_16_84_n,EA86_16_85_n,EA86_16_86_n,EA86_16_87_n, /* 11 These are illegal so make em nullptr */ nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, @@ -121,7 +119,9 @@ static GetEAHandler EATable[512]={ nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }; +#if CPU_CORE <= CPU_ARCHTYPE_8086 #define GetEADirect(sz) \ PhysPt eaa; \ - eaa=BaseDS+Fetchw(); \ + eaa=BaseDS+Fetchw(); +#endif diff --git a/src/cpu/core_normal_286.cpp b/src/cpu/core_normal_286.cpp index ca798f11212..3dad0805d9b 100644 --- a/src/cpu/core_normal_286.cpp +++ b/src/cpu/core_normal_286.cpp @@ -25,6 +25,8 @@ #include "pic.h" #include "fpu.h" +extern bool do_lds_wraparound; + bool CPU_RDMSR(); bool CPU_WRMSR(); bool CPU_SYSENTER(); @@ -45,6 +47,8 @@ static inline bool _seg_limit_check(void) { #define DoString DoString_Normal286 +static uint16_t last_ea86_offset; + extern bool ignore_opcode_63; #if C_DEBUG @@ -179,6 +183,7 @@ Bits CPU_Core286_Normal_Run(void) { LOADIP; core.prefixes=0; core.opcode_index=0; + last_ea86_offset=0; core.ea_table=&EATable[0]; BaseDS=SegBase(ds); BaseSS=SegBase(ss); diff --git a/src/cpu/core_normal_8086.cpp b/src/cpu/core_normal_8086.cpp index 027b861bb49..33496628977 100644 --- a/src/cpu/core_normal_8086.cpp +++ b/src/cpu/core_normal_8086.cpp @@ -23,6 +23,8 @@ #include "pic.h" #include "fpu.h" +extern bool do_lds_wraparound; + /* Do not emulate segment limit exceptions on 8086. This turns the if() statements into if (0) * and the C++ compiler optimizer should then completely omit the code for the 8086 cputype. */ #define do_seg_limits (0) diff --git a/src/cpu/core_prefetch.cpp b/src/cpu/core_prefetch.cpp index c90ec8e7fed..72aeb19ddb4 100644 --- a/src/cpu/core_prefetch.cpp +++ b/src/cpu/core_prefetch.cpp @@ -26,6 +26,8 @@ #include "pic.h" #include "fpu.h" +extern bool do_lds_wraparound; + using namespace std; #define PRE_EXCEPTION { } @@ -34,6 +36,8 @@ using namespace std; #define DoString DoString_Prefetch +static uint16_t last_ea86_offset; + extern bool ignore_opcode_63; #if C_DEBUG @@ -199,6 +203,7 @@ Bits CPU_Core_Prefetch_Run(void) { last_prefix=MP_NONE; core.opcode_index=cpu.code.big*(Bitu)0x200u; core.prefixes=cpu.code.big; + last_ea86_offset=0; core.ea_table=&EATable[cpu.code.big*256u]; BaseDS=SegBase(ds); BaseSS=SegBase(ss); diff --git a/src/cpu/core_prefetch_286.cpp b/src/cpu/core_prefetch_286.cpp index 6934a434b6c..627d57e40d2 100644 --- a/src/cpu/core_prefetch_286.cpp +++ b/src/cpu/core_prefetch_286.cpp @@ -26,6 +26,8 @@ #include "pic.h" #include "fpu.h" +extern bool do_lds_wraparound; + using namespace std; #include @@ -50,6 +52,8 @@ static inline bool _seg_limit_check(void) { #define DoString DoString_Prefetch286 +static uint16_t last_ea86_offset; + extern bool ignore_opcode_63; #if C_DEBUG @@ -211,6 +215,7 @@ Bits CPU_Core286_Prefetch_Run(void) { LOADIP; core.prefixes=0; core.opcode_index=0; + last_ea86_offset=0; core.ea_table=&EATable[0]; BaseDS=SegBase(ds); BaseSS=SegBase(ss); diff --git a/src/cpu/core_prefetch_8086.cpp b/src/cpu/core_prefetch_8086.cpp index 9880d93be46..4b8cd67ffea 100644 --- a/src/cpu/core_prefetch_8086.cpp +++ b/src/cpu/core_prefetch_8086.cpp @@ -26,6 +26,8 @@ #include "pic.h" #include "fpu.h" +extern bool do_lds_wraparound; + using namespace std; #include diff --git a/src/cpu/core_simple.cpp b/src/cpu/core_simple.cpp index 67e0b5efed3..67bd6886ce2 100644 --- a/src/cpu/core_simple.cpp +++ b/src/cpu/core_simple.cpp @@ -25,8 +25,11 @@ #include "pic.h" #include "fpu.h" +extern bool do_lds_wraparound; + #define PRE_EXCEPTION { } +#define CPU_OMIT_8086 #define CPU_CORE CPU_ARCHTYPE_386 extern bool ignore_opcode_63; diff --git a/src/cpu/cpu.cpp b/src/cpu/cpu.cpp index f6ac7a8d72a..473840ac470 100644 --- a/src/cpu/cpu.cpp +++ b/src/cpu/cpu.cpp @@ -76,6 +76,7 @@ bool CPU_NMI_gate = true; bool CPU_NMI_active = false; bool CPU_NMI_pending = false; bool do_seg_limits = false; +bool do_lds_wraparound = true; bool do_pse = false; bool enable_pse = false; @@ -1254,9 +1255,11 @@ void CPU_Interrupt(Bitu num,Bitu type,uint32_t oldeip) { guest_msdos_LoL = RealMake(SegValue(es),reg_bx); /* Read off the MCB chain base (WARNING: Only works with MS-DOS 3.3 or later) */ guest_msdos_mcb_chain = real_readw(guest_msdos_LoL>>16,(guest_msdos_LoL&0xFFFF)-2); + guest_msdos_dev_chain = RealMake(guest_msdos_LoL>>16,(guest_msdos_LoL&0xFFFF)+0x22);//point to NUL driver header #if 1 LOG_MSG("List of Lists: %04x:%04x",guest_msdos_LoL>>16,guest_msdos_LoL&0xFFFF); LOG_MSG("MCB chain starts at: %04x",guest_msdos_mcb_chain); + LOG_MSG("DEV chain starts at: %04x:%04x",guest_msdos_dev_chain>>16,guest_msdos_dev_chain&0xFFFFu); #endif return; } @@ -2675,6 +2678,7 @@ bool CPU_READ_CRX(Bitu cr,uint32_t & retvalue) { bool CPU_WRITE_DRX(Bitu dr,Bitu value) { /* Check if privileged to access control registers */ if (cpu.pmode && (cpu.cpl>0)) return CPU_PrepareException(EXCEPTION_GP,0); + UNBLOCKED_LOG(LOG_CPU,LOG_DEBUG)("386 debug write to DR%d = %X",(unsigned int)dr,(unsigned int)value); switch (dr) { case 0: case 1: @@ -2940,11 +2944,16 @@ void CPU_VERW(Bitu selector) { } /* This is called by the XMS emulation to set up Flat Real Mode, at least for segment registers DS and ES */ -void XMS_InitFlatRealMode(void) { - if (!cpu.pmode && !(reg_flags & FLAG_VM)) { - Segs.limit[ds] = 0xFFFFFFFFul; - Segs.limit[es] = 0xFFFFFFFFul; +bool XMS_InitFlatRealMode(void) { + if (!cpu.pmode) { + if (Segs.limit[ds] != 0xFFFFFFFFul || Segs.limit[es] != 0xFFFFFFFFul) { + Segs.limit[ds] = 0xFFFFFFFFul; + Segs.limit[es] = 0xFFFFFFFFul; + return true; + } } + + return false; } bool CPU_SetSegGeneral(SegNames seg,uint16_t value) { @@ -3591,6 +3600,7 @@ class CPU: public Module_base { reg_ebp=0; reg_esp=0; + do_lds_wraparound = section->Get_bool("lds wraparound"); do_seg_limits = section->Get_bool("segment limits"); SegSet16(cs,0); Segs.limit[cs] = do_seg_limits ? 0xFFFF : ((PhysPt)(~0UL)); Segs.expanddown[cs] = false; diff --git a/src/debug/debug.cpp b/src/debug/debug.cpp index fe1f39f9935..ce712e36d72 100644 --- a/src/debug/debug.cpp +++ b/src/debug/debug.cpp @@ -158,12 +158,15 @@ static void DrawInput(void); static void DEBUG_RaiseTimerIrq(void); static void SaveMemory(uint16_t seg, uint32_t ofs1, uint32_t num); static void SaveMemoryBin(uint16_t seg, uint32_t ofs1, uint32_t num); +static void LogDEVS(void); static void LogMCBS(void); static void LogGDT(void); static void LogLDT(void); static void LogIDT(void); static void LogXMS(void); +#if !defined(OSFREE) static void LogEMS(void); +#endif static void LogFNKEY(void); static void LogPages(char* selname); static void LogCPUInfo(void); @@ -188,6 +191,8 @@ void DEBUG_EndPagedContent(void); Bitu MEM_PageMaskActive(void); Bitu MEM_TotalPages(void); Bitu MEM_PageMask(void); +void DEBUG_WarnDynamic(void); +int CPU_IsDynamicCore(void); // cpu.cpp 0=normal, 1=dynamic, 2=dynamic core with assembler static void LogEMUMachine(void) { DEBUG_BeginPagedContent(); @@ -220,6 +225,7 @@ static void LogEMUMachine(void) { case SVGA_TsengET3K: cardName ="Tseng ET3000"; break; case SVGA_ParadisePVGA1A: cardName ="Paradise PVGA1A"; break; case SVGA_ATI: cardName ="ATI"; break; + case SVGA_DOSBoxIG: cardName ="DOSBox Integrated Graphics"; break; } DEBUG_ShowMsg("Machine: %s %s",m, cardName); @@ -281,6 +287,21 @@ class DebugPageHandler : public PageHandler { }; #endif +typedef struct MEMFinder { + bool usePreviousValue = false; + uint8_t opType = 0; + uint8_t size = 1; + uint16_t iterations = 0; + uint16_t seg = 0; + uint32_t ofs = 0; + uint32_t range = 0; + uint32_t value = 0; + uint32_t matches = 0; + vector tableValue; + vector tableTruth; +}MEMFinder; + +MEMFinder* MEMFINDInstance = NULL; class DEBUG; @@ -315,6 +336,8 @@ static bool debug_running = false; static bool check_rescroll = false; static FPU_rec oldfpu; +static bool warn_dynamic = false; + void VGA_DebugRedraw(void); @@ -421,10 +444,17 @@ uint64_t LinMakeProt(uint16_t selector, uint32_t offset) uint64_t GetAddress(uint16_t seg, uint32_t offset) { + /* For the current CS, always use the cached hidden base (SegPhys(cs)). + * Real x86 segment registers have a hidden descriptor cache that is only + * updated when a new selector is loaded. After LMSW sets CR0.PE=1 but + * before a far jump reloads CS, cpu.pmode is true yet SegValue(cs) still + * holds the previous (real-mode) value, so resolving via the GDT would + * read garbage. */ + if (seg == SegValue(cs)) return SegPhys(cs)+(uint64_t)offset; + if (cpu.pmode && !(reg_flags & FLAG_VM)) return LinMakeProt(seg,offset); - if (seg==SegValue(cs)) return SegPhys(cs)+(uint64_t)offset; return ((uint64_t)seg<<4u)+offset; } @@ -1173,11 +1203,11 @@ static void DrawRegisters(void) { mvwprintw (dbg.win_reg,1,77,"%01X",GETFLAG(TF) ? 1:0); SetColor(changed_flags&FLAG_IOPL); - mvwprintw (dbg.win_reg,2,72,"%01X",GETFLAG(IOPL)>>12); + mvwprintw (dbg.win_reg,2,72,"%01X",(unsigned int)(GETFLAG(IOPL)>>12)); SetColor(cpu.cpl ^ oldcpucpl); - mvwprintw (dbg.win_reg,2,78,"%01X",cpu.cpl); + mvwprintw (dbg.win_reg,2,78,"%01X",(unsigned int)cpu.cpl); if (cpu.pmode) { if (reg_flags & FLAG_VM) mvwprintw(dbg.win_reg,0,76,"VM86"); @@ -1207,7 +1237,7 @@ static void DrawRegisters(void) { wattrset(dbg.win_reg,0); - mvwprintw(dbg.win_reg,3,60,"cc=%-8u ",cycle_count); + mvwprintw(dbg.win_reg,3,60,"cc=%-8u ",(unsigned int)cycle_count); if (CPU_IsHLTed()) mvwprintw(dbg.win_reg,3,73,"HLT "); else mvwprintw(dbg.win_reg,3,73,"RUN "); @@ -1874,6 +1904,11 @@ bool lookslikefloat(char* str) { return true; } +void AddBPINT3(void) { + CBreakpoint::AddIntBreakpoint(3,BPINT_ALL,BPINT_ALL,false); + CBreakpoint::ActivateBreakpoints(); +} + void VGA_DumpFontRamBIN(const char *filename); void VGA_DumpFontRamBMP(const char *filename); int32_t DEBUG_Run(int32_t amount,bool quickexit); @@ -1972,9 +2007,286 @@ bool ParseCommand(char* str) { return true; } + if (command == "MEMFIND") { // Start a memory search instance with seg:ofs range + uint32_t valfind; + uint8_t valfind8; + uint16_t valfind16; + uint32_t valfind32; + uint32_t listedvalues = 0; + if (found[0] == '!'){ + if (MEMFINDInstance != NULL){ + DEBUG_ShowMsg("DEBUG: Memory search instance cancelled."); + MEMFINDInstance->tableTruth.clear(); + MEMFINDInstance->tableValue.clear(); + MEMFINDInstance->tableTruth.shrink_to_fit(); + MEMFINDInstance->tableValue.shrink_to_fit(); + delete MEMFINDInstance; + MEMFINDInstance = NULL; + } else { + DEBUG_ShowMsg("DEBUG: No active search instances to cancel."); + } + return true; + } else if (found[0] == 'L'){ + if (MEMFINDInstance != NULL){ + DEBUG_BeginPagedContent(); + uint32_t j = 0; + for (uint32_t i = (MEMFINDInstance->ofs + (MEMFINDInstance->seg * 16)); i < (MEMFINDInstance->ofs + (MEMFINDInstance->seg * 16) + MEMFINDInstance->range); i+=MEMFINDInstance->size){ + switch (MEMFINDInstance->size){ + case 1: + mem_readb_checked((PhysPt)(i),&valfind8); + valfind = valfind8; + break; + case 2: + mem_readw_checked((PhysPt)(i),&valfind16); + valfind = valfind16; + break; + case 4: + mem_readd_checked((PhysPt)(i),&valfind32); + valfind = valfind32; + break; + default: + mem_readb_checked((PhysPt)(i),&valfind8); + valfind = valfind8; + break; + } + if (MEMFINDInstance->tableTruth[j] == true){ + listedvalues++; + DEBUG_ShowMsg("DEBUG: [MEMFIND] Address: %04X:%06X Current Value: %08X\n",MEMFINDInstance->seg,(i - (MEMFINDInstance->seg * 16)),valfind); + } + j+=MEMFINDInstance->size; + } + DEBUG_ShowMsg("DEBUG: [MEMFIND] Matched values during current instance: %06X\n",listedvalues); + DEBUG_EndPagedContent(); + } else { + DEBUG_ShowMsg("DEBUG: No active search instances to list from."); + } + return true; + } + uint16_t seg = (uint16_t)GetHexValue(found,found); found++; + uint32_t ofs = GetHexValue(found,found); found++; + uint32_t num = GetHexValue(found,found); found++; + if ((MEMFINDInstance == NULL) && (num > 0)){ + if (((seg*16)+ofs+num) > 16777215){ + DEBUG_ShowMsg("DEBUG: Address range larger than valid size, cancelling."); + return true; + } + DEBUG_ShowMsg("DEBUG: Created memory search instance."); + MEMFINDInstance = new MEMFinder; + } else if ((MEMFINDInstance == NULL) && (num == 0)){ + DEBUG_ShowMsg("DEBUG: --MEMFIND-- Start memory search instance."); + DEBUG_ShowMsg("DEBUG: Use MEMS to proceed through search instance."); + DEBUG_ShowMsg("DEBUG: Usage: MEMFIND (!/L) [seg]:[offset] [range] (B/W/D)"); + DEBUG_ShowMsg("DEBUG: L - List entries matched in the search instance."); + DEBUG_ShowMsg("DEBUG: ! - Cancel memory search instance."); + return true; + } else if (MEMFINDInstance != NULL){ + DEBUG_ShowMsg("DEBUG: Memory search instance is already active."); + return true; + } + switch (*found){ + case 'B': + DEBUG_ShowMsg("DEBUG: 1 byte specified."); + MEMFINDInstance->size = 1; + break; + case 'W': + DEBUG_ShowMsg("DEBUG: 2 bytes specified."); + MEMFINDInstance->size = 2; + break; + case 'D': + DEBUG_ShowMsg("DEBUG: 4 bytes specified."); + MEMFINDInstance->size = 4; + break; + default: + DEBUG_ShowMsg("DEBUG: No size specified, using 1 byte."); + MEMFINDInstance->size = 1; + break; + } + DEBUG_ShowMsg("DEBUG: RAM search from %04X:%04X with range: %06X\n",seg,ofs,num); + MEMFINDInstance->range = num; + MEMFINDInstance->ofs = ofs; + MEMFINDInstance->seg = seg; + MEMFINDInstance->tableTruth.resize(num,true); + for (uint32_t i = (MEMFINDInstance->ofs + (MEMFINDInstance->seg * 16)); i < (MEMFINDInstance->ofs + (MEMFINDInstance->seg * 16) + MEMFINDInstance->range); i++){ + mem_readb_checked((PhysPt)(i),&valfind8); + MEMFINDInstance->tableValue.push_back(valfind8); + } + return true; + } + + if (command == "MEMS") { // Search through MEMFIND for matching values in memory search instance + bool parsed; + uint32_t valfind; + uint8_t valfind8; + uint16_t valfind16; + uint32_t valfind32; + uint32_t value; + uint32_t matches = 0; + char opTypeStr[26]; + if (MEMFINDInstance == NULL){ + DEBUG_ShowMsg("DEBUG: MEMFIND Memory search is not active.\n"); + return true; + } + switch (found[0]){ + case '>': + if (found[1] == '='){ + found+=2; + MEMFINDInstance->opType = 4; + sprintf(opTypeStr, "GREATER THAN OR EQUAL TO"); + } else { + found+=1; + MEMFINDInstance->opType = 1; + sprintf(opTypeStr, "GREATER THAN"); + } + break; + case '<': + if (found[1] == '='){ + found+=2; + MEMFINDInstance->opType = 5; + sprintf(opTypeStr, "LESS THAN OR EQUAL TO"); + } else { + found+=1; + MEMFINDInstance->opType = 2; + sprintf(opTypeStr, "LESS THAN"); + } + break; + case '!': + found+=1; + MEMFINDInstance->opType = 3; + sprintf(opTypeStr, "NOT EQUAL TO"); + break; + case '=': + found+=1; + MEMFINDInstance->opType = 0; + sprintf(opTypeStr, "EQUAL TO"); + default: + MEMFINDInstance->opType = 0; + sprintf(opTypeStr, "EQUAL TO"); + break; + } + SkipSpace(found); + if (*found == ' '){ + DEBUG_ShowMsg("DEBUG: MEMS - Memory Search from MEMFIND instance.\n"); + DEBUG_ShowMsg("DEBUG: Usage: MEMS (OPERATOR) VALUE.\n"); + DEBUG_ShowMsg("DEBUG: Valid operators: >, >=, <, <=, !, =.\n"); + return true; + } else if (*found == '\0'){ + DEBUG_ShowMsg("DEBUG: No value was entered. Comparing with previous values.\n"); + MEMFINDInstance->usePreviousValue = true; + value = 0; + } else { + value = GetHexValue(found,found,&parsed); + if (((value > 255) && (MEMFINDInstance->size == 1)) || ((value > 65535) && (MEMFINDInstance->size == 2))){ + DEBUG_ShowMsg("DEBUG: Memory search failed. Value is larger than specified size range.\n"); + return true; + } + MEMFINDInstance->value = value; + MEMFINDInstance->usePreviousValue = false; + } + uint32_t y = 0; //This index is seperated from the for loop, as the for loop can start from any index while this particular index starts at 0 + for (uint32_t i = (MEMFINDInstance->ofs + (MEMFINDInstance->seg * 16)); i < (MEMFINDInstance->ofs + (MEMFINDInstance->seg * 16) + MEMFINDInstance->range); i+=MEMFINDInstance->size){ + switch (MEMFINDInstance->size){ + case 1: + mem_readb_checked((PhysPt)(i),&valfind8); + valfind = valfind8; + if (MEMFINDInstance->usePreviousValue == true){ + memcpy(&value, &MEMFINDInstance->tableValue[y], 1); + } + break; + case 2: + mem_readw_checked((PhysPt)(i),&valfind16); + valfind = valfind16; + if (MEMFINDInstance->usePreviousValue == true){ + memcpy(&value, &MEMFINDInstance->tableValue[y], 2); + } + break; + case 4: + mem_readd_checked((PhysPt)(i),&valfind32); + valfind = valfind32; + if (MEMFINDInstance->usePreviousValue == true){ + memcpy(&value, &MEMFINDInstance->tableValue[y], 4); + } + break; + default: + mem_readb_checked((PhysPt)(i),&valfind8); + valfind = valfind8; + if (MEMFINDInstance->usePreviousValue == true){ + memcpy(&value, &MEMFINDInstance->tableValue[y], 1); + } + break; + } + switch (MEMFINDInstance->opType){ + case 1: + if ((valfind > value) && (MEMFINDInstance->tableTruth[y] == true)){ + matches++; + } else { + MEMFINDInstance->tableTruth[y] = false; + } + break; + case 2: + if ((valfind < value) && (MEMFINDInstance->tableTruth[y] == true)){ + matches++; + } else { + MEMFINDInstance->tableTruth[y] = false; + } + break; + case 3: + if ((valfind != value) && (MEMFINDInstance->tableTruth[y] == true)){ + matches++; + } else { + MEMFINDInstance->tableTruth[y] = false; + } + break; + case 4: + if ((valfind >= value) && (MEMFINDInstance->tableTruth[y] == true)){ + matches++; + } else { + MEMFINDInstance->tableTruth[y] = false; + } + break; + case 5: + if ((valfind <= value) && (MEMFINDInstance->tableTruth[y] == true)){ + matches++; + } else { + MEMFINDInstance->tableTruth[y] = false; + } + break; + default: + if ((valfind == value) && (MEMFINDInstance->tableTruth[y] == true)){ + matches++; + } else { + MEMFINDInstance->tableTruth[y] = false; + } + break; + } + y+=MEMFINDInstance->size; + } + MEMFINDInstance->matches = matches; + MEMFINDInstance->iterations++; + if (MEMFINDInstance->matches == 0){ + if (MEMFINDInstance->usePreviousValue == true){ + DEBUG_ShowMsg("DEBUG: No more matches found when comparing %s previous value. Memory search instance finished.\n",opTypeStr); + } else { + DEBUG_ShowMsg("DEBUG: No more matches found with value %s (%06X). Memory search instance finished.\n",opTypeStr,value); + } + MEMFINDInstance->tableTruth.clear(); + MEMFINDInstance->tableValue.clear(); + MEMFINDInstance->tableTruth.shrink_to_fit(); + MEMFINDInstance->tableValue.shrink_to_fit(); + delete MEMFINDInstance; + MEMFINDInstance = NULL; + } else { + if (MEMFINDInstance->usePreviousValue == true){ + DEBUG_ShowMsg("DEBUG: (%06X) addresses matching %s their previous values. Iterations: %06X\n",MEMFINDInstance->matches,opTypeStr,MEMFINDInstance->iterations); + } else { + DEBUG_ShowMsg("DEBUG: (%06X) matches found with value %s (%06X). Iterations: %06X\n",MEMFINDInstance->matches,opTypeStr,value,MEMFINDInstance->iterations); + } + } + return true; + } + if (command == "IV") { // Insert variable uint16_t seg = (uint16_t)GetHexValue(found,found); found++; - uint32_t ofs = (uint16_t)GetHexValue(found,found); found++; + uint32_t ofs = GetHexValue(found,found); found++; char name[16]; for (int i=0; i<16; i++) { if (found[i] && (found[i]!=' ')) name[i] = found[i]; @@ -2532,11 +2844,14 @@ bool ParseCommand(char* str) { if (command == "DOS") { stream >> command; if (command == "MCBS") LogMCBS(); - else if (command == "KERN") LogDOSKernMem(); - else if (command == "XMS") LogXMS(); - else if (command == "EMS") LogEMS(); - else if (command == "FNKEY") LogFNKEY(); - else return false; + else if (command == "DEVS") LogDEVS(); + else if (command == "KERN") LogDOSKernMem(); + else if (command == "XMS") LogXMS(); +#if !defined(OSFREE) + else if (command == "EMS") LogEMS(); +#endif + else if (command == "FNKEY") LogFNKEY(); + else return false; return true; } @@ -3694,6 +4009,8 @@ bool ParseCommand(char* str) { DEBUG_ShowMsg("EMU MEM/MACHINE - Show emulator memory or machine info.\n"); DEBUG_ShowMsg("MEMDUMP [seg]:[off] [len] - Write memory to file memdump.txt.\n"); DEBUG_ShowMsg("MEMDUMPBIN [s]:[o] [len] - Write memory to file memdump.bin.\n"); + DEBUG_ShowMsg("MEMFIND [seg]:[off] [.].. - Start memory find search instance.\n"); + DEBUG_ShowMsg("MEMS [operator] [value] - Search value within instance.\n"); DEBUG_ShowMsg("SELINFO [segName] - Show selector info.\n"); DEBUG_ShowMsg("INTVEC [filename] - Writes interrupt vector table to file.\n"); @@ -4308,7 +4625,12 @@ uint32_t DEBUG_CheckKeys(void) { break; case KEY_F(10): // Step over inst DrawRegistersUpdateOld(); - if (StepOver()) { + if(!CPU_IsDynamicCore()) warn_dynamic = false; + else if(!warn_dynamic) { + DEBUG_WarnDynamic(); + warn_dynamic = true; + } + if (StepOver()) { mustCompleteInstruction = true; inhibit_int_breakpoint = true; ret = DEBUG_Run(1,false); @@ -4321,6 +4643,11 @@ uint32_t DEBUG_CheckKeys(void) { /* FALLTHROUGH */ case KEY_F(11): // trace into DrawRegistersUpdateOld(); + if(!CPU_IsDynamicCore()) warn_dynamic = false; + else if(!warn_dynamic) { + DEBUG_WarnDynamic(); + warn_dynamic = true; + } exitLoop = false; mustCompleteInstruction = true; ret = DEBUG_Run(1,true); @@ -4513,6 +4840,11 @@ Bitu DEBUG_Loop(void) { void DEBUG_FlushInput(void); +void DEBUG_WarnDynamic(void) { + DEBUG_ShowMsg("Warning: Single-stepping may not work correctly with \"Dynamic core\"."); + DEBUG_ShowMsg(" If you encounter problems, switch the CPU core to \"Normal core\"."); +} + bool tohide=true; static bool hidedebugger=false; void DEBUG_Enable_Handler(bool pressed) { @@ -4604,15 +4936,20 @@ void DEBUG_Enable_Handler(bool pressed) { DEBUG_DrawScreen(); DOSBOX_SetLoop(&DEBUG_Loop); mainMenu.get_item("mapper_debugger").check(true).refresh_item(mainMenu); - if (!showhelp) { - showhelp=true; + if(!CPU_IsDynamicCore()) warn_dynamic = false; + else if(!warn_dynamic) { + DEBUG_WarnDynamic(); + warn_dynamic = true; + } + if (!showhelp) { + showhelp=true; DEBUG_ShowMsg("***| TYPE HELP (+ENTER) TO GET AN OVERVIEW OF ALL COMMANDS |***\n"); } //KEYBOARD_ClrBuffer(); GFX_SetTitle(-1,-1,-1,false); runnormal = false; - if (debugrunmode==1) ParseCommand("RUN"); - else if (debugrunmode==2) ParseCommand("RUNWATCH"); + if (debugrunmode==1) {char command[] = "RUN"; ParseCommand(command);} + else if (debugrunmode==2) {char command[] = "RUNWATCH"; ParseCommand(command);} } void DEBUG_DrawScreen(void) { @@ -4627,6 +4964,25 @@ static void DEBUG_RaiseTimerIrq(void) { PIC_ActivateIRQ(0); } +static void LogDEVChain(uint32_t devhdr) { + DOS_DEVHDR::hdr hdr; + char tmp[9]; + + while (1) { + MEM_BlockRead(PhysMake(devhdr >> 16,devhdr & 0xFFFFu),&hdr,sizeof(hdr)); + memcpy(tmp,hdr.name,8); tmp[8] = 0; + DEBUG_ShowMsg("%04X:%04X %04X %04X %04X %s", + devhdr >> 16,devhdr & 0xFFFFu, + hdr.attributes,hdr.strategy_entry,hdr.interrupt_entry,tmp); + + devhdr = hdr.nextdev; + if (devhdr == NONEXTDEV) break; + + /* Apparently in MS-DOS 5, a driver can set only the offset field to 0xFFFF and that is sufficient to end the linked list */ + if ((devhdr&0xFFFFu) == 0xFFFFu) break; + } +} + // Display the content of the MCB chain starting with the MCB at the specified segment. static void LogMCBChain(uint16_t mcb_segment) { DOS_MCB mcb(mcb_segment); @@ -4657,23 +5013,25 @@ static void LogMCBChain(uint16_t mcb_segment) { psp_seg_note = ""; } - DEBUG_ShowMsg(" %04X %12u %04X %-7s %s",mcb_segment,mcb.GetSize() << 4,mcb.GetPSPSeg(), psp_seg_note, filename); + DEBUG_ShowMsg(" %04X %12u %04X %-7s %s",mcb_segment,mcb.GetSize() << 4,mcb.GetPSPSeg(), psp_seg_note, filename); // print a message if dataAddr is within this MCB's memory range PhysPt mcbStartAddr = PhysMake(mcb_segment+1,0); PhysPt mcbEndAddr = PhysMake(mcb_segment+1+mcb.GetSize(),0); if (dataAddr >= mcbStartAddr && dataAddr < mcbEndAddr) { - DEBUG_ShowMsg(" (data addr %04hX:%04X is %u bytes past this MCB)",dataSeg,DOS_dataOfs,dataAddr - mcbStartAddr); + DEBUG_ShowMsg(" (data addr %04hX:%04X is %u bytes past this MCB)",dataSeg,DOS_dataOfs,dataAddr - mcbStartAddr); } // if we've just processed the last MCB in the chain, break out of the loop - if (mcb.GetType()==0x5a) { + mcb_segment+=mcb.GetSize()+1; + if (mcb.GetType()==0x5a) break; - } + // else, move to the next MCB in the chain - mcb_segment+=mcb.GetSize()+1; mcb.SetPt(mcb_segment); } + + DEBUG_ShowMsg(" %04X END OF CHAIN",mcb_segment); } #include "regionalloctracking.h" @@ -4703,10 +5061,12 @@ static void LogBIOSMem(void) { Bitu XMS_GetTotalHandles(void); bool XMS_GetHandleInfo(Bitu &phys_location,Bitu &size,Bitu &lockcount,bool &free,Bitu handle); +#if !defined(OSFREE) bool EMS_GetHandle(Bitu &size,PhysPt &addr,std::string &name,Bitu handle); const char *EMS_Type_String(void); Bitu EMS_Max_Handles(void); bool EMS_Active(void); +#endif static void LogFNKEY(void) { DEBUG_BeginPagedContent(); @@ -4717,6 +5077,7 @@ static void LogFNKEY(void) { DEBUG_EndPagedContent(); } +#if !defined(OSFREE) static void LogEMS(void) { Bitu h_size; PhysPt xh_addr; @@ -4751,8 +5112,8 @@ static void LogEMS(void) { Bitu GetEMSPageFrameSize(void); DEBUG_ShowMsg("EMS page frame 0x%08lx-0x%08lx", - GetEMSPageFrameSegment()*16UL, - (GetEMSPageFrameSegment()*16UL)+GetEMSPageFrameSize()-1UL); + (long unsigned int)(GetEMSPageFrameSegment()*16UL), + (long unsigned int)((GetEMSPageFrameSegment()*16UL)+GetEMSPageFrameSize()-1UL)); DEBUG_ShowMsg("Handle Page(p/l) Address"); for (Bitu p=0;p < (GetEMSPageFrameSize() >> 14UL);p++) { @@ -4774,19 +5135,20 @@ static void LogEMS(void) { DEBUG_ShowMsg("%6lu %4lu/%4lu %08lx-%08lx%s",(unsigned long)handle, (unsigned long)p,(unsigned long)log_page, - (GetEMSPageFrameSegment()*16UL)+(p << 14UL), - (GetEMSPageFrameSegment()*16UL)+((p+1UL) << 14UL)-1, + (long unsigned int)((GetEMSPageFrameSegment()*16UL)+(p << 14UL)), + (long unsigned int)((GetEMSPageFrameSegment()*16UL)+((p+1UL) << 14UL)-1), tmp); } else { DEBUG_ShowMsg("-- %4lu/ %08lx-%08lx",(unsigned long)p, - (GetEMSPageFrameSegment()*16UL)+(p << 14UL), - (GetEMSPageFrameSegment()*16UL)+((p+1UL) << 14UL)-1); + (long unsigned int)((GetEMSPageFrameSegment()*16UL)+(p << 14UL)), + (long unsigned int)((GetEMSPageFrameSegment()*16UL)+((p+1UL) << 14UL)-1)); } } DEBUG_EndPagedContent(); } +#endif static void LogXMS(void) { Bitu phys_location; @@ -4846,6 +5208,43 @@ static void LogDOSKernMem(void) { DEBUG_EndPagedContent(); } +// Display the content of all device drivers. +static void LogDEVS(void) { + if (dos_kernel_disabled) { + if (boothax == BOOTHAX_MSDOS) { + if (guest_msdos_LoL == 0 || guest_msdos_dev_chain == 0) { + DEBUG_ShowMsg("Cannot enumerate device list while DOS kernel is inactive, and DOSBox-X has not yet determined the DEV list of the guest MS-DOS operating system"); + return; + } + + DEBUG_BeginPagedContent(); + + try { + DEBUG_ShowMsg("Header Attr Strat Intr Name"); + LogDEVChain(guest_msdos_dev_chain); + } + catch (GuestPageFaultException &pf) { + (void)pf;//unused + DEBUG_ShowMsg("(Enumeration caused page fault within the guest)"); + } + + DEBUG_EndPagedContent(); + return; + } + else { + DEBUG_ShowMsg("Cannot enumerate device list while DOS kernel is inactive."); + return; + } + } + + DEBUG_BeginPagedContent(); + + DEBUG_ShowMsg("Header Attr Strat Intr Name"); + LogDEVChain(dos_infoblock.GetStartOfDeviceChain()); + + DEBUG_EndPagedContent(); +} + // Display the content of all Memory Control Blocks. static void LogMCBS(void) { if (dos_kernel_disabled) { @@ -5098,20 +5497,20 @@ static void LogInstruction(uint16_t segValue, uint32_t eipValue, ofstream& out) char dline[200];Bitu size; size = DasmI386(dline, start, reg_eip, cpu.code.big); char* res = empty; - if (showExtend && (cpuLogType > 0) ) { + if (showExtend && (cpuLogType > 0)) { res = AnalyzeInstruction(dline,false); if (!res || !(*res)) res = empty; Bitu reslen = strlen(res); - if (reslen < 22) { - memset(res + reslen, ' ', 22 - reslen); - res[22] = 0; - } + if (reslen < 22) { + memset(res + reslen, ' ', 22 - reslen); + res[22] = 0; + } } Bitu len = strlen(dline); - if (len < 30) { - memset(dline + len, ' ', 30 - len); - dline[30] = 0; - } + if (len < 30) { + memset(dline + len, ' ', 30 - len); + dline[30] = 0; + } // Get register values @@ -5120,7 +5519,9 @@ static void LogInstruction(uint16_t segValue, uint32_t eipValue, ofstream& out) } else if (cpuLogType == 1) { out << setw(4) << SegValue(cs) << ":" << setw(8) << reg_eip << " " << dline << " " << res; } else if (cpuLogType == 2) { - char ibytes[200]=""; char tmpc[200]; + char ibytes[200]=""; + char tstamp[128]; + char tmpc[200]; for (Bitu i=0; i0) << " Z" << (get_ZF()>0) - << " S" << (get_SF()>0) << " O" << (get_OF()>0) << " I" << GETFLAGBOOL(IF); + << " S" << (get_SF()>0) << " O" << (get_OF()>0) << " I" << GETFLAGBOOL(IF); } else { out << " FS:" << setw(4) << SegValue(fs) << " GS:" << setw(4) << SegValue(gs) - << " SS:" << setw(4) << SegValue(ss) - << " CF:" << (get_CF()>0) << " ZF:" << (get_ZF()>0) << " SF:" << (get_SF()>0) - << " OF:" << (get_OF()>0) << " AF:" << (get_AF()>0) << " PF:" << (get_PF()>0) - << " IF:" << GETFLAGBOOL(IF); + << " SS:" << setw(4) << SegValue(ss) + << " CF:" << (get_CF()>0) << " ZF:" << (get_ZF()>0) << " SF:" << (get_SF()>0) + << " OF:" << (get_OF()>0) << " AF:" << (get_AF()>0) << " PF:" << (get_PF()>0) + << " IF:" << GETFLAGBOOL(IF); } if(cpuLogType == 2) { out << " TF:" << GETFLAGBOOL(TF) << " VM:" << GETFLAGBOOL(VM) <<" FLG:" << setw(8) << reg_flags - << " CR0:" << setw(8) << cpu.cr0; + << " CR0:" << setw(8) << cpu.cr0; } out << endl; } @@ -5215,18 +5617,22 @@ class DEBUG : public Program { }; #endif -#if C_DEBUG +#if !defined(OSFREE) +# if C_DEBUG extern bool debugger_break_on_exec; +# endif #endif void DEBUG_CheckExecuteBreakpoint(uint16_t seg, uint32_t off) { -#if C_DEBUG +#if !defined(OSFREE) +# if C_DEBUG if (debugger_break_on_exec) { CBreakpoint::AddBreakpoint(seg,off,true); CBreakpoint::ActivateBreakpointsExceptAt(SegPhys(cs)+reg_eip); debugger_break_on_exec = false; } +# endif #endif #if 0 if (pDebugcom && pDebugcom->IsActive()) { diff --git a/src/debug/debug_gui.cpp b/src/debug/debug_gui.cpp index a5e44a7b693..fc566ef4a73 100644 --- a/src/debug/debug_gui.cpp +++ b/src/debug/debug_gui.cpp @@ -593,7 +593,17 @@ void DBGUI_StartUp(void) { LOG(LOG_MISC,LOG_DEBUG)("DEBUG GUI startup"); /* Start the main window */ - dbg.win_main=initscr(); + +#ifdef WIN32 + if(!AttachConsole(ATTACH_PARENT_PROCESS)) { // Make sure console window is opened + AllocConsole(); + } + freopen("CONIN$", "r", stdin); + freopen("CONOUT$", "w", stdout); + freopen("CONOUT$", "w", stderr); +#endif + + dbg.win_main=initscr(); #ifdef WIN32 /* Tell Windows 10 we DON'T want a thin tall console window that fills the screen top to bottom. diff --git a/src/dos/Makefile.am b/src/dos/Makefile.am index 9f959510268..c3ec1da8d12 100644 --- a/src/dos/Makefile.am +++ b/src/dos/Makefile.am @@ -13,4 +13,3 @@ if MACOSX libdos_a_SOURCES += \ ../libs/physfs/physfs_platform_apple.mm endif - diff --git a/src/dos/cdrom.cpp b/src/dos/cdrom.cpp index 5d2d57e0322..d73b93e4906 100644 --- a/src/dos/cdrom.cpp +++ b/src/dos/cdrom.cpp @@ -64,39 +64,39 @@ CDROM_Interface_SDL::~CDROM_Interface_SDL(void) { cd = nullptr; } -bool CDROM_Interface_SDL::SetDevice(char* path, int forceCD) { - int num = SDL_CDNumDrives(); - if ((forceCD >= 0) && (forceCD < num)) { - driveID = forceCD; - cd = SDL_CDOpen(driveID); - SDL_CDStatus(cd); - return true; +bool CDROM_Interface_SDL::SetDevice(const char* path, int forceCD) { + int num = SDL_CDNumDrives(); + if ((forceCD >= 0) && (forceCD < num)) { + driveID = forceCD; + cd = SDL_CDOpen(driveID); + SDL_CDStatus(cd); + return true; } for (int i=0; i < num; i++) { - const char* cdname = SDL_CDName(i); - if (strcasecmp(path, cdname) == 0) { - cd = SDL_CDOpen(i); - SDL_CDStatus(cd); - driveID = i; - return true; - } - } - return false; + const char* cdname = SDL_CDName(i); + if (strcasecmp(path, cdname) == 0) { + cd = SDL_CDOpen(i); + SDL_CDStatus(cd); + driveID = i; + return true; + } + } + return false; } bool CDROM_Interface_SDL::ReadSectorsHost(void *buffer, bool raw, unsigned long sector, unsigned long num) { - (void)sector;//UNUSED - (void)buffer;//UNUSED - (void)raw;//UNUSED - (void)num;//UNUSED + (void)sector;//UNUSED + (void)buffer;//UNUSED + (void)raw;//UNUSED + (void)num;//UNUSED return false;/*TODO*/ } bool CDROM_Interface_SDL::GetAudioTracks(int& stTrack, int& end, TMSF& leadOut) { - (void)leadOut;//POSSIBLY UNUSED - (void)stTrack;//POSSIBLY UNUSED - (void)end;//POSSIBLY UNUSED + (void)leadOut;//POSSIBLY UNUSED + (void)stTrack;//POSSIBLY UNUSED + (void)end;//POSSIBLY UNUSED if (CD_INDRIVE(SDL_CDStatus(cd))) { stTrack = 1; end = cd->numtracks; @@ -106,9 +106,9 @@ bool CDROM_Interface_SDL::GetAudioTracks(int& stTrack, int& end, TMSF& leadOut) } bool CDROM_Interface_SDL::GetAudioTrackInfo(int track, TMSF& start, unsigned char& attr) { - (void)track;//POSSIBLY UNUSED - (void)start;//POSSIBLY UNUSED - (void)attr;//POSSIBLY UNUSED + (void)track;//POSSIBLY UNUSED + (void)start;//POSSIBLY UNUSED + (void)attr;//POSSIBLY UNUSED if (CD_INDRIVE(SDL_CDStatus(cd))) { FRAMES_TO_MSF(cd->track[track-1].offset,&start.min,&start.sec,&start.fr); attr = cd->track[track-1].type<<4;//sdl uses 0 for audio and 4 for data. instead of 0x00 and 0x40 @@ -117,11 +117,11 @@ bool CDROM_Interface_SDL::GetAudioTrackInfo(int track, TMSF& start, unsigned cha } bool CDROM_Interface_SDL::GetAudioSub(unsigned char& attr, unsigned char& track, unsigned char& index, TMSF& relPos, TMSF& absPos) { - (void)absPos;//POSSIBLY UNUSED - (void)relPos;//POSSIBLY UNUSED - (void)index;//POSSIBLY UNUSED - (void)track;//POSSIBLY UNUSED - (void)attr;//POSSIBLY UNUSED + (void)absPos;//POSSIBLY UNUSED + (void)relPos;//POSSIBLY UNUSED + (void)index;//POSSIBLY UNUSED + (void)track;//POSSIBLY UNUSED + (void)attr;//POSSIBLY UNUSED if (CD_INDRIVE(SDL_CDStatus(cd))) { track = cd->cur_track; index = cd->cur_track; @@ -133,19 +133,19 @@ bool CDROM_Interface_SDL::GetAudioSub(unsigned char& attr, unsigned char& track, } bool CDROM_Interface_SDL::GetAudioStatus(bool& playing, bool& pause){ - (void)playing;//POSSIBLY UNUSED - (void)pause;//POSSIBLY UNUSED + (void)playing;//POSSIBLY UNUSED + (void)pause;//POSSIBLY UNUSED if (CD_INDRIVE(SDL_CDStatus(cd))) { playing = (cd->status==CD_PLAYING); pause = (cd->status==CD_PAUSED); } return CD_INDRIVE(SDL_CDStatus(cd)); } - + bool CDROM_Interface_SDL::GetMediaTrayStatus(bool& mediaPresent, bool& mediaChanged, bool& trayOpen) { - (void)mediaPresent;//POSSIBLY UNUSED - (void)mediaChanged;//POSSIBLY UNUSED - (void)trayOpen;//POSSIBLY UNUSED + (void)mediaPresent;//POSSIBLY UNUSED + (void)mediaChanged;//POSSIBLY UNUSED + (void)trayOpen;//POSSIBLY UNUSED SDL_CDStatus(cd); mediaPresent = (cd->status!=CD_TRAYEMPTY) && (cd->status!=CD_ERROR); mediaChanged = (oldLeadOut!=cd->track[cd->numtracks].offset); @@ -156,9 +156,9 @@ bool CDROM_Interface_SDL::GetMediaTrayStatus(bool& mediaPresent, bool& mediaChan } bool CDROM_Interface_SDL::PlayAudioSector(unsigned long start,unsigned long len) { - (void)start;//POSSIBLY UNUSED - (void)len;//POSSIBLY UNUSED - // Has to be there, otherwise wrong cd status report (dunno why, sdl bug ?) + (void)start;//POSSIBLY UNUSED + (void)len;//POSSIBLY UNUSED + // Has to be there, otherwise wrong cd status report (dunno why, sdl bug ?) SDL_CDClose(cd); cd = SDL_CDOpen(driveID); bool success = (SDL_CDPlay(cd,int(start+150u),int(len))==0); @@ -166,7 +166,7 @@ bool CDROM_Interface_SDL::PlayAudioSector(unsigned long start,unsigned long len) } bool CDROM_Interface_SDL::PauseAudio(bool resume) { - (void)resume;//POSSIBLY UNUSED + (void)resume;//POSSIBLY UNUSED bool success; if (resume) success = (SDL_CDResume(cd)==0); else success = (SDL_CDPause (cd)==0); @@ -182,16 +182,16 @@ bool CDROM_Interface_SDL::StopAudio(void) { } bool CDROM_Interface_SDL::LoadUnloadMedia(bool unload) { - (void)unload;//UNUSED + (void)unload;//UNUSED bool success = (SDL_CDEject(cd)==0); return success; } int CDROM_GetMountType(const char* path, int forceCD) { - (void)forceCD; -// 0 - physical CDROM -// 1 - Iso file -// 2 - subdirectory + (void)forceCD; + // 0 - physical CDROM + // 1 - Iso file + // 2 - subdirectory // 1. Smells like a real cdrom // if ((strlen(path)<=3) && (path[2]=='\\') && (strchr(path,'\\')==strrchr(path,'\\')) && (GetDriveType(path)==DRIVE_CDROM)) return 0; @@ -214,16 +214,16 @@ int CDROM_GetMountType(const char* path, int forceCD) { cdName = SDL_CDName(i); if (strcmp(buffer,cdName)==0) return 0; } - + // Detect ISO - struct pref_stat file_stat; + struct pref_stat file_stat; #if defined(WIN32) - ht_stat_t hfile_stat; - typedef wchar_t host_cnv_char_t; - host_cnv_char_t *CodePageGuestToHost(const char *s); - const host_cnv_char_t* host_name = CodePageGuestToHost(path); - int pstat = pref_stat(path, &file_stat), hstat = host_name == NULL ? 1 : ht_stat(host_name, &hfile_stat); - if ((!pstat && (file_stat.st_mode & S_IFREG)) || (pstat && !hstat && (hfile_stat.st_mode & S_IFREG))) return 1; + ht_stat_t hfile_stat; + typedef wchar_t host_cnv_char_t; + host_cnv_char_t *CodePageGuestToHost(const char *s); + const host_cnv_char_t* host_name = CodePageGuestToHost(path); + int pstat = pref_stat(path, &file_stat), hstat = host_name == NULL ? 1 : ht_stat(host_name, &hfile_stat); + if ((!pstat && (file_stat.st_mode & S_IFREG)) || (pstat && !hstat && (hfile_stat.st_mode & S_IFREG))) return 1; #else if ((pref_stat(path, &file_stat) == 0) && (file_stat.st_mode & S_IFREG)) return 1; #endif @@ -271,10 +271,10 @@ bool CDROM_Interface_Fake :: GetMediaTrayStatus(bool& mediaPresent, bool& mediaC bool CDROM_Interface_Fake::ReadSectorsHost(void *buffer, bool raw, unsigned long sector, unsigned long num) { - (void)buffer;//UNUSED - (void)sector;//UNUSED - (void)raw;//UNUSED - (void)num;//UNUSED + (void)buffer;//UNUSED + (void)sector;//UNUSED + (void)raw;//UNUSED + (void)num;//UNUSED return false;/*TODO*/ } diff --git a/src/dos/cdrom.h b/src/dos/cdrom.h index 0a65154f78b..15edde2f6ad 100644 --- a/src/dos/cdrom.h +++ b/src/dos/cdrom.h @@ -131,10 +131,10 @@ class CDROM_Interface }; // CDROM_Interface (void); - virtual ~CDROM_Interface (void) {}; + virtual ~CDROM_Interface (void) { if (refcount) fprintf(stderr,"CDROM_Interface delete with refcount %u\n",refcount); }; //! \brief Set the device associated with this interface, if supported by emulation - virtual bool SetDevice (char* path, int forceCD) = 0; + virtual bool SetDevice (const char* path, int forceCD) = 0; //! \brief Get UPC string from the CD-ROM virtual bool GetUPC (unsigned char& attr, char* upc) = 0; @@ -179,6 +179,26 @@ class CDROM_Interface virtual void InitNewMedia (void) {}; INTERFACE_TYPE class_id = ID_BASE; + uint8_t subUnit = 0xFF; + + private: + volatile int refcount = 0; + + public: + int Addref() { +// fprintf(stderr,"ptr %p addref from %u\n",(void*)this,refcount); + return ++refcount; + } + int Release() { + int ret = --refcount; + if (ret < 0) { + fprintf(stderr,"WARNING: CDROM_Interface Release() changed refcount to %d\n",ret); + abort(); + } + if (ret == 0) delete this; +// fprintf(stderr,"ptr %p releaseref to %u\n",(void*)this,ret); + return ret; + } }; //! \brief CD-ROM interface to SDL 1.x CD-ROM support @@ -191,7 +211,7 @@ class CDROM_Interface_SDL : public CDROM_Interface virtual ~CDROM_Interface_SDL(void); /* base C++ class overrides, no documentation needed */ - bool SetDevice (char* path, int forceCD) override; + bool SetDevice (const char* path, int forceCD) override; bool GetUPC (unsigned char& attr, char* upc) override { attr = 0; strcpy(upc,"UPC"); return true; }; bool GetAudioTracks (int& stTrack, int& end, TMSF& leadOut) override; bool GetAudioTrackInfo (int track, TMSF& start, unsigned char& attr) override; @@ -226,7 +246,7 @@ class CDROM_Interface_SDL : public CDROM_Interface class CDROM_Interface_Fake : public CDROM_Interface { public: - bool SetDevice (char* /*path*/, int /*forceCD*/) override { return true; }; + bool SetDevice (const char* /*path*/, int /*forceCD*/) override { return true; }; bool GetUPC (unsigned char& attr, char* upc) override { attr = 0; strcpy(upc,"UPC"); return true; }; bool GetAudioTracks (int& stTrack, int& end, TMSF& leadOut) override; bool GetAudioTrackInfo (int track, TMSF& start, unsigned char& attr) override; @@ -395,7 +415,7 @@ class CDROM_Interface_Image : public CDROM_Interface CDROM_Interface_Image (uint8_t subUnit); virtual ~CDROM_Interface_Image (void); void InitNewMedia (void) override {}; - bool SetDevice (char *path, int forceCD) override; + bool SetDevice (const char *path, int forceCD) override; bool GetUPC (unsigned char& attr, char* upc) override; bool GetAudioTracks (int& stTrack, int& end, TMSF& leadOut) override; bool GetAudioTrackInfo (int track, TMSF& start, unsigned char& attr) override; @@ -405,6 +425,7 @@ class CDROM_Interface_Image : public CDROM_Interface bool PlayAudioSector (unsigned long start, unsigned long len) override; bool PauseAudio (bool resume) override; bool StopAudio (void) override; + bool PlayNextAudioTrack (void); void ChannelControl (TCtrl ctrl) override; bool ReadSectors (PhysPt buffer, bool raw, unsigned long sector, unsigned long num) override; /* This is needed for IDE hack, who's buffer does not exist in DOS physical memory */ @@ -450,20 +471,21 @@ class CDROM_Interface_Image : public CDROM_Interface int playbackRemaining; uint16_t bufferPos; uint16_t bufferConsumed; + int currentTrackIdx = -1; } player; // Private utility functions void ClearTracks(); - bool LoadIsoFile(char *filename); + bool LoadIsoFile(const char *filename); bool CanReadPVD(TrackFile *file, int sectorSize, bool mode2) const; int GetTrack(unsigned long sector); static void CDAudioCallBack (Bitu len); // Private functions for cue sheet processing bool LoadBizhawkCD(const char* cdName); - bool LoadCueSheet(char *cuefile); - bool LoadChdFile(char* chdfile); - bool LoadCloneCDSheet(char *cuefile); + bool LoadCueSheet(const char *cuefile); + bool LoadChdFile(const char* chdfile); + bool LoadCloneCDSheet(const char *cuefile); bool GetRealFileName(std::string& filename, std::string& pathname) const; bool GetCueKeyword(std::string &keyword, std::istream &in) const; bool GetCueFrame(int &frames, std::istream &in) const; @@ -474,7 +496,6 @@ class CDROM_Interface_Image : public CDROM_Interface std::vector readBuffer; std::string mcn; static int refCount; - uint8_t subUnit; }; #if defined (WIN32) /* Win 32 */ @@ -489,7 +510,7 @@ class CDROM_Interface_Aspi : public CDROM_Interface public: virtual ~CDROM_Interface_Aspi(void); - bool SetDevice (char* path, int forceCD) override; + bool SetDevice (const char* path, int forceCD) override; bool GetUPC (unsigned char& attr, char* upc) override; @@ -542,7 +563,7 @@ class CDROM_Interface_Ioctl : public CDROM_Interface CDROM_Interface_Ioctl (cdioctl_cdatype ioctl_cda); virtual ~CDROM_Interface_Ioctl(void); - bool SetDevice (char* path, int forceCD) override; + bool SetDevice (const char* path, int forceCD) override; bool GetUPC (unsigned char& attr, char* upc) override; @@ -627,7 +648,7 @@ class CDROM_Interface_Ioctl : public CDROM_Interface_SDL public: CDROM_Interface_Ioctl (void); - bool SetDevice (char* path, int forceCD) override; + bool SetDevice (const char* path, int forceCD) override; bool GetUPC (unsigned char& attr, char* upc) override; bool ReadSectors (PhysPt buffer, bool raw, unsigned long sector, unsigned long num) override; /* This is needed for IDE hack, who's buffer does not exist in DOS physical memory */ diff --git a/src/dos/cdrom_aspi_win32.cpp b/src/dos/cdrom_aspi_win32.cpp index cc613f33942..bc9b7efce09 100644 --- a/src/dos/cdrom_aspi_win32.cpp +++ b/src/dos/cdrom_aspi_win32.cpp @@ -252,7 +252,7 @@ bool CDROM_Interface_Aspi::ScanRegistry(HKEY& hKeyBase) return false; }; -bool CDROM_Interface_Aspi::SetDevice(char* path, int forceCD) +bool CDROM_Interface_Aspi::SetDevice(const char* path, int forceCD) { (void)forceCD; // load WNASPI32.DLL diff --git a/src/dos/cdrom_image.cpp b/src/dos/cdrom_image.cpp index 4b6bccd0bcd..2364e12a221 100644 --- a/src/dos/cdrom_image.cpp +++ b/src/dos/cdrom_image.cpp @@ -42,6 +42,7 @@ #define IS_BIGENDIAN false #endif +#include "cross.h" #include "drives.h" #include "logging.h" #include "support.h" @@ -526,10 +527,10 @@ CDROM_Interface_Image* CDROM_Interface_Image::images[26] = {}; CDROM_Interface_Image::imagePlayer CDROM_Interface_Image::player; CDROM_Interface_Image::CDROM_Interface_Image(uint8_t subUnit) - :subUnit(subUnit) { class_id = ID_IMAGE; images[subUnit] = this; + this->subUnit = subUnit; if (refCount == 0) { if (player.channel == NULL) { // channel is kept dormant except during cdrom playback periods @@ -556,7 +557,7 @@ CDROM_Interface_Image::~CDROM_Interface_Image() } extern bool qmount; -bool CDROM_Interface_Image::SetDevice(char* path, int forceCD) +bool CDROM_Interface_Image::SetDevice(const char* path, int forceCD) { (void)forceCD;//UNUSED const bool result = LoadBizhawkCD(path) || LoadCueSheet(path) || LoadCloneCDSheet(path) || LoadIsoFile(path) || LoadChdFile(path); @@ -756,6 +757,7 @@ bool CDROM_Interface_Image::PlayAudioSector(unsigned long start, unsigned long l player.cd = this; player.trackFile = trackFile; + player.currentTrackIdx = track; player.startFrame = start; player.currFrame = start; player.numFrames = len; @@ -776,7 +778,7 @@ bool CDROM_Interface_Image::PlayAudioSector(unsigned long start, unsigned long l player.playbackTotal = lround(len * tracks[track].sectorSize * bytesPerMs / 176.4); player.playbackRemaining = player.playbackTotal; - LOG_MSG("CDROM: Playing track # %d %.1f min.-mark", tracks[track].number, tracks[track].skip * (1 / 10584000.0)); + LOG_MSG("CDROM: Playing track # %d %.1f min.-mark", tracks[track].number, offset * (1 / 10584000.0)); // #ifdef DEBUG LOG_MSG( @@ -942,6 +944,20 @@ bool CDROM_Interface_Image::ReadSector(uint8_t *buffer, bool raw, unsigned long return true; } +bool CDROM_Interface_Image::PlayNextAudioTrack(void) +{ + const int totalTracks = (int)tracks.size() - 1; + for(int i = player.currentTrackIdx + 1; i < totalTracks; i++) { + if(tracks[i].attr != 0x40 && tracks[i].file != nullptr) { + return player.cd->PlayAudioSector(tracks[i].start, tracks[i].length); + } + } + + // No more playable tracks, so stop playback + player.cd->StopAudio(); + return false; +} + void CDROM_Interface_Image::CDAudioCallBack(Bitu len) { _driveUsed = true; @@ -1059,6 +1075,24 @@ void CDROM_Interface_Image::CDAudioCallBack(Bitu len) memset(player.buffer + player.bufferPos, 0, underDecode); player.bufferPos += underDecode; + + const uint32_t rate = player.trackFile->getRate(); + const uint8_t channels = player.trackFile->getChannels(); + const int32_t bytesPerSec = rate * channels * 2; + +#if 0 // Dosbox-staging requires this for Alone in the Dark 2, but since it did work without it on DOSBox-X, we will disable this for now + const int32_t twoSecBytes = bytesPerSec * 2; + + if(player.playbackRemaining < twoSecBytes) { +#else + if(player.playbackRemaining < bytesPerSec * 0.001) { // Stop playback if less than 1 ms remaining +#endif + player.cd->StopAudio(); + } + else + player.cd->PlayNextAudioTrack(); + + return; } // printProgress( (player.bufferPos - player.bufferConsumed)/(float)AUDIO_DECODE_BUFFER_SIZE, "fill"); } // end of fill-while @@ -1071,7 +1105,7 @@ void CDROM_Interface_Image::CDAudioCallBack(Bitu len) } } -bool CDROM_Interface_Image::LoadIsoFile(char* filename) +bool CDROM_Interface_Image::LoadIsoFile(const char* filename) { _driveUsed = true; @@ -1137,6 +1171,7 @@ bool CDROM_Interface_Image::CanReadPVD(TrackFile *file, int sectorSize, bool mod (pvd[8] == 1 && !strncmp((char*)(&pvd[9]), "CDROM", 5) && pvd[14] == 1)) return true; // At least ISO 9660 compliant +#if !defined(OSFREE) // Hm, maybe the ISO image is pure UDF seek = 256 * sectorSize; // anchor volume descriptor pointer at sector 256 if ((sectorSize == RAW_SECTOR_SIZE || sectorSize == 2448) && !mode2) seek += 16; @@ -1150,6 +1185,7 @@ bool CDROM_Interface_Image::CanReadPVD(TrackFile *file, int sectorSize, bool mod return true; // The ISO image is pure UDF } } +#endif return false; } @@ -1190,11 +1226,11 @@ static void CloneCDEntryToTrack(CDROM_Interface_Image::Track &trk,ImageCCDEntry trk.start = ent.PLBA; } -bool CDROM_Interface_Image::LoadCloneCDSheet(char *cuefile) { +bool CDROM_Interface_Image::LoadCloneCDSheet(const char *cuefile) { // If we're going to support CUE vs CCD vs anything else then this function must // reject any file who's file extension is not .CCD { - char *s = strrchr(cuefile,'.'); + const char *s = strrchr(cuefile,'.'); if (!s) return false; if (strcasecmp(s,".ccd")) return false; } @@ -1209,7 +1245,7 @@ bool CDROM_Interface_Image::LoadCloneCDSheet(char *cuefile) { /* locate corresponding IMG file */ std::string imgfile; { - char *ext = strrchr(cuefile,'.'); + const char *ext = strrchr(cuefile,'.'); if (!ext) return false; imgfile = std::string(cuefile,(size_t)(ext-cuefile)); imgfile += ".img"; @@ -1394,7 +1430,7 @@ bool CDROM_Interface_Image::LoadCloneCDSheet(char *cuefile) { return (leadOutLBA >= 0 && isCloneCD); } -bool CDROM_Interface_Image::LoadCueSheet(char *cuefile) +bool CDROM_Interface_Image::LoadCueSheet(const char *cuefile) { _driveUsed = true; @@ -1402,7 +1438,7 @@ bool CDROM_Interface_Image::LoadCueSheet(char *cuefile) // reject any file which are not a CUE sheet, GOG is so smart that they set several different extensions so that we can't assume .cue only. // Known extensions at the moment are: .cue, .ins, .dat, .inst (not sure it is an exhaustive list) { - char *s = strrchr(cuefile,'.'); + const char *s = strrchr(cuefile,'.'); if (!s) return false; if (!strcasecmp(s,".ccd") || !strcasecmp(s, ".chd") || !strcasecmp(s, ".iso") || !strcasecmp(s, ".img") || !strcasecmp(s, ".gog") || !strcasecmp(s, ".mds") || !strcasecmp(s, ".mdf") || !strcasecmp(s, ".bin")) return false; @@ -1569,7 +1605,7 @@ std::vector split_string_to_list(const std::string& str, const std::stri return tokens; } -bool CDROM_Interface_Image::LoadChdFile(char* chdfile) +bool CDROM_Interface_Image::LoadChdFile(const char* chdfile) { _driveUsed = true; diff --git a/src/dos/cdrom_ioctl_linux.cpp b/src/dos/cdrom_ioctl_linux.cpp index 1dbf09b40f8..94a636edda8 100644 --- a/src/dos/cdrom_ioctl_linux.cpp +++ b/src/dos/cdrom_ioctl_linux.cpp @@ -83,7 +83,7 @@ bool CDROM_Interface_Ioctl::ReadSectors(PhysPt buffer, bool raw, unsigned long s return (ret > 0); } -bool CDROM_Interface_Ioctl::SetDevice(char* path, int forceCD) +bool CDROM_Interface_Ioctl::SetDevice(const char* path, int forceCD) { bool success = CDROM_Interface_SDL::SetDevice(path, forceCD); diff --git a/src/dos/cdrom_ioctl_os2.cpp b/src/dos/cdrom_ioctl_os2.cpp index a9265cab8d1..e47d7723f01 100644 --- a/src/dos/cdrom_ioctl_os2.cpp +++ b/src/dos/cdrom_ioctl_os2.cpp @@ -130,7 +130,7 @@ bool CDROM_Interface_Ioctl::ReadSectors(PhysPt buffer, bool raw, unsigned long s return (ret == NO_ERROR); } -bool CDROM_Interface_Ioctl::SetDevice(char* path, int forceCD) { +bool CDROM_Interface_Ioctl::SetDevice(const char* path, int forceCD) { bool success = CDROM_Interface_SDL::SetDevice(path, forceCD); if (success) { diff --git a/src/dos/cdrom_ioctl_win32.cpp b/src/dos/cdrom_ioctl_win32.cpp index 693bc925fbe..4087d2dd781 100644 --- a/src/dos/cdrom_ioctl_win32.cpp +++ b/src/dos/cdrom_ioctl_win32.cpp @@ -574,7 +574,7 @@ void CDROM_Interface_Ioctl::dx_CDAudioCallBack(Bitu len) { player.bufLen -= len; } -bool CDROM_Interface_Ioctl::SetDevice(char* path, int forceCD) { +bool CDROM_Interface_Ioctl::SetDevice(const char* path, int forceCD) { (void)forceCD; mci_devid = 0; use_mciplay = false; diff --git a/src/dos/dev_con.h b/src/dos/dev_con.h index e54d33c2807..96c6d99716b 100644 --- a/src/dos/dev_con.h +++ b/src/dos/dev_con.h @@ -24,6 +24,7 @@ #include #include "inout.h" #include "jfont.h" +#include "timer.h" #include "shiftjis.h" #include "callback.h" @@ -631,15 +632,33 @@ class device_CON : public DOS_Device { switch (chr) { case 7: { - // set timer (this should not be needed as the timer already is programmed - // with those values, but the speaker stays silent without it) - IO_Write(0x43,0xb6); - IO_Write(0x42,1320&0xff); - IO_Write(0x42,1320>>8); - // enable speaker - IO_Write(0x61,IO_Read(0x61)|0x3); - for(Bitu i=0; i < 333; i++) CALLBACK_Idle(); - IO_Write(0x61,IO_Read(0x61)&~0x3); + if (IS_PC98_ARCH) { + const unsigned int div = (unsigned int)PIT_TICK_RATE / (unsigned int)2000; + // set timer (this should not be needed as the timer already is programmed + // with those values, but the speaker stays silent without it) + IO_Write(0x77,0xb6); + IO_Write(0x73,div&0xff); + IO_Write(0x73,div>>8); + // enable speaker + IO_Write(0x35,IO_Read(0x35) & ~0x08); + double start,dur = BeepDuration(); + start = PIC_FullIndex(); + while ((PIC_FullIndex() - start) < dur) CALLBACK_Idle(); + IO_Write(0x35,IO_Read(0x35) | 0x08); + } + else { /* Let INT 10h do it for us */ + uint16_t oldax,oldbx,oldcx; + oldax=reg_ax; + oldbx=reg_bx; + oldcx=reg_cx; + reg_al=7; + reg_bh=0; + reg_ah=0x0E; + CALLBACK_RunRealInt(0x10); + reg_ax=oldax; + reg_bx=oldbx; + reg_cx=oldcx; + } break; } case 8: @@ -650,7 +669,6 @@ class device_CON : public DOS_Device { cur_col=0; break; case '\n': - cur_col=0; cur_row++; break; case '\t': @@ -1050,6 +1068,10 @@ std::string log_dev_con_str; bool logging_con = false; bool DOS_BreakTest(bool print); void DOS_BreakAction(); +bool read_kanji1 = false; +uint8_t temp_char = 0; +void WriteChar(uint16_t col, uint16_t row, uint8_t page, uint16_t chr, uint8_t attr, bool useattr); +extern bool dbcs_sbcs; bool device_CON::Write(const uint8_t * data,uint16_t * size) { uint16_t count=0; @@ -1079,7 +1101,7 @@ bool device_CON::Write(const uint8_t * data,uint16_t * size) { return true; } Bitu i; - uint8_t col,page; + uint8_t col,row,page; INT10_SetCurMode(); @@ -1109,6 +1131,42 @@ bool device_CON::Write(const uint8_t * data,uint16_t * size) { if (data[count] != '\n' && data[count] != '\r') log_dev_con_str += (char)data[count]; } + + page = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE); + col = CURSOR_POS_COL(page); + BIOS_NCOLS; + + if(isDBCSCP() && !dos.direct_output +#if defined(USE_TTF) + && dbcs_sbcs +#endif + ) { // Consideration of first byte of DBCS characters at the end of line + if(!read_kanji1 && isKanji1(data[count])) { + read_kanji1 = true; + temp_char = data[count]; + count++; + continue; + } + else if(read_kanji1) { + if(col == ncols - 1 && isKanji2(data[count])) { + BIOS_NROWS; + row = CURSOR_POS_ROW(page); + WriteChar(col, row, page, ' ', ansi.attr, true); + if(nrows == row + 1) { + INT10_ScrollWindow(0, 0, (uint8_t)(nrows - 1), (uint8_t)(ncols - 1), -1, ansi.attr, page); + INT10_SetCursorPos(row, 0, page); + } + else INT10_SetCursorPos(row + 1, 0, page); + Output(temp_char); + Output(data[count]); + count++; + read_kanji1 = false; + continue; + } + Output(temp_char); + read_kanji1 = false; + } + } if (!ansi.esc){ if(data[count]=='\033' && ansi.installed) { @@ -1120,7 +1178,6 @@ bool device_CON::Write(const uint8_t * data,uint16_t * size) { continue; } else if(data[count] == '\t' && !dos.direct_output) { /* expand tab if not direct output */ - page = real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE); do { Output(' '); col=CURSOR_POS_COL(page); @@ -1128,16 +1185,12 @@ bool device_CON::Write(const uint8_t * data,uint16_t * size) { count++; continue; } else if (data[count] == 0x1A && IS_PC98_ARCH) { - page = real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE); - /* it also redraws the function key row */ update_pc98_function_row(pc98_function_row_mode,true); INT10_ScrollWindow(0,0,255,255,0,ansi.attr,page); Real_INT10_SetCursorPos(0,0,page); } else if (data[count] == 0x1E && IS_PC98_ARCH) { - page = real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE); - Real_INT10_SetCursorPos(0,0,page); } else { Output(data[count]); @@ -1587,9 +1640,14 @@ device_CON::device_CON() { ansi.installed=true; } else { +#if !defined(OSFREE) /* Otherwise (including IBM systems), ANSI.SYS is not installed by default but can be added to CONFIG.SYS. * For compatibility with DOSBox SVN and other forks ANSI.SYS is installed by default. */ ansi.installed=section->Get_bool("ansi.sys"); +#else + /* the alternate prompt to indicate lack of MS-DOS relies on ANSI codes, therefore, ignore the setting */ + ansi.installed=true; +#endif } ansi.enabled=false; @@ -1630,8 +1688,8 @@ void device_CON::Output(uint8_t chr) { if (CurMode->type==M_TEXT) { uint8_t page=real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE); uint8_t col=CURSOR_POS_COL(page); - uint8_t row=CURSOR_POS_ROW(page); - BIOS_NCOLS;BIOS_NROWS; + uint8_t row=CURSOR_POS_ROW(page); + BIOS_NCOLS;BIOS_NROWS; if (nrows==row+1 && (chr=='\n' || (ncols==col+1 && chr!='\r' && chr!=8 && chr!=7))) { INT10_ScrollWindow(0,0,(uint8_t)(nrows-1),(uint8_t)(ncols-1),-1,ansi.attr,page); INT10_SetCursorPos(row-1,col,page); diff --git a/src/dos/dos.cpp b/src/dos/dos.cpp index 1f9a48c774c..b50ceeefd03 100644 --- a/src/dos/dos.cpp +++ b/src/dos/dos.cpp @@ -46,7 +46,9 @@ #include "support.h" #include "parport.h" #include "serialport.h" +#if !defined(OSFREE) #include "dos_network.h" +#endif #include "render.h" #include "jfont.h" #include "../ints/int10.h" @@ -66,11 +68,15 @@ #include +unsigned char exepack_handling = EXEPACK_UNPACK; static bool first_run=true; bool sync_time = false, manualtime = false; extern std::string log_dev_con_str; extern const char* RunningProgram; -extern bool use_quick_reboot, j3100_start; +extern bool use_quick_reboot; +#if !defined(OSFREE) +extern bool j3100_start; +#endif extern bool enable_config_as_shell_commands; extern bool checkwat, loadlang, pcibus_enable; extern bool log_int21, log_fileio, pipetmpdev; @@ -93,8 +99,11 @@ void ResolvePath(std::string& in); bool SwitchLanguage(int oldcp, int newcp, bool confirm); void makestdcp950table(), makeseacp951table(); std::string GetDOSBoxXPath(bool withexe=false); +#if !defined(OSFREE) extern std::string prefix_local, prefix_overlay; -bool a20_off_if_loading_low=true; +#endif +bool a20_off_if_loading_low = false; +extern char char_yes, char_no; int ascii_toupper(int c) { if (c >= 'a' && c <= 'z') @@ -133,16 +142,16 @@ static Bitu DOS_26Handler_Actual(bool fat32); unsigned char cpm_compat_mode = CPM_COMPAT_MSDOS5; -bool dos_in_hma = true; -bool dos_umb = true; +bool dos_in_hma = false; +bool dos_umb = false; bool DOS_BreakFlag = false; bool DOS_BreakConioFlag = false; -bool enable_dbcs_tables = true; -bool enable_share_exe = true; -bool enable_filenamechar = true; +bool enable_dbcs_tables = false; +bool enable_share_exe = false; +bool enable_filenamechar = false; bool shell_keyboard_flush = true; bool freed_mcb_allocate_on_resize = true; -bool enable_network_redirector = true; +bool enable_network_redirector = false; bool force_conversion = false; bool hidenonrep = true; bool rsize = false; @@ -152,7 +161,9 @@ bool incall = false; bool startnopause = false; int file_access_tries = 0; int dos_initial_hma_free = 34*1024; -int dos_sda_size = 0x560; +bool auto_repair_dos_psp_mcb_corruption = false; +bool dos_break_int3 = false; +int dos_sda_size = 0; int dos_clipboard_device_access; const char *dos_clipboard_device_name; const char dos_clipboard_device_default[]="CLIP$"; @@ -237,7 +248,7 @@ uint16_t DOS_CDS_SEG=0x108; uint16_t DOS_MEM_START=0x158; // regression to r3437 fixes nascar 2 colors uint16_t minimum_mcb_segment=0x70; uint16_t minimum_mcb_free=0x70; -uint16_t minimum_dos_initial_private_segment=0x70; +uint16_t minimum_dos_initial_private_segment=0; uint16_t DOS_PRIVATE_SEGMENT=0;//0xc800; uint16_t DOS_PRIVATE_SEGMENT_END=0;//0xd000; @@ -580,6 +591,7 @@ extern bool dos_a20_disable_on_exec; static Bitu DOS_21Handler(void); void XMS_DOS_LocalA20DisableIfNotEnabled(void); void XMS_DOS_LocalA20DisableIfNotEnabled_XMSCALL(void); +#if !defined(OSFREE) void DOS_Int21_7139(char *name1, const char *name2); void DOS_Int21_713a(char *name1, const char *name2); void DOS_Int21_713b(char *name1, const char *name2); @@ -597,9 +609,12 @@ void DOS_Int21_71a6(const char *name1, const char *name2); void DOS_Int21_71a7(const char *name1, const char *name2); void DOS_Int21_71a8(char* name1, const char* name2); void DOS_Int21_71aa(char* name1, const char* name2); +#endif Bitu DEBUG_EnableDebugger(void); void runMount(const char *str); +#if !defined(OSFREE) bool Network_IsNetworkResource(const char * filename); +#endif void CALLBACK_RunRealInt_retcsip(uint8_t intnum,Bitu &cs,Bitu &ip); #define DOSNAMEBUF 256 @@ -842,10 +857,12 @@ void HostAppRun() { if (!DOS_MakeName(fullname, winDirNew, &drive)) return; bool net = false; #if !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) + #if !defined(OSFREE) if (Network_IsNetworkResource(fullname)) { net = true; strcpy(winName, fullname); } + #endif #endif if (GetCurrentDirectory(512, winDirCur)&&(net||!strncmp(Drives[drive]->GetInfo(),"local ",6)||!strncmp(Drives[drive]->GetInfo(),"CDRom ",6))) { bool useoverlay=false; @@ -984,10 +1001,12 @@ void HostAppRun() { } #endif -#define IAS_DEVICE_HANDLE 0x1a50 -#define MSKANJI_DEVICE_HANDLE 0x1a51 -#define IBMJP_DEVICE_HANDLE 0x1a52 -#define AVSDRV_DEVICE_HANDLE 0x1a53 +#if !defined(OSFREE) +# define IAS_DEVICE_HANDLE 0x1a50 +# define MSKANJI_DEVICE_HANDLE 0x1a51 +# define IBMJP_DEVICE_HANDLE 0x1a52 +# define AVSDRV_DEVICE_HANDLE 0x1a53 +#endif /* called by shell to flush keyboard buffer right before executing the program to avoid * having the Enter key in the buffer to confuse programs that act immediately on keyboard input. */ @@ -1005,6 +1024,7 @@ void DOS_FlushSTDIN(void) { static Bitu DOS_21Handler(void) { bool unmask_irq0 = false; +#if !defined(OSFREE) /* NTS to ognjenmi: Your INT 21h logging patch was modified to log ALL INT 21h calls (the original * placement put it after the ignore case below), and is now conditional on * whether INT 21h logging is enabled. Also removed unnecessary copying of reg_al @@ -1012,7 +1032,9 @@ static Bitu DOS_21Handler(void) { if (log_int21) { LOG(LOG_DOSMISC, LOG_DEBUG)("Executing interrupt 21, ah=%x, al=%x", reg_ah, reg_al); } +#endif +#if !defined(OSFREE) /* Real MS-DOS behavior: * If HIMEM.SYS is loaded and CONFIG.SYS says DOS=HIGH, DOS will load itself into the HMA area. * To prevent crashes, the INT 21h handler down below will enable the A20 gate before executing @@ -1023,7 +1045,11 @@ static Bitu DOS_21Handler(void) { else XMS_DOS_LocalA20EnableIfNotEnabled(); } +#else + XMS_DOS_LocalA20EnableIfNotEnabled(); +#endif +#if !defined(OSFREE) if (((reg_ah != 0x50) && (reg_ah != 0x51) && (reg_ah != 0x62) && (reg_ah != 0x64)) && (reg_ah<0x6c)) { DOS_PSP psp(dos.psp()); psp.SetStack(RealMake(SegValue(ss),reg_sp-18)); @@ -1038,6 +1064,7 @@ static Bitu DOS_21Handler(void) { real_writew(SegValue(ss), reg_sp - 4, SegValue(ds)); real_writew(SegValue(ss), reg_sp - 2, SegValue(es)); } +#endif if (reg_ah == 0x06 || reg_ah == 0x07) { /* does not check CTRL+BREAK. Some DOS programs do not expect to be interrupted with INT 23h if they read */ @@ -1097,14 +1124,15 @@ static Bitu DOS_21Handler(void) { case 0x01: /* Read character from STDIN, with echo */ { uint8_t c;uint16_t n=1; - dos.echo=true; + if(dos.version.major == 1) dos.echo=true; DOS_ReadFile(STDIN,&c,&n); if (c == 3) { DOS_BreakAction(); if (!DOS_BreakTest()) return CBRET_NONE; } reg_al=c; - dos.echo=false; + if(dos.version.major > 1) DOS_WriteFile(STDOUT, &c, &n); /* RBIL: Character may be redirected under DOS 2 + */ + if(dos.version.major == 1) dos.echo=false; } break; case 0x02: /* Write character to STDOUT */ @@ -1293,7 +1321,13 @@ static Bitu DOS_21Handler(void) { } if (read == free && c != 13) { // Keyboard buffer full uint8_t bell = 7; + uint8_t page = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE); + uint8_t col = CURSOR_POS_COL(page); + uint8_t row = CURSOR_POS_ROW(page); + BIOS_NCOLS; DOS_WriteFile(STDOUT, &bell, &n); + if(CURSOR_POS_COL(page) > col) + INT10_SetCursorPos(row, col, page); // stay where we were continue; } DOS_WriteFile(STDOUT,&c,&n); @@ -1534,6 +1568,7 @@ static Bitu DOS_21Handler(void) { } break; case 0x2b: /* Set System Date */ +#if !defined(OSFREE) { // unfortunately, BIOS does not return whether succeeded // or not, so do a sanity check first @@ -1579,6 +1614,7 @@ static Bitu DOS_21Handler(void) { dos.date.day=reg_dl; reg_al=0; if (sync_time) {manualtime=true;mainMenu.get_item("sync_host_datetime").check(false).refresh_item(mainMenu);} +#endif break; case 0x2c: { /* Get System Time */ // use BIOS to get RTC time @@ -1633,6 +1669,7 @@ static Bitu DOS_21Handler(void) { break; } case 0x2d: /* Set System Time */ +#if !defined(OSFREE) { // unfortunately, BIOS does not return whether succeeded // or not, so do a sanity check first @@ -1679,6 +1716,7 @@ static Bitu DOS_21Handler(void) { } } if (sync_time) {manualtime=true;mainMenu.get_item("sync_host_datetime").check(false).refresh_item(mainMenu);} +#endif break; case 0x2e: /* Set Verify flag */ dos.verify=(reg_al==1); @@ -1893,11 +1931,12 @@ static Bitu DOS_21Handler(void) { { unmask_irq0 |= disk_io_unmask_irq0; MEM_StrCopy(SegPhys(ds)+reg_dx,name1,DOSNAMEBUF); -#if defined(USE_TTF) +#if !defined(OSFREE) +# if defined(USE_TTF) if((IS_DOSV || ttf_dosv) && IS_DOS_JAPANESE) { -#else +# else if(IS_DOSV && IS_DOS_JAPANESE) { -#endif +# endif char *name_start = name1; if(name1[0] == '@' && name1[1] == ':') { name_start += 2; @@ -1918,11 +1957,11 @@ static Bitu DOS_21Handler(void) { break; } } -#if defined(USE_TTF) +# if defined(USE_TTF) if(!strncmp(name_start, "$IBMAFNT", 8) || (ttf_dosv && !strncmp(name_start, "$IBMADSP", 8))) { -#else +# else if(!strncmp(name_start, "$IBMAFNT", 8)) { -#endif +# endif ibmjp_handle = IBMJP_DEVICE_HANDLE; reg_ax = IBMJP_DEVICE_HANDLE; force_sfn = false; @@ -1940,6 +1979,7 @@ static Bitu DOS_21Handler(void) { break; } } +#endif uint8_t oldal=reg_al; force_sfn = true; if (DOS_OpenFile(name1,reg_al,®_ax)) { @@ -2032,8 +2072,9 @@ static Bitu DOS_21Handler(void) { if(handle >= DOS_FILES || !Files[handle] || !Files[handle]->IsOpen()) { DOS_SetError(DOSERR_INVALID_HANDLE); } - else if(Files[handle]->GetInformation() & EXT_DEVICE_BIT) { - fRead = !(((DOS_ExtDevice*)Files[handle])->CallDeviceFunction(4, 26, SegValue(ds), reg_dx, toread) & 0x8000); + else if(Files[handle]->GetInformation() & DeviceInfoFlags::ExternalDevice) { + fRead = !(((DOS_ExtDevice*)Files[handle])->CallRWIODeviceFunction(DEVFUNC_READ, 26, SegValue(ds), reg_dx, toread) & 0x8000); + toread = real_readw(dos.dcp, 18); #if defined(USE_TTF) if(fRead && ttf.inUse && reg_bx == WPvga512CHMhandle) MEM_BlockRead(SegPhys(ds) + reg_dx, dos_copybuf, toread); @@ -2109,7 +2150,9 @@ static Bitu DOS_21Handler(void) { } MEM_BlockRead(SegPhys(ds)+reg_dx,dos_copybuf,towrite); - packerr=reg_bx==2&&towrite==22&&!strncmp((char *)dos_copybuf,"Packed file is corrupt",towrite); + static const char* msg = "Packed file is corrupt"; + packerr = reg_bx == 2 && towrite >= strlen(msg) && !memcmp(dos_copybuf, msg, strlen(msg)); + if(packerr) LOG_MSG("INT 21h WRITE warning: Detected 'Packed file is corrupt' message, try loadfix utility if your program fails to launch."); fWritten = (packerr && !(i4dos && !shellrun) && (!autofixwarn || (autofixwarn == 2 && infix == 0) || (autofixwarn == 1 && infix == 1))); if(!fWritten) { @@ -2118,8 +2161,9 @@ static Bitu DOS_21Handler(void) { if(handle >= DOS_FILES || !Files[handle] || !Files[handle]->IsOpen()) { DOS_SetError(DOSERR_INVALID_HANDLE); } - else if(Files[handle]->GetInformation() & EXT_DEVICE_BIT) { - fWritten = !(((DOS_ExtDevice*)Files[handle])->CallDeviceFunction(8, 26, SegValue(ds), reg_dx, towrite) & 0x8000); + else if(Files[handle]->GetInformation() & DeviceInfoFlags::ExternalDevice) { + fWritten = !(((DOS_ExtDevice*)Files[handle])->CallRWIODeviceFunction(DEVFUNC_WRITE, 26, SegValue(ds), reg_dx, towrite) & 0x8000); + towrite = real_readw(dos.dcp, 18); } else { if((fWritten = DOS_WriteFile(reg_bx, dos_copybuf, &towrite))) { @@ -2282,7 +2326,7 @@ static Bitu DOS_21Handler(void) { CALLBACK_SCF(false); } else { reg_ax=dos.errorcode; - reg_bx=size; + if (dos.errorcode != 7) reg_bx=size; /* Real MS-DOS does not appear to update BX for error 7 */ CALLBACK_SCF(true); } break; @@ -2292,6 +2336,7 @@ static Bitu DOS_21Handler(void) { result_errorcode = 0; MEM_StrCopy(SegPhys(ds)+reg_dx,name1,DOSNAMEBUF); +#if !defined(OSFREE) /* A20 hack for EXEPACK'd executables */ if (dos_a20_disable_on_exec) { if (cpu.pmode && ((GETFLAG_IOPLisRemovable() && reg_cx >= 0x3F) { - fatDrive *fdp; - FAT_BootSector::bpb_union_t bpb; - if (!strncmp(Drives[drive]->GetInfo(),"fatDrive ",9)) { - fdp = dynamic_cast(Drives[drive]); - if (fdp != NULL) { - bpb=fdp->GetBPB(); - if (bpb.is_fat32()) { - unsigned char tmp[24]; - - mem_writew(ptr+0x00,0x3D); // length of data (Windows 98) - /* first 24 bytes after len is DPB */ - { - const uint32_t srcptr = (dos.tables.dpb << 4) + (drive*dos.tables.dpb_size); - MEM_BlockRead(srcptr,tmp,24); - MEM_BlockWrite(ptr+0x02,tmp,24); - } - uint32_t bytes_per_sector,sectors_per_cluster,total_clusters,free_clusters,tfree; - rsize=true; - totalc=freec=0; - if (DOS_GetFreeDiskSpace32(reg_dl,&bytes_per_sector,§ors_per_cluster,&total_clusters,&free_clusters)) - tfree = freec?freec:free_clusters; - else - tfree=0xFFFFFFFF; - rsize=false; - mem_writeb(ptr+0x1A,0x00); // dpb flags - mem_writed(ptr+0x1B,0xFFFFFFFF);// ptr to next DPB if Windows 95 magic SI signature (TODO) - mem_writew(ptr+0x1F,2); // cluster to start searching when writing (FIXME) - mem_writed(ptr+0x21,tfree);// number of free clusters - mem_writew(ptr+0x25,bpb.v32.BPB_ExtFlags); - mem_writew(ptr+0x27,bpb.v32.BPB_FSInfo); - mem_writew(ptr+0x29,bpb.v32.BPB_BkBootSec); - mem_writed(ptr+0x2B,fdp->GetFirstClusterOffset()); /* apparently cluster offset relative to the disk not volume */ - mem_writed(ptr+0x2F,fdp->GetHighestClusterNumber()); - mem_writed(ptr+0x33,bpb.v32.BPB_FATSz32); - mem_writed(ptr+0x37,bpb.v32.BPB_RootClus); - mem_writed(ptr+0x3B,2); // cluster to start searching when writing (FIXME) - - CALLBACK_SCF(false); - break; - } - } - } - - reg_ax=0x18;//FIXME - CALLBACK_SCF(true); - } else { - reg_ax=0x18;//FIXME - CALLBACK_SCF(true); - } - } else if (reg_al==3) { - /* Get extended free disk space */ - MEM_StrCopy(SegPhys(ds)+reg_dx,name1,reg_cx); - if(name1[1] == ':' && name1[2] == '\\') { - name1[0] = toupper(name1[0]); - if((name1[0] < 'A') || (name1[0] > 'Z')) { - reg_ax = 0x15; // Invalid drive letter - CALLBACK_SCF(true); - break; - } - reg_dl = name1[0] - 'A' + 1; // Drive A = 1, B = 2, ... - } - else { - reg_ax=0xffff; - CALLBACK_SCF(true); - break; - } - uint32_t bytes_per_sector,sectors_per_cluster,total_clusters,free_clusters; - rsize=true; - totalc=freec=0; - if (DOS_GetFreeDiskSpace32(reg_dl,&bytes_per_sector,§ors_per_cluster,&total_clusters,&free_clusters)) - { - ext_space_info_t *info = new ext_space_info_t; - info->size_of_structure = sizeof(ext_space_info_t); - info->structure_version = 0; - info->sectors_per_cluster = sectors_per_cluster; - info->bytes_per_sector = bytes_per_sector; - info->available_clusters_on_drive = freec?freec:free_clusters; - info->total_clusters_on_drive = totalc?totalc:total_clusters; - info->available_sectors_on_drive = sectors_per_cluster * (freec?freec:free_clusters); - info->total_sectors_on_drive = sectors_per_cluster * (totalc?totalc:total_clusters); - info->available_allocation_units = freec?freec:free_clusters; - info->total_allocation_units = totalc?totalc:total_clusters; - MEM_BlockWrite(SegPhys(es)+reg_di,info,sizeof(ext_space_info_t)); - delete info; - reg_ax=0; - CALLBACK_SCF(false); - } - else - { - reg_ax=dos.errorcode; - CALLBACK_SCF(true); - } - rsize=false; - } else if (reg_al == 5 && reg_cx == 0xFFFF && (dos.version.major > 7 || dos.version.minor >= 10)) { - /* MS-DOS 7.1+ (Windows 95 OSR2+) FAT32 extended disk read/write */ - reg_al = reg_dl - 1; /* INT 25h AL 0=A: 1=B: This interface DL 1=A: 2=B: */ - if (reg_si & 1) - DOS_26Handler_Actual(true/*fat32*/); /* writing */ - else - DOS_25Handler_Actual(true/*fat32*/); /* reading */ - - /* CF needs to be returned on stack or else it's lost */ - CALLBACK_SCF(!!(reg_flags & FLAG_CF)); - } else { - LOG(LOG_DOSMISC,LOG_ERROR)("DOS:Unhandled call %02X al=%02X (MS-DOS 7.x function)",reg_ah,reg_al); - CALLBACK_SCF(true); - reg_ax=0xffff;//FIXME - } - break; - case 0xE0: + LOG(LOG_DOSMISC,LOG_NORMAL)("DOS:MS-DOS 7+ long file name support call %2X",reg_al); + if (!uselfn) { + reg_ax=0x7100; + CALLBACK_SCF(true); //Check this! What needs this ? See default case + break; + } +#if !defined(OSFREE) + switch(reg_al) { + case 0x39: /* LFN MKDIR */ + DOS_Int21_7139(name1, name2); + break; + case 0x3a: /* LFN RMDIR */ + DOS_Int21_713a(name1, name2); + break; + case 0x3b: /* LFN CHDIR */ + DOS_Int21_713b(name1, name2); + break; + case 0x41: /* LFN UNLINK */ + DOS_Int21_7141(name1, name2); + break; + case 0x43: /* LFN ATTR */ + DOS_Int21_7143(name1, name2); + break; + case 0x47: /* LFN PWD */ + DOS_Int21_7147(name1, name2); + break; + case 0x4e: /* LFN FindFirst */ + DOS_Int21_714e(name1, name2); + break; + case 0x4f: /* LFN FindNext */ + DOS_Int21_714f(name1, name2); + break; + case 0x56: /* LFN Rename */ + DOS_Int21_7156(name1, name2); + break; + case 0x60: /* LFN GetName */ + DOS_Int21_7160(name1, name2); + break; + case 0x6c: /* LFN Create */ + DOS_Int21_716c(name1, name2); + break; + case 0xa0: /* LFN VolInfo */ + DOS_Int21_71a0(name1, name2); + break; + case 0xa1: /* LFN FileClose */ + DOS_Int21_71a1(name1, name2); + break; + case 0xa6: /* LFN GetFileInfoByHandle */ + DOS_Int21_71a6(name1, name2); + break; + case 0xa7: /* LFN TimeConv */ + DOS_Int21_71a7(name1, name2); + break; + case 0xa8: /* LFN GenSFN */ + DOS_Int21_71a8(name1, name2); + break; + case 0xaa: /* LFN Subst */ + DOS_Int21_71aa(name1, name2); + break; + case 0xa9: /* LFN Server Create */ + reg_ax=0x7100; // unimplemented (not very useful) + default: + reg_ax=0x7100; + CALLBACK_SCF(true); //Check this! What needs this ? See default case + } +#endif + break; + case 0x73: +#if !defined(OSFREE) + if (dos.version.major < 7) { // MS-DOS 7+ only for AX=73xxh + CALLBACK_SCF(true); + reg_ax=0x7300; + } else if (reg_al==0 && reg_cl<2) { + /* Drive locking and flushing */ + reg_al = reg_cl; + reg_ah = 0; + CALLBACK_SCF(false); + } else if (reg_al==2) { + /* Get extended DPB */ + uint32_t ptr = SegPhys(es)+reg_di; + uint8_t drive; + + /* AX=7302h + * DL=drive + * ES:DI=buffer to return data into + * CX=length of buffer (Windows 9x uses 0x3F) + * SI=??? */ + + if (reg_dl != 0) /* 1=A: 2=B: ... */ + drive = reg_dl - 1; + else /* 0=default */ + drive = DOS_GetDefaultDrive(); + + if (drive < DOS_DRIVES && Drives[drive] && !Drives[drive]->isRemovable() && reg_cx >= 0x3F) { + if (!strncmp(Drives[drive]->GetInfo(),"fatDrive ",9)) { + fatDrive *fdp; + FAT_BootSector::bpb_union_t bpb; + + fdp = dynamic_cast(Drives[drive]); + if (fdp != NULL) { + bpb=fdp->GetBPB(); + if (bpb.is_fat32()) { + unsigned char tmp[24]; + + mem_writew(ptr+0x00,0x3D); // length of data (Windows 98) + /* first 24 bytes after len is DPB */ + { + const uint32_t srcptr = (dos.tables.dpb << 4) + (drive*dos.tables.dpb_size); + MEM_BlockRead(srcptr,tmp,24); + MEM_BlockWrite(ptr+0x02,tmp,24); + } + uint32_t bytes_per_sector,sectors_per_cluster,total_clusters,free_clusters,tfree; + rsize=true; + totalc=freec=0; + if (DOS_GetFreeDiskSpace32(reg_dl,&bytes_per_sector,§ors_per_cluster,&total_clusters,&free_clusters)) + tfree = freec?freec:free_clusters; + else + tfree=0xFFFFFFFF; + rsize=false; + mem_writeb(ptr+0x1A,0x00); // dpb flags + mem_writed(ptr+0x1B,0xFFFFFFFF);// ptr to next DPB if Windows 95 magic SI signature (TODO) + mem_writew(ptr+0x1F,2); // cluster to start searching when writing (FIXME) + mem_writed(ptr+0x21,tfree);// number of free clusters + mem_writew(ptr+0x25,bpb.v32.BPB_ExtFlags); + mem_writew(ptr+0x27,bpb.v32.BPB_FSInfo); + mem_writew(ptr+0x29,bpb.v32.BPB_BkBootSec); + mem_writed(ptr+0x2B,fdp->GetFirstClusterOffset()); /* apparently cluster offset relative to the disk not volume */ + mem_writed(ptr+0x2F,fdp->GetHighestClusterNumber()); + mem_writed(ptr+0x33,bpb.v32.BPB_FATSz32); + mem_writed(ptr+0x37,bpb.v32.BPB_RootClus); + mem_writed(ptr+0x3B,2); // cluster to start searching when writing (FIXME) + + CALLBACK_SCF(false); + break; + } + } + } + + reg_ax=0x18;//FIXME + CALLBACK_SCF(true); + } else { + reg_ax=0x18;//FIXME + CALLBACK_SCF(true); + } + } else if (reg_al==3) { + /* Get extended free disk space */ + MEM_StrCopy(SegPhys(ds)+reg_dx,name1,reg_cx); + if(name1[1] == ':' && name1[2] == '\\') { + name1[0] = toupper(name1[0]); + if((name1[0] < 'A') || (name1[0] > 'Z')) { + reg_ax = 0x15; // Invalid drive letter + CALLBACK_SCF(true); + break; + } + reg_dl = name1[0] - 'A' + 1; // Drive A = 1, B = 2, ... + } + else { + reg_ax=0xffff; + CALLBACK_SCF(true); + break; + } + uint32_t bytes_per_sector,sectors_per_cluster,total_clusters,free_clusters; + rsize=true; + totalc=freec=0; + if (DOS_GetFreeDiskSpace32(reg_dl,&bytes_per_sector,§ors_per_cluster,&total_clusters,&free_clusters)) + { + ext_space_info_t *info = new ext_space_info_t; + info->size_of_structure = sizeof(ext_space_info_t); + info->structure_version = 0; + info->sectors_per_cluster = sectors_per_cluster; + info->bytes_per_sector = bytes_per_sector; + info->available_clusters_on_drive = freec?freec:free_clusters; + info->total_clusters_on_drive = totalc?totalc:total_clusters; + info->available_sectors_on_drive = sectors_per_cluster * (freec?freec:free_clusters); + info->total_sectors_on_drive = sectors_per_cluster * (totalc?totalc:total_clusters); + info->available_allocation_units = freec?freec:free_clusters; + info->total_allocation_units = totalc?totalc:total_clusters; + MEM_BlockWrite(SegPhys(es)+reg_di,info,sizeof(ext_space_info_t)); + delete info; + reg_ax=0; + CALLBACK_SCF(false); + } + else + { + reg_ax=dos.errorcode; + CALLBACK_SCF(true); + } + rsize=false; + } else if (reg_al == 5 && reg_cx == 0xFFFF && (dos.version.major > 7 || dos.version.minor >= 10)) { + /* MS-DOS 7.1+ (Windows 95 OSR2+) FAT32 extended disk read/write */ + reg_al = reg_dl - 1; /* INT 25h AL 0=A: 1=B: This interface DL 1=A: 2=B: */ + if (reg_si & 1) + DOS_26Handler_Actual(true/*fat32*/); /* writing */ + else + DOS_25Handler_Actual(true/*fat32*/); /* reading */ + + /* CF needs to be returned on stack or else it's lost */ + CALLBACK_SCF(!!(reg_flags & FLAG_CF)); + } else { + LOG(LOG_DOSMISC,LOG_ERROR)("DOS:Unhandled call %02X al=%02X (MS-DOS 7.x function)",reg_ah,reg_al); + CALLBACK_SCF(true); + reg_ax=0xffff;//FIXME + } +#else + CALLBACK_SCF(true); + reg_ax=0x7300; +#endif + break; + case 0xE0: case 0xEF: /* Used in Ancient Art Of War CGA */ default: default_fallthrough: @@ -3208,15 +3301,20 @@ static Bitu DOS_27Handler(void) { } static uint16_t DOS_SectorAccess(bool read) { +#if !defined(OSFREE) fatDrive * drive = (fatDrive *)Drives[reg_al]; uint16_t bufferSeg = SegValue(ds); uint16_t bufferOff = reg_bx; uint16_t sectorCnt = reg_cx; uint32_t sectorNum = (uint32_t)reg_dx + drive->partSectOff; uint32_t sectorEnd = drive->getSectorCount() + drive->partSectOff; - uint8_t sectorBuf[512]; + uint32_t sectorSize = drive->getSectorSize(); + uint8_t sectorBuf[SECTOR_SIZE_MAX]; Bitu i; + if (sectorSize == 0 || sectorSize > SECTOR_SIZE_MAX) + return 0x0408; // sector not found + if (sectorCnt == 0xffff) { // large partition form bufferSeg = real_readw(SegValue(ds),reg_bx + 8); bufferOff = real_readw(SegValue(ds),reg_bx + 6); @@ -3228,16 +3326,20 @@ static uint16_t DOS_SectorAccess(bool read) { if (sectorNum >= sectorEnd) return 0x0408; // sector not found if (read) { if (drive->readSector(sectorNum++,§orBuf)) return 0x0408; - for (i=0;i<512;i++) real_writeb(bufferSeg,bufferOff++,sectorBuf[i]); + for (i=0;iwriteSector(sectorNum++,§orBuf)) return 0x0408; } } return 0; +#else + return 0x0408; // sector not found +#endif } static Bitu DOS_25Handler_Actual(bool fat32) { +#if !defined(OSFREE) if (reg_al >= DOS_DRIVES || !Drives[reg_al] || Drives[reg_al]->isRemovable()) { reg_ax = 0x8002; SETFLAGBIT(CF,true); @@ -3353,6 +3455,10 @@ static Bitu DOS_25Handler_Actual(bool fat32) { SETFLAGBIT(CF,true); } } +#else + reg_ax = 0x8002; + SETFLAGBIT(CF,true); +#endif return CBRET_NONE; } @@ -3361,6 +3467,7 @@ static Bitu DOS_25Handler(void) { } static Bitu DOS_26Handler_Actual(bool fat32) { +#if !defined(OSFREE) if (reg_al >= DOS_DRIVES || !Drives[reg_al] || Drives[reg_al]->isRemovable()) { reg_ax = 0x8002; SETFLAGBIT(CF,true); @@ -3467,6 +3574,10 @@ static Bitu DOS_26Handler_Actual(bool fat32) { reg_ax = 0x8002; SETFLAGBIT(CF,true); } +#else + reg_ax = 0x8002; + SETFLAGBIT(CF,true); +#endif return CBRET_NONE; } @@ -3475,7 +3586,7 @@ static Bitu DOS_26Handler(void) { } bool private_segment_write_protect = false; -bool enable_collating_uppercase = true; +bool enable_collating_uppercase = false; bool keep_private_area_on_boot = false; bool private_always_from_umb = false; bool private_segment_in_umb = true; @@ -3543,9 +3654,13 @@ void INT10_WriteChar_viaRealInt(uint8_t chr, uint8_t attr, uint8_t page, uint16_ void INT10_ScrollWindow_viaRealInt(uint8_t rul, uint8_t cul, uint8_t rlr, uint8_t clr, int8_t nlines, uint8_t attr, uint8_t page); extern bool dos_con_use_int16_to_detect_input; -extern bool dbg_zero_on_dos_allocmem, addovl; +#if !defined(OSFREE) +extern bool dbg_zero_on_dos_allocmem; +#endif +extern bool addovl; bool set_ver(char *s) { +#if !defined(OSFREE) s=trim(s); int major=isdigit(*s)?strtoul(s,(char**)(&s),10):-1; if (major>=0&&major<100) { @@ -3566,6 +3681,10 @@ bool set_ver(char *s) { } } return false; +#else + /* OSFREE: MS-DOS is not supposed to be here, you do not get to control this! */ + return true; +#endif } #define NUMBER_ANSI_DATA 10 @@ -4005,7 +4124,58 @@ static Bitu DOS_29Handler(void) return CBRET_NONE; } +void AddBPINT3(void); void IPX_Setup(Section*); +void DOS_SetupIHSEG(void); +void DOS_CreateDummyDeviceMCB(void); +void DOS_MemStartChange(uint16_t adjto); +void DOS_AllocMinFreePadding(uint16_t upto); + +void DOS_OpenDefaultHandles(void) { + /* open handles in SFT for CON, AUX, PRN */ + uint8_t devnum_con,devnum_aux,devnum_prn; + + /* SFT: 0 = AUX + * 1 = CON + * 2 = PRN + * + * JFT: 0 = CON (1) + * 1 = CON (1) + * 2 = CON (1) + * 3 = AUX (0) + * 4 = PRN (2) */ + + devnum_aux = DOS_FindDevice("AUX"); + devnum_con = DOS_FindDevice("CON"); + devnum_prn = DOS_FindDevice("PRN"); + + /* CON is REQUIRED */ + if (devnum_con >= DOS_DEVICES) E_Exit("Unable to locate CON device"); + + /* AUX and PRN can be CON if they do not exist */ + if (devnum_aux >= DOS_DEVICES) devnum_aux = devnum_con; + if (devnum_prn >= DOS_DEVICES) devnum_prn = devnum_con; + + /* make them happen */ + assert(Files[0] == NULL); Files[0] = new DOS_Device(*Devices[devnum_aux]); Files[0]->neverclose = true; + assert(Files[1] == NULL); Files[1] = new DOS_Device(*Devices[devnum_con]); Files[1]->neverclose = true; + assert(Files[2] == NULL); Files[2] = new DOS_Device(*Devices[devnum_prn]); Files[2]->neverclose = true; +} + +void DOS_ApplyMinMCBAndDummyDCB(void) { + if (minimum_mcb_segment != 0 && DOS_MEM_START < minimum_mcb_segment) DOS_MemStartChange(minimum_mcb_segment); + if (enable_dummy_device_mcb) DOS_CreateDummyDeviceMCB(); + DOS_AllocMinFreePadding(minimum_mcb_free); +} + +// buffer for block device I/O +unsigned int bdevbuf_sz = SECTOR_SIZE_MAX * 2u; +unsigned int bdevbuf_seg = 0; + +void InitBdevBuf(void) { + if (bdevbuf_seg == 0) + bdevbuf_seg = DOS_GetMemory(bdevbuf_sz >> 4u,"block device buffer"); +} class DOS:public Module_base{ private: @@ -4041,6 +4211,7 @@ class DOS:public Module_base{ dos.version.major = 5; dos.version.minor = 0; +#if !defined(OSFREE) const char *ver = section->Get_string("ver"); if (*ver) { if (set_ver((char *)ver)) { @@ -4056,6 +4227,7 @@ class DOS:public Module_base{ dos.version.major, dos.version.minor); } } +#endif ::disk_data_rate = section->Get_int("hard drive data rate limit"); ::floppy_data_rate = section->Get_int("floppy drive data rate limit"); @@ -4069,22 +4241,37 @@ class DOS:public Module_base{ ::floppy_data_rate = 22400; // 175 kbps } std::string prefix = section->Get_string("special operation file prefix"); +#if !defined(OSFREE) if (prefix.size()) prefix_local = prefix + prefix_local.substr(3), prefix_overlay = prefix + prefix_overlay.substr(3); +#endif + +#if !defined(OSFREE) + std::string exepack = section->Get_string("exepack"); + if (exepack == "none") + exepack_handling = EXEPACK_NONE; + else if (exepack == "a20off") + exepack_handling = EXEPACK_A20OFF; + else if (exepack == "unpack") + exepack_handling = EXEPACK_UNPACK; + else + exepack_handling = EXEPACK_UNPACK; +#endif maxfcb=100; DOS_FILES=200; +#if !defined(OSFREE) Section_prop *config_section = static_cast(control->GetSection("config")); if (config_section != NULL && !control->opt_noconfig && !control->opt_securemode && !control->SecureMode()) { DOS_FILES = (unsigned int)config_section->Get_int("files"); if (DOS_FILES==0) { - const unsigned int sz = std::min((unsigned int)MEM_TotalPages(),0xA0u); + const unsigned int sz = std::min((unsigned int)MEM_ConventionalPages(),0xA0u); DOS_FILES=5u + ((200u - 5u) * sz) / 0xA0u; } if (DOS_FILES<8) DOS_FILES=8; else if (DOS_FILES>255) DOS_FILES=255; maxfcb = (int)config_section->Get_int("fcbs"); if (maxfcb==0) { - const unsigned int sz = std::min((unsigned int)MEM_TotalPages(),0xA0u); + const unsigned int sz = std::min((unsigned int)MEM_ConventionalPages(),0xA0u); maxfcb=5u + ((100u - 5u) * sz) / 0xA0u; } if (maxfcb<1) maxfcb=1; @@ -4111,15 +4298,17 @@ class DOS:public Module_base{ dos.breakcheck=true; else if (!strcasecmp(dosbreak, "off")) dos.breakcheck=false; -#if defined(WIN32) +# if defined(WIN32) const char *numlock = config_section->Get_string("numlock"); if ((!strcasecmp(numlock, "off")&&startup_state_numlock) || (!strcasecmp(numlock, "on")&&!startup_state_numlock)) SetNumLock(); -#endif +# endif } +#endif LOG(LOG_MISC,LOG_DEBUG)("files=%u fcbs=%u",(unsigned int)DOS_FILES,(unsigned int)maxfcb); - char *r; -#if defined(WIN32) +#if !defined(OSFREE) + char *r; +# if defined(WIN32) unsigned int cp = GetACP(); const char *cstr = (control->opt_noconfig || !config_section) ? "" : (char *)config_section->Get_string("country"); r = (char *)strchr(cstr, ','); @@ -4128,9 +4317,14 @@ class DOS:public Module_base{ if (cp == 951 && chinasea) makeseacp951table(); tryconvertcp = (r==NULL || !*(r+1)) ? 1 : 2; } +# endif #endif +#if !defined(OSFREE) dos_sda_size = section->Get_int("dos sda size"); +#endif + dos_break_int3 = section->Get_bool("break on int3"); +#if !defined(OSFREE) freed_mcb_allocate_on_resize = section->Get_bool("resized free memory block becomes allocated"); shell_keyboard_flush = section->Get_bool("command shell flush keyboard buffer"); enable_network_redirector = section->Get_bool("network redirector"); @@ -4140,6 +4334,7 @@ class DOS:public Module_base{ enable_filenamechar = section->Get_bool("filenamechar"); file_access_tries = section->Get_int("file access tries"); dos_initial_hma_free = section->Get_int("hma free space"); + auto_repair_dos_psp_mcb_corruption = section->Get_bool("mcb corruption becomes application free memory"); minimum_mcb_free = section->Get_hex("minimum mcb free"); minimum_mcb_segment = section->Get_hex("minimum mcb segment"); private_segment_in_umb = section->Get_bool("private area in umb"); @@ -4235,9 +4430,11 @@ class DOS:public Module_base{ } if (file) fclose(file); } +#endif if (dos_initial_hma_free > 0x10000) dos_initial_hma_free = 0x10000; +#if !defined(OSFREE) std::string cpmcompat = section->Get_string("cpm compatibility mode"); if (cpmcompat == "") @@ -4253,9 +4450,12 @@ class DOS:public Module_base{ cpm_compat_mode = CPM_COMPAT_MSDOS5; /* MS-DOS 5.x is default */ else cpm_compat_mode = CPM_COMPAT_OFF; +#else + cpm_compat_mode = CPM_COMPAT_OFF; +#endif /* If memsize < 16KB then the only way DOS can work properly is to allocate in the UMB private area */ - if (MEM_TotalPages() < 4) { + if (MEM_ConventionalPages() < 4) { if (!private_always_from_umb) { private_always_from_umb = true; LOG(LOG_MISC,LOG_DEBUG)("Memory size < 16KB, allocating all DOS kernel structures in the private upper memory area"); @@ -4275,18 +4475,20 @@ class DOS:public Module_base{ else DOS_SDA_SEG_SIZE = (dos_sda_size + 0xF) & (~0xF); /* round up to paragraph */ +#if !defined(OSFREE) /* msdos 2.x and msdos 5.x modes, if HMA is involved, require us to take the first 256 bytes of HMA * in order for "F01D:FEF0" to work properly whether or not A20 is enabled. Our direct mode doesn't * jump through that address, and therefore doesn't need it. */ if (dos_in_hma && - cpm_compat_mode != CPM_COMPAT_OFF && - cpm_compat_mode != CPM_COMPAT_DIRECT) { + cpm_compat_mode != CPM_COMPAT_OFF && + cpm_compat_mode != CPM_COMPAT_DIRECT) { LOG(LOG_DOSMISC,LOG_DEBUG)("DOS: CP/M compatibility method with DOS in HMA requires mirror of entry point in HMA."); if (dos_initial_hma_free > 0xFF00) { dos_initial_hma_free = 0xFF00; LOG(LOG_DOSMISC,LOG_DEBUG)("DOS: CP/M compatibility method requires reduction of HMA free space to accommodate."); } } +#endif if ((int)MAXENV < 0) MAXENV = 65535; if ((int)ENV_KEEPFREE < 0) ENV_KEEPFREE = 1024; @@ -4296,9 +4498,11 @@ class DOS:public Module_base{ if (ENV_KEEPFREE < 83) LOG_MSG("DOS: ENV_KEEPFREE is below 83 bytes. DOS programs that rely on undocumented data following the environment block may break."); +#if !defined(OSFREE) if (dbg_zero_on_dos_allocmem) { LOG_MSG("Debug option enabled: INT 21h memory allocation will always clear memory block before returning\n"); } +#endif if (minimum_mcb_segment > 0x8000) minimum_mcb_segment = 0x8000; /* FIXME: Clip against available memory */ @@ -4306,7 +4510,7 @@ class DOS:public Module_base{ if (private_always_from_umb) { DOS_GetMemory_Choose(); /* the pool starts in UMB */ if (minimum_mcb_segment == 0) - DOS_MEM_START = IS_PC98_ARCH ? 0x80 : (MEM_TotalPages() >= 0x10/*64KB or more*/ ? 0x70 : 0x60); /* funny behavior in some games suggests the MS-DOS kernel loads a bit higher on PC-98 */ + DOS_MEM_START = IS_PC98_ARCH ? 0x80 : (MEM_ConventionalPages() >= 0x10/*64KB or more*/ ? 0x70 : 0x60); /* funny behavior in some games suggests the MS-DOS kernel loads a bit higher on PC-98 */ else DOS_MEM_START = minimum_mcb_segment; @@ -4323,7 +4527,7 @@ class DOS:public Module_base{ } else { if (minimum_dos_initial_private_segment == 0) - DOS_PRIVATE_SEGMENT = IS_PC98_ARCH ? 0x80 : (MEM_TotalPages() >= 0x10/*64KB or more*/ ? 0x70 : 0x60); /* funny behavior in some games suggests the MS-DOS kernel loads a bit higher on PC-98 */ + DOS_PRIVATE_SEGMENT = IS_PC98_ARCH ? 0x80 : (MEM_ConventionalPages() >= 0x10/*64KB or more*/ ? 0x70 : 0x60); /* funny behavior in some games suggests the MS-DOS kernel loads a bit higher on PC-98 */ else DOS_PRIVATE_SEGMENT = minimum_dos_initial_private_segment; @@ -4332,10 +4536,10 @@ class DOS:public Module_base{ if (DOS_PRIVATE_SEGMENT < 0x80 && IS_PC98_ARCH) LOG_MSG("DANGER, DANGER! DOS_PRIVATE_SEGMENT has been set too low for PC-98 emulation!"); - if (MEM_TotalPages() > 0x9C) + if (MEM_ConventionalPages() > 0x9C) DOS_PRIVATE_SEGMENT_END = 0x9C00; else - DOS_PRIVATE_SEGMENT_END = (uint16_t)((MEM_TotalPages() << (12 - 4)) - 1); /* NTS: Remember DOSBox's implementation reuses the last paragraph for UMB linkage */ + DOS_PRIVATE_SEGMENT_END = (uint16_t)((MEM_ConventionalPages() << (12 - 4)) - 1); /* NTS: Remember DOSBox's implementation reuses the last paragraph for UMB linkage */ } LOG(LOG_DOSMISC,LOG_DEBUG)("DOS kernel structures will be allocated from pool 0x%04x-0x%04x", @@ -4374,7 +4578,7 @@ class DOS:public Module_base{ LOG(LOG_DOSMISC,LOG_DEBUG)(" CDS: seg 0x%04x",DOS_CDS_SEG); LOG(LOG_DOSMISC,LOG_DEBUG)("[private segment @ this point 0x%04x-0x%04x mem=0x%04lx]", DOS_PRIVATE_SEGMENT,DOS_PRIVATE_SEGMENT_END, - (unsigned long)(MEM_TotalPages() << (12 - 4))); + (unsigned long)(MEM_ConventionalPages() << (12 - 4))); callback[0].Install(DOS_20Handler,CB_IRET,"DOS Int 20"); callback[0].Set_RealVec(0x20); @@ -4448,6 +4652,7 @@ class DOS:public Module_base{ // pushf // ... the rest is like int 21 +#if !defined(OSFREE) if (IS_PC98_ARCH) { /* Any interrupt vector pointing to the INT stub in the BIOS must be rewritten to point to a JMP to the stub * residing in the DOS segment (60h) because some PC-98 resident drivers use segment 60h as a check for @@ -4470,16 +4675,20 @@ class DOS:public Module_base{ mem_writed(i*4,vecp); } } +#endif +#if !defined(OSFREE) /* NTS: HMA support requires XMS. EMS support may switch on A20 if VCPI emulation requires the odd megabyte */ if ((!dos_in_hma || !section->Get_bool("xms")) && (MEM_A20_Enabled() || strcmp(section->Get_string("ems"),"false") != 0) && - cpm_compat_mode != CPM_COMPAT_OFF && cpm_compat_mode != CPM_COMPAT_DIRECT) { + cpm_compat_mode != CPM_COMPAT_OFF && cpm_compat_mode != CPM_COMPAT_DIRECT) { /* hold on, only if more than 1MB of RAM and memory access permits it */ if (MEM_TotalPages() > 0x100 && MEM_PageMask() > 0xff/*more than 20-bit decoding*/) { LOG(LOG_DOSMISC,LOG_WARN)("DOS not in HMA or XMS is disabled. This may break programs using the CP/M compatibility call method if the A20 gate is switched on."); } } +#endif + DOS_SetupIHSEG(); DOS_SetupFiles(); /* Setup system File tables */ DOS_SetupDevices(); /* Setup dos devices */ DOS_SetupTables(); @@ -4502,7 +4711,7 @@ class DOS:public Module_base{ DOS_MEM_START += (uint16_t)DOS_PRIVATE_SEGMENT_Size; segend = DOS_MEM_START; - if (segend >= (MEM_TotalPages() << (12 - 4))) + if (segend >= (MEM_ConventionalPages() << (12 - 4))) E_Exit("Insufficient room for private area"); DOS_PRIVATE_SEGMENT = seg; @@ -4514,16 +4723,12 @@ class DOS:public Module_base{ } } - if (minimum_mcb_segment != 0) { - if (DOS_MEM_START < minimum_mcb_segment) - DOS_MEM_START = minimum_mcb_segment; - } - - LOG(LOG_DOSMISC,LOG_DEBUG)(" mem start: seg 0x%04x",DOS_MEM_START); + LOG(LOG_DOSMISC,LOG_DEBUG)(" mem start: seg 0x%04x (initial)",DOS_MEM_START); /* carry on setup */ - DOS_SetupMemory(); /* Setup first MCB */ + DOS_SetupMemory(); /* Setup first MCB */ +#if !defined(OSFREE) /* NTS: The reason PC-98 has a higher minimum free is that the MS-DOS kernel * has a larger footprint in memory, including fixed locations that * some PC-98 games will read directly, and an ANSI driver. @@ -4552,7 +4757,7 @@ class DOS:public Module_base{ * 256KB amounts of memory, then minimum mcb free needs to be much * smaller to make room and allow for it */ if (minimum_mcb_free == 0) { - if (MEM_TotalPages() < 0x40/*256KB*/) + if (MEM_ConventionalPages() < 0x40/*256KB*/) minimum_mcb_free = minimum_mcb_segment; else minimum_mcb_free = IS_PC98_ARCH ? 0x800 : 0x700; @@ -4560,36 +4765,10 @@ class DOS:public Module_base{ else if (minimum_mcb_free < minimum_mcb_segment) { minimum_mcb_free = minimum_mcb_segment; } +#endif LOG(LOG_DOSMISC,LOG_DEBUG)(" min free: seg 0x%04x",minimum_mcb_free); - if (DOS_MEM_START < minimum_mcb_free) { - uint16_t sg=0,tmp; - - dos.psp(8); // DOS ownership - - tmp = 1; // start small - if (DOS_AllocateMemory(&sg,&tmp)) { - if (sg < minimum_mcb_free) { - LOG(LOG_DOSMISC,LOG_DEBUG)(" min free pad: seg 0x%04x",sg); - } - else { - DOS_FreeMemory(sg); - sg = 0; - } - } - else { - sg=0; - } - - if (sg != 0 && sg < minimum_mcb_free) { - tmp = minimum_mcb_free - sg; - if (!DOS_ResizeMemory(sg,&tmp)) { - LOG(LOG_DOSMISC,LOG_DEBUG)(" WARNING: cannot resize min free pad"); - } - } - } - #if C_IPX IPX_Setup(NULL); #endif @@ -4600,6 +4779,8 @@ class DOS:public Module_base{ DOS_SDA(DOS_SDA_SEG,DOS_SDA_OFS).SetDrive(25); /* Else the next call gives a warning. */ DOS_SetDefaultDrive(25); + DOS_OpenDefaultHandles(); + if (IS_JEGA_ARCH) { INT10_AX_SetCRTBIOSMode(0x51); INT16_AX_SetKBDBIOSMode(0x51); @@ -4612,44 +4793,57 @@ class DOS:public Module_base{ if(IS_DOSV) { #endif DOSV_Setup(); +#if !defined(OSFREE) if(IS_J3100 && j3100_start) { INT10_SetVideoMode(0x74); SetTrueVideoMode(0x74); } else if(IS_DOSV) { INT10_DOSV_SetCRTBIOSMode(0x03); } +#endif } +#if !defined(OSFREE) const char *keepstr = section->Get_string("keep private area on boot"); if (!strcasecmp(keepstr, "true")||!strcasecmp(keepstr, "1")) keep_private_area_on_boot = 1; else if (!strcasecmp(keepstr, "false")||!strcasecmp(keepstr, "0")) keep_private_area_on_boot = 0; else keep_private_area_on_boot = addovl; dos.direct_output=false; dos.internal_output=false; +#endif +#if !defined(OSFREE) std::string fat32setverstr = section->Get_string("fat32setversion"); if (fat32setverstr=="auto") fat32setver=1; else if (fat32setverstr=="manual") fat32setver=0; else fat32setver=-1; +#endif +#if !defined(OSFREE) std::string lfn = section->Get_string("lfn"); if (lfn=="true"||lfn=="1") enablelfn=1; else if (lfn=="false"||lfn=="0") enablelfn=0; else if (lfn=="autostart") enablelfn=-2; else enablelfn=-1; +#endif +#if !defined(OSFREE) force_conversion=true; mainMenu.get_item("dos_lfn_auto").check(enablelfn==-1).enable(true).refresh_item(mainMenu); mainMenu.get_item("dos_lfn_enable").check(enablelfn==1).enable(true).refresh_item(mainMenu); mainMenu.get_item("dos_lfn_disable").check(enablelfn==0).enable(true).refresh_item(mainMenu); force_conversion=false; +#endif +#if !defined(OSFREE) force_conversion=true; dos_ver_menu(true); mainMenu.get_item("dos_ver_edit").enable(true).refresh_item(mainMenu); update_dos_ems_menu(); force_conversion=false; +#endif +#if !defined(OSFREE) /* settings */ if (first_run) { const Section_prop * section=static_cast(control->GetSection("dos")); @@ -4661,6 +4855,8 @@ class DOS:public Module_base{ winautorun=startcmd; first_run=false; } +#endif + force_conversion=true; #if !defined(HX_DOS) mainMenu.get_item("mapper_quickrun").enable(true).refresh_item(mainMenu); @@ -4699,6 +4895,15 @@ class DOS:public Module_base{ #endif force_conversion=false; +#if C_DEBUG + if (dos_break_int3) { +#if C_DEBUG + LOG(LOG_MISC,LOG_DEBUG)("Adding INT 3 breakpoint"); + AddBPINT3(); +#endif + } +#endif + if (IS_PC98_ARCH) { void PC98_InitDefFuncRow(void); PC98_InitDefFuncRow(); @@ -4914,6 +5119,8 @@ void DOS_RescanAll(bool pressed) { } void DOS_Init() { + bdevbuf_seg = 0; + LOG(LOG_DOSMISC,LOG_DEBUG)("Initializing DOS kernel (DOS_Init)"); LOG(LOG_DOSMISC,LOG_DEBUG)("sizeof(union bootSector) = %u",(unsigned int)sizeof(union bootSector)); LOG(LOG_DOSMISC,LOG_DEBUG)("sizeof(struct FAT_BootSector) = %u",(unsigned int)sizeof(struct FAT_BootSector)); @@ -4938,6 +5145,7 @@ void DOS_Init() { for (char drv='A';drv <= 'Z';drv++) DOS_EnableDriveMenu(drv); } +#if !defined(OSFREE) void DOS_Int21_7139(char *name1, const char *name2) { (void)name2; MEM_StrCopy(SegPhys(ds)+reg_dx,name1+1,DOSNAMEBUF); @@ -4954,7 +5162,9 @@ void DOS_Int21_7139(char *name1, const char *name2) { CALLBACK_SCF(true); } } +#endif +#if !defined(OSFREE) void DOS_Int21_713a(char *name1, const char *name2) { (void)name2; MEM_StrCopy(SegPhys(ds)+reg_dx,name1+1,DOSNAMEBUF); @@ -4972,7 +5182,9 @@ void DOS_Int21_713a(char *name1, const char *name2) { LOG(LOG_DOSMISC,LOG_NORMAL)("Remove dir failed on %s with error %X",name1,dos.errorcode); } } +#endif +#if !defined(OSFREE) void DOS_Int21_713b(char *name1, const char *name2) { (void)name2; MEM_StrCopy(SegPhys(ds)+reg_dx,name1+1,DOSNAMEBUF); @@ -4989,7 +5201,9 @@ void DOS_Int21_713b(char *name1, const char *name2) { CALLBACK_SCF(true); } } +#endif +#if !defined(OSFREE) void DOS_Int21_7141(char *name1, const char *name2) { (void)name2; MEM_StrCopy(SegPhys(ds)+reg_dx,name1+1,DOSNAMEBUF); @@ -5006,7 +5220,9 @@ void DOS_Int21_7141(char *name1, const char *name2) { CALLBACK_SCF(true); } } +#endif +#if !defined(OSFREE) void DOS_Int21_7143(char *name1, const char *name2) { (void)name2; MEM_StrCopy(SegPhys(ds)+reg_dx,name1+1,DOSNAMEBUF); @@ -5120,7 +5336,9 @@ void DOS_Int21_7143(char *name1, const char *name2) { E_Exit("DOS:Illegal LFN Attr call %2X",reg_bl); } } +#endif +#if !defined(OSFREE) void DOS_Int21_7147(char *name1, const char *name2) { (void)name2; DOS_PSP psp(dos.psp()); @@ -5135,7 +5353,9 @@ void DOS_Int21_7147(char *name1, const char *name2) { CALLBACK_SCF(true); } } +#endif +#if !defined(OSFREE) void DOS_Int21_714e(char *name1, char *name2) { MEM_StrCopy(SegPhys(ds)+reg_dx,name1+1,DOSNAMEBUF); *name1='\"'; @@ -5207,7 +5427,9 @@ void DOS_Int21_714e(char *name1, char *name2) { CALLBACK_SCF(true); } } +#endif +#if !defined(OSFREE) void DOS_Int21_714f(const char *name1, const char *name2) { (void)name1; (void)name2; @@ -5232,7 +5454,9 @@ void DOS_Int21_714f(const char *name1, const char *name2) { } lfn_filefind_handle=LFN_FILEFIND_NONE; } +#endif +#if !defined(OSFREE) void DOS_Int21_7156(char *name1, char *name2) { MEM_StrCopy(SegPhys(ds)+reg_dx,name1+1,DOSNAMEBUF); *name1='\"'; @@ -5254,7 +5478,9 @@ void DOS_Int21_7156(char *name1, char *name2) { CALLBACK_SCF(true); } } +#endif +#if !defined(OSFREE) void DOS_Int21_7160(char *name1, char *name2) { MEM_StrCopy(SegPhys(ds)+reg_si,name1+1,DOSNAMEBUF); if (*(name1+1)>=0 && *(name1+1)<32) { @@ -5316,7 +5542,9 @@ void DOS_Int21_7160(char *name1, char *name2) { CALLBACK_SCF(true); } } +#endif +#if !defined(OSFREE) void DOS_Int21_716c(char *name1, const char *name2) { (void)name2; MEM_StrCopy(SegPhys(ds)+reg_si,name1+1,DOSNAMEBUF); @@ -5332,7 +5560,9 @@ void DOS_Int21_716c(char *name1, const char *name2) { CALLBACK_SCF(true); } } +#endif +#if !defined(OSFREE) void DOS_Int21_71a0(char *name1, char *name2) { /* NTS: Windows Millennium Edition's SETUP program will make this LFN call to * canonicalize "C:", except the protected mode kernel does not translate @@ -5371,7 +5601,9 @@ void DOS_Int21_71a0(char *name1, char *name2) { CALLBACK_SCF(true); } } +#endif +#if !defined(OSFREE) void DOS_Int21_71a1(const char *name1, const char *name2) { (void)name1; (void)name2; @@ -5391,6 +5623,7 @@ void DOS_Int21_71a1(const char *name1, const char *name2) { reg_ax=0; CALLBACK_SCF(false); } +#endif void set_dword(char *buff, uint32_t data) { @@ -5403,6 +5636,7 @@ void set_dword(char *buff, uint32_t data) *buff = (char)data; } +#if !defined(OSFREE) void DOS_Int21_71a6(const char *name1, const char *name2) { (void)name1; (void)name2; @@ -5482,7 +5716,9 @@ void DOS_Int21_71a6(const char *name1, const char *name2) { CALLBACK_SCF(true); } } +#endif +#if !defined(OSFREE) void DOS_Int21_71a7(const char *name1, const char *name2) { (void)name1; (void)name2; @@ -5522,7 +5758,9 @@ void DOS_Int21_71a7(const char *name1, const char *name2) { E_Exit("DOS:Illegal LFN TimeConv call %2X",reg_bl); } } +#endif +#if !defined(OSFREE) void DOS_Int21_71a8(char* name1, const char* name2) { (void)name2; if (reg_dh == 0 || reg_dh == 1) { @@ -5563,7 +5801,9 @@ void DOS_Int21_71a8(char* name1, const char* name2) { CALLBACK_SCF(true); } } +#endif +#if !defined(OSFREE) void DOS_Int21_71aa(char* name1, const char* name2) { (void)name2; if (reg_bh<3 && (reg_bl<1 || reg_bl>26)) { @@ -5639,6 +5879,7 @@ void DOS_Int21_71aa(char* name1, const char* name2) { E_Exit("DOS:Illegal LFN Subst call %2X",reg_bh); } } +#endif //save state support extern void POD_Save_DOS_Devices( std::ostream& stream ); diff --git a/src/dos/dos_classes.cpp b/src/dos/dos_classes.cpp index 69e1dcf7d19..32524df9e98 100644 --- a/src/dos/dos_classes.cpp +++ b/src/dos/dos_classes.cpp @@ -168,6 +168,10 @@ void DOS_InfoBlock::SetLocation(uint16_t segment) { real_writew(tbl2_seg,0x04,DOS_FILES-5); } +uint16_t DOS_InfoBlock::GetFirstMCB(void) { + return (uint16_t)sGet(sDIB,firstMCB); +} + void DOS_InfoBlock::SetFirstMCB(uint16_t _firstmcb) { sSave(sDIB,firstMCB,_firstmcb); //c2woody } @@ -225,6 +229,9 @@ uint32_t DOS_InfoBlock::GetDeviceChain(void) { return sGet(sDIB,nulNextDriver); } +uint32_t DOS_InfoBlock::GetStartOfDeviceChain(void) { + return RealMake(seg,offsetof(sDIB,nulNextDriver)); +} /* program Segment prefix */ @@ -361,20 +368,20 @@ void DOS_PSP::CopyFileTable(DOS_PSP* srcpsp,bool createchildpsp) { } void DOS_PSP::CloseFile(const char *name) { + // FIXME: This code assumes dos.psp() == this PSP segment for (uint16_t i=0;iname, name)) { - if (Files[handle]->IsOpen()) Files[handle]->open = false; - Files[handle] = NULL; - return; - } + uint32_t handle = RealHandle(i); + if (handlename, name)) { + DOS_CloseFile(i); + return; + } } } void DOS_PSP::CloseFiles(void) { - for (uint16_t i=0;i 8) ? 8 : (Bitu)strlen(pattern)); } - if(_sattr == DOS_ATTR_VOLUME) { - MEM_BlockWrite(pt+offsetof(sDTA, spext),&pattern[8],3); - } } void DOS_DTA::SetResult(const char * _name, const char * _lname, uint32_t _size,uint32_t _hsize,uint16_t _date,uint16_t _time,uint8_t _attr) { @@ -550,16 +554,9 @@ void DOS_DTA::GetSearchParams(uint8_t & attr,char * pattern, bool lfn) { char temp[11]; MEM_BlockRead(pt+offsetof(sDTA,spname),temp,11); for (int i=0;i<13;i++) pattern[i]=0; - if(attr == DOS_ATTR_VOLUME) - { - memcpy(pattern, temp, 11); - } - else - { memcpy(pattern,temp,8); pattern[strlen(pattern)]='.'; memcpy(&pattern[strlen(pattern)],&temp[8],3); - } } } diff --git a/src/dos/dos_codepages.h b/src/dos/dos_codepages.h index 6fa193e1550..6115c323635 100644 --- a/src/dos/dos_codepages.h +++ b/src/dos/dos_codepages.h @@ -29,6 +29,7 @@ http://upx.sourceforge.net */ +#if !defined(OSFREE) static const unsigned char bin_EGA_CPX[] = { 0x81,0xFC,0xCE,0xE7,0x77,0x02,0xCD,0x20,0xB9,0x40,0x19, 0xBE,0x40,0x1A,0xBF,0x6E,0xE7,0xBB,0x00,0x80,0xFD,0xF3, @@ -12436,6 +12437,7 @@ struct BuiltinFileBlob bfb_EGA18_CPI = { /*data*/ bin_EGA18_CPI, /*length*/ sizeof(bin_EGA18_CPI) }; +#endif #if 0 static const unsigned char bin_EGA18_CPX[] = { @@ -12915,4 +12917,4 @@ struct BuiltinFileBlob bfb_EGA18_CPX = { /*data*/ bin_EGA18_CPX, /*length*/ sizeof(bin_EGA18_CPX) }; -#endif \ No newline at end of file +#endif diff --git a/src/dos/dos_devices.cpp b/src/dos/dos_devices.cpp index 30d950f8cbc..b45d65dff43 100644 --- a/src/dos/dos_devices.cpp +++ b/src/dos/dos_devices.cpp @@ -32,6 +32,8 @@ #include "render.h" /* Include all the devices */ +unsigned int BeepDuration(); + #include "dev_con.h" #include @@ -46,7 +48,9 @@ extern int dos_clipboard_device_access; extern bool morelen, halfwidthkana, showdbcs; extern const char * dos_clipboard_device_name; bool isDBCSCP(), shiftjis_lead_byte(int c); +#if !defined(OSFREE) bool Network_IsNetworkResource(const char * filename), TTF_using(void); +#endif bool CodePageGuestToHostUTF16(uint16_t *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*/); @@ -57,8 +61,10 @@ bool DOS_ExtDevice::CheckSameDevice(uint16_t seg, uint16_t s_off, uint16_t i_off return false; } -uint16_t DOS_ExtDevice::CallDeviceFunction(uint8_t command, uint8_t length, uint16_t seg, uint16_t offset, uint16_t size) { +/* This function is optimized for use with read/write and ioctl read/write commands for character devices */ +uint16_t DOS_ExtDevice::CallRWIODeviceFunction(uint8_t command, uint8_t length, uint16_t seg, uint16_t offset, uint16_t size) { uint16_t oldbx = reg_bx; + uint16_t oldds = SegValue(ds); uint16_t oldes = SegValue(es); real_writeb(dos.dcp, 0, length); @@ -67,17 +73,21 @@ uint16_t DOS_ExtDevice::CallDeviceFunction(uint8_t command, uint8_t length, uint real_writew(dos.dcp, 3, 0); real_writed(dos.dcp, 5, 0); real_writed(dos.dcp, 9, 0); - real_writeb(dos.dcp, 13, 0); - real_writew(dos.dcp, 14, offset); - real_writew(dos.dcp, 16, seg); - real_writew(dos.dcp, 18, size); + if (length >= 20) { // this code is used below for input/output status which does not use these fields + real_writeb(dos.dcp, 13, 0); + real_writew(dos.dcp, 14, offset); + real_writew(dos.dcp, 16, seg); + real_writew(dos.dcp, 18, size); + } reg_bx = 0; + SegSet16(ds, ext.segment); SegSet16(es, dos.dcp); CALLBACK_RunRealFar(ext.segment, ext.strategy); CALLBACK_RunRealFar(ext.segment, ext.interrupt); reg_bx = oldbx; SegSet16(es, oldes); + SegSet16(ds, oldds); return real_readw(dos.dcp, 3); } @@ -85,7 +95,7 @@ uint16_t DOS_ExtDevice::CallDeviceFunction(uint8_t command, uint8_t length, uint bool DOS_ExtDevice::ReadFromControlChannel(PhysPt bufptr,uint16_t size,uint16_t * retcode) { if(ext.attribute & DeviceAttributeFlags::SupportsIoctl) { // IOCTL INPUT - if((CallDeviceFunction(3, 26, (uint16_t)(bufptr >> 4), (uint16_t)(bufptr & 0x000f), size) & 0x8000) == 0) { + if((CallRWIODeviceFunction(DEVFUNC_IOCTL_READ, 26, (uint16_t)(bufptr >> 4), (uint16_t)(bufptr & 0x000f), size) & 0x8000) == 0) { *retcode = real_readw(dos.dcp, 18); return true; } @@ -96,7 +106,7 @@ bool DOS_ExtDevice::ReadFromControlChannel(PhysPt bufptr,uint16_t size,uint16_t bool DOS_ExtDevice::WriteToControlChannel(PhysPt bufptr,uint16_t size,uint16_t * retcode) { if(ext.attribute & DeviceAttributeFlags::SupportsIoctl) { // IOCTL OUTPUT - if((CallDeviceFunction(12, 26, (uint16_t)(bufptr >> 4), (uint16_t)(bufptr & 0x000f), size) & 0x8000) == 0) { + if((CallRWIODeviceFunction(DEVFUNC_IOCTL_WRITE, 26, (uint16_t)(bufptr >> 4), (uint16_t)(bufptr & 0x000f), size) & 0x8000) == 0) { *retcode = real_readw(dos.dcp, 18); return true; } @@ -105,36 +115,100 @@ bool DOS_ExtDevice::WriteToControlChannel(PhysPt bufptr,uint16_t size,uint16_t * } bool DOS_ExtDevice::Read(uint8_t * data,uint16_t * size) { - PhysPt bufptr = (dos.dcp << 4) | 32; - for(uint16_t no = 0 ; no < *size ; no++) { - // INPUT - if(CallDeviceFunction(4, 26, dos.dcp + 2, 0, 1) & 0x8000) { + PhysPt bufptr = (dos.dcp << 4) + 32; + + if (dos.dcp_size_seg <= 2) return false; + + unsigned int batch_size = (dos.dcp_size_seg - 2) << 4; + unsigned int todo = *size; + unsigned int done = 0; + unsigned int rd; + + const auto inproc = [bufptr, &todo, &done, &rd, &data, this](const unsigned int batch_size) { + rd = 0; + + if (CallRWIODeviceFunction(DEVFUNC_READ, 26, dos.dcp + 2/*2 paras = 32 bytes*/, 0, batch_size) & 0x8000/*error*/) + return; + + rd = real_readw(dos.dcp, 18);/*how much was read?*/ + if (rd > batch_size) { + LOG(LOG_MISC,LOG_DEBUG)("Device driver read too much data!"); + rd = 0; + return; + } + for (unsigned int c=0;c < rd;c++) data[c] = mem_readb(bufptr+c); + todo -= rd; + data += rd; + done += rd; + }; + + while (todo >= batch_size) { + inproc(batch_size); + if (rd != batch_size) { + *size = done; + return false; + } + } + + if (todo != 0) { + inproc(todo); + if (rd != todo) { + *size = done; return false; - } else { - if(real_readw(dos.dcp, 18) != 1) { - return false; - } - *data++ = mem_readb(bufptr); } } + + *size = done; return true; } bool DOS_ExtDevice::Write(const uint8_t * data,uint16_t * size) { - PhysPt bufptr = (dos.dcp << 4) | 32; - for(uint16_t no = 0 ; no < *size ; no++) { - mem_writeb(bufptr, *data); - // OUTPUT - if(CallDeviceFunction(8, 26, dos.dcp + 2, 0, 1) & 0x8000) { + PhysPt bufptr = (dos.dcp << 4) + 32; + + if (dos.dcp_size_seg <= 2) return false; + + unsigned int batch_size = (dos.dcp_size_seg - 2) << 4; + unsigned int todo = *size; + unsigned int done = 0; + unsigned int wd; + + const auto inproc = [bufptr, &todo, &done, &wd, &data, this](const unsigned int batch_size) { + wd = 0; + + for (unsigned int c=0;c < batch_size;c++) mem_writeb(bufptr+c,data[c]); + if (CallRWIODeviceFunction(DEVFUNC_WRITE, 26, dos.dcp + 2/*2 paras = 32 bytes*/, 0, batch_size) & 0x8000/*error*/) + return; + + wd = real_readw(dos.dcp, 18);/*how much was written?*/ + if (wd > batch_size) { + LOG(LOG_MISC,LOG_DEBUG)("Device driver wrote too much data!"); + wd = 0; + return; + } + todo -= wd; + data += wd; + done += wd; + }; + + while (todo >= batch_size) { + inproc(batch_size); + if (wd != batch_size) { + *size = done; return false; - } else { - if(real_readw(dos.dcp, 18) != 1) { - return false; - } } - data++; } + + if (todo != 0) { + inproc(todo); + if (wd != todo) { + *size = done; + return false; + } + } + + *size = done; return true; + } bool DOS_ExtDevice::Close() { @@ -142,13 +216,13 @@ bool DOS_ExtDevice::Close() { } bool DOS_ExtDevice::Seek(uint32_t * pos,uint32_t type) { - (void)pos;//UNUSED - (void)type;//UNUSED + (void)pos;//UNUSED + (void)type;//UNUSED return true; } uint16_t DOS_ExtDevice::GetInformation(void) { - uint16_t ret = EXT_DEVICE_BIT; + uint16_t ret = DeviceInfoFlags::ExternalDevice; if (ext.attribute & DeviceAttributeFlags::CharacterDevice) ret |= DeviceInfoFlags::Device; if (ext.attribute & DeviceAttributeFlags::SupportsIoctl) ret |= DeviceInfoFlags::IoctlSupport; if (ext.attribute & DeviceAttributeFlags::SupportsRemovable) ret |= DeviceInfoFlags::OpenCloseSupport; @@ -159,11 +233,11 @@ uint16_t DOS_ExtDevice::GetInformation(void) { uint8_t DOS_ExtDevice::GetStatus(bool input_flag) { uint16_t status; if(input_flag) { - // NON-DESTRUCTIVE INPUT NO WAIT - status = CallDeviceFunction(5, 14, 0, 0, 0); + // INPUT STATUS + status = CallRWIODeviceFunction(DEVFUNC_INPUT_STATUS, 13, 0, 0, 0); } else { // OUTPUT STATUS - status = CallDeviceFunction(10, 13, 0, 0, 0); + status = CallRWIODeviceFunction(DEVFUNC_OUTPUT_STATUS, 13, 0, 0, 0); } // check NO ERROR & BUSY if((status & 0x8200) == 0) { @@ -173,7 +247,7 @@ uint8_t DOS_ExtDevice::GetStatus(bool input_flag) { } uint32_t DOS_CheckExtDevice(const char *name, bool already_flag) { - uint32_t addr = dos_infoblock.GetDeviceChain(); + uint32_t addr = dos_infoblock.GetStartOfDeviceChain(); uint16_t seg, off; uint16_t next_seg, next_off; uint16_t no; @@ -185,9 +259,6 @@ uint32_t DOS_CheckExtDevice(const char *name, bool already_flag) { no = real_readw(seg, off + 4); next_seg = real_readw(seg, off + 2); next_off = real_readw(seg, off); - if(next_seg == 0xffff && next_off == 0xffff) { - break; - } if(no & 0x8000) { for(no = 0 ; no < 8 ; no++) { if((devname[no] = real_readb(seg, off + 10 + no)) <= 0x20) { @@ -200,7 +271,7 @@ uint32_t DOS_CheckExtDevice(const char *name, bool already_flag) { if(already_flag) { for(no = 0 ; no < DOS_DEVICES ; no++) { if(Devices[no]) { - if(Devices[no]->GetInformation() & EXT_DEVICE_BIT) { + if(Devices[no]->GetInformation() & DeviceInfoFlags::ExternalDevice) { if(((DOS_ExtDevice *)Devices[no])->CheckSameDevice(seg, real_readw(seg, off + 6), real_readw(seg, off + 8))) { return 0; } @@ -215,6 +286,9 @@ uint32_t DOS_CheckExtDevice(const char *name, bool already_flag) { return (uint32_t)seg << 16 | (uint32_t)off; } } + if(next_seg == 0xffff && next_off == 0xffff) { + break; + } seg = next_seg; off = next_off; } @@ -225,6 +299,7 @@ static void DOS_CheckOpenExtDevice(const char *name) { uint32_t addr; if((addr = DOS_CheckExtDevice(name, true)) != 0) { + LOG(LOG_MISC,LOG_DEBUG)("Found external device driver '%s' (%x:%x), adding", name, addr >> 16, addr & 0xffff); DOS_ExtDevice *device = new DOS_ExtDevice(name, addr >> 16, addr & 0xffff); DOS_AddDevice(device); } @@ -257,6 +332,7 @@ class device_NUL : public DOS_Device { bool WriteToControlChannel(PhysPt bufptr,uint16_t size,uint16_t * retcode) override { (void)bufptr; (void)size; (void)retcode; return false; } }; +#if !defined(OSFREE) class device_PRN : public DOS_Device { public: device_PRN() { @@ -293,6 +369,7 @@ class device_PRN : public DOS_Device { return false; } }; +#endif uint16_t cpMap[512] = { // Codepage is standard 437 0x0020, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2219, 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c, @@ -366,6 +443,7 @@ uint16_t cpMap_PC98[256] = { 0x0020, 0x0020, 0x0020, 0x0020, 0x005C, 0x0020, 0x0020, 0x0020 // 0xF8-0xFF 0xFC = Backslash }; +#if !defined(OSFREE) bool getClipboard(); bool lastwrite = false; uint32_t cPointer = 0, fPointer; @@ -620,6 +698,7 @@ class device_CLIP : public DOS_Device { return DeviceInfoFlags::Device | DeviceInfoFlags::EofOnInput | DeviceInfoFlags::Binary; } }; +#endif bool DOS_Device::Read(uint8_t * data,uint16_t * size) { return Devices[devnum]->Read(data,size); @@ -652,7 +731,7 @@ uint16_t DOS_Device::GetInformation(void) { } void DOS_Device::SetInformation(uint16_t info) { - if(Devices[devnum]->IsName("CON") && !(Devices[devnum]->GetInformation() & EXT_DEVICE_BIT)) { + if(Devices[devnum]->IsName("CON") && !(Devices[devnum]->GetInformation() & DeviceInfoFlags::ExternalDevice)) { Devices[devnum]->SetInformation(info); } } @@ -667,7 +746,7 @@ bool DOS_Device::WriteToControlChannel(PhysPt bufptr,uint16_t size,uint16_t * re uint8_t DOS_Device::GetStatus(bool input_flag) { uint16_t info = Devices[devnum]->GetInformation(); - if(info & EXT_DEVICE_BIT) { + if(info & DeviceInfoFlags::ExternalDevice) { return Devices[devnum]->GetStatus(input_flag); } return (info & DeviceInfoFlags::EofOnInput) ? 0x00 : 0xff; @@ -731,9 +810,11 @@ uint8_t DOS_FindDevice(char const * name) { } char* name_part = strrchr_dbcs(fullname,'\\'); #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if(Network_IsNetworkResource(name)) + #if !defined(OSFREE) + if(Network_IsNetworkResource(name)) name_part = fullname; else + #endif #endif if(name_part) { *name_part++ = 0; @@ -747,11 +828,12 @@ uint8_t DOS_FindDevice(char const * name) { DOS_CheckOpenExtDevice(name_part); for(int index = DOS_DEVICES - 1 ; index >= 0 ; index--) { if(Devices[index]) { - if(Devices[index]->GetInformation() & EXT_DEVICE_BIT) { + if(Devices[index]->GetInformation() & DeviceInfoFlags::ExternalDevice) { if(WildFileCmp(name_part, Devices[index]->name)) { if(DOS_CheckExtDevice(name_part, false) != 0) { return index; } else { + LOG(LOG_MISC,LOG_DEBUG)("Remove external device driver '%s', no longer in the device chain",name); delete Devices[index]; Devices[index] = nullptr; break; @@ -911,14 +993,18 @@ void DOS_SetupDevices(void) { DOS_Device * newdev2; newdev2=new device_NUL(); DOS_AddDevice(newdev2); +#if !defined(OSFREE) DOS_Device * newdev3; newdev3=new device_PRN(); DOS_AddDevice(newdev3); +#endif +#if !defined(OSFREE) if (dos_clipboard_device_access) { DOS_Device * newdev4; newdev4=new device_CLIP(); DOS_AddDevice(newdev4); } +#endif } /* PC-98 INT DC CL=0x10 AH=0x00 DL=cjar */ diff --git a/src/dos/dos_execute.cpp b/src/dos/dos_execute.cpp index 0a08a212c86..fb7eeb74bbd 100644 --- a/src/dos/dos_execute.cpp +++ b/src/dos/dos_execute.cpp @@ -30,12 +30,23 @@ #include "cpu.h" #include "menu.h" #include "crc32.h" +#if defined(OSFREE) +#include "exepack.h" +#include "exepackv1.h" +#include "exepackv2.h" +#include "exepackv3.h" +#include "exepackv4.h" +#endif +#if defined(OSFREE) extern bool xms_init; extern bool a20_off_if_loading_low; +#endif +#if defined(OSFREE) Bitu XMS_EnableA20(bool enable); Bitu XMS_GetEnabledA20(void); +#endif uint32_t RunningProgramHash[4] = {0,0,0,0}; uint32_t RunningProgramLoadAddress = 0; @@ -139,6 +150,8 @@ void DOS_Terminate(uint16_t pspseg,bool tsr,uint8_t exitcode) { if (!tsr) DOS_FreeProcessMemory(pspseg); DOS_UpdatePSPName(); + dos.errorcode=0; + if ((!(CPU_AutoDetermineMode>>CPU_AUTODETERMINE_SHIFT)) || (cpu.pmode)) return; CPU_AutoDetermineMode>>=CPU_AUTODETERMINE_SHIFT; @@ -156,8 +169,8 @@ void DOS_Terminate(uint16_t pspseg,bool tsr,uint8_t exitcode) { #if (C_DYNAMIC_X86) || (C_DYNREC) if (CPU_AutoDetermineMode&CPU_AUTODETERMINE_CORE) { cpudecoder=&CPU_Core_Normal_Run; - mainMenu.get_item("mapper_normal").check(true).refresh_item(mainMenu); - mainMenu.get_item("mapper_dynamic").check(false).refresh_item(mainMenu); + mainMenu.get_item("mapper_normal").check(true).refresh_item(mainMenu); + mainMenu.get_item("mapper_dynamic").check(false).refresh_item(mainMenu); CPU_CycleLeft=0; CPU_Cycles=0; } @@ -280,18 +293,48 @@ static void SetupCMDLine(uint16_t pspseg, const DOS_ParamBlock& block) { * shell without any error message. The least we could do is return * an error code so that the INT 21h EXEC call can print an informative * error message! --J.C. */ -bool DOS_Execute(const char* name, PhysPt block_pt, uint8_t flags) { +bool DOS_Execute(const char* name, PhysPt block_pt, uint16_t flags) { EXE_Header head;Bitu i; uint16_t fhandle;uint16_t len;uint32_t pos; uint16_t pspseg,envseg,loadseg,memsize=0xffff,readsize; uint16_t maxsize,maxfree=0xffff; PhysPt loadaddress;RealPt relocpt; - uint32_t headersize = 0, imagesize = 0; + uint32_t headersize = 0, imagesize = 0,memimagesize = 0; DOS_ParamBlock block(block_pt); uint32_t checksum = 0; uint32_t checksum_bytes = 0; - block.LoadData(); + /* OVERLAY: if the resident image extends past this point, fail. */ + /* This is only meaningful for the internal DOSEXEC_DEVICEDRIVER flag. + * Normal OVERLAY load doesn't range check at all, which is why the default is 0xFFFF! */ + uint16_t segment_max=0xFFFF; + + // FIXME: This code works but there is no file I/O error checking! + // If it reads a truncated EXE or file I/O somehow fails while loading, + // this code will carry on and possibly execute erroneous code! + + // NTS: Confirmed from MS-DOS 4.0 source code: OVERLAY load will blindly load the EXE image to whatever + // segment it is told to. It does not check that there is enough memory there. It does not check whether + // it overruns one MCB into another. That would explain why some games that rely on overlay loading + // tend to crash if there is insufficient memory. + // + // You'd think that if the OVERLAY mode passed along a structure that Microsoft would have added + // fields in a backwards compatible way to give OVERLAY loading a segment limit value it could use + // to determine if there is enough memory! + + if (flags == DOSEXEC_DEVICEDRIVER) {/*Internal value. DOS programs cannot pass this through INT 21h*/ + /* block_pt is two 16-bit values: + * low WORD is relocation segment value. + * hi WORD is the highest segment of valid memory + 1 (boundary) so this function can identify if the image is too big + * Take the values and then process loading as if OVERLAY */ + block.overlay.loadseg = block_pt & 0xFFFFu; + block.overlay.relocation = block_pt & 0xFFFFu; + segment_max = block_pt >> 16u; + flags = OVERLAY; + } + else { + block.LoadData(); + } //Remove the loadhigh flag for the moment! if(flags&0x80) LOG(LOG_EXEC,LOG_ERROR)("using loadhigh flag!!!!!. dropping it"); flags &= 0x7f; @@ -303,17 +346,20 @@ bool DOS_Execute(const char* name, PhysPt block_pt, uint8_t flags) { /* Check for EXE or COM File */ bool iscom=false; if (!DOS_OpenFile(name,OPEN_READ,&fhandle)) { - int16_t fLen = (int16_t)strlen(name); - bool shellcom =(!strcasecmp(name+fLen-8, "4DOS.COM") && (fLen == 8 || *(name+fLen-9)=='\\')) || (!strcasecmp(name+fLen-11, "COMMAND.COM") && (fLen == 11 || *(name+fLen-12)=='\\')); // Trap 4DOS.COM and COMMAND.COM - char z4dos[]="Z:\\4DOS\\4DOS.COM", zcmd[]="Z:\\COMMAND.COM"; - if (ZDRIVE_NUM!=25) { - z4dos[0]='A'+ZDRIVE_NUM; - zcmd[0]='A'+ZDRIVE_NUM; - } - if (!shellcom || !DOS_OpenFile(!strcasecmp(name+fLen-8, "4DOS.COM")?z4dos:zcmd,OPEN_READ,&fhandle)) { - DOS_SetError(DOSERR_FILE_NOT_FOUND); - return false; - } + int16_t fLen = (int16_t)strlen(name); + bool shellcom =(!strcasecmp(name+fLen-8, "4DOS.COM") && (fLen == 8 || *(name+fLen-9)=='\\')) || (!strcasecmp(name+fLen-11, "COMMAND.COM") && (fLen == 11 || *(name+fLen-12)=='\\')); // Trap 4DOS.COM and COMMAND.COM + char z4dos[]="Z:\\4DOS\\4DOS.COM", zcmd[]="Z:\\COMMAND.COM"; + if (ZDRIVE_NUM!=25) { + z4dos[0]='A'+ZDRIVE_NUM; + zcmd[0]='A'+ZDRIVE_NUM; + } + if (dos.errorcode == DOSERR_ACCESS_DENIED) { + return false; + } + if (!shellcom || !DOS_OpenFile(!strcasecmp(name+fLen-8, "4DOS.COM")?z4dos:zcmd,OPEN_READ,&fhandle)) { + DOS_SetError(DOSERR_FILE_NOT_FOUND); + return false; + } } len=sizeof(EXE_Header); if (!DOS_ReadFile(fhandle,(uint8_t *)&head,&len)) { @@ -342,7 +388,7 @@ bool DOS_Execute(const char* name, PhysPt block_pt, uint8_t flags) { LOG(LOG_EXEC,LOG_NORMAL)("Weird header: head.pages > 1 MB"); head.pages&=0x07ffu; headersize = head.headersize*16u; - imagesize = head.pages*512u-headersize; + imagesize = memimagesize = head.pages*512u-headersize; if (imagesize+headersize<512u) imagesize = 512u-headersize; } } @@ -380,17 +426,17 @@ bool DOS_Execute(const char* name, PhysPt block_pt, uint8_t flags) { if (head.maxmemory!=0) maxsize=long2para(imagesize+((unsigned int)head.maxmemory<<4u)+256u); else maxsize=0xffffu; - /* Bugfix: scene.org mirrors/hornet/demos/1991/putrefac.zip Putrefaction !PF.{3} - * has an EXE header that specifies a maxsize less than minsize, and a - * initial stack pointer that is only valid if we use the maxsize. - * - * This allows it to run without the SS:IP out of range error below. */ - if (maxsize < minsize) maxsize = minsize; + /* Bugfix: scene.org mirrors/hornet/demos/1991/putrefac.zip Putrefaction !PF.{3} + * has an EXE header that specifies a maxsize less than minsize, and a + * initial stack pointer that is only valid if we use the maxsize. + * + * This allows it to run without the SS:IP out of range error below. */ + if (maxsize < minsize) maxsize = minsize; } maxfree = DOS_GetMaximumFreeSize(minsize); if (maxfree ((uint32_t)segment_max << 4u)) { + LOG(LOG_MISC,LOG_WARN)("EXEC OVERLAY: Insufficient memory to load executable image into memory. load=%x-%x max %x", + loadseg << 4u,(loadseg << 4u)+imagesize-1u,segment_max << 4u); + delete[] loadbuf; + DOS_SetError(DOSERR_INSUFFICIENT_MEMORY); + DOS_FreeMemory(envseg); + DOS_CloseFile(fhandle); + return false; + } + } /* Load the executable */ loadaddress=PhysMake(loadseg,0); RunningProgramLoadAddress = loadaddress; @@ -462,6 +520,300 @@ bool DOS_Execute(const char* name, PhysPt block_pt, uint8_t flags) { mem_writew(address,mem_readw(address)+relocate); } } + +#if defined(OSFREE) + /* is this executable EXEPACK compressed (v1 check)? */ + /* NTS: The reason for the "versions" is that I anticipate finding variations of EXEPACK in the wild + * depending on when the EXE was made and which version of the Microsoft linker was used, etc. + * Surely they've made bug fixes to it over time, right? */ + /* assume loadbuf is 64K large */ + /* this code may run in virtual 8086 mode so we cannot just use MemBase+x to check */ + if (!iscom && memimagesize >= 0x100 && memsize > 0x10) { + /* make sure we're staying within the allocated memory for the EXE, even if Microsoft's + * EXEPACK code never checks. The linker making these does set the min/max sizes in the + * EXE header correctly. */ + const uint32_t exelimit = RunningProgramLoadAddress + ((memsize - 0x10)/*exclude PSP segment*/ * 0x10u); + const uint32_t exepkstart = ((uint32_t)head.initCS << 4u) + (uint32_t)head.initIP; + uint32_t packed_len = 0; + uint16_t exepacksz = 0; // size of EXEPACK code including "Packed file is corrupt" + uint16_t exevarssz = 0; + uint16_t relocofs = 0; // offset in relocated segment of packed relocation table + EXEPACKVARSv1 pkvars; + bool exepack = false; + + /* look for "RB" just before the entry point */ + /* Usually, CS:IP is set so that CS=exepack decompression and IP=0x12 aka sizeof(EXEPACKv1). + * Then the code just sets DS == CS and directly access the vars. In every variant I am aware + * of, the EXE starts with CS=EXEPACK code and IP=sizeof(EXEPACKVARS). For v1 variants that + * means CS:IP = EXEPACK code:0x12 for example. */ + if (exepkstart >= 2 && mem_readw(RunningProgramLoadAddress+exepkstart-2) == 0x4252/*RB*/) { + MEM_BlockRead(RunningProgramLoadAddress+exepkstart,loadbuf,0x180/*more than enough*/); + + if (head.initIP == sizeof(EXEPACKVARSv1) && memimagesize >= sizeof(EXEPACKv1) && memcmp(loadbuf,EXEPACKv1,sizeof(EXEPACKv1)) == 0) { + /* Very common variant */ + if (exepack_handling == EXEPACK_NONE) { + LOG(LOG_DOSMISC,LOG_DEBUG)("EXEPACK (variant 1) detected, doing nothing"); + } + else if (exepack_handling == EXEPACK_A20OFF) { + LOG(LOG_DOSMISC,LOG_DEBUG)("EXEPACK (variant 1) detected, switching off A20 gate"); + XMS_EnableA20(false); + } + else { + MEM_BlockRead(RunningProgramLoadAddress+exepkstart-sizeof(EXEPACKVARSv1),&pkvars,sizeof(EXEPACKVARSv1)); + pkvars.mem_start = (RunningProgramLoadAddress >> 4u); + MEM_BlockWrite(RunningProgramLoadAddress+exepkstart-sizeof(EXEPACKVARSv1),&pkvars,sizeof(EXEPACKVARSv1)); + packed_len = exepkstart-sizeof(EXEPACKVARSv1); + exevarssz = sizeof(EXEPACKVARSv1); + exepacksz = sizeof(EXEPACKv1); /* EXEPACK code + "Packed File is Corrupt" */ + relocofs = 0x12D; + exepack = true; + + LOG(LOG_DOSMISC,LOG_DEBUG)("EXEPACK (variant 1) detected"); + } + } + else if (head.initIP == sizeof(EXEPACKVARSv2) && memimagesize >= sizeof(EXEPACKv2) && memcmp(loadbuf,EXEPACKv2,sizeof(EXEPACKv2)) == 0) { + /* Variant seen in Microsoft Flight Simulator 4 that removes the skip_len field */ + if (exepack_handling == EXEPACK_NONE) { + LOG(LOG_DOSMISC,LOG_DEBUG)("EXEPACK (variant 2) detected, doing nothing"); + } + else if (exepack_handling == EXEPACK_A20OFF) { + LOG(LOG_DOSMISC,LOG_DEBUG)("EXEPACK (variant 2) detected, switching off A20 gate"); + XMS_EnableA20(false); + } + else { + MEM_BlockRead(RunningProgramLoadAddress+exepkstart-sizeof(EXEPACKVARSv2),&pkvars,sizeof(EXEPACKVARSv2)); + pkvars.mem_start = (RunningProgramLoadAddress >> 4u); + MEM_BlockWrite(RunningProgramLoadAddress+exepkstart-sizeof(EXEPACKVARSv2),&pkvars,sizeof(EXEPACKVARSv2)); + packed_len = exepkstart-sizeof(EXEPACKVARSv2); + exevarssz = sizeof(EXEPACKVARSv2); + exepacksz = sizeof(EXEPACKv2); /* EXEPACK code + "Packed File is Corrupt" */ + relocofs = 0x125; + exepack = true; + + /* the code below expects the v1 struct so convert in place. skip_len is missing so put it in place and move aside "RB" */ + pkvars.skip_len = 1; + pkvars.signature = 0x4252; + + LOG(LOG_DOSMISC,LOG_DEBUG)("EXEPACK (variant 2) detected"); + } + } + else if (head.initIP == sizeof(EXEPACKVARSv3) && memimagesize >= sizeof(EXEPACKv3) && memcmp(loadbuf,EXEPACKv3,sizeof(EXEPACKv3)) == 0) { + /* Variant seen in "PGA Golf" that removes the skip_len field, and fixes the segment wraparound A20 gate issue */ + if (exepack_handling == EXEPACK_NONE) { + LOG(LOG_DOSMISC,LOG_DEBUG)("EXEPACK (variant 3) detected, doing nothing"); + } + else if (exepack_handling == EXEPACK_A20OFF) { + /* this variant fixes the A20 gate wraparound issue, so, there's really no point to this unless of course + * the code within has similar bugs. */ + LOG(LOG_DOSMISC,LOG_DEBUG)("EXEPACK (variant 3) detected, switching off A20 gate"); + XMS_EnableA20(false); + } + else { + MEM_BlockRead(RunningProgramLoadAddress+exepkstart-sizeof(EXEPACKVARSv3),&pkvars,sizeof(EXEPACKVARSv3)); + pkvars.mem_start = (RunningProgramLoadAddress >> 4u); + MEM_BlockWrite(RunningProgramLoadAddress+exepkstart-sizeof(EXEPACKVARSv3),&pkvars,sizeof(EXEPACKVARSv3)); + packed_len = exepkstart-sizeof(EXEPACKVARSv3); + exevarssz = sizeof(EXEPACKVARSv3); + exepacksz = sizeof(EXEPACKv3); /* EXEPACK code + "Packed File is Corrupt" */ + relocofs = 0x132; + exepack = true; + + /* the code below expects the v1 struct so convert in place. skip_len is missing so put it in place and move aside "RB" */ + pkvars.skip_len = 1; + pkvars.signature = 0x4252; + + LOG(LOG_DOSMISC,LOG_DEBUG)("EXEPACK (variant 3) detected"); + } + } + else if (head.initIP == sizeof(EXEPACKVARSv4) && memimagesize >= sizeof(EXEPACKv4) && memcmp(loadbuf,EXEPACKv4,sizeof(EXEPACKv4)) == 0) { + /* Variant seen in "Popcorn" that removes the skip_len field, and fixes the segment wraparound A20 gate issue */ + if (exepack_handling == EXEPACK_NONE) { + LOG(LOG_DOSMISC,LOG_DEBUG)("EXEPACK (variant 4) detected, doing nothing"); + } + else if (exepack_handling == EXEPACK_A20OFF) { + /* this variant fixes the A20 gate wraparound issue, so, there's really no point to this unless of course + * the code within has similar bugs. */ + LOG(LOG_DOSMISC,LOG_DEBUG)("EXEPACK (variant 4) detected, switching off A20 gate"); + XMS_EnableA20(false); + } + else { + MEM_BlockRead(RunningProgramLoadAddress+exepkstart-sizeof(EXEPACKVARSv4),&pkvars,sizeof(EXEPACKVARSv4)); + pkvars.mem_start = (RunningProgramLoadAddress >> 4u); + MEM_BlockWrite(RunningProgramLoadAddress+exepkstart-sizeof(EXEPACKVARSv4),&pkvars,sizeof(EXEPACKVARSv4)); + packed_len = exepkstart-sizeof(EXEPACKVARSv4); + exevarssz = sizeof(EXEPACKVARSv4); + exepacksz = sizeof(EXEPACKv4); /* EXEPACK code + "Packed File is Corrupt" */ + relocofs = 0x112; + exepack = true; + + /* the code below expects the v1 struct so convert in place. skip_len is missing so put it in place and move aside "RB" */ + pkvars.skip_len = 1; + pkvars.signature = 0x4252; + + LOG(LOG_DOSMISC,LOG_DEBUG)("EXEPACK (variant 4) detected"); + } + } + } + + if (exepack) { + LOG(LOG_DOSMISC,LOG_DEBUG)("real_start=%04x:%04x exepack_size=%04x real_stack=%04x:%04x dest_len=%04x skip_len=%04x", + pkvars.real_CS,pkvars.real_IP,pkvars.exepack_size, + pkvars.real_SS,pkvars.real_SP,pkvars.dest_len,pkvars.skip_len); + + LOG(LOG_DOSMISC,LOG_DEBUG)("packed_exe_length=%04x exe_limit=%05x loadaddr=%05x",packed_len,exelimit,RunningProgramLoadAddress); + + /* EXEPACK code writes the base EXE segment image (excluding the PSP) to pkvars + 4 aka pkvars.mem_start */ + /* It then sets ES=dest_len+mem_start and copies exepack_size bytes to it BACKWARDS, then RETFs to it to + * continue execution of decompression with DX = skip_len. */ + /* srcPosSegment = end of packed EXE - skip_len. Scan and skip up to 0x10 bytes of 0xFF */ + /* dstPosSegment = first byte of EXEPACK segment - skip_len. */ + /* then sets DS:SI where SI |= 0xFFF0 and DS -= 0xFFF. This is why when loaded below < 0x1000 with A20 + * enabled the Packed File is Corrupt message appears. */ + { + if (pkvars.exepack_size < (exevarssz+exepacksz+0x20/*16words minsz relocation table*/) || pkvars.exepack_size > 0xF000u) { + LOG(LOG_DOSMISC,LOG_WARN)("EXEPACK exepack_size invalid"); + delete[] loadbuf; + DOS_CloseFile(fhandle); + return false; + } + + const uint32_t srcPos = RunningProgramLoadAddress+exepkstart-exevarssz; + const uint32_t dstPos = (pkvars.dest_len + pkvars.mem_start) << 4u; + LOG(LOG_DOSMISC,LOG_DEBUG)("Copying EXEPACK code to new location in memory srcPos=%x dstPos=%x",srcPos,dstPos); + /* copy BACKWARDS, as EXEPACK does, because it always copies the code to a higher location */ + for (unsigned int i=0;i < pkvars.exepack_size;i++) + mem_writeb(dstPos+pkvars.exepack_size-1-i,mem_readb(srcPos+pkvars.exepack_size-1-i)); + } + + { + uint32_t srcPos = RunningProgramLoadAddress+exepkstart-exevarssz-1u; + uint32_t dstPos = ((pkvars.dest_len + pkvars.mem_start) << 4u) - 1u; + LOG(LOG_DOSMISC,LOG_DEBUG)("srcPos=%05x dstPos=%05x",srcPos,dstPos); + + if (srcPos >= dstPos || srcPos >= exelimit || dstPos >= exelimit) { + LOG(LOG_DOSMISC,LOG_WARN)("EXEPACK invalid srcPos/dstPos"); + delete[] loadbuf; + DOS_CloseFile(fhandle); + return false; + } + + for (unsigned int c=0;c < 16 && mem_readb(srcPos) == 0xFF;c++) srcPos--; + LOG(LOG_DOSMISC,LOG_DEBUG)("srcPos=%05x after skipping padding",srcPos); + + /* begin decompressing */ + while (1) { + if (srcPos < RunningProgramLoadAddress) { + LOG(LOG_DOSMISC,LOG_WARN)("decompression read beyond start of EXE"); + delete[] loadbuf; + DOS_CloseFile(fhandle); + return false; + } + if (dstPos < RunningProgramLoadAddress) { + LOG(LOG_DOSMISC,LOG_WARN)("decompression wrote beyond start of EXE"); + delete[] loadbuf; + DOS_CloseFile(fhandle); + return false; + } + if (srcPos >= dstPos) { + LOG(LOG_DOSMISC,LOG_WARN)("decompression is beginning to overwrite the data to decompress"); + delete[] loadbuf; + DOS_CloseFile(fhandle); + return false; + } + + const uint8_t commandByte = mem_readb(srcPos--); + + /* FIXME: I'm seeing EXEPACKed executables where this decompression doesn't stop at the start of the + * EXE resident image, but instead, stops at writing address 0xFF (the last byte of the PSP + * segment). Why? Did someone at Microsoft make an off-by-one error? */ + + switch (commandByte & ~1u) { + case 0xB0: { + /* (reading backwards) BYTE:value WORD:length */ + const uint16_t l = mem_readw(--srcPos); srcPos--; + const uint8_t v = mem_readb(srcPos--); + if ((dstPos-l) < (RunningProgramLoadAddress-1u)) { + LOG(LOG_DOSMISC,LOG_WARN)("run length would have written past the EXE start srcPos=%x dstPos=%x len=%x",srcPos,dstPos,l); + delete[] loadbuf; + DOS_CloseFile(fhandle); + return false; + } + for (unsigned int c=0;c < l;c++) + mem_writeb(dstPos--,v); + break; + } + case 0xB2: { + /* (reading backwards) WORD:length */ + const uint16_t l = mem_readw(--srcPos); srcPos--; + if ((dstPos-l) < (RunningProgramLoadAddress-1u) || (srcPos-l) < (RunningProgramLoadAddress-1u)) { + LOG(LOG_DOSMISC,LOG_WARN)("copy length would have written past the EXE start srcPos=%x dstPos=%x len=%x",srcPos,dstPos,l); + delete[] loadbuf; + DOS_CloseFile(fhandle); + return false; + } + for (unsigned int c=0;c < l;c++) + mem_writeb(dstPos--,mem_readb(srcPos--)); + break; + } + default: + LOG(LOG_DOSMISC,LOG_WARN)("decompression found unknown EXEPACK command %02x, therefore, packed EXE is corrupt. srcPos=%x dstPos=%x",commandByte,srcPos,dstPos); + delete[] loadbuf; + DOS_CloseFile(fhandle); + return false; + }; + + if (commandByte & 1) break; /* LSB == last block */ + } + + /* Next, apply the packed relocation table. + * The code just assumes an address that is the first byte past the "Packed File is Corrupt" string. */ + uint32_t relocSrc = ((pkvars.dest_len + pkvars.mem_start) << 4u)+relocofs; + if ((relocSrc+0x20) < exelimit) { + for (unsigned int sec=0;sec < 0x10;sec++) { + const uint16_t count = mem_readw(relocSrc); relocSrc += 2; + const uint32_t segb = RunningProgramLoadAddress + (sec * 0x10000u); + + if (count == 0) continue; + + LOG(LOG_DOSMISC,LOG_DEBUG)("Apply packed reloations for section %x (%u relocations)",sec,count); + + /* NTS: EXEPACK code does check for offset = 0xFFFF to handle it properly! */ + for (unsigned int r=0;r < count;r++) { + if ((relocSrc+2) > exelimit) { + LOG(LOG_DOSMISC,LOG_WARN)("Relocation table unpacking read beyond exe limit in section %x entry %x relocSrc=%x",sec,r,relocSrc); + delete[] loadbuf; + DOS_CloseFile(fhandle); + return false; + } + + const uint32_t of = segb+mem_readw(relocSrc); relocSrc += 2; + if ((of+2) > exelimit) { + LOG(LOG_DOSMISC,LOG_WARN)("Relocation table unpacking write beyond exe limit in section %x entry %x relocSrc=%x patchaddr=%xx",sec,r,relocSrc,of); + delete[] loadbuf; + DOS_CloseFile(fhandle); + return false; + } + + mem_writew(of,mem_readw(of)+pkvars.mem_start); + } + } + } + + /* update EXE header to reflect the real CS:IP and SS:SP */ + head.initCS = pkvars.real_CS; + head.initIP = pkvars.real_IP; + head.initSS = pkvars.real_SS; + head.initSP = pkvars.real_SP; + LOG(LOG_DOSMISC,LOG_WARN)("Decompression done. Setting CS:IP=%04x:%04x SS:SP=%04x:%04x memsize=%04x(seg=%04x)", + head.initCS,head.initIP, + head.initSS,head.initSP, + memsize, + pkvars.mem_start+memsize); + } + } + } +#endif + delete[] loadbuf; DOS_CloseFile(fhandle); @@ -472,11 +824,11 @@ bool DOS_Execute(const char* name, PhysPt block_pt, uint8_t flags) { SetupCMDLine(pspseg,block); } CALLBACK_SCF(false); /* Carry flag cleared for caller if successful */ - if(flags == OVERLAY) { - reg_ax = 0; // Testing with MS-DOS (6.22) shows that if INT 21 AX=4B is called with the overlay flag (AL==3), then AX and DX are 0 on return. - reg_dx = 0; - return true; /* Everything done for overlays */ - } + if(flags == OVERLAY) { + reg_ax = 0; // Testing with MS-DOS (6.22) shows that if INT 21 AX=4B is called with the overlay flag (AL==3), then AX and DX are 0 on return. + reg_dx = 0; + return true; /* Everything done for overlays */ + } RealPt csip,sssp; if (iscom) { unsigned int stack_sp = 0xfffe; @@ -558,12 +910,24 @@ bool DOS_Execute(const char* name, PhysPt block_pt, uint8_t flags) { RunningProgramHash[1] = checksum_bytes; RunningProgramHash[2] = checksum; RunningProgramHash[3] = 0; + + /* ownership of the environment block also belongs to the program, not the parent program! (bugfix) */ + { + uint16_t s = newpsp.GetEnvironment(); + if (s != 0) { + DOS_MCB envmcb(s-1); + envmcb.SetPSPSeg(dos.psp()); + envmcb.SetFileName(stripname); + } + } } +#if defined(OSFREE) if (a20_off_if_loading_low && pspseg < 0x1000 && xms_init && XMS_GetEnabledA20() && !(cpu.cr0 & CR0_PROTECTION)/*not protected/vm86 mode*/) { LOG(LOG_EXEC,LOG_DEBUG)("Program is being loaded below 64KB, disabling A20 gate to try to avoid some common crashes"); XMS_EnableA20(false); } +#endif if (flags==LOAD) { /* First word on the stack is the value ax should contain on startup */ diff --git a/src/dos/dos_files.cpp b/src/dos/dos_files.cpp index 1ea49d4aeb6..4b1516802b9 100644 --- a/src/dos/dos_files.cpp +++ b/src/dos/dos_files.cpp @@ -17,2662 +17,2937 @@ */ - #include - #include - #include - #include - #if defined(WIN32) && defined(__MINGW32__) - # include - #endif - - #include "dosbox.h" - #include "bios.h" - #include "logging.h" - #include "mem.h" - #include "regs.h" - #include "dos_inc.h" - #include "drives.h" - #include "cross.h" - #include "control.h" - #include "support.h" - #include "menu.h" - #include "cdrom.h" - #include "ide.h" - #include "bios_disk.h" - - #define DOS_FILESTART 4 - - #define FCB_SUCCESS 0 - #define FCB_READ_NODATA 1 - #define FCB_READ_PARTIAL 3 - #define FCB_ERR_NODATA 1 - #define FCB_ERR_EOF 3 - #define FCB_ERR_WRITE 1 - - extern bool log_int21; - extern bool log_fileio; - extern bool enable_share_exe, enable_dbcs_tables; - extern int dos_clipboard_device_access; - extern const char *dos_clipboard_device_name; - - Bitu DOS_FILES = 127; - DOS_File ** Files = NULL; - DOS_Drive * Drives[DOS_DRIVES] = {NULL}; - bool force_sfn = false; - int sdrive = 0; - - /* This is the LFN filefind handle that is currently being used, with normal values between - * 0 and 254 for LFN calls. The value LFN_FILEFIND_INTERNAL and LFN_FILEFIND_IMG are used - * internally by LFN and image handling functions. For non-LFN calls the value is fixed to - * be LFN_FILEFIND_NONE as defined in drives.h. */ - int lfn_filefind_handle = LFN_FILEFIND_NONE; - bool isDBCSCP(), isKanji1(uint8_t chr), shiftjis_lead_byte(int c); - - bool DOS_GetFileAttrEx(char const* const name, struct stat *status, uint8_t hdrive) - { - char fullname[DOS_PATHLENGTH]; - uint8_t drive; - bool usehdrive=/*hdrive>=0&&(always true)*/hdriveGetFileAttrEx(fullname, status); - } - - #include "dos_network2.h" - - uint8_t DOS_GetDefaultDrive(void) { - // return DOS_SDA(DOS_SDA_SEG,DOS_SDA_OFS).GetDrive(); - uint8_t d = DOS_SDA(DOS_SDA_SEG,DOS_SDA_OFS).GetDrive(); - if( d != dos.current_drive ) LOG(LOG_DOSMISC,LOG_ERROR)("SDA drive %d not the same as dos.current_drive %d",d,dos.current_drive); - return dos.current_drive; - } - - void DOS_SetDefaultDrive(uint8_t drive) { - // if (drive<=DOS_DRIVES && ((drive<2) || Drives[drive])) DOS_SDA(DOS_SDA_SEG,DOS_SDA_OFS).SetDrive(drive); - if (drive=DOS_DRIVES || !Drives[*drive]) { - DOS_SetError(DOSERR_PATH_NOT_FOUND); - return false; - } - - if(isVolume) // Don't process any further - { - strcpy(fullname, name_int); - return true; - } - - r=0;w=0; - while (r='a') && (c<='z')) c-=32; - else if (c==' ') continue; /* should be separator */ - } - upname[w++]=(char)c; - if (((IS_PC98_ARCH && shiftjis_lead_byte(c)) || (isDBCSCP() && isKanji1(c))) && r0 && name_int[r-1]==' ') r--; - if (r>=DOS_PATHLENGTH) { DOS_SetError(DOSERR_PATH_NOT_FOUND);return false; } - upname[w]=0; - - /* Now parse the new file name to make the final filename */ - if (upname[0]!='\\') strcpy(fullname,Drives[*drive]->curdir); - else fullname[0]=0; - uint32_t lastdir=0;uint32_t t=0; - bool lead = false; - while (fullname[t]!=0) { - if (lead) lead = false; - else if ((IS_PC98_ARCH && shiftjis_lead_byte(fullname[t])) || (isDBCSCP() && isKanji1(fullname[t]))) lead = true; - else if ((fullname[t]=='\\') && (fullname[t+1]!=0)) lastdir=t; - t++; - } - r=0;w=0; - tempdir[0]=0; - lead=false; - bool stop=false; - while (!stop) { - if (lead) lead=false; - else if ((IS_PC98_ARCH && shiftjis_lead_byte(upname[r])) || (isDBCSCP() && isKanji1(upname[r]))) lead=true; - else if ((upname[r]=='\\') || (upname[r]==0)){ - if (upname[r]==0) stop=true; - tempdir[w]=0; - if (tempdir[0]==0) { w=0;r++;continue;} - if (strcmp(tempdir,".")==0) { - tempdir[0]=0; - w=0;r++; - continue; - } - - int32_t iDown; - bool dots = true; - int32_t templen=(int32_t)strlen(tempdir); - for(iDown=0;(iDown < templen) && dots;iDown++) - if(tempdir[iDown] != '.') - dots = false; - - // only dots? - if (dots && (templen > 1)) { - int32_t cDots = templen - 1; - for(iDown=(int32_t)strlen(fullname)-1;iDown>=0;iDown--) { - if(fullname[iDown]=='\\' || iDown==0) { - if (iDown > 0 && (IS_PC98_ARCH || isDBCSCP())) { - char c = fullname[iDown+1]; - fullname[iDown+1] = 0; - char *p = strrchr_dbcs(fullname, '\\'); - fullname[iDown+1] = c; - if (p==NULL || p-fullnamefile not found - //Or path not found depending on whether - //we are still in dir check stage or file stage - if(stop) - DOS_SetError(DOSERR_FILE_NOT_FOUND); - else - DOS_SetError(DOSERR_PATH_NOT_FOUND); - return false; - } - - ext[4] = 0; - if((strlen(tempdir) - strlen(ext)) > 8) memmove(tempdir + 8, ext, 5); - } else { - tempdir[8] = 0; - } - } - - if (strlen(fullname)+strlen(tempdir)>=DOS_PATHLENGTH) { - DOS_SetError(DOSERR_PATH_NOT_FOUND);return false; - } - - strcat(fullname,tempdir); - tempdir[0]=0; - w=0;r++; - continue; - } - tempdir[w++]=upname[r++]; - } - return true; - } - - bool checkwat=false; - bool DOS_GetSFNPath(char const * const path,char * SFNPath,bool LFN) { - char pdir[LFN_NAMELENGTH+4], *p; - uint8_t drive;char fulldir[DOS_PATHLENGTH],LFNPath[CROSS_LEN]; - char name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH]; - uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; - if (!DOS_MakeName(path,fulldir,&drive)) return false; - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (Network_IsNetworkResource(fulldir)) { - strcpy(SFNPath,fulldir); - return true; - } - #endif - sprintf(SFNPath,"%c:\\",drive+'A'); - strcpy(LFNPath,SFNPath); - p = fulldir; - if (*p==0) return true; - RealPt save_dta=dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - int fbak=lfn_filefind_handle; - for (char *s = strchr_dbcs(p,'\\'); s != NULL; s = strchr_dbcs(p,'\\')) { - *s = 0; - if (check_last_split_char(SFNPath, strlen(SFNPath), '\\')) - sprintf(pdir,"\"%s%s\"",SFNPath,p); - else - sprintf(pdir,"\"%s\\%s\"",SFNPath,p); - if (!strrchr(p,'*') && !strrchr(p,'?')) { - *s = '\\'; - p = s + 1; - lfn_filefind_handle=LFN_FILEFIND_INTERNAL; - if (DOS_FindFirst(pdir,0xffff & DOS_ATTR_DIRECTORY & ~DOS_ATTR_VOLUME,false)) { - lfn_filefind_handle=fbak; - dta.GetResult(name,lname,size,hsize,date,time,attr); - strcat(SFNPath,name); - strcat(LFNPath,lname); - strcat(SFNPath,"\\"); - strcat(LFNPath,"\\"); - } - else { - lfn_filefind_handle=fbak; - dos.dta(save_dta); - return false; - } - } else { - strcat(SFNPath,p); - strcat(LFNPath,p); - strcat(SFNPath,"\\"); - strcat(LFNPath,"\\"); - *s = '\\'; - p = s + 1; - break; - } - } - if (p) { - sprintf(pdir,"\"%s%s\"",SFNPath,p); - lfn_filefind_handle=LFN_FILEFIND_INTERNAL; - if (!strrchr(p,'*')&&!strrchr(p,'?')&&DOS_FindFirst(pdir,0xffff & ~DOS_ATTR_VOLUME,false)) { - dta.GetResult(name,lname,size,hsize,date,time,attr); - strcat(SFNPath,name); - strcat(LFNPath,lname); - } else if (checkwat) { - lfn_filefind_handle=fbak; - dos.dta(save_dta); - return false; - } else { - strcat(SFNPath,p); - strcat(LFNPath,p); - } - lfn_filefind_handle=fbak; - } - dos.dta(save_dta); - if (LFN) strcpy(SFNPath,LFNPath); - return true; - } - - bool DOS_GetCurrentDir(uint8_t drive,char * const buffer, bool LFN) { - if (drive==0) drive=DOS_GetDefaultDrive(); - else drive--; - - if ((drive>=DOS_DRIVES) || (!Drives[drive])) { - DOS_SetError(DOSERR_INVALID_DRIVE); - return false; - } - - if (LFN && uselfn) { - char cdir[DOS_PATHLENGTH+8],ldir[DOS_PATHLENGTH]; - - if (strchr(Drives[drive]->curdir,' ')) - sprintf(cdir,"\"%c:\\%s\"",drive+'A',Drives[drive]->curdir); - else - sprintf(cdir,"%c:\\%s",drive+'A',Drives[drive]->curdir); - - if (!DOS_GetSFNPath(cdir,ldir,true)) - return false; - - strcpy(buffer,ldir+3); - if (DOS_GetSFNPath(cdir,ldir,false)) - strcpy(Drives[drive]->curdir,ldir+3); - } else { - strcpy(buffer,Drives[drive]->curdir); - } - - return true; - } - - bool DOS_ChangeDir(char const * const dir) { - uint8_t drive;char fulldir[DOS_PATHLENGTH]; - const char * testdir=dir; - if (strlen(testdir) && testdir[1]==':') testdir+=2; - size_t len=strlen(testdir); - if (!len) { - DOS_SetError(DOSERR_PATH_NOT_FOUND); - return false; - } - if (!DOS_MakeName(dir,fulldir,&drive)) return false; - if (strlen(fulldir) && check_last_split_char(testdir, len, '\\')) { - DOS_SetError(DOSERR_PATH_NOT_FOUND); - return false; - } - - if (Drives[drive]->TestDir(fulldir)) { - strcpy(Drives[drive]->curdir,fulldir); - return true; - } else { - DOS_SetError(DOSERR_PATH_NOT_FOUND); - } - return false; - } - - bool DOS_MakeDir(char const * const dir) { - uint8_t drive;char fulldir[DOS_PATHLENGTH]; - size_t len = strlen(dir); - if(!len || check_last_split_char(dir, len, '\\')) { - DOS_SetError(DOSERR_PATH_NOT_FOUND); - return false; - } - if (!DOS_MakeName(dir,fulldir,&drive)) return false; - while (strlen(fulldir)&&(*(fulldir+strlen(fulldir)-1)=='.'||*(fulldir+strlen(fulldir)-1)==' ')) *(fulldir+strlen(fulldir)-1)=0; - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (Network_IsNetworkResource(dir)) return Network_MakeDir(dir); - #endif - if(Drives[drive]->MakeDir(fulldir)) return true; - - /* Determine reason for failing */ - if(Drives[drive]->TestDir(fulldir)) - DOS_SetError(DOSERR_ACCESS_DENIED); - else - DOS_SetError(DOSERR_PATH_NOT_FOUND); - return false; - } - - bool DOS_RemoveDir(char const * const dir) { - /* We need to do the test before the removal as can not rely on - * the host to forbid removal of the current directory. - * We never change directory. Everything happens in the drives. - */ - uint8_t drive;char fulldir[DOS_PATHLENGTH]; - if (!DOS_MakeName(dir,fulldir,&drive)) return false; - /* Check if exists */ - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (Network_IsNetworkResource(dir)) return Network_RemoveDir(dir); - #endif - if(!Drives[drive]->TestDir(fulldir)) { - DOS_SetError(DOSERR_PATH_NOT_FOUND); - return false; - } - /* See if it's current directory */ - char currdir[DOS_PATHLENGTH]= { 0 }, lcurrdir[DOS_PATHLENGTH]= { 0 }; - DOS_GetCurrentDir(drive + 1 ,currdir, false); - DOS_GetCurrentDir(drive + 1 ,lcurrdir, true); - if(strcasecmp(currdir,fulldir) == 0 || (uselfn && strcasecmp(lcurrdir,fulldir) == 0)) { - DOS_SetError(DOSERR_REMOVE_CURRENT_DIRECTORY); - return false; - } - - if(Drives[drive]->RemoveDir(fulldir)) return true; - - /* Failed. We know it exists and it's not the current dir */ - /* Assume non empty */ - DOS_SetError(DOSERR_ACCESS_DENIED); - return false; - } - - static bool PathExists(char const * const name) { - const char* leading = strrchr_dbcs((char *)name,'\\'); - if(!leading) return true; - char temp[CROSS_LEN]; - strcpy(temp,name); - char * lead = strrchr_dbcs(temp,'\\'); - if (lead == temp) return true; - *lead = 0; - uint8_t drive;char fulldir[DOS_PATHLENGTH]; - if (!DOS_MakeName(temp,fulldir,&drive)) return false; - if(!Drives[drive]->TestDir(fulldir)) return false; - return true; - } - - bool DOS_Rename(char const * const oldname,char const * const newname) { - uint8_t driveold;char fullold[DOS_PATHLENGTH]; - uint8_t drivenew;char fullnew[DOS_PATHLENGTH]; - if (!DOS_MakeName(oldname,fullold,&driveold)) return false; - if (!DOS_MakeName(newname,fullnew,&drivenew)) return false; - while (strlen(fullnew)&&(*(fullnew+strlen(fullnew)-1)=='.'||*(fullnew+strlen(fullnew)-1)==' ')) *(fullnew+strlen(fullnew)-1)=0; - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (Network_IsNetworkResource(oldname)) return Network_Rename(oldname,newname); - #endif - - /* No tricks with devices */ - bool clip=false; - if ( (DOS_FindDevice(oldname) != DOS_DEVICES) || - (DOS_FindDevice(newname) != DOS_DEVICES) ) { - if (!control->SecureMode()&&(dos_clipboard_device_access==3||dos_clipboard_device_access==4)) { - if (DOS_FindDevice(oldname) == DOS_DEVICES) { - const char* find_last; - find_last=strrchr_dbcs(fullnew,'\\'); - if (find_last==NULL) find_last=fullnew; - else find_last++; - if (!strcasecmp(find_last, *dos_clipboard_device_name?dos_clipboard_device_name:"CLIP$")) - clip=true; - } - } - if (!clip) { - DOS_SetError(DOSERR_FILE_NOT_FOUND); - return false; - } - } - /* Must be on the same drive */ - if(driveold != drivenew) { - DOS_SetError(DOSERR_NOT_SAME_DEVICE); - return false; - } - uint16_t attr; - /* Source must exist */ - if (!Drives[driveold]->GetFileAttr( fullold, &attr ) ) { - if (!PathExists(oldname)) DOS_SetError(DOSERR_PATH_NOT_FOUND); - else DOS_SetError(DOSERR_FILE_NOT_FOUND); - return false; - } - /*Test if target exists => no access */ - if(Drives[drivenew]->GetFileAttr(fullnew,&attr)&&!(uselfn&&!force_sfn&&strcmp(fullold, fullnew)&&!strcasecmp(fullold, fullnew))) { - DOS_SetError(DOSERR_ACCESS_DENIED); - return false; - } - - #if defined (WIN32) - if (clip) { - uint16_t sourceHandle, targetHandle, toread = 0x8000; - static uint8_t buffer[0x8000]; - bool failed = false; - if (DOS_OpenFile(oldname,OPEN_READ,&sourceHandle) && DOS_OpenFile(newname,OPEN_WRITE,&targetHandle)) { - do { - if (!DOS_ReadFile(sourceHandle,buffer,&toread) || !DOS_WriteFile(targetHandle,buffer,&toread)) failed=true; - } while (toread == 0x8000); - if (!DOS_CloseFile(sourceHandle)||!DOS_CloseFile(targetHandle)) failed=true; - } else failed=true; - if (!failed&&Drives[drivenew]->FileUnlink(fullold)) return true; - } else - #endif - - if (Drives[drivenew]->Rename(fullold,fullnew)) return true; - /* Rename failed despite checks => no access */ - DOS_SetError(DOSERR_ACCESS_DENIED); - return false; - } - - bool forcelfn = false; - bool DOS_FindFirst(const char * search,uint16_t attr,bool fcb_findfirst) { - LOG(LOG_FILES,LOG_NORMAL)("file search attributes %X name %s",attr,search); - DOS_DTA dta(dos.dta()); - uint8_t drive;char fullsearch[DOS_PATHLENGTH]; - char dir[DOS_PATHLENGTH];char pattern[DOS_PATHLENGTH]; - size_t len = strlen(search); - if(len && check_last_split_char(search, len, '\\') && !( (len > 2) && (search[len - 2] == ':') && (attr == DOS_ATTR_VOLUME) )) { - //Dark Forces installer, but c:\ is alright for volume labels(exclusively set) - DOS_SetError(DOSERR_NO_MORE_FILES); - return false; - } - if (!DOS_MakeName(search,fullsearch,&drive,attr == DOS_ATTR_VOLUME)) return false; - //Check for devices. FindDevice checks for leading subdir as well - bool device = false; - //if (attr & DOS_ATTR_DEVICE) /* FIX_ME: This line deleted to fix launching Blocek editor (Issue #4385), revert this if this induces other errors */ - device = DOS_FindDevice(search) != DOS_DEVICES; - - /* Split the search in dir and pattern */ - forcelfn = false; - char *find_last = NULL; - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - bool net = Network_IsNetworkResource(search); - if (net) forcelfn = true; - char *p = net ? strchr_dbcs(fullsearch+(fullsearch[0]=='"'?3:2), '\\') : NULL; - find_last = strrchr_dbcs(p != NULL ? p + 1 : fullsearch, '\\'); - #else - find_last = strrchr_dbcs(fullsearch,'\\'); +#include +#include +#include +#include +#if defined(WIN32) && defined(__MINGW32__) +# include +#endif + +#include "dosbox.h" +#include "bios.h" +#include "logging.h" +#include "mem.h" +#include "regs.h" +#include "dos_inc.h" +#include "drives.h" +#include "cross.h" +#include "control.h" +#include "support.h" +#include "menu.h" +#include "cdrom.h" +#include "ide.h" +#include "bios_disk.h" + +#define DOS_FILESTART 4 + +#define FCB_SUCCESS 0 +#define FCB_READ_NODATA 1 +#define FCB_READ_PARTIAL 3 +#define FCB_ERR_NODATA 1 +#define FCB_ERR_EOF 3 +#define FCB_ERR_WRITE 1 + +extern bool log_int21; +extern bool log_fileio; +extern bool enable_share_exe, enable_dbcs_tables; +extern int dos_clipboard_device_access; +extern const char *dos_clipboard_device_name; + +#if defined(__APPLE__) && defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101200 + +#include +#include +#include +#include +#include +#include + +typedef enum { + _CLOCK_REALTIME = 0, +#if !defined(CLOCK_REALTIME) +#define CLOCK_REALTIME _CLOCK_REALTIME +#endif + _CLOCK_MONOTONIC = 6, +#if !defined(CLOCK_MONOTONIC) +#define CLOCK_MONOTONIC _CLOCK_MONOTONIC +#endif +#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) + _CLOCK_MONOTONIC_RAW = 4, +#if !defined(CLOCK_MONOTONIC_RAW) +#define CLOCK_MONOTONIC_RAW _CLOCK_MONOTONIC_RAW +#endif + _CLOCK_MONOTONIC_RAW_APPROX = 5, +#if !defined(CLOCK_MONOTONIC_RAW_APPROX) +#define CLOCK_MONOTONIC_RAW_APPROX _CLOCK_MONOTONIC_RAW_APPROX +#endif + _CLOCK_UPTIME_RAW = 8, +#if !defined(CLOCK_UPTIME_RAW) +#define CLOCK_UPTIME_RAW _CLOCK_UPTIME_RAW +#endif + _CLOCK_UPTIME_RAW_APPROX = 9, +#if !defined(CLOCK_UPTIME_RAW_APPROX) +#define CLOCK_UPTIME_RAW_APPROX _CLOCK_UPTIME_RAW_APPROX +#endif +#endif + _CLOCK_PROCESS_CPUTIME_ID = 12, +#if !defined(CLOCK_PROCESS_CPUTIME_ID) +#define CLOCK_PROCESS_CPUTIME_ID _CLOCK_PROCESS_CPUTIME_ID +#endif + _CLOCK_THREAD_CPUTIME_ID = 16 +#if !defined(CLOCK_THREAD_CPUTIME_ID) +#define CLOCK_THREAD_CPUTIME_ID _CLOCK_THREAD_CPUTIME_ID +#endif +} clockid_t; + +#ifdef __cplusplus +extern "C" { +#endif + +int clock_gettime(clockid_t clk_id, struct timespec* tp) { + if (!tp) { + errno = EINVAL; + return -1; + } + + switch (clk_id) { + case CLOCK_REALTIME: { + struct timeval now; + if (gettimeofday(&now, NULL) != 0) return -1; + tp->tv_sec = now.tv_sec; + tp->tv_nsec = now.tv_usec * 1000; + return 0; + } + + case CLOCK_MONOTONIC: + case CLOCK_MONOTONIC_RAW: + case CLOCK_MONOTONIC_RAW_APPROX: + case CLOCK_UPTIME_RAW: + case CLOCK_UPTIME_RAW_APPROX: { + static mach_timebase_info_data_t timebase_info = {0}; + if (timebase_info.denom == 0) + mach_timebase_info(&timebase_info); + + uint64_t time = mach_absolute_time(); + uint64_t nsec = time * timebase_info.numer / timebase_info.denom; + tp->tv_sec = nsec / 1000000000; + tp->tv_nsec = nsec % 1000000000; + return 0; + } + + case CLOCK_PROCESS_CPUTIME_ID: { + task_thread_times_info_data_t info; + mach_msg_type_number_t count = TASK_THREAD_TIMES_INFO_COUNT; + if (task_info(mach_task_self(), TASK_THREAD_TIMES_INFO, + (task_info_t)&info, &count) != KERN_SUCCESS) { + errno = EINVAL; + return -1; + } + uint64_t usec = info.user_time.seconds * 1000000 + info.user_time.microseconds + + info.system_time.seconds * 1000000 + info.system_time.microseconds; + tp->tv_sec = usec / 1000000; + tp->tv_nsec = (usec % 1000000) * 1000; + return 0; + } + + case CLOCK_THREAD_CPUTIME_ID: { + thread_basic_info_data_t info; + mach_msg_type_number_t count = THREAD_BASIC_INFO_COUNT; + thread_act_t thread = mach_thread_self(); + kern_return_t kr = thread_info(thread, THREAD_BASIC_INFO, + (thread_info_t)&info, &count); + mach_port_deallocate(mach_task_self(), thread); + if (kr != KERN_SUCCESS) { + errno = EINVAL; + return -1; + } + uint64_t usec = info.user_time.seconds * 1000000 + info.user_time.microseconds + + info.system_time.seconds * 1000000 + info.system_time.microseconds; + tp->tv_sec = usec / 1000000; + tp->tv_nsec = (usec % 1000000) * 1000; + return 0; + } + + default: + errno = EINVAL; + return -1; + } +} + +#ifdef __cplusplus +} +#endif + +#endif // __MAC_OS_X_VERSION_MIN_REQUIRED < 101200 + + +Bitu DOS_FILES = 127; +DOS_File ** Files = NULL; +DOS_Drive * Drives[DOS_DRIVES] = {NULL}; +bool force_sfn = false; +int sdrive = 0; + +/* This is the LFN filefind handle that is currently being used, with normal values between + * 0 and 254 for LFN calls. The value LFN_FILEFIND_INTERNAL and LFN_FILEFIND_IMG are used + * internally by LFN and image handling functions. For non-LFN calls the value is fixed to + * be LFN_FILEFIND_NONE as defined in drives.h. */ +int lfn_filefind_handle = LFN_FILEFIND_NONE; +bool isDBCSCP(), isKanji1(uint8_t chr), shiftjis_lead_byte(int c); + +bool DOS_GetFileAttrEx(char const* const name, struct stat *status, uint8_t hdrive) +{ + char fullname[DOS_PATHLENGTH]; + uint8_t drive; + bool usehdrive=/*hdrive>=0&&(always true)*/hdriveGetFileAttrEx(fullname, status); +} + +#if !defined(OSFREE) +#include "dos_network2.h" +#endif + +uint8_t DOS_GetDefaultDrive(void) { +// return DOS_SDA(DOS_SDA_SEG,DOS_SDA_OFS).GetDrive(); + uint8_t d = DOS_SDA(DOS_SDA_SEG,DOS_SDA_OFS).GetDrive(); + if( d != dos.current_drive ) LOG(LOG_DOSMISC,LOG_ERROR)("SDA drive %d not the same as dos.current_drive %d",d,dos.current_drive); + return dos.current_drive; +} + +void DOS_SetDefaultDrive(uint8_t drive) { +// if (drive<=DOS_DRIVES && ((drive<2) || Drives[drive])) DOS_SDA(DOS_SDA_SEG,DOS_SDA_OFS).SetDrive(drive); + if (drive=DOS_DRIVES || !Drives[*drive]) { + DOS_SetError(DOSERR_PATH_NOT_FOUND); + return false; + } + + r=0;w=0; + while (r='a') && (c<='z')) c-=32; + else if (c==' ') continue; /* should be separator */ + } + upname[w++]=(char)c; + if (((IS_PC98_ARCH && shiftjis_lead_byte(c)) || (isDBCSCP() && isKanji1(c))) && r0 && name_int[r-1]==' ') r--; + if (r>=DOS_PATHLENGTH) { DOS_SetError(DOSERR_PATH_NOT_FOUND);return false; } + upname[w]=0; + + /* Now parse the new file name to make the final filename */ + if (upname[0]!='\\') strcpy(fullname,Drives[*drive]->curdir); + else fullname[0]=0; + uint32_t lastdir=0;uint32_t t=0; + bool lead = false; + while (fullname[t]!=0) { + if (lead) lead = false; + else if ((IS_PC98_ARCH && shiftjis_lead_byte(fullname[t])) || (isDBCSCP() && isKanji1(fullname[t]))) lead = true; + else if ((fullname[t]=='\\') && (fullname[t+1]!=0)) lastdir=t; + t++; + } + r=0;w=0; + tempdir[0]=0; + lead=false; + bool stop=false; + while (!stop) { + if (lead) lead=false; + else if ((IS_PC98_ARCH && shiftjis_lead_byte(upname[r])) || (isDBCSCP() && isKanji1(upname[r]))) lead=true; + else if ((upname[r]=='\\') || (upname[r]==0)){ + if (upname[r]==0) stop=true; + tempdir[w]=0; + if (tempdir[0]==0) { w=0;r++;continue;} + if (strcmp(tempdir,".")==0) { + tempdir[0]=0; + w=0;r++; + continue; + } + + int32_t iDown; + bool dots = true; + int32_t templen=(int32_t)strlen(tempdir); + for(iDown=0;(iDown < templen) && dots;iDown++) + if(tempdir[iDown] != '.') + dots = false; + + // only dots? + if (dots && (templen > 1)) { + int32_t cDots = templen - 1; + for(iDown=(int32_t)strlen(fullname)-1;iDown>=0;iDown--) { + if(fullname[iDown]=='\\' || iDown==0) { + if (iDown > 0 && (IS_PC98_ARCH || isDBCSCP())) { + char c = fullname[iDown+1]; + fullname[iDown+1] = 0; + char *p = strrchr_dbcs(fullname, '\\'); + fullname[iDown+1] = c; + if (p==NULL || p-fullnamefile not found + //Or path not found depending on whether + //we are still in dir check stage or file stage + if(stop) + DOS_SetError(DOSERR_FILE_NOT_FOUND); + else + DOS_SetError(DOSERR_PATH_NOT_FOUND); + return false; + } + + ext[4] = 0; + if((strlen(tempdir) - strlen(ext)) > 8) memmove(tempdir + 8, ext, 5); + } else { + tempdir[8] = 0; + } + } + + if (strlen(fullname)+strlen(tempdir)>=DOS_PATHLENGTH) { + DOS_SetError(DOSERR_PATH_NOT_FOUND);return false; + } + + strcat(fullname,tempdir); + tempdir[0]=0; + w=0;r++; + continue; + } + tempdir[w++]=upname[r++]; + } + return true; +} + +bool checkwat=false; +bool DOS_GetSFNPath(char const * const path,char * SFNPath,bool LFN) { + char pdir[LFN_NAMELENGTH+4], *p; + uint8_t drive;char fulldir[DOS_PATHLENGTH],LFNPath[CROSS_LEN]; + char name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH]; + uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; + if (!DOS_MakeName(path,fulldir,&drive)) return false; +#if !defined(OSFREE) +# if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + if (Network_IsNetworkResource(fulldir)) { + strcpy(SFNPath,fulldir); + return true; + } +# endif +#endif + sprintf(SFNPath,"%c:\\",drive+'A'); + strcpy(LFNPath,SFNPath); + p = fulldir; + if (*p==0) return true; + RealPt save_dta=dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + int fbak=lfn_filefind_handle; + for (char *s = strchr_dbcs(p,'\\'); s != NULL; s = strchr_dbcs(p,'\\')) { + *s = 0; + if (check_last_split_char(SFNPath, strlen(SFNPath), '\\')) + sprintf(pdir,"\"%s%s\"",SFNPath,p); + else + sprintf(pdir,"\"%s\\%s\"",SFNPath,p); + if (!strrchr(p,'*') && !strrchr(p,'?')) { + *s = '\\'; + p = s + 1; + lfn_filefind_handle=LFN_FILEFIND_INTERNAL; + if (DOS_FindFirst(pdir,0xffff & DOS_ATTR_DIRECTORY & ~DOS_ATTR_VOLUME,false)) { + lfn_filefind_handle=fbak; + dta.GetResult(name,lname,size,hsize,date,time,attr); + strcat(SFNPath,name); + strcat(LFNPath,lname); + strcat(SFNPath,"\\"); + strcat(LFNPath,"\\"); + } + else { + lfn_filefind_handle=fbak; + dos.dta(save_dta); + return false; + } + } else { + strcat(SFNPath,p); + strcat(LFNPath,p); + strcat(SFNPath,"\\"); + strcat(LFNPath,"\\"); + *s = '\\'; + p = s + 1; + break; + } + } + if (p) { + sprintf(pdir,"\"%s%s\"",SFNPath,p); + lfn_filefind_handle=LFN_FILEFIND_INTERNAL; + if (!strrchr(p,'*')&&!strrchr(p,'?')&&DOS_FindFirst(pdir,0xffff & ~DOS_ATTR_VOLUME,false)) { + dta.GetResult(name,lname,size,hsize,date,time,attr); + strcat(SFNPath,name); + strcat(LFNPath,lname); + } else if (checkwat) { + lfn_filefind_handle=fbak; + dos.dta(save_dta); + return false; + } else { + strcat(SFNPath,p); + strcat(LFNPath,p); + } + lfn_filefind_handle=fbak; + } + dos.dta(save_dta); + if (LFN) strcpy(SFNPath,LFNPath); + return true; +} + +bool DOS_GetCurrentDir(uint8_t drive,char * const buffer, bool LFN) { + if (drive==0) drive=DOS_GetDefaultDrive(); + else drive--; + + if ((drive>=DOS_DRIVES) || (!Drives[drive])) { + DOS_SetError(DOSERR_INVALID_DRIVE); + return false; + } + + if (LFN && uselfn) { + char cdir[DOS_PATHLENGTH+8],ldir[DOS_PATHLENGTH]; + + if (strchr(Drives[drive]->curdir,' ')) + sprintf(cdir,"\"%c:\\%s\"",drive+'A',Drives[drive]->curdir); + else + sprintf(cdir,"%c:\\%s",drive+'A',Drives[drive]->curdir); + + if (!DOS_GetSFNPath(cdir,ldir,true)) + return false; + + strcpy(buffer,ldir+3); + if (DOS_GetSFNPath(cdir,ldir,false)) + strcpy(Drives[drive]->curdir,ldir+3); + } else { + strcpy(buffer,Drives[drive]->curdir); + } + + return true; +} + +bool DOS_ChangeDir(char const * const dir) { + uint8_t drive;char fulldir[DOS_PATHLENGTH]; + const char * testdir=dir; + if (strlen(testdir) && testdir[1]==':') testdir+=2; + size_t len=strlen(testdir); + if (!len) { + DOS_SetError(DOSERR_PATH_NOT_FOUND); + return false; + } + if (!DOS_MakeName(dir,fulldir,&drive)) return false; + if (strlen(fulldir) && check_last_split_char(testdir, len, '\\')) { + DOS_SetError(DOSERR_PATH_NOT_FOUND); + return false; + } + + if (Drives[drive]->TestDir(fulldir)) { + strcpy(Drives[drive]->curdir,fulldir); + return true; + } else { + DOS_SetError(DOSERR_PATH_NOT_FOUND); + } + return false; +} + +bool DOS_MakeDir(char const * const dir) { + uint8_t drive;char fulldir[DOS_PATHLENGTH]; + size_t len = strlen(dir); + if(!len || check_last_split_char(dir, len, '\\')) { + DOS_SetError(DOSERR_PATH_NOT_FOUND); + return false; + } + if (!DOS_MakeName(dir,fulldir,&drive)) return false; + while (strlen(fulldir)&&(*(fulldir+strlen(fulldir)-1)=='.'||*(fulldir+strlen(fulldir)-1)==' ')) *(fulldir+strlen(fulldir)-1)=0; +#if !defined(OSFREE) +# if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + if (Network_IsNetworkResource(dir)) return Network_MakeDir(dir); +# endif +#endif + if(Drives[drive]->MakeDir(fulldir)) return true; + + /* Determine reason for failing */ + if(Drives[drive]->TestDir(fulldir)) + DOS_SetError(DOSERR_ACCESS_DENIED); + else + DOS_SetError(DOSERR_PATH_NOT_FOUND); + return false; +} + +bool DOS_RemoveDir(char const * const dir) { +/* We need to do the test before the removal as can not rely on + * the host to forbid removal of the current directory. + * We never change directory. Everything happens in the drives. + */ + uint8_t drive;char fulldir[DOS_PATHLENGTH]; + if (!DOS_MakeName(dir,fulldir,&drive)) return false; + /* Check if exists */ +#if !defined(OSFREE) +# if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + if (Network_IsNetworkResource(dir)) return Network_RemoveDir(dir); +# endif +#endif + if(!Drives[drive]->TestDir(fulldir)) { + DOS_SetError(DOSERR_PATH_NOT_FOUND); + return false; + } + /* See if it's current directory */ + char currdir[DOS_PATHLENGTH]= { 0 }, lcurrdir[DOS_PATHLENGTH]= { 0 }; + DOS_GetCurrentDir(drive + 1 ,currdir, false); + DOS_GetCurrentDir(drive + 1 ,lcurrdir, true); + if(strcasecmp(currdir,fulldir) == 0 || (uselfn && strcasecmp(lcurrdir,fulldir) == 0)) { + DOS_SetError(DOSERR_REMOVE_CURRENT_DIRECTORY); + return false; + } + + if(Drives[drive]->RemoveDir(fulldir)) return true; + + /* Failed. We know it exists and it's not the current dir */ + /* Assume non empty */ + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; +} + +static bool PathExists(char const * const name) { + const char* leading = strrchr_dbcs((char *)name,'\\'); + if(!leading) return true; + char temp[CROSS_LEN]; + strcpy(temp,name); + char * lead = strrchr_dbcs(temp,'\\'); + if (lead == temp) return true; + *lead = 0; + uint8_t drive;char fulldir[DOS_PATHLENGTH]; + if (!DOS_MakeName(temp,fulldir,&drive)) return false; + if(!Drives[drive]->TestDir(fulldir)) return false; + return true; +} + +bool DOS_Rename(char const * const oldname,char const * const newname) { + uint8_t driveold;char fullold[DOS_PATHLENGTH]; + uint8_t drivenew;char fullnew[DOS_PATHLENGTH]; + if (!DOS_MakeName(oldname,fullold,&driveold)) return false; + if (!DOS_MakeName(newname,fullnew,&drivenew)) return false; + while (strlen(fullnew)&&(*(fullnew+strlen(fullnew)-1)=='.'||*(fullnew+strlen(fullnew)-1)==' ')) *(fullnew+strlen(fullnew)-1)=0; +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + #if !defined(OSFREE) + if (Network_IsNetworkResource(oldname)) return Network_Rename(oldname,newname); #endif - if (!find_last) { /*No dir */ - strcpy(pattern,fullsearch); - dir[0]=0; - } else { - *find_last=0; - strcpy(pattern,find_last+1); - strcpy(dir,fullsearch); - } - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (!strlen(dir)&&Network_IsNetworkResource(pattern)) {forcelfn=false;return false;} +#endif + + /* No tricks with devices */ + bool clip=false; + if ( (DOS_FindDevice(oldname) != DOS_DEVICES) || + (DOS_FindDevice(newname) != DOS_DEVICES) ) { + if (!control->SecureMode()&&(dos_clipboard_device_access==3||dos_clipboard_device_access==4)) { + if (DOS_FindDevice(oldname) == DOS_DEVICES) { + const char* find_last; + find_last=strrchr_dbcs(fullnew,'\\'); + if (find_last==NULL) find_last=fullnew; + else find_last++; + if (!strcasecmp(find_last, *dos_clipboard_device_name?dos_clipboard_device_name:"CLIP$")) + clip=true; + } + } + if (!clip) { + DOS_SetError(DOSERR_FILE_NOT_FOUND); + return false; + } + } + /* Must be on the same drive */ + if(driveold != drivenew) { + DOS_SetError(DOSERR_NOT_SAME_DEVICE); + return false; + } + uint16_t attr; + /* Source must exist */ + if (!Drives[driveold]->GetFileAttr( fullold, &attr ) ) { + if (!PathExists(oldname)) DOS_SetError(DOSERR_PATH_NOT_FOUND); + else DOS_SetError(DOSERR_FILE_NOT_FOUND); + return false; + } + /*Test if target exists => no access */ + if(Drives[drivenew]->GetFileAttr(fullnew,&attr)&&!(uselfn&&!force_sfn&&strcmp(fullold, fullnew)&&!strcasecmp(fullold, fullnew))) { + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; + } + +#if defined (WIN32) + if (clip) { + uint16_t sourceHandle, targetHandle, toread = 0x8000; + static uint8_t buffer[0x8000]; + bool failed = false; + if (DOS_OpenFile(oldname,OPEN_READ,&sourceHandle) && DOS_OpenFile(newname,OPEN_WRITE,&targetHandle)) { + do { + if (!DOS_ReadFile(sourceHandle,buffer,&toread) || !DOS_WriteFile(targetHandle,buffer,&toread)) failed=true; + } while (toread == 0x8000); + if (!DOS_CloseFile(sourceHandle)||!DOS_CloseFile(targetHandle)) failed=true; + } else failed=true; + if (!failed&&Drives[drivenew]->FileUnlink(fullold)) return true; + } else +#endif + + if (Drives[drivenew]->Rename(fullold,fullnew)) return true; + /* Rename failed despite checks => no access */ + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; +} + +bool forcelfn = false; +bool DOS_FindFirst(const char * search,uint16_t attr,bool fcb_findfirst) { + LOG(LOG_FILES,LOG_NORMAL)("file search attributes %X name %s",attr,search); + DOS_DTA dta(dos.dta()); + uint8_t drive;char fullsearch[DOS_PATHLENGTH]; + char dir[DOS_PATHLENGTH];char pattern[DOS_PATHLENGTH]; + size_t len = strlen(search); + if(len && check_last_split_char(search, len, '\\') && !( (len > 2) && (search[len - 2] == ':') && (attr == DOS_ATTR_VOLUME) )) { + //Dark Forces installer, but c:\ is alright for volume labels(exclusively set) + DOS_SetError(DOSERR_NO_MORE_FILES); + return false; + } + + if (attr == DOS_ATTR_VOLUME) { + const char* vol_pattern = search; + + /* Optional drive specification */ + if (search[1] == ':') { + drive = (search[0] | 0x20) - 'a'; + vol_pattern = search + 2; + } + else { + drive = DOS_GetDefaultDrive(); + } + if (drive >= DOS_DRIVES || !Drives[drive]) { + DOS_SetError(DOSERR_PATH_NOT_FOUND); + return false; + } + sdrive = drive; + while (*vol_pattern == '\\') vol_pattern++; /* Creative Sound Blaster Pro 2.0 INSTALL uses "A:\*.*" to read volume label */ + dta.SetupSearch(drive, (uint8_t)attr, vol_pattern); + + return Drives[drive]->FindFirst("", dta, fcb_findfirst); + } + + if (!DOS_MakeName(search,fullsearch,&drive)) return false; + //Check for devices. FindDevice checks for leading subdir as well + bool device = (DOS_FindDevice(search) != DOS_DEVICES); + + /* Split the search in dir and pattern */ + forcelfn = false; + char *find_last = NULL; +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) +#if !defined(OSFREE) + bool net = Network_IsNetworkResource(search); + if (net) forcelfn = true; + char *p = net ? strchr_dbcs(fullsearch+(fullsearch[0]=='"'?3:2), '\\') : NULL; + find_last = strrchr_dbcs(p != NULL ? p + 1 : fullsearch, '\\'); +#endif +#else + find_last = strrchr_dbcs(fullsearch,'\\'); +#endif + if (!find_last) { /*No dir */ + strcpy(pattern,fullsearch); + dir[0]=0; + } else { + *find_last=0; + strcpy(pattern,find_last+1); + strcpy(dir,fullsearch); + } +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) +#if !defined(OSFREE) + if (!strlen(dir)&&Network_IsNetworkResource(pattern)) {forcelfn=false;return false;} +#endif +#endif + + // Silence CHKDSK "Invalid sub-directory entry" + if (fcb_findfirst && !strcmp(search+1, ":????????.???") && attr==30) { + char psp_name[9]; + DOS_MCB psp_mcb(dos.psp()-1); + psp_mcb.GetFileName(psp_name); + if (!strcmp(psp_name, "CHKDSK")) attr&=~DOS_ATTR_DIRECTORY; + } + + sdrive=drive; + dta.SetupSearch(drive,(uint8_t)attr,pattern); + forcelfn = false; + + if(device) { + find_last = strrchr(pattern,'.'); + if(find_last) *find_last = 0; + //TODO use current date and time + dta.SetResult(pattern,pattern,0,0,0,0,DOS_ATTR_DEVICE); + LOG(LOG_DOSMISC,LOG_WARN)("finding device %s",pattern); + return true; + } + +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) +#if !defined(OSFREE) + if (net) return Network_FindFirst(dir,dta); +#endif +#endif + if (Drives[drive]->FindFirst(dir,dta,fcb_findfirst)) return true; + return false; +} + +bool DOS_FindNext(void) { + DOS_DTA dta(dos.dta()); + uint8_t i = dta.GetSearchDrive(); + if(uselfn && (i >= DOS_DRIVES || !Drives[i])) i=sdrive; + if(i >= DOS_DRIVES || !Drives[i]) { + /* Corrupt search. */ + LOG(LOG_FILES,LOG_ERROR)("Corrupt search!!!!"); + DOS_SetError(DOSERR_NO_MORE_FILES); + return false; + } +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + #if !defined(OSFREE) + unsigned int pos = lfn_filefind_handle>=LFN_FILEFIND_MAX?dta.GetDirID():lfn_id[lfn_filefind_handle]; + if (pos==65534) return Network_FindNext(dta); #endif - - // Silence CHKDSK "Invalid sub-directory entry" - if (fcb_findfirst && !strcmp(search+1, ":????????.???") && attr==30) { - char psp_name[9]; - DOS_MCB psp_mcb(dos.psp()-1); - psp_mcb.GetFileName(psp_name); - if (!strcmp(psp_name, "CHKDSK")) attr&=~DOS_ATTR_DIRECTORY; - } - - sdrive=drive; - dta.SetupSearch(drive,(uint8_t)attr,pattern); - forcelfn = false; - - if(device) { - find_last = strrchr(pattern,'.'); - if(find_last) *find_last = 0; - //TODO use current date and time - dta.SetResult(pattern,pattern,0,0,0,0,DOS_ATTR_DEVICE); - LOG(LOG_DOSMISC,LOG_WARN)("finding device %s",pattern); - return true; - } - - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (net) return Network_FindFirst(dir,dta); +#endif + if (Drives[i]->FindNext(dta)) return true; + return false; +} + + +bool DOS_ReadFile(uint16_t entry,uint8_t * data,uint16_t * amount,bool fcb) { + uint32_t handle = fcb?entry:RealHandle(entry); + if (handle>=DOS_FILES) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + #if !defined(OSFREE) + if(Network_IsActiveResource(entry)) + return Network_ReadFile(entry,data,amount); #endif - if (Drives[drive]->FindFirst(dir,dta,fcb_findfirst)) return true; - return false; - } - - bool DOS_FindNext(void) { - DOS_DTA dta(dos.dta()); - uint8_t i = dta.GetSearchDrive(); - if(uselfn && (i >= DOS_DRIVES || !Drives[i])) i=sdrive; - if(i >= DOS_DRIVES || !Drives[i]) { - /* Corrupt search. */ - LOG(LOG_FILES,LOG_ERROR)("Corrupt search!!!!"); - DOS_SetError(DOSERR_NO_MORE_FILES); - return false; - } - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - unsigned int pos = lfn_filefind_handle>=LFN_FILEFIND_MAX?dta.GetDirID():lfn_id[lfn_filefind_handle]; - if (pos==65534) return Network_FindNext(dta); +#endif + if (!Files[handle] || !Files[handle]->IsOpen()) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + + if (log_fileio) { + LOG(LOG_FILES, LOG_DEBUG)("Reading %d bytes from %s ", *amount, Files[handle]->name); + } +/* + if ((Files[handle]->flags & 0x0f) == OPEN_WRITE)) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } +*/ + uint16_t toread=*amount; + bool ret=Files[handle]->Read(data,&toread); + *amount=toread; + return ret; +} + +bool DOS_WriteFile(uint16_t entry,const uint8_t * data,uint16_t * amount,bool fcb) { + uint32_t handle = fcb?entry:RealHandle(entry); + if (handle>=DOS_FILES) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + #if !defined(OSFREE) + if(Network_IsActiveResource(entry)) + return Network_WriteFile(entry,data,amount); #endif - if (Drives[i]->FindNext(dta)) return true; - return false; - } - - - bool DOS_ReadFile(uint16_t entry,uint8_t * data,uint16_t * amount,bool fcb) { - uint32_t handle = fcb?entry:RealHandle(entry); - if (handle>=DOS_FILES) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if(Network_IsActiveResource(entry)) - return Network_ReadFile(entry,data,amount); +#endif + if (!Files[handle] || !Files[handle]->IsOpen()) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + + if (log_fileio) { + LOG(LOG_FILES, LOG_DEBUG)("Writing %d bytes to %s", *amount, Files[handle]->name); + } +/* + if ((Files[handle]->flags & 0x0f) == OPEN_READ)) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } +*/ + uint16_t towrite=*amount; + bool ret=Files[handle]->Write(data,&towrite); + *amount=towrite; + return ret; +} + +bool DOS_SeekFile(uint16_t entry,uint32_t * pos,uint32_t type,bool fcb) { + uint32_t handle = fcb?entry:RealHandle(entry); + if (handle>=DOS_FILES) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) +# if !defined(OSFREE) + if(Network_IsActiveResource(entry)) + return Network_SeekFile(entry,pos,type); +# endif +#endif + if (!Files[handle] || !Files[handle]->IsOpen()) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + + if (log_fileio) { + LOG(LOG_FILES, LOG_DEBUG)("Seeking to %d bytes from position type (%d) in %s ", *pos, type, Files[handle]->name); + } + + return Files[handle]->Seek(pos,type); +} + +/* ert, 20100711: Locking extensions */ +bool DOS_LockFile(uint16_t entry,uint8_t mode,uint32_t pos,uint32_t size) { + uint32_t handle=RealHandle(entry); + if (handle>=DOS_FILES) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + if (!Files[handle] || !Files[handle]->IsOpen()) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + return Files[handle]->LockFile(mode,pos,size); +} + +bool DOS_CloseFile(uint16_t entry, bool fcb, uint8_t * refcnt) { + uint32_t handle = fcb?entry:RealHandle(entry); + if (handle>=DOS_FILES) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) +# if !defined(OSFREE) + if(Network_IsActiveResource(entry)) + return Network_CloseFile(entry); +# endif +#endif + if (!Files[handle]) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + if (Files[handle]->IsOpen()) { + if (log_fileio) { + LOG(LOG_FILES, LOG_NORMAL)("Closing file %s", Files[handle]->name); + } + Files[handle]->Close(); + } + + DOS_PSP psp(dos.psp()); + if (!fcb) psp.SetFileHandle(entry,0xff); + + Bits refs=Files[handle]->RemoveRef(); + if (refs<=0) { + if (!Files[handle]->neverclose) { // Prevent removal of CON/AUX/PRN from SFT + delete Files[handle]; + Files[handle]=nullptr; + } + } + if (refcnt!=NULL) *refcnt=static_cast(refs+1); + return true; +} + +bool DOS_FlushFile(uint16_t entry) { + uint32_t handle=RealHandle(entry); + if (handle>=DOS_FILES) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + #if !defined(OSFREE) + if(Network_IsActiveResource(entry)) + return Network_FlushFile(entry); #endif - if (!Files[handle] || !Files[handle]->IsOpen()) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - - if (log_fileio) { - LOG(LOG_FILES, LOG_DEBUG)("Reading %d bytes from %s ", *amount, Files[handle]->name); - } - /* - if ((Files[handle]->flags & 0x0f) == OPEN_WRITE)) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } +#endif + if (!Files[handle] || !Files[handle]->IsOpen()) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + + LOG(LOG_DOSMISC,LOG_DEBUG)("FFlush used."); + + Files[handle]->Flush(); + return true; +} + +#if defined(OSFREE) +bool openfile_deny_non_z=true; +#endif + +bool DOS_CreateFile(char const * name,uint16_t attributes,uint16_t * entry,bool fcb) { + // Creation of a device is the same as opening it + // Tc201 installer + if (DOS_FindDevice(name) != DOS_DEVICES) + return DOS_OpenFile(name, OPEN_READ, entry, fcb); + + LOG(LOG_FILES,LOG_NORMAL)("file create attributes %X file %s",attributes,name); + char fullname[DOS_PATHLENGTH];uint8_t drive; + DOS_PSP psp(dos.psp()); + if (!DOS_MakeName(name,fullname,&drive)) return false; + +#if defined(OSFREE) + /* in OSFREE mode, only drive Z: is permitted */ + if (drive != 25 && openfile_deny_non_z) { + LOG(LOG_FILES,LOG_NORMAL)("OSFREE policy: access denied to drive %c -> %s",drive+'A',fullname); + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; + } +#endif + + while (strlen(fullname)&&(*(fullname+strlen(fullname)-1)=='.'||*(fullname+strlen(fullname)-1)==' ')) *(fullname+strlen(fullname)-1)=0; +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) +# if !defined(OSFREE) + if(Network_IsNetworkResource(name)) + return Network_CreateFile(name,attributes,entry); +# endif +#endif + + /* Check for a free file handle */ + uint8_t handle=(uint8_t)DOS_FILES;uint8_t i; + for (i=0;iFileCreate(&Files[handle],fullname,attributes); + if (foundit) { + if (Files[handle]) { + Files[handle]->SetDrive(drive); + Files[handle]->AddRef(); + Files[handle]->drive = drive; + } + if (!fcb) psp.SetFileHandle(*entry,handle); + if (Files[handle]) Drives[drive]->EmptyCache(); + return true; + } else { + if(dos.errorcode==DOSERR_ACCESS_DENIED||dos.errorcode==DOSERR_WRITE_PROTECTED) return false; + if(!PathExists(name)) DOS_SetError(DOSERR_PATH_NOT_FOUND); + else DOS_SetError(DOSERR_FILE_NOT_FOUND); + return false; + } +} + +bool DOS_OpenExistingSFTEntry(uint16_t jft_handle,int sft_handle) { + DOS_PSP psp(dos.psp()); + + if (sft_handle >= 0 && sft_handle < 255 && Files[sft_handle] != NULL) + psp.SetFileHandle(jft_handle,sft_handle); + else + psp.SetFileHandle(jft_handle,0xFF); + + return true; +} + +bool DOS_OpenFile(char const * name,uint8_t flags,uint16_t * entry,bool fcb) { + /* First check for devices */ + if (flags>2) LOG(LOG_FILES,LOG_NORMAL)("Special file open command %X file %s",flags,name); // FIXME: Why? Is there something about special opens DOSBox doesn't handle properly? + else LOG(LOG_FILES,LOG_NORMAL)("file open command %X file %s",flags,name); + + DOS_PSP psp(dos.psp()); + uint16_t attr = 0; + uint8_t devnum = DOS_FindDevice(name); + bool device = (devnum != DOS_DEVICES); + if(!device && DOS_GetFileAttr(name,&attr)) { + //DON'T ALLOW directories to be opened. (skip test if file is device). + if((attr & DOS_ATTR_DIRECTORY) || (attr & DOS_ATTR_VOLUME)){ + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; + } + } + + char fullname[DOS_PATHLENGTH];uint8_t drive;uint8_t i; + /* First check if the name is correct */ + if (!DOS_MakeName(name,fullname,&drive)) return false; + +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) +# if !defined(OSFREE) + if(Network_IsNetworkResource(name)) + return Network_OpenFile(name,flags,entry); +# endif +#endif + uint8_t handle=255; + /* Check for a free file handle */ + for (i=0;iGetInformation() & DeviceInfoFlags::ExternalDevice) + Files[handle] = new DOS_ExtDevice(*(DOS_ExtDevice*)Devices[devnum]); + else + Files[handle] = new DOS_Device(*Devices[devnum]); + } else { +#if defined(OSFREE) + /* in OSFREE mode, only drive Z: is permitted */ + if (drive != 25 && openfile_deny_non_z) { + LOG(LOG_FILES,LOG_NORMAL)("OSFREE policy: access denied to drive %c -> %s",drive+'A',fullname); + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; + } +#endif + + uint16_t olderror=dos.errorcode; + dos.errorcode=0; + exists=Drives[drive]->FileOpen(&Files[handle],fullname,flags) || Drives[drive]->FileOpen(&Files[handle],upcase(fullname),flags); + if (exists) Files[handle]->SetDrive(drive); + else if (dos.errorcode==DOSERR_ACCESS_CODE_INVALID) return false; + dos.errorcode=olderror; + } + if (exists || device) { + Files[handle]->AddRef(); + psp.SetFileHandle(*entry,handle); + Files[handle]->drive = drive; + return true; + } else { + //Test if file exists, but opened in read-write mode (and writeprotected) + if((((flags&3) != OPEN_READ) || (enable_share_exe && !strncmp(Drives[drive]->GetInfo(),"local directory ",16))) && Drives[drive]->FileExists(fullname)) + DOS_SetError(DOSERR_ACCESS_DENIED); + else { + if(!PathExists(name)) DOS_SetError(DOSERR_PATH_NOT_FOUND); + else DOS_SetError(DOSERR_FILE_NOT_FOUND); + } + return false; + } +} + +bool DOS_OpenFileExtended(char const * name, uint16_t flags, uint16_t createAttr, uint16_t action, uint16_t *entry, uint16_t* status) { +// FIXME: Not yet supported : Bit 12 of flags (FAT32 allow files up to 4GB instead of 2GB) +// FIXME: Not yet supported : Bit 13 of flags (int 0x24 on critical error) +// FIXME: Not yet supported : Bit 14 of flags (auto commit on every write) + uint16_t result = 0; + if (action==0) { + // always fail setting + DOS_SetError(DOSERR_FUNCTION_NUMBER_INVALID); + return false; + } else { + if (((action & 0x0f)>2) || ((action & 0xf0)>0x10)) { + // invalid action parameter + DOS_SetError(DOSERR_FUNCTION_NUMBER_INVALID); + return false; + } + } + if (DOS_OpenFile(name, (uint8_t)(flags&0xff), entry)) { + // File already exists + switch (action & 0x0f) { + case 0x00: // failed + DOS_SetError(DOSERR_FILE_ALREADY_EXISTS); + return false; + case 0x01: // file open (already done) + result = 1; + break; + case 0x02: // replace + DOS_CloseFile(*entry); + if (!DOS_CreateFile(name, createAttr, entry)) return false; + result = 3; + break; + default: + DOS_SetError(DOSERR_FUNCTION_NUMBER_INVALID); + E_Exit("DOS: OpenFileExtended: Unknown action."); + break; + } + } else { + // File doesn't exist + if ((action & 0xf0)==0) { + // uses error code from failed open + return false; + } + // Create File + if (!DOS_CreateFile(name, createAttr, entry)) { + // uses error code from failed create + return false; + } + result = 2; + } + // success + *status = result; + return true; +} + +bool DOS_UnlinkFile(char const * const name) { + char fullname[DOS_PATHLENGTH];uint8_t drive; + // An existing device returns an access denied error + if (log_fileio) { + LOG(LOG_FILES, LOG_NORMAL)("Deleting file %s", name); + } + if (DOS_FindDevice(name) != DOS_DEVICES) { + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; + } + if (!DOS_MakeName(name,fullname,&drive)) return false; + +#if defined(OSFREE) + /* in OSFREE mode, only drive Z: is permitted */ + if (drive != 25 && openfile_deny_non_z) { + LOG(LOG_FILES,LOG_NORMAL)("OSFREE policy: access denied to drive %c -> %s",drive+'A',fullname); + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; + } +#endif + +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) +# if !defined(OSFREE) + if (Network_IsNetworkResource(name)) return Network_UnlinkFile(name); +# endif +#endif + if(Drives[drive]->FileUnlink(fullname)){ + return true; + } else if(uselfn&&!force_sfn&&(strchr(fullname, '*')||strchr(fullname, '?'))) { // Wildcard delete as used by MS-DOS 7+ "DEL *.*" in LFN mode + char dir[DOS_PATHLENGTH], temp[DOS_PATHLENGTH], fname[DOS_PATHLENGTH], spath[DOS_PATHLENGTH], pattern[DOS_PATHLENGTH]; + if (!DOS_Canonicalize(name,fullname)||!strlen(fullname)) { + DOS_SetError(DOSERR_PATH_NOT_FOUND); + return false; + } + if (!strchr(name,'\"')||!DOS_GetSFNPath(("\""+std::string(fullname)+"\"").c_str(), fname, false)) + strcpy(fname, fullname); + char * find_last=strrchr_dbcs(fname,'\\'); + if (!find_last) { + dir[0]=0; + strcpy(pattern, fname); + } else { + *find_last=0; + strcpy(dir,fname); + strcpy(pattern, find_last+1); + } + int k=0; + for (int i=0;i<(int)strlen(pattern);i++) + if (pattern[i]!='\"') + pattern[k++]=pattern[i]; + pattern[k]=0; + RealPt save_dta=dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + std::vector cdirs; + cdirs.clear(); + strcpy(spath, dir); + if (!DOS_GetSFNPath(dir, spath, false)) strcpy(spath, dir); + if (!strlen(spath)||spath[strlen(spath)-1]!='\\') strcat(spath, "\\"); + std::string pfull=std::string(spath)+std::string(pattern); + int fbak=lfn_filefind_handle; + lfn_filefind_handle=LFN_FILEFIND_INTERNAL; + bool ret=DOS_FindFirst(((pfull.length()&&pfull[0]=='"'?"":"\"")+pfull+(pfull.length()&&pfull[pfull.length()-1]=='"'?"":"\"")).c_str(),0xffu & ~DOS_ATTR_VOLUME & ~DOS_ATTR_DIRECTORY); + if (ret) do { + char find_name[DOS_NAMELENGTH_ASCII],lfind_name[LFN_NAMELENGTH]; + uint16_t find_date,find_time;uint32_t find_size,find_hsize;uint8_t find_attr; + dta.GetResult(find_name,lfind_name,find_size,find_hsize,find_date,find_time,find_attr); + if (!(find_attr & DOS_ATTR_DIRECTORY)&&strlen(find_name)&&!strchr(find_name, '*')&&!strchr(find_name, '?')) { + strcpy(temp, dir); + if (strlen(temp)&&temp[strlen(temp)-1]!='\\') strcat(temp, "\\"); + strcat(temp, find_name); + cdirs.emplace_back(std::string(temp)); + } + } while ((ret=DOS_FindNext())==true); + lfn_filefind_handle=fbak; + bool removed=false; + while (!cdirs.empty()) { + if (DOS_UnlinkFile(cdirs.begin()->c_str())) + removed=true; + cdirs.erase(cdirs.begin()); + } + dos.dta(save_dta); + if (removed) + return true; + else { + if (dos.errorcode!=DOSERR_ACCESS_DENIED&&dos.errorcode!=DOSERR_WRITE_PROTECTED) DOS_SetError(DOSERR_FILE_NOT_FOUND); + return false; + } + } else { + if (dos.errorcode!=DOSERR_ACCESS_DENIED&&dos.errorcode!=DOSERR_WRITE_PROTECTED) DOS_SetError(DOSERR_FILE_NOT_FOUND); + return false; + } +} + +bool DOS_GetFileAttr(char const * const name,uint16_t * attr) { + char fullname[DOS_PATHLENGTH];uint8_t drive; + if (!DOS_MakeName(name,fullname,&drive)) return false; +#if defined (WIN32) + if (!control->SecureMode()&&dos_clipboard_device_access) { + const char* find_last; + find_last=strrchr_dbcs(fullname,'\\'); + if (find_last==NULL) find_last=fullname; + else find_last++; + if (!strcasecmp(find_last, *dos_clipboard_device_name?dos_clipboard_device_name:"CLIP$")) + return true; + } +#if !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) +# if !defined(OSFREE) + if (Network_IsNetworkResource(name)) { + if (Network_GetFileAttr(name, attr)) { + return true; + } else { + DOS_SetError(DOSERR_FILE_NOT_FOUND); + return false; + } + } +# endif +#endif +#endif + + if (Drives[drive]->GetFileAttr(fullname,attr)) { + return true; + } else { + DOS_SetError(DOSERR_FILE_NOT_FOUND); + return false; + } +} + +unsigned long DOS_GetCompressedFileSize(char const* const name) +{ + char fullname[DOS_PATHLENGTH]; + uint8_t drive; + if (!DOS_MakeName(name, fullname, &drive)) + return false; + return Drives[drive]->GetCompressedSize(fullname); +} + +#if defined (WIN32) +HANDLE DOS_CreateOpenFile(char const* const name) +{ + char fullname[DOS_PATHLENGTH]; + uint8_t drive; + if (!DOS_MakeName(name, fullname, &drive)) + return INVALID_HANDLE_VALUE; + +#if defined(OSFREE) + /* in OSFREE mode, only drive Z: is permitted */ + if (drive != 25 && openfile_deny_non_z) { + LOG(LOG_FILES,LOG_NORMAL)("OSFREE policy: access denied to drive %c -> %s",drive+'A',fullname); + return INVALID_HANDLE_VALUE; + } +#endif + + return Drives[drive]->CreateOpenFile(fullname); +} +#endif + +bool DOS_SetFileAttr(char const * const name,uint16_t attr) +// returns false when using on cdrom (stonekeep) +{ + char fullname[DOS_PATHLENGTH];uint8_t drive; + if (!DOS_MakeName(name,fullname,&drive)) return false; + +#if defined(OSFREE) + /* in OSFREE mode, only drive Z: is permitted */ + if (drive != 25 && openfile_deny_non_z) { + LOG(LOG_FILES,LOG_NORMAL)("OSFREE policy: access denied to drive %c -> %s",drive+'A',fullname); + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; + } +#endif + + if (strncmp(Drives[drive]->GetInfo(),"CDRom ",6)==0 || strncmp(Drives[drive]->GetInfo(),"isoDrive ",9)==0) { + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; + } + + /* This function must prevent changing a file into a directory, volume label into a file, etc. + * Also Windows 95 setup likes to create WINBOOT.INI as a file and then chattr it into a directory for some stupid reason. */ + uint16_t old_attr; +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) +# if !defined(OSFREE) + if ((Network_IsNetworkResource(name)&&!Network_GetFileAttr(name,&old_attr))||(!Network_IsNetworkResource(name)&&!Drives[drive]->GetFileAttr(fullname,&old_attr))) +# endif +#else + if (!Drives[drive]->GetFileAttr(fullname,&old_attr)) +#endif + { + DOS_SetError(DOSERR_FILE_NOT_FOUND); + return false; + } + + if ((old_attr ^ attr) & DOS_ATTR_VOLUME) { /* change in volume label attribute */ + LOG(LOG_DOSMISC,LOG_WARN)("Attempted to change volume label attribute of '%s' with SetFileAttr",name); + return false; + } + + if ((old_attr ^ attr) & DOS_ATTR_DIRECTORY) /* change in directory attribute (ex: Windows 95 SETUP.EXE vs WINBOOT.INI) */ + LOG(LOG_DOSMISC,LOG_WARN)("Attempted to change directory attribute of '%s' with SetFileAttr",name); + + /* define what cannot be changed */ + const uint16_t attr_mask = (DOS_ATTR_VOLUME|DOS_ATTR_DIRECTORY); + + attr = (attr & ~attr_mask) | (old_attr & attr_mask); + +#if !defined(OSFREE) +# if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + if (Network_IsNetworkResource(name)) return Network_SetFileAttr(name,attr); +# endif +#endif + return Drives[drive]->SetFileAttr(fullname,attr); +} + +bool DOS_Canonicalize(char const * const name,char * const big) { +//TODO Add Better support for devices and shit but will it be needed i doubt it :) + uint8_t drive; + char fullname[DOS_PATHLENGTH]; + if (!DOS_MakeName(name,fullname,&drive)) return false; +#if !defined(OSFREE) +# if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + if (Network_IsNetworkResource(name)) { + strcpy(&big[0], name); + return true; + } +# endif +#endif + big[0]=drive+'A'; + big[1]=':'; + big[2]='\\'; + strcpy(&big[3],fullname); + return true; +} + +#ifdef _MSC_VER +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +#else +# define MIN(a,b) std::min(a,b) +# define MAX(a,b) std::max(a,b) +#endif + +/* Common routine to take larger allocation information (such as FAT32) and convert it to values + * that are suitable for use with older DOS programs that pre-date FAT32 and partitions 2GB or larger. + * This is what Windows 95 OSR2 and higher do with FAT32 partitions anyway, as documented by Microsoft. */ +bool DOS_CommonFAT32FAT16DiskSpaceConv( + uint16_t * bytes,uint8_t * sectors,uint16_t * clusters,uint16_t * free, + const uint32_t bytes32,const uint32_t sectors32,const uint32_t clusters32,const uint32_t free32) { + uint32_t cdiv = 1; + + if (sectors32 > 128 || bytes32 > 0x8000) + return false; + + /* This function is for the old API. It is necessary to adjust the values so that they never overflow + * 16-bit unsigned integers and never multiply out to a number greater than just under 2GB. Because + * old DOS programs use 32-bit signed integers for disk total/free and FAT12/FAT16 filesystem limitations. */ + /* NTS: Make sure (bytes per sector * sectors per cluster) is less than 0x10000, or else FORMAT.COM will + * crash with divide by zero or produce incorrect results when run with "FORMAT /S" */ + while ((clusters32 > 0xFFFFu || free32 > 0xFFFFu) && (sectors32 * cdiv) <= 64u && (bytes32 * sectors32 * cdiv) < 0x8000/*Needed for FORMAT.COM*/) + cdiv *= 2u; + + /* The old API must never report more than just under 2GB for total and free */ + const uint32_t clust2gb = (uint32_t)0x7FFF8000ul / (uint32_t)bytes32 / (sectors32 * cdiv); + + *bytes = bytes32; + *sectors = sectors32 * cdiv; + *clusters = (uint16_t)MIN(MIN(clusters32 / cdiv,clust2gb),0xFFFFu); + *free = (uint16_t)MIN(MIN(free32 / cdiv,clust2gb),0xFFFFu); + return true; +} + +bool DOS_GetFreeDiskSpace(uint8_t drive,uint16_t * bytes,uint8_t * sectors,uint16_t * clusters,uint16_t * free) { + if (drive==0) drive=DOS_GetDefaultDrive(); + else drive--; + if ((drive>=DOS_DRIVES) || (!Drives[drive])) { + DOS_SetError(DOSERR_INVALID_DRIVE); + return false; + } + + { + uint32_t bytes32,sectors32,clusters32,free32; + if ((dos.version.major > 7 || (dos.version.major == 7 && dos.version.minor >= 10)) && + Drives[drive]->AllocationInfo32(&bytes32,§ors32,&clusters32,&free32) && + DOS_CommonFAT32FAT16DiskSpaceConv(bytes,sectors,clusters,free,bytes32,sectors32,clusters32,free32)) + return true; + } + + if (Drives[drive]->AllocationInfo(bytes,sectors,clusters,free)) + return true; + + return false; +} + +bool DOS_GetFreeDiskSpace32(uint8_t drive,uint32_t * bytes,uint32_t * sectors,uint32_t * clusters,uint32_t * free) { + if (drive==0) drive=DOS_GetDefaultDrive(); + else drive--; + if ((drive>=DOS_DRIVES) || (!Drives[drive])) { + DOS_SetError(DOSERR_INVALID_DRIVE); + return false; + } + + if ((dos.version.major > 7 || (dos.version.major == 7 && dos.version.minor >= 10)) && Drives[drive]->AllocationInfo32(bytes,sectors,clusters,free)) + return true; + + { + uint8_t sectors8; + uint16_t bytes16,clusters16,free16; + if (Drives[drive]->AllocationInfo(&bytes16,§ors8,&clusters16,&free16)) { + *free = free16; + *bytes = bytes16; + *sectors = sectors8; + *clusters = clusters16; + return true; + } + } + + return false; +} + +bool DOS_DuplicateEntry(uint16_t entry,uint16_t * newentry) { + // Don't duplicate console handles +/* if (entry<=STDPRN) { + *newentry = entry; + return true; + }; +*/ + uint8_t handle=RealHandle(entry); + if (handle>=DOS_FILES) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + if (!Files[handle] || !Files[handle]->IsOpen()) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + DOS_PSP psp(dos.psp()); + *newentry = psp.FindFreeFileEntry(); + if (*newentry==0xff) { + DOS_SetError(DOSERR_TOO_MANY_OPEN_FILES); + return false; + } + Files[handle]->AddRef(); + psp.SetFileHandle(*newentry,handle); + return true; +} + +bool DOS_ForceDuplicateEntry(uint16_t entry,uint16_t newentry) { + if(entry == newentry) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + uint8_t orig = RealHandle(entry); + if (orig >= DOS_FILES) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + if (!Files[orig] || !Files[orig]->IsOpen()) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + uint8_t newone = RealHandle(newentry); + if (newone < DOS_FILES && Files[newone]) { + DOS_CloseFile(newentry); + } + DOS_PSP psp(dos.psp()); + Files[orig]->AddRef(); + psp.SetFileHandle(newentry,orig); + return true; +} + +void initRand() { +#ifdef WIN32 + srand(GetTickCount()); +#else + struct timespec ts; + unsigned theTick = 0U; + clock_gettime( CLOCK_REALTIME, &ts ); + theTick = ts.tv_nsec / 1000000; + theTick += ts.tv_sec * 1000; + srand(theTick); +#endif +} + +bool DOS_CreateTempFile(char * const name,uint16_t * entry) { + size_t namelen=strlen(name); + char * tempname=name+namelen; + if (namelen==0) { + // temp file created in root directory + tempname[0]='\\'; + tempname++; + } else { + if (!check_last_split_char(name, namelen, '\\') && (name[namelen-1]!='/')) { + tempname[0]='\\'; + tempname++; + } + } + uint16_t olderror=dos.errorcode; + dos.errorcode=0; + /* add random crap to the end of the name and try to open */ + initRand(); + bool cont; + do { + cont=false; + uint32_t i; + for (i=0;i<8;i++) { + tempname[i]=(rand()%26)+'A'; + } + tempname[8]=0; + //if (DOS_FileExists(name)) {cont=true;continue;} // FIXME: Check name uniqueness + } while (cont || DOS_FileExists(name)); + DOS_CreateFile(name,0,entry); + if (dos.errorcode) return false; + dos.errorcode=olderror; + return true; +} + +char DOS_ToUpper(char c) { + unsigned char uc = *reinterpret_cast(&c); + if (uc > 0x60 && uc < 0x7B) uc -= 0x20; + else if (uc > 0x7F && uc < 0xA5) { + const unsigned char t[0x25] = { + 0x00, 0x9a, 0x45, 0x41, 0x8E, 0x41, 0x8F, 0x80, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x00, 0x00, + 0x00, 0x92, 0x00, 0x4F, 0x99, 0x4F, 0x55, 0x55, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x41, 0x49, 0x4F, 0x55, 0xA5}; + if (t[uc - 0x80]) uc = t[uc-0x80]; + } + char sc = *reinterpret_cast(&uc); + return sc; +} + +#define FCB_SEP ":;,=+" +#define ILLEGAL ":.;,=+ \t/\"[]<>|" + +static bool isvalid(const char in){ + const char ill[]=ILLEGAL; + return (uint8_t(in)>0x1F) && (!strchr(ill,in)); +} + +#define PARSE_SEP_STOP 0x01 +#define PARSE_DFLT_DRIVE 0x02 +#define PARSE_BLNK_FNAME 0x04 +#define PARSE_BLNK_FEXT 0x08 + +#define PARSE_RET_NOWILD 0 +#define PARSE_RET_WILD 1 +#define PARSE_RET_BADDRIVE 0xff + +uint8_t FCB_Parsename(uint16_t seg,uint16_t offset,uint8_t parser ,char *string, uint8_t *change) { + const char* string_begin = string; + uint8_t ret=0; + if (!(parser & PARSE_DFLT_DRIVE)) { + // default drive forced, this intentionally invalidates an extended FCB + mem_writeb(PhysMake(seg,offset),0); + } + DOS_FCB fcb(seg,offset,false); // always a non-extended FCB + bool hasdrive,hasname,hasext,finished; + hasdrive=hasname=hasext=finished=false; + Bitu index=0; + uint8_t fill=' '; +/* First get the old data from the fcb */ +#ifdef _MSC_VER +#pragma pack (1) +#endif + union { + struct { + char drive[2]; + char name[9]; + char ext[4]; + } GCC_ATTRIBUTE (packed) part; + char full[DOS_FCBNAME]; + } fcb_name; +#ifdef _MSC_VER +#pragma pack() +#endif + /* Get the old information from the previous fcb */ + fcb.GetName(fcb_name.full); + fcb_name.part.drive[0]-='A'-1;fcb_name.part.drive[1]=0; + fcb_name.part.name[8]=0;fcb_name.part.ext[3]=0; + /* strip leading spaces */ + while((*string==' ')||(*string=='\t')) string++; + + /* Strip of the leading separator */ + if((parser & PARSE_SEP_STOP) && *string) { + char sep[] = FCB_SEP;char a[2]; + a[0] = *string;a[1] = '\0'; + if (strcspn(a,sep) == 0) string++; + } + + /* Skip following spaces as well */ + while((*string==' ')||(*string=='\t')) string++; + + /* Check for a drive */ + if (string[1]==':') { + unsigned char d = *reinterpret_cast(&string[0]); + if (!isvalid(ascii_toupper(d))) {string += 2; goto savefcb;} //TODO check (for ret value) + fcb_name.part.drive[0]=0; + hasdrive=true; + if (isalpha(d) && Drives[ascii_toupper(d)-'A']) { //Floppies under dos always exist, but don't bother with that at this level + ; //THIS* was here + } else ret=0xff; + fcb_name.part.drive[0]=DOS_ToUpper(string[0])-'A'+1; //Always do THIS* and continue parsing, just return the right code + string+=2; + } + + /* Check for extension only file names */ + if (string[0] == '.') {string++;goto checkext;} + + /* do nothing if not a valid name */ + if(!isvalid(string[0])) goto savefcb; + + hasname=true;finished=false;fill=' ';index=0; + /* Copy the name */ + while (true) { + unsigned char nc = *reinterpret_cast(&string[0]); + if ((IS_PC98_ARCH && shiftjis_lead_byte(nc)) || (isDBCSCP() && isKanji1(nc))) { + /* Shift-JIS is NOT ASCII and SHOULD NOT be converted to uppercase like ASCII */ + fcb_name.part.name[index]=(char)nc; + string++; + index++; + if (index >= 8) break; + + /* should be trailing byte of Shift-JIS */ + if (nc < 32 || nc >= 127) continue; + + fcb_name.part.name[index]=(char)nc; + } + else + { + char ncs = (char)ascii_toupper(nc); //Should use DOS_ToUpper, but then more calls need to be changed. + if (ncs == '*') { //Handle * + fill = '?'; + ncs = '?'; + } + if (ncs == '?' && !ret && index < 8) ret = 1; //Don't override bad drive + if (!isvalid(ncs)) { //Fill up the name. + while(index < 8) + fcb_name.part.name[index++] = (char)fill; + break; + } + if (index < 8) { + fcb_name.part.name[index++] = (char)((fill == '?')?fill:ncs); + } + } + string++; + } + if (!(string[0]=='.')) goto savefcb; + string++; +checkext: + /* Copy the extension */ + hasext=true;finished=false;fill=' ';index=0; + while (true) { + unsigned char nc = *reinterpret_cast(&string[0]); + if ((IS_PC98_ARCH && shiftjis_lead_byte(nc)) || (isDBCSCP() && isKanji1(nc))) { + /* DBCS is NOT ASCII and SHOULD NOT be converted to uppercase like ASCII */ + fcb_name.part.ext[index]=(char)nc; + string++; + index++; + if (index >= 3) break; + + /* should be trailing byte of DBCS character */ + if (nc < 32u || nc >= 127u) continue; + + fcb_name.part.ext[index]=(char)nc; + } + else + { + char ncs = (char)ascii_toupper(nc); + if (ncs == '*') { //Handle * + fill = '?'; + ncs = '?'; + } + if (ncs == '?' && !ret && index < 3) ret = 1; + if (!isvalid(ncs)) { //Fill up the name. + while(index < 3) + fcb_name.part.ext[index++] = (char)fill; + break; + } + if (index < 3) { + fcb_name.part.ext[index++] = (char)((fill=='?')?fill:ncs); + } + } + string++; + } +savefcb: + if (!hasdrive && !(parser & PARSE_DFLT_DRIVE)) fcb_name.part.drive[0] = 0; + if (!hasname && !(parser & PARSE_BLNK_FNAME)) strcpy(fcb_name.part.name," "); + if (!hasext && !(parser & PARSE_BLNK_FEXT)) strcpy(fcb_name.part.ext," "); + fcb.SetName((unsigned char)fcb_name.part.drive[0],fcb_name.part.name,fcb_name.part.ext); + fcb.ClearBlockRecsize(); //Undocumented bonus work. + *change=(uint8_t)(string-string_begin); + return ret; +} + +static void DTAExtendNameVolumeLabel(const char* const name, char* const filename, char* const ext) { + size_t i,s; + + i=0; + s=0; + while (i < 8 && name[s] != 0) filename[i++] = name[s++]; + while (i < 8) filename[i++] = ' '; + + i=0; + while (i < 3 && name[s] != 0) ext[i++] = name[s++]; + while (i < 3) ext[i++] = ' '; +} + +void DTAExtendName(char * const name,char * const filename,char * const ext) { + char * find=strchr(name,'.'); + if (find && find!=name) { + strcpy(ext,find+1); + *find=0; + } else ext[0]=0; + strcpy(filename,name); + size_t i; + for (i=strlen(name);i<8;i++) filename[i]=' '; + filename[8]=0; + for (i=strlen(ext);i<3;i++) ext[i]=' '; + ext[3]=0; +} + +static void SaveFindResult(DOS_FCB & find_fcb) { + DOS_DTA find_dta(dos.tables.tempdta); + char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH]; + uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr;uint8_t drive; + char file_name[9];char ext[4]; + find_dta.GetResult(name,lname,size,hsize,date,time,attr); + drive=find_fcb.GetDrive()+1; + uint8_t find_attr = DOS_ATTR_ARCHIVE; + find_fcb.GetAttr(find_attr); /* Gets search attributes if extended */ + /* Create a correct file and extension */ + if (attr & DOS_ATTR_VOLUME) + DTAExtendNameVolumeLabel(name,file_name,ext); + else + DTAExtendName(name,file_name,ext); + + DOS_FCB fcb(RealSeg(dos.dta()),RealOff(dos.dta()));//TODO + fcb.Create(find_fcb.Extended()); + fcb.SetName(drive,file_name,ext); + fcb.SetAttr(find_attr); /* Only adds attribute if fcb is extended */ + fcb.SetResult(size,date,time,attr); +} + +bool DOS_FCBCreate(uint16_t seg,uint16_t offset) { + DOS_FCB fcb(seg,offset); + char shortname[DOS_FCBNAME];uint16_t handle; + uint8_t attr = DOS_ATTR_ARCHIVE; + fcb.GetAttr(attr); + if (!attr) attr = DOS_ATTR_ARCHIVE; //Better safe than sorry + + if (attr & DOS_ATTR_VOLUME) { + fcb.GetVolumeName(shortname); + return Drives[fcb.GetDrive()]->FileCreate(NULL,shortname,attr); + } + + fcb.GetName(shortname); + if (!DOS_CreateFile(shortname,attr,&handle,true)) return false; + fcb.FileOpen((uint8_t)handle); + return true; +} + +bool DOS_FCBOpen(uint16_t seg,uint16_t offset) { + DOS_FCB fcb(seg,offset); + char shortname[DOS_FCBNAME];uint16_t handle; + fcb.GetName(shortname); + + /* Search for file if name has wildcards */ + if (strpbrk(shortname,"*?")) { + LOG(LOG_FCB,LOG_WARN)("Wildcards in filename"); + if (!DOS_FCBFindFirst(seg,offset)) return false; + DOS_DTA find_dta(dos.tables.tempdta); + DOS_FCB find_fcb(RealSeg(dos.tables.tempdta),RealOff(dos.tables.tempdta)); + char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH],file_name[9],ext[4]; + uint32_t size,hsize;uint16_t date,time;uint8_t attr; + find_dta.GetResult(name,lname,size,hsize,date,time,attr); + DTAExtendName(name,file_name,ext); + find_fcb.SetName(fcb.GetDrive()+1,file_name,ext); + find_fcb.GetName(shortname); + } + + /* First check if the name is correct */ + uint8_t drive; + char fullname[DOS_PATHLENGTH]; + if (!DOS_MakeName(shortname,fullname,&drive)) return false; + + /* Check, if file is already opened */ + for (uint8_t i = 0;i < DOS_FILES;i++) { + if (Files[i] && Files[i]->IsOpen() && Files[i]->IsName(fullname)) { + Files[i]->AddRef(); + fcb.FileOpen(i); + return true; + } + } + + if (!DOS_OpenFile(shortname,OPEN_READWRITE,&handle,true)) return false; + fcb.FileOpen((uint8_t)handle); + return true; +} + +bool DOS_FCBClose(uint16_t seg,uint16_t offset) { + DOS_FCB fcb(seg,offset); + if(!fcb.Valid()) return false; + uint8_t fhandle; + fcb.FileClose(fhandle); + DOS_CloseFile(fhandle,true); + return true; +} + +bool DOS_FCBFindFirst(uint16_t seg,uint16_t offset) { + DOS_FCB fcb(seg,offset); + RealPt old_dta=dos.dta();dos.dta(dos.tables.tempdta); + char name[DOS_FCBNAME];fcb.GetName(name); + uint8_t attr = DOS_ATTR_ARCHIVE; + fcb.GetAttr(attr); /* Gets search attributes if extended */ + bool ret=DOS_FindFirst(name,attr,true); + dos.dta(old_dta); + if (ret) SaveFindResult(fcb); + return ret; +} + +bool DOS_FCBFindNext(uint16_t seg,uint16_t offset) { + DOS_FCB fcb(seg,offset); + RealPt old_dta=dos.dta();dos.dta(dos.tables.tempdta); + bool ret=DOS_FindNext(); + dos.dta(old_dta); + if (ret) SaveFindResult(fcb); + return ret; +} + +uint8_t DOS_FCBRead(uint16_t seg,uint16_t offset,uint16_t recno) { + DOS_FCB fcb(seg,offset); + uint8_t fhandle,cur_rec;uint16_t cur_block,rec_size; + fcb.GetSeqData(fhandle,rec_size); + if (fhandle==0xff && rec_size!=0) { + if (!DOS_FCBOpen(seg,offset)) return FCB_READ_NODATA; + LOG(LOG_FCB,LOG_WARN)("Reopened closed FCB"); + fcb.GetSeqData(fhandle,rec_size); + } + if (rec_size == 0) { + rec_size = 128; + fcb.SetSeqData(fhandle,rec_size); + } + fcb.GetRecord(cur_block,cur_rec); + uint32_t pos=((cur_block*128u)+cur_rec)*rec_size; + if (!DOS_SeekFile(fhandle,&pos,DOS_SEEK_SET,true)) return FCB_READ_NODATA; + uint16_t toread=rec_size; + if (!DOS_ReadFile(fhandle,dos_copybuf,&toread,true)) return FCB_READ_NODATA; + if (toread==0) return FCB_READ_NODATA; + if (toread < rec_size) { //Zero pad copybuffer to rec_size + Bitu i = toread; + while(i < rec_size) dos_copybuf[i++] = 0; + } + MEM_BlockWrite(Real2Phys(dos.dta())+(PhysPt)(recno*rec_size),dos_copybuf,rec_size); + if (++cur_rec>127u) { cur_block++;cur_rec=0; } + fcb.SetRecord(cur_block,cur_rec); + if (toread==rec_size) return FCB_SUCCESS; + return FCB_READ_PARTIAL; +} + +uint8_t DOS_FCBWrite(uint16_t seg,uint16_t offset,uint16_t recno) { + DOS_FCB fcb(seg,offset); + uint8_t fhandle,cur_rec;uint16_t cur_block,rec_size; + fcb.GetSeqData(fhandle,rec_size); + if (fhandle==0xffu && rec_size!=0u) { + if (!DOS_FCBOpen(seg,offset)) return FCB_READ_NODATA; + LOG(LOG_FCB,LOG_WARN)("Reopened closed FCB"); + fcb.GetSeqData(fhandle,rec_size); + } + if (rec_size == 0) { + rec_size = 128; + fcb.SetSeqData(fhandle,rec_size); + } + fcb.GetRecord(cur_block,cur_rec); + uint32_t pos=((cur_block*128u)+cur_rec)*rec_size; + if (!DOS_SeekFile(fhandle,&pos,DOS_SEEK_SET,true)) return FCB_ERR_WRITE; + MEM_BlockRead(Real2Phys(dos.dta())+(PhysPt)(recno*rec_size),dos_copybuf,rec_size); + uint16_t towrite=rec_size; + if (!DOS_WriteFile(fhandle,dos_copybuf,&towrite,true)) return FCB_ERR_WRITE; + uint32_t size;uint16_t date,time; + fcb.GetSizeDateTime(size,date,time); + if (pos+towrite>size) size=pos+towrite; + //time doesn't keep track of endofday + date = DOS_PackDate(dos.date.year,dos.date.month,dos.date.day); + uint32_t ticks = mem_readd(BIOS_TIMER); + uint32_t seconds = (ticks*10u)/182u; + uint16_t hour = (uint16_t)(seconds/3600u); + uint16_t min = (uint16_t)((seconds % 3600u)/60u); + uint16_t sec = (uint16_t)(seconds % 60u); + time = DOS_PackTime(hour,min,sec); + Files[fhandle]->time = time; + Files[fhandle]->date = date; + fcb.SetSizeDateTime(size,date,time); + if (++cur_rec>127u) { cur_block++;cur_rec=0; } + fcb.SetRecord(cur_block,cur_rec); + return FCB_SUCCESS; +} + +uint8_t DOS_FCBIncreaseSize(uint16_t seg,uint16_t offset) { + DOS_FCB fcb(seg,offset); + uint8_t fhandle,cur_rec;uint16_t cur_block,rec_size; + fcb.GetSeqData(fhandle,rec_size); + fcb.GetRecord(cur_block,cur_rec); + uint32_t pos=((cur_block*128u)+cur_rec)*rec_size; + if (!DOS_SeekFile(fhandle,&pos,DOS_SEEK_SET,true)) return FCB_ERR_WRITE; + uint16_t towrite=0; + if (!DOS_WriteFile(fhandle,dos_copybuf,&towrite,true)) return FCB_ERR_WRITE; + uint32_t size;uint16_t date,time; + fcb.GetSizeDateTime(size,date,time); + if (pos+towrite>size) size=pos+towrite; + //time doesn't keep track of endofday + date = DOS_PackDate(dos.date.year,dos.date.month,dos.date.day); + uint32_t ticks = mem_readd(BIOS_TIMER); + uint32_t seconds = (ticks*10u)/182u; + uint16_t hour = (uint16_t)(seconds/3600u); + uint16_t min = (uint16_t)((seconds % 3600u)/60u); + uint16_t sec = (uint16_t)(seconds % 60u); + time = DOS_PackTime(hour,min,sec); + Files[fhandle]->time = time; + Files[fhandle]->date = date; + fcb.SetSizeDateTime(size,date,time); + fcb.SetRecord(cur_block,cur_rec); + return FCB_SUCCESS; +} + +uint8_t DOS_FCBRandomRead(uint16_t seg,uint16_t offset,uint16_t * numRec,bool restore) { +/* if restore is true :random read else random block read. + * random read updates old block and old record to reflect the random data + * before the read!!!!!!!!! and the random data is not updated! (user must do this) + * Random block read updates these fields to reflect the state after the read! */ - uint16_t toread=*amount; - bool ret=Files[handle]->Read(data,&toread); - *amount=toread; - return ret; - } - - bool DOS_WriteFile(uint16_t entry,const uint8_t * data,uint16_t * amount,bool fcb) { - uint32_t handle = fcb?entry:RealHandle(entry); - if (handle>=DOS_FILES) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if(Network_IsActiveResource(entry)) - return Network_WriteFile(entry,data,amount); - #endif - if (!Files[handle] || !Files[handle]->IsOpen()) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - - if (log_fileio) { - LOG(LOG_FILES, LOG_DEBUG)("Writing %d bytes to %s", *amount, Files[handle]->name); - } - /* - if ((Files[handle]->flags & 0x0f) == OPEN_READ)) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } + DOS_FCB fcb(seg,offset); + uint32_t random; + uint16_t old_block=0; + uint8_t old_rec=0; + uint8_t error=0; + uint16_t count; + + /* Set the correct record from the random data */ + fcb.GetRandom(random); + fcb.SetRecord((uint16_t)(random / 128u),(uint8_t)(random & 127u)); + if (restore) fcb.GetRecord(old_block,old_rec);//store this for after the read. + // Read records + for (count=0; count<*numRec; count++) { + error = DOS_FCBRead(seg,offset,count); + if (error!=FCB_SUCCESS) break; + } + if (error==FCB_READ_PARTIAL) count++; //partial read counts + *numRec=count; + uint16_t new_block;uint8_t new_rec; + fcb.GetRecord(new_block,new_rec); + if (restore) fcb.SetRecord(old_block,old_rec); + /* Update the random record pointer with new position only when restore is false*/ + if(!restore) fcb.SetRandom(new_block*128u+new_rec); + return error; +} + +uint8_t DOS_FCBRandomWrite(uint16_t seg,uint16_t offset,uint16_t * numRec,bool restore) { +/* see FCB_RandomRead */ + DOS_FCB fcb(seg,offset); + uint32_t random; + uint16_t old_block=0; + uint8_t old_rec=0; + uint8_t error=0; + + /* Set the correct record from the random data */ + fcb.GetRandom(random); + fcb.SetRecord((uint16_t)(random / 128u),(uint8_t)(random & 127u)); + if (restore) fcb.GetRecord(old_block,old_rec); + if (*numRec > 0) { + uint16_t count; + /* Write records */ + for (count=0; count<*numRec; count++) { + error = DOS_FCBWrite(seg,offset,count);// dos_fcbwrite return 0 false when true... + if (error!=FCB_SUCCESS) break; + } + *numRec=count; + } else { + DOS_FCBIncreaseSize(seg,offset); + } + uint16_t new_block;uint8_t new_rec; + fcb.GetRecord(new_block,new_rec); + if (restore) fcb.SetRecord(old_block,old_rec); + /* Update the random record pointer with new position only when restore is false */ + if (!restore) fcb.SetRandom(new_block*128u+new_rec); + return error; +} + +bool DOS_FCBGetFileSize(uint16_t seg,uint16_t offset) { + char shortname[DOS_PATHLENGTH];uint16_t entry; + DOS_FCB fcb(seg,offset); + fcb.GetName(shortname); + if (!DOS_OpenFile(shortname,OPEN_READ,&entry,true)) return false; + uint32_t size = 0; + Files[entry]->Seek(&size,DOS_SEEK_END); + DOS_CloseFile(entry,true); + + uint8_t handle; uint16_t rec_size; + fcb.GetSeqData(handle,rec_size); + if (rec_size == 0) rec_size = 128; //Use default if missing. + + uint32_t random=(size/rec_size); + if (size % rec_size) random++; + fcb.SetRandom(random); + return true; +} + +bool DOS_FCBDeleteFile(uint16_t seg,uint16_t offset){ +/* Special case: ????????.??? and DOS_ATTR_VOLUME */ + { + DOS_FCB fcb(seg,offset); + uint8_t attr = 0; + fcb.GetAttr(attr); + uint8_t drive = fcb.GetDrive(); + std::string label = Drives[drive]->GetLabel(); + + if (attr & DOS_ATTR_VOLUME) { + char shortname[DOS_FCBNAME]; + fcb.GetVolumeName(shortname); + + if (!strcmp(shortname,"???????????")) { + if (!label.empty()) { + Drives[drive]->SetLabel("",false,true); + LOG(LOG_DOSMISC,LOG_NORMAL)("FCB delete volume label"); + return true; + } + } + else { + /* MS-DOS 6.22 LABEL.EXE will explicitly request to delete the volume label by the volume label not ????????.???? */ + if (!label.empty()) { + while (label.length() < 11) label += ' '; + if (!memcmp(label.c_str(),shortname,11)) { + Drives[drive]->SetLabel("",false,true); + LOG(LOG_DOSMISC,LOG_NORMAL)("FCB delete volume label deleted"); + return true; + } + } + } + + LOG(LOG_DOSMISC,LOG_NORMAL)("FCB delete volume label not found (current='%s' asking='%s')",label.c_str(),shortname); + DOS_SetError(DOSERR_FILE_NOT_FOUND); // right? + return false; + } + } + +/* FCB DELETE honours wildcards. it will return true if one or more + * files get deleted. + * To get this: the dta is set to temporary dta in which found files are + * stored. This can not be the tempdta as that one is used by fcbfindfirst */ - uint16_t towrite=*amount; - bool ret=Files[handle]->Write(data,&towrite); - *amount=towrite; - return ret; - } - - bool DOS_SeekFile(uint16_t entry,uint32_t * pos,uint32_t type,bool fcb) { - uint32_t handle = fcb?entry:RealHandle(entry); - if (handle>=DOS_FILES) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if(Network_IsActiveResource(entry)) - return Network_SeekFile(entry,pos,type); - #endif - if (!Files[handle] || !Files[handle]->IsOpen()) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - - if (log_fileio) { - LOG(LOG_FILES, LOG_DEBUG)("Seeking to %d bytes from position type (%d) in %s ", *pos, type, Files[handle]->name); - } - - return Files[handle]->Seek(pos,type); - } - - /* ert, 20100711: Locking extensions */ - bool DOS_LockFile(uint16_t entry,uint8_t mode,uint32_t pos,uint32_t size) { - uint32_t handle=RealHandle(entry); - if (handle>=DOS_FILES) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - if (!Files[handle] || !Files[handle]->IsOpen()) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - return Files[handle]->LockFile(mode,pos,size); - } - - bool DOS_CloseFile(uint16_t entry, bool fcb, uint8_t * refcnt) { - uint32_t handle = fcb?entry:RealHandle(entry); - if (handle>=DOS_FILES) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if(Network_IsActiveResource(entry)) - return Network_CloseFile(entry); - #endif - if (!Files[handle]) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - if (Files[handle]->IsOpen()) { - if (log_fileio) { - LOG(LOG_FILES, LOG_NORMAL)("Closing file %s", Files[handle]->name); - } - Files[handle]->Close(); - } - - DOS_PSP psp(dos.psp()); - if (!fcb) psp.SetFileHandle(entry,0xff); - - Bits refs=Files[handle]->RemoveRef(); - if (refs<=0) { - delete Files[handle]; - Files[handle]=nullptr; - } - if (refcnt!=NULL) *refcnt=static_cast(refs+1); - return true; - } - - bool DOS_FlushFile(uint16_t entry) { - uint32_t handle=RealHandle(entry); - if (handle>=DOS_FILES) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if(Network_IsActiveResource(entry)) - return Network_FlushFile(entry); - #endif - if (!Files[handle] || !Files[handle]->IsOpen()) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - - LOG(LOG_DOSMISC,LOG_DEBUG)("FFlush used."); - - Files[handle]->Flush(); - return true; - } - - - bool DOS_CreateFile(char const * name,uint16_t attributes,uint16_t * entry,bool fcb) { - // Creation of a device is the same as opening it - // Tc201 installer - if (DOS_FindDevice(name) != DOS_DEVICES) - return DOS_OpenFile(name, OPEN_READ, entry, fcb); - - LOG(LOG_FILES,LOG_NORMAL)("file create attributes %X file %s",attributes,name); - char fullname[DOS_PATHLENGTH];uint8_t drive; - DOS_PSP psp(dos.psp()); - if (!DOS_MakeName(name,fullname,&drive)) return false; - while (strlen(fullname)&&(*(fullname+strlen(fullname)-1)=='.'||*(fullname+strlen(fullname)-1)==' ')) *(fullname+strlen(fullname)-1)=0; - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if(Network_IsNetworkResource(name)) - return Network_CreateFile(name,attributes,entry); - #endif - - /* Check for a free file handle */ - uint8_t handle=(uint8_t)DOS_FILES;uint8_t i; - for (i=0;iFileCreate(&Files[handle],fullname,attributes); - if (foundit) { - if (Files[handle]) { - Files[handle]->SetDrive(drive); - Files[handle]->AddRef(); - Files[handle]->drive = drive; - } - if (!fcb) psp.SetFileHandle(*entry,handle); - if (Files[handle]) Drives[drive]->EmptyCache(); - return true; - } else { - if(dos.errorcode==DOSERR_ACCESS_DENIED||dos.errorcode==DOSERR_WRITE_PROTECTED) return false; - if(!PathExists(name)) DOS_SetError(DOSERR_PATH_NOT_FOUND); - else DOS_SetError(DOSERR_FILE_NOT_FOUND); - return false; - } - } - - bool DOS_OpenFile(char const * name,uint8_t flags,uint16_t * entry,bool fcb) { - /* First check for devices */ - if (flags>2) LOG(LOG_FILES,LOG_NORMAL)("Special file open command %X file %s",flags,name); // FIXME: Why? Is there something about special opens DOSBox doesn't handle properly? - else LOG(LOG_FILES,LOG_NORMAL)("file open command %X file %s",flags,name); - - DOS_PSP psp(dos.psp()); - uint16_t attr = 0; - uint8_t devnum = DOS_FindDevice(name); - bool device = (devnum != DOS_DEVICES); - if(!device && DOS_GetFileAttr(name,&attr)) { - //DON'T ALLOW directories to be opened. (skip test if file is device). - if((attr & DOS_ATTR_DIRECTORY) || (attr & DOS_ATTR_VOLUME)){ - DOS_SetError(DOSERR_ACCESS_DENIED); - return false; - } - } - - char fullname[DOS_PATHLENGTH];uint8_t drive;uint8_t i; - /* First check if the name is correct */ - if (!DOS_MakeName(name,fullname,&drive)) return false; - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if(Network_IsNetworkResource(name)) - return Network_OpenFile(name,flags,entry); - #endif - uint8_t handle=255; - /* Check for a free file handle */ - for (i=0;iGetInformation() & EXT_DEVICE_BIT) - Files[handle] = new DOS_ExtDevice(*(DOS_ExtDevice*)Devices[devnum]); - else - Files[handle]=new DOS_Device(*Devices[devnum]); - } else { - uint16_t olderror=dos.errorcode; - dos.errorcode=0; - exists=Drives[drive]->FileOpen(&Files[handle],fullname,flags) || Drives[drive]->FileOpen(&Files[handle],upcase(fullname),flags); - if (exists) Files[handle]->SetDrive(drive); - else if (dos.errorcode==DOSERR_ACCESS_CODE_INVALID) return false; - dos.errorcode=olderror; - } - if (exists || device ) { - Files[handle]->AddRef(); - psp.SetFileHandle(*entry,handle); - Files[handle]->drive = drive; - return true; - } else { - //Test if file exists, but opened in read-write mode (and writeprotected) - if((((flags&3) != OPEN_READ) || (enable_share_exe && !strncmp(Drives[drive]->GetInfo(),"local directory ",16))) && Drives[drive]->FileExists(fullname)) - DOS_SetError(DOSERR_ACCESS_DENIED); - else { - if(!PathExists(name)) DOS_SetError(DOSERR_PATH_NOT_FOUND); - else DOS_SetError(DOSERR_FILE_NOT_FOUND); - } - return false; - } - } - - bool DOS_OpenFileExtended(char const * name, uint16_t flags, uint16_t createAttr, uint16_t action, uint16_t *entry, uint16_t* status) { - // FIXME: Not yet supported : Bit 13 of flags (int 0x24 on critical error) - uint16_t result = 0; - if (action==0) { - // always fail setting - DOS_SetError(DOSERR_FUNCTION_NUMBER_INVALID); - return false; - } else { - if (((action & 0x0f)>2) || ((action & 0xf0)>0x10)) { - // invalid action parameter - DOS_SetError(DOSERR_FUNCTION_NUMBER_INVALID); - return false; - } - } - if (DOS_OpenFile(name, (uint8_t)(flags&0xff), entry)) { - // File already exists - switch (action & 0x0f) { - case 0x00: // failed - DOS_SetError(DOSERR_FILE_ALREADY_EXISTS); - return false; - case 0x01: // file open (already done) - result = 1; - break; - case 0x02: // replace - DOS_CloseFile(*entry); - if (!DOS_CreateFile(name, createAttr, entry)) return false; - result = 3; - break; - default: - DOS_SetError(DOSERR_FUNCTION_NUMBER_INVALID); - E_Exit("DOS: OpenFileExtended: Unknown action."); - break; - } - } else { - // File doesn't exist - if ((action & 0xf0)==0) { - // uses error code from failed open - return false; - } - // Create File - if (!DOS_CreateFile(name, createAttr, entry)) { - // uses error code from failed create - return false; - } - result = 2; - } - // success - *status = result; - return true; - } - - bool DOS_UnlinkFile(char const * const name) { - char fullname[DOS_PATHLENGTH];uint8_t drive; - // An existing device returns an access denied error - if (log_fileio) { - LOG(LOG_FILES, LOG_NORMAL)("Deleting file %s", name); - } - if (DOS_FindDevice(name) != DOS_DEVICES) { - DOS_SetError(DOSERR_ACCESS_DENIED); - return false; - } - if (!DOS_MakeName(name,fullname,&drive)) return false; - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (Network_IsNetworkResource(name)) return Network_UnlinkFile(name); - #endif - if(Drives[drive]->FileUnlink(fullname)){ - return true; - } else if(uselfn&&!force_sfn&&(strchr(fullname, '*')||strchr(fullname, '?'))) { // Wildcard delete as used by MS-DOS 7+ "DEL *.*" in LFN mode - char dir[DOS_PATHLENGTH], temp[DOS_PATHLENGTH], fname[DOS_PATHLENGTH], spath[DOS_PATHLENGTH], pattern[DOS_PATHLENGTH]; - if (!DOS_Canonicalize(name,fullname)||!strlen(fullname)) { - DOS_SetError(DOSERR_PATH_NOT_FOUND); - return false; - } - if (!strchr(name,'\"')||!DOS_GetSFNPath(("\""+std::string(fullname)+"\"").c_str(), fname, false)) - strcpy(fname, fullname); - char * find_last=strrchr_dbcs(fname,'\\'); - if (!find_last) { - dir[0]=0; - strcpy(pattern, fname); - } else { - *find_last=0; - strcpy(dir,fname); - strcpy(pattern, find_last+1); - } - int k=0; - for (int i=0;i<(int)strlen(pattern);i++) - if (pattern[i]!='\"') - pattern[k++]=pattern[i]; - pattern[k]=0; - RealPt save_dta=dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - std::vector cdirs; - cdirs.clear(); - strcpy(spath, dir); - if (!DOS_GetSFNPath(dir, spath, false)) strcpy(spath, dir); - if (!strlen(spath)||spath[strlen(spath)-1]!='\\') strcat(spath, "\\"); - std::string pfull=std::string(spath)+std::string(pattern); - int fbak=lfn_filefind_handle; - lfn_filefind_handle=LFN_FILEFIND_INTERNAL; - bool ret=DOS_FindFirst(((pfull.length()&&pfull[0]=='"'?"":"\"")+pfull+(pfull.length()&&pfull[pfull.length()-1]=='"'?"":"\"")).c_str(),0xffu & ~DOS_ATTR_VOLUME & ~DOS_ATTR_DIRECTORY); - if (ret) do { - char find_name[DOS_NAMELENGTH_ASCII],lfind_name[LFN_NAMELENGTH]; - uint16_t find_date,find_time;uint32_t find_size,find_hsize;uint8_t find_attr; - dta.GetResult(find_name,lfind_name,find_size,find_hsize,find_date,find_time,find_attr); - if (!(find_attr & DOS_ATTR_DIRECTORY)&&strlen(find_name)&&!strchr(find_name, '*')&&!strchr(find_name, '?')) { - strcpy(temp, dir); - if (strlen(temp)&&temp[strlen(temp)-1]!='\\') strcat(temp, "\\"); - strcat(temp, find_name); - cdirs.emplace_back(std::string(temp)); - } - } while ((ret=DOS_FindNext())==true); - lfn_filefind_handle=fbak; - bool removed=false; - while (!cdirs.empty()) { - if (DOS_UnlinkFile(cdirs.begin()->c_str())) - removed=true; - cdirs.erase(cdirs.begin()); - } - dos.dta(save_dta); - if (removed) - return true; - else { - if (dos.errorcode!=DOSERR_ACCESS_DENIED&&dos.errorcode!=DOSERR_WRITE_PROTECTED) DOS_SetError(DOSERR_FILE_NOT_FOUND); - return false; - } - } else { - if (dos.errorcode!=DOSERR_ACCESS_DENIED&&dos.errorcode!=DOSERR_WRITE_PROTECTED) DOS_SetError(DOSERR_FILE_NOT_FOUND); - return false; - } - } - - bool DOS_GetFileAttr(char const * const name,uint16_t * attr) { - char fullname[DOS_PATHLENGTH];uint8_t drive; - if (!DOS_MakeName(name,fullname,&drive)) return false; - #if defined (WIN32) - if (!control->SecureMode()&&dos_clipboard_device_access) { - const char* find_last; - find_last=strrchr_dbcs(fullname,'\\'); - if (find_last==NULL) find_last=fullname; - else find_last++; - if (!strcasecmp(find_last, *dos_clipboard_device_name?dos_clipboard_device_name:"CLIP$")) - return true; - } - #if !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (Network_IsNetworkResource(name)) { - if (Network_GetFileAttr(name, attr)) { - return true; - } else { - DOS_SetError(DOSERR_FILE_NOT_FOUND); - return false; - } - } - #endif - #endif - - if (Drives[drive]->GetFileAttr(fullname,attr)) { - return true; - } else { - DOS_SetError(DOSERR_FILE_NOT_FOUND); - return false; - } - } - - unsigned long DOS_GetCompressedFileSize(char const* const name) - { - char fullname[DOS_PATHLENGTH]; - uint8_t drive; - if (!DOS_MakeName(name, fullname, &drive)) - return false; - return Drives[drive]->GetCompressedSize(fullname); - } - - #if defined (WIN32) - HANDLE DOS_CreateOpenFile(char const* const name) - { - char fullname[DOS_PATHLENGTH]; - uint8_t drive; - if (!DOS_MakeName(name, fullname, &drive)) - return INVALID_HANDLE_VALUE; - return Drives[drive]->CreateOpenFile(fullname); - } - #endif - - bool DOS_SetFileAttr(char const * const name,uint16_t attr) - // returns false when using on cdrom (stonekeep) - { - char fullname[DOS_PATHLENGTH];uint8_t drive; - if (!DOS_MakeName(name,fullname,&drive)) return false; - if (strncmp(Drives[drive]->GetInfo(),"CDRom ",6)==0 || strncmp(Drives[drive]->GetInfo(),"isoDrive ",9)==0) { - DOS_SetError(DOSERR_ACCESS_DENIED); - return false; - } - - /* This function must prevent changing a file into a directory, volume label into a file, etc. - * Also Windows 95 setup likes to create WINBOOT.INI as a file and then chattr it into a directory for some stupid reason. */ - uint16_t old_attr; - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if ((Network_IsNetworkResource(name)&&!Network_GetFileAttr(name,&old_attr))||(!Network_IsNetworkResource(name)&&!Drives[drive]->GetFileAttr(fullname,&old_attr))) - #else - if (!Drives[drive]->GetFileAttr(fullname,&old_attr)) - #endif - { - DOS_SetError(DOSERR_FILE_NOT_FOUND); - return false; - } - - if ((old_attr ^ attr) & DOS_ATTR_VOLUME) { /* change in volume label attribute */ - LOG(LOG_DOSMISC,LOG_WARN)("Attempted to change volume label attribute of '%s' with SetFileAttr",name); - return false; - } - - if ((old_attr ^ attr) & DOS_ATTR_DIRECTORY) /* change in directory attribute (ex: Windows 95 SETUP.EXE vs WINBOOT.INI) */ - LOG(LOG_DOSMISC,LOG_WARN)("Attempted to change directory attribute of '%s' with SetFileAttr",name); - - /* define what cannot be changed */ - const uint16_t attr_mask = (DOS_ATTR_VOLUME|DOS_ATTR_DIRECTORY); - - attr = (attr & ~attr_mask) | (old_attr & attr_mask); - - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (Network_IsNetworkResource(name)) return Network_SetFileAttr(name,attr); - #endif - return Drives[drive]->SetFileAttr(fullname,attr); - } - - bool DOS_Canonicalize(char const * const name,char * const big) { - //TODO Add Better support for devices and shit but will it be needed i doubt it :) - uint8_t drive; - char fullname[DOS_PATHLENGTH]; - if (!DOS_MakeName(name,fullname,&drive)) return false; - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (Network_IsNetworkResource(name)) { - strcpy(&big[0], name); - return true; - } - #endif - big[0]=drive+'A'; - big[1]=':'; - big[2]='\\'; - strcpy(&big[3],fullname); - return true; - } - - #ifdef _MSC_VER - # define MIN(a,b) ((a) < (b) ? (a) : (b)) - # define MAX(a,b) ((a) > (b) ? (a) : (b)) - #else - # define MIN(a,b) std::min(a,b) - # define MAX(a,b) std::max(a,b) - #endif - - /* Common routine to take larger allocation information (such as FAT32) and convert it to values - * that are suitable for use with older DOS programs that pre-date FAT32 and partitions 2GB or larger. - * This is what Windows 95 OSR2 and higher do with FAT32 partitions anyway, as documented by Microsoft. */ - bool DOS_CommonFAT32FAT16DiskSpaceConv( - uint16_t * bytes,uint8_t * sectors,uint16_t * clusters,uint16_t * free, - const uint32_t bytes32,const uint32_t sectors32,const uint32_t clusters32,const uint32_t free32) { - uint32_t cdiv = 1; - - if (sectors32 > 128 || bytes32 > 0x8000) - return false; - - /* This function is for the old API. It is necessary to adjust the values so that they never overflow - * 16-bit unsigned integers and never multiply out to a number greater than just under 2GB. Because - * old DOS programs use 32-bit signed integers for disk total/free and FAT12/FAT16 filesystem limitations. */ - /* NTS: Make sure (bytes per sector * sectors per cluster) is less than 0x10000, or else FORMAT.COM will - * crash with divide by zero or produce incorrect results when run with "FORMAT /S" */ - while ((clusters32 > 0xFFFFu || free32 > 0xFFFFu) && (sectors32 * cdiv) <= 64u && (bytes32 * sectors32 * cdiv) < 0x8000/*Needed for FORMAT.COM*/) - cdiv *= 2u; - - /* The old API must never report more than just under 2GB for total and free */ - const uint32_t clust2gb = (uint32_t)0x7FFF8000ul / (uint32_t)bytes32 / (sectors32 * cdiv); - - *bytes = bytes32; - *sectors = sectors32 * cdiv; - *clusters = (uint16_t)MIN(MIN(clusters32 / cdiv,clust2gb),0xFFFFu); - *free = (uint16_t)MIN(MIN(free32 / cdiv,clust2gb),0xFFFFu); - return true; - } - - bool DOS_GetFreeDiskSpace(uint8_t drive,uint16_t * bytes,uint8_t * sectors,uint16_t * clusters,uint16_t * free) { - if (drive==0) drive=DOS_GetDefaultDrive(); - else drive--; - if ((drive>=DOS_DRIVES) || (!Drives[drive])) { - DOS_SetError(DOSERR_INVALID_DRIVE); - return false; - } - - { - uint32_t bytes32,sectors32,clusters32,free32; - if ((dos.version.major > 7 || (dos.version.major == 7 && dos.version.minor >= 10)) && - Drives[drive]->AllocationInfo32(&bytes32,§ors32,&clusters32,&free32) && - DOS_CommonFAT32FAT16DiskSpaceConv(bytes,sectors,clusters,free,bytes32,sectors32,clusters32,free32)) - return true; - } - - if (Drives[drive]->AllocationInfo(bytes,sectors,clusters,free)) - return true; - - return false; - } - - bool DOS_GetFreeDiskSpace32(uint8_t drive,uint32_t * bytes,uint32_t * sectors,uint32_t * clusters,uint32_t * free) { - if (drive==0) drive=DOS_GetDefaultDrive(); - else drive--; - if ((drive>=DOS_DRIVES) || (!Drives[drive])) { - DOS_SetError(DOSERR_INVALID_DRIVE); - return false; - } - - if ((dos.version.major > 7 || (dos.version.major == 7 && dos.version.minor >= 10)) && Drives[drive]->AllocationInfo32(bytes,sectors,clusters,free)) - return true; - - { - uint8_t sectors8; - uint16_t bytes16,clusters16,free16; - if (Drives[drive]->AllocationInfo(&bytes16,§ors8,&clusters16,&free16)) { - *free = free16; - *bytes = bytes16; - *sectors = sectors8; - *clusters = clusters16; - return true; - } - } - - return false; - } - - bool DOS_DuplicateEntry(uint16_t entry,uint16_t * newentry) { - // Don't duplicate console handles - /* if (entry<=STDPRN) { - *newentry = entry; - return true; - }; - */ - uint8_t handle=RealHandle(entry); - if (handle>=DOS_FILES) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - if (!Files[handle] || !Files[handle]->IsOpen()) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - DOS_PSP psp(dos.psp()); - *newentry = psp.FindFreeFileEntry(); - if (*newentry==0xff) { - DOS_SetError(DOSERR_TOO_MANY_OPEN_FILES); - return false; - } - Files[handle]->AddRef(); - psp.SetFileHandle(*newentry,handle); - return true; - } - - bool DOS_ForceDuplicateEntry(uint16_t entry,uint16_t newentry) { - if(entry == newentry) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - uint8_t orig = RealHandle(entry); - if (orig >= DOS_FILES) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - if (!Files[orig] || !Files[orig]->IsOpen()) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - uint8_t newone = RealHandle(newentry); - if (newone < DOS_FILES && Files[newone]) { - DOS_CloseFile(newentry); - } - DOS_PSP psp(dos.psp()); - Files[orig]->AddRef(); - psp.SetFileHandle(newentry,orig); - return true; - } - - void initRand() { - #ifdef WIN32 - srand(GetTickCount()); - #else - struct timespec ts; - unsigned theTick = 0U; - clock_gettime( CLOCK_REALTIME, &ts ); - theTick = ts.tv_nsec / 1000000; - theTick += ts.tv_sec * 1000; - srand(theTick); - #endif - } - - bool DOS_CreateTempFile(char * const name,uint16_t * entry) { - size_t namelen=strlen(name); - char * tempname=name+namelen; - if (namelen==0) { - // temp file created in root directory - tempname[0]='\\'; - tempname++; - } else { - if (!check_last_split_char(name, namelen, '\\') && (name[namelen-1]!='/')) { - tempname[0]='\\'; - tempname++; - } - } - uint16_t olderror=dos.errorcode; - dos.errorcode=0; - /* add random crap to the end of the name and try to open */ - initRand(); - bool cont; - do { - cont=false; - uint32_t i; - for (i=0;i<8;i++) { - tempname[i]=(rand()%26)+'A'; - } - tempname[8]=0; - //if (DOS_FileExists(name)) {cont=true;continue;} // FIXME: Check name uniqueness - } while (cont || DOS_FileExists(name)); - DOS_CreateFile(name,0,entry); - if (dos.errorcode) return false; - dos.errorcode=olderror; - return true; - } - - char DOS_ToUpper(char c) { - unsigned char uc = *reinterpret_cast(&c); - if (uc > 0x60 && uc < 0x7B) uc -= 0x20; - else if (uc > 0x7F && uc < 0xA5) { - const unsigned char t[0x25] = { - 0x00, 0x9a, 0x45, 0x41, 0x8E, 0x41, 0x8F, 0x80, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x00, 0x00, - 0x00, 0x92, 0x00, 0x4F, 0x99, 0x4F, 0x55, 0x55, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x41, 0x49, 0x4F, 0x55, 0xA5}; - if (t[uc - 0x80]) uc = t[uc-0x80]; - } - char sc = *reinterpret_cast(&uc); - return sc; - } - - #define FCB_SEP ":;,=+" - #define ILLEGAL ":.;,=+ \t/\"[]<>|" - - static bool isvalid(const char in){ - const char ill[]=ILLEGAL; - return (uint8_t(in)>0x1F) && (!strchr(ill,in)); - } - - #define PARSE_SEP_STOP 0x01 - #define PARSE_DFLT_DRIVE 0x02 - #define PARSE_BLNK_FNAME 0x04 - #define PARSE_BLNK_FEXT 0x08 - - #define PARSE_RET_NOWILD 0 - #define PARSE_RET_WILD 1 - #define PARSE_RET_BADDRIVE 0xff - - uint8_t FCB_Parsename(uint16_t seg,uint16_t offset,uint8_t parser ,char *string, uint8_t *change) { - const char* string_begin = string; - uint8_t ret=0; - if (!(parser & PARSE_DFLT_DRIVE)) { - // default drive forced, this intentionally invalidates an extended FCB - mem_writeb(PhysMake(seg,offset),0); - } - DOS_FCB fcb(seg,offset,false); // always a non-extended FCB - bool hasdrive,hasname,hasext,finished; - hasdrive=hasname=hasext=finished=false; - Bitu index=0; - uint8_t fill=' '; - /* First get the old data from the fcb */ - #ifdef _MSC_VER - #pragma pack (1) - #endif - union { - struct { - char drive[2]; - char name[9]; - char ext[4]; - } GCC_ATTRIBUTE (packed) part; - char full[DOS_FCBNAME]; - } fcb_name; - #ifdef _MSC_VER - #pragma pack() - #endif - /* Get the old information from the previous fcb */ - fcb.GetName(fcb_name.full); - fcb_name.part.drive[0]-='A'-1;fcb_name.part.drive[1]=0; - fcb_name.part.name[8]=0;fcb_name.part.ext[3]=0; - /* strip leading spaces */ - while((*string==' ')||(*string=='\t')) string++; - - /* Strip of the leading separator */ - if((parser & PARSE_SEP_STOP) && *string) { - char sep[] = FCB_SEP;char a[2]; - a[0] = *string;a[1] = '\0'; - if (strcspn(a,sep) == 0) string++; - } - - /* Skip following spaces as well */ - while((*string==' ')||(*string=='\t')) string++; - - /* Check for a drive */ - if (string[1]==':') { - unsigned char d = *reinterpret_cast(&string[0]); - if (!isvalid(ascii_toupper(d))) {string += 2; goto savefcb;} //TODO check (for ret value) - fcb_name.part.drive[0]=0; - hasdrive=true; - if (isalpha(d) && Drives[ascii_toupper(d)-'A']) { //Floppies under dos always exist, but don't bother with that at this level - ; //THIS* was here - } else ret=0xff; - fcb_name.part.drive[0]=DOS_ToUpper(string[0])-'A'+1; //Always do THIS* and continue parsing, just return the right code - string+=2; - } - - /* Check for extension only file names */ - if (string[0] == '.') {string++;goto checkext;} - - /* do nothing if not a valid name */ - if(!isvalid(string[0])) goto savefcb; - - hasname=true;finished=false;fill=' ';index=0; - /* Copy the name */ - while (true) { - unsigned char nc = *reinterpret_cast(&string[0]); - if ((IS_PC98_ARCH && shiftjis_lead_byte(nc)) || (isDBCSCP() && isKanji1(nc))) { - /* Shift-JIS is NOT ASCII and SHOULD NOT be converted to uppercase like ASCII */ - fcb_name.part.name[index]=(char)nc; - string++; - index++; - if (index >= 8) break; - - /* should be trailing byte of Shift-JIS */ - if (nc < 32 || nc >= 127) continue; - - fcb_name.part.name[index]=(char)nc; - } - else - { - char ncs = (char)ascii_toupper(nc); //Should use DOS_ToUpper, but then more calls need to be changed. - if (ncs == '*') { //Handle * - fill = '?'; - ncs = '?'; - } - if (ncs == '?' && !ret && index < 8) ret = 1; //Don't override bad drive - if (!isvalid(ncs)) { //Fill up the name. - while(index < 8) - fcb_name.part.name[index++] = (char)fill; - break; - } - if (index < 8) { - fcb_name.part.name[index++] = (char)((fill == '?')?fill:ncs); - } - } - string++; - } - if (!(string[0]=='.')) goto savefcb; - string++; - checkext: - /* Copy the extension */ - hasext=true;finished=false;fill=' ';index=0; - while (true) { - unsigned char nc = *reinterpret_cast(&string[0]); - if ((IS_PC98_ARCH && shiftjis_lead_byte(nc)) || (isDBCSCP() && isKanji1(nc))) { - /* DBCS is NOT ASCII and SHOULD NOT be converted to uppercase like ASCII */ - fcb_name.part.ext[index]=(char)nc; - string++; - index++; - if (index >= 3) break; - - /* should be trailing byte of DBCS character */ - if (nc < 32u || nc >= 127u) continue; - - fcb_name.part.ext[index]=(char)nc; - } - else - { - char ncs = (char)ascii_toupper(nc); - if (ncs == '*') { //Handle * - fill = '?'; - ncs = '?'; - } - if (ncs == '?' && !ret && index < 3) ret = 1; - if (!isvalid(ncs)) { //Fill up the name. - while(index < 3) - fcb_name.part.ext[index++] = (char)fill; - break; - } - if (index < 3) { - fcb_name.part.ext[index++] = (char)((fill=='?')?fill:ncs); - } - } - string++; - } - savefcb: - if (!hasdrive && !(parser & PARSE_DFLT_DRIVE)) fcb_name.part.drive[0] = 0; - if (!hasname && !(parser & PARSE_BLNK_FNAME)) strcpy(fcb_name.part.name," "); - if (!hasext && !(parser & PARSE_BLNK_FEXT)) strcpy(fcb_name.part.ext," "); - fcb.SetName((unsigned char)fcb_name.part.drive[0],fcb_name.part.name,fcb_name.part.ext); - fcb.ClearBlockRecsize(); //Undocumented bonus work. - *change=(uint8_t)(string-string_begin); - return ret; - } - - static void DTAExtendNameVolumeLabel(const char* const name, char* const filename, char* const ext) { - size_t i,s; - - i=0; - s=0; - while (i < 8 && name[s] != 0) filename[i++] = name[s++]; - while (i < 8) filename[i++] = ' '; - - i=0; - while (i < 3 && name[s] != 0) ext[i++] = name[s++]; - while (i < 3) ext[i++] = ' '; - } - - void DTAExtendName(char * const name,char * const filename,char * const ext) { - char * find=strchr(name,'.'); - if (find && find!=name) { - strcpy(ext,find+1); - *find=0; - } else ext[0]=0; - strcpy(filename,name); - size_t i; - for (i=strlen(name);i<8;i++) filename[i]=' '; - filename[8]=0; - for (i=strlen(ext);i<3;i++) ext[i]=' '; - ext[3]=0; - } - - static void SaveFindResult(DOS_FCB & find_fcb) { - DOS_DTA find_dta(dos.tables.tempdta); - char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH]; - uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr;uint8_t drive; - char file_name[9];char ext[4]; - find_dta.GetResult(name,lname,size,hsize,date,time,attr); - drive=find_fcb.GetDrive()+1; - uint8_t find_attr = DOS_ATTR_ARCHIVE; - find_fcb.GetAttr(find_attr); /* Gets search attributes if extended */ - /* Create a correct file and extension */ - if (attr & DOS_ATTR_VOLUME) - DTAExtendNameVolumeLabel(name,file_name,ext); - else - DTAExtendName(name,file_name,ext); - - DOS_FCB fcb(RealSeg(dos.dta()),RealOff(dos.dta()));//TODO - fcb.Create(find_fcb.Extended()); - fcb.SetName(drive,file_name,ext); - fcb.SetAttr(find_attr); /* Only adds attribute if fcb is extended */ - fcb.SetResult(size,date,time,attr); - } - - bool DOS_FCBCreate(uint16_t seg,uint16_t offset) { - DOS_FCB fcb(seg,offset); - char shortname[DOS_FCBNAME];uint16_t handle; - uint8_t attr = DOS_ATTR_ARCHIVE; - fcb.GetAttr(attr); - if (!attr) attr = DOS_ATTR_ARCHIVE; //Better safe than sorry - - if (attr & DOS_ATTR_VOLUME) { - fcb.GetVolumeName(shortname); - return Drives[fcb.GetDrive()]->FileCreate(NULL,shortname,attr); - } - - fcb.GetName(shortname); - if (!DOS_CreateFile(shortname,attr,&handle,true)) return false; - fcb.FileOpen((uint8_t)handle); - return true; - } - - bool DOS_FCBOpen(uint16_t seg,uint16_t offset) { - DOS_FCB fcb(seg,offset); - char shortname[DOS_FCBNAME];uint16_t handle; - fcb.GetName(shortname); - - /* Search for file if name has wildcards */ - if (strpbrk(shortname,"*?")) { - LOG(LOG_FCB,LOG_WARN)("Wildcards in filename"); - if (!DOS_FCBFindFirst(seg,offset)) return false; - DOS_DTA find_dta(dos.tables.tempdta); - DOS_FCB find_fcb(RealSeg(dos.tables.tempdta),RealOff(dos.tables.tempdta)); - char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH],file_name[9],ext[4]; - uint32_t size,hsize;uint16_t date,time;uint8_t attr; - find_dta.GetResult(name,lname,size,hsize,date,time,attr); - DTAExtendName(name,file_name,ext); - find_fcb.SetName(fcb.GetDrive()+1,file_name,ext); - find_fcb.GetName(shortname); - } - - /* First check if the name is correct */ - uint8_t drive; - char fullname[DOS_PATHLENGTH]; - if (!DOS_MakeName(shortname,fullname,&drive)) return false; - - /* Check, if file is already opened */ - for (uint8_t i = 0;i < DOS_FILES;i++) { - if (Files[i] && Files[i]->IsOpen() && Files[i]->IsName(fullname)) { - Files[i]->AddRef(); - fcb.FileOpen(i); - return true; - } - } - - if (!DOS_OpenFile(shortname,OPEN_READWRITE,&handle,true)) return false; - fcb.FileOpen((uint8_t)handle); - return true; - } - - bool DOS_FCBClose(uint16_t seg,uint16_t offset) { - DOS_FCB fcb(seg,offset); - if(!fcb.Valid()) return false; - uint8_t fhandle; - fcb.FileClose(fhandle); - DOS_CloseFile(fhandle,true); - return true; - } - - bool DOS_FCBFindFirst(uint16_t seg,uint16_t offset) { - DOS_FCB fcb(seg,offset); - RealPt old_dta=dos.dta();dos.dta(dos.tables.tempdta); - char name[DOS_FCBNAME];fcb.GetName(name); - uint8_t attr = DOS_ATTR_ARCHIVE; - fcb.GetAttr(attr); /* Gets search attributes if extended */ - bool ret=DOS_FindFirst(name,attr,true); - dos.dta(old_dta); - if (ret) SaveFindResult(fcb); - return ret; - } - - bool DOS_FCBFindNext(uint16_t seg,uint16_t offset) { - DOS_FCB fcb(seg,offset); - RealPt old_dta=dos.dta();dos.dta(dos.tables.tempdta); - bool ret=DOS_FindNext(); - dos.dta(old_dta); - if (ret) SaveFindResult(fcb); - return ret; - } - - uint8_t DOS_FCBRead(uint16_t seg,uint16_t offset,uint16_t recno) { - DOS_FCB fcb(seg,offset); - uint8_t fhandle,cur_rec;uint16_t cur_block,rec_size; - fcb.GetSeqData(fhandle,rec_size); - if (fhandle==0xff && rec_size!=0) { - if (!DOS_FCBOpen(seg,offset)) return FCB_READ_NODATA; - LOG(LOG_FCB,LOG_WARN)("Reopened closed FCB"); - fcb.GetSeqData(fhandle,rec_size); - } - if (rec_size == 0) { - rec_size = 128; - fcb.SetSeqData(fhandle,rec_size); - } - fcb.GetRecord(cur_block,cur_rec); - uint32_t pos=((cur_block*128u)+cur_rec)*rec_size; - if (!DOS_SeekFile(fhandle,&pos,DOS_SEEK_SET,true)) return FCB_READ_NODATA; - uint16_t toread=rec_size; - if (!DOS_ReadFile(fhandle,dos_copybuf,&toread,true)) return FCB_READ_NODATA; - if (toread==0) return FCB_READ_NODATA; - if (toread < rec_size) { //Zero pad copybuffer to rec_size - Bitu i = toread; - while(i < rec_size) dos_copybuf[i++] = 0; - } - MEM_BlockWrite(Real2Phys(dos.dta())+(PhysPt)(recno*rec_size),dos_copybuf,rec_size); - if (++cur_rec>127u) { cur_block++;cur_rec=0; } - fcb.SetRecord(cur_block,cur_rec); - if (toread==rec_size) return FCB_SUCCESS; - return FCB_READ_PARTIAL; - } - - uint8_t DOS_FCBWrite(uint16_t seg,uint16_t offset,uint16_t recno) { - DOS_FCB fcb(seg,offset); - uint8_t fhandle,cur_rec;uint16_t cur_block,rec_size; - fcb.GetSeqData(fhandle,rec_size); - if (fhandle==0xffu && rec_size!=0u) { - if (!DOS_FCBOpen(seg,offset)) return FCB_READ_NODATA; - LOG(LOG_FCB,LOG_WARN)("Reopened closed FCB"); - fcb.GetSeqData(fhandle,rec_size); - } - if (rec_size == 0) { - rec_size = 128; - fcb.SetSeqData(fhandle,rec_size); - } - fcb.GetRecord(cur_block,cur_rec); - uint32_t pos=((cur_block*128u)+cur_rec)*rec_size; - if (!DOS_SeekFile(fhandle,&pos,DOS_SEEK_SET,true)) return FCB_ERR_WRITE; - MEM_BlockRead(Real2Phys(dos.dta())+(PhysPt)(recno*rec_size),dos_copybuf,rec_size); - uint16_t towrite=rec_size; - if (!DOS_WriteFile(fhandle,dos_copybuf,&towrite,true)) return FCB_ERR_WRITE; - uint32_t size;uint16_t date,time; - fcb.GetSizeDateTime(size,date,time); - if (pos+towrite>size) size=pos+towrite; - //time doesn't keep track of endofday - date = DOS_PackDate(dos.date.year,dos.date.month,dos.date.day); - uint32_t ticks = mem_readd(BIOS_TIMER); - uint32_t seconds = (ticks*10u)/182u; - uint16_t hour = (uint16_t)(seconds/3600u); - uint16_t min = (uint16_t)((seconds % 3600u)/60u); - uint16_t sec = (uint16_t)(seconds % 60u); - time = DOS_PackTime(hour,min,sec); - Files[fhandle]->time = time; - Files[fhandle]->date = date; - fcb.SetSizeDateTime(size,date,time); - if (++cur_rec>127u) { cur_block++;cur_rec=0; } - fcb.SetRecord(cur_block,cur_rec); - return FCB_SUCCESS; - } - - uint8_t DOS_FCBIncreaseSize(uint16_t seg,uint16_t offset) { - DOS_FCB fcb(seg,offset); - uint8_t fhandle,cur_rec;uint16_t cur_block,rec_size; - fcb.GetSeqData(fhandle,rec_size); - fcb.GetRecord(cur_block,cur_rec); - uint32_t pos=((cur_block*128u)+cur_rec)*rec_size; - if (!DOS_SeekFile(fhandle,&pos,DOS_SEEK_SET,true)) return FCB_ERR_WRITE; - uint16_t towrite=0; - if (!DOS_WriteFile(fhandle,dos_copybuf,&towrite,true)) return FCB_ERR_WRITE; - uint32_t size;uint16_t date,time; - fcb.GetSizeDateTime(size,date,time); - if (pos+towrite>size) size=pos+towrite; - //time doesn't keep track of endofday - date = DOS_PackDate(dos.date.year,dos.date.month,dos.date.day); - uint32_t ticks = mem_readd(BIOS_TIMER); - uint32_t seconds = (ticks*10u)/182u; - uint16_t hour = (uint16_t)(seconds/3600u); - uint16_t min = (uint16_t)((seconds % 3600u)/60u); - uint16_t sec = (uint16_t)(seconds % 60u); - time = DOS_PackTime(hour,min,sec); - Files[fhandle]->time = time; - Files[fhandle]->date = date; - fcb.SetSizeDateTime(size,date,time); - fcb.SetRecord(cur_block,cur_rec); - return FCB_SUCCESS; - } - - uint8_t DOS_FCBRandomRead(uint16_t seg,uint16_t offset,uint16_t * numRec,bool restore) { - /* if restore is true :random read else random block read. - * random read updates old block and old record to reflect the random data - * before the read!!!!!!!!! and the random data is not updated! (user must do this) - * Random block read updates these fields to reflect the state after the read! - */ - DOS_FCB fcb(seg,offset); - uint32_t random; - uint16_t old_block=0; - uint8_t old_rec=0; - uint8_t error=0; - uint16_t count; - - /* Set the correct record from the random data */ - fcb.GetRandom(random); - fcb.SetRecord((uint16_t)(random / 128u),(uint8_t)(random & 127u)); - if (restore) fcb.GetRecord(old_block,old_rec);//store this for after the read. - // Read records - for (count=0; count<*numRec; count++) { - error = DOS_FCBRead(seg,offset,count); - if (error!=FCB_SUCCESS) break; - } - if (error==FCB_READ_PARTIAL) count++; //partial read counts - *numRec=count; - uint16_t new_block;uint8_t new_rec; - fcb.GetRecord(new_block,new_rec); - if (restore) fcb.SetRecord(old_block,old_rec); - /* Update the random record pointer with new position only when restore is false*/ - if(!restore) fcb.SetRandom(new_block*128u+new_rec); - return error; - } - - uint8_t DOS_FCBRandomWrite(uint16_t seg,uint16_t offset,uint16_t * numRec,bool restore) { - /* see FCB_RandomRead */ - DOS_FCB fcb(seg,offset); - uint32_t random; - uint16_t old_block=0; - uint8_t old_rec=0; - uint8_t error=0; - - /* Set the correct record from the random data */ - fcb.GetRandom(random); - fcb.SetRecord((uint16_t)(random / 128u),(uint8_t)(random & 127u)); - if (restore) fcb.GetRecord(old_block,old_rec); - if (*numRec > 0) { - uint16_t count; - /* Write records */ - for (count=0; count<*numRec; count++) { - error = DOS_FCBWrite(seg,offset,count);// dos_fcbwrite return 0 false when true... - if (error!=FCB_SUCCESS) break; - } - *numRec=count; - } else { - DOS_FCBIncreaseSize(seg,offset); - } - uint16_t new_block;uint8_t new_rec; - fcb.GetRecord(new_block,new_rec); - if (restore) fcb.SetRecord(old_block,old_rec); - /* Update the random record pointer with new position only when restore is false */ - if (!restore) fcb.SetRandom(new_block*128u+new_rec); - return error; - } - - bool DOS_FCBGetFileSize(uint16_t seg,uint16_t offset) { - char shortname[DOS_PATHLENGTH];uint16_t entry; - DOS_FCB fcb(seg,offset); - fcb.GetName(shortname); - if (!DOS_OpenFile(shortname,OPEN_READ,&entry,true)) return false; - uint32_t size = 0; - Files[entry]->Seek(&size,DOS_SEEK_END); - DOS_CloseFile(entry,true); - - uint8_t handle; uint16_t rec_size; - fcb.GetSeqData(handle,rec_size); - if (rec_size == 0) rec_size = 128; //Use default if missing. - - uint32_t random=(size/rec_size); - if (size % rec_size) random++; - fcb.SetRandom(random); - return true; - } - - bool DOS_FCBDeleteFile(uint16_t seg,uint16_t offset){ - /* Special case: ????????.??? and DOS_ATTR_VOLUME */ - { - DOS_FCB fcb(seg,offset); - uint8_t attr = 0; - fcb.GetAttr(attr); - uint8_t drive = fcb.GetDrive(); - std::string label = Drives[drive]->GetLabel(); - - if (attr & DOS_ATTR_VOLUME) { - char shortname[DOS_FCBNAME]; - fcb.GetVolumeName(shortname); - - if (!strcmp(shortname,"???????????")) { - if (!label.empty()) { - Drives[drive]->SetLabel("",false,true); - LOG(LOG_DOSMISC,LOG_NORMAL)("FCB delete volume label"); - return true; - } - } - else { - /* MS-DOS 6.22 LABEL.EXE will explicitly request to delete the volume label by the volume label not ????????.???? */ - if (!label.empty()) { - while (label.length() < 11) label += ' '; - if (!memcmp(label.c_str(),shortname,11)) { - Drives[drive]->SetLabel("",false,true); - LOG(LOG_DOSMISC,LOG_NORMAL)("FCB delete volume label deleted"); - return true; - } - } - } - - LOG(LOG_DOSMISC,LOG_NORMAL)("FCB delete volume label not found (current='%s' asking='%s')",label.c_str(),shortname); - DOS_SetError(DOSERR_FILE_NOT_FOUND); // right? - return false; - } - } - - /* FCB DELETE honours wildcards. it will return true if one or more - * files get deleted. - * To get this: the dta is set to temporary dta in which found files are - * stored. This can not be the tempdta as that one is used by fcbfindfirst - */ - RealPt old_dta=dos.dta();dos.dta(dos.tables.tempdta_fcbdelete); - RealPt new_dta=dos.dta(); - bool nextfile = false; - bool return_value = false; - nextfile = DOS_FCBFindFirst(seg,offset); - DOS_FCB fcb(RealSeg(new_dta),RealOff(new_dta)); - while(nextfile) { - char shortname[DOS_FCBNAME] = { 0 }; - fcb.GetName(shortname); - bool res=DOS_UnlinkFile(shortname); - if(!return_value && res) return_value = true; //at least one file deleted - nextfile = DOS_FCBFindNext(seg,offset); - } - dos.dta(old_dta); /*Restore dta */ - return return_value; - } - - char* trimString(char* str); - - bool DOS_FCBRenameFile(uint16_t seg, uint16_t offset){ - DOS_FCB fcbold(seg,offset); - DOS_FCB fcbnew(seg,offset); - fcbnew.SetPtPhys(fcbnew.GetPtPhys()+0x10u);//HACK: FCB NEW memory offset is affected by whether FCB OLD is extended - if(!fcbold.Valid()) return false; - char oldname[DOS_FCBNAME]; - char newname[DOS_FCBNAME]; - fcbold.GetName(oldname);fcbnew.GetName(newname); - - { - uint8_t drive = fcbold.GetDrive(); - std::string label = Drives[drive]->GetLabel(); - uint8_t attr = 0; - - fcbold.GetAttr(attr); - /* According to RBIL and confirmed with SETLABEL.ASM in DOSLIB2, you can rename a volume label dirent as well with this function */ - if (attr & DOS_ATTR_VOLUME) { - fcbold.GetVolumeName(oldname); - fcbnew.GetVolumeName(newname); - - for (unsigned int i=0;i < 11;i++) - oldname[i] = toupper(oldname[i]); - - trimString(oldname); - trimString(newname); - - if (!label.empty()) { - if (!strcmp(oldname,"???????????") || label == oldname) { - Drives[drive]->SetLabel(newname,false,true); - LOG(LOG_DOSMISC,LOG_NORMAL)("FCB rename volume label to '%s' from '%s'",newname,oldname); - return true; - } - else { - LOG(LOG_DOSMISC,LOG_NORMAL)("FCB rename volume label rejected, does not match current label '%s' from '%s'",newname,oldname); - DOS_SetError(DOSERR_FILE_NOT_FOUND); // right? - return false; - } - } - else { - LOG(LOG_DOSMISC,LOG_NORMAL)("FCB rename volume label rejected, no label set"); - DOS_SetError(DOSERR_FILE_NOT_FOUND); // right? - return false; - } - } - } - - /* Check, if sourcefile is still open. This was possible in DOS, but modern oses don't like this */ - uint8_t drive; char fullname[DOS_PATHLENGTH]; - if (!DOS_MakeName(oldname,fullname,&drive)) return false; - - DOS_PSP psp(dos.psp()); - for (uint8_t i=0;iIsOpen() && Files[i]->IsName(fullname)) { - uint16_t handle = psp.FindEntryByHandle(i); - //(more than once maybe) - if (handle == 0xFFu) { - DOS_CloseFile(i,true); - } else { - DOS_CloseFile(handle); - } - } - } - - /* Rename the file */ - return DOS_Rename(oldname,newname); - } - - void DOS_FCBSetRandomRecord(uint16_t seg, uint16_t offset) { - DOS_FCB fcb(seg,offset); - uint16_t block;uint8_t rec; - fcb.GetRecord(block,rec); - fcb.SetRandom(block*128u+rec); - } - - - bool DOS_FileExists(char const * const name) { - char fullname[DOS_PATHLENGTH];uint8_t drive; - if (!DOS_MakeName(name,fullname,&drive)) return false; - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (Network_IsNetworkResource(name)) return Network_FileExists(fullname); - #endif - return Drives[drive]->FileExists(fullname); - } - - bool DOS_GetAllocationInfo(uint8_t drive,uint16_t * _bytes_sector,uint8_t * _sectors_cluster,uint16_t * _total_clusters) { - if (!drive) drive = DOS_GetDefaultDrive(); - else drive--; - if (drive >= DOS_DRIVES || !Drives[drive]) { - DOS_SetError(DOSERR_INVALID_DRIVE); - return false; - } - uint16_t _free_clusters; - Drives[drive]->AllocationInfo(_bytes_sector,_sectors_cluster,_total_clusters,&_free_clusters); - SegSet16(ds,RealSeg(dos.tables.mediaid)); - reg_bx=RealOff(dos.tables.mediaid+drive*dos.tables.dpb_size); - return true; - } - - bool DOS_SetDrive(uint8_t drive) { - if (Drives[drive]) { - DOS_SetDefaultDrive(drive); - return true; - } else { - return false; - } - } - - bool DOS_GetFileDate(uint16_t entry, uint16_t* otime, uint16_t* odate) { - uint32_t handle=RealHandle(entry); - if (handle>=DOS_FILES) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if(Network_IsActiveResource(entry)) - return Network_GetFileDate(entry, otime, odate); - #endif - if (!Files[handle] || !Files[handle]->IsOpen()) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - if (!Files[handle]->UpdateDateTimeFromHost()) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - *otime = Files[handle]->time; - *odate = Files[handle]->date; - return true; - } - - bool DOS_SetFileDate(uint16_t entry, uint16_t ntime, uint16_t ndate) - { - uint32_t handle=RealHandle(entry); - if (handle>=DOS_FILES) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if(Network_IsActiveResource(entry)) - return Network_SetFileDate(entry, ntime, ndate); - #endif - if (!Files[handle]) { - DOS_SetError(DOSERR_INVALID_HANDLE); - return false; - } - Files[handle]->time = ntime; - Files[handle]->date = ndate; - Files[handle]->newtime = true; - - return true; - } - - extern int swapInDisksSpecificDrive; - void DOS_SetupFiles (void) { - /* Setup the File Handles */ - Files = new DOS_File * [DOS_FILES]; - uint32_t i; - for (i=0;iRelease(); - diskSwap[si] = NULL; - } - } - swapInDisksSpecificDrive = -1; - } - Drives[25]=new Virtual_Drive(); - } - - // save state support - void DOS_File::SaveState( std::ostream& stream ) - { - uint32_t file_namelen, seek_pos; - - - file_namelen = (uint32_t)strlen( name ); - seek_pos = GetSeekPos(); - - //****************************************** - //****************************************** - //****************************************** - - // - pure data - WRITE_POD( &file_namelen, file_namelen ); - WRITE_POD_SIZE( name, file_namelen ); - - WRITE_POD( &flags, flags ); - WRITE_POD( &open, open ); - - WRITE_POD( &attr, attr ); - WRITE_POD( &time, time ); - WRITE_POD( &date, date ); - WRITE_POD( &refCtr, refCtr ); - WRITE_POD( &hdrive, hdrive ); - - //****************************************** - //****************************************** - //****************************************** - - // - reloc ptr - WRITE_POD( &seek_pos, seek_pos ); - } - - - void DOS_File::LoadState( std::istream& stream, bool pop ) - { - uint32_t file_namelen, seek_pos; - char *file_name; - - //****************************************** - //****************************************** - //****************************************** - - // - pure data - READ_POD( &file_namelen, file_namelen ); - file_name = (char*)alloca( file_namelen * sizeof(char) ); - READ_POD_SIZE( file_name, file_namelen ); - - READ_POD( &flags, flags ); - READ_POD( &open, open ); - - READ_POD( &attr, attr ); - READ_POD( &time, time ); - READ_POD( &date, date ); - READ_POD( &refCtr, refCtr ); - READ_POD( &hdrive, hdrive ); - - //****************************************** - //****************************************** - //****************************************** - - // - reloc ptr - READ_POD( &seek_pos, seek_pos ); - - if (pop) - return; - - if( open ) Seek( &seek_pos, DOS_SEEK_SET ); - else Close(); - } - - extern bool dos_kernel_disabled; - extern uint8_t ZDRIVE_NUM; - struct Alloc { - uint16_t bytes_sector; - uint8_t sectors_cluster; - uint16_t total_clusters; - uint16_t free_clusters; - uint8_t mediaid; - }; - Alloc lalloc, oalloc; - struct Opts { - uint32_t bytesector; - uint32_t cylsector; - uint32_t headscyl; - uint32_t cylinders; - int mounttype; - uint8_t mediaid; - unsigned char CDROM_drive; - unsigned long cdrom_sector_offset; - unsigned char floppy_emu_type; - }; - Opts opts; - char overlaydir[CROSS_LEN]; - void MSCDEX_SetCDInterface(int intNr, int forceCD); - void POD_Save_DOS_Files( std::ostream& stream ) - { - char dinfo[256]; - WRITE_POD( &ZDRIVE_NUM, ZDRIVE_NUM); - if (!dos_kernel_disabled) { - // 1. Do drives first (directories -> files) - // 2. Then files next - - for( int i=2; iGetInfo()); - WRITE_POD( &dinfo, dinfo); - *overlaydir=0; - if (!strncmp(dinfo,"local directory ",16) || !strncmp(dinfo,"CDRom ",6) || !strncmp(dinfo,"PhysFS directory ",17) || !strncmp(dinfo,"PhysFS CDRom ",13) ) { - localDrive *ldp = dynamic_cast(Drives[lcv]); - if (!ldp) ldp = dynamic_cast(Drives[lcv]); - if (!ldp) ldp = dynamic_cast(Drives[lcv]); - if (ldp) { - lalloc.bytes_sector=ldp->allocation.bytes_sector; - lalloc.sectors_cluster=ldp->allocation.sectors_cluster; - lalloc.total_clusters=ldp->allocation.total_clusters; - lalloc.free_clusters=ldp->allocation.free_clusters; - lalloc.mediaid=ldp->allocation.mediaid; - } - Overlay_Drive *odp = dynamic_cast(Drives[lcv]); - if (odp) { - strcpy(overlaydir,odp->getOverlaydir()); - oalloc.bytes_sector=odp->allocation.bytes_sector; - oalloc.sectors_cluster=odp->allocation.sectors_cluster; - oalloc.total_clusters=odp->allocation.total_clusters; - oalloc.free_clusters=odp->allocation.free_clusters; - oalloc.mediaid=odp->allocation.mediaid; - } else { - physfsDrive *pdp = dynamic_cast(Drives[lcv]); - if (pdp && pdp->getOverlaydir()) - strcpy(overlaydir,pdp->getOverlaydir()); - } - } else if (!strncmp(dinfo,"fatDrive ",9)) { - fatDrive *fdp = dynamic_cast(Drives[lcv]); - if (fdp) { - opts.bytesector=fdp->loadedDisk?fdp->loadedDisk->sector_size:fdp->opts.bytesector; - opts.cylsector=fdp->loadedDisk?fdp->loadedDisk->sectors:fdp->opts.cylsector; - opts.headscyl=fdp->loadedDisk?fdp->loadedDisk->heads:fdp->opts.headscyl; - opts.cylinders=fdp->loadedDisk?fdp->loadedDisk->cylinders:fdp->opts.cylinders; - opts.mounttype=fdp->opts.mounttype; - opts.mediaid=fdp->GetMediaByte(); - opts.CDROM_drive=fdp->el.CDROM_drive; - opts.cdrom_sector_offset=fdp->el.cdrom_sector_offset; - opts.floppy_emu_type=fdp->el.floppy_emu_type; - } - } - - WRITE_POD( &overlaydir, overlaydir); - WRITE_POD( &lalloc, lalloc); - WRITE_POD( &oalloc, oalloc); - WRITE_POD( &opts, opts); - Drives[lcv]->SaveState(stream); - } - - for( unsigned int lcv=0; lcvGetName() == NULL ) file_valid = 0xff; - else { - if( strcmp( Files[lcv]->GetName(), "NUL" ) == 0 ) file_valid = 0xfe;//earth 2140 needs this - if( strcmp( Files[lcv]->GetName(), "CON" ) == 0 ) file_valid = 0xfe; - if( strcmp( Files[lcv]->GetName(), "LPT1" ) == 0 ) file_valid = 0xfe; - if( strcmp( Files[lcv]->GetName(), "PRN" ) == 0 ) file_valid = 0xfe; - if( strcmp( Files[lcv]->GetName(), "AUX" ) == 0 ) file_valid = 0xfe; - if( strcmp( Files[lcv]->GetName(), "EMMXXXX0" ) == 0 ) file_valid = 0xfe;//raiden needs this - } - - // - reloc ptr - WRITE_POD( &file_valid, file_valid ); - // system files - if( file_valid == 0xff ) continue; - if( file_valid == 0xfe ) { - WRITE_POD( &Files[lcv]->refCtr, Files[lcv]->refCtr ); - continue; - } - - //********************************************** - //********************************************** - //********************************************** - - file_namelen = (uint8_t)strlen( Files[lcv]->name ); - file_name = (char *) alloca( file_namelen ); - strcpy( file_name, Files[lcv]->name ); - - file_drive = Files[lcv]->GetDrive(); - file_flags = Files[lcv]->flags; - - // - Drives->FileOpen vars (repeat copy) - WRITE_POD( &file_namelen, file_namelen ); - WRITE_POD_SIZE( file_name, file_namelen ); - - WRITE_POD( &file_drive, file_drive ); - WRITE_POD( &file_flags, file_flags ); - - Files[lcv]->SaveState(stream); - } - } else { - for( int i=2; iGetInfo()); - WRITE_POD( &dinfo, dinfo); - } - } - - for (int i=2; i(imageDiskList[d]); - strcpy(diskname, image!=NULL?"El Torito floppy drive":imageDiskList[d]->diskname.c_str()); - WRITE_POD( &diskname, diskname ); - if (image!=NULL) { - opts.CDROM_drive=image->CDROM_drive; - opts.cdrom_sector_offset=image->cdrom_sector_offset; - opts.floppy_emu_type=image->floppy_type; - opts.mounttype=1; - } else { - imageDiskMemory* idmem = dynamic_cast(imageDiskList[d]); - imageDiskVHD* idvhd = dynamic_cast(imageDiskList[d]); - if (idmem!=NULL) - opts.mounttype=2; - else if (idvhd!=NULL) - opts.mounttype=3; - else { - opts.bytesector=imageDiskList[d]->sector_size; - opts.cylsector=imageDiskList[d]->sectors; - opts.headscyl=imageDiskList[d]->heads; - opts.cylinders=imageDiskList[d]->cylinders; - opts.mounttype=0; - } - } - WRITE_POD( &opts, opts); - } - } - - void DOS_EnableDriveMenu(char drv); - void IDE_Auto(signed char &index,bool &slave); - bool AttachToBiosByLetter(imageDisk* image, const char drive); - bool AttachToBiosAndIdeByLetter(imageDisk* image, const char drive, const unsigned char ide_index, const bool ide_slave); - imageDiskMemory* CreateRamDrive(Bitu sizes[], const int reserved_cylinders, const bool forceFloppy, Program* obj); - - void unmount(int lcv) { - if (!Drives[lcv] || lcv>=DOS_DRIVES-1) return; - const isoDrive* cdrom = dynamic_cast(Drives[lcv]); - if (DriveManager::UnmountDrive(lcv) == 0) { - if (cdrom) IDE_CDROM_Detach(lcv); - Drives[lcv]=nullptr; - DOS_EnableDriveMenu('A'+lcv); - mem_writeb(Real2Phys(dos.tables.mediaid)+lcv*dos.tables.dpb_size,0); - } - } - - void POD_Load_DOS_Files( std::istream& stream ) - { - char dinfo[256]; - std::vector clist; - clist.clear(); - uint8_t ZDRIVE_CUR = ZDRIVE_NUM; - READ_POD( &ZDRIVE_NUM, ZDRIVE_NUM); - if (!dos_kernel_disabled) { - if (ZDRIVE_CUR != ZDRIVE_NUM) { - Drives[ZDRIVE_NUM] = Drives[ZDRIVE_CUR]; - Drives[ZDRIVE_CUR] = nullptr; - } - // 1. Do drives first (directories -> files) - // 2. Then files next - - for( int i=2; iinfo, dinfo) && (!strncmp(dinfo,"local directory ",16) || !strncmp(dinfo,"CDRom ",6) || !strncmp(dinfo,"PhysFS directory ",17) || !strncmp(dinfo,"PhysFS CDRom ",13) || (!strncmp(dinfo,"isoDrive ",9) || !strncmp(dinfo,"fatDrive ",9)))) - unmount(lcv); - if( !Drives[lcv] ) { - std::vector options; - if (!strncmp(dinfo,"local directory ",16)) { - Drives[lcv]=new localDrive(dinfo+16,lalloc.bytes_sector,lalloc.sectors_cluster,lalloc.total_clusters,lalloc.free_clusters,lalloc.mediaid,options); - if (Drives[lcv]) { - DOS_EnableDriveMenu('A'+lcv); - mem_writeb(Real2Phys(dos.tables.mediaid)+lcv*dos.tables.dpb_size,lalloc.mediaid); - if (strlen(overlaydir)) { - uint8_t error = 0; - Drives[lcv]=new Overlay_Drive(dynamic_cast(Drives[lcv])->getBasedir(),overlaydir,oalloc.bytes_sector,oalloc.sectors_cluster,oalloc.total_clusters,oalloc.free_clusters,oalloc.mediaid,error,options); - } - } else - LOG_MSG("Error: Cannot restore drive from directory %s\n", dinfo+16); - } else if (!strncmp(dinfo,"CDRom ",6) || !strncmp(dinfo,"PhysFS CDRom ",13)) { - int num = -1; - int error = 0; - int id, major, minor; - DOSBox_CheckOS(id, major, minor); - if ((id==VER_PLATFORM_WIN32_NT) && (major>5)) - MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DX, num); - else - MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); - if (!strncmp(dinfo,"PhysFS CDRom ",13)) { - std::string str=std::string(dinfo+13); - std::size_t found=str.find(", "); - if (found!=std::string::npos) - str=str.substr(0,found); - Drives[lcv] = new physfscdromDrive('A'+lcv,(":"+str+"\\").c_str(),lalloc.bytes_sector,lalloc.sectors_cluster,lalloc.total_clusters,0,lalloc.mediaid,error,options); - } else - Drives[lcv] = new cdromDrive('A'+lcv,dinfo+6,lalloc.bytes_sector,lalloc.sectors_cluster,lalloc.total_clusters,lalloc.free_clusters,lalloc.mediaid,error,options); - if (Drives[lcv]) { - DOS_EnableDriveMenu('A'+lcv); - mem_writeb(Real2Phys(dos.tables.mediaid)+lcv*dos.tables.dpb_size,lalloc.mediaid); - } else - LOG_MSG("Error: Cannot restore drive from directory %s\n", dinfo+6); - } else if (!strncmp(dinfo,"PhysFS directory ",17)) { - int error = 0; - std::string str=std::string(dinfo+17); - std::size_t found=str.find(", "); - if (found!=std::string::npos) - str=str.substr(0,found); - Drives[lcv]=new physfsDrive('A'+lcv,(":"+str+"\\").c_str(),lalloc.bytes_sector,lalloc.sectors_cluster,lalloc.total_clusters,lalloc.free_clusters,lalloc.mediaid,error,options); - if (Drives[lcv]) { - if (strlen(overlaydir)) dynamic_cast(Drives[lcv])->setOverlaydir(overlaydir); - DOS_EnableDriveMenu('A'+lcv); - mem_writeb(Real2Phys(dos.tables.mediaid)+lcv*dos.tables.dpb_size,lalloc.mediaid); - } else - LOG_MSG("Error: Cannot restore drive from directory %s\n", dinfo+16); - } else if (!strncmp(dinfo,"isoDrive ",9) && *(dinfo+9)) { - MSCDEX_SetCDInterface(CDROM_USE_SDL, -1); - uint8_t mediaid = 0xF8; - int error = -1; - isoDrive* newDrive = new isoDrive('A'+lcv, dinfo+9, mediaid, error, options); - if (!error) { - Drives[lcv] = newDrive; - DriveManager::AppendDisk(lcv, newDrive); - DriveManager::InitializeDrive(lcv); - DOS_EnableDriveMenu('A'+lcv); - mem_writeb(Real2Phys(dos.tables.mediaid) + lcv*dos.tables.dpb_size, mediaid); - clist.push_back(lcv); - } - } else if (!strncmp(dinfo,"fatDrive ",9)) { - fatDrive* newDrive = NULL; - Bitu sizes[4] = { 0,0,0,0 }; - if (opts.mounttype==1) { - imageDisk * newImage = new imageDiskElToritoFloppy((unsigned char)opts.CDROM_drive, opts.cdrom_sector_offset, opts.floppy_emu_type); - if (newImage != NULL) { - newImage->Addref(); - newDrive = new fatDrive(newImage, options); - newImage->Release(); - } else - LOG_MSG("Error: Cannot restore drive from El Torito floppy image.\n"); - - } else if (opts.mounttype==2) { - imageDiskMemory* image = CreateRamDrive(sizes, 0, lcv < 2 && sizes[0] == 0, NULL); - if (image != NULL && image->Format() == 0x00) { - image->Addref(); - newDrive = new fatDrive(image, options); - image->Release(); - } - } else if (opts.mounttype==3 && *(dinfo+9)) { - imageDisk* vhdImage = NULL; - if (imageDiskVHD::Open(dinfo+9, false, &vhdImage)==imageDiskVHD::OPEN_SUCCESS) - newDrive = new fatDrive(vhdImage, options); - vhdImage = NULL; - } else if (!opts.mounttype && *(dinfo+9)) - newDrive = new fatDrive(dinfo+9, opts.bytesector, opts.cylsector, opts.headscyl, opts.cylinders, options); - if (newDrive && newDrive->created_successfully) { - Drives[lcv] = newDrive; - DriveManager::AppendDisk(lcv, newDrive); - DriveManager::InitializeDrive(lcv); - DOS_EnableDriveMenu('A'+lcv); - mem_writeb(Real2Phys(dos.tables.mediaid) + lcv*dos.tables.dpb_size, opts.mediaid); - } else if ((!opts.mounttype || opts.mounttype==3) && *(dinfo+9)) - LOG_MSG("Error: Cannot restore drive from image file %s\n", dinfo+9); - } - } - if( Drives[lcv] ) Drives[lcv]->LoadState(stream); - } - - //Alien Carnage - game creates and unlinks temp files - //Here are two situations - //1. Game already unlinked temp file, but information about file is still in Files[] and we saved it. In this case we must only pop old data from stream by loading. This is fixed. - //2. Game still did not unlink file, We saved this information. Then was game restarted and temp files were removed. Then we try load save state, but we don't have temp file. This is not fixed - DOS_File *dummy = NULL; - - for( unsigned int lcv=0; lcvrefCtr, Files[lcv]->refCtr ); - continue; - } - - // shutdown old file - if( Files[lcv] && Files[lcv]->GetName() != NULL ) { - // invalid file state - abort - if( strcmp( Files[lcv]->GetName(), "NUL" ) == 0 ) break; - if( strcmp( Files[lcv]->GetName(), "CON" ) == 0 ) break; - if( strcmp( Files[lcv]->GetName(), "LPT1" ) == 0 ) break; - if( strcmp( Files[lcv]->GetName(), "PRN" ) == 0 ) break; - if( strcmp( Files[lcv]->GetName(), "AUX" ) == 0 ) break; - if( strcmp( Files[lcv]->GetName(), "EMMXXXX0" ) == 0 ) break;//raiden needs this - - - if( Files[lcv]->IsOpen() ) Files[lcv]->Close(); - if (Files[lcv]->RemoveRef()<=0) { - delete Files[lcv]; - } - Files[lcv]=nullptr; - } - - // ignore NULL file - if( file_valid == 0xff ) continue; - - //********************************************** - //********************************************** - //********************************************** - - // - Drives->FileOpen vars (repeat copy) - - READ_POD( &file_namelen, file_namelen ); - file_name = (char *) alloca( file_namelen ); - READ_POD_SIZE( file_name, file_namelen ); - - READ_POD( &file_drive, file_drive ); - READ_POD( &file_flags, file_flags ); - - - // NOTE: Must open regardless to get 'new' DOS_File class - Drives[file_drive]->FileOpen( &Files[lcv], file_name, file_flags ); - - if( Files[lcv] ) { - Files[lcv]->LoadState(stream, false); - } else { - //Alien carnage ->pop data for invalid file from stream - if (dummy == NULL) { - dummy = new LocalFile(); - } - dummy->LoadState(stream, true); - }; - } - - if (dummy != NULL) { - delete dummy; - } - } else { - for( int i=2; iinfo, dinfo)) - unmount(lcv); - if (!Drives[lcv] && !strncmp(dinfo,"isoDrive ",9)) { - std::vector options; - MSCDEX_SetCDInterface(CDROM_USE_SDL, -1); - uint8_t mediaid = 0xF8; - int error = -1; - isoDrive* newDrive = new isoDrive('A'+lcv, dinfo+9, mediaid, error, options); - if (!error) { - Drives[lcv] = newDrive; - DriveManager::AppendDisk(lcv, newDrive); - DriveManager::InitializeDrive(lcv); - mem_writeb(Real2Phys(dos.tables.mediaid) + lcv*dos.tables.dpb_size, mediaid); - clist.push_back(lcv); - } - } - } - } - - for (int i=2; i 1) IDE_Hard_Disk_Detach(d); - imageDiskList[d]->Release(); - imageDiskList[d] = NULL; - imageDiskChange[d] = true; - } - if (i==MAX_DISK_IMAGES-1) - for (auto &it : clist) { - ide_slave = false; - ide_index = -1; - IDE_Auto(ide_index,ide_slave); - if (ide_index >= 0) IDE_CDROM_Attach(ide_index, ide_slave, it); - } - continue; - } - char diskname[256]; - READ_POD( &diskname, diskname ); - READ_POD( &opts, opts); - Bitu sizes[4] = { 0,0,0,0 }; - ide_slave = false; - ide_index = -1; - IDE_Auto(ide_index,ide_slave); - if( imageDiskList[d] && ((opts.mounttype==1 && dynamic_cast(imageDiskList[d])==NULL) || (opts.mounttype!=1 && strcasecmp(imageDiskList[d]->diskname.c_str(), diskname )))) { - if (d > 1) IDE_Hard_Disk_Detach(d); - imageDiskList[d]->Release(); - imageDiskList[d] = NULL; - imageDiskChange[d] = true; - } - if (imageDiskList[d]) - ; - else if (opts.mounttype==1) { - imageDisk * image = new imageDiskElToritoFloppy((unsigned char)opts.CDROM_drive, opts.cdrom_sector_offset, opts.floppy_emu_type); - if (image) AttachToBiosByLetter(image, 'A'+d); - else LOG_MSG("Warning: Cannot restore drive number from El Torito floppy image.\n"); - } else if (opts.mounttype==2) { - imageDiskMemory* image = CreateRamDrive(sizes, 0, d < 2 && sizes[0] == 0, NULL); - if (image != NULL && image->Format() == 0x00) AttachToBiosAndIdeByLetter(image, d, (unsigned char)ide_index, ide_slave); - } else if (opts.mounttype==3 && *diskname) { - imageDisk* image = NULL; - if (imageDiskVHD::Open(diskname, false, &image)==imageDiskVHD::OPEN_SUCCESS) - AttachToBiosAndIdeByLetter(image, 'A'+d, (unsigned char)ide_index, ide_slave); - else - LOG_MSG("Warning: Cannot restore drive number from image file %s\n", diskname); - image = NULL; - } else if (!opts.mounttype && *diskname) { - std::vector options; - fatDrive* newDrive = new fatDrive(diskname, opts.bytesector, opts.cylsector, opts.headscyl, opts.cylinders, options); - // if (newDrive->created_successfully) { - // imageDisk* image = newDrive->loadedDisk; - // AttachToBiosAndIdeByLetter(image, 'A'+d, (unsigned char)ide_index, ide_slave); - // } else - LOG_MSG("Warning: Cannot restore drive number from image file %s\n", diskname); - if (newDrive) delete newDrive; - } - if (i==MAX_DISK_IMAGES-1) - for (auto &it : clist) { - ide_slave = false; - ide_index = -1; - IDE_Auto(ide_index,ide_slave); - if (ide_index >= 0) IDE_CDROM_Attach(ide_index, ide_slave, it); - } - } - } - \ No newline at end of file + RealPt old_dta=dos.dta();dos.dta(dos.tables.tempdta_fcbdelete); + RealPt new_dta=dos.dta(); + bool nextfile = false; + bool return_value = false; + nextfile = DOS_FCBFindFirst(seg,offset); + DOS_FCB fcb(RealSeg(new_dta),RealOff(new_dta)); + while(nextfile) { + char shortname[DOS_FCBNAME] = { 0 }; + fcb.GetName(shortname); + bool res=DOS_UnlinkFile(shortname); + if(!return_value && res) return_value = true; //at least one file deleted + nextfile = DOS_FCBFindNext(seg,offset); + } + dos.dta(old_dta); /*Restore dta */ + return return_value; +} + +char* trimString(char* str); + +bool DOS_FCBRenameFile(uint16_t seg, uint16_t offset){ + DOS_FCB fcbold(seg,offset); + DOS_FCB fcbnew(seg,offset); + fcbnew.SetPtPhys(fcbnew.GetPtPhys()+0x10u);//HACK: FCB NEW memory offset is affected by whether FCB OLD is extended + if(!fcbold.Valid()) return false; + char oldname[DOS_FCBNAME]; + char newname[DOS_FCBNAME]; + fcbold.GetName(oldname);fcbnew.GetName(newname); + + { + uint8_t drive = fcbold.GetDrive(); + std::string label = Drives[drive]->GetLabel(); + uint8_t attr = 0; + + fcbold.GetAttr(attr); + /* According to RBIL and confirmed with SETLABEL.ASM in DOSLIB2, you can rename a volume label dirent as well with this function */ + if (attr & DOS_ATTR_VOLUME) { + fcbold.GetVolumeName(oldname); + fcbnew.GetVolumeName(newname); + + for (unsigned int i=0;i < 11;i++) + oldname[i] = toupper(oldname[i]); + + trimString(oldname); + trimString(newname); + + if (!label.empty()) { + if (!strcmp(oldname,"???????????") || label == oldname) { + Drives[drive]->SetLabel(newname,false,true); + LOG(LOG_DOSMISC,LOG_NORMAL)("FCB rename volume label to '%s' from '%s'",newname,oldname); + return true; + } + else { + LOG(LOG_DOSMISC,LOG_NORMAL)("FCB rename volume label rejected, does not match current label '%s' from '%s'",newname,oldname); + DOS_SetError(DOSERR_FILE_NOT_FOUND); // right? + return false; + } + } + else { + LOG(LOG_DOSMISC,LOG_NORMAL)("FCB rename volume label rejected, no label set"); + DOS_SetError(DOSERR_FILE_NOT_FOUND); // right? + return false; + } + } + } + + /* Check, if sourcefile is still open. This was possible in DOS, but modern oses don't like this */ + uint8_t drive; char fullname[DOS_PATHLENGTH]; + if (!DOS_MakeName(oldname,fullname,&drive)) return false; + + DOS_PSP psp(dos.psp()); + for (uint8_t i=0;iIsOpen() && Files[i]->IsName(fullname)) { + uint16_t handle = psp.FindEntryByHandle(i); + //(more than once maybe) + if (handle == 0xFFu) { + DOS_CloseFile(i,true); + } else { + DOS_CloseFile(handle); + } + } + } + + /* Rename the file */ + return DOS_Rename(oldname,newname); +} + +void DOS_FCBSetRandomRecord(uint16_t seg, uint16_t offset) { + DOS_FCB fcb(seg,offset); + uint16_t block;uint8_t rec; + fcb.GetRecord(block,rec); + fcb.SetRandom(block*128u+rec); +} + + +bool DOS_FileExists(char const * const name) { + char fullname[DOS_PATHLENGTH];uint8_t drive; + if (!DOS_MakeName(name,fullname,&drive)) return false; +#if !defined(OSFREE) +# if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + if (Network_IsNetworkResource(name)) return Network_FileExists(fullname); +# endif +#endif + return Drives[drive]->FileExists(fullname); +} + +bool DOS_GetAllocationInfo(uint8_t drive,uint16_t * _bytes_sector,uint8_t * _sectors_cluster,uint16_t * _total_clusters) { + if (!drive) drive = DOS_GetDefaultDrive(); + else drive--; + if (drive >= DOS_DRIVES || !Drives[drive]) { + DOS_SetError(DOSERR_INVALID_DRIVE); + return false; + } + uint16_t _free_clusters; + Drives[drive]->AllocationInfo(_bytes_sector,_sectors_cluster,_total_clusters,&_free_clusters); + SegSet16(ds,RealSeg(dos.tables.mediaid)); + reg_bx=RealOff(dos.tables.mediaid+drive*dos.tables.dpb_size); + return true; +} + +bool DOS_SetDrive(uint8_t drive) { + if (Drives[drive]) { + DOS_SetDefaultDrive(drive); + return true; + } else { + return false; + } +} + +bool DOS_GetFileDate(uint16_t entry, uint16_t* otime, uint16_t* odate) { + uint32_t handle=RealHandle(entry); + if (handle>=DOS_FILES) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } +#if !defined(OSFREE) +# if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + if(Network_IsActiveResource(entry)) + return Network_GetFileDate(entry, otime, odate); +# endif +#endif + if (!Files[handle] || !Files[handle]->IsOpen()) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + if (!Files[handle]->UpdateDateTimeFromHost()) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + *otime = Files[handle]->time; + *odate = Files[handle]->date; + return true; +} + +bool DOS_SetFileDate(uint16_t entry, uint16_t ntime, uint16_t ndate) +{ + uint32_t handle=RealHandle(entry); + if (handle>=DOS_FILES) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } +#if !defined(OSFREE) +# if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + if(Network_IsActiveResource(entry)) + return Network_SetFileDate(entry, ntime, ndate); +# endif +#endif + if (!Files[handle]) { + DOS_SetError(DOSERR_INVALID_HANDLE); + return false; + } + Files[handle]->time = ntime; + Files[handle]->date = ndate; + Files[handle]->newtime = true; + + return true; +} + +extern int swapInDisksSpecificDrive; +void DOS_SetupFiles (void) { + /* Setup the File Handles */ + Files = new DOS_File * [DOS_FILES]; + uint32_t i; + for (i=0;iRelease(); + diskSwap[si] = NULL; + } + } + swapInDisksSpecificDrive = -1; + } + Drives[25]=new Virtual_Drive(); +} + +// save state support +void DOS_File::SaveState( std::ostream& stream ) +{ + uint32_t file_namelen, seek_pos; + + + file_namelen = (uint32_t)strlen( name ); + seek_pos = GetSeekPos(); + + //****************************************** + //****************************************** + //****************************************** + + // - pure data + WRITE_POD( &file_namelen, file_namelen ); + WRITE_POD_SIZE( name, file_namelen ); + + WRITE_POD( &flags, flags ); + WRITE_POD( &open, open ); + + WRITE_POD( &attr, attr ); + WRITE_POD( &time, time ); + WRITE_POD( &date, date ); + WRITE_POD( &refCtr, refCtr ); + WRITE_POD( &hdrive, hdrive ); + + //****************************************** + //****************************************** + //****************************************** + + // - reloc ptr + WRITE_POD( &seek_pos, seek_pos ); +} + + +void DOS_File::LoadState( std::istream& stream, bool pop ) +{ + uint32_t file_namelen, seek_pos; + char *file_name; + + //****************************************** + //****************************************** + //****************************************** + + // - pure data + READ_POD( &file_namelen, file_namelen ); + file_name = (char*)alloca( file_namelen * sizeof(char) ); + READ_POD_SIZE( file_name, file_namelen ); + + READ_POD( &flags, flags ); + READ_POD( &open, open ); + + READ_POD( &attr, attr ); + READ_POD( &time, time ); + READ_POD( &date, date ); + READ_POD( &refCtr, refCtr ); + READ_POD( &hdrive, hdrive ); + + //****************************************** + //****************************************** + //****************************************** + + // - reloc ptr + READ_POD( &seek_pos, seek_pos ); + + if (pop) + return; + + if( open ) Seek( &seek_pos, DOS_SEEK_SET ); + else Close(); +} + +extern bool dos_kernel_disabled; +extern uint8_t ZDRIVE_NUM; +struct Alloc { + uint16_t bytes_sector; + uint8_t sectors_cluster; + uint16_t total_clusters; + uint16_t free_clusters; + uint8_t mediaid; +}; +Alloc lalloc, oalloc; +struct Opts { + uint32_t bytesector; + uint32_t cylsector; + uint32_t headscyl; + uint32_t cylinders; + int mounttype; + uint8_t mediaid; + unsigned char CDROM_drive; + unsigned long cdrom_sector_offset; + unsigned char floppy_emu_type; +}; +Opts opts; +char overlaydir[CROSS_LEN]; +void MSCDEX_SetCDInterface(int intNr, int forceCD); +void POD_Save_DOS_Files( std::ostream& stream ) +{ + char dinfo[256] = {0}; + WRITE_POD( &ZDRIVE_NUM, ZDRIVE_NUM); + if (!dos_kernel_disabled) { + // 1. Do drives first (directories -> files) + // 2. Then files next + + for( int i=2; iGetInfo()); + WRITE_POD( &dinfo, dinfo); + *overlaydir=0; + if (!strncmp(dinfo,"local directory ",16) || !strncmp(dinfo,"CDRom ",6) || !strncmp(dinfo,"PhysFS directory ",17) || !strncmp(dinfo,"PhysFS CDRom ",13) ) { + localDrive *ldp = dynamic_cast(Drives[lcv]); +#if !defined(OSFREE) + if (!ldp) ldp = dynamic_cast(Drives[lcv]); + if (!ldp) ldp = dynamic_cast(Drives[lcv]); +#endif + if (ldp) { + lalloc.bytes_sector=ldp->allocation.bytes_sector; + lalloc.sectors_cluster=ldp->allocation.sectors_cluster; + lalloc.total_clusters=ldp->allocation.total_clusters; + lalloc.free_clusters=ldp->allocation.free_clusters; + lalloc.mediaid=ldp->allocation.mediaid; + } + Overlay_Drive *odp = dynamic_cast(Drives[lcv]); + if (odp) { + strcpy(overlaydir,odp->getOverlaydir()); + oalloc.bytes_sector=odp->allocation.bytes_sector; + oalloc.sectors_cluster=odp->allocation.sectors_cluster; + oalloc.total_clusters=odp->allocation.total_clusters; + oalloc.free_clusters=odp->allocation.free_clusters; + oalloc.mediaid=odp->allocation.mediaid; + } else { +#if !defined(OSFREE) + physfsDrive *pdp = dynamic_cast(Drives[lcv]); + if (pdp && pdp->getOverlaydir()) + strcpy(overlaydir,pdp->getOverlaydir()); +#endif + } + } else if (!strncmp(dinfo,"fatDrive ",9)) { +#if !defined(OSFREE) + fatDrive *fdp = dynamic_cast(Drives[lcv]); + if (fdp) { + opts.bytesector=fdp->loadedDisk?fdp->loadedDisk->sector_size:fdp->opts.bytesector; + opts.cylsector=fdp->loadedDisk?fdp->loadedDisk->sectors:fdp->opts.cylsector; + opts.headscyl=fdp->loadedDisk?fdp->loadedDisk->heads:fdp->opts.headscyl; + opts.cylinders=fdp->loadedDisk?fdp->loadedDisk->cylinders:fdp->opts.cylinders; + opts.mounttype=fdp->opts.mounttype; + opts.mediaid=fdp->GetMediaByte(); + opts.CDROM_drive=fdp->el.CDROM_drive; + opts.cdrom_sector_offset=fdp->el.cdrom_sector_offset; + opts.floppy_emu_type=fdp->el.floppy_emu_type; + } +#endif + } + + WRITE_POD( &overlaydir, overlaydir); + WRITE_POD( &lalloc, lalloc); + WRITE_POD( &oalloc, oalloc); + WRITE_POD( &opts, opts); + Drives[lcv]->SaveState(stream); + } + + for( unsigned int lcv=0; lcvGetName() == NULL ) file_valid = 0xff; + else { + if( strcmp( Files[lcv]->GetName(), "NUL" ) == 0 ) file_valid = 0xfe;//earth 2140 needs this + if( strcmp( Files[lcv]->GetName(), "CON" ) == 0 ) file_valid = 0xfe; + if( strcmp( Files[lcv]->GetName(), "LPT1" ) == 0 ) file_valid = 0xfe; + if( strcmp( Files[lcv]->GetName(), "PRN" ) == 0 ) file_valid = 0xfe; + if( strcmp( Files[lcv]->GetName(), "AUX" ) == 0 ) file_valid = 0xfe; + if( strcmp( Files[lcv]->GetName(), "EMMXXXX0" ) == 0 ) file_valid = 0xfe;//raiden needs this + } + + // - reloc ptr + WRITE_POD( &file_valid, file_valid ); + // system files + if( file_valid == 0xff ) continue; + if( file_valid == 0xfe ) { + WRITE_POD( &Files[lcv]->refCtr, Files[lcv]->refCtr ); + continue; + } + + //********************************************** + //********************************************** + //********************************************** + + file_namelen = (uint8_t)( strlen( Files[lcv]->name ) + 1 ); + file_name = (char *) alloca( file_namelen ); + strcpy( file_name, Files[lcv]->name ); + + file_drive = Files[lcv]->GetDrive(); + file_flags = Files[lcv]->flags; + + // - Drives->FileOpen vars (repeat copy) + WRITE_POD( &file_namelen, file_namelen ); + WRITE_POD_SIZE( file_name, file_namelen ); + + WRITE_POD( &file_drive, file_drive ); + WRITE_POD( &file_flags, file_flags ); + + Files[lcv]->SaveState(stream); + } + } else { + for( int i=2; iGetInfo()); + WRITE_POD( &dinfo, dinfo); + } + } + + for (int i=2; i(imageDiskList[d]); + strcpy(diskname, image!=NULL?"El Torito floppy drive":imageDiskList[d]->diskname.c_str()); + WRITE_POD( &diskname, diskname ); + if (image!=NULL) { + opts.CDROM_drive=image->CDROM_drive; + opts.cdrom_sector_offset=image->cdrom_sector_offset; + opts.floppy_emu_type=image->floppy_type; + opts.mounttype=1; + } else { + imageDiskMemory* idmem = dynamic_cast(imageDiskList[d]); + imageDiskVHD* idvhd = dynamic_cast(imageDiskList[d]); + if (idmem!=NULL) + opts.mounttype=2; + else if (idvhd!=NULL) + opts.mounttype=3; + else { + opts.bytesector=imageDiskList[d]->sector_size; + opts.cylsector=imageDiskList[d]->sectors; + opts.headscyl=imageDiskList[d]->heads; + opts.cylinders=imageDiskList[d]->cylinders; + opts.mounttype=0; + } + } + WRITE_POD( &opts, opts); + } +} + +void DOS_EnableDriveMenu(char drv); +void IDE_Auto(signed char &index,bool &slave); +bool AttachToBiosByLetter(imageDisk* image, const char drive); +bool AttachToBiosAndIdeByLetter(imageDisk* image, const char drive, const unsigned char ide_index, const bool ide_slave); +#if !defined(OSFREE) +imageDiskMemory* CreateRamDrive(Bitu sizes[], const int reserved_cylinders, const bool forceFloppy, Program* obj); +#endif + +void unmount(int lcv) { + if (!Drives[lcv] || lcv>=DOS_DRIVES-1) return; + const isoDrive* cdrom = dynamic_cast(Drives[lcv]); + if (DriveManager::UnmountDrive(lcv) == 0) { + if (cdrom) IDE_CDROM_Detach(lcv); + Drives[lcv]=nullptr; + DOS_EnableDriveMenu('A'+lcv); + mem_writeb(Real2Phys(dos.tables.mediaid)+lcv*dos.tables.dpb_size,0); + } +} + +void POD_Load_DOS_Files( std::istream& stream ) +{ + char dinfo[256]; + std::vector clist; + clist.clear(); + uint8_t ZDRIVE_CUR = ZDRIVE_NUM; + READ_POD( &ZDRIVE_NUM, ZDRIVE_NUM); + if (!dos_kernel_disabled) { + if (ZDRIVE_CUR != ZDRIVE_NUM) { + Drives[ZDRIVE_NUM] = Drives[ZDRIVE_CUR]; + Drives[ZDRIVE_CUR] = nullptr; + } + // 1. Do drives first (directories -> files) + // 2. Then files next + + for( int i=2; iinfo, dinfo) && (!strncmp(dinfo,"local directory ",16) || !strncmp(dinfo,"CDRom ",6) || !strncmp(dinfo,"PhysFS directory ",17) || !strncmp(dinfo,"PhysFS CDRom ",13) || (!strncmp(dinfo,"isoDrive ",9) || !strncmp(dinfo,"fatDrive ",9)))) + unmount(lcv); + if( !Drives[lcv] ) { + std::vector options; + if (!strncmp(dinfo,"local directory ",16)) { + Drives[lcv]=new localDrive(dinfo+16,lalloc.bytes_sector,lalloc.sectors_cluster,lalloc.total_clusters,lalloc.free_clusters,lalloc.mediaid,options); + if (Drives[lcv]) { + DOS_EnableDriveMenu('A'+lcv); + mem_writeb(Real2Phys(dos.tables.mediaid)+lcv*dos.tables.dpb_size,lalloc.mediaid); +#if !defined(OSFREE) + if (strlen(overlaydir)) { + uint8_t error = 0; + Drives[lcv]=new Overlay_Drive(dynamic_cast(Drives[lcv])->getBasedir(),overlaydir,oalloc.bytes_sector,oalloc.sectors_cluster,oalloc.total_clusters,oalloc.free_clusters,oalloc.mediaid,error,options); + } +#endif + } else + LOG_MSG("Error: Cannot restore drive from directory %s\n", dinfo+16); + } else if (!strncmp(dinfo,"CDRom ",6) || !strncmp(dinfo,"PhysFS CDRom ",13)) { + int num = -1; + int error = 0; + int id, major, minor; + DOSBox_CheckOS(id, major, minor); + if ((id==VER_PLATFORM_WIN32_NT) && (major>5)) + MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DX, num); + else + MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); + if (!strncmp(dinfo,"PhysFS CDRom ",13)) { +#if !defined(OSFREE) + std::string str=std::string(dinfo+13); + std::size_t found=str.find(", "); + if (found!=std::string::npos) + str=str.substr(0,found); + Drives[lcv] = new physfscdromDrive('A'+lcv,(":"+str+"\\").c_str(),lalloc.bytes_sector,lalloc.sectors_cluster,lalloc.total_clusters,0,lalloc.mediaid,error,options); +#else + LOG_MSG("Physfs CDROM not supported"); +#endif + } else { +#if !defined(OSFREE) + Drives[lcv] = new cdromDrive('A'+lcv,dinfo+6,lalloc.bytes_sector,lalloc.sectors_cluster,lalloc.total_clusters,lalloc.free_clusters,lalloc.mediaid,error,options); +#endif + } + if (Drives[lcv]) { + DOS_EnableDriveMenu('A'+lcv); + mem_writeb(Real2Phys(dos.tables.mediaid)+lcv*dos.tables.dpb_size,lalloc.mediaid); + } else + LOG_MSG("Error: Cannot restore drive from directory %s\n", dinfo+6); + } else if (!strncmp(dinfo,"PhysFS directory ",17)) { +#if !defined(OSFREE) + int error = 0; + std::string str=std::string(dinfo+17); + std::size_t found=str.find(", "); + if (found!=std::string::npos) + str=str.substr(0,found); + Drives[lcv]=new physfsDrive('A'+lcv,(":"+str+"\\").c_str(),lalloc.bytes_sector,lalloc.sectors_cluster,lalloc.total_clusters,lalloc.free_clusters,lalloc.mediaid,error,options); + if (Drives[lcv]) { + if (strlen(overlaydir)) dynamic_cast(Drives[lcv])->setOverlaydir(overlaydir); + DOS_EnableDriveMenu('A'+lcv); + mem_writeb(Real2Phys(dos.tables.mediaid)+lcv*dos.tables.dpb_size,lalloc.mediaid); + } else + LOG_MSG("Error: Cannot restore drive from directory %s\n", dinfo+16); +#else + LOG_MSG("Physfs not supported"); +#endif + } else if (!strncmp(dinfo,"isoDrive ",9) && *(dinfo+9)) { + MSCDEX_SetCDInterface(CDROM_USE_SDL, -1); + uint8_t mediaid = 0xF8; + int error = -1; + isoDrive* newDrive = new isoDrive('A'+lcv, dinfo+9, mediaid, error, options); + if (!error) { + Drives[lcv] = newDrive; + DriveManager::AppendDisk(lcv, newDrive); + DriveManager::InitializeDrive(lcv); + DOS_EnableDriveMenu('A'+lcv); + mem_writeb(Real2Phys(dos.tables.mediaid) + lcv*dos.tables.dpb_size, mediaid); + clist.push_back(lcv); + } + } else if (!strncmp(dinfo,"fatDrive ",9)) { +#if !defined(OSFREE) + fatDrive* newDrive = NULL; + Bitu sizes[4] = { 0,0,0,0 }; + if (opts.mounttype==1) { + imageDisk * newImage = new imageDiskElToritoFloppy((unsigned char)opts.CDROM_drive, opts.cdrom_sector_offset, opts.floppy_emu_type); + if (newImage != NULL) { + newImage->Addref(); + newDrive = new fatDrive(newImage, options); + newImage->Release(); + } else + LOG_MSG("Error: Cannot restore drive from El Torito floppy image.\n"); + + } else if (opts.mounttype==2) { + imageDiskMemory* image = CreateRamDrive(sizes, 0, lcv < 2 && sizes[0] == 0, NULL); + if (image != NULL && image->Format() == 0x00) { + image->Addref(); + newDrive = new fatDrive(image, options); + image->Release(); + } + } else if (opts.mounttype==3 && *(dinfo+9)) { + imageDisk* vhdImage = NULL; + if (imageDiskVHD::Open(dinfo+9, false, &vhdImage)==imageDiskVHD::OPEN_SUCCESS) + newDrive = new fatDrive(vhdImage, options); + vhdImage = NULL; + } else if (!opts.mounttype && *(dinfo+9)) + newDrive = new fatDrive(dinfo+9, opts.bytesector, opts.cylsector, opts.headscyl, opts.cylinders, options); + if (newDrive && newDrive->created_successfully) { + Drives[lcv] = newDrive; + DriveManager::AppendDisk(lcv, newDrive); + DriveManager::InitializeDrive(lcv); + DOS_EnableDriveMenu('A'+lcv); + mem_writeb(Real2Phys(dos.tables.mediaid) + lcv*dos.tables.dpb_size, opts.mediaid); + } else if ((!opts.mounttype || opts.mounttype==3) && *(dinfo+9)) + LOG_MSG("Error: Cannot restore drive from image file %s\n", dinfo+9); +#endif + } + } + if( Drives[lcv] ) Drives[lcv]->LoadState(stream); + } + + //Alien Carnage - game creates and unlinks temp files + //Here are two situations + //1. Game already unlinked temp file, but information about file is still in Files[] and we saved it. In this case we must only pop old data from stream by loading. This is fixed. + //2. Game still did not unlink file, We saved this information. Then was game restarted and temp files were removed. Then we try load save state, but we don't have temp file. This is not fixed + DOS_File *dummy = NULL; + + for( unsigned int lcv=0; lcvrefCtr, Files[lcv]->refCtr ); + continue; + } + + // Detach any live pre-restore file object from this slot before loading + // the saved entry. Closing/deleting the current object here can crash + // during same-session restore for active protected-mode titles. + if( Files[lcv] && Files[lcv]->GetName() != NULL ) { + // invalid file state - abort + if( strcmp( Files[lcv]->GetName(), "NUL" ) == 0 ) break; + if( strcmp( Files[lcv]->GetName(), "CON" ) == 0 ) break; + if( strcmp( Files[lcv]->GetName(), "LPT1" ) == 0 ) break; + if( strcmp( Files[lcv]->GetName(), "PRN" ) == 0 ) break; + if( strcmp( Files[lcv]->GetName(), "AUX" ) == 0 ) break; + if( strcmp( Files[lcv]->GetName(), "EMMXXXX0" ) == 0 ) break;//raiden needs this + Files[lcv]=nullptr; + } + + // ignore NULL file + if( file_valid == 0xff ) continue; + + //********************************************** + //********************************************** + //********************************************** + + // - Drives->FileOpen vars (repeat copy) + + READ_POD( &file_namelen, file_namelen ); + file_name = (char *) alloca( file_namelen ); + READ_POD_SIZE( file_name, file_namelen ); + + READ_POD( &file_drive, file_drive ); + READ_POD( &file_flags, file_flags ); + + + // NOTE: Must open regardless to get 'new' DOS_File class + if (file_drive >= DOS_DRIVES || Drives[file_drive] == nullptr) { + LOG_MSG("WARNING: Save-state restore skipped file handle %u for drive %u ('%s'): drive entry missing during DOS file restore", + (unsigned int)lcv, + (unsigned int)file_drive, + file_name); + Files[lcv] = nullptr; + } + else { + Drives[file_drive]->FileOpen( &Files[lcv], file_name, file_flags ); + } + + if( Files[lcv] ) { + Files[lcv]->LoadState(stream, false); + } else { + //Alien carnage ->pop data for invalid file from stream + if (dummy == NULL) { + dummy = new LocalFile(); + } + dummy->LoadState(stream, true); + }; + } + + if (dummy != NULL) { + delete dummy; + } + } else { + for( int i=2; iinfo, dinfo)) + unmount(lcv); + if (!Drives[lcv] && !strncmp(dinfo,"isoDrive ",9)) { + std::vector options; + MSCDEX_SetCDInterface(CDROM_USE_SDL, -1); + uint8_t mediaid = 0xF8; + int error = -1; + isoDrive* newDrive = new isoDrive('A'+lcv, dinfo+9, mediaid, error, options); + if (!error) { + Drives[lcv] = newDrive; + DriveManager::AppendDisk(lcv, newDrive); + DriveManager::InitializeDrive(lcv); + mem_writeb(Real2Phys(dos.tables.mediaid) + lcv*dos.tables.dpb_size, mediaid); + clist.push_back(lcv); + } + } + } + } + + for (int i=2; i 1) IDE_Hard_Disk_Detach(d); + imageDiskList[d]->Release(); + imageDiskList[d] = NULL; + imageDiskChange[d] = true; + } + if (i==MAX_DISK_IMAGES-1) + for (auto &it : clist) { + ide_slave = false; + ide_index = -1; + IDE_Auto(ide_index,ide_slave); + if (ide_index >= 0) IDE_CDROM_Attach(ide_index, ide_slave, it); + } + continue; + } + char diskname[256]; + READ_POD( &diskname, diskname ); + READ_POD( &opts, opts); + Bitu sizes[4] = { 0,0,0,0 }; + ide_slave = false; + ide_index = -1; + IDE_Auto(ide_index,ide_slave); + if( imageDiskList[d] && ((opts.mounttype==1 && dynamic_cast(imageDiskList[d])==NULL) || (opts.mounttype!=1 && strcasecmp(imageDiskList[d]->diskname.c_str(), diskname )))) { + if (d > 1) IDE_Hard_Disk_Detach(d); + imageDiskList[d]->Release(); + imageDiskList[d] = NULL; + imageDiskChange[d] = true; + } + if (imageDiskList[d]) + ; + else if (opts.mounttype==1) { + imageDisk * image = new imageDiskElToritoFloppy((unsigned char)opts.CDROM_drive, opts.cdrom_sector_offset, opts.floppy_emu_type); + if (image) AttachToBiosByLetter(image, 'A'+d); + else LOG_MSG("Warning: Cannot restore drive number from El Torito floppy image.\n"); + } else if (opts.mounttype==2) { +#if !defined(OSFREE) + imageDiskMemory* image = CreateRamDrive(sizes, 0, d < 2 && sizes[0] == 0, NULL); + if (image != NULL && image->Format() == 0x00) AttachToBiosAndIdeByLetter(image, d, (unsigned char)ide_index, ide_slave); +#endif + } else if (opts.mounttype==3 && *diskname) { + imageDisk* image = NULL; + if (imageDiskVHD::Open(diskname, false, &image)==imageDiskVHD::OPEN_SUCCESS) + AttachToBiosAndIdeByLetter(image, 'A'+d, (unsigned char)ide_index, ide_slave); + else + LOG_MSG("Warning: Cannot restore drive number from image file %s\n", diskname); + image = NULL; + } else if (!opts.mounttype && *diskname) { +#if !defined(OSFREE) + std::vector options; + fatDrive* newDrive = new fatDrive(diskname, opts.bytesector, opts.cylsector, opts.headscyl, opts.cylinders, options); + // if (newDrive->created_successfully) { + // imageDisk* image = newDrive->loadedDisk; + // AttachToBiosAndIdeByLetter(image, 'A'+d, (unsigned char)ide_index, ide_slave); + // } else + LOG_MSG("Warning: Cannot restore drive number from image file %s\n", diskname); + if (newDrive) delete newDrive; +#endif + } + if (i==MAX_DISK_IMAGES-1) + for (auto &it : clist) { + ide_slave = false; + ide_index = -1; + IDE_Auto(ide_index,ide_slave); + if (ide_index >= 0) IDE_CDROM_Attach(ide_index, ide_slave, it); + } + } +} diff --git a/src/dos/dos_ioctl.cpp b/src/dos/dos_ioctl.cpp index e301efc1155..5d521fef13c 100644 --- a/src/dos/dos_ioctl.cpp +++ b/src/dos/dos_ioctl.cpp @@ -30,6 +30,7 @@ bool DOS_IOCTL_AX440D_CH08(uint8_t drive,bool query) { PhysPt ptr = SegPhys(ds)+reg_dx; switch (reg_cl) { +#if !defined(OSFREE) case 0x40: /* Set device parameters */ { if (strncmp(Drives[drive]->GetInfo(),"fatDrive ",9)) { @@ -78,6 +79,8 @@ bool DOS_IOCTL_AX440D_CH08(uint8_t drive,bool query) { fdp->SetBPB(bpb); break; } +#endif +#if !defined(OSFREE) case 0x60: /* Get device parameters */ if (query) break; { @@ -149,6 +152,8 @@ bool DOS_IOCTL_AX440D_CH08(uint8_t drive,bool query) { mem_writeb(ptr+i,0); break; } +#endif +#if !defined(OSFREE) case 0x42: /* Format and verify logical device track (FORMAT.COM) */ { /* 01h WORD number of disk head @@ -197,6 +202,8 @@ bool DOS_IOCTL_AX440D_CH08(uint8_t drive,bool query) { LOG(LOG_IOCTL,LOG_DEBUG)("DOS:IOCTL Call 0D:42 Drive %2X pretending to format device track C/H/S=%u/%u/%u ntracks=%u",drive,cyl,head,sect,ntracks); } break; +#endif +#if !defined(OSFREE) case 0x62: /* Verify logical device track (FORMAT.COM) */ { /* 01h WORD number of disk head @@ -243,6 +250,8 @@ bool DOS_IOCTL_AX440D_CH08(uint8_t drive,bool query) { LOG(LOG_IOCTL,LOG_DEBUG)("DOS:IOCTL Call 0D:62 Drive %2X pretending to verify device track C/H/S=%u/%u/%u ntracks=%u",drive,cyl,head,sect,ntracks); } break; +#endif +#if !defined(OSFREE) case 0x46: /* Set volume serial number */ if (query) break; { @@ -261,6 +270,8 @@ bool DOS_IOCTL_AX440D_CH08(uint8_t drive,bool query) { fdp->SetBPB(bpb); } break; +#endif +#if !defined(OSFREE) case 0x66: /* Get volume serial number */ if (query) break; { @@ -298,6 +309,8 @@ bool DOS_IOCTL_AX440D_CH08(uint8_t drive,bool query) { MEM_BlockWrite(ptr+0x11,buf2,8);//filesystem } break; +#endif +#if !defined(OSFREE) case 0x41: /* Write logical device track */ { fatDrive *fdp = dynamic_cast(Drives[drive]); @@ -374,6 +387,8 @@ bool DOS_IOCTL_AX440D_CH08(uint8_t drive,bool query) { } } break; +#endif +#if !defined(OSFREE) case 0x61: /* Read logical device track */ { fatDrive *fdp = dynamic_cast(Drives[drive]); @@ -449,6 +464,8 @@ bool DOS_IOCTL_AX440D_CH08(uint8_t drive,bool query) { } } break; +#endif +#if !defined(OSFREE) case 0x4A: case 0x4B: case 0x6A: @@ -456,6 +473,8 @@ bool DOS_IOCTL_AX440D_CH08(uint8_t drive,bool query) { if (query) break; LOG(LOG_IOCTL,LOG_ERROR)("DOS:IOCTL Call 0D:%2X Drive %2X volume/drive locking IOCTL, faking it",reg_cl,drive); break; +#endif +#if !defined(OSFREE) case 0x67: /* Get access flag (whether allowed by driver) */ if (query) break; /* In DOSBox-X, disk access is always allowed. @@ -465,6 +484,7 @@ bool DOS_IOCTL_AX440D_CH08(uint8_t drive,bool query) { * ptr+1 = return whether access allowed */ mem_writeb(ptr+1,0x01); break; +#endif default: LOG(LOG_IOCTL,LOG_ERROR)("DOS:IOCTL %s %2X:%2X Drive %2X unhandled (CH=08h)",query?"Query":"Call",reg_al,reg_cl,drive); DOS_SetError(DOSERR_FUNCTION_NUMBER_INVALID); @@ -477,6 +497,7 @@ bool DOS_IOCTL_AX440D_CH08(uint8_t drive,bool query) { bool DOS_IOCTL_AX440D_CH48(uint8_t drive,bool query) { PhysPt ptr = SegPhys(ds)+reg_dx; switch (reg_cl) { +#if !defined(OSFREE) case 0x40: /* Set device parameters */ { if (strncmp(Drives[drive]->GetInfo(),"fatDrive ",9)) { @@ -521,6 +542,8 @@ bool DOS_IOCTL_AX440D_CH48(uint8_t drive,bool query) { } break; } +#endif +#if !defined(OSFREE) case 0x60: /* Get device parameters */ if (query) break; { @@ -575,6 +598,8 @@ bool DOS_IOCTL_AX440D_CH48(uint8_t drive,bool query) { } break; } +#endif +#if !defined(OSFREE) case 0x42: case 0x46: case 0x4A: @@ -585,6 +610,7 @@ bool DOS_IOCTL_AX440D_CH48(uint8_t drive,bool query) { case 0x6A: case 0x6B: return DOS_IOCTL_AX440D_CH08(drive,query); +#endif default: LOG(LOG_IOCTL,LOG_ERROR)("DOS:IOCTL Call %02X:%2X Drive %2X unhandled (CH=48h)",reg_al,reg_cl,drive); DOS_SetError(DOSERR_FUNCTION_NUMBER_INVALID); @@ -625,10 +651,9 @@ bool DOS_IOCTL(void) { switch(reg_al) { case 0x00: /* Get Device Information */ if (Files[handle]->GetInformation() & DeviceInfoFlags::Device) { //Check for device - reg_dx=Files[handle]->GetInformation() & ~EXT_DEVICE_BIT; - // DOS copies the upper byte of device attributes in DH resulting in two bits being set - // for a device - reg_dx |= DeviceAttributeFlags::CharacterDevice; + reg_dx=Files[handle]->GetInformation() & ~DeviceInfoFlags::ExternalDevice; + // DOS copies the upper byte of device attributes in DH resulting in two bits being set for a device + reg_dx |= DeviceAttributeFlags::CharacterDevice;//FIXME: What about when block device support is added? } else { uint8_t hdrive=Files[handle]->GetDrive(); if (hdrive==0xff) { @@ -696,7 +721,7 @@ bool DOS_IOCTL(void) { } return true; case 0x07: /* Get Output Status */ - if (Files[handle]->GetInformation() & EXT_DEVICE_BIT) { + if (Files[handle]->GetInformation() & DeviceInfoFlags::ExternalDevice) { reg_al = ((DOS_Device*)(Files[handle]))->GetStatus(false); return true; } diff --git a/src/dos/dos_keyboard_layout.cpp b/src/dos/dos_keyboard_layout.cpp index 4a0f52423d8..0d587c50c73 100644 --- a/src/dos/dos_keyboard_layout.cpp +++ b/src/dos/dos_keyboard_layout.cpp @@ -34,17 +34,22 @@ #include "control.h" #include "render.h" #include "jfont.h" +#if !defined(OSFREE) #include "dos_codepages.h" #include "dos_keyboard_layout_data.h" +#endif #include "sdlmain.h" #if defined (WIN32) #include #endif +#if !defined(OSFREE) #include +#endif int lastcp = 0; +#if !defined(OSFREE) void DOSBox_SetSysMenu(void); bool OpenGL_using(void), isDBCSCP(void); void change_output(int output), UpdateSDLDrawTexture(); @@ -54,7 +59,9 @@ extern int tryconvertcp, toSetCodePage(DOS_Shell *shell, int newCP, int opt); extern bool jfont_init; extern int msgcodepage; extern bool kana_input; +#endif +#if !defined(OSFREE) static FILE* OpenDosboxFile(const char* name) { uint8_t drive; char fullname[DOS_PATHLENGTH]; @@ -75,7 +82,9 @@ static FILE* OpenDosboxFile(const char* name) { FILE *tmpfile=fopen(name, "rb"); return tmpfile; } +#endif +#if !defined(OSFREE) class keyboard_layout { public: keyboard_layout() { @@ -109,11 +118,11 @@ class keyboard_layout { uint16_t required_flags,forbidden_flags; uint16_t required_userflags,forbidden_userflags; } current_layout_planes[layout_pages-4]; - uint8_t additional_planes = 0; - uint8_t used_lock_modifiers; + uint8_t additional_planes = 0; + uint8_t used_lock_modifiers; // diacritics table - uint8_t diacritics[2048] = {}; + uint8_t diacritics[2048] = {}; uint16_t diacritics_entries; uint16_t diacritics_character; uint16_t user_keys; @@ -130,8 +139,9 @@ class keyboard_layout { Bitu read_keyboard_file(const char* keyboard_file_name, int32_t specific_layout, int32_t requested_codepage); bool map_key(Bitu key, uint16_t layouted_key, bool is_command, bool is_keypair); }; +#endif - +#if !defined(OSFREE) keyboard_layout::~keyboard_layout() { if (language_codes) { for (Bitu i=0; iread_keyboard_file(current_keyboard_file_name, specific_layout, dos.loaded_codepage); } +#endif +#if !defined(OSFREE) static uint32_t read_kcl_file(const char* kcl_file_name, const char* layout_id, bool first_id_only) { FILE* tempfile = OpenDosboxFile(kcl_file_name); if (!tempfile) return 0; @@ -193,20 +205,20 @@ static uint32_t read_kcl_file(const char* kcl_file_name, const char* layout_id, fseek(tempfile, -2, SEEK_CUR); // get all language codes for this layout for (Bitu i=0; ireset(); @@ -665,6 +679,7 @@ bool keyboard_layout::map_key(Bitu key, uint16_t layouted_key, bool is_command, } return false; } +#endif uint16_t GetDefaultCP() { if (IS_PC98_ARCH||IS_JEGA_ARCH||IS_JDOSV) return 932; @@ -674,6 +689,7 @@ uint16_t GetDefaultCP() { return 437; } +#if !defined(OSFREE) uint16_t keyboard_layout::extract_codepage(const char* keyboard_file_name) { if (!strcmp(keyboard_file_name,"none")) return GetDefaultCP(); @@ -776,7 +792,9 @@ uint16_t keyboard_layout::extract_codepage(const char* keyboard_file_name) { } return GetDefaultCP(); } +#endif +#if !defined(OSFREE) static uint8_t cpi_buf[65536]; uint32_t VFILE_GetCPIData(const char *filename, std::vector &cpibuf); uint32_t get_builtin_codepage(struct BuiltinFileBlob bfb) { @@ -790,11 +808,16 @@ uint32_t get_builtin_codepage(struct BuiltinFileBlob bfb) { } return size; } +#endif +#if !defined(OSFREE) extern int eurAscii; extern uint8_t euro_08[8], euro_14[14], euro_16[16]; +#endif bool font_14_init=false, font_16_init=false; uint8_t int10_font_14_init[256 * 14], int10_font_16_init[256 * 16]; + +#if !defined(OSFREE) void initcodepagefont() { if (!dos.loaded_codepage) return; @@ -802,68 +825,69 @@ void initcodepagefont() { * there is no loading of it from disk at all */ if (GetDefaultCP() == dos.loaded_codepage) return; - uint32_t start_pos; - uint16_t number_of_codepages; - static uint8_t cpi_buff[65536]; - uint8_t *cpibuf = dos.loaded_codepage == 856 ? cpi_buff : cpi_buf; - uint32_t cpi_buf_size=0,size_of_cpxdata=0; + uint32_t start_pos; + uint16_t number_of_codepages; + static uint8_t cpi_buff[65536]; + uint8_t *cpibuf = cpi_buf; + uint32_t cpi_buf_size=0,size_of_cpxdata=0; switch (dos.loaded_codepage) { - case 437: case 850: case 852: case 853: case 857: case 858: - cpi_buf_size = get_builtin_codepage(bfb_EGA_CPX); - break; - case 775: case 859: case 1116: case 1117: case 1118: case 1119: - cpi_buf_size = get_builtin_codepage(bfb_EGA2_CPX); - break; - case 771: case 772: case 808: case 855: case 866: case 872: - cpi_buf_size = get_builtin_codepage(bfb_EGA3_CPX); - break; - case 848: case 849: case 1125: case 1131: case 3012: case 30010: - cpi_buf_size = get_builtin_codepage(bfb_EGA4_CPX); - break; - case 113: case 737: case 851: case 869: - cpi_buf_size = get_builtin_codepage(bfb_EGA5_CPX); - break; - case 899: case 30008: case 58210: case 59829: case 60258: case 60853: - cpi_buf_size = get_builtin_codepage(bfb_EGA6_CPX); - break; - case 30011: case 30013: case 30014: case 30017: case 30018: case 30019: - cpi_buf_size = get_builtin_codepage(bfb_EGA7_CPX); - break; - case 770: case 773: case 774: case 777: case 778: - cpi_buf_size = get_builtin_codepage(bfb_EGA8_CPX); - break; - case 860: case 861: case 863: case 865: case 867: - cpi_buf_size = get_builtin_codepage(bfb_EGA9_CPX); - break; - case 667: case 668: case 790: case 991: case 3845: - cpi_buf_size = get_builtin_codepage(bfb_EGA10_CPX); - break; - case 30000: case 30001: case 30004: case 30007: case 30009: - cpi_buf_size = get_builtin_codepage(bfb_EGA11_CPX); - break; - case 30003: case 30029: case 30030: case 58335: - cpi_buf_size = get_builtin_codepage(bfb_EGA12_CPX); - break; - case 895: case 30002: case 58152: case 59234: case 62306: - cpi_buf_size = get_builtin_codepage(bfb_EGA13_CPX); - break; - case 30006: case 30012: case 30015: case 30016: case 30020: case 30021: - cpi_buf_size = get_builtin_codepage(bfb_EGA14_CPX); - break; - case 30023: case 30024: case 30025: case 30026: case 30027: case 30028: - cpi_buf_size = get_builtin_codepage(bfb_EGA15_CPX); - break; - case 3021: case 30005: case 30022: case 30031: case 30032: - cpi_buf_size = get_builtin_codepage(bfb_EGA16_CPX); - break; - case 862: case 864: case 30034: case 30033: case 30039: case 30040: - cpi_buf_size = get_builtin_codepage(bfb_EGA17_CPX); - break; - case 856: case 3846: case 3848: - cpi_buf_size = get_builtin_codepage(bfb_EGA18_CPI); - break; - default: - return; + case 437: case 850: case 852: case 853: case 857: case 858: + cpi_buf_size = get_builtin_codepage(bfb_EGA_CPX); + break; + case 775: case 859: case 1116: case 1117: case 1118: case 1119: + cpi_buf_size = get_builtin_codepage(bfb_EGA2_CPX); + break; + case 771: case 772: case 808: case 855: case 866: case 872: + cpi_buf_size = get_builtin_codepage(bfb_EGA3_CPX); + break; + case 848: case 849: case 1125: case 1131: case 3012: case 30010: + cpi_buf_size = get_builtin_codepage(bfb_EGA4_CPX); + break; + case 113: case 737: case 851: case 869: + cpi_buf_size = get_builtin_codepage(bfb_EGA5_CPX); + break; + case 899: case 30008: case 58210: case 59829: case 60258: case 60853: + cpi_buf_size = get_builtin_codepage(bfb_EGA6_CPX); + break; + case 30011: case 30013: case 30014: case 30017: case 30018: case 30019: + cpi_buf_size = get_builtin_codepage(bfb_EGA7_CPX); + break; + case 770: case 773: case 774: case 777: case 778: + cpi_buf_size = get_builtin_codepage(bfb_EGA8_CPX); + break; + case 860: case 861: case 863: case 865: case 867: + cpi_buf_size = get_builtin_codepage(bfb_EGA9_CPX); + break; + case 667: case 668: case 790: case 991: case 3845: + cpi_buf_size = get_builtin_codepage(bfb_EGA10_CPX); + break; + case 30000: case 30001: case 30004: case 30007: case 30009: + cpi_buf_size = get_builtin_codepage(bfb_EGA11_CPX); + break; + case 30003: case 30029: case 30030: case 58335: + cpi_buf_size = get_builtin_codepage(bfb_EGA12_CPX); + break; + case 895: case 30002: case 58152: case 59234: case 62306: + cpi_buf_size = get_builtin_codepage(bfb_EGA13_CPX); + break; + case 30006: case 30012: case 30015: case 30016: case 30020: case 30021: + cpi_buf_size = get_builtin_codepage(bfb_EGA14_CPX); + break; + case 30023: case 30024: case 30025: case 30026: case 30027: case 30028: + cpi_buf_size = get_builtin_codepage(bfb_EGA15_CPX); + break; + case 3021: case 30005: case 30022: case 30031: case 30032: + cpi_buf_size = get_builtin_codepage(bfb_EGA16_CPX); + break; + case 862: case 864: case 30034: case 30033: case 30039: case 30040: + cpi_buf_size = get_builtin_codepage(bfb_EGA17_CPX); + break; + case 856: case 3846: case 3848: + cpi_buf_size = get_builtin_codepage(bfb_EGA18_CPI); + cpibuf = cpi_buff; + break; + default: + return; } uint16_t found_at_pos=0x29+19; size_of_cpxdata=cpi_buf_size; @@ -888,40 +912,46 @@ void initcodepagefont() { MEM_BlockRead(((unsigned int)seg<<4u)+0x100u,cpibuf,65536u); cpi_buf_size=65536; DOS_FreeMemory(seg); - start_pos=host_readd(&cpibuf[0x13]); - number_of_codepages=host_readw(&cpibuf[start_pos]); - start_pos+=4; - for (uint16_t test_codepage=0; test_codepage32&&i/16==eurAscii?euro_16[i%16]:cpibuf[font_data_start+i]; - font_16_init=true; - } else if (font_height==0x0e) { - for (uint16_t i=0;i<256*14;i++) - int10_font_14_init[i]=eurAscii>32&&i/14==eurAscii?euro_14[i%14]:cpibuf[font_data_start+i]; - font_14_init=true; - } - font_data_start+=font_height*256u; - } - return; - } - start_pos=host_readd(&cpibuf[start_pos]); - start_pos+=2; - } + start_pos=host_readd(&cpibuf[0x13]); + number_of_codepages=host_readw(&cpibuf[start_pos]); + start_pos+=4; + for (uint16_t test_codepage=0; test_codepage32&&i/16==eurAscii?euro_16[i%16]:cpibuf[font_data_start+i]; + font_16_init=true; + } else if (font_height==0x0e) { + for (uint16_t i=0;i<256*14;i++) + int10_font_14_init[i]=eurAscii>32&&i/14==eurAscii?euro_14[i%14]:cpibuf[font_data_start+i]; + font_14_init=true; + } + font_data_start+=font_height*256u; + } + return; + } + start_pos=host_readd(&cpibuf[start_pos]); + start_pos+=2; + } } +#endif + +#if !defined(OSFREE) +extern Bitu call_stop,call_default; +#endif +#if !defined(OSFREE) Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, int32_t codepage_id) { char cp_filename[512]; strcpy(cp_filename, codepage_file_name); @@ -929,45 +959,56 @@ Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, int32_t if (codepage_id==dos.loaded_codepage) return KEYB_NOERROR; + /* Hold on a second: Does NEC PC-98 MS-DOS even have KEYB.COM and/or CPI/CPX codepage files? + * The on-screen console is rendered using a font ROM, that later systems allow at least some + * number of custom font RAM slots, so what would KEYB.COM even do on such a system? + * + * 2026/03/08: Why are we loading EGA.CPI for PC-98 mode when there is no purpose to it? + * Fail any attempt to load in that case. */ + if (IS_PC98_ARCH) { + LOG(LOG_DOSMISC,LOG_WARN)("Not loading %s, codepage files are not supported in PC-98 mode",cp_filename); + return KEYB_LOADERROR; + } + if (!strcmp(cp_filename,"auto")) { // select matching .cpi-file for specified codepage switch (codepage_id) { case 437: case 850: case 852: case 853: case 857: case 858: - sprintf(cp_filename, "EGA.CPI"); break; + sprintf(cp_filename, "EGA.CPI"); break; case 775: case 859: case 1116: case 1117: case 1118: case 1119: - sprintf(cp_filename, "EGA2.CPI"); break; + sprintf(cp_filename, "EGA2.CPI"); break; case 771: case 772: case 808: case 855: case 866: case 872: - sprintf(cp_filename, "EGA3.CPI"); break; + sprintf(cp_filename, "EGA3.CPI"); break; case 848: case 849: case 1125: case 1131: case 3012: case 30010: case 61282: - sprintf(cp_filename, "EGA4.CPI"); break; + sprintf(cp_filename, "EGA4.CPI"); break; case 113: case 737: case 851: case 868: case 869: - sprintf(cp_filename, "EGA5.CPI"); break; + sprintf(cp_filename, "EGA5.CPI"); break; case 899: case 30008: case 58210: case 59829: case 60258: case 60853: - sprintf(cp_filename, "EGA6.CPI"); break; + sprintf(cp_filename, "EGA6.CPI"); break; case 30011: case 30013: case 30014: case 30017: case 30018: case 30019: - sprintf(cp_filename, "EGA7.CPI"); break; + sprintf(cp_filename, "EGA7.CPI"); break; case 770: case 773: case 774: case 777: case 778: - sprintf(cp_filename, "EGA8.CPI"); break; + sprintf(cp_filename, "EGA8.CPI"); break; case 860: case 861: case 863: case 865: case 867: - sprintf(cp_filename, "EGA9.CPI"); break; + sprintf(cp_filename, "EGA9.CPI"); break; case 667: case 668: case 790: case 991: case 3845: case 57781: - sprintf(cp_filename, "EGA10.CPI"); break; + sprintf(cp_filename, "EGA10.CPI"); break; case 30000: case 30001: case 30004: case 30007: case 30009: - sprintf(cp_filename, "EGA11.CPI"); break; + sprintf(cp_filename, "EGA11.CPI"); break; case 30003: case 30029: case 30030: case 58335: - sprintf(cp_filename, "EGA12.CPI"); break; + sprintf(cp_filename, "EGA12.CPI"); break; case 895: case 30002: case 58152: case 59234: case 62306: - sprintf(cp_filename, "EGA13.CPI"); break; + sprintf(cp_filename, "EGA13.CPI"); break; case 30006: case 30012: case 30015: case 30016: case 30020: case 30021: - sprintf(cp_filename, "EGA14.CPI"); break; + sprintf(cp_filename, "EGA14.CPI"); break; case 30023: case 30024: case 30025: case 30026: case 30027: case 30028: - sprintf(cp_filename, "EGA15.CPI"); break; + sprintf(cp_filename, "EGA15.CPI"); break; case 3021: case 30005: case 30022: case 30031: case 30032: - sprintf(cp_filename, "EGA16.CPI"); break; + sprintf(cp_filename, "EGA16.CPI"); break; case 862: case 864: case 30034: case 30033: case 30039: case 30040: - sprintf(cp_filename, "EGA17.CPI"); break; + sprintf(cp_filename, "EGA17.CPI"); break; case 856: case 3846: case 3848: - sprintf(cp_filename, "EGA18.CPI"); break; + sprintf(cp_filename, "EGA18.CPI"); break; default: LOG_MSG("No matching cpi file for codepage %i",codepage_id); return KEYB_INVALIDCPFILE; @@ -979,6 +1020,7 @@ Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, int32_t char nbuf[512]; sprintf(nbuf, "%s", cp_filename); + LOG(LOG_DOSMISC,LOG_DEBUG)("Loading codepage file %s",cp_filename); FILE* tempfile=OpenDosboxFile(nbuf); if (tempfile==NULL) { size_t strsz=strlen(nbuf); @@ -1002,8 +1044,8 @@ Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, int32_t if (tempfile==NULL) { // check if built-in codepage is available // reference: https://gitlab.com/FreeDOS/base/cpidos/-/blob/master/DOC/CPIDOS/CODEPAGE.TXT - upxfound = true; - switch (codepage_id) { + upxfound = true; + switch (codepage_id) { case 437: case 850: case 852: case 853: case 857: case 858: cpi_buf_size = get_builtin_codepage(bfb_EGA_CPX); break; @@ -1056,16 +1098,16 @@ Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, int32_t cpi_buf_size = get_builtin_codepage(bfb_EGA17_CPX); break; case 856: case 3846: case 3848: - cpi_buf_size = get_builtin_codepage(bfb_EGA18_CPI); - upxfound = false; // EGA18.CPI is not compressed - break; + cpi_buf_size = get_builtin_codepage(bfb_EGA18_CPI); + upxfound = false; // EGA18.CPI is not compressed + break; default: return KEYB_INVALIDCPFILE; } if(upxfound){ - found_at_pos=0x29; - size_of_cpxdata=cpi_buf_size; - } + found_at_pos=0x29; + size_of_cpxdata=cpi_buf_size; + } } else { uint32_t dr=(uint32_t)fread(cpi_buf, sizeof(uint8_t), 5, tempfile); // check if file is valid @@ -1075,45 +1117,45 @@ Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, int32_t } // check if non-compressed cpi file if ((cpi_buf[0]!=0xff) || (cpi_buf[1]!=0x46) || (cpi_buf[2]!=0x4f) || - (cpi_buf[3]!=0x4e) || (cpi_buf[4]!=0x54)) { + (cpi_buf[3]!=0x4e) || (cpi_buf[4]!=0x54)) { // check if dr-dos custom cpi file if ((cpi_buf[0]==0x7f) && (cpi_buf[1]!=0x44) && (cpi_buf[2]!=0x52) && - (cpi_buf[3]!=0x46) && (cpi_buf[4]!=0x5f)) { + (cpi_buf[3]!=0x46) && (cpi_buf[4]!=0x5f)) { LOG(LOG_BIOS,LOG_ERROR)("Codepage file %s has unsupported DR-DOS format",cp_filename); return KEYB_INVALIDCPFILE; } // check if compressed cpi file uint8_t next_byte=0; for (Bitu i=0; i<100; i++) { - size_t readResult = fread(&next_byte, sizeof(uint8_t), 1, tempfile); - if (readResult != 1) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in read_codepage_file\n"); - } - found_at_pos++; - while (next_byte == 0x55) { - readResult = fread(&next_byte, sizeof(uint8_t), 1, tempfile); - if (readResult != 1) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in read_codepage_file\n"); - } - found_at_pos++; - if (next_byte == 0x50) { - readResult = fread(&next_byte, sizeof(uint8_t), 1, tempfile); - if (readResult != 1) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in read_codepage_file\n"); - } - found_at_pos++; - if (next_byte == 0x58) { - readResult = fread(&next_byte, sizeof(uint8_t), 1, tempfile); - if (readResult != 1) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in read_codepage_file\n"); - } - found_at_pos++; - if (next_byte == 0x21) { - // read version ID - readResult = fread(&next_byte, sizeof(uint8_t), 1, tempfile); - if (readResult != 1) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in read_codepage_file\n"); - } + size_t readResult = fread(&next_byte, sizeof(uint8_t), 1, tempfile); + if (readResult != 1) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in read_codepage_file\n"); + } + found_at_pos++; + while (next_byte == 0x55) { + readResult = fread(&next_byte, sizeof(uint8_t), 1, tempfile); + if (readResult != 1) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in read_codepage_file\n"); + } + found_at_pos++; + if (next_byte == 0x50) { + readResult = fread(&next_byte, sizeof(uint8_t), 1, tempfile); + if (readResult != 1) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in read_codepage_file\n"); + } + found_at_pos++; + if (next_byte == 0x58) { + readResult = fread(&next_byte, sizeof(uint8_t), 1, tempfile); + if (readResult != 1) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in read_codepage_file\n"); + } + found_at_pos++; + if (next_byte == 0x21) { + // read version ID + readResult = fread(&next_byte, sizeof(uint8_t), 1, tempfile); + if (readResult != 1) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in read_codepage_file\n"); + } found_at_pos++; upxfound=true; break; @@ -1143,42 +1185,95 @@ Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, int32_t if (upxfound) { if (size_of_cpxdata>0xfe00) E_Exit("Size of cpx-compressed data too big"); - found_at_pos+=19; - // prepare for direct decompression - cpi_buf[found_at_pos]=0xcb; - + // how much is available? uint16_t seg=0; - uint16_t size=0x1500; - if (!DOS_AllocateMemory(&seg, &size)) E_Exit("Not enough free low memory to unpack data"); - MEM_BlockWrite(((unsigned int)seg<<4u)+0x100u,cpi_buf,size_of_cpxdata); - - // setup segments - uint16_t save_ds=SegValue(ds); - uint16_t save_es=SegValue(es); - uint16_t save_ss=SegValue(ss); - uint32_t save_esp=reg_esp; - SegSet16(ds,seg); - SegSet16(es,seg); - SegSet16(ss,seg+0x1000); - reg_esp=0xfffe; - - // let UPX unpack the file - CALLBACK_RunRealFar(seg,0x100); - - SegSet16(ds,save_ds); - SegSet16(es,save_es); - SegSet16(ss,save_ss); - reg_esp=save_esp; - - // get unpacked content - MEM_BlockRead(((unsigned int)seg<<4u)+0x100u,cpi_buf,65536u); - cpi_buf_size=65536; - - DOS_FreeMemory(seg); - } + uint16_t size=DOS_GetMaximumFreeSize(0xA000/*whatever is available*/); + LOG(LOG_DOSMISC,LOG_DEBUG)("CPI/CPX: Maximum memory available: %lu bytes",(unsigned long)size << 4ul); + + if ((size<<4ul) >= (size_of_cpxdata+0x1000/*4K stack*/)) { + found_at_pos+=19; + // prepare for direct decompression + cpi_buf[found_at_pos]=0xcb; + + if (!DOS_AllocateMemory(&seg, &size/*does not actually modify the value*/)) E_Exit("Not enough free low memory to unpack data"); + MEM_BlockWrite(((unsigned int)seg<<4u)+0x100u,cpi_buf,size_of_cpxdata); + + // setup segments + uint16_t save_ds=SegValue(ds); + uint16_t save_es=SegValue(es); + uint16_t save_ss=SegValue(ss); + uint32_t save_esp=reg_esp; + + uint16_t stackseg = seg; + reg_esp = (size << 4u) - 4u; /* 0xFFFC if the full 64KB */ + if (size > 0x1000) { + stackseg += size - 0x1000; + reg_esp -= (size - 0x1000) << 4u; + } + // clear error flag + real_writeb(seg,0xFF,0); + + // NTS: This code is run with no real PSP segment anyway, use memory address [0xFF] to signal an error + real_writeb(seg,size_of_cpxdata+0x100,0xB8); // MOV AX, + real_writew(seg,size_of_cpxdata+0x101,seg); + real_writew(seg,size_of_cpxdata+0x103,0xD88E); // MOV DS,AX + real_writew(seg,size_of_cpxdata+0x105,0x06C6); // MOV BYTE [FF],AA + real_writew(seg,size_of_cpxdata+0x107,0x00FF); + real_writeb(seg,size_of_cpxdata+0x109,0xAA); + real_writeb(seg,size_of_cpxdata+0x10A,0xEA); // JMP FAR + real_writed(seg,size_of_cpxdata+0x10B,CALLBACK_RealPointer(call_stop)); + + // NTS: If the code determines from SP there is insufficient space, it will exit using INT 20h + // This code makes no attempt to set up a PSP segment for this code, so it is necessary + // to direct INT 20h at the code to force return (abpve) while running the code + // to prevent the termination handler from jumping off into the weeds. + const uint32_t pint20 = real_readd(0,0x20*4); // save INT 20h + real_writed(0,0x20*4,RealMake(seg,size_of_cpxdata+0x100u)); + + SegSet16(ds,seg); + SegSet16(es,seg); + SegSet16(ss,stackseg); + + // DEBUG + LOG(LOG_DOSMISC,LOG_DEBUG)("Executing CPI/CPX file to decompress it (UPX) seg=%04x-%04x SS:SP=%04x:%04x", + (unsigned int)seg,(unsigned int)(seg+size-1u), + (unsigned int)stackseg,(unsigned int)reg_esp); + + // let UPX unpack the file + CALLBACK_RunRealFar(seg,0x100); + + SegSet16(ds,save_ds); + SegSet16(es,save_es); + SegSet16(ss,save_ss); + reg_esp=save_esp; + + // restore INT 20h + real_writed(0,0x20*4,pint20); + + // was there an error? + if (real_readb(seg,0xFF) == 0xAA) { + LOG(LOG_DOSMISC,LOG_WARN)("CPI/CPX file aborted using INT 20h"); + return KEYB_LOADERROR; + } + + // get unpacked content + MEM_BlockRead(((unsigned int)seg<<4u)+0x100u,cpi_buf,65536u); + cpi_buf_size=65536; + + DOS_FreeMemory(seg); + } + else { + LOG(LOG_DOSMISC,LOG_WARN)("Insufficient memory to load CPI/CPX file"); + return KEYB_LOADERROR; + } + } start_pos=host_readd(&cpi_buf[0x13]); + if (start_pos >= 0xFFFF) { // Without this check, invalid values can *CRASH* this emulator with a segfault + LOG(LOG_DOSMISC,LOG_WARN)("CPI/CPX start_pos out of range"); + return KEYB_LOADERROR; + } number_of_codepages=host_readw(&cpi_buf[start_pos]); start_pos+=4; @@ -1200,7 +1295,7 @@ Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, int32_t uint16_t number_of_fonts;//,font_data_length; number_of_fonts=host_readw(&cpi_buf[font_data_header_pt+0x02]); -// font_data_length=host_readw(&cpi_buf[font_data_header_pt+0x04]); + // font_data_length=host_readw(&cpi_buf[font_data_header_pt+0x04]); bool font_changed=false; uint32_t font_data_start=font_data_header_pt+0x06; @@ -1211,47 +1306,47 @@ Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, int32_t font_data_start+=6; if (font_height==0x10) { // 16x8 font, IF supported by the video card - if (int10.rom.font_16 != 0) { - PhysPt font16pt=Real2Phys(int10.rom.font_16); - for (uint16_t i=0;i<256*16;i++) { - int10_font_16_init[i]=eurAscii>32&&i/16==eurAscii?euro_16[i%16]:cpi_buf[font_data_start+i]; - phys_writeb(font16pt+i,int10_font_16_init[i]); - } - // terminate alternate list to prevent loading - phys_writeb(Real2Phys(int10.rom.font_16_alternate),0); - font_changed=true; - font_16_init=true; - } + if (int10.rom.font_16 != 0) { + PhysPt font16pt=Real2Phys(int10.rom.font_16); + for (uint16_t i=0;i<256*16;i++) { + int10_font_16_init[i]=eurAscii>32&&i/16==eurAscii?euro_16[i%16]:cpi_buf[font_data_start+i]; + phys_writeb(font16pt+i,int10_font_16_init[i]); + } + // terminate alternate list to prevent loading + phys_writeb(Real2Phys(int10.rom.font_16_alternate),0); + font_changed=true; + font_16_init=true; + } } else if (font_height==0x0e) { // 14x8 font, IF supported by the video card - if (int10.rom.font_14 != 0) { - PhysPt font14pt=Real2Phys(int10.rom.font_14); - for (uint16_t i=0;i<256*14;i++) { - int10_font_14_init[i]=eurAscii>32&&i/14==eurAscii?euro_14[i%14]:cpi_buf[font_data_start+i]; - phys_writeb(font14pt+i,int10_font_14_init[i]); - } - // terminate alternate list to prevent loading - phys_writeb(Real2Phys(int10.rom.font_14_alternate),0); - font_changed=true; - font_14_init=true; - } + if (int10.rom.font_14 != 0) { + PhysPt font14pt=Real2Phys(int10.rom.font_14); + for (uint16_t i=0;i<256*14;i++) { + int10_font_14_init[i]=eurAscii>32&&i/14==eurAscii?euro_14[i%14]:cpi_buf[font_data_start+i]; + phys_writeb(font14pt+i,int10_font_14_init[i]); + } + // terminate alternate list to prevent loading + phys_writeb(Real2Phys(int10.rom.font_14_alternate),0); + font_changed=true; + font_14_init=true; + } } else if (font_height==0x08) { - // 8x8 fonts. All video cards support it - if (int10.rom.font_8_first != 0) { - PhysPt font8pt=Real2Phys(int10.rom.font_8_first); - for (uint16_t i=0;i<128*8;i++) { - phys_writeb(font8pt+i,eurAscii>32&&i/8==eurAscii?euro_08[i%8]:cpi_buf[font_data_start+i]); - } - font_changed=true; - } - if (int10.rom.font_8_second != 0) { - PhysPt font8pt=Real2Phys(int10.rom.font_8_second); - for (uint16_t i=0;i<128*8;i++) { - phys_writeb(font8pt+i,eurAscii>127&&(i+128)/8==eurAscii?euro_08[i%8]:cpi_buf[font_data_start+i+128*8]); - } - font_changed=true; - } - } + // 8x8 fonts. All video cards support it + if (int10.rom.font_8_first != 0) { + PhysPt font8pt=Real2Phys(int10.rom.font_8_first); + for (uint16_t i=0;i<128*8;i++) { + phys_writeb(font8pt+i,eurAscii>32&&i/8==eurAscii?euro_08[i%8]:cpi_buf[font_data_start+i]); + } + font_changed=true; + } + if (int10.rom.font_8_second != 0) { + PhysPt font8pt=Real2Phys(int10.rom.font_8_second); + for (uint16_t i=0;i<128*8;i++) { + phys_writeb(font8pt+i,eurAscii>127&&(i+128)/8==eurAscii?euro_08[i%8]:cpi_buf[font_data_start+i+128*8]); + } + font_changed=true; + } + } font_data_start+=font_height*256u; } @@ -1260,9 +1355,9 @@ Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, int32_t // set codepage entries dos.loaded_codepage=(uint16_t)(codepage_id&0xffff); #if defined(USE_TTF) - if (TTF_using()) setTTFCodePage(); else + if (TTF_using()) setTTFCodePage(); else #endif - DOSBox_SetSysMenu(); + DOSBox_SetSysMenu(); // update font if necessary (EGA/VGA/SVGA only) if (font_changed && (CurMode->type==M_TEXT) && (IS_EGAVGA_ARCH)) { @@ -1270,8 +1365,8 @@ Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, int32_t } INT10_SetupRomMemoryChecksum(); #if C_OPENGL && DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW - if (OpenGL_using() && control->opt_lang.size() && lastcp && lastcp != dos.loaded_codepage) - UpdateSDLDrawTexture(); + if (OpenGL_using() && control->opt_lang.size() && lastcp && lastcp != dos.loaded_codepage) + UpdateSDLDrawTexture(); #endif return KEYB_NOERROR; @@ -1366,9 +1461,11 @@ const char* keyboard_layout::main_language_code() { } return NULL; } +#endif - +#if !defined(OSFREE) static keyboard_layout* loaded_layout=NULL; +#endif // CTRL-ALT-F2 switches between foreign and US-layout using this function /* static void switch_keyboard_layout(bool pressed) { @@ -1379,11 +1476,23 @@ static keyboard_layout* loaded_layout=NULL; // called by int9-handler bool DOS_LayoutKey(Bitu key, uint8_t flags1, uint8_t flags2, uint8_t flags3) { +#if !defined(OSFREE) if (loaded_layout) return loaded_layout->layout_key(key, flags1, flags2, flags3); else return false; +#else + return false; +#endif } +#if !defined(OSFREE) Bitu DOS_LoadKeyboardLayout(const char * layoutname, int32_t codepage, const char * codepagefile) { + /* keyboard layouts have no meaning in PC-98 mode */ + if (IS_PC98_ARCH) { + LOG(LOG_DOSMISC,LOG_DEBUG)("Keyboard layouts have no meaning in PC-98 mode, ignoring. Attempted layout %s code page %u file %s",layoutname,codepage,codepagefile); + return KEYB_NOERROR; + } + + LOG(LOG_DOSMISC,LOG_DEBUG)("Loading keyboard layout %s code page %u file %s",layoutname,codepage,codepagefile); keyboard_layout * temp_layout=new keyboard_layout(); // try to read the layout for the specified codepage Bitu kerrcode=temp_layout->read_keyboard_file(layoutname, codepage); @@ -1398,11 +1507,13 @@ Bitu DOS_LoadKeyboardLayout(const char * layoutname, int32_t codepage, const cha return kerrcode; } // Everything went fine, switch to new layout - delete loaded_layout; - loaded_layout=temp_layout; + delete loaded_layout; + loaded_layout=temp_layout; return KEYB_NOERROR; } +#endif +#if !defined(OSFREE) Bitu DOS_SwitchKeyboardLayout(const char* new_layout, int32_t& tried_cp) { if (loaded_layout) { keyboard_layout* changed_layout=NULL; @@ -1415,8 +1526,9 @@ Bitu DOS_SwitchKeyboardLayout(const char* new_layout, int32_t& tried_cp) { return ret_code; } else return 0xFF; } +#endif - +#if !defined(OSFREE) Bitu DOS_ChangeKeyboardLayout(const char* layoutname, int32_t codepage) { keyboard_layout* temp_layout = new keyboard_layout(); // try to read the layout for the specified codepage @@ -1430,7 +1542,9 @@ Bitu DOS_ChangeKeyboardLayout(const char* layoutname, int32_t codepage) { loaded_layout = temp_layout; return KEYB_NOERROR; } +#endif +#if !defined(OSFREE) Bitu DOS_ChangeCodepage(int32_t codepage, const char* codepagefile) { // try to read the layout for the specified codepage int32_t oldcp = dos.loaded_codepage; @@ -1442,15 +1556,19 @@ Bitu DOS_ChangeCodepage(int32_t codepage, const char* codepagefile) { // Everything went fine return KEYB_NOERROR; } +#endif // get currently loaded layout name (NULL if no layout is loaded) const char* DOS_GetLoadedLayout(void) { +#if !defined(OSFREE) if (loaded_layout) { return loaded_layout->get_layout_name(); } +#endif return NULL; } +#if !defined(OSFREE) class DOS_KeyboardLayout: public Module_base { public: DOS_KeyboardLayout(Section* configuration):Module_base(configuration){ @@ -1760,16 +1878,22 @@ class DOS_KeyboardLayout: public Module_base { } } }; +#endif +#if !defined(OSFREE) static DOS_KeyboardLayout* test; +#endif +#if !defined(OSFREE) void DOS_KeyboardLayout_ShutDown(Section* /*sec*/) { if (test != NULL) { delete test; test = NULL; } } +#endif +#if !defined(OSFREE) void DOS_KeyboardLayout_Startup(Section* sec) { (void)sec;//UNUSED if (test == NULL) { @@ -1777,7 +1901,9 @@ void DOS_KeyboardLayout_Startup(Section* sec) { test = new DOS_KeyboardLayout(control->GetSection("dos")); } } +#endif +#if !defined(OSFREE) void DOS_KeyboardLayout_Init() { LOG(LOG_DOSMISC,LOG_DEBUG)("Initializing DOS keyboard layout emulation"); @@ -1785,17 +1911,24 @@ void DOS_KeyboardLayout_Init() { AddVMEventFunction(VM_EVENT_RESET,AddVMEventFunctionFuncPair(DOS_KeyboardLayout_ShutDown)); AddVMEventFunction(VM_EVENT_DOS_EXIT_BEGIN,AddVMEventFunctionFuncPair(DOS_KeyboardLayout_ShutDown)); } +#endif +#if !defined(OSFREE) static const std::set supportedCodepages = { 437, 737, 775, 808, 850, 852, 853, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 872, 874, 932, 936, 949, 950, 951, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 3021 }; +#endif bool isSupportedCP(int cp) { +#if !defined(OSFREE) if (supportedCodepages.count(cp)) return true; if (customcp && cp==customcp) return true; if (altcp && cp==altcp) return true; return false; +#else + return true; +#endif } diff --git a/src/dos/dos_keyboard_layout_data.h b/src/dos/dos_keyboard_layout_data.h index 8b4a2845d8c..d27d74aaad4 100644 --- a/src/dos/dos_keyboard_layout_data.h +++ b/src/dos/dos_keyboard_layout_data.h @@ -24,6 +24,7 @@ wrapped in a KL file (for use of FD-KEYB 2.X) Copyright (C) 2004 by Aitor SANTAMARIA_MERINO */ +#if !defined(OSFREE) static const unsigned char bin_KEYBOARD_SYS[] = { 0x4B,0x43,0x46,0x00,0x01,0x01,0x33,0x4A,0x69,0x72,0x69, 0x20,0x4D,0x61,0x6C,0x61,0x6B,0xFF,0x46,0x72,0x65,0x65, @@ -10551,4 +10552,5 @@ struct BuiltinFileBlob bfb_KEYBRD4_SYS = { /*recommended file name*/ "KEYBRD4.SYS", /*data*/ bin_KEYBRD4_SYS, /*length*/ sizeof(bin_KEYBRD4_SYS) -}; \ No newline at end of file +}; +#endif diff --git a/src/dos/dos_memory.cpp b/src/dos/dos_memory.cpp index ce1a66d4e12..11a37547a4c 100644 --- a/src/dos/dos_memory.cpp +++ b/src/dos/dos_memory.cpp @@ -28,33 +28,43 @@ // uncomment for alloc/free debug messages #define DEBUG_ALLOC +extern bool auto_repair_dos_psp_mcb_corruption; + +uint16_t CONV_MAX_SEG = 0xA000; Bitu UMB_START_SEG = 0x9FFF; /* FIXME: This should be a variable that reflects the last RAM segment. * That means 0x9FFF if 640KB or more, or a lesser value if less than 640KB */ //#define UMB_START_SEG 0x9fff +#if !defined(OSFREE) uint16_t first_umb_seg = 0xd000; uint16_t first_umb_size = 0x2000; +#endif static uint16_t memAllocStrategy = 0x00; -static void DOS_Mem_E_Exit(const char *msg) { - uint16_t mcb_segment=dos.firstMCB; +void DOS_Mem_MCBdump(void) { + uint16_t mcb_segment=dos_kernel_disabled ? guest_msdos_mcb_chain : dos.firstMCB; DOS_MCB mcb(mcb_segment); DOS_MCB mcb_next(0); Bitu counter=0; char name[10]; char c; + if (mcb_segment == 0) return; + LOG_MSG("DOS MCB dump:\n"); while ((c=(char)mcb.GetType()) != 'Z') { if (counter++ > 10000) break; if (c != 'M') break; mcb.GetFileName(name); - LOG_MSG(" Type=0x%02x(%c) Seg=0x%04x size=0x%04x name='%s'\n", + LOG_MSG(" Type=0x%02x(%c) Seg=0x%04x size=0x%04x PSP=0x%04x name='%s'\n", mcb.GetType(),c, - mcb_segment+1,mcb.GetSize(),name); + mcb_segment+1, + mcb.GetSize(), + mcb.GetPSPSeg(), + name); mcb_next.SetPt((uint16_t)(mcb_segment+mcb.GetSize()+1)); mcb_segment+=mcb.GetSize()+1; mcb.SetPt(mcb_segment); @@ -62,19 +72,23 @@ static void DOS_Mem_E_Exit(const char *msg) { mcb.GetFileName(name); c = (char)mcb.GetType(); if (c < 32) c = '.'; - LOG_MSG("FINAL: Type=0x%02x(%c) Seg=0x%04x size=0x%04x name='%s'\n", - mcb.GetType(),c,mcb_segment+1,mcb.GetSize(),name); + LOG_MSG("FINAL: Type=0x%02x(%c) Seg=0x%04x size=0x%04x PSP=0x%04x name='%s'\n", + mcb.GetType(),c,mcb_segment+1,mcb.GetSize(),mcb.GetPSPSeg(),name); LOG_MSG("End dump\n"); +} + +static void DOS_Mem_E_Exit(const char *msg) { + DOS_Mem_MCBdump(); #if C_DEBUG - LOG_MSG("DOS fatal memory error: %s",msg); - throw int(7); // DOS non-fatal error (restart when debugger runs again) + LOG_MSG("DOS fatal memory error: %s",msg); + throw int(7); // DOS non-fatal error (restart when debugger runs again) #else E_Exit("%s",msg); #endif } -void DOS_CompressMemory(uint16_t first_segment=0/*default*/) { +void DOS_CompressMemory(uint16_t first_segment=0/*default*/,uint32_t healfrom=0xFFFFu) { uint16_t mcb_segment=dos.firstMCB; DOS_MCB mcb(mcb_segment); DOS_MCB mcb_next(0); @@ -82,8 +96,26 @@ void DOS_CompressMemory(uint16_t first_segment=0/*default*/) { while (mcb.GetType()!='Z') { if(counter++ > 10000000) DOS_Mem_E_Exit("DOS_CompressMemory: DOS MCB list corrupted."); - mcb_next.SetPt((uint16_t)(mcb_segment+mcb.GetSize()+1)); - if (GCC_UNLIKELY((mcb_next.GetType()!=0x4d) && (mcb_next.GetType()!=0x5a))) DOS_Mem_E_Exit("Corrupt MCB chain"); + const uint16_t nseg = (uint16_t)(mcb_segment+mcb.GetSize()+1); + mcb_next.SetPt(nseg); + if (GCC_UNLIKELY((mcb_next.GetType()!=0x4d) && (mcb_next.GetType()!=0x5a))) { + /* there are some programs that chain load other programs, but when they shrink their MCB down + * to their EXE resident size they put the stack or other data in the way of the next MCB free + * block header. Real MS-DOS appears in this case to just scan up to the last valid block and + * then right after it, write a new free MCB block there. We can't do this for the split memory + * layout of the PCjr emulation. */ + if (auto_repair_dos_psp_mcb_corruption && nseg >= healfrom && (nseg+1u) < CONV_MAX_SEG && !(machine==MCH_PCJR)) { + LOG(LOG_DOSMISC,LOG_ERROR)("Corrupted MCB chain, but within the possible memory region of the DOS application."); + DOS_Mem_MCBdump(); + LOG(LOG_DOSMISC,LOG_ERROR)("Declaring all memory past it as a free block. This is apparently MS-DOS behavior."); + mcb_next.SetSize(CONV_MAX_SEG - (nseg + 1u)); + mcb_next.SetPSPSeg(MCB_FREE); + mcb_next.SetType('Z'); + } + else { + DOS_Mem_E_Exit("Corrupt MCB chain"); + } + } if (mcb_segment >= first_segment && (mcb.GetPSPSeg()==MCB_FREE) && (mcb_next.GetPSPSeg()==MCB_FREE)) { mcb.SetSize(mcb.GetSize()+mcb_next.GetSize()+1); mcb.SetType(mcb_next.GetType()); @@ -139,8 +171,11 @@ bool DOS_SetMemAllocStrategy(uint16_t strat) { return false; } +#if !defined(OSFREE) extern bool dbg_zero_on_dos_allocmem; +#endif +#if !defined(OSFREE) void DOS_zeromem(uint16_t seg,uint16_t para) { uint32_t ofs,cnt; @@ -154,21 +189,22 @@ void DOS_zeromem(uint16_t seg,uint16_t para) { cnt--; } } +#endif static uint16_t GetMaximumMCBFreeSize(uint16_t mcb_segment) { uint16_t largestSize = 0; DOS_MCB mcb(mcb_segment); - uint16_t last_mcb_segment; + uint16_t last_mcb_segment; for (bool endOfChain = false; !endOfChain; mcb.SetPt(mcb_segment)) { auto size = mcb.GetSize(); if (mcb.GetPSPSeg()==MCB_FREE) largestSize = (std::max)(largestSize, size); endOfChain = DOS_MCB::MCBType(mcb.GetType())==DOS_MCB::MCBType::LastBlock; - last_mcb_segment = mcb_segment; + last_mcb_segment = mcb_segment; mcb_segment += size+1; - if (mcb_segment == last_mcb_segment) // Check for infinite loop - break; + if (mcb_segment == last_mcb_segment) // Check for infinite loop + break; } return largestSize; } @@ -184,7 +220,12 @@ uint16_t DOS_GetMaximumFreeSize(uint16_t minBlocks) } bool DOS_AllocateMemory(uint16_t * segment,uint16_t * blocks) { - DOS_CompressMemory(); + DOS_MCB psp_mcb(dos.psp()-1); + + DOS_CompressMemory( + 0/*default scan*/, + dos.psp()+psp_mcb.GetSize()/*auto-heal broken MCB chain if it occurs anywhere past the PSP memory block*/); + uint16_t bigsize=0; uint16_t mem_strat=memAllocStrategy; uint16_t mcb_segment=dos.firstMCB; @@ -197,7 +238,6 @@ bool DOS_AllocateMemory(uint16_t * segment,uint16_t * blocks) { DOS_MCB mcb(0); DOS_MCB mcb_next(0); - DOS_MCB psp_mcb(dos.psp()-1); char psp_name[9]; psp_mcb.GetFileName(psp_name); if (umb_start==UMB_START_SEG && (dos.loaded_codepage == 936 || dos.loaded_codepage == 950 || dos.loaded_codepage == 951)) { @@ -221,7 +261,9 @@ bool DOS_AllocateMemory(uint16_t * segment,uint16_t * blocks) { mcb.SetPSPSeg(dos.psp()); *segment=mcb_segment+1; +#if !defined(OSFREE) if (dbg_zero_on_dos_allocmem) DOS_zeromem(*segment,*blocks); +#endif #ifdef DEBUG_ALLOC LOG(LOG_DOSMISC,LOG_DEBUG)("DOS_AllocateMemory(blocks=0x%04x) = 0x%04x-0x%04x",*blocks,*segment,*segment+*blocks-1); #endif @@ -240,7 +282,9 @@ bool DOS_AllocateMemory(uint16_t * segment,uint16_t * blocks) { //TODO Filename *segment=mcb_segment+1; +#if !defined(OSFREE) if (dbg_zero_on_dos_allocmem) DOS_zeromem(*segment,*blocks); +#endif #ifdef DEBUG_ALLOC LOG(LOG_DOSMISC,LOG_DEBUG)("DOS_AllocateMemory(blocks=0x%04x) = 0x%04x-0x%04x",*blocks,*segment,*segment+*blocks-1); #endif @@ -295,7 +339,9 @@ bool DOS_AllocateMemory(uint16_t * segment,uint16_t * blocks) { mcb.SetFileName(psp_name); *segment = found_seg+1; +#if !defined(OSFREE) if (dbg_zero_on_dos_allocmem) DOS_zeromem(*segment,*blocks); +#endif #ifdef DEBUG_ALLOC LOG(LOG_DOSMISC,LOG_DEBUG)("DOS_AllocateMemory(blocks=0x%04x) = 0x%04x-0x%04x",*blocks,*segment,*segment+*blocks-1); #endif @@ -313,7 +359,9 @@ bool DOS_AllocateMemory(uint16_t * segment,uint16_t * blocks) { mcb.SetType(0x4D); } +#if !defined(OSFREE) if (dbg_zero_on_dos_allocmem) DOS_zeromem(*segment,*blocks); +#endif #ifdef DEBUG_ALLOC LOG(LOG_DOSMISC,LOG_DEBUG)("DOS_AllocateMemory(blocks=0x%04x) = 0x%04x-0x%04x",*blocks,*segment,*segment+*blocks-1); #endif @@ -328,7 +376,7 @@ bool DOS_AllocateMemory(uint16_t * segment,uint16_t * blocks) { } #ifdef DEBUG_ALLOC - LOG(LOG_DOSMISC,LOG_DEBUG)("DOS_AllocateMemory(blocks=0x%04x) = 0x%04x-0x%04x",*blocks,*segment,*segment+*blocks-1); + LOG(LOG_DOSMISC,LOG_DEBUG)("DOS_AllocateMemory(blocks=0x%04x) = 0x%04x-0x%04x failed",*blocks,*segment,*segment+*blocks-1); #endif return false; } @@ -357,18 +405,22 @@ bool DOS_ResizeMemory(uint16_t segment,uint16_t * blocks) { return false; } + /* MS-DOS is documented to combine free blocks at or after this block. Also to avoid combining free blocks in a way + * that might invalidate the mcb() block we just constructed. */ uint16_t total=mcb.GetSize(); - DOS_MCB mcb_next(segment+total); + DOS_CompressMemory(segment-1); - if (*blocks > total) - DOS_CompressMemory(segment-1); - else - DOS_CompressMemory(); + /* DOS_CompressMemory() may change the MCB block size if this is a free block when it combines consecutive free blocks. + * If you don't think this could be a free block, understand that there are DOS applications and games out there + * that like to allocate memory by resizing a previously freed block. The Tandy version of California Games II + * does this, for example, as does (noted behlow) some Demoscene code. */ + total=mcb.GetSize(); + DOS_MCB mcb_next(segment+total); if (*blocks<=total) { if (GCC_UNLIKELY(*blocks==total)) { /* Nothing to do, however if the block is freed, canonical MS-DOS behavior is to assign your PSP segment as if allocated (Incentiv by DID, party '94) */ - if (mcb.GetPSPSeg()==MCB_FREE && freed_mcb_allocate_on_resize) + if (mcb.GetPSPSeg()==MCB_FREE) mcb.SetPSPSeg(dos.psp()); return true; @@ -418,8 +470,15 @@ bool DOS_ResizeMemory(uint16_t segment,uint16_t * blocks) { } mcb.SetSize(total); - mcb.SetPSPSeg(dos.psp()); - if (*blocks==total) return true; /* block fit exactly */ + if (*blocks==total) { + /* block fit exactly */ + mcb.SetPSPSeg(dos.psp()); + return true; + } + +#ifdef DEBUG_ALLOC + LOG(LOG_DOSMISC,LOG_DEBUG)("DOS_ResizeMemory(seg=0x%04x) failed, maximum 0x%04x available",segment,(unsigned int)total); +#endif *blocks=total; /* return maximum */ DOS_SetError(DOSERR_INSUFFICIENT_MEMORY); @@ -428,13 +487,13 @@ bool DOS_ResizeMemory(uint16_t segment,uint16_t * blocks) { bool DOS_FreeMemory(uint16_t segment) { -//TODO Check if allowed to free this segment + //TODO Check if allowed to free this segment if (segment < DOS_MEM_START+1) { LOG(LOG_DOSMISC,LOG_ERROR)("Program tried to free %X ---ERROR",segment); DOS_SetError(DOSERR_MB_ADDRESS_INVALID); return false; } - + DOS_MCB mcb(segment-1); if ((mcb.GetType()!=0x4d) && (mcb.GetType()!=0x5a)) { DOS_SetError(DOSERR_MB_ADDRESS_INVALID); @@ -446,19 +505,20 @@ bool DOS_FreeMemory(uint16_t segment) { #endif mcb.SetPSPSeg(MCB_FREE); -// DOS_CompressMemory(); + // DOS_CompressMemory(); return true; } Bitu GetEMSPageFrameSegment(void); +#if !defined(OSFREE) void DOS_BuildUMBChain(bool umb_active,bool /*ems_active*/) { - unsigned int seg_limit = (unsigned int)(MEM_TotalPages()*256); + unsigned int seg_limit = (unsigned int)(MEM_ConventionalPages()*256); /* UMBs are only possible if the machine has 1MB+64KB of RAM */ if (umb_active && (machine!=MCH_TANDY) && seg_limit >= (0x10000+0x1000-1) && first_umb_seg < GetEMSPageFrameSegment()) { - /* XMS emulation sets UMB size now. - * PCjr mode disables UMB emulation */ + /* XMS emulation sets UMB size now. + * PCjr mode disables UMB emulation */ #if 0 if (ems_active) { /* we can use UMBs up to the EMS page frame */ @@ -501,8 +561,10 @@ void DOS_BuildUMBChain(bool umb_active,bool /*ems_active*/) { dos_infoblock.SetUMBChainState(0); } } +#endif bool DOS_LinkUMBsToMemChain(uint16_t linkstate) { +#if !defined(OSFREE) /* Get start of UMB-chain */ uint16_t umb_start=dos_infoblock.GetStartOfUMBChain(); if (umb_start!=UMB_START_SEG) { @@ -517,7 +579,7 @@ bool DOS_LinkUMBsToMemChain(uint16_t linkstate) { } if ((linkstate&1)==(dos_infoblock.GetUMBChainState()&1)) return true; - + /* Scan MCB-chain for last block before UMB-chain */ uint16_t mcb_segment=dos.firstMCB; uint16_t prev_mcb_segment=dos.firstMCB; @@ -554,6 +616,9 @@ bool DOS_LinkUMBsToMemChain(uint16_t linkstate) { } return true; +#else + return false; +#endif } @@ -563,16 +628,9 @@ extern uint16_t DOS_IHSEG; extern bool enable_dummy_device_mcb; extern bool dos_clear_tf_on_int01; +extern bool dos_umb; -void DOS_SetupMemory(void) { - unsigned int max_conv; - unsigned int seg_limit; - - max_conv = (unsigned int)mem_readw(BIOS_MEMORY_SIZE) << (10u - 4u); - seg_limit = (unsigned int)(MEM_TotalPages()*256); - if (seg_limit > max_conv) seg_limit = max_conv; - UMB_START_SEG = max_conv - 1; - +void DOS_SetupIHSEG(void) { /* Let dos claim a few bios interrupts. Makes DOSBox more compatible with * buggy games, which compare against the interrupt table. (probably a * broken linked list implementation) */ @@ -611,31 +669,122 @@ void DOS_SetupMemory(void) { else { RealSetVec(0x01,RealMake(ihseg,ihofs)); //BioMenace (offset!=4) } +} - uint16_t mcb_sizes=0; +void DOS_CreateDummyDeviceMCB(void) { + uint16_t segv=0,blocks=16; + // Create a dummy device MCB with PSPSeg=0x0008 + if (DOS_AllocateMemory(&segv,&blocks)) { + LOG_MSG("Dummy device MCB at segment 0x%x",segv); - if (enable_dummy_device_mcb) { - // Create a dummy device MCB with PSPSeg=0x0008 - LOG_MSG("Dummy device MCB at segment 0x%x",DOS_MEM_START+mcb_sizes); - DOS_MCB mcb_devicedummy(DOS_MEM_START+mcb_sizes); + DOS_MCB mcb_devicedummy(segv-1u); mcb_devicedummy.SetPSPSeg(MCB_DOS); // Devices - mcb_devicedummy.SetSize(16); - mcb_devicedummy.SetType(0x4d); // More blocks will follow - mcb_sizes+=1+16; // We DO need to mark this area as 'SD' but leaving it blank so far // confuses MEM.EXE (shows ???????) which suggests other software // might have a problem with it as well. // mcb_devicedummy.SetFileName("SD "); } +} + +void DOS_MemStartChange(uint16_t adjto) { + unsigned char mcb_raw[16]; + const unsigned char zeros[16] = {0}; + uint32_t sg = dos_infoblock.GetFirstMCB(); + + assert(adjto < 0xF000); + + while (sg < adjto) { + DOS_MCB mcb(sg); + + if (!(mcb.GetType() == 0x5A || mcb.GetType() == 0x4D)) + E_Exit("DOS_MemStartChange() MCB chain is corrupt"); + + uint32_t tdo = adjto - sg; + uint32_t avl = mcb.GetSize(); + if (tdo > avl) tdo = avl; + + LOG(LOG_MISC,LOG_DEBUG)("DOS_MemStartChange: mcb=%x type=%x size=%x avail=%x todo(to remove)=%x adjto=%x psp=%x", + sg,mcb.GetType(),mcb.GetSize(),avl,tdo,adjto,mcb.GetPSPSeg()); + + /* operate only on free memory, never on memory owned by any process */ + if (mcb.GetPSPSeg() != 0) break; + + /* change size */ + avl -= tdo; + mcb.SetSize(avl); + + /* copy off the block, make the old block invalid, write the new block */ + MEM_BlockRead(PhysMake(sg,0),mcb_raw,16); + MEM_BlockWrite(PhysMake(sg,0),zeros,16); + sg += tdo; MEM_BlockWrite(PhysMake(sg,0),mcb_raw,16); + if (sg >= 0xF000) E_Exit("DOS_MemStartChange() MCB chain is corrupt"); + + /* block is now zero, need to keep moving? */ + if (sg < adjto && tdo == 0) { + if (mcb.GetType() == 0x5A) break; /* do not remove the last block in the chain */ + + LOG(LOG_MISC,LOG_DEBUG)("DOS_MemStartChange: mcb=%x type=%x size is zero and still need to adjust, deleting MCB block", + sg,mcb.GetType()); + + /* remove the block entirely, advance to next */ + MEM_BlockWrite(PhysMake(sg,0),zeros,16); + sg++; + } + } + + dos.firstMCB=sg; + dos_infoblock.SetFirstMCB(sg); + LOG(LOG_MISC,LOG_DEBUG)("DOS_MemStartChange: DOS_MEM_START and first MCB is now mcb=%x adjto=%x",sg,adjto); +} + +void DOS_AllocMinFreePadding(uint16_t upto) { + const uint16_t o_psp = dos.psp(); + uint16_t sg=0,tmp; + + dos.psp(8); // DOS ownership + + tmp = 0; + if (DOS_AllocateMemory(&sg,&tmp)) { + if (sg < upto) { + LOG(LOG_DOSMISC,LOG_DEBUG)(" min free pad: seg 0x%04x",sg); + } + else { + DOS_FreeMemory(sg); + sg = 0; + } + } + else { + sg=0; + } + + if (sg != 0 && sg < upto) { + tmp = upto - sg; + if (!DOS_ResizeMemory(sg,&tmp)) { + LOG(LOG_DOSMISC,LOG_DEBUG)(" WARNING: cannot resize min free pad"); + } + } - DOS_MCB mcb(DOS_MEM_START+mcb_sizes); + dos.psp(o_psp); +} + +void DOS_SetupMemory(void) { + unsigned int max_conv; + unsigned int seg_limit; + + max_conv = (unsigned int)mem_readw(BIOS_MEMORY_SIZE) << (10u - 4u); + seg_limit = (unsigned int)(MEM_ConventionalPages()*256); + if (seg_limit > max_conv) seg_limit = max_conv; + UMB_START_SEG = max_conv - 1; + + DOS_MCB mcb(DOS_MEM_START); mcb.SetPSPSeg(MCB_FREE); //Free mcb.SetType(0x5a); //Last Block if (machine==MCH_TANDY) { /* map memory as normal, the BIOS initialization is the code responsible * for subtracting 32KB from top of system memory for video memory. */ - mcb.SetSize(/*normally 0x97FF*/(seg_limit-1) - DOS_MEM_START - mcb_sizes); + mcb.SetSize(/*normally 0x97FF*/(seg_limit-1) - DOS_MEM_START); + CONV_MAX_SEG = seg_limit; } else if (machine==MCH_PCJR) { /* If there is more than 128KB of RAM, then the MCB chain must be constructed * to exclude video memory. In that case, the BIOS values in the BDA will report @@ -652,6 +801,7 @@ void DOS_SetupMemory(void) { mcb_devicedummy.SetPSPSeg(MCB_FREE); mcb_devicedummy.SetSize(/*0x9FFF*/(seg_limit-1) - 0x2000); mcb_devicedummy.SetType(0x5a); + CONV_MAX_SEG = seg_limit; /* exclude PCJr graphics region */ mcb_devicedummy.SetPt((uint16_t)0x17ff); @@ -660,12 +810,13 @@ void DOS_SetupMemory(void) { mcb_devicedummy.SetType(0x4d); /* memory below 96k */ - mcb.SetSize(0x1800 - DOS_MEM_START - (2+mcb_sizes)); + mcb.SetSize(0x1800 - DOS_MEM_START - 2); mcb.SetType(0x4d); } else { /* Normal MCB chain, nothing special */ - mcb.SetSize(/*normally 0x97FF*/(seg_limit-1) - DOS_MEM_START - mcb_sizes); + mcb.SetSize(/*normally 0x97FF*/(seg_limit-1) - DOS_MEM_START); + CONV_MAX_SEG = seg_limit; } } else { #ifndef DEBUG_ALLOC @@ -679,7 +830,12 @@ void DOS_SetupMemory(void) { /* complete memory up to 640k available */ /* last paragraph used to add UMB chain to low-memory MCB chain */ - mcb.SetSize(/*0x9FFE*/(seg_limit-2) - DOS_MEM_START - mcb_sizes); + if (dos_umb) + mcb.SetSize(/*0x9FFE*/(seg_limit-2) - DOS_MEM_START); + else + mcb.SetSize(/*0x9FFF*/(seg_limit-1) - DOS_MEM_START); + + CONV_MAX_SEG = seg_limit-1; } dos.firstMCB=DOS_MEM_START; diff --git a/src/dos/dos_misc.cpp b/src/dos/dos_misc.cpp index 1f14b2aca14..11c1ffb392c 100644 --- a/src/dos/dos_misc.cpp +++ b/src/dos/dos_misc.cpp @@ -49,7 +49,9 @@ extern bool enable_share_exe, enable_network_redirector; extern Bitu XMS_EnableA20(bool enable); +#if !defined(OSFREE) bool enable_a20_on_windows_init = false; +#endif static Bitu call_int2f,call_int2a; @@ -110,7 +112,9 @@ extern bool i4dos, shellrun, clipboard_dosapi, swapad; extern RealPt DOS_DriveDataListHead; // INT 2Fh AX=0803h DRIVER.SYS drive data table list extern uint16_t seg_win_startup_info; void PasteClipboard(bool bPressed); +#if !defined(OSFREE) RealPt Get_EMS_vm86control(); +#endif // INT 2F char regpath[CROSS_LEN+1]="C:\\WINDOWS\\SYSTEM.DAT"; @@ -309,6 +313,7 @@ static bool DOS_MultiplexFunctions(void) { reg_ax = 0x301; return true; case 0x1605: /* Windows init broadcast */ +#if !defined(OSFREE) if (enable_a20_on_windows_init) { /* This hack exists because Windows 3.1 doesn't seem to enable A20 first during an * initial critical period where it assumes it's on, prior to checking and enabling/disabling it. @@ -320,6 +325,7 @@ static bool DOS_MultiplexFunctions(void) { LOG_MSG("Enabling A20 gate for Windows in response to INIT broadcast"); XMS_EnableA20(true); } +#endif /* TODO: Maybe future parts of DOSBox-X will do something with this */ /* TODO: Don't show this by default. Show if the user wants it by a) setting something to "true" in dosbox-x.conf or b) running a builtin command in Z:\ */ @@ -357,6 +363,7 @@ static bool DOS_MultiplexFunctions(void) { reg_bx = 0; } +#if !defined(OSFREE) /* If EMS emulation is providing VCPI and it is enabled (the system is in vm86 mode), * provide Windows a callback function to control it */ { @@ -367,6 +374,7 @@ static bool DOS_MultiplexFunctions(void) { LOG_MSG("DEBUG: Providing Windows our VCPI vm86 control entry point 0x%lx",(unsigned long)p); } } +#endif return false; /* pass it on to other INT 2F handlers */ case 0x1606: /* Windows exit broadcast */ diff --git a/src/dos/dos_mscdex.cpp b/src/dos/dos_mscdex.cpp index 103f0570777..41e4a7ada4f 100644 --- a/src/dos/dos_mscdex.cpp +++ b/src/dos/dos_mscdex.cpp @@ -25,6 +25,7 @@ #include "dos_system.h" #include "dos_inc.h" #include "setup.h" +#include "shell.h" #include "control.h" #include "support.h" #include "bios_disk.h" @@ -49,9 +50,12 @@ int forceCD = -1; extern int bootdrive; extern bool dos_kernel_disabled, bootguest, bootvm, use_quick_reboot, enable_network_redirector; +#if !defined(OSFREE) static Bitu MSCDEX_Strategy_Handler(void); static Bitu MSCDEX_Interrupt_Handler(void); +#endif +#if !defined(OSFREE) class DOS_DeviceHeader:public MemStruct { public: DOS_DeviceHeader(PhysPt ptr) { pt = ptr; }; @@ -62,7 +66,14 @@ class DOS_DeviceHeader:public MemStruct { void SetDriveLetter (uint8_t letter) { sSave(sDeviceHeader,driveLetter,letter); }; void SetNumSubUnits (uint8_t num) { sSave(sDeviceHeader,numSubUnits,num); }; uint8_t GetNumSubUnits (void) { return sGet(sDeviceHeader,numSubUnits); }; - void SetName (char const* _name) { MEM_BlockWrite(pt+offsetof(sDeviceHeader,name),_name,8); }; + void SetName (char const* _name) { + char buf[8]; + size_t len = strlen(_name); + memset(buf, ' ', 8); + memcpy(buf, _name, (len < 8) ? len : 8); + + MEM_BlockWrite(pt + offsetof(sDeviceHeader, name), buf, 8); + }; void SetInterrupt (uint16_t ofs) { sSave(sDeviceHeader,interrupt,ofs); }; void SetStrategy (uint16_t ofs) { sSave(sDeviceHeader,strategy,ofs); }; @@ -83,6 +94,7 @@ class DOS_DeviceHeader:public MemStruct { #pragma pack() #endif }; +#endif class CMscdex { public: @@ -93,32 +105,44 @@ class CMscdex { uint16_t GetNumDrives (void) { return numDrives; }; uint16_t GetFirstDrive (void) { return dinfo[0].drive; }; uint8_t GetSubUnit (uint16_t _drive); +#if !defined(OSFREE) bool GetUPC (uint8_t subUnit, uint8_t& attr, char* upc); +#endif void InitNewMedia (uint8_t subUnit); +#if !defined(OSFREE) bool PlayAudioSector (uint8_t subUnit, uint32_t sector, uint32_t length); bool PlayAudioMSF (uint8_t subUnit, uint32_t start, uint32_t length); bool StopAudio (uint8_t subUnit); bool GetAudioStatus (uint8_t subUnit, bool& playing, bool& pause, TMSF& start, TMSF& end); bool GetQChannelData (uint8_t subUnit, uint8_t& attr, uint8_t& track, uint8_t &index, TMSF& rel, TMSF& abs); - +#endif int RemoveDrive (uint16_t _drive); int AddDrive (uint16_t _drive, char* physicalPath, uint8_t& subUnit); bool HasDrive (uint16_t drive); void ReplaceDrive (CDROM_Interface* newCdrom, uint8_t subUnit); void GetDrives (PhysPt data); +#if !defined(OSFREE) void GetDriverInfo (PhysPt data); +#endif bool GetVolumeName (uint8_t subUnit, char* data); +#if !defined(OSFREE) bool GetFileName (uint16_t drive, uint16_t pos, PhysPt data); bool GetDirectoryEntry (uint16_t drive, bool copyFlag, PhysPt pathname, PhysPt buffer, uint16_t& error); +#endif bool ReadVTOC (uint16_t drive, uint16_t volume, PhysPt data, uint16_t& offset, uint16_t& error); +#if !defined(OSFREE) bool ReadSectors (uint16_t drive, uint32_t sector, uint16_t num, PhysPt data); +#endif bool ReadSectors (uint8_t subUnit, bool raw, uint32_t sector, uint16_t num, PhysPt data); +#if !defined(OSFREE) bool ReadSectorsMSF (uint8_t subUnit, bool raw, uint32_t start, uint16_t num, PhysPt data); bool SendDriverRequest (uint16_t drive, PhysPt data); +#endif bool IsValidDrive (uint16_t _drive); bool GetCDInfo (uint8_t subUnit, uint8_t& tr1, uint8_t& tr2, TMSF& leadOut); +#if !defined(OSFREE) uint32_t GetVolumeSize (uint8_t subUnit); bool GetTrackInfo (uint8_t subUnit, uint8_t track, uint8_t& attr, TMSF& start); uint16_t GetStatusWord (uint8_t subUnit,uint16_t status); @@ -129,6 +153,7 @@ class CMscdex { bool ResumeAudio (uint8_t subUnit); bool GetMediaStatus (uint8_t subUnit, bool& media, bool& changed, bool& trayOpen); bool Seek (uint8_t subUnit, uint32_t sector); +#endif PhysPt GetDefaultBuffer (void); PhysPt GetTempBuffer (void); @@ -154,12 +179,16 @@ class CMscdex { uint16_t defaultBufSeg = 0; TDriveInfo dinfo[MSCDEX_MAX_DRIVES]; CDROM_Interface* cdrom[MSCDEX_MAX_DRIVES]; +#if !defined(OSFREE) uint16_t rootDriverHeaderSeg = 0; +#endif char* name = NULL; +#if !defined(OSFREE) bool ChannelControl (uint8_t subUnit, TCtrl ctrl); bool GetChannelControl (uint8_t subUnit, TCtrl& ctrl); +#endif }; CMscdex::CMscdex(const char *_name) { @@ -172,11 +201,12 @@ CMscdex::CMscdex(const char *_name) { } CMscdex::~CMscdex(void) { - if ((bootguest||(use_quick_reboot&&!bootvm))&&bootdrive>=0) return; defaultBufSeg = 0; for (uint16_t i=0; iRelease(); + cdrom[i] = nullptr; + } } delete[] name; } @@ -211,7 +241,8 @@ int CMscdex::RemoveDrive(uint16_t _drive) } if (idx == MSCDEX_MAX_DRIVES || (idx!=0 && idx!=GetNumDrives()-1)) return 0; - delete cdrom[idx]; + cdrom[idx]->Release(); + cdrom[idx] = nullptr; if (idx==0) { for (uint16_t i=0; i=MSCDEX_MAX_DRIVES) return 4; - if (GetNumDrives()) { - // Error check, driveletter have to be in a row - if (dinfo[0].drive-1!=_drive && dinfo[numDrives-1].drive+1!=_drive) - return 1; - } - // Set return type to ok +int CDROM_AllocateInterface(char* physicalPath,int forceCD,uint16_t numDrive,CDROM_Interface **cdrom) { int result = 0; + + *cdrom = NULL; + // Get Mounttype and init needed cdrom interface // switch (CDROM_GetMountType(physicalPath,forceCD)) { // case 0x00: { @@ -264,46 +292,46 @@ int CMscdex::AddDrive(uint16_t _drive, char* physicalPath, uint8_t& subUnit) // if ((osi.dwPlatformId==VER_PLATFORM_WIN32_NT) && (osi.dwMajorVersion>4)) { // // only WIN NT/200/XP // if (useCdromInterface==CDROM_USE_IOCTL_DIO) { -// cdrom[numDrives] = new CDROM_Interface_Ioctl(CDROM_Interface_Ioctl::CDIOCTL_CDA_DIO); +// (*cdrom = new CDROM_Interface_Ioctl(CDROM_Interface_Ioctl::CDIOCTL_CDA_DIO))->Addref(); // LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: IOCTL Interface."); // break; // } // if (useCdromInterface==CDROM_USE_IOCTL_DX) { -// cdrom[numDrives] = new CDROM_Interface_Ioctl(CDROM_Interface_Ioctl::CDIOCTL_CDA_DX); +// (*cdrom = new CDROM_Interface_Ioctl(CDROM_Interface_Ioctl::CDIOCTL_CDA_DX))->Addref(); // LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: IOCTL Interface (digital audio extraction)."); // break; // } // if (useCdromInterface==CDROM_USE_IOCTL_MCI) { -// cdrom[numDrives] = new CDROM_Interface_Ioctl(CDROM_Interface_Ioctl::CDIOCTL_CDA_MCI); +// (*cdrom = new CDROM_Interface_Ioctl(CDROM_Interface_Ioctl::CDIOCTL_CDA_MCI))->Addref(); // LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: IOCTL Interface (media control interface)."); // break; // } // } // if (useCdromInterface==CDROM_USE_ASPI) { // // all Wins - ASPI -// cdrom[numDrives] = new CDROM_Interface_Aspi(); +// (*cdrom = new CDROM_Interface_Aspi())->Addref(); // LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: ASPI Interface."); // break; // } // #endif // #if defined (LINUX) || defined(OS2) -// // // Always use IOCTL in Linux or OS/2 -// // cdrom[numDrives] = new CDROM_Interface_Ioctl(); -// // LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: IOCTL Interface."); -// // #else +// // Always use IOCTL in Linux or OS/2 +// (*cdrom = new CDROM_Interface_Ioctl())->Addref(); +// LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: IOCTL Interface."); +// #else // // Default case windows and other oses -// cdrom[numDrives] = new CDROM_Interface_SDL(); +// (*cdrom = new CDROM_Interface_SDL())->Addref(); // LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: SDL Interface."); // #endif // } break; // case 0x01: // iso cdrom interface // LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: Mounting iso file as cdrom: %s", physicalPath); -// cdrom[numDrives] = new CDROM_Interface_Image((uint8_t)numDrives); +// (*cdrom = new CDROM_Interface_Image((uint8_t)numDrive))->Addref(); // break; // case 0x02: // fake cdrom interface (directories) // { // CDROM_Interface_Fake *fake = new CDROM_Interface_Fake; -// cdrom[numDrives] = fake; +// (*cdrom = fake)->Addref(); // assert(fake->class_id == CDROM_Interface::INTERFACE_TYPE::ID_FAKE); // if (!strcmp(physicalPath,"empty")) { // fake->isEmpty = true; @@ -318,13 +346,30 @@ int CMscdex::AddDrive(uint16_t _drive, char* physicalPath, uint8_t& subUnit) // default : // weird result // return 6; // } - cdrom[numDrives] = new CDROM_Interface_Image((uint8_t)numDrives); - if (!cdrom[numDrives]->SetDevice(physicalPath,forceCD)) { -// delete cdrom[numDrives] ; mount seems to delete it + (*cdrom = new CDROM_Interface_Image((uint8_t)numDrive))->Addref(); + if (!(*cdrom)->SetDevice(physicalPath,forceCD)) { + (*cdrom)->Release(); + *cdrom = NULL; return 3; } + return result; +} + +int CMscdex::AddDrive(uint16_t _drive, char* physicalPath, uint8_t& subUnit) +{ + subUnit = 0; + if ((Bitu)GetNumDrives()+1>=MSCDEX_MAX_DRIVES) return 4; + if (GetNumDrives()) { + // Error check, driveletter have to be in a row + if (dinfo[0].drive-1!=_drive && dinfo[numDrives-1].drive+1!=_drive) + return 1; + } + + int result = CDROM_AllocateInterface(physicalPath,forceCD,numDrives,&cdrom[numDrives]); + +#if !defined(OSFREE) if (rootDriverHeaderSeg==0) { uint16_t driverSize = sizeof(DOS_DeviceHeader::sDeviceHeader) + 10; // 10 = Bytes for 3 callbacks @@ -383,10 +428,13 @@ int CMscdex::AddDrive(uint16_t _drive, char* physicalPath, uint8_t& subUnit) devHeader.SetStrategy(off); devHeader.SetInterrupt(off+5); } +#endif +#if !defined(OSFREE) // Set drive DOS_DeviceHeader devHeader(PhysMake(rootDriverHeaderSeg,0)); devHeader.SetNumSubUnits(devHeader.GetNumSubUnits()+1); +#endif if (dinfo[0].drive-1==_drive) { CDROM_Interface *_cdrom = cdrom[numDrives]; @@ -413,8 +461,10 @@ int CMscdex::AddDrive(uint16_t _drive, char* physicalPath, uint8_t& subUnit) dinfo[subUnit].audioCtrl.out[chan]=chan; dinfo[subUnit].audioCtrl.vol[chan]=0xff; } +#if !defined(OSFREE) // stop audio StopAudio(subUnit); +#endif return result; } @@ -424,10 +474,12 @@ bool CMscdex::HasDrive(uint16_t drive) { void CMscdex::ReplaceDrive(CDROM_Interface* newCdrom, uint8_t subUnit) { if (cdrom[subUnit] != NULL) { +#if !defined(OSFREE) StopAudio(subUnit); - delete cdrom[subUnit]; +#endif + cdrom[subUnit]->Release(); } - cdrom[subUnit] = newCdrom; + (cdrom[subUnit] = newCdrom)->Addref(); } PhysPt CMscdex::GetDefaultBuffer(void) { @@ -446,6 +498,7 @@ PhysPt CMscdex::GetTempBuffer(void) { return PhysMake(defaultBufSeg,0); } +#if !defined(OSFREE) void CMscdex::GetDriverInfo (PhysPt data) { for (uint16_t i=0; i=numDrives) return false; @@ -470,6 +524,7 @@ bool CMscdex::GetCDInfo(uint8_t subUnit, uint8_t& tr1, uint8_t& tr2, TMSF& leadO return dinfo[subUnit].lastResult; } +#if !defined(OSFREE) bool CMscdex::GetTrackInfo(uint8_t subUnit, uint8_t track, uint8_t& attr, TMSF& start) { if (subUnit>=numDrives) return false; dinfo[subUnit].lastResult = cdrom[subUnit]->GetAudioTrackInfo(track,start,attr); @@ -479,7 +534,9 @@ bool CMscdex::GetTrackInfo(uint8_t subUnit, uint8_t track, uint8_t& attr, TMSF& } return dinfo[subUnit].lastResult; } +#endif +#if !defined(OSFREE) bool CMscdex::PlayAudioSector(uint8_t subUnit, uint32_t sector, uint32_t length) { if (subUnit>=numDrives) return false; // If value from last stop is used, this is meant as a resume @@ -497,7 +554,9 @@ bool CMscdex::PlayAudioSector(uint8_t subUnit, uint32_t sector, uint32_t length) } return dinfo[subUnit].lastResult; } +#endif +#if !defined(OSFREE) bool CMscdex::PlayAudioMSF(uint8_t subUnit, uint32_t start, uint32_t length) { if (subUnit>=numDrives) return false; uint8_t min = (uint8_t)(start>>16) & 0xFF; @@ -506,7 +565,9 @@ bool CMscdex::PlayAudioMSF(uint8_t subUnit, uint32_t start, uint32_t length) { uint32_t sector = min*60u*75u+sec*75u+fr - 150u; return dinfo[subUnit].lastResult = PlayAudioSector(subUnit,sector,length); } +#endif +#if !defined(OSFREE) bool CMscdex::Seek(uint8_t subUnit, uint32_t sector) { if(subUnit >= numDrives) { @@ -521,7 +582,9 @@ bool CMscdex::Seek(uint8_t subUnit, uint32_t sector) } return dinfo[subUnit].lastResult; } +#endif +#if !defined(OSFREE) bool CMscdex::GetQChannelData(uint8_t subUnit, uint8_t& attr, uint8_t& track, uint8_t &index, TMSF& rel, TMSF& abs) { if (subUnit>=numDrives) return false; dinfo[subUnit].lastResult = cdrom[subUnit]->GetAudioSub(attr,track,index,rel,abs); @@ -532,7 +595,9 @@ bool CMscdex::GetQChannelData(uint8_t subUnit, uint8_t& attr, uint8_t& track, ui } return dinfo[subUnit].lastResult; } +#endif +#if !defined(OSFREE) bool CMscdex::GetAudioStatus(uint8_t subUnit, bool& playing, bool& pause, TMSF& start, TMSF& end) { if (subUnit>=numDrives) return false; dinfo[subUnit].lastResult = cdrom[subUnit]->GetAudioStatus(playing,pause); @@ -561,7 +626,9 @@ bool CMscdex::GetAudioStatus(uint8_t subUnit, bool& playing, bool& pause, TMSF& return dinfo[subUnit].lastResult; } +#endif +#if !defined(OSFREE) bool CMscdex::StopAudio(uint8_t subUnit) { if (subUnit>=numDrives) return false; if (dinfo[subUnit].audioPlay) { @@ -593,12 +660,16 @@ bool CMscdex::StopAudio(uint8_t subUnit) { } return dinfo[subUnit].lastResult; } +#endif +#if !defined(OSFREE) bool CMscdex::ResumeAudio(uint8_t subUnit) { if (subUnit>=numDrives) return false; return dinfo[subUnit].lastResult = PlayAudioSector(subUnit,dinfo[subUnit].audioStart,dinfo[subUnit].audioEnd); } +#endif +#if !defined(OSFREE) uint32_t CMscdex::GetVolumeSize(uint8_t subUnit) { if (subUnit>=numDrives) return false; uint8_t tr1,tr2; @@ -607,6 +678,7 @@ uint32_t CMscdex::GetVolumeSize(uint8_t subUnit) { if (dinfo[subUnit].lastResult) return (leadOut.min*60u*75u)+(leadOut.sec*75u)+leadOut.fr; return 0; } +#endif bool CMscdex::ReadVTOC(uint16_t drive, uint16_t volume, PhysPt data, uint16_t& offset, uint16_t& error) { uint8_t subunit = GetSubUnit(drive); @@ -651,6 +723,7 @@ bool CMscdex::GetVolumeName(uint8_t subUnit, char* data) { return success; } +#if !defined(OSFREE) bool CMscdex::GetFileName(uint16_t drive, uint16_t pos, PhysPt data) { uint16_t offset = 0, error; bool success = false; @@ -667,12 +740,15 @@ bool CMscdex::GetFileName(uint16_t drive, uint16_t pos, PhysPt data) { } return success; } +#endif +#if !defined(OSFREE) bool CMscdex::GetUPC(uint8_t subUnit, uint8_t& attr, char* upc) { if (subUnit>=numDrives) return false; return dinfo[subUnit].lastResult = cdrom[subUnit]->GetUPC(attr,&upc[0]); } +#endif bool CMscdex::ReadSectors(uint8_t subUnit, bool raw, uint32_t sector, uint16_t num, PhysPt data) { if (subUnit>=numDrives) return false; @@ -682,6 +758,7 @@ bool CMscdex::ReadSectors(uint8_t subUnit, bool raw, uint32_t sector, uint16_t n return dinfo[subUnit].lastResult; } +#if !defined(OSFREE) bool CMscdex::ReadSectorsMSF(uint8_t subUnit, bool raw, uint32_t start, uint16_t num, PhysPt data) { if (subUnit>=numDrives) return false; uint8_t min = (uint8_t)(start>>16) & 0xFF; @@ -690,12 +767,16 @@ bool CMscdex::ReadSectorsMSF(uint8_t subUnit, bool raw, uint32_t start, uint16_t uint32_t sector = min*60u*75u+sec*75u+fr - 150u; return ReadSectors(subUnit,raw,sector,num,data); } +#endif +#if !defined(OSFREE) // Called from INT 2F bool CMscdex::ReadSectors(uint16_t drive, uint32_t sector, uint16_t num, PhysPt data) { return ReadSectors(GetSubUnit(drive),false,sector,num,data); } +#endif +#if !defined(OSFREE) bool CMscdex::GetDirectoryEntry(uint16_t drive, bool copyFlag, PhysPt pathname, PhysPt buffer, uint16_t& error) { char volumeID[6] = {0}; char searchName[256]; @@ -809,7 +890,9 @@ bool CMscdex::GetDirectoryEntry(uint16_t drive, bool copyFlag, PhysPt pathname, error = DOSERR_FILE_NOT_FOUND; return false; // not found } +#endif +#if !defined(OSFREE) bool CMscdex::GetCurrentPos(uint8_t subUnit, TMSF& pos) { if (subUnit>=numDrives) return false; if(!dinfo[subUnit].audioPlay) { @@ -822,13 +905,17 @@ bool CMscdex::GetCurrentPos(uint8_t subUnit, TMSF& pos) { if(!dinfo[subUnit].lastResult) pos.fr = pos.min = pos.sec = 0; return dinfo[subUnit].lastResult; } +#endif +#if !defined(OSFREE) bool CMscdex::GetMediaStatus(uint8_t subUnit, bool& media, bool& changed, bool& trayOpen) { if (subUnit>=numDrives) return false; dinfo[subUnit].lastResult = cdrom[subUnit]->GetMediaTrayStatus(media,changed,trayOpen); return dinfo[subUnit].lastResult; } +#endif +#if !defined(OSFREE) uint32_t CMscdex::GetDeviceStatus(uint8_t subUnit) { if (subUnit>=numDrives) return false; bool media,changed,trayOpen; @@ -864,7 +951,9 @@ uint32_t CMscdex::GetDeviceStatus(uint8_t subUnit) { // Bit 13-31: Reserved (all 0) return status; } +#endif +#if !defined(OSFREE) bool CMscdex::GetMediaStatus(uint8_t subUnit, uint8_t& status) { if (subUnit>=numDrives) return false; /* bool media,changed,open,result; @@ -874,13 +963,17 @@ bool CMscdex::GetMediaStatus(uint8_t subUnit, uint8_t& status) { status = getSwapRequest() ? 0xFF : 0x01; return true; } +#endif +#if !defined(OSFREE) bool CMscdex::LoadUnloadMedia(uint8_t subUnit, bool unload) { if (subUnit>=numDrives) return false; dinfo[subUnit].lastResult = cdrom[subUnit]->LoadUnloadMedia(unload); return dinfo[subUnit].lastResult; } +#endif +#if !defined(OSFREE) bool CMscdex::SendDriverRequest(uint16_t drive, PhysPt data) { uint8_t subUnit = GetSubUnit(drive); if (subUnit>=numDrives) return false; @@ -891,7 +984,9 @@ bool CMscdex::SendDriverRequest(uint16_t drive, PhysPt data) { MSCDEX_Interrupt_Handler(); return true; } +#endif +#if !defined(OSFREE) uint16_t CMscdex::GetStatusWord(uint8_t subUnit,uint16_t status) { if (subUnit>=numDrives) return REQUEST_STATUS_ERROR | 0x02; // error : Drive not ready @@ -912,6 +1007,7 @@ uint16_t CMscdex::GetStatusWord(uint8_t subUnit,uint16_t status) { dinfo[subUnit].lastResult = true; return status; } +#endif void CMscdex::InitNewMedia(uint8_t subUnit) { if (subUnit=numDrives) return false; // adjust strange channel mapping @@ -929,12 +1026,15 @@ bool CMscdex::ChannelControl(uint8_t subUnit, TCtrl ctrl) { cdrom[subUnit]->ChannelControl(ctrl); return true; } +#endif +#if !defined(OSFREE) bool CMscdex::GetChannelControl(uint8_t subUnit, TCtrl& ctrl) { if (subUnit>=numDrives) return false; ctrl=dinfo[subUnit].audioCtrl; return true; } +#endif static CMscdex* mscdex = nullptr; static PhysPt curReqheaderPtr = 0; @@ -950,7 +1050,7 @@ bool GetMSCDEXDrive(unsigned char drive_letter,CDROM_Interface **_cdrom) { for (i=0;i < MSCDEX_MAX_DRIVES;i++) { if (mscdex->cdrom[i] == NULL) continue; if (mscdex->dinfo[i].drive == drive_letter) { - if (_cdrom) *_cdrom = mscdex->cdrom[i]; + if (_cdrom) (*_cdrom = mscdex->cdrom[i])->Addref(); return true; } } @@ -958,6 +1058,7 @@ bool GetMSCDEXDrive(unsigned char drive_letter,CDROM_Interface **_cdrom) { return false; } +#if !defined(OSFREE) // Reference: https://oldlinux.superglobalmegacorp.com/Linux.old/docs/interrupts/inter61/INTERRUP.G static uint16_t MSCDEX_IOCTL_Input(PhysPt buffer, uint8_t drive_unit) { uint8_t ioctl_fct = mem_readb(buffer); @@ -1110,7 +1211,9 @@ static uint16_t MSCDEX_IOCTL_Input(PhysPt buffer, uint8_t drive_unit) { } return 0x00; // Success } +#endif +#if !defined(OSFREE) // Reference: https://oldlinux.superglobalmegacorp.com/Linux.old/docs/interrupts/inter61/INTERRUP.G static uint16_t MSCDEX_IOCTL_Output(PhysPt buffer, uint8_t drive_unit) { uint8_t ioctl_fct = mem_readb(buffer); @@ -1146,13 +1249,17 @@ static uint16_t MSCDEX_IOCTL_Output(PhysPt buffer, uint8_t drive_unit) { } return 0x00; // Success } +#endif +#if !defined(OSFREE) static Bitu MSCDEX_Strategy_Handler(void) { curReqheaderPtr = PhysMake(SegValue(es),reg_bx); // MSCDEX_LOG("MSCDEX: Device Strategy Routine called, request header at %x",curReqheaderPtr); return CBRET_NONE; } +#endif +#if !defined(OSFREE) static Bitu MSCDEX_Interrupt_Handler(void) { if (curReqheaderPtr==0) { MSCDEX_LOG_ERROR("MSCDEX: invalid call to interrupt handler"); @@ -1304,7 +1411,9 @@ static Bitu MSCDEX_Interrupt_Handler(void) { MSCDEX_LOG("MSCDEX: Status : %04X",mem_readw(curReqheaderPtr+3)); return CBRET_NONE; } +#endif +#if !defined(OSFREE) static bool MSCDEX_Handler(void) { if(reg_ah == 0x11) { if(reg_al == 0x00) { @@ -1423,7 +1532,9 @@ static bool MSCDEX_Handler(void) { } return true; } +#endif +#if !defined(OSFREE) static bool MSCDEX_ValidDevName(const char *s) { if (*s == 0) return false; if (strlen(s) > 8) return false; @@ -1439,7 +1550,9 @@ static bool MSCDEX_ValidDevName(const char *s) { return true; } +#endif +#if !defined(OSFREE) class device_MSCDEX : public DOS_Device { public: device_MSCDEX(const char *devname) { SetName(MSCDEX_ValidDevName(devname) ? devname : "MSCD001"); } @@ -1459,7 +1572,9 @@ class device_MSCDEX : public DOS_Device { // private: // uint8_t cache; }; +#endif +#if !defined(OSFREE) bool device_MSCDEX::ReadFromControlChannel(PhysPt bufptr,uint16_t size,uint16_t * retcode) { if (MSCDEX_IOCTL_Input(bufptr,0)==0) { *retcode=size; @@ -1467,7 +1582,9 @@ bool device_MSCDEX::ReadFromControlChannel(PhysPt bufptr,uint16_t size,uint16_t } return false; } +#endif +#if !defined(OSFREE) bool device_MSCDEX::WriteToControlChannel(PhysPt bufptr,uint16_t size,uint16_t * retcode) { if (MSCDEX_IOCTL_Output(bufptr,0)==0) { *retcode=size; @@ -1475,6 +1592,7 @@ bool device_MSCDEX::WriteToControlChannel(PhysPt bufptr,uint16_t size,uint16_t * } return false; } +#endif int MSCDEX_AddDrive(char driveLetter, const char* physicalPath, uint8_t& subUnit) { @@ -1488,8 +1606,15 @@ int MSCDEX_RemoveDrive(char driveLetter) return mscdex->RemoveDrive(driveLetter-'A'); } +void MSCDEX_Startup(Section* sec); bool MSCDEX_HasDrive(char driveLetter) { + // HACK: During CONFIG.SYS stage, mscdex == NULL. + // If we want people to IMGMOUNT their CD-ROM drives during CONFIG.SYS + // without causing a segfault, this is necessary! + if (mscdex == NULL && first_shell && first_shell->config_shell) + MSCDEX_Startup(NULL); + return mscdex->HasDrive(driveLetter-'A'); } @@ -1538,8 +1663,16 @@ void MSCDEX_SetCDInterface(int intNr, int numCD) { forceCD = numCD; } +void MSCDEX_Reset(Section* /*sec*/) { + if (mscdex != NULL) { + delete mscdex; + mscdex = NULL; + } + + curReqheaderPtr = 0; +} + void MSCDEX_ShutDown(Section* /*sec*/) { - if ((bootguest||(use_quick_reboot&&!bootvm))&&bootdrive>=0) return; if (mscdex != NULL) { delete mscdex; mscdex = NULL; @@ -1548,16 +1681,21 @@ void MSCDEX_ShutDown(Section* /*sec*/) { curReqheaderPtr = 0; } -/* HACK: The IDE emulation is messily tied into calling MSCDEX.EXE! - * We cannot shut down the mscdex object when booting into a guest OS! - * Need to fix this, this is backwards! */ void MSCDEX_DOS_ShutDown(Section* /*sec*/) { +#if 0/*Sadly, CD-ROM emulation still requires MSCDEX*/ + if (mscdex != NULL) { + delete mscdex; + mscdex = NULL; + } +#endif + curReqheaderPtr = 0; } void MSCDEX_Startup(Section* sec) { - (void)sec;//UNUSED + (void)sec;//UNUSED if (mscdex == NULL) { +#if !defined(OSFREE) LOG(LOG_MISC,LOG_DEBUG)("Allocating MSCDEX.EXE emulation"); const Section_prop * dos_section=static_cast(control->GetSection("dos")); @@ -1573,6 +1711,10 @@ void MSCDEX_Startup(Section* sec) { /* Create MSCDEX */ LOG(LOG_MISC,LOG_DEBUG)("MSCDEX.EXE device name is '%s'",newdev->name); mscdex = new CMscdex(newdev->name); +#else + /* OSFREE: You don't get to control this! */ + mscdex = new CMscdex("CD001"); +#endif } } @@ -1582,7 +1724,7 @@ void MSCDEX_Init() { AddExitFunction(AddExitFunctionFuncPair(MSCDEX_ShutDown)); /* in any event that the DOS kernel is shutdown or abruptly wiped from memory */ - AddVMEventFunction(VM_EVENT_RESET,AddVMEventFunctionFuncPair(MSCDEX_ShutDown)); + AddVMEventFunction(VM_EVENT_RESET,AddVMEventFunctionFuncPair(MSCDEX_Reset)); AddVMEventFunction(VM_EVENT_DOS_EXIT_BEGIN,AddVMEventFunctionFuncPair(MSCDEX_DOS_ShutDown)); } @@ -1590,14 +1732,18 @@ void CMscdex::SaveState( std::ostream& stream ) { // - pure data WRITE_POD( &defaultBufSeg, defaultBufSeg ); +#if !defined(OSFREE) WRITE_POD( &rootDriverHeaderSeg, rootDriverHeaderSeg ); +#endif } void CMscdex::LoadState( std::istream& stream ) { // - pure data READ_POD( &defaultBufSeg, defaultBufSeg ); +#if !defined(OSFREE) READ_POD( &rootDriverHeaderSeg, rootDriverHeaderSeg ); +#endif } void POD_Save_DOS_Mscdex( std::ostream& stream ) @@ -1609,8 +1755,10 @@ void POD_Save_DOS_Mscdex( std::ostream& stream ) TMSF pos, start, end; bool playing, pause; +#if !defined(OSFREE) mscdex->GetAudioStatus(drive_unit, playing, pause, start, end); mscdex->GetCurrentPos(drive_unit,pos); +#endif WRITE_POD( &playing, playing ); @@ -1630,13 +1778,15 @@ void POD_Load_DOS_Mscdex( std::istream& stream ) if (!dos_kernel_disabled) { uint16_t dnum; READ_POD( &dnum, dnum); - if (mscdex->GetNumDrives()>dnum) { - mscdex->numDrives=dnum; - for (uint16_t i=dnum; iGetNumDrives(); i++) { - delete mscdex->cdrom[i]; - mscdex->cdrom[i] = nullptr; - } - } + if (mscdex->GetNumDrives()>dnum) { + mscdex->numDrives=dnum; + for (uint16_t i=dnum; iGetNumDrives(); i++) { + if (mscdex->cdrom[i]) { + mscdex->cdrom[i]->Release(); + mscdex->cdrom[i] = nullptr; + } + } + } for (uint8_t drive_unit=0; drive_unitStopAudio(drive_unit); +#endif +#if !defined(OSFREE) if( playing ) mscdex->PlayAudioMSF(drive_unit, msf_time, play_len); if( pause ) mscdex->PlayAudioMSF(drive_unit, msf_time, 0); +#endif } mscdex->LoadState(stream); diff --git a/src/dos/dos_network.h b/src/dos/dos_network.h index 6e1079779f9..bd760ec4a96 100644 --- a/src/dos/dos_network.h +++ b/src/dos/dos_network.h @@ -12,6 +12,8 @@ August 8 2005 cyberwalker */ +#if !defined(OSFREE) + #if defined(WIN32) && !defined(HX_DOS) #include @@ -131,3 +133,5 @@ inline uint16_t Network_ToDosError(DWORD dwLastError) #endif //WIN32 +#endif //OSFREE + diff --git a/src/dos/dos_network2.h b/src/dos/dos_network2.h index 7b4f88193a8..e07598ae27b 100644 --- a/src/dos/dos_network2.h +++ b/src/dos/dos_network2.h @@ -11,6 +11,7 @@ August 8 2005 cyberwalker Make all functions to avoid modifying makefile. */ +#if !defined(OSFREE) #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) @@ -516,3 +517,6 @@ extern "C" int _nhandle; }//bool Network_WriteFile(uint16_t entry,uint8_t * data,uint16_t * amount) #endif // defined(WIN32) && !defined(__MINGW32__) + +#endif //OSFREE + diff --git a/src/dos/dos_programs.cpp b/src/dos/dos_programs.cpp index 288d28b8167..e9d8320d786 100644 --- a/src/dos/dos_programs.cpp +++ b/src/dos/dos_programs.cpp @@ -22,3825 +22,4027 @@ * SERIAL command Copyright sduensin and Wengier */ - #include "dosbox.h" - #include - #include - #include - #include - #include - #include - #include - #include - #include - - #include "menudef.h" - #include "programs.h" - #include "support.h" - #include "drives.h" - #include "cross.h" - #include "regs.h" - #include "ide.h" - #include "cpu.h" - #include "callback.h" - #include "cdrom.h" - #include "builtin.h" - #include "bios_disk.h" - #include "dos_system.h" - #include "dos_inc.h" - #include "bios.h" - #include "bitop.h" - #include "inout.h" - #include "dma.h" - #include "bios_disk.h" - #include "qcow2_disk.h" - #include "shell.h" - #include "setup.h" - #include "control.h" - #include - #include "menu.h" - #include "render.h" - #include "mouse.h" - #include "eltorito.h" - #include "../ints/int10.h" - #include "../output/output_opengl.h" - #include "paging.h" - #if !defined(HX_DOS) - #include "../libs/tinyfiledialogs/tinyfiledialogs.c" - #endif - #if defined(WIN32) - #ifndef C_ICONV - # define C_ICONV - # include "../misc/winiconv.c" - #endif - typedef wchar_t host_cnv_char_t; - host_cnv_char_t *CodePageGuestToHost(const char *s); - #if !defined(S_ISREG) - # define S_ISREG(x) ((x & S_IFREG) == S_IFREG) - #endif - #include - #else - #include - #endif - #ifdef C_ICONV - #include "iconvpp.hpp" - typedef char16_t test_char_t; - typedef std::basic_string test_string; - typedef std::basic_string test_char; - #endif - int freesizecap = 1; - int result_errorcode = 0; - char lastmount = 0; - bool Mouse_Drv=true; - bool Mouse_Vertical = false; - bool force_nocachedir = false; - bool lockmount = true; - bool wpcolon = true; - bool convertimg = true; - bool startcmd = false; - bool startwait = true; - bool startquiet = false; - bool starttranspath = false; - bool mountwarning = true; - bool qmount = false; - bool nowarn = false; - bool CodePageHostToGuestUTF8(char *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*/), CodePageHostToGuestUTF16(char *d/*CROSS_LEN*/,const uint16_t *s/*CROSS_LEN*/); - inline bool CodePageHostToGuestUTF16(char *d/*CROSS_LEN*/,const char16_t *s/*CROSS_LEN*/) { - return CodePageHostToGuestUTF16(d, reinterpret_cast(s)); - } - extern bool systemmessagebox(char const * aTitle, char const * aMessage, char const * aDialogType, char const * aIconType, int aDefaultButton); - extern bool addovl, addipx, addne2k, prepared, inshell, usecon, uao, loadlang, morelen, mountfro[26], mountiro[26], resetcolor, staycolors, printfont, notrycp, internal_program; - extern bool clear_screen(), OpenGL_using(void), DOS_SetAnsiAttr(uint8_t attr), isDBCSCP(); - extern int lastcp, lastmsgcp, tryconvertcp, FileDirExistCP(const char *name), FileDirExistUTF8(std::string &localname, const char *name); - extern uint8_t DOS_GetAnsiAttr(void); - extern int toSetCodePage(DOS_Shell *shell, int newCP, int opt); - void MSG_Init(), JFONT_Init(), InitFontHandle(), ShutFontHandle(), DOSBox_SetSysMenu(), Load_Language(std::string name); - void DOS_EnableDriveMenu(char drv), GFX_SetTitle(int32_t cycles, int frameskip, Bits timing, bool paused), UpdateSDLDrawTexture(); - void runBoot(const char *str), runMount(const char *str), runImgmount(const char *str), runRescan(const char *str), show_prompt(), ttf_reset(void); - void getdrivezpath(std::string &path, std::string const& dirname), drivezRegister(std::string const& path, std::string const& dir, bool usecp), UpdateDefaultPrinterFont(void); - std::string GetDOSBoxXPath(bool withexe=false); - FILE *testLoadLangFile(const char *fname); - bool CheckDBCSCP(int32_t codepage); - - #define MAXU32 0xffffffff - // #include "zip.h" - // #include "unzip.h" - // #include "ioapi.h" - // #include "zipcppstdbuf.h" - - #if defined(OS2) - #define INCL DOSFILEMGR - #define INCL_DOSERRORS - #include "os2.h" - #endif - - #if defined(WIN32) - #ifndef S_ISDIR - #define S_ISDIR(m) (((m)&S_IFMT)==S_IFDIR) - #endif - #endif - - #if defined(RISCOS) - #include - #include - #endif - - #if C_DEBUG - Bitu DEBUG_EnableDebugger(void); - #endif - - /* Microsoft likes to make POSIX library functions less convenient and your code - * less portable by nagging you to add a leading underscore to those functions. */ - #if !defined(_MSC_VER) - #define _access access - #define _strdup strdup - #endif - - class MOUSE : public Program { - public: - void Run(void) override; - }; - - void MOUSE::Run(void) { - if (cmd->FindExist("/?",false) || cmd->FindExist("/h",false)) { - WriteOut(MSG_Get("PROGRAM_MOUSE_HELP")); - return; - } - if (!Mouse_Drv) { - if (cmd->FindExist("/u",false)) - WriteOut(MSG_Get("PROGRAM_MOUSE_NOINSTALLED")); - else { - Mouse_Drv = true; - mainMenu.get_item("dos_mouse_enable_int33").check(Mouse_Drv).refresh_item(mainMenu); - WriteOut(MSG_Get("PROGRAM_MOUSE_INSTALL")); - if (cmd->FindExist("/v",false)) { - Mouse_Vertical = true; - WriteOut(MSG_Get("PROGRAM_MOUSE_VERTICAL")); - } else { - Mouse_Vertical = false; - } - mainMenu.get_item("dos_mouse_y_axis_reverse").check(Mouse_Vertical).refresh_item(mainMenu); - } - } - else { - if (cmd->FindExist("/u",false)) { - Mouse_Drv = false; - mainMenu.get_item("dos_mouse_enable_int33").check(Mouse_Drv).refresh_item(mainMenu); - WriteOut(MSG_Get("PROGRAM_MOUSE_UNINSTALL")); - } else - if (cmd->FindExist("/v",false)) { - if(!Mouse_Vertical) { - Mouse_Vertical = true; - WriteOut(MSG_Get("PROGRAM_MOUSE_VERTICAL")); - } else { - Mouse_Vertical = false; - WriteOut(MSG_Get("PROGRAM_MOUSE_VERTICAL_BACK")); - } - mainMenu.get_item("dos_mouse_y_axis_reverse").check(Mouse_Vertical).refresh_item(mainMenu); - } else - WriteOut(MSG_Get("PROGRAM_MOUSE_ERROR")); - } - } - - static void MOUSE_ProgramStart(Program * * make) { - *make=new MOUSE; - } - - void DetachFromBios(imageDisk* image) { - if (image) { - for (int index = 0; index < MAX_DISK_IMAGES; index++) { - if (imageDiskList[index] == image) { - if (index > 1) IDE_Hard_Disk_Detach(index); - imageDiskList[index]->Release(); - imageDiskChange[index] = true; - imageDiskList[index] = NULL; - } - } - } - } - - bool SwitchLanguage(int oldcp, int newcp, bool confirm) { - auto iterold = langcp_map.find(lastmsgcp), iternew = langcp_map.find(newcp); - std::string langold = iterold != langcp_map.end() ? iterold->second : "", langnew = iternew != langcp_map.end() ? iternew->second : ""; - if (loadlang && langnew.size() && strcasecmp(langold.c_str(), langnew.c_str())) { - FILE *file = testLoadLangFile(langnew.c_str()); - if (file) { - fclose(file); - std::string msg = "You have changed the active code page to " + std::to_string(newcp) + ". Do you want to load language file " + langnew + " for this code page?"; - if (!confirm || (CheckDBCSCP(oldcp) && !CheckDBCSCP(newcp)) || systemmessagebox("DOSBox-X language file", msg.c_str(), "yesno","question", 2)) { - SetVal("dosbox", "language", langnew); - Load_Language(langnew); - lastmsgcp = newcp; - return true; // Will load language file for the active codepage - } - } - } - return false; - } - - extern std::string hidefiles, dosbox_title; - extern int swapInDisksSpecificDrive; - extern bool dos_kernel_disabled, clearline; - void MSCDEX_SetCDInterface(int intNr, int forceCD); - bool FDC_UnassignINT13Disk(unsigned char drv); - bool bootguest=false, use_quick_reboot=false; - int bootdrive=-1; - uint8_t ZDRIVE_NUM = 25; - std::string msgget; - static const char* UnmountHelper(char umount) { - int i_drive; - if (umount < '0' || umount > 3+'0') - i_drive = toupper(umount) - 'A'; - else - i_drive = umount - '0'; - - if (i_drive >= DOS_DRIVES || i_drive < 0) - return MSG_Get("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED"); - - if (i_drive < MAX_DISK_IMAGES && Drives[i_drive] == NULL && imageDiskList[i_drive] == NULL) - return MSG_Get("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED"); - - if (i_drive >= MAX_DISK_IMAGES && Drives[i_drive] == NULL) - return MSG_Get("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED"); - - if (i_drive <= 1) - FDC_UnassignINT13Disk(i_drive); - - msgget=MSG_Get("PROGRAM_MOUNT_UMOUNT_SUCCESS"); - if (Drives[i_drive]) { - const bool partitionMount = Drives[i_drive]->partitionMount; - const fatDrive* drive = dynamic_cast(Drives[i_drive]); - imageDisk* image = drive ? drive->loadedDisk : NULL; - const isoDrive* cdrom = dynamic_cast(Drives[i_drive]); - switch (DriveManager::UnmountDrive(i_drive)) { - case 1: return MSG_Get("PROGRAM_MOUNT_UMOUNT_NO_VIRTUAL"); - case 2: return MSG_Get("MSCDEX_ERROR_MULTIPLE_CDROMS"); - } - if (image && !partitionMount) DetachFromBios(image); - if (cdrom) IDE_CDROM_Detach(i_drive); - Drives[i_drive] = nullptr; - DOS_EnableDriveMenu(i_drive+'A'); - mem_writeb(Real2Phys(dos.tables.mediaid)+(unsigned int)i_drive*dos.tables.dpb_size,0); - if (i_drive == DOS_GetDefaultDrive()) - DOS_SetDrive(ZDRIVE_NUM); - if (cdrom) - for (int drv=0; drv<2; drv++) - if (Drives[drv]) { - fatDrive *fdp = dynamic_cast(Drives[drv]); - if (fdp&&fdp->opts.mounttype==1&&toupper(umount)==fdp->el.CDROM_drive) { - msgget+=UnmountHelper('A'+drv); - size_t found=msgget.rfind("%c"); - if (found!=std::string::npos) - msgget.replace(found, 2, std::string(1, 'A'+drv)); - } - } - } - - if (i_drive < MAX_DISK_IMAGES && imageDiskList[i_drive]) { - imageDiskList[i_drive]->Release(); - imageDiskList[i_drive] = NULL; - } - if (swapInDisksSpecificDrive == i_drive) { - for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { - if (diskSwap[si] != NULL) { - diskSwap[si]->Release(); - diskSwap[si] = NULL; - } - } - swapInDisksSpecificDrive = -1; - } - - return msgget.c_str(); - } - - void MountHelper(char drive, const char drive2[DOS_PATHLENGTH], std::string const& drive_type) { - std::vector options; - DOS_Drive * newdrive; - std::string temp_line; - std::string str_size; - uint16_t sizes[4]; - uint8_t mediaid=0; - - if(drive_type=="CDROM") { - mediaid=0xF8; /* Hard Disk */ - str_size="2048,1,65535,0"; - } else { - if(drive_type=="FLOPPY") { - mediaid=0xF0; /* Floppy 1.44 media */ - str_size="512,1,2880,2880"; /* All space free */ - } else if(drive_type=="LOCAL") { - mediaid=0xF8; - str_size="512,32,0,0"; - } - } - - char number[20]; const char * scan=str_size.c_str(); - Bitu index=0; Bitu count=0; - while (*scan) { - if (*scan==',') { - number[index]=0;sizes[count++]=atoi(number); - index=0; - } else number[index++]=*scan; - scan++; - } - number[index]=0; sizes[count++]=atoi(number); - - temp_line = drive2; - if(temp_line.size() > 3 && temp_line[temp_line.size()-1]=='\\') temp_line.erase(temp_line.size()-1,1); - if (temp_line[temp_line.size()-1]!=CROSS_FILESPLIT) temp_line+=CROSS_FILESPLIT; - uint8_t bit8size=(uint8_t) sizes[1]; - - if(drive_type=="CDROM") { - int num = -1; - int error; - - int id, major, minor; - DOSBox_CheckOS(id, major, minor); - if ((id==VER_PLATFORM_WIN32_NT) && (major>5)) { - // Vista/above - MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DX, num); - } else { - MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); - } - newdrive = new cdromDrive(drive,temp_line.c_str(),sizes[0],bit8size,sizes[2],0,mediaid,error,options); - std::string errmsg; - switch (error) { - case 0 : errmsg=MSG_Get("MSCDEX_SUCCESS"); break; - case 1 : errmsg=MSG_Get("MSCDEX_ERROR_MULTIPLE_CDROMS"); break; - case 2 : errmsg=MSG_Get("MSCDEX_ERROR_NOT_SUPPORTED"); break; - case 3 : errmsg=MSG_Get("MSCDEX_ERROR_PATH"); break; - case 4 : errmsg=MSG_Get("MSCDEX_TOO_MANY_DRIVES"); break; - case 5 : errmsg=MSG_Get("MSCDEX_LIMITED_SUPPORT"); break; - default : errmsg=MSG_Get("MSCDEX_UNKNOWN_ERROR"); break; - } - if (error) { - systemmessagebox(error==5?"Warning":"Error",errmsg.c_str(),"ok","error", 1); - if (error!=5) { - delete newdrive; - return; - } - } - } else { - newdrive=new localDrive(temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,options); - newdrive->readonly = mountfro[drive-'A']; - } - - if (!newdrive) E_Exit("DOS:Can't create drive"); - Drives[drive-'A']=newdrive; - DOS_EnableDriveMenu(drive); - mem_writeb(Real2Phys(dos.tables.mediaid)+(drive-'A')*dos.tables.dpb_size,mediaid); - if(drive_type=="CDROM") - LOG_MSG("GUI: Drive %c is mounted as CD-ROM",drive); - else - LOG_MSG("GUI: Drive %c is mounted as local directory",drive); - if(drive == drive2[0] && strlen(drive2) == 3) { - // automatic mount - } else { - if(drive_type=="CDROM") return; - std::string label; - label = drive; - if(drive_type=="LOCAL") - label += "_DRIVE"; - else - label += "_FLOPPY"; - newdrive->SetLabel(label.c_str(),false,true); - } - } - - #if defined(WIN32) - void MenuMountDrive(char drive, const char drive2[DOS_PATHLENGTH]) { - std::vector options; - std::string str(1, drive); - std::string drive_warn; - if (Drives[drive-'A']) { - drive_warn="Drive "+str+": is already mounted. Unmount it first, and then try again."; - systemmessagebox("Error",drive_warn.c_str(),"ok","error", 1); - return; - } - if(control->SecureMode()) { - systemmessagebox("Error",MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); - return; - } - DOS_Drive * newdrive; - std::string temp_line; - std::string str_size; - uint16_t sizes[4]; - uint8_t mediaid; - drive_warn="Do you really want to give DOSBox-X access to"; - int type=GetDriveType(drive2); - if(type==DRIVE_NO_ROOT_DIR) { - systemmessagebox("Error",("Drive "+str+": does not exist in the system.").c_str(),"ok","error", 1); - return; - } else if(type==DRIVE_CDROM) - drive_warn += " your real CD-ROM drive "; - else if(type==DRIVE_REMOVABLE) - drive_warn += drive=='A'||drive=='B'?" your real floppy drive ":" your real removable drive "; - else if(type==DRIVE_REMOTE) - drive_warn += " your real network drive "; - else - drive_warn += " your real hard drive "; - - if (mountwarning && !systemmessagebox("Warning",(drive_warn+str+"?").c_str(),"yesno","warning",1)) return; - - if(type==DRIVE_CDROM) { - mediaid=0xF8; /* Hard Disk */ - str_size="2048,1,65535,0"; - } else if(type==DRIVE_REMOVABLE && (drive=='A'||drive=='B')) { - mediaid=0xF0; /* Floppy 1.44 media */ - str_size="512,1,2880,2880"; /* All space free */ - } else { - mediaid=0xF8; - str_size="512,32,0,0"; - } - - char number[20]; const char * scan=str_size.c_str(); - Bitu index=0; Bitu count=0; - while (*scan) { - if (*scan==',') { - number[index]=0;sizes[count++]=atoi(number); - index=0; - } else number[index++]=*scan; - scan++; - } - number[index]=0; sizes[count++]=atoi(number); - uint8_t bit8size=(uint8_t) sizes[1]; - - temp_line = drive2; - int error = 0, num = -1; - if(type==DRIVE_CDROM) { - int id, major, minor; - DOSBox_CheckOS(id, major, minor); - if ((id==VER_PLATFORM_WIN32_NT) && (major>5)) { - // Vista/above - MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DX, num); - } else { - MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); - } - newdrive = new cdromDrive(drive,temp_line.c_str(),sizes[0],bit8size,sizes[2],0,mediaid,error,options); - std::string errmsg; - switch (error) { - case 0 : errmsg=MSG_Get("MSCDEX_SUCCESS"); break; - case 1 : errmsg=MSG_Get("MSCDEX_ERROR_MULTIPLE_CDROMS"); break; - case 2 : errmsg=MSG_Get("MSCDEX_ERROR_NOT_SUPPORTED"); break; - case 3 : errmsg=MSG_Get("MSCDEX_ERROR_PATH"); break; - case 4 : errmsg=MSG_Get("MSCDEX_TOO_MANY_DRIVES"); break; - case 5 : errmsg=MSG_Get("MSCDEX_LIMITED_SUPPORT"); break; - default : errmsg=MSG_Get("MSCDEX_UNKNOWN_ERROR"); break; - } - if (error) { - systemmessagebox(error==5?"Warning":"Error",errmsg.c_str(),"ok",error==5?"warning":"error", 1); - if (error!=5) { - delete newdrive; - return; - } - } - } else { - newdrive=new localDrive(temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,options); - newdrive->readonly = mountfro[drive-'A']; - } - - if (!newdrive) E_Exit("DOS:Can't create drive"); - if(error && (type==DRIVE_CDROM)) return; - Drives[drive-'A']=newdrive; - DOS_EnableDriveMenu(drive); - mem_writeb(Real2Phys(dos.tables.mediaid)+(drive-'A')*dos.tables.dpb_size,mediaid); - if(type == DRIVE_CDROM) LOG_MSG("GUI: Drive %c is mounted as CD-ROM %c:\\", drive, drive); - else LOG_MSG("GUI: Drive %c is mounted as local directory %c:\\", drive, drive); - if(drive == drive2[0] && strlen(drive2) == 3) { - // automatic mount - } else { - if(type == DRIVE_CDROM) return; - std::string label; - label = drive; - if(type==DRIVE_REMOVABLE && (drive=='A'||drive=='B')) - label += "_FLOPPY"; - else - label += "_DRIVE"; - newdrive->SetLabel(label.c_str(),false,true); - } - } - #endif - - std::string newstr=""; - std::string GetNewStr(const char *str) { - newstr = str?std::string(str):""; - #if defined(WIN32) - int flags = 0; - #ifdef WC_NO_BEST_FIT_CHARS - flags |= WC_NO_BEST_FIT_CHARS; - #endif - if (str&&dos.loaded_codepage!=437) { - char *temp = NULL; - wchar_t* wstr = NULL; - int reqsize = MultiByteToWideChar(CP_UTF8, 0, str, (int)(strlen(str)+1), NULL, 0); - if (reqsize>0 && (wstr = new wchar_t[reqsize]) && MultiByteToWideChar(CP_UTF8, 0, str, (int)(strlen(str)+1), wstr, reqsize)==reqsize) { - reqsize = WideCharToMultiByte(dos.loaded_codepage==808?866:(dos.loaded_codepage==859?858:(dos.loaded_codepage==872?855:(dos.loaded_codepage==951?950:dos.loaded_codepage))), flags, wstr, -1, NULL, 0, "\x07", NULL); - if (reqsize > 1 && (temp = new char[reqsize]) && WideCharToMultiByte(dos.loaded_codepage==808?866:(dos.loaded_codepage==859?858:(dos.loaded_codepage==872?855:(dos.loaded_codepage==951?950:dos.loaded_codepage))), flags, wstr, -1, (LPSTR)temp, reqsize, "\x07", NULL) == reqsize) - newstr = std::string(temp); - } - } - #endif - return newstr; - } - - void MenuBrowseCDImage(char drive, int num) { - if(control->SecureMode()) { - systemmessagebox("Error",MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); - return; - } - - if (Drives[drive-'A']&&!strncmp(Drives[drive-'A']->GetInfo(), "isoDrive ", 9)) { - #if !defined(HX_DOS) - std::string drive_warn = "CD drive "+(dos_kernel_disabled?std::to_string(num):std::string(1, drive)+":")+" is currently mounted with the image:\n\n"+std::string(Drives[drive-'A']->GetInfo()+9)+"\n\nDo you want to change the CD image now?"; - if (!systemmessagebox("Change CD image",drive_warn.c_str(),"yesno","question", 1)) return; - #endif - } else - return; - #if !defined(HX_DOS) - char CurrentDir[512] = "."; - std::vector options; - char * Temp_CurrentDir = CurrentDir; - // getcwd(Temp_CurrentDir, 512); - char const * lTheOpenFileName; - std::string files="", fname=""; - const char *lFilterPatterns[] = {"*.cdrom", "*.iso","*.cue","*.bin","*.chd","*.mdf","*.gog","*.ins","*.inst","*.CDROM", "*.ISO","*.CUE","*.BIN","*.CHD","*.MDF","*.GOG","*.INS","*.INST" }; - const char *lFilterDescription = "CD image files (*.cdrom, *.iso, *.cue, *.bin, *.chd, *.mdf, *.gog, *.ins, *.inst)"; - lTheOpenFileName = tinyfd_openFileDialog("Select a CD image file","", sizeof(lFilterPatterns) / sizeof(lFilterPatterns[0]),lFilterPatterns,lFilterDescription,0); - bool isempty = std::string(Drives[drive - 'A']->GetInfo() + 9) == "empty"; - if (lTheOpenFileName) { - isoDrive *cdrom = dynamic_cast(Drives[drive-'A']); - DOS_Drive *newDrive = NULL; - int error = -1; - uint8_t mediaid = 0xF8; - if (cdrom && dos_kernel_disabled) { - cdrom->setFileName(lTheOpenFileName); - if(isempty) { - newDrive = new isoDrive(drive, lTheOpenFileName, mediaid, error, options); - if(error) { - delete newDrive; - systemmessagebox("Error", "Could not mount the selected CD image.", "ok", "error", 1); - chdir(Temp_CurrentDir); - return; - } - delete cdrom; - cdrom = dynamic_cast(newDrive); - Drives[drive - 'A'] = cdrom; - } - } else { - newDrive = new isoDrive(drive, lTheOpenFileName, mediaid, error, options); - if (error) { - delete newDrive; - systemmessagebox("Error","Could not mount the selected CD image.","ok","error", 1); - chdir( Temp_CurrentDir ); - return; - } - cdrom = dynamic_cast(newDrive); - Drives[drive - 'A'] = cdrom; - } - if ((!isempty || !dos_kernel_disabled) && cdrom) DriveManager::ChangeDisk(drive-'A', cdrom); - } - chdir( Temp_CurrentDir ); - #endif - } - - void MenuBrowseFDImage(char drive, int num, int type) { - if(control->SecureMode()) { - systemmessagebox("Error",MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); - return; - } - - if (type==-1 || (Drives[drive-'A'] && !strncmp(Drives[drive-'A']->GetInfo(), "fatDrive ", 9))) { - #if !defined(HX_DOS) - std::string image = type==1||(type==-1&&dynamic_cast(imageDiskList[drive-'A'])!=NULL)?"El Torito floppy image":(type==2||(type==-1&&dynamic_cast(imageDiskList[drive-'A'])!=NULL)?"RAM floppy image":(type==-1?imageDiskList[drive-'A']->diskname.c_str():Drives[drive-'A']->GetInfo()+9)); - std::string drive_warn = "Floppy drive "+(type==-1?std::string(1, drive-'A'+'0'):(dos_kernel_disabled?std::to_string(num):std::string(1, drive)+":"))+" is currently mounted with the image:\n\n"+image+"\n\nDo you want to change the floppy disk image now?"; - if (!systemmessagebox("Change floppy disk image",drive_warn.c_str(),"yesno","question", 1)) return; - #endif - } else - return; - #if !defined(HX_DOS) - char CurrentDir[512] = "."; - char * Temp_CurrentDir = CurrentDir; - // getcwd(Temp_CurrentDir, 512); - char const * lTheOpenFileName; - std::string files="", fname=""; - const char *lFilterPatterns[] = {"*.ima","*.img","*.xdf","*.fdi","*.hdm","*.nfd","*.d88","*.IMA","*.IMG","*.XDF","*.FDI","*.HDM","*.NFD","*.D88"}; - const char *lFilterDescription = "Floppy image files (*.ima, *.img, *.xdf, *.fdi, *.hdm, *.nfd, *.d88)"; - lTheOpenFileName = tinyfd_openFileDialog("Select a floppy image file","",sizeof(lFilterPatterns)/sizeof(lFilterPatterns[0]), lFilterPatterns, lFilterDescription, 0); - - if (lTheOpenFileName) { - //uint8_t mediaid = 0xF0; UNUSED - std::vector options; - if (mountiro[drive-'A']) options.emplace_back("readonly"); - fatDrive *newDrive = new fatDrive(lTheOpenFileName, 0, 0, 0, 0, options); - if (!newDrive->created_successfully) { - systemmessagebox("Error","Could not mount the selected floppy disk image.","ok","error", 1); - chdir( Temp_CurrentDir ); - return; - } - if (newDrive) { - if (type>-1) - DriveManager::ChangeDisk(drive-'A', newDrive); - else if (newDrive->loadedDisk) { - if (imageDiskList[drive-'A']) { - imageDiskList[drive-'A']->Release(); - imageDiskList[drive-'A'] = newDrive->loadedDisk; - //imageDiskList[drive-'A']->Addref(); - imageDiskChange[drive-'A'] = true; - } - if (swapInDisksSpecificDrive == drive-'A' && diskSwap[swapPosition]) { - diskSwap[swapPosition]->Release(); - diskSwap[swapPosition] = newDrive->loadedDisk; - diskSwap[swapPosition]->Addref(); - } - } - } - } - chdir( Temp_CurrentDir ); - #endif - } - - void MenuBrowseImageFile(char drive, bool arc, bool boot, bool multiple) { - std::string str(1, drive); - std::string drive_warn; - if (Drives[drive-'A']&&!boot) { - drive_warn="Drive "+str+": is already mounted. Unmount it first, and then try again."; - systemmessagebox("Error",drive_warn.c_str(),"ok","error", 1); - return; - } - if(control->SecureMode()) { - systemmessagebox("Error",MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); - return; - } - if (dos_kernel_disabled) - return; - #if !defined(HX_DOS) - char CurrentDir[512] = "."; - char * Temp_CurrentDir = CurrentDir; - // getcwd(Temp_CurrentDir, 512); - char const * lTheOpenFileName; - std::string files="", fname=""; - if (arc) { - const char *lFilterPatterns[] = {"*.zip","*.7z","*.ZIP","*.7Z"}; - const char *lFilterDescription = "Archive files (*.zip, *.7z)"; - lTheOpenFileName = tinyfd_openFileDialog(("Select an archive file for Drive "+str+":").c_str(),"", sizeof(lFilterPatterns) / sizeof(lFilterPatterns[0]),lFilterPatterns,lFilterDescription,0); - if (lTheOpenFileName) fname = GetNewStr(lTheOpenFileName); - } else { - const char *lFilterPatterns[] = {"*.ima","*.img","*.vhd","*.fdi","*.hdi","*.nfd","*.nhd","*.d88","*.hdm","*.xdf","*.cdrom", "*.iso","*.cue","*.bin","*.chd","*.mdf","*.gog","*.ins","*.ccd","*.inst","*.IMA","*.IMG","*.VHD","*.FDI","*.HDI","*.NFD","*.NHD","*.D88","*.HDM","*.XDF",".CDROM", "*.ISO","*.CUE","*.BIN","*.CHD","*.MDF","*.GOG","*.INS","*.CCD","*.INST"}; - const char *lFilterDescription = "Disk/CD image files"; - lTheOpenFileName = tinyfd_openFileDialog(((multiple?"Select image file(s) for Drive ":"Select an image file for Drive ")+str+":").c_str(),"", sizeof(lFilterPatterns) / sizeof(lFilterPatterns[0]),lFilterPatterns,lFilterDescription,multiple?1:0); - if (lTheOpenFileName) fname = "\"" + GetNewStr(lTheOpenFileName) + "\""; - if (multiple&&fname.size()) { - files = std::regex_replace(fname, std::regex("\\|"), "\" \""); - } - while (multiple&&lTheOpenFileName&&systemmessagebox("Mount image files","Do you want to mount more image file(s)?","yesno", "question", 1)) { - lTheOpenFileName = tinyfd_openFileDialog(("Select image file(s) for Drive "+str+":").c_str(),"", sizeof(lFilterPatterns) / sizeof(lFilterPatterns[0]),lFilterPatterns,lFilterDescription,multiple?1:0); - if (lTheOpenFileName) { - fname = "\"" + GetNewStr(lTheOpenFileName) + "\""; - files = files + " " + std::regex_replace(fname, std::regex("\\|"), "\" \""); - } - } - } - - if (fname.size()||files.size()) { - char type[15]; - if (!arc&&!files.size()) { - char ext[5] = ""; - if (fname.size()>4) - strcpy(ext, fname.substr(fname.size()-4).c_str()); - if(!strcasecmp(ext,".ima")) - strcpy(type,"-t floppy "); - else if((!strcasecmp(ext,".iso")) || (!strcasecmp(ext,".cue")) || (!strcasecmp(ext,".bin")) || (!strcasecmp(ext,".chd")) || (!strcasecmp(ext,".mdf")) || (!strcasecmp(ext,".gog")) || (!strcasecmp(ext,".ins")) || (!strcasecmp(ext, ".inst"))) - strcpy(type,"-t iso "); - else - strcpy(type,""); - } else - *type=0; - char mountstring[CROSS_LEN*4+20]; - if (files.size()>CROSS_LEN*4) { - systemmessagebox("Error","The path for the file(s) to mount is too long.","ok","error", 1); - return; - } - strcpy(mountstring,type); - char temp_str[3] = { 0,0,0 }; - temp_str[0]=drive; - temp_str[1]=' '; - strcat(mountstring,temp_str); - //if (!multiple) strcat(mountstring,"\""); - strcat(mountstring,files.size()?files.c_str():fname.c_str()); - //if(!multiple) strcat(mountstring, "\""); - if(mountiro[drive - 'A']) strcat(mountstring, " -ro"); - if(boot) { - strcat(mountstring, " -u"); - mountstring[0] = drive - 'A' + '0'; - runImgmount(mountstring); // mount by drive number - std::string bootstr = "-Q "; - bootstr += drive; - bootstr += ':'; - runBoot(bootstr.c_str()); - std::string drive_warn = "Drive " + std::string(1, drive) + ": failed to boot."; - systemmessagebox("Error", drive_warn.c_str(), "ok", "error", 1); - bootstr = "-u "; - bootstr += drive - 'A' + '0'; - runImgmount(bootstr.c_str()); // unmount if boot failed - return; - } - if(arc) { - strcat(mountstring," -q"); - runMount(mountstring); - } else { - qmount=true; - runImgmount(mountstring); - qmount=false; - } - chdir( Temp_CurrentDir ); - if (!Drives[drive - 'A']) { - drive_warn="Drive "+str+": failed to mount."; - systemmessagebox("Error",drive_warn.c_str(),"ok","error", 1); - return; - } else if (multiple) { - systemmessagebox("Information",("Mounted disk images to Drive "+std::string(1,drive)+(dos.loaded_codepage==437?":\n"+files:".")+(mountiro[drive-'A']?"\n(Read-only mode)":"")).c_str(),"ok","info", 1); - } else if (lTheOpenFileName) { - systemmessagebox("Information",(std::string(arc?"Mounted archive":"Mounted disk image")+" to Drive "+std::string(1,drive)+":\n"+std::string(lTheOpenFileName)+(arc||mountiro[drive-'A']?"\n(Read-only mode)":"")).c_str(),"ok","info", 1); - } - } - chdir( Temp_CurrentDir ); - #endif - } - - void MenuBrowseFolder(char drive, std::string const& drive_type) { - std::string str(1, drive); - if (Drives[drive-'A']) { - std::string drive_warn="Drive "+str+": is already mounted. Unmount it first, and then try again."; - systemmessagebox("Error",drive_warn.c_str(),"ok","error", 1); - return; - } - if(control->SecureMode()) { - systemmessagebox("Error",MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); - return; - } - #if !defined(HX_DOS) - std::string title = "Select a drive/directory to mount for Drive "+str+":"; - if(drive_type=="CDROM") - title += " CD-ROM\nMounting a directory as CD-ROM gives an limited support"; - else if(drive_type=="FLOPPY") - title += " as Floppy"; - else if(drive_type=="LOCAL") - title += " as Local"; - char const * lTheSelectFolderName = tinyfd_selectFolderDialog(title.c_str(), NULL); - if (lTheSelectFolderName) { - MountHelper(drive,GetNewStr(lTheSelectFolderName).c_str(),drive_type); - if (Drives[drive-'A']) systemmessagebox("Information",("Drive "+std::string(1,drive)+" is now mounted to:\n"+std::string(lTheSelectFolderName)).c_str(),"ok","info", 1); - } - #endif - } - - void MenuUnmountDrive(char drive) { - if (!Drives[drive-'A']) { - std::string drive_warn="Drive "+std::string(1, drive)+": is not yet mounted."; - systemmessagebox("Error",drive_warn.c_str(),"ok","error", 1); - return; - } - UnmountHelper(drive); - } - - void MenuBootDrive(char drive) { - if(control->SecureMode()) { - systemmessagebox("Error",MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); - return; - } - char str[] = "-Q A:"; - str[3]=drive; - runBoot(str); - std::string drive_warn="Drive "+std::string(1, drive)+": failed to boot."; - systemmessagebox("Error",drive_warn.c_str(),"ok","error", 1); - } - - void MenuBrowseProgramFile() { - if(control->SecureMode()) { - systemmessagebox("Error",MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); - return; - } - if (dos_kernel_disabled) - return; - std::string drive_warn; - DOS_MCB mcb(dos.psp()-1); - static char psp_name[9]; - mcb.GetFileName(psp_name); - if(strlen(psp_name)&&strcmp(psp_name, "COMMAND")) { - drive_warn=strcmp(psp_name, "4DOS")?"Another program is already running.":"Another shell is currently running."; - systemmessagebox("Error",drive_warn.c_str(),"ok","error", 1); - return; - } - - #if !defined(HX_DOS) - char drv=' '; - for (int i=2; i options; - void Move_Z(char new_z) { - char newz_drive = (char)toupper(new_z); - int i_newz = (int)newz_drive - (int)'A'; - if (i_newz >= 0 && i_newz < DOS_DRIVES) { - if(Drives[i_newz]) { - WriteOut("Drive %c is already in use\n", new_z); - return; - } - /* remap drives */ - Drives[i_newz] = Drives[ZDRIVE_NUM]; - Drives[ZDRIVE_NUM] = nullptr; - DOS_EnableDriveMenu(i_newz + 'A'); - DOS_EnableDriveMenu(ZDRIVE_NUM + 'A'); - if (!first_shell) return; //Should not be possible - /* Update environment */ - std::string line = ""; - char ppp[2] = { newz_drive,0 }; - std::string tempenv = ppp; tempenv += ":\\"; - std::string tempenvZ = std::string(1, 'A'+ZDRIVE_NUM); tempenvZ += ":\\"; - std::string tempenvz = std::string(1, 'a'+ZDRIVE_NUM); tempenvz += ":\\"; - if (first_shell->GetEnvStr("PATH", line)) { - std::string::size_type idx = line.find('='); - std::string value = line.substr(idx + 1, std::string::npos); - while ((idx = value.find(tempenvZ)) != std::string::npos || - (idx = value.find(tempenvz)) != std::string::npos) - value.replace(idx, 3, tempenv); - line = value; - } - if (!line.size()) line = tempenv; - first_shell->SetEnv("PATH", line.c_str()); - tempenv += "COMMAND.COM"; - first_shell->SetEnv("COMSPEC", tempenv.c_str()); - - /* Update batch file if running from Z: (very likely: autoexec) */ - if (first_shell->bf) { - std::string& name = first_shell->bf->filename; - if (name.length() > 2 && name[0] == 'A'+ZDRIVE_NUM && name[1] == ':') name[0] = newz_drive; - } - /* Change the active drive */ - if (DOS_GetDefaultDrive() == ZDRIVE_NUM) DOS_SetDrive(i_newz); - ZDRIVE_NUM = i_newz; - } - else - WriteOut("Drive %c is not a valid drive\n", new_z); - } - void ListMounts(bool quiet, bool local) { - char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH]; - uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; - /* Command uses dta so set it to our internal dta */ - RealPt save_dta = dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - - if (!quiet) { - WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_1")); - WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_FORMAT"),MSG_Get("DRIVE"),MSG_Get("TYPE"),MSG_Get("LABEL")); - } - int cols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); - if (!cols) cols=80; - if (!quiet) { - for(int p = 1;p < cols;p++) WriteOut("-"); - WriteOut("\n"); - } - bool none=true; - for (int d = 0;d < DOS_DRIVES;d++) { - if (!Drives[d]) continue; - if (local && strncasecmp("local ", Drives[d]->GetInfo(), 6)) continue; - if (quiet) { - WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_2"), 'A'+d, Drives[d]->GetInfo()+(local && !strncasecmp("local ", Drives[d]->GetInfo(), 6)?16:0)); - continue; - } - char root[7] = {(char)('A'+d),':','\\','*','.','*',0}; - bool ret = DOS_FindFirst(root,DOS_ATTR_VOLUME); - if (ret) { - dta.GetResult(name,lname,size,hsize,date,time,attr); - DOS_FindNext(); //Mark entry as invalid - } else name[0] = 0; - - /* Change 8.3 to 11.0 */ - const char* dot = strchr(name, '.'); - if(dot && (dot - name == 8) ) { - name[8] = name[9];name[9] = name[10];name[10] = name[11];name[11] = 0; - } - - root[1] = 0; //This way, the format string can be reused. - WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_FORMAT"),root, Drives[d]->GetInfo(),name); - none=false; - } - if (none&&!quiet) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NONE")); - dos.dta(save_dta); - } - - void Run(void) override { - DOS_Drive *newdrive = NULL; - std::string label; - std::string umount; - std::string newz; - bool quiet=false; - char drive; - - //Hack To allow long commandlines - ChangeToLongCmd(); - /* Parse the command line */ - /* if the command line is empty show current mounts */ - if (!cmd->GetCount()) { - ListMounts(false, false); - return; - } - - /* In secure mode don't allow people to change mount points. - * Neither mount nor unmount */ - if(control->SecureMode()) { - WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW")); - return; - } - if (cmd->FindExist("/examples")||cmd->FindExist("-examples")) { - resetcolor = true; - #if defined (WIN32) || defined(OS2) - WriteOut(MSG_Get("PROGRAM_MOUNT_EXAMPLE"),"d:\\dosprogs","d:\\dosprogs","\"d:\\dos games\"","\"d:\\dos games\"","d:\\dosprogs","d:\\dosprogs","d:\\dosprogs","d:\\dosprogs","d:\\dosprogs","d:\\dosprogs","d:\\overlaydir"); - #else - WriteOut(MSG_Get("PROGRAM_MOUNT_EXAMPLE"),"~/dosprogs","~/dosprogs","\"~/dos games\"","\"~/dos games\"","~/dosprogs","~/dosprogs","~/dosprogs","~/dosprogs","~/dosprogs","~/dosprogs","~/overlaydir"); - #endif - return; - } - - //look for -o options - bool local = false; - { - std::string s; - while (cmd->FindString("-o", s, true)) { - if (!strcasecmp(s.c_str(), "local")) local = true; - options.push_back(s); - } - if (local && !cmd->GetCount()) { - ListMounts(false, true); - return; - } - } - - if (cmd->FindExist("-q",true)) { - quiet = true; - if (!cmd->GetCount()) { - ListMounts(true, local); - return; - } - } - - bool path_relative_to_last_config = false; - if (cmd->FindExist("-pr",true)) path_relative_to_last_config = true; - - /* Check for unmounting */ - if (cmd->FindString("-u",umount,false)) { - const char *msg=UnmountHelper(umount[0]); - if (!quiet) WriteOut(msg, toupper(umount[0])); - return; - } - - /* Check for moving Z: */ - /* Only allowing moving it once. It is merely a convenience added for the wine team */ - if (cmd->FindString("-z", newz,false)) { - if (ZDRIVE_NUM != newz[0]-'A') Move_Z(newz[0]); - return; - } - /* Show list of cdroms */ - if (cmd->FindExist("-cd",false)) { - int num = SDL_CDNumDrives(); - if (!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_CDROMS_FOUND"),num); - for (int i=0; iFindExist("-nocachedir",true)) - nocachedir = true; - - if (cmd->FindExist("-nl",true)) - nextdrive = true; - - bool readonly = false; - if (cmd->FindExist("-ro",true)) - readonly = true; - if (cmd->FindExist("-rw",true)) - readonly = false; - - std::string type="dir"; - cmd->FindString("-t",type,true); - std::transform(type.begin(), type.end(), type.begin(), ::tolower); - bool iscdrom = (type =="cdrom"); //Used for mscdex bug cdrom label name emulation - bool exist = false, removed = false; - if (type=="floppy" || type=="dir" || type=="cdrom" || type =="overlay") { - uint16_t sizes[4] = { 0 }; - uint8_t mediaid; - std::string str_size = ""; - if (type=="floppy") { - str_size="512,1,2880,2880"; - mediaid=0xF0; /* Floppy 1.44 media */ - } else if (type=="dir" || type == "overlay") { - // 512*32*32765==~500MB total size - // 512*32*16000==~250MB total free size - str_size="512,32,0,0"; - mediaid=0xF8; /* Hard Disk */ - } else if (type=="cdrom") { - str_size="2048,1,65535,0"; - mediaid=0xF8; /* Hard Disk */ - } else { - if (!quiet) WriteOut(MSG_Get("PROGAM_MOUNT_ILL_TYPE"),type.c_str()); - return; - } - /* Parse the free space in mb's (kb's for floppies) */ - std::string mb_size; - if(cmd->FindString("-freesize",mb_size,true)) { - char teststr[1024]; - uint16_t freesize = static_cast(atoi(mb_size.c_str())); - if (type=="floppy") { - // freesize in kb - sprintf(teststr,"512,1,2880,%d",freesize*1024/(512*1)>2880?2880:freesize*1024/(512*1)); - } else { - //if (freesize>1919) freesize=1919; - uint16_t numc=type=="cdrom"?1:32; - uint32_t total_size_cyl=32765; - uint32_t tmp=(uint32_t)freesize*1024*1024/(type=="cdrom"?2048*1:512*32); - if(tmp > 65534) numc = type == "cdrom" ? (tmp + 65535) / 65536 : 64; - uint32_t free_size_cyl=(uint32_t)freesize*1024*1024/(numc*(type=="cdrom"?2048:512)); - if (free_size_cyl>65534) free_size_cyl=65534; - if (total_size_cyl65534) total_size_cyl=65534; - sprintf(teststr,type=="cdrom"?"2048,%u,%u,%u":"512,%u,%u,%u",numc,total_size_cyl,free_size_cyl); - } - str_size=teststr; - } - - cmd->FindString("-size",str_size,true); - char number[21] = { 0 }; const char* scan = str_size.c_str(); - Bitu index = 0; Bitu count = 0; - /* Parse the str_size string */ - while (*scan && index < 20 && count < 4) { - if (*scan==',') { - number[index] = 0; - sizes[count++] = atoi(number); - index = 0; - } else number[index++] = *scan; - scan++; - } - if (count < 4) { - number[index] = 0; //always goes correct as index is max 20 at this point. - sizes[count] = atoi(number); - } - - // get the drive letter - cmd->FindCommand(1,temp_line); - if ((temp_line.size() > 2) || ((temp_line.size()>1) && (temp_line[1]!=':'))) goto showusage; - int i_drive = toupper(temp_line[0]); - if (!isalpha(i_drive)) goto showusage; - if ((i_drive - 'A') >= DOS_DRIVES || (i_drive - 'A') < 0) goto showusage; - if (!cmd->FindCommand(2,temp_line)) { - if (Drives[i_drive - 'A']) { - const char *info = Drives[i_drive - 'A']->GetInfo(); - if (!quiet) - WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_2"), i_drive, info+(local&&!strncasecmp("local ", info, 6)?16:0)); - else if (local&&!strncasecmp("local ", info, 6)) - WriteOut("%s\n", info+16); - else if (!local) - WriteOut("%s\n", info); - } else if (!quiet) - WriteOut(MSG_Get("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED"), i_drive); - return; - } - if (!temp_line.size()) goto showusage; - if (cmd->FindExist("-u",true)) { - bool curdrv = toupper(i_drive)-'A' == DOS_GetDefaultDrive(); - const char *msg=UnmountHelper(i_drive); - if(!quiet) WriteOut(msg, toupper(i_drive)); - if(!cmd->FindCommand(2, temp_line) || !temp_line.size()) return; - if(curdrv && toupper(i_drive) - 'A' != DOS_GetDefaultDrive()) removed = true; - } - drive = static_cast(i_drive); - if (type == "overlay") { - //Ensure that the base drive exists: - if (!Drives[drive-'A']) { - if (!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_NO_BASE")); - return; - } - } else if (Drives[drive-'A']) { - bool found = false; - if (!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_ALREADY_MOUNTED"),drive,Drives[drive-'A']->GetInfo()); - if (nextdrive) - for (int i=drive-'A'+1; iconfigfiles.size() && !Cross::IsPathAbsolute(temp_line)) { - std::string lastconfigdir(control->configfiles[control->configfiles.size()-1]); - std::string::size_type pos = lastconfigdir.rfind(CROSS_FILESPLIT); - if(pos == std::string::npos) pos = 0; //No directory then erase string - lastconfigdir.erase(pos); - if (lastconfigdir.length()) temp_line = lastconfigdir + CROSS_FILESPLIT + temp_line; - } - bool is_physfs = temp_line.find(':',((temp_line[0]|0x20) >= 'a' && (temp_line[0]|0x20) <= 'z')?2:0) != std::string::npos; - struct stat test; - //Win32 : strip tailing backslashes - //os2: some special drive check - //rest: substitute ~ for home - bool failed = false; - - (void)failed;// MAY BE UNUSED - - #if defined (RISCOS) - // If the user provided a RISC OS style path, convert it to a Unix style path - // TODO: Disable UnixLib's automatic path conversion and use RISC OS style paths internally? - if (temp_line.find('$',0) != std::string::npos) { - char fname[PATH_MAX]; - is_physfs = false; - __unixify_std(temp_line.c_str(), fname, sizeof(fname), 0); - temp_line = fname; - } - #endif - - #if defined (WIN32) || defined(OS2) - // Windows: Workaround for LaunchBox - if (is_physfs && temp_line.size()>4 && temp_line[0]=='\'' && toupper(temp_line[1])>='A' && toupper(temp_line[1])<='Z' && temp_line[2]==':' && (temp_line[3]=='/' || temp_line[3]=='\\') && temp_line.back()=='\'') { - temp_line = temp_line.substr(1, temp_line.size()-2); - is_physfs = temp_line.find(':',((temp_line[0]|0x20) >= 'a' && (temp_line[0]|0x20) <= 'z')?2:0) != std::string::npos; - } else if (is_physfs && temp_line.size()>3 && temp_line[0]=='\'' && toupper(temp_line[1])>='A' && toupper(temp_line[1])<='Z' && temp_line[2]==':' && (temp_line[3]=='/' || temp_line[3]=='\\')) { - std::string line=trim((char *)cmd->GetRawCmdline().c_str()); - std::size_t space=line.find(' '); - if (space!=std::string::npos) { - line=trim((char *)line.substr(space).c_str()); - std::size_t found=line.back()=='\''?line.find_last_of('\''):line.rfind("' "); - if (found!=std::string::npos&&found>2) { - temp_line=line.substr(1, found-1); - is_physfs = temp_line.find(':',((temp_line[0]|0x20) >= 'a' && (temp_line[0]|0x20) <= 'z')?2:0) != std::string::npos; - } - } - } - #else - // Linux: Convert backslash to forward slash - if (!is_physfs && temp_line.size() > 0) { - for (size_t i=0;i < temp_line.size();i++) { - if (temp_line[i] == '\\') - temp_line[i] = '/'; - } - } - #endif - - bool useh = false; - #if defined (WIN32) - ht_stat_t htest; - #else - struct stat htest; - #endif - #if defined (WIN32) || defined(OS2) - /* Removing trailing backslash if not root dir so stat will succeed */ - if(temp_line.size() > 3 && temp_line[temp_line.size()-1]=='\\') temp_line.erase(temp_line.size()-1,1); - if(temp_line.size() == 2 && toupper(temp_line[0])>='A' && toupper(temp_line[0])<='Z' && temp_line[1]==':') temp_line.append("\\"); - if(temp_line.size() > 4 && temp_line[0] == '\\' && temp_line[1] == '\\' && temp_line[2] != '\\' && std::count(temp_line.begin() + 3, temp_line.end(), '\\') == 1) temp_line.append("\\"); - notrycp = true; - const host_cnv_char_t* host_name = CodePageGuestToHost(temp_line.c_str()); - notrycp = false; - if (!is_physfs && stat(temp_line.c_str(),&test)) { - #endif - #if defined(WIN32) - if (host_name == NULL || ht_stat(host_name, &htest)) failed = true; - useh = true; - } else if (!is_physfs && tryconvertcp && _waccess(host_name,0) && dos.loaded_codepage == 437) { - uint16_t cp = GetACP(), cpbak = dos.loaded_codepage; - #if defined(USE_TTF) - if ((ttf.inUse&&(cp<1250||cp>1259)&&cp!=437&&isSupportedCP(cp))||(!ttf.inUse&&(cp==932||cp==936||cp==949||cp==950||cp==951))) - #else - if (cp==932||cp==936||cp==949||cp==950||cp==951) - #endif - { - cpbak = dos.loaded_codepage; - dos.loaded_codepage = cp; - host_name = CodePageGuestToHost(temp_line.c_str()); - char str[150]; - - sprintf(str, "Drive %c: may require code page %d to be properly accessed.\n\nDo you want to change the current code page to %d now?\n", drive, cp, cp); - if (!host_name || ht_stat(host_name, &htest) || _waccess(host_name,0) || !systemmessagebox("Changing code page",str,"yesno","question",1)) - dos.loaded_codepage = cpbak; - #if defined(USE_TTF) - else if (ttf.inUse) { - dos.loaded_codepage = cpbak; - toSetCodePage(NULL, cp, -1); - } - #endif - else { - MSG_Init(); - DOSBox_SetSysMenu(); - if (isDBCSCP()) { - ShutFontHandle(); - InitFontHandle(); - JFONT_Init(); - } - SetupDBCSTable(); - runRescan("-A -Q"); - #if C_OPENGL && DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW - if (OpenGL_using() && control->opt_lang.size() && lastcp && lastcp != dos.loaded_codepage) - UpdateSDLDrawTexture(); - #endif - } - SwitchLanguage(cpbak, cp, false); - } - } - #elif defined (OS2) - if (temp_line.size() <= 2) // Seems to be a drive. - { - failed = true; - HFILE cdrom_fd = 0; - ULONG ulAction = 0; - - APIRET rc = DosOpen((unsigned char*)temp_line.c_str(), &cdrom_fd, &ulAction, 0L, FILE_NORMAL, OPEN_ACTION_OPEN_IF_EXISTS, - OPEN_FLAGS_DASD | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, 0L); - DosClose(cdrom_fd); - if (rc != NO_ERROR && rc != ERROR_NOT_READY) - { - failed = true; - } else { - failed = false; - } - } - } - #else - if (!is_physfs && stat(temp_line.c_str(),&test)) { - failed = true; - Cross::ResolveHomedir(temp_line); - //Try again after resolving ~ - if(!stat(temp_line.c_str(),&test)) failed = false; - } - #endif - if(failed) { - if (!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_ERROR_1"),temp_line.c_str()); - return; - } - /* Not a switch so a normal directory/file */ - if (!is_physfs && !S_ISDIR(useh?htest.st_mode:test.st_mode)) { - #ifdef OS2 - HFILE cdrom_fd = 0; - ULONG ulAction = 0; - - APIRET rc = DosOpen((unsigned char*)temp_line.c_str(), &cdrom_fd, &ulAction, 0L, FILE_NORMAL, OPEN_ACTION_OPEN_IF_EXISTS, - OPEN_FLAGS_DASD | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, 0L); - DosClose(cdrom_fd); - if (rc != NO_ERROR && rc != ERROR_NOT_READY) - #endif - { - is_physfs = true; - temp_line.insert(0, 1, ':'); - /*if (!quiet) { - WriteOut(MSG_Get("PROGRAM_MOUNT_ERROR_2"),temp_line.c_str()); - if (temp_line.length()>4) { - char ext[5]; - strncpy(ext, temp_line.substr(temp_line.length()-4).c_str(), 4); - ext[4]=0; - if (!strcasecmp(ext, ".iso")||!strcasecmp(ext, ".cue")||!strcasecmp(ext, ".bin")||!strcasecmp(ext, ".chd")||!strcasecmp(ext, ".mdf")||!strcasecmp(ext, ".ima")||!strcasecmp(ext, ".img")||!strcasecmp(ext, ".vhd")||!strcasecmp(ext, ".hdi")) - WriteOut(MSG_Get("PROGRAM_MOUNT_IMGMOUNT"),temp_line.c_str()); - } - } - return;*/ - } - } - - if (temp_line[temp_line.size()-1]!=CROSS_FILESPLIT) temp_line+=CROSS_FILESPLIT; - uint8_t bit8size=(uint8_t) sizes[1]; - exist = drive - 'A' < DOS_DRIVES && drive - 'A' >= 0 && Drives[drive - 'A']; - if (type=="cdrom") { - int num = -1; - cmd->FindInt("-usecd",num,true); - int error = 0; - if (cmd->FindExist("-aspi",false)) { - MSCDEX_SetCDInterface(CDROM_USE_ASPI, num); - } else if (cmd->FindExist("-ioctl_dio",false)) { - MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); - } else if (cmd->FindExist("-ioctl_dx",false)) { - MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DX, num); - #if defined (WIN32) - } else if (cmd->FindExist("-ioctl_mci",false)) { - MSCDEX_SetCDInterface(CDROM_USE_IOCTL_MCI, num); - #endif - } else if (cmd->FindExist("-noioctl",false)) { - MSCDEX_SetCDInterface(CDROM_USE_SDL, num); - } else { - #if defined (WIN32) - int id, major, minor; - DOSBox_CheckOS(id, major, minor); - if ((id==VER_PLATFORM_WIN32_NT) && (major>5)) { - // Vista/above - MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DX, num); - } else { - MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); - } - #else - MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); +#include "dosbox.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "menudef.h" +#include "programs.h" +#include "support.h" +#include "drives.h" +#include "cross.h" +#include "regs.h" +#include "ide.h" +#include "cpu.h" +#include "callback.h" +#include "cdrom.h" +#include "builtin.h" +#include "bios_disk.h" +#include "dos_system.h" +#include "dos_inc.h" +#include "bios.h" +#include "bitop.h" +#include "inout.h" +#include "dma.h" +#include "bios_disk.h" +#include "qcow2_disk.h" +#include "shell.h" +#include "setup.h" +#include "control.h" +#include +#include "menu.h" +#include "render.h" +#include "mouse.h" +#include "eltorito.h" +#include "../ints/int10.h" +#include "../output/output_opengl.h" +#include "paging.h" + +#if defined(OS2) +#define INCL DOSFILEMGR +#define INCL_DOSERRORS +#define INCL_WINWINDOWMGR +#define INCL_WINDIALOGS +#define INCL_WINERRORS +#define INCL_WINSTDFILE +#include "os2.h" + +typedef char host_cnv_char_t; +host_cnv_char_t *CodePageGuestToHost(const char *s); +#endif +#if defined(_MSC_VER) +#include "../libs/tinyfiledialogs/tinyfiledialogs.h" +#elif !defined(HX_DOS) +#include "../libs/tinyfiledialogs/tinyfiledialogs.c" +#endif +#if defined(WIN32) +#ifndef C_ICONV +# define C_ICONV +# include "../misc/winiconv.c" +#endif +typedef wchar_t host_cnv_char_t; +host_cnv_char_t *CodePageGuestToHost(const char *s); +#if !defined(S_ISREG) +# define S_ISREG(x) ((x & S_IFREG) == S_IFREG) +#endif +#include +#else +#include +#endif +#ifdef C_ICONV +#include "iconvpp.hpp" +typedef char16_t test_char_t; +typedef std::basic_string test_string; +typedef std::basic_string test_char; +#endif +int freesizecap = 1; +int result_errorcode = 0; +char lastmount = 0; +bool Mouse_Drv=true; +bool Mouse_Vertical = false; +bool force_nocachedir = false; +bool lockmount = true; +bool wpcolon = true; +bool convertimg = true; +bool startcmd = false; +bool startwait = true; +bool startquiet = false; +bool starttranspath = false; +bool mountwarning = true; +bool qmount = false; +bool nowarn = false; +bool CodePageGuestToHostUTF8(char *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*/) ; +bool CodePageHostToGuestUTF8(char *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*/), CodePageHostToGuestUTF16(char *d/*CROSS_LEN*/,const uint16_t *s/*CROSS_LEN*/); +inline bool CodePageHostToGuestUTF16(char *d/*CROSS_LEN*/,const char16_t *s/*CROSS_LEN*/) { + return CodePageHostToGuestUTF16(d, reinterpret_cast(s)); +} +extern bool systemmessagebox(char const * aTitle, char const * aMessage, char const * aDialogType, char const * aIconType, int aDefaultButton); +extern bool addovl, addipx, addne2k, prepared, inshell, usecon, uao, loadlang, morelen, mountfro[26], mountiro[26], resetcolor, staycolors, printfont, notrycp, internal_program; +extern bool clear_screen(), OpenGL_using(void), DOS_SetAnsiAttr(uint8_t attr), isDBCSCP(); +extern int lastcp, lastmsgcp, tryconvertcp, FileDirExistCP(const char *name), FileDirExistUTF8(std::string &localname, const char *name); +extern uint8_t DOS_GetAnsiAttr(void); +extern int toSetCodePage(DOS_Shell *shell, int newCP, int opt); +void MSG_Init(), JFONT_Init(), InitFontHandle(), ShutFontHandle(), DOSBox_SetSysMenu(), Load_Language(std::string name); +void DOS_EnableDriveMenu(char drv), GFX_SetTitle(int32_t cycles, int frameskip, Bits timing, bool paused), UpdateSDLDrawTexture(); +void runBoot(const char *str), runMount(const char *str), runImgmount(const char *str), runRescan(const char *str), show_prompt(), ttf_reset(void); +void getdrivezpath(std::string &path, std::string const& dirname), drivezRegister(std::string const& path, std::string const& dir, bool usecp), UpdateDefaultPrinterFont(void); +std::string GetDOSBoxXPath(bool withexe=false); +FILE *testLoadLangFile(const char *fname); +bool CheckDBCSCP(int32_t codepage); +void ReadCharAttr(uint16_t col,uint16_t row,uint8_t page,uint16_t * result); +void WriteChar(uint16_t col,uint16_t row,uint8_t page,uint16_t chr,uint8_t attr,bool useattr); +std::string formatString(const char* format, ...); +const char* MSG_GetUTF8(const char* msg); +extern char char_yes, char_no; +extern bool int13_enable_48bitLBA; + +#define MAXU32 0xffffffff +// #include "zip.h" +// #include "unzip.h" +// #include "ioapi.h" +// #include "zipcppstdbuf.h" + +#if defined(WIN32) +#ifndef S_ISDIR +#define S_ISDIR(m) (((m)&S_IFMT)==S_IFDIR) +#endif +#endif + +#if defined(RISCOS) +#include +#include +#endif + +#if C_DEBUG +Bitu DEBUG_EnableDebugger(void); +#endif + +/* Microsoft likes to make POSIX library functions less convenient and your code + * less portable by nagging you to add a leading underscore to those functions. */ +#if !defined(_MSC_VER) +#define _access access +#define _strdup strdup +#endif + +#if !defined(OSFREE) +class MOUSE : public Program { +public: + void Run(void) override; +}; + +void MOUSE::Run(void) { + if (cmd->FindExist("/?",false) || cmd->FindExist("/h",false)) { + WriteOut(MSG_Get("PROGRAM_MOUSE_HELP")); + return; + } + if (!Mouse_Drv) { + if (cmd->FindExist("/u",false)) + WriteOut(MSG_Get("PROGRAM_MOUSE_NOINSTALLED")); + else { + Mouse_Drv = true; + mainMenu.get_item("dos_mouse_enable_int33").check(Mouse_Drv).refresh_item(mainMenu); + WriteOut(MSG_Get("PROGRAM_MOUSE_INSTALL")); + if (cmd->FindExist("/v",false)) { + Mouse_Vertical = true; + WriteOut(MSG_Get("PROGRAM_MOUSE_VERTICAL")); + } else { + Mouse_Vertical = false; + } + mainMenu.get_item("dos_mouse_y_axis_reverse").check(Mouse_Vertical).refresh_item(mainMenu); + } + } + else { + if (cmd->FindExist("/u",false)) { + Mouse_Drv = false; + mainMenu.get_item("dos_mouse_enable_int33").check(Mouse_Drv).refresh_item(mainMenu); + WriteOut(MSG_Get("PROGRAM_MOUSE_UNINSTALL")); + } else + if (cmd->FindExist("/v",false)) { + if(!Mouse_Vertical) { + Mouse_Vertical = true; + WriteOut(MSG_Get("PROGRAM_MOUSE_VERTICAL")); + } else { + Mouse_Vertical = false; + WriteOut(MSG_Get("PROGRAM_MOUSE_VERTICAL_BACK")); + } + mainMenu.get_item("dos_mouse_y_axis_reverse").check(Mouse_Vertical).refresh_item(mainMenu); + } else + WriteOut(MSG_Get("PROGRAM_MOUSE_ERROR")); + } +} + +static void MOUSE_ProgramStart(Program * * make) { + *make=new MOUSE; +} +#endif + +void DetachFromBios(imageDisk* image) { + if (image) { + for (int index = 0; index < MAX_DISK_IMAGES; index++) { + if (imageDiskList[index] == image) { + if (index > 1) IDE_Hard_Disk_Detach(index); + imageDiskList[index]->Release(); + imageDiskChange[index] = true; + imageDiskList[index] = NULL; + } + } + } +} + +bool SwitchLanguage(int oldcp, int newcp, bool confirm) { + auto iterold = langcp_map.find(lastmsgcp), iternew = langcp_map.find(newcp); + std::string langold = iterold != langcp_map.end() ? iterold->second : "", langnew = iternew != langcp_map.end() ? iternew->second : ""; + if (loadlang && langnew.size() && strcasecmp(langold.c_str(), langnew.c_str())) { + FILE *file = testLoadLangFile(langnew.c_str()); + if (file) { + fclose(file); + std::string msg = formatString(MSG_Get("PROGRAM_SWITCH_LANG"), newcp, langnew.c_str()); + if (!confirm || (CheckDBCSCP(oldcp) && !CheckDBCSCP(newcp)) || systemmessagebox("DOSBox-X language file", msg.c_str(), "yesno","question", 2)) { + SetVal("dosbox", "language", langnew); + Load_Language(langnew); + lastmsgcp = newcp; + return true; // Will load language file for the active codepage + } + } + } + return false; +} + +extern std::string hidefiles, dosbox_title; +extern int swapInDisksSpecificDrive; +extern bool dos_kernel_disabled, dos_kernel_shutdown_mcb, clearline; +void MSCDEX_SetCDInterface(int intNr, int forceCD); +bool FDC_UnassignINT13Disk(unsigned char drv); +bool bootguest=false, use_quick_reboot=false; +int bootdrive=-1; +uint8_t ZDRIVE_NUM = 25; +std::string msgget; +static const char* UnmountHelper(char umount) { + int i_drive; + if (umount < '0' || umount > 3+'0') + i_drive = toupper(umount) - 'A'; + else + i_drive = umount - '0'; + + if (i_drive >= DOS_DRIVES || i_drive < 0) + return MSG_Get("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED"); + + if (i_drive < MAX_DISK_IMAGES && Drives[i_drive] == NULL && imageDiskList[i_drive] == NULL) + return MSG_Get("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED"); + + if (i_drive >= MAX_DISK_IMAGES && Drives[i_drive] == NULL) + return MSG_Get("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED"); + + if (i_drive <= 1) + FDC_UnassignINT13Disk(i_drive); + + msgget=MSG_Get("PROGRAM_MOUNT_UMOUNT_SUCCESS"); + if (Drives[i_drive]) { + const bool partitionMount = Drives[i_drive]->partitionMount; + const fatDrive* drive = dynamic_cast(Drives[i_drive]); + imageDisk* image = drive ? drive->loadedDisk : NULL; + const isoDrive* cdrom = dynamic_cast(Drives[i_drive]); + switch (DriveManager::UnmountDrive(i_drive)) { + case 1: return MSG_Get("PROGRAM_MOUNT_UMOUNT_NO_VIRTUAL"); + case 2: return MSG_Get("MSCDEX_ERROR_MULTIPLE_CDROMS"); + } + if (image && !partitionMount) DetachFromBios(image); + if (cdrom) IDE_CDROM_Detach(i_drive); + Drives[i_drive] = nullptr; + DOS_EnableDriveMenu(i_drive+'A'); + mem_writeb(Real2Phys(dos.tables.mediaid)+(unsigned int)i_drive*dos.tables.dpb_size,0); + if (i_drive == DOS_GetDefaultDrive()) + DOS_SetDrive(ZDRIVE_NUM); + +#if !defined(OSFREE) + if (cdrom) + for (int drv=0; drv<2; drv++) + if (Drives[drv]) { + fatDrive *fdp = dynamic_cast(Drives[drv]); + if (fdp&&fdp->opts.mounttype==1&&toupper(umount)==fdp->el.CDROM_drive) { + msgget+=UnmountHelper('A'+drv); + size_t found=msgget.rfind("%c"); + if (found!=std::string::npos) + msgget.replace(found, 2, std::string(1, 'A'+drv)); + } + } +#endif + } + + if (i_drive < MAX_DISK_IMAGES && imageDiskList[i_drive]) { + imageDiskList[i_drive]->Release(); + imageDiskList[i_drive] = NULL; + } + if (swapInDisksSpecificDrive == i_drive) { + for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { + if (diskSwap[si] != NULL) { + diskSwap[si]->Release(); + diskSwap[si] = NULL; + } + } + swapInDisksSpecificDrive = -1; + } + + return msgget.c_str(); +} + +void MountHelper(char drive, const char drive2[DOS_PATHLENGTH], std::string const& drive_type) { + std::vector options; + DOS_Drive * newdrive; + std::string temp_line; + std::string str_size; + uint16_t sizes[4]; + uint8_t mediaid=0; + + if(drive_type=="CDROM") { + mediaid=0xF8; /* Hard Disk */ + str_size="2048,1,65535,0"; + } else { + if(drive_type=="FLOPPY") { + mediaid=0xF0; /* Floppy 1.44 media */ + str_size="512,1,2880,2880"; /* All space free */ + } else if(drive_type=="LOCAL") { + mediaid=0xF8; + str_size="512,32,0,0"; + } + } + + char number[20]; const char * scan=str_size.c_str(); + Bitu index=0; Bitu count=0; + while (*scan) { + if (*scan==',') { + number[index]=0;sizes[count++]=atoi(number); + index=0; + } else number[index++]=*scan; + scan++; + } + number[index]=0; sizes[count++]=atoi(number); + + temp_line = drive2; + if(temp_line.size() > 3 && temp_line[temp_line.size()-1]=='\\') temp_line.erase(temp_line.size()-1,1); + if (temp_line[temp_line.size()-1]!=CROSS_FILESPLIT) temp_line+=CROSS_FILESPLIT; + uint8_t bit8size=(uint8_t) sizes[1]; + + if(drive_type=="CDROM") { +#if !defined(OSFREE) + int num = -1; + int error; + + int id, major, minor; + DOSBox_CheckOS(id, major, minor); + if ((id==VER_PLATFORM_WIN32_NT) && (major>5)) { + // Vista/above + MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DX, num); + } else { + MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); + } + newdrive = new cdromDrive(drive,temp_line.c_str(),sizes[0],bit8size,sizes[2],0,mediaid,error,options); + std::string errmsg; + switch (error) { + case 0 : errmsg=MSG_Get("MSCDEX_SUCCESS"); break; + case 1 : errmsg=MSG_Get("MSCDEX_ERROR_MULTIPLE_CDROMS"); break; + case 2 : errmsg=MSG_Get("MSCDEX_ERROR_NOT_SUPPORTED"); break; + case 3 : errmsg=MSG_Get("MSCDEX_ERROR_PATH"); break; + case 4 : errmsg=MSG_Get("MSCDEX_TOO_MANY_DRIVES"); break; + case 5 : errmsg=MSG_Get("MSCDEX_LIMITED_SUPPORT"); break; + default : errmsg=MSG_Get("MSCDEX_UNKNOWN_ERROR"); break; + } + if (error) { + systemmessagebox(error==5? MSG_Get("WARNING"): MSG_Get("ERROR"),errmsg.c_str(),"ok","error", 1); + if (error!=5) { + delete newdrive; + return; + } + } +#else + return; +#endif + } else { + newdrive=new localDrive(temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,options); + newdrive->readonly = mountfro[drive-'A']; + } + + if (!newdrive) E_Exit("DOS:Can't create drive"); + Drives[drive-'A']=newdrive; + DOS_EnableDriveMenu(drive); + mem_writeb(Real2Phys(dos.tables.mediaid)+(drive-'A')*dos.tables.dpb_size,mediaid); + if(drive_type=="CDROM") + LOG_MSG("GUI: Drive %c is mounted as CD-ROM",drive); + else + LOG_MSG("GUI: Drive %c is mounted as local directory",drive); + if(drive == drive2[0] && strlen(drive2) == 3) { + // automatic mount + } else { + if(drive_type=="CDROM") return; + std::string label; + label = drive; + if(drive_type=="LOCAL") + label += "_DRIVE"; + else + label += "_FLOPPY"; + newdrive->SetLabel(label.c_str(),false,true); + } +} + +#if defined(WIN32) +# if !defined(OSFREE) +void MenuMountDrive(char drive, const char drive2[DOS_PATHLENGTH]) { + std::vector options; + std::string str(1, drive); + std::string drive_warn; + if (Drives[drive-'A']) { + drive_warn = formatString(MSG_Get("PROGRAM_ALREADY_MOUNTED"), str.c_str()); + systemmessagebox(MSG_Get("ERROR"),drive_warn.c_str(),"ok","error", 1); + return; + } + if(control->SecureMode()) { + systemmessagebox(MSG_Get("ERROR"),MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); + return; + } + DOS_Drive * newdrive; + std::string temp_line; + std::string str_size; + std::string drive_type; + uint16_t sizes[4]; + uint8_t mediaid; + int type=GetDriveType(drive2); + if(type==DRIVE_NO_ROOT_DIR) { + std::string msg = formatString(MSG_Get("PROGRAM_DRIVE_NO_EXIST"), str.c_str()); + systemmessagebox(MSG_Get("ERROR"),msg.c_str(),"ok","error", 1); + return; + } else if(type==DRIVE_CDROM) + drive_type = MSG_Get("DRIVE_TYPE_CDROM"); + else if(type==DRIVE_REMOVABLE) + drive_type = drive=='A'||drive=='B'?MSG_Get("DRIVE_TYPE_FLOPPY"): MSG_Get("DRIVE_TYPE_REMOVABLE"); + else if(type==DRIVE_REMOTE) + drive_type = MSG_Get("DRIVE_TYPE_NETWORK"); + else + drive_type = MSG_Get("DRIVE_TYPE_HARD"); + drive_warn = formatString(MSG_Get("PROGRAM_DRIVE_WARN"), drive_type.c_str(),str.c_str()); + if (mountwarning && !systemmessagebox(MSG_Get("WARNING"),drive_warn.c_str(),"yesno","warning",1)) return; + + if(type==DRIVE_CDROM) { + mediaid=0xF8; /* Hard Disk */ + str_size="2048,1,65535,0"; + } else if(type==DRIVE_REMOVABLE && (drive=='A'||drive=='B')) { + mediaid=0xF0; /* Floppy 1.44 media */ + str_size="512,1,2880,2880"; /* All space free */ + } else { + mediaid=0xF8; + str_size="512,32,0,0"; + } + + char number[20]; const char * scan=str_size.c_str(); + Bitu index=0; Bitu count=0; + while (*scan) { + if (*scan==',') { + number[index]=0;sizes[count++]=atoi(number); + index=0; + } else number[index++]=*scan; + scan++; + } + number[index]=0; sizes[count++]=atoi(number); + uint8_t bit8size=(uint8_t) sizes[1]; + + temp_line = drive2; + int error = 0, num = -1; + if(type==DRIVE_CDROM) { + int id, major, minor; + DOSBox_CheckOS(id, major, minor); + if ((id==VER_PLATFORM_WIN32_NT) && (major>5)) { + // Vista/above + MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DX, num); + } else { + MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); + } + newdrive = new cdromDrive(drive,temp_line.c_str(),sizes[0],bit8size,sizes[2],0,mediaid,error,options); + std::string errmsg; + switch (error) { + case 0 : errmsg=MSG_Get("MSCDEX_SUCCESS"); break; + case 1 : errmsg=MSG_Get("MSCDEX_ERROR_MULTIPLE_CDROMS"); break; + case 2 : errmsg=MSG_Get("MSCDEX_ERROR_NOT_SUPPORTED"); break; + case 3 : errmsg=MSG_Get("MSCDEX_ERROR_PATH"); break; + case 4 : errmsg=MSG_Get("MSCDEX_TOO_MANY_DRIVES"); break; + case 5 : errmsg=MSG_Get("MSCDEX_LIMITED_SUPPORT"); break; + default : errmsg=MSG_Get("MSCDEX_UNKNOWN_ERROR"); break; + } + if (error) { + systemmessagebox(error==5? MSG_Get("WARNING") : MSG_Get("ERROR"),errmsg.c_str(),"ok",error==5?"warning":"error", 1); + if (error!=5) { + delete newdrive; + return; + } + } + } else { + newdrive=new localDrive(temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,options); + newdrive->readonly = mountfro[drive-'A']; + } + + if (!newdrive) E_Exit("DOS:Can't create drive"); + if(error && (type==DRIVE_CDROM)) return; + Drives[drive-'A']=newdrive; + DOS_EnableDriveMenu(drive); + mem_writeb(Real2Phys(dos.tables.mediaid)+(drive-'A')*dos.tables.dpb_size,mediaid); + if(type == DRIVE_CDROM) LOG_MSG("GUI: Drive %c is mounted as CD-ROM %c:\\", drive, drive); + else LOG_MSG("GUI: Drive %c is mounted as local directory %c:\\", drive, drive); + if(drive == drive2[0] && strlen(drive2) == 3) { + // automatic mount + } else { + if(type == DRIVE_CDROM) return; + std::string label; + label = drive; + if(type==DRIVE_REMOVABLE && (drive=='A'||drive=='B')) + label += "_FLOPPY"; + else + label += "_DRIVE"; + newdrive->SetLabel(label.c_str(),false,true); + } +} #endif - } - if (is_physfs) - newdrive = new physfscdromDrive(drive,temp_line.c_str(),sizes[0],bit8size,sizes[2],0,mediaid,error,options); - else - newdrive = new cdromDrive(drive,temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,error,options); - // Check Mscdex, if it worked out... - if(!quiet) - switch(error) { - case 0: WriteOut(MSG_Get("MSCDEX_SUCCESS")); break; - case 1: WriteOut(MSG_Get("MSCDEX_ERROR_MULTIPLE_CDROMS")); break; - case 2: WriteOut(MSG_Get("MSCDEX_ERROR_NOT_SUPPORTED")); break; - case 3: WriteOut(MSG_Get("MSCDEX_ERROR_PATH")); break; - case 4: WriteOut(MSG_Get("MSCDEX_TOO_MANY_DRIVES")); break; - case 5: WriteOut(MSG_Get("MSCDEX_LIMITED_SUPPORT")); break; - case 10: WriteOut(MSG_Get("PROGRAM_MOUNT_PHYSFS_ERROR")); WriteOut(MSG_Get("PROGRAM_MOUNT_IMGMOUNT")); break; - default: WriteOut(MSG_Get("MSCDEX_UNKNOWN_ERROR")); break; - } - if (error && error!=5) { - delete newdrive; - return; - } - } else { - /* Give a warning when mount c:\ or the / */ - if (mountwarning && !quiet && !nowarn) { - #if defined (WIN32) || defined(OS2) - if( (temp_line == "c:\\") || (temp_line == "C:\\") || - (temp_line == "c:/") || (temp_line == "C:/") ) - WriteOut(MSG_Get("PROGRAM_MOUNT_WARNING_WIN")); - #else - if(temp_line == "/") WriteOut(MSG_Get("PROGRAM_MOUNT_WARNING_OTHER")); - #endif - } - if (is_physfs) { - int error = 0; - newdrive=new physfsDrive(drive,temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,error,options); - if (error) { - if (!quiet) {WriteOut(MSG_Get("PROGRAM_MOUNT_PHYSFS_ERROR"));WriteOut(MSG_Get("PROGRAM_MOUNT_IMGMOUNT"));} - delete newdrive; - return; - } - } else if(type == "overlay") { - physfsDrive* pdp = dynamic_cast(Drives[drive-'A']); - physfscdromDrive* pcdp = dynamic_cast(Drives[drive-'A']); - if (pdp && !pcdp) { - if (pdp->setOverlaydir(temp_line.c_str())) - WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_STATUS"),(temp_line+(temp_line.size()&&temp_line.back()!=CROSS_FILESPLIT?std::string(1, CROSS_FILESPLIT):"")+std::string(1, drive)+"_DRIVE").c_str(),drive); - else - WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_ERROR")); - return; - } - localDrive* ldp = dynamic_cast(Drives[drive-'A']); - cdromDrive* cdp = dynamic_cast(Drives[drive-'A']); - if(!ldp || cdp || pcdp) { - if(!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_INCOMPAT_BASE")); - return; - } - std::string base = ldp->getBasedir(); - uint8_t o_error = 0; - newdrive = new Overlay_Drive(base.c_str(),temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,o_error,options); - //Erase old drive on success - if (newdrive) { - if (o_error) { - if (quiet) {delete newdrive;return;} - if (o_error == 1) WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_MIXED_BASE")); - else if (o_error == 2) WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_SAME_AS_BASE")); - else WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_ERROR")); - delete newdrive; - return; - } else { - Overlay_Drive* odrive=dynamic_cast(newdrive); - if (odrive!=NULL) { - odrive->ovlnocachedir = nocachedir; - odrive->ovlreadonly = readonly; - } - } - - //Copy current directory if not marked as deleted. - if (newdrive->TestDir(ldp->curdir)) { - strcpy(newdrive->curdir,ldp->curdir); - } - - if (Drives[drive-'A'] != NULL) { - if (dynamic_cast(Drives[drive-'A']) != NULL) { /* Yeah, this relies on RTTI but it's probably worth it */ - /* Let the user know in case experience with other OSes or emulators leads them to think - * that they can "stack" overlays by mounting multiple times. */ - WriteOut("Existing overlay has been replaced with new overlay.\n"); - } - delete Drives[drive-'A']; - Drives[drive-'A'] = nullptr; - } - } else { - if (!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_ERROR")); - return; - } - } else { - newdrive=new localDrive(temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,options); - newdrive->nocachedir = nocachedir; - newdrive->readonly = readonly; - } - } - } else { - if (!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_ILL_TYPE"),type.c_str()); - return; - } - if (!newdrive) E_Exit("DOS:Can't create drive"); - Drives[drive-'A']=newdrive; - if (removed && !exist) DOS_SetDefaultDrive(drive-'A'); - DOS_EnableDriveMenu(drive); - /* Set the correct media byte in the table */ - mem_writeb(Real2Phys(dos.tables.mediaid)+((unsigned int)drive-'A')*dos.tables.dpb_size,newdrive->GetMediaByte()); - lastmount = drive; - if (!quiet) { - if (type != "overlay") WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_2"),drive,newdrive->GetInfo()); - else WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_STATUS"),temp_line.c_str(),drive); - } - /* check if volume label is given and don't allow it to updated in the future */ - if (cmd->FindString("-label",label,true)) newdrive->SetLabel(label.c_str(),iscdrom,false); - /* For hard drives set the label to DRIVELETTER_Drive. - * For floppy drives set the label to DRIVELETTER_Floppy. - * This way every drive except cdroms should get a label.*/ - else if(type == "dir" || type == "overlay") { - #if defined (WIN32) || defined(OS2) - if(temp_line.size()==3 && toupper(drive) == toupper(temp_line[0])) { - // automatic mount - } else { - label = drive; label += "_DRIVE"; - newdrive->SetLabel(label.c_str(),iscdrom,false); - } - #endif - } else if(type == "floppy") { - #if defined (WIN32) || defined(OS2) - if(temp_line.size()==3 && toupper(drive) == toupper(temp_line[0])) { - // automatic mount - } else { - label = drive; label += "_FLOPPY"; - newdrive->SetLabel(label.c_str(),iscdrom,true); - } - #endif - } - if(type == "floppy") incrementFDD(); - return; - showusage: - resetcolor = true; - WriteOut(MSG_Get("PROGRAM_MOUNT_USAGE")); - return; - } - }; - - static void MOUNT_ProgramStart(Program * * make) { - *make=new MOUNT; - } - - void runMount(const char *str) { - MOUNT mount; - mount.cmd=new CommandLine("MOUNT", str); - mount.Run(); - } - - void GUI_Run(bool pressed); - - class CFGTOOL : public Program { - public: - void Run(void) override { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut("Starts DOSBox-X's graphical configuration tool.\n\nCFGTOOL\n\nNote: You can also use CONFIG command for command-line configurations.\n"); - return; - } - GUI_Run(false); /* So that I don't have to run the keymapper on every setup of mine just to get the GUI --J.C */ - } - }; - - static void CFGTOOL_ProgramStart(Program * * make) { - *make=new CFGTOOL; - } - - extern bool custom_bios; - extern size_t custom_bios_image_size; - extern Bitu custom_bios_image_offset; - extern unsigned char *custom_bios_image; - extern uint32_t floppytype; - extern bool boot_debug_break; - extern Bitu BIOS_bootfail_code_offset; - - void DisableINT33(); - void EMS_DoShutDown(); - void XMS_DoShutDown(); - void DOS_DoShutDown(); - void GUS_DOS_Shutdown(); - void SBLASTER_DOS_Shutdown(); - - unsigned char PC98_ITF_ROM[0x8000]; - bool PC98_ITF_ROM_init = false; - unsigned char PC98_BANK_Select = 0x12; - - class PC98ITFPageHandler : public PageHandler { - public: - PC98ITFPageHandler() : PageHandler(PFLAG_READABLE|PFLAG_HASROM) {} - PC98ITFPageHandler(Bitu flags) : PageHandler(flags) {} - HostPt GetHostReadPt(PageNum phys_page) override { - return PC98_ITF_ROM+(phys_page&0x7)*MEM_PAGESIZE; - } - HostPt GetHostWritePt(PageNum phys_page) override { - return PC98_ITF_ROM+(phys_page&0x7)*MEM_PAGESIZE; - } - void writeb(PhysPt addr,uint8_t val) override { - LOG(LOG_CPU,LOG_ERROR)("Write %x to rom at %x",(int)val,(int)addr); - } - void writew(PhysPt addr,uint16_t val) override { - LOG(LOG_CPU,LOG_ERROR)("Write %x to rom at %x",(int)val,(int)addr); - } - void writed(PhysPt addr,uint32_t val) override { - LOG(LOG_CPU,LOG_ERROR)("Write %x to rom at %x",(int)val,(int)addr); - } - }; - - PC98ITFPageHandler mem_itf_rom; - - bool FDC_AssignINT13Disk(unsigned char drv); - void MEM_RegisterHandler(Bitu phys_page,PageHandler * handler,Bitu page_range); - void MEM_ResetPageHandler_Unmapped(Bitu phys_page, Bitu pages); - bool MEM_map_ROM_physmem(Bitu start,Bitu end); - PageHandler &Get_ROM_page_handler(void); - - // Normal BIOS is in the BIOS memory area - // ITF is in its own buffer, served by mem_itf_rom - void PC98_BIOS_Bank_Switch(void) { - if (PC98_BANK_Select == 0x00) { - MEM_RegisterHandler(0xF8,&mem_itf_rom,0x8); - } - else { - MEM_RegisterHandler(0xF8,&Get_ROM_page_handler(),0x8); - } - - PAGING_ClearTLB(); - } - - // BIOS behavior suggests a reset signal puts the BIOS back - void PC98_BIOS_Bank_Switch_Reset(void) { - LOG_MSG("PC-98 43Dh mapping BIOS back into top of RAM"); - PC98_BANK_Select = 0x12; - PC98_BIOS_Bank_Switch(); - #if 0 - Bitu DEBUG_EnableDebugger(void); - DEBUG_EnableDebugger(); - #endif - } - - void pc98_43d_write(Bitu port,Bitu val,Bitu iolen) { - (void)port; - (void)iolen; - - LOG_MSG("PC-98 43Dh BIOS bank switching write: 0x%02x",(unsigned int)val); - - switch (val) { - case 0x00: // ITF - case 0x10: - case 0x18: - PC98_BANK_Select = 0x00; - PC98_BIOS_Bank_Switch(); - break; - case 0x12: // BIOS - PC98_BANK_Select = 0x12; - PC98_BIOS_Bank_Switch(); - break; - default: - LOG_MSG("PC-98 43Dh BIOS bank switching write: 0x%02x unknown value",(unsigned int)val); - break; - } - } - - int IDE_MatchCDROMDrive(char drv); - - #if defined(WIN32) - #include - #else - #if defined(MACOSX) - #define _DARWIN_C_SOURCE - #endif - #include - #endif - FILE *retfile = NULL; - FILE * fopen_lock(const char * fname, const char * mode, bool &readonly) { - std::string fmode = mode; - if (lockmount && fmode.size()>1 && fmode.back()=='+') { - #if defined(WIN32) - HANDLE hFile = CreateFile(fname, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - if (hFile == INVALID_HANDLE_VALUE) { - const host_cnv_char_t* host_name = CodePageGuestToHost(fname); - if (host_name != NULL) hFile = CreateFileW(host_name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - } - if (hFile == INVALID_HANDLE_VALUE) {fmode.pop_back();readonly=true;goto next;} - int nHandle = _open_osfhandle((intptr_t)hFile, _O_RDONLY); - if (nHandle == -1) {CloseHandle(hFile);return NULL;} - retfile = _fdopen(nHandle, fmode.c_str()); - if(!retfile) {CloseHandle(hFile);return NULL;} - LockFile(hFile, 0, 0, 0xFFFFFFFF, 0xFFFFFFFF); - #else - retfile = fopen64(fname, fmode.c_str()); - if (retfile == NULL) {fmode.pop_back();readonly=true;goto next;} /* did you know fopen returns NULL if it cannot open the file? */ - int lock = flock(fileno(retfile), LOCK_EX | LOCK_NB); /* did you know fileno() assumes retfile != NULL and you will segfault if that is wrong? */ - if (lock < 0) { - fclose(retfile); /* don't leak file handles on failure to flock() */ - return NULL; - } - #endif - } else { - next: - retfile = fopen64(fname, fmode.c_str()); - #if defined(WIN32) - if (retfile == NULL) { - const host_cnv_char_t* host_name = CodePageGuestToHost(fname); - if (host_name != NULL) { - const size_t size = fmode.size()+1; - wchar_t* wmode = new wchar_t[size]; - mbstowcs (wmode, fmode.c_str(), size); - retfile = _wfopen(host_name, wmode); - } - } - #endif - } - return retfile; - } - - /*! \brief BOOT.COM utility to boot a floppy or hard disk device. - * - * \description Users will use this command to boot a guest operating system from - * a disk image. Options are provided to specify the device to boot - * from (if the image is already assigned) or a floppy disk image - * specified on the command line. - */ - class BOOT : public Program { - public: - BOOT() { - for (size_t i=0;i < MAX_SWAPPABLE_DISKS;i++) newDiskSwap[i] = NULL; - } - virtual ~BOOT() { - for (size_t i=0;i < MAX_SWAPPABLE_DISKS;i++) { - if (newDiskSwap[i] != NULL) { - newDiskSwap[i]->Release(); - newDiskSwap[i] = NULL; - } - } - } - /*! \brief Array of disk images to add to floppy swaplist - */ - imageDisk* newDiskSwap[MAX_SWAPPABLE_DISKS] = {}; - - private: - - /*! \brief Open a file as a disk image and return FILE* handle and size - */ - FILE *getFSFile_mounted(char const* filename, uint32_t *ksize, uint32_t *bsize, uint8_t *error) { - //if return NULL then put in error the errormessage code if an error was requested - bool tryload = (*error)?true:false; - *error = 0; - uint8_t drive; - char fullname[DOS_PATHLENGTH]; - - localDrive* ldp=nullptr; - bool readonly=wpcolon&&strlen(filename)>1&&filename[0]==':'; - if (!DOS_MakeName(readonly?filename+1:filename,fullname,&drive)) return NULL; - - try { - ldp=dynamic_cast(Drives[drive]); - if(!ldp) return NULL; - - FILE *tmpfile = ldp->GetSystemFilePtr(fullname, "rb"); - if(tmpfile == NULL) { - if (!tryload) *error=1; - return NULL; - } - - // get file size - fseek(tmpfile,0L, SEEK_END); - *ksize = uint32_t(ftell(tmpfile) / 1024); - *bsize = uint32_t(ftell(tmpfile)); - fclose(tmpfile); - - if (!readonly) - tmpfile = ldp->GetSystemFilePtr(fullname, "rb+"); - if(readonly || tmpfile == NULL) { - // if (!tryload) *error=2; - // return NULL; - WriteOut(MSG_Get("PROGRAM_BOOT_WRITE_PROTECTED")); - tmpfile = ldp->GetSystemFilePtr(fullname, "rb"); - if(tmpfile == NULL) { - if (!tryload) *error=1; - return NULL; - } - } - - return tmpfile; - } - catch(...) { - return NULL; - } - } - - /*! \brief Open a file as a disk image and return FILE* handle and size - */ - FILE *getFSFile(char const * filename, uint32_t *ksize, uint32_t *bsize,bool tryload=false) { - uint8_t error = tryload?1:0; - FILE* tmpfile = getFSFile_mounted(filename,ksize,bsize,&error); - if(tmpfile) return tmpfile; - //File not found on mounted filesystem. Try regular filesystem - std::string filename_s(filename); - Cross::ResolveHomedir(filename_s); - bool readonly=wpcolon&&filename_s.length()>1&&filename_s[0]==':'; - if (!readonly) - tmpfile = fopen_lock(filename_s.c_str(),"rb+",readonly); - if(readonly || !tmpfile) { - if( (tmpfile = fopen(readonly?filename_s.c_str()+1:filename_s.c_str(),"rb")) ) { - //File exists; So can't be opened in correct mode => error 2 - // fclose(tmpfile); - // if(tryload) error = 2; - WriteOut(MSG_Get("PROGRAM_BOOT_WRITE_PROTECTED")); - fseek(tmpfile,0L, SEEK_END); - *ksize = uint32_t(ftell(tmpfile) / 1024); - *bsize = uint32_t(ftell(tmpfile)); - return tmpfile; - } - // Give the delayed errormessages from the mounted variant (or from above) - if(error == 1) WriteOut(MSG_Get("PROGRAM_BOOT_NOT_EXIST")); - if(error == 2) WriteOut(MSG_Get("PROGRAM_BOOT_NOT_OPEN")); - return NULL; - } - fseek(tmpfile,0L, SEEK_END); - *ksize = uint32_t(ftell(tmpfile) / 1024); - *bsize = uint32_t(ftell(tmpfile)); - return tmpfile; - } - - /*! \brief Utility function to print generic boot error - */ - void printError(void) { - resetcolor = true; - WriteOut(MSG_Get("PROGRAM_BOOT_PRINT_ERROR")); - } - - public: - - /*! \brief Program entry point, when the command is run - */ - void Run(void) override { - std::string tmp; - std::string bios; - std::string boothax_str; - std::string el_torito_mode="noemu"; - std::string el_torito; - bool pc98_640x200 = true; - bool pc98_show_graphics = false; - bool bios_boot = false; - bool swaponedrive = false; - bool convertro = false; - bool force = false; - int loadseg_user = -1; - int convimg = -1; - int quiet = 0; - - //Hack To allow long commandlines - ChangeToLongCmd(); - - boot_debug_break = false; - if (cmd->FindExist("-debug",true)) - boot_debug_break = true; - - if (cmd->FindExist("-swap-one-drive",true)) - swaponedrive = true; - - //look for -el-torito parameter and remove it from the command line. - //This is copy-pasta to be consistent with the IMGMOUNT command which accepts this as either -el-torito or -bootcd. - //But with one important difference: Unlike IMGMOUNT which only supports bootable floppy emulation, this version lets - //you specify any other mode, though at this time, only "no emulation" mode is supported. You specify it as a =suffix - //i.e. -el-torito d:=noemu. No emulation mode is default, the IMGMOUNT --el-torito is still recommended for booting - //floppy emulation at this time. - cmd->FindString("-el-torito",el_torito,true); - if(el_torito == "") cmd->FindString("-bootcd", el_torito, true); - - if (!el_torito.empty()) { - size_t o = el_torito.find_last_of('='); - if (o != std::string::npos && (o+1) < el_torito.length()) { - el_torito_mode = el_torito.substr(o+1); - el_torito = el_torito.substr(0,o); - } - } - - // debugging options - if (cmd->FindExist("-pc98-640x200",true)) - pc98_640x200 = true; - if (cmd->FindExist("-pc98-640x400",true)) - pc98_640x200 = false; - if (cmd->FindExist("-pc98-graphics",true)) - pc98_show_graphics = true; - - if (cmd->FindExist("-q",true)) - quiet = 1; - if (cmd->FindExist("-qq",true)) - quiet = 2; - - if (cmd->FindExist("-force",true)) - force = true; - - if (cmd->FindExist("-convertfatro",true)) { - convimg = 1; - convertro = true; - } - - if (cmd->FindExist("-convertfat",true)) - convimg = 1; - - if (cmd->FindExist("-noconvertfat",true)) - convimg = 0; - - if (cmd->FindString("-bios",bios,true)) - bios_boot = true; - - cmd->FindString("-load-seg",tmp,true); - if (!tmp.empty()) - loadseg_user = strtoul(tmp.c_str(),NULL,0); - - cmd->FindString("-boothax",boothax_str,true); - - if (boothax_str == "msdos") // WARNING: For MS-DOS only, including MS-DOS 7/8 included in Windows 95/98/ME. - boothax = BOOTHAX_MSDOS; // do NOT use while in the graphical interface of Windows 95/98/ME especially a DOS VM. - else if (boothax_str == "") - boothax = BOOTHAX_NONE; - else { - if (!quiet) WriteOut("Unknown boothax mode"); - return; - } - - /* In secure mode don't allow people to boot stuff. - * They might try to corrupt the data on it */ - if(control->SecureMode()) { - if (!quiet) WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW")); - return; - } - - if (bios_boot) { - uint32_t isz1,isz2; - - if (bios.empty()) { - if (!quiet) WriteOut("Must specify BIOS image to boot\n"); - return; - } - - // NOTES: - // - // Regarding PC-98 mode, you should use an older BIOS image. - // The PC-9821 ROM image(s) I have appear to rely on bank - // switching parts of itself to boot up and operate. - // - // Update: I found some PC-9801 ROM BIOS images online, which - // ALSO seem to have a BIOS.ROM, ITF.ROM, etc... - // - // So, this command will not be able to run those - // images until port 43Dh (the I/O port used for - // bank switching) is implemented in DOSBox-X. - // - // In IBM PC/AT mode, this should hopefully allow using old - // 386/486 BIOSes in DOSBox-X. - - /* load it */ - FILE *romfp = getFSFile(bios.c_str(), &isz1, &isz2); - if (romfp == NULL) { - if (!quiet) WriteOut("Unable to open BIOS image\n"); - return; - } - Bitu loadsz = (isz2 + 0xFU) & (~0xFU); - if (loadsz == 0) loadsz = 0x10; - if (loadsz > (IS_PC98_ARCH ? 0x18000u : 0x20000u)) loadsz = (IS_PC98_ARCH ? 0x18000u : 0x20000u); - Bitu segbase = 0x100000 - loadsz; - LOG_MSG("Loading BIOS image %s to 0x%lx, 0x%lx bytes",bios.c_str(),(unsigned long)segbase,(unsigned long)loadsz); - fseek(romfp, 0, SEEK_SET); - - // To avoid crashes should any interrupt be called on the way to running the BIOS, - // don't actually map it in until it's good and ready to go. - if (custom_bios_image != NULL) delete[] custom_bios_image; - custom_bios_image_size = loadsz; - custom_bios_image_offset = segbase; - custom_bios_image = new unsigned char[custom_bios_image_size]; - - size_t readResult = fread(custom_bios_image,loadsz,1,romfp); - fclose(romfp); - if (readResult != 1) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in Run\n"); - return; - } - - if (IS_PC98_ARCH) { - // The PC-98 BIOS has a bank switching system where at least the last 32KB - // can be switched to an Initial Firmware Test BIOS, which initializes the - // system then switches back to the full 96KB visible during runtime. - // - // We can emulate the same if a file named ITF.ROM exists in the same directory - // as the BIOS image we were given. - // - // To enable multiple ITFs per ROM image, we first try .itf.rom - // before trying itf.rom, for the user's convenience. - FILE *itffp; - - itffp = getFSFile((bios + ".itf.rom").c_str(), &isz1, &isz2); - if (itffp == NULL) itffp = getFSFile((bios + ".ITF.ROM").c_str(), &isz1, &isz2); - if (itffp == NULL) itffp = getFSFile("itf.rom", &isz1, &isz2); - if (itffp == NULL) itffp = getFSFile("ITF.ROM", &isz1, &isz2); - - if (itffp != NULL && isz2 <= 0x8000ul) { - LOG_MSG("Found ITF (initial firmware test) BIOS image (0x%lx bytes)",(unsigned long)isz2); - - memset(PC98_ITF_ROM,0xFF,sizeof(PC98_ITF_ROM)); - readResult = fread(PC98_ITF_ROM,isz2,1,itffp); - fclose(itffp); - if (readResult != 1) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in Run\n"); - return; - } - PC98_ITF_ROM_init = true; - } - - IO_RegisterWriteHandler(0x43D,pc98_43d_write,IO_MB); - } - - custom_bios = true; - - /* boot it */ - throw int(8); - } - - bool bootbyDrive=false; - FILE *usefile_1=NULL; - FILE *usefile_2=NULL; - Bitu i=0; - uint32_t floppysize=0; - uint32_t rombytesize_1=0; - uint32_t rombytesize_2=0; - uint8_t drive = 'A'; - std::string cart_cmd=""; - Bitu max_seg; - - /* IBM PC: - * CS:IP = 0000:7C00 Load = 07C0:0000 - * SS:SP = ??? - * - * PC-98: - * CS:IP = 1FC0:0000 Load = 1FC0:0000 - * SS:SP = 0030:00D8 - * - * Reportedly PC-98 will load to 1FE0:0000 when booting the 1.44MB format (512 bytes per sector). - * Note that 0x1FC0:0000 leaves enough room for the 1024 bytes per sector format of PC-98. - */ - Bitu stack_seg=IS_PC98_ARCH ? 0x0030 : 0x7000; - Bitu load_seg;//=IS_PC98_ARCH ? 0x1FC0 : 0x07C0; - - if (MEM_TotalPages() > 0x9C) - max_seg = 0x9C00; - else - max_seg = MEM_TotalPages() << (12 - 4); - - if ((stack_seg+0x20) > max_seg) - stack_seg = max_seg - 0x20; - - /* if booting El Torito, the drive specified must be a CD-ROM drive */ - if (!el_torito.empty()) { - //get el-torito floppy from cdrom mounted at drive letter el_torito_cd_drive - char el_torito_cd_drive = toupper(el_torito[0]); - if (el_torito_cd_drive < 'A' || el_torito_cd_drive > 'Z') { - printError(); - return; - } - - if (IS_PC98_ARCH) { - /* PC-98 doesn't have a bootable CD-ROM specification... does it? - * By the time that became common the NEC basically switched to - * making IBM PC-AT compatible Windows 95 systems anyway. */ - printError(); - return; - } - - drive = 0; - if (!cmd->GetCount()) { - drive = 'A' + (dos_kernel_disabled?26:DOS_GetDefaultDrive()); - } - else if (cmd->GetCount() == 1) { - cmd->FindCommand(1, temp_line); - if (temp_line.length()==2&&toupper(temp_line[0])>='A'&&toupper(temp_line[0])<='Z'&&temp_line[1]==':') { - drive = toupper(temp_line[0]); +#endif + +std::string newstr=""; +std::string GetNewStr(const char *str) { + newstr = str?std::string(str):""; +#if defined(WIN32) + int flags = 0; +#ifdef WC_NO_BEST_FIT_CHARS + flags |= WC_NO_BEST_FIT_CHARS; +#endif + if (str&&dos.loaded_codepage!=437) { + char *temp = NULL; + wchar_t* wstr = NULL; + int reqsize = MultiByteToWideChar(CP_UTF8, 0, str, (int)(strlen(str)+1), NULL, 0); + if (reqsize>0 && (wstr = new wchar_t[reqsize]) && MultiByteToWideChar(CP_UTF8, 0, str, (int)(strlen(str)+1), wstr, reqsize)==reqsize) { + reqsize = WideCharToMultiByte(dos.loaded_codepage==808?866:(dos.loaded_codepage==859?858:(dos.loaded_codepage==872?855:(dos.loaded_codepage==951?950:dos.loaded_codepage))), flags, wstr, -1, NULL, 0, "\x07", NULL); + if (reqsize > 1 && (temp = new char[reqsize]) && WideCharToMultiByte(dos.loaded_codepage==808?866:(dos.loaded_codepage==859?858:(dos.loaded_codepage==872?855:(dos.loaded_codepage==951?950:dos.loaded_codepage))), flags, wstr, -1, (LPSTR)temp, reqsize, "\x07", NULL) == reqsize) + newstr = std::string(temp); + } + } +#endif + return newstr; +} + +void MenuBrowseCDImage(char drive, int num) { + if(control->SecureMode()) { + systemmessagebox(MSG_Get("ERROR"),MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); + return; + } + + if (Drives[drive-'A']&&!strncmp(Drives[drive-'A']->GetInfo(), "isoDrive ", 9)) { +#if !defined(HX_DOS) + std::string drive_info = std::string(Drives[drive - 'A']->GetInfo() + 9); + std::string drive_letter = dos_kernel_disabled ? std::to_string(num) : (std::string(1, drive) + ":"); + std::string drive_warn = formatString(MSG_Get("PROGRAM_CDDRIVE_WARN"), drive_letter.c_str(), drive_info.c_str()); + if (!systemmessagebox("Change CD Image",drive_warn.c_str(),"yesno","question", 1)) return; +#endif + } else + return; +#if !defined(HX_DOS) + char CurrentDir[512]; + std::vector options; + char * Temp_CurrentDir = CurrentDir; + // getcwd(Temp_CurrentDir, 512); + char const * lTheOpenFileName; + std::string files="", fname=""; + const char *lFilterPatterns[] = {"*.cdrom", "*.iso","*.cue","*.bin","*.chd","*.mdf","*.gog","*.ins","*.inst","*.CDROM", "*.ISO","*.CUE","*.BIN","*.CHD","*.MDF","*.GOG","*.INS","*.INST" }; + const char *lFilterDescription = "CD image files (*.cdrom, *.iso, *.cue, *.bin, *.chd, *.mdf, *.gog, *.ins, *.inst)"; + lTheOpenFileName = tinyfd_openFileDialog("Select a CD image file","", sizeof(lFilterPatterns) / sizeof(lFilterPatterns[0]),lFilterPatterns,lFilterDescription,0); + bool isempty = std::string(Drives[drive - 'A']->GetInfo() + 9) == "empty"; + if (lTheOpenFileName) { + isoDrive *cdrom = dynamic_cast(Drives[drive-'A']); + DOS_Drive *newDrive = NULL; + int error = -1; + uint8_t mediaid = 0xF8; + if (cdrom && dos_kernel_disabled) { + cdrom->setFileName(lTheOpenFileName); + if(isempty) { + newDrive = new isoDrive(drive, lTheOpenFileName, mediaid, error, options); + if(error) { + delete newDrive; + systemmessagebox(MSG_Get("ERROR"), MSG_Get("PROGRAM_CDMOUNT_ERROR"), "ok", "error", 1); + chdir(Temp_CurrentDir); + return; } - } - else { - printError(); - return; - } - - /* must be valid drive letter, C to Z */ - if (!isalpha(el_torito_cd_drive) || el_torito_cd_drive < 'C') { - WriteOut("El Torito emulation requires a proper CD-ROM drive letter\n"); - return; - } - - /* drive must not exist (as a hard drive) */ - if (imageDiskList[el_torito_cd_drive - 'A'] != NULL) { - WriteOut("El Torito CD-ROM drive specified already exists as a non-CD-ROM device\n"); - return; - } - - bool GetMSCDEXDrive(unsigned char drive_letter, CDROM_Interface **_cdrom); - - /* get the CD-ROM drive */ - CDROM_Interface *src_drive = NULL; - if (!GetMSCDEXDrive(el_torito_cd_drive - 'A', &src_drive)) { - WriteOut("El Torito CD-ROM drive specified is not actually a CD-ROM drive\n"); - return; - } - - /* "No emulation" boot is the only mode supported at this time. - * For floppy emulation boot, use IMGMOUNT and then boot the emulated floppy drive. */ - if (el_torito_mode != "noemu") { - WriteOut("Unsupported boot mode"); - return; - } - - unsigned char entries[2048], *entry, ent_num = 0; - int header_platform = -1, header_count = 0; - bool header_final = false; - int header_more = -1; - - /* Okay. Step #1: Scan the volume descriptors for the Boot Record. */ - unsigned long el_torito_base = 0, boot_record_sector = 0, el_torito_rba = (~0ul), el_torito_load_segment = 0, el_torito_sectors = 0/*VIRTUAL SECTORS*/; - unsigned char el_torito_mediatype = 0; - if (!ElTorito_ScanForBootRecord(src_drive, boot_record_sector, el_torito_base)) { - WriteOut("El Torito CD-ROM boot record not found\n"); - return; - } - - LOG_MSG("El Torito looking for mode '%s'",el_torito_mode.c_str()); - LOG_MSG("El Torito emulation: Found ISO 9660 Boot Record in sector %lu, pointing to sector %lu\n", - boot_record_sector, el_torito_base); - - /* Step #2: Parse the records. Each one is 32 bytes long */ - if (!src_drive->ReadSectorsHost(entries, false, el_torito_base, 1)) { - WriteOut("El Torito entries unreadable\n"); - return; - } - - /* for more information about what this loop is doing, read: - * http://download.intel.com/support/motherboards/desktop/sb/specscdrom.pdf - */ - for (ent_num = 0; ent_num < (2048 / 0x20); ent_num++) { - entry = entries + (ent_num * 0x20); - - if (memcmp(entry, "\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0", 32) == 0) - break; - - if (entry[0] == 0x01/*header*/) { - if (!ElTorito_ChecksumRecord(entry)) { - LOG_MSG("Warning: El Torito checksum error in header(0x01) entry\n"); - continue; - } - - if (header_count != 0) { - LOG_MSG("Warning: El Torito has more than one Header/validation entry\n"); - continue; - } - - if (header_final) { - LOG_MSG("Warning: El Torito has an additional header past the final header\n"); - continue; - } - - header_more = -1; - header_platform = entry[1]; - LOG_MSG("El Torito entry: first header platform=0x%02x\n", header_platform); - header_count++; - } - else if (entry[0] == 0x90/*header, more follows*/ || entry[0] == 0x91/*final header*/) { - if (header_final) { - LOG_MSG("Warning: El Torito has an additional header past the final header\n"); - continue; - } - - header_final = (entry[0] == 0x91); - header_more = (int)(((unsigned int)entry[2]) + (((unsigned int)entry[3]) << 8u)); - header_platform = entry[1]; - LOG_MSG("El Torito entry: first header platform=0x%02x more=%u final=%u\n", header_platform, header_more, header_final); - header_count++; - } - else { - if (header_more == 0) { - LOG_MSG("El Torito entry: Non-header entry count expired, ignoring record 0x%02x\n", entry[0]); - continue; - } - else if (header_more > 0) { - header_more--; - } - - if (entry[0] == 0x44) { - LOG_MSG("El Torito entry: ignoring extension record\n"); - } - else if (entry[0] == 0x00/*non-bootable*/) { - LOG_MSG("El Torito entry: ignoring non-bootable record\n"); - } - else if (entry[0] == 0x88/*bootable*/) { - if (header_platform == 0x00/*x86*/) { - unsigned char mediatype = entry[1] & 0xF; - unsigned short load_segment = ((unsigned int)entry[2]) + (((unsigned int)entry[3]) << 8); - unsigned char system_type = entry[4]; - unsigned short sector_count = ((unsigned int)entry[6]) + (((unsigned int)entry[7]) << 8); - unsigned long load_rba = ((unsigned int)entry[8]) + (((unsigned int)entry[9]) << 8) + - (((unsigned int)entry[10]) << 16) + (((unsigned int)entry[11]) << 24); - - LOG_MSG("El Torito entry: bootable x86 record mediatype=%u load_segment=0x%04x " - "system_type=0x%02x sector_count=%u load_rba=%lu\n", - mediatype, load_segment, system_type, sector_count, load_rba); - - /* already chose one, ignore */ - if (el_torito_rba != ~0UL) - continue; - - if ((mediatype == 0 && el_torito_mode == "noemu")) { - el_torito_rba = load_rba; - el_torito_mediatype = mediatype; - el_torito_load_segment = (load_segment != 0) ? load_segment : 0x7C0; - el_torito_sectors = sector_count; /* VIRTUAL EMULATED sectors not CD-ROM SECTORS */ - } - } - else { - LOG_MSG("El Torito entry: ignoring bootable non-x86 (platform_id=0x%02x) record\n", header_platform); - } - } - else { - LOG_MSG("El Torito entry: ignoring unknown record ID %02x\n", entry[0]); - } - } - } - - if (el_torito_rba == (~0ul) || el_torito_sectors == 0) { - WriteOut("Unable to locate bootable section\n"); - return; - } - - LOG_MSG("Using: rba=%lu virt-sectors=%lu load=0x%lx mediatype=%u", - (unsigned long)el_torito_rba, - (unsigned long)el_torito_sectors, - (unsigned long)el_torito_load_segment, - el_torito_mediatype); - - load_seg = el_torito_load_segment; - - /* round up to CD-ROM sectors and read */ - unsigned int bootcdsect = (el_torito_sectors + 3u) / 4u; /* 4 512-byte sectors per CD-ROM sector */ - if (bootcdsect == 0) bootcdsect = 1; - - for (unsigned int s=0;s < bootcdsect;s++) { - if (!src_drive->ReadSectorsHost(entries, false, el_torito_rba+s, 1)) { - WriteOut("El Torito boot sector unreadable\n"); - return; - } - - for(i=0;i<2048;i++) real_writeb((uint16_t)load_seg, (uint16_t)i+(s*2048), entries[i]); - } - - /* signal INT 13h to emulate a CD-ROM drive El Torito "no emulation" style */ - INT13_ElTorito_IDEInterface = -1; - INT13_ElTorito_NoEmuDriveNumber = 0x90; - INT13_ElTorito_NoEmuCDROMDrive = el_torito_cd_drive; - - /* this is required if INT 13h extensions are to correctly report what IDE controller the drive is connected to and master/slave */ - { - int x = IDE_MatchCDROMDrive(el_torito_cd_drive); - if (x >= 0) INT13_ElTorito_IDEInterface = (char)x; - LOG_MSG("CD-ROM drive IDE interface number %d",INT13_ElTorito_IDEInterface); - } - - SegSet16(cs, load_seg); - SegSet16(ds, 0); - SegSet16(es, 0); - reg_ip = 0; - reg_ebx = 0; - reg_esp = 0x100; - /* set up stack at a safe place */ - SegSet16(ss, (uint16_t)stack_seg); - reg_esi = 0; - reg_ecx = 0; - reg_ebp = 0; - reg_eax = 0; - /* ISOLINUX clearly assumes DL at entry contains the drive number and at no point from entry to INT 13h does it change the contents of DX */ - reg_edx = INT13_ElTorito_NoEmuDriveNumber; - #ifdef __WIN32__ - // let menu know it boots - menu.boot=true; - #endif - bootguest=false; - bootdrive=drive-65; - - /* forcibly exit the shell, the DOS kernel, and anything else by throwing an exception */ - throw int(2); - - return; - } - - if(!cmd->GetCount()) { - uint8_t drv = dos_kernel_disabled?26:DOS_GetDefaultDrive(); - if (drv < 4 && Drives[drv] && !strncmp(Drives[drv]->GetInfo(), "fatDrive ", 9)) { - drive = 'A' + drv; - bootbyDrive = true; - } else { - printError(); - return; - } - } else if (cmd->GetCount()==1) { - cmd->FindCommand(1, temp_line); - if (temp_line.length()==2&&toupper(temp_line[0])>='A'&&toupper(temp_line[0])<='Z'&&temp_line[1]==':') { - drive=toupper(temp_line[0]); - if ((drive != 'A') && (drive != 'C') && (drive != 'D')) { - printError(); - return; - } - bootbyDrive = true; - } - } - - if(!bootbyDrive) - while(i < cmd->GetCount()) { - if(cmd->FindCommand((unsigned int)(i+1), temp_line)) { - if ((temp_line == "/?") || (temp_line == "-?")) { - printError(); - return; - } - if((temp_line == "-l") || (temp_line == "-L")) { - /* Specifying drive... next argument then is the drive */ - bootbyDrive = true; - i++; - if(cmd->FindCommand((unsigned int)(i+1), temp_line)) { - if (temp_line.length()==1&&isdigit(temp_line[0])) - drive='A'+(temp_line[0]-'0'); - else - drive=toupper(temp_line[0]); - if ((drive != 'A') && (drive != 'C') && (drive != 'D')) { - printError(); - return; - } - - } else { - printError(); - return; - } - i++; - continue; - } - - if((temp_line == "-e") || (temp_line == "-E")) { - /* Command mode for PCJr cartridges */ - i++; - if(cmd->FindCommand((unsigned int)(i + 1), temp_line)) { - for(size_t ct = 0;ct < temp_line.size();ct++) temp_line[ct] = toupper(temp_line[ct]); - cart_cmd = temp_line; - } else { - printError(); - return; - } - i++; - continue; - } - - if(imageDiskList[0] != NULL || imageDiskList[1] != NULL) { - WriteOut(MSG_Get("PROGRAM_BOOT_IMAGE_MOUNTED")); - return; - } - - if (i >= MAX_SWAPPABLE_DISKS) { - return; //TODO give a warning. - } - - uint32_t rombytesize=0; - bool readonly=wpcolon&&temp_line.length()>1&&temp_line[0]==':'; - if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_IMAGE_OPEN"), readonly?temp_line.c_str()+1:temp_line.c_str()); - FILE *usefile = getFSFile(temp_line.c_str(), &floppysize, &rombytesize); - if(usefile != NULL) { - char tmp[256]; - - if (newDiskSwap[i] != NULL) { - newDiskSwap[i]->Release(); - newDiskSwap[i] = NULL; - } - - fseeko64(usefile, 0L, SEEK_SET); - size_t readResult = fread(tmp,256,1,usefile); // look for magic signatures - if (readResult != 1) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in Run\n"); - return; - } - - const char *ext = strrchr(temp_line.c_str(),'.'), *fname=readonly?temp_line.c_str()+1:temp_line.c_str(); - - if (ext != NULL && !strcasecmp(ext, ".d88")) { - newDiskSwap[i] = new imageDiskD88(usefile, fname, floppysize, false); - } - else if (!memcmp(tmp,"VFD1.",5)) { /* FDD files */ - newDiskSwap[i] = new imageDiskVFD(usefile, fname, floppysize, false); - } - else if (!memcmp(tmp,"T98FDDIMAGE.R0\0\0",16)) { - newDiskSwap[i] = new imageDiskNFD(usefile, fname, floppysize, false, 0); - } - else if (!memcmp(tmp,"T98FDDIMAGE.R1\0\0",16)) { - newDiskSwap[i] = new imageDiskNFD(usefile, fname, floppysize, false, 1); - } - else { - newDiskSwap[i] = new imageDisk(usefile, fname, floppysize, false); - } - newDiskSwap[i]->Addref(); - if (newDiskSwap[i]->active && !newDiskSwap[i]->hardDrive) incrementFDD(); //moved from imageDisk constructor - - if (usefile_1==NULL) { - usefile_1=usefile; - rombytesize_1=rombytesize; - } else { - usefile_2=usefile; - rombytesize_2=rombytesize; - } - } else { - if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_IMAGE_NOT_OPEN"), readonly?temp_line.c_str()+1:temp_line.c_str()); - return; - } - - } - i++; - } - - if (!bootbyDrive) { - if (i == 0) { - if (!quiet) WriteOut("No images specified"); - return; - } - - if (i > 1) { - /* if more than one image is given, then this drive becomes the focus of the swaplist */ - if (swapInDisksSpecificDrive >= 0 && swapInDisksSpecificDrive != (drive - 65)) { - if (!quiet) WriteOut("Multiple disk images specified and another drive is already connected to the swap list"); - return; - } - else if (swapInDisksSpecificDrive < 0 && swaponedrive) { - swapInDisksSpecificDrive = drive - 65; - } - - /* transfer to the diskSwap array */ - for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { - if (diskSwap[si] != NULL) { - diskSwap[si]->Release(); - diskSwap[si] = NULL; - } - - diskSwap[si] = newDiskSwap[si]; - newDiskSwap[si] = NULL; - } - - swapPosition = 0; - swapInDisks(-1); - } - else { - if (swapInDisksSpecificDrive == (drive - 65)) { - /* if we're replacing the diskSwap drive clear it now */ - for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { - if (diskSwap[si] != NULL) { - diskSwap[si]->Release(); - diskSwap[si] = NULL; - } - } - - swapInDisksSpecificDrive = -1; - } - - /* attach directly without using the swap list */ - if (imageDiskList[drive-65] != NULL) { - imageDiskChange[drive-65] = true; - imageDiskList[drive-65]->Release(); - imageDiskList[drive-65] = NULL; - } - - imageDiskList[drive-65] = newDiskSwap[0]; - newDiskSwap[0] = NULL; - } - } - - if(imageDiskList[drive-65]==NULL) { - if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_UNABLE"), drive); - return; - } - - // .D88 images come from PC-88 which usually means the boot sector is full - // of Z80 executable code, therefore it's very unlikely the boot sector will - // work with our x86 emulation! - // - // If the user is REALLY REALLY SURE they want to try executing Z80 bootsector - // code as x86, they're free to use --force. - // - // However PC-98 games are also distributed as .D88 images and therefore - // we probably CAN boot the image. - // - // It depends on the fd_type field of the image. - if (!force && imageDiskList[drive-65]->class_id == imageDisk::ID_D88) { - if (reinterpret_cast(imageDiskList[drive-65])->fd_type_major == imageDiskD88::DISKTYPE_2D) { - if (!quiet) WriteOut("The D88 image appears to target PC-88 and cannot be booted."); - return; - } - } - - - bootSector bootarea; - - if (imageDiskList[drive-65]->getSectSize() > sizeof(bootarea)) { - if (!quiet) WriteOut("Bytes/sector too large"); - return; - } - - /* clear the disk change flag. - * Most OSes don't expect the disk change error signal when they first boot up */ - imageDiskChange[drive-65] = false; - - bool has_read = false; - bool pc98_sect128 = false; - unsigned int bootsize = imageDiskList[drive-65]->getSectSize(); - - if (!has_read && IS_PC98_ARCH && drive < 'C') { - /* this may be one of those odd FDD images where track 0, head 0 is all 128-byte sectors - * and the rest of the disk is 256-byte sectors. */ - if (imageDiskList[drive - 65]->Read_Sector(0, 0, 1, (uint8_t *)&bootarea, 128) == 0 && - imageDiskList[drive - 65]->Read_Sector(0, 0, 2, (uint8_t *)&bootarea + 128, 128) == 0 && - imageDiskList[drive - 65]->Read_Sector(0, 0, 3, (uint8_t *)&bootarea + 256, 128) == 0 && - imageDiskList[drive - 65]->Read_Sector(0, 0, 4, (uint8_t *)&bootarea + 384, 128) == 0) { - LOG_MSG("First sector is 128 byte/sector. Booting from first four sectors."); - has_read = true; - bootsize = 512; // 128 x 4 - pc98_sect128 = true; - } - } - - if (!has_read && IS_PC98_ARCH && drive < 'C') { - /* another nonstandard one with track 0 having 256 bytes/sector while the rest have 1024 bytes/sector */ - if (imageDiskList[drive - 65]->Read_Sector(0, 0, 1, (uint8_t *)&bootarea, 256) == 0 && - imageDiskList[drive - 65]->Read_Sector(0, 0, 2, (uint8_t *)&bootarea + 256, 256) == 0 && - imageDiskList[drive - 65]->Read_Sector(0, 0, 3, (uint8_t *)&bootarea + 512, 256) == 0 && - imageDiskList[drive - 65]->Read_Sector(0, 0, 4, (uint8_t *)&bootarea + 768, 256) == 0) { - LOG_MSG("First sector is 256 byte/sector. Booting from first two sectors."); - has_read = true; - bootsize = 1024; // 256 x 4 - pc98_sect128 = true; - } - } - - /* NTS: Load address is 128KB - sector size */ - if (loadseg_user > 0) { /* Some PC-98 games have floppy boot code that suggests the boot segment isn't always 0x1FC0 like PC-9821 hardware does? */ - load_seg=(unsigned int)loadseg_user; - } - else { - unsigned int max_seg = std::min((unsigned int)(MEM_TotalPages()*(4096u/16u)/*pages to paragraphs*/),0xC000u); - if (IS_PC98_ARCH) - load_seg=std::min(max_seg,0x2000u/*128KB mark*/) - (bootsize/16U); /* normally 0x1FC0 (1024 byte/sector) or 0x1FE0 (512 byte/sector) */ - else - load_seg=std::min(max_seg,0x800u/*32KB mark*/) - 0x40u/*1KB*/; /* normally 0x07C0 */ - } - - if (!has_read) { - if (imageDiskList[drive - 65]->Read_Sector(0, 0, 1, (uint8_t *)&bootarea) != 0) { - if (!quiet) WriteOut("Error reading drive"); - return; - } - } - - Bitu pcjr_hdr_length = 0; - uint8_t pcjr_hdr_type = 0; // not a PCjr cartridge - if ((bootarea.rawdata[0]==0x50) && (bootarea.rawdata[1]==0x43) && (bootarea.rawdata[2]==0x6a) && (bootarea.rawdata[3]==0x72)) { - pcjr_hdr_type = 1; // JRipCart - pcjr_hdr_length = 0x200; - } else if ((bootarea.rawdata[56]==0x50) && (bootarea.rawdata[57]==0x43) && (bootarea.rawdata[58]==0x4a) && (bootarea.rawdata[59]==0x52)) { - pcjr_hdr_type = 2; // PCJRCart - pcjr_hdr_length = 0x80; - } - - if (pcjr_hdr_type > 0) { - if (machine!=MCH_PCJR&&!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_CART_WO_PCJR")); - else { - uint8_t rombuf[65536]; - Bits cfound_at=-1; - if (cart_cmd!="") { - /* read cartridge data into buffer */ - fseek(usefile_1, (long)pcjr_hdr_length, SEEK_SET); - size_t readResult = fread(rombuf, 1, rombytesize_1-pcjr_hdr_length, usefile_1); - if (readResult != rombytesize_1 - pcjr_hdr_length) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in Run\n"); - return; - } - - char cmdlist[1024]; - cmdlist[0]=0; - Bitu ct=6; - Bits clen=rombuf[ct]; - char buf[257]; - if (cart_cmd=="?") { - while (clen!=0) { - safe_strncpy(buf,(char*)&rombuf[ct+1],clen); - buf[clen]=0; - upcase(buf); - strcat(cmdlist," "); - strcat(cmdlist,buf); - ct+=1u+(Bitu)clen+3u; - if (ct>sizeof(cmdlist)) break; - clen=rombuf[ct]; - } - if (ct>6) { - if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_CART_LIST_CMDS"),cmdlist); - } else { - if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_CART_NO_CMDS")); - } - for(Bitu dct=0;dctRelease(); - diskSwap[dct]=NULL; - } - } - //fclose(usefile_1); //delete diskSwap closes the file - return; - } else { - while (clen!=0) { - safe_strncpy(buf,(char*)&rombuf[ct+1],clen); - buf[clen]=0; - upcase(buf); - strcat(cmdlist," "); - strcat(cmdlist,buf); - ct+=1u+(Bitu)clen; - - if (cart_cmd==buf) { - cfound_at=(Bits)ct; - break; - } - - ct+=3; - if (ct>sizeof(cmdlist)) break; - clen=rombuf[ct]; - } - if (cfound_at<=0) { - if (ct>6) { - if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_CART_LIST_CMDS"),cmdlist); - } else { - if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_CART_NO_CMDS")); - } - for(Bitu dct=0;dctRelease(); - diskSwap[dct]=NULL; - } - } - //fclose(usefile_1); //Delete diskSwap closes the file - return; - } - } - } - - void PreparePCJRCartRom(void); - PreparePCJRCartRom(); - - if (usefile_1==NULL) return; - - uint32_t sz1,sz2; - FILE *tfile = getFSFile("system.rom", &sz1, &sz2, true); - if (tfile!=NULL) { - fseek(tfile, 0x3000L, SEEK_SET); - uint32_t drd=(uint32_t)fread(rombuf, 1, 0xb000, tfile); - if (drd==0xb000) { - for(i=0;i<0xb000;i++) phys_writeb((PhysPt)(0xf3000+i),rombuf[i]); - } - fclose(tfile); - } - - if (usefile_2!=NULL) { - unsigned int romseg_pt=0; - - fseek(usefile_2, 0x0L, SEEK_SET); - size_t readResult = fread(rombuf, 1, pcjr_hdr_length, usefile_2); - if (readResult != pcjr_hdr_length) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in Run\n"); - return; - } - - if (pcjr_hdr_type == 1) { - romseg_pt=host_readw(&rombuf[0x1ce]); - } else { - fseek(usefile_2, 0x61L, SEEK_SET); - int scanResult = fscanf(usefile_2, "%4x", &romseg_pt); - if (scanResult == 0) { - LOG(LOG_IO, LOG_ERROR) ("Scanning error in Run\n"); - return; - } - } - /* read cartridge data into buffer */ - fseek(usefile_2, (long)pcjr_hdr_length, SEEK_SET); - readResult = fread(rombuf, 1, rombytesize_2-pcjr_hdr_length, usefile_2); - if (readResult != rombytesize_2 - pcjr_hdr_length) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in Run\n"); - return; - } - //fclose(usefile_2); //usefile_2 is in diskSwap structure which should be deleted to close the file - - /* write cartridge data into ROM */ - for(i=0;iRelease(); - diskSwap[dct]=NULL; - } - } - - - if (cart_cmd=="") { - uint32_t old_int18=mem_readd(0x60); - /* run cartridge setup */ - SegSet16(ds,romseg); - SegSet16(es,romseg); - SegSet16(ss,0x8000); - reg_esp=0xfffe; - CALLBACK_RunRealFar(romseg,0x0003); - - uint32_t new_int18=mem_readd(0x60); - if (old_int18!=new_int18) { - /* boot cartridge (int18) */ - SegSet16(cs,RealSeg(new_int18)); - reg_ip = RealOff(new_int18); - } - } else { - if (cfound_at>0) { - /* run cartridge setup */ - SegSet16(ds,dos.psp()); - SegSet16(es,dos.psp()); - CALLBACK_RunRealFar((uint16_t)romseg,(uint16_t)cfound_at); - } - } - } - } else { - extern const char* RunningProgram; - - if (max_seg < (IS_PC98_ARCH?0x2000:0x0800)) LOG(LOG_MISC,LOG_WARN)("Booting a guest OS with too small amount of RAM may not work correctly"); - - /* Other versions of MS-DOS/PC-DOS have their own requirements about memory: - * - IBM PC-DOS 1.0/1.1: not too picky, will boot with as little as 32KB even though - * it was intended for the average model with 64KB of RAM. - * - * - IBM PC-DOS 2.1: requires at least 44KB of RAM. will crash on boot otherwise. - * - * - MS-DOS 3.2: requires at least 64KB to boot without crashing, 80KB to make it - * to the command line without halting at "configuration too big for - * memory"*/ - - /* TODO: Need a configuration option or a BOOT command option where the user can - * dictate where we put the stack: if we put it at 0x7000 or top of memory - * (default) or just below the boot sector, or... */ - - if((bootarea.rawdata[0]==0) && (bootarea.rawdata[1]==0)) { - if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_UNABLE"), drive); - return; - } - - char msg[512] = {0}; - const uint8_t page=real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE); - if (!dos_kernel_disabled && (convimg == 1 || (convertimg && convimg == -1))) { - unsigned int drv = 2, nextdrv = 2; - Section_prop *sec = static_cast(control->GetSection("dosbox")); - int freeMB = sec->Get_int("convert fat free space"), timeout = sec->Get_int("convert fat timeout"); - for (unsigned int d=2;dGetInfo(), "fatDrive ", 9) && strncmp(Drives[drv]->GetInfo(), "isoDrive ", 9)) { - if (drv==ZDRIVE_NUM && !static_cast(control->GetSection("dos"))->Get_bool("drive z convert fat")) continue; - while (imageDiskList[nextdrv]) nextdrv++; - if (nextdrv>=MAX_DISK_IMAGES) break; - if (quiet<2) { - size_t len = strlen(msg); - if (!len) { - strcat(msg, CURSOR_POS_COL(page)>0?"\r\n":""); - len = strlen(msg); - } - strcat(msg, "Converting drive "); - strcat(msg, std::string(1, 'A'+drv).c_str()); - strcat(msg, ": to FAT..."); - LOG_MSG("%s", msg+len); - strcat(msg, "\r\n"); - if (!quiet) { - uint16_t s = (uint16_t)strlen(msg); - DOS_WriteFile(STDERR,(uint8_t*)msg,&s); - *msg = 0; - } - } - Overlay_Drive *od = dynamic_cast(Drives[drv]); - imageDisk *imagedrv = new imageDisk(Drives[drv], drv, (convertro || Drives[drv]->readonly || (od && od->ovlreadonly)) ? 0 : freeMB, timeout); - if (imagedrv && imagedrv->ffdd) { - imageDiskList[nextdrv] = imagedrv; - imagedrv->Addref(); - bool ide_slave = false; - signed char ide_index = -1; - IDE_Auto(ide_index,ide_slave); - IDE_Hard_Disk_Attach((signed char)ide_index, ide_slave, nextdrv); - } else if (imagedrv) - delete imagedrv; - } - } - } - - if (quiet<2) { - if (!strlen(msg)) strcat(msg, CURSOR_POS_COL(page)>0?"\r\n":""); - strcat(msg, MSG_Get("PROGRAM_BOOT_BOOTING")); - strcat(msg, std::string(1, drive).c_str()); - strcat(msg, "...\r\n"); - uint16_t s = (uint16_t)strlen(msg); - DOS_WriteFile(STDERR,(uint8_t*)msg,&s); - } - if (IS_DOSV) { - uint8_t mode = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_MODE); - if (mode == 3 || mode == 0x70 || mode == 0x72 || mode == 0x78) { - uint16_t oldax=reg_ax; - reg_ax = 0x12; - CALLBACK_RunRealInt(0x10); - reg_ax = oldax; - } - } - - for(i=0;itcount=true; - GetDMAChannel(3)->tcount=true; - } - else { - if (!IS_TANDY_ARCH && floppysize!=0) GetDMAChannel(2)->tcount=true; - } - - /* standard method */ - if (IS_PC98_ARCH) { - /* Based on a CPU register dump at boot time on a real PC-9821: - * - * DUMP: - * - * SP: 00D8 SS: 0030 ES: 1FE0 DS: 0000 CS: 1FE0 FL: 0246 BP: 0000 - * DI: 055C SI: 1FE0 DX: 0001 CX: 0200 BX: 0200 AX: 0030 IP: 0000 - * - * So: - * - * Stack at 0030:00D8 - * - * CS:IP at load_seg:0000 - * - * load_seg at 0x1FE0 which on the original 128KB PC-98 puts it at the top of memory - * - */ - SegSet16(cs, (uint16_t)load_seg); - SegSet16(ds, 0x0000); - SegSet16(es, (uint16_t)load_seg); - reg_ip = 0; - reg_ebx = 0x200; - reg_esp = 0xD8; - /* set up stack at a safe place */ - SegSet16(ss, (uint16_t)stack_seg); - reg_esi = (uint32_t)load_seg; - reg_ecx = 0x200; - reg_ebp = 0; - reg_eax = 0x30; - reg_edx = 0x1; - - /* It seems 640x200 8-color digital mode is the state of the graphics hardware when the - * BIOS boots the OS, and some games like Ys II assume the hardware is in this state. - * - * If I am wrong, you can pass --pc98-640x400 as a command line option to disable this. */ - if (pc98_640x200) { - reg_eax = 0x4200; // setup 640x200 graphics - reg_ecx = 0x8000; // lower - CALLBACK_RunRealInt(0x18); - } - else { - reg_eax = 0x4200; // setup 640x400 graphics - reg_ecx = 0xC000; // full - CALLBACK_RunRealInt(0x18); - } - - /* Some HDI images of Orange House games need this option because it assumes NEC MOUSE.COM - * behavior where mouse driver init and reset show the graphics layer. Unfortunately the HDI - * image uses QMOUSE which does not show the graphics layer. Use this option with those - * HDI images to make them playable anyway. */ - if (pc98_show_graphics) { - reg_eax = 0x4000; // show graphics - CALLBACK_RunRealInt(0x18); - } - else { - reg_eax = 0x4100; // hide graphics (normal state of graphics layer on startup). INT 33h emulation might have enabled it. - CALLBACK_RunRealInt(0x18); - } - - /* PC-98 MS-DOS boot sector behavior suggests that the BIOS does a CALL FAR - * to the boot sector, and the boot sector can RETF back to the BIOS on failure. */ - CPU_Push16((uint16_t)(BIOS_bootfail_code_offset >> 4)); /* segment */ - CPU_Push16(BIOS_bootfail_code_offset & 0xF); /* offset */ - - /* clear the text layer */ - for (i=0;i < (80*25*2);i += 2) { - mem_writew((PhysPt)(0xA0000+i),0x0000); - mem_writew((PhysPt)(0xA2000+i),0x00E1); - } - - /* hide the cursor */ - void PC98_show_cursor(bool show); - PC98_show_cursor(false); - - /* There is a byte at 0x584 that describes the boot drive + type. - * This is confirmed in Neko Project II source and by the behavior - * of an MS-DOS boot disk formatted by a PC-98 system. - * - * There are three values for three different floppy formats, and - * one for hard drives */ - uint32_t heads,cyls,sects,ssize; - - imageDiskList[drive-65]->Get_Geometry(&heads,&cyls,§s,&ssize); - - uint8_t RDISK_EQUIP = 0; /* 488h (ref. PC-9800 Series Technical Data Book - BIOS 1992 page 233 */ - /* bits [7:4] = 640KB FD drives 3:0 - * bits [3:0] = 1MB FD drives 3:0 */ - uint8_t F2HD_MODE = 0; /* 493h (ref. PC-9800 Series Technical Data Book - BIOS 1992 page 233 */ - /* bits [7:4] = 640KB FD drives 3:0 ?? - * bits [3:0] = 1MB FD drives 3:0 ?? */ - uint8_t F2DD_MODE = 0; /* 5CAh (ref. PC-9800 Series Technical Data Book - BIOS 1992 page 233 */ - /* bits [7:4] = 640KB FD drives 3:0 ?? - * bits [3:0] = 1MB FD drives 3:0 ?? */ - uint16_t disk_equip = 0, disk_equip_144 = 0; - uint8_t scsi_equip = 0; - - /* FIXME: MS-DOS appears to be able to see disk image B: but only - * if the disk format is the same, for some reason. - * - * So, apparently you cannot put a 1.44MB image in drive A: - * and a 1.2MB image in drive B: */ - - for (i=0;i < 2;i++) { - if (imageDiskList[i] != NULL) { - disk_equip |= (0x0111u << i); /* 320KB[15:12] 1MB[11:8] 640KB[7:4] unit[1:0] */ - disk_equip_144 |= (1u << i); - F2HD_MODE |= (0x11u << i); - } - } - - for (i=0;i < 2;i++) { - if (imageDiskList[i+2] != NULL) { - scsi_equip |= (1u << i); - - uint16_t m = 0x460u + ((uint16_t)i * 4u); - - mem_writeb(m+0u,sects); - mem_writeb(m+1u,heads); - mem_writew(m+2u,(cyls & 0xFFFu) + (ssize == 512u ? 0x1000u : 0u) + (ssize == 1024u ? 0x2000u : 0) + 0x8000u/*NP2:hwsec*/); - } - } - - mem_writew(0x55C,disk_equip); /* disk equipment (drive 0 is present) */ - mem_writew(0x5AE,disk_equip_144); /* disk equipment (drive 0 is present, 1.44MB) */ - mem_writeb(0x482,scsi_equip); - mem_writeb(0x488,RDISK_EQUIP); /* RAM disk equip */ - mem_writeb(0x493,F2HD_MODE); - mem_writeb(0x5CA,F2DD_MODE); - - if (drive >= 'C') { - /* hard drive */ - mem_writeb(0x584,0xA0/*type*/ + (drive - 'C')/*drive*/); - } - else if ((ssize == 1024 && heads == 2 && cyls == 77 && sects == 8) || pc98_sect128) { - mem_writeb(0x584,0x90/*type*/ + (drive - 65)/*drive*/); /* 1.2MB 3-mode */ - } - else if (ssize == 512 && heads == 2 && cyls == 80 && sects == 18) { - mem_writeb(0x584,0x30/*type*/ + (drive - 65)/*drive*/); /* 1.44MB */ - } - else { - // FIXME - LOG_MSG("PC-98 boot: Unable to determine boot drive type for ssize=%u heads=%u cyls=%u sects=%u. Guessing.", - ssize,heads,cyls,sects); - - mem_writeb(0x584,(ssize < 1024 ? 0x30 : 0x90)/*type*/ + (drive - 65)/*drive*/); - } - } - else { - // Toshiba DOS bootloader checks the floppy disk drives running in the BIOS working area. - if(IS_J3100) { - mem_writeb(BIOS_DRIVE_RUNNING, 0x01); - mem_writeb(BIOS_DISK_MOTOR_TIMEOUT, 10); - } - SegSet16(cs, 0); - SegSet16(ds, 0); - SegSet16(es, 0); - reg_ip = (uint16_t)(load_seg<<4); - reg_ebx = (uint32_t)(load_seg<<4); //Real code probably uses bx to load the image - reg_esp = 0x100; - /* set up stack at a safe place */ - SegSet16(ss, (uint16_t)stack_seg); - reg_esi = 0; - reg_ecx = 1; - reg_ebp = 0; - reg_eax = 0; - reg_edx = 0; //Head 0 - if (drive >= 'A' && drive <= 'B') - reg_edx += (unsigned int)(drive-'A'); - else if (drive >= 'C' && drive <= 'Z') - reg_edx += 0x80u+(unsigned int)(drive-'C'); - } - #ifdef __WIN32__ - // let menu know it boots - menu.boot=true; - #endif - bootguest=false; - bootdrive=drive-65; - - /* forcibly exit the shell, the DOS kernel, and anything else by throwing an exception */ - throw int(2); - } - } - }; - - static void BOOT_ProgramStart(Program * * make) { - *make=new BOOT; - } - - void runBoot(const char *str) { - BOOT boot; - boot.cmd=new CommandLine("BOOT", str); - boot.Run(); - } - - class LOADROM : public Program { - public: - void Run(void) override { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut(MSG_Get("PROGRAM_LOADROM_HELP")); - return; - } - - if (!(cmd->FindCommand(1, temp_line))) { - WriteOut(MSG_Get("PROGRAM_LOADROM_SPECIFY_FILE")); - return; - } - - uint8_t drive; - char fullname[DOS_PATHLENGTH]; - localDrive* ldp=nullptr; - if (!DOS_MakeName(temp_line.c_str(),fullname,&drive)) return; - - try { - /* try to read ROM file into buffer */ - ldp=dynamic_cast(Drives[drive]); - if(!ldp) return; - - FILE *tmpfile = ldp->GetSystemFilePtr(fullname, "rb"); - if(tmpfile == NULL) { - WriteOut(MSG_Get("PROGRAM_LOADROM_CANT_OPEN")); - return; - } - fseek(tmpfile, 0L, SEEK_END); - if (ftell(tmpfile)>0x8000) { - WriteOut(MSG_Get("PROGRAM_LOADROM_TOO_LARGE")); - fclose(tmpfile); - return; - } - fseek(tmpfile, 0L, SEEK_SET); - uint8_t rom_buffer[0x8000]; - Bitu data_read = fread(rom_buffer, 1, 0x8000, tmpfile); - fclose(tmpfile); - - /* try to identify ROM type */ - PhysPt rom_base = 0; - if (data_read >= 0x4000 && rom_buffer[0] == 0x55 && rom_buffer[1] == 0xaa && - (rom_buffer[3] & 0xfc) == 0xe8 && strncmp((char*)(&rom_buffer[0x1e]), "IBM", 3) == 0) { - - if (!IS_EGAVGA_ARCH) { - WriteOut(MSG_Get("PROGRAM_LOADROM_INCOMPATIBLE")); - return; - } - rom_base = PhysMake(0xc000, 0); // video BIOS - } - else if (data_read == 0x8000 && rom_buffer[0] == 0xe9 && rom_buffer[1] == 0x8f && - rom_buffer[2] == 0x7e && strncmp((char*)(&rom_buffer[0x4cd4]), "IBM", 3) == 0) { - - rom_base = PhysMake(0xf600, 0); // BASIC - } - - if (rom_base) { - /* write buffer into ROM */ - for (Bitu i=0; iFindCommand(1, temp_line))) { - WriteOut("Must specify BIOS file to load.\n"); - return; - } - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut(MSG_Get("PROGRAM_BIOSTEST_HELP")); - return; - } - - uint8_t drive; - char fullname[DOS_PATHLENGTH]; - localDrive* ldp = nullptr; - if (!DOS_MakeName(temp_line.c_str(), fullname, &drive)) return; - - try { - /* try to read ROM file into buffer */ - ldp = dynamic_cast(Drives[drive]); - if (!ldp) return; - - FILE* tmpfile = ldp->GetSystemFilePtr(fullname, "rb"); - if (tmpfile == NULL) { - WriteOut("Can't open a file"); - return; - } - fseek(tmpfile, 0L, SEEK_END); - if (ftell(tmpfile) > 64 * 1024) { - WriteOut("BIOS File too large"); - fclose(tmpfile); - return; - } - fseek(tmpfile, 0L, SEEK_SET); - uint8_t buffer[64 * 1024]; - Bitu data_read = fread(buffer, 1, sizeof(buffer), tmpfile); - fclose(tmpfile); - - uint32_t rom_base = PhysMake(0xf000, 0); // override regular dosbox bios - /* write buffer into ROM */ - for (Bitu i = 0; i < data_read; i++) phys_writeb((PhysPt)(rom_base + i), buffer[i]); - - //Start executing this bios - memset(&cpu_regs, 0, sizeof(cpu_regs)); - memset(&Segs, 0, sizeof(Segs)); - - SegSet16(cs, 0xf000); - reg_eip = 0xfff0; - } - catch (...) { - return; - } - } - }; - - static void BIOSTEST_ProgramStart(Program** make) { - *make = new BIOSTEST; - } - #endif - - /* non-bootable MS-DOS floppy disk boot sector. - * will be modified as appropriate. */ - unsigned char this_is_not_a_bootable_partition[512] = { - 0xeb, 0x3c, 0x90, 0x6d, 0x6b, 0x64, 0x6f, 0x73, 0x66, 0x73, 0x00, 0x00, 0x02, 0x01, 0x01, 0x00, - 0x02, 0xe0, 0x00, 0x40, 0x0b, 0xf0, 0x09, 0x00, 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xce, 0xf2, 0x4e, 0xda, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x0e, 0x1f, - 0xbe, 0x5b, 0x7c, 0xac, 0x22, 0xc0, 0x74, 0x0b, 0x56, 0xb4, 0x0e, 0xbb, 0x07, 0x00, 0xcd, 0x10, - 0x5e, 0xeb, 0xf0, 0x32, 0xe4, 0xcd, 0x16, 0xcd, 0x19, 0xeb, 0xfe, 0x54, 0x68, 0x69, 0x73, 0x20, - 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x20, 0x64, 0x69, 0x73, 0x6b, 0x2e, 0x20, 0x20, 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, - 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x61, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x20, 0x66, 0x6c, 0x6f, 0x70, 0x70, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, - 0x72, 0x79, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x20, 0x2e, 0x2e, 0x2e, 0x20, 0x0d, 0x0a, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa - }; - - const uint8_t freedos_mbr[] = { - 0xFA,0xFC,0x31,0xC0,0x8E,0xD0,0x8E,0xD8,0xBD,0x00,0x7C,0x8D,0x66,0xE0,0xFB,0xB8, - 0xE0,0x1F,0x8E,0xC0,0x89,0xEE,0x89,0xEF,0xB9,0x00,0x01,0xF3,0xA5,0xEA,0x22,0x7C, // 10h - 0xE0,0x1F,0x8E,0xD8,0x8E,0xD0,0x31,0xC0,0x8E,0xC0,0x8D,0xBE,0xBE,0x01,0xF6,0x05, // 20h - 0x80,0x75,0x6D,0x83,0xC7,0x10,0x81,0xFF,0xFE,0x7D,0x72,0xF2,0xE8,0xC4,0x00,0x6E, - 0x6F,0x20,0x61,0x63,0x74,0x69,0x76,0x65,0x20,0x70,0x61,0x72,0x74,0x69,0x74,0x69, // 40h - 0x6F,0x6E,0x20,0x66,0x6F,0x75,0x6E,0x64,0x00,0xEB,0xFE,0xE8,0xA5,0x00,0x72,0x65, - 0x61,0x64,0x20,0x65,0x72,0x72,0x6F,0x72,0x20,0x77,0x68,0x69,0x6C,0x65,0x20,0x72, - 0x65,0x61,0x64,0x69,0x6E,0x67,0x20,0x64,0x72,0x69,0x76,0x65,0x00,0xEB,0xDA,0xE8, - 0x81,0x00,0x70,0x61,0x72,0x74,0x69,0x74,0x69,0x6F,0x6E,0x20,0x73,0x69,0x67,0x6E, // 80h - 0x61,0x74,0x75,0x72,0x65,0x20,0x21,0x3D,0x20,0x35,0x35,0x41,0x41,0x00,0xEB,0xB9, - 0xE8,0x10,0x00,0x72,0xB6,0x26,0x81,0x3E,0xFE,0x7D,0x55,0xAA,0x75,0xD1,0xEA,0x00, - 0x7C,0x00,0x00,0xBB,0xAA,0x55,0xB4,0x41,0xCD,0x13,0x72,0x32,0x81,0xFB,0x55,0xAA, - 0x75,0x2C,0xF6,0xC1,0x01,0x74,0x27,0xEB,0x10,0x10,0x00,0x04,0x00,0x00,0x7C,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8B,0x45,0x08,0xA3,0xD1,0x7C,0x8B, - 0x45,0x0A,0xA3,0xD3,0x7C,0xB8,0x00,0x42,0xBE,0xC9,0x7C,0xCD,0x13,0xC3,0xB8,0x04, - 0x02,0xBB,0x00,0x7C,0x8B,0x4D,0x02,0x8A,0x75,0x01,0xCD,0x13,0xC3,0x31,0xDB,0xB4, - 0x0E,0xCD,0x10,0x5E,0xAC,0x56,0x3C,0x00,0x75,0xF3,0xC3,0x00,0x00,0x00,0x00,0x00, //100h - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //110h - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //120h - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //140h - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //180h - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x73,0x65,0xE3,0x3F,0xBF,0x00,0x00, //1B0h - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xAA - }; - #ifdef WIN32 - #include - #endif - - static void lba2chs3(unsigned char *b3,uint32_t lba,const unsigned int gc,const unsigned int gh,const unsigned int gs) { - const unsigned int s = (unsigned int)(lba % (uint32_t)gs) + 1u; lba /= (uint32_t)gs; - const unsigned int h = (unsigned int)(lba % (uint32_t)gh); lba /= (uint32_t)gh; - const unsigned int c = (unsigned int) lba; - - (void)gc; - - b3[0] = h; - b3[1] = s | ((c >> 8u) << 6u); /* [7:6] cylinder bits 8-9 [5:0] sector */ - b3[2] = c; - } - - class IMGMAKE : public Program { - public: - #ifdef WIN32 - bool OpenDisk(HANDLE* f, OVERLAPPED* o, uint8_t* name) const { - o->hEvent = INVALID_HANDLE_VALUE; - *f = CreateFile( (LPCSTR)name, GENERIC_READ | GENERIC_WRITE, - 0, // exclusive access - NULL, // default security attributes - OPEN_EXISTING, - FILE_FLAG_OVERLAPPED, - NULL ); - - if (*f == INVALID_HANDLE_VALUE) return false; - - // init OVERLAPPED - o->Internal = 0; - o->InternalHigh = 0; - o->Offset = 0; - o->OffsetHigh = 0; - o->hEvent = CreateEvent( - NULL, // default security attributes - TRUE, // manual-reset event - FALSE, // not signaled - NULL // no name - ); - return true; - } - - void CloseDisk(HANDLE f, OVERLAPPED* o) const { - if(f != INVALID_HANDLE_VALUE) CloseHandle(f); - if(o->hEvent != INVALID_HANDLE_VALUE) CloseHandle(o->hEvent); - } - - bool StartReadDisk(HANDLE f, OVERLAPPED* o, uint8_t* buffer, Bitu offset, Bitu size) const { - o->Offset = (DWORD)offset; - if (!ReadFile(f, buffer, (DWORD)size, NULL, o) && - (GetLastError()==ERROR_IO_PENDING)) return true; - return false; - } - - // 0=still waiting, 1=catastrophic failure, 2=success, 3=sector not found, 4=crc error - Bitu CheckDiskReadComplete(HANDLE f, OVERLAPPED* o) const { - DWORD numret; - BOOL b = GetOverlappedResult( f, o, &numret,false); - if(b) return 2; - else { - int error = GetLastError(); - if(error==ERROR_IO_INCOMPLETE) return 0; - if(error==ERROR_FLOPPY_UNKNOWN_ERROR) return 5; - if(error==ERROR_CRC) return 4; - if(error==ERROR_SECTOR_NOT_FOUND) return 3; - return 1; - } - } - - Bitu ReadDisk(FILE* f, uint8_t driveletter, Bitu retries_max) { - unsigned char data[36*2*512]; - HANDLE hFloppy; - DWORD numret; - OVERLAPPED o; - DISK_GEOMETRY geom; - - uint8_t drivestring[] = "\\\\.\\x:"; drivestring[4]=driveletter; - if(!OpenDisk(&hFloppy, &o, drivestring)) return false; - - // get drive geom - DeviceIoControl( hFloppy, IOCTL_DISK_GET_DRIVE_GEOMETRY,NULL,0, - &geom,sizeof(DISK_GEOMETRY),&numret,NULL); - - switch(geom.MediaType) { - case F5_1Pt2_512: case F3_1Pt44_512: case F3_2Pt88_512: case F3_720_512: - case F5_360_512: case F5_320_512: case F5_180_512: case F5_160_512: - break; - default: - CloseDisk(hFloppy,&o); - return false; - } - Bitu total_sect_per_cyl = geom.SectorsPerTrack * geom.TracksPerCylinder; - Bitu cyln_size = 512 * total_sect_per_cyl; - - WriteOut(MSG_Get("PROGRAM_IMGMAKE_FLREAD"), - geom.Cylinders.LowPart,geom.TracksPerCylinder, - geom.SectorsPerTrack,(cyln_size*geom.Cylinders.LowPart)/1024); - WriteOut(MSG_Get("PROGRAM_IMGMAKE_FLREAD2"), "\xdb", "\xb1"); - - for(Bitu i = 0; i < geom.Cylinders.LowPart; i++) { - Bitu result; - // for each cylinder - WriteOut("%2u",i); - - if(!StartReadDisk(hFloppy, &o, &data[0], cyln_size*i, cyln_size)){ - CloseDisk(hFloppy,&o); - return false; - } - do { - result = CheckDiskReadComplete(hFloppy, &o); - CALLBACK_Idle(); - } - while (result==0); - - switch(result) { - case 1: - CloseDisk(hFloppy,&o); - return false; - case 2: // success - for(Bitu m=0; m < cyln_size/512; m++) WriteOut("\xdb"); - break; - case 3: - case 4: // data errors - case 5: - for(Bitu k=0; k < total_sect_per_cyl; k++) { - Bitu retries=retries_max; - restart_int: - StartReadDisk(hFloppy, &o, &data[512*k], cyln_size*i + 512*k, 512); - do { - result = CheckDiskReadComplete(hFloppy, &o); - CALLBACK_Idle(); - } - while (result==0); - - switch(result) { - case 1: // bad error - CloseDisk(hFloppy,&o); - return false; - case 2: // success - if(retries==retries_max) WriteOut("\xdb"); - else WriteOut("\b\b\b\xb1"); - break; - case 3: - case 4: // read errors - case 5: - if(retries!=retries_max) WriteOut("\b\b\b"); - retries--; - switch(result) { - case 3: WriteOut("x"); - case 4: WriteOut("!"); - case 5: WriteOut("?"); - } - WriteOut("%2d",retries); - - if(retries) goto restart_int; - const uint8_t badfood[]="IMGMAKE BAD FLOPPY SECTOR \xBA\xAD\xF0\x0D"; - for(uint8_t z = 0; z < 512/32; z++) - memcpy(&data[512*k+z*32],badfood,31); - WriteOut("\b\b"); - break; - } - } - break; - } - fwrite(data, 512, total_sect_per_cyl, f); - WriteOut("%2x%2x\n", data[0], data[1]); - } - // seek to 0 - StartReadDisk(hFloppy, &o, &data[0], 0, 512); - CloseDisk(hFloppy,&o); - return true; - } - #endif - - void Run(void) override { - std::string disktype; - std::string label; - std::string src; - std::string filename; - std::string dpath; - std::string tmp; - - int lbamode = -1; - uint32_t c, h, s; - uint64_t size = 0, sectors; - uint16_t alignment = 0; // if nonzero, try to align structures to this multiple of K (i.e. 4K sector alignment) - - if(control->SecureMode()) { - WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW")); - return; - } - if(cmd->FindExist("-?")) { - printHelp(); - return; - } - if (cmd->FindExist("/examples")||cmd->FindExist("-examples")) { - resetcolor = true; - WriteOut(MSG_Get("PROGRAM_IMGMAKE_EXAMPLE")); - return; - } - - /* - this stuff is too frustrating - - // when only a filename is passed try to create the file on the current DOS path - // if directory+filename are passed first see if directory is a host path, if not - // maybe it is a DOSBox path. - - // split filename and path - std::string path = ""; - Bitu spos = temp_line.rfind('\\'); - if(spos==std::string::npos) { - temp_line.rfind('/'); - } - - if(spos==std::string::npos) { - // no path separator - filename=temp_line; - } else { - path=temp_line.substr(0,spos); - filename=temp_line.substr(spos+1,std::string::npos); - } - if(filename=="") - - char tbuffer[DOS_PATHLENGTH]= { 0 }; - if(path=="") { - if(!DOS_GetCurrentDir(DOS_GetDefaultDrive()+1,tbuffer)){ - printHelp(); - return; - } - dpath=(std::string)tbuffer; - } - WriteOut("path %s, filename %s, dpath %s", - path.c_str(),filename.c_str(),dpath.c_str()); - return; + delete cdrom; + cdrom = dynamic_cast(newDrive); + Drives[drive - 'A'] = cdrom; + } + } else { + newDrive = new isoDrive(drive, lTheOpenFileName, mediaid, error, options); + if (error) { + delete newDrive; + systemmessagebox(MSG_Get("ERROR"), MSG_Get("PROGRAM_CDMOUNT_ERROR"),"ok","error", 1); + chdir( Temp_CurrentDir ); + return; + } + cdrom = dynamic_cast(newDrive); + Drives[drive - 'A'] = cdrom; + } + if ((!isempty || !dos_kernel_disabled) && cdrom) DriveManager::ChangeDisk(drive-'A', cdrom); + } + chdir( Temp_CurrentDir ); +#endif +} + +void MenuBrowseFDImage(char drive, int num, int type) { + if(control->SecureMode()) { + systemmessagebox(MSG_Get("ERROR"),MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); + return; + } + + if (type==-1 || (Drives[drive-'A'] && !strncmp(Drives[drive-'A']->GetInfo(), "fatDrive ", 9))) { +#if !defined(HX_DOS) + std::string image = type==1||(type==-1&&dynamic_cast(imageDiskList[drive-'A'])!=NULL)?MSG_Get("ELTORITO_IMAGE"):(type==2||(type==-1&&dynamic_cast(imageDiskList[drive-'A'])!=NULL)?MSG_Get("RAM_FLOPPY_IMAGE"):(type==-1?imageDiskList[drive-'A']->diskname.c_str():Drives[drive-'A']->GetInfo()+9)); + std::string drive_warn = formatString(MSG_Get("PROGRAM_FLOPPY_WARN"), (type == -1 ? std::string(1, drive - 'A' + '0') : (dos_kernel_disabled ? std::to_string(num) : std::string(1, drive) + ":")).c_str(), image.c_str()); + if (!systemmessagebox("Change floppy disk image",drive_warn.c_str(),"yesno","question", 1)) return; +#endif + } else + return; +#if !defined(HX_DOS) + char CurrentDir[512] = "."; + char * Temp_CurrentDir = CurrentDir; + // getcwd(Temp_CurrentDir, 512); + char const * lTheOpenFileName; + std::string files="", fname=""; + const char *lFilterPatterns[] = {"*.ima","*.img","*.xdf","*.fdi","*.hdm","*.nfd","*.d88","*.IMA","*.IMG","*.XDF","*.FDI","*.HDM","*.NFD","*.D88"}; + const char *lFilterDescription = "Floppy image files (*.ima, *.img, *.xdf, *.fdi, *.hdm, *.nfd, *.d88)"; + lTheOpenFileName = tinyfd_openFileDialog("Select a floppy image file","",sizeof(lFilterPatterns)/sizeof(lFilterPatterns[0]), lFilterPatterns, lFilterDescription, 0); + +#if !defined(OSFREE) + if (lTheOpenFileName) { + //uint8_t mediaid = 0xF0; UNUSED + std::vector options; + if (mountiro[drive-'A']) options.emplace_back("readonly"); + fatDrive *newDrive = new fatDrive(lTheOpenFileName, 0, 0, 0, 0, options); + if (!newDrive->created_successfully) { + systemmessagebox(MSG_Get("ERROR"),MSG_Get("PROGRAM_FLOPPYMOUNT_ERROR"), "ok", "error", 1); + chdir( Temp_CurrentDir ); + return; + } + if (newDrive) { + if (type>-1) + DriveManager::ChangeDisk(drive-'A', newDrive); + else if (newDrive->loadedDisk) { + if (imageDiskList[drive-'A']) { + imageDiskList[drive-'A']->Release(); + imageDiskList[drive-'A'] = newDrive->loadedDisk; + //imageDiskList[drive-'A']->Addref(); + imageDiskChange[drive-'A'] = true; + } + if (swapInDisksSpecificDrive == drive-'A' && diskSwap[swapPosition]) { + diskSwap[swapPosition]->Release(); + diskSwap[swapPosition] = newDrive->loadedDisk; + diskSwap[swapPosition]->Addref(); + } + } + } + } + chdir( Temp_CurrentDir ); +#endif +#endif +} + +void MenuBrowseImageFile(char drive, bool arc, bool boot, bool multiple) { + std::string str(1, drive); + std::string drive_warn; + if (Drives[drive-'A']&&!boot) { + drive_warn= formatString(MSG_Get("PROGRAM_ALREADY_MOUNTED"), str.c_str()); + systemmessagebox(MSG_Get("ERROR"),drive_warn.c_str(),"ok","error", 1); + return; + } + if(control->SecureMode()) { + systemmessagebox(MSG_Get("ERROR"),MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); + return; + } + if (dos_kernel_disabled) + return; +#if !defined(HX_DOS) + char CurrentDir[512]; + char * Temp_CurrentDir = CurrentDir; + // getcwd(Temp_CurrentDir, 512); + char const * lTheOpenFileName; + std::string files="", fname=""; + if (arc) { + const char *lFilterPatterns[] = {"*.zip","*.7z","*.ZIP","*.7Z"}; + const char *lFilterDescription = "Archive files (*.zip, *.7z)"; + lTheOpenFileName = tinyfd_openFileDialog(("Select an archive file for Drive "+str+":").c_str(),"", sizeof(lFilterPatterns) / sizeof(lFilterPatterns[0]),lFilterPatterns,lFilterDescription,0); + if (lTheOpenFileName) fname = "\"" + GetNewStr(lTheOpenFileName) + "\""; + } else { + const char *lFilterPatterns[] = {"*.ima","*.img","*.vhd","*.fdi","*.hdi","*.nfd","*.nhd","*.d88","*.hdm","*.xdf","*.cdrom", "*.iso","*.cue","*.bin","*.chd","*.mdf","*.gog","*.ins","*.ccd","*.inst","*.IMA","*.IMG","*.VHD","*.FDI","*.HDI","*.NFD","*.NHD","*.D88","*.HDM","*.XDF",".CDROM", "*.ISO","*.CUE","*.BIN","*.CHD","*.MDF","*.GOG","*.INS","*.CCD","*.INST"}; + const char *lFilterDescription = "Disk/CD image files"; + lTheOpenFileName = tinyfd_openFileDialog(((multiple?"Select image file(s) for Drive ":"Select an image file for Drive ")+str+":").c_str(),"", sizeof(lFilterPatterns) / sizeof(lFilterPatterns[0]),lFilterPatterns,lFilterDescription,multiple?1:0); + if (lTheOpenFileName) fname = "\"" + GetNewStr(lTheOpenFileName) + "\""; + if (multiple&&fname.size()) { + files = std::regex_replace(fname, std::regex("\\|"), "\" \""); + } + while (multiple&&lTheOpenFileName&&systemmessagebox("Mount image files", MSG_Get("PROGRAM_MOUNT_MORE_IMAGES"),"yesno", "question", 1)) { + lTheOpenFileName = tinyfd_openFileDialog(("Select image file(s) for Drive "+str+":").c_str(),"", sizeof(lFilterPatterns) / sizeof(lFilterPatterns[0]),lFilterPatterns,lFilterDescription,multiple?1:0); + if (lTheOpenFileName) { + fname = "\"" + GetNewStr(lTheOpenFileName) + "\""; + files = files + " " + std::regex_replace(fname, std::regex("\\|"), "\" \""); + } + } + } + + if (fname.size()||files.size()) { + char type[15]; + if (!arc&&!files.size()) { + char ext[5] = ""; + if (fname.size()>4) + strcpy(ext, fname.substr(fname.size()-4).c_str()); + if(!strcasecmp(ext,".ima")) + strcpy(type,"-t floppy "); + else if((!strcasecmp(ext,".iso")) || (!strcasecmp(ext,".cue")) || (!strcasecmp(ext,".bin")) || (!strcasecmp(ext,".chd")) || (!strcasecmp(ext,".mdf")) || (!strcasecmp(ext,".gog")) || (!strcasecmp(ext,".ins")) || (!strcasecmp(ext, ".inst"))) + strcpy(type,"-t iso "); + else + strcpy(type,""); + } else + *type=0; + char mountstring[CROSS_LEN*4+20]; + if (files.size()>CROSS_LEN*4) { + systemmessagebox(MSG_Get("ERROR"),MSG_Get("PROGRAM_MOUNT_PATH_TOOLONG"),"ok","error", 1); + return; + } + strcpy(mountstring,type); + char temp_str[3] = { 0,0,0 }; + temp_str[0]=drive; + temp_str[1]=' '; + strcat(mountstring,temp_str); + //if (!multiple) strcat(mountstring,"\""); + strcat(mountstring,files.size()?files.c_str():fname.c_str()); + //if(!multiple) strcat(mountstring, "\""); + if(mountiro[drive - 'A']) strcat(mountstring, " -ro"); + if(boot) { + strcat(mountstring, " -u"); + mountstring[0] = drive - 'A' + '0'; + runImgmount(mountstring); // mount by drive number + std::string bootstr = "-Q "; + bootstr += drive; + bootstr += ':'; + runBoot(bootstr.c_str()); + std::string drive_warn = formatString(MSG_Get("PROGRAM_BOOT_FAILED"), (std::string(1, drive)).c_str()); + systemmessagebox(MSG_Get("ERROR"), drive_warn.c_str(), "ok", "error", 1); + bootstr = "-u "; + bootstr += drive - 'A' + '0'; + runImgmount(bootstr.c_str()); // unmount if boot failed + return; + } + if(arc) { + strcat(mountstring," -q"); + runMount(mountstring); + } else { + qmount=true; + runImgmount(mountstring); + qmount=false; + } + chdir( Temp_CurrentDir ); + if (!Drives[drive - 'A']) { + drive_warn= formatString(MSG_Get("PROGRAM_MOUNT_FAILED"), (std::string(1, drive)).c_str()); + systemmessagebox(MSG_Get("ERROR"),drive_warn.c_str(),"ok","error", 1); + return; + } + else { + if(!multiple && !lTheOpenFileName){ + chdir( Temp_CurrentDir ); + return; + } +#if defined(MACOSX) + auto MSGX = MSG_GetUTF8; +#else + auto MSGX = MSG_Get; +#endif + std::string readonly = mountiro[drive - 'A'] ? "\n(" + std::string(MSGX("READONLY_MODE")) + ")" : ""; + std::string msg = MSGX("PROGRAM_MOUNT_IMAGE"); + std::string image, drive_warn; + if(multiple){ + image = std::string(MSGX("DISK_IMAGE")); + files.erase(std::remove(files.begin(), files.end(), '"'), files.end()); + drive_warn = formatString(msg.c_str(), image.c_str(), std::string(1, drive).c_str(), + files.c_str(), readonly.c_str()); + } + else if(lTheOpenFileName){ + image = arc ? std::string(MSGX("ARCHIVE")) : std::string(MSGX("DISK_IMAGE")); + drive_warn = formatString(msg.c_str(), image.c_str(), std::string(1, drive).c_str(), + GetNewStr(lTheOpenFileName).c_str(), readonly.c_str()); + } + std::string title = MSGX("INFORMATION"); +#if defined(MACOSX) + tinyfd_messageBox(title.c_str(), drive_warn.c_str(), "ok", "info", 1); +#else + systemmessagebox(title.c_str(), drive_warn.c_str(), "ok", "info", 1); +#endif + } + } + chdir( Temp_CurrentDir ); +#endif +} + +void MenuBrowseFolder(char drive, std::string const& drive_type) { + std::string str(1, drive); + if (Drives[drive-'A']) { + std::string drive_warn = formatString(MSG_Get("PROGRAM_ALREADY_MOUNTED"), str.c_str()); + systemmessagebox(MSG_Get("ERROR"),drive_warn.c_str(),"ok","error", 1); + return; + } + if(control->SecureMode()) { + systemmessagebox(MSG_Get("ERROR"),MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); + return; + } +#if !defined(HX_DOS) + std::string base = "DRIVE_TYPE_"; + std::string msg_key = base + std::string(drive_type); + std::string title = formatString(MSG_Get("PROGRAM_MOUNT_SELECT_DRIVE"), str.c_str(),MSG_Get(msg_key.c_str())); + if(drive_type=="CDROM") + title += "\n" + std::string(MSG_Get("PROGRAM_MOUNT_CDROM_SUPPORT")); +#ifdef LINUX + size_t aMessageLength = strlen(title.c_str()); + char *lMessage = (char *)malloc((aMessageLength * 2 + 1) * sizeof(char)); + CodePageGuestToHostUTF8(lMessage, title.c_str()) ; + char const * lTheSelectFolderName = tinyfd_selectFolderDialog(lMessage, NULL); + free(lMessage); +#else + char const * lTheSelectFolderName = tinyfd_selectFolderDialog(title.c_str(), NULL); +#endif + if (lTheSelectFolderName) { + MountHelper(drive,GetNewStr(lTheSelectFolderName).c_str(),drive_type); + std::string drive_warn = formatString(MSG_Get("PROGRAM_MOUNT_SUCCESS"), std::string(1, drive).c_str(), lTheSelectFolderName); + if (Drives[drive-'A']) systemmessagebox(MSG_Get("INFORMATION"),drive_warn.c_str(), "ok", "info", 1); + } +#endif +} + +void MenuUnmountDrive(char drive) { + if (!Drives[drive-'A']) { + std::string drive_letter(1, drive); + std::string drive_warn= formatString(MSG_Get("PROGRAM_MOUNT_NOT_MOUNTED"), drive_letter.c_str()); + systemmessagebox(MSG_Get("ERROR"),drive_warn.c_str(),"ok","error", 1); + return; + } + UnmountHelper(drive); +} + +void MenuBootDrive(char drive) { + if(control->SecureMode()) { + systemmessagebox(MSG_Get("ERROR"),MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); + return; + } + char str[] = "-Q A:"; + str[3]=drive; + runBoot(str); + std::string drive_letter(1, drive); + std::string drive_warn= formatString(MSG_Get("PROGRAM_BOOT_FAILED"), drive_letter.c_str()); + systemmessagebox(MSG_Get("ERROR"),drive_warn.c_str(),"ok","error", 1); +} + +void MenuBrowseProgramFile() { + if(control->SecureMode()) { + systemmessagebox(MSG_Get("ERROR"),MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW"),"ok","error", 1); + return; + } + if (dos_kernel_disabled) + return; + std::string drive_warn; + DOS_MCB mcb(dos.psp()-1); + static char psp_name[9]; + mcb.GetFileName(psp_name); + if(strlen(psp_name)&&strcmp(psp_name, "COMMAND")) { + drive_warn=strcmp(psp_name, "4DOS")? MSG_Get("PROGRAM_PROGRAM_ALREADY"): MSG_Get("PROGRAM_PROGRAM_ALREADY"); + systemmessagebox(MSG_Get("ERROR"),drive_warn.c_str(),"ok","error", 1); + return; + } + +#if !defined(HX_DOS) + char drv=' '; + for (int i=2; i options; + void Move_Z(char new_z) { + char newz_drive = (char)toupper(new_z); + int i_newz = (int)newz_drive - (int)'A'; + if (i_newz >= 0 && i_newz < DOS_DRIVES) { + if(Drives[i_newz]) { + WriteOut("Drive %c is already in use\n", new_z); + return; + } + /* remap drives */ + Drives[i_newz] = Drives[ZDRIVE_NUM]; + Drives[ZDRIVE_NUM] = nullptr; + DOS_EnableDriveMenu(i_newz + 'A'); + DOS_EnableDriveMenu(ZDRIVE_NUM + 'A'); + if (!first_shell) return; //Should not be possible + /* Update environment */ + std::string line = ""; + char ppp[2] = { newz_drive,0 }; + std::string tempenv = ppp; tempenv += ":\\"; + std::string tempenvZ = std::string(1, 'A'+ZDRIVE_NUM); tempenvZ += ":\\"; + std::string tempenvz = std::string(1, 'a'+ZDRIVE_NUM); tempenvz += ":\\"; + if (first_shell->GetEnvStr("PATH", line)) { + std::string::size_type idx = line.find('='); + std::string value = line.substr(idx + 1, std::string::npos); + while ((idx = value.find(tempenvZ)) != std::string::npos || + (idx = value.find(tempenvz)) != std::string::npos) + value.replace(idx, 3, tempenv); + line = value; + } + if (!line.size()) line = tempenv; + first_shell->SetEnv("PATH", line.c_str()); + tempenv += "COMMAND.COM"; + first_shell->SetEnv("COMSPEC", tempenv.c_str()); + + /* Update batch file if running from Z: (very likely: autoexec) */ + if (first_shell->bf) { + std::string& name = first_shell->bf->filename; + if (name.length() > 2 && name[0] == 'A'+ZDRIVE_NUM && name[1] == ':') name[0] = newz_drive; + } + /* Change the active drive */ + if (DOS_GetDefaultDrive() == ZDRIVE_NUM) DOS_SetDrive(i_newz); + ZDRIVE_NUM = i_newz; + } + else + WriteOut("Drive %c is not a valid drive\n", new_z); + } + void ListMounts(bool quiet, bool local) { + char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH]; + uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; + /* Command uses dta so set it to our internal dta */ + RealPt save_dta = dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + + if (!quiet) { + WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_1")); + WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_FORMAT"),MSG_Get("DRIVE"),MSG_Get("TYPE"),MSG_Get("LABEL")); + } + int cols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); + if (!cols) cols=80; + if (!quiet) { + for(int p = 1;p < cols;p++) WriteOut("-"); + WriteOut("\n"); + } + bool none=true; + for (int d = 0;d < DOS_DRIVES;d++) { + if (!Drives[d]) continue; + if (local && strncasecmp("local ", Drives[d]->GetInfo(), 6)) continue; + if (quiet) { + WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_2"), 'A'+d, Drives[d]->GetInfo()+(local && !strncasecmp("local ", Drives[d]->GetInfo(), 6)?16:0)); + continue; + } + char root[7] = {(char)('A'+d),':','\\','*','.','*',0}; + bool ret = DOS_FindFirst(root,DOS_ATTR_VOLUME); + if (ret) { + dta.GetResult(name,lname,size,hsize,date,time,attr); + DOS_FindNext(); //Mark entry as invalid + } else name[0] = 0; + + /* Change 8.3 to 11.0 */ + const char* dot = strchr(name, '.'); + if(dot && (dot - name == 8) ) { + name[8] = name[9];name[9] = name[10];name[10] = name[11];name[11] = 0; + } + + root[1] = 0; //This way, the format string can be reused. + WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_FORMAT"),root, Drives[d]->GetInfo(),name); + none=false; + } + if (none&&!quiet) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NONE")); + dos.dta(save_dta); + } + + void Run(void) override { + DOS_Drive *newdrive = NULL; + std::string label; + std::string umount; + std::string newz; + bool quiet=false; + char drive; + + //Hack To allow long commandlines + ChangeToLongCmd(); + /* Parse the command line */ + /* if the command line is empty show current mounts */ + if (!cmd->GetCount()) { + ListMounts(false, false); + return; + } + + /* In secure mode don't allow people to change mount points. + * Neither mount nor unmount */ + if(control->SecureMode()) { + WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW")); + return; + } + if (cmd->FindExist("/examples")||cmd->FindExist("-examples")) { + resetcolor = true; +#if defined (WIN32) || defined(OS2) + WriteOut(MSG_Get("PROGRAM_MOUNT_EXAMPLE"),"d:\\dosprogs","d:\\dosprogs","\"d:\\dos games\"","\"d:\\dos games\"","d:\\dosprogs","d:\\dosprogs","d:\\dosprogs","d:\\dosprogs","d:\\dosprogs","d:\\dosprogs","d:\\overlaydir"); +#else + WriteOut(MSG_Get("PROGRAM_MOUNT_EXAMPLE"),"~/dosprogs","~/dosprogs","\"~/dos games\"","\"~/dos games\"","~/dosprogs","~/dosprogs","~/dosprogs","~/dosprogs","~/dosprogs","~/dosprogs","~/overlaydir"); +#endif + return; + } + + //look for -o options + bool local = false; + { + std::string s; + while (cmd->FindString("-o", s, true)) { + if (!strcasecmp(s.c_str(), "local")) local = true; + options.push_back(s); + } + if (local && !cmd->GetCount()) { + ListMounts(false, true); + return; + } + } + + if (cmd->FindExist("-q",true)) { + quiet = true; + if (!cmd->GetCount()) { + ListMounts(true, local); + return; + } + } + + bool path_relative_to_last_config = false; + if (cmd->FindExist("-pr",true)) path_relative_to_last_config = true; + + /* Check for unmounting */ + if (cmd->FindString("-u",umount,false)) { + const char *msg=UnmountHelper(umount[0]); + if (!quiet) WriteOut(msg, toupper(umount[0])); + return; + } + + /* Check for moving Z: */ + /* Only allowing moving it once. It is merely a convenience added for the wine team */ + if (cmd->FindString("-z", newz,false)) { + if (ZDRIVE_NUM != newz[0]-'A') Move_Z(newz[0]); + return; + } + /* Show list of cdroms */ + if (cmd->FindExist("-cd",false)) { + int num = SDL_CDNumDrives(); + if (!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_CDROMS_FOUND"),num); + for (int i=0; iFindExist("-nocachedir",true)) + nocachedir = true; + + if (cmd->FindExist("-nl",true)) + nextdrive = true; + + bool readonly = false; + if (cmd->FindExist("-ro",true)) + readonly = true; + if (cmd->FindExist("-rw",true)) + readonly = false; + + std::string type="dir"; + cmd->FindString("-t",type,true); + std::transform(type.begin(), type.end(), type.begin(), ::tolower); + bool iscdrom = (type =="cdrom"); //Used for mscdex bug cdrom label name emulation + bool exist = false, removed = false; + if (type=="floppy" || type=="dir" || type=="cdrom" || type =="overlay") { + uint16_t sizes[4] = { 0 }; + uint8_t mediaid; + std::string str_size = ""; + if (type=="floppy") { + str_size="512,1,2880,2880"; + mediaid=0xF0; /* Floppy 1.44 media */ + } else if (type=="dir" || type == "overlay") { + // 512*32*32765==~500MB total size + // 512*32*16000==~250MB total free size + str_size="512,32,0,0"; + mediaid=0xF8; /* Hard Disk */ + } else if (type=="cdrom") { + str_size="2048,1,65535,0"; + mediaid=0xF8; /* Hard Disk */ + } else { + if (!quiet) WriteOut(MSG_Get("PROGAM_MOUNT_ILL_TYPE"),type.c_str()); + return; + } + /* Parse the free space in mb's (kb's for floppies) */ + std::string mb_size; + if(cmd->FindString("-freesize",mb_size,true)) { + char teststr[1024]; + uint16_t freesize = static_cast(atoi(mb_size.c_str())); + if (type=="floppy") { + // freesize in kb + sprintf(teststr,"512,1,2880,%d",freesize*1024/(512*1)>2880?2880:freesize*1024/(512*1)); + } else { + //if (freesize>1919) freesize=1919; + uint16_t numc=type=="cdrom"?1:32; + uint32_t total_size_cyl=32765; + uint32_t tmp=(uint32_t)freesize*1024*1024/(type=="cdrom"?2048*1:512*32); + if(tmp > 65534) numc = type == "cdrom" ? (tmp + 65535) / 65536 : 64; + uint32_t free_size_cyl=(uint32_t)freesize*1024*1024/(numc*(type=="cdrom"?2048:512)); + if (free_size_cyl>65534) free_size_cyl=65534; + if (total_size_cyl65534) total_size_cyl=65534; + sprintf(teststr,type=="cdrom"?"2048,%u,%u,%u":"512,%u,%u,%u",numc,total_size_cyl,free_size_cyl); + } + str_size=teststr; + } + + cmd->FindString("-size",str_size,true); + char number[21] = { 0 }; const char* scan = str_size.c_str(); + Bitu index = 0; Bitu count = 0; + /* Parse the str_size string */ + while (*scan && index < 20 && count < 4) { + if (*scan==',') { + number[index] = 0; + sizes[count++] = atoi(number); + index = 0; + } else number[index++] = *scan; + scan++; + } + if (count < 4) { + number[index] = 0; //always goes correct as index is max 20 at this point. + sizes[count] = atoi(number); + } + + // get the drive letter + cmd->FindCommand(1,temp_line); + if ((temp_line.size() > 2) || ((temp_line.size()>1) && (temp_line[1]!=':'))) goto showusage; + int i_drive = toupper(temp_line[0]); + if (!isalpha(i_drive)) goto showusage; + if ((i_drive - 'A') >= DOS_DRIVES || (i_drive - 'A') < 0) goto showusage; + if (!cmd->FindCommand(2,temp_line)) { + if (Drives[i_drive - 'A']) { + const char *info = Drives[i_drive - 'A']->GetInfo(); + if (!quiet) + WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_2"), i_drive, info+(local&&!strncasecmp("local ", info, 6)?16:0)); + else if (local&&!strncasecmp("local ", info, 6)) + WriteOut("%s\n", info+16); + else if (!local) + WriteOut("%s\n", info); + } else if (!quiet) + WriteOut(MSG_Get("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED"), i_drive); + return; + } + if (!temp_line.size()) goto showusage; + if (cmd->FindExist("-u",true)) { + bool curdrv = toupper(i_drive)-'A' == DOS_GetDefaultDrive(); + const char *msg=UnmountHelper(i_drive); + if(!quiet) WriteOut(msg, toupper(i_drive)); + if(!cmd->FindCommand(2, temp_line) || !temp_line.size()) return; + if(curdrv && toupper(i_drive) - 'A' != DOS_GetDefaultDrive()) removed = true; + } + drive = static_cast(i_drive); + if (type == "overlay") { + //Ensure that the base drive exists: + if (!Drives[drive-'A']) { + if (!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_NO_BASE")); + return; + } + } else if (Drives[drive-'A']) { + bool found = false; + if (!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_ALREADY_MOUNTED"),drive,Drives[drive-'A']->GetInfo()); + if (nextdrive) + for (int i=drive-'A'+1; iconfigfiles.size() && !Cross::IsPathAbsolute(temp_line)) { + std::string lastconfigdir(control->configfiles[control->configfiles.size()-1]); + std::string::size_type pos = lastconfigdir.rfind(CROSS_FILESPLIT); + if(pos == std::string::npos) pos = 0; //No directory then erase string + lastconfigdir.erase(pos); + if (lastconfigdir.length()) temp_line = lastconfigdir + CROSS_FILESPLIT + temp_line; + } +#if !defined(OSFREE) + bool is_physfs = temp_line.find(':',((temp_line[0]|0x20) >= 'a' && (temp_line[0]|0x20) <= 'z')?2:0) != std::string::npos; +#else + bool is_physfs = false; +#endif + struct stat test; + //Win32 : strip tailing backslashes + //os2: some special drive check + //rest: substitute ~ for home + bool failed = false; + + (void)failed;// MAY BE UNUSED + +#if defined (RISCOS) + // If the user provided a RISC OS style path, convert it to a Unix style path + // TODO: Disable UnixLib's automatic path conversion and use RISC OS style paths internally? + if (temp_line.find('$',0) != std::string::npos) { + char fname[PATH_MAX]; + is_physfs = false; + __unixify_std(temp_line.c_str(), fname, sizeof(fname), 0); + temp_line = fname; + } +#endif + +#if defined (WIN32) || defined(OS2) + // Windows: Workaround for LaunchBox + if (is_physfs && temp_line.size()>4 && temp_line[0]=='\'' && toupper(temp_line[1])>='A' && toupper(temp_line[1])<='Z' && temp_line[2]==':' && (temp_line[3]=='/' || temp_line[3]=='\\') && temp_line.back()=='\'') { + temp_line = temp_line.substr(1, temp_line.size()-2); + is_physfs = temp_line.find(':',((temp_line[0]|0x20) >= 'a' && (temp_line[0]|0x20) <= 'z')?2:0) != std::string::npos; + } else if (is_physfs && temp_line.size()>3 && temp_line[0]=='\'' && toupper(temp_line[1])>='A' && toupper(temp_line[1])<='Z' && temp_line[2]==':' && (temp_line[3]=='/' || temp_line[3]=='\\')) { + std::string line=trim((char *)cmd->GetRawCmdline().c_str()); + std::size_t space=line.find(' '); + if (space!=std::string::npos) { + line=trim((char *)line.substr(space).c_str()); + std::size_t found=line.back()=='\''?line.find_last_of('\''):line.rfind("' "); + if (found!=std::string::npos&&found>2) { + temp_line=line.substr(1, found-1); + is_physfs = temp_line.find(':',((temp_line[0]|0x20) >= 'a' && (temp_line[0]|0x20) <= 'z')?2:0) != std::string::npos; + } + } + } +#else + // Linux: Convert backslash to forward slash + if (!is_physfs && temp_line.size() > 0) { + for (size_t i=0;i < temp_line.size();i++) { + if (temp_line[i] == '\\') + temp_line[i] = '/'; + } + } +#endif + + bool useh = false; +#if defined (WIN32) + ht_stat_t htest; +#else + struct stat htest; +#endif +#if defined (WIN32) || defined(OS2) + /* Removing trailing backslash if not root dir so stat will succeed */ + if(temp_line.size() > 3 && temp_line[temp_line.size()-1]=='\\') temp_line.erase(temp_line.size()-1,1); + if(temp_line.size() == 2 && toupper(temp_line[0])>='A' && toupper(temp_line[0])<='Z' && temp_line[1]==':') temp_line.append("\\"); + if(temp_line.size() > 4 && temp_line[0] == '\\' && temp_line[1] == '\\' && temp_line[2] != '\\' && std::count(temp_line.begin() + 3, temp_line.end(), '\\') == 1) temp_line.append("\\"); + notrycp = true; + const host_cnv_char_t* host_name = CodePageGuestToHost(temp_line.c_str()); + notrycp = false; + if (!is_physfs && stat(temp_line.c_str(),&test)) { +#endif +#if defined(WIN32) + if (host_name == NULL || ht_stat(host_name, &htest)) failed = true; + useh = true; + } else if (!is_physfs && tryconvertcp && _waccess(host_name,0) && dos.loaded_codepage == 437) { + uint16_t cp = GetACP(), cpbak = dos.loaded_codepage; +#if defined(USE_TTF) + if ((ttf.inUse&&(cp<1250||cp>1259)&&cp!=437&&isSupportedCP(cp))||(!ttf.inUse&&(cp==932||cp==936||cp==949||cp==950||cp==951))) +#else + if (cp==932||cp==936||cp==949||cp==950||cp==951) +#endif + { + cpbak = dos.loaded_codepage; + dos.loaded_codepage = cp; + host_name = CodePageGuestToHost(temp_line.c_str()); + std::string str = formatString(MSG_Get("PROGRAM_ASK_CHCP"), drive, cp, cp); + if (!host_name || ht_stat(host_name, &htest) || _waccess(host_name,0) || !systemmessagebox(MSG_Get("PROGRAM_CHANGING_CODEPAGE"),str.c_str(), "yesno", "question", 1)) + dos.loaded_codepage = cpbak; +#if defined(USE_TTF) + else if (ttf.inUse) { + dos.loaded_codepage = cpbak; + toSetCodePage(NULL, cp, -1); + } +#endif + else { + MSG_Init(); + DOSBox_SetSysMenu(); + if (isDBCSCP()) { + ShutFontHandle(); + InitFontHandle(); + JFONT_Init(); + } + SetupDBCSTable(); + runRescan("-A -Q"); +#if C_OPENGL && DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW + if (OpenGL_using() && control->opt_lang.size() && lastcp && lastcp != dos.loaded_codepage) + UpdateSDLDrawTexture(); +#endif + } + SwitchLanguage(cpbak, cp, false); + } + } +#elif defined (OS2) + if (temp_line.size() <= 2) // Seems to be a drive. + { + failed = true; + HFILE cdrom_fd = 0; + ULONG ulAction = 0; + + APIRET rc = DosOpen((unsigned char*)temp_line.c_str(), &cdrom_fd, &ulAction, 0L, FILE_NORMAL, OPEN_ACTION_OPEN_IF_EXISTS, + OPEN_FLAGS_DASD | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, 0L); + DosClose(cdrom_fd); + if (rc != NO_ERROR && rc != ERROR_NOT_READY) + { + failed = true; + } else { + failed = false; + } + } + } +#else + if (!is_physfs && stat(temp_line.c_str(),&test)) { + failed = true; + Cross::ResolveHomedir(temp_line); + //Try again after resolving ~ + if(!stat(temp_line.c_str(),&test)) failed = false; + } +#endif + if(failed) { + if (!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_ERROR_1"),temp_line.c_str()); + return; + } + /* Not a switch so a normal directory/file */ + if (!is_physfs && !S_ISDIR(useh?htest.st_mode:test.st_mode)) { +#ifdef OS2 + HFILE cdrom_fd = 0; + ULONG ulAction = 0; + + APIRET rc = DosOpen((unsigned char*)temp_line.c_str(), &cdrom_fd, &ulAction, 0L, FILE_NORMAL, OPEN_ACTION_OPEN_IF_EXISTS, + OPEN_FLAGS_DASD | OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, 0L); + DosClose(cdrom_fd); + if (rc != NO_ERROR && rc != ERROR_NOT_READY) +#endif + { + is_physfs = true; + temp_line.insert(0, 1, ':'); + /*if (!quiet) { + WriteOut(MSG_Get("PROGRAM_MOUNT_ERROR_2"),temp_line.c_str()); + if (temp_line.length()>4) { + char ext[5]; + strncpy(ext, temp_line.substr(temp_line.length()-4).c_str(), 4); + ext[4]=0; + if (!strcasecmp(ext, ".iso")||!strcasecmp(ext, ".cue")||!strcasecmp(ext, ".bin")||!strcasecmp(ext, ".chd")||!strcasecmp(ext, ".mdf")||!strcasecmp(ext, ".ima")||!strcasecmp(ext, ".img")||!strcasecmp(ext, ".vhd")||!strcasecmp(ext, ".hdi")) + WriteOut(MSG_Get("PROGRAM_MOUNT_IMGMOUNT"),temp_line.c_str()); + } + } + return;*/ + } + } + + if (temp_line[temp_line.size()-1]!=CROSS_FILESPLIT) temp_line+=CROSS_FILESPLIT; + uint8_t bit8size=(uint8_t) sizes[1]; + exist = drive - 'A' < DOS_DRIVES && drive - 'A' >= 0 && Drives[drive - 'A']; + if (type=="cdrom") { + int num = -1; + cmd->FindInt("-usecd",num,true); + int error = 0; + if (cmd->FindExist("-aspi",false)) { + MSCDEX_SetCDInterface(CDROM_USE_ASPI, num); + } else if (cmd->FindExist("-ioctl_dio",false)) { + MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); + } else if (cmd->FindExist("-ioctl_dx",false)) { + MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DX, num); +#if defined (WIN32) + } else if (cmd->FindExist("-ioctl_mci",false)) { + MSCDEX_SetCDInterface(CDROM_USE_IOCTL_MCI, num); +#endif + } else if (cmd->FindExist("-noioctl",false)) { + MSCDEX_SetCDInterface(CDROM_USE_SDL, num); + } else { +#if defined (WIN32) + int id, major, minor; + DOSBox_CheckOS(id, major, minor); + if ((id==VER_PLATFORM_WIN32_NT) && (major>5)) { + // Vista/above + MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DX, num); + } else { + MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); + } +#else + MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); +#endif + } + if (is_physfs) { +#if !defined(OSFREE) + newdrive = new physfscdromDrive(drive,temp_line.c_str(),sizes[0],bit8size,sizes[2],0,mediaid,error,options); +#else + WriteOut("Physfs cdromdrive not supported\n"); + return; +#endif + } + else { + newdrive = new cdromDrive(drive,temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,error,options); + } + // Check Mscdex, if it worked out... + if(!quiet) + switch(error) { + case 0: WriteOut(MSG_Get("MSCDEX_SUCCESS")); break; + case 1: WriteOut(MSG_Get("MSCDEX_ERROR_MULTIPLE_CDROMS")); break; + case 2: WriteOut(MSG_Get("MSCDEX_ERROR_NOT_SUPPORTED")); break; + case 3: WriteOut(MSG_Get("MSCDEX_ERROR_PATH")); break; + case 4: WriteOut(MSG_Get("MSCDEX_TOO_MANY_DRIVES")); break; + case 5: WriteOut(MSG_Get("MSCDEX_LIMITED_SUPPORT")); break; + case 10: WriteOut(MSG_Get("PROGRAM_MOUNT_PHYSFS_ERROR")); WriteOut(MSG_Get("PROGRAM_MOUNT_IMGMOUNT")); break; + default: WriteOut(MSG_Get("MSCDEX_UNKNOWN_ERROR")); break; + } + if (error && error!=5) { + delete newdrive; + return; + } + } else { + /* Give a warning when mount c:\ or the / */ + if (mountwarning && !quiet && !nowarn) { +#if defined (WIN32) || defined(OS2) + if( (temp_line == "c:\\") || (temp_line == "C:\\") || + (temp_line == "c:/") || (temp_line == "C:/") ) + WriteOut(MSG_Get("PROGRAM_MOUNT_WARNING_WIN")); +#else + if(temp_line == "/") WriteOut(MSG_Get("PROGRAM_MOUNT_WARNING_OTHER")); +#endif + } + if (is_physfs) { +#if !defined(OSFREE) + int error = 0; + newdrive=new physfsDrive(drive,temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,error,options); + if (error) { + if (!quiet) {WriteOut(MSG_Get("PROGRAM_MOUNT_PHYSFS_ERROR"));WriteOut(MSG_Get("PROGRAM_MOUNT_IMGMOUNT"));} + delete newdrive; + return; + } +#else + WriteOut("Physfs not supported\n"); + return; +#endif + } else if(type == "overlay") { +#if !defined(OSFREE) + physfsDrive* pdp = dynamic_cast(Drives[drive-'A']); + physfscdromDrive* pcdp = dynamic_cast(Drives[drive-'A']); + if (pdp && !pcdp) { + if (pdp->setOverlaydir(temp_line.c_str())) + WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_STATUS"),(temp_line+(temp_line.size()&&temp_line.back()!=CROSS_FILESPLIT?std::string(1, CROSS_FILESPLIT):"")+std::string(1, drive)+"_DRIVE").c_str(),drive); + else + WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_ERROR")); + return; + } + localDrive* ldp = dynamic_cast(Drives[drive-'A']); + cdromDrive* cdp = dynamic_cast(Drives[drive-'A']); + if(!ldp || cdp || pcdp) { + if(!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_INCOMPAT_BASE")); + return; + } + std::string base = ldp->getBasedir(); + uint8_t o_error = 0; + newdrive = new Overlay_Drive(base.c_str(),temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,o_error,options); + //Erase old drive on success + if (newdrive) { + if (o_error) { + if (quiet) {delete newdrive;return;} + if (o_error == 1) WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_MIXED_BASE")); + else if (o_error == 2) WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_SAME_AS_BASE")); + else WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_ERROR")); + delete newdrive; + return; + } else { + Overlay_Drive* odrive=dynamic_cast(newdrive); + if (odrive!=NULL) { + odrive->ovlnocachedir = nocachedir; + odrive->ovlreadonly = readonly; + } + } + + //Copy current directory if not marked as deleted. + if (newdrive->TestDir(ldp->curdir)) { + strcpy(newdrive->curdir,ldp->curdir); + } + + if (Drives[drive-'A'] != NULL) { + if (dynamic_cast(Drives[drive-'A']) != NULL) { /* Yeah, this relies on RTTI but it's probably worth it */ + /* Let the user know in case experience with other OSes or emulators leads them to think + * that they can "stack" overlays by mounting multiple times. */ + WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_REPLACE")); + } + delete Drives[drive-'A']; + Drives[drive-'A'] = nullptr; + } + } else { + if (!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_ERROR")); + return; + } +#else + WriteOut("overlay fs not supported\n"); + return; +#endif + } else { + newdrive=new localDrive(temp_line.c_str(),sizes[0],bit8size,sizes[2],sizes[3],mediaid,options); + newdrive->nocachedir = nocachedir; + newdrive->readonly = readonly; + } + } + } else { + if (!quiet) WriteOut(MSG_Get("PROGRAM_MOUNT_ILL_TYPE"),type.c_str()); + return; + } + if (!newdrive) E_Exit("DOS:Can't create drive"); + Drives[drive-'A']=newdrive; + if (removed && !exist) DOS_SetDefaultDrive(drive-'A'); + DOS_EnableDriveMenu(drive); + /* Set the correct media byte in the table */ + mem_writeb(Real2Phys(dos.tables.mediaid)+((unsigned int)drive-'A')*dos.tables.dpb_size,newdrive->GetMediaByte()); + lastmount = drive; + if (!quiet) { + if (type != "overlay") WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_2"),drive,newdrive->GetInfo()); + else WriteOut(MSG_Get("PROGRAM_MOUNT_OVERLAY_STATUS"),temp_line.c_str(),drive); + } + /* check if volume label is given and don't allow it to updated in the future */ + if (cmd->FindString("-label",label,true)) newdrive->SetLabel(label.c_str(),iscdrom,false); + /* For hard drives set the label to DRIVELETTER_Drive. + * For floppy drives set the label to DRIVELETTER_Floppy. + * This way every drive except cdroms should get a label.*/ + else if(type == "dir" || type == "overlay") { +#if defined (WIN32) || defined(OS2) + if(temp_line.size()==3 && toupper(drive) == toupper(temp_line[0])) { + // automatic mount + } else { + label = drive; label += "_DRIVE"; + newdrive->SetLabel(label.c_str(),iscdrom,false); + } +#endif + } else if(type == "floppy") { +#if defined (WIN32) || defined(OS2) + if(temp_line.size()==3 && toupper(drive) == toupper(temp_line[0])) { + // automatic mount + } else { + label = drive; label += "_FLOPPY"; + newdrive->SetLabel(label.c_str(),iscdrom,true); + } +#endif + } + if(type == "floppy") incrementFDD(); + return; +showusage: + resetcolor = true; + WriteOut(MSG_Get("PROGRAM_MOUNT_USAGE")); + return; + } +}; + +static void MOUNT_ProgramStart(Program * * make) { + *make=new MOUNT; +} +#endif + +void runMount(const char *str) { +#if !defined(OSFREE) + MOUNT mount; + mount.cmd=new CommandLine("MOUNT", str); + mount.Run(); +#endif +} + +void GUI_Run(bool pressed); + +#if !defined(OSFREE) +class CFGTOOL : public Program { +public: + void Run(void) override { + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_CFGTOOL_HELP")); + return; + } + GUI_Run(false); /* So that I don't have to run the keymapper on every setup of mine just to get the GUI --J.C */ + } +}; + +static void CFGTOOL_ProgramStart(Program * * make) { + *make=new CFGTOOL; +} +#endif + +extern bool custom_bios; +extern size_t custom_bios_image_size; +extern Bitu custom_bios_image_offset; +extern unsigned char *custom_bios_image; +extern uint32_t floppytype; +extern bool boot_debug_break; +extern Bitu BIOS_bootfail_code_offset; + +void DisableINT33(); +void EMS_DoShutDown(); +void XMS_DoShutDown(); +void DOS_DoShutDown(); +void GUS_DOS_Shutdown(); +void SBLASTER_DOS_Shutdown(); + +unsigned char PC98_ITF_ROM[0x8000]; +bool PC98_ITF_ROM_init = false; +unsigned char PC98_BANK_Select = 0x12; + +class PC98ITFPageHandler : public PageHandler { +public: + PC98ITFPageHandler() : PageHandler(PFLAG_READABLE|PFLAG_HASROM) {} + PC98ITFPageHandler(Bitu flags) : PageHandler(flags) {} + HostPt GetHostReadPt(PageNum phys_page) override { + return PC98_ITF_ROM+(phys_page&0x7)*MEM_PAGESIZE; + } + HostPt GetHostWritePt(PageNum phys_page) override { + return PC98_ITF_ROM+(phys_page&0x7)*MEM_PAGESIZE; + } + void writeb(PhysPt addr,uint8_t val) override { + LOG(LOG_CPU,LOG_ERROR)("Write %x to rom at %x",(int)val,(int)addr); + } + void writew(PhysPt addr,uint16_t val) override { + LOG(LOG_CPU,LOG_ERROR)("Write %x to rom at %x",(int)val,(int)addr); + } + void writed(PhysPt addr,uint32_t val) override { + LOG(LOG_CPU,LOG_ERROR)("Write %x to rom at %x",(int)val,(int)addr); + } +}; + +PC98ITFPageHandler mem_itf_rom; + +bool FDC_AssignINT13Disk(unsigned char drv); +void MEM_RegisterHandler(Bitu phys_page,PageHandler * handler,Bitu page_range); +void MEM_ResetPageHandler_Unmapped(Bitu phys_page, Bitu pages); +bool MEM_map_ROM_physmem(Bitu start,Bitu end); +PageHandler &Get_ROM_page_handler(void); + +// Normal BIOS is in the BIOS memory area +// ITF is in its own buffer, served by mem_itf_rom +void PC98_BIOS_Bank_Switch(void) { + if (PC98_BANK_Select == 0x00) { + MEM_RegisterHandler(0xF8,&mem_itf_rom,0x8); + } + else { + MEM_RegisterHandler(0xF8,&Get_ROM_page_handler(),0x8); + } + + PAGING_ClearTLB(); +} + +// BIOS behavior suggests a reset signal puts the BIOS back +void PC98_BIOS_Bank_Switch_Reset(void) { + LOG_MSG("PC-98 43Dh mapping BIOS back into top of RAM"); + PC98_BANK_Select = 0x12; + PC98_BIOS_Bank_Switch(); +#if 0 + Bitu DEBUG_EnableDebugger(void); + DEBUG_EnableDebugger(); +#endif +} + +void pc98_43d_write(Bitu port,Bitu val,Bitu iolen) { + (void)port; + (void)iolen; + + LOG_MSG("PC-98 43Dh BIOS bank switching write: 0x%02x",(unsigned int)val); + + switch (val) { + case 0x00: // ITF + case 0x10: + case 0x18: + PC98_BANK_Select = 0x00; + PC98_BIOS_Bank_Switch(); + break; + case 0x12: // BIOS + PC98_BANK_Select = 0x12; + PC98_BIOS_Bank_Switch(); + break; + default: + LOG_MSG("PC-98 43Dh BIOS bank switching write: 0x%02x unknown value",(unsigned int)val); + break; + } +} + +int IDE_MatchCDROMDrive(char drv); + +#if defined(WIN32) +#include +#else +#if defined(MACOSX) +#define _DARWIN_C_SOURCE +#endif +#include +#if defined(__linux__) && !defined(__GLIBC__) +// musl libc does not need 64 suffix to work with files > 2 GiB +#define fopen64 fopen +#define fseeko64 fseeko +#define ftello64 ftello +#endif +#endif +FILE *retfile = NULL; +FILE * fopen_lock(const char * fname, const char * mode, bool &readonly) { + std::string fmode = mode; + if (lockmount && fmode.size()>1 && fmode.back()=='+') { +#if defined(WIN32) + HANDLE hFile = CreateFile(fname, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile == INVALID_HANDLE_VALUE) { + const host_cnv_char_t* host_name = CodePageGuestToHost(fname); + if (host_name != NULL) hFile = CreateFileW(host_name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + } + if (hFile == INVALID_HANDLE_VALUE) {fmode.pop_back();readonly=true;goto next;} + int nHandle = _open_osfhandle((intptr_t)hFile, _O_RDONLY); + if (nHandle == -1) {CloseHandle(hFile);return NULL;} + retfile = _fdopen(nHandle, fmode.c_str()); + if(!retfile) {CloseHandle(hFile);return NULL;} + LockFile(hFile, 0, 0, 0xFFFFFFFF, 0xFFFFFFFF); +#else + retfile = fopen64(fname, fmode.c_str()); + if (retfile == NULL) {fmode.pop_back();readonly=true;goto next;} /* did you know fopen returns NULL if it cannot open the file? */ + int lock = flock(fileno(retfile), LOCK_EX | LOCK_NB); /* did you know fileno() assumes retfile != NULL and you will segfault if that is wrong? */ + if (lock < 0) { + fclose(retfile); /* don't leak file handles on failure to flock() */ + return NULL; + } +#endif + } else { +next: + retfile = fopen64(fname, fmode.c_str()); +#if defined(WIN32) + if (retfile == NULL) { + const host_cnv_char_t* host_name = CodePageGuestToHost(fname); + if (host_name != NULL) { + const size_t size = fmode.size()+1; + wchar_t* wmode = new wchar_t[size]; + mbstowcs (wmode, fmode.c_str(), size); + retfile = _wfopen(host_name, wmode); + } + } +#endif + } + return retfile; +} + +/*! \brief BOOT.COM utility to boot a floppy or hard disk device. + * + * \description Users will use this command to boot a guest operating system from + * a disk image. Options are provided to specify the device to boot + * from (if the image is already assigned) or a floppy disk image + * specified on the command line. */ +class BOOT : public Program { +public: + BOOT() { + for (size_t i=0;i < MAX_SWAPPABLE_DISKS;i++) newDiskSwap[i] = NULL; + } + virtual ~BOOT() { + for (size_t i=0;i < MAX_SWAPPABLE_DISKS;i++) { + if (newDiskSwap[i] != NULL) { + newDiskSwap[i]->Release(); + newDiskSwap[i] = NULL; + } + } + } + /*! \brief Array of disk images to add to floppy swaplist + */ + imageDisk* newDiskSwap[MAX_SWAPPABLE_DISKS] = {}; + +private: + + /*! \brief Open a file as a disk image and return FILE* handle and size + */ + FILE *getFSFile_mounted(char const* filename, uint32_t *ksize, uint32_t *bsize, uint8_t *error) { + //if return NULL then put in error the errormessage code if an error was requested + bool tryload = (*error)?true:false; + *error = 0; + uint8_t drive; + char fullname[DOS_PATHLENGTH]; + + localDrive* ldp=nullptr; + bool readonly=wpcolon&&strlen(filename)>1&&filename[0]==':'; + if (!DOS_MakeName(readonly?filename+1:filename,fullname,&drive)) return NULL; + + try { + ldp=dynamic_cast(Drives[drive]); + if(!ldp) return NULL; + + FILE *tmpfile = ldp->GetSystemFilePtr(fullname, "rb"); + if(tmpfile == NULL) { + if (!tryload) *error=1; + return NULL; + } + + // get file size + fseek(tmpfile,0L, SEEK_END); + *ksize = uint32_t(ftell(tmpfile) / 1024); + *bsize = uint32_t(ftell(tmpfile)); + fclose(tmpfile); + + if (!readonly) + tmpfile = ldp->GetSystemFilePtr(fullname, "rb+"); + if(readonly || tmpfile == NULL) { +// if (!tryload) *error=2; +// return NULL; + WriteOut(MSG_Get("PROGRAM_BOOT_WRITE_PROTECTED")); + tmpfile = ldp->GetSystemFilePtr(fullname, "rb"); + if(tmpfile == NULL) { + if (!tryload) *error=1; + return NULL; + } + } + + return tmpfile; + } + catch(...) { + return NULL; + } + } + + /*! \brief Open a file as a disk image and return FILE* handle and size + */ + FILE *getFSFile(char const * filename, uint32_t *ksize, uint32_t *bsize,bool tryload=false) { + uint8_t error = tryload?1:0; + FILE* tmpfile = getFSFile_mounted(filename,ksize,bsize,&error); + if(tmpfile) return tmpfile; + //File not found on mounted filesystem. Try regular filesystem + std::string filename_s(filename); + Cross::ResolveHomedir(filename_s); + bool readonly=wpcolon&&filename_s.length()>1&&filename_s[0]==':'; + if (!readonly) + tmpfile = fopen_lock(filename_s.c_str(),"rb+",readonly); + if(readonly || !tmpfile) { + if( (tmpfile = fopen(readonly?filename_s.c_str()+1:filename_s.c_str(),"rb")) ) { + //File exists; So can't be opened in correct mode => error 2 +// fclose(tmpfile); +// if(tryload) error = 2; + WriteOut(MSG_Get("PROGRAM_BOOT_WRITE_PROTECTED")); + fseek(tmpfile,0L, SEEK_END); + *ksize = uint32_t(ftell(tmpfile) / 1024); + *bsize = uint32_t(ftell(tmpfile)); + return tmpfile; + } + // Give the delayed errormessages from the mounted variant (or from above) + if(error == 1) WriteOut(MSG_Get("PROGRAM_BOOT_NOT_EXIST")); + if(error == 2) WriteOut(MSG_Get("PROGRAM_BOOT_NOT_OPEN")); + return NULL; + } + fseek(tmpfile,0L, SEEK_END); + *ksize = uint32_t(ftell(tmpfile) / 1024); + *bsize = uint32_t(ftell(tmpfile)); + return tmpfile; + } + + /*! \brief Utility function to print generic boot error + */ + void printError(void) { + resetcolor = true; + WriteOut(MSG_Get("PROGRAM_BOOT_PRINT_ERROR")); + } + +public: + + /*! \brief Program entry point, when the command is run + */ + void Run(void) override { + std::string tmp; + std::string bios; + std::string boothax_str; + std::string el_torito_mode="noemu"; + std::string el_torito; + bool pc98_640x200 = true; + bool pc98_show_graphics = false; + bool bios_boot = false; + bool swaponedrive = false; + bool convertro = false; + bool force = false; + int loadseg_user = -1; + int convimg = -1; + int quiet = 0; + + //Hack To allow long commandlines + ChangeToLongCmd(); + + boot_debug_break = false; + if (cmd->FindExist("-debug",true)) + boot_debug_break = true; + + if (cmd->FindExist("-swap-one-drive",true)) + swaponedrive = true; + + //look for -el-torito parameter and remove it from the command line. + //This is copy-pasta to be consistent with the IMGMOUNT command which accepts this as either -el-torito or -bootcd. + //But with one important difference: Unlike IMGMOUNT which only supports bootable floppy emulation, this version lets + //you specify any other mode, though at this time, only "no emulation" mode is supported. You specify it as a =suffix + //i.e. -el-torito d:=noemu. No emulation mode is default, the IMGMOUNT --el-torito is still recommended for booting + //floppy emulation at this time. + cmd->FindString("-el-torito",el_torito,true); + if(el_torito == "") cmd->FindString("-bootcd", el_torito, true); + + if (!el_torito.empty()) { + size_t o = el_torito.find_last_of('='); + if (o != std::string::npos && (o+1) < el_torito.length()) { + el_torito_mode = el_torito.substr(o+1); + el_torito = el_torito.substr(0,o); + } + } + + // debugging options + if (cmd->FindExist("-pc98-640x200",true)) + pc98_640x200 = true; + if (cmd->FindExist("-pc98-640x400",true)) + pc98_640x200 = false; + if (cmd->FindExist("-pc98-graphics",true)) + pc98_show_graphics = true; + + if (cmd->FindExist("-q",true)) + quiet = 1; + if (cmd->FindExist("-qq",true)) + quiet = 2; + + if (cmd->FindExist("-force",true)) + force = true; + + if (cmd->FindExist("-convertfatro",true)) { + convimg = 1; + convertro = true; + } + + if (cmd->FindExist("-convertfat",true)) + convimg = 1; + + if (cmd->FindExist("-noconvertfat",true)) + convimg = 0; + + if (cmd->FindString("-bios",bios,true)) + bios_boot = true; + + cmd->FindString("-load-seg",tmp,true); + if (!tmp.empty()) + loadseg_user = strtoul(tmp.c_str(),NULL,0); + + cmd->FindString("-boothax",boothax_str,true); + + if (boothax_str == "msdos") // WARNING: For MS-DOS only, including MS-DOS 7/8 included in Windows 95/98/ME. + boothax = BOOTHAX_MSDOS; // do NOT use while in the graphical interface of Windows 95/98/ME especially a DOS VM. + else if (boothax_str == "") + boothax = BOOTHAX_NONE; + else { + if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_UNKNOWN_BOOTHAX")); + return; + } + + /* In secure mode don't allow people to boot stuff. + * They might try to corrupt the data on it */ + if(control->SecureMode()) { + if (!quiet) WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW")); + return; + } + + if (bios_boot) { + uint32_t isz1,isz2; + + if (bios.empty()) { + if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_SPECIFY_FILE")); + return; + } + + // NOTES: + // + // Regarding PC-98 mode, you should use an older BIOS image. + // The PC-9821 ROM image(s) I have appear to rely on bank + // switching parts of itself to boot up and operate. + // + // Update: I found some PC-9801 ROM BIOS images online, which + // ALSO seem to have a BIOS.ROM, ITF.ROM, etc... + // + // So, this command will not be able to run those + // images until port 43Dh (the I/O port used for + // bank switching) is implemented in DOSBox-X. + // + // In IBM PC/AT mode, this should hopefully allow using old + // 386/486 BIOSes in DOSBox-X. + + /* load it */ + FILE *romfp = getFSFile(bios.c_str(), &isz1, &isz2); + if (romfp == NULL) { + if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_BIOS_OPEN_ERROR")); + return; + } + Bitu loadsz = (isz2 + 0xFU) & (~0xFU); + if (loadsz == 0) loadsz = 0x10; + if (loadsz > (IS_PC98_ARCH ? 0x18000u : 0x20000u)) loadsz = (IS_PC98_ARCH ? 0x18000u : 0x20000u); + Bitu segbase = 0x100000 - loadsz; + LOG_MSG("Loading BIOS image %s to 0x%lx, 0x%lx bytes",bios.c_str(),(unsigned long)segbase,(unsigned long)loadsz); + fseek(romfp, 0, SEEK_SET); + + // To avoid crashes should any interrupt be called on the way to running the BIOS, + // don't actually map it in until it's good and ready to go. + if (custom_bios_image != NULL) delete[] custom_bios_image; + custom_bios_image_size = loadsz; + custom_bios_image_offset = segbase; + custom_bios_image = new unsigned char[custom_bios_image_size]; + + size_t readResult = fread(custom_bios_image,loadsz,1,romfp); + fclose(romfp); + if (readResult != 1) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in Run\n"); + return; + } + + if (IS_PC98_ARCH) { + // The PC-98 BIOS has a bank switching system where at least the last 32KB + // can be switched to an Initial Firmware Test BIOS, which initializes the + // system then switches back to the full 96KB visible during runtime. + // + // We can emulate the same if a file named ITF.ROM exists in the same directory + // as the BIOS image we were given. + // + // To enable multiple ITFs per ROM image, we first try .itf.rom + // before trying itf.rom, for the user's convenience. + FILE *itffp; + + itffp = getFSFile((bios + ".itf.rom").c_str(), &isz1, &isz2); + if (itffp == NULL) itffp = getFSFile((bios + ".ITF.ROM").c_str(), &isz1, &isz2); + if (itffp == NULL) itffp = getFSFile("itf.rom", &isz1, &isz2); + if (itffp == NULL) itffp = getFSFile("ITF.ROM", &isz1, &isz2); + + if (itffp != NULL && isz2 <= 0x8000ul) { + LOG_MSG("Found ITF (initial firmware test) BIOS image (0x%lx bytes)",(unsigned long)isz2); + + memset(PC98_ITF_ROM,0xFF,sizeof(PC98_ITF_ROM)); + readResult = fread(PC98_ITF_ROM,isz2,1,itffp); + fclose(itffp); + if (readResult != 1) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in Run\n"); + return; + } + PC98_ITF_ROM_init = true; + } + + IO_RegisterWriteHandler(0x43D,pc98_43d_write,IO_MB); + } + + custom_bios = true; + + /* boot it */ + throw int(8); + } + + bool bootbyDrive=false; + FILE *usefile_1=NULL; + FILE *usefile_2=NULL; + Bitu i=0; + uint32_t floppysize=0; + uint32_t rombytesize_1=0; + uint32_t rombytesize_2=0; + uint8_t drive = 'A'; + std::string cart_cmd=""; + Bitu max_seg; + + /* IBM PC: + * CS:IP = 0000:7C00 Load = 07C0:0000 + * SS:SP = ??? + * + * PC-98: + * CS:IP = 1FC0:0000 Load = 1FC0:0000 + * SS:SP = 0030:00D8 + * + * Reportedly PC-98 will load to 1FE0:0000 when booting the 1.44MB format (512 bytes per sector). + * Note that 0x1FC0:0000 leaves enough room for the 1024 bytes per sector format of PC-98. + */ + Bitu stack_seg=IS_PC98_ARCH ? 0x0030 : 0x7000; + Bitu load_seg;//=IS_PC98_ARCH ? 0x1FC0 : 0x07C0; + + if (MEM_ConventionalPages() > 0x9C) + max_seg = 0x9C00; + else + max_seg = MEM_ConventionalPages() << (12 - 4); + + if ((stack_seg+0x20) > max_seg) + stack_seg = max_seg - 0x20; + + /* if booting El Torito, the drive specified must be a CD-ROM drive */ + if (!el_torito.empty()) { + //get el-torito floppy from cdrom mounted at drive letter el_torito_cd_drive + char el_torito_cd_drive = toupper(el_torito[0]); + if (el_torito_cd_drive < 'A' || el_torito_cd_drive > 'Z') { + printError(); + return; + } + + if (IS_PC98_ARCH) { + /* PC-98 doesn't have a bootable CD-ROM specification... does it? + * By the time that became common the NEC basically switched to + * making IBM PC-AT compatible Windows 95 systems anyway. */ + printError(); + return; + } + + drive = 0; + if (!cmd->GetCount()) { + drive = 'A' + (dos_kernel_disabled?26:DOS_GetDefaultDrive()); + } + else if (cmd->GetCount() == 1) { + cmd->FindCommand(1, temp_line); + if (temp_line.length()==2&&toupper(temp_line[0])>='A'&&toupper(temp_line[0])<='Z'&&temp_line[1]==':') { + drive = toupper(temp_line[0]); + } + } + else { + printError(); + return; + } + + /* must be valid drive letter, C to Z */ + if (!isalpha(el_torito_cd_drive) || el_torito_cd_drive < 'C') { + WriteOut(MSG_Get("PROGRAM_ELTORITO_LETTER")); + return; + } + + /* drive must not exist (as a hard drive) */ + if (imageDiskList[el_torito_cd_drive - 'A'] != NULL) { + WriteOut(MSG_Get("PROGRAM_ELTORITO_DRIVE_EXISTS")); + return; + } + + bool GetMSCDEXDrive(unsigned char drive_letter, CDROM_Interface **_cdrom); + + /* get the CD-ROM drive */ + CDROM_Interface *src_drive = NULL; + if (!GetMSCDEXDrive(el_torito_cd_drive - 'A', &src_drive)) { + WriteOut(MSG_Get("PROGRAM_ELTORITO_NOT_CDDRIVE")); + return; + } + + /* "No emulation" boot is the only mode supported at this time. + * For floppy emulation boot, use IMGMOUNT and then boot the emulated floppy drive. */ + if (el_torito_mode != "noemu") { + WriteOut(MSG_Get("PROGRAM_BOOT_UNSUPPORTED")); + src_drive->Release(); + return; + } + + unsigned char entries[2048], *entry, ent_num = 0; + int header_platform = -1, header_count = 0; + bool header_final = false; + int header_more = -1; + + /* Okay. Step #1: Scan the volume descriptors for the Boot Record. */ + unsigned long el_torito_base = 0, boot_record_sector = 0, el_torito_rba = (~0ul), el_torito_load_segment = 0, el_torito_sectors = 0/*VIRTUAL SECTORS*/; + unsigned char el_torito_mediatype = 0; + if (!ElTorito_ScanForBootRecord(src_drive, boot_record_sector, el_torito_base)) { + WriteOut(MSG_Get("PROGRAM_ELTORITO_NO_BOOT_RECORD")); + src_drive->Release(); + return; + } + + LOG_MSG("El Torito looking for mode '%s'",el_torito_mode.c_str()); + LOG_MSG("El Torito emulation: Found ISO 9660 Boot Record in sector %lu, pointing to sector %lu\n", + boot_record_sector, el_torito_base); + + /* Step #2: Parse the records. Each one is 32 bytes long */ + if (!src_drive->ReadSectorsHost(entries, false, el_torito_base, 1)) { + WriteOut(MSG_Get("PROGRAM_ELTORITO_ENTRY_UNREADABLE")); + src_drive->Release(); + return; + } + + /* for more information about what this loop is doing, read: + * http://download.intel.com/support/motherboards/desktop/sb/specscdrom.pdf + */ + for (ent_num = 0; ent_num < (2048 / 0x20); ent_num++) { + entry = entries + (ent_num * 0x20); + + if (memcmp(entry, "\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0", 32) == 0) + break; + + if (entry[0] == 0x01/*header*/) { + if (!ElTorito_ChecksumRecord(entry)) { + LOG_MSG("Warning: El Torito checksum error in header(0x01) entry\n"); + continue; + } + + if (header_count != 0) { + LOG_MSG("Warning: El Torito has more than one Header/validation entry\n"); + continue; + } + + if (header_final) { + LOG_MSG("Warning: El Torito has an additional header past the final header\n"); + continue; + } + + header_more = -1; + header_platform = entry[1]; + LOG_MSG("El Torito entry: first header platform=0x%02x\n", header_platform); + header_count++; + } + else if (entry[0] == 0x90/*header, more follows*/ || entry[0] == 0x91/*final header*/) { + if (header_final) { + LOG_MSG("Warning: El Torito has an additional header past the final header\n"); + continue; + } + + header_final = (entry[0] == 0x91); + header_more = (int)(((unsigned int)entry[2]) + (((unsigned int)entry[3]) << 8u)); + header_platform = entry[1]; + LOG_MSG("El Torito entry: first header platform=0x%02x more=%u final=%u\n", header_platform, header_more, header_final); + header_count++; + } + else { + if (header_more == 0) { + LOG_MSG("El Torito entry: Non-header entry count expired, ignoring record 0x%02x\n", entry[0]); + continue; + } + else if (header_more > 0) { + header_more--; + } + + if (entry[0] == 0x44) { + LOG_MSG("El Torito entry: ignoring extension record\n"); + } + else if (entry[0] == 0x00/*non-bootable*/) { + LOG_MSG("El Torito entry: ignoring non-bootable record\n"); + } + else if (entry[0] == 0x88/*bootable*/) { + if (header_platform == 0x00/*x86*/) { + unsigned char mediatype = entry[1] & 0xF; + unsigned short load_segment = ((unsigned int)entry[2]) + (((unsigned int)entry[3]) << 8); + unsigned char system_type = entry[4]; + unsigned short sector_count = ((unsigned int)entry[6]) + (((unsigned int)entry[7]) << 8); + unsigned long load_rba = ((unsigned int)entry[8]) + (((unsigned int)entry[9]) << 8) + + (((unsigned int)entry[10]) << 16) + (((unsigned int)entry[11]) << 24); + + LOG_MSG("El Torito entry: bootable x86 record mediatype=%u load_segment=0x%04x " + "system_type=0x%02x sector_count=%u load_rba=%lu\n", + mediatype, load_segment, system_type, sector_count, load_rba); + + /* already chose one, ignore */ + if (el_torito_rba != ~0UL) + continue; + + if ((mediatype == 0 && el_torito_mode == "noemu")) { + el_torito_rba = load_rba; + el_torito_mediatype = mediatype; + el_torito_load_segment = (load_segment != 0) ? load_segment : 0x7C0; + el_torito_sectors = sector_count; /* VIRTUAL EMULATED sectors not CD-ROM SECTORS */ + } + } + else { + LOG_MSG("El Torito entry: ignoring bootable non-x86 (platform_id=0x%02x) record\n", header_platform); + } + } + else { + LOG_MSG("El Torito entry: ignoring unknown record ID %02x\n", entry[0]); + } + } + } + + if (el_torito_rba == (~0ul) || el_torito_sectors == 0) { + WriteOut(MSG_Get("PROGRAM_ELTORITO_BOOTABLE_SECTION")); + return; + } + + LOG_MSG("Using: rba=%lu virt-sectors=%lu load=0x%lx mediatype=%u", + (unsigned long)el_torito_rba, + (unsigned long)el_torito_sectors, + (unsigned long)el_torito_load_segment, + el_torito_mediatype); + + load_seg = el_torito_load_segment; + + /* we're about to overwrite low memory and possibly corrupt the MCB, and the shell now frees memory. + * to avoid a MCB corruption crash in this emulation, reset the MCB chain now. */ + dos_kernel_shutdown_mcb = true; + + /* round up to CD-ROM sectors and read */ + unsigned int bootcdsect = (el_torito_sectors + 3u) / 4u; /* 4 512-byte sectors per CD-ROM sector */ + if (bootcdsect == 0) bootcdsect = 1; + + for (unsigned int s=0;s < bootcdsect;s++) { + if (!src_drive->ReadSectorsHost(entries, false, el_torito_rba+s, 1)) { + WriteOut(MSG_Get("PROGRAM_ELTORITO_BOOTSECTOR")); + src_drive->Release(); + return; + } + + for(i=0;i<2048;i++) real_writeb((uint16_t)load_seg, (uint16_t)i+(s*2048), entries[i]); + } + + /* signal INT 13h to emulate a CD-ROM drive El Torito "no emulation" style */ + // assert(INT13_ElTorito_cdrom == NULL); + INT13_ElTorito_IDEInterface = -1; + INT13_ElTorito_NoEmuDriveNumber = 0x90; + INT13_ElTorito_NoEmuCDROMDrive = el_torito_cd_drive; + (INT13_ElTorito_cdrom = src_drive)->Addref(); + src_drive->Release(); + + /* this is required if INT 13h extensions are to correctly report what IDE controller the drive is connected to and master/slave */ + { + int x = IDE_MatchCDROMDrive(el_torito_cd_drive); + if (x >= 0) INT13_ElTorito_IDEInterface = (char)x; + LOG_MSG("CD-ROM drive IDE interface number %d",INT13_ElTorito_IDEInterface); + } + + SegSet16(cs, load_seg); + SegSet16(ds, 0); + SegSet16(es, 0); + reg_ip = 0; + reg_ebx = 0; + reg_esp = 0x100; + /* set up stack at a safe place */ + SegSet16(ss, (uint16_t)stack_seg); + reg_esi = 0; + reg_ecx = 0; + reg_ebp = 0; + reg_eax = 0; + /* ISOLINUX clearly assumes DL at entry contains the drive number and at no point from entry to INT 13h does it change the contents of DX */ + reg_edx = INT13_ElTorito_NoEmuDriveNumber; +#ifdef __WIN32__ + // let menu know it boots + menu.boot=true; +#endif + bootguest=false; + bootdrive=drive-65; + + /* forcibly exit the shell, the DOS kernel, and anything else by throwing an exception */ + throw int(2); + + return; + } + FILE* usefile; + auto loadDiskImage = [&](const std::string& name, size_t index) { + uint32_t rombytesize = 0; + bool readonly = wpcolon && name.length() > 1 && name[0] == ':'; + + if(!quiet) + WriteOut(MSG_Get("PROGRAM_BOOT_IMAGE_OPEN"), + readonly ? name.c_str() + 1 : name.c_str()); + + usefile = getFSFile(name.c_str(), &floppysize, &rombytesize); + if(!usefile) { + if(!quiet) + WriteOut(MSG_Get("PROGRAM_BOOT_IMAGE_NOT_OPEN"), + readonly ? name.c_str() + 1 : name.c_str()); + return false; + } + + char hdr[256]; + fseeko64(usefile, 0L, SEEK_SET); + if(fread(hdr, 256, 1, usefile) != 1) + return false; + + const char* ext = strrchr(name.c_str(), '.'); + const char* fname = readonly ? name.c_str() + 1 : name.c_str(); + + if(newDiskSwap[index]) { + newDiskSwap[index]->Release(); + newDiskSwap[index] = nullptr; + } + + if(ext && !strcasecmp(ext, ".d88")) + newDiskSwap[index] = new imageDiskD88(usefile, fname, floppysize, false); + else if(!memcmp(hdr, "VFD1.", 5)) + newDiskSwap[index] = new imageDiskVFD(usefile, fname, floppysize, false); + else if(!memcmp(hdr, "T98FDDIMAGE.R0\0\0", 16)) + newDiskSwap[index] = new imageDiskNFD(usefile, fname, floppysize, false, 0); + else if(!memcmp(hdr, "T98FDDIMAGE.R1\0\0", 16)) + newDiskSwap[index] = new imageDiskNFD(usefile, fname, floppysize, false, 1); + else + newDiskSwap[index] = new imageDisk(usefile, fname, floppysize, floppysize > 2880); + + if(newDiskSwap[index]) { + newDiskSwap[index]->Addref(); + if(index == 0 && usefile_1 == NULL) { + usefile_1 = usefile; + rombytesize_1 = rombytesize; + } + else if(usefile_2 == NULL) { + usefile_2 = usefile; + rombytesize_2 = rombytesize; + } + return true; + } + else return false; + }; + + int image_count = 0; // number of disk images loaded from command line + i = 0; // number of command line arguments processed + if(!cmd->GetCount()) { + /* No drives or images specified */ + if (Drives[0] && !strncmp(Drives[0]->GetInfo(), "fatDrive ", 9)) { + drive = 'A'; + bootbyDrive = true; + } + else if (Drives[2] && !strncmp(Drives[2]->GetInfo(), "fatDrive ", 9)){ + drive = 'C'; + bootbyDrive = true; + } + else if(Drives[3] && !strncmp(Drives[3]->GetInfo(), "fatDrive ", 9)) { + drive = 'D'; + bootbyDrive = true; + } + else { + printError(); + return; + } + i++; + } + else if(cmd->GetCount() == 1) { + cmd->FindCommand(1, temp_line); + + if(temp_line.length() == 2 && isalpha(temp_line[0]) && temp_line[1] == ':') { + /* Drive specified */ + drive = toupper(temp_line[0]); + if((drive != 'A') && (drive != 'C') && (drive != 'D')) { + printError(); + return; + } + bootbyDrive = true; + } + else if(temp_line.length() == 2 && ((temp_line == "/?") || (temp_line == "-?"))) { + printError(); + return; + } + else if(temp_line.length() == 1 && isdigit(temp_line[0])) { + /* Drive number specified */ + if(temp_line[0] == '0') drive = 'A'; + else if(temp_line[0] == '2') drive = 'C'; + bootbyDrive = true; + } + else { + /* Single image specified */ + uint32_t rombytesize = 0; + FILE* testfile = getFSFile(temp_line.c_str(), &floppysize, &rombytesize); + if(testfile) { + fclose(testfile); + std::string mount_string; + if(floppysize <= 2880) { + if(Drives[0]) { + WriteOut(MSG_Get("PROGRAM_BOOT_IMAGE_MOUNTED")); + return; + } + drive = 'A'; + loadDiskImage(temp_line, image_count); + } + else { + if(Drives[2]){ + if(!strncmp(Drives[2]->GetInfo(), "fatDrive ", 9)) { + WriteOut("Hard drive image already mounted\n"); + return; + } + runImgmount("c -u"); + } + drive = 'C'; + mount_string = "2 " + temp_line; + runImgmount(mount_string.c_str()); // loadDiskImage() doesn't work well for hard disks + } + image_count++; + } + else { + WriteOut("BOOT: Failed to open disk image\n"); + return; + } + } + i++; + } + + while(i < cmd->GetCount()) { + if(cmd->FindCommand((unsigned int)(i + 1), temp_line)) { + if((temp_line == "/?") || (temp_line == "-?")) { + printError(); + return; + } + if((temp_line == "-l") || (temp_line == "-L")) { + /* Specifying drive... next argument then is the drive */ + i++; + if(cmd->FindCommand((unsigned int)(i + 1), temp_line)) { + if(temp_line.length() != 1) { + printError(); /* Syntax error: invalid drive letter */ + return; + } + if(temp_line[0] >= '0' && temp_line[0] <= '9') + drive = 'A' + temp_line[0] - '0'; + else if (isalpha(temp_line[0])) + drive = toupper(temp_line[0]); + else { + printError(); /* Syntax error: invalid drive letter */ + return; + } + } + else { + printError(); /* DOSBox-X ignores -l option, but print error on syntax errors */ + return; + } + i++; + continue; + } + + if((temp_line == "-e") || (temp_line == "-E")) { + /* Command mode for PCJr cartridges */ + i++; + if(cmd->FindCommand((unsigned int)(i + 1), temp_line)) { + for(size_t ct = 0; ct < temp_line.size(); ct++) temp_line[ct] = toupper(temp_line[ct]); + cart_cmd = temp_line; + } + else { + printError(); + return; + } + i++; + continue; + } + + if(image_count >= MAX_SWAPPABLE_DISKS) { + return; //TODO give a warning. + } + loadDiskImage(temp_line, image_count); + if(!newDiskSwap[image_count]) { + WriteOut("BOOT: Failed to open disk image\n"); + return; + } + + if(image_count == 0 && newDiskSwap[0]) { + if(newDiskSwap[0]->diskSizeK <= 2880) { + if(Drives[0]) { + newDiskSwap[0]->Release(); + newDiskSwap[0] = nullptr; + WriteOut(MSG_Get("PROGRAM_BOOT_IMAGE_MOUNTED")); + return; + } + else { + drive = 'A'; + } + } + else { + if(Drives[2]) { + newDiskSwap[0]->Release(); + newDiskSwap[0] = nullptr; + if(!strncmp(Drives[2]->GetInfo(), "fatDrive ", 9)) { + WriteOut("Hard drive image already mounted\n"); + return; + } + runImgmount("c -u"); + } + drive = 'C'; + std::string mount_string = "2 " + temp_line; + runImgmount(mount_string.c_str()); + } + } + else if(newDiskSwap[image_count]) { + if(drive == 'C') { + WriteOut("Can't create swap list for hard disk images.\n"); + return; + } + else if(newDiskSwap[image_count]->diskSizeK > 2880) { + newDiskSwap[image_count]->Release(); + newDiskSwap[image_count] = nullptr; + WriteOut("Not a floppy image.\n"); + return; + } + } + image_count++; + } + i++; + } + + if(image_count > 1) { + drive = 'A'; + /* if more than one image is given, then this drive becomes the focus of the swaplist */ + if(swapInDisksSpecificDrive >= 0 && swapInDisksSpecificDrive != (drive - 65)) { + if(!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_SWAP_ALREADY")); + return; + } + swapInDisksSpecificDrive = 0; + + /* transfer to the diskSwap array */ + for(auto si = 0; si < MAX_SWAPPABLE_DISKS; si++) { + if(diskSwap[si]) { + diskSwap[si]->Release(); + diskSwap[si] = nullptr; + } + diskSwap[si] = newDiskSwap[si]; + newDiskSwap[si] = nullptr; + } + + swapPosition = 0; + swapInDisks(-1); + } + // else { + // if(newDiskSwap[0] && newDiskSwap[0]->diskimg) { // only one image specified + // imageDiskList[drive - 65] = newDiskSwap[0]; + // newDiskSwap[0] = nullptr; + // } + // else if(drive == 0 || !imageDiskList[drive - 65]) { + // WriteOut("BOOT: Failed to open disk image\n"); + // return; + // } + // } + + if(imageDiskList[drive-65]==NULL) { + if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_UNABLE"), drive); + return; + } + + // .D88 images come from PC-88 which usually means the boot sector is full + // of Z80 executable code, therefore it's very unlikely the boot sector will + // work with our x86 emulation! + // + // If the user is REALLY REALLY SURE they want to try executing Z80 bootsector + // code as x86, they're free to use --force. + // + // However PC-98 games are also distributed as .D88 images and therefore + // we probably CAN boot the image. + // + // It depends on the fd_type field of the image. + if (!force && imageDiskList[drive-65]->class_id == imageDisk::ID_D88) { + if (reinterpret_cast(imageDiskList[drive-65])->fd_type_major == imageDiskD88::DISKTYPE_2D) { + if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_IS_PC88")); + return; + } + } + + + bootSector bootarea; + + if (imageDiskList[drive-65]->getSectSize() > sizeof(bootarea)) { + if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_BPS_TOOLARGE")); + return; + } + + /* clear the disk change flag. + * Most OSes don't expect the disk change error signal when they first boot up */ + imageDiskChange[drive-65] = false; + + bool has_read = false; + bool pc98_sect128 = false; + unsigned int bootsize = imageDiskList[drive-65]->getSectSize(); + + if (!has_read && IS_PC98_ARCH && drive < 'C') { + /* this may be one of those odd FDD images where track 0, head 0 is all 128-byte sectors + * and the rest of the disk is 256-byte sectors. */ + if (imageDiskList[drive - 65]->Read_Sector(0, 0, 1, (uint8_t *)&bootarea, 128) == 0 && + imageDiskList[drive - 65]->Read_Sector(0, 0, 2, (uint8_t *)&bootarea + 128, 128) == 0 && + imageDiskList[drive - 65]->Read_Sector(0, 0, 3, (uint8_t *)&bootarea + 256, 128) == 0 && + imageDiskList[drive - 65]->Read_Sector(0, 0, 4, (uint8_t *)&bootarea + 384, 128) == 0) { + LOG_MSG("First sector is 128 byte/sector. Booting from first four sectors."); + has_read = true; + bootsize = 512; // 128 x 4 + pc98_sect128 = true; + } + } + + if (!has_read && IS_PC98_ARCH && drive < 'C') { + /* another nonstandard one with track 0 having 256 bytes/sector while the rest have 1024 bytes/sector */ + if (imageDiskList[drive - 65]->Read_Sector(0, 0, 1, (uint8_t *)&bootarea, 256) == 0 && + imageDiskList[drive - 65]->Read_Sector(0, 0, 2, (uint8_t *)&bootarea + 256, 256) == 0 && + imageDiskList[drive - 65]->Read_Sector(0, 0, 3, (uint8_t *)&bootarea + 512, 256) == 0 && + imageDiskList[drive - 65]->Read_Sector(0, 0, 4, (uint8_t *)&bootarea + 768, 256) == 0) { + LOG_MSG("First sector is 256 byte/sector. Booting from first two sectors."); + has_read = true; + bootsize = 1024; // 256 x 4 + pc98_sect128 = true; + } + } + + /* NTS: Load address is 128KB - sector size */ + if (loadseg_user > 0) { /* Some PC-98 games have floppy boot code that suggests the boot segment isn't always 0x1FC0 like PC-9821 hardware does? */ + load_seg=(unsigned int)loadseg_user; + } + else { + unsigned int max_seg = std::min((unsigned int)(MEM_ConventionalPages()*(4096u/16u)/*pages to paragraphs*/),0xC000u); + if (IS_PC98_ARCH) + load_seg=std::min(max_seg,0x2000u/*128KB mark*/) - (bootsize/16U); /* normally 0x1FC0 (1024 byte/sector) or 0x1FE0 (512 byte/sector) */ + else + load_seg=std::min(max_seg,0x800u/*32KB mark*/) - 0x40u/*1KB*/; /* normally 0x07C0 */ + } + + if (!has_read) { + if (imageDiskList[drive - 65]->Read_Sector(0, 0, 1, (uint8_t *)&bootarea) != 0) { + if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_DRIVE_READERROR")); + return; + } + } + + Bitu pcjr_hdr_length = 0; + uint8_t pcjr_hdr_type = 0; // not a PCjr cartridge + if ((bootarea.rawdata[0]==0x50) && (bootarea.rawdata[1]==0x43) && (bootarea.rawdata[2]==0x6a) && (bootarea.rawdata[3]==0x72)) { + pcjr_hdr_type = 1; // JRipCart + pcjr_hdr_length = 0x200; + } else if ((bootarea.rawdata[56]==0x50) && (bootarea.rawdata[57]==0x43) && (bootarea.rawdata[58]==0x4a) && (bootarea.rawdata[59]==0x52)) { + pcjr_hdr_type = 2; // PCJRCart + pcjr_hdr_length = 0x80; + } + + if (pcjr_hdr_type > 0) { + if (machine!=MCH_PCJR&&!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_CART_WO_PCJR")); + else { + uint8_t rombuf[65536]; + Bits cfound_at=-1; + if (cart_cmd!="") { + /* read cartridge data into buffer */ + fseek(usefile_1, (long)pcjr_hdr_length, SEEK_SET); + size_t readResult = fread(rombuf, 1, rombytesize_1-pcjr_hdr_length, usefile_1); + if (readResult != rombytesize_1 - pcjr_hdr_length) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in Run\n"); + return; + } + + char cmdlist[1024]; + cmdlist[0]=0; + Bitu ct=6; + Bits clen=rombuf[ct]; + char buf[257]; + if (cart_cmd=="?") { + while (clen!=0) { + safe_strncpy(buf,(char*)&rombuf[ct+1],clen); + buf[clen]=0; + upcase(buf); + strcat(cmdlist," "); + strcat(cmdlist,buf); + ct+=1u+(Bitu)clen+3u; + if (ct>sizeof(cmdlist)) break; + clen=rombuf[ct]; + } + if (ct>6) { + if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_CART_LIST_CMDS"),cmdlist); + } else { + if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_CART_NO_CMDS")); + } + for(Bitu dct=0;dctRelease(); + diskSwap[dct]=NULL; + } + } + //fclose(usefile_1); //delete diskSwap closes the file + return; + } else { + while (clen!=0) { + safe_strncpy(buf,(char*)&rombuf[ct+1],clen); + buf[clen]=0; + upcase(buf); + strcat(cmdlist," "); + strcat(cmdlist,buf); + ct+=1u+(Bitu)clen; + + if (cart_cmd==buf) { + cfound_at=(Bits)ct; + break; + } + + ct+=3; + if (ct>sizeof(cmdlist)) break; + clen=rombuf[ct]; + } + if (cfound_at<=0) { + if (ct>6) { + if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_CART_LIST_CMDS"),cmdlist); + } else { + if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_CART_NO_CMDS")); + } + for(Bitu dct=0;dctRelease(); + diskSwap[dct]=NULL; + } + } + //fclose(usefile_1); //Delete diskSwap closes the file + return; + } + } + } + + void PreparePCJRCartRom(void); + PreparePCJRCartRom(); + + if (usefile_1==NULL) return; + + uint32_t sz1,sz2; + FILE *tfile = getFSFile("system.rom", &sz1, &sz2, true); + if (tfile!=NULL) { + fseek(tfile, 0x3000L, SEEK_SET); + uint32_t drd=(uint32_t)fread(rombuf, 1, 0xb000, tfile); + if (drd==0xb000) { + for(i=0;i<0xb000;i++) phys_writeb((PhysPt)(0xf3000+i),rombuf[i]); + } + fclose(tfile); + } + + if (usefile_2!=NULL) { + unsigned int romseg_pt=0; + + fseek(usefile_2, 0x0L, SEEK_SET); + size_t readResult = fread(rombuf, 1, pcjr_hdr_length, usefile_2); + if (readResult != pcjr_hdr_length) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in Run\n"); + return; + } + + if (pcjr_hdr_type == 1) { + romseg_pt=host_readw(&rombuf[0x1ce]); + } else { + fseek(usefile_2, 0x61L, SEEK_SET); + int scanResult = fscanf(usefile_2, "%4x", &romseg_pt); + if (scanResult == 0) { + LOG(LOG_IO, LOG_ERROR) ("Scanning error in Run\n"); + return; + } + } + /* read cartridge data into buffer */ + fseek(usefile_2, (long)pcjr_hdr_length, SEEK_SET); + readResult = fread(rombuf, 1, rombytesize_2-pcjr_hdr_length, usefile_2); + if (readResult != rombytesize_2 - pcjr_hdr_length) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in Run\n"); + return; + } + //fclose(usefile_2); //usefile_2 is in diskSwap structure which should be deleted to close the file + + /* write cartridge data into ROM */ + for(i=0;iRelease(); + diskSwap[dct]=NULL; + } + } + + + if (cart_cmd=="") { + uint32_t old_int18=mem_readd(0x60); + /* run cartridge setup */ + SegSet16(ds,romseg); + SegSet16(es,romseg); + SegSet16(ss,0x8000); + reg_esp=0xfffe; + CALLBACK_RunRealFar(romseg,0x0003); + + uint32_t new_int18=mem_readd(0x60); + if (old_int18!=new_int18) { + /* boot cartridge (int18) */ + SegSet16(cs,RealSeg(new_int18)); + reg_ip = RealOff(new_int18); + } + } else { + if (cfound_at>0) { + /* run cartridge setup */ + SegSet16(ds,dos.psp()); + SegSet16(es,dos.psp()); + CALLBACK_RunRealFar((uint16_t)romseg,(uint16_t)cfound_at); + } + } + } + } else { + extern const char* RunningProgram; + + if (max_seg < (IS_PC98_ARCH?0x2000:0x0800)) LOG(LOG_MISC,LOG_WARN)("Booting a guest OS with too small amount of RAM may not work correctly"); + + /* Other versions of MS-DOS/PC-DOS have their own requirements about memory: + * - IBM PC-DOS 1.0/1.1: not too picky, will boot with as little as 32KB even though + * it was intended for the average model with 64KB of RAM. + * + * - IBM PC-DOS 2.1: requires at least 44KB of RAM. will crash on boot otherwise. + * + * - MS-DOS 3.2: requires at least 64KB to boot without crashing, 80KB to make it + * to the command line without halting at "configuration too big for + * memory"*/ + + /* TODO: Need a configuration option or a BOOT command option where the user can + * dictate where we put the stack: if we put it at 0x7000 or top of memory + * (default) or just below the boot sector, or... */ + + if((bootarea.rawdata[0]==0) && (bootarea.rawdata[1]==0)) { + if (!quiet) WriteOut(MSG_Get("PROGRAM_BOOT_UNABLE"), drive); + return; + } + + char msg[512] = {0}; + const uint8_t page=real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE); + if (!dos_kernel_disabled && (convimg == 1 || (convertimg && convimg == -1))) { + unsigned int drv = 2, nextdrv = 2; + Section_prop *sec = static_cast(control->GetSection("dosbox")); + int freeMB = sec->Get_int("convert fat free space"), timeout = sec->Get_int("convert fat timeout"); + for (unsigned int d=2;dGetInfo(), "fatDrive ", 9) && strncmp(Drives[drv]->GetInfo(), "isoDrive ", 9)) { + if (drv==ZDRIVE_NUM && !static_cast(control->GetSection("dos"))->Get_bool("drive z convert fat")) continue; + while (imageDiskList[nextdrv]) nextdrv++; + if (nextdrv>=MAX_DISK_IMAGES) break; + if (quiet<2) { + size_t len = strlen(msg); + if (!len) { + strcat(msg, CURSOR_POS_COL(page)>0?"\r\n":""); + len = strlen(msg); + } + strcat(msg, "Converting drive "); + strcat(msg, std::string(1, 'A'+drv).c_str()); + strcat(msg, ": to FAT..."); + LOG_MSG("%s", msg+len); + strcat(msg, "\r\n"); + if (!quiet) { + uint16_t s = (uint16_t)strlen(msg); + DOS_WriteFile(STDERR,(uint8_t*)msg,&s); + *msg = 0; + } + } + Overlay_Drive *od = dynamic_cast(Drives[drv]); + imageDisk *imagedrv = new imageDisk(Drives[drv], drv, (convertro || Drives[drv]->readonly || (od && od->ovlreadonly)) ? 0 : freeMB, timeout); + if (imagedrv && imagedrv->ffdd) { + imageDiskList[nextdrv] = imagedrv; + imagedrv->Addref(); + bool ide_slave = false; + signed char ide_index = -1; + IDE_Auto(ide_index,ide_slave); + IDE_Hard_Disk_Attach((signed char)ide_index, ide_slave, nextdrv); + } else if (imagedrv) + delete imagedrv; + } + } + } + + if (quiet<2) { + if (!strlen(msg)) strcat(msg, CURSOR_POS_COL(page)>0?"\r\n":""); + strcat(msg, MSG_Get("PROGRAM_BOOT_BOOTING")); + strcat(msg, std::string(1, drive).c_str()); + strcat(msg, "...\r\n"); + uint16_t s = (uint16_t)strlen(msg); + DOS_WriteFile(STDERR,(uint8_t*)msg,&s); + } + if (IS_DOSV) { + uint8_t mode = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_MODE); + if (mode == 3 || mode == 0x70 || mode == 0x72 || mode == 0x78) { + uint16_t oldax=reg_ax; + reg_ax = 0x12; + CALLBACK_RunRealInt(0x10); + reg_ax = oldax; + } + } + + /* we're about to overwrite low memory and possibly corrupt the MCB, and the shell now frees memory. + * to avoid a MCB corruption crash in this emulation, reset the MCB chain now. */ + dos_kernel_shutdown_mcb = true; + + for(i=0;itcount=true; + GetDMAChannel(3)->tcount=true; + } + else { + if (!IS_TANDY_ARCH && floppysize!=0) GetDMAChannel(2)->tcount=true; + } + + /* standard method */ + if (IS_PC98_ARCH) { + /* Based on a CPU register dump at boot time on a real PC-9821: + * + * DUMP: + * + * SP: 00D8 SS: 0030 ES: 1FE0 DS: 0000 CS: 1FE0 FL: 0246 BP: 0000 + * DI: 055C SI: 1FE0 DX: 0001 CX: 0200 BX: 0200 AX: 0030 IP: 0000 + * + * So: + * + * Stack at 0030:00D8 + * + * CS:IP at load_seg:0000 + * + * load_seg at 0x1FE0 which on the original 128KB PC-98 puts it at the top of memory + * + */ + SegSet16(cs, (uint16_t)load_seg); + SegSet16(ds, 0x0000); + SegSet16(es, (uint16_t)load_seg); + reg_ip = 0; + reg_ebx = 0x200; + reg_esp = 0xD8; + /* set up stack at a safe place */ + SegSet16(ss, (uint16_t)stack_seg); + reg_esi = (uint32_t)load_seg; + reg_ecx = 0x200; + reg_ebp = 0; + reg_eax = 0x30; + reg_edx = 0x1; + + /* It seems 640x200 8-color digital mode is the state of the graphics hardware when the + * BIOS boots the OS, and some games like Ys II assume the hardware is in this state. + * + * If I am wrong, you can pass --pc98-640x400 as a command line option to disable this. */ + if (pc98_640x200) { + reg_eax = 0x4200; // setup 640x200 graphics + reg_ecx = 0x8000; // lower + CALLBACK_RunRealInt(0x18); + } + else { + reg_eax = 0x4200; // setup 640x400 graphics + reg_ecx = 0xC000; // full + CALLBACK_RunRealInt(0x18); + } + + /* Some HDI images of Orange House games need this option because it assumes NEC MOUSE.COM + * behavior where mouse driver init and reset show the graphics layer. Unfortunately the HDI + * image uses QMOUSE which does not show the graphics layer. Use this option with those + * HDI images to make them playable anyway. */ + if (pc98_show_graphics) { + reg_eax = 0x4000; // show graphics + CALLBACK_RunRealInt(0x18); + } + else { + reg_eax = 0x4100; // hide graphics (normal state of graphics layer on startup). INT 33h emulation might have enabled it. + CALLBACK_RunRealInt(0x18); + } + + /* PC-98 MS-DOS boot sector behavior suggests that the BIOS does a CALL FAR + * to the boot sector, and the boot sector can RETF back to the BIOS on failure. */ + CPU_Push16((uint16_t)(BIOS_bootfail_code_offset >> 4)); /* segment */ + CPU_Push16(BIOS_bootfail_code_offset & 0xF); /* offset */ + + /* clear the text layer */ + for (i=0;i < (80*25*2);i += 2) { + mem_writew((PhysPt)(0xA0000+i),0x0000); + mem_writew((PhysPt)(0xA2000+i),0x00E1); + } + + /* hide the cursor */ + void PC98_show_cursor(bool show); + PC98_show_cursor(false); + + /* There is a byte at 0x584 that describes the boot drive + type. + * This is confirmed in Neko Project II source and by the behavior + * of an MS-DOS boot disk formatted by a PC-98 system. + * + * There are three values for three different floppy formats, and + * one for hard drives */ + uint32_t heads,cyls,sects,ssize; + + imageDiskList[drive-65]->Get_Geometry(&heads,&cyls,§s,&ssize); + + uint8_t RDISK_EQUIP = 0; /* 488h (ref. PC-9800 Series Technical Data Book - BIOS 1992 page 233 */ + /* bits [7:4] = 640KB FD drives 3:0 + * bits [3:0] = 1MB FD drives 3:0 */ + uint8_t F2HD_MODE = 0; /* 493h (ref. PC-9800 Series Technical Data Book - BIOS 1992 page 233 */ + /* bits [7:4] = 640KB FD drives 3:0 ?? + * bits [3:0] = 1MB FD drives 3:0 ?? */ + uint8_t F2DD_MODE = 0; /* 5CAh (ref. PC-9800 Series Technical Data Book - BIOS 1992 page 233 */ + /* bits [7:4] = 640KB FD drives 3:0 ?? + * bits [3:0] = 1MB FD drives 3:0 ?? */ + uint16_t disk_equip = 0, disk_equip_144 = 0; + uint8_t scsi_equip = 0; + + /* FIXME: MS-DOS appears to be able to see disk image B: but only + * if the disk format is the same, for some reason. + * + * So, apparently you cannot put a 1.44MB image in drive A: + * and a 1.2MB image in drive B: */ + + for (i=0;i < 2;i++) { + if (imageDiskList[i] != NULL) { + disk_equip |= (0x0111u << i); /* 320KB[15:12] 1MB[11:8] 640KB[7:4] unit[1:0] */ + disk_equip_144 |= (1u << i); + F2HD_MODE |= (0x11u << i); + } + } + + for (i=0;i < 2;i++) { + if (imageDiskList[i+2] != NULL) { + scsi_equip |= (1u << i); + + uint16_t m = 0x460u + ((uint16_t)i * 4u); + + mem_writeb(m+0u,sects); + mem_writeb(m+1u,heads); + mem_writew(m+2u,(cyls & 0xFFFu) + (ssize == 512u ? 0x1000u : 0u) + (ssize == 1024u ? 0x2000u : 0) + 0x8000u/*NP2:hwsec*/); + } + } + + mem_writew(0x55C,disk_equip); /* disk equipment (drive 0 is present) */ + mem_writew(0x5AE,disk_equip_144); /* disk equipment (drive 0 is present, 1.44MB) */ + mem_writeb(0x482,scsi_equip); + mem_writeb(0x488,RDISK_EQUIP); /* RAM disk equip */ + mem_writeb(0x493,F2HD_MODE); + mem_writeb(0x5CA,F2DD_MODE); + + if (drive >= 'C') { + /* hard drive */ + mem_writeb(0x584,0xA0/*type*/ + (drive - 'C')/*drive*/); + } + else if ((ssize == 1024 && heads == 2 && cyls == 77 && sects == 8) || pc98_sect128) { + mem_writeb(0x584,0x90/*type*/ + (drive - 65)/*drive*/); /* 1.2MB 3-mode */ + } + else if (ssize == 512 && heads == 2 && cyls == 80 && sects == 18) { + mem_writeb(0x584,0x30/*type*/ + (drive - 65)/*drive*/); /* 1.44MB */ + } + else { + // FIXME + LOG_MSG("PC-98 boot: Unable to determine boot drive type for ssize=%u heads=%u cyls=%u sects=%u. Guessing.", + ssize,heads,cyls,sects); + + mem_writeb(0x584,(ssize < 1024 ? 0x30 : 0x90)/*type*/ + (drive - 65)/*drive*/); + } + } + else { + // Toshiba DOS bootloader checks the floppy disk drives running in the BIOS working area. + if(IS_J3100) { + mem_writeb(BIOS_DRIVE_RUNNING, 0x01); + mem_writeb(BIOS_DISK_MOTOR_TIMEOUT, 10); + } + SegSet16(cs, 0); + SegSet16(ds, 0); + SegSet16(es, 0); + reg_ip = (uint16_t)(load_seg<<4); + reg_ebx = (uint32_t)(load_seg<<4); //Real code probably uses bx to load the image + reg_esp = 0x100; + /* set up stack at a safe place */ + SegSet16(ss, (uint16_t)stack_seg); + reg_esi = 0; + reg_ecx = 1; + reg_ebp = 0; + reg_eax = 0; + reg_edx = 0; //Head 0 + if (drive >= 'A' && drive <= 'B') + reg_edx += (unsigned int)(drive-'A'); + else if (drive >= 'C' && drive <= 'Z') + reg_edx += 0x80u+(unsigned int)(drive-'C'); + } +#ifdef __WIN32__ + // let menu know it boots + menu.boot=true; +#endif + bootguest=false; + bootdrive=drive-65; + + /* forcibly exit the shell, the DOS kernel, and anything else by throwing an exception */ + throw int(2); + } + } +}; + +static void BOOT_ProgramStart(Program * * make) { + *make=new BOOT; +} + +void runBoot(const char *str) { + BOOT boot; + boot.cmd=new CommandLine("BOOT", str); + boot.Run(); +} + +class LOADROM : public Program { +public: + void Run(void) override { + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_LOADROM_HELP")); + return; + } + + if (!(cmd->FindCommand(1, temp_line))) { + WriteOut(MSG_Get("PROGRAM_LOADROM_SPECIFY_FILE")); + return; + } + + uint8_t drive; + char fullname[DOS_PATHLENGTH]; + localDrive* ldp=nullptr; + if (!DOS_MakeName(temp_line.c_str(),fullname,&drive)) return; + + try { + /* try to read ROM file into buffer */ + ldp=dynamic_cast(Drives[drive]); + if(!ldp) return; + + FILE *tmpfile = ldp->GetSystemFilePtr(fullname, "rb"); + if(tmpfile == NULL) { + WriteOut(MSG_Get("PROGRAM_LOADROM_CANT_OPEN")); + return; + } + fseek(tmpfile, 0L, SEEK_END); + if (ftell(tmpfile)>0x8000) { + WriteOut(MSG_Get("PROGRAM_LOADROM_TOO_LARGE")); + fclose(tmpfile); + return; + } + fseek(tmpfile, 0L, SEEK_SET); + uint8_t rom_buffer[0x8000]; + Bitu data_read = fread(rom_buffer, 1, 0x8000, tmpfile); + fclose(tmpfile); + + /* try to identify ROM type */ + PhysPt rom_base = 0; + if (data_read >= 0x4000 && rom_buffer[0] == 0x55 && rom_buffer[1] == 0xaa && + (rom_buffer[3] & 0xfc) == 0xe8 && strncmp((char*)(&rom_buffer[0x1e]), "IBM", 3) == 0) { + + if (!IS_EGAVGA_ARCH) { + WriteOut(MSG_Get("PROGRAM_LOADROM_INCOMPATIBLE")); + return; + } + rom_base = PhysMake(0xc000, 0); // video BIOS + } + else if (data_read == 0x8000 && rom_buffer[0] == 0xe9 && rom_buffer[1] == 0x8f && + rom_buffer[2] == 0x7e && strncmp((char*)(&rom_buffer[0x4cd4]), "IBM", 3) == 0) { + + rom_base = PhysMake(0xf600, 0); // BASIC + } + + if (rom_base) { + /* write buffer into ROM */ + for (Bitu i=0; iFindCommand(1, temp_line))) { + WriteOut(MSG_Get("PROGRAM_BIOSTEST_SPECIFY_FILE")); + return; + } + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_BIOSTEST_HELP")); + return; + } + + uint8_t drive; + char fullname[DOS_PATHLENGTH]; + localDrive* ldp = nullptr; + if (!DOS_MakeName(temp_line.c_str(), fullname, &drive)) return; + + try { + /* try to read ROM file into buffer */ + ldp = dynamic_cast(Drives[drive]); + if (!ldp) return; + + FILE* tmpfile = ldp->GetSystemFilePtr(fullname, "rb"); + if (tmpfile == NULL) { + WriteOut(MSG_Get("PROGRAM_BIOSTEST_OPEN_ERROR")); + return; + } + fseek(tmpfile, 0L, SEEK_END); + if (ftell(tmpfile) > 64 * 1024) { + WriteOut(MSG_Get("PROGRAM_BIOSTEST_TOO_LARGE")); + fclose(tmpfile); + return; + } + fseek(tmpfile, 0L, SEEK_SET); + uint8_t buffer[64 * 1024]; + Bitu data_read = fread(buffer, 1, sizeof(buffer), tmpfile); + fclose(tmpfile); + + uint32_t rom_base = PhysMake(0xf000, 0); // override regular dosbox bios + /* write buffer into ROM */ + for (Bitu i = 0; i < data_read; i++) phys_writeb((PhysPt)(rom_base + i), buffer[i]); + + //Start executing this bios + memset(&cpu_regs, 0, sizeof(cpu_regs)); + memset(&Segs, 0, sizeof(Segs)); + + SegSet16(cs, 0xf000); + reg_eip = 0xfff0; + } + catch (...) { + return; + } + } +}; + +static void BIOSTEST_ProgramStart(Program** make) { + *make = new BIOSTEST; +} +# endif +#endif + +/* non-bootable MS-DOS floppy disk boot sector. + * will be modified as appropriate. */ +unsigned char this_is_not_a_bootable_partition[512] = { + 0xeb, 0x3c, 0x90, 0x6d, 0x6b, 0x64, 0x6f, 0x73, 0x66, 0x73, 0x00, 0x00, 0x02, 0x01, 0x01, 0x00, + 0x02, 0xe0, 0x00, 0x40, 0x0b, 0xf0, 0x09, 0x00, 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xce, 0xf2, 0x4e, 0xda, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x0e, 0x1f, + 0xbe, 0x5b, 0x7c, 0xac, 0x22, 0xc0, 0x74, 0x0b, 0x56, 0xb4, 0x0e, 0xbb, 0x07, 0x00, 0xcd, 0x10, + 0x5e, 0xeb, 0xf0, 0x32, 0xe4, 0xcd, 0x16, 0xcd, 0x19, 0xeb, 0xfe, 0x54, 0x68, 0x69, 0x73, 0x20, + 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x64, 0x69, 0x73, 0x6b, 0x2e, 0x20, 0x20, 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, + 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x61, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x66, 0x6c, 0x6f, 0x70, 0x70, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, + 0x72, 0x79, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x20, 0x2e, 0x2e, 0x2e, 0x20, 0x0d, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa +}; + +const uint8_t freedos_mbr[] = { + 0xFA,0xFC,0x31,0xC0,0x8E,0xD0,0x8E,0xD8,0xBD,0x00,0x7C,0x8D,0x66,0xE0,0xFB,0xB8, + 0xE0,0x1F,0x8E,0xC0,0x89,0xEE,0x89,0xEF,0xB9,0x00,0x01,0xF3,0xA5,0xEA,0x22,0x7C, // 10h + 0xE0,0x1F,0x8E,0xD8,0x8E,0xD0,0x31,0xC0,0x8E,0xC0,0x8D,0xBE,0xBE,0x01,0xF6,0x05, // 20h + 0x80,0x75,0x6D,0x83,0xC7,0x10,0x81,0xFF,0xFE,0x7D,0x72,0xF2,0xE8,0xC4,0x00,0x6E, + 0x6F,0x20,0x61,0x63,0x74,0x69,0x76,0x65,0x20,0x70,0x61,0x72,0x74,0x69,0x74,0x69, // 40h + 0x6F,0x6E,0x20,0x66,0x6F,0x75,0x6E,0x64,0x00,0xEB,0xFE,0xE8,0xA5,0x00,0x72,0x65, + 0x61,0x64,0x20,0x65,0x72,0x72,0x6F,0x72,0x20,0x77,0x68,0x69,0x6C,0x65,0x20,0x72, + 0x65,0x61,0x64,0x69,0x6E,0x67,0x20,0x64,0x72,0x69,0x76,0x65,0x00,0xEB,0xDA,0xE8, + 0x81,0x00,0x70,0x61,0x72,0x74,0x69,0x74,0x69,0x6F,0x6E,0x20,0x73,0x69,0x67,0x6E, // 80h + 0x61,0x74,0x75,0x72,0x65,0x20,0x21,0x3D,0x20,0x35,0x35,0x41,0x41,0x00,0xEB,0xB9, + 0xE8,0x10,0x00,0x72,0xB6,0x26,0x81,0x3E,0xFE,0x7D,0x55,0xAA,0x75,0xD1,0xEA,0x00, + 0x7C,0x00,0x00,0xBB,0xAA,0x55,0xB4,0x41,0xCD,0x13,0x72,0x32,0x81,0xFB,0x55,0xAA, + 0x75,0x2C,0xF6,0xC1,0x01,0x74,0x27,0xEB,0x10,0x10,0x00,0x04,0x00,0x00,0x7C,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8B,0x45,0x08,0xA3,0xD1,0x7C,0x8B, + 0x45,0x0A,0xA3,0xD3,0x7C,0xB8,0x00,0x42,0xBE,0xC9,0x7C,0xCD,0x13,0xC3,0xB8,0x04, + 0x02,0xBB,0x00,0x7C,0x8B,0x4D,0x02,0x8A,0x75,0x01,0xCD,0x13,0xC3,0x31,0xDB,0xB4, + 0x0E,0xCD,0x10,0x5E,0xAC,0x56,0x3C,0x00,0x75,0xF3,0xC3,0x00,0x00,0x00,0x00,0x00, //100h + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //110h + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //120h + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //140h + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //180h + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x73,0x65,0xE3,0x3F,0xBF,0x00,0x00, //1B0h + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xAA +}; +#ifdef WIN32 +#include +#endif + +static void lba2chs3(unsigned char *b3,uint32_t lba,const unsigned int gc,const unsigned int gh,const unsigned int gs) { + const unsigned int s = (unsigned int)(lba % (uint32_t)gs) + 1u; lba /= (uint32_t)gs; + const unsigned int h = (unsigned int)(lba % (uint32_t)gh); lba /= (uint32_t)gh; + const unsigned int c = (unsigned int) lba; + + (void)gc; + + b3[0] = h; + b3[1] = s | ((c >> 8u) << 6u); /* [7:6] cylinder bits 8-9 [5:0] sector */ + b3[2] = c; +} + +#if !defined(OSFREE) +class IMGMAKE : public Program { +public: +#ifdef WIN32 + bool OpenDisk(HANDLE* f, OVERLAPPED* o, uint8_t* name) const { + o->hEvent = INVALID_HANDLE_VALUE; + *f = CreateFile( (LPCSTR)name, GENERIC_READ | GENERIC_WRITE, + 0, // exclusive access + NULL, // default security attributes + OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, + NULL ); + + if (*f == INVALID_HANDLE_VALUE) return false; + + // init OVERLAPPED + o->Internal = 0; + o->InternalHigh = 0; + o->Offset = 0; + o->OffsetHigh = 0; + o->hEvent = CreateEvent( + NULL, // default security attributes + TRUE, // manual-reset event + FALSE, // not signaled + NULL // no name + ); + return true; + } + + void CloseDisk(HANDLE f, OVERLAPPED* o) const { + if(f != INVALID_HANDLE_VALUE) CloseHandle(f); + if(o->hEvent != INVALID_HANDLE_VALUE) CloseHandle(o->hEvent); + } + + bool StartReadDisk(HANDLE f, OVERLAPPED* o, uint8_t* buffer, Bitu offset, Bitu size) const { + o->Offset = (DWORD)offset; + if (!ReadFile(f, buffer, (DWORD)size, NULL, o) && + (GetLastError()==ERROR_IO_PENDING)) return true; + return false; + } + + // 0=still waiting, 1=catastrophic failure, 2=success, 3=sector not found, 4=crc error + Bitu CheckDiskReadComplete(HANDLE f, OVERLAPPED* o) const { + DWORD numret; + BOOL b = GetOverlappedResult( f, o, &numret,false); + if(b) return 2; + else { + int error = GetLastError(); + if(error==ERROR_IO_INCOMPLETE) return 0; + if(error==ERROR_FLOPPY_UNKNOWN_ERROR) return 5; + if(error==ERROR_CRC) return 4; + if(error==ERROR_SECTOR_NOT_FOUND) return 3; + return 1; + } + } + + Bitu ReadDisk(FILE* f, uint8_t driveletter, Bitu retries_max) { + unsigned char data[36*2*512]; + HANDLE hFloppy; + DWORD numret; + OVERLAPPED o; + DISK_GEOMETRY geom; + + uint8_t drivestring[] = "\\\\.\\x:"; drivestring[4]=driveletter; + if(!OpenDisk(&hFloppy, &o, drivestring)) return false; + + // get drive geom + DeviceIoControl( hFloppy, IOCTL_DISK_GET_DRIVE_GEOMETRY,NULL,0, + &geom,sizeof(DISK_GEOMETRY),&numret,NULL); + + switch(geom.MediaType) { + case F5_1Pt2_512: case F3_1Pt44_512: case F3_2Pt88_512: case F3_720_512: + case F5_360_512: case F5_320_512: case F5_180_512: case F5_160_512: + break; + default: + CloseDisk(hFloppy,&o); + return false; + } + Bitu total_sect_per_cyl = geom.SectorsPerTrack * geom.TracksPerCylinder; + Bitu cyln_size = 512 * total_sect_per_cyl; + + WriteOut(MSG_Get("PROGRAM_IMGMAKE_FLREAD"), + geom.Cylinders.LowPart,geom.TracksPerCylinder, + geom.SectorsPerTrack,(cyln_size*geom.Cylinders.LowPart)/1024); + WriteOut(MSG_Get("PROGRAM_IMGMAKE_FLREAD2"), "\xdb", "\xb1"); + + for(Bitu i = 0; i < geom.Cylinders.LowPart; i++) { + Bitu result; + // for each cylinder + WriteOut("%2u",i); + + if(!StartReadDisk(hFloppy, &o, &data[0], cyln_size*i, cyln_size)){ + CloseDisk(hFloppy,&o); + return false; + } + do { + result = CheckDiskReadComplete(hFloppy, &o); + CALLBACK_Idle(); + } + while (result==0); + + switch(result) { + case 1: + CloseDisk(hFloppy,&o); + return false; + case 2: // success + for(Bitu m=0; m < cyln_size/512; m++) WriteOut("\xdb"); + break; + case 3: + case 4: // data errors + case 5: + for(Bitu k=0; k < total_sect_per_cyl; k++) { + Bitu retries=retries_max; +restart_int: + StartReadDisk(hFloppy, &o, &data[512*k], cyln_size*i + 512*k, 512); + do { + result = CheckDiskReadComplete(hFloppy, &o); + CALLBACK_Idle(); + } + while (result==0); + + switch(result) { + case 1: // bad error + CloseDisk(hFloppy,&o); + return false; + case 2: // success + if(retries==retries_max) WriteOut("\xdb"); + else WriteOut("\b\b\b\xb1"); + break; + case 3: + case 4: // read errors + case 5: + if(retries!=retries_max) WriteOut("\b\b\b"); + retries--; + switch(result) { + case 3: WriteOut("x"); + case 4: WriteOut("!"); + case 5: WriteOut("?"); + } + WriteOut("%2d",retries); + + if(retries) goto restart_int; + const uint8_t badfood[]="IMGMAKE BAD FLOPPY SECTOR \xBA\xAD\xF0\x0D"; + for(uint8_t z = 0; z < 512/32; z++) + memcpy(&data[512*k+z*32],badfood,31); + WriteOut("\b\b"); + break; + } + } + break; + } + fwrite(data, 512, total_sect_per_cyl, f); + WriteOut("%2x%2x\n", data[0], data[1]); + } + // seek to 0 + StartReadDisk(hFloppy, &o, &data[0], 0, 512); + CloseDisk(hFloppy,&o); + return true; + } +#endif + + void Run(void) override { + std::string disktype; + std::string label; + std::string src; + std::string filename; + std::string dpath; + std::string tmp; + + int lbamode = -1; + uint32_t c, h, s; + uint64_t size = 0, sectors; + uint16_t alignment = 0; // if nonzero, try to align structures to this multiple of K (i.e. 4K sector alignment) + + if(control->SecureMode()) { + WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW")); + return; + } + if(cmd->FindExist("-?")) { + printHelp(); + return; + } + if (cmd->FindExist("/examples")||cmd->FindExist("-examples")) { + resetcolor = true; + WriteOut(MSG_Get("PROGRAM_IMGMAKE_EXAMPLE")); + return; + } + +/* + this stuff is too frustrating + + // when only a filename is passed try to create the file on the current DOS path + // if directory+filename are passed first see if directory is a host path, if not + // maybe it is a DOSBox path. + + // split filename and path + std::string path = ""; + Bitu spos = temp_line.rfind('\\'); + if(spos==std::string::npos) { + temp_line.rfind('/'); + } + + if(spos==std::string::npos) { + // no path separator + filename=temp_line; + } else { + path=temp_line.substr(0,spos); + filename=temp_line.substr(spos+1,std::string::npos); + } + if(filename=="") + + char tbuffer[DOS_PATHLENGTH]= { 0 }; + if(path=="") { + if(!DOS_GetCurrentDir(DOS_GetDefaultDrive()+1,tbuffer)){ + printHelp(); + return; + } + dpath=(std::string)tbuffer; + } + WriteOut("path %s, filename %s, dpath %s", + path.c_str(),filename.c_str(),dpath.c_str()); + return; +*/ + + bool ForceOverwrite = false; + if (cmd->FindExist("-force",true)) + ForceOverwrite = true; +#ifdef WIN32 + // read from real floppy? + if(cmd->FindString("-source",src,true)) { + int retries = 10; + cmd->FindInt("-retries",retries,true); + if((retries < 1)||(retries > 99)) { + printHelp(); + return; + } + if((src.length()!=1) || !isalpha(src.c_str()[0])) { + // only one letter allowed + printHelp(); + return; + } + + /* temp_line is the given filename */ + if (!(cmd->FindCommand(1, temp_line))) + temp_line = "IMGMAKE.IMG"; + + bool setdir=false; + char dirCur[512] = ".", dirNew[512] = "."; + // if (!dos_kernel_disabled&&getcwd(dirCur, 512)!=NULL&&(!strncmp(Drives[DOS_GetDefaultDrive()]->GetInfo(),"local ",6)||!strncmp(Drives[DOS_GetDefaultDrive()]->GetInfo(),"CDRom ",6))) { + // Overlay_Drive *ddp = dynamic_cast(Drives[DOS_GetDefaultDrive()]); + // strcpy(dirNew, ddp!=NULL?ddp->getOverlaydir():Drives[DOS_GetDefaultDrive()]->GetBaseDir()); + // strcat(dirNew, Drives[DOS_GetDefaultDrive()]->curdir); + // if (chdir(dirNew)==0) setdir=true; + // } - bool ForceOverwrite = false; - if (cmd->FindExist("-force",true)) - ForceOverwrite = true; - #ifdef WIN32 - // read from real floppy? - if(cmd->FindString("-source",src,true)) { - int retries = 10; - cmd->FindInt("-retries",retries,true); - if((retries < 1)||(retries > 99)) { - printHelp(); - return; - } - if((src.length()!=1) || !isalpha(src.c_str()[0])) { - // only one letter allowed - printHelp(); - return; - } - - /* temp_line is the given filename */ - if (!(cmd->FindCommand(1, temp_line))) - temp_line = "IMGMAKE.IMG"; - - bool setdir=false; - char dirCur[512] = ".", dirNew[512] = "."; - // if (!dos_kernel_disabled&&getcwd(dirCur, 512)!=NULL&&(!strncmp(Drives[DOS_GetDefaultDrive()]->GetInfo(),"local ",6)||!strncmp(Drives[DOS_GetDefaultDrive()]->GetInfo(),"CDRom ",6))) { - // Overlay_Drive *ddp = dynamic_cast(Drives[DOS_GetDefaultDrive()]); - // strcpy(dirNew, ddp!=NULL?ddp->getOverlaydir():Drives[DOS_GetDefaultDrive()]->GetBaseDir()); - // strcat(dirNew, Drives[DOS_GetDefaultDrive()]->curdir); - // if (chdir(dirNew)==0) setdir=true; - // } - - FILE* f = fopen(temp_line.c_str(),"r"); - if (f){ - fclose(f); - if (!ForceOverwrite) { - WriteOut(MSG_Get("PROGRAM_IMGMAKE_FILE_EXISTS"),temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - } - f = fopen(temp_line.c_str(),"wb+"); - if (!f) { - WriteOut(MSG_Get("PROGRAM_IMGMAKE_CANNOT_WRITE"),temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - if (setdir) chdir(dirCur); - // maybe delete f if it failed? - if(!ReadDisk(f, src.c_str()[0],retries)) - WriteOut(MSG_Get("PROGRAM_IMGMAKE_CANT_READ_FLOPPY")); - fclose(f); - if (setdir) runRescan("-Q"); - return; - } - #endif - // disk type - if (!(cmd->FindString("-t",disktype,true))) { - printHelp(); - return; - } - std::transform(disktype.begin(), disktype.end(), disktype.begin(), ::tolower); - - // filesystem label - cmd->FindString("-label",label,true); - - // alignment - if (cmd->FindString("-align",tmp,true)) { - const char *s = tmp.c_str(); - alignment = (uint32_t)strtoul(s,(char**)(&s),0); - /* if 'K' follows, convert K to sectors */ - if (*s == 'K' || *s == 'k') alignment *= (uint32_t)2u; - - if (alignment == (uint32_t)0 || alignment > (uint32_t)2048/*1MB*/) { - WriteOut("Invalid alignment"); - return; - } - } - - uint8_t mediadesc = 0xF8; // media descriptor byte; also used to differ fd and hd - uint16_t root_ent = 512; // FAT root directory entries: 512 is for harddisks - uint16_t disksize = 0; // disk size of floppy images - uint32_t sect_per_fat = 0; // allowable range: FAT12 1-12, FAT16 16-256, FAT32 512-2,097,152 sectors - uint16_t sectors_per_cluster = 0; // max limit: 128 - bool is_fd = false; - if(disktype=="fd_160") { - c = 40; h = 1; s = 8; mediadesc = 0xFE; root_ent = 64; sect_per_fat = 1; sectors_per_cluster = 1; - disksize = 160; is_fd = true; - } else if(disktype=="fd_180") { - c = 40; h = 1; s = 9; mediadesc = 0xFC; root_ent = 64; sect_per_fat = 2; sectors_per_cluster = 1; - disksize = 180; is_fd = true; - } else if(disktype=="fd_200") { - c = 40; h = 1; s = 10; mediadesc = 0xFC; root_ent = 64; sect_per_fat = 2; sectors_per_cluster = 2;// root_ent? - disksize = 200; is_fd = true; - } else if(disktype=="fd_320") { - c = 40; h = 2; s = 8; mediadesc = 0xFF; root_ent = 112; sect_per_fat = 1; sectors_per_cluster = 2; - disksize = 320; is_fd = true; - } else if(disktype=="fd_360") { - c = 40; h = 2; s = 9; mediadesc = 0xFD; root_ent = 112; sect_per_fat = 2; sectors_per_cluster = 2; - disksize = 360; is_fd = true; - } else if(disktype=="fd_400") { - c = 40; h = 2; s = 10; mediadesc = 0xFD; root_ent = 112; sect_per_fat = 2; sectors_per_cluster = 2; - disksize = 400; is_fd = true; - } else if(disktype=="fd_720") { - c = 80; h = 2; s = 9; mediadesc = 0xF9; root_ent = 112; sect_per_fat = 3; sectors_per_cluster = 2; - disksize = 720; is_fd = true; - } else if(disktype=="fd_1200") { - c = 80; h = 2; s = 15; mediadesc = 0xF9; root_ent = 224; sect_per_fat = 7; sectors_per_cluster = 1; - disksize = 1200; is_fd = true; - } else if(disktype=="fd_1440"||disktype=="fd"||disktype=="floppy") { - c = 80; h = 2; s = 18; mediadesc = 0xF0; root_ent = 224; sect_per_fat = 9; sectors_per_cluster = 1; - disksize = 1440; is_fd = true; - } else if(disktype=="fd_2880") { - c = 80; h = 2; s = 36; mediadesc = 0xF0; root_ent = 240; sect_per_fat = 9; sectors_per_cluster = 2; - disksize = 2880; is_fd = true; - } else if(disktype=="hd_250") { - c = 489; h = 16; s = 63; - } else if(disktype=="hd_520") { - c = 1023; h = 16; s = 63; - } else if(disktype=="hd_1gig") { - c = 1023; h = 32; s = 63; - } else if(disktype=="hd_2gig") { - c = 1023; h = 64; s = 63; - } else if(disktype=="hd_4gig") { // fseek only supports 2gb - c = 1023; h = 130; s = 63; - } else if(disktype=="hd_8gig") { // fseek only supports 2gb - c = 1023; h = 255; s = 63; - } else if(disktype=="hd_st251") { // old 40mb drive - c = 820; h = 6; s = 17; - } else if(disktype=="hd_st225") { // even older 20mb drive - c = 615; h = 4; s = 17; - } else if(disktype=="hd" || disktype=="vhd") { - // get size from parameter - std::string isize; - if (!(cmd->FindString("-size",isize,true))) { - // maybe -chs? - if (!(cmd->FindString("-chs",isize,true))){ - // user forgot -size and -chs - printHelp(); - return; - } - else { - // got chs data: -chs 1023,16,63 - if(sscanf(isize.c_str(),"%u,%u,%u",&c,&h,&s) != 3) { - WriteOut(MSG_Get("PROGRAM_IMGMAKE_BADSIZE")); - return; - } - // sanity-check chs values - if((h>255)||(c>1023)||(s>63)) { - printHelp(); - return; - } - size = (uint64_t)c * (uint64_t)h * (uint64_t)s * 512ULL; - if((size < 3*1024*1024ull) || (size > 0x1FFFFFFFFull)/*8GB*/) { - // user picked geometry resulting in wrong size - WriteOut(MSG_Get("PROGRAM_IMGMAKE_BADSIZE")); - return; - } - } - } else { - // got -size - std::istringstream stream(isize); - stream >> size; - size *= 1024*1024LL; // size in megabytes - // low limit: 3 megs, high limit: 2 terabytes - // Int13 limit would be 8 gigs - if((size < 3*1024*1024ull) || (size > 0x1FFFFFFFFFFull)/*2TB*/) { - // wrong size - WriteOut(MSG_Get("PROGRAM_IMGMAKE_BADSIZE")); - return; - } - if(disktype == "vhd" && size > 2040*1024*1024*1024ull) {/*2040GB*/ - // wrong size - WriteOut(MSG_Get("PROGRAM_IMGMAKE_BADSIZE")); - return; - } - sectors = size / 512; - - if (alignment != 0u) { - sectors += (uint64_t)(alignment - 1u); - sectors -= sectors % (uint64_t)alignment; - } - - // Now that we finally have the proper size, figure out good CHS values - if (size > 0xFFFFFFFFull/*4GB*/) { - /* beyond that point it's easier to just map like LBA and be done with it */ - h=255; - s=63; - c=sectors/(h*s); - } - else { - h=2; - while(h*1023*63 < sectors) h <<= 1; - if(h>255) h=255; - s=8; - while(h*s*1023 < sectors) s *= 2; - if(s>63) s=63; - c=sectors/(h*s); - if(c>1023) c=1023; - } - } - } else { - // user passed a wrong -t argument - printHelp(); - return; - } - - std::string t2 = ""; - if(cmd->FindExist("-bat",true)) { - t2 = "-bat"; - } - - size = (uint64_t)c * (uint64_t)h * (uint64_t)s * 512ULL; - int64_t bootsect_pos = 0; // offset of the boot sector in clusters - if(cmd->FindExist("-nofs",true)) { - bootsect_pos = -1; - } - - if (cmd->FindExist("-chs",true)) - lbamode = 0; - else if (cmd->FindExist("-lba",true)) - lbamode = 1; - else - lbamode = size > (2048ULL << 20ULL); /* automatically choose LBA for 2GB or larger images */ - - /* beyond this point clamp c */ - if (c > 1023) c = 1023; - - /* temp_line is the given filename */ - if (!(cmd->FindCommand(1, temp_line))) - temp_line = "IMGMAKE.IMG"; - + + FILE* f = fopen(temp_line.c_str(),"r"); + if (f){ + fclose(f); + if (!ForceOverwrite) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_FILE_EXISTS"),temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + } + f = fopen(temp_line.c_str(),"wb+"); + if (!f) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_CANNOT_WRITE"),temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + if (setdir) chdir(dirCur); + // maybe delete f if it failed? + if(!ReadDisk(f, src.c_str()[0],retries)) + WriteOut(MSG_Get("PROGRAM_IMGMAKE_CANT_READ_FLOPPY")); + fclose(f); + if (setdir) runRescan("-Q"); + return; + } +#endif + // disk type + if (!(cmd->FindString("-t",disktype,true))) { + printHelp(); + return; + } + std::transform(disktype.begin(), disktype.end(), disktype.begin(), ::tolower); + + // filesystem label + cmd->FindString("-label",label,true); + + // alignment + if (cmd->FindString("-align",tmp,true)) { + const char *s = tmp.c_str(); + alignment = (uint32_t)strtoul(s,(char**)(&s),0); + /* if 'K' follows, convert K to sectors */ + if (*s == 'K' || *s == 'k') alignment *= (uint32_t)2u; + + if (alignment == (uint32_t)0 || alignment > (uint32_t)2048/*1MB*/) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_ALIGNMENT")); + return; + } + } + + uint8_t mediadesc = 0xF8; // media descriptor byte; also used to differ fd and hd + uint16_t root_ent = 512; // FAT root directory entries: 512 is for harddisks + uint16_t disksize = 0; // disk size of floppy images + uint32_t sect_per_fat = 0; // allowable range: FAT12 1-12, FAT16 16-256, FAT32 512-2,097,152 sectors + uint16_t sectors_per_cluster = 0; // max limit: 128 + bool is_fd = false; + if(disktype=="fd_160") { + c = 40; h = 1; s = 8; mediadesc = 0xFE; root_ent = 64; sect_per_fat = 1; sectors_per_cluster = 1; + disksize = 160; is_fd = true; + } else if(disktype=="fd_180") { + c = 40; h = 1; s = 9; mediadesc = 0xFC; root_ent = 64; sect_per_fat = 2; sectors_per_cluster = 1; + disksize = 180; is_fd = true; + } else if(disktype=="fd_200") { + c = 40; h = 1; s = 10; mediadesc = 0xFC; root_ent = 64; sect_per_fat = 2; sectors_per_cluster = 2;// root_ent? + disksize = 200; is_fd = true; + } else if(disktype=="fd_320") { + c = 40; h = 2; s = 8; mediadesc = 0xFF; root_ent = 112; sect_per_fat = 1; sectors_per_cluster = 2; + disksize = 320; is_fd = true; + } else if(disktype=="fd_360") { + c = 40; h = 2; s = 9; mediadesc = 0xFD; root_ent = 112; sect_per_fat = 2; sectors_per_cluster = 2; + disksize = 360; is_fd = true; + } else if(disktype=="fd_400") { + c = 40; h = 2; s = 10; mediadesc = 0xFD; root_ent = 112; sect_per_fat = 2; sectors_per_cluster = 2; + disksize = 400; is_fd = true; + } else if(disktype=="fd_720") { + c = 80; h = 2; s = 9; mediadesc = 0xF9; root_ent = 112; sect_per_fat = 3; sectors_per_cluster = 2; + disksize = 720; is_fd = true; + } else if(disktype=="fd_1200") { + c = 80; h = 2; s = 15; mediadesc = 0xF9; root_ent = 224; sect_per_fat = 7; sectors_per_cluster = 1; + disksize = 1200; is_fd = true; + } else if(disktype=="fd_1440"||disktype=="fd"||disktype=="floppy") { + c = 80; h = 2; s = 18; mediadesc = 0xF0; root_ent = 224; sect_per_fat = 9; sectors_per_cluster = 1; + disksize = 1440; is_fd = true; + } else if(disktype=="fd_2880") { + c = 80; h = 2; s = 36; mediadesc = 0xF0; root_ent = 240; sect_per_fat = 9; sectors_per_cluster = 2; + disksize = 2880; is_fd = true; + } else if(disktype=="hd_250") { + c = 489; h = 16; s = 63; + } else if(disktype=="hd_520") { + c = 1023; h = 16; s = 63; + } else if(disktype=="hd_1gig") { + c = 1023; h = 32; s = 63; + } else if(disktype=="hd_2gig") { + c = 1023; h = 64; s = 63; + } else if(disktype=="hd_4gig") { // fseek only supports 2gb + c = 1023; h = 130; s = 63; + } else if(disktype=="hd_8gig") { // fseek only supports 2gb + c = 1023; h = 255; s = 63; + } else if(disktype=="hd_st251") { // old 40mb drive + c = 820; h = 6; s = 17; + } else if(disktype=="hd_st225") { // even older 20mb drive + c = 615; h = 4; s = 17; + } else if(disktype=="hd" || disktype=="vhd") { + // get size from parameter + std::string isize; + if (!(cmd->FindString("-size",isize,true))) { + // maybe -chs? + if (!(cmd->FindString("-chs",isize,true))){ + // user forgot -size and -chs + printHelp(); + return; + } + else { + // got chs data: -chs 1023,16,63 + if(sscanf(isize.c_str(),"%u,%u,%u",&c,&h,&s) != 3) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_BADSIZE")); + return; + } + // sanity-check chs values + if((h>255)||(c>1023)||(s>63)) { + printHelp(); + return; + } + size = (uint64_t)c * (uint64_t)h * (uint64_t)s * 512ULL; + if((size < 3*1024*1024ull) || (size > 0x1FFFFFFFFull)/*8GB*/) { + // user picked geometry resulting in wrong size + WriteOut(MSG_Get("PROGRAM_IMGMAKE_BADSIZE")); + return; + } + } + } else { + // got -size + std::istringstream stream(isize); + stream >> size; + size *= 1024*1024LL; // size in megabytes + // low limit: 3 megs, high limit: 2 terabytes + // Int13 limit would be 8 gigs + if((size < 3*1024*1024ull) || (size > 0x1FFFFFFFFFFull)/*2TB*/) { + // wrong size + WriteOut(MSG_Get("PROGRAM_IMGMAKE_BADSIZE")); + return; + } + if(disktype == "vhd" && size > 2040*1024*1024*1024ull) {/*2040GB*/ + // wrong size + WriteOut(MSG_Get("PROGRAM_IMGMAKE_BADSIZE")); + return; + } + sectors = size / 512; + + if (alignment != 0u) { + sectors += (uint64_t)(alignment - 1u); + sectors -= sectors % (uint64_t)alignment; + } + + // Now that we finally have the proper size, figure out good CHS values + if (size > 0xFFFFFFFFull/*4GB*/) { + /* beyond that point it's easier to just map like LBA and be done with it */ + h=255; + s=63; + c=sectors/(h*s); + } + else { + h=2; + while(h*1023*63 < sectors) h <<= 1; + if(h>255) h=255; + s=8; + while(h*s*1023 < sectors) s *= 2; + if(s>63) s=63; + c=sectors/(h*s); + if(c>1023) c=1023; + } + } + } else { + // user passed a wrong -t argument + printHelp(); + return; + } + + std::string t2 = ""; + if(cmd->FindExist("-bat",true)) { + t2 = "-bat"; + } + + size = (uint64_t)c * (uint64_t)h * (uint64_t)s * 512ULL; + int64_t bootsect_pos = 0; // offset of the boot sector in clusters + if(cmd->FindExist("-nofs",true)) { + bootsect_pos = -1; + } + + if (cmd->FindExist("-chs",true)) + lbamode = 0; + else if (cmd->FindExist("-lba",true)) + lbamode = 1; + else + lbamode = size > (2048ULL << 20ULL); /* automatically choose LBA for 2GB or larger images */ + + /* beyond this point clamp c */ + if (c > 1023) c = 1023; + + /* temp_line is the given filename */ + if (!(cmd->FindCommand(1, temp_line))) + temp_line = "IMGMAKE.IMG"; + bool setdir=false; char dirCur[512] = ".", dirNew[512] = "."; // if (!dos_kernel_disabled&&getcwd(dirCur, 512)!=NULL&&!strncmp(Drives[DOS_GetDefaultDrive()]->GetInfo(),"local directory", 15)) { @@ -3849,2831 +4051,2875 @@ // strcat(dirNew, Drives[DOS_GetDefaultDrive()]->curdir); // if (chdir(dirNew)==0) setdir=true; // } - - #if !defined(WIN32) && !defined(OS2) - if (setdir&&temp_line[0]!='/'&&!(temp_line[0]=='~'&&temp_line[1]=='/')) - std::replace(temp_line.begin(), temp_line.end(), '\\', '/'); - pref_struct_stat test; - std::string homedir(temp_line); - Cross::ResolveHomedir(homedir); - std::string homepath=homedir; - if (!pref_stat(dirname((char *)homepath.c_str()), &test) && test.st_mode & S_IFDIR) - temp_line = homedir; - #endif - FILE* f; - imageDiskVHD* vhd; - f = fopen(temp_line.c_str(), "r"); - if(f) { - fclose(f); - if(!ForceOverwrite) { - if(!dos_kernel_disabled) WriteOut(MSG_Get("PROGRAM_IMGMAKE_FILE_EXISTS"), temp_line.c_str()); - if(setdir) chdir(dirCur); - return; - } - } - char extension[6] = {}; // care extensions longer than 3 letters such as '.vhdd' - if(temp_line.find_last_of('.') != std::string::npos) { - for(unsigned int i = 0; i < sizeof(extension) - 1; i++) { - if(temp_line.find_last_of('.') + i > temp_line.length() - 1) break; - extension[i] = temp_line[temp_line.find_last_of('.') + i]; - } - extension[sizeof(extension) - 1] = '\0'; // Terminate string just in case - } - if (!dos_kernel_disabled) WriteOut(MSG_Get("PROGRAM_IMGMAKE_PRINT_CHS"),temp_line.c_str(),c,h,s); - LOG_MSG(MSG_Get("PROGRAM_IMGMAKE_PRINT_CHS"),temp_line.c_str(),c,h,s); - - // do it again for fixed chs values - sectors = size / 512; - - // create the image file - if(disktype == "vhd") { - uint32_t ret = imageDiskVHD::CreateDynamic(temp_line.c_str(), size); - switch(ret) { - case imageDiskVHD::ERROR_OPENING: - WriteOut(MSG_Get("PROGRAM_VHDMAKE_ERROPEN"), temp_line.c_str()); - return; - case imageDiskVHD::ERROR_WRITING: - WriteOut(MSG_Get("PROGRAM_VHDMAKE_WRITERR"), temp_line.c_str()); - return; - } - if(imageDiskVHD::Open(temp_line.c_str(), false, (imageDisk**)&vhd) != imageDiskVHD::OPEN_SUCCESS) { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_ERROPEN"), temp_line.c_str()); - return; - } - } - else { - f = fopen64(temp_line.c_str(), "wb+"); - if(!f) { - if(!dos_kernel_disabled) WriteOut(MSG_Get("PROGRAM_IMGMAKE_CANNOT_WRITE"), temp_line.c_str()); - if(setdir) chdir(dirCur); - return; - } - - #if (defined (_MSC_VER) && (_MSC_VER >= 1400)) || defined(__MINGW32__) - if(fseeko64(f, (__int64)(size - 1ull), SEEK_SET)) { - #else - if(fseeko64(f, static_cast(size - 1ull), SEEK_SET)) { - #endif - if(!dos_kernel_disabled) WriteOut(MSG_Get("PROGRAM_IMGMAKE_NOT_ENOUGH_SPACE"), size); - fclose(f); - unlink(temp_line.c_str()); - if(setdir) chdir(dirCur); - return; - } - uint8_t bufferbyte = 0; - if(fwrite(&bufferbyte, 1, 1, f) != 1) { - if(!dos_kernel_disabled) WriteOut(MSG_Get("PROGRAM_IMGMAKE_NOT_ENOUGH_SPACE"), size); - fclose(f); - unlink(temp_line.c_str()); - if(setdir) chdir(dirCur); - return; - } - } - // Format the image if not unrequested (and image size<2GB) - if(bootsect_pos > -1) { - uint32_t reserved_sectors = 1; /* 1 for the boot sector + BPB. FAT32 will require more */ - uint64_t vol_sectors = 0; - uint8_t fat_copies = 2; /* number of copies of the FAT */ - uint32_t partsector = 0; - uint32_t fatlimitmin; - uint32_t fatlimit; - int8_t FAT = -1; - bool spc_changed = false; - bool rootent_changed = false; - - /* Partition sector override */ - if (cmd->FindString("-partofs",tmp,true)) { - partsector = atoi(tmp.c_str()); - if (partsector == 0) { - WriteOut("Invalid -partofs\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - } - - /* FAT filesystem, user choice */ - if (cmd->FindString("-fat",tmp,true)) { - FAT = atoi(tmp.c_str()); - if (!(FAT == 12 || FAT == 16 || FAT == 32)) { - WriteOut("Invalid -fat option. Must be 12, 16, or 32\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - } - - /* FAT copies, user choice */ - if (cmd->FindString("-fatcopies",tmp,true)) { - fat_copies = atoi(tmp.c_str()); - if (fat_copies < 1u || fat_copies > 4u) { - WriteOut("Invalid -fatcopies option\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - } - - /* Sectors per cluster, user choice */ - if (cmd->FindString("-spc",tmp,true)) { - sectors_per_cluster = atoi(tmp.c_str()); - if (sectors_per_cluster < 1u || sectors_per_cluster > 128u) { - WriteOut("Invalid -spc option, out of range\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - if ((sectors_per_cluster & (sectors_per_cluster - 1u)) != 0u) { - WriteOut("Invalid -spc option, must be a power of 2\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - spc_changed = true; - } - - /* Root directory count, user choice. - * Does not apply to FAT32, which makes the root directory an allocation chain like any other directory/file. */ - if (cmd->FindString("-rootdir",tmp,true)) { - root_ent = atoi(tmp.c_str()); - if (root_ent < 1u || root_ent > 4096u) { - WriteOut("Invalid -rootdir option\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - rootent_changed = true; - } - - /* decide partition placement */ - if (mediadesc == 0xF8) { - if (partsector > (uint32_t)0) - bootsect_pos = (int64_t)partsector; - else - bootsect_pos = (int64_t)s; - } - else { - bootsect_pos = 0; - } - - if (alignment != 0u) { - bootsect_pos += alignment - 1u; - bootsect_pos -= bootsect_pos % (int64_t)alignment; - } - - if (sectors <= (uint64_t)bootsect_pos) { - WriteOut("Invalid bootsector position\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - vol_sectors = sectors - (uint64_t)bootsect_pos; - - if (alignment != 0u) { - if ((vol_sectors % alignment) != 0u) { - WriteOut("Sanity check failed: Volume size not aligned\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - } - - /* auto-decide FAT system */ - if (is_fd) FAT = 12; - else if (FAT < 0) { - bool dosver_fat32 = (dos.version.major >= 8) || (dos.version.major == 7 && dos.version.minor >= 10); - - if (vol_sectors >= 2*1024*1024*1024ull/512ull && !dosver_fat32) /* 2GB or larger */ - FAT = 32; - else if (vol_sectors >= 512*1024*1024ull/512ull && dosver_fat32) /* 512MB or larger */ - FAT = 32; - else if (vol_sectors >= 12*1024*1024ull/512ull) /* 12MB or larger */ - FAT = 16; - else - FAT = 12; - } - - /* highest cluster number + 1 */ - switch (FAT) { - case 32: - fatlimit = 0x0FFFFFF6u; - fatlimitmin = 0xFFF6u; - break; - case 16: - fatlimit = 0xFFF6u; - fatlimitmin = 0xFF6u; - break; - case 12: - fatlimit = 0xFF6u; - fatlimitmin = 0u; - break; - default: - abort(); - } - - /* FAT32 increases reserved area to at least 7. Microsoft likes to use 32 */ - if (FAT >= 32) - reserved_sectors = 32; - - if (alignment != 0u) { - reserved_sectors += alignment - 1u; - reserved_sectors -= reserved_sectors % alignment; - } - - uint8_t sbuf[512]; - if(mediadesc == 0xF8) { - // is a harddisk: write MBR - memcpy(sbuf,freedos_mbr,512); - // active partition - sbuf[0x1be]=0x80; - // start head - head 0 has the partition table, head 1 first partition - // start sector with bits 8-9 of start cylinder in bits 6-7 - // start cylinder bits 0-7 - lba2chs3(sbuf+0x1bf,bootsect_pos,c,h,s); - // OS indicator - if (FAT < 32 && (bootsect_pos+vol_sectors) < 65536) { /* 32MB or smaller */ - if (FAT >= 16) - sbuf[0x1c2]=0x04; /* FAT16 within the first 32MB */ - else - sbuf[0x1c2]=0x01; /* FAT12 within the first 32MB */ - } - else if (!lbamode) { /* 4GB or smaller */ - if (FAT >= 32) - sbuf[0x1c2]=0x0B; /* FAT32 C/H/S */ - else - sbuf[0x1c2]=0x06; /* FAT12/FAT16 C/H/S */ - } - else { - if (FAT >= 32) - sbuf[0x1c2]=0x0C; /* FAT32 LBA */ - else - sbuf[0x1c2]=0x0E; /* FAT12/FAT16 LBA */ - } - // end head (0-based) - // end sector with bits 8-9 of end cylinder (0-based) in bits 6-7 - // end cylinder (0-based) bits 0-7 - lba2chs3(sbuf+0x1c3,bootsect_pos+vol_sectors-1ul,c,h,s); - // sectors preceding partition1 (one head) - host_writed(&sbuf[0x1c6],(uint32_t)bootsect_pos); - // length of partition1, align to chs value - host_writed(&sbuf[0x1ca],vol_sectors); - - // write partition table - if(disktype != "vhd") { - fseeko64(f, 0, SEEK_SET); - fwrite(&sbuf, 512, 1, f); - } - else { - vhd->Write_AbsoluteSector(0, sbuf); - } - } - - // set boot sector values - memset(sbuf,0,512); - // TODO boot code jump - if (FAT >= 32) { - sbuf[0]=0xEB; sbuf[1]=0x58; sbuf[2]=0x90; // Windows 98 values - } - else { - sbuf[0]=0xEB; sbuf[1]=0x3c; sbuf[2]=0x90; - } - // OEM - if (FAT >= 32) { - sprintf((char*)&sbuf[0x03],"MSWIN4.1"); - } else { - sprintf((char*)&sbuf[0x03],"MSDOS5.0"); - } - // bytes per sector: always 512 - host_writew(&sbuf[BytsPerSec],512); - // sectors per cluster: 1,2,4,8,16,... - // NOTES: SCANDISK.EXE will hang if you ask it to check a FAT12 filesystem with 128 sectors/cluster. - if (sectors_per_cluster == 0) { - sectors_per_cluster = 1; - /* one sector per cluster on anything larger than 200KB is a bit wasteful (large FAT tables). - * Improve capacity by starting from a larger value.*/ - if (vol_sectors >= 400) { - unsigned int tmp_fatlimit; - - /* Windows 98 likes multiples of 4KB, which is actually reasonable considering - * that it keeps FAT32 efficient. Also, Windows 98 SETUP will crash if sectors/cluster - * is too small. Ref: [https://github.com/joncampbell123/dosbox-x/issues/1553#issuecomment-651880604] - * and [http://www.helpwithwindows.com/windows98/fat32.html] */ - if (FAT >= 32) { - if (vol_sectors >= 67108864/*32GB*/) - sectors_per_cluster = 64; /* 32KB (64*512) */ - else if (vol_sectors >= 33554432/*16GB*/) - sectors_per_cluster = 32; /* 16KB (32*512) */ - else if (vol_sectors >= 16777216/*8GB*/) - sectors_per_cluster = 16; /* 8KB (16*512) */ - else - sectors_per_cluster = 8; /* 4KB (8*512) */ - } - else { - /* 1 sector per cluster is very inefficient */ - if (vol_sectors >= 6144000/*3000MB*/) - sectors_per_cluster = 8; - else if (vol_sectors >= 1048576/*512MB*/) - sectors_per_cluster = 4; - else if (vol_sectors >= 131072/*64MB*/) - sectors_per_cluster = 2; - } - - /* no more than 5% of the disk */ - switch (FAT) { - case 12: tmp_fatlimit = ((((vol_sectors / 20u) * (512u / fat_copies)) / 3u) * 2u) + 2u; break; - case 16: tmp_fatlimit = (((vol_sectors / 20u) * (512u / fat_copies)) / 2u) + 2u; break; - case 32: tmp_fatlimit = (((vol_sectors / 20u) * (512u / fat_copies)) / 4u) + 2u; break; - default: abort(); - } - - while ((vol_sectors/sectors_per_cluster) >= (tmp_fatlimit - 2u) && sectors_per_cluster < 0x80u) sectors_per_cluster <<= 1; - } - } - - /* if alignment is a power of 2, align sectors per cluster to it */ - if (bitop::ispowerof2(alignment)) { - while (sectors_per_cluster < 0x80u && sectors_per_cluster < alignment) sectors_per_cluster <<= 1; - } - - /* FAT12/FAT16 size the root directory so that it is aligned, which then aligns the data area following it */ - if (alignment != 0u && FAT < 32) { - const uint32_t t_alignment = alignment * (512u / 32u); /* 512 bytes/sector, 32 bytes per dirent = number of root dirents per sector */ - root_ent += t_alignment - 1; - root_ent -= root_ent % t_alignment; - } - - while (!is_fd && (vol_sectors/sectors_per_cluster) >= (fatlimit - 2u) && sectors_per_cluster < 0x80u) sectors_per_cluster <<= 1; - sbuf[SecPerClus]=(uint8_t)sectors_per_cluster; - // reserved sectors - host_writew(&sbuf[RsvdSecCnt],reserved_sectors); - // Number of FATs - sbuf[NumFATs] = fat_copies; - // Root entries if not FAT32 - if (FAT < 32) host_writew(&sbuf[RootEntCnt],root_ent); - // sectors (under 32MB) if not FAT32 and less than 65536 - if (FAT < 32 && vol_sectors < 65536ul) host_writew(&sbuf[TotSec16],vol_sectors); - // sectors (32MB or larger or FAT32) - if (FAT >= 32 || vol_sectors >= 65536ul) host_writed(&sbuf[TotSec32],vol_sectors); - else host_writed(&sbuf[TotSec32],0); - // media descriptor - sbuf[Media]=mediadesc; - // needed entries: (sectors per cluster) - uint64_t clusters = vol_sectors / sectors_per_cluster; // initial estimate - - // sectors per FAT - if (FAT >= 32) sect_per_fat = ((clusters*4u)+511u)/512u; - else if (FAT >= 16) sect_per_fat = ((clusters*2u)+511u)/512u; - // Use standard sect_per_fat values for standard floppy images, otherwise it may required to be adjusted - else if (!is_fd || sect_per_fat == 0 || (is_fd && (rootent_changed || (fat_copies != 2)))) sect_per_fat = ((((clusters+1u)/2u)*3u)+511u)/512u; - - if (alignment != 0u) { - if (alignment % fat_copies) { - sect_per_fat += alignment - 1u; - sect_per_fat -= sect_per_fat % alignment; - } - else { - const uint32_t t_alignment = alignment / fat_copies; /* we could align sect_per_fat based on ALL copies of the FAT table */ - sect_per_fat += t_alignment - 1u; - sect_per_fat -= sect_per_fat % t_alignment; - } - } - - if (alignment != 0u) { - if ((((uint64_t)sect_per_fat * (uint64_t)fat_copies) % (uint64_t)alignment) != 0u) { - WriteOut("Sanity check failed: FAT tables not aligned\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - } - - if (FAT < 32 && sect_per_fat > 256u) { - WriteOut("Error: Generated filesystem has more than 256 sectors per FAT and is not FAT32\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - - uint32_t root_ent_sec = 0; - uint64_t data_area = vol_sectors - reserved_sectors - (sect_per_fat * fat_copies); - if (FAT < 32) { - root_ent_sec = ((root_ent * 32u) + 511u) / 512u; - data_area -= root_ent_sec; - } - clusters = data_area / sectors_per_cluster; - if (FAT < 32) host_writew(&sbuf[FATSz16],(uint16_t)sect_per_fat); - - if (alignment != 0u) { - if ((root_ent_sec % alignment) != 0u) { - WriteOut("Sanity check failed: Volume size not aligned\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - } - - /* Too many or to few clusters can foul up FAT12/FAT16/FAT32 detection and cause corruption! */ - if ((clusters+2u) < fatlimitmin) { - WriteOut("Error: Generated filesystem has too few clusters given the parameters\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - if ((clusters+2u) > fatlimit) { - clusters = fatlimit-2u; - WriteOut("Warning: Cluster count is too high given the volume size. Reporting a\n"); - WriteOut(" smaller sector count.\n"); - /* Well, if the user wants an oversized partition, hack the total sectors fields to make it work */ - uint32_t adj_vol_sectors = - (uint32_t)(reserved_sectors + (sect_per_fat * fat_copies) + - (((root_ent * 32u) + 511u) / 512u) + (clusters * sectors_per_cluster)); - - // sectors (under 32MB) if not FAT32 and less than 65536 - if (adj_vol_sectors < 65536ul) host_writew(&sbuf[TotSec16],(uint16_t)adj_vol_sectors); - // sectors (32MB or larger or FAT32) - if (adj_vol_sectors >= 65536ul) host_writed(&sbuf[TotSec32],adj_vol_sectors); - else host_writed(&sbuf[TotSec32],0); - } - - const unsigned long long first_cluster = - (unsigned long long)bootsect_pos + reserved_sectors + - ((unsigned long long)sect_per_fat * (unsigned long long)fat_copies) + - (unsigned long long)root_ent_sec; - - /* do not validate alignment of data area, because some of the fd and hd presets might - * violate it, but certainly make sure that the first cluster is aligned */ - if (alignment != 0u) { - if ((first_cluster % (unsigned long long)alignment) != 0ull) { - WriteOut("Sanity check failed: First cluster not aligned\n"); - fclose(f); - unlink(temp_line.c_str()); - if (setdir) chdir(dirCur); - return; - } - } - - // sectors per track - host_writew(&sbuf[SecPerTrk],s); - // heads - host_writew(&sbuf[NumHeads],h); - // hidden sectors - host_writed(&sbuf[HiddSec],(uint32_t)bootsect_pos); - /* after 0x24, FAT12/FAT16 and FAT32 diverge in structure */ - if (FAT >= 32) { - host_writed(&sbuf[FATSz32],sect_per_fat); - sbuf[0x28] = 0x00; // FAT is mirrored at runtime because that is what DOSBox-X's FAT driver does - host_writew(&sbuf[0x2A],0x0000); // FAT32 version 0.0 - host_writed(&sbuf[0x2C],2); // root directory starting cluster - host_writew(&sbuf[0x30],1); // sector number in reserved area of FSINFO structure - host_writew(&sbuf[0x32],6); // sector number in reserved area of backup boot sector - // BIOS drive - sbuf[DrvNum32] = (mediadesc == 0xF8) ? 0x80 : 0x00; - // ext. boot signature - sbuf[BootSig32] = 0x29; - // Volume label - sprintf((char*)&sbuf[VolLab32], "NO NAME "); - // volume serial number - // let's use the BIOS time (cheap, huh?) - host_writed(&sbuf[VolID32], mem_readd(BIOS_TIMER)); - // file system type - sprintf((char*)&sbuf[FilSysType32],"FAT32 "); - } - else { /* FAT12/FAT16 */ - // BIOS drive - sbuf[BootSig] = 0x29; - // Volume label - sprintf((char*)&sbuf[VolLab], "NO NAME "); - // volume serial number - // let's use the BIOS time (cheap, huh?) - host_writed(&sbuf[VolID], mem_readd(BIOS_TIMER)); - if(is_fd) { - uint8_t index = 0; - while(DiskGeometryList[index].cylcount != 0) { - if(DiskGeometryList[index].ksize == disksize) { - sbuf[Media] = DiskGeometryList[index].mediaid; - mediadesc = DiskGeometryList[index].mediaid; - host_writew(&sbuf[SecPerTrk],DiskGeometryList[index].secttrack); - host_writew(&sbuf[NumHeads], DiskGeometryList[index].headscyl); - host_writew(&sbuf[BytsPerSec], DiskGeometryList[index].bytespersect); - sbuf[SecPerClus] = spc_changed ? sectors_per_cluster : DiskGeometryList[index].sectcluster; - host_writew(&sbuf[RootEntCnt], rootent_changed ? root_ent : DiskGeometryList[index].rootentries); - host_writew(&sbuf[FATSz16],sect_per_fat); - break; - } - index++; - } - } - // BIOS drive - sbuf[DrvNum] = (mediadesc == 0xF8) ? 0x80 : 0x00; - // file system type - if (FAT >= 16) sprintf((char*)&sbuf[FilSysType],"FAT16 "); - else sprintf((char*)&sbuf[FilSysType],"FAT12 "); - } - // boot sector signature - host_writew(&sbuf[BootSign],0xAA55); - - // if anything should try to boot this partition, add code to print an error message instead of - // letting the CPU run wild through not executable code. - if (FAT >= 32) { - // the code expects to load a string from a fixed address. - // we're relocating it to make room for FAT32 structures so some patching is required. - memcpy(sbuf+BootCode32,this_is_not_a_bootable_partition+0x3E,BootSign - BootCode32); - host_writew(sbuf+0x5D,0x7C77); // 0x7C5D: MOV SI, we are patching the - } - else { - memcpy(sbuf+BootCode,this_is_not_a_bootable_partition+0x3E,BootSign - BootCode); - } - - // write label - if (!label.empty()) { - const char *s = label.c_str(); - unsigned int i; - char *d; - - if (FAT >= 32) d = (char*)sbuf + VolLab32; - else d = (char*)sbuf + VolLab; - - for (i=0;i < 11 && *s;i++) *d++ = *s++; - for ( ;i < 11; i++) *d++ = ' '; - } - - // write the boot sector - if(disktype == "vhd") { - vhd->Write_AbsoluteSector(bootsect_pos, sbuf); - } - else { - fseeko64(f, bootsect_pos * 512, SEEK_SET); - fwrite(&sbuf, 512, 1, f); - } - // FAT32: Write backup copy too. - // The BPB we wrote says sector 6 from start of volume - if(FAT >= 32) { - if(disktype != "vhd") { - fseeko64(f, (bootsect_pos + 6u) * 512, SEEK_SET); - fwrite(&sbuf, 512, 1, f); - } - else { - vhd->Write_AbsoluteSector((bootsect_pos + 6u), sbuf); - } - } - // FAT32: Write FSInfo sector too at sector 1 from start of volume. - // Windows 98 behavior shows that the FSInfo is duplicated - // along with the boot sector. - if (FAT >= 32) { - memset(sbuf,0,512); - host_writed(&sbuf[0x000],0x41615252); /* "RRaA" */ - host_writed(&sbuf[0x1e4],0x61417272); /* "rrAa" */ - host_writed(&sbuf[0x1e8],(uint32_t)(clusters-1)); /* Last known free cluster count */ - host_writed(&sbuf[0x1ec],3); /* Next free cluster. We used 2 for the root dir, so 3 is next */ - host_writed(&sbuf[0x1fc],0xAA550000); /* signature */ - if(disktype != "vhd") { - fseeko64(f, (bootsect_pos + 1u) * 512, SEEK_SET); - fwrite(&sbuf, 512, 1, f); - fseeko64(f, (bootsect_pos + 6u + 1u) * 512, SEEK_SET); - fwrite(&sbuf, 512, 1, f); - } - else { - vhd->Write_AbsoluteSector((bootsect_pos + 1u), sbuf); - vhd->Write_AbsoluteSector((bootsect_pos + 6u +1u), sbuf); - } - } - - // write FATs - memset(sbuf,0,512); - if (FAT >= 32) { - host_writed(&sbuf[0],0x0FFFFF00 | mediadesc); - host_writed(&sbuf[4],0x0FFFFFFF); - - /* The code above marks cluster 2 as the start of the root directory. */ - host_writed(&sbuf[8],0x0FFFFFFF); - } - else if (FAT >= 16) - host_writed(&sbuf[0],0xFFFFFF00 | mediadesc); - else - host_writed(&sbuf[0],0xFFFF00 | mediadesc); - - for (unsigned int fat=0;fat < fat_copies;fat++) { - if(disktype != "vhd") { - fseeko64(f, (off_t)(((unsigned long long)bootsect_pos + reserved_sectors + (unsigned long long)sect_per_fat * (unsigned long long)fat) * 512ull), SEEK_SET); - fwrite(&sbuf, 512, 1, f); - } - else { - vhd->Write_AbsoluteSector((unsigned long long)bootsect_pos + reserved_sectors + (unsigned long long)sect_per_fat * (unsigned long long)fat, sbuf); - } - } - - // write label in root directory, as first entry - if (!label.empty()) { - const char *s = label.c_str(); - unsigned int i; - char *d; - - unsigned long long sec; - - /* FAT12/FAT16: This points at the root directory area. - * FAT32: This points at the root directory only because this code constructed the root directory allocation chain - * starting at cluster 2, which is the first cluster of the data area. */ - sec = (unsigned long long)bootsect_pos + reserved_sectors + - ((unsigned long long)sect_per_fat * (unsigned long long)fat_copies); - - memset(sbuf,0,512); - - d = (char*)sbuf; - for (i=0;i < 11 && *s;i++) *d++ = *s++; - for ( ;i < 11; i++) *d++ = ' '; - sbuf[11] = 0x08; /* volume label */ - - if(disktype != "vhd") { - fseeko64(f, (off_t)(sec * 512ull), SEEK_SET); - fwrite(&sbuf, 512, 1, f); - } - else { - vhd->Write_AbsoluteSector(sec, sbuf); - } - } - - // warning - if ((sectors_per_cluster*512ul) >= 65536ul) - WriteOut("WARNING: Cluster sizes >= 64KB are not compatible with MS-DOS and SCANDISK\n"); - } - // write VHD footer if requested - if((mediadesc == 0xF8) && disktype != "vhd" && !strcasecmp(extension, ".vhd")) { - imageDiskVHD::VHDFooter footer; - footer.SetDefaults(); - footer.dataOffset = 0xFFFFFFFFFFFFFFFF; - footer.originalSize = footer.currentSize = size; - footer.geometry.cylinders = c; - footer.geometry.heads = h; - footer.geometry.sectors = s; - footer.diskType = imageDiskVHD::VHD_TYPE_FIXED; - imageDiskVHD::mk_uuid((uint8_t*)footer.uniqueId); - footer.checksum = footer.CalculateChecksum(); - footer.SwapByteOrder(); - // write footer - fseeko64(f, 0L, SEEK_END); - fwrite(&footer,512,1,f); - } - if(disktype != "vhd") { - fclose(f); - } - else { - delete vhd; - } - // create the batch file - if(t2 == "-bat") { - if(temp_line.length() > 3) { - t2 = temp_line.substr(0,temp_line.length()-4) + ".bat"; - } else { - t2 = temp_line + ".bat"; - } - WriteOut("%s\n",t2.c_str()); - f = fopen(t2.c_str(),"wb+"); - if (!f) { - WriteOut(MSG_Get("PROGRAM_IMGMAKE_CANNOT_WRITE"),t2.c_str()); - if (setdir) { - chdir(dirCur); - runRescan("-Q"); - } - return; - } - - if (bootsect_pos < 0) /* -nofs */ - fprintf(f,"imgmount 2 %s -size 512,%u,%u,%u\r\n",temp_line.c_str(),s,h,c); - else - fprintf(f,"imgmount c %s -size 512,%u,%u,%u\r\n",temp_line.c_str(),s,h,c); - - fclose(f); - } - if (setdir) { - chdir(dirCur); - runRescan("-Q"); - } - return; - } - void printHelp() { // maybe hint parameter? - resetcolor = true; - WriteOut(MSG_Get("PROGRAM_IMGMAKE_SYNTAX")); - } - }; - - static void IMGMAKE_ProgramStart(Program * * make) { - *make=new IMGMAKE; - } - - void runImgmake(const char *str) { - IMGMAKE imgmake; - imgmake.cmd=new CommandLine("IMGMAKE", str); - imgmake.Run(); - } - - void swapInDrive(int drive, unsigned int position=0); - class IMGSWAP : public Program - { - public: - void ListImgSwaps(void) { - char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH]; - uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; - /* Command uses dta so set it to our internal dta */ - RealPt save_dta = dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - WriteOut(MSG_Get("PROGRAM_IMGSWAP_STATUS")); - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_FORMAT"),MSG_Get("DRIVE"),MSG_Get("TYPE"),MSG_Get("LABEL"),MSG_Get("SWAP_SLOT")); - int cols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); - if (!cols) cols=80; - for(int p = 1;p < cols;p++) WriteOut("-"); - WriteOut("\n"); - bool none=true; - for (int d = 0;d < DOS_DRIVES;d++) { - if (!Drives[d] || (strncmp(Drives[d]->GetInfo(), "fatDrive ", 9) && strncmp(Drives[d]->GetInfo(), "isoDrive ", 9))||(int)DriveManager::GetDisksSize(d)<2) continue; - char root[7] = {(char)('A'+d),':','\\','*','.','*',0}; - bool ret = DOS_FindFirst(root,DOS_ATTR_VOLUME); - if (ret) { - dta.GetResult(name,lname,size,hsize,date,time,attr); - DOS_FindNext(); //Mark entry as invalid - } else name[0] = 0; - - /* Change 8.3 to 11.0 */ - const char* dot = strchr(name, '.'); - if(dot && (dot - name == 8) ) { - name[8] = name[9];name[9] = name[10];name[10] = name[11];name[11] = 0; - } - - root[1] = 0; //This way, the format string can be reused. - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_FORMAT"),root, Drives[d]->GetInfo(),name,DriveManager::GetDrivePosition(d)); - none=false; - } - if (none) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NONE")); - dos.dta(save_dta); - } - void Run() override - { - //Hack To allow long commandlines - ChangeToLongCmd(); - - if(cmd->FindExist("/?", true) || cmd->FindExist("-?", true) || cmd->FindExist("?", true)) { - resetcolor = true; - WriteOut("Swaps floppy, hard drive and optical disc images.\n\n" - "\033[32;1mIMGSWAP\033[0m \033[37;1mdrive\033[0m \033[36;1m[position]\033[0m\n" - " \033[37;1mdrive\033[0m Drive letter to swap the image.\n" - " \033[36;1m[position]\033[0m Disk position to swap to.\n"); - return; - } - if (!cmd->GetCount()) { - ListImgSwaps(); - return; - } - if (!cmd->FindCommand(1,temp_line) || (temp_line.size() > 2) || ((temp_line.size()>1) && (temp_line[1]!=':')) || (!(temp_line[0] >= 'A' && temp_line[0] <= 'Z') && !(temp_line[0] >= 'a' && temp_line[0] <= 'z'))) { - WriteOut(MSG_Get("SHELL_ILLEGAL_DRIVE")); - return; - } - int d=temp_line[0] - (temp_line[0] >= 'a' && temp_line[0] <= 'z' ? 'a' : 'A'); - if (!Drives[d] || (strncmp(Drives[d]->GetInfo(), "fatDrive ", 9) && strncmp(Drives[d]->GetInfo(), "isoDrive ", 9)) || (int)DriveManager::GetDisksSize(d)<2) { - ListImgSwaps(); - return; - } - if (cmd->FindCommand(2,temp_line)) { - int swap=atoi(temp_line.c_str()); - if (swap<1||swap>DriveManager::GetDisksSize(d)) { - WriteOut(MSG_Get("PROGRAM_IMGSWAP_ERROR"), DriveManager::GetDisksSize(d)); - return; - } - swapInDrive(d,swap); - } else - swapInDrive(d); - char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH]; - uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; - /* Command uses dta so set it to our internal dta */ - RealPt save_dta = dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_FORMAT"),MSG_Get("DRIVE"),MSG_Get("TYPE"),MSG_Get("LABEL"),MSG_Get("SWAP_SLOT")); - int cols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); - if (!cols) cols=80; - for(int p = 1;p < cols;p++) WriteOut("-"); - WriteOut("\n"); - char root[7] = {(char)('A'+d),':','\\','*','.','*',0}; - bool ret = DOS_FindFirst(root,DOS_ATTR_VOLUME); - if (ret) { - dta.GetResult(name,lname,size,hsize,date,time,attr); - DOS_FindNext(); //Mark entry as invalid - } else name[0] = 0; - - /* Change 8.3 to 11.0 */ - const char* dot = strchr(name, '.'); - if(dot && (dot - name == 8) ) { - name[8] = name[9];name[9] = name[10];name[10] = name[11];name[11] = 0; - } - - root[1] = 0; //This way, the format string can be reused. - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_FORMAT"),root, Drives[d]->GetInfo(),name,DriveManager::GetDrivePosition(d)); - dos.dta(save_dta); - } - }; - - void IMGSWAP_ProgramStart(Program** make) - { - *make = new IMGSWAP; - } - - // LOADFIX - - class LOADFIX : public Program { - public: - void Run(void) override; - }; - - bool XMS_Active(void); - Bitu XMS_AllocateMemory(Bitu size, uint16_t& handle); - Bitu XMS_FreeMemory(Bitu handle); - uint8_t EMM_AllocateMemory(uint16_t pages,uint16_t & dhandle,bool can_allocate_zpages); - uint8_t EMM_ReleaseMemory(uint16_t handle); - bool EMS_Active(void); - - /* HIMEM.SYS does not store who owns what block, so for -D or -F to work, - * we need to keep track of handles ourself */ - std::vector LOADFIX_xms_handles; - std::vector LOADFIX_ems_handles; - - void LOADFIX_OnDOSShutdown(void) { - LOADFIX_xms_handles.clear(); - LOADFIX_ems_handles.clear(); - } - - void LOADFIX::Run(void) - { - uint16_t commandNr = 1; - Bitu kb = 64; - bool xms = false; - bool ems = false; - bool opta = false; - - if (cmd->FindExist("-xms",true) || cmd->FindExist("/xms",true)) { - xms = true; - kb = 1024; - } - - if (cmd->FindExist("-ems",true) || cmd->FindExist("/ems",true)) { - ems = true; - kb = 1024; - } - - if (cmd->FindExist("-a",true) || cmd->FindExist("/a",true)) - opta = true; - - if (cmd->GetCount()==1 && (cmd->FindExist("-?", false) || cmd->FindExist("/?", false))) { - resetcolor = true; - WriteOut(MSG_Get("PROGRAM_LOADFIX_HELP")); - return; - } - - if (cmd->FindCommand(commandNr,temp_line)) { - if (temp_line[0]=='-' || (temp_line[0]=='/')) { - char ch = temp_line[1]; - if ((*upcase(&ch)=='D') || (*upcase(&ch)=='F')) { - // Deallocate all - if (ems) { - for (auto i=LOADFIX_ems_handles.begin();i!=LOADFIX_ems_handles.end();i++) { - if (EMM_ReleaseMemory(*i)) - WriteOut("XMS handle %u: unable to free",*i); - } - LOADFIX_ems_handles.clear(); - WriteOut(MSG_Get("PROGRAM_LOADFIX_DEALLOCALL"),kb); - } - else if (xms) { - for (auto i=LOADFIX_xms_handles.begin();i!=LOADFIX_xms_handles.end();i++) { - if (XMS_FreeMemory(*i)) - WriteOut("XMS handle %u: unable to free",*i); - } - LOADFIX_xms_handles.clear(); - WriteOut(MSG_Get("PROGRAM_LOADFIX_DEALLOCALL"),kb); - } - else { - DOS_FreeProcessMemory(0x40); - WriteOut(MSG_Get("PROGRAM_LOADFIX_DEALLOCALL"),kb); - } - return; - } else { - // Set mem amount to allocate - kb = (Bitu)atoi(temp_line.c_str()+1); - if (kb==0) kb=xms?1024:64; - commandNr++; - } - } - } - - // Allocate Memory - if (ems) { - if (EMS_Active()) { - uint16_t handle; - Bitu err; - - /* EMS allocates in 16kb increments */ - kb = (kb + 15u) & (~15u); - - err = EMM_AllocateMemory((uint16_t)(kb/16u)/*16KB pages*/,/*&*/handle,false); - if (err == 0) { - WriteOut("EMS block allocated (%uKB)\n",kb); - LOADFIX_ems_handles.push_back(handle); - } - else { - WriteOut("Unable to allocate EMS block\n"); - } - } - else { - WriteOut("EMS not active\n"); - } - } - else if (xms) { - if (XMS_Active()) { - uint16_t handle; - Bitu err; - - err = XMS_AllocateMemory(kb,/*&*/handle); - if (err == 0) { - WriteOut("XMS block allocated (%uKB)\n",kb); - LOADFIX_xms_handles.push_back(handle); - } - else { - WriteOut("Unable to allocate XMS block\n"); - } - } - else { - WriteOut("XMS not active\n"); - } - } - else { - uint16_t segment; - uint16_t blocks = (uint16_t)(kb*1024/16); - if (DOS_AllocateMemory(&segment,&blocks)) { - DOS_MCB mcb((uint16_t)(segment-1)); - if (opta) { - if (segment < 0x1000) { - uint16_t needed = 0x1000 - segment; - if (DOS_ResizeMemory(segment,&needed)) - kb=needed*16/1024; - } - else { - DOS_FreeMemory(segment); - WriteOut("Lowest MCB is above 64KB, nothing allocated\n"); - return; - } - } - mcb.SetPSPSeg(0x40); // use fake segment - WriteOut(MSG_Get("PROGRAM_LOADFIX_ALLOC"),kb); - // Prepare commandline... - if (cmd->FindCommand(commandNr++,temp_line)) { - // get Filename - char filename[128]; - safe_strncpy(filename,temp_line.c_str(),128); - // Setup commandline - char args[256 + 1]; - args[0] = 0; - bool found = cmd->FindCommand(commandNr++, temp_line); - while (found) { - if (strlen(args) + temp_line.length() + 1 > 256) break; - strcat(args, temp_line.c_str()); - found = cmd->FindCommand(commandNr++, temp_line); - if (found) strcat(args, " "); - } - // Use shell to start program - DOS_Shell shell; - shell.Execute(filename,args); - DOS_FreeMemory(segment); - WriteOut(MSG_Get("PROGRAM_LOADFIX_DEALLOC"),kb); - } - } else { - WriteOut(MSG_Get("PROGRAM_LOADFIX_ERROR"),kb); - } - } - } - - static void LOADFIX_ProgramStart(Program * * make) { - *make=new LOADFIX; - } - - // RESCAN - - class RESCAN : public Program { - public: - void Run(void) override; - }; - - void RESCAN::Run(void) - { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut("Rescans for changes on mounted drives made on the host by clearing caches.\n\nRESCAN [/A] [/Q]\nRESCAN [drive:] [/Q]\n\n [/A]\t\tRescan all drives\n [/Q]\t\tEnable quiet mode\n [drive:]\tThe drive to rescan\n\nType RESCAN with no parameters to rescan the current drive.\n"); - return; - } - bool all = false, quiet = false; - if (cmd->FindExist("-q",true) || cmd->FindExist("/q",true)) - quiet = true; - - uint8_t drive = DOS_GetDefaultDrive(); - if(cmd->FindCommand(1,temp_line)) { - //-A -All /A /All - if(temp_line.size() >= 2 && (temp_line[0] == '-' ||temp_line[0] =='/')&& (temp_line[1] == 'a' || temp_line[1] =='A') ) all = true; - else if(temp_line.size() == 2 && temp_line[1] == ':') { - lowcase(temp_line); - drive = temp_line[0] - 'a'; - } - } - // Get current drive - if (all) { - for(Bitu i =0; iEmptyCache(); - } - if (!quiet) WriteOut(MSG_Get("PROGRAM_RESCAN_SUCCESS")); - } else { - if (drive < DOS_DRIVES && Drives[drive]) { - Drives[drive]->EmptyCache(); - if (!quiet) WriteOut(MSG_Get("PROGRAM_RESCAN_SUCCESS")); - } else - if (!quiet) WriteOut(MSG_Get("SHELL_EXECUTE_DRIVE_NOT_FOUND"), 'A'+drive); - } - } - - static void RESCAN_ProgramStart(Program * * make) { - *make=new RESCAN; - } - - void runRescan(const char *str) { - RESCAN rescan; - rescan.cmd=new CommandLine("RESCAN", str); - rescan.Run(); - } - - /* TODO: This menu code sucks. Write a better one. */ - class INTRO : public Program { - public: - void DisplayMount(void) { - /* Basic mounting has a version for each operating system. - * This is done this way so both messages appear in the language file*/ - WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_START")); - if (machine == MCH_PC98) { - #if (WIN32) - WriteOut("\033[44;1m\x86\x52\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x56\n" - "\033[44;1m\x86\x46\033[0m "); - WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXST_WINDOWS")); - WriteOut(" \033[44;1m\x86\x46\033[0m\n\033[44;1m\x86\x46\033[0m \033[44;1m\x86\x46\033[0m\n\033[44;1m\x86\x46\033[0m "); - WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXEN_WINDOWS")); - WriteOut(" \033[37m \033[44;1m\x86\x46\033[44;1m\n" - "\033[44;1m\x86\x5A\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x5E\033[0m\n" - ); - #else - WriteOut("\033[44;1m\x86\x52\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x56\n" - "\x86\x46 "); - WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXST_OTHER")); - WriteOut(" \x86\x46\n\x86\x46 \x86\x46\n\x86\x46 "); - WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXEN_OTHER")); - WriteOut(" \033[37m \x86\x46\n" - "\x86\x5A\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" - "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x5E\033[0m\n" - ); - #endif - } else { - #if (WIN32) - WriteOut("\033[44;1m\xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB\n" - "\xBA "); - WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXST_WINDOWS")); - WriteOut("\xBA\n\xBA \xBA\n\xBA "); - WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXEN_WINDOWS")); - WriteOut("\xBA\n" - "\xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC\033[0m\n"); - #else - WriteOut("\033[44;1m\xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB\n" - "\xBA "); - WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXST_OTHER")); - WriteOut("\xBA\n\xBA \xBA\n\xBA "); - WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXEN_OTHER")); - WriteOut("\xBA\n" - "\xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" - "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC\033[0m\n"); - #endif - } - WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_END")); - } - void DisplayUsage(void) { - uint8_t c;uint16_t n=1; - WriteOut(MSG_Get("PROGRAM_INTRO_USAGE_TOP")); - WriteOut(MSG_Get("PROGRAM_INTRO_USAGE_1")); - DOS_ReadFile (STDIN,&c,&n); - WriteOut(MSG_Get("PROGRAM_INTRO_USAGE_TOP")); - WriteOut(MSG_Get("PROGRAM_INTRO_USAGE_2")); - DOS_ReadFile (STDIN,&c,&n); - WriteOut(MSG_Get("PROGRAM_INTRO_USAGE_TOP")); - WriteOut(MSG_Get("PROGRAM_INTRO_USAGE_3")); - DOS_ReadFile (STDIN,&c,&n); - } - void DisplayIntro(void) { - WriteOut(MSG_Get("PROGRAM_INTRO")); - WriteOut("\033[44m\033[K\033[0m\n\033[44m\033[K\033[1m\033[1m\t\t\t\t\t\t\t "); - WriteOut(MSG_Get("PROGRAM_INTRO_MENU_UP")); - if (machine == MCH_PC98) - WriteOut("\033[0m\n" - "\033[44m\033[K\033[1m\033[1m \x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\033[0m\n" - "\033[44m\033[K\033[0m\n" - ); - else - WriteOut(" \033[0m\n" - "\033[44m\033[K\033[1m\033[1m \xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\033[0m\n" - "\033[44m\033[K\033[0m\n" - ); - } - void DisplayMenuBefore(void) { WriteOut("\033[44m\033[K\033[33m\033[1m \033[0m "); } - void DisplayMenuCursorStart(void) { - if (machine == MCH_PC98) { - WriteOut("\033[44m\033[K\033[1m\033[33;44m \x1C\033[0m\033[5;37;44m "); - } else { - WriteOut("\033[44m\033[K\033[1m\033[33;44m \x10\033[0m\033[5;37;44m "); - } - } - void DisplayMenuCursorEnd(void) { WriteOut("\033[0m\n"); } - void DisplayMenuNone(void) { WriteOut("\033[44m\033[K\033[0m\n"); } - - bool CON_IN(uint8_t * data) const { - uint8_t c; - uint16_t n=1; - - /* handle arrow keys vs normal input, - * with special conditions for PC-98 and IBM PC */ - if (!DOS_ReadFile(STDIN,&c,&n) || n == 0) return false; - - if (IS_PC98_ARCH) { - /* translate PC-98 arrow keys to IBM PC escape for the caller */ - if (c == 0x0B) - *data = 0x48 | 0x80; /* IBM extended code up arrow */ - else if (c == 0x0A) - *data = 0x50 | 0x80; /* IBM extended code down arrow */ - else - *data = c; - } - else { - if (c == 0) { - if (!DOS_ReadFile(STDIN,&c,&n) || n == 0) return false; - *data = c | 0x80; /* extended code */ - } - else { - *data = c; - } - } - - return true; - } - - void Run(void) override { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut("A full-screen introduction to DOSBox-X.\n\nINTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME]\n"); - return; - } - uint8_t attr = DOS_GetAnsiAttr(); - std::string menuname = "BASIC"; // default - /* Only run if called from the first shell (Xcom TFTD runs any intro file in the path) */ - if (!cmd->FindExist("-run", true)&&!cmd->FindExist("/run", true)&&DOS_PSP(dos.psp()).GetParent() != DOS_PSP(DOS_PSP(dos.psp()).GetParent()).GetParent()) return; - if(cmd->FindExist("welcome",false)) { - void showWelcome(Program *shell); - showWelcome(this); - return; - } - if(cmd->FindExist("cdrom",false)) { - WriteOut(MSG_Get("PROGRAM_INTRO_CDROM")); - if (attr) DOS_SetAnsiAttr(attr); - return; - } - if(cmd->FindExist("mount",false)) { - WriteOut("\033[2J");//Clear screen before printing - DisplayMount(); - if (attr) DOS_SetAnsiAttr(attr); - return; - } - - if(cmd->FindExist("usage", false)) { - DisplayUsage(); - if(attr) DOS_SetAnsiAttr(attr); - return; - } - uint8_t c;uint16_t n=1; - - #define CURSOR(option) \ - if (menuname==option) DisplayMenuCursorStart(); \ - else DisplayMenuBefore(); \ - WriteOut(MSG_Get("PROGRAM_INTRO_MENU_" option "")); \ - if (menuname==option) DisplayMenuCursorEnd(); \ - else WriteOut("\n"); - - /* Intro */ - - menufirst: - DisplayIntro(); - CURSOR("BASIC") - CURSOR("CDROM") - CURSOR("USAGE") - DisplayMenuNone(); // None - CURSOR("INFO") - CURSOR("QUIT") - DisplayMenuNone(); // None - - if (menuname=="BASIC") goto basic; - else if (menuname=="CDROM") goto cdrom; - else if (menuname=="USAGE") goto usage; - else if (menuname=="INFO") goto info; - else if (menuname=="QUIT") goto quit; - else if (menuname=="GOTO_EXIT") goto goto_exit; - - goto_exit: - WriteOut("\n"); // Give a line - if (attr) DOS_SetAnsiAttr(attr); - return; - - basic: - menuname="BASIC"; - WriteOut(MSG_Get("PROGRAM_INTRO_MENU_BASIC_HELP")); - CON_IN(&c); - do switch (c) { - case 0x48|0x80: menuname="QUIT"; goto menufirst; // Up - case 0x50|0x80: menuname="CDROM"; goto menufirst; // Down - case 0x1B: menuname="QUIT"; goto menufirst; - case 0xD: // Run - WriteOut("\033[2J"); - WriteOut(MSG_Get("PROGRAM_INTRO")); - WriteOut("\n"); - DisplayMount(); - DOS_ReadFile (STDIN,&c,&n); - goto menufirst; - } while (CON_IN(&c)); - - cdrom: - menuname="CDROM"; - WriteOut(MSG_Get("PROGRAM_INTRO_MENU_CDROM_HELP")); - CON_IN(&c); - do switch (c) { - case 0x48|0x80: menuname="BASIC"; goto menufirst; // Up - case 0x50|0x80: menuname="USAGE"; goto menufirst; // Down - case 0x1B: menuname="QUIT"; goto menufirst; - case 0xD: // Run - WriteOut(MSG_Get("PROGRAM_INTRO_CDROM")); - DOS_ReadFile (STDIN,&c,&n); - goto menufirst; - } while (CON_IN(&c)); - - usage: - menuname="USAGE"; - WriteOut(MSG_Get("PROGRAM_INTRO_MENU_USAGE_HELP")); - CON_IN(&c); - do switch (c) { - case 0x48|0x80: menuname="CDROM"; goto menufirst; // Down - case 0x50|0x80: menuname="INFO"; goto menufirst; // Down - case 0x1B: menuname="QUIT"; goto menufirst; - case 0xD: // Run - DisplayUsage(); - goto menufirst; - } while (CON_IN(&c)); - - info: - menuname="INFO"; - WriteOut(MSG_Get("PROGRAM_INTRO_MENU_INFO_HELP")); - CON_IN(&c); - do switch (c) { - case 0x48|0x80: menuname="USAGE"; goto menufirst; // Up - case 0x50|0x80: menuname="QUIT"; goto menufirst; // Down - case 0x1B: menuname="QUIT"; goto menufirst; - case 0xD: // Run - WriteOut("\033[2J"); - WriteOut(MSG_Get("PROGRAM_INTRO")); - WriteOut("\n"); - WriteOut(MSG_Get("PROGRAM_INTRO_INFO")); - DOS_ReadFile (STDIN,&c,&n); - goto menufirst; - } while (CON_IN(&c)); - - quit: - menuname="QUIT"; - WriteOut(MSG_Get("PROGRAM_INTRO_MENU_QUIT_HELP")); - CON_IN(&c); - do switch (c) { - case 0x48|0x80: menuname="INFO"; goto menufirst; // Up - case 0x50|0x80: menuname="BASIC"; goto menufirst; // Down - case 0xD: // Run - menuname="GOTO_EXIT"; - goto menufirst; - } while (CON_IN(&c)); - if (attr) DOS_SetAnsiAttr(attr); - } - }; - - static void INTRO_ProgramStart(Program * * make) { - *make=new INTRO; - } - - imageDiskMemory* CreateRamDrive(Bitu sizes[], const int reserved_cylinders, const bool forceFloppy, Program* obj) { - imageDiskMemory* dsk = NULL; - //if chs not specified - if (sizes[1] == 0) { - uint32_t imgSizeK = (uint32_t)sizes[0]; - //default to 1.44mb floppy - if (forceFloppy && imgSizeK == 0) imgSizeK = 1440; - //search for floppy geometry that matches specified size in KB - int index = 0; - while (DiskGeometryList[index].cylcount != 0) { - if (DiskGeometryList[index].ksize == imgSizeK) { - //create floppy - dsk = new imageDiskMemory(DiskGeometryList[index]); - break; - } - index++; - } - if (dsk == NULL) { - //create hard drive - if (forceFloppy) { - if (obj!=NULL) obj->WriteOut("Floppy size not recognized\n"); - return NULL; - } - - // The fatDrive class is hard-coded to assume that disks 2880KB or smaller are floppies, - // whether or not they are attached to a floppy controller. So, let's enforce a minimum - // size of 4096kb for hard drives. Use the other constructor for floppy drives. - // Note that a size of 0 means to auto-select a size - if (imgSizeK < 4096) imgSizeK = 4096; - - dsk = new imageDiskMemory(imgSizeK); - } - } - else { - //search for floppy geometry that matches specified geometry - int index = 0; - while (DiskGeometryList[index].cylcount != 0) { - if (DiskGeometryList[index].cylcount == sizes[3] && - DiskGeometryList[index].headscyl == sizes[2] && - DiskGeometryList[index].secttrack == sizes[1] && - DiskGeometryList[index].bytespersect == sizes[0]) { - //create floppy - dsk = new imageDiskMemory(DiskGeometryList[index]); - break; - } - index++; - } - if (dsk == NULL) { - //create hard drive - if (forceFloppy) { - if (obj!=NULL) obj->WriteOut("Floppy size not recognized\n"); - return NULL; - } - dsk = new imageDiskMemory((uint16_t)sizes[3], (uint16_t)sizes[2], (uint16_t)sizes[1], (uint16_t)sizes[0]); - } - } - if (!dsk->active) { - if (obj!=NULL) obj->WriteOut(MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE")); - delete dsk; - return NULL; - } - dsk->Set_Reserved_Cylinders((Bitu)reserved_cylinders); - return dsk; - } - - bool AttachToBiosByIndex(imageDisk* image, const unsigned char bios_drive_index) { - if (bios_drive_index >= MAX_DISK_IMAGES) return false; - if (imageDiskList[bios_drive_index] != NULL) { - /* Notify IDE ATA emulation if a drive is already there */ - if (bios_drive_index >= 2) IDE_Hard_Disk_Detach(bios_drive_index); - imageDiskList[bios_drive_index]->Release(); - } - imageDiskList[bios_drive_index] = image; - imageDiskChange[bios_drive_index] = true; - image->Addref(); - - // let FDC know if we mounted a floppy - if (bios_drive_index <= 1) { - FDC_AssignINT13Disk(bios_drive_index); - incrementFDD(); - } - - return true; - } - - bool AttachToBiosAndIdeByIndex(imageDisk* image, const unsigned char bios_drive_index, const unsigned char ide_index, const bool ide_slave) { - if (!AttachToBiosByIndex(image, bios_drive_index)) return false; - //if hard drive image, and if ide controller is specified - if (bios_drive_index >= 2 && bios_drive_index < MAX_DISK_IMAGES) { - IDE_Hard_Disk_Attach((signed char)ide_index, ide_slave, bios_drive_index); - updateDPT(); - } - return true; - } - - bool AttachToBiosByLetter(imageDisk* image, const char drive) { - if (image->hardDrive) { - //for hard drives, mount hard drives at first available index - for (int index = 2; index < MAX_DISK_IMAGES; index++) { - if (imageDiskList[index] == NULL) { - return AttachToBiosByIndex(image, index); - } - } - LOG_MSG("BIOS: Warning: Four hard drives (Disk no. 2-5) attached to BIOS already. Drive %c not attached", drive); - } - #if 0 - else if (IS_PC98_ARCH) { - // FIX_ME: This code is not correct. PC-98 boots from Drive 2 only if Drive 1 is empty. - // Currently disable this code since DOSBox-X supports only Drive A (Drive 1) as floppy boot drive anyway. - - //for pc-98 machines, mount floppies at first available index - for (int index = 0; index < 2; index++) { - if (imageDiskList[index] == NULL) { - return AttachToBiosByIndex(image, index); - } - } - } - #endif - else if ((drive - 'A') < 2) { - //for PCs, mount floppies only if A: or B: is specified, and then if so, at specified index - return AttachToBiosByIndex(image, drive - 'A'); - } - return false; - } - - bool AttachToBiosAndIdeByLetter(imageDisk* image, const char drive, const unsigned char ide_index, const bool ide_slave) { - if (image->hardDrive) { - //for hard drives, mount hard drives at first available index - for (int index = 2; index < MAX_DISK_IMAGES; index++) { - if (imageDiskList[index] == NULL) { - return AttachToBiosAndIdeByIndex(image, index, ide_index, ide_slave); - } - } - LOG_MSG("BIOS: Warning: Four hard drives (Disk no. 2-5) attached to BIOS already. Drive %c not attached", drive); - } - #if 0 - else if (IS_PC98_ARCH) { - // FIX_ME: This code is not correct. PC-98 boots from Drive 2 only if Drive 1 is empty. - // Currently disable this code since DOSBox-X supports only Drive A (Drive 1) as floppy boot drive anyway. - - //for pc-98 machines, mount floppies at first available index - for (int index = 0; index < 2; index++) { - if (imageDiskList[index] == NULL) { - return AttachToBiosByIndex(image, index); - } - } - } - #endif - else if ((drive - 'A') < 2) { - //for PCs, mount floppies only if A: or B: is specified, and then if so, at specified index - return AttachToBiosByIndex(image, drive - 'A'); - } - return false; - } - - std::string GetIDEPosition(unsigned char bios_disk_index); - class IMGMOUNT : public Program { - public: - std::vector options; - void ListImgMounts(void) { - char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH]; - uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; - /* Command uses dta so set it to our internal dta */ - RealPt save_dta = dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_1")); - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_FORMAT"),MSG_Get("DRIVE"),MSG_Get("TYPE"),MSG_Get("LABEL"),MSG_Get("SWAP_SLOT")); - int cols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); - if (!cols) cols=80; - for(int p = 1;p < cols;p++) WriteOut("-"); - WriteOut("\n"); - char swapstr[50]; - bool none=true; - for (int d = 0;d < DOS_DRIVES;d++) { - if (!Drives[d] || (strncmp(Drives[d]->GetInfo(), "fatDrive ", 9) && strncmp(Drives[d]->GetInfo(), "isoDrive ", 9))) continue; - char root[7] = {(char)('A'+d),':','\\','*','.','*',0}; - bool ret = DOS_FindFirst(root,DOS_ATTR_VOLUME); - if (ret) { - dta.GetResult(name,lname,size,hsize,date,time,attr); - DOS_FindNext(); //Mark entry as invalid - } else name[0] = 0; - - /* Change 8.3 to 11.0 */ - const char* dot = strchr(name, '.'); - if(dot && (dot - name == 8) ) { - name[8] = name[9];name[9] = name[10];name[10] = name[11];name[11] = 0; - } - - root[1] = 0; //This way, the format string can be reused. - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_FORMAT"),root, Drives[d]->GetInfo(),name,DriveManager::GetDrivePosition(d)); - none=false; - } - if (none) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NONE")); - WriteOut("\n"); - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_2")); - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NUMBER_FORMAT"),MSG_Get("DRIVE_NUMBER"),MSG_Get("DISK_NAME"),MSG_Get("IDE_POSITION"),MSG_Get("SWAP_SLOT")); - for(int p = 1;p < cols;p++) WriteOut("-"); - WriteOut("\n"); - none=true; - for (int index = 0; index < MAX_DISK_IMAGES; index++) { - if (imageDiskList[index]) { - int swaps=0; - if (swapInDisksSpecificDrive == index) { - for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) - if (diskSwap[si] != NULL) - swaps++; - } - if (!swaps) swaps=1; - sprintf(swapstr, "%d / %d", swaps==1?1:swapPosition+1, swaps); - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NUMBER_FORMAT"), std::to_string(index).c_str(), dynamic_cast(imageDiskList[index])!=NULL?"El Torito floppy drive":imageDiskList[index]->diskname.c_str(), GetIDEPosition(index).c_str(), swapstr); - none=false; - } - } - if (none) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NONE")); - dos.dta(save_dta); - } - void Run(void) override { - //Hack To allow long commandlines - ChangeToLongCmd(); - /* In secure mode don't allow people to change imgmount points. - * Neither mount nor unmount */ - if(control->SecureMode()) { - WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW")); - return; - } - imageDisk * newImage; - char drive; - std::vector paths; - if (!cmd->GetCount()) { - ListImgMounts(); - return; - } - //show help if /? or -? - if (cmd->FindExist("/?", true) || cmd->FindExist("-?", true) || cmd->FindExist("?", true) || cmd->FindExist("-help", true)) { - resetcolor = true; - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_HELP")); - return; - } - if (cmd->FindExist("/examples")||cmd->FindExist("-examples")) { - resetcolor = true; - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_EXAMPLE")); - return; - } - /* Check for unmounting */ - std::string umount; - if (cmd->FindString("-u",umount,false)) { - Unmount(umount[0]); - return; - } - - bool roflag = false; - if (cmd->FindExist("-ro",true)) - roflag = true; - - //initialize more variables - unsigned long el_torito_floppy_base=~0UL; - unsigned char el_torito_floppy_type=0xFF; - bool ide_slave = false; - signed char ide_index = -1; - char el_torito_cd_drive = 0; - std::string el_torito; - std::string ideattach="auto"; - std::string type="hdd"; - uint8_t tdr = 0; - std::string bdisk; - int bdisk_number=-1; - - //this code simply sets default type to "floppy" if mounting at A: or B: --- nothing else - // get first parameter - which is probably the drive letter to mount at (A-Z or A:-Z:) - and check it if is A or B or A: or B: - // default to floppy for drive letters A and B and numbers 0 and 1 - if (!cmd->FindCommand(1,temp_line) || (temp_line.size() > 2) || - ((temp_line.size()>1) && (temp_line[1]!=':'))) { - // drive not valid - } else { - tdr = toupper(temp_line[0]); - if(tdr=='A'||tdr=='B'||tdr=='0'||tdr=='1') type="floppy"; - } - - if (temp_line.size() == 1 && isdigit(temp_line[0]) && temp_line[0]>='0' && temp_line[0]FindExist("-u",true)) { - Unmount(temp_line[0]); - std::string templine; - if (!cmd->FindCommand(2,templine)||!templine.size()) return; - } - - //get the type - bool rtype=cmd->FindString("-t", type, true); - std::transform(type.begin(), type.end(), type.begin(), ::tolower); - - if (type == "cdrom") type = "iso"; //Tiny hack for people who like to type -t cdrom - if (!(type == "floppy" || type == "hdd" || type == "iso" || type == "ram")) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_TYPE_UNSUPPORTED"), type.c_str()); - return; - } - - //look for -o options - { - std::string s; - - while (cmd->FindString("-o", s, true)) - options.push_back(s); - } - - //look for -el-torito parameter and remove it from the command line - cmd->FindString("-el-torito",el_torito,true); - if(el_torito == "") cmd->FindString("-bootcd", el_torito, true); - if (el_torito != "") { - //get el-torito floppy from cdrom mounted at drive letter el_torito_cd_drive - el_torito_cd_drive = toupper(el_torito[0]); - //validate the el_torito loading (look for boot image on the cdrom, etc), and - // find the el_torito_floppy_base and el_torito_floppy_type values - if (!PrepElTorito(type, el_torito_cd_drive, el_torito_floppy_base, el_torito_floppy_type)) return; - } - - //the user can use -bd to mount partitions from an INT 13h BIOS disk mounted image, - //meaning a disk image attached to INT 13h using IMGMOUNT -fs none. This way, - //it is possible to mount multiple partitions from one HDD image. - cmd->FindString("-bd",bdisk,true); - if (bdisk != "") { - bdisk_number = atoi(bdisk.c_str()); - if (bdisk_number < 0 || bdisk_number >= MAX_DISK_IMAGES) return; - if (imageDiskList[bdisk_number] == NULL) { - WriteOut("BIOS disk index does not have an image assigned"); - return; - } - } - - //default fstype is fat - std::string fstype="fat"; - bool rfstype=cmd->FindString("-fs",fstype,true); - std::transform(fstype.begin(), fstype.end(), fstype.begin(), ::tolower); - - Bitu sizes[4] = { 0,0,0,0 }; - int reserved_cylinders=0; - std::string reservecyl; - - /* DOSBox-X: to please certain 32-bit drivers like Windows 3.1 WDCTRL, or to emulate older h/w configurations, - * we allow the user or script to specify the number of reserved cylinders. older BIOSes were known - * to subtract 1 or 2 additional cylinders from the total in the fixed disk param table. the -reservecyl - * option allows the number we subtract from the total in INT 13H to be set */ - cmd->FindString("-reservecyl",reservecyl,true); - if (reservecyl != "") reserved_cylinders = atoi(reservecyl.c_str()); - - /* DOSBox-X: we allow "-ide" to allow controlling which IDE controller and slot to attach the hard disk/CD-ROM to */ - cmd->FindString("-ide",ideattach,true); - std::transform(ideattach.begin(), ideattach.end(), ideattach.begin(), ::tolower); - - if(isdigit(tdr) && tdr - '0' >= 2) { //Allocate to respective slots if drive number is specified - ide_index = (tdr - '2') / 2; // Drive number 2 = 1m (index=0, slave=false), 3 = 1s (index=0, slave=true), ... - ide_slave = (tdr - '2') & 1 ? true : false; - } else if(ideattach == "auto") { - //LOG_MSG("IDE: attach=auto type=%s", type); - if(type != "floppy") { - if(type == "iso") { - if(!IDE_controller_occupied(1, false)) { // CD-ROMS default to secondary master if not occupied - ide_index = 1; - ide_slave = false; - } - } - if (ide_index < 0) IDE_Auto(ide_index, ide_slave); - } - } - else if (ideattach != "none" && isdigit(ideattach[0]) && ideattach[0] > '0') { /* takes the form [controller] such as: 1m for primary master */ - ide_index = ideattach[0] - '1'; - if (ideattach.length() >= 2) ide_slave = (ideattach[1] == 's'); - } - - //if floppy, don't attach to ide controller - //if cdrom, file system is iso - if (type=="floppy") { - ideattach="none"; - } else if (type=="iso") { - //str_size=="2048,1,60000,0"; // ignored, see drive_iso.cpp (AllocationInfo) - fstype = "iso"; - } - - //load the size parameter - //auto detect hard drives if not specified - std::string str_size; - std::string str_chs; - cmd->FindString("-size", str_size, true); - cmd->FindString("-chs", str_chs, true); - if (!ReadSizeParameter(str_size, str_chs, type, sizes)) return; - - if (!rfstype&&isdigit(temp_line[0])) fstype="none"; - - //for floppies, hard drives, and cdroms, require a drive letter - //for -fs none, require a number indicating where to mount at - if(fstype=="fat" || fstype=="iso") { - // get the drive letter - if (!cmd->FindCommand(1,temp_line) || (temp_line.size() > 2) || ((temp_line.size()>1) && (temp_line[1]!=':'))) { - WriteOut_NoParsing(MSG_Get("PROGRAM_IMGMOUNT_SPECIFY_DRIVE")); - return; - } - - /* if fs type if "fat" and we're asked to mount *: then check for that here */ - if (temp_line[0] == '*' && temp_line[1] == ':') { - /* What drives are available? */ - int i_drive = IS_PC98_ARCH ? 'A' : 'C'; - while (i_drive <= 'Z' && Drives[i_drive-'A'] != NULL && (i_drive-'A') < DOS_DRIVES) i_drive++; - - if (i_drive > 'Z') { - WriteOut_NoParsing("No drive letters available"); - return; - } - - drive = static_cast(i_drive); - } - else { - int i_drive = toupper(temp_line[0]); - if (!isalpha(i_drive) || (i_drive - 'A') >= DOS_DRIVES || (i_drive - 'A') < 0) { - WriteOut_NoParsing(MSG_Get("PROGRAM_IMGMOUNT_SPECIFY_DRIVE")); - return; - } - drive = static_cast(i_drive); - } - } else if (fstype=="none") { - cmd->FindCommand(1,temp_line); - if ((temp_line.size() > 1) || (!isdigit(temp_line[0]))) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_SPECIFY2"), MAX_DISK_IMAGES-1); - return; - } - drive=temp_line[0]; - if ((drive<'0') || (drive>=MAX_DISK_IMAGES+'0')) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_SPECIFY2"), MAX_DISK_IMAGES-1); - return; - } - int index = drive - '0'; - if (imageDiskList[index]) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED_NUMBER"),index); - return; - } - } else { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_FORMAT_UNSUPPORTED"),fstype.c_str()); - return; - } - - // find all file parameters, assuming that all option parameters have been removed - bool removed=ParseFiles(temp_line, paths, el_torito != "" || type == "ram" || bdisk != ""); - - // some generic checks - if (el_torito != "") { - if (paths.size() != 0) { - WriteOut("Do not specify files when mounting floppy drives from El Torito bootable CDs\n"); - return; - } - } - else if (bdisk != "") { - } - else if (type == "ram") { - if (paths.size() != 0) { - WriteOut("Do not specify files when mounting RAM drives\n"); - return; - } - } - else { - if (paths.size() == 0) { - if (strcasecmp(temp_line.c_str(), "-u")&&!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_SPECIFY_FILE")); - return; - } - if (!rtype&&!rfstype&&fstype!="none"&&paths[0].length()>4) { - const char *ext = strrchr(paths[0].c_str(), '.'); - if (ext != NULL) { - if (!strcasecmp(ext, ".cdrom")||!strcasecmp(ext, ".iso")||!strcasecmp(ext, ".cue")||!strcasecmp(ext, ".bin")||!strcasecmp(ext, ".chd")||!strcasecmp(ext, ".mdf")||!strcasecmp(ext, ".gog")||!strcasecmp(ext, ".ins")||!strcasecmp(ext, ".ccd")||!strcasecmp(ext, ".inst")) { - type="iso"; - fstype="iso"; - if(ide_index < 0 || ideattach == "auto") { - if(!IDE_controller_occupied(1, false)) { // check if secondary master is already occupied - ide_index = 1; - ide_slave = false; - } - else IDE_Auto(ide_index, ide_slave); - } - } else if (!strcasecmp(ext, ".ima")) { - type="floppy"; - ideattach="none"; - } - } - } - } - - int i_drive = drive - 'A'; - bool exist = i_drive < DOS_DRIVES && i_drive >= 0 && Drives[i_drive]; - //====== call the proper subroutine ====== - if(fstype=="fat") { - //mount floppy or hard drive - if (bdisk != "") { - if (!MountPartitionFat(drive, bdisk_number)) return; - } - else if (el_torito != "") { - if (!MountElToritoFat(drive, sizes, el_torito_cd_drive, el_torito_floppy_base, el_torito_floppy_type)) return; - } - else if (type == "ram") { - if (!MountRam(sizes, drive, ide_index, ide_slave, roflag)) return; - } - else { - //supports multiple files - if (!MountFat(sizes, drive, type == "hdd", str_size, paths, ide_index, ide_slave, reserved_cylinders, roflag)) return; - } - if (removed && !exist && i_drive < DOS_DRIVES && i_drive >= 0 && Drives[i_drive]) DOS_SetDefaultDrive(i_drive); - } else if (fstype=="iso") { - if (bdisk != "") { - // TODO - return; - } - if (el_torito != "") { - WriteOut("El Torito bootable CD: -fs iso mounting not supported\n"); /* <- NTS: Will never implement, either */ - return; - } - //supports multiple files - if (!MountIso(drive, paths, ide_index, ide_slave)) return; - if (removed && !exist && i_drive < DOS_DRIVES && i_drive >= 0 && Drives[i_drive]) DOS_SetDefaultDrive(i_drive); - } else if (fstype=="none") { - unsigned char driveIndex = drive - '0'; - - if (paths.size() > 1) { - if (driveIndex <= 1) { - if (swapInDisksSpecificDrive >= 0 && swapInDisksSpecificDrive <= 1 && - swapInDisksSpecificDrive != driveIndex) { - WriteOut("Multiple images given and another drive already uses multiple images\n"); - return; - } - } - else { - WriteOut("Multiple disk images not supported for that drive\n"); - return; - } - } - - if (el_torito != "") { - newImage = new imageDiskElToritoFloppy((unsigned char)el_torito_cd_drive, el_torito_floppy_base, el_torito_floppy_type); - } - else if (type == "ram") { - newImage = MountImageNoneRam(sizes, reserved_cylinders, driveIndex < 2); - } - else { - newImage = MountImageNone(paths[0].c_str(), NULL, sizes, reserved_cylinders, roflag); - } - if (newImage == NULL) return; - newImage->Addref(); - if (newImage->hardDrive && (driveIndex < 2)) { - WriteOut("Cannot mount hard drive in floppy position.\n"); - } - else if (!newImage->hardDrive && (driveIndex >= 2)) { - WriteOut("Cannot mount floppy in hard drive position.\n"); - } - else { - if (AttachToBiosAndIdeByIndex(newImage, (unsigned char)driveIndex, (unsigned char)ide_index, ide_slave)) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_MOUNT_NUMBER"), drive - '0', (!paths.empty()) ? (wpcolon&&paths[0].length()>1&&paths[0].c_str()[0]==':'?paths[0].c_str()+1:paths[0].c_str()) : (el_torito != ""?"El Torito floppy drive":(type == "ram"?"RAM drive":"-"))); - const char *ext = strrchr(paths[0].c_str(), '.'); - if (ext != NULL) { - if ((!IS_PC98_ARCH && strcasecmp(ext,".img") && strcasecmp(ext,".ima") && strcasecmp(ext,".vhd") && strcasecmp(ext,".qcow2")) || - (IS_PC98_ARCH && strcasecmp(ext,".hdi") && strcasecmp(ext,".nhd") && strcasecmp(ext,".img") && strcasecmp(ext,".ima"))){ - WriteOut(MSG_Get("PROGRAM_MOUNT_UNSUPPORTED_EXT"), ext); - } - } - if (swapInDisksSpecificDrive == driveIndex || swapInDisksSpecificDrive == -1) { - for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { - if (diskSwap[si] != NULL) { - diskSwap[si]->Release(); - diskSwap[si] = NULL; - } - } - swapInDisksSpecificDrive = -1; - if (paths.size() > 1) { - /* slot 0 is the image we already assigned */ - diskSwap[0] = newImage; - diskSwap[0]->Addref(); - swapPosition = 0; - swapInDisksSpecificDrive = driveIndex; - - for (size_t si=1;si < MAX_SWAPPABLE_DISKS && si < paths.size();si++) { - imageDisk *img = MountImageNone(paths[si].c_str(), NULL, sizes, reserved_cylinders, roflag); - - if (img != NULL) { - diskSwap[si] = img; - diskSwap[si]->Addref(); - } - } - } - } - } - else { - WriteOut("Invalid mount number\n"); - } - } - newImage->Release(); - return; - } - else { - WriteOut("Invalid fstype\n"); - return; - } - - return; - } - - private: - bool ReadSizeParameter(const std::string &str_size, const std::string &str_chs, const std::string &type, Bitu sizes[]) { - bool isCHS = false; - const char * scan; - if (str_chs.size() != 0) { - if (str_size.size() != 0) { - WriteOut("Size and chs parameter cannot both be specified\n"); - return false; - } - isCHS = true; - scan = str_chs.c_str(); - } - else if (str_size.size() != 0) { - scan = str_size.c_str(); - } - else { - //nothing specified, so automatic size detection - return true; - } - char number[20]; - Bitu index = 0; - Bitu count = 0; - int val; - - //scan through input string - while (*scan) { - //separate string by ',' - if (*scan == ',') { - number[index] = 0; //add null char - val = atoi(number); - if (val <= 0) { - //out of range - WriteOut("Invalid size parameter\n"); - return false; - } - sizes[count++] = (unsigned int)val; - index = 0; - if (count == 4) { - //too many commas - WriteOut("Invalid size parameter\n"); - return false; - } - } - else if (index >= 19) { - //number too large (too many characters, anyway) - WriteOut("Invalid size parameter\n"); - return false; - } - else { - number[index++] = *scan; - } - scan++; - } - number[index] = 0; - val = atoi(number); - if (val <= 0) { - //out of range - WriteOut("Invalid size parameter\n"); - return false; - } - sizes[count++] = (unsigned int)val; - if (isCHS) { - if (count == 3) sizes[count++] = 512; //set sector size automatically - if (count != 4) { - WriteOut("Invalid chs parameter\n"); - return false; - } - Bitu temp = sizes[3]; //hold on to sector size temporarily - sizes[3] = sizes[0]; //put cylinders in the right spot - sizes[0] = temp; //put sector size in the right spot - temp = sizes[2]; //hold on to sectors temporarily - sizes[2] = sizes[1]; //put heads in the right spot - sizes[1] = temp; //put sectors in the right spot - } - if (!((type == "ram" && count == 1) || count == 4)) { - //ram drives require 1 or 4 numbers - //other drives require 4 numbers - WriteOut("Invalid size parameter\n"); - return false; - } - return true; - } - bool ParseFiles(std::string &commandLine, std::vector &paths, bool nodef) { - char drive=commandLine[0]; - bool nocont=false; - int num = 0; - while (!nocont&&cmd->FindCommand((unsigned int)(paths.size() + 1 - num), commandLine)) { - bool usedef=false; - if (!cmd->FindCommand((unsigned int)(paths.size() + 2 - num), commandLine) || !commandLine.size()) { - if (!nodef && !paths.size()) { - commandLine="IMGMAKE.IMG"; - usedef=true; - } - else break; - } - if (commandLine == "empty") { - /* special name */ - paths.push_back(commandLine); - continue; - } - #if defined (WIN32) || defined(OS2) - // Windows: Workaround for LaunchBox - if (commandLine.size()>4 && commandLine[0]=='\'' && toupper(commandLine[1])>='A' && toupper(commandLine[1])<='Z' && commandLine[2]==':' && (commandLine[3]=='/' || commandLine[3]=='\\') && commandLine.back()=='\'') - commandLine = commandLine.substr(1, commandLine.size()-2); - else if (!paths.size() && commandLine.size()>3 && commandLine[0]=='\'' && toupper(commandLine[1])>='A' && toupper(commandLine[1])<='Z' && commandLine[2]==':' && (commandLine[3]=='/' || commandLine[3]=='\\')) { - std::string line=cmd->GetRawCmdline(); - trim(line); - std::size_t space=line.find(' '); - if (space!=std::string::npos) { - line=line.substr(space); - trim(line); - std::size_t found=line.back()=='\''?line.find_last_of('\''):line.rfind("' "); - if (found!=std::string::npos&&found>2) { - commandLine=line.substr(1, found-1); - nocont=true; - if (line.size()>3 && !strcasecmp(line.substr(line.size()-3).c_str(), " -u")) Unmount(drive); - } - } - } - #else - // Linux: Convert backslash to forward slash - if (commandLine.size() > 0) { - for (size_t i = 0; i < commandLine.size(); i++) { - if (commandLine[i] == '\\') - commandLine[i] = '/'; - } - } - #endif - - if (!strcasecmp(commandLine.c_str(), "-u")) { - bool exist = toupper(drive) - 'A' == DOS_GetDefaultDrive(); - Unmount(drive); - return exist && drive - 'A' != DOS_GetDefaultDrive(); - } - - char fullname[CROSS_LEN]; - char tmp[CROSS_LEN]; - bool useh = false, readonly = wpcolon&&commandLine.length()>1&&commandLine[0]==':'; - safe_strncpy(tmp, readonly?commandLine.c_str()+1:commandLine.c_str(), CROSS_LEN); - pref_struct_stat test; - #if defined(WIN32) - ht_stat_t htest; - const host_cnv_char_t* host_name = CodePageGuestToHost(tmp); - if (pref_stat(tmp, &test) && (host_name == NULL || ht_stat(host_name, &htest))) { - if (pref_stat(tmp, &test) && host_name != NULL) useh = true; - #else - pref_struct_stat htest; - if (pref_stat(tmp, &test)) { - #endif - //See if it works if the ~ are written out - std::string homedir(commandLine); - Cross::ResolveHomedir(homedir); - if (!pref_stat(homedir.c_str(), &test)) { - commandLine = homedir; - } - else { - // convert dosbox-x filename to system filename - uint8_t dummy; - temp_line = tmp; - int res = get_expanded_files(temp_line, paths, readonly); - if (res) { - num += res - 1; - temp_line = paths[0]; - continue; - } else if ((!DOS_MakeName(tmp, fullname, &dummy) || strncmp(Drives[dummy]->GetInfo(), "local directory", 15)) && !qmount) { - if (_memFileDirectory.contains(tmp) || std::string(tmp).find(".cdrom") != std::string::npos) { paths.push_back(tmp); continue; } - else WriteOut(MSG_Get(usedef?"PROGRAM_IMGMOUNT_DEFAULT_NOT_FOUND":"PROGRAM_IMGMOUNT_NON_LOCAL_DRIVE")); - return true; - } - - localDrive *ldp = dynamic_cast(Drives[dummy]); - if (ldp == NULL) { - if (!qmount) WriteOut(MSG_Get(usedef?"PROGRAM_IMGMOUNT_DEFAULT_NOT_FOUND":"PROGRAM_IMGMOUNT_FILE_NOT_FOUND")); - return false; - } - ldp->GetSystemFilename(readonly?tmp+1:tmp, fullname); - if (readonly) tmp[0]=':'; - commandLine = tmp; - - if (pref_stat(readonly?tmp+1:tmp, &test)) { - temp_line = readonly?tmp+1:tmp; - int res = get_expanded_files(temp_line, paths, readonly); - if (res) { - num += res - 1; - temp_line = paths[0]; - continue; - } else if (!qmount) - WriteOut(MSG_Get(usedef?"PROGRAM_IMGMOUNT_DEFAULT_NOT_FOUND":"PROGRAM_IMGMOUNT_FILE_NOT_FOUND")); - return false; - } - } - } - if (S_ISDIR(useh?htest.st_mode:test.st_mode)&&!usedef) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_MOUNT")); - return false; - } - paths.push_back(commandLine); - } - if (paths.size() > 0) return true; - return false; - } - - bool Unmount(char &letter) { - letter = toupper(letter); - if (isalpha(letter)) { /* if it's a drive letter, then traditional usage applies */ - int i_drive = letter - 'A'; - if (i_drive < DOS_DRIVES && i_drive >= 0 && Drives[i_drive]) { - //if drive A: or B: - if (i_drive <= 1) - FDC_UnassignINT13Disk(i_drive); - - //get reference to image and cdrom before they are possibly destroyed - const bool partitionMount = Drives[i_drive]->partitionMount; - const fatDrive* drive = dynamic_cast(Drives[i_drive]); - imageDisk* image = drive ? drive->loadedDisk : NULL; - const isoDrive* cdrom = dynamic_cast(Drives[i_drive]); - - switch (DriveManager::UnmountDrive(i_drive)) { - case 0: //success - { - //detach hard drive or floppy drive from bios and ide controller - if (image && !partitionMount) DetachFromBios(image); - /* If the drive letter is also a CD-ROM drive attached to IDE, then let the IDE code know */ - if (cdrom) IDE_CDROM_Detach(i_drive); - Drives[i_drive] = NULL; - DOS_EnableDriveMenu(i_drive+'A'); - if (i_drive == DOS_GetDefaultDrive()) - DOS_SetDrive(toupper('Z') - 'A'); - if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_UMOUNT_SUCCESS"), letter); - if (cdrom) - for (int drv=0; drv<2; drv++) - if (Drives[drv]) { - fatDrive *fdp = dynamic_cast(Drives[drv]); - if (fdp&&fdp->opts.mounttype==1&&letter==fdp->el.CDROM_drive) { - char drive='A'+drv; - Unmount(drive); - } - } - if (i_drive < MAX_DISK_IMAGES && imageDiskList[i_drive]) { - delete imageDiskList[i_drive]; - imageDiskList[i_drive] = NULL; - } - if (swapInDisksSpecificDrive == i_drive) { - for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { - if (diskSwap[si] != NULL) { - diskSwap[si]->Release(); - diskSwap[si] = NULL; - } - } - swapInDisksSpecificDrive = -1; - } - return true; - } - case 1: - if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_UMOUNT_NO_VIRTUAL")); - return false; - case 2: - if (!qmount) WriteOut(MSG_Get("MSCDEX_ERROR_MULTIPLE_CDROMS")); - return false; - default: - return false; - } - } - else { - if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED"), letter); - return false; - } - } - else if (isdigit(letter)) { /* DOSBox-X: drives mounted by number (INT 13h) can be unmounted this way */ - int index = letter - '0'; - - //detach hard drive or floppy drive from bios and ide controller - if (index < MAX_DISK_IMAGES && imageDiskList[index]) { - if (index > 1) IDE_Hard_Disk_Detach(index); - imageDiskList[index]->Release(); - imageDiskList[index] = NULL; - imageDiskChange[index] = true; - if (swapInDisksSpecificDrive == index) { - for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { - if (diskSwap[si] != NULL) { - diskSwap[si]->Release(); - diskSwap[si] = NULL; - } - } - swapInDisksSpecificDrive = -1; - } - WriteOut(MSG_Get("PROGRAM_MOUNT_UMOUNT_NUMBER_SUCCESS"), letter); - return true; - } - WriteOut("Drive number %d is not mounted.\n", index); - return false; - } - else { - WriteOut("Incorrect IMGMOUNT unmount usage.\n"); - return false; - } - } - - bool PrepElTorito(const std::string& type, const char &el_torito_cd_drive, unsigned long &el_torito_floppy_base, unsigned char &el_torito_floppy_type) { - el_torito_floppy_base = ~0UL; - el_torito_floppy_type = 0xFF; - - unsigned char entries[2048], *entry, ent_num = 0; - int header_platform = -1, header_count = 0; - bool header_final = false; - int header_more = -1; - - /* must be valid drive letter, C to Z */ - if (!isalpha(el_torito_cd_drive) || el_torito_cd_drive < 'C') { - WriteOut("El Torito emulation requires a proper CD-ROM drive letter\n"); - return false; - } - - /* drive must not exist (as a hard drive) */ - if (imageDiskList[el_torito_cd_drive - 'A'] != NULL) { - WriteOut("El Torito CD-ROM drive specified already exists as a non-CD-ROM device\n"); - return false; - } - - bool GetMSCDEXDrive(unsigned char drive_letter, CDROM_Interface **_cdrom); - - /* get the CD-ROM drive */ - CDROM_Interface *src_drive = NULL; - if (!GetMSCDEXDrive(el_torito_cd_drive - 'A', &src_drive)) { - WriteOut("El Torito CD-ROM drive specified is not actually a CD-ROM drive\n"); - return false; - } - - /* FIXME: We only support the floppy emulation mode at this time. - * "Superfloppy" or hard disk emulation modes are not yet implemented. - * This mode will never support "no emulation" boot. */ - if (type != "floppy") { - WriteOut("El Torito emulation must be used with -t floppy at this time\n"); - return false; - } - - /* Okay. Step #1: Scan the volume descriptors for the Boot Record. */ - unsigned long el_torito_base = 0, boot_record_sector = 0; - if (!ElTorito_ScanForBootRecord(src_drive, boot_record_sector, el_torito_base)) { - WriteOut("El Torito CD-ROM boot record not found\n"); - return false; - } - - LOG_MSG("El Torito emulation: Found ISO 9660 Boot Record in sector %lu, pointing to sector %lu\n", - boot_record_sector, el_torito_base); - - /* Step #2: Parse the records. Each one is 32 bytes long */ - if (!src_drive->ReadSectorsHost(entries, false, el_torito_base, 1)) { - WriteOut("El Torito entries unreadable\n"); - return false; - } - - /* for more information about what this loop is doing, read: - * http://download.intel.com/support/motherboards/desktop/sb/specscdrom.pdf - */ - /* FIXME: Somebody find me an example of a CD-ROM with bootable code for both x86, PowerPC, and Macintosh. - * I need an example of such a CD since El Torito allows multiple "headers" */ - /* TODO: Is it possible for this record list to span multiple sectors? */ - for (ent_num = 0; ent_num < (2048 / 0x20); ent_num++) { - entry = entries + (ent_num * 0x20); - - if (memcmp(entry, "\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0", 32) == 0) - break; - - if (entry[0] == 0x01/*header*/) { - if (!ElTorito_ChecksumRecord(entry)) { - LOG_MSG("Warning: El Torito checksum error in header(0x01) entry\n"); - continue; - } - - if (header_count != 0) { - LOG_MSG("Warning: El Torito has more than one Header/validation entry\n"); - continue; - } - - if (header_final) { - LOG_MSG("Warning: El Torito has an additional header past the final header\n"); - continue; - } - - header_more = -1; - header_platform = entry[1]; - LOG_MSG("El Torito entry: first header platform=0x%02x\n", header_platform); - header_count++; - } - else if (entry[0] == 0x90/*header, more follows*/ || entry[0] == 0x91/*final header*/) { - if (header_final) { - LOG_MSG("Warning: El Torito has an additional header past the final header\n"); - continue; - } - - header_final = (entry[0] == 0x91); - header_more = (int)(((unsigned int)entry[2]) + (((unsigned int)entry[3]) << 8u)); - header_platform = entry[1]; - LOG_MSG("El Torito entry: first header platform=0x%02x more=%u final=%u\n", header_platform, header_more, header_final); - header_count++; - } - else { - if (header_more == 0) { - LOG_MSG("El Torito entry: Non-header entry count expired, ignoring record 0x%02x\n", entry[0]); - continue; - } - else if (header_more > 0) { - header_more--; - } - - if (entry[0] == 0x44) { - LOG_MSG("El Torito entry: ignoring extension record\n"); - } - else if (entry[0] == 0x00/*non-bootable*/) { - LOG_MSG("El Torito entry: ignoring non-bootable record\n"); - } - else if (entry[0] == 0x88/*bootable*/) { - if (header_platform == 0x00/*x86*/) { - unsigned char mediatype = entry[1] & 0xF; - unsigned short load_segment = ((unsigned int)entry[2]) + (((unsigned int)entry[3]) << 8); - unsigned char system_type = entry[4]; - unsigned short sector_count = ((unsigned int)entry[6]) + (((unsigned int)entry[7]) << 8); - unsigned long load_rba = ((unsigned int)entry[8]) + (((unsigned int)entry[9]) << 8) + - (((unsigned int)entry[10]) << 16) + (((unsigned int)entry[11]) << 24); - - LOG_MSG("El Torito entry: bootable x86 record mediatype=%u load_segment=0x%04x " - "system_type=0x%02x sector_count=%u load_rba=%lu\n", - mediatype, load_segment, system_type, sector_count, load_rba); - - /* already chose one, ignore */ - if (el_torito_floppy_base != ~0UL) - continue; - - if (load_segment != 0 && load_segment != 0x7C0) - LOG_MSG("El Torito boot warning: load segments other than 0x7C0 not supported yet\n"); - if (sector_count != 1) - LOG_MSG("El Torito boot warning: sector counts other than 1 are not supported yet\n"); - - if (mediatype < 1 || mediatype > 3) { - LOG_MSG("El Torito boot entry: media types other than floppy emulation not supported yet\n"); - continue; - } - - el_torito_floppy_base = load_rba; - el_torito_floppy_type = mediatype; - } - else { - LOG_MSG("El Torito entry: ignoring bootable non-x86 (platform_id=0x%02x) record\n", header_platform); - } - } - else { - LOG_MSG("El Torito entry: ignoring unknown record ID %02x\n", entry[0]); - } - } - } - - if (el_torito_floppy_type == 0xFF || el_torito_floppy_base == ~0UL) { - WriteOut("El Torito bootable floppy not found\n"); - return false; - } - - return true; - } - - bool MountPartitionFat(const char drive, const int src_bios_disk) { - unsigned char driveIndex = drive - 'A'; - - /* NTS: IBM PC systems: Hard disk partitions must start at C: or higher. - * PC-98 systems: Any drive letter is valid, A: can be a hard drive. */ - if ((!IS_PC98_ARCH && driveIndex < 2) || driveIndex >= 26) { - WriteOut("Invalid drive letter"); - return false; - } - - if (Drives[driveIndex]) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); - return false; - } - - if (src_bios_disk < 2/*no, don't allow partitions on floppies!*/ || src_bios_disk >= MAX_DISK_IMAGES || imageDiskList[src_bios_disk] == NULL) { - WriteOut("BIOS disk index does not have an image assigned"); - return false; - } - - /* FIXME: IMGMOUNT and MOUNT -u are so hard-coded around C: and BIOS device indexes that some confusion may happen - * if a partition is C: mounted from, say, BIOS device 0x81 and the wrong thing may get unmounted and detached. - * So for sanity reasons, do not allow mounting to a drive letter if a BIOS disk image WOULD normally be - * associated with it. This is a mess inherited from back when this code forked from DOSBox SVN, because - * DOSBox SVN makes these hardcoded assumptions. */ - if (driveIndex < MAX_DISK_IMAGES && imageDiskList[driveIndex] != NULL) { - WriteOut("Partitions cannot be mounted in conflict with the standard INT 13h hard disk\nallotment. Choose a different drive letter to mount to."); - return false; - } - - DOS_Drive* newDrive = new fatDrive(imageDiskList[src_bios_disk], options); - if (!(dynamic_cast(newDrive))->created_successfully) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE")); - return false; - } - - newDrive->partitionMount = true; - AddToDriveManager(drive, newDrive, 0xF0); - DOS_EnableDriveMenu(drive); - - lastmount = drive; - return true; - } - - bool MountElToritoFat(const char drive, const Bitu sizes[], const char el_torito_cd_drive, const unsigned long el_torito_floppy_base, const unsigned char el_torito_floppy_type) { - unsigned char driveIndex = drive - 'A'; - - (void)sizes;//UNUSED - - if (driveIndex > 1) { - WriteOut("Invalid drive letter"); - return false; - } - - if (Drives[driveIndex]) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); - return false; - } - - imageDisk * newImage = new imageDiskElToritoFloppy((unsigned char)el_torito_cd_drive, el_torito_floppy_base, el_torito_floppy_type); - newImage->Addref(); - - DOS_Drive* newDrive = new fatDrive(newImage, options); - newImage->Release(); //fatDrive calls Addref, and this will release newImage if fatDrive doesn't use it - if (!(dynamic_cast(newDrive))->created_successfully) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE")); - return false; - } - - AddToDriveManager(drive, newDrive, 0xF0); - AttachToBiosByLetter(newImage, drive); - DOS_EnableDriveMenu(drive); - - lastmount = drive; - if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_ELTORITO"), drive); - - return true; - } - - bool unformatted = false; - bool unsupported_ext = false; - int path_no; - bool MountFat(Bitu sizes[], const char drive, const bool isHardDrive, const std::string &str_size, const std::vector &paths, const signed char ide_index, const bool ide_slave, const int reserved_cylinders, bool roflag) { - // printf("Trying path: %s\n", paths[i].c_str()); - (void)reserved_cylinders; - if (Drives[drive - 'A']) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); - return false; - } - - for (auto i=options.begin();i!=options.end();i++) { - if ((*i) == "int13") { - char buf[32]; - - if (drive >= 'C') - sprintf(buf,"=%u",drive+0x80-'C'); - else - sprintf(buf,"=%u",drive-'A'); - - (*i) += buf; - } - } - - bool imgsizedetect = isHardDrive && sizes[0] == 0; - int mediaid = -1; - - std::vector imgDisks; - std::vector::size_type i; - std::vector::size_type ct; - - for (i = 0; i < paths.size(); i++) { - const char* errorMessage = NULL; - imageDisk* vhdImage = NULL; - imageDisk* newImage = NULL; - bool ro=false; - - //detect hard drive geometry - if (paths[i] == "empty") { - errorMessage = "empty file not supported for drive letter mount\n"; - } - else if (imgsizedetect) { - bool skipDetectGeometry = false; - sizes[0] = 0; - sizes[1] = 0; - sizes[2] = 0; - sizes[3] = 0; - - /* .HDI images contain the geometry explicitly in the header. */ - if (str_size.size() == 0) { - const char *ext = strrchr(paths[i].c_str(), '.'); - if (ext != NULL) { - if (!strcasecmp(ext, ".hdi")) { - skipDetectGeometry = true; - } - else if (!strcasecmp(ext, ".nhd")) { - skipDetectGeometry = true; - } - else if (!strcasecmp(ext, ".nfd")) { - skipDetectGeometry = true; - } - //for all vhd files where the system will autodetect the chs values, - else if (!strcasecmp(ext, ".vhd")) { - ro=wpcolon&&paths[i].length()>1&&paths[i].c_str()[0]==':'; - //load the file with imageDiskVHD, which supports fixed/dynamic/differential disks - imageDiskVHD::ErrorCodes ret = imageDiskVHD::Open(ro?paths[i].c_str()+1:paths[i].c_str(), ro||roflag, &vhdImage); - switch (ret) { - case imageDiskVHD::UNSUPPORTED_WRITE: - options.emplace_back("readonly"); - case imageDiskVHD::OPEN_SUCCESS: { - skipDetectGeometry = true; - const imageDiskVHD* vhdDisk = dynamic_cast(vhdImage); - if (vhdDisk != NULL) { - LOG_MSG("VHD image detected SS,S,H,C: %u,%u,%u,%u", - (uint32_t)vhdDisk->sector_size, (uint32_t)vhdDisk->sectors, (uint32_t)vhdDisk->heads, (uint32_t)vhdDisk->cylinders); - if (vhdDisk->cylinders>1023) LOG_MSG("WARNING: cylinders>1023, INT13 will not work unless extensions are used"); - if(vhdDisk->GetVHDType() == imageDiskVHD::VHD_TYPE_FIXED) LOG_MSG("VHD is a fixed image"); - if(vhdDisk->GetVHDType() == imageDiskVHD::VHD_TYPE_DYNAMIC) LOG_MSG("VHD is a dynamic image"); - if(vhdDisk->GetVHDType() == imageDiskVHD::VHD_TYPE_DIFFERENCING) LOG_MSG("VHD is a differencing image"); - } - break; - } - case imageDiskVHD::ERROR_OPENING: - errorMessage = MSG_Get("VHD_ERROR_OPENING"); break; - case imageDiskVHD::INVALID_DATA: - errorMessage = MSG_Get("VHD_INVALID_DATA"); break; - case imageDiskVHD::UNSUPPORTED_TYPE: - errorMessage = MSG_Get("VHD_UNSUPPORTED_TYPE"); break; - case imageDiskVHD::ERROR_OPENING_PARENT: - errorMessage = MSG_Get("VHD_ERROR_OPENING_PARENT"); break; - case imageDiskVHD::PARENT_INVALID_DATA: - errorMessage = MSG_Get("VHD_PARENT_INVALID_DATA"); break; - case imageDiskVHD::PARENT_UNSUPPORTED_TYPE: - errorMessage = MSG_Get("VHD_PARENT_UNSUPPORTED_TYPE"); break; - case imageDiskVHD::PARENT_INVALID_MATCH: - errorMessage = MSG_Get("VHD_PARENT_INVALID_MATCH"); break; - case imageDiskVHD::PARENT_INVALID_DATE: - errorMessage = MSG_Get("VHD_PARENT_INVALID_DATE"); break; - default: break; - } - } - else if(!strcasecmp(ext, ".qcow2")) { - ro = wpcolon && paths[i].length() > 1 && paths[i].c_str()[0] == ':'; - const char* fname = ro ? paths[i].c_str() + 1 : paths[i].c_str(); - FILE* newDisk = fopen_lock(fname, ro ? "rb" : "rb+", ro); - if(!newDisk) { - if(!qmount) WriteOut("Unable to open '%s'\n", fname); - return false; - } - QCow2Image::QCow2Header qcow2_header = QCow2Image::read_header(newDisk); - // uint64_t sectors; /* unused */ - uint32_t imagesize; - sizes[0] = 512; // default sector size - if(qcow2_header.magic == QCow2Image::magic && (qcow2_header.version == 2 || qcow2_header.version == 3)) { - uint32_t cluster_size = 1u << qcow2_header.cluster_bits; - if((sizes[0] < 512) || ((cluster_size % sizes[0]) != 0)) { - WriteOut("Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes.\n", cluster_size); - return false; - } - // sectors = (uint64_t)qcow2_header.size / (uint64_t)sizes[0]; /* unused */ - imagesize = (uint32_t)(qcow2_header.size / 1024L); - sizes[1] = 63; // sectors - sizes[2] = 16; // heads - sizes[3] = (uint64_t)qcow2_header.size / sizes[0] / sizes[1] / sizes[2]; // cylinders - // setbuf(newDisk, NULL); - newImage = new QCow2Disk(qcow2_header, newDisk, fname, imagesize, (uint32_t)sizes[0], (imagesize > 2880)); - skipDetectGeometry = true; - newImage->sector_size = sizes[0]; // sector size - newImage->sectors = sizes[1]; // sectors - newImage->heads = sizes[2]; // heads - newImage->cylinders = sizes[3]; // cylinders - } - else { - WriteOut("qcow2 image '%s' is not supported\n", fname); - fclose(newDisk); - newImage = NULL; - } - } - else if (!strcasecmp(ext,".img") || !strcasecmp(ext,".ima")){ // Raw MFM image format is typically .img or .ima - unsupported_ext = false; - } - else { - LOG_MSG("IMGMOUNT: Perhaps unsupported extension %s", ext); - unsupported_ext = true; - path_no = i; - } - } - } - if (!skipDetectGeometry && !DetectGeometry(NULL, paths[i].c_str(), sizes)) { - errorMessage = "Unable to detect geometry\n"; - } - } - - if (!errorMessage) { - DOS_Drive* newDrive = NULL; - if (vhdImage) { - newDrive = new fatDrive(vhdImage, options); - strcpy(newDrive->info, "fatDrive "); - strcat(newDrive->info, ro?paths[i].c_str()+1:paths[i].c_str()); - vhdImage = NULL; - } - else if(newImage) { - newDrive = new fatDrive(newImage, options); - strcpy(newDrive->info, "fatDrive "); - strcat(newDrive->info, ro ? paths[i].c_str() + 1 : paths[i].c_str()); - LOG_MSG("IMGMOUNT: qcow2 image mounted (experimental)"); - LOG_MSG("IMGMOUNT: qcow2 SS,S,H,C: %u,%u,%u,%u", - (uint32_t)newImage->sector_size, (uint32_t)newImage->sectors, (uint32_t)newImage->heads, (uint32_t)newImage->cylinders); - newImage = NULL; - } - else { - if (roflag) options.emplace_back("readonly"); - newDrive = new fatDrive(paths[i].c_str(), (uint32_t)sizes[0], (uint32_t)sizes[1], (uint32_t)sizes[2], (uint32_t)sizes[3], options); - } - imgDisks.push_back(newDrive); - fatDrive* fdrive=dynamic_cast(newDrive); - if (!fdrive->created_successfully) { - errorMessage = MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE"); - if (fdrive->req_ver_major>0) { - static char ver_msg[150]; - sprintf(ver_msg, "Mounting this image file requires a reported DOS version of %u.%u or higher.\n%s", fdrive->req_ver_major, fdrive->req_ver_minor, errorMessage); - errorMessage = ver_msg; - } - } else { - if (imgDisks.size() == 1) mediaid = (int)((unsigned char)fdrive->GetMediaByte()); - if ((vhdImage&&ro)||roflag) fdrive->readonly=true; - } - unformatted = fdrive->unformatted; - } - if (errorMessage) { - if (!qmount) WriteOut(errorMessage); - for (ct = 0; ct < imgDisks.size(); ct++) { - delete imgDisks[ct]; - } - return false; - } - } - - AddToDriveManager(drive, imgDisks, (mediaid >= 0xF0) ? mediaid : (isHardDrive ? 0xF8 : 0xF0)); - DOS_EnableDriveMenu(drive); - - std::string tmp(wpcolon&&paths[0].length()>1&&paths[0].c_str()[0]==':'?paths[0].substr(1):paths[0]); - for (i = 1; i < paths.size(); i++) { - tmp += "; " + (wpcolon&&paths[i].length()>1&&paths[i].c_str()[0]==':'?paths[i].substr(1):paths[i]); - } - lastmount = drive; - if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_2"), drive, tmp.c_str()); - if (unformatted) { - if(!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_NOT_FORMATTED")); - LOG_MSG("IMGMOUNT: Drive %c not formatted", drive); - } - if (unsupported_ext) { - const char *ext = strrchr(paths[path_no].c_str(), '.'); - if (ext != NULL) { - if(!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_UNSUPPORTED_EXT"), ext); - LOG_MSG("Unsupported extension %s: Mounted as raw IMG image.", ext); - } - } - unsigned char driveIndex = drive-'A'; - if (imgDisks.size() == 1 || (imgDisks.size() > 1 && driveIndex < 2 && (swapInDisksSpecificDrive == driveIndex || swapInDisksSpecificDrive == -1))) { - imageDisk* image = ((fatDrive*)imgDisks[0])->loadedDisk; - if (AttachToBiosAndIdeByLetter(image, drive, (unsigned char)ide_index, ide_slave)) { - if (swapInDisksSpecificDrive == driveIndex || swapInDisksSpecificDrive == -1) { - for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { - if (diskSwap[si] != NULL) { - diskSwap[si]->Release(); - diskSwap[si] = NULL; - } - } - swapInDisksSpecificDrive = -1; - if (paths.size() > 1) { - /* slot 0 is the image we already assigned */ - diskSwap[0] = image; - diskSwap[0]->Addref(); - swapPosition = 0; - swapInDisksSpecificDrive = driveIndex; - - for (size_t si=1;si < MAX_SWAPPABLE_DISKS && si < paths.size();si++) { - imageDisk *img = ((fatDrive*)imgDisks[si])->loadedDisk; - diskSwap[si] = img; - diskSwap[si]->Addref(); - } +#if !defined(WIN32) && !defined(OS2) + if (setdir&&temp_line[0]!='/'&&!(temp_line[0]=='~'&&temp_line[1]=='/')) + std::replace(temp_line.begin(), temp_line.end(), '\\', '/'); + pref_struct_stat test; + std::string homedir(temp_line); + Cross::ResolveHomedir(homedir); + std::string homepath=homedir; + if (!pref_stat(dirname((char *)homepath.c_str()), &test) && test.st_mode & S_IFDIR) + temp_line = homedir; +#endif + FILE* f; + imageDiskVHD* vhd; + f = fopen(temp_line.c_str(), "r"); + if(f) { + fclose(f); + if(!ForceOverwrite) { + if(!dos_kernel_disabled) WriteOut(MSG_Get("PROGRAM_IMGMAKE_FILE_EXISTS"), temp_line.c_str()); + if(setdir) chdir(dirCur); + return; + } + } + char extension[6] = {}; // care extensions longer than 3 letters such as '.vhdd' + if(temp_line.find_last_of('.') != std::string::npos) { + for(unsigned int i = 0; i < sizeof(extension) - 1; i++) { + if(temp_line.find_last_of('.') + i > temp_line.length() - 1) break; + extension[i] = temp_line[temp_line.find_last_of('.') + i]; + } + extension[sizeof(extension) - 1] = '\0'; // Terminate string just in case + } + if (!dos_kernel_disabled) WriteOut(MSG_Get("PROGRAM_IMGMAKE_PRINT_CHS"),temp_line.c_str(),c,h,s); + LOG_MSG(MSG_Get("PROGRAM_IMGMAKE_PRINT_CHS"),temp_line.c_str(),c,h,s); + + // do it again for fixed chs values + sectors = size / 512; + + // create the image file + if(disktype == "vhd") { + uint32_t ret = imageDiskVHD::CreateDynamic(temp_line.c_str(), size); + switch(ret) { + case imageDiskVHD::ERROR_OPENING: + WriteOut(MSG_Get("PROGRAM_VHDMAKE_ERROPEN"), temp_line.c_str()); + return; + case imageDiskVHD::ERROR_WRITING: + WriteOut(MSG_Get("PROGRAM_VHDMAKE_WRITERR"), temp_line.c_str()); + return; + } + if(imageDiskVHD::Open(temp_line.c_str(), false, (imageDisk**)&vhd) != imageDiskVHD::OPEN_SUCCESS) { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_ERROPEN"), temp_line.c_str()); + return; + } + } + else { + f = fopen64(temp_line.c_str(), "wb+"); + if(!f) { + if(!dos_kernel_disabled) WriteOut(MSG_Get("PROGRAM_IMGMAKE_CANNOT_WRITE"), temp_line.c_str()); + if(setdir) chdir(dirCur); + return; + } + +#if (defined (_MSC_VER) && (_MSC_VER >= 1400)) || defined(__MINGW32__) + if(fseeko64(f, (__int64)(size - 1ull), SEEK_SET)) { +#else + if(fseeko64(f, static_cast(size - 1ull), SEEK_SET)) { +#endif + if(!dos_kernel_disabled) WriteOut(MSG_Get("PROGRAM_IMGMAKE_NOT_ENOUGH_SPACE"), size); + fclose(f); + unlink(temp_line.c_str()); + if(setdir) chdir(dirCur); + return; + } + uint8_t bufferbyte = 0; + if(fwrite(&bufferbyte, 1, 1, f) != 1) { + if(!dos_kernel_disabled) WriteOut(MSG_Get("PROGRAM_IMGMAKE_NOT_ENOUGH_SPACE"), size); + fclose(f); + unlink(temp_line.c_str()); + if(setdir) chdir(dirCur); + return; + } + } + // Format the image if not unrequested (and image size<2GB) + if(bootsect_pos > -1) { + uint32_t reserved_sectors = 1; /* 1 for the boot sector + BPB. FAT32 will require more */ + uint64_t vol_sectors = 0; + uint8_t fat_copies = 2; /* number of copies of the FAT */ + uint32_t partsector = 0; + uint32_t fatlimitmin; + uint32_t fatlimit; + int8_t FAT = -1; + bool spc_changed = false; + bool rootent_changed = false; + + /* Partition sector override */ + if (cmd->FindString("-partofs",tmp,true)) { + partsector = atoi(tmp.c_str()); + if (partsector == 0) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_PARTOFS")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + } + + /* FAT filesystem, user choice */ + if (cmd->FindString("-fat",tmp,true)) { + FAT = atoi(tmp.c_str()); + if (!(FAT == 12 || FAT == 16 || FAT == 32)) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_FAT")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + } + + /* FAT copies, user choice */ + if (cmd->FindString("-fatcopies",tmp,true)) { + fat_copies = atoi(tmp.c_str()); + if (fat_copies < 1u || fat_copies > 4u) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_FATCOPIES")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + } + + /* Sectors per cluster, user choice */ + if (cmd->FindString("-spc",tmp,true)) { + sectors_per_cluster = atoi(tmp.c_str()); + if (sectors_per_cluster < 1u || sectors_per_cluster > 128u) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_SPC")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + if ((sectors_per_cluster & (sectors_per_cluster - 1u)) != 0u) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_SPC2")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + spc_changed = true; + } + + /* Root directory count, user choice. + * Does not apply to FAT32, which makes the root directory an allocation chain like any other directory/file. */ + if (cmd->FindString("-rootdir",tmp,true)) { + root_ent = atoi(tmp.c_str()); + if (root_ent < 1u || root_ent > 4096u) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_ROOTDIR")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + rootent_changed = true; + } + + /* decide partition placement */ + if (mediadesc == 0xF8) { + if (partsector > (uint32_t)0) + bootsect_pos = (int64_t)partsector; + else + bootsect_pos = (int64_t)s; + } + else { + bootsect_pos = 0; + } + + if (alignment != 0u) { + bootsect_pos += alignment - 1u; + bootsect_pos -= bootsect_pos % (int64_t)alignment; + } + + if (sectors <= (uint64_t)bootsect_pos) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_BOOTSECT")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + vol_sectors = sectors - (uint64_t)bootsect_pos; + + if (alignment != 0u) { + if ((vol_sectors % alignment) != 0u) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_VOLUME_ALIGN")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + } + + /* auto-decide FAT system */ + if (is_fd) FAT = 12; + else if (FAT < 0) { + bool dosver_fat32 = (dos.version.major >= 8) || (dos.version.major == 7 && dos.version.minor >= 10); + + if (vol_sectors >= 2*1024*1024*1024ull/512ull && !dosver_fat32) /* 2GB or larger */ + FAT = 32; + else if (vol_sectors >= 512*1024*1024ull/512ull && dosver_fat32) /* 512MB or larger */ + FAT = 32; + else if (vol_sectors >= 12*1024*1024ull/512ull) /* 12MB or larger */ + FAT = 16; + else + FAT = 12; + } + + /* highest cluster number + 1 */ + switch (FAT) { + case 32: + fatlimit = 0x0FFFFFF6u; + fatlimitmin = 0xFFF6u; + break; + case 16: + fatlimit = 0xFFF6u; + fatlimitmin = 0xFF6u; + break; + case 12: + fatlimit = 0xFF6u; + fatlimitmin = 0u; + break; + default: + abort(); + } + + /* FAT32 increases reserved area to at least 7. Microsoft likes to use 32 */ + if (FAT >= 32) + reserved_sectors = 32; + + if (alignment != 0u) { + reserved_sectors += alignment - 1u; + reserved_sectors -= reserved_sectors % alignment; + } + + uint8_t sbuf[512]; + if(mediadesc == 0xF8) { + // is a harddisk: write MBR + memcpy(sbuf,freedos_mbr,512); + // active partition + sbuf[0x1be]=0x80; + // start head - head 0 has the partition table, head 1 first partition + // start sector with bits 8-9 of start cylinder in bits 6-7 + // start cylinder bits 0-7 + lba2chs3(sbuf+0x1bf,bootsect_pos,c,h,s); + // OS indicator + if (FAT < 32 && (bootsect_pos+vol_sectors) < 65536) { /* 32MB or smaller */ + if (FAT >= 16) + sbuf[0x1c2]=0x04; /* FAT16 within the first 32MB */ + else + sbuf[0x1c2]=0x01; /* FAT12 within the first 32MB */ + } + else if (!lbamode) { /* 4GB or smaller */ + if (FAT >= 32) + sbuf[0x1c2]=0x0B; /* FAT32 C/H/S */ + else + sbuf[0x1c2]=0x06; /* FAT12/FAT16 C/H/S */ + } + else { + if (FAT >= 32) + sbuf[0x1c2]=0x0C; /* FAT32 LBA */ + else + sbuf[0x1c2]=0x0E; /* FAT12/FAT16 LBA */ + } + // end head (0-based) + // end sector with bits 8-9 of end cylinder (0-based) in bits 6-7 + // end cylinder (0-based) bits 0-7 + lba2chs3(sbuf+0x1c3,bootsect_pos+vol_sectors-1ul,c,h,s); + // sectors preceding partition1 (one head) + host_writed(&sbuf[0x1c6],(uint32_t)bootsect_pos); + // length of partition1, align to chs value + host_writed(&sbuf[0x1ca],vol_sectors); + + // write partition table + if(disktype != "vhd") { + fseeko64(f, 0, SEEK_SET); + fwrite(&sbuf, 512, 1, f); + } + else { + vhd->Write_AbsoluteSector(0, sbuf); + } + } + + // set boot sector values + memset(sbuf,0,512); + // TODO boot code jump + if (FAT >= 32) { + sbuf[0]=0xEB; sbuf[1]=0x58; sbuf[2]=0x90; // Windows 98 values + } + else { + sbuf[0]=0xEB; sbuf[1]=0x3c; sbuf[2]=0x90; + } + // OEM + if (FAT >= 32) { + sprintf((char*)&sbuf[0x03],"MSWIN4.1"); + } else { + sprintf((char*)&sbuf[0x03],"MSDOS5.0"); + } + // bytes per sector: always 512 + host_writew(&sbuf[BytsPerSec],512); + // sectors per cluster: 1,2,4,8,16,... + // NOTES: SCANDISK.EXE will hang if you ask it to check a FAT12 filesystem with 128 sectors/cluster. + if (sectors_per_cluster == 0) { + sectors_per_cluster = 1; + /* one sector per cluster on anything larger than 200KB is a bit wasteful (large FAT tables). + * Improve capacity by starting from a larger value.*/ + if (vol_sectors >= 400) { + unsigned int tmp_fatlimit; + + /* Windows 98 likes multiples of 4KB, which is actually reasonable considering + * that it keeps FAT32 efficient. Also, Windows 98 SETUP will crash if sectors/cluster + * is too small. Ref: [https://github.com/joncampbell123/dosbox-x/issues/1553#issuecomment-651880604] + * and [http://www.helpwithwindows.com/windows98/fat32.html] */ + if (FAT >= 32) { + if (vol_sectors >= 67108864/*32GB*/) + sectors_per_cluster = 64; /* 32KB (64*512) */ + else if (vol_sectors >= 33554432/*16GB*/) + sectors_per_cluster = 32; /* 16KB (32*512) */ + else if (vol_sectors >= 16777216/*8GB*/) + sectors_per_cluster = 16; /* 8KB (16*512) */ + else + sectors_per_cluster = 8; /* 4KB (8*512) */ + } + else { + /* 1 sector per cluster is very inefficient */ + if (vol_sectors >= 6144000/*3000MB*/) + sectors_per_cluster = 8; + else if (vol_sectors >= 1048576/*512MB*/) + sectors_per_cluster = 4; + else if (vol_sectors >= 131072/*64MB*/) + sectors_per_cluster = 2; + } + + /* no more than 5% of the disk */ + switch (FAT) { + case 12: tmp_fatlimit = ((((vol_sectors / 20u) * (512u / fat_copies)) / 3u) * 2u) + 2u; break; + case 16: tmp_fatlimit = (((vol_sectors / 20u) * (512u / fat_copies)) / 2u) + 2u; break; + case 32: tmp_fatlimit = (((vol_sectors / 20u) * (512u / fat_copies)) / 4u) + 2u; break; + default: abort(); + } + + while ((vol_sectors/sectors_per_cluster) >= (tmp_fatlimit - 2u) && sectors_per_cluster < 0x80u) sectors_per_cluster <<= 1; + } + } + + /* if alignment is a power of 2, align sectors per cluster to it */ + if (bitop::ispowerof2(alignment)) { + while (sectors_per_cluster < 0x80u && sectors_per_cluster < alignment) sectors_per_cluster <<= 1; + } + + /* FAT12/FAT16 size the root directory so that it is aligned, which then aligns the data area following it */ + if (alignment != 0u && FAT < 32) { + const uint32_t t_alignment = alignment * (512u / 32u); /* 512 bytes/sector, 32 bytes per dirent = number of root dirents per sector */ + root_ent += t_alignment - 1; + root_ent -= root_ent % t_alignment; + } + + while (!is_fd && (vol_sectors/sectors_per_cluster) >= (fatlimit - 2u) && sectors_per_cluster < 0x80u) sectors_per_cluster <<= 1; + sbuf[SecPerClus]=(uint8_t)sectors_per_cluster; + // reserved sectors + host_writew(&sbuf[RsvdSecCnt],reserved_sectors); + // Number of FATs + sbuf[NumFATs] = fat_copies; + // Root entries if not FAT32 + if (FAT < 32) host_writew(&sbuf[RootEntCnt],root_ent); + // sectors (under 32MB) if not FAT32 and less than 65536 + if (FAT < 32 && vol_sectors < 65536ul) host_writew(&sbuf[TotSec16],vol_sectors); + // sectors (32MB or larger or FAT32) + if (FAT >= 32 || vol_sectors >= 65536ul) host_writed(&sbuf[TotSec32],vol_sectors); + else host_writed(&sbuf[TotSec32],0); + // media descriptor + sbuf[Media]=mediadesc; + // needed entries: (sectors per cluster) + uint64_t clusters = vol_sectors / sectors_per_cluster; // initial estimate + + // sectors per FAT + if (FAT >= 32) sect_per_fat = ((clusters*4u)+511u)/512u; + else if (FAT >= 16) sect_per_fat = ((clusters*2u)+511u)/512u; + // Use standard sect_per_fat values for standard floppy images, otherwise it may required to be adjusted + else if (!is_fd || sect_per_fat == 0 || (is_fd && (rootent_changed || (fat_copies != 2)))) sect_per_fat = ((((clusters+1u)/2u)*3u)+511u)/512u; + + if (alignment != 0u) { + if (alignment % fat_copies) { + sect_per_fat += alignment - 1u; + sect_per_fat -= sect_per_fat % alignment; + } + else { + const uint32_t t_alignment = alignment / fat_copies; /* we could align sect_per_fat based on ALL copies of the FAT table */ + sect_per_fat += t_alignment - 1u; + sect_per_fat -= sect_per_fat % t_alignment; + } + } + + if (alignment != 0u) { + if ((((uint64_t)sect_per_fat * (uint64_t)fat_copies) % (uint64_t)alignment) != 0u) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_FAT_ALIGN")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + } + + if (FAT < 32 && sect_per_fat > 256u) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_SECTPERFAT")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + + uint32_t root_ent_sec = 0; + uint64_t data_area = vol_sectors - reserved_sectors - (sect_per_fat * fat_copies); + if (FAT < 32) { + root_ent_sec = ((root_ent * 32u) + 511u) / 512u; + data_area -= root_ent_sec; + } + clusters = data_area / sectors_per_cluster; + if (FAT < 32) host_writew(&sbuf[FATSz16],(uint16_t)sect_per_fat); + + if (alignment != 0u) { + if ((root_ent_sec % alignment) != 0u) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_VOLSIZE")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + } + + /* Too many or to few clusters can foul up FAT12/FAT16/FAT32 detection and cause corruption! */ + if ((clusters+2u) < fatlimitmin) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_CLUSTERS")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + if ((clusters+2u) > fatlimit) { + clusters = fatlimit-2u; + WriteOut(MSG_Get("PROGRAM_IMGMAKE_CLUSTERCOUNT")); + /* Well, if the user wants an oversized partition, hack the total sectors fields to make it work */ + uint32_t adj_vol_sectors = + (uint32_t)(reserved_sectors + (sect_per_fat * fat_copies) + + (((root_ent * 32u) + 511u) / 512u) + (clusters * sectors_per_cluster)); + + // sectors (under 32MB) if not FAT32 and less than 65536 + if (adj_vol_sectors < 65536ul) host_writew(&sbuf[TotSec16],(uint16_t)adj_vol_sectors); + // sectors (32MB or larger or FAT32) + if (adj_vol_sectors >= 65536ul) host_writed(&sbuf[TotSec32],adj_vol_sectors); + else host_writed(&sbuf[TotSec32],0); + } + + const unsigned long long first_cluster = + (unsigned long long)bootsect_pos + reserved_sectors + + ((unsigned long long)sect_per_fat * (unsigned long long)fat_copies) + + (unsigned long long)root_ent_sec; + + /* do not validate alignment of data area, because some of the fd and hd presets might + * violate it, but certainly make sure that the first cluster is aligned */ + if (alignment != 0u) { + if ((first_cluster % (unsigned long long)alignment) != 0ull) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_CLUSTER_ALIGN")); + fclose(f); + unlink(temp_line.c_str()); + if (setdir) chdir(dirCur); + return; + } + } + + // sectors per track + host_writew(&sbuf[SecPerTrk],s); + // heads + host_writew(&sbuf[NumHeads],h); + // hidden sectors + host_writed(&sbuf[HiddSec],(uint32_t)bootsect_pos); + /* after 0x24, FAT12/FAT16 and FAT32 diverge in structure */ + if (FAT >= 32) { + host_writed(&sbuf[FATSz32],sect_per_fat); + sbuf[0x28] = 0x00; // FAT is mirrored at runtime because that is what DOSBox-X's FAT driver does + host_writew(&sbuf[0x2A],0x0000); // FAT32 version 0.0 + host_writed(&sbuf[0x2C],2); // root directory starting cluster + host_writew(&sbuf[0x30],1); // sector number in reserved area of FSINFO structure + host_writew(&sbuf[0x32],6); // sector number in reserved area of backup boot sector + // BIOS drive + sbuf[DrvNum32] = (mediadesc == 0xF8) ? 0x80 : 0x00; + // ext. boot signature + sbuf[BootSig32] = 0x29; + // Volume label + sprintf((char*)&sbuf[VolLab32], "NO NAME "); + // volume serial number + // let's use the BIOS time (cheap, huh?) + host_writed(&sbuf[VolID32], mem_readd(BIOS_TIMER)); + // file system type + sprintf((char*)&sbuf[FilSysType32],"FAT32 "); + } + else { /* FAT12/FAT16 */ + // BIOS drive + sbuf[BootSig] = 0x29; + // Volume label + sprintf((char*)&sbuf[VolLab], "NO NAME "); + // volume serial number + // let's use the BIOS time (cheap, huh?) + host_writed(&sbuf[VolID], mem_readd(BIOS_TIMER)); + if(is_fd) { + uint8_t index = 0; + while(DiskGeometryList[index].cylcount != 0) { + if(DiskGeometryList[index].ksize == disksize) { + sbuf[Media] = DiskGeometryList[index].mediaid; + mediadesc = DiskGeometryList[index].mediaid; + host_writew(&sbuf[SecPerTrk],DiskGeometryList[index].secttrack); + host_writew(&sbuf[NumHeads], DiskGeometryList[index].headscyl); + host_writew(&sbuf[BytsPerSec], DiskGeometryList[index].bytespersect); + sbuf[SecPerClus] = spc_changed ? sectors_per_cluster : DiskGeometryList[index].sectcluster; + host_writew(&sbuf[RootEntCnt], rootent_changed ? root_ent : DiskGeometryList[index].rootentries); + host_writew(&sbuf[FATSz16],sect_per_fat); + break; + } + index++; + } + } + // BIOS drive + sbuf[DrvNum] = (mediadesc == 0xF8) ? 0x80 : 0x00; + // file system type + if (FAT >= 16) sprintf((char*)&sbuf[FilSysType],"FAT16 "); + else sprintf((char*)&sbuf[FilSysType],"FAT12 "); + } + // boot sector signature + host_writew(&sbuf[BootSign],0xAA55); + + // if anything should try to boot this partition, add code to print an error message instead of + // letting the CPU run wild through not executable code. + if (FAT >= 32) { + // the code expects to load a string from a fixed address. + // we're relocating it to make room for FAT32 structures so some patching is required. + memcpy(sbuf+BootCode32,this_is_not_a_bootable_partition+0x3E,BootSign - BootCode32); + host_writew(sbuf+0x5D,0x7C77); // 0x7C5D: MOV SI, we are patching the + } + else { + memcpy(sbuf+BootCode,this_is_not_a_bootable_partition+0x3E,BootSign - BootCode); + } + + // write label + if (!label.empty()) { + const char *s = label.c_str(); + unsigned int i; + char *d; + + if (FAT >= 32) d = (char*)sbuf + VolLab32; + else d = (char*)sbuf + VolLab; + + for (i=0;i < 11 && *s;i++) *d++ = *s++; + for ( ;i < 11; i++) *d++ = ' '; + } + + // write the boot sector + if(disktype == "vhd") { + vhd->Write_AbsoluteSector(bootsect_pos, sbuf); + } + else { + fseeko64(f, bootsect_pos * 512, SEEK_SET); + fwrite(&sbuf, 512, 1, f); + } + // FAT32: Write backup copy too. + // The BPB we wrote says sector 6 from start of volume + if(FAT >= 32) { + if(disktype != "vhd") { + fseeko64(f, (bootsect_pos + 6u) * 512, SEEK_SET); + fwrite(&sbuf, 512, 1, f); + } + else { + vhd->Write_AbsoluteSector((bootsect_pos + 6u), sbuf); + } + } + // FAT32: Write FSInfo sector too at sector 1 from start of volume. + // Windows 98 behavior shows that the FSInfo is duplicated + // along with the boot sector. + if (FAT >= 32) { + memset(sbuf,0,512); + host_writed(&sbuf[0x000],0x41615252); /* "RRaA" */ + host_writed(&sbuf[0x1e4],0x61417272); /* "rrAa" */ + host_writed(&sbuf[0x1e8],(uint32_t)(clusters-1)); /* Last known free cluster count */ + host_writed(&sbuf[0x1ec],3); /* Next free cluster. We used 2 for the root dir, so 3 is next */ + host_writed(&sbuf[0x1fc],0xAA550000); /* signature */ + if(disktype != "vhd") { + fseeko64(f, (bootsect_pos + 1u) * 512, SEEK_SET); + fwrite(&sbuf, 512, 1, f); + fseeko64(f, (bootsect_pos + 6u + 1u) * 512, SEEK_SET); + fwrite(&sbuf, 512, 1, f); + } + else { + vhd->Write_AbsoluteSector((bootsect_pos + 1u), sbuf); + vhd->Write_AbsoluteSector((bootsect_pos + 6u +1u), sbuf); + } + } + + // write FATs + memset(sbuf,0,512); + if (FAT >= 32) { + host_writed(&sbuf[0],0x0FFFFF00 | mediadesc); + host_writed(&sbuf[4],0x0FFFFFFF); + + /* The code above marks cluster 2 as the start of the root directory. */ + host_writed(&sbuf[8],0x0FFFFFFF); + } + else if (FAT >= 16) + host_writed(&sbuf[0],0xFFFFFF00 | mediadesc); + else + host_writed(&sbuf[0],0xFFFF00 | mediadesc); + + for (unsigned int fat=0;fat < fat_copies;fat++) { + if(disktype != "vhd") { + fseeko64(f, (off_t)(((unsigned long long)bootsect_pos + reserved_sectors + (unsigned long long)sect_per_fat * (unsigned long long)fat) * 512ull), SEEK_SET); + fwrite(&sbuf, 512, 1, f); + } + else { + vhd->Write_AbsoluteSector((unsigned long long)bootsect_pos + reserved_sectors + (unsigned long long)sect_per_fat * (unsigned long long)fat, sbuf); + } + } + + // write label in root directory, as first entry + if (!label.empty()) { + const char *s = label.c_str(); + unsigned int i; + char *d; + + unsigned long long sec; + + /* FAT12/FAT16: This points at the root directory area. + * FAT32: This points at the root directory only because this code constructed the root directory allocation chain + * starting at cluster 2, which is the first cluster of the data area. */ + sec = (unsigned long long)bootsect_pos + reserved_sectors + + ((unsigned long long)sect_per_fat * (unsigned long long)fat_copies); + + memset(sbuf,0,512); + + d = (char*)sbuf; + for (i=0;i < 11 && *s;i++) *d++ = *s++; + for ( ;i < 11; i++) *d++ = ' '; + sbuf[11] = 0x08; /* volume label */ + + if(disktype != "vhd") { + fseeko64(f, (off_t)(sec * 512ull), SEEK_SET); + fwrite(&sbuf, 512, 1, f); + } + else { + vhd->Write_AbsoluteSector(sec, sbuf); + } + } + + // warning + if ((sectors_per_cluster*512ul) >= 65536ul) + WriteOut(MSG_Get("PROGRAM_IMGMAKE_CLUSTER_SIZE")); + } + // write VHD footer if requested + if((mediadesc == 0xF8) && disktype != "vhd" && !strcasecmp(extension, ".vhd")) { + imageDiskVHD::VHDFooter footer; + footer.SetDefaults(); + footer.dataOffset = 0xFFFFFFFFFFFFFFFF; + footer.originalSize = footer.currentSize = size; + footer.geometry.cylinders = c; + footer.geometry.heads = h; + footer.geometry.sectors = s; + footer.diskType = imageDiskVHD::VHD_TYPE_FIXED; + imageDiskVHD::mk_uuid((uint8_t*)footer.uniqueId); + footer.checksum = footer.CalculateChecksum(); + footer.SwapByteOrder(); + // write footer + fseeko64(f, 0L, SEEK_END); + fwrite(&footer,512,1,f); + } + if(disktype != "vhd") { + fclose(f); + } + else { + delete vhd; + } + // create the batch file + if(t2 == "-bat") { + if(temp_line.length() > 3) { + t2 = temp_line.substr(0,temp_line.length()-4) + ".bat"; + } else { + t2 = temp_line + ".bat"; + } + WriteOut("%s\n",t2.c_str()); + f = fopen(t2.c_str(),"wb+"); + if (!f) { + WriteOut(MSG_Get("PROGRAM_IMGMAKE_CANNOT_WRITE"),t2.c_str()); + if (setdir) { + chdir(dirCur); + runRescan("-Q"); + } + return; + } + + if (bootsect_pos < 0) /* -nofs */ + fprintf(f,"imgmount 2 %s -size 512,%u,%u,%u\r\n",temp_line.c_str(),s,h,c); + else + fprintf(f,"imgmount c %s -size 512,%u,%u,%u\r\n",temp_line.c_str(),s,h,c); + + fclose(f); + } + if (setdir) { + chdir(dirCur); + runRescan("-Q"); + } + return; + } + void printHelp() { // maybe hint parameter? + resetcolor = true; + WriteOut(MSG_Get("PROGRAM_IMGMAKE_SYNTAX")); + } +}; + +static void IMGMAKE_ProgramStart(Program * * make) { + *make=new IMGMAKE; +} +#endif + +void runImgmake(const char *str) { +#if !defined(OSFREE) + IMGMAKE imgmake; + imgmake.cmd=new CommandLine("IMGMAKE", str); + imgmake.Run(); +#endif +} + +void swapInDrive(int drive, unsigned int position=0); +#if !defined(OSFREE) +class IMGSWAP : public Program +{ +public: + void ListImgSwaps(void) { + char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH]; + uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; + /* Command uses dta so set it to our internal dta */ + RealPt save_dta = dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + WriteOut(MSG_Get("PROGRAM_IMGSWAP_STATUS")); + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_FORMAT"),MSG_Get("DRIVE"),MSG_Get("TYPE"),MSG_Get("LABEL"),MSG_Get("SWAP_SLOT")); + int cols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); + if (!cols) cols=80; + for(int p = 1;p < cols;p++) WriteOut("-"); + WriteOut("\n"); + bool none=true; + for (int d = 0;d < DOS_DRIVES;d++) { + if (!Drives[d] || (strncmp(Drives[d]->GetInfo(), "fatDrive ", 9) && strncmp(Drives[d]->GetInfo(), "isoDrive ", 9))||(int)DriveManager::GetDisksSize(d)<2) continue; + char root[7] = {(char)('A'+d),':','\\','*','.','*',0}; + bool ret = DOS_FindFirst(root,DOS_ATTR_VOLUME); + if (ret) { + dta.GetResult(name,lname,size,hsize,date,time,attr); + DOS_FindNext(); //Mark entry as invalid + } else name[0] = 0; + + /* Change 8.3 to 11.0 */ + const char* dot = strchr(name, '.'); + if(dot && (dot - name == 8) ) { + name[8] = name[9];name[9] = name[10];name[10] = name[11];name[11] = 0; + } + + root[1] = 0; //This way, the format string can be reused. + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_FORMAT"),root, Drives[d]->GetInfo(),name,DriveManager::GetDrivePosition(d)); + none=false; + } + if (none) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NONE")); + dos.dta(save_dta); + } + void Run() override + { + //Hack To allow long commandlines + ChangeToLongCmd(); + + if(cmd->FindExist("/?", true) || cmd->FindExist("-?", true) || cmd->FindExist("?", true)) { + resetcolor = true; + WriteOut(MSG_Get("PROGRAM_IMGSWAP_HELP")); + return; + } + if (!cmd->GetCount()) { + ListImgSwaps(); + return; + } + if (!cmd->FindCommand(1,temp_line) || (temp_line.size() > 2) || ((temp_line.size()>1) && (temp_line[1]!=':')) || (!(temp_line[0] >= 'A' && temp_line[0] <= 'Z') && !(temp_line[0] >= 'a' && temp_line[0] <= 'z'))) { + WriteOut(MSG_Get("SHELL_ILLEGAL_DRIVE")); + return; + } + int d=temp_line[0] - (temp_line[0] >= 'a' && temp_line[0] <= 'z' ? 'a' : 'A'); + if (!Drives[d] || (strncmp(Drives[d]->GetInfo(), "fatDrive ", 9) && strncmp(Drives[d]->GetInfo(), "isoDrive ", 9)) || (int)DriveManager::GetDisksSize(d)<2) { + ListImgSwaps(); + return; + } + if (cmd->FindCommand(2,temp_line)) { + int swap=atoi(temp_line.c_str()); + if (swap<1||swap>DriveManager::GetDisksSize(d)) { + WriteOut(MSG_Get("PROGRAM_IMGSWAP_ERROR"), DriveManager::GetDisksSize(d)); + return; + } + swapInDrive(d,swap); + } else + swapInDrive(d); + char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH]; + uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; + /* Command uses dta so set it to our internal dta */ + RealPt save_dta = dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_FORMAT"),MSG_Get("DRIVE"),MSG_Get("TYPE"),MSG_Get("LABEL"),MSG_Get("SWAP_SLOT")); + int cols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); + if (!cols) cols=80; + for(int p = 1;p < cols;p++) WriteOut("-"); + WriteOut("\n"); + char root[7] = {(char)('A'+d),':','\\','*','.','*',0}; + bool ret = DOS_FindFirst(root,DOS_ATTR_VOLUME); + if (ret) { + dta.GetResult(name,lname,size,hsize,date,time,attr); + DOS_FindNext(); //Mark entry as invalid + } else name[0] = 0; + + /* Change 8.3 to 11.0 */ + const char* dot = strchr(name, '.'); + if(dot && (dot - name == 8) ) { + name[8] = name[9];name[9] = name[10];name[10] = name[11];name[11] = 0; + } + + root[1] = 0; //This way, the format string can be reused. + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_FORMAT"),root, Drives[d]->GetInfo(),name,DriveManager::GetDrivePosition(d)); + dos.dta(save_dta); + } +}; + +void IMGSWAP_ProgramStart(Program** make) +{ + *make = new IMGSWAP; +} +#endif + +// LOADFIX + +#if !defined(OSFREE) +class LOADFIX : public Program { +public: + void Run(void) override; +}; +#endif + +bool XMS_Active(void); +Bitu XMS_AllocateMemory(Bitu size, uint16_t& handle); +Bitu XMS_FreeMemory(Bitu handle); +uint8_t EMM_AllocateMemory(uint16_t pages,uint16_t & dhandle,bool can_allocate_zpages); +uint8_t EMM_ReleaseMemory(uint16_t handle); +bool EMS_Active(void); + +/* HIMEM.SYS does not store who owns what block, so for -D or -F to work, + * we need to keep track of handles ourself */ +std::vector LOADFIX_xms_handles; +std::vector LOADFIX_ems_handles; + +void LOADFIX_OnDOSShutdown(void) { + LOADFIX_xms_handles.clear(); + LOADFIX_ems_handles.clear(); +} + +#if !defined(OSFREE) +void LOADFIX::Run(void) +{ + uint16_t commandNr = 1; + Bitu kb = 64; + bool xms = false; + bool ems = false; + bool opta = false; + + if (cmd->FindExist("-xms",true) || cmd->FindExist("/xms",true)) { + xms = true; + kb = 1024; + } + + if (cmd->FindExist("-ems",true) || cmd->FindExist("/ems",true)) { + ems = true; + kb = 1024; + } + + if (cmd->FindExist("-a",true) || cmd->FindExist("/a",true)) + opta = true; + + if (cmd->GetCount()==1 && (cmd->FindExist("-?", false) || cmd->FindExist("/?", false))) { + resetcolor = true; + WriteOut(MSG_Get("PROGRAM_LOADFIX_HELP")); + return; + } + + if (cmd->FindCommand(commandNr,temp_line)) { + if (temp_line[0]=='-' || (temp_line[0]=='/')) { + char ch = temp_line[1]; + if ((*upcase(&ch)=='D') || (*upcase(&ch)=='F')) { + // Deallocate all + if (ems) { + for (auto i=LOADFIX_ems_handles.begin();i!=LOADFIX_ems_handles.end();i++) { + if (EMM_ReleaseMemory(*i)) + WriteOut(MSG_Get("PROGRAM_LOADFIX_EMS_FREE"),*i); + } + LOADFIX_ems_handles.clear(); + WriteOut(MSG_Get("PROGRAM_LOADFIX_DEALLOCALL"),kb); + } + else if (xms) { + for (auto i=LOADFIX_xms_handles.begin();i!=LOADFIX_xms_handles.end();i++) { + if (XMS_FreeMemory(*i)) + WriteOut(MSG_Get("PROGRAM_LOADFIX_XMS_FREE"),*i); + } + LOADFIX_xms_handles.clear(); + WriteOut(MSG_Get("PROGRAM_LOADFIX_DEALLOCALL"),kb); + } + else { + DOS_FreeProcessMemory(0x40); + WriteOut(MSG_Get("PROGRAM_LOADFIX_DEALLOCALL"),kb); + } + return; + } else { + // Set mem amount to allocate + kb = (Bitu)atoi(temp_line.c_str()+1); + if (kb==0) kb=xms?1024:64; + commandNr++; + } + } + } + + // Allocate Memory + if (ems) { + if (EMS_Active()) { + uint16_t handle; + Bitu err; + + /* EMS allocates in 16kb increments */ + kb = (kb + 15u) & (~15u); + + err = EMM_AllocateMemory((uint16_t)(kb/16u)/*16KB pages*/,/*&*/handle,false); + if (err == 0) { + WriteOut(MSG_Get("PROGRAM_LOADFIX_EMS_ALLOC"),kb); + LOADFIX_ems_handles.push_back(handle); + } + else { + WriteOut(MSG_Get("PROGRAM_LOADFIX_EMS_ALLOCERROR")); + } + } + else { + WriteOut(MSG_Get("PROGRAM_LOADFIX_NOEMS")); + } + } + else if (xms) { + if (XMS_Active()) { + uint16_t handle; + Bitu err; + + err = XMS_AllocateMemory(kb,/*&*/handle); + if (err == 0) { + WriteOut(MSG_Get("PROGRAM_LOADFIX_XMS_ALLOC"),kb); + LOADFIX_xms_handles.push_back(handle); + } + else { + WriteOut(MSG_Get("PROGRAM_LOADFIX_XMS_ALLOCERROR")); + } + } + else { + WriteOut(MSG_Get("PROGRAM_LOADFIX_NOXMS")); + } + } + else { + uint16_t segment; + uint16_t blocks = (uint16_t)(kb*1024/16); + if (DOS_AllocateMemory(&segment,&blocks)) { + DOS_MCB mcb((uint16_t)(segment-1)); + if (opta) { + if (segment < 0x1000) { + uint16_t needed = 0x1000 - segment; + if (DOS_ResizeMemory(segment,&needed)) + kb=needed*16/1024; + } + else { + DOS_FreeMemory(segment); + WriteOut(MSG_Get("PROGRAM_LOADFIX_NOALLOC")); + return; + } + } + mcb.SetPSPSeg(0x40); // use fake segment + WriteOut(MSG_Get("PROGRAM_LOADFIX_ALLOC"),kb); + // Prepare commandline... + if (cmd->FindCommand(commandNr++,temp_line)) { + // get Filename + char filename[128]; + safe_strncpy(filename,temp_line.c_str(),128); + // Setup commandline + char args[256 + 1]; + args[0] = 0; + bool found = cmd->FindCommand(commandNr++, temp_line); + while (found) { + if (strlen(args) + temp_line.length() + 1 > 256) break; + strcat(args, temp_line.c_str()); + found = cmd->FindCommand(commandNr++, temp_line); + if (found) strcat(args, " "); + } + // Use shell to start program + DOS_Shell shell; + shell.Execute(filename,args); + DOS_FreeMemory(segment); + WriteOut(MSG_Get("PROGRAM_LOADFIX_DEALLOC"),kb); + } + } else { + WriteOut(MSG_Get("PROGRAM_LOADFIX_ERROR"),kb); + } + } +} + +static void LOADFIX_ProgramStart(Program * * make) { + *make=new LOADFIX; +} +#endif + +// RESCAN + +#if !defined(OSFREE) +class RESCAN : public Program { +public: + void Run(void) override; +}; + +void RESCAN::Run(void) +{ + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_RESCAN_HELP")); + return; + } + bool all = false, quiet = false; + if (cmd->FindExist("-q",true) || cmd->FindExist("/q",true)) + quiet = true; + + uint8_t drive = DOS_GetDefaultDrive(); + if(cmd->FindCommand(1,temp_line)) { + //-A -All /A /All + if(temp_line.size() >= 2 && (temp_line[0] == '-' ||temp_line[0] =='/')&& (temp_line[1] == 'a' || temp_line[1] =='A') ) all = true; + else if(temp_line.size() == 2 && temp_line[1] == ':') { + lowcase(temp_line); + drive = temp_line[0] - 'a'; + } + } + // Get current drive + if (all) { + for(Bitu i =0; iEmptyCache(); + } + if (!quiet) WriteOut(MSG_Get("PROGRAM_RESCAN_SUCCESS")); + } else { + if (drive < DOS_DRIVES && Drives[drive]) { + Drives[drive]->EmptyCache(); + if (!quiet) WriteOut(MSG_Get("PROGRAM_RESCAN_SUCCESS")); + } else + if (!quiet) WriteOut(MSG_Get("SHELL_EXECUTE_DRIVE_NOT_FOUND"), 'A'+drive); + } +} + +static void RESCAN_ProgramStart(Program * * make) { + *make=new RESCAN; +} +#endif + +void runRescan(const char *str) { +#if !defined(OSFREE) + RESCAN rescan; + rescan.cmd=new CommandLine("RESCAN", str); + rescan.Run(); +#endif +} + +#if !defined(OSFREE) +/* TODO: This menu code sucks. Write a better one. */ +class INTRO : public Program { +public: + void DisplayMount(void) { + /* Basic mounting has a version for each operating system. + * This is done this way so both messages appear in the language file*/ + WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_START")); + if (machine == MCH_PC98) { +#if (WIN32) + WriteOut("\033[44;1m\x86\x52\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x56\n" + "\033[44;1m\x86\x46\033[0m "); + WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXST_WINDOWS")); + WriteOut(" \033[44;1m\x86\x46\033[0m\n\033[44;1m\x86\x46\033[0m \033[44;1m\x86\x46\033[0m\n\033[44;1m\x86\x46\033[0m "); + WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXEN_WINDOWS")); + WriteOut(" \033[37m \033[44;1m\x86\x46\033[44;1m\n" + "\033[44;1m\x86\x5A\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x5E\033[0m\n" + ); +#else + WriteOut("\033[44;1m\x86\x52\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x56\n" + "\x86\x46 "); + WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXST_OTHER")); + WriteOut(" \x86\x46\n\x86\x46 \x86\x46\n\x86\x46 "); + WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXEN_OTHER")); + WriteOut(" \033[37m \x86\x46\n" + "\x86\x5A\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44" + "\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x44\x86\x5E\033[0m\n" + ); +#endif + } else { +#if (WIN32) + WriteOut("\033[44;1m\xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" + "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" + "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB\n" + "\xBA "); + WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXST_WINDOWS")); + WriteOut("\xBA\n\xBA \xBA\n\xBA "); + WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXEN_WINDOWS")); + WriteOut("\xBA\n" + "\xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" + "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" + "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC\033[0m\n"); +#else + WriteOut("\033[44;1m\xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" + "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" + "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB\n" + "\xBA "); + WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXST_OTHER")); + WriteOut("\xBA\n\xBA \xBA\n\xBA "); + WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_EXEN_OTHER")); + WriteOut("\xBA\n" + "\xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" + "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" + "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC\033[0m\n"); +#endif + } + WriteOut(MSG_Get("PROGRAM_INTRO_MOUNT_END")); + } + void DisplayUsage(void) { + uint8_t c;uint16_t n=1; + WriteOut(MSG_Get("PROGRAM_INTRO_USAGE_TOP")); + WriteOut(MSG_Get("PROGRAM_INTRO_USAGE_1")); + DOS_ReadFile (STDIN,&c,&n); + WriteOut(MSG_Get("PROGRAM_INTRO_USAGE_TOP")); + WriteOut(MSG_Get("PROGRAM_INTRO_USAGE_2")); + DOS_ReadFile (STDIN,&c,&n); + WriteOut(MSG_Get("PROGRAM_INTRO_USAGE_TOP")); + WriteOut(MSG_Get("PROGRAM_INTRO_USAGE_3")); + DOS_ReadFile (STDIN,&c,&n); + } + void DisplayIntro(void) { + WriteOut(MSG_Get("PROGRAM_INTRO")); + WriteOut("\033[44m\033[K\033[0m\n\033[44m\033[K\033[1m\033[1m\t\t\t\t\t\t\t "); + WriteOut(MSG_Get("PROGRAM_INTRO_MENU_UP")); + if (machine == MCH_PC98) + WriteOut("\033[0m\n" + "\033[44m\033[K\033[1m\033[1m \x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\x86\x43\033[0m\n" + "\033[44m\033[K\033[0m\n" + ); + else + WriteOut(" \033[0m\n" + "\033[44m\033[K\033[1m\033[1m \xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\033[0m\n" + "\033[44m\033[K\033[0m\n" + ); + } + void DisplayMenuBefore(void) { WriteOut("\033[44m\033[K\033[33m\033[1m \033[0m "); } + void DisplayMenuCursorStart(void) { + if (machine == MCH_PC98) { + WriteOut("\033[44m\033[K\033[1m\033[33;44m \x1C\033[0m\033[5;37;44m "); + } else { + WriteOut("\033[44m\033[K\033[1m\033[33;44m \x10\033[0m\033[5;37;44m "); + } + } + void DisplayMenuCursorEnd(void) { WriteOut("\033[0m\n"); } + void DisplayMenuNone(void) { WriteOut("\033[44m\033[K\033[0m\n"); } + + bool CON_IN(uint8_t * data) const { + uint8_t c; + uint16_t n=1; + + /* handle arrow keys vs normal input, + * with special conditions for PC-98 and IBM PC */ + if (!DOS_ReadFile(STDIN,&c,&n) || n == 0) return false; + + if (IS_PC98_ARCH) { + /* translate PC-98 arrow keys to IBM PC escape for the caller */ + if (c == 0x0B) + *data = 0x48 | 0x80; /* IBM extended code up arrow */ + else if (c == 0x0A) + *data = 0x50 | 0x80; /* IBM extended code down arrow */ + else + *data = c; + } + else { + if (c == 0) { + if (!DOS_ReadFile(STDIN,&c,&n) || n == 0) return false; + *data = c | 0x80; /* extended code */ + } + else { + *data = c; + } + } + + return true; + } + + void Run(void) override { + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_INTRO_HELP")); + return; + } + uint8_t attr = DOS_GetAnsiAttr(); + std::string menuname = "BASIC"; // default + /* Only run if called from the first shell (Xcom TFTD runs any intro file in the path) */ + if (!cmd->FindExist("-run", true)&&!cmd->FindExist("/run", true)&&DOS_PSP(dos.psp()).GetParent() != DOS_PSP(DOS_PSP(dos.psp()).GetParent()).GetParent()) return; + if(cmd->FindExist("welcome",false)) { + void showWelcome(Program *shell); + showWelcome(this); + return; + } + if(cmd->FindExist("cdrom",false)) { + WriteOut(MSG_Get("PROGRAM_INTRO_CDROM")); + if (attr) DOS_SetAnsiAttr(attr); + return; + } + if(cmd->FindExist("mount",false)) { + WriteOut("\033[2J");//Clear screen before printing + DisplayMount(); + if (attr) DOS_SetAnsiAttr(attr); + return; + } + + if(cmd->FindExist("usage", false)) { + DisplayUsage(); + if(attr) DOS_SetAnsiAttr(attr); + return; + } + uint8_t c;uint16_t n=1; + +#define CURSOR(option) \ + if (menuname==option) DisplayMenuCursorStart(); \ + else DisplayMenuBefore(); \ + WriteOut(MSG_Get("PROGRAM_INTRO_MENU_" option "")); \ + if (menuname==option) DisplayMenuCursorEnd(); \ + else WriteOut("\n"); + + /* Intro */ + +menufirst: + DisplayIntro(); + CURSOR("BASIC") + CURSOR("CDROM") + CURSOR("USAGE") + DisplayMenuNone(); // None + CURSOR("INFO") + CURSOR("QUIT") + DisplayMenuNone(); // None + + if (menuname=="BASIC") goto basic; + else if (menuname=="CDROM") goto cdrom; + else if (menuname=="USAGE") goto usage; + else if (menuname=="INFO") goto info; + else if (menuname=="QUIT") goto quit; + else if (menuname=="GOTO_EXIT") goto goto_exit; + +goto_exit: + WriteOut("\n"); // Give a line + if (attr) DOS_SetAnsiAttr(attr); + return; + +basic: + menuname="BASIC"; + WriteOut(MSG_Get("PROGRAM_INTRO_MENU_BASIC_HELP")); + CON_IN(&c); + do switch (c) { + case 0x48|0x80: menuname="QUIT"; goto menufirst; // Up + case 0x50|0x80: menuname="CDROM"; goto menufirst; // Down + case 0x1B: menuname="QUIT"; goto menufirst; + case 0xD: // Run + WriteOut("\033[2J"); + WriteOut(MSG_Get("PROGRAM_INTRO")); + WriteOut("\n"); + DisplayMount(); + DOS_ReadFile (STDIN,&c,&n); + goto menufirst; + } while (CON_IN(&c)); + +cdrom: + menuname="CDROM"; + WriteOut(MSG_Get("PROGRAM_INTRO_MENU_CDROM_HELP")); + CON_IN(&c); + do switch (c) { + case 0x48|0x80: menuname="BASIC"; goto menufirst; // Up + case 0x50|0x80: menuname="USAGE"; goto menufirst; // Down + case 0x1B: menuname="QUIT"; goto menufirst; + case 0xD: // Run + WriteOut(MSG_Get("PROGRAM_INTRO_CDROM")); + DOS_ReadFile (STDIN,&c,&n); + goto menufirst; + } while (CON_IN(&c)); + +usage: + menuname="USAGE"; + WriteOut(MSG_Get("PROGRAM_INTRO_MENU_USAGE_HELP")); + CON_IN(&c); + do switch (c) { + case 0x48|0x80: menuname="CDROM"; goto menufirst; // Down + case 0x50|0x80: menuname="INFO"; goto menufirst; // Down + case 0x1B: menuname="QUIT"; goto menufirst; + case 0xD: // Run + DisplayUsage(); + goto menufirst; + } while (CON_IN(&c)); + +info: + menuname="INFO"; + WriteOut(MSG_Get("PROGRAM_INTRO_MENU_INFO_HELP")); + CON_IN(&c); + do switch (c) { + case 0x48|0x80: menuname="USAGE"; goto menufirst; // Up + case 0x50|0x80: menuname="QUIT"; goto menufirst; // Down + case 0x1B: menuname="QUIT"; goto menufirst; + case 0xD: // Run + WriteOut("\033[2J"); + WriteOut(MSG_Get("PROGRAM_INTRO")); + WriteOut("\n"); + WriteOut(MSG_Get("PROGRAM_INTRO_INFO")); + DOS_ReadFile (STDIN,&c,&n); + goto menufirst; + } while (CON_IN(&c)); + +quit: + menuname="QUIT"; + WriteOut(MSG_Get("PROGRAM_INTRO_MENU_QUIT_HELP")); + CON_IN(&c); + do switch (c) { + case 0x48|0x80: menuname="INFO"; goto menufirst; // Up + case 0x50|0x80: menuname="BASIC"; goto menufirst; // Down + case 0xD: // Run + menuname="GOTO_EXIT"; + goto menufirst; + } while (CON_IN(&c)); + if (attr) DOS_SetAnsiAttr(attr); + } +}; + +static void INTRO_ProgramStart(Program * * make) { + *make=new INTRO; +} +#endif + +#if !defined(OSFREE) +imageDiskMemory* CreateRamDrive(Bitu sizes[], const int reserved_cylinders, const bool forceFloppy, Program* obj) { + imageDiskMemory* dsk = NULL; + //if chs not specified + if (sizes[1] == 0) { + uint32_t imgSizeK = (uint32_t)sizes[0]; + //default to 1.44mb floppy + if (forceFloppy && imgSizeK == 0) imgSizeK = 1440; + //search for floppy geometry that matches specified size in KB + int index = 0; + while (DiskGeometryList[index].cylcount != 0) { + if (DiskGeometryList[index].ksize == imgSizeK) { + //create floppy + dsk = new imageDiskMemory(DiskGeometryList[index]); + break; + } + index++; + } + if (dsk == NULL) { + //create hard drive + if (forceFloppy) { + if (obj!=NULL) obj->WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE")); + return NULL; + } + + // The fatDrive class is hard-coded to assume that disks 2880KB or smaller are floppies, + // whether or not they are attached to a floppy controller. So, let's enforce a minimum + // size of 4096kb for hard drives. Use the other constructor for floppy drives. + // Note that a size of 0 means to auto-select a size + if (imgSizeK < 4096) imgSizeK = 4096; + + dsk = new imageDiskMemory(imgSizeK); + } + } + else { + //search for floppy geometry that matches specified geometry + int index = 0; + while (DiskGeometryList[index].cylcount != 0) { + if (DiskGeometryList[index].cylcount == sizes[3] && + DiskGeometryList[index].headscyl == sizes[2] && + DiskGeometryList[index].secttrack == sizes[1] && + DiskGeometryList[index].bytespersect == sizes[0]) { + //create floppy + dsk = new imageDiskMemory(DiskGeometryList[index]); + break; + } + index++; + } + if (dsk == NULL) { + //create hard drive + if (forceFloppy) { + if (obj!=NULL) obj->WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE")); + return NULL; + } + dsk = new imageDiskMemory((uint16_t)sizes[3], (uint16_t)sizes[2], (uint16_t)sizes[1], (uint16_t)sizes[0]); + } + } + if (!dsk->active) { + if (obj!=NULL) obj->WriteOut(MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE")); + delete dsk; + return NULL; + } + dsk->Set_Reserved_Cylinders((Bitu)reserved_cylinders); + return dsk; +} +#endif + +bool AttachToBiosByIndex(imageDisk* image, const unsigned char bios_drive_index) { + if (bios_drive_index >= MAX_DISK_IMAGES) return false; + if (imageDiskList[bios_drive_index] != NULL) { + /* Notify IDE ATA emulation if a drive is already there */ + if (bios_drive_index >= 2) IDE_Hard_Disk_Detach(bios_drive_index); + imageDiskList[bios_drive_index]->Release(); + } + imageDiskList[bios_drive_index] = image; + imageDiskChange[bios_drive_index] = true; + image->Addref(); + + // let FDC know if we mounted a floppy + if (bios_drive_index <= 1) { + FDC_AssignINT13Disk(bios_drive_index); + incrementFDD(); + } + + return true; +} + +bool AttachToBiosAndIdeByIndex(imageDisk* image, const unsigned char bios_drive_index, const unsigned char ide_index, const bool ide_slave) { + if (!AttachToBiosByIndex(image, bios_drive_index)) return false; + //if hard drive image, and if ide controller is specified + if (bios_drive_index >= 2 && bios_drive_index < MAX_DISK_IMAGES) { + IDE_Hard_Disk_Attach((signed char)ide_index, ide_slave, bios_drive_index); + updateDPT(); + } + return true; +} + +bool AttachToBiosByLetter(imageDisk* image, const char drive) { + if (image->hardDrive) { + //for hard drives, mount hard drives at first available index + for (int index = 2; index < MAX_DISK_IMAGES; index++) { + if (imageDiskList[index] == NULL) { + return AttachToBiosByIndex(image, index); + } + } + LOG_MSG("BIOS: Warning: Four hard drives (Disk no. 2-5) attached to BIOS already. Drive %c not attached", drive); + } +#if 0 + else if (IS_PC98_ARCH) { + // FIX_ME: This code is not correct. PC-98 boots from Drive 2 only if Drive 1 is empty. + // Currently disable this code since DOSBox-X supports only Drive A (Drive 1) as floppy boot drive anyway. + + //for pc-98 machines, mount floppies at first available index + for (int index = 0; index < 2; index++) { + if (imageDiskList[index] == NULL) { + return AttachToBiosByIndex(image, index); + } + } + } +#endif + else if ((drive - 'A') < 2) { + //for PCs, mount floppies only if A: or B: is specified, and then if so, at specified index + return AttachToBiosByIndex(image, drive - 'A'); + } + return false; +} + +bool AttachToBiosAndIdeByLetter(imageDisk* image, const char drive, const unsigned char ide_index, const bool ide_slave) { + if (image->hardDrive) { + //for hard drives, mount hard drives at first available index + for (int index = 2; index < MAX_DISK_IMAGES; index++) { + if (imageDiskList[index] == NULL) { + return AttachToBiosAndIdeByIndex(image, index, ide_index, ide_slave); + } + } + LOG_MSG("BIOS: Warning: Four hard drives (Disk no. 2-5) attached to BIOS already. Drive %c not attached", drive); + } +#if 0 + else if (IS_PC98_ARCH) { + // FIX_ME: This code is not correct. PC-98 boots from Drive 2 only if Drive 1 is empty. + // Currently disable this code since DOSBox-X supports only Drive A (Drive 1) as floppy boot drive anyway. + + //for pc-98 machines, mount floppies at first available index + for (int index = 0; index < 2; index++) { + if (imageDiskList[index] == NULL) { + return AttachToBiosByIndex(image, index); + } + } + } +#endif + else if ((drive - 'A') < 2) { + //for PCs, mount floppies only if A: or B: is specified, and then if so, at specified index + return AttachToBiosByIndex(image, drive - 'A'); + } + return false; +} + +std::string GetIDEPosition(unsigned char bios_disk_index); +class IMGMOUNT : public Program { + public: + std::vector options; + void ListImgMounts(void) { + char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH]; + uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; + /* Command uses dta so set it to our internal dta */ + RealPt save_dta = dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_1")); + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_FORMAT"),MSG_Get("DRIVE"),MSG_Get("TYPE"),MSG_Get("LABEL"),MSG_Get("SWAP_SLOT")); + int cols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); + if (!cols) cols=80; + for(int p = 1;p < cols;p++) WriteOut("-"); + WriteOut("\n"); + char swapstr[50]; + bool none=true; + for (int d = 0;d < DOS_DRIVES;d++) { + if (!Drives[d] || (strncmp(Drives[d]->GetInfo(), "fatDrive ", 9) && strncmp(Drives[d]->GetInfo(), "isoDrive ", 9))) continue; + char root[7] = {(char)('A'+d),':','\\','*','.','*',0}; + bool ret = DOS_FindFirst(root,DOS_ATTR_VOLUME); + if (ret) { + dta.GetResult(name,lname,size,hsize,date,time,attr); + DOS_FindNext(); //Mark entry as invalid + } else name[0] = 0; + + /* Change 8.3 to 11.0 */ + const char* dot = strchr(name, '.'); + if(dot && (dot - name == 8) ) { + name[8] = name[9];name[9] = name[10];name[10] = name[11];name[11] = 0; + } + + root[1] = 0; //This way, the format string can be reused. + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_FORMAT"),root, Drives[d]->GetInfo(),name,DriveManager::GetDrivePosition(d)); + none=false; + } + if (none) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NONE")); + WriteOut("\n"); + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_2")); + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NUMBER_FORMAT"),MSG_Get("DRIVE_NUMBER"),MSG_Get("DISK_NAME"),MSG_Get("IDE_POSITION"),MSG_Get("SWAP_SLOT")); + for(int p = 1;p < cols;p++) WriteOut("-"); + WriteOut("\n"); + none=true; + for (int index = 0; index < MAX_DISK_IMAGES; index++) { + if (imageDiskList[index]) { + int swaps=0; + if (swapInDisksSpecificDrive == index) { + for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) + if (diskSwap[si] != NULL) + swaps++; + } + if (!swaps) swaps=1; + sprintf(swapstr, "%d / %d", swaps==1?1:swapPosition+1, swaps); + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NUMBER_FORMAT"), std::to_string(index).c_str(), dynamic_cast(imageDiskList[index])!=NULL?"El Torito floppy drive":imageDiskList[index]->diskname.c_str(), GetIDEPosition(index).c_str(), swapstr); + none=false; + } + } + if (none) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NONE")); + dos.dta(save_dta); + } + void Run(void) override { + //Hack To allow long commandlines + ChangeToLongCmd(); + /* In secure mode don't allow people to change imgmount points. + * Neither mount nor unmount */ + if(control->SecureMode()) { + WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW")); + return; + } + imageDisk * newImage; + char drive; + std::vector paths; + if (!cmd->GetCount()) { + ListImgMounts(); + return; + } + //show help if /? or -? + if (cmd->FindExist("/?", true) || cmd->FindExist("-?", true) || cmd->FindExist("?", true) || cmd->FindExist("-help", true)) { + resetcolor = true; + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_HELP")); + return; + } + if (cmd->FindExist("/examples")||cmd->FindExist("-examples")) { + resetcolor = true; + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_EXAMPLE")); + return; + } + /* Check for unmounting */ + std::string umount; + if (cmd->FindString("-u",umount,false)) { + Unmount(umount[0]); + return; + } + + bool roflag = false; + if (cmd->FindExist("-ro",true)) + roflag = true; + + //initialize more variables + unsigned long el_torito_floppy_base=~0UL; + unsigned char el_torito_floppy_type=0xFF; + bool ide_slave = false; + signed char ide_index = -1; + char el_torito_cd_drive = 0; + std::string el_torito; + std::string ideattach="auto"; + std::string type="hdd"; + uint8_t tdr = 0; + std::string bdisk; + int bdisk_number=-1; + + //this code simply sets default type to "floppy" if mounting at A: or B: --- nothing else + // get first parameter - which is probably the drive letter to mount at (A-Z or A:-Z:) - and check it if is A or B or A: or B: + // default to floppy for drive letters A and B and numbers 0 and 1 + if (!cmd->FindCommand(1,temp_line) || (temp_line.size() > 2) || + ((temp_line.size()>1) && (temp_line[1]!=':'))) { + // drive not valid + } else { + tdr = toupper(temp_line[0]); + if(tdr=='A'||tdr=='B'||tdr=='0'||tdr=='1') type="floppy"; + } + + if (temp_line.size() == 1 && isdigit(temp_line[0]) && temp_line[0]>='0' && temp_line[0]FindExist("-u",true)) { + Unmount(temp_line[0]); + std::string templine; + if (!cmd->FindCommand(2,templine)||!templine.size()) return; + } + + //get the type + bool rtype=cmd->FindString("-t", type, true); + std::transform(type.begin(), type.end(), type.begin(), ::tolower); + + if (type == "cdrom") type = "iso"; //Tiny hack for people who like to type -t cdrom + if (!(type == "floppy" || type == "hdd" || type == "iso" || type == "ram")) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_TYPE_UNSUPPORTED"), type.c_str()); + return; + } + + //look for -o options + { + std::string s; + + while (cmd->FindString("-o", s, true)) + options.push_back(s); + } + + //look for -el-torito parameter and remove it from the command line + cmd->FindString("-el-torito",el_torito,true); + if(el_torito == "") cmd->FindString("-bootcd", el_torito, true); + if (el_torito != "") { + //get el-torito floppy from cdrom mounted at drive letter el_torito_cd_drive + el_torito_cd_drive = toupper(el_torito[0]); + //validate the el_torito loading (look for boot image on the cdrom, etc), and + // find the el_torito_floppy_base and el_torito_floppy_type values + if (!PrepElTorito(type, el_torito_cd_drive, el_torito_floppy_base, el_torito_floppy_type)) return; + } + + //the user can use -bd to mount partitions from an INT 13h BIOS disk mounted image, + //meaning a disk image attached to INT 13h using IMGMOUNT -fs none. This way, + //it is possible to mount multiple partitions from one HDD image. + cmd->FindString("-bd",bdisk,true); + if (bdisk != "") { + bdisk_number = atoi(bdisk.c_str()); + if (bdisk_number < 0 || bdisk_number >= MAX_DISK_IMAGES) return; + if (imageDiskList[bdisk_number] == NULL) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_NOT_ASSIGNED")); + return; + } + } + + //default fstype is fat + std::string fstype="fat"; + bool rfstype=cmd->FindString("-fs",fstype,true); + std::transform(fstype.begin(), fstype.end(), fstype.begin(), ::tolower); + + Bitu sizes[4] = { 0,0,0,0 }; + int reserved_cylinders=0; + std::string reservecyl; + + /* DOSBox-X: to please certain 32-bit drivers like Windows 3.1 WDCTRL, or to emulate older h/w configurations, + * we allow the user or script to specify the number of reserved cylinders. older BIOSes were known + * to subtract 1 or 2 additional cylinders from the total in the fixed disk param table. the -reservecyl + * option allows the number we subtract from the total in INT 13H to be set */ + cmd->FindString("-reservecyl",reservecyl,true); + if (reservecyl != "") reserved_cylinders = atoi(reservecyl.c_str()); + + /* DOSBox-X: we allow "-ide" to allow controlling which IDE controller and slot to attach the hard disk/CD-ROM to */ + cmd->FindString("-ide",ideattach,true); + std::transform(ideattach.begin(), ideattach.end(), ideattach.begin(), ::tolower); + + if(isdigit(tdr) && tdr - '0' >= 2) { //Allocate to respective slots if drive number is specified + ide_index = (tdr - '2') / 2; // Drive number 2 = 1m (index=0, slave=false), 3 = 1s (index=0, slave=true), ... + ide_slave = (tdr - '2') & 1 ? true : false; + } else if(ideattach == "auto") { + //LOG_MSG("IDE: attach=auto type=%s", type); + if(type != "floppy") { + if(type == "iso") { + if(!IDE_controller_occupied(1, false)) { // CD-ROMS default to secondary master if not occupied + ide_index = 1; + ide_slave = false; + } + } + if (ide_index < 0) IDE_Auto(ide_index, ide_slave); + } + } + else if (ideattach != "none" && isdigit(ideattach[0]) && ideattach[0] > '0') { /* takes the form [controller] such as: 1m for primary master */ + ide_index = ideattach[0] - '1'; + if (ideattach.length() >= 2) ide_slave = (ideattach[1] == 's'); + } + + //if floppy, don't attach to ide controller + //if cdrom, file system is iso + if (type=="floppy") { + ideattach="none"; + } else if (type=="iso") { + //str_size=="2048,1,60000,0"; // ignored, see drive_iso.cpp (AllocationInfo) + fstype = "iso"; + } + + //load the size parameter + //auto detect hard drives if not specified + std::string str_size; + std::string str_chs; + cmd->FindString("-size", str_size, true); + cmd->FindString("-chs", str_chs, true); + if (!ReadSizeParameter(str_size, str_chs, type, sizes)) return; + + if (!rfstype&&isdigit(temp_line[0])) fstype="none"; + + //for floppies, hard drives, and cdroms, require a drive letter + //for -fs none, require a number indicating where to mount at + if(fstype=="fat" || fstype=="iso") { + // get the drive letter + if (!cmd->FindCommand(1,temp_line) || (temp_line.size() > 2) || ((temp_line.size()>1) && (temp_line[1]!=':'))) { + WriteOut_NoParsing(MSG_Get("PROGRAM_IMGMOUNT_SPECIFY_DRIVE")); + return; + } + + /* if fs type if "fat" and we're asked to mount *: then check for that here */ + if (temp_line[0] == '*' && temp_line[1] == ':') { + /* What drives are available? */ + int i_drive = IS_PC98_ARCH ? 'A' : 'C'; + while (i_drive <= 'Z' && Drives[i_drive-'A'] != NULL && (i_drive-'A') < DOS_DRIVES) i_drive++; + + if (i_drive > 'Z') { + WriteOut_NoParsing("No drive letters available"); + return; + } + + drive = static_cast(i_drive); + } + else { + int i_drive = toupper(temp_line[0]); + if (!isalpha(i_drive) || (i_drive - 'A') >= DOS_DRIVES || (i_drive - 'A') < 0) { + WriteOut_NoParsing(MSG_Get("PROGRAM_IMGMOUNT_SPECIFY_DRIVE")); + return; + } + drive = static_cast(i_drive); + } + } else if (fstype=="none") { + cmd->FindCommand(1,temp_line); + if ((temp_line.size() > 1) || (!isdigit(temp_line[0]))) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_SPECIFY2"), MAX_DISK_IMAGES-1); + return; + } + drive=temp_line[0]; + if ((drive<'0') || (drive>=MAX_DISK_IMAGES+'0')) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_SPECIFY2"), MAX_DISK_IMAGES-1); + return; + } + int index = drive - '0'; + if (imageDiskList[index]) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED_NUMBER"),index); + return; + } + } else { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_FORMAT_UNSUPPORTED"),fstype.c_str()); + return; + } + + // find all file parameters, assuming that all option parameters have been removed + bool removed=ParseFiles(temp_line, paths, el_torito != "" || type == "ram" || bdisk != ""); + + // some generic checks + if (el_torito != "") { + if (paths.size() != 0) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ELTORITO_NO_FILE")); + return; + } + } + else if (bdisk != "") { + } + else if (type == "ram") { + if (paths.size() != 0) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE")); + return; + } + } + else { + if (paths.size() == 0) { + if (strcasecmp(temp_line.c_str(), "-u")&&!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_SPECIFY_FILE")); + return; + } + if (!rtype&&!rfstype&&fstype!="none"&&paths[0].length()>4) { + const char *ext = strrchr(paths[0].c_str(), '.'); + if (ext != NULL) { + if (!strcasecmp(ext, ".cdrom")||!strcasecmp(ext, ".iso")||!strcasecmp(ext, ".cue")||!strcasecmp(ext, ".bin")||!strcasecmp(ext, ".chd")||!strcasecmp(ext, ".mdf")||!strcasecmp(ext, ".gog")||!strcasecmp(ext, ".ins")||!strcasecmp(ext, ".ccd")||!strcasecmp(ext, ".inst")) { + type="iso"; + fstype="iso"; + if(ide_index < 0 || ideattach == "auto") { + if(!IDE_controller_occupied(1, false)) { // check if secondary master is already occupied + ide_index = 1; + ide_slave = false; + } + else IDE_Auto(ide_index, ide_slave); + } + } else if (!strcasecmp(ext, ".ima")) { + type="floppy"; + ideattach="none"; + } + } + } + } + + int i_drive = drive - 'A'; + bool exist = i_drive < DOS_DRIVES && i_drive >= 0 && Drives[i_drive]; + //====== call the proper subroutine ====== + if(fstype=="fat") { +#if !defined(OSFREE) + //mount floppy or hard drive + if (bdisk != "") { + if (!MountPartitionFat(drive, bdisk_number)) return; + } + else if (el_torito != "") { + if (!MountElToritoFat(drive, sizes, el_torito_cd_drive, el_torito_floppy_base, el_torito_floppy_type)) return; + } + else if (type == "ram") { + if (!MountRam(sizes, drive, ide_index, ide_slave, roflag)) return; + } + else { + //supports multiple files + if (!MountFat(sizes, drive, type == "hdd", str_size, paths, ide_index, ide_slave, reserved_cylinders, roflag)) return; + } + if (removed && !exist && i_drive < DOS_DRIVES && i_drive >= 0 && Drives[i_drive]) DOS_SetDefaultDrive(i_drive); +#else + WriteOut("Mounting FAT filesystem not supported\n"); + return; +#endif + } else if (fstype=="iso") { + if (bdisk != "") { + // TODO + return; + } + if (el_torito != "") { + WriteOut(MSG_Get("PROGRAM_ELTORITO_ISOMOUNT")); /* <- NTS: Will never implement, either */ + return; + } + //supports multiple files + if (!MountIso(drive, paths, ide_index, ide_slave)) return; + if (removed && !exist && i_drive < DOS_DRIVES && i_drive >= 0 && Drives[i_drive]) DOS_SetDefaultDrive(i_drive); + } else if (fstype=="none") { + unsigned char driveIndex = drive - '0'; + + if (paths.size() > 1) { + if (driveIndex <= 1) { + if (swapInDisksSpecificDrive >= 0 && swapInDisksSpecificDrive <= 1 && + swapInDisksSpecificDrive != driveIndex) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_MULTIPLE_USED")); + return; + } + } + else { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED")); + return; + } + } + + if (el_torito != "") { + newImage = new imageDiskElToritoFloppy((unsigned char)el_torito_cd_drive, el_torito_floppy_base, el_torito_floppy_type); + } + else if (type == "ram") { +#if !defined(OSFREE) + newImage = MountImageNoneRam(sizes, reserved_cylinders, driveIndex < 2); +#else + WriteOut("RAM disk suport not available\n"); + return; +#endif + } + else { + newImage = MountImageNone(paths[0].c_str(), NULL, sizes, reserved_cylinders, roflag); + } + if (newImage == NULL) return; + newImage->Addref(); + if (newImage->hardDrive && (driveIndex < 2)) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_HD_FDPOSITION")); + } + else if (!newImage->hardDrive && (driveIndex >= 2)) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_FD_HDPOSITION")); + } + else { + if (AttachToBiosAndIdeByIndex(newImage, (unsigned char)driveIndex, (unsigned char)ide_index, ide_slave)) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_MOUNT_NUMBER"), drive - '0', (!paths.empty()) ? (wpcolon&&paths[0].length()>1&&paths[0].c_str()[0]==':'?paths[0].c_str()+1:paths[0].c_str()) : (el_torito != ""?"El Torito floppy drive":(type == "ram"?"RAM drive":"-"))); + if (!paths.empty()) { + const char *ext = strrchr(paths[0].c_str(), '.'); + if (ext != NULL) { + if ((!IS_PC98_ARCH && strcasecmp(ext,".img") && strcasecmp(ext,".ima") && strcasecmp(ext,".vhd") && strcasecmp(ext,".qcow2")) || + (IS_PC98_ARCH && strcasecmp(ext,".hdi") && strcasecmp(ext,".nhd") && strcasecmp(ext,".img") && strcasecmp(ext,".ima"))){ + WriteOut(MSG_Get("PROGRAM_MOUNT_UNSUPPORTED_EXT"), ext); + } + } + } + if (swapInDisksSpecificDrive == driveIndex || swapInDisksSpecificDrive == -1) { + for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { + if (diskSwap[si] != NULL) { + diskSwap[si]->Release(); + diskSwap[si] = NULL; + } + } + swapInDisksSpecificDrive = -1; + if (paths.size() > 1) { + /* slot 0 is the image we already assigned */ + diskSwap[0] = newImage; + diskSwap[0]->Addref(); + swapPosition = 0; + swapInDisksSpecificDrive = driveIndex; + + for (size_t si=1;si < MAX_SWAPPABLE_DISKS && si < paths.size();si++) { + imageDisk *img = MountImageNone(paths[si].c_str(), NULL, sizes, reserved_cylinders, roflag); + + if (img != NULL) { + diskSwap[si] = img; + diskSwap[si]->Addref(); + } + } + } + } + } + else { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_NUMBER")); + } + } + newImage->Release(); + return; + } + else { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_FSTYPE")); + return; + } + + return; + } + + private: + bool ReadSizeParameter(const std::string &str_size, const std::string &str_chs, const std::string &type, Bitu sizes[]) { + bool isCHS = false; + const char * scan; + if (str_chs.size() != 0) { + if (str_size.size() != 0) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_SIZE_CHS")); + return false; + } + isCHS = true; + scan = str_chs.c_str(); + } + else if (str_size.size() != 0) { + scan = str_size.c_str(); + } + else { + //nothing specified, so automatic size detection + return true; + } + char number[20]; + Bitu index = 0; + Bitu count = 0; + int val; + + //scan through input string + while (*scan) { + //separate string by ',' + if (*scan == ',') { + number[index] = 0; //add null char + val = atoi(number); + if (val <= 0) { + //out of range + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_SIZE")); + return false; + } + sizes[count++] = (unsigned int)val; + index = 0; + if (count == 4) { + //too many commas + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_SIZE")); + return false; + } + } + else if (index >= 19) { + //number too large (too many characters, anyway) + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_SIZE")); + return false; + } + else { + number[index++] = *scan; + } + scan++; + } + number[index] = 0; + val = atoi(number); + if (val <= 0) { + //out of range + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_SIZE")); + return false; + } + sizes[count++] = (unsigned int)val; + if (isCHS) { + if (count == 3) sizes[count++] = 512; //set sector size automatically + if (count != 4) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_SIZE")); + return false; + } + Bitu temp = sizes[3]; //hold on to sector size temporarily + sizes[3] = sizes[0]; //put cylinders in the right spot + sizes[0] = temp; //put sector size in the right spot + temp = sizes[2]; //hold on to sectors temporarily + sizes[2] = sizes[1]; //put heads in the right spot + sizes[1] = temp; //put sectors in the right spot + } + if (!((type == "ram" && count == 1) || count == 4)) { + //ram drives require 1 or 4 numbers + //other drives require 4 numbers + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_SIZE")); + return false; + } + return true; + } + bool ParseFiles(std::string &commandLine, std::vector &paths, bool nodef) { + char drive=commandLine[0]; + bool nocont=false; + int num = 0; + while (!nocont&&cmd->FindCommand((unsigned int)(paths.size() + 1 - num), commandLine)) { + bool usedef=false; + if (!cmd->FindCommand((unsigned int)(paths.size() + 2 - num), commandLine) || !commandLine.size()) { + if (!nodef && !paths.size()) { + commandLine="IMGMAKE.IMG"; + usedef=true; + } + else break; + } + if (commandLine == "empty") { + /* special name */ + paths.push_back(commandLine); + continue; + } +#if defined (WIN32) || defined(OS2) + // Windows: Workaround for LaunchBox + if (commandLine.size()>4 && commandLine[0]=='\'' && toupper(commandLine[1])>='A' && toupper(commandLine[1])<='Z' && commandLine[2]==':' && (commandLine[3]=='/' || commandLine[3]=='\\') && commandLine.back()=='\'') + commandLine = commandLine.substr(1, commandLine.size()-2); + else if (!paths.size() && commandLine.size()>3 && commandLine[0]=='\'' && toupper(commandLine[1])>='A' && toupper(commandLine[1])<='Z' && commandLine[2]==':' && (commandLine[3]=='/' || commandLine[3]=='\\')) { + std::string line=cmd->GetRawCmdline(); + trim(line); + std::size_t space=line.find(' '); + if (space!=std::string::npos) { + line=line.substr(space); + trim(line); + std::size_t found=line.back()=='\''?line.find_last_of('\''):line.rfind("' "); + if (found!=std::string::npos&&found>2) { + commandLine=line.substr(1, found-1); + nocont=true; + if (line.size()>3 && !strcasecmp(line.substr(line.size()-3).c_str(), " -u")) Unmount(drive); + } + } + } +#else + // Linux: Convert backslash to forward slash + if (commandLine.size() > 0) { + for (size_t i = 0; i < commandLine.size(); i++) { + if (commandLine[i] == '\\') + commandLine[i] = '/'; + } + } +#endif + + if (!strcasecmp(commandLine.c_str(), "-u")) { + bool exist = toupper(drive) - 'A' == DOS_GetDefaultDrive(); + Unmount(drive); + return exist && drive - 'A' != DOS_GetDefaultDrive(); + } + + char fullname[CROSS_LEN]; + char tmp[CROSS_LEN]; + bool useh = false, readonly = wpcolon&&commandLine.length()>1&&commandLine[0]==':'; + safe_strncpy(tmp, readonly?commandLine.c_str()+1:commandLine.c_str(), CROSS_LEN); + pref_struct_stat test; +#if defined(WIN32) + ht_stat_t htest; + const host_cnv_char_t* host_name = CodePageGuestToHost(tmp); + if (pref_stat(tmp, &test) && (host_name == NULL || ht_stat(host_name, &htest))) { + if (pref_stat(tmp, &test) && host_name != NULL) useh = true; +#else + pref_struct_stat htest; + if (pref_stat(tmp, &test)) { +#endif + //See if it works if the ~ are written out + std::string homedir(commandLine); + Cross::ResolveHomedir(homedir); + if (!pref_stat(homedir.c_str(), &test)) { + commandLine = homedir; + } + else { + // convert dosbox-x filename to system filename + uint8_t dummy; + temp_line = tmp; + int res = get_expanded_files(temp_line, paths, readonly); + if (res) { + num += res - 1; + temp_line = paths[0]; + continue; + } else if ((!DOS_MakeName(tmp, fullname, &dummy) || strncmp(Drives[dummy]->GetInfo(), "local directory", 15)) && !qmount) { + if (_memFileDirectory.contains(tmp) || std::string(tmp).find(".cdrom") != std::string::npos) { paths.push_back(tmp); continue; } + else WriteOut(MSG_Get(usedef?"PROGRAM_IMGMOUNT_DEFAULT_NOT_FOUND":"PROGRAM_IMGMOUNT_NON_LOCAL_DRIVE")); + return true; } - } - } - - /* now that the image is attached to INT 13h the INT 13 image can use it now */ - if (image->class_id == imageDisk::ID_INT13) { - imageDiskINT13Drive *x = (imageDiskINT13Drive*)image; - x->enable_int13 = true; - LOG(LOG_MISC,LOG_DEBUG)("INT 13 image enabling calling"); - } - } - return true; - } - - imageDisk* MountImageNoneRam(Bitu sizes[], const int reserved_cylinders, const bool forceFloppy) { - imageDiskMemory* dsk = CreateRamDrive(sizes, reserved_cylinders, forceFloppy, this); - if (dsk == NULL) return NULL; - //formatting might fail; just log the failure and continue - uint8_t ret = dsk->Format(); - if (ret != 0x00) { - LOG_MSG("Warning: could not format RAM drive - error code %u\n", (unsigned int)ret); - } - return dsk; - } - - bool MountRam(Bitu sizes[], const char drive, const signed char ide_index, const bool ide_slave, bool roflag) { - if (Drives[drive - 'A']) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); - return false; - } - - //by default, make a floppy disk if A: or B: is specified (still makes a hard drive if not a recognized size) - imageDiskMemory* dsk = CreateRamDrive(sizes, 0, (drive - 'A') < 2 && sizes[0] == 0, this); - if (dsk == NULL) return false; - if (dsk->Format() != 0x00) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE")); - delete dsk; - return false; - } - dsk->Addref(); - DOS_Drive* newDrive = new fatDrive(dsk, options); - if (roflag) newDrive->readonly=true; - dsk->Release(); - if (!(dynamic_cast(newDrive))->created_successfully) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE")); - delete newDrive; //this executes dsk.Release() which executes delete dsk - return false; - } - - AddToDriveManager(drive, newDrive, dsk->hardDrive ? 0xF8 : 0xF0); - DOS_EnableDriveMenu(drive); - - lastmount = drive; - if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_RAMDRIVE"), drive); - - AttachToBiosAndIdeByLetter(dsk, drive, (unsigned char)ide_index, ide_slave); - - return true; - } - - void AddToDriveManager(const char drive, DOS_Drive* imgDisk, const uint8_t mediaid) const { - std::vector imgDisks = { imgDisk }; - AddToDriveManager(drive, imgDisks, mediaid); - } - - void AddToDriveManager(const char drive, const std::vector &imgDisks, const uint8_t mediaid) const { - std::vector::size_type ct; - - // Update DriveManager - for (ct = 0; ct < imgDisks.size(); ct++) { - DriveManager::AppendDisk(drive - 'A', imgDisks[ct]); - } - DriveManager::InitializeDrive(drive - 'A'); - - // Set the correct media byte in the table - mem_writeb(Real2Phys(dos.tables.mediaid) + ((unsigned int)drive - 'A') * dos.tables.dpb_size, mediaid); - - /* Command uses dta so set it to our internal dta */ - RealPt save_dta = dos.dta(); - dos.dta(dos.tables.tempdta); - - for (ct = 0; ct < imgDisks.size(); ct++) { - DriveManager::CycleDisks(drive - 'A', (ct == (imgDisks.size() - 1))); - - char root[7] = { drive, ':', '\\', '*', '.', '*', 0 }; - DOS_FindFirst(root, DOS_ATTR_VOLUME); // force obtaining the label and saving it in dirCache - } - dos.dta(save_dta); - - } - + + localDrive *ldp = dynamic_cast(Drives[dummy]); + if (ldp == NULL) { + if (!qmount) WriteOut(MSG_Get(usedef?"PROGRAM_IMGMOUNT_DEFAULT_NOT_FOUND":"PROGRAM_IMGMOUNT_FILE_NOT_FOUND")); + return false; + } + ldp->GetSystemFilename(readonly?tmp+1:tmp, fullname); + if (readonly) tmp[0]=':'; + commandLine = tmp; + + if (pref_stat(readonly?tmp+1:tmp, &test)) { + temp_line = readonly?tmp+1:tmp; + int res = get_expanded_files(temp_line, paths, readonly); + if (res) { + num += res - 1; + temp_line = paths[0]; + continue; + } else if (!qmount) + WriteOut(MSG_Get(usedef?"PROGRAM_IMGMOUNT_DEFAULT_NOT_FOUND":"PROGRAM_IMGMOUNT_FILE_NOT_FOUND")); + return false; + } + } + } + if (S_ISDIR(useh?htest.st_mode:test.st_mode)&&!usedef) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_MOUNT")); + return false; + } + paths.push_back(commandLine); + } + return false; + } + + bool Unmount(char &letter) { + letter = toupper(letter); + if (isalpha(letter)) { /* if it's a drive letter, then traditional usage applies */ + int i_drive = letter - 'A'; + if (i_drive < DOS_DRIVES && i_drive >= 0 && Drives[i_drive]) { + //if drive A: or B: + if (i_drive <= 1) + FDC_UnassignINT13Disk(i_drive); + + //get reference to image and cdrom before they are possibly destroyed + const bool partitionMount = Drives[i_drive]->partitionMount; + const fatDrive* drive = dynamic_cast(Drives[i_drive]); + imageDisk* image = drive ? drive->loadedDisk : NULL; + const isoDrive* cdrom = dynamic_cast(Drives[i_drive]); + + switch (DriveManager::UnmountDrive(i_drive)) { + case 0: //success + { + //detach hard drive or floppy drive from bios and ide controller + if (image && !partitionMount) DetachFromBios(image); + /* If the drive letter is also a CD-ROM drive attached to IDE, then let the IDE code know */ + if (cdrom) IDE_CDROM_Detach(i_drive); + Drives[i_drive] = NULL; + DOS_EnableDriveMenu(i_drive+'A'); + if (i_drive == DOS_GetDefaultDrive()) + DOS_SetDrive(toupper('Z') - 'A'); + if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_UMOUNT_SUCCESS"), letter); +#if !defined(OSFREE) + if (cdrom) + for (int drv=0; drv<2; drv++) + if (Drives[drv]) { + fatDrive *fdp = dynamic_cast(Drives[drv]); + if (fdp&&fdp->opts.mounttype==1&&letter==fdp->el.CDROM_drive) { + char drive='A'+drv; + Unmount(drive); + } + } +#endif + if (i_drive < MAX_DISK_IMAGES && imageDiskList[i_drive]) { + delete imageDiskList[i_drive]; + imageDiskList[i_drive] = NULL; + } + if (swapInDisksSpecificDrive == i_drive) { + for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { + if (diskSwap[si] != NULL) { + diskSwap[si]->Release(); + diskSwap[si] = NULL; + } + } + swapInDisksSpecificDrive = -1; + } + return true; + } + case 1: + if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_UMOUNT_NO_VIRTUAL")); + return false; + case 2: + if (!qmount) WriteOut(MSG_Get("MSCDEX_ERROR_MULTIPLE_CDROMS")); + return false; + default: + return false; + } + } + else { + if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED"), letter); + return false; + } + } + else if (isdigit(letter)) { /* DOSBox-X: drives mounted by number (INT 13h) can be unmounted this way */ + int index = letter - '0'; + + //detach hard drive or floppy drive from bios and ide controller + if (index < MAX_DISK_IMAGES && imageDiskList[index]) { + if (index > 1) IDE_Hard_Disk_Detach(index); + imageDiskList[index]->Release(); + imageDiskList[index] = NULL; + imageDiskChange[index] = true; + if (swapInDisksSpecificDrive == index) { + for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { + if (diskSwap[si] != NULL) { + diskSwap[si]->Release(); + diskSwap[si] = NULL; + } + } + swapInDisksSpecificDrive = -1; + } + WriteOut(MSG_Get("PROGRAM_MOUNT_UMOUNT_NUMBER_SUCCESS"), letter); + return true; + } + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER"), index); + return false; + } + else { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_UMOUNT_USAGE")); + return false; + } + } + + bool PrepElTorito(const std::string& type, const char &el_torito_cd_drive, unsigned long &el_torito_floppy_base, unsigned char &el_torito_floppy_type) { + el_torito_floppy_base = ~0UL; + el_torito_floppy_type = 0xFF; + + unsigned char entries[2048], *entry, ent_num = 0; + int header_platform = -1, header_count = 0; + bool header_final = false; + int header_more = -1; + + /* must be valid drive letter, C to Z */ + if (!isalpha(el_torito_cd_drive) || el_torito_cd_drive < 'C') { + WriteOut(MSG_Get("PROGRAM_ELTORITO_LETTER")); + return false; + } + + /* drive must not exist (as a hard drive) */ + if (imageDiskList[el_torito_cd_drive - 'A'] != NULL) { + WriteOut(MSG_Get("PROGRAM_ELTORITO_DRIVE_EXISTS")); + return false; + } + + bool GetMSCDEXDrive(unsigned char drive_letter, CDROM_Interface **_cdrom); + + /* get the CD-ROM drive */ + CDROM_Interface *src_drive = NULL; + if (!GetMSCDEXDrive(el_torito_cd_drive - 'A', &src_drive)) { + WriteOut(MSG_Get("PROGRAM_ELTORITO_NOT_CDDRIVE")); + return false; + } + + /* FIXME: We only support the floppy emulation mode at this time. + * "Superfloppy" or hard disk emulation modes are not yet implemented. + * This mode will never support "no emulation" boot. */ + if (type != "floppy") { + WriteOut(MSG_Get("PROGRAM_ELTORITO_REQUIRE_FLOPPY")); + src_drive->Release(); + return false; + } + + /* Okay. Step #1: Scan the volume descriptors for the Boot Record. */ + unsigned long el_torito_base = 0, boot_record_sector = 0; + if (!ElTorito_ScanForBootRecord(src_drive, boot_record_sector, el_torito_base)) { + WriteOut(MSG_Get("PROGRAM_ELTORITO_NO_BOOT_RECORD")); + src_drive->Release(); + return false; + } + + LOG_MSG("El Torito emulation: Found ISO 9660 Boot Record in sector %lu, pointing to sector %lu\n", + boot_record_sector, el_torito_base); + + /* Step #2: Parse the records. Each one is 32 bytes long */ + if (!src_drive->ReadSectorsHost(entries, false, el_torito_base, 1)) { + WriteOut(MSG_Get("PROGRAM_ELTORITO_ENTRY_UNREADABLE")); + src_drive->Release(); + return false; + } + + /* for more information about what this loop is doing, read: + * http://download.intel.com/support/motherboards/desktop/sb/specscdrom.pdf + */ + /* FIXME: Somebody find me an example of a CD-ROM with bootable code for both x86, PowerPC, and Macintosh. + * I need an example of such a CD since El Torito allows multiple "headers" */ + /* TODO: Is it possible for this record list to span multiple sectors? */ + for (ent_num = 0; ent_num < (2048 / 0x20); ent_num++) { + entry = entries + (ent_num * 0x20); + + if (memcmp(entry, "\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0\0", 32) == 0) + break; + + if (entry[0] == 0x01/*header*/) { + if (!ElTorito_ChecksumRecord(entry)) { + LOG_MSG("Warning: El Torito checksum error in header(0x01) entry\n"); + continue; + } + + if (header_count != 0) { + LOG_MSG("Warning: El Torito has more than one Header/validation entry\n"); + continue; + } + + if (header_final) { + LOG_MSG("Warning: El Torito has an additional header past the final header\n"); + continue; + } + + header_more = -1; + header_platform = entry[1]; + LOG_MSG("El Torito entry: first header platform=0x%02x\n", header_platform); + header_count++; + } + else if (entry[0] == 0x90/*header, more follows*/ || entry[0] == 0x91/*final header*/) { + if (header_final) { + LOG_MSG("Warning: El Torito has an additional header past the final header\n"); + continue; + } + + header_final = (entry[0] == 0x91); + header_more = (int)(((unsigned int)entry[2]) + (((unsigned int)entry[3]) << 8u)); + header_platform = entry[1]; + LOG_MSG("El Torito entry: first header platform=0x%02x more=%u final=%u\n", header_platform, header_more, header_final); + header_count++; + } + else { + if (header_more == 0) { + LOG_MSG("El Torito entry: Non-header entry count expired, ignoring record 0x%02x\n", entry[0]); + continue; + } + else if (header_more > 0) { + header_more--; + } + + if (entry[0] == 0x44) { + LOG_MSG("El Torito entry: ignoring extension record\n"); + } + else if (entry[0] == 0x00/*non-bootable*/) { + LOG_MSG("El Torito entry: ignoring non-bootable record\n"); + } + else if (entry[0] == 0x88/*bootable*/) { + if (header_platform == 0x00/*x86*/) { + unsigned char mediatype = entry[1] & 0xF; + unsigned short load_segment = ((unsigned int)entry[2]) + (((unsigned int)entry[3]) << 8); + unsigned char system_type = entry[4]; + unsigned short sector_count = ((unsigned int)entry[6]) + (((unsigned int)entry[7]) << 8); + unsigned long load_rba = ((unsigned int)entry[8]) + (((unsigned int)entry[9]) << 8) + + (((unsigned int)entry[10]) << 16) + (((unsigned int)entry[11]) << 24); + + LOG_MSG("El Torito entry: bootable x86 record mediatype=%u load_segment=0x%04x " + "system_type=0x%02x sector_count=%u load_rba=%lu\n", + mediatype, load_segment, system_type, sector_count, load_rba); + + /* already chose one, ignore */ + if (el_torito_floppy_base != ~0UL) + continue; + + if (load_segment != 0 && load_segment != 0x7C0) + LOG_MSG("El Torito boot warning: load segments other than 0x7C0 not supported yet\n"); + if (sector_count != 1) + LOG_MSG("El Torito boot warning: sector counts other than 1 are not supported yet\n"); + + if (mediatype < 1 || mediatype > 3) { + LOG_MSG("El Torito boot entry: media types other than floppy emulation not supported yet\n"); + continue; + } + + el_torito_floppy_base = load_rba; + el_torito_floppy_type = mediatype; + } + else { + LOG_MSG("El Torito entry: ignoring bootable non-x86 (platform_id=0x%02x) record\n", header_platform); + } + } + else { + LOG_MSG("El Torito entry: ignoring unknown record ID %02x\n", entry[0]); + } + } + } + + if (el_torito_floppy_type == 0xFF || el_torito_floppy_base == ~0UL) { + WriteOut(MSG_Get("PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY")); + src_drive->Release(); + return false; + } + + src_drive->Release(); + return true; + } + +#if !defined(OSFREE) + bool MountPartitionFat(const char drive, const int src_bios_disk) { + unsigned char driveIndex = drive - 'A'; + + /* NTS: IBM PC systems: Hard disk partitions must start at C: or higher. + * PC-98 systems: Any drive letter is valid, A: can be a hard drive. */ + if ((!IS_PC98_ARCH && driveIndex < 2) || driveIndex >= 26) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_LETTER")); + return false; + } + + if (Drives[driveIndex]) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); + return false; + } + + if (src_bios_disk < 2/*no, don't allow partitions on floppies!*/ || src_bios_disk >= MAX_DISK_IMAGES || imageDiskList[src_bios_disk] == NULL) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_NOT_ASSIGNED")); + return false; + } + + /* FIXME: IMGMOUNT and MOUNT -u are so hard-coded around C: and BIOS device indexes that some confusion may happen + * if a partition is C: mounted from, say, BIOS device 0x81 and the wrong thing may get unmounted and detached. + * So for sanity reasons, do not allow mounting to a drive letter if a BIOS disk image WOULD normally be + * associated with it. This is a mess inherited from back when this code forked from DOSBox SVN, because + * DOSBox SVN makes these hardcoded assumptions. */ + if (driveIndex < MAX_DISK_IMAGES && imageDiskList[driveIndex] != NULL) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_CHOOSE_LETTER")); + return false; + } + + DOS_Drive* newDrive = new fatDrive(imageDiskList[src_bios_disk], options); + if (!(dynamic_cast(newDrive))->created_successfully) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE")); + return false; + } + + newDrive->partitionMount = true; + AddToDriveManager(drive, newDrive, 0xF0); + DOS_EnableDriveMenu(drive); + + lastmount = drive; + return true; + } +#endif + +#if !defined(OSFREE) + bool MountElToritoFat(const char drive, const Bitu sizes[], const char el_torito_cd_drive, const unsigned long el_torito_floppy_base, const unsigned char el_torito_floppy_type) { + unsigned char driveIndex = drive - 'A'; + + (void)sizes;//UNUSED + + if (driveIndex > 1) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_LETTER")); + return false; + } + + if (Drives[driveIndex]) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); + return false; + } + + imageDisk * newImage = new imageDiskElToritoFloppy((unsigned char)el_torito_cd_drive, el_torito_floppy_base, el_torito_floppy_type); + newImage->Addref(); + + DOS_Drive* newDrive = new fatDrive(newImage, options); + if (!(dynamic_cast(newDrive))->created_successfully) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE")); + newImage->Release(); //fatDrive calls Addref, and this will release newImage if fatDrive doesn't use it + return false; + } + newImage->Release(); //fatDrive calls Addref, and this will release newImage if fatDrive doesn't use it + + AddToDriveManager(drive, newDrive, 0xF0); + AttachToBiosByLetter(newImage, drive); + DOS_EnableDriveMenu(drive); + + lastmount = drive; + if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_ELTORITO"), drive); + + return true; + } +#endif + + bool unformatted = false; + bool unsupported_ext = false; + int path_no; + +#if !defined(OSFREE) + bool MountFat(Bitu sizes[], const char drive, const bool isHardDrive, const std::string &str_size, const std::vector &paths, const signed char ide_index, const bool ide_slave, const int reserved_cylinders, bool roflag) { + (void)reserved_cylinders; + if (Drives[drive - 'A']) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); + return false; + } + + for (auto i=options.begin();i!=options.end();i++) { + if ((*i) == "int13") { + char buf[32]; + + if (drive >= 'C') + sprintf(buf,"=%u",drive+0x80-'C'); + else + sprintf(buf,"=%u",drive-'A'); + + (*i) += buf; + } + } + + bool imgsizedetect = isHardDrive && sizes[0] == 0; + int mediaid = -1; + + std::vector imgDisks; + std::vector::size_type i; + std::vector::size_type ct; + + for (i = 0; i < paths.size(); i++) { + const char* errorMessage = NULL; + imageDisk* vhdImage = NULL; + imageDisk* newImage = NULL; + bool ro=false; + + //detect hard drive geometry + if (paths[i] == "empty") { + errorMessage = "empty file not supported for drive letter mount\n"; + } + else if (imgsizedetect) { + bool skipDetectGeometry = false; + sizes[0] = 0; + sizes[1] = 0; + sizes[2] = 0; + sizes[3] = 0; + + /* .HDI images contain the geometry explicitly in the header. */ + if (str_size.size() == 0) { + const char *ext = strrchr(paths[i].c_str(), '.'); + if (ext != NULL) { + if (!strcasecmp(ext, ".hdi")) { + skipDetectGeometry = true; + } + else if (!strcasecmp(ext, ".nhd")) { + skipDetectGeometry = true; + } + else if (!strcasecmp(ext, ".nfd")) { + skipDetectGeometry = true; + } + //for all vhd files where the system will autodetect the chs values, + else if (!strcasecmp(ext, ".vhd")) { + ro=wpcolon&&paths[i].length()>1&&paths[i].c_str()[0]==':'; + //load the file with imageDiskVHD, which supports fixed/dynamic/differential disks + imageDiskVHD::ErrorCodes ret = imageDiskVHD::Open(ro?paths[i].c_str()+1:paths[i].c_str(), ro||roflag, &vhdImage); + switch (ret) { + case imageDiskVHD::UNSUPPORTED_WRITE: + options.emplace_back("readonly"); + case imageDiskVHD::OPEN_SUCCESS: { + skipDetectGeometry = true; + const imageDiskVHD* vhdDisk = dynamic_cast(vhdImage); + if (vhdDisk != NULL) { + LOG_MSG("VHD image detected SS,S,H,C: %u,%u,%u,%u", + (uint32_t)vhdDisk->sector_size, (uint32_t)vhdDisk->sectors, (uint32_t)vhdDisk->heads, (uint32_t)vhdDisk->cylinders); + if (vhdDisk->cylinders>1023) LOG_MSG("WARNING: cylinders>1023, INT13 will not work unless extensions are used"); + if(vhdDisk->GetVHDType() == imageDiskVHD::VHD_TYPE_FIXED) LOG_MSG("VHD is a fixed image"); + if(vhdDisk->GetVHDType() == imageDiskVHD::VHD_TYPE_DYNAMIC) LOG_MSG("VHD is a dynamic image"); + if(vhdDisk->GetVHDType() == imageDiskVHD::VHD_TYPE_DIFFERENCING) LOG_MSG("VHD is a differencing image"); + } + break; + } + case imageDiskVHD::ERROR_OPENING: + errorMessage = MSG_Get("VHD_ERROR_OPENING"); break; + case imageDiskVHD::INVALID_DATA: + errorMessage = MSG_Get("VHD_INVALID_DATA"); break; + case imageDiskVHD::UNSUPPORTED_TYPE: + errorMessage = MSG_Get("VHD_UNSUPPORTED_TYPE"); break; + case imageDiskVHD::ERROR_OPENING_PARENT: + errorMessage = MSG_Get("VHD_ERROR_OPENING_PARENT"); break; + case imageDiskVHD::PARENT_INVALID_DATA: + errorMessage = MSG_Get("VHD_PARENT_INVALID_DATA"); break; + case imageDiskVHD::PARENT_UNSUPPORTED_TYPE: + errorMessage = MSG_Get("VHD_PARENT_UNSUPPORTED_TYPE"); break; + case imageDiskVHD::PARENT_INVALID_MATCH: + errorMessage = MSG_Get("VHD_PARENT_INVALID_MATCH"); break; + case imageDiskVHD::PARENT_INVALID_DATE: + errorMessage = MSG_Get("VHD_PARENT_INVALID_DATE"); break; + default: break; + } + } + else if(!strcasecmp(ext, ".qcow2")) { + ro = wpcolon && paths[i].length() > 1 && paths[i].c_str()[0] == ':'; + const char* fname = ro ? paths[i].c_str() + 1 : paths[i].c_str(); + FILE* newDisk = fopen_lock(fname, ro ? "rb" : "rb+", ro); + if(!newDisk) { + if(!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_OPEN_ERROR"), fname); + return false; + } + QCow2Image::QCow2Header qcow2_header = QCow2Image::read_header(newDisk); + // uint64_t sectors; /* unused */ + sizes[0] = 512; // default sector size + if(qcow2_header.magic == QCow2Image::magic && (qcow2_header.version == 2 || qcow2_header.version == 3)) { + uint32_t cluster_size = 1u << qcow2_header.cluster_bits; + if((sizes[0] < 512) || ((cluster_size % sizes[0]) != 0)) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_SECTORSIZE"), cluster_size); + return false; + } + skipDetectGeometry = true; + DetectGeometry(sizes, qcow2_header.size); // Derive geometry from image size, since qcow2 doesn't have CHS values in the header + // setbuf(newDisk, NULL); + newImage = new QCow2Disk(qcow2_header, newDisk, fname, qcow2_header.size, (uint32_t)sizes[0], (qcow2_header.size > 2880 * 1024)); + if(newImage) { + LOG_MSG("IMGMOUNT: qcow2 image mounted (experimental)"); + newImage->sector_size = sizes[0]; // sector size + newImage->sectors = sizes[1]; // sectors + newImage->heads = sizes[2]; // heads + newImage->cylinders = sizes[3]; // cylinders + uint64_t LBA = newImage->getLBA(); + if(!int13_enable_48bitLBA && (LBA > 0x0FFFFFFF)) + LOG_MSG("Warning: Disk size (%lf GB) exceeds 128GB limit for 28-bit LBA. You may need to enable 48-bit LBA support.", (double)newImage->LBA * 512.0 / (1024.0 * 1024 * 1024)); + } + } + else { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_QCOW2_INVALID"), fname); + fclose(newDisk); + newImage = NULL; + } + } + else if (!strcasecmp(ext,".img") || !strcasecmp(ext,".ima")){ // Raw MFM image format is typically .img or .ima + unsupported_ext = false; + } + else { + LOG_MSG("IMGMOUNT: Perhaps unsupported extension %s", ext); + unsupported_ext = true; + path_no = i; + } + } + } + if (!skipDetectGeometry && !DetectGeometry(NULL, paths[i].c_str(), sizes)) { + errorMessage = MSG_Get("PROGRAM_IMGMOUNT_GEOMETRY_ERROR"); + } + } + + if (!errorMessage) { + DOS_Drive* newDrive = NULL; + if (vhdImage) { + newDrive = new fatDrive(vhdImage, options); + strcpy(newDrive->info, "fatDrive "); + strcat(newDrive->info, ro?paths[i].c_str()+1:paths[i].c_str()); + vhdImage = NULL; + } + else if(newImage) { + newDrive = new fatDrive(newImage, options); + strcpy(newDrive->info, "fatDrive "); + strcat(newDrive->info, ro ? paths[i].c_str() + 1 : paths[i].c_str()); + LOG_MSG("IMGMOUNT: qcow2 image mounted (experimental)"); + LOG_MSG("IMGMOUNT: qcow2 SS,S,H,C: %u,%u,%u,%u", + (uint32_t)newImage->sector_size, (uint32_t)newImage->sectors, (uint32_t)newImage->heads, (uint32_t)newImage->cylinders); + newImage = NULL; + } + else { + if (roflag) options.emplace_back("readonly"); + newDrive = new fatDrive(paths[i].c_str(), (uint32_t)sizes[0], (uint32_t)sizes[1], (uint32_t)sizes[2], (uint32_t)sizes[3], options); + } + imgDisks.push_back(newDrive); + fatDrive* fdrive=dynamic_cast(newDrive); + if (!fdrive->created_successfully) { + errorMessage = MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE"); + if (fdrive->req_ver_major>0) { + static char ver_msg[150]; + sprintf(ver_msg, MSG_Get("PROGRAM_IMGMOUNT_DOS_VERSION"), fdrive->req_ver_major, fdrive->req_ver_minor, errorMessage); + errorMessage = ver_msg; + } + } else { + if (imgDisks.size() == 1) mediaid = (int)((unsigned char)fdrive->GetMediaByte()); + if ((vhdImage&&ro)||roflag) fdrive->readonly=true; + } + unformatted = fdrive->unformatted; + } + if (errorMessage) { + if (!qmount) WriteOut(errorMessage); + for (ct = 0; ct < imgDisks.size(); ct++) { + delete imgDisks[ct]; + } + return false; + } + } + + AddToDriveManager(drive, imgDisks, (mediaid >= 0xF0) ? mediaid : (isHardDrive ? 0xF8 : 0xF0)); + DOS_EnableDriveMenu(drive); + + std::string tmp(wpcolon&&paths[0].length()>1&&paths[0].c_str()[0]==':'?paths[0].substr(1):paths[0]); + for (i = 1; i < paths.size(); i++) { + tmp += "; " + (wpcolon&&paths[i].length()>1&&paths[i].c_str()[0]==':'?paths[i].substr(1):paths[i]); + } + lastmount = drive; + if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_2"), drive, tmp.c_str()); + if (unformatted) { + if(!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_NOT_FORMATTED")); + LOG_MSG("IMGMOUNT: Drive %c not formatted", drive); + } + if (unsupported_ext) { + const char *ext = strrchr(paths[path_no].c_str(), '.'); + if (ext != NULL) { + if(!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_UNSUPPORTED_EXT"), ext); + LOG_MSG("Unsupported extension %s: Mounted as raw IMG image.", ext); + } + } + unsigned char driveIndex = drive-'A'; + if (imgDisks.size() == 1 || (imgDisks.size() > 1 && driveIndex < 2 && (swapInDisksSpecificDrive == driveIndex || swapInDisksSpecificDrive == -1))) { + imageDisk* image = ((fatDrive*)imgDisks[0])->loadedDisk; + if (AttachToBiosAndIdeByLetter(image, drive, (unsigned char)ide_index, ide_slave)) { + if (swapInDisksSpecificDrive == driveIndex || swapInDisksSpecificDrive == -1) { + for (size_t si=0;si < MAX_SWAPPABLE_DISKS;si++) { + if (diskSwap[si] != NULL) { + diskSwap[si]->Release(); + diskSwap[si] = NULL; + } + } + swapInDisksSpecificDrive = -1; + if (paths.size() > 1) { + /* slot 0 is the image we already assigned */ + diskSwap[0] = image; + diskSwap[0]->Addref(); + swapPosition = 0; + swapInDisksSpecificDrive = driveIndex; + + for (size_t si=1;si < MAX_SWAPPABLE_DISKS && si < paths.size();si++) { + imageDisk *img = ((fatDrive*)imgDisks[si])->loadedDisk; + diskSwap[si] = img; + diskSwap[si]->Addref(); + } + } + } + } + + /* now that the image is attached to INT 13h the INT 13 image can use it now */ + if (image->class_id == imageDisk::ID_INT13) { + imageDiskINT13Drive *x = (imageDiskINT13Drive*)image; + x->enable_int13 = true; + LOG(LOG_MISC,LOG_DEBUG)("INT 13 image enabling calling"); + } + } + return true; + } +#endif + +#if !defined(OSFREE) + imageDisk* MountImageNoneRam(Bitu sizes[], const int reserved_cylinders, const bool forceFloppy) { + imageDiskMemory* dsk = CreateRamDrive(sizes, reserved_cylinders, forceFloppy, this); + if (dsk == NULL) return NULL; + //formatting might fail; just log the failure and continue + uint8_t ret = dsk->Format(); + if (ret != 0x00) { + LOG_MSG("Warning: could not format RAM drive - error code %u\n", (unsigned int)ret); + } + return dsk; + } +#endif + +#if !defined(OSFREE) + bool MountRam(Bitu sizes[], const char drive, const signed char ide_index, const bool ide_slave, bool roflag) { + if (Drives[drive - 'A']) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); + return false; + } + + //by default, make a floppy disk if A: or B: is specified (still makes a hard drive if not a recognized size) + imageDiskMemory* dsk = CreateRamDrive(sizes, 0, (drive - 'A') < 2 && sizes[0] == 0, this); + if (dsk == NULL) return false; + if (dsk->Format() != 0x00) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE")); + delete dsk; + return false; + } + dsk->Addref(); + DOS_Drive* newDrive = new fatDrive(dsk, options); + if (roflag) newDrive->readonly=true; + dsk->Release(); + if (!(dynamic_cast(newDrive))->created_successfully) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_CANT_CREATE")); + delete newDrive; //this executes dsk.Release() which executes delete dsk + return false; + } + + AddToDriveManager(drive, newDrive, dsk->hardDrive ? 0xF8 : 0xF0); + DOS_EnableDriveMenu(drive); + + lastmount = drive; + if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_RAMDRIVE"), drive); + + AttachToBiosAndIdeByLetter(dsk, drive, (unsigned char)ide_index, ide_slave); + + return true; + } +#endif + + void AddToDriveManager(const char drive, DOS_Drive* imgDisk, const uint8_t mediaid) const { + std::vector imgDisks = { imgDisk }; + AddToDriveManager(drive, imgDisks, mediaid); + } + + void AddToDriveManager(const char drive, const std::vector &imgDisks, const uint8_t mediaid) const { + std::vector::size_type ct; + + // Update DriveManager + for (ct = 0; ct < imgDisks.size(); ct++) { + DriveManager::AppendDisk(drive - 'A', imgDisks[ct]); + } + DriveManager::InitializeDrive(drive - 'A'); + + // Set the correct media byte in the table + mem_writeb(Real2Phys(dos.tables.mediaid) + ((unsigned int)drive - 'A') * dos.tables.dpb_size, mediaid); + + /* Command uses dta so set it to our internal dta */ + RealPt save_dta = dos.dta(); + dos.dta(dos.tables.tempdta); + + for (ct = 0; ct < imgDisks.size(); ct++) { + DriveManager::CycleDisks(drive - 'A', (ct == (imgDisks.size() - 1))); + + char root[7] = { drive, ':', '\\', '*', '.', '*', 0 }; + DOS_FindFirst(root, DOS_ATTR_VOLUME); // force obtaining the label and saving it in dirCache + } + dos.dta(save_dta); + + } + + + bool DetectGeometry_Mem(const char* fileName, Bitu sizes[]) { bool yet_detected = false, readonly = wpcolon&&strlen(fileName)>1&&fileName[0]==':'; jaffarCommon::file::MemoryFile * diskfile = _memFileDirectory.fopen(readonly?fileName+1:fileName, "rb"); @@ -6772,3525 +7018,3966 @@ return false; } } - - bool DetectGeometry(FILE * file, const char* fileName, Bitu sizes[]) { - bool yet_detected = false, readonly = wpcolon&&strlen(fileName)>1&&fileName[0]==':'; - FILE * diskfile = file==NULL?fopen64(readonly?fileName+1:fileName, "rb"):file; - #if defined(WIN32) - if (!diskfile && file==NULL) { - const host_cnv_char_t* host_name = CodePageGuestToHost(readonly?fileName+1:fileName); - if (host_name != NULL) diskfile = _wfopen(host_name, L"rb"); - } - #endif - if (!diskfile) { - return DetectGeometry_Mem(fileName, sizes); - if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_IMAGE")); - return false; - } - fseeko64(diskfile, 0L, SEEK_END); - uint32_t fcsize = (uint32_t)(ftello64(diskfile) / 512L); - uint8_t buf[512]; - #if 0 // VHD pseudo geometry should be avoided always! - // New VHD driver is capable of MBR/BPB analysis. - - // check for vhd signature - fseeko64(diskfile, -512, SEEK_CUR); - if (fread(buf, sizeof(uint8_t), 512, diskfile)<512) { - fclose(diskfile); - if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_IMAGE")); - return false; - } - if (!strcmp((const char*)buf, "conectix")) { - fcsize--; // skip footer (512 bytes) - sizes[0] = 512; // sector size - sizes[1] = buf[0x3b]; // sectors - sizes[2] = buf[0x3a]; // heads - sizes[3] = SDL_SwapBE16((uint16_t)(*(int16_t*)(buf + 0x38))); // cylinders - - // Do translation (?) - while ((sizes[2] < 128u) && (sizes[3] > 1023u)) { - sizes[2] <<= 1u; - sizes[3] >>= 1u; - } - - if (sizes[3]>1023) { - // Set x/255/63 - sizes[2] = 255; - sizes[3] = fcsize / sizes[2] / sizes[1]; - } - - LOG_MSG("VHD image detected: %u,%u,%u,%u", - (unsigned int)sizes[0], (unsigned int)sizes[1], (unsigned int)sizes[2], (unsigned int)sizes[3]); - if (sizes[3]>1023) LOG_MSG("WARNING: cylinders>1023, INT13 will not work unless extensions are used"); - yet_detected = true; - } - #endif - fseeko64(diskfile, 0L, SEEK_SET); - if (fread(buf, sizeof(uint8_t), 512, diskfile)<512) { - fclose(diskfile); - if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_IMAGE")); - return false; - } - if (file==NULL) fclose(diskfile); - // check MBR signature for unknown images - if (!yet_detected && ((buf[510] != 0x55) || (buf[511] != 0xaa))) { - if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_GEOMETRY")); - return false; - } - // check MBR partition entry 1 - if (!yet_detected) - yet_detected = DetectMFMsectorPartition(buf, fcsize, sizes); - - // Try bximage disk geometry - // bximage flat images should already be detected by - // DetectMFMSectorPartition(), not sure what this adds... - if (!yet_detected) { - yet_detected = DetectBximagePartition(fcsize, sizes); - } - - uint8_t ptype = buf[0x1c2]; // Location of DOS 3.3+ partition type - bool assume_lba = false; - - /* If the first partition is a Windows 95 FAT32 (LBA) type partition, and we failed to detect, - * then assume LBA and make up a geometry */ - if (!yet_detected && (ptype == 0x0C/*FAT32+LBA*/ || ptype == 0x0E/*FAT16+LBA*/)) { - yet_detected = 1; - assume_lba = true; - LOG_MSG("Failed to autodetect geometry, assuming LBA approximation based on first partition type (FAT with LBA)"); - } - - /* If the MBR has only a partition table, but the part that normally contains executable - * code is all zeros. To avoid false negatives, check only the first 0x20 bytes since - * at boot time executable code must reside there to do something, and many of these - * disk images while they ARE mostly zeros, do have some extra nonzero bytes immediately - * before the partition table at 0x1BE. - * - * Modern FAT32 generator tools and older digital cameras will format FAT32 like this. - * These tools are unlikely to support non-LBA disks. - * - * To avoid false positives, the partition type has to be something related to FAT */ - if (!yet_detected && (ptype == 0x01 || ptype == 0x04 || ptype == 0x06 || ptype == 0x0B || ptype == 0x0C || ptype == 0x0E)) { - /* buf[] still contains MBR */ - unsigned int i=0; - while (i < 0x20 && buf[i] == 0) i++; - if (i == 0x20) { - yet_detected = 1; - assume_lba = true; - LOG_MSG("Failed to autodetect geometry, assuming LBA approximation based on first partition type (FAT-related) and lack of executable code in the MBR"); - } - } - - /* If we failed to detect, but the disk image is 4GB or larger, make up a geometry because - * IDE drives by that point were pure LBA anyway and supported C/H/S for the sake of - * backward compatibility anyway. fcsize is in 512-byte sectors. */ - if (!yet_detected && fcsize >= ((4ull*1024ull*1024ull*1024ull)/512ull)) { - yet_detected = 1; - assume_lba = true; - LOG_MSG("Failed to autodetect geometry, assuming LBA approximation based on size"); - } - - if (yet_detected && assume_lba) { - sizes[0] = 512; - sizes[1] = 63; - sizes[2] = 255; - { - const Bitu d = sizes[1]*sizes[2]; - sizes[3] = (fcsize + d - 1) / d; /* round up */ - } - } - - if (yet_detected) { - //"Image geometry auto detection: -size %u,%u,%u,%u\r\n", - //sizes[0],sizes[1],sizes[2],sizes[3]); - if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_AUTODET_VALUES"), sizes[0], sizes[1], sizes[2], sizes[3]); - return true; - } - else { - if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_GEOMETRY")); - return false; - } - } - - - - bool DetectMFMsectorPartition(uint8_t buf[], uint32_t fcsize, Bitu sizes[]) const { - // This is used for plain MFM sector format as created by IMGMAKE - // It tries to find the first partition. Addressing is in CHS format. - /* Offset | Length | Description - * +0 | 1 byte | 80 hex = active, 00 = inactive - * +1 | 3 bytes | CHS of first sector in partition - * +4 | 1 byte | partition type - * +5 | 3 bytes | CHS of last sector in partition - * +8 | 4 bytes | LBA of first sector in partition - * +C | 4 bytes | Number of sectors in partition. 0 may mean, use LBA - */ - uint8_t starthead = 0; // start head of partition - uint8_t startsect = 0; // start sector of partition - uint16_t startcyl = 0; // start cylinder of partition - //uint8_t ptype = 0; // Partition Type - uint16_t endcyl = 0; // end cylinder of partition - uint8_t heads = 0; // heads in partition - uint8_t sectors = 0; // sectors per track in partition - uint32_t pe1_size = host_readd(&buf[0x1ca]); - if ((uint32_t)host_readd(&buf[0x1fa]) != 0) { // DOS 2.0-3.21 partition table - pe1_size = host_readd(&buf[0x1fa]); - starthead = buf[0x1ef]; - startsect = (buf[0x1f0] & 0x3fu) - 1u; - startcyl = (unsigned char)buf[0x1f1] | (unsigned int)((buf[0x1f0] & 0xc0) << 2u); - endcyl = (unsigned char)buf[0x1f5] | (unsigned int)((buf[0x1f4] & 0xc0) << 2u); - //ptype = buf[0x1f2]; - heads = buf[0x1f3] + 1u; - sectors = buf[0x1f4] & 0x3fu; - } else if (pe1_size != 0) { // DOS 3.3+ partition table, starting at 0x1BE - starthead = buf[0x1bf]; - startsect = (buf[0x1c0] & 0x3fu) - 1u; - startcyl = (unsigned char)buf[0x1c1] | (unsigned int)((buf[0x1c0] & 0xc0) << 2u); - endcyl = (unsigned char)buf[0x1c5] | (unsigned int)((buf[0x1c4] & 0xc0) << 2u); - //ptype = buf[0x1c2]; - heads = buf[0x1c3] + 1u; - sectors = buf[0x1c4] & 0x3fu; - } - if (pe1_size != 0) { - uint32_t part_start = startsect + sectors * starthead + - startcyl * sectors * heads; - uint32_t part_end = heads * sectors * endcyl; - uint32_t part_len = part_end - part_start; - // partition start/end sanity check - // partition length should not exceed file length - // real partition size can be a few cylinders less than pe1_size - // if more than 1023 cylinders see if first partition fits - // into 1023, else bail. - if (/*(part_len<0) always false because unsigned || */(part_len > pe1_size) || (pe1_size > fcsize) || - ((pe1_size - part_len) / (sectors*heads)>2u) || - ((pe1_size / (heads*sectors))>1023u)) { - //LOG_MSG("start(c,h,s) %u,%u,%u",startcyl,starthead,startsect); - //LOG_MSG("endcyl %u heads %u sectors %u",endcyl,heads,sectors); - //LOG_MSG("psize %u start %u end %u",pe1_size,part_start,part_end); - } else { - sizes[0] = 512; sizes[1] = sectors; - sizes[2] = heads; sizes[3] = (uint16_t)(fcsize / (heads*sectors)); - if (sizes[3]>1023) sizes[3] = 1023; - return true; - } - } - return false; - } - - bool DetectBximagePartition(uint32_t fcsize, Bitu sizes[]) const { - // Try bximage disk geometry - uint32_t cylinders = fcsize / (16 * 63); - // Int13 only supports up to 1023 cylinders - // For mounting unknown images we could go up with the heads to 255 - if ((cylinders * 16 * 63 == fcsize) && (cylinders<1024)) { - sizes[0] = 512; sizes[1] = 63; sizes[2] = 16; sizes[3] = cylinders; - return true; - } - return false; - } - - bool MountIso(const char drive, const std::vector &paths, const signed char ide_index, const bool ide_slave) { - //mount cdrom - if (Drives[drive - 'A']) { - WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); - return false; - } - uint8_t mediaid = 0xF8; - MSCDEX_SetCDInterface(CDROM_USE_SDL, -1); - // create new drives for all images - std::vector isoDisks; - std::vector::size_type i; - std::vector::size_type ct; - for (i = 0; i < paths.size(); i++) { - int error = -1; - DOS_Drive* newDrive = new isoDrive(drive, wpcolon&&paths[i].length()>1&&paths[i].c_str()[0]==':'?paths[i].c_str()+1:paths[i].c_str(), mediaid, error, options); - isoDisks.push_back(newDrive); - if(!qmount) - switch(error) { - case 0: break; - case 1: WriteOut(MSG_Get("MSCDEX_ERROR_MULTIPLE_CDROMS")); break; - case 2: WriteOut(MSG_Get("MSCDEX_ERROR_NOT_SUPPORTED")); break; - case 3: WriteOut(MSG_Get("MSCDEX_ERROR_OPEN")); break; - case 4: WriteOut(MSG_Get("MSCDEX_TOO_MANY_DRIVES")); break; - case 5: WriteOut(MSG_Get("MSCDEX_LIMITED_SUPPORT")); break; - case 6: WriteOut(MSG_Get("MSCDEX_INVALID_FILEFORMAT")); break; - default: WriteOut(MSG_Get("MSCDEX_UNKNOWN_ERROR")); break; - } - // error: clean up and leave - if (error) { - for (ct = 0; ct < isoDisks.size(); ct++) { - delete isoDisks[ct]; - } - return false; - } - } - // Update DriveManager - for (ct = 0; ct < isoDisks.size(); ct++) { - DriveManager::AppendDisk(drive - 'A', isoDisks[ct]); - } - DriveManager::InitializeDrive(drive - 'A'); - DOS_EnableDriveMenu(drive); - - // Set the correct media byte in the table - mem_writeb(Real2Phys(dos.tables.mediaid) + ((unsigned int)drive - 'A') * dos.tables.dpb_size, mediaid); - - // If instructed, attach to IDE controller as ATAPI CD-ROM device - if (ide_index >= 0) IDE_CDROM_Attach(ide_index, ide_slave, drive - 'A'); - - // Print status message (success) - if (!qmount) WriteOut(MSG_Get("MSCDEX_SUCCESS")); - if (!paths.empty()) { - std::string tmp(wpcolon&&paths[0].length()>1&&paths[0].c_str()[0]==':'?paths[0].substr(1):paths[0]); - for (i = 1; i < paths.size(); i++) { - tmp += "; " + (wpcolon&&paths[i].length()>1&&paths[i].c_str()[0]==':'?paths[i].substr(1):paths[i]); - } - lastmount = drive; - if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_2"), drive, tmp.c_str()); - } - else { - lastmount = drive; - } - return true; - } - - imageDisk* MountImageNone(const char* fileName, FILE* file, const Bitu sizesOriginal[], const int reserved_cylinders, bool roflag) { - bool assumeHardDisk = false; - imageDisk* newImage = nullptr; - Bitu sizes[4]; - sizes[0] = sizesOriginal[0]; - sizes[1] = sizesOriginal[1]; - sizes[2] = sizesOriginal[2]; - sizes[3] = sizesOriginal[3]; - - if (!strcmp(fileName,"empty")) { - imageDiskEmptyDrive *emd = new imageDiskEmptyDrive(); - if (sizes[0] != 0 && sizes[1] != 0 && sizes[2] != 0 && sizes[3] != 0) { - emd->sector_size = sizes[0]; - emd->sectors = sizes[1]; - emd->heads = sizes[2]; - emd->cylinders = sizes[3]; - emd->diskSizeK = ((sizes[0]*sizes[1]*sizes[2]*sizes[3])+512)/1024; - emd->UpdateFloppyType(); - } - LOG_MSG("Mounted empty C/H/S/sz %u/%u/%u/%u %uKB", - (unsigned int)emd->cylinders, - (unsigned int)emd->heads, - (unsigned int)emd->sectors, - (unsigned int)emd->sector_size, - (unsigned int)emd->diskSizeK); - return emd; - } - - //check for VHD files - if (sizes[0] == 0 /* auto detect size */) { - const char *ext = strrchr(fileName, '.'); - if (ext != NULL) { - if (!strcasecmp(ext, ".vhd")) { - bool ro=wpcolon&&strlen(fileName)>1&&fileName[0]==':'; - imageDiskVHD::ErrorCodes ret = imageDiskVHD::Open(ro?fileName+1:fileName, ro||roflag, &newImage); - switch (ret) { - case imageDiskVHD::ERROR_OPENING: WriteOut(MSG_Get("VHD_ERROR_OPENING")); break; - case imageDiskVHD::INVALID_DATA: WriteOut(MSG_Get("VHD_INVALID_DATA")); break; - case imageDiskVHD::UNSUPPORTED_TYPE: WriteOut(MSG_Get("VHD_UNSUPPORTED_TYPE")); break; - case imageDiskVHD::ERROR_OPENING_PARENT: WriteOut(MSG_Get("VHD_ERROR_OPENING_PARENT")); break; - case imageDiskVHD::PARENT_INVALID_DATA: WriteOut(MSG_Get("VHD_PARENT_INVALID_DATA")); break; - case imageDiskVHD::PARENT_UNSUPPORTED_TYPE: WriteOut(MSG_Get("VHD_PARENT_UNSUPPORTED_TYPE")); break; - case imageDiskVHD::PARENT_INVALID_MATCH: WriteOut(MSG_Get("VHD_PARENT_INVALID_MATCH")); break; - case imageDiskVHD::PARENT_INVALID_DATE: WriteOut(MSG_Get("VHD_PARENT_INVALID_DATE")); break; - case imageDiskVHD::UNSUPPORTED_WRITE: roflag=true; break; - default: break; - } - return newImage; - } - else if (!strcasecmp(ext, ".hdi")) { - assumeHardDisk = true; /* bugfix for HDI images smaller than 2.88MB so that the .hdi file is not mistaken for a floppy disk image */ - } - } - } - - uint32_t imagesize; - /* auto-fill: sector size */ - if (sizes[0] == 0) sizes[0] = 512; - - bool readonly = wpcolon&&strlen(fileName)>1&&fileName[0]==':'; - const char* fname=readonly?fileName+1:fileName; - FILE *newDisk = file==NULL?fopen_lock(fname, readonly||roflag?"rb":"rb+", roflag):file; - if (!newDisk) { - if (!qmount) WriteOut("Unable to open '%s'\n", fname); - return NULL; - } - - QCow2Image::QCow2Header qcow2_header = QCow2Image::read_header(newDisk); - - uint64_t sectors; - if (qcow2_header.magic == QCow2Image::magic && (qcow2_header.version == 2 || qcow2_header.version == 3)) { - uint32_t cluster_size = 1u << qcow2_header.cluster_bits; - if ((sizes[0] < 512) || ((cluster_size % sizes[0]) != 0)) { - WriteOut("Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes.\n", cluster_size); - return nullptr; - } - sectors = (uint64_t)qcow2_header.size / (uint64_t)sizes[0]; - imagesize = (uint32_t)(qcow2_header.size / 1024L); - // setbuf(newDisk, NULL); - newImage = new QCow2Disk(qcow2_header, newDisk, fname, imagesize, (uint32_t)sizes[0], (imagesize > 2880)); - } - else { - char tmp[256]; - - fseeko64(newDisk, 0L, SEEK_SET); - size_t readResult = fread(tmp, 256, 1, newDisk); // look for magic signatures - if (readResult != 1) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in MountImageNone\n"); - return NULL; - } - - const char *ext = strrchr(fname,'.'); - - if (ext != NULL && !strcasecmp(ext, ".d88")) { - fseeko64(newDisk, 0L, SEEK_END); - sectors = (uint64_t)ftello64(newDisk) / (uint64_t)sizes[0]; - imagesize = (uint32_t)(sectors / 2); /* orig. code wants it in KBs */ - // setbuf(newDisk, NULL); - newImage = new imageDiskD88(newDisk, fname, imagesize, false/*this is a FLOPPY image format*/); - } - else if (!memcmp(tmp, "VFD1.", 5)) { /* FDD files */ - fseeko64(newDisk, 0L, SEEK_END); - sectors = (uint64_t)ftello64(newDisk) / (uint64_t)sizes[0]; - imagesize = (uint32_t)(sectors / 2); /* orig. code wants it in KBs */ - // setbuf(newDisk, NULL); - newImage = new imageDiskVFD(newDisk, fname, imagesize, false/*this is a FLOPPY image format*/); - } - else if (!memcmp(tmp,"T98FDDIMAGE.R0\0\0",16)) { - fseeko64(newDisk, 0L, SEEK_END); - sectors = (uint64_t)ftello64(newDisk) / (uint64_t)sizes[0]; - imagesize = (uint32_t)(sectors / 2); /* orig. code wants it in KBs */ - // setbuf(newDisk, NULL); - newImage = new imageDiskNFD(newDisk, fname, imagesize, false/*this is a FLOPPY image format*/, 0); - } - else if (!memcmp(tmp,"T98FDDIMAGE.R1\0\0",16)) { - fseeko64(newDisk, 0L, SEEK_END); - sectors = (uint64_t)ftello64(newDisk) / (uint64_t)sizes[0]; - imagesize = (uint32_t)(sectors / 2); /* orig. code wants it in KBs */ - // setbuf(newDisk, NULL); - newImage = new imageDiskNFD(newDisk, fname, imagesize, false/*this is a FLOPPY image format*/, 1); - } - else { - fseeko64(newDisk, 0L, SEEK_END); - sectors = (uint64_t)ftello64(newDisk) / (uint64_t)sizes[0]; - imagesize = (uint32_t)(sectors / 2); /* orig. code wants it in KBs */ - // setbuf(newDisk, NULL); - newImage = new imageDisk(newDisk, fname, imagesize, (imagesize > 2880) || assumeHardDisk); - } - } - - /* sometimes imageDisk is able to determine geometry automatically (HDI images) */ - if (newImage) { - if (newImage->sectors != 0 && newImage->heads != 0 && newImage->cylinders != 0 && newImage->sector_size != 0) { - /* prevent the code below from changing the geometry */ - sizes[0] = newImage->sector_size; - sizes[1] = newImage->sectors; - sizes[2] = newImage->heads; - sizes[3] = newImage->cylinders; - } - } - - /* try auto-detect */ - if (sizes[3] == 0 && sizes[2] == 0) { - DetectGeometry(newDisk, fname, sizes); - } - - /* auto-fill: sector/track count */ - if (sizes[1] == 0) sizes[1] = 63; - /* auto-fill: head/cylinder count */ - if (sizes[3]/*cylinders*/ == 0 && sizes[2]/*heads*/ == 0) { - sizes[2] = 16; /* typical hard drive, unless a very old drive */ - sizes[3]/*cylinders*/ = - (Bitu)(((uint64_t)sectors + ((uint64_t)sizes[2]/*heads*/ * (uint64_t)sizes[1]/*sectors/track*/) - (uint64_t)1u) / - ((uint64_t)sizes[2]/*heads*/ * (uint64_t)sizes[1]/*sectors/track*/)); - - if (IS_PC98_ARCH) { - /* TODO: PC-98 has its own issues with a 4096-cylinder limit */ - } - else { - /* INT 13h mapping, deal with 1024-cyl limit */ - while (sizes[3] > 1024) { - if (sizes[2] >= 255) break; /* nothing more we can do */ - - /* try to generate head count 16, 32, 64, 128, 255 */ - sizes[2]/*heads*/ *= 2; - if (sizes[2] >= 256) sizes[2] = 255; - - /* and recompute cylinders */ - sizes[3]/*cylinders*/ = - (Bitu)(((uint64_t)sectors + ((uint64_t)sizes[2]/*heads*/ * (uint64_t)sizes[1]/*sectors/track*/) - (uint64_t)1u) / - ((uint64_t)sizes[2]/*heads*/ * (uint64_t)sizes[1]/*sectors/track*/)); - } - } - } - - LOG(LOG_DOSMISC, LOG_NORMAL)("Mounting image as C/H/S %u/%u/%u with %u bytes/sector", - (unsigned int)sizes[3], (unsigned int)sizes[2], (unsigned int)sizes[1], (unsigned int)sizes[0]); - - if (imagesize > 2880) newImage->Set_Geometry((uint32_t)sizes[2], (uint32_t)sizes[3], (uint32_t)sizes[1], (uint32_t)sizes[0]); - if (reserved_cylinders > 0) newImage->Set_Reserved_Cylinders((Bitu)reserved_cylinders); - - return newImage; - } - }; - - void IMGMOUNT_ProgramStart(Program * * make) { - *make=new IMGMOUNT; - } - - void runImgmount(const char *str) { - IMGMOUNT imgmount; - imgmount.cmd=new CommandLine("IMGMOUNT", str); - imgmount.Run(); - } - - Bitu DOS_SwitchKeyboardLayout(const char* new_layout, int32_t& tried_cp); - Bitu DOS_LoadKeyboardLayout(const char * layoutname, int32_t codepage, const char * codepagefile); - Bitu DOS_ChangeKeyboardLayout(const char* layoutname, int32_t codepage); - Bitu DOS_ChangeCodepage(int32_t codepage, const char* codepagefile); - const char* DOS_GetLoadedLayout(void); - - class KEYB : public Program { - public: - void Run(void) override; - }; - - void KEYB::Run(void) { - if (cmd->FindCommand(1,temp_line)) { /* first parameter is layout ID */ - if (cmd->FindString("?",temp_line,false)) { - resetcolor = true; - WriteOut(MSG_Get("PROGRAM_KEYB_SHOWHELP")); - } else { - Bitu keyb_error=0; /* Return code of switching keyboard layouts */ - std::string cp_string=""; - const char* layout_id = temp_line.c_str(); - cmd->FindCommand(2,cp_string); /* second parameter is codepage number */ - int32_t cp = cp_string.size() ? atoi(cp_string.c_str()) : 0;; - int32_t tocp = !strcasecmp(layout_id, "jp") ? 932 : (!strcasecmp(layout_id, "ko") ? 949 : (!strcasecmp(layout_id, "tw") || !strcasecmp(layout_id, "hk") || !strcasecmp(layout_id, "zht") || (!strcasecmp(layout_id, "zh") && ((cp == 950 || cp == 951) || (!cp_string.size() && (dos.loaded_codepage == 950 || dos.loaded_codepage == 951)))) ? (cp == 951 || (!cp_string.size() && dos.loaded_codepage == 951) ? 951 : 950) : (!strcasecmp(layout_id, "cn") || !strcasecmp(layout_id, "zhs") || !strcasecmp(layout_id, "zh") ? 936 : 0))); - int32_t cpbak = dos.loaded_codepage; - const char* layout_name = DOS_GetLoadedLayout(); - if(tocp && !IS_PC98_ARCH) { - dos.loaded_codepage = tocp; - #if defined(USE_TTF) - if(ttf.inUse) { - dos.loaded_codepage = cpbak; - toSetCodePage(NULL, tocp, -1); - } - else - #endif - { - MSG_Init(); - DOSBox_SetSysMenu(); - if(isDBCSCP()) { - ShutFontHandle(); - InitFontHandle(); - JFONT_Init(); - } - SetupDBCSTable(); - runRescan("-A -Q"); - #if C_OPENGL && DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW - if(OpenGL_using() && control->opt_lang.size() && lastcp && lastcp != dos.loaded_codepage) - UpdateSDLDrawTexture(); - #endif - } - if(!strcasecmp(layout_id, "jp")) { - keyb_error = DOS_LoadKeyboardLayout("jp", tocp, "auto"); /* Load a default layout if not loaded at all */ - if(cp) keyb_error = DOS_ChangeCodepage(cp , "auto"); - if(keyb_error == KEYB_NOERROR) DOS_ChangeKeyboardLayout("jp", cp ? cp : tocp); - } - else { - keyb_error = DOS_SwitchKeyboardLayout("us", tocp); /* set Korean and Chinese keyboard layout to be "us" */ - /* FIX_ME: Chinese keyboards are identical to US keyboards, but some fixes may be needed for Korean unique keys */ - } - } - else if (cp) { - char cp_file_name[256]; - if (cmd->FindCommand(3,cp_string)) { - /* third parameter is codepage file */ - strcpy(cp_file_name, cp_string.c_str()); - } else { - /* no codepage file specified, use automatic selection */ - strcpy(cp_file_name, "auto"); - } - keyb_error = DOS_LoadKeyboardLayout(layout_id, cp, cp_file_name); - } - else { - if(!strcasecmp(layout_id, "us")) { - keyb_error = DOS_LoadKeyboardLayout("us", 437, "auto"); /* set 437 as default codepage for US layout */ - dos.loaded_codepage = 437; - } - else { - if(layout_name == NULL) { - keyb_error = DOS_LoadKeyboardLayout("us", 437, "auto"); /* Load a default layout if not loaded at all */ - } - keyb_error = DOS_SwitchKeyboardLayout(layout_id, cp); - } - } - switch (keyb_error) { - case KEYB_NOERROR: - { - SwitchLanguage(cpbak, cp ? cp : tocp, true); - WriteOut(MSG_Get("PROGRAM_KEYB_NOERROR"),layout_id, dos.loaded_codepage); - runRescan("-A -Q"); - #if C_OPENGL && DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW - if (OpenGL_using() && control->opt_lang.size() && lastcp && lastcp != dos.loaded_codepage) - UpdateSDLDrawTexture(); - #endif - break; - } - case KEYB_FILENOTFOUND: - if (temp_line!="/?"&&temp_line!="-?") WriteOut(MSG_Get("PROGRAM_KEYB_FILENOTFOUND"),layout_id); - WriteOut(MSG_Get("PROGRAM_KEYB_SHOWHELP")); - break; - case KEYB_INVALIDFILE: - WriteOut(MSG_Get("PROGRAM_KEYB_INVALIDFILE"),layout_id); - break; - case KEYB_LAYOUTNOTFOUND: - WriteOut(MSG_Get("PROGRAM_KEYB_LAYOUTNOTFOUND"),layout_id, cp ? cp : tocp); - break; - case KEYB_INVALIDCPFILE: - WriteOut(MSG_Get("PROGRAM_KEYB_INVCPFILE"),layout_id); - WriteOut(MSG_Get("PROGRAM_KEYB_SHOWHELP")); - break; - default: - LOG(LOG_DOSMISC,LOG_ERROR)("KEYB:Invalid returncode %x",(int)keyb_error); - break; - } - } - } else { - /* no parameter in the command line, just output codepage info and possibly loaded layout ID */ - const char* layout_name = DOS_GetLoadedLayout(); - if (layout_name==NULL) { - WriteOut(MSG_Get("PROGRAM_KEYB_INFO"),dos.loaded_codepage); - } else { - WriteOut(MSG_Get("PROGRAM_KEYB_INFO_LAYOUT"),dos.loaded_codepage,layout_name); - } - } - } - - static void KEYB_ProgramStart(Program * * make) { - *make=new KEYB; - } - - // MODE - - class MODE : public Program { - public: - void Run(void) override; - private: - void PrintStatus() { - WriteOut("Status for device CON:\n----------------------\nColumns=%d\nLines=%d\n", COLS, LINES); - #if defined(USE_TTF) - if(!ttf.inUse) - #endif - WriteOut("\nCode page operation not supported on this device\n"); - } - int LINES = 25, COLS = 80; - }; - - bool setlines(const char *mname); - void MODE::Run(void) { - uint16_t rate=0,delay=0,cols=0,lines=0,mode; - LINES=(IS_EGAVGA_ARCH?real_readb(BIOSMEM_SEG,BIOSMEM_NB_ROWS):24)+1; - COLS=real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); - if (!cmd->FindCommand(1,temp_line)) { - PrintStatus(); - return; - } - if (temp_line=="-?" || temp_line=="/?") { - WriteOut(MSG_Get("PROGRAM_MODE_USAGE")); - return; - } - else if (strcasecmp(temp_line.c_str(),"con")==0 || strcasecmp(temp_line.c_str(),"con:")==0) { - if (IS_PC98_ARCH) return; - if (cmd->GetCount()<2) { - PrintStatus(); - return; - } - if (cmd->FindStringBegin("rate=", temp_line,false)) rate=atoi(temp_line.c_str()); - if (cmd->FindStringBegin("delay=", temp_line,false)) delay=atoi(temp_line.c_str()); - if (cmd->FindStringBegin("cols=", temp_line,false)) cols=atoi(temp_line.c_str()); else cols=COLS; - if (cmd->FindStringBegin("lines=",temp_line,false)) lines=atoi(temp_line.c_str()); else lines=LINES; - bool optr=cmd->FindStringBegin("rate=", temp_line,true), optd=cmd->FindStringBegin("delay=",temp_line,true), optc=cmd->FindStringBegin("cols=", temp_line,true), optl=cmd->FindStringBegin("lines=",temp_line,true); - if ((optr&&!optd)||(optd&&!optr)) { - WriteOut("Rate and delay must be specified together\n"); - return; - } - if (cmd->GetCount()>1) goto modeparam; - if (optr&&optd) { - if (rate<1 || rate>32 || delay<1 || delay>4) goto modeparam; - IO_Write(0x60,0xf3); IO_Write(0x60,(uint8_t)(((delay-1)<<5)|(32-rate))); - } - if ((optc||optl)&&(cols!=COLS||lines!=LINES)) { - std::string cmd="line_"+std::to_string((int)cols)+"x"+std::to_string((int)lines); - if (!setlines(cmd.c_str())) goto modeparam; - } - return; - } - else if (cmd->GetCount()>1) goto modeparam; - else if (strcasecmp(temp_line.c_str(),"mono")==0) mode=7; - else if (machine==MCH_HERC || machine==MCH_MDA) goto modeparam; - else if (strcasecmp(temp_line.c_str(),"co80")==0) mode=3; - else if (strcasecmp(temp_line.c_str(),"bw80")==0) mode=2; - else if (strcasecmp(temp_line.c_str(),"co40")==0) mode=1; - else if (strcasecmp(temp_line.c_str(),"bw40")==0) mode=0; - else goto modeparam; - mem_writeb(BIOS_CONFIGURATION,(mem_readb(BIOS_CONFIGURATION)&0xcf)|((mode==7)?0x30:0x20)); - reg_ax=mode; - CALLBACK_RunRealInt(0x10); - return; - modeparam: - WriteOut(MSG_Get("PROGRAM_MODE_INVALID_PARAMETERS")); - return; - } - - static void MODE_ProgramStart(Program * * make) { - *make=new MODE; - } - /* - // MORE - class MORE : public Program { - public: - void Run(void); - }; - - void MORE::Run(void) { - if (cmd->GetCount()) { - WriteOut(MSG_Get("PROGRAM_MORE_USAGE")); - return; - } - uint16_t ncols=mem_readw(BIOS_SCREEN_COLUMNS); - uint16_t nrows=(uint16_t)mem_readb(BIOS_ROWS_ON_SCREEN_MINUS_1); - uint16_t col=1,row=1; - uint8_t c;uint16_t n=1; - WriteOut("\n"); - while (n) { - DOS_ReadFile(STDIN,&c,&n); - if (n==0 || c==0x1a) break; // stop at EOF - switch (c) { - case 0x07: break; - case 0x08: if (col>1) col--; break; - case 0x09: col=((col+7)&~7)+1; break; - case 0x0a: row++; break; - case 0x0d: col=1; break; - default: col++; break; - } - if (col>ncols) {col=1;row++;} - DOS_WriteFile(STDOUT,&c,&n); - if (row>=nrows) { - WriteOut(MSG_Get("PROGRAM_MORE_MORE")); - DOS_ReadFile(STDERR,&c,&n); - if (c==0) DOS_ReadFile(STDERR,&c,&n); // read extended key - WriteOut("\n\n"); - col=row=1; - } - } - } - - static void MORE_ProgramStart(Program * * make) { - *make=new MORE; - } + + bool DetectGeometry(FILE * file, const char* fileName, Bitu sizes[]) { + bool yet_detected = false, readonly = wpcolon&&strlen(fileName)>1&&fileName[0]==':'; + FILE * diskfile = file==NULL?fopen64(readonly?fileName+1:fileName, "rb"):file; +#if defined(WIN32) + if (!diskfile && file==NULL) { + const host_cnv_char_t* host_name = CodePageGuestToHost(readonly?fileName+1:fileName); + if (host_name != NULL) diskfile = _wfopen(host_name, L"rb"); + } +#endif + if (!diskfile) { + return DetectGeometry_Mem(fileName, sizes); + if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_IMAGE")); + return false; + } + fseeko64(diskfile, 0L, SEEK_END); + uint32_t fcsize = (uint32_t)(ftello64(diskfile) / 512L); + uint8_t buf[512]; +#if 0 // VHD pseudo geometry should be avoided always! + // New VHD driver is capable of MBR/BPB analysis. + + // check for vhd signature + fseeko64(diskfile, -512, SEEK_CUR); + if (fread(buf, sizeof(uint8_t), 512, diskfile)<512) { + fclose(diskfile); + if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_IMAGE")); + return false; + } + if (!strcmp((const char*)buf, "conectix")) { + fcsize--; // skip footer (512 bytes) + sizes[0] = 512; // sector size + sizes[1] = buf[0x3b]; // sectors + sizes[2] = buf[0x3a]; // heads + sizes[3] = SDL_SwapBE16((uint16_t)(*(int16_t*)(buf + 0x38))); // cylinders + + // Do translation (?) + while ((sizes[2] < 128u) && (sizes[3] > 1023u)) { + sizes[2] <<= 1u; + sizes[3] >>= 1u; + } + + if (sizes[3]>1023) { + // Set x/255/63 + sizes[2] = 255; + sizes[3] = fcsize / sizes[2] / sizes[1]; + } + + LOG_MSG("VHD image detected: %u,%u,%u,%u", + (unsigned int)sizes[0], (unsigned int)sizes[1], (unsigned int)sizes[2], (unsigned int)sizes[3]); + if (sizes[3]>1023) LOG_MSG("WARNING: cylinders>1023, INT13 will not work unless extensions are used"); + yet_detected = true; + } +#endif + fseeko64(diskfile, 0L, SEEK_SET); + if (fread(buf, sizeof(uint8_t), 512, diskfile)<512) { + fclose(diskfile); + if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_IMAGE")); + return false; + } + if (file==NULL) fclose(diskfile); + // check MBR signature for unknown images + if (!yet_detected && ((buf[510] != 0x55) || (buf[511] != 0xaa))) { + if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_GEOMETRY")); + return false; + } + // check MBR partition entry 1 + if (!yet_detected) + yet_detected = DetectMFMsectorPartition(buf, fcsize, sizes); + + // Try bximage disk geometry + // bximage flat images should already be detected by + // DetectMFMSectorPartition(), not sure what this adds... + if (!yet_detected) { + yet_detected = DetectBximagePartition(fcsize, sizes); + } + + uint8_t ptype = buf[0x1c2]; // Location of DOS 3.3+ partition type + bool assume_lba = false; + + /* If the first partition is a Windows 95 FAT32 (LBA) type partition, and we failed to detect, + * then assume LBA and make up a geometry */ + if (!yet_detected && (ptype == 0x0C/*FAT32+LBA*/ || ptype == 0x0E/*FAT16+LBA*/)) { + yet_detected = 1; + assume_lba = true; + LOG_MSG("Failed to autodetect geometry, assuming LBA approximation based on first partition type (FAT with LBA)"); + } + + /* If the MBR has only a partition table, but the part that normally contains executable + * code is all zeros. To avoid false negatives, check only the first 0x20 bytes since + * at boot time executable code must reside there to do something, and many of these + * disk images while they ARE mostly zeros, do have some extra nonzero bytes immediately + * before the partition table at 0x1BE. + * + * Modern FAT32 generator tools and older digital cameras will format FAT32 like this. + * These tools are unlikely to support non-LBA disks. + * + * To avoid false positives, the partition type has to be something related to FAT */ + if (!yet_detected && (ptype == 0x01 || ptype == 0x04 || ptype == 0x06 || ptype == 0x0B || ptype == 0x0C || ptype == 0x0E)) { + /* buf[] still contains MBR */ + unsigned int i=0; + while (i < 0x20 && buf[i] == 0) i++; + if (i == 0x20) { + yet_detected = 1; + assume_lba = true; + LOG_MSG("Failed to autodetect geometry, assuming LBA approximation based on first partition type (FAT-related) and lack of executable code in the MBR"); + } + } + + /* If we failed to detect, but the disk image is 4GB or larger, make up a geometry because + * IDE drives by that point were pure LBA anyway and supported C/H/S for the sake of + * backward compatibility anyway. fcsize is in 512-byte sectors. */ + if (!yet_detected && fcsize >= ((4ull*1024ull*1024ull*1024ull)/512ull)) { + yet_detected = 1; + assume_lba = true; + LOG_MSG("Failed to autodetect geometry, assuming LBA approximation based on size"); + } + + if (yet_detected && assume_lba) { + sizes[0] = 512; + sizes[1] = 63; + sizes[2] = 255; + { + const Bitu d = sizes[1]*sizes[2]; + sizes[3] = (fcsize + d - 1) / d; /* round up */ + } + } + + if (yet_detected) { + //"Image geometry auto detection: -size %u,%u,%u,%u\r\n", + //sizes[0],sizes[1],sizes[2],sizes[3]); + if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_AUTODET_VALUES"), sizes[0], sizes[1], sizes[2], sizes[3]); + return true; + } + else { + if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_GEOMETRY")); + return false; + } + } + + void DetectGeometry(Bitu sizes[], uint64_t currentSize) { + if(!sizes) return; + + const uint16_t sector_size = 512; + uint64_t totalSectors = currentSize / sector_size; + + uint32_t sectorsPerTrack; + uint32_t heads; + uint32_t cylinders; + uint32_t cylinderTimesHeads = 0; + + if(totalSectors > 65535ULL * 16ULL * 255ULL) + totalSectors = 65535ULL * 16ULL * 255ULL; // cap total sectors to max supported by CHS + + if(totalSectors > 65535ULL * 16ULL * 63ULL){ + sectorsPerTrack = 255; + heads = 16; + cylinders = (uint32_t)(totalSectors / (heads * sectorsPerTrack)); + } + else { + sectorsPerTrack = 63; + cylinderTimesHeads = (uint32_t)(totalSectors / sectorsPerTrack); + cylinders = (uint32_t)(totalSectors / sectorsPerTrack); + heads = (cylinderTimesHeads + 1023) / 1024; + } + + cylinderTimesHeads = totalSectors / sectorsPerTrack; + + if(heads < 4) heads = 4; + if(heads > 16 || (cylinderTimesHeads >= (heads * 1024))) { + heads = 16; + } + + sizes[3] = (uint16_t)(cylinderTimesHeads / heads); // cylinders + sizes[2] = heads; + sizes[1] = sectorsPerTrack; + sizes[0] = sector_size; + } + + bool DetectMFMsectorPartition(uint8_t buf[], uint32_t fcsize, Bitu sizes[]) const { + // This is used for plain MFM sector format as created by IMGMAKE + // It tries to find the first partition. Addressing is in CHS format. + /* Offset | Length | Description + * +0 | 1 byte | 80 hex = active, 00 = inactive + * +1 | 3 bytes | CHS of first sector in partition + * +4 | 1 byte | partition type + * +5 | 3 bytes | CHS of last sector in partition + * +8 | 4 bytes | LBA of first sector in partition + * +C | 4 bytes | Number of sectors in partition. 0 may mean, use LBA + */ + uint8_t starthead = 0; // start head of partition + uint8_t startsect = 0; // start sector of partition + uint16_t startcyl = 0; // start cylinder of partition + //uint8_t ptype = 0; // Partition Type + uint16_t endcyl = 0; // end cylinder of partition + uint8_t heads = 0; // heads in partition + uint8_t sectors = 0; // sectors per track in partition + uint32_t pe1_size = host_readd(&buf[0x1ca]); + if ((uint32_t)host_readd(&buf[0x1fa]) != 0) { // DOS 2.0-3.21 partition table + pe1_size = host_readd(&buf[0x1fa]); + starthead = buf[0x1ef]; + startsect = (buf[0x1f0] & 0x3fu) - 1u; + startcyl = (unsigned char)buf[0x1f1] | (unsigned int)((buf[0x1f0] & 0xc0) << 2u); + endcyl = (unsigned char)buf[0x1f5] | (unsigned int)((buf[0x1f4] & 0xc0) << 2u); + //ptype = buf[0x1f2]; + heads = buf[0x1f3] + 1u; + sectors = buf[0x1f4] & 0x3fu; + } else if (pe1_size != 0) { // DOS 3.3+ partition table, starting at 0x1BE + starthead = buf[0x1bf]; + startsect = (buf[0x1c0] & 0x3fu) - 1u; + startcyl = (unsigned char)buf[0x1c1] | (unsigned int)((buf[0x1c0] & 0xc0) << 2u); + endcyl = (unsigned char)buf[0x1c5] | (unsigned int)((buf[0x1c4] & 0xc0) << 2u); + //ptype = buf[0x1c2]; + heads = buf[0x1c3] + 1u; + sectors = buf[0x1c4] & 0x3fu; + } + if (pe1_size != 0) { + uint32_t part_start = startsect + sectors * starthead + + startcyl * sectors * heads; + uint32_t part_end = heads * sectors * endcyl; + uint32_t part_len = part_end - part_start; + // partition start/end sanity check + // partition length should not exceed file length + // real partition size can be a few cylinders less than pe1_size + // if more than 1023 cylinders see if first partition fits + // into 1023, else bail. + if (/*(part_len<0) always false because unsigned || */(part_len > pe1_size) || (pe1_size > fcsize) || + ((pe1_size - part_len) / (sectors*heads)>2u) || + ((pe1_size / (heads*sectors))>1023u)) { + //LOG_MSG("start(c,h,s) %u,%u,%u",startcyl,starthead,startsect); + //LOG_MSG("endcyl %u heads %u sectors %u",endcyl,heads,sectors); + //LOG_MSG("psize %u start %u end %u",pe1_size,part_start,part_end); + } else { + sizes[0] = 512; sizes[1] = sectors; + sizes[2] = heads; sizes[3] = (uint16_t)(fcsize / (heads*sectors)); + if (sizes[3]>1023) sizes[3] = 1023; + return true; + } + } + return false; + } + + bool DetectBximagePartition(uint32_t fcsize, Bitu sizes[]) const { + // Try bximage disk geometry + uint32_t cylinders = fcsize / (16 * 63); + // Int13 only supports up to 1023 cylinders + // For mounting unknown images we could go up with the heads to 255 + if ((cylinders * 16 * 63 == fcsize) && (cylinders<1024)) { + sizes[0] = 512; sizes[1] = 63; sizes[2] = 16; sizes[3] = cylinders; + return true; + } + return false; + } + + bool MountIso(const char drive, const std::vector &paths, const signed char ide_index, const bool ide_slave) { + //mount cdrom + if (Drives[drive - 'A']) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_ALREADY_MOUNTED")); + return false; + } + uint8_t mediaid = 0xF8; + MSCDEX_SetCDInterface(CDROM_USE_SDL, -1); + // create new drives for all images + std::vector isoDisks; + std::vector::size_type i; + std::vector::size_type ct; + for (i = 0; i < paths.size(); i++) { + int error = -1; + DOS_Drive* newDrive = new isoDrive(drive, wpcolon&&paths[i].length()>1&&paths[i].c_str()[0]==':'?paths[i].c_str()+1:paths[i].c_str(), mediaid, error, options); + isoDisks.push_back(newDrive); + if(!qmount) + switch(error) { + case 0: break; + case 1: WriteOut(MSG_Get("MSCDEX_ERROR_MULTIPLE_CDROMS")); break; + case 2: WriteOut(MSG_Get("MSCDEX_ERROR_NOT_SUPPORTED")); break; + case 3: WriteOut(MSG_Get("MSCDEX_ERROR_OPEN")); break; + case 4: WriteOut(MSG_Get("MSCDEX_TOO_MANY_DRIVES")); break; + case 5: WriteOut(MSG_Get("MSCDEX_LIMITED_SUPPORT")); break; + case 6: WriteOut(MSG_Get("MSCDEX_INVALID_FILEFORMAT")); break; + default: WriteOut(MSG_Get("MSCDEX_UNKNOWN_ERROR")); break; + } + // error: clean up and leave + if (error) { + for (ct = 0; ct < isoDisks.size(); ct++) { + delete isoDisks[ct]; + } + return false; + } + } + // Update DriveManager + for (ct = 0; ct < isoDisks.size(); ct++) { + DriveManager::AppendDisk(drive - 'A', isoDisks[ct]); + } + DriveManager::InitializeDrive(drive - 'A'); + DOS_EnableDriveMenu(drive); + + // Set the correct media byte in the table + mem_writeb(Real2Phys(dos.tables.mediaid) + ((unsigned int)drive - 'A') * dos.tables.dpb_size, mediaid); + + // If instructed, attach to IDE controller as ATAPI CD-ROM device + if (ide_index >= 0) IDE_CDROM_Attach(ide_index, ide_slave, drive - 'A'); + + // Print status message (success) + if (!qmount) WriteOut(MSG_Get("MSCDEX_SUCCESS")); + if (!paths.empty()) { + std::string tmp(wpcolon&&paths[0].length()>1&&paths[0].c_str()[0]==':'?paths[0].substr(1):paths[0]); + for (i = 1; i < paths.size(); i++) { + tmp += "; " + (wpcolon&&paths[i].length()>1&&paths[i].c_str()[0]==':'?paths[i].substr(1):paths[i]); + } + lastmount = drive; + if (!qmount) WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_2"), drive, tmp.c_str()); + } + else { + lastmount = drive; + } + return true; + } + + imageDisk* MountImageNone(const char* fileName, FILE* file, const Bitu sizesOriginal[], const int reserved_cylinders, bool roflag) { + bool assumeHardDisk = false; + imageDisk* newImage = nullptr; + Bitu sizes[4]; + sizes[0] = sizesOriginal[0]; + sizes[1] = sizesOriginal[1]; + sizes[2] = sizesOriginal[2]; + sizes[3] = sizesOriginal[3]; + + if (!strcmp(fileName,"empty")) { + imageDiskEmptyDrive *emd = new imageDiskEmptyDrive(); + if (sizes[0] != 0 && sizes[1] != 0 && sizes[2] != 0 && sizes[3] != 0) { + emd->sector_size = sizes[0]; + emd->sectors = sizes[1]; + emd->heads = sizes[2]; + emd->cylinders = sizes[3]; + emd->diskSizeK = ((sizes[0]*sizes[1]*sizes[2]*sizes[3])+512)/1024; + emd->UpdateFloppyType(); + } + LOG_MSG("Mounted empty C/H/S/sz %u/%u/%u/%u %uKB", + (unsigned int)emd->cylinders, + (unsigned int)emd->heads, + (unsigned int)emd->sectors, + (unsigned int)emd->sector_size, + (unsigned int)emd->diskSizeK); + return emd; + } + + //check for VHD files + if (sizes[0] == 0 /* auto detect size */) { + const char *ext = strrchr(fileName, '.'); + if (ext != NULL) { + if (!strcasecmp(ext, ".vhd")) { + bool ro=wpcolon&&strlen(fileName)>1&&fileName[0]==':'; + imageDiskVHD::ErrorCodes ret = imageDiskVHD::Open(ro?fileName+1:fileName, ro||roflag, &newImage); + switch (ret) { + case imageDiskVHD::ERROR_OPENING: WriteOut(MSG_Get("VHD_ERROR_OPENING")); break; + case imageDiskVHD::INVALID_DATA: WriteOut(MSG_Get("VHD_INVALID_DATA")); break; + case imageDiskVHD::UNSUPPORTED_TYPE: WriteOut(MSG_Get("VHD_UNSUPPORTED_TYPE")); break; + case imageDiskVHD::ERROR_OPENING_PARENT: WriteOut(MSG_Get("VHD_ERROR_OPENING_PARENT")); break; + case imageDiskVHD::PARENT_INVALID_DATA: WriteOut(MSG_Get("VHD_PARENT_INVALID_DATA")); break; + case imageDiskVHD::PARENT_UNSUPPORTED_TYPE: WriteOut(MSG_Get("VHD_PARENT_UNSUPPORTED_TYPE")); break; + case imageDiskVHD::PARENT_INVALID_MATCH: WriteOut(MSG_Get("VHD_PARENT_INVALID_MATCH")); break; + case imageDiskVHD::PARENT_INVALID_DATE: WriteOut(MSG_Get("VHD_PARENT_INVALID_DATE")); break; + case imageDiskVHD::UNSUPPORTED_WRITE: roflag=true; break; + default: break; + } + //LOG_MSG("LBA=%llu",newImage->LBA); + return newImage; + } + else if (!strcasecmp(ext, ".hdi")) { + assumeHardDisk = true; /* bugfix for HDI images smaller than 2.88MB so that the .hdi file is not mistaken for a floppy disk image */ + } + } + } + + uint64_t imagesize; + /* auto-fill: sector size */ + if (sizes[0] == 0) sizes[0] = 512; + + bool readonly = wpcolon&&strlen(fileName)>1&&fileName[0]==':'; + const char* fname=readonly?fileName+1:fileName; + FILE *newDisk = file==NULL?fopen_lock(fname, readonly||roflag?"rb":"rb+", roflag):file; + if (!newDisk) { + if (!qmount) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_OPEN_ERROR"), fname); + return NULL; + } + + QCow2Image::QCow2Header qcow2_header = QCow2Image::read_header(newDisk); + + uint64_t sectors = 0; + if (qcow2_header.magic == QCow2Image::magic && (qcow2_header.version == 2 || qcow2_header.version == 3)) { + uint32_t cluster_size = 1u << qcow2_header.cluster_bits; + if ((sizes[0] < 512) || ((cluster_size % sizes[0]) != 0)) { + WriteOut(MSG_Get("PROGRAM_IMGMOUNT_INVALID_SECTORSIZE"), cluster_size); + return nullptr; + } + imagesize = (uint32_t)(qcow2_header.size / 1024L); + setbuf(newDisk, NULL); + DetectGeometry(sizes, qcow2_header.size); + newImage = new QCow2Disk(qcow2_header, newDisk, fname, qcow2_header.size, (uint32_t)sizes[0], (imagesize > 2880)); + newImage->sector_size = sizes[0]; // sector size + newImage->sectors = sizes[1]; // sectors + newImage->heads = sizes[2]; // heads + newImage->cylinders = sizes[3]; // cylinders + uint64_t LBA = newImage->getLBA(); + if(!int13_enable_48bitLBA && (LBA > 0x0FFFFFFF)) + LOG_MSG("Warning: Disk size (%lf GB) exceeds 128GB limit for 28-bit LBA. You may need to enable 48-bit LBA support.", (double)LBA * 512.0 / (1024.0 * 1024 * 1024)); + } + else { + char tmp[256]; + + fseeko64(newDisk, 0L, SEEK_SET); + size_t readResult = fread(tmp, 256, 1, newDisk); // look for magic signatures + if (readResult != 1) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in MountImageNone\n"); + return NULL; + } + + const char *ext = strrchr(fname,'.'); + + if (ext != NULL && !strcasecmp(ext, ".d88")) { + fseeko64(newDisk, 0L, SEEK_END); + sectors = (uint64_t)ftello64(newDisk) / (uint64_t)sizes[0]; + imagesize = (uint32_t)(sectors / 2); /* orig. code wants it in KBs */ + // setbuf(newDisk, NULL); + newImage = new imageDiskD88(newDisk, fname, (uint32_t)imagesize, false/*this is a FLOPPY image format*/); + } + else if (!memcmp(tmp, "VFD1.", 5)) { /* FDD files */ + fseeko64(newDisk, 0L, SEEK_END); + sectors = (uint64_t)ftello64(newDisk) / (uint64_t)sizes[0]; + imagesize = (uint32_t)(sectors / 2); /* orig. code wants it in KBs */ + // setbuf(newDisk, NULL); + newImage = new imageDiskVFD(newDisk, fname, (uint32_t)imagesize, false/*this is a FLOPPY image format*/); + } + else if (!memcmp(tmp,"T98FDDIMAGE.R0\0\0",16)) { + fseeko64(newDisk, 0L, SEEK_END); + sectors = (uint64_t)ftello64(newDisk) / (uint64_t)sizes[0]; + imagesize = (uint32_t)(sectors / 2); /* orig. code wants it in KBs */ + // setbuf(newDisk, NULL); + newImage = new imageDiskNFD(newDisk, fname, (uint32_t)imagesize, false/*this is a FLOPPY image format*/, 0); + } + else if (!memcmp(tmp,"T98FDDIMAGE.R1\0\0",16)) { + fseeko64(newDisk, 0L, SEEK_END); + sectors = (uint64_t)ftello64(newDisk) / (uint64_t)sizes[0]; + imagesize = (uint32_t)(sectors / 2); /* orig. code wants it in KBs */ + // setbuf(newDisk, NULL); + newImage = new imageDiskNFD(newDisk, fname, (uint32_t)imagesize, false/*this is a FLOPPY image format*/, 1); + } + else { + fseeko64(newDisk, 0L, SEEK_END); + imagesize = ftello64(newDisk); + sectors = imagesize / (uint64_t)sizes[0]; + // setbuf(newDisk, NULL); + newImage = new imageDisk(newDisk, fname, imagesize, (imagesize > 2880 * 1024) || assumeHardDisk); + } + } + + /* sometimes imageDisk is able to determine geometry automatically (HDI images) */ + if (newImage) { + if (newImage->sectors != 0 && newImage->heads != 0 && newImage->cylinders != 0 && newImage->sector_size != 0) { + /* prevent the code below from changing the geometry */ + sizes[0] = newImage->sector_size; + sizes[1] = newImage->sectors; + sizes[2] = newImage->heads; + sizes[3] = newImage->cylinders; + } + } + + /* try auto-detect */ + if (sizes[3] == 0 && sizes[2] == 0) { + DetectGeometry(newDisk, fname, sizes); + } + + /* auto-fill: sector/track count */ + if (sizes[1] == 0) sizes[1] = 63; + /* auto-fill: head/cylinder count */ + if (sizes[3]/*cylinders*/ == 0 && sizes[2]/*heads*/ == 0) { + sizes[2] = 16; /* typical hard drive, unless a very old drive */ + sizes[3]/*cylinders*/ = + (Bitu)(((uint64_t)sectors + ((uint64_t)sizes[2]/*heads*/ * (uint64_t)sizes[1]/*sectors/track*/) - (uint64_t)1u) / + ((uint64_t)sizes[2]/*heads*/ * (uint64_t)sizes[1]/*sectors/track*/)); + + if (IS_PC98_ARCH) { + /* TODO: PC-98 has its own issues with a 4096-cylinder limit */ + } + else { + /* INT 13h mapping, deal with 1024-cyl limit */ + while (sizes[3] > 1024) { + if (sizes[2] >= 255) break; /* nothing more we can do */ + + /* try to generate head count 16, 32, 64, 128, 255 */ + sizes[2]/*heads*/ *= 2; + if (sizes[2] >= 256) sizes[2] = 255; + + /* and recompute cylinders */ + sizes[3]/*cylinders*/ = + (Bitu)(((uint64_t)sectors + ((uint64_t)sizes[2]/*heads*/ * (uint64_t)sizes[1]/*sectors/track*/) - (uint64_t)1u) / + ((uint64_t)sizes[2]/*heads*/ * (uint64_t)sizes[1]/*sectors/track*/)); + } + } + } + + LOG(LOG_DOSMISC, LOG_NORMAL)("Mounting image as C/H/S %u/%u/%u with %u bytes/sector", + (unsigned int)sizes[3], (unsigned int)sizes[2], (unsigned int)sizes[1], (unsigned int)sizes[0]); + + if (imagesize > 2880 * 1024) newImage->Set_Geometry((uint32_t)sizes[2], (uint32_t)sizes[3], (uint32_t)sizes[1], (uint32_t)sizes[0]); + if (reserved_cylinders > 0) newImage->Set_Reserved_Cylinders((Bitu)reserved_cylinders); + + return newImage; + } +}; + +void IMGMOUNT_ProgramStart(Program * * make) { + *make=new IMGMOUNT; +} + +void runImgmount(const char *str) { + IMGMOUNT imgmount; + imgmount.cmd=new CommandLine("IMGMOUNT", str); + imgmount.Run(); +} + +Bitu DOS_SwitchKeyboardLayout(const char* new_layout, int32_t& tried_cp); +Bitu DOS_LoadKeyboardLayout(const char * layoutname, int32_t codepage, const char * codepagefile); +Bitu DOS_ChangeKeyboardLayout(const char* layoutname, int32_t codepage); +Bitu DOS_ChangeCodepage(int32_t codepage, const char* codepagefile); +const char* DOS_GetLoadedLayout(void); + +#if !defined(OSFREE) +class KEYB : public Program { +public: + void Run(void) override; +}; + +void KEYB::Run(void) { + if (cmd->FindCommand(1,temp_line)) { /* first parameter is layout ID */ + if (cmd->FindString("?",temp_line,false)) { + resetcolor = true; + WriteOut(MSG_Get("PROGRAM_KEYB_SHOWHELP")); + } else { + Bitu keyb_error=0; /* Return code of switching keyboard layouts */ + std::string cp_string=""; + const char* layout_id = temp_line.c_str(); + cmd->FindCommand(2,cp_string); /* second parameter is codepage number */ + int32_t cp = cp_string.size() ? atoi(cp_string.c_str()) : 0;; + int32_t tocp = !strcasecmp(layout_id, "jp") ? 932 : (!strcasecmp(layout_id, "ko") ? 949 : (!strcasecmp(layout_id, "tw") || !strcasecmp(layout_id, "hk") || !strcasecmp(layout_id, "zht") || (!strcasecmp(layout_id, "zh") && ((cp == 950 || cp == 951) || (!cp_string.size() && (dos.loaded_codepage == 950 || dos.loaded_codepage == 951)))) ? (cp == 951 || (!cp_string.size() && dos.loaded_codepage == 951) ? 951 : 950) : (!strcasecmp(layout_id, "cn") || !strcasecmp(layout_id, "zhs") || !strcasecmp(layout_id, "zh") ? 936 : 0))); + int32_t cpbak = dos.loaded_codepage; + const char* layout_name = DOS_GetLoadedLayout(); + if(tocp && !IS_PC98_ARCH) { + dos.loaded_codepage = tocp; +#if defined(USE_TTF) + if(ttf.inUse) { + dos.loaded_codepage = cpbak; + toSetCodePage(NULL, tocp, -1); + } + else +#endif + { + MSG_Init(); + DOSBox_SetSysMenu(); + if(isDBCSCP()) { + ShutFontHandle(); + InitFontHandle(); + JFONT_Init(); + } + SetupDBCSTable(); + runRescan("-A -Q"); +#if C_OPENGL && DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW + if(OpenGL_using() && control->opt_lang.size() && lastcp && lastcp != dos.loaded_codepage) + UpdateSDLDrawTexture(); +#endif + } + if(!strcasecmp(layout_id, "jp")) { + keyb_error = DOS_LoadKeyboardLayout("jp", tocp, "auto"); /* Load a default layout if not loaded at all */ + if(cp) keyb_error = DOS_ChangeCodepage(cp , "auto"); + if(keyb_error == KEYB_NOERROR) DOS_ChangeKeyboardLayout("jp", cp ? cp : tocp); + } + else { + keyb_error = DOS_SwitchKeyboardLayout("us", tocp); /* set Korean and Chinese keyboard layout to be "us" */ + /* FIX_ME: Chinese keyboards are identical to US keyboards, but some fixes may be needed for Korean unique keys */ + } + } + else if (cp) { + char cp_file_name[256]; + if (cmd->FindCommand(3,cp_string)) { + /* third parameter is codepage file */ + strcpy(cp_file_name, cp_string.c_str()); + } else { + /* no codepage file specified, use automatic selection */ + strcpy(cp_file_name, "auto"); + } + keyb_error = DOS_LoadKeyboardLayout(layout_id, cp, cp_file_name); + } + else { + if(!strcasecmp(layout_id, "us")) { + keyb_error = DOS_LoadKeyboardLayout("us", 437, "auto"); /* set 437 as default codepage for US layout */ + dos.loaded_codepage = 437; + } + else { + if(layout_name == NULL) { + keyb_error = DOS_LoadKeyboardLayout("us", 437, "auto"); /* Load a default layout if not loaded at all */ + } + keyb_error = DOS_SwitchKeyboardLayout(layout_id, cp); + } + } + switch (keyb_error) { + case KEYB_NOERROR: + { + SwitchLanguage(cpbak, cp ? cp : tocp, true); + WriteOut(MSG_Get("PROGRAM_KEYB_NOERROR"),layout_id, dos.loaded_codepage); + runRescan("-A -Q"); +#if C_OPENGL && DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW + if (OpenGL_using() && control->opt_lang.size() && lastcp && lastcp != dos.loaded_codepage) + UpdateSDLDrawTexture(); +#endif + break; + } + case KEYB_FILENOTFOUND: + if (temp_line!="/?"&&temp_line!="-?") WriteOut(MSG_Get("PROGRAM_KEYB_FILENOTFOUND"),layout_id); + WriteOut(MSG_Get("PROGRAM_KEYB_SHOWHELP")); + break; + case KEYB_INVALIDFILE: + WriteOut(MSG_Get("PROGRAM_KEYB_INVALIDFILE"),layout_id); + break; + case KEYB_LAYOUTNOTFOUND: + WriteOut(MSG_Get("PROGRAM_KEYB_LAYOUTNOTFOUND"),layout_id, cp ? cp : tocp); + break; + case KEYB_INVALIDCPFILE: + WriteOut(MSG_Get("PROGRAM_KEYB_INVCPFILE"),layout_id); + WriteOut(MSG_Get("PROGRAM_KEYB_SHOWHELP")); + break; + case KEYB_LOADERROR: + WriteOut("Layout load error\n"); + break; + default: + LOG(LOG_DOSMISC,LOG_ERROR)("KEYB:Invalid returncode %x",(int)keyb_error); + break; + } + } + } else { + /* no parameter in the command line, just output codepage info and possibly loaded layout ID */ + const char* layout_name = DOS_GetLoadedLayout(); + if (layout_name==NULL) { + WriteOut(MSG_Get("PROGRAM_KEYB_INFO"),dos.loaded_codepage); + } else { + WriteOut(MSG_Get("PROGRAM_KEYB_INFO_LAYOUT"),dos.loaded_codepage,layout_name); + } + } +} + +static void KEYB_ProgramStart(Program * * make) { + *make=new KEYB; +} +#endif + +// MODE + +#if !defined(OSFREE) +class MODE : public Program { +public: + void Run(void) override; +private: + void PrintStatus() { + WriteOut(MSG_Get("PROGRAM_MODE_STATUS"), COLS, LINES); +#if defined(USE_TTF) + if(!ttf.inUse) +#endif + WriteOut(MSG_Get("PROGRAM_MODE_NOTSUPPORTED")); + } + int LINES = 25, COLS = 80; +}; + +bool setlines(const char *mname); +void MODE::Run(void) { + uint16_t rate=0,delay=0,cols=0,lines=0,mode; + LINES=(IS_EGAVGA_ARCH?real_readb(BIOSMEM_SEG,BIOSMEM_NB_ROWS):24)+1; + COLS=real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); + if (!cmd->FindCommand(1,temp_line)) { + PrintStatus(); + return; + } + if (temp_line=="-?" || temp_line=="/?") { + WriteOut(MSG_Get("PROGRAM_MODE_USAGE")); + return; + } + else if (strcasecmp(temp_line.c_str(),"con")==0 || strcasecmp(temp_line.c_str(),"con:")==0) { + if (IS_PC98_ARCH) return; + if (cmd->GetCount()<2) { + PrintStatus(); + return; + } + if (cmd->FindStringBegin("rate=", temp_line,false)) rate=atoi(temp_line.c_str()); + if (cmd->FindStringBegin("delay=", temp_line,false)) delay=atoi(temp_line.c_str()); + if (cmd->FindStringBegin("cols=", temp_line,false)) cols=atoi(temp_line.c_str()); else cols=COLS; + if (cmd->FindStringBegin("lines=",temp_line,false)) lines=atoi(temp_line.c_str()); else lines=LINES; + bool optr=cmd->FindStringBegin("rate=", temp_line,true), optd=cmd->FindStringBegin("delay=",temp_line,true), optc=cmd->FindStringBegin("cols=", temp_line,true), optl=cmd->FindStringBegin("lines=",temp_line,true); + if ((optr&&!optd)||(optd&&!optr)) { + WriteOut(MSG_Get("PROGRAM_MODE_RATE_DELAY")); + return; + } + if (cmd->GetCount()>1) goto modeparam; + if (optr&&optd) { + if (rate<1 || rate>32 || delay<1 || delay>4) goto modeparam; + IO_Write(0x60,0xf3); IO_Write(0x60,(uint8_t)(((delay-1)<<5)|(32-rate))); + } + if ((optc||optl)&&(cols!=COLS||lines!=LINES)) { + std::string cmd="line_"+std::to_string((int)cols)+"x"+std::to_string((int)lines); + if (!setlines(cmd.c_str())) goto modeparam; + } + return; + } + else if (cmd->GetCount()>1) goto modeparam; + else if (strcasecmp(temp_line.c_str(),"mono")==0) mode=7; + else if (machine==MCH_HERC || machine==MCH_MDA) goto modeparam; + else if (strcasecmp(temp_line.c_str(),"co80")==0) mode=3; + else if (strcasecmp(temp_line.c_str(),"bw80")==0) mode=2; + else if (strcasecmp(temp_line.c_str(),"co40")==0) mode=1; + else if (strcasecmp(temp_line.c_str(),"bw40")==0) mode=0; + else goto modeparam; + mem_writeb(BIOS_CONFIGURATION,(mem_readb(BIOS_CONFIGURATION)&0xcf)|((mode==7)?0x30:0x20)); + reg_ax=mode; + CALLBACK_RunRealInt(0x10); + return; +modeparam: + WriteOut(MSG_Get("PROGRAM_MODE_INVALID_PARAMETERS")); + return; +} + +static void MODE_ProgramStart(Program * * make) { + *make=new MODE; +} +#endif +/* +// MORE +class MORE : public Program { +public: + void Run(void); +}; + +void MORE::Run(void) { + if (cmd->GetCount()) { + WriteOut(MSG_Get("PROGRAM_MORE_USAGE")); + return; + } + uint16_t ncols=mem_readw(BIOS_SCREEN_COLUMNS); + uint16_t nrows=(uint16_t)mem_readb(BIOS_ROWS_ON_SCREEN_MINUS_1); + uint16_t col=1,row=1; + uint8_t c;uint16_t n=1; + WriteOut("\n"); + while (n) { + DOS_ReadFile(STDIN,&c,&n); + if (n==0 || c==0x1a) break; // stop at EOF + switch (c) { + case 0x07: break; + case 0x08: if (col>1) col--; break; + case 0x09: col=((col+7)&~7)+1; break; + case 0x0a: row++; break; + case 0x0d: col=1; break; + default: col++; break; + } + if (col>ncols) {col=1;row++;} + DOS_WriteFile(STDOUT,&c,&n); + if (row>=nrows) { + WriteOut(MSG_Get("PROGRAM_MORE_MORE")); + DOS_ReadFile(STDERR,&c,&n); + if (c==0) DOS_ReadFile(STDERR,&c,&n); // read extended key + WriteOut("\n\n"); + col=row=1; + } + } +} + +static void MORE_ProgramStart(Program * * make) { + *make=new MORE; +} +*/ + +void MIXER_ProgramStart(Program * * make); +void REDOS_ProgramStart(Program * * make); +void SHELL_ProgramStart(Program * * make); +void SERIAL_ProgramStart(Program * * make); +#if !defined(OSFREE) +void CONFIG_ProgramStart(Program * * make); +#endif +void IPXNET_ProgramStart(Program * * make); +void A20GATE_ProgramStart(Program * * make); +void CGASNOW_ProgramStart(Program * * make); +void PARALLEL_ProgramStart(Program * * make); +void PC98UTIL_ProgramStart(Program * * make); +void VESAMOED_ProgramStart(Program * * make); +void VFRCRATE_ProgramStart(Program * * make); + +#if defined C_DEBUG +# if !defined(OSFREE) +class NMITEST : public Program { +public: + void Run(void) override { + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_NMITEST_HELP")); + return; + } + WriteOut(MSG_Get("PROGRAM_NMITEST_GENERATE_NMI")); + CPU_Raise_NMI(); + } +}; + +static void NMITEST_ProgramStart(Program * * make) { + *make=new NMITEST; +} +# endif +#endif + +#if !defined(OSFREE) +class CAPMOUSE : public Program +{ +public: + void Run() override + { + auto val = 0; + auto tmp = std::string(""); + + if(cmd->GetCount() == 0) + val = -1; + else if(cmd->FindExist("/?", true)) + val = 0; + else if(cmd->FindExist("/C", false)) + val = 1; + else if(cmd->FindExist("/R", false)) + val = 2; + + auto cap = false; + switch(val) + { + case -1: + case 2: + break; + case 1: + cap = true; + break; + case 0: + default: + WriteOut(MSG_Get("PROGRAM_CAPMOUSE_HELP")); + return; + } + + if (val>-1) { + CaptureMouseNotify(!cap); + GFX_CaptureMouse(cap); + } + std::string msg; + msg.append(MSG_Get("PROGRAM_CAPMOUSE_MOUSE")); + if (val==-1) msg.append(MSG_Get("PROGRAM_CAPMOUSE_CURRENTLY")); + msg.append(Mouse_IsLocked() ? MSG_Get("PROGRAM_CAPMOUSE_CAPTURED") : MSG_Get("PROGRAM_CAPMOUSE_RELEASED")); + msg.append(".\n"); + WriteOut(msg.c_str()); + } +}; + +void CAPMOUSE_ProgramStart(Program** make) +{ + *make = new CAPMOUSE; +} +#endif + +#if !defined(OSFREE) +class LABEL : public Program +{ + public: + void Help() { + WriteOut(MSG_Get("PROGRAM_LABEL_HELP")); + } + void Run() override + { + /* MS-DOS behavior: If no label provided at the command line, prompt for one. + * + * LABEL [drive:] [label] + * + * No options are supported in MS-DOS, and the label can have spaces in it. + * This is valid, apparently: + * + * LABEL H E L L O + * + * Will set the volume label to "H E L L O" + * + * Label /? will print help. + */ + std::string label; + uint8_t drive = DOS_GetDefaultDrive(); + const char *raw = cmd->GetRawCmdline().c_str(); + + /* skip space */ + while (*raw == ' ') raw++; + + /* options */ + if (raw[0] == '/') { + raw++; + if (raw[0] == '?') { + Help(); + return; + } + } + + /* is the next part a drive letter? */ + if (raw[0] != 0 && raw[1] != 0) { + if (isalpha(raw[0]) && raw[1] == ':') { + drive = tolower(raw[0]) - 'a'; + raw += 2; + while (*raw == ' ') raw++; + } + } + + /* then the label. MS-DOS behavior is to treat the rest of the command line, spaces and all, as the label */ + if (*raw != 0) { + label = raw; + } + + /* if the label is longer than 11 chars or contains a dot, MS-DOS will reject it and then prompt for another label */ + if (label.length() > 11) { + WriteOut(MSG_Get("PROGRAM_LABEL_TOOLONG")); + label.clear(); + } + else if (label.find_first_of(".:/\\") != std::string::npos) { + WriteOut(MSG_Get("PROGRAM_LABEL_BADCHARS")); + label.clear(); + } + + /* if no label provided, MS-DOS will display the current label and serial number and prompt the user to type in a new label. */ + if (label.empty()) { + std::string clabel = Drives[drive]->GetLabel(); + + if (!clabel.empty()) + WriteOut(MSG_Get("PROGRAM_LABEL_VOLUMEIS"),drive+'A',clabel.c_str()); + else + WriteOut(MSG_Get("PROGRAM_LABEL_NOLABEL"),drive+'A'); + } + + /* If no label is provided, MS-DOS will prompt the user whether to delete the label. */ + if (label.empty()) { + uint8_t c,ans=0; + uint16_t s; + + /* It does not make sense to say drive C: has no label, then prompt to delete it */ + if ((*Drives[drive]->GetLabel()) == 0) return; + + inshell = true; + do { + WriteOut(MSG_Get("PROGRAM_LABEL_DELETE")); + s = 1; + DOS_ReadFile(STDIN,&c,&s); + WriteOut("\n"); + if (s != 1 || c == 3) {inshell=false;return;} + ans = uint8_t(tolower(char(c))); + } while (!(ans == char_yes || ans == char_no)); + inshell = false; + + if (ans != char_yes) return; + } + + /* delete then create the label */ + Drives[drive]->SetLabel("",false,true); + Drives[drive]->SetLabel(label.c_str(),false,true); + } +}; + +void LABEL_ProgramStart(Program** make) +{ + *make = new LABEL; +} +#endif + +std::vector MAPPER_GetEventNames(const std::string &prefix); +void MAPPER_AutoType(std::vector &sequence, const uint32_t wait_ms, const uint32_t pacing_ms, bool choice); + +#if !defined(OSFREE) +class AUTOTYPE : public Program { +public: + void Run() override; + +private: + void PrintUsage(); + void PrintKeys(); + bool ReadDoubleArg(const std::string &name, + const char *flag, + const double &def_value, + const double &min_value, + const double &max_value, + double &value); +}; + +void AUTOTYPE_ProgramStart(Program **make); + +void AUTOTYPE::PrintUsage() +{ + resetcolor = true; + WriteOut(MSG_Get("PROGRAM_AUTOTYPE_HELP")); +} + +// Prints the key-names for the mapper's currently-bound events. +void AUTOTYPE::PrintKeys() +{ + const std::vector names = MAPPER_GetEventNames("key_"); + + // Keep track of the longest key name + size_t max_length = 0; + for (const auto &name : names) + max_length = (std::max)(name.length(), max_length); + + // Sanity check to avoid dividing by 0 + if (!max_length) { + WriteOut_NoParsing(MSG_Get("PROGRAM_AUTOTYPE_NO_BINDINGS")); + return; + } + + // Setup our rows and columns + const size_t wrap_width = 72; // comfortable columns not pushed to the edge + const size_t columns = wrap_width / max_length; + const size_t rows = ceil_udivide(names.size(), columns); + + // Build the string output by rows and columns + auto name = names.begin(); + for (size_t row = 0; row < rows; ++row) { + for (size_t i = row; i < names.size(); i += rows) + WriteOut(" %-*s", static_cast(max_length), (name[i].size()==1&&name[i][0]>='a'&&name[i][0]<='z'?name[i]+" ("+std::string(1, toupper(name[i][0]))+")":name[i]).c_str()); + WriteOut_NoParsing("\n"); + } +} + +/* + * Converts a string to a finite number (such as float or double). + * Returns the number or quiet_NaN, if it could not be parsed. + * This function does not attempt to capture exceptions that may + * be thrown from std::stod(...) */ - - void MIXER_ProgramStart(Program * * make); - void REDOS_ProgramStart(Program * * make); - void SHELL_ProgramStart(Program * * make); - void SERIAL_ProgramStart(Program * * make); - void CONFIG_ProgramStart(Program * * make); - void IPXNET_ProgramStart(Program * * make); - void A20GATE_ProgramStart(Program * * make); - void CGASNOW_ProgramStart(Program * * make); - void PARALLEL_ProgramStart(Program * * make); - void PC98UTIL_ProgramStart(Program * * make); - void VESAMOED_ProgramStart(Program * * make); - void VFRCRATE_ProgramStart(Program * * make); - - #if defined C_DEBUG - class NMITEST : public Program { - public: - void Run(void) override { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut("Generates a non-maskable interrupt (NMI).\n\nNMITEST\n\nNote: This is a debugging tool to test if the interrupt handler works properly.\n"); - return; - } - WriteOut("Generating a non-maskable interrupt (NMI)...\n"); - CPU_Raise_NMI(); - } - }; - - static void NMITEST_ProgramStart(Program * * make) { - *make=new NMITEST; - } - #endif - - class CAPMOUSE : public Program - { - public: - void Run() override - { - auto val = 0; - auto tmp = std::string(""); - - if(cmd->GetCount() == 0) - val = -1; - else if(cmd->FindExist("/?", true)) - val = 0; - else if(cmd->FindExist("/C", false)) - val = 1; - else if(cmd->FindExist("/R", false)) - val = 2; - - auto cap = false; - switch(val) - { - case -1: - case 2: - break; - case 1: - cap = true; - break; - case 0: - default: - WriteOut("Captures or releases the mouse inside DOSBox-X.\n\n"); - WriteOut("CAPMOUSE [/C|/R]\n"); - WriteOut(" /C Capture the mouse\n"); - WriteOut(" /R Release the mouse\n"); - return; - } - - if (val>-1) { - CaptureMouseNotify(!cap); - GFX_CaptureMouse(cap); - } - std::string msg; - msg.append("Mouse "); - if (val==-1) msg.append("is currently "); - msg.append(Mouse_IsLocked() ? "captured" : "released"); - msg.append(".\n"); - WriteOut(msg.c_str()); - } - }; - - void CAPMOUSE_ProgramStart(Program** make) - { - *make = new CAPMOUSE; - } - - class LABEL : public Program - { - public: - void Help() { - WriteOut(MSG_Get("PROGRAM_LABEL_HELP")); - } - void Run() override - { - /* MS-DOS behavior: If no label provided at the command line, prompt for one. - * - * LABEL [drive:] [label] - * - * No options are supported in MS-DOS, and the label can have spaces in it. - * This is valid, apparently: - * - * LABEL H E L L O - * - * Will set the volume label to "H E L L O" - * - * Label /? will print help. - */ - std::string label; - uint8_t drive = DOS_GetDefaultDrive(); - const char *raw = cmd->GetRawCmdline().c_str(); - - /* skip space */ - while (*raw == ' ') raw++; - - /* options */ - if (raw[0] == '/') { - raw++; - if (raw[0] == '?') { - Help(); - return; - } - } - - /* is the next part a drive letter? */ - if (raw[0] != 0 && raw[1] != 0) { - if (isalpha(raw[0]) && raw[1] == ':') { - drive = tolower(raw[0]) - 'a'; - raw += 2; - while (*raw == ' ') raw++; - } - } - - /* then the label. MS-DOS behavior is to treat the rest of the command line, spaces and all, as the label */ - if (*raw != 0) { - label = raw; - } - - /* if the label is longer than 11 chars or contains a dot, MS-DOS will reject it and then prompt for another label */ - if (label.length() > 11) { - WriteOut(MSG_Get("PROGRAM_LABEL_TOOLONG")); - label.clear(); - } - else if (label.find_first_of(".:/\\") != std::string::npos) { - WriteOut(MSG_Get("PROGRAM_LABEL_BADCHARS")); - label.clear(); - } - - /* if no label provided, MS-DOS will display the current label and serial number and prompt the user to type in a new label. */ - if (label.empty()) { - std::string clabel = Drives[drive]->GetLabel(); - - if (!clabel.empty()) - { - printf("Volume is: %s\n", clabel.c_str()); - WriteOut(MSG_Get("PROGRAM_LABEL_VOLUMEIS"),drive+'A',clabel.c_str()); - } - else - WriteOut(MSG_Get("PROGRAM_LABEL_NOLABEL"),drive+'A'); - } - - /* If no label is provided, MS-DOS will prompt the user whether to delete the label. */ - if (label.empty()) { - uint8_t c,ans=0; - uint16_t s; - - /* It does not make sense to say drive C: has no label, then prompt to delete it */ - if ((*Drives[drive]->GetLabel()) == 0) return; - - inshell = true; - do { - WriteOut(MSG_Get("PROGRAM_LABEL_DELETE")); - s = 1; - DOS_ReadFile(STDIN,&c,&s); - WriteOut("\n"); - if (s != 1 || c == 3) {inshell=false;return;} - ans = uint8_t(tolower(char(c))); - } while (!(ans == MSG_Get("INT21_6523_YESNO_CHARS")[0] || ans == MSG_Get("INT21_6523_YESNO_CHARS")[1])); - inshell = false; - - if (ans != MSG_Get("INT21_6523_YESNO_CHARS")[0]) return; - } - - /* delete then create the label */ - Drives[drive]->SetLabel("",false,true); - Drives[drive]->SetLabel(label.c_str(),false,true); - } - }; - - void LABEL_ProgramStart(Program** make) - { - *make = new LABEL; - } - - std::vector MAPPER_GetEventNames(const std::string &prefix); - void MAPPER_AutoType(std::vector &sequence, const uint32_t wait_ms, const uint32_t pacing_ms, bool choice); - - class AUTOTYPE : public Program { - public: - void Run() override; - - private: - void PrintUsage(); - void PrintKeys(); - bool ReadDoubleArg(const std::string &name, - const char *flag, - const double &def_value, - const double &min_value, - const double &max_value, - double &value); - }; - - void AUTOTYPE_ProgramStart(Program **make); - - void AUTOTYPE::PrintUsage() - { - constexpr const char *msg = - "Performs scripted keyboard entry into a running DOS program.\n\n" - "AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]]\n\n" - "Where:\n" - " -list: prints all available button names.\n" - " -w WAIT: seconds before typing begins. Two second default; max of 30.\n" - " -p PACE: seconds between each keystroke. Half-second default; max of 10.\n\n" - " The sequence is comprised of one or more space-separated buttons.\n" - " Autotyping begins after WAIT seconds, and each button is entered\n" - " every PACE seconds. The , character inserts an extra PACE delay.\n\n" - "Some examples:\n" - " \033[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter\033[0m\n" - " \033[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter\033[0m\n" - " \033[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter\033[0m\n"; - resetcolor = true; - WriteOut(msg); - } - - // Prints the key-names for the mapper's currently-bound events. - void AUTOTYPE::PrintKeys() - { - const std::vector names = MAPPER_GetEventNames("key_"); - - // Keep track of the longest key name - size_t max_length = 0; - for (const auto &name : names) - max_length = (std::max)(name.length(), max_length); - - // Sanity check to avoid dividing by 0 - if (!max_length) { - WriteOut_NoParsing( - "AUTOTYPE: The mapper has no key bindings\n"); - return; - } - - // Setup our rows and columns - const size_t wrap_width = 72; // comfortable columns not pushed to the edge - const size_t columns = wrap_width / max_length; - const size_t rows = ceil_udivide(names.size(), columns); - - // Build the string output by rows and columns - auto name = names.begin(); - for (size_t row = 0; row < rows; ++row) { - for (size_t i = row; i < names.size(); i += rows) - WriteOut(" %-*s", static_cast(max_length), (name[i].size()==1&&name[i][0]>='a'&&name[i][0]<='z'?name[i]+" ("+std::string(1, toupper(name[i][0]))+")":name[i]).c_str()); - WriteOut_NoParsing("\n"); - } - } - - /* - * Converts a string to a finite number (such as float or double). - * Returns the number or quiet_NaN, if it could not be parsed. - * This function does not attempt to capture exceptions that may - * be thrown from std::stod(...) - */ - template - T to_finite(const std::string& input) { - // Defensively set NaN from the get-go - T result = std::numeric_limits::quiet_NaN(); - size_t bytes_read = 0; - try { - const double interim = std::stod(input, &bytes_read); - if (!input.empty() && bytes_read == input.size()) - result = static_cast(interim); - } - // Capture expected exceptions stod may throw - catch (std::invalid_argument& e) { (void)e; } - catch (std::out_of_range& e) { (void)e; } - return result; - } - - /* - * Reads a floating point argument from command line, where: - * - name is a human description for the flag, ie: DELAY - * - flag is the command-line flag, ie: -d or -delay - * - default is the default value if the flag doesn't exist - * - value will be populated with the default or provided value - * - * Returns: - * true if 'value' is set to the default or read from the arg. - * false if the argument was used but could not be parsed. - */ - bool AUTOTYPE::ReadDoubleArg(const std::string &name, - const char *flag, - const double &def_value, - const double &min_value, - const double &max_value, - double &value) - { - bool result = false; - std::string str_value; - - // Is the user trying to set this flag? - if (cmd->FindString(flag, str_value, true)) { - // Can the user's value be parsed? - const double user_value = to_finite(str_value); - if (isfinite(user_value)) { - result = true; - - // Clamp the user's value if needed - value = clamp(user_value, min_value, max_value); - - // Inform them if we had to clamp their value - if (fabs(user_value - value) > - std::numeric_limits::epsilon()) - WriteOut("AUTOTYPE: bounding %s value of %.2f " - "to %.2f\n", - name.c_str(), user_value, value); - - } else { // Otherwise we couldn't parse their value - WriteOut("AUTOTYPE: %s value '%s' is not a valid " - "floating point number\n", - name.c_str(), str_value.c_str()); - } - } else { // Otherwise they haven't passed this flag - value = def_value; - result = true; - } - return result; - } - - void AUTOTYPE::Run() - { - // Hack To allow long commandlines - ChangeToLongCmd(); - - // Usage - if (!cmd->GetCount()||(cmd->GetCount()==1 && (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)))) { - PrintUsage(); - return; - } - - // Print available keys - if (cmd->FindExist("-list", false) || cmd->FindExist("/list", false)) { - PrintKeys(); - return; - } - - // Get the wait delay in milliseconds - double wait_s; - constexpr double def_wait_s = 2.0; - constexpr double min_wait_s = 0.0; - constexpr double max_wait_s = 30.0; - if (!ReadDoubleArg("WAIT", "-w", def_wait_s, min_wait_s, max_wait_s, wait_s)) - return; - const auto wait_ms = static_cast(wait_s * 1000); - - // Get the inter-key pacing in milliseconds - double pace_s; - constexpr double def_pace_s = 0.5; - constexpr double min_pace_s = 0.0; - constexpr double max_pace_s = 10.0; - if (!ReadDoubleArg("PACE", "-p", def_pace_s, min_pace_s, max_pace_s, pace_s)) - return; - const auto pace_ms = static_cast(pace_s * 1000); - - // Get the button sequence - std::vector sequence; - cmd->FillVector(sequence); - if (sequence.empty()) { - WriteOut_NoParsing("AUTOTYPE: button sequence is empty\n"); - return; - } - MAPPER_AutoType(sequence, wait_ms, pace_ms, false); - } - - void AUTOTYPE_ProgramStart(Program **make) - { - *make = new AUTOTYPE; - } - - class ADDKEY : public Program { - public: - void Run(void) override; - private: - void PrintUsage() { - constexpr const char *msg = - "Generates artificial keypresses.\n\nADDKEY [pmsec] [key]\n\n" - "For example, the command below types \"dir\" followed by ENTER after 1 second:\n\nADDKEY p1000 d i r enter\n\n" - "You could also try AUTOTYPE command instead of this command to perform\nscripted keyboard entry into a running DOS program.\n"; - WriteOut(msg); - } - }; - - void ADDKEY::Run() - { - // Hack To allow long commandlines - ChangeToLongCmd(); - - // Usage - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - PrintUsage(); - return; - } - char *args=(char *)cmd->GetRawCmdline().c_str(); - args=trim(args); - DOS_Shell temp; - temp.CMD_ADDKEY(args); - } - - static void ADDKEY_ProgramStart(Program * * make) { - *make=new ADDKEY; - } - - class LS : public Program { - public: - void Run(void) override; - }; - - void LS::Run() - { - std::string tmp = ""; - cmd->GetStringRemain(tmp); - char args[CMD_MAXLINE]; - strcpy(args, tmp.c_str()); - DOS_Shell temp; - temp.CMD_LS(args); - } - - static void LS_ProgramStart(Program * * make) { - *make=new LS; - } - - class CHOICE : public Program { - public: - void Run(void) override; - }; - - void CHOICE::Run() - { - std::string tmp = ""; - cmd->GetStringRemain(tmp); - char args[CMD_MAXLINE]; - strcpy(args, tmp.c_str()); - DOS_Shell temp; - temp.CMD_CHOICE(args); - result_errorcode = dos.return_code; - } - - void CHOICE_ProgramStart(Program **make) - { - *make = new CHOICE; - } - - class COUNTRY : public Program { - public: - void Run(void) override; - }; - - void COUNTRY::Run() - { - char *args=(char *)cmd->GetRawCmdline().c_str(); - args=trim(args); - DOS_Shell temp; - temp.CMD_COUNTRY(args); - } - - static void COUNTRY_ProgramStart(Program * * make) { - *make=new COUNTRY; - } - - #ifdef C_ICONV - class UTF8 : public Program { - public: - void Run(void) override; - private: - void PrintUsage() { - constexpr const char *msg = - "Converts UTF-8 text to view in the current code page.\n\n" - "UTF8 < [drive:][path]filename\ncommand-name | UTF8\n"; - WriteOut(msg); - } - }; - - void UTF8::Run() - { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - PrintUsage(); - return; - } - if (usecon) { - WriteOut("No input text found.\n"); - return; - } - // int cp=dos.loaded_codepage; /* unused */ - char target[11] = "CP437"; - if (dos.loaded_codepage==808) strcpy(target, "CP866"); - else if (dos.loaded_codepage==859) strcpy(target, "CP858"); - else if (dos.loaded_codepage==867) strcpy(target, "CP862"); - else if (dos.loaded_codepage==872) strcpy(target, "CP855"); - else if (dos.loaded_codepage==951 && !uao) strcpy(target, "BIG5HKSCS"); - else if (dos.loaded_codepage==951) strcpy(target, "CP950"); - else if (!(customcp && dos.loaded_codepage==customcp) && !(altcp && dos.loaded_codepage==altcp)) sprintf(target, "CP%d", dos.loaded_codepage); - _Iconv *x = _Iconv::create("UTF-8"); - _Iconv *fx = _Iconv::create(target); - if (x == NULL || fx == NULL) { - WriteOut("Invalid code page for text conversion.\n"); - return; - } - test_string dst; - std::string text=""; - char temp[4096]; - morelen=true; - bool first=true; - uint8_t c;uint16_t m=1; - while (true) { - DOS_ReadFile (STDIN,&c,&m); - if (m) text+=std::string(1, c); - if (m && first && text.size() == 2 && (((uint8_t)text[0] == 0xFE && (uint8_t)text[1] == 0xFF) || ((uint8_t)text[0] == 0xFF && (uint8_t)text[1] == 0xFE))) { - WriteOut("The input text is UTF-16.\n"); - break; - } - if (m && first && text.size() == 3 && (uint8_t)text[0] == 0xEF && (uint8_t)text[1] == 0xBB && (uint8_t)text[2] == 0xBF) { - first=false; - text=""; - } else if (!m || c==0x1A || c==0xA || (text.size()>1 && (uint8_t)text[text.size()-2] == 0xD)) { - if (c!=0xA && text.size()>1 && (uint8_t)text[text.size()-2] == 0xD) text[text.size()-1] = 0xA; - if (CodePageHostToGuestUTF8(temp,text.c_str())) { - WriteOut_NoParsing(temp, true); - } else { - x->set_src(text.c_str()); - if ((customcp && dos.loaded_codepage==customcp) || (altcp && dos.loaded_codepage==altcp) || x->string_convert_dest(dst) < 0 || (text.size() && !fx->string_convert(dst).size())) { - WriteOut("An error occurred during text conversion.\n"); - morelen=false; - return; - } else - WriteOut_NoParsing(fx->string_convert(dst).c_str(), true); - } - first=false; - text=""; - if (!m||c==0x1A) break; - else if (c!=0xA) text+=std::string(1, c); - } - } - x->finish(); - morelen=false; - } - - static void UTF8_ProgramStart(Program * * make) { - *make=new UTF8; - } - - class UTF16 : public Program { - public: - void Run(void) override; - private: - void PrintUsage() { - constexpr const char *msg = - "Converts UTF-16 text to view in the current code page.\n\n" - "UTF16 [/BE|/LE] < [drive:][path]filename\ncommand-name | UTF16 [/BE|/LE]\n\n" - " /BE Use UTF-16 Big Endian\n /LE Use UTF-16 Little Endian\n"; - WriteOut(msg); - } - }; - - void UTF16::Run() - { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - PrintUsage(); - return; - } - if (usecon) { - WriteOut("No input text found.\n"); - return; - } - char target[11] = "CP437"; - if (dos.loaded_codepage==808) strcpy(target, "CP866"); - else if (dos.loaded_codepage==859) strcpy(target, "CP858"); - else if (dos.loaded_codepage==867) strcpy(target, "CP862"); - else if (dos.loaded_codepage==872) strcpy(target, "CP855"); - else if (dos.loaded_codepage==951 && !uao) strcpy(target, "BIG5HKSCS"); - else if (dos.loaded_codepage==951) strcpy(target, "CP950"); - else if (!(customcp && dos.loaded_codepage==customcp) && !(altcp && dos.loaded_codepage==altcp)) sprintf(target, "CP%d", dos.loaded_codepage); - uint8_t buf[3];uint16_t m=2; - DOS_ReadFile (STDIN,buf,&m); - if (m<2) { - if (m==1) WriteOut("An error occurred during text conversion.\n"); - return; - } - bool le=true; - if (cmd->FindExist("-BE", false) || cmd->FindExist("/BE", false)) - le=false; - else if (cmd->FindExist("-LE", false) || cmd->FindExist("/LE", false)) - le=true; - else if (buf[0] == 0xFE && buf[1]== 0xFF) - le=false; - else if (buf[0] == 0xFF && buf[1]== 0xFE) - le=true; - #if defined(MACOSX) - else - le=false; - #endif - _Iconv *x = _Iconv::create(target); - if (x == NULL) { - WriteOut("Invalid code page for text conversion.\n"); - return; - } - test_char dst; - test_char_t *wch; - test_char_t ch = 0; - std::wstring text=L""; - char temp[4096]; - unsigned int c=0; - morelen=true; - bool first=true; - while (true) { - if (!first || (buf[0] == 0xFE && buf[1]== 0xFF) || (buf[0] == 0xFF && buf[1]== 0xFE)) DOS_ReadFile (STDIN,buf,&m); - first=false; - if (m==1) { - WriteOut("An error occurred during text conversion.\n"); - break; - } else if (m==2) { - ch=buf[le?1:0]*0x100+buf[le?0:1]; - text+=ch; - c++; - } - if (!m || ch==0x1A || ch==0xA || (c>1 && text[c-2] == 0xD)) { - if (ch!=0xA && c>1 && text[c-2] == 0xD) {text[c-1] = 0xA;} - wch=new test_char_t[c+1]; - for (unsigned int i=0; iset_src(wch); - if ((customcp && dos.loaded_codepage==customcp) || (altcp && dos.loaded_codepage==altcp) || x->string_convert_dest(dst) < 0 || (c && !dst.size())) { - WriteOut("An error occurred during text conversion.\n"); - delete[] wch; - morelen=false; - return; - } else - WriteOut_NoParsing(dst.c_str(), true); - } - delete[] wch; - text=L""; - c=0; - if (!m||ch==0x1A) break; - else if (ch!=0xA) {text+=ch;c++;} - } - } - x->finish(); - morelen=false; - } - - static void UTF16_ProgramStart(Program * * make) { - *make=new UTF16; - } - #endif - - class VTEXT : public Program { - public: - void Run(void) override; - private: - void PrintUsage() { - constexpr const char *msg = - "Changes V-text mode for the DOS/V emulation.\n\nVTEXT [mode]\n\n[mode] can be 0, 1, 2, for no V-text, V-text 1, and V-text 2 respectively.\n\nType VTEXT without a parameter to show the current V-text mode status.\n"; - WriteOut(msg); - } - }; - - void VTEXT::Run() - { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - PrintUsage(); - return; - } - std::string tmp = ""; - cmd->GetStringRemain(tmp); - char args[CMD_MAXLINE]; - strcpy(args, tmp.c_str()); - DOS_Shell temp; - temp.CMD_VTEXT(args); - } - - static void VTEXT_ProgramStart(Program * * make) { - *make=new VTEXT; - } - - class DCGA : public Program { - public: - void Run(void) override; - }; - - void DCGA::Run() - { - uint16_t oldax=reg_ax; - reg_ax = 0x74; - CALLBACK_RunRealInt(0x10); - reg_ax = oldax; - } - - static void DCGA_ProgramStart(Program * * make) { - *make=new DCGA; - } - - class TEXT80X25 : public Program { - public: - void Run(void) override; - }; - - void TEXT80X25::Run() - { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut("Changes to 80x25 text mode.\n"); - return; - } - clear_screen(); - setlines("line_80x25"); - show_prompt(); - } - - static void TEXT80X25_ProgramStart(Program * * make) { - *make=new TEXT80X25; - } - - class TEXT80X43 : public Program { - public: - void Run(void) override; - }; - - void TEXT80X43::Run() - { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut("Changes to 80x43 text mode.\n"); - return; - } - clear_screen(); - setlines("line_80x43"); - show_prompt(); - } - - static void TEXT80X43_ProgramStart(Program * * make) { - *make=new TEXT80X43; - } - - class TEXT80X50 : public Program { - public: - void Run(void) override; - }; - - void TEXT80X50::Run() - { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut("Changes to 80x50 text mode.\n"); - return; - } - clear_screen(); - setlines("line_80x50"); - show_prompt(); - } - - static void TEXT80X50_ProgramStart(Program * * make) { - *make=new TEXT80X50; - } - - class TEXT80X60 : public Program { - public: - void Run(void) override; - }; - - void TEXT80X60::Run() - { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut("Changes to 80x60 text mode.\n"); - return; - } - clear_screen(); - setlines("line_80x60"); - show_prompt(); - } - - static void TEXT80X60_ProgramStart(Program * * make) { - *make=new TEXT80X60; - } - - class TEXT132X25 : public Program { - public: - void Run(void) override; - }; - - void TEXT132X25::Run() - { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut("Changes to 132x25 text mode.\n"); - return; - } - clear_screen(); - setlines("line_132x25"); - show_prompt(); - } - - static void TEXT132X25_ProgramStart(Program * * make) { - *make=new TEXT132X25; - } - - class TEXT132X43 : public Program { - public: - void Run(void) override; - }; - - void TEXT132X43::Run() - { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut("Changes to 132x43 text mode.\n"); - return; - } - clear_screen(); - setlines("line_132x43"); - show_prompt(); - } - - static void TEXT132X43_ProgramStart(Program * * make) { - *make=new TEXT132X43; - } - - class TEXT132X50 : public Program { - public: - void Run(void) override; - }; - - void TEXT132X50::Run() - { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut("Changes to 132x50 text mode.\n"); - return; - } - clear_screen(); - setlines("line_132x50"); - show_prompt(); - } - - static void TEXT132X50_ProgramStart(Program * * make) { - *make=new TEXT132X50; - } - - class TEXT132X60 : public Program { - public: - void Run(void) override; - }; - - void TEXT132X60::Run() - { - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - WriteOut("Changes to 132x60 text mode.\n"); - return; - } - clear_screen(); - setlines("line_132x60"); - show_prompt(); - } - - static void TEXT132X60_ProgramStart(Program * * make) { - *make=new TEXT132X60; - } - - class HELP : public Program { - public: - void Run(void) override; - }; - - void HELP::Run() - { - std::string tmp = ""; - cmd->GetStringRemain(tmp); - char args[CMD_MAXLINE]; - strcpy(args, tmp.c_str()); - DOS_Shell temp; - temp.CMD_HELP(args); - } - - static void HELP_ProgramStart(Program * * make) { - *make=new HELP; - } - - class DELTREE : public Program { - public: - void Run(void) override; - private: - void PrintUsage() { - constexpr const char *msg = - "Deletes a directory and all the subdirectories and files in it.\n\n" - "To delete one or more files and directories:\n" - "DELTREE [/Y] [drive:]path [[drive:]path[...]]\n\n" - " /Y Suppresses prompting to confirm you want to delete\n" - " the subdirectory.\n" - " [drive:]path Specifies the name of the directory you want to delete.\n\n" - "Note: Use DELTREE cautiously. Every file and subdirectory within the\n" - "specified directory will be deleted.\n"; - WriteOut(msg); - } - }; - - void DELTREE::Run() - { - // Hack To allow long commandlines - ChangeToLongCmd(); - - // Usage - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - PrintUsage(); - return; - } - char *args=(char *)cmd->GetRawCmdline().c_str(); - args=trim(args); - DOS_Shell temp; - temp.CMD_DELTREE(args); - } - - static void DELTREE_ProgramStart(Program * * make) { - *make=new DELTREE; - } - - class TREE : public Program { - public: - void Run(void) override; - private: - void PrintUsage() { - constexpr const char *msg = - "Graphically displays the directory structure of a drive or path.\n\n" - "TREE [drive:][path] [/F] [/A]\n\n" - " /F Displays the names of the files in each directory.\n" - " /A Uses ASCII instead of extended characters.\n"; - WriteOut(msg); - } - }; - - void TREE::Run() - { - // Hack To allow long commandlines - ChangeToLongCmd(); - - // Usage - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - PrintUsage(); - return; - } - char *args=(char *)cmd->GetRawCmdline().c_str(); - args=trim(args); - DOS_Shell temp; - temp.CMD_TREE(args); - } - - static void TREE_ProgramStart(Program * * make) { - *make=new TREE; - } - - class TITLE : public Program { - public: - void Run(void) override; - private: - void PrintUsage() { - constexpr const char *msg = - "Sets the window title for the DOSBox-X window.\n\n" - "TITLE [string]\n\n" - " string Specifies the title for the DOSBox-X window.\n"; - WriteOut(msg); - } - }; - - bool CodePageGuestToHostUTF8(char *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*/); - - void TITLE::Run() - { - // Hack To allow long commandlines - ChangeToLongCmd(); - - // Usage - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - PrintUsage(); - return; - } - char *args=trim((char *)cmd->GetRawCmdline().c_str()); - char title[4096]; - if(CodePageGuestToHostUTF8(title, args)) { - dosbox_title=title; - } else { - dosbox_title=args; - } - SetVal("dosbox", "title", dosbox_title); - GFX_SetTitle(-1,-1,-1,false); - } - - static void TITLE_ProgramStart(Program * * make) { - *make=new TITLE; - } - - class VHDMAKE : public Program { - public: - void Run(void) override; - private: - const char* vhdTypes[5] = { "", "", "Fixed", "Dynamic", "Differencing" }; - uint64_t ssizetou64(const char* s_size); - void PrintUsage() { - const char* msg = MSG_Get("PROGRAM_VHDMAKE_HELP"); - WriteOut(msg); - } - }; - - // Converts a string disk size with unit into a 64-bit unsigned integer - uint64_t VHDMAKE::ssizetou64(const char* s_size) { - const char* sizes = "BKMGT"; - char* sd_size = _strdup(s_size); - char* last = sd_size + strlen(s_size) - 1; - char* c; - uint64_t size; - - if((c = strchr((char*)sizes, toupper(*last)))) { - *last = 0; - size = atoll(sd_size); - size <<= ((c - sizes) * 10); - } - else { - size = atoll(sd_size); - } - free(sd_size); - return size; - } - - void VHDMAKE::Run() - { - bool bOverwrite = false; - // bool bExists = false; /* unused */ - uint32_t ret; - char basename[256], filename[256]; - - // Hack To allow long commandlines - ChangeToLongCmd(); - - // Usage - if(cmd->FindExist("-?", false) || cmd->FindExist("/?", false) || cmd->GetCount() < 2) { - PrintUsage(); - return; - } - - if(cmd->FindExist("-f", true) || cmd->FindExist("-force", true)) - bOverwrite = true; - - if(cmd->FindExist("-i", true) || cmd->FindExist("-info", true)) { - if(cmd->GetCount() > 1) { - PrintUsage(); - return; - } - cmd->FindCommand(1, temp_line); - safe_strcpy(filename, temp_line.c_str()); // image to query - - imageDiskVHD::VHDInfo* info = NULL; - if(imageDiskVHD::GetInfo(filename, &info)) { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_NOINFO"), filename); - return; - } - WriteOut(MSG_Get("PROGRAM_VHDMAKE_INFO"), filename, vhdTypes[(int)info->vhdType], info->vhdSizeMB); - if(info->vhdType != imageDiskVHD::VHD_TYPE_FIXED) - WriteOut(MSG_Get("PROGRAM_VHDMAKE_BLOCKSTATS"), info->allocatedBlocks, info->totalBlocks); - else - WriteOut(".\n"); - if(info->parentInfo != NULL) { - uint32_t index = 0; - imageDiskVHD::VHDInfo* p = info->parentInfo; - while(p != NULL) { - index++; - for(uint32_t i = 0; i < index; i++) WriteOut(" "); - WriteOut("child of \"%s\" (%s)", p->diskname.c_str(), vhdTypes[(int)p->vhdType]); - if (p->vhdType != imageDiskVHD::VHD_TYPE_FIXED) - WriteOut(MSG_Get("PROGRAM_VHDMAKE_BLOCKSTATS"), p->allocatedBlocks, p->totalBlocks); - else - WriteOut(".\n"); - p = p->parentInfo; - } - } - delete info; - return; - } - - if(cmd->FindExist("-m", true) || cmd->FindExist("-merge", true)) { - if(cmd->GetCount() > 1) { - PrintUsage(); - return; - } - cmd->FindCommand(1, temp_line); - safe_strcpy(basename, temp_line.c_str()); - imageDiskVHD* vhd; - if(imageDiskVHD::Open(basename, true, (imageDisk**)&vhd) != imageDiskVHD::OPEN_SUCCESS) { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_ERROPEN"), basename); - return; - } - if(vhd->vhdType != imageDiskVHD::VHD_TYPE_DIFFERENCING) { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_CANTMERGE"), basename); - delete vhd; - return; - } - imageDiskVHD::VHDInfo* info = new imageDiskVHD::VHDInfo; - if(vhd->GetInfo(info)) { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_NOINFO"), basename); - return; - } - uint32_t totalSectorsMerged, totalBlocksUpdated; - std::string parentName = info->parentInfo->diskname; - if(vhd->MergeSnapshot(&totalSectorsMerged, &totalBlocksUpdated)) { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_MERGEREPORT"), totalSectorsMerged, totalBlocksUpdated, basename, parentName.c_str()); - delete vhd; - if(remove(basename)) - WriteOut(MSG_Get("PROGRAM_VHDMAKE_MERGENODELETE"), basename); - else - WriteOut(MSG_Get("PROGRAM_VHDMAKE_MERGEOKDELETE")); - } - else { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_MERGEFAILED")); - if(totalSectorsMerged) - WriteOut(MSG_Get("PROGRAM_VHDMAKE_MERGEWARNCORRUPTION"), parentName.c_str()); - else - WriteOut("\n"); - } - delete info; - return; - } - - if(cmd->FindExist("-c", true) || cmd->FindExist("-convert", true)) { - if(cmd->GetCount() != 2) { - PrintUsage(); - return; - } - cmd->FindCommand(1, temp_line); - safe_strcpy(filename, temp_line.c_str()); // image to convert - FILE* f; - if(!(f = fopen(filename, "r"))) { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_ERROPEN"), filename); - return; - } - fclose(f); - cmd->FindCommand(2, temp_line); - safe_strcpy(basename, temp_line.c_str()); // resulting VHD (after renaming) - if(_access(basename, 0) == 0) { - if(!bOverwrite) { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_FNEEDED")); - return; - } - if(remove(basename)) { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_REMOVEERR"), basename); - } - } - ret = imageDiskVHD::ConvertFixed(filename); - if(ret == imageDiskVHD::OPEN_SUCCESS) { - if (rename(filename, basename)) - WriteOut(MSG_Get("PROGRAM_VHDMAKE_RENAME")); - } - } - else if(cmd->FindExist("-l", true) || cmd->FindExist("-link", true)) { - if(cmd->GetCount() > 2) { - PrintUsage(); - return; - } - cmd->FindCommand(1, temp_line); - safe_strcpy(basename, temp_line.c_str()); - cmd->FindCommand(2, temp_line); - safe_strcpy(filename, temp_line.c_str()); - if(basename[1] == ':' || basename[0] == '/') - WriteOut(MSG_Get("PROGRAM_VHDMAKE_ABSPATH")); - if(! bOverwrite && _access(filename, 0) == 0) { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_FNEEDED")); - return; - } - ret = imageDiskVHD::CreateDifferencing(filename, basename); - } - else { - if(cmd->GetCount() > 2) { - PrintUsage(); - return; - } - char size[16]; - cmd->FindCommand(1, temp_line); - safe_strcpy(filename, temp_line.c_str()); - cmd->FindCommand(2, temp_line); - safe_strcpy(size, temp_line.c_str()); - uint64_t vhd_size = ssizetou64(size); - if(!vhd_size || vhd_size < 3145728 || vhd_size > 2190433320960) { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_BADSIZE")); - return; - } - if(!bOverwrite && _access(filename, 0) == 0) { - WriteOut(MSG_Get("PROGRAM_VHDMAKE_FNEEDED")); - return; - } - ret = imageDiskVHD::CreateDynamic(filename, vhd_size); - } - - switch(ret) { - case imageDiskVHD::UNSUPPORTED_SIZE: - WriteOut(MSG_Get("PROGRAM_VHDMAKE_BADSIZE")); - break; - case imageDiskVHD::ERROR_OPENING: - WriteOut(MSG_Get("PROGRAM_VHDMAKE_ERROPEN"), filename); - break; - case imageDiskVHD::ERROR_OPENING_PARENT: - WriteOut(MSG_Get("PROGRAM_VHDMAKE_BADPARENT"), filename); - break; - case imageDiskVHD::ERROR_WRITING: - WriteOut(MSG_Get("PROGRAM_VHDMAKE_WRITERR"), filename); - break; - case imageDiskVHD::OPEN_SUCCESS: - WriteOut(MSG_Get("PROGRAM_VHDMAKE_SUCCESS")); - break; - } - } - - - static void VHDMAKE_ProgramStart(Program * * make) { - *make=new VHDMAKE; - } - - class COLOR : public Program { - public: - void Run(void) override; - private: - void PrintUsage() { - constexpr const char *msg = - "Sets the default console foreground and background colors.\n\n" - "COLOR [attr]\n\n" - " attr Specifies color attribute of console output\n\n" - "Color attributes are specified by TWO hex digits -- the first\n" - "corresponds to the background; the second to the foreground.\n" - "Each digit can be any of the following values:\n\n" - " 0 = Black 8 = Gray\n" - " 1 = Blue 9 = Light Blue\n" - " 2 = Green A = Light Green\n" - " 3 = Aqua B = Light Aqua\n" - " 4 = Red C = Light Red\n" - " 5 = Purple D = Light Purple\n" - " 6 = Yellow E = Light Yellow\n" - " 7 = White F = Bright White\n\n" - "If no argument is given, this command restores the original color.\n\n" - "Example: \"COLOR fc\" produces light red on bright white\n"; - WriteOut(msg); - } - }; - - void COLOR::Run() - { - // Hack To allow long commandlines - ChangeToLongCmd(); - - // Usage - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - PrintUsage(); - return; - } - bool back=false; - char fg, bg; - int fgc=0, bgc=0; - char *args=(char *)cmd->GetRawCmdline().c_str(); - args=trim(args); - if (strlen(args)==2) { - bg=args[0]; - fg=args[1]; - if (fg=='0'||fg=='8') - fgc=30; - else if (fg=='1'||fg=='9') - fgc=34; - else if (fg=='2'||tolower(fg)=='a') - fgc=32; - else if (fg=='3'||tolower(fg)=='b') - fgc=36; - else if (fg=='4'||tolower(fg)=='c') - fgc=31; - else if (fg=='5'||tolower(fg)=='d') - fgc=35; - else if (fg=='6'||tolower(fg)=='e') - fgc=32; - else if (fg=='7'||tolower(fg)=='f') - fgc=37; - else - back=true; - if (bg=='0'||bg=='8') - bgc=40; - else if (bg=='1'||bg=='9') - bgc=44; - else if (bg=='2'||tolower(bg)=='a') - bgc=42; - else if (bg=='3'||tolower(bg)=='b') - bgc=46; - else if (bg=='4'||tolower(bg)=='c') - bgc=41; - else if (bg=='5'||tolower(bg)=='d') - bgc=45; - else if (bg=='6'||tolower(bg)=='e') - bgc=42; - else if (bg=='7'||tolower(bg)=='f') - bgc=47; - else - back=true; - } else - back=true; - if (back) - WriteOut("\033[0m"); - else { - bool fgl=fg>='0'&&fg<='7', bgl=bg>='0'&&bg<='7'; - WriteOut(("\033["+std::string(fgl||bgl?"0;":"")+std::string(fgl?"":"1;")+std::string(bgl?"":"5;")+std::to_string(fgc)+";"+std::to_string(bgc)+"m").c_str()); - } - } - - static void COLOR_ProgramStart(Program * * make) { - *make=new COLOR; - } - - alt_rgb altBGR[16], altBGR0[16], *rgbcolors = (alt_rgb*)render.pal.rgb; - bool init_altBGR = false,init_altBGR0 = false; - - bool setVGAColor(const char *colorArray, int j) { - if (!IS_VGA_ARCH||!CurMode) return false; - const char * nextRGB = colorArray; - int32_t rgbVal[4] = {-1,-1,-1,-1}; - if (sscanf(nextRGB, " ( %d , %d , %d)", &rgbVal[0], &rgbVal[1], &rgbVal[2]) == 3) { - for (int i = 0; i< 3; i++) { - if (rgbVal[i] < 0 || rgbVal[i] > 255) - return false; - } - } else if (sscanf(nextRGB, " #%6x", (unsigned int*)(&rgbVal[3])) == 1) { - if (rgbVal[3] < 0 || rgbVal[3] > 0xFFFFFF) - return false; - for (int i = 2; i >= 0; i--) { - rgbVal[i] = rgbVal[3]&255; - rgbVal[3] >>= 8; - } - } else - return false; - IO_ReadB(mem_readw(BIOS_VIDEO_PORT)+6); - IO_WriteB(VGAREG_ACTL_ADDRESS, j+32); - uint8_t imap=IO_ReadB(VGAREG_ACTL_READ_DATA); - IO_WriteB(VGAREG_DAC_WRITE_ADDRESS, imap); - IO_WriteB(VGAREG_DAC_DATA, rgbVal[0] >> 2); - IO_WriteB(VGAREG_DAC_DATA, rgbVal[1] >> 2); - IO_WriteB(VGAREG_DAC_DATA, rgbVal[2] >> 2); - rgbcolors[j].red = rgbVal[0] & 0xFF; - rgbcolors[j].green = rgbVal[1] & 0xFF; - rgbcolors[j].blue = rgbVal[2] & 0xFF; - altBGR0[j].red = rgbVal[0]; - altBGR0[j].green = rgbVal[1]; - altBGR0[j].blue = rgbVal[2]; - return true; - } - - #if defined(USE_TTF) - extern alt_rgb altBGR1[16]; - extern bool colorChanged; - bool setColors(const char *colorArray, int n); - void resetFontSize(); - #endif - - bool get_pal = false; - class SETCOLOR : public Program { - public: - void Run(void) override; - private: - void PrintUsage() { - constexpr const char *msg = - "Views or changes the text-mode color scheme settings.\n\nSETCOLOR [color# [value]]\n\nFor example:\n\n SETCOLOR 0 (50,50,50)\n\nChange Color #0 to the specified color value\n\n SETCOLOR 7 -\n\nReturn Color #7 to the default color value\n\n SETCOLOR 3 +\n\nReturn Color #3 to the preset color value\n\n SETCOLOR MONO\n\nDisplay current MONO mode status\n\nTo change the current background and foreground colors, use COLOR command.\n"; - WriteOut(msg); - } - }; - - void SETCOLOR::Run() - { - // Hack To allow long commandlines - ChangeToLongCmd(); - - if (!get_pal){ - for (uint8_t i=0; i<16; i++){ - altBGR0[i].red = rgbcolors[i].red; - altBGR0[i].green = rgbcolors[i].green; - altBGR0[i].blue = rgbcolors[i].blue; - #ifdef USE_TTF - altBGR1[i].red = rgbcolors[i].red; - altBGR1[i].green = rgbcolors[i].green; - altBGR1[i].blue = rgbcolors[i].blue; - #endif - get_pal = true; - } - } - - // Usage - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - PrintUsage(); - return; - } - char *args=(char *)cmd->GetRawCmdline().c_str(); - if (*args) { - args=trim(args); - char *p = strchr(args, ' '); - if (p!=NULL) - *p=0; - int i=atoi(args); - if (!strcasecmp(args,"MONO")) { - if (p==NULL) - WriteOut("MONO mode status: %s (video mode %d)\n",CurMode->mode==7?"active":CurMode->mode==3?"inactive":"unavailable",CurMode->mode); - else if (!strcmp(trim(p+1),"+")) { - if (CurMode->mode!=7) INT10_SetVideoMode(7); - WriteOut(CurMode->mode==7?"MONO mode status => active (video mode 7)\n":"Failed to change MONO mode\n"); - } else if (!strcmp(trim(p+1),"-")) { - if (CurMode->mode!=3) INT10_SetVideoMode(3); - WriteOut(CurMode->mode==3?"MONO mode status => inactive (video mode 3)\n":"Failed to change MONO mode\n"); - } else - WriteOut("Must be + or - for MONO: %s\n",trim(p+1)); - } else if (!strcmp(args,"0")||!strcmp(args,"00")||!strcmp(args,"+0")||!strcmp(args,"-0")||(i>0&&i<16)) { - if (p==NULL) { - #if defined(USE_TTF) - bool colornul = staycolors || (IS_VGA_ARCH && (altBGR1[i].red > 4 || altBGR1[i].green > 4 || altBGR1[i].blue > 4) && rgbcolors[i].red < 5 && rgbcolors[i].green < 5 && rgbcolors[i].blue < 5); - altBGR[i].red = colornul||(colorChanged&&!IS_VGA_ARCH)?altBGR1[i].red:rgbcolors[i].red; - altBGR[i].green = colornul||(colorChanged&&!IS_VGA_ARCH)?altBGR1[i].green:rgbcolors[i].green; - altBGR[i].blue = colornul||(colorChanged&&!IS_VGA_ARCH)?altBGR1[i].blue:rgbcolors[i].blue; - WriteOut("Color %d: (%d,%d,%d) or #%02x%02x%02x\n",i,altBGR0[i].red,altBGR0[i].green,altBGR0[i].blue,altBGR0[i].red,altBGR0[i].green,altBGR0[i].blue); - #else - WriteOut("Color %d: (%d,%d,%d) or #%02x%02x%02x\n",i,rgbcolors[i].red,rgbcolors[i].green,rgbcolors[i].blue,rgbcolors[i].red,rgbcolors[i].green,rgbcolors[i].blue); - #endif - } - } else { - WriteOut("Invalid color number - %s\n", trim(args)); - DOS_SetError(DOSERR_DATA_INVALID); - return; - } if (p!=NULL&&strcasecmp(args,"MONO")) { - char value[128]; - if (!strcmp(trim(p+1),"-")) { - strcpy(value,i==0?"#000000":i==1?"#0000aa":i==2?"#00aa00":i==3?"#00aaaa":i==4?"#aa0000":i==5?"#aa00aa":i==6?"#aa5500":i==7?"#aaaaaa":i==8?"#555555":i==9?"#5555ff":i==10?"#55ff55":i==11?"#55ffff":i==12?"#ff5555":i==13?"#ff55ff":i==14?"#ffff55":"#ffffff"); - } else if (!strcmp(trim(p+1),"+")) { - Section_prop * ttf_section=static_cast(control->GetSection("ttf")); - const char * colors = ttf_section->Get_string("colors"); - const char * nextRGB = *colors ? (colors + (*colors == '+'?1:0)) : "#000000 #0000aa #00aa00 #00aaaa #aa0000 #aa00aa #aa5500 #aaaaaa #555555 #5555ff #55ff55 #55ffff #ff5555 #ff55ff #ffff55 #ffffff"; - int rgbVal[3] = {-1,-1,-1}; - for (int colNo = 0; colNo <= i; colNo++) { - if (sscanf(nextRGB, " ( %d , %d , %d)", &rgbVal[0], &rgbVal[1], &rgbVal[2]) == 3) { - sprintf(value,"(%d,%d,%d)",rgbVal[0],rgbVal[1],rgbVal[2]); - while (*nextRGB != ')') - nextRGB++; - nextRGB++; - } else if (sscanf(nextRGB, " #%6x", (unsigned int*)(&rgbVal[0])) == 1) { - sprintf(value,"#%6x",rgbVal[0]); - nextRGB = strchr(nextRGB, '#') + 7; - } else { - WriteOut("Invalid color value - %s\n",nextRGB); - return; - } - } - } else { - strncpy(value,trim(p+1),127); - value[127]=0; - } - #if defined(USE_TTF) - if (!ttf.inUse) { - #endif - if (!IS_VGA_ARCH) - WriteOut("Changing color scheme is not supported for the current video mode.\n"); - else if (setVGAColor(value, i)) - //WriteOut("Color %d: (%d,%d,%d) or #%02x%02x%02x\n",i,rgbcolors[i].red,rgbcolors[i].green,rgbcolors[i].blue,rgbcolors[i].red,rgbcolors[i].green,rgbcolors[i].blue); - WriteOut("Color %d: (%d,%d,%d) or #%02x%02x%02x\n",i,altBGR0[i].red,altBGR0[i].green,altBGR0[i].blue,altBGR0[i].red,altBGR0[i].green,altBGR0[i].blue); - else - WriteOut("Invalid color value - %s\n",value); - #if defined(USE_TTF) - } else if (setColors(value,i)) { - bool colornul = staycolors || (IS_VGA_ARCH && (altBGR1[i].red > 4 || altBGR1[i].green > 4 || altBGR1[i].blue > 4) && rgbcolors[i].red < 5 && rgbcolors[i].green < 5 && rgbcolors[i].blue < 5); - altBGR[i].red = (colornul||(colorChanged&&!IS_VGA_ARCH))?altBGR1[i].red:rgbcolors[i].red; - altBGR[i].green = (colornul||(colorChanged&&!IS_VGA_ARCH))?altBGR1[i].green:rgbcolors[i].green; - altBGR[i].blue = (colornul||(colorChanged&&!IS_VGA_ARCH))?altBGR1[i].blue:rgbcolors[i].blue; - WriteOut("Color %d => (%d,%d,%d) or #%02x%02x%02x\n",i,altBGR[i].red,altBGR[i].green,altBGR[i].blue,altBGR[i].red,altBGR[i].green,altBGR[i].blue); - resetFontSize(); - } else - WriteOut("Invalid color value - %s\n",value); - #endif - } - } else { - WriteOut("MONO mode status: %s (video mode %d)\n",CurMode->mode==7?"active":CurMode->mode==3?"inactive":"unavailable",CurMode->mode); - for (int i = 0; i < 16; i++) { - #if defined(USE_TTF) - bool colornul = staycolors || (IS_VGA_ARCH && (altBGR1[i].red > 4 || altBGR1[i].green > 4 || altBGR1[i].blue > 4) && rgbcolors[i].red < 5 && rgbcolors[i].green < 5 && rgbcolors[i].blue < 5); - altBGR[i].red = colornul||(colorChanged&&!IS_VGA_ARCH)?altBGR1[i].red:rgbcolors[i].red; - altBGR[i].green = colornul||(colorChanged&&!IS_VGA_ARCH)?altBGR1[i].green:rgbcolors[i].green; - altBGR[i].blue = colornul||(colorChanged&&!IS_VGA_ARCH)?altBGR1[i].blue:rgbcolors[i].blue; - WriteOut("Color %d: (%d,%d,%d) or #%02x%02x%02x\n",i,altBGR[i].red,altBGR[i].green,altBGR[i].blue,altBGR[i].red,altBGR[i].green,altBGR[i].blue); - #else - WriteOut("Color %d: (%d,%d,%d) or #%02x%02x%02x\n",i,rgbcolors[i].red,rgbcolors[i].green,rgbcolors[i].blue,rgbcolors[i].red,rgbcolors[i].green,rgbcolors[i].blue); - #endif - } - } - } - - static void SETCOLOR_ProgramStart(Program * * make) { - *make=new SETCOLOR; - } - - #if C_DEBUG - extern Bitu int2fdbg_hook_callback; - class INT2FDBG : public Program { - public: - void Run(void) override; - private: - void PrintUsage() { - constexpr const char *msg = - "Hooks INT 2Fh for debugging purposes.\n\nINT2FDBG [option]\n /I Installs hook\n\nIt will hook INT 2Fh at the top of the call chain for debugging information.\n\nType INT2FDBG without a parameter to show the current hook status.\n"; - WriteOut(msg); - } - }; - - void INT2FDBG::Run() - { - // Hack To allow long commandlines - ChangeToLongCmd(); - - if (!cmd->GetCount()) { - if (int2fdbg_hook_callback == 0) - WriteOut("INT 2Fh hook has not been set.\n"); - else - WriteOut("INT 2Fh hook has already been set.\n"); - return; - } - - // Usage - if (!cmd->GetCount() || cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - PrintUsage(); - return; - } - char *args=(char *)cmd->GetRawCmdline().c_str(); - args=trim(args); - DOS_Shell temp; - temp.CMD_INT2FDBG(args); - } - - static void INT2FDBG_ProgramStart(Program * * make) { - *make=new INT2FDBG; - } - #endif - - #if defined (WIN32) - extern bool ctrlbrk; - extern std::string startincon; - #endif - #if defined (WIN32) && !defined(HX_DOS) - #include - #include - SHELLEXECUTEINFO lpExecInfo; - - void EndStartProcess() { - if(lpExecInfo.hProcess!=NULL) { - DWORD exitCode; - GetExitCodeProcess(lpExecInfo.hProcess, &exitCode); - if (exitCode==STILL_ACTIVE) - TerminateProcess(lpExecInfo.hProcess, 0); - } - ctrlbrk=false; - } - #endif - - // void zipSetCurrentTime(zip_fileinfo &zi); - // int zipOutOpenFile(zipFile zf,const char *zfname,zip_fileinfo &zi,const bool compress); - - const char * TranslateHostPath(const char * arg, bool next = false); - class START : public Program { - public: - void Run() override { - if(control->SecureMode()) { - WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW")); - return; - } - - // Hack To allow long commandlines - ChangeToLongCmd(); - - // Usage - if (!cmd->GetCount()||(cmd->GetCount()==1 && (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)))) { - PrintUsage(); - return; - } - char *args=(char *)cmd->GetRawCmdline().c_str(); - args=trim(args); - char *cmd = strlen(args)?args:NULL; - if (cmd!=NULL&&strlen(cmd)>1&&cmd[0]=='"'&&cmd[1]==' ') { - cmd++; - while (cmd[0]==' ') cmd++; - cmd--; - cmd[0]='"'; - } - #if defined(WIN32) && !defined(HX_DOS) - char *cmdstr = cmd==NULL?NULL:(char *)strstr(cmd, cmd[0]=='"'?"\" ":" "); - char buf[CROSS_LEN], dir[CROSS_LEN+15], str[CROSS_LEN*2]; - int k=0; - if (cmdstr!=NULL) { - if (*cmdstr=='\"') cmdstr++; - while (*cmdstr==' ') {k++;*cmdstr++=0;} - } - int state = cmd==NULL?0:!strcmp(cmd,"-")||!strcasecmp(cmd,"/min")||!strcasecmp(cmd,"-min")?1:!strcmp(cmd,"+")||!strcasecmp(cmd,"/max")||!strcasecmp(cmd,"-max")?2:!strcasecmp(cmd,"_")||!strcasecmp(cmd,"/hid")||!strcasecmp(cmd,"-hid")?3:0; - if (state > 0) { - k=0; - cmd = cmdstr; - if (cmd!=NULL&&strlen(cmd)>1&&cmd[0]=='"'&&cmd[1]==' ') { - cmd++; - while (cmd[0]==' ') cmd++; - cmd--; - cmd[0]='"'; - } - if ((cmdstr = cmd==NULL?NULL:(char *)strstr(cmd, cmd[0]=='"'?"\" ":" "))!=NULL) { - if (*cmdstr=='\"') cmdstr++; - while (*cmdstr==' ') {k++;*cmdstr++=0;} - } - } - if (cmd!=NULL) { - char *ret, *ret0, *ret1, *ret2, *ret3, *ret4; - ret0 = strchr(cmd, '/'); - ret1 = strchr(cmd, '|'); - ret2 = strchr(cmd, '<'); - ret3 = strchr(cmd, '>'); - ret4 = strchr(cmd, ' '); - ret = ret0>cmd?ret0:NULL; - if (ret1!=NULL && (ret == NULL || ret1cmd&&*(ret-1)==':')) { - strcpy(buf, cmdstr==NULL?"":cmdstr); - strcpy(str, ret); - if (k<1) k=1; - for (int i=0; i0&&cmdstr[strlen(cmdstr)-2]=='"') { - cmd++; - cmdstr[strlen(cmdstr)-2]='\0'; - } - } - } - if (cmd==NULL || !strlen(cmd) || !strcmp(cmd,"?") || !strcmp(cmd,"/") || !strcmp(cmd,"/?") || !strcmp(cmd,"-?")) { - PrintUsage(); - DOS_SetError(0); - return; - } - int sw = state==0?SW_SHOW:state==1?SW_MINIMIZE:state==2?SW_MAXIMIZE:SW_HIDE; - bool match=false; - std::istringstream in(startincon); - if (in) for (std::string command; in >> command; ) { - if (!strcasecmp(cmd,command.c_str())||!strcasecmp(cmd,("\""+command+"\"").c_str())) { - match=true; - break; - } - } - lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); - lpExecInfo.fMask=SEE_MASK_DOENVSUBST|SEE_MASK_NOCLOSEPROCESS; - lpExecInfo.hwnd = NULL; - lpExecInfo.lpVerb = "open"; - lpExecInfo.lpDirectory = NULL; - lpExecInfo.nShow = sw; - lpExecInfo.hInstApp = (HINSTANCE) SE_ERR_DDEFAIL; - if (match) { - strcpy(dir, strcasecmp(cmd,"for")?"/C \"":"/C \"("); - strcat(dir, cmd); - strcat(dir, " "); - if (cmdstr!=NULL) strcat(dir, TranslateHostPath(cmdstr)); - if (!strcasecmp(cmd,"for")) strcat(dir, ")"); - strcat(dir, " & echo( & echo The command execution is completed. & pause\""); - lpExecInfo.lpFile = "CMD.EXE"; - lpExecInfo.lpParameters = dir; - } else { - lpExecInfo.lpFile = cmd==NULL?NULL:TranslateHostPath(cmd); - lpExecInfo.lpParameters = cmdstr==NULL?NULL:TranslateHostPath(cmdstr, true); - } - bool setdir=false; - char winDirCur[512], winDirNew[512]; - if (GetCurrentDirectory(512, winDirCur)&&(!strncmp(Drives[DOS_GetDefaultDrive()]->GetInfo(),"local ",6)||!strncmp(Drives[DOS_GetDefaultDrive()]->GetInfo(),"CDRom ",6))) { - Overlay_Drive *ddp = dynamic_cast(Drives[DOS_GetDefaultDrive()]); - strcpy(winDirNew, ddp!=NULL?ddp->getOverlaydir():Drives[DOS_GetDefaultDrive()]->GetBaseDir()); - strcat(winDirNew, Drives[DOS_GetDefaultDrive()]->curdir); - if (SetCurrentDirectory(winDirNew)) setdir=true; - } - if (!startquiet) WriteOut("Starting %s...\n", cmd); - ShellExecuteEx(&lpExecInfo); - int ErrorCode = GetLastError(); - if (setdir) SetCurrentDirectory(winDirCur); - if (startwait && lpExecInfo.hProcess!=NULL) { - DWORD exitCode; - BOOL ret; - int count=0; - ctrlbrk=false; - inshell=true; - do { - ret=GetExitCodeProcess(lpExecInfo.hProcess, &exitCode); - CALLBACK_Idle(); - if (ctrlbrk) { - uint8_t c;uint16_t n=1; - DOS_ReadFile (STDIN,&c,&n); - if (c == 3) WriteOut("^C\r\n"); - EndStartProcess(); - exitCode=0; - break; - } - if (++count==20000&&ret&&exitCode==STILL_ACTIVE&&!startquiet) WriteOut("(Press Ctrl+C to exit immediately)\n"); - } while (ret!=0&&exitCode==STILL_ACTIVE); - ErrorCode = GetLastError(); - CloseHandle(lpExecInfo.hProcess); - inshell=false; - } - DOS_SetError(ErrorCode); - #else - if (cmd==NULL || !strlen(cmd) || !strcmp(cmd,"?") || !strcmp(cmd,"/") || !strcmp(cmd,"/?") || !strcmp(cmd,"-?") || !strcasecmp(cmd,"/open") || !strcasecmp(cmd,"-open")) { - PrintUsage(); - DOS_SetError(0); - return; - } - if (!startquiet) WriteOut("Starting %s...\n", cmd); - bool open=false; - if (!strncasecmp(cmd, "/open ", 5) || !strncasecmp(cmd, "-open ", 6)) { - open=true; - cmd+=5; - } - cmd=trim((char *)TranslateHostPath(cmd)); - int ret=0; - #if defined(LINUX) || defined(MACOSX) - ret=system(((open? - #if defined(LINUX) - "xdg-open " - #else - "open " - #endif - :"")+std::string(cmd)+(startwait||(strlen(cmd)>2&&!strcmp(cmd+strlen(cmd)-2," &"))?"":" &")).c_str()); - #else - WriteOut("Error: START cannot launch application to run on your current host system.\n"); - return; - #endif - if (ret==-1) { - WriteOut("Error: START could not launch application.\n"); - return; - } - DOS_SetError(ret); - #endif - } - - private: - void PrintUsage() { - constexpr const char *msg = - "Starts a separate window to run a specified program or command.\n\n" - #if defined(WIN32) - "START [+|-|_] command [arguments]\n\n" - " [+|-|_]: To maximize/minimize/hide the program.\n" - " The options /MAX, /MIN, /HID are also accepted.\n" - " command: The command, program or file to start.\n" - " arguments: Arguments to pass to the application.\n\n" - "START opens the Windows command prompt automatically to run these commands\n" - "and wait for a key press before exiting (specified by \"startincon\" option):\n%s\n\n" - #else - "START /OPEN file\nSTART command [arguments]\n\n" - " /OPEN: To open a file or URL with the associated program.\n" - " file: The file or URL to open with the associated program.\n" - " command: The command or program to start or run.\n" - " arguments: Arguments to pass to the application.\n\n" - #endif - "Note: The path specified in this command is the path on the host system.\n"; - WriteOut(msg - #if defined(WIN32) - ,startincon.c_str() - #endif - ); - } - }; - - void START_ProgramStart(Program **make) - { - *make = new START; - } - - #define MAX_FLAGS 512 - char *g_flagged_files[MAX_FLAGS]; //global array to hold flagged files - int flagged_backup(char *zip) - { - - unsigned char buffer[4096]; - char zipfile[CROSS_LEN]; - int ret = 0; - int i; - - #ifdef C_LIBZ - - bool compresssaveparts = static_cast(control->GetSection("dosbox"))->Get_bool("compresssaveparts"); - - strcpy(zipfile, zip); - if (strstr(zipfile, ".sav")) - strcpy(strstr(zipfile, ".sav"), ".dat"); - - i=0; - while (i < MAX_FLAGS && g_flagged_files[i] == NULL) i++; - if (i < MAX_FLAGS) { - zipFile zf; - { - const char *global_comment = "DOSBox-X flagged file save state"; - zlib_filefunc64_def ffunc; - #ifdef USEWIN32IOAPI - fill_win32_filefunc64A(&ffunc); - #else - fill_fopen64_filefunc(&ffunc); - #endif - remove(zipfile); - zf = zipOpen2_64(zipfile,APPEND_STATUS_CREATE,&global_comment,&ffunc); - } - if (zf != NULL) { - while (i < MAX_FLAGS) { - if (g_flagged_files[i] != NULL) { - uint16_t handle = 0; - if (DOS_FindDevice(("\""+std::string(g_flagged_files[i])+"\"").c_str()) != DOS_DEVICES || !DOS_OpenFile(("\""+std::string(g_flagged_files[i])+"\"").c_str(),0,&handle)) { - LOG_MSG(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),g_flagged_files[i]); - continue; - } - - zip_fileinfo zi; zipSetCurrentTime(zi); - if (zipOutOpenFile(zf,g_flagged_files[i],zi,compresssaveparts) == ZIP_OK) { - zip_ostreambuf zos(zf); - - do { - uint16_t n = sizeof(buffer); - DOS_ReadFile(handle,buffer,&n); - if (n == 0) break; - if (zos.xsputn((zip_ostreambuf::char_type*)buffer,n) < n) break; - } while(1); - - zos.close(); - } - - DOS_CloseFile(handle); - } - - i++; - } - zipClose(zf,NULL); - } - } - - #endif - - return ret; - } - - // int flagged_restore(char* zip) - // { - // unsigned char buffer[4096]; - // unz_file_info64 file_info; - // char zipfile[MAX_FLAGS]; - // int ret = 0; - // int i; - - // #ifdef C_LIBZ - - // strcpy(zipfile, zip); - // if (strstr(zipfile, ".sav")) - // strcpy(strstr(zipfile, ".sav"), ".dat"); - // i=0; - // while (i < MAX_FLAGS && g_flagged_files[i] == NULL) i++; - // if (i < MAX_FLAGS) { - // unzFile zf; - // { - // zlib_filefunc64_def ffunc; - // #ifdef USEWIN32IOAPI - // fill_win32_filefunc64A(&ffunc); - // #else - // fill_fopen64_filefunc(&ffunc); - // #endif - // zf = unzOpen2_64(zipfile,&ffunc); - // } - // if (zf != NULL) { - // while (i < MAX_FLAGS) { - // if (g_flagged_files[i] != NULL) { - // if (DOS_FindDevice(("\""+std::string(g_flagged_files[i])+"\"").c_str()) != DOS_DEVICES) { - // LOG_MSG(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),g_flagged_files[i]); - // continue; - // } - - // if (unzLocateFile(zf,g_flagged_files[i],2/*case insensitive*/) == UNZ_OK && - // unzGetCurrentFileInfo64(zf,&file_info,NULL,0,NULL,0,NULL,0) == UNZ_OK) { - // if (unzOpenCurrentFile(zf) == UNZ_OK) { - // zip_istreambuf zis(zf); - - // uint16_t handle=0; - // if (DOS_CreateFile(("\""+std::string(g_flagged_files[i])+"\"").c_str(),0,&handle)) { - // do { - // uint16_t n = zis.xsgetn((zip_istreambuf::char_type*)buffer,sizeof(buffer)); - // if (n == 0) break; - // DOS_WriteFile(handle,(uint8_t*)buffer,&n); - // if (n == 0) break; - // } while (1); - // DOS_CloseFile(handle); - // } - - // zis.close(); - // } - // } - // } - - // i++; - // } - // unzClose(zf); - // } - // } - - // #endif - - // return ret; - // } - - class FLAGSAVE : public Program - { - public: - - void Run(void) override - { - std::string file_to_flag; - int i, lf; - bool force=false, remove=false; - - if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { - printHelp(); - return; - } - if (cmd->FindExist("/f", true)) - force=true; - if (cmd->FindExist("/r", true)) - remove=true; - if (cmd->FindExist("/u", true)) - { - for (i = 0; i < MAX_FLAGS; i++) - { - if (g_flagged_files[i] != NULL) - g_flagged_files[i] = NULL; - } - WriteOut("All files unflagged for saving.\n"); - return; - } - else if (cmd->GetCount()) - { - for (unsigned int i=1; i<=cmd->GetCount(); i++) { - cmd->FindCommand(i,temp_line); - uint8_t drive; - char fullname[DOS_PATHLENGTH], flagfile[CROSS_LEN]; - - strcpy(flagfile, temp_line.c_str()); - if (*flagfile&&DOS_MakeName(((flagfile[0]!='\"'?"\"":"")+std::string(flagfile)+(flagfile[strlen(flagfile)-1]!='\"'?"\"":"")).c_str(), fullname, &drive)) - { - sprintf(flagfile, "%c:\\%s", drive+'A', fullname); - if (remove) { - for (lf = 0; lf < MAX_FLAGS; lf++) - { - if (g_flagged_files[lf] != NULL && !strcasecmp(g_flagged_files[lf], flagfile)) - { - WriteOut("File %s unflagged for saving.\n", g_flagged_files[lf]); - free(g_flagged_files[lf]); - g_flagged_files[lf] = NULL; - break; - } - } - continue; - } - if (!force && !DOS_FileExists(("\""+std::string(flagfile)+"\"").c_str())) { - WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"), flagfile); - continue; - } - bool found=false; - for (lf = 0; lf < MAX_FLAGS; lf++) - { - if (g_flagged_files[lf] == NULL) - continue; - if (!strcasecmp(g_flagged_files[lf], flagfile)) - { - WriteOut("File already flagged for saving - %s\n", flagfile); - found=true; - } - } - if (found) continue; - for (lf = 0; lf < MAX_FLAGS; lf++) - { - if (g_flagged_files[lf] == NULL) - break; - } - if (lf == MAX_FLAGS) - { - WriteOut("Too many files to flag for saving.\n"); - return; - } - g_flagged_files[lf] = (char*)malloc(strlen(flagfile) + 1); - strcpy(g_flagged_files[lf], flagfile); - WriteOut("File %s flagged for saving\n", g_flagged_files[lf]); - } else - WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"), flagfile); - } - return; - } - else - { - WriteOut("Files flagged for saving:\n"); - for (i = 0; i < MAX_FLAGS; i++) - { - if (g_flagged_files[i]) - WriteOut("%s\n", g_flagged_files[i]); - } - return; - } - } - void printHelp() - { - WriteOut( "Marks or flags files to be saved for the save state feature.\n\n" - "FLAGSAVE [file(s) [/F] [/R]] [/U]\n\n" - " file(s) Specifies one or more files to be flagged for saving.\n" - " /F Forces to flag the file(s) even if they are not found.\n" - " /R Removes flags from the specified file(s).\n" - " /U Removes flags from all flagged files.\n\n" - "Type FLAGSAVE without a parameter to list flagged files.\n"); - } - }; - - static void FLAGSAVE_ProgramStart(Program** make) - { - *make = new FLAGSAVE; - } - - void Add_VFiles(bool usecp) { - VFILE_Register("TEXTUTIL", nullptr, 0, "/"); - VFILE_Register("SYSTEM", nullptr, 0, "/"); - VFILE_Register("DEBUG", nullptr, 0, "/"); - VFILE_Register("DOS", nullptr, 0, "/"); - VFILE_Register("CPI", nullptr, 0, "/"); - VFILE_Register("BIN", nullptr, 0, "/"); - VFILE_Register("4DOS", nullptr, 0, "/"); - - std::string dirname="drivez"; - std::string path = "."; - path += CROSS_FILESPLIT; - path += dirname; - getdrivezpath(path, dirname); - drivezRegister(path, "/", usecp); - - PROGRAMS_MakeFile("HELP.COM",HELP_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("INTRO.COM",INTRO_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("IMGMOUNT.COM", IMGMOUNT_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("IMGMAKE.COM", IMGMAKE_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("IMGSWAP.COM", IMGSWAP_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("MOUNT.COM",MOUNT_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("BOOT.COM",BOOT_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("CONFIG.COM",CONFIG_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("COUNTRY.COM",COUNTRY_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("COMMAND.COM",SHELL_ProgramStart); - internal_program = true; - if (usecp && prepared) VFILE_Register("AUTOEXEC.BAT",(uint8_t *)autoexec_data,(uint32_t)strlen(autoexec_data)); - if (prepared) VFILE_Register("CONFIG.SYS",(uint8_t *)config_data,(uint32_t)strlen(config_data)); - internal_program = false; - PROGRAMS_MakeFile("RE-DOS.COM",REDOS_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("RESCAN.COM",RESCAN_ProgramStart,"/SYSTEM/"); - #if defined(WIN32) && !defined(HX_DOS) || defined(LINUX) || defined(MACOSX) - if (startcmd) PROGRAMS_MakeFile("START.COM", START_ProgramStart,"/SYSTEM/"); - #endif - - if (machine == MCH_CGA) PROGRAMS_MakeFile("CGASNOW.COM",CGASNOW_ProgramStart,"/TEXTUTIL/"); - PROGRAMS_MakeFile("VFRCRATE.COM",VFRCRATE_ProgramStart,"/DEBUG/"); - - if (IS_VGA_ARCH && svgaCard != SVGA_None) - PROGRAMS_MakeFile("VESAMOED.COM",VESAMOED_ProgramStart,"/DEBUG/"); - - if (!IS_PC98_ARCH) { - PROGRAMS_MakeFile("LOADROM.COM", LOADROM_ProgramStart,"/DEBUG/"); - PROGRAMS_MakeFile("KEYB.COM", KEYB_ProgramStart,"/DOS/"); - PROGRAMS_MakeFile("MODE.COM", MODE_ProgramStart,"/DOS/"); - PROGRAMS_MakeFile("MOUSE.COM", MOUSE_ProgramStart,"/DOS/"); - PROGRAMS_MakeFile("SETCOLOR.COM", SETCOLOR_ProgramStart,"/BIN/"); - } - - if (IS_VGA_ARCH) { - PROGRAMS_MakeFile("80X60.COM", TEXT80X60_ProgramStart,"/TEXTUTIL/"); - PROGRAMS_MakeFile("80X50.COM", TEXT80X50_ProgramStart,"/TEXTUTIL/"); - PROGRAMS_MakeFile("80X43.COM", TEXT80X43_ProgramStart,"/TEXTUTIL/"); - PROGRAMS_MakeFile("80X25.COM", TEXT80X25_ProgramStart,"/TEXTUTIL/"); - PROGRAMS_MakeFile("132X60.COM", TEXT132X60_ProgramStart,"/TEXTUTIL/"); - PROGRAMS_MakeFile("132X50.COM", TEXT132X50_ProgramStart,"/TEXTUTIL/"); - PROGRAMS_MakeFile("132X43.COM", TEXT132X43_ProgramStart,"/TEXTUTIL/"); - PROGRAMS_MakeFile("132X25.COM", TEXT132X25_ProgramStart,"/TEXTUTIL/"); - PROGRAMS_MakeFile("DCGA.COM", DCGA_ProgramStart,"/TEXTUTIL/"); - } - - PROGRAMS_MakeFile("COLOR.COM",COLOR_ProgramStart,"/BIN/"); - PROGRAMS_MakeFile("TITLE.COM",TITLE_ProgramStart,"/BIN/"); - PROGRAMS_MakeFile("VHDMAKE.COM",VHDMAKE_ProgramStart,"/BIN/"); - PROGRAMS_MakeFile("LS.COM",LS_ProgramStart,"/BIN/"); - PROGRAMS_MakeFile("ADDKEY.COM",ADDKEY_ProgramStart,"/BIN/"); - PROGRAMS_MakeFile("CFGTOOL.COM",CFGTOOL_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("FLAGSAVE.COM", FLAGSAVE_ProgramStart,"/SYSTEM/"); - #if defined C_DEBUG - PROGRAMS_MakeFile("NMITEST.COM",NMITEST_ProgramStart,"/DEBUG/"); - PROGRAMS_MakeFile("INT2FDBG.COM",INT2FDBG_ProgramStart,"/DEBUG/"); - PROGRAMS_MakeFile("BIOSTEST.COM", BIOSTEST_ProgramStart,"/DEBUG/"); - #endif - PROGRAMS_MakeFile("A20GATE.COM",A20GATE_ProgramStart,"/DEBUG/"); - - if (IS_PC98_ARCH) - PROGRAMS_MakeFile("PC98UTIL.COM",PC98UTIL_ProgramStart,"/BIN/"); - - PROGRAMS_MakeFile("CAPMOUSE.COM", CAPMOUSE_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("LOADFIX.COM",LOADFIX_ProgramStart,"/DOS/"); - PROGRAMS_MakeFile("LABEL.COM", LABEL_ProgramStart,"/DOS/"); - PROGRAMS_MakeFile("TREE.COM", TREE_ProgramStart,"/DOS/"); - PROGRAMS_MakeFile("DELTREE.EXE",DELTREE_ProgramStart,"/DOS/"); - PROGRAMS_MakeFile("CHOICE.COM", CHOICE_ProgramStart,"/DOS/"); - PROGRAMS_MakeFile("AUTOTYPE.COM", AUTOTYPE_ProgramStart,"/BIN/"); - #ifdef C_ICONV - PROGRAMS_MakeFile("UTF8.COM", UTF8_ProgramStart,"/BIN/"); - PROGRAMS_MakeFile("UTF16.COM", UTF16_ProgramStart,"/BIN/"); - #endif - PROGRAMS_MakeFile("MIXER.COM",MIXER_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("SERIAL.COM", SERIAL_ProgramStart,"/SYSTEM/"); - PROGRAMS_MakeFile("PARALLEL.COM", PARALLEL_ProgramStart,"/SYSTEM/"); - if (IS_DOSV) - PROGRAMS_MakeFile("VTEXT.COM", VTEXT_ProgramStart,"/TEXTUTIL/"); - - VFILE_RegisterBuiltinFileBlob(bfb_EDLIN_EXE, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_DEBUG_EXE, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_MOVE_EXE, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_FIND_EXE, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_FCBS_COM, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_FILES_COM, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_LASTDRIV_COM, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_REPLACE_EXE, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_SORT_EXE, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_XCOPY_EXE, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_APPEND_EXE, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_DEVICE_COM, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_BUFFERS_COM, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_CHKDSK_EXE, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_COMP_COM, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_FC_EXE, "/DOS/"); - #if C_IPX - if (addipx) PROGRAMS_MakeFile("IPXNET.COM",IPXNET_ProgramStart,"/SYSTEM/"); - #endif - if (addne2k) VFILE_RegisterBuiltinFileBlob(bfb_NE2000_COM, "/SYSTEM/"); - if (addovl) VFILE_RegisterBuiltinFileBlob(bfb_GLIDE2X_OVL, "/SYSTEM/"); - - /* These are IBM PC/XT/AT ONLY. They will not work in PC-98 mode. */ - if (!IS_PC98_ARCH) { - VFILE_RegisterBuiltinFileBlob(bfb_SYS_COM, "/DOS/"); /* may rely on INT 13h or IBM PC specific functions and layout */ - VFILE_RegisterBuiltinFileBlob(bfb_FORMAT_EXE, "/DOS/"); /* does not work in PC-98 mode */ - VFILE_RegisterBuiltinFileBlob(bfb_DEFRAG_EXE, "/DOS/"); /* relies on IBM PC CGA/EGA/VGA alphanumeric display memory */ - VFILE_RegisterBuiltinFileBlob(bfb_FDISK_EXE, "/BIN/"); /* relies on IBM PC INT 13h */ - VFILE_RegisterBuiltinFileBlob(bfb_HEXMEM16_EXE, "/DEBUG/"); - VFILE_RegisterBuiltinFileBlob(bfb_HEXMEM32_EXE, "/DEBUG/"); - VFILE_RegisterBuiltinFileBlob(bfb_DOSIDLE_EXE, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_DOS32A_EXE, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_DOS4GW_EXE, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_CDPLAY_EXE, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_CDPLAY_TXT, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_CDPLAY_ZIP, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_DOSMID_EXE, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_MPXPLAY_EXE, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_ZIP_EXE, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_UNZIP_EXE, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_EMSMAGIC_COM, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_DISKCOPY_EXE, "/DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_CWSDPMI_EXE, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_PRINT_COM, "/DOS/"); - - /* It appears the latest EDIT.COM requires a 386, and it does not bother - * to detect if the CPU is a 386. If you run this program for 286 and lower - * you get a crash. */ - if (CPU_ArchitectureType >= CPU_ARCHTYPE_386) - VFILE_RegisterBuiltinFileBlob(bfb_EDIT_COM, "/DOS/"); - - VFILE_RegisterBuiltinFileBlob(bfb_LICENSE_TXT, "/4DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_EXAMPLES_BTM, "/4DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_BATCOMP_EXE, "/4DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_OPTION_EXE, "/4DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_4HELP_EXE, "/4DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_4DOS_HLP, "/4DOS/"); - VFILE_RegisterBuiltinFileBlob(bfb_4DOS_COM, "/4DOS/"); - } - if (prepared) VFILE_Register("4DOS.INI",(uint8_t *)i4dos_data,(uint32_t)strlen(i4dos_data), "/4DOS/"); - - if (IS_VGA_ARCH) { - VFILE_RegisterBuiltinFileBlob(bfb_VGA_COM, "/TEXTUTIL/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA_COM, "/TEXTUTIL/"); - VFILE_RegisterBuiltinFileBlob(bfb_CLR_COM, "/TEXTUTIL/"); - VFILE_RegisterBuiltinFileBlob(bfb_CGA_COM, "/TEXTUTIL/"); - VFILE_RegisterBuiltinFileBlob(bfb_50_COM, "/TEXTUTIL/"); - VFILE_RegisterBuiltinFileBlob(bfb_28_COM, "/TEXTUTIL/"); - } else if (IS_EGA_ARCH) - VFILE_RegisterBuiltinFileBlob(bfb_28_COM_ega, "/TEXTUTIL/"); - - if (IS_VGA_ARCH) - VFILE_RegisterBuiltinFileBlob(bfb_25_COM, "/TEXTUTIL/"); - else if (IS_EGA_ARCH) - VFILE_RegisterBuiltinFileBlob(bfb_25_COM_ega, "/TEXTUTIL/"); - else if (!IS_PC98_ARCH) - VFILE_RegisterBuiltinFileBlob(bfb_25_COM_other, "/TEXTUTIL/"); - - /* MEM.COM is not compatible with PC-98 and/or 8086 emulation */ - if(!IS_PC98_ARCH && CPU_ArchitectureType >= CPU_ARCHTYPE_80186) - VFILE_RegisterBuiltinFileBlob(bfb_MEM_EXE, "/DOS/"); - else if(IS_PC98_ARCH || CPU_ArchitectureType < CPU_ARCHTYPE_80186) - VFILE_RegisterBuiltinFileBlob(bfb_MEM_EXE_PC98, "/DOS/"); - - /* DSXMENU.EXE */ - if(IS_PC98_ARCH) { - VFILE_RegisterBuiltinFileBlob(bfb_DSXMENU_EXE_PC98, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_CWSDPMI_PC98_EXE, "/BIN/"); - } - else { - VFILE_RegisterBuiltinFileBlob(bfb_DSXMENU_EXE_PC, "/BIN/"); - VFILE_RegisterBuiltinFileBlob(bfb_SHUTDOWN_COM, "/BIN/"); - } - - VFILE_RegisterBuiltinFileBlob(bfb_EVAL_EXE, "/BIN/"); - if(!IS_PC98_ARCH) - VFILE_RegisterBuiltinFileBlob(bfb_EVAL_HLP, "/BIN/"); - - VFILE_RegisterBuiltinFileBlob(bfb_EGA18_CPI, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA17_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA16_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA15_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA14_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA13_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA12_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA11_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA10_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA9_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA8_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA7_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA6_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA5_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA4_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA3_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA2_CPX, "/CPI/"); - VFILE_RegisterBuiltinFileBlob(bfb_EGA_CPX, "/CPI/"); - } - - #if WIN32 - void Add_Existing_Drive_Directories() - { - for(auto drive = 'C'; drive < 'Y'; drive++) - { - auto name = std::string("drive"); - auto path = std::string("."); - - name += drive; - path += CROSS_FILESPLIT; - path += name; - - getdrivezpath(path, name); - - if (path.empty()) - continue; - - LOG_MSG("Mounting directory 'drive%c' found in DOSBox-X directory as drive %c.\n", static_cast(drive + 32), drive); - - MountHelper(drive, path.c_str(), "LOCAL"); - } - } - #endif - - void DOS_SetupPrograms(void) { - /*Add Messages */ - - MSG_Add("PROGRAM_MOUSE_INSTALL","Installed at PS/2 port.\n"); - MSG_Add("PROGRAM_MOUSE_VERTICAL","Reverse Y-axis enabled.\n"); - MSG_Add("PROGRAM_MOUSE_VERTICAL_BACK","Reverse Y-axis disabled.\n"); - MSG_Add("PROGRAM_MOUSE_UNINSTALL","Driver successfully unloaded...\n"); - MSG_Add("PROGRAM_MOUSE_ERROR","Already installed at PS/2 port.\n"); - MSG_Add("PROGRAM_MOUSE_NOINSTALLED","Driver is not installed.\n"); - MSG_Add("PROGRAM_MOUSE_HELP","Turns on/off mouse.\n\nMOUSE [/?] [/U] [/V]\n /U: Uninstall\n /V: Reverse Y-axis\n"); - MSG_Add("PROGRAM_MOUNT_CDROMS_FOUND","CDROMs found: %d\n"); - MSG_Add("PROGRAM_MOUNT_STATUS_FORMAT","%-5s %-58s %-12s\n"); - MSG_Add("PROGRAM_MOUNT_STATUS_ELTORITO", "Drive %c is mounted as El Torito floppy drive\n"); - MSG_Add("PROGRAM_MOUNT_STATUS_RAMDRIVE", "Drive %c is mounted as RAM drive\n"); - MSG_Add("PROGRAM_MOUNT_STATUS_2","Drive %c is mounted as %s\n"); - MSG_Add("PROGRAM_MOUNT_STATUS_1","The currently mounted drives are:\n"); - MSG_Add("PROGRAM_MOUNT_NOT_FORMATTED","Drive not formatted. Format it before accessing the drive.\n"); - MSG_Add("PROGRAM_MOUNT_UNSUPPORTED_EXT","Unsupported extension %s: Mounted as raw IMG image.\n"); - MSG_Add("PROGRAM_IMGMOUNT_STATUS_FORMAT","%-5s %-47s %-12s %s\n"); - MSG_Add("PROGRAM_IMGMOUNT_STATUS_NUMBER_FORMAT","%-12s %-40s %-12s %s\n"); - MSG_Add("PROGRAM_IMGMOUNT_STATUS_2","The currently mounted drive numbers are:\n"); - MSG_Add("PROGRAM_IMGMOUNT_STATUS_1","The currently mounted FAT/ISO drives are:\n"); - MSG_Add("PROGRAM_IMGMOUNT_STATUS_NONE","No drive available\n"); - MSG_Add("PROGRAM_IMGSWAP_STATUS","Drives currently available for swapping are:\n"); - MSG_Add("PROGRAM_IMGSWAP_ERROR","Position must be between 1 and %d for this drive.\n"); - MSG_Add("PROGRAM_MOUNT_ERROR_1","Directory %s does not exist.\n"); - MSG_Add("PROGRAM_MOUNT_ERROR_2","%s is not a directory\n"); - MSG_Add("PROGRAM_MOUNT_IMGMOUNT","To mount image files, use the \033[34;1mIMGMOUNT\033[0m command, not the \033[34;1mMOUNT\033[0m command.\n"); - MSG_Add("PROGRAM_MOUNT_ILL_TYPE","Illegal type %s\n"); - MSG_Add("PROGRAM_MOUNT_ALREADY_MOUNTED","Drive %c already mounted with %s\n"); - MSG_Add("PROGRAM_MOUNT_USAGE", - "Mounts directories or drives in the host system as DOSBox-X drives.\n" - "Usage: \033[34;1m\033[32;1mMOUNT\033[0m \033[37;1mdrive\033[0m \033[36;1mlocal_directory\033[0m [option]\033[0m\n" - " \033[37;1mdrive\033[0m Drive letter where the directory or drive will be mounted.\n" - " \033[36;1mlocal_directory\033[0m Local directory or drive in the host system to be mounted.\n" - " [option] Option(s) for mounting. The following options are accepted:\n" - " -t Specify the drive type the mounted drive to behave as.\n" - " Supported drive type: dir, floppy, cdrom, overlay\n" - " (Note that 'overlay' redirects writes for mounted drive to another directory)\n" - " -label [name] Set the volume label name of the drive (all upper case).\n" - " -nl Use next available drive letter if the drive is mounted.\n" - " -ro Mount the drive in read-only mode.\n" - " -pr Specify the path is relative to the config file location.\n" - " -cd Generate a list of local CD drive's \"drive #\" values.\n" - " -usecd [drive #] For direct hardware emulation such as audio playback.\n" - " -ioctl Use lowest level hardware access (following -usecd option).\n" - " -aspi Use the installed ASPI layer (following -usecd option).\n" - " -freesize [size] Specify the free disk space of drive in MB (KB for floppies).\n" - " -nocachedir Enable real-time update and do not cache the drive.\n" - " -z drive Move virtual drive Z: to a different letter.\n" - " -o Report the drive as: local, remote.\n" - " -q Quiet mode (no message output).\n" - " -u Unmount the drive.\n" - " \033[32;1m-examples Show some usage examples.\033[0m\n" - "Type MOUNT with no parameters to display a list of mounted drives."); - MSG_Add("PROGRAM_MOUNT_EXAMPLE", - "A basic example of MOUNT command:\n\n" - "\033[32;1mMOUNT c %s\033[0m\n\n" - "This makes the directory %s act as the C: drive inside DOSBox-X.\n" - "The directory has to exist in the host system. If the directory contains\n" - "space(s), be sure to properly quote the directory with double quotes,\n" - "e.g. %s\n\n" - "Some other usage examples of MOUNT:\n\n" - #if defined (WIN32) || defined(OS2) - "\033[32;1mMOUNT\033[0m - list all mounted drives\n" - "\033[32;1mMOUNT -cd\033[0m - list all local CD drives\n" - #else - "\033[32;1mMOUNT\033[0m - list all mounted drives\n" - "\033[32;1mMOUNT -cd\033[0m - list all local CD drives\n" - #endif - "\033[32;1mMOUNT d %s\033[0m - mount the D: drive to the directory\n" - "\033[32;1mMOUNT c %s -t cdrom\033[0m - mount the C: drive as a CD-ROM drive\n" - "\033[32;1mMOUNT c %s -ro\033[0m - mount the C: drive in read-only mode\n" - "\033[32;1mMOUNT c %s -label TEST\033[0m - mount the C: drive with the label TEST\n" - "\033[32;1mMOUNT c %s -nocachedir \033[0m - mount C: without caching the drive\n" - "\033[32;1mMOUNT c %s -freesize 128\033[0m - mount C: with 128MB free disk space\n" - "\033[32;1mMOUNT c %s -u\033[0m - force mount C: drive even if it's mounted\n" - "\033[32;1mMOUNT c %s -t overlay\033[0m - mount C: with overlay directory on top\n" - #if defined (WIN32) || defined(OS2) - "\033[32;1mMOUNT c -u\033[0m - unmount the C: drive\n" - #else - "\033[32;1mMOUNT c -u\033[0m - unmount the C: drive\n" - #endif - ); - MSG_Add("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED","Drive %c is not mounted.\n"); - MSG_Add("PROGRAM_MOUNT_UMOUNT_SUCCESS","Drive %c has successfully been removed.\n"); - MSG_Add("PROGRAM_MOUNT_UMOUNT_NUMBER_SUCCESS","Drive number %c has successfully been removed.\n"); - MSG_Add("PROGRAM_MOUNT_UMOUNT_NO_VIRTUAL","Virtual Drives can not be unMOUNTed.\n"); - MSG_Add("PROGRAM_MOUNT_WARNING_WIN","Warning: Mounting C:\\ is not recommended.\n"); - MSG_Add("PROGRAM_MOUNT_WARNING_OTHER","Warning: Mounting / is not recommended.\n"); - MSG_Add("PROGRAM_MOUNT_PHYSFS_ERROR","Failed to mount the PhysFS drive with the archive file.\n"); - MSG_Add("PROGRAM_MOUNT_OVERLAY_NO_BASE","Please MOUNT a normal directory first before adding an overlay on top.\n"); - MSG_Add("PROGRAM_MOUNT_OVERLAY_INCOMPAT_BASE","The overlay is NOT compatible with the drive that is specified.\n"); - MSG_Add("PROGRAM_MOUNT_OVERLAY_MIXED_BASE","The overlay needs to be specified using the same addressing as the underlying drive. No mixing of relative and absolute paths."); - MSG_Add("PROGRAM_MOUNT_OVERLAY_SAME_AS_BASE","The overlay directory can not be the same as underlying drive.\n"); - MSG_Add("PROGRAM_MOUNT_OVERLAY_ERROR","An error occurred when trying to create an overlay drive.\n"); - MSG_Add("PROGRAM_MOUNT_OVERLAY_STATUS","Overlay %s on drive %c mounted.\n"); - - MSG_Add("PROGRAM_LOADFIX_ALLOC","%d kb allocated.\n"); - MSG_Add("PROGRAM_LOADFIX_DEALLOC","%d kb freed.\n"); - MSG_Add("PROGRAM_LOADFIX_DEALLOCALL","Used memory freed.\n"); - MSG_Add("PROGRAM_LOADFIX_ERROR","Memory allocation error.\n"); - MSG_Add("PROGRAM_LOADFIX_HELP", - "Loads a program above the first 64 KB memory by reducing the available memory.\n\n" - "LOADFIX [-xms] [-ems] [-{ram}] [{program}] [{options}]\n" - "LOADFIX -f [-xms] [-ems]\n\n" - " -xms Allocates memory from XMS rather than conventional memory\n" - " -ems Allocates memory from EMS rather than conventional memory\n" - " -{ram} Specifies the amount of memory to allocate in KB\n" - " Defaults to 64KB for conventional memory; 1MB for XMS/EMS memory\n" - " -a Auto allocates enough memory to fill the lowest 64KB memory\n" - " -f (or -d) Frees previously allocated memory\n" - " {program} Runs the specified program\n" - " {options} Program options (if any)\n\n" - "Examples:\n" - " \033[32;1mLOADFIX game.exe\033[0m Allocates 64KB of conventional memory and runs game.exe\n" - " \033[32;1mLOADFIX -a\033[0m Auto-allocates enough memory conventional memory\n" - " \033[32;1mLOADFIX -128\033[0m Allocates 128KB of conventional memory\n" - " \033[32;1mLOADFIX -xms\033[0m Allocates 1MB of XMS memory\n" - " \033[32;1mLOADFIX -f\033[0m Frees allocated conventional memory\n"); - - MSG_Add("MSCDEX_SUCCESS","MSCDEX installed.\n"); - MSG_Add("MSCDEX_ERROR_MULTIPLE_CDROMS","MSCDEX: Failure: Drive-letters of multiple CD-ROM drives have to be continuous.\n"); - MSG_Add("MSCDEX_ERROR_NOT_SUPPORTED","MSCDEX: Failure: Not yet supported.\n"); - MSG_Add("MSCDEX_ERROR_PATH","MSCDEX: Specified location is not a CD-ROM drive.\n"); - MSG_Add("MSCDEX_ERROR_OPEN","MSCDEX: Failure: Invalid file or unable to open.\n"); - MSG_Add("MSCDEX_TOO_MANY_DRIVES","MSCDEX: Failure: Too many CD-ROM drives (max: 5). MSCDEX Installation failed.\n"); - MSG_Add("MSCDEX_LIMITED_SUPPORT","MSCDEX: Mounted subdirectory: limited support.\n"); - MSG_Add("MSCDEX_INVALID_FILEFORMAT","MSCDEX: Failure: File is either no ISO/CUE image or contains errors.\n"); - MSG_Add("MSCDEX_UNKNOWN_ERROR","MSCDEX: Failure: Unknown error.\n"); - - MSG_Add("PROGRAM_RESCAN_SUCCESS","Drive cache cleared.\n"); - - MSG_Add("PROGRAM_INTRO", - "\033[2J\033[32;1mWelcome to DOSBox-X\033[0m, an open-source x86 emulator with sound and graphics.\n" - "DOSBox-X creates a shell for you which looks just like the plain DOS.\n" - "\n" - "\033[31;1mDOSBox-X will stop/exit without a warning if an error occurred!\033[0m\n" - "\n" - "\n" ); - MSG_Add("PROGRAM_INTRO_MENU_UP", "DOSBox-X Introduction"); - MSG_Add("PROGRAM_INTRO_MENU_BASIC","Basic mount"); - MSG_Add("PROGRAM_INTRO_MENU_CDROM","CD-ROM support"); - MSG_Add("PROGRAM_INTRO_MENU_USAGE","Usage"); - MSG_Add("PROGRAM_INTRO_MENU_INFO","Information"); - MSG_Add("PROGRAM_INTRO_MENU_QUIT","Quit"); - MSG_Add("PROGRAM_INTRO_MENU_BASIC_HELP","\n\033[1m \033[1m\033[KMOUNT allows you to connect real hardware to DOSBox-X's emulated PC.\033[0m\n"); - MSG_Add("PROGRAM_INTRO_MENU_CDROM_HELP","\n\033[1m \033[1m\033[KTo mount your CD-ROM in DOSBox-X, you need to specify additional options\n when mounting the CD-ROM.\033[0m\n"); - MSG_Add("PROGRAM_INTRO_MENU_USAGE_HELP","\n\033[1m \033[1m\033[KAn overview of the command line options you can give to DOSBox-X.\033[0m\n"); - MSG_Add("PROGRAM_INTRO_MENU_INFO_HELP","\n\033[1m \033[1m\033[KHow to get more information about DOSBox-X.\033[0m\n"); - MSG_Add("PROGRAM_INTRO_MENU_QUIT_HELP","\n\033[1m \033[1m\033[KExit from Intro.\033[0m\n"); - MSG_Add("PROGRAM_INTRO_USAGE_TOP", - "\033[2J\033[32;1mAn overview of the command line options you can give to DOSBox-X.\033[0m\n" - "Windows users must open cmd.exe or edit the shortcut to DOSBox-X.exe for this.\n\n" - "dosbox-x [name] [-exit] [-version] [-fastlaunch] [-fullscreen]\n" - " [-conf congfigfile] [-lang languagefile] [-machine machinetype]\n" - " [-startmapper] [-noautoexec] [-scaler scaler | -forcescaler scaler]\n" - " [-o options] [-c command] [-set
]\n\n" - ); - MSG_Add("PROGRAM_INTRO_USAGE_1", - "\033[33;1m name\033[0m\n" - "\tIf name is a directory it will mount that as the C: drive.\n" - "\tIf name is an executable it will mount the directory of name\n" - "\tas the C: drive and execute name.\n\n" - "\033[33;1m -exit\033[0m\n" - "\tDOSBox-X will close itself when the DOS application name ends.\n\n" - "\033[33;1m -version\033[0m\n" - "\tOutputs version information and exit. Useful for frontends.\n\n" - "\033[33;1m -fastlaunch\033[0m\n" - "\tEnables fast launch mode (skip BIOS logo and welcome banner).\n\n" - "\033[33;1m -fullscreen\033[0m\n" - "\tStarts DOSBox-X in fullscreen mode.\n" - ); - MSG_Add("PROGRAM_INTRO_USAGE_2", - "\033[33;1m -conf\033[0m configfile\n" - "\tStart DOSBox-X with the options specified in configfile.\n" - "\tSee the documentation for more details.\n\n" - "\033[33;1m -lang\033[0m languagefile\n" - "\tStart DOSBox-X using the language specified in languagefile.\n\n" - "\033[33;1m -startmapper\033[0m\n" - "\tEnter the keymapper directly on startup. Useful for people with\n" - "\tkeyboard problems.\n\n" - "\033[33;1m -machine\033[0m machinetype\n" - "\tSetup DOSBox-X to emulate a specific type of machine. Valid choices:\n" - "\thercules, cga, cga_mono, mcga, mda, pcjr, tandy, ega, vga, vgaonly,\n" - "\tpc98, vesa_nolfb, vesa_oldvbe, svga_paradise, svga_s3 (default).\n" - "\tThe machinetype affects both the video card and available sound cards.\n" - ); - MSG_Add("PROGRAM_INTRO_USAGE_3", - "\033[33;1m -noautoexec\033[0m\n" - "\tSkips the [autoexec] section of the loaded configuration file.\n\n" - "\033[33;1m -o\033[0m options\n" - "\tProvides command-line option(s) for \"name\" if an executable name is\n" - "\tspecified. Multiple -o can be used for multiple executable names.\n\n" - "\033[33;1m -c\033[0m command\n" - "\tRuns the specified command before running name. Multiple commands\n" - "\tcan be specified. Each command should start with -c, though.\n" - "\tA command can be: an Internal Program, a DOS command or an executable\n" - "\ton a mounted drive.\n\n" - "\033[33;1m -set\033[0m
\n" - "\tSets the config option (overriding the config file). Multiple options\n" - "\tcan be specified. Each option should start with -set, though.\n" - ); - MSG_Add("PROGRAM_INTRO_INFO", - "\033[32;1mInformation:\033[0m\n\n" - "For information about basic mount, type \033[34;1mintro mount\033[0m\n" - "For information about CD-ROM support, type \033[34;1mintro cdrom\033[0m\n" - "For information about usage, type \033[34;1mintro usage\033[0m\n\n" - "For the latest version of DOSBox-X, go to its homepage:\033[34;1m\n" - "\n" - "\033[34;1mhttps://dosbox-x.com/\033[0m or \033[34;1mhttp://dosbox-x.software\033[0m\n" - "\n" - "For more information about DOSBox-X, please take a look at its Wiki:\n" - "\n" - "\033[34;1mhttps://dosbox-x.com/wiki\033[0m\n" - ); - MSG_Add("PROGRAM_INTRO_MOUNT_START", - "\033[32;1mHere are some commands to get you started:\033[0m\n" - "Before you can use the files located on your own filesystem,\n" - "you have to mount the directory containing the files.\n" - "\n" - ); - MSG_Add("PROGRAM_INTRO_MOUNT_EXST_WINDOWS", "\033[32mmount c c:\\dosgames\\\033[37m will create a C drive with c:\\dosgames as contents."); - MSG_Add("PROGRAM_INTRO_MOUNT_EXEN_WINDOWS", "c:\\dosgames\\\033[37m is an example. Replace it with your own games directory. \033[37m "); - MSG_Add("PROGRAM_INTRO_MOUNT_EXST_OTHER", "\033[32mmount c ~/dosgames\033[37m will create a C drive with ~/dosgames as contents."); - MSG_Add("PROGRAM_INTRO_MOUNT_EXEN_OTHER", "\033[32m~/dosgames\033[37m is an example. Replace it with your own games directory.\033[37m "); - MSG_Add("PROGRAM_INTRO_MOUNT_END", - "When the mount has successfully completed you can type \033[34;1mc:\033[0m to go to your freshly\n" - "mounted C: drive. Typing \033[34;1mdir\033[0m there will show its contents." - " \033[34;1mcd\033[0m will allow you to\n" - "enter a directory (recognised by the \033[33;1m[]\033[0m in a directory listing).\n" - "You can run programs/files which end with \033[31m.exe .bat\033[0m and \033[31m.com\033[0m.\n" - ); - MSG_Add("PROGRAM_INTRO_CDROM", - "\033[2J\033[32;1mHow to mount a Real/Virtual CD-ROM Drive in DOSBox-X:\033[0m\n" - "DOSBox-X provides CD-ROM emulation on several levels.\n" - "\n" - "The \033[33mbasic\033[0m level works on all CD-ROM drives and normal directories.\n" - "It installs MSCDEX and marks the files read-only.\n" - "Usually this is enough for most games:\n" - "\033[34;1mmount d \033[0;31mD:\\\033[34;1m -t cdrom\033[0m or \033[34;1mmount d C:\\example -t cdrom\033[0m\n" - "If it doesn't work you might have to tell DOSBox-X the label of the CD-ROM:\n" - "\033[34;1mmount d C:\\example -t cdrom -label CDLABEL\033[0m\n" - "\n" - "The \033[33mnext\033[0m level adds some low-level support.\n" - "Therefore only works on CD-ROM drives:\n" - "\033[34;1mmount d \033[0;31mD:\\\033[34;1m -t cdrom -usecd \033[33m0\033[0m\n" - "\n" - "The \033[33mlast\033[0m level of support depends on your Operating System:\n" - "For \033[1mWindows 2000\033[0m, \033[1mWindows XP\033[0m and \033[1mLinux\033[0m:\n" - "\033[34;1mmount d \033[0;31mD:\\\033[34;1m -t cdrom -usecd \033[33m0 \033[34m-ioctl\033[0m\n" - "For \033[1mWindows 9x\033[0m with a ASPI layer installed:\n" - "\033[34;1mmount d \033[0;31mD:\\\033[34;1m -t cdrom -usecd \033[33m0 \033[34m-aspi\033[0m\n" - "\n" - "Replace \033[0;31mD:\\\033[0m with the location of your CD-ROM.\n" - "Replace the \033[33;1m0\033[0m in \033[34;1m-usecd \033[33m0\033[0m with the number reported for your CD-ROM if you type:\n" - "\033[34;1mmount -cd\033[0m\n" - ); - MSG_Add("PROGRAM_BOOT_NOT_EXIST","Bootdisk file does not exist. Failing.\n"); - MSG_Add("PROGRAM_BOOT_NOT_OPEN","Cannot open bootdisk file. Failing.\n"); - MSG_Add("PROGRAM_BOOT_WRITE_PROTECTED","Image file is read-only! Boot in write-protected mode.\n"); - MSG_Add("PROGRAM_BOOT_PRINT_ERROR","This command boots DOSBox-X from either a floppy or hard disk image.\n\n" - "For this command, one can specify a succession of floppy disks swappable\n" - "by the menu command, and drive: specifies the mounted drive to boot from.\n" - "If no drive letter is specified, this defaults to boot from the A drive.\n" - "If no parameter is specified, it will try to boot from the current drive.\n" - "The only bootable drive letters are A, C, and D. For booting from a hard\n" - "drive (C or D), ensure the image is already mounted by \033[34;1mIMGMOUNT\033[0m command.\n\n" - "The syntax of this command is one of the following:\n\n" - "\033[34;1mBOOT [driveletter:] [-convertfat|-convertfatro|-noconvertfat]\033[0m\n\n" - "\033[34;1mBOOT diskimg1.img [diskimg2.img ...] [-L driveletter]\033[0m\n\n" - "Note: An image file with a leading colon (:) will be booted in write-protected\n" - "mode if the \"leading colon write protect image\" option is enabled.\n\n" - "Examples:\n\n" - "\033[32;1mBOOT A:\033[0m - boot from drive A: if it is mounted and bootable.\n" - "\033[32;1mBOOT :DOS.IMG\033[0m - boot from floppy image DOS.IMG in write-protected mode.\n" - ); - MSG_Add("PROGRAM_BOOT_UNABLE","Unable to boot off of drive %c.\n"); - MSG_Add("PROGRAM_BOOT_IMAGE_MOUNTED", "Floppy image(s) already mounted.\n"); - MSG_Add("PROGRAM_BOOT_IMAGE_OPEN","Opening image file: %s\n"); - MSG_Add("PROGRAM_BOOT_IMAGE_NOT_OPEN","Cannot open %s\n"); - MSG_Add("PROGRAM_BOOT_CART_WO_PCJR","PCjr cartridge found, but machine is not PCjr"); - MSG_Add("PROGRAM_BOOT_CART_LIST_CMDS","Available PCjr cartridge commandos:%s"); - MSG_Add("PROGRAM_BOOT_CART_NO_CMDS", "No PCjr cartridge commandos found"); - MSG_Add("PROGRAM_BOOT_BOOTING", "Booting from drive "); - - MSG_Add("PROGRAM_LOADROM_HELP","Loads the specified ROM image file for video BIOS or IBM BASIC.\n\nLOADROM ROM_file\n"); - MSG_Add("PROGRAM_LOADROM_HELP","Must specify ROM file to load.\n"); - MSG_Add("PROGRAM_LOADROM_SPECIFY_FILE","Must specify ROM file to load.\n"); - MSG_Add("PROGRAM_LOADROM_CANT_OPEN","ROM file not accessible.\n"); - MSG_Add("PROGRAM_LOADROM_TOO_LARGE","ROM file too large.\n"); - MSG_Add("PROGRAM_LOADROM_INCOMPATIBLE","Video BIOS not supported by machine type.\n"); - MSG_Add("PROGRAM_LOADROM_UNRECOGNIZED","ROM file not recognized.\n"); - MSG_Add("PROGRAM_LOADROM_BASIC_LOADED","BASIC ROM loaded.\n"); - MSG_Add("PROGRAM_BIOSTEST_HELP","Boots into a BIOS image for running CPU tester BIOS.\n\nBIOSTEST image_file\n"); - - MSG_Add("VHD_ERROR_OPENING", "Could not open the specified VHD file.\n"); - MSG_Add("VHD_INVALID_DATA", "The specified VHD file is corrupt and cannot be opened.\n"); - MSG_Add("VHD_UNSUPPORTED_TYPE", "The specified VHD file is of an unsupported type.\n"); - MSG_Add("VHD_ERROR_OPENING_PARENT", "The parent of the specified VHD file could not be found.\n"); - MSG_Add("VHD_PARENT_INVALID_DATA", "The parent of the specified VHD file is corrupt and cannot be opened.\n"); - MSG_Add("VHD_PARENT_UNSUPPORTED_TYPE", "The parent of the specified VHD file is of an unsupported type.\n"); - MSG_Add("VHD_PARENT_INVALID_MATCH", "The parent of the specified VHD file does not contain the expected identifier.\n"); - MSG_Add("VHD_PARENT_INVALID_DATE", "The parent of the specified VHD file has been changed and cannot be loaded.\n"); - - MSG_Add("PROGRAM_IMGMOUNT_SPECIFY_DRIVE","Must specify drive letter to mount image at.\n"); - MSG_Add("PROGRAM_IMGMOUNT_SPECIFY2","Must specify drive number (0 to %d) to mount image at (0,1=fda,fdb;2,3=hda,hdb).\n"); - /*MSG_Add("PROGRAM_IMGMOUNT_SPECIFY_GEOMETRY", - "For \033[33mCD-ROM\033[0m images: \033[34;1mIMGMOUNT drive-letter location-of-image -t iso\033[0m\n" - "\n" - "For \033[33mhardrive\033[0m images: Must specify drive geometry for hard drives:\n" - "bytes_per_sector, sectors_per_cylinder, heads_per_cylinder, cylinder_count.\n" - "\033[34;1mIMGMOUNT drive-letter location-of-image -size bps,spc,hpc,cyl\033[0m\n");*/ - MSG_Add("PROGRAM_IMGMOUNT_INVALID_IMAGE","Could not load image file.\n" - "Check that the path is correct and the image is accessible.\n"); - MSG_Add("PROGRAM_IMGMOUNT_INVALID_GEOMETRY","Could not extract drive geometry from image.\n" - "Use parameter -size bps,spc,hpc,cyl to specify the geometry.\n"); - MSG_Add("PROGRAM_IMGMOUNT_AUTODET_VALUES","Image geometry auto detection: -size %u,%u,%u,%u\n"); - MSG_Add("PROGRAM_IMGMOUNT_TYPE_UNSUPPORTED","Type \"%s\" is unsupported. Specify \"hdd\" or \"floppy\" or \"iso\".\n"); - MSG_Add("PROGRAM_IMGMOUNT_FORMAT_UNSUPPORTED","Format \"%s\" is unsupported. Specify \"fat\" or \"iso\" or \"none\".\n"); - MSG_Add("PROGRAM_IMGMOUNT_SPECIFY_FILE","Must specify image file(s) to mount.\n"); - MSG_Add("PROGRAM_IMGMOUNT_FILE_NOT_FOUND","Image file not found.\n"); - MSG_Add("PROGRAM_IMGMOUNT_DEFAULT_NOT_FOUND","Image file not found: IMGMAKE.IMG.\n"); - MSG_Add("PROGRAM_IMGMOUNT_MOUNT","To mount directories, use the \033[34;1mMOUNT\033[0m command, not the \033[34;1mIMGMOUNT\033[0m command.\n"); - MSG_Add("PROGRAM_IMGMOUNT_ALREADY_MOUNTED","Drive already mounted at that letter.\n"); - MSG_Add("PROGRAM_IMGMOUNT_ALREADY_MOUNTED_NUMBER","Drive number %d already mounted.\n"); - MSG_Add("PROGRAM_IMGMOUNT_CANT_CREATE","Cannot create drive from file.\n"); - MSG_Add("PROGRAM_IMGMOUNT_CANT_CREATE_PHYSFS","Cannot create PhysFS drive.\n"); - MSG_Add("PROGRAM_IMGMOUNT_MOUNT_NUMBER","Drive number %d mounted as %s\n"); - MSG_Add("PROGRAM_IMGMOUNT_NON_LOCAL_DRIVE", "The image must be on a host, local or network drive.\n"); - MSG_Add("PROGRAM_IMGMOUNT_MULTIPLE_NON_CUEISO_FILES", "Using multiple files is only supported for cue/iso images.\n"); - - MSG_Add("PROGRAM_IMGMOUNT_HELP", - "Mounts floppy, hard drive and optical disc images.\n" - "\033[32;1mIMGMOUNT\033[0m \033[37;1mdrive\033[0m \033[36;1mfile\033[0m [-ro] [-t floppy] [-fs fat] [-size ss,s,h,c]\n" - "\033[32;1mIMGMOUNT\033[0m \033[37;1mdrive\033[0m \033[36;1mfile\033[0m [-ro] [-t hdd] [-fs fat] [-size ss,s,h,c] [-ide controller]\n" - "\033[32;1mIMGMOUNT\033[0m \033[37;1mdriveNum\033[0m \033[36;1mfile\033[0m [-ro] [-fs none] [-size ss,s,h,c] [-reservecyl #]\n" - "\033[32;1mIMGMOUNT\033[0m \033[37;1mdrive\033[0m \033[36;1mfile\033[0m [-t iso] [-fs iso]\n" - "\033[32;1mIMGMOUNT\033[0m \033[37;1mdrive\033[0m [-t floppy] -bootcd cdDrive (or -el-torito cdDrive)\n" - "\033[32;1mIMGMOUNT\033[0m \033[37;1mdrive\033[0m -t ram -size size\n" - "\033[32;1mIMGMOUNT\033[0m -u \033[37;1mdrive|driveNum\033[0m (or \033[32;1mIMGMOUNT\033[0m \033[37;1mdrive|driveNum\033[0m \033[36;1mfile\033[0m [options] -u)\n" - " \033[37;1mdrive\033[0m Drive letter to mount the image at.\n" - " \033[37;1mdriveNum\033[0m Drive number to mount, where 0-1 are FDDs, 2-5 are HDDs.\n" - " \033[36;1mfile\033[0m Image filename(s), or \033[33;1mIMGMAKE.IMG\033[0m if not specified.\n" - " -t iso Image type is optical disc iso or cue / bin image.\n" - " -t hdd|floppy|ram Image type is hard disk (inc. VHD/HDI)|floppy|RAM drive.\n" - " -fs iso Filesystem is ISO 9660 (auto-assumed for .iso/.cue files).\n" - " -fs fat Filesystem is FAT - FAT12, FAT16 and FAT32 are supported.\n" - " -fs none Do not detect filesystem (auto-assumed for drive numbers).\n" - " -reservecyl # Report # number of cylinders less than actual in BIOS.\n" - " -ide controller Specify IDE controller (1m, 1s, 2m, 2s) to mount drive.\n" - " -size size|ss,s,h,c Specify the size in KB, or sector size and CHS geometry.\n" - " -bootcd cdDrive Specify the CD drive to load the bootable floppy from.\n" - " -o partidx=# Specify a hard disk partition number to mount as drive.\n" - " -ro Mount image(s) read-only (or leading ':' for read-only).\n" - " -u Unmount the drive or drive number.\n" - " \033[32;1m-examples Show some usage examples.\033[0m" - ); - MSG_Add("PROGRAM_IMGMOUNT_EXAMPLE", - "Some usage examples of IMGMOUNT:\n\n" - " \033[32;1mIMGMOUNT\033[0m - list mounted FAT/ISO drives & drive numbers\n" - " \033[32;1mIMGMOUNT C\033[0m - mount hard disk image \033[33;1mIMGMAKE.IMG\033[0m as C:\n" - #ifdef WIN32 - " \033[32;1mIMGMOUNT C c:\\image.img\033[0m - mount hard disk image c:\\image.img as C:\n" - " \033[32;1mIMGMOUNT D c:\\files\\game.iso\033[0m - mount CD image c:\\files\\game.iso as D:\n" - #else - " \033[32;1mIMGMOUNT C ~/image.img\033[0m - mount hard disk image ~/image.img as C:\n" - " \033[32;1mIMGMOUNT D ~/files/game.iso\033[0m - mount CD image ~/files/game.iso as D:\n" - #endif - " \033[32;1mIMGMOUNT D cdaudio.cue\033[0m - mount cue file of a cue/bin pair as CD drive\n" - " \033[32;1mIMGMOUNT 0 dos.ima\033[0m - mount floppy image dos.ima as drive number 0\n" - " (\033[33;1mBOOT A:\033[0m will boot from drive if bootable)\n" - " \033[32;1mIMGMOUNT A -ro dos.ima\033[0m - mount floppy image dos.ima as A: read-only\n" - " \033[32;1mIMGMOUNT A :dsk1.img dsk2.img\033[0m - mount floppy images dsk1.img and dsk2.img as\n" - " A:, swappable via menu item \"Swap floppy\",\n" - " with dsk1.img read-only (but not dsk2.img)\n" - " \033[32;1mIMGMOUNT A -bootcd D\033[0m - mount bootable floppy A: from CD drive D:\n" - " \033[32;1mIMGMOUNT C -t ram -size 10000\033[0m - mount hard drive C: as a 10MB RAM drive\n" - " \033[32;1mIMGMOUNT D d.img -o partidx=4\033[0m - mount 1st logical partition of d.img as D:\n" - " \033[32;1mIMGMOUNT C disk.img -u\033[0m - force mount hard disk image disk.img as C:,\n" - " auto-unmount drive beforehand if necessary\n" - " \033[32;1mIMGMOUNT A -u\033[0m - unmount previously-mounted drive A:\n" - ); - MSG_Add("PROGRAM_IMGMAKE_SYNTAX", - "Creates floppy or hard disk images.\n" - "Usage: \033[34;1mIMGMAKE [file] [-t type] [[-size size] | [-chs geometry]] [-spc] [-nofs]\033[0m\n" - " \033[34;1m[-bat] [-fat] [-fatcopies] [-rootdir] [-force]" - #ifdef WIN32 - " [-source source] [-retries #]" - #endif - "\033[0m\n" - " file: Image file to create (or \033[33;1mIMGMAKE.IMG\033[0m if not set) - \033[31;1mpath on the host\033[0m\n" - " -t: Type of image.\n" - " \033[33;1mFloppy disk templates\033[0m (names resolve to floppy sizes in KB or fd=fd_1440):\n" - " fd_160 fd_180 fd_200 fd_320 fd_360 fd_400 fd_720 fd_1200 fd_1440 fd_2880\n" - " \033[33;1mHard disk templates:\033[0m\n" - " hd_250: 250MB, hd_520: 520MB, hd_1gig: 1GB, hd_2gig: 2GB, hd_4gig: 4GB,\n" - " hd_8gig: 8GB, hd_st251: 40MB, hd_st225: 20MB (geometry from old drives)\n" - " \033[33;1mCustom hard disks:\033[0m hd vhd (requires -size or -chs)\n" - " -size: Size of a custom hard disk image in MB (vhd: up to 2088960).\n" - " -chs: Disk geometry in cylinders(1-1023),heads(1-255),sectors(1-63).\n" - " -nofs: Add this parameter if a blank image should be created.\n" - " -force: Overwrite existing image file. -chs / -lba: Choose C/H/S or LBA.\n" - " -bat: Create a .bat file with the IMGMOUNT command required for this image.\n" - " -fat: Type (12, 16, or 32). -fatcopies: FAT table copies.\n" - " -spc: Sectors per cluster (must be power of 2). -label Drive label.\n" - " -rootdir: Root directory entries. -partofs: Start of hd partition.\n" - " -align: Align filesystem structures. In sectors, or add 'K' suffix for KB.\n" - #ifdef WIN32 - " -source: drive letter - if specified the image is read from a floppy disk.\n" - " -retries: how often to retry when attempting to read a bad floppy disk(1-99).\n" - #endif - " \033[32;1m-examples: Show some usage examples.\033[0m" - ); - MSG_Add("PROGRAM_IMGMAKE_EXAMPLE", - "Some usage examples of IMGMAKE:\n\n" - " \033[32;1mIMGMAKE -t fd\033[0m - create a 1.44MB floppy image \033[33;1mIMGMAKE.IMG\033[0m\n" - " \033[32;1mIMGMAKE -t fd_1440 -force\033[0m - force to create a floppy image \033[33;1mIMGMAKE.IMG\033[0m\n" - " \033[32;1mIMGMAKE dos.img -t fd_2880\033[0m - create a 2.88MB floppy image named dos.img\n" - " \033[32;1mIMGMAKE new.vhd -t vhd -size 520\033[0m- create a 520MB Dynamic VHD named new.vhd\n" - #ifdef WIN32 - " \033[32;1mIMGMAKE c:\\disk.img -t hd -size 50\033[0m - create a 50MB HDD image c:\\disk.img\n" - " \033[32;1mIMGMAKE c:\\disk.img -t hd_520 -nofs\033[0m - create a 520MB blank HDD image\n" - " \033[32;1mIMGMAKE c:\\disk.img -t hd_2gig -fat 32\033[0m - create a 2GB FAT32 HDD image\n" - " \033[32;1mIMGMAKE c:\\disk.img -t hd -chs 130,2,17\033[0m - create a HDD image of specified CHS\n" - " \033[32;1mIMGMAKE c:\\disk.img -source a\033[0m - read image from physical drive A:\n" - #else - " \033[32;1mIMGMAKE ~/disk.img -t hd -size 50\033[0m - create a 50MB HDD image ~/disk.img\n" - " \033[32;1mIMGMAKE ~/disk.img -t hd_520 -nofs\033[0m - create a 520MB blank HDD image\n" - " \033[32;1mIMGMAKE ~/disk.img -t hd_2gig -fat 32\033[0m - create a 2GB FAT32 HDD image\n" - " \033[32;1mIMGMAKE ~/disk.img -t hd -chs 130,2,17\033[0m - create a HDD image of specified CHS\n" - #endif - ); - - #ifdef WIN32 - MSG_Add("PROGRAM_IMGMAKE_FLREAD", - "Disk geometry: %d Cylinders, %d Heads, %d Sectors, %d Kilobytes\n\n"); - MSG_Add("PROGRAM_IMGMAKE_FLREAD2", - "%s =good, %s =good after retries, ! =CRC error, x =sector not found, ? =unknown\n\n"); - #endif - MSG_Add("PROGRAM_IMGMAKE_FILE_EXISTS","The file \"%s\" already exists. You can specify \"-force\" to overwrite.\n"); - MSG_Add("PROGRAM_IMGMAKE_CANNOT_WRITE","The file \"%s\" cannot be opened for writing.\n"); - MSG_Add("PROGRAM_IMGMAKE_NOT_ENOUGH_SPACE","Not enough space available for the image file. Need %llu bytes.\n"); - MSG_Add("PROGRAM_IMGMAKE_PRINT_CHS","Creating image file \"%s\" with %u cylinders, %u heads and %u sectors\n"); - MSG_Add("PROGRAM_IMGMAKE_CANT_READ_FLOPPY","\n\nUnable to read floppy."); - MSG_Add("PROGRAM_IMGMAKE_BADSIZE","Wrong -size or -chs arguments.\n"); - - MSG_Add("PROGRAM_KEYB_INFO","Codepage %i has been loaded\n"); - MSG_Add("PROGRAM_KEYB_INFO_LAYOUT","Codepage %i has been loaded for layout %s\n"); - MSG_Add("PROGRAM_KEYB_SHOWHELP","Configures a keyboard for a specific language.\n\n" - "Usage: \033[32;1mKEYB\033[0m [keyboard layout ID [codepage number [codepage file]]]\n" - " layout ID Name of layout or keyboard file (.kl) to load\n" - " codepage number Number of codepage to load\n" - " codepage file .cpi/.cpx file including specified codepage information\n" - " (.kl, .cpi/.cpx files shall be placed under the directory where dosbox-x\n" - " executable exists.)\n\n" - "Some examples:\n" - " \033[32;1mKEYB\033[0m Display currently loaded codepage.\n" - " \033[32;1mKEYB sp\033[0m Load the Spanish (SP) layout, use an appropriate codepage.\n" - " \033[32;1mKEYB sp 850\033[0m Load the Spanish (SP) layout, use codepage 850.\n" - " \033[32;1mKEYB sp 850 mycp.cpi\033[0m Same as above, but use file mycp.cpi.\n" - " \033[32;1mKEYB sp_mod 850\033[0m Load keyboard layout from sp_mod.kl, use codepage 850.\n"); - MSG_Add("PROGRAM_KEYB_NOERROR","Keyboard layout %s loaded for codepage %i\n"); - MSG_Add("PROGRAM_KEYB_FILENOTFOUND","Keyboard file %s not found (or not a valid ID)\n\n"); - MSG_Add("PROGRAM_KEYB_INVALIDFILE","Keyboard file %s invalid\n"); - MSG_Add("PROGRAM_KEYB_LAYOUTNOTFOUND","No layout in %s for codepage %i\n"); - MSG_Add("PROGRAM_KEYB_INVCPFILE","None or invalid codepage file for layout %s\n\n"); - MSG_Add("INT21_6523_YESNO_CHARS", "yn"); - MSG_Add("PROGRAM_LABEL_HELP", "Creates, changes, or deletes the volume label of a drive.\n\nLABEL [drive:][label]\n\n [drive:]\tSpecifies the drive letter\n [label]\tSpecifies the volume label\n"); - MSG_Add("PROGRAM_LABEL_DELETE", "Delete the volume label (Y/N)? "); - MSG_Add("PROGRAM_LABEL_TOOLONG", "Label is too long (more than 11 characters).\n"); - MSG_Add("PROGRAM_LABEL_BADCHARS", "Label has invalid characters.\n"); - MSG_Add("PROGRAM_LABEL_VOLUMEIS", "Volume in drive %c is %s\n"); - MSG_Add("PROGRAM_LABEL_NOLABEL", "Volume in drive %c has no label\n"); - MSG_Add("PROGRAM_MODE_USAGE","Configures system devices.\n\n" - "\033[34;1mMODE\033[0m display-type :display-type codes are " - "\033[1mCO80\033[0m, \033[1mBW80\033[0m, \033[1mCO40\033[0m, \033[1mBW40\033[0m, or \033[1mMONO\033[0m\n" - "\033[34;1mMODE CON COLS=\033[0mc \033[34;1mLINES=\033[0mn :columns and lines, c=80 or 132, n=25, 43, 50, or 60\n" - "\033[34;1mMODE CON RATE=\033[0mr \033[34;1mDELAY=\033[0md :typematic rates, r=1-32 (32=fastest), d=1-4 (1=lowest)\n"); - MSG_Add("PROGRAM_MODE_INVALID_PARAMETERS","Invalid parameter(s).\n"); - MSG_Add("PROGRAM_PORT_INVALID_NUMBER","Must specify a port number between 1 and 9.\n"); - MSG_Add("PROGRAM_VHDMAKE_WRITERR", "Could not write to new VHD image \"%s\", aborting.\n"); - MSG_Add("PROGRAM_VHDMAKE_REMOVEERR", "Could not erase file \"%s\"\n"); - MSG_Add("PROGRAM_VHDMAKE_RENAME", "You'll have to manually rename the newly created VHD image.\n"); - MSG_Add("PROGRAM_VHDMAKE_SUCCESS", "New VHD image successfully created. You can mount it with \033[34;1mIMGMOUNT\033[0m.\n"); - MSG_Add("PROGRAM_VHDMAKE_ERROPEN", "Error, could not open image file \"%s\".\n"); - MSG_Add("PROGRAM_VHDMAKE_BADSIZE", "Bad VHD size specified, aborting!\n"); - MSG_Add("PROGRAM_VHDMAKE_FNEEDED", "A pre-existing VHD image can't be silently overwritten without -f option!\n"); - MSG_Add("PROGRAM_VHDMAKE_BADPARENT", "The parent VHD image \"%s\" can't be opened for linking, aborting!\n"); - MSG_Add("PROGRAM_VHDMAKE_NOINFO", "Couldn't query info for \"%s\".\n"); - MSG_Add("PROGRAM_VHDMAKE_BLOCKSTATS", " with %d/%d blocks allocated.\n"); - MSG_Add("PROGRAM_VHDMAKE_INFO", "VHD \"%s\" type is %s.\nIts virtual size is %.02f MB"); - MSG_Add("PROGRAM_VHDMAKE_CANTMERGE", "%s is not a Differencing disk, can't merge!\n"); - MSG_Add("PROGRAM_VHDMAKE_MERGEREPORT", "%d sectors in %d blocks from \"%s\" merged into \"%s\".\n"); - MSG_Add("PROGRAM_VHDMAKE_MERGENODELETE", "Couldn't remove snapshot \"%s\", you'll have to do it yourself!"); - MSG_Add("PROGRAM_VHDMAKE_MERGEOKDELETE", "Snapshot VHD merged and deleted.\n"); - MSG_Add("PROGRAM_VHDMAKE_MERGEFAILED", "Failure while merging, aborted!\n"); - MSG_Add("PROGRAM_VHDMAKE_MERGEWARNCORRUPTION", " Parent \"%s\" contents could be corrupted!\n"); - MSG_Add("PROGRAM_VHDMAKE_ABSPATH", "Warning: an absolute path to parent prevents portability.\nPlease prefer a path relative to the differencing image file!\n"); - MSG_Add("PROGRAM_VHDMAKE_HELP", - "Creates Dynamic or Differencing VHD images, converts raw images into Fixed VHD,\n" - "shows information about VHD images and merges them.\n" - "\033[32;1mVHDMAKE\033[0m [-f] new.vhd size[BKMGT]\n" - "\033[32;1mVHDMAKE\033[0m \033[34;1m-convert\033[0m raw.hdd new.vhd\n" - "\033[32;1mVHDMAKE\033[0m [-f] \033[34;1m-link\033[0m parent.vhd new.vhd\n" - "\033[32;1mVHDMAKE\033[0m \033[34;1m-merge\033[0m delta.vhd\n" - "\033[32;1mVHDMAKE\033[0m \033[34;1m-info\033[0m a.vhd\n" - " -c | -convert convert a raw hd image to Fixed VHD, renaming it to new.vhd\n" - " -l | -link create a new Differencing VHD new.vhd and link it to the\n" - " pre-existing parent image parent.vhd\n" - " -f | -force force overwriting a pre-existing image file\n" - " -i | -info show useful information about a.vhd image\n" - " -m | -merge merge differencing delta.vhd to its parent\n" - " new.vhd name of the new Dynamic VHD image to create\n" - " size disk size (eventually with size unit, Bytes is implicit)\n" - "When converting a raw disk image to Fixed VHD, it has to be partitioned with\n" - "MBR scheme and formatted with FAT format.\n" - "When creating a Dynamic VHD, its size must range from 3 MB to 2040 GB.\n" - "The Dynamic VHD created is not partitioned nor formatted: to directly mount to\n" - "a drive letter with \033[34;1mIMGMOUNT\033[0m, please consider using \033[34;1mIMGMAKE\033[0m instead.\n" - "A merged snapshot VHD is automatically deleted if merge is successful.\n"); - - const Section_prop * dos_section=static_cast(control->GetSection("dos")); - hidefiles = dos_section->Get_string("drive z hide files"); - - /*regular setup*/ - Add_VFiles(false); - - #if WIN32 - if (dos_section->Get_bool("automount drive directories")) { - Add_Existing_Drive_Directories(); - } - #endif - } - \ No newline at end of file +template +T to_finite(const std::string& input) { + // Defensively set NaN from the get-go + T result = std::numeric_limits::quiet_NaN(); + size_t bytes_read = 0; + try { + const double interim = std::stod(input, &bytes_read); + if (!input.empty() && bytes_read == input.size()) + result = static_cast(interim); + } + // Capture expected exceptions stod may throw + catch (std::invalid_argument& e) { (void)e; } + catch (std::out_of_range& e) { (void)e; } + return result; +} + +/* + * Reads a floating point argument from command line, where: + * - name is a human description for the flag, ie: DELAY + * - flag is the command-line flag, ie: -d or -delay + * - default is the default value if the flag doesn't exist + * - value will be populated with the default or provided value + * + * Returns: + * true if 'value' is set to the default or read from the arg. + * false if the argument was used but could not be parsed. + */ +bool AUTOTYPE::ReadDoubleArg(const std::string &name, + const char *flag, + const double &def_value, + const double &min_value, + const double &max_value, + double &value) +{ + bool result = false; + std::string str_value; + + // Is the user trying to set this flag? + if (cmd->FindString(flag, str_value, true)) { + // Can the user's value be parsed? + const double user_value = to_finite(str_value); + if (isfinite(user_value)) { + result = true; + + // Clamp the user's value if needed + value = clamp(user_value, min_value, max_value); + + // Inform them if we had to clamp their value + if (fabs(user_value - value) > + std::numeric_limits::epsilon()) + WriteOut(MSG_Get("PROGRAM_AUTOTYPE_CLAMP_VALUE"), name.c_str(), user_value, value); + } else { // Otherwise we couldn't parse their value + WriteOut(MSG_Get("PROGRAM_AUTOTYPE_INVALID_VALUE"), name.c_str(), str_value.c_str()); + } + } else { // Otherwise they haven't passed this flag + value = def_value; + result = true; + } + return result; +} + +void AUTOTYPE::Run() +{ + // Hack To allow long commandlines + ChangeToLongCmd(); + + // Usage + if (!cmd->GetCount()||(cmd->GetCount()==1 && (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)))) { + PrintUsage(); + return; + } + + // Print available keys + if (cmd->FindExist("-list", false) || cmd->FindExist("/list", false)) { + PrintKeys(); + return; + } + + // Get the wait delay in milliseconds + double wait_s; + constexpr double def_wait_s = 2.0; + constexpr double min_wait_s = 0.0; + constexpr double max_wait_s = 30.0; + if (!ReadDoubleArg("WAIT", "-w", def_wait_s, min_wait_s, max_wait_s, wait_s)) + return; + const auto wait_ms = static_cast(wait_s * 1000); + + // Get the inter-key pacing in milliseconds + double pace_s; + constexpr double def_pace_s = 0.5; + constexpr double min_pace_s = 0.0; + constexpr double max_pace_s = 10.0; + if (!ReadDoubleArg("PACE", "-p", def_pace_s, min_pace_s, max_pace_s, pace_s)) + return; + const auto pace_ms = static_cast(pace_s * 1000); + + // Get the button sequence + std::vector sequence; + cmd->FillVector(sequence); + if (sequence.empty()) { + WriteOut_NoParsing("AUTOTYPE: button sequence is empty\n"); + return; + } + MAPPER_AutoType(sequence, wait_ms, pace_ms, false); +} + +void AUTOTYPE_ProgramStart(Program **make) +{ + *make = new AUTOTYPE; +} +#endif + +#if !defined(OSFREE) +class ADDKEY : public Program { +public: + void Run(void) override; +private: + void PrintUsage() { + WriteOut(MSG_Get("PROGRAM_ADDKEY_HELP")); + } +}; + +void ADDKEY::Run() +{ + // Hack To allow long commandlines + ChangeToLongCmd(); + + // Usage + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + PrintUsage(); + return; + } + char *args=(char *)cmd->GetRawCmdline().c_str(); + args=trim(args); + DOS_Shell temp; + temp.CMD_ADDKEY(args); +} + +static void ADDKEY_ProgramStart(Program * * make) { + *make=new ADDKEY; +} +#endif + +#if !defined(OSFREE) +class LS : public Program { +public: + void Run(void) override; +}; + +void LS::Run() +{ + std::string tmp = ""; + cmd->GetStringRemain(tmp); + char args[CMD_MAXLINE]; + strcpy(args, tmp.c_str()); + DOS_Shell temp; + temp.CMD_LS(args); +} + +static void LS_ProgramStart(Program * * make) { + *make=new LS; +} +#endif + +#if !defined(OSFREE) +class CHOICE : public Program { +public: + void Run(void) override; +}; + +void CHOICE::Run() +{ + std::string tmp = ""; + cmd->GetStringRemain(tmp); + char args[CMD_MAXLINE]; + strcpy(args, tmp.c_str()); + DOS_Shell temp; + temp.CMD_CHOICE(args); + result_errorcode = dos.return_code; +} + +void CHOICE_ProgramStart(Program **make) +{ + *make = new CHOICE; +} +#endif + +#if !defined(OSFREE) +class COUNTRY : public Program { +public: + void Run(void) override; +}; + +void COUNTRY::Run() +{ + char *args=(char *)cmd->GetRawCmdline().c_str(); + args=trim(args); + DOS_Shell temp; + temp.CMD_COUNTRY(args); +} + +static void COUNTRY_ProgramStart(Program * * make) { + *make=new COUNTRY; +} +#endif + +#ifdef C_ICONV +# if !defined(OSFREE) +class UTF8 : public Program { +public: + void Run(void) override; +private: + void PrintUsage() { + WriteOut(MSG_Get("PROGRAM_UTF8_HELP")); + } +}; + +void UTF8::Run() +{ + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + PrintUsage(); + return; + } + if (usecon) { + WriteOut(MSG_Get("PROGRAM_UTF8_NO_TEXT")); + return; + } + // int cp=dos.loaded_codepage; /* unused */ + char target[11] = "CP437"; + if (dos.loaded_codepage==808) strcpy(target, "CP866"); + else if (dos.loaded_codepage==859) strcpy(target, "CP858"); + else if (dos.loaded_codepage==867) strcpy(target, "CP862"); + else if (dos.loaded_codepage==872) strcpy(target, "CP855"); + else if (dos.loaded_codepage==951 && !uao) strcpy(target, "BIG5HKSCS"); + else if (dos.loaded_codepage==951) strcpy(target, "CP950"); + else if (!(customcp && dos.loaded_codepage==customcp) && !(altcp && dos.loaded_codepage==altcp)) sprintf(target, "CP%d", dos.loaded_codepage); + _Iconv *x = _Iconv::create("UTF-8"); + _Iconv *fx = _Iconv::create(target); + if (x == NULL || fx == NULL) { + WriteOut(MSG_Get("PROGRAM_UTF8_INVALIDCP")); + return; + } + test_string dst; + std::string text=""; + char temp[4096]; + morelen=true; + bool first=true; + uint8_t c;uint16_t m=1; + while (true) { + DOS_ReadFile (STDIN,&c,&m); + if (m) text+=std::string(1, c); + if (m && first && text.size() == 2 && (((uint8_t)text[0] == 0xFE && (uint8_t)text[1] == 0xFF) || ((uint8_t)text[0] == 0xFF && (uint8_t)text[1] == 0xFE))) { + WriteOut(MSG_Get("PROGRAM_UTF8_NOT_UTF8")); + break; + } + if (m && first && text.size() == 3 && (uint8_t)text[0] == 0xEF && (uint8_t)text[1] == 0xBB && (uint8_t)text[2] == 0xBF) { + first=false; + text=""; + } else if (!m || c==0x1A || c==0xA || (text.size()>1 && (uint8_t)text[text.size()-2] == 0xD)) { + if (c!=0xA && text.size()>1 && (uint8_t)text[text.size()-2] == 0xD) text[text.size()-1] = 0xA; + if (CodePageHostToGuestUTF8(temp,text.c_str())) { + WriteOut_NoParsing(temp, true); + } else { + x->set_src(text.c_str()); + if ((customcp && dos.loaded_codepage==customcp) || (altcp && dos.loaded_codepage==altcp) || x->string_convert_dest(dst) < 0 || (text.size() && !fx->string_convert(dst).size())) { + WriteOut(MSG_Get("PROGRAM_UTF8_CONVERSION_ERROR")); + morelen=false; + return; + } else + WriteOut_NoParsing(fx->string_convert(dst).c_str(), true); + } + first=false; + text=""; + if (!m||c==0x1A) break; + else if (c!=0xA) text+=std::string(1, c); + } + } + x->finish(); + morelen=false; +} + +static void UTF8_ProgramStart(Program * * make) { + *make=new UTF8; +} +# endif + +# if !defined(OSFREE) +class UTF16 : public Program { +public: + void Run(void) override; +private: + void PrintUsage() { + WriteOut(MSG_Get("PROGRAM_UTF16_HELP")); + } +}; + +void UTF16::Run() +{ + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + PrintUsage(); + return; + } + if (usecon) { + WriteOut(MSG_Get("PROGRAM_UTF8_NO_TEXT")); + return; + } + char target[11] = "CP437"; + if (dos.loaded_codepage==808) strcpy(target, "CP866"); + else if (dos.loaded_codepage==859) strcpy(target, "CP858"); + else if (dos.loaded_codepage==867) strcpy(target, "CP862"); + else if (dos.loaded_codepage==872) strcpy(target, "CP855"); + else if (dos.loaded_codepage==951 && !uao) strcpy(target, "BIG5HKSCS"); + else if (dos.loaded_codepage==951) strcpy(target, "CP950"); + else if (!(customcp && dos.loaded_codepage==customcp) && !(altcp && dos.loaded_codepage==altcp)) sprintf(target, "CP%d", dos.loaded_codepage); + uint8_t buf[3];uint16_t m=2; + DOS_ReadFile (STDIN,buf,&m); + if (m<2) { + if (m==1) WriteOut(MSG_Get("PROGRAM_UTF8_CONVERSION_ERROR")); + return; + } + bool le=true; + if (cmd->FindExist("-BE", false) || cmd->FindExist("/BE", false)) + le=false; + else if (cmd->FindExist("-LE", false) || cmd->FindExist("/LE", false)) + le=true; + else if (buf[0] == 0xFE && buf[1]== 0xFF) + le=false; + else if (buf[0] == 0xFF && buf[1]== 0xFE) + le=true; +#if defined(MACOSX) + else + le=false; +#endif + _Iconv *x = _Iconv::create(target); + if (x == NULL) { + WriteOut(MSG_Get("PROGRAM_UTF8_INVALIDCP")); + return; + } + test_char dst; + test_char_t *wch; + test_char_t ch = 0; + std::wstring text=L""; + char temp[4096]; + unsigned int c=0; + morelen=true; + bool first=true; + while (true) { + if (!first || (buf[0] == 0xFE && buf[1]== 0xFF) || (buf[0] == 0xFF && buf[1]== 0xFE)) DOS_ReadFile (STDIN,buf,&m); + first=false; + if (m==1) { + WriteOut(MSG_Get("PROGRAM_UTF8_CONVERSION_ERROR")); + break; + } else if (m==2) { + ch=buf[le?1:0]*0x100+buf[le?0:1]; + text+=ch; + c++; + } + if (!m || ch==0x1A || ch==0xA || (c>1 && text[c-2] == 0xD)) { + if (ch!=0xA && c>1 && text[c-2] == 0xD) {text[c-1] = 0xA;} + wch=new test_char_t[c+1]; + for (unsigned int i=0; iset_src(wch); + if ((customcp && dos.loaded_codepage==customcp) || (altcp && dos.loaded_codepage==altcp) || x->string_convert_dest(dst) < 0 || (c && !dst.size())) { + WriteOut(MSG_Get("PROGRAM_UTF8_CONVERSION_ERROR")); + delete[] wch; + morelen=false; + return; + } else + WriteOut_NoParsing(dst.c_str(), true); + } + delete[] wch; + text=L""; + c=0; + if (!m||ch==0x1A) break; + else if (ch!=0xA) {text+=ch;c++;} + } + } + x->finish(); + morelen=false; +} + +static void UTF16_ProgramStart(Program * * make) { + *make=new UTF16; +} +# endif +#endif + +#if !defined(OSFREE) +class VTEXT : public Program { +public: + void Run(void) override; +private: + void PrintUsage() { + WriteOut(MSG_Get("PROGRAM_VTEXT_HELP")); + } +}; + +void VTEXT::Run() +{ + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + PrintUsage(); + return; + } + std::string tmp = ""; + cmd->GetStringRemain(tmp); + char args[CMD_MAXLINE]; + strcpy(args, tmp.c_str()); + DOS_Shell temp; + temp.CMD_VTEXT(args); +} + +static void VTEXT_ProgramStart(Program * * make) { + *make=new VTEXT; +} +#endif + +#if !defined(OSFREE) +class DCGA : public Program { +public: + void Run(void) override; +}; + +void DCGA::Run() +{ + uint16_t oldax=reg_ax; + reg_ax = 0x74; + CALLBACK_RunRealInt(0x10); + reg_ax = oldax; +} + +static void DCGA_ProgramStart(Program * * make) { + *make=new DCGA; +} +#endif + +#if !defined(OSFREE) +class TEXT80X25 : public Program { +public: + void Run(void) override; +}; + +void TEXT80X25::Run() +{ + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_SET80x25")); + return; + } + clear_screen(); + setlines("line_80x25"); + show_prompt(); +} + +static void TEXT80X25_ProgramStart(Program * * make) { + *make=new TEXT80X25; +} +#endif + +#if !defined(OSFREE) +class TEXT80X43 : public Program { +public: + void Run(void) override; +}; + +void TEXT80X43::Run() +{ + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_SET80x43")); + return; + } + clear_screen(); + setlines("line_80x43"); + show_prompt(); +} + +static void TEXT80X43_ProgramStart(Program * * make) { + *make=new TEXT80X43; +} +#endif + +#if !defined(OSFREE) +class TEXT80X50 : public Program { +public: + void Run(void) override; +}; + +void TEXT80X50::Run() +{ + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_SET80x50")); + return; + } + clear_screen(); + setlines("line_80x50"); + show_prompt(); +} + +static void TEXT80X50_ProgramStart(Program * * make) { + *make=new TEXT80X50; +} +#endif + +#if !defined(OSFREE) +class TEXT80X60 : public Program { +public: + void Run(void) override; +}; + +void TEXT80X60::Run() +{ + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_SET80x60")); + return; + } + clear_screen(); + setlines("line_80x60"); + show_prompt(); +} + +static void TEXT80X60_ProgramStart(Program * * make) { + *make=new TEXT80X60; +} +#endif + +#if !defined(OSFREE) +class TEXT132X25 : public Program { +public: + void Run(void) override; +}; + +void TEXT132X25::Run() +{ + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_SET132x25")); + return; + } + clear_screen(); + setlines("line_132x25"); + show_prompt(); +} + +static void TEXT132X25_ProgramStart(Program * * make) { + *make=new TEXT132X25; +} +#endif + +#if !defined(OSFREE) +class TEXT132X43 : public Program { +public: + void Run(void) override; +}; + +void TEXT132X43::Run() +{ + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_SET132x43")); + return; + } + clear_screen(); + setlines("line_132x43"); + show_prompt(); +} + +static void TEXT132X43_ProgramStart(Program * * make) { + *make=new TEXT132X43; +} +#endif + +#if !defined(OSFREE) +class TEXT132X50 : public Program { +public: + void Run(void) override; +}; + +void TEXT132X50::Run() +{ + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_SET132x50")); + return; + } + clear_screen(); + setlines("line_132x50"); + show_prompt(); +} + +static void TEXT132X50_ProgramStart(Program * * make) { + *make=new TEXT132X50; +} +#endif + +#if !defined(OSFREE) +class TEXT132X60 : public Program { +public: + void Run(void) override; +}; + +void TEXT132X60::Run() +{ + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + WriteOut(MSG_Get("PROGRAM_SET132x60")); + return; + } + clear_screen(); + setlines("line_132x60"); + show_prompt(); +} + +static void TEXT132X60_ProgramStart(Program * * make) { + *make=new TEXT132X60; +} +#endif + +#if !defined(OSFREE) +class HELP : public Program { +public: + void Run(void) override; +}; + +void HELP::Run() +{ + std::string tmp = ""; + cmd->GetStringRemain(tmp); + char args[CMD_MAXLINE]; + strcpy(args, tmp.c_str()); + DOS_Shell temp; + temp.CMD_HELP(args); +} + +static void HELP_ProgramStart(Program * * make) { + *make=new HELP; +} +#endif + +#if !defined(OSFREE) +class DELTREE : public Program { +public: + void Run(void) override; +private: + void PrintUsage() { + WriteOut(MSG_Get("PROGRAM_DELTREE_HELP")); + } +}; + +void DELTREE::Run() +{ + // Hack To allow long commandlines + ChangeToLongCmd(); + + // Usage + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + PrintUsage(); + return; + } + char *args=(char *)cmd->GetRawCmdline().c_str(); + args=trim(args); + DOS_Shell temp; + temp.CMD_DELTREE(args); +} + +static void DELTREE_ProgramStart(Program * * make) { + *make=new DELTREE; +} +#endif + +#if !defined(OSFREE) +class TREE : public Program { +public: + void Run(void) override; +private: + void PrintUsage() { + WriteOut(MSG_Get("PROGRAM_TREE_HELP")); + } +}; + +void TREE::Run() +{ + // Hack To allow long commandlines + ChangeToLongCmd(); + + // Usage + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + PrintUsage(); + return; + } + char *args=(char *)cmd->GetRawCmdline().c_str(); + args=trim(args); + DOS_Shell temp; + temp.CMD_TREE(args); +} + +static void TREE_ProgramStart(Program * * make) { + *make=new TREE; +} +#endif + +#if !defined(OSFREE) +class TITLE : public Program { +public: + void Run(void) override; +private: + void PrintUsage() { + WriteOut(MSG_Get("PROGRAM_TITLE_HELP")); + } +}; + +bool CodePageGuestToHostUTF8(char *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*/); + +void TITLE::Run() +{ + // Hack To allow long commandlines + ChangeToLongCmd(); + + // Usage + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + PrintUsage(); + return; + } + char *args=trim((char *)cmd->GetRawCmdline().c_str()); + char title[4096]; + if(CodePageGuestToHostUTF8(title, args)) { + dosbox_title=title; + } else { + dosbox_title=args; + } + SetVal("dosbox", "title", dosbox_title); + GFX_SetTitle(-1,-1,-1,false); +} + +static void TITLE_ProgramStart(Program * * make) { + *make=new TITLE; +} +#endif + +#if !defined(OSFREE) +class VHDMAKE : public Program { +public: + void Run(void) override; +private: + const char* vhdTypes[5] = { "", "", "Fixed", "Dynamic", "Differencing" }; + uint64_t ssizetou64(const char* s_size); + void PrintUsage() { + const char* msg = MSG_Get("PROGRAM_VHDMAKE_HELP"); + WriteOut(msg); + } +}; + +// Converts a string disk size with unit into a 64-bit unsigned integer +uint64_t VHDMAKE::ssizetou64(const char* s_size) { + const char* sizes = "BKMGT"; + char* sd_size = _strdup(s_size); + char* last = sd_size + strlen(s_size) - 1; + char* c; + uint64_t size; + + if((c = strchr((char*)sizes, toupper(*last)))) { + *last = 0; + size = atoll(sd_size); + size <<= ((c - sizes) * 10); + } + else { + size = atoll(sd_size); + } + free(sd_size); + return size; +} + +void VHDMAKE::Run() +{ + bool bOverwrite = false; + // bool bExists = false; /* unused */ + uint32_t ret; + char basename[256], filename[256]; + + // Hack To allow long commandlines + ChangeToLongCmd(); + + // Usage + if(cmd->FindExist("-?", false) || cmd->FindExist("/?", false) || cmd->GetCount() < 2) { + PrintUsage(); + return; + } + + if(cmd->FindExist("-f", true) || cmd->FindExist("-force", true)) + bOverwrite = true; + + if(cmd->FindExist("-i", true) || cmd->FindExist("-info", true)) { + if(cmd->GetCount() > 1) { + PrintUsage(); + return; + } + cmd->FindCommand(1, temp_line); + safe_strcpy(filename, temp_line.c_str()); // image to query + + imageDiskVHD::VHDInfo* info = NULL; + if(imageDiskVHD::GetInfo(filename, &info)) { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_NOINFO"), filename); + return; + } + WriteOut(MSG_Get("PROGRAM_VHDMAKE_INFO"), filename, vhdTypes[(int)info->vhdType], info->vhdSizeMB); + if(info->vhdType != imageDiskVHD::VHD_TYPE_FIXED) + WriteOut(MSG_Get("PROGRAM_VHDMAKE_BLOCKSTATS"), info->allocatedBlocks, info->totalBlocks); + else + WriteOut(".\n"); + if(info->parentInfo != NULL) { + uint32_t index = 0; + imageDiskVHD::VHDInfo* p = info->parentInfo; + while(p != NULL) { + index++; + for(uint32_t i = 0; i < index; i++) WriteOut(" "); + WriteOut("child of \"%s\" (%s)", p->diskname.c_str(), vhdTypes[(int)p->vhdType]); + if (p->vhdType != imageDiskVHD::VHD_TYPE_FIXED) + WriteOut(MSG_Get("PROGRAM_VHDMAKE_BLOCKSTATS"), p->allocatedBlocks, p->totalBlocks); + else + WriteOut(".\n"); + p = p->parentInfo; + } + } + delete info; + return; + } + + if(cmd->FindExist("-m", true) || cmd->FindExist("-merge", true)) { + if(cmd->GetCount() > 1) { + PrintUsage(); + return; + } + cmd->FindCommand(1, temp_line); + safe_strcpy(basename, temp_line.c_str()); + imageDiskVHD* vhd; + if(imageDiskVHD::Open(basename, true, (imageDisk**)&vhd) != imageDiskVHD::OPEN_SUCCESS) { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_ERROPEN"), basename); + return; + } + if(vhd->vhdType != imageDiskVHD::VHD_TYPE_DIFFERENCING) { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_CANTMERGE"), basename); + delete vhd; + return; + } + imageDiskVHD::VHDInfo* info = new imageDiskVHD::VHDInfo; + if(vhd->GetInfo(info)) { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_NOINFO"), basename); + return; + } + uint32_t totalSectorsMerged, totalBlocksUpdated; + std::string parentName = info->parentInfo->diskname; + if(vhd->MergeSnapshot(&totalSectorsMerged, &totalBlocksUpdated)) { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_MERGEREPORT"), totalSectorsMerged, totalBlocksUpdated, basename, parentName.c_str()); + delete vhd; + if(remove(basename)) + WriteOut(MSG_Get("PROGRAM_VHDMAKE_MERGENODELETE"), basename); + else + WriteOut(MSG_Get("PROGRAM_VHDMAKE_MERGEOKDELETE")); + } + else { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_MERGEFAILED")); + if(totalSectorsMerged) + WriteOut(MSG_Get("PROGRAM_VHDMAKE_MERGEWARNCORRUPTION"), parentName.c_str()); + else + WriteOut("\n"); + } + delete info; + return; + } + + if(cmd->FindExist("-c", true) || cmd->FindExist("-convert", true)) { + if(cmd->GetCount() != 2) { + PrintUsage(); + return; + } + cmd->FindCommand(1, temp_line); + safe_strcpy(filename, temp_line.c_str()); // image to convert + FILE* f; + if(!(f = fopen(filename, "r"))) { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_ERROPEN"), filename); + return; + } + fclose(f); + cmd->FindCommand(2, temp_line); + safe_strcpy(basename, temp_line.c_str()); // resulting VHD (after renaming) + if(_access(basename, 0) == 0) { + if(!bOverwrite) { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_FNEEDED")); + return; + } + if(remove(basename)) { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_REMOVEERR"), basename); + } + } + ret = imageDiskVHD::ConvertFixed(filename); + if(ret == imageDiskVHD::OPEN_SUCCESS) { + if (rename(filename, basename)) + WriteOut(MSG_Get("PROGRAM_VHDMAKE_RENAME")); + } + } + else if(cmd->FindExist("-l", true) || cmd->FindExist("-link", true)) { + if(cmd->GetCount() > 2) { + PrintUsage(); + return; + } + cmd->FindCommand(1, temp_line); + safe_strcpy(basename, temp_line.c_str()); + cmd->FindCommand(2, temp_line); + safe_strcpy(filename, temp_line.c_str()); + if(basename[1] == ':' || basename[0] == '/') + WriteOut(MSG_Get("PROGRAM_VHDMAKE_ABSPATH")); + if(! bOverwrite && _access(filename, 0) == 0) { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_FNEEDED")); + return; + } + ret = imageDiskVHD::CreateDifferencing(filename, basename); + } + else { + if(cmd->GetCount() > 2) { + PrintUsage(); + return; + } + char size[16]; + cmd->FindCommand(1, temp_line); + safe_strcpy(filename, temp_line.c_str()); + cmd->FindCommand(2, temp_line); + safe_strcpy(size, temp_line.c_str()); + uint64_t vhd_size = ssizetou64(size); + if(!vhd_size || vhd_size < 3145728 || vhd_size > 2190433320960) { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_BADSIZE")); + return; + } + if(!bOverwrite && _access(filename, 0) == 0) { + WriteOut(MSG_Get("PROGRAM_VHDMAKE_FNEEDED")); + return; + } + ret = imageDiskVHD::CreateDynamic(filename, vhd_size); + } + + switch(ret) { + case imageDiskVHD::UNSUPPORTED_SIZE: + WriteOut(MSG_Get("PROGRAM_VHDMAKE_BADSIZE")); + break; + case imageDiskVHD::ERROR_OPENING: + WriteOut(MSG_Get("PROGRAM_VHDMAKE_ERROPEN"), filename); + break; + case imageDiskVHD::ERROR_OPENING_PARENT: + WriteOut(MSG_Get("PROGRAM_VHDMAKE_BADPARENT"), filename); + break; + case imageDiskVHD::ERROR_WRITING: + WriteOut(MSG_Get("PROGRAM_VHDMAKE_WRITERR"), filename); + break; + case imageDiskVHD::OPEN_SUCCESS: + WriteOut(MSG_Get("PROGRAM_VHDMAKE_SUCCESS")); + break; + } +} + + +static void VHDMAKE_ProgramStart(Program * * make) { + *make=new VHDMAKE; +} +#endif + +static int8_t hexToInt(char hex) { + if (hex >= '0' && hex <= '9') return hex - '0'; + if (hex >= 'A' && hex <= 'F') return hex - 'A' + 10; + if (hex >= 'a' && hex <= 'f') return hex - 'a' + 10; + return -1; // error +} + +#if !defined(OSFREE) +class COLORPGM : public Program { +public: + void Run(void) override; +private: + void PrintUsage() { + WriteOut(MSG_Get("PROGRAM_COLOR_HELP")); + } +}; + +void COLORPGM::Run() +{ + // Hack To allow long commandlines + ChangeToLongCmd(); + + // Usage + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + PrintUsage(); + return; + } + bool back=false; + char fg, bg; + int fgc=0, bgc=0; + char *args=(char *)cmd->GetRawCmdline().c_str(); + args=trim(args); + if (strlen(args)==2) { + bg=args[0]; + fg=args[1]; + if (fg == bg) { + back=true; + dos.return_code = 1; // foreground and background color is same + } + else { + if (fg=='0'||fg=='8') + fgc=30; + else if (fg=='1'||fg=='9') + fgc=34; + else if (fg=='2'||tolower(fg)=='a') + fgc=32; + else if (fg=='3'||tolower(fg)=='b') + fgc=36; + else if (fg=='4'||tolower(fg)=='c') + fgc=31; + else if (fg=='5'||tolower(fg)=='d') + fgc=35; + else if (fg=='6'||tolower(fg)=='e') + fgc=33; + else if (fg=='7'||tolower(fg)=='f') + fgc=37; + else + back=true; + if (bg=='0'||bg=='8') + bgc=40; + else if (bg=='1'||bg=='9') + bgc=44; + else if (bg=='2'||tolower(bg)=='a') + bgc=42; + else if (bg=='3'||tolower(bg)=='b') + bgc=46; + else if (bg=='4'||tolower(bg)=='c') + bgc=41; + else if (bg=='5'||tolower(bg)=='d') + bgc=45; + else if (bg=='6'||tolower(bg)=='e') + bgc=43; + else if (bg=='7'||tolower(bg)=='f') + bgc=47; + else + back=true; + } + } + else if(strlen(args)==1){ // Set background color to 0 if only one color is specified + fg=args[0]; + bg='0'; + bgc=40; + if (fg == '0') { + back=true; + dos.return_code = 1; // foreground and background color is same + } + else { + if(fg=='8') + fgc=30; + else if (fg=='1'||fg=='9') + fgc=34; + else if (fg=='2'||tolower(fg)=='a') + fgc=32; + else if (fg=='3'||tolower(fg)=='b') + fgc=36; + else if (fg=='4'||tolower(fg)=='c') + fgc=31; + else if (fg=='5'||tolower(fg)=='d') + fgc=35; + else if (fg=='6'||tolower(fg)=='e') + fgc=33; + else if (fg=='7'||tolower(fg)=='f') + fgc=37; + else + back=true; + } + } + else if (strlen(args)==0){ // default is white character on black background + bg='0'; + bgc=40; + fg='7'; + fgc=37; + } + else + back=true; + if (!back) { + bool fgl=fg>='0'&&fg<='7', bgl=bg>='0'&&bg<='7'; + WriteOut(("\033["+std::string(fgl||bgl?"0;":"")+std::string(fgl?"":"1;")+std::string(bgl?"":"5;")+std::to_string(fgc)+";"+std::to_string(bgc)+"m").c_str()); + uint8_t page = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE); + BIOS_NCOLS; BIOS_NROWS; + uint8_t attr = hexToInt(bg) << 4 | hexToInt(fg); + for(uint32_t i=0; i < nrows; i++){ + for(uint32_t j=0; j 255) + return false; + } + } else if (sscanf(nextRGB, " #%6x", (unsigned int*)(&rgbVal[3])) == 1) { + if (rgbVal[3] < 0 || rgbVal[3] > 0xFFFFFF) + return false; + for (int i = 2; i >= 0; i--) { + rgbVal[i] = rgbVal[3]&255; + rgbVal[3] >>= 8; + } + } else + return false; + IO_ReadB(mem_readw(BIOS_VIDEO_PORT)+6); + IO_WriteB(VGAREG_ACTL_ADDRESS, j+32); + uint8_t imap=IO_ReadB(VGAREG_ACTL_READ_DATA); + IO_WriteB(VGAREG_DAC_WRITE_ADDRESS, imap); + IO_WriteB(VGAREG_DAC_DATA, rgbVal[0] >> 2); + IO_WriteB(VGAREG_DAC_DATA, rgbVal[1] >> 2); + IO_WriteB(VGAREG_DAC_DATA, rgbVal[2] >> 2); + rgbcolors[j].red = rgbVal[0] & 0xFF; + rgbcolors[j].green = rgbVal[1] & 0xFF; + rgbcolors[j].blue = rgbVal[2] & 0xFF; + altBGR0[j].red = rgbVal[0]; + altBGR0[j].green = rgbVal[1]; + altBGR0[j].blue = rgbVal[2]; + return true; +} + +#if defined(USE_TTF) +extern alt_rgb altBGR1[16]; +extern bool colorChanged; +bool setColors(const char *colorArray, int n); +void resetFontSize(); +#endif + +#if !defined(OSFREE) +bool get_pal = false; +class SETCOLOR : public Program { +public: + void Run(void) override; +private: + void PrintUsage() { + WriteOut(MSG_Get("PROGRAM_SETCOLOR_HELP")); + } +}; + +void SETCOLOR::Run() +{ + // Hack To allow long commandlines + ChangeToLongCmd(); + + if (!get_pal){ + for (uint8_t i=0; i<16; i++){ + altBGR0[i].red = rgbcolors[i].red; + altBGR0[i].green = rgbcolors[i].green; + altBGR0[i].blue = rgbcolors[i].blue; +#ifdef USE_TTF + altBGR1[i].red = rgbcolors[i].red; + altBGR1[i].green = rgbcolors[i].green; + altBGR1[i].blue = rgbcolors[i].blue; +#endif + get_pal = true; + } + } + + // Usage + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + PrintUsage(); + return; + } + char *args=(char *)cmd->GetRawCmdline().c_str(); + if (*args) { + args=trim(args); + char *p = strchr(args, ' '); + if (p!=NULL) + *p=0; + int i=atoi(args); + if (!strcasecmp(args,"MONO")) { + if (p==NULL) + WriteOut(MSG_Get("PROGRAM_SETCOLOR_STATUS"),CurMode->mode==7? MSG_Get("PROGRAM_SETCOLOR_ACTIVE"):CurMode->mode==3? MSG_Get("PROGRAM_SETCOLOR_INACTIVE"): MSG_Get("PROGRAM_SETCOLOR_UNAVAILABLE"),CurMode->mode); + else if (!strcmp(trim(p+1),"+")) { + if (CurMode->mode!=7) INT10_SetVideoMode(7); + WriteOut(CurMode->mode==7? MSG_Get("PROGRAM_SETCOLOR_MONO_MODE7"): MSG_Get("PROGRAM_SETCOLOR_MONO_FAIL")); + } else if (!strcmp(trim(p+1),"-")) { + if (CurMode->mode!=3) INT10_SetVideoMode(3); + WriteOut(CurMode->mode==3? MSG_Get("PROGRAM_SETCOLOR_MONO_MODE3"):MSG_Get("PROGRAM_SETCOLOR_MONO_FAIL")); + } else + WriteOut(MSG_Get("PROGRAM_SETCOLOR_MONO_SYNTAX"),trim(p+1)); + } else if (!strcmp(args,"0")||!strcmp(args,"00")||!strcmp(args,"+0")||!strcmp(args,"-0")||(i>0&&i<16)) { + if (p==NULL) { +#if defined(USE_TTF) + bool colornul = staycolors || (IS_VGA_ARCH && (altBGR1[i].red > 4 || altBGR1[i].green > 4 || altBGR1[i].blue > 4) && rgbcolors[i].red < 5 && rgbcolors[i].green < 5 && rgbcolors[i].blue < 5); + altBGR[i].red = colornul||(colorChanged&&!IS_VGA_ARCH)?altBGR1[i].red:rgbcolors[i].red; + altBGR[i].green = colornul||(colorChanged&&!IS_VGA_ARCH)?altBGR1[i].green:rgbcolors[i].green; + altBGR[i].blue = colornul||(colorChanged&&!IS_VGA_ARCH)?altBGR1[i].blue:rgbcolors[i].blue; + WriteOut(MSG_Get("PROGRAM_SETCOLOR_COLOR"),i,altBGR0[i].red,altBGR0[i].green,altBGR0[i].blue,altBGR0[i].red,altBGR0[i].green,altBGR0[i].blue); +#else + WriteOut(MSG_Get("PROGRAM_SETCOLOR_COLOR"),i,rgbcolors[i].red,rgbcolors[i].green,rgbcolors[i].blue,rgbcolors[i].red,rgbcolors[i].green,rgbcolors[i].blue); +#endif + } + } else { + WriteOut(MSG_Get("PROGRAM_SETCOLOR_INVALID_NUMBER"), trim(args)); + DOS_SetError(DOSERR_DATA_INVALID); + return; + } if (p!=NULL&&strcasecmp(args,"MONO")) { + char value[128]; + if (!strcmp(trim(p+1),"-")) { + strcpy(value,i==0?"#000000":i==1?"#0000aa":i==2?"#00aa00":i==3?"#00aaaa":i==4?"#aa0000":i==5?"#aa00aa":i==6?"#aa5500":i==7?"#aaaaaa":i==8?"#555555":i==9?"#5555ff":i==10?"#55ff55":i==11?"#55ffff":i==12?"#ff5555":i==13?"#ff55ff":i==14?"#ffff55":"#ffffff"); + } else if (!strcmp(trim(p+1),"+")) { + Section_prop * ttf_section=static_cast(control->GetSection("ttf")); + const char * colors = ttf_section->Get_string("colors"); + const char * nextRGB = *colors ? (colors + (*colors == '+'?1:0)) : "#000000 #0000aa #00aa00 #00aaaa #aa0000 #aa00aa #aa5500 #aaaaaa #555555 #5555ff #55ff55 #55ffff #ff5555 #ff55ff #ffff55 #ffffff"; + int rgbVal[3] = {-1,-1,-1}; + for (int colNo = 0; colNo <= i; colNo++) { + if (sscanf(nextRGB, " ( %d , %d , %d)", &rgbVal[0], &rgbVal[1], &rgbVal[2]) == 3) { + sprintf(value,"(%d,%d,%d)",rgbVal[0],rgbVal[1],rgbVal[2]); + while (*nextRGB != ')') + nextRGB++; + nextRGB++; + } else if (sscanf(nextRGB, " #%6x", (unsigned int*)(&rgbVal[0])) == 1) { + sprintf(value,"#%6x",rgbVal[0]); + nextRGB = strchr(nextRGB, '#') + 7; + } else { + WriteOut(MSG_Get("PROGRAM_SETCOLOR_INVALID_VALUE"),nextRGB); + return; + } + } + } else { + strncpy(value,trim(p+1),127); + value[127]=0; + } +#if defined(USE_TTF) + if (!ttf.inUse) { +#endif + if (!IS_VGA_ARCH) + WriteOut(MSG_Get("PROGRAM_SETCOLOR_NOT_SUPPORTED")); + else if (setVGAColor(value, i)) + //WriteOut("Color %d: (%d,%d,%d) or #%02x%02x%02x\n",i,rgbcolors[i].red,rgbcolors[i].green,rgbcolors[i].blue,rgbcolors[i].red,rgbcolors[i].green,rgbcolors[i].blue); + WriteOut(MSG_Get("PROGRAM_SETCOLOR_COLOR"),i,altBGR0[i].red,altBGR0[i].green,altBGR0[i].blue,altBGR0[i].red,altBGR0[i].green,altBGR0[i].blue); + else + WriteOut(MSG_Get("PROGRAM_SETCOLOR_INVALID_VALUE"),value); +#if defined(USE_TTF) + } else if (setColors(value,i)) { + bool colornul = staycolors || (IS_VGA_ARCH && (altBGR1[i].red > 4 || altBGR1[i].green > 4 || altBGR1[i].blue > 4) && rgbcolors[i].red < 5 && rgbcolors[i].green < 5 && rgbcolors[i].blue < 5); + altBGR[i].red = (colornul||(colorChanged&&!IS_VGA_ARCH))?altBGR1[i].red:rgbcolors[i].red; + altBGR[i].green = (colornul||(colorChanged&&!IS_VGA_ARCH))?altBGR1[i].green:rgbcolors[i].green; + altBGR[i].blue = (colornul||(colorChanged&&!IS_VGA_ARCH))?altBGR1[i].blue:rgbcolors[i].blue; + WriteOut(MSG_Get("PROGRAM_SETCOLOR_COLOR"),i,altBGR[i].red,altBGR[i].green,altBGR[i].blue,altBGR[i].red,altBGR[i].green,altBGR[i].blue); + resetFontSize(); + } else + WriteOut(MSG_Get("PROGRAM_SETCOLOR_INVALID_VALUE"),value); +#endif + } + } else { + WriteOut(MSG_Get("PROGRAM_SETCOLOR_STATUS"), CurMode->mode == 7 ? MSG_Get("PROGRAM_SETCOLOR_ACTIVE") : CurMode->mode == 3 ? MSG_Get("PROGRAM_SETCOLOR_INACTIVE") : MSG_Get("PROGRAM_SETCOLOR_UNAVAILABLE"), CurMode->mode); + for (int i = 0; i < 16; i++) { +#if defined(USE_TTF) + bool colornul = staycolors || (IS_VGA_ARCH && (altBGR1[i].red > 4 || altBGR1[i].green > 4 || altBGR1[i].blue > 4) && rgbcolors[i].red < 5 && rgbcolors[i].green < 5 && rgbcolors[i].blue < 5); + altBGR[i].red = colornul||(colorChanged&&!IS_VGA_ARCH)?altBGR1[i].red:rgbcolors[i].red; + altBGR[i].green = colornul||(colorChanged&&!IS_VGA_ARCH)?altBGR1[i].green:rgbcolors[i].green; + altBGR[i].blue = colornul||(colorChanged&&!IS_VGA_ARCH)?altBGR1[i].blue:rgbcolors[i].blue; + WriteOut(MSG_Get("PROGRAM_SETCOLOR_COLOR"),i,altBGR[i].red,altBGR[i].green,altBGR[i].blue,altBGR[i].red,altBGR[i].green,altBGR[i].blue); +#else + WriteOut(MSG_Get("PROGRAM_SETCOLOR_COLOR"),i,rgbcolors[i].red,rgbcolors[i].green,rgbcolors[i].blue,rgbcolors[i].red,rgbcolors[i].green,rgbcolors[i].blue); +#endif + } + } +} + +static void SETCOLOR_ProgramStart(Program * * make) { + *make=new SETCOLOR; +} +#endif + +#if C_DEBUG +# if !defined(OSFREE) +extern Bitu int2fdbg_hook_callback; +class INT2FDBG : public Program { + public: + void Run(void) override; + private: + void PrintUsage() { + WriteOut(MSG_Get("PROGRAM_INT2FDBG_HELP")); + } +}; + +void INT2FDBG::Run() +{ + // Hack To allow long commandlines + ChangeToLongCmd(); + + if (!cmd->GetCount()) { + if (int2fdbg_hook_callback == 0) + WriteOut(MSG_Get("PROGRAM_INT2FDBG_NOT_SET")); + else + WriteOut(MSG_Get("PROGRAM_INT2FDBG_ALREADY")); + return; + } + + // Usage + if (!cmd->GetCount() || cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + PrintUsage(); + return; + } + char *args=(char *)cmd->GetRawCmdline().c_str(); + args=trim(args); + DOS_Shell temp; + temp.CMD_INT2FDBG(args); +} + +static void INT2FDBG_ProgramStart(Program * * make) { + *make=new INT2FDBG; +} +# endif +#endif + +#if defined (WIN32) +extern bool ctrlbrk; +extern std::string startincon; +#endif +#if defined (WIN32) && !defined(HX_DOS) +#include +#include +SHELLEXECUTEINFO lpExecInfo; + +void EndStartProcess() { + if(lpExecInfo.hProcess!=NULL) { + DWORD exitCode; + GetExitCodeProcess(lpExecInfo.hProcess, &exitCode); + if (exitCode==STILL_ACTIVE) + TerminateProcess(lpExecInfo.hProcess, 0); + } + ctrlbrk=false; +} +#endif + +// void zipSetCurrentTime(zip_fileinfo &zi); +// int zipOutOpenFile(zipFile zf,const char *zfname,zip_fileinfo &zi,const bool compress); + +const char * TranslateHostPath(const char * arg, bool next = false); +#if !defined(OSFREE) +class START : public Program { +public: + void Run() override { + if(control->SecureMode()) { + WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW")); + return; + } + + // Hack To allow long commandlines + ChangeToLongCmd(); + + // Usage + if (!cmd->GetCount()||(cmd->GetCount()==1 && (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)))) { + PrintUsage(); + return; + } + char *args=(char *)cmd->GetRawCmdline().c_str(); + args=trim(args); + char *cmd = strlen(args)?args:NULL; + if (cmd!=NULL&&strlen(cmd)>1&&cmd[0]=='"'&&cmd[1]==' ') { + cmd++; + while (cmd[0]==' ') cmd++; + cmd--; + cmd[0]='"'; + } +#if defined(WIN32) && !defined(HX_DOS) + char *cmdstr = cmd==NULL?NULL:(char *)strstr(cmd, cmd[0]=='"'?"\" ":" "); + char buf[CROSS_LEN], dir[CROSS_LEN+15], str[CROSS_LEN*2]; + int k=0; + if (cmdstr!=NULL) { + if (*cmdstr=='\"') cmdstr++; + while (*cmdstr==' ') {k++;*cmdstr++=0;} + } + int state = cmd==NULL?0:!strcmp(cmd,"-")||!strcasecmp(cmd,"/min")||!strcasecmp(cmd,"-min")?1:!strcmp(cmd,"+")||!strcasecmp(cmd,"/max")||!strcasecmp(cmd,"-max")?2:!strcasecmp(cmd,"_")||!strcasecmp(cmd,"/hid")||!strcasecmp(cmd,"-hid")?3:0; + if (state > 0) { + k=0; + cmd = cmdstr; + if (cmd!=NULL&&strlen(cmd)>1&&cmd[0]=='"'&&cmd[1]==' ') { + cmd++; + while (cmd[0]==' ') cmd++; + cmd--; + cmd[0]='"'; + } + if ((cmdstr = cmd==NULL?NULL:(char *)strstr(cmd, cmd[0]=='"'?"\" ":" "))!=NULL) { + if (*cmdstr=='\"') cmdstr++; + while (*cmdstr==' ') {k++;*cmdstr++=0;} + } + } + if (cmd!=NULL) { + char *ret, *ret0, *ret1, *ret2, *ret3, *ret4; + ret0 = strchr(cmd, '/'); + ret1 = strchr(cmd, '|'); + ret2 = strchr(cmd, '<'); + ret3 = strchr(cmd, '>'); + ret4 = strchr(cmd, ' '); + ret = ret0>cmd?ret0:NULL; + if (ret1!=NULL && (ret == NULL || ret1cmd&&*(ret-1)==':')) { + strcpy(buf, cmdstr==NULL?"":cmdstr); + strcpy(str, ret); + if (k<1) k=1; + for (int i=0; i0&&cmdstr[strlen(cmdstr)-2]=='"') { + cmd++; + cmdstr[strlen(cmdstr)-2]='\0'; + } + } + } + if (cmd==NULL || !strlen(cmd) || !strcmp(cmd,"?") || !strcmp(cmd,"/") || !strcmp(cmd,"/?") || !strcmp(cmd,"-?")) { + PrintUsage(); + DOS_SetError(0); + return; + } + int sw = state==0?SW_SHOW:state==1?SW_MINIMIZE:state==2?SW_MAXIMIZE:SW_HIDE; + bool match=false; + std::istringstream in(startincon); + if (in) for (std::string command; in >> command; ) { + if (!strcasecmp(cmd,command.c_str())||!strcasecmp(cmd,("\""+command+"\"").c_str())) { + match=true; + break; + } + } + lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); + lpExecInfo.fMask=SEE_MASK_DOENVSUBST|SEE_MASK_NOCLOSEPROCESS; + lpExecInfo.hwnd = NULL; + lpExecInfo.lpVerb = "open"; + lpExecInfo.lpDirectory = NULL; + lpExecInfo.nShow = sw; + lpExecInfo.hInstApp = (HINSTANCE) SE_ERR_DDEFAIL; + if (match) { + strcpy(dir, strcasecmp(cmd,"for")?"/C \"":"/C \"("); + strcat(dir, cmd); + strcat(dir, " "); + if (cmdstr!=NULL) strcat(dir, TranslateHostPath(cmdstr)); + if (!strcasecmp(cmd,"for")) strcat(dir, ")"); + strcat(dir, " & echo( & echo "); + strcat(dir, MSG_Get("PROGRAM_START_COMPLETED")); + strcat(dir," & pause\""); + lpExecInfo.lpFile = "CMD.EXE"; + lpExecInfo.lpParameters = dir; + } else { + lpExecInfo.lpFile = cmd==NULL?NULL:TranslateHostPath(cmd); + lpExecInfo.lpParameters = cmdstr==NULL?NULL:TranslateHostPath(cmdstr, true); + } + bool setdir=false; + char winDirCur[512], winDirNew[512]; + if (GetCurrentDirectory(512, winDirCur)&&(!strncmp(Drives[DOS_GetDefaultDrive()]->GetInfo(),"local ",6)||!strncmp(Drives[DOS_GetDefaultDrive()]->GetInfo(),"CDRom ",6))) { + Overlay_Drive *ddp = dynamic_cast(Drives[DOS_GetDefaultDrive()]); + strcpy(winDirNew, ddp!=NULL?ddp->getOverlaydir():Drives[DOS_GetDefaultDrive()]->GetBaseDir()); + strcat(winDirNew, Drives[DOS_GetDefaultDrive()]->curdir); + if (SetCurrentDirectory(winDirNew)) setdir=true; + } + if (!startquiet) WriteOut(MSG_Get("PROGRAM_START_COMMAND"), cmd); + ShellExecuteEx(&lpExecInfo); + int ErrorCode = GetLastError(); + if (setdir) SetCurrentDirectory(winDirCur); + if (startwait && lpExecInfo.hProcess!=NULL) { + DWORD exitCode; + BOOL ret; + int count=0; + ctrlbrk=false; + inshell=true; + do { + ret=GetExitCodeProcess(lpExecInfo.hProcess, &exitCode); + CALLBACK_Idle(); + if (ctrlbrk) { + uint8_t c;uint16_t n=1; + DOS_ReadFile (STDIN,&c,&n); + if (c == 3) WriteOut("^C\r\n"); + EndStartProcess(); + exitCode=0; + break; + } + if (++count==20000&&ret&&exitCode==STILL_ACTIVE&&!startquiet) WriteOut(MSG_Get("PROGRAM_START_CTRLC")); + } while (ret!=0&&exitCode==STILL_ACTIVE); + ErrorCode = GetLastError(); + CloseHandle(lpExecInfo.hProcess); + inshell=false; + } + DOS_SetError(ErrorCode); +#else + if (cmd==NULL || !strlen(cmd) || !strcmp(cmd,"?") || !strcmp(cmd,"/") || !strcmp(cmd,"/?") || !strcmp(cmd,"-?") || !strcasecmp(cmd,"/open") || !strcasecmp(cmd,"-open")) { + PrintUsage(); + DOS_SetError(0); + return; + } + if (!startquiet) WriteOut(MSG_Get("PROGRAM_START_COMMAND"), cmd); + bool open=false; + if (!strncasecmp(cmd, "/open ", 5) || !strncasecmp(cmd, "-open ", 6)) { + open=true; + cmd+=5; + } + cmd=trim((char *)TranslateHostPath(cmd)); + int ret=0; +#if defined(LINUX) || defined(MACOSX) + ret=system(((open? +#if defined(LINUX) + "xdg-open " +#else + "open " +#endif + :"")+std::string(cmd)+(startwait||(strlen(cmd)>2&&!strcmp(cmd+strlen(cmd)-2," &"))?"":" &")).c_str()); +#else + WriteOut(MSG_Get("PROGRAM_START_HOST_ERROR")); + return; +#endif + if (ret==-1) { + WriteOut(MSG_Get("PROGRAM_START_LAUNCH_ERROR")); + return; + } + DOS_SetError(ret); +#endif + } + +private: + void PrintUsage() { +#if defined(WIN32) + WriteOut(MSG_Get("PROGRAM_START_HELP_WIN"), startincon.c_str()); +#else + WriteOut(MSG_Get("PROGRAM_START_HELP")); +#endif + } +}; + +void START_ProgramStart(Program **make) +{ + *make = new START; +} +#endif + +#define MAX_FLAGS 512 +char *g_flagged_files[MAX_FLAGS]; //global array to hold flagged files +int flagged_backup(char *zip) +{ + // unsigned char buffer[4096]; + // char zipfile[CROSS_LEN]; + int ret = 0; +// int i; + +// bool compresssaveparts = static_cast(control->GetSection("dosbox"))->Get_bool("compresssaveparts"); + +// strcpy(zipfile, zip); +// if (strstr(zipfile, ".sav")) +// strcpy(strstr(zipfile, ".sav"), ".dat"); + +// i=0; +// while (i < MAX_FLAGS && g_flagged_files[i] == NULL) i++; +// if (i < MAX_FLAGS) { +// zipFile zf; +// { +// const char *global_comment = "DOSBox-X flagged file save state"; +// zlib_filefunc64_def ffunc; +// #ifdef USEWIN32IOAPI +// fill_win32_filefunc64A(&ffunc); +// #else +// fill_fopen64_filefunc(&ffunc); +// #endif +// remove(zipfile); +// zf = zipOpen2_64(zipfile,APPEND_STATUS_CREATE,&global_comment,&ffunc); +// } +// if (zf != NULL) { +// while (i < MAX_FLAGS) { +// if (g_flagged_files[i] != NULL) { +// uint16_t handle = 0; +// if (DOS_FindDevice(("\""+std::string(g_flagged_files[i])+"\"").c_str()) != DOS_DEVICES || !DOS_OpenFile(("\""+std::string(g_flagged_files[i])+"\"").c_str(),0,&handle)) { +// LOG_MSG(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),g_flagged_files[i]); +// continue; +// } + +// zip_fileinfo zi; zipSetCurrentTime(zi); +// if (zipOutOpenFile(zf,g_flagged_files[i],zi,compresssaveparts) == ZIP_OK) { +// zip_ostreambuf zos(zf); + +// do { +// uint16_t n = sizeof(buffer); +// DOS_ReadFile(handle,buffer,&n); +// if (n == 0) break; +// if (zos.xsputn((zip_ostreambuf::char_type*)buffer,n) < n) break; +// } while(1); + +// zos.close(); +// } + +// DOS_CloseFile(handle); +// } + +// i++; +// } +// zipClose(zf,NULL); +// } +// } + + return ret; +} + +// int flagged_restore(char* zip) +// { +// unsigned char buffer[4096]; +// unz_file_info64 file_info; +// char zipfile[MAX_FLAGS]; +// int ret = 0; +// int i; + +// strcpy(zipfile, zip); +// if (strstr(zipfile, ".sav")) +// strcpy(strstr(zipfile, ".sav"), ".dat"); +// i=0; +// while (i < MAX_FLAGS && g_flagged_files[i] == NULL) i++; +// if (i < MAX_FLAGS) { +// unzFile zf; +// { +// zlib_filefunc64_def ffunc; +// #ifdef USEWIN32IOAPI +// fill_win32_filefunc64A(&ffunc); +// #else +// fill_fopen64_filefunc(&ffunc); +// #endif +// zf = unzOpen2_64(zipfile,&ffunc); +// } +// if (zf != NULL) { +// while (i < MAX_FLAGS) { +// if (g_flagged_files[i] != NULL) { +// if (DOS_FindDevice(("\""+std::string(g_flagged_files[i])+"\"").c_str()) != DOS_DEVICES) { +// LOG_MSG(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),g_flagged_files[i]); +// continue; +// } + +// if (unzLocateFile(zf,g_flagged_files[i],2/*case insensitive*/) == UNZ_OK && +// unzGetCurrentFileInfo64(zf,&file_info,NULL,0,NULL,0,NULL,0) == UNZ_OK) { +// if (unzOpenCurrentFile(zf) == UNZ_OK) { +// zip_istreambuf zis(zf); + +// uint16_t handle=0; +// if (DOS_CreateFile(("\""+std::string(g_flagged_files[i])+"\"").c_str(),0,&handle)) { +// do { +// uint16_t n = zis.xsgetn((zip_istreambuf::char_type*)buffer,sizeof(buffer)); +// if (n == 0) break; +// DOS_WriteFile(handle,(uint8_t*)buffer,&n); +// if (n == 0) break; +// } while (1); +// DOS_CloseFile(handle); +// } + +// zis.close(); +// } +// } +// } + +// i++; +// } +// unzClose(zf); +// } +// } + +// return ret; +// } + +#if !defined(OSFREE) +class FLAGSAVE : public Program +{ +public: + + void Run(void) override + { + std::string file_to_flag; + int i, lf; + bool force=false, remove=false; + + if (cmd->FindExist("-?", false) || cmd->FindExist("/?", false)) { + printHelp(); + return; + } + if (cmd->FindExist("/f", true)) + force=true; + if (cmd->FindExist("/r", true)) + remove=true; + if (cmd->FindExist("/u", true)) + { + for (i = 0; i < MAX_FLAGS; i++) + { + if (g_flagged_files[i] != NULL) + g_flagged_files[i] = NULL; + } + WriteOut(MSG_Get("PROGRAM_FLAGSAVE_UNFLAGALL")); + return; + } + else if (cmd->GetCount()) + { + for (unsigned int i=1; i<=cmd->GetCount(); i++) { + cmd->FindCommand(i,temp_line); + uint8_t drive; + char fullname[DOS_PATHLENGTH], flagfile[CROSS_LEN]; + + strcpy(flagfile, temp_line.c_str()); + if (*flagfile&&DOS_MakeName(((flagfile[0]!='\"'?"\"":"")+std::string(flagfile)+(flagfile[strlen(flagfile)-1]!='\"'?"\"":"")).c_str(), fullname, &drive)) + { + sprintf(flagfile, "%c:\\%s", drive+'A', fullname); + if (remove) { + for (lf = 0; lf < MAX_FLAGS; lf++) + { + if (g_flagged_files[lf] != NULL && !strcasecmp(g_flagged_files[lf], flagfile)) + { + WriteOut(MSG_Get("PROGRAM_FLAGSAVE_UNFLAGGED"), g_flagged_files[lf]); + free(g_flagged_files[lf]); + g_flagged_files[lf] = NULL; + break; + } + } + continue; + } + if (!force && !DOS_FileExists(("\""+std::string(flagfile)+"\"").c_str())) { + WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"), flagfile); + continue; + } + bool found=false; + for (lf = 0; lf < MAX_FLAGS; lf++) + { + if (g_flagged_files[lf] == NULL) + continue; + if (!strcasecmp(g_flagged_files[lf], flagfile)) + { + WriteOut(MSG_Get("PROGRAM_FLAGSAVE_FLAGGED"), flagfile); + found=true; + } + } + if (found) continue; + for (lf = 0; lf < MAX_FLAGS; lf++) + { + if (g_flagged_files[lf] == NULL) + break; + } + if (lf == MAX_FLAGS) + { + WriteOut(MSG_Get("PROGRAM_FLAGSAVE_TOOMANY")); + return; + } + g_flagged_files[lf] = (char*)malloc(strlen(flagfile) + 1); + strcpy(g_flagged_files[lf], flagfile); + WriteOut(MSG_Get("PROGRAM_FLAGSAVE_SAVED"), g_flagged_files[lf]); + } else + WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"), flagfile); + } + return; + } + else + { + WriteOut(MSG_Get("PROGRAM_FLAGSAVE_LIST")); + for (i = 0; i < MAX_FLAGS; i++) + { + if (g_flagged_files[i]) + WriteOut("%s\n", g_flagged_files[i]); + } + return; + } + } + void printHelp() + { + WriteOut(MSG_Get("PROGRAM_FLAGSAVE_HLP")); + } +}; + +static void FLAGSAVE_ProgramStart(Program** make) +{ + *make = new FLAGSAVE; +} +#endif + +void Add_VFiles(bool usecp) { +#if !defined(OSFREE) + VFILE_Register("PATCHING", nullptr, 0, "/"); + VFILE_Register("TEXTUTIL", nullptr, 0, "/"); +#endif + VFILE_Register("SYSTEM", nullptr, 0, "/"); + VFILE_Register("DEBUG", nullptr, 0, "/"); +#if !defined(OSFREE) + VFILE_Register("DOS", nullptr, 0, "/"); + VFILE_Register("CPI", nullptr, 0, "/"); +#endif + VFILE_Register("BIN", nullptr, 0, "/"); +#if !defined(OSFREE) + VFILE_Register("4DOS", nullptr, 0, "/"); +#endif + +#if !defined(OSFREE) + std::string dirname="drivez"; + std::string path = "."; + path += CROSS_FILESPLIT; + path += dirname; + getdrivezpath(path, dirname); + drivezRegister(path, "/", usecp); +#endif + +#if !defined(OSFREE) + PROGRAMS_MakeFile("HELP.COM",HELP_ProgramStart,"/SYSTEM/"); + PROGRAMS_MakeFile("INTRO.COM",INTRO_ProgramStart,"/SYSTEM/"); +#endif + PROGRAMS_MakeFile("IMGMOUNT.COM", IMGMOUNT_ProgramStart,"/SYSTEM/"); +#if !defined(OSFREE) + PROGRAMS_MakeFile("IMGMAKE.COM", IMGMAKE_ProgramStart,"/SYSTEM/"); + PROGRAMS_MakeFile("IMGSWAP.COM", IMGSWAP_ProgramStart,"/SYSTEM/"); +#endif +#if !defined(OSFREE) + PROGRAMS_MakeFile("MOUNT.COM",MOUNT_ProgramStart,"/SYSTEM/"); +#endif + PROGRAMS_MakeFile("BOOT.COM",BOOT_ProgramStart,"/SYSTEM/"); +#if !defined(OSFREE) + PROGRAMS_MakeFile("CONFIG.COM",CONFIG_ProgramStart,"/SYSTEM/"); + PROGRAMS_MakeFile("COUNTRY.COM",COUNTRY_ProgramStart,"/SYSTEM/"); +#endif + PROGRAMS_MakeFile("COMMAND.COM",SHELL_ProgramStart); + internal_program = true; +#if !defined(OSFREE) + if (usecp && prepared) VFILE_Register("AUTOEXEC.BAT",(uint8_t *)autoexec_data,(uint32_t)strlen(autoexec_data)); + if (prepared) VFILE_Register("CONFIG.SYS",(uint8_t *)config_data,(uint32_t)strlen(config_data)); + internal_program = false; + PROGRAMS_MakeFile("RE-DOS.COM",REDOS_ProgramStart,"/SYSTEM/"); + PROGRAMS_MakeFile("RESCAN.COM",RESCAN_ProgramStart,"/SYSTEM/"); +# if defined(WIN32) && !defined(HX_DOS) || defined(LINUX) || defined(MACOSX) + if (startcmd) PROGRAMS_MakeFile("START.COM", START_ProgramStart,"/SYSTEM/"); +# endif +#endif + +#if !defined(OSFREE) + if (machine == MCH_CGA) PROGRAMS_MakeFile("CGASNOW.COM",CGASNOW_ProgramStart,"/TEXTUTIL/"); +#endif + PROGRAMS_MakeFile("VFRCRATE.COM",VFRCRATE_ProgramStart,"/DEBUG/"); + + if (IS_VGA_ARCH && svgaCard != SVGA_None) + PROGRAMS_MakeFile("VESAMOED.COM",VESAMOED_ProgramStart,"/DEBUG/"); + + if (!IS_PC98_ARCH) { + PROGRAMS_MakeFile("LOADROM.COM", LOADROM_ProgramStart,"/DEBUG/"); +#if !defined(OSFREE) + PROGRAMS_MakeFile("KEYB.COM", KEYB_ProgramStart,"/DOS/"); + PROGRAMS_MakeFile("MODE.COM", MODE_ProgramStart,"/DOS/"); + PROGRAMS_MakeFile("MOUSE.COM", MOUSE_ProgramStart,"/DOS/"); + PROGRAMS_MakeFile("SETCOLOR.COM", SETCOLOR_ProgramStart,"/BIN/"); +#endif + } + + if (IS_VGA_ARCH) { +#if !defined(OSFREE) + PROGRAMS_MakeFile("80X60.COM", TEXT80X60_ProgramStart,"/TEXTUTIL/"); + PROGRAMS_MakeFile("80X50.COM", TEXT80X50_ProgramStart,"/TEXTUTIL/"); + PROGRAMS_MakeFile("80X43.COM", TEXT80X43_ProgramStart,"/TEXTUTIL/"); + PROGRAMS_MakeFile("80X25.COM", TEXT80X25_ProgramStart,"/TEXTUTIL/"); + PROGRAMS_MakeFile("132X60.COM", TEXT132X60_ProgramStart,"/TEXTUTIL/"); + PROGRAMS_MakeFile("132X50.COM", TEXT132X50_ProgramStart,"/TEXTUTIL/"); + PROGRAMS_MakeFile("132X43.COM", TEXT132X43_ProgramStart,"/TEXTUTIL/"); + PROGRAMS_MakeFile("132X25.COM", TEXT132X25_ProgramStart,"/TEXTUTIL/"); + PROGRAMS_MakeFile("DCGA.COM", DCGA_ProgramStart,"/TEXTUTIL/"); +#endif + } + +#if !defined(OSFREE) + PROGRAMS_MakeFile("COLOR.COM",COLOR_ProgramStart,"/BIN/"); + PROGRAMS_MakeFile("TITLE.COM",TITLE_ProgramStart,"/BIN/"); + PROGRAMS_MakeFile("VHDMAKE.COM",VHDMAKE_ProgramStart,"/BIN/"); + PROGRAMS_MakeFile("LS.COM",LS_ProgramStart,"/BIN/"); + PROGRAMS_MakeFile("ADDKEY.COM",ADDKEY_ProgramStart,"/BIN/"); + PROGRAMS_MakeFile("CFGTOOL.COM",CFGTOOL_ProgramStart,"/SYSTEM/"); + PROGRAMS_MakeFile("FLAGSAVE.COM", FLAGSAVE_ProgramStart,"/SYSTEM/"); +# if defined C_DEBUG + PROGRAMS_MakeFile("NMITEST.COM",NMITEST_ProgramStart,"/DEBUG/"); + PROGRAMS_MakeFile("INT2FDBG.COM",INT2FDBG_ProgramStart,"/DEBUG/"); + PROGRAMS_MakeFile("BIOSTEST.COM", BIOSTEST_ProgramStart,"/DEBUG/"); +# endif + PROGRAMS_MakeFile("A20GATE.COM",A20GATE_ProgramStart,"/DEBUG/"); +#endif + + if (IS_PC98_ARCH) + PROGRAMS_MakeFile("PC98UTIL.COM",PC98UTIL_ProgramStart,"/BIN/"); + +#if !defined(OSFREE) + PROGRAMS_MakeFile("CAPMOUSE.COM", CAPMOUSE_ProgramStart,"/SYSTEM/"); + PROGRAMS_MakeFile("LOADFIX.COM",LOADFIX_ProgramStart,"/DOS/"); + PROGRAMS_MakeFile("LABEL.COM", LABEL_ProgramStart,"/DOS/"); + PROGRAMS_MakeFile("TREE.COM", TREE_ProgramStart,"/DOS/"); + PROGRAMS_MakeFile("DELTREE.EXE",DELTREE_ProgramStart,"/DOS/"); + PROGRAMS_MakeFile("CHOICE.COM", CHOICE_ProgramStart,"/DOS/"); + PROGRAMS_MakeFile("AUTOTYPE.COM", AUTOTYPE_ProgramStart,"/BIN/"); +# ifdef C_ICONV + PROGRAMS_MakeFile("UTF8.COM", UTF8_ProgramStart,"/BIN/"); + PROGRAMS_MakeFile("UTF16.COM", UTF16_ProgramStart,"/BIN/"); +# endif + PROGRAMS_MakeFile("MIXER.COM",MIXER_ProgramStart,"/SYSTEM/"); + PROGRAMS_MakeFile("SERIAL.COM", SERIAL_ProgramStart,"/SYSTEM/"); + PROGRAMS_MakeFile("PARALLEL.COM", PARALLEL_ProgramStart,"/SYSTEM/"); + if (IS_DOSV) + PROGRAMS_MakeFile("VTEXT.COM", VTEXT_ProgramStart,"/TEXTUTIL/"); +#endif + +#if !defined(OSFREE) + VFILE_RegisterBuiltinFileBlob(bfb_EDLIN_EXE, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_DEBUG_EXE, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_MOVE_EXE, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_FIND_EXE, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_FCBS_COM, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_FILES_COM, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_LASTDRIV_COM, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_REPLACE_EXE, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_SORT_EXE, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_XCOPY_EXE, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_APPEND_EXE, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_DEVICE_COM, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_BUFFERS_COM, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_CHKDSK_EXE, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_COMP_COM, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_FC_EXE, "/DOS/"); +# if C_IPX + if (addipx) PROGRAMS_MakeFile("IPXNET.COM",IPXNET_ProgramStart,"/SYSTEM/"); +# endif + if (addne2k) VFILE_RegisterBuiltinFileBlob(bfb_NE2000_COM, "/SYSTEM/"); + if (addovl) VFILE_RegisterBuiltinFileBlob(bfb_GLIDE2X_OVL, "/SYSTEM/"); +#endif + + /* These are IBM PC/XT/AT ONLY. They will not work in PC-98 mode. */ + if (!IS_PC98_ARCH) { +#if !defined(OSFREE) + VFILE_RegisterBuiltinFileBlob(bfb_SYS_COM, "/DOS/"); /* may rely on INT 13h or IBM PC specific functions and layout */ + VFILE_RegisterBuiltinFileBlob(bfb_FORMAT_EXE, "/DOS/"); /* does not work in PC-98 mode */ + VFILE_RegisterBuiltinFileBlob(bfb_DEFRAG_EXE, "/DOS/"); /* relies on IBM PC CGA/EGA/VGA alphanumeric display memory */ + VFILE_RegisterBuiltinFileBlob(bfb_FDISK_EXE, "/BIN/"); /* relies on IBM PC INT 13h */ + VFILE_RegisterBuiltinFileBlob(bfb_HEXMEM16_EXE, "/DEBUG/"); + VFILE_RegisterBuiltinFileBlob(bfb_HEXMEM32_EXE, "/DEBUG/"); + VFILE_RegisterBuiltinFileBlob(bfb_DOSIDLE_EXE, "/BIN/"); + VFILE_RegisterBuiltinFileBlob(bfb_DOS32A_EXE, "/BIN/"); + VFILE_RegisterBuiltinFileBlob(bfb_DOS4GW_EXE, "/BIN/"); + VFILE_RegisterBuiltinFileBlob(bfb_CDPLAY_EXE, "/BIN/"); + VFILE_RegisterBuiltinFileBlob(bfb_CDPLAY_TXT, "/BIN/"); + VFILE_RegisterBuiltinFileBlob(bfb_CDPLAY_ZIP, "/BIN/"); + VFILE_RegisterBuiltinFileBlob(bfb_DOSMID_EXE, "/BIN/"); + VFILE_RegisterBuiltinFileBlob(bfb_MPXPLAY_EXE, "/BIN/"); + VFILE_RegisterBuiltinFileBlob(bfb_ZIP_EXE, "/BIN/"); + VFILE_RegisterBuiltinFileBlob(bfb_UNZIP_EXE, "/BIN/"); + VFILE_RegisterBuiltinFileBlob(bfb_EMSMAGIC_COM, "/BIN/"); + VFILE_RegisterBuiltinFileBlob(bfb_DISKCOPY_EXE, "/DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_CWSDPMI_EXE, "/BIN/"); + VFILE_RegisterBuiltinFileBlob(bfb_PRINT_COM, "/DOS/"); + + /* It appears the latest EDIT.COM requires a 386, and it does not bother + * to detect if the CPU is a 386. If you run this program for 286 and lower + * you get a crash. */ + if (CPU_ArchitectureType >= CPU_ARCHTYPE_386) + VFILE_RegisterBuiltinFileBlob(bfb_EDIT_COM, "/DOS/"); + + VFILE_RegisterBuiltinFileBlob(bfb_LICENSE_TXT, "/4DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_EXAMPLES_BTM, "/4DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_BATCOMP_EXE, "/4DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_OPTION_EXE, "/4DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_4HELP_EXE, "/4DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_4DOS_HLP, "/4DOS/"); + VFILE_RegisterBuiltinFileBlob(bfb_4DOS_COM, "/4DOS/"); +#endif + } +#if !defined(OSFREE) + if (prepared) VFILE_Register("4DOS.INI",(uint8_t *)i4dos_data,(uint32_t)strlen(i4dos_data), "/4DOS/"); +#endif + +#if !defined(OSFREE) + if (IS_VGA_ARCH) { + VFILE_RegisterBuiltinFileBlob(bfb_VGA_COM, "/TEXTUTIL/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA_COM, "/TEXTUTIL/"); + VFILE_RegisterBuiltinFileBlob(bfb_CLR_COM, "/TEXTUTIL/"); + VFILE_RegisterBuiltinFileBlob(bfb_CGA_COM, "/TEXTUTIL/"); + VFILE_RegisterBuiltinFileBlob(bfb_50_COM, "/TEXTUTIL/"); + VFILE_RegisterBuiltinFileBlob(bfb_28_COM, "/TEXTUTIL/"); + } else if (IS_EGA_ARCH) + VFILE_RegisterBuiltinFileBlob(bfb_28_COM_ega, "/TEXTUTIL/"); +#endif + +#if !defined(OSFREE) + if (IS_VGA_ARCH) + VFILE_RegisterBuiltinFileBlob(bfb_25_COM, "/TEXTUTIL/"); + else if (IS_EGA_ARCH) + VFILE_RegisterBuiltinFileBlob(bfb_25_COM_ega, "/TEXTUTIL/"); + else if (!IS_PC98_ARCH) + VFILE_RegisterBuiltinFileBlob(bfb_25_COM_other, "/TEXTUTIL/"); +#endif + +#if !defined(OSFREE) + /* MEM.COM is not compatible with PC-98 and/or 8086 emulation */ + if(!IS_PC98_ARCH && CPU_ArchitectureType >= CPU_ARCHTYPE_80186) + VFILE_RegisterBuiltinFileBlob(bfb_MEM_EXE, "/DOS/"); + else if(IS_PC98_ARCH || CPU_ArchitectureType < CPU_ARCHTYPE_80186) + VFILE_RegisterBuiltinFileBlob(bfb_MEM_EXE_PC98, "/DOS/"); +#endif + + /* DSXMENU.EXE */ + if(IS_PC98_ARCH) { + VFILE_RegisterBuiltinFileBlob(bfb_DSXMENU_EXE_PC98, "/BIN/"); +#if !defined(OSFREE) + VFILE_RegisterBuiltinFileBlob(bfb_CWSDPMI_PC98_EXE, "/BIN/"); +#endif + } + else { + VFILE_RegisterBuiltinFileBlob(bfb_DSXMENU_EXE_PC, "/BIN/"); +#if !defined(OSFREE) + VFILE_RegisterBuiltinFileBlob(bfb_SHUTDOWN_COM, "/BIN/"); +#endif + } + +#if !defined(OSFREE) + VFILE_RegisterBuiltinFileBlob(bfb_EVAL_EXE, "/BIN/"); + if(!IS_PC98_ARCH) + VFILE_RegisterBuiltinFileBlob(bfb_EVAL_HLP, "/BIN/"); + + VFILE_RegisterBuiltinFileBlob(bfb_EGA18_CPI, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA17_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA16_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA15_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA14_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA13_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA12_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA11_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA10_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA9_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA8_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA7_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA6_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA5_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA4_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA3_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA2_CPX, "/CPI/"); + VFILE_RegisterBuiltinFileBlob(bfb_EGA_CPX, "/CPI/"); + + VFILE_RegisterBuiltinFileBlob(bfb_IPSMAKE_EXE, "/PATCHING/"); + VFILE_RegisterBuiltinFileBlob(bfb_IPSPATCH_EXE, "/PATCHING/"); +#endif +} + +#if WIN32 +void Add_Existing_Drive_Directories() +{ + for(auto drive = 'C'; drive < 'Y'; drive++) + { + auto name = std::string("drive"); + auto path = std::string("."); + + name += drive; + path += CROSS_FILESPLIT; + path += name; + + getdrivezpath(path, name); + + if (path.empty()) + continue; + + LOG_MSG("Mounting directory 'drive%c' found in DOSBox-X directory as drive %c.\n", static_cast(drive + 32), drive); + + MountHelper(drive, path.c_str(), "LOCAL"); + } +} +#endif + +void DOS_SetupPrograms(void) { + /*Add Messages */ + + MSG_Add("PROGRAM_MOUSE_INSTALL","Installed at PS/2 port.\n"); + MSG_Add("PROGRAM_MOUSE_VERTICAL","Reverse Y-axis enabled.\n"); + MSG_Add("PROGRAM_MOUSE_VERTICAL_BACK","Reverse Y-axis disabled.\n"); + MSG_Add("PROGRAM_MOUSE_UNINSTALL","Driver successfully unloaded...\n"); + MSG_Add("PROGRAM_MOUSE_ERROR","Already installed at PS/2 port.\n"); + MSG_Add("PROGRAM_MOUSE_NOINSTALLED","Driver is not installed.\n"); + MSG_Add("PROGRAM_MOUSE_HELP","Turns on/off mouse.\n\nMOUSE [/?] [/U] [/V]\n /U: Uninstall\n /V: Reverse Y-axis\n"); + MSG_Add("PROGRAM_MOUNT_CDROMS_FOUND","CDROMs found: %d\n"); + MSG_Add("PROGRAM_MOUNT_STATUS_FORMAT","%-5s %-58s %-12s\n"); + MSG_Add("PROGRAM_MOUNT_STATUS_ELTORITO", "Drive %c is mounted as El Torito floppy drive\n"); + MSG_Add("PROGRAM_MOUNT_STATUS_RAMDRIVE", "Drive %c is mounted as RAM drive\n"); + MSG_Add("PROGRAM_MOUNT_STATUS_2","Drive %c is mounted as %s\n"); + MSG_Add("PROGRAM_MOUNT_STATUS_1","The currently mounted drives are:\n"); + MSG_Add("PROGRAM_MOUNT_NOT_FORMATTED","Drive not formatted. Format it before accessing the drive.\n"); + MSG_Add("PROGRAM_MOUNT_UNSUPPORTED_EXT","Unsupported extension %s: Mounted as raw IMG image.\n"); + MSG_Add("PROGRAM_IMGMOUNT_STATUS_FORMAT","%-5s %-47s %-12s %s\n"); + MSG_Add("PROGRAM_IMGMOUNT_STATUS_NUMBER_FORMAT","%-12s %-40s %-12s %s\n"); + MSG_Add("PROGRAM_IMGMOUNT_STATUS_2","The currently mounted drive numbers are:\n"); + MSG_Add("PROGRAM_IMGMOUNT_STATUS_1","The currently mounted FAT/ISO drives are:\n"); + MSG_Add("PROGRAM_IMGMOUNT_STATUS_NONE","No drive available\n"); + MSG_Add("PROGRAM_IMGSWAP_STATUS","Drives currently available for swapping are:\n"); + MSG_Add("PROGRAM_IMGSWAP_ERROR","Position must be between 1 and %d for this drive.\n"); + MSG_Add("PROGRAM_MOUNT_ERROR_1","Directory %s does not exist.\n"); + MSG_Add("PROGRAM_MOUNT_ERROR_2","%s is not a directory\n"); + MSG_Add("PROGRAM_MOUNT_IMGMOUNT","To mount image files, use the \033[34;1mIMGMOUNT\033[0m command, not the \033[34;1mMOUNT\033[0m command.\n"); + MSG_Add("PROGRAM_MOUNT_ILL_TYPE","Illegal type %s\n"); + MSG_Add("PROGRAM_MOUNT_ALREADY_MOUNTED","Drive %c already mounted with %s\n"); + MSG_Add("PROGRAM_MOUNT_USAGE", + "Mounts directories or drives in the host system as DOSBox-X drives.\n" + "Usage: \033[34;1m\033[32;1mMOUNT\033[0m \033[37;1mdrive\033[0m \033[36;1mlocal_directory\033[0m [option]\033[0m\n" + " \033[37;1mdrive\033[0m Drive letter where the directory or drive will be mounted.\n" + " \033[36;1mlocal_directory\033[0m Local directory or drive in the host system to be mounted.\n" + " [option] Option(s) for mounting. The following options are accepted:\n" + " -t Specify the drive type the mounted drive to behave as.\n" + " Supported drive type: dir, floppy, cdrom, overlay\n" + " (Note that 'overlay' redirects writes for mounted drive to another directory)\n" + " -label [name] Set the volume label name of the drive (all upper case).\n" + " -nl Use next available drive letter if the drive is mounted.\n" + " -ro Mount the drive in read-only mode.\n" + " -pr Specify the path is relative to the config file location.\n" + " -cd Generate a list of local CD drive's \"drive #\" values.\n" + " -usecd [drive #] For direct hardware emulation such as audio playback.\n" + " -ioctl Use lowest level hardware access (following -usecd option).\n" + " -aspi Use the installed ASPI layer (following -usecd option).\n" + " -freesize [size] Specify the free disk space of drive in MB (KB for floppies).\n" + " -nocachedir Enable real-time update and do not cache the drive.\n" + " -z drive Move virtual drive Z: to a different letter.\n" + " -o Report the drive as: local, remote.\n" + " -q Quiet mode (no message output).\n" + " -u Unmount the drive.\n" + " \033[32;1m-examples Show some usage examples.\033[0m\n" + "Type MOUNT with no parameters to display a list of mounted drives."); + MSG_Add("PROGRAM_MOUNT_EXAMPLE", + "A basic example of MOUNT command:\n\n" + "\033[32;1mMOUNT c %s\033[0m\n\n" + "This makes the directory %s act as the C: drive inside DOSBox-X.\n" + "The directory has to exist in the host system. If the directory contains\n" + "space(s), be sure to properly quote the directory with double quotes,\n" + "e.g. %s\n\n" + "Some other usage examples of MOUNT:\n\n" +#if defined (WIN32) || defined(OS2) + "\033[32;1mMOUNT\033[0m - list all mounted drives\n" + "\033[32;1mMOUNT -cd\033[0m - list all local CD drives\n" +#else + "\033[32;1mMOUNT\033[0m - list all mounted drives\n" + "\033[32;1mMOUNT -cd\033[0m - list all local CD drives\n" +#endif + "\033[32;1mMOUNT d %s\033[0m - mount the D: drive to the directory\n" + "\033[32;1mMOUNT c %s -t cdrom\033[0m - mount the C: drive as a CD-ROM drive\n" + "\033[32;1mMOUNT c %s -ro\033[0m - mount the C: drive in read-only mode\n" + "\033[32;1mMOUNT c %s -label TEST\033[0m - mount the C: drive with the label TEST\n" + "\033[32;1mMOUNT c %s -nocachedir \033[0m - mount C: without caching the drive\n" + "\033[32;1mMOUNT c %s -freesize 128\033[0m - mount C: with 128MB free disk space\n" + "\033[32;1mMOUNT c %s -u\033[0m - force mount C: drive even if it's mounted\n" + "\033[32;1mMOUNT c %s -t overlay\033[0m - mount C: with overlay directory on top\n" +#if defined (WIN32) || defined(OS2) + "\033[32;1mMOUNT c -u\033[0m - unmount the C: drive\n" +#else + "\033[32;1mMOUNT c -u\033[0m - unmount the C: drive\n" +#endif + ); + MSG_Add("PROGRAM_MOUNT_UMOUNT_NOT_MOUNTED","Drive %c is not mounted.\n"); + MSG_Add("PROGRAM_MOUNT_UMOUNT_SUCCESS","Drive %c has successfully been removed.\n"); + MSG_Add("PROGRAM_MOUNT_UMOUNT_NUMBER_SUCCESS","Drive number %c has successfully been removed.\n"); + MSG_Add("PROGRAM_MOUNT_UMOUNT_NO_VIRTUAL","Virtual Drives can not be unMOUNTed.\n"); + MSG_Add("PROGRAM_MOUNT_WARNING_WIN","Warning: Mounting C:\\ is not recommended.\n"); + MSG_Add("PROGRAM_MOUNT_WARNING_OTHER","Warning: Mounting / is not recommended.\n"); + MSG_Add("PROGRAM_MOUNT_PHYSFS_ERROR","Failed to mount the PhysFS drive with the archive file.\n"); + MSG_Add("PROGRAM_MOUNT_OVERLAY_NO_BASE","Please MOUNT a normal directory first before adding an overlay on top.\n"); + MSG_Add("PROGRAM_MOUNT_OVERLAY_INCOMPAT_BASE","The overlay is NOT compatible with the drive that is specified.\n"); + MSG_Add("PROGRAM_MOUNT_OVERLAY_MIXED_BASE","The overlay needs to be specified using the same addressing as the underlying drive. No mixing of relative and absolute paths."); + MSG_Add("PROGRAM_MOUNT_OVERLAY_SAME_AS_BASE","The overlay directory can not be the same as underlying drive.\n"); + MSG_Add("PROGRAM_MOUNT_OVERLAY_ERROR","An error occurred when trying to create an overlay drive.\n"); + MSG_Add("PROGRAM_MOUNT_OVERLAY_STATUS","Overlay %s on drive %c mounted.\n"); + MSG_Add("PROGRAM_MOUNT_OVERLAY_REPLACE", "Existing overlay has been replaced with new overlay.\n"); + + MSG_Add("PROGRAM_LOADFIX_ALLOC","%d kb allocated.\n"); + MSG_Add("PROGRAM_LOADFIX_DEALLOC","%d kb freed.\n"); + MSG_Add("PROGRAM_LOADFIX_DEALLOCALL","Used memory freed.\n"); + MSG_Add("PROGRAM_LOADFIX_ERROR","Memory allocation error.\n"); + MSG_Add("PROGRAM_LOADFIX_EMS_FREE","EMS handle %u: unable to free\n"); + MSG_Add("PROGRAM_LOADFIX_XMS_FREE","XMS handle %u: unable to free\n"); + MSG_Add("PROGRAM_LOADFIX_EMS_ALLOC","EMS block allocated (%uKB)\n"); + MSG_Add("PROGRAM_LOADFIX_EMS_ALLOCERROR","Unable to allocate EMS block\n"); + MSG_Add("PROGRAM_LOADFIX_NOEMS","EMS not active\n"); + MSG_Add("PROGRAM_LOADFIX_XMS_ALLOC","XMS block allocated (%uKB)\n"); + MSG_Add("PROGRAM_LOADFIX_XMS_ALLOCERROR","Unable to allocate XMS block\n"); + MSG_Add("PROGRAM_LOADFIX_NOXMS","XMS not active\n"); + MSG_Add("PROGRAM_LOADFIX_NOALLOC","Lowest MCB is above 64KB, nothing allocated\n"); + + MSG_Add("PROGRAM_LOADFIX_HELP", + "Loads a program above the first 64 KB memory by reducing the available memory.\n\n" + "LOADFIX [-xms] [-ems] [-{ram}] [{program}] [{options}]\n" + "LOADFIX -f [-xms] [-ems]\n\n" + " -xms Allocates memory from XMS rather than conventional memory\n" + " -ems Allocates memory from EMS rather than conventional memory\n" + " -{ram} Specifies the amount of memory to allocate in KB\n" + " Defaults to 64KB for conventional memory; 1MB for XMS/EMS memory\n" + " -a Auto allocates enough memory to fill the lowest 64KB memory\n" + " -f (or -d) Frees previously allocated memory\n" + " {program} Runs the specified program\n" + " {options} Program options (if any)\n\n" + "Examples:\n" + " \033[32;1mLOADFIX game.exe\033[0m Allocates 64KB of conventional memory and runs game.exe\n" + " \033[32;1mLOADFIX -a\033[0m Auto-allocates enough memory conventional memory\n" + " \033[32;1mLOADFIX -128\033[0m Allocates 128KB of conventional memory\n" + " \033[32;1mLOADFIX -xms\033[0m Allocates 1MB of XMS memory\n" + " \033[32;1mLOADFIX -f\033[0m Frees allocated conventional memory\n"); + + MSG_Add("MSCDEX_SUCCESS","MSCDEX installed.\n"); + MSG_Add("MSCDEX_ERROR_MULTIPLE_CDROMS","MSCDEX: Failure: Drive-letters of multiple CD-ROM drives have to be continuous.\n"); + MSG_Add("MSCDEX_ERROR_NOT_SUPPORTED","MSCDEX: Failure: Not yet supported.\n"); + MSG_Add("MSCDEX_ERROR_PATH","MSCDEX: Specified location is not a CD-ROM drive.\n"); + MSG_Add("MSCDEX_ERROR_OPEN","MSCDEX: Failure: Invalid file or unable to open.\n"); + MSG_Add("MSCDEX_TOO_MANY_DRIVES","MSCDEX: Failure: Too many CD-ROM drives (max: 5). MSCDEX Installation failed.\n"); + MSG_Add("MSCDEX_LIMITED_SUPPORT","MSCDEX: Mounted subdirectory: limited support.\n"); + MSG_Add("MSCDEX_INVALID_FILEFORMAT","MSCDEX: Failure: File is either no ISO/CUE image or contains errors.\n"); + MSG_Add("MSCDEX_UNKNOWN_ERROR","MSCDEX: Failure: Unknown error.\n"); + + MSG_Add("PROGRAM_RESCAN_SUCCESS","Drive cache cleared.\n"); + MSG_Add("PROGRAM_RESCAN_HELP", + "Rescans for changes on mounted drives made on the host by clearing caches.\n\n" + "RESCAN [/A] [/Q]\n" + "RESCAN [drive:] [/Q]\n\n" + " [/A]\t\tRescan all drives\n" + " [/Q]\t\tEnable quiet mode\n" + " [drive:]\tThe drive to rescan\n\n" + "Type RESCAN with no parameters to rescan the current drive.\n"); + + MSG_Add("PROGRAM_INTRO", + "\033[2J\033[32;1mWelcome to DOSBox-X\033[0m, an open-source x86 emulator with sound and graphics.\n" + "DOSBox-X creates a shell for you which looks just like the plain DOS.\n" + "\n" + "\033[31;1mDOSBox-X will stop/exit without a warning if an error occurred!\033[0m\n" + "\n" + "\n" ); + MSG_Add("PROGRAM_INTRO_MENU_UP", "DOSBox-X Introduction"); + MSG_Add("PROGRAM_INTRO_MENU_BASIC","Basic mount"); + MSG_Add("PROGRAM_INTRO_MENU_CDROM","CD-ROM support"); + MSG_Add("PROGRAM_INTRO_MENU_USAGE","Usage"); + MSG_Add("PROGRAM_INTRO_MENU_INFO","Information"); + MSG_Add("PROGRAM_INTRO_MENU_QUIT","Quit"); + MSG_Add("PROGRAM_INTRO_MENU_BASIC_HELP","\n\033[1m \033[1m\033[KMOUNT allows you to connect real hardware to DOSBox-X's emulated PC.\033[0m\n"); + MSG_Add("PROGRAM_INTRO_MENU_CDROM_HELP","\n\033[1m \033[1m\033[KTo mount your CD-ROM in DOSBox-X, you need to specify additional options\n when mounting the CD-ROM.\033[0m\n"); + MSG_Add("PROGRAM_INTRO_MENU_USAGE_HELP","\n\033[1m \033[1m\033[KAn overview of the command line options you can give to DOSBox-X.\033[0m\n"); + MSG_Add("PROGRAM_INTRO_MENU_INFO_HELP","\n\033[1m \033[1m\033[KHow to get more information about DOSBox-X.\033[0m\n"); + MSG_Add("PROGRAM_INTRO_MENU_QUIT_HELP","\n\033[1m \033[1m\033[KExit from Intro.\033[0m\n"); + MSG_Add("PROGRAM_INTRO_USAGE_TOP", + "\033[2J\033[32;1mAn overview of the command line options you can give to DOSBox-X.\033[0m\n" + "Windows users must open cmd.exe or edit the shortcut to DOSBox-X.exe for this.\n\n" + "dosbox-x [name] [-exit] [-version] [-fastlaunch] [-fullscreen]\n" + " [-conf congfigfile] [-lang languagefile] [-machine machinetype]\n" + " [-startmapper] [-noautoexec] [-scaler scaler | -forcescaler scaler]\n" + " [-o options] [-c command] [-set
]\n\n" + ); + MSG_Add("PROGRAM_INTRO_USAGE_1", + "\033[33;1m name\033[0m\n" + "\tIf name is a directory it will mount that as the C: drive.\n" + "\tIf name is an executable it will mount the directory of name\n" + "\tas the C: drive and execute name.\n\n" + "\033[33;1m -exit\033[0m\n" + "\tDOSBox-X will close itself when the DOS application name ends.\n\n" + "\033[33;1m -version\033[0m\n" + "\tOutputs version information and exit. Useful for frontends.\n\n" + "\033[33;1m -fastlaunch\033[0m\n" + "\tEnables fast launch mode (skip BIOS logo and welcome banner).\n\n" + "\033[33;1m -fullscreen\033[0m\n" + "\tStarts DOSBox-X in fullscreen mode.\n" + ); + MSG_Add("PROGRAM_INTRO_USAGE_2", + "\033[33;1m -conf\033[0m configfile\n" + "\tStart DOSBox-X with the options specified in configfile.\n" + "\tSee the documentation for more details.\n\n" + "\033[33;1m -lang\033[0m languagefile\n" + "\tStart DOSBox-X using the language specified in languagefile.\n\n" + "\033[33;1m -startmapper\033[0m\n" + "\tEnter the keymapper directly on startup. Useful for people with\n" + "\tkeyboard problems.\n\n" + "\033[33;1m -machine\033[0m machinetype\n" + "\tSetup DOSBox-X to emulate a specific type of machine. Valid choices:\n" + "\thercules, cga, cga_mono, mcga, mda, pcjr, tandy, ega, vga, vgaonly,\n" + "\tpc98, vesa_nolfb, vesa_oldvbe, svga_paradise, svga_s3 (default).\n" + "\tThe machinetype affects both the video card and available sound cards.\n" + ); + MSG_Add("PROGRAM_INTRO_USAGE_3", + "\033[33;1m -noautoexec\033[0m\n" + "\tSkips the [autoexec] section of the loaded configuration file.\n\n" + "\033[33;1m -o\033[0m options\n" + "\tProvides command-line option(s) for \"name\" if an executable name is\n" + "\tspecified. Multiple -o can be used for multiple executable names.\n\n" + "\033[33;1m -c\033[0m command\n" + "\tRuns the specified command before running name. Multiple commands\n" + "\tcan be specified. Each command should start with -c, though.\n" + "\tA command can be: an Internal Program, a DOS command or an executable\n" + "\ton a mounted drive.\n\n" + "\033[33;1m -set\033[0m
\n" + "\tSets the config option (overriding the config file). Multiple options\n" + "\tcan be specified. Each option should start with -set, though.\n" + ); + MSG_Add("PROGRAM_INTRO_INFO", + "\033[32;1mInformation:\033[0m\n\n" + "For information about basic mount, type \033[34;1mintro mount\033[0m\n" + "For information about CD-ROM support, type \033[34;1mintro cdrom\033[0m\n" + "For information about usage, type \033[34;1mintro usage\033[0m\n\n" + "For the latest version of DOSBox-X, go to its homepage:\033[34;1m\n" + "\n" + "\033[34;1mhttps://dosbox-x.com/\033[0m or \033[34;1mhttp://dosbox-x.software\033[0m\n" + "\n" + "For more information about DOSBox-X, please take a look at its Wiki:\n" + "\n" + "\033[34;1mhttps://dosbox-x.com/wiki\033[0m\n" + ); + MSG_Add("PROGRAM_INTRO_MOUNT_START", + "\033[32;1mHere are some commands to get you started:\033[0m\n" + "Before you can use the files located on your own filesystem,\n" + "you have to mount the directory containing the files.\n" + "\n" + ); + MSG_Add("PROGRAM_INTRO_MOUNT_EXST_WINDOWS", "\033[32mmount c c:\\dosgames\\\033[37m will create a C drive with c:\\dosgames as contents."); + MSG_Add("PROGRAM_INTRO_MOUNT_EXEN_WINDOWS", "c:\\dosgames\\\033[37m is an example. Replace it with your own games directory. \033[37m "); + MSG_Add("PROGRAM_INTRO_MOUNT_EXST_OTHER", "\033[32mmount c ~/dosgames\033[37m will create a C drive with ~/dosgames as contents."); + MSG_Add("PROGRAM_INTRO_MOUNT_EXEN_OTHER", "\033[32m~/dosgames\033[37m is an example. Replace it with your own games directory.\033[37m "); + MSG_Add("PROGRAM_INTRO_MOUNT_END", + "When the mount has successfully completed you can type \033[34;1mc:\033[0m to go to your freshly\n" + "mounted C: drive. Typing \033[34;1mdir\033[0m there will show its contents." + " \033[34;1mcd\033[0m will allow you to\n" + "enter a directory (recognised by the \033[33;1m[]\033[0m in a directory listing).\n" + "You can run programs/files which end with \033[31m.exe .bat\033[0m and \033[31m.com\033[0m.\n" + ); + MSG_Add("PROGRAM_INTRO_CDROM", + "\033[2J\033[32;1mHow to mount a Real/Virtual CD-ROM Drive in DOSBox-X:\033[0m\n" + "DOSBox-X provides CD-ROM emulation on several levels.\n" + "\n" + "The \033[33mbasic\033[0m level works on all CD-ROM drives and normal directories.\n" + "It installs MSCDEX and marks the files read-only.\n" + "Usually this is enough for most games:\n" + "\033[34;1mmount d \033[0;31mD:\\\033[34;1m -t cdrom\033[0m or \033[34;1mmount d C:\\example -t cdrom\033[0m\n" + "If it doesn't work you might have to tell DOSBox-X the label of the CD-ROM:\n" + "\033[34;1mmount d C:\\example -t cdrom -label CDLABEL\033[0m\n" + "\n" + "The \033[33mnext\033[0m level adds some low-level support.\n" + "Therefore only works on CD-ROM drives:\n" + "\033[34;1mmount d \033[0;31mD:\\\033[34;1m -t cdrom -usecd \033[33m0\033[0m\n" + "\n" + "The \033[33mlast\033[0m level of support depends on your Operating System:\n" + "For \033[1mWindows 2000\033[0m, \033[1mWindows XP\033[0m and \033[1mLinux\033[0m:\n" + "\033[34;1mmount d \033[0;31mD:\\\033[34;1m -t cdrom -usecd \033[33m0 \033[34m-ioctl\033[0m\n" + "For \033[1mWindows 9x\033[0m with a ASPI layer installed:\n" + "\033[34;1mmount d \033[0;31mD:\\\033[34;1m -t cdrom -usecd \033[33m0 \033[34m-aspi\033[0m\n" + "\n" + "Replace \033[0;31mD:\\\033[0m with the location of your CD-ROM.\n" + "Replace the \033[33;1m0\033[0m in \033[34;1m-usecd \033[33m0\033[0m with the number reported for your CD-ROM if you type:\n" + "\033[34;1mmount -cd\033[0m\n" + ); + MSG_Add("PROGRAM_BOOT_NOT_EXIST","Bootdisk file does not exist. Failing.\n"); + MSG_Add("PROGRAM_BOOT_NOT_OPEN","Cannot open bootdisk file. Failing.\n"); + MSG_Add("PROGRAM_BOOT_WRITE_PROTECTED","Image file is read-only! Boot in write-protected mode.\n"); + MSG_Add("PROGRAM_BOOT_PRINT_ERROR", "Boots DOSBox-X from a floppy / PCjr cartridge or hard disk image.\n\n" + "\033[34;1mBOOT [driveletter:|drivenumber] [-convertfat|-convertfatro|-noconvertfat]\033[0m\n" + "\033[34;1mBOOT floppyimg1.img [floppyimg2.img ...] [-E ]\033[0m\n" + "\033[34;1mBOOT harddrive.img\033[0m\n\n" + " driveletter A: for floppy, C: or D: for hard drive.\n" + " drivenumber 0 for floppy, 2 or 3 for hard drive.\n" + " (The drive must already be mounted by the \033[34;1mIMGMOUNT\033[0m command.)\n" + " floppyimg.img Specify one or more floppy / PCjr images to boot.\n" + " Multiple images create a swap list for drive A:.\n" + " harddrive.img Specify a single hard disk image to boot from drive C:.\n" + " Add a leading colon (:) to treat the image as write-protected.\n\n" + " [-E ] Specify a command string for PCjr cartridge images.\n" + " [-L driveletter] Ignored option, accepted only for compatibility.\n\n" + "Examples:\n" + "\033[32;1mBOOT A:\033[0m Boot from drive A: if it is mounted and bootable.\n" + "\033[32;1mBOOT disk1.img disk2.img\033[0m Boot from floppy images using a swap list on drive A:.\n" + "\033[32;1mBOOT :DOS.IMG\033[0m Boot from floppy image DOS.IMG in write-protected mode.\n" + ); + MSG_Add("PROGRAM_BOOT_UNABLE","Unable to boot off of drive %c.\n"); + MSG_Add("PROGRAM_BOOT_IMAGE_MOUNTED", "Floppy image(s) already mounted.\n"); + MSG_Add("PROGRAM_BOOT_IMAGE_OPEN","Opening image file: %s\n"); + MSG_Add("PROGRAM_BOOT_IMAGE_NOT_OPEN","Cannot open %s\n"); + MSG_Add("PROGRAM_BOOT_CART_WO_PCJR","PCjr cartridge found, but machine is not PCjr"); + MSG_Add("PROGRAM_BOOT_CART_LIST_CMDS","Available PCjr cartridge commandos:%s"); + MSG_Add("PROGRAM_BOOT_CART_NO_CMDS", "No PCjr cartridge commandos found"); + MSG_Add("PROGRAM_BOOT_BOOTING", "Booting from drive "); + MSG_Add("PROGRAM_BOOT_UNSUPPORTED", "Unsupported boot mode"); + MSG_Add("PROGRAM_BOOT_SWAP_ALREADY","Multiple disk images specified and another drive is already connected to the swap list"); + MSG_Add("PROGRAM_BOOT_NOT_SPECIFIED","No images specified"); + MSG_Add("PROGRAM_BOOT_IS_PC88","The D88 image appears to target PC-88 and cannot be booted."); + MSG_Add("PROGRAM_BOOT_BPS_TOOLARGE","Bytes/sector too large"); + MSG_Add("PROGRAM_BOOT_DRIVE_READERROR","Error reading drive"); + MSG_Add("PROGRAM_BOOT_UNKNOWN_BOOTHAX","Unknown boothax mode"); + MSG_Add("PROGRAM_BOOT_SPECIFY_FILE","Must specify BIOS image to boot\n"); + MSG_Add("PROGRAM_BOOT_BIOS_OPEN_ERROR","Unable to open BIOS image\n"); + + MSG_Add("PROGRAM_LOADROM_HELP","Loads the specified ROM image file for video BIOS or IBM BASIC.\n\nLOADROM ROM_file\n"); + MSG_Add("PROGRAM_LOADROM_HELP","Must specify ROM file to load.\n"); + MSG_Add("PROGRAM_LOADROM_SPECIFY_FILE","Must specify ROM file to load.\n"); + MSG_Add("PROGRAM_LOADROM_CANT_OPEN","ROM file not accessible.\n"); + MSG_Add("PROGRAM_LOADROM_TOO_LARGE","ROM file too large.\n"); + MSG_Add("PROGRAM_LOADROM_INCOMPATIBLE","Video BIOS not supported by machine type.\n"); + MSG_Add("PROGRAM_LOADROM_UNRECOGNIZED","ROM file not recognized.\n"); + MSG_Add("PROGRAM_LOADROM_BASIC_LOADED","BASIC ROM loaded.\n"); + MSG_Add("PROGRAM_BIOSTEST_HELP","Boots into a BIOS image for running CPU tester BIOS.\n\nBIOSTEST image_file\n"); + MSG_Add("PROGRAM_BIOSTEST_SPECIFY_FILE","Must specify BIOS file to load.\n"); + MSG_Add("PROGRAM_BIOSTEST_OPEN_ERROR","Can't open a file"); + MSG_Add("PROGRAM_BIOSTEST_TOO_LARGE", "BIOS File too large"); + MSG_Add("VHD_ERROR_OPENING", "Could not open the specified VHD file.\n"); + MSG_Add("VHD_INVALID_DATA", "The specified VHD file is corrupt and cannot be opened.\n"); + MSG_Add("VHD_UNSUPPORTED_TYPE", "The specified VHD file is of an unsupported type.\n"); + MSG_Add("VHD_ERROR_OPENING_PARENT", "The parent of the specified VHD file could not be found.\n"); + MSG_Add("VHD_PARENT_INVALID_DATA", "The parent of the specified VHD file is corrupt and cannot be opened.\n"); + MSG_Add("VHD_PARENT_UNSUPPORTED_TYPE", "The parent of the specified VHD file is of an unsupported type.\n"); + MSG_Add("VHD_PARENT_INVALID_MATCH", "The parent of the specified VHD file does not contain the expected identifier.\n"); + MSG_Add("VHD_PARENT_INVALID_DATE", "The parent of the specified VHD file has been changed and cannot be loaded.\n"); + + MSG_Add("PROGRAM_IMGMOUNT_SPECIFY_DRIVE","Must specify drive letter to mount image at.\n"); + MSG_Add("PROGRAM_IMGMOUNT_SPECIFY2","Must specify drive number (0 to %d) to mount image at (0,1=fda,fdb;2,3=hda,hdb).\n"); + /*MSG_Add("PROGRAM_IMGMOUNT_SPECIFY_GEOMETRY", + "For \033[33mCD-ROM\033[0m images: \033[34;1mIMGMOUNT drive-letter location-of-image -t iso\033[0m\n" + "\n" + "For \033[33mhardrive\033[0m images: Must specify drive geometry for hard drives:\n" + "bytes_per_sector, sectors_per_cylinder, heads_per_cylinder, cylinder_count.\n" + "\033[34;1mIMGMOUNT drive-letter location-of-image -size bps,spc,hpc,cyl\033[0m\n");*/ + MSG_Add("PROGRAM_IMGMOUNT_INVALID_IMAGE","Could not load image file.\n" + "Check that the path is correct and the image is accessible.\n"); + MSG_Add("PROGRAM_IMGMOUNT_INVALID_GEOMETRY","Could not extract drive geometry from image.\n" + "Use parameter -size bps,spc,hpc,cyl to specify the geometry.\n"); + MSG_Add("PROGRAM_IMGMOUNT_AUTODET_VALUES","Image geometry auto detection: -size %u,%u,%u,%u\n"); + MSG_Add("PROGRAM_IMGMOUNT_TYPE_UNSUPPORTED","Type \"%s\" is unsupported. Specify \"hdd\" or \"floppy\" or \"iso\".\n"); + MSG_Add("PROGRAM_IMGMOUNT_FORMAT_UNSUPPORTED","Format \"%s\" is unsupported. Specify \"fat\" or \"iso\" or \"none\".\n"); + MSG_Add("PROGRAM_IMGMOUNT_SPECIFY_FILE","Must specify image file(s) to mount.\n"); + MSG_Add("PROGRAM_IMGMOUNT_FILE_NOT_FOUND","Image file not found.\n"); + MSG_Add("PROGRAM_IMGMOUNT_DEFAULT_NOT_FOUND","Image file not found: IMGMAKE.IMG.\n"); + MSG_Add("PROGRAM_IMGMOUNT_MOUNT","To mount directories, use the \033[34;1mMOUNT\033[0m command, not the \033[34;1mIMGMOUNT\033[0m command.\n"); + MSG_Add("PROGRAM_IMGMOUNT_ALREADY_MOUNTED","Drive already mounted at that letter.\n"); + MSG_Add("PROGRAM_IMGMOUNT_ALREADY_MOUNTED_NUMBER","Drive number %d already mounted.\n"); + MSG_Add("PROGRAM_IMGMOUNT_CANT_CREATE","Cannot create drive from file.\n"); + MSG_Add("PROGRAM_IMGMOUNT_CANT_CREATE_PHYSFS","Cannot create PhysFS drive.\n"); + MSG_Add("PROGRAM_IMGMOUNT_MOUNT_NUMBER","Drive number %d mounted as %s\n"); + MSG_Add("PROGRAM_IMGMOUNT_NON_LOCAL_DRIVE", "The image must be on a host, local or network drive.\n"); + MSG_Add("PROGRAM_IMGMOUNT_MULTIPLE_NON_CUEISO_FILES", "Using multiple files is only supported for cue/iso images.\n"); + MSG_Add("PROGRAM_IMGMOUNT_MULTIPLE_USED","Multiple images given and another drive already uses multiple images\n"); + MSG_Add("PROGRAM_IMGMOUNT_MULTIPLE_NOTSUPPORTED","Multiple disk images not supported for that drive\n"); + MSG_Add("PROGRAM_IMGMOUNT_HD_FDPOSITION","Cannot mount hard drive in floppy position.\n"); + MSG_Add("PROGRAM_IMGMOUNT_FD_HDPOSITION","Cannot mount floppy in hard drive position.\n"); + MSG_Add("PROGRAM_IMGMOUNT_NOT_ASSIGNED","BIOS disk index does not have an image assigned"); + MSG_Add("PROGRAM_IMGMOUNT_INVALID_NUMBER","Invalid mount number\n"); + MSG_Add("PROGRAM_IMGMOUNT_INVALID_FSTYPE","Invalid fstype\n"); + MSG_Add("PROGRAM_IMGMOUNT_INVALID_SIZE","Invalid size parameter\n"); + MSG_Add("PROGRAM_IMGMOUNT_NOT_MOUNTED_NUMBER","Drive number %d is not mounted.\n"); + MSG_Add("PROGRAM_IMGMOUNT_UMOUNT_USAGE", "Incorrect IMGMOUNT unmount usage.\n"); + MSG_Add("PROGRAM_IMGMOUNT_INVALID_LETTER","Invalid drive letter"); + MSG_Add("PROGRAM_IMGMOUNT_CHOOSE_LETTER", + "Partitions cannot be mounted in conflict with the standard INT 13h hard disk\n" + "allotment. Choose a different drive letter to mount to."); + MSG_Add("PROGRAM_IMGMOUNT_ELTORITO_NO_FILE", + "Do not specify files when mounting floppy drives from El Torito bootable CDs\n"); + MSG_Add("PROGRAM_IMGMOUNT_RAMDRIVE_NO_FILE", "Do not specify files when mounting RAM drives\n"); + MSG_Add("PROGRAM_IMGMOUNT_INVALID_SECTORSIZE", + "Sector size must be larger than 512 bytes and evenly divide the image cluster size of %lu bytes.\n"); + MSG_Add("PROGRAM_IMGMOUNT_OPEN_ERROR","Unable to open '%s'\n"); + MSG_Add("PROGRAM_IMGMOUNT_QCOW2_INVALID","qcow2 image '%s' is not supported\n"); + MSG_Add("PROGRAM_IMGMOUNT_GEOMETRY_ERROR", "Unable to detect geometry\n"); + MSG_Add("PROGRAM_IMGMOUNT_DOS_VERSION", + "Mounting this image file requires a reported DOS version of %u.%u or higher.\n%s"); + MSG_Add("PROGRAM_IMGMOUNT_INVALID_FLOPPYSIZE","Floppy size not recognized\n"); + + MSG_Add("PROGRAM_IMGMOUNT_HELP", + "Mounts floppy, hard drive and optical disc images.\n" + "\033[32;1mIMGMOUNT\033[0m \033[37;1mdrive\033[0m \033[36;1mfile\033[0m [-ro] [-t floppy] [-fs fat] [-size ss,s,h,c]\n" + "\033[32;1mIMGMOUNT\033[0m \033[37;1mdrive\033[0m \033[36;1mfile\033[0m [-ro] [-t hdd] [-fs fat] [-size ss,s,h,c] [-ide controller]\n" + "\033[32;1mIMGMOUNT\033[0m \033[37;1mdriveNum\033[0m \033[36;1mfile\033[0m [-ro] [-fs none] [-size ss,s,h,c] [-reservecyl #]\n" + "\033[32;1mIMGMOUNT\033[0m \033[37;1mdrive\033[0m \033[36;1mfile\033[0m [-t iso] [-fs iso]\n" + "\033[32;1mIMGMOUNT\033[0m \033[37;1mdrive\033[0m [-t floppy] -bootcd cdDrive (or -el-torito cdDrive)\n" + "\033[32;1mIMGMOUNT\033[0m \033[37;1mdrive\033[0m -t ram -size size\n" + "\033[32;1mIMGMOUNT\033[0m -u \033[37;1mdrive|driveNum\033[0m (or \033[32;1mIMGMOUNT\033[0m \033[37;1mdrive|driveNum\033[0m \033[36;1mfile\033[0m [options] -u)\n" + " \033[37;1mdrive\033[0m Drive letter to mount the image at.\n" + " \033[37;1mdriveNum\033[0m Drive number to mount, where 0-1 are FDDs, 2-5 are HDDs.\n" + " \033[36;1mfile\033[0m Image filename(s), or \033[33;1mIMGMAKE.IMG\033[0m if not specified.\n" + " -t iso Image type is optical disc iso or cue / bin image.\n" + " -t hdd|floppy|ram Image type is hard disk (inc. VHD/HDI)|floppy|RAM drive.\n" + " -fs iso Filesystem is ISO 9660 (auto-assumed for .iso/.cue files).\n" + " -fs fat Filesystem is FAT - FAT12, FAT16 and FAT32 are supported.\n" + " -fs none Do not detect filesystem (auto-assumed for drive numbers).\n" + " -reservecyl # Report # number of cylinders less than actual in BIOS.\n" + " -ide controller Specify IDE controller (1m, 1s, 2m, 2s) to mount drive.\n" + " -size size|ss,s,h,c Specify the size in KB, or sector size and CHS geometry.\n" + " -bootcd cdDrive Specify the CD drive to load the bootable floppy from.\n" + " -o partidx=# Specify a hard disk partition number to mount as drive.\n" + " -ro Mount image(s) read-only (or leading ':' for read-only).\n" + " -u Unmount the drive or drive number.\n" + " \033[32;1m-examples Show some usage examples.\033[0m" + ); + MSG_Add("PROGRAM_IMGMOUNT_EXAMPLE", + "Some usage examples of IMGMOUNT:\n\n" + " \033[32;1mIMGMOUNT\033[0m - list mounted FAT/ISO drives & drive numbers\n" + " \033[32;1mIMGMOUNT C\033[0m - mount hard disk image \033[33;1mIMGMAKE.IMG\033[0m as C:\n" +#ifdef WIN32 + " \033[32;1mIMGMOUNT C c:\\image.img\033[0m - mount hard disk image c:\\image.img as C:\n" + " \033[32;1mIMGMOUNT D c:\\files\\game.iso\033[0m - mount CD image c:\\files\\game.iso as D:\n" +#else + " \033[32;1mIMGMOUNT C ~/image.img\033[0m - mount hard disk image ~/image.img as C:\n" + " \033[32;1mIMGMOUNT D ~/files/game.iso\033[0m - mount CD image ~/files/game.iso as D:\n" +#endif + " \033[32;1mIMGMOUNT D cdaudio.cue\033[0m - mount cue file of a cue/bin pair as CD drive\n" + " \033[32;1mIMGMOUNT 0 dos.ima\033[0m - mount floppy image dos.ima as drive number 0\n" + " (\033[33;1mBOOT A:\033[0m will boot from drive if bootable)\n" + " \033[32;1mIMGMOUNT A -ro dos.ima\033[0m - mount floppy image dos.ima as A: read-only\n" + " \033[32;1mIMGMOUNT A :dsk1.img dsk2.img\033[0m - mount floppy images dsk1.img and dsk2.img as\n" + " A:, swappable via menu item \"Swap floppy\",\n" + " with dsk1.img read-only (but not dsk2.img)\n" + " \033[32;1mIMGMOUNT A -bootcd D\033[0m - mount bootable floppy A: from CD drive D:\n" + " \033[32;1mIMGMOUNT C -t ram -size 10000\033[0m - mount hard drive C: as a 10MB RAM drive\n" + " \033[32;1mIMGMOUNT D d.img -o partidx=4\033[0m - mount 1st logical partition of d.img as D:\n" + " \033[32;1mIMGMOUNT C disk.img -u\033[0m - force mount hard disk image disk.img as C:,\n" + " auto-unmount drive beforehand if necessary\n" + " \033[32;1mIMGMOUNT A -u\033[0m - unmount previously-mounted drive A:\n" + ); + MSG_Add("PROGRAM_IMGMAKE_SYNTAX", + "Creates floppy or hard disk images.\n" + "Usage: \033[34;1mIMGMAKE [file] [-t type] [[-size size] | [-chs geometry]] [-spc] [-nofs]\033[0m\n" + " \033[34;1m[-bat] [-fat] [-fatcopies] [-rootdir] [-force]" +#ifdef WIN32 + " [-source source] [-retries #]" +#endif + "\033[0m\n" + " file: Image file to create (or \033[33;1mIMGMAKE.IMG\033[0m if not set) - \033[31;1mpath on the host\033[0m\n" + " -t: Type of image.\n" + " \033[33;1mFloppy disk templates\033[0m (names resolve to floppy sizes in KB or fd=fd_1440):\n" + " fd_160 fd_180 fd_200 fd_320 fd_360 fd_400 fd_720 fd_1200 fd_1440 fd_2880\n" + " \033[33;1mHard disk templates:\033[0m\n" + " hd_250: 250MB, hd_520: 520MB, hd_1gig: 1GB, hd_2gig: 2GB, hd_4gig: 4GB,\n" + " hd_8gig: 8GB, hd_st251: 40MB, hd_st225: 20MB (geometry from old drives)\n" + " \033[33;1mCustom hard disks:\033[0m hd vhd (requires -size or -chs)\n" + " -size: Size of a custom hard disk image in MB (vhd: up to 2088960).\n" + " -chs: Disk geometry in cylinders(1-1023),heads(1-255),sectors(1-63).\n" + " -nofs: Add this parameter if a blank image should be created.\n" + " -force: Overwrite existing image file. -chs / -lba: Choose C/H/S or LBA.\n" + " -bat: Create a .bat file with the IMGMOUNT command required for this image.\n" + " -fat: Type (12, 16, or 32). -fatcopies: FAT table copies.\n" + " -spc: Sectors per cluster (must be power of 2). -label Drive label.\n" + " -rootdir: Root directory entries. -partofs: Start of hd partition.\n" + " -align: Align filesystem structures. In sectors, or add 'K' suffix for KB.\n" +#ifdef WIN32 + " -source: drive letter - if specified the image is read from a floppy disk.\n" + " -retries: how often to retry when attempting to read a bad floppy disk(1-99).\n" +#endif + " \033[32;1m-examples: Show some usage examples.\033[0m" + ); + MSG_Add("IMAGEMOUNT_CHANGE_DOSVER", "Mounting this type of disk images requires a reported DOS version of %s or higher.\n" + "Do you want to auto - change the reported DOS version to %s now and mount the disk image ? "); + MSG_Add("PROGRAM_IMGMAKE_EXAMPLE", + "Some usage examples of IMGMAKE:\n\n" + " \033[32;1mIMGMAKE -t fd\033[0m - create a 1.44MB floppy image \033[33;1mIMGMAKE.IMG\033[0m\n" + " \033[32;1mIMGMAKE -t fd_1440 -force\033[0m - force to create a floppy image \033[33;1mIMGMAKE.IMG\033[0m\n" + " \033[32;1mIMGMAKE dos.img -t fd_2880\033[0m - create a 2.88MB floppy image named dos.img\n" + " \033[32;1mIMGMAKE new.vhd -t vhd -size 520\033[0m- create a 520MB Dynamic VHD named new.vhd\n" +#ifdef WIN32 + " \033[32;1mIMGMAKE c:\\disk.img -t hd -size 50\033[0m - create a 50MB HDD image c:\\disk.img\n" + " \033[32;1mIMGMAKE c:\\disk.img -t hd_520 -nofs\033[0m - create a 520MB blank HDD image\n" + " \033[32;1mIMGMAKE c:\\disk.img -t hd_2gig -fat 32\033[0m - create a 2GB FAT32 HDD image\n" + " \033[32;1mIMGMAKE c:\\disk.img -t hd -chs 130,2,17\033[0m - create a HDD image of specified CHS\n" + " \033[32;1mIMGMAKE c:\\disk.img -source a\033[0m - read image from physical drive A:\n" +#else + " \033[32;1mIMGMAKE ~/disk.img -t hd -size 50\033[0m - create a 50MB HDD image ~/disk.img\n" + " \033[32;1mIMGMAKE ~/disk.img -t hd_520 -nofs\033[0m - create a 520MB blank HDD image\n" + " \033[32;1mIMGMAKE ~/disk.img -t hd_2gig -fat 32\033[0m - create a 2GB FAT32 HDD image\n" + " \033[32;1mIMGMAKE ~/disk.img -t hd -chs 130,2,17\033[0m - create a HDD image of specified CHS\n" +#endif + ); + +#ifdef WIN32 + MSG_Add("PROGRAM_IMGMAKE_FLREAD", + "Disk geometry: %d Cylinders, %d Heads, %d Sectors, %d Kilobytes\n\n"); + MSG_Add("PROGRAM_IMGMAKE_FLREAD2", + "%s =good, %s =good after retries, ! =CRC error, x =sector not found, ? =unknown\n\n"); +#endif + MSG_Add("PROGRAM_IMGMAKE_FILE_EXISTS","The file \"%s\" already exists. You can specify \"-force\" to overwrite.\n"); + MSG_Add("PROGRAM_IMGMAKE_CANNOT_WRITE","The file \"%s\" cannot be opened for writing.\n"); + MSG_Add("PROGRAM_IMGMAKE_NOT_ENOUGH_SPACE","Not enough space available for the image file. Need %llu bytes.\n"); + MSG_Add("PROGRAM_IMGMAKE_PRINT_CHS","Creating image file \"%s\" with %u cylinders, %u heads and %u sectors\n"); + MSG_Add("PROGRAM_IMGMAKE_CANT_READ_FLOPPY","\n\nUnable to read floppy."); + MSG_Add("PROGRAM_IMGMAKE_BADSIZE","Wrong -size or -chs arguments.\n"); + MSG_Add("PROGRAM_IMGMAKE_ALIGNMENT","Invalid alignment\n"); + MSG_Add("PROGRAM_IMGMAKE_PARTOFS", "Invalid -partofs\n"); + MSG_Add("PROGRAM_IMGMAKE_FAT","Invalid -fat option. Must be 12, 16, or 32\n"); + MSG_Add("PROGRAM_IMGMAKE_FATCOPIES","Invalid -fatcopies option\n"); + MSG_Add("PROGRAM_IMGMAKE_SPC","Invalid -spc option, out of range\n"); + MSG_Add("PROGRAM_IMGMAKE_SPC2","Invalid -spc option, must be a power of 2\n"); + MSG_Add("PROGRAM_IMGMAKE_ROOTDIR","Invalid -rootdir option\n"); + MSG_Add("PROGRAM_IMGMAKE_BOOTSECT", "Invalid bootsector position\n"); + MSG_Add("PROGRAM_IMGMAKE_VOLUME_ALIGN", "Sanity check failed: Volume size not aligned\n"); + MSG_Add("PROGRAM_IMGMAKE_FAT_ALIGN", "Sanity check failed: FAT tables not aligned\n"); + MSG_Add("PROGRAM_IMGMAKE_SECTPERFAT", "Error: Generated filesystem has more than 256 sectors per FAT and is not FAT32\n"); + MSG_Add("PROGRAM_IMGMAKE_VOLSIZE","Sanity check failed: Volume size not aligned\n"); + MSG_Add("PROGRAM_IMGMAKE_CLUSTERS","Error: Generated filesystem has too few clusters given the parameters\n"); + + MSG_Add("PROGRAM_IMGMAKE_CLUSTERCOUNT", "Warning: Cluster count is too high given the volume size. Reporting a\n smaller sector count.\n"); + MSG_Add("PROGRAM_IMGMAKE_CLUSTER_ALIGN","Sanity check failed: First cluster not aligned\n"); + MSG_Add("PROGRAM_IMGMAKE_CLUSTER_SIZE","WARNING: Cluster sizes >= 64KB are not compatible with MS-DOS and SCANDISK\n"); + + MSG_Add("PROGRAM_KEYB_INFO","Codepage %i has been loaded\n"); + MSG_Add("PROGRAM_KEYB_INFO_LAYOUT","Codepage %i has been loaded for layout %s\n"); + MSG_Add("PROGRAM_KEYB_SHOWHELP","Configures a keyboard for a specific language.\n\n" + "Usage: \033[32;1mKEYB\033[0m [keyboard layout ID [codepage number [codepage file]]]\n" + " layout ID Name of layout or keyboard file (.kl) to load\n" + " codepage number Number of codepage to load\n" + " codepage file .cpi/.cpx file including specified codepage information\n" + " (.kl, .cpi/.cpx files shall be placed under the directory where dosbox-x\n" + " executable exists.)\n\n" + "Some examples:\n" + " \033[32;1mKEYB\033[0m Display currently loaded codepage.\n" + " \033[32;1mKEYB sp\033[0m Load the Spanish (SP) layout, use an appropriate codepage.\n" + " \033[32;1mKEYB sp 850\033[0m Load the Spanish (SP) layout, use codepage 850.\n" + " \033[32;1mKEYB sp 850 mycp.cpi\033[0m Same as above, but use file mycp.cpi.\n" + " \033[32;1mKEYB sp_mod 850\033[0m Load keyboard layout from sp_mod.kl, use codepage 850.\n"); + MSG_Add("PROGRAM_KEYB_NOERROR","Keyboard layout %s loaded for codepage %i\n"); + MSG_Add("PROGRAM_KEYB_FILENOTFOUND","Keyboard file %s not found (or not a valid ID)\n\n"); + MSG_Add("PROGRAM_KEYB_INVALIDFILE","Keyboard file %s invalid\n"); + MSG_Add("PROGRAM_KEYB_LAYOUTNOTFOUND","No layout in %s for codepage %i\n"); + MSG_Add("PROGRAM_KEYB_INVCPFILE","None or invalid codepage file for layout %s\n\n"); + MSG_Add("INT21_6523_YESNO_CHARS", "yn"); + MSG_Add("PROGRAM_LABEL_HELP", "Creates, changes, or deletes the volume label of a drive.\n\nLABEL [drive:][label]\n\n [drive:]\tSpecifies the drive letter\n [label]\tSpecifies the volume label\n"); + MSG_Add("PROGRAM_LABEL_DELETE", "Delete the volume label (Y/N)? "); + MSG_Add("PROGRAM_LABEL_TOOLONG", "Label is too long (more than 11 characters).\n"); + MSG_Add("PROGRAM_LABEL_BADCHARS", "Label has invalid characters.\n"); + MSG_Add("PROGRAM_LABEL_VOLUMEIS", "Volume in drive %c is %s\n"); + MSG_Add("PROGRAM_LABEL_NOLABEL", "Volume in drive %c has no label\n"); + MSG_Add("PROGRAM_MODE_USAGE","Configures system devices.\n\n" + "\033[34;1mMODE\033[0m display-type :display-type codes are " + "\033[1mCO80\033[0m, \033[1mBW80\033[0m, \033[1mCO40\033[0m, \033[1mBW40\033[0m, or \033[1mMONO\033[0m\n" + "\033[34;1mMODE CON COLS=\033[0mc \033[34;1mLINES=\033[0mn :columns and lines, c=80 or 132, n=25, 43, 50, or 60\n" + "\033[34;1mMODE CON RATE=\033[0mr \033[34;1mDELAY=\033[0md :typematic rates, r=1-32 (32=fastest), d=1-4 (1=lowest)\n"); + MSG_Add("PROGRAM_MODE_INVALID_PARAMETERS","Invalid parameter(s).\n"); + MSG_Add("PROGRAM_MODE_STATUS", + "Status for device CON:\n----------------------\nColumns=%d\nLines=%d\n"); + MSG_Add("PROGRAM_MODE_NOTSUPPORTED","\nCode page operation not supported on this device\n"); + MSG_Add("PROGRAM_MODE_RATE_DELAY","Rate and delay must be specified together\n"); + + MSG_Add("PROGRAM_PORT_INVALID_NUMBER","Must specify a port number between 1 and 9.\n"); + MSG_Add("PROGRAM_VHDMAKE_WRITERR", "Could not write to new VHD image \"%s\", aborting.\n"); + MSG_Add("PROGRAM_VHDMAKE_REMOVEERR", "Could not erase file \"%s\"\n"); + MSG_Add("PROGRAM_VHDMAKE_RENAME", "You'll have to manually rename the newly created VHD image.\n"); + MSG_Add("PROGRAM_VHDMAKE_SUCCESS", "New VHD image successfully created. You can mount it with \033[34;1mIMGMOUNT\033[0m.\n"); + MSG_Add("PROGRAM_VHDMAKE_ERROPEN", "Error, could not open image file \"%s\".\n"); + MSG_Add("PROGRAM_VHDMAKE_BADSIZE", "Bad VHD size specified, aborting!\n"); + MSG_Add("PROGRAM_VHDMAKE_FNEEDED", "A pre-existing VHD image can't be silently overwritten without -f option!\n"); + MSG_Add("PROGRAM_VHDMAKE_BADPARENT", "The parent VHD image \"%s\" can't be opened for linking, aborting!\n"); + MSG_Add("PROGRAM_VHDMAKE_NOINFO", "Couldn't query info for \"%s\".\n"); + MSG_Add("PROGRAM_VHDMAKE_BLOCKSTATS", " with %d/%d blocks allocated.\n"); + MSG_Add("PROGRAM_VHDMAKE_INFO", "VHD \"%s\" type is %s.\nIts virtual size is %.02f MB"); + MSG_Add("PROGRAM_VHDMAKE_CANTMERGE", "%s is not a Differencing disk, can't merge!\n"); + MSG_Add("PROGRAM_VHDMAKE_MERGEREPORT", "%d sectors in %d blocks from \"%s\" merged into \"%s\".\n"); + MSG_Add("PROGRAM_VHDMAKE_MERGENODELETE", "Couldn't remove snapshot \"%s\", you'll have to do it yourself!"); + MSG_Add("PROGRAM_VHDMAKE_MERGEOKDELETE", "Snapshot VHD merged and deleted.\n"); + MSG_Add("PROGRAM_VHDMAKE_MERGEFAILED", "Failure while merging, aborted!\n"); + MSG_Add("PROGRAM_VHDMAKE_MERGEWARNCORRUPTION", " Parent \"%s\" contents could be corrupted!\n"); + MSG_Add("PROGRAM_VHDMAKE_ABSPATH", "Warning: an absolute path to parent prevents portability.\nPlease prefer a path relative to the differencing image file!\n"); + MSG_Add("PROGRAM_VHDMAKE_HELP", + "Creates Dynamic or Differencing VHD images, converts raw images into Fixed VHD,\n" + "shows information about VHD images and merges them.\n" + "\033[32;1mVHDMAKE\033[0m [-f] new.vhd size[BKMGT]\n" + "\033[32;1mVHDMAKE\033[0m \033[34;1m-convert\033[0m raw.hdd new.vhd\n" + "\033[32;1mVHDMAKE\033[0m [-f] \033[34;1m-link\033[0m parent.vhd new.vhd\n" + "\033[32;1mVHDMAKE\033[0m \033[34;1m-merge\033[0m delta.vhd\n" + "\033[32;1mVHDMAKE\033[0m \033[34;1m-info\033[0m a.vhd\n" + " -c | -convert convert a raw hd image to Fixed VHD, renaming it to new.vhd\n" + " -l | -link create a new Differencing VHD new.vhd and link it to the\n" + " pre-existing parent image parent.vhd\n" + " -f | -force force overwriting a pre-existing image file\n" + " -i | -info show useful information about a.vhd image\n" + " -m | -merge merge differencing delta.vhd to its parent\n" + " new.vhd name of the new Dynamic VHD image to create\n" + " size disk size (eventually with size unit, Bytes is implicit)\n" + "When converting a raw disk image to Fixed VHD, it has to be partitioned with\n" + "MBR scheme and formatted with FAT format.\n" + "When creating a Dynamic VHD, its size must range from 3 MB to 2040 GB.\n" + "The Dynamic VHD created is not partitioned nor formatted: to directly mount to\n" + "a drive letter with \033[34;1mIMGMOUNT\033[0m, please consider using \033[34;1mIMGMAKE\033[0m instead.\n" + "A merged snapshot VHD is automatically deleted if merge is successful.\n"); + MSG_Add("PROGRAM_COLOR_HELP", + "Sets the default console foreground and background colors.\n\n" + "COLOR [attr]\n\n" + " attr Specifies color attribute of console output\n\n" + "Color attributes are specified by TWO hex digits -- the first\n" + "corresponds to the background; the second to the foreground.\n" + "Each digit can be any of the following values:\n\n" + " 0 = Black 8 = Gray\n" + " 1 = Blue 9 = Light Blue\n" + " 2 = Green A = Light Green\n" + " 3 = Aqua B = Light Aqua\n" + " 4 = Red C = Light Red\n" + " 5 = Purple D = Light Purple\n" + " 6 = Yellow E = Light Yellow\n" + " 7 = White F = Bright White\n\n" + "If no argument is given, this command restores the original color.\n\n" + "The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute\n" + "the COLOR command with a foreground and background color that are the same.\n\n" + "Example: \"COLOR fc\" produces light red on bright white\n"); + MSG_Add("PROGRAM_FLAGSAVE_UNFLAGALL","All files unflagged for saving.\n"); + MSG_Add("PROGRAM_FLAGSAVE_UNFLAGGED","File %s unflagged for saving.\n"); + MSG_Add("PROGRAM_FLAGSAVE_FLAGGED","File already flagged for saving - %s\n"); + MSG_Add("PROGRAM_FLAGSAVE_TOOMANY","Too many files to flag for saving.\n"); + MSG_Add("PROGRAM_FLAGSAVE_SAVED","File %s flagged for saving\n"); + MSG_Add("PROGRAM_FLAGSAVE_LIST","Files flagged for saving:\n"); + MSG_Add("PROGRAM_FLAGSAVE_HLP","Marks or flags files to be saved for the save state feature.\n\n" + "FLAGSAVE [file(s) [/F] [/R]] [/U]\n\n" + " file(s) Specifies one or more files to be flagged for saving.\n" + " /F Forces to flag the file(s) even if they are not found.\n" + " /R Removes flags from the specified file(s).\n" + " /U Removes flags from all flagged files.\n\n" + "Type FLAGSAVE without a parameter to list flagged files.\n"); + MSG_Add("PROGRAM_INT2FDBG_NOT_SET","INT 2Fh hook has not been set.\n"); + MSG_Add("PROGRAM_INT2FDBG_ALREADY","INT 2Fh hook has already been set.\n"); + MSG_Add("PROGRAM_INT2FDBG_HELP","Hooks INT 2Fh for debugging purposes.\n\n" + "INT2FDBG [option]\n /I Installs hook\n\n" + "It will hook INT 2Fh at the top of the call chain for debugging information.\n\n" + "Type INT2FDBG without a parameter to show the current hook status.\n"); + MSG_Add("PROGRAM_SET80x25","Changes to 80x25 text mode.\n"); + MSG_Add("PROGRAM_SET80x43","Changes to 80x43 text mode.\n"); + MSG_Add("PROGRAM_SET80x50","Changes to 80x50 text mode.\n"); + MSG_Add("PROGRAM_SET80x60","Changes to 80x60 text mode.\n"); + MSG_Add("PROGRAM_SET132x25","Changes to 132x25 text mode.\n"); + MSG_Add("PROGRAM_SET132x43","Changes to 132x43 text mode.\n"); + MSG_Add("PROGRAM_SET132x50","Changes to 132x50 text mode.\n"); + MSG_Add("PROGRAM_SET132x60","Changes to 132x60 text mode.\n"); + MSG_Add("PROGRAM_DELTREE_HELP", + "Deletes a directory and all the subdirectories and files in it.\n\n" + "To delete one or more files and directories:\n" + "DELTREE [/Y] [drive:]path [[drive:]path[...]]\n\n" + " /Y Suppresses prompting to confirm you want to delete\n" + " the subdirectory.\n" + " [drive:]path Specifies the name of the directory you want to delete.\n\n" + "Note: Use DELTREE cautiously. Every file and subdirectory within the\n" + "specified directory will be deleted.\n"); + MSG_Add("PROGRAM_TREE_HELP", + "Graphically displays the directory structure of a drive or path.\n\n" + "TREE [drive:][path] [/F] [/A]\n\n" + " /F Displays the names of the files in each directory.\n" + " /A Uses ASCII instead of extended characters.\n"); + MSG_Add("PROGRAM_TITLE_HELP", + "Sets the window title for the DOSBox-X window.\n\n" + "TITLE [string]\n\n" + " string Specifies the title for the DOSBox-X window.\n"); + MSG_Add("PROGRAM_CFGTOOL_HELP", + "Starts DOSBox-X's graphical configuration tool.\n\n" + "CFGTOOL\n\n" + "Note: You can also use CONFIG command for command-line configurations.\n"); + MSG_Add("PROGRAM_IMGSWAP_HELP", + "Swaps floppy, hard drive and optical disc images.\n\n" + "\033[32;1mIMGSWAP\033[0m \033[37;1mdrive\033[0m \033[36;1m[position]\033[0m\n" + " \033[37;1mdrive\033[0m Drive letter to swap the image.\n" + " \033[36;1m[position]\033[0m Disk position to swap to.\n"); + MSG_Add("PROGRAM_INTRO_HELP", + "A full-screen introduction to DOSBox-X.\n\nINTRO [/RUN] [CDROM|MOUNT|USAGE|WELCOME]\n"); + MSG_Add("PROGRAM_ELTORITO_LETTER","El Torito emulation requires a proper CD-ROM drive letter\n"); + MSG_Add("PROGRAM_ELTORITO_DRIVE_EXISTS","El Torito CD-ROM drive specified already exists as a non-CD-ROM device\n"); + MSG_Add("PROGRAM_ELTORITO_NOT_CDDRIVE","El Torito CD-ROM drive specified is not actually a CD-ROM drive\n"); + MSG_Add("PROGRAM_ELTORITO_REQUIRE_FLOPPY","El Torito emulation must be used with -t floppy at this time\n"); + MSG_Add("PROGRAM_ELTORITO_NO_BOOT_RECORD","El Torito CD-ROM boot record not found\n"); + MSG_Add("PROGRAM_ELTORITO_ENTRY_UNREADABLE","El Torito entries unreadable\n"); + MSG_Add("PROGRAM_ELTORITO_NO_BOOTABLE_FLOPPY","El Torito bootable floppy not found\n"); + MSG_Add("PROGRAM_ELTORITO_BOOTABLE_SECTION","Unable to locate bootable section\n"); + MSG_Add("PROGRAM_ELTORITO_BOOTSECTOR","El Torito boot sector unreadable\n"); + MSG_Add("PROGRAM_ELTORITO_ISOMOUNT","El Torito bootable CD: -fs iso mounting not supported\n"); + + MSG_Add("PROGRAM_START_HELP_WIN", + "Starts a separate window to run a specified program or command.\n\n" + "START [+|-|_] command [arguments]\n\n" + " [+|-|_]: To maximize/minimize/hide the program.\n" + " The options /MAX, /MIN, /HID are also accepted.\n" + " command: The command, program or file to start.\n" + " arguments: Arguments to pass to the application.\n\n" + "START opens the Windows command prompt automatically to run these commands\n" + "and wait for a key press before exiting (specified by \"startincon\" option):\n%s\n\n" + "Note: The path specified in this command is the path on the host system.\n"); + MSG_Add("PROGRAM_START_HELP", + "Starts a separate window to run a specified program or command.\n\n" + "START /OPEN file\nSTART command [arguments]\n\n" + " /OPEN: To open a file or URL with the associated program.\n" + " file: The file or URL to open with the associated program.\n" + " command: The command or program to start or run.\n" + " arguments: Arguments to pass to the application.\n\n" + "Note: The path specified in this command is the path on the host system.\n"); + MSG_Add("PROGRAM_START_COMPLETED", "The command execution is completed."); + MSG_Add("PROGRAM_START_COMMAND", "Starting %s...\n"); + MSG_Add("PROGRAM_START_CTRLC", "(Press Ctrl+C to exit immediately)\n"); + MSG_Add("PROGRAM_START_HOST_ERROR", "Error: START cannot launch application to run on your current host system.\n"); + MSG_Add("PROGRAM_START_LAUNCH_ERROR", "Error: START could not launch application.\n"); + MSG_Add("PROGRAM_UTF8_HELP", + "Converts UTF-8 text to view in the current code page.\n\n" + "UTF8 < [drive:][path]filename\ncommand-name | UTF8\n"); + MSG_Add("PROGRAM_UTF8_NO_TEXT","No input text found.\n"); + MSG_Add("PROGRAM_UTF8_INVALIDCP","Invalid code page for text conversion.\n"); + MSG_Add("PROGRAM_UTF8_NOT_UTF8","The input text is UTF-16.\n"); + MSG_Add("PROGRAM_UTF8_CONVERSION_ERROR","An error occurred during text conversion.\n"); + MSG_Add("PROGRAM_UTF16_HELP", + "Converts UTF-16 text to view in the current code page.\n\n" + "UTF16 [/BE|/LE] < [drive:][path]filename\ncommand-name | UTF16 [/BE|/LE]\n\n" + " /BE Use UTF-16 Big Endian\n /LE Use UTF-16 Little Endian\n"); + MSG_Add("PROGRAM_VTEXT_HELP", "Changes V-text mode for the DOS/V emulation.\n\n" + "VTEXT [mode]\n\n[mode] can be 0, 1, 2, for no V-text, V-text 1, and V-text 2 respectively.\n\n" + "Type VTEXT without a parameter to show the current V-text mode status.\n"); + MSG_Add("PROGRAM_NMITEST_HELP", "Generates a non-maskable interrupt (NMI).\n\n" + "NMITEST\n\nNote: This is a debugging tool to test if the interrupt handler works properly.\n"); + MSG_Add("PROGRAM_NMITEST_GENERATE_NMI","Generating a non-maskable interrupt (NMI)...\n"); + MSG_Add("PROGRAM_CAPMOUSE_HELP","Captures or releases the mouse inside DOSBox-X.\n\n" + "CAPMOUSE [/C|/R]\n" + " /C Capture the mouse\n" + " /R Release the mouse\n"); + MSG_Add("PROGRAM_CAPMOUSE_MOUSE", "Mouse "); + MSG_Add("PROGRAM_CAPMOUSE_CURRENTLY", "is currently "); + MSG_Add("PROGRAM_CAPMOUSE_CAPTURED", "captured"); + MSG_Add("PROGRAM_CAPMOUSE_RELEASED", "released"); + MSG_Add("PROGRAM_AUTOTYPE_HELP", + "Performs scripted keyboard entry into a running DOS program.\n\n" + "AUTOTYPE [-list] [-w WAIT] [-p PACE] button_1 [button_2 [...]]\n\n" + "Where:\n" + " -list: prints all available button names.\n" + " -w WAIT: seconds before typing begins. Two second default; max of 30.\n" + " -p PACE: seconds between each keystroke. Half-second default; max of 10.\n\n" + " The sequence is comprised of one or more space-separated buttons.\n" + " Autotyping begins after WAIT seconds, and each button is entered\n" + " every PACE seconds. The , character inserts an extra PACE delay.\n\n" + "Some examples:\n" + " \033[32;1mAUTOTYPE -w 1 -p 0.3 up enter , right enter\033[0m\n" + " \033[32;1mAUTOTYPE -p 0.2 f1 kp_8 , , enter\033[0m\n" + " \033[32;1mAUTOTYPE -w 1.3 esc enter , p l a y e r enter\033[0m\n"); + MSG_Add("PROGRAM_AUTOTYPE_NO_BINDINGS","AUTOTYPE: The mapper has no key bindings\n"); + MSG_Add("PROGRAM_AUTOTYPE_CLAMP_VALUE", "AUTOTYPE: bounding %s value of %.2f to %.2f\n"); + MSG_Add("PROGRAM_AUTOTYPE_INVALID_VALUE", + "AUTOTYPE: %s value '%s' is not a valid floating point number\n"); + MSG_Add("PROGRAM_ADDKEY_HELP", "Generates artificial keypresses.\n\n" + "ADDKEY [pmsec] [key]\n\n" + "For example, the command below types \"dir\" followed by ENTER after 1 second:\n\n" + "ADDKEY p1000 d i r enter\n\n" + "You could also try AUTOTYPE command instead of this command to perform\n" + "scripted keyboard entry into a running DOS program.\n"); + MSG_Add("PROGRAM_SETCOLOR_HELP", "Views or changes the text-mode color scheme settings.\n\n" + "SETCOLOR [color# [value]]\n\nFor example:\n\n SETCOLOR 0 (50,50,50)\n\n" + "Change Color #0 to the specified color value\n\n SETCOLOR 7 -\n\n" + "Return Color #7 to the default color value\n\n SETCOLOR 3 +\n\n" + "Return Color #3 to the preset color value\n\n SETCOLOR MONO\n\n" + "Display current MONO mode status\n\n" + "To change the current background and foreground colors, use COLOR command.\n"); + MSG_Add("PROGRAM_SETCOLOR_STATUS","MONO mode status: %s (video mode %d)\n"); + MSG_Add("PROGRAM_SETCOLOR_ACTIVE","active"); + MSG_Add("PROGRAM_SETCOLOR_INACTIVE","inactive"); + MSG_Add("PROGRAM_SETCOLOR_UNAVAILABLE","unavailable"); + MSG_Add("PROGRAM_SETCOLOR_MONO_MODE7","MONO mode status => active (video mode 7)\n"); + MSG_Add("PROGRAM_SETCOLOR_MONO_MODE3","MONO mode status => inactive (video mode 3)\n"); + MSG_Add("PROGRAM_SETCOLOR_MONO_FAIL","Failed to change MONO mode\n"); + MSG_Add("PROGRAM_SETCOLOR_MONO_SYNTAX","Must be + or - for MONO: %s\n"); + MSG_Add("PROGRAM_SETCOLOR_COLOR","Color %d: (%d,%d,%d) or #%02x%02x%02x\n"); + MSG_Add("PROGRAM_SETCOLOR_INVALID_NUMBER","Invalid color number - %s\n"); + MSG_Add("PROGRAM_SETCOLOR_INVALID_VALUE","Invalid color value - %s\n"); + MSG_Add("PROGRAM_SETCOLOR_NOT_SUPPORTED","Changing color scheme is not supported for the current video mode.\n"); + MSG_Add("PROGRAM_SWITCH_LANG", "You have changed the active code page to %d. Do you want to load language file %s for this code page ?"); + MSG_Add("PROGRAM_ALREADY_MOUNTED", "Drive %s: is already mounted. Unmount it first, and then try again."); + MSG_Add("PROGRAM_DRIVE_NO_EXIST", "Drive %s: does not exist in the system."); + MSG_Add("PROGRAM_DRIVE_WARN", "Do you really want to give DOSBox-X access to your real %s drive %s ?"); + MSG_Add("DRIVE_TYPE_FLOPPY", "floppy"); + MSG_Add("DRIVE_TYPE_REMOVABLE", "removable"); + MSG_Add("DRIVE_TYPE_NETWORK", "network"); + MSG_Add("DRIVE_TYPE_HARD", "hard"); + MSG_Add("DRIVE_TYPE_LOCAL", "local"); + MSG_Add("DRIVE_TYPE_CDROM", "CD-ROM"); + MSG_Add("PROGRAM_CDDRIVE_WARN", "CD drive %s is currently mounted with the image:\n\n" + "%s\n\nDo you want to change the CD image now?"); + MSG_Add("PROGRAM_CDMOUNT_ERROR", "Could not mount the selected CD image."); + MSG_Add("ELTORITO_IMAGE","El Torito floppy image"); + MSG_Add("RAM_FLOPPY_IMAGE","RAM floppy image"); + MSG_Add("PROGRAM_FLOPPY_WARN", "Floppy drive %s is currently mounted with the image:\n\n" + "%s\n\nDo you want to change the floppy disk image now?"); + MSG_Add("PROGRAM_FLOPPYMOUNT_ERROR","Could not mount the selected floppy disk image."); + MSG_Add("PROGRAM_MOUNT_MORE_IMAGES", "Do you want to mount more image file(s)?"); + MSG_Add("PROGRAM_MOUNT_PATH_TOOLONG","The path for the file(s) to mount is too long."); + MSG_Add("PROGRAM_BOOT_FAILED","Drive %s: failed to boot."); + MSG_Add("PROGRAM_MOUNT_FAILED","Drive %s: failed to mount."); + MSG_Add("PROGRAM_MOUNT_IMAGE","Mounted %s to Drive %s:\n%s %s"); + MSG_Add("ARCHIVE","archive"); + MSG_Add("DISK_IMAGE","disk image"); + MSG_Add("READONLY_MODE", "Read-only mode"); + MSG_Add("PROGRAM_MOUNT_SELECT_DRIVE","Select a drive/directory to mount for Drive %s: as %s"); + MSG_Add("PROGRAM_MOUNT_CDROM_SUPPORT","Mounting a directory as CD-ROM gives an limited support"); + MSG_Add("PROGRAM_MOUNT_NOT_MOUNTED", "Drive %s: is not yet mounted."); + MSG_Add("PROGRAM_PROGRAM_ALREADY", "Another program is already running."); + MSG_Add("PROGRAM_SHELL_ALREADY", "Another shell is currently running."); + MSG_Add("PROGRAM_MOUNT_SUCCESS","Drive %s is now mounted to:\n%s"); + MSG_Add("PROGRAM_WARN_QUICKLAUNCH", "Quick launch automatically mounts drive C in DOSBox-X.\n" + "Drive C has already been mounted. Do you want to continue?"); + MSG_Add("PROGRAM_NO_EXECUTABLE", "Executable file not found."); + MSG_Add("PROGRAM_EXEC_FINISHED", "Program has finished execution. Do you want to unmount Drive %s now?"); + MSG_Add("PROGRAM_ASK_CHCP","Drive %c: may require code page %d to be properly accessed.\n\n" + "Do you want to change the current code page to %d now?\n"); + MSG_Add("PROGRAM_CHANGING_CODEPAGE","Changing code page"); + MSG_Add("MENU_DRIVE_NOTEXIST", "Drive does not exist or is mounted from disk image."); + MSG_Add("MENU_SAVE_IMAGE_FAILED","Failed to save disk image."); + MSG_Add("MENU_JP_CPONLY","This function is only available for the Japanese code page (932)."); + MSG_Add("MENU_CH_CPONLY","This function is only available for the Chinese code pages (936, 950, or 951)."); + MSG_Add("MENU_GLIDE_ERROR","Glide passthrough cannot be enabled. Check the Glide wrapper installation."); + MSG_Add("MENU_HIGH_INTENSITY_ERROR", "High intensity is not supported for the current video mode."); + MSG_Add("MENU_SAVE_FILE_ERROR","Cannot save to the file: %s"); + MSG_Add("MENU_INT2F_SUCCESS","The INT 2Fh hook has been successfully set."); + MSG_Add("MENU_INT2F_ALREADY_SET","The INT 2Fh hook was already set up."); + MSG_Add("QUIT_DISABLED","Quitting from DOSBox-X with this is currently disabled."); + MSG_Add("QUIT_CONFIRM","This will quit from DOSBox-X.\nAre you sure?"); + MSG_Add("QUIT_GUEST_DISABLED","You cannot quit DOSBox-X while running a guest system."); + MSG_Add("QUIT_GUEST_CONFIRM", "You are currently running a guest system.\nAre you sure to quit anyway now?"); + MSG_Add("QUIT_FILE_OPEN_DISABLED","You cannot quit DOSBox-X while one or more files are open."); + MSG_Add("QUIT_FILE_OPEN_CONFIRM", "It may be unsafe to quit from DOSBox-X right now\n" + "because one or more files are currently open.\nAre you sure to quit anyway now?"); + MSG_Add("QUIT_PROGRAM_DISABLED","You cannot quit DOSBox-X while running a program or game."); + MSG_Add("QUIT_PROGRAM_CONFIRM","You are currently running a program or game.\nAre you sure to quit anyway now?"); + MSG_Add("SCALER_LOAD_WARN","This scaler may not work properly or have undesired effect:\n\n%s\n\n" + "Do you want to force load the scaler?"); + MSG_Add("PIXEL_SHADER_WARN","This pixel shader may be unneeded or have undesired effect:\n\n%s\n\n" + "Do you want to load the pixel shader anyway?\n\n" + "(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message)"); + MSG_Add("PIXEL_SHADER_LOADED", "Loaded pixel shader - %s"); + MSG_Add("MAPPEREDITOR_NOT_AVAILABLE","Mapper Editor is not currently available."); + MSG_Add("OPL_REC_COMPLETED","Saved Raw OPL output to the file:\n\n%s"); + MSG_Add("OPL_CAPTURE_FAILED","Cannot capture Raw OPL output because ESFM native mode is being used by the current " + "application, which is not supported by the Raw OPL format."); + MSG_Add("TTF_DBCS_ONLY","This function is only available for the Chinese/Japanese/Korean code pages."); + MSG_Add("SAVE_FAILED","Failed to save the current state."); + MSG_Add("SAVE_CORRUPTED","Save state corrupted! Program may not work."); + MSG_Add("SAVE_SCREENSHOT","Saved screenshot to the file:\n\n%s"); + + const Section_prop * dos_section=static_cast(control->GetSection("dos")); + hidefiles = dos_section->Get_string("drive z hide files"); + + /*regular setup*/ + Add_VFiles(false); + +#if WIN32 + if (dos_section->Get_bool("automount drive directories")) { + Add_Existing_Drive_Directories(); + } +#endif +} diff --git a/src/dos/dos_tables.cpp b/src/dos/dos_tables.cpp index 0e958f9423b..d2523751ed7 100644 --- a/src/dos/dos_tables.cpp +++ b/src/dos/dos_tables.cpp @@ -30,7 +30,9 @@ extern int maxfcb; extern bool gbk, chinasea; extern Bitu DOS_PRIVATE_SEGMENT_Size; +#if !defined(OSFREE) extern uint16_t desired_ems_segment; +#endif extern bool private_segment_write_protect; #if defined(USE_TTF) extern bool ttf_dosv; @@ -96,13 +98,17 @@ void DOS_GetMemory_unmap() { } } +#if !defined(OSFREE) bool DOS_User_Wants_UMBs() { const Section_prop* section = static_cast(control->GetSection("dos")); return section->Get_bool("umb"); } +#endif +#if !defined(OSFREE) bool EMS_Active(void); void Update_Get_Desired_Segment(void); +#endif /* Some DOS games and demoscene stuff has fast and loose VRAM rendering code that can spill * past video RAM into whatever follows in C0000h. If the DOSBox private area is there, then @@ -124,14 +130,17 @@ void DOS_GetMemory_Choose() { /* NTS: Code has been arranged so that DOS kernel init follows BIOS INT10h init */ DOS_PRIVATE_SEGMENT=(uint16_t)VGA_BIOS_SEG_END; +#if !defined(OSFREE) if (desired_ems_segment == 0) Update_Get_Desired_Segment(); if (DOS_PRIVATE_SEGMENT == desired_ems_segment) { DOS_PRIVATE_SEGMENT += 0x1000; // FIXME } +#endif DOS_PRIVATE_SEGMENT_END= (uint16_t)(DOS_PRIVATE_SEGMENT + DOS_PRIVATE_SEGMENT_Size); +#if !defined(OSFREE) if (IS_PC98_ARCH && (desired_ems_segment == 0xD000)) { bool PC98_FM_SoundBios_Enabled(void); @@ -157,6 +166,7 @@ void DOS_GetMemory_Choose() { if (DOS_PRIVATE_SEGMENT >= DOS_PRIVATE_SEGMENT_END) E_Exit("Insufficient room in upper memory area for private area"); } +#endif if (DOS_PRIVATE_SEGMENT >= 0xA000) { memset(GetMemBase()+((Bitu)DOS_PRIVATE_SEGMENT<<4u),0x00,(Bitu)(DOS_PRIVATE_SEGMENT_END-DOS_PRIVATE_SEGMENT)<<4u); @@ -250,6 +260,7 @@ PhysPt DOS_Get_DPB(unsigned int dos_drive) { return PhysMake(dos.tables.dpb,dos_drive*dos.tables.dpb_size); } +#if !defined(OSFREE) void SetupDBCSTable() { if (enable_dbcs_tables) { if (!dos.tables.dbcs) dos.tables.dbcs=RealMake(DOS_GetMemory(12,"dos.tables.dbcs"),0); @@ -288,6 +299,7 @@ void SetupDBCSTable() { if(dos.loaded_codepage == 950 && !chinasea) makestdcp950table(); else if(dos.loaded_codepage == 951 && chinasea) makeseacp951table(); } +#endif uint16_t seg_win_startup_info; @@ -301,6 +313,25 @@ void DOS_SetupTables(void) { /* create SDA */ DOS_SDA(DOS_SDA_SEG,0).Init(); + /* For Tandy emulation, put the string "Tandy" somewhere in the DOS kernel. + * "The Train: Escape to Normandy" apparently detects Tandy hardware by + * whether or not the string "Tandy" appears in the first 64KB of base + * memory. [https://github.com/joncampbell123/dosbox-x/issues/5918]. + * + * It does a REPNE SCASB in FFFF:0000 for the string "Tandy", which on the + * older hardware, wraps around to the base memory and finds it that way. + * Of course if you're on a 286 Tandy and the HMA is enabled, this isn't + * going to work, but, that's what the game does. */ + if(machine == MCH_TANDY) { + seg = DOS_GetMemory(8,"Tandy signature"); + real_writeb(seg,0x00,'T'); + real_writeb(seg,0x01,'a'); + real_writeb(seg,0x02,'n'); + real_writeb(seg,0x03,'d'); + real_writeb(seg,0x04,'y'); + real_writeb(seg,0x05,0); + } + /* create a CON device driver */ if(IS_DOSV) { seg = DOS_GetMemory(2, "device $IBMADSP"); @@ -356,10 +387,13 @@ void DOS_SetupTables(void) { real_writed(seg,0x00,0x005c3a43); dos_infoblock.SetCurDirStruct(RealMake(seg,0)); - /* Allocate DBCS DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE */ - dos.tables.dbcs = 0; - SetupDBCSTable(); + /* Allocate DBCS DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE */ + dos.tables.dbcs = 0; +#if !defined(OSFREE) + SetupDBCSTable(); +#endif +#if !defined(OSFREE) /* FILENAME CHARACTER TABLE */ if (enable_filenamechar) { dos.tables.filenamechar=RealMake(DOS_GetMemory(2,"dos.tables.filenamechar"),0); @@ -387,9 +421,13 @@ void DOS_SetupTables(void) { mem_writeb(Real2Phys(dos.tables.filenamechar)+0x16,0x3b); mem_writeb(Real2Phys(dos.tables.filenamechar)+0x17,0x2c); } - else { + else +#endif + { dos.tables.filenamechar = 0; } + +#if !defined(OSFREE) /* COLLATING SEQUENCE TABLE + UPCASE TABLE*/ // 256 bytes for col table, 128 for upcase, 4 for number of entries if (enable_collating_uppercase) { @@ -400,7 +438,9 @@ void DOS_SetupTables(void) { mem_writew(Real2Phys(dos.tables.upcase),0x80); for (i=0; i<128; i++) mem_writeb(Real2Phys(dos.tables.upcase)+i+2,(uint8_t)0x80+i); } - else { + else +#endif + { dos.tables.collatingseq = 0; dos.tables.upcase = 0; } @@ -437,7 +477,7 @@ void DOS_SetupTables(void) { dos_infoblock.SetFirstDPB(RealMake(dos.tables.dpb,0)); /* Create Device command packet area */ - dos.dcp = DOS_GetMemory(3, "External device command packet"); + dos.dcp = DOS_GetMemory(dos.dcp_size_seg, "External device command packet"); /* Create a fake disk buffer head */ seg=DOS_GetMemory(6,"Fake disk buffer head"); diff --git a/src/dos/drive_cache.cpp b/src/dos/drive_cache.cpp index 13b84ca226c..797a90e156a 100644 --- a/src/dos/drive_cache.cpp +++ b/src/dos/drive_cache.cpp @@ -156,9 +156,9 @@ void DOS_Drive_Cache::SetBaseDir(const char* baseDir, DOS_Drive *drive) { #else // OS2 //TODO determine whether cdrom or not! FSINFO fsinfo; - ULONG drivenumber = drive[0]; + ULONG drivenumber = drives[0]; if (drivenumber > 26) { // drive letter was lowercase - drivenumber = drive[0] - 'a' + 1; + drivenumber = drives[0] - 'a' + 1; } APIRET rc = DosQueryFSInfo(drivenumber, FSIL_VOLSER, &fsinfo, sizeof(FSINFO)); if (rc == NO_ERROR) { diff --git a/src/dos/drive_fat.cpp b/src/dos/drive_fat.cpp index 69f12875b32..329de3190a6 100644 --- a/src/dos/drive_fat.cpp +++ b/src/dos/drive_fat.cpp @@ -39,6 +39,14 @@ #include +#if defined(__linux__) && !defined(__GLIBC__) +// musl libc does not need 64 suffix to work with files > 2 GiB +#define fopen64 fopen +#define fseeko64 fseeko +#define ftello64 ftello +#endif + +#if !defined(OSFREE) #define IMGTYPE_FLOPPY 0 #define IMGTYPE_ISO 1 #define IMGTYPE_HDD 2 @@ -48,6 +56,7 @@ #define FAT32 2 extern bool _driveUsed; +#endif static uint16_t dpos[256]; static uint32_t dnum[256]; @@ -58,10 +67,92 @@ extern char * DBCS_upcase(char * str), sfn[DOS_NAMELENGTH_ASCII]; extern bool gbk, isDBCSCP(), isKanji1_gbk(uint8_t chr), shiftjis_lead_byte(int c); extern bool CodePageGuestToHostUTF16(uint16_t *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*/); extern bool CodePageHostToGuestUTF16(char *d/*CROSS_LEN*/,const uint16_t *s/*CROSS_LEN*/); -extern bool wild_match(const char* haystack, char* needle); bool systemmessagebox(char const * aTitle, char const * aMessage, char const * aDialogType, char const * aIconType, int aDefaultButton); extern bool dos_kernel_disabled; +extern bool int13_enable_48bitLBA; +std::string formatString(const char* format, ...); + +char* removeTrailingSpaces(char* str) { + char* end = str + strlen(str) - 1; + while (end >= str && *end == ' ') end--; + /* NTS: The loop will exit with 'end' one char behind the last ' ' space character. + * So to ASCIIZ snip off the space, step forward one and overwrite with NUL. + * The loop may end with 'end' one char behind 'ptr' if the string was empty "" + * or nothing but spaces. This is OK because after the step forward, end >= str + * in all cases. */ + *(++end) = '\0'; + return str; +} + +char* removeLeadingSpaces(char* str) { + size_t len = strlen(str); + size_t pos = strspn(str," "); + memmove(str,str + pos,len - pos + 1); + return str; +} + +char* trimString(char* str) { + return removeTrailingSpaces(removeLeadingSpaces(str)); +} + +#if !defined(OSFREE) +bool filename_not_8x3(const char *n) { + bool lead; + unsigned int i; + + i = 0; + lead = false; + while (*n != 0) { + if (*n == '.') break; + if ((*n&0xFF)<=32||*n==127||*n=='"'||*n=='+'||*n=='='||*n==','||*n==';'||*n==':'||*n=='<'||*n=='>'||((*n=='['||*n==']'||*n=='|'||*n=='\\')&&(!lead||((dos.loaded_codepage==936||IS_PDOSV)&&!gbk)))||*n=='?'||*n=='*') return true; + if (lead) lead = false; + else if ((IS_PC98_ARCH && shiftjis_lead_byte(*n&0xFF)) || (isDBCSCP() && isKanji1_gbk(*n&0xFF))) lead = true; + i++; + n++; + } + if (!i || i > 8) return true; + if (*n == 0) return false; /* made it past 8 or less normal chars and end of string: normal */ + + /* skip dot */ + assert(*n == '.'); + n++; + i = 0; + lead = false; + while (*n != 0) { + if (*n == '.') return true; /* another '.' means LFN */ + if ((*n&0xFF)<=32||*n==127||*n=='"'||*n=='+'||*n=='='||*n==','||*n==';'||*n==':'||*n=='<'||*n=='>'||((*n=='['||*n==']'||*n=='|'||*n=='\\')&&(!lead||((dos.loaded_codepage==936||IS_PDOSV)&&!gbk)))||*n=='?'||*n=='*') return true; + if (lead) lead = false; + else if ((IS_PC98_ARCH && shiftjis_lead_byte(*n&0xFF)) || (isDBCSCP() && isKanji1_gbk(*n&0xFF))) lead = true; + i++; + n++; + } + if (i > 3) return true; + + return false; /* it is 8.3 case */ +} +#else +bool filename_not_8x3(const char *n) { + return false; +} +#endif + +/* Assuming an LFN call, if the name is not strict 8.3 uppercase, return true. + * If the name is strict 8.3 uppercase like "FILENAME.TXT" there is no point making an LFN because it is a waste of space */ +bool filename_not_strict_8x3(const char *n) { +#if !defined(OSFREE) + if (filename_not_8x3(n)) return true; + bool lead = false; + for (unsigned int i=0; i='a' && n[i]<='z') return true; + } +#endif + return false; /* it is strict 8.3 upper case */ +} + +#if !defined(OSFREE) int PC98AutoChoose_FAT(const std::vector<_PC98RawPartition> &parts,imageDisk *loadedDisk) { for (size_t i=0;i < parts.size();i++) { const _PC98RawPartition &pe = parts[i]; @@ -85,7 +176,9 @@ int PC98AutoChoose_FAT(const std::vector<_PC98RawPartition> &parts,imageDisk *lo return -1; } +#endif +#if !defined(OSFREE) int MBRAutoChoose_FAT(const std::vector &parts,imageDisk *loadedDisk,uint8_t use_ver_maj=0,uint8_t use_ver_min=0) { uint16_t n=1; const char *msg; @@ -109,7 +202,9 @@ int MBRAutoChoose_FAT(const std::vector &parts,imageDisk } else if (pe.parttype == 0x0E/*FAT16B LBA*/) { if (use_ver_maj < 7 && prompt1) { - if (fat32setver == 1 || (fat32setver == -1 && systemmessagebox("Mounting LBA disk image","Mounting this type of disk images requires a reported DOS version of 7.0 or higher. Do you want to auto-change the reported DOS version to 7.0 now and mount the disk image?","yesno", "question", 1))) { + std::string dos_ver = "7.0"; + std::string drive_warn = formatString(MSG_Get("IMAGEMOUNT_CHANGE_DOSVER"), dos_ver.c_str(), dos_ver.c_str()); + if (fat32setver == 1 || (fat32setver == -1 && systemmessagebox("Mounting LBA disk image", drive_warn.c_str(), "yesno", "question", 1))) { use_ver_maj = dos.version.major = 7; use_ver_min = dos.version.minor = 0; dos_ver_menu(false); @@ -129,7 +224,9 @@ int MBRAutoChoose_FAT(const std::vector &parts,imageDisk } else if (pe.parttype == 0x0B || pe.parttype == 0x0C) { /* FAT32 types */ if ((use_ver_maj < 7 || (use_ver_maj == 7 && use_ver_min < 10)) && prompt2) { - if (fat32setver == 1 || (fat32setver == -1 && systemmessagebox("Mounting FAT32 disk image","Mounting this type of disk images requires a reported DOS version of 7.10 or higher. Do you want to auto-change the reported DOS version to 7.10 now and mount the disk image?","yesno", "question", 1))) { + std::string dos_ver = "7.10"; + std::string drive_warn = formatString(MSG_Get("IMAGEMOUNT_CHANGE_DOSVER"), dos_ver.c_str(), dos_ver.c_str()); + if (fat32setver == 1 || (fat32setver == -1 && systemmessagebox("Mounting FAT32 disk image",drive_warn.c_str(), "yesno", "question", 1))) { use_ver_maj = dos.version.major = 7; use_ver_min = dos.version.minor = 10; dos_ver_menu(true); @@ -151,56 +248,9 @@ int MBRAutoChoose_FAT(const std::vector &parts,imageDisk return -1; } +#endif -bool filename_not_8x3(const char *n) { - bool lead; - unsigned int i; - - i = 0; - lead = false; - while (*n != 0) { - if (*n == '.') break; - if ((*n&0xFF)<=32||*n==127||*n=='"'||*n=='+'||*n=='='||*n==','||*n==';'||*n==':'||*n=='<'||*n=='>'||((*n=='['||*n==']'||*n=='|'||*n=='\\')&&(!lead||((dos.loaded_codepage==936||IS_PDOSV)&&!gbk)))||*n=='?'||*n=='*') return true; - if (lead) lead = false; - else if ((IS_PC98_ARCH && shiftjis_lead_byte(*n&0xFF)) || (isDBCSCP() && isKanji1_gbk(*n&0xFF))) lead = true; - i++; - n++; - } - if (!i || i > 8) return true; - if (*n == 0) return false; /* made it past 8 or less normal chars and end of string: normal */ - - /* skip dot */ - assert(*n == '.'); - n++; - - i = 0; - lead = false; - while (*n != 0) { - if (*n == '.') return true; /* another '.' means LFN */ - if ((*n&0xFF)<=32||*n==127||*n=='"'||*n=='+'||*n=='='||*n==','||*n==';'||*n==':'||*n=='<'||*n=='>'||((*n=='['||*n==']'||*n=='|'||*n=='\\')&&(!lead||((dos.loaded_codepage==936||IS_PDOSV)&&!gbk)))||*n=='?'||*n=='*') return true; - if (lead) lead = false; - else if ((IS_PC98_ARCH && shiftjis_lead_byte(*n&0xFF)) || (isDBCSCP() && isKanji1_gbk(*n&0xFF))) lead = true; - i++; - n++; - } - if (i > 3) return true; - - return false; /* it is 8.3 case */ -} - -/* Assuming an LFN call, if the name is not strict 8.3 uppercase, return true. - * If the name is strict 8.3 uppercase like "FILENAME.TXT" there is no point making an LFN because it is a waste of space */ -bool filename_not_strict_8x3(const char *n) { - if (filename_not_8x3(n)) return true; - bool lead = false; - for (unsigned int i=0; i='a' && n[i]<='z') return true; - } - return false; /* it is strict 8.3 upper case */ -} - +#if !defined(OSFREE) void GenerateSFN(char *lfn, unsigned int k, unsigned int &i, unsigned int &t); /* Generate 8.3 names from LFNs, with tilde usage (from ~1 to ~999999). */ char* fatDrive::Generate_SFN(const char *path, const char *name) { @@ -229,7 +279,9 @@ char* fatDrive::Generate_SFN(const char *path, const char *name) { } return NULL; } +#endif +#if !defined(OSFREE) class fatFile : public DOS_File { public: fatFile(const char* name, uint32_t startCluster, uint32_t fileLen, fatDrive *useDrive); @@ -255,7 +307,9 @@ class fatFile : public DOS_File { bool loadedSector = false; fatDrive *myDrive; }; +#endif +#if !defined(OSFREE) void time_t_to_DOS_DateTime(uint16_t &t,uint16_t &d,time_t unix_time) { struct tm time; time.tm_isdst = -1; @@ -290,7 +344,9 @@ void time_t_to_DOS_DateTime(uint16_t &t,uint16_t &d,time_t unix_time) { t = ((unsigned int)tm->tm_hour << 11u) + ((unsigned int)tm->tm_min << 5u) + ((unsigned int)tm->tm_sec >> 1u); d = (((unsigned int)tm->tm_year - 80u) << 9u) + (((unsigned int)tm->tm_mon + 1u) << 5u) + (unsigned int)tm->tm_mday; } +#endif +#if !defined(OSFREE) /* IN - char * filename: Name in regular filename format, e.g. bob.txt */ /* OUT - char * filearray: Name in DOS directory format, eleven char, e.g. bob txt */ static void convToDirFile(const char *filename, char *filearray) { @@ -313,7 +369,9 @@ static void convToDirFile(const char *filename, char *filearray) { } } } +#endif +#if !defined(OSFREE) fatFile::fatFile(const char* /*name*/, uint32_t startCluster, uint32_t fileLen, fatDrive *useDrive) : firstCluster(startCluster), filelength(fileLen), myDrive(useDrive) { uint32_t seekto = 0; open = true; @@ -323,7 +381,9 @@ fatFile::fatFile(const char* /*name*/, uint32_t startCluster, uint32_t fileLen, Seek(&seekto, DOS_SEEK_SET); } } +#endif +#if !defined(OSFREE) void fatFile::Flush(void) { if (loadedSector) { myDrive->writeSector(currentSector, sectorBuffer); @@ -353,7 +413,9 @@ void fatFile::Flush(void) { newtime = false; } } +#endif +#if !defined(OSFREE) bool fatFile::Read(uint8_t * data, uint16_t *size) { _driveUsed = true; if ((this->flags & 0xf) == OPEN_WRITE) { // check if file opened in write-only mode @@ -407,7 +469,9 @@ bool fatFile::Read(uint8_t * data, uint16_t *size) { *size =sizecount; return true; } +#endif +#if !defined(OSFREE) bool fatFile::Write(const uint8_t * data, uint16_t *size) { _driveUsed = true; if ((this->flags & 0xf) == OPEN_READ) { // check if file opened in read-only mode @@ -533,7 +597,9 @@ bool fatFile::Write(const uint8_t * data, uint16_t *size) { *size =sizecount; return true; } +#endif +#if !defined(OSFREE) bool fatFile::Seek(uint32_t *pos, uint32_t type) { _driveUsed = true; int32_t seekto=0; @@ -566,7 +632,9 @@ bool fatFile::Seek(uint32_t *pos, uint32_t type) { *pos = seekpos; return true; } +#endif +#if !defined(OSFREE) bool fatFile::Close() { _driveUsed = true; /* Flush buffer */ @@ -595,7 +663,9 @@ bool fatFile::Close() { return false; } +#endif +#if !defined(OSFREE) uint16_t fatFile::GetInformation(void) { return 0; } @@ -858,11 +928,13 @@ void fatDrive::SetLabel(const char *label, bool /*iscdrom*/, bool /*updatable*/) readSector(tmpsector,sectbuf); dirPos++; +#if !defined(OSFREE) if (dos.version.major >= 7 || uselfn) { /* skip LFN entries */ if ((sectbuf[entryoffset].attrib & 0x3F) == 0x0F) goto nextfile; } +#endif if (*label != 0) { /* adding a volume label */ @@ -1350,7 +1422,7 @@ fatDrive::~fatDrive() { FILE * fopen_lock(const char * fname, const char * mode, bool &readonly); fatDrive::fatDrive(const char* sysFilename, uint32_t bytesector, uint32_t cylsector, uint32_t headscyl, uint32_t cylinders, std::vector& options) { FILE *diskfile; - uint32_t filesize; + uint64_t filesize; unsigned char bootcode[256]; if(!dos_kernel_disabled && imgDTASeg == 0) { @@ -1417,8 +1489,17 @@ fatDrive::fatDrive(const char* sysFilename, uint32_t bytesector, uint32_t cylsec created_successfully = false; return; } - filesize = (uint32_t)(qcow2_header.size / 1024L); - loadedDisk = new QCow2Disk(qcow2_header, diskfile, fname, filesize, bytesector, (filesize > 2880)); + filesize = (uint32_t)(qcow2_header.size / 1024L); + loadedDisk = new QCow2Disk(qcow2_header, diskfile, fname, qcow2_header.size, bytesector, (filesize > 2880)); + loadedDisk->sector_size = bytesector; // sector size + loadedDisk->sectors = cylsector; // sectors + loadedDisk->heads = headscyl; // heads + loadedDisk->cylinders = cylinders; // cylinders + uint64_t LBA = loadedDisk->getLBA(); + if(!int13_enable_48bitLBA && (LBA > 0x0FFFFFFF)) + LOG_MSG("Warning: Disk size (%lf GB) exceeds 128GB limit for 28-bit LBA. You may need to enable 48-bit LBA support.", (double)LBA * 512.0 / (1024.0 * 1024 * 1024)); + + } else{ fseeko64(diskfile, 0L, SEEK_SET); @@ -1431,27 +1512,28 @@ fatDrive::fatDrive(const char* sysFilename, uint32_t bytesector, uint32_t cylsec if (ext != NULL && !strcasecmp(ext, ".d88")) { fseeko64(diskfile, 0L, SEEK_END); filesize = (uint32_t)(ftello64(diskfile) / 1024L); - loadedDisk = new imageDiskD88(diskfile, fname, filesize, false); + loadedDisk = new imageDiskD88(diskfile, fname, (uint32_t)filesize, false); } else if (!memcmp(bootcode,"VFD1.",5)) { /* FDD files */ fseeko64(diskfile, 0L, SEEK_END); filesize = (uint32_t)(ftello64(diskfile) / 1024L); - loadedDisk = new imageDiskVFD(diskfile, fname, filesize, false); + loadedDisk = new imageDiskVFD(diskfile, fname, (uint32_t)filesize, false); } else if (!memcmp(bootcode,"T98FDDIMAGE.R0\0\0",16)) { fseeko64(diskfile, 0L, SEEK_END); filesize = (uint32_t)(ftello64(diskfile) / 1024L); - loadedDisk = new imageDiskNFD(diskfile, fname, filesize, false, 0); + loadedDisk = new imageDiskNFD(diskfile, fname, (uint32_t)filesize, false, 0); } else if (!memcmp(bootcode,"T98FDDIMAGE.R1\0\0",16)) { fseeko64(diskfile, 0L, SEEK_END); filesize = (uint32_t)(ftello64(diskfile) / 1024L); - loadedDisk = new imageDiskNFD(diskfile, fname, filesize, false, 1); + loadedDisk = new imageDiskNFD(diskfile, fname, (uint32_t)filesize, false, 1); } else { fseeko64(diskfile, 0L, SEEK_END); - filesize = (uint32_t)(ftello64(diskfile) / 1024L); - loadedDisk = new imageDisk(diskfile, fname, filesize, (is_hdd | (filesize > 2880))); + filesize = ftello64(diskfile); + loadedDisk = new imageDisk(diskfile, fname, filesize, (is_hdd | (filesize > 2880 * 1024))); + filesize /= 1024L; } } @@ -1679,7 +1761,12 @@ void fatDrive::fatDriveInit(const char *sysFilename, uint32_t bytesector, uint32 partSectOff = startSector; partSectSize = countSector; } - else if(is_hdd) { + /* NTS: MS-DOS block devices cannot represent a disk with a partition table. + * There is no consideration or support for it. The BIOS block devices + * built in do not either. Partition support only works because MSINIT + * takes the time to parse the partition table and create block devices + * for it. This is why you have to reboot after using FDISK. */ + else if(is_hdd && loadedDisk->class_id != imageDisk::ID_MSDOSBLOCKDEV) { /* Set user specified harddrive parameters */ if (headscyl > 0 && cylinders > 0 && cylsector > 0 && bytesector > 0) loadedDisk->Set_Geometry(headscyl, cylinders,cylsector, bytesector); @@ -1819,9 +1906,12 @@ void fatDrive::fatDriveInit(const char *sysFilename, uint32_t bytesector, uint32 /* Floppy disks don't have partitions */ partSectOff = 0; - if (loadedDisk->heads == 0 || loadedDisk->sectors == 0 || loadedDisk->cylinders == 0) { - /* Get_Geometry fails for some floppies with weird geometries, so try obtaining the geometry from BPB in such case */ - LOG_MSG("drive_fat.cpp: No geometry, check your image. Try obtaining from BPB"); + /* MS-DOS block device drivers do not have geometry, they just have sectors */ + if (loadedDisk->class_id != imageDisk::ID_MSDOSBLOCKDEV) { + if (loadedDisk->heads == 0 || loadedDisk->sectors == 0 || loadedDisk->cylinders == 0) { + /* Get_Geometry fails for some floppies with weird geometries, so try obtaining the geometry from BPB in such case */ + LOG_MSG("drive_fat.cpp: No geometry, check your image. Try obtaining from BPB"); + } } } @@ -1999,6 +2089,7 @@ void fatDrive::fatDriveInit(const char *sysFilename, uint32_t bytesector, uint32 bytesector = bootbuffer.bpb.v.BPB_BytsPerSec; if(headscyl == 0 || cylsector == 0 || bytesector == 0 || loadedDisk->diskSizeK == 0 || ((bytesector & (bytesector - 1)) != 0)/*not a power of 2*/){ LOG_MSG("drive_fat.cpp: Illegal BPB value"); + LOG(LOG_MISC,LOG_DEBUG)("heads=%u cyls=%u sect=%u sizeK=%u bytesect=%u",headscyl,cylsector,bytesector,(unsigned int)loadedDisk->diskSizeK,bytesector); if(!IS_PC98_ARCH){ created_successfully = false; return; @@ -2282,8 +2373,9 @@ void fatDrive::fatDriveInit(const char *sysFilename, uint32_t bytesector, uint32 return; } - /* Filesystem must be contiguous to use absolute sectors, otherwise CHS will be used */ - absolute = IS_PC98_ARCH || ((BPB.v.BPB_NumHeads == headscyl) && (BPB.v.BPB_SecPerTrk == cylsector)); + /* Filesystem must be contiguous to use absolute sectors, otherwise CHS will be used. */ + /* MS-DOS block devices can only do absolute sectors, there is no support for C/H/S */ + absolute = IS_PC98_ARCH || loadedDisk->class_id == imageDisk::ID_MSDOSBLOCKDEV || ((BPB.v.BPB_NumHeads == headscyl) && (BPB.v.BPB_SecPerTrk == cylsector)); LOG(LOG_DOSMISC,LOG_DEBUG)("FAT driver: Using %s sector access",absolute ? "absolute" : "C/H/S"); /* Determine FAT format, 12, 16 or 32 */ @@ -2597,6 +2689,7 @@ bool fatDrive::FileCreate(DOS_File **file, const char *name, uint16_t attributes /* Can we find the base directory? */ if(!getDirClustNum(name, &dirClust, true)) return false; +#if !defined(OSFREE) /* NTS: "name" is the full relative path. For LFN creation to work we need only the final element of the path */ if (uselfn && !force_sfn) { lfn = strrchr_dbcs((char *)name,'\\'); @@ -2616,6 +2709,7 @@ bool fatDrive::FileCreate(DOS_File **file, const char *name, uint16_t attributes } else lfn = NULL; } +#endif memset(&fileEntry, 0, sizeof(direntry)); memcpy(&fileEntry.entryname, &pathName[0], 11); @@ -2715,6 +2809,7 @@ bool fatDrive::FileUnlink(const char * name) { if(!getFileDirEntry(name, &fileEntry, &dirClust, &subEntry)) return false; /* Do not use dirOk, DOS should never call this unless a file */ lfnRange_t dir_lfn_range = lfnRange; /* copy down LFN results before they are obliterated by the next call to FindNextInternal. */ +#if !defined(OSFREE) /* delete LFNs */ if (!dir_lfn_range.empty() && (dos.version.major >= 7 || uselfn)) { /* last LFN entry should be fileidx */ @@ -2727,6 +2822,7 @@ bool fatDrive::FileUnlink(const char * name) { } } } +#endif /* remove primary 8.3 SFN */ fileEntry.entryname[0] = 0xe5; @@ -2748,21 +2844,38 @@ bool fatDrive::FindFirst(const char *_dir, DOS_DTA &dta,bool fcb_findfirst) { checkDiskChange(); - direntry dummyClust = {}; + direntry dummyClust = {}; - // volume label searches always affect root directory, no matter the current directory, at least with FCBs - if (dta.GetAttr() == DOS_ATTR_VOLUME || ((dta.GetAttr() & DOS_ATTR_VOLUME) && (fcb_findfirst || !(_dir && *_dir && dta.GetAttr() == 0x3F)))) { - if(!getDirClustNum("\\", &cwdDirCluster, false)) { - DOS_SetError(DOSERR_PATH_NOT_FOUND); - return false; - } - } - else { - if(!getDirClustNum(_dir, &cwdDirCluster, false)) { - DOS_SetError(DOSERR_PATH_NOT_FOUND); - return false; - } - } + /* Elder Scrolls Arena does an 8-bit divide using CL=A and then forgets to clear CL when calling INT 21h AH=4Eh, + * which to us appears as a program searching for files that may also be a volume label and/or hidden (CX=0x000A). */ + /* TODO: Perhaps this check could be rolled into the _dir && *_dir && dta.GetAttr() == 0x3F check? */ + /* Elder Scrolls Arena: The load game screen doesn't just open SAVEGAME.00, it does an INT 21h AH=4Eh search for + * it with CX=0x007C??? What the fuck? If we don't watch for this, then players running the + * game from a image will see their saves, but will not be able to load them ("No save here"). */ + bool ignore_volbit = false; + if (dta.GetAttr() & DOS_ATTR_VOLUME) { + if (dta.GetAttr() & (0xC0|DOS_ATTR_HIDDEN|DOS_ATTR_SYSTEM|DOS_ATTR_READ_ONLY)) { + LOG(LOG_MISC,LOG_DEBUG)("FindFirst() ignoring volume label bit because other bits are set (Elder Scrolls Arena fix)"); + ignore_volbit = true; + } + } + + // volume label searches always affect root directory, no matter the current directory, at least with FCBs + if (dta.GetAttr() == DOS_ATTR_VOLUME || ((dta.GetAttr() & DOS_ATTR_VOLUME) && !ignore_volbit && (fcb_findfirst || !(_dir && *_dir && dta.GetAttr() == 0x3F)))) { + if(!getDirClustNum("\\", &cwdDirCluster, false)) { + DOS_SetError(DOSERR_PATH_NOT_FOUND); + return false; + } + } + else { + if(!getDirClustNum(_dir, &cwdDirCluster, false)) { + DOS_SetError(DOSERR_PATH_NOT_FOUND); + return false; + } + } + + /* need to remember whether doing an FCB or FindFirst (AH=4Eh) search */ + findFirstFCB = fcb_findfirst; if (lfn_filefind_handle>=LFN_FILEFIND_MAX) { dta.SetDirID(0); @@ -2775,29 +2888,6 @@ bool fatDrive::FindFirst(const char *_dir, DOS_DTA &dta,bool fcb_findfirst) { return FindNextInternal(cwdDirCluster, dta, &dummyClust); } -char* removeTrailingSpaces(char* str) { - char* end = str + strlen(str) - 1; - while (end >= str && *end == ' ') end--; - /* NTS: The loop will exit with 'end' one char behind the last ' ' space character. - * So to ASCIIZ snip off the space, step forward one and overwrite with NUL. - * The loop may end with 'end' one char behind 'ptr' if the string was empty "" - * or nothing but spaces. This is OK because after the step forward, end >= str - * in all cases. */ - *(++end) = '\0'; - return str; -} - -char* removeLeadingSpaces(char* str) { - size_t len = strlen(str); - size_t pos = strspn(str," "); - memmove(str,str + pos,len - pos + 1); - return str; -} - -char* trimString(char* str) { - return removeTrailingSpaces(removeLeadingSpaces(str)); -} - uint32_t fatDrive::GetSectorCount(void) { return (loadedDisk->heads * loadedDisk->sectors * loadedDisk->cylinders) - partSectOff; } @@ -2834,6 +2924,75 @@ static void copyDirEntry(const direntry *src, direntry *dst) { var_write((uint32_t*)var, src->entrysize); } +static bool VolumeLabelCmp(const char* label11, const char* pattern) +{ + int pi = 0; + + /* ---- Name part (8 bytes) ---- */ + for (int i = 0; i < 8; i++) { + char p = pattern[pi]; + + if (p == 0 || p == '.') + break; + + if (p == '*') { + /* '*' matches rest of name */ + while(pattern[pi] && pattern[pi] != '.') + pi++; + break; + } + + if (p != '?' && toupper(p) != toupper(label11[i])) + return false; + + pi++; + } + + /* Skip remaining name chars in pattern until dot or end */ + while (pattern[pi] && pattern[pi] != '.') + pi++; + + /* No extension specified */ + if (pattern[pi] != '.') + return true; + + /* Skip dot */ + pi++; + + /* ---- Extension part starts at label11[8] ---- */ + int li = 8; + + while (pattern[pi]) { + char p = pattern[pi]; + + if (p == '*') { + /* '*' matches rest of extension */ + return true; + } + + /* If the rest of the pattern is only spaces, stop */ + if (p == ' ') { + bool only_spaces = true; + for (int k = pi; pattern[k]; k++) { + if (pattern[k] != ' ') { + only_spaces = false; + break; + } + } + if (only_spaces) + return true; + } + + if (p != '?' && toupper(p) != toupper(label11[li])) + return false; + + pi++; + li++; + } + + return true; +} + bool fatDrive::FindNextInternal(uint32_t dirClustNumber, DOS_DTA &dta, direntry *foundEntry) { if (unformatted) return false; @@ -2851,9 +3010,9 @@ bool fatDrive::FindNextInternal(uint32_t dirClustNumber, DOS_DTA &dta, direntry bool lfn_ord_found[0x40]; char extension[4]; - size_t dirent_per_sector = getSectSize() / sizeof(direntry); - assert(dirent_per_sector <= MAX_DIRENTS_PER_SECTOR); - assert((dirent_per_sector * sizeof(direntry)) <= SECTOR_SIZE_MAX); + size_t dirent_per_sector = getSectSize() / sizeof(direntry); + assert(dirent_per_sector <= MAX_DIRENTS_PER_SECTOR); + assert((dirent_per_sector * sizeof(direntry)) <= SECTOR_SIZE_MAX); dta.GetSearchParams(attrs, srch_pattern,false); dirPos = lfn_filefind_handle>=LFN_FILEFIND_MAX?dta.GetDirID():dpos[lfn_filefind_handle]; /* NTS: Windows 9x is said to have a 65536 dirent limit even for FAT32, so dirPos as 16-bit is acceptable */ @@ -2866,7 +3025,7 @@ bool fatDrive::FindNextInternal(uint32_t dirClustNumber, DOS_DTA &dta, direntry entryoffset = (uint32_t)((size_t)dirPos % dirent_per_sector); if(dirClustNumber==0) { - if (BPB.is_fat32()) return false; + if (BPB.is_fat32()) return false; if(dirPos >= BPB.v.BPB_RootEntCnt) { if (lfn_filefind_handle=LFN_FILEFIND_MAX) dta.SetDirID(dirPos); else dpos[lfn_filefind_handle]=dirPos; - /* Deleted file entry */ - if (sectbuf[entryoffset].entryname[0] == 0xe5) { - lfind_name[0] = 0; /* LFN code will memset() it in full upon next dirent */ - lfn_max_ord = 0; - lfnRange.clear(); - goto nextfile; - } + /* Deleted file entry */ + if (sectbuf[entryoffset].entryname[0] == 0xe5) { + lfind_name[0] = 0; /* LFN code will memset() it in full upon next dirent */ + lfn_max_ord = 0; + lfnRange.clear(); + goto nextfile; + } /* End of directory list */ if (sectbuf[entryoffset].entryname[0] == 0x00) { - if (lfn_filefind_handle= 7 || uselfn) { /* skip LFN entries */ if ((sectbuf[entryoffset].attrib & 0x3F) == 0x0F) goto nextfile; } +#endif - if (!(sectbuf[entryoffset].attrib & DOS_ATTR_VOLUME)) goto nextfile; + if (!(sectbuf[entryoffset].attrib & DOS_ATTR_VOLUME) || !VolumeLabelCmp((const char*)sectbuf[entryoffset].entryname, srch_pattern)) goto nextfile; labelCache.SetLabel(find_name, false, true); +#if !defined(OSFREE) } else if ((dos.version.major >= 7 || uselfn) && (sectbuf[entryoffset].attrib & 0x3F) == 0x0F) { /* long filename piece */ struct direntry_lfn *dlfn = (struct direntry_lfn*)(§buf[entryoffset]); @@ -2966,80 +3161,81 @@ bool fatDrive::FindNextInternal(uint32_t dirClustNumber, DOS_DTA &dta, direntry unsigned int stridx = oidx * 13u, len = 0; uint16_t lchar = 0; char lname[27] = {0}; - char text[10]; - uint16_t uname[4]; - - for (unsigned int i=0;i < 5;i++) { - text[0] = text[1] = text[2] = 0; - lchar = (uint16_t)(dlfn->LDIR_Name1[i]); - if (lchar < 0x100 || lchar == 0xFFFF) - lname[len++] = lchar != 0xFFFF && CodePageHostToGuestUTF16(text,&lchar) && text[0] && !text[1] ? text[0] : (char)(lchar & 0xFF); - else { - uname[0]=lchar; - uname[1]=0; - if (CodePageHostToGuestUTF16(text,uname)) { - lname[len++] = (char)(text[0] & 0xFF); - lname[len++] = (char)(text[1] & 0xFF); - } else - lname[len++] = '_'; - } - } - for (unsigned int i=0;i < 6;i++) { - text[0] = text[1] = text[2] = 0; - lchar = (uint16_t)(dlfn->LDIR_Name2[i]); - if (lchar < 0x100 || lchar == 0xFFFF) - lname[len++] = lchar != 0xFFFF && CodePageHostToGuestUTF16(text,&lchar) && text[0] && !text[1] ? text[0] : (char)(lchar & 0xFF); - else { - char text[10]; - uint16_t uname[4]; - uname[0]=lchar; - uname[1]=0; - text[0] = 0; - text[1] = 0; - text[2] = 0; - if (CodePageHostToGuestUTF16(text,uname)) { - lname[len++] = (char)(text[0] & 0xFF); - lname[len++] = (char)(text[1] & 0xFF); - } else - lname[len++] = '_'; - } - } - for (unsigned int i=0;i < 2;i++) { - text[0] = text[1] = text[2] = 0; - lchar = (uint16_t)(dlfn->LDIR_Name3[i]); - if (lchar < 0x100 || lchar == 0xFFFF) - lname[len++] = lchar != 0xFFFF && CodePageHostToGuestUTF16(text,&lchar) && text[0] && !text[1] ? text[0] : (char)(lchar & 0xFF); - else { - char text[10]; - uint16_t uname[4]; - uname[0]=lchar; - uname[1]=0; - text[0] = 0; - text[1] = 0; - text[2] = 0; - if (CodePageHostToGuestUTF16(text,uname)) { - lname[len++] = (char)(text[0] & 0xFF); - lname[len++] = (char)(text[1] & 0xFF); - } else - lname[len++] = '_'; - } - } - lname[len] = 0; - if ((stridx+len) <= LFN_NAMELENGTH) { - std::string full = std::string(lname) + std::string(lfind_name); - strcpy(lfind_name, full.c_str()); - lfn_ord_found[oidx] = true; - } + char text[10]; + uint16_t uname[4]; + + for (unsigned int i=0;i < 5;i++) { + text[0] = text[1] = text[2] = 0; + lchar = (uint16_t)(dlfn->LDIR_Name1[i]); + if (lchar < 0x100 || lchar == 0xFFFF) + lname[len++] = lchar != 0xFFFF && CodePageHostToGuestUTF16(text,&lchar) && text[0] && !text[1] ? text[0] : (char)(lchar & 0xFF); + else { + uname[0]=lchar; + uname[1]=0; + if (CodePageHostToGuestUTF16(text,uname)) { + lname[len++] = (char)(text[0] & 0xFF); + lname[len++] = (char)(text[1] & 0xFF); + } else + lname[len++] = '_'; + } + } + for (unsigned int i=0;i < 6;i++) { + text[0] = text[1] = text[2] = 0; + lchar = (uint16_t)(dlfn->LDIR_Name2[i]); + if (lchar < 0x100 || lchar == 0xFFFF) + lname[len++] = lchar != 0xFFFF && CodePageHostToGuestUTF16(text,&lchar) && text[0] && !text[1] ? text[0] : (char)(lchar & 0xFF); + else { + char text[10]; + uint16_t uname[4]; + uname[0]=lchar; + uname[1]=0; + text[0] = 0; + text[1] = 0; + text[2] = 0; + if (CodePageHostToGuestUTF16(text,uname)) { + lname[len++] = (char)(text[0] & 0xFF); + lname[len++] = (char)(text[1] & 0xFF); + } else + lname[len++] = '_'; + } + } + for (unsigned int i=0;i < 2;i++) { + text[0] = text[1] = text[2] = 0; + lchar = (uint16_t)(dlfn->LDIR_Name3[i]); + if (lchar < 0x100 || lchar == 0xFFFF) + lname[len++] = lchar != 0xFFFF && CodePageHostToGuestUTF16(text,&lchar) && text[0] && !text[1] ? text[0] : (char)(lchar & 0xFF); + else { + char text[10]; + uint16_t uname[4]; + uname[0]=lchar; + uname[1]=0; + text[0] = 0; + text[1] = 0; + text[2] = 0; + if (CodePageHostToGuestUTF16(text,uname)) { + lname[len++] = (char)(text[0] & 0xFF); + lname[len++] = (char)(text[1] & 0xFF); + } else + lname[len++] = '_'; + } + } + lname[len] = 0; + if ((stridx+len) <= LFN_NAMELENGTH) { + std::string full = std::string(lname) + std::string(lfind_name); + strcpy(lfind_name, full.c_str()); + lfn_ord_found[oidx] = true; + } } goto nextfile; +#endif } else { - if (~attrs & sectbuf[entryoffset].attrib & (DOS_ATTR_DIRECTORY | DOS_ATTR_VOLUME) ) { - lfind_name[0] = 0; /* LFN code will memset() it in full upon next dirent */ - lfn_max_ord = 0; - lfnRange.clear(); - goto nextfile; - } + if (~attrs & sectbuf[entryoffset].attrib & (DOS_ATTR_DIRECTORY | DOS_ATTR_VOLUME) ) { + lfind_name[0] = 0; /* LFN code will memset() it in full upon next dirent */ + lfn_max_ord = 0; + lfnRange.clear(); + goto nextfile; + } } if (lfn_max_ord != 0) { @@ -3072,22 +3268,15 @@ bool fatDrive::FindNextInternal(uint32_t dirClustNumber, DOS_DTA &dta, direntry } /* Compare name to search pattern. Skip long filename match if no long filename given. */ - if(attrs == DOS_ATTR_VOLUME) { - if (!(wild_match(find_name, srch_pattern))) - goto nextfile; - } - else if (!(WildFileCmp(find_name,srch_pattern) || (lfn_max_ord != 0 && lfind_name[0] != 0 && LWildFileCmp(lfind_name,srch_pattern)))) { + if (attrs != DOS_ATTR_VOLUME && (!(WildFileCmp(find_name,srch_pattern) || (lfn_max_ord != 0 && lfind_name[0] != 0 && LWildFileCmp(lfind_name,srch_pattern))))) { lfind_name[0] = 0; /* LFN code will memset() it in full upon next dirent */ lfn_max_ord = 0; lfnRange.clear(); goto nextfile; } - if(sectbuf[entryoffset].attrib == DOS_ATTR_VOLUME) - trimString(find_name); - - // Drive emulation does not need to require a LFN in case there is no corresponding 8.3 names. - if (lfind_name[0] == 0) strcpy(lfind_name,find_name); + // Drive emulation does not need to require a LFN in case there is no corresponding 8.3 names. + if (lfind_name[0] == 0) strcpy(lfind_name,find_name); copyDirEntry(§buf[entryoffset], foundEntry); @@ -3101,7 +3290,7 @@ bool fatDrive::FindNextInternal(uint32_t dirClustNumber, DOS_DTA &dta, direntry bool fatDrive::FindNext(DOS_DTA &dta) { if (unformatted) return false; - direntry dummyClust = {}; + direntry dummyClust = {}; return FindNextInternal(lfn_filefind_handle>=LFN_FILEFIND_MAX?dta.GetDirIDCluster():(dnum[lfn_filefind_handle]?dnum[lfn_filefind_handle]:0), dta, &dummyClust); } @@ -3374,6 +3563,7 @@ bool fatDrive::addDirectoryEntry(uint32_t dirClustNumber, const direntry& useEnt } readSector(tmpsector,sectbuf); +#if !defined(OSFREE) direntry_lfn *dlfn = (direntry_lfn*)(§buf[entryoffset]); memset(dlfn,0,sizeof(*dlfn)); @@ -3385,6 +3575,7 @@ bool fatDrive::addDirectoryEntry(uint32_t dirClustNumber, const direntry& useEnt for (unsigned int i=0;i < 5;i++) dlfn->LDIR_Name1[i] = lfnbuf[lfnsrc++]; for (unsigned int i=0;i < 6;i++) dlfn->LDIR_Name2[i] = lfnbuf[lfnsrc++]; for (unsigned int i=0;i < 2;i++) dlfn->LDIR_Name3[i] = lfnbuf[lfnsrc++]; +#endif writeSector(tmpsector,sectbuf); dirPos++; @@ -3454,6 +3645,7 @@ bool fatDrive::MakeDir(const char *dir) { if(!allocateCluster(dummyClust, 0)) return false; +#if !defined(OSFREE) /* NTS: "dir" is the full relative path. For LFN creation to work we need only the final element of the path */ if (uselfn && !force_sfn) { lfn = strrchr_dbcs((char *)dir,'\\'); @@ -3473,6 +3665,7 @@ bool fatDrive::MakeDir(const char *dir) { } else lfn = NULL; } +#endif zeroOutCluster(dummyClust); @@ -3572,6 +3765,7 @@ bool fatDrive::RemoveDir(const char *dir) { /* Return if directory is not empty */ if(filecount > 0) return false; +#if !defined(OSFREE) /* delete LFNs */ if (!dir_lfn_range.empty() && (dos.version.major >= 7 || uselfn)) { /* last LFN entry should be fileidx */ @@ -3584,6 +3778,7 @@ bool fatDrive::RemoveDir(const char *dir) { } } } +#endif /* remove primary 8.3 entry */ if (!directoryBrowse(dirClust, &tmpentry, subEntry)) return false; @@ -3634,6 +3829,7 @@ bool fatDrive::Rename(const char * oldname, const char * newname) { /* Can we find the base directory of the new name? (we know the parent dir of oldname in dirClust1) */ if(!getDirClustNum(newname, &dirClust2, true)) return false; +#if !defined(OSFREE) /* NTS: "newname" is the full relative path. For LFN creation to work we need only the final element of the path */ if (uselfn && !force_sfn) { lfn = strrchr_dbcs((char *)newname,'\\'); @@ -3658,6 +3854,7 @@ bool fatDrive::Rename(const char * oldname, const char * newname) { } else lfn = NULL; } +#endif /* add new dirent */ memcpy(&fileEntry2, &fileEntry1, sizeof(direntry)); @@ -3668,6 +3865,7 @@ bool fatDrive::Rename(const char * oldname, const char * newname) { fileEntry1.entryname[0] = 0xe5; directoryChange(dirClust1, &fileEntry1, (int32_t)subEntry1); +#if !defined(OSFREE) /* remove LFNs of old entry only if emulating LFNs or DOS version 7.0. * Earlier DOS versions ignore LFNs. */ if (!dir_lfn_range.empty() && (dos.version.major >= 7 || uselfn)) { @@ -3681,6 +3879,7 @@ bool fatDrive::Rename(const char * oldname, const char * newname) { } } } +#endif return true; } @@ -3794,4 +3993,5 @@ void fatDrive::checkDiskChange(void) { (unsigned long)RootDirSectors,(unsigned long)DataSectors); } } +#endif diff --git a/src/dos/drive_iso.cpp b/src/dos/drive_iso.cpp index b9167cc9096..7ce569a49a0 100644 --- a/src/dos/drive_iso.cpp +++ b/src/dos/drive_iso.cpp @@ -35,6 +35,7 @@ #define FLAGS2 ((iso) ? de->fileFlags : de->timeZone) extern bool _driveUsed; +#if !defined(OSFREE) char fullname[LFN_NAMELENGTH]; static uint16_t sdid[256]; extern int lfn_filefind_handle; @@ -45,15 +46,19 @@ inline bool CodePageHostToGuestUTF16(uint8_t *d/*CROSS_LEN*/,const uint8_t *s/*C std::u16string u16s(reinterpret_cast(s)); return CodePageHostToGuestUTF16(reinterpret_cast(d), reinterpret_cast(u16s.c_str())); } +#endif using namespace std; +#if !defined(OSFREE) static bool islfnchar(const char *s) { return (unsigned char)*s <= 32 || (unsigned char)*s == 127 || *s == '\"' || *s == '+' || *s == '=' || *s == ',' || *s == ';' || *s == ':' || *s == '<' || *s == '>' || *s == '?' || *s == '*'; } +#endif //////////////////////////////////// +#if !defined(OSFREE) /*From Linux kernel source*/ /** CRC table for the CRC ITU-T V.41 0x1021 (x^16 + x^12 + x^15 + 1) */ const uint16_t UDF_crc_itu_t_table[256] = { @@ -98,9 +103,11 @@ uint16_t UDF_crc_itu_t(uint16_t crc, const uint8_t *buffer, size_t len) return crc; } +#endif //////////////////////////////////// +#if !defined(OSFREE) void UDFTagId::parse(const unsigned int sz,const unsigned char *b) { if (sz >= 16) { TagIdentifier = le16toh( *((uint16_t*)(&b[0])) ); @@ -163,9 +170,11 @@ UDFTagId::UDFTagId(const unsigned int sz,const unsigned char *b) { UDFTagId::UDFTagId() { } +#endif //////////////////////////////////// +#if !defined(OSFREE) void UDFextent_ad::get(const unsigned int sz,const unsigned char *b) { if (sz >= 8u) { ExtentLength = le32toh( *((uint32_t*)(&b[0])) ); @@ -179,9 +188,11 @@ UDFextent_ad::UDFextent_ad(const unsigned int sz,const unsigned char *b) { UDFextent_ad::UDFextent_ad() { } +#endif //////////////////////////////////// +#if !defined(OSFREE) void UDFAnchorVolumeDescriptorPointer::get(UDFTagId &tag,const unsigned int sz,const unsigned char *b) { if (sz >= 32u) { DescriptorTag = tag; @@ -196,9 +207,11 @@ UDFAnchorVolumeDescriptorPointer::UDFAnchorVolumeDescriptorPointer(UDFTagId &tag UDFAnchorVolumeDescriptorPointer::UDFAnchorVolumeDescriptorPointer() { } +#endif //////////////////////////////////// +#if !defined(OSFREE) UDFextent_ad isoDrive::convertToUDFextent_ad(const UDFshort_ad &s,const uint32_t partition_ref_id) const { UDFextent_ad r; @@ -260,9 +273,11 @@ bool isoDrive::convertToUDFextent_ad(UDFextent_ad &d,const UDFext_ad &s) const { return false; } +#endif //////////////////////////////////// +#if !defined(OSFREE) void UDFPrimaryVolumeDescriptor::get(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b) { if (sz >= 490) { DescriptorTag = tag; @@ -298,9 +313,11 @@ UDFPrimaryVolumeDescriptor::UDFPrimaryVolumeDescriptor(UDFTagId &tag/*already pa UDFPrimaryVolumeDescriptor::UDFPrimaryVolumeDescriptor() { } +#endif //////////////////////////////////////////////// +#if !defined(OSFREE) void UDFFileSetDescriptor::get(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b) { if (sz >= 480) { DescriptorTag = tag; @@ -330,9 +347,11 @@ UDFFileSetDescriptor::UDFFileSetDescriptor(UDFTagId &tag/*already parsed, why pa UDFFileSetDescriptor::UDFFileSetDescriptor() { } +#endif //////////////////////////////////////////////////////// +#if !defined(OSFREE) void UDFext_ad::get(const unsigned int sz,const unsigned char *b) { if (sz >= 20) { ExtentLength = le32toh( *((uint32_t*)(&b[0])) ); @@ -351,9 +370,11 @@ UDFext_ad::UDFext_ad(const unsigned int sz,const unsigned char *b) { UDFext_ad::UDFext_ad() { } +#endif //////////////////////////////////////////////////////// +#if !defined(OSFREE) uint8_t UDFicbtag::AllocationDescriptorType(void) const { return (uint8_t)(Flags & 7u); } @@ -380,9 +401,11 @@ UDFicbtag::UDFicbtag(const unsigned int sz,const unsigned char *b) { UDFicbtag::UDFicbtag() { } +#endif //////////////////////////////////////////////////////// +#if !defined(OSFREE) void UDFFileEntry::get(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b) { if (sz >= 176) { DescriptorTag = tag; @@ -462,9 +485,11 @@ UDFFileEntry::UDFFileEntry(UDFTagId &tag/*already parsed, why parse again?*/,con UDFFileEntry::UDFFileEntry() { } +#endif //////////////////////////////////////////////////////// +#if !defined(OSFREE) void UDFFileIdentifierDescriptor::get(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b) { if (sz >= 38) { DescriptorTag = tag; @@ -495,9 +520,11 @@ UDFFileIdentifierDescriptor::UDFFileIdentifierDescriptor(UDFTagId &tag/*already UDFFileIdentifierDescriptor::UDFFileIdentifierDescriptor() { } +#endif //////////////////////////////////// +#if !defined(OSFREE) void UDFPartitionDescriptor::get(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b) { if (sz >= 356) { DescriptorTag = tag; @@ -525,9 +552,11 @@ UDFPartitionDescriptor::UDFPartitionDescriptor(UDFTagId &tag/*already parsed, wh UDFPartitionDescriptor::UDFPartitionDescriptor() { } +#endif //////////////////////////////////////////////////////// +#if !defined(OSFREE) void UDFLogicalVolumeDescriptor::get(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b) { if (sz >= 440) { DescriptorTag = tag; @@ -561,9 +590,11 @@ UDFLogicalVolumeDescriptor::UDFLogicalVolumeDescriptor(UDFTagId &tag/*already pa UDFLogicalVolumeDescriptor::UDFLogicalVolumeDescriptor() { } +#endif //////////////////////////////////// +#if !defined(OSFREE) // FIXME: Why do the "strings" start with a control code like \x08? void UDFdstring::get(const unsigned int sz,const unsigned char *b) { /* the LAST byte is the string length (?) */ @@ -584,9 +615,11 @@ UDFdstring::UDFdstring(const unsigned int sz,const unsigned char *b) { UDFdstring::UDFdstring() { } +#endif //////////////////////////////////// +#if !defined(OSFREE) void UDFtimestamp::get(const unsigned int sz,const unsigned char *b) { if (sz >= 12u) { TypeAndTimeZone = le16toh( *((uint16_t*)(&b[0])) ); @@ -608,9 +641,11 @@ UDFtimestamp::UDFtimestamp(const unsigned int sz,const unsigned char *b) { UDFtimestamp::UDFtimestamp() { } +#endif //////////////////////////////////////////////////////// +#if !defined(OSFREE) void UDFregid::get(const unsigned int sz,const unsigned char *b) { if (sz >= 32u) { Flags = b[0]; @@ -625,9 +660,11 @@ UDFregid::UDFregid(const unsigned int sz,const unsigned char *b) { UDFregid::UDFregid() { } +#endif //////////////////////////////////////////////////////// +#if !defined(OSFREE) void UDFcharspec::get(const unsigned int sz,const unsigned char *b) { if (sz >= 64u) { CharacterSetType = b[0]; @@ -641,9 +678,11 @@ UDFcharspec::UDFcharspec(const unsigned int sz,const unsigned char *b) { UDFcharspec::UDFcharspec() { } +#endif //////////////////////////////////////////////////////// +#if !defined(OSFREE) void UDFlb_addr::get(const unsigned int sz,const unsigned char *b) { if (sz >= 6u) { LogicalBlockNumber = le32toh( *((uint32_t*)(&b[0])) ); @@ -657,9 +696,11 @@ UDFlb_addr::UDFlb_addr(const unsigned int sz,const unsigned char *b) { UDFlb_addr::UDFlb_addr() { } +#endif //////////////////////////////////////////////////////// +#if !defined(OSFREE) void UDFshort_ad::get(const unsigned int sz,const unsigned char *b) { if (sz >= 8u) { ExtentLength = le32toh( *((uint32_t*)(&b[0])) ); @@ -673,9 +714,11 @@ UDFshort_ad::UDFshort_ad(const unsigned int sz,const unsigned char *b) { UDFshort_ad::UDFshort_ad() { } +#endif //////////////////////////////////////////////////////// +#if !defined(OSFREE) void UDFlong_ad::get(const unsigned int sz,const unsigned char *b) { if (sz >= 16) { ExtentLength = le32toh( *((uint32_t*)(&b[0])) ); @@ -695,26 +738,32 @@ UDFlong_ad::UDFlong_ad(const unsigned int sz,const unsigned char *b) { UDFlong_ad::UDFlong_ad() { } +#endif //////////////////////////////////// +#if !defined(OSFREE) UDFextent::UDFextent() { } UDFextent::UDFextent(const struct UDFextent_ad &s) : ex(s) { } +#endif //////////////////////////////////// +#if !defined(OSFREE) UDFextents::UDFextents() { } UDFextents::UDFextents(const struct UDFextent_ad &s) { xl.push_back(s); } +#endif //////////////////////////////////// +#if !defined(OSFREE) void isoDrive::UDFFileEntryToExtents(UDFextents &ex,UDFFileEntry &fe) const { ex.xl.clear(); ex.indata.clear(); @@ -740,9 +789,11 @@ void isoDrive::UDFFileEntryToExtents(UDFextents &ex,UDFFileEntry &fe) const { UDFextent_rewind(ex); } +#endif //////////////////////////////////// +#if !defined(OSFREE) void isoDrive::UDFextent_rewind(struct UDFextents &ex) const { ex.relofs = 0; ex.extent = 0; @@ -843,9 +894,11 @@ unsigned int isoDrive::UDFextent_read(struct UDFextents &ex,unsigned char *buf,s return rd; } +#endif //////////////////////////////////// +#if !defined(OSFREE) class isoFile : public DOS_File { public: isoFile(isoDrive* drive, const char* name, const FileStat_Block* stat, uint32_t offset); @@ -867,7 +920,9 @@ class isoFile : public DOS_File { uint32_t fileEnd; // uint16_t info; }; +#endif +#if !defined(OSFREE) isoFile::isoFile(isoDrive* drive, const char* name, const FileStat_Block* stat, uint32_t offset) : drive(drive), fileBegin(offset) { time = stat->time; date = stat->date; @@ -878,7 +933,9 @@ isoFile::isoFile(isoDrive* drive, const char* name, const FileStat_Block* stat, this->name = NULL; SetName(name); } +#endif +#if !defined(OSFREE) bool isoFile::Read(uint8_t *data, uint16_t *size) { if (udf) { *size = (uint16_t)(drive->UDFextent_read(udffext,data,*size)); @@ -921,11 +978,15 @@ bool isoFile::Read(uint8_t *data, uint16_t *size) { filePos += *size; return true; } +#endif +#if !defined(OSFREE) bool isoFile::Write(const uint8_t* /*data*/, uint16_t* /*size*/) { return false; } +#endif +#if !defined(OSFREE) bool isoFile::Seek(uint32_t *pos, uint32_t type) { switch (type) { case DOS_SEEK_SET: @@ -952,19 +1013,26 @@ bool isoFile::Seek(uint32_t *pos, uint32_t type) { return true; } +#endif +#if !defined(OSFREE) bool isoFile::Close() { if (refCtr == 1) open = false; return true; } +#endif +#if !defined(OSFREE) uint16_t isoFile::GetInformation(void) { return 0x40; // read-only drive } +#endif +#if !defined(OSFREE) uint32_t isoFile::GetSeekPos() { return filePos - fileBegin; } +#endif int MSCDEX_RemoveDrive(char driveLetter); int MSCDEX_AddDrive(char driveLetter, const char* physicalPath, uint8_t& subUnit); @@ -976,51 +1044,57 @@ uint8_t MSCDEX_GetSubUnit(char driveLetter); bool CDROM_Interface_Image::images_init = false; isoDrive::isoDrive(char driveLetter, const char* fileName, uint8_t mediaid, int& error, std::vector& options) { - enable_udf = (dos.version.major > 7 || (dos.version.major == 7 && dos.version.minor >= 10));//default - enable_rock_ridge = (dos.version.major >= 7 || uselfn);//default - enable_joliet = (dos.version.major >= 7 || uselfn);//default - for (const auto &opt : options) { - size_t equ = opt.find_first_of('='); - std::string name,value; - - if (equ != std::string::npos) { - name = opt.substr(0,equ); - value = opt.substr(equ+1); - } - else { - name = opt; - value.clear(); - } - - if (name == "rr") { // Enable/disable Rock Ridge extensions - if (value == "1" || value == "") enable_rock_ridge = true; // "-o rr" or "-o rr=1" - else if (value == "0") enable_rock_ridge = false; - } - else if (name == "joliet") { // Enable/disable Joliet extensions - if (value == "1" || value == "") enable_joliet = true; // "-o joliet" or "-o joliet=1" - else if (value == "0") enable_joliet = false; - } - else if (name == "udf") { // Enable/disable UDF - if (value == "1" || value == "") enable_udf = true; // "-o udf" or "-o udf=1" - else if (value == "0") enable_udf = false; - } - } - - if (!strcmp(fileName,"empty")) - empty_drive = true; - - if (!CDROM_Interface_Image::images_init) { - CDROM_Interface_Image::images_init = true; - for (size_t i=0;i < 26;i++) - CDROM_Interface_Image::images[i] = NULL; - } +#if !defined(OSFREE) + enable_udf = (dos.version.major > 7 || (dos.version.major == 7 && dos.version.minor >= 10));//default + enable_rock_ridge = (dos.version.major >= 7 || uselfn);//default + enable_joliet = (dos.version.major >= 7 || uselfn);//default +#endif + for (const auto &opt : options) { + size_t equ = opt.find_first_of('='); + std::string name,value; + + if (equ != std::string::npos) { + name = opt.substr(0,equ); + value = opt.substr(equ+1); + } + else { + name = opt; + value.clear(); + } + +#if !defined(OSFREE) + if (name == "rr") { // Enable/disable Rock Ridge extensions + if (value == "1" || value == "") enable_rock_ridge = true; // "-o rr" or "-o rr=1" + else if (value == "0") enable_rock_ridge = false; + } + else if (name == "joliet") { // Enable/disable Joliet extensions + if (value == "1" || value == "") enable_joliet = true; // "-o joliet" or "-o joliet=1" + else if (value == "0") enable_joliet = false; + } + else if (name == "udf") { // Enable/disable UDF + if (value == "1" || value == "") enable_udf = true; // "-o udf" or "-o udf=1" + else if (value == "0") enable_udf = false; + } +#endif + } + + if (!strcmp(fileName,"empty")) + empty_drive = true; + + if (!CDROM_Interface_Image::images_init) { + CDROM_Interface_Image::images_init = true; + for (size_t i=0;i < 26;i++) + CDROM_Interface_Image::images[i] = NULL; + } this->fileName[0] = '\0'; this->discLabel[0] = '\0'; subUnit = 0; +#if !defined(OSFREE) nextFreeDirIterator = 0; memset(sectorHashEntries, 0, sizeof(sectorHashEntries)); memset(&rootEntry, 0, sizeof(isoDirEntry)); +#endif safe_strncpy(this->fileName, fileName, CROSS_LEN); error = UpdateMscdex(driveLetter, fileName, subUnit); @@ -1062,32 +1136,31 @@ void isoDrive::setFileName(const char* fileName) { strcat(info, fileName); } +/* because of the way this ties into IDE emulation through MSCDEX emulation, this must stay */ int isoDrive::UpdateMscdex(char driveLetter, const char* path, uint8_t& subUnit) { if (MSCDEX_HasDrive(driveLetter)) { subUnit = MSCDEX_GetSubUnit(driveLetter); if (empty_drive) { CDROM_Interface_Image* oldCdrom = CDROM_Interface_Image::images[subUnit]; - CDROM_Interface* cdrom = new CDROM_Interface_Fake(); - char pathCopy[CROSS_LEN]; - safe_strncpy(pathCopy, path, CROSS_LEN); - if (!cdrom->SetDevice(pathCopy, 0)) { + CDROM_Interface* cdrom = new CDROM_Interface_Fake(); cdrom->Addref(); + if (!cdrom->SetDevice(path, 0)) { CDROM_Interface_Image::images[subUnit] = oldCdrom; - delete cdrom; + cdrom->Release(); return 3; } MSCDEX_ReplaceDrive(cdrom, subUnit); + cdrom->Release(); } else { CDROM_Interface_Image* oldCdrom = CDROM_Interface_Image::images[subUnit]; - CDROM_Interface* cdrom = new CDROM_Interface_Image(subUnit); - char pathCopy[CROSS_LEN]; - safe_strncpy(pathCopy, path, CROSS_LEN); - if (!cdrom->SetDevice(pathCopy, 0)) { + CDROM_Interface* cdrom = new CDROM_Interface_Image(subUnit); cdrom->Addref(); + if (!cdrom->SetDevice(path, 0)) { CDROM_Interface_Image::images[subUnit] = oldCdrom; - delete cdrom; + cdrom->Release(); return 3; } MSCDEX_ReplaceDrive(cdrom, subUnit); + cdrom->Release(); } return 0; } else { @@ -1100,6 +1173,7 @@ void isoDrive::Activate(void) { } bool isoDrive::FileOpen(DOS_File **file, const char *name, uint32_t flags) { +#if !defined(OSFREE) FileStat_Block file_stat; bool success; @@ -1142,6 +1216,10 @@ bool isoDrive::FileOpen(DOS_File **file, const char *name, uint32_t flags) { } return success; +#else + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; +#endif } bool isoDrive::FileCreate(DOS_File** /*file*/, const char* /*name*/, uint16_t /*attributes*/) { @@ -1165,6 +1243,7 @@ bool isoDrive::MakeDir(const char* /*dir*/) { } bool isoDrive::TestDir(const char *dir) { +#if !defined(OSFREE) if (is_udf) { UDFFileIdentifierDescriptor fid; UDFFileEntry fe; @@ -1174,9 +1253,14 @@ bool isoDrive::TestDir(const char *dir) { isoDirEntry de; return (lookup(&de, dir) && IS_DIR(FLAGS1)); } +#else + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; +#endif } bool isoDrive::FindFirst(const char *dir, DOS_DTA &dta, bool fcb_findfirst) { +#if !defined(OSFREE) if (is_udf) { UDFFileIdentifierDescriptor fid; UDFFileEntry fe; @@ -1245,9 +1329,13 @@ bool isoDrive::FindFirst(const char *dir, DOS_DTA &dta, bool fcb_findfirst) { return FindNext(dta); } +#else + return FindNext(dta); +#endif } bool isoDrive::FindNext(DOS_DTA &dta) { +#if !defined(OSFREE) uint8_t attr; char fname[LFN_NAMELENGTH]; char pattern[CROSS_LEN], findName[DOS_NAMELENGTH_ASCII], lfindName[ISO_MAXPATHNAME]; @@ -1311,6 +1399,7 @@ bool isoDrive::FindNext(DOS_DTA &dta) { // after searching the directory, free the iterator FreeDirIterator(dirIterator); +#endif DOS_SetError(DOSERR_NO_MORE_FILES); return false; @@ -1324,6 +1413,7 @@ bool isoDrive::Rename(const char* /*oldname*/, const char* /*newname*/) { bool isoDrive::SetFileAttr(const char * name,uint16_t attr) { (void)attr; +#if !defined(OSFREE) if (is_udf) { UDFFileIdentifierDescriptor fid; UDFFileEntry fe; @@ -1335,11 +1425,16 @@ bool isoDrive::SetFileAttr(const char * name,uint16_t attr) { DOS_SetError(lookup(&de, name) ? DOSERR_ACCESS_DENIED : DOSERR_FILE_NOT_FOUND); return false; } +#else + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; +#endif } bool isoDrive::GetFileAttr(const char *name, uint16_t *attr) { *attr = 0; +#if !defined(OSFREE) if (is_udf) { UDFFileIdentifierDescriptor fid; UDFFileEntry fe; @@ -1360,6 +1455,10 @@ bool isoDrive::GetFileAttr(const char *name, uint16_t *attr) { } return success; } +#else + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; +#endif } bool isoDrive::GetFileAttrEx(char* name, struct stat *status) { @@ -1390,6 +1489,7 @@ bool isoDrive::AllocationInfo(uint16_t *bytes_sector, uint8_t *sectors_cluster, } bool isoDrive::FileExists(const char *name) { +#if !defined(OSFREE) if (is_udf) { UDFFileIdentifierDescriptor fid; UDFFileEntry fe; @@ -1399,9 +1499,14 @@ bool isoDrive::FileExists(const char *name) { isoDirEntry de; return (lookup(&de, name) && !IS_DIR(FLAGS1)); } +#else + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; +#endif } bool isoDrive::FileStat(const char *name, FileStat_Block *const stat_block) { +#if !defined(OSFREE) if (is_udf) { UDFFileIdentifierDescriptor fid; UDFFileEntry fe; @@ -1431,6 +1536,10 @@ bool isoDrive::FileStat(const char *name, FileStat_Block *const stat_block) { return success; } +#else + DOS_SetError(DOSERR_ACCESS_DENIED); + return false; +#endif } uint8_t isoDrive::GetMediaByte(void) { @@ -1453,8 +1562,9 @@ Bits isoDrive::UnMount(void) { return 2; } +#if !defined(OSFREE) int isoDrive::GetDirIterator(const UDFFileEntry &fe) { - (void)fe; + (void)fe; if (!is_udf) return 0; int dirIterator = nextFreeDirIterator; @@ -1472,7 +1582,9 @@ int isoDrive::GetDirIterator(const UDFFileEntry &fe) { return dirIterator; } +#endif +#if !defined(OSFREE) int isoDrive::GetDirIterator(const isoDirEntry* de) { // Not for UDF filesystem use! if (is_udf) return 0; @@ -1496,7 +1608,9 @@ int isoDrive::GetDirIterator(const isoDirEntry* de) { return dirIterator; } +#endif +#if !defined(OSFREE) bool isoDrive::GetNextDirEntry(const int dirIteratorHandle, UDFFileIdentifierDescriptor &fid, UDFFileEntry &fe, UDFextents &dirext, char fname[LFN_NAMELENGTH],unsigned int dirIteratorIndex) { if (!is_udf) return 0; @@ -1614,23 +1728,23 @@ bool isoDrive::GetNextDirEntry(const int dirIteratorHandle, UDFFileIdentifierDes while (*s == '.'||*s == ' ') s++; bool lead = false; while (*s != 0) { - if(s == ext) break; // doesn't match if ext == NULL, so no harm in that case - if (!lead && ((IS_PC98_ARCH && shiftjis_lead_byte(*s & 0xFF)) || (isDBCSCP() && isKanji1_gbk(*s & 0xFF)))) { - if (c >= (7-tailsize)) break; - lead = true; - *d++ = *s; - c++; + if(s == ext) break; // doesn't match if ext == NULL, so no harm in that case + if (!lead && ((IS_PC98_ARCH && shiftjis_lead_byte(*s & 0xFF)) || (isDBCSCP() && isKanji1_gbk(*s & 0xFF)))) { + if (c >= (7-tailsize)) break; + lead = true; + *d++ = *s; + c++; } else if ((unsigned char)*s <= 32 || (unsigned char)*s == 127 || *s == '.' || *s == '\"' || *s == '+' || *s == '=' || *s == ',' || *s == ';' || *s == ':' || *s == '<' || *s == '>' || ((*s == '[' || *s == ']' || *s == '|' || *s == '\\')&&(!lead||((dos.loaded_codepage==936||IS_PDOSV)&&!gbk)))||*s=='?'||*s=='*') { - lead = false; - if (*s != '.') { - *d++ = '_'; - c++; - } - } else if (c >= (8-tailsize)) { - if (s < ext) s = ext; - break; - } else { - lead = false; + lead = false; + if (*s != '.') { + *d++ = '_'; + c++; + } + } else if (c >= (8-tailsize)) { + if (s < ext) s = ext; + break; + } else { + lead = false; *d++ = *s; c++; } @@ -1646,16 +1760,16 @@ bool isoDrive::GetNextDirEntry(const int dirIteratorHandle, UDFFileIdentifierDes c = 0; while (*s != 0) { if (!lead && ((IS_PC98_ARCH && shiftjis_lead_byte(*s & 0xFF)) || (isDBCSCP() && isKanji1_gbk(*s & 0xFF)))) { - if (c >= 2) break; - lead = true; - *d++ = *s; - c++; + if (c >= 2) break; + lead = true; + *d++ = *s; + c++; } else if ((unsigned char)*s <= 32 || (unsigned char)*s == 127 || *s == '.' || *s == '\"' || *s == '+' || *s == '=' || *s == ',' || *s == ';' || *s == ':' || *s == '<' || *s == '>' || ((*s == '[' || *s == ']' || *s == '|' || *s == '\\')&&(!lead||((dos.loaded_codepage==936||IS_PDOSV)&&!gbk)))||*s=='?'||*s=='*') { - lead = false; - *d++ = '_'; - c++; - } else if (c >= 3) break; - else { + lead = false; + *d++ = '_'; + c++; + } else if (c >= 3) break; + else { *d++ = *s; c++; } @@ -1669,7 +1783,9 @@ bool isoDrive::GetNextDirEntry(const int dirIteratorHandle, UDFFileIdentifierDes return true; } +#endif +#if !defined(OSFREE) bool isoDrive::GetNextDirEntry(const int dirIteratorHandle, isoDirEntry* de) { // Not for UDF filesystem use! if (is_udf) return 0; @@ -1705,7 +1821,9 @@ bool isoDrive::GetNextDirEntry(const int dirIteratorHandle, isoDirEntry* de) { return result; } +#endif +#if !defined(OSFREE) void isoDrive::FreeDirIterator(const int dirIterator) { dirIterators[dirIterator].valid = false; @@ -1718,7 +1836,9 @@ void isoDrive::FreeDirIterator(const int dirIterator) { } } } +#endif +#if !defined(OSFREE) bool isoDrive::ReadCachedSector(uint8_t** buffer, const uint32_t sector) { // get hash table entry unsigned int pos = sector % ISO_MAX_HASH_TABLE_SIZE; @@ -1736,6 +1856,7 @@ bool isoDrive::ReadCachedSector(uint8_t** buffer, const uint32_t sector) { *buffer = he.data; return true; } +#endif inline bool isoDrive :: readSector(uint8_t *buffer, uint32_t sector) const { _driveUsed = true; @@ -1743,6 +1864,7 @@ inline bool isoDrive :: readSector(uint8_t *buffer, uint32_t sector) const { return CDROM_Interface_Image::images[subUnit]->ReadSector(buffer, false, sector); } +#if !defined(OSFREE) int isoDrive::readDirEntry(isoDirEntry* de, const uint8_t* data,unsigned int dirIteratorIndex) const { // This code is NOT for UDF filesystem access! if (is_udf) return -1; @@ -1916,23 +2038,23 @@ int isoDrive::readDirEntry(isoDirEntry* de, const uint8_t* data,unsigned int dir while (*s == '.'||*s == ' ') s++; bool lead = false; while (*s != 0) { - if(s == ext) break; // doesn't match if ext == NULL, so no harm in that case - if (!lead && ((IS_PC98_ARCH && shiftjis_lead_byte(*s & 0xFF)) || (isDBCSCP() && isKanji1_gbk(*s & 0xFF)))) { - if (c >= (7-tailsize)) break; - lead = true; - *d++ = *s; - c++; + if(s == ext) break; // doesn't match if ext == NULL, so no harm in that case + if (!lead && ((IS_PC98_ARCH && shiftjis_lead_byte(*s & 0xFF)) || (isDBCSCP() && isKanji1_gbk(*s & 0xFF)))) { + if (c >= (7-tailsize)) break; + lead = true; + *d++ = *s; + c++; } else if ((unsigned char)*s <= 32 || (unsigned char)*s == 127 || *s == '.' || *s == '\"' || *s == '+' || *s == '=' || *s == ',' || *s == ';' || *s == ':' || *s == '<' || *s == '>' || ((*s == '[' || *s == ']' || *s == '|' || *s == '\\')&&(!lead||((dos.loaded_codepage==936||IS_PDOSV)&&!gbk)))||*s=='?'||*s=='*') { - lead = false; - if (*s != '.') { - *d++ = '_'; - c++; - } - } else if (c >= (8-tailsize)) { - if (s < ext) s = ext; - break; - } else { - lead = false; + lead = false; + if (*s != '.') { + *d++ = '_'; + c++; + } + } else if (c >= (8-tailsize)) { + if (s < ext) s = ext; + break; + } else { + lead = false; *d++ = *s; c++; } @@ -1948,16 +2070,16 @@ int isoDrive::readDirEntry(isoDirEntry* de, const uint8_t* data,unsigned int dir c = 0; while (*s != 0) { if (!lead && ((IS_PC98_ARCH && shiftjis_lead_byte(*s & 0xFF)) || (isDBCSCP() && isKanji1_gbk(*s & 0xFF)))) { - if (c >= 2) break; - lead = true; - *d++ = *s; - c++; + if (c >= 2) break; + lead = true; + *d++ = *s; + c++; } else if ((unsigned char)*s <= 32 || (unsigned char)*s == 127 || *s == '.' || *s == '\"' || *s == '+' || *s == '=' || *s == ',' || *s == ';' || *s == ':' || *s == '<' || *s == '>' || ((*s == '[' || *s == ']' || *s == '|' || *s == '\\')&&(!lead||((dos.loaded_codepage==936||IS_PDOSV)&&!gbk)))||*s=='?'||*s=='*') { - lead = false; - *d++ = '_'; - c++; - } else if (c >= 3) break; - else { + lead = false; + *d++ = '_'; + c++; + } else if (c >= 3) break; + else { *d++ = *s; c++; } @@ -1968,9 +2090,12 @@ int isoDrive::readDirEntry(isoDirEntry* de, const uint8_t* data,unsigned int dir *d = 0; } } + return de->length; } +#endif +#if !defined(OSFREE) static bool escape_is_joliet(const unsigned char *esc) { if ( !memcmp(esc,"\x25\x2f\x40",3) || !memcmp(esc,"\x25\x2f\x43",3) || @@ -1980,7 +2105,9 @@ static bool escape_is_joliet(const unsigned char *esc) { return false; } +#endif +#if !defined(OSFREE) bool isoDrive :: loadImageUDFAnchorVolumePointer(UDFAnchorVolumeDescriptorPointer &avdp,uint8_t pvd[COOKED_SECTOR_SIZE],uint32_t sector) const { UDFTagId aid; @@ -1989,7 +2116,9 @@ bool isoDrive :: loadImageUDFAnchorVolumePointer(UDFAnchorVolumeDescriptorPointe avdp.get(aid,COOKED_SECTOR_SIZE,pvd); return true; } +#endif +#if !defined(OSFREE) bool isoDrive :: loadImageUDF() { uint8_t pvd[COOKED_SECTOR_SIZE]; UDFextent_ad avdex; @@ -2091,17 +2220,21 @@ bool isoDrive :: loadImageUDF() { return true; } +#endif bool isoDrive :: loadImage() { uint8_t pvd[COOKED_SECTOR_SIZE]; unsigned int choose_iso9660 = 0; unsigned int choose_joliet = 0; unsigned int sector = 16; - + +#if !defined(OSFREE) is_rock_ridge = false; is_udf = false; +#endif dataCD = false; +#if !defined(OSFREE) if (loadImageUDF()) { LOG(LOG_MISC,LOG_DEBUG)("ISO: UDF filesystem detected"); if (enable_udf) { @@ -2109,11 +2242,14 @@ bool isoDrive :: loadImage() { dataCD = true; return true; } else if (dos.version.major < 7 || (dos.version.major == 7 && dos.version.minor < 10)) { - const char *msg = "Found UDF image which requires a reported DOS version of 7.10 to mount.\r\n"; - uint16_t n = (uint16_t)strlen(msg); - DOS_WriteFile (STDOUT,(uint8_t *)msg, &n); + if (!dos_kernel_disabled) { + const char *msg = "Found UDF image which requires a reported DOS version of 7.10 to mount.\r\n"; + uint16_t n = (uint16_t)strlen(msg); + DOS_WriteFile (STDOUT,(uint8_t *)msg, &n); + } } } +#endif /* scan the volume descriptors */ while (sector < 256) { @@ -2129,6 +2265,7 @@ bool isoDrive :: loadImage() { } } } +#if !defined(OSFREE) else if (pvd[0] == 2) { // supplementary volume (usually Joliet, but not necessarily) if (!strncmp((char*)(&pvd[1]), "CD001", 5) && pvd[6] == 1) { bool joliet = escape_is_joliet(&pvd[88]); @@ -2146,6 +2283,7 @@ bool isoDrive :: loadImage() { } } } +#endif else if (pvd[0] == 0xFF) { // terminating descriptor break; } @@ -2165,20 +2303,27 @@ bool isoDrive :: loadImage() { } if (choose_joliet && enable_joliet) { +#if !defined(OSFREE) sector = choose_joliet; LOG(LOG_MISC,LOG_DEBUG)("ISO 9660: Choosing Joliet (unicode) volume at sector %u",sector); is_joliet = true; iso = true; +#else + return false; +#endif } else if (choose_iso9660) { sector = choose_iso9660; LOG(LOG_MISC,LOG_DEBUG)("ISO 9660: Choosing ISO 9660 volume at sector %u",sector); +#if !defined(OSFREE) is_joliet = false; +#endif } else { return false; } +#if !defined(OSFREE) readSector(pvd, sector); uint16_t offset = iso ? 156 : 180; if (readDirEntry(&this->rootEntry, &pvd[offset], 0) <= 0) @@ -2228,16 +2373,20 @@ bool isoDrive :: loadImage() { } } } +#endif +#if !defined(OSFREE) /* Sanity check: This code does NOT support Rock Ridge extensions when reading the Joliet supplementary volume! */ if (is_joliet) { assert(!is_rock_ridge); } +#endif dataCD = true; return true; } +#if !defined(OSFREE) bool isoDrive :: lookup(UDFFileIdentifierDescriptor &fid, UDFFileEntry &fe, const char *path) { uint8_t pvd[COOKED_SECTOR_SIZE]; char fname[LFN_NAMELENGTH]; @@ -2304,7 +2453,9 @@ bool isoDrive :: lookup(UDFFileIdentifierDescriptor &fid, UDFFileEntry &fe, cons return true; } +#endif +#if !defined(OSFREE) bool isoDrive :: lookup(isoDirEntry *de, const char *path) { // This code is not for UDF if (is_udf) return false; @@ -2344,14 +2495,20 @@ bool isoDrive :: lookup(isoDirEntry *de, const char *path) { return true; } +#endif +#if !defined(OSFREE) void IDE_ATAPI_MediaChangeNotify(unsigned char drive_index); +#endif void isoDrive :: MediaChange() { +#if !defined(OSFREE) IDE_ATAPI_MediaChangeNotify(toupper(driveLetter) - 'A'); /* ewwww */ +#endif } void isoDrive :: EmptyCache(void) { +#if !defined(OSFREE) // Magical Girl Pretty Sammy installer // Installer copies files found by FindFirst/FindNext with "command /c copy", // this function is called at end of DOS_Shell::CMD_COPY and cache is cleared, so only one file is copied. @@ -2378,4 +2535,5 @@ void isoDrive :: EmptyCache(void) { memset(&rootEntry, 0, sizeof(isoDirEntry)); //safe_strncpy(this->fileName, fileName, CROSS_LEN); /* deleted to fix issue #3848. Revert this if there are any flaws */ loadImage(); +#endif } diff --git a/src/dos/drive_local.cpp b/src/dos/drive_local.cpp index 0f8d7052547..60fb69b7de0 100644 --- a/src/dos/drive_local.cpp +++ b/src/dos/drive_local.cpp @@ -33,10 +33,13 @@ #include #include #else -#include #include #include +#ifdef OS2 +#include +#endif #endif +#include #include #include @@ -124,6 +127,63 @@ int tryconvertcp = 0; bool cpwarn_once = false, ignorespecial = false, notrycp = false; std::string prefix_local = ".DBLOCALFILE"; + +#if __APPLE__ && __MAC_OS_X_VERSION_MIN_REQUIRED < 101300 +// futimens() not available in macOS 10.12 (Sierra) and before +#include +#include +#include +#include +#include +#include + +// POSIX defined constants(not defined in old macOS) +#define UTIME_NOW ((1l << 30) - 1l) +#define UTIME_OMIT ((1l << 30) - 2l) + +int futimens (int fd, const struct timespec times[2]) { + if (!times) { + return futimes(fd, NULL); // If NULL, update to current time + } + + struct timeval tv[2]; + + // Retrieve current file timestamps (used for UTIME_OMIT) + struct stat st; + if (fstat(fd, &st) == -1) { + return -1; + } + + // Access time + if (times[0].tv_nsec == UTIME_NOW) { + struct timeval now; + if (gettimeofday(&now, NULL) == -1) return -1; + tv[0] = now; + } else if (times[0].tv_nsec == UTIME_OMIT) { + tv[0].tv_sec = st.st_atimespec.tv_sec; + tv[0].tv_usec = st.st_atimespec.tv_nsec / 1000; + } else { + tv[0].tv_sec = times[0].tv_sec; + tv[0].tv_usec = times[0].tv_nsec / 1000; + } + + // Modified time + if (times[1].tv_nsec == UTIME_NOW) { + struct timeval now; + if (gettimeofday(&now, NULL) == -1) return -1; + tv[1] = now; + } else if (times[1].tv_nsec == UTIME_OMIT) { + tv[1].tv_sec = st.st_mtimespec.tv_sec; + tv[1].tv_usec = st.st_mtimespec.tv_nsec / 1000; + } else { + tv[1].tv_sec = times[1].tv_sec; + tv[1].tv_usec = times[1].tv_nsec / 1000; + } + + return futimes(fd, tv); +} +#endif + char* GetCrossedName(const char *basedir, const char *dir) { static char crossname[CROSS_LEN]; strcpy(crossname, basedir); @@ -1114,14 +1174,14 @@ void getdrivezpath(std::string &path, std::string const& dirname) { } if (!path.size() || !ret) { path = ""; - Cross::GetPlatformConfigDir(path); + path = Cross::GetPlatformConfigDir(); path += dirname; host_name = CodePageGuestToHost(path.c_str()); res=host_name == NULL?stat(path.c_str(),&cstat):ht_stat(host_name,&hstat); ret=res==-1?false:((host_name == NULL?cstat.st_mode:hstat.st_mode) & S_IFDIR); if (!ret) { path = ""; - Cross::GetPlatformResDir(path); + path = Cross::GetPlatformResDir(); path += dirname; host_name = CodePageGuestToHost(path.c_str()); res=host_name == NULL?stat(path.c_str(),&cstat):ht_stat(host_name,&hstat); @@ -1716,7 +1776,7 @@ bool localDrive::FindFirst(const char * _dir,DOS_DTA & dta,bool fcb_findfirst) { else if((IS_PC98_ARCH || isDBCSCP()) && isKanji1(tempDir[i])) lead = true; else tempDir[i]=toupper(tempDir[i]); } - if (nocachedir) EmptyCache(); + if (nocachedir) EmptyCache(); if (allocation.mediaid==0xF0 ) { EmptyCache(); //rescan floppie-content on each findfirst @@ -1758,13 +1818,13 @@ bool localDrive::FindFirst(const char * _dir,DOS_DTA & dta,bool fcb_findfirst) { DOS_SetError(DOSERR_NO_MORE_FILES); return false; } - dta.SetResult(dirCache.GetLabel(),dirCache.GetLabel(),0,0,0,0,DOS_ATTR_VOLUME); + dta.SetResult(dirCache.GetLabel(),dirCache.GetLabel(),0,0,0,0,DOS_ATTR_VOLUME); return true; - } else if ((sAttr & DOS_ATTR_VOLUME) && (*_dir == 0) && !fcb_findfirst) { - //should check for a valid leading directory instead of 0 - //exists==true if the volume label matches the searchmask and the path is valid + } else if ((sAttr & DOS_ATTR_VOLUME) && (*_dir == 0) && !fcb_findfirst) { + //should check for a valid leading directory instead of 0 + //exists==true if the volume label matches the searchmask and the path is valid if (WildFileCmp(dirCache.GetLabel(),tempDir)) { - dta.SetResult(dirCache.GetLabel(),dirCache.GetLabel(),0,0,0,0,DOS_ATTR_VOLUME); + dta.SetResult(dirCache.GetLabel(),dirCache.GetLabel(),0,0,0,0,DOS_ATTR_VOLUME); return true; } } @@ -1776,19 +1836,19 @@ char * DBCS_upcase(char * str); bool localDrive::FindNext(DOS_DTA & dta) { - char * dir_ent, *ldir_ent; + char * dir_ent, *ldir_ent; ht_stat_t stat_block; - char full_name[CROSS_LEN], lfull_name[LFN_NAMELENGTH+1]; - char dir_entcopy[CROSS_LEN], ldir_entcopy[CROSS_LEN]; + char full_name[CROSS_LEN], lfull_name[LFN_NAMELENGTH+1]; + char dir_entcopy[CROSS_LEN], ldir_entcopy[CROSS_LEN]; - uint8_t srch_attr;char srch_pattern[LFN_NAMELENGTH+1]; + uint8_t srch_attr;char srch_pattern[LFN_NAMELENGTH+1]; uint8_t find_attr; - dta.GetSearchParams(srch_attr,srch_pattern,false); + dta.GetSearchParams(srch_attr,srch_pattern,false); uint16_t id = lfn_filefind_handle>=LFN_FILEFIND_MAX?dta.GetDirID():ldid[lfn_filefind_handle]; again: - if (!dirCache.FindNext(id,dir_ent,ldir_ent)) { + if (!dirCache.FindNext(id,dir_ent,ldir_ent)) { if (lfn_filefind_handle=LFN_FILEFIND_MAX?srchInfo[id].srch_dir:(ldir[lfn_filefind_handle]!=""?ldir[lfn_filefind_handle].c_str():"\\")); strcpy(lfull_name,full_name); strcat(full_name,dir_ent); - strcat(lfull_name,ldir_ent); + strcat(lfull_name,ldir_ent); //GetExpandName might indirectly destroy dir_ent (by caching in a new directory //and due to its design dir_ent might be lost.) //Copying dir_ent first strcpy(dir_entcopy,dir_ent); - strcpy(ldir_entcopy,ldir_ent); + strcpy(ldir_entcopy,ldir_ent); - char *temp_name = dirCache.GetExpandName(full_name); + char *temp_name = dirCache.GetExpandName(full_name); - // guest to host code page translation - const host_cnv_char_t* host_name = CodePageGuestToHost(temp_name); - if (host_name == NULL) { - LOG_MSG("%s: Filename '%s' from guest is non-representable on the host filesystem through code page conversion",__FUNCTION__,temp_name); + // guest to host code page translation + const host_cnv_char_t* host_name = CodePageGuestToHost(temp_name); + if (host_name == NULL) { + LOG_MSG("%s: Filename '%s' from guest is non-representable on the host filesystem through code page conversion",__FUNCTION__,temp_name); goto again;//No symlinks and such - } + } if (ht_stat(host_name,&stat_block)!=0) goto again;//No symlinks and such @@ -1832,45 +1892,45 @@ bool localDrive::FindNext(DOS_DTA & dta) { bool isdir = find_attr & DOS_ATTR_DIRECTORY; if (!isdir) find_attr|=DOS_ATTR_ARCHIVE; if(!(stat_block.st_mode & S_IWUSR)) find_attr|=DOS_ATTR_READ_ONLY; - std::string fname = create_filename_of_special_operation(temp_name, "ATR", false); - if (ht_stat(fname.c_str(),&stat_block)==0) { - unsigned int len = stat_block.st_size; - if (len & 1) { - if (isdir) - find_attr|=DOS_ATTR_ARCHIVE; - else - find_attr&=~DOS_ATTR_ARCHIVE; - } - if (len & 2) find_attr|=DOS_ATTR_HIDDEN; - if (len & 4) find_attr|=DOS_ATTR_SYSTEM; - } + std::string fname = create_filename_of_special_operation(temp_name, "ATR", false); + if (ht_stat(fname.c_str(),&stat_block)==0) { + unsigned int len = stat_block.st_size; + if (len & 1) { + if (isdir) + find_attr|=DOS_ATTR_ARCHIVE; + else + find_attr&=~DOS_ATTR_ARCHIVE; + } + if (len & 2) find_attr|=DOS_ATTR_HIDDEN; + if (len & 4) find_attr|=DOS_ATTR_SYSTEM; + } #endif - if (~srch_attr & find_attr & DOS_ATTR_DIRECTORY) goto again; + if (~srch_attr & find_attr & DOS_ATTR_DIRECTORY) goto again; /*file is okay, setup everything to be copied in DTA Block */ char find_name[DOS_NAMELENGTH_ASCII], lfind_name[LFN_NAMELENGTH+1]; - uint16_t find_date,find_time;uint32_t find_size,find_hsize; + uint16_t find_date,find_time;uint32_t find_size,find_hsize; if(strlen(dir_entcopy)tm_year+1900),(uint16_t)(time->tm_mon+1),(uint16_t)time->tm_mday); find_time=DOS_PackTime((uint16_t)time->tm_hour,(uint16_t)time->tm_min,(uint16_t)time->tm_sec); } else { @@ -1890,8 +1950,8 @@ void localDrive::remove_special_file_from_disk(const char* dosname, const char* else unlink(newname.c_str()); #else - (void)dosname; - (void)operation; + (void)dosname; + (void)operation; #endif } @@ -1927,10 +1987,10 @@ bool localDrive::add_special_file_to_disk(const char* dosname, const char* opera delete[] buf; return true; #else - (void)dosname; - (void)operation; - (void)value; - (void)isdir; + (void)dosname; + (void)operation; + (void)value; + (void)isdir; return false; #endif } @@ -1952,10 +2012,10 @@ bool localDrive::SetFileAttr(const char * name,uint16_t attr) { #if defined (WIN32) if (!SetFileAttributesW(host_name, attr)) - { + { DOS_SetError((uint16_t)GetLastError()); return false; - } + } dirCache.EmptyCache(); return true; #else @@ -2112,35 +2172,7 @@ unsigned long localDrive::GetSerial() { #endif bool localDrive::MakeDir(const char * dir) { - if (nocachedir) EmptyCache(); - - if (readonly) { - DOS_SetError(DOSERR_WRITE_PROTECTED); - return false; - } - - char newdir[CROSS_LEN]; - strcpy(newdir,basedir); - strcat(newdir,dir); - CROSS_FILENAME(newdir); - - const char* temp_name = dirCache.GetExpandName(newdir); - - // guest to host code page translation - const host_cnv_char_t* host_name = CodePageGuestToHost(temp_name); - if (host_name == NULL) { - LOG_MSG("%s: Filename '%s' from guest is non-representable on the host filesystem through code page conversion",__FUNCTION__,newdir); - DOS_SetError(DOSERR_FILE_NOT_FOUND); // FIXME - return false; - } - -#if defined (WIN32) /* MS Visual C++ */ - int temp=_wmkdir(host_name); -#else - int temp=mkdir(host_name,0775); -#endif - if (temp==0) dirCache.CacheOut(newdir,true); - return (temp==0);// || ((temp!=0) && (errno==EEXIST)); + return false; } bool localDrive::RemoveDir(const char * dir) { @@ -2289,7 +2321,11 @@ bool localDrive::AllocationInfo64(uint32_t* _bytes_sector, uint32_t* _sectors_cl res = GetDiskFreeSpace(diskToQuery, &dwSectPerClust, &dwBytesPerSect, &dwFreeClusters, &dwTotalClusters); if(dwSectPerClust * dwBytesPerSect == 0) return false; ULARGE_INTEGER FreeBytesAvailableToCaller, TotalNumberOfBytes; - GetDiskFreeSpaceEx(diskToQuery, &FreeBytesAvailableToCaller, &TotalNumberOfBytes, NULL); + HMODULE __kernel32 = GetModuleHandleW(L"kernel32.dll"); + auto __GetDiskFreeSpaceExA = (BOOL (WINAPI *)(LPCSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER))GetProcAddress(__kernel32,"GetDiskFreeSpaceExA"); + if (!__GetDiskFreeSpaceExA) + return false; + __GetDiskFreeSpaceExA(diskToQuery, &FreeBytesAvailableToCaller, &TotalNumberOfBytes, NULL); qwTotalClusters = TotalNumberOfBytes.QuadPart / (dwSectPerClust * dwBytesPerSect); qwFreeClusters = FreeBytesAvailableToCaller.QuadPart / (dwSectPerClust * dwBytesPerSect); @@ -2899,6 +2935,7 @@ bool LocalFile::LockFile(uint8_t mode, uint32_t pos, uint16_t size) { case EINTR: case ENOLCK: case EAGAIN: + case EACCES: DOS_SetError(0x21); break; case EBADF: @@ -2963,26 +3000,26 @@ bool LocalFile::Seek(uint32_t * pos,uint32_t type) { bool LocalFile::Close() { if (!newtime && fhandle && last_action == WRITE) UpdateLocalDateTime(); - if (newtime && fhandle) { + if (newtime && fhandle) { // force STDIO to flush buffers on this file handle, or else fclose() will write buffered data // and cause mtime to reset back to current time. fflush(fhandle); - // backport from DOS_PackDate() and DOS_PackTime() - struct tm tim = { 0 }; - tim.tm_sec = (time&0x1f)*2; - tim.tm_min = (time>>5)&0x3f; - tim.tm_hour = (time>>11)&0x1f; - tim.tm_mday = date&0x1f; - tim.tm_mon = ((date>>5)&0x0f)-1; - tim.tm_year = (date>>9)+1980-1900; + // backport from DOS_PackDate() and DOS_PackTime() + struct tm tim = { 0 }; + tim.tm_sec = (time&0x1f)*2; + tim.tm_min = (time>>5)&0x3f; + tim.tm_hour = (time>>11)&0x1f; + tim.tm_mday = date&0x1f; + tim.tm_mon = ((date>>5)&0x0f)-1; + tim.tm_year = (date>>9)+1980-1900; // sanitize the date in case of invalid timestamps (such as 0x0000 date/time fields) if (tim.tm_mon < 0) tim.tm_mon = 0; if (tim.tm_mday == 0) tim.tm_mday = 1; - // have the C run-time library code compute whether standard time or daylight saving time is in effect. - tim.tm_isdst = -1; - // serialize time - mktime(&tim); + // have the C run-time library code compute whether standard time or daylight saving time is in effect. + tim.tm_isdst = -1; + // serialize time + mktime(&tim); // change file time by file handle (while we still have it open) // so that we do not have to duplicate guest to host filename conversion here. @@ -2996,6 +3033,14 @@ bool LocalFile::Close() { extern int errno; LOG_MSG("Set time failed (%s)", strerror(errno)); } +#elif defined(OS2) + struct timeval ftsp[2]; + ftsp[0].tv_sec = ftsp[1].tv_sec = mktime(&tim); + ftsp[0].tv_usec = ftsp[1].tv_usec = 0; + if (futimes(fileno(fhandle), ftsp)) { + extern int errno; + LOG_MSG("Set time failed (%s)", strerror(errno)); + } #elif !defined(RISCOS) // Linux (TODO: What about Mac OS X/Darwin?) // NTS: Do not attempt futime, Linux doesn't have it. // Do not attempt futimes, Linux man pages LIE about having it. It's even there in the freaking header, but not recognized! @@ -3009,16 +3054,16 @@ bool LocalFile::Close() { LOG_MSG("Set time failed (%s)", strerror(errno)); } #endif - } + } - // only close if one reference left - if (refCtr==1) { - if(fhandle) fclose(fhandle); - fhandle = nullptr; - open = false; - } + // only close if one reference left + if (refCtr==1) { + if(fhandle) fclose(fhandle); + fhandle = nullptr; + open = false; + } - return true; + return true; } uint16_t LocalFile::GetInformation(void) { @@ -3113,7 +3158,7 @@ void LocalFile::Flush(void) { } } - +#if !defined(OSFREE) // ******************************************** // CDROM DRIVE // ******************************************** @@ -3232,3 +3277,4 @@ Bits cdromDrive::UnMount(void) { } return 2; } +#endif diff --git a/src/dos/drive_overlay.cpp b/src/dos/drive_overlay.cpp index 290dc2051b8..5852106b032 100644 --- a/src/dos/drive_overlay.cpp +++ b/src/dos/drive_overlay.cpp @@ -37,11 +37,14 @@ #include #define OVERLAY_DIR 1 + +#if !defined(OSFREE) bool logoverlay = false; extern int lfn_filefind_handle; extern uint16_t ldid[256]; extern std::string ldir[256]; std::string prefix_overlay = ".DBOVERLAY"; +#endif using namespace std; @@ -72,10 +75,13 @@ using namespace std; //Either upgrade addentry to support directories. (without actually caching stuff in! (code in testing)) //Or create an empty directory in local drive base. +#if !defined(OSFREE) host_cnv_char_t *CodePageGuestToHost(const char *s); char* GetCrossedName(const char *basedir, const char *dir); bool isDBCSCP(), isKanji1(uint8_t chr), shiftjis_lead_byte(int c); +#endif +#if !defined(OSFREE) bool Overlay_Drive::RemoveDir(const char * dir) { if (ovlnocachedir) { dirCache.EmptyCache(); @@ -181,7 +187,9 @@ bool Overlay_Drive::RemoveDir(const char * dir) { return true; } } +#endif +#if !defined(OSFREE) bool Overlay_Drive::MakeDir(const char * dir) { if (ovlnocachedir) { dirCache.EmptyCache(); @@ -241,11 +249,7 @@ bool Overlay_Drive::MakeDir(const char * dir) { host_name = CodePageGuestToHost(pdir); if (host_name!=NULL) { #if defined (WIN32) - temp=_wmkdir(host_name); - if (temp) temp=_wmkdir_p(host_name); #else - temp=mkdir(host_name,0775); - if (temp) temp=mkdir_p(host_name,0775); #endif if (temp==0) madepdir=true; } @@ -256,11 +260,7 @@ bool Overlay_Drive::MakeDir(const char * dir) { host_name = CodePageGuestToHost(newdir); if (host_name!=NULL) { #if defined (WIN32) - temp=_wmkdir(host_name); - if (temp) temp=_wmkdir_p(host_name); #else - temp=mkdir(host_name,0775); - if (temp) temp=mkdir_p(host_name,0775); #endif } if (temp==0) { @@ -287,7 +287,9 @@ bool Overlay_Drive::MakeDir(const char * dir) { return (temp == 0);// || ((temp!=0) && (errno==EEXIST)); } +#endif +#if !defined(OSFREE) bool Overlay_Drive::TestDir(const char * dir) { if (ovlnocachedir) { dirCache.EmptyCache(); @@ -315,8 +317,9 @@ bool Overlay_Drive::TestDir(const char * dir) { // Not exclusive to overlay nor marked as deleted. Pass on to LocalDrive return localDrive::TestDir(dir); } +#endif - +#if !defined(OSFREE) class OverlayFile: public LocalFile { public: OverlayFile(const char* name, FILE * handle):LocalFile(name,handle){ @@ -345,10 +348,12 @@ class OverlayFile: public LocalFile { //private: bool overlay_active; }; +#endif //Create leading directories of a file being overlaid if they exist in the original (localDrive). //This function is used to create copies of existing files, so all leading directories exist in the original. +#if !defined(OSFREE) FILE* Overlay_Drive::create_file_in_overlay(const char* dos_filename, char const* mode) { char newname[CROSS_LEN]; strcpy(newname,overlaydir); //TODO GOG make part of class and join in @@ -433,11 +438,13 @@ FILE* Overlay_Drive::create_file_in_overlay(const char* dos_filename, char const return f; } +#endif #ifndef BUFSIZ #define BUFSIZ 2048 #endif +#if !defined(OSFREE) bool OverlayFile::create_copy() { //test if open/valid/etc //ensure file position @@ -466,9 +473,9 @@ bool OverlayFile::create_copy() { //Flags ? return true; } +#endif - - +#if !defined(OSFREE) static OverlayFile* ccc(DOS_File* file) { LocalFile* l = dynamic_cast(file); if (!l) E_Exit("overlay input file is not a LocalFile"); @@ -479,7 +486,9 @@ static OverlayFile* ccc(DOS_File* file) { delete l; return ret; } +#endif +#if !defined(OSFREE) Overlay_Drive::Overlay_Drive(const char * startdir,const char* overlay, uint16_t _bytes_sector,uint8_t _sectors_cluster,uint16_t _total_clusters,uint16_t _free_clusters,uint8_t _mediaid,uint8_t &error,std::vector &options) :localDrive(startdir,_bytes_sector,_sectors_cluster,_total_clusters,_free_clusters,_mediaid,options),special_prefix(prefix_overlay.c_str()) { optimize_cache_v1 = true; //Try to not reread overlay files on deletes. Ideally drive_cache should be improved to handle deletes properly. @@ -516,7 +525,9 @@ Overlay_Drive::Overlay_Drive(const char * startdir,const char* overlay, uint16_t update_cache(true); } +#endif +#if !defined(OSFREE) void Overlay_Drive::convert_overlay_to_DOSname_in_base(char* dirname ) { dirname[0] = 0;//ensure good return string @@ -564,7 +575,9 @@ void Overlay_Drive::convert_overlay_to_DOSname_in_base(char* dirname ) } } } +#endif +#if !defined(OSFREE) bool Overlay_Drive::FileOpen(DOS_File * * file,const char * name,uint32_t flags) { if (ovlnocachedir) { dirCache.EmptyCache(); @@ -663,7 +676,9 @@ bool Overlay_Drive::FileOpen(DOS_File * * file,const char * name,uint32_t flags) } return fileopened; } +#endif +#if !defined(OSFREE) bool Overlay_Drive::FileCreate(DOS_File * * file,const char * name,uint16_t /*attributes*/) { if (ovlnocachedir) { dirCache.EmptyCache(); @@ -701,21 +716,27 @@ bool Overlay_Drive::FileCreate(DOS_File * * file,const char * name,uint16_t /*at remove_deleted_file(name,true); return true; } +#endif +#if !defined(OSFREE) void Overlay_Drive::add_DOSname_to_cache(const char* name) { for (std::vector::const_iterator itc = DOSnames_cache.begin(); itc != DOSnames_cache.end(); ++itc){ if (!strcasecmp((*itc).c_str(), name)) return; } DOSnames_cache.push_back(name); } +#endif +#if !defined(OSFREE) void Overlay_Drive::remove_DOSname_from_cache(const char* name) { for (std::vector::iterator it = DOSnames_cache.begin(); it != DOSnames_cache.end(); ++it) { if (!strcasecmp((*it).c_str(), name)) { DOSnames_cache.erase(it); return;} } } +#endif +#if !defined(OSFREE) bool Overlay_Drive::Sync_leading_dirs(const char* dos_filename){ const char* lastdir = strrchr_dbcs((char *)dos_filename,'\\'); //If there are no directories, return success. @@ -757,11 +778,9 @@ bool Overlay_Drive::Sync_leading_dirs(const char* dos_filename){ //folder does not exist, make it if (logoverlay) LOG_MSG("creating %s",dirnameoverlay); #if defined (WIN32) /* MS Visual C++ */ - int temp = mkdir(dirnameoverlay); #else - int temp = mkdir(dirnameoverlay,0775); #endif - if (temp != 0) return false; + return false; } } leaddir = leaddir + 1; //Move to next @@ -769,7 +788,9 @@ bool Overlay_Drive::Sync_leading_dirs(const char* dos_filename){ return true; } +#endif +#if !defined(OSFREE) void Overlay_Drive::update_cache(bool read_directory_contents) { uint32_t a = GetTicks(); std::vector specials; @@ -1003,9 +1024,10 @@ void Overlay_Drive::update_cache(bool read_directory_contents) { } if (logoverlay) LOG_MSG("OPTIMISE: update cache took %d",GetTicks()-a); } +#endif +#if !defined(OSFREE) bool Overlay_Drive::FindNext(DOS_DTA & dta) { - char * dir_ent, *ldir_ent; ht_stat_t stat_block; char full_name[CROSS_LEN], lfull_name[LFN_NAMELENGTH+1]; @@ -1139,7 +1161,9 @@ bool Overlay_Drive::FindNext(DOS_DTA & dta) { dta.SetResult(find_name,lfind_name,find_size,find_hsize,find_date,find_time,find_attr); return true; } +#endif +#if !defined(OSFREE) bool Overlay_Drive::FileUnlink(const char * name) { if (ovlreadonly) { DOS_SetError(DOSERR_WRITE_PROTECTED); @@ -1246,7 +1270,9 @@ bool Overlay_Drive::FileUnlink(const char * name) { return true; } } +#endif +#if !defined(OSFREE) bool Overlay_Drive::SetFileAttr(const char * name,uint16_t attr) { char overlayname[CROSS_LEN], tmp[CROSS_LEN], overtmpname[CROSS_LEN]; strcpy(overlayname,overlaydir); @@ -1311,9 +1337,7 @@ bool Overlay_Drive::SetFileAttr(const char * name,uint16_t attr) { int temp=-1; if (host_name!=NULL) { #if defined (WIN32) - temp=_wmkdir(host_name); #else - temp=mkdir(host_name,0775); #endif } if (temp==0) created=true; @@ -1385,7 +1409,9 @@ bool Overlay_Drive::SetFileAttr(const char * name,uint16_t attr) { } return false; } +#endif +#if !defined(OSFREE) bool Overlay_Drive::GetFileAttr(const char * name,uint16_t * attr) { if (ovlnocachedir) { dirCache.EmptyCache(); @@ -1454,7 +1480,9 @@ bool Overlay_Drive::GetFileAttr(const char * name,uint16_t * attr) { } return localDrive::GetFileAttr(name,attr); } +#endif +#if !defined(OSFREE) static std::string hostname = ""; std::string Overlay_Drive::GetHostName(const char * name) { char overlayname[CROSS_LEN]; @@ -1481,7 +1509,9 @@ std::string Overlay_Drive::GetHostName(const char * name) { hostname = is_deleted_file(name)? "" : localDrive::GetHostName(name); return hostname; } +#endif +#if !defined(OSFREE) void Overlay_Drive::add_deleted_file(const char* name,bool create_on_disk) { char tname[CROSS_LEN]; strcpy(tname,basedir); @@ -1499,10 +1529,12 @@ void Overlay_Drive::add_deleted_file(const char* name,bool create_on_disk) { strcat(tname,temp_name); if (!is_deleted_file(tname)) { deleted_files_in_base.emplace_back(tname); - if (create_on_disk) add_special_file_to_disk(tname, "DEL"); + if (create_on_disk) add_special_file_to_disk(name, "DEL"); } } +#endif +#if !defined(OSFREE) bool Overlay_Drive::add_special_file_to_disk(const char* dosname, const char* operation, uint16_t value, bool isdir) { std::string name = create_filename_of_special_operation(dosname, operation); char overlayname[CROSS_LEN]; @@ -1560,7 +1592,9 @@ bool Overlay_Drive::add_special_file_to_disk(const char* dosname, const char* op } return true; } +#endif +#if !defined(OSFREE) void Overlay_Drive::remove_special_file_from_disk(const char* dosname, const char* operation) { std::string name = create_filename_of_special_operation(dosname,operation); char overlayname[CROSS_LEN]; @@ -1578,7 +1612,9 @@ void Overlay_Drive::remove_special_file_from_disk(const char* dosname, const cha if ((host_name == NULL || ht_unlink(host_name) != 0) && unlink(overlayname) != 0 && strcmp(operation, "ATR")) E_Exit("Failed removal of %s",overlayname); } +#endif +#if !defined(OSFREE) std::string Overlay_Drive::create_filename_of_special_operation(const char* dosname, const char* operation, bool expand) { (void)expand;//unused @@ -1595,7 +1631,9 @@ std::string Overlay_Drive::create_filename_of_special_operation(const char* dosn res.insert(s,oper); return res; } +#endif +#if !defined(OSFREE) bool Overlay_Drive::is_dir_only_in_overlay(const char* name) { if (!name || !*name) return false; if (DOSdirs_cache.empty()) return false; @@ -1611,7 +1649,9 @@ bool Overlay_Drive::is_dir_only_in_overlay(const char* name) { } return false; } +#endif +#if !defined(OSFREE) bool Overlay_Drive::is_deleted_file(const char* name) { if (!name || !*name) return false; if (deleted_files_in_base.empty()) return false; @@ -1639,7 +1679,9 @@ bool Overlay_Drive::is_deleted_file(const char* name) { } return false; } +#endif +#if !defined(OSFREE) void Overlay_Drive::add_DOSdir_to_cache(const char* name, const char *sname) { if (!name || !*name ) return; //Skip empty file. if (logoverlay) LOG_MSG("Adding name to overlay_only_dir_cache %s",name); @@ -1648,7 +1690,9 @@ void Overlay_Drive::add_DOSdir_to_cache(const char* name, const char *sname) { DOSdirs_cache.emplace_back(sname); } } +#endif +#if !defined(OSFREE) void Overlay_Drive::remove_DOSdir_from_cache(const char* name) { char fname[CROSS_LEN]; char* temp_name = dirCache.GetExpandName(GetCrossedName(basedir,name)); @@ -1665,7 +1709,9 @@ void Overlay_Drive::remove_DOSdir_from_cache(const char* name) { } } } +#endif +#if !defined(OSFREE) void Overlay_Drive::remove_deleted_file(const char* name,bool create_on_disk) { char tname[CROSS_LEN],fname[CROSS_LEN]; strcpy(tname,basedir); @@ -1694,6 +1740,9 @@ void Overlay_Drive::remove_deleted_file(const char* name,bool create_on_disk) { } } } +#endif + +#if !defined(OSFREE) void Overlay_Drive::add_deleted_path(const char* name, bool create_on_disk) { if (!name || !*name ) return; //Skip empty file. if (!is_deleted_path(name)) { @@ -1704,6 +1753,9 @@ void Overlay_Drive::add_deleted_path(const char* name, bool create_on_disk) { add_deleted_file(name,false); } } +#endif + +#if !defined(OSFREE) bool Overlay_Drive::is_deleted_path(const char* name) { if (!name || !*name) return false; if (deleted_paths_in_base.empty()) return false; @@ -1718,7 +1770,9 @@ bool Overlay_Drive::is_deleted_path(const char* name) { } return false; } +#endif +#if !defined(OSFREE) void Overlay_Drive::remove_deleted_path(const char* name, bool create_on_disk) { for(std::vector::iterator it = deleted_paths_in_base.begin(); it != deleted_paths_in_base.end(); ++it) { if (!strcasecmp((*it).c_str(), name)) { @@ -1729,6 +1783,9 @@ void Overlay_Drive::remove_deleted_path(const char* name, bool create_on_disk) { } } } +#endif + +#if !defined(OSFREE) bool Overlay_Drive::check_if_leading_is_deleted(const char* name){ const char* dname = strrchr_dbcs((char *)name,'\\'); if (dname != NULL) { @@ -1739,7 +1796,9 @@ bool Overlay_Drive::check_if_leading_is_deleted(const char* name){ } return false; } +#endif +#if !defined(OSFREE) bool Overlay_Drive::FileExists(const char* name) { if (ovlnocachedir) { dirCache.EmptyCache(); @@ -1766,7 +1825,9 @@ bool Overlay_Drive::FileExists(const char* name) { return localDrive::FileExists(name); } +#endif +#if !defined(OSFREE) bool Overlay_Drive::Rename(const char * oldname,const char * newname) { if (ovlreadonly) { DOS_SetError(DOSERR_WRITE_PROTECTED); @@ -1979,7 +2040,9 @@ bool Overlay_Drive::Rename(const char * oldname,const char * newname) { return (temp==0); } +#endif +#if !defined(OSFREE) bool Overlay_Drive::FindFirst(const char * _dir,DOS_DTA & dta,bool fcb_findfirst) { if (logoverlay) LOG_MSG("FindFirst in %s",_dir); @@ -2022,7 +2085,9 @@ bool Overlay_Drive::FindFirst(const char * _dir,DOS_DTA & dta,bool fcb_findfirst } return localDrive::FindFirst(_dir,dta,fcb_findfirst); } +#endif +#if !defined(OSFREE) bool Overlay_Drive::FileStat(const char* name, FileStat_Block * const stat_block) { if (ovlnocachedir) { dirCache.EmptyCache(); @@ -2089,13 +2154,18 @@ bool Overlay_Drive::FileStat(const char* name, FileStat_Block * const stat_block stat_block->size=(uint32_t)temp_stat.st_size; return true; } +#endif +#if !defined(OSFREE) Bits Overlay_Drive::UnMount(void) { delete this; return 0; } +#endif +#if !defined(OSFREE) void Overlay_Drive::EmptyCache(void){ localDrive::EmptyCache(); update_cache(true);//lets rebuild it. } +#endif diff --git a/src/dos/drive_physfs.cpp b/src/dos/drive_physfs.cpp index 45372d05d10..9886ff63f72 100644 --- a/src/dos/drive_physfs.cpp +++ b/src/dos/drive_physfs.cpp @@ -27,6 +27,7 @@ #include #endif +#if !defined(OSFREE) #include "../libs/physfs/physfs.h" #include "../libs/physfs/physfs.c" #include "../libs/physfs/physfs_archiver_7z.c" @@ -47,6 +48,7 @@ #include "../libs/physfs/physfs_platform_windows.c" #include "../libs/physfs/physfs_platform_winrt.cpp" #include "../libs/physfs/physfs_platform_haiku.cpp" +#include "../libs/physfs/physfs_platform_os2.c" #include "../libs/physfs/physfs_unicode.c" extern int lfn_filefind_handle; @@ -989,3 +991,4 @@ Bits physfscdromDrive::UnMount(void) { return physfsDrive::UnMount(); return 2; } +#endif diff --git a/src/dos/drives.cpp b/src/dos/drives.cpp index 3ab038664a9..e18c2f9b9af 100644 --- a/src/dos/drives.cpp +++ b/src/dos/drives.cpp @@ -298,10 +298,16 @@ void Set_Label(char const * const input, char * const output, bool cdrom) { strncpy(upcasebuf, input, 11); //DBCS_upcase(upcasebuf); /* Another mscdex quirk. Label is not always uppercase. (Daggerfall) */ - (void)cdrom; - while (togo > 0) { - if(upcasebuf[vnamePos] == 0) str_end = true; + if(upcasebuf[vnamePos] == 0 && !str_end) { + str_end = true; + if(cdrom && vnamePos == 8) output[labelPos++] = '.'; + //Add a trailing dot ('.') when on cdrom and label is exactly 8 characters, MSCDEX feature/bug (fifa96 cdrom detection) + } + else if(cdrom && vnamePos == 8 && !str_end && upcasebuf[vnamePos] != '.') { + output[labelPos] = '.'; // add a dot between 8th and 9th character (Descent 2 installer needs this) + labelPos++; + } output[labelPos] = !str_end ? upcasebuf[vnamePos] : 0x0; // Pad empty characters with 0x00 labelPos++; vnamePos++; @@ -527,6 +533,7 @@ char * DriveManager::GetDrivePosition(int drive) { bool drivemanager_init = false; bool int13_extensions_enable = true; bool int13_disk_change_detect_enable = true; +bool int13_enable_48bitLBA = true; void DriveManager::Init(Section* s) { const Section_prop* section = static_cast(s); @@ -535,6 +542,7 @@ void DriveManager::Init(Section* s) { int13_extensions_enable = section->Get_bool("int 13 extensions"); int13_disk_change_detect_enable = section->Get_bool("int 13 disk change detect"); + int13_enable_48bitLBA = section->Get_bool("int 13 enable 48-bit LBA"); // setup driveInfos structure currentDrive = 0; diff --git a/src/dos/drives.h b/src/dos/drives.h index e157465bb9a..350d6d9bc8d 100644 --- a/src/dos/drives.h +++ b/src/dos/drives.h @@ -125,6 +125,7 @@ class localDrive : public DOS_Drive { } srchInfo[MAX_OPENDIRS] = {}; }; +#if !defined(OSFREE) class physfsDrive : public localDrive { private: bool isdir(const char *dir); @@ -167,6 +168,7 @@ class physfsDrive : public localDrive { protected: std::string mountarc; }; +#endif #ifdef _MSC_VER #pragma pack (1) @@ -344,6 +346,7 @@ struct direntry { } } GCC_ATTRIBUTE(packed); +#if !defined(OSFREE) struct direntry_lfn { uint8_t LDIR_Ord; /* 0x00 Long filename ordinal (1 to 63). bit 6 (0x40) is set if the last entry, which normally comes first in the directory */ uint16_t LDIR_Name1[5]; /* 0x01 first 5 chars */ @@ -356,6 +359,7 @@ struct direntry_lfn { } GCC_ATTRIBUTE(packed); static_assert(sizeof(direntry_lfn) == 0x20,"Oops"); static_assert(offsetof(direntry_lfn,LDIR_Name3) == 0x1C,"Oops"); +#endif #define MAX_DIRENTS_PER_SECTOR (SECTOR_SIZE_MAX / sizeof(direntry)) @@ -366,6 +370,7 @@ static_assert(offsetof(direntry_lfn,LDIR_Name3) == 0x1C,"Oops"); class imageDisk; class fatDrive : public DOS_Drive { public: +#if !defined(OSFREE) fatDrive(const char * sysFilename, uint32_t bytesector, uint32_t cylsector, uint32_t headscyl, uint32_t cylinders, std::vector &options); fatDrive(imageDisk *sourceLoadedDisk, std::vector &options); void fatDriveInit(const char *sysFilename, uint32_t bytesector, uint32_t cylsector, uint32_t headscyl, uint32_t cylinders, uint64_t filesize, const std::vector &options); @@ -488,6 +493,7 @@ class fatDrive : public DOS_Drive { uint32_t firstRootDirSect = 0; uint32_t physToLogAdj = 0; // Some PC-98 HDI images have larger logical than physical bytes/sector and the partition is not a multiple of it, so this is needed uint32_t searchFreeCluster = 0; + bool findFirstFCB = false; /* FindFirst was called to scan by FCB */ int partition_index = -1; uint32_t cwdDirCluster = 0; @@ -525,10 +531,16 @@ class fatDrive : public DOS_Drive { unsigned char bios_disk = 0; bool unformatted = false; +#else + imageDisk *loadedDisk = NULL; + static constexpr bool unformatted = true; + fatDrive() = delete; +#endif }; PhysPt DOS_Get_DPB(unsigned int dos_drive); +#if !defined(OSFREE) class cdromDrive : public localDrive { public: @@ -554,7 +566,9 @@ class cdromDrive : public localDrive private: uint8_t subUnit = 0; char driveLetter = '\0'; }; +#endif +#if !defined(OSFREE) class physfscdromDrive : public physfsDrive { public: @@ -576,6 +590,7 @@ class physfscdromDrive : public physfsDrive uint8_t subUnit; char driveLetter; }; +#endif #ifdef _MSC_VER #pragma pack (1) @@ -656,6 +671,7 @@ struct isoDirEntry { //////////////////////////////////// +#if !defined(OSFREE) /* UDF checksum function */ uint16_t UDF_crc_itu_t(uint16_t crc, const uint8_t *buffer, size_t len); @@ -665,9 +681,11 @@ static inline uint16_t UDF_crc_itu_t_byte(uint16_t crc, const uint8_t data) { return (crc << 8) ^ UDF_crc_itu_t_table[((crc >> 8) ^ data) & 0xff]; } +#endif //////////////////////////////////// +#if !defined(OSFREE) using UDF_blob_base = std::vector; class UDF_blob : public UDF_blob_base { @@ -688,9 +706,11 @@ class UDF_blob : public UDF_blob_base { return *this; } }; +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFTagId { /* ECMA-167 7.2.1 */ uint16_t TagIdentifier = 0; /* @0 + 2 uint16_t */ uint16_t DescriptorVersion = 0; /* @2 + 2 uint16_t */ @@ -709,9 +729,11 @@ struct UDFTagId { /* ECMA-167 7.2.1 */ UDFTagId(const unsigned int sz,const unsigned char *b); UDFTagId(); }; /* =16 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFextent_ad { /* ECMA-167 3/7.1 */ uint32_t ExtentLength = 0; /* @0 + 4 uint32_t */ uint32_t ExtentLocation = 0; /* @4 + 4 uint32_t */ @@ -720,9 +742,11 @@ struct UDFextent_ad { /* ECMA-167 3/7.1 */ UDFextent_ad(const unsigned int sz,const unsigned char *b); UDFextent_ad(); }; /* =8 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFAnchorVolumeDescriptorPointer { UDFTagId DescriptorTag; /* @0 + 16 tag ID=2 */ UDFextent_ad MainVolumeDescriptorSequenceExtent; /* @16 + 8 extent_ad */ @@ -732,17 +756,21 @@ struct UDFAnchorVolumeDescriptorPointer { UDFAnchorVolumeDescriptorPointer(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b); UDFAnchorVolumeDescriptorPointer(); }; /* =32 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFdstring : public UDF_blob { void get(const unsigned int sz,const unsigned char *b); UDFdstring(const unsigned int sz,const unsigned char *b); UDFdstring(); }; +#endif //////////////////////////////////// +#if !defined(OSFREE) /* NTS: The structure is the same, what the location/position is relative to is different. It's relative to the partition */ struct UDFshort_ad { /* ECMA-167 4/14.14.1 */ uint32_t ExtentLength = 0; /* @0 + 4 uint32_t */ @@ -752,9 +780,11 @@ struct UDFshort_ad { /* ECMA-167 4/14.14.1 */ UDFshort_ad(const unsigned int sz,const unsigned char *b); UDFshort_ad(); }; /* =8 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFlb_addr { /* ECMA-167 4/7.1 */ uint32_t LogicalBlockNumber = 0; /* @0 + 4 uint32_t */ uint16_t PartitionReferenceNumber = 0; /* @4 + 2 uint16_t */ @@ -763,9 +793,11 @@ struct UDFlb_addr { /* ECMA-167 4/7.1 */ UDFlb_addr(const unsigned int sz,const unsigned char *b); UDFlb_addr(); }; /* =6 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFlong_ad { /* ECMA-167 4/14.14.2 */ uint32_t ExtentLength = 0; /* @0 + 4 uint32_t */ UDFlb_addr ExtentLocation; /* @4 + 6 lb_addr */ @@ -782,9 +814,11 @@ struct UDFlong_ad { /* ECMA-167 4/14.14.2 */ UDFlong_ad(const unsigned int sz,const unsigned char *b); UDFlong_ad(); }; /* =16 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFcharspec { /* ECMA-167 7.2.1 */ uint8_t CharacterSetType; /* @0 + 1 uint8_t */ uint8_t CharacterSetInformation[63]; /* @1 + 63 uint8_t */ @@ -793,9 +827,11 @@ struct UDFcharspec { /* ECMA-167 7.2.1 */ UDFcharspec(const unsigned int sz,const unsigned char *b); UDFcharspec(); }; /* =64 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFregid { /* ECMA-167 7.4 */ uint8_t Flags = 0; /* @0 + 0 uint8_t */ uint8_t Identifier[23]; /* @1 + 23 uint8_t */ @@ -805,9 +841,11 @@ struct UDFregid { /* ECMA-167 7.4 */ UDFregid(const unsigned int sz,const unsigned char *b); UDFregid(); }; /* =32 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFtimestamp { /* ECMA-167 7.3 */ uint16_t TypeAndTimeZone = 0; /* @0 + 2 uint16_t */ int16_t Year = 0; /* @2 + 2 int16_t */ @@ -824,9 +862,11 @@ struct UDFtimestamp { /* ECMA-167 7.3 */ UDFtimestamp(const unsigned int sz,const unsigned char *b); UDFtimestamp(); }; /* =12 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFPrimaryVolumeDescriptor { UDFTagId DescriptorTag; /* @0 + 16 tag ID=1 */ uint32_t VolumeDescriptorSequenceNumber = 0; /* @16 + 4 uint32_t */ @@ -854,9 +894,11 @@ struct UDFPrimaryVolumeDescriptor { UDFPrimaryVolumeDescriptor(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b); UDFPrimaryVolumeDescriptor(); }; /* =490 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFPartitionDescriptor { UDFTagId DescriptorTag; /* @0 + 16 tag ID=5 */ uint32_t VolumeDescriptorSequenceNumber = 0; /* @16 + 4 uint32_t */ @@ -874,9 +916,11 @@ struct UDFPartitionDescriptor { UDFPartitionDescriptor(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b); UDFPartitionDescriptor(); }; /* =356 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFLogicalVolumeDescriptor { UDFTagId DescriptorTag; /* @0 + 16 tag ID=6 */ uint32_t VolumeDescriptorSequenceNumber = 0; /* @16 + 4 uint32_t */ @@ -896,9 +940,11 @@ struct UDFLogicalVolumeDescriptor { UDFLogicalVolumeDescriptor(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b); UDFLogicalVolumeDescriptor(); }; /* =440 + MapTableLength */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFFileSetDescriptor { /* ECMA-167 4/14.1 */ UDFTagId DescriptorTag; /* @0 + 16 tag ID=256 */ UDFtimestamp RecordingDateAndType; /* @16 + 12 timestamp */ @@ -923,9 +969,11 @@ struct UDFFileSetDescriptor { /* ECMA-167 4/14.1 */ UDFFileSetDescriptor(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b); UDFFileSetDescriptor(); }; /* =480 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFext_ad { /* ECMA-167 4/14.14.3 */ uint32_t ExtentLength = 0; /* @0 + 4 uint32_t */ uint32_t RecordedLength = 0; /* @4 + 4 uint32_t */ @@ -937,9 +985,11 @@ struct UDFext_ad { /* ECMA-167 4/14.14.3 */ UDFext_ad(const unsigned int sz,const unsigned char *b); UDFext_ad(); }; /* =20 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFicbtag { /* ECMA-167 4/14.6 */ uint32_t PriorRecordedNumberOfDirectEntries = 0; /* @0 + 4 uint32_t */ uint16_t StrategyType = 0; /* @4 + 2 uint16_t */ @@ -955,9 +1005,11 @@ struct UDFicbtag { /* ECMA-167 4/14.6 */ UDFicbtag(const unsigned int sz,const unsigned char *b); UDFicbtag(); }; /* =20 */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFFileEntry { /* ECMA-167 4/14.9 */ UDFTagId DescriptorTag; /* @0 + 16 tag ID=261 */ UDFicbtag ICBTag; /* @16 + 20 icbtag */ @@ -994,9 +1046,11 @@ struct UDFFileEntry { /* ECMA-167 4/14.9 */ UDFFileEntry(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b); UDFFileEntry(); }; +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFFileIdentifierDescriptor { /* ECMA-167 4/14.4 */ UDFTagId DescriptorTag; /* @0 + 16 tag ID=257 */ uint16_t FileVersionNumber = 0; /* @16 + 2 uint16_t */ @@ -1011,16 +1065,20 @@ struct UDFFileIdentifierDescriptor { /* ECMA-167 4/14.4 */ UDFFileIdentifierDescriptor(UDFTagId &tag/*already parsed, why parse again?*/,const unsigned int sz,const unsigned char *b); UDFFileIdentifierDescriptor(); }; /* =38+L_IU+L_FI */ +#endif //////////////////////////////////// +#if !defined(OSFREE) struct UDFextent { struct UDFextent_ad ex; UDFextent(); UDFextent(const struct UDFextent_ad &s); }; +#endif +#if !defined(OSFREE) struct UDFextents { std::vector xl; @@ -1040,6 +1098,7 @@ struct UDFextents { UDFextents(); UDFextents(const struct UDFextent_ad &s); }; +#endif //////////////////////////////////// @@ -1073,68 +1132,102 @@ class isoDrive : public DOS_Drive { bool isRemovable(void) override; Bits UnMount(void) override; bool loadImage(); +#if !defined(OSFREE) bool loadImageUDF(); bool loadImageUDFAnchorVolumePointer(UDFAnchorVolumeDescriptorPointer &avdp,uint8_t *pvd/*COOKED_SECTOR_SIZE*/,uint32_t sector) const; +#endif bool readSector(uint8_t *buffer, uint32_t sector) const; void setFileName(const char* fileName); char const* GetLabel(void) override {return discLabel;}; void Activate(void) override; private: - int readDirEntry(isoDirEntry* de, const uint8_t* data, unsigned int direntindex) const; +#if !defined(OSFREE) + int readDirEntry(isoDirEntry* de, const uint8_t* data, unsigned int direntindex) const; bool lookup(isoDirEntry *de, const char *path); bool lookup(UDFFileIdentifierDescriptor &fid, UDFFileEntry &fe, const char *path); +#endif int UpdateMscdex(char driveLetter, const char* path, uint8_t& subUnit); +#if !defined(OSFREE) int GetDirIterator(const isoDirEntry* de); int GetDirIterator(const UDFFileEntry &fe); bool GetNextDirEntry(const int dirIteratorHandle, isoDirEntry* de); void FreeDirIterator(const int dirIterator); bool ReadCachedSector(uint8_t** buffer, const uint32_t sector); +#endif +#if !defined(OSFREE) int nextFreeDirIterator; +#endif +#if !defined(OSFREE) struct SectorHashEntry { bool valid; uint32_t sector; uint8_t data[ISO_FRAMESIZE]; } sectorHashEntries[ISO_MAX_HASH_TABLE_SIZE]; +#endif bool iso = false; bool dataCD = false; +#if !defined(OSFREE) bool is_udf = false; bool is_joliet = false; +#else + static constexpr bool is_udf = false; + static constexpr bool is_joliet = false; +#endif bool empty_drive = false; +#if !defined(OSFREE) bool is_rock_ridge = false; // NTS: Rock Ridge and System Use Sharing Protocol was detected in the root directory bool enable_joliet = false; // NTS: "Joliet" is just ISO 9660 with filenames encoded as UTF-16 Unicode. One of the few times Microsoft extended something yet kept it simple --J.C. bool enable_rock_ridge = false; // NTS: Windows 95/98 are unlikely to support Rock Ridge, therefore this is off by default. If they do support RR, let me know --J.C. bool enable_udf = false; // NTS: Windows 98 is said to have added UDF support +#else + static constexpr bool is_rock_ridge = false; // NTS: Rock Ridge and System Use Sharing Protocol was detected in the root directory + static constexpr bool enable_joliet = false; // NTS: "Joliet" is just ISO 9660 with filenames encoded as UTF-16 Unicode. One of the few times Microsoft extended something yet kept it simple --J.C. + static constexpr bool enable_rock_ridge = false; // NTS: Windows 95/98 are unlikely to support Rock Ridge, therefore this is off by default. If they do support RR, let me know --J.C. + static constexpr bool enable_udf = false; // NTS: Windows 98 is said to have added UDF support +#endif +#if !defined(OSFREE) isoDirEntry rootEntry; +#endif uint8_t mediaid = 0; char fileName[CROSS_LEN]; +#if !defined(OSFREE) uint8_t rr_susp_skip = 0; +#endif uint8_t subUnit = 0; char driveLetter = '\0'; char discLabel[32]; public: +#if !defined(OSFREE) UDFextent_ad convertToUDFextent_ad(const UDFshort_ad &s,const uint32_t partition_ref_id=0xFFFFFFFFu) const; UDFextent_ad convertToUDFextent_ad(const UDFextent_ad &s) const; UDFextent_ad convertToUDFextent_ad(const UDFlong_ad &s) const; UDFextent_ad convertToUDFextent_ad(const UDFext_ad &s) const; +#endif public: +#if !defined(OSFREE) bool convertToUDFextent_ad(UDFextent_ad &d,const UDFshort_ad &s,const uint32_t partition_ref_id=0xFFFFFFFFu) const; bool convertToUDFextent_ad(UDFextent_ad &d,const UDFextent_ad &s) const; bool convertToUDFextent_ad(UDFextent_ad &d,const UDFlong_ad &s) const; bool convertToUDFextent_ad(UDFextent_ad &d,const UDFext_ad &s) const; +#endif private: +#if !defined(OSFREE) UDFLogicalVolumeDescriptor lvold; UDFPrimaryVolumeDescriptor pvold; UDFFileSetDescriptor fsetd; UDFPartitionDescriptor partd; +#endif public: +#if !defined(OSFREE) void UDFextent_rewind(struct UDFextents &ex) const; void UDFFileEntryToExtents(UDFextents &ex,UDFFileEntry &fe) const; uint64_t UDFextent_seek(struct UDFextents &ex,uint64_t ofs) const; unsigned int UDFextent_read(struct UDFextents &ex,unsigned char *buf,size_t count) const; uint64_t UDFtotalsize(struct UDFextents &ex) const; +#endif private: struct DirIterator { bool valid; @@ -1143,10 +1236,14 @@ class isoDrive : public DOS_Drive { uint32_t endSector; uint32_t index; uint32_t pos; +#if !defined(OSFREE) UDFextents udfdirext; +#endif } dirIterators[MAX_OPENDIRS] = {}; private: +#if !defined(OSFREE) bool GetNextDirEntry(const int dirIteratorHandle, UDFFileIdentifierDescriptor &fid, UDFFileEntry &fe, UDFextents &dirext, char fname[LFN_NAMELENGTH],unsigned int dirIteratorIndex); +#endif }; struct VFILE_Block; @@ -1186,6 +1283,7 @@ class Virtual_Drive: public DOS_Drive { class Overlay_Drive: public localDrive { public: +#if !defined(OSFREE) Overlay_Drive(const char * startdir,const char* overlay, uint16_t _bytes_sector,uint8_t _sectors_cluster,uint16_t _total_clusters,uint16_t _free_clusters,uint8_t _mediaid,uint8_t &error, std::vector &options); bool FileOpen(DOS_File * * file,const char * name,uint32_t flags) override; @@ -1206,10 +1304,22 @@ class Overlay_Drive: public localDrive { bool TestDir(const char * dir) override; bool RemoveDir(const char * dir) override; bool MakeDir(const char * dir) override; +#endif +#if !defined(OSFREE) const char* getOverlaydir() const {return overlaydir;}; +#else + const char* getOverlaydir() const {return "";}; +#endif +#if !defined(OSFREE) bool ovlnocachedir = false; +#endif +#if !defined(OSFREE) bool ovlreadonly = false; +#else + static constexpr bool ovlreadonly = false; +#endif private: +#if !defined(OSFREE) char overlaydir[CROSS_LEN]; bool optimize_cache_v1; bool Sync_leading_dirs(const char* dos_filename); @@ -1241,6 +1351,7 @@ class Overlay_Drive: public localDrive { std::vector DOSnames_cache; //Also set is probably better. std::vector DOSdirs_cache; //Can not blindly change its type. it is important that subdirs come after the parent directory. const std::string special_prefix; +#endif }; int get_expanded_files(const std::string &path, std::vector &paths, bool readonly); @@ -1293,4 +1404,9 @@ typedef char host_cnv_char_t; #define CROSS_DOSFILENAME(blah) strreplace(blah,'/','\\') #endif +extern unsigned int bdevbuf_sz; +extern unsigned int bdevbuf_seg; + +void InitBdevBuf(void); + #endif diff --git a/src/dos/exepack.h b/src/dos/exepack.h new file mode 100644 index 00000000000..f0941dc0227 --- /dev/null +++ b/src/dos/exepack.h @@ -0,0 +1,38 @@ + +/* EXEPACK variables [https://moddingwiki.shikadi.net/wiki/Microsoft_EXEPACK#Games_using_EXEPACK] */ +#pragma pack(push,1) +typedef struct EXEPACKVARSv1 { + uint16_t real_IP; + uint16_t real_CS; + uint16_t mem_start; + uint16_t exepack_size; + uint16_t real_SP; + uint16_t real_SS; + uint16_t dest_len; + uint16_t skip_len; + uint16_t signature; /* "RB" */ +}; +static_assert( sizeof(EXEPACKVARSv1) == 0x12, "oops" ); +#pragma pack(pop) + +/* older version of EXEPACK (Microsoft Flight Simulator 4) */ +#pragma pack(push,1) +typedef struct EXEPACKVARSv2 { + uint16_t real_IP; + uint16_t real_CS; + uint16_t mem_start; + uint16_t exepack_size; + uint16_t real_SP; + uint16_t real_SS; + uint16_t dest_len; + uint16_t signature; /* "RB" */ +}; +static_assert( sizeof(EXEPACKVARSv2) == 0x10, "oops" ); + +/* another variant seen in "PGA Golf" */ +typedef EXEPACKVARSv2 EXEPACKVARSv3; + +/* another variant seen in "Popcorn" */ +typedef EXEPACKVARSv2 EXEPACKVARSv4; +#pragma pack(pop) + diff --git a/src/dos/exepackv1.bin b/src/dos/exepackv1.bin new file mode 100644 index 00000000000..8b61d2f7417 Binary files /dev/null and b/src/dos/exepackv1.bin differ diff --git a/src/dos/exepackv1.h b/src/dos/exepackv1.h new file mode 100644 index 00000000000..c28fd2b06b5 --- /dev/null +++ b/src/dos/exepackv1.h @@ -0,0 +1,29 @@ +static const unsigned char EXEPACKv1[] = { + /* at CS:IP in loaded EXE memory image */ + 0x8c, 0xc0, 0x05, 0x10, 0x00, 0x0e, 0x1f, 0xa3, 0x04, 0x00, 0x03, 0x06, + 0x0c, 0x00, 0x8e, 0xc0, 0x8b, 0x0e, 0x06, 0x00, 0x8b, 0xf9, 0x4f, 0x8b, + 0xf7, 0xfd, 0xf3, 0xa4, 0x8b, 0x16, 0x0e, 0x00, 0x50, 0xb8, 0x38, 0x00, + 0x50, 0xcb, 0x8c, 0xc3, 0x8c, 0xd8, 0x2b, 0xc2, 0x8e, 0xd8, 0x8e, 0xc0, + 0xbf, 0x0f, 0x00, 0xb9, 0x10, 0x00, 0xb0, 0xff, 0xf3, 0xae, 0x47, 0x8b, + 0xf7, 0x8b, 0xc3, 0x2b, 0xc2, 0x8e, 0xc0, 0xbf, 0x0f, 0x00, 0xb1, 0x04, + 0x8b, 0xc6, 0xf7, 0xd0, 0xd3, 0xe8, 0x74, 0x09, 0x8c, 0xda, 0x2b, 0xd0, + 0x8e, 0xda, 0x83, 0xce, 0xf0, 0x8b, 0xc7, 0xf7, 0xd0, 0xd3, 0xe8, 0x74, + 0x09, 0x8c, 0xc2, 0x2b, 0xd0, 0x8e, 0xc2, 0x83, 0xcf, 0xf0, 0xac, 0x8a, + 0xd0, 0x4e, 0xad, 0x8b, 0xc8, 0x46, 0x8a, 0xc2, 0x24, 0xfe, 0x3c, 0xb0, + 0x75, 0x06, 0xac, 0xf3, 0xaa, 0xeb, 0x07, 0x90, 0x3c, 0xb2, 0x75, 0x6b, + 0xf3, 0xa4, 0x8a, 0xc2, 0xa8, 0x01, 0x74, 0xba, 0xbe, 0x2d, 0x01, 0x0e, + 0x1f, 0x8b, 0x1e, 0x04, 0x00, 0xfc, 0x33, 0xd2, 0xad, 0x8b, 0xc8, 0xe3, + 0x13, 0x8b, 0xc2, 0x03, 0xc3, 0x8e, 0xc0, 0xad, 0x8b, 0xf8, 0x83, 0xff, + 0xff, 0x74, 0x11, 0x26, 0x01, 0x1d, 0xe2, 0xf3, 0x81, 0xfa, 0x00, 0xf0, + 0x74, 0x16, 0x81, 0xc2, 0x00, 0x10, 0xeb, 0xdc, 0x8c, 0xc0, 0x40, 0x8e, + 0xc0, 0x83, 0xef, 0x10, 0x26, 0x01, 0x1d, 0x48, 0x8e, 0xc0, 0xeb, 0xe2, + 0x8b, 0xc3, 0x8b, 0x3e, 0x08, 0x00, 0x8b, 0x36, 0x0a, 0x00, 0x03, 0xf0, + 0x01, 0x06, 0x02, 0x00, 0x2d, 0x10, 0x00, 0x8e, 0xd8, 0x8e, 0xc0, 0xbb, + 0x00, 0x00, 0xfa, 0x8e, 0xd6, 0x8b, 0xe7, 0xfb, 0x2e, 0xff, 0x2f, 0xb4, + 0x40, 0xbb, 0x02, 0x00, 0xb9, 0x16, 0x00, 0x8c, 0xca, 0x8e, 0xda, 0xba, + 0x17, 0x01, 0xcd, 0x21, 0xb8, 0xff, 0x4c, 0xcd, 0x21, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x64, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, + 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74 +}; +static const unsigned int EXEPACKv1_len = 283; + diff --git a/src/dos/exepackv2.h b/src/dos/exepackv2.h new file mode 100644 index 00000000000..ac141879401 --- /dev/null +++ b/src/dos/exepackv2.h @@ -0,0 +1,24 @@ + +/* Found in FS4.EXE, Microsoft Flight Simulator 4 */ +static const unsigned char EXEPACKv2[] = { + /* at CS:IP in loaded EXE memory image */ + 0x8C, 0xC0, 0x05, 0x10, 0x00, 0x0E, 0x1F, 0xA3, 0x04, 0x00, 0x03, 0x06, 0x0C, 0x00, 0x8E, 0xC0, + 0x8B, 0x0E, 0x06, 0x00, 0x8B, 0xF9, 0x4F, 0x8B, 0xF7, 0xFD, 0xF3, 0xA4, 0x50, 0xB8, 0x32, 0x00, + 0x50, 0xCB, 0x8C, 0xC3, 0x8C, 0xD8, 0x48, 0x8E, 0xD8, 0x8E, 0xC0, 0xBF, 0x0F, 0x00, 0xB9, 0x10, + 0x00, 0xB0, 0xFF, 0xF3, 0xAE, 0x47, 0x8B, 0xF7, 0x8B, 0xC3, 0x48, 0x8E, 0xC0, 0xBF, 0x0F, 0x00, + 0xB1, 0x04, 0x8B, 0xC6, 0xF7, 0xD0, 0xD3, 0xE8, 0x74, 0x09, 0x8C, 0xDA, 0x2B, 0xD0, 0x8E, 0xDA, + 0x83, 0xCE, 0xF0, 0x8B, 0xC7, 0xF7, 0xD0, 0xD3, 0xE8, 0x74, 0x09, 0x8C, 0xC2, 0x2B, 0xD0, 0x8E, + 0xC2, 0x83, 0xCF, 0xF0, 0xAC, 0x8A, 0xD0, 0x4E, 0xAD, 0x8B, 0xC8, 0x46, 0x8A, 0xC2, 0x24, 0xFE, + 0x3C, 0xB0, 0x75, 0x06, 0xAC, 0xF3, 0xAA, 0xEB, 0x07, 0x90, 0x3C, 0xB2, 0x75, 0x6B, 0xF3, 0xA4, + 0x8A, 0xC2, 0xA8, 0x01, 0x74, 0xBA, 0xBE, 0x25, 0x01, 0x0E, 0x1F, 0x8B, 0x1E, 0x04, 0x00, 0xFC, + 0x33, 0xD2, 0xAD, 0x8B, 0xC8, 0xE3, 0x13, 0x8B, 0xC2, 0x03, 0xC3, 0x8E, 0xC0, 0xAD, 0x8B, 0xF8, + 0x83, 0xFF, 0xFF, 0x74, 0x11, 0x26, 0x01, 0x1D, 0xE2, 0xF3, 0x81, 0xFA, 0x00, 0xF0, 0x74, 0x16, + 0x81, 0xC2, 0x00, 0x10, 0xEB, 0xDC, 0x8C, 0xC0, 0x40, 0x8E, 0xC0, 0x83, 0xEF, 0x10, 0x26, 0x01, + 0x1D, 0x48, 0x8E, 0xC0, 0xEB, 0xE2, 0x8B, 0xC3, 0x8B, 0x3E, 0x08, 0x00, 0x8B, 0x36, 0x0A, 0x00, + 0x03, 0xF0, 0x01, 0x06, 0x02, 0x00, 0x2D, 0x10, 0x00, 0x8E, 0xD8, 0x8E, 0xC0, 0xBB, 0x00, 0x00, + 0xFA, 0x8E, 0xD6, 0x8B, 0xE7, 0xFB, 0x2E, 0xFF, 0x2F, 0xB4, 0x40, 0xBB, 0x02, 0x00, 0xB9, 0x16, + 0x00, 0x8C, 0xCA, 0x8E, 0xDA, 0xBA, 0x0F, 0x01, 0xCD, 0x21, 0xB8, 0xFF, 0x4C, 0xCD, 0x21, 0x50, + 0x61, 0x63, 0x6B, 0x65, 0x64, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6F, + 0x72, 0x72, 0x75, 0x70, 0x74 +}; + diff --git a/src/dos/exepackv3.h b/src/dos/exepackv3.h new file mode 100644 index 00000000000..825ce867889 --- /dev/null +++ b/src/dos/exepackv3.h @@ -0,0 +1,27 @@ + +/* Found in GOLF.EXE, PGA Golf. + * It's like the version in Flight Simulator 4 but appears to fix the segment wraparound issue + * that causes "Packed file is corrupt" if loaded too low and the A20 gate is on */ +static const unsigned char EXEPACKv3[] = { + /* at CS:IP in loaded EXE memory image */ + 0x8B, 0xE8, 0x8C, 0xC0, 0x05, 0x10, 0x00, 0x0E, 0x1F, 0xA3, 0x04, 0x00, 0x03, 0x06, 0x0C, 0x00, + 0x8E, 0xC0, 0x8B, 0x0E, 0x06, 0x00, 0x8B, 0xF9, 0x4F, 0x8B, 0xF7, 0xFD, 0xF3, 0xA4, 0x50, 0xB8, + 0x34, 0x00, 0x50, 0xCB, 0x8C, 0xC3, 0x8C, 0xD8, 0x48, 0x8E, 0xD8, 0x8E, 0xC0, 0xBF, 0x0F, 0x00, + 0xB9, 0x10, 0x00, 0xB0, 0xFF, 0xF3, 0xAE, 0x47, 0x8B, 0xF7, 0x8B, 0xC3, 0x48, 0x8E, 0xC0, 0xBF, + 0x0F, 0x00, 0xB1, 0x04, 0x8B, 0xC6, 0xF7, 0xD0, 0xD3, 0xE8, 0x8C, 0xDA, 0x2B, 0xD0, 0x73, 0x04, + 0x8C, 0xD8, 0x2B, 0xD2, 0xD3, 0xE0, 0x03, 0xF0, 0x8E, 0xDA, 0x8B, 0xC7, 0xF7, 0xD0, 0xD3, 0xE8, + 0x8C, 0xC2, 0x2B, 0xD0, 0x73, 0x04, 0x8C, 0xC0, 0x2B, 0xD2, 0xD3, 0xE0, 0x03, 0xF8, 0x8E, 0xC2, + 0xAC, 0x8A, 0xD0, 0x4E, 0xAD, 0x8B, 0xC8, 0x46, 0x8A, 0xC2, 0x24, 0xFE, 0x3C, 0xB0, 0x75, 0x05, + 0xAC, 0xF3, 0xAA, 0xEB, 0x06, 0x3C, 0xB2, 0x75, 0x6D, 0xF3, 0xA4, 0x8A, 0xC2, 0xA8, 0x01, 0x74, + 0xB1, 0xBE, 0x32, 0x01, 0x0E, 0x1F, 0x8B, 0x1E, 0x04, 0x00, 0xFC, 0x33, 0xD2, 0xAD, 0x8B, 0xC8, + 0xE3, 0x13, 0x8B, 0xC2, 0x03, 0xC3, 0x8E, 0xC0, 0xAD, 0x8B, 0xF8, 0x83, 0xFF, 0xFF, 0x74, 0x11, + 0x26, 0x01, 0x1D, 0xE2, 0xF3, 0x81, 0xFA, 0x00, 0xF0, 0x74, 0x16, 0x81, 0xC2, 0x00, 0x10, 0xEB, + 0xDC, 0x8C, 0xC0, 0x40, 0x8E, 0xC0, 0x83, 0xEF, 0x10, 0x26, 0x01, 0x1D, 0x48, 0x8E, 0xC0, 0xEB, + 0xE2, 0x8B, 0xC3, 0x8B, 0x3E, 0x08, 0x00, 0x8B, 0x36, 0x0A, 0x00, 0x03, 0xF0, 0x01, 0x06, 0x02, + 0x00, 0x2D, 0x10, 0x00, 0x8E, 0xD8, 0x8E, 0xC0, 0xBB, 0x00, 0x00, 0xFA, 0x8E, 0xD6, 0x8B, 0xE7, + 0xFB, 0x8B, 0xC5, 0x2E, 0xFF, 0x2F, 0xB4, 0x40, 0xBB, 0x02, 0x00, 0xB9, 0x16, 0x00, 0x8C, 0xCA, + 0x8E, 0xDA, 0xBA, 0x1C, 0x01, 0xCD, 0x21, 0xB8, 0xFF, 0x4C, 0xCD, 0x21, 0x50, 0x61, 0x63, 0x6B, + 0x65, 0x64, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6F, 0x72, 0x72, 0x75, + 0x70, 0x74, +}; + diff --git a/src/dos/exepackv4.h b/src/dos/exepackv4.h new file mode 100644 index 00000000000..83e47202d70 --- /dev/null +++ b/src/dos/exepackv4.h @@ -0,0 +1,23 @@ + +/* Found in POPCORN.EXE */ +static const unsigned char EXEPACKv4[] = { + /* at CS:IP in loaded EXE memory image */ + 0x8C, 0xC0, 0x05, 0x10, 0x00, 0x0E, 0x1F, 0xA3, 0x04, 0x00, 0x03, 0x06, 0x0C, 0x00, 0x8E, 0xC0, + 0x8B, 0x0E, 0x06, 0x00, 0x8B, 0xF9, 0x4F, 0x8B, 0xF7, 0xFD, 0xF3, 0xA4, 0x50, 0xB8, 0x32, 0x00, + 0x50, 0xCB, 0x8C, 0xC3, 0x8C, 0xD8, 0x48, 0x8E, 0xD8, 0x8E, 0xC0, 0xBF, 0x0F, 0x00, 0xB9, 0x10, + 0x00, 0xB0, 0xFF, 0xF3, 0xAE, 0x47, 0x8B, 0xF7, 0x8B, 0xC3, 0x48, 0x8E, 0xC0, 0xBF, 0x0F, 0x00, + 0xB1, 0x04, 0x8B, 0xC6, 0xF7, 0xD0, 0xD3, 0xE8, 0x74, 0x0A, 0x8C, 0xDA, 0x2B, 0xD0, 0x8E, 0xDA, + 0x81, 0xCE, 0xF0, 0xFF, 0x8B, 0xC7, 0xF7, 0xD0, 0xD3, 0xE8, 0x74, 0x0A, 0x8C, 0xC2, 0x2B, 0xD0, + 0x8E, 0xC2, 0x81, 0xCF, 0xF0, 0xFF, 0xAC, 0x8A, 0xD0, 0x4E, 0xAD, 0x8B, 0xC8, 0x46, 0x8A, 0xC2, + 0x24, 0xFE, 0x3C, 0xB0, 0x75, 0x06, 0xAC, 0xF3, 0xAA, 0xEB, 0x07, 0x90, 0x3C, 0xB2, 0x75, 0x56, + 0xF3, 0xA4, 0x8A, 0xC2, 0xA8, 0x01, 0x74, 0xB8, 0xBE, 0x12, 0x01, 0x0E, 0x1F, 0x8B, 0x1E, 0x04, + 0x00, 0xFC, 0x33, 0xD2, 0xAD, 0x8B, 0xC8, 0xE3, 0x0E, 0x8B, 0xC2, 0x03, 0xC3, 0x8E, 0xC0, 0xAD, + 0x8B, 0xF8, 0x26, 0x01, 0x1D, 0xE2, 0xF8, 0x81, 0xFA, 0x00, 0xF0, 0x74, 0x06, 0x81, 0xC2, 0x00, + 0x10, 0xEB, 0xE1, 0x8B, 0xC3, 0x8B, 0x3E, 0x08, 0x00, 0x8B, 0x36, 0x0A, 0x00, 0x03, 0xF0, 0x01, + 0x06, 0x02, 0x00, 0x2D, 0x10, 0x00, 0x8E, 0xD8, 0x8E, 0xC0, 0xBB, 0x00, 0x00, 0xFA, 0x8E, 0xD6, + 0x8B, 0xE7, 0xFB, 0x2E, 0xFF, 0x2F, 0xB4, 0x40, 0xBB, 0x02, 0x00, 0xB9, 0x16, 0x00, 0x8C, 0xCA, + 0x8E, 0xDA, 0xBA, 0xFC, 0x00, 0xCD, 0x21, 0xB8, 0xFF, 0x4C, 0xCD, 0x21, 0x50, 0x61, 0x63, 0x6B, + 0x65, 0x64, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6F, 0x72, 0x72, 0x75, + 0x70, 0x74, +}; + diff --git a/src/dosbox.cpp b/src/dosbox.cpp index eb9df3aaa4f..5eea778e5fe 100644 --- a/src/dosbox.cpp +++ b/src/dosbox.cpp @@ -85,6 +85,16 @@ extern cothread_t _driverCoroutine; extern void _Delay(uint32_t ticks); +#if __APPLE__ && __MAC_OS_X_VERSION_MIN_REQUIRED < 101200 +/* FIX_ME: A workaround to avoid build error. Change version to 101300 if error occurs for Sierra (10.12) */ +struct __processor_model { + unsigned int __cpu_vendor; + unsigned int __cpu_type; + unsigned int __cpu_subtype; + unsigned int __cpu_features[1]; +} __cpu_model = {0, 0, 0, {0}}; +#endif + #if C_EMSCRIPTEN # include #endif @@ -238,19 +248,24 @@ extern unsigned int page; uint32_t guest_msdos_LoL = 0; uint16_t guest_msdos_mcb_chain = 0; +uint32_t guest_msdos_dev_chain = 0; int boothax = BOOTHAX_NONE; bool gbk = false; bool chinasea = false; bool uao = false; bool jp_ega = false; +#if !defined(OSFREE) bool j3100_start = false; +#endif bool want_fm_towns = false; bool dos_con_use_int16_to_detect_input = true; -bool dbg_zero_on_dos_allocmem = true; -bool dbg_zero_on_xms_allocmem = true; -bool dbg_zero_on_ems_allocmem = true; +#if !defined(OSFREE) +bool dbg_zero_on_dos_allocmem = false; +bool dbg_zero_on_xms_allocmem = false; +bool dbg_zero_on_ems_allocmem = false; +#endif /* the exact frequency of the NTSC color subcarrier ~3.579545454...MHz or 315/88 */ /* see: https://en.wikipedia.org/wiki/Colorburst */ @@ -955,13 +970,13 @@ void Init_VGABIOS() { } if (rom_fp == NULL) { path = ""; - Cross::GetPlatformResDir(path); + path = Cross::GetPlatformResDir(); path += VGA_BIOS_rom; rom_fp = fopen(path.c_str(),"rb"); } if (rom_fp == NULL) { path = ""; - Cross::GetPlatformConfigDir(path); + path = Cross::GetPlatformConfigDir(); path += VGA_BIOS_rom; rom_fp = fopen(path.c_str(),"rb"); } @@ -1100,16 +1115,39 @@ void SetIME() { #endif } +unsigned int BeepDuration() { + Section_prop *section = static_cast(control->GetSection("dosbox")); + unsigned int d = section->Get_int("beep duration"); + + if (d == 0) {//default + if (IS_EGAVGA_ARCH || machine == MCH_TANDY || machine == MCH_AMSTRAD || machine == MCH_MCGA) { + d = 333; /* DOSBox SVN default */ + } + else if (IS_PC98_ARCH) { + d = 300; /* FIXME: Guess */ + } + else { // MDA, CGA, Hercules, PCjr, anything IBM + d = 500; /* IBM standard in the 1980s, see BIOS listings to see what I mean */ + } + } + + return d; +} + void DOSBOX_RealInit() { DOSBoxMenu::item *item; LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X RealInit: loading settings and initializing"); - MAPPER_AddHandler(DOSBOX_UnlockSpeed2, MK_rightarrow, MMODHOST,"speedlock","Toggle Speedlock"); { - MAPPER_AddHandler(DOSBOX_UnlockSpeed2, MK_nothing, 0, "speedlock2", "Turbo (Fast Forward)", &item); - item->set_description("Toggle emulation speed, to allow running faster than realtime (fast forward)"); - item->set_text("Turbo (Fast Forward)"); + MAPPER_AddHandler(DOSBOX_UnlockSpeed, MK_grave, MMODHOST, "speedlock", "Turbo (fast-forward): burst", &item); + item->set_description("Burst turbo (fast-forward) emulation speed, to allow running faster than realtime"); + item->set_text("Turbo (fast-forward): burst mode"); + } + { + MAPPER_AddHandler(DOSBOX_UnlockSpeed2, MK_rightarrow, MMODHOST, "speedlock2", "Turbo (fast-forward): toggle", &item); + item->set_description("Toggle turbo (fast-forward) emulation speed, to allow running faster than realtime"); + item->set_text("Turbo (fast-forward)"); } { MAPPER_AddHandler(DOSBOX_NormalSpeed, MK_leftarrow, MMODHOST, "speednorm","Normal speed", &item); @@ -1193,6 +1231,7 @@ void DOSBOX_RealInit() { s3Card = S3_Generic; machine = MCH_VGA; jp_ega = false; + int10.vesa_vbe3 = false; int10.vesa_nolfb = false; int10.vesa_oldvbe = false; int10.vesa_oldvbe10 = false; @@ -1236,6 +1275,7 @@ void DOSBOX_RealInit() { else if (mtype == "vesa_nolfb") { svgaCard = SVGA_S3Trio; s3Card = S3_Trio32; int10.vesa_nolfb = true;} else if (mtype == "vesa_oldvbe") { svgaCard = SVGA_S3Trio; s3Card = S3_Trio32; int10.vesa_oldvbe = true;} else if (mtype == "vesa_oldvbe10") { svgaCard = SVGA_S3Trio; s3Card = S3_Trio32; int10.vesa_oldvbe = true; int10.vesa_oldvbe10 = true;} + else if (mtype == "vesa_vbe3") { svgaCard = SVGA_S3Trio; s3Card = S3_Trio32; int10.vesa_vbe3 = true;} else if (mtype == "svga_et4000") { svgaCard = SVGA_TsengET4K; } else if (mtype == "svga_et3000") { svgaCard = SVGA_TsengET3K; } else if (mtype == "svga_paradise") { svgaCard = SVGA_ParadisePVGA1A; } @@ -1246,10 +1286,15 @@ void DOSBOX_RealInit() { else if (mtype == "pc9821") { machine = MCH_PC98; } /* Future differentiation */ else if (mtype == "fm_towns") { machine = MCH_VGA; want_fm_towns = true; /*machine = MCH_FM_TOWNS;*/ } + else if (mtype == "svga_dosbox") { machine = MCH_VGA; svgaCard = SVGA_DOSBoxIG; int10.vesa_vbe3 = true; } /* special emulator accelerator graphics adapter */ + else if (mtype == "svga_dosbox_vbe2") { machine = MCH_VGA; svgaCard = SVGA_DOSBoxIG; } /* special emulator accelerator graphics adapter */ else E_Exit("DOSBOX-X:Unknown machine type %s",mtype.c_str()); +#if !defined(OSFREE) dos.set_jdosv_enabled = dos.set_kdosv_enabled = dos.set_pdosv_enabled = dos.set_tdosv_enabled = dos.set_j3100_enabled = j3100_start = false; +#endif +#if !defined(OSFREE) Section_prop *dosv_section = static_cast(control->GetSection("dosv")); const char *dosvstr = dosv_section->Get_string("dosv"); del_flag = dosv_section->Get_bool("del"); @@ -1266,10 +1311,14 @@ void DOSBOX_RealInit() { if (!strcasecmp(dosvstr, "ko")) dos.set_kdosv_enabled = true; if (!strcasecmp(dosvstr, "chs")||!strcasecmp(dosvstr, "cn")) dos.set_pdosv_enabled = true; if (!strcasecmp(dosvstr, "cht")||!strcasecmp(dosvstr, "tw")) dos.set_tdosv_enabled = true; +#endif +#if !defined(OSFREE) if (machine != MCH_VGA || want_fm_towns) { LOG_MSG("WARNING: DOS/V is only supported for VGA video cards."); dos.set_jdosv_enabled = dos.set_kdosv_enabled = dos.set_pdosv_enabled = dos.set_tdosv_enabled = false; } +#endif +#if !defined(OSFREE) int cp = dos.loaded_codepage; if (!cp) InitCodePage(); #if defined(USE_TTF) @@ -1283,6 +1332,7 @@ void DOSBOX_RealInit() { if (IS_DOSV) DOSV_SetConfig(dosv_section); #endif } +#endif Section_prop *ttf_section = static_cast(control->GetSection("ttf")); gbk = ttf_section->Get_bool("gbk"); chinasea = ttf_section->Get_bool("chinasea"); @@ -1291,7 +1341,9 @@ void DOSBOX_RealInit() { makestdcp950table(); makeseacp951table(); } +#if !defined(OSFREE) dos.loaded_codepage = cp; +#endif if (!tonoime) SetIME(); #if defined(USE_TTF) if (IS_PC98_ARCH) ttf.cols = 80; // The number of columns on the screen is apparently fixed to 80 in PC-98 mode at this time @@ -1361,6 +1413,8 @@ void DOSBOX_RealInit() { if (IS_FM_TOWNS || want_fm_towns) LOG_MSG("FM Towns emulation not yet implemented. It's currently just a stub for future development."); } +const char *sbGetSectionName(const size_t ci); + void DOSBOX_SetupConfigSections(void) { Prop_int* Pint; Prop_hex* Phex; @@ -1454,7 +1508,7 @@ void DOSBOX_SetupConfigSections(void) { const char* aspectmodes[] = { "false", "true", "0", "1", "yes", "no", "nearest", "bilinear", nullptr }; const char *vga_ac_mapping_settings[] = { "", "auto", "4x4", "4low", "first16", nullptr }; const char* fpu_settings[] = { "true", "false", "1", "0", "auto", "8087", "287", "387", nullptr }; - const char* sb_recording_sources[] = { "silence", "hiss", "1khz tone", nullptr }; + const char* sb_recording_sources[] = { "silence", "hiss", "1khz tone", "microphone", nullptr }; const char* int10usevp[] = { "auto", "true", "false", "1", "0", nullptr }; const char* hostkeys[] = { @@ -1469,6 +1523,9 @@ void DOSBOX_SetupConfigSections(void) { const char* pseopts[] = { "auto", "none", "pse", "pse36", "pse40", "true", "false", nullptr }; + const char* exepackopts[] = { + "none", "a20off", "unpack", nullptr }; + /* Setup all the different modules making up DOSBox-X */ const char* machines[] = { "mda", @@ -1491,7 +1548,7 @@ void DOSBOX_SetupConfigSections(void) { "svga_s3virge", "svga_s3virgevx", "svga_et3000", "svga_et4000", "svga_paradise", - "vesa_nolfb", "vesa_oldvbe", "vesa_oldvbe10", + "vesa_nolfb", "vesa_oldvbe", "vesa_oldvbe10", "vesa_vbe3", "pc98", "pc9801", "pc9821", "svga_ati_egavgawonder", "svga_ati_vgawonder", @@ -1501,6 +1558,8 @@ void DOSBOX_SetupConfigSections(void) { "svga_ati_mach8", "svga_ati_mach32", "svga_ati_mach64", + "svga_dosbox", + "svga_dosbox_vbe2", "fm_towns", // STUB nullptr }; @@ -1525,7 +1584,12 @@ void DOSBOX_SetupConfigSections(void) { #if C_OPENGL "opengl", "openglnb", "openglhq", "openglpp", #endif - "direct3d", +#if C_DIRECT3D + "direct3d", "direct3d11", +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + "metal", +#endif nullptr }; const char* scalers[] = { @@ -1543,11 +1607,14 @@ void DOSBOX_SetupConfigSections(void) { nullptr }; const char* cores[] = { "auto", +#if (C_DYNAMIC_X86) || (C_DYNREC) + "dynamic", +#endif #if (C_DYNAMIC_X86) - "dynamic", "dynamic_x86", "dynamic_nodhfpu", + "dynamic_x86", "dynamic_nodhfpu", #endif #if (C_DYNREC) - "dynamic", "dynamic_rec", + "dynamic_rec", #endif "normal", "full", "simple", nullptr }; @@ -1572,6 +1639,11 @@ void DOSBOX_SetupConfigSections(void) { "You can set code page either in the language file or with \"country\" setting in [config] section."); Pstring->SetBasic(true); + Pint = secprop->Add_int("beep duration", Property::Changeable::WhenIdle,0); + Pint->SetMinMax(0,5000); + Pint->Set_help("If nonzero, set the duration of a beep when DOS or INT 10h is given a BEL character"); + Pint->SetBasic(true); + Pstring = secprop->Add_string("title",Property::Changeable::Always,""); Pstring->Set_help("Additional text to place in the title bar of the window."); Pstring->SetBasic(true); @@ -1761,6 +1833,9 @@ void DOSBOX_SetupConfigSections(void) { "You can increase this size to store more environment variables in DOS, although this does not affect the environment block\n" "of sub-processes spawned from the DOS shell. This option has no effect unless the dynamic kernel allocation is enabled."); + Pbool = secprop->Add_bool("shell permanent", Property::Changeable::OnlyAtStart, false); + Pbool->Set_help("If enabled, initial DOSBox-X shell will stay permanent (equivalent to /P switch)."); + Pint = secprop->Add_int("private area size",Property::Changeable::OnlyAtStart,32768); // DOSBox mainline compatible 32KB region Pint->SetMinMax(16,128*1024); Pint->Set_help("Set DOSBox-X private memory area size. This area contains private memory structures used by the DOS kernel.\n" @@ -2199,6 +2274,11 @@ void DOSBOX_SetupConfigSections(void) { "For pixel-perfect scaling (output=openglpp), it is recommended to turn this option off."); Pbool->SetBasic(true); + Pbool = secprop->Add_bool("modeswitch",Property::Changeable::Always,false); + Pbool->Set_help("Let DOSBox-X determine the resolution of the monitor. " + "This feature is only available when DOSBox-X is compiled with SDL2 support."); + Pbool->SetBasic(false); + Pmulti = secprop->Add_multi("scaler",Property::Changeable::Always," "); Pmulti->SetValue("normal2x",/*init*/true); Pmulti->Set_help("Scaler used to enlarge/enhance low resolution modes. Add keyword 'forced', " @@ -2422,6 +2502,14 @@ void DOSBOX_SetupConfigSections(void) { "at driver startup AND when INT 33h AX=0 is called. This is NEC MOUSE.COM behavior and default\n" "enabled. To emulate other drivers like QMOUSE that do not follow this behavior, set to false."); + Pbool = secprop->Add_bool("pc-98 chargen vsync-limited access",Property::Changeable::WhenIdle,false); + Pbool->Set_help("If set, reading pixels from the character generator while in Code Access mode (or always, for ANK\n" + "characters) will be invalid. Some models (i.e. PC-9821As3) dont seem to have this limitation, but\n" + "many others do.\n" + "This option is set to false by default, set this option to true if you suffer text glitches.\n" + "It is reported that setting this option to true will result in glitches in some titles;" + "therefore revert this option to false in such cases."); + secprop=control->AddSection_prop("dosv",&Null_Init,true); Pstring = secprop->Add_string("dosv",Property::Changeable::OnlyAtStart,"off"); @@ -2565,8 +2653,24 @@ void DOSBOX_SetupConfigSections(void) { "\n" "This option may be useful if you would like to prevent your DOS gaming from appearing in the Windows 11 Recall feature"); + Pint = secprop->Add_int("vbememsize", Property::Changeable::WhenIdle,0); + Pint->SetMinMax(0,128); + Pint->Set_help( + "Amount of video memory in kilobytes to report through the VESA BIOS extensions.\n" + "Set this value to an amount lower than vmemsize to handle DOS programs that cannot handle\n" + "more than the small amount of video memory they were designed for. This option also affects\n" + "what video modes are reported through the VBE." + ); + Pint->SetBasic(true); + + Pint = secprop->Add_int("vbememsizekb", Property::Changeable::WhenIdle,0); + Pint->SetMinMax(0,1024); + Pint->Set_help( + "Amount of video memory to report in kilobytes, in addition to vbememsize."); + Pint->SetBasic(true); + Pint = secprop->Add_int("vmemsize", Property::Changeable::WhenIdle,-1); - Pint->SetMinMax(-1,16); + Pint->SetMinMax(-1,128); Pint->Set_help( "Amount of video memory in megabytes.\n" " The maximum resolution and color depth the svga_s3 will be able to display\n" @@ -2577,6 +2681,7 @@ void DOSBOX_SetupConfigSections(void) { " 2: 1600x1200 at 256 colors or 1024x768 at 64k colors or 640x480 at 16M colors\n" " 4: 1600x1200 at 64k colors or 1024x768 at 16M colors\n" " 8: up to 1600x1200 at 16M colors\n" + "Larger values are available depending on machine type.\n" "For build engine games, use more memory than in the list above so it can\n" "use triple buffering and thus won't flicker.\n" ); @@ -2596,6 +2701,9 @@ void DOSBOX_SetupConfigSections(void) { Pint->SetMinMax(0,128); Pint->Set_help("Controls VESA BIOS non-linear framebuffer window size in KB. This affects ONLY the VESA BIOS extensions. Set 0 to functional normally."); + Pbool = secprop->Add_bool("vbe protected mode interface",Property::Changeable::OnlyAtStart,true); + Pbool->Set_help("If set, enable the VBE protected mode interface"); + Pbool = secprop->Add_bool("enable 8-bit dac",Property::Changeable::OnlyAtStart,true); Pbool->Set_help("If set, allow VESA BIOS calls in IBM PC mode to set DAC width. Has no effect in PC-98 mode."); @@ -2915,13 +3023,27 @@ void DOSBOX_SetupConfigSections(void) { "If graphical artifacts or errors occur, try turning this off first. May provide a performance benefit."); Pbool->SetBasic(true); + Pstring = secprop->Add_string("skip render if nothing changed",Property::Changeable::Always,"auto"); + Pstring->Set_values(truefalseautoopt); + Pstring->Set_help("If set, DOSBox-X will skip rendering entirely unless any change is made to the guest display.\n" + "This may provide a performance benefit, especially in SVGA modes. This option has no effect unless render on demand is true or auto.\n" + "Normally in DOSBox and DOSBox-X, video is rendered constantly, whether or not anything changed,\n" + "and then compared with the previous frame to determine where to update the host display.\n" + "In addition to the render on demand option, this option may further break timing dependent effects and/or cause problems with some games."); + Pstring->SetBasic(true); + Pstring = secprop->Add_string("scanline render on demand",Property::Changeable::Always,"auto"); Pstring->Set_values(truefalseautoopt); Pstring->Set_help("Render video output at vsync or when something is changed mid frame, instead of stopping to render every scanline.\n" - "May provide a performance benefit to most DOS games. However this may also break timing-dependent game or Demoscene effects.\n" - "Default auto, which will turn if off for VGA modes and turn it on for SVGA modes."); + "This may provide a performance benefit to most DOS games. However this may also break timing-dependent game or Demoscene effects.\n" + "Default is auto, which will turn it off for VGA modes and turn it on for SVGA modes."); Pstring->SetBasic(true); + secprop=control->AddSection_prop("script",&Null_Init,true);//done + + Pstring = secprop->Add_string("startup.js",Property::Changeable::WhenIdle,""); + Pstring->Set_help("script to run at startup"); + secprop=control->AddSection_prop("vsync",&Null_Init,true);//done Pstring = secprop->Add_string("vsyncmode",Property::Changeable::WhenIdle,"off"); @@ -2968,6 +3090,10 @@ void DOSBOX_SetupConfigSections(void) { Pbool->Set_help("Enforce checks for segment limits on 80286 and higher CPU types."); Pbool->SetBasic(true); + Pbool = secprop->Add_bool("lds wraparound",Property::Changeable::Always,true); + Pbool->Set_help("For LDS/LES instructions, in 16-bit code, check for 64KB wraparound case."); + Pbool->SetBasic(true); + Pbool = secprop->Add_bool("double fault",Property::Changeable::Always,true); Pbool->Set_help("Emulate double fault exception"); @@ -3629,259 +3755,283 @@ void DOSBOX_SetupConfigSections(void) { Pint->Set_help("Fluidsynth chorus type. 0 is sine wave, 1 is triangle wave."); #endif - secprop=control->AddSection_prop("sblaster",&Null_Init,true); - - Pstring = secprop->Add_string("sbtype",Property::Changeable::WhenIdle,"sb16"); - Pstring->Set_values(sbtypes); - Pstring->Set_help("Type of Sound Blaster to emulate. 'gb' is Game Blaster."); - Pstring->SetBasic(true); - - Phex = secprop->Add_hex("sbbase",Property::Changeable::WhenIdle,0x220); - Phex->Set_values(ios); - Phex->Set_help("The IO address of the Sound Blaster.\n" - "220h to 2E0h are for use with IBM PC Sound Blaster emulation.\n" - "D2h to DEh are for use with NEC PC-98 Sound Blaster 16 emulation."); - Phex->SetBasic(true); - - Pint = secprop->Add_int("irq",Property::Changeable::WhenIdle,7); - Pint->Set_values(irqssb); - Pint->Set_help("The IRQ number of the Sound Blaster (usually 5 or 7, depending on the sound card type and the game).\n" - "Set to 0 for the default setting of the sound card, or set to -1 to start DOSBox-X with the IRQ unassigned."); - Pint->SetBasic(true); - - Pint = secprop->Add_int("mindma",Property::Changeable::OnlyAtStart,-1); - Pint->Set_help( "Minimum DMA transfer left to increase attention across DSP blocks, in milliseconds. Set to -1 for default.\n" - "There are some DOS games/demos that use single-cycle DSP playback in their music tracker and they micromanage\n" - "the DMA transfer per block poorly in a way that causes popping and artifacts. Setting this option to 0 for\n" - "such DOS applications may reduce audible popping and artifacts."); - - Pbool = secprop->Add_bool("listen to recording source",Property::Changeable::WhenIdle,false); - Pbool->Set_help("When the guest records audio from the Sound Blaster card, send the input source to the speakers as well so it can be heard."); - Pbool->SetBasic(true); - - Pstring = secprop->Add_string("recording source",Property::Changeable::WhenIdle,"silence"); - Pstring->Set_values(sb_recording_sources); - Pstring->Set_help("Audio source to use when guest is recording audio. At this time only generated audio sources are available."); - Pstring->SetBasic(true); - - /* Sound Blaster IRQ hacks. - * - * These hacks reduce emulation accuracy but can be set to work around bugs or mistakes in some old - * games and demos related to handling the Sound Blaster IRQ. - * - * - Saga by Dust (1993): - * Sound Blaster support has a fatal flaw in that the Sound Blaster interrupt handler it installs assumes - * DS == CS. It uses the DS register to read local variables needed to manage the Sound Blaster card but - * it makes no attempt to push DS and then load the DS segment value it needs. While the demo may seem to - * run normally at first, eventually the interrupt is fired at just the right time to catch the demo in - * the middle of its graphics routines (DS=A000). Since the ISR uses DS to load the Sound Blaster DSP - * I/O port, it reads some random value from *video RAM* and then hangs in a loop waiting for that I/O - * port to clear bit 7! Setting 'cs_equ_ds' works around that bug by instructing PIC emulation not to - * fire the interrupt unless segment registers CS and DS match. */ - Pstring = secprop->Add_string("irq hack",Property::Changeable::WhenIdle,"none"); - Pstring->Set_help("Specify a hack related to the Sound Blaster IRQ to avoid crashes in a handful of games and demos.\n" - " none Emulate IRQs normally\n" - " cs_equ_ds Do not fire IRQ unless two CPU segment registers match: CS == DS. Read DOSBox-X Wiki or source code for details."); - - Pint = secprop->Add_int("dma",Property::Changeable::WhenIdle,1); - Pint->Set_values(dmassb); - Pint->Set_help("The DMA number of the Sound Blaster. Set to -1 to start DOSBox-X with the DMA unassigned."); - Pint->SetBasic(true); - - Pint = secprop->Add_int("hdma",Property::Changeable::WhenIdle,5); - Pint->Set_values(dmassb); - Pint->Set_help("The High DMA number of the Sound Blaster. Set to -1 to start DOSBox-X with the High DMA unassigned."); - Pint->SetBasic(true); - - Pbool = secprop->Add_bool("dsp command aliases",Property::Changeable::WhenIdle,true); - Pbool->Set_help("If set (on by default), emulation will support known undocumented aliases\n" - "of common Sound Blaster DSP commands. Some broken DOS games and demos rely on these aliases.\n" - "For more information: https://www.vogons.org/viewtopic.php?f=62&t=61098&start=280"); - - Pbool = secprop->Add_bool("pic unmask irq",Property::Changeable::WhenIdle,false); - Pbool->Set_help("Start the DOS virtual machine with the Sound Blaster IRQ already unmasked at the PIC.\n" - "Some early DOS games/demos that support Sound Blaster expect the IRQ to fire but make\n" - "no attempt to unmask the IRQ. If audio cuts out no matter what IRQ you try, then try\n" - "setting this option.\n" - "Option is needed for:\n" - " Public NMI \"jump\" demo (1992)"); - - Pbool = secprop->Add_bool("enable speaker",Property::Changeable::WhenIdle,false); - Pbool->Set_help("Start the DOS virtual machine with the Sound Blaster speaker enabled.\n" - "Sound Blaster Pro and older cards have a speaker disable/enable command.\n" - "Normally the card boots up with the speaker disabled. If a DOS game or demo\n" - "attempts to play without enabling the speaker, set this option to true to\n" - "compensate. This setting has no meaning if emulating a Sound Blaster 16 card."); - Pbool->SetBasic(true); - - Pbool = secprop->Add_bool("enable asp",Property::Changeable::WhenIdle,false); - Pbool->Set_help("If set, emulate the presence of the Sound Blaster 16 Advanced Sound Processor/Creative Sound Processor chip.\n" - "NOTE: This only emulates its presence and the basic DSP commands to communicate with it. Actual ASP/CSP functions are not yet implemented."); - - Pbool = secprop->Add_bool("disable filtering",Property::Changeable::WhenIdle,false); - Pbool->Set_help("By default DOSBox-X filters Sound Blaster output to emulate lowpass filters and analog output limitations.\n" - "Set this option to true to disable filtering. Note that doing so disables emulation of the Sound Blaster Pro\n" - "output filter and ESS AudioDrive lowpass filter."); - - Pbool = secprop->Add_bool("dsp write buffer status must return 0x7f or 0xff",Property::Changeable::WhenIdle,false); - Pbool->Set_help("If set, force port 22Ch (DSP write buffer status) to return 0x7F or 0xFF. If not set, the port\n" - "may return 0x7F or 0xFF depending on what type of Sound Blaster is being emulated.\n" - "Set this option for some early DOS demos that make that assumption about port 22Ch.\n" - "Option is needed for:\n" - " Overload by Hysteria (1992) - Audio will crackle/saturate (8-bit overflow) except when sbtype=sb16"); - - Pbool = secprop->Add_bool("pre-set sbpro stereo",Property::Changeable::WhenIdle,false); - Pbool->Set_help("Start the DOS virtual machine with the Sound Blaster Pro stereo bit set (in the mixer).\n" - "A few demos support Sound Blaster Pro but forget to set this bit.\n" - "Option is needed for:\n" - " Inconexia by Iguana (1993)"); - - Pbool = secprop->Add_bool("sbmixer",Property::Changeable::WhenIdle,true); - Pbool->Set_help("Allow the Sound Blaster mixer to modify the DOSBox-X mixer."); - Pbool->SetBasic(true); - - Pstring = secprop->Add_string("cms", Property::Changeable::WhenIdle, "auto"); - Pstring->Set_values(cms_settings); - Pstring->Set_help( - "Enable CMS emulation ('auto' by default).\n" - " off: Disable CMS emulation (except when the Game Blaster is selected).\n" - " on: Enable CMS emulation on Sound Blaster 1 and 2.\n" - " auto: Auto-enable CMS emulation for Sound Blaster 1 and Game Blaster."); - - Pstring = secprop->Add_string("oplmode",Property::Changeable::WhenIdle,"auto"); - Pstring->Set_values(oplmodes); - Pstring->Set_help("Type of OPL emulation. On 'auto' the mode is determined by the 'sbtype' setting.\n" - "All OPL modes are AdLib-compatible."); - Pstring->SetBasic(true); - - Pbool = secprop->Add_bool("adlib force timer overflow on detect",Property::Changeable::WhenIdle,false); - Pbool->Set_help("If set, Adlib/OPL emulation will signal 'overflow' on timers after 50 I/O reads.\n" - "This is a temporary hack to work around timing bugs noted in DOSBox-X. Certain\n" - "games (Wolfenstein 3D) poll the Adlib status port a fixed number of times assuming\n" - "that the poll loop takes long enough for the Adlib timer to run out. If the game\n" - "cannot reliably detect Adlib at higher cycles counts, but can reliably detect at\n" - "lower cycles counts, set this option."); - /* NTS: The reason I mention Wolfenstein 3D is that it seems coded not to probe for Sound Blaster unless it - * first detects the Adlib at port 0x388. No Adlib, no Sound Blaster. */ - /* ^ NTS: To see what I mean, download Wolf3d source code, look at ID_SD.C line 1585 (Adlib detection routine). - * Note it sets Timer 1, then reads port 388h 100 times before reading status to detect whether the - * timer "overflowed" (fairly typical Adlib detection code). - * Some quick math: 8333333Hz ISA BCLK / 6 cycles per read (3 wait states) = 1388888 reads/second possible - * 100 I/O reads * (1 / 1388888) = 72us */ - - Pstring = secprop->Add_string("oplemu",Property::Changeable::WhenIdle,"default"); - Pstring->Set_values(oplemus); - Pstring->Set_help("Provider for the OPL emulation. 'compat' might provide better quality.\n" - "'nuked' is the most accurate (but the most CPU-intensive). See oplrate as well."); - Pstring->SetBasic(true); - - Pint = secprop->Add_int("oplrate",Property::Changeable::WhenIdle,48000); - Pint->Set_values(rates); - Pint->Set_help("Sample rate of OPL music emulation. Use 49716 for highest quality (set the mixer rate accordingly)."); - Pint->SetBasic(true); - - Pstring = secprop->Add_string("oplport", Property::Changeable::WhenIdle, ""); - Pstring->Set_help("Serial port of the OPL2 Audio Board when oplemu=opl2board, opl2mode will become 'opl2' automatically."); - Pstring->SetBasic(true); - - Pstring = secprop->Add_string("retrowave_bus", Property::Changeable::WhenIdle, "serial"); - Pstring->Set_help("Bus of the Retrowave series board (serial/spi). SPI is only supported on Linux."); - Pstring->SetBasic(true); - - Pstring = secprop->Add_string("retrowave_spi_cs", Property::Changeable::WhenIdle, "0,6"); - Pstring->Set_help("SPI chip select pin of the Retrowave series board. Only supported on Linux."); - - Pstring = secprop->Add_string("retrowave_port", Property::Changeable::WhenIdle, ""); - Pstring->Set_help("Serial port of the Retrowave series board."); - Pstring->SetBasic(true); - - Phex = secprop->Add_hex("hardwarebase",Property::Changeable::WhenIdle,0x220); - Phex->Set_help("base address of the real hardware Sound Blaster:\n"\ - "210,220,230,240,250,260,280"); - Phex->SetBasic(true); - - Pbool = secprop->Add_bool("force dsp auto-init",Property::Changeable::WhenIdle,false); - Pbool->Set_help("Treat all single-cycle DSP commands as auto-init to keep playback going.\n" - "This option is a workaround for DOS games or demos that use single-cycle DSP playback commands and\n" - "have problems with missing the Sound Blaster IRQ under load. Do not enable unless you need this workaround.\n" - "Needed for:\n" - " - Extreme \"lunatic\" demo (1993)"); - - Pbool = secprop->Add_bool("force goldplay",Property::Changeable::WhenIdle,false); - Pbool->Set_help("Always render Sound Blaster output sample-at-a-time. Testing option. You probably don't want to enable this."); - - Pbool = secprop->Add_bool("goldplay",Property::Changeable::WhenIdle,true); - Pbool->Set_help("Enable goldplay emulation."); - Pbool->SetBasic(true); - - Pbool = secprop->Add_bool("goldplay stereo",Property::Changeable::WhenIdle,true); - Pbool->Set_help("Enable workaround for goldplay stereo playback. Many DOS demos using this technique\n" - "don't seem to know they need to double the frequency when programming the DSP time constant for Pro stereo output.\n" - "If stereo playback seems to have artifacts consider enabling this option. For accurate emulation of Sound Blaster\n" - "hardware, disable this option."); - - Pstring = secprop->Add_string("dsp require interrupt acknowledge",Property::Changeable::WhenIdle,"auto"); - Pstring->Set_help("If set, the DSP will halt DMA playback until IRQ acknowledgement occurs even in auto-init mode (SB16 behavior).\n" - "If clear, IRQ acknowledgement will have no effect on auto-init playback (SB Pro and earlier & clone behavior)\n" - "If set to 'auto' then behavior is determined by sbtype= setting.\n" - "This is a setting for hardware accuracy in emulation. If audio briefly plays then stops then your DOS game\n" - "and it's not using IRQ (but using DMA), try setting this option to 'false'"); - - Pint = secprop->Add_int("dsp write busy delay",Property::Changeable::WhenIdle,-1); - Pint->Set_help("Amount of time in nanoseconds the DSP chip signals 'busy' after writing to the DSP (port 2xCh). Set to -1 to use card-specific defaults.\n" - "WARNING: Setting the value too high (above 20000ns) may have detrimental effects to DOS games that use IRQ 0 and DSP command 0x10 to play audio.\n" - " Setting the value way too high (above 1000000ns) can cause significant lag in DOS games."); - - Pbool = secprop->Add_bool("blaster environment variable",Property::Changeable::WhenIdle,true); - Pbool->Set_help("Whether or not to set the BLASTER environment variable automatically at startup"); - Pbool->SetBasic(true); - - Pbool = secprop->Add_bool("sample rate limits",Property::Changeable::WhenIdle,true); - Pbool->Set_help("If set (default), limit DSP sample rate to what real hardware is limited to"); - - /* recommended for: - * 1992 demo "overload" (if set, Sound Blaster support can run at 24KHz without causing demo to hang in the IRQ 0 timer) - * 1993 demo "xmas 93" (superiority complex) because the demo's Sound Blaster mode writes at the timer interrupt rate without polling the DSP to check busy state */ - Pbool = secprop->Add_bool("instant direct dac",Property::Changeable::WhenIdle,false); - Pbool->Set_help("If set, direct DAC output commands are instantaneous. This option is intended as a quick fix for\n" - "games or demos that play direct DAC music/sound from the IRQ 0 timer who a) write the DSP command\n" - "and data without polling the DSP to ensure it's ready or b) can get locked into the IRQ 0 handler\n" - "waiting for DSP status when instructed to play at or beyond the DSP's maximum direct DAC sample rate.\n" - "This fix allows broken Sound Blaster code to work and should not be enabled unless necessary."); - - /* accuracy emulation: SB16 does not honor SBPro stereo bit in the mixer */ - Pbool = secprop->Add_bool("stereo control with sbpro only",Property::Changeable::WhenIdle,true); - Pbool->Set_help("Default on. If set, Sound Blaster Pro stereo is not available when emulating sb16 or sb16vibra.\n" - "If clear, sb16 emulation will honor the sbpro stereo bit. Note that Creative SB16 cards do not\n" - "honor the stereo bit, and this option allows DOSBox-X emulate that fact. Accuracy setting."); - - /* NTS: It turns out (SB16 at least) the DSP will periodically set bit 7 (busy) by itself at some - * clock rate even if it's idle. Casual testing on an old Pentium system with a ViBRA shows - * it's possible to see both 0x7F and 0xFF come back if you repeatedly type "i 22c" in DOS - * DEBUG.EXE. FIXME: At what clock rate and duty cycle does this happen? */ - Pint = secprop->Add_int("dsp busy cycle rate",Property::Changeable::WhenIdle,-1/*default*/); - Pint->Set_help("Sound Blaster 16 DSP chips appear to go busy periodically at some high clock rate\n" - "whether the DSP is actually doing anything for the system or not. This is an accuracy\n" - "option for Sound Blaster emulation. If this option is nonzero, it will be interpreted\n" - "as the busy cycle rate in Hz. If zero, busy cycle will not be emulated. If -1, sound\n" - "blaster emulation will automatically choose a setting based on the sbtype= setting"); - - Pint = secprop->Add_int("dsp busy cycle always",Property::Changeable::WhenIdle,-1/*default*/); - Pint->Set_help("If set, the DSP busy cycle always happens. If clear, DSP busy cycle only happens when\n" - "audio playback is running. Default setting is to pick according to the sound card."); - - Pint = secprop->Add_int("dsp busy cycle duty",Property::Changeable::WhenIdle,-1/*default*/); - Pint->Set_help("If emulating SB16 busy cycle, this value (0 to 100) controls the duty cycle of the busy cycle.\n" - "If this option is set to -1, Sound Blaster emulation will choose a value automatically according\n" - "to sbtype=. If 0, busy cycle emulation is disabled."); - - /* NTS: Confirmed: My Sound Blaster 2.0 (at least) mirrors the DSP on port 22Ch and 22Dh. This option - * will only take effect with sbtype sb1 and sb2, so make it enabled by default. Accuracy setting. */ - Pbool = secprop->Add_bool("io port aliasing",Property::Changeable::WhenIdle,true); - Pbool->Set_help("If set, Sound Blaster ports alias by not decoding the LSB of the I/O port.\n" - "This option only applies when sbtype is set to sb1 or sb2 (not SBPro or SB16).\n" - "This is a hack for the Electromotive Force 'Internal Damage' demo which apparently\n" - "relies on this behavior for Sound Blaster output and should be enabled for accuracy in emulation."); + { + const char *secname; + const unsigned short int def_sbbase[2] = {0x220,0x260}; /* 0x240 by default is occupied by the GUS */ + const unsigned char def_irq[2] = {7,3}; /* 5 by default occupied by the GUS */ + const unsigned char def_dma[2] = {1,0}; /* 3 by default occupied by the GUS */ + const unsigned char def_hdma[2] = {5,7}; + const char *def_sbtype[2] = {"sb16","none"}; /* second card off by default */ + for (size_t ci=0;(secname=sbGetSectionName(ci))!=NULL;ci++) { + secprop=control->AddSection_prop(secname,&Null_Init,true); + + Pstring = secprop->Add_string("sbtype",Property::Changeable::WhenIdle,def_sbtype[ci]);//"sb16" + Pstring->Set_values(sbtypes); + Pstring->Set_help("Type of Sound Blaster to emulate. 'gb' is Game Blaster."); + Pstring->SetBasic(true); + + Phex = secprop->Add_hex("sbbase",Property::Changeable::WhenIdle,def_sbbase[ci]);//0x220 + Phex->Set_values(ios); + Phex->Set_help("The IO address of the Sound Blaster.\n" + "220h to 2E0h are for use with IBM PC Sound Blaster emulation.\n" + "D2h to DEh are for use with NEC PC-98 Sound Blaster 16 emulation."); + Phex->SetBasic(true); + + Pint = secprop->Add_int("irq",Property::Changeable::WhenIdle,def_irq[ci]);//7 + Pint->Set_values(irqssb); + Pint->Set_help("The IRQ number of the Sound Blaster (usually 5 or 7, depending on the sound card type and the game).\n" + "Set to 0 for the default setting of the sound card, or set to -1 to start DOSBox-X with the IRQ unassigned."); + Pint->SetBasic(true); + + Pint = secprop->Add_int("mindma",Property::Changeable::OnlyAtStart,-1); + Pint->Set_help( "Minimum DMA transfer left to increase attention across DSP blocks, in milliseconds. Set to -1 for default.\n" + "There are some DOS games/demos that use single-cycle DSP playback in their music tracker and they micromanage\n" + "the DMA transfer per block poorly in a way that causes popping and artifacts. Setting this option to 0 for\n" + "such DOS applications may reduce audible popping and artifacts."); + + Pbool = secprop->Add_bool("listen to recording source",Property::Changeable::WhenIdle,false); + Pbool->Set_help("When the guest records audio from the Sound Blaster card, send the input source to the speakers as well so it can be heard."); + Pbool->SetBasic(true); + + Pstring = secprop->Add_string("recording source",Property::Changeable::WhenIdle,"silence"); + Pstring->Set_values(sb_recording_sources); + Pstring->Set_help("Audio source to use when guest is recording audio. Options: silence, hiss, 1khz tone, or microphone (Windows WASAPI input)."); + Pstring->SetBasic(true); + + Pbool = secprop->Add_bool("prefer hfp", Property::Changeable::WhenIdle, false); + Pbool->Set_help( + "Prefer Bluetooth HFP (Hands-Free Profile) microphone mode.\n" + "This allows using the microphone of a BT headset but reduces\n" + "audio quality (typically 8kHz–16kHz telephone quality).\n" + "When disabled, higher-quality microphones are preferred." + ); + Pbool->SetBasic(true); + + /* Sound Blaster IRQ hacks. + * + * These hacks reduce emulation accuracy but can be set to work around bugs or mistakes in some old + * games and demos related to handling the Sound Blaster IRQ. + * + * - Saga by Dust (1993): + * Sound Blaster support has a fatal flaw in that the Sound Blaster interrupt handler it installs assumes + * DS == CS. It uses the DS register to read local variables needed to manage the Sound Blaster card but + * it makes no attempt to push DS and then load the DS segment value it needs. While the demo may seem to + * run normally at first, eventually the interrupt is fired at just the right time to catch the demo in + * the middle of its graphics routines (DS=A000). Since the ISR uses DS to load the Sound Blaster DSP + * I/O port, it reads some random value from *video RAM* and then hangs in a loop waiting for that I/O + * port to clear bit 7! Setting 'cs_equ_ds' works around that bug by instructing PIC emulation not to + * fire the interrupt unless segment registers CS and DS match. */ + Pstring = secprop->Add_string("irq hack",Property::Changeable::WhenIdle,"none"); + Pstring->Set_help("Specify a hack related to the Sound Blaster IRQ to avoid crashes in a handful of games and demos.\n" + " none Emulate IRQs normally\n" + " cs_equ_ds Do not fire IRQ unless two CPU segment registers match: CS == DS. Read DOSBox-X Wiki or source code for details."); + + Pint = secprop->Add_int("dma",Property::Changeable::WhenIdle,def_dma[ci]);//1 + Pint->Set_values(dmassb); + Pint->Set_help("The DMA number of the Sound Blaster. Set to -1 to start DOSBox-X with the DMA unassigned."); + Pint->SetBasic(true); + + Pint = secprop->Add_int("hdma",Property::Changeable::WhenIdle,def_hdma[ci]);//5 + Pint->Set_values(dmassb); + Pint->Set_help("The High DMA number of the Sound Blaster. Set to -1 to start DOSBox-X with the High DMA unassigned."); + Pint->SetBasic(true); + + Pbool = secprop->Add_bool("dsp command aliases",Property::Changeable::WhenIdle,true); + Pbool->Set_help("If set (on by default), emulation will support known undocumented aliases\n" + "of common Sound Blaster DSP commands. Some broken DOS games and demos rely on these aliases.\n" + "For more information: https://www.vogons.org/viewtopic.php?f=62&t=61098&start=280"); + + Pbool = secprop->Add_bool("pic unmask irq",Property::Changeable::WhenIdle,false); + Pbool->Set_help("Start the DOS virtual machine with the Sound Blaster IRQ already unmasked at the PIC.\n" + "Some early DOS games/demos that support Sound Blaster expect the IRQ to fire but make\n" + "no attempt to unmask the IRQ. If audio cuts out no matter what IRQ you try, then try\n" + "setting this option.\n" + "Option is needed for:\n" + " Public NMI \"jump\" demo (1992)"); + + Pbool = secprop->Add_bool("enable speaker",Property::Changeable::WhenIdle,false); + Pbool->Set_help("Start the DOS virtual machine with the Sound Blaster speaker enabled.\n" + "Sound Blaster Pro and older cards have a speaker disable/enable command.\n" + "Normally the card boots up with the speaker disabled. If a DOS game or demo\n" + "attempts to play without enabling the speaker, set this option to true to\n" + "compensate. This setting has no meaning if emulating a Sound Blaster 16 card."); + Pbool->SetBasic(true); + + Pbool = secprop->Add_bool("enable asp",Property::Changeable::WhenIdle,false); + Pbool->Set_help("If set, emulate the presence of the Sound Blaster 16 Advanced Sound Processor/Creative Sound Processor chip.\n" + "NOTE: This only emulates its presence and the basic DSP commands to communicate with it. Actual ASP/CSP functions are not yet implemented."); + + Pbool = secprop->Add_bool("disable filtering",Property::Changeable::WhenIdle,false); + Pbool->Set_help("By default DOSBox-X filters Sound Blaster output to emulate lowpass filters and analog output limitations.\n" + "Set this option to true to disable filtering. Note that doing so disables emulation of the Sound Blaster Pro\n" + "output filter and ESS AudioDrive lowpass filter."); + + Pbool = secprop->Add_bool("dsp write buffer status must return 0x7f or 0xff",Property::Changeable::WhenIdle,false); + Pbool->Set_help("If set, force port 22Ch (DSP write buffer status) to return 0x7F or 0xFF. If not set, the port\n" + "may return 0x7F or 0xFF depending on what type of Sound Blaster is being emulated.\n" + "Set this option for some early DOS demos that make that assumption about port 22Ch.\n" + "Option is needed for:\n" + " Overload by Hysteria (1992) - Audio will crackle/saturate (8-bit overflow) except when sbtype=sb16"); + + Pbool = secprop->Add_bool("pre-set sbpro stereo",Property::Changeable::WhenIdle,false); + Pbool->Set_help("Start the DOS virtual machine with the Sound Blaster Pro stereo bit set (in the mixer).\n" + "A few demos support Sound Blaster Pro but forget to set this bit.\n" + "Option is needed for:\n" + " Inconexia by Iguana (1993)"); + + Pbool = secprop->Add_bool("sbmixer",Property::Changeable::WhenIdle,true); + Pbool->Set_help("Allow the Sound Blaster mixer to modify the DOSBox-X mixer."); + Pbool->SetBasic(true); + + Pstring = secprop->Add_string("cms", Property::Changeable::WhenIdle, ci==0?"auto":"off"); + Pstring->Set_values(cms_settings); + Pstring->Set_help( + "Enable CMS emulation ('auto' by default).\n" + " off: Disable CMS emulation (except when the Game Blaster is selected).\n" + " on: Enable CMS emulation on Sound Blaster 1 and 2.\n" + " auto: Auto-enable CMS emulation for Sound Blaster 1 and Game Blaster."); + + Pstring = secprop->Add_string("oplmode",Property::Changeable::WhenIdle, ci==0?"auto":"none"); + Pstring->Set_values(oplmodes); + Pstring->Set_help("Type of OPL emulation. On 'auto' the mode is determined by the 'sbtype' setting.\n" + "All OPL modes are AdLib-compatible."); + Pstring->SetBasic(true); + + Pbool = secprop->Add_bool("adlib pcm boost",Property::Changeable::WhenIdle,false); + Pbool->Set_help("If set, and Adlib emulation detects that the guest application is playing digitized speech\n" + "or music through the FM chip, the FM audio will be amplified to make the audio more audible.\n" + "Audio levels will be reset for any other use including FM music synthesis."); + + Pbool = secprop->Add_bool("adlib force timer overflow on detect",Property::Changeable::WhenIdle,false); + Pbool->Set_help("If set, Adlib/OPL emulation will signal 'overflow' on timers after 50 I/O reads.\n" + "This is a temporary hack to work around timing bugs noted in DOSBox-X. Certain\n" + "games (Wolfenstein 3D) poll the Adlib status port a fixed number of times assuming\n" + "that the poll loop takes long enough for the Adlib timer to run out. If the game\n" + "cannot reliably detect Adlib at higher cycles counts, but can reliably detect at\n" + "lower cycles counts, set this option."); + /* NTS: The reason I mention Wolfenstein 3D is that it seems coded not to probe for Sound Blaster unless it + * first detects the Adlib at port 0x388. No Adlib, no Sound Blaster. */ + /* ^ NTS: To see what I mean, download Wolf3d source code, look at ID_SD.C line 1585 (Adlib detection routine). + * Note it sets Timer 1, then reads port 388h 100 times before reading status to detect whether the + * timer "overflowed" (fairly typical Adlib detection code). + * Some quick math: 8333333Hz ISA BCLK / 6 cycles per read (3 wait states) = 1388888 reads/second possible + * 100 I/O reads * (1 / 1388888) = 72us */ + + Pstring = secprop->Add_string("oplemu",Property::Changeable::WhenIdle,"default"); + Pstring->Set_values(oplemus); + Pstring->Set_help("Provider for the OPL emulation. 'compat' might provide better quality.\n" + "'nuked' is the most accurate (but the most CPU-intensive). See oplrate as well."); + Pstring->SetBasic(true); + + Pint = secprop->Add_int("oplrate",Property::Changeable::WhenIdle,49716); + Pint->Set_values(rates); + Pint->Set_help("Sample rate of OPL music emulation. Use 49716 for highest quality (set the mixer rate accordingly)."); + Pint->SetBasic(true); + + Pstring = secprop->Add_string("oplport", Property::Changeable::WhenIdle, ""); + Pstring->Set_help("Serial port of the OPL2 Audio Board when oplemu=opl2board, opl2mode will become 'opl2' automatically."); + Pstring->SetBasic(true); + + Pstring = secprop->Add_string("retrowave_bus", Property::Changeable::WhenIdle, "serial"); + Pstring->Set_help("Bus of the Retrowave series board (serial/spi). SPI is only supported on Linux."); + Pstring->SetBasic(true); + + Pstring = secprop->Add_string("retrowave_spi_cs", Property::Changeable::WhenIdle, "0,6"); + Pstring->Set_help("SPI chip select pin of the Retrowave series board. Only supported on Linux."); + + Pstring = secprop->Add_string("retrowave_port", Property::Changeable::WhenIdle, ""); + Pstring->Set_help("Serial port of the Retrowave series board."); + Pstring->SetBasic(true); + + Phex = secprop->Add_hex("hardwarebase",Property::Changeable::WhenIdle,0x220); + Phex->Set_help("base address of the real hardware Sound Blaster:\n"\ + "210,220,230,240,250,260,280"); + Phex->SetBasic(true); + + Pbool = secprop->Add_bool("force dsp auto-init",Property::Changeable::WhenIdle,false); + Pbool->Set_help("Treat all single-cycle DSP commands as auto-init to keep playback going.\n" + "This option is a workaround for DOS games or demos that use single-cycle DSP playback commands and\n" + "have problems with missing the Sound Blaster IRQ under load. Do not enable unless you need this workaround.\n" + "Needed for:\n" + " - Extreme \"lunatic\" demo (1993)"); + + Pbool = secprop->Add_bool("force goldplay",Property::Changeable::WhenIdle,false); + Pbool->Set_help("Always render Sound Blaster output sample-at-a-time. Testing option. You probably don't want to enable this."); + + Pbool = secprop->Add_bool("goldplay",Property::Changeable::WhenIdle,true); + Pbool->Set_help("Enable goldplay emulation."); + Pbool->SetBasic(true); + + Pbool = secprop->Add_bool("goldplay stereo",Property::Changeable::WhenIdle,true); + Pbool->Set_help("Enable workaround for goldplay stereo playback. Many DOS demos using this technique\n" + "don't seem to know they need to double the frequency when programming the DSP time constant for Pro stereo output.\n" + "If stereo playback seems to have artifacts consider enabling this option. For accurate emulation of Sound Blaster\n" + "hardware, disable this option."); + + Pstring = secprop->Add_string("dsp require interrupt acknowledge",Property::Changeable::WhenIdle,"auto"); + Pstring->Set_help("If set, the DSP will halt DMA playback until IRQ acknowledgement occurs even in auto-init mode (SB16 behavior).\n" + "If clear, IRQ acknowledgement will have no effect on auto-init playback (SB Pro and earlier & clone behavior)\n" + "If set to 'auto' then behavior is determined by sbtype= setting.\n" + "This is a setting for hardware accuracy in emulation. If audio briefly plays then stops then your DOS game\n" + "and it's not using IRQ (but using DMA), try setting this option to 'false'"); + + Pint = secprop->Add_int("dsp write busy delay",Property::Changeable::WhenIdle,-1); + Pint->Set_help("Amount of time in nanoseconds the DSP chip signals 'busy' after writing to the DSP (port 2xCh). Set to -1 to use card-specific defaults.\n" + "WARNING: Setting the value too high (above 20000ns) may have detrimental effects to DOS games that use IRQ 0 and DSP command 0x10 to play audio.\n" + " Setting the value way too high (above 1000000ns) can cause significant lag in DOS games."); + + Pbool = secprop->Add_bool("blaster environment variable",Property::Changeable::WhenIdle,ci == 0 ? true : false); + Pbool->Set_help("Whether or not to set the BLASTER environment variable automatically at startup"); + Pbool->SetBasic(true); + + Pbool = secprop->Add_bool("sample rate limits",Property::Changeable::WhenIdle,true); + Pbool->Set_help("If set (default), limit DSP sample rate to what real hardware is limited to"); + + /* recommended for: + * 1992 demo "overload" (if set, Sound Blaster support can run at 24KHz without causing demo to hang in the IRQ 0 timer) + * 1993 demo "xmas 93" (superiority complex) because the demo's Sound Blaster mode writes at the timer interrupt rate without polling the DSP to check busy state */ + Pbool = secprop->Add_bool("instant direct dac",Property::Changeable::WhenIdle,false); + Pbool->Set_help("If set, direct DAC output commands are instantaneous. This option is intended as a quick fix for\n" + "games or demos that play direct DAC music/sound from the IRQ 0 timer who a) write the DSP command\n" + "and data without polling the DSP to ensure it's ready or b) can get locked into the IRQ 0 handler\n" + "waiting for DSP status when instructed to play at or beyond the DSP's maximum direct DAC sample rate.\n" + "This fix allows broken Sound Blaster code to work and should not be enabled unless necessary."); + + /* accuracy emulation: SB16 does not honor SBPro stereo bit in the mixer */ + Pbool = secprop->Add_bool("stereo control with sbpro only",Property::Changeable::WhenIdle,true); + Pbool->Set_help("Default on. If set, Sound Blaster Pro stereo is not available when emulating sb16 or sb16vibra.\n" + "If clear, sb16 emulation will honor the sbpro stereo bit. Note that Creative SB16 cards do not\n" + "honor the stereo bit, and this option allows DOSBox-X emulate that fact. Accuracy setting."); + + /* NTS: It turns out (SB16 at least) the DSP will periodically set bit 7 (busy) by itself at some + * clock rate even if it's idle. Casual testing on an old Pentium system with a ViBRA shows + * it's possible to see both 0x7F and 0xFF come back if you repeatedly type "i 22c" in DOS + * DEBUG.EXE. FIXME: At what clock rate and duty cycle does this happen? */ + Pint = secprop->Add_int("dsp busy cycle rate",Property::Changeable::WhenIdle,-1/*default*/); + Pint->Set_help("Sound Blaster 16 DSP chips appear to go busy periodically at some high clock rate\n" + "whether the DSP is actually doing anything for the system or not. This is an accuracy\n" + "option for Sound Blaster emulation. If this option is nonzero, it will be interpreted\n" + "as the busy cycle rate in Hz. If zero, busy cycle will not be emulated. If -1, sound\n" + "blaster emulation will automatically choose a setting based on the sbtype= setting"); + + Pint = secprop->Add_int("dsp busy cycle always",Property::Changeable::WhenIdle,-1/*default*/); + Pint->Set_help("If set, the DSP busy cycle always happens. If clear, DSP busy cycle only happens when\n" + "audio playback is running. Default setting is to pick according to the sound card."); + + Pint = secprop->Add_int("dsp busy cycle duty",Property::Changeable::WhenIdle,-1/*default*/); + Pint->Set_help("If emulating SB16 busy cycle, this value (0 to 100) controls the duty cycle of the busy cycle.\n" + "If this option is set to -1, Sound Blaster emulation will choose a value automatically according\n" + "to sbtype=. If 0, busy cycle emulation is disabled."); + + /* NTS: Confirmed: My Sound Blaster 2.0 (at least) mirrors the DSP on port 22Ch and 22Dh. This option + * will only take effect with sbtype sb1 and sb2, so make it enabled by default. Accuracy setting. */ + Pbool = secprop->Add_bool("io port aliasing",Property::Changeable::WhenIdle,true); + Pbool->Set_help("If set, Sound Blaster ports alias by not decoding the LSB of the I/O port.\n" + "This option only applies when sbtype is set to sb1 or sb2 (not SBPro or SB16).\n" + "This is a hack for the Electromotive Force 'Internal Damage' demo which apparently\n" + "relies on this behavior for Sound Blaster output and should be enabled for accuracy in emulation."); + } + } secprop=control->AddSection_prop("gus",&Null_Init,true); //done Pbool = secprop->Add_bool("gus",Property::Changeable::WhenIdle,false); @@ -3961,7 +4111,7 @@ void DOSBOX_SetupConfigSections(void) { "Note: DOSBox-X defaults to 'false', while mainline DOSBox SVN is currently hardcoded to render as if this setting is 'true'."); Pint = secprop->Add_int("gusmemsize",Property::Changeable::WhenIdle,-1); - Pint->SetMinMax(-1,1024); + Pint->SetMinMax(-1,8192); Pint->Set_help("Amount of RAM on the Gravis Ultrasound in KB. Set to -1 for default."); Pint->SetBasic(true); @@ -4469,6 +4619,13 @@ void DOSBOX_SetupConfigSections(void) { "This can help with any program with startup code that assumes the segment wraparound of the 8086.\n" "Depending on DOS configuration the A20 gate may be re-enabled later such as calling INT 21h."); + Pbool = secprop->Add_bool("break on int3",Property::Changeable::WhenIdle,false); + Pbool->Set_help("If set, a breakpoint on INT 3 is automatically set up at startup"); + Pbool->SetBasic(true); + + Pbool = secprop->Add_bool("xms log memmove",Property::Changeable::WhenIdle,false); + Pbool->Set_help("If set, XMS move/copy operations are logged for debugging purposes."); + Pbool = secprop->Add_bool("xms memmove causes flat real mode",Property::Changeable::WhenIdle,true); Pbool->Set_help("If set, any call to XMS to move/copy memory sets up flat real mode for segment registers DS and ES."); @@ -4490,6 +4647,14 @@ void DOSBOX_SetupConfigSections(void) { "Compatibility with DOSBox SVN can be improved by enabling this option."); Pbool->SetBasic(true); + Pstring = secprop->Add_string("exepack",Property::Changeable::WhenIdle,"unpack"); + Pstring->Set_values(exepackopts); + Pstring->Set_help("If loading an EXE file compressed using ExEPACK, what to do.\n" + "This setting can help avoid Packed File is Corrupt errors when running such executables.\n" + "none = don't do anything\n" + "a20off = switch off the A20 gate before running the executable\n" + "unpack = decompress the EXE and then run it, rather than run the EXEPACK code (default)."); + Pstring = secprop->Add_string("badcommandhandler",Property::Changeable::WhenIdle,""); Pstring->Set_help("Allow to specify a custom error handler command for the internal DOS shell before the \"Bad command or file name\" message shows up."); @@ -4597,6 +4762,13 @@ void DOSBOX_SetupConfigSections(void) { "Set either \"ipx=true\" in [ipx] section or \"ne2000=true\" in [ne2000] section for a full network redirector environment."); Pbool->SetBasic(true); + Pbool = secprop->Add_bool("mcb corruption becomes application free memory",Property::Changeable::WhenIdle,false); + Pbool->Set_help("If MCB chain corruption occurs following the DOS program PSP segment and the DOS program does anything to cause memory allocation," + "make a new free memory block in it's place instead of halting emulation with an MCB chain error. Some DOS programs are sloppy" + "with memory to corrupt the MCB chain after itself in memory. This is apparently real MS-DOS behavior, set to true to enable." + "If set to false, all MCB chain corruption will halt emulation as DOSBox forks typically do already."); + Pbool->SetBasic(true); + Phex = secprop->Add_hex("minimum dos initial private segment", Property::Changeable::WhenIdle,0); Phex->Set_help("In non-mainline mapping mode, where DOS structures are allocated from base memory, this sets the\n" "minimum segment value. Recommended value is 0x70. You may reduce the value down to 0x50 if freeing\n" @@ -4879,6 +5051,9 @@ void DOSBOX_SetupConfigSections(void) { Pbool = secprop->Add_bool("int 13 extensions",Property::Changeable::WhenIdle,true); Pbool->Set_help("Enable INT 13h extensions (functions 0x40-0x48). You will need this enabled if the virtual hard drive image is 8.4GB or larger."); + Pbool = secprop->Add_bool("int 13 enable 48-bit LBA", Property::Changeable::WhenIdle, true); + Pbool->Set_help("Enable 48-bit LBA support for INT 13h extensions. Needed for drives larger than 28-bit LBA limit (128GiB)."); + Pbool = secprop->Add_bool("biosps2",Property::Changeable::OnlyAtStart,true); Pbool->Set_help("Emulate BIOS INT 15h PS/2 mouse services\n" "Note that some OS's like Microsoft Windows neither use INT 33h nor\n" @@ -5259,9 +5434,14 @@ void DOSBOX_SetupConfigSections(void) { Pstring->Set_help("The maximum drive letter (A-Z) that can be accessed by programs."); Pstring->Set_values(driveletters); Pstring->SetBasic(true); + Pbool = secprop->Add_bool("device driver mcb",Property::Changeable::OnlyAtStart,false); + Pbool->Set_help("If set, allocate a memory block per device driver. If not set, then where possible, the device driver chain is packed together within the DOS kernel without any MCB blocks to cover them, which is normal MS-DOS behavior"); + Pbool->SetBasic(false); - //TODO ? control->AddSection_line("autoexec",&Null_Init); + + control->AddSection_line("devices",&Null_Init); + AddMessages(); } diff --git a/src/fpu/fpu_instructions.h b/src/fpu/fpu_instructions.h index eb480dacc7e..2921f32cadc 100644 --- a/src/fpu/fpu_instructions.h +++ b/src/fpu/fpu_instructions.h @@ -18,6 +18,24 @@ #include /* for isinf, etc */ #include "cpu/lazyflags.h" + +// Helper functions for 64-bit memory access +static inline uint64_t mem_readq(PhysPt addr) { + uint64_t tmp; + tmp = (uint64_t)mem_readd(addr); + tmp |= (uint64_t)mem_readd(addr+4ul) << (uint64_t)32ul; + return tmp; +} + +static inline void mem_writeq(PhysPt addr,uint64_t v) { + mem_writed(addr, (uint32_t)v); + mem_writed(addr+4ul,(uint32_t)(v >> (uint64_t)32ul)); +} + +// Local "shadow" register file to store bit-perfect 64-bit integers. +// Declared static to keep the change local to this file. +static FPU_Reg fpu_regs_memcpy[9]; + static void FPU_FINIT(void) { unsigned int i; @@ -33,6 +51,10 @@ static void FPU_FINIT(void) { fpu.tags[7] = TAG_Empty; fpu.tags[8] = TAG_Valid; // is only used by us (FIXME: why?) for (i=0;i < 9;i++) fpu.use80[i] = false; + + for (i = 0; i < 9; i++) { + fpu_regs_memcpy[i].ll = 0; + } } static void FPU_FCLEX(void){ @@ -193,16 +215,11 @@ static void FPU_FLD_I32(PhysPt addr,Bitu store_to) { } static void FPU_FLD_I64(PhysPt addr,Bitu store_to) { - FPU_Reg blah; - blah.l.lower = mem_readd(addr); - blah.l.upper = (int32_t)mem_readd(addr+4); - fpu.regs[store_to].d = static_cast(blah.ll); - // store the signed 64-bit integer in the 80-bit format mantissa with faked exponent. - // this is needed for DOS and Windows games that use the Pentium fast memcpy trick, using FLD/FST to copy 64 bits at a time. - // I wonder if that trick is what helped spur Intel to make the MMX extensions :) - fpu.regs_80[store_to].raw.l = (uint64_t)blah.ll; - fpu.regs_80[store_to].raw.h = ((blah.ll/*sign bit*/ >> (uint64_t)63) ? 0x8000u : 0x0000u) + FPU_Reg_80_exponent_bias + 63u; // FIXME: Verify this is correct! - fpu.use80[store_to] = true; + const int64_t val = mem_readq(addr); + + fpu.regs[store_to].d = static_cast(val); + fpu_regs_memcpy[store_to].ll = val; + fpu.use80[store_to] = false; } static void FPU_FBLD(PhysPt addr,Bitu store_to) { @@ -272,21 +289,16 @@ static void FPU_FST_I32(PhysPt addr) { } static void FPU_FST_I64(PhysPt addr) { - FPU_Reg blah; - if (fpu.use80[TOP] && (fpu.regs_80[TOP].raw.h & 0x7FFFu) == (0x0000u + FPU_Reg_80_exponent_bias + 63u)) { - // FIXME: This works so far for DOS demos that use the "Pentium memcpy trick" to copy 64 bits at a time. - // What this code needs to do is take the exponent into account and then clamp the 64-bit int within range. - // This cheap hack is good enough for now. - mem_writed(addr,(uint32_t)(fpu.regs_80[TOP].raw.l)); - mem_writed(addr+4,(uint32_t)(fpu.regs_80[TOP].raw.l >> (uint64_t)32)); - } - else { - double val = FROUND(fpu.regs[TOP].d); - blah.ll = (val < 9223372036854775808.0 && val >= -9223372036854775808.0)?static_cast(val):LONGTYPE(0x8000000000000000); - - mem_writed(addr,(uint32_t)blah.l.lower); - mem_writed(addr+4,(uint32_t)blah.l.upper); + auto val_i = fpu_regs_memcpy[TOP].ll; + const auto val_d = fpu.regs[TOP].d; + + if (val_d != static_cast(val_i)) { + const auto rounded = FROUND(val_d); + val_i = (rounded < 9223372036854775808.0 && rounded >= -9223372036854775808.0) + ? static_cast(rounded) + : 0x8000000000000000LL; } + mem_writeq(addr, val_i); } // WARNING: UNTESTED. Original contributed code only focused on the x86 FPU case. @@ -460,17 +472,20 @@ static void FPU_FXCH(Bitu st, Bitu other){ FPU_Reg_80 reg80 = fpu.regs_80[other]; FPU_Tag tag = fpu.tags[other]; FPU_Reg reg = fpu.regs[other]; + auto reg_memcpy = fpu_regs_memcpy[other]; bool use80 = fpu.use80[other]; fpu.regs_80[other] = fpu.regs_80[st]; fpu.use80[other] = fpu.use80[st]; fpu.tags[other] = fpu.tags[st]; fpu.regs[other] = fpu.regs[st]; + fpu_regs_memcpy[other] = fpu_regs_memcpy[st]; fpu.regs_80[st] = reg80; fpu.use80[st] = use80; fpu.tags[st] = tag; fpu.regs[st] = reg; + fpu_regs_memcpy[st] = reg_memcpy; } static void FPU_FST(Bitu st, Bitu other){ @@ -478,6 +493,7 @@ static void FPU_FST(Bitu st, Bitu other){ fpu.use80[other] = fpu.use80[st]; fpu.tags[other] = fpu.tags[st]; fpu.regs[other] = fpu.regs[st]; + fpu_regs_memcpy[other] = fpu_regs_memcpy[st]; } static inline void FPU_FCMOV(Bitu st, Bitu other){ diff --git a/src/gui/menu.cpp b/src/gui/menu.cpp index 7a734a3a700..b41aa72b03d 100644 --- a/src/gui/menu.cpp +++ b/src/gui/menu.cpp @@ -108,8 +108,6 @@ extern "C" void (*SDL1_hax_INITMENU_cb)(); extern bool showdbcs, loadlang; extern bool isDBCSCP(), InitCodePage(); -extern uint8_t int10_font_14[256 * 14]; -extern uint8_t int10_font_16[256 * 16]; extern bool font_14_init, font_16_init; uint8_t *GetDbcsFont(Bitu code); bool Direct3D_using(void); @@ -124,7 +122,9 @@ static const char *def_menu__toplevel[] = "VideoMenu", "SoundMenu", "DOSMenu", +#if !defined(OSFREE) "DriveMenu", +#endif #if !defined(C_EMSCRIPTEN) "CaptureMenu", #endif @@ -142,7 +142,9 @@ static const char *def_menu_main[] = "mapper_mapper", #if !defined(HX_DOS) "--", +# if !defined(OSFREE) "mapper_quickrun", +# endif "loadlang", "mapper_loadmap", #endif @@ -151,6 +153,9 @@ static const char *def_menu_main[] = "MainHostKey", "SharedClipboard", "--", +#if defined(C_SDL2) + "mapper_capkeyboard", +#endif "mapper_capmouse", "auto_lock_mouse", "WheelToArrow", @@ -385,6 +390,9 @@ static const char *def_menu_video_output[] = "output_surface", #if (HAVE_D3D9_H) && defined(WIN32) && !defined(HX_DOS) "output_direct3d", +#if defined(C_SDL2) + "output_direct3d11", +#endif #endif #if defined(C_OPENGL) && !defined(HX_DOS) "output_opengl", @@ -397,10 +405,15 @@ static const char *def_menu_video_output[] = #if C_GAMELINK "output_gamelink", #endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + "output_metal", +#endif "--", "doublescan", #if !defined(C_SDL2) "doublebuf", +#else + "modeswitch", #endif NULL }; @@ -576,20 +589,26 @@ static const char *def_menu_video[] = /* DOS menu ("DOSMenu") */ static const char *def_menu_dos[] = { +#if !defined(OSFREE) "DOSVerMenu", "DOSLFNMenu", -#if defined(WIN32) && !defined(HX_DOS) || defined(LINUX) || defined(MACOSX) +# if defined(WIN32) && !defined(HX_DOS) || defined(LINUX) || defined(MACOSX) "DOSWinMenu", -#endif +# endif "--", +#endif "DOSMouseMenu", +#if !defined(OSFREE) "DOSEMSMenu", +#endif "DOSDiskRateMenu", "--", "enable_a20gate", "quick_reboot", "sync_host_datetime", +#if !defined(OSFREE) "shell_config_commands", +#endif "--", "mapper_swapimg", "mapper_swapcd", @@ -826,7 +845,9 @@ static const char* def_menu_debug[] = "--", "debug_blankrefreshtest", "debug_generatenmi", +#if !defined(OSFREE) "debug_int2fhook", +#endif "debug_pageflip", "debug_retracepoll", "--", @@ -840,9 +861,11 @@ static const char* def_menu_debug[] = "wait_on_error", "--", "video_debug_overlay", +#if !defined(OSFREE) "--", "debug_logint21", "debug_logfileio", +#endif NULL }; #elif !defined(MACOSX) && !defined(LINUX) && !defined(HX_DOS) && !defined(C_EMSCRIPTEN) @@ -867,7 +890,9 @@ static const char *def_menu_help[] = "help_wiki", "help_issue", #endif +#if !defined(OSFREE) "--", +#endif #if C_PCAP "help_nic", #endif @@ -877,10 +902,12 @@ static const char *def_menu_help[] = #if !C_DEBUG && !defined(MACOSX) && !defined(LINUX) && !defined(HX_DOS) && !defined(C_EMSCRIPTEN) "HelpDebugMenu", #endif -#if C_PCAP || C_PRINTER && defined(WIN32) || !C_DEBUG && !defined(MACOSX) && !defined(LINUX) && !defined(HX_DOS) && !defined(C_EMSCRIPTEN) +#if !defined(OSFREE) +# if C_PCAP || C_PRINTER && defined(WIN32) || !C_DEBUG && !defined(MACOSX) && !defined(LINUX) && !defined(HX_DOS) && !defined(C_EMSCRIPTEN) "--", -#endif +# endif "HelpCommandMenu", +#endif NULL }; @@ -1868,6 +1895,9 @@ void SDL1_hax_SetMenu(HMENU menu) { extern "C" void SDL1_hax_SetMenu(HMENU menu); #endif +/** + * NOTE: this function can make a SDL_Surface become invalid (e.g. mapper, Windows) + */ void DOSBox_SetMenu(DOSBoxMenu &altMenu) { #if DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW /* nothing to do */ @@ -2398,7 +2428,9 @@ void MENU_Check_Drive(HMENU handle, int cdrom, int floppy, int local, int image, EnableMenuItem(handle, floppy, (Drives[drive - 'A'] || menu.boot) ? MF_GRAYED : MF_ENABLED); EnableMenuItem(handle, local, (Drives[drive - 'A'] || menu.boot) ? MF_GRAYED : MF_ENABLED); EnableMenuItem(handle, image, (Drives[drive - 'A'] || menu.boot) ? MF_GRAYED : MF_ENABLED); + #if !defined(OSFREE) if(sec) EnableMenuItem(handle, automount, AUTOMOUNT(full_drive.c_str(), drive) && !menu.boot && sec->Get_bool("automount") ? MF_ENABLED : MF_GRAYED); + #endif EnableMenuItem(handle, umount, (!Drives[drive - 'A']) || menu.boot ? MF_GRAYED : MF_ENABLED); #endif } diff --git a/src/gui/menu_callback.cpp b/src/gui/menu_callback.cpp index 73c9fce0a69..7caf67a0508 100644 --- a/src/gui/menu_callback.cpp +++ b/src/gui/menu_callback.cpp @@ -41,6 +41,12 @@ # include "windows.h" # include "Shellapi.h" #endif +#if defined(OS2) +#define INCL_DOSPROCESS +#define INCL_DOSERRORS +#define INCL_WIN +#include +#endif #ifdef MACOSX #include #endif @@ -67,7 +73,9 @@ void SendKey(std::string key); void MAPPER_ReleaseAllKeys(void); void RENDER_Reset(void); void resetFontSize(void); +#if !defined(OSFREE) void EMS_DoShutDown(void); +#endif void DOSV_FillScreen(void); void CopyClipboard(int all); void res_init(void), change_output(int output); @@ -97,6 +105,7 @@ size_t GetGameState_Run(void); void DBCSSBCS_mapper_shortcut(bool pressed); void AutoBoxDraw_mapper_shortcut(bool pressed); extern std::string langname, GetDOSBoxXPath(bool withexe=false); +std::string formatString(const char* format, ...); void* GetSetSDLValue(int isget, std::string& target, void* setval) { if (target == "wait_on_error") { @@ -223,6 +232,7 @@ bool drive_mountauto_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * co (void)menu;//UNUSED (void)menuitem;//UNUSED +#if !defined(OSFREE) /* menu item has name "drive_A_" ... */ int drive; const char *mname = menuitem->get_name().c_str(); @@ -239,6 +249,7 @@ bool drive_mountauto_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * co char root[4]="A:\\"; root[0]=drive+'A'; MenuMountDrive(drive+'A', root); +#endif return true; } @@ -467,7 +478,7 @@ bool drive_saveimg_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * cons return false; if (drive < 0 || drive>=DOS_DRIVES) return false; if (!Drives[drive] || dynamic_cast(Drives[drive])) { - systemmessagebox("Error", "Drive does not exist or is mounted from disk image.", "ok","error", 1); + systemmessagebox(MSG_Get("ERROR"), MSG_Get("MENU_DRIVE_NOTEXIST"), "ok","error", 1); return false; } @@ -486,7 +497,7 @@ bool drive_saveimg_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * cons for (int i=0; iffdd && imageDiskList[i]->drvnum == drive) { - if (!saveDiskImage(imageDiskList[i], lTheSaveFileName)) systemmessagebox("Error", "Failed to save disk image.", "ok","error", 1); + if (!saveDiskImage(imageDiskList[i], lTheSaveFileName)) systemmessagebox(MSG_Get("ERROR"), MSG_Get("MENU_SAVE_IMAGE_FAILED"), "ok","error", 1); chdir(Temp_CurrentDir); return true; } @@ -494,7 +505,7 @@ bool drive_saveimg_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * cons Section_prop *sec = static_cast(control->GetSection("dosbox")); uint32_t freeMB = sec->Get_int("convert fat free space"), timeout = sec->Get_int("convert fat timeout"); imageDisk *imagedrv = new imageDisk(Drives[drive], drive, freeMB, timeout); - if (!saveDiskImage(imagedrv, lTheSaveFileName)) systemmessagebox("Error", "Failed to save disk image.", "ok","error", 1); + if (!saveDiskImage(imagedrv, lTheSaveFileName)) systemmessagebox(MSG_Get("ERROR"), MSG_Get("MENU_SAVE_IMAGE_FAILED"), "ok","error", 1); if (imagedrv) delete imagedrv; if(chdir(Temp_CurrentDir) == -1) { @@ -689,6 +700,7 @@ bool change_currentcd_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * c } bool change_currentfd_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * const menuitem) { +#if !defined(OSFREE) (void)menu;//UNUSED (void)menuitem;//UNUSED int num=0; @@ -703,11 +715,12 @@ bool change_currentfd_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * c } else if (imageDiskList[idrive]) MenuBrowseFDImage('A'+idrive, ++num, -1); } -#if !defined(HX_DOS) +# if !defined(HX_DOS) if (!num) tinyfd_messageBox("Error","No floppy drive is currently available.","ok","error", 1); -#endif +# endif MAPPER_ReleaseAllKeys(); GFX_LosingFocus(); +#endif return true; } @@ -833,9 +846,11 @@ bool dos_ems_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * const menu if (tmp.size()) { Section_prop * dos_section = static_cast(control->GetSection("dos")); dos_section->HandleInputline(tmp.c_str()); +#if !defined(OSFREE) EMS_DoShutDown(); void EMS_Startup(Section* sec); EMS_Startup(NULL); +#endif update_dos_ems_menu(); } return true; @@ -1644,7 +1659,7 @@ bool ttf_halfwidth_katakana_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * (void)menu;//UNUSED (void)menuitem;//UNUSED if (!isDBCSCP()||dos.loaded_codepage!=932) { - systemmessagebox("Warning", "This function is only available for the Japanese code page (932).", "ok","warning", 1); + systemmessagebox("Warning", MSG_Get("MENU_JP_CPONLY"), "ok","warning", 1); return true; } halfwidthkana=!halfwidthkana; @@ -1659,7 +1674,7 @@ bool ttf_extend_charset_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * cons (void)menu;//UNUSED (void)menuitem;//UNUSED if (!isDBCSCP()||(dos.loaded_codepage!=936&&dos.loaded_codepage!=950&&dos.loaded_codepage!=951)) { - systemmessagebox("Warning", "This function is only available for the Chinese code pages (936 or 950).", "ok","warning", 1); + systemmessagebox("Warning", MSG_Get("MENU_CH_CPONLY"), "ok","warning", 1); return true; } if (dos.loaded_codepage==936) { @@ -1857,7 +1872,7 @@ void Load_language_file() { struct stat st; std::string res_path, exepath = GetDOSBoxXPath(); std::string cwd = std::string(Temp_CurrentDir)+CROSS_FILESPLIT+"languages"+CROSS_FILESPLIT; - Cross::GetPlatformResDir(res_path); + res_path = Cross::GetPlatformResDir(); if (stat(cwd.c_str(),&st) != 0 && exepath.size()) cwd = exepath+(exepath.back()==CROSS_FILESPLIT?"":std::string(1, CROSS_FILESPLIT))+"languages"+CROSS_FILESPLIT; if (stat(cwd.c_str(),&st) != 0 && res_path.size()) @@ -1926,6 +1941,10 @@ bool voodoo_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * const menui } bool glide_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * const menuitem) { +#if defined(OSFREE) + (void)menu; + (void)menuitem; +#else (void)menu;//UNUSED (void)menuitem;//UNUSED Section_prop *section = static_cast(control->GetSection("voodoo")); @@ -1938,9 +1957,10 @@ bool glide_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * const menuit if (addovl) VFILE_RegisterBuiltinFileBlob(bfb_GLIDE2X_OVL, "/SYSTEM/"); else { VFILE_Remove("GLIDE2X.OVL","SYSTEM"); - if (!glideon) systemmessagebox("Warning", "Glide passthrough cannot be enabled. Check the Glide wrapper installation.", "ok","warning", 1); + if (!glideon) systemmessagebox("Warning", MSG_Get("MENU_GLIDE_ERROR"), "ok","warning", 1); } mainMenu.get_item("3dfx_glide").check(addovl).refresh_item(mainMenu); +#endif return true; } @@ -2159,7 +2179,7 @@ bool intensity_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * const me const char *mname = menuitem->get_name().c_str(); uint16_t oldax=reg_ax, oldbx=reg_bx; if (IS_PC98_ARCH||machine==MCH_CGA||(CurMode->mode>7&&CurMode->mode!=0x0019&&CurMode->mode!=0x0043&&CurMode->mode!=0x0054&&CurMode->mode!=0x0055&&CurMode->mode!=0x0064)) { - systemmessagebox("Warning", "High intensity is not supported for the current video mode.", "ok","warning", 1); + systemmessagebox("Warning", MSG_Get("MENU_HIGH_INTENSITY_ERROR"), "ok","warning", 1); return true; } if (!strcmp(mname, "text_background")) @@ -2299,6 +2319,13 @@ bool doublescan_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * const m return true; } +bool modeswitch_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * const menuitem) { + (void)menu;//UNUSED + (void)menuitem;//UNUSED + MENU_SetBool("render", "modeswitch"); + return true; +} + bool scaler_set_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * const menuitem) { (void)menu;//UNUSED @@ -2425,7 +2452,8 @@ bool save_logas_menu_callback(DOSBoxMenu * const menu,DOSBoxMenu::item * const m if (lTheSaveFileName==NULL) return false; #if C_DEBUG bool savetologfile(const char *name); - if (!savetologfile(lTheSaveFileName)) systemmessagebox("Warning", ("Cannot save to the file: "+std::string(lTheSaveFileName)).c_str(), "ok","warning", 1); + std::string str = formatString(MSG_Get("MENU_SAVE_FILE_ERROR"), lTheSaveFileName); + if (!savetologfile(lTheSaveFileName)) systemmessagebox("Warning", str.c_str(), "ok", "warning", 1); #endif if(chdir(Temp_CurrentDir) == -1) { LOG(LOG_GUI, LOG_ERROR)("save_logas_menu_callback failed to change directories."); @@ -2866,9 +2894,9 @@ bool int2fhook_menu_callback(DOSBoxMenu * const xmenu, DOSBoxMenu::item * const if (int2fdbg_hook_callback == 0) { void Int2fhook(); Int2fhook(); - systemmessagebox("Success", "The INT 2Fh hook has been successfully set.", "ok","info", 1); + systemmessagebox("Success", MSG_Get("MENU_INT2F_SUCCESS"), "ok","info", 1); } else - systemmessagebox("Warning", "The INT 2Fh hook was already set up.", "ok","warning", 1); + systemmessagebox("Warning", MSG_Get("MENU_INT2F_ALREADY_SET"), "ok","warning", 1); #endif return true; @@ -3015,6 +3043,64 @@ bool help_open_url_callback(DOSBoxMenu * const menu, DOSBoxMenu::item * const me if (url.size()) { #if defined(WIN32) ShellExecute(NULL, "open", url.c_str(), NULL, NULL, SW_SHOWNORMAL); +#elif defined(OS2) + char str[CCHMAXPATH]; + APIRET rc; + char path[CCHMAXPATH], params[100], parambuffer[500], *paramptr; + char userPath[CCHMAXPATH], sysPath[CCHMAXPATH]; + PRFPROFILE profile = { sizeof(userPath), (PSZ)userPath, sizeof(sysPath), (PSZ)sysPath }; + HINI os2Ini; + HAB hAnchor = WinQueryAnchorBlock(WinQueryActiveWindow(HWND_DESKTOP)); + RESULTCODES result = { 0 }; + PROGDETAILS details; + + // Initialize buffers + memset(path, 0, sizeof(path)); + memset(parambuffer, 0, sizeof(parambuffer)); + memset(params, 0, sizeof(params)); + + // We have to look in the OS/2 configuration for the default browser. + // First step: Find the configuration files + if (!PrfQueryProfile(hAnchor, &profile)) { + systemmessagebox(url.c_str(), "Could not query application handle", "ok", "error", 0); + return false; + } + + // Second step: Open the configuration files and read exe path and parameters + os2Ini = PrfOpenProfile(hAnchor, (PCSZ)userPath); + if (os2Ini == NULLHANDLE) { + systemmessagebox(url.c_str(), "Could not open user profile", "ok", "error", 0); + return false; + } + if (!PrfQueryProfileString(os2Ini, (PCSZ)"WPURLDEFAULTSETTINGS", (PCSZ)"DefaultBrowserExe", NULL, path, sizeof(path))) { + PrfCloseProfile(os2Ini); + systemmessagebox(url.c_str(), "Could not find URL settings", "ok", "error", 0); + return false; + } + + PrfQueryProfileString(os2Ini, (PCSZ)"WPURLDEFAULTSETTINGS", (PCSZ)"DefaultBrowserParameters", NULL, params, sizeof(params)); + PrfCloseProfile(os2Ini); + + // concat arguments + if (strlen(params) > 0) + strncat(params, " ", 20); + strncat(params, url.c_str(), url.length()); + + // Build parameter buffer + strcpy(parambuffer, "Browser"); + paramptr = ¶mbuffer[strlen(parambuffer)+1]; + // copy params to buffer + strcpy(paramptr, params); + paramptr += strlen(params) + 1; + // To be sure: Terminate parameter list with NULL + *paramptr = '\0'; + + // Last step: Execute detached browser + rc = DosExecPgm(userPath, sizeof(userPath), EXEC_ASYNC, (PSZ)parambuffer, NULL, &result, (PSZ)path); + if (rc != NO_ERROR) { + systemmessagebox(url.c_str(), "Could not open browser", "ok", "error", 0); + return false; + } #elif defined(LINUX) int ret = system(("xdg-open "+url).c_str()); return WIFEXITED(ret) && WEXITSTATUS(ret); @@ -3226,10 +3312,16 @@ void AllocCallback1() { DOSBoxMenu::item &item = mainMenu.alloc_item(DOSBoxMenu::submenu_type_id,"VideoOutputMenu"); item.set_text("Output"); - mainMenu.alloc_item(DOSBoxMenu::item_type_id,"output_surface").set_text("Surface"). + mainMenu.alloc_item(DOSBoxMenu::item_type_id,"output_surface").set_text("Software (Surface)"). set_callback_function(output_menu_callback); +#if C_DIRECT3D mainMenu.alloc_item(DOSBoxMenu::item_type_id,"output_direct3d").set_text("Direct3D"). set_callback_function(output_menu_callback); +#if defined(C_SDL2) + mainMenu.alloc_item(DOSBoxMenu::item_type_id, "output_direct3d11").set_text("Direct3D11(Experimental)"). + set_callback_function(output_menu_callback); +#endif +#endif mainMenu.alloc_item(DOSBoxMenu::item_type_id,"output_opengl").set_text("OpenGL"). set_callback_function(output_menu_callback); mainMenu.alloc_item(DOSBoxMenu::item_type_id,"output_openglnb").set_text("OpenGL nearest"). @@ -3243,9 +3335,17 @@ void AllocCallback1() { #if C_GAMELINK mainMenu.alloc_item(DOSBoxMenu::item_type_id,"output_gamelink").set_text("Game Link"). set_callback_function(output_menu_callback); +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + mainMenu.alloc_item(DOSBoxMenu::item_type_id, "output_metal").set_text("Metal(Experimental)"). + set_callback_function(output_menu_callback); #endif mainMenu.alloc_item(DOSBoxMenu::item_type_id,"doublescan").set_text("Doublescan"). set_callback_function(doublescan_menu_callback); +#if C_SDL2 + mainMenu.alloc_item(DOSBoxMenu::item_type_id,"modeswitch").set_text("Modeswitch"). + set_callback_function(modeswitch_menu_callback); +#endif } { DOSBoxMenu::item &item = mainMenu.alloc_item(DOSBoxMenu::submenu_type_id,"VideoVsyncMenu"); @@ -3410,7 +3510,7 @@ void AllocCallback1() { set_callback_function(mixer_info_menu_callback); mainMenu.alloc_item(DOSBoxMenu::item_type_id,"sb_info").set_text("Show Sound Blaster configuration"). set_callback_function(sb_device_menu_callback); - mainMenu.alloc_item(DOSBoxMenu::item_type_id,"midi_info").set_text("Show MIDI device configuration"). + mainMenu.alloc_item(DOSBoxMenu::item_type_id,"midi_info").set_text("Show MIDI/OPL device configuration"). set_callback_function(midi_device_menu_callback); } } diff --git a/src/gui/midi_mt32.h b/src/gui/midi_mt32.h index 86262c11f71..f0d4ac7aca6 100644 --- a/src/gui/midi_mt32.h +++ b/src/gui/midi_mt32.h @@ -257,9 +257,9 @@ class MidiHandler_mt32 : public MidiHandler { } if (!load_rom_set(romDir, model)) { - Cross::GetPlatformResDir(romDir); + romDir = Cross::GetPlatformResDir(); if (!load_rom_set(romDir, model)) { - Cross::GetPlatformConfigDir(romDir); + romDir = Cross::GetPlatformConfigDir(); if (!load_rom_set(romDir, model)) { delete service; service = NULL; @@ -267,7 +267,8 @@ class MidiHandler_mt32 : public MidiHandler { LOG_MSG("MT32 emulation requires the PCM and CONTROL ROM files."); LOG_MSG("To eliminate this error message, check the DOSBox-X wiki."); LOG_MSG("The ROM files are: CM32L_CONTROL.ROM and CM32L_PCM.ROM or MT32_CONTROL.ROM and MT32_PCM.ROM"); - return false; + sffile = "Not available"; + return false; } } } diff --git a/src/gui/midi_synth.h b/src/gui/midi_synth.h index 0a7c4a78e5c..5eea88632f6 100644 --- a/src/gui/midi_synth.h +++ b/src/gui/midi_synth.h @@ -420,17 +420,25 @@ class MidiHandler_fluidsynth : public MidiHandler { periodsize="64"; #endif } -#if !defined (FLUIDSYNTH_VERSION_MAJOR) || FLUIDSYNTH_VERSION_MAJOR >= 2 + int major = 0, minor = 0, micro = 0; + fluid_version(&major, &minor, µ); + #if !defined (FLUIDSYNTH_VERSION_MAJOR) + if(1) + #else + if (major >= 2) + #endif + { fluid_settings_setint(settings, "audio.periods", atoi(period.c_str())); fluid_settings_setint(settings, "audio.period-size", atoi(periodsize.c_str())); fluid_settings_setint(settings, "synth.reverb.active", !strcmp(section->Get_string("fluid.reverb"), "yes")?1:0); fluid_settings_setint(settings, "synth.chorus.active", !strcmp(section->Get_string("fluid.chorus"), "yes")?1:0); -#else + } + else { fluid_settings_setnum(settings, "audio.periods", atof(period.c_str())); fluid_settings_setnum(settings, "audio.period-size", atof(periodsize.c_str())); fluid_settings_setstr(settings, "synth.reverb.active", section->Get_string("fluid.reverb")); fluid_settings_setstr(settings, "synth.chorus.active", section->Get_string("fluid.chorus")); -#endif + } synth = new_fluid_synth(settings); if (!synth) { @@ -450,13 +458,13 @@ class MidiHandler_fluidsynth : public MidiHandler { fluid_synth_set_reverb(synth, atof(section->Get_string("fluid.reverb.roomsize")), atof(section->Get_string("fluid.reverb.damping")), atof(section->Get_string("fluid.reverb.width")), atof(section->Get_string("fluid.reverb.level"))); fluid_synth_set_chorus(synth, section->Get_int("fluid.chorus.number"), atof(section->Get_string("fluid.chorus.level")), atof(section->Get_string("fluid.chorus.speed")), atof(section->Get_string("fluid.chorus.depth")), section->Get_int("fluid.chorus.type")); - + LOG_MSG("MIDI:fluidsynth: version %d.%d.%d", major, minor, micro); /* Optionally load a soundfont */ if (!soundfont.empty()) { soundfont_id = fluid_synth_sfload(synth, soundfont.c_str(), 1); if (soundfont_id == FLUID_FAILED) { /* Just consider this a warning (fluidsynth already prints) */ - soundfont.clear(); + soundfont.clear(); soundfont_id = -1; } else { @@ -466,10 +474,11 @@ class MidiHandler_fluidsynth : public MidiHandler { } } else { - soundfont_id = -1; + soundfont_id = -1; LOG_MSG("MIDI:fluidsynth: No SoundFont loaded"); } - return true; + if(soundfont_id == -1) sffile = "Not available"; + return true; } void ListAll(Program* base) override { diff --git a/src/gui/midi_timidity.h b/src/gui/midi_timidity.h index e2b4b74fddd..ad125229909 100644 --- a/src/gui/midi_timidity.h +++ b/src/gui/midi_timidity.h @@ -14,13 +14,16 @@ * entirely and remove the #include and it would have no effect on * DOSBox-X. --J.C. */ -#ifdef C_SDL_NET +#if (defined(C_SDL_NET) && C_SDL_NET) || (defined(C_SDL2_NET) && C_SDL2_NET) //#ifdef C_TIMIDITY #include "logging.h" #include "SDL.h" +#if defined(C_SDL2_NET) && C_SDL2_NET +#include +#else #include "SDL_net.h" - +#endif #define SEQ_MIDIPUTC 5 #define TIMIDITY_LOW_DELAY diff --git a/src/gui/render.cpp b/src/gui/render.cpp index 0f1bc2b9174..62e32e3034e 100644 --- a/src/gui/render.cpp +++ b/src/gui/render.cpp @@ -53,6 +53,43 @@ #include extern bool video_debug_overlay; +bool useTraditionalRenderCache = false; + +unsigned char *scalerSourceCacheBuffer=NULL; +unsigned int scalerSourceCacheBufferSize=0; + +void scalerWriteCacheFree(void); +void scalerWriteCacheAlloc(unsigned int p); + +void Scaler_AspectChangedLinesFree(void); +void Scaler_AspectChangedLinesAlloc(unsigned int h); + +void scalerFrameCacheFree(void); +void scalerFrameCacheAlloc(unsigned int p,unsigned int w,unsigned int h); + +void scalerChangeCacheFree(void); +void scalerChangeCacheAlloc(unsigned int w,unsigned int h); + +void scalerSourceCacheBufferFree(void) { + LOG(LOG_MISC,LOG_DEBUG)("Freeing render cache buffer"); + if (scalerSourceCacheBuffer) free(scalerSourceCacheBuffer); + scalerSourceCacheBuffer=NULL; + scalerSourceCacheBufferSize=0; +} + +bool scalerSourceCacheBufferAlloc(unsigned int p,unsigned int h) { + if (scalerSourceCacheBuffer || p == 0 || h == 0 || p > 65536 || h > 8192) return false; + scalerSourceCacheBufferSize = p * (h + 16) + 4096; + + LOG(LOG_MISC,LOG_DEBUG)("Allocating render cache buffer %u",p*h); + if ((scalerSourceCacheBuffer=(unsigned char*)malloc(scalerSourceCacheBufferSize)) == NULL) { + LOG(LOG_MISC,LOG_DEBUG)("Allocating render cache failed"); + scalerSourceCacheBufferSize = 0; + return false; + } + + return true; +} Render_t render; int eurAscii = -1; @@ -253,6 +290,9 @@ static INLINE void cn_ScalerAddLines( Bitu changed, Bitu count ) { static void RENDER_DrawLine_countdown(const void * s); static void RENDER_DrawLine_countdown_wait(const void * s) { + if (render.disablerender) + return; + if (RENDER_DrawLine_scanline_cacheHit(s)) { // line has not changed render.scale.inLine++; render.scale.cacheRead += render.scale.cachePitch; @@ -266,13 +306,32 @@ static void RENDER_DrawLine_countdown_wait(const void * s) { } static void RENDER_DrawLine_countdown(const void * s) { + if (render.disablerender) + return; + render.scale.lineHandler(s); if (--RENDER_scaler_countdown == 0) RENDER_DrawLine = RENDER_DrawLine_countdown_wait; } #endif +static void RENDER_ScalerLineHandler(const void * s) { + if (render.scale.outLine < render.src.height) { + render.scale.lineHandler(s); + } + else { + LOG(LOG_MISC,LOG_WARN)("RENDER: Attempted to render too much (in=%u/out=%u/height=%u)", + (unsigned int)render.scale.inLine,(unsigned int)render.scale.outLine,(unsigned int)render.src.height); + RENDER_DrawLine = RENDER_EmptyLineHandler; + } +} + +void D3D11_DrawLine_8bpp(const void* src); + static void RENDER_StartLineHandler(const void * s) { + if (render.disablerender) + return; + if (RENDER_DrawLine_scanline_cacheHit(s)) { // line has not changed render.scale.cacheRead += render.scale.cachePitch; Scaler_ChangedLines[0] += Scaler_Aspect[ render.scale.inLine ]; @@ -289,13 +348,26 @@ static void RENDER_StartLineHandler(const void * s) { RENDER_scaler_countdown = RENDER_scaler_countdown_init; RENDER_DrawLine = RENDER_DrawLine_countdown; #else - RENDER_DrawLine = render.scale.lineHandler; + // apparently the render code is randomly drawing too many scanlines, so, + // to avoid crashes and buffer overruns, we're going to have to use a line + // handler that watches the scaler line handler and stops rendering automatically + // at the end of the render height. No more uncontrolled rendering and trusting + // VGA output not to write too much. + // + // Sorry, but I just wasted my entire Saturday trying to track down random + // OpenGL output crashes (buffer overruns and glibc "double free or corruption" + // runtime termination) and this was the only way I could stop it. --J.C. + //RENDER_DrawLine = render.scale.lineHandler; + RENDER_DrawLine = RENDER_ScalerLineHandler; #endif RENDER_DrawLine( s ); } } static void RENDER_FinishLineHandler(const void * s) { + if (render.disablerender) + return; + if (s) { const Bitu *src = (Bitu*)s; Bitu *cache = (Bitu*)(render.scale.cacheRead); @@ -309,6 +381,9 @@ static void RENDER_FinishLineHandler(const void * s) { static void RENDER_ClearCacheHandler(const void * src) { + if (render.disablerender) + return; + Bitu x, width; uint32_t *srcLine, *cacheLine; srcLine = (uint32_t *)src; @@ -322,10 +397,15 @@ static void RENDER_ClearCacheHandler(const void * src) { extern void GFX_SetTitle(int32_t cycles, int frameskip, Bits timing, bool paused); bool RENDER_StartUpdate(void) { + if (GCC_UNLIKELY(render.updating)) return false; if (GCC_UNLIKELY(!render.active)) return false; + if (GCC_UNLIKELY(render.disablerender)) + return false; + if (GCC_UNLIKELY(!scalerSourceCacheBuffer && !useTraditionalRenderCache)) + return false; if (GCC_UNLIKELY(render.frameskip.count= 3) + simpleBlock = &ScaleTV3xDw; + else + simpleBlock = &ScaleTV2xDw; + }else if(scalerOpRGB == render.scale.op){ + if (render.scale.size >= 3) + simpleBlock = &ScaleRGB3xDw; + else + simpleBlock = &ScaleRGB2xDw; + }else if(scalerOpScan == render.scale.op){ + if (render.scale.size >= 3) + simpleBlock = &ScaleScan3xDw; + else + simpleBlock = &ScaleScan2xDw; }else{ if (render.scale.forced && render.scale.size >= 2) simpleBlock = &ScaleNormal2xDw; @@ -641,10 +755,7 @@ void RENDER_Reset( void ) { } if (complexBlock) { #if RENDER_USE_ADVANCED_SCALERS>1 - if ((width >= SCALER_COMPLEXWIDTH - 16) || height >= SCALER_COMPLEXHEIGHT - 16) { - LOG_MSG("Scaler can't handle this resolution, going back to normal"); - goto forcenormal; - } + /* no restrictions */ #else goto forcenormal; #endif @@ -735,6 +846,8 @@ void RENDER_Reset( void ) { } width *= xscale; Bitu skip = complexBlock ? 1 : 0; + Scaler_AspectChangedLinesAlloc(render.src.height); + useTraditionalRenderCache = !!complexBlock; // the advanced scalers depend heavily on the traditional fixed cache/change buffers if (gfx_flags & GFX_SCALING) { if(render.scale.size == 1 && render.scale.hardware) { //hardware_none /* don't scale */ @@ -777,7 +890,14 @@ void RENDER_Reset( void ) { } else { // Print a warning when hardware scalers are selected, hopefully the first // video mode will not have dblh or dblw or AR will be wrong - if (render.scale.hardware) { + if (render.scale.hardware +#if C_DIRECT3D && C_SDL2 + && (sdl.desktop.type != SCREEN_DIRECT3D11) +#endif +#if defined(MACOSX) && C_SDL2 && C_METAL + && (sdl.desktop.type != SCREEN_METAL) +#endif + ) { LOG_MSG("Output does not support hardware scaling, switching to normal scalers"); render.scale.hardware=false; } @@ -789,6 +909,7 @@ void RENDER_Reset( void ) { height = MakeAspectTable( skip, render.src.height, (double)yscale, yscale); } } + /* update the aspect ratio */ sdl.srcAspect.x = aspect_ratio_x>0?aspect_ratio_x:(int)(render.src.width * (render.src.dblw ? 2 : 1)); sdl.srcAspect.y = aspect_ratio_y>0?aspect_ratio_y:(int)floor((render.src.height * (render.src.dblh ? 2 : 1) * render.src.ratio) + 0.5); @@ -815,7 +936,35 @@ void RENDER_Reset( void ) { else E_Exit("Failed to create a rendering output"); ScalerLineBlock_t *lineBlock; - if (gfx_flags & GFX_HARDWARE) { + + /* how many bytes will be needed in the write cache? + * if it's too much, do not use the L (linear) versions of the scalers because + * they use the write cache as a way to render to memory and then rapid copy to device memory. + * the only safe way to proceed here is to use the random versions which do not use the render cache. + * this is how it's going to stay until I figure out how to dynamically allocate the write cache. --J.C. */ + bool use_wcache = false; + unsigned int wcpitch; + + /* "width" was already multiplied by xscale */ + switch (render.scale.outMode) { + case scalerMode8: + wcpitch = width * 1; + break; + case scalerMode15: + case scalerMode16: + wcpitch = width * 2; + break; + case scalerMode32: + wcpitch = width * 4; + break; + default: + abort(); + }; + + /* Allow command line option to force scaler choice as if GFX_HARDWARE were set, in order to properly test scaler code */ + if ((gfx_flags & GFX_HARDWARE) || control->opt_force_gfx_hardware) { + LOG(LOG_MISC,LOG_DEBUG)("Using L versions of scalers that use write cache (and GFX_HARDWARE)"); + use_wcache = true; #if RENDER_USE_ADVANCED_SCALERS>1 if (complexBlock) { lineBlock = &ScalerCache; @@ -827,6 +976,7 @@ void RENDER_Reset( void ) { lineBlock = &simpleBlock->Linear; } } else { + LOG(LOG_MISC,LOG_DEBUG)("Using R versions of scalers that do not use write cache"); #if RENDER_USE_ADVANCED_SCALERS>1 if (complexBlock) { lineBlock = &ScalerCache; @@ -872,6 +1022,37 @@ void RENDER_Reset( void ) { break; //E_Exit("RENDER:Wrong source bpp %d", render.src.bpp ); } + + scalerSourceCacheBufferAlloc(render.scale.cachePitch,render.src.height); + + /* only allocate frame cache if using a complex scaler. + * the way the advanced scalers are coded, the pitch MUST be sizeof(PTYPE)*SCALER_COMPLEXWIDTH or else the code will misrender! + * Also allocate the change cache. */ + if (render.scale.complexHandler) { + /* outPitch == 0 at this point. we don't get the value until GFX_StartUpdate(). + * use outMode to compute what the advanced scalers render to, not what the video buffer is doing. */ + switch (render.scale.outMode) { + case scalerMode8: + render.scale.frameCachePitch = render.src.width * 1; + break; + case scalerMode15: + case scalerMode16: + render.scale.frameCachePitch = render.src.width * 2; + break; + case scalerMode32: + render.scale.frameCachePitch = render.src.width * 4; + break; + default: + abort(); + }; + + scalerFrameCacheAlloc(render.scale.frameCachePitch,render.src.width,render.src.height); + scalerChangeCacheAlloc(render.src.width,render.src.height); + } + + TempLineAlloc(render.src.width); // vga_draw.cpp make the scan line larger or smaller to match. that code also previously used scaler max width + if (use_wcache) scalerWriteCacheAlloc(wcpitch); + render.scale.blocks = render.src.width / SCALER_BLOCKSIZE; render.scale.lastBlock = render.src.width % SCALER_BLOCKSIZE; render.scale.inHeight = render.src.height; @@ -880,8 +1061,9 @@ void RENDER_Reset( void ) { render.pal.last = 255; render.pal.changed = false; memset(render.pal.modified, 0, sizeof(render.pal.modified)); - //Finish this frame using a copy only handler - RENDER_DrawLine = RENDER_FinishLineHandler; + //Finish this frame using an empty handler because the render pointers are now invalid due to cache buffer reallocation + if (!render.disablerender) RENDER_DrawLine = RENDER_EmptyLineHandler; + vga.draw.must_complete_frame = true; render.scale.outWrite = nullptr; /* Signal the next frame to first reinit the cache */ render.scale.clearCache = true; @@ -922,7 +1104,7 @@ void RENDER_CallBack( GFX_CallBackFunctions_t function ) { void RENDER_SetSize(Bitu width,Bitu height,Bitu bpp,float fps,double scrn_ratio) { RENDER_Halt( ); - if (!width || !height || width > SCALER_MAXWIDTH || height > SCALER_MAXHEIGHT) { + if (!width || !height) { LOG(LOG_MISC,LOG_WARN)("RENDER_SetSize() rejected video mode %u x %u",(unsigned int)width,(unsigned int)height); return; } @@ -1013,6 +1195,9 @@ void RENDER_SetSize(Bitu width,Bitu height,Bitu bpp,float fps,double scrn_ratio) width += 8*32; width += 4; } + else if (machine == MCH_TANDY || machine == MCH_PCJR) { + height += 8*3; + } else { height += 8*2; } @@ -1168,6 +1353,7 @@ void RENDER_OnSectionPropChange(Section *x) { bool p_doublescan = vga.draw.doublescan_set; bool p_char9 = vga.draw.char9_set; + bool p_modeswitch = vga.draw.modeswitch_set; int p_aspect = render.aspect; std::string s_aspect = section->Get_string("aspect"); @@ -1182,16 +1368,26 @@ void RENDER_OnSectionPropChange(Section *x) { vga.draw.doublescan_set=section->Get_bool("doublescan"); vga.draw.char9_set=section->Get_bool("char9"); + +#if C_SDL2 + vga.draw.modeswitch_set=section->Get_bool("modeswitch"); +#endif - if (render.aspect != p_aspect || vga.draw.doublescan_set != p_doublescan || vga.draw.char9_set != p_char9) + if (render.aspect != p_aspect || vga.draw.doublescan_set != p_doublescan || \ + vga.draw.char9_set != p_char9 || vga.draw.modeswitch_set != p_modeswitch) RENDER_CallBack(GFX_CallBackReset); - if (vga.draw.doublescan_set != p_doublescan || vga.draw.char9_set != p_char9) + if (vga.draw.doublescan_set != p_doublescan || vga.draw.char9_set != p_char9 || \ + vga.draw.modeswitch_set != p_modeswitch) VGA_StartResize(); mainMenu.get_item("vga_9widetext").check(vga.draw.char9_set).refresh_item(mainMenu); mainMenu.get_item("doublescan").check(vga.draw.doublescan_set).refresh_item(mainMenu); mainMenu.get_item("mapper_aspratio").check(render.aspect).refresh_item(mainMenu); +#if C_SDL2 + mainMenu.get_item("modeswitch").check(vga.draw.modeswitch_set).refresh_item(mainMenu); +#endif + #if C_XBRZ xBRZ_Change_Options(section); #endif @@ -1203,6 +1399,31 @@ void RENDER_OnSectionPropChange(Section *x) { extern const char *scaler_menu_opts[][2]; +bool RENDER_IsScalerCompatibleWithDoublescan(void) { + switch (render.scale.op) { + case scalerOpAdvMame: + case scalerOpAdvInterp: + case scalerOpHQ: + case scalerOpSaI: + case scalerOpSuperSaI: + case scalerOpSuperEagle: + return false; + default: +#if C_XBRZ + if (sdl_xbrz.enable) return false; +#endif +#if C_DIRECT3D && C_SDL2 + if(sdl.desktop.type == SCREEN_DIRECT3D11) return false; +#endif +#if defined(MACOSX) && C_SDL2 && C_METAL + if(sdl.desktop.type == SCREEN_METAL) return false; +#endif + break; + }; + + return true; +} + void RENDER_UpdateScalerMenu(void) { const std::string scaler = RENDER_GetScaler(); @@ -1213,6 +1434,9 @@ void RENDER_UpdateScalerMenu(void) { } } +extern bool vga_render_wait_for_changes; +bool hardware_scaler_selected = false; + void RENDER_UpdateFromScalerSetting(void) { Section_prop * section=static_cast(control->GetSection("render")); Prop_multival* prop = section->Get_multival("scaler"); @@ -1224,6 +1448,7 @@ void RENDER_UpdateFromScalerSetting(void) { sdl_xbrz.enable = false; #endif + bool p_dscompat = RENDER_IsScalerCompatibleWithDoublescan(); bool p_forced = render.scale.forced; unsigned int p_size = (unsigned int)(render.scale.size); bool p_hardware = render.scale.hardware; @@ -1260,17 +1485,16 @@ void RENDER_UpdateFromScalerSetting(void) { else if (scaler == "gray"){ render.scale.op = scalerOpGray; render.scale.size = 1; render.scale.hardware=false; } else if (scaler == "gray2x"){ render.scale.op = scalerOpGray; render.scale.size = 2; render.scale.hardware=false; } #endif - else if (scaler == "hardware_none") { render.scale.op = scalerOpNormal; render.scale.size = 1; render.scale.hardware=true; } - else if (scaler == "hardware2x") { render.scale.op = scalerOpNormal; render.scale.size = 2; render.scale.hardware=true; } - else if (scaler == "hardware3x") { render.scale.op = scalerOpNormal; render.scale.size = 3; render.scale.hardware=true; } - else if (scaler == "hardware4x") { render.scale.op = scalerOpNormal; render.scale.size = 4; render.scale.hardware=true; } - else if (scaler == "hardware5x") { render.scale.op = scalerOpNormal; render.scale.size = 5; render.scale.hardware=true; } + else if (scaler == "hardware_none") { render.scale.op = scalerOpNormal; render.scale.size = 1; render.scale.hardware=true; hardware_scaler_selected=true; } + else if (scaler == "hardware2x") { render.scale.op = scalerOpNormal; render.scale.size = 2; render.scale.hardware=true; hardware_scaler_selected=true; } + else if (scaler == "hardware3x") { render.scale.op = scalerOpNormal; render.scale.size = 3; render.scale.hardware=true; hardware_scaler_selected=true; } + else if (scaler == "hardware4x") { render.scale.op = scalerOpNormal; render.scale.size = 4; render.scale.hardware=true; hardware_scaler_selected=true; } + else if (scaler == "hardware5x") { render.scale.op = scalerOpNormal; render.scale.size = 5; render.scale.hardware=true; hardware_scaler_selected=true; } #if C_XBRZ else if (scaler == "xbrz" || scaler == "xbrz_bilinear") { render.scale.op = scalerOpNormal; render.scale.size = 1; render.scale.hardware = false; - vga.draw.doublescan_set = false; sdl_xbrz.enable = true; sdl_xbrz.postscale_bilinear = (scaler == "xbrz_bilinear"); } @@ -1278,6 +1502,8 @@ void RENDER_UpdateFromScalerSetting(void) { bool reset = false; + bool dscompat = RENDER_IsScalerCompatibleWithDoublescan(); + #if C_XBRZ if (old_xBRZ_enable != sdl_xbrz.enable) reset = true; #endif @@ -1287,6 +1513,8 @@ void RENDER_UpdateFromScalerSetting(void) { if (p_op != render.scale.op) reset = true; if (reset) RENDER_CallBack(GFX_CallBackReset); + if (p_dscompat != dscompat) VGA_SetupDrawing(0); + vga.draw.must_complete_frame = true; } #if C_OPENGL @@ -1315,9 +1543,9 @@ std::string LoadGLShader(Section_prop * section) { path = ""; } if (path.size() && !RENDER_GetShader(path,(char *)shader_src.c_str())) { - Cross::GetPlatformConfigDir(path); + path = Cross::GetPlatformConfigDir(); pathcfg = path + "glshaders" + CROSS_FILESPLIT + f; - Cross::GetPlatformResDir(path); + path = Cross::GetPlatformResDir(); pathres = path + "glshaders" + CROSS_FILESPLIT + f; if (!RENDER_GetShader(pathcfg,(char *)shader_src.c_str()) && !RENDER_GetShader(pathres,(char *)shader_src.c_str()) && (sh->realpath==f || !RENDER_GetShader(f,(char *)shader_src.c_str()))) { sh->SetValue("none"); @@ -1366,6 +1594,11 @@ void RENDER_Init() { vga.draw.doublescan_set=section->Get_bool("doublescan"); vga.draw.char9_set=section->Get_bool("char9"); + +#if C_SDL2 + vga.draw.modeswitch_set=section->Get_bool("modeswitch"); +#endif + eurAscii = section->Get_int("euro"); if (eurAscii != -1 && (eurAscii < 33 || eurAscii > 255)) { LOG_MSG("Euro ASCII value has to be between 33 and 255\n"); @@ -1451,6 +1684,10 @@ void RENDER_Init() { mainMenu.get_item("doublescan").check(vga.draw.doublescan_set).refresh_item(mainMenu); mainMenu.get_item("mapper_aspratio").check(render.aspect).refresh_item(mainMenu); +#if C_SDL2 + mainMenu.get_item("modeswitch").check(vga.draw.modeswitch_set).refresh_item(mainMenu); +#endif + RENDER_UpdateFrameskipMenu(); /* BUG FIX: Some people's dosbox-x.conf files have frameskip=-1 WTF?? */ diff --git a/src/gui/render_loops.h b/src/gui/render_loops.h index be06ef862fc..9df5addecb0 100644 --- a/src/gui/render_loops.h +++ b/src/gui/render_loops.h @@ -46,7 +46,7 @@ static inline void conc3d(SCALERNAME,SBPP,R)(void) { } /* Clear the complete line marker */ CC[render.scale.outLine][0] = 0; - const PTYPE * fc = &FC[render.scale.outLine][1]; + FC_PTRS(const PTYPE,render.scale.outLine); PTYPE * line0=(PTYPE *)(render.scale.outWrite); uint8_t * changed = &CC[render.scale.outLine][1]; Bitu b; @@ -69,7 +69,7 @@ static inline void conc3d(SCALERNAME,SBPP,R)(void) { switch (changeType) { case 0: line0 += SCALERWIDTH * SCALER_BLOCKSIZE; - fc += SCALER_BLOCKSIZE; + FC_PTR_ADV(SCALER_BLOCKSIZE); continue; case SCALE_LEFT: #if (SCALERHEIGHT > 1) @@ -86,7 +86,7 @@ static inline void conc3d(SCALERNAME,SBPP,R)(void) { #endif SCALERFUNC; line0 += SCALERWIDTH * SCALER_BLOCKSIZE; - fc += SCALER_BLOCKSIZE; + FC_PTR_ADV(SCALER_BLOCKSIZE); break; case SCALE_LEFT | SCALE_RIGHT: #if (SCALERHEIGHT > 1) @@ -128,10 +128,10 @@ static inline void conc3d(SCALERNAME,SBPP,R)(void) { #if (SCALERHEIGHT > 4) line4 += SCALERWIDTH * (SCALER_BLOCKSIZE -1); #endif - fc += SCALER_BLOCKSIZE -1; + FC_PTR_ADV(SCALER_BLOCKSIZE-1); SCALERFUNC; line0 += SCALERWIDTH; - fc++; + FC_PTR_ADV(1); break; default: #if defined(SCALERLINEAR) @@ -176,7 +176,7 @@ static inline void conc3d(SCALERNAME,SBPP,R)(void) { #if (SCALERHEIGHT > 4) line4 += SCALERWIDTH; #endif - fc++; + FC_PTR_ADV(1); } #if defined(SCALERLINEAR) #if (SCALERHEIGHT > 1) diff --git a/src/gui/render_scalers.cpp b/src/gui/render_scalers.cpp index 078d903ac68..97ebb26c912 100644 --- a/src/gui/render_scalers.cpp +++ b/src/gui/render_scalers.cpp @@ -25,21 +25,107 @@ #include "render.h" #include -uint8_t Scaler_Aspect[SCALER_MAXHEIGHT]; -uint16_t Scaler_ChangedLines[SCALER_MAXHEIGHT]; +uint8_t *Scaler_Aspect = NULL; +uint16_t *Scaler_ChangedLines = NULL; Bitu Scaler_ChangedLineIndex; static union { - uint32_t b32 [4][SCALER_MAXWIDTH*3]; - uint16_t b16 [4][SCALER_MAXWIDTH*3]; - uint8_t b8 [4][SCALER_MAXWIDTH*3]; -} scalerWriteCache; -//scalerFrameCache_t scalerFrameCache; -scalerSourceCache_t scalerSourceCache; + // NTS: A pointer is a pointer is a pointer, no matter the data type. + // Unless your compiler is weird, all pointers should line up to + // the same memory address for each element of the array. + uint32_t *b32[5]; + uint16_t *b16[5]; + uint8_t *b8[5]; +} scalerWriteCache = {NULL}; +scalerFrameCache_t scalerFrameCache; #if RENDER_USE_ADVANCED_SCALERS>1 scalerChangeCache_t scalerChangeCache; #endif +void scalerChangeCacheFree(void) { + if (scalerChangeCache.d) free(scalerChangeCache.d); + scalerChangeCache.d = NULL; +} + +void scalerChangeCacheAlloc(unsigned int w,unsigned int h) { + if (!scalerChangeCache.d) { + //typedef uint8_t scalerChangeCache_t [SCALER_COMPLEXHEIGHT][SCALER_COMPLEXWIDTH / SCALER_BLOCKSIZE]; + scalerChangeCache.pitch = ((w + SCALER_BLOCKSIZE - 1) / SCALER_BLOCKSIZE) + 2; /* adjacent pixel checks or render errors result */ + if ((scalerChangeCache.d=(uint8_t*)malloc(scalerChangeCache.pitch*(h+16))) == NULL) { + scalerChangeCache.pitch = 0; + return; + } + memset(scalerChangeCache.d,0,scalerChangeCache.pitch*(h+16)); + scalerChangeCache.width = w; + } +} + +void scalerFrameCacheFree(void) { + if (scalerFrameCache.b32.d) free(scalerFrameCache.b32.d); + scalerFrameCache.b32.d = NULL; +} + +void scalerFrameCacheAlloc(unsigned int p,unsigned int w,unsigned int h) { + if (!scalerFrameCache.b32.d) { + if ((scalerFrameCache.b32.d=(uint8_t*)malloc((p+16)*h)) == NULL) + return; + + /* advanced scalers assume p = w*bytes/pixel */ + memset(scalerFrameCache.b32.d,0,(p+16)*h); + scalerFrameCache.b32.width = w; + scalerFrameCache.b32.pitch = p; + } +} + +void scalerWriteCacheFree(void) { + if (scalerWriteCache.b8[0]) free(scalerWriteCache.b8[0]); + for (unsigned int i=0;i < 5;i++) scalerWriteCache.b8[i]=NULL; +} + +void scalerWriteCacheAlloc(unsigned int p) { + if (!scalerWriteCache.b8[0]) { + if ((scalerWriteCache.b8[0]=(uint8_t*)malloc(p*5)) == NULL) + return; + + for (unsigned int i=1;i < 5u;i++) + scalerWriteCache.b8[i] = scalerWriteCache.b8[i-1] + p; + } +} + +void Scaler_AspectChangedLinesFree(void) { + if (Scaler_Aspect) free(Scaler_Aspect); + Scaler_Aspect = NULL; + + if (Scaler_ChangedLines) free(Scaler_ChangedLines); + Scaler_ChangedLines = NULL; +} + +void Scaler_AspectChangedLinesAlloc(unsigned int h) { + if (!Scaler_Aspect && h != 0u) { + if ((Scaler_Aspect=(uint8_t*)malloc((h+16)*sizeof(uint8_t))) == NULL) + return; + + /* pre-initialize to make sure outputs STOP at the end of the array, else there will be a + * potential segfault (however unlikely) when the output changed line array scan reads up + * to 2 array elements past the end of the buffer */ + for (unsigned int i=0;i < (h+16);i++) + Scaler_Aspect[i] = 8; /* skip a large amount to force it to quit */ + } + + if (!Scaler_ChangedLines && h != 0u) { + if ((Scaler_ChangedLines=(uint16_t*)malloc((h+16)*sizeof(uint16_t))) == NULL) + return; + + /* pre-initialize to make sure outputs STOP at the end of the array, else there will be a + * potential segfault (however unlikely) when the output changed line array scan reads up + * to 2 array elements past the end of the buffer */ + for (unsigned int i=0;i < (h+16);i += 2) { + Scaler_ChangedLines[i+0] = 8192; /* skip a large amount to force it to quit */ + Scaler_ChangedLines[i+1] = 0; /* draw 0 lines */ + } + } +} + #define _conc2(A,B) A ## B #define _conc3(A,B,C) A ## B ## C #define _conc4(A,B,C,D) A ## B ## C ## D @@ -175,14 +261,13 @@ static INLINE void ScalerAddLines( Bitu changed, Bitu count ) { #undef SBPP #undef DBPP - #if RENDER_USE_ADVANCED_SCALERS>1 ScalerLineBlock_t ScalerCache = { -{ Cache_8_8, Cache_8_15 , Cache_8_16 , Cache_8_32 }, -{ nullptr, Cache_15_15, Cache_15_16, Cache_15_32}, -{ nullptr, Cache_16_15, Cache_16_16, Cache_16_32}, -{ nullptr, Cache_32_15, Cache_32_16, Cache_32_32}, -{ Cache_8_8, Cache_9_15 , Cache_9_16 , Cache_9_32 } +{ Cache_8_8, Cache_8_15 , Cache_8_16 , Cache_8_32 }, +{ nullptr, Cache_15_15, Cache_15_16, Cache_15_32}, +{ nullptr, Cache_16_15, Cache_16_16, Cache_16_32}, +{ nullptr, Cache_32_15, Cache_32_16, Cache_32_32}, +{ Cache_8_8, Cache_9_15 , Cache_9_16 , Cache_9_32 } }; #endif @@ -241,34 +326,34 @@ ScalerSimpleBlock_t ScaleNormal2xDw = { "Normal2x", GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_NORMALSCALE, 4,2,{ -{ Normal2xDw_8_8_L, Normal2xDw_8_15_L , Normal2xDw_8_16_L , Normal2xDw_8_32_L }, +{ Normal2xDw_8_8_L, Normal2xDw_8_15_L , Normal2xDw_8_16_L , Normal2xDw_8_32_L }, { nullptr, Normal2xDw_15_15_L, Normal2xDw_15_16_L, Normal2xDw_15_32_L}, { nullptr, Normal2xDw_16_15_L, Normal2xDw_16_16_L, Normal2xDw_16_32_L}, { nullptr, Normal2xDw_32_15_L, Normal2xDw_32_16_L, Normal2xDw_32_32_L}, -{ Normal2xDw_8_8_L, Normal2xDw_9_15_L , Normal2xDw_9_16_L , Normal2xDw_9_32_L } +{ Normal2xDw_8_8_L, Normal2xDw_9_15_L , Normal2xDw_9_16_L , Normal2xDw_9_32_L } },{ -{ Normal2xDw_8_8_R, Normal2xDw_8_15_R , Normal2xDw_8_16_R , Normal2xDw_8_32_R }, +{ Normal2xDw_8_8_R, Normal2xDw_8_15_R , Normal2xDw_8_16_R , Normal2xDw_8_32_R }, { nullptr, Normal2xDw_15_15_R, Normal2xDw_15_16_R, Normal2xDw_15_32_R}, { nullptr, Normal2xDw_16_15_R, Normal2xDw_16_16_R, Normal2xDw_16_32_R}, { nullptr, Normal2xDw_32_15_R, Normal2xDw_32_16_R, Normal2xDw_32_32_R}, -{ Normal2xDw_8_8_R, Normal2xDw_9_15_R , Normal2xDw_9_16_R , Normal2xDw_9_32_R } +{ Normal2xDw_8_8_R, Normal2xDw_9_15_R , Normal2xDw_9_16_R , Normal2xDw_9_32_R } }}; ScalerSimpleBlock_t ScaleNormal2xDh = { "Normal2x", GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_NORMALSCALE, 2,4,{ -{ Normal2xDh_8_8_L, Normal2xDh_8_15_L , Normal2xDh_8_16_L , Normal2xDh_8_32_L }, +{ Normal2xDh_8_8_L, Normal2xDh_8_15_L , Normal2xDh_8_16_L , Normal2xDh_8_32_L }, { nullptr, Normal2xDh_15_15_L, Normal2xDh_15_16_L, Normal2xDh_15_32_L}, { nullptr, Normal2xDh_16_15_L, Normal2xDh_16_16_L, Normal2xDh_16_32_L}, { nullptr, Normal2xDh_32_15_L, Normal2xDh_32_16_L, Normal2xDh_32_32_L}, -{ Normal2xDh_8_8_L, Normal2xDh_9_15_L , Normal2xDh_9_16_L , Normal2xDh_9_32_L } +{ Normal2xDh_8_8_L, Normal2xDh_9_15_L , Normal2xDh_9_16_L , Normal2xDh_9_32_L } },{ -{ Normal2xDh_8_8_R, Normal2xDh_8_15_R , Normal2xDh_8_16_R , Normal2xDh_8_32_R }, +{ Normal2xDh_8_8_R, Normal2xDh_8_15_R , Normal2xDh_8_16_R , Normal2xDh_8_32_R }, { nullptr, Normal2xDh_15_15_R, Normal2xDh_15_16_R, Normal2xDh_15_32_R}, { nullptr, Normal2xDh_16_15_R, Normal2xDh_16_16_R, Normal2xDh_16_32_R}, { nullptr, Normal2xDh_32_15_R, Normal2xDh_32_16_R, Normal2xDh_32_32_R}, -{ Normal2xDh_8_8_R, Normal2xDh_9_15_R , Normal2xDh_9_16_R , Normal2xDh_9_32_R } +{ Normal2xDh_8_8_R, Normal2xDh_9_15_R , Normal2xDh_9_16_R , Normal2xDh_9_32_R } }}; ScalerSimpleBlock_t ScaleNormal2x = { @@ -306,54 +391,54 @@ ScalerSimpleBlock_t ScaleNormal3x = { }}; ScalerSimpleBlock_t ScaleNormal4x = { - "Normal4x", - GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_NORMALSCALE, - 4,4,{ -{ Normal4x_8_8_L, Normal4x_8_15_L , Normal4x_8_16_L , Normal4x_8_32_L }, -{ nullptr, Normal4x_15_15_L, Normal4x_15_16_L, Normal4x_15_32_L}, -{ nullptr, Normal4x_16_15_L, Normal4x_16_16_L, Normal4x_16_32_L}, -{ nullptr, Normal4x_32_15_L, Normal4x_32_16_L, Normal4x_32_32_L}, -{ Normal4x_8_8_L, Normal4x_9_15_L , Normal4x_9_16_L , Normal4x_9_32_L } + "Normal4x", + GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_NORMALSCALE, + 4,4,{ +{ Normal4x_8_8_L, Normal4x_8_15_L , Normal4x_8_16_L , Normal4x_8_32_L }, +{ nullptr, Normal4x_15_15_L, Normal4x_15_16_L, Normal4x_15_32_L}, +{ nullptr, Normal4x_16_15_L, Normal4x_16_16_L, Normal4x_16_32_L}, +{ nullptr, Normal4x_32_15_L, Normal4x_32_16_L, Normal4x_32_32_L}, +{ Normal4x_8_8_L, Normal4x_9_15_L , Normal4x_9_16_L , Normal4x_9_32_L } },{ -{ Normal4x_8_8_R, Normal4x_8_15_R , Normal4x_8_16_R , Normal4x_8_32_R }, -{ nullptr, Normal4x_15_15_R, Normal4x_15_16_R, Normal4x_15_32_R}, -{ nullptr, Normal4x_16_15_R, Normal4x_16_16_R, Normal4x_16_32_R}, -{ nullptr, Normal4x_32_15_R, Normal4x_32_16_R, Normal4x_32_32_R}, -{ Normal4x_8_8_R, Normal4x_9_15_R , Normal4x_9_16_R , Normal4x_9_32_R } +{ Normal4x_8_8_R, Normal4x_8_15_R , Normal4x_8_16_R , Normal4x_8_32_R }, +{ nullptr, Normal4x_15_15_R, Normal4x_15_16_R, Normal4x_15_32_R}, +{ nullptr, Normal4x_16_15_R, Normal4x_16_16_R, Normal4x_16_32_R}, +{ nullptr, Normal4x_32_15_R, Normal4x_32_16_R, Normal4x_32_32_R}, +{ Normal4x_8_8_R, Normal4x_9_15_R , Normal4x_9_16_R , Normal4x_9_32_R } }}; -ScalerSimpleBlock_t ScaleNormal5x = { - "Normal5x", - GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_NORMALSCALE, - 5,5,{ -{ Normal5x_8_8_L, Normal5x_8_15_L , Normal5x_8_16_L , Normal5x_8_32_L }, -{ nullptr, Normal5x_15_15_L, Normal5x_15_16_L, Normal5x_15_32_L}, -{ nullptr, Normal5x_16_15_L, Normal5x_16_16_L, Normal5x_16_32_L}, -{ nullptr, Normal5x_32_15_L, Normal5x_32_16_L, Normal5x_32_32_L}, -{ Normal5x_8_8_L, Normal5x_9_15_L , Normal5x_9_16_L , Normal5x_9_32_L } +ScalerSimpleBlock_t ScaleNormal5x = { + "Normal5x", + GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_NORMALSCALE, + 5,5,{ +{ Normal5x_8_8_L, Normal5x_8_15_L , Normal5x_8_16_L , Normal5x_8_32_L }, +{ nullptr, Normal5x_15_15_L, Normal5x_15_16_L, Normal5x_15_32_L}, +{ nullptr, Normal5x_16_15_L, Normal5x_16_16_L, Normal5x_16_32_L}, +{ nullptr, Normal5x_32_15_L, Normal5x_32_16_L, Normal5x_32_32_L}, +{ Normal5x_8_8_L, Normal5x_9_15_L , Normal5x_9_16_L , Normal5x_9_32_L } },{ -{ Normal5x_8_8_R, Normal5x_8_15_R , Normal5x_8_16_R , Normal5x_8_32_R }, -{ nullptr, Normal5x_15_15_R, Normal5x_15_16_R, Normal5x_15_32_R}, -{ nullptr, Normal5x_16_15_R, Normal5x_16_16_R, Normal5x_16_32_R}, -{ nullptr, Normal5x_32_15_R, Normal5x_32_16_R, Normal5x_32_32_R}, -{ Normal5x_8_8_R, Normal5x_9_15_R , Normal5x_9_16_R , Normal5x_9_32_R } +{ Normal5x_8_8_R, Normal5x_8_15_R , Normal5x_8_16_R , Normal5x_8_32_R }, +{ nullptr, Normal5x_15_15_R, Normal5x_15_16_R, Normal5x_15_32_R}, +{ nullptr, Normal5x_16_15_R, Normal5x_16_16_R, Normal5x_16_32_R}, +{ nullptr, Normal5x_32_15_R, Normal5x_32_16_R, Normal5x_32_32_R}, +{ Normal5x_8_8_R, Normal5x_9_15_R , Normal5x_9_16_R , Normal5x_9_32_R } }}; -/*ScalerSimpleBlock_t ScaleNormal6x = { - "Normal6x", - GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_NORMALSCALE, - 6,6,{ -{ Normal6x_8_8_L, Normal6x_8_15_L , Normal6x_8_16_L , Normal6x_8_32_L }, -{ nullptr, Normal6x_15_15_L, Normal6x_15_16_L, Normal6x_15_32_L}, -{ nullptr, Normal6x_16_15_L, Normal6x_16_16_L, Normal6x_16_32_L}, -{ nullptr, Normal6x_32_15_L, Normal6x_32_16_L, Normal6x_32_32_L}, -{ Normal6x_8_8_L, Normal6x_9_15_L , Normal6x_9_16_L , Normal6x_9_32_L } +/*ScalerSimpleBlock_t ScaleNormal6x = { + "Normal6x", + GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_NORMALSCALE, + 6,6,{ +{ Normal6x_8_8_L, Normal6x_8_15_L , Normal6x_8_16_L , Normal6x_8_32_L }, +{ nullptr, Normal6x_15_15_L, Normal6x_15_16_L, Normal6x_15_32_L}, +{ nullptr, Normal6x_16_15_L, Normal6x_16_16_L, Normal6x_16_32_L}, +{ nullptr, Normal6x_32_15_L, Normal6x_32_16_L, Normal6x_32_32_L}, +{ Normal6x_8_8_L, Normal6x_9_15_L , Normal6x_9_16_L , Normal6x_9_32_L } },{ -{ Normal6x_8_8_R, Normal6x_8_15_R , Normal6x_8_16_R , Normal6x_8_32_R }, -{ nullptr, Normal6x_15_15_R, Normal6x_15_16_R, Normal6x_15_32_R}, -{ nullptr, Normal6x_16_15_R, Normal6x_16_16_R, Normal6x_16_32_R}, -{ nullptr, Normal6x_32_15_R, Normal6x_32_16_R, Normal6x_32_32_R}, -{ Normal6x_8_8_R, Normal6x_9_15_R , Normal6x_9_16_R , Normal6x_9_32_R } +{ Normal6x_8_8_R, Normal6x_8_15_R , Normal6x_8_16_R , Normal6x_8_32_R }, +{ nullptr, Normal6x_15_15_R, Normal6x_15_16_R, Normal6x_15_32_R}, +{ nullptr, Normal6x_16_15_R, Normal6x_16_16_R, Normal6x_16_32_R}, +{ nullptr, Normal6x_32_15_R, Normal6x_32_16_R, Normal6x_32_32_R}, +{ Normal6x_8_8_R, Normal6x_9_15_R , Normal6x_9_16_R , Normal6x_9_32_R } }};*/ #if RENDER_USE_ADVANCED_SCALERS>0 @@ -361,204 +446,306 @@ ScalerSimpleBlock_t ScaleTV2x = { "TV2x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 2,2,{ -{ nullptr, TV2x_8_15_L , TV2x_8_16_L , TV2x_8_32_L }, -{ nullptr, TV2x_15_15_L, TV2x_15_16_L, TV2x_15_32_L}, -{ nullptr, TV2x_16_15_L, TV2x_16_16_L, TV2x_16_32_L}, -{ nullptr, TV2x_32_15_L, TV2x_32_16_L, TV2x_32_32_L}, -{ nullptr, TV2x_9_15_L , TV2x_9_16_L , TV2x_9_32_L } +{ nullptr, TV2x_8_15_L , TV2x_8_16_L , TV2x_8_32_L }, +{ nullptr, TV2x_15_15_L, TV2x_15_16_L, TV2x_15_32_L}, +{ nullptr, TV2x_16_15_L, TV2x_16_16_L, TV2x_16_32_L}, +{ nullptr, TV2x_32_15_L, TV2x_32_16_L, TV2x_32_32_L}, +{ nullptr, TV2x_9_15_L , TV2x_9_16_L , TV2x_9_32_L } },{ -{ nullptr, TV2x_8_15_R , TV2x_8_16_R , TV2x_8_32_R }, -{ nullptr, TV2x_15_15_R, TV2x_15_16_R, TV2x_15_32_R}, -{ nullptr, TV2x_16_15_R, TV2x_16_16_R, TV2x_16_32_R}, -{ nullptr, TV2x_32_15_R, TV2x_32_16_R, TV2x_32_32_R}, -{ nullptr, TV2x_9_15_R , TV2x_9_16_R , TV2x_9_32_R } +{ nullptr, TV2x_8_15_R , TV2x_8_16_R , TV2x_8_32_R }, +{ nullptr, TV2x_15_15_R, TV2x_15_16_R, TV2x_15_32_R}, +{ nullptr, TV2x_16_15_R, TV2x_16_16_R, TV2x_16_32_R}, +{ nullptr, TV2x_32_15_R, TV2x_32_16_R, TV2x_32_32_R}, +{ nullptr, TV2x_9_15_R , TV2x_9_16_R , TV2x_9_32_R } +}}; + +ScalerSimpleBlock_t ScaleTV2xDw = { + "TV2xDw", + GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, + 4,2,{ +{ nullptr, TV2xDw_8_15_L , TV2xDw_8_16_L , TV2xDw_8_32_L }, +{ nullptr, TV2xDw_15_15_L, TV2xDw_15_16_L, TV2xDw_15_32_L}, +{ nullptr, TV2xDw_16_15_L, TV2xDw_16_16_L, TV2xDw_16_32_L}, +{ nullptr, TV2xDw_32_15_L, TV2xDw_32_16_L, TV2xDw_32_32_L}, +{ nullptr, TV2xDw_9_15_L , TV2xDw_9_16_L , TV2xDw_9_32_L } +},{ +{ nullptr, TV2xDw_8_15_R , TV2xDw_8_16_R , TV2xDw_8_32_R }, +{ nullptr, TV2xDw_15_15_R, TV2xDw_15_16_R, TV2xDw_15_32_R}, +{ nullptr, TV2xDw_16_15_R, TV2xDw_16_16_R, TV2xDw_16_32_R}, +{ nullptr, TV2xDw_32_15_R, TV2xDw_32_16_R, TV2xDw_32_32_R}, +{ nullptr, TV2xDw_9_15_R , TV2xDw_9_16_R , TV2xDw_9_32_R } }}; ScalerSimpleBlock_t ScaleTVDh = { "TV2x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 1,2,{ -{ nullptr, TVDh_8_15_L , TVDh_8_16_L , TVDh_8_32_L }, -{ nullptr, TVDh_15_15_L, TVDh_15_16_L, TVDh_15_32_L}, -{ nullptr, TVDh_16_15_L, TVDh_16_16_L, TVDh_16_32_L}, -{ nullptr, TVDh_32_15_L, TVDh_32_16_L, TVDh_32_32_L}, -{ nullptr, TVDh_9_15_L , TVDh_9_16_L , TVDh_9_32_L } +{ nullptr, TVDh_8_15_L , TVDh_8_16_L , TVDh_8_32_L }, +{ nullptr, TVDh_15_15_L, TVDh_15_16_L, TVDh_15_32_L}, +{ nullptr, TVDh_16_15_L, TVDh_16_16_L, TVDh_16_32_L}, +{ nullptr, TVDh_32_15_L, TVDh_32_16_L, TVDh_32_32_L}, +{ nullptr, TVDh_9_15_L , TVDh_9_16_L , TVDh_9_32_L } },{ -{ nullptr, TVDh_8_15_R , TVDh_8_16_R , TVDh_8_32_R }, -{ nullptr, TVDh_15_15_R, TVDh_15_16_R, TVDh_15_32_R}, -{ nullptr, TVDh_16_15_R, TVDh_16_16_R, TVDh_16_32_R}, -{ nullptr, TVDh_32_15_R, TVDh_32_16_R, TVDh_32_32_R}, -{ nullptr, TVDh_9_15_R , TVDh_9_16_R , TVDh_9_32_R } +{ nullptr, TVDh_8_15_R , TVDh_8_16_R , TVDh_8_32_R }, +{ nullptr, TVDh_15_15_R, TVDh_15_16_R, TVDh_15_32_R}, +{ nullptr, TVDh_16_15_R, TVDh_16_16_R, TVDh_16_32_R}, +{ nullptr, TVDh_32_15_R, TVDh_32_16_R, TVDh_32_32_R}, +{ nullptr, TVDh_9_15_R , TVDh_9_16_R , TVDh_9_32_R } }}; ScalerSimpleBlock_t ScaleTV3x = { "TV3x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 3,3,{ -{ nullptr, TV3x_8_15_L , TV3x_8_16_L , TV3x_8_32_L }, -{ nullptr, TV3x_15_15_L, TV3x_15_16_L, TV3x_15_32_L}, -{ nullptr, TV3x_16_15_L, TV3x_16_16_L, TV3x_16_32_L}, -{ nullptr, TV3x_32_15_L, TV3x_32_16_L, TV3x_32_32_L}, -{ nullptr, TV3x_9_15_L , TV3x_9_16_L , TV3x_9_32_L } +{ nullptr, TV3x_8_15_L , TV3x_8_16_L , TV3x_8_32_L }, +{ nullptr, TV3x_15_15_L, TV3x_15_16_L, TV3x_15_32_L}, +{ nullptr, TV3x_16_15_L, TV3x_16_16_L, TV3x_16_32_L}, +{ nullptr, TV3x_32_15_L, TV3x_32_16_L, TV3x_32_32_L}, +{ nullptr, TV3x_9_15_L , TV3x_9_16_L , TV3x_9_32_L } +},{ +{ nullptr, TV3x_8_15_R , TV3x_8_16_R , TV3x_8_32_R }, +{ nullptr, TV3x_15_15_R, TV3x_15_16_R, TV3x_15_32_R}, +{ nullptr, TV3x_16_15_R, TV3x_16_16_R, TV3x_16_32_R}, +{ nullptr, TV3x_32_15_R, TV3x_32_16_R, TV3x_32_32_R}, +{ nullptr, TV3x_9_15_R , TV3x_9_16_R , TV3x_9_32_R } +}}; + +ScalerSimpleBlock_t ScaleTV3xDw = { + "TV3xDw", + GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, + 6,3,{ +{ nullptr, TV3xDw_8_15_L , TV3xDw_8_16_L , TV3xDw_8_32_L }, +{ nullptr, TV3xDw_15_15_L, TV3xDw_15_16_L, TV3xDw_15_32_L}, +{ nullptr, TV3xDw_16_15_L, TV3xDw_16_16_L, TV3xDw_16_32_L}, +{ nullptr, TV3xDw_32_15_L, TV3xDw_32_16_L, TV3xDw_32_32_L}, +{ nullptr, TV3xDw_9_15_L , TV3xDw_9_16_L , TV3xDw_9_32_L } },{ -{ nullptr, TV3x_8_15_R , TV3x_8_16_R , TV3x_8_32_R }, -{ nullptr, TV3x_15_15_R, TV3x_15_16_R, TV3x_15_32_R}, -{ nullptr, TV3x_16_15_R, TV3x_16_16_R, TV3x_16_32_R}, -{ nullptr, TV3x_32_15_R, TV3x_32_16_R, TV3x_32_32_R}, -{ nullptr, TV3x_9_15_R , TV3x_9_16_R , TV3x_9_32_R } +{ nullptr, TV3xDw_8_15_R , TV3xDw_8_16_R , TV3xDw_8_32_R }, +{ nullptr, TV3xDw_15_15_R, TV3xDw_15_16_R, TV3xDw_15_32_R}, +{ nullptr, TV3xDw_16_15_R, TV3xDw_16_16_R, TV3xDw_16_32_R}, +{ nullptr, TV3xDw_32_15_R, TV3xDw_32_16_R, TV3xDw_32_32_R}, +{ nullptr, TV3xDw_9_15_R , TV3xDw_9_16_R , TV3xDw_9_32_R } }}; ScalerSimpleBlock_t ScaleScan2x = { "Scan2x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 2,2,{ -{ nullptr, Scan2x_8_15_L , Scan2x_8_16_L , Scan2x_8_32_L }, -{ nullptr, Scan2x_15_15_L, Scan2x_15_16_L, Scan2x_15_32_L}, -{ nullptr, Scan2x_16_15_L, Scan2x_16_16_L, Scan2x_16_32_L}, -{ nullptr, Scan2x_32_15_L, Scan2x_32_16_L, Scan2x_32_32_L}, -{ nullptr, Scan2x_9_15_L , Scan2x_9_16_L , Scan2x_9_32_L } +{ nullptr, Scan2x_8_15_L , Scan2x_8_16_L , Scan2x_8_32_L }, +{ nullptr, Scan2x_15_15_L, Scan2x_15_16_L, Scan2x_15_32_L}, +{ nullptr, Scan2x_16_15_L, Scan2x_16_16_L, Scan2x_16_32_L}, +{ nullptr, Scan2x_32_15_L, Scan2x_32_16_L, Scan2x_32_32_L}, +{ nullptr, Scan2x_9_15_L , Scan2x_9_16_L , Scan2x_9_32_L } +},{ +{ nullptr, Scan2x_8_15_R , Scan2x_8_16_R , Scan2x_8_32_R }, +{ nullptr, Scan2x_15_15_R, Scan2x_15_16_R, Scan2x_15_32_R}, +{ nullptr, Scan2x_16_15_R, Scan2x_16_16_R, Scan2x_16_32_R}, +{ nullptr, Scan2x_32_15_R, Scan2x_32_16_R, Scan2x_32_32_R}, +{ nullptr, Scan2x_9_15_R , Scan2x_9_16_R , Scan2x_9_32_R } +}}; + +ScalerSimpleBlock_t ScaleScan2xDw = { + "Scan2xDw", + GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, + 4,2,{ +{ nullptr, Scan2xDw_8_15_L , Scan2xDw_8_16_L , Scan2xDw_8_32_L }, +{ nullptr, Scan2xDw_15_15_L, Scan2xDw_15_16_L, Scan2xDw_15_32_L}, +{ nullptr, Scan2xDw_16_15_L, Scan2xDw_16_16_L, Scan2xDw_16_32_L}, +{ nullptr, Scan2xDw_32_15_L, Scan2xDw_32_16_L, Scan2xDw_32_32_L}, +{ nullptr, Scan2xDw_9_15_L , Scan2xDw_9_16_L , Scan2xDw_9_32_L } },{ -{ nullptr, Scan2x_8_15_R , Scan2x_8_16_R , Scan2x_8_32_R }, -{ nullptr, Scan2x_15_15_R, Scan2x_15_16_R, Scan2x_15_32_R}, -{ nullptr, Scan2x_16_15_R, Scan2x_16_16_R, Scan2x_16_32_R}, -{ nullptr, Scan2x_32_15_R, Scan2x_32_16_R, Scan2x_32_32_R}, -{ nullptr, Scan2x_9_15_R , Scan2x_9_16_R , Scan2x_9_32_R } +{ nullptr, Scan2xDw_8_15_R , Scan2xDw_8_16_R , Scan2xDw_8_32_R }, +{ nullptr, Scan2xDw_15_15_R, Scan2xDw_15_16_R, Scan2xDw_15_32_R}, +{ nullptr, Scan2xDw_16_15_R, Scan2xDw_16_16_R, Scan2xDw_16_32_R}, +{ nullptr, Scan2xDw_32_15_R, Scan2xDw_32_16_R, Scan2xDw_32_32_R}, +{ nullptr, Scan2xDw_9_15_R , Scan2xDw_9_16_R , Scan2xDw_9_32_R } }}; ScalerSimpleBlock_t ScaleScanDh = { "Scan2x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 1,2,{ -{ nullptr, ScanDh_8_15_L , ScanDh_8_16_L , ScanDh_8_32_L }, -{ nullptr, ScanDh_15_15_L, ScanDh_15_16_L, ScanDh_15_32_L}, -{ nullptr, ScanDh_16_15_L, ScanDh_16_16_L, ScanDh_16_32_L}, -{ nullptr, ScanDh_32_15_L, ScanDh_32_16_L, ScanDh_32_32_L}, -{ nullptr, ScanDh_9_15_L , ScanDh_9_16_L , ScanDh_9_32_L } +{ nullptr, ScanDh_8_15_L , ScanDh_8_16_L , ScanDh_8_32_L }, +{ nullptr, ScanDh_15_15_L, ScanDh_15_16_L, ScanDh_15_32_L}, +{ nullptr, ScanDh_16_15_L, ScanDh_16_16_L, ScanDh_16_32_L}, +{ nullptr, ScanDh_32_15_L, ScanDh_32_16_L, ScanDh_32_32_L}, +{ nullptr, ScanDh_9_15_L , ScanDh_9_16_L , ScanDh_9_32_L } },{ -{ nullptr, ScanDh_8_15_R , ScanDh_8_16_R , ScanDh_8_32_R }, -{ nullptr, ScanDh_15_15_R, ScanDh_15_16_R, ScanDh_15_32_R}, -{ nullptr, ScanDh_16_15_R, ScanDh_16_16_R, ScanDh_16_32_R}, -{ nullptr, ScanDh_32_15_R, ScanDh_32_16_R, ScanDh_32_32_R}, -{ nullptr, ScanDh_9_15_R , ScanDh_9_16_R , ScanDh_9_32_R } +{ nullptr, ScanDh_8_15_R , ScanDh_8_16_R , ScanDh_8_32_R }, +{ nullptr, ScanDh_15_15_R, ScanDh_15_16_R, ScanDh_15_32_R}, +{ nullptr, ScanDh_16_15_R, ScanDh_16_16_R, ScanDh_16_32_R}, +{ nullptr, ScanDh_32_15_R, ScanDh_32_16_R, ScanDh_32_32_R}, +{ nullptr, ScanDh_9_15_R , ScanDh_9_16_R , ScanDh_9_32_R } }}; ScalerSimpleBlock_t ScaleScan3x = { "Scan3x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 3,3,{ -{ nullptr, Scan3x_8_15_L , Scan3x_8_16_L , Scan3x_8_32_L }, -{ nullptr, Scan3x_15_15_L, Scan3x_15_16_L, Scan3x_15_32_L}, -{ nullptr, Scan3x_16_15_L, Scan3x_16_16_L, Scan3x_16_32_L}, -{ nullptr, Scan3x_32_15_L, Scan3x_32_16_L, Scan3x_32_32_L}, -{ nullptr, Scan3x_9_15_L , Scan3x_9_16_L , Scan3x_9_32_L }, +{ nullptr, Scan3x_8_15_L , Scan3x_8_16_L , Scan3x_8_32_L }, +{ nullptr, Scan3x_15_15_L, Scan3x_15_16_L, Scan3x_15_32_L}, +{ nullptr, Scan3x_16_15_L, Scan3x_16_16_L, Scan3x_16_32_L}, +{ nullptr, Scan3x_32_15_L, Scan3x_32_16_L, Scan3x_32_32_L}, +{ nullptr, Scan3x_9_15_L , Scan3x_9_16_L , Scan3x_9_32_L }, },{ -{ nullptr, Scan3x_8_15_R , Scan3x_8_16_R , Scan3x_8_32_R }, -{ nullptr, Scan3x_15_15_R, Scan3x_15_16_R, Scan3x_15_32_R}, -{ nullptr, Scan3x_16_15_R, Scan3x_16_16_R, Scan3x_16_32_R}, -{ nullptr, Scan3x_32_15_R, Scan3x_32_16_R, Scan3x_32_32_R}, -{ nullptr, Scan3x_9_15_R , Scan3x_9_16_R , Scan3x_9_32_R } +{ nullptr, Scan3x_8_15_R , Scan3x_8_16_R , Scan3x_8_32_R }, +{ nullptr, Scan3x_15_15_R, Scan3x_15_16_R, Scan3x_15_32_R}, +{ nullptr, Scan3x_16_15_R, Scan3x_16_16_R, Scan3x_16_32_R}, +{ nullptr, Scan3x_32_15_R, Scan3x_32_16_R, Scan3x_32_32_R}, +{ nullptr, Scan3x_9_15_R , Scan3x_9_16_R , Scan3x_9_32_R } +}}; + +ScalerSimpleBlock_t ScaleScan3xDw = { + "Scan3xDw", + GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, + 6,3,{ +{ nullptr, Scan3xDw_8_15_L , Scan3xDw_8_16_L , Scan3xDw_8_32_L }, +{ nullptr, Scan3xDw_15_15_L, Scan3xDw_15_16_L, Scan3xDw_15_32_L}, +{ nullptr, Scan3xDw_16_15_L, Scan3xDw_16_16_L, Scan3xDw_16_32_L}, +{ nullptr, Scan3xDw_32_15_L, Scan3xDw_32_16_L, Scan3xDw_32_32_L}, +{ nullptr, Scan3xDw_9_15_L , Scan3xDw_9_16_L , Scan3xDw_9_32_L }, +},{ +{ nullptr, Scan3xDw_8_15_R , Scan3xDw_8_16_R , Scan3xDw_8_32_R }, +{ nullptr, Scan3xDw_15_15_R, Scan3xDw_15_16_R, Scan3xDw_15_32_R}, +{ nullptr, Scan3xDw_16_15_R, Scan3xDw_16_16_R, Scan3xDw_16_32_R}, +{ nullptr, Scan3xDw_32_15_R, Scan3xDw_32_16_R, Scan3xDw_32_32_R}, +{ nullptr, Scan3xDw_9_15_R , Scan3xDw_9_16_R , Scan3xDw_9_32_R } }}; ScalerSimpleBlock_t ScaleRGB2x = { "RGB2x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 2,2,{ -{ nullptr, RGB2x_8_15_L , RGB2x_8_16_L , RGB2x_8_32_L }, -{ nullptr, RGB2x_15_15_L, RGB2x_15_16_L, RGB2x_15_32_L}, -{ nullptr, RGB2x_16_15_L, RGB2x_16_16_L, RGB2x_16_32_L}, -{ nullptr, RGB2x_32_15_L, RGB2x_32_16_L, RGB2x_32_32_L}, -{ nullptr, RGB2x_9_15_L , RGB2x_9_16_L , RGB2x_9_32_L } +{ nullptr, RGB2x_8_15_L , RGB2x_8_16_L , RGB2x_8_32_L }, +{ nullptr, RGB2x_15_15_L, RGB2x_15_16_L, RGB2x_15_32_L}, +{ nullptr, RGB2x_16_15_L, RGB2x_16_16_L, RGB2x_16_32_L}, +{ nullptr, RGB2x_32_15_L, RGB2x_32_16_L, RGB2x_32_32_L}, +{ nullptr, RGB2x_9_15_L , RGB2x_9_16_L , RGB2x_9_32_L } +},{ +{ nullptr, RGB2x_8_15_R , RGB2x_8_16_R , RGB2x_8_32_R }, +{ nullptr, RGB2x_15_15_R, RGB2x_15_16_R, RGB2x_15_32_R}, +{ nullptr, RGB2x_16_15_R, RGB2x_16_16_R, RGB2x_16_32_R}, +{ nullptr, RGB2x_32_15_R, RGB2x_32_16_R, RGB2x_32_32_R}, +{ nullptr, RGB2x_9_15_R , RGB2x_9_16_R , RGB2x_9_32_R } +}}; + +ScalerSimpleBlock_t ScaleRGB2xDw = { + "RGB2xDw", + GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, + 4,2,{ +{ nullptr, RGB2xDw_8_15_L , RGB2xDw_8_16_L , RGB2xDw_8_32_L }, +{ nullptr, RGB2xDw_15_15_L, RGB2xDw_15_16_L, RGB2xDw_15_32_L}, +{ nullptr, RGB2xDw_16_15_L, RGB2xDw_16_16_L, RGB2xDw_16_32_L}, +{ nullptr, RGB2xDw_32_15_L, RGB2xDw_32_16_L, RGB2xDw_32_32_L}, +{ nullptr, RGB2xDw_9_15_L , RGB2xDw_9_16_L , RGB2xDw_9_32_L } },{ -{ nullptr, RGB2x_8_15_R , RGB2x_8_16_R , RGB2x_8_32_R }, -{ nullptr, RGB2x_15_15_R, RGB2x_15_16_R, RGB2x_15_32_R}, -{ nullptr, RGB2x_16_15_R, RGB2x_16_16_R, RGB2x_16_32_R}, -{ nullptr, RGB2x_32_15_R, RGB2x_32_16_R, RGB2x_32_32_R}, -{ nullptr, RGB2x_9_15_R , RGB2x_9_16_R , RGB2x_9_32_R } +{ nullptr, RGB2xDw_8_15_R , RGB2xDw_8_16_R , RGB2xDw_8_32_R }, +{ nullptr, RGB2xDw_15_15_R, RGB2xDw_15_16_R, RGB2xDw_15_32_R}, +{ nullptr, RGB2xDw_16_15_R, RGB2xDw_16_16_R, RGB2xDw_16_32_R}, +{ nullptr, RGB2xDw_32_15_R, RGB2xDw_32_16_R, RGB2xDw_32_32_R}, +{ nullptr, RGB2xDw_9_15_R , RGB2xDw_9_16_R , RGB2xDw_9_32_R } }}; ScalerSimpleBlock_t ScaleRGB3x = { "RGB3x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 3,3,{ -{ nullptr, RGB3x_8_15_L , RGB3x_8_16_L , RGB3x_8_32_L }, -{ nullptr, RGB3x_15_15_L, RGB3x_15_16_L, RGB3x_15_32_L}, -{ nullptr, RGB3x_16_15_L, RGB3x_16_16_L, RGB3x_16_32_L}, -{ nullptr, RGB3x_32_15_L, RGB3x_32_16_L, RGB3x_32_32_L}, -{ nullptr, RGB3x_9_15_L , RGB3x_9_16_L , RGB3x_9_32_L } +{ nullptr, RGB3x_8_15_L , RGB3x_8_16_L , RGB3x_8_32_L }, +{ nullptr, RGB3x_15_15_L, RGB3x_15_16_L, RGB3x_15_32_L}, +{ nullptr, RGB3x_16_15_L, RGB3x_16_16_L, RGB3x_16_32_L}, +{ nullptr, RGB3x_32_15_L, RGB3x_32_16_L, RGB3x_32_32_L}, +{ nullptr, RGB3x_9_15_L , RGB3x_9_16_L , RGB3x_9_32_L } +},{ +{ nullptr, RGB3x_8_15_R , RGB3x_8_16_R , RGB3x_8_32_R }, +{ nullptr, RGB3x_15_15_R, RGB3x_15_16_R, RGB3x_15_32_R}, +{ nullptr, RGB3x_16_15_R, RGB3x_16_16_R, RGB3x_16_32_R}, +{ nullptr, RGB3x_32_15_R, RGB3x_32_16_R, RGB3x_32_32_R}, +{ nullptr, RGB3x_9_15_R , RGB3x_9_16_R , RGB3x_9_32_R } +}}; + +ScalerSimpleBlock_t ScaleRGB3xDw = { + "RGB3xDw", + GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, + 6,3,{ +{ nullptr, RGB3xDw_8_15_L , RGB3xDw_8_16_L , RGB3xDw_8_32_L }, +{ nullptr, RGB3xDw_15_15_L, RGB3xDw_15_16_L, RGB3xDw_15_32_L}, +{ nullptr, RGB3xDw_16_15_L, RGB3xDw_16_16_L, RGB3xDw_16_32_L}, +{ nullptr, RGB3xDw_32_15_L, RGB3xDw_32_16_L, RGB3xDw_32_32_L}, +{ nullptr, RGB3xDw_9_15_L , RGB3xDw_9_16_L , RGB3xDw_9_32_L } },{ -{ nullptr, RGB3x_8_15_R , RGB3x_8_16_R , RGB3x_8_32_R }, -{ nullptr, RGB3x_15_15_R, RGB3x_15_16_R, RGB3x_15_32_R}, -{ nullptr, RGB3x_16_15_R, RGB3x_16_16_R, RGB3x_16_32_R}, -{ nullptr, RGB3x_32_15_R, RGB3x_32_16_R, RGB3x_32_32_R}, -{ nullptr, RGB3x_9_15_R , RGB3x_9_16_R , RGB3x_9_32_R } +{ nullptr, RGB3xDw_8_15_R , RGB3xDw_8_16_R , RGB3xDw_8_32_R }, +{ nullptr, RGB3xDw_15_15_R, RGB3xDw_15_16_R, RGB3xDw_15_32_R}, +{ nullptr, RGB3xDw_16_15_R, RGB3xDw_16_16_R, RGB3xDw_16_32_R}, +{ nullptr, RGB3xDw_32_15_R, RGB3xDw_32_16_R, RGB3xDw_32_32_R}, +{ nullptr, RGB3xDw_9_15_R , RGB3xDw_9_16_R , RGB3xDw_9_32_R } }}; ScalerSimpleBlock_t ScaleGrayNormal = { "Gray2x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 1,1,{ -{ nullptr, GrayNormal_8_15_L , GrayNormal_8_16_L , GrayNormal_8_32_L }, -{ nullptr, GrayNormal_15_15_L, GrayNormal_15_16_L, GrayNormal_15_32_L}, -{ nullptr, GrayNormal_16_15_L, GrayNormal_16_16_L, GrayNormal_16_32_L}, -{ nullptr, GrayNormal_32_15_L, GrayNormal_32_16_L, GrayNormal_32_32_L}, -{ nullptr, GrayNormal_9_15_L , GrayNormal_9_16_L , GrayNormal_9_32_L } +{ nullptr, GrayNormal_8_15_L , GrayNormal_8_16_L , GrayNormal_8_32_L }, +{ nullptr, GrayNormal_15_15_L, GrayNormal_15_16_L, GrayNormal_15_32_L}, +{ nullptr, GrayNormal_16_15_L, GrayNormal_16_16_L, GrayNormal_16_32_L}, +{ nullptr, GrayNormal_32_15_L, GrayNormal_32_16_L, GrayNormal_32_32_L}, +{ nullptr, GrayNormal_9_15_L , GrayNormal_9_16_L , GrayNormal_9_32_L } },{ -{ nullptr, GrayNormal_8_15_R , GrayNormal_8_16_R , GrayNormal_8_32_R }, -{ nullptr, GrayNormal_15_15_R, GrayNormal_15_16_R, GrayNormal_15_32_R}, -{ nullptr, GrayNormal_16_15_R, GrayNormal_16_16_R, GrayNormal_16_32_R}, -{ nullptr, GrayNormal_32_15_R, GrayNormal_32_16_R, GrayNormal_32_32_R}, -{ nullptr, GrayNormal_9_15_R , GrayNormal_9_16_R , GrayNormal_9_32_R } +{ nullptr, GrayNormal_8_15_R , GrayNormal_8_16_R , GrayNormal_8_32_R }, +{ nullptr, GrayNormal_15_15_R, GrayNormal_15_16_R, GrayNormal_15_32_R}, +{ nullptr, GrayNormal_16_15_R, GrayNormal_16_16_R, GrayNormal_16_32_R}, +{ nullptr, GrayNormal_32_15_R, GrayNormal_32_16_R, GrayNormal_32_32_R}, +{ nullptr, GrayNormal_9_15_R , GrayNormal_9_16_R , GrayNormal_9_32_R } }}; ScalerSimpleBlock_t ScaleGrayDw = { "Gray2x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 2,1,{ -{ nullptr, GrayDw_8_15_L , GrayDw_8_16_L , GrayDw_8_32_L }, -{ nullptr, GrayDw_15_15_L, GrayDw_15_16_L, GrayDw_15_32_L}, -{ nullptr, GrayDw_16_15_L, GrayDw_16_16_L, GrayDw_16_32_L}, -{ nullptr, GrayDw_32_15_L, GrayDw_32_16_L, GrayDw_32_32_L}, -{ nullptr, GrayDw_9_15_L , GrayDw_9_16_L , GrayDw_9_32_L } +{ nullptr, GrayDw_8_15_L , GrayDw_8_16_L , GrayDw_8_32_L }, +{ nullptr, GrayDw_15_15_L, GrayDw_15_16_L, GrayDw_15_32_L}, +{ nullptr, GrayDw_16_15_L, GrayDw_16_16_L, GrayDw_16_32_L}, +{ nullptr, GrayDw_32_15_L, GrayDw_32_16_L, GrayDw_32_32_L}, +{ nullptr, GrayDw_9_15_L , GrayDw_9_16_L , GrayDw_9_32_L } },{ -{ nullptr, GrayDw_8_15_R , GrayDw_8_16_R , GrayDw_8_32_R }, -{ nullptr, GrayDw_15_15_R, GrayDw_15_16_R, GrayDw_15_32_R}, -{ nullptr, GrayDw_16_15_R, GrayDw_16_16_R, GrayDw_16_32_R}, -{ nullptr, GrayDw_32_15_R, GrayDw_32_16_R, GrayDw_32_32_R}, -{ nullptr, GrayDw_9_15_R , GrayDw_9_16_R , GrayDw_9_32_R } +{ nullptr, GrayDw_8_15_R , GrayDw_8_16_R , GrayDw_8_32_R }, +{ nullptr, GrayDw_15_15_R, GrayDw_15_16_R, GrayDw_15_32_R}, +{ nullptr, GrayDw_16_15_R, GrayDw_16_16_R, GrayDw_16_32_R}, +{ nullptr, GrayDw_32_15_R, GrayDw_32_16_R, GrayDw_32_32_R}, +{ nullptr, GrayDw_9_15_R , GrayDw_9_16_R , GrayDw_9_32_R } }}; ScalerSimpleBlock_t ScaleGrayDh = { "Gray2x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 1,2,{ -{ nullptr, GrayDh_8_15_L , GrayDh_8_16_L , GrayDh_8_32_L }, -{ nullptr, GrayDh_15_15_L, GrayDh_15_16_L, GrayDh_15_32_L}, -{ nullptr, GrayDh_16_15_L, GrayDh_16_16_L, GrayDh_16_32_L}, -{ nullptr, GrayDh_32_15_L, GrayDh_32_16_L, GrayDh_32_32_L}, -{ nullptr, GrayDh_9_15_L , GrayDh_9_16_L , GrayDh_9_32_L } +{ nullptr, GrayDh_8_15_L , GrayDh_8_16_L , GrayDh_8_32_L }, +{ nullptr, GrayDh_15_15_L, GrayDh_15_16_L, GrayDh_15_32_L}, +{ nullptr, GrayDh_16_15_L, GrayDh_16_16_L, GrayDh_16_32_L}, +{ nullptr, GrayDh_32_15_L, GrayDh_32_16_L, GrayDh_32_32_L}, +{ nullptr, GrayDh_9_15_L , GrayDh_9_16_L , GrayDh_9_32_L } },{ -{ nullptr, GrayDh_8_15_R , GrayDh_8_16_R , GrayDh_8_32_R }, -{ nullptr, GrayDh_15_15_R, GrayDh_15_16_R, GrayDh_15_32_R}, -{ nullptr, GrayDh_16_15_R, GrayDh_16_16_R, GrayDh_16_32_R}, -{ nullptr, GrayDh_32_15_R, GrayDh_32_16_R, GrayDh_32_32_R}, -{ nullptr, GrayDh_9_15_R , GrayDh_9_16_R , GrayDh_9_32_R } +{ nullptr, GrayDh_8_15_R , GrayDh_8_16_R , GrayDh_8_32_R }, +{ nullptr, GrayDh_15_15_R, GrayDh_15_16_R, GrayDh_15_32_R}, +{ nullptr, GrayDh_16_15_R, GrayDh_16_16_R, GrayDh_16_32_R}, +{ nullptr, GrayDh_32_15_R, GrayDh_32_16_R, GrayDh_32_32_R}, +{ nullptr, GrayDh_9_15_R , GrayDh_9_16_R , GrayDh_9_32_R } }}; ScalerSimpleBlock_t ScaleGray2x = { "Gray2x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 2,2,{ -{ nullptr, Gray2x_8_15_L , Gray2x_8_16_L , Gray2x_8_32_L }, -{ nullptr, Gray2x_15_15_L, Gray2x_15_16_L, Gray2x_15_32_L}, -{ nullptr, Gray2x_16_15_L, Gray2x_16_16_L, Gray2x_16_32_L}, -{ nullptr, Gray2x_32_15_L, Gray2x_32_16_L, Gray2x_32_32_L}, -{ nullptr, Gray2x_9_15_L , Gray2x_9_16_L , Gray2x_9_32_L } +{ nullptr, Gray2x_8_15_L , Gray2x_8_16_L , Gray2x_8_32_L }, +{ nullptr, Gray2x_15_15_L, Gray2x_15_16_L, Gray2x_15_32_L}, +{ nullptr, Gray2x_16_15_L, Gray2x_16_16_L, Gray2x_16_32_L}, +{ nullptr, Gray2x_32_15_L, Gray2x_32_16_L, Gray2x_32_32_L}, +{ nullptr, Gray2x_9_15_L , Gray2x_9_16_L , Gray2x_9_32_L } },{ -{ nullptr, Gray2x_8_15_R , Gray2x_8_16_R , Gray2x_8_32_R }, -{ nullptr, Gray2x_15_15_R, Gray2x_15_16_R, Gray2x_15_32_R}, -{ nullptr, Gray2x_16_15_R, Gray2x_16_16_R, Gray2x_16_32_R}, -{ nullptr, Gray2x_32_15_R, Gray2x_32_16_R, Gray2x_32_32_R}, -{ nullptr, Gray2x_9_15_R , Gray2x_9_16_R , Gray2x_9_32_R } +{ nullptr, Gray2x_8_15_R , Gray2x_8_16_R , Gray2x_8_32_R }, +{ nullptr, Gray2x_15_15_R, Gray2x_15_16_R, Gray2x_15_32_R}, +{ nullptr, Gray2x_16_15_R, Gray2x_16_16_R, Gray2x_16_32_R}, +{ nullptr, Gray2x_32_15_R, Gray2x_32_16_R, Gray2x_32_32_R}, +{ nullptr, Gray2x_9_15_R , Gray2x_9_16_R , Gray2x_9_32_R } }}; #endif @@ -570,16 +757,16 @@ ScalerComplexBlock_t ScaleAdvMame2x ={ "AdvMame2x", GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32, 2,2, -{ AdvMame2x_8_L,AdvMame2x_16_L,AdvMame2x_16_L,AdvMame2x_32_L}, -{ AdvMame2x_8_R,AdvMame2x_16_R,AdvMame2x_16_R,AdvMame2x_32_R} +{ AdvMame2x_8_L,AdvMame2x_15_L,AdvMame2x_16_L,AdvMame2x_32_L}, +{ AdvMame2x_8_R,AdvMame2x_15_R,AdvMame2x_16_R,AdvMame2x_32_R} }; ScalerComplexBlock_t ScaleAdvMame3x = { "AdvMame3x", GFX_CAN_8|GFX_CAN_15|GFX_CAN_16|GFX_CAN_32, 3,3, -{ AdvMame3x_8_L,AdvMame3x_16_L,AdvMame3x_16_L,AdvMame3x_32_L}, -{ AdvMame3x_8_R,AdvMame3x_16_R,AdvMame3x_16_R,AdvMame3x_32_R} +{ AdvMame3x_8_L,AdvMame3x_15_L,AdvMame3x_16_L,AdvMame3x_32_L}, +{ AdvMame3x_8_R,AdvMame3x_15_R,AdvMame3x_16_R,AdvMame3x_32_R} }; /* These need specific 15bpp versions */ @@ -587,40 +774,40 @@ ScalerComplexBlock_t ScaleHQ2x ={ "HQ2x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 2,2, -{ nullptr,HQ2x_16_L,HQ2x_16_L,HQ2x_32_L}, -{ nullptr,HQ2x_16_R,HQ2x_16_R,HQ2x_32_R} +{ nullptr,HQ2x_15_L,HQ2x_16_L,HQ2x_32_L}, +{ nullptr,HQ2x_15_R,HQ2x_16_R,HQ2x_32_R} }; ScalerComplexBlock_t ScaleHQ3x ={ "HQ3x", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 3,3, -{ nullptr,HQ3x_16_L,HQ3x_16_L,HQ3x_32_L}, -{ nullptr,HQ3x_16_R,HQ3x_16_R,HQ3x_32_R} +{ nullptr,HQ3x_15_L,HQ3x_16_L,HQ3x_32_L}, +{ nullptr,HQ3x_15_R,HQ3x_16_R,HQ3x_32_R} }; ScalerComplexBlock_t ScaleSuper2xSaI ={ "Super2xSaI", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 2,2, -{ nullptr,Super2xSaI_16_L,Super2xSaI_16_L,Super2xSaI_32_L}, -{ nullptr,Super2xSaI_16_R,Super2xSaI_16_R,Super2xSaI_32_R} +{ nullptr,Super2xSaI_15_L,Super2xSaI_16_L,Super2xSaI_32_L}, +{ nullptr,Super2xSaI_15_R,Super2xSaI_16_R,Super2xSaI_32_R} }; ScalerComplexBlock_t Scale2xSaI ={ "2xSaI", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 2,2, -{ nullptr,_2xSaI_16_L,_2xSaI_16_L,_2xSaI_32_L}, -{ nullptr,_2xSaI_16_R,_2xSaI_16_R,_2xSaI_32_R} +{ nullptr,_2xSaI_15_L,_2xSaI_16_L,_2xSaI_32_L}, +{ nullptr,_2xSaI_15_R,_2xSaI_16_R,_2xSaI_32_R} }; ScalerComplexBlock_t ScaleSuperEagle ={ "SuperEagle", GFX_CAN_15|GFX_CAN_16|GFX_CAN_32|GFX_RGBONLY, 2,2, -{ nullptr,SuperEagle_16_L,SuperEagle_16_L,SuperEagle_32_L}, -{ nullptr,SuperEagle_16_R,SuperEagle_16_R,SuperEagle_32_R} +{ nullptr,SuperEagle_15_L,SuperEagle_16_L,SuperEagle_32_L}, +{ nullptr,SuperEagle_15_R,SuperEagle_16_R,SuperEagle_32_R} }; ScalerComplexBlock_t ScaleAdvInterp2x = { diff --git a/src/gui/render_scalers.h b/src/gui/render_scalers.h index fd746fe76f2..3265a7f21b4 100644 --- a/src/gui/render_scalers.h +++ b/src/gui/render_scalers.h @@ -21,19 +21,10 @@ //#include "render.h" #include "video.h" -#if RENDER_USE_ADVANCED_SCALERS>0 -#define SCALER_MAXWIDTH 1920 -#define SCALER_MAXHEIGHT 1440 -#else -// reduced to save some memory -#define SCALER_MAXWIDTH 800 -#define SCALER_MAXHEIGHT 600 -#endif -#if RENDER_USE_ADVANCED_SCALERS>1 -#define SCALER_COMPLEXWIDTH 800 -#define SCALER_COMPLEXHEIGHT 600 -#endif +//remove these, but first src/output/output_gamelink.cpp needs to stop using these +#define SCALER_MAXWIDTH 800 +#define SCALER_MAXHEIGHT 600 #define SCALER_BLOCKSIZE 16 @@ -63,30 +54,47 @@ typedef enum scalerOperation { typedef void (*ScalerLineHandler_t)(const void *src); typedef void (*ScalerComplexHandler_t)(void); -extern uint8_t Scaler_Aspect[]; extern uint8_t diff_table[]; +extern uint8_t *Scaler_Aspect; extern Bitu Scaler_ChangedLineIndex; -extern uint16_t Scaler_ChangedLines[]; +extern uint16_t *Scaler_ChangedLines; #if RENDER_USE_ADVANCED_SCALERS>1 -/* Not entirely happy about those +2's since they make a non power of 2, with muls instead of shift */ -typedef uint8_t scalerChangeCache_t [SCALER_COMPLEXHEIGHT][SCALER_COMPLEXWIDTH / SCALER_BLOCKSIZE] ; -typedef union { - uint32_t b32 [SCALER_COMPLEXHEIGHT] [SCALER_COMPLEXWIDTH]; - uint16_t b16 [SCALER_COMPLEXHEIGHT] [SCALER_COMPLEXWIDTH]; - uint8_t b8 [SCALER_COMPLEXHEIGHT] [SCALER_COMPLEXWIDTH]; -} scalerFrameCache_t; + +//typedef uint8_t scalerChangeCache_t [SCALER_COMPLEXHEIGHT][SCALER_COMPLEXWIDTH / SCALER_BLOCKSIZE]; +template struct scct_t { + unsigned int pitch,width; + uint8_t* d; + + inline T *operator[](unsigned int y) { return (T*)(d + (y * pitch)); } +}; +typedef scct_t scalerChangeCache_t; + +union scalerFrameCache_t { + // an unsigned int and a pointer, regardless of pointer type, is always the same size + template struct ctd_t { + unsigned int pitch,width; + uint8_t* d; + + inline T *operator[](unsigned int y) { return (T*)(d + (y * pitch)); } + }; + + ctd_t b32; + ctd_t b16; + ctd_t b8; +}; #endif -typedef union { - uint32_t b32 [SCALER_MAXHEIGHT] [SCALER_MAXWIDTH]; - uint16_t b16 [SCALER_MAXHEIGHT] [SCALER_MAXWIDTH]; - uint8_t b8 [SCALER_MAXHEIGHT] [SCALER_MAXWIDTH]; -} scalerSourceCache_t; -extern scalerSourceCache_t scalerSourceCache; #if RENDER_USE_ADVANCED_SCALERS>1 extern scalerChangeCache_t scalerChangeCache; #endif typedef ScalerLineHandler_t ScalerLineBlock_t[5][4]; +extern bool useTraditionalRenderCache; +extern unsigned char *scalerSourceCacheBuffer; +extern unsigned int scalerSourceCacheBufferSize; + +void scalerSourceCacheBufferFree(void); +bool scalerSourceCacheBufferAlloc(unsigned int p,unsigned int h); + typedef struct { const char *name; Bitu gfxFlags; @@ -120,13 +128,19 @@ extern ScalerSimpleBlock_t ScaleNormal2xDw; extern ScalerSimpleBlock_t ScaleNormal2xDh; #if RENDER_USE_ADVANCED_SCALERS>0 extern ScalerSimpleBlock_t ScaleTV2x; +extern ScalerSimpleBlock_t ScaleTV2xDw; extern ScalerSimpleBlock_t ScaleTVDh; extern ScalerSimpleBlock_t ScaleTV3x; +extern ScalerSimpleBlock_t ScaleTV3xDw; extern ScalerSimpleBlock_t ScaleRGB2x; +extern ScalerSimpleBlock_t ScaleRGB2xDw; extern ScalerSimpleBlock_t ScaleRGB3x; +extern ScalerSimpleBlock_t ScaleRGB3xDw; extern ScalerSimpleBlock_t ScaleScan2x; +extern ScalerSimpleBlock_t ScaleScan2xDw; extern ScalerSimpleBlock_t ScaleScanDh; extern ScalerSimpleBlock_t ScaleScan3x; +extern ScalerSimpleBlock_t ScaleScan3xDw; extern ScalerSimpleBlock_t ScaleGrayNormal; extern ScalerSimpleBlock_t ScaleGrayDw; extern ScalerSimpleBlock_t ScaleGrayDh; diff --git a/src/gui/render_simple.h b/src/gui/render_simple.h index 37a1ed15e19..9b631ea2344 100644 --- a/src/gui/render_simple.h +++ b/src/gui/render_simple.h @@ -30,100 +30,105 @@ static inline void conc4d_sub_func(const SRCTYPE* &src, SRCTYPE* &cache, PTYPE* #if !defined(C_SCALER_FULL_LINE) if (memcmp(src,cache,block_proc * sizeof(SRCTYPE)) == 0 # if (SBPP == 9) - && !( + && !( render.pal.modified[src[0]] | render.pal.modified[src[1]] | render.pal.modified[src[2]] | render.pal.modified[src[3]] | - render.pal.modified[src[4]] | - render.pal.modified[src[5]] | + render.pal.modified[src[4]] | + render.pal.modified[src[5]] | render.pal.modified[src[6]] | render.pal.modified[src[7]]) # endif - ) { + ) { src += block_proc; cache += block_proc; line0 += block_proc*SCALERWIDTH; } else #endif - { + { #if defined(SCALERLINEAR) #if (SCALERHEIGHT > 1) - PTYPE *line1 = WC[0]; + PTYPE *line1 = WC[0]; #endif #if (SCALERHEIGHT > 2) - PTYPE *line2 = WC[1]; + PTYPE *line2 = WC[1]; #endif #if (SCALERHEIGHT > 3) - PTYPE *line3 = WC[2]; + PTYPE *line3 = WC[2]; #endif #if (SCALERHEIGHT > 4) - PTYPE *line4 = WC[3]; + PTYPE *line4 = WC[3]; #endif #if (SCALERHEIGHT > 5) - PTYPE *line5 = WC[4]; + PTYPE *line5 = WC[4]; #endif #else #if (SCALERHEIGHT > 1) PTYPE *line1 = (PTYPE *)(((uint8_t*)line0)+ render.scale.outPitch); #endif #if (SCALERHEIGHT > 2) - PTYPE *line2 = (PTYPE *)(((uint8_t*)line0)+ render.scale.outPitch * 2); + PTYPE *line2 = (PTYPE *)(((uint8_t*)line1)+ render.scale.outPitch); #endif #if (SCALERHEIGHT > 3) - PTYPE *line3 = (PTYPE *)(((uint8_t*)line0)+ render.scale.outPitch * 3); + PTYPE *line3 = (PTYPE *)(((uint8_t*)line2)+ render.scale.outPitch); #endif #if (SCALERHEIGHT > 4) - PTYPE *line4 = (PTYPE *)(((uint8_t*)line0)+ render.scale.outPitch * 4); + PTYPE *line4 = (PTYPE *)(((uint8_t*)line3)+ render.scale.outPitch); #endif #if (SCALERHEIGHT > 5) - PTYPE *line5 = (PTYPE *)(((uint8_t*)line0)+ render.scale.outPitch * 5); + PTYPE *line5 = (PTYPE *)(((uint8_t*)line4)+ render.scale.outPitch); #endif #endif //defined(SCALERLINEAR) - hadChange = 1; - unsigned int i = block_proc; /* WARNING: assume block_proc != 0 */ - do { - const SRCTYPE S = *src++; - *cache++ = S; - const PTYPE P = PMAKE(S); - SCALERFUNC; - line0 += SCALERWIDTH; + hadChange = 1; + unsigned int i = block_proc; /* WARNING: assume block_proc != 0 */ + do { + const SRCTYPE S = *src++; + *cache++ = S; + const PTYPE P = PMAKE(S); + SCALERFUNC; + line0 += SCALERWIDTH; #if (SCALERHEIGHT > 1) - line1 += SCALERWIDTH; + line1 += SCALERWIDTH; #endif #if (SCALERHEIGHT > 2) - line2 += SCALERWIDTH; + line2 += SCALERWIDTH; #endif #if (SCALERHEIGHT > 3) - line3 += SCALERWIDTH; + line3 += SCALERWIDTH; #endif #if (SCALERHEIGHT > 4) - line4 += SCALERWIDTH; + line4 += SCALERWIDTH; #endif #if (SCALERHEIGHT > 5) - line5 += SCALERWIDTH; + line5 += SCALERWIDTH; #endif - } while (--i != 0u); + } while (--i != 0u); #if defined(SCALERLINEAR) #if (SCALERHEIGHT > 1) - Bitu copyLen = (Bitu)((uint8_t*)line1 - (uint8_t*)WC[0]); - BituMove(((uint8_t*)line0)-copyLen+render.scale.outPitch ,WC[0], copyLen ); + Bitu copyLen = (Bitu)((uint8_t*)line1 - (uint8_t*)WC[0]); + line1 = (PTYPE *)(((uint8_t*)line0)-copyLen+render.scale.outPitch); + BituMove(line1,WC[0], copyLen ); #endif #if (SCALERHEIGHT > 2) - BituMove(((uint8_t*)line0)-copyLen+render.scale.outPitch*2,WC[1], copyLen ); + line2 = (PTYPE *)(((uint8_t*)line1)+ render.scale.outPitch); + BituMove(line2,WC[1], copyLen ); #endif #if (SCALERHEIGHT > 3) - BituMove(((uint8_t*)line0)-copyLen+render.scale.outPitch*3,WC[2], copyLen ); + line3 = (PTYPE *)(((uint8_t*)line2)+ render.scale.outPitch); + BituMove(line3,WC[2], copyLen ); #endif #if (SCALERHEIGHT > 4) - BituMove(((uint8_t*)line0)-copyLen+render.scale.outPitch*4,WC[3], copyLen ); + line4 = (PTYPE *)(((uint8_t*)line3)+ render.scale.outPitch); + BituMove(line4,WC[3], copyLen ); #endif #if (SCALERHEIGHT > 5) - BituMove(((uint8_t*)line0)-copyLen+render.scale.outPitch*5,WC[4], copyLen ); + line5 = (PTYPE *)(((uint8_t*)line4)+ render.scale.outPitch); + BituMove(line5,WC[4], copyLen ); #endif #endif //defined(SCALERLINEAR) - } + } } static inline void conc4d_func(const void *s) { @@ -148,23 +153,23 @@ static inline void conc4d_func(const void *s) { PTYPE * line0=(PTYPE *)(render.scale.outWrite); #if defined(C_SCALER_FULL_LINE) - conc4d_sub_func(src,cache,line0,(unsigned int)render.src.width,hadChange); + conc4d_sub_func(src,cache,line0,(unsigned int)render.src.width,hadChange); #else # if (SBPP == 9) - // the pal change code above limits this to 8 pixels only, see function above - const unsigned int block_size = 8; + // the pal change code above limits this to 8 pixels only, see function above + const unsigned int block_size = 8; # else - // larger blocks encourage memcmp() to optimize, scaler loop to process before coming back to check again. - const unsigned int block_size = 128; + // larger blocks encourage memcmp() to optimize, scaler loop to process before coming back to check again. + const unsigned int block_size = 128; # endif - Bitu x = (Bitu)render.src.width; - while (x >= block_size) { - x -= block_size; - conc4d_sub_func(src,cache,line0,block_size,hadChange); - } - if (x > 0) { - conc4d_sub_func(src,cache,line0,(unsigned int)x,hadChange); + Bitu x = (Bitu)render.src.width; + while (x >= block_size) { + x -= block_size; + conc4d_sub_func(src,cache,line0,block_size,hadChange); + } + if (x > 0) { + conc4d_sub_func(src,cache,line0,(unsigned int)x,hadChange); } #endif diff --git a/src/gui/render_templates.h b/src/gui/render_templates.h index 2dbe556dacc..2c045026690 100644 --- a/src/gui/render_templates.h +++ b/src/gui/render_templates.h @@ -18,13 +18,13 @@ #include "config.h" #include "SDL_endian.h" +#include "vga.h" #if DBPP == 8 #define PSIZE 1 #define PTYPE uint8_t #define WC scalerWriteCache.b8 -//#define FC scalerFrameCache.b8 -#define FC (*(scalerFrameCache_t*)(&scalerSourceCache.b32[400][0])).b8 +#define FC scalerFrameCache.b8 #define redMask 0 #define greenMask 0 #define blueMask 0 @@ -38,8 +38,7 @@ #define PSIZE 2 #define PTYPE uint16_t #define WC scalerWriteCache.b16 -//#define FC scalerFrameCache.b16 -#define FC (*(scalerFrameCache_t*)(&scalerSourceCache.b32[400][0])).b16 +#define FC scalerFrameCache.b16 #if DBPP == 15 #define redMask 0x7C00 #define greenMask 0x03E0 @@ -65,8 +64,7 @@ #define PSIZE 4 #define PTYPE uint32_t #define WC scalerWriteCache.b32 -//#define FC scalerFrameCache.b32 -#define FC (*(scalerFrameCache_t*)(&scalerSourceCache.b32[400][0])).b32 +#define FC scalerFrameCache.b32 # if !defined(C_SDL2) && defined(MACOSX) /* SDL1 builds are subject to Mac OS X strange BGRA (alpha in low byte) order */ # define redMask 0x0000ff00 # define greenMask 0x00ff0000 @@ -94,7 +92,6 @@ #if SBPP == 8 || SBPP == 9 -#define SC scalerSourceCache.b8 #if DBPP == 8 #define PMAKE(_VAL) (_VAL) #elif DBPP == 15 @@ -108,7 +105,6 @@ #endif #if SBPP == 15 -#define SC scalerSourceCache.b16 #ifdef WORDS_BIGENDIAN #if DBPP == 15 // GGGBBBBBxRRRRRGG -> xRRRRRGGGGGBBBBB #define PMAKE(_VAL) (((_VAL>>8)&0x00FF)|((_VAL<<8)&0xFF00)) @@ -134,7 +130,6 @@ #endif #if SBPP == 16 -#define SC scalerSourceCache.b16 #ifdef WORDS_BIGENDIAN #if DBPP == 15 // GGgBBBBBRRRRRGGG -> 0RRRRRGGGGGBBBBB #define PMAKE(_VAL) (((_VAL>>8)&0x001F)|((_VAL>>9)&0x0060)|((_VAL<<7)&0x7F80)) @@ -160,7 +155,6 @@ #endif #if SBPP == 32 -#define SC scalerSourceCache.b32 #ifdef WORDS_BIGENDIAN #if DBPP == 15 // BBBBBbbbGGGGGgggRRRRRrrrxxxxxxxx -> 0RRRRRGGGGGBBBBB #define PMAKE(_VAL) (PTYPE)(((_VAL>>27)&0x001F)|((_VAL>>14)&0x03E0)|((_VAL>>1)&0x7C00)) @@ -186,24 +180,35 @@ // C6 C7 C8 D5 // D0 D1 D2 D6 -#define C0 fc[-1 - SCALER_COMPLEXWIDTH] -#define C1 fc[+0 - SCALER_COMPLEXWIDTH] -#define C2 fc[+1 - SCALER_COMPLEXWIDTH] -#define C3 fc[-1 ] -#define C4 fc[+0 ] -#define C5 fc[+1 ] -#define C6 fc[-1 + SCALER_COMPLEXWIDTH] -#define C7 fc[+0 + SCALER_COMPLEXWIDTH] -#define C8 fc[+1 + SCALER_COMPLEXWIDTH] - -#define D0 fc[-1 + 2*SCALER_COMPLEXWIDTH] -#define D1 fc[+0 + 2*SCALER_COMPLEXWIDTH] -#define D2 fc[+1 + 2*SCALER_COMPLEXWIDTH] -#define D3 fc[+2 - SCALER_COMPLEXWIDTH] +#define C0 fcp1[-1] +#define C1 fcp1[+0] +#define C2 fcp1[+1] +#define C3 fc[-1] +#define C4 fc[+0] +#define C5 fc[+1] +#define C6 fcn1[-1] +#define C7 fcn1[+0] +#define C8 fcn1[+1] + +#define D0 fcn2[-1] +#define D1 fcn2[+0] +#define D2 fcn2[+1] +#define D3 fcp1[+2] #define D4 fc[+2] -#define D5 fc[+2 + SCALER_COMPLEXWIDTH] -#define D6 fc[+2 + 2*SCALER_COMPLEXWIDTH] +#define D5 fcn1[+2] +#define D6 fcn2[+2] + +#define FC_PTR_ADV(adj) \ + fcp1 += (adj); \ + fc += (adj); \ + fcn1 += (adj); \ + fcn2 += (adj); +#define FC_PTRS(pt_t,line) \ + pt_t *fcp1 = &FC[(line)-1u][1]; (void)fcp1; \ + pt_t *fc = &FC[(line) ][1]; (void)fc; \ + pt_t *fcn1 = &FC[(line)+1u][1]; (void)fcn1; \ + pt_t *fcn2 = &FC[(line)+2u][1]; (void)fcn2; #if RENDER_USE_ADVANCED_SCALERS>1 static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { @@ -219,9 +224,10 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { } #endif const SRCTYPE * src = (SRCTYPE*)s; - PTYPE *fc= &FC[render.scale.inLine+1][1]; + FC_PTRS(PTYPE,render.scale.inLine+1); SRCTYPE *sc = (SRCTYPE*)(render.scale.cacheRead); render.scale.cacheRead += render.scale.cachePitch; + Bitu b; bool hadChange = false; /* This should also copy the surrounding pixels but it looks nice enough without */ @@ -253,7 +259,8 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { continue; } } - fc += SCALER_BLOCKSIZE; + + FC_PTR_ADV(SCALER_BLOCKSIZE); sc += SCALER_BLOCKSIZE; src += SCALER_BLOCKSIZE; } @@ -502,6 +509,28 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { #undef SCALERHEIGHT #undef SCALERFUNC +#define SCALERNAME TV2xDw +#define SCALERWIDTH 4 +#define SCALERHEIGHT 2 +#define SCALERFUNC \ +{ \ + PTYPE halfpixel=((P & redblueMask) >> 1) & redblueMask; \ + halfpixel|=((P & greenMask) >> 1) & greenMask; \ + line0[0]=P; \ + line0[1]=P; \ + line0[2]=P; \ + line0[3]=P; \ + line1[0]=halfpixel; \ + line1[1]=halfpixel; \ + line1[2]=halfpixel; \ + line1[3]=halfpixel; \ +} +#include "render_simple.h" +#undef SCALERNAME +#undef SCALERWIDTH +#undef SCALERHEIGHT +#undef SCALERFUNC + #define SCALERNAME TVDh #define SCALERWIDTH 1 #define SCALERHEIGHT 2 @@ -562,6 +591,68 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { #undef SCALERHEIGHT #undef SCALERFUNC +#define SCALERNAME TV3xDw +#define SCALERWIDTH 6 +#define SCALERHEIGHT 3 +#if !defined(C_SDL2) && defined(MACOSX) /* SDL1 builds are subject to Mac OS X strange BGRA (alpha in low byte) order */ +#define SCALERFUNC \ +{ \ + PTYPE halfpixel=(((uint64_t)(P & redblueMask) * (uint64_t)5) >> (uint64_t)3) & redblueMask; \ + halfpixel|=(((uint64_t)(P & greenMask) * (uint64_t)5) >> (uint64_t)3) & greenMask; \ + line0[0]=P; \ + line0[1]=P; \ + line0[2]=P; \ + line0[3]=P; \ + line0[4]=P; \ + line0[5]=P; \ + line1[0]=halfpixel; \ + line1[1]=halfpixel; \ + line1[2]=halfpixel; \ + line1[3]=halfpixel; \ + line1[4]=halfpixel; \ + line1[5]=halfpixel; \ + halfpixel=(((uint64_t)(P & redblueMask) * (uint64_t)5) >> (uint64_t)4) & redblueMask; \ + halfpixel|=(((uint64_t)(P & greenMask) * (uint64_t)5) >> (uint64_t)4) & greenMask; \ + line2[0]=halfpixel; \ + line2[1]=halfpixel; \ + line2[2]=halfpixel; \ + line2[3]=halfpixel; \ + line2[4]=halfpixel; \ + line2[5]=halfpixel; \ +} +#else +#define SCALERFUNC \ +{ \ + PTYPE halfpixel=(((P & redblueMask) * 5) >> 3) & redblueMask; \ + halfpixel|=(((P & greenMask) * 5) >> 3) & greenMask; \ + line0[0]=P; \ + line0[1]=P; \ + line0[2]=P; \ + line0[3]=P; \ + line0[4]=P; \ + line0[5]=P; \ + line1[0]=halfpixel; \ + line1[1]=halfpixel; \ + line1[2]=halfpixel; \ + line1[3]=halfpixel; \ + line1[4]=halfpixel; \ + line1[5]=halfpixel; \ + halfpixel=(((P & redblueMask) * 5) >> 4) & redblueMask; \ + halfpixel|=(((P & greenMask) * 5) >> 4) & greenMask; \ + line2[0]=halfpixel; \ + line2[1]=halfpixel; \ + line2[2]=halfpixel; \ + line2[3]=halfpixel; \ + line2[4]=halfpixel; \ + line2[5]=halfpixel; \ +} +#endif +#include "render_simple.h" +#undef SCALERNAME +#undef SCALERWIDTH +#undef SCALERHEIGHT +#undef SCALERFUNC + #define SCALERNAME RGB2x #define SCALERWIDTH 2 #define SCALERHEIGHT 2 @@ -576,6 +667,24 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { #undef SCALERHEIGHT #undef SCALERFUNC +#define SCALERNAME RGB2xDw +#define SCALERWIDTH 4 +#define SCALERHEIGHT 2 +#define SCALERFUNC \ + line0[0]=P & redMask; \ + line0[1]=P & greenMask; \ + line0[2]=P & redMask; \ + line0[3]=P & greenMask; \ + line1[0]=P & blueMask; \ + line1[1]=P; \ + line1[2]=P & blueMask; \ + line1[3]=P; +#include "render_simple.h" +#undef SCALERNAME +#undef SCALERWIDTH +#undef SCALERHEIGHT +#undef SCALERFUNC + #define SCALERNAME RGB3x #define SCALERWIDTH 3 #define SCALERHEIGHT 3 @@ -595,6 +704,34 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { #undef SCALERHEIGHT #undef SCALERFUNC +#define SCALERNAME RGB3xDw +#define SCALERWIDTH 6 +#define SCALERHEIGHT 3 +#define SCALERFUNC \ + line0[0]=P; \ + line0[1]=P & greenMask; \ + line0[2]=P & blueMask; \ + line0[3]=P; \ + line0[4]=P & greenMask; \ + line0[5]=P & blueMask; \ + line1[0]=P & greenMask; \ + line1[1]=P & redMask; \ + line1[2]=P; \ + line1[3]=P & greenMask; \ + line1[4]=P & redMask; \ + line1[5]=P; \ + line2[0]=P; \ + line2[1]=P & blueMask; \ + line2[2]=P & redMask; \ + line2[3]=P; \ + line2[4]=P & blueMask; \ + line2[5]=P & redMask; +#include "render_simple.h" +#undef SCALERNAME +#undef SCALERWIDTH +#undef SCALERHEIGHT +#undef SCALERFUNC + #define SCALERNAME Scan2x #define SCALERWIDTH 2 #define SCALERHEIGHT 2 @@ -609,6 +746,24 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { #undef SCALERHEIGHT #undef SCALERFUNC +#define SCALERNAME Scan2xDw +#define SCALERWIDTH 4 +#define SCALERHEIGHT 2 +#define SCALERFUNC \ + line0[0]=P; \ + line0[1]=P; \ + line0[2]=P; \ + line0[3]=P; \ + line1[0]=0; \ + line1[1]=0; \ + line1[2]=0; \ + line1[3]=0; +#include "render_simple.h" +#undef SCALERNAME +#undef SCALERWIDTH +#undef SCALERHEIGHT +#undef SCALERFUNC + #define SCALERNAME ScanDh #define SCALERWIDTH 1 #define SCALERHEIGHT 2 @@ -640,6 +795,34 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { #undef SCALERHEIGHT #undef SCALERFUNC +#define SCALERNAME Scan3xDw +#define SCALERWIDTH 6 +#define SCALERHEIGHT 3 +#define SCALERFUNC \ + line0[0]=P; \ + line0[1]=P; \ + line0[2]=P; \ + line0[3]=P; \ + line0[4]=P; \ + line0[5]=P; \ + line1[0]=P; \ + line1[1]=P; \ + line1[2]=P; \ + line1[3]=P; \ + line1[4]=P; \ + line1[5]=P; \ + line2[0]=0; \ + line2[1]=0; \ + line2[2]=0; \ + line2[3]=0; \ + line2[4]=0; \ + line2[5]=0; +#include "render_simple.h" +#undef SCALERNAME +#undef SCALERWIDTH +#undef SCALERHEIGHT +#undef SCALERFUNC + /* Grayscale scalers */ #define SCALERNAME GrayNormal #define SCALERWIDTH 1 @@ -716,7 +899,7 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { #define SCALERWIDTH 2 #define SCALERHEIGHT 2 #include "render_templates_hq2x.h" -#define SCALERFUNC conc2d(Hq2x,SBPP)(line0, line1, fc) +#define SCALERFUNC conc2d(Hq2x,SBPP)(line0, line1, fcp1, fc, fcn1, fcn2) #include "render_loops.h" #undef SCALERNAME #undef SCALERWIDTH @@ -727,7 +910,7 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { #define SCALERWIDTH 3 #define SCALERHEIGHT 3 #include "render_templates_hq3x.h" -#define SCALERFUNC conc2d(Hq3x,SBPP)(line0, line1, line2, fc) +#define SCALERFUNC conc2d(Hq3x,SBPP)(line0, line1, line2, fcp1, fc, fcn1, fcn2) #include "render_loops.h" #undef SCALERNAME #undef SCALERWIDTH @@ -739,7 +922,7 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { #define SCALERNAME Super2xSaI #define SCALERWIDTH 2 #define SCALERHEIGHT 2 -#define SCALERFUNC conc2d(Super2xSaI,SBPP)(line0, line1, fc) +#define SCALERFUNC conc2d(Super2xSaI,SBPP)(line0, line1, fcp1, fc, fcn1, fcn2) #include "render_loops.h" #undef SCALERNAME #undef SCALERWIDTH @@ -749,7 +932,7 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { #define SCALERNAME SuperEagle #define SCALERWIDTH 2 #define SCALERHEIGHT 2 -#define SCALERFUNC conc2d(SuperEagle,SBPP)(line0, line1, fc) +#define SCALERFUNC conc2d(SuperEagle,SBPP)(line0, line1, fcp1, fc, fcn1, fcn2) #include "render_loops.h" #undef SCALERNAME #undef SCALERWIDTH @@ -759,7 +942,7 @@ static inline void conc3d(Cache,SBPP,DBPP) (const void * s) { #define SCALERNAME _2xSaI #define SCALERWIDTH 2 #define SCALERHEIGHT 2 -#define SCALERFUNC conc2d(_2xSaI,SBPP)(line0, line1, fc) +#define SCALERFUNC conc2d(_2xSaI,SBPP)(line0, line1, fcp1, fc, fcn1, fcn2) #include "render_loops.h" #undef SCALERNAME #undef SCALERWIDTH diff --git a/src/gui/render_templates_hq2x.h b/src/gui/render_templates_hq2x.h index a4916e7ad9d..be1926bf110 100644 --- a/src/gui/render_templates_hq2x.h +++ b/src/gui/render_templates_hq2x.h @@ -85,12 +85,17 @@ #define RGBtoYUV(c) _RGBtoYUV[c] #endif -inline void conc2d(Hq2x,SBPP)(PTYPE * line0, PTYPE * line1, const PTYPE * fc) +inline void conc2d(Hq2x,SBPP)(PTYPE * line0, PTYPE * line1, const PTYPE * fcp1, const PTYPE * fc, const PTYPE * fcn1, const PTYPE * fcn2) { # if !defined(_MSC_VER) /* Microsoft C++ thinks this is a failed attempt at a function call---it's not */ (void)conc2d(Hq2x,SBPP); # endif + (void)fcp1; + (void)fc; + (void)fcn1; + (void)fcn2; + if (!_RGBtoYUV) conc2d(InitLUTs,SBPP)(); uint32_t pattern = 0; diff --git a/src/gui/render_templates_hq3x.h b/src/gui/render_templates_hq3x.h index bcc79775932..34e1f8fa7c5 100644 --- a/src/gui/render_templates_hq3x.h +++ b/src/gui/render_templates_hq3x.h @@ -87,12 +87,17 @@ #define RGBtoYUV(c) _RGBtoYUV[c] #endif -inline void conc2d(Hq3x,SBPP)(PTYPE * line0, PTYPE * line1, PTYPE * line2, const PTYPE * fc) +inline void conc2d(Hq3x,SBPP)(PTYPE * line0, PTYPE * line1, PTYPE * line2, const PTYPE * fcp1, const PTYPE * fc, const PTYPE * fcn1, const PTYPE * fcn2) { # if !defined(_MSC_VER) /* Microsoft C++ thinks this is a failed attempt at a function call---it's not */ (void)conc2d(Hq3x,SBPP); # endif + (void)fcp1; + (void)fc; + (void)fcn1; + (void)fcn2; + if (_RGBtoYUV == nullptr) conc2d(InitLUTs,SBPP)(); uint32_t pattern = 0; diff --git a/src/gui/render_templates_sai.h b/src/gui/render_templates_sai.h index bc3d72094b6..6277e10bcea 100644 --- a/src/gui/render_templates_sai.h +++ b/src/gui/render_templates_sai.h @@ -35,8 +35,13 @@ static inline int conc2d(GetResult,SBPP)(PTYPE A, PTYPE B, PTYPE C, PTYPE D) { return rmap[y][x]; } -inline void conc2d(Super2xSaI,SBPP)(PTYPE * line0, PTYPE * line1, const PTYPE * fc) +inline void conc2d(Super2xSaI,SBPP)(PTYPE * line0, PTYPE * line1, const PTYPE * fcp1, const PTYPE * fc, const PTYPE * fcn1, const PTYPE * fcn2) { + (void)fcp1; + (void)fc; + (void)fcn1; + (void)fcn2; + # if !defined(_MSC_VER) /* Microsoft C++ thinks this is a failed attempt at a function call---it's not */ (void)conc2d(Super2xSaI,SBPP); # endif @@ -91,8 +96,13 @@ inline void conc2d(Super2xSaI,SBPP)(PTYPE * line0, PTYPE * line1, const PTYPE * line0[0] = C4; } -inline void conc2d(SuperEagle,SBPP)(PTYPE * line0, PTYPE * line1, const PTYPE * fc) +inline void conc2d(SuperEagle,SBPP)(PTYPE * line0, PTYPE * line1, const PTYPE * fcp1, const PTYPE * fc, const PTYPE * fcn1, const PTYPE * fcn2) { + (void)fcp1; + (void)fc; + (void)fcn1; + (void)fcn2; + // -------------------------------------- if (C4 != C8) { if (C7 == C5) { @@ -151,8 +161,13 @@ inline void conc2d(SuperEagle,SBPP)(PTYPE * line0, PTYPE * line1, const PTYPE * } } -inline void conc2d(_2xSaI,SBPP)(PTYPE * line0, PTYPE * line1, const PTYPE * fc) +inline void conc2d(_2xSaI,SBPP)(PTYPE * line0, PTYPE * line1, const PTYPE * fcp1, const PTYPE * fc, const PTYPE * fcn1, const PTYPE * fcn2) { + (void)fcp1; + (void)fc; + (void)fcn1; + (void)fcn2; + if ((C4 == C8) && (C5 != C7)) { if (((C4 == C1) && (C5 == D5)) || ((C4 == C7) && (C4 == C2) && (C5 != C1) && (C5 == D3))) { diff --git a/src/gui/sdl_gui.cpp b/src/gui/sdl_gui.cpp index ecf184a37b8..3dc3a9755c6 100644 --- a/src/gui/sdl_gui.cpp +++ b/src/gui/sdl_gui.cpp @@ -40,6 +40,7 @@ #include "midi.h" #include "bios_disk.h" #include "../dos/drives.h" +#include "../ints/int10.h" #if C_OPENGL #include "voodoo.h" @@ -52,6 +53,13 @@ #include "shellapi.h" #endif +#if defined(OS2) +#define INCL_DOSPROCESS +#define INCL_DOSERRORS +#define INCL_WIN +#include +#endif + #include #include #include @@ -88,8 +96,6 @@ class VirtualBatch : public BatchFile { std::istringstream lines; }; -extern uint8_t int10_font_14[256 * 14], int10_font_14_init[256 * 14]; - extern uint32_t GFX_Rmask; extern unsigned char GFX_Rshift; extern uint32_t GFX_Gmask; @@ -112,6 +118,11 @@ extern bool MSG_Write(const char *, const char *); extern void LoadMessageFile(const char * fname); extern void GFX_SetTitle(int32_t cycles, int frameskip, Bits timing, bool paused); +#if defined(MACOSX) && defined(C_SDL2) && C_METAL +void OUTPUT_Metal_Shutdown(); +void change_output(int); +#endif + static int cursor; static bool running; static int saved_bpp; @@ -154,15 +165,66 @@ void getlogtext(std::string &str), getcodetext(std::string &text), ApplySetting( void ttf_switch_on(bool ss=true), ttf_switch_off(bool ss=true), setAspectRatio(Section_prop * section), GFX_ForceRedrawScreen(void), SetWindowTransparency(int trans); bool CheckQuit(void), OpenGL_using(void); char tmp1[CROSS_LEN*2], tmp2[CROSS_LEN]; -const char *aboutmsg = "DOSBox-X ver." VERSION " (" OS_PLATFORM " " SDL_STRING " " OS_BIT "-bit)\n" \ - "Build date/time: " UPDATED_STR "\nCopyright 2011-" COPYRIGHT_END_YEAR \ - " The DOSBox-X Team\nProject maintainer: joncampbell123\nDOSBox-X homepage: https://dosbox-x.com"; + +std::string GetAboutMsg(uint8_t* len) { + std::string retv; + char tmp[1024]; + int written = 0; + size_t max_len = 0; + + written = snprintf(tmp,sizeof(tmp),MSG_Get("HELP_ABOUT_VERSION"), + VERSION,OS_PLATFORM,SDL_STRING,OS_BIT, +#if defined(OSFREE) + " OSFREE" +#else + "" +#endif + ); + if(written > 0) { + size_t actual_len = std::min(written, sizeof(tmp) - 1); + max_len = std::max(max_len, actual_len); + retv += tmp; retv += "\n"; + } + written = snprintf(tmp,sizeof(tmp),MSG_Get("HELP_ABOUT_UPDATED"),UPDATED_STR); + if(written > 0) { + size_t actual_len = std::min(written, sizeof(tmp) - 1); + max_len = std::max(max_len, actual_len); + retv += tmp; retv += "\n"; + } + written = snprintf(tmp,sizeof(tmp),MSG_Get("HELP_ABOUT_COPYRIGHT"),"2011",COPYRIGHT_END_YEAR,"The DOSBox-X Team"); + if(written > 0) { + size_t actual_len = std::min(written, sizeof(tmp) - 1); + max_len = std::max(max_len, actual_len); + retv += tmp; retv += "\n"; + } + snprintf(tmp,sizeof(tmp),MSG_Get("HELP_ABOUT_MAINTAINER"),"joncampbell123"); + if(written > 0) { + size_t actual_len = std::min(written, sizeof(tmp) - 1); + max_len = std::max(max_len, actual_len); + retv += tmp; retv += "\n"; + } + written = snprintf(tmp,sizeof(tmp),MSG_Get("HELP_ABOUT_HOMEPAGE"),"https://dosbox-x.com"); + //written = snprintf(tmp,sizeof(tmp),"TEST1234567890123456789012345678901234567890123456789012345678901234567890"); /* A string to test long messages */ + if(written > 0) { + size_t actual_len = std::min(written, sizeof(tmp) - 1); + max_len = std::max(max_len, actual_len); + retv += tmp; retv += "\n"; + } + if(len) { + *len = static_cast(std::min(max_len, 0xFF)); + } + return retv; +} void RebootConfig(std::string filename, bool confirm=false) { std::string exepath=GetDOSBoxXPath(true), para="-conf \""+filename+"\""; if ((!confirm||CheckQuit())&&exepath.size()) { #if defined(WIN32) ShellExecute(NULL, "open", exepath.c_str(), para.c_str(), NULL, SW_NORMAL); +#elif defined(OS2) + char LoadError[CCHMAXPATH] = {0}; + RESULTCODES result; + DosExecPgm(LoadError, sizeof(LoadError), EXEC_ASYNC, (PSZ)para.c_str(), NULL, &result, (PSZ)exepath.c_str()); #else system((exepath+" "+para+ " &").c_str()); #endif @@ -181,6 +243,10 @@ void RebootLanguage(std::string filename, bool confirm=false) { if (control->PrintConfig(tmpconfig.c_str(),false,true)&&!stat(tmpconfig.c_str(), &st)) para="-conf "+tmpconfig+" -eraseconf "+para; #if defined(WIN32) ShellExecute(NULL, "open", exepath.c_str(), para.c_str(), NULL, SW_NORMAL); +#elif defined(OS2) + char LoadError[CCHMAXPATH] = {0}; + RESULTCODES result; + DosExecPgm(LoadError, sizeof(LoadError), EXEC_ASYNC, (PSZ)para.c_str(), NULL, &result, (PSZ)exepath.c_str()); #else system((exepath+" "+para+ " &").c_str()); #endif @@ -200,8 +266,11 @@ static void getPixel(Bits x, Bits y, int &r, int &g, int &b, int shift) if (x < 0) x = 0; if (y < 0) y = 0; - uint8_t* src = (uint8_t *)&scalerSourceCache; uint32_t pixel; + uint8_t* src = (uint8_t *)scalerSourceCacheBuffer; + + if (!src) return; + switch (render.scale.inMode) { case scalerMode8: pixel = *((unsigned int)x+(uint8_t*)(src+(unsigned int)y*(unsigned int)render.scale.cachePitch)); @@ -237,10 +306,6 @@ bool gui_menu_exit(DOSBoxMenu * const menu,DOSBoxMenu::item * const menuitem) { return true; } -extern uint8_t int10_font_08[256 * 8]; -extern uint8_t int10_font_14[256 * 14]; -extern uint8_t int10_font_16[256 * 16]; - extern bool toscale; extern const char* RunningProgram; static GUI::ScreenSDL *UI_Startup(GUI::ScreenSDL *screen) { @@ -1129,6 +1194,8 @@ std::string CapName(std::string name) { dispname="AUTOEXEC.BAT"; else if (name=="sblaster") dispname="SB"; + else if (name=="sblaster2") + dispname="SB #2"; else if (name=="speaker") dispname="PC Speaker"; else if (name=="imfc") @@ -1186,6 +1253,8 @@ std::string RestoreName(std::string name) { dispname="autoexec"; else if (name=="SB") dispname="sblaster"; + else if (name=="SB #2") + dispname="sblaster2"; else if (name=="PC Speaker") dispname="speaker"; else if (name=="IMFC") @@ -2004,9 +2073,9 @@ class SaveDialog : public GUI::ToplevelWindow { } if (arg == MSG_Get("USE_USERCONFIG")) { std::string config_path; - Cross::GetPlatformConfigDir(config_path); + config_path = Cross::GetPlatformConfigDir(); std::string fullpath,file; - Cross::GetPlatformConfigName(file); + file = Cross::GetPlatformConfigName(); const size_t last_slash_idx = config_path.find_last_of("\\/"); if (std::string::npos != last_slash_idx) { fullpath = config_path.substr(0, last_slash_idx); @@ -2577,13 +2646,22 @@ class ShowMidiDevice : public GUI::ToplevelWindow { ShowMidiDevice(GUI::Screen *parent, int x, int y, const char *title) : ToplevelWindow(parent, x, y, 320, 260, title) { std::string name=!midi.handler||!midi.handler->GetName()?"-":midi.handler->GetName(); + std::string sf_rom{}; if (name.size()) { - if (name=="mt32") name="MT32"; - else if (name=="fluidsynth") name="FluidSynth"; + if(name == "mt32") { + name = "MT32"; + sf_rom = "\nMT32 ROM path:\n" + sffile; + } + else if(name == "fluidsynth") { + name = "FluidSynth"; + sf_rom = "\nSoundFont file:\n" + sffile; + } else name[0]=toupper(name[0]); } extern std::string getoplmode(), getoplemu(); - std::string midiinfo = "MIDI available: "+std::string(midi.available?"Yes":"No")+"\nMIDI device: "+name+"\nMIDI soundfont file / ROM path:\n"+sffile+"\nOPL mode: "+getoplmode()+"\nOPL emulation: "+getoplemu(); + std::string midiinfo = "MIDI available: "+std::string(midi.available?"Yes":"No")+"\nMIDI device: "+name+sf_rom + +"\nOPL mode: "+getoplmode()+"\nOPL emulation: "+getoplemu() + + (sf_rom.size()?"":"\n\n\n"); std::istringstream in(midiinfo.c_str()); int r=0; if (in) for (std::string line; std::getline(in, line); ) { @@ -2639,6 +2717,7 @@ class ShowDriveInfo : public GUI::ToplevelWindow { readonly=true; else { readonly=Drives[statusdrive]->readonly; +#if !defined(OSFREE) if (!path.size()) { fatDrive *fdp = dynamic_cast(Drives[statusdrive]); if (fdp!=NULL&&fdp->opts.mounttype==1) @@ -2646,9 +2725,11 @@ class ShowDriveInfo : public GUI::ToplevelWindow { else if (fdp!=NULL&&fdp->opts.mounttype==2) path="RAM drive"; } +#endif } swappos=DriveManager::GetDrivePosition(statusdrive); } else if (!strncmp(info, "PhysFS directory ", 17)) { +#if !defined(OSFREE) type="PhysFS directory"; path=info+17; readonly=true; @@ -2660,10 +2741,17 @@ class ShowDriveInfo : public GUI::ToplevelWindow { overlay=std::string(wdir)+(wdir[strlen(wdir)-1]!=CROSS_FILESPLIT?std::string(1, CROSS_FILESPLIT):"")+std::string(1, 'A'+statusdrive)+"_DRIVE"; } } +#else + E_Exit("Physfs directory not supported"); +#endif } else if (!strncmp(info, "PhysFS CDRom ", 13)) { +#if !defined(OSFREE) type="PhysFS CDRom"; path=info+13; readonly=true; +#else + E_Exit("Physfs CDROM not supported"); +#endif } else if (!strncmp(info, "local directory ", 16)) { type="local directory"; path=info+16; @@ -3116,14 +3204,30 @@ class ShowHelpAbout : public GUI::ToplevelWindow { GUI::Input *name; public: ShowHelpAbout(GUI::Screen *parent, int x, int y, const char *title) : - ToplevelWindow(parent, x, y, 420, 230, title) { - std::istringstream in(aboutmsg); + ToplevelWindow(parent, x, y, + [&]() { + uint8_t len = 0; + std::string msg = GetAboutMsg(&len); + + const int char_w = 8; + const int padding = 100; + + return padding + len * char_w; + }(), + 230, + title) { + uint8_t amsg_len = 0; + std::string amsg = GetAboutMsg(&amsg_len); + std::istringstream in(amsg); + const int char_w = 8; + const int padding = 100; + int r=0; if (in) for (std::string line; std::getline(in, line); ) { r+=25; new GUI::Label(this, 40, r, line.c_str()); } - (new GUI::Button(this, 180, 155, MSG_Get("CLOSE"), 70))->addActionHandler(this); + (new GUI::Button(this, (padding + amsg_len * char_w - 70) / 2, 155, MSG_Get("CLOSE"), 70))->addActionHandler(this); move(parent->getWidth()>this->getWidth()?(parent->getWidth()-this->getWidth())/2:0,parent->getHeight()>this->getHeight()?(parent->getHeight()-this->getHeight())/2:0); } @@ -3226,7 +3330,7 @@ class ConfigurationWindow : public GUI::ToplevelWindow { bar->addMenu(MSG_Get("SETTINGS")); // theme menu - bar->addMenu("Theme"); // TODO MSG_Get("THEME") + bar->addMenu(MSG_Get("THEME")); for (size_t ti=0;ti < (sizeof(theme_presets)/sizeof(theme_presets[0]));ti++) { if (theme_presets[ti].special & ThemePresetEntry::PREPEND_HLINE) bar->addItem(2, ""); @@ -3274,7 +3378,7 @@ class ConfigurationWindow : public GUI::ToplevelWindow { "video", "voodoo", "vsync", "ttf", "dos", "dosv", "pc98", "4dos", "autoexec", "config", "cpu", "speaker", - "sblaster", "gus", "midi", "mixer", + "sblaster", "sblaster2", "gus", "midi", "mixer", "innova", "imfc", "joystick", "mapper", "keyboard", "serial", "parallel", "printer", "ipx", "ne2000", "ethernet, pcap", "ethernet, slirp", @@ -3463,6 +3567,64 @@ class ConfigurationWindow : public GUI::ToplevelWindow { std::string url = "https://dosbox-x.com/"; #if defined(WIN32) ShellExecute(NULL, "open", url.c_str(), NULL, NULL, SW_SHOWNORMAL); +#elif defined(OS2) + char str[CCHMAXPATH]; + APIRET rc; + char path[CCHMAXPATH], params[100], parambuffer[500], *paramptr; + char userPath[CCHMAXPATH], sysPath[CCHMAXPATH]; + PRFPROFILE profile = { sizeof(userPath), (PSZ)userPath, sizeof(sysPath), (PSZ)sysPath }; + HINI os2Ini; + HAB hAnchor = WinQueryAnchorBlock(WinQueryActiveWindow(HWND_DESKTOP)); + RESULTCODES result = { 0 }; + PROGDETAILS details; + + // Initialize buffers + memset(path, 0, sizeof(path)); + memset(parambuffer, 0, sizeof(parambuffer)); + memset(params, 0, sizeof(params)); + + // We have to look in the OS/2 configuration for the default browser. + // First step: Find the configuration files + if (!PrfQueryProfile(hAnchor, &profile)) { + systemmessagebox(url.c_str(), "Could not query application handle", "ok", "error", 0); + return; + } + + // Second step: Open the configuration files and read exe path and parameters + os2Ini = PrfOpenProfile(hAnchor, (PCSZ)userPath); + if (os2Ini == NULLHANDLE) { + systemmessagebox(url.c_str(), "Could not open user profile", "ok", "error", 0); + return; + } + if (!PrfQueryProfileString(os2Ini, (PCSZ)"WPURLDEFAULTSETTINGS", (PCSZ)"DefaultBrowserExe", NULL, path, sizeof(path))) { + PrfCloseProfile(os2Ini); + systemmessagebox(url.c_str(), "Could not find URL settings", "ok", "error", 0); + return; + } + + PrfQueryProfileString(os2Ini, (PCSZ)"WPURLDEFAULTSETTINGS", (PCSZ)"DefaultBrowserParameters", NULL, params, sizeof(params)); + PrfCloseProfile(os2Ini); + + // concat arguments + if (strlen(params) > 0) + strncat(params, " ", 20); + strncat(params, url.c_str(), url.length()); + + // Build parameter buffer + strcpy(parambuffer, "Browser"); + paramptr = ¶mbuffer[strlen(parambuffer)+1]; + // copy params to buffer + strcpy(paramptr, params); + paramptr += strlen(params) + 1; + // To be sure: Terminate parameter list with NULL + *paramptr = '\0'; + + // Last step: Execute detached browser + rc = DosExecPgm(userPath, sizeof(userPath), EXEC_ASYNC, (PSZ)parambuffer, NULL, &result, (PSZ)path); + if (rc != NO_ERROR) { + systemmessagebox(url.c_str(), "Could not open browser", "ok", "error", 0); + return; + } #elif defined(LINUX) system(("xdg-open "+url).c_str()); #elif defined(MACOSX) @@ -3470,7 +3632,15 @@ class ConfigurationWindow : public GUI::ToplevelWindow { #endif } else if (arg == tmp1) { //new GUI::MessageBox2(getScreen(), 100, 150, 330, "About DOSBox-X", aboutmsg); - new GUI::MessageBox2(getScreen(), getScreen()->getWidth()>350?(parent->getWidth()-350)/2:0, 150, 350, mainMenu.get_item("help_about").get_text().c_str(), aboutmsg); + uint8_t amsg_len = 0; + std::string amsg = GetAboutMsg(&amsg_len); + const int char_w = 8; + const int padding = 30; + const int min_w = 360; + int msg_w = std::max(min_w, padding + amsg_len * char_w); + int screen_w = getScreen()->getWidth(); + int x = screen_w > msg_w ? (screen_w - msg_w) / 2 : 0; + new GUI::MessageBox2(getScreen(), x, 150, msg_w, mainMenu.get_item("help_about").get_text().c_str(), amsg.c_str()); } else if (arg == MSG_Get("INTRODUCTION")) { //new GUI::MessageBox2(getScreen(), 20, 50, 540, "Introduction", intromsg); new GUI::MessageBox2(getScreen(), getScreen()->getWidth()>540?(parent->getWidth()-540)/2:0, 150, 540, mainMenu.get_item("help_intro").get_text().c_str(), MSG_Get("INTRO_MESSAGE")); @@ -3868,7 +4038,16 @@ void RunCfgTool(Bitu val) { #if C_OPENGL voodoo_ogl_update_dimensions(); #endif - } + } +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + if(sdl.desktop.want_type == SCREEN_METAL){ + OUTPUT_Metal_Shutdown(); +#if defined(C_OPENGL) + change_output(3); +#endif + change_output(14); + } +#endif } void GUI_Shortcut(int select) { diff --git a/src/gui/sdl_mapper.cpp b/src/gui/sdl_mapper.cpp index 83bce71199e..fa091953e1d 100644 --- a/src/gui/sdl_mapper.cpp +++ b/src/gui/sdl_mapper.cpp @@ -52,6 +52,7 @@ #include "render.h" #include "setup.h" #include "menu.h" +#include "../ints/int10.h" #include "SDL_syswm.h" #include "sdlmain.h" @@ -113,6 +114,15 @@ class CCheckButton; class CBindButton; class CModEvent; +#if defined(OS2) && defined(C_SDL2) +#undef CLR_BLACK +#undef CLR_WHITE +#undef CLR_RED +#undef CLR_BLUE +#undef CLR_GREEN +#undef CLR_DARKGREEN +#endif + enum { CLR_BLACK = 0, CLR_GREY = 1, @@ -186,7 +196,6 @@ static DOSBoxMenu mapperMenu; #endif extern unsigned int hostkeyalt, maincp; -extern uint8_t int10_font_14[256 * 14]; std::map pending_string_binds; @@ -332,6 +341,15 @@ void WindowsTaskbarResetPreviewRegion #if defined(MACOSX) void macosx_reload_touchbar(void); +#if defined(C_SDL2) && C_METAL +void OUTPUT_Metal_Shutdown(); +void change_output(int); +#endif +#endif + +#if C_DIRECT3D && C_SDL2 +void OUTPUT_DIRECT3D11_Shutdown(); +void change_output(int); #endif bool systemmessagebox(char const * aTitle, char const * aMessage, char const * aDialogType, char const * aIconType, int aDefaultButton); @@ -831,6 +849,7 @@ class Typer { static struct CMapper { #if defined(C_SDL2) SDL_Window* window; + uint32_t window_scale; SDL_Rect draw_rect; SDL_Surface* draw_surface_nonpaletted; SDL_Surface* draw_surface; @@ -1035,10 +1054,13 @@ static SDLKey sdlkey_map[MAX_SCANCODES] = { // Convert hardware scancode (XKB = }; #else // !MACOSX && !Linux -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(OS2) // Todo: recheck sdl mapping #define SDLK_JP_RO (SDLKey)0x73 #define SDLK_JP_YEN (SDLKey)0x7d +#if defined(OS2) +#define SDLK_KP_COMMA SDLK_COMMA +#endif #endif #define MAX_SCANCODES 0xdf static SDLKey sdlkey_map[MAX_SCANCODES] = { @@ -1220,7 +1242,9 @@ void setScanCode(Section_prop * section) { #endif //defined(MACOSX) } void loadScanCode(); +#if !defined(OSFREE) const char* DOS_GetLoadedLayout(void); +#endif bool load=false; bool prev_ret; #endif // !defined(C_SDL2) @@ -1234,6 +1258,7 @@ bool useScanCode() { else if (!usescancodes) return false; else { +# if !defined(OSFREE) const char* layout_name = DOS_GetLoadedLayout(); bool ret = layout_name != NULL && !IS_PC98_ARCH; if (!load) @@ -1246,6 +1271,9 @@ bool useScanCode() { load=true; } return ret; +# else + return false; +# endif } #endif } @@ -2606,6 +2634,11 @@ class CButton { Draw(true, true); } virtual bool OnTop(Bitu _x,Bitu _y) { +#if defined(C_SDL2) + const auto scale = mapper.window_scale; + _x /= scale; + _y /= scale; +#endif return ( enabled && (_x>=x) && (_x=y) && (_yupdate_menu_shortcut(); } +void UpdateMapperSurface() +{ +#if defined(C_SDL2) + mapper.surface = SDL_GetWindowSurface(mapper.window); + + if (mapper.surface == nullptr) + { + const auto error = SDL_GetError(); + + E_Exit("Could not initialize video mode for mapper: %s", error); + } +#endif +} + +void GetDisplaySize(int* w, int* h) +{ +#if defined(C_SDL2) + SDL_DisplayMode mode = { }; + SDL_GetCurrentDisplayMode(0, &mode); + *w = mode.w; + *h = mode.h; +#endif +} + +void GetWindowSize(int* w, int* h) +{ +#if defined(C_SDL2) + SDL_GetWindowSize(mapper.window, w, h); +#endif +} + +void CenterWindow() +{ +#if defined(C_SDL2) + int dsp_w, dsp_h, win_w, win_h; + + GetDisplaySize(&dsp_w, &dsp_h); + + GetWindowSize(&win_w, &win_h); + + SDL_SetWindowPosition(mapper.window, dsp_w / 2 - win_w / 2, dsp_h / 2 - win_h / 2); +#endif +} + +int GetMapperRenderWidth() +{ + return 640; +} + +int GetMapperRenderHeight() +{ + return 480; +} + +int GetMapperScaleFactor() +{ +#if defined(C_SDL2) + SDL_DisplayMode mode = { }; + + const auto rw = GetMapperRenderWidth(); + const auto rh = GetMapperRenderHeight(); + const auto sf = SDL_GetCurrentDisplayMode(0, &mode) != 0 ? 1 : std::max(1, std::min(mode.w / rw, mode.h / rh)); + + return sf; +#else + return 1; +#endif +} + void MAPPER_RunInternal() { MAPPER_ReleaseAllKeys(); @@ -5326,7 +5430,7 @@ void MAPPER_RunInternal() { /* Sorry, the MAPPER screws up 3Dfx OpenGL emulation. * Remove this block when fixed. */ if (GFX_GetPreventFullscreen()) { - systemmessagebox("Mapper Editor","Mapper Editor is not currently available.","ok", "info", 1); + systemmessagebox("Mapper Editor", MSG_Get("MAPPEREDITOR_NOT_AVAILABLE"),"ok", "info", 1); LOG_MSG("Mapper Editor is not available while 3Dfx OpenGL emulation is running"); return; } @@ -5347,17 +5451,26 @@ void MAPPER_RunInternal() { /* Be sure that there is no update in progress */ GFX_EndUpdate(nullptr); + + /* scale mapper according display resolution */ + const auto source_w = GetMapperRenderWidth(); + const auto source_h = GetMapperRenderHeight(); + const auto scale_by = GetMapperScaleFactor(); + const auto target_w = source_w * scale_by; + const auto target_h = source_h * scale_by; + #if defined(C_SDL2) + mapper.window_scale = scale_by; void GFX_SetResizeable(bool enable); GFX_SetResizeable(false); - mapper.window = OpenGL_using() ? GFX_SetSDLWindowMode(640,480,SCREEN_OPENGL) : GFX_SetSDLSurfaceWindow(640,480); + mapper.window = OpenGL_using() ? GFX_SetSDLWindowMode(target_w,target_h,SCREEN_OPENGL) : GFX_SetSDLSurfaceWindow(target_w,target_h); if (mapper.window == NULL) E_Exit("Could not initialize video mode for mapper: %s",SDL_GetError()); - mapper.surface=SDL_GetWindowSurface(mapper.window); - if (mapper.surface == NULL) E_Exit("Could not initialize video mode for mapper: %s",SDL_GetError()); - mapper.draw_surface=SDL_CreateRGBSurface(0,640,480,8,0,0,0,0); + CenterWindow(); + UpdateMapperSurface(); + mapper.draw_surface=SDL_CreateRGBSurface(0,source_w,source_h,8,0,0,0,0); // Needed for SDL_BlitScaled - mapper.draw_surface_nonpaletted=SDL_CreateRGBSurface(0,640,480,32,0x0000ff00,0x00ff0000,0xff000000,0); - mapper.draw_rect=GFX_GetSDLSurfaceSubwindowDims(640,480); + mapper.draw_surface_nonpaletted=SDL_CreateRGBSurface(0,source_w,source_h,32,0x0000ff00,0x00ff0000,0xff000000,0); + mapper.draw_rect=GFX_GetSDLSurfaceSubwindowDims(target_w,target_h); // Sorry, but SDL_SetSurfacePalette requires a full palette. SDL_Palette *sdl2_map_pal_ptr = SDL_AllocPalette(256); SDL_SetPaletteColors(sdl2_map_pal_ptr, map_pal, 0, 7); @@ -5367,7 +5480,7 @@ void MAPPER_RunInternal() { last_clicked=NULL; } #else - mapper.surface=SDL_SetVideoMode(640,480,8,0); + mapper.surface=SDL_SetVideoMode(source_w, source_h,8,0); if (mapper.surface == NULL) E_Exit("Could not initialize video mode for mapper: %s",SDL_GetError()); /* Set some palette entries */ @@ -5387,6 +5500,7 @@ void MAPPER_RunInternal() { #endif ApplyPreventCap(); + UpdateMapperSurface(); // update again because of DOSBox_SetMenu #if defined(MACOSX) macosx_reload_touchbar(); #endif @@ -5436,6 +5550,7 @@ void MAPPER_RunInternal() { if((mousetoggle && !mouselocked) || (!mousetoggle && mouselocked)) GFX_CaptureMouse(); SDL_ShowCursor(cursor); DOSBox_RefreshMenu(); + CenterWindow(); if(!menu_gui) GFX_RestoreMode(); #if defined(__WIN32__) && !defined(HX_DOS) && !defined(_WIN32_WINDOWS) if(GetAsyncKeyState(0x11)) { @@ -5461,6 +5576,21 @@ void MAPPER_RunInternal() { WindowsTaskbarUpdatePreviewRegion(); #endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + if(sdl.desktop.want_type == SCREEN_METAL){ + OUTPUT_Metal_Shutdown(); +#if defined(C_OPENGL) + change_output(3); +#endif + change_output(14); + } +#endif +#if C_DIRECT3D && C_SDL2 + if(sdl.desktop.want_type == SCREEN_DIRECT3D11) { + OUTPUT_DIRECT3D11_Shutdown(); + change_output(13); + } +#endif // KEYBOARD_ClrBuffer(); GFX_LosingFocus(); @@ -5472,8 +5602,12 @@ void MAPPER_RunInternal() { #endif std::string mapper_keybind = mapper_event_keybind_string("host"); if (mapper_keybind.empty()) mapper_keybind = "unbound"; - mainMenu.get_item("hostkey_mapper").check(hostkeyalt==0).set_text("Mapper-defined: "+mapper_keybind).refresh_item(mainMenu); - +#if __APPLE__ && __MAC_OS_X_VERSION_MIN_REQUIRED < 101300 + /* Avoid conflict in check() macro */ + mainMenu.get_item("hostkey_mapper").check2(hostkeyalt==0).set_text("Mapper-defined: "+mapper_keybind).refresh_item(mainMenu); +#else + mainMenu.get_item("hostkey_mapper").check(hostkeyalt==0).set_text("Mapper-defined: "+mapper_keybind).refresh_item(mainMenu); +#endif #if defined(USE_TTF) if (!TTF_using() || ttf.inUse) #endif @@ -5616,7 +5750,8 @@ void ReloadMapper(Section_prop *section, bool init) { } if (!loadfile) { std::string exepath=GetDOSBoxXPath(), config_path, res_path; - Cross::GetPlatformConfigDir(config_path), Cross::GetPlatformResDir(res_path); + config_path = Cross::GetPlatformConfigDir(); + res_path = Cross::GetPlatformResDir(); if (mapper.filename.size() && exepath.size()) { loadfile=fopen((exepath+mapper.filename).c_str(),"rt"); if (!loadfile) { diff --git a/src/gui/sdlmain.cpp b/src/gui/sdlmain.cpp index d08c1784e80..1f867292482 100644 --- a/src/gui/sdlmain.cpp +++ b/src/gui/sdlmain.cpp @@ -35,6 +35,10 @@ #ifdef OS2 # define INCL_DOS # define INCL_WIN +# define INCL_DOSERRORS +# define INCL_WINDIALOGS +# include +# include #endif #if defined(WIN32) @@ -43,6 +47,10 @@ #endif #endif +#ifndef O_BINARY +# define O_BINARY 0 +#endif + int socknum=-1; int posx = -1; int posy = -1; @@ -67,8 +75,10 @@ extern bool force_load_state, force_conversion; extern bool pc98_force_ibm_layout, gbk, chinasea; extern bool inshell, enable_config_as_shell_commands; extern bool switchttf, ttfswitch, switch_output_from_ttf; +extern bool finish_prepare; bool checkmenuwidth = false; bool dos_kernel_disabled = true; +bool dos_kernel_shutdown_mcb = true; bool winrun=false, use_save_file=false; bool maximize = false, tooutttf = false; bool tonoime = false, enableime = false; @@ -80,6 +90,15 @@ void MenuBrowseProgramFile(void), OutputSettingMenuUpdate(void), aspect_ratio_me extern int tryconvertcp, Reflect_Menu(void); bool kana_input = false; // true if a half-width kana was typed +#if __APPLE__ && __MAC_OS_X_VERSION_MIN_REQUIRED < 101200 +#define IS_OLDMACOS 1 /* FIX_ME: Tested on El Capitan (10.11). If this macro is required for Sierra (10.12), change to 101300 */ +#endif + +#ifndef LINUX +char* convert_escape_newlines(const char* aMessage); +char* revert_escape_newlines(const char* aMessage); +#endif + #ifndef _GNU_SOURCE # define _GNU_SOURCE #endif @@ -136,7 +155,7 @@ bool kana_input = false; // true if a half-width kana was typed #include "../dos/drives.h" #include "../ints/int10.h" #if !defined(HX_DOS) -#if !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) +#if !defined(OS2) && !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) #include "whereami.c" #endif #include "../libs/tinyfiledialogs/tinyfiledialogs.h" @@ -145,7 +164,7 @@ bool kana_input = false; // true if a half-width kana was typed #include "display2.cpp" #endif -#if (defined __i386__ || defined __x86_64__) && (defined BSD || defined LINUX) +#if (defined __i386__ || defined __x86_64__) && (!defined IS_OLDMACOS && (defined BSD || defined LINUX)) #include "libs/passthroughio/passthroughio.h" // for dropPrivileges() #endif @@ -157,6 +176,16 @@ bool kana_input = false; // true if a half-width kana was typed # include #endif +#include +#if defined(_WIN32) +#include +#define getcwd _getcwd +#else +#include +#endif +#include + +#include #include #include #include @@ -164,11 +193,33 @@ bool kana_input = false; // true if a half-width kana was typed #include #include static bool init_output = false; +bool switch_to_d3d11_on_startup = false; +bool switch_to_metal_on_startup = false; + +/* #include */ // includes Objective-C code +#if C_METAL +void metal_init(); +void OUTPUT_Metal_Select(); +Bitu OUTPUT_Metal_GetBestMode(Bitu flags); +bool OUTPUT_Metal_StartUpdate(uint8_t*& pixels, Bitu& pitch); +void OUTPUT_Metal_EndUpdate(const uint16_t* changedLines); +Bitu OUTPUT_Metal_SetSize(void); +void OUTPUT_Metal_Shutdown(); +void OUTPUT_Metal_CheckSourceResolution(); +#endif #if defined(WIN32) #include "resource.h" #if !defined(HX_DOS) +#ifndef PATH_MAX + #if defined(WIN32) + #define PATH_MAX MAX_PATH + #else + #define PATH_MAX 4096 /* LINUX sets to 4096, while this varies from 260 to 4096 depending on platforms */ + #endif +#endif + BOOL CALLBACK EnumDispProc(HMONITOR hMon, HDC dcMon, RECT* pRcMon, LPARAM lParam) { (void)hMon; (void)dcMon; @@ -240,7 +291,7 @@ extern "C" void sdl1_hax_macosx_highdpi_set_enable(const bool enable); #endif # include "SDL_version.h" -#if !defined(C_SDL2) && !defined(RISCOS) +#if !defined(C_SDL2) && !defined(RISCOS) && !defined(OS2) # ifndef SDL_DOSBOX_X_SPECIAL # warning It is STRONGLY RECOMMENDED to compile the DOSBox-X code using the SDL 1.x library provided in this source repository. # error You can ignore this by commenting out this error, but you will encounter problems if you use the unmodified SDL 1.x library. @@ -312,6 +363,10 @@ int macosx_yesnocancel(const char *title, const char *message); std::string macosx_prompt_folder(const char *default_folder); #endif +#if defined(C_HAVE_DUKTAPE) +duk_context *js_heap = NULL; +#endif + #if C_DIRECT3D void d3d_init(void); #endif @@ -449,6 +504,19 @@ std::string GetDOSBoxXPath(bool withexe=false) { char exepath[MAX_PATH]; GetModuleFileName(NULL, exepath, sizeof(exepath)); full=std::string(exepath); +#elif defined(OS2) /* No WAI */ + char exepath[CCHMAXPATH]; + PPIB pib; + APIRET rc; + + full = std::string(""); + rc = DosGetInfoBlocks(NULL, &pib); + if (rc == NO_ERROR) { + rc = DosQueryModuleName(pib->pib_hmte, CCHMAXPATH, (PCHAR)&exepath); + if (rc == NO_ERROR) { + full = std::string(exepath); + } + } #else int length = wai_getExecutablePath(NULL, 0, NULL); char *exepath = (char*)malloc(length + 1); @@ -675,7 +743,9 @@ bool setSizeButNotResize() { Bitu time_limit_ms = 0; +#if !defined(OSFREE) extern bool keep_umb_on_boot; +#endif extern bool keep_private_area_on_boot; bool guest_machine_power_on = false; @@ -683,14 +753,18 @@ std::string custom_savedir; void SHELL_Run(); void DisableINT33(); +#if !defined(OSFREE) void EMS_DoShutDown(); +#endif void XMS_DoShutDown(); void DOS_DoShutDown(); void GUS_DOS_Shutdown(); void SBLASTER_DOS_Shutdown(); void DOS_ShutdownDevices(void); +#if !defined(OSFREE) void RemoveEMSPageFrame(void); void RemoveUMBBlock(); +#endif void DOS_GetMemory_unmap(); void VFILE_Shutdown(void); void PROGRAMS_Shutdown(void); @@ -703,6 +777,7 @@ void FreeBIOSDiskList(); void GFX_ShutDown(void); void MAPPER_Shutdown(); void SHELL_Init(void); +void SHELL_MessagesInit(void); void CopyClipboard(int all); void CopyAllClipboard(bool bPressed); void PasteClipboard(bool bPressed); @@ -711,6 +786,8 @@ void QuickEdit(bool bPressed); void ClipKeySelect(int sym); bool isModifierApplied(void); bool PasteClipboardNext(void); +void CONFIGSHELL_Init(void); +void CONFIGSHELL_Run(void); #if C_DYNAMIC_X86 void CPU_Core_Dyn_X86_Shutdown(void); @@ -726,7 +803,7 @@ void UpdateWindowDimensions(Bitu width, Bitu height) currentWindowHeight = height; } -static Bitu dim_width=0, dim_height=0, dpi_width=0, dpi_height=0; +static double dim_width=0, dim_height=0, dpi_width=0, dpi_height=0; void PrintScreenSizeInfo(void) { #if 1 @@ -851,6 +928,38 @@ void UpdateWindowDimensions(void) UpdateWindowDimensions_Linux(); void Linux_GetWindowDPI(ScreenSizeInfo &info); Linux_GetWindowDPI(/*&*/screen_size_info); +#endif +#if defined(OS2) + HWND hwnd = 0; + RECTL rect; + if (sdl.window != NULL) { + SDL_SysWMinfo wmi; + memset(&wmi, 0, sizeof(wmi)); + SDL_VERSION(&wmi.version); + if (SDL_GetWindowWMInfo(sdl.window, &wmi)) { + hwnd = wmi.info.os2.hwnd; + if (hwnd != 0) { + WinQueryWindowRect(hwnd, &rect); + UpdateWindowDimensions(rect.xRight - rect.xLeft, rect.yTop - rect.yBottom); + + // Get the screen size via the desktop window. + WinQueryWindowRect(HWND_DESKTOP, &rect); + // We just set DPI to 96dpi. + screen_size_info.screen_dpi.width = 96.0; + screen_size_info.screen_dpi.height = 96.0; + + // DPI calculation pulled from sdlmain_linux.cpp and rearranged to calculate mm dimensions + screen_size_info.screen_dimensions_pixels.width = rect.xRight - rect.xLeft; + screen_size_info.screen_dimensions_pixels.height = rect.yTop - rect.yBottom; + screen_size_info.screen_dimensions_mm.width = + ((((double)screen_size_info.screen_dimensions_pixels.width) * 25.4) / + ((double)screen_size_info.screen_dpi.width)); + screen_size_info.screen_dimensions_mm.height = + ((((double)screen_size_info.screen_dimensions_pixels.height) * 25.4) / + ((double)screen_size_info.screen_dpi.height)); + } + } + } #endif PrintScreenSizeInfo(); } @@ -880,11 +989,11 @@ bool startup_state_capslock = false; // Global for keyboa bool startup_state_scrlock = false; // Global for keyboard initialisation int mouse_start_x=-1, mouse_start_y=-1, mouse_end_x=-1, mouse_end_y=-1, fx=-1, fy=-1, paste_speed=20, wheel_key=0, mbutton=3; bool wheel_guest = false, clipboard_dosapi = true, clipboard_biospaste = -#if defined (WIN32) && (!defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR)) -false; -#else +//#if defined (WIN32) && (!defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR)) +//false; +//#else true; -#endif +//#endif const char *modifier; #ifdef WIN32 @@ -904,10 +1013,6 @@ const char *modifier; # define PRIO_TOTAL (PRIO_MAX-PRIO_MIN) #endif -#ifdef OS2 -# include -#endif - #if defined(WIN32) HWND GetHWND(void) { SDL_SysWMinfo wmi; @@ -1080,6 +1185,7 @@ void GFX_SetTitle(int32_t cycles, int frameskip, Bits timing, bool paused) { } if (paused) strcat(title," PAUSED"); + if (ticksLocked) strcat(title, " TURBO"); #if C_DEBUG if (IsDebuggerActive()) strcat(title," DEBUGGER"); #endif @@ -1091,23 +1197,150 @@ void GFX_SetTitle(int32_t cycles, int frameskip, Bits timing, bool paused) { } bool warn_on_mem_write = false; +bool CodePageGuestToHostUTF8(char *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*/) ; + +#ifdef WIN32 +#ifdef __cplusplus +extern "C" { +#endif + int tinyfd_messageBoxW( + wchar_t const* aTitle, /* NULL or "" */ + wchar_t const* aMessage, /* NULL or "" may contain \n and \t */ + wchar_t const* aDialogType, /* "ok" "okcancel" "yesno" "yesnocancel" */ + wchar_t const* aIconType, /* "info" "warning" "error" "question" */ + int aDefaultButton); +#ifdef __cplusplus +} +#endif +bool CodePageGuestToHostUTF16(uint16_t* d/*CROSS_LEN*/, const char* s/*CROSS_LEN*/); +void SanitizeUTF16Newlines(uint16_t* utf16Message, size_t maxLen) { + for(size_t i = 0; i < maxLen && utf16Message[i] != 0; ++i) { + if(utf16Message[i] == 0x25D9) { + utf16Message[i] = 0x000A; + } + } +} +#elif defined(MACOSX) +std::string replaceNewlineWithEscaped(const std::string& input) { + std::string output; + for (size_t i = 0; i < input.length(); ++i) { + if (input[i] == '\'') { // Close, escape and open + output += "'\\''"; + } + else if (input[i] == '\n'){ + output += "\\n"; // '\n' needs to be replaced to "\\n" + i++; + } + //else if (input[i] == '\"'){ + // output += "\\\""; // '"' needs to be replaced to "\\\"" + // i++; + //} + else { + output += input[i]; + } + } + return output; +} +#else +std::string replaceNewlineWithEscaped(const std::string& input) { + std::string output; + size_t i = 0; + + while(i < input.length()) { + if(input[i] == '\\') { + if(input[i + 1] != 'n') output += '\\'; // "\n" needs to be escaped to "\\n" + } + else if(input[i] == '\n') { + output += "\\\\n"; // '\n' needs to be replaced to "\\n" + i++; + } + else if(input[i] == '`') { + output += "\\`"; // '`' needs to be replaced to "\\`" + i++; + } + else if(input[i] == '"') { + output += "\\\""; // '"' needs to be replaced to "\\\"" + i++; + } + else { + output += input[i]; + i++; + } + } + + return output; +} +#endif bool systemmessagebox(char const * aTitle, char const * aMessage, char const * aDialogType, char const * aIconType, int aDefaultButton) { #if !defined(HX_DOS) - if(!aMessage) aMessage = ""; - std::string lDialogString(aMessage); + std::string lTitleString = aTitle ? aTitle : ""; + std::string lDialogString = aMessage ? aMessage : ""; + std::string lDialogTypeStr = aDialogType ? aDialogType : "ok"; + std::string lIconTypeStr = aIconType ? aIconType : "info"; + + std::replace(lTitleString.begin(), lTitleString.end(), '\"', ' '); std::replace(lDialogString.begin(), lDialogString.end(), '\"', ' '); + std::replace(lDialogTypeStr.begin(), lDialogTypeStr.end(), '\"', ' '); + std::replace(lIconTypeStr.begin(), lIconTypeStr.end(), '\"', ' '); bool fs=sdl.desktop.fullscreen; if (fs) GFX_SwitchFullScreen(); MAPPER_ReleaseAllKeys(); GFX_LosingFocus(); GFX_ReleaseMouse(); - bool ret=tinyfd_messageBox(aTitle, lDialogString.c_str(), aDialogType, aIconType, aDefaultButton); + +#ifndef WIN32 + size_t aMessageLength = strlen(aMessage); + size_t aTitleLength = strlen(aTitle); + char* lMessage = (char*)malloc((aMessageLength * 2 + 1) * sizeof(char)); // DBCS may expand to 3 to 4 bytes when converted to UTF-8 + char* lTitle = (char*)malloc((aTitleLength * 2 + 1) * sizeof(char)); // DBCS may expand to 3 to 4 bytes when converted to UTF-8 + lDialogString = replaceNewlineWithEscaped(lDialogString); // String may include "\n" which needs to be escaped to "\\n" + CodePageGuestToHostUTF8(lMessage, lDialogString.c_str()); + lTitleString = replaceNewlineWithEscaped(lTitleString); // String may include "\n" which needs to be escaped to "\\n" + CodePageGuestToHostUTF8(lTitle, lTitleString.c_str()); + bool result=tinyfd_messageBox(lTitle, lMessage, aDialogType, aIconType, aDefaultButton); + free(lMessage); + free(lTitle); +#else + size_t msgLen = lDialogString.length() + 1; + size_t titleLen = lTitleString.length() + 1; + size_t typeLen = lDialogTypeStr.length() + 1; + size_t iconLen = lIconTypeStr.length() + 1; + + uint16_t* utf16Message = (uint16_t*)malloc(msgLen * 2); + uint16_t* utf16Title = (uint16_t*)malloc(titleLen * 2); + uint16_t* utf16Type = (uint16_t*)malloc(typeLen * 2); + uint16_t* utf16Icon = (uint16_t*)malloc(iconLen * 2); + + if(!utf16Message || !utf16Title || !utf16Type || !utf16Icon) { + free(utf16Message); free(utf16Title); free(utf16Type); free(utf16Icon); + return false; + } + + CodePageGuestToHostUTF16(utf16Message, lDialogString.c_str()); + CodePageGuestToHostUTF16(utf16Title, lTitleString.c_str()); + CodePageGuestToHostUTF16(utf16Type, lDialogTypeStr.c_str()); + CodePageGuestToHostUTF16(utf16Icon, lIconTypeStr.c_str()); + + SanitizeUTF16Newlines(utf16Message, msgLen); + int result = tinyfd_messageBoxW( + (wchar_t const*)utf16Title, + (wchar_t const*)utf16Message, + (wchar_t const*)utf16Type, + (wchar_t const*)utf16Icon, + aDefaultButton + ); + + free(utf16Message); + free(utf16Title); + free(utf16Type); + free(utf16Icon); +#endif MAPPER_ReleaseAllKeys(); GFX_LosingFocus(); if (fs&&!sdl.desktop.fullscreen) GFX_SwitchFullScreen(); - return ret; + return result; #else return true; #endif @@ -1121,35 +1354,35 @@ bool CheckQuit(void) { if (sdl.desktop.fullscreen) GFX_SwitchFullScreen(); if (warn == "true") { if (!quit) { - systemmessagebox("Quit DOSBox-X warning","Quitting from DOSBox-X with this is currently disabled.","ok", "warning", 1); + systemmessagebox("Quit DOSBox-X warning", MSG_Get("QUIT_DISABLED"),"ok", "warning", 1); return false; } else - return systemmessagebox("Quit DOSBox-X warning","This will quit from DOSBox-X.\nAre you sure?","yesno", "question", 1); + return systemmessagebox("Quit DOSBox-X warning", MSG_Get("QUIT_CONFIRM"),"yesno", "question", 1); } else if (warn == "false") return true; if (dos_kernel_disabled&&strcmp(RunningProgram, "DOSBOX-X")) { if (!quit) { - systemmessagebox("Quit DOSBox-X warning","You cannot quit DOSBox-X while running a guest system.","ok", "warning", 1); + systemmessagebox("Quit DOSBox-X warning", MSG_Get("QUIT_GUEST_DISABLED"),"ok", "warning", 1); return false; } else - return systemmessagebox("Quit DOSBox-X warning","You are currently running a guest system.\nAre you sure to quit anyway now?","yesno", "question", 1); + return systemmessagebox("Quit DOSBox-X warning", MSG_Get("QUIT_GUEST_CONFIRM"),"yesno", "question", 1); } if (warn == "autofile") for (uint8_t handle = 0; handle < DOS_FILES; handle++) { if (Files[handle] && (Files[handle]->GetName() == NULL || strcmp(Files[handle]->GetName(), "CON")) && (Files[handle]->GetInformation()&DeviceInfoFlags::Device) == 0) { if (!quit) { - systemmessagebox("Quit DOSBox-X warning","You cannot quit DOSBox-X while one or more files are open.","ok", "warning", 1); + systemmessagebox("Quit DOSBox-X warning", MSG_Get("QUIT_FILE_OPEN_DISABLED"),"ok", "warning", 1); return false; } else - return systemmessagebox("Quit DOSBox-X warning","It may be unsafe to quit from DOSBox-X right now\nbecause one or more files are currently open.\nAre you sure to quit anyway now?","yesno", "question", 1); + return systemmessagebox("Quit DOSBox-X warning", MSG_Get("QUIT_FILE_OPEN_CONFIRM"),"yesno", "question", 1); } } else if (RunningProgram&&strcmp(RunningProgram, "DOSBOX-X")&&strcmp(RunningProgram, "COMMAND")&&strcmp(RunningProgram, "4DOS")) { if (!quit) { - systemmessagebox("Quit DOSBox-X warning","You cannot quit DOSBox-X while running a program or game.","ok", "warning", 1); + systemmessagebox("Quit DOSBox-X warning",MSG_Get("QUIT_PROGRAM_DISABLED"),"ok", "warning", 1); return false; } else - return systemmessagebox("Quit DOSBox-X warning","You are currently running a program or game.\nAre you sure to quit anyway now?","yesno", "question", 1); + return systemmessagebox("Quit DOSBox-X warning", MSG_Get("QUIT_PROGRAM_CONFIRM"),"yesno", "question", 1); } #endif return true; @@ -1276,7 +1509,7 @@ bool pause_on_vsync = false; static bool IsFullscreen() { if (sdl.window == NULL) return false; uint32_t windowFlags = SDL_GetWindowFlags(sdl.window); - if (windowFlags & SDL_WINDOW_FULLSCREEN_DESKTOP) return true; + if (windowFlags & SDL_WINDOW_FULLSCREEN_DESKTOP || windowFlags & SDL_WINDOW_FULLSCREEN) return true; return false; } #endif @@ -1601,14 +1834,26 @@ SDL_Window* GFX_SetSDLWindowMode(uint16_t width, uint16_t height, SCREEN_TYPES s */ if (!sdl.window || (lastType != screenType) + || ( screenType == SCREEN_OPENGL && ( !GFX_IsFullscreen() && ( SDL_GetWindowFlags(sdl.window) & SDL_WINDOW_FULLSCREEN ))) // || (currWidth != width) || (currHeight != height) // || (glwindow != (0 != (SDL_GetWindowFlags(sdl.window) & SDL_WINDOW_OPENGL))) // || (fullscreen && (0 == (SDL_GetWindowFlags(sdl.window) & SDL_WINDOW_FULLSCREEN))) // || (fullscreen != (SDL_WINDOW_FULLSCREEN == (SDL_GetWindowFlags(sdl.window) & SDL_WINDOW_FULLSCREEN))) // || (fullscreen && ((width != currWidth) || (height != currHeight))) ) { + /* Save window position before destroying it */ + int saved_x = SDL_WINDOWPOS_UNDEFINED; + int saved_y = SDL_WINDOWPOS_UNDEFINED; + uint32_t saved_flags = 0; + lastType = screenType; if (sdl.window) { + const uint32_t fs_flags = + SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP; + saved_flags = SDL_GetWindowFlags(sdl.window); + if(!(saved_flags & SDL_WINDOW_FULLSCREEN)) { + SDL_GetWindowPosition(sdl.window, &saved_x, &saved_y); + } SDL_DestroyWindow(sdl.window); } @@ -1622,6 +1867,15 @@ SDL_Window* GFX_SetSDLWindowMode(uint16_t width, uint16_t height, SCREEN_TYPES s | (dpi_aware_enable ? SDL_WINDOW_ALLOW_HIGHDPI : 0)); if (sdl.window) { GFX_SetTitle(-1, -1, -1, false); //refresh title. + if(saved_flags & SDL_WINDOW_MAXIMIZED) { + SDL_MaximizeWindow(sdl.window); + } + else if(posx < 0 || posy < 0) + SDL_SetWindowPosition(sdl.window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); + else if(saved_x != SDL_WINDOWPOS_UNDEFINED && saved_y != SDL_WINDOWPOS_UNDEFINED && + !(saved_flags & SDL_WINDOW_MAXIMIZED)) { + SDL_SetWindowPosition(sdl.window, saved_x, saved_y); // restore position. + } } sdl.surface = SDL_GetWindowSurface(sdl.window); SDL_GetWindowSize(sdl.window, &currWidth, &currHeight); @@ -1649,14 +1903,29 @@ SDL_Window* GFX_SetSDLWindowMode(uint16_t width, uint16_t height, SCREEN_TYPES s * On Android, desktop res is the only way. */ SDL_SetWindowResizable(sdl.window, SDL2_resize_enable ? SDL_TRUE : SDL_FALSE); + SDL_WindowFlags flags = SDL_WINDOW_FULLSCREEN_DESKTOP; + +#if C_SDL2 + /* + * When modeswitching _is_ enabled let's go with sane values. + */ + bool p_modeswitch = vga.draw.modeswitch_set; + if(p_modeswitch) { + flags = SDL_WINDOW_FULLSCREEN; + width = sdl.draw.width; + height = sdl.draw.height; + } +#endif + if (GFX_IsFullscreen()) { SDL_DisplayMode displayMode; SDL_GetWindowDisplayMode(sdl.window, &displayMode); + displayMode.w = width; displayMode.h = height; SDL_SetWindowDisplayMode(sdl.window, &displayMode); - SDL_SetWindowFullscreen(sdl.window, SDL_WINDOW_FULLSCREEN_DESKTOP); + SDL_SetWindowFullscreen(sdl.window, flags); } else { SDL_SetWindowFullscreen(sdl.window, 0); @@ -1939,9 +2208,15 @@ void drawmenu(Bitu) { #endif void RENDER_Reset(void); +void UpdateUserCursorScreenDimensions(void); Bitu GFX_SetSize(Bitu width, Bitu height, Bitu flags, double scalex, double scaley, GFX_CallBack_t callback) { + +#if C_DIRECT3D && defined(C_SDL2) + //if(sdl.desktop.type == SCREEN_DIRECT3D11) sdl.desktop.want_type = SCREEN_DIRECT3D11; +#endif + if ((width == 0 || height == 0) && !TTF_using()) { E_Exit("GFX_SetSize with width=%d height=%d zero dimensions not allowed",(int)width,(int)height); return 0; @@ -2005,8 +2280,17 @@ Bitu GFX_SetSize(Bitu width, Bitu height, Bitu flags, double scalex, double scal case SCREEN_DIRECT3D: retFlags = OUTPUT_DIRECT3D_SetSize(); break; +#if defined(C_SDL2) + case SCREEN_DIRECT3D11: + retFlags = OUTPUT_DIRECT3D11_SetSize(); + break; +#endif +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + case SCREEN_METAL: + retFlags = OUTPUT_Metal_SetSize(); + break; #endif - #if defined(USE_TTF) case SCREEN_TTF: break; @@ -2091,7 +2375,7 @@ Bitu GFX_SetSize(Bitu width, Bitu height, Bitu flags, double scalex, double scal } #endif UpdateWindowDimensions(); - + UpdateUserCursorScreenDimensions(); #if defined(WIN32) && !defined(HX_DOS) && !defined(_WIN32_WINDOWS) WindowsTaskbarUpdatePreviewRegion(); #endif @@ -2511,6 +2795,14 @@ static void CaptureMouse(bool pressed) { GFX_CaptureMouse(); } +#if defined(C_SDL2) +static void CaptureKeyboard(bool pressed) { + if (pressed) { + GFX_KeyboardCapture(!sdl.capture_keyboard); + } +} +#endif + #if defined (WIN32) STICKYKEYS stick_keys = {sizeof(STICKYKEYS), 0}; void sticky_keys(bool restore){ @@ -2666,9 +2958,9 @@ void GFX_SwitchFullScreen(void) if (ttf.inUse) { if (ttf.fullScrn) { sdl.desktop.fullscreen = false; - if (lastfontsize>0) - OUTPUT_TTF_Select(lastfontsize); - else + //if (lastfontsize>0) + // OUTPUT_TTF_Select(lastfontsize); /* certain lastfontsize will crash DOSBox-X */ + //else OUTPUT_TTF_Select(1); resetFontSize(); #if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU @@ -2699,6 +2991,8 @@ void GFX_SwitchFullScreen(void) } SDL_SetWindowPosition(sdl.window, bx, by); } + else if(posx == -2 && posy == -2) + SDL_SetWindowPosition(sdl.window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); #endif resetreq = true; GFX_ResetScreen(); @@ -2712,6 +3006,10 @@ void GFX_SwitchFullScreen(void) resetFontSize(); } modeSwitched(sdl.desktop.fullscreen); + SetVal("sdl", "fullscreen", sdl.desktop.fullscreen?"true":"false"); + bool is_showmenu=static_cast(control->GetSection("SDL"))->Get_bool("showmenu"); + if(sdl.desktop.fullscreen || !is_showmenu) DOSBox_NoMenu(); + else DOSBox_SetMenu(); return; } #endif @@ -2963,8 +3261,17 @@ bool GFX_StartUpdate(uint8_t* &pixels,Bitu &pitch) #if C_DIRECT3D case SCREEN_DIRECT3D: return OUTPUT_DIRECT3D_StartUpdate(pixels, pitch); +#if defined(C_SDL2) + case SCREEN_DIRECT3D11: + return OUTPUT_DIRECT3D11_StartUpdate(pixels, pitch); + break; +#endif +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + case SCREEN_METAL: + return OUTPUT_Metal_StartUpdate(pixels, pitch); + break; #endif - default: break; } @@ -2998,12 +3305,27 @@ void GFX_EndUpdate(const uint16_t *changedLines) { #if C_EMSCRIPTEN emscripten_sleep(0); #endif - +#if C_OPENGL + bool actually_updating = false; +#endif /* don't present our output if 3Dfx is in OpenGL mode */ if (sdl.desktop.prevent_fullscreen) return; +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + if(sdl.desktop.type == SCREEN_METAL) { + sdl.updating = false; + goto switch_type; + } + else +#endif #if C_DIRECT3D +#if defined(C_SDL2) + if(sdl.desktop.type == SCREEN_DIRECT3D11) { + sdl.updating = false; + goto switch_type; + } +#endif // we may have to do forced update in D3D case if (d3d && d3d->getForceUpdate()); else @@ -3011,7 +3333,7 @@ void GFX_EndUpdate(const uint16_t *changedLines) { if (((sdl.desktop.type != SCREEN_OPENGL) || !RENDER_GetForceUpdate()) && !sdl.updating) return; #if C_OPENGL - bool actually_updating = sdl.updating; + actually_updating = sdl.updating; #endif sdl.updating = false; #if defined(USE_TTF) @@ -3021,6 +3343,7 @@ void GFX_EndUpdate(const uint16_t *changedLines) { } #endif +switch_type: switch (sdl.desktop.type) { case SCREEN_SURFACE: @@ -3054,8 +3377,17 @@ void GFX_EndUpdate(const uint16_t *changedLines) { case SCREEN_DIRECT3D: OUTPUT_DIRECT3D_EndUpdate(changedLines); break; +#if defined(C_SDL2) + case SCREEN_DIRECT3D11: + OUTPUT_DIRECT3D11_EndUpdate(changedLines); + break; +#endif +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + case SCREEN_METAL: + OUTPUT_Metal_EndUpdate(changedLines); + break; #endif - default: break; } @@ -3130,9 +3462,14 @@ Bitu GFX_GetRGB(uint8_t red, uint8_t green, uint8_t blue) { #if C_DIRECT3D case SCREEN_DIRECT3D: - return SDL_MapRGB(sdl.surface->format, red, green, blue); +#if defined(C_SDL2) + case SCREEN_DIRECT3D11: #endif - +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + case SCREEN_METAL: // pixelFormat = MTLPixelFormatBGRA8Unorm +#endif + return SDL_MapRGB(sdl.surface->format, red, green, blue); default: break; } @@ -3180,8 +3517,17 @@ static void GUI_ShutDown(Section * /*sec*/) { case SCREEN_DIRECT3D: OUTPUT_DIRECT3D_Shutdown(); break; +#if defined(C_SDL2) + case SCREEN_DIRECT3D11: + OUTPUT_DIRECT3D11_Shutdown(); + break; +#endif +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + case SCREEN_METAL: + OUTPUT_Metal_Shutdown(); + break; #endif - default: break; } @@ -3589,6 +3935,11 @@ static void GUI_StartUp() { sdl.mouse.ysensitivity = p3->GetSection()->Get_int("ysens"); #if defined(C_SDL2) + // Because we have the option of a dedicated keyboard shortcut to exit + // fullscreen, we don't need an Alt+Tab escape hatch. This lets us + // block it along with everything else, so you can use it in Windows etc. + SDL_SetHint(SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED, "0"); + // Apply raw mouse input setting SDL_SetHintWithPriority(SDL_HINT_MOUSE_RELATIVE_MODE_WARP, section->Get_bool("raw_mouse_input") ? "0" : "1", SDL_HINT_OVERRIDE); #endif @@ -3634,6 +3985,11 @@ static void GUI_StartUp() { item->set_text("Capture mouse"); } +#if defined(C_SDL2) + MAPPER_AddHandler(CaptureKeyboard,MK_f11,MMOD1,"capkeyboard","Capture keyboard", &item); + item->set_text("Capture keyboard"); +#endif + #if defined(C_SDL2) || defined(WIN32) || defined(MACOSX) MAPPER_AddHandler(QuickEdit,MK_nothing, 0,"fastedit", "Quick edit mode", &item); item->set_text("Quick edit: copy on select and paste text"); @@ -3819,6 +4175,42 @@ static void GUI_StartUp() { #if LOG_D3D LOG_MSG("SDL: Direct3D activated"); #endif +#if defined(C_SDL2) + } + else if(output == "direct3d11") + { + if(!init_output) { + switch_to_d3d11_on_startup = true; + OUTPUT_SURFACE_Select(); + init_output = true; + } + else { + OUTPUT_DIRECT3D11_Select(); + d3d11_init(); + sdl.desktop.want_type = SCREEN_DIRECT3D11; + switch_to_d3d11_on_startup = false; + } +#endif +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + } + else if(output == "metal") + { + if(!init_output) { + switch_to_metal_on_startup = true; +#if C_OPENGL + OUTPUT_OPENGL_Select(GLBilinear); +#else + OUTPUT_SURFACE_Select(); +#endif + init_output = true; + } + else { + OUTPUT_Metal_Select(); + metal_init(); + sdl.desktop.want_type = SCREEN_METAL; + switch_to_metal_on_startup = false; + } #endif } #if defined(USE_TTF) @@ -3944,6 +4336,26 @@ static void GUI_StartUp() { #if defined(C_SDL2) SDL_SetWindowTitle(sdl.window,"DOSBox-X"); if (posx >= 0 && posy >= 0) { +#if WIN32 + HWND hwnd = GetHWND(); + HMONITOR monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); + MONITORINFO info; + info.cbSize = sizeof(info); + GetMonitorInfo(monitor, &info); + + int x = info.rcWork.left; + int y = info.rcWork.top; + + SetWindowPos( + hwnd, nullptr, + x, y, + 0, 0, + SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE + ); + + SDL_GetWindowPosition(sdl.window, &x, &y); // get (0,0) position + SDL_SetWindowPosition(sdl.window, posx, y + posy); +#else if (sdl.displayNumber>0) { int displays = SDL_GetNumVideoDisplays(); SDL_Rect bound; @@ -3958,11 +4370,16 @@ static void GUI_StartUp() { } } SDL_SetWindowPosition(sdl.window, posx, posy); +#endif } #else SDL_WM_SetCaption("DOSBox-X",VERSION); #endif +#if defined(C_SDL2) + GFX_KeyboardCapture(section->Get_bool("keyboard_capture")); +#endif + /* Please leave the Splash screen stuff in working order in DOSBox-X. We spend a lot of time making DOSBox-X. */ //ShowSplashScreen(); /* I will keep the splash screen alive. But now, the BIOS will do it --J.C. */ @@ -3999,6 +4416,28 @@ bool Mouse_IsLocked() return sdl.mouse.locked; } +#if defined(C_SDL2) +void GFX_KeyboardCapture(bool enable) { + if (sdl.window) { + SDL_SetWindowKeyboardGrab(sdl.window, enable ? SDL_TRUE : SDL_FALSE); + + // Make sure we're using the true value of the current grabbed state. + bool grabbed = SDL_GetWindowKeyboardGrab(sdl.window) == SDL_TRUE; + sdl.capture_keyboard = grabbed; + + if (grabbed) + LOG_MSG("Capturing keyboard"); + else + LOG_MSG("Releasing keyboard"); + } + + // Make sure our menu item is refreshed, to ensure the checkmark value next + // to the item is up-to-date. + if (mainMenu.item_exists("mapper_capkeyboard")) + mainMenu.get_item("mapper_capkeyboard").check(sdl.capture_keyboard).refresh_item(mainMenu); +} +#endif + static void RedrawScreen(uint32_t nWidth, uint32_t nHeight) { (void)nWidth;//UNUSED (void)nHeight;//UNUSED @@ -4308,6 +4747,16 @@ bool GFX_CursorInOrNearScreen(int wx,int wy) { return (wx >= minx && wx < maxx) && (wy >= miny && wy < maxy); } +void UpdateUserCursorScreenDimensions(void) { + user_cursor_sw = sdl.clip.w; + user_cursor_sh = sdl.clip.h; + + if (video_debug_overlay && vga.draw.width < render.src.width) { + user_cursor_sw = (vga.draw.width*user_cursor_sw)/render.src.width; + user_cursor_sh = (vga.draw.height*user_cursor_sh)/render.src.height; + } +} + static void HandleMouseMotion(SDL_MouseMotionEvent * motion) { bool inputToScreen = false; @@ -4390,13 +4839,8 @@ static void HandleMouseMotion(SDL_MouseMotionEvent * motion) { user_cursor_y = motion->y - sdl.clip.y; user_cursor_locked = sdl.mouse.locked; user_cursor_emulation = sdl.mouse.emulation; - user_cursor_sw = sdl.clip.w; - user_cursor_sh = sdl.clip.h; - if (video_debug_overlay && vga.draw.width < render.src.width) { - user_cursor_sw = (vga.draw.width*user_cursor_sw)/render.src.width; - user_cursor_sh = (vga.draw.height*user_cursor_sh)/render.src.height; - } + UpdateUserCursorScreenDimensions(); auto xrel = static_cast(motion->xrel) * sdl.mouse.xsensitivity / 100.0f; auto yrel = static_cast(motion->yrel) * sdl.mouse.ysensitivity / 100.0f; @@ -6643,7 +7087,13 @@ void SDL_SetupConfigSection() { #if C_GAMELINK "gamelink", #endif - "ddraw", "direct3d", + "ddraw", +#if C_DIRECT3D + "direct3d", "direct3d11", +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + "metal", +#endif nullptr }; Pint = sdl_sec->Add_int("display", Property::Changeable::Always, 0); @@ -6651,7 +7101,7 @@ void SDL_SetupConfigSection() { Pint->SetBasic(true); Pstring = sdl_sec->Add_string("output", Property::Changeable::Always, "default"); - Pstring->Set_help("What video system to use for output (openglnb = OpenGL nearest; openglpp = OpenGL perfect; ttf = TrueType font output)."); + Pstring->Set_help("What video system to use for output (surface = software (SDL_Surface); openglnb = OpenGL nearest; openglpp = OpenGL perfect; ttf = TrueType font output)."); Pstring->Set_values(outputs); Pstring->SetBasic(true); @@ -6757,6 +7207,18 @@ void SDL_SetupConfigSection() { "Putting a minus sign in front will disable the conversion for guest systems."); Pint->SetBasic(true); +#if defined(C_SDL2) + Pbool = sdl_sec->Add_bool("keyboard_capture", Property::Changeable::Always, false); + Pbool->Set_help("Capture the keyboard, inhibiting window manager shortcuts.\n" + "Be warned, enabling this runs the risk of getting trapped inside " + "DOSBox-X, however it can be useful for passing combinations like Alt+F4 " + "through to DOS applications that use them, like WordPerfect.\n" + "Note that if another application attempts to grab the keyboard, DOSBox-X " + "will lose its grab over the keyboard. Additionally, not all shortcuts " + "can be inhibited on all platforms, for example Ctrl+Alt+Del on Windows."); + Pbool->SetBasic(true); +#endif + Pbool = sdl_sec->Add_bool("waitonerror",Property::Changeable::Always, true); Pbool->Set_help("Wait before closing the console if DOSBox-X has an error."); Pbool->SetBasic(true); @@ -6904,8 +7366,8 @@ static void launcheditor(std::string edit) { if (control->configfiles.size() && control->configfiles.front().size()) execlp(edit.c_str(),edit.c_str(),control->configfiles.front().c_str(),(char*) 0); std::string path,file; - Cross::CreatePlatformConfigDir(path); - Cross::GetPlatformConfigName(file); + path = Cross::CreatePlatformConfigDir(); + file = Cross::GetPlatformConfigName(); path += file; FILE* f = fopen(path.c_str(),"r"); if(!f && !control->PrintConfig(path.c_str())) { @@ -6945,7 +7407,7 @@ static void launchcaptures(std::string const& edit) { exit(1); } else { path = ""; - Cross::CreatePlatformConfigDir(path); + path = Cross::CreatePlatformConfigDir(); path += file; Cross::CreateDir(path); stat(path.c_str(),&cstat); @@ -6975,7 +7437,7 @@ static void launchsaves(std::string const& edit) { exit(1); } else { path = ""; - Cross::CreatePlatformConfigDir(path); + path = Cross::CreatePlatformConfigDir(); path += file; Cross::CreateDir(path); stat(path.c_str(),&cstat); @@ -6992,8 +7454,8 @@ static void launchsaves(std::string const& edit) { static void printconfiglocation() { std::string path,file; - Cross::CreatePlatformConfigDir(path); - Cross::GetPlatformConfigName(file); + path =Cross::CreatePlatformConfigDir(); + file = Cross::GetPlatformConfigName(); path += file; FILE* f = fopen(path.c_str(),"r"); @@ -7014,8 +7476,8 @@ static void eraseconfigfile() { show_warning("Warning: dosbox-x.conf (or dosbox.conf) exists in current working directory.\nThis will override the configuration file at runtime.\n"); } std::string path,file; - Cross::GetPlatformConfigDir(path); - Cross::GetPlatformConfigName(file); + path = Cross::GetPlatformConfigDir(); + file = Cross::GetPlatformConfigName(); path += file; f = fopen(path.c_str(),"r"); if (!f) exit(0); @@ -7034,7 +7496,7 @@ static void erasemapperfile() { } std::string path,file=MAPPERFILE; - Cross::GetPlatformConfigDir(path); + path = Cross::GetPlatformConfigDir(); path += file; FILE* f = fopen(path.c_str(),"r"); if (!f) exit(0); @@ -7257,6 +7719,7 @@ bool DOSBOX_parse_argv() { fprintf(stderr," -nolog Do not log anything to log file\n"); fprintf(stderr," -tests Run unit tests to test the DOSBox-X code\n"); fprintf(stderr," -print-ticks (Debug) Print emulator time and SDL_GetTicks()\n"); + fprintf(stderr," -force-gfx-hardware Force render scaler system to act as if GFX_HARDWARE\n"); fprintf(stderr,"\n"); #if defined(WIN32) @@ -7293,6 +7756,9 @@ bool DOSBOX_parse_argv() { else if (optname == "break-start") { control->opt_break_start = true; } + else if (optname == "force-gfx-hardware") { + control->opt_force_gfx_hardware = true; + } else if (optname == "silent") { putenv(const_cast("SDL_AUDIODRIVER=dummy")); putenv(const_cast("SDL_VIDEODRIVER=dummy")); @@ -7599,9 +8065,13 @@ void PRINTER_Init(); void DONGLE_Init(); void DOS_Init(); void XMS_Init(); +#if !defined(OSFREE) void EMS_Init(); +#endif void MOUSE_Init(); +#if !defined(OSFREE) void DOS_KeyboardLayout_Init(); +#endif void CDROM_Image_Init(); void MSCDEX_Init(); void DRIVES_Init(); @@ -7653,8 +8123,10 @@ void Windows_DPI_Awareness_Init() { bool VM_Boot_DOSBox_Kernel() { if (!dos_kernel_disabled) { +#if !defined(OSFREE) RemoveEMSPageFrame(); RemoveUMBBlock(); +#endif DisableINT33(); DOS_GetMemory_unmap(); VFILE_Shutdown(); @@ -7662,13 +8134,16 @@ bool VM_Boot_DOSBox_Kernel() { DOS_UninstallMisc(); SBLASTER_DOS_Shutdown(); GUS_DOS_Shutdown(); +#if !defined(OSFREE) EMS_DoShutDown(); +#endif XMS_DoShutDown(); DOS_DoShutDown(); DispatchVMEvent(VM_EVENT_DOS_SURPRISE_REBOOT); // <- apparently we rebooted without any notification (such as jmp'ing to FFFF:0000) dos_kernel_disabled = true; + dos_kernel_shutdown_mcb = true; #if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU Reflect_Menu(); @@ -7683,6 +8158,7 @@ bool VM_Boot_DOSBox_Kernel() { /* DOS kernel init */ dos_kernel_disabled = false; // FIXME: DOS_Init should install VM callback handler to set this + dos_kernel_shutdown_mcb = false; void DOS_Startup(Section* sec); DOS_Startup(NULL); maincp = 0; @@ -7704,17 +8180,25 @@ bool VM_Boot_DOSBox_Kernel() { /* Date/time */ DOS_InitClock(); +#if !defined(OSFREE) /* keyboard mapping, at this point in CONFIG.SYS parsing, right? */ void DOS_KeyboardLayout_Startup(Section* sec); DOS_KeyboardLayout_Startup(NULL); +#endif /* Most MS-DOS installations have a DEVICE=C:\HIMEM.SYS somewhere near the top of their CONFIG.SYS */ void XMS_Startup(Section *sec); XMS_Startup(NULL); +#if !defined(OSFREE) /* And then after that, usually a DEVICE=C:\EMM386.EXE just after HIMEM.SYS */ void EMS_Startup(Section* sec); EMS_Startup(NULL); +#endif + + SHELL_MessagesInit(); + CONFIGSHELL_Init(); + CONFIGSHELL_Run(); DispatchVMEvent(VM_EVENT_DOS_INIT_CONFIG_SYS_DONE); // <- we just finished executing CONFIG.SYS SHELL_Init(); // <- NTS: this will change CPU instruction pointer! @@ -7983,11 +8467,142 @@ std::wstring win32_prompt_folder(const char *default_folder) { void CPU_OnReset(Section* sec); +#if defined(C_HAVE_DUKTAPE) +static void jsc_print_multiline_string(enum LOG_SEVERITIES lsev,const char *prefix,const char *s) { + std::string prefixspc; + std::string r; + int line = 0; + + prefixspc.resize(strlen(prefix)); + for (size_t i=0;i < prefixspc.length();i++) prefixspc[i] = ' '; + + while (*s) { + if (*s == '\n') { + LOG(LOG_MISC,lsev)("%s: %s",line == 0 ? prefix : prefixspc.c_str(),r.c_str()); + r.clear(); + line++; + } + else if (*s >= ' ' || *s < 0) { + r += *s; + } + + s++; + } + + if (!r.empty()) + LOG(LOG_MISC,lsev)("%s: %s",line == 0 ? prefix : prefixspc.c_str(),r.c_str()); +} + +/* console.log(...) + * _emu.log(...) */ +static duk_ret_t jsc_console_log(duk_context *ctx) { + std::string r; + const char *s; + int line = 0; + + duk_idx_t tp = duk_get_top(ctx); + for (duk_idx_t i=0;i < tp;i++) { + if (!r.empty()) r += " "; + + s = duk_to_string(ctx,i); + if (s) { + while (*s) { + if (*s == '\n') { + LOG(LOG_MISC,LOG_NORMAL)("%s: %s",line == 0 ? "console.log()" : " ",r.c_str()); + r.clear(); + line++; + } + else if (*s >= ' ' || *s < 0) { + r += *s; + } + + s++; + } + } + } + + if (!r.empty()) + LOG(LOG_MISC,LOG_NORMAL)("%s: %s",line == 0 ? "console.log()" : " ",r.c_str()); + + return 0; +} + +void jsc_load_file(const char *jskey,const char *script) { + /* eval("...") -> [js_idx] object */ + duk_push_string(js_heap,"_emu._js"); + duk_eval(js_heap); + if (!duk_is_object(js_heap,-1)) { + duk_pop(js_heap); + return; + } + + duk_idx_t js_idx = duk_get_top(js_heap) - duk_idx_t(1); + char *tmp = NULL; + off_t sz = 0; + int fd = -1; + + fd = open(script,O_RDONLY|O_BINARY); + if (fd >= 0) { + sz = lseek(fd,0,SEEK_END); + if (sz > 0 && sz <= (16*1024*1024) && lseek(fd,0,SEEK_SET) == 0) + tmp = (char*)malloc((size_t)sz + 1); + + if (tmp) { + int r = read(fd,tmp,sz); + if (r < 0) r = 0; + tmp[r] = 0; + + LOG(LOG_MISC,LOG_DEBUG)("Loading %s %s",jskey,script); + + /* in: + * + * out: + * */ + duk_push_string(js_heap, script); + duk_compile_lstring_filename(js_heap,0,tmp,(duk_size_t)r); + + duk_push_string(js_heap,jskey);//key + duk_dup(js_heap,-2);//value + duk_put_prop(js_heap,js_idx);//[js_idx].[jskey] = [function] + duk_pop(js_heap);//discard function + + free((void*)tmp); + } + + close(fd); + } + + duk_pop(js_heap);//discard [js_idx] object +} + +void jsc_run(const char *jskey) { + duk_push_string(js_heap,(std::string("_emu._js['")+jskey+"']").c_str()); + duk_eval(js_heap); + if (duk_is_callable(js_heap,-1)) { + LOG(LOG_MISC,LOG_DEBUG)("JS calling %s",jskey); + if (duk_pcall(js_heap,0)) { + if (duk_is_error(js_heap,-1)) { + LOG(LOG_MISC,LOG_ERROR)("JS error in %s",jskey); + + duk_dup(js_heap,-1); + jsc_print_multiline_string(LOG_ERROR,"JS error",duk_safe_to_string(js_heap,-1)); + duk_pop(js_heap); + + duk_dup(js_heap,-1); + jsc_print_multiline_string(LOG_DEBUG,"JS error stack",duk_safe_to_stacktrace(js_heap,-1)); + duk_pop(js_heap); + } + } + } + duk_pop(js_heap);//discard retval or whatever was not a function. will be an error object if JS error +} +#endif + void DISP2_Init(uint8_t color), DISP2_Shut(); //extern void UI_Init(void); void grGlideShutdown(void); int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { -#if (defined __i386__ || defined __x86_64__) && (defined BSD || defined LINUX) +#if (defined __i386__ || defined __x86_64__) && (!defined IS_OLDMACOS && (defined BSD || defined LINUX)) dropPrivilegesTemp(); #endif CommandLine com_line(argc,argv); @@ -8000,6 +8615,7 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); #endif + /* -- parse command line arguments */ if (!DOSBOX_parse_argv()) return 1; @@ -8178,13 +8794,16 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { std::string workdiropt = "default"; std::string workdirdef = ""; struct stat st; + + control->ParseConfigFile("dosbox-x.conf"); + if (!control->opt_defaultconf && control->config_file_list.empty() && stat("dosbox-x.conf", &st) && stat("dosbox.conf", &st)) { /* load the global config file first */ std::string tmp,config_path,config_combined; /* -- Parse configuration files */ - Cross::GetPlatformConfigDir(config_path); - Cross::GetPlatformConfigName(tmp); + config_path = Cross::GetPlatformConfigDir(); + tmp = Cross::GetPlatformConfigName(); if (exepath.size()) { control->ParseConfigFile((exepath + "dosbox-x.conf").c_str()); @@ -8222,7 +8841,7 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { usecfgdir = false; } else if (workdiropt == "userconfig") { std::string config_path; - Cross::GetPlatformConfigDir(config_path); + config_path = Cross::GetPlatformConfigDir(); if (config_path.size()) { if (chdir(config_path.c_str()) == -1) { LOG(LOG_GUI, LOG_ERROR)("sdlmain.cpp main() failed to change directories for workdiropt 'userconfig'."); @@ -8251,6 +8870,7 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { int workdirsave = 0; std::string workdirsaveas = ""; + #if defined(MACOSX) || defined(LINUX) || (defined(WIN32) && !defined(HX_DOS)) { char cwd[512] = "."; @@ -8270,7 +8890,7 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { } #endif std::string res_path; - Cross::GetPlatformResDir(res_path); + res_path = Cross::GetPlatformResDir(); if(stat((res_path + "dosbox-x.conf").c_str(), &st) == 0) { if(S_ISREG(st.st_mode)) { control->opt_promptfolder = 0; @@ -8284,8 +8904,10 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { if (control->opt_promptfolder < 0) control->opt_promptfolder = 1; #else - if (control->opt_promptfolder < 0) - control->opt_promptfolder = (!isatty(0) || !strcmp(cwd,"/")) ? 1 : 0; + // std::unique_ptr cwd(new char[PATH_MAX]); + // // char cwd[512] = "."; + // if (control->opt_promptfolder < 0 && getcwd(cwd.get(), PATH_MAX) != nullptr) + // control->opt_promptfolder = (!isatty(0) || !strcmp(cwd.get(), "/")) ? 1 : 0; #endif if (control->opt_promptfolder == 1 && workdiropt == "default" && workdirdef.size()) { control->opt_promptfolder = 0; @@ -8316,12 +8938,15 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { E_Exit("Can't init SDL %s",SDL_GetError()); #endif - char folder[512], *default_folder=folder; - std::string dir = workdirdef.empty()?(exepath.size()?exepath:""):workdirdef; - if (dir.size()&&dir.size()<512) - strcpy(default_folder, dir.c_str()); - else - default_folder = NULL; + std::unique_ptr folder(new char[PATH_MAX]); + char* default_folder = nullptr; + + std::string dir = workdirdef.empty() ? (!exepath.empty() ? exepath : "") : workdirdef; + if (!dir.empty() && dir.size() < PATH_MAX) { + std::strncpy(folder.get(), dir.c_str(), PATH_MAX); + folder[PATH_MAX-1] = '\0'; // Null terminate just in case + default_folder = folder.get(); + } const char *confirmstr = "Do you want to use the selected folder as the DOSBox-X working directory in future sessions?\n\nIf you select Yes, DOSBox-X will not prompt for a folder again.\nIf you select No, DOSBox-X will always prompt for a folder when it runs.\nIf you select Cancel, DOSBox-X will ask this question again next time."; const char *quitstr = "You have not selected a valid path. Do you want to run DOSBox-X with the current path as the DOSBox-X working directory?\n\nDOSBox-X will exit if you select No."; #if defined(MACOSX) @@ -8403,9 +9028,9 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { #endif std::string tmp, config_path, res_path, config_combined; /* -- Parse configuration files */ - Cross::GetPlatformConfigDir(config_path); - Cross::GetPlatformResDir(res_path); - Cross::GetPlatformConfigName(tmp); + config_path = Cross::GetPlatformConfigDir(); + res_path = Cross::GetPlatformResDir(); + tmp = Cross::GetPlatformConfigName(); config_combined = config_path + tmp; { @@ -8459,7 +9084,7 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { tsec->HandleInputline("working directory option=autoprompt"); } //Try to create the userlevel configfile. - Cross::CreatePlatformConfigDir(config_path); + config_path = Cross::CreatePlatformConfigDir(); LOG(LOG_MISC,LOG_DEBUG)("Attempting to write config file according to -userconf, to %s",config_combined.c_str()); if (control->PrintConfig(config_combined.c_str())) { @@ -8497,31 +9122,37 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { if (!control->opt_defaultconf) { /* -- -- if none found, use dosbox-x.conf or dosbox.conf */ - if (!control->configfiles.size()) control->ParseConfigFile("dosbox-x.conf"); - if (!control->configfiles.size()) control->ParseConfigFile("dosbox.conf"); - if (!control->configfiles.size()) { - std::string exepath=GetDOSBoxXPath(); - if (exepath.size()) { - control->ParseConfigFile((exepath + "dosbox-x.conf").c_str()); - if (!control->configfiles.size()) control->ParseConfigFile((exepath + "dosbox.conf").c_str()); + std::string cur_dir = "."; + // std::unique_ptr cwd(new char[PATH_MAX]); + // if(getcwd(cwd.get(), PATH_MAX) != nullptr) { + // cur_dir = std::string(cwd.get()) + CROSS_FILESPLIT; + // } + // else { + // cur_dir.clear(); + // } + const std::string config_paths[] = { + cur_dir + "dosbox-x.conf", + cur_dir + "dosbox.conf", + exepath.empty() ? "" : exepath + "dosbox-x.conf", + exepath.empty() ? "" : exepath + "dosbox.conf", + res_path.empty() ? "": res_path + "dosbox-x.conf", /* resource level conf */ + config_path.empty() ? "" : config_path + "dosbox-x.conf", /* user level conf */ + config_combined /* user level conf (default name)*/ + }; + + for (const auto& path : config_paths) { + if (!control->configfiles.size() && !path.empty()) { + LOG(LOG_MISC, LOG_NORMAL)("Trying config: %s\n", path.c_str()); + control->ParseConfigFile(path.c_str()); } } - - /* -- -- if none found, use resource level conf */ - if (!control->configfiles.size()) control->ParseConfigFile((res_path + "dosbox-x.conf").c_str()); - - /* -- -- if none found, use userlevel conf */ - if (!control->configfiles.size()) control->ParseConfigFile((config_path + "dosbox-x.conf").c_str()); - if (!control->configfiles.size()) { - control->ParseConfigFile(config_combined.c_str()); - } - /* -- -- if none found, create userlevel conf */ if(!control->configfiles.size()) { - Cross::CreatePlatformConfigDir(config_path); - control->PrintConfig(config_combined.c_str()); - control->ParseConfigFile(config_combined.c_str()); // Load the conf file created above - if(control->configfiles.size()) LOG_MSG("CONFIG: Created and loaded user config file %s", config_combined.c_str()); + if(!config_combined.empty()){ + control->PrintConfig(config_combined.c_str()); + control->ParseConfigFile(config_combined.c_str()); // Load the conf file created above + if(control->configfiles.size()) LOG_MSG("CONFIG: Created and loaded user config file %s", config_combined.c_str()); + } else LOG_MSG("CONFIG: Warning: User config file not found. Try specifying it with -conf option or put it in the current directory."); } if (control->configfiles.size()) { @@ -8821,7 +9452,7 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { } } else if (workdiropt == "userconfig") { std::string config_path; - Cross::GetPlatformConfigDir(config_path); + config_path = Cross::GetPlatformConfigDir(); if(config_path.size()) { if(chdir(config_path.c_str()) == -1) { LOG(LOG_GUI, LOG_ERROR)("sdlmain.cpp main() failed to change directories for workdiropt 'userconfig'."); @@ -8882,6 +9513,12 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { /* -- initialize logging first, so that higher level inits can report problems to the log file */ LOG::Init(); +#if defined(C_HAVE_DUKTAPE) + LOG(LOG_MISC,LOG_NORMAL)("Initializing ECMA heap"); + js_heap = duk_create_heap(NULL,NULL,NULL,NULL,NULL);//TODO: fatal exit handler that we can direct towards E_Exit() + if (!js_heap) E_Exit("Unable to initialize ECMA heap");//TODO: or maybe this emulator can run without ECMAScript even if compiled +#endif + #if defined(WIN32) && !defined(C_SDL2) && !defined(HX_DOS) && !defined(_WIN32_WINDOWS) { DISPLAY_DEVICE dd; @@ -8908,6 +9545,10 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { LOG_MSG("macOS Resource path: %s",MacOSXResPath.c_str()); #endif +#if defined(OSFREE) + LOG_MSG("DOSBox-X OS-Free build -- Built-in MS-DOS emulation is not available"); +#endif + /* -- [debug] setup console */ #if C_DEBUG # if defined(WIN32) && !defined(HX_DOS) && !defined(_WIN32_WINDOWS) @@ -8944,39 +9585,40 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { putenv(const_cast("SDL_DISABLE_LOCK_KEYS=1")); LOG(LOG_GUI,LOG_DEBUG)("SDL 1.2.14 hack: SDL_DISABLE_LOCK_KEYS=1"); #endif - std::string videodriver = static_cast(control->GetSection("sdl"))->Get_string("videodriver"); if (videodriver.size()) { videodriver = "SDL_VIDEODRIVER="+videodriver; putenv((char *)videodriver.c_str()); } - -#ifdef WIN32 - /* hack: Encourage SDL to use windib if not otherwise specified */ - if (getenv("SDL_VIDEODRIVER") == NULL) { + else { + const char* env_driver = getenv("SDL_VIDEODRIVER"); + if(!env_driver || !*env_driver) { +#if defined(LINUX) + putenv("SDL_VIDEODRIVER=x11"); // default to x11 (xwayland) on Linux +#elif defined(WIN32) + /* hack: Encourage SDL to use windib if not otherwise specified */ #if defined(C_SDL2) - LOG(LOG_GUI, LOG_DEBUG)("Win32 hack: setting SDL_VIDEODRIVER=windows because environ variable is not set"); - putenv("SDL_VIDEODRIVER=windows"); + LOG(LOG_GUI, LOG_DEBUG)("Win32 hack: setting SDL_VIDEODRIVER=windows because environ variable is not set"); + putenv("SDL_VIDEODRIVER=windows"); #else - LOG(LOG_GUI,LOG_DEBUG)("Win32 hack: setting SDL_VIDEODRIVER=windib because environ variable is not set"); - putenv("SDL_VIDEODRIVER=windib"); + LOG(LOG_GUI, LOG_DEBUG)("Win32 hack: setting SDL_VIDEODRIVER=windib because environ variable is not set"); + putenv("SDL_VIDEODRIVER=windib"); #endif - sdl.using_windib=true; - } + sdl.using_windib = true; #endif - + } #if defined(WIN32) && defined(C_SDL2) - /* HACK: WASAPI output on Windows 10 isn't working... */ - if (getenv("SDL_AUDIODRIVER") == NULL) { - LOG(LOG_GUI, LOG_DEBUG)("Win32: using directsound audio driver"); - putenv("SDL_AUDIODRIVER=directsound"); - } - if (getenv("SDL_WINDOWS_NO_CLOSE_ON_ALT_F4") == NULL) - putenv("SDL_WINDOWS_NO_CLOSE_ON_ALT_F4=1"); + /* HACK: WASAPI output on Windows 10 isn't working... */ + if(getenv("SDL_AUDIODRIVER") == NULL) { + LOG(LOG_GUI, LOG_DEBUG)("Win32: using directsound audio driver"); + putenv("SDL_AUDIODRIVER=directsound"); + } + if(getenv("SDL_WINDOWS_NO_CLOSE_ON_ALT_F4") == NULL) + putenv("SDL_WINDOWS_NO_CLOSE_ON_ALT_F4=1"); #endif - sdl.init_ignore = true; - + sdl.init_ignore = true; + } { Section_prop *section = static_cast(control->GetSection("dosbox")); assert(section != NULL); @@ -9065,9 +9707,22 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { #if defined(C_SDL2) SDL_version sdl_version; SDL_GetVersion(&sdl_version); + const char* vdrv = SDL_GetCurrentVideoDriver(); + const char* adrv = SDL_GetCurrentAudioDriver(); + videodriver = vdrv ? vdrv : "(unknown)"; + std::string audiodriver = adrv ? adrv : "(unknown)"; LOG_MSG("SDL: version %d.%d.%d, Video %s, Audio %s", sdl_version.major, sdl_version.minor, sdl_version.patch, - SDL_GetCurrentVideoDriver(), SDL_GetCurrentAudioDriver()); + videodriver.c_str(), audiodriver.c_str()); +#if defined(LINUX) + if(videodriver == "wayland") { + LOG_MSG( + "WARNING: SDL is using the Wayland video driver. \n" + "Fullscreen mode switching and display mode changes may be unstable.\n" + "If you encounter crashes, try setting videodriver option to \"x11\" or \"SDL_VIDEODRIVER=x11\"." + ); + } +#endif //defined (LINUX) #endif //defined (C_SDL2) #if defined(__MINGW32__) && defined(C_DEBUG) LOG_MSG("EXPERIMENTAL: Debugger enabled for MinGW build, DOSBox-X crashes depending on the terminal software you use. Launching from command prompt (cmd.exe) is recommended."); @@ -9336,10 +9991,14 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { /* OS init now */ DOS_Init(); DRIVES_Init(); +#if !defined(OSFREE) DOS_KeyboardLayout_Init(); +#endif MOUSE_Init(); // FIXME: inits INT 15h and INT 33h at the same time. Also uses DOS_GetMemory() which is why DOS_Init must come first XMS_Init(); +#if !defined(OSFREE) EMS_Init(); +#endif AUTOEXEC_Init(); #if C_IPX IPX_Init(); @@ -9524,7 +10183,7 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { /* The machine just "powered on", and then reset finished */ if (!VM_PowerOn()) E_Exit("VM failed to power on"); -#if (defined __i386__ || defined __x86_64__) && (defined BSD || defined LINUX) +#if (defined __i386__ || defined __x86_64__) && (!defined IS_OLDMACOS && (defined BSD || defined LINUX)) /* Drop root privileges after they are no longer needed, which is a good practice if the executable is setuid root. @@ -9658,7 +10317,8 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { wait_debugger = false; reboot_machine = false; dos_kernel_shutdown = false; - guest_msdos_mcb_chain = (uint16_t)(~0u); + guest_msdos_mcb_chain = (uint16_t)(~0u); + guest_msdos_dev_chain = (uint16_t)(~0u); #if C_DEBUG if (control->opt_test) ::testing::InitGoogleTest(&argc, argv); @@ -9667,6 +10327,58 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { // Returning after initializing co_switch(_driverCoroutine); +#if defined(C_HAVE_DUKTAPE) + if (js_heap) { + duk_idx_t global_idx = duk_get_top(js_heap); + duk_push_global_object(js_heap); + + duk_idx_t emu_idx = duk_push_object(js_heap); + duk_idx_t js_idx = duk_push_object(js_heap); + + duk_push_string(js_heap,"emulator");//key + duk_push_string(js_heap,"DOSBox-X");//value + duk_put_prop(js_heap,emu_idx);//[emu_idx].emulator = "DOSBox-X" + + duk_push_string(js_heap,"version");//key + duk_push_string(js_heap,VERSION);//value + duk_put_prop(js_heap,emu_idx);//[emu_idx].version = ... + + duk_push_string(js_heap,"_js");//key + duk_dup(js_heap,js_idx);//value + duk_put_prop(js_heap,emu_idx);//[emu_idx]._js = ... + + duk_push_string(js_heap,"_emu");//key + duk_dup(js_heap,emu_idx);//value + duk_put_prop(js_heap,global_idx);//[global_idx]._emu = [emu_idx] + + duk_idx_t console_idx = duk_push_object(js_heap); + + { + duk_idx_t console_log_idx = duk_push_c_function(js_heap,jsc_console_log,DUK_VARARGS); + + duk_push_string(js_heap,"log");//key + duk_dup(js_heap,console_log_idx);//value + duk_put_prop(js_heap,console_idx);//[console_idx].log = [console_log_idx] + + duk_push_string(js_heap,"log");//key + duk_dup(js_heap,console_log_idx);//value + duk_put_prop(js_heap,emu_idx);//[emu_idx].log = [console_log_idx] + } + + duk_push_string(js_heap,"console");//key + duk_dup(js_heap,console_idx);//value + duk_put_prop(js_heap,global_idx);//[global_idx].console = [console_idx] + + Section_prop *section = static_cast(control->GetSection("script")); + { + const char *script = section->Get_string("startup.js"); + if (script && *script) jsc_load_file("startup.js",script); + } + + jsc_run("startup.js"); + } +#endif + /* NTS: CPU reset handler, and BIOS init, has the instruction pointer poised to run through BIOS initialization, * which will then "boot" into the DOSBox-X kernel, and then the shell, by calling VM_Boot_DOSBox_Kernel() */ /* FIXME: throwing int() is a stupid and nondescriptive way to signal shutdown/reset. */ @@ -9760,11 +10472,13 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { else DispatchVMEvent(VM_EVENT_DOS_EXIT_BEGIN); +#if !defined(OSFREE) /* older shutdown code */ RemoveEMSPageFrame(); /* remove UMB block */ if (!keep_umb_on_boot) RemoveUMBBlock(); +#endif /* disable INT 33h mouse services. it can interfere with guest OS paging and control of the mouse */ DisableINT33(); @@ -9802,8 +10516,10 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { DOS_UninstallMisc(); SBLASTER_DOS_Shutdown(); GUS_DOS_Shutdown(); +#if !defined(OSFREE) /* disable Expanded Memory. EMM is a DOS API, not a BIOS API */ EMS_DoShutDown(); +#endif /* and XMS, also a DOS API */ XMS_DoShutDown(); /* and the DOS API in general */ @@ -9816,6 +10532,7 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { * do not attempt to manipulate now-defunct parts of the kernel * such as the environment block */ dos_kernel_disabled = true; + dos_kernel_shutdown_mcb = true; std::string core(static_cast(control->GetSection("cpu"))->Get_string("core")); if (!strcmp(RunningProgram, "LOADLIN") && core == "auto") { @@ -9887,13 +10604,14 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { #if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU Reflect_Menu(); #endif - + finish_prepare = false; if (run_bios) { LOG_MSG("Running a custom BIOS"); boothax = BOOTHAX_NONE; guest_msdos_LoL = 0; guest_msdos_mcb_chain = 0; + guest_msdos_dev_chain = 0; void CPU_Snap_Back_Forget(); /* Shutdown everything. For shutdown to work properly we must force CPU to real mode */ @@ -9939,8 +10657,9 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { boothax = BOOTHAX_NONE; guest_msdos_LoL = 0; guest_msdos_mcb_chain = 0; + guest_msdos_dev_chain = 0; - void CPU_Snap_Back_Forget(); + void CPU_Snap_Back_Forget(); /* Shutdown everything. For shutdown to work properly we must force CPU to real mode */ CPU_Snap_Back_To_Real_Mode(); CPU_Snap_Back_Forget(); @@ -10071,6 +10790,14 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { exitfunctions.pop_front(); } +#if defined(C_HAVE_DUKTAPE) + if (js_heap) { + LOG(LOG_MISC,LOG_NORMAL)("Freeing ECMA heap"); + duk_destroy_heap(js_heap); + js_heap = NULL; + } +#endif + LOG::Exit(); #if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU && defined(WIN32) && !defined(HX_DOS) && (!defined(C_SDL2) && defined(SDL_DOSBOX_X_SPECIAL) || defined(C_SDL2)) @@ -10114,7 +10841,6 @@ int _main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT { * freed resources. */ control = NULL; /* any deref past this point and you deserve to segfault */ } - return saved_opt_test&&testerr?1:0; } diff --git a/src/gui/sdlmain_linux.cpp b/src/gui/sdlmain_linux.cpp index f54690208e3..fb554a9b655 100644 --- a/src/gui/sdlmain_linux.cpp +++ b/src/gui/sdlmain_linux.cpp @@ -478,7 +478,20 @@ static bool Linux_TryXRandrGetDPI(ScreenSizeInfo &info,Display *display,Window w attr.x = x - attr.x; attr.y = y - attr.y; - if ((xr_screen=XRRGetScreenResources(display, DefaultRootWindow(display))) != NULL) { + xr_screen = XRRGetScreenResourcesCurrent(display, DefaultRootWindow(display)); + + if (xr_screen != NULL && xr_screen->noutput == 0) + { + XRRFreeScreenResources(xr_screen); + xr_screen = NULL; + } + + if (xr_screen == NULL) + { + xr_screen = XRRGetScreenResources(display, DefaultRootWindow(display)); + } + + if (xr_screen != NULL) { /* Look for a valid CRTC, don't assume the first is valid (as the StackOverflow example does) */ for (int c=0;c < xr_screen->ncrtc;c++) { XRRCrtcInfo *chk = XRRGetCrtcInfo(display, xr_screen, xr_screen->crtcs[c]); diff --git a/src/gui/whereami.c b/src/gui/whereami.c index 2c85ec1600c..9fa3ec771d0 100644 --- a/src/gui/whereami.c +++ b/src/gui/whereami.c @@ -812,6 +812,72 @@ int WAI_PREFIX(getModulePath)(char* out, int capacity, int* dirname_length) return length; } +#elif defined(__EMSCRIPTEN__) + +#ifdef __cplusplus +} +#endif + +#include +#include + +// JavaScript helper: Writes JS URL into the provided C pointer +EM_JS(int, js_fill_exe_url, (char* out, int capacity), { + var url = (typeof document !== 'undefined' && document.currentScript) + ? document.currentScript.src + : self.location.href; + + var reqLen = lengthBytesUTF8(url); + + if (out && capacity > 0) { + stringToUTF8(url, out, capacity); + } + + return reqLen; +}); + +// JavaScript helper: Writes WASM URL into the provided C pointer +EM_JS(int, js_fill_mod_url, (char* out, int capacity), { + var url = Module['wasmBinaryFile'] || "dosbox-x.wasm"; + var absoluteUrl = new URL(url, document.baseURI).href; + + var reqLen = lengthBytesUTF8(absoluteUrl); + + if (out && capacity > 0) { + stringToUTF8(absoluteUrl, out, capacity); + } + + return reqLen; +}); + +#ifdef __cplusplus +extern "C" { +#endif + +WAI_NOINLINE WAI_FUNCSPEC +int WAI_PREFIX(getExecutablePath)(char* out, int capacity, int* dirname_length) { + int len = js_fill_exe_url(out, capacity); + + if (out && dirname_length) { + char* last_slash = strrchr(out, '/'); + *dirname_length = last_slash ? (int)(last_slash - out) : 0; + } + + return len; +} + +WAI_NOINLINE WAI_FUNCSPEC +int WAI_PREFIX(getModulePath)(char* out, int capacity, int* dirname_length) { + int len = js_fill_mod_url(out, capacity); + + if (out && dirname_length) { + char* last_slash = strrchr(out, '/'); + *dirname_length = last_slash ? (int)(last_slash - out) : 0; + } + + return len; +} + #else #error unsupported platform diff --git a/src/hardware/Makefile.am b/src/hardware/Makefile.am index 48dc52bb113..f1ece297018 100644 --- a/src/hardware/Makefile.am +++ b/src/hardware/Makefile.am @@ -3,7 +3,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/src/aviwriter -I$(top_srcd SUBDIRS = serialport parport reSID mame EXTRA_DIST = opl.cpp opl.h adlib.h dbopl.h hardopl.h pci_devices.h voodoo_types.h voodoo_def.h voodoo_data.h \ - voodoo_interface.h voodoo_emu.h voodoo_vogl.h voodoo_opengl.h + voodoo_interface.h voodoo_emu.h voodoo_vogl.h voodoo_opengl.h mic_input_win32.h noinst_LIBRARIES = libhardware.a @@ -14,7 +14,7 @@ libhardware_a_SOURCES = adlib.cpp dma.cpp gameblaster.cpp hardware.cpp imfc.cpp cmos.cpp disney.cpp gus.cpp mpu401.cpp ipx.cpp ipxserver.cpp ne2000.cpp hardopl.cpp dbopl.cpp innova.cpp dongle.cpp \ voodoo.cpp voodoo_interface.cpp voodoo_emu.cpp ps1_sound.cpp sn76496.h ide.cpp floppy.cpp voodoo_vogl.cpp voodoo_opengl.cpp \ nukedopl.cpp pc98.cpp vga_pc98_gdc.cpp vga_pc98_gdc_draw.cpp vga_pc98_dac.cpp vga_pc98_crtc.cpp vga_pc98_cg.cpp \ - vga_pc98_egc.cpp pc98_fm.cpp glide.cpp vga_ati.cpp pc98_artic.cpp \ + vga_pc98_egc.cpp pc98_fm.cpp glide.cpp vga_ati.cpp pc98_artic.cpp mic_input_win32.cpp \ snd_pc98/sound/opngenc.c snd_pc98/sound/opngeng.c snd_pc98/sound/pcm86c.c snd_pc98/sound/pcm86g.c \ snd_pc98/sound/tms3631c.c snd_pc98/sound/tms3631g.c snd_pc98/sound/psggenc.c snd_pc98/sound/psggeng.c \ snd_pc98/common/parts.c snd_pc98/generic/keydisp.c snd_pc98/sound/adpcmc.c snd_pc98/sound/adpcmg.c \ diff --git a/src/hardware/adlib.cpp b/src/hardware/adlib.cpp index be05f27f035..94901c7cfd1 100644 --- a/src/hardware/adlib.cpp +++ b/src/hardware/adlib.cpp @@ -50,6 +50,95 @@ bool systemmessagebox(char const * aTitle, char const * aMessage, char const * a extern bool show_recorded_filename; extern std::string pathopl; +unsigned int single_opl_write_counter = 0; +bool adlib_pcm_boost = false; +bool adlib_pcm_boost_enable = false; +const int32_t adlib_pcm_gain_base = 1u << 12u; +int32_t adlib_pcm_gain = 0; /* 24.12 */ +int32_t adlib_pcm_gain_max = (unsigned int)((16.0 * 1.5 * (1 << 12)) - adlib_pcm_gain_base); /* see scale 1.5 below, to 24.12, amplify one of 16 channels */ +int32_t adlib_pcm_dc[2] = {0,0}; + +void adlib_boost(int16_t *buf,unsigned int c,unsigned int ch) { + int32_t tmp[2],tmax,t; + + if (ch == 0 || ch > 2) + return; + + while (c > 0) { + tmax = 1; + for (unsigned int n=0;n < ch;n++) { + tmp[n] = (int32_t)buf[n] + (int32_t)adlib_pcm_dc[n]; + if (tmp[n] < 0) adlib_pcm_dc[n]++; + else if (tmp[n] > 0) adlib_pcm_dc[n]--; + tmp[n] += (int32_t)(((int64_t)tmp[n] * (int64_t)adlib_pcm_gain) >> (int64_t)12); + t = tmp[n]; if (t < 0) t = -t; + if (tmax < t) tmax = t; + } + + if (tmax > 32767) { + unsigned int sc = (4096 * 32767) / tmax; + adlib_pcm_gain += adlib_pcm_gain_base; + adlib_pcm_gain = (adlib_pcm_gain * sc) >> 12; + if (adlib_pcm_gain >= adlib_pcm_gain_base) + adlib_pcm_gain -= adlib_pcm_gain_base; + else + adlib_pcm_gain = 0; + } + else if (tmax < 32767) { + if (adlib_pcm_gain < adlib_pcm_gain_max) + adlib_pcm_gain++; + } + + for (unsigned int n=0;n < ch;n++) { + if (tmp[n] > 32767) buf[n] = 32767; + else if (tmp[n] < -32767) buf[n] = -32767; + else buf[n] = tmp[n]; + } + + c--; + buf += ch; + } +} + +void adlib_boost32(int32_t *buf,unsigned int c,unsigned int ch) { + int32_t tmp[2],tmax,t; + + if (ch == 0 || ch > 2) + return; + + while (c > 0) { + tmax = 1; + for (unsigned int n=0;n < ch;n++) { + tmp[n] = (int32_t)buf[n] + (int32_t)adlib_pcm_dc[n]; + if (tmp[n] < 0) adlib_pcm_dc[n]++; + else if (tmp[n] > 0) adlib_pcm_dc[n]--; + tmp[n] += (int32_t)(((int64_t)tmp[n] * (int64_t)adlib_pcm_gain) >> (int64_t)12); + t = tmp[n]; if (t < 0) t = -t; + if (tmax < t) tmax = t; + } + + if (tmax > 32767) { + unsigned int sc = (4096 * 32767) / tmax; + adlib_pcm_gain += adlib_pcm_gain_base; + adlib_pcm_gain = (adlib_pcm_gain * sc) >> 12; + if (adlib_pcm_gain >= adlib_pcm_gain_base) + adlib_pcm_gain -= adlib_pcm_gain_base; + else + adlib_pcm_gain = 0; + } + else if (tmax < 32767) { + if (adlib_pcm_gain < adlib_pcm_gain_max) + adlib_pcm_gain++; + } + + for (unsigned int n=0;n < ch;n++) + buf[n] = tmp[n]; + + c--; + buf += ch; + } +} + namespace OPL2 { #include "opl.cpp" @@ -58,7 +147,7 @@ namespace OPL2 { adlib_write(reg,val); } uint32_t WriteAddr( uint32_t port, uint8_t val ) override { - (void)port;//UNUSED + (void)port;//UNUSED return val; } @@ -68,6 +157,7 @@ namespace OPL2 { Bitu todo = samples > 1024 ? 1024 : samples; samples -= todo; adlib_getsample(buf, (Bits)todo); + if (adlib_pcm_boost) adlib_boost(buf,todo,1/*mono*/); chan->AddSamples_m16( todo, buf ); } } @@ -134,6 +224,7 @@ namespace OPL3 { Bitu todo = samples > 1024 ? 1024 : samples; samples -= todo; adlib_getsample(buf, (Bits)todo); + if (adlib_pcm_boost) adlib_boost(buf,todo,2/*stereo*/); chan->AddSamples_s16( todo, buf ); } } @@ -344,39 +435,39 @@ struct Handler : public Adlib::Handler { chip = ym3812_init(nullptr, OPL2_INTERNAL_FREQ, (uint32_t)rate); } void SaveState( std::ostream& stream ) override { - const char pod_name[32] = "MAMEOPL2"; + const char pod_name[32] = "MAMEOPL2"; - if( stream.fail() ) return; + if( stream.fail() ) return; - WRITE_POD( &pod_name, pod_name ); + WRITE_POD( &pod_name, pod_name ); - //************************************************ - //************************************************ - //************************************************ + //************************************************ + //************************************************ + //************************************************ - FMOPL_SaveState(chip, stream); - } + FMOPL_SaveState(chip, stream); + } - void LoadState( std::istream& stream ) override { - char pod_name[32] = {0}; + void LoadState( std::istream& stream ) override { + char pod_name[32] = {0}; - if( stream.fail() ) return; + if( stream.fail() ) return; - // error checking - READ_POD( &pod_name, pod_name ); - if( strcmp( pod_name, "MAMEOPL2" ) ) { - stream.clear( std::istream::failbit | std::istream::badbit ); - return; - } + // error checking + READ_POD( &pod_name, pod_name ); + if( strcmp( pod_name, "MAMEOPL2" ) ) { + stream.clear( std::istream::failbit | std::istream::badbit ); + return; + } - //************************************************ - //************************************************ - //************************************************ + //************************************************ + //************************************************ + //************************************************ - FMOPL_LoadState(chip, stream); - } + FMOPL_LoadState(chip, stream); + } ~Handler() { ym3812_shutdown(chip); } @@ -430,26 +521,26 @@ struct Handler : public Adlib::Handler { //************************************************ //************************************************ - YMF_SaveState(chip, stream); - } - void LoadState( std::istream& stream ) override { - char pod_name[32] = {0}; + YMF_SaveState(chip, stream); + } + void LoadState( std::istream& stream ) override { + char pod_name[32] = {0}; - if( stream.fail() ) return; + if( stream.fail() ) return; - // error checking - READ_POD( &pod_name, pod_name ); - if( strcmp( pod_name, "MAMEOPL3" ) ) { - stream.clear( std::istream::failbit | std::istream::badbit ); - return; - } + // error checking + READ_POD( &pod_name, pod_name ); + if( strcmp( pod_name, "MAMEOPL3" ) ) { + stream.clear( std::istream::failbit | std::istream::badbit ); + return; + } - //************************************************ - //************************************************ - //************************************************ + //************************************************ + //************************************************ + //************************************************ - YMF_LoadState(chip, stream); + YMF_LoadState(chip, stream); } ~Handler() { ymf262_shutdown(chip); @@ -509,12 +600,12 @@ namespace OPL3DUOBOARD { } void Generate(MixerChannel* chan, Bitu samples) override { - (void)samples;//UNUSED + (void)samples;//UNUSED int16_t buf[1] = { 0 }; chan->AddSamples_m16(1, buf); } void Init(Bitu rate) override { - (void)rate;//UNUSED + (void)rate;//UNUSED opl3DuoBoard.reset(); } ~Handler() { @@ -643,12 +734,12 @@ class Capture { uint8_t ToRaw[256]; uint8_t delay256; uint8_t delayShift8; - RawHeader header = {}; + RawHeader header = {}; FILE* handle; //File used for writing uint32_t startTicks; //Start used to check total raw length on end uint32_t lastTicks; //Last ticks when last last cmd was added - uint8_t buf[1024] = {}; //16 added for delay commands and what not + uint8_t buf[1024] = {}; //16 added for delay commands and what not uint32_t bufUsed; #if 0//unused uint8_t cmd[2]; //Last cmd's sent to either ports @@ -731,7 +822,7 @@ class Capture { } void WriteCache( void ) { uint16_t i; - uint8_t val; + uint8_t val; /* Check the registers to add */ for (i = 0;i < 256;i++) { val = (*cache)[ i ]; @@ -853,8 +944,8 @@ class Capture { cache = _cache; handle = nullptr; bufUsed = 0; - startTicks = 0; - lastTicks = 0; + startTicks = 0; + lastTicks = 0; MakeTables(); } ~Capture() { @@ -1034,14 +1125,14 @@ void Module::CtrlWrite( uint8_t val ) { Bitu Module::CtrlRead( void ) { switch ( ctrl.index ) { - case 0x00: /* Board Options */ - return 0x70; //No options installed - case 0x09: /* Left FM Volume */ - return ctrl.lvol; - case 0x0a: /* Right FM Volume */ - return ctrl.rvol; - case 0x15: /* Audio Relocation */ - return 0x388 >> 3; //Cryo installer detection + case 0x00: /* Board Options */ + return 0x70; //No options installed + case 0x09: /* Left FM Volume */ + return ctrl.lvol; + case 0x0a: /* Right FM Volume */ + return ctrl.rvol; + case 0x15: /* Audio Relocation */ + return 0x388 >> 3; //Cryo installer detection } return 0xff; } @@ -1267,22 +1358,64 @@ static void OPL_CallBack(Bitu len) { } static Bitu OPL_Read(Bitu port,Bitu iolen) { - if (IS_PC98_ARCH) { - if (port == 0xC8D2 && iolen == 1 && module->PortRead(port, iolen) == 0xFF && module->PortRead(port/0x100, iolen) == 0) return 0xFF; // fix for First Queen - port >>= 8u; // C8D2h -> C8h, C9D2h -> C9h, OPL emulation looks only at bit 0. - } + if (IS_PC98_ARCH) { + if (port == 0xC8D2 && iolen == 1 && module->PortRead(port, iolen) == 0xFF && module->PortRead(port/0x100, iolen) == 0) return 0xFF; // fix for First Queen + port >>= 8u; // C8D2h -> C8h, C9D2h -> C9h, OPL emulation looks only at bit 0. + } + + // help games that try to play digitized speech through the FM chip + if (!(port&1)) module->mixerChan->FillUp(); return module->PortRead( port, iolen ); } +pic_tickindex_t last_opl_write = 0; + void OPL_Write(Bitu port,Bitu val,Bitu iolen) { - if (IS_PC98_ARCH) port >>= 8u; // C8D2h -> C8h, C9D2h -> C9h, OPL emulation looks only at bit 0. + if (IS_PC98_ARCH) port >>= 8u; // C8D2h -> C8h, C9D2h -> C9h, OPL emulation looks only at bit 0. // if writing the data port, assume a change in OPL state that should be reflected immediately. // this is a way to render "sample accurate" without needing "sample accurate" mode in the mixer. // CHGOLF's Adlib digital audio hack works fine with this hack. if (port&1) module->mixerChan->FillUp(); + if (adlib_pcm_boost_enable) { + // keep track of writing to detect when games are using an OPL FM channel as PCM output for "digitized speech" + // so that, if enabled by the user, that channel can be amplified so you can actually hear it. + // most games setup the OPL, set the index to the one channel, and then never write port 388h again, + // directing all writes to 389h. + if ((port&3) == 1) { + pic_tickindex_t now = PIC_FullIndex(); + const unsigned int drop = (unsigned int)(now - last_opl_write); + last_opl_write = now; + + if (single_opl_write_counter >= drop) + single_opl_write_counter -= drop; + else + single_opl_write_counter = 0; + + if (single_opl_write_counter < 1500) + single_opl_write_counter++; + + if (!adlib_pcm_boost) { + adlib_pcm_boost = (single_opl_write_counter >= 1000); + if (adlib_pcm_boost) LOG(LOG_MISC,LOG_DEBUG)("Guest is apparently trying to play PCM audio through the Adlib OPL chip, enabling audio boost"); + } + else { + adlib_pcm_boost = (single_opl_write_counter >= 800); + } + } + else if ((port&3) == 0) { + if (single_opl_write_counter >= 256) + single_opl_write_counter -= 256; + else + single_opl_write_counter = 0; + + if (adlib_pcm_boost && single_opl_write_counter < 500) + adlib_pcm_boost = false; + } + } + module->PortWrite( port, val, iolen ); } @@ -1333,21 +1466,25 @@ void SaveRad() { void OPL_SaveRawEvent(bool pressed) { if (!pressed) return; - if (module == NULL) - return; + if (module == NULL) + return; -// SaveRad();return; + // SaveRad();return; /* Check for previously opened wave file */ + std::string message; if ( module->capture ) { delete module->capture; module->capture = nullptr; LOG_MSG("Stopped Raw OPL capturing."); - if (show_recorded_filename && pathopl.size()) systemmessagebox("Recording completed",("Saved Raw OPL output to the file:\n\n"+pathopl).c_str(),"ok", "info", 1); + if(show_recorded_filename && pathopl.size()) { + message = formatString(MSG_Get("OPL_REC_COMPLETED"), pathopl.c_str()); + systemmessagebox("Recording completed", message.c_str(), "ok", "info", 1); + } } else { if (module->oplmode == OPL_esfm && module->esfm_nativemode) { LOG_MSG("ERROR: Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format."); if (show_recorded_filename) { - systemmessagebox("Error", "Cannot capture Raw OPL output because ESFM native mode is being used by the current application, which is not supported by the Raw OPL format.", "ok", "error", 1); + systemmessagebox("Error",MSG_Get("OPL_CAPTURE_FAILED"), "ok", "error", 1); } } else { LOG_MSG("Preparing to capture Raw OPL, will start with first note played."); @@ -1364,19 +1501,19 @@ namespace Adlib { static std::string usedoplemu = "none"; Module::Module( Section* configuration ) : Module_base(configuration) { - Bitu sb_addr=0,sb_irq=0,sb_dma=0; -// DOSBoxMenu::item *item; - lastUsed = 0; - mode = MODE_OPL2; - capture = NULL; - handler = NULL; + Bitu sb_addr=0,sb_irq=0,sb_dma=0; + // DOSBoxMenu::item *item; + lastUsed = 0; + mode = MODE_OPL2; + capture = NULL; + handler = NULL; - SB_Get_Address(sb_addr,sb_irq,sb_dma); + SB_Get_Address(sb_addr,sb_irq,sb_dma); - if (IS_PC98_ARCH && sb_addr == 0) { - LOG_MSG("Adlib: Rejected configuration, OPL3 disabled in PC-98 mode"); - return; // OPL3 emulation must work alongside SB16 emulation - } + if (IS_PC98_ARCH && sb_addr == 0) { + LOG_MSG("Adlib: Rejected configuration, OPL3 disabled in PC-98 mode"); + return; // OPL3 emulation must work alongside SB16 emulation + } reg.dual[0] = 0; reg.dual[1] = 0; @@ -1403,6 +1540,7 @@ Module::Module( Section* configuration ) : Module_base(configuration) { std::string retrowave_port(section->Get_string("retrowave_port")); std::string retrowave_spi_cs(section->Get_string("retrowave_spi_cs")); adlib_force_timer_overflow_on_polling = section->Get_bool("adlib force timer overflow on detect"); + adlib_pcm_boost_enable = section->Get_bool("adlib pcm boost"); if (oplmode == OPL_esfm && oplemu != "esfmu") { LOG_MSG("Adlib: WARN: an ESFM-capable sbtype (or the 'esfm' oplmode) was chosen, but the chosen oplemu is not ESFM-capable. ESFM native mode features will not work!"); @@ -1425,14 +1563,14 @@ Module::Module( Section* configuration ) : Module_base(configuration) { } else if (oplemu == "nuked") { handler = new NukedOPL::Handler(); } - else if (oplemu == "opl2board") { + else if (oplemu == "opl2board") { oplmode = OPL_opl2; handler = new OPL2BOARD::Handler(oplport.c_str()); - } - else if (oplemu == "opl3duoboard") { - oplmode = OPL_opl3; - handler = new OPL3DUOBOARD::Handler(oplport.c_str()); - } + } + else if (oplemu == "opl3duoboard") { + oplmode = OPL_opl3; + handler = new OPL3DUOBOARD::Handler(oplport.c_str()); + } else if (oplemu == "retrowave_opl3") { // handler = new Retrowave_OPL3::Handler(retrowave_bus, retrowave_port, retrowave_spi_cs); } @@ -1463,67 +1601,67 @@ Module::Module( Section* configuration ) : Module_base(configuration) { handler->Init( rate ); bool single = false; switch ( oplmode ) { - case OPL_opl2: - single = true; - Init( Adlib::MODE_OPL2 ); - break; - case OPL_dualopl2: - Init( Adlib::MODE_DUALOPL2 ); - break; - case OPL_opl3: - Init( Adlib::MODE_OPL3 ); - break; - case OPL_opl3gold: - Init( Adlib::MODE_OPL3GOLD ); - break; - case OPL_esfm: - Init( Adlib::MODE_ESFM ); - break; - default: - break; + case OPL_opl2: + single = true; + Init( Adlib::MODE_OPL2 ); + break; + case OPL_dualopl2: + Init( Adlib::MODE_DUALOPL2 ); + break; + case OPL_opl3: + Init( Adlib::MODE_OPL3 ); + break; + case OPL_opl3gold: + Init( Adlib::MODE_OPL3GOLD ); + break; + case OPL_esfm: + Init( Adlib::MODE_ESFM ); + break; + default: + break; } - if (IS_PC98_ARCH) { - /* needs to match the low 8 bits */ - assert(sb_addr != 0); - - //0xC8XX range (ex. C8D2) - WriteHandler[0].Install(sb_addr+0xC800,OPL_Write,IO_MB, 1 ); - ReadHandler[0].Install(sb_addr+0xC800,OPL_Read,IO_MB, 1 ); - WriteHandler[1].Install(sb_addr+0xC900,OPL_Write,IO_MB, 1 ); - ReadHandler[1].Install(sb_addr+0xC900,OPL_Read,IO_MB, 1 ); - WriteHandler[2].Install(sb_addr+0xCA00,OPL_Write,IO_MB, 1 ); - ReadHandler[2].Install(sb_addr+0xCA00,OPL_Read,IO_MB, 1 ); - WriteHandler[3].Install(sb_addr+0xCB00,OPL_Write,IO_MB, 1 ); - ReadHandler[3].Install(sb_addr+0xCB00,OPL_Read,IO_MB, 1 ); - //0x20XX range (ex. 20D2) - WriteHandler[4].Install(sb_addr+0x2000,OPL_Write,IO_MB, 1 ); - ReadHandler[4].Install(sb_addr+0x2000,OPL_Read,IO_MB, 1 ); - WriteHandler[5].Install(sb_addr+0x2100,OPL_Write,IO_MB, 1 ); - ReadHandler[5].Install(sb_addr+0x2100,OPL_Read,IO_MB, 1 ); - WriteHandler[6].Install(sb_addr+0x2200,OPL_Write,IO_MB, 1 ); - ReadHandler[6].Install(sb_addr+0x2200,OPL_Read,IO_MB, 1 ); - WriteHandler[7].Install(sb_addr+0x2300,OPL_Write,IO_MB, 1 ); - ReadHandler[7].Install(sb_addr+0x2300,OPL_Read,IO_MB, 1 ); - //0x28XX range (ex. 28D2) - WriteHandler[8].Install(sb_addr+0x2800,OPL_Write,IO_MB, 1 ); - ReadHandler[8].Install(sb_addr+0x2800,OPL_Read,IO_MB, 1 ); - WriteHandler[9].Install(sb_addr+0x2900,OPL_Write,IO_MB, 1 ); -// ReadHandler[9].Install(sb_addr+0x2900,OPL_Read,IO_MB, 1 ); - } - else { - //0x388 range - WriteHandler[0].Install(0x388,OPL_Write,IO_MB, 4 ); - ReadHandler[0].Install(0x388,OPL_Read,IO_MB, 4 ); - //0x220 range - if ( !single ) { - WriteHandler[1].Install(base,OPL_Write,IO_MB, 4 ); - ReadHandler[1].Install(base,OPL_Read,IO_MB, 4 ); - } - //0x228 range - WriteHandler[2].Install(base+8,OPL_Write,IO_MB, 2); - ReadHandler[2].Install(base+8,OPL_Read,IO_MB, 1); - } + if (IS_PC98_ARCH) { + /* needs to match the low 8 bits */ + assert(sb_addr != 0); + + //0xC8XX range (ex. C8D2) + WriteHandler[0].Install(sb_addr+0xC800,OPL_Write,IO_MB, 1 ); + ReadHandler[0].Install(sb_addr+0xC800,OPL_Read,IO_MB, 1 ); + WriteHandler[1].Install(sb_addr+0xC900,OPL_Write,IO_MB, 1 ); + ReadHandler[1].Install(sb_addr+0xC900,OPL_Read,IO_MB, 1 ); + WriteHandler[2].Install(sb_addr+0xCA00,OPL_Write,IO_MB, 1 ); + ReadHandler[2].Install(sb_addr+0xCA00,OPL_Read,IO_MB, 1 ); + WriteHandler[3].Install(sb_addr+0xCB00,OPL_Write,IO_MB, 1 ); + ReadHandler[3].Install(sb_addr+0xCB00,OPL_Read,IO_MB, 1 ); + //0x20XX range (ex. 20D2) + WriteHandler[4].Install(sb_addr+0x2000,OPL_Write,IO_MB, 1 ); + ReadHandler[4].Install(sb_addr+0x2000,OPL_Read,IO_MB, 1 ); + WriteHandler[5].Install(sb_addr+0x2100,OPL_Write,IO_MB, 1 ); + ReadHandler[5].Install(sb_addr+0x2100,OPL_Read,IO_MB, 1 ); + WriteHandler[6].Install(sb_addr+0x2200,OPL_Write,IO_MB, 1 ); + ReadHandler[6].Install(sb_addr+0x2200,OPL_Read,IO_MB, 1 ); + WriteHandler[7].Install(sb_addr+0x2300,OPL_Write,IO_MB, 1 ); + ReadHandler[7].Install(sb_addr+0x2300,OPL_Read,IO_MB, 1 ); + //0x28XX range (ex. 28D2) + WriteHandler[8].Install(sb_addr+0x2800,OPL_Write,IO_MB, 1 ); + ReadHandler[8].Install(sb_addr+0x2800,OPL_Read,IO_MB, 1 ); + WriteHandler[9].Install(sb_addr+0x2900,OPL_Write,IO_MB, 1 ); + // ReadHandler[9].Install(sb_addr+0x2900,OPL_Read,IO_MB, 1 ); + } + else { + //0x388 range + WriteHandler[0].Install(0x388,OPL_Write,IO_MB, 4 ); + ReadHandler[0].Install(0x388,OPL_Read,IO_MB, 4 ); + //0x220 range + if ( !single ) { + WriteHandler[1].Install(base,OPL_Write,IO_MB, 4 ); + ReadHandler[1].Install(base,OPL_Read,IO_MB, 4 ); + } + //0x228 range + WriteHandler[2].Install(base+8,OPL_Write,IO_MB, 2); + ReadHandler[2].Install(base+8,OPL_Read,IO_MB, 1); + } //MAPPER_AddHandler(OPL_SaveRawEvent,MK_nothing,0,"caprawopl","Cap OPL",&item); //item->set_text("Record FM (OPL) output"); @@ -1544,24 +1682,24 @@ OPL_Mode Module::oplmode=OPL_none; } //Adlib Namespace std::string getoplmode() { - if (Adlib::Module::oplmode == OPL_none) return "None"; - else if (Adlib::Module::oplmode == OPL_opl2) return "OPL2"; - else if (Adlib::Module::oplmode == OPL_dualopl2) return "Dual OPL2"; - else if (Adlib::Module::oplmode == OPL_opl3) return "OPL3"; - else if (Adlib::Module::oplmode == OPL_opl3gold) return "OPL3 Gold"; - else if (Adlib::Module::oplmode == OPL_hardware) return "Hardware"; - else if (Adlib::Module::oplmode == OPL_hardwareCMS) return "Hardware CMS"; - else if (Adlib::Module::oplmode == OPL_esfm) return "ESFM"; - else return "Unknown"; + if (Adlib::Module::oplmode == OPL_none) return "None"; + else if (Adlib::Module::oplmode == OPL_opl2) return "OPL2"; + else if (Adlib::Module::oplmode == OPL_dualopl2) return "Dual OPL2"; + else if (Adlib::Module::oplmode == OPL_opl3) return "OPL3"; + else if (Adlib::Module::oplmode == OPL_opl3gold) return "OPL3 Gold"; + else if (Adlib::Module::oplmode == OPL_hardware) return "Hardware"; + else if (Adlib::Module::oplmode == OPL_hardwareCMS) return "Hardware CMS"; + else if (Adlib::Module::oplmode == OPL_esfm) return "ESFM"; + else return "Unknown"; } std::string getoplemu() { - std::string emu=Adlib::usedoplemu; - if (emu=="mame") emu="MAME"; - else if (emu=="opl2board") emu="OPL2 board"; - else if (emu=="esfmu") emu="ESFMu"; - else emu[0]=toupper(emu[0]); - return emu; + std::string emu=Adlib::usedoplemu; + if (emu=="mame") emu="MAME"; + else if (emu=="opl2board") emu="OPL2 board"; + else if (emu=="esfmu") emu="ESFMu"; + else emu[0]=toupper(emu[0]); + return emu; } void OPL_Init(Section* sec,OPL_Mode oplmode) { @@ -1570,7 +1708,7 @@ void OPL_Init(Section* sec,OPL_Mode oplmode) { } void OPL_ShutDown(Section* sec){ - (void)sec;//UNUSED + (void)sec;//UNUSED delete module; module = nullptr; } diff --git a/src/hardware/adlib.h b/src/hardware/adlib.h index 72ce303fa01..2d55720901f 100644 --- a/src/hardware/adlib.h +++ b/src/hardware/adlib.h @@ -32,18 +32,18 @@ namespace Adlib { class Timer { //Rounded down start time - double start; + double start = 0; //Time when you overflow - double trigger; + double trigger = 0; //Clock interval - double clockInterval; + double clockInterval = 0; //cycle interval - double counterInterval; - uint8_t counter; - bool masked; + double counterInterval = 0; + uint8_t counter = 0; + bool masked = false; public: - bool enabled; - bool overflow; + bool enabled = false; + bool overflow = false; Timer( int16_t micros ) { overflow = false; @@ -178,32 +178,32 @@ class Module: public Module_base { MixerObject mixerObject; //Mode we're running in - Mode mode; + Mode mode = MODE_OPL2; //Last selected address in the chip for the different modes union { uint32_t normal; uint8_t dual[2]; - } reg; + } reg = {}; struct { bool active; uint8_t index; uint8_t lvol; uint8_t rvol; bool mixer; - } ctrl = {}; + } ctrl = {}; void CacheWrite( uint32_t reg, uint8_t val ); void DualWrite( uint8_t index, uint8_t reg, uint8_t val ); void CtrlWrite( uint8_t val ); Bitu CtrlRead( void ); public: static OPL_Mode oplmode; - MixerChannel* mixerChan; - uint32_t lastUsed; //Ticks when adlib was last used to turn of mixing after a few second - bool esfm_nativemode; // When using MODE_ESFM, whether the synth is in native mode or not - affects port mapping + MixerChannel* mixerChan = NULL; + uint32_t lastUsed = 0; //Ticks when adlib was last used to turn of mixing after a few second + bool esfm_nativemode = false; // When using MODE_ESFM, whether the synth is in native mode or not - affects port mapping - Handler* handler; //Handler that will generate the sound - RegisterCache cache = {}; - Capture* capture; + Handler* handler = NULL; //Handler that will generate the sound + RegisterCache cache = {}; + Capture* capture = NULL; Chip chip[2]; //Handle port writes diff --git a/src/hardware/dbopl.cpp b/src/hardware/dbopl.cpp index 41fefbad39e..53303d01e3f 100644 --- a/src/hardware/dbopl.cpp +++ b/src/hardware/dbopl.cpp @@ -45,6 +45,10 @@ #define PI 3.14159265358979323846 #endif +extern bool adlib_pcm_boost; + +void adlib_boost32(int32_t *buf,unsigned int c,unsigned int ch); + namespace DBOPL { #define OPLRATE ((double)(14318180.0 / 288.0)) @@ -1516,9 +1520,11 @@ void Handler::Generate( MixerChannel* chan, Bitu samples ) { samples = 512; if ( !chip.opl3Active ) { chip.GenerateBlock2( samples, buffer ); + if (adlib_pcm_boost) adlib_boost32(buffer,samples,1/*mono*/); chan->AddSamples_m32( samples, buffer ); } else { chip.GenerateBlock3( samples, buffer ); + if (adlib_pcm_boost) adlib_boost32(buffer,samples,2/*stereo*/); chan->AddSamples_s32( samples, buffer ); } } diff --git a/src/hardware/dbopl.h b/src/hardware/dbopl.h index 74ceb5f3caf..a45d5178081 100644 --- a/src/hardware/dbopl.h +++ b/src/hardware/dbopl.h @@ -82,44 +82,44 @@ struct Operator { ATTACK, } State; - VolumeHandler volHandler; + VolumeHandler volHandler = NULL; #if (DBOPL_WAVE == WAVE_HANDLER) - WaveHandler waveHandler; //Routine that generate a wave + WaveHandler waveHandler = NULL; //Routine that generate a wave #else - int16_t* waveBase; - uint32_t waveMask; - uint32_t waveStart; + int16_t* waveBase = NULL; + uint32_t waveMask = 0; + uint32_t waveStart = 0; #endif - uint32_t waveIndex; //WAVE_BITS shifted counter of the frequency index - uint32_t waveAdd; //The base frequency without vibrato - uint32_t waveCurrent; //waveAdd + vibrato - - uint32_t chanData; //Frequency/octave and derived data coming from whatever channel controls this - uint32_t freqMul; //Scale channel frequency with this, TODO maybe remove? - uint32_t vibrato; //Scaled up vibrato strength - int32_t sustainLevel; //When stopping at sustain level stop here - int32_t totalLevel; //totalLevel is added to every generated volume - uint32_t currentLevel; //totalLevel + tremolo - int32_t volume; //The currently active volume + uint32_t waveIndex = 0; //WAVE_BITS shifted counter of the frequency index + uint32_t waveAdd = 0; //The base frequency without vibrato + uint32_t waveCurrent = 0; //waveAdd + vibrato + + uint32_t chanData = 0; //Frequency/octave and derived data coming from whatever channel controls this + uint32_t freqMul = 0; //Scale channel frequency with this, TODO maybe remove? + uint32_t vibrato = 0; //Scaled up vibrato strength + int32_t sustainLevel = 0; //When stopping at sustain level stop here + int32_t totalLevel = 0; //totalLevel is added to every generated volume + uint32_t currentLevel = 0; //totalLevel + tremolo + int32_t volume = 0; //The currently active volume - uint32_t attackAdd; //Timers for the different states of the envelope - uint32_t decayAdd; - uint32_t releaseAdd; - uint32_t rateIndex; //Current position of the envelope + uint32_t attackAdd = 0; //Timers for the different states of the envelope + uint32_t decayAdd = 0; + uint32_t releaseAdd = 0; + uint32_t rateIndex = 0; //Current position of the envelope - uint8_t rateZero; //Bits for the different states of the envelope having no changes - uint8_t keyOn; //Bitmask of different values that can generate keyon + uint8_t rateZero = 0; //Bits for the different states of the envelope having no changes + uint8_t keyOn = 0; //Bitmask of different values that can generate keyon //Registers, also used to check for changes - uint8_t reg20, reg40, reg60, reg80, regE0; + uint8_t reg20 = 0, reg40 = 0, reg60 = 0, reg80 = 0, regE0 = 0; //Active part of the envelope we're in - uint8_t state; + uint8_t state = 0; //0xff when tremolo is enabled - uint8_t tremoloMask; + uint8_t tremoloMask = 0; //Strength of the vibrato - uint8_t vibStrength; + uint8_t vibStrength = 0; //Keep track of the calculated KSR so we can check for changes - uint8_t ksr; + uint8_t ksr = 0; private: void SetState( uint8_t s ); void UpdateAttack( const Chip* chip ); @@ -160,17 +160,17 @@ struct Channel { inline Operator* Op( Bitu index ) { return &( ( this + (index >> 1) )->op[ index & 1 ]); } - SynthHandler synthHandler; - uint32_t chanData; //Frequency/octave and derived values - int32_t old[2]; //Old data for feedback + SynthHandler synthHandler = NULL; + uint32_t chanData = 0; //Frequency/octave and derived values + int32_t old[2] = {0}; //Old data for feedback - uint8_t feedback; //Feedback shift - uint8_t regB0; //Register values to check for changes - uint8_t regC0; + uint8_t feedback = 0; //Feedback shift + uint8_t regB0 = 0; //Register values to check for changes + uint8_t regC0 = 0; //This should correspond with reg104, bit 6 indicates a Percussion channel, bit 7 indicates a silent channel - uint8_t fourMask; - int8_t maskLeft; //Sign extended values for both channel's panning - int8_t maskRight; + uint8_t fourMask = 0; + int8_t maskLeft = 0; //Sign extended values for both channel's panning + int8_t maskRight = 0; //Forward the channel data to the operators of the channel void SetChanData( const Chip* chip, uint32_t data ); @@ -204,16 +204,16 @@ struct Chip { uint32_t noiseValue = 0; //Frequency scales for the different multiplications - uint32_t freqMul[16] = {}; + uint32_t freqMul[16] = {0}; //Rates for decay and release for rate of this chip - uint32_t linearRates[76] = {}; + uint32_t linearRates[76] = {0}; //Best match attack rates for the rate of this chip - uint32_t attackRates[76] = {}; + uint32_t attackRates[76] = {0}; - uint8_t reg104; - uint8_t reg08; - uint8_t reg04; - uint8_t regBD; + uint8_t reg104 = 0; + uint8_t reg08 = 0; + uint8_t reg04 = 0; + uint8_t regBD = 0; uint8_t vibratoIndex = 0; uint8_t tremoloIndex = 0; int8_t vibratoSign = 0; @@ -224,7 +224,7 @@ struct Chip { //Mask for allowed wave forms uint8_t waveFormMask = 0; //0 or -1 when enabled - int8_t opl3Active; + int8_t opl3Active = 0; //Running in opl3 mode const bool opl3Mode; diff --git a/src/hardware/dma.cpp b/src/hardware/dma.cpp index 3cb97fdf287..57b9ff77f26 100644 --- a/src/hardware/dma.cpp +++ b/src/hardware/dma.cpp @@ -36,6 +36,18 @@ # define MAX(a,b) std::max(a,b) #endif +const char *DMAActorStr(const DMAActor a) { + switch (a) { + case DMAA_NONE: return "none"; + case DMAA_CONTROLLER: return "DMA controller"; + case DMAA_GUEST: return "DOS guest"; + case DMAA_REISSUE: return "reissue"; + default: break; + } + + return "?"; +} + bool has_pcibus_enable(void); DmaController *DmaControllers[2]={NULL}; @@ -307,6 +319,7 @@ void DmaController::WriteControllerReg(Bitu reg,Bitu val,Bitu /*len*/) { case 0xa: /* Mask Register */ if ((val & 0x4)==0) UpdateEMSMapping(); chan=GetChannel(val & 3); + chan->masked_by = DMAA_GUEST; chan->SetMask((val & 0x4)>0); break; case 0xb: /* Mode Register */ @@ -323,6 +336,7 @@ void DmaController::WriteControllerReg(Bitu reg,Bitu val,Bitu /*len*/) { case 0xd: /* Master Clear/Reset */ for (uint8_t ct=0;ct<4;ct++) { chan=GetChannel(ct); + chan->masked_by = DMAA_GUEST; chan->SetMask(true); chan->tcount=false; } @@ -332,6 +346,7 @@ void DmaController::WriteControllerReg(Bitu reg,Bitu val,Bitu /*len*/) { UpdateEMSMapping(); for (uint8_t ct=0;ct<4;ct++) { chan=GetChannel(ct); + chan->masked_by = DMAA_GUEST; chan->SetMask(false); } break; @@ -339,6 +354,7 @@ void DmaController::WriteControllerReg(Bitu reg,Bitu val,Bitu /*len*/) { UpdateEMSMapping(); for (uint8_t ct=0;ct<4;ct++) { chan=GetChannel(ct); + chan->masked_by = DMAA_GUEST; chan->SetMask(val & 1); val>>=1; } @@ -352,6 +368,7 @@ Bitu DmaController::ReadControllerReg(Bitu reg,Bitu /*len*/) { /* read base address of DMA transfer (1st byte low part, 2nd byte high part) */ case 0x0:case 0x2:case 0x4:case 0x6: chan=GetChannel((uint8_t)(reg >> 1)); + chan->DoCallBack(DMA_READ_COUNTER); flipflop=!flipflop; if (flipflop) { return chan->curraddr & 0xff; @@ -361,6 +378,7 @@ Bitu DmaController::ReadControllerReg(Bitu reg,Bitu /*len*/) { /* read DMA transfer count (1st byte low part, 2nd byte high part) */ case 0x1:case 0x3:case 0x5:case 0x7: chan=GetChannel((uint8_t)(reg >> 1)); + chan->DoCallBack(DMA_READ_COUNTER); flipflop=!flipflop; if (flipflop) { return chan->currcnt & 0xff; @@ -371,6 +389,7 @@ Bitu DmaController::ReadControllerReg(Bitu reg,Bitu /*len*/) { ret=0; for (uint8_t ct=0;ct<4;ct++) { chan=GetChannel(ct); + chan->DoCallBack(DMA_READ_COUNTER); if (chan->tcount) ret |= (Bitu)1U << ct; chan->tcount=false; if (chan->request) ret |= (Bitu)1U << (4U + ct); @@ -379,6 +398,13 @@ Bitu DmaController::ReadControllerReg(Bitu reg,Bitu /*len*/) { case 0xc: /* Clear Flip/Flip (apparently most motherboards will treat read OR write as reset) */ flipflop=false; break; + case 0xf: /* Multiple Mask register, undocumented read back */ + ret=0; + for (uint8_t ct=0;ct<4;ct++) { + chan=GetChannel(ct); + if (chan->masked) ret |= 1u << ct; + } + return ret; default: LOG(LOG_DMACONTROL,LOG_NORMAL)("Trying to read undefined DMA port %x",(int)reg); break; @@ -388,19 +414,20 @@ Bitu DmaController::ReadControllerReg(Bitu reg,Bitu /*len*/) { DmaChannel::DmaChannel(uint8_t num, bool dma16) { masked = true; + masked_by = DMAA_CONTROLLER; callback = NULL; channum = num; DMA16 = dma16 ? 0x1 : 0x0; - transfer_mode = 0; + transfer_mode = 0; - if (isadma128k >= 0) - Set128KMode(isadma128k > 0); // user's choice - else - Set128KMode(true); // most hardware seems to implement the 128K case + if (isadma128k >= 0) + Set128KMode(isadma128k > 0); // user's choice + else + Set128KMode(true); // most hardware seems to implement the 128K case - LOG(LOG_DMACONTROL,LOG_DEBUG)("DMA channel %u. DMA16_PAGESHIFT=%u DMA16_ADDRMASK=0x%lx", - (unsigned int)channum,(unsigned int)DMA16_PAGESHIFT,(unsigned long)DMA16_ADDRMASK); - pagenum = 0; + LOG(LOG_DMACONTROL,LOG_DEBUG)("DMA channel %u. DMA16_PAGESHIFT=%u DMA16_ADDRMASK=0x%lx", + (unsigned int)channum,(unsigned int)DMA16_PAGESHIFT,(unsigned long)DMA16_ADDRMASK); + pagenum = 0; pagebase = 0; baseaddr = 0; curraddr = 0; @@ -491,7 +518,33 @@ Bitu DmaChannel::Read(Bitu want, uint8_t * buffer) { curraddr = baseaddr; UpdateEMSMapping(); } else { + /* NTS: This is what the 8237 actually does: Sets TC and sets the mask bit of the channel. + * + * "8237A + * Table 1. Pin Description (Continued) + * Symbol Type Name and Function + * EOP I/O END OF PROCESS: End of Process is an active low bidirectional + * signal. Information concerning the completion of DMA services is + * available at the bidirectional EOP pin. The 8237A allows an + * external signal to terminate an active DMA service. This is + * accomplished by pulling the EOP input low with an external EOP + * signal. The 8237A also generates a pulse when the terminal count + * (TC) for any channel is reached. This generates an EOP signal + * which is output through the EOP line. The reception of EOP, either + * internal or external, will cause the 8237A to terminate the service, + * reset the request, and, if Autoinitialize is enabled, to write the base + * registers to the current registers of that channel. The mask bit and + * TC bit in the status word will be set for the currently active channel + * by EOP unless the channel is programmed for Autoinitialize. In that + * case, the mask bit remains unchanged. During memory-to-memory + * transfers, EOP will be output when the TC for channel 1 occurs. + * EOP should be tied high with a pull-up resistor if it is not used to + * prevent erroneous end of process inputs." + * + * [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/DMA%20controller/8237/8237A%20HIGH%20PERFORMANCE%20PROGRAMMABLE%20DMA%20CONTROLLER%20%288237A%2d5%29%20%281993%2d09%29%2epdf] + */ masked = true; + masked_by = DMAA_CONTROLLER; UpdateEMSMapping(); DoCallBack(DMA_MASKED); break; @@ -577,7 +630,33 @@ Bitu DmaChannel::Write(Bitu want, uint8_t * buffer) { curraddr = baseaddr; UpdateEMSMapping(); } else { + /* NTS: This is what the 8237 actually does: Sets TC and sets the mask bit of the channel. + * + * "8237A + * Table 1. Pin Description (Continued) + * Symbol Type Name and Function + * EOP I/O END OF PROCESS: End of Process is an active low bidirectional + * signal. Information concerning the completion of DMA services is + * available at the bidirectional EOP pin. The 8237A allows an + * external signal to terminate an active DMA service. This is + * accomplished by pulling the EOP input low with an external EOP + * signal. The 8237A also generates a pulse when the terminal count + * (TC) for any channel is reached. This generates an EOP signal + * which is output through the EOP line. The reception of EOP, either + * internal or external, will cause the 8237A to terminate the service, + * reset the request, and, if Autoinitialize is enabled, to write the base + * registers to the current registers of that channel. The mask bit and + * TC bit in the status word will be set for the currently active channel + * by EOP unless the channel is programmed for Autoinitialize. In that + * case, the mask bit remains unchanged. During memory-to-memory + * transfers, EOP will be output when the TC for channel 1 occurs. + * EOP should be tied high with a pull-up resistor if it is not used to + * prevent erroneous end of process inputs." + * + * [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/DMA%20controller/8237/8237A%20HIGH%20PERFORMANCE%20PROGRAMMABLE%20DMA%20CONTROLLER%20%288237A%2d5%29%20%281993%2d09%29%2epdf] + */ masked = true; + masked_by = DMAA_CONTROLLER; UpdateEMSMapping(); DoCallBack(DMA_MASKED); break; diff --git a/src/hardware/esfmu/esfm.c b/src/hardware/esfmu/esfm.c index 5d1f9540db3..c185fde0062 100644 --- a/src/hardware/esfmu/esfm.c +++ b/src/hardware/esfmu/esfm.c @@ -1741,6 +1741,10 @@ ESFM_slot_generate_emu(esfm_slot *slot) } /* ------------------------------------------------------------------------- */ +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunknown-pragmas" +#pragma clang diagnostic ignored "-Wunused-variable" +#pragma clang diagnostic ignored "-Wunknown-pragmas" static void ESFM_process_feedback(esfm_chip *chip) { @@ -1752,11 +1756,12 @@ ESFM_process_feedback(esfm_chip *chip) uint32 basefreq, phase_offset; uint3 block; uint10 f_num; - int32_t wave_out; + int32_t wave_out, wave_last; int32_t phase_feedback; + uint32_t iter_counter; uint3 waveform; uint3 mod_in_shift; - uint32_t phase_acc; + uint32_t phase, phase_acc; uint10 eg_output; if (slot->mod_in_level && (chip->native_mode || (slot->in.mod_input == &slot->in.feedback_buf))) @@ -1781,7 +1786,7 @@ ESFM_process_feedback(esfm_chip *chip) #ifdef NDEBUG #undef __x86_64__ #endif -#if defined(__GNUC__) && defined(__x86_64__) +#if defined(__GNUC__) && defined(__x86_64__) && !defined(_ESFMU_DISABLE_ASM_OPTIMIZATIONS) asm ( "movzbq %[wave], %%r8 \n\t" "shll $11, %%r8d \n\t" @@ -1846,13 +1851,14 @@ ESFM_process_feedback(esfm_chip *chip) [exprom] "m" (exprom) : "cc", "ax", "bx", "cx", "dx", "r8", "r9", "r10", "r11" ); -#elif defined(__GNUC__) && defined(__i386__) - uint32_t iter_counter; - int32_t wave_last; +#elif defined(__GNUC__) && defined(__i386__) && !defined(_ESFMU_DISABLE_ASM_OPTIMIZATIONS) + size_t logsinrom_addr = (size_t)logsinrom; + size_t exprom_addr = (size_t)exprom; + asm ( "movzbl %b[wave], %%eax \n\t" "shll $11, %%eax \n\t" - "leal %[sinrom], %%edi \n\t" + "movl %[sinrom], %%edi \n\t" "addl %%eax, %%edi \n\t" "shlw $3, %[eg_out] \n\t" "xorl %[out], %[out] \n\t" @@ -1887,7 +1893,7 @@ ESFM_process_feedback(esfm_chip *chip) // wave_out = exprom[level & 0xff] >> (level >> 8); "movb %%ah, %%cl \n\t" "movzbl %%al, %%eax \n\t" - "leal %[exprom], %[out] \n\t" + "movl %[exprom], %[out] \n\t" "movzwl (%[out], %%eax, 2), %[out] \n\t" "shrl %%cl, %[out] \n\t" // if (lookup & 0x8000) wave_out = -wave_out; @@ -1909,12 +1915,12 @@ ESFM_process_feedback(esfm_chip *chip) : [p_off] "m" (phase_offset), [mod_in] "m" (mod_in_shift), [wave] "m" (waveform), - [sinrom] "m" (logsinrom), - [exprom] "m" (exprom), + [sinrom] "m" (logsinrom_addr), + [exprom] "m" (exprom_addr), [i] "m" (iter_counter) : "cc", "ax", "bx", "cx", "di" ); -#elif defined(__GNUC__) && defined(__arm__) +#elif defined(__GNUC__) && defined(__arm__) && !defined(_ESFMU_DISABLE_ASM_OPTIMIZATIONS) asm ( "movs r3, #0 \n\t" "movs %[out], #0 \n\t" @@ -1969,12 +1975,12 @@ ESFM_process_feedback(esfm_chip *chip) ); #else wave_out = 0; - int32_t wave_last = 0; - for (uint32_t iter_counter = 0; iter_counter < 29; iter_counter++) + wave_last = 0; + for (iter_counter = 0; iter_counter < 29; iter_counter++) { phase_feedback = (wave_out + wave_last) >> 2; wave_last = wave_out; - uint32_t phase = phase_feedback >> mod_in_shift; + phase = phase_feedback >> mod_in_shift; phase += phase_acc >> 9; wave_out = ESFM_envelope_wavegen(waveform, phase, eg_output); phase_acc += phase_offset; @@ -2058,10 +2064,13 @@ ESFM_clip_sample(int32 sample) return (int16_t)sample; } +#define TIMER1_CONST (0.2517482517482517) +#define TIMER2_CONST (0.06293706293706293) /* ------------------------------------------------------------------------- */ static void ESFM_update_timers(esfm_chip *chip) -{ +{ + int i; // Tremolo if ((chip->global_timer & 0x3f) == 0x3f) { @@ -2114,6 +2123,28 @@ ESFM_update_timers(esfm_chip *chip) } } + for (i = 0; i < 2; i++) + { + if (chip->timer_enable[i]) + { + chip->timer_accumulator[i] += (i == 0) ? TIMER1_CONST : TIMER2_CONST; + if (chip->timer_accumulator[i] > 1.0) + { + chip->timer_accumulator[i] -= 1.0; + chip->timer_counter[i]++; + if (chip->timer_counter[i] == 0) + { + if (chip->timer_mask[i] == 0) + { + chip->irq_bit = true; + chip->timer_overflow[i] = true; + } + chip->timer_counter[i] = chip->timer_reload[i]; + } + } + } + } + chip->eg_tick ^= 1; } diff --git a/src/hardware/esfmu/esfm.h b/src/hardware/esfmu/esfm.h index 221b67e7756..41ac6983fb7 100644 --- a/src/hardware/esfmu/esfm.h +++ b/src/hardware/esfmu/esfm.h @@ -215,7 +215,7 @@ struct _esfm_chip { esfm_channel channels[18]; int32 output_accm[2]; - uint_fast16_t addr_latch; + uint16 addr_latch; flag emu_wavesel_enable; flag emu_newmode; @@ -248,6 +248,7 @@ struct _esfm_chip flag emu_vibrato_deep; flag emu_tremolo_deep; + double timer_accumulator[2]; uint8 timer_reload[2]; uint8 timer_counter[2]; flag timer_enable[2]; @@ -255,18 +256,27 @@ struct _esfm_chip flag timer_overflow[2]; flag irq_bit; - // Halts the envelope generators from advancing. - flag test_bit_eg_halt; + // -- Test bits (NOT IMPLEMENTED) -- + // Halts the envelope generators from advancing. Written on bit 0, read back from bit 5. + flag test_bit_w0_r5_eg_halt; /* * Activates some sort of waveform test mode that amplifies the output volume greatly * and continuously shifts the waveform table downwards, possibly also outputting the * waveform's derivative? (it's so weird!) */ - flag test_bit_distort; + flag test_bit_1_distort; + // Seems to do nothing. + flag test_bit_2; + // Seems to do nothing. + flag test_bit_3; // Appears to attenuate the output by about 3 dB. - flag test_bit_attenuate; + flag test_bit_4_attenuate; + // Written on bit 5, read back from bit 0. Seems to do nothing. + flag test_bit_w5_r0; // Resets all phase generators and holds them in the reset state while this bit is set. - flag test_bit_phase_stop_reset; + flag test_bit_6_phase_stop_reset; + // Seems to do nothing. + flag test_bit_7; esfm_write_buf write_buf[ESFM_WRITEBUF_SIZE]; size_t write_buf_start; diff --git a/src/hardware/esfmu/esfm_registers.c b/src/hardware/esfmu/esfm_registers.c index d87a5944f4c..e2f432ed1bf 100644 --- a/src/hardware/esfmu/esfm_registers.c +++ b/src/hardware/esfmu/esfm_registers.c @@ -453,21 +453,24 @@ ESFM_write_reg_native (esfm_chip *chip, uint16_t address, uint8_t data) { case TIMER1_REG: chip->timer_reload[0] = data; + chip->timer_counter[0] = data; break; case TIMER2_REG: chip->timer_reload[1] = data; + chip->timer_counter[1] = data; break; case TIMER_SETUP_REG: if (data & 0x80) { + chip->irq_bit = 0; chip->timer_overflow[0] = 0; chip->timer_overflow[1] = 0; - chip->irq_bit = 0; + break; } chip->timer_enable[0] = (data & 0x01) != 0; chip->timer_enable[1] = (data & 0x02) != 0; - chip->timer_mask[0] = (data & 0x20) != 0; - chip->timer_mask[1] = (data & 0x40) != 0; + chip->timer_mask[1] = (data & 0x20) != 0; + chip->timer_mask[0] = (data & 0x40) != 0; break; case CONFIG_REG: chip->keyscale_mode = (data & 0x40) != 0; @@ -485,10 +488,14 @@ ESFM_write_reg_native (esfm_chip *chip, uint16_t address, uint8_t data) } break; case TEST_REG: - chip->test_bit_eg_halt = (data & 0x01) | ((data & 0x20) != 0); - chip->test_bit_distort = (data & 0x02) != 0; - chip->test_bit_attenuate = (data & 0x10) != 0; - chip->test_bit_phase_stop_reset = (data & 0x40) != 0; + chip->test_bit_w0_r5_eg_halt = (data & 0x01) | ((data & 0x20) != 0); + chip->test_bit_1_distort = (data & 0x02) != 0; + chip->test_bit_2 = (data & 0x04) != 0; + chip->test_bit_3 = (data & 0x08) != 0; + chip->test_bit_4_attenuate = (data & 0x10) != 0; + chip->test_bit_w5_r0 = (data & 0x20) != 0; + chip->test_bit_6_phase_stop_reset = (data & 0x40) != 0; + chip->test_bit_7 = (data & 0x80) != 0; break; } } @@ -543,16 +550,16 @@ ESFM_readback_reg_native (esfm_chip *chip, uint16_t address) switch (address & 0x5ff) { case TIMER1_REG: - data = chip->timer_reload[0]; + data = chip->timer_counter[0]; break; case TIMER2_REG: - data = chip->timer_reload[1]; + data = chip->timer_counter[1]; break; case TIMER_SETUP_REG: data |= chip->timer_enable[0] != 0; data |= (chip->timer_enable[1] != 0) << 1; - data |= (chip->timer_mask[0] != 0) << 5; - data |= (chip->timer_mask[1] != 0) << 6; + data |= (chip->timer_mask[1] != 0) << 5; + data |= (chip->timer_mask[0] != 0) << 6; break; case CONFIG_REG: data |= (chip->keyscale_mode != 0) << 6; @@ -563,11 +570,14 @@ ESFM_readback_reg_native (esfm_chip *chip, uint16_t address) data |= chip->emu_tremolo_deep << 7; break; case TEST_REG: - data |= chip->test_bit_eg_halt != 0; - data |= (chip->test_bit_distort != 0) << 1; - data |= (chip->test_bit_attenuate != 0) << 4; - data |= (chip->test_bit_eg_halt != 0) << 5; - data |= (chip->test_bit_phase_stop_reset != 0) << 6; + data |= chip->test_bit_w5_r0 != 0; + data |= (chip->test_bit_1_distort != 0) << 1; + data |= (chip->test_bit_2 != 0) << 2; + data |= (chip->test_bit_3 != 0) << 3; + data |= (chip->test_bit_4_attenuate != 0) << 4; + data |= (chip->test_bit_w0_r5_eg_halt != 0) << 5; + data |= (chip->test_bit_6_phase_stop_reset != 0) << 6; + data |= (chip->test_bit_7 != 0) << 7; break; case FOUROP_CONN_REG: for (i = 0; i < 3; i++) @@ -577,6 +587,7 @@ ESFM_readback_reg_native (esfm_chip *chip, uint16_t address) } break; case NATIVE_MODE_REG: + data |= (chip->emu_newmode != 0); data |= (chip->native_mode != 0) << 7; break; } @@ -639,9 +650,11 @@ ESFM_write_reg_emu (esfm_chip *chip, uint16_t address, uint8_t data) break; case 0x02: chip->timer_reload[0] = data; + chip->timer_counter[0] = data; break; case 0x03: chip->timer_reload[1] = data; + chip->timer_counter[1] = data; break; case 0x04: for (i = 0; i < 3; i++) @@ -677,19 +690,24 @@ ESFM_write_reg_emu (esfm_chip *chip, uint16_t address, uint8_t data) break; case 0x02: chip->timer_reload[0] = data; + chip->timer_counter[0] = data; break; case 0x03: chip->timer_reload[1] = data; + chip->timer_counter[1] = data; break; case 0x04: - chip->timer_enable[0] = data & 0x01; - chip->timer_enable[1] = (data & 0x02) != 0; - chip->timer_mask[0] = (data & 0x20) != 0; - chip->timer_mask[1] = (data & 0x40) != 0; if (data & 0x80) { chip->irq_bit = 0; + chip->timer_overflow[0] = 0; + chip->timer_overflow[1] = 0; + break; } + chip->timer_enable[0] = data & 0x01; + chip->timer_enable[1] = (data & 0x02) != 0; + chip->timer_mask[1] = (data & 0x20) != 0; + chip->timer_mask[0] = (data & 0x40) != 0; break; case 0x08: chip->keyscale_mode = (data & 0x40) != 0; @@ -850,6 +868,7 @@ ESFM_write_port (esfm_chip *chip, uint8_t offset, uint8_t data) case 0: chip->native_mode = 0; ESFM_native_to_emu_switch(chip); + // TODO: verify if the address write goes through chip->addr_latch = data; break; case 1: @@ -886,43 +905,30 @@ uint8_t ESFM_read_port (esfm_chip *chip, uint8_t offset) { uint8_t data = 0; - if (chip->native_mode) + + switch(offset) { - switch(offset) + case 0: + data |= (chip->irq_bit != 0) << 7; + data |= (chip->timer_overflow[0] != 0) << 6; + data |= (chip->timer_overflow[1] != 0) << 5; + break; + case 1: + if (chip->native_mode) { - case 0: - // TODO: actually implement timer count, trigger and reset - data |= (chip->irq_bit != 0) << 7; - data |= (chip->timer_overflow[0] != 0) << 6; - data |= (chip->timer_overflow[1] != 0) << 5; - break; - case 1: data = ESFM_readback_reg_native(chip, chip->addr_latch); - break; - // TODO: verify what the ESFM chip actually returns when reading - // from the other address ports } - } - else - { - switch(offset) + else { - case 0: - data |= (chip->irq_bit != 0) << 7; - data |= (chip->timer_overflow[0] != 0) << 6; - data |= (chip->timer_overflow[1] != 0) << 5; - break; - case 1: data = 0; - break; - case 2: case 3: - // This matches OPL3 behavior. - // TODO: verify what the ESFM chip actually returns when reading - // from address ports in emulation mode - data = 0xff; - break; } + break; + case 2: case 3: + // This matches OPL3 behavior. + data = 0xff; + break; } + return data; } diff --git a/src/hardware/gus.cpp b/src/hardware/gus.cpp index 15ef46c339e..c26c950e211 100644 --- a/src/hardware/gus.cpp +++ b/src/hardware/gus.cpp @@ -29,6 +29,7 @@ #include "control.h" #include "setup.h" #include "shell.h" +#include "bitop.h" #include "math.h" #include "regs.h" using namespace std; @@ -76,7 +77,6 @@ uint8_t adlib_commandreg; static MixerChannel * gus_chan; static uint8_t const irqtable[8] = { 0/*invalid*/, 2, 5, 3, 7, 11, 12, 15 }; static uint8_t const dmatable[8] = { 0/*NO DMA*/, 1, 3, 5, 6, 7, 0/*invalid*/, 0/*invalid*/ }; -static uint8_t GUSRam[1024*1024 + 16/*safety margin*/]; // 1024K of GUS Ram static int32_t AutoAmp = 512; static bool unmask_irq = false; static bool enable_autoamp = false; @@ -94,9 +94,6 @@ static bool gus_warn_dma_conflict = false; static IO_Callout_t gus_iocallout = IO_Callout_t_none; static IO_Callout_t gus_iocallout2 = IO_Callout_t_none; -class GUSChannels; -static void CheckVoiceIrq(void); - struct GFGus { uint8_t gRegSelectData; // what is read back from 3X3. not necessarily the index selected, but // apparently the last byte read OR written to ports 3X3-3X5 as seen @@ -105,6 +102,7 @@ struct GFGus { uint16_t gRegData; uint32_t gDramAddr; uint32_t gDramAddrMask; + uint32_t gDramVoiceMask; uint16_t gCurChannel; uint8_t gUltraMAXControl; @@ -155,47 +153,86 @@ struct GFGus { uint32_t WaveIRQ; double masterVolume; /* decibels */ int32_t masterVolumeMul; /* 1<<9 fixed */ + uint8_t GUS_reset_reg; + uint8_t* GUSRam; - void updateMasterVolume(void) { - double vol = masterVolume; - if (vol > 6) vol = 6; // allow some amplification but don't let it overflow - masterVolumeMul = (int32_t)((1 << 9) * pow(10.0,vol / 20.0)); - if (AutoAmp > masterVolumeMul) AutoAmp = masterVolumeMul; + void updateMasterVolume(void); + + INLINE uint32_t VoiceAddr8(const uint32_t addr) const { + return addr & gDramVoiceMask; } -} myGUS; -Bitu DEBUG_EnableDebugger(void); + INLINE uint32_t VoiceAddr16(const uint32_t addr) const { + const uint32_t maddr = addr & gDramVoiceMask; + const uint32_t bank_a = maddr & 0xC0000u; + const uint32_t bank_o = (maddr & 0x1FFFFu) << 1u; + return bank_a + bank_o; + } -static uint8_t GUS_reset_reg = 0; + INLINE int32_t LoadSample8(const uint32_t addr/*memory address without fractional bits*/) const { + return (int8_t)GUSRam[VoiceAddr8(addr)] << int32_t(8); /* typecast to sign extend 8-bit value */ + } + + INLINE int32_t LoadSample16(const uint32_t addr/*memory address without fractional bits*/) const { + return (int16_t)host_readw(GUSRam + VoiceAddr16(addr));/* typecast to sign extend 16-bit value */ + } + + INLINE int32_t InterpolateSample(const int32_t w1,const int32_t w2,const uint32_t scale) const { + return w1 + (((w2 - w1) * int32_t(scale)) >> WAVE_FRACT); + } + + INLINE int32_t GetSample8(const uint32_t WaveAddr) const { + const uint32_t useAddr = WaveAddr >> WAVE_FRACT; + return InterpolateSample(LoadSample8(useAddr),LoadSample8(useAddr+1u),WaveAddr & WAVE_FRACT_MASK); + } + + INLINE int32_t GetSample16(const uint32_t WaveAddr) const { + const uint32_t useAddr = WaveAddr >> WAVE_FRACT; + return InterpolateSample(LoadSample16(useAddr),LoadSample16(useAddr+1u),WaveAddr & WAVE_FRACT_MASK); + } + +}; + +static void CheckVoiceIrq(void); +Bitu DEBUG_EnableDebugger(void); static inline uint8_t read_GF1_mapping_control(const unsigned int ch); -class GUSChannels { +void GFGus::updateMasterVolume(void) { + double vol = masterVolume; + if (vol > 6) vol = 6; // allow some amplification but don't let it overflow + masterVolumeMul = (int32_t)((1 << 9) * pow(10.0,vol / 20.0)); + if (AutoAmp > masterVolumeMul) AutoAmp = masterVolumeMul; +} + +static GFGus myGUS; + +class GUSChannel { public: - uint32_t WaveStart; - uint32_t WaveEnd; - uint32_t WaveAddr; - uint32_t WaveAdd; - uint8_t WaveCtrl; - uint16_t WaveFreq; - - uint32_t RampStart; - uint32_t RampEnd; - uint32_t RampVol; - uint32_t RampAdd; - - uint8_t RampRate; - uint8_t RampCtrl; - - uint8_t PanPot; - uint8_t channum; - uint32_t irqmask; - uint32_t PanLeft; - uint32_t PanRight; - int32_t VolLeft; - int32_t VolRight; - - GUSChannels(uint8_t num) { + uint32_t WaveStart = 0; + uint32_t WaveEnd = 0; + uint32_t WaveAddr = 0; + uint32_t WaveAdd = 0; + uint8_t WaveCtrl = 0; + uint16_t WaveFreq = 0; + + uint32_t RampStart = 0; + uint32_t RampEnd = 0; + uint32_t RampVol = 0; + uint32_t RampAdd = 0; + + uint8_t RampRate = 0; + uint8_t RampCtrl = 0; + + uint8_t PanPot = 0; + uint8_t channum = 0; + uint32_t irqmask = 0; + uint32_t PanLeft = 0; + uint32_t PanRight = 0; + int32_t VolLeft = 0; + int32_t VolRight = 0; + + GUSChannel(uint8_t num) { channum = num; irqmask = 1u << num; WaveStart = 0; @@ -217,40 +254,12 @@ class GUSChannels { PanPot = 0x7; } - INLINE int32_t LoadSample8(const uint32_t addr/*memory address without fractional bits*/) const { - return (int8_t)GUSRam[addr & 0xFFFFFu/*1MB*/] << int32_t(8); /* typecast to sign extend 8-bit value */ - } - - INLINE int32_t LoadSample16(const uint32_t addr/*memory address without fractional bits*/) const { - const uint32_t adjaddr = (addr & 0xC0000u/*256KB bank*/) | ((addr & 0x1FFFFu) << 1u/*16-bit sample value within bank*/); - return (int16_t)host_readw(GUSRam + adjaddr);/* typecast to sign extend 16-bit value */ - } - - // Returns a single 16-bit sample from the Gravis's RAM INLINE int32_t GetSample8() const { - /* LoadSample*() will take care of wrapping to 1MB */ - const uint32_t useAddr = WaveAddr >> WAVE_FRACT; - { - // Interpolate - int32_t w1 = LoadSample8(useAddr); - int32_t w2 = LoadSample8(useAddr + 1u); - int32_t diff = w2 - w1; - int32_t scale = (int32_t)(WaveAddr & WAVE_FRACT_MASK); - return (w1 + ((diff * scale) >> WAVE_FRACT)); - } + return myGUS.GetSample8(WaveAddr); } INLINE int32_t GetSample16() const { - /* Load Sample*() will take care of wrapping to 1MB and funky bank/sample conversion */ - const uint32_t useAddr = WaveAddr >> WAVE_FRACT; - { - // Interpolate - int32_t w1 = LoadSample16(useAddr); - int32_t w2 = LoadSample16(useAddr + 1u); - int32_t diff = w2 - w1; - int32_t scale = (int32_t)(WaveAddr & WAVE_FRACT_MASK); - return (w1 + ((diff * scale) >> WAVE_FRACT)); - } + return myGUS.GetSample16(WaveAddr); } void WriteWaveFreq(uint16_t val) { @@ -467,7 +476,7 @@ class GUSChannels { else tmpsamp = GetSample8(); // Output stereo sample if DAC enable on - if ((GUS_reset_reg & 0x02/*DAC enable*/) == 0x02) { + if ((myGUS.GUS_reset_reg & 0x02/*DAC enable*/) == 0x02) { int32_t* const sp = stream + (i << 1); const int32_t L = tmpsamp * VolLeft; const int32_t R = tmpsamp * VolRight; @@ -492,7 +501,7 @@ class GUSChannels { tmpsamp = GetSample8(); // Output stereo sample if DAC enable on - if ((GUS_reset_reg & 0x02/*DAC enable*/) == 0x02) { + if ((myGUS.GUS_reset_reg & 0x02/*DAC enable*/) == 0x02) { stream[i << 1] += tmpsamp * VolLeft; stream[(i << 1) + 1] += tmpsamp * VolRight; @@ -504,100 +513,101 @@ class GUSChannels { } }; -static GUSChannels *guschan[32] = {NULL}; -static GUSChannels *curchan = NULL; +static GUSChannel *guschan[32] = {NULL}; +static GUSChannel *curchan = NULL; #if C_DEBUG void DEBUG_PrintGUS() { //debugger "GUS" command - LOG_MSG("GUS regsel=%02x regseld=%02x regdata=%02x DRAMaddr=%06x/%06x memsz=%06x curch=%02x MAXctrl=%02x regctl=%02x", - myGUS.gRegSelect, - myGUS.gRegSelectData, - myGUS.gRegData, - myGUS.gDramAddr, - myGUS.gDramAddrMask, - myGUS.memsize, - myGUS.gCurChannel, - myGUS.gUltraMAXControl, - myGUS.gRegControl); - LOG_MSG("DMActrl=%02x (TC=%u) dmaAddr=%04x%01x timerctl=%02x sampctl=%02x mixctl=%02x activech=%u (want=%u) DACrate=%uHz", - myGUS.DMAControl&0xFF, - (myGUS.DMAControl&0x100)?1:0, - myGUS.dmaAddr, - myGUS.dmaAddrOffset, - myGUS.TimerControl, - myGUS.SampControl, - myGUS.mixControl, - myGUS.ActiveChannels, - myGUS.ActiveChannelsUser, - myGUS.basefreq); - LOG_MSG("IRQen=%u IRQstat=%02x IRQchan=%04x RampIRQ=%04x WaveIRQ=%04x", - myGUS.irqenabled, - myGUS.IRQStatus, - myGUS.IRQChan, - myGUS.RampIRQ, - myGUS.WaveIRQ); - for (size_t t=0;t < 2;t++) { - LOG_MSG("Timer %u: delay=%.3fms value=%02x reached=%u raiseirq=%u masked=%u running=%u\n", - (unsigned int)t + 1u, - myGUS.timers[t].delay, - myGUS.timers[t].value, - myGUS.timers[t].reached, - myGUS.timers[t].raiseirq, - myGUS.timers[t].masked, - myGUS.timers[t].running); - } + LOG_MSG("GUS regsel=%02x regseld=%02x regdata=%02x DRAMaddr=%06x/%06x VoiceMask=%06x memsz=%06x curch=%02x MAXctrl=%02x regctl=%02x", + myGUS.gRegSelect, + myGUS.gRegSelectData, + myGUS.gRegData, + myGUS.gDramAddr, + myGUS.gDramAddrMask, + myGUS.gDramVoiceMask, + myGUS.memsize, + myGUS.gCurChannel, + myGUS.gUltraMAXControl, + myGUS.gRegControl); + LOG_MSG("DMActrl=%02x (TC=%u) dmaAddr=%04x%01x timerctl=%02x sampctl=%02x mixctl=%02x activech=%u (want=%u) DACrate=%uHz", + myGUS.DMAControl&0xFF, + (myGUS.DMAControl&0x100)?1:0, + myGUS.dmaAddr, + myGUS.dmaAddrOffset, + myGUS.TimerControl, + myGUS.SampControl, + myGUS.mixControl, + myGUS.ActiveChannels, + myGUS.ActiveChannelsUser, + myGUS.basefreq); + LOG_MSG("IRQen=%u IRQstat=%02x IRQchan=%04x RampIRQ=%04x WaveIRQ=%04x", + myGUS.irqenabled, + myGUS.IRQStatus, + myGUS.IRQChan, + myGUS.RampIRQ, + myGUS.WaveIRQ); + for (size_t t=0;t < 2;t++) { + LOG_MSG("Timer %u: delay=%.3fms value=%02x reached=%u raiseirq=%u masked=%u running=%u\n", + (unsigned int)t + 1u, + myGUS.timers[t].delay, + myGUS.timers[t].value, + myGUS.timers[t].reached, + myGUS.timers[t].raiseirq, + myGUS.timers[t].masked, + myGUS.timers[t].running); + } for (size_t t=0;t < (size_t)myGUS.ActiveChannels;t++) { - GUSChannels *ch = guschan[t]; - if (ch == NULL) continue; + GUSChannel *ch = guschan[t]; + if (ch == NULL) continue; std::string line; - switch (ch->WaveCtrl & 3) { - case 0: line += " RUN "; break; - case WCTRL_STOPPED: line += " STOPD"; break; - case WCTRL_STOP: line += " STOPN"; break; - case WCTRL_STOPPED|WCTRL_STOP: line += " STOP!"; break; - } - - if (ch->WaveCtrl & WCTRL_LOOP) - line += " LOOP"; - else if (ch->RampCtrl & WCTRL_16BIT/*roll over*/) /* !loop and (rampctl & 4) == rollover */ - line += " ROLLOVER"; - - if (ch->WaveCtrl & WCTRL_16BIT) - line += " PCM16"; - if (ch->WaveCtrl & WCTRL_BIDIRECTIONAL) - line += " BIDI"; - if (ch->WaveCtrl & WCTRL_IRQENABLED) - line += " IRQEN"; - if (ch->WaveCtrl & WCTRL_DECREASING) - line += " REV"; - if (ch->WaveCtrl & WCTRL_IRQPENDING) - line += " IRQP"; - - LOG_MSG("Voice %u: start=%05x.%03x end=%05x.%03x addr=%05x.%03x add=%05x.%03x ctl=%02x rampctl=%02x%s", - (unsigned int)t + 1u, - ch->WaveStart>>WAVE_FRACT, - (ch->WaveStart&WAVE_FRACT_MASK)<<(12-WAVE_FRACT),//current WAVE_FRACT == 9 - ch->WaveEnd>>WAVE_FRACT, - (ch->WaveEnd&WAVE_FRACT_MASK)<<(12-WAVE_FRACT),//current WAVE_FRACT == 9 - ch->WaveAddr>>WAVE_FRACT, - (ch->WaveAddr&WAVE_FRACT_MASK)<<(12-WAVE_FRACT),//current WAVE_FRACT == 9 - ch->WaveAdd>>WAVE_FRACT, - (ch->WaveAdd&WAVE_FRACT_MASK)<<(12-WAVE_FRACT),//current WAVE_FRACT == 9 - ch->WaveCtrl, - ch->RampCtrl, - line.c_str()); - LOG_MSG(" Ramp start=%05x.%03x end=%05x.%03x vol=%05x.%03x add=%05x.%03x pan=%x", - ch->RampStart>>RAMP_FRACT, - (ch->RampStart&RAMP_FRACT_MASK)<<(12-RAMP_FRACT),//current RAMP_FRACT == 10 - ch->RampEnd>>RAMP_FRACT, - (ch->RampEnd&RAMP_FRACT_MASK)<<(12-RAMP_FRACT),//current RAMP_FRACT == 10 - ch->RampVol>>RAMP_FRACT, - (ch->RampVol&RAMP_FRACT_MASK)<<(12-RAMP_FRACT),//current RAMP_FRACT == 10 - ch->RampAdd>>RAMP_FRACT, - (ch->RampAdd&RAMP_FRACT_MASK)<<(12-RAMP_FRACT),//current RAMP_FRACT == 10 - ch->PanPot); + switch (ch->WaveCtrl & 3) { + case 0: line += " RUN "; break; + case WCTRL_STOPPED: line += " STOPD"; break; + case WCTRL_STOP: line += " STOPN"; break; + case WCTRL_STOPPED|WCTRL_STOP: line += " STOP!"; break; + } + + if (ch->WaveCtrl & WCTRL_LOOP) + line += " LOOP"; + else if (ch->RampCtrl & WCTRL_16BIT/*roll over*/) /* !loop and (rampctl & 4) == rollover */ + line += " ROLLOVER"; + + if (ch->WaveCtrl & WCTRL_16BIT) + line += " PCM16"; + if (ch->WaveCtrl & WCTRL_BIDIRECTIONAL) + line += " BIDI"; + if (ch->WaveCtrl & WCTRL_IRQENABLED) + line += " IRQEN"; + if (ch->WaveCtrl & WCTRL_DECREASING) + line += " REV"; + if (ch->WaveCtrl & WCTRL_IRQPENDING) + line += " IRQP"; + + LOG_MSG("Voice %u: start=%05x.%03x end=%05x.%03x addr=%05x.%03x add=%05x.%03x ctl=%02x rampctl=%02x%s", + (unsigned int)t + 1u, + ch->WaveStart>>WAVE_FRACT, + (ch->WaveStart&WAVE_FRACT_MASK)<<(12-WAVE_FRACT),//current WAVE_FRACT == 9 + ch->WaveEnd>>WAVE_FRACT, + (ch->WaveEnd&WAVE_FRACT_MASK)<<(12-WAVE_FRACT),//current WAVE_FRACT == 9 + ch->WaveAddr>>WAVE_FRACT, + (ch->WaveAddr&WAVE_FRACT_MASK)<<(12-WAVE_FRACT),//current WAVE_FRACT == 9 + ch->WaveAdd>>WAVE_FRACT, + (ch->WaveAdd&WAVE_FRACT_MASK)<<(12-WAVE_FRACT),//current WAVE_FRACT == 9 + ch->WaveCtrl, + ch->RampCtrl, + line.c_str()); + LOG_MSG(" Ramp start=%05x.%03x end=%05x.%03x vol=%05x.%03x add=%05x.%03x pan=%x", + ch->RampStart>>RAMP_FRACT, + (ch->RampStart&RAMP_FRACT_MASK)<<(12-RAMP_FRACT),//current RAMP_FRACT == 10 + ch->RampEnd>>RAMP_FRACT, + (ch->RampEnd&RAMP_FRACT_MASK)<<(12-RAMP_FRACT),//current RAMP_FRACT == 10 + ch->RampVol>>RAMP_FRACT, + (ch->RampVol&RAMP_FRACT_MASK)<<(12-RAMP_FRACT),//current RAMP_FRACT == 10 + ch->RampAdd>>RAMP_FRACT, + (ch->RampAdd&RAMP_FRACT_MASK)<<(12-RAMP_FRACT),//current RAMP_FRACT == 10 + ch->PanPot); } } #endif @@ -613,7 +623,7 @@ void GUS_StartDMA(); void GUS_Update_DMA_Event_transfer(); static void GUSReset(void) { - unsigned char p_GUS_reset_reg = GUS_reset_reg; + unsigned char p_GUS_reset_reg = myGUS.GUS_reset_reg; /* NTS: From the Ultrasound SDK: * @@ -625,14 +635,14 @@ static void GUSReset(void) { * LOWER 8 bits, when the code should have been checking the UPPER 8 bits. Programming error #2 was the mis-interpretation of bit 0 (bit 8 of * the gRegData). According to the SDK, clearing bit 0 triggers RESET, setting bit 0 starts the card running again. The original code had * it backwards. */ - GUS_reset_reg = (myGUS.gRegData >> 8) & 7; + myGUS.GUS_reset_reg = (myGUS.gRegData >> 8) & 7; if ((myGUS.gRegData & 0x400) != 0x000 || myGUS.force_master_irq_enable) myGUS.irqenabled = true; else myGUS.irqenabled = false; - if (GUS_reset_reg ^ p_GUS_reset_reg) + if (myGUS.GUS_reset_reg ^ p_GUS_reset_reg) LOG(LOG_MISC,LOG_DEBUG)("GUS reset with 0x%04X",myGUS.gRegData); if ((myGUS.gRegData & 0x100) == 0x000) { @@ -698,7 +708,7 @@ static void GUSReset(void) { } /* if the card was just put into reset, or the card WAS in reset, bits 1-2 are cleared */ - if ((GUS_reset_reg & 1) == 0 || (p_GUS_reset_reg & 1) == 0) { + if ((myGUS.GUS_reset_reg & 1) == 0 || (p_GUS_reset_reg & 1) == 0) { /* GUS classic observed behavior: resetting the card, or even coming out of reset, clears bits 1-2. * That means, if you write any value to GUS RESET with bit 0 == 0, bits 1-2 become zero as well. * And if you take the card out of reset, bits 1-2 are zeroed. @@ -719,7 +729,7 @@ static void GUSReset(void) { * outb(0x3X3,0x4C); outb(0x3X5,0x06); <- bit 0 == 0, we're trying to set bits 1-2 * outb(0x3X3,0x4C); c = inb(0x3X5); <- you'll get 0x00, not 0x06, card is in reset state */ myGUS.irqenabled = myGUS.force_master_irq_enable; // IRQ enable resets, unless user specified we force it on - GUS_reset_reg &= 1; + myGUS.GUS_reset_reg &= 1; } GUS_CheckIRQ(); @@ -762,11 +772,11 @@ static INLINE void GUS_CheckIRQ(void) { if (gus_prev_effective_irqstat == 0) { PIC_ActivateIRQ(myGUS.irq1); - if (gus_warn_irq_conflict) + if (gus_warn_irq_conflict) LOG(LOG_MISC,LOG_WARN)( - "GUS warning: Both IRQs set to the same signal line WITHOUT combining! " - "This is documented to cause bus conflicts on real hardware"); - } + "GUS warning: Both IRQs set to the same signal line WITHOUT combining! " + "This is documented to cause bus conflicts on real hardware"); + } } gus_prev_effective_irqstat = irqstat; @@ -818,7 +828,7 @@ static uint16_t ExecuteReadRegister(void) { * would not work on the Interwave? */ if (myGUS.globalread80alias && effective > 0x8F) effective &= 0x7F; -// LOG_MSG("Read global reg %x",myGUS.gRegSelect,effective); + // LOG_MSG("Read global reg %x",myGUS.gRegSelect,effective); switch (effective) { case 0x8E: // read active channel register @@ -849,7 +859,7 @@ static uint16_t ExecuteReadRegister(void) { tmpreg |= (myGUS.DMAControl & 0x100) >> 2; /* Bit 6 on read is the DMA terminal count IRQ status */ return (uint16_t)(tmpreg << 8); case 0x4c: // GUS reset register - tmpreg = (GUS_reset_reg & ~0x4) | (myGUS.irqenabled ? 0x4 : 0x0); + tmpreg = (myGUS.GUS_reset_reg & ~0x4) | (myGUS.irqenabled ? 0x4 : 0x0); /* GUS Classic observed behavior: You can read Register 4Ch from both 3X4 and 3X5 and get the same 8-bit contents */ return ((uint16_t)(tmpreg << 8) | (uint16_t)tmpreg); case 0x80: // Channel voice control read register @@ -915,200 +925,200 @@ static void GUS_TimerEvent(Bitu val) { PIC_AddEvent(GUS_TimerEvent,myGUS.timers[val].delay,val); } - + static void ExecuteGlobRegister(void) { int i; -// if (myGUS.gRegSelect|1!=0x44) LOG_MSG("write global register %x with %x", myGUS.gRegSelect, myGUS.gRegData); + // if (myGUS.gRegSelect|1!=0x44) LOG_MSG("write global register %x with %x", myGUS.gRegSelect, myGUS.gRegData); switch(myGUS.gRegSelect) { - case 0x0: // Channel voice control register - gus_chan->FillUp(); - if(curchan) curchan->WriteWaveCtrl((uint16_t)myGUS.gRegData>>8); - break; - case 0x1: // Channel frequency control register - gus_chan->FillUp(); - if(curchan) curchan->WriteWaveFreq(myGUS.gRegData); - break; - case 0x2: // Channel MSW start address register - if (curchan) { - uint32_t tmpaddr = (uint32_t)(myGUS.gRegData & 0x1fff) << 16; /* upper 13 bits of integer portion */ - curchan->WaveStart = (curchan->WaveStart & WAVE_MSWMASK) | tmpaddr; - } - break; - case 0x3: // Channel LSW start address register - if(curchan != NULL) { - uint32_t tmpaddr = (uint32_t)(myGUS.gRegData & 0xffe0); /* lower 7 bits of integer portion, and all 4 bits of fractional portion. bits 4-0 of the incoming 16-bit WORD are not used */ - curchan->WaveStart = (curchan->WaveStart & WAVE_LSWMASK) | tmpaddr; - } - break; - case 0x4: // Channel MSW end address register - if(curchan != NULL) { - uint32_t tmpaddr = (uint32_t)(myGUS.gRegData & 0x1fff) << 16; /* upper 13 bits of integer portion */ - curchan->WaveEnd = (curchan->WaveEnd & WAVE_MSWMASK) | tmpaddr; - } - break; - case 0x5: // Channel MSW end address register - if(curchan != NULL) { - uint32_t tmpaddr = (uint32_t)(myGUS.gRegData & 0xffe0); /* lower 7 bits of integer portion, and all 4 bits of fractional portion. bits 4-0 of the incoming 16-bit WORD are not used */ - curchan->WaveEnd = (curchan->WaveEnd & WAVE_LSWMASK) | tmpaddr; - } - break; - case 0x6: // Channel volume ramp rate register - gus_chan->FillUp(); - if(curchan != NULL) { - uint8_t tmpdata = (uint16_t)myGUS.gRegData>>8; - curchan->WriteRampRate(tmpdata); - } - break; - case 0x7: // Channel volume ramp start register EEEEMMMM - if(curchan != NULL) { - uint8_t tmpdata = (uint16_t)myGUS.gRegData >> 8; - curchan->RampStart = (uint32_t)(tmpdata << (4+RAMP_FRACT)); - } - break; - case 0x8: // Channel volume ramp end register EEEEMMMM - if(curchan != NULL) { - uint8_t tmpdata = (uint16_t)myGUS.gRegData >> 8; - curchan->RampEnd = (uint32_t)(tmpdata << (4+RAMP_FRACT)); - } - break; - case 0x9: // Channel current volume register - gus_chan->FillUp(); - if(curchan != NULL) { - uint16_t tmpdata = (uint16_t)myGUS.gRegData >> 4; - curchan->RampVol = (uint32_t)(tmpdata << RAMP_FRACT); - curchan->UpdateVolumes(); - } - break; - case 0xA: // Channel MSW current address register - gus_chan->FillUp(); - if(curchan != NULL) { - uint32_t tmpaddr = (uint32_t)(myGUS.gRegData & 0x1fff) << 16; /* upper 13 bits of integer portion */ - curchan->WaveAddr = (curchan->WaveAddr & WAVE_MSWMASK) | tmpaddr; - } - break; - case 0xB: // Channel LSW current address register - gus_chan->FillUp(); - if(curchan != NULL) { - uint32_t tmpaddr = (uint32_t)(myGUS.gRegData & 0xffff); /* lower 7 bits of integer portion, and all 9 bits of fractional portion */ - curchan->WaveAddr = (curchan->WaveAddr & WAVE_LSWMASK) | tmpaddr; - } - break; - case 0xC: // Channel pan pot register - gus_chan->FillUp(); - if(curchan) curchan->WritePanPot((uint16_t)myGUS.gRegData>>8); - break; - case 0xD: // Channel volume control register - gus_chan->FillUp(); - if(curchan) curchan->WriteRampCtrl((uint16_t)myGUS.gRegData>>8); - break; - case 0xE: // Set active channel register - /* Hack for "Ice Fever" demoscene production: - * If the DAC is active (bit 1 of GUS reset is set), ignore writes to this register. - * The demo resets the GUS with 14 channels, then after reset changes it to 16 for some reason. - * Without this hack, music will sound slowed down and wrong. - * As far as I know, real hardware will accept the change immediately and produce the same - * slowed down sound music. --J.C. */ - if (ignore_active_channel_write_while_active) { - if (GUS_reset_reg & 0x02/*DAC enable*/) { - LOG_MSG("GUS: Attempt to change active channel count while DAC active rejected"); - break; + case 0x0: // Channel voice control register + gus_chan->FillUp(); + if(curchan) curchan->WriteWaveCtrl((uint16_t)myGUS.gRegData>>8); + break; + case 0x1: // Channel frequency control register + gus_chan->FillUp(); + if(curchan) curchan->WriteWaveFreq(myGUS.gRegData); + break; + case 0x2: // Channel MSW start address register + if (curchan) { + uint32_t tmpaddr = (uint32_t)(myGUS.gRegData & 0x1fff) << 16; /* upper 13 bits of integer portion */ + curchan->WaveStart = (curchan->WaveStart & WAVE_MSWMASK) | tmpaddr; + } + break; + case 0x3: // Channel LSW start address register + if(curchan != NULL) { + uint32_t tmpaddr = (uint32_t)(myGUS.gRegData & 0xffe0); /* lower 7 bits of integer portion, and all 4 bits of fractional portion. bits 4-0 of the incoming 16-bit WORD are not used */ + curchan->WaveStart = (curchan->WaveStart & WAVE_LSWMASK) | tmpaddr; + } + break; + case 0x4: // Channel MSW end address register + if(curchan != NULL) { + uint32_t tmpaddr = (uint32_t)(myGUS.gRegData & 0x1fff) << 16; /* upper 13 bits of integer portion */ + curchan->WaveEnd = (curchan->WaveEnd & WAVE_MSWMASK) | tmpaddr; + } + break; + case 0x5: // Channel MSW end address register + if(curchan != NULL) { + uint32_t tmpaddr = (uint32_t)(myGUS.gRegData & 0xffe0); /* lower 7 bits of integer portion, and all 4 bits of fractional portion. bits 4-0 of the incoming 16-bit WORD are not used */ + curchan->WaveEnd = (curchan->WaveEnd & WAVE_LSWMASK) | tmpaddr; + } + break; + case 0x6: // Channel volume ramp rate register + gus_chan->FillUp(); + if(curchan != NULL) { + uint8_t tmpdata = (uint16_t)myGUS.gRegData>>8; + curchan->WriteRampRate(tmpdata); + } + break; + case 0x7: // Channel volume ramp start register EEEEMMMM + if(curchan != NULL) { + uint8_t tmpdata = (uint16_t)myGUS.gRegData >> 8; + curchan->RampStart = (uint32_t)(tmpdata << (4+RAMP_FRACT)); + } + break; + case 0x8: // Channel volume ramp end register EEEEMMMM + if(curchan != NULL) { + uint8_t tmpdata = (uint16_t)myGUS.gRegData >> 8; + curchan->RampEnd = (uint32_t)(tmpdata << (4+RAMP_FRACT)); + } + break; + case 0x9: // Channel current volume register + gus_chan->FillUp(); + if(curchan != NULL) { + uint16_t tmpdata = (uint16_t)myGUS.gRegData >> 4; + curchan->RampVol = (uint32_t)(tmpdata << RAMP_FRACT); + curchan->UpdateVolumes(); + } + break; + case 0xA: // Channel MSW current address register + gus_chan->FillUp(); + if(curchan != NULL) { + uint32_t tmpaddr = (uint32_t)(myGUS.gRegData & 0x1fff) << 16; /* upper 13 bits of integer portion */ + curchan->WaveAddr = (curchan->WaveAddr & WAVE_MSWMASK) | tmpaddr; + } + break; + case 0xB: // Channel LSW current address register + gus_chan->FillUp(); + if(curchan != NULL) { + uint32_t tmpaddr = (uint32_t)(myGUS.gRegData & 0xffff); /* lower 7 bits of integer portion, and all 9 bits of fractional portion */ + curchan->WaveAddr = (curchan->WaveAddr & WAVE_LSWMASK) | tmpaddr; + } + break; + case 0xC: // Channel pan pot register + gus_chan->FillUp(); + if(curchan) curchan->WritePanPot((uint16_t)myGUS.gRegData>>8); + break; + case 0xD: // Channel volume control register + gus_chan->FillUp(); + if(curchan) curchan->WriteRampCtrl((uint16_t)myGUS.gRegData>>8); + break; + case 0xE: // Set active channel register + /* Hack for "Ice Fever" demoscene production: + * If the DAC is active (bit 1 of GUS reset is set), ignore writes to this register. + * The demo resets the GUS with 14 channels, then after reset changes it to 16 for some reason. + * Without this hack, music will sound slowed down and wrong. + * As far as I know, real hardware will accept the change immediately and produce the same + * slowed down sound music. --J.C. */ + if (ignore_active_channel_write_while_active) { + if (myGUS.GUS_reset_reg & 0x02/*DAC enable*/) { + LOG_MSG("GUS: Attempt to change active channel count while DAC active rejected"); + break; + } } - } - gus_chan->FillUp(); - myGUS.gRegSelect = myGUS.gRegData>>8; //JAZZ Jackrabbit seems to assume this? - myGUS.ActiveChannelsUser = 1+((myGUS.gRegData>>8) & 31); // NTS: The GUS SDK documents this field as bits 5-0, which is wrong, it's bits 4-0. 5-0 would imply 64 channels. - - /* The GUS SDK claims that if a channel count less than 14 is written, then it caps to 14. - * That's not true. Perhaps what the SDK is doing, but the actual hardware acts differently. - * This implementation is based on what the Gravis Ultrasound MAX actually does with this - * register. You can apparently achieve higher than 44.1KHz sample rates by programming less - * than 14 channels, and the sample rate scale ramps up appropriately, except that values - * 0 and 1 have the same effect as writing 2 and 3. Very useful undocumented behavior! - * If Gravis were smart, they would have been able to claim 48KHz sample rates by allowing - * less than 14 channels in their SDK! Not sure why they would cap it like that, unless - * there are undocumented chipset instabilities with running at higher rates. - * - * So far only verified on a Gravis Ultrasound MAX. - * - * Does anyone out there have a Gravis Ultrasound Classic (original 1992 version) they can - * test for this behavior? - * - * NOTED: Gravis Ultrasound Plug & Play (interwave) cards *do* enforce the 14-channel minimum. - * You can write less than 14 channels to this register, but unlike the Classic and Max - * cards they will not run faster than 44.1KHz. */ - myGUS.ActiveChannels = myGUS.ActiveChannelsUser; - - if (gus_type < GUS_INTERWAVE) { - // GUS MAX behavior seen on real hardware - if(myGUS.ActiveChannels < 3) myGUS.ActiveChannels += 2; - if(myGUS.ActiveChannels > 32) myGUS.ActiveChannels = 32; - } - else { - // Interwave PnP behavior seen on real hardware - if(myGUS.ActiveChannels < 14) myGUS.ActiveChannels = 14; - if(myGUS.ActiveChannels > 32) myGUS.ActiveChannels = 32; - } + gus_chan->FillUp(); + myGUS.gRegSelect = myGUS.gRegData>>8; //JAZZ Jackrabbit seems to assume this? + myGUS.ActiveChannelsUser = 1+((myGUS.gRegData>>8) & 31); // NTS: The GUS SDK documents this field as bits 5-0, which is wrong, it's bits 4-0. 5-0 would imply 64 channels. + + /* The GUS SDK claims that if a channel count less than 14 is written, then it caps to 14. + * That's not true. Perhaps what the SDK is doing, but the actual hardware acts differently. + * This implementation is based on what the Gravis Ultrasound MAX actually does with this + * register. You can apparently achieve higher than 44.1KHz sample rates by programming less + * than 14 channels, and the sample rate scale ramps up appropriately, except that values + * 0 and 1 have the same effect as writing 2 and 3. Very useful undocumented behavior! + * If Gravis were smart, they would have been able to claim 48KHz sample rates by allowing + * less than 14 channels in their SDK! Not sure why they would cap it like that, unless + * there are undocumented chipset instabilities with running at higher rates. + * + * So far only verified on a Gravis Ultrasound MAX. + * + * Does anyone out there have a Gravis Ultrasound Classic (original 1992 version) they can + * test for this behavior? + * + * NOTED: Gravis Ultrasound Plug & Play (interwave) cards *do* enforce the 14-channel minimum. + * You can write less than 14 channels to this register, but unlike the Classic and Max + * cards they will not run faster than 44.1KHz. */ + myGUS.ActiveChannels = myGUS.ActiveChannelsUser; + + if (gus_type < GUS_INTERWAVE) { + // GUS MAX behavior seen on real hardware + if(myGUS.ActiveChannels < 3) myGUS.ActiveChannels += 2; + if(myGUS.ActiveChannels > 32) myGUS.ActiveChannels = 32; + } + else { + // Interwave PnP behavior seen on real hardware + if(myGUS.ActiveChannels < 14) myGUS.ActiveChannels = 14; + if(myGUS.ActiveChannels > 32) myGUS.ActiveChannels = 32; + } - myGUS.ActiveMask=0xffffffffU >> (32-myGUS.ActiveChannels); - myGUS.basefreq = (uint32_t)(0.5 + 1000000.0 / (1.619695497 * (double)(myGUS.ActiveChannels))); + myGUS.ActiveMask=0xffffffffU >> (32-myGUS.ActiveChannels); + myGUS.basefreq = (uint32_t)(0.5 + 1000000.0 / (1.619695497 * (double)(myGUS.ActiveChannels))); - if (!myGUS.fixed_sample_rate_output) gus_chan->SetFreq(myGUS.basefreq); - else gus_chan->SetFreq(GUS_RATE); + if (!myGUS.fixed_sample_rate_output) gus_chan->SetFreq(myGUS.basefreq); + else gus_chan->SetFreq(GUS_RATE); #if LOG_GUS - LOG_MSG("GUS set to %d channels fixed=%u freq=%luHz", myGUS.ActiveChannels,myGUS.fixed_sample_rate_output,(unsigned long)myGUS.basefreq); + LOG_MSG("GUS set to %d channels fixed=%u freq=%luHz", myGUS.ActiveChannels,myGUS.fixed_sample_rate_output,(unsigned long)myGUS.basefreq); #endif - for (i=0;iUpdateWaveRamp(); - break; - case 0x10: // Undocumented register used in Fast Tracker 2 - break; - case 0x41: // Dma control register - myGUS.DMAControl &= ~0xFFu; // FIXME: Does writing DMA Control clear the DMA TC IRQ? - myGUS.DMAControl |= (uint8_t)(myGUS.gRegData>>8); - GUS_Update_DMA_Event_transfer(); - if (myGUS.DMAControl & 1) GUS_StartDMA(); - else GUS_StopDMA(); - break; - case 0x42: // Gravis DRAM DMA address register - myGUS.dmaAddr = myGUS.gRegData; - myGUS.dmaAddrOffset = 0; - break; - case 0x43: // LSB Peek/poke DRAM position - myGUS.gDramAddr = (0xff0000 & myGUS.gDramAddr) | ((uint32_t)myGUS.gRegData); - break; - case 0x44: // MSW Peek/poke DRAM position - myGUS.gDramAddr = (0xffff & myGUS.gDramAddr) | ((uint32_t)myGUS.gRegData>>8) << 16; - break; - case 0x45: // Timer control register. Identical in operation to Adlib's timer - myGUS.TimerControl = (uint8_t)(myGUS.gRegData>>8); - myGUS.timers[0].raiseirq=(myGUS.TimerControl & 0x04)>0; - if (!myGUS.timers[0].raiseirq) myGUS.IRQStatus&=~0x04; - myGUS.timers[1].raiseirq=(myGUS.TimerControl & 0x08)>0; - if (!myGUS.timers[1].raiseirq) myGUS.IRQStatus&=~0x08; - GUS_CheckIRQ(); - break; - case 0x46: // Timer 1 control - myGUS.timers[0].value = (uint8_t)(myGUS.gRegData>>8); - myGUS.timers[0].delay = (0x100 - myGUS.timers[0].value) * 0.080f; - break; - case 0x47: // Timer 2 control - myGUS.timers[1].value = (uint8_t)(myGUS.gRegData>>8); - myGUS.timers[1].delay = (0x100 - myGUS.timers[1].value) * 0.320f; - break; - case 0x49: // DMA sampling control register - myGUS.SampControl = (uint8_t)(myGUS.gRegData>>8); - if (myGUS.DMAControl & 1) GUS_StartDMA(); - else GUS_StopDMA(); - break; - case 0x4c: // GUS reset register - GUSReset(); - break; - default: + for (i=0;iUpdateWaveRamp(); + break; + case 0x10: // Undocumented register used in Fast Tracker 2 + break; + case 0x41: // Dma control register + myGUS.DMAControl &= ~0xFFu; // FIXME: Does writing DMA Control clear the DMA TC IRQ? + myGUS.DMAControl |= (uint8_t)(myGUS.gRegData>>8); + GUS_Update_DMA_Event_transfer(); + if (myGUS.DMAControl & 1) GUS_StartDMA(); + else GUS_StopDMA(); + break; + case 0x42: // Gravis DRAM DMA address register + myGUS.dmaAddr = myGUS.gRegData; + myGUS.dmaAddrOffset = 0; + break; + case 0x43: // LSB Peek/poke DRAM position + myGUS.gDramAddr = (0xff0000 & myGUS.gDramAddr) | ((uint32_t)myGUS.gRegData); + break; + case 0x44: // MSW Peek/poke DRAM position + myGUS.gDramAddr = (0xffff & myGUS.gDramAddr) | ((uint32_t)myGUS.gRegData>>8) << 16; + break; + case 0x45: // Timer control register. Identical in operation to Adlib's timer + myGUS.TimerControl = (uint8_t)(myGUS.gRegData>>8); + myGUS.timers[0].raiseirq=(myGUS.TimerControl & 0x04)>0; + if (!myGUS.timers[0].raiseirq) myGUS.IRQStatus&=~0x04; + myGUS.timers[1].raiseirq=(myGUS.TimerControl & 0x08)>0; + if (!myGUS.timers[1].raiseirq) myGUS.IRQStatus&=~0x08; + GUS_CheckIRQ(); + break; + case 0x46: // Timer 1 control + myGUS.timers[0].value = (uint8_t)(myGUS.gRegData>>8); + myGUS.timers[0].delay = (0x100 - myGUS.timers[0].value) * 0.080f; + break; + case 0x47: // Timer 2 control + myGUS.timers[1].value = (uint8_t)(myGUS.gRegData>>8); + myGUS.timers[1].delay = (0x100 - myGUS.timers[1].value) * 0.320f; + break; + case 0x49: // DMA sampling control register + myGUS.SampControl = (uint8_t)(myGUS.gRegData>>8); + if (myGUS.DMAControl & 1) GUS_StartDMA(); + else GUS_StopDMA(); + break; + case 0x4c: // GUS reset register + GUSReset(); + break; + default: #if LOG_GUS - LOG_MSG("Unimplemented global register %x -- %x", myGUS.gRegSelect, myGUS.gRegData); + LOG_MSG("Unimplemented global register %x -- %x", myGUS.gRegSelect, myGUS.gRegData); #endif - break; + break; } return; } @@ -1117,214 +1127,214 @@ static void ExecuteGlobRegister(void) { /* NTS: This was written and tested only through Ultrasound software and emulation. * I do not have a Gravis Ultrasound card with this type of mixer to test against. --J.C. */ struct gus_ICS2101 { -public: - // ICS2101 and how Gravis wired up the input pairs when using it, according to some BSD and Linux kernel sources - // - // From the header file: - // - // Register defs for Integrated Circuit Systems, Inc. ICS-2101 mixer - // chip, used on Gravis UltraSound cards. - // - // Block diagram: - // port # - // 0 +----+ - // Mic in (Right/Left) -->--->---| | - // 1 | | amp --->---- amp out - // Line in (Right/Left) -->--->---| | | - // 2 | | | - // CD in (Right/Left) -->--->---| |--->---+---+----->---- line out - // 3 | | | - // GF1 Out (Right/Left) -->--->---| | | - // 4 | | | - // Unused (Right/Left) -->--->---| | | - // +----+ v - // ICS 2101 | - // | - // To GF1 Sample Input ---<---------------+ - // - // Master output volume: mixer channel #5 - enum { - MIC_IN_PORT=0, - LINE_IN_PORT=1, - CD_IN_PORT=2, - GF1_OUT_PORT=3, - UNUSED_PORT=4, - MASTER_OUTPUT_PORT=5 - }; -public: - gus_ICS2101() { - } -public: - void addressWrite(uint8_t addr) { - addr_attenuator = (addr >> 3) & 7; - addr_control = addr & 7; - } - void dataWrite(uint8_t val) { - LOG(LOG_MISC,LOG_DEBUG)("GUS ICS-2101 Mixer Data Write val=%02xh to attensel=%u(%s) ctrlsel=%u(%s)", - (int)val, - addr_attenuator,attenuatorName(addr_attenuator), - addr_control,controlName(addr_control)); - - if (addr_control & 2) { // attenuator NTS: Only because an existing ICS patch for DOSBox does it this way... does hardware do it this way? - mixpair[addr_attenuator].setAttenuation(addr_control&1,val); - mixpair[addr_attenuator].debugPrintMixer(attenuatorName(addr_attenuator)); - updateVolPair(addr_attenuator); - } - else if (addr_control & 4) { // pan/balance - mixpair[addr_attenuator].Panning = val & 0xF; - // FIXME: Does the panning take effect immediately, or does the chip require the DOS program - // to write attenuation again to apply the panning? - } - else { - mixpair[addr_attenuator].setControl(addr_control&1,val); - } - } - const char *attenuatorName(const uint8_t c) const { - switch (c) { - case 0: return "Mic in"; - case 1: return "Line in"; - case 2: return "CD in"; - case 3: return "GF1 out"; - case 4: return "Pair 5, unused"; - case 5: return "Master output"; - } - - return "?"; - } - const char *controlName(const uint8_t c) const { - switch (c) { - case 0: return "Control Left"; // 000 - case 1: return "Control Right"; // 001 - case 2: return "Attenuator Left"; // 010 - case 3: return "Attenuator Right"; // 011 - case 4: case 5: // 10x - return "Pan/Balance"; - } - - return "?"; - } - void updateVolPair(unsigned int pair) { - if (pair >= MASTER_OUTPUT_PORT) { - // master volume changes everyone else. do it, through 1 level of recursion. - for (unsigned int i=0;i < MASTER_OUTPUT_PORT;i++) - updateVolPair(i); - } - else { - float m[2]; - - assert(gus_chan != NULL); - - // copy not just attenuation but modify according to master volume - for (unsigned int ch=0;ch < 2;ch++) { - volpair[pair].AttenDb[ch] = mixpair[pair].AttenDb[ch] + mixpair[MASTER_OUTPUT_PORT].AttenDb[ch]; - m[ch] = powf(10.0f,volpair[pair].AttenDb[ch]/20.0f); - } - - if (pair == GF1_OUT_PORT) - gus_chan->SetVolume(m[0],m[1]); - } - } -public: - struct mixcontrol { public: - mixcontrol() { - Panning = 8; - Control[0] = 0x01; - Control[1] = 0x02; - MapControl[0] = 0x01; - MapControl[1] = 0x02; - setAttenuation(0,0x7F); // FIXME: Because we want DOSBox to come up as if ULTRINIT/ULTRAMIX were run to configure the mixer - setAttenuation(1,0x7F); - } + // ICS2101 and how Gravis wired up the input pairs when using it, according to some BSD and Linux kernel sources + // + // From the header file: + // + // Register defs for Integrated Circuit Systems, Inc. ICS-2101 mixer + // chip, used on Gravis UltraSound cards. + // + // Block diagram: + // port # + // 0 +----+ + // Mic in (Right/Left) -->--->---| | + // 1 | | amp --->---- amp out + // Line in (Right/Left) -->--->---| | | + // 2 | | | + // CD in (Right/Left) -->--->---| |--->---+---+----->---- line out + // 3 | | | + // GF1 Out (Right/Left) -->--->---| | | + // 4 | | | + // Unused (Right/Left) -->--->---| | | + // +----+ v + // ICS 2101 | + // | + // To GF1 Sample Input ---<---------------+ + // + // Master output volume: mixer channel #5 + enum { + MIC_IN_PORT=0, + LINE_IN_PORT=1, + CD_IN_PORT=2, + GF1_OUT_PORT=3, + UNUSED_PORT=4, + MASTER_OUTPUT_PORT=5 + }; public: - // gain() taken from an existing patch - float gain(uint8_t val) { // in 0-127, out -90 to 0db, min to max - float gain=(127-val)*-0.5; - if(val<16) for(int i=0;i<(16-val);i++) gain+=-0.5-.13603*(i+1); // increasing rate of change, based on datasheet graph - return gain; + gus_ICS2101() { } - // end borrow - void setControl(const unsigned int channel,const uint8_t val) { - Control[channel] = val; - updateMapControl(); + public: + void addressWrite(uint8_t addr) { + addr_attenuator = (addr >> 3) & 7; + addr_control = addr & 7; + } + void dataWrite(uint8_t val) { + LOG(LOG_MISC,LOG_DEBUG)("GUS ICS-2101 Mixer Data Write val=%02xh to attensel=%u(%s) ctrlsel=%u(%s)", + (int)val, + addr_attenuator,attenuatorName(addr_attenuator), + addr_control,controlName(addr_control)); + + if (addr_control & 2) { // attenuator NTS: Only because an existing ICS patch for DOSBox does it this way... does hardware do it this way? + mixpair[addr_attenuator].setAttenuation(addr_control&1,val); + mixpair[addr_attenuator].debugPrintMixer(attenuatorName(addr_attenuator)); + updateVolPair(addr_attenuator); + } + else if (addr_control & 4) { // pan/balance + mixpair[addr_attenuator].Panning = val & 0xF; + // FIXME: Does the panning take effect immediately, or does the chip require the DOS program + // to write attenuation again to apply the panning? + } + else { + mixpair[addr_attenuator].setControl(addr_control&1,val); + } } - void updateMapControl() { - /* control mode according to Left control register, according to datasheet */ - switch (Control[0]&0xE) { - case 0: case 2: // normal mode - MapControl[0] = Control[0]&3; - MapControl[1] = Control[1]&3; - break; - case 4: // stereo (normal or reversed) - MapControl[0] = (Control[0]&1) ? 1 : 2; // left -> left or left -> right if swapped - MapControl[1] = (Control[0]&1) ? 2 : 1; // right -> right or right -> left if swapped - break; - case 6: // Mono - MapControl[0] = 1; // Is this right?? - MapControl[1] = 2; // Is this right?? - break; - case 8: case 12: // Balance - MapControl[0] = (Control[0]&1) ? 1 : 2; // left -> left or left -> right if swapped - MapControl[1] = (Control[0]&1) ? 2 : 1; // right -> right or right -> left if swapped - // fixme: Do we update attenuation to reflect panning? or does the ICS chip need the - // DOS program to write the attenuation registers again for the chip to apply balance/panning? - break; - case 10: case 14: // Pan - MapControl[0] = (Control[0]&1) ? 1 : 2; // left -> left or left -> right if swapped - MapControl[1] = (Control[0]&1) ? 2 : 1; // right -> right or right -> left if swapped - // fixme: Do we update attenuation to reflect panning? or does the ICS chip need the - // DOS program to write the attenuation registers again for the chip to apply balance/panning? - break; + const char *attenuatorName(const uint8_t c) const { + switch (c) { + case 0: return "Mic in"; + case 1: return "Line in"; + case 2: return "CD in"; + case 3: return "GF1 out"; + case 4: return "Pair 5, unused"; + case 5: return "Master output"; } + + return "?"; } - void setAttenuation(const unsigned int channel,const uint8_t val) { - // FIXME: I am only able to test the "normal" mode since that's the only mode used by Gravis's DOS and Windows drivers. - // The code below has not been tested in "Stereo" and "Pan/Balance" mode. If any DOS drivers use it, please direct - // me to them so I or anyone else can test! ---J.C. + const char *controlName(const uint8_t c) const { + switch (c) { + case 0: return "Control Left"; // 000 + case 1: return "Control Right"; // 001 + case 2: return "Attenuator Left"; // 010 + case 3: return "Attenuator Right"; // 011 + case 4: case 5: // 10x + return "Pan/Balance"; + } - if ((Control[0]&0xC) == 0) { - Attenuation[channel] = val & 0x7F; - AttenDb[channel] = gain(Attenuation[channel]); + return "?"; + } + void updateVolPair(unsigned int pair) { + if (pair >= MASTER_OUTPUT_PORT) { + // master volume changes everyone else. do it, through 1 level of recursion. + for (unsigned int i=0;i < MASTER_OUTPUT_PORT;i++) + updateVolPair(i); } else { - // "stereo & balance use left control & gain, copies to right regs" says the Vogons patch I'm studying... - Attenuation[0] = Attenuation[1] = val & 0x7F; - AttenDb[0] = gain(Attenuation[0]); - AttenDb[1] = AttenDb[0]; - - // taken from the same Vogons patch, except potential access past array fixed - if ((Control[0]&0xC) == 8/*Balance/pan mode*/) { - static const float pan[16+1] = {-9,-9, -8.5, -6.5,-5.5,-4.5, -3.5,-3,-2.5,-2,-1.5,-1,-.5, 0,0,0,0}; - AttenDb[0] += pan[Panning]; - AttenDb[1] += pan[16-Panning]; + float m[2]; + + assert(gus_chan != NULL); + + // copy not just attenuation but modify according to master volume + for (unsigned int ch=0;ch < 2;ch++) { + volpair[pair].AttenDb[ch] = mixpair[pair].AttenDb[ch] + mixpair[MASTER_OUTPUT_PORT].AttenDb[ch]; + m[ch] = powf(10.0f,volpair[pair].AttenDb[ch]/20.0f); } + if (pair == GF1_OUT_PORT) + gus_chan->SetVolume(m[0],m[1]); } } - void debugPrintMixer(const char *name) { - LOG(LOG_MISC,LOG_DEBUG)("GUS ICS control '%s': %.3fdB %.3fdB",name,AttenDb[0],AttenDb[1]); - } public: - uint8_t Panning; - uint8_t Control[2]; - uint8_t MapControl[2]; - uint8_t Attenuation[2]; // 0x00-0x7F where 0x00 is mute (max atten) and 0x7F is full volume - float AttenDb[2]; // in decibels - }; - struct volpair { -public: - volpair() { - AttenDb[0] = AttenDb[1] = 0; - } -public: - float AttenDb[2]; - uint32_t Fix1616Mult[2] = {}; // linear multiply to apply volume - }; -public: - struct mixcontrol mixpair[8]; // pairs 1-5 and Master - struct volpair volpair[5] = {}; // pairs 1-5 scaled by master - uint8_t addr_attenuator = 0; // which attenuator is selected - uint8_t addr_control = 0; // which control is selected + struct mixcontrol { + public: + mixcontrol() { + Panning = 8; + Control[0] = 0x01; + Control[1] = 0x02; + MapControl[0] = 0x01; + MapControl[1] = 0x02; + setAttenuation(0,0x7F); // FIXME: Because we want DOSBox to come up as if ULTRINIT/ULTRAMIX were run to configure the mixer + setAttenuation(1,0x7F); + } + public: + // gain() taken from an existing patch + float gain(uint8_t val) { // in 0-127, out -90 to 0db, min to max + float gain=(127-val)*-0.5; + if(val<16) for(int i=0;i<(16-val);i++) gain+=-0.5-.13603*(i+1); // increasing rate of change, based on datasheet graph + return gain; + } + // end borrow + void setControl(const unsigned int channel,const uint8_t val) { + Control[channel] = val; + updateMapControl(); + } + void updateMapControl() { + /* control mode according to Left control register, according to datasheet */ + switch (Control[0]&0xE) { + case 0: case 2: // normal mode + MapControl[0] = Control[0]&3; + MapControl[1] = Control[1]&3; + break; + case 4: // stereo (normal or reversed) + MapControl[0] = (Control[0]&1) ? 1 : 2; // left -> left or left -> right if swapped + MapControl[1] = (Control[0]&1) ? 2 : 1; // right -> right or right -> left if swapped + break; + case 6: // Mono + MapControl[0] = 1; // Is this right?? + MapControl[1] = 2; // Is this right?? + break; + case 8: case 12: // Balance + MapControl[0] = (Control[0]&1) ? 1 : 2; // left -> left or left -> right if swapped + MapControl[1] = (Control[0]&1) ? 2 : 1; // right -> right or right -> left if swapped + // fixme: Do we update attenuation to reflect panning? or does the ICS chip need the + // DOS program to write the attenuation registers again for the chip to apply balance/panning? + break; + case 10: case 14: // Pan + MapControl[0] = (Control[0]&1) ? 1 : 2; // left -> left or left -> right if swapped + MapControl[1] = (Control[0]&1) ? 2 : 1; // right -> right or right -> left if swapped + // fixme: Do we update attenuation to reflect panning? or does the ICS chip need the + // DOS program to write the attenuation registers again for the chip to apply balance/panning? + break; + } + } + void setAttenuation(const unsigned int channel,const uint8_t val) { + // FIXME: I am only able to test the "normal" mode since that's the only mode used by Gravis's DOS and Windows drivers. + // The code below has not been tested in "Stereo" and "Pan/Balance" mode. If any DOS drivers use it, please direct + // me to them so I or anyone else can test! ---J.C. + + if ((Control[0]&0xC) == 0) { + Attenuation[channel] = val & 0x7F; + AttenDb[channel] = gain(Attenuation[channel]); + } + else { + // "stereo & balance use left control & gain, copies to right regs" says the Vogons patch I'm studying... + Attenuation[0] = Attenuation[1] = val & 0x7F; + AttenDb[0] = gain(Attenuation[0]); + AttenDb[1] = AttenDb[0]; + + // taken from the same Vogons patch, except potential access past array fixed + if ((Control[0]&0xC) == 8/*Balance/pan mode*/) { + static const float pan[16+1] = {-9,-9, -8.5, -6.5,-5.5,-4.5, -3.5,-3,-2.5,-2,-1.5,-1,-.5, 0,0,0,0}; + AttenDb[0] += pan[Panning]; + AttenDb[1] += pan[16-Panning]; + } + + } + } + void debugPrintMixer(const char *name) { + LOG(LOG_MISC,LOG_DEBUG)("GUS ICS control '%s': %.3fdB %.3fdB",name,AttenDb[0],AttenDb[1]); + } + public: + uint8_t Panning; + uint8_t Control[2]; + uint8_t MapControl[2]; + uint8_t Attenuation[2]; // 0x00-0x7F where 0x00 is mute (max atten) and 0x7F is full volume + float AttenDb[2]; // in decibels + }; + struct volpair { + public: + volpair() { + AttenDb[0] = AttenDb[1] = 0; + } + public: + float AttenDb[2]; + uint32_t Fix1616Mult[2] = {}; // linear multiply to apply volume + }; + public: + struct mixcontrol mixpair[8]; // pairs 1-5 and Master + struct volpair volpair[5] = {}; // pairs 1-5 scaled by master + uint8_t addr_attenuator = 0; // which attenuator is selected + uint8_t addr_control = 0; // which control is selected } GUS_ICS2101; static inline uint8_t read_GF1_mapping_control(const unsigned int ch) { @@ -1459,13 +1469,13 @@ struct gus_cs4231 { bool mce; bool init; - uint8_t ADCInputControl[2] = {}; /* left (I0) and right (I1) ADC Input control. bits 7-6 select source. bit 5 is mic gain. bits 3-0 controls gain. */ - uint8_t Aux1InputControl[2] = {}; /* left (I2) and right (I3) aux. input control. bits 5-0 control gain in 1.5dB steps. bit 7 is mute */ - uint8_t DACOutputControl[2] = {}; /* left (I6) and right (I7) output control attenuation. bits 5-0 control in -1.5dB steps, bit 7 is mute */ + uint8_t ADCInputControl[2] = {}; /* left (I0) and right (I1) ADC Input control. bits 7-6 select source. bit 5 is mic gain. bits 3-0 controls gain. */ + uint8_t Aux1InputControl[2] = {}; /* left (I2) and right (I3) aux. input control. bits 5-0 control gain in 1.5dB steps. bit 7 is mute */ + uint8_t DACOutputControl[2] = {}; /* left (I6) and right (I7) output control attenuation. bits 5-0 control in -1.5dB steps, bit 7 is mute */ } GUS_CS4231; static Bitu read_gus_cs4231(Bitu port,Bitu iolen) { - (void)iolen;//UNUSED + (void)iolen;//UNUSED if (myGUS.gUltraMAXControl & 0x40/*codec enable*/) return GUS_CS4231.ioread((port - GUS_BASE) & 3); // FIXME: UltraMAX allows this to be relocatable @@ -1473,7 +1483,7 @@ static Bitu read_gus_cs4231(Bitu port,Bitu iolen) { } static void write_gus_cs4231(Bitu port,Bitu val,Bitu iolen) { - (void)iolen;//UNUSED + (void)iolen;//UNUSED if (myGUS.gUltraMAXControl & 0x40/*codec enable*/) GUS_CS4231.iowrite((port - GUS_BASE) & 3,val&0xFF); } @@ -1481,114 +1491,114 @@ static void write_gus_cs4231(Bitu port,Bitu val,Bitu iolen) { static Bitu read_gus(Bitu port,Bitu iolen) { uint16_t reg16; - (void)iolen;//UNUSED -// LOG_MSG("read from gus port %x",port); + (void)iolen;//UNUSED + // LOG_MSG("read from gus port %x",port); - /* 12-bit ISA decode (FIXME: Check GUS MAX ISA card to confirm) - * - * More than 10 bits must be decoded in order for GUS MAX extended registers at 7xx to work */ - port &= 0xFFF; + /* 12-bit ISA decode (FIXME: Check GUS MAX ISA card to confirm) + * + * More than 10 bits must be decoded in order for GUS MAX extended registers at 7xx to work */ + port &= 0xFFF; - /* Except for port 3x4 subdivide 16-bit I/O into two 8-bit reads. - * See write_gus() for explanation. */ - if (iolen == 2) { - if ((port - GUS_BASE) != 0x304) { - return (read_gus(port,1) & 0xFF) + (read_gus(port+1,1) << 8u); - } - } + /* Except for port 3x4 subdivide 16-bit I/O into two 8-bit reads. + * See write_gus() for explanation. */ + if (iolen == 2) { + if ((port - GUS_BASE) != 0x304) { + return (read_gus(port,1) & 0xFF) + (read_gus(port+1,1) << 8u); + } + } switch(port - GUS_BASE) { - case 0x206: - if (myGUS.clearTCIfPollingIRQStatus) { - double t = PIC_FullIndex(); + case 0x206: + if (myGUS.clearTCIfPollingIRQStatus) { + double t = PIC_FullIndex(); - /* Hack: "Warcraft II" by Blizzard entertainment. - * - * If you configure the game to use the Gravis Ultrasound for both music and sound, the GUS support code for digital - * sound will cause the game to hang if music is playing at the same time within the main menu. The bug is that there - * is code (in real mode no less) that polls the IRQ status register (2X6) and handles each IRQ event to clear it, - * however there is no condition to handle clearing the DMA Terminal Count IRQ flag. The routine will not terminate - * until all bits are cleared, hence, the game hangs after starting a sound effect. Most often, this is visible to - * the user as causing the game to hang when you click on a button on the main menu. - * - * This hack attempts to detect the bug by looking for rapid polling of this register in a short period of time. - * If detected, we clear the DMA IRQ flag to help the loop terminate so the game continues to run. */ - if (t < (myGUS.lastIRQStatusPollAt + 0.1/*ms*/)) { - myGUS.lastIRQStatusPollAt = t; - myGUS.lastIRQStatusPollRapidCount++; - if (myGUS.clearTCIfPollingIRQStatus && (myGUS.IRQStatus & 0x80) && myGUS.lastIRQStatusPollRapidCount >= 500) { - LOG(LOG_MISC,LOG_DEBUG)("GUS: Clearing DMA TC IRQ status, DOS application appears to be stuck"); - myGUS.lastIRQStatusPollRapidCount = 0; + /* Hack: "Warcraft II" by Blizzard entertainment. + * + * If you configure the game to use the Gravis Ultrasound for both music and sound, the GUS support code for digital + * sound will cause the game to hang if music is playing at the same time within the main menu. The bug is that there + * is code (in real mode no less) that polls the IRQ status register (2X6) and handles each IRQ event to clear it, + * however there is no condition to handle clearing the DMA Terminal Count IRQ flag. The routine will not terminate + * until all bits are cleared, hence, the game hangs after starting a sound effect. Most often, this is visible to + * the user as causing the game to hang when you click on a button on the main menu. + * + * This hack attempts to detect the bug by looking for rapid polling of this register in a short period of time. + * If detected, we clear the DMA IRQ flag to help the loop terminate so the game continues to run. */ + if (t < (myGUS.lastIRQStatusPollAt + 0.1/*ms*/)) { myGUS.lastIRQStatusPollAt = t; - myGUS.IRQStatus &= 0x7F; - GUS_CheckIRQ(); + myGUS.lastIRQStatusPollRapidCount++; + if (myGUS.clearTCIfPollingIRQStatus && (myGUS.IRQStatus & 0x80) && myGUS.lastIRQStatusPollRapidCount >= 500) { + LOG(LOG_MISC,LOG_DEBUG)("GUS: Clearing DMA TC IRQ status, DOS application appears to be stuck"); + myGUS.lastIRQStatusPollRapidCount = 0; + myGUS.lastIRQStatusPollAt = t; + myGUS.IRQStatus &= 0x7F; + GUS_CheckIRQ(); + } + } + else { + myGUS.lastIRQStatusPollAt = t; + myGUS.lastIRQStatusPollRapidCount = 0; } } - else { - myGUS.lastIRQStatusPollAt = t; - myGUS.lastIRQStatusPollRapidCount = 0; - } - } - /* NTS: Contrary to some false impressions, GUS hardware does not report "one at a time", it really is a bitmask. - * I had the funny idea you read this register "one at a time" just like reading the IRQ reason bits of the RS-232 port --J.C. */ - return GUS_EffectiveIRQStatus(); - case 0x208: - uint8_t tmptime; - tmptime = 0; - if (myGUS.timers[0].reached) tmptime |= (1 << 6); - if (myGUS.timers[1].reached) tmptime |= (1 << 5); - if (tmptime & 0x60) tmptime |= (1 << 7); - if (myGUS.IRQStatus & 0x04) tmptime|=(1 << 2); - if (myGUS.IRQStatus & 0x08) tmptime|=(1 << 1); - return tmptime; - case 0x20a: - return adlib_commandreg; - case 0x20f: - if (gus_type >= GUS_MAX || gus_ics_mixer) - return 0x02; /* <- FIXME: What my GUS MAX returns. What does this mean? */ - return ~0ul; // should not happen - case 0x302: - return myGUS.gRegSelectData; - case 0x303: - return myGUS.gRegSelectData; - case 0x304: - if (iolen==2) reg16 = ExecuteReadRegister() & 0xffff; - else reg16 = ExecuteReadRegister() & 0xff; - - if (gus_type < GUS_INTERWAVE) // Versions prior to the Interwave will reflect last I/O to 3X2-3X5 when read back from 3X3 - myGUS.gRegSelectData = reg16 & 0xFF; - - return reg16; - case 0x305: - reg16 = ExecuteReadRegister() >> 8; - - if (gus_type < GUS_INTERWAVE) // Versions prior to the Interwave will reflect last I/O to 3X2-3X5 when read back from 3X3 - myGUS.gRegSelectData = reg16 & 0xFF; - - return reg16; - case 0x307: - if (warn_out_of_bounds_dram_access && myGUS.gDramAddr >= myGUS.memsize) - LOG(LOG_MISC,LOG_WARN)("GUS: out of bounds DRAM read %x",(unsigned int)myGUS.gDramAddr); - - if((myGUS.gDramAddr & myGUS.gDramAddrMask) < myGUS.memsize) - return GUSRam[myGUS.gDramAddr & myGUS.gDramAddrMask]; - else - return 0; - case 0x306: - case 0x706: - if (gus_type >= GUS_MAX) - return 0x0B; /* UltraMax with CS4231 codec */ - else if (gus_ics_mixer) - return 0x06; /* revision 3.7+ with ICS-2101 mixer */ - else - return 0xFF; - break; - default: + /* NTS: Contrary to some false impressions, GUS hardware does not report "one at a time", it really is a bitmask. + * I had the funny idea you read this register "one at a time" just like reading the IRQ reason bits of the RS-232 port --J.C. */ + return GUS_EffectiveIRQStatus(); + case 0x208: + uint8_t tmptime; + tmptime = 0; + if (myGUS.timers[0].reached) tmptime |= (1 << 6); + if (myGUS.timers[1].reached) tmptime |= (1 << 5); + if (tmptime & 0x60) tmptime |= (1 << 7); + if (myGUS.IRQStatus & 0x04) tmptime|=(1 << 2); + if (myGUS.IRQStatus & 0x08) tmptime|=(1 << 1); + return tmptime; + case 0x20a: + return adlib_commandreg; + case 0x20f: + if (gus_type >= GUS_MAX || gus_ics_mixer) + return 0x02; /* <- FIXME: What my GUS MAX returns. What does this mean? */ + return ~0ul; // should not happen + case 0x302: + return myGUS.gRegSelectData; + case 0x303: + return myGUS.gRegSelectData; + case 0x304: + if (iolen==2) reg16 = ExecuteReadRegister() & 0xffff; + else reg16 = ExecuteReadRegister() & 0xff; + + if (gus_type < GUS_INTERWAVE) // Versions prior to the Interwave will reflect last I/O to 3X2-3X5 when read back from 3X3 + myGUS.gRegSelectData = reg16 & 0xFF; + + return reg16; + case 0x305: + reg16 = ExecuteReadRegister() >> 8; + + if (gus_type < GUS_INTERWAVE) // Versions prior to the Interwave will reflect last I/O to 3X2-3X5 when read back from 3X3 + myGUS.gRegSelectData = reg16 & 0xFF; + + return reg16; + case 0x307: + if (warn_out_of_bounds_dram_access && myGUS.gDramAddr >= myGUS.memsize) + LOG(LOG_MISC,LOG_WARN)("GUS: out of bounds DRAM read %x",(unsigned int)myGUS.gDramAddr); + + if((myGUS.gDramAddr & myGUS.gDramAddrMask) < myGUS.memsize) + return myGUS.GUSRam[myGUS.gDramAddr & myGUS.gDramAddrMask]; + else + return 0; + case 0x306: + case 0x706: + if (gus_type >= GUS_MAX) + return 0x0B; /* UltraMax with CS4231 codec */ + else if (gus_ics_mixer) + return 0x06; /* revision 3.7+ with ICS-2101 mixer */ + else + return 0xFF; + break; + default: #if LOG_GUS - LOG_MSG("Read GUS at port 0x%x", port); + LOG_MSG("Read GUS at port 0x%x", port); #endif - break; + break; } return 0xff; @@ -1596,264 +1606,264 @@ static Bitu read_gus(Bitu port,Bitu iolen) { static void write_gus(Bitu port,Bitu val,Bitu iolen) { -// LOG_MSG("Write gus port %x val %x",port,val); - - /* 12-bit ISA decode (FIXME: Check GUS MAX ISA card to confirm) - * - * More than 10 bits must be decoded in order for GUS MAX extended registers at 7xx to work */ - port &= 0xFFF; - - /* Ok, so get this: There's a demoscene entry, 1997 demo "Atlantis, Deep Like A Sea", with code - * that does a 16-bit I/O write to port 3x2. Why? Well, if you notice how this switch statement - * is done, and how DOSBox SVN registers I/O ports, most of these I/O ports are meant for 8-bit - * I/O access. The only exception to that is port 3x4 which allows writing 16 bits to a GF1 - * register. So what happens if you do a 16-bit write to port 3x2? - * - * If the demo's behavior is any indication, the 16-bit write is handled like two 8-bit writes. - * The lower 8 bits go to port 3x2, the upper to 3x3. If you look at the register map, that's - * one 16-bit I/O write that writes both gCurChannel (current channel) and gRegSelect (current - * selected register) in one I/O cycle. - * - * If we do not split the I/O up as described, then the demo makes no sound except for popping - * noises because none of the voices are playing anything or moving at all. - * - * This trick happens to work in DOSBox SVN (and produce audible music) because DOSBox SVN GUS - * emulation installs I/O handlers only for bytewise (IO_MB) I/O, which then forces I/O emulation - * to subdivide the 16-bit I/O into two 8-bit I/O calls. The only exception is IO_MB|IO_MW for - * port 3x4 (gRegData and execute register). - * - * Demo link: [https://files.scene.org/get/mirrors/hornet/demos/1997/a/atl-mnsn.zip] */ - if (iolen == 2) { - if ((port - GUS_BASE) != 0x304) { - write_gus(port, val&0xFF,1); - write_gus(port+1,val>>8, 1); - return; - } - } - - switch(port - GUS_BASE) { - case 0x200: - myGUS.gRegControl = 0; - myGUS.mixControl = (uint8_t)val; - myGUS.ChangeIRQDMA = true; - return; - case 0x208: - adlib_commandreg = (uint8_t)val; - break; - case 0x209: -//TODO adlib_commandreg should be 4 for this to work else it should just latch the value - if (val & 0x80) { - myGUS.timers[0].reached=false; - myGUS.timers[1].reached=false; + // LOG_MSG("Write gus port %x val %x",port,val); + + /* 12-bit ISA decode (FIXME: Check GUS MAX ISA card to confirm) + * + * More than 10 bits must be decoded in order for GUS MAX extended registers at 7xx to work */ + port &= 0xFFF; + + /* Ok, so get this: There's a demoscene entry, 1997 demo "Atlantis, Deep Like A Sea", with code + * that does a 16-bit I/O write to port 3x2. Why? Well, if you notice how this switch statement + * is done, and how DOSBox SVN registers I/O ports, most of these I/O ports are meant for 8-bit + * I/O access. The only exception to that is port 3x4 which allows writing 16 bits to a GF1 + * register. So what happens if you do a 16-bit write to port 3x2? + * + * If the demo's behavior is any indication, the 16-bit write is handled like two 8-bit writes. + * The lower 8 bits go to port 3x2, the upper to 3x3. If you look at the register map, that's + * one 16-bit I/O write that writes both gCurChannel (current channel) and gRegSelect (current + * selected register) in one I/O cycle. + * + * If we do not split the I/O up as described, then the demo makes no sound except for popping + * noises because none of the voices are playing anything or moving at all. + * + * This trick happens to work in DOSBox SVN (and produce audible music) because DOSBox SVN GUS + * emulation installs I/O handlers only for bytewise (IO_MB) I/O, which then forces I/O emulation + * to subdivide the 16-bit I/O into two 8-bit I/O calls. The only exception is IO_MB|IO_MW for + * port 3x4 (gRegData and execute register). + * + * Demo link: [https://files.scene.org/get/mirrors/hornet/demos/1997/a/atl-mnsn.zip] */ + if (iolen == 2) { + if ((port - GUS_BASE) != 0x304) { + write_gus(port, val&0xFF,1); + write_gus(port+1,val>>8, 1); return; } - myGUS.timers[0].masked=(val & 0x40)>0; - myGUS.timers[1].masked=(val & 0x20)>0; - if (val & 0x1) { - if (!myGUS.timers[0].running) { - PIC_AddEvent(GUS_TimerEvent,myGUS.timers[0].delay,0); - myGUS.timers[0].running=true; - } - } else myGUS.timers[0].running=false; - if (val & 0x2) { - if (!myGUS.timers[1].running) { - PIC_AddEvent(GUS_TimerEvent,myGUS.timers[1].delay,1); - myGUS.timers[1].running=true; - } - } else myGUS.timers[1].running=false; - break; -//TODO Check if 0x20a register is also available on the gus like on the interwave - case 0x20b: - if (!myGUS.ChangeIRQDMA) break; - myGUS.ChangeIRQDMA=false; - - if (myGUS.gRegControl == 6) { - /* Jumper register: - * - * 7: reserved - * 6: reserved - * 5: reserved - * 4: reserved - * 3: reserved - * 2: enable joystick port decode - * 1: enable midi port address decode - * 0: reserved */ - /* TODO: */ - LOG(LOG_MISC,LOG_DEBUG)("GUS: DOS application wrote to 2XB register control number 0x06 (Jumper) val=%02xh",(int)val); - } - else if (myGUS.gRegControl == 5) { - /* write a 0 to clear IRQs on power up (?) */ - LOG(LOG_MISC,LOG_DEBUG)("GUS: DOS application wrote to 2XB register control number 0x05 (Clear IRQs) val=%02xh",(int)val); - } - else if (myGUS.gRegControl == 0) { - if (myGUS.mixControl & 0x40) { - // GUS SDK: IRQ Control Register - // Channel 1 GF1 IRQ selector (bits 2-0) - // 0=reserved, do not use - // 1=IRQ2 - // 2=IRQ5 - // 3=IRQ3 - // 4=IRQ7 - // 5=IRQ11 - // 6=IRQ12 - // 7=IRQ15 - // Channel 2 MIDI IRQ selector (bits 5-3) - // 0=no interrupt - // 1=IRQ2 - // 2=IRQ5 - // 3=IRQ3 - // 4=IRQ7 - // 5=IRQ11 - // 6=IRQ12 - // 7=IRQ15 - // Combine both IRQs using channel 1 (bit 6) - // Reserved (bit 7) - // - // "If both channels are sharing an IRQ, channel 2's IRQ must be set to 0 and turn on bit 6. A - // bus conflict will occur if both latches are programmed with the same IRQ #." - if (irqtable[val & 0x7] != 0) - myGUS.irq1 = irqtable[val & 0x7]; - - if (val & 0x40) // "Combine both IRQs" - myGUS.irq2 = myGUS.irq1; - else if (((val >> 3) & 7) != 0) - myGUS.irq2 = irqtable[(val >> 3) & 0x7]; - - LOG(LOG_MISC,LOG_DEBUG)("GUS IRQ reprogrammed: GF1 IRQ %d, MIDI IRQ %d",(int)myGUS.irq1,(int)myGUS.irq2); - - gus_warn_irq_conflict = (!(val & 0x40) && (val & 7) == ((val >> 3) & 7)); - } else { - // GUS SDK: DMA Control Register - // Channel 1 (bits 2-0) - // 0=NO DMA - // 1=DMA1 - // 2=DMA3 - // 3=DMA5 - // 4=DMA6 - // 5=DMA7 - // 6=? - // 7=? - // Channel 2 (bits 5-3) - // 0=NO DMA - // 1=DMA1 - // 2=DMA3 - // 3=DMA5 - // 4=DMA6 - // 5=DMA7 - // 6=? - // 7=? - // Combine both DMA channels using channel 1 (bit 6) - // Reserved (bit 7) - // - // "If both channels are sharing an DMA, channel 2's DMA must be set to 0 and turn on bit 6. A - // bus conflict will occur if both latches are programmed with the same DMA #." - - // NTS: This emulation does not use the second DMA channel... yet... which is why we do not bother - // unregistering and reregistering the second DMA channel. - - GetDMAChannel(myGUS.dma1)->Register_Callback(nullptr); // FIXME: On DMA conflict this could mean kicking other devices off! - - // NTS: Contrary to an earlier commit, DMA channel 0 is not a valid choice - if (dmatable[val & 0x7] != 0) - myGUS.dma1 = dmatable[val & 0x7]; - - if (val & 0x40) // "Combine both DMA channels" - myGUS.dma2 = myGUS.dma1; - else if (dmatable[(val >> 3) & 0x7] != 0) - myGUS.dma2 = dmatable[(val >> 3) & 0x7]; - - GetDMAChannel(myGUS.dma1)->Register_Callback(GUS_DMA_Callback); - - LOG(LOG_MISC,LOG_DEBUG)("GUS DMA reprogrammed: DMA1 %d, DMA2 %d",(int)myGUS.dma1,(int)myGUS.dma2); - - // NTS: The Windows 3.1 Gravis Ultrasound drivers will program the same DMA channel into both without setting the "combining" bit, - // even though their own SDK says not to, when Windows starts up. But it then immediately reprograms it normally, so no bus - // conflicts actually occur. Strange. - gus_warn_dma_conflict = (!(val & 0x40) && (val & 7) == ((val >> 3) & 7)); - } - } - else { - LOG(LOG_MISC,LOG_DEBUG)("GUS warning: Port 2XB register control %02xh written (unknown control reg) val=%02xh",(int)myGUS.gRegControl,(int)val); - } - break; - case 0x20f: - if (gus_type >= GUS_MAX || gus_ics_mixer) { - myGUS.gRegControl = val; + } + + switch(port - GUS_BASE) { + case 0x200: + myGUS.gRegControl = 0; + myGUS.mixControl = (uint8_t)val; myGUS.ChangeIRQDMA = true; - } - break; - case 0x302: - myGUS.gCurChannel = val & 31; - if (gus_type < GUS_INTERWAVE) // Versions prior to the Interwave will reflect last I/O to 3X2-3X5 when read back from 3X3 - myGUS.gRegSelectData = (uint8_t)val; + return; + case 0x208: + adlib_commandreg = (uint8_t)val; + break; + case 0x209: + //TODO adlib_commandreg should be 4 for this to work else it should just latch the value + if (val & 0x80) { + myGUS.timers[0].reached=false; + myGUS.timers[1].reached=false; + return; + } + myGUS.timers[0].masked=(val & 0x40)>0; + myGUS.timers[1].masked=(val & 0x20)>0; + if (val & 0x1) { + if (!myGUS.timers[0].running) { + PIC_AddEvent(GUS_TimerEvent,myGUS.timers[0].delay,0); + myGUS.timers[0].running=true; + } + } else myGUS.timers[0].running=false; + if (val & 0x2) { + if (!myGUS.timers[1].running) { + PIC_AddEvent(GUS_TimerEvent,myGUS.timers[1].delay,1); + myGUS.timers[1].running=true; + } + } else myGUS.timers[1].running=false; + break; + //TODO Check if 0x20a register is also available on the gus like on the interwave + case 0x20b: + if (!myGUS.ChangeIRQDMA) break; + myGUS.ChangeIRQDMA=false; - curchan = guschan[myGUS.gCurChannel]; - break; - case 0x303: - myGUS.gRegSelect = myGUS.gRegSelectData = (uint8_t)val; - myGUS.gRegData = 0; - break; - case 0x304: - if (iolen==2) { + if (myGUS.gRegControl == 6) { + /* Jumper register: + * + * 7: reserved + * 6: reserved + * 5: reserved + * 4: reserved + * 3: reserved + * 2: enable joystick port decode + * 1: enable midi port address decode + * 0: reserved */ + /* TODO: */ + LOG(LOG_MISC,LOG_DEBUG)("GUS: DOS application wrote to 2XB register control number 0x06 (Jumper) val=%02xh",(int)val); + } + else if (myGUS.gRegControl == 5) { + /* write a 0 to clear IRQs on power up (?) */ + LOG(LOG_MISC,LOG_DEBUG)("GUS: DOS application wrote to 2XB register control number 0x05 (Clear IRQs) val=%02xh",(int)val); + } + else if (myGUS.gRegControl == 0) { + if (myGUS.mixControl & 0x40) { + // GUS SDK: IRQ Control Register + // Channel 1 GF1 IRQ selector (bits 2-0) + // 0=reserved, do not use + // 1=IRQ2 + // 2=IRQ5 + // 3=IRQ3 + // 4=IRQ7 + // 5=IRQ11 + // 6=IRQ12 + // 7=IRQ15 + // Channel 2 MIDI IRQ selector (bits 5-3) + // 0=no interrupt + // 1=IRQ2 + // 2=IRQ5 + // 3=IRQ3 + // 4=IRQ7 + // 5=IRQ11 + // 6=IRQ12 + // 7=IRQ15 + // Combine both IRQs using channel 1 (bit 6) + // Reserved (bit 7) + // + // "If both channels are sharing an IRQ, channel 2's IRQ must be set to 0 and turn on bit 6. A + // bus conflict will occur if both latches are programmed with the same IRQ #." + if (irqtable[val & 0x7] != 0) + myGUS.irq1 = irqtable[val & 0x7]; + + if (val & 0x40) // "Combine both IRQs" + myGUS.irq2 = myGUS.irq1; + else if (((val >> 3) & 7) != 0) + myGUS.irq2 = irqtable[(val >> 3) & 0x7]; + + LOG(LOG_MISC,LOG_DEBUG)("GUS IRQ reprogrammed: GF1 IRQ %d, MIDI IRQ %d",(int)myGUS.irq1,(int)myGUS.irq2); + + gus_warn_irq_conflict = (!(val & 0x40) && (val & 7) == ((val >> 3) & 7)); + } else { + // GUS SDK: DMA Control Register + // Channel 1 (bits 2-0) + // 0=NO DMA + // 1=DMA1 + // 2=DMA3 + // 3=DMA5 + // 4=DMA6 + // 5=DMA7 + // 6=? + // 7=? + // Channel 2 (bits 5-3) + // 0=NO DMA + // 1=DMA1 + // 2=DMA3 + // 3=DMA5 + // 4=DMA6 + // 5=DMA7 + // 6=? + // 7=? + // Combine both DMA channels using channel 1 (bit 6) + // Reserved (bit 7) + // + // "If both channels are sharing an DMA, channel 2's DMA must be set to 0 and turn on bit 6. A + // bus conflict will occur if both latches are programmed with the same DMA #." + + // NTS: This emulation does not use the second DMA channel... yet... which is why we do not bother + // unregistering and reregistering the second DMA channel. + + GetDMAChannel(myGUS.dma1)->Register_Callback(nullptr); // FIXME: On DMA conflict this could mean kicking other devices off! + + // NTS: Contrary to an earlier commit, DMA channel 0 is not a valid choice + if (dmatable[val & 0x7] != 0) + myGUS.dma1 = dmatable[val & 0x7]; + + if (val & 0x40) // "Combine both DMA channels" + myGUS.dma2 = myGUS.dma1; + else if (dmatable[(val >> 3) & 0x7] != 0) + myGUS.dma2 = dmatable[(val >> 3) & 0x7]; + + GetDMAChannel(myGUS.dma1)->Register_Callback(GUS_DMA_Callback); + + LOG(LOG_MISC,LOG_DEBUG)("GUS DMA reprogrammed: DMA1 %d, DMA2 %d",(int)myGUS.dma1,(int)myGUS.dma2); + + // NTS: The Windows 3.1 Gravis Ultrasound drivers will program the same DMA channel into both without setting the "combining" bit, + // even though their own SDK says not to, when Windows starts up. But it then immediately reprograms it normally, so no bus + // conflicts actually occur. Strange. + gus_warn_dma_conflict = (!(val & 0x40) && (val & 7) == ((val >> 3) & 7)); + } + } + else { + LOG(LOG_MISC,LOG_DEBUG)("GUS warning: Port 2XB register control %02xh written (unknown control reg) val=%02xh",(int)myGUS.gRegControl,(int)val); + } + break; + case 0x20f: + if (gus_type >= GUS_MAX || gus_ics_mixer) { + myGUS.gRegControl = val; + myGUS.ChangeIRQDMA = true; + } + break; + case 0x302: + myGUS.gCurChannel = val & 31; if (gus_type < GUS_INTERWAVE) // Versions prior to the Interwave will reflect last I/O to 3X2-3X5 when read back from 3X3 - myGUS.gRegSelectData = val & 0xFF; + myGUS.gRegSelectData = (uint8_t)val; - myGUS.gRegData=(uint16_t)val; - ExecuteGlobRegister(); - } else { + curchan = guschan[myGUS.gCurChannel]; + break; + case 0x303: + myGUS.gRegSelect = myGUS.gRegSelectData = (uint8_t)val; + myGUS.gRegData = 0; + break; + case 0x304: + if (iolen==2) { + if (gus_type < GUS_INTERWAVE) // Versions prior to the Interwave will reflect last I/O to 3X2-3X5 when read back from 3X3 + myGUS.gRegSelectData = val & 0xFF; + + myGUS.gRegData=(uint16_t)val; + ExecuteGlobRegister(); + } else { + if (gus_type < GUS_INTERWAVE) // Versions prior to the Interwave will reflect last I/O to 3X2-3X5 when read back from 3X3 + myGUS.gRegSelectData = val; + + myGUS.gRegData = (uint16_t)val; + } + break; + case 0x305: if (gus_type < GUS_INTERWAVE) // Versions prior to the Interwave will reflect last I/O to 3X2-3X5 when read back from 3X3 myGUS.gRegSelectData = val; - myGUS.gRegData = (uint16_t)val; - } - break; - case 0x305: - if (gus_type < GUS_INTERWAVE) // Versions prior to the Interwave will reflect last I/O to 3X2-3X5 when read back from 3X3 - myGUS.gRegSelectData = val; - - myGUS.gRegData = (uint16_t)((0x00ff & myGUS.gRegData) | val << 8); - ExecuteGlobRegister(); - break; - case 0x307: - if (warn_out_of_bounds_dram_access && myGUS.gDramAddr >= myGUS.memsize) - LOG(LOG_MISC,LOG_WARN)("GUS: out of bounds DRAM write %x val %x",(unsigned int)myGUS.gDramAddr,(unsigned int)val & 0xffu); - - if ((myGUS.gDramAddr & myGUS.gDramAddrMask) < myGUS.memsize) - GUSRam[myGUS.gDramAddr & myGUS.gDramAddrMask] = (uint8_t)val; - - break; - case 0x306: - case 0x706: - if (gus_type >= GUS_MAX) { - /* Ultramax control register: - * - * bit 7: reserved - * bit 6: codec enable - * bit 5: playback channel type (1=16-bit 0=8-bit) - * bit 4: capture channel type (1=16-bit 0=8-bit) - * bits 3-0: Codec I/O port address decode bits 7-4. - * - * For example, to put the CS4231 codec at port 0x34C, and enable the codec, write 0x44 to this register. - * If you want to move the codec to base I/O port 0x32C, write 0x42 here. */ - myGUS.gUltraMAXControl = val; + myGUS.gRegData = (uint16_t)((0x00ff & myGUS.gRegData) | val << 8); + ExecuteGlobRegister(); + break; + case 0x307: + if (warn_out_of_bounds_dram_access && myGUS.gDramAddr >= myGUS.memsize) + LOG(LOG_MISC,LOG_WARN)("GUS: out of bounds DRAM write %x val %x",(unsigned int)myGUS.gDramAddr,(unsigned int)val & 0xffu); + + if ((myGUS.gDramAddr & myGUS.gDramAddrMask) < myGUS.memsize) + myGUS.GUSRam[myGUS.gDramAddr & myGUS.gDramAddrMask] = (uint8_t)val; + + break; + case 0x306: + case 0x706: + if (gus_type >= GUS_MAX) { + /* Ultramax control register: + * + * bit 7: reserved + * bit 6: codec enable + * bit 5: playback channel type (1=16-bit 0=8-bit) + * bit 4: capture channel type (1=16-bit 0=8-bit) + * bits 3-0: Codec I/O port address decode bits 7-4. + * + * For example, to put the CS4231 codec at port 0x34C, and enable the codec, write 0x44 to this register. + * If you want to move the codec to base I/O port 0x32C, write 0x42 here. */ + myGUS.gUltraMAXControl = val; - if (val & 0x40) { - if ((val & 0xF) != ((port >> 4) & 0xF)) - LOG(LOG_MISC,LOG_WARN)("GUS WARNING: DOS application is attempting to relocate the CS4231 codec, which is not supported"); + if (val & 0x40) { + if ((val & 0xF) != ((port >> 4) & 0xF)) + LOG(LOG_MISC,LOG_WARN)("GUS WARNING: DOS application is attempting to relocate the CS4231 codec, which is not supported"); + } } - } - else if (gus_ics_mixer) { - if ((port - GUS_BASE) == 0x306) - GUS_ICS2101.dataWrite(val&0xFF); - else if ((port - GUS_BASE) == 0x706) - GUS_ICS2101.addressWrite(val&0xFF); - } - break; - default: + else if (gus_ics_mixer) { + if ((port - GUS_BASE) == 0x306) + GUS_ICS2101.dataWrite(val&0xFF); + else if ((port - GUS_BASE) == 0x706) + GUS_ICS2101.addressWrite(val&0xFF); + } + break; + default: #if LOG_GUS - LOG_MSG("Write GUS at port 0x%x with %x", port, val); + LOG_MSG("Write GUS at port 0x%x with %x", port, val); #endif - break; + break; } } @@ -1875,7 +1885,7 @@ void GUS_Update_DMA_Event_transfer() { void GUS_DMA_Event_Transfer(DmaChannel *chan,Bitu dmawords) { Bitu dmaaddr = (Bitu)(myGUS.dmaAddr << 4ul) + (Bitu)myGUS.dmaAddrOffset; Bitu dmalimit = myGUS.memsize; - unsigned int docount = 0; + unsigned int docount = 0; unsigned int step = 0; bool dma16xlate; Bitu holdAddr; @@ -1963,7 +1973,7 @@ void GUS_DMA_Event_Transfer(DmaChannel *chan,Bitu dmawords) { if (docount > 0) { if ((myGUS.DMAControl & 0x2) == 0) { - Bitu read=(Bitu)chan->Read((Bitu)docount,&GUSRam[dmaaddr]); + Bitu read=(Bitu)chan->Read((Bitu)docount,&myGUS.GUSRam[dmaaddr]); //Check for 16 or 8bit channel read*=(chan->DMA16+1u); if((myGUS.DMAControl & 0x80) != 0) { @@ -1971,17 +1981,17 @@ void GUS_DMA_Event_Transfer(DmaChannel *chan,Bitu dmawords) { Bitu i; if((myGUS.DMAControl & 0x40) == 0) { // 8-bit data - for(i=dmaaddr;i<(dmaaddr+read);i++) GUSRam[i] ^= 0x80; + for(i=dmaaddr;i<(dmaaddr+read);i++) myGUS.GUSRam[i] ^= 0x80; } else { // 16-bit data - for(i=dmaaddr+1;i<(dmaaddr+read);i+=2) GUSRam[i] ^= 0x80; + for(i=dmaaddr+1;i<(dmaaddr+read);i+=2) myGUS.GUSRam[i] ^= 0x80; } } step = read; } else { //Read data out of UltraSound - Bitu wd = (Bitu)chan->Write((Bitu)docount,&GUSRam[dmaaddr]); + Bitu wd = (Bitu)chan->Write((Bitu)docount,&myGUS.GUSRam[dmaaddr]); //Check for 16 or 8bit channel wd*=(chan->DMA16+1u); @@ -1990,7 +2000,7 @@ void GUS_DMA_Event_Transfer(DmaChannel *chan,Bitu dmawords) { } LOG(LOG_MISC,LOG_DEBUG)("GUS DMA transfer %lu bytes, GUS RAM address 0x%lx %u-bit DMA %u-bit PCM (ctrl=0x%02x) tcount=%u", - (unsigned long)step,(unsigned long)dmaaddr,(myGUS.DMAControl & 0x4) ? 16 : 8,(myGUS.DMAControl & 0x40) ? 16 : 8,myGUS.DMAControl,chan->tcount); + (unsigned long)step,(unsigned long)dmaaddr,(myGUS.DMAControl & 0x4) ? 16 : 8,(myGUS.DMAControl & 0x40) ? 16 : 8,myGUS.DMAControl,chan->tcount); if (step > 0) { dmaaddr += (unsigned int)step; @@ -2021,7 +2031,7 @@ void GUS_DMA_Event_Transfer(DmaChannel *chan,Bitu dmawords) { } void GUS_DMA_Event(Bitu val) { - (void)val;//UNUSED + (void)val;//UNUSED DmaChannel *chan = GetDMAChannel(myGUS.dma1); if (chan == NULL) { LOG(LOG_MISC,LOG_DEBUG)("GUS DMA event: DMA channel no longer exists, stopping DMA transfer events"); @@ -2042,10 +2052,10 @@ void GUS_DMA_Event(Bitu val) { } LOG(LOG_MISC,LOG_DEBUG)("GUS DMA event: max %u DMA words. DMA: tc=%u mask=%u cnt=%u", - (unsigned int)GUS_DMA_Event_transfer, - chan->tcount?1:0, - chan->masked?1:0, - chan->currcnt+1); + (unsigned int)GUS_DMA_Event_transfer, + chan->tcount?1:0, + chan->masked?1:0, + chan->currcnt+1); GUS_DMA_Event_Transfer(chan,GUS_DMA_Event_transfer); if (GUS_DMA_Active) { @@ -2068,18 +2078,18 @@ void GUS_StartDMA() { LOG(LOG_MISC,LOG_DEBUG)("GUS: Starting DMA transfer interval"); PIC_AddEvent(GUS_DMA_Event,GUS_DMA_Event_interval_init); - if (GetDMAChannel(myGUS.dma1)->masked) - LOG(LOG_MISC,LOG_WARN)("GUS: DMA transfer interval started when channel is masked"); + if (GetDMAChannel(myGUS.dma1)->masked) + LOG(LOG_MISC,LOG_WARN)("GUS: DMA transfer interval started when channel is masked"); - if (gus_warn_dma_conflict) - LOG(LOG_MISC,LOG_WARN)( - "GUS warning: Both DMA channels set to the same channel WITHOUT combining! " - "This is documented to cause bus conflicts on real hardware"); - } + if (gus_warn_dma_conflict) + LOG(LOG_MISC,LOG_WARN)( + "GUS warning: Both DMA channels set to the same channel WITHOUT combining! " + "This is documented to cause bus conflicts on real hardware"); + } } static void GUS_DMA_Callback(DmaChannel * chan,DMAEvent event) { - (void)chan;//UNUSED + (void)chan;//UNUSED if (event == DMA_UNMASKED) { LOG(LOG_MISC,LOG_DEBUG)("GUS: DMA unmasked"); if (myGUS.DMAControl & 0x01/*DMA enable*/) GUS_StartDMA(); @@ -2090,82 +2100,82 @@ static void GUS_DMA_Callback(DmaChannel * chan,DMAEvent event) { } static void GUS_CallBack(Bitu len) { - int32_t buffer[MIXER_BUFSIZE][2]; - memset(buffer, 0, len * sizeof(buffer[0])); - - if ((GUS_reset_reg & 0x01/*!master reset*/) == 0x01) { - for (Bitu i = 0; i < myGUS.ActiveChannels; i++) { - guschan[i]->generateSamples(buffer[0], len); - } - } - - // FIXME: I wonder if the GF1 chip DAC had more than 16 bits precision - // to render louder than 100% volume without clipping, and if so, - // how many extra bits? - // - // If not, then perhaps clipping and saturation were not a problem - // unless the volume was set to maximum? - // - // Time to pull out the GUS MAX and test this theory: what happens - // if you play samples that would saturate at maximum volume at 16-bit - // precision? Does it audibly clip or is there some headroom like some - // sort of 17-bit DAC? - // - // One way to test is to play a sample on one channel while another - // channel is set to play a single sample at maximum volume (to see - // if it makes the audio grungy like a waveform railed to one side). - // - // Past experience with GUS cards says that at full volume their line - // out jacks can be quite loud when connected to a speaker. - // - // While improving this code, a better audio compression function - // could be implemented that does proper envelope tracking and volume - // control for better results than this. - // - // --J.C. - - for (Bitu i = 0; i < len; i++) { - buffer[i][0] >>= (VOL_SHIFT * AutoAmp) >> 9; - buffer[i][1] >>= (VOL_SHIFT * AutoAmp) >> 9; - bool dampenedAutoAmp = false; - - if (buffer[i][0] > 32767) { - buffer[i][0] = 32767; - if (enable_autoamp) { - AutoAmp -= 4; /* dampen faster than recovery */ - dampenedAutoAmp = true; - } - } - else if (buffer[i][0] < -32768) { - buffer[i][0] = -32768; - if (enable_autoamp) { - AutoAmp -= 4; /* dampen faster than recovery */ - dampenedAutoAmp = true; - } - } - - if (buffer[i][1] > 32767) { - buffer[i][1] = 32767; - if (enable_autoamp && !dampenedAutoAmp) { - AutoAmp -= 4; /* dampen faster than recovery */ - dampenedAutoAmp = true; - } - } - else if (buffer[i][1] < -32768) { - buffer[i][1] = -32768; - if (enable_autoamp && !dampenedAutoAmp) { - AutoAmp -= 4; /* dampen faster than recovery */ - dampenedAutoAmp = true; - } - } - - if (AutoAmp < myGUS.masterVolumeMul && !dampenedAutoAmp) { - AutoAmp++; /* recovery back to 100% normal volume */ - } - } - - gus_chan->AddSamples_s32(len, buffer[0]); - CheckVoiceIrq(); + int32_t buffer[MIXER_BUFSIZE][2]; + memset(buffer, 0, len * sizeof(buffer[0])); + + if ((myGUS.GUS_reset_reg & 0x01/*!master reset*/) == 0x01) { + for (Bitu i = 0; i < myGUS.ActiveChannels; i++) { + guschan[i]->generateSamples(buffer[0], len); + } + } + + // FIXME: I wonder if the GF1 chip DAC had more than 16 bits precision + // to render louder than 100% volume without clipping, and if so, + // how many extra bits? + // + // If not, then perhaps clipping and saturation were not a problem + // unless the volume was set to maximum? + // + // Time to pull out the GUS MAX and test this theory: what happens + // if you play samples that would saturate at maximum volume at 16-bit + // precision? Does it audibly clip or is there some headroom like some + // sort of 17-bit DAC? + // + // One way to test is to play a sample on one channel while another + // channel is set to play a single sample at maximum volume (to see + // if it makes the audio grungy like a waveform railed to one side). + // + // Past experience with GUS cards says that at full volume their line + // out jacks can be quite loud when connected to a speaker. + // + // While improving this code, a better audio compression function + // could be implemented that does proper envelope tracking and volume + // control for better results than this. + // + // --J.C. + + for (Bitu i = 0; i < len; i++) { + buffer[i][0] >>= (VOL_SHIFT * AutoAmp) >> 9; + buffer[i][1] >>= (VOL_SHIFT * AutoAmp) >> 9; + bool dampenedAutoAmp = false; + + if (buffer[i][0] > 32767) { + buffer[i][0] = 32767; + if (enable_autoamp) { + AutoAmp -= 4; /* dampen faster than recovery */ + dampenedAutoAmp = true; + } + } + else if (buffer[i][0] < -32768) { + buffer[i][0] = -32768; + if (enable_autoamp) { + AutoAmp -= 4; /* dampen faster than recovery */ + dampenedAutoAmp = true; + } + } + + if (buffer[i][1] > 32767) { + buffer[i][1] = 32767; + if (enable_autoamp && !dampenedAutoAmp) { + AutoAmp -= 4; /* dampen faster than recovery */ + dampenedAutoAmp = true; + } + } + else if (buffer[i][1] < -32768) { + buffer[i][1] = -32768; + if (enable_autoamp && !dampenedAutoAmp) { + AutoAmp -= 4; /* dampen faster than recovery */ + dampenedAutoAmp = true; + } + } + + if (AutoAmp < myGUS.masterVolumeMul && !dampenedAutoAmp) { + AutoAmp++; /* recovery back to 100% normal volume */ + } + } + + gus_chan->AddSamples_s32(len, buffer[0]); + CheckVoiceIrq(); } // Generate logarithmic to linear volume conversion tables @@ -2175,8 +2185,8 @@ static void MakeTables(void) { for (i=4095;i>=0;i--) { vol16bit[i]=(uint16_t)((int16_t)out); out/=1.002709201; /* 0.0235 dB Steps */ - //Original amplification routine in the hardware - //vol16bit[i] = ((256 + i & 0xff) << VOL_SHIFT) / (1 << (24 - (i >> 8))); + //Original amplification routine in the hardware + //vol16bit[i] = ((256 + i & 0xff) << VOL_SHIFT) / (1 << (24 - (i >> 8))); } /* FIX: DOSBox 0.74 had code here that produced a pantable which * had nothing to do with actual panning control variables. @@ -2214,408 +2224,442 @@ static void MakeTables(void) { } LOG(LOG_MISC,LOG_DEBUG)("GUS pantable (attenuation, left to right in dB): hard left -%.3f, -%.3f, -%.3f, -%.3f, -%.3f, -%.3f, -%.3f, center(7) -%.3f, center(8) -%.3f, -%.3f, -%.3f, -%.3f, -%.3f, -%.3f, -%.3f, hard right -%.3f", - ((double)pantable[0]) / (1 << RAMP_FRACT), - ((double)pantable[1]) / (1 << RAMP_FRACT), - ((double)pantable[2]) / (1 << RAMP_FRACT), - ((double)pantable[3]) / (1 << RAMP_FRACT), - ((double)pantable[4]) / (1 << RAMP_FRACT), - ((double)pantable[5]) / (1 << RAMP_FRACT), - ((double)pantable[6]) / (1 << RAMP_FRACT), - ((double)pantable[7]) / (1 << RAMP_FRACT), - ((double)pantable[8]) / (1 << RAMP_FRACT), - ((double)pantable[9]) / (1 << RAMP_FRACT), - ((double)pantable[10]) / (1 << RAMP_FRACT), - ((double)pantable[11]) / (1 << RAMP_FRACT), - ((double)pantable[12]) / (1 << RAMP_FRACT), - ((double)pantable[13]) / (1 << RAMP_FRACT), - ((double)pantable[14]) / (1 << RAMP_FRACT), - ((double)pantable[15]) / (1 << RAMP_FRACT)); + ((double)pantable[0]) / (1 << RAMP_FRACT), + ((double)pantable[1]) / (1 << RAMP_FRACT), + ((double)pantable[2]) / (1 << RAMP_FRACT), + ((double)pantable[3]) / (1 << RAMP_FRACT), + ((double)pantable[4]) / (1 << RAMP_FRACT), + ((double)pantable[5]) / (1 << RAMP_FRACT), + ((double)pantable[6]) / (1 << RAMP_FRACT), + ((double)pantable[7]) / (1 << RAMP_FRACT), + ((double)pantable[8]) / (1 << RAMP_FRACT), + ((double)pantable[9]) / (1 << RAMP_FRACT), + ((double)pantable[10]) / (1 << RAMP_FRACT), + ((double)pantable[11]) / (1 << RAMP_FRACT), + ((double)pantable[12]) / (1 << RAMP_FRACT), + ((double)pantable[13]) / (1 << RAMP_FRACT), + ((double)pantable[14]) / (1 << RAMP_FRACT), + ((double)pantable[15]) / (1 << RAMP_FRACT)); } static IO_ReadHandler* gus_cb_port_r(IO_CalloutObject &co,Bitu port,Bitu iolen) { - (void)co; - (void)iolen; + (void)co; + (void)iolen; - /* 10-bit ISA decode. - * NOTE that the I/O handlers still need more than 10 bits to handle GUS MAX/Interwave registers at 0x7xx. */ - port &= 0x3FF; + /* 10-bit ISA decode. + * NOTE that the I/O handlers still need more than 10 bits to handle GUS MAX/Interwave registers at 0x7xx. */ + port &= 0x3FF; - if (gus_type >= GUS_MAX) { - if (port >= (0x30C + GUS_BASE) && port <= (0x30F + GUS_BASE)) - return read_gus_cs4231; - } + if (gus_type >= GUS_MAX) { + if (port >= (0x30C + GUS_BASE) && port <= (0x30F + GUS_BASE)) + return read_gus_cs4231; + } - return read_gus; + return read_gus; } static IO_WriteHandler* gus_cb_port_w(IO_CalloutObject &co,Bitu port,Bitu iolen) { - (void)co; - (void)iolen; + (void)co; + (void)iolen; - /* 10-bit ISA decode. - * NOTE that the I/O handlers still need more than 10 bits to handle GUS MAX/Interwave registers at 0x7xx. */ - port &= 0x3FF; + /* 10-bit ISA decode. + * NOTE that the I/O handlers still need more than 10 bits to handle GUS MAX/Interwave registers at 0x7xx. */ + port &= 0x3FF; - if (gus_type >= GUS_MAX) { - if (port >= (0x30C + GUS_BASE) && port <= (0x30F + GUS_BASE)) - return write_gus_cs4231; - } + if (gus_type >= GUS_MAX) { + if (port >= (0x30C + GUS_BASE) && port <= (0x30F + GUS_BASE)) + return write_gus_cs4231; + } - return write_gus; + return write_gus; } class GUS:public Module_base{ -private: -// IO_ReadHandleObject ReadHandler[12]; -// IO_WriteHandleObject WriteHandler[12]; -// IO_ReadHandleObject ReadCS4231Handler[4]; -// IO_WriteHandleObject WriteCS4231Handler[4]; - AutoexecObject autoexecline[3]; - MixerObject MixerChan; - bool gus_enable; -public: - GUS(Section* configuration):Module_base(configuration){ - int x; + private: + // IO_ReadHandleObject ReadHandler[12]; + // IO_WriteHandleObject WriteHandler[12]; + // IO_ReadHandleObject ReadCS4231Handler[4]; + // IO_WriteHandleObject WriteCS4231Handler[4]; +#if !defined(OSFREE) + AutoexecObject autoexecline[3]; +#endif + MixerObject MixerChan; + bool gus_enable; + public: + GUS(Section* configuration):Module_base(configuration){ + int x; - gus_enable = false; - if(!IS_EGAVGA_ARCH) return; - Section_prop * section=static_cast(configuration); - if(!section->Get_bool("gus")||control->opt_silent) return; + gus_enable = false; + if(!IS_EGAVGA_ARCH) return; + Section_prop * section=static_cast(configuration); + if(!section->Get_bool("gus")||control->opt_silent) return; - gus_enable = true; - memset(&myGUS,0,sizeof(myGUS)); - memset(GUSRam,0,1024*1024); + gus_enable = true; + memset(&myGUS,0,sizeof(myGUS)); - ignore_active_channel_write_while_active = section->Get_bool("ignore channel count while active"); - warn_out_of_bounds_dram_access = section->Get_bool("warn on out of bounds dram access"); + ignore_active_channel_write_while_active = section->Get_bool("ignore channel count while active"); + warn_out_of_bounds_dram_access = section->Get_bool("warn on out of bounds dram access"); - unmask_irq = section->Get_bool("pic unmask irq"); - enable_autoamp = section->Get_bool("autoamp"); + unmask_irq = section->Get_bool("pic unmask irq"); + enable_autoamp = section->Get_bool("autoamp"); - startup_ultrinit = section->Get_bool("startup initialized"); + startup_ultrinit = section->Get_bool("startup initialized"); - dma_enable_on_dma_control_polling = section->Get_bool("dma enable on dma control polling"); + dma_enable_on_dma_control_polling = section->Get_bool("dma enable on dma control polling"); - string s_pantable = section->Get_string("gus panning table"); - if (s_pantable == "default" || s_pantable == "" || s_pantable == "accurate") - gus_fixed_table = true; - else if (s_pantable == "old") - gus_fixed_table = false; - else - gus_fixed_table = true; + string s_pantable = section->Get_string("gus panning table"); + if (s_pantable == "default" || s_pantable == "" || s_pantable == "accurate") + gus_fixed_table = true; + else if (s_pantable == "old") + gus_fixed_table = false; + else + gus_fixed_table = true; - gus_ics_mixer = false; - string s_gustype = section->Get_string("gustype"); - if (s_gustype == "classic") { - LOG(LOG_MISC,LOG_DEBUG)("GUS: Classic emulation"); - gus_type = GUS_CLASSIC; - } - else if (s_gustype == "classic37") { - LOG(LOG_MISC,LOG_DEBUG)("GUS: Classic emulation"); - gus_type = GUS_CLASSIC; - gus_ics_mixer = true; - } - else if (s_gustype == "max") { - // UltraMAX cards do not have the ICS mixer - LOG(LOG_MISC,LOG_DEBUG)("GUS: MAX emulation"); - gus_type = GUS_MAX; - } - else if (s_gustype == "interwave") { - // Neither do Interwave cards - LOG(LOG_MISC,LOG_DEBUG)("GUS: Interwave PnP emulation"); - gus_type = GUS_INTERWAVE; - } - else { - LOG(LOG_MISC,LOG_DEBUG)("GUS: Classic emulation by default"); - gus_type = GUS_CLASSIC; - } + gus_ics_mixer = false; + string s_gustype = section->Get_string("gustype"); + if (s_gustype == "classic") { + LOG(LOG_MISC,LOG_DEBUG)("GUS: Classic emulation"); + gus_type = GUS_CLASSIC; + } + else if (s_gustype == "classic37") { + LOG(LOG_MISC,LOG_DEBUG)("GUS: Classic emulation"); + gus_type = GUS_CLASSIC; + gus_ics_mixer = true; + } + else if (s_gustype == "max") { + // UltraMAX cards do not have the ICS mixer + LOG(LOG_MISC,LOG_DEBUG)("GUS: MAX emulation"); + gus_type = GUS_MAX; + } + else if (s_gustype == "interwave") { + // Neither do Interwave cards + LOG(LOG_MISC,LOG_DEBUG)("GUS: Interwave PnP emulation"); + gus_type = GUS_INTERWAVE; + } + else { + LOG(LOG_MISC,LOG_DEBUG)("GUS: Classic emulation by default"); + gus_type = GUS_CLASSIC; + } - myGUS.clearTCIfPollingIRQStatus = section->Get_bool("clear dma tc irq if excess polling"); - if (myGUS.clearTCIfPollingIRQStatus) - LOG(LOG_MISC,LOG_DEBUG)("GUS: Will clear DMA TC IRQ if excess polling, as instructed"); + myGUS.clearTCIfPollingIRQStatus = section->Get_bool("clear dma tc irq if excess polling"); + if (myGUS.clearTCIfPollingIRQStatus) + LOG(LOG_MISC,LOG_DEBUG)("GUS: Will clear DMA TC IRQ if excess polling, as instructed"); - myGUS.gUltraMAXControl = 0; - myGUS.lastIRQStatusPollRapidCount = 0; - myGUS.lastIRQStatusPollAt = 0; + myGUS.gUltraMAXControl = 0; + myGUS.lastIRQStatusPollRapidCount = 0; + myGUS.lastIRQStatusPollAt = 0; - myGUS.initUnmaskDMA = section->Get_bool("unmask dma"); - if (myGUS.initUnmaskDMA) - LOG(LOG_MISC,LOG_DEBUG)("GUS: Unmasking DMA at boot time as requested"); + myGUS.initUnmaskDMA = section->Get_bool("unmask dma"); + if (myGUS.initUnmaskDMA) + LOG(LOG_MISC,LOG_DEBUG)("GUS: Unmasking DMA at boot time as requested"); - myGUS.fixed_sample_rate_output = section->Get_bool("gus fixed render rate"); - LOG(LOG_MISC,LOG_DEBUG)("GUS: using %s sample rate output",myGUS.fixed_sample_rate_output?"fixed":"realistic"); + myGUS.fixed_sample_rate_output = section->Get_bool("gus fixed render rate"); + LOG(LOG_MISC,LOG_DEBUG)("GUS: using %s sample rate output",myGUS.fixed_sample_rate_output?"fixed":"realistic"); - myGUS.force_master_irq_enable=section->Get_bool("force master irq enable"); - if (myGUS.force_master_irq_enable) - LOG(LOG_MISC,LOG_DEBUG)("GUS: Master IRQ enable will be forced on as instructed"); + myGUS.force_master_irq_enable=section->Get_bool("force master irq enable"); + if (myGUS.force_master_irq_enable) + LOG(LOG_MISC,LOG_DEBUG)("GUS: Master IRQ enable will be forced on as instructed"); - { - const char *s = section->Get_string("global register read alias"); + { + const char *s = section->Get_string("global register read alias"); + + if (!strcmp(s,"true") || !strcmp(s,"1")) + myGUS.globalread80alias = true; + else if (!strcmp(s,"false") || !strcmp(s,"0")) + myGUS.globalread80alias = false; + else /* auto */ + myGUS.globalread80alias = false; /* TODO: Test real hardware, which versions of the GUS behave like this? */ + } - if (!strcmp(s,"true") || !strcmp(s,"1")) - myGUS.globalread80alias = true; - else if (!strcmp(s,"false") || !strcmp(s,"0")) - myGUS.globalread80alias = false; - else /* auto */ - myGUS.globalread80alias = false; /* TODO: Test real hardware, which versions of the GUS behave like this? */ - } + myGUS.rate=(unsigned int)section->Get_int("gusrate"); + + ultradir = section->Get_string("ultradir"); + void ResolvePath(std::string& in); + ResolvePath(ultradir); + + x = section->Get_int("gusmemsize"); + if (x >= 0) myGUS.memsize = (unsigned int)x*1024u; + else myGUS.memsize = 1024u*1024u; + + if (myGUS.memsize > (8*1024u*1024u)) + myGUS.memsize = (8*1024u*1024u); - myGUS.rate=(unsigned int)section->Get_int("gusrate"); - - ultradir = section->Get_string("ultradir"); - void ResolvePath(std::string& in); - ResolvePath(ultradir); - - x = section->Get_int("gusmemsize"); - if (x >= 0) myGUS.memsize = (unsigned int)x*1024u; - else myGUS.memsize = 1024u*1024u; - - if (myGUS.memsize > (1024u*1024u)) - myGUS.memsize = (1024u*1024u); - - if ((myGUS.memsize&((256u << 10u) - 1u)) != 0) - LOG(LOG_MISC,LOG_WARN)("GUS emulation warning: %uKB onboard is an unusual value. Usually GUS cards have some multiple of 256KB RAM onboard",myGUS.memsize>>10); - - LOG(LOG_MISC,LOG_DEBUG)("GUS emulation: %uKB onboard",myGUS.memsize>>10); - - // some demoscene stuff has music that's way too loud if we render at full volume. - // the GUS mixer emulation won't fix it because it changes the volume at the Mixer - // level AFTER the code has rendered and clipped samples to 16-bit range. - myGUS.masterVolume = section->Get_double("gus master volume"); - myGUS.updateMasterVolume(); - - // FIXME: HUH?? Read the port number and subtract 0x200, then use GUS_BASE - // in other parts of the code to compare against 0x200 and 0x300? That's confusing. Fix! - myGUS.portbase = (unsigned int)section->Get_hex("gusbase") - 0x200u; - - // TODO: so, if the GUS ULTRASND variable actually mentions two DMA and two IRQ channels, - // shouldn't we offer the ability to specify them independently? especially when - // GUS NMI is completed to the extent that SBOS and MEGA-EM can run within DOSBox? - int dma_val = section->Get_int("gusdma"); - if ((dma_val<0) || (dma_val>255)) dma_val = 3; // sensible default - - int irq_val = section->Get_int("gusirq"); - if ((irq_val<0) || (irq_val>255)) irq_val = 5; // sensible default - - if (irq_val > 0) { - string s = section->Get_string("irq hack"); - if (!s.empty() && s != "none") { - LOG(LOG_MISC,LOG_NORMAL)("GUS emulation: Assigning IRQ hack '%s' as instructed",s.c_str()); - PIC_Set_IRQ_hack(irq_val,PIC_parse_IRQ_hack_string(s.c_str())); - } - } - - myGUS.dma1 = (uint8_t)dma_val; - myGUS.dma2 = (uint8_t)dma_val; - myGUS.irq1 = (uint8_t)irq_val; - myGUS.irq2 = (uint8_t)irq_val; - - if (gus_iocallout != IO_Callout_t_none) { - IO_FreeCallout(gus_iocallout); - gus_iocallout = IO_Callout_t_none; - } - - if (gus_iocallout2 != IO_Callout_t_none) { - IO_FreeCallout(gus_iocallout2); - gus_iocallout2 = IO_Callout_t_none; - } - - if (gus_iocallout == IO_Callout_t_none) - gus_iocallout = IO_AllocateCallout(IO_TYPE_ISA); - if (gus_iocallout == IO_Callout_t_none) - E_Exit("Failed to get GUS IO callout handle"); - - if (gus_iocallout2 == IO_Callout_t_none) - gus_iocallout2 = IO_AllocateCallout(IO_TYPE_ISA); - if (gus_iocallout2 == IO_Callout_t_none) - E_Exit("Failed to get GUS IO callout handle"); - - { - IO_CalloutObject *obj = IO_GetCallout(gus_iocallout); - if (obj == NULL) E_Exit("Failed to get GUS IO callout"); - obj->Install(0x200 + GUS_BASE,IOMASK_Combine(IOMASK_ISA_10BIT,IOMASK_Range(16)),gus_cb_port_r,gus_cb_port_w); - IO_PutCallout(obj); - } - - { - IO_CalloutObject *obj = IO_GetCallout(gus_iocallout2); - if (obj == NULL) E_Exit("Failed to get GUS IO callout"); - obj->Install(0x300 + GUS_BASE,IOMASK_Combine(IOMASK_ISA_10BIT,IOMASK_Range(16)),gus_cb_port_r,gus_cb_port_w); - IO_PutCallout(obj); - } + if ((myGUS.memsize&((256u << 10u) - 1u)) != 0) + LOG(LOG_MISC,LOG_WARN)("GUS emulation warning: %uKB onboard is an unusual value. Usually GUS cards have some multiple of 256KB RAM onboard",myGUS.memsize>>10); + + if (gus_type <= GUS_MAX && myGUS.memsize > (1024u*1024u)) + LOG(LOG_MISC,LOG_WARN)("GUS emulation warning: %uKB onboard is an unusually large (more than 1MB) value for the model of GUS to emuulate.",myGUS.memsize>>10); + + assert(myGUS.GUSRam == NULL); + { + const unsigned int mask = + myGUS.memsize != 0 ? bitop::rounduppow2mask(myGUS.memsize - 1) : 0; + + myGUS.gDramAddrMask = mask; + myGUS.gDramVoiceMask = mask; + LOG(LOG_MISC,LOG_DEBUG)("GUS emulation: %uKB onboard (mask 0x%x)",myGUS.memsize>>10,(unsigned int)mask); + + if (mask != 0) { + myGUS.GUSRam = new unsigned char[mask + 1u + 16u/*safety margin*/]; + memset(myGUS.GUSRam,0xFF,mask + 1u + 16u); + } + } + + // some demoscene stuff has music that's way too loud if we render at full volume. + // the GUS mixer emulation won't fix it because it changes the volume at the Mixer + // level AFTER the code has rendered and clipped samples to 16-bit range. + myGUS.masterVolume = section->Get_double("gus master volume"); + myGUS.updateMasterVolume(); + + // FIXME: HUH?? Read the port number and subtract 0x200, then use GUS_BASE + // in other parts of the code to compare against 0x200 and 0x300? That's confusing. Fix! + myGUS.portbase = (unsigned int)section->Get_hex("gusbase") - 0x200u; + + // TODO: so, if the GUS ULTRASND variable actually mentions two DMA and two IRQ channels, + // shouldn't we offer the ability to specify them independently? especially when + // GUS NMI is completed to the extent that SBOS and MEGA-EM can run within DOSBox? + int dma_val = section->Get_int("gusdma"); + if ((dma_val<0) || (dma_val>255)) dma_val = 3; // sensible default + + int irq_val = section->Get_int("gusirq"); + if ((irq_val<0) || (irq_val>255)) irq_val = 5; // sensible default + + if (irq_val > 0) { + string s = section->Get_string("irq hack"); + if (!s.empty() && s != "none") { + LOG(LOG_MISC,LOG_NORMAL)("GUS emulation: Assigning IRQ hack '%s' as instructed",s.c_str()); + PIC_Set_IRQ_hack(irq_val,PIC_parse_IRQ_hack_string(s.c_str())); + } + } + + myGUS.dma1 = (uint8_t)dma_val; + myGUS.dma2 = (uint8_t)dma_val; + myGUS.irq1 = (uint8_t)irq_val; + myGUS.irq2 = (uint8_t)irq_val; + + if (gus_iocallout != IO_Callout_t_none) { + IO_FreeCallout(gus_iocallout); + gus_iocallout = IO_Callout_t_none; + } + + if (gus_iocallout2 != IO_Callout_t_none) { + IO_FreeCallout(gus_iocallout2); + gus_iocallout2 = IO_Callout_t_none; + } + + if (gus_iocallout == IO_Callout_t_none) + gus_iocallout = IO_AllocateCallout(IO_TYPE_ISA); + if (gus_iocallout == IO_Callout_t_none) + E_Exit("Failed to get GUS IO callout handle"); + + if (gus_iocallout2 == IO_Callout_t_none) + gus_iocallout2 = IO_AllocateCallout(IO_TYPE_ISA); + if (gus_iocallout2 == IO_Callout_t_none) + E_Exit("Failed to get GUS IO callout handle"); + + { + IO_CalloutObject *obj = IO_GetCallout(gus_iocallout); + if (obj == NULL) E_Exit("Failed to get GUS IO callout"); + obj->Install(0x200 + GUS_BASE,IOMASK_Combine(IOMASK_ISA_10BIT,IOMASK_Range(16)),gus_cb_port_r,gus_cb_port_w); + IO_PutCallout(obj); + } + + { + IO_CalloutObject *obj = IO_GetCallout(gus_iocallout2); + if (obj == NULL) E_Exit("Failed to get GUS IO callout"); + obj->Install(0x300 + GUS_BASE,IOMASK_Combine(IOMASK_ISA_10BIT,IOMASK_Range(16)),gus_cb_port_r,gus_cb_port_w); + IO_PutCallout(obj); + } #if 0 - // We'll leave the MIDI interface to the MPU-401 - // Ditto for the Joystick - // GF1 Synthesizer - ReadHandler[0].Install(0x302 + GUS_BASE,read_gus,IO_MB); - WriteHandler[0].Install(0x302 + GUS_BASE,write_gus,IO_MB); - - WriteHandler[1].Install(0x303 + GUS_BASE,write_gus,IO_MB); - ReadHandler[1].Install(0x303 + GUS_BASE,read_gus,IO_MB); - - WriteHandler[2].Install(0x304 + GUS_BASE,write_gus,IO_MB|IO_MW); - ReadHandler[2].Install(0x304 + GUS_BASE,read_gus,IO_MB|IO_MW); - - WriteHandler[3].Install(0x305 + GUS_BASE,write_gus,IO_MB); - ReadHandler[3].Install(0x305 + GUS_BASE,read_gus,IO_MB); - - ReadHandler[4].Install(0x206 + GUS_BASE,read_gus,IO_MB); - - WriteHandler[4].Install(0x208 + GUS_BASE,write_gus,IO_MB); - ReadHandler[5].Install(0x208 + GUS_BASE,read_gus,IO_MB); - - WriteHandler[5].Install(0x209 + GUS_BASE,write_gus,IO_MB); - - WriteHandler[6].Install(0x307 + GUS_BASE,write_gus,IO_MB); - ReadHandler[6].Install(0x307 + GUS_BASE,read_gus,IO_MB); - - // Board Only - - WriteHandler[7].Install(0x200 + GUS_BASE,write_gus,IO_MB); - ReadHandler[7].Install(0x20A + GUS_BASE,read_gus,IO_MB); - WriteHandler[8].Install(0x20B + GUS_BASE,write_gus,IO_MB); - - if (gus_type >= GUS_MAX || gus_ics_mixer/*classic with 3.7 mixer*/) { - /* "This register is only valid for UltraSound boards that are at or above revision 3.4. It is not valid for boards which - * have a prior revision number. - * On 3.4 and above boards, there is a bank of 6 registers that exist at location 2XB. Register 2XF is used to select - * which one is being talked to." */ - ReadHandler[9].Install(0x20F + GUS_BASE,read_gus,IO_MB); - WriteHandler[9].Install(0x20F + GUS_BASE,write_gus,IO_MB); - - /* FIXME: I'm not so sure Interwave PnP cards have this */ - ReadHandler[10].Install(0x306 + GUS_BASE,read_gus,IO_MB); // Revision level - ReadHandler[11].Install(0x706 + GUS_BASE,read_gus,IO_MB); // Revision level - WriteHandler[10].Install(0x306 + GUS_BASE,write_gus,IO_MB); // Mixer control - WriteHandler[11].Install(0x706 + GUS_BASE,write_gus,IO_MB); // Mixer data / GUS UltraMAX Control register - } + // We'll leave the MIDI interface to the MPU-401 + // Ditto for the Joystick + // GF1 Synthesizer + ReadHandler[0].Install(0x302 + GUS_BASE,read_gus,IO_MB); + WriteHandler[0].Install(0x302 + GUS_BASE,write_gus,IO_MB); + + WriteHandler[1].Install(0x303 + GUS_BASE,write_gus,IO_MB); + ReadHandler[1].Install(0x303 + GUS_BASE,read_gus,IO_MB); + + WriteHandler[2].Install(0x304 + GUS_BASE,write_gus,IO_MB|IO_MW); + ReadHandler[2].Install(0x304 + GUS_BASE,read_gus,IO_MB|IO_MW); + + WriteHandler[3].Install(0x305 + GUS_BASE,write_gus,IO_MB); + ReadHandler[3].Install(0x305 + GUS_BASE,read_gus,IO_MB); + + ReadHandler[4].Install(0x206 + GUS_BASE,read_gus,IO_MB); + + WriteHandler[4].Install(0x208 + GUS_BASE,write_gus,IO_MB); + ReadHandler[5].Install(0x208 + GUS_BASE,read_gus,IO_MB); + + WriteHandler[5].Install(0x209 + GUS_BASE,write_gus,IO_MB); + + WriteHandler[6].Install(0x307 + GUS_BASE,write_gus,IO_MB); + ReadHandler[6].Install(0x307 + GUS_BASE,read_gus,IO_MB); + + // Board Only + + WriteHandler[7].Install(0x200 + GUS_BASE,write_gus,IO_MB); + ReadHandler[7].Install(0x20A + GUS_BASE,read_gus,IO_MB); + WriteHandler[8].Install(0x20B + GUS_BASE,write_gus,IO_MB); + + if (gus_type >= GUS_MAX || gus_ics_mixer/*classic with 3.7 mixer*/) { + /* "This register is only valid for UltraSound boards that are at or above revision 3.4. It is not valid for boards which + * have a prior revision number. + * On 3.4 and above boards, there is a bank of 6 registers that exist at location 2XB. Register 2XF is used to select + * which one is being talked to." */ + ReadHandler[9].Install(0x20F + GUS_BASE,read_gus,IO_MB); + WriteHandler[9].Install(0x20F + GUS_BASE,write_gus,IO_MB); + + /* FIXME: I'm not so sure Interwave PnP cards have this */ + ReadHandler[10].Install(0x306 + GUS_BASE,read_gus,IO_MB); // Revision level + ReadHandler[11].Install(0x706 + GUS_BASE,read_gus,IO_MB); // Revision level + WriteHandler[10].Install(0x306 + GUS_BASE,write_gus,IO_MB); // Mixer control + WriteHandler[11].Install(0x706 + GUS_BASE,write_gus,IO_MB); // Mixer data / GUS UltraMAX Control register + } #endif - if (gus_type >= GUS_MAX) { - LOG(LOG_MISC,LOG_WARN)("GUS caution: CS4231 UltraMax emulation is new and experimental at this time and it is not guaranteed to work."); - LOG(LOG_MISC,LOG_WARN)("GUS caution: CS4231 UltraMax emulation as it exists now may cause applications to hang or malfunction attempting to play through it."); + if (gus_type >= GUS_MAX) { + LOG(LOG_MISC,LOG_WARN)("GUS caution: CS4231 UltraMax emulation is new and experimental at this time and it is not guaranteed to work."); + LOG(LOG_MISC,LOG_WARN)("GUS caution: CS4231 UltraMax emulation as it exists now may cause applications to hang or malfunction attempting to play through it."); #if 0 - /* UltraMax has a CS4231 codec at 3XC-3XF */ - /* FIXME: Does the Interwave have a CS4231? */ - for (unsigned int i=0;i < 4;i++) { - ReadCS4231Handler[i].Install(0x30C + i + GUS_BASE,read_gus_cs4231,IO_MB); - WriteCS4231Handler[i].Install(0x30C + i + GUS_BASE,write_gus_cs4231,IO_MB); - } + /* UltraMax has a CS4231 codec at 3XC-3XF */ + /* FIXME: Does the Interwave have a CS4231? */ + for (unsigned int i=0;i < 4;i++) { + ReadCS4231Handler[i].Install(0x30C + i + GUS_BASE,read_gus_cs4231,IO_MB); + WriteCS4231Handler[i].Install(0x30C + i + GUS_BASE,write_gus_cs4231,IO_MB); + } #endif + } + + // DmaChannels[myGUS.dma1]->Register_TC_Callback(GUS_DMA_TC_Callback); + + MakeTables(); + + for (uint8_t chan_ct=0; chan_ct<32; chan_ct++) { + guschan[chan_ct] = new GUSChannel(chan_ct); + } + // Register the Mixer CallBack + gus_chan=MixerChan.Install(GUS_CallBack,GUS_RATE,"GUS"); + + // FIXME: Could we leave the card in reset state until a fake ULTRINIT runs? + myGUS.gRegData=0x000/*reset*/; + GUSReset(); + + if (myGUS.initUnmaskDMA) + GetDMAChannel(myGUS.dma1)->SetMask(false); + if (unmask_irq) + PIC_SetIRQMask(myGUS.irq1,false); + + gus_chan->Enable(true); + + GetDMAChannel(myGUS.dma1)->Register_Callback(GUS_DMA_Callback); + + if (gus_ics_mixer) { + // pre-set ourself as if ULTRINIT and ULTRAMIX had been run + GUS_ICS2101.mixpair[gus_ICS2101::MIC_IN_PORT].setAttenuation(0,0x7F); + GUS_ICS2101.mixpair[gus_ICS2101::MIC_IN_PORT].setAttenuation(1,0x7F); + GUS_ICS2101.mixpair[gus_ICS2101::LINE_IN_PORT].setAttenuation(0,0x7F); + GUS_ICS2101.mixpair[gus_ICS2101::LINE_IN_PORT].setAttenuation(1,0x7F); + GUS_ICS2101.mixpair[gus_ICS2101::CD_IN_PORT].setAttenuation(0,0x7F); + GUS_ICS2101.mixpair[gus_ICS2101::CD_IN_PORT].setAttenuation(1,0x7F); + GUS_ICS2101.mixpair[gus_ICS2101::GF1_OUT_PORT].setAttenuation(0,0x7F); + GUS_ICS2101.mixpair[gus_ICS2101::GF1_OUT_PORT].setAttenuation(1,0x7F); + GUS_ICS2101.mixpair[gus_ICS2101::MASTER_OUTPUT_PORT].setAttenuation(0,0x7F); + GUS_ICS2101.mixpair[gus_ICS2101::MASTER_OUTPUT_PORT].setAttenuation(1,0x7F); + + // master volume update, updates ALL pairs + GUS_ICS2101.updateVolPair(gus_ICS2101::MASTER_OUTPUT_PORT); + } + + // Default to GUS MAX 1MB maximum + myGUS.gDramAddrMask = 0xFFFFF; + myGUS.gDramVoiceMask = 0xFFFFF; + + // if instructed, configure the card as if ULTRINIT had been run + if (startup_ultrinit) { + myGUS.gRegData=0x700; + GUSReset(); + + myGUS.gRegData=0x700; + GUSReset(); + } } - - // DmaChannels[myGUS.dma1]->Register_TC_Callback(GUS_DMA_TC_Callback); - - MakeTables(); - - for (uint8_t chan_ct=0; chan_ct<32; chan_ct++) { - guschan[chan_ct] = new GUSChannels(chan_ct); - } - // Register the Mixer CallBack - gus_chan=MixerChan.Install(GUS_CallBack,GUS_RATE,"GUS"); - - // FIXME: Could we leave the card in reset state until a fake ULTRINIT runs? - myGUS.gRegData=0x000/*reset*/; - GUSReset(); - - if (myGUS.initUnmaskDMA) - GetDMAChannel(myGUS.dma1)->SetMask(false); - if (unmask_irq) - PIC_SetIRQMask(myGUS.irq1,false); - - gus_chan->Enable(true); - - GetDMAChannel(myGUS.dma1)->Register_Callback(GUS_DMA_Callback); - - if (gus_ics_mixer) { - // pre-set ourself as if ULTRINIT and ULTRAMIX had been run - GUS_ICS2101.mixpair[gus_ICS2101::MIC_IN_PORT].setAttenuation(0,0x7F); - GUS_ICS2101.mixpair[gus_ICS2101::MIC_IN_PORT].setAttenuation(1,0x7F); - GUS_ICS2101.mixpair[gus_ICS2101::LINE_IN_PORT].setAttenuation(0,0x7F); - GUS_ICS2101.mixpair[gus_ICS2101::LINE_IN_PORT].setAttenuation(1,0x7F); - GUS_ICS2101.mixpair[gus_ICS2101::CD_IN_PORT].setAttenuation(0,0x7F); - GUS_ICS2101.mixpair[gus_ICS2101::CD_IN_PORT].setAttenuation(1,0x7F); - GUS_ICS2101.mixpair[gus_ICS2101::GF1_OUT_PORT].setAttenuation(0,0x7F); - GUS_ICS2101.mixpair[gus_ICS2101::GF1_OUT_PORT].setAttenuation(1,0x7F); - GUS_ICS2101.mixpair[gus_ICS2101::MASTER_OUTPUT_PORT].setAttenuation(0,0x7F); - GUS_ICS2101.mixpair[gus_ICS2101::MASTER_OUTPUT_PORT].setAttenuation(1,0x7F); - - // master volume update, updates ALL pairs - GUS_ICS2101.updateVolPair(gus_ICS2101::MASTER_OUTPUT_PORT); + + void DOS_Startup() { +#if !defined(OSFREE) + int portat = 0x200 + int(GUS_BASE); + + if (!gus_enable) return; + + // ULTRASND=Port,DMA1,DMA2,IRQ1,IRQ2 + // [GUS port], [GUS DMA (recording)], [GUS DMA (playback)], [GUS IRQ (playback)], [GUS IRQ (MIDI)] + ostringstream temp; + temp << "@SET ULTRASND=" << hex << setw(3) << portat << "," + << dec << (Bitu)myGUS.dma1 << "," << (Bitu)myGUS.dma2 << "," + << (Bitu)myGUS.irq1 << "," << (Bitu)myGUS.irq2 << ends; + // Create autoexec.bat lines + autoexecline[0].Install(temp.str()); + autoexecline[1].Install(std::string("@SET ULTRADIR=") + ultradir); + + if (gus_type >= GUS_MAX) { + /* FIXME: Does the Interwave have a CS4231? */ + ostringstream temp2; + temp2 << "@SET ULTRA16=" << hex << setw(3) << (0x30C+GUS_BASE) << "," + << "0,0,1,0" << ends; // FIXME What do these numbers mean? + autoexecline[2].Install(temp2.str()); + } +#endif } - // Default to GUS MAX 1MB maximum - myGUS.gDramAddrMask = 0xFFFFF; - - // if instructed, configure the card as if ULTRINIT had been run - if (startup_ultrinit) { - myGUS.gRegData=0x700; - GUSReset(); - - myGUS.gRegData=0x700; - GUSReset(); - } - } - - void DOS_Startup() { - int portat = 0x200 + int(GUS_BASE); - - if (!gus_enable) return; - - // ULTRASND=Port,DMA1,DMA2,IRQ1,IRQ2 - // [GUS port], [GUS DMA (recording)], [GUS DMA (playback)], [GUS IRQ (playback)], [GUS IRQ (MIDI)] - ostringstream temp; - temp << "@SET ULTRASND=" << hex << setw(3) << portat << "," - << dec << (Bitu)myGUS.dma1 << "," << (Bitu)myGUS.dma2 << "," - << (Bitu)myGUS.irq1 << "," << (Bitu)myGUS.irq2 << ends; - // Create autoexec.bat lines - autoexecline[0].Install(temp.str()); - autoexecline[1].Install(std::string("@SET ULTRADIR=") + ultradir); - - if (gus_type >= GUS_MAX) { - /* FIXME: Does the Interwave have a CS4231? */ - ostringstream temp2; - temp2 << "@SET ULTRA16=" << hex << setw(3) << (0x30C+GUS_BASE) << "," - << "0,0,1,0" << ends; // FIXME What do these numbers mean? - autoexecline[2].Install(temp2.str()); + std::string ultradir; + + void DOS_Shutdown() { /* very likely, we're booting into a guest OS where our environment variable has no meaning anymore */ +#if !defined(OSFREE) + autoexecline[0].Uninstall(); + autoexecline[1].Uninstall(); + autoexecline[2].Uninstall(); +#endif } - } - std::string ultradir; + ~GUS() { + if (gus_iocallout != IO_Callout_t_none) { + IO_FreeCallout(gus_iocallout); + gus_iocallout = IO_Callout_t_none; + } - void DOS_Shutdown() { /* very likely, we're booting into a guest OS where our environment variable has no meaning anymore */ - autoexecline[0].Uninstall(); - autoexecline[1].Uninstall(); - autoexecline[2].Uninstall(); - } + if (gus_iocallout2 != IO_Callout_t_none) { + IO_FreeCallout(gus_iocallout2); + gus_iocallout2 = IO_Callout_t_none; + } - ~GUS() { - if (gus_iocallout != IO_Callout_t_none) { - IO_FreeCallout(gus_iocallout); - gus_iocallout = IO_Callout_t_none; - } + for (uint8_t chan_ct=0; chan_ct<32; chan_ct++) { + if (guschan[chan_ct] != NULL) { + delete guschan[chan_ct]; + guschan[chan_ct] = NULL; + } + } - if (gus_iocallout2 != IO_Callout_t_none) { - IO_FreeCallout(gus_iocallout2); - gus_iocallout2 = IO_Callout_t_none; - } + if (myGUS.GUSRam != NULL) { + delete[] myGUS.GUSRam; + myGUS.GUSRam = NULL; + } #if 0 // FIXME - if(!IS_EGAVGA_ARCH) return; - - myGUS.gRegData=0x1; - GUSReset(); - myGUS.gRegData=0x0; - - for(Bitu i=0;i<32;i++) { - delete guschan[i]; - } + if(!IS_EGAVGA_ARCH) return; + + myGUS.gRegData=0x1; + GUSReset(); + myGUS.gRegData=0x0; + + for(Bitu i=0;i<32;i++) { + delete guschan[i]; + } - memset(&myGUS,0,sizeof(myGUS)); - memset(GUSRam,0,1024*1024); + memset(&myGUS,0,sizeof(myGUS)); + memset(GUSRam,0,1024*1024); #endif - } + } }; static GUS* test = NULL; @@ -2632,7 +2676,7 @@ void GUS_ShutDown(Section* /*sec*/) { } void GUS_OnReset(Section *sec) { - (void)sec;//UNUSED + (void)sec;//UNUSED if (test == NULL && !IS_PC98_ARCH) { LOG(LOG_MISC,LOG_DEBUG)("Allocating GUS emulation"); test = new GUS(control->GetSection("gus")); @@ -2640,13 +2684,13 @@ void GUS_OnReset(Section *sec) { } void GUS_DOS_Exit(Section *sec) { - (void)sec;//UNUSED - GUS_DOS_Shutdown(); + (void)sec;//UNUSED + GUS_DOS_Shutdown(); } void GUS_DOS_Boot(Section *sec) { - (void)sec;//UNUSED - if (test != NULL) test->DOS_Startup(); + (void)sec;//UNUSED + if (test != NULL) test->DOS_Startup(); } void GUS_Init() { @@ -2657,7 +2701,7 @@ void GUS_Init() { AddVMEventFunction(VM_EVENT_DOS_EXIT_BEGIN,AddVMEventFunctionFuncPair(GUS_DOS_Exit)); AddVMEventFunction(VM_EVENT_DOS_SURPRISE_REBOOT,AddVMEventFunctionFuncPair(GUS_DOS_Exit)); AddVMEventFunction(VM_EVENT_DOS_EXIT_REBOOT_BEGIN,AddVMEventFunctionFuncPair(GUS_DOS_Exit)); - AddVMEventFunction(VM_EVENT_DOS_INIT_SHELL_READY,AddVMEventFunctionFuncPair(GUS_DOS_Boot)); + AddVMEventFunction(VM_EVENT_DOS_INIT_SHELL_READY,AddVMEventFunctionFuncPair(GUS_DOS_Boot)); } // save state support @@ -2693,7 +2737,6 @@ const char pod_name[32] = "GUS"; // - pure data WRITE_POD( &adlib_commandreg, adlib_commandreg ); - WRITE_POD( &GUSRam, GUSRam ); WRITE_POD( &vol16bit, vol16bit ); WRITE_POD( &pantable, pantable ); @@ -2749,7 +2792,6 @@ void POD_Load_GUS( std::istream& stream ) // - pure data READ_POD( &adlib_commandreg, adlib_commandreg ); - READ_POD( &GUSRam, GUSRam ); READ_POD( &vol16bit, vol16bit ); READ_POD( &pantable, pantable ); diff --git a/src/hardware/hardware.cpp b/src/hardware/hardware.cpp index 121441a85c6..ece8a57499a 100644 --- a/src/hardware/hardware.cpp +++ b/src/hardware/hardware.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include "bitmapinfoheader.h" #include "dosbox.h" @@ -58,6 +59,7 @@ extern "C" { #include #include #include +#include } /* This code now requires FFMPEG 4 or higher */ @@ -123,20 +125,18 @@ void ffmpeg_closeall() { ffmpeg_avformat_began = false; } avio_close(ffmpeg_fmt_ctx->pb); - if (ffmpeg_vid_ctx != NULL) avcodec_close(ffmpeg_vid_ctx); - if (ffmpeg_aud_ctx != NULL) avcodec_close(ffmpeg_aud_ctx); + if (ffmpeg_vid_ctx != NULL) avcodec_free_context(&ffmpeg_vid_ctx); + if (ffmpeg_aud_ctx != NULL) avcodec_free_context(&ffmpeg_aud_ctx); avformat_free_context(ffmpeg_fmt_ctx); ffmpeg_fmt_ctx = NULL; ffmpeg_vid_ctx = NULL; // NTS: avformat_free_context() freed this for us, don't free again ffmpeg_aud_ctx = NULL; // NTS: avformat_free_context() freed this for us, don't free again } if (ffmpeg_vid_ctx != NULL) { - avcodec_close(ffmpeg_vid_ctx); avcodec_free_context(&ffmpeg_vid_ctx); ffmpeg_vid_ctx = NULL; } if (ffmpeg_aud_ctx != NULL) { - avcodec_close(ffmpeg_aud_ctx); avcodec_free_context(&ffmpeg_aud_ctx); ffmpeg_aud_ctx = NULL; } @@ -171,7 +171,6 @@ void ffmpeg_audio_frame_send() { if (!pkt) E_Exit("Error: Unable to alloc packet"); - ffmpeg_aud_frame->key_frame = 1; ffmpeg_aud_frame->pts = (int64_t)ffmpeg_audio_sample_counter; r=avcodec_send_frame(ffmpeg_aud_ctx,ffmpeg_aud_frame); if (r < 0 && r != AVERROR(EAGAIN)) @@ -426,7 +425,6 @@ int ffmpeg_bpp_pick_rgb_format(int bpp) { void ffmpeg_reopen_video(double fps,const int bpp) { if (ffmpeg_vid_ctx != NULL) { - avcodec_close(ffmpeg_vid_ctx); avcodec_free_context(&ffmpeg_vid_ctx); ffmpeg_vid_ctx = NULL; } @@ -811,19 +809,15 @@ static inline unsigned long math_gcd_png_uint_32(const png_uint_32 a,const png_u void CAPTURE_AddImage(Bitu width, Bitu height, Bitu bpp, Bitu pitch, Bitu flags, float fps, uint8_t * data, uint8_t * pal) { #if (C_SSHOT) Bitu i; - uint8_t doubleRow[SCALER_MAXWIDTH*4]; Bitu countWidth = width; + std::vector doubleRowBuf((countWidth + 32) * 4 * ((flags & CAPTURE_FLAG_DBLW) ? 2 : 1)); + uint8_t *doubleRow = doubleRowBuf.data(); if (flags & CAPTURE_FLAG_DBLH) height *= 2; if (flags & CAPTURE_FLAG_DBLW) width *= 2; - if (height > SCALER_MAXHEIGHT) - return; - if (width > SCALER_MAXWIDTH) - return; - if (CaptureState & CAPTURE_IMAGE) { png_structp png_ptr; png_infop info_ptr; @@ -950,7 +944,22 @@ void CAPTURE_AddImage(Bitu width, Bitu height, Bitu bpp, Bitu pitch, Bitu flags, rowPointer = doubleRow; break; case 32: - if (flags & CAPTURE_FLAG_DBLW) { +#if defined(MACOSX) && !C_SDL2 + if (flags & CAPTURE_FLAG_DBLW) { + for (Bitu x=0;xsample_rate = (int)capture.video.audiorate; ffmpeg_aud_ctx->flags = 0; // do not use global headers ffmpeg_aud_ctx->bit_rate = 320000; - ffmpeg_aud_ctx->profile = FF_PROFILE_AAC_LOW; + // ffmpeg_aud_ctx->profile = FF_PROFILE_AAC_LOW; #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(59,24,100) ffmpeg_aud_ctx->channels = 2; @@ -1531,7 +1541,7 @@ void CAPTURE_AddImage(Bitu width, Bitu height, Bitu bpp, Bitu pitch, Bitu flags, // encode it ffmpeg_vid_frame->pts = (int64_t)capture.video.frames; // or else libx264 complains about non-monotonic timestamps - ffmpeg_vid_frame->key_frame = ((capture.video.frames % 15) == 0)?1:0; + av_opt_set_int(ffmpeg_vid_ctx->priv_data, "g", 15, 0); // GOP size 15 r=avcodec_send_frame(ffmpeg_vid_ctx,ffmpeg_vid_frame); if (r < 0 && r != AVERROR(EAGAIN)) @@ -1768,7 +1778,7 @@ void CAPTURE_MultiTrackAddWave(uint32_t freq, uint32_t len, int16_t * data,const } #pragma pack(push,1) -typedef struct pcap_hdr_struct_t { +typedef struct { uint32_t magic_number; /* magic number */ uint16_t version_major; /* major version number */ uint16_t version_minor; /* minor version number */ @@ -1776,14 +1786,14 @@ typedef struct pcap_hdr_struct_t { uint32_t sigfigs; /* accuracy of timestamps */ uint32_t snaplen; /* max length of captured packets, in octets */ uint32_t network; /* data link type */ -}; +} pcap_hdr_struct_t; -typedef struct pcaprec_hdr_struct_t { +typedef struct { uint32_t ts_sec; /* timestamp seconds */ uint32_t ts_usec; /* timestamp microseconds */ uint32_t incl_len; /* number of octets of packet saved in file */ uint32_t orig_len; /* actual length of packet */ -}; +} pcaprec_hdr_struct_t; #pragma pack(pop) void Capture_WritePacket(bool /*send*/,const unsigned char *buf,size_t len) { diff --git a/src/hardware/ide.cpp b/src/hardware/ide.cpp index 3c8aa2fdc22..686bbc8820b 100644 --- a/src/hardware/ide.cpp +++ b/src/hardware/ide.cpp @@ -86,6 +86,7 @@ struct IDEEventPack { extern int bootdrive; extern bool bootguest, bootvm, use_quick_reboot; static unsigned char init_ide = 0; +extern bool int13_enable_48bitLBA; static const unsigned char IDE_default_IRQs[4] = { 14, /* primary */ @@ -239,12 +240,14 @@ class IDEATADevice:public IDEDevice { virtual void io_completion(); virtual bool increment_current_address(Bitu count=1); public: - Bitu multiple_sector_max,multiple_sector_count; - Bitu heads,sects,cyls,progress_count; - Bitu phys_heads,phys_sects,phys_cyls; + uint64_t multiple_sector_max,multiple_sector_count; + uint64_t heads,sects,cyls,progress_count; + uint64_t phys_heads,phys_sects,phys_cyls; /* CHS value of IDE */ + uint64_t LBA; unsigned char sector[512 * 128] = {}; - Bitu sector_i,sector_total; + uint64_t sector_i,sector_total; bool geo_translate; + }; enum { @@ -258,7 +261,7 @@ enum { class IDEATAPICDROMDevice:public IDEDevice { public: - IDEATAPICDROMDevice(IDEController *c,unsigned char drive_index,bool _slave); + IDEATAPICDROMDevice(IDEController *c,unsigned char drive_index,bool _slave,CDROM_Interface *cdrom); ~IDEATAPICDROMDevice(); void writecommand(uint8_t cmd) override; public: @@ -267,6 +270,7 @@ class IDEATAPICDROMDevice:public IDEDevice { std::string id_model; unsigned char drive_index; Bitu sector_transfer_limit = 16; + CDROM_Interface *cdrom = NULL; CDROM_Interface *getMSCDEXDrive(); void update_from_cdrom(); Bitu data_read(Bitu iolen) override; /* read from 1F0h data port from IDE device */ @@ -1470,7 +1474,7 @@ void IDEATAPICDROMDevice::set_sense(unsigned char SK,unsigned char ASC,unsigned sense[13] = ASCQ; } -IDEATAPICDROMDevice::IDEATAPICDROMDevice(IDEController *c,unsigned char drive_index,bool _slave) : IDEDevice(c,_slave) { +IDEATAPICDROMDevice::IDEATAPICDROMDevice(IDEController *c,unsigned char drive_index,bool _slave,CDROM_Interface *n_cdrom) : IDEDevice(c,_slave) { this->drive_index = drive_index; sector_i = sector_total = 0; atapi_to_host = false; @@ -1484,6 +1488,8 @@ IDEATAPICDROMDevice::IDEATAPICDROMDevice(IDEController *c,unsigned char drive_in atapi_cmd_total = 0; memset(sector, 0, sizeof(sector)); + if (n_cdrom) (cdrom = n_cdrom)->Addref(); + memset(sense,0,sizeof(sense)); IDEATAPICDROMDevice::set_sense(/*SK=*/0); @@ -1531,6 +1537,10 @@ IDEATAPICDROMDevice::IDEATAPICDROMDevice(IDEController *c,unsigned char drive_in } IDEATAPICDROMDevice::~IDEATAPICDROMDevice() { + if (cdrom) { + cdrom->Release(); + cdrom = NULL; + } } void IDEATAPICDROMDevice::on_mode_select_io_complete() { @@ -2540,6 +2550,9 @@ void IDEATADevice::generate_identify_device() { /* total disk capacity in sectors */ total = sects * cyls * heads; ptotal = phys_sects * phys_cyls * phys_heads; + uint32_t lba28 = LBA > 0x0FFFFFFF ? 0x0FFFFFFF : (uint32_t)LBA; + //uint32_t lba28 = (uint32_t)LBA; + host_writew(sector+(0*2),0x0040); /* bit 6: 1=fixed disk */ host_writew(sector+(1*2),phys_cyls); @@ -2590,7 +2603,7 @@ void IDEATADevice::generate_identify_device() { host_writew(sector+(59*2),0x0100|multiple_sector_count); /* :8 multiple sector setting is valid */ /* 7:0 current setting for number of log. sectors per DRQ of READ/WRITE MULTIPLE */ - host_writed(sector+(60*2),ptotal); /* total user addressable sectors (LBA) */ + host_writed(sector+(60*2),lba28); /* total user addressable sectors (LBA) */ host_writew(sector+(62*2),0x0000); /* FIXME: ??? */ host_writew(sector+(63*2),0x0000); /* :10 0=Multiword DMA mode 2 not selected */ /* TODO: Basically, we don't do DMA. Fill out this comment */ @@ -2602,13 +2615,15 @@ void IDEATADevice::generate_identify_device() { host_writew(sector+(80*2),0x007E); /* major version number. Here we say we support ATA-1 through ATA-8 */ host_writew(sector+(81*2),0x0022); /* minor version */ host_writew(sector+(82*2),0x4208); /* command set: NOP, DEVICE RESET[XXXXX], POWER MANAGEMENT */ - host_writew(sector+(83*2),0x4000); /* command set: LBA48[XXXX] */ + host_writew(sector+(83*2),int13_enable_48bitLBA?0xC400:0x4000); /* command set: bit15: valid, bit14: NOP, bit 10: enable 48bit LBA */ host_writew(sector+(84*2),0x4000); /* FIXME: ??? */ host_writew(sector+(85*2),0x4208); /* commands in 82 enabled */ - host_writew(sector+(86*2),0x4000); /* commands in 83 enabled */ + host_writew(sector+(86*2),int13_enable_48bitLBA?0xC400:0x4000); /* commands in 83 enabled bit15: valid, bit14: NOP, bit10: enable 48bit LBA*/ host_writew(sector+(87*2),0x4000); /* FIXME: ??? */ host_writew(sector+(88*2),0x0000); /* FIXME: ??? */ - host_writew(sector+(93*3),0x0000); /* FIXME: ??? */ + host_writew(sector+(93*2),0x0000); /* FIXME: ??? */ + host_writed(sector+(100*2), int13_enable_48bitLBA ? (uint32_t)(LBA & 0xFFFFFFFF):0); // 48bit LBA lower 32 bits + host_writed(sector+(102*2), int13_enable_48bitLBA ? (uint32_t)(LBA >> 32):0); // 48bit LBA upper 32 bits /* ATA-8 integrity checksum */ sector[510] = 0xA5; @@ -2642,11 +2657,6 @@ imageDisk *IDEATADevice::getBIOSdisk() { } CDROM_Interface *IDEATAPICDROMDevice::getMSCDEXDrive() { - CDROM_Interface *cdrom=NULL; - - if (!GetMSCDEXDrive(drive_index,&cdrom)) - return NULL; - return cdrom; } @@ -2669,6 +2679,7 @@ void IDEATADevice::update_from_biosdisk() { cyls = dsk->cylinders; heads = dsk->heads; sects = dsk->sectors; + LBA = dsk->getLBA(); if (heads > 16) { geo_translate = true; @@ -2676,32 +2687,46 @@ void IDEATADevice::update_from_biosdisk() { /* One additional correction: The disk image is probably using BIOS-style geometry translation (such as C/H/S 1024/64/63) which is impossible given that the IDE standard only allows up to 16 heads. So we have to translate the geometry. */ - while (heads > 16 && (heads & 1) == 0) - heads >>= 1U; /* If we can't divide the heads down, then pick a LBA-like mapping that is good enough. * Note that if what we pick does not evenly map to the INT 13h geometry, and the partition * contained within is not an LBA type FAT16/FAT32 partition, then Windows 95's IDE driver * will ignore this device and fall back to using INT 13h. For user convenience we will * print a warning to reminder the user of exactly that. */ - if (heads > 16) { - sects = 63; - heads = 16; - } + if(LBA <= 17ULL * 1024ULL * 4ULL) { + sects = 17; + heads = 4; + } + else if(LBA <= 17ULL * 1024ULL * 8ULL) { + sects = 17; + heads = 8; + } + else if(LBA <= 32ULL * 1024ULL * 16ULL) { + sects = 32; + heads = 16; + } + else if(LBA > 63ULL * 1024ULL * 255ULL && LBA > 65535ULL * 16ULL * 63ULL) { // Over 8.4GB, use max CHS values + sects = 255; + heads = 16; + } + else { + sects = 63; // Up to 8.4GB + heads = 16; + } - { - uint64_t tmp = ((uint64_t)dsk->diskSizeK << (uint64_t)10) / (uint64_t)dsk->sector_size; - cyls = (tmp + (uint64_t)(sects * heads) - (uint64_t)1) / ((uint64_t)(sects * heads)); - } - LOG_MSG("Mapping BIOS DISK C/H/S %u/%u/%u as IDE %u/%u/%u\n", - (unsigned int)dsk->cylinders, - (unsigned int)dsk->heads, - (unsigned int)dsk->sectors, - (unsigned int)cyls, - (unsigned int)heads, - (unsigned int)sects); + cyls = (uint32_t)(LBA / (sects * heads)); + if(cyls >= 65535UL) cyls = 65535; // max cyls for IDE CHS is 65535 + } + LOG_MSG("IDE: Disk size: %gMB, BIOS C/H/S: %u/%u/%u, IDE: %u/%u/%u\n", + (double)LBA * 512.0 / (1024.0 * 1024.0), + (unsigned int)dsk->cylinders, + (unsigned int)dsk->heads, + (unsigned int)dsk->sectors, + (unsigned int)cyls, + (unsigned int)heads, + (unsigned int)sects); phys_heads = heads; phys_sects = sects; @@ -2752,6 +2777,13 @@ void IDE_ATAPI_MediaChangeNotify(unsigned char drive_index) { IDEATAPICDROMDevice *atapi = (IDEATAPICDROMDevice*)dev; if (drive_index == atapi->drive_index) { LOG_MSG("IDE ATAPI acknowledge media change for drive %c\n",drive_index+'A'); + + CDROM_Interface *cdrom = NULL; + if (GetMSCDEXDrive(drive_index,&cdrom)) { + if (atapi->cdrom) atapi->cdrom->Release(); + (atapi->cdrom = cdrom)->Addref(); + } + atapi->has_changed = true; atapi->loading_mode = LOAD_INSERT_CD; PIC_RemoveSpecificEvents(IDE_ATAPI_SpinDown,pk); @@ -2782,16 +2814,19 @@ void IDE_CDROM_Attach(signed char index,bool slave,unsigned char drive_index) { return; } - if (!GetMSCDEXDrive(drive_index,NULL)) { + CDROM_Interface *cdrom = NULL; + + if (!GetMSCDEXDrive(drive_index,&cdrom)) { LOG_MSG("IDE: Asked to attach CD-ROM that does not exist\n"); return; } - dev = new IDEATAPICDROMDevice(c,drive_index,slave); + dev = new IDEATAPICDROMDevice(c,drive_index,slave,cdrom); if(dev == NULL) { LOG_MSG("IMGMOUNT: Failed to allocate CD-ROM drive %c to IDE %s %s", drive_index + 'A', ideslot[index], master_slave[slave ? 1 : 0]); return; } + cdrom->Release(); dev->update_from_cdrom(); c->device[slave?1:0] = (IDEDevice*)dev; LOG_MSG("IMGMOUNT: CD-ROM image mounted to drive %c (IDE %s %s)", drive_index + 'A', ideslot[index], master_slave[slave ? 1 : 0]); @@ -2974,7 +3009,7 @@ static void IDE_SelfIO_Out(IDEController *ide,Bitu port,Bitu val,Bitu len) { } /* Get physical (not logical INT 13h) geometry */ -bool IDE_GetPhysGeometry(unsigned char disk,uint32_t &heads,uint32_t &cyl,uint32_t §,uint32_t &size) { +bool IDE_GetPhysGeometry(unsigned char disk,uint32_t &heads,uint32_t &cyl,uint32_t §,uint32_t &size, uint64_t &LBA) { IDEController *ide; IDEDevice *dev; Bitu idx,ms; @@ -2994,6 +3029,7 @@ bool IDE_GetPhysGeometry(unsigned char disk,uint32_t &heads,uint32_t &cyl,uint32 heads = ata->phys_heads; sect = ata->phys_sects; cyl = ata->phys_cyls; + LBA = ata->LBA; size = 512; return true; } diff --git a/src/hardware/ipx.cpp b/src/hardware/ipx.cpp index f95c990837e..104afe8b651 100644 --- a/src/hardware/ipx.cpp +++ b/src/hardware/ipx.cpp @@ -39,7 +39,11 @@ #include "ipx.h" #include "ipxserver.h" #include "timer.h" +#if defined(C_SDL2_NET) && C_SDL2_NET +#include +#else #include "SDL_net.h" +#endif #include "programs.h" #include "pic.h" #include "control.h" diff --git a/src/hardware/keyboard.cpp b/src/hardware/keyboard.cpp index 03f5d977ada..d14081eb677 100644 --- a/src/hardware/keyboard.cpp +++ b/src/hardware/keyboard.cpp @@ -254,6 +254,11 @@ int KEYBOARD_AUX_Active() { return keyb.auxactive && !keyb.ps2mouse.int33_taken; } +int KEYBOARD_PS2REPORT_Active() { + /* HACK: INT 15h really needs to issue Enable AUX, but for now, report if PS/2 mouse reporting active */ + return keyb.ps2mouse.reporting; +} + static void KEYBOARD_SetPort60(uint16_t val) { keyb.auxchanged=(val&AUX)>0; keyb.p60changed=true; diff --git a/src/hardware/memory.cpp b/src/hardware/memory.cpp index be9347ccdfe..d386b63f325 100644 --- a/src/hardware/memory.cpp +++ b/src/hardware/memory.cpp @@ -813,11 +813,17 @@ void MEM_SetLFB(Bitu page, Bitu pages, PageHandler *handler, PageHandler *mmioha (unsigned long)(page*4096), (unsigned long)(((page+pages)*4096)-1), (unsigned int)(pages*4)); - // FIXME: Because this code emulates S3 by hardcoding the MMIO address! - LOG(LOG_MISC,LOG_DEBUG)("MEM: Linear framebuffer MMIO is now set to 0x%lx-0x%lx (%uKB)", - (unsigned long)(page*4096)+0x01000000, - (unsigned long)(((page+16)*4096)+0x01000000-1), - (unsigned int)(16*4)); + + if (svgaCard == SVGA_DOSBoxIG) { + /* TODO: Perhaps the DOSBox Integrated Device could have an MMIO region */ + } + else { + // FIXME: Because this code emulates S3 by hardcoding the MMIO address! + LOG(LOG_MISC,LOG_DEBUG)("MEM: Linear framebuffer MMIO is now set to 0x%lx-0x%lx (%uKB)", + (unsigned long)(page*4096)+0x01000000, + (unsigned long)(((page+16)*4096)+0x01000000-1), + (unsigned int)(16*4)); + } } PAGING_ClearTLB(); @@ -1677,6 +1683,7 @@ static void write_pc98_a20(Bitu port,Bitu val,Bitu iolen) { } } +#if !defined(OSFREE) void RemoveEMSPageFrame(void) { LOG(LOG_MISC,LOG_DEBUG)("Removing EMS page frame"); @@ -1691,6 +1698,7 @@ void RemoveEMSPageFrame(void) { } } } +#endif void PreparePCJRCartRom(void) { LOG(LOG_MISC,LOG_DEBUG)("Preparing mapping for PCjr cartridge ROM"); @@ -2261,6 +2269,19 @@ void Init_RAM() { } } +#if defined(OSFREE) + /* OSFREE: It must be possible to boot the guest OS, and that requires at least 32KB of RAM (128KB for PC-98). + * Whether the OS can run in such little memory is another question, what matters is there is enough + * RAM for the standard boot sector loading location to exist. */ + /* FIXME: The boot process crashes with memsizekb=128 and machine=pc98, why? */ + if (IS_PC98_ARCH) { + if (memsizekb < 128) memsizekb = 128; /* 1FC0:0000 = 128KB - 1024 */ + } + else { + if (memsizekb < 32) memsizekb = 32; /* 0000:7C00 = 32KB - 1024 */ + } +#endif + { uint32_t maxsz32 = 0xF8000000ul; uint64_t maxsz; @@ -2521,6 +2542,7 @@ void PS2Port92_OnReset(Section *sec) { (void)sec;//UNUSED Section_prop * section=static_cast(control->GetSection("dosbox")); + PC98_43B_memspace_ReadHandler.Uninstall(); PS2_Port_92h_WriteHandler2.Uninstall(); PS2_Port_92h_WriteHandler.Uninstall(); PS2_Port_92h_ReadHandler.Uninstall(); @@ -2809,7 +2831,7 @@ class SerializeMemory : public SerializeGlobalPOD private: void getBytes(std::ostream& stream) override { - uint8_t pagehandler_idx[0x40000]; + uint8_t pagehandler_idx[0x40000] = {0}; unsigned int size_table; // Assume 1GB maximum memory size diff --git a/src/hardware/mic_input_win32.cpp b/src/hardware/mic_input_win32.cpp new file mode 100644 index 00000000000..6735ad5c995 --- /dev/null +++ b/src/hardware/mic_input_win32.cpp @@ -0,0 +1,911 @@ +/* + * Copyright (C) 2024 DOSBox-X Team + * + * SoundBlaster Microphone Input Support - Windows WASAPI Implementation + */ + +#ifdef WIN32 +#if defined(_MSC_VER) || defined(__MINGW64__) + +#include "mic_input_win32.h" +#include "logging.h" +#include +#include +#include +#include +#include +#include "control.h" + +// Link required libraries +#pragma comment(lib, "ole32.lib") +#pragma comment(lib, "uuid.lib") + +// Define KSDATAFORMAT_SUBTYPE_IEEE_FLOAT GUID locally +// {00000003-0000-0010-8000-00aa00389b71} +static const GUID LOCAL_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = + { 0x00000003, 0x0000, 0x0010, { 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } }; + +// Reference time units (100-nanosecond intervals) +#define REFTIMES_PER_SEC 10000000 +#define REFTIMES_PER_MILLISEC 10000 + +// Buffer duration for capture (in milliseconds) +#define CAPTURE_BUFFER_DURATION_MS 100 + +// Global instance +MicrophoneInput* g_MicrophoneInput = nullptr; + +// ============================================================================ +// MicCircularBuffer Implementation +// ============================================================================ + +MicCircularBuffer::MicCircularBuffer(size_t capacity) + : buffer_(capacity), readPos_(0), writePos_(0), count_(0) { +} + +MicCircularBuffer::~MicCircularBuffer() { +} + +size_t MicCircularBuffer::Write(const uint8_t* data, size_t bytes) { + std::lock_guard lock(mutex_); + + size_t capacity = buffer_.size(); + size_t available = capacity - count_; + size_t toWrite = std::min(bytes, available); + + for (size_t i = 0; i < toWrite; i++) { + buffer_[writePos_] = data[i]; + writePos_ = (writePos_ + 1) % capacity; + } + count_ += toWrite; + + return toWrite; +} + +size_t MicCircularBuffer::Read(uint8_t* data, size_t bytes) { + std::lock_guard lock(mutex_); + + size_t toRead = std::min(bytes, count_); + size_t capacity = buffer_.size(); + + for (size_t i = 0; i < toRead; i++) { + data[i] = buffer_[readPos_]; + readPos_ = (readPos_ + 1) % capacity; + } + count_ -= toRead; + + return toRead; +} + +size_t MicCircularBuffer::Available() const { + std::lock_guard lock(mutex_); + return count_; +} + +void MicCircularBuffer::Clear() { + std::lock_guard lock(mutex_); + readPos_ = 0; + writePos_ = 0; + count_ = 0; +} + +// ============================================================================ +// MicrophoneInput Implementation +// ============================================================================ + +MicrophoneInput::MicrophoneInput() + : deviceEnumerator_(nullptr) + , device_(nullptr) + , audioClient_(nullptr) + , captureClient_(nullptr) + , state_(MIC_STATE_CLOSED) + , mixFormat_(nullptr) + , captureThread_(nullptr) + , stopEvent_(nullptr) + , threadRunning_(false) + , resamplePos_(0.0) + , lastSampleL_(0.0f) + , lastSampleR_(0.0f) + , inputGain_(1.0f) // Normal gain (no amplification) + , selectedDeviceIndex_(-1) { + + memset(&captureFormat_, 0, sizeof(captureFormat_)); + memset(lastError_, 0, sizeof(lastError_)); +} + +MicrophoneInput::~MicrophoneInput() { + Shutdown(); +} + +void MicrophoneInput::SetError(const char* format, ...) { + va_list args; + va_start(args, format); + vsnprintf(lastError_, sizeof(lastError_), format, args); + va_end(args); +} + +bool MicrophoneInput::GetPreferHFP() { + const Section_prop* section = static_cast(control->GetSection("sblaster")); + return section->Get_bool("prefer hfp"); +} + +bool MicrophoneInput::Initialize() { + if (state_ != MIC_STATE_CLOSED) { + return true; // Already initialized + } + + // Initialize COM for this thread + HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); + if (FAILED(hr) && hr != RPC_E_CHANGED_MODE) { + SetError("Failed to initialize COM: 0x%08X", hr); + return false; + } + + // Create device enumerator + hr = CoCreateInstance( + __uuidof(MMDeviceEnumerator), + nullptr, + CLSCTX_ALL, + __uuidof(IMMDeviceEnumerator), + (void**)&deviceEnumerator_ + ); + + if (FAILED(hr)) { + SetError("Failed to create device enumerator: 0x%08X", hr); + return false; + } + + // Create stop event for capture thread + stopEvent_ = CreateEvent(nullptr, TRUE, FALSE, nullptr); + if (!stopEvent_) { + SetError("Failed to create stop event"); + ReleaseDevice(); + return false; + } + + state_ = MIC_STATE_OPEN; + return true; +} + +void MicrophoneInput::Shutdown() { + StopCapture(); + ReleaseDevice(); + + if (stopEvent_) { + CloseHandle(stopEvent_); + stopEvent_ = nullptr; + } + + if (deviceEnumerator_) { + deviceEnumerator_->Release(); + deviceEnumerator_ = nullptr; + } + + state_ = MIC_STATE_CLOSED; +} + +std::vector MicrophoneInput::GetDeviceList() { + std::vector devices; + + if (!deviceEnumerator_) { + return devices; + } + + IMMDeviceCollection* collection = nullptr; + HRESULT hr = deviceEnumerator_->EnumAudioEndpoints( + eCapture, DEVICE_STATE_ACTIVE, &collection); + + if (FAILED(hr)) { + return devices; + } + + UINT count = 0; + collection->GetCount(&count); + + for (UINT i = 0; i < count; i++) { + IMMDevice* device = nullptr; + if (SUCCEEDED(collection->Item(i, &device))) { + IPropertyStore* props = nullptr; + if (SUCCEEDED(device->OpenPropertyStore(STGM_READ, &props))) { + PROPVARIANT varName; + PropVariantInit(&varName); + if (SUCCEEDED(props->GetValue(PKEY_Device_FriendlyName, &varName))) { + devices.push_back(varName.pwszVal); + PropVariantClear(&varName); + } + props->Release(); + } + device->Release(); + } + } + + collection->Release(); + return devices; +} + +bool MicrophoneInput::SelectDevice(int deviceIndex) { + if (state_ == MIC_STATE_CAPTURING) { + StopCapture(); + } + + ReleaseDevice(); + selectedDeviceIndex_ = deviceIndex; + + return InitializeDevice(); +} + +std::wstring MicrophoneInput::GetCurrentDeviceName() const { + if (!device_) { + return L"(none)"; + } + + IPropertyStore* props = nullptr; + std::wstring name = L"Unknown Device"; + + if (SUCCEEDED(device_->OpenPropertyStore(STGM_READ, &props))) { + PROPVARIANT varName; + PropVariantInit(&varName); + if (SUCCEEDED(props->GetValue(PKEY_Device_FriendlyName, &varName))) { + name = varName.pwszVal; + PropVariantClear(&varName); + } + props->Release(); + } + + return name; +} + +bool MicrophoneInput::InitializeDevice() { + HRESULT hr; + + // Enumerate all active capture devices + IMMDeviceCollection* collection = nullptr; + + hr = deviceEnumerator_->EnumAudioEndpoints( + eCapture, DEVICE_STATE_ACTIVE, &collection); + + if(FAILED(hr) || !collection) { + SetError("Failed to enumerate capture devices: 0x%08X", hr); + return false; + } + + UINT count = 0; + collection->GetCount(&count); + + IMMDevice* selectedDevice = nullptr; + int bestScore = INT_MIN; + std::string acpname; + + for(UINT i = 0; i < count; i++) { + IMMDevice* dev = nullptr; + if(FAILED(collection->Item(i, &dev))) + continue; + + int score = 0; + std::wstring name; + + // Get device friendly name + IPropertyStore* props = nullptr; + + if(SUCCEEDED(dev->OpenPropertyStore(STGM_READ, &props))) { + PROPVARIANT varName; + PropVariantInit(&varName); + + if(SUCCEEDED(props->GetValue(PKEY_Device_FriendlyName, &varName))) { + if(varName.vt == VT_LPWSTR && varName.pwszVal) { + name = varName.pwszVal; + } + } + + PropVariantClear(&varName); + props->Release(); + } + + // Activate temporarily to inspect format + IAudioClient* tempClient = nullptr; + WAVEFORMATEX* fmt = nullptr; + + if(SUCCEEDED(dev->Activate(__uuidof(IAudioClient), + CLSCTX_ALL, nullptr, + (void**)&tempClient))) { + + if(SUCCEEDED(tempClient->GetMixFormat(&fmt))) { + + /* + HFP (Hands-Free Profile) typically uses 8 kHz or 16 kHz sample rates and is mono. + */ + bool isLikelyHFP = + (fmt->nSamplesPerSec <= 16000) && + (fmt->nChannels == 1); + + // ---- HFP handling ---- + if(isLikelyHFP) { + if(!GetPreferHFP()) { + // Strongly penalize HFP when option is disabled + score -= 300; + } + else { + // Boost if user explicitly prefers HFP + if(fmt->nSamplesPerSec >= 12000) score += 300; + else if(fmt->nSamplesPerSec > 0) score += 200; + } + } + else { + if(fmt->nSamplesPerSec >= 48000) score += 100; + else if(fmt->nSamplesPerSec >= 32000) score += 50; + else score += 20; + + } + CoTaskMemFree(fmt); + } + + tempClient->Release(); + } + + // Select highest scoring device + if(score > bestScore) { + if(selectedDevice) + selectedDevice->Release(); + + selectedDevice = dev; + selectedDevice->AddRef(); + bestScore = score; + int size = WideCharToMultiByte( + CP_ACP, 0, + name.c_str(), -1, + nullptr, 0, + nullptr, nullptr); + + if(size > 0) { + std::string temp(size, 0); + + WideCharToMultiByte( + CP_ACP, 0, + name.c_str(), -1, + &temp[0], size, + nullptr, nullptr); + + acpname = temp.c_str(); + } + else { + acpname = "(unknown)"; + } + } + + dev->Release(); + } + + collection->Release(); + + if(!selectedDevice) { + SetError("No usable capture device found"); + return false; + } + + device_ = selectedDevice; + LOG_MSG("mic_input: Selected microphone device: %s", acpname.c_str()); + + // Activate audio client + hr = device_->Activate( + __uuidof(IAudioClient), + CLSCTX_ALL, + nullptr, + (void**)&audioClient_ + ); + + if (FAILED(hr)) { + SetError("Failed to activate audio client: 0x%08X", hr); + ReleaseDevice(); + return false; + } + + // Get default format + hr = audioClient_->GetMixFormat(&mixFormat_); + if (FAILED(hr)) { + SetError("Failed to get mix format: 0x%08X", hr); + ReleaseDevice(); + return false; + } + + // Store capture format info + captureFormat_.sampleRate = mixFormat_->nSamplesPerSec; + captureFormat_.channels = mixFormat_->nChannels; + + // Handle extended format + if (mixFormat_->wFormatTag == WAVE_FORMAT_EXTENSIBLE) { + WAVEFORMATEXTENSIBLE* extFormat = (WAVEFORMATEXTENSIBLE*)mixFormat_; + captureFormat_.bitsPerSample = extFormat->Samples.wValidBitsPerSample; + } else { + captureFormat_.bitsPerSample = mixFormat_->wBitsPerSample; + } + + // Initialize audio client for capture + REFERENCE_TIME bufferDuration = CAPTURE_BUFFER_DURATION_MS * REFTIMES_PER_MILLISEC; + hr = audioClient_->Initialize( + AUDCLNT_SHAREMODE_SHARED, + 0, + bufferDuration, + 0, + mixFormat_, + nullptr + ); + + if (FAILED(hr)) { + SetError("Failed to initialize audio client: 0x%08X", hr); + ReleaseDevice(); + return false; + } + + // Get capture client + hr = audioClient_->GetService( + __uuidof(IAudioCaptureClient), + (void**)&captureClient_ + ); + + if (FAILED(hr)) { + SetError("Failed to get capture client: 0x%08X", hr); + ReleaseDevice(); + return false; + } + + return true; +} + +void MicrophoneInput::ReleaseDevice() { + if (captureClient_) { + captureClient_->Release(); + captureClient_ = nullptr; + } + + if (audioClient_) { + audioClient_->Release(); + audioClient_ = nullptr; + } + + if (device_) { + device_->Release(); + device_ = nullptr; + } + + if (mixFormat_) { + CoTaskMemFree(mixFormat_); + mixFormat_ = nullptr; + } +} + +bool MicrophoneInput::StartCapture() { + if (state_ == MIC_STATE_CAPTURING) { + return true; // Already capturing + } + + if (!audioClient_ || !captureClient_) { + if (!InitializeDevice()) { + return false; + } + } + + // Clear buffer and reset resampling state + audioBuffer_.Clear(); + resamplePos_ = 0.0; + lastSampleL_ = 0.0f; + lastSampleR_ = 0.0f; + + // Reset stop event + ResetEvent(stopEvent_); + + // Start audio client + HRESULT hr = audioClient_->Start(); + if (FAILED(hr)) { + SetError("Failed to start audio client: 0x%08X", hr); + state_ = MIC_STATE_ERROR; + return false; + } + + // Start capture thread + threadRunning_ = true; + captureThread_ = CreateThread( + nullptr, 0, CaptureThreadProc, this, 0, nullptr); + + if (!captureThread_) { + SetError("Failed to create capture thread"); + audioClient_->Stop(); + state_ = MIC_STATE_ERROR; + return false; + } + + state_ = MIC_STATE_CAPTURING; + return true; +} + +void MicrophoneInput::StopCapture() { + if (state_ != MIC_STATE_CAPTURING) { + return; + } + + // Signal thread to stop + threadRunning_ = false; + SetEvent(stopEvent_); + + // Wait for thread to finish + if (captureThread_) { + WaitForSingleObject(captureThread_, 1000); + CloseHandle(captureThread_); + captureThread_ = nullptr; + } + + // Stop audio client + if (audioClient_) { + audioClient_->Stop(); + } + + state_ = MIC_STATE_OPEN; +} + +DWORD WINAPI MicrophoneInput::CaptureThreadProc(LPVOID param) { + MicrophoneInput* mic = static_cast(param); + + // Initialize COM for this thread + CoInitializeEx(nullptr, COINIT_MULTITHREADED); + + mic->CaptureLoop(); + + CoUninitialize(); + return 0; +} + +void MicrophoneInput::CaptureLoop() { + // Capture interval (process every 10ms) + const DWORD captureInterval = 10; + + while (threadRunning_) { + // Wait for data or stop signal + DWORD waitResult = WaitForSingleObject(stopEvent_, captureInterval); + if (waitResult == WAIT_OBJECT_0) { + break; // Stop signaled + } + + if (!captureClient_) { + break; + } + + UINT32 packetLength = 0; + HRESULT hr = captureClient_->GetNextPacketSize(&packetLength); + if (FAILED(hr)) { + continue; + } + + while (packetLength > 0) { + BYTE* data = nullptr; + UINT32 numFrames = 0; + DWORD flags = 0; + + hr = captureClient_->GetBuffer(&data, &numFrames, &flags, nullptr, nullptr); + if (FAILED(hr)) { + break; + } + + if (numFrames > 0) { + // Calculate bytes + size_t bytesPerFrame = mixFormat_->nBlockAlign; + size_t totalBytes = numFrames * bytesPerFrame; + + if (flags & AUDCLNT_BUFFERFLAGS_SILENT) { + // Generate silence in the expected format + std::vector silenceData(totalBytes, 0); + audioBuffer_.Write(silenceData.data(), totalBytes); + } else if (data) { + // Write actual audio data to circular buffer + audioBuffer_.Write(data, totalBytes); + } + } + + captureClient_->ReleaseBuffer(numFrames); + captureClient_->GetNextPacketSize(&packetLength); + } + } +} + +void MicrophoneInput::SetInputGain(float gain) { + inputGain_ = std::max(0.0f, std::min(1000.0f, gain)); +} + +size_t MicrophoneInput::GetSamples(uint8_t* buffer, size_t requestedBytes, + uint32_t targetSampleRate, bool stereo, + bool signed16bit) { + if (state_ != MIC_STATE_CAPTURING) { + memset(buffer, signed16bit ? 0 : 0x80, requestedBytes); + return requestedBytes; + } + + size_t targetBytesPerSample = signed16bit ? 2 : 1; + size_t targetChannels = stereo ? 2 : 1; + size_t targetBytesPerFrame = targetBytesPerSample * targetChannels; + size_t targetFrames = requestedBytes / targetBytesPerFrame; + + // Calculate source frames needed + // Use ceil + 1 to ensure we always have enough input for the resampler. + // At 48000->44100, ratio=1.088, so for 882 output frames we need ~960 input. + // The +1 accounts for floating point rounding and ensures no underrun. + double ratio = (double)captureFormat_.sampleRate / (double)targetSampleRate; + size_t sourceFramesNeeded = (size_t)ceil(targetFrames * ratio) + 1; + + size_t sourceBytesPerFrame = mixFormat_->nBlockAlign; + size_t sourceBytesNeeded = sourceFramesNeeded * sourceBytesPerFrame; + + // Ensure we have enough buffer space + if (resampleBuffer_.size() < sourceBytesNeeded / sizeof(float) + 1) { + resampleBuffer_.resize(sourceBytesNeeded / sizeof(float) + 1); + } + uint8_t* sourceData = reinterpret_cast(resampleBuffer_.data()); + + // Read from circular buffer - only what we need + size_t bytesRead = audioBuffer_.Read(sourceData, sourceBytesNeeded); + + if (bytesRead == 0) { + // No data - fill with last known sample to avoid clicks + if (signed16bit) { + int16_t* out = (int16_t*)buffer; + int16_t lastVal = (int16_t)(lastSampleL_ * 32767.0f); + for (size_t i = 0; i < requestedBytes / 2; i++) { + out[i] = lastVal; + } + } else { + uint8_t lastVal = (uint8_t)(lastSampleL_ * 127.0f + 128.0f); + memset(buffer, lastVal, requestedBytes); + } + return requestedBytes; + } + + size_t sourceFrames = bytesRead / sourceBytesPerFrame; + + // Convert to float + std::vector floatData(sourceFrames * 2); + + bool sourceFloat = (captureFormat_.bitsPerSample == 32) || + (mixFormat_->wFormatTag == WAVE_FORMAT_IEEE_FLOAT) || + (mixFormat_->wFormatTag == WAVE_FORMAT_EXTENSIBLE && + IsEqualGUID(((WAVEFORMATEXTENSIBLE*)mixFormat_)->SubFormat, LOCAL_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)); + + for (size_t i = 0; i < sourceFrames; i++) { + float left, right; + + if (sourceFloat) { + float* src = (float*)(sourceData + i * sourceBytesPerFrame); + left = src[0]; + right = (captureFormat_.channels >= 2) ? src[1] : src[0]; + } else if (captureFormat_.bitsPerSample == 16) { + int16_t* src = (int16_t*)(sourceData + i * sourceBytesPerFrame); + left = src[0] / 32768.0f; + right = (captureFormat_.channels >= 2) ? src[1] / 32768.0f : left; + } else { + uint8_t* src = sourceData + i * sourceBytesPerFrame; + left = (src[0] - 128) / 128.0f; + right = (captureFormat_.channels >= 2) ? (src[1] - 128) / 128.0f : left; + } + + floatData[i * 2] = left * inputGain_; + floatData[i * 2 + 1] = right * inputGain_; + } + + // Store last sample for continuity + if (sourceFrames > 0) { + lastSampleL_ = floatData[(sourceFrames - 1) * 2]; + lastSampleR_ = floatData[(sourceFrames - 1) * 2 + 1]; + } + + // Resample and convert + size_t bytesWritten = ResampleAndConvert(floatData.data(), sourceFrames, buffer, requestedBytes, + targetSampleRate, stereo, signed16bit); + + // If we didn't fill the buffer, pad with last sample (avoid silence gaps) + if (bytesWritten < requestedBytes) { + if (signed16bit) { + int16_t* out = (int16_t*)buffer; + int16_t lastVal = (bytesWritten >= 2) ? out[bytesWritten/2 - 1] : 0; + for (size_t i = bytesWritten / 2; i < requestedBytes / 2; i++) { + out[i] = lastVal; + } + } else { + uint8_t lastVal = (bytesWritten >= 1) ? buffer[bytesWritten - 1] : 0x80; + memset(buffer + bytesWritten, lastVal, requestedBytes - bytesWritten); + } + } + + return requestedBytes; +} + +size_t MicrophoneInput::ResampleAndConvert(const float* input, size_t inputFrames, + uint8_t* output, size_t maxOutputBytes, + uint32_t targetRate, bool stereo, + bool signed16bit) { + if (inputFrames == 0) { + return 0; + } + + size_t bytesPerSample = signed16bit ? 2 : 1; + size_t channels = stereo ? 2 : 1; + size_t bytesPerFrame = bytesPerSample * channels; + size_t maxOutputFrames = maxOutputBytes / bytesPerFrame; + + // Simple decimation: pick every Nth sample + // For 48000 -> 11025, we pick roughly every 4.35th sample + double step = (double)captureFormat_.sampleRate / (double)targetRate; + size_t outputFrames = 0; + double pos = 0.0; + + while (outputFrames < maxOutputFrames && (size_t)pos < inputFrames) { + size_t idx = (size_t)pos; + + // Get sample (nearest neighbor - simple and click-free) + float left = input[idx * 2]; + float right = input[idx * 2 + 1]; + + // Clamp to valid range + left = std::max(-1.0f, std::min(1.0f, left)); + right = std::max(-1.0f, std::min(1.0f, right)); + + // Convert to target format + if (signed16bit) { + int16_t* out = (int16_t*)(output + outputFrames * bytesPerFrame); + out[0] = (int16_t)(left * 32767.0f); + if (stereo) { + out[1] = (int16_t)(right * 32767.0f); + } + } else { + // 8-bit unsigned + uint8_t* out = output + outputFrames * bytesPerFrame; + out[0] = (uint8_t)((left * 127.0f) + 128.0f); + if (stereo) { + out[1] = (uint8_t)((right * 127.0f) + 128.0f); + } + } + + outputFrames++; + pos += step; + } + + return outputFrames * bytesPerFrame; +} + +// ============================================================================ +// Global Functions +// ============================================================================ + +bool MIC_Initialize() { + if (g_MicrophoneInput) { + return true; // Already initialized + } + + g_MicrophoneInput = new MicrophoneInput(); + if (!g_MicrophoneInput->Initialize()) { + delete g_MicrophoneInput; + g_MicrophoneInput = nullptr; + return false; + } + + // Start capturing immediately + if (!g_MicrophoneInput->StartCapture()) { + delete g_MicrophoneInput; + g_MicrophoneInput = nullptr; + return false; + } + + return true; +} + +void MIC_Shutdown() { + if (g_MicrophoneInput) { + g_MicrophoneInput->Shutdown(); + delete g_MicrophoneInput; + g_MicrophoneInput = nullptr; + } +} + +bool MIC_IsAvailable() { + return g_MicrophoneInput != nullptr && + g_MicrophoneInput->GetState() != MIC_STATE_CLOSED && + g_MicrophoneInput->GetState() != MIC_STATE_ERROR; +} + +void MIC_GenerateInput(uint8_t* buffer, size_t bytes, + uint32_t sampleRate, bool stereo, bool signed16bit) { + if (!g_MicrophoneInput || g_MicrophoneInput->GetState() != MIC_STATE_CAPTURING) { + // Fill with silence + if (signed16bit) { + memset(buffer, 0, bytes); + } else { + memset(buffer, 0x80, bytes); // 8-bit unsigned silence = 128 + } + return; + } + + g_MicrophoneInput->GetSamples(buffer, bytes, sampleRate, stereo, signed16bit); +} + +// Direct ADC - Time-based at measured average polling rate (~4500 Hz) +// Returns sample based on real elapsed time, ensuring correct playback speed. +static uint8_t directADCBuffer[32768]; // Ring buffer (~7 sec at 4500 Hz) +static const size_t DIRECT_ADC_BUFFER_SIZE = sizeof(directADCBuffer); +static const uint32_t DIRECT_ADC_RATE = 4500; // Measured average polling rate + +static LARGE_INTEGER directADCPerfFreq; +static LARGE_INTEGER directADCStartTime; +static bool directADCInitialized = false; +static size_t directADCGeneratedSamples = 0; + +// Helper: Generate more samples +static void DirectADC_GenerateMore(size_t count) { + if (!g_MicrophoneInput || g_MicrophoneInput->GetState() != MIC_STATE_CAPTURING) { + return; + } + + size_t remaining = count; + while (remaining > 0) { + size_t writePos = directADCGeneratedSamples % DIRECT_ADC_BUFFER_SIZE; + size_t availableSpace = DIRECT_ADC_BUFFER_SIZE - writePos; + size_t toGenerate = (remaining < availableSpace) ? remaining : availableSpace; + toGenerate = (toGenerate < 2048) ? toGenerate : 2048; + + g_MicrophoneInput->GetSamples( + &directADCBuffer[writePos], + toGenerate, + DIRECT_ADC_RATE, + false, // mono + false // 8-bit unsigned + ); + + directADCGeneratedSamples += toGenerate; + remaining -= toGenerate; + } +} + +uint8_t MIC_GetDirectADCSample() { + if (!g_MicrophoneInput || g_MicrophoneInput->GetState() != MIC_STATE_CAPTURING) { + return 0x80; // Silence + } + + LARGE_INTEGER now; + QueryPerformanceCounter(&now); + + // Initialize on first call + if (!directADCInitialized) { + QueryPerformanceFrequency(&directADCPerfFreq); + directADCStartTime = now; + directADCGeneratedSamples = 0; + + // Pre-generate 100ms of audio (450 samples) + DirectADC_GenerateMore(450); + + directADCInitialized = true; + } + + // Calculate which sample corresponds to current real time + double elapsedSec = (double)(now.QuadPart - directADCStartTime.QuadPart) / + (double)directADCPerfFreq.QuadPart; + size_t timeSample = (size_t)(elapsedSec * DIRECT_ADC_RATE); + + // Ensure we have enough samples generated ahead (+100ms) + size_t needed = timeSample + (DIRECT_ADC_RATE / 10); + if (directADCGeneratedSamples < needed) { + DirectADC_GenerateMore(needed - directADCGeneratedSamples + 450); + } + + // Bounds check + if (timeSample >= directADCGeneratedSamples) { + timeSample = directADCGeneratedSamples - 1; + } + + // Handle ring buffer wrap + size_t oldestValid = 0; + if (directADCGeneratedSamples > DIRECT_ADC_BUFFER_SIZE) { + oldestValid = directADCGeneratedSamples - DIRECT_ADC_BUFFER_SIZE; + } + if (timeSample < oldestValid) { + timeSample = oldestValid; + } + + return directADCBuffer[timeSample % DIRECT_ADC_BUFFER_SIZE]; +} + +#endif //defined(_MSC_VER) || defined(__MINGW64__) +#endif // WIN32 diff --git a/src/hardware/mic_input_win32.h b/src/hardware/mic_input_win32.h new file mode 100644 index 00000000000..aadc4117c1a --- /dev/null +++ b/src/hardware/mic_input_win32.h @@ -0,0 +1,178 @@ +/* + * Copyright (C) 2024 DOSBox-X Team + * + * SoundBlaster Microphone Input Support - Windows WASAPI Implementation + * + * This module provides real microphone input capture for SoundBlaster + * recording emulation using Windows Audio Session API (WASAPI). + */ + +#ifndef DOSBOX_MIC_INPUT_WIN32_H +#define DOSBOX_MIC_INPUT_WIN32_H + +#ifdef WIN32 +#if !defined(HX_DOS) + +// Prevent Windows min/max macros from conflicting with std::min/std::max +#ifndef NOMINMAX +#define NOMINMAX +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +// Forward declarations +class MicrophoneInput; + +// Microphone input states +enum MicInputState { + MIC_STATE_CLOSED = 0, + MIC_STATE_OPEN, + MIC_STATE_CAPTURING, + MIC_STATE_ERROR +}; + +// Audio format for captured data +struct MicAudioFormat { + uint32_t sampleRate; + uint16_t bitsPerSample; + uint16_t channels; +}; + +// Circular buffer for audio samples +class MicCircularBuffer { +public: + MicCircularBuffer(size_t capacity = 262144); // 256KB for ~340ms at 48kHz + ~MicCircularBuffer(); + + // Write samples to buffer (producer - capture thread) + size_t Write(const uint8_t* data, size_t bytes); + + // Read samples from buffer (consumer - emulation thread) + size_t Read(uint8_t* data, size_t bytes); + + // Get available bytes to read + size_t Available() const; + + // Clear buffer + void Clear(); + +private: + std::vector buffer_; + size_t readPos_; + size_t writePos_; + size_t count_; + mutable std::mutex mutex_; +}; + +// Main microphone input class using WASAPI +class MicrophoneInput { +public: + MicrophoneInput(); + ~MicrophoneInput(); + + // Initialization + bool Initialize(); + void Shutdown(); + bool GetPreferHFP(); + + // Device enumeration + std::vector GetDeviceList(); + bool SelectDevice(int deviceIndex); // -1 for default + std::wstring GetCurrentDeviceName() const; + + // Capture control + bool StartCapture(); + void StopCapture(); + bool IsCapturing() const { return state_ == MIC_STATE_CAPTURING; } + + // Audio retrieval - called by emulation + // Retrieves audio in the format requested by the DOS program + size_t GetSamples(uint8_t* buffer, size_t requestedBytes, + uint32_t targetSampleRate, bool stereo, bool signed16bit); + + // Get native capture format + MicAudioFormat GetCaptureFormat() const { return captureFormat_; } + + // Volume control (0.0 to 1.0) + void SetInputGain(float gain); + float GetInputGain() const { return inputGain_; } + + // State + MicInputState GetState() const { return state_; } + const char* GetLastError() const { return lastError_; } + +private: + // WASAPI interfaces + IMMDeviceEnumerator* deviceEnumerator_; + IMMDevice* device_; + IAudioClient* audioClient_; + IAudioCaptureClient* captureClient_; + + // Capture state + MicInputState state_; + MicAudioFormat captureFormat_; + WAVEFORMATEX* mixFormat_; + + // Capture thread + HANDLE captureThread_; + HANDLE stopEvent_; + bool threadRunning_; + + // Audio buffer + MicCircularBuffer audioBuffer_; + + // Resampling state + std::vector resampleBuffer_; + double resamplePos_; + float lastSampleL_; + float lastSampleR_; + + // Settings + float inputGain_; + int selectedDeviceIndex_; + + // Error handling + char lastError_[256]; + void SetError(const char* format, ...); + + // Internal methods + bool InitializeDevice(); + void ReleaseDevice(); + static DWORD WINAPI CaptureThreadProc(LPVOID param); + void CaptureLoop(); + + // Sample rate conversion + size_t ResampleAndConvert(const float* input, size_t inputFrames, + uint8_t* output, size_t maxOutputBytes, + uint32_t targetRate, bool stereo, bool signed16bit); +}; + +// Global microphone input instance +extern MicrophoneInput* g_MicrophoneInput; + +// Initialization functions called from DOSBox-X startup +bool MIC_Initialize(); +void MIC_Shutdown(); + +// Check if microphone input is available and enabled +bool MIC_IsAvailable(); + +// Generate microphone input samples for SoundBlaster DMA +// This replaces gen_input_silence/hiss/tone when microphone source is selected +void MIC_GenerateInput(uint8_t* buffer, size_t bytes, + uint32_t sampleRate, bool stereo, bool signed16bit); + +// Get a single sample for Direct ADC mode (DSP command 0x20) +// Used by Creative Parrot and other programs that poll for samples +uint8_t MIC_GetDirectADCSample(); + +#endif // !defined(HX_DOS) +#endif // WIN32 +#endif // DOSBOX_MIC_INPUT_WIN32_H diff --git a/src/hardware/mixer.cpp b/src/hardware/mixer.cpp index 7705bd17670..353732bfc2d 100644 --- a/src/hardware/mixer.cpp +++ b/src/hardware/mixer.cpp @@ -85,113 +85,11 @@ static INLINE int16_t MIXER_CLIP(Bits SAMP) { mixer_t mixer; uint32_t Mixer_MIXQ(void) { - return ((uint32_t)mixer.freq) | - ((uint32_t)2u/*channels*/ << (uint32_t)20u) | - (mixer.swapstereo ? ((uint32_t)1u << (uint32_t)29u) : 0u) | - (mixer.mute ? ((uint32_t)1u << (uint32_t)30u) : 0u) | - (mixer.nosound ? 0u : ((uint32_t)1u << (uint32_t)31u)); -} - -PhysPt mixer_capture_write = 0; -PhysPt mixer_capture_write_begin = 0; -PhysPt mixer_capture_write_end = 0; -uint32_t mixer_control = 0; - -// mixer capture source bits [23:16] -enum { - MIXER_SRC_MIXDOWN=0 -}; - -unsigned int Mixer_MIXC_Source(void) { - return (unsigned int)((mixer_control >> 16ul) & 0xFFul); -} - -bool Mixer_MIXC_Active(void) { - return ((mixer_control & 3u) == 3u)/*capture interface enable|write to memory*/; -} - -bool Mixer_MIXC_Error(void) { - return ((mixer_control & 8u) == 8u); -} - -bool Mixer_MIXC_ShouldLoop(void) { - return ((mixer_control & 4u) == 4u); -} - -void Mixer_MIXC_Stop(void) { - mixer_control &= ~1u; // clear enable -} - -void Mixer_MIXC_LoopAround(void) { - mixer_capture_write = mixer_capture_write_begin; -} - -// NTS: Check AFTER writing sample -bool Mixer_MIXC_AtEnd(void) { - return (mixer_capture_write >= mixer_capture_write_end); -} - -void Mixer_MIXC_MarkError(void) { - mixer_control &= ~1u; // clear enable - mixer_control |= 8u; // set error -} - -PhysPt Mixer_MIXWritePos(void) { - return mixer_capture_write; -} - -void Mixer_MIXWritePos_Write(PhysPt np) { - if (!Mixer_MIXC_Active()) - mixer_capture_write = np; -} - -void Mixer_MIXWriteBegin_Write(PhysPt np) { - if (!Mixer_MIXC_Active()) - mixer_capture_write_begin = np; -} - -void Mixer_MIXWriteEnd_Write(PhysPt np) { - if (!Mixer_MIXC_Active()) - mixer_capture_write_end = np; -} - -void Mixer_MIXC_Validate(void) { - if (Mixer_MIXC_Active()) { - // NTS: phys_writew() will cause a segfault if the address is beyond the end of memory, - // because it computes MemBase+addr - PhysPt MemMax = (PhysPt)MEM_TotalPages() * (PhysPt)4096ul; - - if (Mixer_MIXC_Error() || - Mixer_MIXC_Source() != 0x00 || - mixer_capture_write == 0 || mixer_capture_write_begin == 0 || mixer_capture_write_end == 0 || - mixer_capture_write < mixer_capture_write_begin || - mixer_capture_write > mixer_capture_write_end || - mixer_capture_write_begin > mixer_capture_write_end || - mixer_capture_write >= MemMax || - mixer_capture_write_end >= MemMax || - mixer_capture_write_begin >= MemMax) - Mixer_MIXC_MarkError(); - } -} - -uint32_t Mixer_MIXC(void) { - return mixer_control; -} - -void Mixer_MIXC_Write(uint32_t v) { - /* bit [0:0] = enable capture interface - * bit [1:1] = enable writing to memory - * bit [2:2] = enable loop around, when write == write_end, set write == write_begin - * bit [3:3] = 1=error condition 0=no error - * bit [23:16] = source selection (see list) */ - if (mixer_control != v) { - mixer_control = (v & 0x00FF00FFUL); - Mixer_MIXC_Validate(); - } -} - -bool Mixer_SampleAccurate() { - return mixer.sampleaccurate; + return ((uint32_t)mixer.freq) | + ((uint32_t)2u/*channels*/ << (uint32_t)20u) | + (mixer.swapstereo ? ((uint32_t)1u << (uint32_t)29u) : 0u) | + (mixer.mute ? ((uint32_t)1u << (uint32_t)30u) : 0u) | + (mixer.nosound ? 0u : ((uint32_t)1u << (uint32_t)31u)); } uint8_t MixTemp[MIXER_BUFSIZE]; @@ -788,35 +686,6 @@ static void MIXER_MixData(Bitu fracs/*render up to*/) { // CAPTURE_AddWave( mixer.freq, added, (int16_t*)convert ); // } - if (Mixer_MIXC_Active() && prev_rendered < whole) { - Bitu readpos = mixer.work_in + prev_rendered; - Bitu added = whole - prev_rendered; - Bitu cando = (mixer_capture_write_end - mixer_capture_write) / 2/*bytes/sample*/ / 2/*channels*/; - if (cando > added) cando = added; - - if (cando == 0 && !Mixer_MIXC_AtEnd()) { - Mixer_MIXC_MarkError(); - } - else if (cando != 0) { - for (Bitu i=0;i < cando;i++) { - phys_writew(mixer_capture_write,(uint16_t)MIXER_CLIP(((int64_t)mixer.work[readpos][0]) >> (MIXER_VOLSHIFT))); - mixer_capture_write += 2; - - phys_writew(mixer_capture_write,(uint16_t)MIXER_CLIP(((int64_t)mixer.work[readpos][1]) >> (MIXER_VOLSHIFT))); - mixer_capture_write += 2; - - readpos++; - } - - if (Mixer_MIXC_AtEnd()) { - if (Mixer_MIXC_ShouldLoop()) - Mixer_MIXC_LoopAround(); - else - Mixer_MIXC_Stop(); - } - } - } - mixer.samples_rendered_ms.w = whole; mixer.samples_rendered_ms.fd = frac; mixer_sample_counter += mixer.samples_rendered_ms.w - prev_rendered; diff --git a/src/hardware/mpu401.cpp b/src/hardware/mpu401.cpp index 5cf2fcc2da1..e301aca4658 100644 --- a/src/hardware/mpu401.cpp +++ b/src/hardware/mpu401.cpp @@ -644,7 +644,6 @@ static void MPU401_Reset(void) { mpu.clock.clock_to_host=false; mpu.clock.cth_rate=60; mpu.clock.cth_counter=0; - ClrQueue(); mpu.state.req_mask=0; mpu.condbuf.counter=0; mpu.clock.cth_savecount=0; diff --git a/src/hardware/opl.cpp b/src/hardware/opl.cpp index 689b024f2b3..80c70ef7174 100644 --- a/src/hardware/opl.cpp +++ b/src/hardware/opl.cpp @@ -24,6 +24,7 @@ * Ken Silverman's official web site: "http://www.advsys.net/ken" */ +/* WARNING: This file is not compiled directly, it is #included from other *.cpp files */ #include #include // rand() @@ -99,7 +100,7 @@ static const uint8_t regbase2op[22*2] = { // start of the waveform -static uint32_t waveform[8] = { +static const uint32_t waveform[8] = { WAVEPREC, WAVEPREC>>1, WAVEPREC, @@ -111,7 +112,7 @@ static uint32_t waveform[8] = { }; // length of the waveform as mask -static uint32_t wavemask[8] = { +static const uint32_t wavemask[8] = { WAVEPREC-1, WAVEPREC-1, (WAVEPREC>>1)-1, @@ -123,7 +124,7 @@ static uint32_t wavemask[8] = { }; // where the first entry resides -static uint32_t wavestart[8] = { +static const uint32_t wavestart[8] = { 0, WAVEPREC>>1, 0, @@ -135,13 +136,13 @@ static uint32_t wavestart[8] = { }; // envelope generator function constants -static fltype attackconst[4] = { +static const fltype attackconst[4] = { (fltype)(1/2.82624), (fltype)(1/2.25280), (fltype)(1/1.88416), (fltype)(1/1.59744) }; -static fltype decrelconst[4] = { +static const fltype decrelconst[4] = { (fltype)(1/39.28064), (fltype)(1/31.41608), (fltype)(1/26.17344), diff --git a/src/hardware/parport/parport.cpp b/src/hardware/parport/parport.cpp index 16c12cfc09d..9b60fe03616 100644 --- a/src/hardware/parport/parport.cpp +++ b/src/hardware/parport/parport.cpp @@ -43,6 +43,7 @@ uint16_t parallel_baseaddr[9] = {0x378,0x278,0x3bc,0,0,0,0,0,0}; +#if !defined(OSFREE) bool device_LPT::Read(uint8_t * data,uint16_t * size) { (void)data;//UNUSED *size=0; @@ -92,6 +93,7 @@ device_LPT::~device_LPT() { // LOG_MSG("~device_LPT\n"); //LOG_MSG("del"); } +#endif static void Parallel_EventHandler(Bitu val) { Bitu serclassid=val&0xf; @@ -247,19 +249,23 @@ CParallel::CParallel(CommandLine* cmd, Bitu portnr, uint8_t initirq) { } void CParallel::registerDOSDevice() { +#if !defined(OSFREE) if (mydosdevice == NULL) { LOG(LOG_MISC,LOG_DEBUG)("LPT%d: Registering DOS device",(int)port_nr+1); mydosdevice = new device_LPT((uint8_t)port_nr, this); DOS_AddDevice(mydosdevice); } +#endif } void CParallel::unregisterDOSDevice() { +#if !defined(OSFREE) if (mydosdevice != NULL) { LOG(LOG_MISC,LOG_DEBUG)("LPT%d: Unregistering DOS device",(int)port_nr+1); DOS_DelDevice(mydosdevice); // deletes the pointer for us! mydosdevice=NULL; } +#endif } CParallel::~CParallel(void) { diff --git a/src/hardware/parport/printer.cpp b/src/hardware/parport/printer.cpp index 53bb8b80f6d..9853fca3240 100644 --- a/src/hardware/parport/printer.cpp +++ b/src/hardware/parport/printer.cpp @@ -341,12 +341,12 @@ void CPrinter::updateFont() struct stat wstat; if (stat(fontName.c_str(),&wstat)) { std::string configfont, resfont, name = fontName; - Cross::GetPlatformConfigDir(configfont); + configfont = Cross::GetPlatformConfigDir(); configfont += fontName; fontName = configfont; if (stat(fontName.c_str(),&wstat)) { fontName = name; - Cross::GetPlatformResDir(resfont); + resfont = Cross::GetPlatformResDir(); resfont += fontName; fontName = resfont; if (stat(fontName.c_str(),&wstat) && exepath.size()) fontName = exepath + CROSS_FILESPLIT + name; @@ -360,12 +360,12 @@ void CPrinter::updateFont() fontName = basedir + "SarasaGothicFixed.ttf"; if (stat(fontName.c_str(),&wstat)) { std::string configfont, resfont, name = fontName; - Cross::GetPlatformConfigDir(configfont); + configfont = Cross::GetPlatformConfigDir(); configfont += fontName; fontName = configfont; if (stat(fontName.c_str(),&wstat)) { fontName = name; - Cross::GetPlatformResDir(resfont); + resfont = Cross::GetPlatformResDir(); resfont += fontName; fontName = resfont; if (stat(fontName.c_str(),&wstat) && exepath.size()) fontName = exepath + CROSS_FILESPLIT + name; @@ -373,12 +373,12 @@ void CPrinter::updateFont() fontName = "SarasaGothicFixed.ttf"; if (stat(fontName.c_str(),&wstat)) { std::string configfont, resfont, name = fontName; - Cross::GetPlatformConfigDir(configfont); + configfont = Cross::GetPlatformConfigDir(); configfont += fontName; fontName = configfont; if (stat(fontName.c_str(),&wstat)) { fontName = name; - Cross::GetPlatformResDir(resfont); + resfont = Cross::GetPlatformResDir(); resfont += fontName; fontName = resfont; if (stat(fontName.c_str(),&wstat) && exepath.size()) fontName = exepath + CROSS_FILESPLIT + name; @@ -1641,7 +1641,7 @@ void CPrinter::printChar(uint8_t ch, int box) { curX = leftMargin; curY += lineSpacing; - if (curY > bottomMargin) newPage(true, false); + if (curY > bottomMargin - 0.0001) newPage(true, false); } } @@ -1987,7 +1987,7 @@ void CPrinter::doAction(const char *fname) { void CPrinter::outputPage() { - char fname[200]; + char fname[512]; if (strcasecmp(output, "printer") == 0) { @@ -2000,21 +2000,30 @@ void CPrinter::outputPage() uint16_t physW = GetDeviceCaps(printerDC, PHYSICALWIDTH); uint16_t physH = GetDeviceCaps(printerDC, PHYSICALHEIGHT); - double scaleW, scaleH; + int printW = GetDeviceCaps(printerDC, HORZRES); + int printH = GetDeviceCaps(printerDC, VERTRES); + + int offsetX = GetDeviceCaps(printerDC, PHYSICALOFFSETX); + int offsetY = GetDeviceCaps(printerDC, PHYSICALOFFSETY); - if (page->w > physW) - scaleW = (double)page->w / (double)physW; - else - scaleW = (double)physW / (double)page->w; - - if (page->h > physH) - scaleH = (double)page->h / (double)physH; - else - scaleH = (double)physH / (double)page->h; + int dpiX = GetDeviceCaps(printerDC, LOGPIXELSX); + int dpiY = GetDeviceCaps(printerDC, LOGPIXELSY); - HDC memHDC = CreateCompatibleDC(printerDC); - HBITMAP bitmap = CreateCompatibleBitmap(memHDC, page->w, page->h); - SelectObject(memHDC, bitmap); + int minMarginX = (int)(dpiX * 0.118); + int minMarginY = (int)(dpiY * 0.118); + + if(offsetX == 0 && offsetY == 0) { + int marginX = (offsetX > minMarginX) ? offsetX : minMarginX; + int marginY = (offsetY > minMarginY) ? offsetY : minMarginY; + offsetX += marginX; + offsetY += marginY; + printW -= marginX * 2; + printH -= marginY * 2; + } + + double scaleW, scaleH; + scaleW = (double)printW / (double)page->w; + scaleH = (double)printH / (double)page->h; // Start new printer job? if (outputHandle == NULL) @@ -2029,8 +2038,6 @@ void CPrinter::outputPage() if (StartDoc(printerDC, &docinfo)<=0) { LOG_MSG("PRINTER: Cannot start print."); - DeleteObject(bitmap); - DeleteDC(memHDC); return; } multiPageCounter = 1; @@ -2039,30 +2046,89 @@ void CPrinter::outputPage() if (StartPage(printerDC) < 0) { LOG_MSG("PRINTER: Cannot start page."); - DeleteObject(bitmap); - DeleteDC(memHDC); return; } - SDL_LockSurface(page); - SDL_Palette* sdlpal = page->format->palette; + // Create a memory DC for the printer bitmap + HDC memHDC = CreateCompatibleDC(printerDC); + + // Set up a BITMAPINFO for an 8-bit DIBSection (top-down) + BITMAPINFO bmi{}; + bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bmi.bmiHeader.biWidth = page->w; + bmi.bmiHeader.biHeight = -((LONG)page->h); + bmi.bmiHeader.biPlanes = 1; + bmi.bmiHeader.biBitCount = 32; + bmi.bmiHeader.biCompression = BI_RGB; + + void* pBits = nullptr; + HBITMAP bitmap = CreateDIBSection(printerDC, &bmi, DIB_RGB_COLORS, &pBits, NULL, 0); + HBITMAP oldBitmap = (HBITMAP)SelectObject(memHDC, bitmap); + + if(!bitmap || !pBits) { + LOG_MSG("PRINTER: CreateDIBSection failed"); + DeleteDC(memHDC); + EndPage(printerDC); + return; + } - for (uint16_t y = 0; y < page->h; y++) - { - for (uint16_t x = 0; x < page->w; x++) - { - uint8_t pixel = *((uint8_t*)page->pixels + x + (y*page->pitch)); - uint32_t color = 0; - color |= sdlpal->colors[pixel].r; - color |= ((uint32_t)sdlpal->colors[pixel].g) << 8; - color |= ((uint32_t)sdlpal->colors[pixel].b) << 16; - SetPixel(memHDC, x, y, color); - } - } + if(!oldBitmap) { + LOG_MSG("PRINTER: SelectObject failed"); + DeleteObject(bitmap); + DeleteDC(memHDC); + EndPage(printerDC); + return; + } - SDL_UnlockSurface(page); - - StretchBlt(printerDC, 0, 0, physW, physH, memHDC, 0, 0, page->w, page->h, SRCCOPY); + if(SDL_LockSurface(page) != 0) { + LOG_MSG("PRINTER: SDL_LockSurface failed"); + SelectObject(memHDC, oldBitmap); + DeleteObject(bitmap); + DeleteDC(memHDC); + EndPage(printerDC); + return; + } + + for(int y = 0; y < page->h; y++) { + uint8_t* src = (uint8_t*)page->pixels + y * page->pitch; + uint32_t* dst = (uint32_t*)pBits + y * page->w; + + for(int x = 0; x < page->w; x++) { + + uint8_t r, g, b; + + if(page->format->BytesPerPixel == 1) { + uint8_t idx = src[x]; + + if(page->format->palette) { + SDL_Color c = page->format->palette->colors[idx]; + r = c.r; g = c.g; b = c.b; + } + else { + r = g = b = idx; + } + } + else { + uint32_t pixel; + memcpy(&pixel, src + x * page->format->BytesPerPixel, + page->format->BytesPerPixel); + SDL_GetRGB(pixel, page->format, &r, &g, &b); + } + + dst[x] = (b) | (g << 8) | (r << 16); + } + } + + SDL_UnlockSurface(page); + + double scale = (scaleW < scaleH) ? scaleW : scaleH; + int drawW = (int)(page->w * scale); + int drawH = (int)(page->h * scale); + int drawX = offsetX + (printW - drawW) / 2; + int drawY = offsetY + (printH - drawH) / 2; + + // Stretch and copy the bitmap from the memory DC to the printer DC, scaling it to the printer's physical dimensions + StretchBlt(printerDC, drawX, drawY, drawW, drawH, memHDC, 0, 0, page->w, page->h, SRCCOPY); EndPage(printerDC); @@ -2076,7 +2142,8 @@ void CPrinter::outputPage() EndDoc(printerDC); outputHandle = NULL; } - DeleteObject(bitmap); + SelectObject(memHDC, oldBitmap); + DeleteObject(bitmap); DeleteDC(memHDC); #else LOG_MSG("PRINTER: Direct printing not supported under this OS"); @@ -2090,8 +2157,6 @@ void CPrinter::outputPage() png_structp png_ptr; png_infop info_ptr; - png_bytep* row_pointers; - png_color palette[256]; Bitu i; /* Open the actual file */ @@ -2104,12 +2169,16 @@ void CPrinter::outputPage() /* First try to allocate the png structures */ png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) return; + if(!png_ptr) { + fclose(fp); + return; + } info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_write_struct(&png_ptr, (png_infopp)NULL); - return; + fclose(fp); + return; } /* Finalize the initing of png library */ @@ -2124,39 +2193,93 @@ void CPrinter::outputPage() png_set_compression_buffer_size(png_ptr, 8192); png_set_IHDR(png_ptr, info_ptr, page->w, page->h, - 8, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE, + 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); - for (i = 0; i < 256; i++) - { - palette[i].red = page->format->palette->colors[i].r; - palette[i].green = page->format->palette->colors[i].g; - palette[i].blue = page->format->palette->colors[i].b; - } - png_set_PLTE(png_ptr, info_ptr, palette,256); - SDL_LockSurface(page); + if(SDL_LockSurface(page) != 0) { + LOG_MSG("PRINTER: SDL_LockSurface failed"); + png_destroy_write_struct(&png_ptr, &info_ptr); + fclose(fp); + return; + } + + const int width = page->w; + const int height = page->h; // Allocate an array of scanline pointers - row_pointers = (png_bytep*)malloc(page->h * sizeof(png_bytep)); - for (i = 0; i < (Bitu)page->h; i++) - row_pointers[i] = ((uint8_t*)page->pixels + (i * page->pitch)); + std::vector image(width* height * 3); + std::vector row_pointers(height); + + for (i = 0; i < height; i++) + row_pointers[i] = image.data() + i * width * 3; + + for(int y = 0; y < height; y++) { + uint8_t* src = (uint8_t*)page->pixels + y * page->pitch; + uint8_t* dst = image.data() + y * width * 3; + + for(int x = 0; x < width; x++) { + + uint8_t r = 0, g = 0, b = 0; + + switch(page->format->BytesPerPixel) { + + case 1: { + uint8_t idx = src[x]; + if(page->format->palette) { + SDL_Color c = page->format->palette->colors[idx]; + r = c.r; g = c.g; b = c.b; + } + else { + r = g = b = idx; + } + break; + } + + case 2: { + uint16_t pixel = *(uint16_t*)(src + x * 2); + SDL_GetRGB(pixel, page->format, &r, &g, &b); + break; + } - // tell the png library what to encode. - png_set_rows(png_ptr, info_ptr, row_pointers); + case 3: { + uint8_t* p = src + x * 3; +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + uint32_t pixel = (p[0] << 16) | (p[1] << 8) | p[2]; +#else + uint32_t pixel = p[0] | (p[1] << 8) | (p[2] << 16); +#endif + SDL_GetRGB(pixel, page->format, &r, &g, &b); + break; + } + + case 4: { + uint32_t pixel = *(uint32_t*)(src + x * 4); + SDL_GetRGB(pixel, page->format, &r, &g, &b); + break; + } + } + + dst[x * 3 + 0] = r; + dst[x * 3 + 1] = g; + dst[x * 3 + 2] = b; + } + } + + + SDL_UnlockSurface(page); + + // tell the png library what to encode. + png_set_rows(png_ptr, info_ptr, row_pointers.data()); // Write image to file png_write_png(png_ptr, info_ptr, 0, NULL); - SDL_UnlockSurface(page); - /*close file*/ fclose(fp); /*Destroy PNG structs*/ png_destroy_write_struct(&png_ptr, &info_ptr); - /*clean up dynamically allocated RAM.*/ - free(row_pointers); doAction(fname); } #endif diff --git a/src/hardware/pc98_fm.cpp b/src/hardware/pc98_fm.cpp index 2324c147037..fe2628e917e 100644 --- a/src/hardware/pc98_fm.cpp +++ b/src/hardware/pc98_fm.cpp @@ -165,7 +165,9 @@ void pic_resetirq(REG8 irq) { #include "sound.h" #include "fmboard.h" +#if !defined(OSFREE) static void avsdrv_check_size(SINT32 size); +#endif // wrapper for fmtimer events void fmport_a(NEVENTITEM item); @@ -225,9 +227,13 @@ static void pc98_mix_CallBack(Bitu len) { adpcm_getpcm(&adpcm3, (SINT32*)MixTemp, s); #endif // defined(SUPPORT_PX) +#if !defined(OSFREE) SINT32 start = pcm86.realbuf; +#endif pcm86gen_getpcm(NULL, (SINT32*)MixTemp, s); +#if !defined(OSFREE) avsdrv_check_size(start - pcm86.realbuf); +#endif pc98_mixer->AddSamples_s32(s, (int32_t*)MixTemp); } @@ -554,6 +560,7 @@ extern "C" void pcm86io_setvol(unsigned char val); extern "C" void pcm86io_outpcm(unsigned char val); extern "C" void pcm86io_setpcm(unsigned char val); +#if !defined(OSFREE) #define AVSDRV_PCB_SIZE 0x10 #define AVSDRV_PCB_MASK 0x0f #define AVSDRV_VOLUME_SIZE 4 @@ -568,7 +575,7 @@ struct AVSDRV_PCB { uint8_t status; }; static AVSDRV_PCB pcb_data[AVSDRV_PCB_SIZE]; -static uint16_t avsdrv_ems_pageframe; +static uint16_t avsdrv_ems_pageframe = 0xE000; static uint16_t pcb_write, pcb_read; static uint8_t avsdrv_pcm; static uint8_t avsdrv_freq; @@ -791,7 +798,7 @@ static void avsdrv_check_size(SINT32 size) pcb_data[pcb_read].use_size += size; // POLICENAUTS - // Dealing with the interruption of explosion sounds, etc. + // Dealing with the interruption of explosion sounds, etc. if(pcb_data[pcb_read].use_size > (pcb_data[pcb_read].pos - pcb_data[pcb_read].data_off) / 2) { uint8_t data[2]; uint16_t step = (avsdrv_pcm & 0x80) ? 2 : 1; @@ -855,4 +862,5 @@ static void avsdrv_check_size(SINT32 size) } } } +#endif diff --git a/src/hardware/pci_bus.cpp b/src/hardware/pci_bus.cpp index 8265a2fb162..90416601f17 100644 --- a/src/hardware/pci_bus.cpp +++ b/src/hardware/pci_bus.cpp @@ -125,6 +125,37 @@ PCI_Device::PCI_Device(uint16_t vendor, uint16_t device) { host_writew(config_writemask+0x04,0x0403); /* allow changing mem/io enable and interrupt disable */ } +class PCI_DOSBoxIGVGADevice:public PCI_Device { +private: + static const uint16_t vendor=0xD05B; // DOSBox + static const uint16_t device=0x6845; // VGA device +public: + PCI_DOSBoxIGVGADevice():PCI_Device(vendor,device) { + Bitu vmmask = bitop::rounduppow2mask(vga.mem.memsize - 1u); // vga.mem.memmask is not yet initialized here + + config[0x08] = 0x00; // revision ID + + config[0x09] = 0x00; // interface + config[0x0a] = 0x00; // subclass type (vga compatible) + config[0x0b] = 0x03; // class type (display controller) + config[0x0c] = 0x00; // cache line size + config[0x0d] = 0x00; // latency timer + config[0x0e] = 0x00; // header type (other) + + config[0x3c] = 0xff; // no irq + + // reset + config[0x04] = 0x23; // command register (vga palette snoop, ports enabled, memory space enabled) + config[0x05] = 0x00; + config[0x06] = 0x80; // status register (medium timing, fast back-to-back) + config[0x07] = 0x02; + + host_writew(config_writemask+0x04,0x0023); /* allow changing mem/io enable and VGA palette snoop */ + host_writed(config_writemask+0x10,(uint32_t)(~vmmask)); /* BAR0: memory resource aligned to vmemsize */ + host_writed(config+0x10,(((uint32_t)S3_LFB_BASE)&0xfffffff0) | 0x8); + } +}; + class PCI_VGADevice:public PCI_Device { private: static const uint16_t vendor=0x5333; // S3 @@ -346,8 +377,9 @@ static void InitializePCI(void) { PCI_ReadHandler[0].Install(0xcf8,read_pci_addr,IO_MD); // install PCI-register read/write handlers for (Bitu ct=0;ct<4;ct++) { - PCI_WriteHandler[1+ct].Install(0xcfc+ct,write_pci,IO_MB); - PCI_ReadHandler[1+ct].Install(0xcfc+ct,read_pci,IO_MB); + Bitu msk = IO_MB | ((ct & 1) ? 0 : IO_MW) | ((ct & 3) ? 0 : IO_MD);; + PCI_WriteHandler[1+ct].Install(0xcfc+ct,write_pci,msk); + PCI_ReadHandler[1+ct].Install(0xcfc+ct,read_pci,msk); } callback_pci.Install(&PCI_PM_Handler,CB_IRETD,"PCI PM"); @@ -437,9 +469,28 @@ static void Deinitialize(void) { static PCI_Device *S3_PCI=NULL; static PCI_Device *SST_PCI=NULL; +static PCI_Device *DOSBoxIG_PCI=NULL; extern bool enable_pci_vga; +void PCI_AddSVGADOSBoxIG_Device(void) { + if (!pcibus_enable || !enable_pci_vga) return; + + if (DOSBoxIG_PCI == NULL) { + if ((DOSBoxIG_PCI=new PCI_DOSBoxIGVGADevice()) == NULL) + return; + + RegisterPCIDevice(DOSBoxIG_PCI); + } +} + +void PCI_RemoveSVGADOSBoxIG_Device(void) { + if (DOSBoxIG_PCI != NULL) { + UnregisterPCIDevice(DOSBoxIG_PCI); + DOSBoxIG_PCI = NULL; + } +} + void PCI_AddSVGAS3_Device(void) { if (!pcibus_enable || !enable_pci_vga) return; diff --git a/src/hardware/pic.cpp b/src/hardware/pic.cpp index ca95139c796..1f1bef540e0 100644 --- a/src/hardware/pic.cpp +++ b/src/hardware/pic.cpp @@ -49,6 +49,8 @@ struct PIC_Controller { bool request_issr; uint8_t vector_base; + uint8_t input; // input signal (directly set by raise/lower irq) used to filter for edge detect + uint8_t edge; // which signals are to be filtered for edge trigger uint8_t irr; // request register uint8_t imr; // mask register uint8_t imrr; // mask register reversed (makes bit tests simpler) @@ -92,6 +94,7 @@ struct PIC_Controller { void lower_irq(uint8_t val){ uint8_t bit = 1 << ( val); + input&=~bit; if(irr & bit) { //value will change (as it is currently active) irr&=~bit; if((bit&imrr)&isrr) { //not masked and not in service @@ -137,6 +140,11 @@ void PIC_Controller::check_for_irq(){ void PIC_Controller::raise_irq(uint8_t val){ uint8_t bit = 1 << (val); + + // edge detect: only if the signal goes from low to high + if (bit&edge&input) return; + + input|=bit; if((irr & bit)==0) { //value changed (as it is currently not active) irr|=bit; if((bit&imrr)&isrr) { //not masked and not in service @@ -371,6 +379,25 @@ static void pc_xt_nmi_write(Bitu port,Bitu val,Bitu iolen) { CPU_Check_NMI(); } +void PIC_EdgeTrigger(Bitu irq,bool set) { + if (IS_PC98_ARCH) { + if (irq == 7) return; + } + else if (enable_slave_pic) { /* PC/AT emulation with slave PIC cascade to master */ + if (irq == 2) irq = 9; + } + else { /* PC/XT emulation with only master PIC */ + if (irq == 9) irq = 2; + if (irq >= 8) return; + } + + Bitu t = irq>7 ? (irq - 8): irq; + PIC_Controller * pic=&pics[irq>7 ? 1 : 0]; + + if (set) pic->edge |= 1u << (unsigned char)t; + else pic->edge &= ~(1u << (unsigned char)t); +} + /* FIXME: This should be called something else that's true to the ISA bus, like PIC_PulseIRQ, not Activate IRQ. * ISA interrupts are edge triggered, not level triggered. */ void PIC_ActivateIRQ(Bitu irq) { @@ -938,6 +965,8 @@ void PIC_Reset(Section *sec) { pics[i].irr = pics[i].isr = pics[i].imrr = 0; pics[i].isrr = pics[i].imr = 0xff; pics[i].isr_ignore = 0x00; + pics[i].edge = 0x00; + pics[i].input = 0x00; pics[i].active_irq = 8; } diff --git a/src/hardware/sblaster.cpp b/src/hardware/sblaster.cpp index f039ecc3717..eee50836297 100644 --- a/src/hardware/sblaster.cpp +++ b/src/hardware/sblaster.cpp @@ -40,6 +40,27 @@ * FIFO anyway, and which cards have it? Would it also be possible to eliminate * the need for sb.dma.min? */ +/* Notes: + * + * - Windows 95, when using the Creative SB16 drivers, seems to always use a 62ms + * DSP block size, DSP and DMA auto-init, within a 124ms buffer + * (DSP block size 1376 / DMA base count 2751 / sample rate 22050 for example). + * + * The calculation seems to be Nhalf = ((sample_rate / 16) & (~3)) * bytes_per_sample + * and N = Nhalf * 2. It appears to round down to a multiple of 4 to correctly handle + * up to 16-bit stereo, of course. + * + * What I'm trying to investigate are the cases where something, like CD-ROM IDE + * access, throws that off and causes audible popping and crackling. + * + * - Windows 3.1 SB16: Holy Hell, do NOT attempt to play audio at 48KHz or higher! + * There seems to be a serious bug with the Creative SB16 driver where 48KHz playback + * results in garbled audio and soon a driver crash. 44.1KHz or lower is OK. + * Is this some kind of DMA vs timing bug? It also appears to take whatever sample + * rate is given by the Windows application and give it as-is to the DSP. The breaking + * point seems to be 45,100Hz. + */ + #if defined(_MSC_VER) # pragma warning(disable:4244) /* const fmath::local::uint64_t to double possible loss of data */ # pragma warning(disable:4305) /* truncation from double to float */ @@ -69,8 +90,19 @@ #include "hardopl.h" using namespace std; +#ifdef WIN32 +#include "mic_input_win32.h" +#endif + +#define MAX_CARDS 2 + +#define CARD_INDEX_BIT 28u + +int MPU401_GetIRQ(); void MIDI_RawOutByte(uint8_t data); bool MIDI_Available(void); +bool JOYSTICK_IsEnabled(Bitu which); +Bitu DEBUG_EnableDebugger(void); #define SB_PIC_EVENTS 0 @@ -93,6 +125,17 @@ bool MIDI_Available(void); #define DSP_BUFSIZE 64 #define DSP_DACSIZE 512 +#ifndef max +#define max(a,b) ((a)>(b)?(a):(b)) +#endif +#ifndef min +#define min(a,b) ((a)<(b)?(a):(b)) +#endif + +#define MIN_ADAPTIVE_STEP_SIZE 0 +#define MAX_ADAPTIVE_STEP_SIZE 32767 +#define DC_OFFSET_FADE 254 + //Should be enough for sound generated in millisecond blocks #define SB_SH 14 #define SB_SH_MASK ((1 << SB_SH)-1) @@ -105,551 +148,497 @@ enum SB_IRQS {SB_IRQ_8,SB_IRQ_16,SB_IRQ_MPU}; enum ESS_TYPES {ESS_NONE=0,ESS_688=1,ESS_1688=2}; enum DSP_MODES { - MODE_NONE, - MODE_DAC, - MODE_DMA, - MODE_DMA_PAUSE, - MODE_DMA_MASKED, - MODE_DMA_REQUIRE_IRQ_ACK /* Sound Blaster 16 style require IRQ ack to resume DMA */ + MODE_NONE, + MODE_DAC, + MODE_DMA, + MODE_DMA_PAUSE, + MODE_DMA_MASKED, + MODE_DMA_REQUIRE_IRQ_ACK /* Sound Blaster 16 style require IRQ ack to resume DMA */ }; enum DMA_MODES { - DSP_DMA_NONE, - DSP_DMA_2,DSP_DMA_3,DSP_DMA_4,DSP_DMA_8, - DSP_DMA_16,DSP_DMA_16_ALIASED + DSP_DMA_NONE, + DSP_DMA_2,DSP_DMA_3,DSP_DMA_4,DSP_DMA_8, + DSP_DMA_16,DSP_DMA_16_ALIASED }; enum { - PLAY_MONO,PLAY_STEREO + PLAY_MONO,PLAY_STEREO }; enum { - REC_SILENCE=0, - REC_1KHZ_TONE, - REC_HISS + REC_SILENCE=0, + REC_1KHZ_TONE, + REC_HISS, + REC_MICROPHONE }; -unsigned int sb_recording_source = REC_SILENCE; -bool sb_listen_to_recording_source = false; - -struct SB_INFO { - Bitu freq; - uint8_t timeconst; - Bitu dma_dac_srcrate; - struct { - bool recording; - bool stereo,sign,autoinit; - bool force_autoinit; - DMA_MODES mode_assigned; - DMA_MODES mode; - Bitu rate,mul; - Bitu total,left,min; - uint64_t start; - union { - uint8_t b8[DMA_BUFSIZE]; - int16_t b16[DMA_BUFSIZE]; - } buf; - Bitu bits; - DmaChannel * chan; - Bitu remain_size; - } dma; - bool freq_derived_from_tc; // if set, sb.freq was derived from SB/SBpro time constant - bool def_enable_speaker; // start emulation with SB speaker enabled - bool enable_asp; - bool speaker; - bool midi; - bool vibra; - bool emit_blaster_var; - bool sbpro_stereo_bit_strict_mode; /* if set, stereo bit in mixer can only be set if emulating a Pro. if clear, SB16 can too */ - bool sample_rate_limits; /* real SB hardware has limits on the sample rate */ - bool single_sample_dma; - bool directdac_warn_speaker_off; /* if set, warn if DSP command 0x10 is being used while the speaker is turned off */ - bool dma_dac_mode; /* some very old DOS demos "play" sound by setting the DMA terminal count to 0. - normally that would mean the DMA controller transmitting the same byte at the sample rate, - except that the program creates sound by overwriting that byte periodically. - on actual hardware this happens to work (though with kind of a gritty sound to it), - The DMA emulation here does not handle that well. */ - bool goldplay; - bool goldplay_stereo; - bool write_status_must_return_7f; // WRITE_STATUS (port base+0xC) must return 0x7F or 0xFF if set. Some very early demos rely on it. - bool busy_cycle_always; - bool ess_playback_mode; - bool no_filtering; - bool cms; - uint8_t sc400_cfg; - uint8_t time_constant; - uint8_t sc400_dsp_major,sc400_dsp_minor; - uint8_t sc400_jumper_status_1; - uint8_t sc400_jumper_status_2; - DSP_MODES mode; - SB_TYPES type; - SB_SUBTYPES subtype; - REVEAL_SC_TYPES reveal_sc_type; // Reveal SC400 type - ESS_TYPES ess_type; // ESS chipset emulation, to be set only if type == SBT_PRO2 - bool ess_extended_mode; - int min_dma_user; - int busy_cycle_hz; - int busy_cycle_duty_percent; - int busy_cycle_io_hack; - double busy_cycle_last_check; - double busy_cycle_last_poll; - struct { - bool pending_8bit; - bool pending_16bit; - } irq; - struct { - uint8_t state; - uint8_t last_cmd; - uint8_t cmd; - uint8_t cmd_len; - uint8_t cmd_in_pos; - uint8_t cmd_in[DSP_BUFSIZE]; - struct { - uint8_t lastval; - uint8_t data[DSP_BUFSIZE]; - Bitu pos,used; - } in,out; - uint8_t test_register; - Bitu write_busy; - bool highspeed; - bool require_irq_ack; - bool instant_direct_dac; - bool force_goldplay; - bool midi_rwpoll_mode; // DSP command 0x34/0x35 MIDI Read Poll & Write Poll (0x35 with interrupt) - bool midi_read_interrupt; - bool midi_read_with_timestamps; - bool command_aliases; - unsigned int dsp_write_busy_time; /* when you write to the DSP, how long it signals "busy" */ - } dsp; - struct { - int16_t last; - double dac_t,dac_pt; - } dac; - struct { - uint8_t index; - uint8_t dac[2],fm[2],cda[2],master[2],lin[2]; - uint8_t mic; - bool stereo; - bool enabled; - bool filter_bypass; - bool sbpro_stereo; /* Game or OS is attempting SB Pro type stereo */ - uint8_t unhandled[0x48]; - uint8_t ess_id_str[4]; - uint8_t ess_id_str_pos; - } mixer; - struct { - uint8_t reference; - Bits stepsize; - bool haveref; - } adpcm; - struct { - Bitu base; - Bitu irq; - uint8_t dma8,dma16; - bool sb_io_alias; - } hw; - struct { - uint8_t valadd; - uint8_t valxor; - } e2; - MixerChannel * chan; -}; - -static SB_INFO sb; - static char const * const copyright_string="COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992."; // number of bytes in input for commands (sb/sbpro) static uint8_t const DSP_cmd_len_sb[256] = { - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x00 -// 1,0,0,0, 2,0,2,2, 0,0,0,0, 0,0,0,0, // 0x10 - 1,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x10 Wari hack - 0,0,0,0, 2,0,0,0, 0,0,0,0, 0,0,0,0, // 0x20 - 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, // 0x30 - - 1,2,2,0, 0,0,0,0, 2,0,0,0, 0,0,0,0, // 0x40 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x50 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x60 - 0,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x70 - - 2,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x80 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x90 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xa0 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xb0 - - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xc0 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xd0 - 1,0,1,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, // 0xe0 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 // 0xf0 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x00 + 1,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x10 Wari hack + 0,0,0,0, 2,0,0,0, 0,0,0,0, 0,0,0,0, // 0x20 + 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, // 0x30 + + 1,2,2,0, 0,0,0,0, 2,0,0,0, 0,0,0,0, // 0x40 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x50 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x60 + 0,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x70 + + 2,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x80 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x90 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xa0 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xb0 + + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xc0 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xd0 + 1,0,1,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, // 0xe0 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 // 0xf0 }; // number of bytes in input for commands (sb/sbpro compatible Reveal SC400) static uint8_t const DSP_cmd_len_sc400[256] = { - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x00 -// 1,0,0,0, 2,0,2,2, 0,0,0,0, 0,0,0,0, // 0x10 - 1,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x10 Wari hack - 0,0,0,0, 2,0,0,0, 0,0,0,0, 0,0,0,0, // 0x20 - 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, // 0x30 - - 1,2,2,0, 0,0,0,0, 2,0,0,0, 0,0,0,0, // 0x40 - 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x50 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,2,0, // 0x60 - 0,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x70 - - 2,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x80 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x90 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xa0 - 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3, // 0xb0 - - 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3, // 0xc0 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xd0 - 1,0,1,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, // 0xe0 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 // 0xf0 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x00 + 1,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x10 Wari hack + 0,0,0,0, 2,0,0,0, 0,0,0,0, 0,0,0,0, // 0x20 + 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, // 0x30 + + 1,2,2,0, 0,0,0,0, 2,0,0,0, 0,0,0,0, // 0x40 + 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x50 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,2,0, // 0x60 + 0,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x70 + + 2,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x80 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x90 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xa0 + 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3, // 0xb0 + + 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3, // 0xc0 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xd0 + 1,0,1,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, // 0xe0 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 // 0xf0 }; // number of bytes in input for commands (sbpro2 compatible ESS) static uint8_t const DSP_cmd_len_ess[256] = { - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x00 -// 1,0,0,0, 2,0,2,2, 0,0,0,0, 0,0,0,0, // 0x10 - 1,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x10 Wari hack - 0,0,0,0, 2,0,0,0, 0,0,0,0, 0,0,0,0, // 0x20 - 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, // 0x30 - - 1,2,2,0, 0,0,0,0, 2,0,0,0, 0,0,0,0, // 0x40 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x50 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x60 - 0,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x70 - - 2,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x80 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x90 - 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, // 0xa0 ESS write register commands (0xA0-0xBF). Note this overlap with SB16 is - 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, // 0xb0 why ESS chipsets cannot emulate SB16 playback/record commands. - - 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xc0 ESS additional commands. - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xd0 - 1,0,1,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, // 0xe0 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 // 0xf0 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x00 + 1,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x10 Wari hack + 0,0,0,0, 2,0,0,0, 0,0,0,0, 0,0,0,0, // 0x20 + 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, // 0x30 + + 1,2,2,0, 0,0,0,0, 2,0,0,0, 0,0,0,0, // 0x40 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x50 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x60 + 0,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x70 + + 2,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x80 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x90 + 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, // 0xa0 ESS write register commands (0xA0-0xBF). Note this overlap with SB16 is + 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, // 0xb0 why ESS chipsets cannot emulate SB16 playback/record commands. + + 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xc0 ESS additional commands. + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xd0 + 1,0,1,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, // 0xe0 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 // 0xf0 }; // number of bytes in input for commands (sb16) static uint8_t const DSP_cmd_len_sb16[256] = { - 0,0,0,0, 1,2,0,0, 1,0,0,0, 0,0,2,1, // 0x00 -// 1,0,0,0, 2,0,2,2, 0,0,0,0, 0,0,0,0, // 0x10 - 1,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x10 Wari hack - 0,0,0,0, 2,0,0,0, 0,0,0,0, 0,0,0,0, // 0x20 - 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, // 0x30 - - 1,2,2,0, 0,0,0,0, 2,0,0,0, 0,0,0,0, // 0x40 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x50 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x60 - 0,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x70 - - 2,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x80 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x90 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xa0 - 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3, // 0xb0 - - 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3, // 0xc0 - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xd0 - 1,0,1,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, // 0xe0 - 0,0,0,0, 0,0,0,0, 0,1,2,0, 0,0,0,0 // 0xf0 + 0,0,0,0, 1,2,0,0, 1,0,0,0, 0,0,2,1, // 0x00 + 1,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x10 Wari hack + 0,0,0,0, 2,0,0,0, 0,0,0,0, 0,0,0,0, // 0x20 + 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, // 0x30 + + 1,2,2,0, 0,0,0,0, 2,0,0,0, 0,0,0,0, // 0x40 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x50 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x60 + 0,0,0,0, 2,2,2,2, 0,0,0,0, 0,0,0,0, // 0x70 + + 2,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x80 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x90 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xa0 + 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3, // 0xb0 + + 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3, // 0xc0 + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xd0 + 1,0,1,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, // 0xe0 + 0,0,0,0, 0,0,0,0, 0,1,2,0, 0,0,0,0 // 0xf0 }; -static unsigned char ESSregs[0x20] = {0}; /* 0xA0-0xBF */ - -static unsigned char &ESSreg(uint8_t reg) { - assert(reg >= 0xA0 && reg <= 0xBF); - return ESSregs[reg-0xA0]; -} +static const int8_t scaleMap_ADPCM4[64] = { + 0, 1, 2, 3, 4, 5, 6, 7, 0, -1, -2, -3, -4, -5, -6, -7, + 1, 3, 5, 7, 9, 11, 13, 15, -1, -3, -5, -7, -9, -11, -13, -15, + 2, 6, 10, 14, 18, 22, 26, 30, -2, -6, -10, -14, -18, -22, -26, -30, + 4, 12, 20, 28, 36, 44, 52, 60, -4, -12, -20, -28, -36, -44, -52, -60 +}; +static const uint8_t adjustMap_ADPCM4[64] = { + 0, 0, 0, 0, 0, 16, 16, 16, + 0, 0, 0, 0, 0, 16, 16, 16, + 240, 0, 0, 0, 0, 16, 16, 16, + 240, 0, 0, 0, 0, 16, 16, 16, + 240, 0, 0, 0, 0, 16, 16, 16, + 240, 0, 0, 0, 0, 16, 16, 16, + 240, 0, 0, 0, 0, 0, 0, 0, + 240, 0, 0, 0, 0, 0, 0, 0 +}; -static uint8_t ASP_regs[256]; -static uint8_t ASP_mode = 0x00; +static const int8_t scaleMap_ADPCM3[40] = { + 0, 1, 2, 3, 0, -1, -2, -3, + 1, 3, 5, 7, -1, -3, -5, -7, + 2, 6, 10, 14, -2, -6, -10, -14, + 4, 12, 20, 28, -4, -12, -20, -28, + 5, 15, 25, 35, -5, -15, -25, -35 +}; +static const uint8_t adjustMap_ADPCM3[40] = { + 0, 0, 0, 8, 0, 0, 0, 8, + 248, 0, 0, 8, 248, 0, 0, 8, + 248, 0, 0, 8, 248, 0, 0, 8, + 248, 0, 0, 8, 248, 0, 0, 8, + 248, 0, 0, 0, 248, 0, 0, 0 +}; -#ifndef max -#define max(a,b) ((a)>(b)?(a):(b)) -#endif -#ifndef min -#define min(a,b) ((a)<(b)?(a):(b)) -#endif +static const int8_t scaleMap_ADPCM2[24] = { + 0, 1, 0, -1, 1, 3, -1, -3, + 2, 6, -2, -6, 4, 12, -4, -12, + 8, 24, -8, -24, 16, 48, -16, -48 +}; +static const uint8_t adjustMap_ADPCM2[24] = { + 0, 4, 0, 4, + 252, 4, 252, 4, 252, 4, 252, 4, + 252, 4, 252, 4, 252, 4, 252, 4, + 252, 0, 252, 0 +}; -static void DSP_ChangeMode(DSP_MODES mode); -static void CheckDMAEnd(); static void DMA_DAC_Event(Bitu); static void END_DMA_Event(Bitu); static void DMA_Silent_Event(Bitu val); -static void GenerateDMASound(Bitu size); - -static void DSP_SetSpeaker(bool how) { - if (sb.speaker==how) return; - sb.speaker=how; - if (sb.type==SBT_16) return; - if (sb.ess_type!=ESS_NONE) return; - sb.chan->Enable(how); - if (sb.speaker) { - PIC_RemoveEvents(DMA_Silent_Event); - CheckDMAEnd(); - } else { - ; - } +static void DSP_FinishReset(Bitu val); +static void DSP_BusyComplete(Bitu val); +static void DSP_RaiseIRQEvent(Bitu val); +static void DSP_DMA_CallBack(DmaChannel * chan, DMAEvent event); +static void DSP_E2_DMA_CallBack(DmaChannel *chan, DMAEvent event); +static void DSP_SC400_E6_DMA_CallBack(DmaChannel *chan, DMAEvent event); + +static INLINE uint8_t expand16to32(const uint8_t t) { + /* 4-bit -> 5-bit expansion. + * + * 0 -> 0 + * 1 -> 2 + * 2 -> 4 + * 3 -> 6 + * .... + * 7 -> 14 + * 8 -> 17 + * 9 -> 19 + * 10 -> 21 + * 11 -> 23 + * .... + * 15 -> 31 */ + return (t << 1) | (t >> 3); } -/* NTS: Using some old Creative Sound Blaster 16 ViBRA PnP cards as reference, - * the card will send IRQ 9 if the IRQ is configured to either "2" or "9". - * Whichever value is written will be read back. The reason for this has - * to do with the pin on the ISA bus connector that used to signal IRQ 2 - * on PC/XT hardware, but was wired to fire IRQ 9 instead on PC/AT hardware - * because of the IRQ 8-15 -> IRQ 2 cascade on AT hardware. - * - * There's not much to change here, because PIC_ActivateIRQ was modified - * to remap IRQ 2 -> IRQ 9 for us *if* emulating AT hardware. - * - * --Jonathan C. */ -static INLINE void SB_RaiseIRQ(SB_IRQS type) { - LOG(LOG_SB,LOG_NORMAL)("Raising IRQ"); - - if (sb.ess_playback_mode) { - if (!(ESSreg(0xB1) & 0x40)) // if ESS playback, and IRQ disabled, do not fire - return; - } - - switch (type) { - case SB_IRQ_8: - if (sb.irq.pending_8bit) { -// LOG_MSG("SB: 8bit irq pending"); - return; - } - sb.irq.pending_8bit=true; - PIC_ActivateIRQ(sb.hw.irq); - break; - case SB_IRQ_16: - if (sb.irq.pending_16bit) { -// LOG_MSG("SB: 16bit irq pending"); - return; - } - sb.irq.pending_16bit=true; - PIC_ActivateIRQ(sb.hw.irq); - break; - default: - break; - } -} +static INLINE uint8_t decode_ADPCM_4_sample(uint8_t sample,uint8_t & reference,Bits& scale) { + Bits samp = sample + scale; -static INLINE void DSP_FlushData(void) { - sb.dsp.out.used=0; - sb.dsp.out.pos=0; -} + if ((samp < 0) || (samp > 63)) { + LOG(LOG_SB,LOG_ERROR)("Bad ADPCM-4 sample"); + if(samp < 0 ) samp = 0; + if(samp > 63) samp = 63; + } -static double last_dma_callback = 0.0f; + Bits ref = reference + scaleMap_ADPCM4[samp]; + if (ref > 0xff) reference = 0xff; + else if (ref < 0x00) reference = 0x00; + else reference = (uint8_t)(ref&0xff); + scale = (scale + adjustMap_ADPCM4[samp]) & 0xff; -/* these are settings that the user would probably like to change on the fly during emulation */ -void sb_update_recording_source_settings() { - Section_prop* section = static_cast(control->GetSection("sblaster")); + return reference; +} - sb_listen_to_recording_source=section->Get_bool("listen to recording source"); +INLINE uint8_t decode_ADPCM_3_sample(uint8_t sample,uint8_t & reference,Bits& scale) { + Bits samp = sample + scale; + if ((samp < 0) || (samp > 39)) { + LOG(LOG_SB,LOG_ERROR)("Bad ADPCM-3 sample"); + if(samp < 0 ) samp = 0; + if(samp > 39) samp = 39; + } - { - const char *s = section->Get_string("recording source"); + Bits ref = reference + scaleMap_ADPCM3[samp]; + if (ref > 0xff) reference = 0xff; + else if (ref < 0x00) reference = 0x00; + else reference = (uint8_t)(ref&0xff); + scale = (scale + adjustMap_ADPCM3[samp]) & 0xff; - if (!strcmp(s,"silence")) - sb_recording_source = REC_SILENCE; - else if (!strcmp(s,"hiss")) - sb_recording_source = REC_HISS; - else if (!strcmp(s,"1khz tone")) - sb_recording_source = REC_1KHZ_TONE; - else - sb_recording_source = REC_SILENCE; - } + return reference; } -static void DSP_DMA_CallBack(DmaChannel * chan, DMAEvent event) { - if (chan!=sb.dma.chan || event==DMA_REACHED_TC) return; - else if (event==DMA_MASKED) { - if (sb.mode==MODE_DMA) { - //Catch up to current time, but don't generate an IRQ! - //Fixes problems with later sci games. - double t = PIC_FullIndex() - last_dma_callback; - Bitu s = static_cast(sb.dma.rate * t / 1000.0f); - if (s > sb.dma.min) { - LOG(LOG_SB,LOG_NORMAL)("limiting amount masked to sb.dma.min"); - s = sb.dma.min; - } - Bitu min_size = sb.dma.mul >> SB_SH; - if (!min_size) min_size = 1; - min_size *= 2; - if (sb.dma.left > min_size) { - if (s > (sb.dma.left - min_size)) s = sb.dma.left - min_size; - //This will trigger an irq, see GenerateDMASound, so let's not do that - if (!sb.dma.autoinit && sb.dma.left <= sb.dma.min) s = 0; - if (s) GenerateDMASound(s); - } - sb.mode = MODE_DMA_MASKED; - LOG(LOG_SB,LOG_NORMAL)("DMA masked, stopping %s, left %d",sb.dma.recording?"input":"output",chan->currcnt); - } - } else if (event==DMA_UNMASKED) { - if (sb.mode==MODE_DMA_MASKED && sb.dma.mode!=DSP_DMA_NONE) { - DSP_ChangeMode(MODE_DMA); - CheckDMAEnd(); - LOG(LOG_SB,LOG_NORMAL)("DMA unmasked, starting %s, auto %d block %d",sb.dma.recording?"input":"output",chan->autoinit,chan->basecnt); - } - } -} +static INLINE uint8_t decode_ADPCM_2_sample(uint8_t sample,uint8_t & reference,Bits& scale) { + Bits samp = sample + scale; + if ((samp < 0) || (samp > 23)) { + LOG(LOG_SB,LOG_ERROR)("Bad ADPCM-2 sample"); + if(samp < 0 ) samp = 0; + if(samp > 23) samp = 23; + } -#define MIN_ADAPTIVE_STEP_SIZE 0 -#define MAX_ADAPTIVE_STEP_SIZE 32767 -#define DC_OFFSET_FADE 254 + Bits ref = reference + scaleMap_ADPCM2[samp]; + if (ref > 0xff) reference = 0xff; + else if (ref < 0x00) reference = 0x00; + else reference = (uint8_t)(ref&0xff); + scale = (scale + adjustMap_ADPCM2[samp]) & 0xff; -static INLINE uint8_t decode_ADPCM_4_sample(uint8_t sample,uint8_t & reference,Bits& scale) { - static const int8_t scaleMap[64] = { - 0, 1, 2, 3, 4, 5, 6, 7, 0, -1, -2, -3, -4, -5, -6, -7, - 1, 3, 5, 7, 9, 11, 13, 15, -1, -3, -5, -7, -9, -11, -13, -15, - 2, 6, 10, 14, 18, 22, 26, 30, -2, -6, -10, -14, -18, -22, -26, -30, - 4, 12, 20, 28, 36, 44, 52, 60, -4, -12, -20, -28, -36, -44, -52, -60 - }; - static const uint8_t adjustMap[64] = { - 0, 0, 0, 0, 0, 16, 16, 16, - 0, 0, 0, 0, 0, 16, 16, 16, - 240, 0, 0, 0, 0, 16, 16, 16, - 240, 0, 0, 0, 0, 16, 16, 16, - 240, 0, 0, 0, 0, 16, 16, 16, - 240, 0, 0, 0, 0, 16, 16, 16, - 240, 0, 0, 0, 0, 0, 0, 0, - 240, 0, 0, 0, 0, 0, 0, 0 - }; - - Bits samp = sample + scale; - - if ((samp < 0) || (samp > 63)) { - LOG(LOG_SB,LOG_ERROR)("Bad ADPCM-4 sample"); - if(samp < 0 ) samp = 0; - if(samp > 63) samp = 63; - } - - Bits ref = reference + scaleMap[samp]; - if (ref > 0xff) reference = 0xff; - else if (ref < 0x00) reference = 0x00; - else reference = (uint8_t)(ref&0xff); - scale = (scale + adjustMap[samp]) & 0xff; - - return reference; + return reference; } -static INLINE uint8_t decode_ADPCM_2_sample(uint8_t sample,uint8_t & reference,Bits& scale) { - static const int8_t scaleMap[24] = { - 0, 1, 0, -1, 1, 3, -1, -3, - 2, 6, -2, -6, 4, 12, -4, -12, - 8, 24, -8, -24, 16, 48, -16, -48 - }; - static const uint8_t adjustMap[24] = { - 0, 4, 0, 4, - 252, 4, 252, 4, 252, 4, 252, 4, - 252, 4, 252, 4, 252, 4, 252, 4, - 252, 0, 252, 0 - }; - - Bits samp = sample + scale; - if ((samp < 0) || (samp > 23)) { - LOG(LOG_SB,LOG_ERROR)("Bad ADPCM-2 sample"); - if(samp < 0 ) samp = 0; - if(samp > 23) samp = 23; - } - - Bits ref = reference + scaleMap[samp]; - if (ref > 0xff) reference = 0xff; - else if (ref < 0x00) reference = 0x00; - else reference = (uint8_t)(ref&0xff); - scale = (scale + adjustMap[samp]) & 0xff; - - return reference; -} +#define DSP_SB16_ONLY if (type != SBT_16) { LOG(LOG_SB,LOG_ERROR)("DSP:Command %2X requires SB16",dsp.cmd); break; } +#define DSP_SB2_ABOVE if (type <= SBT_1) { LOG(LOG_SB,LOG_ERROR)("DSP:Command %2X requires SB2 or above",dsp.cmd); break; } +#define DSP_SB201_ABOVE if (type <= SBT_1 || (type == SBT_2 && subtype == SBST_200)) { LOG(LOG_SB,LOG_ERROR)("DSP:Command %2X requires SB2.01 or above",dsp.cmd); break; } -INLINE uint8_t decode_ADPCM_3_sample(uint8_t sample,uint8_t & reference,Bits& scale) { - static const int8_t scaleMap[40] = { - 0, 1, 2, 3, 0, -1, -2, -3, - 1, 3, 5, 7, -1, -3, -5, -7, - 2, 6, 10, 14, -2, -6, -10, -14, - 4, 12, 20, 28, -4, -12, -20, -28, - 5, 15, 25, 35, -5, -15, -25, -35 - }; - static const uint8_t adjustMap[40] = { - 0, 0, 0, 8, 0, 0, 0, 8, - 248, 0, 0, 8, 248, 0, 0, 8, - 248, 0, 0, 8, 248, 0, 0, 8, - 248, 0, 0, 8, 248, 0, 0, 8, - 248, 0, 0, 0, 248, 0, 0, 0 - }; - - Bits samp = sample + scale; - if ((samp < 0) || (samp > 39)) { - LOG(LOG_SB,LOG_ERROR)("Bad ADPCM-3 sample"); - if(samp < 0 ) samp = 0; - if(samp > 39) samp = 39; - } - - Bits ref = reference + scaleMap[samp]; - if (ref > 0xff) reference = 0xff; - else if (ref < 0x00) reference = 0x00; - else reference = (uint8_t)(ref&0xff); - scale = (scale + adjustMap[samp]) & 0xff; - - return reference; +#define SETPROVOL(_WHICH_,_VAL_) \ + _WHICH_[0]= ((((_VAL_) & 0xf0) >> 3)|(type==SBT_16 ? 1:3)); \ + _WHICH_[1]= ((((_VAL_) & 0x0f) << 1)|(type==SBT_16 ? 1:3)); \ + +#define MAKEPROVOL(_WHICH_) \ + ((((_WHICH_[0] & 0x1e) << 3) | ((_WHICH_[1] & 0x1e) >> 1)) | \ + ((type==SBT_PRO1 || type==SBT_PRO2) ? 0x11:0)) + +struct SB_INFO { + Bitu freq; + uint8_t timeconst; + Bitu dma_dac_srcrate; + struct { + bool recording; + bool stereo,sign,autoinit; + bool force_autoinit; + DMA_MODES mode_assigned; + DMA_MODES mode; + Bitu rate,mul; + Bitu total,left,min; + uint64_t start; + union { + uint8_t b8[DMA_BUFSIZE]; + int16_t b16[DMA_BUFSIZE]; + } buf; + Bitu bits; + DmaChannel * chan; + Bitu remain_size; + } dma; + bool freq_derived_from_tc; // if set, sb.freq was derived from SB/SBpro time constant + bool def_enable_speaker; // start emulation with SB speaker enabled + bool enable_asp; + bool speaker; + bool midi; + bool vibra; + bool emit_blaster_var; + bool sbpro_stereo_bit_strict_mode; /* if set, stereo bit in mixer can only be set if emulating a Pro. if clear, SB16 can too */ + bool sample_rate_limits; /* real SB hardware has limits on the sample rate */ + bool single_sample_dma; + bool directdac_warn_speaker_off; /* if set, warn if DSP command 0x10 is being used while the speaker is turned off */ + bool dma_dac_mode; /* some very old DOS demos "play" sound by setting the DMA terminal count to 0. + normally that would mean the DMA controller transmitting the same byte at the sample rate, + except that the program creates sound by overwriting that byte periodically. + on actual hardware this happens to work (though with kind of a gritty sound to it), + The DMA emulation here does not handle that well. */ + bool goldplay; + bool goldplay_stereo; + bool write_status_must_return_7f; // WRITE_STATUS (port base+0xC) must return 0x7F or 0xFF if set. Some very early demos rely on it. + bool busy_cycle_always; + bool ess_playback_mode; + bool no_filtering; + bool cms; + uint8_t sc400_cfg; + uint8_t time_constant; + uint8_t sc400_dsp_major,sc400_dsp_minor; + uint8_t sc400_jumper_status_1; + uint8_t sc400_jumper_status_2; + DSP_MODES mode; + SB_TYPES type; + SB_SUBTYPES subtype; + REVEAL_SC_TYPES reveal_sc_type; // Reveal SC400 type + ESS_TYPES ess_type; // ESS chipset emulation, to be set only if type == SBT_PRO2 + bool ess_extended_mode; + int min_dma_user; + int busy_cycle_hz; + int busy_cycle_duty_percent; + int busy_cycle_io_hack; + double busy_cycle_last_check; + double busy_cycle_last_poll; + struct { + bool pending_8bit; + bool pending_16bit; + } irq; + struct { + uint8_t state; + uint8_t last_cmd; + uint8_t cmd; + uint8_t cmd_len; + uint8_t cmd_in_pos; + uint8_t cmd_in[DSP_BUFSIZE]; + struct { + uint8_t lastval; + uint8_t data[DSP_BUFSIZE]; + Bitu pos,used; + } in,out; + uint8_t test_register; + Bitu write_busy; + bool highspeed; + bool require_irq_ack; + bool instant_direct_dac; + bool force_goldplay; + bool midi_rwpoll_mode; // DSP command 0x34/0x35 MIDI Read Poll & Write Poll (0x35 with interrupt) + bool midi_read_interrupt; + bool midi_read_with_timestamps; + bool command_aliases; + unsigned int dsp_write_busy_time; /* when you write to the DSP, how long it signals "busy" */ + } dsp; + struct { + int16_t last; + double dac_t,dac_pt; + } dac; + struct { + uint8_t index; + uint8_t dac[2],fm[2],cda[2],master[2],lin[2]; + uint8_t mic; + bool stereo; + bool enabled; + bool filter_bypass; + bool sbpro_stereo; /* Game or OS is attempting SB Pro type stereo */ + uint8_t unhandled[0x48]; + uint8_t ess_id_str[4]; + uint8_t ess_id_str_pos; + } mixer; + struct { + uint8_t reference; + Bits stepsize; + bool haveref; + } adpcm; + struct { + Bitu base; + Bitu irq; + uint8_t dma8,dma16; + bool sb_io_alias; + } hw; + struct { + uint8_t valadd; + uint8_t valxor; + } e2; + double last_dma_callback = 0.0f; + unsigned int recording_source = REC_SILENCE; + bool listen_to_recording_source = false; + uint8_t ASP_regs[256]; + uint8_t ASP_mode = 0x00; + unsigned char ESSregs[0x20] = {0}; /* 0xA0-0xBF */ + MixerChannel * chan; + unsigned int gen_input_ofs = 0; + unsigned long long gen_tone_angle = 0; + unsigned int gen_hiss_rand[2] = {0,0}; + size_t card_index = 0; + int gen_last_hiss = 0; + + /* SB16 cards have a 256-byte block of 8051 internal RAM accessible through DSP commands 0xF9 (Read) and 0xFA (Write) */ + unsigned char sb16_8051_mem[256]; + + /* The SB16 ASP appears to have a mystery 2KB RAM block that is accessible through register 0x83 of the ASP. + * This array represents the initial contents as seen on my SB16 non-PnP ASP chip (version ID 0x10). */ + unsigned int sb16asp_ram_contents_index = 0; + unsigned char sb16asp_ram_contents[2048]; + pic_tickindex_t next_check_record_settings = 0; + unsigned char pc98_mixctl_reg = 0x14; + + void gen_input_reset(void); + int gen_hiss(unsigned int mask); + int gen_noise(unsigned int mask); + unsigned char &ESSreg(uint8_t reg); + double gen_1khz_tone(const bool advance); + void gen_input(Bitu dmabytes,unsigned char *buf); + void gen_input_hiss(Bitu dmabytes,unsigned char *buf); + void gen_input_silence(Bitu dmabytes,unsigned char *buf); + void gen_input_1khz_tone(Bitu dmabytes,unsigned char *buf); + void DSP_DoDMATransfer(DMA_MODES new_mode,Bitu freq,bool stereo,bool dontInitLeft=false); + void DSP_PrepareDMA_New(DMA_MODES new_mode,Bitu length,bool autoinit,bool stereo); + void DSP_PrepareDMA_Old(DMA_MODES mode,bool autoinit,bool sign,bool hispeed); + unsigned int DSP_RateLimitedFinalSB16Freq_New(unsigned int freq); + void sb16asp_write_current_RAM_byte(const uint8_t r); + uint8_t sb16asp_read_current_RAM_byte(void); + void ESS_DoWrite(uint8_t reg,uint8_t data); + void sb_update_recording_source_settings(); + void updateSoundBlasterFilter(Bitu rate); + void DSP_ChangeMode(DSP_MODES new_mode); + uint8_t DSP_RateLimitedFinalTC_Old(); + unsigned int ESS_DMATransferCount(); + void DSP_ChangeStereo(bool stereo); + void DSP_ChangeRate(Bitu new_freq); + void ESSUpdateFilterFromSB(void); + void CTMIXER_UpdateVolumes(void); + void GenerateDMASound(Bitu size); + void sb16asp_next_RAM_byte(void); + void CTMIXER_Write(uint8_t val); + uint8_t ESS_DoRead(uint8_t reg); + void SB_RaiseIRQ(SB_IRQS type); + float calc_vol(uint8_t amount); + void DSP_AddData(uint8_t val); + void DSP_DoReset(uint8_t val); + void DSP_DoWrite(uint8_t val); + void DSP_SetSpeaker(bool how); + bool DSP_busy_cycle_active(); + uint8_t DSP_ReadData(void); + uint8_t CTMIXER_Read(void); + void ESS_CheckDMAEnable(); + void ESS_UpdateDMATotal(); + void DSP_DoCommand(void); + void SB_OnEndOfDMA(void); + void CTMIXER_Reset(void); + void DSP_FlushData(void); + std::string GetSBtype(); + void CheckDMAEnd(void); + bool DSP_busy_cycle(); + void DSP_Reset(void); + void ESS_StartDMA(); + void ESS_StopDMA(); + + Bitu read_sb(Bitu port,Bitu /*iolen*/); + void write_sb(Bitu port,Bitu val,Bitu /*iolen*/); +}; + +static const char *sb_section_names[MAX_CARDS] = { + "sblaster", + "sblaster2" +}; + +static const char *sbMixerChanNames[MAX_CARDS] = { + "SB", + "SB2" +}; + +const char *sbGetSectionName(const size_t ci) { + if (ci < MAX_CARDS) + return sb_section_names[ci]; + else + return NULL; } -void SB_OnEndOfDMA(void) { - bool was_irq=false; - - PIC_RemoveEvents(END_DMA_Event); - if (sb.ess_type == ESS_NONE && sb.reveal_sc_type == RSC_NONE && sb.dma.mode >= DSP_DMA_16) { - was_irq = sb.irq.pending_16bit; - SB_RaiseIRQ(SB_IRQ_16); - } - else { - was_irq = sb.irq.pending_8bit; - SB_RaiseIRQ(SB_IRQ_8); - } - - if (!sb.dma.autoinit) { - sb.dsp.highspeed = false; - LOG(LOG_SB,LOG_NORMAL)("Single cycle transfer ended"); - sb.mode=MODE_NONE; - sb.dma.mode=DSP_DMA_NONE; - - if (sb.ess_playback_mode) { - LOG(LOG_SB,LOG_NORMAL)("ESS DMA stop"); - ESSreg(0xB8) &= ~0x01; // automatically stop DMA (right?) - if (sb.dma.chan) sb.dma.chan->Clear_Request(); - } - } else { - sb.dma.left=sb.dma.total; - if (!sb.dma.left) { - LOG(LOG_SB,LOG_NORMAL)("Auto-init transfer with 0 size"); - sb.dsp.highspeed = false; - sb.mode=MODE_NONE; - } - else if (sb.dsp.require_irq_ack && was_irq) { - /* Sound Blaster 16 behavior: If you do not acknowledge the IRQ, and the card goes to signal another IRQ, the DSP halts playback. - * This is different from previous cards (and clone hardware) that continue playing whether or not you acknowledge the IRQ. */ - LOG(LOG_SB,LOG_WARN)("DMA ended when previous IRQ had not yet been acked"); - sb.mode=MODE_DMA_REQUIRE_IRQ_ACK; - } - } +static Section_prop* sbGetSection(const size_t ci) { + assert(ci < MAX_CARDS); + return static_cast(control->GetSection(sb_section_names[ci])); } -static unsigned int gen_input_ofs = 0; -static unsigned long long gen_tone_angle = 0; -static unsigned int gen_hiss_rand[2] = {0,0}; -static int gen_last_hiss = 0; +unsigned char &SB_INFO::ESSreg(uint8_t reg) { + assert(reg >= 0xA0 && reg <= 0xBF); + return ESSregs[reg-0xA0]; +} -static void gen_input_reset(void) { +void SB_INFO::gen_input_reset(void) { gen_input_ofs = 0; } -static double gen_1khz_tone(const bool advance) { +double SB_INFO::gen_1khz_tone(const bool advance) { /* sin() is pretty fast on today's hardware, no lookup table necessary */ if (advance) gen_tone_angle++; - return sin((gen_tone_angle * M_PI * 1000.0) / sb.dma_dac_srcrate); + return sin((gen_tone_angle * M_PI * 1000.0) / dma_dac_srcrate); } -static int gen_hiss(unsigned int mask) { +int SB_INFO::gen_hiss(unsigned int mask) { if (gen_hiss_rand[0] == 0) gen_hiss_rand[0] = (unsigned int)rand(); if (gen_hiss_rand[1] == 0) gen_hiss_rand[1] = (unsigned int)rand(); /* ref: [https://stackoverflow.com/questions/167735/fast-pseudo-random-number-generator-for-procedural-content#167764] */ @@ -661,7 +650,7 @@ static int gen_hiss(unsigned int mask) { return r; } -static int gen_noise(unsigned int mask) { +int SB_INFO::gen_noise(unsigned int mask) { if (gen_hiss_rand[0] == 0) gen_hiss_rand[0] = (unsigned int)rand(); if (gen_hiss_rand[1] == 0) gen_hiss_rand[1] = (unsigned int)rand(); /* ref: [https://stackoverflow.com/questions/167735/fast-pseudo-random-number-generator-for-procedural-content#167764] */ @@ -673,65 +662,69 @@ static int gen_noise(unsigned int mask) { return r; } -static void gen_input_1khz_tone(Bitu dmabytes,unsigned char *buf) { - const unsigned int ofsmax = sb.dma.stereo ? 2 : 1; +void SB_INFO::gen_input_1khz_tone(Bitu dmabytes,unsigned char *buf) { + const unsigned int ofsmax = dma.stereo ? 2 : 1; unsigned int fill; - if (sb.dma.mode == DSP_DMA_16 || sb.dma.mode == DSP_DMA_16_ALIASED) { + if (dma.mode == DSP_DMA_16 || dma.mode == DSP_DMA_16_ALIASED) { uint16_t *buf16 = (uint16_t*)buf; - if (sb.dma.mode == DSP_DMA_16_ALIASED) dmabytes >>= 1u; - fill = ((unsigned int)(gen_1khz_tone(false) * 0x4000/*half range*/) & 0xFFFF) ^ (sb.dma.sign ? 0x0000 : 0x8000); + if (dma.mode == DSP_DMA_16_ALIASED) dmabytes >>= 1u; + fill = ((unsigned int)(gen_1khz_tone(false) * 0x4000/*half range*/) & 0xFFFF) ^ (dma.sign ? 0x0000 : 0x8000); while (dmabytes-- > 0) { *buf16++ = fill; if ((++gen_input_ofs) >= ofsmax) { - fill = ((unsigned int)(gen_1khz_tone(true) * 0x4000) & 0xFFFF) ^ (sb.dma.sign ? 0x0000 : 0x8000); + fill = ((unsigned int)(gen_1khz_tone(true) * 0x4000) & 0xFFFF) ^ (dma.sign ? 0x0000 : 0x8000); gen_input_ofs = 0; } } } else { /* 8-bit */ - fill = ((((unsigned int)(gen_1khz_tone(false) * 0x4000/*half range*/) + gen_noise(0x7f) - 0x40) & 0xFFFF) ^ (sb.dma.sign ? 0x0000 : 0x8000)) >> 8u; + fill = ((((unsigned int)(gen_1khz_tone(false) * 0x4000/*half range*/) + gen_noise(0x7f) - 0x40) & 0xFFFF) ^ (dma.sign ? 0x0000 : 0x8000)) >> 8u; while (dmabytes-- > 0) { *buf++ = fill; if ((++gen_input_ofs) >= ofsmax) { - fill = ((((unsigned int)(gen_1khz_tone(true) * 0x4000/*half range*/) + gen_noise(0x7f) - 0x40) & 0xFFFF) ^ (sb.dma.sign ? 0x0000 : 0x8000)) >> 8u; + fill = ((((unsigned int)(gen_1khz_tone(true) * 0x4000/*half range*/) + gen_noise(0x7f) - 0x40) & 0xFFFF) ^ (dma.sign ? 0x0000 : 0x8000)) >> 8u; gen_input_ofs = 0; } } } } -static void gen_input_hiss(Bitu dmabytes,unsigned char *buf) { - if (sb.dma.mode == DSP_DMA_16 || sb.dma.mode == DSP_DMA_16_ALIASED) { +void SB_INFO::gen_input_hiss(Bitu dmabytes,unsigned char *buf) { + if (dma.mode == DSP_DMA_16 || dma.mode == DSP_DMA_16_ALIASED) { uint16_t *buf16 = (uint16_t*)buf; - if (sb.dma.mode == DSP_DMA_16_ALIASED) dmabytes >>= 1u; - while (dmabytes-- > 0) *buf16++ = ((gen_hiss(0x3ff) - 0x200) & 0xFFFF) ^ (sb.dma.sign ? 0x0000 : 0x8000); + if (dma.mode == DSP_DMA_16_ALIASED) dmabytes >>= 1u; + while (dmabytes-- > 0) *buf16++ = ((gen_hiss(0x3ff) - 0x200) & 0xFFFF) ^ (dma.sign ? 0x0000 : 0x8000); } else { /* 8-bit */ - while (dmabytes-- > 0) *buf++ = ((gen_hiss(0x3) - 0x2) & 0xFF) ^ (sb.dma.sign ? 0x00 : 0x80); + while (dmabytes-- > 0) *buf++ = ((gen_hiss(0x3) - 0x2) & 0xFF) ^ (dma.sign ? 0x00 : 0x80); } } -static void gen_input_silence(Bitu dmabytes,unsigned char *buf) { +void SB_INFO::gen_input_silence(Bitu dmabytes,unsigned char *buf) { unsigned int fill; - if (sb.dma.mode == DSP_DMA_16 || sb.dma.mode == DSP_DMA_16_ALIASED) { + if (dma.mode == DSP_DMA_16 || dma.mode == DSP_DMA_16_ALIASED) { uint16_t *buf16 = (uint16_t*)buf; - if (sb.dma.mode == DSP_DMA_16_ALIASED) dmabytes >>= 1u; - fill = sb.dma.sign ? 0x0000 : 0x8000; + if (dma.mode == DSP_DMA_16_ALIASED) dmabytes >>= 1u; + fill = dma.sign ? 0x0000 : 0x8000; while (dmabytes-- > 0) *buf16++ = fill; } else { /* 8-bit */ - fill = sb.dma.sign ? 0x00 : 0x80; + fill = dma.sign ? 0x00 : 0x80; while (dmabytes-- > 0) *buf++ = fill; } } -static void gen_input(Bitu dmabytes,unsigned char *buf) { - switch (sb_recording_source) { +void SB_INFO::gen_input(Bitu dmabytes,unsigned char *buf) { + // DEBUG: Log recording calls + LOG(LOG_SB,LOG_DEBUG)("gen_input called: %u bytes, source=%d, rate=%u", + (unsigned int)dmabytes, (int)recording_source, (unsigned int)dma.rate); + + switch (recording_source) { case REC_SILENCE: gen_input_silence(dmabytes,buf); break; @@ -741,26 +734,166 @@ static void gen_input(Bitu dmabytes,unsigned char *buf) { case REC_1KHZ_TONE: gen_input_1khz_tone(dmabytes,buf); break; + case REC_MICROPHONE: +#if defined(_MSC_VER) || defined(__MINGW64__) + LOG(LOG_SB,LOG_DEBUG)("MIC: IsAvailable=%d", MIC_IsAvailable() ? 1 : 0); + if (MIC_IsAvailable()) { + // Determine format from current DMA settings + bool stereo = mixer.stereo; + bool signed16bit = (dma.mode >= DSP_DMA_16); + uint32_t sampleRate = dma.rate; + LOG(LOG_SB,LOG_DEBUG)("MIC: Generating %u bytes, rate=%u, stereo=%d, 16bit=%d", + (unsigned)dmabytes, sampleRate, stereo?1:0, signed16bit?1:0); + MIC_GenerateInput(buf, dmabytes, sampleRate, stereo, signed16bit); + } else { + LOG(LOG_SB,LOG_WARN)("MIC: Not available, using silence"); + gen_input_silence(dmabytes, buf); + } +#else + gen_input_silence(dmabytes, buf); +#endif + break; default: abort(); } } -static void GenerateDMASound(Bitu size) { +void SB_INFO::DSP_SetSpeaker(bool how) { + if (speaker==how) return; + speaker=how; + if (type==SBT_16) return; + if (ess_type!=ESS_NONE) return; + chan->Enable(how); + if (speaker) { + PIC_RemoveEvents(DMA_Silent_Event); + CheckDMAEnd(); + } else { + ; + } +} + +void SB_INFO::DSP_FlushData(void) { + dsp.out.used=0; + dsp.out.pos=0; +} + +/* NTS: Using some old Creative Sound Blaster 16 ViBRA PnP cards as reference, + * the card will send IRQ 9 if the IRQ is configured to either "2" or "9". + * Whichever value is written will be read back. The reason for this has + * to do with the pin on the ISA bus connector that used to signal IRQ 2 + * on PC/XT hardware, but was wired to fire IRQ 9 instead on PC/AT hardware + * because of the IRQ 8-15 -> IRQ 2 cascade on AT hardware. + * + * There's not much to change here, because PIC_ActivateIRQ was modified + * to remap IRQ 2 -> IRQ 9 for us *if* emulating AT hardware. + * + * --Jonathan C. */ +void SB_INFO::SB_RaiseIRQ(SB_IRQS type) { + LOG(LOG_SB,LOG_NORMAL)("Raising IRQ"); + + if (ess_playback_mode) { + if (!(ESSreg(0xB1) & 0x40)) // if ESS playback, and IRQ disabled, do not fire + return; + } + + switch (type) { + case SB_IRQ_8: + if (irq.pending_8bit) { + // LOG_MSG("SB: 8bit irq pending"); + return; + } + irq.pending_8bit=true; + PIC_ActivateIRQ(hw.irq); + break; + case SB_IRQ_16: + if (irq.pending_16bit) { + // LOG_MSG("SB: 16bit irq pending"); + return; + } + irq.pending_16bit=true; + PIC_ActivateIRQ(hw.irq); + break; + default: + break; + } +} + +void SB_INFO::sb_update_recording_source_settings() { + Section_prop* section = sbGetSection(card_index); + + listen_to_recording_source=section->Get_bool("listen to recording source"); + + { + const char *s = section->Get_string("recording source"); + + if (!strcmp(s,"silence")) + recording_source = REC_SILENCE; + else if (!strcmp(s,"hiss")) + recording_source = REC_HISS; + else if (!strcmp(s,"1khz tone")) + recording_source = REC_1KHZ_TONE; + else if (!strcmp(s,"microphone")) + recording_source = REC_MICROPHONE; + else + recording_source = REC_SILENCE; + } +} + +void SB_INFO::SB_OnEndOfDMA(void) { + bool was_irq=false; + + PIC_RemoveEvents(END_DMA_Event); + if (ess_type == ESS_NONE && reveal_sc_type == RSC_NONE && dma.mode >= DSP_DMA_16) { + was_irq = irq.pending_16bit; + SB_RaiseIRQ(SB_IRQ_16); + } + else { + was_irq = irq.pending_8bit; + SB_RaiseIRQ(SB_IRQ_8); + } + + if (!dma.autoinit) { + dsp.highspeed = false; + LOG(LOG_SB,LOG_NORMAL)("Single cycle transfer ended"); + mode=MODE_NONE; + dma.mode=DSP_DMA_NONE; + + if (ess_playback_mode) { + LOG(LOG_SB,LOG_NORMAL)("ESS DMA stop"); + ESSreg(0xB8) &= ~0x01; // automatically stop DMA (right?) + if (dma.chan) dma.chan->Clear_Request(); + } + } else { + dma.left=dma.total; + if (!dma.left) { + LOG(LOG_SB,LOG_NORMAL)("Auto-init transfer with 0 size"); + dsp.highspeed = false; + mode=MODE_NONE; + } + else if (dsp.require_irq_ack && was_irq) { + /* Sound Blaster 16 behavior: If you do not acknowledge the IRQ, and the card goes to signal another IRQ, the DSP halts playback. + * This is different from previous cards (and clone hardware) that continue playing whether or not you acknowledge the IRQ. */ + LOG(LOG_SB,LOG_WARN)("DMA ended when previous IRQ had not yet been acked"); + mode=MODE_DMA_REQUIRE_IRQ_ACK; + } + } +} + +void SB_INFO::GenerateDMASound(Bitu size) { Bitu read=0;Bitu done=0;Bitu i=0; // don't read if the DMA channel is masked - if (sb.dma.chan->masked) return; + if (dma.chan->masked) return; - if (sb.dma_dac_mode) return; + if (dma_dac_mode) return; last_dma_callback = PIC_FullIndex(); - if(sb.dma.autoinit) { - if (sb.dma.left <= size) size = sb.dma.left; + if(dma.autoinit) { + if (dma.left <= size) size = dma.left; } else { - if (sb.dma.left <= sb.dma.min) - size = sb.dma.left; + if (dma.left <= dma.min) + size = dma.left; } if (size > DMA_BUFSIZE) { @@ -769,7 +902,7 @@ static void GenerateDMASound(Bitu size) { size = DMA_BUFSIZE; } - if (sb.dma.recording) { + if (dma.recording) { /* How much can we do? assume not masked because we checked that at the start of this function. * Then generate that much input data. After writing via DMA, mute the audio before it goes to * the mixer. @@ -779,1972 +912,1773 @@ static void GenerateDMASound(Bitu size) { * control, and perhaps we should allow the generated audio to go out to the mixer output * if the line in is unmuted, subject to the audio volume controls. Or perhaps this code * should just make another mixer channel for recording sources. */ - read=sb.dma.chan->currcnt + 1; /* DMA channel current count remain */ + read=dma.chan->currcnt + 1; /* DMA channel current count remain */ if (read > size) read = size; - if (sb.dma.mode == DSP_DMA_16 || sb.dma.mode == DSP_DMA_16_ALIASED) - gen_input(read,(unsigned char*)(&sb.dma.buf.b16[sb.dma.remain_size])); + if (dma.mode == DSP_DMA_16 || dma.mode == DSP_DMA_16_ALIASED) + gen_input(read,(unsigned char*)(&dma.buf.b16[dma.remain_size])); else - gen_input(read,&sb.dma.buf.b8[sb.dma.remain_size]); + gen_input(read,&dma.buf.b8[dma.remain_size]); - switch (sb.dma.mode) { + switch (dma.mode) { case DSP_DMA_8: - if (sb.dma.stereo) { - read=sb.dma.chan->Write(read,&sb.dma.buf.b8[sb.dma.remain_size]); - if (read > 0 && !sb_listen_to_recording_source) gen_input_silence(read,&sb.dma.buf.b8[sb.dma.remain_size]); /* mute before going out to mixer */ - Bitu total=read+sb.dma.remain_size; - if (!sb.dma.sign) sb.chan->AddSamples_s8(total>>1,sb.dma.buf.b8); - else sb.chan->AddSamples_s8s(total>>1,(int8_t*)sb.dma.buf.b8); + if (dma.stereo) { + read=dma.chan->Write(read,&dma.buf.b8[dma.remain_size]); + if (read > 0 && !listen_to_recording_source) gen_input_silence(read,&dma.buf.b8[dma.remain_size]); /* mute before going out to mixer */ + Bitu total=read+dma.remain_size; + if (!dma.sign) chan->AddSamples_s8(total>>1,dma.buf.b8); + else chan->AddSamples_s8s(total>>1,(int8_t*)dma.buf.b8); if (total&1) { - sb.dma.remain_size=1; - sb.dma.buf.b8[0]=sb.dma.buf.b8[total-1]; - } else sb.dma.remain_size=0; + dma.remain_size=1; + dma.buf.b8[0]=dma.buf.b8[total-1]; + } else dma.remain_size=0; } else { - read=sb.dma.chan->Write(read,sb.dma.buf.b8); - if (read > 0 && !sb_listen_to_recording_source) gen_input_silence(read,sb.dma.buf.b8); /* mute before going out to mixer */ - if (!sb.dma.sign) sb.chan->AddSamples_m8(read,sb.dma.buf.b8); - else sb.chan->AddSamples_m8s(read,(int8_t *)sb.dma.buf.b8); + read=dma.chan->Write(read,dma.buf.b8); + if (read > 0 && !listen_to_recording_source) gen_input_silence(read,dma.buf.b8); /* mute before going out to mixer */ + if (!dma.sign) chan->AddSamples_m8(read,dma.buf.b8); + else chan->AddSamples_m8s(read,(int8_t *)dma.buf.b8); } break; case DSP_DMA_16: case DSP_DMA_16_ALIASED: - if (sb.dma.stereo) { + if (dma.stereo) { /* In DSP_DMA_16_ALIASED mode temporarily divide by 2 to get number of 16-bit samples, because 8-bit DMA Read returns byte size, while in DSP_DMA_16 mode 16-bit DMA Read returns word size */ - read=sb.dma.chan->Write(read,(uint8_t *)&sb.dma.buf.b16[sb.dma.remain_size]) - >> (sb.dma.mode==DSP_DMA_16_ALIASED ? 1:0); - if (read > 0 && !sb_listen_to_recording_source) gen_input_silence(read,(unsigned char*)(&sb.dma.buf.b16[sb.dma.remain_size])); /* mute before going out to mixer */ - Bitu total=read+sb.dma.remain_size; + read=dma.chan->Write(read,(uint8_t *)&dma.buf.b16[dma.remain_size]) + >> (dma.mode==DSP_DMA_16_ALIASED ? 1:0); + if (read > 0 && !listen_to_recording_source) gen_input_silence(read,(unsigned char*)(&dma.buf.b16[dma.remain_size])); /* mute before going out to mixer */ + Bitu total=read+dma.remain_size; #if defined(WORDS_BIGENDIAN) - if (sb.dma.sign) sb.chan->AddSamples_s16_nonnative(total>>1,sb.dma.buf.b16); - else sb.chan->AddSamples_s16u_nonnative(total>>1,(uint16_t *)sb.dma.buf.b16); + if (dma.sign) chan->AddSamples_s16_nonnative(total>>1,dma.buf.b16); + else chan->AddSamples_s16u_nonnative(total>>1,(uint16_t *)dma.buf.b16); #else - if (sb.dma.sign) sb.chan->AddSamples_s16(total>>1,sb.dma.buf.b16); - else sb.chan->AddSamples_s16u(total>>1,(uint16_t *)sb.dma.buf.b16); + if (dma.sign) chan->AddSamples_s16(total>>1,dma.buf.b16); + else chan->AddSamples_s16u(total>>1,(uint16_t *)dma.buf.b16); #endif if (total&1) { - sb.dma.remain_size=1; - sb.dma.buf.b16[0]=sb.dma.buf.b16[total-1]; - } else sb.dma.remain_size=0; + dma.remain_size=1; + dma.buf.b16[0]=dma.buf.b16[total-1]; + } else dma.remain_size=0; } else { - read=sb.dma.chan->Write(read,(uint8_t *)sb.dma.buf.b16) - >> (sb.dma.mode==DSP_DMA_16_ALIASED ? 1:0); - if (read > 0 && !sb_listen_to_recording_source) gen_input_silence(read,(unsigned char*)sb.dma.buf.b16); /* mute before going out to mixer */ + read=dma.chan->Write(read,(uint8_t *)dma.buf.b16) + >> (dma.mode==DSP_DMA_16_ALIASED ? 1:0); + if (read > 0 && !listen_to_recording_source) gen_input_silence(read,(unsigned char*)dma.buf.b16); /* mute before going out to mixer */ #if defined(WORDS_BIGENDIAN) - if (sb.dma.sign) sb.chan->AddSamples_m16_nonnative(read,sb.dma.buf.b16); - else sb.chan->AddSamples_m16u_nonnative(read,(uint16_t *)sb.dma.buf.b16); + if (dma.sign) chan->AddSamples_m16_nonnative(read,dma.buf.b16); + else chan->AddSamples_m16u_nonnative(read,(uint16_t *)dma.buf.b16); #else - if (sb.dma.sign) sb.chan->AddSamples_m16(read,sb.dma.buf.b16); - else sb.chan->AddSamples_m16u(read,(uint16_t *)sb.dma.buf.b16); + if (dma.sign) chan->AddSamples_m16(read,dma.buf.b16); + else chan->AddSamples_m16u(read,(uint16_t *)dma.buf.b16); #endif } //restore buffer length value to byte size in aliased mode - if (sb.dma.mode==DSP_DMA_16_ALIASED) read=read<<1; + if (dma.mode==DSP_DMA_16_ALIASED) read=read<<1; break; default: - LOG_MSG("Unhandled dma record mode %d",sb.dma.mode); - sb.mode=MODE_NONE; + LOG_MSG("Unhandled dma record mode %d",dma.mode); + mode=MODE_NONE; return; } } else { - switch (sb.dma.mode) { + switch (dma.mode) { case DSP_DMA_2: - read=sb.dma.chan->Read(size,sb.dma.buf.b8); - if (read && sb.adpcm.haveref) { - sb.adpcm.haveref=false; - sb.adpcm.reference=sb.dma.buf.b8[0]; - sb.adpcm.stepsize=MIN_ADAPTIVE_STEP_SIZE; + read=dma.chan->Read(size,dma.buf.b8); + if (read && adpcm.haveref) { + adpcm.haveref=false; + adpcm.reference=dma.buf.b8[0]; + adpcm.stepsize=MIN_ADAPTIVE_STEP_SIZE; i++; } for (;i> 6) & 0x3,sb.adpcm.reference,sb.adpcm.stepsize); - MixTemp[done++]=decode_ADPCM_2_sample((sb.dma.buf.b8[i] >> 4) & 0x3,sb.adpcm.reference,sb.adpcm.stepsize); - MixTemp[done++]=decode_ADPCM_2_sample((sb.dma.buf.b8[i] >> 2) & 0x3,sb.adpcm.reference,sb.adpcm.stepsize); - MixTemp[done++]=decode_ADPCM_2_sample((sb.dma.buf.b8[i] >> 0) & 0x3,sb.adpcm.reference,sb.adpcm.stepsize); + MixTemp[done++]=decode_ADPCM_2_sample((dma.buf.b8[i] >> 6) & 0x3,adpcm.reference,adpcm.stepsize); + MixTemp[done++]=decode_ADPCM_2_sample((dma.buf.b8[i] >> 4) & 0x3,adpcm.reference,adpcm.stepsize); + MixTemp[done++]=decode_ADPCM_2_sample((dma.buf.b8[i] >> 2) & 0x3,adpcm.reference,adpcm.stepsize); + MixTemp[done++]=decode_ADPCM_2_sample((dma.buf.b8[i] >> 0) & 0x3,adpcm.reference,adpcm.stepsize); } - sb.chan->AddSamples_m8(done,MixTemp); + chan->AddSamples_m8(done,MixTemp); break; case DSP_DMA_3: - read=sb.dma.chan->Read(size,sb.dma.buf.b8); - if (read && sb.adpcm.haveref) { - sb.adpcm.haveref=false; - sb.adpcm.reference=sb.dma.buf.b8[0]; - sb.adpcm.stepsize=MIN_ADAPTIVE_STEP_SIZE; + read=dma.chan->Read(size,dma.buf.b8); + if (read && adpcm.haveref) { + adpcm.haveref=false; + adpcm.reference=dma.buf.b8[0]; + adpcm.stepsize=MIN_ADAPTIVE_STEP_SIZE; i++; } for (;i> 5) & 0x7,sb.adpcm.reference,sb.adpcm.stepsize); - MixTemp[done++]=decode_ADPCM_3_sample((sb.dma.buf.b8[i] >> 2) & 0x7,sb.adpcm.reference,sb.adpcm.stepsize); - MixTemp[done++]=decode_ADPCM_3_sample((sb.dma.buf.b8[i] & 0x3) << 1,sb.adpcm.reference,sb.adpcm.stepsize); + MixTemp[done++]=decode_ADPCM_3_sample((dma.buf.b8[i] >> 5) & 0x7,adpcm.reference,adpcm.stepsize); + MixTemp[done++]=decode_ADPCM_3_sample((dma.buf.b8[i] >> 2) & 0x7,adpcm.reference,adpcm.stepsize); + MixTemp[done++]=decode_ADPCM_3_sample((dma.buf.b8[i] & 0x3) << 1,adpcm.reference,adpcm.stepsize); } - sb.chan->AddSamples_m8(done,MixTemp); + chan->AddSamples_m8(done,MixTemp); break; case DSP_DMA_4: - read=sb.dma.chan->Read(size,sb.dma.buf.b8); - if (read && sb.adpcm.haveref) { - sb.adpcm.haveref=false; - sb.adpcm.reference=sb.dma.buf.b8[0]; - sb.adpcm.stepsize=MIN_ADAPTIVE_STEP_SIZE; + read=dma.chan->Read(size,dma.buf.b8); + if (read && adpcm.haveref) { + adpcm.haveref=false; + adpcm.reference=dma.buf.b8[0]; + adpcm.stepsize=MIN_ADAPTIVE_STEP_SIZE; i++; } for (;i> 4,sb.adpcm.reference,sb.adpcm.stepsize); - MixTemp[done++]=decode_ADPCM_4_sample(sb.dma.buf.b8[i]& 0xf,sb.adpcm.reference,sb.adpcm.stepsize); + MixTemp[done++]=decode_ADPCM_4_sample(dma.buf.b8[i] >> 4,adpcm.reference,adpcm.stepsize); + MixTemp[done++]=decode_ADPCM_4_sample(dma.buf.b8[i]& 0xf,adpcm.reference,adpcm.stepsize); } - sb.chan->AddSamples_m8(done,MixTemp); + chan->AddSamples_m8(done,MixTemp); break; case DSP_DMA_8: - if (sb.dma.stereo) { - read=sb.dma.chan->Read(size,&sb.dma.buf.b8[sb.dma.remain_size]); - Bitu total=read+sb.dma.remain_size; - if (!sb.dma.sign) sb.chan->AddSamples_s8(total>>1,sb.dma.buf.b8); - else sb.chan->AddSamples_s8s(total>>1,(int8_t*)sb.dma.buf.b8); + if (dma.stereo) { + read=dma.chan->Read(size,&dma.buf.b8[dma.remain_size]); + Bitu total=read+dma.remain_size; + if (!dma.sign) chan->AddSamples_s8(total>>1,dma.buf.b8); + else chan->AddSamples_s8s(total>>1,(int8_t*)dma.buf.b8); if (total&1) { - sb.dma.remain_size=1; - sb.dma.buf.b8[0]=sb.dma.buf.b8[total-1]; - } else sb.dma.remain_size=0; + dma.remain_size=1; + dma.buf.b8[0]=dma.buf.b8[total-1]; + } else dma.remain_size=0; } else { - read=sb.dma.chan->Read(size,sb.dma.buf.b8); - if (!sb.dma.sign) sb.chan->AddSamples_m8(read,sb.dma.buf.b8); - else sb.chan->AddSamples_m8s(read,(int8_t *)sb.dma.buf.b8); + read=dma.chan->Read(size,dma.buf.b8); + if (!dma.sign) chan->AddSamples_m8(read,dma.buf.b8); + else chan->AddSamples_m8s(read,(int8_t *)dma.buf.b8); } break; case DSP_DMA_16: case DSP_DMA_16_ALIASED: - if (sb.dma.stereo) { + if (dma.stereo) { /* In DSP_DMA_16_ALIASED mode temporarily divide by 2 to get number of 16-bit samples, because 8-bit DMA Read returns byte size, while in DSP_DMA_16 mode 16-bit DMA Read returns word size */ - read=sb.dma.chan->Read(size,(uint8_t *)&sb.dma.buf.b16[sb.dma.remain_size]) - >> (sb.dma.mode==DSP_DMA_16_ALIASED ? 1:0); - Bitu total=read+sb.dma.remain_size; + read=dma.chan->Read(size,(uint8_t *)&dma.buf.b16[dma.remain_size]) + >> (dma.mode==DSP_DMA_16_ALIASED ? 1:0); + Bitu total=read+dma.remain_size; #if defined(WORDS_BIGENDIAN) - if (sb.dma.sign) sb.chan->AddSamples_s16_nonnative(total>>1,sb.dma.buf.b16); - else sb.chan->AddSamples_s16u_nonnative(total>>1,(uint16_t *)sb.dma.buf.b16); + if (dma.sign) chan->AddSamples_s16_nonnative(total>>1,dma.buf.b16); + else chan->AddSamples_s16u_nonnative(total>>1,(uint16_t *)dma.buf.b16); #else - if (sb.dma.sign) sb.chan->AddSamples_s16(total>>1,sb.dma.buf.b16); - else sb.chan->AddSamples_s16u(total>>1,(uint16_t *)sb.dma.buf.b16); + if (dma.sign) chan->AddSamples_s16(total>>1,dma.buf.b16); + else chan->AddSamples_s16u(total>>1,(uint16_t *)dma.buf.b16); #endif if (total&1) { - sb.dma.remain_size=1; - sb.dma.buf.b16[0]=sb.dma.buf.b16[total-1]; - } else sb.dma.remain_size=0; + dma.remain_size=1; + dma.buf.b16[0]=dma.buf.b16[total-1]; + } else dma.remain_size=0; } else { - read=sb.dma.chan->Read(size,(uint8_t *)sb.dma.buf.b16) - >> (sb.dma.mode==DSP_DMA_16_ALIASED ? 1:0); + read=dma.chan->Read(size,(uint8_t *)dma.buf.b16) + >> (dma.mode==DSP_DMA_16_ALIASED ? 1:0); #if defined(WORDS_BIGENDIAN) - if (sb.dma.sign) sb.chan->AddSamples_m16_nonnative(read,sb.dma.buf.b16); - else sb.chan->AddSamples_m16u_nonnative(read,(uint16_t *)sb.dma.buf.b16); + if (dma.sign) chan->AddSamples_m16_nonnative(read,dma.buf.b16); + else chan->AddSamples_m16u_nonnative(read,(uint16_t *)dma.buf.b16); #else - if (sb.dma.sign) sb.chan->AddSamples_m16(read,sb.dma.buf.b16); - else sb.chan->AddSamples_m16u(read,(uint16_t *)sb.dma.buf.b16); + if (dma.sign) chan->AddSamples_m16(read,dma.buf.b16); + else chan->AddSamples_m16u(read,(uint16_t *)dma.buf.b16); #endif } //restore buffer length value to byte size in aliased mode - if (sb.dma.mode==DSP_DMA_16_ALIASED) read=read<<1; + if (dma.mode==DSP_DMA_16_ALIASED) read=read<<1; break; default: - LOG_MSG("Unhandled dma playback mode %d",sb.dma.mode); - sb.mode=MODE_NONE; + LOG_MSG("Unhandled dma playback mode %d",dma.mode); + mode=MODE_NONE; return; } } - sb.dma.left-=read; - if (!sb.dma.left) SB_OnEndOfDMA(); -} - -static void DMA_Silent_Event(Bitu val) { - if (sb.dma.leftWrite(val,sb.dma.buf.b8) : sb.dma.chan->Read(val,sb.dma.buf.b8); - sb.dma.left-=read; - if (!sb.dma.left) { - if (sb.dma.mode >= DSP_DMA_16) SB_RaiseIRQ(SB_IRQ_16); - else SB_RaiseIRQ(SB_IRQ_8); - if (sb.dma.autoinit) sb.dma.left=sb.dma.total; - else { - sb.mode=MODE_NONE; - sb.dma.mode=sb.dma.mode_assigned=DSP_DMA_NONE; - } - } - if (sb.dma.left) { - Bitu bigger=(sb.dma.left > sb.dma.min) ? sb.dma.min : sb.dma.left; - float delay=(bigger*1000.0f)/sb.dma.rate; - PIC_AddEvent(DMA_Silent_Event,delay,bigger); - } - -} - -void updateSoundBlasterFilter(Bitu rate); - -static void DMA_DAC_Event(Bitu val) { - (void)val;//UNUSED - unsigned char tmp[4]; - Bitu read,expct; - signed int L,R; - int16_t out[2]; - - if (sb.dma.chan->masked) { - PIC_AddEvent(DMA_DAC_Event,1000.0 / sb.dma_dac_srcrate); - return; - } - if (!sb.dma.left) - return; - - const bool psingle_sample = sb.single_sample_dma; - /* Fix for 1994 Demoscene entry myth_dw: The demo's Sound Blaster Pro initialization will start DMA with - * count == 1 or 2 (triggering Goldplay mode) but will change the DMA initial counter when it begins - * normal playback. If goldplay stereo hack is enabled and we do not catch this case, the first 0.5 seconds - * of music will play twice as fast. */ - if (sb.dma.chan != NULL && - sb.dma.chan->basecnt < ((sb.dma.mode==DSP_DMA_16_ALIASED?2:1)*((sb.dma.stereo || sb.mixer.sbpro_stereo)?2:1))/*size of one sample in DMA counts*/) - sb.single_sample_dma = 1; - else - sb.single_sample_dma = 0; - - if (psingle_sample && !sb.single_sample_dma) { - // WARNING: This assumes Sound Blaster Pro emulation! - LOG(LOG_SB,LOG_NORMAL)("Goldplay mode unexpectedly switched off, normal DMA playback follows"); - sb.dma_dac_mode = 0; - sb.dma_dac_srcrate = sb.freq / (sb.mixer.stereo ? 2 : 1); - sb.chan->SetFreq(sb.dma_dac_srcrate); - updateSoundBlasterFilter(sb.dma_dac_srcrate); - return; - } - - /* NTS: chan->Read() deals with DMA unit transfers. - * for 8-bit DMA, read/expct is in bytes, for 16-bit DMA, read/expct is in 16-bit words */ - expct = (sb.dma.stereo ? 2u : 1u) * (sb.dma.mode == DSP_DMA_16_ALIASED ? 2u : 1u); - if (sb.dma.recording) { - gen_input(expct,tmp); - read = sb.dma.chan->Write(expct,tmp); - L = R = 0; - } - else { - read = sb.dma.chan->Read(expct,tmp); - //if (read != expct) - // LOG_MSG("DMA read was not sample aligned. Sound may swap channels or become static. On real hardware the same may happen unless audio is prepared specifically.\n"); - - if (sb.dma.mode == DSP_DMA_16 || sb.dma.mode == DSP_DMA_16_ALIASED) { - L = (int16_t)host_readw(&tmp[0]); - if (!sb.dma.sign) L ^= 0x8000; - if (sb.dma.stereo) { - R = (int16_t)host_readw(&tmp[2]); - if (!sb.dma.sign) R ^= 0x8000; - } - else { - R = L; - } - } - else { - L = tmp[0]; - if (!sb.dma.sign) L ^= 0x80; - L = (int16_t)(L << 8); - if (sb.dma.stereo) { - R = tmp[1]; - if (!sb.dma.sign) R ^= 0x80; - R = (int16_t)(R << 8); - } - else { - R = L; - } - } - } - - if (sb.dma.stereo) { - out[0]=L; - out[1]=R; - sb.chan->AddSamples_s16(1,out); - } - else { - out[0]=L; - sb.chan->AddSamples_m16(1,out); - } - - /* NTS: The reason we check this is that sometimes the various "checks" performed by - - * setup/configuration tools will setup impossible playback scenarios to test - - * the card that would result in read > sb.dma.left. If read > sb.dma.left then - - * the subtraction below would drive sb.dma.left below zero and the IRQ would - - * never fire, and the test program would fail to detect SB16 emulation. - - * - - * Bugfix for "Extreme Assault" that allows the game to detect Sound Blaster 16 - - * hardware. "Extreme Assault"'s SB16 test appears to configure a DMA transfer - - * of 1 byte then attempt to play 16-bit signed stereo PCM (4 bytes) which prior - - * to this fix would falsely trigger Goldplay then cause sb.dma.left to underrun - - * and fail to fire the IRQ. */ - if (sb.dma.left >= read) - sb.dma.left -= read; - else - sb.dma.left = 0; - - if (!sb.dma.left) { - SB_OnEndOfDMA(); - if (sb.dma_dac_mode) PIC_AddEvent(DMA_DAC_Event,1000.0 / sb.dma_dac_srcrate); - } - else { - PIC_AddEvent(DMA_DAC_Event,1000.0 / sb.dma_dac_srcrate); - } + dma.left-=read; + if (!dma.left) SB_OnEndOfDMA(); } -static void END_DMA_Event(Bitu val) { - GenerateDMASound(val); +void SB_INFO::CheckDMAEnd(void) { + if (!dma.left) return; + if (!speaker && type!=SBT_16 && ess_type==ESS_NONE) { + Bitu bigger=(dma.left > dma.min) ? dma.min : dma.left; + float delay=(bigger*1000.0f)/dma.rate; + PIC_AddEvent(DMA_Silent_Event,delay,bigger | (card_index << CARD_INDEX_BIT)); + LOG(LOG_SB,LOG_NORMAL)("Silent DMA Transfer scheduling IRQ in %.3f milliseconds",delay); + } else if (dma.left sb.dma.min) ? sb.dma.min : sb.dma.left; - float delay=(bigger*1000.0f)/sb.dma.rate; - PIC_AddEvent(DMA_Silent_Event,delay,bigger); - LOG(LOG_SB,LOG_NORMAL)("Silent DMA Transfer scheduling IRQ in %.3f milliseconds",delay); - } else if (sb.dma.leftFillUp(); + mode=new_mode; } -static void DSP_ChangeMode(DSP_MODES mode) { - if (sb.mode==mode) return; - else sb.chan->FillUp(); - sb.mode=mode; -} +void SB_INFO::DSP_DoDMATransfer(DMA_MODES new_mode,Bitu freq,bool stereo,bool dontInitLeft) { + char const * type; + + mode=MODE_DMA_MASKED; + + /* Explanation: A handful of ancient DOS demos (in the 1990-1992 timeframe) were written to output + * sound using the timer interrupt (IRQ 0) at a fixed rate to a device, usually the + * PC speaker or LPT1 DAC. When SoundBlaster came around, the programmers decided + * apparently to treat the Sound Blaster in the same way, so many of these early + * demos (especially those using GoldPlay) used either Direct DAC output or a hacked + * form of DMA single-cycle 8-bit output. + * + * The way the hacked DMA mode works, is that the Sound Blaster is told the transfer + * length is 65536 or some other large value. Then, the DMA controller is programmed + * to point at a specific byte (or two bytes for stereo) and the counter value for + * that DMA channel is set to 0 (or 1 for stereo). This means that as the Sound Blaster + * fetches bytes to play, the DMA controller ends up sending the same byte value + * over and over again. However, the demo has the timer running at the desired sample + * rate (IRQ 0) and the interrupt routine is modifying the byte to reflect the latest + * sample output. In this way, the demo renders audio whenever it feels like it and + * the Sound Blaster gets audio at the rate it works best with. + * + * It's worth noting the programmers may have done this because DMA playback is the + * only way to get SB Pro stereo output working. + * + * The problem here in DOSBox is that the DMA block-transfer code here is not precise + * enough to handle that properly. When you run such a program in DOSBox 0.74 and + * earlier, you get a low-frequency digital "rumble" that kinda-sorta sounds like + * what the demo is playing (the same byte value repeated over and over again, + * remember?). The only way to properly render such output, is to read the memory + * value at the sample rate and buffer it for output. + * + * This fixes Sound Blaster output in: + * Twilight Zone - Buttman (1992) [SB and SB Pro modes] + * Triton - Crystal Dream (1992) [SB and SB Pro modes] + * The Jungly (1992) [SB and SB Pro modes] + */ + if (dma.chan != NULL && + dma.chan->basecnt < ((new_mode==DSP_DMA_16_ALIASED?2:1)*((stereo || mixer.sbpro_stereo)?2:1))/*size of one sample in DMA counts*/) + single_sample_dma = 1; + else + single_sample_dma = 0; + + dma_dac_srcrate=freq; + if (dsp.force_goldplay || (goldplay && freq > 0 && single_sample_dma)) + dma_dac_mode=1; + else + dma_dac_mode=0; + + /* explanation: the purpose of Goldplay stereo mode is to compensate for the fact + * that demos using this method of playback know to set the SB Pro stereo bit, BUT, + * apparently did not know that they needed to double the sample rate when + * computing the DSP time constant. Such demos sound "OK" on Sound Blaster Pro but + * have audible aliasing artifacts because of this. The Goldplay Stereo hack + * detects this condition and doubles the sample rate to better capture what the + * demo is *trying* to do. NTS: freq is the raw sample rate given by the + * program, before it is divided by two for stereo. + * + * Of course, some demos like Crystal Dream take the approach of just setting the + * sample rate to the max supported by the card and then letting its timer interrupt + * define the sample rate. So of course anything below 44.1KHz sounds awful. */ + if (dma_dac_mode && goldplay_stereo && (stereo || mixer.sbpro_stereo) && single_sample_dma) + dma_dac_srcrate = freq; + + chan->FillUp(); + + if (!dontInitLeft) + dma.left=dma.total; + + dma.mode=dma.mode_assigned=new_mode; + dma.stereo=stereo; + irq.pending_8bit=false; + irq.pending_16bit=false; + switch (new_mode) { + case DSP_DMA_2: + type="2-bits ADPCM"; + dma.mul=(1 << SB_SH)/4; + break; + case DSP_DMA_3: + type="3-bits ADPCM"; + dma.mul=(1 << SB_SH)/3; + break; + case DSP_DMA_4: + type="4-bits ADPCM"; + dma.mul=(1 << SB_SH)/2; + break; + case DSP_DMA_8: + type="8-bits PCM"; + dma.mul=(1 << SB_SH); + break; + case DSP_DMA_16_ALIASED: + type="16-bits(aliased) PCM"; + dma.mul=(1 << SB_SH)*2; + break; + case DSP_DMA_16: + type="16-bits PCM"; + dma.mul=(1 << SB_SH); + break; + default: + LOG(LOG_SB,LOG_ERROR)("DSP:Illegal transfer mode %d",new_mode); + return; + } + if (dma.stereo) dma.mul*=2; + dma.rate=(dma_dac_srcrate*dma.mul) >> SB_SH; + dma.min=((Bitu)dma.rate*(Bitu)(min_dma_user >= 0 ? min_dma_user : /*default*/3))/1000u; + if (dma_dac_mode && goldplay_stereo && (stereo || mixer.sbpro_stereo) && single_sample_dma) { + // LOG(LOG_SB,LOG_DEBUG)("Goldplay stereo hack. freq=%u rawfreq=%u dacrate=%u",(unsigned int)freq,(unsigned int)freq,(unsigned int)dma_dac_srcrate); + chan->SetFreq(dma_dac_srcrate); + updateSoundBlasterFilter(freq); /* BUT, you still filter like the actual sample rate */ + } + else { + chan->SetFreq(freq); + updateSoundBlasterFilter(freq); + } + dma.mode=dma.mode_assigned=new_mode; + PIC_RemoveEvents(DMA_DAC_Event); + PIC_RemoveEvents(END_DMA_Event); -static void DSP_RaiseIRQEvent(Bitu /*val*/) { - SB_RaiseIRQ(SB_IRQ_8); -} + if (dma_dac_mode) + PIC_AddEvent(DMA_DAC_Event,1000.0 / dma_dac_srcrate,(card_index << CARD_INDEX_BIT)); -static void DSP_DoDMATransfer(DMA_MODES mode,Bitu freq,bool stereo,bool dontInitLeft=false) { - char const * type; - - sb.mode=MODE_DMA_MASKED; - - /* Explanation: A handful of ancient DOS demos (in the 1990-1992 timeframe) were written to output - * sound using the timer interrupt (IRQ 0) at a fixed rate to a device, usually the - * PC speaker or LPT1 DAC. When SoundBlaster came around, the programmers decided - * apparently to treat the Sound Blaster in the same way, so many of these early - * demos (especially those using GoldPlay) used either Direct DAC output or a hacked - * form of DMA single-cycle 8-bit output. - * - * The way the hacked DMA mode works, is that the Sound Blaster is told the transfer - * length is 65536 or some other large value. Then, the DMA controller is programmed - * to point at a specific byte (or two bytes for stereo) and the counter value for - * that DMA channel is set to 0 (or 1 for stereo). This means that as the Sound Blaster - * fetches bytes to play, the DMA controller ends up sending the same byte value - * over and over again. However, the demo has the timer running at the desired sample - * rate (IRQ 0) and the interrupt routine is modifying the byte to reflect the latest - * sample output. In this way, the demo renders audio whenever it feels like it and - * the Sound Blaster gets audio at the rate it works best with. - * - * It's worth noting the programmers may have done this because DMA playback is the - * only way to get SB Pro stereo output working. - * - * The problem here in DOSBox is that the DMA block-transfer code here is not precise - * enough to handle that properly. When you run such a program in DOSBox 0.74 and - * earlier, you get a low-frequency digital "rumble" that kinda-sorta sounds like - * what the demo is playing (the same byte value repeated over and over again, - * remember?). The only way to properly render such output, is to read the memory - * value at the sample rate and buffer it for output. - * - * This fixes Sound Blaster output in: - * Twilight Zone - Buttman (1992) [SB and SB Pro modes] - * Triton - Crystal Dream (1992) [SB and SB Pro modes] - * The Jungly (1992) [SB and SB Pro modes] - */ - if (sb.dma.chan != NULL && - sb.dma.chan->basecnt < ((mode==DSP_DMA_16_ALIASED?2:1)*((stereo || sb.mixer.sbpro_stereo)?2:1))/*size of one sample in DMA counts*/) - sb.single_sample_dma = 1; - else - sb.single_sample_dma = 0; - - sb.dma_dac_srcrate=freq; - if (sb.dsp.force_goldplay || (sb.goldplay && sb.freq > 0 && sb.single_sample_dma)) - sb.dma_dac_mode=1; - else - sb.dma_dac_mode=0; - - /* explanation: the purpose of Goldplay stereo mode is to compensate for the fact - * that demos using this method of playback know to set the SB Pro stereo bit, BUT, - * apparently did not know that they needed to double the sample rate when - * computing the DSP time constant. Such demos sound "OK" on Sound Blaster Pro but - * have audible aliasing artifacts because of this. The Goldplay Stereo hack - * detects this condition and doubles the sample rate to better capture what the - * demo is *trying* to do. NTS: sb.freq is the raw sample rate given by the - * program, before it is divided by two for stereo. - * - * Of course, some demos like Crystal Dream take the approach of just setting the - * sample rate to the max supported by the card and then letting its timer interrupt - * define the sample rate. So of course anything below 44.1KHz sounds awful. */ - if (sb.dma_dac_mode && sb.goldplay_stereo && (stereo || sb.mixer.sbpro_stereo) && sb.single_sample_dma) - sb.dma_dac_srcrate = sb.freq; - - sb.chan->FillUp(); - - if (!dontInitLeft) - sb.dma.left=sb.dma.total; - - sb.dma.mode=sb.dma.mode_assigned=mode; - sb.dma.stereo=stereo; - sb.irq.pending_8bit=false; - sb.irq.pending_16bit=false; - switch (mode) { - case DSP_DMA_2: - type="2-bits ADPCM"; - sb.dma.mul=(1 << SB_SH)/4; - break; - case DSP_DMA_3: - type="3-bits ADPCM"; - sb.dma.mul=(1 << SB_SH)/3; - break; - case DSP_DMA_4: - type="4-bits ADPCM"; - sb.dma.mul=(1 << SB_SH)/2; - break; - case DSP_DMA_8: - type="8-bits PCM"; - sb.dma.mul=(1 << SB_SH); - break; - case DSP_DMA_16_ALIASED: - type="16-bits(aliased) PCM"; - sb.dma.mul=(1 << SB_SH)*2; - break; - case DSP_DMA_16: - type="16-bits PCM"; - sb.dma.mul=(1 << SB_SH); - break; - default: - LOG(LOG_SB,LOG_ERROR)("DSP:Illegal transfer mode %d",mode); - return; - } - if (sb.dma.stereo) sb.dma.mul*=2; - sb.dma.rate=(sb.dma_dac_srcrate*sb.dma.mul) >> SB_SH; - sb.dma.min=((Bitu)sb.dma.rate*(Bitu)(sb.min_dma_user >= 0 ? sb.min_dma_user : /*default*/3))/1000u; - if (sb.dma_dac_mode && sb.goldplay_stereo && (stereo || sb.mixer.sbpro_stereo) && sb.single_sample_dma) { -// LOG(LOG_SB,LOG_DEBUG)("Goldplay stereo hack. freq=%u rawfreq=%u dacrate=%u",(unsigned int)freq,(unsigned int)sb.freq,(unsigned int)sb.dma_dac_srcrate); - sb.chan->SetFreq(sb.dma_dac_srcrate); - updateSoundBlasterFilter(freq); /* BUT, you still filter like the actual sample rate */ - } - else { - sb.chan->SetFreq(freq); - updateSoundBlasterFilter(freq); - } - sb.dma.mode=sb.dma.mode_assigned=mode; - PIC_RemoveEvents(DMA_DAC_Event); - PIC_RemoveEvents(END_DMA_Event); - - if (sb.dma_dac_mode) - PIC_AddEvent(DMA_DAC_Event,1000.0 / sb.dma_dac_srcrate); - - if (sb.dma.chan != NULL) { - sb.dma.chan->Register_Callback(DSP_DMA_CallBack); - } - else { - LOG(LOG_SB,LOG_WARN)("DMA transfer initiated with no channel assigned"); - } + if (dma.chan != NULL) { + dma.chan->Register_Callback(DSP_DMA_CallBack); + } + else { + LOG(LOG_SB,LOG_WARN)("DMA transfer initiated with no channel assigned"); + } #if (C_DEBUG) - LOG(LOG_SB,LOG_NORMAL)("DMA Transfer:%s %s %s %s freq %d rate %d size %d gold %d", - type, - sb.dma.recording ? "Recording" : "Playback", - sb.dma.stereo ? "Stereo" : "Mono", - sb.dma.autoinit ? "Auto-Init" : "Single-Cycle", - (int)freq,(int)sb.dma.rate,(int)sb.dma.total, - (int)sb.dma_dac_mode - ); + LOG(LOG_SB,LOG_NORMAL)("DMA Transfer:%s %s %s dsp %s dma %s freq %d rate %d dspsize %d dmasize %d gold %d", + type, + dma.recording ? "Recording" : "Playback", + dma.stereo ? "Stereo" : "Mono", + dma.autoinit ? "Auto-Init" : "Single-Cycle", + dma.chan ? (dma.chan->autoinit ? "Auto-Init" : "Single-Cycle") : "n/a", + (int)freq,(int)dma.rate,(int)dma.total, + dma.chan ? (dma.chan->basecnt+1) : 0, + (int)dma_dac_mode + ); #else - (void)type; + (void)type; #endif } -static uint8_t DSP_RateLimitedFinalTC_Old() { - if (sb.sample_rate_limits) { /* enforce speed limits documented by Creative */ - /* commands that invoke this call use the DSP time constant, so use the DSP - * time constant to constrain rate */ - unsigned int u_limit=212;/* 23KHz */ - - /* NTS: We skip the SB16 commands because those are handled by another function */ - if ((sb.dsp.cmd&0xFE) == 0x74 || sb.dsp.cmd == 0x7D) { /* 4-bit ADPCM */ - u_limit = 172; /* 12KHz */ - } - else if ((sb.dsp.cmd&0xFE) == 0x76) { /* 2.6-bit ADPCM */ - if (sb.type == SBT_2) u_limit = 172; /* 12KHz */ - else u_limit = 179; /* 13KHz */ - } - else if ((sb.dsp.cmd&0xFE) == 0x16) { /* 2-bit ADPCM */ - if (sb.type == SBT_2) u_limit = 189; /* 15KHz */ - else u_limit = 165; /* 11KHz */ - } - else if (sb.type == SBT_16) /* Sound Blaster 16. Highspeed commands are treated like an alias to normal DSP commands */ - u_limit = 234/*45454Hz*/; - else if (sb.type == SBT_2) /* Sound Blaster 2.0 */ - u_limit = (sb.dsp.highspeed ? 234/*45454Hz*/ : 210/*22.5KHz*/); - else - u_limit = (sb.dsp.highspeed ? 234/*45454Hz*/ : 212/*22.5KHz*/); - - /* NTS: Don't forget: Sound Blaster Pro "stereo" is programmed with a time constant divided by - * two times the sample rate, which is what we get back here. That's why here we don't need - * to consider stereo vs mono. */ - if (sb.timeconst > u_limit) return u_limit; - } - - return sb.timeconst; -} - -static unsigned int DSP_RateLimitedFinalSB16Freq_New(unsigned int freq) { - /* If sample rate was set by DSP command 0x41/0x42 */ - if (sb.sample_rate_limits) { /* enforce speed limits documented by Creative... which are somewhat wrong. They are the same limits as high-speed playback modes on SB Pro and 2.0 */ - if (freq < 4900) - freq = 5000; /* Apparent behavior is that SB16 commands only go down to 5KHz but that limit is imposed if slightly below 5KHz, see rate graphs on Hackipedia */ - if (freq > 45454) - freq = 45454; - } +uint8_t SB_INFO::DSP_RateLimitedFinalTC_Old() { + if (sample_rate_limits) { /* enforce speed limits documented by Creative */ + /* commands that invoke this call use the DSP time constant, so use the DSP + * time constant to constrain rate */ + unsigned int u_limit=212;/* 23KHz */ - return freq; -} + /* NTS: We skip the SB16 commands because those are handled by another function */ + if ((dsp.cmd&0xFE) == 0x74 || dsp.cmd == 0x7D) { /* 4-bit ADPCM */ + u_limit = 172; /* 12KHz */ + } + else if ((dsp.cmd&0xFE) == 0x76) { /* 2.6-bit ADPCM */ + if (type == SBT_2) u_limit = 172; /* 12KHz */ + else u_limit = 179; /* 13KHz */ + } + else if ((dsp.cmd&0xFE) == 0x16) { /* 2-bit ADPCM */ + if (type == SBT_2) u_limit = 189; /* 15KHz */ + else u_limit = 165; /* 11KHz */ + } + else if (type == SBT_16) /* Sound Blaster 16. Highspeed commands are treated like an alias to normal DSP commands */ + u_limit = 234/*45454Hz*/; + else if (type == SBT_2) /* Sound Blaster 2.0 */ + u_limit = (dsp.highspeed ? 234/*45454Hz*/ : 210/*22.5KHz*/); + else + u_limit = (dsp.highspeed ? 234/*45454Hz*/ : 212/*22.5KHz*/); -static void DSP_PrepareDMA_Old(DMA_MODES mode,bool autoinit,bool sign,bool hispeed) { - /* this must be processed BEFORE forcing auto-init because the non-autoinit case provides the DSP transfer block size (fix for "Jump" by Public NMI) */ - if (!autoinit) sb.dma.total=1u+(unsigned int)sb.dsp.in.data[0]+(unsigned int)(sb.dsp.in.data[1] << 8u); - - if (sb.dma.force_autoinit) - autoinit = true; - - sb.dma.autoinit=autoinit; - sb.dsp.highspeed=hispeed; - sb.dma.sign=sign; - - /* BUGFIX: There is code out there that uses SB16 sample rate commands mixed with SB/SBPro - * playback commands. In order to handle these cases properly we need to use the - * SB16 sample rate if that is what was given to us, else the sample rate will - * come out wrong. - * - * Test cases: - * - * #1: Silpheed (vogons user newrisingsun amatorial patch) - */ - if (sb.freq_derived_from_tc) { - // sample rate was set by SB/SBpro command 0x40 Set Time Constant (very common case) - /* BUGFIX: Instead of direct rate-limiting the DSP time constant, keep the original - * value written intact and rate-limit a copy. Bugfix for Optic Nerve and - * sbtype=sbpro2. On initialization the demo first sends DSP command 0x14 - * with a 2-byte playback interval, then sends command 0x91 to begin - * playback. Rate-limiting the copy means the 45454Hz time constant written - * by the demo stays intact despite being limited to 22050Hz during the first - * DSP block (command 0x14). */ - uint8_t final_tc = DSP_RateLimitedFinalTC_Old(); - sb.freq = (256000000ul / (65536ul - ((unsigned long)final_tc << 8ul))); - } - else { - LOG(LOG_SB,LOG_DEBUG)("Guest is using non-SB16 playback commands after using SB16 commands to set sample rate"); - sb.freq = DSP_RateLimitedFinalSB16Freq_New(sb.freq); - } - - sb.dma_dac_mode=0; - sb.ess_playback_mode = false; - sb.dma.chan=GetDMAChannel(sb.hw.dma8); - DSP_DoDMATransfer(mode,sb.freq / (sb.mixer.stereo ? 2 : 1),sb.mixer.stereo); -} + /* NTS: Don't forget: Sound Blaster Pro "stereo" is programmed with a time constant divided by + * two times the sample rate, which is what we get back here. That's why here we don't need + * to consider stereo vs mono. */ + if (timeconst > u_limit) return u_limit; + } -static void DSP_PrepareDMA_New(DMA_MODES mode,Bitu length,bool autoinit,bool stereo) { - if (sb.dma.force_autoinit) - autoinit = true; - - /* apparently SB16 hardware allows 0xBx-0xCx 4.xx DSP commands to interrupt - * a previous SB16 playback command, DSP "nag" style. The difference is that - * if you do that you risk exploiting DMA and timing glitches in the chip that - * can cause funny things to happen, like causing 16-bit PCM to stop, or causing - * 8-bit stereo PCM to swap left/right channels because the host is using auto-init - * DMA and you interrupted the DSP chip when it fetched the L channel before it - * had a chance to latch it and begin loading the R channel. */ - if (sb.mode == MODE_DMA) { - if (!autoinit) sb.dma.total=length; - sb.dma.left=sb.dma.total; - sb.dma.autoinit=autoinit; - return; - } - - sb.dsp.highspeed = false; - sb.freq = DSP_RateLimitedFinalSB16Freq_New(sb.freq); - sb.timeconst = (65536 - (256000000 / sb.freq)) >> 8; - sb.freq_derived_from_tc = false; - - Bitu freq=sb.freq; - //equal length if data format and dma channel are both 16-bit or 8-bit - sb.dma_dac_mode=0; - sb.dma.total=length; - sb.dma.autoinit=autoinit; - sb.ess_playback_mode = false; - if (mode==DSP_DMA_16) { - if (sb.hw.dma16 == 0xff || sb.hw.dma16 == sb.hw.dma8) { /* 16-bit DMA not assigned or same as 8-bit channel */ - sb.dma.chan=GetDMAChannel(sb.hw.dma8); - mode=DSP_DMA_16_ALIASED; - //UNDOCUMENTED: - //In aliased mode sample length is written to DSP as number of - //16-bit samples so we need double 8-bit DMA buffer length - sb.dma.total<<=1; - } - else if (sb.hw.dma16 >= 4) { /* 16-bit DMA assigned to 16-bit DMA channel */ - sb.dma.chan=GetDMAChannel(sb.hw.dma16); - } - else { - /* Nope. According to one ViBRA PnP card I have on hand, asking the - * card to do 16-bit DMA over 8-bit DMA only works if they are the - * same channel, otherwise, the card doesn't seem to carry out any - * DMA fetching. */ - sb.dma.chan=NULL; - return; - } - } else { - sb.dma.chan=GetDMAChannel(sb.hw.dma8); - } - - DSP_DoDMATransfer(mode,freq,stereo); + return timeconst; } +unsigned int SB_INFO::DSP_RateLimitedFinalSB16Freq_New(unsigned int freq) { + /* If sample rate was set by DSP command 0x41/0x42 */ + if (sample_rate_limits) { /* enforce speed limits documented by Creative... which are somewhat wrong. They are the same limits as high-speed playback modes on SB Pro and 2.0 */ + if (freq < 4900) + freq = 5000; /* Apparent behavior is that SB16 commands only go down to 5KHz but that limit is imposed if slightly below 5KHz, see rate graphs on Hackipedia */ + if (freq > 45454) + freq = 45454; + } -static void DSP_AddData(uint8_t val) { - if (sb.dsp.out.used=DSP_BUFSIZE) start-=DSP_BUFSIZE; - sb.dsp.out.data[start]=val; - sb.dsp.out.used++; - } else { - LOG(LOG_SB,LOG_ERROR)("DSP:Data Output buffer full"); - } + return freq; } -static void DSP_BusyComplete(Bitu /*val*/) { - sb.dsp.write_busy = 0; +void SB_INFO::DSP_AddData(uint8_t val) { + if (dsp.out.used=DSP_BUFSIZE) start-=DSP_BUFSIZE; + dsp.out.data[start]=val; + dsp.out.used++; + } else { + LOG(LOG_SB,LOG_ERROR)("DSP:Data Output buffer full"); + } } -static void DSP_FinishReset(Bitu /*val*/) { - DSP_FlushData(); - DSP_AddData(0xaa); - sb.dsp.state=DSP_S_NORMAL; +uint8_t SB_INFO::DSP_ReadData(void) { + /* Static so it repeats the last value on successive reads (JANGLE DEMO) */ + if (dsp.out.used) { + dsp.out.lastval=dsp.out.data[dsp.out.pos]; + dsp.out.pos++; + if (dsp.out.pos>=DSP_BUFSIZE) dsp.out.pos-=DSP_BUFSIZE; + dsp.out.used--; + } + return dsp.out.lastval; } -static void DSP_Reset(void) { - LOG(LOG_SB,LOG_NORMAL)("DSP:Reset"); - PIC_DeActivateIRQ(sb.hw.irq); - - DSP_ChangeMode(MODE_NONE); - DSP_FlushData(); - sb.dsp.cmd=DSP_NO_COMMAND; - sb.dsp.cmd_len=0; - sb.dsp.in.pos=0; - sb.dsp.out.pos=0; - sb.dsp.write_busy=0; - sb.ess_extended_mode = false; - sb.ess_playback_mode = false; - sb.single_sample_dma = 0; - sb.dma_dac_mode = 0; - sb.directdac_warn_speaker_off = true; - PIC_RemoveEvents(DSP_FinishReset); - PIC_RemoveEvents(DSP_BusyComplete); - - sb.dma.left=0; - sb.dma.total=0; - sb.dma.stereo=false; - sb.dma.recording=false; - sb.dma.sign=false; - sb.dma.autoinit=false; - sb.dma.mode=sb.dma.mode_assigned=DSP_DMA_NONE; - sb.dma.remain_size=0; - if (sb.dma.chan) sb.dma.chan->Clear_Request(); - - gen_input_reset(); - - sb.dsp.midi_rwpoll_mode = false; - sb.dsp.midi_read_interrupt = false; - sb.dsp.midi_read_with_timestamps = false; - - sb.freq=22050; - sb.freq_derived_from_tc=true; - sb.time_constant=45; - sb.dac.last=0; - sb.e2.valadd=0xaa; - sb.e2.valxor=0x96; - sb.dsp.highspeed=0; - sb.irq.pending_8bit=false; - sb.irq.pending_16bit=false; - sb.chan->SetFreq(22050); - updateSoundBlasterFilter(22050); -// DSP_SetSpeaker(false); - PIC_RemoveEvents(END_DMA_Event); - PIC_RemoveEvents(DMA_DAC_Event); -} +void SB_INFO::DSP_PrepareDMA_Old(DMA_MODES mode,bool autoinit,bool sign,bool hispeed) { + /* this must be processed BEFORE forcing auto-init because the non-autoinit case provides the DSP transfer block size (fix for "Jump" by Public NMI) */ + if (!autoinit) dma.total=1u+(unsigned int)dsp.in.data[0]+(unsigned int)(dsp.in.data[1] << 8u); + + if (dma.force_autoinit) + autoinit = true; + + dma.autoinit=autoinit; + dsp.highspeed=hispeed; + dma.sign=sign; + + /* BUGFIX: There is code out there that uses SB16 sample rate commands mixed with SB/SBPro + * playback commands. In order to handle these cases properly we need to use the + * SB16 sample rate if that is what was given to us, else the sample rate will + * come out wrong. + * + * Test cases: + * + * #1: Silpheed (vogons user newrisingsun amatorial patch) + */ + if (freq_derived_from_tc) { + // sample rate was set by SB/SBpro command 0x40 Set Time Constant (very common case) + /* BUGFIX: Instead of direct rate-limiting the DSP time constant, keep the original + * value written intact and rate-limit a copy. Bugfix for Optic Nerve and + * sbtype=sbpro2. On initialization the demo first sends DSP command 0x14 + * with a 2-byte playback interval, then sends command 0x91 to begin + * playback. Rate-limiting the copy means the 45454Hz time constant written + * by the demo stays intact despite being limited to 22050Hz during the first + * DSP block (command 0x14). */ + const uint8_t final_tc = DSP_RateLimitedFinalTC_Old(); + freq = (256000000ul / (65536ul - ((unsigned long)final_tc << 8ul))); + } + else { + LOG(LOG_SB,LOG_DEBUG)("Guest is using non-SB16 playback commands after using SB16 commands to set sample rate"); + freq = DSP_RateLimitedFinalSB16Freq_New(freq); + } -static void DSP_DoReset(uint8_t val) { - if (((val&1)!=0) && (sb.dsp.state!=DSP_S_RESET)) { -//TODO Get out of highspeed mode - DSP_Reset(); - sb.dsp.state=DSP_S_RESET; - } else if (((val&1)==0) && (sb.dsp.state==DSP_S_RESET)) { // reset off - sb.dsp.state=DSP_S_RESET_WAIT; - PIC_RemoveEvents(DSP_FinishReset); - PIC_AddEvent(DSP_FinishReset,20.0f/1000.0f,0); // 20 microseconds - } - sb.dsp.write_busy = 0; + dma_dac_mode=0; + ess_playback_mode = false; + dma.chan=GetDMAChannel(hw.dma8); + dma.chan->userData = card_index; + DSP_DoDMATransfer(mode,freq / (mixer.stereo ? 2 : 1),mixer.stereo); } -static void DSP_E2_DMA_CallBack(DmaChannel * /*chan*/, DMAEvent event) { - if (event==DMA_UNMASKED) { - uint8_t val = sb.e2.valadd; - DmaChannel * chan=GetDMAChannel(sb.hw.dma8); - chan->Register_Callback(nullptr); - chan->Write(1,&val); - } -} +void SB_INFO::DSP_PrepareDMA_New(DMA_MODES new_mode,Bitu length,bool autoinit,bool stereo) { + if (dma.force_autoinit) + autoinit = true; + + /* apparently SB16 hardware allows 0xBx-0xCx 4.xx DSP commands to interrupt + * a previous SB16 playback command, DSP "nag" style. The difference is that + * if you do that you risk exploiting DMA and timing glitches in the chip that + * can cause funny things to happen, like causing 16-bit PCM to stop, or causing + * 8-bit stereo PCM to swap left/right channels because the host is using auto-init + * DMA and you interrupted the DSP chip when it fetched the L channel before it + * had a chance to latch it and begin loading the R channel. */ + if (mode == MODE_DMA) { + if (!autoinit) dma.total=length; + dma.left=dma.total; + dma.autoinit=autoinit; + return; + } -Bitu DEBUG_EnableDebugger(void); + dsp.highspeed = false; + freq = DSP_RateLimitedFinalSB16Freq_New(freq); + timeconst = (65536 - (256000000 / freq)) >> 8; + freq_derived_from_tc = false; + + const Bitu saved_freq=freq; + //equal length if data format and dma channel are both 16-bit or 8-bit + dma_dac_mode=0; + dma.total=length; + dma.autoinit=autoinit; + ess_playback_mode = false; + if (new_mode==DSP_DMA_16) { + if (hw.dma16 == 0xff || hw.dma16 == hw.dma8) { /* 16-bit DMA not assigned or same as 8-bit channel */ + dma.chan=GetDMAChannel(hw.dma8); + dma.chan->userData = card_index; + new_mode=DSP_DMA_16_ALIASED; + //UNDOCUMENTED: + //In aliased mode sample length is written to DSP as number of + //16-bit samples so we need double 8-bit DMA buffer length + dma.total<<=1; + } + else if (hw.dma16 >= 4) { /* 16-bit DMA assigned to 16-bit DMA channel */ + dma.chan=GetDMAChannel(hw.dma16); + dma.chan->userData = card_index; + } + else { + /* Nope. According to one ViBRA PnP card I have on hand, asking the + * card to do 16-bit DMA over 8-bit DMA only works if they are the + * same channel, otherwise, the card doesn't seem to carry out any + * DMA fetching. */ + dma.chan=NULL; + return; + } + } else { + dma.chan=GetDMAChannel(hw.dma8); + dma.chan->userData = card_index; + } -static void DSP_SC400_E6_DMA_CallBack(DmaChannel * /*chan*/, DMAEvent event) { - if (event==DMA_UNMASKED) { - static const char *string = "\x01\x02\x04\x08\x10\x20\x40\x80"; /* Confirmed response via DMA from actual Reveal SC400 card */ - DmaChannel * chan=GetDMAChannel(sb.hw.dma8); - LOG(LOG_SB,LOG_DEBUG)("SC400 returning DMA test pattern on DMA channel=%u",sb.hw.dma8); - chan->Register_Callback(nullptr); - chan->Write(8,(uint8_t*)string); - chan->Clear_Request(); - if (!chan->tcount) LOG(LOG_SB,LOG_DEBUG)("SC400 warning: DMA did not reach terminal count"); - SB_RaiseIRQ(SB_IRQ_8); - } + DSP_DoDMATransfer(new_mode,saved_freq,stereo); } -static void DSP_ADC_CallBack(DmaChannel * /*chan*/, DMAEvent event) { - if (event!=DMA_UNMASKED) return; - uint8_t val=128; - DmaChannel * ch=GetDMAChannel(sb.hw.dma8); - while (sb.dma.left--) { - ch->Write(1,&val); - } - SB_RaiseIRQ(SB_IRQ_8); - ch->Register_Callback(nullptr); +void SB_INFO::DSP_Reset(void) { + LOG(LOG_SB,LOG_NORMAL)("DSP:Reset"); + PIC_DeActivateIRQ(hw.irq); + + DSP_ChangeMode(MODE_NONE); + DSP_FlushData(); + dsp.cmd=DSP_NO_COMMAND; + dsp.cmd_len=0; + dsp.in.pos=0; + dsp.out.pos=0; + dsp.write_busy=0; + ess_extended_mode = false; + ess_playback_mode = false; + single_sample_dma = 0; + dma_dac_mode = 0; + directdac_warn_speaker_off = true; + PIC_RemoveEvents(DSP_FinishReset); + PIC_RemoveEvents(DSP_BusyComplete); + + dma.left=0; + dma.total=0; + dma.stereo=false; + dma.recording=false; + dma.sign=false; + dma.autoinit=false; + dma.mode=dma.mode_assigned=DSP_DMA_NONE; + dma.remain_size=0; + if (dma.chan) dma.chan->Clear_Request(); + + /* reset must clear the DSP command E2h and E5h DMA handlers */ + { + DmaChannel *chan = GetDMAChannel(hw.dma8); + if (chan) { + if (chan->callback == DSP_SC400_E6_DMA_CallBack || chan->callback == DSP_E2_DMA_CallBack) { + LOG(LOG_SB,LOG_DEBUG)("DSP reset interrupting E2/E5h DMA commands"); + chan->Register_Callback(nullptr); + } + } + } + + gen_input_reset(); + + dsp.midi_rwpoll_mode = false; + dsp.midi_read_interrupt = false; + dsp.midi_read_with_timestamps = false; + + freq=22050; + freq_derived_from_tc=true; + time_constant=45; + dac.last=0; + e2.valadd=0xaa; + e2.valxor=0x96; + dsp.highspeed=0; + irq.pending_8bit=false; + irq.pending_16bit=false; + chan->SetFreq(22050); + updateSoundBlasterFilter(22050); + // DSP_SetSpeaker(false); + PIC_RemoveEvents(END_DMA_Event); + PIC_RemoveEvents(DMA_DAC_Event); } -static void DSP_ChangeRate(Bitu freq) { - if (sb.freq!=freq && sb.dma.mode!=DSP_DMA_NONE) { - sb.chan->FillUp(); - sb.chan->SetFreq(freq / (sb.mixer.stereo ? 2 : 1)); - sb.dma.rate=(freq*sb.dma.mul) >> SB_SH; - sb.dma.min=(sb.dma.rate*3)/1000; +void SB_INFO::DSP_DoReset(uint8_t val) { + if (((val&1)!=0) && (dsp.state!=DSP_S_RESET)) { + //TODO Get out of highspeed mode + DSP_Reset(); + dsp.state=DSP_S_RESET; + } else if (((val&1)==0) && (dsp.state==DSP_S_RESET)) { // reset off + dsp.state=DSP_S_RESET_WAIT; + PIC_RemoveEvents(DSP_FinishReset); + PIC_AddEvent(DSP_FinishReset,20.0f/1000.0f,(card_index << CARD_INDEX_BIT)); // 20 microseconds } - sb.freq=freq; + dsp.write_busy = 0; } -Bitu DEBUG_EnableDebugger(void); - -#define DSP_SB16_ONLY if (sb.type != SBT_16) { LOG(LOG_SB,LOG_ERROR)("DSP:Command %2X requires SB16",sb.dsp.cmd); break; } -#define DSP_SB2_ABOVE if (sb.type <= SBT_1) { LOG(LOG_SB,LOG_ERROR)("DSP:Command %2X requires SB2 or above",sb.dsp.cmd); break; } -#define DSP_SB201_ABOVE if (sb.type <= SBT_1 || (sb.type == SBT_2 && sb.subtype == SBST_200)) { LOG(LOG_SB,LOG_ERROR)("DSP:Command %2X requires SB2.01 or above",sb.dsp.cmd); break; } +void SB_INFO::DSP_ChangeRate(Bitu new_freq) { + if (freq!=new_freq && dma.mode!=DSP_DMA_NONE) { + chan->FillUp(); + chan->SetFreq(new_freq / (mixer.stereo ? 2 : 1)); + dma.rate=(new_freq*dma.mul) >> SB_SH; + dma.min=(dma.rate*3)/1000; + } + freq = new_freq; +} -static unsigned int ESS_DMATransferCount() { - unsigned int r; +unsigned int SB_INFO::ESS_DMATransferCount() { + unsigned int r; - r = (unsigned int)ESSreg(0xA5) << 8U; - r |= (unsigned int)ESSreg(0xA4); + r = (unsigned int)ESSreg(0xA5) << 8U; + r |= (unsigned int)ESSreg(0xA4); - /* the 16-bit counter is a "two's complement" of the DMA count because it counts UP to 0 and triggers IRQ on overflow */ - return 0x10000U-r; + /* the 16-bit counter is a "two's complement" of the DMA count because it counts UP to 0 and triggers IRQ on overflow */ + return 0x10000U-r; } -static void ESS_StartDMA() { - LOG(LOG_SB,LOG_DEBUG)("ESS DMA start"); - sb.dma_dac_mode = 0; - sb.dma.chan = GetDMAChannel(sb.hw.dma8); - sb.dma.recording = (ESSreg(0xB8) & 8/*ADC mode*/) > 0; - if (sb.dma.chan) sb.dma.chan->Raise_Request(); - // FIXME: Which bit(s) are responsible for signalling stereo? - // Is it bit 3 of the Analog Control? - // Is it bit 3/6 of the Audio Control 1? - // Is it both? - // NTS: ESS chipsets always use the 8-bit DMA channel, even for 16-bit PCM. - // NTS: ESS chipsets also do not cap the sample rate, though if you drive them - // too fast the ISA bus will effectively cap the sample rate at some - // rate above 48KHz to 60KHz anyway. - DSP_DoDMATransfer( - (ESSreg(0xB7/*Audio Control 1*/)&4)?DSP_DMA_16_ALIASED:DSP_DMA_8, - sb.freq,(ESSreg(0xA8/*Analog control*/)&3)==1?1:0/*stereo*/,true/*don't change dma.left*/); - sb.mode = MODE_DMA; - sb.ess_playback_mode = true; +void SB_INFO::ESS_StartDMA() { + LOG(LOG_SB,LOG_DEBUG)("ESS DMA start"); + dma_dac_mode = 0; + dma.chan = GetDMAChannel(hw.dma8); + dma.chan->userData = card_index; + dma.recording = (ESSreg(0xB8) & 8/*ADC mode*/) > 0; + if (dma.chan) dma.chan->Raise_Request(); + // FIXME: Which bit(s) are responsible for signalling stereo? + // Is it bit 3 of the Analog Control? + // Is it bit 3/6 of the Audio Control 1? + // Is it both? + // NTS: ESS chipsets always use the 8-bit DMA channel, even for 16-bit PCM. + // NTS: ESS chipsets also do not cap the sample rate, though if you drive them + // too fast the ISA bus will effectively cap the sample rate at some + // rate above 48KHz to 60KHz anyway. + DSP_DoDMATransfer( + (ESSreg(0xB7/*Audio Control 1*/)&4)?DSP_DMA_16_ALIASED:DSP_DMA_8, + freq,(ESSreg(0xA8/*Analog control*/)&3)==1?1:0/*stereo*/,true/*don't change dma.left*/); + mode = MODE_DMA; + ess_playback_mode = true; } -static void ESS_StopDMA() { - // DMA stop - DSP_ChangeMode(MODE_NONE); - if (sb.dma.chan) sb.dma.chan->Clear_Request(); - PIC_RemoveEvents(END_DMA_Event); - PIC_RemoveEvents(DMA_DAC_Event); +void SB_INFO::ESS_StopDMA() { + // DMA stop + DSP_ChangeMode(MODE_NONE); + if (dma.chan) dma.chan->Clear_Request(); + PIC_RemoveEvents(END_DMA_Event); + PIC_RemoveEvents(DMA_DAC_Event); } -static void ESS_UpdateDMATotal() { - sb.dma.total = ESS_DMATransferCount(); +void SB_INFO::ESS_UpdateDMATotal() { + dma.total = ESS_DMATransferCount(); } -static void ESS_CheckDMAEnable() { - bool dma_en = (ESSreg(0xB8) & 1)?true:false; +void SB_INFO::ESS_CheckDMAEnable() { + bool dma_en = (ESSreg(0xB8) & 1)?true:false; - // if the DRQ is disabled, do not start - if (!(ESSreg(0xB2) & 0x40)) - dma_en = false; + // if the DRQ is disabled, do not start + if (!(ESSreg(0xB2) & 0x40)) + dma_en = false; - if (ESSreg(0xB8) & 8) LOG(LOG_SB,LOG_WARN)("Guest recording audio using ESS commands"); + if (ESSreg(0xB8) & 8) LOG(LOG_SB,LOG_WARN)("Guest recording audio using ESS commands"); - if (!!(ESSreg(0xB8) & 8/*ADC mode*/) != !!(ESSreg(0xB8) & 2/*DMA read*/)) LOG(LOG_SB,LOG_WARN)("ESS DMA direction vs ADC mismatch"); + if (!!(ESSreg(0xB8) & 8/*ADC mode*/) != !!(ESSreg(0xB8) & 2/*DMA read*/)) LOG(LOG_SB,LOG_WARN)("ESS DMA direction vs ADC mismatch"); - if (dma_en) { - if (sb.mode != MODE_DMA) ESS_StartDMA(); - } - else { - if (sb.mode == MODE_DMA) ESS_StopDMA(); - } + if (dma_en) { + if (mode != MODE_DMA) ESS_StartDMA(); + } + else { + if (mode == MODE_DMA) ESS_StopDMA(); + } } -static void ESSUpdateFilterFromSB(void) { - if (sb.freq >= 22050) - ESSreg(0xA1) = 256 - (795500UL / sb.freq); - else - ESSreg(0xA1) = 128 - (397700UL / sb.freq); +void SB_INFO::ESSUpdateFilterFromSB(void) { + if (freq >= 22050) + ESSreg(0xA1) = 256 - (795500UL / freq); + else + ESSreg(0xA1) = 128 - (397700UL / freq); - unsigned int freq = ((sb.freq * 4) / (5 * 2)); /* 80% of 1/2 the sample rate */ - ESSreg(0xA2) = 256 - (7160000 / (freq * 82)); + const unsigned int new_freq = ((freq * 4) / (5 * 2)); /* 80% of 1/2 the sample rate */ + ESSreg(0xA2) = 256 - (7160000 / (new_freq * 82)); } -static void ESS_DoWrite(uint8_t reg,uint8_t data) { - uint8_t chg; - - LOG(LOG_SB,LOG_DEBUG)("ESS register write reg=%02xh val=%02xh",reg,data); - - switch (reg) { - case 0xA1: /* Extended Mode Sample Rate Generator */ - ESSreg(reg) = data; - if (data & 0x80) - sb.freq = 795500UL / (256ul - data); - else - sb.freq = 397700UL / (128ul - data); - - sb.freq_derived_from_tc = false; - if (sb.mode == MODE_DMA) { - ESS_StopDMA(); - ESS_StartDMA(); - } - break; - case 0xA2: /* Filter divider (effectively, a hardware lowpass filter under S/W control) */ - ESSreg(reg) = data; - updateSoundBlasterFilter(sb.freq); - break; - case 0xA4: /* DMA Transfer Count Reload (low) */ - case 0xA5: /* DMA Transfer Count Reload (high) */ - ESSreg(reg) = data; - ESS_UpdateDMATotal(); - if (sb.dma.left == 0) sb.dma.left = sb.dma.total; - break; - case 0xA8: /* Analog Control */ - /* bits 7:5 0 Reserved. Always write 0 - * bit 4 1 Reserved. Always write 1 - * bit 3 Record monitor 1=Enable record monitor - * enable - * bit 2 0 Reserved. Always write 0 - * bits 1:0 Stereo/mono select 00=Reserved - * 01=Stereo - * 10=Mono - * 11=Reserved */ - chg = ESSreg(reg) ^ data; - ESSreg(reg) = data; - if (chg & 0x3) { - if (sb.mode == MODE_DMA) { - ESS_StopDMA(); - ESS_StartDMA(); - } - } - break; - case 0xB1: /* Legacy Audio Interrupt Control */ - case 0xB2: /* DRQ Control */ - chg = ESSreg(reg) ^ data; - ESSreg(reg) = (ESSreg(reg) & 0x0F) + (data & 0xF0); // lower 4 bits not writeable - if (chg & 0x40) ESS_CheckDMAEnable(); - break; - case 0xB5: /* DAC Direct Access Holding (low) */ - case 0xB6: /* DAC Direct Access Holding (high) */ - ESSreg(reg) = data; - break; - case 0xB7: /* Audio 1 Control 1 */ - /* bit 7 Enable FIFO to/from codec - * bit 6 Opposite from bit 3 Must be set opposite to bit 3 - * bit 5 FIFO signed mode 1=Data is signed twos-complement 0=Data is unsigned - * bit 4 Reserved Always write 1 - * bit 3 FIFO stereo mode 1=Data is stereo - * bit 2 FIFO 16-bit mode 1=Data is 16-bit - * bit 1 Reserved Always write 0 - * bit 0 Generate load signal */ - chg = ESSreg(reg) ^ data; - ESSreg(reg) = data; - sb.dma.sign = (data&0x20)?1:0; - if (chg & 0x04) ESS_UpdateDMATotal(); - if (chg & 0x0C) { - if (sb.mode == MODE_DMA) { - ESS_StopDMA(); - ESS_StartDMA(); - } - } - break; - case 0xB8: /* Audio 1 Control 2 */ - /* bits 7:4 reserved - * bit 3 CODEC mode 1=first DMA converter in ADC mode - * 0=first DMA converter in DAC mode - * bit 2 DMA mode 1=auto-initialize mode - * 0=normal DMA mode - * bit 1 DMA read enable 1=first DMA is read (for ADC) - * 0=first DMA is write (for DAC) - * bit 0 DMA xfer enable 1=DMA is allowed to proceed */ - data &= 0xF; - chg = ESSreg(reg) ^ data; - ESSreg(reg) = data; - - /* FIXME: This is a guess */ - if (chg & 1) sb.dma.left = sb.dma.total; - - sb.dma.autoinit = (data >> 2) & 1; - if (chg & 0xB) { - if (chg & 0xA) ESS_StopDMA(); /* changing capture/playback direction? stop DMA to reinit */ - ESS_CheckDMAEnable(); - } - break; - case 0xB9: /* Audio 1 Transfer Type */ - case 0xBA: /* Left Channel ADC Offset Adjust */ - case 0xBB: /* Right Channel ADC Offset Adjust */ - ESSreg(reg) = data; - break; - } -} +void SB_INFO::ESS_DoWrite(uint8_t reg,uint8_t data) { + uint8_t chg; -static uint8_t ESS_DoRead(uint8_t reg) { - LOG(LOG_SB,LOG_DEBUG)("ESS register read reg=%02xh",reg); + LOG(LOG_SB,LOG_DEBUG)("ESS register write reg=%02xh val=%02xh",reg,data); - switch (reg) { - default: - return ESSreg(reg); - } + switch (reg) { + case 0xA1: /* Extended Mode Sample Rate Generator */ + ESSreg(reg) = data; + if (data & 0x80) + freq = 795500UL / (256ul - data); + else + freq = 397700UL / (128ul - data); - return 0xFF; + freq_derived_from_tc = false; + if (mode == MODE_DMA) { + ESS_StopDMA(); + ESS_StartDMA(); + } + break; + case 0xA2: /* Filter divider (effectively, a hardware lowpass filter under S/W control) */ + ESSreg(reg) = data; + updateSoundBlasterFilter(freq); + break; + case 0xA4: /* DMA Transfer Count Reload (low) */ + case 0xA5: /* DMA Transfer Count Reload (high) */ + ESSreg(reg) = data; + ESS_UpdateDMATotal(); + if (dma.left == 0) dma.left = dma.total; + break; + case 0xA8: /* Analog Control */ + /* bits 7:5 0 Reserved. Always write 0 + * bit 4 1 Reserved. Always write 1 + * bit 3 Record monitor 1=Enable record monitor + * enable + * bit 2 0 Reserved. Always write 0 + * bits 1:0 Stereo/mono select 00=Reserved + * 01=Stereo + * 10=Mono + * 11=Reserved */ + chg = ESSreg(reg) ^ data; + ESSreg(reg) = data; + if (chg & 0x3) { + if (mode == MODE_DMA) { + ESS_StopDMA(); + ESS_StartDMA(); + } + } + break; + case 0xB1: /* Legacy Audio Interrupt Control */ + case 0xB2: /* DRQ Control */ + chg = ESSreg(reg) ^ data; + ESSreg(reg) = (ESSreg(reg) & 0x0F) + (data & 0xF0); // lower 4 bits not writeable + if (chg & 0x40) ESS_CheckDMAEnable(); + break; + case 0xB5: /* DAC Direct Access Holding (low) */ + case 0xB6: /* DAC Direct Access Holding (high) */ + ESSreg(reg) = data; + break; + case 0xB7: /* Audio 1 Control 1 */ + /* bit 7 Enable FIFO to/from codec + * bit 6 Opposite from bit 3 Must be set opposite to bit 3 + * bit 5 FIFO signed mode 1=Data is signed twos-complement 0=Data is unsigned + * bit 4 Reserved Always write 1 + * bit 3 FIFO stereo mode 1=Data is stereo + * bit 2 FIFO 16-bit mode 1=Data is 16-bit + * bit 1 Reserved Always write 0 + * bit 0 Generate load signal */ + chg = ESSreg(reg) ^ data; + ESSreg(reg) = data; + dma.sign = (data&0x20)?1:0; + if (chg & 0x04) ESS_UpdateDMATotal(); + if (chg & 0x0C) { + if (mode == MODE_DMA) { + ESS_StopDMA(); + ESS_StartDMA(); + } + } + break; + case 0xB8: /* Audio 1 Control 2 */ + /* bits 7:4 reserved + * bit 3 CODEC mode 1=first DMA converter in ADC mode + * 0=first DMA converter in DAC mode + * bit 2 DMA mode 1=auto-initialize mode + * 0=normal DMA mode + * bit 1 DMA read enable 1=first DMA is read (for ADC) + * 0=first DMA is write (for DAC) + * bit 0 DMA xfer enable 1=DMA is allowed to proceed */ + data &= 0xF; + chg = ESSreg(reg) ^ data; + ESSreg(reg) = data; + + /* FIXME: This is a guess */ + if (chg & 1) dma.left = dma.total; + + dma.autoinit = (data >> 2) & 1; + if (chg & 0xB) { + if (chg & 0xA) ESS_StopDMA(); /* changing capture/playback direction? stop DMA to reinit */ + ESS_CheckDMAEnable(); + } + break; + case 0xB9: /* Audio 1 Transfer Type */ + case 0xBA: /* Left Channel ADC Offset Adjust */ + case 0xBB: /* Right Channel ADC Offset Adjust */ + ESSreg(reg) = data; + break; + } } -int MPU401_GetIRQ(); - -/* SB16 cards have a 256-byte block of 8051 internal RAM accessible through DSP commands 0xF9 (Read) and 0xFA (Write) */ -static unsigned char sb16_8051_mem[256]; +uint8_t SB_INFO::ESS_DoRead(uint8_t reg) { + LOG(LOG_SB,LOG_DEBUG)("ESS register read reg=%02xh",reg); -/* The SB16 ASP appears to have a mystery 2KB RAM block that is accessible through register 0x83 of the ASP. - * This array represents the initial contents as seen on my SB16 non-PnP ASP chip (version ID 0x10). */ -static unsigned int sb16asp_ram_contents_index = 0; -static unsigned char sb16asp_ram_contents[2048]; + switch (reg) { + default: + return ESSreg(reg); + } -static void sb16asp_write_current_RAM_byte(const uint8_t r) { - sb16asp_ram_contents[sb16asp_ram_contents_index] = r; + return 0xFF; } -static uint8_t sb16asp_read_current_RAM_byte(void) { - return sb16asp_ram_contents[sb16asp_ram_contents_index]; +void SB_INFO::sb16asp_write_current_RAM_byte(const uint8_t r) { + sb16asp_ram_contents[sb16asp_ram_contents_index] = r; } -static void sb16asp_next_RAM_byte(void) { - if ((++sb16asp_ram_contents_index) >= 2048) - sb16asp_ram_contents_index = 0; +uint8_t SB_INFO::sb16asp_read_current_RAM_byte(void) { + return sb16asp_ram_contents[sb16asp_ram_contents_index]; } -/* Demo notes for fixing: - * - * - "Buttman"'s intro uses a timer and DSP command 0x10 to play the sound effects even in Pro mode. - * It doesn't use DMA + IRQ until the music starts. - */ - -static void DSP_DoCommand(void) { - if (sb.ess_type != ESS_NONE && sb.dsp.cmd >= 0xA0 && sb.dsp.cmd <= 0xCF) { - // ESS overlap with SB16 commands. Handle it here, not mucking up the switch statement. - - if (sb.dsp.cmd < 0xC0) { // write ESS register (cmd=register data[0]=value to write) - if (sb.ess_extended_mode) - ESS_DoWrite(sb.dsp.cmd,sb.dsp.in.data[0]); - } - else if (sb.dsp.cmd == 0xC0) { // read ESS register (data[0]=register to read) - DSP_FlushData(); - if (sb.ess_extended_mode && sb.dsp.in.data[0] >= 0xA0 && sb.dsp.in.data[0] <= 0xBF) - DSP_AddData(ESS_DoRead(sb.dsp.in.data[0])); - } - else if (sb.dsp.cmd == 0xC6 || sb.dsp.cmd == 0xC7) { // set(0xC6) clear(0xC7) extended mode - sb.ess_extended_mode = (sb.dsp.cmd == 0xC6); - } - else { - LOG(LOG_SB,LOG_DEBUG)("ESS: Unknown command %02xh",sb.dsp.cmd); - } - - sb.dsp.last_cmd=sb.dsp.cmd; - sb.dsp.cmd=DSP_NO_COMMAND; - sb.dsp.cmd_len=0; - sb.dsp.in.pos=0; - return; - } - - if (sb.type == SBT_16) { - // FIXME: This is a guess! See also [https://github.com/joncampbell123/dosbox-x/issues/1044#issuecomment-480024957] - sb16_8051_mem[0x20] = sb.dsp.last_cmd; /* cur_cmd */ - } - - // TODO: There are more SD16 ASP commands we can implement, by name even, with microcode download, - // using as reference the Linux kernel driver code: - // - // http://lxr.free-electrons.com/source/sound/isa/sb/sb16_csp.c - -// LOG_MSG("DSP Command %X",sb.dsp.cmd); - switch (sb.dsp.cmd) { - case 0x04: - if (sb.type == SBT_16) { - /* SB16 ASP set mode register */ - ASP_mode = sb.dsp.in.data[0]; - - // bit 7: if set, enables bit 3 and memory access. - // bit 3: if set, and bit 7 is set, register 0x83 can be used to read/write ASP internal memory. if clear, register 0x83 contains chip version ID - // bit 2: if set, memory index is reset to 0. doesn't matter if memory access or not. - // bit 1: if set, writing register 0x83 increments memory index. doesn't matter if memory access or not. - // bit 0: if set, reading register 0x83 increments memory index. doesn't matter if memory access or not. - if (ASP_mode&4) - sb16asp_ram_contents_index = 0; - - LOG(LOG_SB,LOG_DEBUG)("SB16ASP set mode register to %X",sb.dsp.in.data[0]); - } else { - /* DSP Status SB 2.0/pro version. NOT SB16. */ - DSP_FlushData(); - if (sb.type == SBT_2) DSP_AddData(0x88); - else if ((sb.type == SBT_PRO1) || (sb.type == SBT_PRO2)) DSP_AddData(0x7b); - else DSP_AddData(0xff); //Everything enabled - } - break; - case 0x05: /* SB16 ASP set codec parameter */ - LOG(LOG_SB,LOG_NORMAL)("DSP Unhandled SB16ASP command %X (set codec parameter) value=0x%02x parameter=0x%02x", - sb.dsp.cmd,sb.dsp.in.data[0],sb.dsp.in.data[1]); - break; - case 0x08: /* SB16 ASP get version */ - if (sb.type == SBT_16) { - switch (sb.dsp.in.data[0]) { - case 0x03: - LOG(LOG_SB,LOG_DEBUG)("DSP SB16ASP command %X sub %X (get chip version)",sb.dsp.cmd,sb.dsp.in.data[0]); - - if (sb.enable_asp) - DSP_AddData(0x10); // version ID - else - DSP_AddData(0xFF); // NTS: This is what a SB16 ViBRA PnP card with no ASP returns when queried in this way - break; - default: - LOG(LOG_SB,LOG_NORMAL)("DSP Unhandled SB16ASP command %X sub %X",sb.dsp.cmd,sb.dsp.in.data[0]); - break; - } - } else { - LOG(LOG_SB,LOG_NORMAL)("DSP Unhandled SB16ASP command %X sub %X",sb.dsp.cmd,sb.dsp.in.data[0]); - } - break; - case 0x0e: /* SB16 ASP set register */ - if (sb.type == SBT_16) { - if (sb.enable_asp) { - ASP_regs[sb.dsp.in.data[0]] = sb.dsp.in.data[1]; - - if (sb.dsp.in.data[0] == 0x83) { - if ((ASP_mode&0x88) == 0x88) { // bit 3 and bit 7 must be set - // memory access mode - if (ASP_mode & 4) // NTS: As far as I can tell... - sb16asp_ram_contents_index = 0; - - // log it, write it - LOG(LOG_SB,LOG_DEBUG)("SB16 ASP write internal RAM byte index=0x%03x val=0x%02x",sb16asp_ram_contents_index,sb.dsp.in.data[1]); - sb16asp_write_current_RAM_byte(sb.dsp.in.data[1]); - - if (ASP_mode & 2) // if bit 1 of the mode is set, memory index increment on write - sb16asp_next_RAM_byte(); - } - else { - // unknown. nothing, I assume? - LOG(LOG_SB,LOG_WARN)("SB16 ASP set register 0x83 not implemented for non-memory mode (unknown behavior)\n"); - } - } - else { - LOG(LOG_SB,LOG_DEBUG)("SB16 ASP set register reg=0x%02x val=0x%02x",sb.dsp.in.data[0],sb.dsp.in.data[1]); - } - } - else { - LOG(LOG_SB,LOG_DEBUG)("SB16 ASP set register reg=0x%02x val=0x%02x ignored, ASP not enabled",sb.dsp.in.data[0],sb.dsp.in.data[1]); - } - } else { - LOG(LOG_SB,LOG_NORMAL)("DSP Unhandled SB16ASP command %X (set register)",sb.dsp.cmd); - } - break; - case 0x0f: /* SB16 ASP get register */ - if (sb.type == SBT_16) { - // FIXME: We have to emulate this whether or not ASP emulation is enabled. Windows 98 SB16 driver requires this. - // The question is: What does actual hardware do here exactly? - if (sb.enable_asp && sb.dsp.in.data[0] == 0x83) { - if ((ASP_mode&0x88) == 0x88) { // bit 3 and bit 7 must be set - // memory access mode - if (ASP_mode & 4) // NTS: As far as I can tell... - sb16asp_ram_contents_index = 0; - - // log it, read it - ASP_regs[0x83] = sb16asp_read_current_RAM_byte(); - LOG(LOG_SB,LOG_DEBUG)("SB16 ASP read internal RAM byte index=0x%03x => val=0x%02x",sb16asp_ram_contents_index,ASP_regs[0x83]); - - if (ASP_mode & 1) // if bit 0 of the mode is set, memory index increment on read - sb16asp_next_RAM_byte(); - } - else { - // chip version ID - ASP_regs[0x83] = 0x10; - } - } - else { - LOG(LOG_SB,LOG_DEBUG)("SB16 ASP get register reg=0x%02x, returning 0x%02x",sb.dsp.in.data[0],ASP_regs[sb.dsp.in.data[0]]); - } - - DSP_AddData(ASP_regs[sb.dsp.in.data[0]]); - } else { - LOG(LOG_SB,LOG_NORMAL)("DSP Unhandled SB16ASP command %X (get register)",sb.dsp.cmd); - } - break; - case 0x10: /* Direct DAC */ - DSP_ChangeMode(MODE_DAC); - - /* just in case something is trying to play direct DAC audio while the speaker is turned off... */ - if (!sb.speaker && sb.directdac_warn_speaker_off) { - LOG(LOG_SB,LOG_DEBUG)("DSP direct DAC sample written while speaker turned off. Program should use DSP command 0xD1 to turn it on."); - sb.directdac_warn_speaker_off = false; - } - - sb.freq = 22050; - sb.freq_derived_from_tc = true; - sb.dac.dac_pt = sb.dac.dac_t; - sb.dac.dac_t = PIC_FullIndex(); - { - double dt = sb.dac.dac_t - sb.dac.dac_pt; // time in milliseconds since last direct DAC output - double rt = 1000 / dt; // estimated sample rate according to dt - int s,sc = 1; - - // cap rate estimate to sanity. <= 1KHz means rendering once per timer tick in DOSBox, - // so there's no point below that rate in additional rendering. - if (rt < 1000) rt = 1000; - - // FIXME: What does the ESS AudioDrive do to its filter/sample rate divider registers when emulating this Sound Blaster command? - ESSreg(0xA1) = 128 - (397700 / 22050); - ESSreg(0xA2) = 256 - (7160000 / (82 * ((4 * 22050) / 10))); - - // Direct DAC playback could be thought of as application-driven 8-bit output up to 23KHz. - // The sound card isn't given any hint what the actual sample rate is, only that it's given - // instruction when to change the 8-bit value being output to the DAC which is why older DOS - // games using this method tend to sound "grungy" compared to DMA playback. We recreate the - // effect here by asking the mixer to do its linear interpolation as if at 23KHz while - // rendering the audio at whatever rate the DOS game is giving it to us. - sb.chan->SetFreq((Bitu)(rt * 0x100),0x100); - updateSoundBlasterFilter(sb.freq); - - // avoid popping/crackling artifacts through the mixer by ensuring the render output is prefilled enough - if (sb.chan->msbuffer_o < 40/*FIXME: ask the mixer code!*/) sc += 2/*FIXME: use mixer rate / rate math*/; - - // do it - for (s=0;s < sc;s++) sb.chan->AddSamples_m8(1,(uint8_t*)(&sb.dsp.in.data[0])); - } - break; - case 0x99: /* Single Cycle 8-Bit DMA High speed DAC */ - DSP_SB201_ABOVE; - /* fall through */ - case 0x24: /* Single Cycle 8-Bit DMA ADC */ - sb.dma.recording=true; - DSP_PrepareDMA_Old(DSP_DMA_8,false,false,/*hispeed*/(sb.dsp.cmd&0x80)!=0); - LOG(LOG_SB,LOG_WARN)("Guest recording audio using SB/SBPro commands"); - break; - case 0x98: /* Auto Init 8-bit DMA High Speed */ - DSP_SB201_ABOVE; - case 0x2c: /* Auto Init 8-bit DMA */ - DSP_SB2_ABOVE; /* Note: 0x98 is documented only for DSP ver.2.x and 3.x, not 4.x */ - sb.dma.recording=true; - DSP_PrepareDMA_Old(DSP_DMA_8,true,false,/*hispeed*/(sb.dsp.cmd&0x80)!=0); - break; - case 0x91: /* Single Cycle 8-Bit DMA High speed DAC */ - DSP_SB201_ABOVE; - /* fall through */ - case 0x14: /* Single Cycle 8-Bit DMA DAC */ - case 0x15: /* Wari hack. Waru uses this one instead of 0x14, but some weird stuff going on there anyway */ - /* Note: 0x91 is documented only for DSP ver.2.x and 3.x, not 4.x */ - sb.dma.recording=false; - DSP_PrepareDMA_Old(DSP_DMA_8,false,false,/*hispeed*/(sb.dsp.cmd&0x80)!=0); - break; - case 0x90: /* Auto Init 8-bit DMA High Speed */ - DSP_SB201_ABOVE; - case 0x1c: /* Auto Init 8-bit DMA */ - DSP_SB2_ABOVE; /* Note: 0x90 is documented only for DSP ver.2.x and 3.x, not 4.x */ - sb.dma.recording=false; - DSP_PrepareDMA_Old(DSP_DMA_8,true,false,/*hispeed*/(sb.dsp.cmd&0x80)!=0); - break; - case 0x38: /* Write to SB MIDI Output */ - if (sb.midi == true) MIDI_RawOutByte(sb.dsp.in.data[0]); - break; - case 0x40: /* Set Timeconstant */ - DSP_ChangeRate(256000000ul / (65536ul - ((unsigned int)sb.dsp.in.data[0] << 8u))); - sb.timeconst=sb.dsp.in.data[0]; - sb.freq_derived_from_tc=true; - - if (sb.ess_type != ESS_NONE) ESSUpdateFilterFromSB(); - break; - case 0x41: /* Set Output Samplerate */ - case 0x42: /* Set Input Samplerate */ - if (sb.reveal_sc_type == RSC_SC400) { - /* Despite reporting itself as Sound Blaster Pro compatible, the Reveal SC400 supports some SB16 commands like this one */ - } - else { - DSP_SB16_ONLY; - } - - DSP_ChangeRate(((unsigned int)sb.dsp.in.data[0] << 8u) | (unsigned int)sb.dsp.in.data[1]); - sb.freq_derived_from_tc=false; - sb16_8051_mem[0x13] = sb.freq & 0xffu; // rate low - sb16_8051_mem[0x14] = (sb.freq >> 8u) & 0xffu; // rate high - break; - case 0x48: /* Set DMA Block Size */ - DSP_SB2_ABOVE; - //TODO Maybe check limit for new irq? - sb.dma.total=1u+(unsigned int)sb.dsp.in.data[0]+((unsigned int)sb.dsp.in.data[1] << 8u); - // NTS: From Creative documentation: This is the number of BYTES to transfer per IRQ, not SAMPLES! - // sb.dma.total is in SAMPLES (unless 16-bit PCM over 8-bit DMA) because this code inherits that - // design from DOSBox SVN. This check is needed for any DOS game or application that changes - // DSP block size during the game (such as when transitioning from general gameplay to spoken - // dialogue), and it is needed to stop Freddy Pharkas from stuttering when sbtype=sb16 ref - // [https://github.com/joncampbell123/dosbox-x/issues/2960] - // NTS: Do NOT divide the byte count by 2 if 16-bit PCM audio but using an 8-bit DMA channel (DSP_DMA_16_ALIASED). - // sb.dma.total in that cause really does contain the byte count of a DSP block. 16-bit PCM over 8-bit DMA - // is possible on real hardware too, likely as a fallback in case 16-bit DMA channels are just not available. - // Note that on one of my ViBRA PnP cards, 8-bit DMA is the only option because 16-bit DMA doesn't work for - // some odd reason. --J.C. - if (sb.dma.mode == DSP_DMA_16) { - // NTS: sb.dma.total is the number of individual samples, not paired samples, likely as a side effect of how - // this code was originally written over at DOSBox SVN regarding how block durations are handled with - // the Sound Blaster Pro in which the Pro treats stereo output as just mono that is alternately latched - // to left and right DACs. The SB16 handling here also follows that tradition because Creative's SB16 - // playback commands 0xB0-0xCF follow the same tradition: Block size specified in the command is given - // in samples, and by samples, they mean individual samples, and therefore it is still doubled when - // asked to play stereo audio. I suppose this is why Linux ALSA chose to further clarify the terminology - // by defining audio "samples" vs audio "frames". - // NTS: The sb.dma.total as individual sample count has been confirmed with DOSLIB and real hardware, and by - // looking at snd_sb16_capture_prepare() in sound/isa/sb/sb16_main.c in the Linux kernel source. - if (sb.dma.total & 1) LOG(LOG_SB,LOG_WARN)("DSP command 0x48: 16-bit PCM and odd number of bytes given for block length"); - sb.dma.total >>= 1u; - } - break; - case 0x75: /* 075h : Single Cycle 4-bit ADPCM Reference */ - sb.adpcm.haveref=true; - /* FALLTHROUGH */ - case 0x74: /* 074h : Single Cycle 4-bit ADPCM */ - sb.dma.recording=false; - DSP_PrepareDMA_Old(DSP_DMA_4,false,false,false); - break; - case 0x77: /* 077h : Single Cycle 3-bit(2.6bit) ADPCM Reference*/ - sb.adpcm.haveref=true; - /* FALLTHROUGH */ - case 0x76: /* 074h : Single Cycle 3-bit(2.6bit) ADPCM */ - sb.dma.recording=false; - DSP_PrepareDMA_Old(DSP_DMA_3,false,false,false); - break; - case 0x7d: /* Auto Init 4-bit ADPCM Reference */ - DSP_SB2_ABOVE; - sb.adpcm.haveref=true; - sb.dma.recording=false; - DSP_PrepareDMA_Old(DSP_DMA_4,true,false,false); - break; - case 0x7f: /* Auto Init 3-bit(2.6bit) ADPCM Reference */ - DSP_SB2_ABOVE; - sb.adpcm.haveref=true; - sb.dma.recording=false; - DSP_PrepareDMA_Old(DSP_DMA_3,true,false,false); - break; - case 0x1f: /* Auto Init 2-bit ADPCM Reference */ - DSP_SB2_ABOVE; - sb.adpcm.haveref=true; - sb.dma.recording=false; - DSP_PrepareDMA_Old(DSP_DMA_2,true,false,false); - break; - case 0x17: /* 017h : Single Cycle 2-bit ADPCM Reference*/ - sb.adpcm.haveref=true; - /* FALLTHROUGH */ - case 0x16: /* 074h : Single Cycle 2-bit ADPCM */ - sb.dma.recording=false; - DSP_PrepareDMA_Old(DSP_DMA_2,false,false,false); - break; - case 0x80: /* Silence DAC */ - PIC_AddEvent(&DSP_RaiseIRQEvent, - (1000.0f*(1+sb.dsp.in.data[0]+(sb.dsp.in.data[1] << 8))/sb.freq)); - break; - case 0xb0: case 0xb1: case 0xb2: case 0xb3: case 0xb4: case 0xb5: case 0xb6: case 0xb7: - case 0xb8: case 0xb9: case 0xba: case 0xbb: case 0xbc: case 0xbd: case 0xbe: case 0xbf: - case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: - case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: -/* The low 5 bits DO have specific meanings: - - Bx - Program 16-bit DMA mode digitized sound I/O - Command sequence: Command, Mode, Lo(Length-1), Hi(Length-1) - Command: - ╔════╤════╤════╤════╤═══════╤══════╤═══════╤════╗ - ║ D7 │ D6 │ D5 │ D4 │ D3 │ D2 │ D1 │ D0 ║ - ╠════╪════╪════╪════╪═══════╪══════╪═══════╪════╣ - ║ 1 │ 0 │ 1 │ 1 │ A/D │ A/I │ FIFO │ 0 ║ - ╚════╧════╧════╧════┼───────┼──────┼───────┼════╝ - │ 0=D/A │ 0=SC │ 0=off │ - │ 1=A/D │ 1=AI │ 1=on │ - └───────┴──────┴───────┘ - Common commands: - B8 - 16-bit single-cycle input - B0 - 16-bit single-cycle output - BE - 16-bit auto-initialized input - B6 - 16-bit auto-initialized output - - Mode: - ╔════╤════╤══════════╤════════════╤════╤════╤════╤════╗ - ║ D7 │ D6 │ D5 │ D4 │ D3 │ D2 │ D1 │ D0 ║ - ╠════╪════╪══════════╪════════════╪════╪════╪════╪════╣ - ║ 0 │ 0 │ Stereo │ Signed │ 0 │ 0 │ 0 │ 0 ║ - ╚════╧════┼──────────┼────────────┼════╧════╧════╧════╝ - │ 0=Mono │ 0=unsigned │ - │ 1=Stereo │ 1=signed │ - └──────────┴────────────┘ - - Cx - Program 8-bit DMA mode digitized sound I/O - Same procedure as 16-bit sound I/O using command Bx - Common commands: - C8 - 8-bit single-cycle input - C0 - 8-bit single-cycle output - CE - 8-bit auto-initialized input - C6 - 8-bit auto-initialized output - - Note that this code makes NO attempt to distinguish recording vs playback commands, which - is responsible for some failures such as [https://github.com/joncampbell123/dosbox-x/issues/1589] -*/ - if (sb.reveal_sc_type == RSC_SC400) { - /* Despite reporting itself as Sound Blaster Pro, the Reveal SC400 cards do support *some* SB16 DSP commands! */ - /* BUT, it only recognizes a subset of this range. */ - if (sb.dsp.cmd == 0xBE || sb.dsp.cmd == 0xB6 || - sb.dsp.cmd == 0xCE || sb.dsp.cmd == 0xC6) { - /* OK! */ - } - else { - LOG(LOG_SB,LOG_DEBUG)("SC400: SB16 playback command not recognized"); - break; - } - } - else { - DSP_SB16_ONLY; - } - - if (sb.dsp.cmd & 8) LOG(LOG_SB,LOG_WARN)("Guest recording audio using SB16 commands"); - - /* Generic 8/16 bit DMA */ -// DSP_SetSpeaker(true); //SB16 always has speaker enabled - sb.dma.sign=(sb.dsp.in.data[0] & 0x10) > 0; - sb.dma.recording=(sb.dsp.cmd & 0x8) > 0; - DSP_PrepareDMA_New((sb.dsp.cmd & 0x10) ? DSP_DMA_16 : DSP_DMA_8, - 1u+(unsigned int)sb.dsp.in.data[1]+((unsigned int)sb.dsp.in.data[2] << 8u), - (sb.dsp.cmd & 0x4)>0, - (sb.dsp.in.data[0] & 0x20) > 0 - ); - break; - case 0xd5: /* Halt 16-bit DMA */ - DSP_SB16_ONLY; - case 0xd0: /* Halt 8-bit DMA */ - sb.chan->FillUp(); -// DSP_ChangeMode(MODE_NONE); -// Games sometimes already program a new dma before stopping, gives noise - if (sb.mode==MODE_NONE) { - // possibly different code here that does not switch to MODE_DMA_PAUSE - } - sb.mode=MODE_DMA_PAUSE; - PIC_RemoveEvents(END_DMA_Event); - PIC_RemoveEvents(DMA_DAC_Event); - break; - case 0xd1: /* Enable Speaker */ - sb.chan->FillUp(); - DSP_SetSpeaker(true); - break; - case 0xd3: /* Disable Speaker */ - sb.chan->FillUp(); - DSP_SetSpeaker(false); - - /* There are demoscene productions that reinitialize sound between parts. - * But instead of stopping playback, then starting it again, the demo leaves - * DMA running through RAM and expects the "DSP Disable Speaker" command to - * prevent the arbitrary contents of RAM from coming out the sound card as static - * while it loads data. The problem is, DSP enable/disable speaker commands don't - * do anything on Sound Blaster 16 cards. This is why such demos run fine when - * sbtype=sbpro2, but emit static/noise between demo parts when sbtype=sb16. - * The purpose of this warning is to clue the user on in this fact and suggest - * a fix. - * - * Demoscene productions known to have this bug/problem with sb16: - * - "Saga" by Dust (1993) noise/static between demo parts - * - "Facts of life" by Witan (1992) noise/static during star wars scroller at the beginning - */ - if (sb.type == SBT_16 && sb.mode == MODE_DMA) - LOG(LOG_MISC,LOG_WARN)("SB16 warning: DSP Disable Speaker command used while DMA is running, which has no effect on audio output on SB16 hardware. Audible noise/static may occur. You can eliminate the noise by setting sbtype=sbpro2"); - - break; - case 0xd8: /* Speaker status */ - DSP_SB2_ABOVE; - DSP_FlushData(); - if (sb.speaker) DSP_AddData(0xff); - else DSP_AddData(0x00); - break; - case 0xd6: /* Continue DMA 16-bit */ - DSP_SB16_ONLY; - case 0xd4: /* Continue DMA 8-bit*/ - sb.chan->FillUp(); - if (sb.mode==MODE_DMA_PAUSE) { - sb.mode=MODE_DMA_MASKED; - if (sb.dma.chan!=NULL) sb.dma.chan->Register_Callback(DSP_DMA_CallBack); - } - break; - case 0x47: /* Continue Autoinitialize 16-bit */ - case 0x45: /* Continue Autoinitialize 8-bit */ - DSP_SB16_ONLY; - sb.chan->FillUp(); - sb.dma.autoinit=true; // No. This DSP command does not resume DMA playback - break; - case 0xd9: /* Exit Autoinitialize 16-bit */ - DSP_SB16_ONLY; - case 0xda: /* Exit Autoinitialize 8-bit */ - DSP_SB2_ABOVE; - /* Set mode to single transfer so it ends with current block */ - sb.dma.autoinit=false; //Should stop itself - sb.chan->FillUp(); - break; - case 0xe0: /* DSP Identification - SB2.0+ */ - DSP_FlushData(); - DSP_AddData(~sb.dsp.in.data[0]); - break; - case 0xe1: /* Get DSP Version */ - DSP_FlushData(); - switch (sb.type) { - case SBT_1: - if (sb.subtype == SBST_100) { DSP_AddData(0x1);DSP_AddData(0x0); } - else { DSP_AddData(0x1);DSP_AddData(0x5); } - break; - case SBT_2: - if (sb.subtype == SBST_200) { DSP_AddData(0x2);DSP_AddData(0x0); } - else { DSP_AddData(0x2);DSP_AddData(0x1); } - break; - case SBT_PRO1: - DSP_AddData(0x3);DSP_AddData(0x0);break; - case SBT_PRO2: - if (sb.ess_type != ESS_NONE) { - DSP_AddData(0x3);DSP_AddData(0x1); - } - else if (sb.reveal_sc_type == RSC_SC400) { // SC400 cards report as v3.5 by default, but there is a DSP command to change the version! - DSP_AddData(sb.sc400_dsp_major);DSP_AddData(sb.sc400_dsp_minor); - } - else { - DSP_AddData(0x3);DSP_AddData(0x2); - } - break; - case SBT_16: - if (sb.vibra) { - DSP_AddData(4); /* SB16 ViBRA DSP 4.13 */ - DSP_AddData(13); - } - else { - DSP_AddData(4); /* SB16 DSP 4.05 */ - DSP_AddData(5); - } - break; - default: - break; - } - break; - case 0xe2: /* Weird DMA identification write routine */ - { - LOG(LOG_SB,LOG_NORMAL)("DSP Function 0xe2"); - sb.e2.valadd += sb.dsp.in.data[0] ^ sb.e2.valxor; - sb.e2.valxor = (sb.e2.valxor >> 2u) | (sb.e2.valxor << 6u); - GetDMAChannel(sb.hw.dma8)->Register_Callback(DSP_E2_DMA_CallBack); - } - break; - case 0xe3: /* DSP Copyright */ - { - DSP_FlushData(); - if (sb.ess_type != ESS_NONE) { - /* ESS chips do not return copyright string */ - DSP_AddData(0); - } - else if (sb.reveal_sc_type == RSC_SC400) { - static const char *gallant = "SC-6000"; - - /* NTS: Yes, this writes the terminating NUL as well. Not a bug. */ - for (size_t i=0;i<=strlen(gallant);i++) { - DSP_AddData((uint8_t)gallant[i]); - } - } - else if (sb.type <= SBT_PRO2) { - /* Sound Blaster DSP 2.0: No copyright string observed. */ - /* Sound Blaster Pro DSP 3.1: No copyright string observed. */ - /* I have yet to observe if a Sound Blaster Pro DSP 3.2 (SBT_PRO2) returns a copyright string. */ - /* no response */ - } - else { - /* NTS: Yes, this writes the terminating NUL as well. Not a bug. */ - for (size_t i=0;i<=strlen(copyright_string);i++) { - DSP_AddData((uint8_t)copyright_string[i]); - } - } - } - break; - case 0xe4: /* Write Test Register */ - sb.dsp.test_register=sb.dsp.in.data[0]; - break; - case 0xe7: /* ESS detect/read config */ - if (sb.ess_type != ESS_NONE) { - DSP_FlushData(); - switch (sb.ess_type) { - case ESS_NONE: - break; - case ESS_688: - DSP_AddData(0x68); - DSP_AddData(0x80 | 0x04); - break; - case ESS_1688: - // Determined via Windows driver debugging. - DSP_AddData(0x68); - DSP_AddData(0x80 | 0x09); - break; - } - } - break; - case 0xe8: /* Read Test Register */ - DSP_FlushData(); - DSP_AddData(sb.dsp.test_register); - break; - case 0xf2: /* Trigger 8bit IRQ */ - //Small delay in order to emulate the slowness of the DSP, fixes Llamatron 2012 and Lemmings 3D - PIC_AddEvent(&DSP_RaiseIRQEvent,0.01f); - break; - case 0xa0: case 0xa8: /* Documented only for DSP 3.x */ - if (sb.type == SBT_PRO1 || sb.type == SBT_PRO2) - sb.mixer.stereo = (sb.dsp.cmd & 8) > 0; /* <- HACK! 0xA0 input mode to mono 0xA8 stereo */ - else - LOG(LOG_SB,LOG_WARN)("DSP command A0h/A8h are only supported in Sound Blaster Pro emulation mode"); - break; - case 0xf3: /* Trigger 16bit IRQ */ - DSP_SB16_ONLY; - SB_RaiseIRQ(SB_IRQ_16); - break; - case 0xf8: /* Undocumented, pre-SB16 only */ - DSP_FlushData(); - DSP_AddData(0); - break; - case 0x30: case 0x31: case 0x32: case 0x33: - LOG(LOG_SB,LOG_ERROR)("DSP:Unimplemented MIDI I/O command %2X",sb.dsp.cmd); - break; - case 0x34: /* MIDI Read Poll & Write Poll */ - DSP_SB2_ABOVE; - LOG(LOG_SB,LOG_DEBUG)("DSP:Entering MIDI Read/Write Poll mode"); - sb.dsp.midi_rwpoll_mode = true; - break; - case 0x35: /* MIDI Read Interrupt & Write Poll */ - DSP_SB2_ABOVE; - LOG(LOG_SB,LOG_DEBUG)("DSP:Entering MIDI Read Interrupt/Write Poll mode"); - sb.dsp.midi_rwpoll_mode = true; - sb.dsp.midi_read_interrupt = true; - break; - case 0x37: /* MIDI Read Timestamp Interrupt & Write Poll */ - DSP_SB2_ABOVE; - LOG(LOG_SB,LOG_DEBUG)("DSP:Entering MIDI Read Timestamp Interrupt/Write Poll mode"); - sb.dsp.midi_rwpoll_mode = true; - sb.dsp.midi_read_interrupt = true; - sb.dsp.midi_read_with_timestamps = true; - break; - case 0x20: - DSP_AddData(0x7f); // fake silent input for Creative parrot - break; - case 0x88: /* Reveal SC400 ??? (used by TESTSC.EXE) */ - if (sb.reveal_sc_type != RSC_SC400) break; - /* ??? */ - break; - case 0xE6: /* Reveal SC400 DMA test */ - if (sb.reveal_sc_type != RSC_SC400) break; - GetDMAChannel(sb.hw.dma8)->Register_Callback(DSP_SC400_E6_DMA_CallBack); - sb.dsp.out.lastval = 0x80; - sb.dsp.out.used = 0; - break; - case 0x50: /* Reveal SC400 write configuration */ - if (sb.reveal_sc_type != RSC_SC400) break; - sb.sc400_cfg = sb.dsp.in.data[0]; - - switch (sb.dsp.in.data[0]&3) { - case 0: sb.hw.dma8 = (uint8_t)(-1); break; - case 1: sb.hw.dma8 = 0u; break; - case 2: sb.hw.dma8 = 1u; break; - case 3: sb.hw.dma8 = 3u; break; - } - sb.hw.dma16 = sb.hw.dma8; - switch ((sb.dsp.in.data[0]>>3)&7) { - case 0: sb.hw.irq = (uint8_t)(-1); break; - case 1: sb.hw.irq = 7u; break; - case 2: sb.hw.irq = 9u; break; - case 3: sb.hw.irq = 10u; break; - case 4: sb.hw.irq = 11u; break; - case 5: sb.hw.irq = 5u; break; - case 6: sb.hw.irq = (uint8_t)(-1); break; - case 7: sb.hw.irq = (uint8_t)(-1); break; - } - { - int irq; - - if (sb.dsp.in.data[0]&0x04) /* MPU IRQ enable bit */ - irq = (sb.dsp.in.data[0]&0x80) ? 9 : 5; - else - irq = -1; - - if (irq != MPU401_GetIRQ()) - LOG(LOG_SB,LOG_WARN)("SC400 warning: MPU401 emulation does not yet support changing the IRQ through configuration commands"); - } - - LOG(LOG_SB,LOG_DEBUG)("SC400: New configuration byte %02x irq=%d dma=%d", - sb.dsp.in.data[0],(int)sb.hw.irq,(int)sb.hw.dma8); - - break; - case 0x58: /* Reveal SC400 read configuration */ - if (sb.reveal_sc_type != RSC_SC400) break; - DSP_AddData(sb.sc400_jumper_status_1); - DSP_AddData(sb.sc400_jumper_status_2); - DSP_AddData(sb.sc400_cfg); - break; - case 0x6E: /* Reveal SC400 SBPRO.EXE set DSP version */ - if (sb.reveal_sc_type != RSC_SC400) break; - sb.sc400_dsp_major = sb.dsp.in.data[0]; - sb.sc400_dsp_minor = sb.dsp.in.data[1]; - LOG(LOG_SB,LOG_DEBUG)("SC400: DSP version changed to %u.%u", - sb.sc400_dsp_major,sb.sc400_dsp_minor); - break; - case 0xfa: /* SB16 8051 memory write */ - if (sb.type == SBT_16) { - sb16_8051_mem[sb.dsp.in.data[0]] = sb.dsp.in.data[1]; - LOG(LOG_SB,LOG_NORMAL)("SB16 8051 memory write %x byte %x",sb.dsp.in.data[0],sb.dsp.in.data[1]); - } else { - LOG(LOG_SB,LOG_ERROR)("DSP:Unhandled (undocumented) command %2X",sb.dsp.cmd); - } - break; - case 0xf9: /* SB16 8051 memory read */ - if (sb.type == SBT_16) { - DSP_AddData(sb16_8051_mem[sb.dsp.in.data[0]]); - LOG(LOG_SB,LOG_NORMAL)("SB16 8051 memory read %x, got byte %x",sb.dsp.in.data[0],sb16_8051_mem[sb.dsp.in.data[0]]); - } else { - LOG(LOG_SB,LOG_ERROR)("DSP:Unhandled (undocumented) command %2X",sb.dsp.cmd); - } - break; - default: - LOG(LOG_SB,LOG_ERROR)("DSP:Unhandled (undocumented) command %2X",sb.dsp.cmd); - break; - } - - if (sb.type == SBT_16) { - // FIXME: This is a guess! See also [https://github.com/joncampbell123/dosbox-x/issues/1044#issuecomment-480024957] - sb16_8051_mem[0x30] = sb.dsp.last_cmd; /* last_cmd */ - } - - sb.dsp.last_cmd=sb.dsp.cmd; - sb.dsp.cmd=DSP_NO_COMMAND; - sb.dsp.cmd_len=0; - sb.dsp.in.pos=0; +void SB_INFO::sb16asp_next_RAM_byte(void) { + if ((++sb16asp_ram_contents_index) >= 2048) + sb16asp_ram_contents_index = 0; } -static bool DSP_busy_cycle_active() { - /* NTS: Busy cycle happens on SB16 at all times, or on earlier cards, only when the DSP is - * fetching/writing data via the ISA DMA channel. So a non-auto-init DSP block that's - * just finished fetching ISA DMA and is playing from the FIFO doesn't count. - * - * sb.dma.left >= sb.dma.min condition causes busy cycle to stop 3ms early (by default). - * This helps realism. - * - * This also helps Crystal Dream, which uses the busy cycle to detect when the Sound - * Blaster is about to finish playing the DSP block and therefore needs the same 3ms - * "dmamin" hack to reissue another playback command without any audible hiccups in - * the audio. */ - return (sb.mode == MODE_DMA && (sb.dma.autoinit || sb.dma.left >= sb.dma.min)) || sb.busy_cycle_always; +bool SB_INFO::DSP_busy_cycle_active() { + /* NTS: Busy cycle happens on SB16 at all times, or on earlier cards, only when the DSP is + * fetching/writing data via the ISA DMA channel. So a non-auto-init DSP block that's + * just finished fetching ISA DMA and is playing from the FIFO doesn't count. + * + * dma.left >= dma.min condition causes busy cycle to stop 3ms early (by default). + * This helps realism. + * + * This also helps Crystal Dream, which uses the busy cycle to detect when the Sound + * Blaster is about to finish playing the DSP block and therefore needs the same 3ms + * "dmamin" hack to reissue another playback command without any audible hiccups in + * the audio. */ + return (mode == MODE_DMA && (dma.autoinit || dma.left >= dma.min)) || busy_cycle_always; } -static bool DSP_busy_cycle() { - double now; - int t; - - if (!DSP_busy_cycle_active()) return false; - if (sb.busy_cycle_duty_percent <= 0 || sb.busy_cycle_hz <= 0) return false; - - /* NTS: DOSBox's I/O emulation doesn't yet attempt to accurately match ISA bus speeds or - * consider ISA bus cycles, but to emulate SB16 behavior we have to "time" it so - * that 8 consecutive I/O reads eventually see a transition from busy to not busy - * (or the other way around). So what this hack does is it uses accurate timing - * to determine where in the cycle we are, but if this function is called repeatedly - * through I/O access, we switch to incrementing a counter to ensure busy/not busy - * transition happens in 8 I/O cycles. - * - * Without this hack, the CPU cycles count becomes a major factor in how many I/O - * reads are required for busy/not busy to happen. If you set cycles count high - * enough, more than 8 is required, and the SNDSB test code will have issues with - * direct DAC mode again. - * - * This isn't 100% accurate, but it's the best DOSBox-X can do for now to mimic - * SB16 DSP behavior. */ - - now = PIC_FullIndex(); - if (now >= (sb.busy_cycle_last_check+0.02/*ms*/)) - sb.busy_cycle_io_hack = (int)(fmod((now / 1000) * sb.busy_cycle_hz,1.0) * 16); - - sb.busy_cycle_last_check = now; - t = ((sb.busy_cycle_io_hack % 16) * 100) / 16; /* HACK: DOSBox's I/O is not quite ISA bus speeds or related to it */ - if (t < sb.busy_cycle_duty_percent) return true; - return false; +bool SB_INFO::DSP_busy_cycle() { + double now; + int t; + + if (!DSP_busy_cycle_active()) return false; + if (busy_cycle_duty_percent <= 0 || busy_cycle_hz <= 0) return false; + + /* NTS: DOSBox's I/O emulation doesn't yet attempt to accurately match ISA bus speeds or + * consider ISA bus cycles, but to emulate SB16 behavior we have to "time" it so + * that 8 consecutive I/O reads eventually see a transition from busy to not busy + * (or the other way around). So what this hack does is it uses accurate timing + * to determine where in the cycle we are, but if this function is called repeatedly + * through I/O access, we switch to incrementing a counter to ensure busy/not busy + * transition happens in 8 I/O cycles. + * + * Without this hack, the CPU cycles count becomes a major factor in how many I/O + * reads are required for busy/not busy to happen. If you set cycles count high + * enough, more than 8 is required, and the SNDSB test code will have issues with + * direct DAC mode again. + * + * This isn't 100% accurate, but it's the best DOSBox-X can do for now to mimic + * SB16 DSP behavior. */ + + now = PIC_FullIndex(); + if (now >= (busy_cycle_last_check+0.02/*ms*/)) + busy_cycle_io_hack = (int)(fmod((now / 1000) * busy_cycle_hz,1.0) * 16); + + busy_cycle_last_check = now; + t = ((busy_cycle_io_hack % 16) * 100) / 16; /* HACK: DOSBox's I/O is not quite ISA bus speeds or related to it */ + if (t < busy_cycle_duty_percent) return true; + return false; } -static void DSP_DoWrite(uint8_t val) { - if (sb.dsp.write_busy || (sb.dsp.highspeed && sb.type != SBT_16 && sb.ess_type == ESS_NONE && sb.reveal_sc_type == RSC_NONE)) { - LOG(LOG_SB,LOG_WARN)("DSP:Command write %2X ignored, DSP not ready. DOS game or OS is not polling status",val); - return; - } - - /* NTS: We allow the user to set busy wait time == 0 aka "instant gratification mode". - * We also assume that if they do that, some DOS programs might be timing sensitive - * enough to freak out when DSP commands and data are accepted immediately */ - { - unsigned int delay = sb.dsp.dsp_write_busy_time; - - if (sb.dsp.instant_direct_dac) { - delay = 0; - } - /* Part of enforcing sample rate limits is to make sure to emulate that the - * Direct DAC output command 0x10 is "busy" long enough to effectively rate - * limit output to 23KHz. */ - else if (sb.sample_rate_limits) { - unsigned int limit = 23000; /* documented max sample rate for SB16/SBPro and earlier */ - - if (sb.type == SBT_16 && sb.vibra) - limit = 23000; /* DSP maxes out at 46KHz not 44.1KHz on ViBRA cards */ - - if (sb.dsp.cmd == DSP_NO_COMMAND && val == 0x10/*DSP direct DAC, command*/) - delay = (625000000UL / limit) - sb.dsp.dsp_write_busy_time; - } - - if (delay > 0) { - sb.dsp.write_busy = 1; - PIC_RemoveEvents(DSP_BusyComplete); - PIC_AddEvent(DSP_BusyComplete,(double)delay / 1000000); - } - -// LOG(LOG_SB,LOG_NORMAL)("DSP:Command %02x delay %u",val,delay); - } - - if (sb.dsp.midi_rwpoll_mode) { - // DSP writes in this mode go to the MIDI port -// LOG(LOG_SB,LOG_DEBUG)("DSP MIDI read/write poll mode: sending 0x%02x",val); - if (sb.midi == true) MIDI_RawOutByte(val); - return; - } - - switch (sb.dsp.cmd) { - case DSP_NO_COMMAND: - /* genuine SB Pro and lower: remap DSP command to emulate aliases. */ - if (sb.dsp.command_aliases && sb.type < SBT_16 && sb.ess_type == ESS_NONE && sb.reveal_sc_type == RSC_NONE) { - /* 0x41...0x47 are aliases of 0x40. - * See also: [https://www.vogons.org/viewtopic.php?f=62&t=61098&start=280]. - * This is required for ftp.scene.org/mirrors/hornet/demos/1994/y/yahxmas.zip which relies on the 0x41 alias of command 0x40 - * to function (which means that it may happen to work on SB Pro but will fail on clones and will fail on SB16 cards). */ - if (val >= 0x41 && val <= 0x47) { - LOG(LOG_SB,LOG_WARN)("DSP command %02x and SB Pro or lower, treating as alias of 40h. Either written for SB16 or using undocumented alias.",val); - val = 0x40; - } - } - - sb.dsp.cmd=val; - if (sb.type == SBT_16) - sb.dsp.cmd_len=DSP_cmd_len_sb16[val]; - else if (sb.ess_type != ESS_NONE) - sb.dsp.cmd_len=DSP_cmd_len_ess[val]; - else if (sb.reveal_sc_type != RSC_NONE) - sb.dsp.cmd_len=DSP_cmd_len_sc400[val]; - else - sb.dsp.cmd_len=DSP_cmd_len_sb[val]; - - sb.dsp.in.pos=0; - if (!sb.dsp.cmd_len) DSP_DoCommand(); - break; - default: - sb.dsp.in.data[sb.dsp.in.pos]=val; - sb.dsp.in.pos++; - if (sb.dsp.in.pos>=sb.dsp.cmd_len) DSP_DoCommand(); - } -} +void SB_INFO::DSP_DoWrite(uint8_t val) { + if (dsp.write_busy || (dsp.highspeed && type != SBT_16 && ess_type == ESS_NONE && reveal_sc_type == RSC_NONE)) { + LOG(LOG_SB,LOG_WARN)("DSP:Command write %2X ignored, DSP not ready. DOS game or OS is not polling status",val); + return; + } -static uint8_t DSP_ReadData(void) { -/* Static so it repeats the last value on successive reads (JANGLE DEMO) */ - if (sb.dsp.out.used) { - sb.dsp.out.lastval=sb.dsp.out.data[sb.dsp.out.pos]; - sb.dsp.out.pos++; - if (sb.dsp.out.pos>=DSP_BUFSIZE) sb.dsp.out.pos-=DSP_BUFSIZE; - sb.dsp.out.used--; - } - return sb.dsp.out.lastval; -} + /* NTS: We allow the user to set busy wait time == 0 aka "instant gratification mode". + * We also assume that if they do that, some DOS programs might be timing sensitive + * enough to freak out when DSP commands and data are accepted immediately */ + { + unsigned int delay = dsp.dsp_write_busy_time; -//The soundblaster manual says 2.0 Db steps but we'll go for a bit less -static float calc_vol(uint8_t amount) { - uint8_t count = 31 - amount; - float db = static_cast(count); - if (sb.type == SBT_PRO1 || sb.type == SBT_PRO2) { - if (count) { - if (count < 16) db -= 1.0f; - else if (count > 16) db += 1.0f; - if (count == 24) db += 2.0f; - if (count > 27) return 0.0f; //turn it off. - } - } else { //Give the rest, the SB16 scale, as we don't have data. - db *= 2.0f; - if (count > 20) db -= 1.0f; - } - return (float) pow (10.0f,-0.05f * db); -} -static void CTMIXER_UpdateVolumes(void) { - if (!sb.mixer.enabled) return; - - sb.chan->FillUp(); - - MixerChannel * chan; - float m0 = calc_vol(sb.mixer.master[0]); - float m1 = calc_vol(sb.mixer.master[1]); - chan = MIXER_FindChannel("SB"); - if (chan) chan->SetVolume(m0 * calc_vol(sb.mixer.dac[0]), m1 * calc_vol(sb.mixer.dac[1])); - chan = MIXER_FindChannel("FM"); - if (chan) chan->SetVolume(m0 * calc_vol(sb.mixer.fm[0]) , m1 * calc_vol(sb.mixer.fm[1]) ); - chan = MIXER_FindChannel("CDAUDIO"); - if (chan) chan->SetVolume(m0 * calc_vol(sb.mixer.cda[0]), m1 * calc_vol(sb.mixer.cda[1])); -} + if (dsp.instant_direct_dac) { + delay = 0; + } + /* Part of enforcing sample rate limits is to make sure to emulate that the + * Direct DAC output command 0x10 is "busy" long enough to effectively rate + * limit output to 23KHz. */ + else if (sample_rate_limits) { + unsigned int limit = 23000; /* documented max sample rate for SB16/SBPro and earlier */ -static void CTMIXER_Reset(void) { - sb.mixer.filter_bypass=0; // Creative Documentation: filter_bypass bit is 0 by default - sb.mixer.fm[0]= - sb.mixer.fm[1]= - sb.mixer.cda[0]= - sb.mixer.cda[1]= - sb.mixer.dac[0]= - sb.mixer.dac[1]=31; - sb.mixer.master[0]= - sb.mixer.master[1]=31; - CTMIXER_UpdateVolumes(); -} + if (type == SBT_16 && vibra) + limit = 23000; /* DSP maxes out at 46KHz not 44.1KHz on ViBRA cards */ -#define SETPROVOL(_WHICH_,_VAL_) \ - _WHICH_[0]= ((((_VAL_) & 0xf0) >> 3)|(sb.type==SBT_16 ? 1:3)); \ - _WHICH_[1]= ((((_VAL_) & 0x0f) << 1)|(sb.type==SBT_16 ? 1:3)); \ + if (dsp.cmd == DSP_NO_COMMAND && val == 0x10/*DSP direct DAC, command*/) + delay = (625000000UL / limit) - dsp.dsp_write_busy_time; + } -#define MAKEPROVOL(_WHICH_) \ - ((((_WHICH_[0] & 0x1e) << 3) | ((_WHICH_[1] & 0x1e) >> 1)) | \ - ((sb.type==SBT_PRO1 || sb.type==SBT_PRO2) ? 0x11:0)) + if (delay > 0) { + dsp.write_busy = 1; + PIC_RemoveEvents(DSP_BusyComplete); + PIC_AddEvent(DSP_BusyComplete,(double)delay / 1000000,(card_index << CARD_INDEX_BIT)); + } -// TODO: Put out the various hardware listed here, do some listening tests to confirm the emulation is accurate. -void updateSoundBlasterFilter(Bitu rate) { - /* "No filtering" option for those who don't want it, or are used to the way things sound in plain vanilla DOSBox */ - if (sb.no_filtering) { - sb.chan->SetLowpassFreq(0/*off*/); - sb.chan->SetSlewFreq(0/*normal linear interpolation*/); - return; - } - - /* different sound cards filter their output differently */ - if (sb.ess_type != ESS_NONE) { // ESS AudioDrive. Tested against real hardware (ESS 688) by Jonathan C. - /* ESS AudioDrive lets the driver decide what the cutoff/rolloff to use */ - /* "The ratio of the roll-off frequency to the clock frequency is 1:82. In other words, - * first determine the desired roll off frequency by taking 80% of the sample rate - * divided by 2, the multiply by 82 to find the desired filter clock frequency" - * - * Try to approximate the ESS's filter by undoing the calculation then feeding our own lowpass filter with it. - * - * This implementation is matched against real hardware by ear, even though the reference hardware is a - * laptop with a cheap tinny amplifier */ - uint64_t filter_raw = (uint64_t)7160000ULL / (256u - ESSreg(0xA2)); - uint64_t filter_hz = (filter_raw * (uint64_t)11) / (uint64_t)(82 * 4); /* match lowpass by ear compared to real hardware */ - - if ((filter_hz * 2) > sb.freq) - sb.chan->SetSlewFreq(filter_hz * 2 * sb.chan->freq_d_orig); - else - sb.chan->SetSlewFreq(0); - - sb.chan->SetLowpassFreq(filter_hz,/*order*/8); - } - else if (sb.type == SBT_16 || // Sound Blaster 16 (DSP 4.xx). Tested against real hardware (CT4180 ViBRA 16C PnP) by Jonathan C. - sb.reveal_sc_type == RSC_SC400) { // Reveal SC400 (DSP 3.5). Tested against real hardware by Jonathan C. - // My notes: The DSP automatically applies filtering at low sample rates. But the DSP has to know - // what the sample rate is to filter. If you use direct DAC output (DSP command 0x10) - // then no filtering is applied and the sound comes out grungy, just like older Sound - // Blaster cards. - // - // I can also confirm the SB16's reputation for hiss and noise is true, it's noticeable - // with earbuds and the mixer volume at normal levels. --Jonathan C. - if (sb.mode == MODE_DAC) { - sb.chan->SetLowpassFreq(23000); - sb.chan->SetSlewFreq(23000 * sb.chan->freq_d_orig); - } - else { - sb.chan->SetLowpassFreq(rate/2,1); - sb.chan->SetSlewFreq(0/*normal linear interpolation*/); - } - } - else if (sb.type == SBT_PRO1 || sb.type == SBT_PRO2) { // Sound Blaster Pro (DSP 3.x). Tested against real hardware (CT1600) by Jonathan C. - sb.chan->SetSlewFreq(23000 * sb.chan->freq_d_orig); - if (sb.mixer.filter_bypass) - sb.chan->SetLowpassFreq(23000); // max sample rate 46000Hz. slew rate filter does the rest of the filtering for us. - else - sb.chan->SetLowpassFreq(3800); // NOT documented by Creative, guess based on listening tests with a CT1600, and documented Input filter freqs - } - else if (sb.type == SBT_1 || sb.type == SBT_2) { // Sound Blaster DSP 1.x and 2.x (not Pro). Tested against real hardware (CT1350B) by Jonathan C. - /* As far as I can tell the DAC outputs sample-by-sample with no filtering whatsoever, aside from the limitations of analog audio */ - sb.chan->SetSlewFreq(23000 * sb.chan->freq_d_orig); - sb.chan->SetLowpassFreq(23000); - } + // LOG(LOG_SB,LOG_NORMAL)("DSP:Command %02x delay %u",val,delay); + } + + if (dsp.midi_rwpoll_mode) { + // DSP writes in this mode go to the MIDI port + // LOG(LOG_SB,LOG_DEBUG)("DSP MIDI read/write poll mode: sending 0x%02x",val); + if (midi == true) MIDI_RawOutByte(val); + return; + } + + switch (dsp.cmd) { + case DSP_NO_COMMAND: + /* genuine SB Pro and lower: remap DSP command to emulate aliases. */ + if (dsp.command_aliases && type < SBT_16 && ess_type == ESS_NONE && reveal_sc_type == RSC_NONE) { + /* 0x41...0x47 are aliases of 0x40. + * See also: [https://www.vogons.org/viewtopic.php?f=62&t=61098&start=280]. + * This is required for ftp.scene.org/mirrors/hornet/demos/1994/y/yahxmas.zip which relies on the 0x41 alias of command 0x40 + * to function (which means that it may happen to work on SB Pro but will fail on clones and will fail on SB16 cards). */ + if (val >= 0x41 && val <= 0x47) { + LOG(LOG_SB,LOG_WARN)("DSP command %02x and SB Pro or lower, treating as alias of 40h. Either written for SB16 or using undocumented alias.",val); + val = 0x40; + } + } + + dsp.cmd=val; + if (type == SBT_16) + dsp.cmd_len=DSP_cmd_len_sb16[val]; + else if (ess_type != ESS_NONE) + dsp.cmd_len=DSP_cmd_len_ess[val]; + else if (reveal_sc_type != RSC_NONE) + dsp.cmd_len=DSP_cmd_len_sc400[val]; + else + dsp.cmd_len=DSP_cmd_len_sb[val]; + + dsp.in.pos=0; + if (!dsp.cmd_len) DSP_DoCommand(); + break; + default: + dsp.in.data[dsp.in.pos]=val; + dsp.in.pos++; + if (dsp.in.pos>=dsp.cmd_len) DSP_DoCommand(); + } } -static void DSP_ChangeStereo(bool stereo) { - if (!sb.dma.stereo && stereo) { - sb.chan->SetFreq(sb.freq/2); - updateSoundBlasterFilter(sb.freq/2); - sb.dma.mul*=2; - sb.dma.rate=(sb.freq*sb.dma.mul) >> SB_SH; - sb.dma.min=((Bitu)sb.dma.rate*(Bitu)(sb.min_dma_user >= 0 ? sb.min_dma_user : /*default*/3))/1000u; - } else if (sb.dma.stereo && !stereo) { - sb.chan->SetFreq(sb.freq); - updateSoundBlasterFilter(sb.freq); - sb.dma.mul/=2; - sb.dma.rate=(sb.freq*sb.dma.mul) >> SB_SH; - sb.dma.min=((Bitu)sb.dma.rate*(Bitu)(sb.min_dma_user >= 0 ? sb.min_dma_user : /*default*/3))/1000; - } - sb.dma.stereo=stereo; +//The soundblaster manual says 2.0 Db steps but we'll go for a bit less +float SB_INFO::calc_vol(uint8_t amount) { + const uint8_t count = 31 - amount; + float db = static_cast(count); + if (type == SBT_PRO1 || type == SBT_PRO2) { + if (count) { + if (count < 16) db -= 1.0f; + else if (count > 16) db += 1.0f; + if (count == 24) db += 2.0f; + if (count > 27) return 0.0f; //turn it off. + } + } else { //Give the rest, the SB16 scale, as we don't have data. + db *= 2.0f; + if (count > 20) db -= 1.0f; + } + return (float) pow (10.0f,-0.05f * db); +} + +void SB_INFO::CTMIXER_UpdateVolumes(void) { + if (!mixer.enabled) return; + + chan->FillUp(); + + MixerChannel * chan; + float m0 = calc_vol(mixer.master[0]); + float m1 = calc_vol(mixer.master[1]); + chan = MIXER_FindChannel(sbMixerChanNames[card_index]); + if (chan) chan->SetVolume(m0 * calc_vol(mixer.dac[0]), m1 * calc_vol(mixer.dac[1])); + chan = MIXER_FindChannel("FM"); + if (chan) chan->SetVolume(m0 * calc_vol(mixer.fm[0]) , m1 * calc_vol(mixer.fm[1]) ); + chan = MIXER_FindChannel("CDAUDIO"); + if (chan) chan->SetVolume(m0 * calc_vol(mixer.cda[0]), m1 * calc_vol(mixer.cda[1])); +} + +void SB_INFO::CTMIXER_Reset(void) { + mixer.filter_bypass=0; // Creative Documentation: filter_bypass bit is 0 by default + mixer.fm[0]= + mixer.fm[1]= + mixer.cda[0]= + mixer.cda[1]= + mixer.dac[0]= + mixer.dac[1]=31; + mixer.master[0]= + mixer.master[1]=31; + CTMIXER_UpdateVolumes(); +} + +/* Demo notes for fixing: + * + * - "Buttman"'s intro uses a timer and DSP command 0x10 to play the sound effects even in Pro mode. + * It doesn't use DMA + IRQ until the music starts. + */ + +void SB_INFO::DSP_DoCommand(void) { + LOG(LOG_SB,LOG_NORMAL)("DSP Command: 0x%02X", dsp.cmd); + if (ess_type != ESS_NONE && dsp.cmd >= 0xA0 && dsp.cmd <= 0xCF) { + // ESS overlap with SB16 commands. Handle it here, not mucking up the switch statement. + + if (dsp.cmd < 0xC0) { // write ESS register (cmd=register data[0]=value to write) + if (ess_extended_mode) + ESS_DoWrite(dsp.cmd,dsp.in.data[0]); + } + else if (dsp.cmd == 0xC0) { // read ESS register (data[0]=register to read) + DSP_FlushData(); + if (ess_extended_mode && dsp.in.data[0] >= 0xA0 && dsp.in.data[0] <= 0xBF) + DSP_AddData(ESS_DoRead(dsp.in.data[0])); + } + else if (dsp.cmd == 0xC6 || dsp.cmd == 0xC7) { // set(0xC6) clear(0xC7) extended mode + ess_extended_mode = (dsp.cmd == 0xC6); + } + else { + LOG(LOG_SB,LOG_DEBUG)("ESS: Unknown command %02xh",dsp.cmd); + } + + dsp.last_cmd=dsp.cmd; + dsp.cmd=DSP_NO_COMMAND; + dsp.cmd_len=0; + dsp.in.pos=0; + return; + } + + if (type == SBT_16) { + // FIXME: This is a guess! See also [https://github.com/joncampbell123/dosbox-x/issues/1044#issuecomment-480024957] + sb16_8051_mem[0x20] = dsp.last_cmd; /* cur_cmd */ + } + + // TODO: There are more SD16 ASP commands we can implement, by name even, with microcode download, + // using as reference the Linux kernel driver code: + // + // http://lxr.free-electrons.com/source/sound/isa/sb/sb16_csp.c + + // LOG_MSG("DSP Command %X",dsp.cmd); + switch (dsp.cmd) { + case 0x04: + if (type == SBT_16) { + /* SB16 ASP set mode register */ + ASP_mode = dsp.in.data[0]; + + // bit 7: if set, enables bit 3 and memory access. + // bit 3: if set, and bit 7 is set, register 0x83 can be used to read/write ASP internal memory. if clear, register 0x83 contains chip version ID + // bit 2: if set, memory index is reset to 0. doesn't matter if memory access or not. + // bit 1: if set, writing register 0x83 increments memory index. doesn't matter if memory access or not. + // bit 0: if set, reading register 0x83 increments memory index. doesn't matter if memory access or not. + if (ASP_mode&4) + sb16asp_ram_contents_index = 0; + + LOG(LOG_SB,LOG_DEBUG)("SB16ASP set mode register to %X",dsp.in.data[0]); + } else { + /* DSP Status SB 2.0/pro version. NOT SB16. */ + DSP_FlushData(); + if (type == SBT_2) DSP_AddData(0x88); + else if ((type == SBT_PRO1) || (type == SBT_PRO2)) DSP_AddData(0x7b); + else DSP_AddData(0xff); //Everything enabled + } + break; + case 0x05: /* SB16 ASP set codec parameter */ + LOG(LOG_SB,LOG_NORMAL)("DSP Unhandled SB16ASP command %X (set codec parameter) value=0x%02x parameter=0x%02x", + dsp.cmd,dsp.in.data[0],dsp.in.data[1]); + break; + case 0x08: /* SB16 ASP get version */ + if (type == SBT_16) { + switch (dsp.in.data[0]) { + case 0x03: + LOG(LOG_SB,LOG_DEBUG)("DSP SB16ASP command %X sub %X (get chip version)",dsp.cmd,dsp.in.data[0]); + + if (enable_asp) + DSP_AddData(0x10); // version ID + else + DSP_AddData(0xFF); // NTS: This is what a SB16 ViBRA PnP card with no ASP returns when queried in this way + break; + default: + LOG(LOG_SB,LOG_NORMAL)("DSP Unhandled SB16ASP command %X sub %X",dsp.cmd,dsp.in.data[0]); + break; + } + } else { + LOG(LOG_SB,LOG_NORMAL)("DSP Unhandled SB16ASP command %X sub %X",dsp.cmd,dsp.in.data[0]); + } + break; + case 0x0e: /* SB16 ASP set register */ + if (type == SBT_16) { + if (enable_asp) { + ASP_regs[dsp.in.data[0]] = dsp.in.data[1]; + + if (dsp.in.data[0] == 0x83) { + if ((ASP_mode&0x88) == 0x88) { // bit 3 and bit 7 must be set + // memory access mode + if (ASP_mode & 4) // NTS: As far as I can tell... + sb16asp_ram_contents_index = 0; + + // log it, write it + LOG(LOG_SB,LOG_DEBUG)("SB16 ASP write internal RAM byte index=0x%03x val=0x%02x",sb16asp_ram_contents_index,dsp.in.data[1]); + sb16asp_write_current_RAM_byte(dsp.in.data[1]); + + if (ASP_mode & 2) // if bit 1 of the mode is set, memory index increment on write + sb16asp_next_RAM_byte(); + } + else { + // unknown. nothing, I assume? + LOG(LOG_SB,LOG_WARN)("SB16 ASP set register 0x83 not implemented for non-memory mode (unknown behavior)\n"); + } + } + else { + LOG(LOG_SB,LOG_DEBUG)("SB16 ASP set register reg=0x%02x val=0x%02x",dsp.in.data[0],dsp.in.data[1]); + } + } + else { + LOG(LOG_SB,LOG_DEBUG)("SB16 ASP set register reg=0x%02x val=0x%02x ignored, ASP not enabled",dsp.in.data[0],dsp.in.data[1]); + } + } else { + LOG(LOG_SB,LOG_NORMAL)("DSP Unhandled SB16ASP command %X (set register)",dsp.cmd); + } + break; + case 0x0f: /* SB16 ASP get register */ + if (type == SBT_16) { + // FIXME: We have to emulate this whether or not ASP emulation is enabled. Windows 98 SB16 driver requires this. + // The question is: What does actual hardware do here exactly? + if (enable_asp && dsp.in.data[0] == 0x83) { + if ((ASP_mode&0x88) == 0x88) { // bit 3 and bit 7 must be set + // memory access mode + if (ASP_mode & 4) // NTS: As far as I can tell... + sb16asp_ram_contents_index = 0; + + // log it, read it + ASP_regs[0x83] = sb16asp_read_current_RAM_byte(); + LOG(LOG_SB,LOG_DEBUG)("SB16 ASP read internal RAM byte index=0x%03x => val=0x%02x",sb16asp_ram_contents_index,ASP_regs[0x83]); + + if (ASP_mode & 1) // if bit 0 of the mode is set, memory index increment on read + sb16asp_next_RAM_byte(); + } + else { + // chip version ID + ASP_regs[0x83] = 0x10; + } + } + else { + LOG(LOG_SB,LOG_DEBUG)("SB16 ASP get register reg=0x%02x, returning 0x%02x",dsp.in.data[0],ASP_regs[dsp.in.data[0]]); + } + + DSP_AddData(ASP_regs[dsp.in.data[0]]); + } else { + LOG(LOG_SB,LOG_NORMAL)("DSP Unhandled SB16ASP command %X (get register)",dsp.cmd); + } + break; + case 0x10: /* Direct DAC */ + DSP_ChangeMode(MODE_DAC); + + /* just in case something is trying to play direct DAC audio while the speaker is turned off... */ + if (!speaker && directdac_warn_speaker_off) { + LOG(LOG_SB,LOG_DEBUG)("DSP direct DAC sample written while speaker turned off. Program should use DSP command 0xD1 to turn it on."); + directdac_warn_speaker_off = false; + } + + freq = 22050; + freq_derived_from_tc = true; + dac.dac_pt = dac.dac_t; + dac.dac_t = PIC_FullIndex(); + { + double dt = dac.dac_t - dac.dac_pt; // time in milliseconds since last direct DAC output + double rt = 1000 / dt; // estimated sample rate according to dt + int s,sc = 1; + + // cap rate estimate to sanity. <= 1KHz means rendering once per timer tick in DOSBox, + // so there's no point below that rate in additional rendering. + if (rt < 1000) rt = 1000; + + // FIXME: What does the ESS AudioDrive do to its filter/sample rate divider registers when emulating this Sound Blaster command? + ESSreg(0xA1) = 128 - (397700 / 22050); + ESSreg(0xA2) = 256 - (7160000 / (82 * ((4 * 22050) / 10))); + + // Direct DAC playback could be thought of as application-driven 8-bit output up to 23KHz. + // The sound card isn't given any hint what the actual sample rate is, only that it's given + // instruction when to change the 8-bit value being output to the DAC which is why older DOS + // games using this method tend to sound "grungy" compared to DMA playback. We recreate the + // effect here by asking the mixer to do its linear interpolation as if at 23KHz while + // rendering the audio at whatever rate the DOS game is giving it to us. + chan->SetFreq((Bitu)(rt * 0x100),0x100); + updateSoundBlasterFilter(freq); + + // avoid popping/crackling artifacts through the mixer by ensuring the render output is prefilled enough + if (chan->msbuffer_o < 40/*FIXME: ask the mixer code!*/) sc += 2/*FIXME: use mixer rate / rate math*/; + + // do it + for (s=0;s < sc;s++) chan->AddSamples_m8(1,(uint8_t*)(&dsp.in.data[0])); + } + break; + case 0x99: /* Single Cycle 8-Bit DMA High speed DAC */ + DSP_SB201_ABOVE; + /* fall through */ + case 0x24: /* Single Cycle 8-Bit DMA ADC */ + dma.recording=true; + DSP_PrepareDMA_Old(DSP_DMA_8,false,false,/*hispeed*/(dsp.cmd&0x80)!=0); + LOG(LOG_SB,LOG_WARN)("Guest recording audio using SB/SBPro commands"); + break; + case 0x98: /* Auto Init 8-bit DMA High Speed */ + DSP_SB201_ABOVE; + case 0x2c: /* Auto Init 8-bit DMA */ + DSP_SB2_ABOVE; /* Note: 0x98 is documented only for DSP ver.2.x and 3.x, not 4.x */ + dma.recording=true; + DSP_PrepareDMA_Old(DSP_DMA_8,true,false,/*hispeed*/(dsp.cmd&0x80)!=0); + break; + case 0x91: /* Single Cycle 8-Bit DMA High speed DAC */ + DSP_SB201_ABOVE; + /* fall through */ + case 0x14: /* Single Cycle 8-Bit DMA DAC */ + case 0x15: /* Wari hack. Waru uses this one instead of 0x14, but some weird stuff going on there anyway */ + /* Note: 0x91 is documented only for DSP ver.2.x and 3.x, not 4.x */ + dma.recording=false; + DSP_PrepareDMA_Old(DSP_DMA_8,false,false,/*hispeed*/(dsp.cmd&0x80)!=0); + break; + case 0x90: /* Auto Init 8-bit DMA High Speed */ + DSP_SB201_ABOVE; + case 0x1c: /* Auto Init 8-bit DMA */ + DSP_SB2_ABOVE; /* Note: 0x90 is documented only for DSP ver.2.x and 3.x, not 4.x */ + dma.recording=false; + DSP_PrepareDMA_Old(DSP_DMA_8,true,false,/*hispeed*/(dsp.cmd&0x80)!=0); + break; + case 0x38: /* Write to SB MIDI Output */ + if (midi == true) MIDI_RawOutByte(dsp.in.data[0]); + break; + case 0x40: /* Set Timeconstant */ + DSP_ChangeRate(256000000ul / (65536ul - ((unsigned int)dsp.in.data[0] << 8u))); + timeconst=dsp.in.data[0]; + freq_derived_from_tc=true; + + if (ess_type != ESS_NONE) ESSUpdateFilterFromSB(); + break; + case 0x41: /* Set Output Samplerate */ + case 0x42: /* Set Input Samplerate */ + if (reveal_sc_type == RSC_SC400) { + /* Despite reporting itself as Sound Blaster Pro compatible, the Reveal SC400 supports some SB16 commands like this one */ + } + else { + DSP_SB16_ONLY; + } + + DSP_ChangeRate(((unsigned int)dsp.in.data[0] << 8u) | (unsigned int)dsp.in.data[1]); + freq_derived_from_tc=false; + sb16_8051_mem[0x13] = freq & 0xffu; // rate low + sb16_8051_mem[0x14] = (freq >> 8u) & 0xffu; // rate high + break; + case 0x48: /* Set DMA Block Size */ + DSP_SB2_ABOVE; + //TODO Maybe check limit for new irq? + dma.total=1u+(unsigned int)dsp.in.data[0]+((unsigned int)dsp.in.data[1] << 8u); + // NTS: From Creative documentation: This is the number of BYTES to transfer per IRQ, not SAMPLES! + // dma.total is in SAMPLES (unless 16-bit PCM over 8-bit DMA) because this code inherits that + // design from DOSBox SVN. This check is needed for any DOS game or application that changes + // DSP block size during the game (such as when transitioning from general gameplay to spoken + // dialogue), and it is needed to stop Freddy Pharkas from stuttering when sbtype=sb16 ref + // [https://github.com/joncampbell123/dosbox-x/issues/2960] + // NTS: Do NOT divide the byte count by 2 if 16-bit PCM audio but using an 8-bit DMA channel (DSP_DMA_16_ALIASED). + // dma.total in that cause really does contain the byte count of a DSP block. 16-bit PCM over 8-bit DMA + // is possible on real hardware too, likely as a fallback in case 16-bit DMA channels are just not available. + // Note that on one of my ViBRA PnP cards, 8-bit DMA is the only option because 16-bit DMA doesn't work for + // some odd reason. --J.C. + if (dma.mode == DSP_DMA_16) { + // NTS: dma.total is the number of individual samples, not paired samples, likely as a side effect of how + // this code was originally written over at DOSBox SVN regarding how block durations are handled with + // the Sound Blaster Pro in which the Pro treats stereo output as just mono that is alternately latched + // to left and right DACs. The SB16 handling here also follows that tradition because Creative's SB16 + // playback commands 0xB0-0xCF follow the same tradition: Block size specified in the command is given + // in samples, and by samples, they mean individual samples, and therefore it is still doubled when + // asked to play stereo audio. I suppose this is why Linux ALSA chose to further clarify the terminology + // by defining audio "samples" vs audio "frames". + // NTS: The dma.total as individual sample count has been confirmed with DOSLIB and real hardware, and by + // looking at snd_sb16_capture_prepare() in sound/isa/sb/sb16_main.c in the Linux kernel source. + if (dma.total & 1) LOG(LOG_SB,LOG_WARN)("DSP command 0x48: 16-bit PCM and odd number of bytes given for block length"); + dma.total >>= 1u; + } + break; + case 0x75: /* 075h : Single Cycle 4-bit ADPCM Reference */ + adpcm.haveref=true; + /* FALLTHROUGH */ + case 0x74: /* 074h : Single Cycle 4-bit ADPCM */ + dma.recording=false; + DSP_PrepareDMA_Old(DSP_DMA_4,false,false,false); + break; + case 0x77: /* 077h : Single Cycle 3-bit(2.6bit) ADPCM Reference*/ + adpcm.haveref=true; + /* FALLTHROUGH */ + case 0x76: /* 074h : Single Cycle 3-bit(2.6bit) ADPCM */ + dma.recording=false; + DSP_PrepareDMA_Old(DSP_DMA_3,false,false,false); + break; + case 0x7d: /* Auto Init 4-bit ADPCM Reference */ + DSP_SB2_ABOVE; + adpcm.haveref=true; + dma.recording=false; + DSP_PrepareDMA_Old(DSP_DMA_4,true,false,false); + break; + case 0x7f: /* Auto Init 3-bit(2.6bit) ADPCM Reference */ + DSP_SB2_ABOVE; + adpcm.haveref=true; + dma.recording=false; + DSP_PrepareDMA_Old(DSP_DMA_3,true,false,false); + break; + case 0x1f: /* Auto Init 2-bit ADPCM Reference */ + DSP_SB2_ABOVE; + adpcm.haveref=true; + dma.recording=false; + DSP_PrepareDMA_Old(DSP_DMA_2,true,false,false); + break; + case 0x17: /* 017h : Single Cycle 2-bit ADPCM Reference*/ + adpcm.haveref=true; + /* FALLTHROUGH */ + case 0x16: /* 074h : Single Cycle 2-bit ADPCM */ + dma.recording=false; + DSP_PrepareDMA_Old(DSP_DMA_2,false,false,false); + break; + case 0x80: /* Silence DAC */ + PIC_AddEvent(&DSP_RaiseIRQEvent, + (1000.0f*(1+dsp.in.data[0]+(dsp.in.data[1] << 8))/freq), + (card_index << CARD_INDEX_BIT)); + break; + case 0xb0: case 0xb1: case 0xb2: case 0xb3: case 0xb4: case 0xb5: case 0xb6: case 0xb7: + case 0xb8: case 0xb9: case 0xba: case 0xbb: case 0xbc: case 0xbd: case 0xbe: case 0xbf: + case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: + case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: + /* The low 5 bits DO have specific meanings: + + Bx - Program 16-bit DMA mode digitized sound I/O + Command sequence: Command, Mode, Lo(Length-1), Hi(Length-1) +Command: +╔════╤════╤════╤════╤═══════╤══════╤═══════╤════╗ +║ D7 │ D6 │ D5 │ D4 │ D3 │ D2 │ D1 │ D0 ║ +╠════╪════╪════╪════╪═══════╪══════╪═══════╪════╣ +║ 1 │ 0 │ 1 │ 1 │ A/D │ A/I │ FIFO │ 0 ║ +╚════╧════╧════╧════┼───────┼──────┼───────┼════╝ + │ 0=D/A │ 0=SC │ 0=off │ + │ 1=A/D │ 1=AI │ 1=on │ + └───────┴──────┴───────┘ +Common commands: +B8 - 16-bit single-cycle input +B0 - 16-bit single-cycle output +BE - 16-bit auto-initialized input +B6 - 16-bit auto-initialized output + +Mode: +╔════╤════╤══════════╤════════════╤════╤════╤════╤════╗ +║ D7 │ D6 │ D5 │ D4 │ D3 │ D2 │ D1 │ D0 ║ +╠════╪════╪══════════╪════════════╪════╪════╪════╪════╣ +║ 0 │ 0 │ Stereo │ Signed │ 0 │ 0 │ 0 │ 0 ║ +╚════╧════┼──────────┼────────────┼════╧════╧════╧════╝ + │ 0=Mono │ 0=unsigned │ + │ 1=Stereo │ 1=signed │ + └──────────┴────────────┘ + +Cx - Program 8-bit DMA mode digitized sound I/O +Same procedure as 16-bit sound I/O using command Bx +Common commands: +C8 - 8-bit single-cycle input +C0 - 8-bit single-cycle output +CE - 8-bit auto-initialized input +C6 - 8-bit auto-initialized output + +Note that this code makes NO attempt to distinguish recording vs playback commands, which +is responsible for some failures such as [https://github.com/joncampbell123/dosbox-x/issues/1589] +*/ + if (reveal_sc_type == RSC_SC400) { + /* Despite reporting itself as Sound Blaster Pro, the Reveal SC400 cards do support *some* SB16 DSP commands! */ + /* BUT, it only recognizes a subset of this range. */ + if (dsp.cmd == 0xBE || dsp.cmd == 0xB6 || + dsp.cmd == 0xCE || dsp.cmd == 0xC6) { + /* OK! */ + } + else { + LOG(LOG_SB,LOG_DEBUG)("SC400: SB16 playback command not recognized"); + break; + } + } + else { + DSP_SB16_ONLY; + } + + if (dsp.cmd & 8) LOG(LOG_SB,LOG_WARN)("Guest recording audio using SB16 commands"); + + /* Generic 8/16 bit DMA */ + // DSP_SetSpeaker(true); //SB16 always has speaker enabled + dma.sign=(dsp.in.data[0] & 0x10) > 0; + dma.recording=(dsp.cmd & 0x8) > 0; + DSP_PrepareDMA_New((dsp.cmd & 0x10) ? DSP_DMA_16 : DSP_DMA_8, + 1u+(unsigned int)dsp.in.data[1]+((unsigned int)dsp.in.data[2] << 8u), + (dsp.cmd & 0x4)>0, + (dsp.in.data[0] & 0x20) > 0 + ); + break; + case 0xd5: /* Halt 16-bit DMA */ + DSP_SB16_ONLY; + case 0xd0: /* Halt 8-bit DMA */ + chan->FillUp(); + // DSP_ChangeMode(MODE_NONE); + // Games sometimes already program a new dma before stopping, gives noise + if (mode==MODE_NONE) { + // possibly different code here that does not switch to MODE_DMA_PAUSE + } + mode=MODE_DMA_PAUSE; + PIC_RemoveEvents(END_DMA_Event); + PIC_RemoveEvents(DMA_DAC_Event); + break; + case 0xd1: /* Enable Speaker */ + chan->FillUp(); + DSP_SetSpeaker(true); + break; + case 0xd3: /* Disable Speaker */ + chan->FillUp(); + DSP_SetSpeaker(false); + + /* There are demoscene productions that reinitialize sound between parts. + * But instead of stopping playback, then starting it again, the demo leaves + * DMA running through RAM and expects the "DSP Disable Speaker" command to + * prevent the arbitrary contents of RAM from coming out the sound card as static + * while it loads data. The problem is, DSP enable/disable speaker commands don't + * do anything on Sound Blaster 16 cards. This is why such demos run fine when + * sbtype=sbpro2, but emit static/noise between demo parts when sbtype=sb16. + * The purpose of this warning is to clue the user on in this fact and suggest + * a fix. + * + * Demoscene productions known to have this bug/problem with sb16: + * - "Saga" by Dust (1993) noise/static between demo parts + * - "Facts of life" by Witan (1992) noise/static during star wars scroller at the beginning + */ + if (type == SBT_16 && mode == MODE_DMA) + LOG(LOG_MISC,LOG_WARN)("SB16 warning: DSP Disable Speaker command used while DMA is running, which has no effect on audio output on SB16 hardware. Audible noise/static may occur. You can eliminate the noise by setting sbtype=sbpro2"); + + break; + case 0xd8: /* Speaker status */ + DSP_SB2_ABOVE; + DSP_FlushData(); + if (speaker) DSP_AddData(0xff); + else DSP_AddData(0x00); + break; + case 0xd6: /* Continue DMA 16-bit */ + DSP_SB16_ONLY; + case 0xd4: /* Continue DMA 8-bit*/ + chan->FillUp(); + if (mode==MODE_DMA_PAUSE) { + mode=MODE_DMA_MASKED; + if (dma.chan!=NULL) dma.chan->Register_Callback(DSP_DMA_CallBack); + } + break; + case 0x47: /* Continue Autoinitialize 16-bit */ + case 0x45: /* Continue Autoinitialize 8-bit */ + DSP_SB16_ONLY; + chan->FillUp(); + dma.autoinit=true; // No. This DSP command does not resume DMA playback + break; + case 0xd9: /* Exit Autoinitialize 16-bit */ + DSP_SB16_ONLY; + case 0xda: /* Exit Autoinitialize 8-bit */ + DSP_SB2_ABOVE; + /* Set mode to single transfer so it ends with current block */ + dma.autoinit=false; //Should stop itself + chan->FillUp(); + break; + case 0xe0: /* DSP Identification - SB2.0+ */ + DSP_FlushData(); + DSP_AddData(~dsp.in.data[0]); + break; + case 0xe1: /* Get DSP Version */ + LOG(LOG_SB,LOG_NORMAL)("DSP cmd 0xE1: Get DSP Version, type=%d", type); + DSP_FlushData(); + switch (type) { + case SBT_1: + if (subtype == SBST_100) { DSP_AddData(0x1); DSP_AddData(0x0); } + else { DSP_AddData(0x1); DSP_AddData(0x5); } + break; + case SBT_2: + if (subtype == SBST_200) { DSP_AddData(0x2); DSP_AddData(0x0); } + else { DSP_AddData(0x2); DSP_AddData(0x1); } + break; + case SBT_PRO1: + DSP_AddData(0x3); DSP_AddData(0x0);break; + case SBT_PRO2: + if (ess_type != ESS_NONE) { + DSP_AddData(0x3); DSP_AddData(0x1); + } + else if (reveal_sc_type == RSC_SC400) { // SC400 cards report as v3.5 by default, but there is a DSP command to change the version! + DSP_AddData(sc400_dsp_major); DSP_AddData(sc400_dsp_minor); + } + else { + DSP_AddData(0x3); DSP_AddData(0x2); + } + break; + case SBT_16: + if (vibra) { + DSP_AddData(4); /* SB16 ViBRA DSP 4.13 */ + DSP_AddData(13); + } + else { + DSP_AddData(4); /* SB16 DSP 4.05 */ + DSP_AddData(5); + } + break; + default: + break; + } + break; + case 0xe2: /* Weird DMA identification write routine */ + { + LOG(LOG_SB,LOG_NORMAL)("DSP Function 0xe2"); + e2.valadd += dsp.in.data[0] ^ e2.valxor; + e2.valxor = (e2.valxor >> 2u) | (e2.valxor << 6u); + GetDMAChannel(hw.dma8)->userData = card_index; + GetDMAChannel(hw.dma8)->Register_Callback(DSP_E2_DMA_CallBack); + } + break; + case 0xe3: /* DSP Copyright */ + { + DSP_FlushData(); + if (ess_type != ESS_NONE) { + /* ESS chips do not return copyright string */ + DSP_AddData(0); + } + else if (reveal_sc_type == RSC_SC400) { + static const char *gallant = "SC-6000"; + + /* NTS: Yes, this writes the terminating NUL as well. Not a bug. */ + for (size_t i=0;i<=strlen(gallant);i++) { + DSP_AddData((uint8_t)gallant[i]); + } + } + else if (type <= SBT_PRO2) { + /* Sound Blaster DSP 2.0: No copyright string observed. */ + /* Sound Blaster Pro DSP 3.1: No copyright string observed. */ + /* I have yet to observe if a Sound Blaster Pro DSP 3.2 (SBT_PRO2) returns a copyright string. */ + /* no response */ + } + else { + /* NTS: Yes, this writes the terminating NUL as well. Not a bug. */ + for (size_t i=0;i<=strlen(copyright_string);i++) { + DSP_AddData((uint8_t)copyright_string[i]); + } + } + } + break; + case 0xe4: /* Write Test Register */ + dsp.test_register=dsp.in.data[0]; + break; + case 0xe7: /* ESS detect/read config */ + if (ess_type != ESS_NONE) { + DSP_FlushData(); + switch (ess_type) { + case ESS_NONE: + break; + case ESS_688: + DSP_AddData(0x68); + DSP_AddData(0x80 | 0x04); + break; + case ESS_1688: + // Determined via Windows driver debugging. + DSP_AddData(0x68); + DSP_AddData(0x80 | 0x09); + break; + } + } + break; + case 0xe8: /* Read Test Register */ + DSP_FlushData(); + DSP_AddData(dsp.test_register); + break; + case 0xf2: /* Trigger 8bit IRQ */ + //Small delay in order to emulate the slowness of the DSP, fixes Llamatron 2012 and Lemmings 3D + PIC_AddEvent(&DSP_RaiseIRQEvent,0.01f,(card_index << CARD_INDEX_BIT)); + break; + case 0xa0: case 0xa8: /* Documented only for DSP 3.x */ + if (type == SBT_PRO1 || type == SBT_PRO2) + mixer.stereo = (dsp.cmd & 8) > 0; /* <- HACK! 0xA0 input mode to mono 0xA8 stereo */ + else + LOG(LOG_SB,LOG_WARN)("DSP command A0h/A8h are only supported in Sound Blaster Pro emulation mode"); + break; + case 0xf3: /* Trigger 16bit IRQ */ + DSP_SB16_ONLY; + SB_RaiseIRQ(SB_IRQ_16); + break; + case 0xf8: /* Undocumented, pre-SB16 only */ + DSP_FlushData(); + DSP_AddData(0); + break; + case 0x30: case 0x31: case 0x32: case 0x33: + LOG(LOG_SB,LOG_ERROR)("DSP:Unimplemented MIDI I/O command %2X",dsp.cmd); + break; + case 0x34: /* MIDI Read Poll & Write Poll */ + DSP_SB2_ABOVE; + LOG(LOG_SB,LOG_DEBUG)("DSP:Entering MIDI Read/Write Poll mode"); + dsp.midi_rwpoll_mode = true; + break; + case 0x35: /* MIDI Read Interrupt & Write Poll */ + DSP_SB2_ABOVE; + LOG(LOG_SB,LOG_DEBUG)("DSP:Entering MIDI Read Interrupt/Write Poll mode"); + dsp.midi_rwpoll_mode = true; + dsp.midi_read_interrupt = true; + break; + case 0x37: /* MIDI Read Timestamp Interrupt & Write Poll */ + DSP_SB2_ABOVE; + LOG(LOG_SB,LOG_DEBUG)("DSP:Entering MIDI Read Timestamp Interrupt/Write Poll mode"); + dsp.midi_rwpoll_mode = true; + dsp.midi_read_interrupt = true; + dsp.midi_read_with_timestamps = true; + break; + case 0x20: /* Direct ADC - 8-bit single sample */ +#if defined(_MSC_VER) || defined(__MINGW64__) + if (recording_source == REC_MICROPHONE && MIC_IsAvailable()) { + DSP_AddData(MIC_GetDirectADCSample()); + } else { + DSP_AddData(0x7f); // fake silent input + } +#else + DSP_AddData(0x7f); // fake silent input for Creative parrot +#endif + break; + case 0x88: /* Reveal SC400 ??? (used by TESTSC.EXE) */ + if (reveal_sc_type != RSC_SC400) break; + /* ??? */ + break; + case 0xE6: /* Reveal SC400 DMA test */ + if (reveal_sc_type != RSC_SC400) break; + GetDMAChannel(hw.dma8)->userData = card_index; + GetDMAChannel(hw.dma8)->Register_Callback(DSP_SC400_E6_DMA_CallBack); + dsp.out.lastval = 0x80; + dsp.out.used = 0; + break; + case 0x50: /* Reveal SC400 write configuration */ + if (reveal_sc_type != RSC_SC400) break; + sc400_cfg = dsp.in.data[0]; + + switch (dsp.in.data[0]&3) { + case 0: hw.dma8 = (uint8_t)(-1); break; + case 1: hw.dma8 = 0u; break; + case 2: hw.dma8 = 1u; break; + case 3: hw.dma8 = 3u; break; + } + hw.dma16 = hw.dma8; + switch ((dsp.in.data[0]>>3)&7) { + case 0: hw.irq = (uint8_t)(-1); break; + case 1: hw.irq = 7u; break; + case 2: hw.irq = 9u; break; + case 3: hw.irq = 10u; break; + case 4: hw.irq = 11u; break; + case 5: hw.irq = 5u; break; + case 6: hw.irq = (uint8_t)(-1); break; + case 7: hw.irq = (uint8_t)(-1); break; + } + { + int irq; + + if (dsp.in.data[0]&0x04) /* MPU IRQ enable bit */ + irq = (dsp.in.data[0]&0x80) ? 9 : 5; + else + irq = -1; + + if (irq != MPU401_GetIRQ()) + LOG(LOG_SB,LOG_WARN)("SC400 warning: MPU401 emulation does not yet support changing the IRQ through configuration commands"); + } + + LOG(LOG_SB,LOG_DEBUG)("SC400: New configuration byte %02x irq=%d dma=%d", + dsp.in.data[0],(int)hw.irq,(int)hw.dma8); + + break; + case 0x58: /* Reveal SC400 read configuration */ + if (reveal_sc_type != RSC_SC400) break; + DSP_AddData(sc400_jumper_status_1); + DSP_AddData(sc400_jumper_status_2); + DSP_AddData(sc400_cfg); + break; + case 0x6E: /* Reveal SC400 SBPRO.EXE set DSP version */ + if (reveal_sc_type != RSC_SC400) break; + sc400_dsp_major = dsp.in.data[0]; + sc400_dsp_minor = dsp.in.data[1]; + LOG(LOG_SB,LOG_DEBUG)("SC400: DSP version changed to %u.%u", + sc400_dsp_major,sc400_dsp_minor); + break; + case 0xfa: /* SB16 8051 memory write */ + if (type == SBT_16) { + sb16_8051_mem[dsp.in.data[0]] = dsp.in.data[1]; + LOG(LOG_SB,LOG_NORMAL)("SB16 8051 memory write %x byte %x",dsp.in.data[0],dsp.in.data[1]); + } else { + LOG(LOG_SB,LOG_ERROR)("DSP:Unhandled (undocumented) command %2X",dsp.cmd); + } + break; + case 0xf9: /* SB16 8051 memory read */ + if (type == SBT_16) { + DSP_AddData(sb16_8051_mem[dsp.in.data[0]]); + LOG(LOG_SB,LOG_NORMAL)("SB16 8051 memory read %x, got byte %x",dsp.in.data[0],sb16_8051_mem[dsp.in.data[0]]); + } else { + LOG(LOG_SB,LOG_ERROR)("DSP:Unhandled (undocumented) command %2X",dsp.cmd); + } + break; + default: + LOG(LOG_SB,LOG_ERROR)("DSP:Unhandled (undocumented) command %2X",dsp.cmd); + break; + } + + if (type == SBT_16) { + // FIXME: This is a guess! See also [https://github.com/joncampbell123/dosbox-x/issues/1044#issuecomment-480024957] + sb16_8051_mem[0x30] = dsp.last_cmd; /* last_cmd */ + } + + dsp.last_cmd=dsp.cmd; + dsp.cmd=DSP_NO_COMMAND; + dsp.cmd_len=0; + dsp.in.pos=0; } -static inline uint8_t expand16to32(const uint8_t t) { - /* 4-bit -> 5-bit expansion. - * - * 0 -> 0 - * 1 -> 2 - * 2 -> 4 - * 3 -> 6 - * .... - * 7 -> 14 - * 8 -> 17 - * 9 -> 19 - * 10 -> 21 - * 11 -> 23 - * .... - * 15 -> 31 */ - return (t << 1) | (t >> 3); +// TODO: Put out the various hardware listed here, do some listening tests to confirm the emulation is accurate. +void SB_INFO::updateSoundBlasterFilter(Bitu rate) { + /* "No filtering" option for those who don't want it, or are used to the way things sound in plain vanilla DOSBox */ + if (no_filtering) { + chan->SetLowpassFreq(0/*off*/); + chan->SetSlewFreq(0/*normal linear interpolation*/); + return; + } + + /* different sound cards filter their output differently */ + if (ess_type != ESS_NONE) { // ESS AudioDrive. Tested against real hardware (ESS 688) by Jonathan C. + /* ESS AudioDrive lets the driver decide what the cutoff/rolloff to use */ + /* "The ratio of the roll-off frequency to the clock frequency is 1:82. In other words, + * first determine the desired roll off frequency by taking 80% of the sample rate + * divided by 2, the multiply by 82 to find the desired filter clock frequency" + * + * Try to approximate the ESS's filter by undoing the calculation then feeding our own lowpass filter with it. + * + * This implementation is matched against real hardware by ear, even though the reference hardware is a + * laptop with a cheap tinny amplifier */ + uint64_t filter_raw = (uint64_t)7160000ULL / (256u - ESSreg(0xA2)); + uint64_t filter_hz = (filter_raw * (uint64_t)11) / (uint64_t)(82 * 4); /* match lowpass by ear compared to real hardware */ + + if ((filter_hz * 2) > freq) + chan->SetSlewFreq(filter_hz * 2 * chan->freq_d_orig); + else + chan->SetSlewFreq(0); + + chan->SetLowpassFreq(filter_hz,/*order*/8); + } + else if (type == SBT_16 || // Sound Blaster 16 (DSP 4.xx). Tested against real hardware (CT4180 ViBRA 16C PnP) by Jonathan C. + reveal_sc_type == RSC_SC400) { // Reveal SC400 (DSP 3.5). Tested against real hardware by Jonathan C. + // My notes: The DSP automatically applies filtering at low sample rates. But the DSP has to know + // what the sample rate is to filter. If you use direct DAC output (DSP command 0x10) + // then no filtering is applied and the sound comes out grungy, just like older Sound + // Blaster cards. + // + // I can also confirm the SB16's reputation for hiss and noise is true, it's noticeable + // with earbuds and the mixer volume at normal levels. --Jonathan C. + if (mode == MODE_DAC) { + chan->SetLowpassFreq(23000); + chan->SetSlewFreq(23000 * chan->freq_d_orig); + } + else { + chan->SetLowpassFreq(rate/2,1); + chan->SetSlewFreq(0/*normal linear interpolation*/); + } + } + else if (type == SBT_PRO1 || type == SBT_PRO2) { // Sound Blaster Pro (DSP 3.x). Tested against real hardware (CT1600) by Jonathan C. + chan->SetSlewFreq(23000 * chan->freq_d_orig); + if (mixer.filter_bypass) + chan->SetLowpassFreq(23000); // max sample rate 46000Hz. slew rate filter does the rest of the filtering for us. + else + chan->SetLowpassFreq(3800); // NOT documented by Creative, guess based on listening tests with a CT1600, and documented Input filter freqs + } + else if (type == SBT_1 || type == SBT_2) { // Sound Blaster DSP 1.x and 2.x (not Pro). Tested against real hardware (CT1350B) by Jonathan C. + /* As far as I can tell the DAC outputs sample-by-sample with no filtering whatsoever, aside from the limitations of analog audio */ + chan->SetSlewFreq(23000 * chan->freq_d_orig); + chan->SetLowpassFreq(23000); + } } -static unsigned char pc98_mixctl_reg = 0x14; +void SB_INFO::DSP_ChangeStereo(bool stereo) { + if (!dma.stereo && stereo) { + chan->SetFreq(freq/2); + updateSoundBlasterFilter(freq/2); + dma.mul*=2; + dma.rate=(freq*dma.mul) >> SB_SH; + dma.min=((Bitu)dma.rate*(Bitu)(min_dma_user >= 0 ? min_dma_user : /*default*/3))/1000u; + } else if (dma.stereo && !stereo) { + chan->SetFreq(freq); + updateSoundBlasterFilter(freq); + dma.mul/=2; + dma.rate=(freq*dma.mul) >> SB_SH; + dma.min=((Bitu)dma.rate*(Bitu)(min_dma_user >= 0 ? min_dma_user : /*default*/3))/1000; + } + dma.stereo=stereo; +} /* Sound Blaster Pro 2 (CT1600) notes: * @@ -2756,596 +2690,621 @@ static unsigned char pc98_mixctl_reg = 0x14; * - Writing 0x00, 0x01, 0x10, 0x11 resets the mixer as expected. * - Register 0x0E is 0x11 on reset, which defaults to mono and lowpass filter enabled. * - See screenshot for mixer registers on hardware or mixer reset, file 'CT1600 Sound Blaster Pro 2 mixer register dump hardware and mixer reset state.png' */ -static void CTMIXER_Write(uint8_t val) { - switch (sb.mixer.index) { - case 0x00: /* Reset */ - CTMIXER_Reset(); - LOG(LOG_SB,LOG_WARN)("Mixer reset value %x",val); - break; - case 0x02: /* Master Volume (SB2 Only) */ - SETPROVOL(sb.mixer.master,(val&0xf)|(val<<4)); - CTMIXER_UpdateVolumes(); - break; - case 0x04: /* DAC Volume (SBPRO) */ - SETPROVOL(sb.mixer.dac,val); - CTMIXER_UpdateVolumes(); - break; - case 0x06: /* FM output selection, Somewhat obsolete with dual OPL SBpro + FM volume (SB2 Only) */ - //volume controls both channels - SETPROVOL(sb.mixer.fm,(val&0xf)|(val<<4)); - CTMIXER_UpdateVolumes(); - if(val&0x60) LOG(LOG_SB,LOG_WARN)("Turned FM one channel off. not implemented %X",val); - //TODO Change FM Mode if only 1 fm channel is selected - break; - case 0x08: /* CDA Volume (SB2 Only) */ - SETPROVOL(sb.mixer.cda,(val&0xf)|(val<<4)); - CTMIXER_UpdateVolumes(); - break; - case 0x0a: /* Mic Level (SBPRO) or DAC Volume (SB2): 2-bit, 3-bit on SB16 */ - if (sb.type==SBT_2) { - sb.mixer.dac[0]=sb.mixer.dac[1]=((val & 0x6) << 2)|3; - CTMIXER_UpdateVolumes(); - } else { - sb.mixer.mic=((val & 0x7) << 2)|(sb.type==SBT_16?1:3); - } - break; - case 0x0e: /* Output/Stereo Select */ - /* Real CT1600 notes: - * - * This register only allows changing bits 1 and 5. Each nibble can be 1 or 3, therefore on readback it will always be 0x11, 0x13, 0x31, or 0x11. - * This register is also mirrored at 0x0F, 0x1E, 0x1F. On read this register also appears over 0x00, 0x01, 0x10, 0x11, though writing that register - * resets the mixer as expected. */ - /* only allow writing stereo bit if Sound Blaster Pro OR if a SB16 and user says to allow it */ - if ((sb.type == SBT_PRO1 || sb.type == SBT_PRO2) || (sb.type == SBT_16 && !sb.sbpro_stereo_bit_strict_mode)) - sb.mixer.stereo=(val & 0x2) > 0; - - sb.mixer.sbpro_stereo=(val & 0x2) > 0; - sb.mixer.filter_bypass=(val & 0x20) > 0; /* filter is ON by default, set the bit to turn OFF the filter */ - DSP_ChangeStereo(sb.mixer.stereo); - updateSoundBlasterFilter(sb.freq); - - /* help the user out if they leave sbtype=sb16 and then wonder why their DOS game is producing scratchy monural audio. */ - if (sb.type == SBT_16 && sb.sbpro_stereo_bit_strict_mode && (val&0x2) != 0) - LOG(LOG_SB,LOG_WARN)("Mixer stereo/mono bit is set. This is Sound Blaster Pro style Stereo which is not supported by sbtype=sb16, consider using sbtype=sbpro2 instead."); - break; - case 0x14: /* Audio 1 Play Volume (ESS 688) */ - if (sb.ess_type != ESS_NONE) { - sb.mixer.dac[0]=expand16to32((val>>4)&0xF); - sb.mixer.dac[1]=expand16to32(val&0xF); - CTMIXER_UpdateVolumes(); - } - break; - case 0x22: /* Master Volume (SBPRO) */ - SETPROVOL(sb.mixer.master,val); - CTMIXER_UpdateVolumes(); - break; - case 0x26: /* FM Volume (SBPRO) */ - SETPROVOL(sb.mixer.fm,val); - CTMIXER_UpdateVolumes(); - break; - case 0x28: /* CD Audio Volume (SBPRO) */ - SETPROVOL(sb.mixer.cda,val); - CTMIXER_UpdateVolumes(); - break; - case 0x2e: /* Line-in Volume (SBPRO) */ - SETPROVOL(sb.mixer.lin,val); - break; - //case 0x20: /* Master Volume Left (SBPRO) ? */ - case 0x30: /* Master Volume Left (SB16) */ - if (sb.type==SBT_16) { - sb.mixer.master[0]=val>>3; - CTMIXER_UpdateVolumes(); - } - break; - //case 0x21: /* Master Volume Right (SBPRO) ? */ - case 0x31: /* Master Volume Right (SB16) */ - if (sb.type==SBT_16) { - sb.mixer.master[1]=val>>3; - CTMIXER_UpdateVolumes(); - } - break; - case 0x32: /* DAC Volume Left (SB16) */ - /* Master Volume (ESS 688) */ - if (sb.type==SBT_16) { - sb.mixer.dac[0]=val>>3; - CTMIXER_UpdateVolumes(); - } - else if (sb.ess_type != ESS_NONE) { - sb.mixer.master[0]=expand16to32((val>>4)&0xF); - sb.mixer.master[1]=expand16to32(val&0xF); - CTMIXER_UpdateVolumes(); - } - break; - case 0x33: /* DAC Volume Right (SB16) */ - if (sb.type==SBT_16) { - sb.mixer.dac[1]=val>>3; - CTMIXER_UpdateVolumes(); - } - break; - case 0x34: /* FM Volume Left (SB16) */ - if (sb.type==SBT_16) { - sb.mixer.fm[0]=val>>3; - CTMIXER_UpdateVolumes(); - } - break; - case 0x35: /* FM Volume Right (SB16) */ - if (sb.type==SBT_16) { - sb.mixer.fm[1]=val>>3; - CTMIXER_UpdateVolumes(); - } - break; - case 0x36: /* CD Volume Left (SB16) */ - /* FM Volume (ESS 688) */ - if (sb.type==SBT_16) { - sb.mixer.cda[0]=val>>3; - CTMIXER_UpdateVolumes(); - } - else if (sb.ess_type != ESS_NONE) { - sb.mixer.fm[0]=expand16to32((val>>4)&0xF); - sb.mixer.fm[1]=expand16to32(val&0xF); - CTMIXER_UpdateVolumes(); - } - break; - case 0x37: /* CD Volume Right (SB16) */ - if (sb.type==SBT_16) { - sb.mixer.cda[1]=val>>3; - CTMIXER_UpdateVolumes(); - } - break; - case 0x38: /* Line-in Volume Left (SB16) */ - /* AuxA (CD) Volume Register (ESS 688) */ - if (sb.type==SBT_16) - sb.mixer.lin[0]=val>>3; - else if (sb.ess_type != ESS_NONE) { - sb.mixer.cda[0]=expand16to32((val>>4)&0xF); - sb.mixer.cda[1]=expand16to32(val&0xF); - CTMIXER_UpdateVolumes(); - } - break; - case 0x39: /* Line-in Volume Right (SB16) */ - if (sb.type==SBT_16) sb.mixer.lin[1]=val>>3; - break; - case 0x3a: - if (sb.type==SBT_16) sb.mixer.mic=val>>3; - break; - case 0x3e: /* Line Volume (ESS 688) */ - if (sb.ess_type != ESS_NONE) { - sb.mixer.lin[0]=expand16to32((val>>4)&0xF); - sb.mixer.lin[1]=expand16to32(val&0xF); - } - break; - case 0x80: /* IRQ Select */ - if (sb.type==SBT_16 && !sb.vibra) { /* ViBRA PnP cards do not allow reconfiguration by this byte */ - sb.hw.irq=0xff; - if (IS_PC98_ARCH) { - if (val & 0x1) sb.hw.irq=3; - else if (val & 0x2) sb.hw.irq=10; - else if (val & 0x4) sb.hw.irq=12; - else if (val & 0x8) sb.hw.irq=5; - - // NTS: Real hardware stores only the low 4 bits. The upper 4 bits will always read back 1111. - // The value read back will always be Fxh where x contains the 4 bits checked here. - } - else { - if (val & 0x1) sb.hw.irq=2; - else if (val & 0x2) sb.hw.irq=5; - else if (val & 0x4) sb.hw.irq=7; - else if (val & 0x8) sb.hw.irq=10; - } - } - break; - case 0x81: /* DMA Select */ - if (sb.type==SBT_16 && !sb.vibra) { /* ViBRA PnP cards do not allow reconfiguration by this byte */ - sb.hw.dma8=0xff; - sb.hw.dma16=0xff; - if (IS_PC98_ARCH) { - pc98_mixctl_reg = (unsigned char)val ^ 0x14; - - if (val & 0x1) sb.hw.dma8=0; - else if (val & 0x2) sb.hw.dma8=3; - - // NTS: On real hardware, only bits 0 and 1 are writeable. bits 2 and 4 seem to act oddly in response to - // bytes written: - // - // write 0x00 read 0x14 - // write 0x01 read 0x15 - // write 0x02 read 0x16 - // write 0x03 read 0x17 - // write 0x04 read 0x10 - // write 0x05 read 0x11 - // write 0x06 read 0x12 - // write 0x07 read 0x13 - // write 0x08 read 0x1C - // write 0x09 read 0x1D - // write 0x0A read 0x1E - // write 0x0B read 0x1F - // write 0x0C read 0x18 - // write 0x0D read 0x19 - // write 0x0E read 0x1A - // write 0x0F read 0x1B - // write 0x10 read 0x04 - // write 0x11 read 0x05 - // write 0x12 read 0x06 - // write 0x13 read 0x07 - // write 0x14 read 0x00 - // write 0x15 read 0x01 - // write 0x16 read 0x02 - // write 0x17 read 0x03 - // write 0x18 read 0x0C - // write 0x19 read 0x0D - // write 0x1A read 0x0E - // write 0x1B read 0x0F - // write 0x1C read 0x08 - // write 0x1D read 0x09 - // write 0x1E read 0x0A - // write 0x1F read 0x0B - // - // This pattern repeats for any 5 bit value in bits [4:0] i.e. 0x20 will read back 0x34. - } - else { - if (val & 0x1) sb.hw.dma8=0; - else if (val & 0x2) sb.hw.dma8=1; - else if (val & 0x8) sb.hw.dma8=3; - if (val & 0x20) sb.hw.dma16=5; - else if (val & 0x40) sb.hw.dma16=6; - else if (val & 0x80) sb.hw.dma16=7; - } - LOG(LOG_SB,LOG_NORMAL)("Mixer select dma8:%x dma16:%x",sb.hw.dma8,sb.hw.dma16); - } - break; - default: - - if( ((sb.type == SBT_PRO1 || sb.type == SBT_PRO2) && sb.mixer.index==0x0c) || /* Input control on SBPro */ - (sb.type == SBT_16 && sb.mixer.index >= 0x3b && sb.mixer.index <= 0x47)) /* New SB16 registers */ - sb.mixer.unhandled[sb.mixer.index] = val; - LOG(LOG_SB,LOG_WARN)("MIXER:Write %X to unhandled index %X",val,sb.mixer.index); - } +void SB_INFO::CTMIXER_Write(uint8_t val) { + switch (mixer.index) { + case 0x00: /* Reset */ + CTMIXER_Reset(); + LOG(LOG_SB,LOG_WARN)("Mixer reset value %x",val); + break; + case 0x02: /* Master Volume (SB2 Only) */ + SETPROVOL(mixer.master,(val&0xf)|(val<<4)); + CTMIXER_UpdateVolumes(); + break; + case 0x04: /* DAC Volume (SBPRO) */ + SETPROVOL(mixer.dac,val); + CTMIXER_UpdateVolumes(); + break; + case 0x06: /* FM output selection, Somewhat obsolete with dual OPL SBpro + FM volume (SB2 Only) */ + //volume controls both channels + SETPROVOL(mixer.fm,(val&0xf)|(val<<4)); + CTMIXER_UpdateVolumes(); + if(val&0x60) LOG(LOG_SB,LOG_WARN)("Turned FM one channel off. not implemented %X",val); + //TODO Change FM Mode if only 1 fm channel is selected + break; + case 0x08: /* CDA Volume (SB2 Only) */ + SETPROVOL(mixer.cda,(val&0xf)|(val<<4)); + CTMIXER_UpdateVolumes(); + break; + case 0x0a: /* Mic Level (SBPRO) or DAC Volume (SB2): 2-bit, 3-bit on SB16 */ + if (type==SBT_2) { + mixer.dac[0]=mixer.dac[1]=((val & 0x6) << 2)|3; + CTMIXER_UpdateVolumes(); + } else { + mixer.mic=((val & 0x7) << 2)|(type==SBT_16?1:3); + } + break; + case 0x0e: /* Output/Stereo Select */ + /* Real CT1600 notes: + * + * This register only allows changing bits 1 and 5. Each nibble can be 1 or 3, therefore on readback it will always be 0x11, 0x13, 0x31, or 0x11. + * This register is also mirrored at 0x0F, 0x1E, 0x1F. On read this register also appears over 0x00, 0x01, 0x10, 0x11, though writing that register + * resets the mixer as expected. */ + /* only allow writing stereo bit if Sound Blaster Pro OR if a SB16 and user says to allow it */ + if ((type == SBT_PRO1 || type == SBT_PRO2) || (type == SBT_16 && !sbpro_stereo_bit_strict_mode)) + mixer.stereo=(val & 0x2) > 0; + + mixer.sbpro_stereo=(val & 0x2) > 0; + mixer.filter_bypass=(val & 0x20) > 0; /* filter is ON by default, set the bit to turn OFF the filter */ + DSP_ChangeStereo(mixer.stereo); + updateSoundBlasterFilter(freq); + + /* help the user out if they leave sbtype=sb16 and then wonder why their DOS game is producing scratchy monural audio. */ + if (type == SBT_16 && sbpro_stereo_bit_strict_mode && (val&0x2) != 0) + LOG(LOG_SB,LOG_WARN)("Mixer stereo/mono bit is set. This is Sound Blaster Pro style Stereo which is not supported by sbtype=sb16, consider using sbtype=sbpro2 instead."); + break; + case 0x14: /* Audio 1 Play Volume (ESS 688) */ + if (ess_type != ESS_NONE) { + mixer.dac[0]=expand16to32((val>>4)&0xF); + mixer.dac[1]=expand16to32(val&0xF); + CTMIXER_UpdateVolumes(); + } + break; + case 0x22: /* Master Volume (SBPRO) */ + SETPROVOL(mixer.master,val); + CTMIXER_UpdateVolumes(); + break; + case 0x26: /* FM Volume (SBPRO) */ + SETPROVOL(mixer.fm,val); + CTMIXER_UpdateVolumes(); + break; + case 0x28: /* CD Audio Volume (SBPRO) */ + SETPROVOL(mixer.cda,val); + CTMIXER_UpdateVolumes(); + break; + case 0x2e: /* Line-in Volume (SBPRO) */ + SETPROVOL(mixer.lin,val); + break; + //case 0x20: /* Master Volume Left (SBPRO) ? */ + case 0x30: /* Master Volume Left (SB16) */ + if (type==SBT_16) { + mixer.master[0]=val>>3; + CTMIXER_UpdateVolumes(); + } + break; + //case 0x21: /* Master Volume Right (SBPRO) ? */ + case 0x31: /* Master Volume Right (SB16) */ + if (type==SBT_16) { + mixer.master[1]=val>>3; + CTMIXER_UpdateVolumes(); + } + break; + case 0x32: /* DAC Volume Left (SB16) */ + /* Master Volume (ESS 688) */ + if (type==SBT_16) { + mixer.dac[0]=val>>3; + CTMIXER_UpdateVolumes(); + } + else if (ess_type != ESS_NONE) { + mixer.master[0]=expand16to32((val>>4)&0xF); + mixer.master[1]=expand16to32(val&0xF); + CTMIXER_UpdateVolumes(); + } + break; + case 0x33: /* DAC Volume Right (SB16) */ + if (type==SBT_16) { + mixer.dac[1]=val>>3; + CTMIXER_UpdateVolumes(); + } + break; + case 0x34: /* FM Volume Left (SB16) */ + if (type==SBT_16) { + mixer.fm[0]=val>>3; + CTMIXER_UpdateVolumes(); + } + break; + case 0x35: /* FM Volume Right (SB16) */ + if (type==SBT_16) { + mixer.fm[1]=val>>3; + CTMIXER_UpdateVolumes(); + } + break; + case 0x36: /* CD Volume Left (SB16) */ + /* FM Volume (ESS 688) */ + if (type==SBT_16) { + mixer.cda[0]=val>>3; + CTMIXER_UpdateVolumes(); + } + else if (ess_type != ESS_NONE) { + mixer.fm[0]=expand16to32((val>>4)&0xF); + mixer.fm[1]=expand16to32(val&0xF); + CTMIXER_UpdateVolumes(); + } + break; + case 0x37: /* CD Volume Right (SB16) */ + if (type==SBT_16) { + mixer.cda[1]=val>>3; + CTMIXER_UpdateVolumes(); + } + break; + case 0x38: /* Line-in Volume Left (SB16) */ + /* AuxA (CD) Volume Register (ESS 688) */ + if (type==SBT_16) + mixer.lin[0]=val>>3; + else if (ess_type != ESS_NONE) { + mixer.cda[0]=expand16to32((val>>4)&0xF); + mixer.cda[1]=expand16to32(val&0xF); + CTMIXER_UpdateVolumes(); + } + break; + case 0x39: /* Line-in Volume Right (SB16) */ + if (type==SBT_16) mixer.lin[1]=val>>3; + break; + case 0x3a: + if (type==SBT_16) mixer.mic=val>>3; + break; + case 0x3e: /* Line Volume (ESS 688) */ + if (ess_type != ESS_NONE) { + mixer.lin[0]=expand16to32((val>>4)&0xF); + mixer.lin[1]=expand16to32(val&0xF); + } + break; + case 0x80: /* IRQ Select */ + if (type==SBT_16 && !vibra) { /* ViBRA PnP cards do not allow reconfiguration by this byte */ + hw.irq=0xff; + if (IS_PC98_ARCH) { + if (val & 0x1) hw.irq=3; + else if (val & 0x2) hw.irq=10; + else if (val & 0x4) hw.irq=12; + else if (val & 0x8) hw.irq=5; + + // NTS: Real hardware stores only the low 4 bits. The upper 4 bits will always read back 1111. + // The value read back will always be Fxh where x contains the 4 bits checked here. + } + else { + if (val & 0x1) hw.irq=2; + else if (val & 0x2) hw.irq=5; + else if (val & 0x4) hw.irq=7; + else if (val & 0x8) hw.irq=10; + } + } + break; + case 0x81: /* DMA Select */ + if (type==SBT_16 && !vibra) { /* ViBRA PnP cards do not allow reconfiguration by this byte */ + hw.dma8=0xff; + hw.dma16=0xff; + if (IS_PC98_ARCH) { + pc98_mixctl_reg = (unsigned char)val ^ 0x14; + + if (val & 0x1) hw.dma8=0; + else if (val & 0x2) hw.dma8=3; + + // NTS: On real hardware, only bits 0 and 1 are writeable. bits 2 and 4 seem to act oddly in response to + // bytes written: + // + // write 0x00 read 0x14 + // write 0x01 read 0x15 + // write 0x02 read 0x16 + // write 0x03 read 0x17 + // write 0x04 read 0x10 + // write 0x05 read 0x11 + // write 0x06 read 0x12 + // write 0x07 read 0x13 + // write 0x08 read 0x1C + // write 0x09 read 0x1D + // write 0x0A read 0x1E + // write 0x0B read 0x1F + // write 0x0C read 0x18 + // write 0x0D read 0x19 + // write 0x0E read 0x1A + // write 0x0F read 0x1B + // write 0x10 read 0x04 + // write 0x11 read 0x05 + // write 0x12 read 0x06 + // write 0x13 read 0x07 + // write 0x14 read 0x00 + // write 0x15 read 0x01 + // write 0x16 read 0x02 + // write 0x17 read 0x03 + // write 0x18 read 0x0C + // write 0x19 read 0x0D + // write 0x1A read 0x0E + // write 0x1B read 0x0F + // write 0x1C read 0x08 + // write 0x1D read 0x09 + // write 0x1E read 0x0A + // write 0x1F read 0x0B + // + // This pattern repeats for any 5 bit value in bits [4:0] i.e. 0x20 will read back 0x34. + } + else { + if (val & 0x1) hw.dma8=0; + else if (val & 0x2) hw.dma8=1; + else if (val & 0x8) hw.dma8=3; + if (val & 0x20) hw.dma16=5; + else if (val & 0x40) hw.dma16=6; + else if (val & 0x80) hw.dma16=7; + } + LOG(LOG_SB,LOG_NORMAL)("Mixer select dma8:%x dma16:%x",hw.dma8,hw.dma16); + } + break; + default: + + if( ((type == SBT_PRO1 || type == SBT_PRO2) && mixer.index==0x0c) || /* Input control on SBPro */ + (type == SBT_16 && mixer.index >= 0x3b && mixer.index <= 0x47)) /* New SB16 registers */ + mixer.unhandled[mixer.index] = val; + LOG(LOG_SB,LOG_WARN)("MIXER:Write %X to unhandled index %X",val,mixer.index); + } +} + +uint8_t SB_INFO::CTMIXER_Read(void) { + uint8_t ret = 0; + + // if ( mixer.index< 0x80) LOG_MSG("Read mixer %x",mixer.index); + switch (mixer.index) { + case 0x00: /* RESET */ + return 0x00; + case 0x02: /* Master Volume (SB2 Only) */ + return ((mixer.master[1]>>1) & 0xe); + case 0x22: /* Master Volume (SBPRO) */ + return MAKEPROVOL(mixer.master); + case 0x04: /* DAC Volume (SBPRO) */ + return MAKEPROVOL(mixer.dac); + case 0x06: /* FM Volume (SB2 Only) + FM output selection */ + return ((mixer.fm[1]>>1) & 0xe); + case 0x08: /* CD Volume (SB2 Only) */ + return ((mixer.cda[1]>>1) & 0xe); + case 0x0a: /* Mic Level (SBPRO) or Voice (SB2 Only) */ + if (type==SBT_2) return (mixer.dac[0]>>2); + else return ((mixer.mic >> 2) & (type==SBT_16 ? 7:6)); + case 0x0e: /* Output/Stereo Select */ + return 0x11|(mixer.stereo ? 0x02 : 0x00)|(mixer.filter_bypass ? 0x20 : 0x00); + case 0x14: /* Audio 1 Play Volume (ESS 688) */ + if (ess_type != ESS_NONE) return ((mixer.dac[0] << 3) & 0xF0) + (mixer.dac[1] >> 1); + break; + case 0x26: /* FM Volume (SBPRO) */ + return MAKEPROVOL(mixer.fm); + case 0x28: /* CD Audio Volume (SBPRO) */ + return MAKEPROVOL(mixer.cda); + case 0x2e: /* Line-IN Volume (SBPRO) */ + return MAKEPROVOL(mixer.lin); + case 0x30: /* Master Volume Left (SB16) */ + if (type==SBT_16) return mixer.master[0]<<3; + ret=0xa; + break; + case 0x31: /* Master Volume Right (S16) */ + if (type==SBT_16) return mixer.master[1]<<3; + ret=0xa; + break; + case 0x32: /* DAC Volume Left (SB16) */ + /* Master Volume (ESS 688) */ + if (type==SBT_16) return mixer.dac[0]<<3; + if (ess_type != ESS_NONE) return ((mixer.master[0] << 3) & 0xF0) + (mixer.master[1] >> 1); + ret=0xa; + break; + case 0x33: /* DAC Volume Right (SB16) */ + if (type==SBT_16) return mixer.dac[1]<<3; + ret=0xa; + break; + case 0x34: /* FM Volume Left (SB16) */ + if (type==SBT_16) return mixer.fm[0]<<3; + ret=0xa; + break; + case 0x35: /* FM Volume Right (SB16) */ + if (type==SBT_16) return mixer.fm[1]<<3; + ret=0xa; + break; + case 0x36: /* CD Volume Left (SB16) */ + /* FM Volume (ESS 688) */ + if (type==SBT_16) return mixer.cda[0]<<3; + if (ess_type != ESS_NONE) return ((mixer.fm[0] << 3) & 0xF0) + (mixer.fm[1] >> 1); + ret=0xa; + break; + case 0x37: /* CD Volume Right (SB16) */ + if (type==SBT_16) return mixer.cda[1]<<3; + ret=0xa; + break; + case 0x38: /* Line-in Volume Left (SB16) */ + /* AuxA (CD) Volume Register (ESS 688) */ + if (type==SBT_16) return mixer.lin[0]<<3; + if (ess_type != ESS_NONE) return ((mixer.cda[0] << 3) & 0xF0) + (mixer.cda[1] >> 1); + ret=0xa; + break; + case 0x39: /* Line-in Volume Right (SB16) */ + if (type==SBT_16) return mixer.lin[1]<<3; + ret=0xa; + break; + case 0x3a: /* Mic Volume (SB16) */ + if (type==SBT_16) return mixer.mic<<3; + ret=0xa; + break; + case 0x3e: /* Line Volume (ESS 688) */ + if (ess_type != ESS_NONE) return ((mixer.lin[0] << 3) & 0xF0) + (mixer.lin[1] >> 1); + break; + case 0x40: /* ESS identification value (ES1488 and later) */ + if (ess_type != ESS_NONE) { + switch (ess_type) { + case ESS_688: + ret=0xa; + break; + case ESS_1688: + ret=mixer.ess_id_str[mixer.ess_id_str_pos]; + mixer.ess_id_str_pos++; + if (mixer.ess_id_str_pos >= 4) { + mixer.ess_id_str_pos = 0; + } + break; + default: + ret=0xa; + LOG(LOG_SB,LOG_WARN)("MIXER:FIXME:ESS identification function (0x%X) for selected card is not implemented",mixer.index); + } + } else { + if (type == SBT_16) { + ret=mixer.unhandled[mixer.index]; + } else { + ret=0xa; + } + LOG(LOG_SB,LOG_WARN)("MIXER:Read from unhandled index %X",mixer.index); + } + break; + case 0x80: /* IRQ Select */ + ret=0; + if (IS_PC98_ARCH) { + switch (hw.irq) { + case 3: return 0xF1; // upper 4 bits always 1111 + case 10: return 0xF2; + case 12: return 0xF4; + case 5: return 0xF8; + } + } + else { + switch (hw.irq) { + case 2: return 0x1; + case 5: return 0x2; + case 7: return 0x4; + case 10: return 0x8; + } + } + break; + case 0x81: /* DMA Select */ + ret=0; + if (IS_PC98_ARCH) { + switch (hw.dma8) { + case 0:ret|=0x1;break; + case 3:ret|=0x2;break; + } + + // there's some strange behavior on the PC-98 version of the card + ret |= (pc98_mixctl_reg & (~3u)); + } + else { + switch (hw.dma8) { + case 0:ret|=0x1;break; + case 1:ret|=0x2;break; + case 3:ret|=0x8;break; + } + switch (hw.dma16) { + case 5:ret|=0x20;break; + case 6:ret|=0x40;break; + case 7:ret|=0x80;break; + } + } + return ret; + case 0x82: /* IRQ Status */ + return (irq.pending_8bit ? 0x1 : 0) | + (irq.pending_16bit ? 0x2 : 0) | + ((type == SBT_16) ? 0x20 : 0); + default: + if ( ((type == SBT_PRO1 || type == SBT_PRO2) && mixer.index==0x0c) || /* Input control on SBPro */ + (type == SBT_16 && mixer.index >= 0x3b && mixer.index <= 0x47)) /* New SB16 registers */ + ret = mixer.unhandled[mixer.index]; + else + ret=0xa; + LOG(LOG_SB,LOG_WARN)("MIXER:Read from unhandled index %X",mixer.index); + } + + return ret; } -static uint8_t CTMIXER_Read(void) { - uint8_t ret = 0; - -// if ( sb.mixer.index< 0x80) LOG_MSG("Read mixer %x",sb.mixer.index); - switch (sb.mixer.index) { - case 0x00: /* RESET */ - return 0x00; - case 0x02: /* Master Volume (SB2 Only) */ - return ((sb.mixer.master[1]>>1) & 0xe); - case 0x22: /* Master Volume (SBPRO) */ - return MAKEPROVOL(sb.mixer.master); - case 0x04: /* DAC Volume (SBPRO) */ - return MAKEPROVOL(sb.mixer.dac); - case 0x06: /* FM Volume (SB2 Only) + FM output selection */ - return ((sb.mixer.fm[1]>>1) & 0xe); - case 0x08: /* CD Volume (SB2 Only) */ - return ((sb.mixer.cda[1]>>1) & 0xe); - case 0x0a: /* Mic Level (SBPRO) or Voice (SB2 Only) */ - if (sb.type==SBT_2) return (sb.mixer.dac[0]>>2); - else return ((sb.mixer.mic >> 2) & (sb.type==SBT_16 ? 7:6)); - case 0x0e: /* Output/Stereo Select */ - return 0x11|(sb.mixer.stereo ? 0x02 : 0x00)|(sb.mixer.filter_bypass ? 0x20 : 0x00); - case 0x14: /* Audio 1 Play Volume (ESS 688) */ - if (sb.ess_type != ESS_NONE) return ((sb.mixer.dac[0] << 3) & 0xF0) + (sb.mixer.dac[1] >> 1); - break; - case 0x26: /* FM Volume (SBPRO) */ - return MAKEPROVOL(sb.mixer.fm); - case 0x28: /* CD Audio Volume (SBPRO) */ - return MAKEPROVOL(sb.mixer.cda); - case 0x2e: /* Line-IN Volume (SBPRO) */ - return MAKEPROVOL(sb.mixer.lin); - case 0x30: /* Master Volume Left (SB16) */ - if (sb.type==SBT_16) return sb.mixer.master[0]<<3; - ret=0xa; - break; - case 0x31: /* Master Volume Right (S16) */ - if (sb.type==SBT_16) return sb.mixer.master[1]<<3; - ret=0xa; - break; - case 0x32: /* DAC Volume Left (SB16) */ - /* Master Volume (ESS 688) */ - if (sb.type==SBT_16) return sb.mixer.dac[0]<<3; - if (sb.ess_type != ESS_NONE) return ((sb.mixer.master[0] << 3) & 0xF0) + (sb.mixer.master[1] >> 1); - ret=0xa; - break; - case 0x33: /* DAC Volume Right (SB16) */ - if (sb.type==SBT_16) return sb.mixer.dac[1]<<3; - ret=0xa; - break; - case 0x34: /* FM Volume Left (SB16) */ - if (sb.type==SBT_16) return sb.mixer.fm[0]<<3; - ret=0xa; - break; - case 0x35: /* FM Volume Right (SB16) */ - if (sb.type==SBT_16) return sb.mixer.fm[1]<<3; - ret=0xa; - break; - case 0x36: /* CD Volume Left (SB16) */ - /* FM Volume (ESS 688) */ - if (sb.type==SBT_16) return sb.mixer.cda[0]<<3; - if (sb.ess_type != ESS_NONE) return ((sb.mixer.fm[0] << 3) & 0xF0) + (sb.mixer.fm[1] >> 1); - ret=0xa; - break; - case 0x37: /* CD Volume Right (SB16) */ - if (sb.type==SBT_16) return sb.mixer.cda[1]<<3; - ret=0xa; - break; - case 0x38: /* Line-in Volume Left (SB16) */ - /* AuxA (CD) Volume Register (ESS 688) */ - if (sb.type==SBT_16) return sb.mixer.lin[0]<<3; - if (sb.ess_type != ESS_NONE) return ((sb.mixer.cda[0] << 3) & 0xF0) + (sb.mixer.cda[1] >> 1); - ret=0xa; - break; - case 0x39: /* Line-in Volume Right (SB16) */ - if (sb.type==SBT_16) return sb.mixer.lin[1]<<3; - ret=0xa; - break; - case 0x3a: /* Mic Volume (SB16) */ - if (sb.type==SBT_16) return sb.mixer.mic<<3; - ret=0xa; - break; - case 0x3e: /* Line Volume (ESS 688) */ - if (sb.ess_type != ESS_NONE) return ((sb.mixer.lin[0] << 3) & 0xF0) + (sb.mixer.lin[1] >> 1); - break; - case 0x40: /* ESS identification value (ES1488 and later) */ - if (sb.ess_type != ESS_NONE) { - switch (sb.ess_type) { - case ESS_688: - ret=0xa; - break; - case ESS_1688: - ret=sb.mixer.ess_id_str[sb.mixer.ess_id_str_pos]; - sb.mixer.ess_id_str_pos++; - if (sb.mixer.ess_id_str_pos >= 4) { - sb.mixer.ess_id_str_pos = 0; - } - break; - default: - ret=0xa; - LOG(LOG_SB,LOG_WARN)("MIXER:FIXME:ESS identification function (0x%X) for selected card is not implemented",sb.mixer.index); - } - } else { - if (sb.type == SBT_16) { - ret=sb.mixer.unhandled[sb.mixer.index]; - } else { - ret=0xa; - } - LOG(LOG_SB,LOG_WARN)("MIXER:Read from unhandled index %X",sb.mixer.index); - } - break; - case 0x80: /* IRQ Select */ - ret=0; - if (IS_PC98_ARCH) { - switch (sb.hw.irq) { - case 3: return 0xF1; // upper 4 bits always 1111 - case 10: return 0xF2; - case 12: return 0xF4; - case 5: return 0xF8; - } - } - else { - switch (sb.hw.irq) { - case 2: return 0x1; - case 5: return 0x2; - case 7: return 0x4; - case 10: return 0x8; - } - } - break; - case 0x81: /* DMA Select */ - ret=0; - if (IS_PC98_ARCH) { - switch (sb.hw.dma8) { - case 0:ret|=0x1;break; - case 3:ret|=0x2;break; - } - - // there's some strange behavior on the PC-98 version of the card - ret |= (pc98_mixctl_reg & (~3u)); - } - else { - switch (sb.hw.dma8) { - case 0:ret|=0x1;break; - case 1:ret|=0x2;break; - case 3:ret|=0x8;break; - } - switch (sb.hw.dma16) { - case 5:ret|=0x20;break; - case 6:ret|=0x40;break; - case 7:ret|=0x80;break; - } - } - return ret; - case 0x82: /* IRQ Status */ - return (sb.irq.pending_8bit ? 0x1 : 0) | - (sb.irq.pending_16bit ? 0x2 : 0) | - ((sb.type == SBT_16) ? 0x20 : 0); - default: - if ( ((sb.type == SBT_PRO1 || sb.type == SBT_PRO2) && sb.mixer.index==0x0c) || /* Input control on SBPro */ - (sb.type == SBT_16 && sb.mixer.index >= 0x3b && sb.mixer.index <= 0x47)) /* New SB16 registers */ - ret = sb.mixer.unhandled[sb.mixer.index]; - else - ret=0xa; - LOG(LOG_SB,LOG_WARN)("MIXER:Read from unhandled index %X",sb.mixer.index); - } - - return ret; +std::string SB_INFO::GetSBtype() { + switch (type) { + case SBT_NONE: + return "None"; + case SBT_1: + return "SB1"; + case SBT_PRO1: + return "SBPro"; + case SBT_2: + return "SB2"; + case SBT_PRO2: + return "SBPro 2"; + case SBT_16: + return "SB16"; + case SBT_GB: + return "GB"; + default: + return "Unknown"; + } } +Bitu SB_INFO::read_sb(Bitu port,Bitu /*iolen*/) { + if (!IS_PC98_ARCH) { + /* All Creative hardware prior to Sound Blaster 16 appear to alias most of the I/O ports. + * This has been confirmed on a Sound Blaster 2.0 and a Sound Blaster Pro (v3.1). + * DSP aliasing is also faithfully emulated by the ESS AudioDrive. */ + if (hw.sb_io_alias) { + if ((port-hw.base) == DSP_ACK_16BIT && ess_type != ESS_NONE) + { } /* ESS AudioDrive does not alias DSP STATUS (0x22E) as seen on real hardware */ + else if ((port-hw.base) < MIXER_INDEX || (port-hw.base) > MIXER_DATA) + port &= ~1u; + } + } + + switch (((port-hw.base) >> (IS_PC98_ARCH ? 8u : 0u)) & 0xFu) { + case MIXER_INDEX: + return mixer.index; + case MIXER_DATA: + return CTMIXER_Read(); + case DSP_READ_DATA: + return DSP_ReadData(); + case DSP_READ_STATUS: + //TODO See for high speed dma :) + if (irq.pending_8bit) { + irq.pending_8bit=false; + PIC_DeActivateIRQ(hw.irq); + } + + if (mode == MODE_DMA_REQUIRE_IRQ_ACK) { + chan->FillUp(); + mode = MODE_DMA; + } + + extern const char* RunningProgram; // Wengier: Hack for Desert Strike & Jungle Strike + if (!IS_PC98_ARCH && port>0x220 && port%0x10==0xE && !dsp.out.used && (!strcmp(RunningProgram, "DESERT") || !strcmp(RunningProgram, "JUNGLE"))) { + LOG_MSG("Check status by game: %s\n", RunningProgram); + dsp.out.used++; + } + if (ess_type == ESS_NONE && (type == SBT_1 || type == SBT_2 || type == SBT_PRO1 || type == SBT_PRO2)) + return dsp.out.used ? 0xAA : 0x2A; /* observed return values on SB 2.0---any significance? */ + else + return dsp.out.used ? 0xFF : 0x7F; /* normal return values */ + case DSP_ACK_16BIT: + if (ess_type == ESS_NONE && type == SBT_16) { + if (irq.pending_16bit) { + irq.pending_16bit=false; + PIC_DeActivateIRQ(hw.irq); + } + + if (mode == MODE_DMA_REQUIRE_IRQ_ACK) { + chan->FillUp(); + mode = MODE_DMA; + } + } + break; + case DSP_WRITE_STATUS: + switch (dsp.state) { + /* FIXME: On a SB 2.0 card I own, the port will usually read either 0x2A or 0xAA, + * rather than 0x7F or 0xFF. Is there any significance to that? */ + case DSP_S_NORMAL: { + bool busy = false; + + /* NTS: DSP "busy cycle" is independent of whether the DSP is actually + * busy (executing a command) or highspeed mode. On SB16 hardware, + * writing a DSP command during the busy cycle means that the command + * is remembered, but not acted on until the DSP leaves its busy + * cycle. */ + busy_cycle_io_hack++; /* NTS: busy cycle I/O timing hack! */ + if (DSP_busy_cycle()) + busy = true; + else if (dsp.write_busy || (dsp.highspeed && type != SBT_16 && ess_type == ESS_NONE && reveal_sc_type == RSC_NONE)) + busy = true; + + if (!write_status_must_return_7f && ess_type == ESS_NONE && (type == SBT_2 || type == SBT_PRO1 || type == SBT_PRO2)) + return busy ? 0xAA : 0x2A; /* observed return values on SB 2.0---any significance? */ + else + return busy ? 0xFF : 0x7F; /* normal return values */ -static Bitu read_sb(Bitu port,Bitu /*iolen*/) { - if (!IS_PC98_ARCH) { - /* All Creative hardware prior to Sound Blaster 16 appear to alias most of the I/O ports. - * This has been confirmed on a Sound Blaster 2.0 and a Sound Blaster Pro (v3.1). - * DSP aliasing is also faithfully emulated by the ESS AudioDrive. */ - if (sb.hw.sb_io_alias) { - if ((port-sb.hw.base) == DSP_ACK_16BIT && sb.ess_type != ESS_NONE) - { } /* ESS AudioDrive does not alias DSP STATUS (0x22E) as seen on real hardware */ - else if ((port-sb.hw.base) < MIXER_INDEX || (port-sb.hw.base) > MIXER_DATA) - port &= ~1u; - } - } - - switch (((port-sb.hw.base) >> (IS_PC98_ARCH ? 8u : 0u)) & 0xFu) { - case MIXER_INDEX: - return sb.mixer.index; - case MIXER_DATA: - return CTMIXER_Read(); - case DSP_READ_DATA: - return DSP_ReadData(); - case DSP_READ_STATUS: - //TODO See for high speed dma :) - if (sb.irq.pending_8bit) { - sb.irq.pending_8bit=false; - PIC_DeActivateIRQ(sb.hw.irq); - } - - if (sb.mode == MODE_DMA_REQUIRE_IRQ_ACK) - sb.mode = MODE_DMA; - - extern const char* RunningProgram; // Wengier: Hack for Desert Strike & Jungle Strike - if (!IS_PC98_ARCH && port>0x220 && port%0x10==0xE && !sb.dsp.out.used && (!strcmp(RunningProgram, "DESERT") || !strcmp(RunningProgram, "JUNGLE"))) { - LOG_MSG("Check status by game: %s\n", RunningProgram); - sb.dsp.out.used++; - } - if (sb.ess_type == ESS_NONE && (sb.type == SBT_1 || sb.type == SBT_2 || sb.type == SBT_PRO1 || sb.type == SBT_PRO2)) - return sb.dsp.out.used ? 0xAA : 0x2A; /* observed return values on SB 2.0---any significance? */ - else - return sb.dsp.out.used ? 0xFF : 0x7F; /* normal return values */ - case DSP_ACK_16BIT: - if (sb.ess_type == ESS_NONE && sb.type == SBT_16) { - if (sb.irq.pending_16bit) { - sb.irq.pending_16bit=false; - PIC_DeActivateIRQ(sb.hw.irq); - } - - if (sb.mode == MODE_DMA_REQUIRE_IRQ_ACK) - sb.mode = MODE_DMA; - } - break; - case DSP_WRITE_STATUS: - switch (sb.dsp.state) { - /* FIXME: On a SB 2.0 card I own, the port will usually read either 0x2A or 0xAA, - * rather than 0x7F or 0xFF. Is there any significance to that? */ - case DSP_S_NORMAL: { - bool busy = false; - - /* NTS: DSP "busy cycle" is independent of whether the DSP is actually - * busy (executing a command) or highspeed mode. On SB16 hardware, - * writing a DSP command during the busy cycle means that the command - * is remembered, but not acted on until the DSP leaves its busy - * cycle. */ - sb.busy_cycle_io_hack++; /* NTS: busy cycle I/O timing hack! */ - if (DSP_busy_cycle()) - busy = true; - else if (sb.dsp.write_busy || (sb.dsp.highspeed && sb.type != SBT_16 && sb.ess_type == ESS_NONE && sb.reveal_sc_type == RSC_NONE)) - busy = true; - - if (!sb.write_status_must_return_7f && sb.ess_type == ESS_NONE && (sb.type == SBT_2 || sb.type == SBT_PRO1 || sb.type == SBT_PRO2)) - return busy ? 0xAA : 0x2A; /* observed return values on SB 2.0---any significance? */ - else - return busy ? 0xFF : 0x7F; /* normal return values */ - - } - case DSP_S_RESET: - case DSP_S_RESET_WAIT: - return 0xff; - } - return 0xff; - case DSP_RESET: - return 0xff; - default: - LOG(LOG_SB,LOG_NORMAL)("Unhandled read from SB Port %4X",(int)port); - break; - } - return 0xff; + } + case DSP_S_RESET: + case DSP_S_RESET_WAIT: + return 0xff; + } + return 0xff; + case DSP_RESET: + return 0xff; + default: + LOG(LOG_SB,LOG_NORMAL)("Unhandled read from SB Port %4X",(int)port); + break; + } + return 0xff; } -static void write_sb(Bitu port,Bitu val,Bitu /*iolen*/) { - /* All Creative hardware prior to Sound Blaster 16 appear to alias most of the I/O ports. - * This has been confirmed on a Sound Blaster 2.0 and a Sound Blaster Pro (v3.1). - * DSP aliasing is also faithfully emulated by the ESS AudioDrive. */ - if (!IS_PC98_ARCH) { - if (sb.hw.sb_io_alias) { - if ((port-sb.hw.base) == DSP_ACK_16BIT && sb.ess_type != ESS_NONE) - { } /* ESS AudioDrive does not alias DSP STATUS (0x22E) as seen on real hardware */ - else if ((port-sb.hw.base) < MIXER_INDEX || (port-sb.hw.base) > MIXER_DATA) - port &= ~1u; - } - } - - uint8_t val8=(uint8_t)(val&0xff); - switch (((port-sb.hw.base) >> (IS_PC98_ARCH ? 8u : 0u)) & 0xFu) { - case DSP_RESET: - DSP_DoReset(val8); - break; - case DSP_WRITE_DATA: - /* FIXME: We need to emulate behavior where either the DSP command is delayed (busy cycle) - * and then acted on, or we need to emulate the DSP ignoring the byte because a - * command is in progress */ - DSP_DoWrite(val8); - break; - case MIXER_INDEX: - sb.mixer.index=val8; - if (sb.mixer.index == 0x40 && sb.ess_type != ESS_NONE) { - sb.mixer.ess_id_str_pos = 0; - } - break; - case MIXER_DATA: - CTMIXER_Write(val8); - break; - default: - LOG(LOG_SB,LOG_NORMAL)("Unhandled write to SB Port %4X",(int)port); - break; - } +void SB_INFO::write_sb(Bitu port,Bitu val,Bitu /*iolen*/) { + /* All Creative hardware prior to Sound Blaster 16 appear to alias most of the I/O ports. + * This has been confirmed on a Sound Blaster 2.0 and a Sound Blaster Pro (v3.1). + * DSP aliasing is also faithfully emulated by the ESS AudioDrive. */ + if (!IS_PC98_ARCH) { + if (hw.sb_io_alias) { + if ((port-hw.base) == DSP_ACK_16BIT && ess_type != ESS_NONE) + { } /* ESS AudioDrive does not alias DSP STATUS (0x22E) as seen on real hardware */ + else if ((port-hw.base) < MIXER_INDEX || (port-hw.base) > MIXER_DATA) + port &= ~1u; + } + } + + uint8_t val8=(uint8_t)(val&0xff); + switch (((port-hw.base) >> (IS_PC98_ARCH ? 8u : 0u)) & 0xFu) { + case DSP_RESET: + DSP_DoReset(val8); + break; + case DSP_WRITE_DATA: + /* FIXME: We need to emulate behavior where either the DSP command is delayed (busy cycle) + * and then acted on, or we need to emulate the DSP ignoring the byte because a + * command is in progress */ + DSP_DoWrite(val8); + break; + case MIXER_INDEX: + mixer.index=val8; + if (mixer.index == 0x40 && ess_type != ESS_NONE) { + mixer.ess_id_str_pos = 0; + } + break; + case MIXER_DATA: + CTMIXER_Write(val8); + break; + default: + LOG(LOG_SB,LOG_NORMAL)("Unhandled write to SB Port %4X",(int)port); + break; + } } +static SB_INFO sb[MAX_CARDS]; + static void adlib_gusforward(Bitu /*port*/,Bitu val,Bitu /*iolen*/) { - adlib_commandreg=(uint8_t)(val&0xff); + adlib_commandreg=(uint8_t)(val&0xff); } bool SB_Get_Address(Bitu& sbaddr, Bitu& sbirq, Bitu& sbdma) { - sbaddr=0; - sbirq =0; - sbdma =0; - if (sb.type == SBT_NONE) return false; - else { - sbaddr=sb.hw.base; - sbirq =sb.hw.irq; - sbdma = sb.hw.dma8; - return true; - } + const size_t ci = 0; + sbaddr=0; + sbirq =0; + sbdma =0; + if (sb[ci].type == SBT_NONE) return false; + else { + sbaddr=sb[ci].hw.base; + sbirq =sb[ci].hw.irq; + sbdma =sb[ci].hw.dma8; + return true; + } } -static pic_tickindex_t next_check_record_settings = 0; - -static void SBLASTER_CallBack(Bitu len) { - pic_tickindex_t now = PIC_FullIndex(); - - if (now >= next_check_record_settings) { - next_check_record_settings = now + 100/*ms*/; - sb_update_recording_source_settings(); - } - - sb.directdac_warn_speaker_off = true; - - switch (sb.mode) { - case MODE_NONE: - case MODE_DMA_PAUSE: - case MODE_DMA_MASKED: - case MODE_DMA_REQUIRE_IRQ_ACK: - sb.chan->AddSilence(); - break; - case MODE_DAC: - sb.mode = MODE_NONE; - break; - case MODE_DMA: - len*=sb.dma.mul; - if (len&SB_SH_MASK) len+=1 << SB_SH; - len>>=SB_SH; - if (len>sb.dma.left) len=sb.dma.left; - GenerateDMASound(len); - break; - } +static void SBLASTER_CallBack(const size_t ci,Bitu len) { + pic_tickindex_t now = PIC_FullIndex(); + + if (now >= sb[ci].next_check_record_settings) { + sb[ci].next_check_record_settings = now + 100/*ms*/; + sb[ci].sb_update_recording_source_settings(); + } + + sb[ci].directdac_warn_speaker_off = true; + + switch (sb[ci].mode) { + case MODE_NONE: + case MODE_DMA_PAUSE: + case MODE_DMA_MASKED: + case MODE_DMA_REQUIRE_IRQ_ACK: + sb[ci].chan->AddSilence(); + break; + case MODE_DAC: + sb[ci].mode = MODE_NONE; + break; + case MODE_DMA: + len*=sb[ci].dma.mul; + if (len&SB_SH_MASK) len+=1 << SB_SH; + len>>=SB_SH; + if (len>sb[ci].dma.left) len=sb[ci].dma.left; + sb[ci].GenerateDMASound(len); + break; + } } #define ISAPNP_COMPATIBLE(id) \ @@ -3395,817 +3354,1100 @@ static const unsigned char ViBRA_sysdev[] = { #endif class ViBRA_PnP : public ISAPnPDevice { - public: - ViBRA_PnP() : ISAPnPDevice() { - resource_ident = 0; - host_writed(ident+0,ISAPNP_ID('C','T','L',0x0,0x0,0x7,0x0)); /* CTL0070: ViBRA C */ - host_writed(ident+4,0xFFFFFFFFUL); - checksum_ident(); - - alloc(256 - 9/*ident*/); // Real ViBRA hardware acts as if PNP data is read from a 256-byte ROM - - // this template taken from a real Creative ViBRA16C card - begin_write_res(); - write_ISAPnP_version(/*version*/1,0,/*vendor*/0x10); - write_Identifier_String("Creative ViBRA16C PnP"); - - write_Logical_Device_ID('C','T','L',0x0,0x0,0x0,0x1); // CTL0001 - write_Identifier_String("Audio"); - - write_Dependent_Function_Start(ISAPnPDevice::DependentFunctionConfig::PreferredDependentConfiguration); - write_IRQ_Format( - ISAPnPDevice::irq2mask(5)); - write_DMA_Format( - ISAPnPDevice::dma2mask(1), - DMATransferType_8bitOnly, - false,/*not a bus master*/ - true,/*byte mode */ - false,/*word mode*/ - DMASpeedSupported_Compat); - write_DMA_Format( - ISAPnPDevice::dma2mask(5), - DMATransferType_16bitOnly, - false,/*not a bus master*/ - false,/*byte mode */ - true,/*word mode*/ - DMASpeedSupported_Compat); - write_IO_Port(/*min*/0x220,/*max*/0x220,/*count*/0x10,/*align*/0x01); - write_IO_Port(/*min*/0x330,/*max*/0x330,/*count*/0x02,/*align*/0x01); - write_IO_Port(/*min*/0x388,/*max*/0x388,/*count*/0x04,/*align*/0x01); - - write_Dependent_Function_Start(ISAPnPDevice::DependentFunctionConfig::AcceptableDependentConfiguration,true); - write_IRQ_Format( - ISAPnPDevice::irq2mask(5,7,9,10)); - write_DMA_Format( - ISAPnPDevice::dma2mask(1,3), - DMATransferType_8bitOnly, - false,/*not a bus master*/ - true,/*byte mode */ - false,/*word mode*/ - DMASpeedSupported_Compat); - write_DMA_Format( - ISAPnPDevice::dma2mask(5,7), - DMATransferType_16bitOnly, - false,/*not a bus master*/ - false,/*byte mode */ - true,/*word mode*/ - DMASpeedSupported_Compat); - write_IO_Port(/*min*/0x220,/*max*/0x280,/*count*/0x10,/*align*/0x20); - write_IO_Port(/*min*/0x300,/*max*/0x330,/*count*/0x02,/*align*/0x30); - write_IO_Port(/*min*/0x388,/*max*/0x388,/*count*/0x04,/*align*/0x01); - - write_Dependent_Function_Start(ISAPnPDevice::DependentFunctionConfig::AcceptableDependentConfiguration,true); - write_IRQ_Format( - ISAPnPDevice::irq2mask(5,7,9,10)); - write_DMA_Format( - ISAPnPDevice::dma2mask(1,3), - DMATransferType_8bitOnly, - false,/*not a bus master*/ - true,/*byte mode */ - false,/*word mode*/ - DMASpeedSupported_Compat); - write_DMA_Format( - ISAPnPDevice::dma2mask(5,7), - DMATransferType_16bitOnly, - false,/*not a bus master*/ - false,/*byte mode */ - true,/*word mode*/ - DMASpeedSupported_Compat); - write_IO_Port(/*min*/0x220,/*max*/0x280,/*count*/0x10,/*align*/0x20); - write_IO_Port(/*min*/0x300,/*max*/0x330,/*count*/0x02,/*align*/0x30); - - write_Dependent_Function_Start(ISAPnPDevice::DependentFunctionConfig::SubOptimalDependentConfiguration); - write_IRQ_Format( - ISAPnPDevice::irq2mask(5,7,9,10)); - write_DMA_Format( - ISAPnPDevice::dma2mask(1,3), - DMATransferType_8bitOnly, - false,/*not a bus master*/ - true,/*byte mode */ - false,/*word mode*/ - DMASpeedSupported_Compat); - write_DMA_Format( - ISAPnPDevice::dma2mask(5,7), - DMATransferType_16bitOnly, - false,/*not a bus master*/ - false,/*byte mode */ - true,/*word mode*/ - DMASpeedSupported_Compat); - write_IO_Port(/*min*/0x220,/*max*/0x280,/*count*/0x10,/*align*/0x20); - - write_Dependent_Function_Start(ISAPnPDevice::DependentFunctionConfig::SubOptimalDependentConfiguration); - write_IRQ_Format( - ISAPnPDevice::irq2mask(5,7,9,10)); - write_DMA_Format( - ISAPnPDevice::dma2mask(1,3), - DMATransferType_8bitOnly, - false,/*not a bus master*/ - true,/*byte mode */ - false,/*word mode*/ - DMASpeedSupported_Compat); - write_IO_Port(/*min*/0x220,/*max*/0x280,/*count*/0x10,/*align*/0x20); - write_IO_Port(/*min*/0x300,/*max*/0x330,/*count*/0x02,/*align*/0x30); - write_IO_Port(/*min*/0x388,/*max*/0x388,/*count*/0x04,/*align*/0x01); - - write_Dependent_Function_Start(ISAPnPDevice::DependentFunctionConfig::SubOptimalDependentConfiguration); - write_IRQ_Format( - ISAPnPDevice::irq2mask(5,7,9,10)); - write_DMA_Format( - ISAPnPDevice::dma2mask(1,3), - DMATransferType_8bitOnly, - false,/*not a bus master*/ - true,/*byte mode */ - false,/*word mode*/ - DMASpeedSupported_Compat); - write_IO_Port(/*min*/0x220,/*max*/0x280,/*count*/0x10,/*align*/0x20); - - write_End_Dependent_Functions(); - - // NTS: DOSBox-X as coded now always has a joystick port at 0x201 even if no joystick - write_Logical_Device_ID('C','T','L',0x7,0x0,0x0,0x1); // CTL7001 - write_Compatible_Device_ID('P','N','P',0xB,0x0,0x2,0xF); // PNPB02F - write_Identifier_String("Game"); - write_IO_Port(/*min*/0x200,/*max*/0x200,/*count*/0x08); - - end_write_res(); // END - } - void select_logical_device(Bitu val) override { - logical_device = val; - } - uint8_t read(Bitu addr) override { - uint8_t ret = 0xFF; - if (logical_device == 0) { - switch (addr) { - case 0x60: case 0x61: /* I/O [0] sound blaster */ - ret = sb.hw.base >> ((addr & 1) ? 0 : 8); - break; - case 0x62: case 0x63: /* I/O [1] MPU */ - ret = 0x330 >> ((addr & 1) ? 0 : 8); /* FIXME: What I/O port really IS the MPU on? */ - break; - case 0x64: case 0x65: /* I/O [1] OPL-3 */ - ret = 0x388 >> ((addr & 1) ? 0 : 8); /* FIXME */ - break; - case 0x70: /* IRQ[0] */ - ret = sb.hw.irq; - break; - /* TODO: 0x71 IRQ mode */ - case 0x74: /* DMA[0] */ - ret = sb.hw.dma8; - break; - case 0x75: /* DMA[1] */ - ret = sb.hw.dma16 == 0xFF ? sb.hw.dma8 : sb.hw.dma16; - break; - - } - } - else if (logical_device == 1) { - switch (addr) { - case 0x60: case 0x61: /* I/O [0] gameport */ - ret = 0x200 >> ((addr & 1) ? 0 : 8); - break; - } - } - - return ret; - } - void write(Bitu addr,Bitu val) override { - if (logical_device == 0) { - switch (addr) { - case 0x30: /* activate range */ - /* TODO: set flag to ignore writes/return 0xFF when "deactivated". setting bit 0 activates, clearing deactivates */ - break; - case 0x60: case 0x61: /* I/O [0] sound blaster */ - /* TODO: on-the-fly changing */ - //LOG_MSG("ISA PnP Warning: Sound Blaster I/O port changing not implemented yet\n"); - break; - case 0x62: case 0x63: /* I/O [1] MPU */ - /* TODO: on-the-fly changing */ - //LOG_MSG("ISA PnP Warning: MPU I/O port changing not implemented yet\n"); - break; - case 0x64: case 0x65: /* I/O [1] OPL-3 */ - /* TODO: on-the-fly changing */ - //LOG_MSG("ISA PnP Warning: OPL-3 I/O port changing not implemented yet\n"); - break; - case 0x70: /* IRQ[0] */ - if (val & 0xF) - sb.hw.irq = val; - else - sb.hw.irq = 0xFF; - break; - case 0x74: /* DMA[0] */ - if ((val & 7) == 4) - sb.hw.dma8 = 0xFF; - else - sb.hw.dma8 = val & 7; - break; - case 0x75: /* DMA[1] */ - if ((val & 7) == 4) - sb.hw.dma16 = 0xFF; - else - sb.hw.dma16 = val & 7; - break; - - } - } - else if (logical_device == 1) { - switch (addr) { - case 0x60: case 0x61: /* I/O [0] gameport */ - /* TODO: on-the-fly changing */ - //LOG_MSG("ISA PnP Warning: Gameport I/O port changing not implemented yet\n"); - break; - } - } - } -}; + public: + size_t ci = 0; + ViBRA_PnP(const size_t n_ci) : ISAPnPDevice() { + resource_ident = 0; + host_writed(ident+0,ISAPNP_ID('C','T','L',0x0,0x0,0x7,0x0)); /* CTL0070: ViBRA C */ + host_writed(ident+4,0xFFFFFFFFUL); + checksum_ident(); + + ci = n_ci; + alloc(256 - 9/*ident*/); // Real ViBRA hardware acts as if PNP data is read from a 256-byte ROM + + // this template taken from a real Creative ViBRA16C card + begin_write_res(); + write_ISAPnP_version(/*version*/1,0,/*vendor*/0x10); + write_Identifier_String("Creative ViBRA16C PnP"); + + write_Logical_Device_ID('C','T','L',0x0,0x0,0x0,0x1); // CTL0001 + write_Identifier_String("Audio"); + + write_Dependent_Function_Start(ISAPnPDevice::DependentFunctionConfig::PreferredDependentConfiguration); + write_IRQ_Format( + ISAPnPDevice::irq2mask(5)); + write_DMA_Format( + ISAPnPDevice::dma2mask(1), + DMATransferType_8bitOnly, + false,/*not a bus master*/ + true,/*byte mode */ + false,/*word mode*/ + DMASpeedSupported_Compat); + write_DMA_Format( + ISAPnPDevice::dma2mask(5), + DMATransferType_16bitOnly, + false,/*not a bus master*/ + false,/*byte mode */ + true,/*word mode*/ + DMASpeedSupported_Compat); + write_IO_Port(/*min*/0x220,/*max*/0x220,/*count*/0x10,/*align*/0x01); + if (ci == 0) { + write_IO_Port(/*min*/0x330,/*max*/0x330,/*count*/0x02,/*align*/0x01); + write_IO_Port(/*min*/0x388,/*max*/0x388,/*count*/0x04,/*align*/0x01); + } -bool JOYSTICK_IsEnabled(Bitu which); + write_Dependent_Function_Start(ISAPnPDevice::DependentFunctionConfig::AcceptableDependentConfiguration,true); + write_IRQ_Format( + ISAPnPDevice::irq2mask(5,7,9,10)); + write_DMA_Format( + ISAPnPDevice::dma2mask(1,3), + DMATransferType_8bitOnly, + false,/*not a bus master*/ + true,/*byte mode */ + false,/*word mode*/ + DMASpeedSupported_Compat); + write_DMA_Format( + ISAPnPDevice::dma2mask(5,7), + DMATransferType_16bitOnly, + false,/*not a bus master*/ + false,/*byte mode */ + true,/*word mode*/ + DMASpeedSupported_Compat); + write_IO_Port(/*min*/0x220,/*max*/0x280,/*count*/0x10,/*align*/0x20); + if (ci == 0) { + write_IO_Port(/*min*/0x300,/*max*/0x330,/*count*/0x02,/*align*/0x30); + write_IO_Port(/*min*/0x388,/*max*/0x388,/*count*/0x04,/*align*/0x01); + } + + write_Dependent_Function_Start(ISAPnPDevice::DependentFunctionConfig::AcceptableDependentConfiguration,true); + write_IRQ_Format( + ISAPnPDevice::irq2mask(5,7,9,10)); + write_DMA_Format( + ISAPnPDevice::dma2mask(1,3), + DMATransferType_8bitOnly, + false,/*not a bus master*/ + true,/*byte mode */ + false,/*word mode*/ + DMASpeedSupported_Compat); + write_DMA_Format( + ISAPnPDevice::dma2mask(5,7), + DMATransferType_16bitOnly, + false,/*not a bus master*/ + false,/*byte mode */ + true,/*word mode*/ + DMASpeedSupported_Compat); + write_IO_Port(/*min*/0x220,/*max*/0x280,/*count*/0x10,/*align*/0x20); + if (ci == 0) { + write_IO_Port(/*min*/0x300,/*max*/0x330,/*count*/0x02,/*align*/0x30); + } + + write_Dependent_Function_Start(ISAPnPDevice::DependentFunctionConfig::SubOptimalDependentConfiguration); + write_IRQ_Format( + ISAPnPDevice::irq2mask(5,7,9,10)); + write_DMA_Format( + ISAPnPDevice::dma2mask(1,3), + DMATransferType_8bitOnly, + false,/*not a bus master*/ + true,/*byte mode */ + false,/*word mode*/ + DMASpeedSupported_Compat); + write_DMA_Format( + ISAPnPDevice::dma2mask(5,7), + DMATransferType_16bitOnly, + false,/*not a bus master*/ + false,/*byte mode */ + true,/*word mode*/ + DMASpeedSupported_Compat); + write_IO_Port(/*min*/0x220,/*max*/0x280,/*count*/0x10,/*align*/0x20); + + write_Dependent_Function_Start(ISAPnPDevice::DependentFunctionConfig::SubOptimalDependentConfiguration); + write_IRQ_Format( + ISAPnPDevice::irq2mask(5,7,9,10)); + write_DMA_Format( + ISAPnPDevice::dma2mask(1,3), + DMATransferType_8bitOnly, + false,/*not a bus master*/ + true,/*byte mode */ + false,/*word mode*/ + DMASpeedSupported_Compat); + write_IO_Port(/*min*/0x220,/*max*/0x280,/*count*/0x10,/*align*/0x20); + if (ci == 0) { + write_IO_Port(/*min*/0x300,/*max*/0x330,/*count*/0x02,/*align*/0x30); + write_IO_Port(/*min*/0x388,/*max*/0x388,/*count*/0x04,/*align*/0x01); + } + + write_Dependent_Function_Start(ISAPnPDevice::DependentFunctionConfig::SubOptimalDependentConfiguration); + write_IRQ_Format( + ISAPnPDevice::irq2mask(5,7,9,10)); + write_DMA_Format( + ISAPnPDevice::dma2mask(1,3), + DMATransferType_8bitOnly, + false,/*not a bus master*/ + true,/*byte mode */ + false,/*word mode*/ + DMASpeedSupported_Compat); + write_IO_Port(/*min*/0x220,/*max*/0x280,/*count*/0x10,/*align*/0x20); + + write_End_Dependent_Functions(); + + if (ci == 0) { + // NTS: DOSBox-X as coded now always has a joystick port at 0x201 even if no joystick + write_Logical_Device_ID('C','T','L',0x7,0x0,0x0,0x1); // CTL7001 + write_Compatible_Device_ID('P','N','P',0xB,0x0,0x2,0xF); // PNPB02F + write_Identifier_String("Game"); + write_IO_Port(/*min*/0x200,/*max*/0x200,/*count*/0x08); + } + + end_write_res(); // END + } + void select_logical_device(Bitu val) override { + logical_device = val; + } + uint8_t read(Bitu addr) override { + uint8_t ret = 0xFF; + if (logical_device == 0) { + switch (addr) { + case 0x60: case 0x61: /* I/O [0] sound blaster */ + ret = sb[ci].hw.base >> ((addr & 1) ? 0 : 8); + break; + case 0x62: case 0x63: /* I/O [1] MPU */ + ret = 0x330 >> ((addr & 1) ? 0 : 8); /* FIXME: What I/O port really IS the MPU on? */ + break; + case 0x64: case 0x65: /* I/O [1] OPL-3 */ + ret = 0x388 >> ((addr & 1) ? 0 : 8); /* FIXME */ + break; + case 0x70: /* IRQ[0] */ + ret = sb[ci].hw.irq; + break; + /* TODO: 0x71 IRQ mode */ + case 0x74: /* DMA[0] */ + ret = sb[ci].hw.dma8; + break; + case 0x75: /* DMA[1] */ + ret = sb[ci].hw.dma16 == 0xFF ? sb[ci].hw.dma8 : sb[ci].hw.dma16; + break; + + } + } + else if (logical_device == 1) { + switch (addr) { + case 0x60: case 0x61: /* I/O [0] gameport */ + ret = 0x200 >> ((addr & 1) ? 0 : 8); + break; + } + } + + return ret; + } + void write(Bitu addr,Bitu val) override { + if (logical_device == 0) { + switch (addr) { + case 0x30: /* activate range */ + /* TODO: set flag to ignore writes/return 0xFF when "deactivated". setting bit 0 activates, clearing deactivates */ + break; + case 0x60: case 0x61: /* I/O [0] sound blaster */ + /* TODO: on-the-fly changing */ + //LOG_MSG("ISA PnP Warning: Sound Blaster I/O port changing not implemented yet\n"); + break; + case 0x62: case 0x63: /* I/O [1] MPU */ + /* TODO: on-the-fly changing */ + //LOG_MSG("ISA PnP Warning: MPU I/O port changing not implemented yet\n"); + break; + case 0x64: case 0x65: /* I/O [1] OPL-3 */ + /* TODO: on-the-fly changing */ + //LOG_MSG("ISA PnP Warning: OPL-3 I/O port changing not implemented yet\n"); + break; + case 0x70: /* IRQ[0] */ + if (val & 0xF) + sb[ci].hw.irq = val; + else + sb[ci].hw.irq = 0xFF; + break; + case 0x74: /* DMA[0] */ + if ((val & 7) == 4) + sb[ci].hw.dma8 = 0xFF; + else + sb[ci].hw.dma8 = val & 7; + break; + case 0x75: /* DMA[1] */ + if ((val & 7) == 4) + sb[ci].hw.dma16 = 0xFF; + else + sb[ci].hw.dma16 = val & 7; + break; + + } + } + else if (logical_device == 1) { + switch (addr) { + case 0x60: case 0x61: /* I/O [0] gameport */ + /* TODO: on-the-fly changing */ + //LOG_MSG("ISA PnP Warning: Gameport I/O port changing not implemented yet\n"); + break; + } + } + } +}; std::string GetSBtype() { - switch (sb.type) { - case SBT_NONE: - return "None"; - case SBT_1: - return "SB1"; - case SBT_PRO1: - return "SBPro"; - case SBT_2: - return "SB2"; - case SBT_PRO2: - return "SBPro 2"; - case SBT_16: - return "SB16"; - case SBT_GB: - return "GB"; - default: - return "Unknown"; - } + const size_t ci = 0; + return sb[ci].GetSBtype(); } std::string GetSBbase() { - std::stringstream ss; - ss << std::hex << sb.hw.base; - return ss.str(); + const size_t ci = 0; + std::stringstream ss; + ss << std::hex << sb[ci].hw.base; + return ss.str(); } std::string GetSBirq() { - return sb.hw.irq==0xff?"None":std::to_string(sb.hw.irq); + const size_t ci = 0; + return sb[ci].hw.irq==0xff?"None":std::to_string(sb[ci].hw.irq); } std::string GetSBldma() { - return sb.hw.dma8==0xff?"None":std::to_string((int)sb.hw.dma8); + const size_t ci = 0; + return sb[ci].hw.dma8==0xff?"None":std::to_string((int)sb[ci].hw.dma8); } std::string GetSBhdma() { - return sb.hw.dma16==0xff?"None":std::to_string((int)sb.hw.dma16); + const size_t ci = 0; + return sb[ci].hw.dma16==0xff?"None":std::to_string((int)sb[ci].hw.dma16); +} + +static void DSP_DMA_CallBack(DmaChannel * chan, DMAEvent event) { + const size_t ci = chan->userData; + assert(ci < MAX_CARDS); + if (chan!=sb[ci].dma.chan || event==DMA_REACHED_TC) return; + else if (event==DMA_READ_COUNTER) { + sb[ci].chan->FillUp(); + } + else if (event==DMA_MASKED) { + if (sb[ci].mode==MODE_DMA) { + //Catch up to current time, but don't generate an IRQ! + //Fixes problems with later sci games. + double t = PIC_FullIndex() - sb[ci].last_dma_callback; + Bitu s = static_cast(sb[ci].dma.rate * t / 1000.0f); + if (s > sb[ci].dma.min) { + LOG(LOG_SB,LOG_NORMAL)("limiting amount masked to sb[ci].dma.min"); + s = sb[ci].dma.min; + } + Bitu min_size = sb[ci].dma.mul >> SB_SH; + if (!min_size) min_size = 1; + min_size *= 2; + if (sb[ci].dma.left > min_size) { + if (s > (sb[ci].dma.left - min_size)) s = sb[ci].dma.left - min_size; + //This will trigger an irq, see GenerateDMASound, so let's not do that + if (!sb[ci].dma.autoinit && sb[ci].dma.left <= sb[ci].dma.min) s = 0; + if (s) sb[ci].GenerateDMASound(s); + } + sb[ci].mode = MODE_DMA_MASKED; + LOG(LOG_SB,LOG_NORMAL)("DMA masked, stopping %s, dsp left %d, dma left %d, by %s",sb[ci].dma.recording?"input":"output",(unsigned int)sb[ci].dma.left,chan->currcnt+1,DMAActorStr(chan->masked_by)); + } + } else if (event==DMA_UNMASKED) { + if (sb[ci].mode==MODE_DMA_MASKED && sb[ci].dma.mode!=DSP_DMA_NONE) { + sb[ci].DSP_ChangeMode(MODE_DMA); + sb[ci].CheckDMAEnd(); + LOG(LOG_SB,LOG_NORMAL)("DMA unmasked, starting %s, auto %d dma left %d, by %s dma init count %d",sb[ci].dma.recording?"input":"output",chan->autoinit,chan->currcnt+1,DMAActorStr(chan->masked_by),chan->basecnt+1); + } + } +} + +static void DMA_Silent_Event(Bitu val) { + const size_t ci = (size_t)(val >> (Bitu)CARD_INDEX_BIT); val &= (1u << CARD_INDEX_BIT) - 1u; + assert(ci < MAX_CARDS); + if (sb[ci].dma.leftWrite(val,sb[ci].dma.buf.b8) : + sb[ci].dma.chan->Read(val,sb[ci].dma.buf.b8) + ) : + 0; + sb[ci].dma.left-=read; + if (!sb[ci].dma.left) { + if (sb[ci].dma.mode >= DSP_DMA_16) sb[ci].SB_RaiseIRQ(SB_IRQ_16); + else sb[ci].SB_RaiseIRQ(SB_IRQ_8); + if (sb[ci].dma.autoinit) sb[ci].dma.left=sb[ci].dma.total; + else { + sb[ci].mode=MODE_NONE; + sb[ci].dma.mode=sb[ci].dma.mode_assigned=DSP_DMA_NONE; + } + } + if (sb[ci].dma.left) { + Bitu bigger=(sb[ci].dma.left > sb[ci].dma.min) ? sb[ci].dma.min : sb[ci].dma.left; + float delay=(bigger*1000.0f)/sb[ci].dma.rate; + PIC_AddEvent(DMA_Silent_Event,delay,bigger | (ci << CARD_INDEX_BIT)); + } +} + +static void DMA_DAC_Event(Bitu val) { + const size_t ci = (size_t)(val >> (Bitu)CARD_INDEX_BIT); val &= (1u << CARD_INDEX_BIT) - 1u; + assert(ci < MAX_CARDS); + unsigned char tmp[4]; + Bitu read,expct; + signed int L,R; + int16_t out[2]; + + if (sb[ci].dma.chan->masked) { + PIC_AddEvent(DMA_DAC_Event,1000.0 / sb[ci].dma_dac_srcrate,(ci << CARD_INDEX_BIT)); + return; + } + if (!sb[ci].dma.left) + return; + + const bool psingle_sample = sb[ci].single_sample_dma; + /* Fix for 1994 Demoscene entry myth_dw: The demo's Sound Blaster Pro initialization will start DMA with + * count == 1 or 2 (triggering Goldplay mode) but will change the DMA initial counter when it begins + * normal playback. If goldplay stereo hack is enabled and we do not catch this case, the first 0.5 seconds + * of music will play twice as fast. */ + if (sb[ci].dma.chan != NULL && + sb[ci].dma.chan->basecnt < ((sb[ci].dma.mode==DSP_DMA_16_ALIASED?2:1)*((sb[ci].dma.stereo || sb[ci].mixer.sbpro_stereo)?2:1))/*size of one sample in DMA counts*/) + sb[ci].single_sample_dma = 1; + else + sb[ci].single_sample_dma = 0; + + if (psingle_sample && !sb[ci].single_sample_dma) { + // WARNING: This assumes Sound Blaster Pro emulation! + LOG(LOG_SB,LOG_NORMAL)("Goldplay mode unexpectedly switched off, normal DMA playback follows"); + sb[ci].dma_dac_mode = 0; + sb[ci].dma_dac_srcrate = sb[ci].freq / (sb[ci].mixer.stereo ? 2 : 1); + sb[ci].chan->SetFreq(sb[ci].dma_dac_srcrate); + sb[ci].updateSoundBlasterFilter(sb[ci].dma_dac_srcrate); + return; + } + + /* NTS: chan->Read() deals with DMA unit transfers. + * for 8-bit DMA, read/expct is in bytes, for 16-bit DMA, read/expct is in 16-bit words */ + expct = (sb[ci].dma.stereo ? 2u : 1u) * (sb[ci].dma.mode == DSP_DMA_16_ALIASED ? 2u : 1u); + if (sb[ci].dma.recording) { + sb[ci].gen_input(expct,tmp); + read = sb[ci].dma.chan->Write(expct,tmp); + L = R = 0; + } + else { + read = sb[ci].dma.chan->Read(expct,tmp); + //if (read != expct) + // LOG_MSG("DMA read was not sample aligned. Sound may swap channels or become static. On real hardware the same may happen unless audio is prepared specifically.\n"); + + if (sb[ci].dma.mode == DSP_DMA_16 || sb[ci].dma.mode == DSP_DMA_16_ALIASED) { + L = (int16_t)host_readw(&tmp[0]); + if (!sb[ci].dma.sign) L ^= 0x8000; + if (sb[ci].dma.stereo) { + R = (int16_t)host_readw(&tmp[2]); + if (!sb[ci].dma.sign) R ^= 0x8000; + } + else { + R = L; + } + } + else { + L = tmp[0]; + if (!sb[ci].dma.sign) L ^= 0x80; + L = (int16_t)(L << 8); + if (sb[ci].dma.stereo) { + R = tmp[1]; + if (!sb[ci].dma.sign) R ^= 0x80; + R = (int16_t)(R << 8); + } + else { + R = L; + } + } + } + + if (sb[ci].dma.stereo) { + out[0]=L; + out[1]=R; + sb[ci].chan->AddSamples_s16(1,out); + } + else { + out[0]=L; + sb[ci].chan->AddSamples_m16(1,out); + } + + /* NTS: The reason we check this is that sometimes the various "checks" performed by + - * setup/configuration tools will setup impossible playback scenarios to test + - * the card that would result in read > sb[ci].dma.left. If read > sb[ci].dma.left then + - * the subtraction below would drive sb[ci].dma.left below zero and the IRQ would + - * never fire, and the test program would fail to detect SB16 emulation. + - * + - * Bugfix for "Extreme Assault" that allows the game to detect Sound Blaster 16 + - * hardware. "Extreme Assault"'s SB16 test appears to configure a DMA transfer + - * of 1 byte then attempt to play 16-bit signed stereo PCM (4 bytes) which prior + - * to this fix would falsely trigger Goldplay then cause sb[ci].dma.left to underrun + - * and fail to fire the IRQ. */ + if (sb[ci].dma.left >= read) + sb[ci].dma.left -= read; + else + sb[ci].dma.left = 0; + + if (!sb[ci].dma.left) { + sb[ci].SB_OnEndOfDMA(); + if (sb[ci].dma_dac_mode) PIC_AddEvent(DMA_DAC_Event,1000.0 / sb[ci].dma_dac_srcrate,(ci << CARD_INDEX_BIT)); + } + else { + PIC_AddEvent(DMA_DAC_Event,1000.0 / sb[ci].dma_dac_srcrate,(ci << CARD_INDEX_BIT)); + } +} + +static void END_DMA_Event(Bitu val) { + const size_t ci = (size_t)(val >> (Bitu)CARD_INDEX_BIT); val &= (1u << CARD_INDEX_BIT) - 1u; + assert(ci < MAX_CARDS); + sb[ci].GenerateDMASound(val); +} + +static void DSP_RaiseIRQEvent(Bitu val) { + const size_t ci = (size_t)(val >> (Bitu)CARD_INDEX_BIT); val &= (1u << CARD_INDEX_BIT) - 1u; + assert(ci < MAX_CARDS); + sb[ci].SB_RaiseIRQ(SB_IRQ_8); +} + +static void DSP_BusyComplete(Bitu val) { + const size_t ci = (size_t)(val >> (Bitu)CARD_INDEX_BIT); val &= (1u << CARD_INDEX_BIT) - 1u; + assert(ci < MAX_CARDS); + sb[ci].dsp.write_busy = 0; +} + +static void DSP_FinishReset(Bitu val) { + const size_t ci = (size_t)(val >> (Bitu)CARD_INDEX_BIT); val &= (1u << CARD_INDEX_BIT) - 1u; + assert(ci < MAX_CARDS); + sb[ci].DSP_FlushData(); + sb[ci].DSP_AddData(0xaa); + sb[ci].dsp.state=DSP_S_NORMAL; +} + +static void DSP_E2_DMA_CallBack(DmaChannel *chan, DMAEvent event) { + const size_t ci = (size_t)chan->userData; + assert(ci < MAX_CARDS); + if (event==DMA_UNMASKED) { + uint8_t val = sb[ci].e2.valadd; + chan->Register_Callback(nullptr); + chan->Write(1,&val); + } +} + +static void DSP_SC400_E6_DMA_CallBack(DmaChannel *chan, DMAEvent event) { + const size_t ci = (size_t)chan->userData; + assert(ci < MAX_CARDS); + if (event==DMA_UNMASKED) { + static const char *string = "\x01\x02\x04\x08\x10\x20\x40\x80"; /* Confirmed response via DMA from actual Reveal SC400 card */ + LOG(LOG_SB,LOG_DEBUG)("SC400 returning DMA test pattern on DMA channel=%u",sb[ci].hw.dma8); + chan->Register_Callback(nullptr); + chan->Write(8,(uint8_t*)string); + chan->Clear_Request(); + if (!chan->tcount) LOG(LOG_SB,LOG_DEBUG)("SC400 warning: DMA did not reach terminal count"); + sb[ci].SB_RaiseIRQ(SB_IRQ_8); + } +} + +static void DSP_ADC_CallBack(DmaChannel *chan, DMAEvent event) { + const size_t ci = (size_t)chan->userData; + assert(ci < MAX_CARDS); + if (event!=DMA_UNMASKED) return; + uint8_t val=128; + + while (sb[ci].dma.left--) + chan->Write(1,&val); + + sb[ci].SB_RaiseIRQ(SB_IRQ_8); + chan->Register_Callback(nullptr); +} + +template static void SBLASTER_CallBack(Bitu len) { + SBLASTER_CallBack(ci,len); +} + +template static Bitu read_sb(Bitu port,Bitu iolen) { + return sb[ci].read_sb(port,iolen); +} + +template static void write_sb(Bitu port,Bitu val,Bitu iolen) { + sb[ci].write_sb(port,val,iolen); } +static const MIXER_Handler SBLASTER_CallBacks[MAX_CARDS] = { + SBLASTER_CallBack<0>, + SBLASTER_CallBack<1> +}; + +static const IO_ReadHandler * const read_sbs[MAX_CARDS] = { + read_sb<0>, + read_sb<1> +}; + +static const IO_WriteHandler * const write_sbs[MAX_CARDS] = { + write_sb<0>, + write_sb<1> +}; + class SBLASTER: public Module_base { -private: - /* Data */ - IO_ReadHandleObject ReadHandler[0x10]; - IO_WriteHandleObject WriteHandler[0x10]; - AutoexecObject autoexecline; - MixerObject MixerChan; - OPL_Mode oplmode; - - /* Support Functions */ - void Find_Type_And_Opl(Section_prop* config,SB_TYPES& type, OPL_Mode& opl_mode) const { - sb.vibra = false; - sb.ess_type = ESS_NONE; - sb.reveal_sc_type = RSC_NONE; - sb.ess_extended_mode = false; - sb.subtype = SBST_NONE; - const char * sbtype=config->Get_string("sbtype"); - if (control->opt_silent) type = SBT_NONE; - else if (!strcasecmp(sbtype,"sb1.0")) { type=SBT_1; sb.subtype=SBST_100; } - else if (!strcasecmp(sbtype,"sb1.5")) { type=SBT_1; sb.subtype=SBST_105; } - else if (!strcasecmp(sbtype,"sb1")) { type=SBT_1; sb.subtype=SBST_105; } /* DOSBox SVN compat same as sb1.5 */ - else if (!strcasecmp(sbtype,"sb2.0")) { type=SBT_2; sb.subtype=SBST_200; } - else if (!strcasecmp(sbtype,"sb2.01")) { type=SBT_2; sb.subtype=SBST_201; } - else if (!strcasecmp(sbtype,"sb2")) { type=SBT_2; sb.subtype=SBST_201; } /* DOSBox SVN compat same as sb2.01 */ - else if (!strcasecmp(sbtype,"sbpro1")) type=SBT_PRO1; - else if (!strcasecmp(sbtype,"sbpro2")) type=SBT_PRO2; - else if (!strcasecmp(sbtype,"sb16vibra")) type=SBT_16; - else if (!strcasecmp(sbtype,"sb16")) type=SBT_16; - else if (!strcasecmp(sbtype,"gb")) type=SBT_GB; - else if (!strcasecmp(sbtype,"none")) type=SBT_NONE; - else if (!strcasecmp(sbtype,"ess688")) { - type=SBT_PRO2; - sb.ess_type=ESS_688; - LOG(LOG_SB,LOG_DEBUG)("ESS 688 emulation enabled."); - LOG(LOG_SB,LOG_WARN)("ESS 688 emulation is EXPERIMENTAL at this time and should not yet be used for normal gaming"); - } - else if (!strcasecmp(sbtype,"reveal_sc400")) { - type=SBT_PRO2; - sb.reveal_sc_type=RSC_SC400; - LOG(LOG_SB,LOG_DEBUG)("Reveal SC400 emulation enabled."); - LOG(LOG_SB,LOG_WARN)("Reveal SC400 emulation is EXPERIMENTAL at this time and should not yet be used for normal gaming."); - LOG(LOG_SB,LOG_WARN)("Additional WARNING: This code only emulates the Sound Blaster portion of the card. Attempting to use the Windows Sound System part of the card (i.e. the Voyetra/SC400 Windows drivers) will not work!"); - } - else if (!strcasecmp(sbtype,"ess1688")) { - type=SBT_PRO2; - sb.ess_type=ESS_1688; - sb.mixer.ess_id_str[0] = 0x16; - sb.mixer.ess_id_str[1] = 0x88; - LOG(LOG_SB,LOG_DEBUG)("ESS ES1688 emulation enabled."); - LOG(LOG_SB,LOG_WARN)("ESS ES1688 emulation is EXPERIMENTAL at this time and should not yet be used for normal gaming."); - } - else type=SBT_16; - - if (type == SBT_16) { - /* NTS: mainline DOSBox forces the type to SBT_PRO2 if !IS_EGAVGA_ARCH or no secondary DMA controller. - * I'd rather take the approach that, if the user wants to emulate a bizarre unusual setup like - * sticking a Sound Blaster 16 in an 8-bit machine, they are free to do so on the understanding - * it won't work properly (and emulation will show what happens). I also believe that tying - * 8-bit vs 16-bit system type to the *video card* was a really dumb move. */ - if (!SecondDMAControllerAvailable()) { - LOG(LOG_SB,LOG_WARN)("Sound Blaster 16 enabled on a system without 16-bit DMA. Don't expect this setup to work properly! To improve compatibility please edit your dosbox-x.conf and change sbtype to sbpro2 instead, or else enable the secondary DMA controller."); - } - } - - /* SB16 Vibra cards are Plug & Play */ - if (!IS_PC98_ARCH) { - if (!strcasecmp(sbtype,"sb16vibra")) { - ISA_PNP_devreg(new ViBRA_PnP()); - sb.vibra = true; - } - } - - /* OPL/CMS Init */ - const char * omode=config->Get_string("oplmode"); - if (!strcasecmp(omode,"none")) opl_mode=OPL_none; - else if (!strcasecmp(omode,"cms")); // Skip for backward compatibility with existing configurations - else if (!strcasecmp(omode,"opl2")) opl_mode=OPL_opl2; - else if (!strcasecmp(omode,"dualopl2")) opl_mode=OPL_dualopl2; - else if (!strcasecmp(omode,"opl3")) opl_mode=OPL_opl3; - else if (!strcasecmp(omode,"opl3gold")) opl_mode=OPL_opl3gold; - else if (!strcasecmp(omode,"hardware")) opl_mode=OPL_hardware; - else if (!strcasecmp(omode,"hardwaregb")) opl_mode=OPL_hardwareCMS; - else if (!strcasecmp(omode,"esfm")) opl_mode=OPL_esfm; - /* Else assume auto */ - else { - switch (type) { - case SBT_NONE: - case SBT_GB: - opl_mode=OPL_none; - break; - case SBT_1: - case SBT_2: - opl_mode=OPL_opl2; - break; - case SBT_PRO1: - opl_mode=OPL_dualopl2; - break; - case SBT_PRO2: // NTS: ESS 688 cards also had an OPL3 (http://www.dosdays.co.uk/topics/Manufacturers/ess.php) - case SBT_16: - if (sb.ess_type != ESS_NONE && sb.ess_type != ESS_688) { - opl_mode=OPL_esfm; - } else { - opl_mode=OPL_opl3; - } - break; - } - } - - if (IS_PC98_ARCH) { - if (opl_mode != OPL_none) { - if (opl_mode != OPL_opl3) { - LOG(LOG_SB,LOG_WARN)("Only OPL3 is allowed in PC-98 mode"); - opl_mode = OPL_opl3; - } - } - - /* card type MUST be SB16. - * Creative did not release any other Sound Blaster for PC-98 as far as I know. */ - if (sb.type != SBT_16) { - LOG(LOG_SB,LOG_ERROR)("Only Sound Blaster 16 is allowed in PC-98 mode"); - sb.type = SBT_NONE; - } - } - } -public: - SBLASTER(Section* configuration):Module_base(configuration) { - bool bv; - string s; - Bitu i; - int si; - - Section_prop * section=static_cast(configuration); - - sb.hw.base=(unsigned int)section->Get_hex("sbbase"); - - if (sb.ess_type != ESS_NONE && sb.ess_type != ESS_688) { - sb.mixer.ess_id_str[2] = (sb.hw.base >> 8) & 0xff; - sb.mixer.ess_id_str[3] = sb.hw.base & 0xff; - } - - if (IS_PC98_ARCH) { - if (sb.hw.base >= 0x220 && sb.hw.base <= 0x2E0) /* translate IBM PC to PC-98 (220h -> D2h) */ - sb.hw.base = 0xD0 + ((sb.hw.base >> 4u) & 0xFu); - } - else { - if (sb.hw.base >= 0xD2 && sb.hw.base <= 0xDE) /* translate PC-98 to IBM PC (D2h -> 220h) */ - sb.hw.base = 0x200 + ((sb.hw.base & 0xFu) << 4u); - } - - sb_update_recording_source_settings(); - - sb.goldplay=section->Get_bool("goldplay"); - sb.min_dma_user=section->Get_int("mindma"); - sb.goldplay_stereo=section->Get_bool("goldplay stereo"); - sb.emit_blaster_var=section->Get_bool("blaster environment variable"); - sb.sample_rate_limits=section->Get_bool("sample rate limits"); - sb.sbpro_stereo_bit_strict_mode=section->Get_bool("stereo control with sbpro only"); - sb.hw.sb_io_alias=section->Get_bool("io port aliasing"); - sb.busy_cycle_hz=section->Get_int("dsp busy cycle rate"); - sb.busy_cycle_duty_percent=section->Get_int("dsp busy cycle duty"); - sb.dsp.instant_direct_dac=section->Get_bool("instant direct dac"); - sb.dsp.force_goldplay=section->Get_bool("force goldplay"); - sb.dma.force_autoinit=section->Get_bool("force dsp auto-init"); - sb.no_filtering=section->Get_bool("disable filtering"); - sb.def_enable_speaker=section->Get_bool("enable speaker"); - sb.enable_asp=section->Get_bool("enable asp"); - - if (!sb.goldplay && sb.dsp.force_goldplay) { - sb.goldplay = true; - LOG_MSG("force goldplay = true but goldplay = false, enabling Goldplay mode anyway"); - } - - /* Explanation: If the user set this option, the write status port must return 0x7F or 0xFF. - * Else, we're free to return whatever with bit 7 to indicate busy. - * The reason for this setting is that there exist some very early DOS demoscene productions - * that assume the I/O port returns 0x7F or 0xFF, and will have various problems if that - * is not the case. - * - * Overload by Hysteria (1992): - * - This demo's Sound Blaster routines use the unusual space-saving assembly language - * trick of reading port 22Ch to wait for bit 7 to clear (which is normal), then - * using the value it read (left over from AL) as the byte to sum it's audio output - * to before sending out to the DAC. This is why, if the write status port returns - * a different value like 0x2A, the audio crackles with saturation errors. - * - * Overload's Sound Blaster output code: - * - * 090D:5F50 EC in al,dx - * 090D:5F51 A880 test al,80 - * 090D:5F53 75FB jne 00005F50 ($-5) (no jmp) - * 090D:5F55 FEC0 inc al - * ; various code to render and sum audio samples to AL - * 090D:5FC7 EE out dx,al - * - * Notice it assumes AL is 0x7F and it assumes (++AL) == 0x80. - * - * It's also funny to note the demo's readme file mentions this problem with Sound - * Blaster Pro: - * - * "I have been told this works with the soundblaster however, this demo does - * not seem to work the soundblaster pro. - * - * If the music sounds bad and you want to know what it really sounds like - * let me know and I can send you the MOD format of the music. - * - * dmw@sioux.ee.ufl.edu" - * - */ - sb.write_status_must_return_7f=section->Get_bool("dsp write buffer status must return 0x7f or 0xff"); - - sb.dsp.midi_rwpoll_mode = false; - sb.dsp.midi_read_interrupt = false; - sb.dsp.midi_read_with_timestamps = false; - - sb.busy_cycle_last_check=0; - sb.busy_cycle_io_hack=0; - - si=section->Get_int("irq"); - sb.hw.irq=(si >= 0) ? (unsigned int)si : 0xFF; - - if (IS_PC98_ARCH) { - if (sb.hw.irq == 7) /* IRQ 7 is not valid on PC-98 (that's cascade interrupt) */ - sb.hw.irq = 5; - } - - si=section->Get_int("dma"); - sb.hw.dma8=(si >= 0) ? (unsigned int)si : 0xFF; - - si=section->Get_int("hdma"); - sb.hw.dma16=(si >= 0) ? (unsigned int)si : 0xFF; - - if (IS_PC98_ARCH) { - if (sb.hw.dma8 > 3) - sb.hw.dma8 = 3; - if (sb.hw.dma8 == 1) /* DMA 1 is not usable for SB on PC-98? */ - sb.hw.dma8 = 3; - if (sb.hw.dma16 > 3) - sb.hw.dma16 = sb.hw.dma8; - - LOG_MSG("PC-98: Final SB16 resources are DMA8=%u DMA16=%u\n",sb.hw.dma8,sb.hw.dma16); - - sb.dma.chan=GetDMAChannel(sb.hw.dma8); - if (sb.dma.chan == NULL) LOG_MSG("PC-98: SB16 is unable to obtain DMA channel"); - } - - sb.dsp.command_aliases=section->Get_bool("dsp command aliases"); - - Find_Type_And_Opl(section,sb.type,oplmode); - if (sb.hw.irq == 0) { - std::string sbtype=GetSBtype(); - sb.hw.irq=sbtype=="SBPro 2"||sbtype=="SB16"||IS_PC98_ARCH?5:7; - } - - /* some DOS games/demos support Sound Blaster, and expect the IRQ to fire, but - * make no attempt to unmask the IRQ (perhaps the programmer forgot). This option - * is needed for Public NMI "jump" demo in order for music to continue playing. */ - bv=section->Get_bool("pic unmask irq"); - if (bv && sb.hw.irq != 0xFF) { - LOG_MSG("Sound blaster: unmasking IRQ at startup as requested."); - PIC_SetIRQMask(sb.hw.irq,false); - } - - if (sb.hw.irq == 0xFF || sb.hw.dma8 == 0xFF) { - LOG(LOG_SB,LOG_WARN)("IRQ and 8-bit DMA not assigned, disabling BLASTER variable"); - sb.emit_blaster_var = false; - } - - sb.mixer.enabled=section->Get_bool("sbmixer"); - sb.mixer.stereo=false; - - bv=section->Get_bool("pre-set sbpro stereo"); - if (bv) { - LOG_MSG("Sound blaster: setting SB Pro mixer 'stereo' bit as instructed."); - sb.mixer.stereo=true; - } + private: + /* Data */ + IO_ReadHandleObject ReadHandler[0x10]; + IO_WriteHandleObject WriteHandler[0x10]; +#if !defined(OSFREE) + AutoexecObject autoexecline; +#endif + MixerObject MixerChan; + OPL_Mode oplmode; + size_t ci = 0; + + /* Support Functions */ + void Find_Type_And_Opl(Section_prop* config,SB_TYPES& type, OPL_Mode& opl_mode) const { + sb[ci].vibra = false; + sb[ci].ess_type = ESS_NONE; + sb[ci].reveal_sc_type = RSC_NONE; + sb[ci].ess_extended_mode = false; + sb[ci].subtype = SBST_NONE; + const char * sbtype=config->Get_string("sbtype"); + if (control->opt_silent) type = SBT_NONE; + else if (!strcasecmp(sbtype,"sb1.0")) { type=SBT_1; sb[ci].subtype=SBST_100; } + else if (!strcasecmp(sbtype,"sb1.5")) { type=SBT_1; sb[ci].subtype=SBST_105; } + else if (!strcasecmp(sbtype,"sb1")) { type=SBT_1; sb[ci].subtype=SBST_105; } /* DOSBox SVN compat same as sb1.5 */ + else if (!strcasecmp(sbtype,"sb2.0")) { type=SBT_2; sb[ci].subtype=SBST_200; } + else if (!strcasecmp(sbtype,"sb2.01")) { type=SBT_2; sb[ci].subtype=SBST_201; } + else if (!strcasecmp(sbtype,"sb2")) { type=SBT_2; sb[ci].subtype=SBST_201; } /* DOSBox SVN compat same as sb2.01 */ + else if (!strcasecmp(sbtype,"sbpro1")) type=SBT_PRO1; + else if (!strcasecmp(sbtype,"sbpro2")) type=SBT_PRO2; + else if (!strcasecmp(sbtype,"sb16vibra")) type=SBT_16; + else if (!strcasecmp(sbtype,"sb16")) type=SBT_16; + else if (!strcasecmp(sbtype,"gb")) type=SBT_GB; + else if (!strcasecmp(sbtype,"none")) type=SBT_NONE; + else if (!strcasecmp(sbtype,"ess688")) { + type=SBT_PRO2; + sb[ci].ess_type=ESS_688; + LOG(LOG_SB,LOG_DEBUG)("ESS 688 emulation enabled."); + LOG(LOG_SB,LOG_WARN)("ESS 688 emulation is EXPERIMENTAL at this time and should not yet be used for normal gaming"); + } + else if (!strcasecmp(sbtype,"reveal_sc400")) { + type=SBT_PRO2; + sb[ci].reveal_sc_type=RSC_SC400; + LOG(LOG_SB,LOG_DEBUG)("Reveal SC400 emulation enabled."); + LOG(LOG_SB,LOG_WARN)("Reveal SC400 emulation is EXPERIMENTAL at this time and should not yet be used for normal gaming."); + LOG(LOG_SB,LOG_WARN)("Additional WARNING: This code only emulates the Sound Blaster portion of the card. Attempting to use the Windows Sound System part of the card (i.e. the Voyetra/SC400 Windows drivers) will not work!"); + } + else if (!strcasecmp(sbtype,"ess1688")) { + type=SBT_PRO2; + sb[ci].ess_type=ESS_1688; + sb[ci].mixer.ess_id_str[0] = 0x16; + sb[ci].mixer.ess_id_str[1] = 0x88; + LOG(LOG_SB,LOG_DEBUG)("ESS ES1688 emulation enabled."); + LOG(LOG_SB,LOG_WARN)("ESS ES1688 emulation is EXPERIMENTAL at this time and should not yet be used for normal gaming."); + } + else type=SBT_16; + + if (type == SBT_16) { + /* NTS: mainline DOSBox forces the type to SBT_PRO2 if !IS_EGAVGA_ARCH or no secondary DMA controller. + * I'd rather take the approach that, if the user wants to emulate a bizarre unusual setup like + * sticking a Sound Blaster 16 in an 8-bit machine, they are free to do so on the understanding + * it won't work properly (and emulation will show what happens). I also believe that tying + * 8-bit vs 16-bit system type to the *video card* was a really dumb move. */ + if (!SecondDMAControllerAvailable()) { + LOG(LOG_SB,LOG_WARN)("Sound Blaster 16 enabled on a system without 16-bit DMA. Don't expect this setup to work properly! To improve compatibility please edit your dosbox-x.conf and change sbtype to sbpro2 instead, or else enable the secondary DMA controller."); + } + } + + /* SB16 Vibra cards are Plug & Play */ + if (!IS_PC98_ARCH) { + if (!strcasecmp(sbtype,"sb16vibra")) { + ISA_PNP_devreg(new ViBRA_PnP(ci)); + sb[ci].vibra = true; + } + } + + /* OPL/CMS Init */ + const char * omode=config->Get_string("oplmode"); + if (ci != 0) opl_mode=OPL_none; // only the first card can have an OPL chip + else if (!strcasecmp(omode,"none")) opl_mode=OPL_none; + else if (!strcasecmp(omode,"cms")); // Skip for backward compatibility with existing configurations + else if (!strcasecmp(omode,"opl2")) opl_mode=OPL_opl2; + else if (!strcasecmp(omode,"dualopl2")) opl_mode=OPL_dualopl2; + else if (!strcasecmp(omode,"opl3")) opl_mode=OPL_opl3; + else if (!strcasecmp(omode,"opl3gold")) opl_mode=OPL_opl3gold; + else if (!strcasecmp(omode,"hardware")) opl_mode=OPL_hardware; + else if (!strcasecmp(omode,"hardwaregb")) opl_mode=OPL_hardwareCMS; + else if (!strcasecmp(omode,"esfm")) opl_mode=OPL_esfm; + /* Else assume auto */ + else { + switch (type) { + case SBT_NONE: + case SBT_GB: + opl_mode=OPL_none; + break; + case SBT_1: + case SBT_2: + opl_mode=OPL_opl2; + break; + case SBT_PRO1: + opl_mode=OPL_dualopl2; + break; + case SBT_PRO2: // NTS: ESS 688 cards also had an OPL3 (http://www.dosdays.co.uk/topics/Manufacturers/ess.php) + case SBT_16: + if (sb[ci].ess_type != ESS_NONE && sb[ci].ess_type != ESS_688) { + opl_mode=OPL_esfm; + } else { + opl_mode=OPL_opl3; + } + break; + } + } + + if (IS_PC98_ARCH) { + if (opl_mode != OPL_none) { + if (opl_mode != OPL_opl3) { + LOG(LOG_SB,LOG_WARN)("Only OPL3 is allowed in PC-98 mode"); + opl_mode = OPL_opl3; + } + } + + /* card type MUST be SB16. + * Creative did not release any other Sound Blaster for PC-98 as far as I know. */ + if (sb[ci].type != SBT_16) { + LOG(LOG_SB,LOG_ERROR)("Only Sound Blaster 16 is allowed in PC-98 mode"); + sb[ci].type = SBT_NONE; + } + } + } + public: + SBLASTER(const size_t n_ci,Section* configuration):Module_base(configuration) { + bool bv; + string s; + Bitu i; + int si; + + Section_prop * section=static_cast(configuration); + + ci = n_ci; + sb[ci].card_index = ci; + sb[ci].recording_source = REC_SILENCE; + sb[ci].listen_to_recording_source = false; + sb[ci].hw.base=(unsigned int)section->Get_hex("sbbase"); + + if (sb[ci].ess_type != ESS_NONE && sb[ci].ess_type != ESS_688) { + sb[ci].mixer.ess_id_str[2] = (sb[ci].hw.base >> 8) & 0xff; + sb[ci].mixer.ess_id_str[3] = sb[ci].hw.base & 0xff; + } + + if (IS_PC98_ARCH) { + if (sb[ci].hw.base >= 0x220 && sb[ci].hw.base <= 0x2E0) /* translate IBM PC to PC-98 (220h -> D2h) */ + sb[ci].hw.base = 0xD0 + ((sb[ci].hw.base >> 4u) & 0xFu); + } + else { + if (sb[ci].hw.base >= 0xD2 && sb[ci].hw.base <= 0xDE) /* translate PC-98 to IBM PC (D2h -> 220h) */ + sb[ci].hw.base = 0x200 + ((sb[ci].hw.base & 0xFu) << 4u); + } + + sb[ci].sb_update_recording_source_settings(); + + sb[ci].ASP_mode = 0x00; + sb[ci].goldplay=section->Get_bool("goldplay"); + sb[ci].min_dma_user=section->Get_int("mindma"); + sb[ci].goldplay_stereo=section->Get_bool("goldplay stereo"); + sb[ci].emit_blaster_var=section->Get_bool("blaster environment variable"); + sb[ci].sample_rate_limits=section->Get_bool("sample rate limits"); + sb[ci].sbpro_stereo_bit_strict_mode=section->Get_bool("stereo control with sbpro only"); + sb[ci].hw.sb_io_alias=section->Get_bool("io port aliasing"); + sb[ci].busy_cycle_hz=section->Get_int("dsp busy cycle rate"); + sb[ci].busy_cycle_duty_percent=section->Get_int("dsp busy cycle duty"); + sb[ci].dsp.instant_direct_dac=section->Get_bool("instant direct dac"); + sb[ci].dsp.force_goldplay=section->Get_bool("force goldplay"); + sb[ci].dma.force_autoinit=section->Get_bool("force dsp auto-init"); + sb[ci].no_filtering=section->Get_bool("disable filtering"); + sb[ci].def_enable_speaker=section->Get_bool("enable speaker"); + sb[ci].enable_asp=section->Get_bool("enable asp"); + + if (!sb[ci].goldplay && sb[ci].dsp.force_goldplay) { + sb[ci].goldplay = true; + LOG_MSG("force goldplay = true but goldplay = false, enabling Goldplay mode anyway"); + } + + /* Explanation: If the user set this option, the write status port must return 0x7F or 0xFF. + * Else, we're free to return whatever with bit 7 to indicate busy. + * The reason for this setting is that there exist some very early DOS demoscene productions + * that assume the I/O port returns 0x7F or 0xFF, and will have various problems if that + * is not the case. + * + * Overload by Hysteria (1992): + * - This demo's Sound Blaster routines use the unusual space-saving assembly language + * trick of reading port 22Ch to wait for bit 7 to clear (which is normal), then + * using the value it read (left over from AL) as the byte to sum it's audio output + * to before sending out to the DAC. This is why, if the write status port returns + * a different value like 0x2A, the audio crackles with saturation errors. + * + * Overload's Sound Blaster output code: + * + * 090D:5F50 EC in al,dx + * 090D:5F51 A880 test al,80 + * 090D:5F53 75FB jne 00005F50 ($-5) (no jmp) + * 090D:5F55 FEC0 inc al + * ; various code to render and sum audio samples to AL + * 090D:5FC7 EE out dx,al + * + * Notice it assumes AL is 0x7F and it assumes (++AL) == 0x80. + * + * It's also funny to note the demo's readme file mentions this problem with Sound + * Blaster Pro: + * + * "I have been told this works with the soundblaster however, this demo does + * not seem to work the soundblaster pro. + * + * If the music sounds bad and you want to know what it really sounds like + * let me know and I can send you the MOD format of the music. + * + * dmw@sioux.ee.ufl.edu" + * + */ + sb[ci].write_status_must_return_7f=section->Get_bool("dsp write buffer status must return 0x7f or 0xff"); + + sb[ci].dsp.midi_rwpoll_mode = false; + sb[ci].dsp.midi_read_interrupt = false; + sb[ci].dsp.midi_read_with_timestamps = false; + + sb[ci].busy_cycle_last_check=0; + sb[ci].busy_cycle_io_hack=0; + + si=section->Get_int("irq"); + sb[ci].hw.irq=(si >= 0) ? (unsigned int)si : 0xFF; + + if (IS_PC98_ARCH) { + if (sb[ci].hw.irq == 7) /* IRQ 7 is not valid on PC-98 (that's cascade interrupt) */ + sb[ci].hw.irq = 5; + } + + si=section->Get_int("dma"); + sb[ci].hw.dma8=(si >= 0) ? (unsigned int)si : 0xFF; + + si=section->Get_int("hdma"); + sb[ci].hw.dma16=(si >= 0) ? (unsigned int)si : 0xFF; + + if (IS_PC98_ARCH) { + if (sb[ci].hw.dma8 > 3) + sb[ci].hw.dma8 = 3; + if (sb[ci].hw.dma8 == 1) /* DMA 1 is not usable for SB on PC-98? */ + sb[ci].hw.dma8 = 3; + if (sb[ci].hw.dma16 > 3) + sb[ci].hw.dma16 = sb[ci].hw.dma8; + + LOG_MSG("PC-98: Final SB16 resources are DMA8=%u DMA16=%u\n",sb[ci].hw.dma8,sb[ci].hw.dma16); + + sb[ci].dma.chan=GetDMAChannel(sb[ci].hw.dma8); + if (sb[ci].dma.chan != NULL) + sb[ci].dma.chan->userData = ci; + else + LOG_MSG("PC-98: SB16 is unable to obtain DMA channel"); + } + + sb[ci].dsp.command_aliases=section->Get_bool("dsp command aliases"); + + Find_Type_And_Opl(section,sb[ci].type,oplmode); + if (sb[ci].hw.irq == 0) { + std::string sbtype=GetSBtype(); + sb[ci].hw.irq=sbtype=="SBPro 2"||sbtype=="SB16"||IS_PC98_ARCH?5:7; + } + + /* some DOS games/demos support Sound Blaster, and expect the IRQ to fire, but + * make no attempt to unmask the IRQ (perhaps the programmer forgot). This option + * is needed for Public NMI "jump" demo in order for music to continue playing. */ + bv=section->Get_bool("pic unmask irq"); + if (bv && sb[ci].hw.irq != 0xFF) { + LOG_MSG("Sound blaster: unmasking IRQ at startup as requested."); + PIC_SetIRQMask(sb[ci].hw.irq,false); + } + + if (sb[ci].hw.irq == 0xFF || sb[ci].hw.dma8 == 0xFF) { + LOG(LOG_SB,LOG_WARN)("IRQ and 8-bit DMA not assigned, disabling BLASTER variable"); + sb[ci].emit_blaster_var = false; + } + + sb[ci].mixer.enabled=section->Get_bool("sbmixer"); + sb[ci].mixer.stereo=false; + + bv=section->Get_bool("pre-set sbpro stereo"); + if (bv) { + LOG_MSG("Sound blaster: setting SB Pro mixer 'stereo' bit as instructed."); + sb[ci].mixer.stereo=true; + } #if HAS_HARDOPL - bool isCMSpassthrough = false; + bool isCMSpassthrough = false; #endif - switch (oplmode) { - case OPL_none: - if (!IS_PC98_ARCH) - WriteHandler[0].Install(0x388,adlib_gusforward,IO_MB); - break; - case OPL_opl2: - case OPL_dualopl2: - assert(!IS_PC98_ARCH); - // fall-through - case OPL_opl3: - case OPL_opl3gold: - case OPL_esfm: - OPL_Init(section,oplmode); - break; - case OPL_hardwareCMS: - assert(!IS_PC98_ARCH); + if (ci == 0) { + switch (oplmode) { + case OPL_none: + if (!IS_PC98_ARCH) + WriteHandler[0].Install(0x388,adlib_gusforward,IO_MB); + break; + case OPL_opl2: + case OPL_dualopl2: + assert(!IS_PC98_ARCH); + // fall-through + case OPL_opl3: + case OPL_opl3gold: + case OPL_esfm: + OPL_Init(section,oplmode); + break; + case OPL_hardwareCMS: + assert(!IS_PC98_ARCH); #if HAS_HARDOPL - isCMSpassthrough = true; + isCMSpassthrough = true; #endif - // fall-through - case OPL_hardware: - assert(!IS_PC98_ARCH); + // fall-through + case OPL_hardware: + assert(!IS_PC98_ARCH); #if HAS_HARDOPL - Bitu base = (unsigned int)section->Get_hex("hardwarebase"); - HARDOPL_Init(base, sb.hw.base, isCMSpassthrough); + Bitu base = (unsigned int)section->Get_hex("hardwarebase"); + HARDOPL_Init(base, sb[ci].hw.base, isCMSpassthrough); #else - LOG_MSG("OPL pass-through is disabled. It may not be supported on this operating system."); + LOG_MSG("OPL pass-through is disabled. It may not be supported on this operating system."); #endif - break; - } - - // Backward compatibility with existing configurations - if(!strcmp(section->Get_string("oplmode"),"cms")) { - LOG(LOG_SB, LOG_WARN)("The 'cms' setting for 'oplmode' is deprecated; use 'cms = on' instead."); - sb.cms = true; - } - else { - const char *cms_str = section->Get_string("cms"); - if(!strcmp(cms_str,"on")) { - sb.cms = true; - } - else if(!strcmp(cms_str,"auto")) { - sb.cms = (sb.type == SBT_1 || sb.type == SBT_GB); - } - else - sb.cms = false; - } - - switch(sb.type) { - case SBT_1: // CMS is optional for Sound Blaster 1 and 2 - case SBT_2:; - case SBT_GB: - if(!sb.cms) { - LOG(LOG_SB, LOG_WARN)("'cms' setting is 'off', but is forced to 'auto' on the Game Blaster."); - auto* sect_updater = static_cast(control->GetSection("sblaster")); - sect_updater->Get_prop("cms")->SetValue("auto"); - } - sb.cms = true; // Game Blaster is CMS - break; - default: - if(sb.cms) { - LOG(LOG_SB, LOG_WARN)("'cms' setting 'on' not supported on this card, forcing 'auto'."); - auto* sect_updater = static_cast(control->GetSection("sblaster")); - sect_updater->Get_prop("cms")->SetValue("auto"); - } - sb.cms = false; - } - - if(sb.cms && !IS_PC98_ARCH) { - CMS_Init(section); - } - - if (sb.type==SBT_NONE || sb.type==SBT_GB) return; - - sb.chan=MixerChan.Install(&SBLASTER_CallBack,22050,"SB"); - sb.dac.dac_pt = sb.dac.dac_t = 0; - sb.dsp.state=DSP_S_NORMAL; - sb.dsp.out.lastval=0xaa; - sb.dma.chan=NULL; - - for (i=4;i<=0xf;i++) { - if (i==8 || i==9) continue; - //Disable mixer ports for lower soundblaster - if ((sb.type==SBT_1 || sb.type==SBT_2) && (i==4 || i==5)) continue; - ReadHandler[i].Install(sb.hw.base+(IS_PC98_ARCH ? ((i+0x20u) << 8u) : i),read_sb,IO_MB); - WriteHandler[i].Install(sb.hw.base+(IS_PC98_ARCH ? ((i+0x20u) << 8u) : i),write_sb,IO_MB); - } - - // TODO: read/write handler for ESS AudioDrive ES1688 (and later) MPU-401 ports (3x0h/3x1h; prevents Windows drivers from working with default settings if missing) - - // NTS: Unknown/undefined registers appear to return the register index you requested rather than the actual contents, - // according to real SB16 CSP/ASP hardware (chip version id 0x10). - // - // Registers 0x00-0x1F are defined. Registers 0x80-0x83 are defined. - for (i=0;i<256;i++) ASP_regs[i] = i; - for (i=0x00;i < 0x20;i++) ASP_regs[i] = 0; - for (i=0x80;i < 0x84;i++) ASP_regs[i] = 0; - ASP_regs[5] = 0x01; - ASP_regs[9] = 0xf8; - - DSP_Reset(); - CTMIXER_Reset(); - - // The documentation does not specify if SB gets initialized with the speaker enabled - // or disabled. Real SBPro2 has it disabled. - sb.speaker=false; - // On SB16 the speaker flag does not affect actual speaker state. - if (sb.type == SBT_16 || sb.ess_type != ESS_NONE || sb.reveal_sc_type != RSC_NONE) sb.chan->Enable(true); - else sb.chan->Enable(false); - - if (sb.def_enable_speaker) - DSP_SetSpeaker(true); - - s=section->Get_string("dsp require interrupt acknowledge"); - if (s == "true" || s == "1" || s == "on") - sb.dsp.require_irq_ack = 1; - else if (s == "false" || s == "0" || s == "off") - sb.dsp.require_irq_ack = 0; - else /* auto */ - sb.dsp.require_irq_ack = (sb.type == SBT_16) ? 1 : 0; /* Yes if SB16, No otherwise */ - - si=section->Get_int("dsp write busy delay"); /* in nanoseconds */ - if (si >= 0) sb.dsp.dsp_write_busy_time = (unsigned int)si; - else sb.dsp.dsp_write_busy_time = 1000; /* FIXME: How long is the DSP busy on real hardware? */ - - /* Sound Blaster (1.x and 2x) and Sound Blaster Pro (3.1) have the I/O port aliasing. - * The aliasing is also faithfully emulated by the ESS AudioDrive. */ - switch (sb.type) { - case SBT_1: /* guess */ - case SBT_2: /* verified on real hardware */ - case SBT_GB: /* FIXME: Right?? */ - case SBT_PRO1: /* verified on real hardware */ - case SBT_PRO2: /* guess */ - break; - default: - sb.hw.sb_io_alias=false; - break; - } - - /* auto-pick busy cycle */ - /* NOTE: SB16 cards appear to run a DSP busy cycle at all times. - * SB2 cards (and Pro?) appear to run a DSP busy cycle only when playing audio through DMA. */ - if (sb.busy_cycle_hz < 0) { - if (sb.type == SBT_16) /* Guess: Pentium PCI-ISA SYSCLK=8.333MHz / (6 cycles per 8-bit I/O read x 16 reads from DSP status) = about 86.805KHz? */ - sb.busy_cycle_hz = 8333333 / 6 / 16; - else /* Guess ???*/ - sb.busy_cycle_hz = 8333333 / 6 / 16; - } - - if (sb.ess_type != ESS_NONE) { - uint8_t t; - - /* legacy audio interrupt control */ - t = 0x80;/*game compatible IRQ*/ - switch (sb.hw.irq) { - case 5: t |= 0x5; break; - case 7: t |= 0xA; break; - case 10: t |= 0xF; break; - } - ESSreg(0xB1) = t; - - /* DRQ control */ - t = 0x80;/*game compatible DRQ */ - switch (sb.hw.dma8) { - case 0: t |= 0x5; break; - case 1: t |= 0xA; break; - case 3: t |= 0xF; break; - } - ESSreg(0xB2) = t; - } - - /* first configuration byte returned by 0x58. - * - * bits 7-5: ??? - * bit 4: Windows Sound System (Crystal Semiconductor CS4231A) I/O base port (1=0xE80 0=0x530) - * bits 3-2: ??? - * bit 1: gameport disable (1=disabled 0=enabled) - * bit 0: jumper assigns Sound Blaster base port 240h (right??) */ - sb.sc400_jumper_status_1 = 0x2C + ((sb.hw.base == 0x240) ? 0x1 : 0x0); - if (!JOYSTICK_IsEnabled(0) && !JOYSTICK_IsEnabled(1)) sb.sc400_jumper_status_1 += 0x02; // set bit 1 - /* second configuration byte returned by 0x58. - * - * bits 7-5: 110b ??? - * bits 4-0: bits 8-4 of the CD-ROM I/O port base. For example, to put the CD-ROM controller at 0x230 you would set this to 0x3. - * TESTSC.EXE ignores the value unless it represents one of the supported base I/O ports for the CD-ROM, which are: - * - * 0x03 -> 0x230 - * 0x05 -> 0x250 - * 0x11 -> 0x310 - * 0x12 -> 0x320 - * 0x13 -> 0x330 - * 0x14 -> 0x340 - * 0x15 -> 0x350 - * 0x16 -> 0x360 - * - * TODO: The CD-ROM interface is said to be designed for Panasonic or Goldstar CD-ROM drives. Can we emulate that someday, - * and allow the user to configure the base I/O port? */ - sb.sc400_jumper_status_2 = 0xC0 | (((sb.hw.base + 0x10) >> 4) & 0xF); - - sb.sc400_dsp_major = 3; - sb.sc400_dsp_minor = 5; - sb.sc400_cfg = 0; - /* bit 7: MPU IRQ select (1=IRQ 9 0=IRQ 5) - * bit 6: ??? - * bit 5-3: IRQ select - * bit 2: MPU IRQ enable - * bit 1-0: DMA select */ - switch (sb.hw.dma8) { - case 0: sb.sc400_cfg |= (1 << 0); break; - case 1: sb.sc400_cfg |= (2 << 0); break; - case 3: sb.sc400_cfg |= (3 << 0); break; - } - switch (sb.hw.irq) { - case 5: sb.sc400_cfg |= (5 << 3); break; - case 7: sb.sc400_cfg |= (1 << 3); break; - case 9: sb.sc400_cfg |= (2 << 3); break; - case 10:sb.sc400_cfg |= (3 << 3); break; - case 11:sb.sc400_cfg |= (4 << 3); break; - } - switch (MPU401_GetIRQ()) { // SC400: bit 7 and bit 2 control MPU IRQ - case 5: sb.sc400_cfg |= (0 << 7) + (1 << 2); break; // bit 7=0 bit 2=1 MPU IRQ 5 - case 9: sb.sc400_cfg |= (1 << 7) + (1 << 2); break; // bit 7=1 bit 2=1 MPU IRQ 9 - default: break; // bit 7=0 bit 2=0 MPU IRQ disabled - } - - if (sb.reveal_sc_type != RSC_NONE) { - // SC400 cards always use 8-bit DMA even for 16-bit PCM - if (sb.hw.dma16 != sb.hw.dma8) { - LOG(LOG_SB,LOG_DEBUG)("SC400: DMA is always 8-bit, setting 16-bit == 8-bit"); - sb.hw.dma16 = sb.hw.dma8; - } - } - - si = section->Get_int("dsp busy cycle always"); - if (si >= 0) sb.busy_cycle_always= (si > 0) ? true : false; - else if (sb.type == SBT_16) sb.busy_cycle_always = true; - else sb.busy_cycle_always = false; - - /* auto-pick busy duty cycle */ - if (sb.busy_cycle_duty_percent < 0 || sb.busy_cycle_duty_percent > 100) - sb.busy_cycle_duty_percent = 50; /* seems about right */ - - if (sb.hw.irq != 0 && sb.hw.irq != 0xFF) { - s = section->Get_string("irq hack"); - if (!s.empty() && s != "none") { - LOG(LOG_SB,LOG_NORMAL)("Sound Blaster emulation: Assigning IRQ hack '%s' as instructed",s.c_str()); - PIC_Set_IRQ_hack((int)sb.hw.irq,PIC_parse_IRQ_hack_string(s.c_str())); - } - } - - // ASP emulation - if (sb.enable_asp && sb.type != SBT_16) { - LOG(LOG_SB,LOG_WARN)("ASP emulation requires you to select SB16 emulation"); - sb.enable_asp = false; - } - - // SB16 non-PNP ASP RAM content observation. - // Contrary to my initial impression, it looks like the RAM is mostly 0xFF - // with some random bits flipped because no initialization is done at hardware power-on. - memset(sb16asp_ram_contents,0xFF,2048); - for (i=0;i < (2048 * 8);i++) { - if (((unsigned int)rand() & 31) == 0) - sb16asp_ram_contents[i>>3] ^= 1 << (i & 7); - } - -/* Reference: Command 0xF9 result map taken from Sound Blaster 16 with DSP 4.4 and ASP chip version ID 0x10: - * - * ASP> F9 result map: + break; + } + } + + // Backward compatibility with existing configurations + if(!strcmp(section->Get_string("oplmode"),"cms")) { + LOG(LOG_SB, LOG_WARN)("The 'cms' setting for 'oplmode' is deprecated; use 'cms = on' instead."); + sb[ci].cms = true; + } + else { + const char *cms_str = section->Get_string("cms"); + if(!strcmp(cms_str,"on")) { + sb[ci].cms = true; + } + else if(!strcmp(cms_str,"auto")) { + sb[ci].cms = (sb[ci].type == SBT_1 || sb[ci].type == SBT_GB); + } + else + sb[ci].cms = false; + } + + /* only the first card can have CMS */ + if (sb[ci].cms && ci != 0) + sb[ci].cms = false; + + switch(sb[ci].type) { + case SBT_1: // CMS is optional for Sound Blaster 1 and 2 + case SBT_2:; + case SBT_GB: + if(!sb[ci].cms) { + LOG(LOG_SB, LOG_WARN)("'cms' setting is 'off', but is forced to 'auto' on the Game Blaster."); + auto* sect_updater = sbGetSection(ci); + sect_updater->Get_prop("cms")->SetValue("auto"); + } + sb[ci].cms = true; // Game Blaster is CMS + break; + default: + if(sb[ci].cms) { + LOG(LOG_SB, LOG_WARN)("'cms' setting 'on' not supported on this card, forcing 'auto'."); + auto* sect_updater = sbGetSection(ci); + sect_updater->Get_prop("cms")->SetValue("auto"); + } + sb[ci].cms = false; + } + + if(sb[ci].cms && !IS_PC98_ARCH) { + CMS_Init(section); + } + + if (sb[ci].type==SBT_NONE || sb[ci].type==SBT_GB) return; + + sb[ci].chan=MixerChan.Install(SBLASTER_CallBacks[ci],22050,sbMixerChanNames[ci]); + sb[ci].dac.dac_pt = sb[ci].dac.dac_t = 0; + sb[ci].dsp.state=DSP_S_NORMAL; + sb[ci].dsp.out.lastval=0xaa; + sb[ci].dma.chan=NULL; + + for (i=4;i<=0xf;i++) { + if (i==8 || i==9) continue; + //Disable mixer ports for lower soundblaster + if ((sb[ci].type==SBT_1 || sb[ci].type==SBT_2) && (i==4 || i==5)) continue; + ReadHandler[i].Install(sb[ci].hw.base+(IS_PC98_ARCH ? ((i+0x20u) << 8u) : i),read_sbs[ci],IO_MB); + WriteHandler[i].Install(sb[ci].hw.base+(IS_PC98_ARCH ? ((i+0x20u) << 8u) : i),write_sbs[ci],IO_MB); + } + + // TODO: read/write handler for ESS AudioDrive ES1688 (and later) MPU-401 ports (3x0h/3x1h; prevents Windows drivers from working with default settings if missing) + + // NTS: Unknown/undefined registers appear to return the register index you requested rather than the actual contents, + // according to real SB16 CSP/ASP hardware (chip version id 0x10). + // + // Registers 0x00-0x1F are defined. Registers 0x80-0x83 are defined. + for (i=0;i<256;i++) sb[ci].ASP_regs[i] = i; + for (i=0x00;i < 0x20;i++) sb[ci].ASP_regs[i] = 0; + for (i=0x80;i < 0x84;i++) sb[ci].ASP_regs[i] = 0; + sb[ci].ASP_regs[5] = 0x01; + sb[ci].ASP_regs[9] = 0xf8; + + sb[ci].DSP_Reset(); + sb[ci].CTMIXER_Reset(); + + // The documentation does not specify if SB gets initialized with the speaker enabled + // or disabled. Real SBPro2 has it disabled. + sb[ci].speaker=false; + // On SB16 the speaker flag does not affect actual speaker state. + if (sb[ci].type == SBT_16 || sb[ci].ess_type != ESS_NONE || sb[ci].reveal_sc_type != RSC_NONE) sb[ci].chan->Enable(true); + else sb[ci].chan->Enable(false); + + if (sb[ci].def_enable_speaker) + sb[ci].DSP_SetSpeaker(true); + + s=section->Get_string("dsp require interrupt acknowledge"); + if (s == "true" || s == "1" || s == "on") + sb[ci].dsp.require_irq_ack = 1; + else if (s == "false" || s == "0" || s == "off") + sb[ci].dsp.require_irq_ack = 0; + else /* auto */ + sb[ci].dsp.require_irq_ack = (sb[ci].type == SBT_16) ? 1 : 0; /* Yes if SB16, No otherwise */ + + si=section->Get_int("dsp write busy delay"); /* in nanoseconds */ + if (si >= 0) sb[ci].dsp.dsp_write_busy_time = (unsigned int)si; + else sb[ci].dsp.dsp_write_busy_time = 1000; /* FIXME: How long is the DSP busy on real hardware? */ + + /* Sound Blaster (1.x and 2x) and Sound Blaster Pro (3.1) have the I/O port aliasing. + * The aliasing is also faithfully emulated by the ESS AudioDrive. */ + switch (sb[ci].type) { + case SBT_1: /* guess */ + case SBT_2: /* verified on real hardware */ + case SBT_GB: /* FIXME: Right?? */ + case SBT_PRO1: /* verified on real hardware */ + case SBT_PRO2: /* guess */ + break; + default: + sb[ci].hw.sb_io_alias=false; + break; + } + + /* auto-pick busy cycle */ + /* NOTE: SB16 cards appear to run a DSP busy cycle at all times. + * SB2 cards (and Pro?) appear to run a DSP busy cycle only when playing audio through DMA. */ + if (sb[ci].busy_cycle_hz < 0) { + if (sb[ci].type == SBT_16) /* Guess: Pentium PCI-ISA SYSCLK=8.333MHz / (6 cycles per 8-bit I/O read x 16 reads from DSP status) = about 86.805KHz? */ + sb[ci].busy_cycle_hz = 8333333 / 6 / 16; + else /* Guess ???*/ + sb[ci].busy_cycle_hz = 8333333 / 6 / 16; + } + + if (sb[ci].ess_type != ESS_NONE) { + uint8_t t; + + /* legacy audio interrupt control */ + t = 0x80;/*game compatible IRQ*/ + switch (sb[ci].hw.irq) { + case 5: t |= 0x5; break; + case 7: t |= 0xA; break; + case 10: t |= 0xF; break; + } + sb[ci].ESSreg(0xB1) = t; + + /* DRQ control */ + t = 0x80;/*game compatible DRQ */ + switch (sb[ci].hw.dma8) { + case 0: t |= 0x5; break; + case 1: t |= 0xA; break; + case 3: t |= 0xF; break; + } + sb[ci].ESSreg(0xB2) = t; + } + + /* first configuration byte returned by 0x58. + * + * bits 7-5: ??? + * bit 4: Windows Sound System (Crystal Semiconductor CS4231A) I/O base port (1=0xE80 0=0x530) + * bits 3-2: ??? + * bit 1: gameport disable (1=disabled 0=enabled) + * bit 0: jumper assigns Sound Blaster base port 240h (right??) */ + sb[ci].sc400_jumper_status_1 = 0x2C + ((sb[ci].hw.base == 0x240) ? 0x1 : 0x0); + if (!JOYSTICK_IsEnabled(0) && !JOYSTICK_IsEnabled(1)) sb[ci].sc400_jumper_status_1 += 0x02; // set bit 1 + /* second configuration byte returned by 0x58. + * + * bits 7-5: 110b ??? + * bits 4-0: bits 8-4 of the CD-ROM I/O port base. For example, to put the CD-ROM controller at 0x230 you would set this to 0x3. + * TESTSC.EXE ignores the value unless it represents one of the supported base I/O ports for the CD-ROM, which are: + * + * 0x03 -> 0x230 + * 0x05 -> 0x250 + * 0x11 -> 0x310 + * 0x12 -> 0x320 + * 0x13 -> 0x330 + * 0x14 -> 0x340 + * 0x15 -> 0x350 + * 0x16 -> 0x360 + * + * TODO: The CD-ROM interface is said to be designed for Panasonic or Goldstar CD-ROM drives. Can we emulate that someday, + * and allow the user to configure the base I/O port? */ + sb[ci].sc400_jumper_status_2 = 0xC0 | (((sb[ci].hw.base + 0x10) >> 4) & 0xF); + + sb[ci].sc400_dsp_major = 3; + sb[ci].sc400_dsp_minor = 5; + sb[ci].sc400_cfg = 0; + /* bit 7: MPU IRQ select (1=IRQ 9 0=IRQ 5) + * bit 6: ??? + * bit 5-3: IRQ select + * bit 2: MPU IRQ enable + * bit 1-0: DMA select */ + switch (sb[ci].hw.dma8) { + case 0: sb[ci].sc400_cfg |= (1 << 0); break; + case 1: sb[ci].sc400_cfg |= (2 << 0); break; + case 3: sb[ci].sc400_cfg |= (3 << 0); break; + } + switch (sb[ci].hw.irq) { + case 5: sb[ci].sc400_cfg |= (5 << 3); break; + case 7: sb[ci].sc400_cfg |= (1 << 3); break; + case 9: sb[ci].sc400_cfg |= (2 << 3); break; + case 10:sb[ci].sc400_cfg |= (3 << 3); break; + case 11:sb[ci].sc400_cfg |= (4 << 3); break; + } + switch (MPU401_GetIRQ()) { // SC400: bit 7 and bit 2 control MPU IRQ + case 5: sb[ci].sc400_cfg |= (0 << 7) + (1 << 2); break; // bit 7=0 bit 2=1 MPU IRQ 5 + case 9: sb[ci].sc400_cfg |= (1 << 7) + (1 << 2); break; // bit 7=1 bit 2=1 MPU IRQ 9 + default: break; // bit 7=0 bit 2=0 MPU IRQ disabled + } + + if (sb[ci].reveal_sc_type != RSC_NONE) { + // SC400 cards always use 8-bit DMA even for 16-bit PCM + if (sb[ci].hw.dma16 != sb[ci].hw.dma8) { + LOG(LOG_SB,LOG_DEBUG)("SC400: DMA is always 8-bit, setting 16-bit == 8-bit"); + sb[ci].hw.dma16 = sb[ci].hw.dma8; + } + } + + si = section->Get_int("dsp busy cycle always"); + if (si >= 0) sb[ci].busy_cycle_always= (si > 0) ? true : false; + else if (sb[ci].type == SBT_16) sb[ci].busy_cycle_always = true; + else sb[ci].busy_cycle_always = false; + + /* auto-pick busy duty cycle */ + if (sb[ci].busy_cycle_duty_percent < 0 || sb[ci].busy_cycle_duty_percent > 100) + sb[ci].busy_cycle_duty_percent = 50; /* seems about right */ + + if (sb[ci].hw.irq != 0 && sb[ci].hw.irq != 0xFF) { + s = section->Get_string("irq hack"); + if (!s.empty() && s != "none") { + LOG(LOG_SB,LOG_NORMAL)("Sound Blaster emulation: Assigning IRQ hack '%s' as instructed",s.c_str()); + PIC_Set_IRQ_hack((int)sb[ci].hw.irq,PIC_parse_IRQ_hack_string(s.c_str())); + } + } + + // ASP emulation + if (sb[ci].enable_asp && sb[ci].type != SBT_16) { + LOG(LOG_SB,LOG_WARN)("ASP emulation requires you to select SB16 emulation"); + sb[ci].enable_asp = false; + } + + // SB16 non-PNP ASP RAM content observation. + // Contrary to my initial impression, it looks like the RAM is mostly 0xFF + // with some random bits flipped because no initialization is done at hardware power-on. + memset(sb[ci].sb16asp_ram_contents,0xFF,2048); + for (i=0;i < (2048 * 8);i++) { + if (((unsigned int)rand() & 31) == 0) + sb[ci].sb16asp_ram_contents[i>>3] ^= 1 << (i & 7); + } + + /* Reference: Command 0xF9 result map taken from Sound Blaster 16 with DSP 4.4 and ASP chip version ID 0x10: + * + * ASP> F9 result map: 00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 07 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20: f9 00 00 00 00 aa 96 00 00 00 00 00 00 00 00 00 @@ -4223,129 +4465,155 @@ d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ASP> - * End reference */ - memset(sb16_8051_mem,0x00,256); - sb16_8051_mem[0x0E] = 0xFF; - sb16_8051_mem[0x0F] = 0x07; - sb16_8051_mem[0x37] = 0x38; - - if (sb.enable_asp) - LOG(LOG_SB,LOG_WARN)("ASP emulation at this stage is extremely limited and only covers DSP command responses."); - - /* Soundblaster midi interface */ - if (!MIDI_Available()) sb.midi = false; - else sb.midi = true; - } - - void DOS_Shutdown() { /* very likely, we're booting into a guest OS where our environment variable has no meaning anymore */ - autoexecline.Uninstall(); - } - - void DOS_Startup() { - if (sb.type==SBT_NONE || sb.type==SBT_GB) return; - - if (sb.emit_blaster_var) { - // Create set blaster line - ostringstream temp; - if (IS_PC98_ARCH) - temp << "@SET BLASTER=A" << setw(2) << hex << sb.hw.base; - else - temp << "@SET BLASTER=A" << setw(3) << hex << sb.hw.base; - - if (sb.hw.irq != 0xFF) temp << " I" << dec << (Bitu)sb.hw.irq; - if (sb.hw.dma8 != 0xFF) temp << " D" << (Bitu)sb.hw.dma8; - if (sb.type==SBT_16 && sb.hw.dma16 != 0xFF) temp << " H" << (Bitu)sb.hw.dma16; - if (!IS_PC98_ARCH) { - Section_prop * section=static_cast(control->GetSection("midi")); - const char* s_mpu = section->Get_string("mpu401"); - if(strcasecmp(s_mpu,"none") && strcasecmp(s_mpu,"off") && strcasecmp(s_mpu,"false")) { - Bitu baseio = (Bitu)section->Get_hex("mpubase"); - if (baseio == 0 || baseio < 0x300 || baseio > 0x360) - baseio = 0x330; - temp << " P" << hex << baseio; - } - } - temp << " T" << static_cast(sb.type) << ends; - - autoexecline.Install(temp.str()); - } - } - - ~SBLASTER() { - switch (oplmode) { - case OPL_none: - break; - case OPL_opl2: - case OPL_dualopl2: - case OPL_opl3: - case OPL_opl3gold: - case OPL_esfm: - OPL_ShutDown(m_configuration); - break; - default: - break; - } - if(sb.cms) { - CMS_ShutDown(m_configuration); - } - if (sb.type==SBT_NONE || sb.type==SBT_GB) return; - DSP_Reset(); // Stop everything - } + * End reference */ + memset(sb[ci].sb16_8051_mem,0x00,256); + sb[ci].sb16_8051_mem[0x0E] = 0xFF; + sb[ci].sb16_8051_mem[0x0F] = 0x07; + sb[ci].sb16_8051_mem[0x37] = 0x38; + + if (sb[ci].enable_asp) + LOG(LOG_SB,LOG_WARN)("ASP emulation at this stage is extremely limited and only covers DSP command responses."); + + /* Soundblaster midi interface */ + if (!MIDI_Available()) sb[ci].midi = false; + else sb[ci].midi = true; + } + + void DOS_Shutdown() { /* very likely, we're booting into a guest OS where our environment variable has no meaning anymore */ +#if !defined(OSFREE) + autoexecline.Uninstall(); +#endif + } + + void DOS_Startup() { +#if !defined(OSFREE) + if (sb[ci].type==SBT_NONE || sb[ci].type==SBT_GB) return; + + if (sb[ci].emit_blaster_var && ci == 0) { + // Create set blaster line + ostringstream temp; + if (IS_PC98_ARCH) + temp << "@SET BLASTER=A" << setw(2) << hex << sb[ci].hw.base; + else + temp << "@SET BLASTER=A" << setw(3) << hex << sb[ci].hw.base; + + if (sb[ci].hw.irq != 0xFF) temp << " I" << dec << (Bitu)sb[ci].hw.irq; + if (sb[ci].hw.dma8 != 0xFF) temp << " D" << (Bitu)sb[ci].hw.dma8; + if (sb[ci].type==SBT_16 && sb[ci].hw.dma16 != 0xFF) temp << " H" << (Bitu)sb[ci].hw.dma16; + if (!IS_PC98_ARCH) { + Section_prop * section=static_cast(control->GetSection("midi")); + const char* s_mpu = section->Get_string("mpu401"); + if(strcasecmp(s_mpu,"none") && strcasecmp(s_mpu,"off") && strcasecmp(s_mpu,"false")) { + Bitu baseio = (Bitu)section->Get_hex("mpubase"); + if (baseio == 0 || baseio < 0x300 || baseio > 0x360) + baseio = 0x330; + temp << " P" << hex << baseio; + } + } + temp << " T" << static_cast(sb[ci].type) << ends; + + autoexecline.Install(temp.str()); + } +#endif + } + + ~SBLASTER() { + switch (oplmode) { + case OPL_none: + break; + case OPL_opl2: + case OPL_dualopl2: + case OPL_opl3: + case OPL_opl3gold: + case OPL_esfm: + OPL_ShutDown(m_configuration); + break; + default: + break; + } + if(sb[ci].cms) { + CMS_ShutDown(m_configuration); + } + if (sb[ci].type==SBT_NONE || sb[ci].type==SBT_GB) return; + sb[ci].DSP_Reset(); // Stop everything + } }; //End of SBLASTER class -static SBLASTER* test = NULL; +static SBLASTER* test[MAX_CARDS] = {NULL}; void SBLASTER_DOS_Shutdown() { - if (test != NULL) test->DOS_Shutdown(); + for (size_t ci=0;ci < MAX_CARDS;ci++) { + if (test[ci] != NULL) + test[ci]->DOS_Shutdown(); + } } void SBLASTER_ShutDown(Section* /*sec*/) { - if (test != NULL) { - delete test; - test = NULL; - } + for (size_t ci=0;ci < MAX_CARDS;ci++) { + if (test[ci] != NULL) { + delete test[ci]; + test[ci] = NULL; + } + } #if HAS_HARDOPL - HARDOPL_Cleanup(); + HARDOPL_Cleanup(); +#endif +#if defined(_MSC_VER) || defined(__MINGW64__) + MIC_Shutdown(); #endif } void SBLASTER_OnReset(Section *sec) { - (void)sec;//UNUSED - SBLASTER_DOS_Shutdown(); + (void)sec;//UNUSED + SBLASTER_DOS_Shutdown(); - if (test != NULL) { - delete test; - test = NULL; - } + for (size_t ci=0;ci < MAX_CARDS;ci++) { + if (test[ci] != NULL) { + delete test[ci]; + test[ci] = NULL; + } + } #if HAS_HARDOPL - HARDOPL_Cleanup(); + HARDOPL_Cleanup(); #endif - if (test == NULL) { - LOG(LOG_MISC,LOG_DEBUG)("Allocating Sound Blaster emulation"); - test = new SBLASTER(control->GetSection("sblaster")); - } + for (size_t ci=0;ci < MAX_CARDS;ci++) { + if (test[ci] == NULL) { + LOG(LOG_MISC,LOG_DEBUG)("Allocating Sound Blaster emulation"); + test[ci] = new SBLASTER(ci,sbGetSection(ci)); + } + } } void SBLASTER_DOS_Exit(Section *sec) { - (void)sec;//UNUSED - SBLASTER_DOS_Shutdown(); + (void)sec;//UNUSED + SBLASTER_DOS_Shutdown(); } void SBLASTER_DOS_Boot(Section *sec) { - (void)sec;//UNUSED - if (test != NULL) test->DOS_Startup(); + (void)sec;//UNUSED + for (size_t ci=0;ci < MAX_CARDS;ci++) { + if (test[ci] != NULL) + test[ci]->DOS_Startup(); + } } void SBLASTER_Init() { - LOG(LOG_MISC,LOG_DEBUG)("Initializing Sound Blaster emulation"); - - AddExitFunction(AddExitFunctionFuncPair(SBLASTER_ShutDown),true); - AddVMEventFunction(VM_EVENT_RESET,AddVMEventFunctionFuncPair(SBLASTER_OnReset)); - AddVMEventFunction(VM_EVENT_DOS_EXIT_BEGIN,AddVMEventFunctionFuncPair(SBLASTER_DOS_Exit)); - AddVMEventFunction(VM_EVENT_DOS_SURPRISE_REBOOT,AddVMEventFunctionFuncPair(SBLASTER_DOS_Exit)); - AddVMEventFunction(VM_EVENT_DOS_EXIT_REBOOT_BEGIN,AddVMEventFunctionFuncPair(SBLASTER_DOS_Exit)); - AddVMEventFunction(VM_EVENT_DOS_INIT_SHELL_READY,AddVMEventFunctionFuncPair(SBLASTER_DOS_Boot)); + LOG(LOG_MISC,LOG_DEBUG)("Initializing Sound Blaster emulation"); + +#if defined(_MSC_VER) || defined(__MINGW64__) + // Initialize microphone input for recording support + if (MIC_Initialize()) { + LOG(LOG_MISC,LOG_DEBUG)("Microphone input initialized successfully"); + } +#endif + + AddExitFunction(AddExitFunctionFuncPair(SBLASTER_ShutDown),true); + AddVMEventFunction(VM_EVENT_RESET,AddVMEventFunctionFuncPair(SBLASTER_OnReset)); + AddVMEventFunction(VM_EVENT_DOS_EXIT_BEGIN,AddVMEventFunctionFuncPair(SBLASTER_DOS_Exit)); + AddVMEventFunction(VM_EVENT_DOS_SURPRISE_REBOOT,AddVMEventFunctionFuncPair(SBLASTER_DOS_Exit)); + AddVMEventFunction(VM_EVENT_DOS_EXIT_REBOOT_BEGIN,AddVMEventFunctionFuncPair(SBLASTER_DOS_Exit)); + AddVMEventFunction(VM_EVENT_DOS_INIT_SHELL_READY,AddVMEventFunctionFuncPair(SBLASTER_DOS_Boot)); } // save state support @@ -4362,11 +4630,12 @@ void *SB_DSP_E2_DMA_CallBack_Func = (void*)((uintptr_t)DSP_E2_DMA_CallBack); void POD_Save_Sblaster( std::ostream& stream ) { + const size_t ci=0; const char pod_name[32] = "SBlaster"; if( stream.fail() ) return; if( !test ) return; - if( !sb.chan ) return; + if( !sb[ci].chan ) return; WRITE_POD( &pod_name, pod_name ); @@ -4381,7 +4650,7 @@ void POD_Save_Sblaster( std::ostream& stream ) dma_idx = 0xff; for( int lcv=0; lcv<8; lcv++ ) { - if( sb.dma.chan == GetDMAChannel(lcv) ) { dma_idx = lcv; break; } + if( sb[ci].dma.chan == GetDMAChannel(lcv) ) { dma_idx = lcv; break; } } // ******************************************* @@ -4391,13 +4660,6 @@ void POD_Save_Sblaster( std::ostream& stream ) // - near-pure data WRITE_POD( &sb, sb ); - // - pure data - WRITE_POD( &ASP_regs, ASP_regs ); - //WRITE_POD( &ASP_init_in_progress, ASP_init_in_progress ); - WRITE_POD( &last_dma_callback, last_dma_callback ); - - - // - reloc ptr WRITE_POD( &dma_idx, dma_idx ); @@ -4405,17 +4667,18 @@ void POD_Save_Sblaster( std::ostream& stream ) // ******************************************* // ******************************************* - sb.chan->SaveState(stream); + sb[ci].chan->SaveState(stream); } void POD_Load_Sblaster( std::istream& stream ) { + const size_t ci=0; char pod_name[32] = {0}; if( stream.fail() ) return; if( !test ) return; - if( !sb.chan ) return; + if( !sb[ci].chan ) return; // error checking @@ -4434,7 +4697,7 @@ void POD_Load_Sblaster( std::istream& stream ) // save static ptr - mixer_old = sb.chan; + mixer_old = sb[ci].chan; //******************************************* //******************************************* @@ -4443,13 +4706,6 @@ void POD_Load_Sblaster( std::istream& stream ) // - near-pure data READ_POD( &sb, sb ); - // - pure data - READ_POD( &ASP_regs, ASP_regs ); - //READ_POD( &ASP_init_in_progress, ASP_init_in_progress ); - READ_POD( &last_dma_callback, last_dma_callback ); - - - // - reloc ptr READ_POD( &dma_idx, dma_idx ); @@ -4457,16 +4713,16 @@ void POD_Load_Sblaster( std::istream& stream ) //******************************************* //******************************************* - sb.dma.chan = NULL; - if( dma_idx != 0xff ) sb.dma.chan = GetDMAChannel(dma_idx); + sb[ci].dma.chan = NULL; + if( dma_idx != 0xff ) sb[ci].dma.chan = GetDMAChannel(dma_idx); //******************************************* //******************************************* //******************************************* // restore static ptr - sb.chan = mixer_old; + sb[ci].chan = mixer_old; - sb.chan->LoadState(stream); + sb[ci].chan->LoadState(stream); } diff --git a/src/hardware/serialport/misc_util.cpp b/src/hardware/serialport/misc_util.cpp index 464c6b39f5b..e3d2058f730 100644 --- a/src/hardware/serialport/misc_util.cpp +++ b/src/hardware/serialport/misc_util.cpp @@ -27,8 +27,15 @@ // C++ SDLnet wrapper #if !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) -#define ENET_IMPLEMENTATION -#include "enet.h" +#define WITH_ENET_IMPLEMENTATION +#endif +#if defined(OS2) +#undef WITH_ENET_IMPLEMENTATION +#endif + +#if defined(WITH_ENET_IMPLEMENTATION) + #define ENET_IMPLEMENTATION + #include "enet.h" #endif #include "ipx.h" #include "logging.h" @@ -86,7 +93,7 @@ NETClientSocket *NETClientSocket::NETClientFactory(SocketTypesE socketType, switch (socketType) { case SOCKET_TYPE_TCP: return new TCPClientSocket(destination, port); -#if !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) +#if defined(WITH_ENET_IMPLEMENTATION) case SOCKET_TYPE_ENET: return new ENETClientSocket(destination, port); #endif @@ -145,7 +152,7 @@ NETServerSocket *NETServerSocket::NETServerFactory(SocketTypesE socketType, switch (socketType) { case SOCKET_TYPE_TCP: return new TCPServerSocket(port); -#if !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) +#if defined(WITH_ENET_IMPLEMENTATION) case SOCKET_TYPE_ENET: return new ENETServerSocket(port); #endif @@ -156,7 +163,7 @@ NETServerSocket *NETServerSocket::NETServerFactory(SocketTypesE socketType, // --- ENet UDP NET INTERFACE ------------------------------------------------ -#if !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) +#if defined(WITH_ENET_IMPLEMENTATION) class enet_manager_t { public: enet_manager_t() diff --git a/src/hardware/serialport/misc_util.h b/src/hardware/serialport/misc_util.h index fd6f89cc754..8a87f40cc7f 100644 --- a/src/hardware/serialport/misc_util.h +++ b/src/hardware/serialport/misc_util.h @@ -62,9 +62,20 @@ #include #endif +#if defined(C_SDL2_NET) && C_SDL2_NET +#include +#else #include +#endif #if !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) +#define WITH_ENET_HEADER +#endif +#if defined(OS2) +#undef WITH_ENET_HEADER +#endif + +#if defined(WITH_ENET_HEADER) #include "enet.h" #endif @@ -131,7 +142,7 @@ class NETServerSocket { // --- ENET UDP NET INTERFACE ------------------------------------------------ -#if !defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR) +#if defined(WITH_ENET_HEADER) class ENETServerSocket : public NETServerSocket { public: ENETServerSocket(uint16_t port); @@ -140,7 +151,7 @@ class ENETServerSocket : public NETServerSocket { ~ENETServerSocket(); - NETClientSocket *Accept(); + NETClientSocket *Accept() override; private: ENetHost *host = nullptr; @@ -157,11 +168,11 @@ class ENETClientSocket : public NETClientSocket { ~ENETClientSocket(); - SocketState GetcharNonBlock(uint8_t &val); - bool Putchar(uint8_t val); - bool SendArray(const uint8_t *data, size_t n); - bool ReceiveArray(uint8_t *data, size_t &n); - bool GetRemoteAddressString(char *buffer); + SocketState GetcharNonBlock(uint8_t &val) override; + bool Putchar(uint8_t val) override; + bool SendArray(const uint8_t *data, size_t n) override; + bool ReceiveArray(uint8_t *data, size_t &n) override; + bool GetRemoteAddressString(char *buffer) override; private: void updateState(); @@ -201,11 +212,11 @@ class TCPClientSocket : public NETClientSocket { ~TCPClientSocket(); - SocketState GetcharNonBlock(uint8_t &val); - bool Putchar(uint8_t val); - bool SendArray(const uint8_t *data, size_t n); - bool ReceiveArray(uint8_t *data, size_t &n); - bool GetRemoteAddressString(char *buffer); + SocketState GetcharNonBlock(uint8_t &val) override; + bool Putchar(uint8_t val) override; + bool SendArray(const uint8_t *data, size_t n) override; + bool ReceiveArray(uint8_t *data, size_t &n) override; + bool GetRemoteAddressString(char *buffer) override; private: @@ -227,7 +238,7 @@ class TCPServerSocket : public NETServerSocket { ~TCPServerSocket(); - NETClientSocket *Accept(); + NETClientSocket *Accept() override; }; #endif // C_MODEM diff --git a/src/hardware/serialport/nullmodem.h b/src/hardware/serialport/nullmodem.h index 6ce0b50a982..4e79c3fcf1e 100644 --- a/src/hardware/serialport/nullmodem.h +++ b/src/hardware/serialport/nullmodem.h @@ -38,15 +38,15 @@ class CNullModem : public CSerial { CNullModem(Bitu id, CommandLine* cmd); ~CNullModem(); - void updatePortConfig(uint16_t divider, uint8_t lcr); - void updateMSR(); - void transmitByte(uint8_t val, bool first); - void setBreak(bool value); + void updatePortConfig(uint16_t divider, uint8_t lcr) override; + void updateMSR() override; + void transmitByte(uint8_t val, bool first) override; + void setBreak(bool value) override; - void setRTSDTR(bool rts, bool dtr); - void setRTS(bool val); - void setDTR(bool val); - void handleUpperEvent(uint16_t type); + void setRTSDTR(bool rts, bool dtr) override; + void setRTS(bool val) override; + void setDTR(bool val) override; + void handleUpperEvent(uint16_t type) override; SocketTypesE socketType = SOCKET_TYPE_TCP; diff --git a/src/hardware/serialport/serialport.cpp b/src/hardware/serialport/serialport.cpp index 39d00cace32..d0f6196e2df 100644 --- a/src/hardware/serialport/serialport.cpp +++ b/src/hardware/serialport/serialport.cpp @@ -44,6 +44,7 @@ #define LOG_SER(x) log_ser +#if !defined(OSFREE) bool device_COM::Read(uint8_t * data,uint16_t * size) { // DTR + RTS on sclass->Write_MCR(0x03); @@ -99,6 +100,7 @@ device_COM::~device_COM() { if (sclass != NULL && sclass->mydosdevice == this) sclass->mydosdevice = NULL; } +#endif // COM1 - COM9 objects CSerial * serialports[9] = { @@ -1202,19 +1204,23 @@ bool CSerial::getBituSubstring(const char* name,Bitu* data, CommandLine* cmd) { } void CSerial::registerDOSDevice() { +#if !defined(OSFREE) if (mydosdevice == NULL) { LOG(LOG_MISC,LOG_DEBUG)("COM%d: Registering DOS device",(int)idnumber+1); mydosdevice = new device_COM(this); DOS_AddDevice(mydosdevice); } +#endif } void CSerial::unregisterDOSDevice() { +#if !defined(OSFREE) if (mydosdevice != NULL) { LOG(LOG_MISC,LOG_DEBUG)("COM%d: Unregistering DOS device",(int)idnumber+1); DOS_DelDevice(mydosdevice); // deletes the pointer for us! mydosdevice=NULL; } +#endif } CSerial::~CSerial(void) { diff --git a/src/hardware/serialport/softmodem.h b/src/hardware/serialport/softmodem.h index c652f7aca60..3726c5cb588 100644 --- a/src/hardware/serialport/softmodem.h +++ b/src/hardware/serialport/softmodem.h @@ -193,19 +193,19 @@ class CSerialModem : public CSerial { //TODO void Timer2(void); - void handleUpperEvent(uint16_t type); + void handleUpperEvent(uint16_t type) override; void RXBufferEmpty(); - void transmitByte(uint8_t val, bool first); - void updatePortConfig(uint16_t divider, uint8_t lcr); - void updateMSR(); + void transmitByte(uint8_t val, bool first) override; + void updatePortConfig(uint16_t divider, uint8_t lcr) override; + void updateMSR() override; - void setBreak(bool); + void setBreak(bool) override; - void setRTSDTR(bool rts, bool dtr); - void setRTS(bool val); - void setDTR(bool val); + void setRTSDTR(bool rts, bool dtr) override; + void setRTS(bool val) override; + void setDTR(bool val) override; protected: char cmdbuf[255]; diff --git a/src/hardware/snd_pc98/cbus/pcm86io.c b/src/hardware/snd_pc98/cbus/pcm86io.c index 56264ca05c6..07e6b747878 100644 --- a/src/hardware/snd_pc98/cbus/pcm86io.c +++ b/src/hardware/snd_pc98/cbus/pcm86io.c @@ -39,9 +39,9 @@ static void IOOUTCALL pcm86_oa468(UINT port, REG8 val) { // TRACEOUT(("86pcm out %.4x %.2x", port, val)); sound_sync(); xchgbit = pcm86.fifo ^ val; - // バッファリセット判定 + // buffer reset check if ((xchgbit & 8) && (val & 8)) { - pcm86.readpos = 0; // バッファリセット + pcm86.readpos = 0; // buffer reset pcm86.wrtpos = 0; pcm86.realbuf = 0; pcm86.virbuf = 0; @@ -110,7 +110,7 @@ static void IOOUTCALL pcm86_oa46c(UINT port, REG8 val) { pcm86.buffer[pcm86.wrtpos] = val; pcm86.wrtpos = (pcm86.wrtpos + 1) & PCM86_BUFMSK; pcm86.realbuf++; - // バッファオーバーフローの監視 + // Check buffer overflow if (pcm86.realbuf >= PCM86_REALBUFSIZE) { #if 1 pcm86.realbuf -= 4; diff --git a/src/hardware/snd_pc98/x11/dosio.c b/src/hardware/snd_pc98/x11/dosio.c index dbc23f5278e..e5d5fd6bc39 100644 --- a/src/hardware/snd_pc98/x11/dosio.c +++ b/src/hardware/snd_pc98/x11/dosio.c @@ -149,21 +149,6 @@ file_getdatetime(FILEH handle, DOSDATE *dosdate, DOSTIME *dostime) return -1; } -#if 0 -short -file_delete(const OEMCHAR *path) -{ - - return (short)unlink(path); -} - -short -file_dircreate(const OEMCHAR *path) -{ - - return (short)mkdir(path, 0777); -} -#endif #if 0 diff --git a/src/hardware/timer.cpp b/src/hardware/timer.cpp index 25f0eb99ec0..8b0a9afe071 100644 --- a/src/hardware/timer.cpp +++ b/src/hardware/timer.cpp @@ -92,9 +92,13 @@ struct PIT_Block { } void set_active_counter(Bitu new_cntr) { assert(new_cntr != 0); + if (mode == 2) { assert(new_cntr != 1); } cntr_cur = new_cntr; - delay = ((pic_tickindex_t)(1000ul * cntr_cur)) / PIT_TICK_RATE; + if (mode == 2) + delay = ((pic_tickindex_t)(1000ul * (cntr_cur-1u))) / PIT_TICK_RATE; /* counts down to ONE, not ZERO */ + else + delay = ((pic_tickindex_t)(1000ul * cntr_cur)) / PIT_TICK_RATE; /* Make sure the new counter value is returned if read back even if the gate is off! * Some games like to constantly reprogram PIT 2 with precise event timey stuff and @@ -123,7 +127,10 @@ struct PIT_Block { pic_tickindex_t c_delay; /* NTS: Remember, the counter counts DOWN, not up, so the delay is how long it takes to get there */ - c_delay = ((pic_tickindex_t)(1000ull * (0x10000u - counter))) / PIT_TICK_RATE; + if (mode == 2) + c_delay = ((pic_tickindex_t)(1000ull * (0xFFFFu - counter))) / PIT_TICK_RATE; /* counts down to ONE, not ZERO */ + else + c_delay = ((pic_tickindex_t)(1000ull * (0x10000u - counter))) / PIT_TICK_RATE; start = (t - c_delay); } @@ -233,19 +240,53 @@ struct PIT_Block { } bool get_output_from_counter(const read_counter_result &res) { + // Timer: [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/Timer/8253/8254%20programmable%20interval%20timer%20%281993%2d09%29%2epdf] + // PIC: [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/Interrupt%20controller/8259/8259A%20Programmable%20Interrupt%20Controller%20%288259A%e2%88%958259A%2d2%29%20%281988%2d12%29%2epdf] + // + // Mode 0: Interrupt on Terminal Count + // + // [new mode] [begin count] [count==0] + // ___ __________ + // XXX|___________________________________________| + // + // Mode 1: Hardware triggerable one-shot + // + // [new mode] [begin count] [count==0] + // _______________ __________ + // XXX |_______________________________| + // + // Mode 2: Rate generator + // + // [new mode] [begin count] [count==1] + // ______________________________________________ __________ + // XXX || + // Mode 3: Square wave + // + // [new mode] [begin count] [count=0] [count==0] counts down by 2 + // _______________________________ _________ + // XXX |_______________| + // + // Mode 4: Software Triggered Interrupt (looks like mode 2) but writing a new counter takes effect right away + switch (mode) { case 0: if (new_mode) return false; if (res.cycle != 0u/*index > delay*/) return true; else return false; + case 1: + if (new_mode) return true; + if (res.cycle != 0u/*index > delay*/) return true; + else return false; case 2: if (new_mode) return true; - return res.counter != 0; + return res.counter != 1; case 3: if (new_mode) return true; return res.cycle == 0; case 4: - return true; + case 5: + if (new_mode) return true; + return res.counter != 0; default: break; } @@ -275,18 +316,22 @@ struct PIT_Block { ret.counter = (uint16_t)(((unsigned long)(cntr_cur - ((tmp * PIT_TICK_RATE) / 1000.0))) % 0x10000ul); } - if (mode == 0 || mode == 4) { - if (index > delay) - ret.cycle = 1; - } + if (index > delay) + ret.cycle = 1; + else + ret.cycle = 0; } break; case 5: /* Hardware Triggered Strobe */ case 1: /* Hardware Retriggerable one-shot */ - if (index > delay) // has timed out + if (index > delay) { // has timed out ret.counter = 0xFFFF; - else + ret.cycle = 1; + } + else { ret.counter = (uint16_t)(cntr_cur - (index * (PIT_TICK_RATE / 1000.0))); + ret.cycle = 0; + } break; case 2: /* Rate Generator */ ret.counter = (uint16_t)(cntr_cur - ((pic_tickfmod(index,delay) / delay) * cntr_cur)); @@ -329,7 +374,10 @@ unsigned long PIT_TICK_RATE = PIT_TICK_RATE_IBM; pic_tickindex_t VGA_PITSync_delay(void); static void PIT0_Event(Bitu /*val*/) { + /* HACK: Despite edge trigger, force IRQ */ + PIC_DeActivateIRQ(0); PIC_ActivateIRQ(0); + /* NTS: "Days of Thunder" leaves PIT 0 in mode 1 for some reason, which triggers once and then stops. "start" does not advance in that mode. * For any non-periodic mode, this code would falsely detect an ever increasing error and act badly. */ if (pit[0].mode == 2 || pit[0].mode == 3) { @@ -423,7 +471,9 @@ static void counter_latch(Bitu counter,bool do_latch=true) { } if (counter == 0/*IRQ 0*/) { - if (!p->output) + if (p->output) + PIC_ActivateIRQ(0); + else PIC_DeActivateIRQ(0); } } @@ -538,13 +588,13 @@ static void write_latch(Bitu port,Bitu val,Bitu /*iolen*/) { if (p->bcd == false) p->set_next_counter(0x10000); else - p->set_next_counter(9999/*check this*/); + p->set_next_counter(10000/*check this*/); } - else if (p->write_latch == 1 && p->mode == 3/*square wave, count by 2*/) { /* counter==1 and mode==3 makes a low frequency buzz (Paratrooper) */ + else if (p->write_latch == 1 && (p->mode == 2/*rate generator*/ || p->mode == 3/*square wave, count by 2*/)) { /* counter==1 and mode==3 makes a low frequency buzz (Paratrooper) */ if (p->bcd == false) p->set_next_counter(0x10001); else - p->set_next_counter(10000/*check this*/); + p->set_next_counter(10001/*check this*/); } else { p->set_next_counter(p->write_latch); @@ -557,6 +607,12 @@ static void write_latch(Bitu port,Bitu val,Bitu /*iolen*/) { if (counter == 0) { PIC_RemoveEvents(PIT0_Event); PIC_AddEvent(PIT0_Event,p->delay); + + counter_output(counter); + if(pit[counter].output) + PIC_ActivateIRQ(0); + else + PIC_DeActivateIRQ(0); } } else { @@ -576,7 +632,7 @@ static void write_latch(Bitu port,Bitu val,Bitu /*iolen*/) { return; } - if (p->mode == 0 || p->mode == 4) { + if (p->mode == 0 || p->mode == 1 || p->mode == 4) { /* Mode 0 is the only mode NOT to wait for the current counter to finish if you write another counter value * according to the Intel 8254 datasheet. * @@ -587,7 +643,7 @@ static void write_latch(Bitu port,Bitu val,Bitu /*iolen*/) { // this debug message will help development trace down cases where writing without a new mode // would incorrectly restart the counter instead of letting the current count complete before // writing a new one. - LOG(LOG_PIT,LOG_NORMAL)("WARNING: Writing counter %u in mode %u without writing port 43h not yet supported, will be handled as if new mode and reset of the cycle",(int)counter,(int)p->mode); + LOG(LOG_PIT,LOG_NORMAL)("WARNING: Writing counter %u in mode %u counter 0x%x without writing port 43h not yet supported, will be handled as if new mode and reset of the cycle",(int)counter,(int)p->mode,(int)p->cntr); } } @@ -630,7 +686,12 @@ static void write_latch(Bitu port,Bitu val,Bitu /*iolen*/) { if (p->mode == 0 || p->mode == 4) { if (counter == 0) { PIC_RemoveEvents(PIT0_Event); - PIC_DeActivateIRQ(0); + + counter_output(counter); + if(pit[counter].output) + PIC_ActivateIRQ(0); + else + PIC_DeActivateIRQ(0); } p->update_count = false; } @@ -765,11 +826,12 @@ static void write_p43(Bitu /*port*/,Bitu val,Bitu /*iolen*/) { if (latch == 0) { PIC_RemoveEvents(PIT0_Event); - if((mode != 0)&& (pit[latch].reltime() > pit[latch].delay)) { + + counter_output(latch); + if(pit[latch].output) PIC_ActivateIRQ(0); - } else { + else PIC_DeActivateIRQ(0); - } } pit[latch].new_mode = true; if (latch == (IS_PC98_ARCH ? 1 : 2)) { @@ -883,6 +945,7 @@ static IO_WriteHandleObject WriteHandler2[4]; void TIMER_BIOS_INIT_Configure() { PIC_RemoveEvents(PIT0_Event); PIC_DeActivateIRQ(0); + PIC_EdgeTrigger(0,true); /* Setup Timer 0 */ pit[0].output = true; diff --git a/src/hardware/vga.cpp b/src/hardware/vga.cpp index da9654d2b4d..dd58a6ed3f4 100644 --- a/src/hardware/vga.cpp +++ b/src/hardware/vga.cpp @@ -120,6 +120,7 @@ #include +#include "vga.h" #include "dosbox.h" #include "logging.h" #include "setup.h" @@ -131,6 +132,7 @@ #include "support.h" #include "setup.h" #include "timer.h" +#include "../ints/int10.h" #include "mem.h" #include "pci_bus.h" #include "util_units.h" @@ -153,6 +155,13 @@ #include #include +#define DOSBOX_INCLUDE +#include "iglib.h" + +void dosbox_integration_trigger_write_direct32(const uint32_t reg,const uint32_t val); +bool dosbox_int_push_save_state(void); +bool dosbox_int_pop_save_state(void); + #if defined(_MSC_VER) # pragma warning(disable:4244) /* const fmath::local::uint64_t to double possible loss of data */ #endif @@ -169,6 +178,7 @@ bool VGA_PITsync = false; unsigned int vbe_window_granularity = 0; unsigned int vbe_window_size = 0; +bool vbe_window_size_literal = false; /* current dosplay page (controlled by A4h) */ unsigned char* pc98_pgraph_current_display_page; @@ -177,10 +187,13 @@ unsigned char* pc98_pgraph_current_cpu_page; bool vga_8bit_dac = false; bool enable_vga_8bit_dac = true; +bool enable_vbe_pmode_if = true; bool ignore_sequencer_blanking = false; bool memio_complexity_optimization = true; bool vga_render_on_demand = false; // Render at vsync or specific changes to hardware instead of every scanline signed char vga_render_on_demand_user = -1; +bool vga_render_wait_for_changes = false; // Skip rendering entirely, even at vsync, unless anything changes +signed char vga_render_wait_for_changes_user = -1; bool pc98_crt_mode = false; // see port 6Ah command 40h/41h. // this boolean is the INVERSE of the bit. @@ -261,14 +274,20 @@ double vga_force_refresh_rate = -1; uint8_t CGAPal2[2] = {0,0}; uint8_t CGAPal4[4] = {0,0,0,0}; +void VGA_RenderOnDemandUpTo(void); + void page_flip_debug_notify() { - if (enable_page_flip_debugging_marker) + if (enable_page_flip_debugging_marker) { + if (vga_render_on_demand) VGA_RenderOnDemandUpTo(); vga_page_flip_occurred = true; + } } void vsync_poll_debug_notify() { - if (enable_vretrace_poll_debugging_marker) + if (enable_vretrace_poll_debugging_marker) { + if (vga_render_on_demand) VGA_RenderOnDemandUpTo(); vga_3da_polled = true; + } } void VGA_SetModeNow(VGAModes mode) { @@ -316,8 +335,39 @@ void VGA_DetermineMode_StandardVGA(void) { /* and EGA, the extra regs are not us } } +enum VGAModes VGA_DOSBoxIG_FmtToVGA(void) { + switch (vga.dosboxig.vidformat) { + case DBIGVF_NONE: + return M_CGA4; // which should be ignored + case DBIGVF_1BPP: + return M_CGA2; + case DBIGVF_4BPP: + return M_PACKED4; + case DBIGVF_8BPP: + return M_LIN8; + case DBIGVF_15BPP: + return M_LIN15; + case DBIGVF_16BPP: + return M_LIN16; + case DBIGVF_24BPP8: + return M_LIN24; + case DBIGVF_32BPP8: + return M_LIN32; + case DBIGVF_32BPP10: + return M_LIN32; + case DBIGVF_1BPP4PLANE: + return M_LIN4; + default: + break; + } + + return M_ERROR; +} + void VGA_DetermineMode(void) { - if (svga.determine_mode) + if (vga.dosboxig.svga) + VGA_SetMode(VGA_DOSBoxIG_FmtToVGA()); + else if (svga.determine_mode) svga.determine_mode(); else VGA_DetermineMode_StandardVGA(); @@ -350,7 +400,7 @@ void VGA_SetCGA2Table(uint8_t val0,uint8_t val1) { ((Bitu)total[(i >> 0u) & 1u] << 0u ) | ((Bitu)total[(i >> 1u) & 1u] << 8u ) | ((Bitu)total[(i >> 2u) & 1u] << 16u ) | ((Bitu)total[(i >> 3u) & 1u] << 24u ); #else - ((Bitu)total[(i >> 3u) & 1u] << 0u ) | ((Bitu)total[(i >> 2u) & 1u] << 8u ) | + ((Bitu)total[(i >> 3u) & 1u] << 0u ) | ((Bitu)total[(i >> 2u) & 1u] << 8u ) | ((Bitu)total[(i >> 1u) & 1u] << 16u ) | ((Bitu)total[(i >> 0u) & 1u] << 24u ); #endif } @@ -844,10 +894,12 @@ void VGA_Reset(Section*) { vga_8bit_dac = false; enable_vga_8bit_dac = section->Get_bool("enable 8-bit dac"); + enable_vbe_pmode_if = section->Get_bool("vbe protected mode interface"); ignore_sequencer_blanking = section->Get_bool("ignore sequencer blanking"); memio_complexity_optimization = section->Get_bool("memory io optimization 1"); vga_render_on_demand = false; + vga_render_wait_for_changes = false; { const char *str = section->Get_string("scanline render on demand"); @@ -859,6 +911,16 @@ void VGA_Reset(Section*) { vga_render_on_demand_user = -1; } + { + const char *str = section->Get_string("skip render if nothing changed"); + if (!strcmp(str,"true") || !strcmp(str,"1")) + vga_render_wait_for_changes_user = 1; + else if (!strcmp(str,"false") || !strcmp(str,"0")) + vga_render_wait_for_changes_user = 0; + else + vga_render_wait_for_changes_user = -1; + } + if (memio_complexity_optimization) LOG_MSG("Memory I/O complexity optimization enabled aka option 'memory io optimization 1'. If the game or demo is unable to draw to the screen properly, set the option to false."); @@ -867,6 +929,9 @@ void VGA_Reset(Section*) { else if (vga_render_on_demand_user < 0) LOG_MSG("The 'scanline render on demand' option is available and may provide a modest boost in video render performance if set to true."); + if (vga_render_wait_for_changes_user > 0) + LOG_MSG("The option to skip rendering entirely if nothing changes is enabled."); + vga_memio_lfb_delay = section->Get_bool("lfb vmemdelay"); vga_memio_delay_ns = section->Get_int("vmemdelay"); @@ -907,14 +972,26 @@ void VGA_Reset(Section*) { LOG(LOG_VGA,LOG_DEBUG)("VGA memory I/O delay %uns",vga_memio_delay_ns); + vbe_window_size_literal = false; vbe_window_granularity = (unsigned int)section->Get_int("vbe window granularity") << 10u; /* KB to bytes */ vbe_window_size = (unsigned int)section->Get_int("vbe window size") << 10u; /* KB to bytes */ - if (vbe_window_granularity != 0 && !bitop::ispowerof2(vbe_window_granularity)) + if (vbe_window_size == 0) { + vbe_window_size = 0x10000; // 64KB + vbe_window_size_literal = true; + } + if (vbe_window_granularity == 0) { + if (svgaCard == SVGA_ParadisePVGA1A) + vbe_window_granularity = 0x1000; // 4KB + else + vbe_window_granularity = 0x10000; // 64KB + } + + if (!bitop::ispowerof2(vbe_window_granularity)) LOG(LOG_VGA,LOG_WARN)("User specified VBE window granularity is not a power of 2. May break some programs."); - if (vbe_window_size != 0 && !bitop::ispowerof2(vbe_window_size)) + if (!bitop::ispowerof2(vbe_window_size)) LOG(LOG_VGA,LOG_WARN)("User specified VBE window size is not a power of 2. May break some programs."); - if (vbe_window_size != 0 && vbe_window_granularity != 0 && vbe_window_size < vbe_window_granularity) + if (vbe_window_size < vbe_window_granularity) LOG(LOG_VGA,LOG_WARN)("VBE window size is less than window granularity, which prevents full access to video memory and may break some programs."); /* mainline compatible vmemsize (in MB) @@ -954,6 +1031,24 @@ void VGA_Reset(Section*) { } } + /* traditional VGA limits including older SVGA cards like Tseng */ + if (IS_VGA_ARCH) { + vga.max_svga_width = 1024; + vga.max_svga_height = 1024; + } + else if (IS_EGA_ARCH) {//GUESS + vga.max_svga_width = 1024; + vga.max_svga_height = 512; + } + else if (IS_PC98_ARCH) {//GUESS + vga.max_svga_width = 1024; + vga.max_svga_height = 512; + } + else { + vga.max_svga_width = 1024; + vga.max_svga_height = 512; + } + /* sanity check according to adapter type. * FIXME: Again it was foolish for DOSBox to standardize on machine= * for selecting machine type AND video card. */ @@ -1012,18 +1107,6 @@ void VGA_Reset(Section*) { if (IS_EGA_ARCH && vga.mem.memsize < _KB_bytes(128)) LOG_MSG("WARNING: EGA 64KB emulation is very experimental and not well supported"); - /* If video memory is limited by bank switching, then reduce video memory */ - if (vbe_window_granularity != 0 && !IS_PC98_ARCH) { - const uint32_t sz = GetReportedVideoMemorySize(); - - LOG(LOG_VGA,LOG_NORMAL)("Video RAM size %uKB exceeds maximum possible %uKB given VBE window granularity, reducing", - vga.mem.memsize>>10,(unsigned int)(sz>>10ul)); - - /* reduce by half, until video memory is reported or larger but not more than 2x */ - while (vga.mem.memsize > _KB_bytes(512) && (vga.mem.memsize/2ul) >= sz) - vga.mem.memsize /= 2u; - } - // prepare for transition if (want_fm_towns) { if (vga.mem.memsize < _KB_bytes(640)) vga.mem.memsize = _KB_bytes(640); /* "640KB of RAM, 512KB VRAM and 128KB sprite RAM" */ @@ -1032,10 +1115,29 @@ void VGA_Reset(Section*) { if (!IS_PC98_ARCH) SVGA_Setup_Driver(); // svga video memory size is set here, possibly over-riding the user's selection + // By default, VBE reported memory size is the same as actual memory size + vga.mem.vbe_memsize = vga.mem.memsize; + + // Allow the user to limit what is reported through the VBE in case of DOS programs that cannot handle too much video memory. + // Looking at you, SciTech VBETEST.EXE from 1994. + { + int sz_m = section->Get_int("vbememsize"); + int sz_k = section->Get_int("vbememsizekb"); + uint32_t b = _MB_bytes((unsigned int)sz_m) + _KB_bytes((unsigned int)sz_k); + /* does not need to be a power of 2, only larger than 256KB, and less than or equal to video memory size */ + if (b != 0) { + if (b > vga.mem.memsize) b = vga.mem.memsize; + if (b < _KB_bytes(256u)) b = _KB_bytes(256u); + vga.mem.vbe_memsize = b; + } + } + // NTS: This is WHY the memory size must be a power of 2 - vga.mem.memmask = vga.mem.memsize - 1u; + vga.mem.memmask = bitop::rounduppow2mask(vga.mem.memsize - 1u); - LOG(LOG_VGA,LOG_NORMAL)("Video RAM: %uKB",vga.mem.memsize>>10); + LOG(LOG_VGA,LOG_NORMAL)("Video RAM: %uKB (mask 0x%x)",vga.mem.memsize>>10,(unsigned int)vga.mem.memmask); + LOG(LOG_VGA,LOG_DEBUG)("VBE bios will report %uKB of video memory",vga.mem.vbe_memsize>>10); + LOG(LOG_VGA,LOG_DEBUG)("Maximum video resolution supported by card: %ux%u",vga.max_svga_width,vga.max_svga_height); // TODO: If S3 emulation, and linear framebuffer bumps up against the CPU memalias limits, // trim Video RAM to fit (within reasonable limits) or else E_Exit() to let the user @@ -1055,8 +1157,13 @@ void VGA_Reset(Section*) { VGA_SetupXGA(); VGA_SetClock(0,CLK_25); VGA_SetClock(1,CLK_28); + /* Generate tables */ - VGA_SetCGA2Table(0,1); + if (machine == MCH_HERC && hercCard < HERC_InColor) + VGA_SetCGA2Table(0,7); /* make graphics mode use colors 0 and 7 so hercules palette selection works */ + else + VGA_SetCGA2Table(0,1); + VGA_SetCGA4Table(0,1,2,3); if (machine == MCH_HERC || machine == MCH_MDA) { @@ -1418,7 +1525,6 @@ void VGA_Init() { vga.tandy.draw_base = NULL; vga.tandy.mem_base = NULL; LOG(LOG_MISC,LOG_DEBUG)("Initializing VGA"); - LOG(LOG_MISC,LOG_DEBUG)("Render scaler maximum resolution is %u x %u",SCALER_MAXWIDTH,SCALER_MAXHEIGHT); /* the purpose of this is so that, if everything is crammed up at the top to make room for system RAM, the S3 and 3Dfx do not conflict */ if (IS_VGA_ARCH && svgaCard != SVGA_None) @@ -1710,6 +1816,169 @@ void SVGA_Setup_JEGA(void) { phys_writeb(rom_base + 0x40 * 512 - 18 + 3, 'A'); } +extern VideoModeBlock* CurMode; + +void FinishSetMode_DOSBoxIG(Bitu /*crtc_base*/, VGA_ModeExtraData* modeData) { + uint32_t htadd = CurMode->htotal - CurMode->hdispend, vtadd = CurMode->vtotal - CurMode->vdispend; + uint32_t fmtc = 0,cwidth = (CurMode->pitch != 0) ? CurMode->pitch : CurMode->swidth; + uint32_t width = CurMode->swidth,height = CurMode->sheight; + uint32_t refresh = (uint32_t)(70.09 * 0x10000); + uint8_t hscale = 0,vscale = 0; + uint32_t darctl = 0; + uint32_t ctl = 0; + + /* 16-color planar modes and standard VGA modes use standard VGA emulation */ + if (CurMode->type == M_ERROR || CurMode->type == M_TEXT || modeData->modeNo <= 0x13) { + /* switch off Integration Graphics */ + dosbox_int_push_save_state(); + + if (width > 640 || height > 480) { + ctl |= DOSBOX_ID_REG_VGAIG_CTL_OVERRIDE_REFRESH; + vga.config.compatible_chain4 = false; /* or else >800x600 16-color planar modes will not work properly */ + vga.config.line_compare=0x7FFu; + } + else { + vga.config.line_compare=0x3FFu; + } + + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_CTL,0); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_REFRESHRATE,refresh); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_BANKWINDOW,0); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_CTL,ctl); + + dosbox_int_pop_save_state(); + + /* VGA draw code still uses S3 extended horz/vert regs so put it there so >800x600 modes work correctly */ + vga.s3.ex_hor_overflow=(uint8_t)modeData->hor_overflow; + vga.s3.ex_ver_overflow=(uint8_t)modeData->ver_overflow; + vga.config.scan_len=modeData->offset; + return; + } + + htadd *= 8u; + vga.config.line_compare=0x7FFu; + vga.config.compatible_chain4 = false; /* or else bank switching support does not work properly */ + ctl = DOSBOX_ID_REG_VGAIG_CTL_OVERRIDE|DOSBOX_ID_REG_VGAIG_CTL_VGAREG_LOCKOUT|DOSBOX_ID_REG_VGAIG_CTL_ACPAL_BYPASS|DOSBOX_ID_REG_VGAIG_CTL_DAC_LOCKOUT; + switch (CurMode->type) { + case M_CGA2: + fmtc |= DOSBOX_ID_REG_VGAIG_FMT_1BPP; + fmtc |= (uint16_t)(((cwidth+15U)/8U)&(~1U)); // must match code in VESA BIOS emulation + + // must be able to change the palette with 3C6-3C9h + ctl &= ~DOSBOX_ID_REG_VGAIG_CTL_DAC_LOCKOUT; + break; + case M_LIN4: + case M_EGA: + fmtc |= DOSBOX_ID_REG_VGAIG_FMT_1BPP4PLANE; + fmtc |= (uint16_t)(((cwidth+15U)/8U)&(~1U)); // must match code in VESA BIOS emulation + + // VGA registers are REQUIRED in order to use planar modes properly. + // DOS games expect the 16-color planar VBE modes to remap colors through the AC palette + // such that colors 0-15 become colors 0x00-0x07 and 0x38-0x3F, same as EGA/VGA 16-color and EGA/VGA text mode. + // must be able to change the palette with 3C6-3C9h + ctl &= ~(DOSBOX_ID_REG_VGAIG_CTL_VGAREG_LOCKOUT|DOSBOX_ID_REG_VGAIG_CTL_ACPAL_BYPASS|DOSBOX_ID_REG_VGAIG_CTL_DAC_LOCKOUT); + break; + case M_PACKED4: + fmtc |= DOSBOX_ID_REG_VGAIG_FMT_4BPP; + fmtc |= (uint16_t)((((cwidth+15U)/8U)&(~1U))*4); // must match code in VESA BIOS emulation + + // must be able to change the palette with 3C6-3C9h + ctl &= ~DOSBOX_ID_REG_VGAIG_CTL_DAC_LOCKOUT; + break; + case M_VGA: + case M_LIN8: + fmtc |= DOSBOX_ID_REG_VGAIG_FMT_8BPP; + fmtc |= cwidth; + + // must be able to change the palette with 3C6-3C9h + ctl &= ~DOSBOX_ID_REG_VGAIG_CTL_DAC_LOCKOUT; + break; + case M_LIN15: + fmtc |= DOSBOX_ID_REG_VGAIG_FMT_15BPP; + fmtc |= cwidth * 2u; + break; + case M_LIN16: + fmtc |= DOSBOX_ID_REG_VGAIG_FMT_16BPP; + fmtc |= cwidth * 2u; + break; + case M_LIN24: + fmtc |= DOSBOX_ID_REG_VGAIG_FMT_24BPP8; + fmtc |= cwidth * 3u; + break; + case M_LIN32: + fmtc |= DOSBOX_ID_REG_VGAIG_FMT_32BPP8; + fmtc |= cwidth * 4u; + break; + default: + fmtc |= DOSBOX_ID_REG_VGAIG_FMT_NONE; + break; + } + + /* for specific video modes, make sure to display it correctly. + * Most of the time the mode is 4:3. + * Some modes like 640x400 and 1280x1024 must be slightly distorted to display at the intended 4:3. + * For everything else, leave the aspect ratio setting as zero, the DOSBox IG handling will assume a square 1:1 pixel aspect ratio. */ + if (height >= 480) { + double ar = (double)width / height; + + if (ar >= 1.65) /* NTS: 640x400 mode 0x100 would be mistaken as 16:9 otherwise (ar=1.6) */ + darctl = (9 << 16u) | 16u; /* 16:9 */ + else /* including modes such as 320x480 */ + darctl = (3 << 16u) | 4u; /* 4:3 */ + } + else { + /* 640x400, 640x350, etc. are always 4:3 */ + darctl = (3 << 16u) | 4u; /* 4:3 */ + } + + /* pixel doubling */ + while ((width * (1+hscale)) < 640) + hscale++; + while ((height * (1+vscale)) < 400) + vscale++; + + dosbox_int_push_save_state(); + + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_FMT_BYTESPERSCANLINE,fmtc); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_HVTOTALADD,(vtadd << 16u) | htadd); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_DISPLAYSIZE,(height << 16u) | width); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_HVPELSCALE,(vscale << 24u) | (hscale << 16u)); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_REFRESHRATE,refresh); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_ASPECTRATIO,darctl); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_DISPLAYOFFSET,0); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_BANKWINDOW,0); + + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_CTL,ctl); + + dosbox_int_pop_save_state(); + + /* INT 10h at this point still has the screen blanked, having not yet written bit 5 of the attr control index. + * It won't be able to with our lockout in effect, do it now directly. + * 2026/01/07: We could leave it in the blanking state, the VGA draw code ignores this bit in DOSBox IG SVGA mode now, but, we won't */ + vga.attr.disabled = 0; + + LOG(LOG_MISC,LOG_DEBUG)("DOSBox Integration Device is active"); +} + +bool SVGA_S3_AcceptsMode(Bitu mode); + +void SVGA_Setup_DOSBoxIG(void) { + if (vga.mem.memsize == 0) + vga.mem.memsize = 512*1024; + if (vga.mem.memsize < (256*1024)) + vga.mem.memsize = (256*1024); + if (vga.mem.memsize > (128*1024*1024)) + vga.mem.memsize = (128*1024*1024); + + svga.set_video_mode = &FinishSetMode_DOSBoxIG; + svga.accepts_mode = &SVGA_S3_AcceptsMode; // eh, borrow the S3 function + + vga.max_svga_width = 4096; + vga.max_svga_height = 4096; + + PCI_AddSVGADOSBoxIG_Device(); +} + void SVGA_Setup_Driver(void) { memset(&svga, 0, sizeof(SVGA_Driver)); @@ -1729,6 +1998,9 @@ void SVGA_Setup_Driver(void) { case SVGA_ATI: SVGA_Setup_ATI(); break; + case SVGA_DOSBoxIG: + SVGA_Setup_DOSBoxIG(); + break; default: if (IS_JEGA_ARCH) SVGA_Setup_JEGA(); break; diff --git a/src/hardware/vga_attr.cpp b/src/hardware/vga_attr.cpp index 83c85541157..0fbe14e58a8 100644 --- a/src/hardware/vga_attr.cpp +++ b/src/hardware/vga_attr.cpp @@ -192,6 +192,9 @@ bool J3_IsCga4Dcga(); void write_p3c0(Bitu /*port*/,Bitu val,Bitu iolen) { unsigned int cmplx = 0; + if (vga.dosboxig.vga_reg_lockout) + return; + if (!vga.internal.attrindex) { /* Render on Demand problem: * @@ -205,11 +208,12 @@ void write_p3c0(Bitu /*port*/,Bitu val,Bitu iolen) { * very timing dependent tricks, but will render most DOS games with better performance * which for most casual users of DOSBox and DOSBox-X is just fine. Just don't expect * this performance enhancement to handle all the tricks of the Demoscene. --J.C. */ - if (vga_render_on_demand && !attr(disabled)/*screen not yet disabled*/) VGA_RenderOnDemandUpTo(); + if (vga_render_on_demand && !(attr(disabled)&1)/*screen not yet disabled*/) VGA_RenderOnDemandUpTo(); attr(index)=val & 0x1F; vga.internal.attrindex=true; if (val & 0x20) attr(disabled) &= ~1; else attr(disabled) |= 1; + if (vga_render_on_demand && !(attr(disabled)&1)/*screen not yet disabled*/) VGA_RenderOnDemandUpTo(); /* 0-4 Address of data register to write to port 3C0h or read from port 3C1h 5 If set screen output is enabled and the palette can not be modified, @@ -228,7 +232,7 @@ void write_p3c0(Bitu /*port*/,Bitu val,Bitu iolen) { */ return; } else { - if (vga_render_on_demand && !attr(disabled)/*screen not disabled*/) VGA_RenderOnDemandUpTo(); + if (vga_render_on_demand && !(attr(disabled)&1)/*screen not disabled*/) VGA_RenderOnDemandUpTo(); vga.internal.attrindex=false; switch (attr(index)) { /* Palette */ @@ -265,56 +269,61 @@ void write_p3c0(Bitu /*port*/,Bitu val,Bitu iolen) { */ break; case 0x10: { /* Mode Control Register */ - if (!IS_VGA_ARCH) val&=0x1f; // not really correct, but should do it - Bitu difference = attr(mode_control)^val; - attr(mode_control)=(uint8_t)val; - - if (difference & 0x80) { - for (uint8_t i=0;i<0x10;i++) - VGA_ATTR_SetPalette(i,vga.attr.palette[i]); - } - if (difference & 0x08) - VGA_SetBlinking(val & 0x8); - - if (difference & 0x41) { - VGA_DetermineMode(); - cmplx |= VGA_ComplexityCheck_ODDEVEN(); - } - if ((difference & 0x40) && (vga.mode == M_VGA)) // 8BIT changes in 256-color mode must be handled - VGA_StartResize(50); - - if (difference & 0x04) { - // recompute the panning value - if(vga.mode==M_TEXT) { - uint8_t pan_reg = attr(horizontal_pel_panning); - if (pan_reg > 7) - vga.config.pel_panning=0; - else if (val&0x4) // 9-dot wide characters - vga.config.pel_panning=(uint8_t)(pan_reg+1); - else // 8-dot characters - vga.config.pel_panning=(uint8_t)pan_reg; - } - } - - if (cmplx != 0) VGA_SetupHandlers(); - - /* - 0 Graphics mode if set, Alphanumeric mode else. - 1 Monochrome mode if set, color mode else. - 2 9-bit wide characters if set. - The 9th bit of characters C0h-DFh will be the same as - the 8th bit. Otherwise it will be the background color. - 3 If set Attribute bit 7 is blinking, else high intensity. - 5 If set the PEL panning register (3C0h index 13h) is temporarily set - to 0 from when the line compare causes a wrap around until the next - vertical retrace when the register is automatically reloaded with - the old value, else the PEL panning register ignores line compares. - 6 If set pixels are 8 bits wide. Used in 256 color modes. - 7 If set bit 4-5 of the index into the DAC table are taken from port - 3C0h index 14h bit 0-1, else the bits in the palette register are - used. - */ - break; + if (!IS_VGA_ARCH) val&=0x1f; // not really correct, but should do it + Bitu difference = attr(mode_control)^val; + attr(mode_control)=(uint8_t)val; + + if (difference & 0x80) { + vga.draw.must_complete_frame = true; + for (uint8_t i=0;i<0x10;i++) + VGA_ATTR_SetPalette(i,vga.attr.palette[i]); + } + if (difference & 0x08) { + vga.draw.must_complete_frame = true; + VGA_SetBlinking(val & 0x8); + } + + if (difference & 0x41) { + VGA_DetermineMode(); + cmplx |= VGA_ComplexityCheck_ODDEVEN(); + } + if ((difference & 0x40) && (vga.mode == M_VGA)) // 8BIT changes in 256-color mode must be handled + VGA_StartResize(50); + + if (difference & 0x04) { + vga.draw.must_complete_frame = true; + // recompute the panning value + if(vga.mode==M_TEXT) { + uint8_t pan_reg = attr(horizontal_pel_panning); + if (pan_reg > 7) + vga.config.pel_panning=0; + else if (val&0x4) // 9-dot wide characters + vga.config.pel_panning=(uint8_t)(pan_reg+1); + else // 8-dot characters + vga.config.pel_panning=(uint8_t)pan_reg; + vga.draw.must_draw_again = true; // takes effect NEXT frame, not current frame! + } + } + + if (cmplx != 0) VGA_SetupHandlers(); + + /* + 0 Graphics mode if set, Alphanumeric mode else. + 1 Monochrome mode if set, color mode else. + 2 9-bit wide characters if set. + The 9th bit of characters C0h-DFh will be the same as + the 8th bit. Otherwise it will be the background color. + 3 If set Attribute bit 7 is blinking, else high intensity. + 5 If set the PEL panning register (3C0h index 13h) is temporarily set + to 0 from when the line compare causes a wrap around until the next + vertical retrace when the register is automatically reloaded with + the old value, else the PEL panning register ignores line compares. + 6 If set pixels are 8 bits wide. Used in 256 color modes. + 7 If set bit 4-5 of the index into the DAC table are taken from port + 3C0h index 14h bit 0-1, else the bits in the palette register are + used. + */ + break; } case 0x11: /* Overscan Color Register */ attr(overscan_color)=(uint8_t)val; @@ -342,6 +351,8 @@ void write_p3c0(Bitu /*port*/,Bitu val,Bitu iolen) { */ break; case 0x13: /* Horizontal PEL Panning Register */ + vga.draw.must_complete_frame = true; + vga.draw.must_draw_again = true; // takes effect NEXT frame, not current frame! attr(horizontal_pel_panning)=val & 0xF; switch (vga.mode) { case M_TEXT: diff --git a/src/hardware/vga_crtc.cpp b/src/hardware/vga_crtc.cpp index 872e9c478ae..800bbc92cdc 100644 --- a/src/hardware/vga_crtc.cpp +++ b/src/hardware/vga_crtc.cpp @@ -79,6 +79,9 @@ Bitu vga_read_p3d4(Bitu port,Bitu iolen) { } void vga_write_p3d5(Bitu port,Bitu val,Bitu iolen) { + if (vga.dosboxig.vga_reg_lockout) + return; + (void)port;//UNUSED // if((crtc(index)!=0xe)&&(crtc(index)!=0xf)) // LOG_MSG("CRTC w #%2x val %2x",crtc(index),val); @@ -242,18 +245,21 @@ void vga_write_p3d5(Bitu port,Bitu val,Bitu iolen) { */ break; case 0x0C: /* Start Address High Register */ + vga.draw.must_draw_again = true; // takes effect NEXT frame, not current frame! crtc(start_address_high)=(uint8_t)val; vga.config.display_start=(vga.config.display_start & 0xFF00FF)| (val << 8); /* 0-7 Upper 8 bits of the start address of the display buffer */ page_flip_debug_notify(); break; case 0x0D: /* Start Address Low Register */ + vga.draw.must_draw_again = true; // takes effect NEXT frame, not current frame! crtc(start_address_low)=(uint8_t)val; vga.config.display_start=(vga.config.display_start & 0xFFFF00)| val; /* 0-7 Lower 8 bits of the start address of the display buffer */ page_flip_debug_notify(); break; case 0x0E: /*Cursor Location High Register */ + if (vga_render_on_demand) VGA_RenderOnDemandUpTo(); crtc(cursor_location_high)=(uint8_t)val; vga.config.cursor_start&=0xff00ff; vga.config.cursor_start|=val << 8; @@ -262,7 +268,7 @@ void vga_write_p3d5(Bitu port,Bitu val,Bitu iolen) { * color index [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/Video/VGA/SVGA/S3%20Graphics%2c%20Ltd/S3%2086C928%20GUI%20Accelerator%20%281992%2d09%29%2epdf] */ break; case 0x0F: /* Cursor Location Low Register */ - //TODO update cursor on screen + if (vga_render_on_demand) VGA_RenderOnDemandUpTo(); crtc(cursor_location_low)=(uint8_t)val; vga.config.cursor_start&=0xffff00; vga.config.cursor_start|=val; @@ -331,6 +337,7 @@ void vga_write_p3d5(Bitu port,Bitu val,Bitu iolen) { */ break; case 0x14: /* Underline Location Register */ + if (vga_render_on_demand) VGA_RenderOnDemandUpTo(); crtc(underline_location)=(uint8_t)val; VGA_CheckAddrShift(); VGA_CheckScanLength(); @@ -366,14 +373,9 @@ void vga_write_p3d5(Bitu port,Bitu val,Bitu iolen) { if (vga_render_on_demand) VGA_RenderOnDemandUpTo(); crtc(mode_control)=(uint8_t)val; vga.tandy.line_mask = (~val) & 3u; - - if ( vga.tandy.line_mask ) { - vga.tandy.line_shift = 13u; - vga.tandy.addr_mask = (1u << 13u) - 1u; - } else { - vga.tandy.addr_mask = ~0u; - vga.tandy.line_shift = 0; - } + vga.tandy.line_shift = vga.tandy.line_mask ? 13u : 0u; + vga.tandy.addr_mask = ~0u; + vga.tandy.addr_mask &= ~(vga.tandy.line_mask << 13u); VGA_CheckAddrShift(); VGA_CheckScanLength(); diff --git a/src/hardware/vga_dac.cpp b/src/hardware/vga_dac.cpp index 89c82740d15..29cb69dbc0c 100644 --- a/src/hardware/vga_dac.cpp +++ b/src/hardware/vga_dac.cpp @@ -144,7 +144,13 @@ void VGA_DAC_UpdateColor( Bitu index ) { Bitu maskIndex; if (IS_VGA_ARCH) { - if (vga.mode == M_VGA || vga.mode == M_LIN8) { + if (vga.dosboxig.svga) { + if ((vga.mode == M_EGA || vga.mode == M_LIN4) && !vga.dosboxig.vga_acpal_bypass) + maskIndex = vga.dac.combine[index&0xF] & vga.dac.pel_mask; + else + maskIndex = index; + } + else if (vga.mode == M_VGA || vga.mode == M_LIN8) { /* WARNING: This code assumes index < 256 */ switch (VGA_AC_remap) { case AC_4x4: @@ -211,6 +217,10 @@ void VGA_DAC_DeferredUpdateColorPalette() { void write_p3c6(Bitu port,Bitu val,Bitu iolen) { (void)iolen;//UNUSED (void)port;//UNUSED + + if (vga.dosboxig.vga_dac_lockout) + return; + if((IS_VGA_ARCH) && (vga.dac.hidac_counter>3)) { vga.dac.reg02=(uint8_t)val; vga.dac.hidac_counter=0; @@ -243,6 +253,10 @@ Bitu read_p3c6(Bitu port,Bitu iolen) { void write_p3c7(Bitu port,Bitu val,Bitu iolen) { (void)iolen;//UNUSED (void)port;//UNUSED + + if (vga.dosboxig.vga_dac_lockout) + return; + vga.dac.hidac_counter=0; vga.dac.pel_index=0; vga.dac.state=DAC_READ; @@ -261,6 +275,10 @@ Bitu read_p3c7(Bitu port,Bitu iolen) { void write_p3c8(Bitu port,Bitu val,Bitu iolen) { (void)iolen;//UNUSED (void)port;//UNUSED + + if (vga.dosboxig.vga_dac_lockout) + return; + vga.dac.hidac_counter=0; vga.dac.pel_index=0; vga.dac.state=DAC_WRITE; @@ -284,6 +302,9 @@ static unsigned char tmp_dac[3] = {0,0,0}; void write_p3c9(Bitu port,Bitu val,Bitu iolen) { bool update = false; + if (vga.dosboxig.vga_dac_lockout) + return; + (void)iolen;//UNUSED (void)port;//UNUSED vga.dac.hidac_counter=0; diff --git a/src/hardware/vga_draw.cpp b/src/hardware/vga_draw.cpp index d7376ff2ec4..7efd6314bb2 100644 --- a/src/hardware/vga_draw.cpp +++ b/src/hardware/vga_draw.cpp @@ -54,6 +54,19 @@ #include "../libs/zmbv/zmbv.h" #endif +#include "../output/output_direct3d11.h" +/* #include "../output/output_metal.h" */ // Includes Objective-C code +#if C_METAL +void metal_init(); +void OUTPUT_Metal_Select(); +Bitu OUTPUT_Metal_GetBestMode(Bitu flags); +bool OUTPUT_Metal_StartUpdate(uint8_t*& pixels, Bitu& pitch); +void OUTPUT_Metal_EndUpdate(const uint16_t* changedLines); +Bitu OUTPUT_Metal_SetSize(void); +void OUTPUT_Metal_Shutdown(); +void OUTPUT_Metal_CheckSourceResolution(); +#endif + /* do not issue CPU-side I/O here -- this code emulates functions that the GDC itself carries out, not on the CPU */ #include "cpu_io_is_forbidden.h" @@ -72,6 +85,8 @@ static bool is_vga_rendering_on_demand = false; extern bool vga_render_on_demand; extern signed char vga_render_on_demand_user; +extern bool vga_render_wait_for_changes; +extern signed char vga_render_wait_for_changes_user; extern bool vga_ignore_extended_memory_bit; /* S3 streams processor state. @@ -314,11 +329,140 @@ typedef uint8_t * (* VGA_Line_Handler)(Bitu vidstart, Bitu line); static VGA_Line_Handler VGA_DrawLine; static VGA_RawLine_Handler VGA_DrawRawLine; -static uint8_t TempLine[SCALER_MAXWIDTH * 4 + 256]; +static uint8_t *TempLine = NULL; +static unsigned int TempLineSize = 0; static float hretrace_fx_avg = 0; +bool TempLineAlloc(unsigned int w) { + if (TempLine) return false; + + TempLineSize = w * 4 + 1024; + if ((TempLine=(uint8_t*)calloc(1,TempLineSize)) == NULL) { + TempLineSize = 0; + return false; + } + + return true; +} + +void TempLineFree(void) { + if (TempLine) free(TempLine); + TempLine = NULL; +} + void pc98_update_display_page_ptr(void); +static uint8_t * VGA_Draw_DOSBOXIG_None(Bitu vidstart, Bitu line) { // renders to 8bpp + (void)vidstart; + (void)line; + + memset(TempLine,0,vga.draw.width); + return TempLine; +} + +static uint8_t * VGA_Draw_DOSBOXIG_1bpp(Bitu vidstart, Bitu line) { // renders to 8bpp + unsigned int xmax = vga.draw.width + (vga.draw.panning & 7u); + uint32_t *temp = (uint32_t*)TempLine; + unsigned char t; + unsigned int x; + + (void)line; + + for (x=0;x < xmax;x += 8,vidstart++) { + t = vga.mem.linear[vidstart & vga.draw.linear_mask]; + temp[x+7] = vga.dac.xlat32[t&1u]; t >>= 1u; + temp[x+6] = vga.dac.xlat32[t&1u]; t >>= 1u; + temp[x+5] = vga.dac.xlat32[t&1u]; t >>= 1u; + temp[x+4] = vga.dac.xlat32[t&1u]; t >>= 1u; + temp[x+3] = vga.dac.xlat32[t&1u]; t >>= 1u; + temp[x+2] = vga.dac.xlat32[t&1u]; t >>= 1u; + temp[x+1] = vga.dac.xlat32[t&1u]; t >>= 1u; + temp[x+0] = vga.dac.xlat32[t&1u]; + } + + return (uint8_t*)(temp+(vga.draw.panning & 7u)); +} + +static uint8_t * VGA_Draw_DOSBOXIG_4bpp(Bitu vidstart, Bitu line) { // renders to 32bpp + unsigned int xmax = vga.draw.width + (vga.draw.panning & 1u); + uint32_t *temp = (uint32_t*)TempLine; + uint32_t ofs = (uint32_t)vidstart; + unsigned int x; + + (void)line; + + for (x=0;x < xmax;x += 2,ofs++) { + const uint8_t b = vga.mem.linear[ofs & vga.draw.linear_mask]; + temp[x+0] = vga.dac.xlat32[b >> 4u]; + temp[x+1] = vga.dac.xlat32[b & 0xFu]; + } + + return (uint8_t*)(temp+(vga.draw.panning & 1u)); +} + +static uint8_t * VGA_Draw_DOSBOXIG_8bpp(Bitu vidstart, Bitu line) { // renders to 32bpp + uint32_t *temp = (uint32_t*)TempLine; + uint32_t ofs = (uint32_t)vidstart; + unsigned int x; + + (void)line; + + for (x=0;x < vga.draw.width;x++,ofs++) + temp[x] = vga.dac.xlat32[vga.mem.linear[ofs & vga.draw.linear_mask]]; + + return TempLine; +} + +static uint8_t * VGA_Draw_DOSBOXIG_16bpp(Bitu vidstart, Bitu line) { // renders to 15/16bpp + uint16_t *temp = (uint16_t*)TempLine; + uint32_t ofs = (uint32_t)vidstart & ~1u; + unsigned int x; + + (void)line; + + for (x=0;x < vga.draw.width;x++,ofs += 2u) + temp[x] = *((uint16_t*)(&vga.mem.linear[ofs & vga.draw.linear_mask])); + + return TempLine; +} + +static uint8_t * VGA_Draw_DOSBOXIG_24bpp(Bitu vidstart, Bitu line) { // renders to 32bpp + uint32_t ofs = (uint32_t)vidstart; + unsigned int x; + + (void)line; + + for (x=0;x < (vga.draw.width*4u);x += 4,ofs += 3u) { + TempLine[x+0] = *((uint16_t*)(&vga.mem.linear[(ofs+0) & vga.draw.linear_mask])); + TempLine[x+1] = *((uint16_t*)(&vga.mem.linear[(ofs+1) & vga.draw.linear_mask])); + TempLine[x+2] = *((uint16_t*)(&vga.mem.linear[(ofs+2) & vga.draw.linear_mask])); + TempLine[x+3] = 0; + } + + return TempLine; +} + +static uint8_t * VGA_Draw_DOSBOXIG_32bpp(Bitu vidstart, Bitu line) { // renders to 32bpp + uint32_t *temp = (uint32_t*)TempLine; + uint32_t ofs = (uint32_t)vidstart & ~3u; + unsigned int x; + + (void)line; + + for (x=0;x < vga.draw.width;x++,ofs += 4u) + temp[x] = *((uint32_t*)(&vga.mem.linear[ofs & vga.draw.linear_mask])); + + return TempLine; +} + +static uint8_t * VGA_Draw_DOSBOXIG_32bpp10(Bitu vidstart, Bitu line) { // renders to 32bpp10 + (void)vidstart; + (void)line; + + memset(TempLine,0,vga.draw.width*4u); + return TempLine; +} + static uint8_t * VGA_Draw_AMS_4BPP_Line(Bitu vidstart, Bitu line) { const uint8_t *base = vga.tandy.draw_base + ((line & vga.tandy.line_mask) << vga.tandy.line_shift); const uint8_t *lbase; @@ -853,14 +997,18 @@ static uint8_t * VGA_Draw_Linear_Line(Bitu vidstart, Bitu /*line*/) { return ret; } -static void VGA_RawDraw_Xlat32_VGA_CRTC_bmode_Line(uint8_t *dst,Bitu vidstart, Bitu /*line*/) { +static void VGA_RawDraw_Xlat32_VGA_CRTC_bmode_Line(uint8_t *dst,Bitu vidstart, Bitu line) { + if (vga.crtc.maximum_scan_line & 0x80) line >>= 1u; /* CGA modes (and 200-line EGA) have the VGA doublescan bit set. We need to compensate to properly map lines. */ + const uint8_t *vram = vga.draw.linear_base + (((line & vga.tandy.line_mask) << (2+vga.tandy.line_shift)) & vga.draw.linear_mask); + const Bitu vidmask = vga.tandy.line_mask ? ((vga.tandy.addr_mask << 2) | 3) : vga.draw.linear_mask; + const Bitu count = (vga.draw.width>>(2/*4 pixels*/)); const Bitu skip = 4u << vga.config.addr_shift; /* how much to skip after drawing 4 pixels */ /* *sigh* it looks like DOSBox's VGA scanline code will pass nonzero bits 0-1 in vidstart */ vidstart &= ~3ul; - for(Bitu i = 0; i < (vga.draw.width>>(2/*4 pixels*/)); i++) { - uint8_t *ret = &vga.draw.linear_base[ vidstart & vga.draw.linear_mask ]; + for(Bitu i = 0; i < count; i++) { + const uint8_t *ret = &vram[ vidstart & vidmask ]; /* one group of 4 */ *dst++ = *ret++; @@ -873,12 +1021,13 @@ static void VGA_RawDraw_Xlat32_VGA_CRTC_bmode_Line(uint8_t *dst,Bitu vidstart, B } /* WARNING: This routine assumes (vidstart&3) == 0 */ -static uint8_t * VGA_Draw_Xlat32_VGA_CRTC_bmode_Line(Bitu vidstart, Bitu /*line*/) { +static uint8_t * VGA_Draw_Xlat32_VGA_CRTC_bmode_Line(Bitu vidstart, Bitu line) { + if (vga.crtc.maximum_scan_line & 0x80) line >>= 1u; /* CGA modes (and 200-line EGA) have the VGA doublescan bit set. We need to compensate to properly map lines. */ + const uint8_t *vram = vga.draw.linear_base + (((line & vga.tandy.line_mask) << (2+vga.tandy.line_shift)) & vga.draw.linear_mask); + const Bitu vidmask = vga.tandy.line_mask ? ((vga.tandy.addr_mask << 2) | 3) : vga.draw.linear_mask; + const Bitu skip = 4u << vga.config.addr_shift; /* how much to skip after drawing 4 pixels */ uint32_t* temps = (uint32_t*) TempLine; unsigned int poff = 0; - Bitu skip; /* how much to skip after drawing 4 pixels */ - - skip = 4u << vga.config.addr_shift; /* *sigh* it looks like DOSBox's VGA scanline code will pass nonzero bits 0-1 in vidstart */ poff += vidstart & 3u; @@ -911,8 +1060,10 @@ static uint8_t * VGA_Draw_Xlat32_VGA_CRTC_bmode_Line(Bitu vidstart, Bitu /*line* poff += x & 3; } - for(Bitu i = 0; i < ((vga.draw.line_length>>(2/*32bpp*/+2/*4 pixels*/))+((poff+3)>>2)); i++) { - uint8_t *ret = &vga.draw.linear_base[ vidstart & vga.draw.linear_mask ]; + const Bitu count = ((vga.draw.line_length>>(2/*32bpp*/+2/*4 pixels*/))+((poff+3)>>2)); + + for(Bitu i = 0; i < count; i++) { + const uint8_t *ret = &vram[ vidstart & vidmask ]; /* one group of 4 */ *temps++ = vga.dac.xlat32[*ret++]; @@ -999,6 +1150,25 @@ template static inline void E temps[7] = EGA_Planar_Common_Block_xlat((tmp>>24ul)&0xFFul); } +static uint8_t * VGA_Draw_DOSBOXIG_1bpp4plane(Bitu vidstart, Bitu line) { // renders to 8bpp + unsigned int xmax = vga.draw.width + (vga.draw.panning & 7u); + uint32_t ofs = (uint32_t)vidstart << 2u; + uint32_t *temp = (uint32_t*)TempLine; + uint32_t t1,t2; + unsigned int x; + + (void)line; + + for (x=0;x < xmax;x += 8,ofs += 4u) { + t1 = t2 = *((uint32_t*)(&vga.mem.linear[ofs & vga.draw.linear_mask])); + t1 = (t1 >> 4) & 0x0f0f0f0f; + t2 &= 0x0f0f0f0f; + EGA_Planar_Common_Block(temp+x,t1,t2); + } + + return (uint8_t*)(temp+(vga.draw.panning & 7u)); +} + /* NTS: For EGA/VGA machine types this code is also used to render the CGA 640x200 2-color and MCGA 640x480 2-color modes. * The reason is that on EGA/VGA, CGA graphics modes are really just a tweaked EGA 16-color mode with color plane enable set * to show only one bitplane. The attribute controller is set to map 0 to black and anything else to white. The @@ -1012,10 +1182,11 @@ template static inline void E * Don't believe me? Look at the VGA register dumps on Hackipedia.org and see for yourself. */ template static uint8_t * EGA_Planar_Common_Line(uint8_t *dst,Bitu vidstart, Bitu line) { if (vga.crtc.maximum_scan_line & 0x80) line >>= 1u; /* CGA modes (and 200-line EGA) have the VGA doublescan bit set. We need to compensate to properly map lines. */ - uint8_t *vram = vga.draw.linear_base + ((line & vga.tandy.line_mask) << (2+vga.tandy.line_shift)); - Bitu vidmask = vga.tandy.line_mask ? ((vga.tandy.addr_mask << 2) | 3) : vga.draw.linear_mask; - templine_type_t* temps = (templine_type_t*)dst; + const uint8_t *vram = vga.draw.linear_base + (((line & vga.tandy.line_mask) << (2+vga.tandy.line_shift)) & vga.draw.linear_mask); + const Bitu vidmask = vga.tandy.line_mask ? ((vga.tandy.addr_mask << 2) | 3) : vga.draw.linear_mask; Bitu count = vga.draw.blocks + ((vga.draw.panning + 7u) >> 3u); + templine_type_t* temps = (templine_type_t*)dst; + uint32_t t1,t2; Bitu i = 0; /* All EGA/VGA modes obey the MEM13 bits and other bits present in the hardware that @@ -1031,8 +1202,7 @@ template static uint8_t * EGA * 4-way interleave that was obviously added with Hercules graphics mode in mind. */ while (count > 0u) { - uint32_t t1,t2; - t1 = t2 = *((uint32_t*)(&vram[ vidstart & vidmask ])); + t1 = t2 = *((const uint32_t*)(&vram[ vidstart & vidmask ])); t1 = (t1 >> 4) & 0x0f0f0f0f; t2 &= 0x0f0f0f0f; vidstart += (uintptr_t)4 << (uintptr_t)vga.config.addr_shift; @@ -1049,10 +1219,11 @@ template static uint8_t * EGA template static uint8_t * EGA_Planar_Common_LineOddEven(uint8_t *dst,Bitu vidstart, Bitu line) { if (vga.crtc.maximum_scan_line & 0x80) line >>= 1u; /* CGA modes (and 200-line EGA) have the VGA doublescan bit set. We need to compensate to properly map lines. */ - uint8_t *vram = vga.draw.linear_base + ((line & vga.tandy.line_mask) << (2+vga.tandy.line_shift)); - Bitu vidmask = vga.tandy.line_mask ? ((vga.tandy.addr_mask << 2) | 3) : vga.draw.linear_mask; - templine_type_t* temps = (templine_type_t*)dst; + const uint8_t *vram = vga.draw.linear_base + (((line & vga.tandy.line_mask) << (2+vga.tandy.line_shift)) & vga.draw.linear_mask); + const Bitu vidmask = vga.tandy.line_mask ? ((vga.tandy.addr_mask << 2) | 3) : vga.draw.linear_mask; Bitu count = vga.draw.blocks + ((vga.draw.panning + 7u) >> 3u); + templine_type_t* temps = (templine_type_t*)dst; + uint32_t t1,t2,r; Bitu i = 0; /* This code assumes addr_shift != 0 */ @@ -1073,9 +1244,7 @@ template static uint8_t * EGA * 4-way interleave that was obviously added with Hercules graphics mode in mind. */ while (count > 0u) { - uint32_t t1,t2,r; - - r = *((uint32_t*)(&vram[ vidstart & vidmask ])); + r = *((const uint32_t*)(&vram[ vidstart & vidmask ])); t1 = t2 = r; t1 = (t1 >> 4) & 0x0f0f0f0f; @@ -1138,10 +1307,10 @@ template static inline void E template static uint8_t * EGA_Planar2BPP_Common_Line(uint8_t *dst,Bitu vidstart, Bitu line) { if (vga.crtc.maximum_scan_line & 0x80) line >>= 1u; /* CGA modes (and 200-line EGA) have the VGA doublescan bit set. We need to compensate to properly map lines. */ - uint8_t *vram = vga.draw.linear_base + ((line & vga.tandy.line_mask) << (2+vga.tandy.line_shift)); - Bitu vidmask = vga.tandy.line_mask ? ((vga.tandy.addr_mask << 2) | 3) : vga.draw.linear_mask; - templine_type_t* temps = (templine_type_t*)dst; + const uint8_t *vram = vga.draw.linear_base + (((line & vga.tandy.line_mask) << (2+vga.tandy.line_shift)) & vga.draw.linear_mask); + const Bitu vidmask = vga.tandy.line_mask ? ((vga.tandy.addr_mask << 2) | 3) : vga.draw.linear_mask; Bitu count = vga.draw.blocks + ((vga.draw.panning + 7u) >> 3u); + templine_type_t* temps = (templine_type_t*)dst; VGA_Latch pixels; Bitu i = 0; @@ -1166,7 +1335,7 @@ template static uint8_t * EGA * (ref: "Leather Goddesses of Phobos 2" according to ripsaw8080 when machine=ega). */ while (count > 0u) { - pixels.d = *((uint32_t*)(&vram[ vidstart & vidmask ])); + pixels.d = *((const uint32_t*)(&vram[ vidstart & vidmask ])); vidstart += (uintptr_t)4 << (uintptr_t)vga.config.addr_shift; EGA_Planar2BPP_Common_Block(temps+i,pixels); count--; @@ -1260,7 +1429,7 @@ void S3_XGA_RenderYUY2MPEGcolorkeyEVF(uint32_t* temp2/*already adjusted to X coo // HACK: DOSBox/DOSBox-X VGA emulation, unless otherwise, maps the 6-bit RGB VGA palette to 8-bit by shifting over by 2. // Unfortunately, S3's DCI driver and XingMPEG uses 0xFF00FF bright magenta to color key. - // Mask off the low 2 bits if not 8-bit VGA or the color key will never work. + // Mask off the low 2 bits if not 8-bit VGA DAC or the color key will never work. if (!vga_8bit_dac) mask &= 0xFCFCFC; const uint32_t key = (((uint32_t)vga.s3.streams.ckctl_b_lb) | ((uint32_t)vga.s3.streams.ckctl_g_lb << 8u) | ((uint32_t)vga.s3.streams.ckctl_r_lb << 16)) & mask; @@ -1861,9 +2030,9 @@ static const uint8_t* VGA_Text_Memwrap(Bitu vidstart) { // wrapping in this line Bitu break_pos = (vga.draw.linear_mask - vidstart) + 1; // need a temporary storage - TempLine/2 is ok for a bit more than 132 columns - memcpy(&TempLine[sizeof(TempLine)/2], &vga.tandy.draw_base[vidstart], break_pos); - memcpy(&TempLine[sizeof(TempLine)/2 + break_pos],&vga.tandy.draw_base[0], line_end - break_pos); - return &TempLine[sizeof(TempLine)/2]; + memcpy(&TempLine[TempLineSize/2], &vga.tandy.draw_base[vidstart], break_pos); + memcpy(&TempLine[TempLineSize/2 + break_pos],&vga.tandy.draw_base[0], line_end - break_pos); + return &TempLine[TempLineSize/2]; } else return &vga.tandy.draw_base[vidstart]; } @@ -2393,6 +2562,14 @@ bool isDBCSCP() { return !IS_PC98_ARCH && (IS_JEGA_ARCH||IS_DOSV||dos.loaded_codepage==932||dos.loaded_codepage==936||dos.loaded_codepage==949||dos.loaded_codepage==950||dos.loaded_codepage==951) && enable_dbcs_tables; } +#ifdef __cplusplus +extern "C" { +#endif + bool tfd_isDBCSCP(void) { return isDBCSCP(); } +#ifdef __cplusplus +} +#endif + #if 0//not used bool isDBCSLB(uint8_t chr) { for (int i=0; i<6; i++) lead[i] = 0; @@ -2416,12 +2593,16 @@ struct first_equal { template static inline uint8_t* EGAVGA_TEXT_Combined_Draw_Line(uint8_t *dst,Bitu vidstart,Bitu line) { if (vga.crtc.maximum_scan_line & 0x80) line >>= 1u; /* CGA modes (and 200-line EGA) have the VGA doublescan bit set. We need to compensate to properly map lines. */ - // keep it aligned: + const uint8_t *vram = vga.draw.linear_base + (((line & vga.tandy.line_mask) << (2+vga.tandy.line_shift)) & vga.draw.linear_mask); + const Bitu vidmask = vga.tandy.line_mask ? ((vga.tandy.addr_mask << 2) | 3) : vga.draw.linear_mask; + const Bitu skip = 4u << vga.config.addr_shift; /* how much to skip after drawing 4 pixels */ templine_type_t* draw = (card == MCH_RAW_SNAPSHOT) ? ((templine_type_t*)dst) : (((templine_type_t*)dst) + 16 - vga.draw.panning); - const uint32_t* vidmem = VGA_Planar_Memwrap(vidstart); // pointer to chars+attribs + Bitu lvida = vidstart << 2u; + Bitu blocks = vga.draw.blocks; if (vga.draw.panning) blocks++; // if the text is panned part of an // additional character becomes visible + Bitu background = 0, foreground = 0; Bitu chr, chr_left = 0, p3 = 0, attr, bsattr; bool chr_wide = false; @@ -2434,27 +2615,32 @@ template static inline uint8_ if (usedbcs && (vga.draw.height < 16u || vga.draw.width < 8u)) return dst; unsigned int row = usedbcs ? ((vidstart - vga.config.real_start - vga.draw.bytes_skip) / vga.draw.address_add) : 0, col = 0; - unsigned int rows = usedbcs ? ((vga.draw.height / 16u) - 1u) : 0, cols = usedbcs ? ((vga.draw.address_add / 2u) - 1u) : 0; + //unsigned int rows = usedbcs ? ((vga.draw.height / 16u) - 1u) : 0; + unsigned int cols = usedbcs ? ((vga.draw.address_add / 2u) - 1u) : 0; if (usedbcs && line == 1) { if (!jtbs.empty()) jtbs.erase(std::remove_if(jtbs.begin(), jtbs.end(), first_equal(row)), jtbs.end()); if (!dbox.empty()) dbox.erase(std::remove_if(dbox.begin(), dbox.end(), first_equal(row)), dbox.end()); } +// macro to make this code cleaner +#define VMA(addr) ( *((const uint32_t*)(&vram[ (Bitu)(addr) & vidmask ])) ) +#define VMR(rel) VMA(lvida + ((Bitu)((Bits)rel * (Bits)skip))) + VGA_Latch pixeln1, pixeln2, pixeln3, pixelp1, pixelp2, pixelp3; while (blocks--) { if (!col) p3 = 0; if (usedbcs) { // DBCS case VGA_Latch pixels; - pixels.d = *vidmem; + pixels.d = VMR(0); chr = pixels.b[0]; attr = pixels.b[1]; - pixeln1.d = *(vidmem + ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); - pixeln2.d = *(vidmem + 2 * ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); - pixeln3.d = *(vidmem + 3 * ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); - pixelp1.d = *(vidmem - ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); - pixelp2.d = *(vidmem - 2 * ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); - //pixelp3.d = *(vidmem - 3 * ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); + pixeln1.d = VMR(1); //*(vidmem + ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); + pixeln2.d = VMR(2); //*(vidmem + 2 * ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); + pixeln3.d = VMR(3); //*(vidmem + 3 * ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); + pixelp1.d = VMR(-1); //*(vidmem - ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); + pixelp2.d = VMR(-2); //*(vidmem - 2 * ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); + //pixelp3.d = *(vidmem - 3 * ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); if (!chr_wide) { if (!isJEGAEnabled() || !(jega.RMOD2 & 0x80)) { background = attr >> 4; @@ -2478,13 +2664,15 @@ template static inline uint8_ ((col < cols-3 && CheckBoxDrawing(chr, pixeln1.b[0], pixeln2.b[0], pixeln3.b[0])) || (col && col < cols-2 && CheckBoxDrawing(pixelp1.b[0], chr, pixeln1.b[0], pixeln2.b[0])) || (col > 1 && col < cols-1 && CheckBoxDrawing(pixelp2.b[0], pixelp1.b[0], chr, pixeln1.b[0])) || - (col > 2 && CheckBoxDrawing(p3, pixelp2.b[0], pixelp1.b[0], chr)) || + (col > 2 && CheckBoxDrawing(p3, pixelp2.b[0], pixelp1.b[0], chr))// || +#if 0 /* FIXME: Clean this up and port to the new memory reading code in this function--please use VMR/VMA macros */ (cols >= 79 && col == 74 && row < rows && CheckBoxDrawLast(col-3, *(vidmem-6), *(vidmem-4), *(vidmem-2), chr, *(vidmem+2), *(vidmem+4), *(vidmem+6), *(vidmem+8), *(vidmem+10))) || (cols >= 79 && col == 78 && row < rows && CheckBoxDrawLast(col-7, *(vidmem-14), *(vidmem-12), *(vidmem-10), *(vidmem-8), *(vidmem-6), *(vidmem-4), *(vidmem-2), chr, *(vidmem+2))) || (row && col>3 && (((uint8_t)*(vidmem-4)==177||(uint8_t)*(vidmem-4)==254)&&(uint8_t)*(vidmem-2)==16&&(uint8_t)chr==196&&(uint8_t)*(vidmem+2)==217)||((uint8_t)*(vidmem-4)==176&&(uint8_t)*(vidmem-2)==176&&(uint8_t)chr==176&&(uint8_t)*(vidmem+2)==179)) || (row < rows-2 && CheckBoxDrawingV(chr, *(vidmem+vga.draw.address_add), *(vidmem+2*vga.draw.address_add), *(vidmem+2), *(vidmem+2+vga.draw.address_add), *(vidmem+2+2*vga.draw.address_add), col?*(vidmem-2):0, col?*(vidmem-2+vga.draw.address_add):0, col?*(vidmem-2+2*vga.draw.address_add):0, col < cols-2?*(vidmem+4):0, col < cols-2?*(vidmem+4+vga.draw.address_add):0, col < cols-2?*(vidmem+4+2*vga.draw.address_add):0, row?*(vidmem-vga.draw.address_add):0, row < rows-3?*(vidmem+3*vga.draw.address_add):0, row?*(vidmem+2-vga.draw.address_add):0, row < rows-3?*(vidmem+2+3*vga.draw.address_add):0)) || (row && row < rows-1 && CheckBoxDrawingV(*(vidmem-vga.draw.address_add), chr, *(vidmem+vga.draw.address_add), *(vidmem+2-vga.draw.address_add), *(vidmem+2), *(vidmem+2+vga.draw.address_add), col?*(vidmem-2-vga.draw.address_add):0, col?*(vidmem-2):0, col?*(vidmem-2+vga.draw.address_add):0, col < cols-2?*(vidmem+4-vga.draw.address_add):0, col < cols-2?*(vidmem+4):0, col < cols-2?*(vidmem+4+vga.draw.address_add):0, row > 1?*(vidmem-2*vga.draw.address_add):0, row < rows-2?*(vidmem+2*vga.draw.address_add):0, row > 1?*(vidmem+2-2*vga.draw.address_add):0, row < rows-2?*(vidmem+2+2*vga.draw.address_add):0)) || (row > 1 && CheckBoxDrawingV(*(vidmem-2*vga.draw.address_add), *(vidmem-vga.draw.address_add), chr, *(vidmem+2-2*vga.draw.address_add), *(vidmem+2-vga.draw.address_add), *(vidmem+2), col?*(vidmem-2-2*vga.draw.address_add):0, col?*(vidmem-2-vga.draw.address_add):0, col?*(vidmem-2):0, col < cols-2?*(vidmem+4-2*vga.draw.address_add):0, col < cols-2?*(vidmem+4-vga.draw.address_add):0, col?*(vidmem+4):0, row > 2?*(vidmem-3*vga.draw.address_add):0, row < rows-1?*(vidmem+vga.draw.address_add):0, row > 2?*(vidmem+2-3*vga.draw.address_add):0, row < rows-1?*(vidmem+2+vga.draw.address_add):0)) +#endif ))) { chr_left=chr; chr_wide=true; @@ -2596,18 +2784,16 @@ template static inline uint8_ chr_wide=false; blocks--; } - pixelp2.d = *(vidmem - 2 * ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); + pixelp2.d = VMR(-2); //*(vidmem - 2 * ((uintptr_t)1U << (uintptr_t)vga.config.addr_shift)); p3 = col>2?pixelp2.b[0]:0; col++; } else { // SBCS case VGA_Latch pixels; - - pixels.d = *vidmem; - + pixels.d = VMR(0); Bitu chr = pixels.b[0]; Bitu attr = pixels.b[1]; - // the font pattern - Bitu font = vga.draw.font_tables[(attr >> 3)&1][(chr<<5)+line]; + // the font pattern (directly from video RAM) + uint16_t font = vga.draw.font_tables[(attr >> 3)&1][((chr<<5)+line)*4]; Bitu background = attr >> 4u; // if blinking is enabled bit7 is not mapped to attributes if (vga.draw.blinking) background &= ~0x8u; @@ -2634,7 +2820,7 @@ template static inline uint8_ } } } - vidmem += (uintptr_t)1U << (uintptr_t)vga.config.addr_shift; + lvida += skip; } // draw the text mode cursor if needed @@ -2645,13 +2831,19 @@ template static inline uint8_ Bitu index = (Bitu)attr_addr * (vga.draw.char9dot ? 9u : 8u); draw = (card == MCH_RAW_SNAPSHOT) ? (((templine_type_t*)dst) + index) : ((((templine_type_t*)dst) + index) + 16 - vga.draw.panning); - Bitu foreground = vga.tandy.draw_base[(vga.draw.cursor.address<<2ul)+1] & 0xf; + VGA_Latch pixels; + pixels.d = VMA(vga.draw.cursor.address<<2ul); + + const uint8_t foreground = pixels.b[1] & 0xf; for (Bitu i = 0; i < 8; i++) { *draw++ = EGA_Planar_Common_Block_xlat(foreground); } } } +#undef VMR +#undef VMA + if (card != MCH_RAW_SNAPSHOT) return dst+(16*sizeof(templine_type_t)); else @@ -3487,7 +3679,7 @@ static uint8_t *VGA_DrawLineBiosLogoOverlay(Bitu vidstart, Bitu line) { * corruption. Modifying TempLine, which is basically the same exact memory "r" points to, does not. */ if (BIOSlogo.bmp != NULL && BIOSlogo.palette != NULL && BIOSlogo.visible && BIOSlogo.vsync_enable) { - if (vga.draw.lines_done >= BIOSlogo.y && r >= TempLine && r < (TempLine+sizeof(TempLine))) { + if (vga.draw.lines_done >= BIOSlogo.y && r >= TempLine && r < (TempLine+TempLineSize)) { const unsigned int rel = vga.draw.lines_done - BIOSlogo.y; const unsigned int bofs = (unsigned int)(r - TempLine); if (rel < BIOSlogo.height) { @@ -3574,6 +3766,8 @@ static void VGA_DrawSingleLine(Bitu /*blah*/) { bool skiprender; vga.draw.hsync_events++; + if (vga.draw.lines_done == 0) + vga.draw.must_complete_frame = true; /* frame started, vsync must complete it */ again: if (vga.draw.render_step == 0) @@ -3606,7 +3800,7 @@ static void VGA_DrawSingleLine(Bitu /*blah*/) { } VGA_DAC_DeferredUpdateColorPalette(); - if (GCC_UNLIKELY(vga.attr.disabled)) { + if (GCC_UNLIKELY(vga.attr.disabled && !vga.dosboxig.svga)) { switch(machine) { case MCH_PCJR: // Displays the border color when screen is disabled @@ -3646,17 +3840,17 @@ static void VGA_DrawSingleLine(Bitu /*blah*/) { break; } if (vga.draw.bpp==8) { - memset(TempLine, bg_color_index, sizeof(TempLine)); + memset(TempLine, bg_color_index, TempLineSize); } else if (vga.draw.bpp==16) { uint16_t* wptr = (uint16_t*) TempLine; uint16_t value = vga.dac.xlat16[bg_color_index]; - for (Bitu i = 0; i < sizeof(TempLine)/2; i++) { + for (Bitu i = 0; i < TempLineSize/2; i++) { wptr[i] = value; } } else if (vga.draw.bpp==32) { uint32_t* wptr = (uint32_t*) TempLine; uint32_t value = vga.dac.xlat32[bg_color_index]; - for (Bitu i = 0; i < sizeof(TempLine)/4; i++) { + for (Bitu i = 0; i < TempLineSize/4; i++) { wptr[i] = value; } } @@ -3742,7 +3936,7 @@ static void VGA_DrawSingleLine(Bitu /*blah*/) { if (!skiprender) { vga.draw.lines_done++; - if (vga.draw.split_line==vga.draw.lines_done && machine != MCH_PC98) VGA_ProcessSplit(); + if (vga.draw.split_line==vga.draw.lines_done && machine != MCH_PC98 && !vga.dosboxig.svga) VGA_ProcessSplit(); } if (mcga_double_scan) { @@ -3756,6 +3950,7 @@ static void VGA_DrawSingleLine(Bitu /*blah*/) { if (!is_vga_rendering_on_demand) PIC_AddEvent(VGA_DrawSingleLine,vga.draw.delay.singleline_delay); } else { + vga.draw.must_complete_frame = false; vga_mode_frames_since_time_base++; RENDER_EndUpdate(false); } @@ -3794,12 +3989,15 @@ static void VGA_DrawEGASingleLine(Bitu /*blah*/) { else skiprender = true; + if (vga.draw.lines_done == 0) + vga.draw.must_complete_frame = true; /* frame started, vsync must complete it */ + if ((++vga.draw.render_step) >= vga.draw.render_max) vga.draw.render_step = 0; if (!skiprender) { - if (GCC_UNLIKELY(vga.attr.disabled)) { - memset(TempLine, 0, sizeof(TempLine)); + if (GCC_UNLIKELY(vga.attr.disabled && !vga.dosboxig.svga)) { + memset(TempLine, 0, TempLineSize); RENDER_DrawLine(TempLine); } else { Bitu address = vga.draw.address; @@ -3840,12 +4038,13 @@ static void VGA_DrawEGASingleLine(Bitu /*blah*/) { if (!skiprender) { vga.draw.lines_done++; - if (vga.draw.split_line==vga.draw.lines_done && machine != MCH_PC98) VGA_ProcessSplit(); + if (vga.draw.split_line==vga.draw.lines_done && machine != MCH_PC98 && !vga.dosboxig.svga) VGA_ProcessSplit(); } if (vga.draw.lines_done < vga.draw.lines_total) { PIC_AddEvent(VGA_DrawEGASingleLine,vga.draw.delay.singleline_delay); } else { + vga.draw.must_complete_frame = false; vga_mode_frames_since_time_base++; RENDER_EndUpdate(false); } @@ -3895,6 +4094,12 @@ void VGA_RenderOnDemandUpTo(void) { //assert(vga_render_on_demand); if (scanline < 0) scanline = 0; + + /* if something changed mid-frame, then the frame must be drawn again to reflect it. + * unless of course you like to see tearlines and the output stuck on half-drawn frames. */ + if (vga.draw.lines_done != 0) + vga.draw.must_draw_again = true; + while (vga.draw.lines_done < vga.draw.lines_total && vga.draw.hsync_events < (unsigned int)scanline && patience-- > 0) VGA_DrawSingleLine(0); } @@ -3908,10 +4113,18 @@ void VGA_RenderOnDemandComplete(void) { VGA_DrawSingleLine(0); } -static void VGA_VertInterrupt(Bitu /*val*/) { - if (is_vga_rendering_on_demand) - VGA_RenderOnDemandComplete(); +/* WARNING: Do not call this more than once per frame! Events will get missed if you do. */ +static void OnDemandCompleteFrame(void) { + if (is_vga_rendering_on_demand) { + if (vga.draw.must_complete_frame || !vga_render_wait_for_changes) + VGA_RenderOnDemandComplete(); + } + + vga.draw.must_complete_frame |= vga.draw.must_draw_again; + vga.draw.must_draw_again = false; +} +static void VGA_VertInterrupt(Bitu /*val*/) { if (IS_PC98_ARCH) { if (GDC_vsync_interrupt) { GDC_vsync_interrupt = false; @@ -3927,24 +4140,31 @@ static void VGA_VertInterrupt(Bitu /*val*/) { } static void VGA_Other_VertInterrupt(Bitu val) { - if (is_vga_rendering_on_demand) - VGA_RenderOnDemandComplete(); - if (val) PIC_ActivateIRQ(5); else PIC_DeActivateIRQ(5); } static void VGA_DisplayStartLatch(Bitu /*val*/) { - if (is_vga_rendering_on_demand) - VGA_RenderOnDemandComplete(); + const Bitu old_start = vga.config.real_start; + + if (!IS_PC98_ARCH) OnDemandCompleteFrame(); /* hretrace fx support: store the hretrace value at start of picture so we have * a point of reference how far to displace the scanline when wavy effects are * made */ vga_display_start_hretrace = vga.crtc.start_horizontal_retrace; - vga.config.real_start=vga.config.display_start & vga.mem.memmask; + vga.config.real_start = vga.config.display_start & vga.mem.memmask; vga.draw.bytes_skip = vga.config.bytes_skip; + if (vga_render_wait_for_changes) { + if (vga.config.real_start != old_start) { + if (!vga.draw.must_complete_frame) { + LOG_MSG("Real start change unexpected"); + vga.draw.must_complete_frame = true; + } + } + } + if (vga.overopts.enable) { if (vga.overopts.start != ~uint32_t(0u)) { if (vga.overopts.start_sum) @@ -3961,10 +4181,12 @@ static void VGA_DisplayStartLatch(Bitu /*val*/) { } static void VGA_PanningLatch(Bitu /*val*/) { - if (is_vga_rendering_on_demand) - VGA_RenderOnDemandComplete(); + if (IS_PC98_ARCH) OnDemandCompleteFrame(); - vga.draw.panning = vga.config.pel_panning; + if (vga.dosboxig.svga) + vga.draw.panning = vga.dosboxig.hpel; + else + vga.draw.panning = vga.config.pel_panning; if (IS_PC98_ARCH) { for (unsigned int i=0;i < 2;i++) @@ -4073,8 +4295,6 @@ static const VGA_debug_screen_func_t VGA_debug_screen_funcs32 = { &VGA_debug_screen_func_bitblt }; -extern uint8_t int10_font_08[256 * 8]; - static int VGA_debug_screen_puts8(int x,int y,const char *msg,unsigned int color) { while (*msg != 0) { VGA_debug_screen_func->bitblt(x,y,8,8,1,int10_font_08 + (((unsigned int)((unsigned char)(*msg++))) * 8u),color); @@ -4132,6 +4352,7 @@ static void VGA_debug_screen_resize(size_t w,size_t h,size_t bpp) { void VGA_DebugOverlay() { if (VGA_debug_screen == NULL || VGA_debug_screen_w < render.src.width) return; + if (vga.draw.lines_done < vga.draw.lines_total) return; for (unsigned int y=0;y < VGA_debug_screen_h && render.scale.inLine < render.src.height;y++) RENDER_DrawLine(VGA_debug_screen+(y*VGA_debug_screen_stride)); @@ -4572,6 +4793,8 @@ void VGA_DrawDebugLine(uint8_t *line,unsigned int w) { if (allclear) debugline_events.clear(); } +static unsigned char single_digit_frame_count = 0; + void VGA_sof_debug_video_info(void) { unsigned int green,white; char tmp[256]; @@ -4614,7 +4837,17 @@ void VGA_sof_debug_video_info(void) { }; x = y = 4; - x = VGA_debug_screen_puts8(x,y,mode_texts[vga.mode],green) + 8; + if (is_vga_rendering_on_demand && vga_render_wait_for_changes) { + x = VGA_debug_screen_puts8(x,y,mode_texts[vga.mode],green); + + tmp[0] = ':'; + tmp[1] = '0' + single_digit_frame_count; + tmp[2] = 0; + x = VGA_debug_screen_puts8(x,y,tmp,white) + 8; + } + else { + x = VGA_debug_screen_puts8(x,y,mode_texts[vga.mode],green) + 8; + } /* 2023/04/26: DOSBox-X users are probably going to discover the "Video debug overlay" and then immediately * point out the "bug" that it's showing M_EGA for CGA/MCGA 2-color graphics modes. It's not a @@ -4721,18 +4954,22 @@ void VGA_sof_debug_video_info(void) { unsigned int interleave_mul = 1; char *d = tmp; - if (machine == MCH_CGA || machine == MCH_TANDY || machine == MCH_PCJR || machine == MCH_HERC || machine == MCH_AMSTRAD) { - if (rowdiv == 2 || rowdiv == 4) rowdiv = 1; /* CGA graphics use interleaving to accomplish 200 lines, Tandy and Hercules use 4-way interleaving in some modes */ + if (vga.dosboxig.svga) { + /* do not change */ } - else if (machine == MCH_EGA || machine == MCH_VGA) { + else if (machine == MCH_CGA || machine == MCH_TANDY || machine == MCH_PCJR || machine == MCH_HERC || machine == MCH_AMSTRAD || machine == MCH_EGA || machine == MCH_VGA) { /* EGA/VGA have bits set to display video memory 2-way interleave like CGA and even 4-way interleave like Hercules */ - if (vga.tandy.line_mask & 2) interleave_mul = 4; - else if (vga.tandy.line_mask & 1) interleave_mul = 2; + if ((vga.tandy.line_mask & 2) && rowdiv > 2) interleave_mul = 4; + else if ((vga.tandy.line_mask & 1) && rowdiv > 1) interleave_mul = 2; } - d += sprintf(d,"G%ux%u>%ux%u", - (unsigned int)vga.draw.width,((unsigned int)vga.draw.height * interleave_mul) / rowdiv, - (unsigned int)vga.draw.width,(unsigned int)vga.draw.height); + /* render_max == 2 and address_line_total == 2 can happen if the user disabled doublescan mode */ + interleave_mul *= vga.draw.render_max; + + d += sprintf(d,"G%ux%u>%u", + (unsigned int)vga.draw.width, + ((unsigned int)vga.draw.height * interleave_mul) / rowdiv, + (unsigned int)vga.draw.height); if (machine == MCH_HERC) { if (hercCard >= HERC_InColor) { @@ -4791,6 +5028,14 @@ void VGA_sof_debug_video_info(void) { d += sprintf(d," pg:c%ud%u",(pc98_gdc_vramop & (1 << VOPBIT_ACCESS))?1:0,GDC_display_plane_pending); } + else if (vga.dosboxig.svga) { + char *d = tmp; + + d += sprintf(d,"@%04x+%04xL", + (unsigned int)vga.dosboxig.display_offset,(unsigned int)vga.dosboxig.bytes_per_scanline); + + *d = 0; + } else if (IS_EGAVGA_ARCH) { char *d = tmp; @@ -5056,6 +5301,28 @@ void VGA_sof_debug_video_info(void) { /* would be redundant copy of HWPAL */ } + x = 4; + y += 8; + + { + uint16_t drawseg,memseg; + + drawseg = vga.tandy.draw_bank * 0x400u; + memseg = vga.tandy.mem_bank * 0x400u; + if (machine == MCH_TANDY) { + drawseg += 0x8000u; + memseg += 0x8000u; + } + + sprintf(tmp,"LM=%X DB=%u(%04X) MB=%u(%04X)", + (unsigned int)vga.tandy.line_mask, + (unsigned int)vga.tandy.draw_bank, + (unsigned int)drawseg, + (unsigned int)vga.tandy.mem_bank, + (unsigned int)memseg); + x = VGA_debug_screen_puts8(x,y,tmp,white) + 8; + } + x += 8; } } @@ -5128,8 +5395,7 @@ void VGA_sof_debug_video_info(void) { sprintf(tmp,"RPAL%u:",vga_8bit_dac?8:6); x = VGA_debug_screen_puts8(x,y,tmp,white) + 8; VGA_debug_screen_func->rect(x-1,y,x,y+(4*4),dkgray); - VGA_debug_screen_func->rect(x-1,y,x+(4*64),y+1,dkgray); - VGA_debug_screen_func->rect(x-1,y+(4*4)-1,x+(4*64),y+(4*4),dkgray); + VGA_debug_screen_func->rect(x-1,y+(4*4),x+(4*64),y+(4*4)+1,dkgray); for (unsigned int c=0;c < 256;c++) { const int bx = x+((c&63)*4),by = y+((c>>6)*4); const unsigned int color = SDL_MapRGB( @@ -5138,97 +5404,124 @@ void VGA_sof_debug_video_info(void) { ((vga.dac.rgb[c].green << dacshift) & 0xFF), ((vga.dac.rgb[c].blue << dacshift) & 0xFF)); VGA_debug_screen_func->rect(bx,by+1,bx+3,by+4,color); + if ((c&63) == 0) VGA_debug_screen_func->rect(x-1,by,x+(4*64),by+1,dkgray); VGA_debug_screen_func->rect(bx+3,by+1,bx+4,by+4,dkgray); } x = 4; y += 8*2; /* next line */ - /* effective PAL (after all remapping) */ - sprintf(tmp,"EPAL%u:",vga_8bit_dac?8:6); - x = VGA_debug_screen_puts8(x,y,tmp,white) + 8; - if (vga.mode == M_LIN8 || vga.mode == M_VGA) { - VGA_debug_screen_func->rect(x-1,y,x,y+(4*4),dkgray); - VGA_debug_screen_func->rect(x-1,y,x+(4*64),y+1,dkgray); - VGA_debug_screen_func->rect(x-1,y+(4*4)-1,x+(4*64),y+(4*4),dkgray); - for (unsigned int c=0;c < 256;c++) { - const int bx = x+((c&63)*4),by = y+((c>>6)*4); - VGA_debug_screen_func->rect(bx,by+1,bx+3,by+4,vga.dac.xlat32[c]); /* xlat32[] already contains the translated color */ - VGA_debug_screen_func->rect(bx+3,by+1,bx+4,by+4,dkgray); - } - } - else { - unsigned int colors = 16; + if (vga.dosboxig.svga) { + char *d = tmp; - if (!(vga.mode == M_TEXT || vga.mode == M_TANDY_TEXT || vga.mode == M_HERC_TEXT)) { - unsigned char chk = vga.attr.color_plane_enable; + y += 1; /* please do not overlap the rpal display */ - if (vga.gfx.mode & 0x20/*CGA 4-color*/) - chk |= (chk & 0x5u) << 1u; /* bit 0->1 and 2->3 */ + d += sprintf(d,"HPL=%u VPL=%u HSC=%u VSC=%u", + (unsigned int)vga.dosboxig.hpel,(unsigned int)vga.dosboxig.vpel, + (unsigned int)vga.dosboxig.hscale,(unsigned int)vga.dosboxig.vscale); - if (chk & 8) colors = 16; - else if (chk & 4) colors = 8; - else if (chk & 2) colors = 4; - else colors = 2; - } + if (vga.dosboxig.dar_width != 0 && vga.dosboxig.dar_height != 0) + d += sprintf(d," DAR=%u:%u",vga.dosboxig.dar_width,vga.dosboxig.dar_height); + else + d += sprintf(d," DAR=%.3f",vga.draw.screen_ratio); - VGA_debug_screen_func->rect(x-1,y,x+(8*colors),y+1,dkgray); - VGA_debug_screen_func->rect(x-1,y+7,x+(8*colors),y+8,dkgray); - for (unsigned int c=0;c < colors;c++) { - VGA_debug_screen_func->rect(x,y+1,x+7,y+7,vga.dac.xlat32[c]); - VGA_debug_screen_func->rect(x+7,y+1,x+8,y+7,dkgray); - x += 8; - } - } + *d = 0; - x = 4; - y += 8*2; /* next line */ + x = VGA_debug_screen_puts8(x,y,tmp,white) + 8; - if (IS_VGA_ARCH) { - /* attribute controller PAL */ - x = VGA_debug_screen_puts8(x,y,"ACPAL:",white) + 8; - VGA_debug_screen_func->rect(x-1,y,x+(8*16),y+1,dkgray); - VGA_debug_screen_func->rect(x-1,y+7,x+(8*16),y+8,dkgray); - for (unsigned int c=0;c < 16;c++) { - const unsigned int idx = vga.attr.palette[c]&0x3F; - const unsigned int color = SDL_MapRGB( - sdl.surface->format, - ((vga.dac.rgb[idx].red << dacshift) & 0xFF), - ((vga.dac.rgb[idx].green << dacshift) & 0xFF), - ((vga.dac.rgb[idx].blue << dacshift) & 0xFF)); - VGA_debug_screen_func->rect(x,y+1,x+7,y+7,color); - VGA_debug_screen_func->rect(x+7,y+1,x+8,y+7,dkgray); - x += 8; + x = 4; + y += 8*2; /* next line */ + } + else { + /* effective PAL (after all remapping) */ + sprintf(tmp,"EPAL%u:",vga_8bit_dac?8:6); + x = VGA_debug_screen_puts8(x,y,tmp,white) + 8; + if (vga.mode == M_LIN8 || vga.mode == M_VGA) { + VGA_debug_screen_func->rect(x-1,y,x,y+(4*4),dkgray); + VGA_debug_screen_func->rect(x-1,y,x+(4*64),y+1,dkgray); + VGA_debug_screen_func->rect(x-1,y+(4*4)-1,x+(4*64),y+(4*4),dkgray); + for (unsigned int c=0;c < 256;c++) { + const int bx = x+((c&63)*4),by = y+((c>>6)*4); + VGA_debug_screen_func->rect(bx,by+1,bx+3,by+4,vga.dac.xlat32[c]); /* xlat32[] already contains the translated color */ + VGA_debug_screen_func->rect(bx+3,by+1,bx+4,by+4,dkgray); + } } + else { + unsigned int colors = 16; - x += 8; + if (!(vga.mode == M_TEXT || vga.mode == M_TANDY_TEXT || vga.mode == M_HERC_TEXT)) { + unsigned char chk = vga.attr.color_plane_enable; - sprintf(tmp,"CPE%x HPL%x YP%02x",vga.attr.color_plane_enable&0xF,vga.config.pel_panning&0xF,vga.config.hlines_skip); /* 4 bits, 4 bitplanes, one hex digit */ - x = VGA_debug_screen_puts8(x,y,tmp,white) + 8; + if (vga.gfx.mode & 0x20/*CGA 4-color*/) + chk |= (chk & 0x5u) << 1u; /* bit 0->1 and 2->3 */ + + if (chk & 8) colors = 16; + else if (chk & 4) colors = 8; + else if (chk & 2) colors = 4; + else colors = 2; + } + + VGA_debug_screen_func->rect(x-1,y,x,y+8,dkgray); + VGA_debug_screen_func->rect(x-1,y,x+(8*colors),y+1,dkgray); + VGA_debug_screen_func->rect(x-1,y+7,x+(8*colors),y+8,dkgray); + for (unsigned int c=0;c < colors;c++) { + VGA_debug_screen_func->rect(x,y+1,x+7,y+7,vga.dac.xlat32[c]); + VGA_debug_screen_func->rect(x+7,y+1,x+8,y+7,dkgray); + x += 8; + } + } x = 4; - y += 8; /* next line */ + y += 8*2; /* next line */ + + if (IS_VGA_ARCH) { + /* attribute controller PAL */ + x = VGA_debug_screen_puts8(x,y,"ACPAL:",white) + 8; + VGA_debug_screen_func->rect(x-1,y,x,y+8,dkgray); + VGA_debug_screen_func->rect(x-1,y,x+(8*16),y+1,dkgray); + VGA_debug_screen_func->rect(x-1,y+7,x+(8*16),y+8,dkgray); + for (unsigned int c=0;c < 16;c++) { + const unsigned int idx = vga.attr.palette[c]&0x3F; + const unsigned int color = SDL_MapRGB( + sdl.surface->format, + ((vga.dac.rgb[idx].red << dacshift) & 0xFF), + ((vga.dac.rgb[idx].green << dacshift) & 0xFF), + ((vga.dac.rgb[idx].blue << dacshift) & 0xFF)); + VGA_debug_screen_func->rect(x,y+1,x+7,y+7,color); + VGA_debug_screen_func->rect(x+7,y+1,x+8,y+7,dkgray); + x += 8; + } - /* attribute controller PAL with color select and other in force */ - x = VGA_debug_screen_puts8(x,y,"CSPAL:",white) + 8; - VGA_debug_screen_func->rect(x-1,y,x+(8*16),y+1,dkgray); - VGA_debug_screen_func->rect(x-1,y+7,x+(8*16),y+8,dkgray); - for (unsigned int c=0;c < 16;c++) { - const unsigned int idx = vga.dac.combine[c]; /* vga_dac.cpp considers color select */ - const unsigned int color = SDL_MapRGB( - sdl.surface->format, - ((vga.dac.rgb[idx].red << dacshift) & 0xFF), - ((vga.dac.rgb[idx].green << dacshift) & 0xFF), - ((vga.dac.rgb[idx].blue << dacshift) & 0xFF)); - VGA_debug_screen_func->rect(x,y+1,x+7,y+7,color); - VGA_debug_screen_func->rect(x+7,y+1,x+8,y+7,dkgray); x += 8; - } - x += 8; + sprintf(tmp,"CPE%x HPL%x YP%02x",vga.attr.color_plane_enable&0xF,vga.config.pel_panning&0xF,vga.config.hlines_skip); /* 4 bits, 4 bitplanes, one hex digit */ + x = VGA_debug_screen_puts8(x,y,tmp,white) + 8; + + x = 4; + y += 8; /* next line */ + + /* attribute controller PAL with color select and other in force */ + x = VGA_debug_screen_puts8(x,y,"CSPAL:",white) + 8; + VGA_debug_screen_func->rect(x-1,y,x,y+8,dkgray); + VGA_debug_screen_func->rect(x-1,y,x+(8*16),y+1,dkgray); + VGA_debug_screen_func->rect(x-1,y+7,x+(8*16),y+8,dkgray); + for (unsigned int c=0;c < 16;c++) { + const unsigned int idx = vga.dac.combine[c]; /* vga_dac.cpp considers color select */ + const unsigned int color = SDL_MapRGB( + sdl.surface->format, + ((vga.dac.rgb[idx].red << dacshift) & 0xFF), + ((vga.dac.rgb[idx].green << dacshift) & 0xFF), + ((vga.dac.rgb[idx].blue << dacshift) & 0xFF)); + VGA_debug_screen_func->rect(x,y+1,x+7,y+7,color); + VGA_debug_screen_func->rect(x+7,y+1,x+8,y+7,dkgray); + x += 8; + } - sprintf(tmp,"PM%02x MD%02x CS%02x",vga.dac.pel_mask,vga.attr.mode_control,vga.attr.color_select); - x = VGA_debug_screen_puts8(x,y,tmp,white) + 8; + x += 8; + + sprintf(tmp,"PM%02x MD%02x CS%02x",vga.dac.pel_mask,vga.attr.mode_control,vga.attr.color_select); + x = VGA_debug_screen_puts8(x,y,tmp,white) + 8; + } } /* point out where side debug info is */ @@ -5320,6 +5613,9 @@ void VGA_sof_debug_video_info(void) { VGA_debug_screen_puts8(x,y+16,"E",0); } } + + if ((++single_digit_frame_count) >= 10) + single_digit_frame_count = 0; } static inline uint8_t dacexpand(const uint8_t v,const uint8_t dacshl,const uint8_t dacshr) { @@ -5634,6 +5930,7 @@ void WriteARawImage(rawscreenshot &rawimg,rawscreenshot &rawpal,const char *ext) png_destroy_write_struct(&png_ptr, &info_ptr); /*close file*/ fclose(fp); + std::string message = formatString(MSG_Get("SAVE_SCREENSHOT"), pathscr.c_str()); if (show_recorded_filename && pathscr.size()) systemmessagebox("Recording completed",("Saved screenshot to the file:\n\n"+pathscr).c_str(),"ok", "info", 1); } #endif @@ -5691,9 +5988,6 @@ static void VGA_VerticalTimer(Bitu /*val*/) { pc98_update_display_page_ptr(); } - if (is_vga_rendering_on_demand) - VGA_RenderOnDemandComplete(); - is_vga_rendering_on_demand = vga_render_on_demand; if (CaptureState & CAPTURE_RAWIMAGE) { if (!rawshot.capturing) { @@ -5892,6 +6186,16 @@ static void VGA_VerticalTimer(Bitu /*val*/) { break; } + if (video_debug_overlay && render.src.height > vga.draw.height && vga.draw.bpp == render.src.bpp) + VGA_debug_screen_resize(render.src.width,render.src.height - vga.draw.height,vga.draw.bpp); + else + VGA_debug_screen_free(); + + if (video_debug_overlay && VGA_debug_screen && vga.draw.lines_done >= vga.draw.lines_total) { + VGA_debug_screen_func->clear(0); + VGA_sof_debug_video_info(); + } + // for same blinking frequency with higher frameskip if (IS_JEGA_ARCH) { ccount++; @@ -5902,13 +6206,54 @@ static void VGA_VerticalTimer(Bitu /*val*/) { } else vga.draw.cursor.count++; + // render on demand + wait for changes needs to render frame when cursor blinks. + // most code uses 8 frames for cursor blink and 16 frames for attribute blink. + if (!IS_PC98_ARCH && (vga.mode == M_TEXT || vga.mode == M_TANDY_TEXT || vga.mode == M_HERC_TEXT) && (vga.draw.cursor.enabled || vga.draw.blinking)) { + const unsigned int chkmsk = vga.draw.cursor.enabled ? 0x7 : 0xF; + if ((vga.draw.cursor.count&chkmsk) == 0) + vga.draw.must_complete_frame = true; + } + if (IS_PC98_ARCH) { for (unsigned int i=0;i < 2;i++) pc98_gdc[i].cursor_advance(); } - //Check if we can actually render, else skip the rest - if (vga.draw.vga_override || !RENDER_StartUpdate()) return; + bool renderAbort = false; + + switch (vga.draw.mode) { + case DRAWLINE: + case EGALINE: + if (GCC_UNLIKELY(vga.draw.lines_done < vga.draw.lines_total)) { + vga_mode_frames_since_time_base++; + if (vga_render_wait_for_changes && vga.draw.lines_done == 0) { + /* do nothing */ + } + else { + LOG(LOG_VGAMISC,LOG_NORMAL)( "Lines left: %d", + (int)(vga.draw.lines_total-vga.draw.lines_done)); + renderAbort = true; + } + } + break; + default: + break; + } + RENDER_EndUpdate(renderAbort); + vga.draw.lines_done = 0; + +#if C_DIRECT3D && defined(C_SDL2) + if(sdl.desktop.type == SCREEN_DIRECT3D11) { + OUTPUT_DIRECT3D11_CheckSourceResolution(); + } +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + if(sdl.desktop.type == SCREEN_METAL) { + OUTPUT_Metal_CheckSourceResolution(); + } +#endif + //Check if we can actually render, else skip the rest + if (vga.draw.vga_override || !RENDER_StartUpdate()) return; if (svgaCard == SVGA_S3Trio) { if (s3Card >= S3_ViRGE || s3Card == S3_Trio64V) { @@ -5956,167 +6301,230 @@ static void VGA_VerticalTimer(Bitu /*val*/) { vga.draw.address = vga.config.real_start; vga.draw.byte_panning_shift = 0; - switch (vga.mode) { - case M_EGA: - case M_LIN4: - vga.draw.byte_panning_shift = 4u; - vga.draw.address += vga.draw.bytes_skip; - vga.draw.address *= vga.draw.byte_panning_shift; + float draw_skip = 0.0; - /* Even in EGA/VGA 16-color modes, where the CRTC is normally in BYTE mode, there are demos that - * switch the CRTC to other non-BYTE modes: - * - * - "Unreal" by Future Crew, "Vectorballs", CRTC WORD mode */ - if (vga.config.compatible_chain4 || svgaCard == SVGA_None) - vga.draw.linear_mask = 0x3ffffu & vga.mem.memmask; /* NTS: We allow EGA with less than 256KB! */ - else - vga.draw.linear_mask = vga.mem.memmask; + if (vga.dosboxig.svga) { + vga.draw.address = vga.dosboxig.display_offset; + vga.draw.linear_mask = vga.mem.memmask; + vga.draw.address_line = 0; + } + else { + switch (vga.mode) { + case M_EGA: + case M_LIN4: + vga.draw.byte_panning_shift = 4u; + vga.draw.address += vga.draw.bytes_skip; + vga.draw.address *= vga.draw.byte_panning_shift; + + /* Even in EGA/VGA 16-color modes, where the CRTC is normally in BYTE mode, there are demos that + * switch the CRTC to other non-BYTE modes: + * + * - "Unreal" by Future Crew, "Vectorballs", CRTC WORD mode */ + if (vga.config.compatible_chain4 || svgaCard == SVGA_None) + vga.draw.linear_mask = 0x3ffffu & vga.mem.memmask; /* NTS: We allow EGA with less than 256KB! */ + else + vga.draw.linear_mask = vga.mem.memmask; - vga.draw.address *= (Bitu)1u << (Bitu)vga.config.addr_shift; /* NTS: Remember the bizarre 4 x 4 mode most SVGA chipsets do */ - break; - case M_VGA: - /* TODO: Various SVGA chipsets have a bit to enable/disable 256KB wrapping */ - if (vga.config.compatible_chain4 || svgaCard == SVGA_None) - vga.draw.linear_mask = 0x3ffffu; - else - vga.draw.linear_mask = vga.mem.memmask; + vga.draw.address *= (Bitu)1u << (Bitu)vga.config.addr_shift; /* NTS: Remember the bizarre 4 x 4 mode most SVGA chipsets do */ + break; + case M_VGA: + /* TODO: Various SVGA chipsets have a bit to enable/disable 256KB wrapping */ + if (vga.config.compatible_chain4 || svgaCard == SVGA_None) + vga.draw.linear_mask = 0x3ffffu; + else + vga.draw.linear_mask = vga.mem.memmask; - if (svgaCard == SVGA_TsengET3K || svgaCard == SVGA_TsengET4K) { - if (vga.config.addr_shift == 1) /* NTS: Remember the ET4K steps by 4 pixels, one per byteplane, treats BYTE and DWORD modes the same */ + if (svgaCard == SVGA_TsengET3K || svgaCard == SVGA_TsengET4K) { + if (vga.config.addr_shift == 1) /* NTS: Remember the ET4K steps by 4 pixels, one per byteplane, treats BYTE and DWORD modes the same */ + vga.draw.address *= 2u; + } + else if (machine == MCH_MCGA) { + vga.draw.linear_mask = 0xffffu; vga.draw.address *= 2u; - } - else if (machine == MCH_MCGA) { - vga.draw.linear_mask = 0xffffu; - vga.draw.address *= 2u; - break;// don't fall through - } - else { - vga.draw.address *= (Bitu)1u << (Bitu)vga.config.addr_shift; /* NTS: Remember the bizarre 4 x 4 mode most SVGA chipsets do */ - } - /* fall through */ - case M_LIN8: - if (svgaCard == SVGA_TsengET3K || svgaCard == SVGA_TsengET4K) { - // HACK: Disable 256KB VGA masking if we detect the SVGA modes. - if (vga.attr.mode_control & 1) { - if (vga.gfx.mode & 0x40) { - if (!(vga.attr.mode_control & 0x40)) { - vga.draw.linear_mask = vga.mem.memmask; // SVGA text mode + break;// don't fall through + } + else { + vga.draw.address *= (Bitu)1u << (Bitu)vga.config.addr_shift; /* NTS: Remember the bizarre 4 x 4 mode most SVGA chipsets do */ + } + /* fall through */ + case M_LIN8: + if (svgaCard == SVGA_TsengET3K || svgaCard == SVGA_TsengET4K) { + // HACK: Disable 256KB VGA masking if we detect the SVGA modes. + if (vga.attr.mode_control & 1) { + if (vga.gfx.mode & 0x40) { + if (!(vga.attr.mode_control & 0x40)) { + vga.draw.linear_mask = vga.mem.memmask; // SVGA text mode + } } } } - } - /* fall through */ - case M_LIN15: - case M_LIN16: - case M_LIN24: - case M_LIN32: - vga.draw.byte_panning_shift = 4; - vga.draw.address += vga.draw.bytes_skip; - vga.draw.address *= vga.draw.byte_panning_shift; - vga.draw.address += vga.draw.panning; - break; - case M_PACKED4: - vga.draw.byte_panning_shift = 4u; - vga.draw.address += vga.draw.bytes_skip; - vga.draw.address *= vga.draw.byte_panning_shift; - break; - case M_PC98: - vga.draw.linear_mask = 0xfff; // 1 page - vga.draw.byte_panning_shift = 2; - vga.draw.address += vga.draw.bytes_skip; - vga.draw.cursor.address = vga.config.cursor_start; - break; - case M_TEXT: - vga.draw.byte_panning_shift = 2; - vga.draw.address += vga.draw.bytes_skip; - // fall-through - case M_TANDY_TEXT: - case M_HERC_TEXT: - if (machine==MCH_HERC && hercCard == HERC_InColor) vga.draw.linear_mask = 0x3fff; // 1 page x 4 bitplanes - else if (machine==MCH_HERC || machine==MCH_MDA) vga.draw.linear_mask = 0xfff; // 1 page - else if (IS_EGAVGA_ARCH || machine == MCH_MCGA) { - if (vga.config.compatible_chain4 || svgaCard == SVGA_None) - vga.draw.linear_mask = vga.mem.memmask & 0x3ffff; - else - vga.draw.linear_mask = vga.mem.memmask; // SVGA text mode - } - else vga.draw.linear_mask = 0x3fff; // CGA, Tandy 4 pages - if (IS_EGAVGA_ARCH) { - vga.draw.cursor.address=vga.config.cursor_start<> 4u)) ? - 0 : 0xffffffff; - /* if blinking is enabled, 'blink' will toggle between true - * and false. Otherwise it's true */ - vga.draw.blink = ((vga.draw.blinking & (unsigned int)(vga.draw.cursor.count >> 4u)) - || !vga.draw.blinking) ? true:false; - break; - case M_HERC_GFX: - if (machine==MCH_HERC && hercCard == HERC_InColor) vga.draw.linear_mask = 0x1ffff; // 32KB x 4 bitplanes - // fall through - case M_CGA4: - case M_CGA2: - case M_DCGA: - // 2023/04/26: This path M_CGA2 is no longer set for EGA/VGA. - vga.draw.address=(vga.draw.address*2u)&0x1fffu; - break; - case M_AMSTRAD: // Base address: No difference? - vga.draw.address=(vga.draw.address*2u)&0xffffu; - break; - case M_CGA16: - case M_TANDY2:case M_TANDY4:case M_TANDY16: - vga.draw.address *= 2u; - break; - default: - break; - } + /* check for blinking and blinking change delay */ + FontMask[1]=(vga.draw.blinking & (unsigned int)(vga.draw.cursor.count >> 4u)) ? + 0 : 0xffffffff; + /* if blinking is enabled, 'blink' will toggle between true + * and false. Otherwise it's true */ + vga.draw.blink = ((vga.draw.blinking & (unsigned int)(vga.draw.cursor.count >> 4u)) + || !vga.draw.blinking) ? true:false; + break; + case M_HERC_GFX: + if (machine==MCH_HERC && hercCard == HERC_InColor) vga.draw.linear_mask = 0x1ffff; // 32KB x 4 bitplanes + // fall through + case M_CGA4: + case M_CGA2: + case M_DCGA: + // 2023/04/26: This path M_CGA2 is no longer set for EGA/VGA. + vga.draw.address=(vga.draw.address*2u)&0x1fffu; + break; + case M_AMSTRAD: // Base address: No difference? + vga.draw.address=(vga.draw.address*2u)&0xffffu; + break; + case M_CGA16: + case M_TANDY2:case M_TANDY4:case M_TANDY16: + vga.draw.address *= 2u; + break; + default: + break; + } - /* EGA/VGA have a memory mode bit that enables >64KB. - * We have to emulate this bit in order for 640x350x4 EGA mode to work */ - if (IS_EGAVGA_ARCH && !(vga.seq.memory_mode&2/*Extended Memory*/) && !(vga_ignore_extended_memory_bit && IS_VGA_ARCH)) - vga.draw.linear_mask &= 0xFFFFu; + /* EGA/VGA have a memory mode bit that enables >64KB. + * We have to emulate this bit in order for 640x350x4 EGA mode to work */ + if (IS_EGAVGA_ARCH && !(vga.seq.memory_mode&2/*Extended Memory*/) && !(vga_ignore_extended_memory_bit && IS_VGA_ARCH)) + vga.draw.linear_mask &= 0xFFFFu; - if (IS_EGAVGA_ARCH) - vga.draw.planar_mask = vga.draw.linear_mask >> 2; - else if (machine == MCH_HERC && hercCard >= HERC_InColor) - vga.draw.planar_mask = vga.draw.linear_mask >> 2; - else - vga.draw.planar_mask = vga.draw.linear_mask >> 1; - - /* ET4000 High Sierra DAC programs can change SVGA mode */ - if ((vga.mode == M_LIN15 || vga.mode == M_LIN16) && (svgaCard == SVGA_TsengET3K || svgaCard == SVGA_TsengET4K)) { - if (et4k_highcolor_half_pixel_rate()) - VGA_DrawLine=VGA_Draw_LIN16_Line_2x; + if (IS_EGAVGA_ARCH) + vga.draw.planar_mask = vga.draw.linear_mask >> 2; + else if (machine == MCH_HERC && hercCard >= HERC_InColor) + vga.draw.planar_mask = vga.draw.linear_mask >> 2; else - VGA_DrawLine=VGA_Draw_LIN16_Line_HWMouse; - } + vga.draw.planar_mask = vga.draw.linear_mask >> 1; - // check if some lines at the top off the screen are blanked - float draw_skip = 0.0; - if (GCC_UNLIKELY(vga.draw.vblank_skip > 0)) { - draw_skip = (float)(vga.draw.delay.htotal * vga.draw.vblank_skip); - vga.draw.address_line += (vga.draw.vblank_skip % vga.draw.address_line_total); - vga.draw.address += vga.draw.address_add * (vga.draw.vblank_skip / vga.draw.address_line_total); + /* ET4000 High Sierra DAC programs can change SVGA mode */ + if ((vga.mode == M_LIN15 || vga.mode == M_LIN16) && (svgaCard == SVGA_TsengET3K || svgaCard == SVGA_TsengET4K)) { + if (et4k_highcolor_half_pixel_rate()) + VGA_DrawLine=VGA_Draw_LIN16_Line_2x; + else + VGA_DrawLine=VGA_Draw_LIN16_Line_HWMouse; + } + + // check if some lines at the top off the screen are blanked + if (GCC_UNLIKELY(vga.draw.vblank_skip > 0)) { + draw_skip = (float)(vga.draw.delay.htotal * vga.draw.vblank_skip); + vga.draw.address_line += (vga.draw.vblank_skip % vga.draw.address_line_total); + vga.draw.address += vga.draw.address_add * (vga.draw.vblank_skip / vga.draw.address_line_total); + } + + /* do VGA split now if line compare <= 0. NTS: vga.draw.split_line is defined as Bitu (unsigned integer) so we need the typecast. */ + if (GCC_UNLIKELY((Bits)vga.draw.split_line <= 0) && machine != MCH_PC98 && !vga.dosboxig.svga) { + VGA_ProcessSplit(); + + /* if vblank_skip != 0, line compare can become a negative value! Fixes "Warlock" 1992 demo by Warlock */ + if (GCC_UNLIKELY((Bits)vga.draw.split_line < 0)) { + vga.draw.address_line += (Bitu)(-((Bits)vga.draw.split_line) % (Bits)vga.draw.address_line_total); + vga.draw.address += vga.draw.address_add * (Bitu)(-((Bits)vga.draw.split_line) / (Bits)vga.draw.address_line_total); + } + } } - /* do VGA split now if line compare <= 0. NTS: vga.draw.split_line is defined as Bitu (unsigned integer) so we need the typecast. */ - if (GCC_UNLIKELY((Bits)vga.draw.split_line <= 0) && machine != MCH_PC98) { - VGA_ProcessSplit(); + // default catch all memory access to trigger updates + vga.draw.draw_base_planar = 0; + vga.draw.draw_base_size = 0xFFFFFFFFu; + + if (IS_PC98_ARCH) { + // TODO + } + // EGA/VGA: The mem write range check must be kept simple! if ((addr-base) < size)... anything more complex will slow emulation down. + // That means if the line compare is in use to split the screen (Epic Pinball) then we have to set the range to count any change + // from VGA base memory to line compare as visible. + // + // NTS: address_add was already multiplied by 1 << addr_shift + // + // FIXME: This works for standard VGA modes but does not take SVGA bank switching into account! + // Perhaps this should move into a central function that both vertical timer and the SVGA bank switching handling + // can call to correctly map planar writes (0xA0000-0xBFFFF) to the vga draw address to determine when writes lie + // within the visible video memory. + else if (IS_EGAVGA_ARCH) { + if (vga.draw.split_line < vga.draw.height) { + vga.draw.draw_base_planar = 0; + vga.draw.draw_base_size = vga.draw.address + + (vga.draw.address_add * + ((vga.draw.split_line + vga.draw.address_line_total - 1) / vga.draw.address_line_total)); + } + else { + vga.draw.draw_base_planar = vga.draw.address; + vga.draw.draw_base_size = vga.draw.address_add * + ((vga.draw.height + vga.draw.address_line_total - 1) / vga.draw.address_line_total); + } - /* if vblank_skip != 0, line compare can become a negative value! Fixes "Warlock" 1992 demo by Warlock */ - if (GCC_UNLIKELY((Bits)vga.draw.split_line < 0)) { - vga.draw.address_line += (Bitu)(-((Bits)vga.draw.split_line) % (Bits)vga.draw.address_line_total); - vga.draw.address += vga.draw.address_add * (Bitu)(-((Bits)vga.draw.split_line) / (Bits)vga.draw.address_line_total); + // FIXME: The planar render code counts bytes in vram buffer, not planar bytes. + // M_EGA/M_LIN4 should count by planar bytes as it does now for the DOSBox IG version of planar 16-color. + if (vga.mode == M_EGA || vga.mode == M_LIN4) { + vga.draw.draw_base_planar >>= 2u; + vga.draw.draw_base_size >>= 2u; } + else if (vga.mode == M_VGA) { + vga.draw.draw_base_planar >>= 2u; + vga.draw.draw_base_size >>= 2u; + } + } + else { + // TODO } +#if 0//DEBUG + if (vga.draw.draw_base_size != 0) { + LOG(LOG_MISC,LOG_DEBUG)("VGA draw mem planar check 0x%x-0x%x", + (unsigned int)vga.draw.draw_base_planar,(unsigned int)vga.draw.draw_base_planar+vga.draw.draw_base_size-1u); + } + else { + LOG(LOG_MISC,LOG_DEBUG)("VGA draw mem planar check disabled"); + } +#endif + // NTS: To be moved if (autosave_second>0&&enable_autosave) { uint32_t ticksNew=GetTicks(); @@ -6426,29 +6834,10 @@ static void VGA_VerticalTimer(Bitu /*val*/) { } #endif - if (video_debug_overlay && render.src.height > vga.draw.height && vga.draw.bpp == render.src.bpp) - VGA_debug_screen_resize(render.src.width,render.src.height - vga.draw.height,vga.draw.bpp); - else - VGA_debug_screen_free(); - - if (video_debug_overlay && VGA_debug_screen) { - VGA_debug_screen_func->clear(0); - VGA_sof_debug_video_info(); - } - // add the draw event switch (vga.draw.mode) { case DRAWLINE: case EGALINE: - if (GCC_UNLIKELY(vga.draw.lines_done < vga.draw.lines_total)) { - LOG(LOG_VGAMISC,LOG_NORMAL)( "Lines left: %d", - (int)(vga.draw.lines_total-vga.draw.lines_done)); - if (vga.draw.mode==EGALINE) PIC_RemoveEvents(VGA_DrawEGASingleLine); - else PIC_RemoveEvents(VGA_DrawSingleLine); - vga_mode_frames_since_time_base++; - RENDER_EndUpdate(true); - } - vga.draw.lines_done = 0; if (!is_vga_rendering_on_demand) { if (vga.draw.mode==EGALINE) PIC_AddEvent(VGA_DrawEGASingleLine,(float)(vga.draw.delay.htotal/4.0 + draw_skip)); @@ -6492,6 +6881,11 @@ void VGA_ResetDebugOverrides(void) { } void VGA_CheckScanLength(void) { + if (vga.dosboxig.svga) { + vga.draw.address_add=vga.dosboxig.bytes_per_scanline; + return; + } + switch (vga.mode) { case M_EGA: case M_LIN4: @@ -6657,6 +7051,9 @@ static bool isSVGAMode(void) { return true; } + if (vga.dosboxig.svga) + return true; + return false; } @@ -6675,15 +7072,25 @@ void ChooseRenderOnDemand(void) { vga_render_on_demand = true; else if (machine == MCH_MDA || machine == MCH_HERC) /* I don't believe raster effects are used for MDA and all variants of Hercules cards text or otherwise */ vga_render_on_demand = true; + else if (vga_render_wait_for_changes > 0) /* NTS: Wait for changes requires render on demand. Only if explicitly enabled. */ + vga_render_on_demand = true; else vga_render_on_demand = false; + if (vga_render_on_demand) + vga_render_wait_for_changes = vga_render_wait_for_changes_user > 0; + else + vga_render_wait_for_changes = false; + LOG(LOG_VGAMISC,LOG_DEBUG)("Render On Demand mode is %s for RodU %d",vga_render_on_demand?"on":"off",vga_render_on_demand_user); + LOG(LOG_VGAMISC,LOG_DEBUG)("Wait for changes mode is %s for SrinC %d",vga_render_wait_for_changes?"on":"off",vga_render_wait_for_changes_user); } extern int _refreshRateNumerator; extern int _refreshRateDenominator; +bool RENDER_IsScalerCompatibleWithDoublescan(void); + void VGA_SetupDrawing(Bitu /*val*/) { if (vga.mode==M_ERROR) { PIC_RemoveEvents(VGA_VerticalTimer); @@ -6695,7 +7102,10 @@ void VGA_SetupDrawing(Bitu /*val*/) { // multiscan -- zooming effects - only makes sense if linewise is enabled // linewise -- scan display line by line instead of 4 blocks // keep compatibility with other builds of DOSBox for vgaonly. + is_vga_rendering_on_demand = vga_render_on_demand; + vga.draw.must_complete_frame = true; vga.draw.doublescan_effect = true; + vga.draw.must_draw_again = false; vga.draw.render_step = 0; vga.draw.render_max = 1; @@ -6909,6 +7319,24 @@ void VGA_SetupDrawing(Bitu /*val*/) { * I am not able to test against the Windows drivers at this time. */ if ((svgaCard == SVGA_TsengET3K || svgaCard == SVGA_TsengET4K) && et4k_highcolor_half_pixel_rate()) clock /= 2; + + if (vga.dosboxig.svga && vga.dosboxig.width != 0 && vga.dosboxig.height != 0) { + htotal = hdend = hbend = hbstart = hrstart = hrend = vga.dosboxig.width; + vtotal = vdend = vbend = vbstart = vrstart = vrend = vga.dosboxig.height * (1 + vga.dosboxig.vscale); + clock = oscclock; + + htotal += vga.dosboxig.wa_total; + hbend += vga.dosboxig.wa_total; + hrstart += (vga.dosboxig.wa_total / 3); + hrend += (vga.dosboxig.wa_total / 3) * 2; + + vtotal += vga.dosboxig.ha_total; + vbend += vga.dosboxig.ha_total; + vrstart += (vga.dosboxig.ha_total / 3); + vrend += (vga.dosboxig.ha_total / 3) * 2; + + LOG(LOG_MISC,LOG_DEBUG)("DOSBOX IG w=%u h=%u",vga.dosboxig.width,vga.dosboxig.height); + } } else { // not EGAVGA_ARCH vga.draw.split_line = 0x10000; // don't care @@ -7015,7 +7443,12 @@ void VGA_SetupDrawing(Bitu /*val*/) { /* force the VGA refresh rate by setting fps and bending the clock to our will */ LOG(LOG_VGA,LOG_NORMAL)("VGA forced refresh rate in effect, %.3f",vga_force_refresh_rate); fps=vga_force_refresh_rate; - clock=((double)(vtotal*htotal))*fps; + oscclock=clock=((double)(vtotal*htotal))*fps; + } + else if ((vga.dosboxig.svga || vga.dosboxig.override_refresh) && vga.dosboxig.vratefp16 >= 0x10000ul/*at least 1.0fps*/) { + fps=(double)vga.dosboxig.vratefp16 / 65536.0; + oscclock=clock=((double)(vtotal*htotal))*fps; + LOG(LOG_VGA,LOG_NORMAL)("VGA refresh rate is now, %.3f (DOSBox Integrated Graphics)",fps); } else { // The screen refresh frequency @@ -7140,7 +7573,27 @@ void VGA_SetupDrawing(Bitu /*val*/) { Bitu width=hdend; Bitu height=vdend; - if (IS_EGAVGA_ARCH || IS_PC98_ARCH) { + if (vga.dosboxig.svga) { + vga.draw.address_add = vga.dosboxig.bytes_per_scanline; + vga.draw.address_line_total = 1 + vga.dosboxig.vscale; + vga.draw.render_max = 1; + + /* if doublescan=false and line_total is even, then halve the height. + * the VGA raster scan will skip every other line to accommodate that. */ + vga.draw.doublescan_effect = vga.draw.doublescan_set; + + /* If the user selected a scalar that expects to process pixels beyond duplication or CRT emulation, disable doublescan */ + if (vga.draw.doublescan_effect && !RENDER_IsScalerCompatibleWithDoublescan()) { + LOG(LOG_VGA,LOG_DEBUG)("Render scaler requires disabling doublescan mode"); + vga.draw.doublescan_effect = false; + } + + if ((!vga.draw.doublescan_effect) && (vga.draw.address_line_total & 1) == 0) + height /= 2; + else + vga.draw.doublescan_effect = true; + } + else if (IS_EGAVGA_ARCH || IS_PC98_ARCH) { vga.draw.address_line_total=(vga.crtc.maximum_scan_line&0x1fu)+1u; switch(vga.mode) { case M_CGA16: @@ -7152,6 +7605,12 @@ void VGA_SetupDrawing(Bitu /*val*/) { default: vga.draw.doublescan_effect = vga.draw.doublescan_set; + /* If the user selected a scalar that expects to process pixels beyond duplication or CRT emulation, disable doublescan */ + if (vga.draw.doublescan_effect && !RENDER_IsScalerCompatibleWithDoublescan()) { + LOG(LOG_VGA,LOG_DEBUG)("Render scaler requires disabling doublescan mode"); + vga.draw.doublescan_effect = false; + } + if (vga.crtc.maximum_scan_line & 0x80) vga.draw.address_line_total *= 2; @@ -7195,7 +7654,10 @@ void VGA_SetupDrawing(Bitu /*val*/) { * on SVGA hardware. Without this check, those demos will show * credits that scroll upward to blackness before "popping" back * onto the screen. */ - if (IS_VGA_ARCH) { + if (vga.dosboxig.svga) { + /* no restrictions */ + } + else if (IS_VGA_ARCH) { /* NTS: S3 emulation ties "compatible chain4" to CRTC register 31 bit 3 which controls * whether access to > 256KB of video RAM is enabled, which is why it's used here */ if (vga.config.compatible_chain4 || svgaCard == SVGA_None) @@ -7211,335 +7673,384 @@ void VGA_SetupDrawing(Bitu /*val*/) { vga.draw.planar_mask = vga.draw.linear_mask >> 1; Bitu pix_per_char = 8; - switch (vga.mode) { - case M_VGA: - // hack for tgr2 -hc high color mode demo - if (vga.dac.reg02==0x80) { - bpp=16; - vga.mode=M_LIN16; - VGA_SetupHandlers(); - VGA_DrawLine=VGA_Draw_LIN16_Line_2x; + if (vga.dosboxig.svga) { + pix_per_char = 1; + VGA_DrawRawLine = NULL;//FIXME + + if (vga.dosboxig.vidformat == DBIGVF_NONE) { + VGA_DrawLine = VGA_Draw_DOSBOXIG_None; + bpp = 8; + } + else { + switch (vga.mode) { + case M_CGA2: // this is used for 1bpp + bpp = 32; + VGA_DrawLine = VGA_Draw_DOSBOXIG_1bpp; + break; + case M_PACKED4: + bpp = 32; + VGA_DrawLine = VGA_Draw_DOSBOXIG_4bpp; + break; + case M_LIN4: + case M_EGA: + bpp = 32; + VGA_DrawLine = VGA_Draw_DOSBOXIG_1bpp4plane; + break; + case M_VGA: // 8bpp + case M_LIN8: + bpp = 32; + VGA_DrawLine = VGA_Draw_DOSBOXIG_8bpp; + break; + case M_LIN15: + case M_LIN16: + VGA_DrawLine = VGA_Draw_DOSBOXIG_16bpp; + break; + case M_LIN24: + VGA_DrawLine = VGA_Draw_DOSBOXIG_24bpp; + break; + case M_LIN32: + if (vga.dosboxig.vidformat == DBIGVF_32BPP10) + VGA_DrawLine = VGA_Draw_DOSBOXIG_32bpp10; + else + VGA_DrawLine = VGA_Draw_DOSBOXIG_32bpp; + break; + default: + LOG(LOG_VGA,LOG_ERROR)("Unhandled VGA mode %d while checking for resolution",vga.mode); + break; + } + } + } + else { + switch (vga.mode) { + case M_VGA: + // hack for tgr2 -hc high color mode demo + if (vga.dac.reg02==0x80) { + bpp=16; + vga.mode=M_LIN16; + VGA_SetupHandlers(); + VGA_DrawLine=VGA_Draw_LIN16_Line_2x; + pix_per_char = 4; + break; + } + bpp = 32; pix_per_char = 4; + if (vga.mode == M_VGA && (svgaCard == SVGA_TsengET3K || svgaCard == SVGA_TsengET4K)) { + /* ET4000 chipsets handle the chained mode (in my opinion) with sanity and we can scan linearly for it. + * Chained VGA mode maps planar byte addr = (addr >> 2) and plane = (addr & 3) */ + VGA_DrawLine = VGA_Draw_Xlat32_Linear_Line; + VGA_DrawRawLine = VGA_RawDraw_Xlat32_Linear_Line; + } + else if (machine == MCH_MCGA) { + pix_per_char = 8; + VGA_DrawLine = VGA_Draw_Xlat32_Linear_Line; + VGA_DrawRawLine = VGA_RawDraw_Xlat32_Linear_Line; + vga.tandy.draw_base = vga.mem.linear; + vga.draw.address_line_total = 1; + } + else { + /* other SVGA chipsets appear to handle chained mode by writing 4 pixels to 4 planes, and showing + * only every 4th byte, which is why when you switch the CRTC to byte or word mode on these chipsets, + * you see 16-pixel groups with 4 pixels from the chained display you expect followed by 12 pixels + * of whatever contents of memory remain. but when you unchain the bitplanes the card will allow + * "planar" writing to all 16 pixels properly. Chained VGA maps like planar byte = (addr & ~3) and + * plane = (addr & 3) */ + VGA_DrawLine = VGA_Draw_Xlat32_VGA_CRTC_bmode_Line; + VGA_DrawRawLine = VGA_RawDraw_Xlat32_VGA_CRTC_bmode_Line; + } break; - } - bpp = 32; - pix_per_char = 4; - if (vga.mode == M_VGA && (svgaCard == SVGA_TsengET3K || svgaCard == SVGA_TsengET4K)) { - /* ET4000 chipsets handle the chained mode (in my opinion) with sanity and we can scan linearly for it. - * Chained VGA mode maps planar byte addr = (addr >> 2) and plane = (addr & 3) */ - VGA_DrawLine = VGA_Draw_Xlat32_Linear_Line; - VGA_DrawRawLine = VGA_RawDraw_Xlat32_Linear_Line; - } - else if (machine == MCH_MCGA) { - pix_per_char = 8; + case M_LIN8: + bpp = 32; VGA_DrawLine = VGA_Draw_Xlat32_Linear_Line; VGA_DrawRawLine = VGA_RawDraw_Xlat32_Linear_Line; - vga.tandy.draw_base = vga.mem.linear; - vga.draw.address_line_total = 1; - } - else { - /* other SVGA chipsets appear to handle chained mode by writing 4 pixels to 4 planes, and showing - * only every 4th byte, which is why when you switch the CRTC to byte or word mode on these chipsets, - * you see 16-pixel groups with 4 pixels from the chained display you expect followed by 12 pixels - * of whatever contents of memory remain. but when you unchain the bitplanes the card will allow - * "planar" writing to all 16 pixels properly. Chained VGA maps like planar byte = (addr & ~3) and - * plane = (addr & 3) */ - VGA_DrawLine = VGA_Draw_Xlat32_VGA_CRTC_bmode_Line; - VGA_DrawRawLine = VGA_RawDraw_Xlat32_VGA_CRTC_bmode_Line; - } - break; - case M_LIN8: - bpp = 32; - VGA_DrawLine = VGA_Draw_Xlat32_Linear_Line; - VGA_DrawRawLine = VGA_RawDraw_Xlat32_Linear_Line; - if ((vga.s3.reg_3a & 0x10)||(svgaCard!=SVGA_S3Trio)) - pix_per_char = 8; // TODO fiddle out the bits for other svga cards - else - pix_per_char = 4; + if ((vga.s3.reg_3a & 0x10)||(svgaCard!=SVGA_S3Trio)) + pix_per_char = 8; // TODO fiddle out the bits for other svga cards + else + pix_per_char = 4; - VGA_ActivateHardwareCursor(); - break; - case M_LIN24: - case M_LIN32: - VGA_ActivateHardwareCursor(); - break; - case M_LIN15: - case M_LIN16: - pix_per_char = 4; // 15/16 bpp modes double the horizontal values - VGA_ActivateHardwareCursor(); - break; - case M_PACKED4: - bpp = 32; - vga.draw.blocks = width; - VGA_DrawLine = VGA_Draw_VGA_Packed4_Xlat32_Line; - break; - case M_LIN4: - case M_EGA: - vga.draw.blocks = width; - if (IS_EGA_ARCH) { - if (vga.gfx.mode & 0x20) { - VGA_DrawLine = EGA_Draw_2BPP_Line_as_EGA; - VGA_DrawRawLine = VGA_RawDraw_2BPP_Line_as_VGA; - } - else if (vga.config.addr_shift >= 1/*word mode*/ && (vga.seq.clocking_mode & 0x04/*load every other clock cycle*/) && - (vga.crtc.mode_control & 0x08/*increase memory address every other character clock*/)) { - VGA_DrawLine = EGA_Draw_VGA_Planar_Xlat8_LineOddEven; - VGA_DrawRawLine = VGA_RawDraw_VGA_Planar_Xlat32_Line;//TODO - vga.draw.blocks = (width+1u)>>1u; + VGA_ActivateHardwareCursor(); + break; + case M_LIN24: + case M_LIN32: + VGA_ActivateHardwareCursor(); + break; + case M_LIN15: + case M_LIN16: + pix_per_char = 4; // 15/16 bpp modes double the horizontal values + VGA_ActivateHardwareCursor(); + break; + case M_PACKED4: + bpp = 32; + vga.draw.blocks = width; + VGA_DrawLine = VGA_Draw_VGA_Packed4_Xlat32_Line; + break; + case M_LIN4: + case M_EGA: + vga.draw.blocks = width; + if (IS_EGA_ARCH) { + if (vga.gfx.mode & 0x20) { + VGA_DrawLine = EGA_Draw_2BPP_Line_as_EGA; + VGA_DrawRawLine = VGA_RawDraw_2BPP_Line_as_VGA; + } + else if (vga.config.addr_shift >= 1/*word mode*/ && (vga.seq.clocking_mode & 0x04/*load every other clock cycle*/) && + (vga.crtc.mode_control & 0x08/*increase memory address every other character clock*/)) { + VGA_DrawLine = EGA_Draw_VGA_Planar_Xlat8_LineOddEven; + VGA_DrawRawLine = VGA_RawDraw_VGA_Planar_Xlat32_Line;//TODO + vga.draw.blocks = (width+1u)>>1u; + } + else { + VGA_DrawLine = EGA_Draw_VGA_Planar_Xlat8_Line; + VGA_DrawRawLine = VGA_RawDraw_VGA_Planar_Xlat32_Line; + } + bpp = 8; } else { - VGA_DrawLine = EGA_Draw_VGA_Planar_Xlat8_Line; - VGA_DrawRawLine = VGA_RawDraw_VGA_Planar_Xlat32_Line; - } - bpp = 8; - } - else { - if (vga.gfx.mode & 0x20) { - VGA_DrawLine = VGA_Draw_2BPP_Line_as_VGA; - VGA_DrawRawLine = VGA_RawDraw_2BPP_Line_as_VGA; + if (vga.gfx.mode & 0x20) { + VGA_DrawLine = VGA_Draw_2BPP_Line_as_VGA; + VGA_DrawRawLine = VGA_RawDraw_2BPP_Line_as_VGA; + } + else if (vga.config.addr_shift >= 1/*word mode*/ && (vga.seq.clocking_mode & 0x04/*load every other clock cycle*/) && + (vga.crtc.mode_control & 0x08/*increase memory address every other character clock*/)) { + VGA_DrawLine = VGA_Draw_VGA_Planar_Xlat8_LineOddEven; + VGA_DrawRawLine = VGA_RawDraw_VGA_Planar_Xlat32_Line;//TODO + vga.draw.blocks = (width+1u)>>1u; + } + else { + VGA_DrawLine = VGA_Draw_VGA_Planar_Xlat32_Line; + VGA_DrawRawLine = VGA_RawDraw_VGA_Planar_Xlat32_Line; + } + bpp = 32; } - else if (vga.config.addr_shift >= 1/*word mode*/ && (vga.seq.clocking_mode & 0x04/*load every other clock cycle*/) && - (vga.crtc.mode_control & 0x08/*increase memory address every other character clock*/)) { - VGA_DrawLine = VGA_Draw_VGA_Planar_Xlat8_LineOddEven; - VGA_DrawRawLine = VGA_RawDraw_VGA_Planar_Xlat32_Line;//TODO - vga.draw.blocks = (width+1u)>>1u; + break; + case M_CGA16: + vga.draw.blocks=width*2; + pix_per_char = 16; + VGA_DrawLine=VGA_Draw_CGA16_Line; + break; + case M_CGA4: + // 2023/04/26: This path M_CGA2 is no longer set for EGA/VGA. + if (machine == MCH_MCGA) { + vga.draw.blocks=width*2; + VGA_DrawLine=VGA_Draw_2BPP_Line_as_MCGA; + bpp = 32; + + /* MCGA CGA-compatible modes will always refer to the last half of the 64KB of RAM */ + vga.tandy.draw_base = vga.mem.linear + 0x8000; } else { - VGA_DrawLine = VGA_Draw_VGA_Planar_Xlat32_Line; - VGA_DrawRawLine = VGA_RawDraw_VGA_Planar_Xlat32_Line; + VGA_DrawLine=VGA_Draw_2BPP_Line; + VGA_DrawRawLine=VGA_RawDraw_2BPP_Line; + vga.draw.blocks=width*2; } + break; + case M_DCGA: + // if (IS_EGAVGA_ARCH && J3_IsCga4Dcga()) ... + vga.draw.blocks=width; + VGA_DrawLine=VGA_Draw_1BPP_Line_as_VGA_J3_Cga4Dcga; bpp = 32; - } - break; - case M_CGA16: - vga.draw.blocks=width*2; - pix_per_char = 16; - VGA_DrawLine=VGA_Draw_CGA16_Line; - break; - case M_CGA4: - // 2023/04/26: This path M_CGA2 is no longer set for EGA/VGA. - if (machine == MCH_MCGA) { - vga.draw.blocks=width*2; - VGA_DrawLine=VGA_Draw_2BPP_Line_as_MCGA; + break; + case M_CGA2: + // CGA 2-color mode on EGA/VGA is just EGA 16-color planar mode with one bitplane enabled and a + // color palette to match. Therefore CGA 640x200 2-color mode can be rendered correctly using + // the 16-color planar renderer. The MEM13 bit is configured to replace address bit 13 with + // character row counter bit 0 to match CGA memory layout, doublescan is set (as if 320x200), + // max_scanline is set to 1 (2 lines). + // + // 2023/04/26: This path M_CGA2 is no longer set for EGA/VGA. + if (machine == MCH_MCGA) { + vga.draw.blocks=width; + VGA_DrawLine=VGA_Draw_1BPP_Line_as_MCGA; + VGA_DrawRawLine=VGA_RawDraw_1BPP_Line_as_MCGA; + pix_per_char = 16; + bpp = 32; + + /* MCGA CGA-compatible modes will always refer to the last half of the 64KB of RAM */ + if (vga.other.mcga_mode_control & 3) // 320x200 256-color or 640x480 2-color + vga.tandy.draw_base = vga.mem.linear; + else + vga.tandy.draw_base = vga.mem.linear + 0x8000; + + if (vga.other.mcga_mode_control & 2) // 640x480 2-color + vga.draw.address_line_total = 1; + } + else { + VGA_DrawLine=VGA_Draw_1BPP_Line; + VGA_DrawRawLine=VGA_RawDraw_1BPP_Line; + vga.draw.blocks=width*2; + } + break; + case M_PC98: + vga.draw.blocks=width; + vga.draw.char9dot = false; + VGA_DrawLine=VGA_PC98_Xlat32_Draw_Line; + VGA_DrawRawLine=VGA_PC98_Xlat32_RawDraw_Line; bpp = 32; + break; + case M_TEXT: + vga.draw.blocks=width; + // if char9_set is true, allow 9-pixel wide fonts + if (isJEGAEnabled()) { //if Kanji Text Disable is off + vga.draw.char9dot = false; + } + else if ((vga.seq.clocking_mode&0x01) || !vga.draw.char9_set) { + // 8-pixel wide + pix_per_char = 8; + vga.draw.char9dot = false; + } else { + // 9-pixel wide + pix_per_char = 9; + vga.draw.char9dot = true; + } - /* MCGA CGA-compatible modes will always refer to the last half of the 64KB of RAM */ - vga.tandy.draw_base = vga.mem.linear + 0x8000; - } - else { - VGA_DrawLine=VGA_Draw_2BPP_Line; - VGA_DrawRawLine=VGA_RawDraw_2BPP_Line; + /* FIXME: This is still peeking into DOS state, which should be turned into an INT 10h call or some such + * when KEYB or other utility changes code page, but it does not involve reading guest memory */ + if (IS_EGA_ARCH) { + VGA_DrawLine = EGA_TEXT_Xlat8_Draw_Line; + VGA_DrawRawLine = VGA_TEXT_Xlat32_RawDraw_Line; + bpp = 8; + } + else { + VGA_DrawLine = VGA_TEXT_Xlat32_Draw_Line; + VGA_DrawRawLine = VGA_TEXT_Xlat32_RawDraw_Line; + bpp = 32; + } + break; + case M_HERC_GFX: vga.draw.blocks=width*2; - } - break; - case M_DCGA: - // if (IS_EGAVGA_ARCH && J3_IsCga4Dcga()) ... - vga.draw.blocks=width; - VGA_DrawLine=VGA_Draw_1BPP_Line_as_VGA_J3_Cga4Dcga; - bpp = 32; - break; - case M_CGA2: - // CGA 2-color mode on EGA/VGA is just EGA 16-color planar mode with one bitplane enabled and a - // color palette to match. Therefore CGA 640x200 2-color mode can be rendered correctly using - // the 16-color planar renderer. The MEM13 bit is configured to replace address bit 13 with - // character row counter bit 0 to match CGA memory layout, doublescan is set (as if 320x200), - // max_scanline is set to 1 (2 lines). - // - // 2023/04/26: This path M_CGA2 is no longer set for EGA/VGA. - if (machine == MCH_MCGA) { - vga.draw.blocks=width; - VGA_DrawLine=VGA_Draw_1BPP_Line_as_MCGA; - VGA_DrawRawLine=VGA_RawDraw_1BPP_Line_as_MCGA; + if (hercCard >= HERC_InColor) { + VGA_DrawLine=VGA_Draw_HercInColor_Mono_1BPP_Line; + VGA_DrawRawLine=VGA_RawDraw_HercInColor_Mono_1BPP_Line; + } + else { + if (vga.herc.blend) VGA_DrawLine=VGA_Draw_1BPP_Blend_Line; + else VGA_DrawLine=VGA_Draw_1BPP_Line; + VGA_DrawRawLine=VGA_RawDraw_1BPP_Line; + } pix_per_char = 16; - bpp = 32; - - /* MCGA CGA-compatible modes will always refer to the last half of the 64KB of RAM */ - if (vga.other.mcga_mode_control & 3) // 320x200 256-color or 640x480 2-color - vga.tandy.draw_base = vga.mem.linear; - else - vga.tandy.draw_base = vga.mem.linear + 0x8000; + break; + case M_TANDY2: + if (((machine==MCH_PCJR)&&(vga.tandy.gfx_control & 0x8)) || + (vga.tandy.mode_control & 0x10)) { + vga.draw.blocks=width * 8; + pix_per_char = 16; + } else { + vga.draw.blocks=width * 4; + pix_per_char = 8; + } - if (vga.other.mcga_mode_control & 2) // 640x480 2-color - vga.draw.address_line_total = 1; - } - else { VGA_DrawLine=VGA_Draw_1BPP_Line; VGA_DrawRawLine=VGA_RawDraw_1BPP_Line; - vga.draw.blocks=width*2; - } - break; - case M_PC98: - vga.draw.blocks=width; - vga.draw.char9dot = false; - VGA_DrawLine=VGA_PC98_Xlat32_Draw_Line; - VGA_DrawRawLine=VGA_PC98_Xlat32_RawDraw_Line; - bpp = 32; - break; - case M_TEXT: - vga.draw.blocks=width; - // if char9_set is true, allow 9-pixel wide fonts - if (isJEGAEnabled()) { //if Kanji Text Disable is off - vga.draw.char9dot = false; - } - else if ((vga.seq.clocking_mode&0x01) || !vga.draw.char9_set) { - // 8-pixel wide - pix_per_char = 8; - vga.draw.char9dot = false; - } else { - // 9-pixel wide - pix_per_char = 9; - vga.draw.char9dot = true; - } - - /* FIXME: This is still peeking into DOS state, which should be turned into an INT 10h call or some such - * when KEYB or other utility changes code page, but it does not involve reading guest memory */ - if (IS_EGA_ARCH) { - VGA_DrawLine = EGA_TEXT_Xlat8_Draw_Line; - VGA_DrawRawLine = VGA_TEXT_Xlat32_RawDraw_Line; - bpp = 8; - } - else { - VGA_DrawLine = VGA_TEXT_Xlat32_Draw_Line; - VGA_DrawRawLine = VGA_TEXT_Xlat32_RawDraw_Line; - bpp = 32; - } - break; - case M_HERC_GFX: - vga.draw.blocks=width*2; - if (hercCard >= HERC_InColor) { - VGA_DrawLine=VGA_Draw_HercInColor_Mono_1BPP_Line; - VGA_DrawRawLine=VGA_RawDraw_HercInColor_Mono_1BPP_Line; - } - else { - if (vga.herc.blend) VGA_DrawLine=VGA_Draw_1BPP_Blend_Line; - else VGA_DrawLine=VGA_Draw_1BPP_Line; - VGA_DrawRawLine=VGA_RawDraw_1BPP_Line; - } - pix_per_char = 16; - break; - case M_TANDY2: - if (((machine==MCH_PCJR)&&(vga.tandy.gfx_control & 0x8)) || - (vga.tandy.mode_control & 0x10)) { - vga.draw.blocks=width * 8; - pix_per_char = 16; - } else { - vga.draw.blocks=width * 4; - pix_per_char = 8; - } - VGA_DrawLine=VGA_Draw_1BPP_Line; - VGA_DrawRawLine=VGA_RawDraw_1BPP_Line; + /* MCGA CGA-compatible modes will always refer to the last half of the 64KB of RAM */ + if (machine == MCH_MCGA) { + VGA_DrawLine=VGA_Draw_1BPP_Line_as_MCGA; + VGA_DrawRawLine=VGA_RawDraw_1BPP_Line_as_MCGA; + vga.draw.blocks=width * 2; + pix_per_char = 16; + bpp = 32; + + /* MCGA CGA-compatible modes will always refer to the last half of the 64KB of RAM */ + if (vga.other.mcga_mode_control & 3) // 320x200 256-color or 640x480 2-color + vga.tandy.draw_base = vga.mem.linear; + else + vga.tandy.draw_base = vga.mem.linear + 0x8000; + + if (vga.other.mcga_mode_control & 2) // 640x480 2-color + vga.draw.address_line_total = 1; + } - /* MCGA CGA-compatible modes will always refer to the last half of the 64KB of RAM */ - if (machine == MCH_MCGA) { - VGA_DrawLine=VGA_Draw_1BPP_Line_as_MCGA; - VGA_DrawRawLine=VGA_RawDraw_1BPP_Line_as_MCGA; + break; + case M_TANDY4: vga.draw.blocks=width * 2; - pix_per_char = 16; - bpp = 32; + pix_per_char = 8; + if ((machine==MCH_TANDY && (vga.tandy.gfx_control & 0x8)) || + (machine==MCH_PCJR && (vga.tandy.mode_control==0x0b))) { + VGA_DrawLine=VGA_Draw_2BPPHiRes_Line; + VGA_DrawRawLine=VGA_RawDraw_2BPPHiRes_Line; + } + else { + VGA_DrawLine=VGA_Draw_2BPP_Line; + VGA_DrawRawLine=VGA_RawDraw_2BPP_Line; + } /* MCGA CGA-compatible modes will always refer to the last half of the 64KB of RAM */ - if (vga.other.mcga_mode_control & 3) // 320x200 256-color or 640x480 2-color - vga.tandy.draw_base = vga.mem.linear; - else + if (machine == MCH_MCGA) { vga.tandy.draw_base = vga.mem.linear + 0x8000; + vga.draw.blocks=width * 2; + VGA_DrawLine=VGA_Draw_2BPP_Line_as_MCGA; + bpp = 32; + } - if (vga.other.mcga_mode_control & 2) // 640x480 2-color - vga.draw.address_line_total = 1; - } - - break; - case M_TANDY4: - vga.draw.blocks=width * 2; - pix_per_char = 8; - if ((machine==MCH_TANDY && (vga.tandy.gfx_control & 0x8)) || - (machine==MCH_PCJR && (vga.tandy.mode_control==0x0b))) { - VGA_DrawLine=VGA_Draw_2BPPHiRes_Line; - VGA_DrawRawLine=VGA_RawDraw_2BPPHiRes_Line; - } - else { - VGA_DrawLine=VGA_Draw_2BPP_Line; - VGA_DrawRawLine=VGA_RawDraw_2BPP_Line; - } - - /* MCGA CGA-compatible modes will always refer to the last half of the 64KB of RAM */ - if (machine == MCH_MCGA) { - vga.tandy.draw_base = vga.mem.linear + 0x8000; - vga.draw.blocks=width * 2; - VGA_DrawLine=VGA_Draw_2BPP_Line_as_MCGA; - bpp = 32; - } - - break; - case M_TANDY16: - if (vga.tandy.mode_control & 0x1) { - if (( machine==MCH_TANDY ) && ( vga.tandy.mode_control & 0x10 )) { - vga.draw.blocks=width*4; - pix_per_char = 8; + break; + case M_TANDY16: + if (vga.tandy.mode_control & 0x1) { + if (( machine==MCH_TANDY ) && ( vga.tandy.mode_control & 0x10 )) { + vga.draw.blocks=width*4; + pix_per_char = 8; + } else { + vga.draw.blocks=width*2; + pix_per_char = 4; + } + VGA_DrawLine=VGA_Draw_4BPP_Line; + VGA_DrawRawLine=VGA_RawDraw_4BPP_Line; } else { vga.draw.blocks=width*2; - pix_per_char = 4; + pix_per_char = 8; + VGA_DrawLine=VGA_Draw_4BPP_Line_Double; + VGA_DrawRawLine=VGA_RawDraw_4BPP_Line_Double; } - VGA_DrawLine=VGA_Draw_4BPP_Line; - VGA_DrawRawLine=VGA_RawDraw_4BPP_Line; - } else { - vga.draw.blocks=width*2; - pix_per_char = 8; - VGA_DrawLine=VGA_Draw_4BPP_Line_Double; - VGA_DrawRawLine=VGA_RawDraw_4BPP_Line_Double; - } - break; - case M_TANDY_TEXT: /* Also CGA */ - vga.draw.blocks=width; - if (machine==MCH_CGA /*&& !doublewidth*/ && enableCGASnow && (vga.tandy.mode_control & 1)/*80-column mode*/) - VGA_DrawLine=VGA_CGASNOW_TEXT_Draw_Line; /* Alternate version that emulates CGA snow */ - else - VGA_DrawLine=VGA_TEXT_Draw_Line; + break; + case M_TANDY_TEXT: /* Also CGA */ + vga.draw.blocks=width; + if (machine==MCH_CGA /*&& !doublewidth*/ && enableCGASnow && (vga.tandy.mode_control & 1)/*80-column mode*/) + VGA_DrawLine=VGA_CGASNOW_TEXT_Draw_Line; /* Alternate version that emulates CGA snow */ + else + VGA_DrawLine=VGA_TEXT_Draw_Line; - /* MCGA CGA-compatible modes will always refer to the last half of the 64KB of RAM */ - if (machine == MCH_MCGA) { - vga.tandy.draw_base = vga.mem.linear + 0x8000; - VGA_DrawLine = MCGA_TEXT_Draw_Line; - bpp = 32; - } + /* MCGA CGA-compatible modes will always refer to the last half of the 64KB of RAM */ + if (machine == MCH_MCGA) { + vga.tandy.draw_base = vga.mem.linear + 0x8000; + VGA_DrawLine = MCGA_TEXT_Draw_Line; + bpp = 32; + } - break; - case M_HERC_TEXT: - vga.draw.blocks=width; - if ((vga.herc.xMode & 2)/*90 column mode HGC+ and InColor 8 pixels/char*/ || !vga.draw.char9_set) { - // 8-pixel wide - pix_per_char = 8; - vga.draw.char9dot = false; - } else { - // 9-pixel wide - pix_per_char = 9; - vga.draw.char9dot = true; - } + break; + case M_HERC_TEXT: + vga.draw.blocks=width; + if ((vga.herc.xMode & 2)/*90 column mode HGC+ and InColor 8 pixels/char*/ || !vga.draw.char9_set) { + // 8-pixel wide + pix_per_char = 8; + vga.draw.char9dot = false; + } else { + // 9-pixel wide + pix_per_char = 9; + vga.draw.char9dot = true; + } - if (hercCard >= HERC_InColor) - VGA_DrawLine=pix_per_char==9?VGA_TEXT9_HercInColor_Draw_Line:VGA_TEXT8_HercInColor_Draw_Line; - else if (machine == MCH_HERC) - VGA_DrawLine=pix_per_char==9?VGA_TEXT9_Herc_Draw_Line:VGA_TEXT8_Herc_Draw_Line; - else - VGA_DrawLine=pix_per_char==9?VGA_TEXT9_MDA_Draw_Line:VGA_TEXT8_MDA_Draw_Line; + if (hercCard >= HERC_InColor) + VGA_DrawLine=pix_per_char==9?VGA_TEXT9_HercInColor_Draw_Line:VGA_TEXT8_HercInColor_Draw_Line; + else if (machine == MCH_HERC) + VGA_DrawLine=pix_per_char==9?VGA_TEXT9_Herc_Draw_Line:VGA_TEXT8_Herc_Draw_Line; + else + VGA_DrawLine=pix_per_char==9?VGA_TEXT9_MDA_Draw_Line:VGA_TEXT8_MDA_Draw_Line; - break; - case M_AMSTRAD: // Probably OK? - pix_per_char = 16; - vga.draw.blocks=width*2; - VGA_DrawLine=VGA_Draw_AMS_4BPP_Line; - // VGA_DrawLine=VGA_Draw_4BPP_Line; - /* doubleheight=true; - vga.draw.blocks = 2*width; width<<=4; - vga.draw.linear_base = vga.mem.linear + VGA_CACHE_OFFSET; - vga.draw.linear_mask = 512 * 1024 - 1; */ - break; - default: - LOG(LOG_VGA,LOG_ERROR)("Unhandled VGA mode %d while checking for resolution",vga.mode); - break; + break; + case M_AMSTRAD: // Probably OK? + pix_per_char = 16; + vga.draw.blocks=width*2; + VGA_DrawLine=VGA_Draw_AMS_4BPP_Line; + // VGA_DrawLine=VGA_Draw_4BPP_Line; + /* doubleheight=true; + vga.draw.blocks = 2*width; width<<=4; + vga.draw.linear_base = vga.mem.linear + VGA_CACHE_OFFSET; + vga.draw.linear_mask = 512 * 1024 - 1; */ + break; + default: + LOG(LOG_VGA,LOG_ERROR)("Unhandled VGA mode %d while checking for resolution",vga.mode); + break; + } + width *= pix_per_char; } - width *= pix_per_char; VGA_CheckScanLength(); #if defined(USE_TTF) if (ttf.inUse) vga.draw.address_add = ttf.cols * 2; @@ -7559,7 +8070,13 @@ void VGA_SetupDrawing(Bitu /*val*/) { mcga_double_scan = false; } - vga.draw.lines_total=height; + /* NTS: This code resets line_done. If RENDER_EndUpdate() is not called, misrendering + * will occur. VGA draw lines_done will be out of sync with render.scale.outLine + * and the frame will not render properly. */ + RENDER_EndUpdate(false); + + vga.draw.lines_done = 0; + vga.draw.lines_total = height; vga.draw.line_length = width * ((bpp + 1) / 8); vga.draw.oscclock = oscclock; vga.draw.clock = clock; @@ -7628,8 +8145,16 @@ void VGA_SetupDrawing(Bitu /*val*/) { // calculate screen ratio double screenratio = scanratio * scanfield_ratio; + // unless DOSBox IG says otherwise, pixels are always square. + // the 16:9 HD VESA modes are impossible to display properly otherwise. + if (vga.dosboxig.svga) { + screenratio = (double)vga.dosboxig.width / (double)vga.dosboxig.height; + + if (vga.dosboxig.dar_width != 0 || vga.dosboxig.dar_height != 0) + screenratio = (double)vga.dosboxig.dar_width / (double)vga.dosboxig.dar_height; + } // override screenratio for certain cases: - if (!IS_PC98_ARCH) { + else if (!IS_PC98_ARCH) { if (vratio == 1.6) screenratio = 4.0 / 3.0; else if (vratio == 0.8) screenratio = 4.0 / 3.0; else if (vratio == 3.2) screenratio = 4.0 / 3.0; @@ -7696,6 +8221,7 @@ void VGA_SetupDrawing(Bitu /*val*/) { } } vga.draw.delay.singleline_delay = (float)vga.draw.delay.htotal; + vga.draw.must_complete_frame = true; if (machine == MCH_HERC && hercCard == HERC_InColor) { VGA_DAC_UpdateColorPalette(); @@ -7714,7 +8240,6 @@ void VGA_SetupDrawing(Bitu /*val*/) { } void VGA_KillDrawing(void) { - is_vga_rendering_on_demand = false; PIC_RemoveEvents(VGA_DrawSingleLine); PIC_RemoveEvents(VGA_DrawEGASingleLine); } @@ -7855,22 +8380,33 @@ void POD_Save_VGA_Draw( std::ostream& stream ) else if( vga.draw.linear_base == vga.mem.linear ) linear_base_idx = 0; //else if( vga.draw.linear_base == vga.fastmem ) linear_base_idx = 1; - - for( int lcv=0; lcv<2; lcv++ ) { - if(0) {} - else if( vga.draw.font_tables[lcv] == &(vga.draw.font[0*1024]) ) font_tables_idx[lcv] = 0; - else if( vga.draw.font_tables[lcv] == &(vga.draw.font[8*1024]) ) font_tables_idx[lcv] = 1; - else if( vga.draw.font_tables[lcv] == &(vga.draw.font[16*1024]) ) font_tables_idx[lcv] = 2; - else if( vga.draw.font_tables[lcv] == &(vga.draw.font[24*1024]) ) font_tables_idx[lcv] = 3; - else if( vga.draw.font_tables[lcv] == &(vga.draw.font[32*1024]) ) font_tables_idx[lcv] = 4; - else if( vga.draw.font_tables[lcv] == &(vga.draw.font[40*1024]) ) font_tables_idx[lcv] = 5; - else if( vga.draw.font_tables[lcv] == &(vga.draw.font[48*1024]) ) font_tables_idx[lcv] = 6; - else if( vga.draw.font_tables[lcv] == &(vga.draw.font[56*1024]) ) font_tables_idx[lcv] = 7; + if (IS_EGAVGA_ARCH) { + for( int lcv=0; lcv<2; lcv++ ) { + if( vga.draw.font_tables[lcv] == &(vga.mem.linear[0*1024*4 + 2]) ) font_tables_idx[lcv] = 0; + else if( vga.draw.font_tables[lcv] == &(vga.mem.linear[8*1024*4 + 2]) ) font_tables_idx[lcv] = 1; + else if( vga.draw.font_tables[lcv] == &(vga.mem.linear[16*1024*4 + 2]) ) font_tables_idx[lcv] = 2; + else if( vga.draw.font_tables[lcv] == &(vga.mem.linear[24*1024*4 + 2]) ) font_tables_idx[lcv] = 3; + else if( vga.draw.font_tables[lcv] == &(vga.mem.linear[32*1024*4 + 2]) ) font_tables_idx[lcv] = 4; + else if( vga.draw.font_tables[lcv] == &(vga.mem.linear[40*1024*4 + 2]) ) font_tables_idx[lcv] = 5; + else if( vga.draw.font_tables[lcv] == &(vga.mem.linear[48*1024*4 + 2]) ) font_tables_idx[lcv] = 6; + else if( vga.draw.font_tables[lcv] == &(vga.mem.linear[56*1024*4 + 2]) ) font_tables_idx[lcv] = 7; + } + } + else { + for( int lcv=0; lcv<2; lcv++ ) { + if( vga.draw.font_tables[lcv] == &(vga.draw.font[0*1024]) ) font_tables_idx[lcv] = 0; + else if( vga.draw.font_tables[lcv] == &(vga.draw.font[8*1024]) ) font_tables_idx[lcv] = 1; + else if( vga.draw.font_tables[lcv] == &(vga.draw.font[16*1024]) ) font_tables_idx[lcv] = 2; + else if( vga.draw.font_tables[lcv] == &(vga.draw.font[24*1024]) ) font_tables_idx[lcv] = 3; + else if( vga.draw.font_tables[lcv] == &(vga.draw.font[32*1024]) ) font_tables_idx[lcv] = 4; + else if( vga.draw.font_tables[lcv] == &(vga.draw.font[40*1024]) ) font_tables_idx[lcv] = 5; + else if( vga.draw.font_tables[lcv] == &(vga.draw.font[48*1024]) ) font_tables_idx[lcv] = 6; + else if( vga.draw.font_tables[lcv] == &(vga.draw.font[56*1024]) ) font_tables_idx[lcv] = 7; + } } - if(0) {} - else if( VGA_DrawLine == VGA_Draw_1BPP_Line ) drawline_idx = 1; + if( VGA_DrawLine == VGA_Draw_1BPP_Line ) drawline_idx = 1; else if( VGA_DrawLine == VGA_Draw_2BPP_Line ) drawline_idx = 3; else if( VGA_DrawLine == VGA_Draw_2BPPHiRes_Line ) drawline_idx = 4; else if( VGA_DrawLine == VGA_Draw_CGA16_Line ) drawline_idx = 5; @@ -7906,7 +8442,8 @@ void POD_Save_VGA_Draw( std::ostream& stream ) // - pure data - WRITE_POD( &TempLine, TempLine ); + WRITE_POD( &TempLineSize, TempLineSize ); + WRITE_POD_SIZE( TempLine, TempLineSize ); // - system data @@ -7948,7 +8485,23 @@ void POD_Load_VGA_Draw( std::istream& stream ) // - pure data - READ_POD( &TempLine, TempLine ); + const unsigned int oldTempLineSize = TempLineSize; + + READ_POD( &TempLineSize, TempLineSize ); + + if( oldTempLineSize != TempLineSize ) { + TempLineFree(); + + if( TempLineAlloc(( TempLineSize - 1024 ) / 4 )) { + READ_POD_SIZE( TempLine, TempLineSize ); + } else { + LOG( LOG_VGA, LOG_ERROR )("Savestate load could not allocate TempLine"); + stream.seekg( TempLineSize, stream.cur ); + } + } else { + // read directly into the old address + READ_POD_SIZE( TempLine, TempLineSize ); + } // - system data @@ -7970,16 +8523,32 @@ void POD_Load_VGA_Draw( std::istream& stream ) } - for( int lcv=0; lcv<2; lcv++ ) { - switch( font_tables_idx[lcv] ) { - case 0: vga.draw.font_tables[lcv] = &(vga.draw.font[0*1024]); break; - case 1: vga.draw.font_tables[lcv] = &(vga.draw.font[8*1024]); break; - case 2: vga.draw.font_tables[lcv] = &(vga.draw.font[16*1024]); break; - case 3: vga.draw.font_tables[lcv] = &(vga.draw.font[24*1024]); break; - case 4: vga.draw.font_tables[lcv] = &(vga.draw.font[32*1024]); break; - case 5: vga.draw.font_tables[lcv] = &(vga.draw.font[40*1024]); break; - case 6: vga.draw.font_tables[lcv] = &(vga.draw.font[48*1024]); break; - case 7: vga.draw.font_tables[lcv] = &(vga.draw.font[56*1024]); break; + if (IS_EGAVGA_ARCH) { + for( int lcv=0; lcv<2; lcv++ ) { + switch( font_tables_idx[lcv] ) { + case 0: vga.draw.font_tables[lcv] = &(vga.mem.linear[0*1024*4 + 2]); break; + case 1: vga.draw.font_tables[lcv] = &(vga.mem.linear[8*1024*4 + 2]); break; + case 2: vga.draw.font_tables[lcv] = &(vga.mem.linear[16*1024*4 + 2]); break; + case 3: vga.draw.font_tables[lcv] = &(vga.mem.linear[24*1024*4 + 2]); break; + case 4: vga.draw.font_tables[lcv] = &(vga.mem.linear[32*1024*4 + 2]); break; + case 5: vga.draw.font_tables[lcv] = &(vga.mem.linear[40*1024*4 + 2]); break; + case 6: vga.draw.font_tables[lcv] = &(vga.mem.linear[48*1024*4 + 2]); break; + case 7: vga.draw.font_tables[lcv] = &(vga.mem.linear[56*1024*4 + 2]); break; + } + } + } + else { + for( int lcv=0; lcv<2; lcv++ ) { + switch( font_tables_idx[lcv] ) { + case 0: vga.draw.font_tables[lcv] = &(vga.draw.font[0*1024]); break; + case 1: vga.draw.font_tables[lcv] = &(vga.draw.font[8*1024]); break; + case 2: vga.draw.font_tables[lcv] = &(vga.draw.font[16*1024]); break; + case 3: vga.draw.font_tables[lcv] = &(vga.draw.font[24*1024]); break; + case 4: vga.draw.font_tables[lcv] = &(vga.draw.font[32*1024]); break; + case 5: vga.draw.font_tables[lcv] = &(vga.draw.font[40*1024]); break; + case 6: vga.draw.font_tables[lcv] = &(vga.draw.font[48*1024]); break; + case 7: vga.draw.font_tables[lcv] = &(vga.draw.font[56*1024]); break; + } } } diff --git a/src/hardware/vga_gfx.cpp b/src/hardware/vga_gfx.cpp index f2833751eb6..52076e01085 100644 --- a/src/hardware/vga_gfx.cpp +++ b/src/hardware/vga_gfx.cpp @@ -39,6 +39,9 @@ static Bitu read_p3ce(Bitu /*port*/,Bitu /*iolen*/) { static void write_p3cf(Bitu /*port*/,Bitu val,Bitu iolen) { unsigned int cmplx = 0; + if (vga.dosboxig.vga_reg_lockout) + return; + switch (gfx(index)) { case 0: /* Set/Reset Register */ gfx(set_reset)=val & 0x0f; diff --git a/src/hardware/vga_memory.cpp b/src/hardware/vga_memory.cpp index a5a49bbcd04..338cd37a0a6 100644 --- a/src/hardware/vga_memory.cpp +++ b/src/hardware/vga_memory.cpp @@ -49,10 +49,24 @@ extern bool enable_pc98_256color_planar; extern bool enable_pc98_256color; extern bool isa_memory_hole_15mb; +extern bool vbe_window_size_literal; extern unsigned int vbe_window_granularity; extern unsigned int vbe_window_size; extern const char* RunningProgram; +static inline void vga_vram_write_trigger_update(void) { + vga.draw.must_complete_frame = true; +} + +static inline void vga_cg_write_trigger_update(void) { + vga.draw.must_complete_frame = true; +} + +static inline void vga_vram_write_trigger_update_planar_mem(const PhysPt a) { + if ((a-(PhysPt)vga.draw.draw_base_planar) < (PhysPt)vga.draw.draw_base_size) /* NTS: Subtract and compare must all use unsigned integers or this won't work! */ + vga.draw.must_complete_frame = true; +} + uint32_t tandy_128kbase = 0x80000; #define TANDY_VIDBASE(_X_) &MemBase[ tandy_128kbase + (_X_)] @@ -84,14 +98,17 @@ template class VGA_SlowLFBHandler : public baseLFBHandler VGA_SlowLFBHandler() : baseLFBHandler(PFLAG_NOCODE) {} void writeb(PhysPt addr,uint8_t val) override { VGAMEM_USEC_write_delay(); + vga_vram_write_trigger_update(); PageHandler_HostPtWriteB(this,addr,val); } void writew(PhysPt addr,uint16_t val) override { VGAMEM_USEC_write_delay(); + vga_vram_write_trigger_update(); PageHandler_HostPtWriteW(this,addr,val); } void writed(PhysPt addr,uint32_t val) override { VGAMEM_USEC_write_delay(); + vga_vram_write_trigger_update(); PageHandler_HostPtWriteD(this,addr,val); } @@ -364,14 +381,6 @@ template static inline void VGA_Generic_Write_Handler(PhysP pixels.d&=~mask; pixels.d|=(data & mask); - /* FIXME: A better method (I think) is to have the VGA text drawing code - * directly reference the font data in bitplane #2 instead of - * this hack */ - if (planeaddr < (512*1024)) { - /* 2025/01/12: Range checking is required in order not to overrun the array and corrupt emulator state */ - vga.draw.font[planeaddr] = pixels.b[2]; - } - ((uint32_t*)vga.mem.linear)[planeaddr]=pixels.d; } @@ -413,6 +422,7 @@ class VGA_ChainedVGA_Handler : public PageHandler { return 0xFF; /* should not happen, byte I/O is always aligned */ } template static INLINE void do_write_aligned(const PhysPt a,const T v) { + vga_vram_write_trigger_update(); *((T*)(&vga.mem.linear[a])) = v; } template static INLINE void do_write(const PhysPt a,const T v) { @@ -459,7 +469,7 @@ class VGA_ChainedVGA_Slow_Handler : public PageHandler { public: VGA_ChainedVGA_Slow_Handler() : PageHandler(PFLAG_NOCODE) {} static INLINE PhysPt map(const PhysPt addr) { - return ((PAGING_GetPhysicalAddress(addr)&vgapages.mask)+(PhysPt)vga.svga.bank_read_full)&vga.mem.memmask; + return (PAGING_GetPhysicalAddress(addr)&vgapages.mask)+(PhysPt)vga.svga.bank_read_full; /* masking with vga.mem.memmask not necessary */ } // planar byte offset = addr & ~3u (discard low 2 bits) @@ -469,6 +479,7 @@ class VGA_ChainedVGA_Slow_Handler : public PageHandler { return VGA_Generic_Read_Handler(addr&~3u, addr, (uint8_t)(addr&3u)); } static INLINE void writeHandler8(PhysPt addr, uint8_t val) { + vga_vram_write_trigger_update(); return VGA_Generic_Write_Handler(addr&~3u, addr, (uint8_t)val); } @@ -514,7 +525,7 @@ class VGA_ET4000_ChainedVGA_Slow_Handler : public PageHandler { public: VGA_ET4000_ChainedVGA_Slow_Handler() : PageHandler(PFLAG_NOCODE) {} static INLINE PhysPt map(const PhysPt addr) { - return ((PAGING_GetPhysicalAddress(addr)&vgapages.mask)+(PhysPt)vga.svga.bank_read_full)&vga.mem.memmask; + return (PAGING_GetPhysicalAddress(addr)&vgapages.mask)+(PhysPt)vga.svga.bank_read_full; /* masking with vga.mem.memmask not necessary */ } // planar byte offset = addr >> 2 (shift 2 bits to the right) @@ -524,6 +535,7 @@ class VGA_ET4000_ChainedVGA_Slow_Handler : public PageHandler { return VGA_Generic_Read_Handler(addr>>2u, addr, (uint8_t)(addr&3u)); } static INLINE void writeHandler8(PhysPt addr, uint8_t val) { + vga_vram_write_trigger_update(); return VGA_Generic_Write_Handler(addr>>2u, addr, (uint8_t)val); } @@ -569,13 +581,14 @@ class VGA_UnchainedVGA_Handler : public PageHandler { public: VGA_UnchainedVGA_Handler() : PageHandler(PFLAG_NOCODE) {} static INLINE PhysPt map(const PhysPt addr) { - return ((PAGING_GetPhysicalAddress(addr)&vgapages.mask)+(PhysPt)vga.svga.bank_read_full)&(vga.mem.memmask>>2u); + return (PAGING_GetPhysicalAddress(addr)&vgapages.mask)+(PhysPt)vga.svga.bank_read_full; /* masking with vga.mem.memmask>>2 not necessary */ } static INLINE uint8_t readHandler8(PhysPt addr) { return VGA_Generic_Read_Handler(addr, addr, vga.config.read_map_select); } static INLINE void writeHandler8(PhysPt addr, uint8_t val) { + vga_vram_write_trigger_update_planar_mem(addr); VGA_Generic_Write_Handler(addr, addr, val); } @@ -625,7 +638,13 @@ class VGA_UnchainedVGA_Fast_Handler : public VGA_UnchainedVGA_Handler { public: VGA_UnchainedVGA_Fast_Handler() : VGA_UnchainedVGA_Handler() {} + /* must mask for writing because the write handler does array lookup */ + static INLINE PhysPt map(const PhysPt addr) { + return ((PAGING_GetPhysicalAddress(addr)&vgapages.mask)+(PhysPt)vga.svga.bank_read_full)&(vga.mem.memmask>>2u); + } + static INLINE void writeHandler8(PhysPt addr, uint8_t val) { + vga_vram_write_trigger_update_planar_mem(addr); ((uint32_t*)vga.mem.linear)[addr] = (((uint32_t*)vga.mem.linear)[addr] & vga.config.full_not_map_mask) + (ExpandTable[val] & vga.config.full_map_mask); } @@ -663,6 +682,7 @@ class VGA_CGATEXT_PageHandler : public PageHandler { return vga.tandy.mem_base[addr]; } void writeb(PhysPt addr,uint8_t val) override { + vga_vram_write_trigger_update(); VGAMEM_USEC_write_delay(); addr = PAGING_GetPhysicalAddress(addr) & 0x3FFF; vga.tandy.mem_base[addr] = val; @@ -692,6 +712,7 @@ class VGA_MCGATEXT_PageHandler : public PageHandler { return vga.tandy.mem_base[addr]; } void writeb(PhysPt addr,uint8_t val) override { + vga_vram_write_trigger_update(); VGAMEM_USEC_write_delay(); addr = PAGING_GetPhysicalAddress(addr) & 0xFFFF; vga.tandy.mem_base[addr] = val; @@ -1571,6 +1592,7 @@ class VGA_PC98_TEXT_PageHandler : public PageHandler { } void writeb(PhysPt addr,uint8_t val) override { addr = PAGING_GetPhysicalAddress(addr) & 0x3FFFu; + vga_vram_write_trigger_update(); if (addr >= 0x3FE0u) return pc98_mem_msw_write((addr >> 2u) & 7u,(unsigned char)val); @@ -1607,17 +1629,18 @@ class VGA_PC98_CG_PageHandler : public PageHandler { uint8_t readb(PhysPt addr) override { /* uses the low 12 bits and therefore does not need PAGING_GetPhysicalAddress() */ uint8_t high = a1_font_load_addr & 0xff; - if((high >= 0x09 && high <= 0x0b) || (high >= 0x0c && high <= 0x0f) || (high >= 0x58 && high <= 0x5f)) { - if(addr & 1) { + if ((high >= 0x09 && high <= 0x0b) || (high >= 0x0c && high <= 0x0f) || (high >= 0x56 && high <= 0x5f)) { + if(addr & 1) return pc98_font_char_read(a1_font_load_addr,(addr >> 1) & 0xF, (a1_font_char_offset & 0x20) ? 0 : 1); - } else { + else return 0; - } } + return pc98_font_char_read(a1_font_load_addr,(addr >> 1) & 0xF,addr & 1); } void writeb(PhysPt addr,uint8_t val) override { /* uses the low 12 bits and therefore does not need PAGING_GetPhysicalAddress() */ + vga_cg_write_trigger_update(); if ((a1_font_load_addr & 0x007E) == 0x0056 && (a1_font_load_addr & 0xFF00) != 0x0000) pc98_font_char_write(a1_font_load_addr,(addr >> 1) & 0xF,addr & 1,val); else @@ -1680,6 +1703,7 @@ template class VGA_PC98_256BANK_PageHandler : public P return pc98_vram_256bank_from_window(bank)[PAGING_GetPhysicalAddress(addr) & 0x7FFFu]; } void writeb(PhysPt addr,uint8_t val) override { + vga_vram_write_trigger_update(); pc98_vram_256bank_from_window(bank)[PAGING_GetPhysicalAddress(addr) & 0x7FFFu] = val; } }; @@ -1990,6 +2014,7 @@ class VGA_PC98_PageHandler : public PageHandler { } void writeb(PhysPt addr,uint8_t val) override { VGAMEM_USEC_write_delay(); + vga_vram_write_trigger_update(); writec( PAGING_GetPhysicalAddress(addr), val ); } @@ -2007,6 +2032,7 @@ class VGA_PC98_PageHandler : public PageHandler { } void writew(PhysPt addr,uint16_t val) override { VGAMEM_USEC_write_delay(); + vga_vram_write_trigger_update(); addr = PAGING_GetPhysicalAddress(addr); if (!(addr & 1)) /* if WORD aligned */ writec(addr,val); @@ -2059,6 +2085,7 @@ class VGA_Slow_CGA_Handler : public PageHandler { } void writeb(PhysPt addr,uint8_t val) override { delay(); + vga_vram_write_trigger_update(); vga.tandy.mem_base[(PAGING_GetPhysicalAddress(addr) - 0xb8000) & 0x3FFF] = val; } @@ -2086,16 +2113,19 @@ class VGA_MMIO_Handler : public PageHandler { VGA_MMIO_Handler() : PageHandler(PFLAG_NOCODE) {} void writeb(PhysPt addr,uint8_t val) override { VGAMEM_USEC_write_delay(); + vga_vram_write_trigger_update(); Bitu port = PAGING_GetPhysicalAddress(addr) & 0xffff; XGA_Write(port, val, 1); } void writew(PhysPt addr,uint16_t val) override { VGAMEM_USEC_write_delay(); + vga_vram_write_trigger_update(); Bitu port = PAGING_GetPhysicalAddress(addr) & 0xffff; XGA_Write(port, val, 2); } void writed(PhysPt addr,uint32_t val) override { VGAMEM_USEC_write_delay(); + vga_vram_write_trigger_update(); Bitu port = PAGING_GetPhysicalAddress(addr) & 0xffff; XGA_Write(port, val, 4); } @@ -2182,6 +2212,7 @@ class VGA_AMS_Handler : public PageHandler { return (T)do_read_aligned(mapread(a)); } template static INLINE void do_write_aligned(const PhysPt a,const T v) { + vga_vram_write_trigger_update(); const uint8_t plane = (vga.mode==M_AMSTRAD) ? vga.amstrad.write_plane : 0x01; // 0x0F? if (plane & 0x08) *((T*)(&vga.tandy.mem_base[a+0xC000u])) = v; if (plane & 0x04) *((T*)(&vga.tandy.mem_base[a+0x8000u])) = v; @@ -2268,6 +2299,7 @@ class HERC_InColor_Mono_Handler : public PageHandler { return latch.b[0]; } static INLINE void writeHandler(PhysPt start, uint8_t val) { + vga_vram_write_trigger_update(); ((uint32_t*)vga.mem.linear)[start] = ExpandTable[val]; } @@ -2379,6 +2411,7 @@ class HERC_InColor_Graphics_Handler : public PageHandler { break; } + vga_vram_write_trigger_update(); ((uint32_t*)vga.mem.linear)[start] = (((uint32_t*)vga.mem.linear)[start] & nochangemask) + (pl.d & (~nochangemask)); } @@ -2504,8 +2537,14 @@ void VGA_SetupHandlers(void) { * mapped to A0000-BFFFF. Most cards expose a window of 64KB. Most cards also have * a bank granularity of 64KB, but some, like Paradise and Cirrus, have 64KB windows * and 4KB granularity. */ - vga.svga.bank_read_full = vga.svga.bank_read*vga.svga.bank_size; - vga.svga.bank_write_full = vga.svga.bank_write*vga.svga.bank_size; + if (svgaCard == SVGA_DOSBoxIG) { + vga.svga.bank_read_full = vga.dosboxig.rbank_offset & (~0xFFFu); + vga.svga.bank_write_full = vga.dosboxig.wbank_offset & (~0xFFFu); + } + else { + vga.svga.bank_read_full = vga.svga.bank_read*vga.svga.bank_size; + vga.svga.bank_write_full = vga.svga.bank_write*vga.svga.bank_size; + } bool runeten = false; PageHandler *newHandler; switch (machine) { @@ -2722,70 +2761,84 @@ void VGA_SetupHandlers(void) { newHandler = vga_memio_lfb_delay ? &vgaph.map_slow : &vgaph.map; break; } + + if (vga.dosboxig.svga && !(vga.mode == M_EGA || vga.mode == M_LIN4)/*non-planar modes only*/) { + newHandler = vga_memio_lfb_delay ? &vgaph.map_slow : &vgaph.map; + } + // Workaround for ETen Chinese DOS system (e.g. ET24VA) if ((dos.loaded_codepage == 936 || dos.loaded_codepage == 950 || dos.loaded_codepage == 951) && strlen(RunningProgram) > 3 && !strncmp(RunningProgram, "ET", 2)) enveten = true; runeten = !vga_fill_inactive_ram && enveten && (dos.loaded_codepage == 936 || dos.loaded_codepage == 950 || dos.loaded_codepage == 951) && ((strlen(RunningProgram) > 3 && !strncmp(RunningProgram, "ET", 2)) || !TTF_using()); - switch ((vga.gfx.miscellaneous >> 2) & 3) { - case 0: - vgapages.base = VGA_PAGE_A0; - switch (svgaCard) { - case SVGA_TsengET3K: - case SVGA_TsengET4K: - vgapages.mask = 0x1ffff & vga.mem.memmask; - break; - /* NTS: Looking at the official ET4000 programming guide, it does in fact support the full 128KB */ - case SVGA_S3Trio: - default: - vgapages.mask = 0xffff & vga.mem.memmask; - break; - } - if (CurMode && CurMode->mode >= 0x14/*VESA BIOS or extended mode*/ && vbe_window_size > 0/*user override of window size*/) { - unsigned int pages = (vbe_window_size + 0xFFFu) >> 12u; /* bytes to pages, round up */ - if (pages > 32) pages = 32; - assert(pages != 0u); - - /* map only what the window size determines, make the rest empty */ - MEM_SetPageHandler(VGA_PAGE_A0, pages, newHandler ); - MEM_SetPageHandler(VGA_PAGE_A0 + pages, 32 - pages, &vgaph.empty ); - } - else { - /*full 128KB */ - MEM_SetPageHandler(VGA_PAGE_A0, 32, newHandler ); - } - break; - case 1: - vgapages.base = VGA_PAGE_A0; - vgapages.mask = 0xffff & vga.mem.memmask; - MEM_SetPageHandler( VGA_PAGE_A0, 16, newHandler ); - if (vga_fill_inactive_ram || runeten) - MEM_ResetPageHandler_RAM( VGA_PAGE_B0, 16); - else - MEM_SetPageHandler( VGA_PAGE_B0, 16, &vgaph.empty ); - break; - case 2: - vgapages.base = VGA_PAGE_B0; - vgapages.mask = 0x7fff & vga.mem.memmask; - MEM_SetPageHandler( VGA_PAGE_B0, 8, newHandler ); - if (vga_fill_inactive_ram || runeten) { - MEM_ResetPageHandler_RAM( VGA_PAGE_A0, 16 ); - MEM_ResetPageHandler_RAM( VGA_PAGE_B8, 8 ); - } else { - MEM_SetPageHandler( VGA_PAGE_A0, 16, &vgaph.empty ); - MEM_SetPageHandler( VGA_PAGE_B8, 8, &vgaph.empty ); - } - break; - case 3: - vgapages.base = VGA_PAGE_B8; - vgapages.mask = 0x7fff & vga.mem.memmask; - MEM_SetPageHandler( VGA_PAGE_B8, 8, newHandler ); - if (vga_fill_inactive_ram || runeten) { - MEM_ResetPageHandler_RAM( VGA_PAGE_A0, 16 ); - MEM_ResetPageHandler_RAM( VGA_PAGE_B0, 8 ); - } else { - MEM_SetPageHandler( VGA_PAGE_A0, 16, &vgaph.empty ); - MEM_SetPageHandler( VGA_PAGE_B0, 8, &vgaph.empty ); - } - break; + + if (vga.dosboxig.force_A0000) { + vgapages.base = VGA_PAGE_A0; + vgapages.mask = 0xffff & vga.mem.memmask; + MEM_SetPageHandler( VGA_PAGE_A0, 16, newHandler ); + MEM_SetPageHandler( VGA_PAGE_B0, 16, &vgaph.empty ); // NTS: Windows 3.1 may have debug output functions that write to a second MDA display + } + else { + switch ((vga.gfx.miscellaneous >> 2) & 3) { + case 0: + vgapages.base = VGA_PAGE_A0; + switch (svgaCard) { + case SVGA_TsengET3K: + case SVGA_TsengET4K: + vgapages.mask = 0x1ffff & vga.mem.memmask; + break; + /* NTS: Looking at the official ET4000 programming guide, it does in fact support the full 128KB */ + case SVGA_S3Trio: + default: + vgapages.mask = 0xffff & vga.mem.memmask; + break; + } + if (CurMode && CurMode->mode >= 0x14/*VESA BIOS or extended mode*/ && (vbe_window_size < 0x10000/*64KB*/ || vbe_window_size_literal)) { + unsigned int pages = (vbe_window_size + 0xFFFu) >> 12u; /* bytes to pages, round up */ + if (pages > 32) pages = 32; + assert(pages != 0u); + + /* map only what the window size determines, make the rest empty */ + MEM_SetPageHandler(VGA_PAGE_A0, pages, newHandler ); + MEM_SetPageHandler(VGA_PAGE_A0 + pages, 32 - pages, &vgaph.empty ); + } + else { + /*full 128KB */ + MEM_SetPageHandler(VGA_PAGE_A0, 32, newHandler ); + } + break; + case 1: + vgapages.base = VGA_PAGE_A0; + vgapages.mask = 0xffff & vga.mem.memmask; + MEM_SetPageHandler( VGA_PAGE_A0, 16, newHandler ); + if (vga_fill_inactive_ram || runeten) + MEM_ResetPageHandler_RAM( VGA_PAGE_B0, 16); + else + MEM_SetPageHandler( VGA_PAGE_B0, 16, &vgaph.empty ); + break; + case 2: + vgapages.base = VGA_PAGE_B0; + vgapages.mask = 0x7fff & vga.mem.memmask; + MEM_SetPageHandler( VGA_PAGE_B0, 8, newHandler ); + if (vga_fill_inactive_ram || runeten) { + MEM_ResetPageHandler_RAM( VGA_PAGE_A0, 16 ); + MEM_ResetPageHandler_RAM( VGA_PAGE_B8, 8 ); + } else { + MEM_SetPageHandler( VGA_PAGE_A0, 16, &vgaph.empty ); + MEM_SetPageHandler( VGA_PAGE_B8, 8, &vgaph.empty ); + } + break; + case 3: + vgapages.base = VGA_PAGE_B8; + vgapages.mask = 0x7fff & vga.mem.memmask; + MEM_SetPageHandler( VGA_PAGE_B8, 8, newHandler ); + if (vga_fill_inactive_ram || runeten) { + MEM_ResetPageHandler_RAM( VGA_PAGE_A0, 16 ); + MEM_ResetPageHandler_RAM( VGA_PAGE_B0, 8 ); + } else { + MEM_SetPageHandler( VGA_PAGE_A0, 16, &vgaph.empty ); + MEM_SetPageHandler( VGA_PAGE_B0, 8, &vgaph.empty ); + } + break; + } } if(svgaCard == SVGA_S3Trio && (vga.s3.ext_mem_ctrl & 0x10)) MEM_SetPageHandler(VGA_PAGE_A0, 16, &vgaph.mmio); @@ -2810,58 +2863,69 @@ void VGA_SetupHandlers(void) { } void VGA_StartUpdateLFB(void) { - /* please obey the Linear Address Window Size register! - * Windows 3.1 S3 driver will reprogram the linear framebuffer down to 0xA0000 when entering a DOSBox - * and assuming the full VRAM size will cause a LOT of problems! */ - Bitu winsz = 0x10000; - - switch (vga.s3.reg_58&3) { - case 1: - winsz = 1 << 20; //1MB - break; - case 2: - winsz = 2 << 20; //2MB - break; - case 3: - winsz = 4 << 20; //4MB - break; - // FIXME: What about the 8MB window? - } - - /* NTS: 64KB winsz = 0x10000 => winmsk = 0xFFFF0000 => 0xFFFF - * 1MB winsz = 0x100000 => winmsk = 0xFFF00000 => 0xFFF0 - * 2MB winsz = 0x200000 => winmsk = 0xFFE00000 => 0xFFE0 - * and so on. - * - * From the S3 Trio32/Trio64 documentation regarding the Linear Address Window Position Registers: - * "The Linear Address Window resides on a 64KB, 1MB, 2MB, or 4MB (Trio64 only) memory boundary (size-aligned) ... - * Some LSBs of this register are ignored because of the size-aligned boundary scheme" */ - const unsigned int la_winmsk = ~((winsz - 1u) >> 16u); /* Register holds the upper 16 bits of the linear address */ - - /* The LFB register has an enable bit */ - if (!(vga.s3.reg_58 & 0x10)) { - vga.lfb.page = (unsigned int)(vga.s3.la_window & la_winmsk) << 4u; - vga.lfb.addr = (unsigned int)(vga.s3.la_window & la_winmsk) << 16u; - vga.lfb.handler = NULL; - MEM_SetLFB(0,0,NULL,NULL); - } - /* if the DOS application or Windows 3.1 driver attempts to put the linear framebuffer - * below the top of memory, then we're probably entering a DOS VM and it's probably - * a 64KB window. If it's not a 64KB window then print a warning. */ - else if ((unsigned long)(vga.s3.la_window << 4UL) < (unsigned long)MEM_TotalPages()) { - if (winsz != 0x10000) // 64KB window normal for entering a DOS VM in Windows 3.1 or legacy bank switching in DOS - LOG(LOG_MISC,LOG_WARN)("S3 warning: Window size != 64KB and address conflict with system RAM!"); - - vga.lfb.page = (unsigned int)(vga.s3.la_window & la_winmsk) << 4u; - vga.lfb.addr = (unsigned int)(vga.s3.la_window & la_winmsk) << 16u; - vga.lfb.handler = NULL; - MEM_SetLFB(0,0,NULL,NULL); + if (svgaCard == SVGA_DOSBoxIG) { + /* TODO: Perhaps the DOSBox Integrated Device could have an MMIO region */ + vga.lfb.page = (unsigned int)(S3_LFB_BASE >> 12ul); + vga.lfb.addr = (unsigned int)S3_LFB_BASE; + vga.lfb.handler = vga_memio_lfb_delay ? &vgaph.lfb_slow : &vgaph.lfb; + MEM_SetLFB(vga.lfb.page,(unsigned int)vga.mem.memsize/4096u, vga.lfb.handler, NULL); + LOG(LOG_MISC,LOG_DEBUG)("DOSBox Integrated Device setting LFB at 0x%lx size 0x%lx", + (unsigned long)vga.lfb.addr,(unsigned long)vga.mem.memsize); } else { - vga.lfb.page = (unsigned int)(vga.s3.la_window & la_winmsk) << 4u; - vga.lfb.addr = (unsigned int)(vga.s3.la_window & la_winmsk) << 16u; - vga.lfb.handler = vga_memio_lfb_delay ? &vgaph.lfb_slow : &vgaph.lfb; - MEM_SetLFB((unsigned int)(vga.s3.la_window & la_winmsk) << 4u,(unsigned int)vga.mem.memsize/4096u, vga.lfb.handler, &vgaph.mmio); + /* please obey the Linear Address Window Size register! + * Windows 3.1 S3 driver will reprogram the linear framebuffer down to 0xA0000 when entering a DOSBox + * and assuming the full VRAM size will cause a LOT of problems! */ + Bitu winsz = 0x10000; + + switch (vga.s3.reg_58&3) { + case 1: + winsz = 1 << 20; //1MB + break; + case 2: + winsz = 2 << 20; //2MB + break; + case 3: + winsz = 4 << 20; //4MB + break; + // FIXME: What about the 8MB window? + } + + /* NTS: 64KB winsz = 0x10000 => winmsk = 0xFFFF0000 => 0xFFFF + * 1MB winsz = 0x100000 => winmsk = 0xFFF00000 => 0xFFF0 + * 2MB winsz = 0x200000 => winmsk = 0xFFE00000 => 0xFFE0 + * and so on. + * + * From the S3 Trio32/Trio64 documentation regarding the Linear Address Window Position Registers: + * "The Linear Address Window resides on a 64KB, 1MB, 2MB, or 4MB (Trio64 only) memory boundary (size-aligned) ... + * Some LSBs of this register are ignored because of the size-aligned boundary scheme" */ + const unsigned int la_winmsk = ~((winsz - 1u) >> 16u); /* Register holds the upper 16 bits of the linear address */ + + /* The LFB register has an enable bit */ + if (!(vga.s3.reg_58 & 0x10)) { + vga.lfb.page = (unsigned int)(vga.s3.la_window & la_winmsk) << 4u; + vga.lfb.addr = (unsigned int)(vga.s3.la_window & la_winmsk) << 16u; + vga.lfb.handler = NULL; + MEM_SetLFB(0,0,NULL,NULL); + } + /* if the DOS application or Windows 3.1 driver attempts to put the linear framebuffer + * below the top of memory, then we're probably entering a DOS VM and it's probably + * a 64KB window. If it's not a 64KB window then print a warning. */ + else if ((unsigned long)(vga.s3.la_window << 4UL) < (unsigned long)MEM_TotalPages()) { + if (winsz != 0x10000) // 64KB window normal for entering a DOS VM in Windows 3.1 or legacy bank switching in DOS + LOG(LOG_MISC,LOG_WARN)("S3 warning: Window size != 64KB and address conflict with system RAM!"); + + vga.lfb.page = (unsigned int)(vga.s3.la_window & la_winmsk) << 4u; + vga.lfb.addr = (unsigned int)(vga.s3.la_window & la_winmsk) << 16u; + vga.lfb.handler = NULL; + MEM_SetLFB(0,0,NULL,NULL); + } + else { + vga.lfb.page = (unsigned int)(vga.s3.la_window & la_winmsk) << 4u; + vga.lfb.addr = (unsigned int)(vga.s3.la_window & la_winmsk) << 16u; + vga.lfb.handler = vga_memio_lfb_delay ? &vgaph.lfb_slow : &vgaph.lfb; + MEM_SetLFB((unsigned int)(vga.s3.la_window & la_winmsk) << 4u,(unsigned int)vga.mem.memsize/4096u, vga.lfb.handler, &vgaph.mmio); + } } } @@ -2915,14 +2979,7 @@ void VGA_SetupMemory() { vga.svga.bank_read = vga.svga.bank_write = 0; vga.svga.bank_read_full = vga.svga.bank_write_full = 0; - - /* obey user override for "bank size", which this code inherited from DOSBox SVN - * confuses with "bank granularity". If "bank size" were truly a concern it would - * affect how much of the A0000-BFFFF region VGA mapping would expose. */ - if (vbe_window_granularity > 0) - vga.svga.bank_size = vbe_window_granularity; /* allow different sizes for dev testing */ - else - vga.svga.bank_size = 0x10000; /* most common bank size is 64K */ + vga.svga.bank_size = vbe_window_granularity; if (!VGA_Memory_ShutDown_init) { AddExitFunction(AddExitFunctionFuncPair(VGA_Memory_ShutDown)); diff --git a/src/hardware/vga_misc.cpp b/src/hardware/vga_misc.cpp index 1471ff7ea1f..019d08458a6 100644 --- a/src/hardware/vga_misc.cpp +++ b/src/hardware/vga_misc.cpp @@ -33,6 +33,7 @@ void vga_write_p3d4(Bitu port,Bitu val,Bitu iolen); Bitu vga_read_p3d4(Bitu port,Bitu iolen); void vga_write_p3d5(Bitu port,Bitu val,Bitu iolen); Bitu vga_read_p3d5(Bitu port,Bitu iolen); +extern bool vga_render_wait_for_changes; extern void DISP2_RegisterPorts(void); extern bool DISP2_Active(void); @@ -56,10 +57,13 @@ Bitu vga_read_p3da(Bitu port,Bitu iolen) { uint8_t retval = vga_p3da_undefined_bits; double timeInFrame = PIC_FullIndex()-vga.draw.delay.framestart; + if (vga.dosboxig.vga_3da_lockout) + return 0; + // If the game or demo is wasting time in a loop polling this register (not merely reading to // clear the port 3C0h flip/flop) then now is as good a time as any to render the VGA raster // up to the current point. - if (vga_render_on_demand && !vga.attr.disabled/*screen not disabled*/ && !vga.internal.attrindex/*attribute controller flipflop clear*/) VGA_RenderOnDemandUpTo(); + if (vga_render_on_demand && !vga_render_wait_for_changes && !vga.attr.disabled/*screen not disabled*/ && !vga.internal.attrindex/*attribute controller flipflop clear*/) VGA_RenderOnDemandUpTo(); vga.internal.attrindex=false; vga.tandy.pcjr_flipflop=false; @@ -71,17 +75,27 @@ Bitu vga_read_p3da(Bitu port,Bitu iolen) { if (timeInFrame >= vga.draw.delay.vdend) { retval |= 1; // vertical blanking } else { - double timeInLine=fmod(timeInFrame,vga.draw.delay.htotal); - if (timeInLine >= vga.draw.delay.hblkstart && - timeInLine <= vga.draw.delay.hblkend) { + const double timeInLine = fmod(timeInFrame,vga.draw.delay.htotal); + if (timeInLine >= vga.draw.delay.hblkstart && timeInLine <= vga.draw.delay.hblkend) retval |= 1; // horizontal blanking - } } - if (timeInFrame >= vga.draw.delay.vrstart && - timeInFrame <= vga.draw.delay.vrend) { + if (timeInFrame >= vga.draw.delay.vrstart && timeInFrame <= vga.draw.delay.vrend) retval |= 8; // vertical retrace - } + + /* Tseng ET3000/ET4000 cards have additional documented bits: + * [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/Video/VGA/SVGA/Tseng%20Labs/Tseng%20ET4000%20Graphics%20Controller%20%281990%29%2epdf] + * + * bit 0 ~display enable (hblank | vblank) + * bit 1-2 zero + * bit 3 vretrace + * bit 4-5 diagnostic feedback from attribute controller(?) + * bi6 6 zero + * bit 7 ~vretrace (invert of bit 3) + * + * VGAKIT must read bit 7 as a complement of bit 3 to test for ET3000/ET4000 */ + if (IS_VGA_ARCH && (svgaCard == SVGA_TsengET3K || svgaCard == SVGA_TsengET4K)) + retval ^= ((retval & 8u) ^ 8u) << 4u; vsync_poll_debug_notify(); return retval; @@ -90,6 +104,10 @@ Bitu vga_read_p3da(Bitu port,Bitu iolen) { static void write_p3c2(Bitu port,Bitu val,Bitu iolen) { (void)port;//UNUSED (void)iolen;//UNUSED + + if (vga.dosboxig.vga_reg_lockout) + return; + if((machine==MCH_EGA) && ((vga.misc_output^val)&0xc)) VGA_StartResize(); vga.misc_output=(uint8_t)val; Bitu base=(val & 0x1) ? 0x3d0 : 0x3b0; diff --git a/src/hardware/vga_other.cpp b/src/hardware/vga_other.cpp index d427d9d53c8..f470465a667 100644 --- a/src/hardware/vga_other.cpp +++ b/src/hardware/vga_other.cpp @@ -29,6 +29,7 @@ #include "render.h" #include "mapper.h" #include "control.h" +#include "../ints/int10.h" #include @@ -943,6 +944,27 @@ static void write_tandy_reg(uint8_t val) { } } +/* You're not SUPPOSED to read Tandy registers 3D8, 3DE, 3DF, they're documented WRITE ONLY! */ +static Bitu read_tandy(Bitu port,Bitu /*iolen*/) { + LOG(LOG_VGAMISC,LOG_DEBUG)("DOS applications are NOT SUPPOSED to read Tandy register %x",(unsigned int)port); + + switch (port) { + /* "Troubadours" does not switch into Tandy 320x200 16-color by calling INT 10h. + * Instead, it has it's own hand-written code to modify registers directly. + * For whatever reason, it modifies 3DD and 3DF by reading, modifying, and writing + * the registers EVEN THOUGH Tandy documents the registers as write only. + * Returning the last written value doesn't work, because the modified values + * come out incorrect. 3DFh after modification comes out to 0xFF which maps the + * video RAM to B800h as repeating 16KB banks for example. The game works correctly + * if this code provides 0x00, not 0xFF, when it reads these specific registers. */ + case 0x3DD: + case 0x3DF: + return 0; + } + + return ~0u; +} + static void write_tandy(Bitu port,Bitu val,Bitu /*iolen*/) { switch (port) { case 0x3d8: @@ -980,7 +1002,6 @@ static void write_tandy(Bitu port,Bitu val,Bitu /*iolen*/) { // appears to be ORed with CPU A14 (to preserve some sort of // backwards compatibility?), resulting in odd pages being mapped // as 2x16kB. Implemented in vga_memory.cpp Tandy handler. - vga.tandy.line_mask = (uint8_t)(val >> 6); vga.tandy.draw_bank = val & ((vga.tandy.line_mask&2) ? 0x6 : 0x7); vga.tandy.mem_bank = (val >> 3) & 7; @@ -1092,6 +1113,8 @@ void Herc_Palette(void) { VGA_DAC_SetEntry(0xf,0x00,0x3f,0x00); break; } + + VGA_DAC_UpdateColorPalette(); } void Mono_CGA_Palette(void) { @@ -1220,7 +1243,6 @@ Bitu read_herc_status(Bitu /*port*/,Bitu /*iolen*/) { } extern int eurAscii; -extern uint8_t int10_font_08[256 * 8], int10_font_14[256 * 14], int10_font_16[256 * 16]; uint8_t euro_08[8] = { 0x3c, 0x66, 0xfc, 0x60, 0xf8, 0x66, 0x3c, 0x00, }; @@ -1234,14 +1256,16 @@ uint8_t euro_16[16] = { }; void VGA_SetupOther(void) { - if (eurAscii>32 && eurAscii<256) { - for (int i=eurAscii*8;i<(eurAscii+1)*8;i++) - int10_font_08[i]=euro_08[i%8]; - for (int i=eurAscii*14;i<(eurAscii+1)*14;i++) - int10_font_14[i]=euro_14[i%14]; - for (int i=eurAscii*16;i<(eurAscii+1)*16;i++) - int10_font_16[i]=euro_16[i%16]; - } + if (eurAscii>32 && eurAscii<256) { + for (int i=eurAscii*8;i<(eurAscii+1)*8;i++) + int10_font_08[i]=euro_08[i%8]; + for (int i=eurAscii*14;i<(eurAscii+1)*14;i++) + int10_font_14[i]=euro_14[i%14]; + for (int i=eurAscii*16;i<(eurAscii+1)*16;i++) + int10_font_16[i]=euro_16[i%16]; + for (int i=eurAscii*16;i<(eurAscii+1)*16;i++) + int10_font_16_mcga[i]=euro_16[i%16]; + } memset( &vga.tandy, 0, sizeof( vga.tandy )); vga.attr.disabled = 0; vga.config.bytes_skip=0; @@ -1295,6 +1319,18 @@ void VGA_SetupOther(void) { } if (machine==MCH_TANDY) { write_tandy( 0x3df, 0x0, 0 ); + + // according to Tandy SX documentation a lot of registers are write-only + IO_RegisterReadHandler(0x3d4,read_tandy,IO_MB); + IO_RegisterReadHandler(0x3d5,read_tandy,IO_MB); + IO_RegisterReadHandler(0x3d8,read_tandy,IO_MB); + IO_RegisterReadHandler(0x3d9,read_tandy,IO_MB); + IO_RegisterReadHandler(0x3db,read_tandy,IO_MB); + IO_RegisterReadHandler(0x3dc,read_tandy,IO_MB); + IO_RegisterReadHandler(0x3dd,read_tandy,IO_MB); + IO_RegisterReadHandler(0x3de,read_tandy,IO_MB); + IO_RegisterReadHandler(0x3df,read_tandy,IO_MB); + IO_RegisterWriteHandler(0x3d8,write_tandy,IO_MB); IO_RegisterWriteHandler(0x3d9,write_tandy,IO_MB); IO_RegisterWriteHandler(0x3da,write_tandy,IO_MB); diff --git a/src/hardware/vga_paradise.cpp b/src/hardware/vga_paradise.cpp index 464c7f8675f..4eee1ead558 100644 --- a/src/hardware/vga_paradise.cpp +++ b/src/hardware/vga_paradise.cpp @@ -28,7 +28,6 @@ #include "cpu_io_is_forbidden.h" extern unsigned int vbe_window_granularity; -extern unsigned int vbe_window_size; typedef struct SVGA_PVGA1A_DATA_t { Bitu PR0A; @@ -60,12 +59,7 @@ static void bank_setup_pvga1a() { } else { // Single bank config is straightforward vga.svga.bank_read = vga.svga.bank_write = (uint8_t)pvga1a.PR0A; - - if (vbe_window_granularity > 0) - vga.svga.bank_size = vbe_window_granularity; /* allow different sizes for dev testing */ - else - vga.svga.bank_size = 4*1024; - + vga.svga.bank_size = vbe_window_granularity; /* allow different sizes for dev testing */ VGA_SetupHandlers(); } } @@ -192,8 +186,6 @@ void DetermineMode_PVGA1A() { // merge them. if (vga.attr.mode_control & 1) { if (vga.gfx.mode & 0x40) VGA_SetMode((pvga1a.biosMode<=0x13)?M_VGA:M_LIN8); - else if (vga.gfx.mode & 0x20) VGA_SetMode(M_CGA4); - else if ((vga.gfx.miscellaneous & 0x0c)==0x0c) VGA_SetMode(M_CGA2); else VGA_SetMode((pvga1a.biosMode<=0x13)?M_EGA:M_LIN4); } else { VGA_SetMode(M_TEXT); @@ -219,6 +211,9 @@ void SVGA_Setup_ParadisePVGA1A(void) { svga.write_p3cf = &write_p3cf_pvga1a; svga.read_p3cf = &read_p3cf_pvga1a; + vga.max_svga_width = 2048; // GUESS + vga.max_svga_height = 1024; + svga.set_video_mode = &FinishSetMode_PVGA1A; svga.determine_mode = &DetermineMode_PVGA1A; svga.set_clock = &SetClock_PVGA1A; diff --git a/src/hardware/vga_pc98_cg.cpp b/src/hardware/vga_pc98_cg.cpp index ab881496fa5..1d31d081bbe 100644 --- a/src/hardware/vga_pc98_cg.cpp +++ b/src/hardware/vga_pc98_cg.cpp @@ -17,6 +17,7 @@ */ #include "dosbox.h" +#include "control.h" #include "logging.h" #include "setup.h" #include "video.h" @@ -45,6 +46,7 @@ #include "cpu_io_is_forbidden.h" /* Character Generator (CG) font access state */ +bool pc98_cg_kanji_dot_access_mode = false; uint16_t a1_font_load_addr = 0; uint8_t a1_font_char_offset = 0; @@ -53,6 +55,9 @@ uint8_t a1_font_char_offset = 0; * a 1986 book published about NEC BIOS and BASIC ROM. */ Bitu pc98_a1_read(Bitu port,Bitu iolen) { (void)iolen;//UNUSED + + Section_prop *section = static_cast(control->GetSection("pc98")); + switch (port) { case 0xA9: // an 8-bit I/O port to access font RAM by... // NOTES: On a PC-9821 Lt2 laptop, the character ROM doesn't seem to latch valid data beyond @@ -60,7 +65,23 @@ Bitu pc98_a1_read(Bitu port,Bitu iolen) { // on the bus can read back nonzero. This doesn't apply to 0x0000-0x00FF of course (single wide // characters), but only to the double-wide character set where (c & 0x007F) >= 0x5D. // This behavior should be emulated. */ - return pc98_font_char_read(a1_font_load_addr,a1_font_char_offset & 0xF,(a1_font_char_offset & 0x20) ? 0 : 1); + // + // On some (most?) models, reading from the character generator outside of VSync + // (always with ANK, in Code Access mode with Kanji) is invalid and returns 0xFF. + if ( + // Configured to ignore + (!section->Get_bool("pc-98 chargen vsync-limited access")) + + // Kanji, Dot Access + || (((a1_font_load_addr & 0xFF00) != 0) && pc98_cg_kanji_dot_access_mode) + // Kanji, Code Access & ANK + || (pc98_gdc[GDC_MASTER].read_status() & 0x20) + ) { + return pc98_font_char_read(a1_font_load_addr,a1_font_char_offset & 0xF,(a1_font_char_offset & 0x20) ? 0 : 1); + } else { + LOG_MSG("A9 port attempt to read char 0x%04x/line %X in code access mode outside of vsync",a1_font_load_addr,a1_font_char_offset & 0xF); + return ~0ul; + } default: break; } diff --git a/src/hardware/vga_pc98_crtc.cpp b/src/hardware/vga_pc98_crtc.cpp index 963d46a28e0..e0fc42bb8b6 100644 --- a/src/hardware/vga_pc98_crtc.cpp +++ b/src/hardware/vga_pc98_crtc.cpp @@ -52,6 +52,7 @@ extern bool pc98_attr4_graphic; extern bool pc98_display_enable; extern bool pc98_monochrome_mode; extern bool pc98_graphics_hide_odd_raster_200line; +extern bool pc98_cg_kanji_dot_access_mode; extern bool pc98_crt_mode; // see port 6Ah command 40h/41h. // TODO: Other parts that change gdc_5mhz_mode should update these too! @@ -290,9 +291,9 @@ void pc98_port68_command_write(unsigned char b) { if (vga_render_on_demand) VGA_RenderOnDemandUpTo(); pc98_graphics_hide_odd_raster_200line = !!(b&1); break; - case 0x0A: // TODO - case 0x0B: // TODO - // TODO + case 0x0A: // Kanji Code Generator access mode: Code (reads only valid during VSync, can display kanji) + case 0x0B: // Dot (reads always valid, cannot display kanji) + pc98_cg_kanji_dot_access_mode = !!(b&1); break; case 0x0E: // Display enable case 0x0F: diff --git a/src/hardware/vga_s3.cpp b/src/hardware/vga_s3.cpp index 1c743b5c14e..65953c26f0b 100644 --- a/src/hardware/vga_s3.cpp +++ b/src/hardware/vga_s3.cpp @@ -409,17 +409,9 @@ void SVGA_S3_WriteCRTC(Bitu reg,Bitu val,Bitu iolen) { } break; case 0x6a: /* Extended System Control 4 */ - /* S3 cards think only in 64KB bank granularity. - * An option was added to emulate smaller amounts of granularity, but - * then this 7-bit field causes problems. Since the smaller granularity - * breaks accuracy anyway, go ahead and accept the full 8-bit value - * in that case as a hack. */ - if (vbe_window_granularity == 0 || vbe_window_granularity >= (64*1024)) - vga.svga.bank_read=(uint8_t)val & 0x7f; - else - vga.svga.bank_read=(uint8_t)val & 0xff; - - vga.svga.bank_write = vga.svga.bank_read; + /* S3 cards think only in 64KB bank granularity. */ + vga.svga.bank_read = (uint8_t)val & 0x7f; + vga.svga.bank_write = vga.svga.bank_read; VGA_SetupHandlers(); break; case 0x6b: // BIOS scratchpad: LFB address @@ -679,10 +671,8 @@ bool SVGA_S3_HWCursorActive(void) { return (vga.s3.hgc.curmode & 0x1) != 0; } -uint32_t GetReportedVideoMemorySize(void); - bool SVGA_S3_AcceptsMode(Bitu mode) { - return VideoModeMemSize(mode) < GetReportedVideoMemorySize(); + return VideoModeMemSize(mode) < vga.mem.vbe_memsize; } extern bool VGA_BIOS_use_rom; @@ -695,6 +685,9 @@ void SVGA_Setup_S3Trio(void) { svga.write_p3c0 = nullptr; /* no S3-specific functionality */ svga.read_p3c1 = nullptr; /* no S3-specific functionality */ + vga.max_svga_width = 2048; + vga.max_svga_height = 2048; + svga.set_video_mode = nullptr; /* implemented in core */ svga.determine_mode = &VGA_DetermineMode_S3; svga.set_clock = &SetClock_S3; diff --git a/src/hardware/vga_seq.cpp b/src/hardware/vga_seq.cpp index b758b1b3a14..be003e64705 100644 --- a/src/hardware/vga_seq.cpp +++ b/src/hardware/vga_seq.cpp @@ -138,6 +138,9 @@ unsigned int VGA_ComplexityCheck_ODDEVEN(void) { void write_p3c5(Bitu /*port*/,Bitu val,Bitu iolen) { unsigned int cmplx = 0; + if (vga.dosboxig.vga_reg_lockout) + return; + // LOG_MSG("SEQ WRITE reg %X val %X",seq(index),val); switch(seq(index)) { case 0: /* Reset */ @@ -189,10 +192,10 @@ void write_p3c5(Bitu /*port*/,Bitu val,Bitu iolen) { seq(character_map_select)=(uint8_t)val; uint8_t font1=(val & 0x3) << 1; if (IS_VGA_ARCH) font1|=(val & 0x10) >> 4; - vga.draw.font_tables[0]=&vga.draw.font[font1*8*1024]; + vga.draw.font_tables[0]=vga.mem.linear + (((font1*8*1024) & vga.draw.planar_mask) * 4u/*planar byte to byte offset*/) + 2/*plane*/; uint8_t font2=((val & 0xc) >> 1); if (IS_VGA_ARCH) font2|=(val & 0x20) >> 5; - vga.draw.font_tables[1]=&vga.draw.font[font2*8*1024]; + vga.draw.font_tables[1]=vga.mem.linear + (((font2*8*1024) & vga.draw.planar_mask) * 4u/*planar byte to byte offset*/) + 2/*plane*/; } /* 0,1,4 Selects VGA Character Map (0..7) if bit 3 of the character @@ -207,7 +210,7 @@ void write_p3c5(Bitu /*port*/,Bitu val,Bitu iolen) { /* 0 Set if in an alphanumeric mode, clear in graphics modes. 1 Set if more than 64kbytes on the adapter. - 2 Enables Odd/Even addressing mode if set. Odd/Even mode places all odd + 2 Disables Odd/Even addressing mode if set. Odd/Even mode places all odd bytes in plane 1&3, and all even bytes in plane 0&2. 3 If set address bit 0-1 selects video memory planes (256 color mode), rather than the Map Mask and Read Map Select Registers. diff --git a/src/hardware/vga_tseng.cpp b/src/hardware/vga_tseng.cpp index d2f6d60e506..16a913cdc34 100644 --- a/src/hardware/vga_tseng.cpp +++ b/src/hardware/vga_tseng.cpp @@ -34,7 +34,6 @@ extern bool vga_enable_3C6_ramdac; extern bool vga_sierra_lock_565; extern unsigned int vbe_window_granularity; -extern unsigned int vbe_window_size; // Tseng ET4K data typedef struct { @@ -100,8 +99,11 @@ void write_p3d5_et4k(Bitu reg,Bitu val,Bitu iolen) { // 3d4 index 33h (R/W): Extended start Address // 0-1 Display Start Address bits 16-17 // 2-3 Cursor start address bits 16-17 + // 4-7 zero, does not exist // Used by standard Tseng ID scheme - et4k.store_3d4_33 = val; + // The upper 4 bits must remain zero or else VGAKIT based programs will fail to detect ET3000/ET4000. + // See also [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/Video/VGA/SVGA/Tseng%20Labs/Tseng%20ET4000%20Graphics%20Controller%20%281990%29%2epdf] PDF page 131 "Extended Start Address". + et4k.store_3d4_33 = val & 0x0F; vga.config.display_start = (vga.config.display_start & 0xffff) | ((val & 0x03)<<16); vga.config.cursor_start = (vga.config.cursor_start & 0xffff) | ((val & 0x0c)<<14); break; @@ -152,11 +154,21 @@ void write_p3d5_et4k(Bitu reg,Bitu val,Bitu iolen) { break; // 3d4h index 36h - Video System Configuration 1 (R/W) - // VGADOC provides a lot of info on this register, Ferraro has significantly less detail. - // This is unlikely to be used by any games. Bit 4 switches chipset into linear mode - - // that may be useful in some cases if there is any software actually using it. - // TODO (not near future): support linear addressing - STORE_ET4K(3d4, 36); + // Bits 0-2: Refresh count per line - 1 + // Bit 3: Font width control (1=up to 16-bit, 0=8-bit VGA compatible font) + // Bit 4: Segment/linear system configuration (0=segment 1=linear), + // meaning to present the 1MB of the card as a linear framebuffer somewhere on the SSA bus + // Bit 5: Addressing mode (0=IBM 1=TLI). + // If set, enables contiguous address mapping which is a much more efficient use of the card's resources. + // If not set, address mapping is compatible with VGA. + // Bit 6: 16-bit display memory read/write (1=enable) + // Bit 7: 16-bit I/O read/write (1=enable) + case 0x36: + if (val != et4k.store_3d4_36) { + et4k.store_3d4_36 = val; + // TODO + } + break; // 3d4h index 37 - Video System Configuration 2 (R/W) // Bits 0,1, and 3 provides information about memory size: @@ -271,13 +283,18 @@ Bitu read_p3cd_et4k(Bitu port,Bitu iolen) { void write_p3c0_et4k(Bitu reg,Bitu val,Bitu iolen) { (void)iolen;//UNUSED switch(reg) { - // 3c0 index 16h: ATC Miscellaneous - // VGADOC provides a lot of information, Ferarro documents only two bits - // and even those incompletely. The register is used as part of identification - // scheme. - // Unlikely to be used by any games but double timing may be useful. - // TODO: Figure out if this has any practical use - STORE_ET4K(3c0, 16); + /* 3c0 index 16h: ATC Miscellaneous + bit 7: bypass the internal palette + bit 6: 2-byte character code (ET4000 Rev E) [TODO: See addendum 6.1] + bit 4-5: Select high resolution/color mode + 00b: Normal + 01b: Reserved + 10b: High resolution mode (up to 256 colors) + 11b: High-color 16-bit/pixel + bit 0-3: Reserved */ + case 0x16: + et4k.store_3c0_16 = val; + break; /* 3C0h index 17h (R/W): Miscellaneous 1 bit 7 If set protects the internal palette ram and redefines the attribute @@ -440,9 +457,9 @@ void DetermineMode_ET4K() { VGA_SetMode(M_LIN8); } } - else if (vga.gfx.mode & 0x20) VGA_SetMode(M_CGA4); - else if ((vga.gfx.miscellaneous & 0x0c)==0x0c) VGA_SetMode(M_CGA2); - else VGA_SetMode((et4k.biosMode<=0x13)?M_EGA:M_LIN4); + else { + VGA_SetMode((et4k.biosMode<=0x13)?M_EGA:M_LIN4); + } } else { VGA_SetMode(M_TEXT); } @@ -613,6 +630,9 @@ void SVGA_Setup_TsengET4K(void) { svga.write_p3c0 = &write_p3c0_et4k; svga.read_p3c1 = &read_p3c1_et4k; + vga.max_svga_width = 2048; // because Tseng reportedly supports a 1280x1024 mode + vga.max_svga_height = 1024; + svga.set_video_mode = &FinishSetMode_ET4K; svga.determine_mode = &DetermineMode_ET4K; svga.set_clock = &SetClock_ET4K; @@ -624,8 +644,8 @@ void SVGA_Setup_TsengET4K(void) { // From the depths of X86Config, probably inexact VGA_SetClock(0,CLK_25); VGA_SetClock(1,CLK_28); - VGA_SetClock(2,32400); - VGA_SetClock(3,35900); + VGA_SetClock(2,32515); + VGA_SetClock(3,40000); VGA_SetClock(4,39900); VGA_SetClock(5,44700); VGA_SetClock(6,31400); @@ -832,7 +852,7 @@ void write_p3cd_et3k(Bitu port,Bitu val,Bitu iolen) { vga.svga.bank_write = val & 0x07; vga.svga.bank_read = (val>>3) & 0x07; - if (vbe_window_granularity > 0) + if (vbe_window_granularity < 0x10000/*64KB*/) vga.svga.bank_size = vbe_window_granularity; /* allow different sizes for dev testing */ else vga.svga.bank_size = (val&0x40)?64*1024:128*1024; @@ -955,8 +975,6 @@ void DetermineMode_ET3K() { // merge them. if (vga.attr.mode_control & 1) { if (vga.gfx.mode & 0x40) VGA_SetMode((et3k.biosMode<=0x13)?M_VGA:M_LIN8); // Ugly... - else if (vga.gfx.mode & 0x20) VGA_SetMode(M_CGA4); - else if ((vga.gfx.miscellaneous & 0x0c)==0x0c) VGA_SetMode(M_CGA2); else VGA_SetMode((et3k.biosMode<=0x13)?M_EGA:M_LIN4); } else { VGA_SetMode(M_TEXT); diff --git a/src/ints/bios.cpp b/src/ints/bios.cpp index d2cbc65979a..086a72f0392 100644 --- a/src/ints/bios.cpp +++ b/src/ints/bios.cpp @@ -1,12848 +1,13201 @@ -/* - * Copyright (C) 2002-2021 The DOSBox Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include -#include "control.h" -#include "dosbox.h" -#include "mem.h" -#include "cpu.h" -#include "bios.h" -#include "regs.h" -#include "timer.h" -#include "cpu.h" -#include "bitop.h" -#include "callback.h" -#include "inout.h" -#include "pic.h" -#include "hardware.h" -#include "pci_bus.h" -#include "joystick.h" -#include "mouse.h" -#include "callback.h" -#include "setup.h" -#include "bios_disk.h" -#include "serialport.h" -#include "mapper.h" -#include "vga.h" -#include "jfont.h" -#include "shiftjis.h" -#include "pc98_gdc.h" -#include "pc98_gdc_const.h" -#include "regionalloctracking.h" -#include "build_timestamp.h" -extern bool PS1AudioCard; -#include "parport.h" -#include "dma.h" -#include "shell.h" -#include "render.h" -#include "sdlmain.h" -#include -#include -#include "version_string.h" - -#if C_LIBPNG -#include -#endif - -#if defined(DB_HAVE_CLOCK_GETTIME) && ! defined(WIN32) -//time.h is already included -#else -#include -#endif - -#if C_EMSCRIPTEN -# include -#endif - -#include - -#if defined(_MSC_VER) -# pragma warning(disable:4244) /* const fmath::local::uint64_t to double possible loss of data */ -# pragma warning(disable:4305) /* truncation from double to float */ -#endif - -#if defined(WIN32) && !defined(S_ISREG) -# define S_ISREG(x) ((x & S_IFREG) == S_IFREG) -#endif - -struct BIOS_E280_entry { - uint64_t base = 0; - uint64_t length = 0; - uint32_t type = 0; - uint32_t acpi_ext_addr = 0; -}; - -#define MAX_E280 16 -static BIOS_E280_entry E280_table[MAX_E280]; -static unsigned int E280_table_entries = 0; - -bool VGA_InitBiosLogo(unsigned int w,unsigned int h,unsigned int x,unsigned int y); -void VGA_WriteBiosLogoBMP(unsigned int y,unsigned char *scanline,unsigned int w); -void VGA_WriteBiosLogoPalette(unsigned int start,unsigned int count,unsigned char *rgb); -void VGA_FreeBiosLogo(void); -void VGA_ShowBIOSLogo(void); - -extern bool ega200; - -unsigned char ACPI_ENABLE_CMD = 0xA1; -unsigned char ACPI_DISABLE_CMD = 0xA0; -unsigned int ACPI_IO_BASE = 0x820; -unsigned int ACPI_PM1A_EVT_BLK = 0x820; -unsigned int ACPI_PM1A_CNT_BLK = 0x824; -unsigned int ACPI_PM_TMR_BLK = 0x830; -/* debug region 0x840-0x84F */ -unsigned int ACPI_DEBUG_IO = 0x840; - -std::string ibm_rom_basic; -size_t ibm_rom_basic_size = 0; -uint32_t ibm_rom_basic_base = 0; - -/* NTS: The "Epson check" code in Windows 2.1 only compares up to the end of "NEC Corporation" */ -const std::string pc98_copyright_str = "Copyright (C) 1983 by NEC Corporation / Microsoft Corp.\x0D\x0A"; - -/* more strange data involved in the "Epson check" */ -const unsigned char pc98_epson_check_2[0x27] = { - 0x26,0x8A,0x05,0xA8,0x10,0x75,0x11,0xC6,0x06,0xD6,0x09,0x1B,0xC6,0x06,0xD7,0x09, - 0x4B,0xC6,0x06,0xD8,0x09,0x48,0xEB,0x0F,0xC6,0x06,0xD6,0x09,0x1A,0xC6,0x06,0xD7 , - 0x09,0x70,0xC6,0x06,0xD8,0x09,0x71 -}; - -bool enable_pc98_copyright_string = false; - -/* mouse.cpp */ -extern bool pc98_40col_text; -extern bool en_bios_ps2mouse; -extern bool rom_bios_8x8_cga_font; -extern bool pcibus_enable; -extern bool enable_fpu; - -bool pc98_timestamp5c = true; // port 5ch and 5eh "time stamp/hardware wait" - -uint32_t Keyb_ig_status(); -bool VM_Boot_DOSBox_Kernel(); -Bitu bios_post_parport_count(); -Bitu bios_post_comport_count(); -void pc98_update_cpu_page_ptr(void); -bool KEYBOARD_Report_BIOS_PS2Mouse(); -bool gdc_5mhz_according_to_bios(void); -void pc98_update_display_page_ptr(void); -void pc98_update_palette(void); -bool MEM_map_ROM_alias_physmem(Bitu start,Bitu end); -void MOUSE_Startup(Section *sec); -void Mouse_PS2SetSamplingRate(uint8_t rate); -bool Mouse_PS2SetPacketSize(uint8_t packet_size); -void change_output(int output); -void runBoot(const char *str); -void SetIMPosition(void); -bool isDBCSCP(); -Bitu INT60_Handler(void); -Bitu INT6F_Handler(void); -#if defined(USE_TTF) -void ttf_switch_on(bool ss), ttf_switch_off(bool ss), ttf_setlines(int cols, int lins); -#endif - -/* Rate limit log entries regarding APM AH=05h CPU IDLE because Windows 98's APM driver likes to call it way too much per second */ -pic_tickindex_t APM_log_cpu_idle_next_report = 0; -unsigned long APM_log_cpu_idle = 0; - -unsigned long APM_WakeupKeys = 0; - -/* APM events (eventually ACPI as well) */ -unsigned long PowerButtonClicks = 0; -bool APM_ResumeNotificationFromSuspend = false; -bool APM_ResumeNotificationFromStandby = false; -bool APM_PowerButtonSendsSuspend = true; - - -bool bochs_port_e9 = false; -bool isa_memory_hole_512kb = false; -bool isa_memory_hole_15mb = false; -bool int15_wait_force_unmask_irq = false; - -int unhandled_irq_method = UNHANDLED_IRQ_SIMPLE; - -unsigned int reset_post_delay = 0; - -Bitu call_irq_default = 0; -uint16_t biosConfigSeg=0; - -static constexpr unsigned int ACPI_PMTIMER_CLOCK_RATE = 3579545; /* 3.579545MHz */ - -pic_tickindex_t ACPI_PMTIMER_BASE_TIME = 0; -uint32_t ACPI_PMTIMER_BASE_COUNT = 0; -uint32_t ACPI_PMTIMER_MASK = 0xFFFFFFu; /* 24-bit mode */ - -uint32_t ACPI_PMTIMER(void) { - pic_tickindex_t pt = PIC_FullIndex() - ACPI_PMTIMER_BASE_TIME; - uint32_t ct = (uint32_t)((pt * ACPI_PMTIMER_CLOCK_RATE) / 1000.0); - return ct; -} - -void ACPI_PMTIMER_Event(Bitu /*val*/); -void ACPI_PMTIMER_ScheduleNext(void) { - const uint32_t now_ct = ACPI_PMTIMER() & ACPI_PMTIMER_MASK; - const uint32_t next_delay_ct = (ACPI_PMTIMER_MASK + 1u) - now_ct; - const pic_tickindex_t delay = (1000.0 * next_delay_ct) / (pic_tickindex_t)ACPI_PMTIMER_CLOCK_RATE; - - LOG(LOG_MISC,LOG_DEBUG)("ACPI PM TIMER SCHEDULE: now=0x%x next=0x%x delay=%.3f",now_ct,next_delay_ct,(double)delay); - PIC_AddEvent(ACPI_PMTIMER_Event,delay); -} - -void ACPI_PMTIMER_CHECK(void) { /* please don't call this often */ - PIC_RemoveEvents(ACPI_PMTIMER_Event); - LOG(LOG_MISC,LOG_DEBUG)("ACPI PM TIMER CHECK"); - ACPI_PMTIMER_ScheduleNext(); -} - -Bitu BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION = ~0u; -Bitu BIOS_DEFAULT_IRQ0_LOCATION = ~0u; // (RealMake(0xf000,0xfea5)) -Bitu BIOS_DEFAULT_IRQ1_LOCATION = ~0u; // (RealMake(0xf000,0xe987)) -Bitu BIOS_DEFAULT_IRQ07_DEF_LOCATION = ~0u; // (RealMake(0xf000,0xff55)) -Bitu BIOS_DEFAULT_IRQ815_DEF_LOCATION = ~0u; // (RealMake(0xf000,0xe880)) - -Bitu BIOS_DEFAULT_HANDLER_LOCATION = ~0u; // (RealMake(0xf000,0xff53)) -Bitu BIOS_DEFAULT_INT5_LOCATION = ~0u; // (RealMake(0xf000,0xff54)) - -Bitu BIOS_VIDEO_TABLE_LOCATION = ~0u; // RealMake(0xf000,0xf0a4) -Bitu BIOS_VIDEO_TABLE_SIZE = 0u; - -Bitu BIOS_DEFAULT_RESET_LOCATION = ~0u; // RealMake(0xf000,0xe05b) -Bitu BIOS_DEFAULT_RESET_CODE_LOCATION = ~0u; - -bool allow_more_than_640kb = false; - -unsigned int APM_BIOS_connected_minor_version = 0;// what version the OS connected to us with. default to 1.0 -unsigned int APM_BIOS_minor_version = 2; // what version to emulate e.g to emulate 1.2 set this to 2 - -static bool apm_realmode_connected = false; - -/* default bios type/version/date strings */ -const char* const bios_type_string = "IBM COMPATIBLE BIOS for DOSBox-X"; -const char* const bios_version_string = "DOSBox-X BIOS v1.0"; -const char* const bios_date_string = "01/01/92"; - -bool APM_inactivity_timer = true; - -RegionAllocTracking rombios_alloc; - -Bitu rombios_minimum_location = 0xF0000; /* minimum segment allowed */ -Bitu rombios_minimum_size = 0x10000; - -static bool ACPI_SCI_EN = false; -static bool ACPI_BM_RLD = false; - -static IO_Callout_t acpi_iocallout = IO_Callout_t_none; - -static unsigned int ACPI_PM1_Enable = 0; -static unsigned int ACPI_PM1_Status = 0; -static constexpr unsigned int ACPI_PM1_Enable_TMR_EN = (1u << 0u); -static constexpr unsigned int ACPI_PM1_Enable_GBL_EN = (1u << 5u); -static constexpr unsigned int ACPI_PM1_Enable_PWRBTN_EN = (1u << 8u); -static constexpr unsigned int ACPI_PM1_Enable_SLPBTN_EN = (1u << 9u); -static constexpr unsigned int ACPI_PM1_Enable_RTC_EN = (1u << 10u); - -unsigned int ACPI_buffer_global_lock = 0; - -unsigned long ACPI_FACS_GlobalLockValue(void) { - if (ACPI_buffer && ACPI_buffer_global_lock != 0) - return host_readd(ACPI_buffer+ACPI_buffer_global_lock); - - return 0; -} - -/* Triggered by GBL_RLS bit */ -static void ACPI_OnGuestGlobalRelease(void) { - LOG(LOG_MISC,LOG_DEBUG)("ACPI GBL_RLS event. Global lock = %lx",ACPI_FACS_GlobalLockValue()); -} - -bool ACPI_GuestEnabled(void) { - return ACPI_SCI_EN; -} - -static void ACPI_SCI_Check(void) { - if (ACPI_SCI_EN) { - if (ACPI_PM1_Status & ACPI_PM1_Enable) { - LOG(LOG_MISC,LOG_DEBUG)("ACPI SCI interrupt"); - PIC_ActivateIRQ(ACPI_IRQ); - } - } -} - -void ACPI_PowerButtonEvent(void) { - if (ACPI_SCI_EN) { - if (!(ACPI_PM1_Status & ACPI_PM1_Enable_PWRBTN_EN)) { - ACPI_PM1_Status |= ACPI_PM1_Enable_PWRBTN_EN; - ACPI_SCI_Check(); - } - } -} - -void ACPI_PMTIMER_Event(Bitu /*val*/) { - if (!(ACPI_PM1_Status & ACPI_PM1_Enable_TMR_EN)) { - ACPI_PM1_Status |= ACPI_PM1_Enable_TMR_EN; - ACPI_SCI_Check(); - } - - ACPI_PMTIMER_ScheduleNext(); -} - -/* you can't very well write strings with this, but you could write codes */ -static void acpi_cb_port_debug_w(Bitu /*port*/,Bitu val,Bitu /*iolen*/) { - LOG(LOG_MISC,LOG_DEBUG)("ACPI debug: 0x%x\n",(unsigned int)val); -} - -static void acpi_cb_port_smi_cmd_w(Bitu /*port*/,Bitu val,Bitu /*iolen*/) { - /* 8-bit SMI_CMD port */ - LOG(LOG_MISC,LOG_DEBUG)("ACPI SMI_CMD %x",(unsigned int)val); - - if (val == ACPI_ENABLE_CMD) { - if (!ACPI_SCI_EN) { - LOG(LOG_MISC,LOG_DEBUG)("Guest enabled ACPI"); - ACPI_SCI_EN = true; - ACPI_PMTIMER_CHECK(); - ACPI_SCI_Check(); - } - } - else if (val == ACPI_DISABLE_CMD) { - if (ACPI_SCI_EN) { - LOG(LOG_MISC,LOG_DEBUG)("Guest disabled ACPI"); - ACPI_PMTIMER_CHECK(); - ACPI_SCI_EN = false; - } - } -} - -static Bitu acpi_cb_port_cnt_blk_r(Bitu port,Bitu /*iolen*/) { - /* 16-bit register (PM1_CNT_LEN == 2) */ - Bitu ret = 0; - if (ACPI_SCI_EN) ret |= (1u << 0u); - if (ACPI_BM_RLD) ret |= (1u << 1u); - /* GBL_RLS is write only */ - /* TODO: bits 3-8 are "reserved by the ACPI driver"? So are they writeable then? */ - /* TODO: SLP_TYPx */ - /* SLP_EN is write-only */ - - LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM1_CNT_BLK read port %x ret %x",(unsigned int)port,(unsigned int)ret); - return ret; -} - -static void acpi_cb_port_cnt_blk_w(Bitu port,Bitu val,Bitu iolen) { - /* 16-bit register (PM1_CNT_LEN == 2) */ - LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM1_CNT_BLK write port %x val %x iolen %x",(unsigned int)port,(unsigned int)val,(unsigned int)iolen); - - /* BIOS controls SCI_EN and therefore guest cannot change it */ - ACPI_BM_RLD = !!(val & (1u << 1u)); - /* GLB_RLS is write only and triggers an SMI interrupt to pass execution to the BIOS, usually to indicate a release of the global lock and set of pending bit */ - if (val & (1u << 2u)/*GBL_RLS*/) ACPI_OnGuestGlobalRelease(); - /* TODO: bits 3-8 are "reserved by the ACPI driver"? So are they writeable then? */ - /* TODO: SLP_TYPx */ - /* SLP_EN is write-only */ -} - -static Bitu acpi_cb_port_evtst_blk_r(Bitu port,Bitu /*iolen*/) { - /* 16-bit register (PM1_EVT_LEN/2 == 2) */ - Bitu ret = ACPI_PM1_Status; - LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM1_EVT_BLK(status) read port %x ret %x",(unsigned int)port,(unsigned int)ret); - return ret; -} - -static void acpi_cb_port_evtst_blk_w(Bitu port,Bitu val,Bitu iolen) { - /* 16-bit register (PM1_EVT_LEN/2 == 2) */ - LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM1_EVT_BLK(status) write port %x val %x iolen %x",(unsigned int)port,(unsigned int)val,(unsigned int)iolen); - ACPI_PM1_Status &= (~val); - ACPI_SCI_Check(); -} - -static Bitu acpi_cb_port_evten_blk_r(Bitu port,Bitu /*iolen*/) { - /* 16-bit register (PM1_EVT_LEN/2 == 2) */ - Bitu ret = ACPI_PM1_Enable; - LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM1_EVT_BLK(enable) read port %x ret %x",(unsigned int)port,(unsigned int)ret); - return ret; -} - -static Bitu acpi_cb_port_tmr_r(Bitu port,Bitu /*iolen*/) { - /* 24 or 32-bit TMR_VAL (depends on the mask value and whether our ACPI structures tell the OS it's 32-bit wide) */ - Bitu ret = (Bitu)ACPI_PMTIMER(); - LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM_TMR read port %x ret %x",(unsigned int)port,(unsigned int)ret); - return ret; -} - -static void acpi_cb_port_evten_blk_w(Bitu port,Bitu val,Bitu iolen) { - /* 16-bit register (PM1_EVT_LEN/2 == 2) */ - LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM1_EVT_BLK(enable) write port %x val %x iolen %x",(unsigned int)port,(unsigned int)val,(unsigned int)iolen); - ACPI_PM1_Enable = val; - ACPI_SCI_Check(); -} - -static IO_ReadHandler* acpi_cb_port_r(IO_CalloutObject &co,Bitu port,Bitu iolen) { - (void)co; - (void)iolen; - - if ((port & (~1u)) == (ACPI_PM1A_EVT_BLK+0) && iolen >= 2) - return acpi_cb_port_evtst_blk_r; - else if ((port & (~1u)) == (ACPI_PM1A_EVT_BLK+2) && iolen >= 2) - return acpi_cb_port_evten_blk_r; - else if ((port & (~1u)) == ACPI_PM1A_CNT_BLK && iolen >= 2) - return acpi_cb_port_cnt_blk_r; - /* The ACPI specification says nothing about reading SMI_CMD so assume that means write only */ - else if ((port & (~3u)) == ACPI_PM_TMR_BLK && iolen >= 4) - return acpi_cb_port_tmr_r; - - return NULL; -} - -static IO_WriteHandler* acpi_cb_port_w(IO_CalloutObject &co,Bitu port,Bitu iolen) { - (void)co; - (void)iolen; - - if ((port & (~1u)) == (ACPI_PM1A_EVT_BLK+0) && iolen >= 2) - return acpi_cb_port_evtst_blk_w; - else if ((port & (~1u)) == (ACPI_PM1A_EVT_BLK+2) && iolen >= 2) - return acpi_cb_port_evten_blk_w; - else if ((port & (~1u)) == ACPI_PM1A_CNT_BLK && iolen >= 2) - return acpi_cb_port_cnt_blk_w; - else if ((port & (~3u)) == ACPI_SMI_CMD) - return acpi_cb_port_smi_cmd_w; - else if (port == ACPI_DEBUG_IO && iolen >= 4) - return acpi_cb_port_debug_w; - else if ((port & (~3u)) == ACPI_PM_TMR_BLK) { - LOG(LOG_MISC,LOG_DEBUG)("write ACPI_PM_TMR_BLK port=0x%x iolen=%u",(unsigned int)port,(unsigned int)iolen); - } - - return NULL; -} - -bool MEM_map_ROM_physmem(Bitu start,Bitu end); -bool MEM_unmap_physmem(Bitu start,Bitu end); - -static std::string bochs_port_e9_line; - -static void bochs_port_e9_flush() { - if (!bochs_port_e9_line.empty()) { - LOG_MSG("Bochs port E9h: %s",bochs_port_e9_line.c_str()); - bochs_port_e9_line.clear(); - } -} - -void bochs_port_e9_write(Bitu port,Bitu val,Bitu /*iolen*/) { - (void)port;//UNUSED - if (val == '\n' || val == '\r') { - bochs_port_e9_flush(); - } - else { - bochs_port_e9_line += (char)val; - if (bochs_port_e9_line.length() >= 256) - bochs_port_e9_flush(); - } -} - -LoopHandler *DOSBOX_GetLoop(void); - -static Bitu APM_SuspendedLoopFunc(void); - -static RealPt APM_SuspendedLoopRptr=0; - -/* "wakeup" keys were pressed and released */ -void APM_Suspend_Wakeup_Key(void) { - APM_WakeupKeys++; -} - -void APM_SuspendedLoopLeaveState() { - APM_WakeupKeys = 0; - PowerButtonClicks = 0; - - /* Turn on the VGA display, assuming it was on when suspended */ - if (IS_VGA_ARCH) { - Bitu crtc; - Bitu tmp; - - IO_Write(0x3C4,0x01); // clocking mode - tmp = IO_Read(0x3C5); - IO_Write(0x3C5,tmp & (~0x20)); // turn on screen - - // NTS: vga_crtc.cpp/vga_draw.cpp does not emulate blanking the display upon disabling sync signals - crtc = (IO_Read(0x3CC) & 1) ? 0x3D4 : 0x3B4; - IO_Write(crtc,0x17); // mode control - tmp = IO_Read(crtc+1); - IO_Write(crtc+1,tmp | 0x80); // enable sync - } -} - -/* callback for APM suspended loop routine in BIOS */ -static Bitu APM_SuspendedLoopFunc(void) { - if (APM_WakeupKeys != 0 || PowerButtonClicks != 0) { - APM_SuspendedLoopLeaveState(); - LOG_MSG("APM: leaving suspended state"); - reg_eip += 3; /* skip over HLT+JMP to get to RET */ - return CBRET_NONE; - } - - return CBRET_NONE; -} - -bool PowerManagementEnabledButton() { - if (IS_PC98_ARCH) /* power management not yet known or implemented */ - return false; - - if (ACPI_GuestEnabled()) - ACPI_PowerButtonEvent(); - - if (apm_realmode_connected) /* guest has connected to the APM BIOS */ - return true; - - return false; -} - -void APM_BeginSuspendedMode(void) { - /* Enable interrupts, dumbass. We use HLT here. */ - CPU_STI(); - - /* WARNING: This assumes, like all callbacks, that they reside in the same segment. - * The APM BIOS entry point can be called from real mode, 16-bit or 32-bit protected mode, - * therefore this code cannot assume any particular segment value and can only safely - * change reg_(e)ip to direct CPU execution. The most likely scenario is that the - * return address pushed here will point at the IRET in the INT 15 handler. */ - if (cpu.stack.big) CPU_Push32(reg_eip); - else CPU_Push16(reg_ip); - - reg_ip = APM_SuspendedLoopRptr & 0xFFFF; /* offset only */ - - /* reset counters */ - PowerButtonClicks = 0; - APM_WakeupKeys = 0; - - /* Turn off the VGA display */ - if (IS_VGA_ARCH) { - Bitu crtc; - Bitu tmp; - - IO_Write(0x3C4,0x01); // clocking mode - tmp = IO_Read(0x3C5); - IO_Write(0x3C5,tmp | 0x20); // turn off screen - - // NTS: vga_crtc.cpp/vga_draw.cpp does not emulate blanking the display upon disabling sync signals - crtc = (IO_Read(0x3CC) & 1) ? 0x3D4 : 0x3B4; - IO_Write(crtc,0x17); // mode control - tmp = IO_Read(crtc+1); - IO_Write(crtc+1,tmp & (~0x80)); // disable sync - } - - LOG_MSG("System is now in APM suspend mode"); -} - - -void ROMBIOS_DumpMemory() { - rombios_alloc.logDump(); -} - -void ROMBIOS_SanityCheck() { - rombios_alloc.sanityCheck(); -} - -Bitu ROMBIOS_MinAllocatedLoc() { - Bitu r = rombios_alloc.getMinAddress(); - - if (r > (0x100000u - rombios_minimum_size)) - r = (0x100000u - rombios_minimum_size); - - return r & ~0xFFFu; -} - -void ROMBIOS_FreeUnusedMinToLoc(Bitu phys) { - Bitu new_phys; - - if (rombios_minimum_location & 0xFFF) E_Exit("ROMBIOS: FreeUnusedMinToLoc minimum location not page aligned"); - - phys &= ~0xFFFUL; - new_phys = rombios_alloc.freeUnusedMinToLoc(phys) & (~0xFFFUL); - assert(new_phys >= phys); - if (phys < new_phys) MEM_unmap_physmem(phys,new_phys-1); - rombios_minimum_location = new_phys; - ROMBIOS_SanityCheck(); - ROMBIOS_DumpMemory(); -} - -bool ROMBIOS_FreeMemory(Bitu phys) { - return rombios_alloc.freeMemory(phys); -} - -Bitu ROMBIOS_GetMemory(Bitu bytes,const char *who,Bitu alignment,Bitu must_be_at) { - return rombios_alloc.getMemory(bytes,who,alignment,must_be_at); -} - -void ROMBIOS_InitForCustomBIOS(void) { - rombios_alloc.initSetRange(0xD8000,0xE0000); -} - -static IO_Callout_t dosbox_int_iocallout = IO_Callout_t_none; - -static unsigned char dosbox_int_register_shf = 0; -static uint32_t dosbox_int_register = 0; -static unsigned char dosbox_int_regsel_shf = 0; -static uint32_t dosbox_int_regsel = 0; -static bool dosbox_int_error = false; -static bool dosbox_int_busy = false; - -#define STRINGIZE_HELPER(A) #A -#define STRINGIZE(A) STRINGIZE_HELPER(A) -#define PPCAT_HELPER(A, B, C) A ## . ## B ## . ## C -#define PPCAT(A, B, C) PPCAT_HELPER(A, B, C) - -#define INTDEV_VERSION_BUMP 2 -#define INTDEV_VERSION_MAJOR 1 -#define INTDEV_VERSION_MINOR 0 -#define INTDEV_VERSION_SUB 1 - -static const char *dosbox_int_version = "DOSBox-X integration device v" STRINGIZE(PPCAT(INTDEV_VERSION_MAJOR, INTDEV_VERSION_MINOR, INTDEV_VERSION_SUB)); -static const char *dosbox_int_ver_read = NULL; - -struct dosbox_int_saved_state { - unsigned char dosbox_int_register_shf; - uint32_t dosbox_int_register; - unsigned char dosbox_int_regsel_shf; - uint32_t dosbox_int_regsel; - bool dosbox_int_error; - bool dosbox_int_busy; -}; - -#define DOSBOX_INT_SAVED_STATE_MAX 4 - -struct dosbox_int_saved_state dosbox_int_saved[DOSBOX_INT_SAVED_STATE_MAX]; -int dosbox_int_saved_sp = -1; - -/* for use with interrupt handlers in DOS/Windows that need to save IG state - * to ensure that IG state is restored on return in order to not interfere - * with anything userspace is doing (as an alternative to wrapping all access - * in CLI/STI or PUSHF/CLI/POPF) */ -bool dosbox_int_push_save_state(void) { - - if (dosbox_int_saved_sp >= (DOSBOX_INT_SAVED_STATE_MAX-1)) - return false; - - struct dosbox_int_saved_state *ss = &dosbox_int_saved[++dosbox_int_saved_sp]; - - ss->dosbox_int_register_shf = dosbox_int_register_shf; - ss->dosbox_int_register = dosbox_int_register; - ss->dosbox_int_regsel_shf = dosbox_int_regsel_shf; - ss->dosbox_int_regsel = dosbox_int_regsel; - ss->dosbox_int_error = dosbox_int_error; - ss->dosbox_int_busy = dosbox_int_busy; - return true; -} - -bool dosbox_int_pop_save_state(void) { - if (dosbox_int_saved_sp < 0) - return false; - - struct dosbox_int_saved_state *ss = &dosbox_int_saved[dosbox_int_saved_sp--]; - - dosbox_int_register_shf = ss->dosbox_int_register_shf; - dosbox_int_register = ss->dosbox_int_register; - dosbox_int_regsel_shf = ss->dosbox_int_regsel_shf; - dosbox_int_regsel = ss->dosbox_int_regsel; - dosbox_int_error = ss->dosbox_int_error; - dosbox_int_busy = ss->dosbox_int_busy; - return true; -} - -bool dosbox_int_discard_save_state(void) { - if (dosbox_int_saved_sp < 0) - return false; - - dosbox_int_saved_sp--; - return true; -} - -extern bool user_cursor_locked; -extern int user_cursor_x,user_cursor_y; -extern int user_cursor_sw,user_cursor_sh; -extern int master_cascade_irq,bootdrive; -extern bool enable_slave_pic; -extern bool bootguest, use_quick_reboot; -extern uint16_t countryNo; -bool bootvm = false, bootfast = false; -static std::string dosbox_int_debug_out; - -uint32_t VGA_QuerySizeIG(void); - -uint32_t Mixer_MIXQ(void); -uint32_t Mixer_MIXC(void); -void Mixer_MIXC_Write(uint32_t v); -PhysPt Mixer_MIXWritePos(void); -void Mixer_MIXWritePos_Write(PhysPt np); -void Mixer_MIXWriteBegin_Write(PhysPt np); -void Mixer_MIXWriteEnd_Write(PhysPt np); - -/* read triggered, update the regsel */ -void dosbox_integration_trigger_read() { - dosbox_int_error = false; - - switch (dosbox_int_regsel) { - case 0: /* Identification */ - dosbox_int_register = 0xD05B0740; - break; - case 1: /* test */ - break; - case 2: /* version string */ - if (dosbox_int_ver_read == NULL) - dosbox_int_ver_read = dosbox_int_version; - - dosbox_int_register = 0; - for (Bitu i=0;i < 4;i++) { - if (*dosbox_int_ver_read == 0) { - dosbox_int_ver_read = dosbox_int_version; - break; - } - - dosbox_int_register += ((uint32_t)((unsigned char)(*dosbox_int_ver_read++))) << (uint32_t)(i * 8); - } - break; - case 3: /* version number */ - dosbox_int_register = INTDEV_VERSION_MAJOR + (INTDEV_VERSION_MINOR << 8U) + (INTDEV_VERSION_SUB << 16U) + (INTDEV_VERSION_BUMP << 24U); - break; - case 4: /* current emulator time as 16.16 fixed point */ - dosbox_int_register = (uint32_t)(PIC_FullIndex() * 0x10000); - break; - case 5: // DOSBox-X version number major (e.g. 2022) - { - const char * ver = strchr(VERSION, '.'); - dosbox_int_register = ver == NULL ? 0 : atoi(std::string(VERSION).substr(0, strlen(ver) - strlen(VERSION)).c_str()); - break; - } - case 6: // DOSBox-X version number minor (e.g. 8) - { - const char * ver = strchr(VERSION, '.'); - dosbox_int_register = ver == NULL ? 0 : atoi(ver + 1); - break; - } - case 7: // DOSBox-X version number sub (e.g. 0) - { - const char * ver = strchr(VERSION, '.'); - ver = strchr(ver + 1, '.'); - dosbox_int_register = ver == NULL ? 0 : atoi(ver + 1); - break; - } - case 8: // DOSBox-X platform type - dosbox_int_register = 0; -#if defined(HX_DOS) - dosbox_int_register = 4; -#elif defined(WIN32) - dosbox_int_register = 1; -#elif defined(LINUX) - dosbox_int_register = 2; -#elif defined(MACOSX) - dosbox_int_register = 3; -#elif defined(OS2) - dosbox_int_register = 5; -#else - dosbox_int_register = 0; -#endif - if (control->opt_securemode || control->SecureMode()) dosbox_int_register = 0; -#if OS_BIT_INT == 64 - dosbox_int_register += 0x20; // 64-bit -#else - dosbox_int_register += 0x10; // 32-bit -#endif -#if defined(C_SDL2) - dosbox_int_register += 0x200; // SDL2 -#elif defined(SDL_DOSBOX_X_SPECIAL) - dosbox_int_register += 0x100; // SDL1 (modified) -#endif - break; - case 9: // DOSBox-X machine type - dosbox_int_register = machine; - break; - - case 0x4B6F4400: // DOS kernel status - dosbox_int_register = dos_kernel_disabled ? 0: 1; - break; - case 0x4B6F4401: // DOS codepage number - dosbox_int_register = dos_kernel_disabled ? 0: dos.loaded_codepage; - break; - case 0x4B6F4402: // DOS country number - dosbox_int_register = dos_kernel_disabled ? 0: countryNo; - break; - case 0x4B6F4403: // DOS version major - dosbox_int_register = dos_kernel_disabled ? 0: dos.version.major; - break; - case 0x4B6F4404: // DOS version minor - dosbox_int_register = dos_kernel_disabled ? 0: dos.version.minor; - break; - case 0x4B6F4405: // DOS error code - dosbox_int_register = dos_kernel_disabled ? 0 : dos.errorcode; - break; - case 0x4B6F4406: // DOS boot drive - dosbox_int_register = bootdrive; - break; - case 0x4B6F4407: // DOS current drive - dosbox_int_register = dos_kernel_disabled ? 0 : DOS_GetDefaultDrive(); - break; - case 0x4B6F4408: // DOS LFN status - dosbox_int_register = dos_kernel_disabled || !uselfn ? 0: 1; - break; - - case 0x5158494D: /* query mixer output 'MIXQ' */ - /* bits [19:0] = sample rate in Hz or 0 if mixer is not mixing AT ALL - * bits [23:20] = number of channels (at this time, always 2 aka stereo) - * bits [29:29] = 1=swap stereo 0=normal - * bits [30:30] = 1=muted 0=not muted - * bits [31:31] = 1=sound 0=nosound */ - dosbox_int_register = Mixer_MIXQ(); - break; - - case 0x4358494D: /* query mixer output 'MIXC' */ - dosbox_int_register = Mixer_MIXC(); - break; - - case 0x5058494D: /* query mixer output 'MIXP' */ - dosbox_int_register = Mixer_MIXWritePos(); - break; - - case 0x4258494D: /* query mixer output 'MIXB' */ - break; - - case 0x4558494D: /* query mixer output 'MIXE' */ - break; - - case 0x6845C0: /* query VGA display size */ - dosbox_int_register = VGA_QuerySizeIG(); - break; - - case 0x825901: /* PIC configuration */ - /* bits [7:0] = cascade interrupt or 0xFF if none - * bit [8:8] = primary PIC present - * bit [9:9] = secondary PIC present */ - if (master_cascade_irq >= 0) - dosbox_int_register = ((unsigned int)master_cascade_irq & 0xFFu); - else - dosbox_int_register = 0xFFu; - - dosbox_int_register |= 0x100; // primary always present - if (enable_slave_pic) dosbox_int_register |= 0x200; - break; - - case 0x823780: /* ISA DMA injection, single byte/word (read from memory) */ - break; - -// case 0x804200: /* keyboard input injection -- not supposed to read */ -// break; - - case 0x804201: /* keyboard status */ - dosbox_int_register = Keyb_ig_status(); - break; - - case 0x434D54: /* read user mouse status */ - dosbox_int_register = - (user_cursor_locked ? (1UL << 0UL) : 0UL); /* bit 0 = mouse capture lock */ - break; - - case 0x434D55: /* read user mouse cursor position */ - dosbox_int_register = (uint32_t((uint16_t)user_cursor_y & 0xFFFFUL) << 16UL) | uint32_t((uint16_t)user_cursor_x & 0xFFFFUL); - break; - - case 0x434D56: { /* read user mouse cursor position (normalized for Windows 3.x) */ - signed long long x = ((signed long long)user_cursor_x << 16LL) / (signed long long)(user_cursor_sw-1); - signed long long y = ((signed long long)user_cursor_y << 16LL) / (signed long long)(user_cursor_sh-1); - if (x < 0x0000LL) x = 0x0000LL; - if (x > 0xFFFFLL) x = 0xFFFFLL; - if (y < 0x0000LL) y = 0x0000LL; - if (y > 0xFFFFLL) y = 0xFFFFLL; - dosbox_int_register = ((unsigned int)y << 16UL) | (unsigned int)x; - } break; - - case 0xC54010: /* Screenshot/capture trigger */ - /* TODO: This should also be hidden behind an enable switch, so that rogue DOS development - * can't retaliate if the user wants to capture video or screenshots. */ -#if (C_SSHOT) - dosbox_int_register = 0x00000000; // available - if (CaptureState & CAPTURE_IMAGE) - dosbox_int_register |= 1 << 0; // Image capture is in progress - if (CaptureState & CAPTURE_VIDEO) - dosbox_int_register |= 1 << 1; // Video capture is in progress - if (CaptureState & CAPTURE_WAVE) - dosbox_int_register |= 1 << 2; // WAVE capture is in progress -#else - dosbox_int_register = 0xC0000000; // not available (bit 31 set), not enabled (bit 30 set) -#endif - break; - - case 0xAA55BB66UL: /* interface reset result */ - break; - - default: - dosbox_int_register = 0xAA55AA55; - dosbox_int_error = true; - break; - } - - LOG(LOG_MISC,LOG_DEBUG)("DOSBox-X integration read 0x%08lx got 0x%08lx (err=%u)\n", - (unsigned long)dosbox_int_regsel, - (unsigned long)dosbox_int_register, - dosbox_int_error?1:0); -} - -bool watchdog_set = false; - -void Watchdog_Timeout_Event(Bitu /*val*/) { - LOG_MSG("Watchdog timeout occurred"); - CPU_Raise_NMI(); -} - -void Watchdog_Timer_Clear(void) { - if (watchdog_set) { - PIC_RemoveEvents(Watchdog_Timeout_Event); - watchdog_set = false; - } -} - -void Watchdog_Timer_Set(uint32_t timeout_ms) { - Watchdog_Timer_Clear(); - - if (timeout_ms != 0) { - watchdog_set = true; - PIC_AddEvent(Watchdog_Timeout_Event,(double)timeout_ms); - } -} - -unsigned int mouse_notify_mode = 0; -// 0 = off -// 1 = trigger as PS/2 mouse interrupt - -/* write triggered */ -void dosbox_integration_trigger_write() { - dosbox_int_error = false; - - LOG(LOG_MISC,LOG_DEBUG)("DOSBox-X integration write 0x%08lx val 0x%08lx\n", - (unsigned long)dosbox_int_regsel, - (unsigned long)dosbox_int_register); - - switch (dosbox_int_regsel) { - case 1: /* test */ - break; - - case 2: /* version string */ - dosbox_int_ver_read = NULL; - break; - - case 0xDEB0: /* debug output (to log) */ - for (unsigned int b=0;b < 4;b++) { - unsigned char c = (unsigned char)(dosbox_int_register >> (b * 8U)); - if (c == '\n' || dosbox_int_debug_out.length() >= 200) { - LOG_MSG("Client debug message: %s\n",dosbox_int_debug_out.c_str()); - dosbox_int_debug_out.clear(); - } - else if (c != 0) { - dosbox_int_debug_out += ((char)c); - } - else { - break; - } - } - dosbox_int_register = 0; - break; - - case 0xDEB1: /* debug output clear */ - dosbox_int_debug_out.clear(); - break; - - case 0x52434D: /* release mouse capture 'MCR' */ - void GFX_ReleaseMouse(void); - GFX_ReleaseMouse(); - break; - - case 0x5158494D: /* query mixer output 'MIXQ' */ - break; - - case 0x4358494D: /* query mixer output 'MIXC' */ - Mixer_MIXC_Write(dosbox_int_register); - break; - - case 0x5058494D: /* query mixer output 'MIXP' */ - Mixer_MIXWritePos_Write(dosbox_int_register); - break; - - case 0x4258494D: /* query mixer output 'MIXB' */ - Mixer_MIXWriteBegin_Write(dosbox_int_register); - break; - - case 0x4558494D: /* query mixer output 'MIXE' */ - Mixer_MIXWriteEnd_Write(dosbox_int_register); - break; - - case 0x57415444: /* Set/clear watchdog timer 'WATD' */ - Watchdog_Timer_Set(dosbox_int_register); - break; - - case 0x808602: /* NMI (INT 02h) interrupt injection */ - { - dosbox_int_register_shf = 0; - dosbox_int_regsel_shf = 0; - CPU_Raise_NMI(); - } - break; - - case 0x825900: /* PIC interrupt injection */ - { - dosbox_int_register_shf = 0; - dosbox_int_regsel_shf = 0; - /* bits [7:0] = IRQ to signal (must be 0-15) - * bit [8:8] = 1=raise 0=lower IRQ */ - uint8_t IRQ = dosbox_int_register&0xFFu; - bool raise = (dosbox_int_register>>8u)&1u; - - if (IRQ < 16) { - if (raise) - PIC_ActivateIRQ(IRQ); - else - PIC_DeActivateIRQ(IRQ); - } - } - break; - - case 0x823700: /* ISA DMA injection, single byte/word (write to memory) */ - { - dosbox_int_register_shf = 0; - dosbox_int_regsel_shf = 0; - /* bits [7:0] = data byte if 8-bit DNA - * bits [15:0] = data word if 16-bit DMA - * bits [18:16] = DMA channel to send to */ - DmaChannel *ch = GetDMAChannel((dosbox_int_register>>16u)&7u); - if (ch != NULL) { - unsigned char tmp[2]; - - tmp[0] = (unsigned char)( dosbox_int_register & 0xFFu); - tmp[1] = (unsigned char)((dosbox_int_register >> 8u) & 0xFFu); - - /* NTS: DMA channel write will write tmp[0] if 8-bit, tmp[0]/tmp[1] if 16-bit */ - if (ch->Write(1/*one unit of transfer*/,tmp) == 1) { - dosbox_int_register = 0; - dosbox_int_error = false; - } - else { - dosbox_int_register = 0x823700; - dosbox_int_error = true; - } - } - else { - dosbox_int_register = 0x8237FF; - dosbox_int_error = true; - } - } - break; - - case 0x823780: /* ISA DMA injection, single byte/word (read from memory) */ - { - dosbox_int_register_shf = 0; - dosbox_int_regsel_shf = 0; - /* bits [18:16] = DMA channel to send to */ - DmaChannel *ch = GetDMAChannel((dosbox_int_register>>16u)&7u); - if (ch != NULL) { - unsigned char tmp[2]; - - /* NTS: DMA channel write will write tmp[0] if 8-bit, tmp[0]/tmp[1] if 16-bit */ - tmp[0] = tmp[1] = 0; - if (ch->Read(1/*one unit of transfer*/,tmp) == 1) { - dosbox_int_register = ((unsigned int)tmp[1] << 8u) + (unsigned int)tmp[0]; - dosbox_int_error = false; - } - else { - dosbox_int_register = 0x823700; - dosbox_int_error = true; - } - } - else { - dosbox_int_register = 0x8237FF; - dosbox_int_error = true; - } - } - break; - - case 0x804200: /* keyboard input injection */ - void Mouse_ButtonPressed(uint8_t button); - void Mouse_ButtonReleased(uint8_t button); - void pc98_keyboard_send(const unsigned char b); - void Mouse_CursorMoved(float xrel,float yrel,float x,float y,bool emulate); - void KEYBOARD_AUX_Event(float x,float y,Bitu buttons,int scrollwheel); - void KEYBOARD_AddBuffer(uint16_t data); - - switch ((dosbox_int_register>>8)&0xFF) { - case 0x00: // keyboard - if (IS_PC98_ARCH) - pc98_keyboard_send(dosbox_int_register&0xFF); - else - KEYBOARD_AddBuffer(dosbox_int_register&0xFF); - break; - case 0x01: // AUX - if (!IS_PC98_ARCH) - KEYBOARD_AddBuffer((dosbox_int_register&0xFF)|0x100/*AUX*/); - else // no such interface in PC-98 mode - dosbox_int_error = true; - break; - case 0x08: // mouse button injection - if (dosbox_int_register&0x80) Mouse_ButtonPressed(dosbox_int_register&0x7F); - else Mouse_ButtonReleased(dosbox_int_register&0x7F); - break; - case 0x09: // mouse movement injection (X) - Mouse_CursorMoved(((dosbox_int_register>>16UL) / 256.0f) - 1.0f,0,0,0,true); - break; - case 0x0A: // mouse movement injection (Y) - Mouse_CursorMoved(0,((dosbox_int_register>>16UL) / 256.0f) - 1.0f,0,0,true); - break; - case 0x0B: // mouse scrollwheel injection - // TODO - break; - default: - dosbox_int_error = true; - break; - } - break; - -// case 0x804201: /* keyboard status do not write */ -// break; - - /* this command is used to enable notification of mouse movement over the windows even if the mouse isn't captured */ - case 0x434D55: /* read user mouse cursor position */ - case 0x434D56: /* read user mouse cursor position (normalized for Windows 3.x) */ - mouse_notify_mode = dosbox_int_register & 0xFF; - LOG(LOG_MISC,LOG_DEBUG)("Mouse notify mode=%u",mouse_notify_mode); - break; - - case 0xC54010: /* Screenshot/capture trigger */ -#if (C_SSHOT) - void CAPTURE_ScreenShotEvent(bool pressed); - void CAPTURE_VideoEvent(bool pressed); -#endif - void CAPTURE_WaveEvent(bool pressed); - - /* TODO: It would be wise to grant/deny access to this register through another dosbox-x.conf option - * so that rogue DOS development cannot shit-spam the capture folder */ -#if (C_SSHOT) - if (dosbox_int_register & 1) - CAPTURE_ScreenShotEvent(true); - if (dosbox_int_register & 2) - CAPTURE_VideoEvent(true); -#endif - if (dosbox_int_register & 4) - CAPTURE_WaveEvent(true); - break; - - default: - dosbox_int_register = 0x55AA55AA; - dosbox_int_error = true; - break; - } -} - -/* PORT 0x28: Index - * 0x29: Data - * 0x2A: Status(R) or Command(W) - * 0x2B: Not yet assigned - * - * Registers are 32-bit wide. I/O to index and data rotate through the - * bytes of the register depending on I/O length, meaning that one 32-bit - * I/O read will read the entire register, while four 8-bit reads will - * read one byte out of 4. */ - -static Bitu dosbox_integration_port00_index_r(Bitu port,Bitu iolen) { - (void)port;//UNUSED - Bitu retb = 0; - Bitu ret = 0; - - while (iolen > 0) { - ret += ((dosbox_int_regsel >> (dosbox_int_regsel_shf * 8)) & 0xFFU) << (retb * 8); - if ((++dosbox_int_regsel_shf) >= 4) dosbox_int_regsel_shf = 0; - iolen--; - retb++; - } - - return ret; -} - -static void dosbox_integration_port00_index_w(Bitu port,Bitu val,Bitu iolen) { - (void)port;//UNUSED - - while (iolen > 0) { - uint32_t msk = 0xFFU << (dosbox_int_regsel_shf * 8); - dosbox_int_regsel = (dosbox_int_regsel & ~msk) + ((val & 0xFF) << (dosbox_int_regsel_shf * 8)); - if ((++dosbox_int_regsel_shf) >= 4) dosbox_int_regsel_shf = 0; - val >>= 8U; - iolen--; - } -} - -static Bitu dosbox_integration_port01_data_r(Bitu port,Bitu iolen) { - (void)port;//UNUSED - Bitu retb = 0; - Bitu ret = 0; - - while (iolen > 0) { - if (dosbox_int_register_shf == 0) dosbox_integration_trigger_read(); - ret += ((dosbox_int_register >> (dosbox_int_register_shf * 8)) & 0xFFU) << (retb * 8); - if ((++dosbox_int_register_shf) >= 4) dosbox_int_register_shf = 0; - iolen--; - retb++; - } - - return ret; -} - -static void dosbox_integration_port01_data_w(Bitu port,Bitu val,Bitu iolen) { - (void)port;//UNUSED - - while (iolen > 0) { - uint32_t msk = 0xFFU << (dosbox_int_register_shf * 8); - dosbox_int_register = (dosbox_int_register & ~msk) + ((val & 0xFF) << (dosbox_int_register_shf * 8)); - if ((++dosbox_int_register_shf) >= 4) dosbox_int_register_shf = 0; - if (dosbox_int_register_shf == 0) dosbox_integration_trigger_write(); - val >>= 8U; - iolen--; - } -} - -static Bitu dosbox_integration_port02_status_r(Bitu port,Bitu iolen) { - (void)iolen;//UNUSED - (void)port;//UNUSED - /* status */ - /* 7:6 = regsel byte index - * 5:4 = register byte index - * 3:2 = reserved - * 1 = error - * 0 = busy */ - return - ((unsigned int)dosbox_int_regsel_shf << 6u) + ((unsigned int)dosbox_int_register_shf << 4u) + - (dosbox_int_error ? 2u : 0u) + (dosbox_int_busy ? 1u : 0u); -} - -static void dosbox_integration_port02_command_w(Bitu port,Bitu val,Bitu iolen) { - (void)port; - (void)iolen; - switch (val) { - case 0x00: /* reset latch */ - dosbox_int_register_shf = 0; - dosbox_int_regsel_shf = 0; - break; - case 0x01: /* flush write */ - if (dosbox_int_register_shf != 0) { - dosbox_integration_trigger_write(); - dosbox_int_register_shf = 0; - } - break; - case 0x20: /* push state */ - if (dosbox_int_push_save_state()) { - dosbox_int_register_shf = 0; - dosbox_int_regsel_shf = 0; - dosbox_int_error = false; - dosbox_int_busy = false; - dosbox_int_regsel = 0xAA55BB66; - dosbox_int_register = 0xD05B0C5; - LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X IG state saved"); - } - else { - LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X IG unable to push state, stack overflow"); - dosbox_int_error = true; - } - break; - case 0x21: /* pop state */ - if (dosbox_int_pop_save_state()) { - LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X IG state restored"); - } - else { - LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X IG unable to pop state, stack underflow"); - dosbox_int_error = true; - } - break; - case 0x22: /* discard state */ - if (dosbox_int_discard_save_state()) { - LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X IG state discarded"); - } - else { - LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X IG unable to discard state, stack underflow"); - dosbox_int_error = true; - } - break; - case 0x23: /* discard all state */ - while (dosbox_int_discard_save_state()); - break; - case 0xFE: /* clear error */ - dosbox_int_error = false; - break; - case 0xFF: /* reset interface */ - dosbox_int_busy = false; - dosbox_int_error = false; - dosbox_int_regsel = 0xAA55BB66; - dosbox_int_register = 0xD05B0C5; - break; - default: - dosbox_int_error = true; - break; - } -} - -static IO_ReadHandler* const dosbox_integration_cb_ports_r[4] = { - dosbox_integration_port00_index_r, - dosbox_integration_port01_data_r, - dosbox_integration_port02_status_r, - NULL -}; - -static IO_ReadHandler* dosbox_integration_cb_port_r(IO_CalloutObject &co,Bitu port,Bitu iolen) { - (void)co; - (void)iolen; - return dosbox_integration_cb_ports_r[port&3]; -} - -static IO_WriteHandler* const dosbox_integration_cb_ports_w[4] = { - dosbox_integration_port00_index_w, - dosbox_integration_port01_data_w, - dosbox_integration_port02_command_w, - NULL -}; - -static IO_WriteHandler* dosbox_integration_cb_port_w(IO_CalloutObject &co,Bitu port,Bitu iolen) { - (void)co; - (void)iolen; - return dosbox_integration_cb_ports_w[port&3]; -} - -/* if mem_systems 0 then size_extended is reported as the real size else - * zero is reported. ems and xms can increase or decrease the other_memsystems - * counter using the BIOS_ZeroExtendedSize call */ -static uint16_t size_extended; -static unsigned int ISA_PNP_WPORT = 0x20B; -static unsigned int ISA_PNP_WPORT_BIOS = 0; -static IO_ReadHandleObject *ISAPNP_PNP_READ_PORT = NULL; /* 0x200-0x3FF range */ -static IO_WriteHandleObject *ISAPNP_PNP_ADDRESS_PORT = NULL; /* 0x279 */ -static IO_WriteHandleObject *ISAPNP_PNP_DATA_PORT = NULL; /* 0xA79 */ -static IO_WriteHandleObject *BOCHS_PORT_E9 = NULL; -//static unsigned char ISA_PNP_CUR_CSN = 0; -static unsigned char ISA_PNP_CUR_ADDR = 0; -static unsigned char ISA_PNP_CUR_STATE = 0; -enum { - ISA_PNP_WAIT_FOR_KEY=0, - ISA_PNP_SLEEP, - ISA_PNP_ISOLATE, - ISA_PNP_CONFIG -}; - -const unsigned char isa_pnp_init_keystring[32] = { - 0x6A,0xB5,0xDA,0xED,0xF6,0xFB,0x7D,0xBE, - 0xDF,0x6F,0x37,0x1B,0x0D,0x86,0xC3,0x61, - 0xB0,0x58,0x2C,0x16,0x8B,0x45,0xA2,0xD1, - 0xE8,0x74,0x3A,0x9D,0xCE,0xE7,0x73,0x39 -}; - -static RealPt INT15_apm_pmentry=0; -static unsigned char ISA_PNP_KEYMATCH=0; -static Bits other_memsystems=0; -void CMOS_SetRegister(Bitu regNr, uint8_t val); //For setting equipment word -bool enable_integration_device_pnp=false; -bool enable_integration_device=false; -bool ISAPNPBIOS=false; -bool ISAPNPPORT=false; -bool APMBIOS=false; -bool APMBIOS_pnp=false; -bool APMBIOS_allow_realmode=false; -bool APMBIOS_allow_prot16=false; -bool APMBIOS_allow_prot32=false; -int APMBIOS_connect_mode=0; - -enum { - APMBIOS_CONNECT_REAL=0, - APMBIOS_CONNECT_PROT16, - APMBIOS_CONNECT_PROT32 -}; - -unsigned int APMBIOS_connected_already_err() { - switch (APMBIOS_connect_mode) { - case APMBIOS_CONNECT_REAL: return 0x02; - case APMBIOS_CONNECT_PROT16: return 0x05; - case APMBIOS_CONNECT_PROT32: return 0x07; - } - - return 0x00; -} - -ISAPnPDevice::ISAPnPDevice() { - memset(ident,0,sizeof(ident)); -} - -bool ISAPnPDevice::alloc(size_t sz) { - if (sz == alloc_sz) - return true; - - if (alloc_res == resource_data) { - resource_data_len = 0; - resource_data_pos = 0; - resource_data = NULL; - } - if (alloc_res != NULL) - delete[] alloc_res; - - alloc_res = NULL; - alloc_write = 0; - alloc_sz = 0; - - if (sz == 0) - return true; - if (sz > 65536) - return false; - - alloc_res = new unsigned char[sz]; - if (alloc_res == NULL) return false; - memset(alloc_res,0xFF,sz); - alloc_sz = sz; - return true; -} - -ISAPnPDevice::~ISAPnPDevice() { - ISAPnPDevice::alloc(0); -} - -void ISAPnPDevice::begin_write_res() { - if (alloc_res == NULL) return; - - resource_data_pos = 0; - resource_data_len = 0; - resource_data = NULL; - alloc_write = 0; -} - -void ISAPnPDevice::write_byte(const unsigned char c) { - if (alloc_res == NULL || alloc_write >= alloc_sz) return; - alloc_res[alloc_write++] = c; -} - -void ISAPnPDevice::write_begin_SMALLTAG(const ISAPnPDevice::SmallTags stag,unsigned char len) { - if (len >= 8 || (unsigned int)stag >= 0x10) return; - write_byte(((unsigned char)stag << 3) + len); -} - -void ISAPnPDevice::write_begin_LARGETAG(const ISAPnPDevice::LargeTags stag,unsigned int len) { - if (len >= 4096) return; - write_byte(0x80 + ((unsigned char)stag)); - write_byte(len & 0xFF); - write_byte(len >> 8); -} - -void ISAPnPDevice::write_Device_ID(const char c1,const char c2,const char c3,const char c4,const char c5,const char c6,const char c7) { - write_byte((((unsigned char)c1 & 0x1FU) << 2) + (((unsigned char)c2 & 0x18U) >> 3)); - write_byte((((unsigned char)c2 & 0x07U) << 5) + ((unsigned char)c3 & 0x1FU)); - write_byte((((unsigned char)c4 & 0x0FU) << 4) + ((unsigned char)c5 & 0x0FU)); - write_byte((((unsigned char)c6 & 0x0FU) << 4) + ((unsigned char)c7 & 0x0FU)); -} - -void ISAPnPDevice::write_Logical_Device_ID(const char c1,const char c2,const char c3,const char c4,const char c5,const char c6,const char c7) { - write_begin_SMALLTAG(SmallTags::LogicalDeviceID,5); - write_Device_ID(c1,c2,c3,c4,c5,c6,c7); - write_byte(0x00); -} - -void ISAPnPDevice::write_Compatible_Device_ID(const char c1,const char c2,const char c3,const char c4,const char c5,const char c6,const char c7) { - write_begin_SMALLTAG(SmallTags::CompatibleDeviceID,4); - write_Device_ID(c1,c2,c3,c4,c5,c6,c7); -} - -void ISAPnPDevice::write_IRQ_Format(const uint16_t IRQ_mask,const unsigned char IRQ_signal_type) { - bool write_irq_info = (IRQ_signal_type != 0); - - write_begin_SMALLTAG(SmallTags::IRQFormat,write_irq_info?3:2); - write_byte(IRQ_mask & 0xFF); - write_byte(IRQ_mask >> 8); - if (write_irq_info) write_byte(IRQ_signal_type & 0x0F); -} - -void ISAPnPDevice::write_DMA_Format(const uint8_t DMA_mask,const unsigned char transfer_type_preference,const bool is_bus_master,const bool byte_mode,const bool word_mode,const unsigned char speed_supported) { - write_begin_SMALLTAG(SmallTags::DMAFormat,2); - write_byte(DMA_mask); - write_byte( - (transfer_type_preference & 0x03) | - (is_bus_master ? 0x04 : 0x00) | - (byte_mode ? 0x08 : 0x00) | - (word_mode ? 0x10 : 0x00) | - ((speed_supported & 3) << 5)); -} - -void ISAPnPDevice::write_IO_Port(const uint16_t min_port,const uint16_t max_port,const uint8_t count,const uint8_t alignment,const bool full16bitdecode) { - write_begin_SMALLTAG(SmallTags::IOPortDescriptor,7); - write_byte((full16bitdecode ? 0x01 : 0x00)); - write_byte(min_port & 0xFF); - write_byte(min_port >> 8); - write_byte(max_port & 0xFF); - write_byte(max_port >> 8); - write_byte(alignment); - write_byte(count); -} - -void ISAPnPDevice::write_Dependent_Function_Start(const ISAPnPDevice::DependentFunctionConfig cfg,const bool force) { - bool write_cfg_byte = force || (cfg != ISAPnPDevice::DependentFunctionConfig::AcceptableDependentConfiguration); - - write_begin_SMALLTAG(SmallTags::StartDependentFunctions,write_cfg_byte ? 1 : 0); - if (write_cfg_byte) write_byte((unsigned char)cfg); -} - -void ISAPnPDevice::write_End_Dependent_Functions() { - write_begin_SMALLTAG(SmallTags::EndDependentFunctions,0); -} - -void ISAPnPDevice::write_nstring(const char *str,const size_t l) { - (void)l; - - if (alloc_res == NULL || alloc_write >= alloc_sz) return; - - while (*str != 0 && alloc_write < alloc_sz) - alloc_res[alloc_write++] = (unsigned char)(*str++); -} - -void ISAPnPDevice::write_Identifier_String(const char *str) { - const size_t l = strlen(str); - if (l > 4096) return; - - write_begin_LARGETAG(LargeTags::IdentifierStringANSI,(unsigned int)l); - if (l != 0) write_nstring(str,l); -} - -void ISAPnPDevice::write_ISAPnP_version(unsigned char major,unsigned char minor,unsigned char vendor) { - write_begin_SMALLTAG(SmallTags::PlugAndPlayVersionNumber,2); - write_byte((major << 4) + minor); - write_byte(vendor); -} - -void ISAPnPDevice::write_END() { - unsigned char sum = 0; - size_t i; - - write_begin_SMALLTAG(SmallTags::EndTag,/*length*/1); - - for (i=0;i < alloc_write;i++) sum += alloc_res[i]; - write_byte((0x100 - sum) & 0xFF); -} - -void ISAPnPDevice::end_write_res() { - if (alloc_res == NULL) return; - - write_END(); - - if (alloc_write >= alloc_sz) LOG(LOG_MISC,LOG_WARN)("ISA PNP generation overflow"); - - resource_data_pos = 0; - resource_data_len = alloc_sz; // the device usually has a reason for allocating the fixed size it does - resource_data = alloc_res; - alloc_write = 0; -} - -void ISAPnPDevice::config(Bitu val) { - (void)val; -} - -void ISAPnPDevice::wakecsn(Bitu val) { - (void)val; - ident_bp = 0; - ident_2nd = 0; - resource_data_pos = 0; - resource_ident = 0; -} - -void ISAPnPDevice::select_logical_device(Bitu val) { - (void)val; -} - -void ISAPnPDevice::checksum_ident() { - unsigned char checksum = 0x6a,bit; - - for (int i=0;i < 8;i++) { - for (int j=0;j < 8;j++) { - bit = (ident[i] >> j) & 1; - checksum = ((((checksum ^ (checksum >> 1)) & 1) ^ bit) << 7) | (checksum >> 1); - } - } - - ident[8] = checksum; -} - -void ISAPnPDevice::on_pnp_key() { - resource_ident = 0; -} - -uint8_t ISAPnPDevice::read(Bitu addr) { - (void)addr; - return 0x00; -} - -void ISAPnPDevice::write(Bitu addr,Bitu val) { - (void)addr; - (void)val; -} - -#define MAX_ISA_PNP_DEVICES 64 -#define MAX_ISA_PNP_SYSDEVNODES 256 - -static ISAPnPDevice *ISA_PNP_selected = NULL; -static ISAPnPDevice *ISA_PNP_devs[MAX_ISA_PNP_DEVICES] = {NULL}; /* FIXME: free objects on shutdown */ -static Bitu ISA_PNP_devnext = 0; - -static const unsigned char ISAPnPIntegrationDevice_sysdev[] = { - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0x28,0x28, /* min-max range I/O port */ - 0x04,0x04), /* align=4 length=4 */ - ISAPNP_END -}; - -class ISAPnPIntegrationDevice : public ISAPnPDevice { - public: - ISAPnPIntegrationDevice() : ISAPnPDevice() { - resource_ident = 0; - resource_data = (unsigned char*)ISAPnPIntegrationDevice_sysdev; - resource_data_len = sizeof(ISAPnPIntegrationDevice_sysdev); - host_writed(ident+0,ISAPNP_ID('D','O','S',0x1,0x2,0x3,0x4)); /* DOS1234 test device */ - host_writed(ident+4,0xFFFFFFFFUL); - checksum_ident(); - } -}; - -ISAPnPIntegrationDevice *isapnpigdevice = NULL; - -class ISAPNP_SysDevNode { -public: - ISAPNP_SysDevNode(const unsigned char *ir,size_t len,bool already_alloc=false) { - if (already_alloc) { - raw = (unsigned char*)ir; - raw_len = len; - own = false; - } - else { - if (len > 65535) E_Exit("ISAPNP_SysDevNode data too long"); - raw = new unsigned char[len+1u]; - if (ir == NULL) - E_Exit("ISAPNP_SysDevNode cannot allocate buffer"); - else - memcpy(raw, ir, len); - raw_len = len; - raw[len] = 0; - own = true; - } - } - virtual ~ISAPNP_SysDevNode() { - if (own) delete[] raw; - } - - unsigned char* raw; - size_t raw_len; - bool own; -}; - -static ISAPNP_SysDevNode* ISAPNP_SysDevNodes[MAX_ISA_PNP_SYSDEVNODES] = {NULL}; -static Bitu ISAPNP_SysDevNodeLargest=0; -static Bitu ISAPNP_SysDevNodeCount=0; - -void ISA_PNP_FreeAllSysNodeDevs() { - for (Bitu i=0;i < MAX_ISA_PNP_SYSDEVNODES;i++) { - if (ISAPNP_SysDevNodes[i] != NULL) delete ISAPNP_SysDevNodes[i]; - ISAPNP_SysDevNodes[i] = NULL; - } - - ISAPNP_SysDevNodeLargest=0; - ISAPNP_SysDevNodeCount=0; -} - -void ISA_PNP_FreeAllDevs() { - Bitu i; - - for (i=0;i < MAX_ISA_PNP_DEVICES;i++) { - if (ISA_PNP_devs[i] != NULL) { - delete ISA_PNP_devs[i]; - ISA_PNP_devs[i] = NULL; - } - } - for (i=0;i < MAX_ISA_PNP_SYSDEVNODES;i++) { - if (ISAPNP_SysDevNodes[i] != NULL) delete ISAPNP_SysDevNodes[i]; - ISAPNP_SysDevNodes[i] = NULL; - } - - ISAPNP_SysDevNodeLargest=0; - ISAPNP_SysDevNodeCount=0; -} - -void ISA_PNP_devreg(ISAPnPDevice *x) { - if (ISA_PNP_devnext < MAX_ISA_PNP_DEVICES) { - if (ISA_PNP_WPORT_BIOS == 0 && ISAPNPPORT) ISA_PNP_WPORT_BIOS = ISA_PNP_WPORT; - ISA_PNP_devs[ISA_PNP_devnext++] = x; - x->CSN = ISA_PNP_devnext; - } -} - -static Bitu isapnp_read_port(Bitu port,Bitu /*iolen*/) { - (void)port;//UNUSED - Bitu ret=0xff; - - switch (ISA_PNP_CUR_ADDR) { - case 0x01: /* serial isolation */ - if (ISA_PNP_selected && ISA_PNP_selected->CSN == 0) { - if (ISA_PNP_selected->ident_bp < 72) { - if (ISA_PNP_selected->ident[ISA_PNP_selected->ident_bp>>3] & (1 << (ISA_PNP_selected->ident_bp&7))) - ret = ISA_PNP_selected->ident_2nd ? 0xAA : 0x55; - else - ret = 0xFF; - - if (++ISA_PNP_selected->ident_2nd >= 2) { - ISA_PNP_selected->ident_2nd = 0; - ISA_PNP_selected->ident_bp++; - } - } - } - else { - ret = 0xFF; - } - break; - case 0x04: /* read resource data */ - if (ISA_PNP_selected) { - if (ISA_PNP_selected->resource_ident < 9) - ret = ISA_PNP_selected->ident[ISA_PNP_selected->resource_ident++]; - else { - /* real-world hardware testing shows that devices act as if there was some fixed block of ROM, - * that repeats every 128, 256, 512, or 1024 bytes if you just blindly read from this port. */ - if (ISA_PNP_selected->resource_data_pos < ISA_PNP_selected->resource_data_len) - ret = ISA_PNP_selected->resource_data[ISA_PNP_selected->resource_data_pos++]; - - /* that means that if you read enough bytes the ROM loops back to returning the ident */ - if (ISA_PNP_selected->resource_data_pos >= ISA_PNP_selected->resource_data_len) { - ISA_PNP_selected->resource_data_pos = 0; - ISA_PNP_selected->resource_ident = 0; - } - } - } - break; - case 0x05: /* read resource status */ - if (ISA_PNP_selected) { - /* real-world hardware testing shows that devices act as if there was some fixed block of ROM, - * that repeats every 128, 256, 512, or 1024 bytes if you just blindly read from this port. - * therefore, there's always a byte to return. */ - ret = 0x01; /* TODO: simulate hardware slowness */ - } - break; - case 0x06: /* card select number */ - if (ISA_PNP_selected) ret = ISA_PNP_selected->CSN; - break; - case 0x07: /* logical device number */ - if (ISA_PNP_selected) ret = ISA_PNP_selected->logical_device; - break; - default: /* pass the rest down to the class */ - if (ISA_PNP_selected) ret = ISA_PNP_selected->read(ISA_PNP_CUR_ADDR); - break; - } - -// if (1) LOG_MSG("PnP read(%02X) = %02X\n",ISA_PNP_CUR_ADDR,ret); - return ret; -} - -void isapnp_write_port(Bitu port,Bitu val,Bitu /*iolen*/) { - Bitu i; - - if (port == 0x279) { -// if (1) LOG_MSG("PnP addr(%02X)\n",val); - if (val == isa_pnp_init_keystring[ISA_PNP_KEYMATCH]) { - if (++ISA_PNP_KEYMATCH == 32) { -// LOG_MSG("ISA PnP key -> going to sleep\n"); - ISA_PNP_CUR_STATE = ISA_PNP_SLEEP; - ISA_PNP_KEYMATCH = 0; - for (i=0;i < MAX_ISA_PNP_DEVICES;i++) { - if (ISA_PNP_devs[i] != NULL) { - ISA_PNP_devs[i]->on_pnp_key(); - } - } - } - } - else { - ISA_PNP_KEYMATCH = 0; - } - - ISA_PNP_CUR_ADDR = val; - } - else if (port == 0xA79) { -// if (1) LOG_MSG("PnP write(%02X) = %02X\n",ISA_PNP_CUR_ADDR,val); - switch (ISA_PNP_CUR_ADDR) { - case 0x00: { /* RD_DATA */ - unsigned int np = ((val & 0xFF) << 2) | 3; - if (np != ISA_PNP_WPORT) { - if (ISAPNP_PNP_READ_PORT != NULL) { - ISAPNP_PNP_READ_PORT = NULL; - delete ISAPNP_PNP_READ_PORT; - } - - if (np >= 0x200 && np <= 0x3FF) { /* allowable port I/O range according to spec */ - LOG_MSG("PNP OS changed I/O read port to 0x%03X (from 0x%03X)\n",np,ISA_PNP_WPORT); - - ISA_PNP_WPORT = np; - ISAPNP_PNP_READ_PORT = new IO_ReadHandleObject; - ISAPNP_PNP_READ_PORT->Install(ISA_PNP_WPORT,isapnp_read_port,IO_MB); - } - else { - LOG_MSG("PNP OS I/O read port disabled\n"); - - ISA_PNP_WPORT = 0; - } - - if (ISA_PNP_selected != NULL) { - ISA_PNP_selected->ident_bp = 0; - ISA_PNP_selected->ident_2nd = 0; - ISA_PNP_selected->resource_data_pos = 0; - } - } - } break; - case 0x02: /* config control */ - if (val & 4) { - /* ALL CARDS RESET CSN to 0 */ - for (i=0;i < MAX_ISA_PNP_DEVICES;i++) { - if (ISA_PNP_devs[i] != NULL) { - ISA_PNP_devs[i]->CSN = 0; - } - } - } - if (val & 2) ISA_PNP_CUR_STATE = ISA_PNP_WAIT_FOR_KEY; - if ((val & 1) && ISA_PNP_selected) ISA_PNP_selected->config(val); - for (i=0;i < MAX_ISA_PNP_DEVICES;i++) { - if (ISA_PNP_devs[i] != NULL) { - ISA_PNP_devs[i]->ident_bp = 0; - ISA_PNP_devs[i]->ident_2nd = 0; - ISA_PNP_devs[i]->resource_data_pos = 0; - } - } - break; - case 0x03: { /* wake[CSN] */ - ISA_PNP_selected = NULL; - for (i=0;ISA_PNP_selected == NULL && i < MAX_ISA_PNP_DEVICES;i++) { - if (ISA_PNP_devs[i] == NULL) - continue; - if (ISA_PNP_devs[i]->CSN == val) { - ISA_PNP_selected = ISA_PNP_devs[i]; - ISA_PNP_selected->wakecsn(val); - } - } - if (val == 0) - ISA_PNP_CUR_STATE = ISA_PNP_ISOLATE; - else - ISA_PNP_CUR_STATE = ISA_PNP_CONFIG; - } break; - case 0x06: /* card select number */ - if (ISA_PNP_selected) ISA_PNP_selected->CSN = val; - break; - case 0x07: /* logical device number */ - if (ISA_PNP_selected) ISA_PNP_selected->select_logical_device(val); - break; - default: /* pass the rest down to the class */ - if (ISA_PNP_selected) ISA_PNP_selected->write(ISA_PNP_CUR_ADDR,val); - break; - } - } -} - -// IBM PC/AT CTRL+BREAK interrupt, called by IRQ1 handler. -// Not applicable to PC-98 mode, of course. -Bitu INT1B_Break_Handler(void) { - // BIOS DATA AREA 40:71 bit 7 is set when Break key is pressed. - // This is already implemented by IRQ1 handler in src/ints/bios_keyboard.cpp. - // Ref: [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/Computers/IBM/PS%e2%88%952/IBM%20Personal%20System%e2%88%952%20and%20Personal%20Computer%20BIOS%20Interface%20Technical%20Reference%20%281991%2d09%29%20First%20Edition%2c%20part%203%2epdf] - return CBRET_NONE; -} - - -static Bitu INT15_Handler(void); - -// FIXME: This initializes both APM BIOS and ISA PNP emulation! -// Need to separate APM BIOS init from ISA PNP init from ISA PNP BIOS init! -// It might also be appropriate to move this into the BIOS init sequence. -void ISAPNP_Cfg_Reset(Section *sec) { - (void)sec;//UNUSED - const Section_prop* section = static_cast(control->GetSection("cpu")); - - LOG(LOG_MISC,LOG_DEBUG)("Initializing ISA PnP emulation"); - - enable_integration_device = section->Get_bool("integration device"); - enable_integration_device_pnp = section->Get_bool("integration device pnp"); - ISAPNPBIOS = section->Get_bool("isapnpbios"); - { - /* ISAPNPPORT = off|auto|on */ - const char *s = section->Get_string("isapnpport"); - - if (!strcmp(s,"true") || !strcmp(s,"1")) - ISAPNPPORT = true; - else if (!strcmp(s,"false") || !strcmp(s,"0")) - ISAPNPPORT = false; - else /* auto */ - ISAPNPPORT = ISAPNPBIOS; /* if the PnP BIOS is enabled, then so is the port */ - } - APMBIOS = section->Get_bool("apmbios"); - APMBIOS_pnp = section->Get_bool("apmbios pnp"); - APMBIOS_allow_realmode = section->Get_bool("apmbios allow realmode"); - APMBIOS_allow_prot16 = section->Get_bool("apmbios allow 16-bit protected mode"); - APMBIOS_allow_prot32 = section->Get_bool("apmbios allow 32-bit protected mode"); - - std::string apmbiosver = section->Get_string("apmbios version"); - - /* PC-98 does not have the IBM PC/AT APM BIOS interface */ - if (IS_PC98_ARCH) { - APMBIOS = false; - APMBIOS_pnp = false; - } - - if (apmbiosver == "1.0") - APM_BIOS_minor_version = 0; - else if (apmbiosver == "1.1") - APM_BIOS_minor_version = 1; - else if (apmbiosver == "1.2") - APM_BIOS_minor_version = 2; - else//auto - APM_BIOS_minor_version = 2; - - /* PC-98 does not have APM. - * I *think* it has Plug & Play, but probably different from ISA PnP and specific to the C-Bus interface, - * which I have no information on at this time --J.C. */ - if (IS_PC98_ARCH) - return; - - LOG(LOG_MISC,LOG_DEBUG)("APM BIOS allow: real=%u pm16=%u pm32=%u version=1.%u", - APMBIOS_allow_realmode, - APMBIOS_allow_prot16, - APMBIOS_allow_prot32, - APM_BIOS_minor_version); - - std::string apmbiospwrbtn = section->Get_string("apm power button event"); - if (apmbiospwrbtn == "standby") - APM_PowerButtonSendsSuspend = false; - else - APM_PowerButtonSendsSuspend = true; - - - if (APMBIOS && (APMBIOS_allow_prot16 || APMBIOS_allow_prot32) && INT15_apm_pmentry == 0) { - Bitu cb,base; - - /* NTS: This is... kind of a terrible hack. It basically tricks Windows into executing our - * INT 15h handler as if the APM entry point. Except that instead of an actual INT 15h - * triggering the callback, a FAR CALL triggers the callback instead (CB_RETF not CB_IRET). */ - /* TODO: We should really consider moving the APM BIOS code in INT15_Handler() out into its - * own function, then having the INT15_Handler() call it as well as directing this callback - * directly to it. If you think about it, this hack also lets the "APM entry point" invoke - * other arbitrary INT 15h calls which is not valid. */ - - cb = CALLBACK_Allocate(); - INT15_apm_pmentry = CALLBACK_RealPointer(cb); - LOG_MSG("Allocated APM BIOS pm entry point at %04x:%04x\n",INT15_apm_pmentry>>16,INT15_apm_pmentry&0xFFFF); - CALLBACK_Setup(cb,INT15_Handler,CB_RETF,"APM BIOS protected mode entry point"); - - /* NTS: Actually INT15_Handler is written to act like an interrupt (IRETF) type callback. - * Prior versions hacked this into something that responds by CB_RETF, however some - * poking around reveals that CALLBACK_SCF and friends still assume an interrupt - * stack, thus, the cause of random crashes in Windows was simply that we were - * flipping flag bits in the middle of the return address on the stack. The other - * source of random crashes is that the CF/ZF manipulation in INT 15h wasn't making - * its way back to Windows, meaning that when APM BIOS emulation intended to return - * an error (by setting CF), Windows didn't get the memo (CF wasn't set on return) - * and acted as if the call succeeded, or worse, CF happened to be set on entry and - * was never cleared by APM BIOS emulation. - * - * So what we need is: - * - * PUSHF ; put flags in right place - * PUSH BP ; dummy FAR pointer - * PUSH BP ; again - * - * POP BP ; drop it - * POP BP ; drop it - * POPF - * RETF - * - * Then CALLBACK_SCF can work normally this way. - * - * NTS: We *still* need to separate APM BIOS calls from the general INT 15H emulation though... */ - base = Real2Phys(INT15_apm_pmentry); - LOG_MSG("Writing code to %05x\n",(unsigned int)base); - - phys_writeb(base+0x00,0x9C); /* pushf */ - phys_writeb(base+0x01,0x55); /* push (e)bp */ - phys_writeb(base+0x02,0x55); /* push (e)bp */ - - phys_writeb(base+0x03,(uint8_t)0xFE); //GRP 4 - phys_writeb(base+0x04,(uint8_t)0x38); //Extra Callback instruction - phys_writew(base+0x05,(uint16_t)cb); //The immediate word - - phys_writeb(base+0x07,0x5D); /* pop (e)bp */ - phys_writeb(base+0x08,0x5D); /* pop (e)bp */ - phys_writeb(base+0x09,0x9D); /* popf */ - phys_writeb(base+0x0A,0xCB); /* retf */ - - /* APM suspended mode execution loop */ - cb = CALLBACK_Allocate(); - APM_SuspendedLoopRptr = CALLBACK_RealPointer(cb); - CALLBACK_Setup(cb,APM_SuspendedLoopFunc,CB_RETF,"APM BIOS suspend/standby loop"); - - base = Real2Phys(APM_SuspendedLoopRptr); - LOG_MSG("Writing code to %05x\n",(unsigned int)base); - phys_writeb(base+0x04,0xF4); /* hlt */ - phys_writew(base+0x05,0xF9EB); /* jmp $-5 (EB xx) */ - phys_writeb(base+0x07,0xC3); /* ret */ - } -} - -void ISAPNP_Cfg_Init() { - AddVMEventFunction(VM_EVENT_RESET,AddVMEventFunctionFuncPair(ISAPNP_Cfg_Reset)); -} - -/* the PnP callback registered two entry points. One for real, one for protected mode. */ -static Bitu PNPentry_real,PNPentry_prot; - -static bool ISAPNP_Verify_BiosSelector(Bitu seg) { - if (!cpu.pmode || (reg_flags & FLAG_VM)) { - return (seg == 0xF000); - } else if (seg == 0) - return 0; - else { -#if 1 - /* FIXME: Always return true. But figure out how to ask DOSBox the linear->phys - mapping to determine whether the segment's base address maps to 0xF0000. - In the meantime disabling this check makes PnP BIOS emulation work with - Windows 95 OSR2 which appears to give us a segment mapped to a virtual - address rather than linearly mapped to 0xF0000 as Windows 95 original - did. */ - return true; -#else - Descriptor desc; - cpu.gdt.GetDescriptor(seg,desc); - - /* TODO: Check desc.Type() to make sure it's a writeable data segment */ - return (desc.GetBase() == 0xF0000); -#endif - } -} - -static bool ISAPNP_CPU_ProtMode() { - if (!cpu.pmode || (reg_flags & FLAG_VM)) - return 0; - - return 1; -} - -static Bitu ISAPNP_xlate_address(Bitu far_ptr) { - if (!cpu.pmode || (reg_flags & FLAG_VM)) - return Real2Phys(far_ptr); - else { - Descriptor desc; - cpu.gdt.GetDescriptor(far_ptr >> 16,desc); - - /* TODO: Check desc.Type() to make sure it's a writeable data segment */ - return (desc.GetBase() + (far_ptr & 0xFFFF)); - } -} - -static const unsigned char ISAPNP_sysdev_Keyboard[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0x3,0x0,0x3), /* PNP0303 IBM Enhanced 101/102 key with PS/2 */ - ISAPNP_TYPE(0x09,0x00,0x00), /* type: input, keyboard */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0x60,0x60, /* min-max range I/O port */ - 0x01,0x01), /* align=1 length=1 */ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0x64,0x64, /* min-max range I/O port */ - 0x01,0x01), /* align=1 length=1 */ - ISAPNP_IRQ_SINGLE( - 1, /* IRQ 1 */ - 0x09), /* HTE=1 LTL=1 */ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -static const unsigned char ISAPNP_sysdev_Mouse[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0xF,0x0,0xE), /* PNP0F0E Microsoft compatible PS/2 */ - ISAPNP_TYPE(0x09,0x02,0x00), /* type: input, keyboard */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_IRQ_SINGLE( - 12, /* IRQ 12 */ - 0x09), /* HTE=1 LTL=1 */ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -static const unsigned char ISAPNP_sysdev_DMA_Controller[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0x2,0x0,0x0), /* PNP0200 AT DMA controller */ - ISAPNP_TYPE(0x08,0x01,0x00), /* type: input, keyboard */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0x00,0x00, /* min-max range I/O port (DMA channels 0-3) */ - 0x10,0x10), /* align=16 length=16 */ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0x81,0x81, /* min-max range I/O port (DMA page registers) */ - 0x01,0x0F), /* align=1 length=15 */ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0xC0,0xC0, /* min-max range I/O port (AT DMA channels 4-7) */ - 0x20,0x20), /* align=32 length=32 */ - ISAPNP_DMA_SINGLE( - 4, /* DMA 4 */ - 0x01), /* 8/16-bit transfers, compatible speed */ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -static const unsigned char ISAPNP_sysdev_PIC[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0x0,0x0,0x0), /* PNP0000 Interrupt controller */ - ISAPNP_TYPE(0x08,0x00,0x01), /* type: ISA interrupt controller */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0x20,0x20, /* min-max range I/O port */ - 0x01,0x02), /* align=1 length=2 */ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0xA0,0xA0, /* min-max range I/O port */ - 0x01,0x02), /* align=1 length=2 */ - ISAPNP_IRQ_SINGLE( - 2, /* IRQ 2 */ - 0x09), /* HTE=1 LTL=1 */ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -static const unsigned char ISAPNP_sysdev_Timer[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0x1,0x0,0x0), /* PNP0100 Timer */ - ISAPNP_TYPE(0x08,0x02,0x01), /* type: ISA timer */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0x40,0x40, /* min-max range I/O port */ - 0x04,0x04), /* align=4 length=4 */ - ISAPNP_IRQ_SINGLE( - 0, /* IRQ 0 */ - 0x09), /* HTE=1 LTL=1 */ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -static const unsigned char ISAPNP_sysdev_RTC[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0xB,0x0,0x0), /* PNP0B00 Real-time clock */ - ISAPNP_TYPE(0x08,0x03,0x01), /* type: ISA real-time clock */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0x70,0x70, /* min-max range I/O port */ - 0x01,0x02), /* align=1 length=2 */ - ISAPNP_IRQ_SINGLE( - 8, /* IRQ 8 */ - 0x09), /* HTE=1 LTL=1 */ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -static const unsigned char ISAPNP_sysdev_PC_Speaker[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0x8,0x0,0x0), /* PNP0800 PC speaker */ - ISAPNP_TYPE(0x04,0x01,0x00), /* type: PC speaker */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0x61,0x61, /* min-max range I/O port */ - 0x01,0x01), /* align=1 length=1 */ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -static const unsigned char ISAPNP_sysdev_Numeric_Coprocessor[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0xC,0x0,0x4), /* PNP0C04 Numeric Coprocessor */ - ISAPNP_TYPE(0x0B,0x80,0x00), /* type: FPU */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0xF0,0xF0, /* min-max range I/O port */ - 0x10,0x10), /* align=16 length=16 */ - ISAPNP_IRQ_SINGLE( - 13, /* IRQ 13 */ - 0x09), /* HTE=1 LTL=1 */ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -static const unsigned char ISAPNP_sysdev_System_Board[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0xC,0x0,0x1), /* PNP0C01 System board */ - ISAPNP_TYPE(0x08,0x80,0x00), /* type: System peripheral, Other */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0x24,0x24, /* min-max range I/O port */ - 0x04,0x04), /* align=4 length=4 */ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -/* NTS: If some of my late 1990's laptops are any indication, this resource list can be used - * as a hint that the motherboard supports Intel EISA/PCI controller DMA registers that - * allow ISA DMA to extend to 32-bit addresses instead of being limited to 24-bit */ -static const unsigned char ISAPNP_sysdev_General_ISAPNP[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0xC,0x0,0x2), /* PNP0C02 General ID for reserving resources */ - ISAPNP_TYPE(0x08,0x80,0x00), /* type: System peripheral, Other */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_IO_RANGE( - 0x01, /* decodes 16-bit ISA addr */ - 0x208,0x208, /* min-max range I/O port */ - 0x04,0x04), /* align=4 length=4 */ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -/* PnP system entry to tell Windows 95 the obvious: That there's an ISA bus present */ -/* NTS: Examination of some old laptops of mine shows that these devices do not list any resources, - * or at least, an old Toshiba of mine lists the PCI registers 0xCF8-0xCFF as motherboard resources - * and defines no resources for the PCI Bus PnP device. */ -static const unsigned char ISAPNP_sysdev_ISA_BUS[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0xA,0x0,0x0), /* PNP0A00 ISA Bus */ - ISAPNP_TYPE(0x06,0x04,0x00), /* type: System device, peripheral bus */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -/* PnP system entry to tell Windows 95 the obvious: That there's a PCI bus present */ -static const unsigned char ISAPNP_sysdev_PCI_BUS[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0xA,0x0,0x3), /* PNP0A03 PCI Bus */ - ISAPNP_TYPE(0x06,0x04,0x00), /* type: System device, peripheral bus */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -/* to help convince Windows 95 that the APM BIOS is present */ -static const unsigned char ISAPNP_sysdev_APM_BIOS[] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0xC,0x0,0x5), /* PNP0C05 APM BIOS */ - ISAPNP_TYPE(0x08,0x80,0x00), /* type: FIXME is this right?? I can't find any examples or documentation */ - 0x0001 | 0x0002), /* can't disable, can't configure */ - /*----------allocated--------*/ - ISAPNP_END, - /*----------possible--------*/ - ISAPNP_END, - /*----------compatible--------*/ - ISAPNP_END -}; - -bool ISAPNP_RegisterSysDev(const unsigned char *raw,Bitu len,bool already) { - if (ISAPNP_SysDevNodeCount >= MAX_ISA_PNP_SYSDEVNODES) - return false; - - ISAPNP_SysDevNodes[ISAPNP_SysDevNodeCount] = new ISAPNP_SysDevNode(raw,len,already); - if (ISAPNP_SysDevNodes[ISAPNP_SysDevNodeCount] == NULL) - return false; - - ISAPNP_SysDevNodeCount++; - if (ISAPNP_SysDevNodeLargest < (len+3)) - ISAPNP_SysDevNodeLargest = len+3; - - return true; -} - -/* ISA PnP function calls have their parameters stored on the stack "C" __cdecl style. Parameters - * are either int, long, or FAR pointers. Like __cdecl an assembly language implementation pushes - * the function arguments on the stack BACKWARDS */ -static Bitu ISAPNP_Handler(bool protmode /* called from protected mode interface == true */) { - Bitu arg; - Bitu func,BiosSelector; - - /* I like how the ISA PnP spec says that the 16-bit entry points (real and protected) are given 16-bit data segments - * which implies that all segments involved might as well be 16-bit. - * - * Right? - * - * Well, guess what Windows 95 gives us when calling this entry point: - * - * Segment SS = DS = 0x30 base=0 limit=0xFFFFFFFF - * SS:SP = 0x30:0xC138BADF or something like that from within BIOS.VXD - * - * Yeah... for a 16-bit code segment call. Right. Typical Microsoft. >:( - * - * This might also explain why my early experiments with Bochs always had the perpetual - * APM BIOS that never worked but was always detected. - * - * ------------------------------------------------------------------------ - * Windows 95 OSR2: - * - * Windows 95 OSR2 however uses a 16-bit stack (where the stack segment is based somewhere - * around 0xC1xxxxxx), all we have to do to correctly access it is work through the page tables. - * This is within spec, but now Microsoft sends us a data segment that is based at virtual address - * 0xC2xxxxxx, which is why I had to disable the "verify selector" routine */ - arg = SegPhys(ss) + (reg_esp&cpu.stack.mask) + (2*2); /* entry point (real and protected) is 16-bit, expected to RETF (skip CS:IP) */ - - if (protmode != ISAPNP_CPU_ProtMode()) { - //LOG_MSG("ISA PnP %s entry point called from %s. On real BIOSes this would CRASH\n",protmode ? "Protected mode" : "Real mode", - // ISAPNP_CPU_ProtMode() ? "Protected mode" : "Real mode"); - reg_ax = 0x84;/* BAD_PARAMETER */ - return 0; - } - - func = mem_readw(arg); -// LOG_MSG("PnP prot=%u DS=%04x (base=0x%08lx) SS:ESP=%04x:%04x (base=0x%08lx phys=0x%08lx) function=0x%04x\n", -// (unsigned int)protmode,(unsigned int)SegValue(ds),(unsigned long)SegPhys(ds), -// (unsigned int)SegValue(ss),(unsigned int)reg_esp,(unsigned long)SegPhys(ss), -// (unsigned long)arg,(unsigned int)func); - - /* every function takes the form - * - * int __cdecl FAR (*entrypoint)(int Function...); - * - * so the first argument on the stack is an int that we read to determine what the caller is asking - * - * Don't forget in the real-mode world: - * sizeof(int) == 16 bits - * sizeof(long) == 32 bits - */ - switch (func) { - case 0: { /* Get Number of System Nodes */ - /* int __cdecl FAR (*entrypoint)(int Function,unsigned char FAR *NumNodes,unsigned int FAR *NodeSize,unsigned int BiosSelector); - * ^ +0 ^ +2 ^ +6 ^ +10 = 12 */ - Bitu NumNodes_ptr = mem_readd(arg+2); - Bitu NodeSize_ptr = mem_readd(arg+6); - BiosSelector = mem_readw(arg+10); - - if (!ISAPNP_Verify_BiosSelector(BiosSelector)) - goto badBiosSelector; - - if (NumNodes_ptr != 0) mem_writeb(ISAPNP_xlate_address(NumNodes_ptr),ISAPNP_SysDevNodeCount); - if (NodeSize_ptr != 0) mem_writew(ISAPNP_xlate_address(NodeSize_ptr),ISAPNP_SysDevNodeLargest); - - reg_ax = 0x00;/* SUCCESS */ - } break; - case 1: { /* Get System Device Node */ - /* int __cdecl FAR (*entrypoint)(int Function,unsigned char FAR *Node,struct DEV_NODE FAR *devNodeBuffer,unsigned int Control,unsigned int BiosSelector); - * ^ +0 ^ +2 ^ +6 ^ +10 ^ +12 = 14 */ - Bitu Node_ptr = mem_readd(arg+2); - Bitu devNodeBuffer_ptr = mem_readd(arg+6); - Bitu Control = mem_readw(arg+10); - BiosSelector = mem_readw(arg+12); - unsigned char Node; - Bitu i=0; - - if (!ISAPNP_Verify_BiosSelector(BiosSelector)) - goto badBiosSelector; - - /* control bits 0-1 must be '01' or '10' but not '00' or '11' */ - if (Control == 0 || (Control&3) == 3) { - LOG_MSG("ISAPNP Get System Device Node: Invalid Control value 0x%04x\n",(int)Control); - reg_ax = 0x84;/* BAD_PARAMETER */ - break; - } - - devNodeBuffer_ptr = ISAPNP_xlate_address(devNodeBuffer_ptr); - Node_ptr = ISAPNP_xlate_address(Node_ptr); - Node = mem_readb(Node_ptr); - if (Node >= ISAPNP_SysDevNodeCount) { - LOG_MSG("ISAPNP Get System Device Node: Invalid Node 0x%02x (max 0x%04x)\n",(int)Node,(int)ISAPNP_SysDevNodeCount); - reg_ax = 0x84;/* BAD_PARAMETER */ - break; - } - - const ISAPNP_SysDevNode *nd = ISAPNP_SysDevNodes[Node]; - - mem_writew(devNodeBuffer_ptr+0,(uint16_t)(nd->raw_len+3)); /* Length */ - mem_writeb(devNodeBuffer_ptr+2,Node); /* on most PnP BIOS implementations I've seen "handle" is set to the same value as Node */ - for (i=0;i < (Bitu)nd->raw_len;i++) - mem_writeb(devNodeBuffer_ptr+i+3,nd->raw[i]); - -// LOG_MSG("ISAPNP OS asked for Node 0x%02x\n",Node); - - if (++Node >= ISAPNP_SysDevNodeCount) Node = 0xFF; /* no more nodes */ - mem_writeb(Node_ptr,Node); - - reg_ax = 0x00;/* SUCCESS */ - } break; - case 4: { /* Send Message */ - /* int __cdecl FAR (*entrypoint)(int Function,unsigned int Message,unsigned int BiosSelector); - * ^ +0 ^ +2 ^ +4 = 6 */ - Bitu Message = mem_readw(arg+2); - BiosSelector = mem_readw(arg+4); - - if (!ISAPNP_Verify_BiosSelector(BiosSelector)) - goto badBiosSelector; - - switch (Message) { - case 0x41: /* POWER_OFF */ - LOG_MSG("Plug & Play OS requested power off.\n"); - reg_ax = 0; - throw 1; /* NTS: Based on the Reboot handler code, causes DOSBox-X to cleanly shutdown and exit */ - break; - case 0x42: /* PNP_OS_ACTIVE */ - LOG_MSG("Plug & Play OS reports itself active\n"); - reg_ax = 0; - break; - case 0x43: /* PNP_OS_INACTIVE */ - LOG_MSG("Plug & Play OS reports itself inactive\n"); - reg_ax = 0; - break; - default: - LOG_MSG("Unknown ISA PnP message 0x%04x\n",(int)Message); - reg_ax = 0x82;/* FUNCTION_NOT_SUPPORTED */ - break; - } - } break; - case 0x40: { /* Get PnP ISA configuration */ - /* int __cdecl FAR (*entrypoint)(int Function,unsigned char far *struct,unsigned int BiosSelector); - * ^ +0 ^ +2 ^ +6 = 8 */ - Bitu struct_ptr = mem_readd(arg+2); - BiosSelector = mem_readw(arg+6); - - if (!ISAPNP_Verify_BiosSelector(BiosSelector)) - goto badBiosSelector; - - /* struct isapnp_pnp_isa_cfg { - uint8_t revision; - uint8_t total_csn; - uint16_t isa_pnp_port; - uint16_t reserved; - }; */ - - if (struct_ptr != 0) { - Bitu ph = ISAPNP_xlate_address(struct_ptr); - mem_writeb(ph+0,0x01); /* ->revision = 0x01 */ - mem_writeb(ph+1,ISA_PNP_devnext); /* ->total_csn */ - mem_writew(ph+2,ISA_PNP_WPORT_BIOS); /* ->isa_pnp_port */ - mem_writew(ph+4,0); /* ->reserved */ - } - - reg_ax = 0x00;/* SUCCESS */ - } break; - default: - //LOG_MSG("Unsupported ISA PnP function 0x%04x\n",func); - reg_ax = 0x82;/* FUNCTION_NOT_SUPPORTED */ - break; - } - - return 0; -badBiosSelector: - /* return an error. remind the user (possible developer) how lucky he is, a real - * BIOS implementation would CRASH when misused like this */ - LOG_MSG("ISA PnP function 0x%04x called with incorrect BiosSelector parameter 0x%04x\n",(int)func,(int)BiosSelector); - LOG_MSG(" > STACK %04X %04X %04X %04X %04X %04X %04X %04X\n", - mem_readw(arg), mem_readw(arg+2), mem_readw(arg+4), mem_readw(arg+6), - mem_readw(arg+8), mem_readw(arg+10), mem_readw(arg+12), mem_readw(arg+14)); - - reg_ax = 0x84;/* BAD_PARAMETER */ - return 0; -} - -static Bitu ISAPNP_Handler_PM(void) { - return ISAPNP_Handler(true); -} - -static Bitu ISAPNP_Handler_RM(void) { - return ISAPNP_Handler(false); -} - -static Bitu INT70_Handler(void) { - /* Acknowledge irq with cmos */ - IO_Write(0x70,0xc); - IO_Read(0x71); - if (mem_readb(BIOS_WAIT_FLAG_ACTIVE)) { - uint32_t count=mem_readd(BIOS_WAIT_FLAG_COUNT); - if (count>997) { - mem_writed(BIOS_WAIT_FLAG_COUNT,count-997); - } else { - mem_writed(BIOS_WAIT_FLAG_COUNT,0); - PhysPt where=Real2Phys(mem_readd(BIOS_WAIT_FLAG_POINTER)); - mem_writeb(where,mem_readb(where)|0x80); - mem_writeb(BIOS_WAIT_FLAG_ACTIVE,0); - mem_writed(BIOS_WAIT_FLAG_POINTER,RealMake(0,BIOS_WAIT_FLAG_TEMP)); - IO_Write(0x70,0xb); - IO_Write(0x71,IO_Read(0x71)&~0x40); - } - } - /* Signal EOI to both pics */ - IO_Write(0xa0,0x20); - IO_Write(0x20,0x20); - return 0; -} - -CALLBACK_HandlerObject* tandy_DAC_callback[2]; -static struct { - uint16_t port; - uint8_t irq; - uint8_t dma; -} tandy_sb; -static struct { - uint16_t port; - uint8_t irq; - uint8_t dma; -} tandy_dac; - -static bool Tandy_InitializeSB() { - /* see if soundblaster module available and at what port/IRQ/DMA */ - Bitu sbport, sbirq, sbdma; - if (SB_Get_Address(sbport, sbirq, sbdma)) { - tandy_sb.port=(uint16_t)(sbport&0xffff); - tandy_sb.irq =(uint8_t)(sbirq&0xff); - tandy_sb.dma =(uint8_t)(sbdma&0xff); - return true; - } else { - /* no soundblaster accessible, disable Tandy DAC */ - tandy_sb.port=0; - return false; - } -} - -static bool Tandy_InitializeTS() { - /* see if Tandy DAC module available and at what port/IRQ/DMA */ - Bitu tsport, tsirq, tsdma; - if (TS_Get_Address(tsport, tsirq, tsdma)) { - tandy_dac.port=(uint16_t)(tsport&0xffff); - tandy_dac.irq =(uint8_t)(tsirq&0xff); - tandy_dac.dma =(uint8_t)(tsdma&0xff); - return true; - } else { - /* no Tandy DAC accessible */ - tandy_dac.port=0; - return false; - } -} - -/* check if Tandy DAC is still playing */ -static bool Tandy_TransferInProgress(void) { - if (real_readw(0x40,0xd0)) return true; /* not yet done */ - if (real_readb(0x40,0xd4)==0xff) return false; /* still in init-state */ - - uint8_t tandy_dma = 1; - if (tandy_sb.port) tandy_dma = tandy_sb.dma; - else if (tandy_dac.port) tandy_dma = tandy_dac.dma; - - IO_Write(0x0c,0x00); - uint16_t datalen = (IO_ReadB(tandy_dma * 2 + 1)) + (IO_ReadB(tandy_dma * 2 + 1) << 8); - if (datalen==0xffff) return false; /* no DMA transfer */ - else if ((datalen<0x10) && (real_readb(0x40,0xd4)==0x0f) && (real_readw(0x40,0xd2)==0x1c)) { - /* stop already requested */ - return false; - } - return true; -} - -static void Tandy_SetupTransfer(PhysPt bufpt,bool isplayback) { - Bitu length=real_readw(0x40,0xd0); - if (length==0) return; /* nothing to do... */ - - if ((tandy_sb.port==0) && (tandy_dac.port==0)) return; - - uint8_t tandy_irq = 7; - if (tandy_sb.port) tandy_irq = tandy_sb.irq; - else if (tandy_dac.port) tandy_irq = tandy_dac.irq; - uint8_t tandy_irq_vector = tandy_irq; - if (tandy_irq_vector<8) tandy_irq_vector += 8; - else tandy_irq_vector += (0x70-8); - - /* revector IRQ-handler if necessary */ - RealPt current_irq=RealGetVec(tandy_irq_vector); - if (current_irq!=tandy_DAC_callback[0]->Get_RealPointer()) { - real_writed(0x40,0xd6,current_irq); - RealSetVec(tandy_irq_vector,tandy_DAC_callback[0]->Get_RealPointer()); - } - - uint8_t tandy_dma = 1; - if (tandy_sb.port) tandy_dma = tandy_sb.dma; - else if (tandy_dac.port) tandy_dma = tandy_dac.dma; - - if (tandy_sb.port) { - IO_Write(tandy_sb.port+0xcu,0xd0); /* stop DMA transfer */ - IO_Write(0x21,IO_Read(0x21)&(~(1u<>16u)&0xff); - IO_Write(tandy_dma*2u,(uint8_t)(bufpt&0xff)); - IO_Write(tandy_dma*2u,(uint8_t)((bufpt>>8u)&0xff)); - switch (tandy_dma) { - case 0: IO_Write(0x87,bufpage); break; - case 1: IO_Write(0x83,bufpage); break; - case 2: IO_Write(0x81,bufpage); break; - case 3: IO_Write(0x82,bufpage); break; - } - real_writeb(0x40,0xd4,bufpage); - - /* calculate transfer size (respects segment boundaries) */ - uint32_t tlength=length; - if (tlength+(bufpt&0xffff)>0x10000) tlength=0x10000-(bufpt&0xffff); - real_writew(0x40,0xd0,(uint16_t)(length-tlength)); /* remaining buffer length */ - tlength--; - - /* set transfer size */ - IO_Write(tandy_dma*2u+1u,(uint8_t)(tlength&0xffu)); - IO_Write(tandy_dma*2u+1u,(uint8_t)((tlength>>8u)&0xffu)); - - uint16_t delay=(uint16_t)(real_readw(0x40,0xd2)&0xfff); - uint8_t amplitude=(uint8_t)(((unsigned int)real_readw(0x40,0xd2)>>13u)&0x7u); - if (tandy_sb.port) { - IO_Write(0x0a,tandy_dma); /* enable DMA channel */ - /* set frequency */ - IO_Write(tandy_sb.port+0xcu,0x40); - IO_Write(tandy_sb.port+0xcu,256u - delay*100u/358u); - /* set playback type to 8bit */ - if (isplayback) IO_Write(tandy_sb.port+0xcu,0x14u); - else IO_Write(tandy_sb.port+0xcu,0x24u); - /* set transfer size */ - IO_Write(tandy_sb.port+0xcu,(uint8_t)(tlength&0xffu)); - IO_Write(tandy_sb.port+0xcu,(uint8_t)((tlength>>8)&0xffu)); - } else { - if (isplayback) IO_Write(tandy_dac.port,(IO_Read(tandy_dac.port)&0x7cu) | 0x03u); - else IO_Write(tandy_dac.port,(IO_Read(tandy_dac.port)&0x7cu) | 0x02u); - IO_Write(tandy_dac.port+2u,(uint8_t)(delay&0xffu)); - IO_Write(tandy_dac.port+3u,(uint8_t)((((unsigned int)delay>>8u)&0xfu) | ((unsigned int)amplitude<<5u))); - if (isplayback) IO_Write(tandy_dac.port,(IO_Read(tandy_dac.port)&0x7cu) | 0x1fu); - else IO_Write(tandy_dac.port,(IO_Read(tandy_dac.port)&0x7c) | 0x1e); - IO_Write(0x0a,tandy_dma); /* enable DMA channel */ - } - - if (!isplayback) { - /* mark transfer as recording operation */ - real_writew(0x40,0xd2,(uint16_t)(delay|0x1000)); - } -} - -static Bitu IRQ_TandyDAC(void) { - if (tandy_dac.port) { - IO_Read(tandy_dac.port); - } - if (real_readw(0x40,0xd0)) { /* play/record next buffer */ - /* acknowledge IRQ */ - IO_Write(0x20,0x20); - if (tandy_sb.port) { - IO_Read(tandy_sb.port+0xeu); - } - - /* buffer starts at the next page */ - uint8_t npage=real_readb(0x40,0xd4)+1u; - real_writeb(0x40,0xd4,npage); - - Bitu rb=real_readb(0x40,0xd3); - if (rb&0x10) { - /* start recording */ - real_writeb(0x40,0xd3,rb&0xefu); - Tandy_SetupTransfer((unsigned int)npage<<16u,false); - } else { - /* start playback */ - Tandy_SetupTransfer((unsigned int)npage<<16u,true); - } - } else { /* playing/recording is finished */ - uint8_t tandy_irq = 7u; - if (tandy_sb.port) tandy_irq = tandy_sb.irq; - else if (tandy_dac.port) tandy_irq = tandy_dac.irq; - uint8_t tandy_irq_vector = tandy_irq; - if (tandy_irq_vector<8u) tandy_irq_vector += 8u; - else tandy_irq_vector += (0x70u-8u); - - RealSetVec(tandy_irq_vector,real_readd(0x40,0xd6)); - - /* turn off speaker and acknowledge soundblaster IRQ */ - if (tandy_sb.port) { - IO_Write(tandy_sb.port+0xcu,0xd3u); - IO_Read(tandy_sb.port+0xeu); - } - - /* issue BIOS tandy sound device busy callout */ - SegSet16(cs, RealSeg(tandy_DAC_callback[1]->Get_RealPointer())); - reg_ip = RealOff(tandy_DAC_callback[1]->Get_RealPointer()); - } - return CBRET_NONE; -} - -static void TandyDAC_Handler(uint8_t tfunction) { - if ((!tandy_sb.port) && (!tandy_dac.port)) return; - switch (tfunction) { - case 0x81: /* Tandy sound system check */ - if (tandy_dac.port) { - reg_ax=tandy_dac.port; - } else { - reg_ax=0xc4; - } - CALLBACK_SCF(Tandy_TransferInProgress()); - break; - case 0x82: /* Tandy sound system start recording */ - case 0x83: /* Tandy sound system start playback */ - if (Tandy_TransferInProgress()) { - /* cannot play yet as the last transfer isn't finished yet */ - reg_ah=0x00; - CALLBACK_SCF(true); - break; - } - /* store buffer length */ - real_writew(0x40,0xd0,reg_cx); - /* store delay and volume */ - real_writew(0x40,0xd2,(reg_dx&0xfff)|((reg_al&7)<<13)); - Tandy_SetupTransfer(PhysMake(SegValue(es),reg_bx),reg_ah==0x83); - reg_ah=0x00; - CALLBACK_SCF(false); - break; - case 0x84: /* Tandy sound system stop playing */ - reg_ah=0x00; - - /* setup for a small buffer with silence */ - real_writew(0x40,0xd0,0x0a); - real_writew(0x40,0xd2,0x1c); - Tandy_SetupTransfer(PhysMake(0xf000,0xa084),true); - CALLBACK_SCF(false); - break; - case 0x85: /* Tandy sound system reset */ - if (tandy_dac.port) { - IO_Write(tandy_dac.port,(uint8_t)(IO_Read(tandy_dac.port)&0xe0)); - } - reg_ah=0x00; - CALLBACK_SCF(false); - break; - } -} - -extern bool date_host_forced; -static uint8_t ReadCmosByte (Bitu index) { - IO_Write(0x70, index); - return IO_Read(0x71); -} - -static void WriteCmosByte (Bitu index, Bitu val) { - IO_Write(0x70, index); - IO_Write(0x71, val); -} - -static bool RtcUpdateDone () { - while ((ReadCmosByte(0x0a) & 0x80) != 0) CALLBACK_Idle(); - return true; // cannot fail in DOSbox -} - -static void InitRtc () { - // Change the RTC to return BCD and set the 24h bit. Clear the SET bit. - // That's it. Do not change any other bits. - // - // Some games ("The Tales of Peter Rabbit") use the RTC clock periodic - // interrupt for timing and music at rates other than 1024Hz and we must - // not change that rate nor clear any interrupt enable bits. Do not clear - // pending interrupts, either! The periodic interrupt does not affect reading - // the RTC clock. The point of this function and INT 15h code calling this - // function is to read the clock. - WriteCmosByte(0x0b, (ReadCmosByte(0x0b) & 0x7du/*clear=SET[7]|DM[2]*/) | 0x03u/*set=24/12[1]|DSE[0]*/); -} - -static Bitu INT1A_Handler(void) { - CALLBACK_SIF(true); - switch (reg_ah) { - case 0x00: /* Get System time */ - { - uint32_t ticks=mem_readd(BIOS_TIMER); - reg_al=mem_readb(BIOS_24_HOURS_FLAG); - mem_writeb(BIOS_24_HOURS_FLAG,0); // reset the "flag" - reg_cx=(uint16_t)(ticks >> 16u); - reg_dx=(uint16_t)(ticks & 0xffff); - break; - } - case 0x01: /* Set System time */ - mem_writed(BIOS_TIMER,((unsigned int)reg_cx<<16u)|reg_dx); - break; - case 0x02: /* GET REAL-TIME CLOCK TIME (AT,XT286,PS) */ - InitRtc(); // make sure BCD and no am/pm - if (RtcUpdateDone()) { // make sure it's safe to read - reg_ch = ReadCmosByte(0x04); // hours - reg_cl = ReadCmosByte(0x02); // minutes - reg_dh = ReadCmosByte(0x00); // seconds - reg_dl = ReadCmosByte(0x0b) & 0x01; // daylight saving time - /* 2023/10/06 - Let interrupts and CPU cycles catch up and the RTC clock a chance to tick. This is needed for - * "Pizza Tycoon" which appears to start by running in a loop reading time from the BIOS and writing - * time to INT 21h in a loop until the second value changes. */ - for (unsigned int c=0;c < 4;c++) CALLBACK_Idle(); - } - CALLBACK_SCF(false); - break; - case 0x03: // set RTC time - InitRtc(); // make sure BCD and no am/pm - if (RtcUpdateDone()) { // make sure it's safe to read - WriteCmosByte(0x0b, ReadCmosByte(0x0b) | 0x80u); // prohibit updates - WriteCmosByte(0x04, reg_ch); // hours - WriteCmosByte(0x02, reg_cl); // minutes - WriteCmosByte(0x00, reg_dh); // seconds - WriteCmosByte(0x0b, (ReadCmosByte(0x0b) & 0x7eu) | (reg_dh & 0x01u)); // dst + implicitly allow updates - /* 2023/10/06 - Let interrupts and CPU cycles catch up and the RTC clock a chance to tick. This is needed for - * "Pizza Tycoon" which appears to start by running in a loop reading time from the BIOS and writing - * time to INT 21h in a loop until the second value changes. */ - for (unsigned int c=0;c < 4;c++) CALLBACK_Idle(); - } - break; - case 0x04: /* GET REAL-TIME ClOCK DATE (AT,XT286,PS) */ - InitRtc(); // make sure BCD and no am/pm - if (RtcUpdateDone()) { // make sure it's safe to read - reg_ch = ReadCmosByte(0x32); // century - reg_cl = ReadCmosByte(0x09); // year - reg_dh = ReadCmosByte(0x08); // month - reg_dl = ReadCmosByte(0x07); // day - /* 2023/10/06 - Let interrupts and CPU cycles catch up and the RTC clock a chance to tick. This is needed for - * "Pizza Tycoon" which appears to start by running in a loop reading time from the BIOS and writing - * time to INT 21h in a loop until the second value changes. */ - for (unsigned int c=0;c < 4;c++) CALLBACK_Idle(); - } - CALLBACK_SCF(false); - break; - case 0x05: // set RTC date - InitRtc(); // make sure BCD and no am/pm - if (RtcUpdateDone()) { // make sure it's safe to read - WriteCmosByte(0x0b, ReadCmosByte(0x0b) | 0x80); // prohibit updates - WriteCmosByte(0x32, reg_ch); // century - WriteCmosByte(0x09, reg_cl); // year - WriteCmosByte(0x08, reg_dh); // month - WriteCmosByte(0x07, reg_dl); // day - WriteCmosByte(0x0b, (ReadCmosByte(0x0b) & 0x7f)); // allow updates - /* 2023/10/06 - Let interrupts and CPU cycles catch up and the RTC clock a chance to tick. This is needed for - * "Pizza Tycoon" which appears to start by running in a loop reading time from the BIOS and writing - * time to INT 21h in a loop until the second value changes. */ - for (unsigned int c=0;c < 4;c++) CALLBACK_Idle(); - } - break; - case 0x80: /* Pcjr Setup Sound Multiplexer */ - LOG(LOG_BIOS,LOG_ERROR)("INT1A:80:Setup tandy sound multiplexer to %d",reg_al); - break; - case 0x81: /* Tandy sound system check */ - case 0x82: /* Tandy sound system start recording */ - case 0x83: /* Tandy sound system start playback */ - case 0x84: /* Tandy sound system stop playing */ - case 0x85: /* Tandy sound system reset */ - TandyDAC_Handler(reg_ah); - break; - case 0xb1: /* PCI Bios Calls */ - if (pcibus_enable) { - LOG(LOG_BIOS,LOG_WARN)("INT1A:PCI bios call %2X",reg_al); - switch (reg_al) { - case 0x01: // installation check - if (PCI_IsInitialized()) { - reg_ah=0x00; - reg_al=0x01; // cfg space mechanism 1 supported - reg_bx=0x0210; // ver 2.10 - reg_cx=0x0000; // only one PCI bus - reg_edx=0x20494350; - reg_edi=PCI_GetPModeInterface(); - CALLBACK_SCF(false); - } else { - CALLBACK_SCF(true); - } - break; - case 0x02: { // find device - Bitu devnr=0u; - Bitu count=0x100u; - uint32_t devicetag=((unsigned int)reg_cx<<16u)|reg_dx; - Bits found=-1; - for (Bitu i=0; i<=count; i++) { - IO_WriteD(0xcf8,0x80000000u|(i<<8u)); // query unique device/subdevice entries - if (IO_ReadD(0xcfc)==devicetag) { - if (devnr==reg_si) { - found=(Bits)i; - break; - } else { - // device found, but not the SIth device - devnr++; - } - } - } - if (found>=0) { - reg_ah=0x00; - reg_bh=0x00; // bus 0 - reg_bl=(uint8_t)(found&0xff); - CALLBACK_SCF(false); - } else { - reg_ah=0x86; // device not found - CALLBACK_SCF(true); - } - } - break; - case 0x03: { // find device by class code - Bitu devnr=0; - Bitu count=0x100u; - uint32_t classtag=reg_ecx&0xffffffu; - Bits found=-1; - for (Bitu i=0; i<=count; i++) { - IO_WriteD(0xcf8,0x80000000u|(i<<8u)); // query unique device/subdevice entries - if (IO_ReadD(0xcfc)!=0xffffffffu) { - IO_WriteD(0xcf8,0x80000000u|(i<<8u)|0x08u); - if ((IO_ReadD(0xcfc)>>8u)==classtag) { - if (devnr==reg_si) { - found=(Bits)i; - break; - } else { - // device found, but not the SIth device - devnr++; - } - } - } - } - if (found>=0) { - reg_ah=0x00; - reg_bh=0x00; // bus 0 - reg_bl=(uint8_t)found & 0xffu; - CALLBACK_SCF(false); - } else { - reg_ah=0x86; // device not found - CALLBACK_SCF(true); - } - } - break; - case 0x08: // read configuration byte - IO_WriteD(0xcf8,0x80000000u|((unsigned int)reg_bx<<8u)|(reg_di&0xfcu)); - reg_cl=IO_ReadB(0xcfc+(reg_di&3u)); - CALLBACK_SCF(false); - reg_ah=0x00; - break; - case 0x09: // read configuration word - IO_WriteD(0xcf8,0x80000000u|((unsigned int)reg_bx<<8u)|(reg_di&0xfcu)); - reg_cx=IO_ReadW(0xcfc+(reg_di&2u)); - CALLBACK_SCF(false); - reg_ah=0x00; - break; - case 0x0a: // read configuration dword - IO_WriteD(0xcf8,0x80000000u|((unsigned int)reg_bx<<8u)|(reg_di&0xfcu)); - reg_ecx=IO_ReadD(0xcfc+(reg_di&3u)); - CALLBACK_SCF(false); - reg_ah=0x00; - break; - case 0x0b: // write configuration byte - IO_WriteD(0xcf8,0x80000000u|((unsigned int)reg_bx<<8u)|(reg_di&0xfcu)); - IO_WriteB(0xcfc+(reg_di&3u),reg_cl); - CALLBACK_SCF(false); - reg_ah=0x00; - break; - case 0x0c: // write configuration word - IO_WriteD(0xcf8,0x80000000u|((unsigned int)reg_bx<<8u)|(reg_di&0xfcu)); - IO_WriteW(0xcfc+(reg_di&2u),reg_cx); - CALLBACK_SCF(false); - reg_ah=0x00; - break; - case 0x0d: // write configuration dword - IO_WriteD(0xcf8,0x80000000u|((unsigned int)reg_bx<<8u)|(reg_di&0xfcu)); - IO_WriteD(0xcfc+((unsigned int)reg_di&3u),reg_ecx); - CALLBACK_SCF(false); - reg_ah=0x00; - break; - default: - LOG(LOG_BIOS,LOG_ERROR)("INT1A:PCI BIOS: unknown function %x (%x %x %x)", - reg_ax,reg_bx,reg_cx,reg_dx); - CALLBACK_SCF(true); - break; - } - } - else { - CALLBACK_SCF(true); - } - break; - default: - LOG(LOG_BIOS,LOG_ERROR)("INT1A:Undefined call %2X",reg_ah); - } - return CBRET_NONE; -} - -bool INT16_get_key(uint16_t &code); -bool INT16_peek_key(uint16_t &code); - -extern uint8_t GDC_display_plane; -extern uint8_t GDC_display_plane_pending; -extern bool GDC_vsync_interrupt; - -unsigned char prev_pc98_mode42 = 0; - -unsigned char pc98_function_row_mode = 0; - -const char *pc98_func_key_default[10] = { - " C1 ", - " CU ", - " CA ", - " S1 ", - " SU ", - - "VOID ", - "NWL ", - "INS ", - "REP ", - " ^Z " -}; - -const char pc98_func_key_escapes_default[10][3] = { - {0x1B,0x53,0}, // F1 - {0x1B,0x54,0}, // F2 - {0x1B,0x55,0}, // F3 - {0x1B,0x56,0}, // F4 - {0x1B,0x57,0}, // F5 - {0x1B,0x45,0}, // F6 - {0x1B,0x4A,0}, // F7 - {0x1B,0x50,0}, // F8 - {0x1B,0x51,0}, // F9 - {0x1B,0x5A,0} // F10 -}; - -const char pc98_editor_key_escapes_default[11][3] = { - {0}, // ROLL UP 0x36 - {0}, // ROLL DOWN 0x37 - {0x1B,0x50,0}, // INS 0x38 - {0x1B,0x44,0}, // DEL 0x39 - {0x0B,0}, // UP ARROW 0x3A - {0x08,0}, // LEFT ARROW 0x3B - {0x0C,0}, // RIGHT ARROW 0x3C - {0x0A,0}, // DOWN ARROW 0x3D - {0}, // HOME/CLR 0x3E - {0}, // HELP 0x3F - {0} // KEYPAD - 0x40 -}; - -// shortcuts offered by SHIFT F1-F10. You can bring this onscreen using CTRL+F7. This row shows '*' in col 2. -// The text displayed onscreen is obviously just the first 6 chars of the shortcut text. -const char *pc98_shcut_key_defaults[10] = { - "dir a:\x0D", - "dir b:\x0D", - "copy ", - "del ", - "ren ", - - "chkdsk a:\x0D", - "chkdsk b:\x0D", - "type ", - "date\x0D", - "time\x0D" -}; - -#pragma pack(push,1) -struct pc98_func_key_shortcut_def { - unsigned char length; /* +0x00 length of text */ - unsigned char shortcut[0x0F]; /* +0x01 Shortcut text to insert into CON device */ - - std::string getShortcutText(void) const { - std::string ret; - unsigned int i; - - /* Whether a shortcut or escape (0xFE or not) the first 6 chars are displayed always */ - /* TODO: Strings for display are expected to display as Shift-JIS, convert to UTF-8 for display on host */ - for (i=0;i < 0x0F;i++) { - if (shortcut[i] == 0u) - break; - else if (shortcut[i] == 0x1B) { - ret += ""; - } - else if (shortcut[i] > 0x7Fu || shortcut[i] < 32u) /* 0xFE is invisible on real hardware */ - ret += ' '; - else - ret += (char)shortcut[i]; - } - - return ret; - } - - std::string getDisplayText(void) const { - unsigned int i; - char tmp[8]; - - /* Whether a shortcut or escape (0xFE or not) the first 6 chars are displayed always */ - /* TODO: Strings for display are expected to display as Shift-JIS, convert to UTF-8 for display on host */ - for (i=0;i < 6;i++) { - if (shortcut[i] == 0u) - break; - else if (shortcut[i] > 0x7Fu || shortcut[i] < 32u) /* 0xFE is invisible on real hardware */ - tmp[i] = ' '; - else - tmp[i] = (char)shortcut[i]; - } - tmp[i] = 0; - - return tmp; - } - - std::string debugToString(void) const { - std::string ret; - char tmp[512]; - - if (length == 0) - return "(none)"; - - if (shortcut[0] == 0xFE) { - sprintf(tmp,"disp=\"%s\" ",getDisplayText().c_str()); - ret += tmp; - - ret += "dispraw={ "; - for (unsigned int i=0;i < 6;i++) { - sprintf(tmp,"%02x ",shortcut[i]); - ret += tmp; - } - ret += "} "; - - ret += "esc={ "; - for (unsigned int i=6;i < length;i++) { - sprintf(tmp,"%02x ",shortcut[i]); - ret += tmp; - } - ret += "}"; - } - else { - sprintf(tmp,"text=\"%s\" ",getShortcutText().c_str()); - ret += tmp; - - ret += "esc={ "; - for (unsigned int i=0;i < length;i++) { - sprintf(tmp,"%02x ",shortcut[i]); - ret += tmp; - } - ret += "}"; - } - - return ret; - } - - // set shortcut. - // usually a direct string to insert. - void set_shortcut(const char *str) { - unsigned int i=0; - char c; - - while (i < 0x0F && (c = *str++) != 0) shortcut[i++] = (unsigned char)c; - length = i; - - while (i < 0x0F) shortcut[i++] = 0; - } - - // set text and escape code. text does NOT include the leading 0xFE char. - void set_text_and_escape(const char *text,const char *escape) { - unsigned int i=1; - char c; - - // this is based on observed MS-DOS behavior on PC-98. - // the length byte covers both the display text and escape code (sum of the two). - // the first byte of the shortcut is 0xFE which apparently means the next 5 chars - // are text to display. The 0xFE is copied as-is to the display when rendered. - // 0xFE in the CG ROM is a blank space. - shortcut[0] = 0xFE; - while (i < 6 && (c = *text++) != 0) shortcut[i++] = (unsigned char)c; - while (i < 6) shortcut[i++] = ' '; - - while (i < 0x0F && (c = *escape++) != 0) shortcut[i++] = (unsigned char)c; - length = i; - while (i < 0x0F) shortcut[i++] = 0; - } -}; /* =0x10 */ -#pragma pack(pop) - -struct pc98_func_key_shortcut_def pc98_func_key[10]; /* F1-F10 */ -struct pc98_func_key_shortcut_def pc98_vfunc_key[5]; /* VF1-VF5 */ -struct pc98_func_key_shortcut_def pc98_func_key_shortcut[10]; /* Shift+F1 - Shift-F10 */ -struct pc98_func_key_shortcut_def pc98_vfunc_key_shortcut[5]; /* Shift+VF1 - Shift-VF5 */ -struct pc98_func_key_shortcut_def pc98_func_key_ctrl[10]; /* Control+F1 - Control-F10 */ -struct pc98_func_key_shortcut_def pc98_vfunc_key_ctrl[5]; /* Control+VF1 - Control-VF5 */ -struct pc98_func_key_shortcut_def pc98_editor_key_escapes[11]; /* Editor keys */ - -// FIXME: This is STUPID. Cleanup is needed in order to properly use std::min without causing grief. -#ifdef _MSC_VER -# define MIN(a,b) ((a) < (b) ? (a) : (b)) -# define MAX(a,b) ((a) > (b) ? (a) : (b)) -#else -# define MIN(a,b) std::min(a,b) -# define MAX(a,b) std::max(a,b) -#endif - -void PC98_GetFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i,const struct pc98_func_key_shortcut_def *keylist) { - if (i >= 1 && i <= 10) { - const pc98_func_key_shortcut_def &def = keylist[i-1u]; - unsigned int j=0,o=0; - - /* if the shortcut starts with 0xFE then the next 5 chars are intended for display only - * and the shortcut starts after that. Else the entire string is stuffed into the CON - * device. */ - if (def.shortcut[0] == 0xFE) - j = 6; - - while (j < MIN(0x0Fu,(unsigned int)def.length)) - buf[o++] = def.shortcut[j++]; - - len = (size_t)o; - buf[o] = 0; - } - else { - len = 0; - buf[0] = 0; - } -} - -void PC98_GetEditorKeyEscape(size_t &len,unsigned char buf[16],const unsigned int scan) { - if (scan >= 0x36 && scan <= 0x40) { - const pc98_func_key_shortcut_def &def = pc98_editor_key_escapes[scan-0x36]; - unsigned int j=0,o=0; - - while (j < MIN(0x05u,(unsigned int)def.length)) - buf[o++] = def.shortcut[j++]; - - len = (size_t)o; - buf[o] = 0; - } - else { - len = 0; - buf[0] = 0; - } -} - -void PC98_GetVFKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i,const struct pc98_func_key_shortcut_def *keylist) { - if (i >= 1 && i <= 5) { - const pc98_func_key_shortcut_def &def = keylist[i-1]; - unsigned int j=0,o=0; - - /* if the shortcut starts with 0xFE then the next 5 chars are intended for display only - * and the shortcut starts after that. Else the entire string is stuffed into the CON - * device. */ - if (def.shortcut[0] == 0xFE) - j = 6; - - while (j < MIN(0x0Fu,(unsigned int)def.length)) - buf[o++] = def.shortcut[j++]; - - len = (size_t)o; - buf[o] = 0; - } - else { - len = 0; - buf[0] = 0; - } -} - -void PC98_GetFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i) { - PC98_GetFuncKeyEscape(len,buf,i,pc98_func_key); -} - -void PC98_GetShiftFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i) { - PC98_GetFuncKeyEscape(len,buf,i,pc98_func_key_shortcut); -} - -void PC98_GetCtrlFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i) { - PC98_GetFuncKeyEscape(len,buf,i,pc98_func_key_ctrl); -} - -void PC98_GetVFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i) { - PC98_GetVFKeyEscape(len,buf,i,pc98_vfunc_key); -} - -void PC98_GetShiftVFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i) { - PC98_GetVFKeyEscape(len,buf,i,pc98_vfunc_key_shortcut); -} - -void PC98_GetCtrlVFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i) { - PC98_GetVFKeyEscape(len,buf,i,pc98_vfunc_key_ctrl); -} - -void PC98_InitDefFuncRow(void) { - for (unsigned int i=0;i < 10;i++) { - pc98_func_key_shortcut_def &def = pc98_func_key[i]; - - def.set_text_and_escape(pc98_func_key_default[i],pc98_func_key_escapes_default[i]); - } - for (unsigned int i=0;i < 10;i++) { - pc98_func_key_shortcut_def &def = pc98_func_key_shortcut[i]; - - def.set_shortcut(pc98_shcut_key_defaults[i]); - } - for (unsigned int i=0;i < 11;i++) { - pc98_func_key_shortcut_def &def = pc98_editor_key_escapes[i]; - - def.set_shortcut(pc98_editor_key_escapes_default[i]); - } - for (unsigned int i=0;i < 10;i++) { - pc98_func_key_shortcut_def &def = pc98_func_key_ctrl[i]; - - def.set_shortcut(""); - } - /* MS-DOS by default does not assign the VFn keys anything */ - for (unsigned int i=0;i < 5;i++) { - pc98_func_key_shortcut_def &def = pc98_vfunc_key[i]; - - def.set_shortcut(""); - } - for (unsigned int i=0;i < 5;i++) { - pc98_func_key_shortcut_def &def = pc98_vfunc_key_shortcut[i]; - - def.set_shortcut(""); - } - for (unsigned int i=0;i < 5;i++) { - pc98_func_key_shortcut_def &def = pc98_vfunc_key_ctrl[i]; - - def.set_shortcut(""); - } -} - -#include "int10.h" - -void draw_pc98_function_row_elem(unsigned int o, unsigned int co, const struct pc98_func_key_shortcut_def& key) { - const unsigned char *str = key.shortcut; - unsigned int j = 0,i = 0; - - // NTS: Some shortcut strings start with 0xFE, which is rendered as an invisible space anyway. - - // NTS: Apparently the strings are Shift-JIS and expected to render to the function key row - // the same way the console normally does it. - ShiftJISDecoder sjis; - - while (j < 6u && str[i] != 0) { - if (sjis.take(str[i++])) { - if (sjis.doublewide) { - /* JIS conversion to WORD value appropriate for text RAM */ - if (sjis.b2 != 0) sjis.b1 -= 0x20; - - uint16_t w = (sjis.b2 << 8) + sjis.b1; - mem_writew(0xA0000+((o+co+j)*2u),w); - mem_writeb(0xA2000+((o+co+j)*2u),0xE5); // white reverse visible - j++; - mem_writew(0xA0000+((o+co+j)*2u),w); - mem_writeb(0xA2000+((o+co+j)*2u),0xE5); // white reverse visible - j++; - } - else { - mem_writew(0xA0000+((o+co+j)*2u),str[j]); - mem_writeb(0xA2000+((o+co+j)*2u),0xE5); // white reverse visible - j++; - } - } - } - - while (j < 6u) { - mem_writew(0xA0000+((o+co+j)*2u),(unsigned char)(' ')); - mem_writeb(0xA2000+((o+co+j)*2u),0xE5); // white reverse visible - j++; - } -} - -void draw_pc98_function_row(unsigned int o, const struct pc98_func_key_shortcut_def* keylist) { - mem_writew(0xA0000+((o+1)*2),real_readb(0x60,0x8B)); - mem_writeb(0xA2000+((o+1)*2),0xE1); - for (unsigned int i=0u;i < 5u;i++) - draw_pc98_function_row_elem(o,4u + (i * 7u),keylist[i]); - for (unsigned int i=5u;i < 10u;i++) - draw_pc98_function_row_elem(o,42u + ((i - 5u) * 7u),keylist[i]); -} - -unsigned int pc98_DOS_console_rows(void) { - uint8_t b = real_readb(0x60,0x113); - - return (b & 0x01) ? 25 : 20; -} - -void update_pc98_function_row(unsigned char setting,bool force_redraw) { - if (!force_redraw && pc98_function_row_mode == setting) return; - pc98_function_row_mode = setting; - - unsigned int total_rows = pc98_DOS_console_rows(); - unsigned char c = real_readb(0x60,0x11C); - unsigned char r = real_readb(0x60,0x110); - unsigned int o = 80 * (total_rows - 1); - - if (pc98_function_row_mode != 0) { - if (r > (total_rows - 2)) { - r = (total_rows - 2); - void INTDC_CL10h_AH04h(void); - INTDC_CL10h_AH04h(); - } - } - - /* update mode 2 indicator */ - real_writeb(0x60,0x8C,(pc98_function_row_mode == 2) ? '*' : ' '); - - real_writeb(0x60,0x112,total_rows - 1 - ((pc98_function_row_mode != 0) ? 1 : 0)); - - if (pc98_function_row_mode == 2) { - /* draw the function row. - * based on real hardware: - * - * The function key is 72 chars wide. 4 blank chars on each side of the screen. - * It is divided into two halves, 36 chars each. - * Within each half, aligned to its side, is 5 x 7 regions. - * 6 of the 7 are inverted. centered in the white block is the function key. */ - for (unsigned int i=0;i < 40;) { - mem_writew(0xA0000+((o+i)*2),0x0000); - mem_writeb(0xA2000+((o+i)*2),0xE1); - - mem_writew(0xA0000+((o+(79-i))*2),0x0000); - mem_writeb(0xA2000+((o+(79-i))*2),0xE1); - - if (i >= 3 && i < 38) - i += 7; - else - i++; - } - - mem_writew(0xA0000+((o+2)*2),real_readb(0x60,0x8C)); - mem_writeb(0xA2000+((o+2)*2),0xE1); - - draw_pc98_function_row(o,pc98_func_key_shortcut); - } - else if (pc98_function_row_mode == 1) { - /* draw the function row. - * based on real hardware: - * - * The function key is 72 chars wide. 4 blank chars on each side of the screen. - * It is divided into two halves, 36 chars each. - * Within each half, aligned to its side, is 5 x 7 regions. - * 6 of the 7 are inverted. centered in the white block is the function key. */ - for (unsigned int i=0;i < 40;) { - mem_writew(0xA0000+((o+i)*2),0x0000); - mem_writeb(0xA2000+((o+i)*2),0xE1); - - mem_writew(0xA0000+((o+(79-i))*2),0x0000); - mem_writeb(0xA2000+((o+(79-i))*2),0xE1); - - if (i >= 3 && i < 38) - i += 7; - else - i++; - } - - draw_pc98_function_row(o,pc98_func_key); - } - else { - /* erase the function row */ - for (unsigned int i=0;i < 80;i++) { - mem_writew(0xA0000+((o+i)*2),0x0000); - mem_writeb(0xA2000+((o+i)*2),0xE1); - } - } - - real_writeb(0x60,0x11C,c); - real_writeb(0x60,0x110,r); - - real_writeb(0x60,0x111,(pc98_function_row_mode != 0) ? 0x01 : 0x00);/* function key row display status */ - - void vga_pc98_direct_cursor_pos(uint16_t address); - vga_pc98_direct_cursor_pos((r*80)+c); -} - -void pc98_function_row_user_toggle(void) { - if (pc98_function_row_mode >= 2) - update_pc98_function_row(0,true); - else - update_pc98_function_row(pc98_function_row_mode+1,true); -} - -void pc98_set_char_mode(bool mode) { - real_writeb(0x60,0x8A,mode); - real_writeb(0x60,0x8B,(mode == true) ? ' ' : 'g'); - update_pc98_function_row(pc98_function_row_mode,true); -} - -void pc98_toggle_char_mode(void) { - pc98_set_char_mode(!real_readb(0x60,0x8A)); -} - -void pc98_set_digpal_entry(unsigned char ent,unsigned char grb); -void PC98_show_cursor(bool show); - -extern bool gdc_5mhz_mode; -extern bool enable_pc98_egc; -extern bool enable_pc98_grcg; -extern bool enable_pc98_16color; -extern bool enable_pc98_256color; -extern bool enable_pc98_188usermod; -extern bool pc98_31khz_mode; -extern bool pc98_attr4_graphic; - -extern unsigned char pc98_text_first_row_scanline_start; /* port 70h */ -extern unsigned char pc98_text_first_row_scanline_end; /* port 72h */ -extern unsigned char pc98_text_row_scanline_blank_at; /* port 74h */ -extern unsigned char pc98_text_row_scroll_lines; /* port 76h */ -extern unsigned char pc98_text_row_scroll_count_start; /* port 78h */ -extern unsigned char pc98_text_row_scroll_num_lines; /* port 7Ah */ - -void pc98_update_text_layer_lineheight_from_bda(void) { -// unsigned char c = mem_readb(0x53C); - unsigned char lineheight = mem_readb(0x53B) + 1; - - pc98_gdc[GDC_MASTER].force_fifo_complete(); - pc98_gdc[GDC_MASTER].row_height = lineheight; - - if (lineheight > 20) { // usually 24 - pc98_text_first_row_scanline_start = 0x1C; - pc98_text_first_row_scanline_end = lineheight - 5; - pc98_text_row_scanline_blank_at = 16; - } - else if (lineheight > 16) { // usually 20 - pc98_text_first_row_scanline_start = 0x1E; - pc98_text_first_row_scanline_end = lineheight - 3; - pc98_text_row_scanline_blank_at = 16; - } - else { - pc98_text_first_row_scanline_start = 0; - pc98_text_first_row_scanline_end = lineheight - 1; - pc98_text_row_scanline_blank_at = lineheight; - } - - pc98_text_row_scroll_lines = 0; - pc98_text_row_scroll_count_start = 0; - pc98_text_row_scroll_num_lines = 0; - - vga.crtc.cursor_start = 0; - vga.draw.cursor.sline = 0; - - vga.crtc.cursor_end = lineheight - 1; - vga.draw.cursor.eline = lineheight - 1; -} - -void pc98_update_text_lineheight_from_bda(void) { - unsigned char b597 = mem_readb(0x597); - unsigned char c = mem_readb(0x53C); - unsigned char lineheight; - - if ((b597 & 0x3) == 0x3) {//WARNING: This could be wrong - if (c & 0x10)/*30-line mode (30x16 = 640x480)*/ - lineheight = 16; - else if (c & 0x01)/*20-line mode (20x24 = 640x480)*/ - lineheight = 24; - else/*25-line mode (25x19 = 640x480)*/ - lineheight = 19; - } - else { - if (c & 0x10)/*30-line mode (30x13 = 640x400)*/ - lineheight = 13;//?? - else if (c & 0x01)/*20-line mode (20x20 = 640x400)*/ - lineheight = 20; - else/*25-line mode (25x16 = 640x400)*/ - lineheight = 16; - } - - mem_writeb(0x53B,lineheight - 1); -} - -static const uint8_t pc98_katakana6x8_font[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x50,0x20,0x00, - 0x70,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x1c,0x00, - 0x00,0x00,0x00,0x00,0x40,0x20,0x10,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, - 0x7c,0x04,0x7c,0x04,0x04,0x08,0x30,0x00,0x00,0x00,0x7c,0x14,0x18,0x10,0x20,0x00, - 0x00,0x00,0x04,0x08,0x18,0x28,0x08,0x00,0x00,0x00,0x10,0x7c,0x44,0x04,0x18,0x00, - 0x00,0x00,0x00,0x38,0x10,0x10,0x7c,0x00,0x00,0x00,0x08,0x7c,0x18,0x28,0x48,0x00, - 0x00,0x00,0x20,0x7c,0x24,0x28,0x20,0x00,0x00,0x00,0x00,0x38,0x08,0x08,0x7c,0x00, - 0x00,0x00,0x3c,0x04,0x3c,0x04,0x3c,0x00,0x00,0x00,0x00,0x54,0x54,0x04,0x18,0x00, - 0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x7c,0x04,0x14,0x18,0x10,0x20,0x40,0x00, - 0x04,0x08,0x10,0x30,0x50,0x10,0x10,0x00,0x10,0x7c,0x44,0x44,0x04,0x08,0x10,0x00, - 0x00,0x7c,0x10,0x10,0x10,0x10,0x7c,0x00,0x08,0x7c,0x18,0x28,0x48,0x08,0x08,0x00, - 0x20,0x7c,0x24,0x24,0x24,0x44,0x08,0x00,0x10,0x7c,0x10,0x7c,0x10,0x10,0x10,0x00, - 0x3c,0x24,0x44,0x04,0x04,0x08,0x30,0x00,0x20,0x3c,0x28,0x48,0x08,0x08,0x30,0x00, - 0x00,0x7c,0x04,0x04,0x04,0x04,0x7c,0x00,0x28,0x28,0x7c,0x28,0x08,0x10,0x20,0x00, - 0x60,0x00,0x64,0x04,0x04,0x08,0x70,0x00,0x7c,0x04,0x04,0x08,0x10,0x28,0x44,0x00, - 0x20,0x7c,0x24,0x28,0x20,0x20,0x18,0x00,0x44,0x44,0x24,0x04,0x04,0x08,0x30,0x00, - 0x3c,0x24,0x34,0x4c,0x04,0x08,0x30,0x00,0x08,0x70,0x10,0x7c,0x10,0x10,0x20,0x00, - 0x54,0x54,0x54,0x04,0x08,0x08,0x30,0x00,0x38,0x00,0x7c,0x10,0x10,0x10,0x20,0x00, - 0x20,0x20,0x20,0x38,0x24,0x20,0x20,0x00,0x10,0x10,0x7c,0x10,0x10,0x20,0x40,0x00, - 0x00,0x38,0x00,0x00,0x00,0x00,0x7c,0x00,0x7c,0x04,0x04,0x28,0x10,0x28,0x40,0x00, - 0x10,0x7c,0x08,0x10,0x38,0x54,0x10,0x00,0x04,0x04,0x04,0x04,0x08,0x10,0x20,0x00, - 0x10,0x08,0x04,0x44,0x44,0x44,0x44,0x00,0x40,0x4c,0x70,0x40,0x40,0x40,0x3c,0x00, - 0x7c,0x04,0x04,0x04,0x04,0x08,0x30,0x00,0x00,0x20,0x50,0x08,0x04,0x04,0x00,0x00, - 0x10,0x7c,0x10,0x10,0x54,0x54,0x10,0x00,0x00,0x7c,0x04,0x04,0x28,0x10,0x08,0x00, - 0x00,0x38,0x00,0x38,0x00,0x38,0x04,0x00,0x10,0x10,0x20,0x40,0x44,0x7c,0x04,0x00, - 0x04,0x04,0x28,0x10,0x28,0x40,0x00,0x00,0x7c,0x10,0x7c,0x10,0x10,0x10,0x0c,0x00, - 0x20,0x7c,0x24,0x24,0x28,0x20,0x20,0x00,0x00,0x38,0x08,0x08,0x08,0x08,0x7c,0x00, - 0x7c,0x04,0x04,0x7c,0x04,0x04,0x7c,0x00,0x38,0x00,0x7c,0x04,0x04,0x08,0x30,0x00, - 0x24,0x24,0x24,0x04,0x04,0x08,0x10,0x00,0x10,0x50,0x50,0x50,0x54,0x58,0x10,0x00, - 0x20,0x20,0x20,0x24,0x24,0x28,0x30,0x00,0x7c,0x44,0x44,0x44,0x44,0x44,0x7c,0x00, - 0x7c,0x44,0x44,0x04,0x04,0x08,0x10,0x00,0x60,0x00,0x04,0x04,0x08,0x10,0x60,0x00, - 0x20,0x10,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x20,0x50,0x20,0x00,0x00,0x00,0x00 -}; - -unsigned char byte_reverse(unsigned char c); - -static void PC98_INT18_DrawShape(void) -{ - PhysPt ucw; - uint8_t type, dir; - uint16_t x1, y1; - uint16_t ead, dad; - uint16_t dc, d, d2, dm; - - ucw = SegPhys(ds) + reg_bx; - type = mem_readb(ucw + 0x28); - dir = mem_readb(ucw + 0x03); - x1 = mem_readw(ucw + 0x08); - y1 = mem_readw(ucw + 0x0a); - if((reg_ch & 0xc0) == 0x40) { - y1 += 200; - } - ead = (y1 * 40) + (x1 >> 4); - dad = x1 % 16; - // line pattern - pc98_gdc[GDC_SLAVE].set_textw(((uint16_t)byte_reverse(mem_readb(ucw + 0x20)) << 8) | byte_reverse(mem_readb(ucw + 0x21))); - if(type == 0x04) { - // arc - dc = mem_readw(ucw + 0x0c); - d = mem_readw(ucw + 0x1c) - 1; - d2 = d >> 1; - dm = mem_readw(ucw + 0x1a); - if((reg_ch & 0x30) == 0x30) { - uint8_t plane = mem_readb(ucw + 0x00); - uint32_t offset = 0x4000; - for(uint8_t bit = 1 ; bit <= 4 ; bit <<= 1) { - pc98_gdc[GDC_SLAVE].set_mode((plane & bit) ? 0x03 : 0x02); - pc98_gdc[GDC_SLAVE].set_vectw(0x20, dir, dc, d, d2, 0x3fff, dm); - pc98_gdc[GDC_SLAVE].set_csrw(offset + ead, dad); - pc98_gdc[GDC_SLAVE].exec(0x6c); - offset += 0x4000; - } - } else { - pc98_gdc[GDC_SLAVE].set_mode(mem_readb(ucw + 0x02)); - pc98_gdc[GDC_SLAVE].set_vectw(0x20, dir, dc, d, d2, 0x3fff, dm); - pc98_gdc[GDC_SLAVE].set_csrw(0x4000 + ((reg_ch & 0x30) << 10) + ead, dad); - pc98_gdc[GDC_SLAVE].exec(0x6c); - } - } else { - uint16_t x2, y2, temp; - x2 = mem_readw(ucw + 0x16); - y2 = mem_readw(ucw + 0x18); - if(type == 0x01) { - // line - if((reg_ch & 0x30) == 0x30) { - uint8_t plane = mem_readb(ucw + 0x00); - uint32_t offset = 0x4000; - for(uint8_t bit = 1 ; bit <= 4 ; bit <<= 1) { - pc98_gdc[GDC_SLAVE].set_mode((plane & bit) ? 0x03 : 0x02); - pc98_gdc[GDC_SLAVE].set_vectl(x1, y1, x2, y2); - pc98_gdc[GDC_SLAVE].set_csrw(offset + ead, dad); - pc98_gdc[GDC_SLAVE].exec(0x6c); - offset += 0x4000; - } - } else { - pc98_gdc[GDC_SLAVE].set_mode(mem_readb(ucw + 0x02)); - pc98_gdc[GDC_SLAVE].set_vectl(x1, y1, x2, y2); - pc98_gdc[GDC_SLAVE].set_csrw(0x4000 + ((reg_ch & 0x30) << 10) + ead, dad); - pc98_gdc[GDC_SLAVE].exec(0x6c); - } - } else if(type == 0x02) { - // box - uint16_t dx, dy; - if(x1 > x2) { - temp = x2; x2 = x1; x1 = temp; - } - if(y1 > y2) { - temp = y2; y2 = y1; y1 = temp; - } - dx = x2 - x1; - dy = y2 - y1; - switch(dir & 3) { - case 0: - d = dy; - d2 = dx; - break; - case 1: - d2 = dx + dy; - d2 >>= 1; - d = dx - dy; - d = (d >> 1) & 0x3fff; - break; - case 2: - d = dx; - d2 = dy; - break; - case 3: - d2 = dx + dy; - d2 >>= 1; - d = dy - dx; - d = (d >> 1) & 0x3fff; - break; - } - if((reg_ch & 0x30) == 0x30) { - uint8_t plane = mem_readb(ucw + 0x00); - uint32_t offset = 0x4000; - for(uint8_t bit = 1 ; bit <= 4 ; bit <<= 1) { - pc98_gdc[GDC_SLAVE].set_mode((plane & bit) ? 0x03 : 0x02); - pc98_gdc[GDC_SLAVE].set_vectw(0x40, dir, 3, d, d2, 0xffff, d); - pc98_gdc[GDC_SLAVE].set_csrw(offset + ead, dad); - pc98_gdc[GDC_SLAVE].exec(0x6c); - offset += 0x4000; - } - } else { - pc98_gdc[GDC_SLAVE].set_mode(mem_readb(ucw + 0x02)); - pc98_gdc[GDC_SLAVE].set_vectw(0x40, dir, 3, d, d2, 0xffff, d); - pc98_gdc[GDC_SLAVE].set_csrw(0x4000 + ((reg_ch & 0x30) << 10) + ead, dad); - pc98_gdc[GDC_SLAVE].exec(0x6c); - } - } - } -} - -static void PC98_INT18_DrawText(void) -{ - PhysPt ucw; - uint8_t dir; - uint8_t tile[8]; - uint16_t len; - uint16_t x1, y1; - uint16_t ead, dad; - uint16_t dc, d; - - ucw = SegPhys(ds) + reg_bx; - for(uint8_t i = 0 ; i < 8 ; i++) { - tile[i] = byte_reverse(mem_readb(ucw + 0x20 + i)); - } - pc98_gdc[GDC_SLAVE].set_textw(tile, 8); - len = mem_readw(ucw + 0x0c); - if(len > 0) { - d = len; - dc = (mem_readw(ucw + 0x1e) - 1) & 0x3fff; - } else { - d = 8; - dc = 7; - } - dir = mem_readb(ucw + 0x03); - x1 = mem_readw(ucw + 0x08); - y1 = mem_readw(ucw + 0x0a); - if((reg_ch & 0xc0) == 0x40) { - y1 += 200; - } - ead = (y1 * 40) + (x1 >> 4); - dad = x1 % 16; - if((reg_ch & 0x30) == 0x30) { - uint8_t plane = mem_readb(ucw + 0x00); - uint32_t offset = 0x4000; - for(uint8_t bit = 1 ; bit <= 4 ; bit <<= 1) { - pc98_gdc[GDC_SLAVE].set_mode((plane & bit) ? 0x03 : 0x02); - pc98_gdc[GDC_SLAVE].set_vectw(0x10, dir, dc, d, 0, 0, 0); - pc98_gdc[GDC_SLAVE].set_csrw(offset + ead, dad); - pc98_gdc[GDC_SLAVE].exec(0x68); - offset += 0x4000; - } - } else { - pc98_gdc[GDC_SLAVE].set_mode(mem_readb(ucw + 0x02)); - pc98_gdc[GDC_SLAVE].set_vectw(0x10, dir, dc, d, 0, 0, 0); - pc98_gdc[GDC_SLAVE].set_csrw(0x4000 + ((reg_ch & 0x30) << 10) + ead, dad); - pc98_gdc[GDC_SLAVE].exec(0x68); - } -} - -/* TODO: The text and graphics code that talks to the GDC will need to be converted - * to CPU I/O read and write calls. I think the reason Windows 3.1's 16-color - * driver is causing screen distortion when going fullscreen with COMMAND.COM, - * and the reason COMMAND.COM windowed doesn't show anything, has to do with - * the fact that Windows 3.1 expects this BIOS call to use I/O so it can trap - * and virtualize the GDC and display state. - * - * Obviously for the same reason VGA INT 10h emulation in IBM PC mode needs to - * do the same to prevent display and virtualization problems with the IBM PC - * version of Windows 3.1. - * - * See also: [https://github.com/joncampbell123/dosbox-x/issues/1066] */ -static Bitu INT18_PC98_Handler(void) { - uint16_t temp16; - -#if 0 - if (reg_ah >= 0x0A) { - LOG_MSG("PC-98 INT 18h unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - } -#endif - - /* NTS: Based on information gleaned from Neko Project II source code including comments which - * I've run through GNU iconv to convert from SHIFT-JIS to UTF-8 here in case Google Translate - * got anything wrong. */ - switch (reg_ah) { - case 0x00: /* Reading of key data (キー・データの読みだし) */ - /* FIXME: We use the IBM PC/AT keyboard buffer to fake this call. - * This will be replaced with PROPER emulation once the PC-98 keyboard handler has been - * updated to write the buffer the way PC-98 BIOSes do it. - * - * IBM PC/AT keyboard buffer at 40:1E-40:3D - * - * PC-98 keyboard buffer at 50:02-50:21 */ - /* This call blocks until keyboard input */ - if (INT16_get_key(temp16)) { - reg_ax = temp16; - } - else { - /* Keyboard checks. - * If the interrupt got masked, unmask it. - * If the keyboard has data waiting, make sure the interrupt signal is active in case the last interrupt handler - * handled the keyboard interrupt and never read the keyboard (Quarth). - * - * TODO: Is this what real PC-98 BIOSes do? */ - void check_keyboard_fire_IRQ1(void); - check_keyboard_fire_IRQ1(); - IO_WriteB(0x02,IO_ReadB(0x02) & (~(1u << /*IRQ*/1u))); // unmask IRQ1 - - reg_ip += 1; /* step over IRET, to NOPs which then JMP back to callback */ - } - break; - case 0x01: /* Sense of key buffer state (キー・バッファ状態のセンス) */ - /* This call returns whether or not there is input waiting. - * The waiting data is read, but NOT discarded from the buffer. */ - if (INT16_peek_key(temp16)) { - reg_ax = temp16; - reg_bh = 1; - } - else { - /* Keyboard checks. - * If the interrupt got masked, unmask it. - * If the keyboard has data waiting, make sure the interrupt signal is active in case the last interrupt handler - * handled the keyboard interrupt and never read the keyboard (Quarth). - * - * TODO: Is this what real PC-98 BIOSes do? */ - void check_keyboard_fire_IRQ1(void); - check_keyboard_fire_IRQ1(); - IO_WriteB(0x02,IO_ReadB(0x02) & (~(1u << /*IRQ*/1u))); // unmask IRQ1 - - reg_bh = 0; - } - break; - case 0x02: /* Sense of shift key state (シフト・キー状態のセンス) */ - reg_al = mem_readb(0x53A); - break; - case 0x03: /* Initialization of keyboard interface (キーボード・インタフェイスの初期化) */ - /* TODO */ - IO_WriteB(0x43, 0x3a); - IO_WriteB(0x43, 0x32); - IO_WriteB(0x43, 0x16); - for (int i=0; i<0x20; i++) mem_writeb(0x502+i, 0); - for (int i=0; i<0x13; i++) mem_writeb(0x528+i, 0); - mem_writew(0x522,(unsigned int)(Real2Phys(BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION) - 0xFD800)); - mem_writew(0x524, 0x0502); - mem_writew(0x526, 0x0502); - mem_writew(0x5C6,(unsigned int)(Real2Phys(BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION) - 0xFD800)); - mem_writew(0x5C8,0xFD80); - break; - case 0x04: /* Sense of key input state (キー入力状態のセンス) */ - reg_ah = mem_readb(0x52A + (unsigned int)(reg_al & 0x0Fu)); - /* Hack for "Shangrlia" by Elf: The game's regulation of animation speed seems to depend on - * INT 18h AH=0x04 taking some amount of time. If we do not do this, animation will run way - * too fast and everyone will be talking/moving at a million miles a second. - * - * This is based on comparing animation speed vs the same game on real Pentium-class PC-98 - * hardware. - * - * Looking at the software loop involved during opening cutscenes, the game is constantly - * polling INT 18h AH=04h (keyboard state) and INT 33h AH=03h (mouse button/position state) - * while animating the characters on the screen. Without this delay, animation runs way too - * fast. - * - * This guess is also loosely based on a report by the Touhou Community Reliant Automatic Patcher - * that Touhou Project directly reads this byte but delays by 0.6ms to handle the fact that - * the bit in question may toggle while the key is held down due to the scan codes returned by - * the keyboard. - * - * This is a guess, but it seems to help animation speed match that of real hardware regardless - * of cycle count in DOSBox-X. */ - CPU_Cycles -= (cpu_cycles_count_t)(CPU_CycleMax * 0.006); - break; - case 0x05: /* Key input sense (キー入力センス) */ - /* This appears to return a key from the buffer (and remove from - * buffer) or return BH == 0 to signal no key was pending. */ - if (INT16_get_key(temp16)) { - reg_ax = temp16; - reg_bh = 1; - } - else { - /* Keyboard checks. - * If the interrupt got masked, unmask it. - * If the keyboard has data waiting, make sure the interrupt signal is active in case the last interrupt handler - * handled the keyboard interrupt and never read the keyboard (Quarth). - * - * TODO: Is this what real PC-98 BIOSes do? */ - void check_keyboard_fire_IRQ1(void); - check_keyboard_fire_IRQ1(); - IO_WriteB(0x02,IO_ReadB(0x02) & (~(1u << /*IRQ*/1u))); // unmask IRQ1 - - reg_bh = 0; - } - break; - case 0x0A: /* set CRT mode */ - /* bit off on - 0 25lines 20lines - 1 80cols 40cols - 2 v.lines simp.graphics - 3 K-CG access mode(not used in PC-98) */ - - //TODO: set 25/20 lines mode and 80/40 columns mode. - //Attribute bit (bit 2) - pc98_attr4_graphic = !!(reg_al & 0x04); - pc98_40col_text = !!(reg_al & 0x02); -#if defined(USE_TTF) - if (!(reg_al & 0xc) && pc98_gdc[GDC_MASTER].display_enable) ttf_switch_on(false); -#endif - - mem_writeb(0x53C,(mem_readb(0x53C) & 0xF0u) | (reg_al & 0x0Fu)); - - if (reg_al & 8) - LOG_MSG("INT 18H AH=0Ah warning: K-CG dot access mode not supported"); - - pc98_update_text_lineheight_from_bda(); - pc98_update_text_layer_lineheight_from_bda(); - - /* Apparently, this BIOS call also hides the cursor */ - PC98_show_cursor(0); - break; - case 0x0B: /* get CRT mode */ - /* bit off on - 0 25lines 20lines - 1 80cols 40cols - 2 v.lines simp.graphics - 3 K-CG access mode(not used in PC-98) - 7 std CRT hi-res CRT */ - /* NTS: I assume that real hardware doesn't offer a way to read back the state of these bits, - * so the BIOS's only option is to read the mode byte back from the data area. - * Neko Project II agrees. */ - reg_al = mem_readb(0x53C); - break; - // TODO: "Edge" is using INT 18h AH=06h, what is that? - // (Something to do with the buffer [https://ia801305.us.archive.org/8/items/PC9800TechnicalDataBookBIOS1992/PC-9800TechnicalDataBook_BIOS_1992_text.pdf]) - // Neko Project is also unaware of such a call. - case 0x0C: /* text layer enable */ - /* PROBLEM: Okay, so it's unclear when text layer is or is not allowed. - * I was unable to turn on the text layer with this BIOS call on real PC-9821 hardware, so I believed that it did not allow it. - * - * But PC-9821 CD-ROM game "Shamat, The Holy Circlet" expects to turn on the text layer in 640x400 256-color PEGC mode, - * because it displays graphics in the background while scrolling Japanese text up over it, and if sound hardware is available, - * plays a voice reading the text synchronized to it. - * - * Perhaps in my case it was 640x480 256-color mode, not 640x400 256-color mode, but then, 640x480 also enables a text mode with - * either more rows or a taller character cell which is apparently recognized by the MS-DOS console driver. - * - * So then, what exactly decides whether or not to allow this call to enable the text layer? */ - if (pc98_gdc_vramop & (1u << VOPBIT_VGA) && 0/*DISABLED*/) { - /* NTS: According to tests on real PC-9821 hardware, you can't turn on the text layer in 256-color mode, at least through the BIOS. */ - /* FIXME: Is this a restriction imposed by the BIOS, or the hardware itself? */ - LOG_MSG("INT 18h: Attempt to turn on text layer in 256-color mode"); - } - else { - pc98_gdc[GDC_MASTER].force_fifo_complete(); - pc98_gdc[GDC_MASTER].display_enable = true; -#if defined(USE_TTF) - ttf_switch_on(false); -#endif - } - break; - case 0x0D: /* text layer disable */ -#if defined(USE_TTF) - ttf_switch_off(false); -#endif - pc98_gdc[GDC_MASTER].force_fifo_complete(); - pc98_gdc[GDC_MASTER].display_enable = false; - break; - case 0x0E: /* set text display area (DX=byte offset) */ - pc98_gdc[GDC_MASTER].force_fifo_complete(); - pc98_gdc[GDC_MASTER].param_ram[0] = (reg_dx >> 1) & 0xFF; - pc98_gdc[GDC_MASTER].param_ram[1] = (reg_dx >> 9) & 0xFF; - pc98_gdc[GDC_MASTER].param_ram[2] = (400 << 4) & 0xFF; - pc98_gdc[GDC_MASTER].param_ram[3] = (400 << 4) >> 8; - break; - case 0x11: /* show cursor */ - PC98_show_cursor(true); - break; - case 0x12: /* hide cursor */ - PC98_show_cursor(false); - break; - case 0x13: /* set cursor position (DX=byte position) */ - void vga_pc98_direct_cursor_pos(uint16_t address); - - pc98_gdc[GDC_MASTER].force_fifo_complete(); - vga_pc98_direct_cursor_pos(reg_dx >> 1); - break; - case 0x14: /* read FONT RAM */ - { - unsigned int i,o,r; - - /* DX = code (must be 0x76xx or 0x7700) - * BX:CX = 34-byte region to write to */ - if (reg_dh == 0x80u) { /* 8x16 ascii */ - i = ((unsigned int)reg_bx << 4u) + reg_cx + 2u; - mem_writew(i-2u,0x0102u); - for (r=0;r < 16u;r++) { - o = (reg_dl*16u)+r; - - assert((o+2u) <= sizeof(vga.draw.font)); - - mem_writeb(i+r,vga.draw.font[o]); - } - } - else if ((reg_dh & 0xFC) == 0x28) { /* 8x16 kanji */ - i = ((unsigned int)reg_bx << 4u) + reg_cx + 2u; - mem_writew(i-2u,0x0102u); - for (r=0;r < 16u;r++) { - o = (((((reg_dl & 0x7Fu)*128u)+((reg_dh - 0x20u) & 0x7Fu))*16u)+r)*2u; - - assert((o+2u) <= sizeof(vga.draw.font)); - - mem_writeb(i+r+0u,vga.draw.font[o+0u]); - } - } - else if (reg_dh != 0) { /* 16x16 kanji */ - i = ((unsigned int)reg_bx << 4u) + reg_cx + 2u; - mem_writew(i-2u,0x0202u); - for (r=0;r < 16u;r++) { - o = (((((reg_dl & 0x7Fu)*128u)+((reg_dh - 0x20u) & 0x7Fu))*16u)+r)*2u; - - assert((o+2u) <= sizeof(vga.draw.font)); - - mem_writeb(i+(r*2u)+0u,vga.draw.font[o+0u]); - mem_writeb(i+(r*2u)+1u,vga.draw.font[o+1u]); - } - } - else if(reg_dl < 0x80) { /* 6x8 ascii .. Substitute 8x8 */ - i = ((unsigned int)reg_bx << 4u) + reg_cx + 2u; - mem_writew(i-2u,0x0101u); - o = reg_dl * 8; - for (r=0;r < 8u;r++) { - mem_writeb(i+r, int10_font_08[o + r]); - } - } - else if(reg_dl >= 0xa0 && reg_dl <= 0xdf) { /* 6x8 kana */ - i = ((unsigned int)reg_bx << 4u) + reg_cx + 2u; - mem_writew(i - 2u, 0x0101u); - o = (reg_dl - 0xa0) * 8; - for(r = 0; r < 8u; r++) { - mem_writeb(i + r, pc98_katakana6x8_font[o + r]); - } - } - else { - LOG_MSG("PC-98 INT 18h AH=14h font RAM read ignored, code 0x%04x not supported",reg_dx); - } - } - break; - case 0x16: /* fill screen with chr + attr */ - { - /* DL = character - * DH = attribute */ - unsigned int i; - - for (i=0;i < 0x2000;i += 2) { - vga.mem.linear[i+0] = reg_dl; - vga.mem.linear[i+1] = 0x00; - } - for ( ;i < 0x3FE0;i += 2) { - vga.mem.linear[i+0] = reg_dh; - vga.mem.linear[i+1] = 0x00; - } - } - break; - case 0x17: /* BELL ON */ - IO_WriteB(0x37,0x06); - break; - case 0x18: /* BELL OFF */ - IO_WriteB(0x37,0x07); - break; - case 0x1A: /* load FONT RAM */ - { - /* DX = code (must be 0x76xx or 0x7700) - * BX:CX = 34-byte region to read from */ - if ((reg_dh & 0x7Eu) == 0x76u) { - unsigned int i = ((unsigned int)reg_bx << 4u) + reg_cx + 2u; - for (unsigned int r=0;r < 16u;r++) { - unsigned int o = (((((reg_dl & 0x7Fu)*128u)+((reg_dh - 0x20u) & 0x7Fu))*16u)+r)*2u; - - assert((o+2u) <= sizeof(vga.draw.font)); - - vga.draw.font[o+0u] = mem_readb(i+(r*2u)+0u); - vga.draw.font[o+1u] = mem_readb(i+(r*2u)+1u); - } - } - else { - LOG_MSG("PC-98 INT 18h AH=1Ah font RAM load ignored, code 0x%04x out of range",reg_dx); - } - } - break; - case 0x30: /* Set display mode */ - /* FIXME: There is still a lot that is inaccurate about this call */ - if (enable_pc98_egc) { - unsigned char b597 = mem_readb(0x597); - unsigned char tstat = mem_readb(0x53C); - unsigned char b54C = mem_readb(0x54C); - unsigned char ret = 0x05; // according to NP2 - - // assume the same as AH=42h - while (!(IO_ReadB(0x60) & 0x20/*vertical retrace*/)) { - void CALLBACK_Idle(void); - CALLBACK_Idle(); - } - - LOG_MSG("PC-98 INT 18 AH=30h AL=%02Xh BH=%02Xh",reg_al,reg_bh); - - if ((reg_bh & 0x30) == 0x30) { // 640x480 - if ((reg_al & 0xC) == 0x0C) { // 31KHz sync - void PC98_Set31KHz_480line(void); - pc98_31khz_mode = true; - PC98_Set31KHz_480line(); - - void pc98_port6A_command_write(unsigned char b); - pc98_port6A_command_write(0x69); // disable 128KB wrap - - b54C = (b54C & (~0x20)) + ((reg_al & 0x04) ? 0x20 : 0x00); - -#if defined(USE_TTF) - ttf_switch_off(false); -#endif - pc98_gdc[GDC_MASTER].force_fifo_complete(); - pc98_gdc[GDC_SLAVE].force_fifo_complete(); - - // according to real hardware, this also hides the text layer for some reason - pc98_gdc[GDC_MASTER].display_enable = false; - - /* clear PRAM, graphics */ - for (unsigned int i=0;i < 16;i++) - pc98_gdc[GDC_SLAVE].param_ram[i] = 0x00; - - /* reset scroll area of graphics */ - pc98_gdc[GDC_SLAVE].param_ram[0] = 0; - pc98_gdc[GDC_SLAVE].param_ram[1] = 0; - - pc98_gdc[GDC_SLAVE].param_ram[2] = 0xF0; - pc98_gdc[GDC_SLAVE].param_ram[3] = 0x3F + (gdc_5mhz_according_to_bios()?0x40:0x00/*IM bit*/); - pc98_gdc[GDC_SLAVE].display_pitch = gdc_5mhz_according_to_bios() ? 80u : 40u; - - pc98_gdc[GDC_SLAVE].doublescan = false; - pc98_gdc[GDC_SLAVE].row_height = 1; - - b597 = (b597 & ~3u) + ((uint8_t)(reg_bh >> 4u) & 3u); - - pc98_gdc_vramop &= ~(1 << VOPBIT_ACCESS); - pc98_update_cpu_page_ptr(); - - GDC_display_plane = GDC_display_plane_pending = 0; - pc98_update_display_page_ptr(); - - /* based on real hardware behavior, this ALSO sets 256-color mode */ - void pc98_port6A_command_write(unsigned char b); - pc98_port6A_command_write(0x07); // enable EGC - pc98_port6A_command_write(0x01); // enable 16-color - pc98_port6A_command_write(0x21); // enable 256-color - } - else { - // according to Neko Project II, this case is ignored. - // this is confirmed on real hardware as well. - LOG_MSG("PC-98 INT 18h AH=30h attempt to set 640x480 mode with 24KHz hsync which is not supported by the platform"); - ret = 0; - } - } - else { // 640x400 or 640x200 - // TODO: A PC9821Lt2 laptop's BIOS refuses to allow 31khz except for 640x480 mode. - // Perhaps it's just a technical restriction of the LCD display. - // - // Check on other PC-98 hardware to see what the policy is for 31khz in all modes. - // That restriction would make no sense on another system I have that has a VGA - // port and a default setting of 70Hz / 31KHz 640x400. - if ((reg_al & 0x0C) < 0x08) { /* bits [3:2] == 0x */ - LOG_MSG("PC-98 INT 18h AH=30h attempt to set 15KHz hsync which is not yet supported"); - ret = 0; - } - else { - if ((reg_al ^ (((b54C & 0x20) ? 3 : 2) << 2)) & 0x0C) { /* change in bits [3:2] */ - LOG_MSG("PC-98 change in hsync frequency to %uHz",(reg_al & 0x04) ? 31 : 24); - - if (reg_al & 4) { - void PC98_Set31KHz(void); - pc98_31khz_mode = true; - PC98_Set31KHz(); - } - else { - void PC98_Set24KHz(void); - pc98_31khz_mode = false; - PC98_Set24KHz(); - } - - b54C = (b54C & (~0x20)) + ((reg_al & 0x04) ? 0x20 : 0x00); - } - } - - void pc98_port6A_command_write(unsigned char b); - pc98_port6A_command_write(0x68); // restore 128KB wrap - -#if defined(USE_TTF) - ttf_switch_off(false); -#endif - pc98_gdc[GDC_MASTER].force_fifo_complete(); - pc98_gdc[GDC_SLAVE].force_fifo_complete(); - - // 640x480 forces 256-color mode. - // the 400 line modes (this case) do not clear 256-color mode. - - // according to real hardware, this also hides the text layer for some reason - pc98_gdc[GDC_MASTER].display_enable = false; - - /* clear PRAM, graphics */ - for (unsigned int i=0;i < 16;i++) - pc98_gdc[GDC_SLAVE].param_ram[i] = 0x00; - - /* reset scroll area of graphics */ - if ((reg_bh & 0x30) == 0x10) { /* 640x200 upper half bits [5:4] == 1 */ - pc98_gdc[GDC_SLAVE].param_ram[0] = (200*40) & 0xFF; - pc98_gdc[GDC_SLAVE].param_ram[1] = (200*40) >> 8; - } - else { - pc98_gdc[GDC_SLAVE].param_ram[0] = 0; - pc98_gdc[GDC_SLAVE].param_ram[1] = 0; - } - - pc98_gdc[GDC_SLAVE].param_ram[2] = 0xF0; - pc98_gdc[GDC_SLAVE].param_ram[3] = 0x3F + (gdc_5mhz_according_to_bios()?0x40:0x00/*IM bit*/); - pc98_gdc[GDC_SLAVE].display_pitch = gdc_5mhz_according_to_bios() ? 80u : 40u; - - if ((reg_bh & 0x20) == 0x00) { /* 640x200 */ - pc98_gdc[GDC_SLAVE].doublescan = true; - pc98_gdc[GDC_SLAVE].row_height = pc98_gdc[GDC_SLAVE].doublescan ? 2 : 1; - } - else { - pc98_gdc[GDC_SLAVE].doublescan = false; - pc98_gdc[GDC_SLAVE].row_height = 1; - } - - b597 = (b597 & ~3u) + ((uint8_t)(reg_bh >> 4u) & 3u); - - pc98_gdc_vramop &= ~(1 << VOPBIT_ACCESS); - pc98_update_cpu_page_ptr(); - - GDC_display_plane = GDC_display_plane_pending = 0; - pc98_update_display_page_ptr(); - } - - tstat &= ~(0x10 | 0x01); - if (reg_bh & 2) - tstat |= 0x10; - else if ((reg_bh & 1) == 0) - tstat |= 0x01; - - mem_writeb(0x597,b597); - mem_writeb(0x53C,tstat); - mem_writeb(0x54C,b54C); - - pc98_update_text_lineheight_from_bda(); - pc98_update_text_layer_lineheight_from_bda(); - - // according to real hardware (PC-9821Lt2), AH=5 on success (same as NP2) - // or AH is unchanged on failure and AL=1 and BH=1 (NOT the same as NP2) - if (ret == 0x05) reg_ah = ret; - reg_al = (ret == 0x05) ? 0x00 : 0x01; // according to NP2 - reg_bh = (ret == 0x05) ? 0x00 : 0x01; // according to NP2 - } - break; - case 0x31: /* Return display mode and status */ - /* NTS: According to NP II this call shouldn't even work unless you first call AH=30h to set 640x480 mode. - * It seems that is wrong. Real hardware will still return the current mode regardless. */ - if (enable_pc98_egc) { /* FIXME: INT 18h AH=31/30h availability is tied to EGC enable */ - unsigned char b597 = mem_readb(0x597); - unsigned char tstat = mem_readb(0x53C); - unsigned char b54C = mem_readb(0x54C); - - /* 54Ch: - * bit[5:5] = Horizontal sync rate 1=31.47KHz 0=24.83KHz */ - - /* Return values: - * - * AL = - * bit [7:7] = ? - * bit [6:6] = ? - * bit [5:5] = ? - * bit [4:4] = ? - * bit [3:2] = horizontal sync - * 00 = 15.98KHz - * 01 = ? - * 10 = 24.83KHz - * 11 = 31.47KHz - * bit [1:1] = ? - * bit [0:0] = interlaced (1=yes 0=no) - * BH = - * bit [7:7] = ? - * bit [6:6] = ? - * bit [5:4] = graphics video mode - * 00 = 640x200 (upper half) - * 01 = 640x200 (lower half) - * 10 = 640x400 - * 11 = 640x480 - * bit [3:3] = ? - * bit [2:2] = ? - * bit [1:0] = number of text rows - * 00 = 20 rows - * 01 = 25 rows - * 10 = 30 rows - * 11 = ? - */ - reg_al = - (((b54C & 0x20) ? 3 : 2) << 2)/*hsync*/; - reg_bh = - ((b597 & 3) << 4)/*graphics video mode*/; - if (tstat & 0x10) - reg_bh |= 2;/*30 rows*/ - else if ((tstat & 0x01) == 0) - reg_bh |= 1;/*25 rows*/ - } - break; - /* From this point on the INT 18h call list appears to wander off from the keyboard into CRT/GDC/display management. */ - case 0x40: /* Start displaying the graphics screen (グラフィック画面の表示開始) */ - pc98_gdc[GDC_SLAVE].force_fifo_complete(); - pc98_gdc[GDC_SLAVE].display_enable = true; -#if defined(USE_TTF) - if (!pc98_gdc[GDC_MASTER].display_enable) ttf_switch_off(false); -#endif - - { - unsigned char b = mem_readb(0x54C/*MEMB_PRXCRT*/); - mem_writeb(0x54C/*MEMB_PRXCRT*/,b | 0x80); - } - break; - case 0x41: /* Stop displaying the graphics screen (グラフィック画面の表示終了) */ - pc98_gdc[GDC_SLAVE].force_fifo_complete(); - pc98_gdc[GDC_SLAVE].display_enable = false; -#if defined(USE_TTF) - if (pc98_gdc[GDC_MASTER].display_enable) ttf_switch_on(false); -#endif - - { - unsigned char b = mem_readb(0x54C/*MEMB_PRXCRT*/); - mem_writeb(0x54C/*MEMB_PRXCRT*/,b & (~0x80)); - } - break; - case 0x42: /* Display area setup (表示領域の設定) */ - // HACK for Quarth: If the game has triggered vsync interrupt, wait for it. - // Quarth's vsync interrupt will reprogram the display partitions back to what - // it would have set for gameplay after this modeset and cause display problems - // with the main menu. Waiting one vertical retrace period before mode setting - // gives Quarth one last frame to reprogram partitions before realizing that - // it's time to stop it. - // - // If the BIOS on real hardware has any check like this, it's probably a loop - // to wait for vsync. - // - // The interrupt does NOT cancel the vertical retrace interrupt. Some games - // (Rusty) will not work properly if this call cancels the vertical retrace - // interrupt. - while (!(IO_ReadB(0x60) & 0x20/*vertical retrace*/)) { - void CALLBACK_Idle(void); - CALLBACK_Idle(); - } - - pc98_gdc[GDC_MASTER].force_fifo_complete(); - pc98_gdc[GDC_SLAVE].force_fifo_complete(); - - /* clear PRAM, graphics */ - for (unsigned int i=0;i < 16;i++) - pc98_gdc[GDC_SLAVE].param_ram[i] = 0x00; - - /* reset scroll area of graphics */ - if ((reg_ch & 0xC0) == 0x40) { /* 640x200 G-RAM upper half */ - pc98_gdc[GDC_SLAVE].param_ram[0] = (200*40) & 0xFF; - pc98_gdc[GDC_SLAVE].param_ram[1] = (200*40) >> 8; - } - else { - pc98_gdc[GDC_SLAVE].param_ram[0] = 0; - pc98_gdc[GDC_SLAVE].param_ram[1] = 0; - } - - pc98_gdc[GDC_SLAVE].param_ram[2] = 0xF0; - pc98_gdc[GDC_SLAVE].param_ram[3] = 0x3F + (gdc_5mhz_according_to_bios()?0x40:0x00/*IM bit*/); - pc98_gdc[GDC_SLAVE].display_pitch = gdc_5mhz_according_to_bios() ? 80u : 40u; - - // CH - // [7:6] = G-RAM setup - // 00 = no graphics (?) - // 01 = 640x200 upper half - // 10 = 640x200 lower half - // 11 = 640x400 - // [5:5] = CRT - // 0 = color - // 1 = monochrome - // [4:4] = Display bank - - // Color or monochrome mode - IO_WriteB(0x68, (reg_ch & 0x20) ? 0x03 : 0x02); - - // FIXME: This is a guess. I have no idea as to actual behavior, yet. - // This seems to help with clearing the text layer when games start the graphics. - // This is ALSO how we will detect games that switch on the 200-line double-scan mode vs 400-line mode. - if ((reg_ch & 0xC0) != 0) { - pc98_gdc[GDC_SLAVE].doublescan = ((reg_ch & 0xC0) == 0x40) || ((reg_ch & 0xC0) == 0x80); - pc98_gdc[GDC_SLAVE].row_height = pc98_gdc[GDC_SLAVE].doublescan ? 2 : 1; - - /* update graphics mode bits */ - { - unsigned char b = mem_readb(0x597); - - b &= ~3; - b |= ((reg_ch >> 6) - 1) & 3; - - mem_writeb(0x597,b); - } - } - else { - pc98_gdc[GDC_SLAVE].doublescan = false; - pc98_gdc[GDC_SLAVE].row_height = 1; - } - - { - unsigned char b = mem_readb(0x54C/*MEMB_PRXCRT*/); - - // Real hardware behavior: graphics selection updated by BIOS to reflect MEMB_PRXCRT state - pc98_gdc[GDC_SLAVE].display_enable = !!(b & 0x80); -#if defined(USE_TTF) - if (pc98_gdc[GDC_SLAVE].display_enable) - ttf_switch_off(false); - else if (pc98_gdc[GDC_MASTER].display_enable) - ttf_switch_on(false); -#endif - } - - GDC_display_plane = GDC_display_plane_pending = (reg_ch & 0x10) ? 1 : 0; - pc98_update_display_page_ptr(); - - prev_pc98_mode42 = reg_ch; - - LOG_MSG("PC-98 INT 18 AH=42h CH=0x%02X",reg_ch); - break; - case 0x43: // Palette register settings? Only works in digital mode? --leonier - // - // This is said to fix Thexder's GAME ARTS logo. --Jonathan C. - // - // TODO: Validate this against real PC-98 hardware and BIOS - { - unsigned int gbcpc = SegValue(ds)*0x10u + reg_bx; - for(unsigned int i=0;i<4;i++) - { - unsigned char p=mem_readb(gbcpc+4u+i); - pc98_set_digpal_entry(7u-2u*i, p&0xFu); - pc98_set_digpal_entry(6u-2u*i, p>>4u); - } - LOG_MSG("PC-98 INT 18 AH=43h CX=0x%04X DS=0x%04X", reg_cx, SegValue(ds)); - break; - } - case 0x47: // Line, Box - case 0x48: // Arc - PC98_INT18_DrawShape(); - break; - case 0x49: // Text - PC98_INT18_DrawText(); - break; - case 0x4D: // 256-color enable - if (reg_ch == 1) { - void pc98_port6A_command_write(unsigned char b); - pc98_port6A_command_write(0x07); // enable EGC - pc98_port6A_command_write(0x01); // enable 16-color - pc98_port6A_command_write(0x21); // enable 256-color - PC98_show_cursor(false); // apparently hides the cursor? - mem_writeb(0x54D, mem_readb(0x54D) | 0x80); - } - else if (reg_ch == 0) { - void pc98_port6A_command_write(unsigned char b); - pc98_port6A_command_write(0x20); // disable 256-color - PC98_show_cursor(false); // apparently hides the cursor? - mem_writeb(0x54D, mem_readb(0x54D) & ~0x80); - } - else { - LOG_MSG("PC-98 INT 18h AH=4Dh unknown CH=%02xh",reg_ch); - } - break; - default: - LOG_MSG("PC-98 INT 18h unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - break; - } - - /* FIXME: What do actual BIOSes do when faced with an unknown INT 18h call? */ - return CBRET_NONE; -} - -#define PC98_FLOPPY_HIGHDENSITY 0x01 -#define PC98_FLOPPY_2HEAD 0x02 -#define PC98_FLOPPY_RPM_3MODE 0x04 -#define PC98_FLOPPY_RPM_IBMPC 0x08 - -unsigned char PC98_BIOS_FLOPPY_BUFFER[32768]; /* 128 << 8 */ - -static unsigned int PC98_FDC_SZ_TO_BYTES(unsigned int sz) { - return 128U << sz; -} - -int PC98_BIOS_SCSI_POS(imageDisk *floppy,uint32_t §or) { - if (reg_al & 0x80) { - uint32_t img_heads=0,img_cyl=0,img_sect=0,img_ssz=0; - - floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); - - /* DL = sector - * DH = head - * CX = track */ - if (reg_dl >= img_sect || - reg_dh >= img_heads || - reg_cx >= img_cyl) { - return (reg_ah=0x60); - } - - sector = reg_cx; - sector *= img_heads; - sector += reg_dh; - sector *= img_sect; - sector += reg_dl; - -// LOG_MSG("Sector CHS %u/%u/%u -> %u (geo %u/%u/%u)",reg_cx,reg_dh,reg_dl,sector,img_cyl,img_heads,img_sect); - } - else { - /* Linear LBA addressing */ - sector = ((unsigned int)reg_dl << 16UL) + reg_cx; - /* TODO: SASI caps at 0x1FFFFF according to NP2 */ - } - - return 0; -} - -void PC98_BIOS_SCSI_CALL(void) { - uint32_t img_heads=0,img_cyl=0,img_sect=0,img_ssz=0; - uint32_t memaddr,size,ssize; - imageDisk *floppy; - unsigned int i; - uint32_t sector; - int idx; - -#if 0 - LOG_MSG("PC-98 INT 1Bh SCSI BIOS call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); -#endif - - idx = (reg_al & 0xF) + 2; - if (idx < 0 || idx >= MAX_DISK_IMAGES) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - floppy = imageDiskList[idx]; - if (floppy == NULL) { - CALLBACK_SCF(true); - reg_ah = 0x60; - return; - } - - /* FIXME: According to NPKai, command is reg_ah & 0x1F not reg_ah & 0x0F. Right? */ - - /* what to do is in the lower 4 bits of AH */ - switch (reg_ah & 0x0F) { - case 0x05: /* write */ - if (PC98_BIOS_SCSI_POS(floppy,/*&*/sector) == 0) { - floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); - assert(img_ssz != 0); - - size = reg_bx; - if (size == 0) size = 0x10000U; - memaddr = ((unsigned int)SegValue(es) << 4u) + reg_bp; - - reg_ah = 0; - CALLBACK_SCF(false); - -// LOG_MSG("WRITE memaddr=0x%lx size=0x%x sector=0x%lx ES:BP=%04x:%04X", -// (unsigned long)memaddr,(unsigned int)size,(unsigned long)sector,SegValue(es),reg_bp); - - while (size != 0) { - ssize = size; - if (ssize > img_ssz) ssize = img_ssz; - -// LOG_MSG(" ... memaddr=0x%lx ssize=0x%x sector=0x%lx", -// (unsigned long)memaddr,(unsigned int)ssize,(unsigned long)sector); - - for (i=0;i < ssize;i++) PC98_BIOS_FLOPPY_BUFFER[i] = mem_readb(memaddr+i); - - if (floppy->Write_AbsoluteSector(sector,PC98_BIOS_FLOPPY_BUFFER) != 0) { - reg_ah = 0xD0; - CALLBACK_SCF(true); - break; - } - - sector++; - size -= ssize; - memaddr += ssize; - } - } - else { - CALLBACK_SCF(true); - } - break; - case 0x06: /* read */ - if (PC98_BIOS_SCSI_POS(floppy,/*&*/sector) == 0) { - floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); - assert(img_ssz != 0); - - size = reg_bx; - if (size == 0) size = 0x10000U; - memaddr = ((unsigned int)SegValue(es) << 4u) + reg_bp; - - reg_ah = 0; - CALLBACK_SCF(false); - -// LOG_MSG("READ memaddr=0x%lx size=0x%x sector=0x%lx ES:BP=%04x:%04X", -// (unsigned long)memaddr,(unsigned int)size,(unsigned long)sector,SegValue(es),reg_bp); - - while (size != 0) { - ssize = size; - if (ssize > img_ssz) ssize = img_ssz; - -// LOG_MSG(" ... memaddr=0x%lx ssize=0x%x sector=0x%lx", -// (unsigned long)memaddr,(unsigned int)ssize,(unsigned long)sector); - - if (floppy->Read_AbsoluteSector(sector,PC98_BIOS_FLOPPY_BUFFER) == 0) { - for (i=0;i < ssize;i++) mem_writeb(memaddr+i,PC98_BIOS_FLOPPY_BUFFER[i]); - } - else { - reg_ah = 0xD0; - CALLBACK_SCF(true); - break; - } - - sector++; - size -= ssize; - memaddr += ssize; - } - } - else { - CALLBACK_SCF(true); - } - break; - case 0x03: /* according to NPKai source code: "negate ack" (cbus/scsicmd.c line 211, and 61) */ - reg_ah = 0x35; /* according to scsicmd_negate() line 61, as translated by stat2ret[] by code line 228 */ - CALLBACK_SCF(false); - // NTS: This is needed for an HDI image to boot that apparently contains FreeDOS98 - break; - case 0x07: /* unknown, always succeeds */ - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x0E: /* unknown, always fails */ - reg_ah = 0x40; - CALLBACK_SCF(true); - break; - case 0x04: /* drive status */ - if (reg_ah == 0x84) { - floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); - - reg_dl = img_sect; - reg_dh = img_heads; /* Max 16 */ - reg_cx = img_cyl; /* Max 4096 */ - reg_bx = img_ssz; - - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - } - else if (reg_ah == 0x04 || reg_ah == 0x14) { - reg_ah = 0x00; - CALLBACK_SCF(false); - } - else { - goto default_goto; - } - default: - default_goto: - LOG_MSG("PC-98 INT 1Bh unknown SCSI BIOS call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - CALLBACK_SCF(true); - break; - } -} - -void PC98_BIOS_FDC_CALL_GEO_UNPACK(unsigned int &fdc_cyl,unsigned int &fdc_head,unsigned int &fdc_sect,unsigned int &fdc_sz) { - fdc_cyl = reg_cl; - fdc_head = reg_dh; - fdc_sect = reg_dl; - fdc_sz = reg_ch; - if (fdc_sz > 8) fdc_sz = 8; -} - -/* NTS: FDC calls reset IRQ 0 timer to a specific fixed interval, - * because the real BIOS likely does the same in the act of - * controlling the floppy drive. - * - * Resetting the interval is required to prevent Ys II from - * crashing after disk swap (divide by zero/overflow) because - * Ys II reads the timer after INT 1Bh for whatever reason - * and the upper half of the timer byte later affects a divide - * by 3 in the code. */ - -void PC98_Interval_Timer_Continue(void); - -bool enable_fdc_timer_hack = false; - -void FDC_WAIT_TIMER_HACK(void) { - unsigned int v; - unsigned int c=0; - - // Explanation: - // - // Originally the FDC code here changed the timer interval back to the stock 100hz - // normally used in PC-98, to fix Ys II. However that seems to break other booter - // games that hook IRQ 0 directly and set the timer ONCE, then access the disk. - // - // For example, "Angelus" ran WAY too slow with the timer hack because it programs - // the timer to a 600hz interval and expects it to stay that way. - // - // So the new method to satisfy both games is to loop here until the timer - // count is below the maximum that would occur if the 100hz tick count were - // still in effect, even if the timer interval was reprogrammed. - // - // NTS: Writing port 0x77 to relatch the timer also seems to break games - // - // TODO: As a safety against getting stuck, perhaps PIC_FullIndex() should be used - // to break out of the loop if this runs for more than 1 second, since that - // is a sign the timer is in an odd state that will never terminate this loop. - - v = ~0U; - c = 10; - do { - void CALLBACK_Idle(void); - CALLBACK_Idle(); - - unsigned int pv = v; - - v = (unsigned int)IO_ReadB(0x71); - v |= (unsigned int)IO_ReadB(0x71) << 8u; - - if (v > pv) { - /* if the timer rolled around, we might have missed the narrow window we're watching for */ - if (--c == 0) break; - } - } while (v >= 0x60); -} - -void PC98_BIOS_FDC_CALL(unsigned int flags) { - static unsigned int fdc_cyl[2]={0,0},fdc_head[2]={0,0},fdc_sect[2]={0,0},fdc_sz[2]={0,0}; // FIXME: Rename and move out. Making "static" is a hack here. - uint32_t img_heads=0,img_cyl=0,img_sect=0,img_ssz=0; - unsigned int drive; - unsigned int status; - unsigned int size,accsize,unitsize; - unsigned long memaddr; - imageDisk *floppy; - - /* AL bits[1:0] = which floppy drive */ - if ((reg_al & 3) >= 2) { - /* This emulation only supports up to 2 floppy drives */ - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - floppy = GetINT13FloppyDrive(drive=(reg_al & 3)); - - /* what to do is in the lower 4 bits of AH */ - switch (reg_ah & 0x0F) { - /* TODO: 0x00 = seek to track (in CL) */ - /* TODO: 0x01 = test read? */ - /* TODO: 0x03 = equipment flags? */ - /* TODO: 0x04 = format detect? */ - /* TODO: 0x05 = write disk */ - /* TODO: 0x07 = recalibrate (seek to track 0) */ - /* TODO: 0x0A = Read ID */ - /* TODO: 0x0D = Format track */ - /* TODO: 0x0E = ?? */ - case 0x03: /* equipment flags update (?) */ - // TODO: Update the disk equipment flags in BDA. - // For now, make Alantia happy by returning success. - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x00: /* seek */ - /* CL = track */ - if (floppy == NULL) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - if (enable_fdc_timer_hack) { - // Hack for Ys II - FDC_WAIT_TIMER_HACK(); - } - - fdc_cyl[drive] = reg_cl; - - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x01: /* test read */ - /* AH bits[4:4] = If set, seek to track specified */ - /* CL = cylinder (track) */ - /* CH = sector size (0=128 1=256 2=512 3=1024 etc) */ - /* DL = sector number (1-based) */ - /* DH = head */ - /* BX = size (in bytes) of data to read */ - /* ES:BP = buffer to read data into */ - if (floppy == NULL) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); - - if (enable_fdc_timer_hack) { - // Hack for Ys II - FDC_WAIT_TIMER_HACK(); - } - - /* Prevent reading 1.44MB floppies using 1.2MB read commands and vice versa. - * FIXME: It seems MS-DOS 5.0 booted from a HDI image has trouble understanding - * when Drive A: (the first floppy) is a 1.44MB drive or not and fails - * because it only attempts it using 1.2MB format read commands. */ - if (flags & PC98_FLOPPY_RPM_IBMPC) { - if (img_ssz == 1024) { /* reject 1.2MB 3-mode format */ - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - } - else { - if (img_ssz == 512) { /* reject IBM PC 1.44MB format */ - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - } - - PC98_BIOS_FDC_CALL_GEO_UNPACK(/*&*/fdc_cyl[drive],/*&*/fdc_head[drive],/*&*/fdc_sect[drive],/*&*/fdc_sz[drive]); - unitsize = PC98_FDC_SZ_TO_BYTES(fdc_sz[drive]); - if (0/*unitsize != img_ssz || img_heads == 0 || img_cyl == 0 || img_sect == 0*/) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - size = reg_bx; - while (size > 0) { - accsize = size > unitsize ? unitsize : size; - - if (floppy->Read_Sector(fdc_head[drive],fdc_cyl[drive],fdc_sect[drive],PC98_BIOS_FLOPPY_BUFFER,unitsize) != 0) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - size -= accsize; - - if (size == 0) break; - - if ((++fdc_sect[drive]) > img_sect && img_sect != 0) { - fdc_sect[drive] = 1; - if ((++fdc_head[drive]) >= img_heads && img_heads != 0) { - fdc_head[drive] = 0; - fdc_cyl[drive]++; - } - } - } - - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x02: /* read sectors */ - case 0x06: /* read sectors (what's the difference from 0x02?) */ - /* AH bits[4:4] = If set, seek to track specified */ - /* CL = cylinder (track) */ - /* CH = sector size (0=128 1=256 2=512 3=1024 etc) */ - /* DL = sector number (1-based) */ - /* DH = head */ - /* BX = size (in bytes) of data to read */ - /* ES:BP = buffer to read data into */ - if (floppy == NULL) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); - - if (enable_fdc_timer_hack) { - // Hack for Ys II - FDC_WAIT_TIMER_HACK(); - } - - /* Prevent reading 1.44MB floppies using 1.2MB read commands and vice versa. - * FIXME: It seems MS-DOS 5.0 booted from a HDI image has trouble understanding - * when Drive A: (the first floppy) is a 1.44MB drive or not and fails - * because it only attempts it using 1.2MB format read commands. */ - if (flags & PC98_FLOPPY_RPM_IBMPC) { - if (img_ssz == 1024) { /* reject 1.2MB 3-mode format */ - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - } - else { - if (img_ssz == 512) { /* reject IBM PC 1.44MB format */ - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - } - - PC98_BIOS_FDC_CALL_GEO_UNPACK(/*&*/fdc_cyl[drive],/*&*/fdc_head[drive],/*&*/fdc_sect[drive],/*&*/fdc_sz[drive]); - unitsize = PC98_FDC_SZ_TO_BYTES(fdc_sz[drive]); - if (0/*unitsize != img_ssz || img_heads == 0 || img_cyl == 0 || img_sect == 0*/) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - size = reg_bx; - memaddr = ((unsigned int)SegValue(es) << 4U) + reg_bp; - while (size > 0) { - accsize = size > unitsize ? unitsize : size; - - if (floppy->Read_Sector(fdc_head[drive],fdc_cyl[drive],fdc_sect[drive],PC98_BIOS_FLOPPY_BUFFER,unitsize) != 0) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - for (unsigned int i=0;i < accsize;i++) - mem_writeb(memaddr+i,PC98_BIOS_FLOPPY_BUFFER[i]); - - memaddr += accsize; - size -= accsize; - - if (size == 0) break; - - if ((++fdc_sect[drive]) > img_sect && img_sect != 0) { - fdc_sect[drive] = 1; - if ((++fdc_head[drive]) >= img_heads && img_heads != 0) { - fdc_head[drive] = 0; - fdc_cyl[drive]++; - } - } - } - - /* need to clear DMA terminal count after read as BIOS would, I assume (Arsys Star Cruiser) */ - { - DmaChannel *dma = GetDMAChannel(2); - if (dma) dma->tcount = false; - } - - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x04: /* drive status */ - status = 0; - - /* TODO: bit 4 is set if write protected */ - - if (reg_al & 0x80) { /* high density */ - status |= 0x01; - } - else { /* double density */ - /* TODO: */ - status |= 0x01; - } - - if ((reg_ax & 0x8F40) == 0x8400) { - status |= 8; /* 1MB/640KB format, spindle speed for 3-mode */ - if (reg_ah & 0x40) /* DOSBox-X always supports 1.44MB */ - status |= 4; /* 1.44MB format, spindle speed for IBM PC format */ - } - - if (floppy == NULL) - status |= 0xC0; - - reg_ah = status; - CALLBACK_SCF(false); - break; - /* TODO: 0x00 = seek to track (in CL) */ - /* TODO: 0x01 = test read? */ - /* TODO: 0x03 = equipment flags? */ - /* TODO: 0x04 = format detect? */ - /* TODO: 0x05 = write disk */ - /* TODO: 0x07 = recalibrate (seek to track 0) */ - /* TODO: 0x0A = Read ID */ - /* TODO: 0x0D = Format track */ - /* TODO: 0x0E = ?? */ - case 0x05: /* write sectors */ - /* AH bits[4:4] = If set, seek to track specified */ - /* CL = cylinder (track) */ - /* CH = sector size (0=128 1=256 2=512 3=1024 etc) */ - /* DL = sector number (1-based) */ - /* DH = head */ - /* BX = size (in bytes) of data to read */ - /* ES:BP = buffer to write data from */ - if (floppy == NULL) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); - - if (enable_fdc_timer_hack) { - // Hack for Ys II - FDC_WAIT_TIMER_HACK(); - } - - /* TODO: Error if write protected */ - - PC98_BIOS_FDC_CALL_GEO_UNPACK(/*&*/fdc_cyl[drive],/*&*/fdc_head[drive],/*&*/fdc_sect[drive],/*&*/fdc_sz[drive]); - unitsize = PC98_FDC_SZ_TO_BYTES(fdc_sz[drive]); - if (0/*unitsize != img_ssz || img_heads == 0 || img_cyl == 0 || img_sect == 0*/) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - size = reg_bx; - memaddr = ((unsigned int)SegValue(es) << 4U) + reg_bp; - while (size > 0) { - accsize = size > unitsize ? unitsize : size; - - for (unsigned int i=0;i < accsize;i++) - PC98_BIOS_FLOPPY_BUFFER[i] = mem_readb(memaddr+i); - - if (floppy->Write_Sector(fdc_head[drive],fdc_cyl[drive],fdc_sect[drive],PC98_BIOS_FLOPPY_BUFFER,unitsize) != 0) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - memaddr += accsize; - size -= accsize; - - if (size == 0) break; - - if ((++fdc_sect[drive]) > img_sect && img_sect != 0) { - fdc_sect[drive] = 1; - if ((++fdc_head[drive]) >= img_heads && img_heads != 0) { - fdc_head[drive] = 0; - fdc_cyl[drive]++; - } - } - } - - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x07: /* recalibrate (seek to track 0) */ - if (floppy == NULL) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - if (enable_fdc_timer_hack) { - // Hack for Ys II - FDC_WAIT_TIMER_HACK(); - } - - fdc_cyl[drive] = 0; - - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x0D: /* format track */ - if (floppy == NULL) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - PC98_BIOS_FDC_CALL_GEO_UNPACK(/*&*/fdc_cyl[drive],/*&*/fdc_head[drive],/*&*/fdc_sect[drive],/*&*/fdc_sz[drive]); - unitsize = PC98_FDC_SZ_TO_BYTES(fdc_sz[drive]); - - if (enable_fdc_timer_hack) { - // Hack for Ys II - FDC_WAIT_TIMER_HACK(); - } - - LOG_MSG("WARNING: INT 1Bh FDC format track command not implemented. Formatting is faked, for now on C/H/S/sz %u/%u/%u/%u drive %c.", - (unsigned int)fdc_cyl[drive], - (unsigned int)fdc_head[drive], - (unsigned int)fdc_sect[drive], - (unsigned int)unitsize, - drive + 'A'); - - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x0A: /* read ID */ - /* NTS: PC-98 "MEGDOS" used by some games seems to rely heavily on this call to - * verify the floppy head is where it thinks it should be! */ - if (floppy == NULL) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); - - if (enable_fdc_timer_hack) { - // Hack for Ys II - FDC_WAIT_TIMER_HACK(); - } - - if (reg_ah & 0x10) { // seek to track number in CL - if (img_cyl != 0 && reg_cl >= img_cyl) { - CALLBACK_SCF(true); - reg_ah = 0x00; - /* TODO? Error code? */ - return; - } - - fdc_cyl[drive] = reg_cl; - } - - if (fdc_sect[drive] == 0) - fdc_sect[drive] = 1; - - if (img_ssz >= 1024) - fdc_sz[drive] = 3; - else if (img_ssz >= 512) - fdc_sz[drive] = 2; - else if (img_ssz >= 256) - fdc_sz[drive] = 1; - else - fdc_sz[drive] = 0; - - reg_cl = fdc_cyl[drive]; - reg_dh = fdc_head[drive]; - reg_dl = fdc_sect[drive]; - /* ^ FIXME: A more realistic emulation would return a random number from 1 to N - * where N=sectors/track because the floppy motor is running and tracks - * are moving past the head. */ - reg_ch = fdc_sz[drive]; - - /* per read ID call, increment the sector through the range on disk. - * This is REQUIRED or else MEGDOS will not attempt to read this disk. */ - if (img_sect != 0) { - if ((++fdc_sect[drive]) > img_sect) - fdc_sect[drive] = 1; - } - - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - default: - LOG_MSG("PC-98 INT 1Bh unknown FDC BIOS call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - CALLBACK_SCF(true); - break; - } -} - -static Bitu INT19_PC98_Handler(void) { - LOG_MSG("PC-98 INT 19h unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - - return CBRET_NONE; -} - -static Bitu INT1A_PC98_Handler(void) { - /* HACK: This makes the "test" program in DOSLIB work. - * We'll remove this when we implement INT 1Ah */ - if (reg_ax == 0x1000) { - CALLBACK_SCF(false); - reg_ax = 0; - } - - LOG_MSG("PC-98 INT 1Ah unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - - return CBRET_NONE; -} - -static Bitu INT1B_PC98_Handler(void) { - /* As BIOS interfaces for disk I/O go, this is fairly unusual */ - switch (reg_al & 0xF0) { - /* floppy disk access */ - /* AL bits[1:0] = floppy drive number */ - /* Uses INT42 if high density, INT41 if double density */ - /* AH bits[3:0] = command */ - case 0x90: /* 1.2MB HD */ - PC98_BIOS_FDC_CALL(PC98_FLOPPY_HIGHDENSITY|PC98_FLOPPY_2HEAD|PC98_FLOPPY_RPM_3MODE); - break; - case 0x30: /* 1.44MB HD (NTS: not supported until the early 1990s) */ - case 0xB0: - PC98_BIOS_FDC_CALL(PC98_FLOPPY_HIGHDENSITY|PC98_FLOPPY_2HEAD|PC98_FLOPPY_RPM_IBMPC); - break; - case 0x70: /* 720KB DD (??) */ - case 0xF0: - PC98_BIOS_FDC_CALL(PC98_FLOPPY_2HEAD|PC98_FLOPPY_RPM_3MODE); // FIXME, correct?? - break; - case 0x20: /* SCSI hard disk BIOS */ - case 0xA0: /* SCSI hard disk BIOS */ - case 0x00: /* SASI hard disk BIOS */ - case 0x80: /* SASI hard disk BIOS */ - PC98_BIOS_SCSI_CALL(); - break; - /* TODO: Other disk formats */ - /* TODO: Future SASI/SCSI BIOS emulation for hard disk images */ - default: - LOG_MSG("PC-98 INT 1Bh unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - CALLBACK_SCF(true); - break; - } - - return CBRET_NONE; -} - -void PC98_Interval_Timer_Continue(void) { - /* assume: interrupts are disabled */ - IO_WriteB(0x71,0x00); - // TODO: What time interval is this supposed to be? - if (PIT_TICK_RATE == PIT_TICK_RATE_PC98_8MHZ) - IO_WriteB(0x71,0x4E); - else - IO_WriteB(0x71,0x60); - - IO_WriteB(0x02,IO_ReadB(0x02) & (~(1u << /*IRQ*/0u))); // unmask IRQ0 -} - -unsigned char pc98_dec2bcd(unsigned char c) { - return ((c / 10u) << 4u) + (c % 10u); -} - -static Bitu INT1C_PC98_Handler(void) { - if (reg_ah == 0x00) { /* get time and date */ - time_t curtime; - const struct tm *loctime; - curtime = time (NULL); - loctime = localtime (&curtime); - - unsigned char tmp[6]; - - tmp[0] = pc98_dec2bcd((unsigned int)loctime->tm_year % 100u); - tmp[1] = (((unsigned int)loctime->tm_mon + 1u) << 4u) + (unsigned int)loctime->tm_wday; - tmp[2] = pc98_dec2bcd(loctime->tm_mday); - tmp[3] = pc98_dec2bcd(loctime->tm_hour); - tmp[4] = pc98_dec2bcd(loctime->tm_min); - tmp[5] = pc98_dec2bcd(loctime->tm_sec); - - unsigned long mem = ((unsigned int)SegValue(es) << 4u) + reg_bx; - - for (unsigned int i=0;i < 6;i++) - mem_writeb(mem+i,tmp[i]); - } - else if (reg_ah == 0x02) { /* set interval timer (single event) */ - /* es:bx = interrupt handler to execute - * cx = timer interval in ticks (FIXME: what units of time?) */ - mem_writew(0x1C,reg_bx); - mem_writew(0x1E,SegValue(es)); - mem_writew(0x58A,reg_cx); - - IO_WriteB(0x77,0x36); /* mode 3, binary, low-byte high-byte 16-bit counter */ - - PC98_Interval_Timer_Continue(); - } - else if (reg_ah == 0x03) { /* continue interval timer */ - PC98_Interval_Timer_Continue(); - } - /* TODO: According to the PDF at - * - * http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20NEC%20PC%2d98/Collections/PC%2d9801%20Bible%20%e6%9d%b1%e4%ba%ac%e7%90%86%e7%a7%91%e5%a4%a7%e5%ad%a6EIC%20%281994%29%2epdf - * - * There are additional functions - * - * AH = 04h - * ES:BX = ? - * - * --- - * - * AH = 05h - * ES:BX = ? - * - * --- - * - * AH = 06h - * CX = ? (1-FFFFh) - * DX = ? (20h-8000h Hz) - * - * If any PC-98 games or applications rely on this, let me know. Adding a case for them is easy enough if anyone is interested. --J.C. - */ - else { - LOG_MSG("PC-98 INT 1Ch unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - } - - return CBRET_NONE; -} - -// NTS: According to this PDF, chapter 5, INT 1Dh has additional functions on "High Resolution" PC-98 systems. -// [https://ia801305.us.archive.org/8/items/PC9800TechnicalDataBookBIOS1992/PC-9800TechnicalDataBook_BIOS_1992_text.pdf] -static Bitu INT1D_PC98_Handler(void) { - LOG_MSG("PC-98 INT 1Dh unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - - return CBRET_NONE; -} - -static Bitu INT1E_PC98_Handler(void) { - LOG_MSG("PC-98 INT 1Eh unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - - return CBRET_NONE; -} - -void PC98_EXTMEMCPY(void) { - bool enabled = MEM_A20_Enabled(); - MEM_A20_Enable(true); - - Bitu bytes = ((reg_cx - 1u) & 0xFFFFu) + 1u; // bytes, except that 0 == 64KB - PhysPt data = SegPhys(es)+reg_bx; - PhysPt source = (mem_readd(data + 0x12u) & 0x00FFFFFFu) + ((unsigned int)mem_readb(data + 0x17u) << 24u) + reg_si; - PhysPt dest = (mem_readd(data + 0x1Au) & 0x00FFFFFFu) + ((unsigned int)mem_readb(data + 0x1Fu) << 24u) + reg_di; - - LOG_MSG("PC-98 memcpy: src=0x%x dst=0x%x data=0x%x count=0x%x", - (unsigned int)source,(unsigned int)dest,(unsigned int)data,(unsigned int)bytes); - - MEM_BlockCopy(dest,source,bytes); - MEM_A20_Enable(enabled); - Segs.limit[cs] = 0xFFFF; - Segs.limit[ds] = 0xFFFF; - Segs.limit[es] = 0xFFFF; - Segs.limit[ss] = 0xFFFF; - - CALLBACK_SCF(false); -} - -static Bitu INT1F_PC98_Handler(void) { - switch (reg_ah) { - case 0x90: - /* Copy extended memory */ - PC98_EXTMEMCPY(); - break; - default: - LOG_MSG("PC-98 INT 1Fh unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - CALLBACK_SCF(true); - break; - } - - return CBRET_NONE; -} - -static Bitu INTGEN_PC98_Handler(void) { - LOG_MSG("PC-98 INT stub unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - - return CBRET_NONE; -} - -/* This interrupt should only exist while the DOS kernel is active. - * On actual PC-98 MS-DOS this is a direct interface to MS-DOS's built-in ANSI CON driver. - * - * CL = major function call number - * AH = minor function call number - * DX = data?? */ - -void PC98_INTDC_WriteChar(unsigned char b); - -void INTDC_LOAD_FUNCDEC(pc98_func_key_shortcut_def &def,const Bitu ofs) { - unsigned int i; - - for (i=0;i < 0x0F;i++) - def.shortcut[i] = mem_readb(ofs+0x0+i); - - for (i=0;i < 0x0F && def.shortcut[i] != 0;) i++; - def.length = i; -} - -void INTDC_STORE_FUNCDEC(const Bitu ofs,const pc98_func_key_shortcut_def &def) { - for (unsigned int i=0;i < 0x0F;i++) mem_writeb(ofs+0x0+i,def.shortcut[i]); - mem_writeb(ofs+0xF,0); -} - -void INTDC_LOAD_EDITDEC(pc98_func_key_shortcut_def &def,const Bitu ofs) { - unsigned int i; - - for (i=0;i < 0x05;i++) - def.shortcut[i] = mem_readb(ofs+0x0+i); - - for (i=0;i < 0x05 && def.shortcut[i] != 0;) i++; - def.length = i; -} - -void INTDC_STORE_EDITDEC(const Bitu ofs,const pc98_func_key_shortcut_def &def) { - for (unsigned int i=0;i < 0x05;i++) mem_writeb(ofs+0x0+i,def.shortcut[i]); - mem_writeb(ofs+0x5,0); -} - -bool inhibited_ControlFn(void) { - return real_readb(0x60,0x10C) & 0x01; -} - -static const char *fneditkeys[11] = { - "ROLLUP", - "ROLLDOWN", - "INS", - "DEL", - "UPARROW", - "LEFTARROW", - "RIGHTARROW", - "DOWNARROW", - "HOMECLR", - "HELP", - "KEYPAD-" -}; - -void DEBUG_INTDC_FnKeyMapInfo(void) { - if (!IS_PC98_ARCH) { - DEBUG_ShowMsg("INT DCh has no meaning except in PC-98 mode"); - } - else if (dos_kernel_disabled) { - DEBUG_ShowMsg("INT DCh FnKey mapping has no meaning outside the DOS environment"); - } - else { - DEBUG_ShowMsg("INT DCh FnKey mapping. Ctrl+Fn builtin inhibited=%s",inhibited_ControlFn()?"yes":"no"); - for (unsigned int i=0;i < 10;i++) - DEBUG_ShowMsg(" F%u: %s",i+1,pc98_func_key[i].debugToString().c_str()); - for (unsigned int i=0;i < 5;i++) - DEBUG_ShowMsg(" VF%u: %s",i+1,pc98_vfunc_key[i].debugToString().c_str()); - - for (unsigned int i=0;i < 10;i++) - DEBUG_ShowMsg(" Shift+F%u: %s",i+1,pc98_func_key_shortcut[i].debugToString().c_str()); - for (unsigned int i=0;i < 5;i++) - DEBUG_ShowMsg(" Shift+VF%u: %s",i+1,pc98_vfunc_key_shortcut[i].debugToString().c_str()); - - for (unsigned int i=0;i < 10;i++) - DEBUG_ShowMsg(" Control+F%u: %s",i+1,pc98_func_key_ctrl[i].debugToString().c_str()); - for (unsigned int i=0;i < 5;i++) - DEBUG_ShowMsg(" Control+VF%u: %s",i+1,pc98_vfunc_key_ctrl[i].debugToString().c_str()); - - for (unsigned int i=0;i < 11;i++) - DEBUG_ShowMsg(" %s: %s",fneditkeys[i],pc98_editor_key_escapes[i].debugToString().c_str()); - } -} - -/* PC-98 application notes, that are NOT DOSBox-X bugs because they occur on real MS-DOS as well: - * - * VZ.COM - If the function key row was hidden when VZ.COM is started, VZ.COM will not restore the - * function key row. VZ.COM's function key shortcuts affect Fn and Shift+Fn keys and the - * text they display even if VZ.COM also disables the Ctrl+F7 shortcut that lets you - * toggle the function key row, which makes displaying the Shift+Fn key shortcuts impossible - * unless the function key row was left showing that at startup. - */ - -static Bitu INTDC_PC98_Handler(void) { - if (dos_kernel_disabled) goto unknown; - - switch (reg_cl) { - /* Tracking implementation according to [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20NEC%20PC%2d98/Collections/Undocumented%209801%2c%209821%20Volume%201%20English%20translation/INTDC%2eTXT] */ - case 0x0C: /* CL=0x0C General entry point to read function key state */ -/*=================================================================================================== -Table [List of key specification values and corresponding keys] - ------------------------+--------------------------------------------------- - Key specification value | Corresponding key - ------------------------+--------------------------------------------------- - 0000h | [f・1] to [f・10], [SHIFT] + [f・1] to [SHIFT] + [f・10], - | [ROLL UP], [ROLL DOWN], [INS], [DEL], [↑], [←], [→], [↓], - | [HOME/CLR], [HELP], [SHIFT] + [HOME/CLR] - 0001 to 000Ah | [f・1] to [f・10] - 000B to 0014h | [SHIFT] + [f・1] to [SHIFT] + [f・10] - 0015h | [ROLL UP] - 0016h | [ROLL DOWN] - 0017h | [INS] - 0018h | [DEL] - 0019h | [↑] - 001Ah | [←] - 001Bh | [→] - 001Ch | [↓] - 001Dh | [HOME/CLR](XA keyboard:[CLR]) - 001Eh | [HELP] - 001Fh | [SHIFT]+[HOME/CLR](XA keyboard:[HOME]) - 0020-0024h | [vf・1]-[vf・5] - 0025-0029h | [SHIFT]+[vf・1]-[vf・5] - 002A-0033h | [CTRL]+[f・1]-[f・10] - 0034-0038h | [CTRL]+[vf・1]-[vf・5] - 0039h | [CTRL]+[XFER]/[NFER] (Undocumented) - 003Ah | [CTRL]+[XFER]/[NFER],[CTRL]+[f・1]~[f・10] - | (Undocumented) - 00FFh | [f・1]〜[f・10],[vf・1]〜[vf・5], - | [SHIFT]+[f・1]〜[SHIFT]+[f・10],[SHIFT]+[vf・1]〜[vf・5], - | [ROLL UP],[ROLL DOWN],[INS],[DEL],[↑],[←],[→],[↓], - | [HOME/CLR],[HELP],[SHIFT]+[HOME/CLR], - | [CTRL]+[f・1] to [f・10], [CTRL]+[vf・1] to [vf・5] - ------------------------+--------------------------------------------------- - - Table [Supported range of key specification values for each MS-DOS version] - ------------------------+---+---+---+---+---+---+---+---+-----+ - Key specification value | MS-DOS version (PS98-XXX) - |111|121|122|123|125|127|129|011|XA125 - ------------------------+---+---+---+---+---+---+---+---+-----+ - 0000 to 001Fh | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ - 0020 to 0029h | × | × | × | × | × | × | × | ○ | ○ - 002A-0033h | × | × | × | × | ○ | ○ | ○ | ○ | △ - 0034-0038h | × | × | × | × | × | × | × | ○ | △ - 0039h | × | × | × | × | × | ○ | ○ | ○ | × - 003Ah | × | × | × | × | ○ | ○ | ○ | ○ | × - 00FFh | × | × | × | × | × | × | × | ○ | ○ - ------------------------+---+---+---+---+---+---+---+---+-----+ - * PC-98LT/HA is the same as PS98-127. - * MS-DOS 3.3(all), 5.0, 5.0A is the same as PS98-011. - * For the PS98-XA125 triangle mark, the keys are as follows. - Key values 002B to 0033h specify [CTRL]+[f・1] to [f・9]. - Key values 0035 to 0038h specify [CTRL]+[vf・1] to [vf・4]. -=============================================================================================== - * NTS: According to a translation table in the MS-DOS kernel, where - * AX=1h to AX=29h inclusive look up from this 0x29-element table: - * - * Table starts with AX=1h, ends with AX=29h - * - * 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 - * | | | | | | | | | | | | | | | | - * 0ADC:00003DE0 01 02 03 04 05 06 07 08 09 0A 10 11 12 13 14 15 ................ - * 0ADC:00003DF0 16 17 18 19 1F 20 21 22 23 24 25 26 27 28 29 0B ..... !"#$%&'(). - * 0ADC:00003E00 0C 0D 0E 0F 1A 1B 1C 1D 1E| - * - * The table is read, then the byte is decremented by one. - * - * If the result of that is less than 0x1E, it's an index into - * the 16 byte/entry Fn key table. - * - * If the result is 0x1E or larger, then (result - 0x1E) is an - * index into the editor table, 8 bytes/entry. - * - * Meanings: - * - * 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 - * | | | | | | | | | | | | | | | | - * 0ADC:00003DE0 01 02 03 04 05 06 07 08 09 0A 10 11 12 13 14 15 ................ - * | --- Function keys F1-F10 ---| Fn shift F1-F6 - - * 0ADC:00003DF0 16 17 18 19 1F 20 21 22 23 24 25 26 27 28 29 0B ..... !"#$%&'(). - * | Sh F7-F10 | ------- EDITOR KEYS -----------| - - * 0ADC:00003E00 0C 0D 0E 0F 1A 1B 1C 1D 1E| - * | --------- | ------------ | -===============================================================================================*/ - if (reg_ax == 0x00) { /* Read all state, DS:DX = data to store to */ -/*============================================================================================= - DS:DX contains - -Table [Programmable key setting data buffer structure] - (1) Key specification value 0000h - -------+--------------------+-------------------------------------- - Offset | Key type | Size of key setting data - -------+--------------------+-------------------------------------- - +0000h | [f・1] | 16 bytes (15 bytes of key setting data + 00h) - +0010h | [f・2] | 16 bytes (15 bytes of key setting data + 00h) - +0020h | [f・3] | 16 bytes (15 bytes of key setting data + 00h) - +0030h | [f・4] | 16 bytes (15 bytes of key setting data + 00h) - +0040h | [f・5] | 16 bytes (15 bytes of key setting data + 00h) - +0050h | [f・6] | 16 bytes (15 bytes of key setting data + 00h) - +0060h | [f・7] | 16 bytes (15 bytes of key setting data + 00h) - +0070h | [f・8] | 16 bytes (15 bytes of key setting data + 00h) - +0080h | [f・9] | 16 bytes (15 bytes of key setting data + 00h) - +0090h | [f・10] | 16 bytes (15 bytes of key setting data + 00h) - +00A0h | [SHIFT]+[f・1] | 16 bytes (15 bytes of key setting data + 00h) - +00B0h | [SHIFT]+[f・2] | 16 bytes (15 bytes of key setting data + 00h) - +00C0h | [SHIFT]+[f・3] | 16 bytes (15 bytes of key setting data + 00h) - +00D0h | [SHIFT]+[f・4] | 16 bytes (15 bytes of key setting data + 00h) - +00E0h | [SHIFT]+[f・5] | 16 bytes (15 bytes of key setting data + 00h) - +00F0h | [SHIFT]+[f・6] | 16 bytes (15 bytes of key setting data + 00h) - +0100h | [SHIFT]+[f・7] | 16 bytes (15 bytes of key setting data + 00h) - +0110h | [SHIFT]+[f・8] | 16 bytes (15 bytes of key setting data + 00h) - +0120h | [SHIFT]+[f・9] | 16 bytes (15 bytes of key setting data + 00h) - +0130h | [SHIFT]+[f・10] | 16 bytes (15 bytes of key setting data + 00h) - +0140h | [ROLL UP] | 6 bytes (5 bytes of key setting data + 00h) - +0146h | [ROLL DOWN] | 6 bytes (5 bytes of key setting data + 00h) - +014Ch | [INS] | 6 bytes (5 bytes of key setting data + 00h) - +0152h | [DEL] | 6 bytes (5 bytes of key setting data + 00h) - +0158h | [↑] | 6 bytes (5 bytes of key setting data + 00h) - +015Eh | [←] | 6 bytes (5 bytes of key setting data + 00h) - +0164h | [→] | 6 bytes (5 bytes of key setting data + 00h) - +016Ah | [↓] | 6 bytes (5 bytes of key setting data + 00h) - +0170h | [HOME/CLR] | 6 bytes (5 bytes of key setting data + 00h) - +0176h | [HELP] | 6 bytes (5 bytes of key setting data + 00h) - +017Ch | [SHIFT]+[HOME/CLR] | 6 bytes (5 bytes of key setting data + 00h) - -------+--------------------+-------------------------------------- -===============================================================================================*/ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - - /* function keys F1-F10 */ - for (unsigned int f=0;f < 10;f++,ofs += 16) - INTDC_STORE_FUNCDEC(ofs,pc98_func_key[f]); - /* function keys Shift+F1 - Shift+F10 */ - for (unsigned int f=0;f < 10;f++,ofs += 16) - INTDC_STORE_FUNCDEC(ofs,pc98_func_key_shortcut[f]); - /* editor keys */ - for (unsigned int f=0;f < 11;f++,ofs += 6) - INTDC_STORE_EDITDEC(ofs,pc98_editor_key_escapes[f]); - - goto done; - } - else if (reg_ax >= 0x01 && reg_ax <= 0x0A) { /* Read individual function keys, DS:DX = data to store to */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_STORE_FUNCDEC(ofs,pc98_func_key[reg_ax - 0x01]); - goto done; - } - else if (reg_ax >= 0x0B && reg_ax <= 0x14) { /* Read individual shift + function keys, DS:DX = data to store to */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_STORE_FUNCDEC(ofs,pc98_func_key_shortcut[reg_ax - 0x0B]); - goto done; - } - else if (reg_ax >= 0x15 && reg_ax <= 0x1F) { /* Read individual editor keys, DS:DX = data to store to */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_STORE_EDITDEC(ofs,pc98_editor_key_escapes[reg_ax - 0x15]); - goto done; - } - else if (reg_ax >= 0x20 && reg_ax <= 0x24) { /* Read VF1-VF5 keys, DS:DX = data to store to */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_STORE_FUNCDEC(ofs,pc98_vfunc_key[reg_ax - 0x20]); - goto done; - } - else if (reg_ax >= 0x25 && reg_ax <= 0x29) { /* Read shift VF1-VF5 keys, DS:DX = data to store to */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_STORE_FUNCDEC(ofs,pc98_vfunc_key_shortcut[reg_ax - 0x25]); - goto done; - } - else if (reg_ax >= 0x2A && reg_ax <= 0x33) { /* Read individual function keys, DS:DX = data to store to */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_STORE_FUNCDEC(ofs,pc98_func_key_ctrl[reg_ax - 0x2A]); - goto done; - } - else if (reg_ax >= 0x34 && reg_ax <= 0x38) { /* Read control VF1-VF5 keys, DS:DX = data to store to */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_STORE_FUNCDEC(ofs,pc98_vfunc_key_ctrl[reg_ax - 0x34]); - goto done; - } - else if (reg_ax == 0xFF) { /* Extended version of the API when AX == 0, DS:DX = data to store to */ - /* DS:DX contains - * 16*10 bytes, 16 bytes per entry for function keys F1-F10 - * 16*5 bytes, 16 bytes per entry for VF1-VF5 - * 16*10 bytes, 16 bytes per entry for function key shortcuts Shift+F1 to Shift+F10 - * 16*5 bytes, 16 bytes per entry for shift VF1-VF5 - * 6*11 bytes, 6 bytes per entry for editor keys - * 16*10 bytes, 16 bytes per entry for function key shortcuts Control+F1 to Control+F10 - * 16*5 bytes, 16 bytes per entry for control VF1-VF5 - * - * For whatever reason, the buffer is copied to the DOS buffer +1, meaning that on write it skips the 0x08 byte. */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - - /* function keys F1-F10 */ - for (unsigned int f=0;f < 10;f++,ofs += 16) - INTDC_STORE_FUNCDEC(ofs,pc98_func_key[f]); - /* VF1-VF5 */ - for (unsigned int f=0;f < 5;f++,ofs += 16) - INTDC_STORE_FUNCDEC(ofs,pc98_vfunc_key[f]); - /* function keys Shift+F1 - Shift+F10 */ - for (unsigned int f=0;f < 10;f++,ofs += 16) - INTDC_STORE_FUNCDEC(ofs,pc98_func_key_shortcut[f]); - /* VF1-VF5 */ - for (unsigned int f=0;f < 5;f++,ofs += 16) - INTDC_STORE_FUNCDEC(ofs,pc98_vfunc_key_shortcut[f]); - /* editor keys */ - for (unsigned int f=0;f < 11;f++,ofs += 6) - INTDC_STORE_EDITDEC(ofs,pc98_editor_key_escapes[f]); - /* function keys Control+F1 - Control+F10 */ - for (unsigned int f=0;f < 10;f++,ofs += 16) - INTDC_STORE_FUNCDEC(ofs,pc98_func_key_ctrl[f]); - /* VF1-VF5 */ - for (unsigned int f=0;f < 5;f++,ofs += 16) - INTDC_STORE_FUNCDEC(ofs,pc98_vfunc_key_ctrl[f]); - - goto done; - } - goto unknown; - case 0x0D: /* CL=0x0D General entry point to set function key state */ - if (reg_ax == 0xFF) { /* Extended version of the API when AX == 0, DS:DX = data to set */ - /* DS:DX contains - * 16*10 bytes, 16 bytes per entry for function keys F1-F10 - * 16*5 bytes, 16 bytes per entry for VF1-VF5 - * 16*10 bytes, 16 bytes per entry for function key shortcuts Shift+F1 to Shift+F10 - * 16*5 bytes, 16 bytes per entry for shift VF1-VF5 - * 6*11 bytes, 6 bytes per entry for editor keys - * 16*10 bytes, 16 bytes per entry for function key shortcuts Control+F1 to Control+F10 - * 16*5 bytes, 16 bytes per entry for control VF1-VF5 - * - * For whatever reason, the buffer is copied to the DOS buffer +1, meaning that on write it skips the 0x08 byte. */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - - /* function keys F1-F10 */ - for (unsigned int f=0;f < 10;f++,ofs += 16) - INTDC_LOAD_FUNCDEC(pc98_func_key[f],ofs); - /* VF1-VF5 */ - for (unsigned int f=0;f < 5;f++,ofs += 16) - INTDC_LOAD_FUNCDEC(pc98_vfunc_key[f],ofs); - /* function keys Shift+F1 - Shift+F10 */ - for (unsigned int f=0;f < 10;f++,ofs += 16) - INTDC_LOAD_FUNCDEC(pc98_func_key_shortcut[f],ofs); - /* Shift+VF1 - Shift+VF5 */ - for (unsigned int f=0;f < 5;f++,ofs += 16) - INTDC_LOAD_FUNCDEC(pc98_vfunc_key_shortcut[f],ofs); - /* editor keys */ - for (unsigned int f=0;f < 11;f++,ofs += 6) - INTDC_LOAD_EDITDEC(pc98_editor_key_escapes[f],ofs); - /* function keys Control+F1 - Control+F10 */ - for (unsigned int f=0;f < 10;f++,ofs += 16) - INTDC_LOAD_FUNCDEC(pc98_func_key_ctrl[f],ofs); - /* Shift+VF1 - Shift+VF5 */ - for (unsigned int f=0;f < 5;f++,ofs += 16) - INTDC_LOAD_FUNCDEC(pc98_vfunc_key_ctrl[f],ofs); - - update_pc98_function_row(pc98_function_row_mode,true); - goto done; - } - else if (reg_ax >= 0x01 && reg_ax <= 0x0A) { /* Read individual function keys, DS:DX = data to set */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_LOAD_FUNCDEC(pc98_func_key[reg_ax - 0x01],ofs); - goto done; - } - else if (reg_ax >= 0x0B && reg_ax <= 0x14) { /* Read individual shift + function keys, DS:DX = data to set */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_LOAD_FUNCDEC(pc98_func_key_shortcut[reg_ax - 0x0B],ofs); - goto done; - } - else if (reg_ax >= 0x15 && reg_ax <= 0x1F) { /* Read individual editor keys, DS:DX = data to set */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_LOAD_EDITDEC(pc98_editor_key_escapes[reg_ax - 0x15],ofs); - goto done; - } - else if (reg_ax >= 0x20 && reg_ax <= 0x24) { /* Read VF1-VF5 keys, DS:DX = data to store to */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_LOAD_FUNCDEC(pc98_vfunc_key[reg_ax - 0x20],ofs); - goto done; - } - else if (reg_ax >= 0x25 && reg_ax <= 0x29) { /* Read shift VF1-VF5 keys, DS:DX = data to store to */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_LOAD_FUNCDEC(pc98_vfunc_key_shortcut[reg_ax - 0x25],ofs); - goto done; - } - else if (reg_ax >= 0x2A && reg_ax <= 0x33) { /* Read individual function keys, DS:DX = data to store to */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_LOAD_FUNCDEC(pc98_func_key_ctrl[reg_ax - 0x2A],ofs); - goto done; - } - else if (reg_ax >= 0x34 && reg_ax <= 0x38) { /* Read control VF1-VF5 keys, DS:DX = data to store to */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - INTDC_LOAD_FUNCDEC(pc98_vfunc_key_ctrl[reg_ax - 0x34],ofs); - goto done; - } - else if (reg_ax == 0x00) { /* Read all state, DS:DX = data to set */ - /* DS:DX contains - * 16*10 bytes, 16 bytes per entry for function keys F1-F10 - * 16*10 bytes, 16 bytes per entry for function key shortcuts Shift+F1 to Shift+F10 - * 6*11 bytes, 6 bytes per entry of editor keys (INS, DEL, etc) that match a specific scan code range - * - * For whatever reason, the buffer is copied to the DOS buffer +1, meaning that on write it skips the 0x08 byte. */ - Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; - - /* function keys F1-F10 */ - for (unsigned int f=0;f < 10;f++,ofs += 16) - INTDC_LOAD_FUNCDEC(pc98_func_key[f],ofs); - /* function keys Shift+F1 - Shift+F10 */ - for (unsigned int f=0;f < 10;f++,ofs += 16) - INTDC_LOAD_FUNCDEC(pc98_func_key_shortcut[f],ofs); - /* editor keys */ - for (unsigned int f=0;f < 11;f++,ofs += 6) - INTDC_LOAD_EDITDEC(pc98_editor_key_escapes[f],ofs); - - update_pc98_function_row(pc98_function_row_mode,true); - goto done; - } - goto unknown; - case 0x0F: - if (reg_ax == 0) { /* inhibit Control+Fn shortcuts */ - real_writeb(0x60,0x10C,real_readb(0x60,0x10C) | 0x01); - goto done; - } - else if (reg_ax == 1) { /* enable Control+Fn shortcuts */ - real_writeb(0x60,0x10C,real_readb(0x60,0x10C) & (~0x01)); - goto done; - } - goto unknown; - case 0x10: - if (reg_ah == 0x00) { /* CL=0x10 AH=0x00 DL=char write char to CON */ - PC98_INTDC_WriteChar(reg_dl); - goto done; - } - else if (reg_ah == 0x01) { /* CL=0x10 AH=0x01 DS:DX write string to CON */ - /* According to the example at http://tepe.tec.fukuoka-u.ac.jp/HP98/studfile/grth/gt10.pdf - * the string ends in '$' just like the main DOS string output function. */ - uint16_t ofs = reg_dx; - do { - unsigned char c = real_readb(SegValue(ds),ofs++); - if (c == '$') break; - PC98_INTDC_WriteChar(c); - } while (1); - goto done; - } - else if (reg_ah == 0x02) { /* CL=0x10 AH=0x02 DL=attribute set console output attribute */ - /* Ref: https://nas.jmc/jmcs/docs/browse/Computer/Platform/PC%2c%20NEC%20PC%2d98/Collections/Undocumented%209801%2c%209821%20Volume%202%20%28webtech.co.jp%29%20English%20translation/memdos%2eenglish%2dgoogle%2dtranslate%2etxt - * - * DL is the attribute byte (in the format written directly to video RAM, not the ANSI code) - * - * NTS: Reverse engineering INT DCh shows it sets both 71Dh and 73Ch as below */ - real_writeb(0x60,0x11D,reg_dl); - real_writeb(0x60,0x13C,reg_dx); - goto done; - } - else if (reg_ah == 0x03) { /* CL=0x10 AH=0x03 DL=X-coord DH=Y-coord set cursor position */ - void INTDC_CL10h_AH03h(uint16_t raw); - INTDC_CL10h_AH03h(reg_dx); - goto done; - } - else if (reg_ah == 0x04) { /* CL=0x10 AH=0x04 Move cursor down one line */ - void INTDC_CL10h_AH04h(void); - INTDC_CL10h_AH04h(); - goto done; - } - else if (reg_ah == 0x05) { /* CL=0x10 AH=0x05 Move cursor up one line */ - void INTDC_CL10h_AH05h(void); - INTDC_CL10h_AH05h(); - goto done; - } - else if (reg_ah == 0x06) { /* CL=0x10 AH=0x06 DX=count Move cursor up multiple lines */ - void INTDC_CL10h_AH06h(uint16_t count); - INTDC_CL10h_AH06h(reg_dx); - goto done; - } - else if (reg_ah == 0x07) { /* CL=0x10 AH=0x07 DX=count Move cursor down multiple lines */ - void INTDC_CL10h_AH07h(uint16_t count); - INTDC_CL10h_AH07h(reg_dx); - goto done; - } - else if (reg_ah == 0x08) { /* CL=0x10 AH=0x08 DX=count Move cursor right multiple lines */ - void INTDC_CL10h_AH08h(uint16_t count); - INTDC_CL10h_AH08h(reg_dx); - goto done; - } - else if (reg_ah == 0x09) { /* CL=0x10 AH=0x09 DX=count Move cursor left multiple lines */ - void INTDC_CL10h_AH09h(uint16_t count); - INTDC_CL10h_AH09h(reg_dx); - goto done; - } - else if (reg_ah == 0x0a) { /* CL=0x10 AH=0x0A DL=pattern Erase screen */ - void INTDC_CL10h_AH0Ah(uint16_t pattern); - INTDC_CL10h_AH0Ah(reg_dx); - goto done; - } - else if (reg_ah == 0x0b) { /* CL=0x10 AH=0x0B DL=pattern Erase lines */ - void INTDC_CL10h_AH0Bh(uint16_t pattern); - INTDC_CL10h_AH0Bh(reg_dx); - goto done; - } - else if (reg_ah == 0x0c) { /* CL=0x10 AH=0x0C DL=count Insert lines */ - void INTDC_CL10h_AH0Ch(uint16_t count); - INTDC_CL10h_AH0Ch(reg_dx); - goto done; - } - else if (reg_ah == 0x0d) { /* CL=0x10 AH=0x0D DL=count Erase lines */ - void INTDC_CL10h_AH0Dh(uint16_t count); - INTDC_CL10h_AH0Dh(reg_dx); - goto done; - } - else if (reg_ah == 0x0E) { /* CL=0x10 AH=0x0E DL=mode Change character mode */ - void pc98_set_char_mode(bool mode); - pc98_set_char_mode(reg_dl == 0); - goto done; - } - goto unknown; - default: /* some compilers don't like not having a default case */ - goto unknown; - } - -done: - return CBRET_NONE; - -unknown: - LOG_MSG("PC-98 INT DCh unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - - return CBRET_NONE; -} - -static Bitu INTF2_PC98_Handler(void) { - LOG_MSG("PC-98 INT F2h unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - - return CBRET_NONE; -} - -extern void lio_read_parameter(); -extern uint8_t PC98_BIOS_LIO_GINIT(); -extern uint8_t PC98_BIOS_LIO_GSCREEN(); -extern uint8_t PC98_BIOS_LIO_GVIEW(); -extern uint8_t PC98_BIOS_LIO_GCOLOR1(); -extern uint8_t PC98_BIOS_LIO_GCOLOR2(); -extern uint8_t PC98_BIOS_LIO_GCLS(); -extern uint8_t PC98_BIOS_LIO_GPSET(); -extern uint8_t PC98_BIOS_LIO_GLINE(); -extern uint8_t PC98_BIOS_LIO_GCIRCLE(); -extern uint8_t PC98_BIOS_LIO_GPAINT1(); -extern uint8_t PC98_BIOS_LIO_GPAINT2(); -extern uint8_t PC98_BIOS_LIO_GGET(); -extern uint8_t PC98_BIOS_LIO_GPUT1(); -extern uint8_t PC98_BIOS_LIO_GPUT2(); -extern uint8_t PC98_BIOS_LIO_GPOINT2(); - -// for more information see [https://ia801305.us.archive.org/8/items/PC9800TechnicalDataBookBIOS1992/PC-9800TechnicalDataBook_BIOS_1992_text.pdf] -static Bitu PC98_BIOS_LIO(void) { - uint8_t ret = 0; - const char *call_name = "?"; - - lio_read_parameter(); - switch (reg_al) { - case 0xA0: // GINIT - ret = PC98_BIOS_LIO_GINIT(); - break; - case 0xA1: // GSCREEN - ret = PC98_BIOS_LIO_GSCREEN(); - break; - case 0xA2: // GVIEW - ret = PC98_BIOS_LIO_GVIEW(); - break; - case 0xA3: // GCOLOR1 - ret = PC98_BIOS_LIO_GCOLOR1(); - break; - case 0xA4: // GCOLOR2 - ret = PC98_BIOS_LIO_GCOLOR2(); - break; - case 0xA5: // GCLS - ret = PC98_BIOS_LIO_GCLS(); - break; - case 0xA6: // GPSET - ret = PC98_BIOS_LIO_GPSET(); - break; - case 0xA7: // GLINE - ret = PC98_BIOS_LIO_GLINE(); - break; - case 0xA8: // GCIRCLE - ret = PC98_BIOS_LIO_GCIRCLE(); - break; - case 0xA9: // GPAINT1 - ret = PC98_BIOS_LIO_GPAINT1(); - break; - case 0xAA: // GPAINT2 - ret = PC98_BIOS_LIO_GPAINT2(); - break; - case 0xAB: // GGET - ret = PC98_BIOS_LIO_GGET(); - break; - case 0xAC: // GPUT1 - ret = PC98_BIOS_LIO_GPUT1(); - break; - case 0xAD: // GPUT2 - ret = PC98_BIOS_LIO_GPUT2(); - break; - case 0xAE: // GROLL - call_name = "GROLL"; - goto unknown; - case 0xAF: // GPOINT2 - ret = PC98_BIOS_LIO_GPOINT2(); - break; - case 0xCE: // GCOPY - call_name = "GCOPY"; - goto unknown; - case 0x00: // GRAPH BIO - call_name = "GRAPH BIO"; - goto unknown; - default: - unknown: - /* on entry, AL (from our BIOS code) is set to the call number that lead here */ - LOG_MSG("PC-98 BIOS LIO graphics call 0x%02x '%s' with AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", - reg_al, - call_name, - reg_ax, - reg_bx, - reg_cx, - reg_dx, - reg_si, - reg_di, - SegValue(ds), - SegValue(es)); - break; - }; - // from Yksoft1's patch - reg_ah = ret; - - return CBRET_NONE; -} - - -extern bool enable_weitek; - -static Bitu INT11_Handler(void) { - if (enable_weitek) reg_eax = (1u << 24u)/*Weitek math coprocessor present*/; - reg_ax=mem_readw(BIOS_CONFIGURATION); - return CBRET_NONE; -} -/* - * Define the following define to 1 if you want dosbox-x to check - * the system time every 5 seconds and adjust 1/2 a second to sync them. - */ -#ifndef DOSBOX_CLOCKSYNC -#define DOSBOX_CLOCKSYNC 0 -#endif - -uint32_t BIOS_HostTimeSync(uint32_t /*ticks*/) { -#if 0//DISABLED TEMPORARILY - uint32_t milli = 0; -#if defined(DB_HAVE_CLOCK_GETTIME) && ! defined(WIN32) - struct timespec tp; - clock_gettime(CLOCK_REALTIME,&tp); - - struct tm *loctime; - loctime = localtime(&tp.tv_sec); - milli = (uint32_t) (tp.tv_nsec / 1000000); -#else - /* Setup time and date */ - struct timeb timebuffer; - ftime(&timebuffer); - - const struct tm *loctime; - loctime = localtime (&timebuffer.time); - milli = (uint32_t) timebuffer.millitm; -#endif - /* - loctime->tm_hour = 23; - loctime->tm_min = 59; - loctime->tm_sec = 45; - loctime->tm_mday = 28; - loctime->tm_mon = 2-1; - loctime->tm_year = 2007 - 1900; - */ - -// FIXME: Why is the BIOS filling in the DOS kernel's date? That should be done when DOS boots! - dos.date.day=(uint8_t)loctime->tm_mday; - dos.date.month=(uint8_t)loctime->tm_mon+1; - dos.date.year=(uint16_t)loctime->tm_year+1900; - - uint32_t nticks=(uint32_t)(((double)( - (unsigned int)loctime->tm_hour*3600u*1000u+ - (unsigned int)loctime->tm_min*60u*1000u+ - (unsigned int)loctime->tm_sec*1000u+ - milli))*(((double)PIT_TICK_RATE/65536.0)/1000.0)); - - /* avoid stepping back from off by one errors */ - if (nticks == (ticks - 1u)) - nticks = ticks; - - return nticks; -#endif - return 0; -} - -// TODO: make option -bool enable_bios_timer_synchronize_keyboard_leds = true; - -void KEYBOARD_SetLEDs(uint8_t bits); - -void BIOS_KEYBOARD_SetLEDs(Bitu state) { - Bitu x = mem_readb(BIOS_KEYBOARD_LEDS); - - x &= ~7u; - x |= (state & 7u); - mem_writeb(BIOS_KEYBOARD_LEDS,x); - KEYBOARD_SetLEDs(state); -} - -/* PC-98 IRQ 0 system timer */ -static Bitu INT8_PC98_Handler(void) { - uint16_t counter = mem_readw(0x58A) - 1; - mem_writew(0x58A,counter); - - /* NTS 2018/02/23: I just confirmed from the ROM BIOS of an actual - * PC-98 system that this implementation and Neko Project II - * are 100% accurate to what the BIOS actually does. - * INT 07h really is the "timer tick" interrupt called - * from INT 08h / IRQ 0, and the BIOS really does call - * INT 1Ch AH=3 from INT 08h if the tick count has not - * yet reached zero. - * - * I'm guessing NEC's BIOS developers invented this prior - * to the Intel 80286 and it's INT 07h - * "Coprocessor not present" exception. */ - - if (counter == 0) { - /* mask IRQ 0 */ - IO_WriteB(0x02,IO_ReadB(0x02) | 0x01); - /* ack IRQ 0 */ - IO_WriteB(0x00,0x20); - /* INT 07h */ - CPU_Interrupt(7,CPU_INT_SOFTWARE,reg_eip); - } - else { - /* ack IRQ 0 */ - IO_WriteB(0x00,0x20); - /* make sure it continues ticking */ - PC98_Interval_Timer_Continue(); - } - - return CBRET_NONE; -} - - -extern bool cmos_sync_flag; -extern uint8_t cmos_sync_sec,cmos_sync_min,cmos_sync_hour; - -extern bool sync_time, manualtime; -bool sync_time_timerrate_warning = false; - -uint32_t PIT0_GetAssignedCounter(void); - -static Bitu INT8_Handler(void) { - /* Increase the bios tick counter */ - uint32_t value = mem_readd(BIOS_TIMER) + 1; - if(value >= 0x1800B0) { - // time wrap at midnight - mem_writeb(BIOS_24_HOURS_FLAG,mem_readb(BIOS_24_HOURS_FLAG)+1); - value=0; - } - - /* Legacy BIOS behavior: This isn't documented at all but most BIOSes - check the BIOS data area for LED keyboard status. If it sees that - value change, then it sends it to the keyboard. This is why on - older DOS machines you could change LEDs by writing to 40:17. - We have to emulate this also because Windows 3.1/9x seems to rely on - it when handling the keyboard from its own driver. Their driver does - hook the keyboard and handles keyboard I/O by itself, but it still - allows the BIOS to do the keyboard magic from IRQ 0 (INT 8h). Yech. */ - if (enable_bios_timer_synchronize_keyboard_leds) { - Bitu should_be = (mem_readb(BIOS_KEYBOARD_STATE) >> 4) & 7; - Bitu led_state = (mem_readb(BIOS_KEYBOARD_LEDS) & 7); - - if (should_be != led_state) - BIOS_KEYBOARD_SetLEDs(should_be); - } - - if (sync_time && cmos_sync_flag) { - value = (uint32_t)((cmos_sync_hour*3600+cmos_sync_min*60+cmos_sync_sec)*(float)PIT_TICK_RATE/65536.0); - cmos_sync_flag = false; - } -#if 0//DISABLED TEMPORARILY - if (sync_time&&!manualtime) { -#if DOSBOX_CLOCKSYNC - static bool check = false; - if((value %50)==0) { - if(((value %100)==0) && check) { - check = false; - time_t curtime;struct tm *loctime; - curtime = time (NULL);loctime = localtime (&curtime); - uint32_t ticksnu = (uint32_t)((loctime->tm_hour*3600+loctime->tm_min*60+loctime->tm_sec)*(float)PIT_TICK_RATE/65536.0); - int32_t bios = value;int32_t tn = ticksnu; - int32_t diff = tn - bios; - if(diff>0) { - if(diff < 18) { diff = 0; } else diff = 9; - } else { - if(diff > -18) { diff = 0; } else diff = -9; - } - - value += diff; - } else if((value%100)==50) check = true; - } -#endif - - /* synchronize time=true is based around the assumption - * that the timer is left ticking at the standard 18.2Hz - * rate. If that is not true, and this IRQ0 handler is - * being called faster, then synchronization will not - * work properly. - * - * Two 1996 demoscene entries sl_fokus.zip and sl_haloo.zip - * are known to program the timer to run faster (58Hz and - * 150Hz) yet use BIOS_TIMER from the BIOS data area to - * track the passage of time. Synchronizing time that way - * will only lead to BIOS_TIMER values that repeat or go - * backwards and will break the demo. */ - if (PIT0_GetAssignedCounter() >= 0xFFFF/*Should be 0x10000 but we'll accept some programs might write 0xFFFF*/) { - uint32_t BIOS_HostTimeSync(uint32_t ticks); - value = BIOS_HostTimeSync(value); - - if (sync_time_timerrate_warning) { - sync_time_timerrate_warning = false; - LOG(LOG_MISC,LOG_WARN)("IRQ0 timer rate restored to 18.2Hz and synchronize time=true, resuming synchronization. BIOS_TIMER may jump backwards suddenly."); - } - } - else { - if (!sync_time_timerrate_warning) { - /* Okay, you changed the tick rate. That affects BIOS_TIMER - * and therefore counts as manual time. Sorry. */ - sync_time_timerrate_warning = true; - LOG(LOG_MISC,LOG_WARN)("IRQ0 timer rate is not 18.2Hz and synchronize time=true, disabling synchronization until normal rate restored."); - } - } - } -#endif - mem_writed(BIOS_TIMER,value); - - if(bootdrive>=0) { -#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && (defined(C_SDL2) || defined(SDL_DOSBOX_X_SPECIAL)) - SetIMPosition(); -#endif - } else if (IS_DOSV && DOSV_CheckCJKVideoMode()) { - INT8_DOSV(); - } else if(J3_IsJapanese()) { - INT8_J3(); - } else if (IS_DOS_CJK) { -#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && (defined(C_SDL2) || defined(SDL_DOSBOX_X_SPECIAL)) - SetIMPosition(); -#endif - } - - /* decrement FDD motor timeout counter; roll over on earlier PC, stop at zero on later PC */ - uint8_t val = mem_readb(BIOS_DISK_MOTOR_TIMEOUT); - if (val || !IS_EGAVGA_ARCH) mem_writeb(BIOS_DISK_MOTOR_TIMEOUT,val-1); - /* clear FDD motor bits when counter reaches zero */ - if (val == 1) mem_writeb(BIOS_DRIVE_RUNNING,mem_readb(BIOS_DRIVE_RUNNING) & 0xF0); - return CBRET_NONE; -} -#undef DOSBOX_CLOCKSYNC - -static Bitu INT1C_Handler(void) { - return CBRET_NONE; -} - -static Bitu INT12_Handler(void) { - reg_ax=mem_readw(BIOS_MEMORY_SIZE); - return CBRET_NONE; -} - -static Bitu INT17_Handler(void) { - if (reg_ah > 0x2 || reg_dx > 0x2) { // 0-2 printer port functions - // and no more than 3 parallel ports - LOG_MSG("BIOS INT17: Unhandled call AH=%2X DX=%4x",reg_ah,reg_dx); - return CBRET_NONE; - } - - switch(reg_ah) { - case 0x00: // PRINTER: Write Character - if(parallelPortObjects[reg_dx]) { - if(parallelPortObjects[reg_dx]->Putchar(reg_al)) - reg_ah=parallelPortObjects[reg_dx]->getPrinterStatus(); - else reg_ah=1; - } - break; - case 0x01: // PRINTER: Initialize port - if(parallelPortObjects[reg_dx]) { - parallelPortObjects[reg_dx]->initialize(); - reg_ah=parallelPortObjects[reg_dx]->getPrinterStatus(); - } - break; - case 0x02: // PRINTER: Get Status - if(parallelPortObjects[reg_dx]) - reg_ah=parallelPortObjects[reg_dx]->getPrinterStatus(); - //LOG_MSG("printer status: %x",reg_ah); - break; - case 0x20: /* Some sort of printerdriver install check*/ - break; - case 0x50: // Printer BIOS for AX - if (!IS_JEGA_ARCH) break; - switch (reg_al) { - case 0x00:// Set JP/US mode in PRT BIOS - LOG(LOG_BIOS, LOG_NORMAL)("AX PRT BIOS 5000h is called. (not implemented)"); - reg_al = 0x01; // Return error (not implemented) - break; - case 0x01:// Get JP/US mode in PRT BIOS - reg_al = 0x01; // Return US mode (not implemented) - break; - default: - LOG(LOG_BIOS, LOG_ERROR)("Unhandled AX Function 50%2X", reg_al); - break; - } - break; - } - return CBRET_NONE; -} - -static bool INT14_Wait(uint16_t port, uint8_t mask, uint8_t timeout, uint8_t* retval) { - double starttime = PIC_FullIndex(); - double timeout_f = timeout * 1000.0; - while (((*retval = IO_ReadB(port)) & mask) != mask) { - if (starttime < (PIC_FullIndex() - timeout_f)) { - return false; - } - CALLBACK_Idle(); - } - return true; -} - -static Bitu INT4B_Handler(void) { - /* TODO: This is where the Virtual DMA specification is accessed on modern systems. - * When we implement that, move this to EMM386 emulation code. */ - - if (reg_ax >= 0x8102 && reg_ax <= 0x810D) { - LOG(LOG_MISC,LOG_DEBUG)("Guest OS attempted Virtual DMA specification call (INT 4Bh AX=%04x BX=%04x CX=%04x DX=%04x", - reg_ax,reg_bx,reg_cx,reg_dx); - } - else if (reg_ah == 0x80) { - LOG(LOG_MISC,LOG_DEBUG)("Guest OS attempted IBM SCSI interface call"); - } - else if (reg_ah <= 0x02) { - LOG(LOG_MISC,LOG_DEBUG)("Guest OS attempted TI Professional PC parallel port function AH=%02x",reg_ah); - } - else { - LOG(LOG_MISC,LOG_DEBUG)("Guest OS attempted unknown INT 4Bh call AX=%04x",reg_ax); - } - - /* Oh, I'm just a BIOS that doesn't know what the hell you're doing. CF=1 */ - CALLBACK_SCF(true); - return CBRET_NONE; -} - -static Bitu INT14_Handler(void) { - if (reg_ah > 0x3 || reg_dx > 0x3) { // 0-3 serial port functions - // and no more than 4 serial ports - LOG_MSG("BIOS INT14: Unhandled call AH=%2X DX=%4x",reg_ah,reg_dx); - return CBRET_NONE; - } - - uint16_t port = real_readw(0x40,reg_dx * 2u); // DX is always port number - uint8_t timeout = mem_readb((PhysPt)((unsigned int)BIOS_COM1_TIMEOUT + (unsigned int)reg_dx)); - if (port==0) { - LOG(LOG_BIOS,LOG_NORMAL)("BIOS INT14: port %d does not exist.",reg_dx); - return CBRET_NONE; - } - switch (reg_ah) { - case 0x00: { - // Initialize port - // Parameters: Return: - // AL: port parameters AL: modem status - // AH: line status - - // set baud rate - Bitu baudrate = 9600u; - uint16_t baudresult; - Bitu rawbaud=(Bitu)reg_al>>5u; - - if (rawbaud==0){ baudrate=110u;} - else if (rawbaud==1){ baudrate=150u;} - else if (rawbaud==2){ baudrate=300u;} - else if (rawbaud==3){ baudrate=600u;} - else if (rawbaud==4){ baudrate=1200u;} - else if (rawbaud==5){ baudrate=2400u;} - else if (rawbaud==6){ baudrate=4800u;} - else if (rawbaud==7){ baudrate=9600u;} - - baudresult = (uint16_t)(115200u / baudrate); - - IO_WriteB(port+3u, 0x80u); // enable divider access - IO_WriteB(port, (uint8_t)baudresult&0xffu); - IO_WriteB(port+1u, (uint8_t)(baudresult>>8u)); - - // set line parameters, disable divider access - IO_WriteB(port+3u, reg_al&0x1Fu); // LCR - - // disable interrupts - IO_WriteB(port+1u, 0u); // IER - - // get result - reg_ah=IO_ReadB(port+5u)&0xffu; - reg_al=IO_ReadB(port+6u)&0xffu; - CALLBACK_SCF(false); - break; - } - case 0x01: // Transmit character - // Parameters: Return: - // AL: character AL: unchanged - // AH: 0x01 AH: line status from just before the char was sent - // (0x80 | unpredicted) in case of timeout - // [undoc] (0x80 | line status) in case of tx timeout - // [undoc] (0x80 | modem status) in case of dsr/cts timeout - - // set DTR & RTS on - IO_WriteB(port+4u,0x3u); - // wait for DSR & CTS - if (INT14_Wait(port+6u, 0x30u, timeout, ®_ah)) { - // wait for TX buffer empty - if (INT14_Wait(port+5u, 0x20u, timeout, ®_ah)) { - // finally send the character - IO_WriteB(port,reg_al); - } else - reg_ah |= 0x80u; - } else // timed out - reg_ah |= 0x80u; - - CALLBACK_SCF(false); - break; - case 0x02: // Read character - // Parameters: Return: - // AH: 0x02 AL: received character - // [undoc] will be trashed in case of timeout - // AH: (line status & 0x1E) in case of success - // (0x80 | unpredicted) in case of timeout - // [undoc] (0x80 | line status) in case of rx timeout - // [undoc] (0x80 | modem status) in case of dsr timeout - - // set DTR on - IO_WriteB(port+4u,0x1u); - - // wait for DSR - if (INT14_Wait(port+6, 0x20, timeout, ®_ah)) { - // wait for character to arrive - if (INT14_Wait(port+5, 0x01, timeout, ®_ah)) { - reg_ah &= 0x1E; - reg_al = IO_ReadB(port); - } else - reg_ah |= 0x80; - } else - reg_ah |= 0x80; - - CALLBACK_SCF(false); - break; - case 0x03: // get status - reg_ah=IO_ReadB(port+5u)&0xffu; - reg_al=IO_ReadB(port+6u)&0xffu; - CALLBACK_SCF(false); - break; - - } - return CBRET_NONE; -} - -Bits HLT_Decode(void); -void KEYBOARD_AUX_Write(Bitu val); -unsigned char KEYBOARD_AUX_GetType(); -unsigned char KEYBOARD_AUX_DevStatus(); -unsigned char KEYBOARD_AUX_Resolution(); -unsigned char KEYBOARD_AUX_SampleRate(); -void KEYBOARD_ClrBuffer(void); -void KEYBOARD_AUX_LowerIRQ(); - -static Bitu INT15_Handler(void) { - if( ( machine==MCH_AMSTRAD ) && ( reg_ah<0x07 ) ) { - switch(reg_ah) { - case 0x00: - // Read/Reset Mouse X/Y Counts. - // CX = Signed X Count. - // DX = Signed Y Count. - // CC. - case 0x01: - // Write NVR Location. - // AL = NVR Address to be written (0-63). - // BL = NVR Data to be written. - - // AH = Return Code. - // 00 = NVR Written Successfully. - // 01 = NVR Address out of range. - // 02 = NVR Data write error. - // CC. - case 0x02: - // Read NVR Location. - // AL = NVR Address to be read (0-63). - - // AH = Return Code. - // 00 = NVR read successfully. - // 01 = NVR Address out of range. - // 02 = NVR checksum error. - // AL = Byte read from NVR. - // CC. - case 0x03: - // Write VDU Colour Plane Write Register. - vga.amstrad.write_plane = reg_al & 0x0F; - CALLBACK_SCF(false); - break; - case 0x04: - // Write VDU Colour Plane Read Register. - vga.amstrad.read_plane = reg_al & 0x03; - CALLBACK_SCF(false); - break; - case 0x05: - // Write VDU Graphics Border Register. - vga.amstrad.border_color = reg_al & 0x0F; - CALLBACK_SCF(false); - break; - case 0x06: - // Return ROS Version Number. - reg_bx = 0x0001; - CALLBACK_SCF(false); - break; - default: - LOG(LOG_BIOS, LOG_NORMAL)("INT15 Unsupported PC1512 Call %02X", reg_ah); - return CBRET_NONE; - } - } - switch (reg_ah) { - case 0x06: - LOG(LOG_BIOS,LOG_NORMAL)("INT15 Unknown Function 6 (Amstrad?)"); - break; - case 0x24: //A20 stuff - switch (reg_al) { - case 0: //Disable a20 - MEM_A20_Enable(false); - reg_ah = 0; //call successful - CALLBACK_SCF(false); //clear on success - break; - case 1: //Enable a20 - MEM_A20_Enable( true ); - reg_ah = 0; //call successful - CALLBACK_SCF(false); //clear on success - break; - case 2: //Query a20 - reg_al = MEM_A20_Enabled() ? 0x1 : 0x0; - reg_ah = 0; //call successful - CALLBACK_SCF(false); - break; - case 3: //Get a20 support - reg_bx = 0x3; //Bitmask, keyboard and 0x92 - reg_ah = 0; //call successful - CALLBACK_SCF(false); - break; - default: - goto unhandled; - } - break; - case 0xC0: /* Get Configuration*/ - CPU_SetSegGeneral(es,biosConfigSeg); - reg_bx = 0; - reg_ah = 0; - CALLBACK_SCF(false); - break; - case 0x4f: /* BIOS - Keyboard intercept */ - /* Carry should be set but let's just set it just in case */ - CALLBACK_SCF(true); - break; - case 0x83: /* BIOS - SET EVENT WAIT INTERVAL */ - { - if(reg_al == 0x01) { /* Cancel it */ - mem_writeb(BIOS_WAIT_FLAG_ACTIVE,0); - IO_Write(0x70,0xb); - IO_Write(0x71,IO_Read(0x71)&~0x40); - CALLBACK_SCF(false); - break; - } - if (mem_readb(BIOS_WAIT_FLAG_ACTIVE)) { - reg_ah=0x80; - CALLBACK_SCF(true); - break; - } - uint32_t count=((uint32_t)reg_cx<<16u)|reg_dx; - mem_writed(BIOS_WAIT_FLAG_POINTER,RealMake(SegValue(es),reg_bx)); - mem_writed(BIOS_WAIT_FLAG_COUNT,count); - mem_writeb(BIOS_WAIT_FLAG_ACTIVE,1); - /* Reprogram RTC to start */ - IO_Write(0x70,0xb); - IO_Write(0x71,IO_Read(0x71)|0x40); - CALLBACK_SCF(false); - } - break; - case 0x84: /* BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS) */ - if (reg_dx == 0x0000) { - // Get Joystick button status - if (JOYSTICK_IsEnabled(0) || JOYSTICK_IsEnabled(1)) { - reg_al = IO_ReadB(0x201)&0xf0; - CALLBACK_SCF(false); - } else { - // dos values - reg_ax = 0x00f0; reg_dx = 0x0201; - CALLBACK_SCF(true); - } - } else if (reg_dx == 0x0001) { - if (JOYSTICK_IsEnabled(0)) { - reg_ax = (uint16_t)(JOYSTICK_GetMove_X(0)*127+128); - reg_bx = (uint16_t)(JOYSTICK_GetMove_Y(0)*127+128); - if(JOYSTICK_IsEnabled(1)) { - reg_cx = (uint16_t)(JOYSTICK_GetMove_X(1)*127+128); - reg_dx = (uint16_t)(JOYSTICK_GetMove_Y(1)*127+128); - } - else { - reg_cx = reg_dx = 0; - } - CALLBACK_SCF(false); - } else if (JOYSTICK_IsEnabled(1)) { - reg_ax = reg_bx = 0; - reg_cx = (uint16_t)(JOYSTICK_GetMove_X(1)*127+128); - reg_dx = (uint16_t)(JOYSTICK_GetMove_Y(1)*127+128); - CALLBACK_SCF(false); - } else { - reg_ax = reg_bx = reg_cx = reg_dx = 0; - CALLBACK_SCF(true); - } - } else { - LOG(LOG_BIOS,LOG_ERROR)("INT15:84:Unknown Bios Joystick functionality."); - } - break; - case 0x86: /* BIOS - WAIT (AT,PS) */ - { - if (mem_readb(BIOS_WAIT_FLAG_ACTIVE)) { - reg_ah=0x83; - CALLBACK_SCF(true); - break; - } - uint8_t t; - uint32_t count=((uint32_t)reg_cx<<16u)|reg_dx; - mem_writed(BIOS_WAIT_FLAG_POINTER,RealMake(0,BIOS_WAIT_FLAG_TEMP)); - mem_writed(BIOS_WAIT_FLAG_COUNT,count); - mem_writeb(BIOS_WAIT_FLAG_ACTIVE,1); - - /* if the user has not set the option, warn if IRQs are masked */ - if (!int15_wait_force_unmask_irq) { - /* make sure our wait function works by unmasking IRQ 2, and IRQ 8. - * (bugfix for 1993 demo Yodel "Mayday" demo. this demo keeps masking IRQ 2 for some stupid reason.) */ - if ((t=IO_Read(0x21)) & (1 << 2)) { - LOG(LOG_BIOS,LOG_ERROR)("INT15:86:Wait: IRQ 2 masked during wait. " - "Consider adding 'int15 wait force unmask irq=true' to your dosbox-x.conf"); - } - if ((t=IO_Read(0xA1)) & (1 << 0)) { - LOG(LOG_BIOS,LOG_ERROR)("INT15:86:Wait: IRQ 8 masked during wait. " - "Consider adding 'int15 wait force unmask irq=true' to your dosbox-x.conf"); - } - } - - /* Reprogram RTC to start */ - IO_Write(0x70,0xb); - IO_Write(0x71,IO_Read(0x71)|0x40); - while (mem_readd(BIOS_WAIT_FLAG_COUNT)) { - if (int15_wait_force_unmask_irq) { - /* make sure our wait function works by unmasking IRQ 2, and IRQ 8. - * (bugfix for 1993 demo Yodel "Mayday" demo. this demo keeps masking IRQ 2 for some stupid reason.) */ - if ((t=IO_Read(0x21)) & (1 << 2)) { - LOG(LOG_BIOS,LOG_WARN)("INT15:86:Wait: IRQ 2 masked during wait. " - "This condition might result in an infinite wait on " - "some BIOSes. Unmasking IRQ to keep things moving along."); - IO_Write(0x21,t & ~(1 << 2)); - } - if ((t=IO_Read(0xA1)) & (1 << 0)) { - LOG(LOG_BIOS,LOG_WARN)("INT15:86:Wait: IRQ 8 masked during wait. " - "This condition might result in an infinite wait on some " - "BIOSes. Unmasking IRQ to keep things moving along."); - IO_Write(0xA1,t & ~(1 << 0)); - } - } - - CALLBACK_Idle(); - } - CALLBACK_SCF(false); - break; - } - case 0x87: /* Copy extended memory */ - { - bool enabled = MEM_A20_Enabled(); - MEM_A20_Enable(true); - Bitu bytes = reg_cx * 2u; - PhysPt data = SegPhys(es)+reg_si; - PhysPt source = (mem_readd(data+0x12u) & 0x00FFFFFFu) + ((unsigned int)mem_readb(data+0x17u)<<24u); - PhysPt dest = (mem_readd(data+0x1Au) & 0x00FFFFFFu) + ((unsigned int)mem_readb(data+0x1Fu)<<24u); - MEM_BlockCopy(dest,source,bytes); - reg_ax = 0x00; - MEM_A20_Enable(enabled); - Segs.limit[cs] = 0xFFFF; - Segs.limit[ds] = 0xFFFF; - Segs.limit[es] = 0xFFFF; - Segs.limit[ss] = 0xFFFF; - CALLBACK_SCF(false); - break; - } - case 0x88: /* SYSTEM - GET EXTENDED MEMORY SIZE (286+) */ - /* This uses the 16-bit value read back from CMOS which is capped at 64MB */ - reg_ax=other_memsystems?0:size_extended; - LOG(LOG_BIOS,LOG_NORMAL)("INT15:Function 0x88 Remaining %04X kb",reg_ax); - CALLBACK_SCF(false); - break; - case 0x89: /* SYSTEM - SWITCH TO PROTECTED MODE */ - { - IO_Write(0x20,0x10);IO_Write(0x21,reg_bh);IO_Write(0x21,0);IO_Write(0x21,0xFF); - IO_Write(0xA0,0x10);IO_Write(0xA1,reg_bl);IO_Write(0xA1,0);IO_Write(0xA1,0xFF); - MEM_A20_Enable(true); - PhysPt table=SegPhys(es)+reg_si; - CPU_LGDT(mem_readw(table+0x8),mem_readd(table+0x8+0x2) & 0xFFFFFF); - CPU_LIDT(mem_readw(table+0x10),mem_readd(table+0x10+0x2) & 0xFFFFFF); - CPU_SET_CRX(0,CPU_GET_CRX(0)|1); - CPU_SetSegGeneral(ds,0x18); - CPU_SetSegGeneral(es,0x20); - CPU_SetSegGeneral(ss,0x28); - Bitu ret = mem_readw(SegPhys(ss)+reg_sp); - reg_sp+=6; //Clear stack of interrupt frame - CPU_SetFlags(0,FMASK_ALL); - reg_ax=0; - CPU_JMP(false,0x30,ret,0); - } - break; - case 0x8A: /* EXTENDED MEMORY SIZE */ - { - Bitu sz = MEM_TotalPages()*4; - if (sz >= 1024) sz -= 1024; - else sz = 0; - reg_ax = sz & 0xFFFF; - reg_dx = sz >> 16; - CALLBACK_SCF(false); - } - break; - case 0x90: /* OS HOOK - DEVICE BUSY */ - case 0x91: /* OS HOOK - DEVICE POST */ - CALLBACK_SCF(false); - reg_ah=0; - break; - case 0xc2: /* BIOS PS2 Pointing Device Support */ - /* TODO: Our reliance on AUX emulation means that at some point, AUX emulation - * must always be enabled if BIOS PS/2 emulation is enabled. Future planned change: - * - * If biosps2=true and aux=true, carry on what we're already doing now: emulate INT 15h by - * directly writing to the AUX port of the keyboard controller. - * - * If biosps2=false, the aux= setting enables/disables AUX emulation as it already does now. - * biosps2=false implies that we're emulating a keyboard controller with AUX but no BIOS - * support for it (however rare that might be). This gives the user of DOSBox-X the means - * to test that scenario especially in case he/she is developing a homebrew OS and needs - * to ensure their code can handle cases like that gracefully. - * - * If biosps2=true and aux=false, AUX emulation is enabled anyway, but the keyboard emulation - * must act as if the AUX port is not there so the guest OS cannot control it. Again, not - * likely on real hardware, but a useful test case for homebrew OS developers. - * - * If you the user set aux=false, then you obviously want to test a system configuration - * where the keyboard controller has no AUX port. If you set biosps2=true, then you want to - * test an OS that uses BIOS functions to setup the "pointing device" but you do not want the - * guest OS to talk directly to the AUX port on the keyboard controller. - * - * Logically that's not likely to happen on real hardware, but we like giving the end-user - * options to play with, so instead, if aux=false and biosps2=true, DOSBox-X should print - * a warning stating that INT 15h mouse emulation with a PS/2 port is nonstandard and may - * cause problems with OSes that need to talk directly to hardware. - * - * It is noteworthy that PS/2 mouse support in MS-DOS mouse drivers as well as Windows 3.x, - * Windows 95, and Windows 98, is carried out NOT by talking directly to the AUX port but - * instead by relying on the BIOS INT 15h functions here to do the dirty work. For those - * scenarios, biosps2=true and aux=false is perfectly safe and does not cause issues. - * - * OSes that communicate directly with the AUX port however (Linux, Windows NT) will not work - * unless aux=true. */ - if (en_bios_ps2mouse) { -// LOG_MSG("INT 15h AX=%04x BX=%04x\n",reg_ax,reg_bx); - switch (reg_al) { - case 0x00: // enable/disable - if (reg_bh==0) { // disable - KEYBOARD_AUX_Write(0xF5); - Mouse_SetPS2State(false); - reg_ah=0; - CALLBACK_SCF(false); - KEYBOARD_ClrBuffer(); - } else if (reg_bh==0x01) { //enable - if (!Mouse_SetPS2State(true)) { - reg_ah=5; - CALLBACK_SCF(true); - break; - } - KEYBOARD_AUX_Write(0xF4); - KEYBOARD_ClrBuffer(); - reg_ah=0; - CALLBACK_SCF(false); - } else { - CALLBACK_SCF(true); - reg_ah=1; - } - break; - case 0x01: // reset - KEYBOARD_AUX_Write(0xFF); - Mouse_SetPS2State(false); - KEYBOARD_ClrBuffer(); - reg_bx=0x00aa; // mouse (BH=device ID BL=value returned by attached device after reset) [http://www.ctyme.com/intr/rb-1597.htm] - LOG_MSG("INT 15h mouse reset\n"); - KEYBOARD_AUX_Write(0xF6); /* set defaults */ - Mouse_SetPS2State(false); - KEYBOARD_ClrBuffer(); - KEYBOARD_AUX_LowerIRQ(); /* HACK: Lower IRQ or else it will persist, which can cause problems with Windows 3.1 stock PS/2 mouse drivers */ - CALLBACK_SCF(false); - reg_ah=0; // must return success. Fall through was well intended but, no, causes an error code that confuses mouse drivers - break; - case 0x05: // initialize - if (reg_bh >= 3 && reg_bh <= 4) { - /* TODO: BIOSes remember this value as the number of bytes to store before - * calling the device callback. Setting this value to "1" is perfectly - * valid if you want a byte-stream like mode (at the cost of one - * interrupt per byte!). Most OSes will call this with BH=3 for standard - * PS/2 mouse protocol. You can also call this with BH=4 for Intellimouse - * protocol support, though testing (so far with VirtualBox) shows the - * device callback still only gets the first three bytes on the stack. - * Contrary to what you might think, the BIOS does not interpret the - * bytes at all. - * - * The source code of CuteMouse 1.9 seems to suggest some BIOSes take - * pains to repack the 4th byte in the upper 8 bits of one of the WORDs - * on the stack in Intellimouse mode at the cost of shifting the W and X - * fields around. I can't seem to find any source on who does that or - * if it's even true, so I disregard the example at this time. - * - * Anyway, you need to store off this value somewhere and make use of - * it in src/ints/mouse.cpp device callback emulation to reframe the - * PS/2 mouse bytes coming from AUX (if aux=true) or emulate the - * re-framing if aux=false to emulate this protocol fully. */ - LOG_MSG("INT 15h mouse initialized to %u-byte protocol\n",reg_bh); - Mouse_PS2SetPacketSize(reg_bh); - KEYBOARD_AUX_Write(0xF6); /* set defaults */ - Mouse_SetPS2State(false); - KEYBOARD_ClrBuffer(); - CALLBACK_SCF(false); - reg_ah=0; - } - else { - CALLBACK_SCF(false); - reg_ah=0x02; /* invalid input */ - } - break; - case 0x02: { // set sampling rate - Mouse_PS2SetSamplingRate(reg_bh); - static const unsigned char tbl[7] = {10,20,40,60,80,100,200}; - KEYBOARD_AUX_Write(0xF3); - if (reg_bh > 6) reg_bh = 6; - KEYBOARD_AUX_Write(tbl[reg_bh]); - KEYBOARD_ClrBuffer(); - CALLBACK_SCF(false); - reg_ah=0; - } break; - case 0x03: // set resolution - KEYBOARD_AUX_Write(0xE8); - KEYBOARD_AUX_Write(reg_bh&3); - KEYBOARD_ClrBuffer(); - CALLBACK_SCF(false); - reg_ah=0; - break; - case 0x04: // get type - reg_bh=KEYBOARD_AUX_GetType(); // ID - KEYBOARD_AUX_LowerIRQ(); /* HACK: Lower IRQ or else it will persist, which can cause problems with Windows 3.1 stock PS/2 mouse drivers */ - LOG_MSG("INT 15h reporting mouse device ID 0x%02x\n",reg_bh); - KEYBOARD_ClrBuffer(); - CALLBACK_SCF(false); - reg_ah=0; - break; - case 0x06: // extended commands - if (reg_bh == 0x00) { - /* Read device status and info. - * Windows 9x does not appear to use this, but Windows NT 3.1 does (prior to entering - * full 32-bit protected mode) */ - CALLBACK_SCF(false); - reg_bx=KEYBOARD_AUX_DevStatus(); - reg_cx=KEYBOARD_AUX_Resolution(); - reg_dx=KEYBOARD_AUX_SampleRate(); - KEYBOARD_AUX_LowerIRQ(); /* HACK: Lower IRQ or else it will persist, which can cause problems with Windows 3.1 stock PS/2 mouse drivers */ - KEYBOARD_ClrBuffer(); - reg_ah=0; - } - else if ((reg_bh==0x01) || (reg_bh==0x02)) { /* set scaling */ - KEYBOARD_AUX_Write(0xE6u+reg_bh-1u); /* 0xE6 1:1 or 0xE7 2:1 */ - KEYBOARD_ClrBuffer(); - CALLBACK_SCF(false); - reg_ah=0; - } else { - CALLBACK_SCF(true); - reg_ah=1; - } - break; - case 0x07: // set callback - Mouse_ChangePS2Callback(SegValue(es),reg_bx); - CALLBACK_SCF(false); - reg_ah=0; - break; - default: - LOG_MSG("INT 15h unknown mouse call AX=%04x\n",reg_ax); - CALLBACK_SCF(true); - reg_ah=1; - break; - } - } - else { - reg_ah=0x86; - CALLBACK_SCF(true); - if ((IS_EGAVGA_ARCH) || (machine==MCH_CGA)) { - /* relict from comparisons, as int15 exits with a retf2 instead of an iret */ - CALLBACK_SZF(false); - } - } - break; - case 0xc3: /* set carry flag so BorlandRTM doesn't assume a VECTRA/PS2 */ - reg_ah=0x86; - CALLBACK_SCF(true); - break; - case 0xc4: /* BIOS POS Program option Select */ - LOG(LOG_BIOS,LOG_NORMAL)("INT15:Function %X called, bios mouse not supported",reg_ah); - CALLBACK_SCF(true); - break; - case 0x53: // APM BIOS - if (APMBIOS) { - /* Windows 98 calls AH=05h CPU IDLE way too much per second, it makes it difficult to see anything important scroll by. - * Rate limit this particular call in the log file. */ - if (reg_al == 0x05) { - APM_log_cpu_idle++; - if (PIC_FullIndex() >= APM_log_cpu_idle_next_report) { - LOG(LOG_BIOS,LOG_DEBUG)("APM BIOS, %lu calls to AX=%04x BX=0x%04x CX=0x%04x\n",(unsigned long)APM_log_cpu_idle,reg_ax,reg_bx,reg_cx); - APM_log_cpu_idle_next_report = PIC_FullIndex() + 1000; - APM_log_cpu_idle = 0; - } - } - else { - LOG(LOG_BIOS,LOG_DEBUG)("APM BIOS call AX=%04x BX=0x%04x CX=0x%04x\n",reg_ax,reg_bx,reg_cx); - } - - switch(reg_al) { - case 0x00: // installation check - reg_ah = 1; // major - reg_al = APM_BIOS_minor_version; // minor - reg_bx = 0x504d; // 'PM' - reg_cx = (APMBIOS_allow_prot16?0x01:0x00) + (APMBIOS_allow_prot32?0x02:0x00); - // 32-bit interface seems to be needed for standby in win95 - CALLBACK_SCF(false); - break; - case 0x01: // connect real mode interface - if(!APMBIOS_allow_realmode) { - LOG_MSG("APM BIOS: OS attempted real-mode connection, which is disabled in your dosbox-x.conf\n"); - reg_ah = 0x86; // APM not present - CALLBACK_SCF(true); - break; - } - if(reg_bx != 0x0) { - reg_ah = 0x09; // unrecognized device ID - CALLBACK_SCF(true); - break; - } - if(!apm_realmode_connected) { // not yet connected - LOG_MSG("APM BIOS: Connected to real-mode interface\n"); - CALLBACK_SCF(false); - APMBIOS_connect_mode = APMBIOS_CONNECT_REAL; - PowerButtonClicks=0; /* BIOSes probably clear whatever hardware register this involves... we'll see */ - APM_ResumeNotificationFromStandby = false; - APM_ResumeNotificationFromSuspend = false; - apm_realmode_connected=true; - } else { - LOG_MSG("APM BIOS: OS attempted to connect to real-mode interface when already connected\n"); - reg_ah = APMBIOS_connected_already_err(); // interface connection already in effect - CALLBACK_SCF(true); - } - APM_BIOS_connected_minor_version = 0; - break; - case 0x02: // connect 16-bit protected mode interface - if(!APMBIOS_allow_prot16) { - LOG_MSG("APM BIOS: OS attempted 16-bit protected mode connection, which is disabled in your dosbox-x.conf\n"); - reg_ah = 0x06; // not supported - CALLBACK_SCF(true); - break; - } - if(reg_bx != 0x0) { - reg_ah = 0x09; // unrecognized device ID - CALLBACK_SCF(true); - break; - } - if(!apm_realmode_connected) { // not yet connected - /* NTS: We use the same callback address for both 16-bit and 32-bit - * because only the DOS callback and RETF instructions are involved, - * which can be executed as either 16-bit or 32-bit code without problems. */ - LOG_MSG("APM BIOS: Connected to 16-bit protected mode interface\n"); - CALLBACK_SCF(false); - reg_ax = INT15_apm_pmentry >> 16; // AX = 16-bit code segment (real mode base) - reg_bx = INT15_apm_pmentry & 0xFFFF; // BX = offset of entry point - reg_cx = INT15_apm_pmentry >> 16; // CX = 16-bit data segment (NTS: doesn't really matter) - reg_si = 0xFFFF; // SI = code segment length - reg_di = 0xFFFF; // DI = data segment length - APMBIOS_connect_mode = APMBIOS_CONNECT_PROT16; - PowerButtonClicks=0; /* BIOSes probably clear whatever hardware register this involves... we'll see */ - APM_ResumeNotificationFromStandby = false; - APM_ResumeNotificationFromSuspend = false; - apm_realmode_connected=true; - } else { - LOG_MSG("APM BIOS: OS attempted to connect to 16-bit protected mode interface when already connected\n"); - reg_ah = APMBIOS_connected_already_err(); // interface connection already in effect - CALLBACK_SCF(true); - } - APM_BIOS_connected_minor_version = 0; - break; - case 0x03: // connect 32-bit protected mode interface - // Note that Windows 98 will NOT talk to the APM BIOS unless the 32-bit protected mode connection is available. - // And if you lie about it in function 0x00 and then fail, Windows 98 will fail with a "Windows protection error". - if(!APMBIOS_allow_prot32) { - LOG_MSG("APM BIOS: OS attempted 32-bit protected mode connection, which is disabled in your dosbox-x.conf\n"); - reg_ah = 0x08; // not supported - CALLBACK_SCF(true); - break; - } - if(reg_bx != 0x0) { - reg_ah = 0x09; // unrecognized device ID - CALLBACK_SCF(true); - break; - } - if(!apm_realmode_connected) { // not yet connected - LOG_MSG("APM BIOS: Connected to 32-bit protected mode interface\n"); - CALLBACK_SCF(false); - /* NTS: We use the same callback address for both 16-bit and 32-bit - * because only the DOS callback and RETF instructions are involved, - * which can be executed as either 16-bit or 32-bit code without problems. */ - reg_ax = INT15_apm_pmentry >> 16; // AX = 32-bit code segment (real mode base) - reg_ebx = INT15_apm_pmentry & 0xFFFF; // EBX = offset of entry point - reg_cx = INT15_apm_pmentry >> 16; // CX = 16-bit code segment (real mode base) - reg_dx = INT15_apm_pmentry >> 16; // DX = data segment (real mode base) (?? what size?) - reg_esi = 0xFFFFFFFF; // ESI = upper word: 16-bit code segment len lower word: 32-bit code segment length - reg_di = 0xFFFF; // DI = data segment length - APMBIOS_connect_mode = APMBIOS_CONNECT_PROT32; - PowerButtonClicks=0; /* BIOSes probably clear whatever hardware register this involves... we'll see */ - APM_ResumeNotificationFromStandby = false; - APM_ResumeNotificationFromSuspend = false; - apm_realmode_connected=true; - } else { - LOG_MSG("APM BIOS: OS attempted to connect to 32-bit protected mode interface when already connected\n"); - reg_ah = APMBIOS_connected_already_err(); // interface connection already in effect - CALLBACK_SCF(true); - } - APM_BIOS_connected_minor_version = 0; - break; - case 0x04: // DISCONNECT INTERFACE - if(reg_bx != 0x0) { - reg_ah = 0x09; // unrecognized device ID - CALLBACK_SCF(true); - break; - } - if(apm_realmode_connected) { - LOG_MSG("APM BIOS: OS disconnected\n"); - CALLBACK_SCF(false); - apm_realmode_connected=false; - } else { - reg_ah = 0x03; // interface not connected - CALLBACK_SCF(true); - } - APM_BIOS_connected_minor_version = 0; - break; - case 0x05: // CPU IDLE - if(!apm_realmode_connected) { - reg_ah = 0x03; - CALLBACK_SCF(true); - break; - } - - // Trigger CPU HLT instruction. - // NTS: For whatever weird reason, NOT emulating HLT makes Windows 95 - // crashy when the APM driver is active! There's something within - // the Win95 kernel that apparently screws up really badly if - // the APM IDLE call returns immediately. The best case scenario - // seems to be that Win95's APM driver has some sort of timing - // logic to it that if it detects an immediate return, immediately - // shuts down and powers off the machine. Windows 98 also seems - // to require a HLT, and will act erratically without it. - // - // Also need to note that the choice of "HLT" is not arbitrary - // at all. The APM BIOS standard mentions CPU IDLE either stopping - // the CPU clock temporarily or issuing HLT as a valid method. - // - // TODO: Make this a dosbox-x.conf configuration option: what do we do - // on APM idle calls? Allow selection between "nothing" "hlt" - // and "software delay". - if (!(reg_flags&0x200)) { - LOG(LOG_BIOS,LOG_WARN)("APM BIOS warning: CPU IDLE called with IF=0, not HLTing\n"); - } - else if (cpudecoder == &HLT_Decode) { /* do not re-execute HLT, it makes DOSBox-X hang */ - LOG_MSG("APM BIOS warning: CPU IDLE HLT within HLT (DOSBox-X core failure)\n"); - } - else { - CPU_HLT(reg_eip); - } - break; - case 0x06: // CPU BUSY - if(!apm_realmode_connected) { - reg_ah = 0x03; - CALLBACK_SCF(true); - break; - } - - /* OK. whatever. system no longer idle */ - CALLBACK_SCF(false); - break; - case 0x07: - if(reg_bx != 0x1) { - reg_ah = 0x09; // wrong device ID - CALLBACK_SCF(true); - break; - } - if(!apm_realmode_connected) { - reg_ah = 0x03; - CALLBACK_SCF(true); - break; - } - switch(reg_cx) { - case 0x1: // standby - LOG(LOG_MISC,LOG_DEBUG)("Guest attempted to set power state to standby"); - APM_BeginSuspendedMode(); - reg_ah = 0x00;//TODO - CALLBACK_SCF(false); - APM_ResumeNotificationFromStandby = true; - break; - case 0x2: // suspend - LOG(LOG_MISC,LOG_DEBUG)("Guest attempted to set power state to suspend"); - APM_BeginSuspendedMode(); - reg_ah = 0x00;//TODO - CALLBACK_SCF(false); - APM_ResumeNotificationFromSuspend = true; - break; - case 0x3: // power off - throw 0; - case 0x4: // last request processing notification (used by Windows ME) - LOG(LOG_MISC,LOG_DEBUG)("Guest is considering whether to accept the last returned APM event"); - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x5: // reject last request (used by Windows ME) - LOG(LOG_MISC,LOG_DEBUG)("Guest has rejected the last APM event"); - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - default: - reg_ah = 0x0A; // invalid parameter value in CX - CALLBACK_SCF(true); - break; - } - break; - case 0x08: // ENABLE/DISABLE POWER MANAGEMENT - if(reg_bx != 0x0 && reg_bx != 0x1) { - reg_ah = 0x09; // unrecognized device ID - CALLBACK_SCF(true); - break; - } else if(!apm_realmode_connected) { - reg_ah = 0x03; - CALLBACK_SCF(true); - break; - } - if(reg_cx==0x0) LOG_MSG("disable APM for device %4x",reg_bx); - else if(reg_cx==0x1) LOG_MSG("enable APM for device %4x",reg_bx); - else { - reg_ah = 0x0A; // invalid parameter value in CX - CALLBACK_SCF(true); - } - break; - case 0x0a: // GET POWER STATUS - if (!apm_realmode_connected) { - reg_ah = 0x03; // interface not connected - CALLBACK_SCF(true); - break; - } - if (reg_bx != 0x0001 && reg_bx != 0x8001) { - reg_ah = 0x09; // unrecognized device ID - CALLBACK_SCF(true); - break; - } - /* FIXME: Allow configuration and shell commands to dictate whether or - * not we emulate a laptop with a battery */ - reg_bh = 0x01; // AC line status (1=on-line) - reg_bl = 0xFF; // Battery status (unknown) - reg_ch = 0x80; // Battery flag (no system battery) - reg_cl = 0xFF; // Remaining battery charge (unknown) - reg_dx = 0xFFFF; // Remaining battery life (unknown) - reg_si = 0; // Number of battery units (if called with reg_bx == 0x8001) - CALLBACK_SCF(false); - break; - case 0x0b: // GET PM EVENT - if (!apm_realmode_connected) { - reg_ah = 0x03; // interface not connected - CALLBACK_SCF(true); - break; - } - // power button? - if (PowerButtonClicks != 0) { // Hardware and BIOSes probably just set a bit somewhere, so act like it - LOG(LOG_MISC,LOG_DEBUG)("Returning APM power button event to guest OS"); - reg_ah = 0x00; // FIXME: The standard doesn't say anything about AH on success - - if (APM_PowerButtonSendsSuspend) - reg_bx = 0x000A;// user pushed a button, wants to suspend the system - else - reg_bx = 0x0009;// user pushed a button, wants to put the system into standby - - reg_cx = 0x0000; - CALLBACK_SCF(false); - PowerButtonClicks = 0; - break; - } - // resume from standby? Windows 98 will spin in a loop for 5+ seconds until it gets this APM message after suspend - if (APM_ResumeNotificationFromStandby) { - LOG(LOG_MISC,LOG_DEBUG)("Returning APM resume from standby notification event to guest OS"); - reg_ah = 0x00; // FIXME: The standard doesn't say anything about AH on success - reg_bx = 0x000B;// System Standby Resume Notification - reg_cx = 0x0000; - CALLBACK_SCF(false); - APM_ResumeNotificationFromStandby = false; - break; - } - // resume from suspend? Windows 98 will spin in a loop for 5+ seconds until it gets this APM message after suspend - if (APM_ResumeNotificationFromSuspend) { - LOG(LOG_MISC,LOG_DEBUG)("Returning APM resume from suspend notification event to guest OS"); - reg_ah = 0x00; // FIXME: The standard doesn't say anything about AH on success - reg_bx = 0x0003;// Normal Resume System Notification - reg_cx = 0x0000; - CALLBACK_SCF(false); - APM_ResumeNotificationFromSuspend = false; - break; - } - // nothing - reg_ah = 0x80; // no power management events pending - CALLBACK_SCF(true); - break; - case 0x0d: - // NTS: NOT implementing this call can cause Windows 98's APM driver to crash on startup - if(reg_bx != 0x0 && reg_bx != 0x1) { - reg_ah = 0x09; // unrecognized device ID - CALLBACK_SCF(true); - break; - } else if(!apm_realmode_connected) { - reg_ah = 0x03; - CALLBACK_SCF(true); - break; - } - if(reg_cx==0x0) { - LOG_MSG("disable APM for device %4x",reg_bx); - CALLBACK_SCF(false); - } - else if(reg_cx==0x1) { - LOG_MSG("enable APM for device %4x",reg_bx); - CALLBACK_SCF(false); - } - else { - reg_ah = 0x0A; // invalid parameter value in CX - CALLBACK_SCF(true); - } - break; - case 0x0e: - if (APM_BIOS_minor_version != 0) { // APM 1.1 or higher only - if(reg_bx != 0x0) { - reg_ah = 0x09; // unrecognized device ID - CALLBACK_SCF(true); - break; - } else if(!apm_realmode_connected) { - reg_ah = 0x03; // interface not connected - CALLBACK_SCF(true); - break; - } - reg_ah = reg_ch; /* we are called with desired version in CH,CL, return actual version in AH,AL */ - reg_al = reg_cl; - if(reg_ah != 1) reg_ah = 1; // major - if(reg_al > APM_BIOS_minor_version) reg_al = APM_BIOS_minor_version; // minor - APM_BIOS_connected_minor_version = reg_al; // what we decided becomes the interface we emulate - LOG_MSG("APM BIOS negotiated to v1.%u",APM_BIOS_connected_minor_version); - CALLBACK_SCF(false); - } - else { // APM 1.0 does not recognize this call - reg_ah = 0x0C; // function not supported - CALLBACK_SCF(true); - } - break; - case 0x0f: - if(reg_bx != 0x0 && reg_bx != 0x1) { - reg_ah = 0x09; // unrecognized device ID - CALLBACK_SCF(true); - break; - } else if(!apm_realmode_connected) { - reg_ah = 0x03; - CALLBACK_SCF(true); - break; - } - if(reg_cx==0x0) { - LOG_MSG("disengage APM for device %4x",reg_bx); - CALLBACK_SCF(false); - } - else if(reg_cx==0x1) { - LOG_MSG("engage APM for device %4x",reg_bx); - CALLBACK_SCF(false); - } - else { - reg_ah = 0x0A; // invalid parameter value in CX - CALLBACK_SCF(true); - } - break; - case 0x10: - if (!apm_realmode_connected) { - reg_ah = 0x03; // interface not connected - CALLBACK_SCF(true); - break; - } - if (reg_bx != 0) { - reg_ah = 0x09; // unrecognized device ID - CALLBACK_SCF(true); - break; - } - reg_ah = 0; - reg_bl = 0; // number of battery units - reg_cx = 0x03; // can enter suspend/standby and will post standby/resume events - CALLBACK_SCF(false); - break; - case 0x13://enable/disable/query timer based requests - // NTS: NOT implementing this call can cause Windows 98's APM driver to crash on startup - if (!apm_realmode_connected) { - reg_ah = 0x03; // interface not connected - CALLBACK_SCF(true); - break; - } - if (reg_bx != 0) { - reg_ah = 0x09; // unrecognized device ID - CALLBACK_SCF(true); - break; - } - - if (reg_cx == 0) { // disable - APM_inactivity_timer = false; - reg_cx = 0; - CALLBACK_SCF(false); - } - else if (reg_cx == 1) { // enable - APM_inactivity_timer = true; - reg_cx = 1; - CALLBACK_SCF(false); - } - else if (reg_cx == 2) { // get enabled status - reg_cx = APM_inactivity_timer ? 1 : 0; - CALLBACK_SCF(false); - } - else { - reg_ah = 0x0A; // invalid parameter value in CX - CALLBACK_SCF(true); - } - break; - default: - LOG_MSG("Unknown APM BIOS call AX=%04x\n",reg_ax); - if (!apm_realmode_connected) { - reg_ah = 0x03; // interface not connected - CALLBACK_SCF(true); - break; - } - reg_ah = 0x0C; // function not supported - CALLBACK_SCF(true); - break; - } - } - else { - reg_ah=0x86; - CALLBACK_SCF(true); - LOG_MSG("APM BIOS call attempted. set apmbios=1 if you want power management\n"); - if ((IS_EGAVGA_ARCH) || (machine==MCH_CGA) || (machine==MCH_AMSTRAD)) { - /* relict from comparisons, as int15 exits with a retf2 instead of an iret */ - CALLBACK_SZF(false); - } - } - break; - case 0xe8: - switch (reg_al) { - case 0x01: { /* E801: memory size */ - Bitu sz = MEM_TotalPages()*4; - if (sz >= 1024) sz -= 1024; - else sz = 0; - reg_ax = reg_cx = (sz > 0x3C00) ? 0x3C00 : sz; /* extended memory between 1MB and 16MB in KBs */ - sz -= reg_ax; - sz /= 64; /* extended memory size from 16MB in 64KB blocks */ - if (sz > 65535) sz = 65535; - reg_bx = reg_dx = sz; - CALLBACK_SCF(false); - } - break; - case 0x20: { /* E820: MEMORY LISTING */ - if (reg_edx == 0x534D4150 && reg_ecx >= 20 && (MEM_TotalPages()*4) >= 24000) { - /* return a minimalist list: - * - * 0) 0x000000-0x09EFFF Free memory - * 1) 0x0C0000-0x0FFFFF Reserved - * 2) 0x100000-... Free memory (no ACPI tables) */ - if (reg_ebx < E280_table_entries) { - BIOS_E280_entry &ent = E280_table[reg_ebx]; - Bitu seg = SegValue(es); - - /* write to ES:DI */ - real_writed(seg,reg_di+0x00,ent.base); - real_writed(seg,reg_di+0x04,(uint32_t)(ent.base >> (uint64_t)32u)); - real_writed(seg,reg_di+0x08,ent.length); - real_writed(seg,reg_di+0x0C,(uint32_t)(ent.length >> (uint64_t)32u)); - real_writed(seg,reg_di+0x10,ent.type); - reg_ecx = 20; - - /* return EBX pointing to next entry. wrap around, as most BIOSes do. - * the program is supposed to stop on CF=1 or when we return EBX == 0 */ - if (++reg_ebx >= E280_table_entries) reg_ebx = 0; - } - else { - CALLBACK_SCF(true); - } - - reg_eax = 0x534D4150; - } - else { - reg_eax = 0x8600; - CALLBACK_SCF(true); - } - } - break; - default: - unhandled: - LOG(LOG_BIOS,LOG_ERROR)("INT15:Unknown call ah=E8, al=%2X",reg_al); - reg_ah=0x86; - CALLBACK_SCF(true); - if ((IS_EGAVGA_ARCH) || (machine==MCH_CGA) || (machine==MCH_AMSTRAD)) { - /* relict from comparisons, as int15 exits with a retf2 instead of an iret */ - CALLBACK_SZF(false); - } - } - break; - case 0x50: - if(isDBCSCP()) { - if(reg_al == 0x00) { - if(reg_bl == 0x00 && reg_bp == 0x00) { - enum DOSV_FONT font = DOSV_FONT_MAX; - if(reg_bh & 0x01) { - if(reg_dh == 16 && reg_dl == 16) { - font = DOSV_FONT_16X16; - } else if(reg_dh == 24 && reg_dl == 24) { - font = DOSV_FONT_24X24; - } - } else { - if(reg_dh == 8) { - if(reg_dl == 16) { - font = DOSV_FONT_8X16; - } else if(reg_dl == 19) { - font = DOSV_FONT_8X19; - } - } else if(reg_dh == 12 && reg_dl == 24) { - font = DOSV_FONT_12X24; - } - } - if(font != DOSV_FONT_MAX) { - reg_ah = 0x00; - SegSet16(es, CB_SEG); - reg_bx = DOSV_GetFontHandlerOffset(font); - CALLBACK_SCF(false); - break; - } - } - } else if(reg_al == 0x01) { - if(reg_dh == 16 && reg_dl == 16) { - reg_ah = 0x00; - SegSet16(es, CB_SEG); - reg_bx = DOSV_GetFontHandlerOffset(DOSV_FONT_16X16_WRITE); - CALLBACK_SCF(false); - break; - } else if(reg_dh == 24 && reg_dl == 24) { - reg_ah = 0x00; - SegSet16(es, CB_SEG); - reg_bx = DOSV_GetFontHandlerOffset(DOSV_FONT_24X24_WRITE); - CALLBACK_SCF(false); - break; - } else { - reg_ah = 0x06; // read only - } - } - CALLBACK_SCF(true); - } - break; - case 0x49: - if(isDBCSCP()) { - reg_ah = 0x00; - reg_bl = 0x00; - CALLBACK_SCF(false); - } else { - CALLBACK_SCF(true); - } - break; - default: - LOG(LOG_BIOS,LOG_ERROR)("INT15:Unknown call ax=%4X",reg_ax); - reg_ah=0x86; - CALLBACK_SCF(true); - if ((IS_EGAVGA_ARCH) || (machine==MCH_CGA) || (machine==MCH_AMSTRAD)) { - /* relict from comparisons, as int15 exits with a retf2 instead of an iret */ - CALLBACK_SZF(false); - } - } - return CBRET_NONE; -} - -void BIOS_UnsetupKeyboard(void); -void BIOS_SetupKeyboard(void); -void BIOS_UnsetupDisks(void); -void BIOS_SetupDisks(void); -void CPU_Snap_Back_To_Real_Mode(); -void CPU_Snap_Back_Restore(); - -static Bitu Default_IRQ_Handler(void) { - IO_WriteB(0x20, 0x0b); - uint8_t master_isr = IO_ReadB(0x20); - if (master_isr) { - IO_WriteB(0xa0, 0x0b); - uint8_t slave_isr = IO_ReadB(0xa0); - if (slave_isr) { - IO_WriteB(0xa1, IO_ReadB(0xa1) | slave_isr); - IO_WriteB(0xa0, 0x20); - } - else IO_WriteB(0x21, IO_ReadB(0x21) | (master_isr & ~4)); - IO_WriteB(0x20, 0x20); -#if C_DEBUG - uint16_t irq = 0; - uint16_t isr = master_isr; - if (slave_isr) isr = slave_isr << 8; - while (isr >>= 1) irq++; - LOG(LOG_BIOS, LOG_WARN)("Unexpected IRQ %u", irq); -#endif - } - else master_isr = 0xff; - mem_writeb(BIOS_LAST_UNEXPECTED_IRQ, master_isr); - return CBRET_NONE; -} - -static Bitu IRQ14_Dummy(void) { - /* FIXME: That's it? Don't I EOI the PIC? */ - return CBRET_NONE; -} - -static Bitu IRQ15_Dummy(void) { - /* FIXME: That's it? Don't I EOI the PIC? */ - return CBRET_NONE; -} - -void On_Software_CPU_Reset(); - -static Bitu INT18_Handler(void) { - if (ibm_rom_basic_size != 0) { - /* jump to BASIC (usually F600:0000 for IBM 5150 ROM BASIC) */ - SegSet16(cs, ibm_rom_basic_base >> 4); - reg_eip = 0; - } - else { - LOG_MSG("Restart by INT 18h requested\n"); - On_Software_CPU_Reset(); - /* does not return */ - } - return CBRET_NONE; -} - -static Bitu INT19_Handler(void) { - LOG_MSG("Restart by INT 19h requested\n"); - /* FIXME: INT 19h is sort of a BIOS boot BIOS reset-ish thing, not really a CPU reset at all. */ - On_Software_CPU_Reset(); - /* does not return */ - return CBRET_NONE; -} - -void bios_enable_ps2() { - mem_writew(BIOS_CONFIGURATION, - mem_readw(BIOS_CONFIGURATION)|0x04); /* PS/2 mouse */ -} - -void BIOS_ZeroExtendedSize(bool in) { - if(in) other_memsystems++; - else other_memsystems--; - if(other_memsystems < 0) other_memsystems=0; - - if (IS_PC98_ARCH) { - Bitu mempages = MEM_TotalPages(); /* in 4KB pages */ - - /* What applies to IBM PC/AT (zeroing out the extended memory size) - * also applies to PC-98, when HIMEM.SYS is loaded */ - if (in) mempages = 0; - - /* extended memory size (286 systems, below 16MB) */ - if (mempages > (1024UL/4UL)) { - unsigned int ext = ((mempages - (1024UL/4UL)) * 4096UL) / (128UL * 1024UL); /* convert to 128KB units */ - - /* extended memory, up to 16MB capacity (for 286 systems?) - * - * MS-DOS drivers will "allocate" for themselves by taking from the top of - * extended memory then subtracting from this value. - * - * capacity does not include conventional memory below 1MB, nor any memory - * above 16MB. - * - * PC-98 systems may reserve the top 1MB, limiting the top to 15MB instead, - * for the ISA memory hole needed for DOS games that use the 256-color linear framebuffer. - * - * 0x70 = 128KB * 0x70 = 14MB - * 0x78 = 128KB * 0x70 = 15MB */ - if (isa_memory_hole_15mb) { - if (ext > 0x70) ext = 0x70; - } - else { - if (ext > 0x78) ext = 0x78; - } - - mem_writeb(0x401,ext); - } - else { - mem_writeb(0x401,0x00); - } - - /* extended memory size (386 systems, at or above 16MB) */ - if (mempages > ((1024UL*16UL)/4UL)) { - unsigned int ext = ((mempages - ((1024UL*16UL)/4UL)) * 4096UL) / (1024UL * 1024UL); /* convert to MB */ - - /* extended memory, at or above 16MB capacity (for 386+ systems?) - * - * MS-DOS drivers will "allocate" for themselves by taking from the top of - * extended memory then subtracting from this value. - * - * capacity does not include conventional memory below 1MB, nor any memory - * below 16MB. */ - if (ext > 0xFFFE) ext = 0xFFFE; - - mem_writew(0x594,ext); - } - else { - mem_writew(0x594,0x00); - } - } -} - -unsigned char do_isapnp_chksum(const unsigned char* d, int i) { - unsigned char sum = 0; - - while (i-- > 0) - sum += *d++; - - return (0x100 - sum) & 0xFF; -} - -void MEM_ResetPageHandler_Unmapped(Bitu phys_page, Bitu pages); - -unsigned int dos_conventional_limit = 0; - -bool AdapterROM_Read(Bitu address,unsigned long *size) { - unsigned char c[3]; - unsigned int i; - - if ((address & 0x1FF) != 0) { - LOG(LOG_MISC,LOG_DEBUG)("AdapterROM_Read: Caller attempted ROM scan not aligned to 512-byte boundary"); - return false; - } - - for (i=0;i < 3;i++) - c[i] = mem_readb(address+i); - - if (c[0] == 0x55 && c[1] == 0xAA) { - unsigned char chksum=0; - *size = (unsigned long)c[2] * 512UL; - for (i=0;i < (unsigned int)(*size);i++) chksum += mem_readb(address+i); - if (chksum != 0) { - LOG(LOG_MISC,LOG_WARN)("AdapterROM_Read: Found ROM at 0x%lx but checksum failed (got %02xh expect %02xh)\n",(unsigned long)address,chksum,0); - return false; - } - - return true; - } - - return false; -} - -static int bios_pc98_posx = 0; -extern bool tooutttf; - -static void BIOS_Int10RightJustifiedPrint(const int x,int &y,const char *msg, bool boxdraw = false, bool tobold = false) { - if (tooutttf) { - tooutttf = false; - change_output(10); - } - if (control->opt_fastlaunch) return; - const char *s = msg; - if (machine != MCH_PC98) { - unsigned int bold = 0; - while (*s != 0) { - if (*s == '\n') { - y++; - reg_eax = 0x0200u; // set cursor pos - reg_ebx = 0; // page zero - reg_dh = y; // row 4 - reg_dl = x; // column 20 - CALLBACK_RunRealInt(0x10); - s++; - } - else { - if (tobold&&!bold) { - if ((strlen(s)>3&&!strncmp(s, "DEL", 3))||!strncmp(s, "ESC", 3)) bold = 3; - else if (strlen(s)>5&&!strncmp(s, "ENTER", 5)) bold = 5; - else if (strlen(s)>8&&!strncmp(s, "SPACEBAR", 8)) bold = 8; - } - if (bold>0) { - bold--; - reg_eax = 0x0900u | ((unsigned char)(*s++)); - reg_ebx = 0x000fu; - reg_ecx = 0x0001u; - CALLBACK_RunRealInt(0x10); - reg_eax = 0x0300u; - reg_ebx = 0x0000u; - CALLBACK_RunRealInt(0x10); - reg_eax = 0x0200u; - reg_ebx = 0x0000u; - reg_edx++; - CALLBACK_RunRealInt(0x10); - } else { - reg_eax = 0x0E00u | ((unsigned char)(*s++)); - reg_ebx = 0x07u; - CALLBACK_RunRealInt(0x10); - } - } - } - } - else { - unsigned int bo; - - while (*s != 0) { - if (*s == '\n') { - y++; - s++; - bios_pc98_posx = x; - - bo = (((unsigned int)y * 80u) + (unsigned int)bios_pc98_posx) * 2u; - } - else if (*s == '\r') { - s++; /* ignore */ - continue; - } - else { - bo = (((unsigned int)y * 80u) + (unsigned int)(bios_pc98_posx++)) * 2u; /* NTS: note the post increment */ - if (boxdraw) { - unsigned int ch = (unsigned char)*s; - if (ch==0xcd) ch = 0x250B; - else if (ch==0xba) ch = 0x270B; - else if (ch==0xc9) ch = 0x330B; - else if (ch==0xbb) ch = 0x370B; - else if (ch==0xc8) ch = 0x3B0B; - else if (ch==0xbc) ch = 0x3F0B; - mem_writew(0xA0000+bo,ch); - } else - mem_writew(0xA0000+bo,(unsigned char)*s); - mem_writeb(0xA2000+bo,0xE1); - - s++; - bo += 2; /* and keep the cursor following the text */ - } - - reg_eax = 0x1300; // set cursor pos (PC-98) - reg_edx = bo; // byte position - CALLBACK_RunRealInt(0x18); - } - } -} - -char *getSetupLine(const char *capt, const char *cont) { - unsigned int pad1=(unsigned int)(25-strlen(capt)), pad2=(unsigned int)(41-strlen(cont)); - static char line[90]; - sprintf(line, "\x0ba%*c%s%*c%s%*c\x0ba", 12, ' ', capt, pad1, ' ', cont, pad2, ' '); - return line; -} - -const char *GetCPUType(); -void updateDateTime(int x, int y, int pos) -{ - (void)x;//UNUSED - (void)y;//UNUSED - char str[50]; - time_t curtime = time(NULL); - struct tm *loctime = localtime (&curtime); - Bitu time=(Bitu)((100.0/((double)PIT_TICK_RATE/65536.0)) * mem_readd(BIOS_TIMER))/100; - unsigned int sec=(uint8_t)((Bitu)time % 60); - time/=60; - unsigned int min=(uint8_t)((Bitu)time % 60); - time/=60; - unsigned int hour=(uint8_t)((Bitu)time % 24); - int val=0; - unsigned int bo; - Bitu edx=0, pdx=0x0500u; - for (int i=1; i<7; i++) { - switch (i) { - case 1: - val = machine==MCH_PC98?loctime->tm_year+1900:dos.date.year; - reg_edx = 0x0326u; - if (i==pos) pdx = reg_edx; - break; - case 2: - val = machine==MCH_PC98?loctime->tm_mon+1:dos.date.month; - reg_edx = 0x032bu; - if (i==pos) pdx = reg_edx; - break; - case 3: - val = machine==MCH_PC98?loctime->tm_mday:dos.date.day; - reg_edx = 0x032eu; - if (i==pos) pdx = reg_edx; - break; - case 4: - val = machine==MCH_PC98?loctime->tm_hour:hour; - reg_edx = 0x0426u; - if (i==pos) pdx = reg_edx; - break; - case 5: - val = machine==MCH_PC98?loctime->tm_min:min; - reg_edx = 0x0429u; - if (i==pos) pdx = reg_edx; - break; - case 6: - val = machine==MCH_PC98?loctime->tm_sec:sec; - reg_edx = 0x042cu; - if (i==pos) pdx = reg_edx; - break; - } - edx = reg_edx; - sprintf(str, i==1?"%04u":"%02u",val); - for (unsigned int j=0; jopt_securemode || control->SecureMode()) - strcpy(pcname, "N/A"); - else { -#if defined(WIN32) - DWORD size = DOSNAMEBUF; - GetComputerName(pcname, &size); - if (!size) -#else - int result = gethostname(pcname, DOSNAMEBUF); - if (result) -#endif - strcpy(pcname, "N/A"); - } - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Computer name:", pcname), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Product name:", ("DOSBox-X "+std::string(VERSION)).c_str()), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Product updated:", UPDATED_STR), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("", ""), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("BIOS description:", bios_type_string), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("BIOS version:", bios_version_string), true); - uint32_t year,month,day; - if (sscanf(bios_date_string,"%u/%u/%u",&month,&day,&year)==3) { - char datestr[30]; - sprintf(datestr, "%04u-%02u-%02u",year<80?2000+year:(year<100?1900+year:year),month,day); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("BIOS date:", datestr), true); - } else - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("BIOS date:", bios_date_string), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("", ""), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Processor type:", GetCPUType()), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Processor speed:", (std::to_string(CPU_CycleAutoAdjust?CPU_CyclePercUsed:CPU_CycleMax)+(CPU_CycleAutoAdjust?"%":" cycles/ms")).c_str()), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Coprocessor:", enable_fpu?"Yes":"No"), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("", ""), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Video card:", card), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Video memory:", (std::to_string(vga.mem.memsize/1024)+"K").c_str()), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Total memory:", (std::to_string(MEM_TotalPages()*4096/1024)+"K").c_str()), true); - BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("", ""), true); - BIOS_Int10RightJustifiedPrint(x,y,"\x0c8\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0bc", true); - if (machine == MCH_PC98) - BIOS_Int10RightJustifiedPrint(x,y," ESC = Exit "); - else - BIOS_Int10RightJustifiedPrint(x,y," ESC: Exit Arrows: Select Item +/-: Change Values "); -} - -static Bitu ulimit = 0; -static Bitu t_conv = 0; -static Bitu t_conv_real = 0; -static bool bios_first_init=true; -static bool bios_has_exec_vga_bios=false; -static Bitu adapter_scan_start; - -/* FIXME: At global scope their destructors are called after the rest of DOSBox-X has shut down. Move back into BIOS scope. */ -static CALLBACK_HandlerObject int4b_callback; -static const size_t callback_count = 20; -static CALLBACK_HandlerObject callback[callback_count]; /* <- fixme: this is stupid. just declare one per interrupt. */ -static CALLBACK_HandlerObject cb_bios_post; -static CALLBACK_HandlerObject callback_pc98_lio; -static CALLBACK_HandlerObject callback_pc98_avspcm; - -Bitu call_pnp_r = ~0UL; -Bitu call_pnp_rp = 0; - -Bitu call_pnp_p = ~0UL; -Bitu call_pnp_pp = 0; - -Bitu isapnp_biosstruct_base = 0; - -Bitu BIOS_boot_code_offset = 0; -Bitu BIOS_bootfail_code_offset = 0; - -bool bios_user_reset_vector_blob_run = false; -Bitu bios_user_reset_vector_blob = 0; - -Bitu bios_user_boot_hook = 0; - -void CALLBACK_DeAllocate(Bitu in); - -void BIOS_OnResetComplete(Section *x); - -Bitu call_irq0 = 0; -Bitu call_irq07default = 0; -Bitu call_irq815default = 0; - - -/* NEC PC-98 detection notes: - * - Documented: No ASCII date at F000:FFF5 - * - CWSDPMI (PC-98 patched version): Call INT 10h AH=0F BH=FF. If registers don't change, it's PC-98 - * - DJGPP libc, crt1.c (PC-98 patched version): If the WORD at F000:FFF3 (segment part of JMP FAR) is 0xFD80, it's PC-98 */ - -void write_FFFF_PC98_signature() { - /* this may overwrite the existing signature. - * PC-98 systems DO NOT have an ASCII date at F000:FFF5 - * and the WORD value at F000:FFFE is said to be a checksum of the BIOS */ - - // The farjump at the processor reset entry point (jumps to POST routine) - phys_writeb(0xffff0,0xEA); // FARJMP - - /* Segment value must be 0xFD80 to satisfy PC-98 patched DJGPP check */ - const uint16_t oseg = RealSeg(BIOS_DEFAULT_RESET_LOCATION); - phys_writew(0xffff1,RealOff(BIOS_DEFAULT_RESET_LOCATION)-((0xFD80-oseg)*16)); // offset - phys_writew(0xffff3,0xFD80); // segment - - // write nothing (not used) - for(Bitu i = 0; i < 9; i++) phys_writeb(0xffff5+i,0); - - // fake BIOS checksum - phys_writew(0xffffe,0xABCD); -} - -void gdc_egc_enable_update_vars(void) { - unsigned char b; - - b = mem_readb(0x54D); - b &= ~0x40; - if (enable_pc98_egc) b |= 0x40; - mem_writeb(0x54D,b); - - b = mem_readb(0x597); - b &= ~0x04; - if (enable_pc98_egc) b |= 0x04; - mem_writeb(0x597,b); - - if (!enable_pc98_egc) - pc98_gdc_vramop &= ~(1 << VOPBIT_EGC); -} - -void gdc_grcg_enable_update_vars(void) { - unsigned char b; - - b = mem_readb(0x54C); - b &= ~0x02; - if (enable_pc98_grcg) b |= 0x02; - mem_writeb(0x54C,b); - - //TODO: How to reset GRCG? -} - - -void gdc_16color_enable_update_vars(void) { - unsigned char b; - - b = mem_readb(0x54C); - b &= ~0x05; - if (enable_pc98_16color) b |= 0x05; // bit0 .. DIPSW 1-8 support GLIO 16-colors - mem_writeb(0x54C,b); - - if(!enable_pc98_256color) {//force switch to 16-colors mode - void pc98_port6A_command_write(unsigned char b); - pc98_port6A_command_write(0x20); - } - if(!enable_pc98_16color) {//force switch to 8-colors mode - void pc98_port6A_command_write(unsigned char b); - pc98_port6A_command_write(0x00); - } -} - -uint32_t BIOS_get_PC98_INT_STUB(void) { - return callback[18].Get_RealPointer(); -} - -Bitu call_pc98_default_stop; - -extern bool DOS_BreakFlag; -extern bool DOS_BreakConioFlag; - -static Bitu pc98_default_stop_handler(void) { - // INT 06h, which means someone pressed the STOP key... or the CPU is signalling an invalid opcode. - // The overlap makes it extremely unclear. - LOG_MSG("Invalid opcode or unhandled PC-98 STOP key interrupt 06h"); - - // try to make it work as CTRL+BREAK in the built-in DOS environment. - if (!dos_kernel_disabled) - DOS_BreakFlag = DOS_BreakConioFlag = true; - - return CBRET_NONE; -} - -static unsigned char BCD2BIN(unsigned char x) { - return ((x >> 4) * 10) + (x & 0xF); -} - - -/* NTS: Remember the 8259 is non-sentient, and the term "slave" is used in a computer programming context */ -static Bitu Default_IRQ_Handler_Cooperative_Slave_Pic(void) { - /* PC-98 style IRQ 8-15 handling. - * - * This mimics the recommended procedure [https://www.webtech.co.jp/company/doc/undocumented_mem/io_pic.txt] - * - * mov al,20h ;Send EOI to SLAVE - * out 0008h,al - * jmp $+2 ;I/O WAIT - * mov al,0Bh ;ISR read mode set(slave) - * out 0008h,al - * jmp $+2 ;I/O WAIT - * in al,0008h ;ISR read(slave) - * cmp al,00h ;slave pic in-service ? - * jne EoiEnd - * mov al,20h ;Send EOI to MASTER - * out 0000h,al - */ - IO_WriteB(IS_PC98_ARCH ? 0x08 : 0xA0,0x20); // send EOI to slave - IO_WriteB(IS_PC98_ARCH ? 0x08 : 0xA0,0x0B); // ISR read mode set - if (IO_ReadB(IS_PC98_ARCH ? 0x08 : 0xA0) == 0) // if slave pic in service.. - IO_WriteB(IS_PC98_ARCH ? 0x00 : 0x20,0x20); // then EOI the master - - return CBRET_NONE; -} - -extern uint32_t tandy_128kbase; - -static int bios_post_counter = 0; - -extern void BIOSKEY_PC98_Write_Tables(void); -extern Bitu PC98_AVSDRV_PCM_Handler(void); - -static unsigned int acpiptr2ofs(unsigned char *w) { - return w - ACPI_buffer; -} - -static PhysPt acpiofs2phys(unsigned int o) { - return ACPI_BASE + o; -} - -class ACPISysDescTableWriter { -public: - ACPISysDescTableWriter(); - ~ACPISysDescTableWriter(void); -public: - ACPISysDescTableWriter &begin(unsigned char *w,unsigned char *f,size_t n_tablesize=36); - ACPISysDescTableWriter &setRev(const unsigned char rev); - ACPISysDescTableWriter &setOemID(const char *id); - ACPISysDescTableWriter &setSig(const char *sig); - ACPISysDescTableWriter &setOemTableID(const char *id); - ACPISysDescTableWriter &setOemRev(const uint32_t rev); - ACPISysDescTableWriter &setCreatorID(const uint32_t id); - ACPISysDescTableWriter &setCreatorRev(const uint32_t rev); - ACPISysDescTableWriter &expandto(size_t sz); - unsigned char* getptr(size_t ofs=0,size_t sz=1); - size_t get_tablesize(void) const; - unsigned char* finish(void); -private: - size_t tablesize = 0; - unsigned char* base = NULL; - unsigned char* f = NULL; -}; - -size_t ACPISysDescTableWriter::get_tablesize(void) const { - return tablesize; -} - -ACPISysDescTableWriter::ACPISysDescTableWriter() { -} - -ACPISysDescTableWriter::~ACPISysDescTableWriter(void) { - if (tablesize != 0) LOG(LOG_MISC,LOG_ERROR)("ACPI table writer destructor called without completing a table"); -} - -ACPISysDescTableWriter &ACPISysDescTableWriter::begin(unsigned char *n_w,unsigned char *n_f,size_t n_tablesize) { - if (tablesize != 0) LOG(LOG_MISC,LOG_ERROR)("ACPI table writer asked to begin a table without completing the last table"); - base = n_w; - f = n_f; - tablesize = n_tablesize; - assert(tablesize >= 36); - assert((base+tablesize) <= f); - assert(base != NULL); - assert(f != NULL); - assert(base < f); - - memset(base,0,tablesize); - memcpy(base+10,"DOSBOX",6); // OEM ID - memcpy(base+16,"DOSBox-X",8); // OEM Table ID - host_writed(base+24,1); // OEM revision - memcpy(base+28,"DBOX",4); // Creator ID - host_writed(base+32,1); // Creator revision - - return *this; -} - -ACPISysDescTableWriter &ACPISysDescTableWriter::setRev(const unsigned char rev) { - assert(base != NULL); - assert(tablesize >= 36); - base[8] = rev; - return *this; -} - -ACPISysDescTableWriter &ACPISysDescTableWriter::setOemID(const char *id) { - assert(id != NULL); - assert(base != NULL); - assert(tablesize >= 36); - unsigned char *wp = base+10; - for (unsigned int i=0;i < 6;i++) { - if (*id != 0) - *wp++ = (unsigned char)(*id++); - else - *wp++ = ' '; - } - return *this; -} - -ACPISysDescTableWriter &ACPISysDescTableWriter::setSig(const char *sig) { - assert(sig != NULL); - assert(base != NULL); - assert(tablesize >= 36); - unsigned char *wp = base; - for (unsigned int i=0;i < 4;i++) { - if (*sig != 0) - *wp++ = (unsigned char)(*sig++); - else - *wp++ = ' '; - } - return *this; -} - -ACPISysDescTableWriter &ACPISysDescTableWriter::setOemTableID(const char *id) { - assert(id != NULL); - assert(base != NULL); - assert(tablesize >= 36); - unsigned char *wp = base+16; - for (unsigned int i=0;i < 8;i++) { - if (*id != 0) - *wp++ = (unsigned char)(*id++); - else - *wp++ = ' '; - } - return *this; -} - -ACPISysDescTableWriter &ACPISysDescTableWriter::setOemRev(const uint32_t rev) { - assert(base != NULL); - assert(tablesize >= 36); - host_writed(base+24,rev); - return *this; -} - -ACPISysDescTableWriter &ACPISysDescTableWriter::setCreatorID(const uint32_t id) { - assert(base != NULL); - assert(tablesize >= 36); - host_writed(base+28,id); - return *this; -} - -ACPISysDescTableWriter &ACPISysDescTableWriter::setCreatorRev(const uint32_t rev) { - assert(base != NULL); - assert(tablesize >= 36); - host_writed(base+32,rev); - return *this; -} - -ACPISysDescTableWriter &ACPISysDescTableWriter::expandto(size_t sz) { - assert(base != NULL); - assert((base+sz) <= f); - if (tablesize < sz) tablesize = sz; - return *this; -} - -unsigned char* ACPISysDescTableWriter::getptr(size_t ofs,size_t sz) { - assert(base != NULL); - assert((base+ofs+sz) <= f); - if (tablesize < (ofs+sz)) tablesize = ofs+sz; - return base+ofs; -} - -unsigned char *ACPISysDescTableWriter::finish(void) { - if (base != NULL) { - unsigned char *ret = base + tablesize; - - assert((base+tablesize) <= f); - assert(tablesize >= 36); - - /* update length field */ - host_writed(base+4,tablesize); - - /* update checksum field */ - unsigned int i,c; - base[9] = 0; - c = 0; for (i=0;i < tablesize;i++) c += base[i]; - base[9] = (0 - c) & 0xFFu; - - base = f = NULL; - tablesize = 0; - return ret; - } - - return NULL; -} - -enum class ACPIRegionSpace { - SystemMemory=0, - SystemIO=1, - PCIConfig=2, - EmbeddedControl=3, - SMBus=4 -}; - -namespace ACPIMethodFlags { - static constexpr unsigned char ArgCount(const unsigned c) { - return c&3u; - } - enum { - NotSerialized=(0 << 3), - Serialized=(1 << 3) - }; -} - -static constexpr unsigned int ACPIrtIO_16BitDecode = (1u << 0u); - -static constexpr unsigned int ACPIrtMR24_Writeable = (1u << 0u); -static constexpr unsigned int ACPIrtMR32_Writeable = (1u << 0u); - -namespace ACPIFieldFlag { - namespace AccessType { - enum { - AnyAcc=0, - ByteAcc=1, - WordAcc=2, - DwordAcc=3, - BlockAcc=4, - SMBSendRevAcc=5, - SMBQuickAcc=6 - }; - } - namespace LockRule { - enum { - NoLock=(0 << 4), - Lock=(1 << 4) - }; - } - namespace UpdateRule { - enum { - Preserve=(0 << 5), - WriteAsOnes=(1 << 5), - WriteAsZeros=(2 << 5) - }; - } -} - -enum class ACPIAMLOpcode:unsigned char { - ZeroOp = 0x00, // ACPI 1.0+ - OneOp = 0x01, // ACPI 1.0+ - - AliasOp = 0x06, // ACPI 1.0+ - - NameOp = 0x08, // ACPI 1.0+ - - BytePrefix = 0x0A, // ACPI 1.0+ - WordPrefix = 0x0B, // ACPI 1.0+ - DwordPrefix = 0x0C, // ACPI 1.0+ - StringPrefix = 0x0D, // ACPI 1.0+ - QWordPrefix = 0x0E, // ACPI 2.0+ - - ScopeOp = 0x10, // ACPI 1.0+ - BufferOP = 0x11, // ACPI 1.0+ - PackageOp = 0x12, // ACPI 1.0+ - VarPackageOp = 0x13, // ACPI 2.0+ - MethodOp = 0x14, // ACPI 1.0+ - ExternalOp = 0x15, // ACPI 6.0+ - - DualNamePrefix = 0x2E, // ACPI 1.0+ - MultiNamePrefix = 0x2F, // ACPI 1.0+ - - NameCharA = 0x41, // ACPI 1.0b+ - NameCharB = 0x42, // ACPI 1.0b+ - NameCharC = 0x43, // ACPI 1.0b+ - NameCharD = 0x44, // ACPI 1.0b+ - NameCharE = 0x45, // ACPI 1.0b+ - NameCharF = 0x46, // ACPI 1.0b+ - NameCharG = 0x47, // ACPI 1.0b+ - NameCharH = 0x48, // ACPI 1.0b+ - NameCharI = 0x49, // ACPI 1.0b+ - NameCharJ = 0x4A, // ACPI 1.0b+ - NameCharK = 0x4B, // ACPI 1.0b+ - NameCharL = 0x4C, // ACPI 1.0b+ - NameCharM = 0x4D, // ACPI 1.0b+ - NameCharN = 0x4E, // ACPI 1.0b+ - NameCharO = 0x4F, // ACPI 1.0b+ - NameCharP = 0x50, // ACPI 1.0b+ - NameCharQ = 0x51, // ACPI 1.0b+ - NameCharR = 0x52, // ACPI 1.0b+ - NameCharS = 0x53, // ACPI 1.0b+ - NameCharT = 0x54, // ACPI 1.0b+ - NameCharU = 0x55, // ACPI 1.0b+ - NameCharV = 0x56, // ACPI 1.0b+ - NameCharW = 0x57, // ACPI 1.0b+ - NameCharX = 0x58, // ACPI 1.0b+ - NameCharY = 0x59, // ACPI 1.0b+ - NameCharZ = 0x5A, // ACPI 1.0b+ - - ExtendedOperatorPrefix = 0x5B, // ACPI 1.0+ - RootNamePrefix = 0x5C, // ACPI 1.0+ - - ParentNamePrefix = 0x5E, // ACPI 1.0+ - NameChar_ = 0x5F, // ACPI 2.0+ - - Local0 = 0x60, // ACPI 1.0+ - Local1 = 0x61, // ACPI 1.0+ - Local2 = 0x62, // ACPI 1.0+ - Local3 = 0x63, // ACPI 1.0+ - Local4 = 0x64, // ACPI 1.0+ - Local5 = 0x65, // ACPI 1.0+ - Local6 = 0x66, // ACPI 1.0+ - Local7 = 0x67, // ACPI 1.0+ - Arg0 = 0x68, // ACPI 1.0+ - Arg1 = 0x69, // ACPI 1.0+ - Arg2 = 0x6A, // ACPI 1.0+ - Arg3 = 0x6B, // ACPI 1.0+ - Arg4 = 0x6C, // ACPI 1.0+ - Arg5 = 0x6D, // ACPI 1.0+ - Arg6 = 0x6E, // ACPI 1.0+ - - StoreOp = 0x70, // ACPI 1.0+ - RefOfOp = 0x71, // ACPI 1.0+ - AddOp = 0x72, // ACPI 1.0+ - ConcatOp = 0x73, // ACPI 1.0+ - SubtractOp = 0x74, // ACPI 1.0+ - IncrementOp = 0x75, // ACPI 1.0+ - DecrementOp = 0x76, // ACPI 1.0+ - MultiplyOp = 0x77, // ACPI 1.0+ - DivideOp = 0x78, // ACPI 1.0+ - ShiftLeftOp = 0x79, // ACPI 1.0+ - ShiftRightOp = 0x7A, // ACPI 1.0+ - AndOp = 0x7B, // ACPI 1.0+ - NAndOp = 0x7C, // ACPI 1.0+ - OrOp = 0x7D, // ACPI 1.0+ - NOrOp = 0x7E, // ACPI 1.0+ - XOrOp = 0x7F, // ACPI 1.0+ - NotOp = 0x80, // ACPI 1.0+ - FindSetLeftBitOp = 0x81, // ACPI 1.0+ - FindSetRightBitOp = 0x82, // ACPI 1.0+ - DerefOfOp = 0x83, // ACPI 2.0+ - ConcatResOp = 0x84, // ACPI 2.0+ - ModOp = 0x85, // ACPI 2.0+ - NotifyOp = 0x86, // ACPI 1.0+ - SizeOfOp = 0x87, // ACPI 1.0+ - IndexOp = 0x88, // ACPI 1.0+ - MatchOp = 0x89, // ACPI 1.0+ - DWordFieldOp = 0x8A, // ACPI 1.0+ - CreateDWordFieldOp = 0x8A, // ACPI 1.0b+ - WordFieldOp = 0x8B, // ACPI 1.0+ - CreateWordFieldOp = 0x8B, // ACPI 1.0b+ - ByteFieldOp = 0x8C, // ACPI 1.0+ - CreateByteFieldOp = 0x8C, // ACPI 1.0b+ - BitFieldOp = 0x8D, // ACPI 1.0+ - CreateBitFieldOp = 0x8D, // ACPI 1.0b+ - ObjTypeOp = 0x8E, // ACPI 1.0+ - CreateQWordField = 0x8F, // ACPI 2.0+ - LAndOp = 0x90, // ACPI 1.0+ - LOrOp = 0x91, // ACPI 1.0+ - LNotOp = 0x92, // ACPI 1.0+ - LEQOp = 0x93, // ACPI 1.0+ - LEqualOp = 0x93, // ACPI 1.0b+ same as LEQOp obviously to make opcode name clearer -/* LNotEQOp = 0x93 0x92 */ // ACPI 1.0, seems to be an error in the documentation as that is LEqualOp LNotOp which doesn't make sense -/* LNotEqualOp = 0x92 0x93 */ // ACPI 1.0b+, correction of opcode and to make opcode name clearer. Literally LNotOp LEqualOp - LGOp = 0x94, // ACPI 1.0+ - LGreaterOp = 0x94, // ACPI 1.0b+ same as LGOp obviously to make opcode name clearer -/* LLEQOp = 0x94 0x92 */ // ACPI 1.0, seems to be an error in the documentation as that is LEqualOp LNotOp which doesn't make sense -/* LLessEqualOp = 0x92 0x94 */ // ACPI 1.0b+, correction of opcode and to make opcode name clearer. Literally LNotOp LGreaterOp - LLOp = 0x95, // ACPI 1.0+ - LLessOp = 0x95, // ACPI 1.0b+ same as LLOp obviously to make opcode name clearer -/* LGEQOp = 0x95 0x92 */ // ACPI 1.0, seems to be an error in the documentation as that is LEqualOp LNotOp which doesn't make sense -/* LGreaterEqualOp = 0x95 0x92 */ - // ^ ACPI 1.0b+, um... they kept the same mistake, but does make opcode name clearer, but the definition does correctly say LNotOp LLessOp. - // ^ Um... in fact ACPI 2.0 keeps the mistake and the corrected definition! They didn't fix THAT error until ACPI 3.0! - // ^ Would mistakes like this have anything to do with the Linux kernel reportedly not wanting to support any ACPI BIOS made before the year 2000? -/* LGreaterEqualOp = 0x92 0x95 */ // ACPI 3.0+ corrected byte pattern. Literally LNotOp LLessOp - BuffOp = 0x96, // ACPI 2.0+ - ToBufferOp = 0x96, // ACPI 2.0a+, correction of opcode and to make opcode name clearer - DecStrOp = 0x97, // ACPI 2.0+ - ToDecimalStringOp = 0x97, // ACPI 2.0a+, correction of opcode and to make opcode name clearer - HexStrOp = 0x98, // ACPI 2.0+ - ToHexStringOp = 0x98, // ACPI 2.0a+, correction of opcode and to make opcode name clearer - IntOp = 0x99, // ACPI 2.0+ - ToIntegerOp = 0x99, // ACPI 2.0a+, correction of opcode and to make opcode name clearer - - StringOp = 0x9C, // ACPI 2.0+ - ToStringOp = 0x9C, // ACPI 2.0a+, correction of opcode and to make opcode name clearer - CopyOp = 0x9D, // ACPI 2.0+ - CopyObjectOp = 0x9D, // ACPI 2.0a+, correction of opcode and to make opcode name clearer - MidOp = 0x9E, // ACPI 2.0+ - ContinueOp = 0x9F, // ACPI 2.0+ - IfOp = 0xA0, // ACPI 1.0+ - ElseOp = 0xA1, // ACPI 1.0+ - WhileOp = 0xA2, // ACPI 1.0+ - NoOp = 0xA3, // ACPI 1.0+ - ReturnOp = 0xA4, // ACPI 1.0+ - BreakOp = 0xA5, // ACPI 1.0+ - - BreakPointOp = 0xCC, // ACPI 1.0+ - - OnesOp = 0xFF // ACPI 1.0+ -}; - -enum class ACPIAMLOpcodeEOP5B:unsigned char { - /*0x5B*/MutexOp = 0x01, // ACPI 1.0+ - /*0x5B*/EventOp = 0x02, // ACPI 1.0+ - - /*0x5B*/ShiftRightBitOp = 0x10, // ACPI 1.0 only, disappeared 1.0b - /*0x5B*/ShiftLeftBitOp = 0x11, // ACPI 1.0 only, disappeared 1.0b - /*0x5B*/CondRefOp = 0x12, // ACPI 1.0+ - /*0x5B*/CreateFieldOp = 0x13, // ACPI 1.0+ - - /*0x5B*/LocalTableOp = 0x1F, // ACPI 2.0+ - /*0x5B*/LoadOp = 0x20, // ACPI 1.0+ - /*0x5B*/StallOp = 0x21, // ACPI 1.0+ - /*0x5B*/SleepOp = 0x22, // ACPI 1.0+ - /*0x5B*/AcquireOp = 0x23, // ACPI 1.0+ - /*0x5B*/SignalOp = 0x24, // ACPI 1.0+ - /*0x5B*/WaitOp = 0x25, // ACPI 1.0+ - /*0x5B*/ResetOp = 0x26, // ACPI 1.0+ - /*0x5B*/ReleaseOp = 0x27, // ACPI 1.0+ - /*0x5B*/FromBCDOp = 0x28, // ACPI 1.0+ - /*0x5B*/ToBCD = 0x29, // ACPI 1.0+ - /*0x5B*/UnloadOp = 0x2A, // ACPI 1.0+ - - /*0x5B*/RevisionOp = 0x30, // ACPI 1.0b+ - /*0x5B*/DebugOp = 0x31, // ACPI 1.0+ - /*0x5B*/FatalOp = 0x32, // ACPI 1.0+ - /*0x5B*/TimerOp = 0x33, // ACPI 3.0+ - - /*0x5B*/OpRegionOp = 0x80, // ACPI 1.0+ - /*0x5B*/FieldOp = 0x81, // ACPI 1.0+ - /*0x5B*/DeviceOp = 0x82, // ACPI 1.0+ - /*0x5B*/ProcessorOp = 0x83, // ACPI 1.0+ - /*0x5B*/PowerResOp = 0x84, // ACPI 1.0+ - /*0x5B*/ThermalZoneOp = 0x85, // ACPI 1.0+ - /*0x5B*/IndexFieldOp = 0x86, // ACPI 1.0+ - /*0x5B*/BankFieldOp = 0x87, // ACPI 1.0+ - /*0x5B*/DataRegionOp = 0x88 // ACPI 2.0+ -}; - -#include - -/* ACPI AML (ACPI Machine Language) writer. - * See also ACPI Specification 1.0b [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/BIOS/ACPI%2c%20Advanced%20Configuration%20and%20Power%20Interface/Advanced%20Configuration%20and%20Power%20Interface%20Specification%20%281999%2d02%2d02%29%20v1%2e0b%2epdf]. - * - * WARNING: The 1.0 specification [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/BIOS/ACPI%2c%20Advanced%20Configuration%20and%20Power%20Interface/Advanced%20Configuration%20and%20Power%20Interface%20Specification%20%281996%2d12%2d22%29%20v1%2e0%2epdf] seems to have some mistakes in a few opcodes in how they are defined, which probably means if your BIOS is from 1996-1998 it might have those few erroneous AML opcodes. */ -class ACPIAMLWriter { - public: - static constexpr unsigned int MaxPkgSize = 0xFFFFFFFu; - public: - struct pkg_t { - unsigned char* pkg_len = NULL; - unsigned char* pkg_data = NULL; - unsigned int element_count = 0; - }; - std::stack pkg_stack; - public: - ACPIAMLWriter(); - ~ACPIAMLWriter(); - public: - unsigned char* writeptr(void) const; - void begin(unsigned char *n_w,unsigned char *n_f); - public: - ACPIAMLWriter &rtDMA(const unsigned char bitmask,const unsigned char flags); - ACPIAMLWriter &rtMemRange24(const unsigned int flags,const unsigned int minr,const unsigned int maxr,const unsigned int alignr,const unsigned int rangr); - ACPIAMLWriter &rtMemRange32(const unsigned int flags,const unsigned int minr,const unsigned int maxr,const unsigned int alignr,const unsigned int rangr); - ACPIAMLWriter &rtIO(const unsigned int flags,const uint16_t minport,const uint16_t maxport,const uint8_t alignment,const uint8_t rlength); - ACPIAMLWriter &rtIRQ(const uint16_t bitmask/*bits [15:0] correspond to IRQ 15-0*/,const bool pciStyle=false); - ACPIAMLWriter &rtHdrSmall(const unsigned char itemName,const unsigned int length); - ACPIAMLWriter &rtHdrLarge(const unsigned char itemName,const unsigned int length); - ACPIAMLWriter &rtBegin(void); - ACPIAMLWriter &rtEnd(void); - public: - ACPIAMLWriter &NameOp(const char *name); - ACPIAMLWriter &ByteOp(const unsigned char v); - ACPIAMLWriter &WordOp(const unsigned int v); - ACPIAMLWriter &DwordOp(const unsigned long v); - ACPIAMLWriter &StringOp(const char *str); - ACPIAMLWriter &OpRegionOp(const char *name,const ACPIRegionSpace regionspace); - ACPIAMLWriter &FieldOp(const char *name,const unsigned int pred_size,const unsigned int fieldflag); - ACPIAMLWriter &FieldOpEnd(void); - ACPIAMLWriter &ScopeOp(const unsigned int pred_size=MaxPkgSize); - ACPIAMLWriter &ScopeOpEnd(void); - ACPIAMLWriter &PackageOp(const unsigned int pred_size=MaxPkgSize); - ACPIAMLWriter &RootCharScopeOp(void); - ACPIAMLWriter &PackageOpEnd(void); - ACPIAMLWriter &RootCharOp(void); - ACPIAMLWriter &NothingOp(void); - ACPIAMLWriter &ZeroOp(void); - ACPIAMLWriter &OneOp(void); - ACPIAMLWriter &AliasOp(const char *what,const char *to_what); - ACPIAMLWriter &BufferOpEnd(void); - ACPIAMLWriter &BufferOp(const unsigned int pred_size=MaxPkgSize); - ACPIAMLWriter &BufferOp(const unsigned char *data,const size_t datalen); - ACPIAMLWriter &DeviceOp(const char *name,const unsigned int pred_size=MaxPkgSize); - ACPIAMLWriter &DeviceOpEnd(void); - ACPIAMLWriter &MethodOp(const char *name,const unsigned int pred_size,const unsigned int methodflags); - ACPIAMLWriter &MethodOpEnd(void); - ACPIAMLWriter &ReturnOp(void); - ACPIAMLWriter &IfOp(const unsigned int pred_size=MaxPkgSize); - ACPIAMLWriter &IfOpEnd(void); - ACPIAMLWriter &ElseOp(const unsigned int pred_size=MaxPkgSize); - ACPIAMLWriter &ElseOpEnd(void); - ACPIAMLWriter &LEqualOp(void); - ACPIAMLWriter &LNotEqualOp(void); - ACPIAMLWriter &LNotOp(void); - ACPIAMLWriter &LAndOp(void); - ACPIAMLWriter &AndOp(void); - ACPIAMLWriter &ArgOp(const unsigned int arg); /* Arg0 through Arg6 */ - ACPIAMLWriter &LocalOp(const unsigned int l); /* Local0 through Local7 */ - ACPIAMLWriter &StoreOp(void); - ACPIAMLWriter &NOrOp(void); - ACPIAMLWriter &OrOp(void); - ACPIAMLWriter &NAndOp(void); - public:// ONLY for writing fields! - ACPIAMLWriter &FieldOpElement(const char *name,const unsigned int bits); - public: - ACPIAMLWriter &PkgLength(const unsigned int len,unsigned char* &wp,const unsigned int minlen=1); - ACPIAMLWriter &PkgLength(const unsigned int len,const unsigned int minlen=1); - ACPIAMLWriter &Name(const char *name); - ACPIAMLWriter &MultiNameOp(void); - ACPIAMLWriter &DualNameOp(void); - ACPIAMLWriter &BeginPkg(const unsigned int pred_length=MaxPkgSize); - ACPIAMLWriter &EndPkg(void); - ACPIAMLWriter &CountElement(void); - private: - unsigned char* w=NULL,*f=NULL; - unsigned char* buffer_len_pl = NULL; - unsigned char* rt_start = NULL; -}; - -/* StoreOp Operand Supername: Store Operand into Supername */ -ACPIAMLWriter &ACPIAMLWriter::StoreOp(void) { - *w++ = 0x70; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::LocalOp(const unsigned int l) { - if (l <= 7) - *w++ = 0x60 + l; /* 0x60..0x67 -> Local0..Local7 */ - else - E_Exit("ACPI AML writer LocalOp out of range"); - - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::ArgOp(const unsigned int arg) { - if (arg <= 6) - *w++ = 0x68 + arg; /* 0x68..0x6E -> Arg0..Arg6 */ - else - E_Exit("ACPI AML writer ArgOp out of range"); - - return *this; -} - -/* Binary operators like And and Xor are Operand1 Operand2 Target, and the return value - * of the operator is the result. What the ACPI specification is very unclear about, but - * hints at from a sample bit of ASL concerning PowerResource(), is that if you just - * want to evaluate the operator and do not care to store the result anywhere you can just - * set Target to Zero. - * - * This example doesn't make sense unless you consider that this is how you encode "Nothing" - * in the example on that page in spec 1.0b: - * - * Method(_STA) { - * Return (Xor (GIO.IDEI, One, Zero)) // inverse of isolation - * } - * - * See what they did there? */ -ACPIAMLWriter &ACPIAMLWriter::RootCharOp(void) { - *w++ = '\\'; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::RootCharScopeOp(void) { - RootCharOp(); /* this is how iasl encodes for example Scope(\) */ - ZeroOp(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::NothingOp(void) { - ZeroOp(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::ZeroOp(void) { - *w++ = 0x00; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::OneOp(void) { - *w++ = 0x01; - return *this; -} - -/* LEqual Operand1 Operand2 */ -ACPIAMLWriter &ACPIAMLWriter::LEqualOp(void) { - *w++ = 0x93; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::LNotOp(void) { - *w++ = 0x92; - return *this; -} - -/* LAndOp Operand1 Operand2 == Operand1 && Operand2 */ -ACPIAMLWriter &ACPIAMLWriter::LAndOp(void) { - *w++ = 0x90; - return *this; -} - -/* NAndOp Operand1 Operand2 Target -> Target = Operand1 & Operand2 */ -ACPIAMLWriter &ACPIAMLWriter::NAndOp(void) { - *w++ = 0x7C; - return *this; -} - -/* AndOp Operand1 Operand2 Target -> Target = Operand1 & Operand2 */ -ACPIAMLWriter &ACPIAMLWriter::AndOp(void) { - *w++ = 0x7B; - return *this; -} - -/* NOrOp Operand1 Operand2 Target -> Target = Operand1 & Operand2 */ -ACPIAMLWriter &ACPIAMLWriter::NOrOp(void) { - *w++ = 0x7E; - return *this; -} - -/* OrOp Operand1 Operand2 Target -> Target = Operand1 & Operand2 */ -ACPIAMLWriter &ACPIAMLWriter::OrOp(void) { - *w++ = 0x7D; - return *this; -} - -/* This makes sense if you think of an AML interpreter as something which encounters a LNotOp() - * and then runs the interpreter to parse the following token(s) to evaluate an int so it can - * do a logical NOT on the result of the evaluation. In other words this isn't like x86 assembly - * which you follow instruction by instruction but more like how you parse and evaluate expressions - * such as "4+5*3" properly. */ -ACPIAMLWriter &ACPIAMLWriter::LNotEqualOp(void) { - LNotOp(); - LEqualOp(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::BufferOp(const unsigned char *data,const size_t datalen) { - /* Notice this OP was obviously invented by the Department of Redundant Redundancy somewhere deep within Microsoft. - * This op stores both a PkgLength containing the overall buffer data and then the first bytes are a ByteOp encoding the length of the buffer. - * So basically it stores the length twice. What? Why? */ - *w++ = 0x11; - BeginPkg(datalen+8/*Byte/Word/DwordOp*/); - if (datalen >= 0x10000) DwordOp(datalen); - else if (datalen >= 0x100) WordOp(datalen); - else ByteOp(datalen); - if (datalen > 0) { - memcpy(w,data,datalen); - w += datalen; - } - EndPkg(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::BufferOp(const unsigned int pred_size) { - assert(pred_size >= 10); - *w++ = 0x11; - BeginPkg(pred_size); - DwordOp(0); // placeholder - buffer_len_pl = w - 4; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::BufferOpEnd(void) { - assert(buffer_len_pl != NULL); - host_writed(buffer_len_pl,size_t(w - (buffer_len_pl + 4))); - buffer_len_pl = NULL; - EndPkg(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::AliasOp(const char *what,const char *to_what) { - *w++ = 0x06; - Name(what); - Name(to_what); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::ReturnOp(void) { - *w++ = 0xA4; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::IfOp(const unsigned int pred_size) { - *w++ = 0xA0; - BeginPkg(pred_size); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::IfOpEnd(void) { - EndPkg(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::ElseOp(const unsigned int pred_size) { - *w++ = 0xA1; - BeginPkg(pred_size); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::ElseOpEnd(void) { - EndPkg(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::rtHdrLarge(const unsigned char itemName,const unsigned int length) { - assert(length <= 65536); - assert(itemName < 128); - *w++ = 0x80 + itemName; - host_writew(w,length); w += 2; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::rtHdrSmall(const unsigned char itemName,const unsigned int length) { - assert(length < 8); - assert(itemName < 16); - *w++ = (itemName << 3) + length; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::rtBegin(void) { - rt_start = w; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::rtEnd(void) { - rtHdrSmall(15/*end tag format*/,1/*length*/); - if (rt_start != NULL) { - unsigned char sum = 0; - for (unsigned char *s=rt_start;s < w;s++) sum += *s++; - *w++ = 0x100 - sum; - } - else { - *w++ = 0; - } - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::rtMemRange24(const unsigned int flags,const unsigned int minr,const unsigned int maxr,const unsigned int alignr,const unsigned int rangr) { - rtHdrLarge(1/*24-bit memory range format*/,9/*length*/); - *w++ = flags; - host_writew(w,minr >> 8u); w += 2; - host_writew(w,maxr >> 8u); w += 2; - host_writew(w,(alignr + 0xFFu) >> 8u); w += 2; /* FIXME: Um... alignment in bytes but everything else multiple of 256 bytes? */ - host_writew(w,rangr >> 8u); w += 2; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::rtMemRange32(const unsigned int flags,const unsigned int minr,const unsigned int maxr,const unsigned int alignr,const unsigned int rangr) { - rtHdrLarge(5/*32-bit memory range format*/,17/*length*/); - *w++ = flags; - host_writed(w,minr); w += 4; - host_writed(w,maxr); w += 4; - host_writed(w,alignr); w += 4; - host_writed(w,rangr); w += 4; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::rtDMA(const unsigned char bitmask,const unsigned char flags) { - rtHdrSmall(5/*DMA format*/,2/*length*/); - *w++ = bitmask; - *w++ = flags; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::rtIO(const unsigned int flags,const uint16_t minport,const uint16_t maxport,const uint8_t alignment,const uint8_t rlength) { - rtHdrSmall(8/*IO format*/,7/*length*/); - *w++ = (unsigned char)flags; - host_writew(w,minport); w += 2; - host_writew(w,maxport); w += 2; - *w++ = alignment; - *w++ = rlength; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::rtIRQ(const uint16_t bitmask,const bool pciStyle) { - rtHdrSmall(4/*IRQ format*/,3/*length*/); - host_writew(w,bitmask); w += 2; - *w++ = pciStyle ? 0x18/*active low level trigger shareable*/ : 0x01/*active high edge trigger*/; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::NameOp(const char *name) { - *w++ = 0x08; // NameOp - Name(name); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::Name(const char *name) { - for (unsigned int i=0;i < 4;i++) { - if (*name) *w++ = *name++; - else *w++ = '_'; - } - - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::MultiNameOp(void) { - *w++ = 0x2F; // MultiNamePrefix - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::DualNameOp() { - *w++ = 0x2E; // DualNamePrefix - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::ByteOp(const unsigned char v) { - *w++ = 0x0A; // ByteOp - *w++ = v; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::WordOp(const unsigned int v) { - *w++ = 0x0B; // WordOp - host_writew(w,v); w += 2; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::DwordOp(const unsigned long v) { - *w++ = 0x0C; // DwordOp - host_writed(w,v); w += 4; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::StringOp(const char *str) { - /* WARNING: Strings are only supposed to have ASCII 0x01-0x7F */ - *w++ = 0x0D; // StringOp - while (*str != 0) *w++ = *str++; - *w++ = 0x00; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::OpRegionOp(const char *name,const ACPIRegionSpace regionspace) { - *w++ = 0x5B; - *w++ = 0x80; - Name(name); - *w++ = (unsigned char)regionspace; - // and then the caller must write the RegionAddress and RegionLength - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::DeviceOp(const char *name,const unsigned int pred_size) { - *w++ = 0x5B; - *w++ = 0x82; - BeginPkg(pred_size); - Name(name); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::DeviceOpEnd(void) { - EndPkg(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::MethodOp(const char *name,const unsigned int pred_size,const unsigned int methodflags) { - *w++ = 0x14; - BeginPkg(pred_size); - Name(name); - *w++ = (unsigned char)methodflags; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::MethodOpEnd(void) { - EndPkg(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::FieldOp(const char *name,const unsigned int pred_size,const unsigned int fieldflag) { - *w++ = 0x5B; - *w++ = 0x81; - BeginPkg(pred_size); - Name(name); - *w++ = fieldflag; - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::FieldOpEnd(void) { - EndPkg(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::ScopeOp(const unsigned int pred_size) { - *w++ = 0x10; - BeginPkg(pred_size); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::ScopeOpEnd(void) { - EndPkg(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::PackageOp(const unsigned int pred_size) { - *w++ = 0x12; - BeginPkg(pred_size); - *w++ = 0x00; // placeholder for element count - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::PackageOpEnd(void) { - assert(!pkg_stack.empty()); - - pkg_t &ent = pkg_stack.top(); - - if (ent.element_count > 255u) E_Exit("ACPI AML writer too many elements in package"); - *ent.pkg_data = ent.element_count; /* element count follows PkgLength */ - - EndPkg(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::PkgLength(const unsigned int len,const unsigned int minlen) { - return PkgLength(len,w,minlen); -} - -ACPIAMLWriter &ACPIAMLWriter::PkgLength(const unsigned int len,unsigned char* &wp,const unsigned int minlen) { - if (len >= 0x10000000 || minlen > 4) { - E_Exit("ACPI AML writer PkgLength value too large"); - } - else if (len >= 0x100000 || minlen >= 4) { - *wp++ = (unsigned char)( len & 0x0F) | 0xC0; - *wp++ = (unsigned char)((len >> 4) & 0xFF); - *wp++ = (unsigned char)((len >> 12) & 0xFF); - *wp++ = (unsigned char)((len >> 20) & 0xFF); - } - else if (len >= 0x1000 || minlen >= 3) { - *wp++ = (unsigned char)( len & 0x0F) | 0x80; - *wp++ = (unsigned char)((len >> 4) & 0xFF); - *wp++ = (unsigned char)((len >> 12) & 0xFF); - } - else if (len >= 0x40 || minlen >= 2) { - *wp++ = (unsigned char)( len & 0x0F) | 0x40; - *wp++ = (unsigned char)((len >> 4) & 0xFF); - } - else { - *wp++ = (unsigned char)len; - } - - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::FieldOpElement(const char *name,const unsigned int bits) { - if (*name != 0) - Name(name); - else - *w++ = 0; - - PkgLength(bits); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::BeginPkg(const unsigned int /*pred_length*/) { - pkg_t ent; - - /* WARNING: Specify a size large enough. Once written, it cannot be extended if - * needed. By default, this code writes an overlarge field to make sure - * it can always update */ - - if (pkg_stack.size() >= 32) E_Exit("ACPI AML writer BeginPkg too much recursion"); - - ent.pkg_len = w; - PkgLength(MaxPkgSize);//placeholder - ent.pkg_data = w; - - pkg_stack.push(std::move(ent)); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::EndPkg(void) { - if (pkg_stack.empty()) E_Exit("ACPI AML writer EndPkg with empty stack"); - - pkg_t &ent = pkg_stack.top(); - - const unsigned long len = (unsigned long)(w - ent.pkg_len); - const unsigned int lflen = (unsigned int)(ent.pkg_data - ent.pkg_len); - PkgLength(len,ent.pkg_len,lflen); - if (ent.pkg_len != ent.pkg_data) E_Exit("ACPI AML writer length update exceeds pkglength field"); - pkg_stack.pop(); - return *this; -} - -ACPIAMLWriter &ACPIAMLWriter::CountElement(void) { - if (pkg_stack.empty()) E_Exit("ACPI AML writer counting elements not supported unless within package"); - pkg_stack.top().element_count++; - return *this; -} - -ACPIAMLWriter::ACPIAMLWriter() { -} - -ACPIAMLWriter::~ACPIAMLWriter() { -} - -unsigned char* ACPIAMLWriter::writeptr(void) const { - return w; -} - -void ACPIAMLWriter::begin(unsigned char *n_w,unsigned char *n_f) { - w = n_w; - f = n_f; -} - -void BuildACPITable(void) { - uint32_t rsdt_reserved = 16384; - unsigned char *w,*f; - unsigned int i,c; - - if (ACPI_buffer == NULL || ACPI_buffer_size < 32768) return; - w = ACPI_buffer; - f = ACPI_buffer+ACPI_buffer_size-rsdt_reserved; - - /* RSDT starts at last 16KB of ACPI buffer because it needs to build up a list of other tables */ - unsigned char *rsdt = f; - - /* RSD PTR is written to the legacy BIOS region, on a 16-byte boundary */ - Bitu rsdptr = ROMBIOS_GetMemory(20,"ACPI BIOS Root System Description Pointer",/*paragraph align*/16); - if (rsdptr == 0) E_Exit("ACPI BIOS RSD PTR alloc fail"); - LOG(LOG_MISC,LOG_DEBUG)("ACPI: RSD PTR at 0x%lx",(unsigned long)rsdptr); - - phys_writes(rsdptr + 0,"RSD PTR ",8); // Signature - phys_writeb(rsdptr + 8,0); // Checksum (fill in later) - phys_writes(rsdptr + 9,"DOSBOX",6); // OEMID - phys_writeb(rsdptr + 15,0); // Reserved must be zero - phys_writed(rsdptr + 16,acpiofs2phys( acpiptr2ofs( rsdt ) )); // RSDT physical address - c=0; for (i=0;i < 20;i++) c += phys_readb(rsdptr+i); - phys_writeb(rsdptr + 8,(0u - c)&0xFF); // Checksum - - /* RSDT */ - ACPISysDescTableWriter rsdt_tw; - rsdt_tw.begin(rsdt,ACPI_buffer+ACPI_buffer_size).setSig("RSDT").setRev(1); - unsigned int rsdt_tw_ofs = 36; - // leave open for adding one DWORD per table to the end as we go... this is why RSDT is written to the END of the ACPI region. - - /* FACP, which does not have a checksum and does not follow the normal format */ - unsigned char *facs = w; - size_t facs_size = 64; - w += facs_size; - { - assert(w <= f); - memset(facs,0,facs_size); - memcpy(facs+0x00,"FACS",4); - host_writed(facs+0x04,facs_size); - host_writed(facs+0x08,0x12345678UL); // hardware signature - host_writed(facs+0x0C,0); // firmware waking vector - ACPI_buffer_global_lock = acpiptr2ofs(facs+0x10); - host_writed(facs+0x10,0); // global lock - host_writed(facs+0x14,0); // S4BIOS_REQ not supported - LOG(LOG_MISC,LOG_DEBUG)("ACPI: FACS at 0x%lx len 0x%lx",(unsigned long)acpiofs2phys( acpiptr2ofs( facs ) ),(unsigned long)facs_size); - } - - unsigned char *dsdt_base = w; - { - ACPISysDescTableWriter dsdt; - ACPIAMLWriter aml; - - dsdt.begin(w,f).setSig("DSDT").setRev(1); - aml.begin(dsdt.getptr()+dsdt.get_tablesize(),f); - - /* WARNING: To simplify this code, you are responsible for writing the AML in the syntax required. - * See the ACPI BIOS specification for more details. - * - * For reference: - * - * Name := [LeadNameChar NameChar NameChar NameChar] | - * [LeadNameChar NameChar NameChar '_'] | - * [LeadNameChar NameChar '_' '_'] | - * [LeadNameChar '_' '_' '_'] - * - * DefName := NameOp Name DataTerm - * NameOp => 0x08 - * Data := DataTerm [DataTerm ...] - * DataTerm := DataItem | DefPackage - * DataItem := DefBuffer | DefNum | DefString - * - * How to write: ACPIAML1_NameOp(Name) followed by the necessary functions to write the buffer, string, etc. for the name. */ - aml.ScopeOp().RootCharScopeOp();/* Scope (\) */ - aml.OpRegionOp("DBG",ACPIRegionSpace::SystemIO).WordOp(ACPI_DEBUG_IO).ByteOp(0x10); - aml.FieldOp("DBG",ACPIAMLWriter::MaxPkgSize,ACPIFieldFlag::AccessType::DwordAcc|ACPIFieldFlag::UpdateRule::WriteAsZeros); - aml.FieldOpElement("DBGV",32); - aml.FieldOpEnd(); - aml.ScopeOpEnd(); /* } end of Scope(\) */ - - aml.ScopeOp().RootCharOp().Name("_SB"); - if (pcibus_enable) { - aml.DeviceOp("PCI0"); - aml.NameOp("_HID").DwordOp(ISAPNP_ID('P','N','P',0x00,0x0A,0x00,0x03)); - aml.NameOp("_ADR").DwordOp(0); /* [31:16] device [15:0] function */ - aml.NameOp("_UID").DwordOp(0xD05B0C5); - aml.NameOp("_CRS").BufferOp().rtBegin(); /* ResourceTemplate() i.e. resource list */ - aml.rtIO( - ACPIrtIO_16BitDecode, - 0x0CF8,/*min*/ - 0x0CF8,/*max*/ - 0x01,/*align*/ - 0x4/*number of I/O ports req*/); - aml.rtEnd(); - aml.BufferOpEnd(); - } - else { - aml.DeviceOp("ISA"); - aml.NameOp("_HID").DwordOp(ISAPNP_ID('P','N','P',0x00,0x0A,0x00,0x00)); - aml.NameOp("_ADR").DwordOp(0); /* [31:16] device [15:0] function */ - aml.NameOp("_UID").DwordOp(0xD05B0C5); - aml.DeviceOpEnd(); - - } - aml.ScopeOpEnd(); - - assert(aml.writeptr() >= (dsdt.getptr()+dsdt.get_tablesize())); - assert(aml.writeptr() <= f); - dsdt.expandto((size_t)(aml.writeptr() - dsdt.getptr())); - LOG(LOG_MISC,LOG_DEBUG)("ACPI: DSDT at 0x%lx len 0x%lx",(unsigned long)acpiofs2phys( acpiptr2ofs( dsdt_base ) ),(unsigned long)dsdt.get_tablesize()); - w = dsdt.finish(); - } - - { /* Fixed ACPI Description Table (FACP) */ - ACPISysDescTableWriter facp; - const PhysPt facp_offset = acpiofs2phys( acpiptr2ofs( w ) ); - - host_writed(rsdt_tw.getptr(rsdt_tw_ofs,4),(uint32_t)facp_offset); - rsdt_tw_ofs += 4; - - facp.begin(w,f,116).setSig("FACP").setRev(1); - host_writed(w+36,acpiofs2phys( acpiptr2ofs( facs ) ) ); // FIRMWARE_CTRL (FACS table) - host_writed(w+40,acpiofs2phys( acpiptr2ofs( dsdt_base ) ) ); // DSDT - w[44] = 0; // dual PIC PC-AT type implementation - host_writew(w+46,ACPI_IRQ); // SCI_INT - host_writed(w+48,ACPI_SMI_CMD); // SCI_CMD (I/O port) - w[52] = ACPI_ENABLE_CMD; // what the guest writes to SMI_CMD to disable SMI ownership from BIOS during bootup - w[53] = ACPI_DISABLE_CMD; // what the guest writes to SMI_CMD to re-enable SMI ownership to BIOS - // TODO: S4BIOS_REQ - host_writed(w+56,ACPI_PM1A_EVT_BLK); // PM1a_EVT_BLK event register block - host_writed(w+64,ACPI_PM1A_CNT_BLK); // PM1a_CNT_BLK control register block - host_writed(w+76,ACPI_PM_TMR_BLK); // PM_TMR_BLK power management timer control register block - w[88] = 4; // PM1_EVT_LEN - w[89] = 2; // PM1_CNT_LEN - w[90] = 0; // PM2_CNT_LEN - w[91] = 4; // PM_TM_LEN - host_writed(w+112,(1u << 0u)/*WBINVD*/); - LOG(LOG_MISC,LOG_DEBUG)("ACPI: FACP at 0x%lx len 0x%lx",(unsigned long)facp_offset,(unsigned long)facp.get_tablesize()); - w = facp.finish(); - } - - /* Finish RSDT */ - LOG(LOG_MISC,LOG_DEBUG)("ACPI: RDST at 0x%lx len 0x%lx",(unsigned long)acpiofs2phys( acpiptr2ofs( rsdt ) ),(unsigned long)rsdt_tw.get_tablesize()); - rsdt_tw.finish(); -} - -#if C_LIBPNG -# include "dosbox224x93.h" -# include "dosbox224x163.h" -# include "dosbox224x186.h" -# include "dosbox224x224.h" - -static const unsigned char *BIOSLOGO_PNG_PTR = NULL; -static const unsigned char *BIOSLOGO_PNG_FENCE = NULL; - -static void BIOSLOGO_PNG_READ(png_structp context,png_bytep buf,size_t count) { - (void)context; - - while (count > 0 && BIOSLOGO_PNG_PTR < BIOSLOGO_PNG_FENCE) { - *buf++ = *BIOSLOGO_PNG_PTR++; - count--; - } - while (count > 0) { - *buf++ = 0; - count--; - } -} - -#endif - -extern unsigned int INT13Xfer; - -class BIOS:public Module_base{ -private: - static Bitu cb_bios_post__func(void) { - void TIMER_BIOS_INIT_Configure(); -#if C_DEBUG - void DEBUG_CheckCSIP(); - -# if C_HEAVY_DEBUG - /* the game/app obviously crashed, which is way more important - * to log than what we do here in the BIOS at POST */ - void DEBUG_StopLog(void); - DEBUG_StopLog(); -# endif -#endif - - INT13_ElTorito_NoEmuDriveNumber = 0; - INT13_ElTorito_NoEmuCDROMDrive = 0; - INT13_ElTorito_IDEInterface = -1; - INT13Xfer = 0; - - ACPI_mem_enable(false); - ACPI_REGION_SIZE = 0; - ACPI_BASE = 0; - ACPI_enabled = false; - ACPI_version = 0; - ACPI_free(); - ACPI_SCI_EN = false; - ACPI_BM_RLD = false; - ACPI_PM1_Status = 0; - ACPI_PM1_Enable = 0; - - E280_table_entries = 0; - - {/*Conventional memory*/ - BIOS_E280_entry &ent = E280_table[E280_table_entries++]; - ent.base = 0x00000000; - ent.length = 0x9F000; /* 640KB minus the EBDA */ - ent.type = 1;/*Normal RAM*/ - } - {/*Conventional adapter ROM/RAM/BIOS*/ - BIOS_E280_entry &ent = E280_table[E280_table_entries++]; - ent.base = 0x000C0000; - ent.length = 0x40000; - ent.type = 2;/*Reserved*/ - } - if (MEM_TotalPages() > 0x100) { /* more than 1MB of RAM */ - BIOS_E280_entry &ent = E280_table[E280_table_entries++]; - ent.base = 0x00100000; - ent.length = (MEM_TotalPages()-0x100u)*4096u; - ent.type = 1;/*Normal RAM*/ - } - if (MEM_TotalPagesAt4GB() > 0) { /* anything above 4GB? */ - BIOS_E280_entry &ent = E280_table[E280_table_entries++]; - ent.base = uint64_t(0x100000000ull); - ent.length = uint64_t(MEM_TotalPagesAt4GB())*uint64_t(4096ul); - ent.type = 1;/*Normal RAM*/ - } - - /* If we're here because of a JMP to F000:FFF0 from a DOS program, then - * an actual reset is needed to prevent reentrancy problems with the DOS - * kernel shell. The WINNT.EXE install program for Windows NT/2000/XP - * likes to restart the program by JMPing to F000:FFF0 */ - if (!dos_kernel_disabled && first_shell != NULL) { - LOG(LOG_MISC,LOG_DEBUG)("BIOS POST: JMP to F000:FFF0 detected, initiating proper reset"); - throw int(9); - } - - { - Section_prop * section=static_cast(control->GetSection("dosbox")); - int val = section->Get_int("reboot delay"); - - if (val < 0) - val = IS_PC98_ARCH ? 1000 : 500; - - reset_post_delay = (unsigned int)val; - - /* Read the ACPI setting and decide on a ACPI region to use */ - { - std::string s = section->Get_string("acpi"); - - if (IS_PC98_ARCH) { - /* do not enable ACPI, PC-98 does not have it */ - } - else if (MEM_get_address_bits() < 32) { - /* I doubt any 486DX systems with less than 32 address bits has ACPI */ - } - else if (CPU_ArchitectureType < CPU_ARCHTYPE_386) { - /* Your 286 does not have ACPI and it never will. - * Your 386 as well, but the 386 is 32-bit and the user might change it to 486 or higher later though, so we'll allow that */ - } - else if (s == "1.0") { - ACPI_version = 0x100; - ACPI_REGION_SIZE = (256u << 10u); // 256KB - } - else if (s == "1.0b") { - ACPI_version = 0x10B; - ACPI_REGION_SIZE = (256u << 10u); // 256KB - } - } - - /* TODO: Read from dosbox.conf */ - if (ACPI_version != 0) { - ACPI_IRQ = 9; - ACPI_IO_BASE = 0x820; - ACPI_SMI_CMD = 0x828; - } - } - - if (bios_post_counter != 0 && reset_post_delay != 0) { - /* reboot delay, in case the guest OS/application had something to day before hitting the "reset" signal */ - uint32_t lasttick=GetTicks(); - while ((GetTicks()-lasttick) < reset_post_delay) { - void CALLBACK_IdleNoInts(void); - CALLBACK_IdleNoInts(); - } - } - - if (bios_post_counter != 0) { - /* turn off the PC speaker if the guest left it on at reset */ - if (IS_PC98_ARCH) { - IO_Write(0x37,0x07); - } - else { - IO_Write(0x61,IO_Read(0x61) & (~3u)); - } - } - - bios_post_counter++; - - if (bios_first_init) { - /* clear the first 1KB-32KB */ - for (uint16_t i=0x400;i<0x8000;i++) real_writeb(0x0,i,0); - } - - if (IS_PC98_ARCH) { - for (unsigned int i=0;i < callback_count;i++) callback[i].Uninstall(); - - /* clear out 0x50 segment (TODO: 0x40 too?) */ - for (unsigned int i=0;i < 0x100;i++) phys_writeb(0x500+i,0); - - BIOS_ZeroExtendedSize(false); - - if (call_pc98_default_stop == 0) - call_pc98_default_stop = CALLBACK_Allocate(); - - CALLBACK_Setup(call_pc98_default_stop,&pc98_default_stop_handler,CB_IRET,"INT 6h invalid opcode or STOP interrupt"); - - unsigned char memsize_real_code = 0; - Bitu mempages = MEM_TotalPages(); /* in 4KB pages */ - - /* NTS: Fill in the 3-bit code in FLAGS1 that represents - * how much lower conventional memory is in the system. - * - * Note that MEM.EXE requires this value, or else it - * will complain about broken UMB linkage and fail - * to show anything else. */ - /* TODO: In the event we eventually support "high resolution mode" - * we can indicate 768KB here, code == 5, meaning that - * the RAM extends up to 0xBFFFF instead of 0x9FFFF */ - if (mempages >= (640UL/4UL)) /* 640KB */ - memsize_real_code = 4; - else if (mempages >= (512UL/4UL)) /* 512KB */ - memsize_real_code = 3; - else if (mempages >= (384UL/4UL)) /* 384KB */ - memsize_real_code = 2; - else if (mempages >= (256UL/4UL)) /* 256KB */ - memsize_real_code = 1; - else /* 128KB */ - memsize_real_code = 0; - - void pc98_msw3_set_ramsize(const unsigned char b); - pc98_msw3_set_ramsize(memsize_real_code); - - /* CRT status */ - /* bit[7:6] = 00=conventional compatible 01=extended attr JEH 10=extended attr EGH - * bit[5:5] = Single event timer in use flag 1=busy 0=not used - * bit[4:4] = ? - * bit[3:3] = raster scan 1=non-interlaced 0=interlaced - * bit[2:2] = Content ruled line color 1=I/O set value 0=attributes of VRAM - * bit[1:1] = ? - * bit[0:0] = 480-line mode 1=640x480 0=640x400 or 640x200 */ - mem_writeb(0x459,0x08/*non-interlaced*/); - - /* Time stamper */ - /* bit[7:7] = 1=Port 5Fh exists 0=No such port Write to port 0x5F to wait 0.6us - * bit[6:6] = ? - * bit[5:5] = "Power" ? - * bit[4:4] = 1=PCMCIA BIOS running 0=not running - * bit[3:3] = ? - * bit[2:2] = 1=Time stamper (I/O ports 0x5C and 0x5E) available - * bit[1:1] = 1=Card I/O slot function 0=No card slot function - * bit[0:0] = 1=386SL(98) 0=Other */ - mem_writeb(0x45B,(pc98_timestamp5c?0x4:0x0)|0x80/*port 5Fh*/); - - /* CPU/Display */ - /* bit[7:7] = 486SX equivalent (?) 1=yes - * bit[6:6] = PC-9821 Extended Graph Architecture supported (FIXME: Is this the same as having EGC?) 1=yes - * bit[5:5] = LCD display is color 1=yes 0=no - * bit[4:4] = ? - * bit[3:3] = ROM drive allow writing - * bit[2:2] = 98 NOTE PC-9801N-08 expansion I/O box connected - * bit[1:1] = 98 NOTE prohibit transition to power saving mode - * bit[0:0] = 98 NOTE coprocessor function available */ - mem_writeb(0x45C,(enable_pc98_egc ? 0x40/*Extended Graphics*/ : 0x00)); - - /* CPU type in bits [1:0] */ - if (CPU_ArchitectureType >= CPU_ARCHTYPE_286) { - mem_writeb(0x480,CPU_ArchitectureType >= CPU_ARCHTYPE_386 ? 3 : 1); - } - - - /* Keyboard type */ - /* bit[7:7] = ? - * bit[6:6] = keyboard type bit 1 - * bit[5:5] = EMS page frame at B0000h 1=present 0=none - * bit[4:4] = EMS page frame at B0000h 1=page frame 0=G-VRAM - * bit[3:3] = keyboard type bit 0 - * bit[2:2] = High resolution memory window available - * bit[1:1] = ? - * bit[0:0] = ? - * - * keyboard bits[1:0] from bit 6 as bit 1 and bit 3 as bit 0 combined: - * 11 = new keyboard (NUM key, DIP switch 2-7 OFF) - * 10 = new keyboard (without NUM key) - * 01 = new keyboard (NUM key, DIP switch 2-7 ON) - * 00 = old keyboard - * - * The old keyboard is documented not to support software control of CAPS and KANA states */ - /* TODO: Make this a dosbox-x.conf option. Default is new keyboard without NUM key because that is - * what keyboard emulation currently acts like anyway. */ - mem_writeb(0x481,0x40/*bit 6=1 bit 3=0 new keyboard without NUM key*/); - - /* BIOS flags */ - /* bit[7:7] = Startup 1=hot start 0=cold start - * bit[6:6] = BASIC type ?? - * bit[5:5] = Keyboard beep 1=don't beep 0=beep ... when buffer full - * bit[4:4] = Expansion conv RAM 1=present 0=absent - * bit[3:3] = ?? - * bit[2:2] = ?? - * bit[1:1] = HD mode 1=1MB mode 0=640KB mode ... of the floppy drive - * bit[0:0] = Model 1=other 0=PC-9801 original */ - /* NTS: MS-DOS 5.0 appears to reduce it's BIOS calls and render the whole - * console as green IF bit 0 is clear. - * - * If bit 0 is set, INT 1Ah will be hooked by MS-DOS and, for some odd reason, - * MS-DOS's hook proc will call to our INT 1Ah + 0x19 bytes. */ - mem_writeb(0x500,0x01 | 0x02/*high density drive*/); - - /* BIOS flags */ - /* timer setup will set/clear bit 7 */ - /* bit[7:7] = system clock freq 1=8MHz 0=5/10Mhz - * = timer clock freq 1=1.9968MHz 0=2.4576MHz - * bit[6:6] = CPU 1=V30 0=Intel (8086 through Pentium) - * bit[5:5] = Model info 1=Other model 0=PC-9801 Muji, PC-98XA - * bit[4:4] = Model info ... - * bit[3:3] = Model info 1=High res 0=normal - * bit[2:0] = Realmode memsize - * 000=128KB 001=256KB - * 010=384KB 011=512KB - * 100=640KB 101=768KB - * - * Ref: http://hackipedia.org/browse/Computer/Platform/PC,%20NEC%20PC-98/Collections/Undocumented%209801,%209821%20Volume%202%20(webtech.co.jp)/memsys.txt */ - /* NTS: High resolution means 640x400, not the 1120x750 mode known as super high resolution mode. - * DOSBox-X does not yet emulate super high resolution nor does it emulate the 15khz 200-line "standard" mode. - * ref: https://github.com/joncampbell123/dosbox-x/issues/906#issuecomment-434513930 - * ref: https://jisho.org/search?utf8=%E2%9C%93&keyword=%E8%B6%85 */ - mem_writeb(0x501,0x20 | memsize_real_code); - - /* keyboard buffer */ - mem_writew(0x524/*tail*/,0x502); - mem_writew(0x526/*tail*/,0x502); - - /* number of scanlines per text row - 1 */ - mem_writeb(0x53B,0x0F); // CRT_RASTER, 640x400 24.83KHz-hsync 56.42Hz-vsync - - /* Text screen status. - * Note that most of the bits are used verbatim in INT 18h AH=0Ah/AH=0Bh */ - /* bit[7:7] = High resolution display 1=yes 0=no (standard) NOT super high res - * bit[6:6] = vsync 1=VSYNC wait 0=end of vsync handling - * bit[5:5] = unused - * bit[4:4] = Number of lines 1=30 lines 0=20/25 lines - * bit[3:3] = K-CG access mode 1=dot access 0=code access - * bit[2:2] = Attribute mode (how to handle bit 4) 1=Simp. graphic 0=Vertical line - * bit[1:1] = Number of columns 1=40 cols 0=80 cols - * bit[0:0] = Number of lines 1=20/30 lines 0=25 lines */ - mem_writeb(0x53C,(true/*TODO*/ ? 0x80/*high res*/ : 0x00/*standard*/)); - - /* BIOS raster location */ - mem_writew(0x54A,0x1900); - - /* BIOS flags */ - /* bit[7:7] = Graphics display state 1=Visible 0=Blanked (hidden) - * bit[6:6] = CRT type 1=high res 0=standard NOT super high res - * bit[5:5] = Horizontal sync rate 1=31.47KHz 0=24.83KHz - * bit[4:4] = CRT line mode 1=480-line 0=400-line - * bit[3:3] = Number of user-defined characters 1=188+ 0=63 - * bit[2:2] = Extended graphics RAM (for 16-color) 1=present 0=absent - * bit[1:1] = Graphics Charger is present 1=present 0=absent - * bit[0:0] = DIP switch 1-8 at startup 1=ON 0=OFF (support GLIO 16-colors) */ - mem_writeb(0x54C,(true/*TODO*/ ? 0x40/*high res*/ : 0x00/*standard*/) | (enable_pc98_grcg ? 0x02 : 0x00) | (enable_pc98_16color ? 0x05 : 0x00) | (pc98_31khz_mode ? 0x20/*31khz*/ : 0x00/*24khz*/) | (enable_pc98_188usermod ? 0x08 : 0x00)); // PRXCRT, 16-color G-VRAM, GRCG - - /* BIOS flags */ - /* bit[7:7] = PC-9821 graphics mode (INT 18h AH=4Dh CH=01h/00h) 1=extend 0=normal - * bit[6:6] = Enhanced Graphics Charger (EGC) is present - * bit[5:5] = GDC at 5.0MHz at boot up (copy of DIP switch 2-8 at startup) 1=yes 0=no - * bit[4:4] = Always "flickerless" drawing mode - * bit[3:3] = Drawing mode with flicker - * bit[2:2] = GDC clock 1=5MHz 0=2.5MHz - * bit[1:0] = Drawing mode of the GDC - * 00 = REPLACE - * 01 = COMPLEMENT - * 10 = CLEAR - * 11 = SET */ - mem_writeb(0x54D, - (enable_pc98_egc ? 0x40 : 0x00) | - (gdc_5mhz_mode ? 0x20 : 0x00) | - (gdc_5mhz_mode ? 0x04 : 0x00)); // EGC - - /* BIOS flags */ - /* bit[7:7] = INT 18h AH=30h/31h support enabled - * bit[6:3] = 0 (unused) - * bit[2:2] = Enhanced Graphics Mode (EGC) supported - * bit[1:0] = Graphic resolution - * 00 = 640x200 upper half (2/8/16-color mode) - * 01 = 640x200 lower half (2/8/16-color mode) - * 10 = 640x400 (2/8/16/256-color mode) - * 11 = 640x480 256-color mode */ - mem_writeb(0x597,(enable_pc98_egc ? 0x04 : 0x00)/*EGC*/ | - (enable_pc98_egc ? 0x80 : 0x00)/*supports INT 18h AH=30h and AH=31h*/ | - 2/*640x400*/); - /* TODO: I would like to eventually add a dosbox-x.conf option that controls whether INT 18h AH=30h and 31h - * are enabled, so that retro-development can test code to see how it acts on a newer PC-9821 - * that supports it vs an older PC-9821 that doesn't. - * - * If the user doesn't set the option, then it is "auto" and determined by machine= PC-98 model and - * by another option in dosbox-x.conf that determines whether 31khz support is enabled. - * - * NOTED: Neko Project II determines INT 18h AH=30h availability by whether or not it was compiled - * with 31khz hsync support (SUPPORT_CRT31KHZ) */ - - /* Set up the translation table pointer, which is relative to segment 0xFD80 */ - mem_writew(0x522,(unsigned int)(Real2Phys(BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION) - 0xFD800)); - mem_writew(0x5C6,(unsigned int)(Real2Phys(BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION) - 0xFD800)); - mem_writew(0x5C8,0xFD80); - } - - if (bios_user_reset_vector_blob != 0 && !bios_user_reset_vector_blob_run) { - LOG_MSG("BIOS POST: Running user reset vector blob at 0x%lx",(unsigned long)bios_user_reset_vector_blob); - bios_user_reset_vector_blob_run = true; - - assert((bios_user_reset_vector_blob&0xF) == 0); /* must be page aligned */ - - SegSet16(cs,bios_user_reset_vector_blob>>4); - reg_eip = 0; - -#if C_DEBUG - /* help the debugger reflect the new instruction pointer */ - DEBUG_CheckCSIP(); -#endif - - return CBRET_NONE; - } - - if (cpu.pmode) E_Exit("BIOS error: POST function called while in protected/vm86 mode"); - - CPU_CLI(); - - /* we need A20 enabled for BIOS boot-up */ - void A20Gate_OverrideOn(Section *sec); - void MEM_A20_Enable(bool enabled); - A20Gate_OverrideOn(NULL); - MEM_A20_Enable(true); - - BIOS_OnResetComplete(NULL); - - adapter_scan_start = 0xC0000; - bios_has_exec_vga_bios = false; - LOG(LOG_MISC,LOG_DEBUG)("BIOS: executing POST routine"); - - if (ACPI_REGION_SIZE != 0 && !IS_PC98_ARCH) { - // place it just below the mirror of the BIOS at FFFF0000 - ACPI_BASE = 0xFFFF0000 - ACPI_REGION_SIZE; - - LOG(LOG_MISC,LOG_DEBUG)("ACPI: Setting up version %u.%02x at 0x%lx-0x%lx", - ACPI_version>>8,ACPI_version&0xFF, - (unsigned long)ACPI_BASE,(unsigned long)(ACPI_BASE+ACPI_REGION_SIZE-1lu)); - - ACPI_init(); - ACPI_enabled = true; - ACPI_mem_enable(true); - memset(ACPI_buffer,0,ACPI_buffer_size); - } - - // TODO: Anything we can test in the CPU here? - - // initialize registers - SegSet16(ds,0x0000); - SegSet16(es,0x0000); - SegSet16(fs,0x0000); - SegSet16(gs,0x0000); - SegSet16(ss,0x0000); - - { - Bitu sz = MEM_TotalPages(); - - /* The standard BIOS is said to put its stack (at least at OS boot time) 512 bytes past the end of the boot sector - * meaning that the boot sector loads to 0000:7C00 and the stack is set grow downward from 0000:8000 */ - - if (sz > 8) sz = 8; /* 4KB * 8 = 32KB = 0x8000 */ - sz *= 4096; - reg_esp = sz - 4; - reg_ebp = 0; - LOG(LOG_MISC,LOG_DEBUG)("BIOS: POST stack set to 0000:%04x",reg_esp); - } - - if (dosbox_int_iocallout != IO_Callout_t_none) { - IO_FreeCallout(dosbox_int_iocallout); - dosbox_int_iocallout = IO_Callout_t_none; - } - - if (isapnp_biosstruct_base != 0) { - ROMBIOS_FreeMemory(isapnp_biosstruct_base); - isapnp_biosstruct_base = 0; - } - - if (acpi_iocallout != IO_Callout_t_none) { - IO_FreeCallout(acpi_iocallout); - acpi_iocallout = IO_Callout_t_none; - } - - if (BOCHS_PORT_E9) { - delete BOCHS_PORT_E9; - BOCHS_PORT_E9=NULL; - } - if (ISAPNP_PNP_ADDRESS_PORT) { - delete ISAPNP_PNP_ADDRESS_PORT; - ISAPNP_PNP_ADDRESS_PORT=NULL; - } - if (ISAPNP_PNP_DATA_PORT) { - delete ISAPNP_PNP_DATA_PORT; - ISAPNP_PNP_DATA_PORT=NULL; - } - if (ISAPNP_PNP_READ_PORT) { - delete ISAPNP_PNP_READ_PORT; - ISAPNP_PNP_READ_PORT=NULL; - } - - if (bochs_port_e9) { - if (BOCHS_PORT_E9 == NULL) { - BOCHS_PORT_E9 = new IO_WriteHandleObject; - BOCHS_PORT_E9->Install(0xE9,bochs_port_e9_write,IO_MB); - } - LOG(LOG_MISC,LOG_DEBUG)("Bochs port E9h emulation is active"); - } - else { - if (BOCHS_PORT_E9 != NULL) { - delete BOCHS_PORT_E9; - BOCHS_PORT_E9 = NULL; - } - } - - extern Bitu call_default; - - if (IS_PC98_ARCH) { - /* INT 00h-FFh generic stub routine */ - /* NTS: MS-DOS on PC-98 will fill all yet-unused interrupt vectors with a stub. - * No vector is left at 0000:0000. On a related note, PC-98 games apparently - * like to call INT 33h (mouse functions) without first checking that the - * vector is non-null. */ - callback[18].Uninstall(); - callback[18].Install(&INTGEN_PC98_Handler,CB_IRET,"Int stub ???"); - for (unsigned int i=0x00;i < 0x100;i++) RealSetVec(i,callback[18].Get_RealPointer()); - - for (unsigned int i=0x00;i < 0x08;i++) - real_writed(0,i*4,CALLBACK_RealPointer(call_default)); - - // STOP interrupt or invalid opcode - real_writed(0,0x06*4,CALLBACK_RealPointer(call_pc98_default_stop)); - - // Magical Girl Pretty Sammy installer - // Installer enters an infinite loop if lower 8 bits of the segment portion of int 7 are 0 - real_writew(0, 7*4, real_readw(0, 7*4) - 0x10); - real_writew(0, 7*4+2, real_readw(0, 7*4+2) + 1); - } - else { - /* Clear the vector table */ - for (uint16_t i=0x70*4;i<0x400;i++) real_writeb(0x00,i,0); - - /* Only setup default handler for first part of interrupt table */ - for (uint16_t ct=0;ct<0x60;ct++) { - real_writed(0,ct*4,CALLBACK_RealPointer(call_default)); - } - for (uint16_t ct=0x68;ct<0x70;ct++) { - if(!IS_J3100 || ct != 0x6f) - real_writed(0,ct*4,CALLBACK_RealPointer(call_default)); - } - - // default handler for IRQ 2-7 - for (uint16_t ct=0x0A;ct <= 0x0F;ct++) - RealSetVec(ct,BIOS_DEFAULT_IRQ07_DEF_LOCATION); - } - - if (unhandled_irq_method == UNHANDLED_IRQ_COOPERATIVE_2ND) { - // PC-98 style: Master PIC ack with 0x20 for IRQ 0-7. - // For the slave PIC, ack with 0x20 on the slave, then only ack the master (cascade interrupt) - // if the ISR register on the slave indicates none are in service. - CALLBACK_Setup(call_irq07default,NULL,CB_IRET_EOI_PIC1,Real2Phys(BIOS_DEFAULT_IRQ07_DEF_LOCATION),"bios irq 0-7 default handler"); - CALLBACK_Setup(call_irq815default,Default_IRQ_Handler_Cooperative_Slave_Pic,CB_IRET,Real2Phys(BIOS_DEFAULT_IRQ815_DEF_LOCATION),"bios irq 8-15 default handler"); - } - else { - // IBM PC style: Master PIC ack with 0x20, slave PIC ack with 0x20, no checking - CALLBACK_Setup(call_irq07default,NULL,CB_IRET_EOI_PIC1,Real2Phys(BIOS_DEFAULT_IRQ07_DEF_LOCATION),"bios irq 0-7 default handler"); - CALLBACK_Setup(call_irq815default,NULL,CB_IRET_EOI_PIC2,Real2Phys(BIOS_DEFAULT_IRQ815_DEF_LOCATION),"bios irq 8-15 default handler"); - } - - if (IS_PC98_ARCH) { - BIOS_UnsetupKeyboard(); - BIOS_UnsetupDisks(); - - /* no such INT 4Bh */ - int4b_callback.Uninstall(); - - /* remove some IBM-style BIOS interrupts that don't exist on PC-98 */ - /* IRQ to INT arrangement - * - * IBM PC-98 IRQ - * -------------------------------- - * 0x08 0x08 0 - * 0x09 0x09 1 - * 0x0A CASCADE 0x0A 2 - * 0x0B 0x0B 3 - * 0x0C 0x0C 4 - * 0x0D 0x0D 5 - * 0x0E 0x0E 6 - * 0x0F 0x0F CASCADE 7 - * 0x70 0x10 8 - * 0x71 0x11 9 - * 0x72 0x12 10 - * 0x73 0x13 11 - * 0x74 0x14 12 - * 0x75 0x15 13 - * 0x76 0x16 14 - * 0x77 0x17 15 - * - * As part of the change the IRQ cascade emulation needs to change for PC-98 as well. - * IBM uses IRQ 2 for cascade. - * PC-98 uses IRQ 7 for cascade. */ - - void INT10_EnterPC98(Section *sec); - INT10_EnterPC98(NULL); /* INT 10h */ - - callback_pc98_lio.Uninstall(); - - callback_pc98_avspcm.Uninstall(); - - callback[1].Uninstall(); /* INT 11h */ - callback[2].Uninstall(); /* INT 12h */ - callback[3].Uninstall(); /* INT 14h */ - callback[4].Uninstall(); /* INT 15h */ - callback[5].Uninstall(); /* INT 17h */ - callback[6].Uninstall(); /* INT 1Ah */ - callback[7].Uninstall(); /* INT 1Ch */ - callback[10].Uninstall(); /* INT 19h */ - callback[11].Uninstall(); /* INT 76h: IDE IRQ 14 */ - callback[12].Uninstall(); /* INT 77h: IDE IRQ 15 */ - callback[15].Uninstall(); /* INT 18h: Enter BASIC */ - callback[19].Uninstall(); /* INT 1Bh */ - - /* IRQ 6 is nothing special */ - callback[13].Uninstall(); /* INT 0Eh: IDE IRQ 6 */ - callback[13].Install(NULL,CB_IRET_EOI_PIC1,"irq 6"); - - /* IRQ 8 is nothing special */ - callback[8].Uninstall(); - callback[8].Install(NULL,CB_IRET_EOI_PIC2,"irq 8"); - - /* IRQ 9 is nothing special */ - callback[9].Uninstall(); - callback[9].Install(NULL,CB_IRET_EOI_PIC2,"irq 9"); - - /* INT 18h keyboard and video display functions */ - callback[1].Install(&INT18_PC98_Handler,CB_INT16,"Int 18 keyboard and display"); - callback[1].Set_RealVec(0x18,/*reinstall*/true); - - /* INT 19h *STUB* */ - callback[2].Install(&INT19_PC98_Handler,CB_IRET,"Int 19 ???"); - callback[2].Set_RealVec(0x19,/*reinstall*/true); - - /* INT 1Ah *STUB* */ - callback[3].Install(&INT1A_PC98_Handler,CB_IRET,"Int 1A ???"); - callback[3].Set_RealVec(0x1A,/*reinstall*/true); - - /* MS-DOS 5.0 FIXUP: - * - For whatever reason, if we set bits in the BIOS data area that - * indicate we're NOT the original model of the PC-98, MS-DOS will - * hook our INT 1Ah and then call down to 0x19 bytes into our - * INT 1Ah procedure. If anyone can explain this, I'd like to hear it. --J.C. - * - * NTS: On real hardware, the BIOS appears to have an INT 1Ah, a bunch of NOPs, - * then at 0x19 bytes into the procedure, the actual handler. This is what - * MS-DOS is pointing at. - * - * But wait, there's more. - * - * MS-DOS calldown pushes DS and DX onto the stack (after the IRET frame) - * before JMPing into the BIOS. - * - * Apparently the function at INT 1Ah + 0x19 is expected to do this: - * - * - * POP DX - * POP DS - * IRET - * - * I can only imaging what a headache this might have caused NEC when - * maintaining the platform and compatibility! */ - { - Bitu addr = callback[3].Get_RealPointer(); - addr = ((addr >> 16) << 4) + (addr & 0xFFFF); - - /* to make this work, we need to pop the two regs, then JMP to our - * callback and proceed as normal. */ - phys_writeb(addr + 0x19,0x5A); // POP DX - phys_writeb(addr + 0x1A,0x1F); // POP DS - phys_writeb(addr + 0x1B,0xEB); // jmp short ... - phys_writeb(addr + 0x1C,0x100 - 0x1D); - } - - /* INT 1Bh *STUB* */ - callback[4].Install(&INT1B_PC98_Handler,CB_IRET,"Int 1B ???"); - callback[4].Set_RealVec(0x1B,/*reinstall*/true); - - /* INT 1Ch *STUB* */ - callback[5].Install(&INT1C_PC98_Handler,CB_IRET,"Int 1C ???"); - callback[5].Set_RealVec(0x1C,/*reinstall*/true); - - /* INT 1Dh *STUB* */ - /* Place it in the PC-98 int vector area at FD80:0000 to satisfy some DOS games - * that detect PC-98 from the segment value of the vector (issue #927). - * Note that on real hardware (PC-9821) INT 1Dh appears to be a stub that IRETs immediately. */ - callback[6].Install(&INT1D_PC98_Handler,CB_IRET,"Int 1D ???"); -// callback[6].Set_RealVec(0x1D,/*reinstall*/true); - { - Bitu ofs = 0xFD813; /* 0xFD80:0013 try not to look like a phony address */ - unsigned int vec = 0x1D; - uint32_t target = callback[6].Get_RealPointer(); - - phys_writeb(ofs+0,0xEA); // JMP FAR - phys_writed(ofs+1,target); - - phys_writew((vec*4)+0,(ofs-0xFD800)); - phys_writew((vec*4)+2,0xFD80); - } - - /* INT 1Eh *STUB* */ - callback[7].Install(&INT1E_PC98_Handler,CB_IRET,"Int 1E ???"); - callback[7].Set_RealVec(0x1E,/*reinstall*/true); - - /* INT 1Fh *STUB* */ - callback[10].Install(&INT1F_PC98_Handler,CB_IRET,"Int 1F ???"); - callback[10].Set_RealVec(0x1F,/*reinstall*/true); - - /* INT DCh *STUB* */ - callback[16].Install(&INTDC_PC98_Handler,CB_IRET,"Int DC ???"); - callback[16].Set_RealVec(0xDC,/*reinstall*/true); - - /* INT F2h *STUB* */ - callback[17].Install(&INTF2_PC98_Handler,CB_IRET,"Int F2 ???"); - callback[17].Set_RealVec(0xF2,/*reinstall*/true); - - // default handler for IRQ 2-7 - for (uint16_t ct=0x0A;ct <= 0x0F;ct++) - RealSetVec(ct,BIOS_DEFAULT_IRQ07_DEF_LOCATION); - - // default handler for IRQ 8-15 - for (uint16_t ct=0;ct < 8;ct++) - RealSetVec(ct+(IS_PC98_ARCH ? 0x10 : 0x70),BIOS_DEFAULT_IRQ815_DEF_LOCATION); - - // LIO graphics interface (number of entry points, unknown WORD value and offset into the segment). - // For more information see Chapter 6 of this PDF [https://ia801305.us.archive.org/8/items/PC9800TechnicalDataBookBIOS1992/PC-9800TechnicalDataBook_BIOS_1992_text.pdf] - { - callback_pc98_lio.Install(&PC98_BIOS_LIO,CB_IRET,"LIO graphics library"); - - Bitu ofs = 0xF990u << 4u; // F990:0000... - unsigned int entrypoints = 0x11; - Bitu final_addr = callback_pc98_lio.Get_RealPointer(); - - /* NTS: Based on GAME/MAZE 999 behavior, these numbers are interrupt vector numbers. - * The entry point marked 0xA0 is copied by the game to interrupt vector A0 and - * then called with INT A0h even though it blindly assumes the numbers are - * sequential from 0xA0-0xAF. */ - unsigned char entrypoint_indexes[0x11] = { - 0xA0, 0xA1, 0xA2, 0xA3, // +0x00 - 0xA4, 0xA5, 0xA6, 0xA7, // +0x04 - 0xA8, 0xA9, 0xAA, 0xAB, // +0x08 - 0xAC, 0xAD, 0xAE, 0xAF, // +0x0C - 0xCE // +0x10 - }; - - assert(((entrypoints * 4) + 4) <= 0x50); - assert((50 + (entrypoints * 7)) <= 0x100); // a 256-byte region is set aside for this! - - phys_writed(ofs+0,entrypoints); - for (unsigned int ent=0;ent < entrypoints;ent++) { - /* each entry point is "MOV AL, ; JMP FAR " */ - /* Yksoft1's patch suggests a segment offset of 0x50 which I'm OK with */ - unsigned int ins_ofs = ofs + 0x50 + (ent * 7); - - phys_writew(ofs+4+(ent*4)+0,entrypoint_indexes[ent]); - phys_writew(ofs+4+(ent*4)+2,ins_ofs - ofs); - - phys_writeb(ins_ofs+0,0xB0); // MOV AL,(entrypoint index) - phys_writeb(ins_ofs+1,entrypoint_indexes[ent]); - phys_writeb(ins_ofs+2,0xEA); // JMP FAR - phys_writed(ins_ofs+3,final_addr); - // total: ins_ofs+7 - } - } - - callback_pc98_avspcm.Install(&PC98_AVSDRV_PCM_Handler,CB_IRET,"AVSDRV.SYS PCM driver"); - callback_pc98_avspcm.Set_RealVec(0xd9, true); - } - - if (IS_PC98_ARCH) { - real_writew(0,0x58A,0x0000U); // countdown timer value - PIC_SetIRQMask(0,true); /* PC-98 keeps the timer off unless INT 1Ch is called to set a timer interval */ - } - - bool null_68h = false; - - { - Section_prop * section=static_cast(control->GetSection("dos")); - - null_68h = section->Get_bool("zero unused int 68h"); - } - - /* Default IRQ handler */ - if (call_irq_default == 0) - call_irq_default = CALLBACK_Allocate(); - CALLBACK_Setup(call_irq_default, &Default_IRQ_Handler, CB_IRET, "irq default"); - RealSetVec(0x0b, CALLBACK_RealPointer(call_irq_default)); // IRQ 3 - RealSetVec(0x0c, CALLBACK_RealPointer(call_irq_default)); // IRQ 4 - RealSetVec(0x0d, CALLBACK_RealPointer(call_irq_default)); // IRQ 5 - RealSetVec(0x0f, CALLBACK_RealPointer(call_irq_default)); // IRQ 7 - if (!IS_PC98_ARCH) { - RealSetVec(0x72, CALLBACK_RealPointer(call_irq_default)); // IRQ 10 - RealSetVec(0x73, CALLBACK_RealPointer(call_irq_default)); // IRQ 11 - } - - // setup a few interrupt handlers that point to bios IRETs by default - real_writed(0,0x66*4,CALLBACK_RealPointer(call_default)); //war2d - real_writed(0,0x67*4,CALLBACK_RealPointer(call_default)); - if (machine==MCH_CGA || null_68h) real_writed(0,0x68*4,0); //Popcorn - real_writed(0,0x5c*4,CALLBACK_RealPointer(call_default)); //Network stuff - //real_writed(0,0xf*4,0); some games don't like it - - bios_first_init = false; - - DispatchVMEvent(VM_EVENT_BIOS_INIT); - - TIMER_BIOS_INIT_Configure(); - - void INT10_Startup(Section *sec); - INT10_Startup(NULL); - - if (!IS_PC98_ARCH) { - extern uint8_t BIOS_tandy_D4_flag; - real_writeb(0x40,0xd4,BIOS_tandy_D4_flag); - } - - /* INT 13 Bios Disk Support */ - BIOS_SetupDisks(); - - /* INT 16 Keyboard handled in another file */ - BIOS_SetupKeyboard(); - - if (!IS_PC98_ARCH) { - int4b_callback.Set_RealVec(0x4B,/*reinstall*/true); - callback[1].Set_RealVec(0x11,/*reinstall*/true); - callback[2].Set_RealVec(0x12,/*reinstall*/true); - callback[3].Set_RealVec(0x14,/*reinstall*/true); - callback[4].Set_RealVec(0x15,/*reinstall*/true); - callback[5].Set_RealVec(0x17,/*reinstall*/true); - callback[6].Set_RealVec(0x1A,/*reinstall*/true); - callback[7].Set_RealVec(0x1C,/*reinstall*/true); - callback[8].Set_RealVec(0x70,/*reinstall*/true); - callback[9].Set_RealVec(0x71,/*reinstall*/true); - callback[10].Set_RealVec(0x19,/*reinstall*/true); - callback[11].Set_RealVec(0x76,/*reinstall*/true); - callback[12].Set_RealVec(0x77,/*reinstall*/true); - callback[13].Set_RealVec(0x0E,/*reinstall*/true); - callback[15].Set_RealVec(0x18,/*reinstall*/true); - callback[19].Set_RealVec(0x1B,/*reinstall*/true); - } - - // FIXME: We're using IBM PC memory size storage even in PC-98 mode. - // This cannot be removed, because the DOS kernel uses this variable even in PC-98 mode. - mem_writew(BIOS_MEMORY_SIZE,t_conv); - // According to Ripsaw, Tandy systems hold the real memory size in a normally reserved field [https://www.vogons.org/viewtopic.php?p=948898#p948898] - // According to the PCjr hardware reference library that memory location means the same thing - if (machine == MCH_PCJR || machine == MCH_TANDY) mem_writew(BIOS_MEMORY_SIZE+2,t_conv_real); - - RealSetVec(0x08,BIOS_DEFAULT_IRQ0_LOCATION); - // pseudocode for CB_IRQ0: - // sti - // callback INT8_Handler - // push ds,ax,dx - // int 0x1c - // cli - // mov al, 0x20 - // out 0x20, al - // pop dx,ax,ds - // iret - - if (!IS_PC98_ARCH) { - mem_writed(BIOS_TIMER,0); //Calculate the correct time - - // INT 05h: Print Screen - // IRQ1 handler calls it when PrtSc key is pressed; does nothing unless hooked - phys_writeb(Real2Phys(BIOS_DEFAULT_INT5_LOCATION), 0xcf); - RealSetVec(0x05, BIOS_DEFAULT_INT5_LOCATION); - - phys_writew(Real2Phys(RealGetVec(0x12))+0x12,0x20); //Hack for Jurresic - } - - phys_writeb(Real2Phys(BIOS_DEFAULT_HANDLER_LOCATION),0xcf); /* bios default interrupt vector location -> IRET */ - - if (!IS_PC98_ARCH) { - // tandy DAC setup - bool use_tandyDAC=(real_readb(0x40,0xd4)==0xff); - - tandy_sb.port=0; - tandy_dac.port=0; - if (use_tandyDAC) { - /* tandy DAC sound requested, see if soundblaster device is available */ - Bitu tandy_dac_type = 0; - if (Tandy_InitializeSB()) { - tandy_dac_type = 1; - } else if (Tandy_InitializeTS()) { - tandy_dac_type = 2; - } - if (tandy_dac_type) { - real_writew(0x40,0xd0,0x0000); - real_writew(0x40,0xd2,0x0000); - real_writeb(0x40,0xd4,0xff); /* tandy DAC init value */ - real_writed(0x40,0xd6,0x00000000); - /* install the DAC callback handler */ - tandy_DAC_callback[0]=new CALLBACK_HandlerObject(); - tandy_DAC_callback[1]=new CALLBACK_HandlerObject(); - tandy_DAC_callback[0]->Install(&IRQ_TandyDAC,CB_IRET,"Tandy DAC IRQ"); - tandy_DAC_callback[1]->Install(NULL,CB_TDE_IRET,"Tandy DAC end transfer"); - // pseudocode for CB_TDE_IRET: - // push ax - // mov ax, 0x91fb - // int 15 - // cli - // mov al, 0x20 - // out 0x20, al - // pop ax - // iret - - uint8_t tandy_irq = 7; - if (tandy_dac_type==1) tandy_irq = tandy_sb.irq; - else if (tandy_dac_type==2) tandy_irq = tandy_dac.irq; - uint8_t tandy_irq_vector = tandy_irq; - if (tandy_irq_vector<8) tandy_irq_vector += 8; - else tandy_irq_vector += (0x70-8); - - RealPt current_irq=RealGetVec(tandy_irq_vector); - real_writed(0x40,0xd6,current_irq); - for (uint16_t i=0; i<0x10; i++) phys_writeb(PhysMake(0xf000,0xa084+i),0x80); - } else real_writeb(0x40,0xd4,0x00); - } - } - - if (!IS_PC98_ARCH) { - /* Setup some stuff in 0x40 bios segment */ - - // Disney workaround - // uint16_t disney_port = mem_readw(BIOS_ADDRESS_LPT1); - // port timeouts - // always 1 second even if the port does not exist - // BIOS_SetLPTPort(0, disney_port); - for(Bitu i = 1; i < 3; i++) BIOS_SetLPTPort(i, 0); - mem_writeb(BIOS_COM1_TIMEOUT,1); - mem_writeb(BIOS_COM2_TIMEOUT,1); - mem_writeb(BIOS_COM3_TIMEOUT,1); - mem_writeb(BIOS_COM4_TIMEOUT,1); - - void BIOS_Post_register_parports(); - BIOS_Post_register_parports(); - - void BIOS_Post_register_comports(); - BIOS_Post_register_comports(); - } - - if (!IS_PC98_ARCH) { - /* Setup equipment list */ - // look http://www.bioscentral.com/misc/bda.htm - - //uint16_t config=0x4400; //1 Floppy, 2 serial and 1 parallel - uint16_t config = 0x0; - - config |= bios_post_parport_count() << 14; - config |= bios_post_comport_count() << 9; - -#if (C_FPU) - //FPU - if (enable_fpu) - config|=0x2; -#endif - switch (machine) { - case MCH_MDA: - case MCH_HERC: - //Startup monochrome - config|=0x30; - break; - case EGAVGA_ARCH_CASE: - case MCH_CGA: - case MCH_MCGA: - case TANDY_ARCH_CASE: - case MCH_AMSTRAD: - //Startup 80x25 color - config|=0x20; - break; - default: - //EGA VGA - config|=0; - break; - } - - // PS2 mouse - if (KEYBOARD_Report_BIOS_PS2Mouse()) - config |= 0x04; - - // DMA *not* supported - Ancient Art of War CGA uses this to identify PCjr - if (machine==MCH_PCJR) config |= 0x100; - - // Several online sources say bit 0 indicates a floppy drive is installed. - // Testing of a couple BIOSes from 1992 and 1993 showed bit 0 to always be 1, - // even with no floppy drives installed or configured in the BIOS. - // Maybe 0 is possible in older BIOSes. - config |= 0x01; - - // Bit 6 is 1 if there are 2 floppies connected and configured in the BIOS. - // Setting to 1 since DOSBox-X can mount floppy images in both drives A and B. - config |= 0x40; - - // Bit 12 is "game I/O attached" for PCJr, Tandy and PC/XT, and 0 (not used) for PC/AT - if ((CPU_ArchitectureType == CPU_ARCHTYPE_8086) && (joytype != JOY_NONE)) - config |= 0x1000; - - mem_writew(BIOS_CONFIGURATION,config); - if (IS_EGAVGA_ARCH) config &= ~0x30; //EGA/VGA startup display mode differs in CMOS - CMOS_SetRegister(0x14,(uint8_t)(config&0xff)); //Should be updated on changes - } - - if (!IS_PC98_ARCH) { - /* Setup extended memory size */ - IO_Write(0x70,0x30); - size_extended=IO_Read(0x71); - IO_Write(0x70,0x31); - size_extended|=(IO_Read(0x71) << 8); - - uint32_t value = 0; - - RtcUpdateDone(); - IO_Write(0x70,0xB); - IO_Write(0x71,0x02); // BCD - - /* set BIOS_TIMER according to time/date of RTC */ - IO_Write(0x70,0); - const unsigned char sec = BCD2BIN(IO_Read(0x71)); - IO_Write(0x70,2); - const unsigned char min = BCD2BIN(IO_Read(0x71)); - IO_Write(0x70,4); - const unsigned char hour = BCD2BIN(IO_Read(0x71)); - - value = (uint32_t)(((hour * 3600.00) + (min * 60.00) + sec) * ((double)PIT_TICK_RATE/65536.0)); - - mem_writed(BIOS_TIMER,value); - } - else { - /* Provide a valid memory size anyway */ - size_extended=MEM_TotalPages()*4; - if (size_extended >= 1024) size_extended -= 1024; - else size_extended = 0; - } - - /* PS/2 mouse */ - void BIOS_PS2Mouse_Startup(Section *sec); - BIOS_PS2Mouse_Startup(NULL); - - if (!IS_PC98_ARCH) { - /* this belongs HERE not on-demand from INT 15h! */ - biosConfigSeg = ROMBIOS_GetMemory(16/*one paragraph*/,"BIOS configuration (INT 15h AH=0xC0)",/*paragraph align*/16)>>4; - if (biosConfigSeg != 0) { - PhysPt data = PhysMake(biosConfigSeg,0); - phys_writew(data,8); // 8 Bytes following - if (IS_TANDY_ARCH) { - if (machine==MCH_TANDY) { - // Model ID (Tandy) - phys_writeb(data+2,0xFF); - } else { - // Model ID (PCJR) - phys_writeb(data+2,0xFD); - } - phys_writeb(data+3,0x0A); // Submodel ID - phys_writeb(data+4,0x10); // Bios Revision - /* Tandy doesn't have a 2nd PIC, left as is for now */ - phys_writeb(data+5,(1<<6)|(1<<5)|(1<<4)); // Feature Byte 1 - } else { - if (machine==MCH_MCGA) { - /* PC/2 model 30 model */ - phys_writeb(data+2,0xFA); - phys_writeb(data+3,0x00); // Submodel ID (PS/2) model 30 - } else if (PS1AudioCard) { /* FIXME: Won't work because BIOS_Init() comes before PS1SOUND_Init() */ - phys_writeb(data+2,0xFC); // Model ID (PC) - phys_writeb(data+3,0x0B); // Submodel ID (PS/1). - } else { - phys_writeb(data+2,0xFC); // Model ID (PC) - phys_writeb(data+3,0x00); // Submodel ID - } - phys_writeb(data+4,0x01); // Bios Revision - phys_writeb(data+5,(1<<6)|(1<<5)|(1<<4)); // Feature Byte 1 - } - phys_writeb(data+6,(1<<6)); // Feature Byte 2 - phys_writeb(data+7,0); // Feature Byte 3 - phys_writeb(data+8,0); // Feature Byte 4 - phys_writeb(data+9,0); // Feature Byte 5 - } - } - - // ISA Plug & Play I/O ports - if (!IS_PC98_ARCH && ISAPNPPORT) { - ISAPNP_PNP_ADDRESS_PORT = new IO_WriteHandleObject; - ISAPNP_PNP_ADDRESS_PORT->Install(0x279,isapnp_write_port,IO_MB); - ISAPNP_PNP_DATA_PORT = new IO_WriteHandleObject; - ISAPNP_PNP_DATA_PORT->Install(0xA79,isapnp_write_port,IO_MB); - ISAPNP_PNP_READ_PORT = new IO_ReadHandleObject; - ISAPNP_PNP_READ_PORT->Install(ISA_PNP_WPORT,isapnp_read_port,IO_MB); - LOG(LOG_MISC,LOG_DEBUG)("Registered ISA PnP read port at 0x%03x",ISA_PNP_WPORT); - } - - if (enable_integration_device) { - /* integration device callout */ - if (dosbox_int_iocallout == IO_Callout_t_none) - dosbox_int_iocallout = IO_AllocateCallout(IO_TYPE_MB); - if (dosbox_int_iocallout == IO_Callout_t_none) - E_Exit("Failed to get dosbox-x integration IO callout handle"); - - { - IO_CalloutObject *obj = IO_GetCallout(dosbox_int_iocallout); - if (obj == NULL) E_Exit("Failed to get dosbox-x integration IO callout"); - - /* NTS: Ports 28h-2Bh conflict with extended DMA control registers in PC-98 mode. - * TODO: Move again, if DB28h-DB2Bh are taken by something standard on PC-98. */ - obj->Install(IS_PC98_ARCH ? 0xDB28 : 0x28, - IOMASK_Combine(IOMASK_FULL,IOMASK_Range(4)),dosbox_integration_cb_port_r,dosbox_integration_cb_port_w); - IO_PutCallout(obj); - } - - /* DOSBox-X integration device */ - if (!IS_PC98_ARCH && isapnpigdevice == NULL && enable_integration_device_pnp) { - isapnpigdevice = new ISAPnPIntegrationDevice; - ISA_PNP_devreg(isapnpigdevice); - } - } - - // ISA Plug & Play BIOS entrypoint - // NTS: Apparently, Windows 95, 98, and ME will re-enumerate and re-install PnP devices if our entry point changes its address. - if (!IS_PC98_ARCH && ISAPNPBIOS) { - Bitu base; - unsigned int i; - unsigned char c,tmp[256]; - - isapnp_biosstruct_base = base = ROMBIOS_GetMemory(0x21,"ISA Plug & Play BIOS struct",/*paragraph alignment*/0x10); - - if (base == 0) E_Exit("Unable to allocate ISA PnP struct"); - LOG_MSG("ISA Plug & Play BIOS enabled"); - - call_pnp_r = CALLBACK_Allocate(); - call_pnp_rp = PNPentry_real = CALLBACK_RealPointer(call_pnp_r); - CALLBACK_Setup(call_pnp_r,ISAPNP_Handler_RM,CB_RETF,"ISA Plug & Play entry point (real)"); - //LOG_MSG("real entry pt=%08lx\n",PNPentry_real); - - call_pnp_p = CALLBACK_Allocate(); - call_pnp_pp = PNPentry_prot = CALLBACK_RealPointer(call_pnp_p); - CALLBACK_Setup(call_pnp_p,ISAPNP_Handler_PM,CB_RETF,"ISA Plug & Play entry point (protected)"); - //LOG_MSG("prot entry pt=%08lx\n",PNPentry_prot); - - phys_writeb(base+0,'$'); - phys_writeb(base+1,'P'); - phys_writeb(base+2,'n'); - phys_writeb(base+3,'P'); - phys_writeb(base+4,0x10); /* Version: 1.0 */ - phys_writeb(base+5,0x21); /* Length: 0x21 bytes */ - phys_writew(base+6,0x0000); /* Control field: Event notification not supported */ - /* skip checksum atm */ - phys_writed(base+9,0); /* Event notify flag addr: (none) */ - phys_writed(base+0xD,call_pnp_rp); /* Real-mode entry point */ - phys_writew(base+0x11,call_pnp_pp&0xFFFF); /* Protected mode offset */ - phys_writed(base+0x13,(call_pnp_pp >> 12) & 0xFFFF0); /* Protected mode code segment base */ - phys_writed(base+0x17,ISAPNP_ID('D','O','S',0,8,4,0)); /* OEM device identifier (DOSBox-X 0.84.x) */ - phys_writew(base+0x1B,0xF000); /* real-mode data segment */ - phys_writed(base+0x1D,0xF0000); /* protected mode data segment address */ - /* run checksum */ - c=0; - for (i=0;i < 0x21;i++) { - if (i != 8) c += phys_readb(base+i); - } - phys_writeb(base+8,0x100-c); /* checksum value: set so that summing bytes across the struct == 0 */ - - /* input device (keyboard) */ - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_Keyboard,sizeof(ISAPNP_sysdev_Keyboard),true)) - LOG_MSG("ISAPNP register failed\n"); - - /* input device (mouse) */ - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_Mouse,sizeof(ISAPNP_sysdev_Mouse),true)) - LOG_MSG("ISAPNP register failed\n"); - - /* DMA controller */ - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_DMA_Controller,sizeof(ISAPNP_sysdev_DMA_Controller),true)) - LOG_MSG("ISAPNP register failed\n"); - - /* Interrupt controller */ - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_PIC,sizeof(ISAPNP_sysdev_PIC),true)) - LOG_MSG("ISAPNP register failed\n"); - - /* Timer */ - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_Timer,sizeof(ISAPNP_sysdev_Timer),true)) - LOG_MSG("ISAPNP register failed\n"); - - /* Realtime clock */ - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_RTC,sizeof(ISAPNP_sysdev_RTC),true)) - LOG_MSG("ISAPNP register failed\n"); - - /* PC speaker */ - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_PC_Speaker,sizeof(ISAPNP_sysdev_PC_Speaker),true)) - LOG_MSG("ISAPNP register failed\n"); - - /* System board */ - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_System_Board,sizeof(ISAPNP_sysdev_System_Board),true)) - LOG_MSG("ISAPNP register failed\n"); - - /* Motherboard PNP resources and general */ - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_General_ISAPNP,sizeof(ISAPNP_sysdev_General_ISAPNP),true)) - LOG_MSG("ISAPNP register failed\n"); - - /* ISA bus, meaning, a computer with ISA slots. - * The purpose of this device is to convince Windows 95 to automatically install it's - * "ISA Plug and Play bus" so that PnP devices are recognized automatically */ - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_ISA_BUS,sizeof(ISAPNP_sysdev_ISA_BUS),true)) - LOG_MSG("ISAPNP register failed\n"); - - if (pcibus_enable) { - /* PCI bus, meaning, a computer with PCI slots. - * The purpose of this device is to tell Windows 95 that a PCI bus is present. Without - * this entry, PCI devices will not be recognized until you manually install the PCI driver. */ - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_PCI_BUS,sizeof(ISAPNP_sysdev_PCI_BUS),true)) - LOG_MSG("ISAPNP register failed\n"); - } - - /* APM BIOS device. To help Windows 95 see our APM BIOS. */ - if (APMBIOS && APMBIOS_pnp) { - LOG_MSG("Registering APM BIOS as ISA Plug & Play BIOS device node"); - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_APM_BIOS,sizeof(ISAPNP_sysdev_APM_BIOS),true)) - LOG_MSG("ISAPNP register failed\n"); - } - -#if (C_FPU) - /* Numeric Coprocessor */ - if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_Numeric_Coprocessor,sizeof(ISAPNP_sysdev_Numeric_Coprocessor),true)) - LOG_MSG("ISAPNP register failed\n"); -#endif - - /* RAM resources. we have to construct it */ - /* NTS: We don't do this here, but I have an old Toshiba laptop who's PnP BIOS uses - * this device ID to report both RAM and ROM regions. */ - { - Bitu max = MEM_TotalPages() * 4096; - const unsigned char h1[9] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0xC,0x0,0x1), /* PNP0C01 System device, motherboard resources */ - ISAPNP_TYPE(0x05,0x00,0x00), /* type: Memory, RAM, general */ - 0x0001 | 0x0002) - }; - - i = 0; - memcpy(tmp+i,h1,9); i += 9; /* can't disable, can't configure */ - /*----------allocated--------*/ - tmp[i+0] = 0x80 | 6; /* 32-bit memory range */ - tmp[i+1] = 9; /* length=9 */ - tmp[i+2] = 0; - tmp[i+3] = 0x01; /* writeable, no cache, 8-bit, not shadowable, not ROM */ - host_writed(tmp+i+4,0x00000); /* base */ - host_writed(tmp+i+8,max > 0xA0000 ? 0xA0000 : 0x00000); /* length */ - i += 9+3; - - if (max > 0x100000) { - tmp[i+0] = 0x80 | 6; /* 32-bit memory range */ - tmp[i+1] = 9; /* length=9 */ - tmp[i+2] = 0; - tmp[i+3] = 0x01; - host_writed(tmp+i+4,0x100000); /* base */ - host_writed(tmp+i+8,max-0x100000); /* length */ - i += 9+3; - } - - tmp[i+0] = 0x79; /* END TAG */ - tmp[i+1] = 0x00; - i += 2; - /*-------------possible-----------*/ - tmp[i+0] = 0x79; /* END TAG */ - tmp[i+1] = 0x00; - i += 2; - /*-------------compatible---------*/ - tmp[i+0] = 0x79; /* END TAG */ - tmp[i+1] = 0x00; - i += 2; - - if (!ISAPNP_RegisterSysDev(tmp,i)) - LOG_MSG("ISAPNP register failed\n"); - } - - /* register parallel ports */ - for (Bitu portn=0;portn < 3;portn++) { - Bitu port = mem_readw(BIOS_ADDRESS_LPT1+(portn*2)); - if (port != 0) { - const unsigned char h1[9] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0x4,0x0,0x0), /* PNP0400 Standard LPT printer port */ - ISAPNP_TYPE(0x07,0x01,0x00), /* type: General parallel port */ - 0x0001 | 0x0002) - }; - - i = 0; - memcpy(tmp+i,h1,9); i += 9; /* can't disable, can't configure */ - /*----------allocated--------*/ - tmp[i+0] = (8 << 3) | 7; /* IO resource */ - tmp[i+1] = 0x01; /* 16-bit decode */ - host_writew(tmp+i+2,port); /* min */ - host_writew(tmp+i+4,port); /* max */ - tmp[i+6] = 0x10; /* align */ - tmp[i+7] = 0x03; /* length */ - i += 7+1; - - /* TODO: If/when LPT emulation handles the IRQ, add IRQ resource here */ - - tmp[i+0] = 0x79; /* END TAG */ - tmp[i+1] = 0x00; - i += 2; - /*-------------possible-----------*/ - tmp[i+0] = 0x79; /* END TAG */ - tmp[i+1] = 0x00; - i += 2; - /*-------------compatible---------*/ - tmp[i+0] = 0x79; /* END TAG */ - tmp[i+1] = 0x00; - i += 2; - - if (!ISAPNP_RegisterSysDev(tmp,i)) - LOG_MSG("ISAPNP register failed\n"); - } - } - - void BIOS_Post_register_comports_PNP(); - BIOS_Post_register_comports_PNP(); - - void BIOS_Post_register_IDE(); - BIOS_Post_register_IDE(); - - void BIOS_Post_register_FDC(); - BIOS_Post_register_FDC(); - } - - if (IS_PC98_ARCH) { - /* initialize IRQ0 timer to default tick interval. - * PC-98 does not pre-initialize timer 0 of the PIT to 0xFFFF the way IBM PC/XT/AT do */ - PC98_Interval_Timer_Continue(); - PIC_SetIRQMask(0,true); /* PC-98 keeps the timer off unless INT 1Ch is called to set a timer interval */ - } - - if (!IS_PC98_ARCH) { - Section_prop * section=static_cast(control->GetSection("speaker")); - bool bit0en = section->Get_bool("pcspeaker clock gate enable at startup"); - - if (bit0en) { - uint8_t x = IO_Read(0x61); - IO_Write(0x61,(x & (~3u)) | 1u); /* set bits[1:0] = 01 (clock gate enable but output gate disable) */ - LOG_MSG("xxxx"); - } - } - - if (ACPI_enabled) { - if (acpi_iocallout == IO_Callout_t_none) - acpi_iocallout = IO_AllocateCallout(IO_TYPE_MB); - if (acpi_iocallout == IO_Callout_t_none) - E_Exit("Failed to get ACPI IO callout handle"); - - { - IO_CalloutObject *obj = IO_GetCallout(acpi_iocallout); - if (obj == NULL) E_Exit("Failed to get ACPI IO callout"); - obj->Install(ACPI_IO_BASE,IOMASK_Combine(IOMASK_FULL,IOMASK_Range(0x20)),acpi_cb_port_r,acpi_cb_port_w); - IO_PutCallout(obj); - } - - BuildACPITable(); - } - - CPU_STI(); - - return CBRET_NONE; - } - CALLBACK_HandlerObject cb_bios_scan_video_bios; - static Bitu cb_bios_scan_video_bios__func(void) { - unsigned long size; - - /* NTS: As far as I can tell, video is integrated into the PC-98 BIOS and there is no separate BIOS */ - if (IS_PC98_ARCH) return CBRET_NONE; - - if (cpu.pmode) E_Exit("BIOS error: VIDEO BIOS SCAN function called while in protected/vm86 mode"); - - if (!bios_has_exec_vga_bios) { - bios_has_exec_vga_bios = true; - if (IS_EGAVGA_ARCH) { - /* make sure VGA BIOS is there at 0xC000:0x0000 */ - if (AdapterROM_Read(0xC0000,&size)) { - LOG(LOG_MISC,LOG_DEBUG)("BIOS VIDEO ROM SCAN found VGA BIOS (size=%lu)",size); - adapter_scan_start = 0xC0000 + size; - - // step back into the callback instruction that triggered this call - reg_eip -= 4; - - // FAR CALL into the VGA BIOS - CPU_CALL(false,0xC000,0x0003,reg_eip); - return CBRET_NONE; - } - else { - LOG(LOG_MISC,LOG_WARN)("BIOS VIDEO ROM SCAN did not find VGA BIOS"); - } - } - else { - // CGA, MDA, Tandy, PCjr. No video BIOS to scan for - } - } - - return CBRET_NONE; - } - CALLBACK_HandlerObject cb_bios_adapter_rom_scan; - static Bitu cb_bios_adapter_rom_scan__func(void) { - unsigned long size; - uint32_t c1; - - /* FIXME: I have no documentation on how PC-98 scans for adapter ROM or even if it supports it */ - if (IS_PC98_ARCH) return CBRET_NONE; - - if (cpu.pmode) E_Exit("BIOS error: ADAPTER ROM function called while in protected/vm86 mode"); - - while (adapter_scan_start < 0xF0000) { - if (AdapterROM_Read(adapter_scan_start,&size)) { - uint16_t segm = (uint16_t)(adapter_scan_start >> 4); - - LOG(LOG_MISC,LOG_DEBUG)("BIOS ADAPTER ROM scan found ROM at 0x%lx (size=%lu)",(unsigned long)adapter_scan_start,size); - - c1 = mem_readd(adapter_scan_start+3); - adapter_scan_start += size; - if (c1 != 0UL) { - LOG(LOG_MISC,LOG_DEBUG)("Running ADAPTER ROM entry point"); - - // step back into the callback instruction that triggered this call - reg_eip -= 4; - - // FAR CALL into the VGA BIOS - CPU_CALL(false,segm,0x0003,reg_eip); - return CBRET_NONE; - } - else { - LOG(LOG_MISC,LOG_DEBUG)("FIXME: ADAPTER ROM entry point does not exist"); - } - } - else { - if (IS_EGAVGA_ARCH) // supposedly newer systems only scan on 2KB boundaries by standard? right? - adapter_scan_start = (adapter_scan_start | 2047UL) + 1UL; - else // while older PC/XT systems scanned on 512-byte boundaries? right? - adapter_scan_start = (adapter_scan_start | 511UL) + 1UL; - } - } - - LOG(LOG_MISC,LOG_DEBUG)("BIOS ADAPTER ROM scan complete"); - return CBRET_NONE; - } - CALLBACK_HandlerObject cb_bios_startup_screen; - static Bitu cb_bios_startup_screen__func(void) { - const Section_prop* section = static_cast(control->GetSection("dosbox")); - const char *logo_text = section->Get_string("logo text"); - const char *logo = section->Get_string("logo"); - bool fastbioslogo=section->Get_bool("fastbioslogo")||control->opt_fastbioslogo||control->opt_fastlaunch; - if (fastbioslogo && machine != MCH_PC98) { -#if defined(USE_TTF) - if (TTF_using()) { - uint32_t lasttick=GetTicks(); - while ((GetTicks()-lasttick)<500) { - reg_eax = 0x0100; - CALLBACK_RunRealInt(0x16); - } - reg_eax = 3; - CALLBACK_RunRealInt(0x10); - } -#endif - if (control->opt_fastlaunch) return CBRET_NONE; - } - extern const char* RunningProgram; - extern void GFX_SetTitle(int32_t cycles, int frameskip, Bits timing, bool paused); - RunningProgram = "DOSBOX-X"; - GFX_SetTitle(-1,-1,-1,false); - const char *msg = "DOSBox-X (C) 2011-" COPYRIGHT_END_YEAR " The DOSBox-X Team\nDOSBox-X project maintainer: joncampbell123\nDOSBox-X project homepage: https://dosbox-x.com\nDOSBox-X user guide: https://dosbox-x.com/wiki\n\n"; - bool textsplash = section->Get_bool("disable graphical splash"); -#if defined(USE_TTF) - if (TTF_using()) { - textsplash = true; - if (ttf.cols != 80 || ttf.lins != 25) { - oldcols = ttf.cols; - oldlins = ttf.lins; - } else - oldcols = oldlins = 0; - } -#endif - - textsplash = true; - - char logostr[8][34]; - strcpy(logostr[0], "+---------------------+"); - strcpy(logostr[1], "| Welcome To |"); - strcpy(logostr[2], "| |"); - strcpy(logostr[3], "| D O S B o x - X ! |"); - strcpy(logostr[4], "| Bizhawk Edition |"); - sprintf(logostr[5],"| %d-bit %s |", - OS_BIT_INT, SDL_STRING); - sprintf(logostr[6], "| Version %10s |", VERSION); - strcpy(logostr[7], "+---------------------+"); -startfunction: - int logo_x,logo_y,x=2,y=2; - - logo_y = 2; - if (machine == MCH_HERC || machine == MCH_MDA) - logo_x = 80 - 2 - (224/9); - else - logo_x = 80 - 2 - (224/8); - - if (cpu.pmode) E_Exit("BIOS error: STARTUP function called while in protected/vm86 mode"); - - if (IS_VGA_ARCH) { - reg_eax = 18; // 640x480 16-color - CALLBACK_RunRealInt(0x10); - } - else if (machine == MCH_PC98) { - // clear the graphics layer - for (unsigned int i=0;i < (80*400);i++) { - mem_writeb(0xA8000+i,0); // B - mem_writeb(0xB0000+i,0); // G - mem_writeb(0xB8000+i,0); // R - mem_writeb(0xE0000+i,0); // E - } - - reg_eax = 0x0C00; // enable text layer (PC-98) - CALLBACK_RunRealInt(0x18); - - reg_eax = 0x1100; // show cursor (PC-98) - CALLBACK_RunRealInt(0x18); - - reg_eax = 0x1300; // set cursor pos (PC-98) - reg_edx = 0x0000; // byte position - CALLBACK_RunRealInt(0x18); - - bios_pc98_posx = x; - } - else { - reg_eax = 3; // 80x25 text - CALLBACK_RunRealInt(0x10); - } - -#if defined(USE_TTF) - if (TTF_using() && (ttf.cols != 80 || ttf.lins != 25)) ttf_setlines(80, 25); -#endif - - if (machine != MCH_PC98) { - reg_eax = 0x0200; // set cursor pos - reg_ebx = 0; // page zero - reg_dh = y; // row 4 - reg_dl = x; // column 20 - CALLBACK_RunRealInt(0x10); - } - - BIOS_Int10RightJustifiedPrint(x,y,msg); - -#if defined(C_LIBPNG) - { - png_bytep rows[1]; - unsigned char *row = NULL;/*png_width*/ - png_structp png_context = NULL; - png_infop png_info = NULL; - png_infop png_end = NULL; - png_uint_32 png_width = 0,png_height = 0; - int png_bit_depth = 0,png_color_type = 0,png_interlace = 0,png_filter = 0,png_compression = 0; - png_color *palette = NULL; - int palette_count = 0; - std::string user_filename; - unsigned int rowheight = 8; - const char *filename = NULL; - const unsigned char *inpng = NULL; - size_t inpng_size = 0; - FILE *png_fp = NULL; - - /* If the user wants a custom logo, just put it in the same directory as the .conf file and have at it. - * Requirements: The PNG must be 1/2/4/8bpp with a color palette, not grayscale, not truecolor, and - * no alpha channel data at all. No interlacing. Must be 224x224 or smaller, and should fit the size - * indicated in the filename. There are multiple versions, one for each vertical resolution of common - * CGA/EGA/VGA/etc. modes: 480-line, 400-line, 350-line, and 200-line. All images other than the 480-line - * one have a non-square pixel aspect ratio. Please take that into consideration. */ - if (IS_VGA_ARCH) { - if (logo) user_filename = std::string(logo) + "224x224.png"; - filename = "dosbox224x224.png"; - inpng_size = dosbox224x224_png_len; - inpng = dosbox224x224_png; - rowheight = 16; - } - else if (IS_PC98_ARCH || machine == MCH_MCGA) { - if (logo) user_filename = std::string(logo) + "224x186.png"; - filename = "dosbox224x186.png"; - inpng_size = dosbox224x186_png_len; - inpng = dosbox224x186_png; - rowheight = 16; - } - else if (IS_EGA_ARCH) { - if (ega200) { - if (logo) user_filename = std::string(logo) + "224x93.png"; - filename = "dosbox224x93.png"; - inpng_size = dosbox224x93_png_len; - inpng = dosbox224x93_png; - } - else { - if (logo) user_filename = std::string(logo) + "224x163.png"; - filename = "dosbox224x163.png"; - inpng_size = dosbox224x163_png_len; - inpng = dosbox224x163_png; - rowheight = 14; - } - } - else if (machine == MCH_HERC || machine == MCH_MDA) { - if (logo) user_filename = std::string(logo) + "224x163.png"; - filename = "dosbox224x163.png"; - inpng_size = dosbox224x163_png_len; - inpng = dosbox224x163_png; - rowheight = 14; - } - else { - if (logo) user_filename = std::string(logo) + "224x93.png"; - filename = "dosbox224x93.png"; - inpng_size = dosbox224x93_png_len; - inpng = dosbox224x93_png; - } - - if (png_fp == NULL && !user_filename.empty()) - png_fp = fopen(user_filename.c_str(),"rb"); - if (png_fp == NULL && filename != NULL) - png_fp = fopen(filename,"rb"); - - if (png_fp || inpng) { - png_context = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL/*err*/,NULL/*err fn*/,NULL/*warn fn*/); - if (png_context) { - png_info = png_create_info_struct(png_context); - if (png_info) { - png_set_user_limits(png_context,320,320); - } - } - } - - if (png_context && png_info) { - if (png_fp) { - LOG(LOG_MISC,LOG_DEBUG)("Using external file logo %s",filename); - png_init_io(png_context,png_fp); - } - else if (inpng) { - LOG(LOG_MISC,LOG_DEBUG)("Using built-in logo"); - BIOSLOGO_PNG_PTR = inpng; - BIOSLOGO_PNG_FENCE = inpng + inpng_size; - png_set_read_fn(png_context,NULL,BIOSLOGO_PNG_READ); - } - else { - abort(); /* should not be here */ - } - - png_read_info(png_context,png_info); - png_get_IHDR(png_context,png_info,&png_width,&png_height,&png_bit_depth,&png_color_type,&png_interlace,&png_compression,&png_filter); - - LOG(LOG_MISC,LOG_DEBUG)("BIOS png image: w=%u h=%u bitdepth=%u ct=%u il=%u compr=%u filt=%u", - png_width,png_height,png_bit_depth,png_color_type,png_interlace,png_compression,png_filter); - - if (png_width != 0 && png_height != 0 && png_bit_depth != 0 && png_bit_depth <= 8 && - (png_color_type&(PNG_COLOR_MASK_PALETTE|PNG_COLOR_MASK_COLOR)) == (PNG_COLOR_MASK_PALETTE|PNG_COLOR_MASK_COLOR)/*palatted color only*/ && - png_interlace == 0/*do not support interlacing*/) { - LOG(LOG_MISC,LOG_DEBUG)("PNG accepted"); - /* please convert everything to 8bpp for us */ - png_set_strip_16(png_context); - png_set_packing(png_context); - png_get_PLTE(png_context,png_info,&palette,&palette_count); - - row = new unsigned char[png_width + 32]; - rows[0] = row; - - if (palette != 0 && palette_count > 0 && palette_count <= 256 && row != NULL) { - textsplash = false; - if (machine == MCH_HERC || machine == MCH_MDA) - VGA_InitBiosLogo(png_width,png_height,logo_x*9,logo_y*rowheight); - else - VGA_InitBiosLogo(png_width,png_height,logo_x*8,logo_y*rowheight); - - { - unsigned char tmp[256*3]; - for (unsigned int x=0;x < (unsigned int)palette_count;x++) { - tmp[(x*3)+0] = palette[x].red; - tmp[(x*3)+1] = palette[x].green; - tmp[(x*3)+2] = palette[x].blue; - } - VGA_WriteBiosLogoPalette(0,palette_count,tmp); - } - - for (unsigned int y=0;y < png_height;y++) { - png_read_rows(png_context,rows,NULL,1); - VGA_WriteBiosLogoBMP(y,row,png_width); - } - VGA_ShowBIOSLogo(); - } - - delete[] row; - } - } - - if (png_context) png_destroy_read_struct(&png_context,&png_info,&png_end); - if (png_fp) fclose(png_fp); - } -#endif - - if (machine == MCH_PC98 && textsplash) { - unsigned int bo, lastline = 7; - for (unsigned int i=0; i<=lastline; i++) { - for (unsigned int j=0; j= ((uint64_t)128 << (uint64_t)20)) - sprintf(tmp,"%uMB memory installed\r\n",(unsigned int)(sz >> (uint64_t)20)); - else - sprintf(tmp,"%uKB memory installed\r\n",(unsigned int)(sz >> (uint64_t)10)); - - BIOS_Int10RightJustifiedPrint(x,y,tmp); - } - - const char *card = "Unknown Graphics Adapter"; - - switch (machine) { - case MCH_CGA: - card = "IBM Color Graphics Adapter"; - break; - case MCH_MCGA: - card = "IBM Multi Color Graphics Adapter"; - break; - case MCH_MDA: - card = "IBM Monochrome Display Adapter"; - break; - case MCH_HERC: - switch (hercCard) { - case HERC_GraphicsCardPlus: - card = "Hercules+ Graphics Adapter"; - break; - case HERC_InColor: - card = "Hercules InColor Graphics Adapter"; - break; - default: - card = "Hercules Graphics Adapter"; - break; - } - break; - case MCH_EGA: - card = "IBM Enhanced Graphics Adapter"; - break; - case MCH_PCJR: - card = "PCjr Graphics Adapter"; - break; - case MCH_TANDY: - card = "Tandy Graphics Adapter"; - break; - case MCH_VGA: - switch (svgaCard) { - case SVGA_TsengET4K: - card = "Tseng ET4000 SVGA"; - break; - case SVGA_TsengET3K: - card = "Tseng ET3000 SVGA"; - break; - case SVGA_ParadisePVGA1A: - card = "Paradise SVGA"; - break; - case SVGA_S3Trio: - card = "S3 Trio SVGA"; - switch (s3Card) { - case S3_86C928: card = "S3 86C928"; break; - case S3_Vision864: card = "S3 Vision864 SVGA"; break; - case S3_Vision868: card = "S3 Vision868 SVGA"; break; - case S3_Vision964: card = "S3 Vision964 SVGA"; break; - case S3_Vision968: card = "S3 Vision968 SVGA"; break; - case S3_Trio32: card = "S3 Trio32 SVGA"; break; - case S3_Trio64: card = "S3 Trio64 SVGA"; break; - case S3_Trio64V: card = "S3 Trio64V+ SVGA"; break; - case S3_ViRGE: card = "S3 ViRGE SVGA"; break; - case S3_ViRGEVX: card = "S3 ViRGE VX SVGA"; break; - case S3_Generic: card = "S3"; break; - } - break; - case SVGA_ATI: - card = "ATI SVGA"; - switch (atiCard) { - case ATI_EGAVGAWonder: card = "ATI EGA/VGA Wonder"; break; - case ATI_VGAWonder: card = "ATI VGA Wonder"; break; - case ATI_VGAWonderPlus: card = "ATI VGA Wonder+"; break; - case ATI_VGAWonderXL: card = "ATI VGA WonderXL"; break; - case ATI_VGAWonderXL24: card = "ATI VGA WonderXL24"; break; - case ATI_Mach8: card = "ATI Mach8"; break; - case ATI_Mach32: card = "ATI Mach32"; break; - case ATI_Mach64: card = "ATI Mach64"; break; - } - break; - default: - card = "Standard VGA"; - break; - } - - break; - case MCH_PC98: - card = "PC98 graphics"; - break; - case MCH_AMSTRAD: - card = "Amstrad graphics"; - break; - default: - abort(); // should not happen - } - - { - char tmp[512]; - sprintf(tmp,"Video card is %s\n",card); - BIOS_Int10RightJustifiedPrint(x,y,tmp); - } - - { - char tmp[512]; - const char *cpuType = "?"; - - switch (CPU_ArchitectureType) { - case CPU_ARCHTYPE_8086: - cpuType = "8086"; - break; - case CPU_ARCHTYPE_80186: - cpuType = "80186"; - break; - case CPU_ARCHTYPE_286: - cpuType = "286"; - break; - case CPU_ARCHTYPE_386: - cpuType = "386"; - break; - case CPU_ARCHTYPE_486OLD: - cpuType = "486 (older generation)"; - break; - case CPU_ARCHTYPE_486NEW: - cpuType = "486 (later generation)"; - break; - case CPU_ARCHTYPE_PENTIUM: - cpuType = "Pentium"; - break; - case CPU_ARCHTYPE_PMMXSLOW: - cpuType = "Pentium MMX"; - break; - case CPU_ARCHTYPE_PPROSLOW: - cpuType = "Pentium Pro"; - break; - case CPU_ARCHTYPE_PENTIUMII: - cpuType = "Pentium II"; - break; - case CPU_ARCHTYPE_PENTIUMIII: - cpuType = "Pentium III"; - break; - case CPU_ARCHTYPE_MIXED: - cpuType = "Auto (mixed)"; - break; - case CPU_ARCHTYPE_EXPERIMENTAL: - cpuType = "Experimental"; - break; - } - - sprintf(tmp,"%s CPU present",cpuType); - BIOS_Int10RightJustifiedPrint(x,y,tmp); - if (enable_fpu) BIOS_Int10RightJustifiedPrint(x,y," with FPU"); - BIOS_Int10RightJustifiedPrint(x,y,"\n"); - } - - if (APMBIOS) { - BIOS_Int10RightJustifiedPrint(x,y,"Advanced Power Management interface active\n"); - } - - if (ISAPNPBIOS) { - BIOS_Int10RightJustifiedPrint(x,y,"ISA Plug & Play BIOS active\n"); - } - - if (*logo_text) { - const size_t max_w = 76; - const char *s = logo_text; - const int saved_y = y; - size_t max_h; - char tmp[81]; - int x,y; - - x = 0; /* use it here as index to tmp[] */ - if (IS_VGA_ARCH) /* VGA 640x480 has 30 lines (480/16) not 25 */ - max_h = 30; - else - max_h = 25; - y = max_h - 3; - - y--; - BIOS_Int10RightJustifiedPrint(x+2,y,"\n"); /* sync cursor */ - - while (*s) { - bool newline = false; - - assert((size_t)x < max_w); - if (isalpha(*s) || isdigit(*s)) { - size_t wi = 1;/*we already know s[0] fits the criteria*/ - while (s[wi] != 0 && (isalpha(s[wi]) || isdigit(s[wi]))) wi++; - - if (wi >= 24) { /* don't let overlong words crowd out the text */ - if (((size_t)x+wi) > max_w) - wi = max_w - (size_t)x; - } - - if (((size_t)x+wi) < max_w) { - memcpy(tmp+x,s,wi); - x += wi; - s += wi; - } - else { - newline = true; - } - } - else if (*s == ' ') { - if ((size_t)x < max_w) tmp[x++] = *s++; - - if ((size_t)x == max_w) { - while (*s == ' ') s++; - newline = true; - } - } - else if (*s == '\\') { - s++; - if (*s == 'n') { - newline = true; /* \n */ - s++; - } - else { - s++; - } - } - else { - tmp[x++] = *s++; - } - - assert((size_t)x <= max_w); - if ((size_t)x >= max_w || newline) { - tmp[x] = 0; - BIOS_Int10RightJustifiedPrint(x+2,y,tmp); - x = 0; - BIOS_Int10RightJustifiedPrint(x+2,y,"\n"); /* next line, which increments y */ - if ((size_t)y >= max_h) break; - } - } - - if (x != 0 && (size_t)y < max_h) { - tmp[x] = 0; - BIOS_Int10RightJustifiedPrint(x+2,y,tmp); - x = 0; - BIOS_Int10RightJustifiedPrint(x+2,y,"\n"); /* next line, which increments y */ - } - - y = saved_y - 1; - BIOS_Int10RightJustifiedPrint(x+2,y,"\n"); /* sync cursor */ - } - -#if !defined(C_EMSCRIPTEN) - BIOS_Int10RightJustifiedPrint(x,y,"\nHit SPACEBAR to pause at this screen\n", false, true); - BIOS_Int10RightJustifiedPrint(x,y,"\nPress DEL to enter BIOS setup screen\n", false, true); - y--; /* next message should overprint */ - if (machine != MCH_PC98) { - reg_eax = 0x0200; // set cursor pos - reg_ebx = 0; // page zero - reg_dh = y; // row 4 - reg_dl = x; // column 20 - CALLBACK_RunRealInt(0x10); - } - else { - reg_eax = 0x1300u; // set cursor pos (PC-98) - reg_edx = (((unsigned int)y * 80u) + (unsigned int)x) * 2u; // byte position - CALLBACK_RunRealInt(0x18); - } -#endif - - // TODO: Then at this screen, we can print messages demonstrating the detection of - // IDE devices, floppy, ISA PnP initialization, anything of importance. - // I also envision adding the ability to hit DEL or F2 at this point to enter - // a "BIOS setup" screen where all DOSBox-X configuration options can be - // modified, with the same look and feel of an old BIOS. - -#if C_EMSCRIPTEN - uint32_t lasttick=GetTicks(); - while ((GetTicks()-lasttick)<1000) { - void CALLBACK_Idle(void); - CALLBACK_Idle(); - emscripten_sleep(100); - } -#else - if (!fastbioslogo&&!bootguest&&!bootfast&&(bootvm||!use_quick_reboot)) { - bool wait_for_user = false, bios_setup = false; - int pos=1; - uint32_t lasttick=GetTicks(); - while ((GetTicks()-lasttick)<1000) { - if (machine == MCH_PC98) { - reg_eax = 0x0100; // sense key - CALLBACK_RunRealInt(0x18); - SETFLAGBIT(ZF,reg_bh == 0); - } - else { - reg_eax = 0x0100; - CALLBACK_RunRealInt(0x16); - } - - if (!GETFLAG(ZF)) { - if (machine == MCH_PC98) { - reg_eax = 0x0000; // read key - CALLBACK_RunRealInt(0x18); - } - else { - reg_eax = 0x0000; - CALLBACK_RunRealInt(0x16); - } - - if (reg_al == 32) { // user hit space - BIOS_Int10RightJustifiedPrint(x,y,"Hit ENTER or ESC to continue \n", false, true); // overprint - BIOS_Int10RightJustifiedPrint(x,y,"\nPress DEL to enter BIOS setup screen\n", false, true); - wait_for_user = true; - break; - } - - if ((machine != MCH_PC98 && reg_ax == 0x5300) || (machine == MCH_PC98 && reg_ax == 0x3900)) { // user hit Del - bios_setup = true; - showBIOSSetup(card, x, y); - break; - } - } - } - - while (wait_for_user) { - if (machine == MCH_PC98) { - reg_eax = 0x0000; // read key - CALLBACK_RunRealInt(0x18); - } - else { - reg_eax = 0x0000; - CALLBACK_RunRealInt(0x16); - } - - if ((machine != MCH_PC98 && reg_ax == 0x5300/*DEL*/) || (machine == MCH_PC98 && reg_ax == 0x3900)) { - bios_setup = true; - VGA_FreeBiosLogo(); - showBIOSSetup(card, x, y); - break; - } - - if (reg_al == 27/*ESC*/ || reg_al == 13/*ENTER*/) - break; - } - - lasttick=GetTicks(); - bool askexit = false, mod = false; - while (bios_setup) { - if (GetTicks()-lasttick>=500 && !askexit) { - lasttick=GetTicks(); - updateDateTime(x,y,pos); - } - if (machine == MCH_PC98) { - reg_eax = 0x0100; // sense key - CALLBACK_RunRealInt(0x18); - SETFLAGBIT(ZF,reg_bh == 0); - } - else { - reg_eax = 0x0100; - CALLBACK_RunRealInt(0x16); - } - - if (!GETFLAG(ZF)) { - if (machine == MCH_PC98) { - reg_eax = 0x0000; // read key - CALLBACK_RunRealInt(0x18); - } - else { - reg_eax = 0x0000; - CALLBACK_RunRealInt(0x16); - } - if (askexit) { - if (reg_al == 'Y' || reg_al == 'y') { - if (machine == MCH_PC98) { - reg_eax = 0x1600; - reg_edx = 0xE100; - CALLBACK_RunRealInt(0x18); - } - goto startfunction; - } else if (machine == MCH_PC98) { - const char *exitstr = "ESC = Exit"; - unsigned int bo; - for (unsigned int i=0; i1?pos-1:6; - lasttick-=500; - } else if ((machine != MCH_PC98 && reg_ax == 0x4D00) || (machine == MCH_PC98 && reg_ax == 0x3C00)) { // Right key - pos=pos<6?pos+1:1; - lasttick-=500; - } else if (((machine != MCH_PC98 && reg_ax == 0x4800) || (machine == MCH_PC98 && reg_ax == 0x3A00)) && pos>3) { // Up key - if (pos==4||pos==5) pos=1; - else if (pos==6) pos=2; - lasttick-=500; - } else if (((machine != MCH_PC98 && reg_ax == 0x5000) || (machine == MCH_PC98 && reg_ax == 0x3D00)) && pos<4) { // Down key - if (pos==1) pos=4; - else if (pos==2||pos==3) pos=6; - lasttick-=500; - } else if (machine != MCH_PC98 && reg_al == 43) { // '+' key - if (pos==1&&dos.date.year<2100) dos.date.year++; - else if (pos==2) dos.date.month=dos.date.month<12?dos.date.month+1:1; - else if (pos==3) dos.date.day=dos.date.day<(dos.date.month==1||dos.date.month==3||dos.date.month==5||dos.date.month==7||dos.date.month==8||dos.date.month==10||dos.date.month==12?31:(dos.date.month==2?29:30))?dos.date.day+1:1; - else if (pos==4||pos==5||pos==6) { - Bitu time=(Bitu)((100.0/((double)PIT_TICK_RATE/65536.0)) * mem_readd(BIOS_TIMER))/100; - unsigned int sec=(uint8_t)((Bitu)time % 60); - time/=60; - unsigned int min=(uint8_t)((Bitu)time % 60); - time/=60; - unsigned int hour=(uint8_t)((Bitu)time % 24); - if (pos==4) hour=hour<23?hour+1:0; - else if (pos==5) min=min<59?min+1:0; - else if (pos==6) sec=sec<59?sec+1:0; - mem_writed(BIOS_TIMER,(uint32_t)((double)hour*3600+min*60+sec)*18.206481481); - } - mod = true; - if (sync_time) {manualtime=true;mainMenu.get_item("sync_host_datetime").check(false).refresh_item(mainMenu);} - lasttick-=500; - } else if (machine != MCH_PC98 && reg_al == 45) { // '-' key - if (pos==1&&dos.date.year>1900) dos.date.year--; - else if (pos==2) dos.date.month=dos.date.month>1?dos.date.month-1:12; - else if (pos==3) dos.date.day=dos.date.day>1?dos.date.day-1:(dos.date.month==1||dos.date.month==3||dos.date.month==5||dos.date.month==7||dos.date.month==8||dos.date.month==10||dos.date.month==12?31:(dos.date.month==2?29:30)); - else if (pos==4||pos==5||pos==6) { - Bitu time=(Bitu)((100.0/((double)PIT_TICK_RATE/65536.0)) * mem_readd(BIOS_TIMER))/100; - unsigned int sec=(uint8_t)(time % 60); - time/=60; - unsigned int min=(uint8_t)(time % 60); - time/=60; - unsigned int hour=(uint8_t)(time % 24); - if (pos==4) hour=hour>0?hour-1:23; - else if (pos==5) min=min>0?min-1:59; - else if (pos==6) sec=sec>0?sec-1:59; - mem_writed(BIOS_TIMER,(uint32_t)((double)hour*3600+min*60+sec)*18.206481481); - } - mod = true; - if (sync_time) {manualtime=true;mainMenu.get_item("sync_host_datetime").check(false).refresh_item(mainMenu);} - lasttick-=500; - } else if (reg_al == 27/*ESC*/) { - if (machine == MCH_PC98) { - const char *exitstr = "Exit[Y/N]?"; - unsigned int bo; - for (unsigned int i=0; i0 && oldlins>0) { - ttf_setlines(oldcols, oldlins); - oldcols = oldlins = 0; - } -#endif - - return CBRET_NONE; - } - CALLBACK_HandlerObject cb_bios_boot; - CALLBACK_HandlerObject cb_bios_bootfail; - CALLBACK_HandlerObject cb_pc98_rombasic; /* hardcoded entry point used by various PC-98 games that jump to N88 ROM BASIC */ - CALLBACK_HandlerObject cb_ibm_basic; /* hardcoded entry point used by MS-DOS 1.x BASIC.COM and BASICA.COM to jump to IBM ROM BASIC (F600:4C79) */ - static Bitu cb_pc98_entry__func(void) { - /* the purpose of this function is to say "N88 ROM BASIC NOT FOUND" */ - int x,y; - - x = y = 0; - - /* PC-98 MS-DOS boot sector may RETF back to the BIOS, and this is where execution ends up */ - BIOS_Int10RightJustifiedPrint(x,y,"N88 ROM BASIC NOT IMPLEMENTED"); - - return CBRET_NONE; - } - static Bitu cb_ibm_basic_entry__func(void) { - /* the purpose of this function is to say "IBM ROM BASIC NOT FOUND" */ - int x,y; - - x = y = 0; - - /* PC-98 MS-DOS boot sector may RETF back to the BIOS, and this is where execution ends up */ - BIOS_Int10RightJustifiedPrint(x,y,"IBM ROM BASIC NOT IMPLEMENTED"); - - return CBRET_NONE; - } - static Bitu cb_bios_bootfail__func(void) { - int x,y; - - x = y = 0; - - /* PC-98 MS-DOS boot sector may RETF back to the BIOS, and this is where execution ends up */ - BIOS_Int10RightJustifiedPrint(x,y,"Guest OS failed to boot, returned failure"); - - /* and then after this call, there is a JMP $ to loop endlessly */ - return CBRET_NONE; - } - static Bitu cb_bios_boot__func(void) { - /* Reset/power-on overrides the user's A20 gate preferences. - * It's time to revert back to what the user wants. */ - void A20Gate_TakeUserSetting(Section *sec); - void MEM_A20_Enable(bool enabled); - A20Gate_TakeUserSetting(NULL); - MEM_A20_Enable(false); - - if (cpu.pmode) E_Exit("BIOS error: BOOT function called while in protected/vm86 mode"); - DispatchVMEvent(VM_EVENT_BIOS_BOOT); - - // TODO: If instructed to, follow the INT 19h boot pattern, perhaps follow the BIOS Boot Specification, etc. - - // TODO: If instructed to boot a guest OS... - - /* wipe out the stack so it's not there to interfere with the system, point it at top of memory or top of segment */ - reg_esp = std::min((unsigned int)((MEM_TotalPages() << 12) - 0x600 - 4),0xFFFCu); - reg_eip = 0; - CPU_SetSegGeneral(cs, 0x60); - CPU_SetSegGeneral(ss, 0x60); - - LOG(LOG_MISC,LOG_DEBUG)("BIOS boot SS:SP %04x:%04x",(unsigned int)0x60,(unsigned int)reg_esp); - - for (Bitu i=0;i < 0x400;i++) mem_writeb(0x7C00+i,0); - if ((bootguest||(!bootvm&&use_quick_reboot))&&!bootfast&&bootdrive>=0&&imageDiskList[bootdrive]) { - MOUSE_Startup(NULL); - char drive[] = "-QQ A:"; - drive[4]='A'+bootdrive; - runBoot(drive); - } - if (!bootguest&&!bootvm&&!bootfast&&bootdrive>=0) { - void IDE_CDROM_DetachAll(); - IDE_CDROM_DetachAll(); - } - if ((use_quick_reboot||IS_DOSV)&&!bootvm&&!bootfast&&bootdrive<0&&first_shell != NULL) throw int(6); - - bootvm=false; - bootfast=false; - bootguest=false; - bootdrive=-1; - // Begin booting the DOSBox-X shell. NOTE: VM_Boot_DOSBox_Kernel will change CS:IP instruction pointer! - if (!VM_Boot_DOSBox_Kernel()) E_Exit("BIOS error: BOOT function failed to boot DOSBox-X kernel"); - return CBRET_NONE; - } -public: - void write_FFFF_signature() { - /* write the signature at 0xF000:0xFFF0 */ - - // The farjump at the processor reset entry point (jumps to POST routine) - phys_writeb(0xffff0,0xEA); // FARJMP - phys_writew(0xffff1,RealOff(BIOS_DEFAULT_RESET_LOCATION)); // offset - phys_writew(0xffff3,RealSeg(BIOS_DEFAULT_RESET_LOCATION)); // segment - - // write system BIOS date - for(Bitu i = 0; i < strlen(bios_date_string); i++) phys_writeb(0xffff5+i,(uint8_t)bios_date_string[i]); - - /* model byte */ - if (machine==MCH_TANDY || machine==MCH_AMSTRAD) phys_writeb(0xffffe,0xff); /* Tandy model */ - else if (machine==MCH_PCJR) phys_writeb(0xffffe,0xfd); /* PCJr model */ - else if (machine==MCH_MCGA) phys_writeb(0xffffe,0xfa); /* PC/2 model 30 model */ - else phys_writeb(0xffffe,0xfc); /* PC (FIXME: This is listed as model byte PS/2 model 60) */ - - // signature - if (machine==MCH_TANDY) - phys_writeb(0xfffff,0xff); // Needed for Ninja (1986) - else - phys_writeb(0xfffff,0x55); - } - BIOS(Section* configuration):Module_base(configuration){ - isapnp_biosstruct_base = 0; - - { // TODO: Eventually, move this to BIOS POST or init phase - Section_prop * section=static_cast(control->GetSection("dosbox")); - Section_prop * pc98_section=static_cast(control->GetSection("pc98")); - - pc98_timestamp5c = pc98_section->Get_bool("pc-98 time stamp"); - - enable_pc98_copyright_string = pc98_section->Get_bool("pc-98 BIOS copyright string"); - - // NTS: This setting is also valid in PC-98 mode. According to Undocumented PC-98 by Webtech, - // there's nothing at I/O port E9h. I will move the I/O port in PC-98 mode if there is in - // fact a conflict. --J.C. - bochs_port_e9 = section->Get_bool("bochs debug port e9"); - - // TODO: motherboard init, especially when we get around to full Intel Triton/i440FX chipset emulation - { - std::string s = section->Get_string("isa memory hole at 512kb"); - - if (s == "true" || s == "1") - isa_memory_hole_512kb = true; - else if (s == "false" || s == "0") - isa_memory_hole_512kb = false; - else - isa_memory_hole_512kb = false; - } - - // TODO: motherboard init, especially when we get around to full Intel Triton/i440FX chipset emulation - { - std::string s = section->Get_string("isa memory hole at 15mb"); - - // Do NOT emulate the memory hole if emulating 24 or less address bits! BIOS crashes will result at startup! - // The whole point of the 15MB memory hole is to emulate a hole into hardware as if a 24-bit 386SX. A memalias - // setting of 24 makes it redundant. Furthermore memalias=24 and 15MB memory hole prevents the BIOS from - // mapping correctly and crashes immediately at startup. This is especially necessary for PC-98 mode where - // memalias==24 and memory hole enabled for the PEGC linear framebuffer prevents booting. - - if (MEM_get_address_bits() <= 24) - isa_memory_hole_15mb = false; - else if (s == "true" || s == "1") - isa_memory_hole_15mb = true; - else if (s == "false" || s == "0") - isa_memory_hole_15mb = false; - else if (IS_PC98_ARCH) - isa_memory_hole_15mb = true; // For the sake of some PC-98 DOS games, enable by default - else - isa_memory_hole_15mb = false; - } - - // FIXME: Erm, well this could've been named better. It refers to the amount of conventional memory - // made available to the operating system below 1MB, which is usually DOS. - dos_conventional_limit = (unsigned int)section->Get_int("dos mem limit"); - - // for PC-98: When accessing the floppy through INT 1Bh, when enabled, run through a waiting loop to make sure - // the timer count is not too high on exit (Ys II) - enable_fdc_timer_hack = pc98_section->Get_bool("pc-98 int 1b fdc timer wait"); - - { - std::string s = section->Get_string("unhandled irq handler"); - - if (s == "simple") - unhandled_irq_method = UNHANDLED_IRQ_SIMPLE; - else if (s == "cooperative_2nd") - unhandled_irq_method = UNHANDLED_IRQ_COOPERATIVE_2ND; - // pick default - else if (IS_PC98_ARCH) - unhandled_irq_method = UNHANDLED_IRQ_COOPERATIVE_2ND; - else - unhandled_irq_method = UNHANDLED_IRQ_SIMPLE; - } - } - - if (IS_PC98_ARCH) { - /* Keyboard translation tables, must exist at segment 0xFD80:0x0E00 because PC-98 MS-DOS assumes it (it writes 0x522 itself on boot) */ - /* The table must be placed back far enough so that (0x60 * 10) bytes do not overlap the lookup table at 0xE28 */ - BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION = PhysToReal416(ROMBIOS_GetMemory(0x60 * 10,"Keyboard translation tables",/*align*/1,0xFD800+0xA13)); - if (ROMBIOS_GetMemory(0x2 * 10,"Keyboard translation shift tables",/*align*/1,0xFD800+0xE28) == (~0u)) E_Exit("Failed to allocate shift tables");//reserve it - BIOSKEY_PC98_Write_Tables(); - } - - /* pick locations */ - /* IBM PC mode: See [https://github.com/skiselev/8088_bios/blob/master/bios.asm]. Some values also provided by Allofich. - * PCJr: The BIOS jumps to an address much lower in segment F000, low enough that the second byte of the offset is zero. - * "Pitstop II" uses that as a method to test for PCjr [https://www.vogons.org/viewtopic.php?t=50417] */ - if (machine == MCH_PCJR) - BIOS_DEFAULT_RESET_LOCATION = PhysToReal416(ROMBIOS_GetMemory(3/*JMP NEAR*/,"BIOS default reset location (JMP, PCjr style)",/*align*/1,0xF0043)); - else if (IS_PC98_ARCH) - BIOS_DEFAULT_RESET_LOCATION = PhysToReal416(ROMBIOS_GetMemory(5/*JMP NEAR*/,"BIOS default reset location (JMP, PC-98)",/*align*/1,IS_PC98_ARCH ? 0 : 0xFE05B)); - else - BIOS_DEFAULT_RESET_LOCATION = PhysToReal416(ROMBIOS_GetMemory(3/*JMP NEAR*/,"BIOS default reset location (JMP)",/*align*/1,IS_PC98_ARCH ? 0 : 0xFE05B)); - - BIOS_DEFAULT_RESET_CODE_LOCATION = PhysToReal416(ROMBIOS_GetMemory(64/*several callbacks*/,"BIOS default reset location (CODE)",/*align*/1)); - BIOS_DEFAULT_HANDLER_LOCATION = PhysToReal416(ROMBIOS_GetMemory(1/*IRET*/,"BIOS default handler location",/*align*/1,IS_PC98_ARCH ? 0 : 0xFFF53)); - BIOS_DEFAULT_INT5_LOCATION = PhysToReal416(ROMBIOS_GetMemory(1/*IRET*/, "BIOS default INT5 location",/*align*/1,IS_PC98_ARCH ? 0 : 0xFFF54)); - BIOS_DEFAULT_IRQ0_LOCATION = PhysToReal416(ROMBIOS_GetMemory(0x13/*see callback.cpp for IRQ0*/,"BIOS default IRQ0 location",/*align*/1,IS_PC98_ARCH ? 0 : 0xFFEA5)); - BIOS_DEFAULT_IRQ1_LOCATION = PhysToReal416(ROMBIOS_GetMemory(0x20/*see callback.cpp for IRQ1*/,"BIOS default IRQ1 location",/*align*/1,IS_PC98_ARCH ? 0 : 0xFE987)); - BIOS_DEFAULT_IRQ07_DEF_LOCATION = PhysToReal416(ROMBIOS_GetMemory(7/*see callback.cpp for EOI_PIC1*/,"BIOS default IRQ2-7 location",/*align*/1,IS_PC98_ARCH ? 0 : 0xFFF55)); - BIOS_DEFAULT_IRQ815_DEF_LOCATION = PhysToReal416(ROMBIOS_GetMemory(9/*see callback.cpp for EOI_PIC1*/,"BIOS default IRQ8-15 location",/*align*/1,IS_PC98_ARCH ? 0 : 0xFE880)); - - write_FFFF_signature(); - if (IS_PC98_ARCH) - write_FFFF_PC98_signature(); - - /* Setup all the interrupt handlers the bios controls */ - - /* INT 8 Clock IRQ Handler */ - call_irq0=CALLBACK_Allocate(); - if (IS_PC98_ARCH) - CALLBACK_Setup(call_irq0,INT8_PC98_Handler,CB_IRET,Real2Phys(BIOS_DEFAULT_IRQ0_LOCATION),"IRQ 0 Clock"); - else - CALLBACK_Setup(call_irq0,INT8_Handler,CB_IRQ0,Real2Phys(BIOS_DEFAULT_IRQ0_LOCATION),"IRQ 0 Clock"); - - /* INT 11 Get equipment list */ - callback[1].Install(&INT11_Handler,CB_IRET,"Int 11 Equipment"); - - /* INT 12 Memory Size default at 640 kb */ - callback[2].Install(&INT12_Handler,CB_IRET,"Int 12 Memory"); - - ulimit = 640; - t_conv = MEM_TotalPages() << 2; /* convert 4096/byte pages -> 1024/byte KB units */ - /* NTS: Tandy machines, because top of memory shares video memory, need more than 640KB of memory to present 640KB of memory - * to DOS. In that case, apparently, that gives 640KB to DOS and 128KB to video memory. 640KB of memory in a Tandy system - * means 624KB for DOS and 16KB for Tandy video memory... except that 16-color higher Tandy modes need 32KB of video - * memory, so the top of memory has to be adjusted or handled carefully to avoid corruption of the MCB chain. In the 768KB - * case video memory is high enough not to conflict with DOS conventional memory at all. - * - * Might and Magic III Isles of Terra will crash in Tandy graphics modes unless we emulate the 768KB Tandy case because the - * game doesn't appear to correctly handle the conflict between the DOS MCB chain and video memory (causing an MCB corruption - * error) and it appears to make some effort to allocate memory blocks from top of memory which makes the problem worse. - * - * I am fairly certain that there is nothing on Tandy systems to occupy A0000-AFFFFh. Unless of course you install EGA/VGA - * hardware in such a system. */ - if (allow_more_than_640kb) { - if (machine == MCH_CGA) - ulimit = 736; /* 640KB + 96KB = 0x00000-0xB7FFF */ - else if (machine == MCH_HERC || machine == MCH_MDA) - ulimit = 704; /* 640KB + 64KB = 0x00000-0xAFFFF */ - else if (machine == MCH_TANDY) - ulimit = 768; /* 640KB + 128KB = 0x00000-0xBFFFF */ - - /* NTS: Yes, this means Tandy video memory at B8000 overlaps conventional memory, but the - * top of conventional memory is stolen as video memory anyway. Tandy documentation - * suggests that memory is only installed in multiples of 128KB so there doesn't seem - * to be a way to install only 704KB for example. */ - - if (t_conv > ulimit) t_conv = ulimit; - if (t_conv > 640 && machine != MCH_TANDY) { - /* because the memory emulation has already set things up - * HOWEVER Tandy emulation has already properly mapped A0000-BFFFF so don't mess with it */ - bool MEM_map_RAM_physmem(Bitu start,Bitu end); - MEM_map_RAM_physmem(0xA0000,(t_conv<<10)-1); - memset(GetMemBase()+(640<<10),0,(t_conv-640)<<10); - } - } - else { - if (t_conv > 640) t_conv = 640; - } - - /* allow user to further limit the available memory below 1MB */ - if (dos_conventional_limit != 0 && t_conv > dos_conventional_limit) - t_conv = dos_conventional_limit; - - // TODO: Allow dosbox-x.conf to specify an option to add an EBDA (Extended BIOS Data Area) - // at the top of the DOS conventional limit, which we then reduce further to hold - // it. Most BIOSes past 1992 or so allocate an EBDA. - - /* if requested to emulate an ISA memory hole at 512KB, further limit the memory */ - if (isa_memory_hole_512kb && t_conv > 512) t_conv = 512; - t_conv_real = t_conv; - - if (machine == MCH_TANDY) { - /* Tandy models are said to have started with 256KB. We'll allow down to 64KB */ - if (t_conv < 64) - t_conv = 64; - if (t_conv < 256) - LOG(LOG_MISC,LOG_WARN)("Warning: Tandy with less than 256KB is unusual"); - - /* The shared video/system memory design, and the placement of video RAM at top - * of conventional memory, means that if conventional memory is less than 640KB - * and not a multiple of 32KB, things can break. */ - if ((t_conv % 32) != 0) - LOG(LOG_MISC,LOG_WARN)("Warning: Conventional memory size %uKB in Tandy mode is not a multiple of 32KB, games may not display graphics correctly",(unsigned int)t_conv); - } - else if (machine == MCH_PCJR) { - if (t_conv < 64) - t_conv = 64; - - /* PCjr also shares video/system memory, but the video memory can only exist - * below 128KB because IBM intended it to only carry 64KB or 128KB on the - * motherboard. Any memory past 128KB is likely provided by addons (sidecars) */ - if (t_conv < 128 && (t_conv % 32) != 0) - LOG(LOG_MISC,LOG_WARN)("Warning: Conventional memory size %uKB in PCjr mode is not a multiple of 32KB, games may not display graphics correctly",(unsigned int)t_conv); - } - - /* and then unmap RAM between t_conv and ulimit */ - if (t_conv < ulimit) { - Bitu start = (t_conv+3)/4; /* start = 1KB to page round up */ - Bitu end = ulimit/4; /* end = 1KB to page round down */ - if (start < end) MEM_ResetPageHandler_Unmapped(start,end-start); - } - - if (isa_memory_hole_15mb) MEM_ResetPageHandler_Unmapped(0xf00,0x100); /* 0xF00000-0xFFFFFF */ - - if (machine == MCH_TANDY) { - /* Take 16KB off the top for video RAM. - * This value never changes after boot, even if you then use the 16-color modes which then moves - * the video RAM region down 16KB to make a 32KB region. Neither MS-DOS nor INT 10h change this - * top of memory value. I hope your DOS game doesn't put any important structures or MCBs above - * the 32KB below top of memory, because it WILL get overwritten with graphics! - * - * This is apparently correct behavior, and DOSBox SVN and other forks follow it too. - * - * See also: [https://www.vogons.org/viewtopic.php?p=948879#p948879] - * Issue: [https://github.com/joncampbell123/dosbox-x/issues/2380] - * - * Mickeys Space Adventure assumes it can find video RAM by calling INT 12h, subtracting 16KB, and - * converting KB to paragraphs. Note that it calls INT 12h while in CGA mode, and subtracts 16KB - * knowing video memory will extend downward 16KB into a 32KB region when it switches into the - * Tandy/PCjr 16-color mode. */ - /* Tandy systems can present full 640KB of conventional memory with 128KB for video memory if 768KB - * is installed! */ - if (t_conv > (640+32)) { - if (t_conv > 640) t_conv = 640; - if (ulimit > 640) ulimit = 640; - - /* Video memory takes the rest */ - tandy_128kbase = 0xA0000; - } - else { - if (t_conv > 640) t_conv = 640; - if (ulimit > 640) ulimit = 640; - t_conv -= 16; - ulimit -= 16; - - /* if 32KB would cross a 128KB boundary, then adjust again or else - * things will horribly break between text and graphics modes */ - if ((t_conv % 128) < 16) - t_conv -= 16; - - /* Our choice also affects which 128KB bank within which the 16KB banks - * select what system memory becomes video memory. - * - * FIXME: Is this controlled by the "extended ram page register?" How? */ - tandy_128kbase = ((t_conv - 16u) << 10u) & 0xE0000; /* byte offset = (KB - 16) * 64, round down to multiple of 128KB */ - } - LOG(LOG_MISC,LOG_DEBUG)("BIOS: setting tandy 128KB base region to %lxh",(unsigned long)tandy_128kbase); - } - else if (machine == MCH_PCJR) { - /* PCjr reserves the top of its internal 128KB of RAM for video RAM. - * Sidecars can extend it past 128KB but it requires DOS drivers or TSRs - * to modify the MCB chain so that it a) marks the video memory as reserved - * and b) creates a new free region above the video RAM region. - * - * Therefore, only subtract 16KB if 128KB or less is configured for this machine. - * - * Note this is not speculation, it's there in the PCjr BIOS source code: - * [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/Video/PCjr/IBM%20Personal%20Computer%20PCjr%20Hardware%20Reference%20Library%20Technical%20Reference%20%281983%2d11%29%20First%20Edition%20Revised%2epdf] ROM BIOS source code page A-16 */ - if (t_conv <= (128+16)) { - if (t_conv > 128) t_conv = 128; - t_conv -= 16; - } - if (ulimit <= (128+16)) { - if (ulimit > 128) ulimit = 128; - ulimit -= 16; - } - } - - /* INT 4B. Now we can safely signal error instead of printing "Invalid interrupt 4B" - * whenever we install Windows 95. Note that Windows 95 would call INT 4Bh because - * that is where the Virtual DMA API lies in relation to EMM386.EXE */ - int4b_callback.Install(&INT4B_Handler,CB_IRET,"INT 4B"); - - /* INT 14 Serial Ports */ - callback[3].Install(&INT14_Handler,CB_IRET_STI,"Int 14 COM-port"); - - /* INT 15 Misc Calls */ - callback[4].Install(&INT15_Handler,CB_IRET,"Int 15 Bios"); - - /* INT 17 Printer Routines */ - callback[5].Install(&INT17_Handler,CB_IRET_STI,"Int 17 Printer"); - - /* INT 1A TIME and some other functions */ - callback[6].Install(&INT1A_Handler,CB_IRET_STI,"Int 1a Time"); - - /* INT 1C System Timer tick called from INT 8 */ - callback[7].Install(&INT1C_Handler,CB_IRET,"Int 1c Timer"); - - /* IRQ 8 RTC Handler */ - callback[8].Install(&INT70_Handler,CB_IRET,"Int 70 RTC"); - - /* Irq 9 rerouted to irq 2 */ - callback[9].Install(NULL,CB_IRQ9,"irq 9 bios"); - - // INT 19h: Boot function - callback[10].Install(&INT19_Handler,CB_IRET,"int 19"); - - // INT 1Bh: IBM PC CTRL+Break - callback[19].Install(&INT1B_Break_Handler,CB_IRET,"BIOS 1Bh stock CTRL+BREAK handler"); - - // INT 76h: IDE IRQ 14 - // This is just a dummy IRQ handler to prevent crashes when - // IDE emulation fires the IRQ and OS's like Win95 expect - // the BIOS to handle the interrupt. - // FIXME: Shouldn't the IRQ send an ACK to the PIC as well?!? - callback[11].Install(&IRQ14_Dummy,CB_IRET_EOI_PIC2,"irq 14 ide"); - - // INT 77h: IDE IRQ 15 - // This is just a dummy IRQ handler to prevent crashes when - // IDE emulation fires the IRQ and OS's like Win95 expect - // the BIOS to handle the interrupt. - // FIXME: Shouldn't the IRQ send an ACK to the PIC as well?!? - callback[12].Install(&IRQ15_Dummy,CB_IRET_EOI_PIC2,"irq 15 ide"); - - // INT 0Eh: IDE IRQ 6 - callback[13].Install(&IRQ15_Dummy,CB_IRET_EOI_PIC1,"irq 6 floppy"); - - // INT 18h: Enter BASIC - // Non-IBM BIOS would display "NO ROM BASIC" here - callback[15].Install(&INT18_Handler,CB_IRET,"int 18"); - - if(IS_J3100) { - callback[16].Install(&INT60_Handler,CB_IRET,"Int 60 Bios"); - callback[16].Set_RealVec(0x60); - - callback[17].Install(&INT6F_Handler,CB_INT6F_ATOK,"Int 6F Bios"); - callback[17].Set_RealVec(0x6f); - } - - init_vm86_fake_io(); - - /* Irq 2-7 */ - call_irq07default=CALLBACK_Allocate(); - - /* Irq 8-15 */ - call_irq815default=CALLBACK_Allocate(); - - /* BIOS boot stages */ - cb_bios_post.Install(&cb_bios_post__func,CB_RETF,"BIOS POST"); - cb_bios_scan_video_bios.Install(&cb_bios_scan_video_bios__func,CB_RETF,"BIOS Scan Video BIOS"); - cb_bios_adapter_rom_scan.Install(&cb_bios_adapter_rom_scan__func,CB_RETF,"BIOS Adapter ROM scan"); - cb_bios_startup_screen.Install(&cb_bios_startup_screen__func,CB_RETF,"BIOS Startup screen"); - cb_bios_boot.Install(&cb_bios_boot__func,CB_RETF,"BIOS BOOT"); - cb_bios_bootfail.Install(&cb_bios_bootfail__func,CB_RETF,"BIOS BOOT FAIL"); - - if (IS_PC98_ARCH) { - cb_pc98_rombasic.Install(&cb_pc98_entry__func,CB_RETF,"N88 ROM BASIC"); - } - else { - /* IBM ROM BASIC resides at segment F600:0000 just below the 5150 ROM BIOS. - * MS-DOS 1.x and 2.x BASIC(A).COM jump to specific addresses in the ROM BASIC to do their thing. - * The purpose of these callbacks is to catch those programs and safely halt emulation to - * state that ROM BASIC is not present */ - cb_ibm_basic.Install(&cb_ibm_basic_entry__func,CB_RETF,"IBM ROM BASIC entry"); - } - - // Compatible POST routine location: jump to the callback - { - Bitu wo_fence; - - { - const Bitu wo = Real2Phys(BIOS_DEFAULT_RESET_LOCATION); - if (IS_PC98_ARCH) { - const unsigned int ofs = Real2Phys(BIOS_DEFAULT_RESET_CODE_LOCATION) - 0xF0000u; - phys_writeb(wo+0,0xEA);/*JMP far*/ - phys_writew(wo+1,ofs); - phys_writew(wo+3,0xF000); - } - else { - const unsigned int delta = (Real2Phys(BIOS_DEFAULT_RESET_CODE_LOCATION) - (Real2Phys(BIOS_DEFAULT_RESET_LOCATION) + 3u)) & 0xFFFFu; - const Bitu wo = Real2Phys(BIOS_DEFAULT_RESET_LOCATION); - phys_writeb(wo+0,0xE9);/*JMP near*/ - phys_writew(wo+1,delta); - } - } - - Bitu wo = Real2Phys(BIOS_DEFAULT_RESET_CODE_LOCATION); - wo_fence = wo + 64; - - // POST - phys_writeb(wo+0x00,(uint8_t)0xFE); //GRP 4 - phys_writeb(wo+0x01,(uint8_t)0x38); //Extra Callback instruction - phys_writew(wo+0x02,(uint16_t)cb_bios_post.Get_callback()); //The immediate word - wo += 4; - - // video bios scan - phys_writeb(wo+0x00,(uint8_t)0xFE); //GRP 4 - phys_writeb(wo+0x01,(uint8_t)0x38); //Extra Callback instruction - phys_writew(wo+0x02,(uint16_t)cb_bios_scan_video_bios.Get_callback()); //The immediate word - wo += 4; - - // adapter ROM scan - phys_writeb(wo+0x00,(uint8_t)0xFE); //GRP 4 - phys_writeb(wo+0x01,(uint8_t)0x38); //Extra Callback instruction - phys_writew(wo+0x02,(uint16_t)cb_bios_adapter_rom_scan.Get_callback()); //The immediate word - wo += 4; - - // startup screen - phys_writeb(wo+0x00,(uint8_t)0xFE); //GRP 4 - phys_writeb(wo+0x01,(uint8_t)0x38); //Extra Callback instruction - phys_writew(wo+0x02,(uint16_t)cb_bios_startup_screen.Get_callback()); //The immediate word - wo += 4; - - // user boot hook - if (bios_user_boot_hook != 0) { - phys_writeb(wo+0x00,0x9C); //PUSHF - phys_writeb(wo+0x01,0x9A); //CALL FAR - phys_writew(wo+0x02,0x0000); //seg:0 - phys_writew(wo+0x04,bios_user_boot_hook>>4); - wo += 6; - } - - // boot - BIOS_boot_code_offset = wo; - phys_writeb(wo+0x00,(uint8_t)0xFE); //GRP 4 - phys_writeb(wo+0x01,(uint8_t)0x38); //Extra Callback instruction - phys_writew(wo+0x02,(uint16_t)cb_bios_boot.Get_callback()); //The immediate word - wo += 4; - - // boot fail - BIOS_bootfail_code_offset = wo; - phys_writeb(wo+0x00,(uint8_t)0xFE); //GRP 4 - phys_writeb(wo+0x01,(uint8_t)0x38); //Extra Callback instruction - phys_writew(wo+0x02,(uint16_t)cb_bios_bootfail.Get_callback()); //The immediate word - wo += 4; - - /* fence */ - phys_writeb(wo++,0xEB); // JMP $-2 - phys_writeb(wo++,0xFE); - - if (wo > wo_fence) E_Exit("BIOS boot callback overrun"); - - if (IS_PC98_ARCH) { - /* Boot disks that run N88 basic, stopgap */ - PhysPt bo = 0xE8002; // E800:0002 - - ROMBIOS_GetMemory(6,"N88 ROM BASIC entry point",/*align*/1,bo); - - phys_writeb(bo+0x00,(uint8_t)0xFE); //GRP 4 - phys_writeb(bo+0x01,(uint8_t)0x38); //Extra Callback instruction - phys_writew(bo+0x02,(uint16_t)cb_pc98_rombasic.Get_callback()); //The immediate word - - phys_writeb(bo+0x04,0xEB); // JMP $-2 - phys_writeb(bo+0x05,0xFE); - - // On careful examination of BIOS.ROM, there's a JMP instruction at E800:0000 as well. - // I don't have any test cases that jump there, but add a JMP forward just in case. - bo = 0xE8000; - phys_writeb(bo+0x00,(uint8_t)0xEB); // JMP $+2 (to next instruction) - phys_writeb(bo+0x01,(uint8_t)0x00); - - /* "Nut Berry" expects a 8-byte lookup table for [AL&7] -> 1 << (AL&7) at 0xFD80:0x0E3C so it's - * custom keyboard interrupt handler can update the keyboard status bitmap in the BIOS data area. - * I don't know if the game even uses it. On a BIOS.ROM image I have, and on real hardware, there - * is clearly that table but at slightly different addresses (One PC-9821 laptop has it at - * 0xFD80:0x0E45) which means whether the game uses it or not the bitmap may have random bits set - * when you exit to DOS. - * - * Assuming no other game does this, this fixed address should be fine. - * - * NOTE: After disassembling the IRQ1 handler on a real PC-9821 laptop, I noticed this game's - * custom ISR bears a strong resemblance to it. In fact, you might say it's an exact instruction - * for instruction copy of the ISR, except that the table addresses in ROM are slightly different. - * Ha. Theoretically then, that means we could also get this game to work fully properly by patching - * it not to hook the keyboard interrupt at all! */ - for (unsigned int i=0;i < 8;i++) phys_writeb(0xFD800+0xE3C+i,1u << i); - - /* "Nut Berry" also assumes shift state table offsets (for all 16 possible combinations) exist - * at 0xFD80:0x0E28. Once again, this means it will not work properly on anything other than the dev's - * machine because on a real PC-9821 laptop used for testing, the table offset is slightly different - * (0xE31 instead of 0xE28). The table mentioned here is used to update the 0x522 offset WORD in the - * BIOS data area to reflect the translation table in effect based on the shift key status, so if you - * misread the table you end up pointing it at junk and then keyboard input doesn't work anymore. */ - // NTS: On a real PC-9821 laptop, the table is apparently 10 entries long. If BDA byte 0x53A is less than - // 8 then it's just a simple lookup. If BDA byte 0x53A has bit 4 set, then use the 8th entry, and - // if bit 4 and 3 are set, use the 9th entry. - for (unsigned int i=0;i < 10;i++) phys_writew(0xFD800+0xE28+(i*2),(unsigned int)(Real2Phys(BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION) - 0xFD800) + (i * 0x60)); - } - else { - if (ibm_rom_basic_size == 0) { - /* IBM MS-DOS 1.x/2.x BASIC and BASICA, stopgap */ - PhysPt bo; - - bo = 0xF6000+0x2DB0; // F600:2DB0 - - ROMBIOS_GetMemory(6,"IBM ROM BASIC entry point",/*align*/1,bo); - - phys_writeb(bo+0x00,(uint8_t)0xFE); //GRP 4 - phys_writeb(bo+0x01,(uint8_t)0x38); //Extra Callback instruction - phys_writew(bo+0x02,(uint16_t)cb_ibm_basic.Get_callback()); //The immediate word - - phys_writeb(bo+0x04,0xEB); // JMP $-2 - phys_writeb(bo+0x05,0xFE); - - bo = 0xF6000+0x4C79; // F600:4C79 - - ROMBIOS_GetMemory(6,"IBM ROM BASIC entry point",/*align*/1,bo); - - phys_writeb(bo+0x00,(uint8_t)0xFE); //GRP 4 - phys_writeb(bo+0x01,(uint8_t)0x38); //Extra Callback instruction - phys_writew(bo+0x02,(uint16_t)cb_ibm_basic.Get_callback()); //The immediate word - - phys_writeb(bo+0x04,0xEB); // JMP $-2 - phys_writeb(bo+0x05,0xFE); - } - } - - if (IS_PC98_ARCH && enable_pc98_copyright_string) { - size_t i=0; - - ROMBIOS_GetMemory(pc98_copyright_str.length()+1,"NEC PC-98 copyright string",/*align*/1,0xE8000 + 0x0DD8); - - for (;i < pc98_copyright_str.length();i++) - phys_writeb(0xE8000 + 0x0DD8 + (PhysPt)i,(uint8_t)pc98_copyright_str[i]); - - phys_writeb(0xE8000 + 0x0DD8 + (PhysPt)i,0); - - ROMBIOS_GetMemory(sizeof(pc98_epson_check_2),"NEC PC-98 Epson check data #2",/*align*/1,0xF5200 + 0x018E); - - for (i=0;i < sizeof(pc98_epson_check_2);i++) - phys_writeb(0xF5200 + 0x018E + (PhysPt)i,(uint8_t)pc98_epson_check_2[i]); - } - } - } - ~BIOS(){ - /* snap the CPU back to real mode. this code thinks in terms of 16-bit real mode - * and if allowed to do its thing in a 32-bit guest OS like WinNT, will trigger - * a page fault. */ - CPU_Snap_Back_To_Real_Mode(); - - if (acpi_iocallout != IO_Callout_t_none) { - IO_FreeCallout(acpi_iocallout); - acpi_iocallout = IO_Callout_t_none; - } - - if (BOCHS_PORT_E9) { - delete BOCHS_PORT_E9; - BOCHS_PORT_E9=NULL; - } - if (ISAPNP_PNP_ADDRESS_PORT) { - delete ISAPNP_PNP_ADDRESS_PORT; - ISAPNP_PNP_ADDRESS_PORT=NULL; - } - if (ISAPNP_PNP_DATA_PORT) { - delete ISAPNP_PNP_DATA_PORT; - ISAPNP_PNP_DATA_PORT=NULL; - } - if (ISAPNP_PNP_READ_PORT) { - delete ISAPNP_PNP_READ_PORT; - ISAPNP_PNP_READ_PORT=NULL; - } - if (isapnpigdevice) { - /* ISA PnP will auto-free it */ - isapnpigdevice=NULL; - } - - if (dosbox_int_iocallout != IO_Callout_t_none) { - IO_FreeCallout(dosbox_int_iocallout); - dosbox_int_iocallout = IO_Callout_t_none; - } - - /* abort DAC playing */ - if (tandy_sb.port) { - IO_Write(tandy_sb.port+0xcu,0xd3u); - IO_Write(tandy_sb.port+0xcu,0xd0u); - } - real_writeb(0x40,0xd4,0x00); - if (tandy_DAC_callback[0]) { - uint32_t orig_vector=real_readd(0x40,0xd6); - if (orig_vector==tandy_DAC_callback[0]->Get_RealPointer()) { - /* set IRQ vector to old value */ - uint8_t tandy_irq = 7; - if (tandy_sb.port) tandy_irq = tandy_sb.irq; - else if (tandy_dac.port) tandy_irq = tandy_dac.irq; - uint8_t tandy_irq_vector = tandy_irq; - if (tandy_irq_vector<8) tandy_irq_vector += 8; - else tandy_irq_vector += (0x70-8); - - RealSetVec(tandy_irq_vector,real_readd(0x40,0xd6)); - real_writed(0x40,0xd6,0x00000000); - } - delete tandy_DAC_callback[0]; - delete tandy_DAC_callback[1]; - tandy_DAC_callback[0]=NULL; - tandy_DAC_callback[1]=NULL; - } - - /* encourage the callback objects to uninstall HERE while we're in real mode, NOT during the - * destructor stage where we're back in protected mode */ - for (unsigned int i=0;i < callback_count;i++) callback[i].Uninstall(); - - /* assume these were allocated */ - CALLBACK_DeAllocate(call_irq0); - CALLBACK_DeAllocate(call_irq07default); - CALLBACK_DeAllocate(call_irq815default); - - /* done */ - CPU_Snap_Back_Restore(); - } -}; - -void BIOS_Enter_Boot_Phase(void) { - /* direct CS:IP right to the instruction that leads to the boot process */ - /* note that since it's a callback instruction it doesn't really matter - * what CS:IP is as long as it points to the instruction */ - reg_eip = BIOS_boot_code_offset & 0xFUL; - CPU_SetSegGeneral(cs, BIOS_boot_code_offset >> 4UL); -} - -void BIOS_SetCOMPort(Bitu port, uint16_t baseaddr) { - switch(port) { - case 0: - mem_writew(BIOS_BASE_ADDRESS_COM1,baseaddr); - mem_writeb(BIOS_COM1_TIMEOUT, 10); // FIXME: Right?? - break; - case 1: - mem_writew(BIOS_BASE_ADDRESS_COM2,baseaddr); - mem_writeb(BIOS_COM2_TIMEOUT, 10); // FIXME: Right?? - break; - case 2: - mem_writew(BIOS_BASE_ADDRESS_COM3,baseaddr); - mem_writeb(BIOS_COM3_TIMEOUT, 10); // FIXME: Right?? - break; - case 3: - mem_writew(BIOS_BASE_ADDRESS_COM4,baseaddr); - mem_writeb(BIOS_COM4_TIMEOUT, 10); // FIXME: Right?? - break; - } -} - -void BIOS_SetLPTPort(Bitu port, uint16_t baseaddr) { - switch(port) { - case 0: - mem_writew(BIOS_ADDRESS_LPT1,baseaddr); - mem_writeb(BIOS_LPT1_TIMEOUT, 10); - break; - case 1: - mem_writew(BIOS_ADDRESS_LPT2,baseaddr); - mem_writeb(BIOS_LPT2_TIMEOUT, 10); - break; - case 2: - mem_writew(BIOS_ADDRESS_LPT3,baseaddr); - mem_writeb(BIOS_LPT3_TIMEOUT, 10); - break; - } -} - -void BIOS_PnP_ComPortRegister(Bitu port,Bitu irq) { - /* add to PnP BIOS */ - if (ISAPNPBIOS) { - unsigned char tmp[256]; - unsigned int i; - - /* register serial ports */ - const unsigned char h1[9] = { - ISAPNP_SYSDEV_HEADER( - ISAPNP_ID('P','N','P',0x0,0x5,0x0,0x1), /* PNP0501 16550A-compatible COM port */ - ISAPNP_TYPE(0x07,0x00,0x02), /* type: RS-232 communications device, 16550-compatible */ - 0x0001 | 0x0002) - }; - - i = 0; - memcpy(tmp+i,h1,9); i += 9; /* can't disable, can't configure */ - /*----------allocated--------*/ - tmp[i+0] = (8 << 3) | 7; /* IO resource */ - tmp[i+1] = 0x01; /* 16-bit decode */ - host_writew(tmp+i+2,port); /* min */ - host_writew(tmp+i+4,port); /* max */ - tmp[i+6] = 0x10; /* align */ - tmp[i+7] = 0x08; /* length */ - i += 7+1; - - if (irq > 0) { - tmp[i+0] = (4 << 3) | 3; /* IRQ resource */ - host_writew(tmp+i+1,1 << irq); - tmp[i+3] = 0x09; /* HTL=1 LTL=1 */ - i += 3+1; - } - - tmp[i+0] = 0x79; /* END TAG */ - tmp[i+1] = 0x00; - i += 2; - /*-------------possible-----------*/ - tmp[i+0] = 0x79; /* END TAG */ - tmp[i+1] = 0x00; - i += 2; - /*-------------compatible---------*/ - tmp[i+0] = 0x79; /* END TAG */ - tmp[i+1] = 0x00; - i += 2; - - if (!ISAPNP_RegisterSysDev(tmp,i)) { - //LOG_MSG("ISAPNP register failed\n"); - } - } -} - -static BIOS* test = NULL; - -void BIOS_Destroy(Section* /*sec*/){ - ROMBIOS_DumpMemory(); - ISA_PNP_FreeAllDevs(); - if (test != NULL) { - delete test; - test = NULL; - } -} - -void BIOS_OnPowerOn(Section* sec) { - (void)sec;//UNUSED - if (test) delete test; - test = new BIOS(control->GetSection("joystick")); -} - -void swapInNextDisk(bool pressed); -void swapInNextCD(bool pressed); - -void INT10_OnResetComplete(); -void CALLBACK_DeAllocate(Bitu in); - -void MOUSE_Unsetup_DOS(void); -void MOUSE_Unsetup_BIOS(void); - -void BIOS_OnResetComplete(Section *x) { - (void)x;//UNUSED - INT10_OnResetComplete(); - - if (IS_PC98_ARCH) { - void PC98_BIOS_Bank_Switch_Reset(void); - PC98_BIOS_Bank_Switch_Reset(); - } - - if (biosConfigSeg != 0u) { - ROMBIOS_FreeMemory((Bitu)(biosConfigSeg << 4u)); /* remember it was alloc'd paragraph aligned, then saved >> 4 */ - biosConfigSeg = 0u; - } - - call_pnp_rp = 0; - if (call_pnp_r != ~0UL) { - CALLBACK_DeAllocate(call_pnp_r); - call_pnp_r = ~0UL; - } - - call_pnp_pp = 0; - if (call_pnp_p != ~0UL) { - CALLBACK_DeAllocate(call_pnp_p); - call_pnp_p = ~0UL; - } - - MOUSE_Unsetup_DOS(); - MOUSE_Unsetup_BIOS(); - - ISA_PNP_FreeAllSysNodeDevs(); -} - -void BIOS_Init() { - DOSBoxMenu::item *item; - - LOG(LOG_MISC,LOG_DEBUG)("Initializing BIOS"); - - /* make sure the array is zeroed */ - ISAPNP_SysDevNodeCount = 0; - ISAPNP_SysDevNodeLargest = 0; - for (int i=0;i < MAX_ISA_PNP_SYSDEVNODES;i++) ISAPNP_SysDevNodes[i] = NULL; - - /* make sure CD swap and floppy swap mapper events are available */ - MAPPER_AddHandler(swapInNextDisk,MK_o,MMODHOST,"swapimg","Swap floppy drive",&item); /* Originally "Swap Image" but this version does not swap CDs */ - item->set_text("Swap floppy drive"); - - MAPPER_AddHandler(swapInNextCD,MK_d,MMODHOST,"swapcd","Swap CD drive",&item); /* Variant of "Swap Image" for CDs */ - item->set_text("Swap CD drive"); - - /* NTS: VM_EVENT_BIOS_INIT this callback must be first. */ - AddExitFunction(AddExitFunctionFuncPair(BIOS_Destroy),false); - AddVMEventFunction(VM_EVENT_POWERON,AddVMEventFunctionFuncPair(BIOS_OnPowerOn)); - AddVMEventFunction(VM_EVENT_RESET_END,AddVMEventFunctionFuncPair(BIOS_OnResetComplete)); -} - -void write_ID_version_string() { - Bitu str_id_at,str_ver_at; - size_t str_id_len,str_ver_len; - - /* NTS: We can't move the version and ID strings, it causes programs like MSD.EXE to lose - * track of the "IBM compatible blahblahblah" string. Which means that apparently - * programs looking for this information have the address hardcoded ALTHOUGH - * experiments show you can move the version string around so long as it's - * +1 from a paragraph boundary */ - /* TODO: *DO* allow dynamic relocation however if the dosbox-x.conf indicates that the user - * is not interested in IBM BIOS compatibility. Also, it would be really cool if - * dosbox-x.conf could override these strings and the user could enter custom BIOS - * version and ID strings. Heh heh heh.. :) */ - str_id_at = 0xFE00E; - str_ver_at = 0xFE061; - str_id_len = strlen(bios_type_string)+1; - str_ver_len = strlen(bios_version_string)+1; - if (!IS_PC98_ARCH) { - /* need to mark these strings off-limits so dynamic allocation does not overwrite them */ - ROMBIOS_GetMemory((Bitu)str_id_len+1,"BIOS ID string",1,str_id_at); - ROMBIOS_GetMemory((Bitu)str_ver_len+1,"BIOS version string",1,str_ver_at); - } - if (str_id_at != 0) { - for (size_t i=0;i < str_id_len;i++) phys_writeb(str_id_at+(PhysPt)i,(uint8_t)bios_type_string[i]); - } - if (str_ver_at != 0) { - for (size_t i=0;i < str_ver_len;i++) phys_writeb(str_ver_at+(PhysPt)i,(uint8_t)bios_version_string[i]); - } -} - -void GEN_PowerButton(bool pressed) { - if (!pressed) - return; - - if (PowerManagementEnabledButton()) { - PowerButtonClicks++; - } - else { - LOG(LOG_MISC,LOG_WARN)("Power button: Guest OS is not using power management and is probably ignoring the power button"); - } -} - - -extern uint8_t int10_font_08[256 * 8]; -extern uint16_t j3_font_offset; - -/* NTS: Do not use callbacks! This function is called before CALLBACK_Init() */ -void ROMBIOS_Init() { - Section_prop * section=static_cast(control->GetSection("dosbox")); - Bitu oi; - - /* This is GENERIC. Right now it only ties into the APM BIOS emulation. - * In the future, it will also tie into the ACPI emulation. We'll have - * menu items to trigger specific APM/ACPI events of course, but for - * the mapper, we'll try not to confuse the user with APM vs ACPI for - * the same reason PC manufacturers don't have two power buttons for - * each standard on the front. - * - * Note for PC-98 mode: I'm aware that there are mid to late 1990s - * PC-98 laptops that also have a power button to send some kind of - * power off event. If how that works becomes known, it can be tied - * to this mapper shortcut as well. It's obviously not APM since - * the APM standard is tied to the IBM compatible PC world. */ - - // log - LOG(LOG_MISC,LOG_DEBUG)("Initializing ROM BIOS"); - - ibm_rom_basic.clear(); - ibm_rom_basic_size = 0; - - oi = (Bitu)section->Get_int("rom bios minimum size"); /* in KB */ - oi = (oi + 3u) & ~3u; /* round to 4KB page */ - if (oi > 128u) oi = 128u; - if (oi == 0u) { - if (IS_PC98_ARCH) - oi = 96u; // BIOS standard range is E8000-FFFFF - else - oi = 64u; - } - if (oi < 8) oi = 8; /* because of some of DOSBox's fixed ROM structures we can only go down to 8KB */ - rombios_minimum_size = (oi << 10); /* convert to minimum, using size coming downward from 1MB */ - - oi = (Bitu)section->Get_int("rom bios allocation max"); /* in KB */ - oi = (oi + 3u) & ~3u; /* round to 4KB page */ - if (oi > 128u) oi = 128u; - if (oi == 0u) { - if (IS_PC98_ARCH) - oi = 96u; - else - oi = 64u; - } - if (oi < 8u) oi = 8u; /* because of some of DOSBox's fixed ROM structures we can only go down to 8KB */ - oi <<= 10u; - if (oi < rombios_minimum_size) oi = rombios_minimum_size; - rombios_minimum_location = 0x100000ul - oi; /* convert to minimum, using size coming downward from 1MB */ - - LOG(LOG_BIOS,LOG_DEBUG)("ROM BIOS range: 0x%05X-0xFFFFF",(int)rombios_minimum_location); - LOG(LOG_BIOS,LOG_DEBUG)("ROM BIOS range according to minimum size: 0x%05X-0xFFFFF",(int)(0x100000 - rombios_minimum_size)); - - if (IS_PC98_ARCH && rombios_minimum_location > 0xE8000) - LOG(LOG_BIOS,LOG_DEBUG)("Caution: Minimum ROM base higher than E8000 will prevent use of actual PC-98 BIOS image or N88 BASIC"); - - if (!MEM_map_ROM_physmem(rombios_minimum_location,0xFFFFF)) E_Exit("Unable to map ROM region as ROM"); - - /* and the BIOS alias at the top of memory (TODO: what about 486/Pentium emulation where the BIOS at the 4GB top is different - * from the BIOS at the legacy 1MB boundary because of shadowing and/or decompressing from ROM at boot? */ - { - uint64_t top = (uint64_t)1UL << (uint64_t)MEM_get_address_bits4GB(); - if (top >= ((uint64_t)1UL << (uint64_t)21UL)) { /* 2MB or more */ - unsigned long alias_base,alias_end; - - alias_base = (unsigned long)top + (unsigned long)rombios_minimum_location - 0x100000UL; - alias_end = (unsigned long)top - 1UL; - - LOG(LOG_BIOS,LOG_DEBUG)("ROM BIOS also mapping alias to 0x%08lx-0x%08lx",alias_base,alias_end); - if (!MEM_map_ROM_alias_physmem(alias_base,alias_end)) { - void MEM_cut_RAM_up_to(Bitu addr); - - /* it's possible if memory aliasing is set that memsize is too large to make room. - * let memory emulation know where the ROM BIOS starts so it can unmap the RAM pages, - * reduce the memory reported to the OS, and try again... */ - LOG(LOG_BIOS,LOG_DEBUG)("No room for ROM BIOS alias, reducing reported memory and unmapping RAM pages to make room"); - MEM_cut_RAM_up_to(alias_base); - - if (!MEM_map_ROM_alias_physmem(alias_base,alias_end)) - E_Exit("Unable to map ROM region as ROM alias"); - } - } - } - - /* set up allocation */ - rombios_alloc.name = "ROM BIOS"; - rombios_alloc.topDownAlloc = true; - rombios_alloc.initSetRange(rombios_minimum_location,0xFFFF0 - 1); - - if (IS_PC98_ARCH) { - /* TODO: Is this needed? And where? */ - } - else { - /* prevent dynamic allocation from taking reserved fixed addresses above F000:E000 in IBM PC mode. */ - rombios_alloc.setMaxDynamicAllocationAddress(0xFE000 - 1); - } - - if (!IS_PC98_ARCH) { - ibm_rom_basic = section->Get_string("ibm rom basic"); - if (!ibm_rom_basic.empty()) { - void ResolvePath(std::string& in); - ResolvePath(ibm_rom_basic); - struct stat st; - if (stat(ibm_rom_basic.c_str(),&st) == 0 && S_ISREG(st.st_mode) && st.st_size >= (off_t)(32u*1024u) && st.st_size <= (off_t)(64u*1024u) && (st.st_size % 4096) == 0) { - ibm_rom_basic_size = (size_t)st.st_size; - ibm_rom_basic_base = rombios_alloc._max_nonfixed + 1 - st.st_size; - LOG_MSG("Will load IBM ROM BASIC to %05lx-%05lx",(unsigned long)ibm_rom_basic_base,(unsigned long)(ibm_rom_basic_base+ibm_rom_basic_size-1)); - Bitu base = ROMBIOS_GetMemory(ibm_rom_basic_size,"IBM ROM BASIC",1u/*page align*/,ibm_rom_basic_base); - rombios_alloc.setMaxDynamicAllocationAddress(ibm_rom_basic_base - 1); - (void)base; - - FILE *fp = fopen(ibm_rom_basic.c_str(),"rb"); - if (fp != NULL) { - fread(GetMemBase()+ibm_rom_basic_base,ibm_rom_basic_size,1u,fp); - fclose(fp); - } - } - } - } - - write_ID_version_string(); - - if (IS_PC98_ARCH && enable_pc98_copyright_string) { // PC-98 BIOSes have a copyright string at E800:0DD8 - if (ROMBIOS_GetMemory(pc98_copyright_str.length()+1,"PC-98 copyright string",1,0xE8000 + 0x0DD8) == 0) - LOG_MSG("WARNING: Was not able to mark off E800:0DD8 off-limits for PC-98 copyright string"); - if (ROMBIOS_GetMemory(sizeof(pc98_epson_check_2),"PC-98 unknown data / Epson check",1,0xF5200 + 0x018E) == 0) - LOG_MSG("WARNING: Was not able to mark off E800:0DD8 off-limits for PC-98 copyright string"); - } - - /* some structures when enabled are fixed no matter what */ - if (rom_bios_8x8_cga_font && !IS_PC98_ARCH) { - /* line 139, int10_memory.cpp: the 8x8 font at 0xF000:FA6E, first 128 chars. - * allocate this NOW before other things get in the way */ - if (ROMBIOS_GetMemory(128*8,"BIOS 8x8 font (first 128 chars)",1,0xFFA6E) == 0) { - LOG_MSG("WARNING: Was not able to mark off 0xFFA6E off-limits for 8x8 font"); - } - } - - /* PC-98 BIOS vectors appear to reside at segment 0xFD80. This is so common some games - * use it (through INT 1Dh) to detect whether they are running on PC-98 or not (issue #927). - * - * Note that INT 1Dh is one of the few BIOS interrupts not intercepted by PC-98 MS-DOS */ - if (IS_PC98_ARCH) { - if (ROMBIOS_GetMemory(128,"PC-98 INT vector stub segment 0xFD80",1,0xFD800) == 0) { - LOG_MSG("WARNING: Was not able to mark off 0xFD800 off-limits for PC-98 int vector stubs"); - } - } - - /* PC-98 BIOSes have a LIO interface at segment F990 with graphic subroutines for Microsoft BASIC */ - if (IS_PC98_ARCH) { - if (ROMBIOS_GetMemory(256,"PC-98 LIO graphic ROM BIOS library",1,0xF9900) == 0) { - LOG_MSG("WARNING: Was not able to mark off 0xF9900 off-limits for PC-98 LIO graphics library"); - } - } - - /* install the font */ - if (rom_bios_8x8_cga_font) { - for (Bitu i=0;i<128*8;i++) { - phys_writeb(PhysMake(0xf000,0xfa6e)+i,int10_font_08[i]); - } - } - - /* we allow dosbox-x.conf to specify a binary blob to load into ROM BIOS and execute after reset. - * we allow this for both hacker curiosity and automated CPU testing. */ - { - std::string path = section->Get_string("call binary on reset"); - struct stat st; - - if (!path.empty() && stat(path.c_str(),&st) == 0 && S_ISREG(st.st_mode) && st.st_size <= (off_t)(128u*1024u)) { - Bitu base = ROMBIOS_GetMemory((Bitu)st.st_size,"User reset vector binary",16u/*page align*/,0u); - - if (base != 0) { - FILE *fp = fopen(path.c_str(),"rb"); - - if (fp != NULL) { - /* NTS: Make sure memory base != NULL, and that it fits within 1MB. - * memory code allocates a minimum 1MB of memory even if - * guest memory is less than 1MB because ROM BIOS emulation - * depends on it. */ - assert(GetMemBase() != NULL); - assert((base+(Bitu)st.st_size) <= 0x100000ul); - size_t readResult = fread(GetMemBase()+base,(size_t)st.st_size,1u,fp); - fclose(fp); - if (readResult != 1) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in ROMBIOS_Init\n"); - return; - } - - LOG_MSG("User reset vector binary '%s' loaded at 0x%lx",path.c_str(),(unsigned long)base); - bios_user_reset_vector_blob = base; - } - else { - LOG_MSG("WARNING: Unable to open file to load user reset vector binary '%s' into ROM BIOS memory",path.c_str()); - } - } - else { - LOG_MSG("WARNING: Unable to load user reset vector binary '%s' into ROM BIOS memory",path.c_str()); - } - } - } - - /* we allow dosbox-x.conf to specify a binary blob to load into ROM BIOS and execute just before boot. - * we allow this for both hacker curiosity and automated CPU testing. */ - { - std::string path = section->Get_string("call binary on boot"); - struct stat st; - - if (!path.empty() && stat(path.c_str(),&st) == 0 && S_ISREG(st.st_mode) && st.st_size <= (off_t)(128u*1024u)) { - Bitu base = ROMBIOS_GetMemory((Bitu)st.st_size,"User boot hook binary",16u/*page align*/,0u); - - if (base != 0) { - FILE *fp = fopen(path.c_str(),"rb"); - - if (fp != NULL) { - /* NTS: Make sure memory base != NULL, and that it fits within 1MB. - * memory code allocates a minimum 1MB of memory even if - * guest memory is less than 1MB because ROM BIOS emulation - * depends on it. */ - assert(GetMemBase() != NULL); - assert((base+(Bitu)st.st_size) <= 0x100000ul); - size_t readResult = fread(GetMemBase()+base,(size_t)st.st_size,1u,fp); - fclose(fp); - if (readResult != 1) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in ROMBIOS_Init\n"); - return; - } - - LOG_MSG("User boot hook binary '%s' loaded at 0x%lx",path.c_str(),(unsigned long)base); - bios_user_boot_hook = base; - } - else { - LOG_MSG("WARNING: Unable to open file to load user boot hook binary '%s' into ROM BIOS memory",path.c_str()); - } - } - else { - LOG_MSG("WARNING: Unable to load user boot hook binary '%s' into ROM BIOS memory",path.c_str()); - } - } - } - // J-3100's DOS reads 8x16 font data directly from F000:CA00. - if(IS_J3100) { - ROMBIOS_GetMemory(256*16, "J-3100 8x16 font data", 1, 0xf0000 + j3_font_offset); - } -} - -//! \brief Updates the state of a lockable key. -void UpdateKeyWithLed(int nVirtKey, int flagAct, int flagLed); - -bool IsSafeToMemIOOnBehalfOfGuest() -{ - if(cpu.pmode) return false; // protected mode (including virtual 8086 mode): NO - if(dos_kernel_disabled) return false; // guest OS not running under our own DOS kernel: NO - return true; -} - -void BIOS_SynchronizeNumLock() -{ -#if defined(WIN32) - UpdateKeyWithLed(VK_NUMLOCK, BIOS_KEYBOARD_FLAGS1_NUMLOCK_ACTIVE, BIOS_KEYBOARD_LEDS_NUM_LOCK); -#endif -} - -void BIOS_SynchronizeCapsLock() -{ -#if defined(WIN32) - UpdateKeyWithLed(VK_CAPITAL, BIOS_KEYBOARD_FLAGS1_CAPS_LOCK_ACTIVE, BIOS_KEYBOARD_LEDS_CAPS_LOCK); -#endif -} - -void BIOS_SynchronizeScrollLock() -{ -#if defined(WIN32) - UpdateKeyWithLed(VK_SCROLL, BIOS_KEYBOARD_FLAGS1_SCROLL_LOCK_ACTIVE, BIOS_KEYBOARD_LEDS_SCROLL_LOCK); -#endif -} - -void UpdateKeyWithLed(int nVirtKey, int flagAct, int flagLed) -{ -#if defined(WIN32) - - const auto state = GetKeyState(nVirtKey); - - const auto flags1 = BIOS_KEYBOARD_FLAGS1; - const auto flags2 = BIOS_KEYBOARD_LEDS; - - auto flag1 = mem_readb(flags1); - auto flag2 = mem_readb(flags2); - - if (state & 1) - { - flag1 |= flagAct; - flag2 |= flagLed; - } - else - { - flag1 &= ~flagAct; - flag2 &= ~flagLed; - } - - mem_writeb(flags1, flag1); - mem_writeb(flags2, flag2); - -#else - - (void)nVirtKey; - (void)flagAct; - (void)flagLed; - -#endif -} - +/* + * Copyright (C) 2002-2021 The DOSBox Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include "control.h" +#include "dosbox.h" +#include "mem.h" +#include "cpu.h" +#include "bios.h" +#include "regs.h" +#include "timer.h" +#include "cpu.h" +#include "bitop.h" +#include "callback.h" +#include "inout.h" +#include "pic.h" +#include "hardware.h" +#include "pci_bus.h" +#include "joystick.h" +#include "mouse.h" +#include "callback.h" +#include "setup.h" +#include "bios_disk.h" +#include "serialport.h" +#include "mapper.h" +#include "vga.h" +#include "jfont.h" +#include "shiftjis.h" +#include "pc98_gdc.h" +#include "pc98_gdc_const.h" +#include "regionalloctracking.h" +#include "build_timestamp.h" +#include "int10.h" +extern bool PS1AudioCard; +#include "parport.h" +#include "dma.h" +#include "shell.h" +#include "render.h" +#include "sdlmain.h" +#include +#include +#include "version_string.h" + +#define DOSBOX_INCLUDE +#include "iglib.h" + +#if C_LIBPNG +#include +#endif + +#if defined(DB_HAVE_CLOCK_GETTIME) && ! defined(WIN32) +//time.h is already included +#else +#include +#endif + +#if C_EMSCRIPTEN +# include +#endif + +#include + +#if defined(_MSC_VER) +# pragma warning(disable:4244) /* const fmath::local::uint64_t to double possible loss of data */ +# pragma warning(disable:4305) /* truncation from double to float */ +#endif + +#if defined(WIN32) && !defined(S_ISREG) +# define S_ISREG(x) ((x & S_IFREG) == S_IFREG) +#endif + +static unsigned char ig_cpu_cycles_set = 0; +static uint32_t ig_cpu_cycles_value = 0; +static uint8_t ig_cpu_cycles_max_percent = 0; + +struct BIOS_E280_entry { + uint64_t base = 0; + uint64_t length = 0; + uint32_t type = 0; + uint32_t acpi_ext_addr = 0; +}; + +#define MAX_E280 16 +static BIOS_E280_entry E280_table[MAX_E280]; +static unsigned int E280_table_entries = 0; + +bool VGA_InitBiosLogo(unsigned int w,unsigned int h,unsigned int x,unsigned int y); +void VGA_WriteBiosLogoBMP(unsigned int y,unsigned char *scanline,unsigned int w); +void VGA_WriteBiosLogoPalette(unsigned int start,unsigned int count,unsigned char *rgb); +void VGA_FreeBiosLogo(void); +void VGA_ShowBIOSLogo(void); + +extern bool ega200; + +unsigned char ACPI_ENABLE_CMD = 0xA1; +unsigned char ACPI_DISABLE_CMD = 0xA0; +unsigned int ACPI_IO_BASE = 0x820; +unsigned int ACPI_PM1A_EVT_BLK = 0x820; +unsigned int ACPI_PM1A_CNT_BLK = 0x824; +unsigned int ACPI_PM_TMR_BLK = 0x830; +/* debug region 0x840-0x84F */ +unsigned int ACPI_DEBUG_IO = 0x840; + +std::string ibm_rom_basic; +size_t ibm_rom_basic_size = 0; +uint32_t ibm_rom_basic_base = 0; + +/* NTS: The "Epson check" code in Windows 2.1 only compares up to the end of "NEC Corporation" */ +const std::string pc98_copyright_str = "Copyright (C) 1983 by NEC Corporation / Microsoft Corp.\x0D\x0A"; + +/* more strange data involved in the "Epson check" */ +const unsigned char pc98_epson_check_2[0x27] = { + 0x26,0x8A,0x05,0xA8,0x10,0x75,0x11,0xC6,0x06,0xD6,0x09,0x1B,0xC6,0x06,0xD7,0x09, + 0x4B,0xC6,0x06,0xD8,0x09,0x48,0xEB,0x0F,0xC6,0x06,0xD6,0x09,0x1A,0xC6,0x06,0xD7 , + 0x09,0x70,0xC6,0x06,0xD8,0x09,0x71 +}; + +bool enable_pc98_copyright_string = false; + +/* mouse.cpp */ +extern bool pc98_40col_text; +extern bool en_bios_ps2mouse; +extern bool rom_bios_8x8_cga_font; +extern bool pcibus_enable; +extern bool enable_fpu; +extern bool finish_prepare; +extern bool is_ttfswitched_on; + +/* vga_pc98_cg.cpp */ +extern bool pc98_cg_kanji_dot_access_mode; + +bool pc98_timestamp5c = true; // port 5ch and 5eh "time stamp/hardware wait" + +uint32_t Keyb_ig_status(); +bool VM_Boot_DOSBox_Kernel(); +Bitu bios_post_parport_count(); +Bitu bios_post_comport_count(); +void pc98_update_cpu_page_ptr(void); +bool KEYBOARD_Report_BIOS_PS2Mouse(); +bool gdc_5mhz_according_to_bios(void); +void pc98_update_display_page_ptr(void); +void pc98_update_palette(void); +bool MEM_map_ROM_alias_physmem(Bitu start,Bitu end); +void MOUSE_Startup(Section *sec); +void Mouse_PS2SetSamplingRate(uint8_t rate); +bool Mouse_PS2SetPacketSize(uint8_t packet_size); +void change_output(int output); +void runBoot(const char *str); +void SetIMPosition(void); +bool isDBCSCP(); +Bitu INT60_Handler(void); +Bitu INT6F_Handler(void); +bool toOutput(const char* what); +#if defined(USE_TTF) +void ttf_switch_on(bool ss), ttf_switch_off(bool ss), ttf_setlines(int cols, int lins); +#endif +std::string conf_output; + +/* Rate limit log entries regarding APM AH=05h CPU IDLE because Windows 98's APM driver likes to call it way too much per second */ +pic_tickindex_t APM_log_cpu_idle_next_report = 0; +unsigned long APM_log_cpu_idle = 0; + +unsigned long APM_WakeupKeys = 0; + +/* APM events (eventually ACPI as well) */ +unsigned long PowerButtonClicks = 0; +bool APM_ResumeNotificationFromSuspend = false; +bool APM_ResumeNotificationFromStandby = false; +bool APM_PowerButtonSendsSuspend = true; + + +bool bochs_port_e9 = false; +bool isa_memory_hole_512kb = false; +bool isa_memory_hole_15mb = false; +bool int15_wait_force_unmask_irq = false; + +int unhandled_irq_method = UNHANDLED_IRQ_SIMPLE; + +unsigned int reset_post_delay = 0; + +Bitu call_irq_default = 0; +uint16_t biosConfigSeg=0; + +static constexpr unsigned int ACPI_PMTIMER_CLOCK_RATE = 3579545; /* 3.579545MHz */ + +pic_tickindex_t ACPI_PMTIMER_BASE_TIME = 0; +uint32_t ACPI_PMTIMER_BASE_COUNT = 0; +uint32_t ACPI_PMTIMER_MASK = 0xFFFFFFu; /* 24-bit mode */ + +uint32_t ACPI_PMTIMER(void) { + pic_tickindex_t pt = PIC_FullIndex() - ACPI_PMTIMER_BASE_TIME; + uint32_t ct = (uint32_t)((pt * ACPI_PMTIMER_CLOCK_RATE) / 1000.0); + return ct; +} + +void ACPI_PMTIMER_Event(Bitu /*val*/); +void ACPI_PMTIMER_ScheduleNext(void) { + const uint32_t now_ct = ACPI_PMTIMER() & ACPI_PMTIMER_MASK; + const uint32_t next_delay_ct = (ACPI_PMTIMER_MASK + 1u) - now_ct; + const pic_tickindex_t delay = (1000.0 * next_delay_ct) / (pic_tickindex_t)ACPI_PMTIMER_CLOCK_RATE; + + LOG(LOG_MISC,LOG_DEBUG)("ACPI PM TIMER SCHEDULE: now=0x%x next=0x%x delay=%.3f",now_ct,next_delay_ct,(double)delay); + PIC_AddEvent(ACPI_PMTIMER_Event,delay); +} + +void ACPI_PMTIMER_CHECK(void) { /* please don't call this often */ + PIC_RemoveEvents(ACPI_PMTIMER_Event); + LOG(LOG_MISC,LOG_DEBUG)("ACPI PM TIMER CHECK"); + ACPI_PMTIMER_ScheduleNext(); +} + +Bitu BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION = ~0u; +Bitu BIOS_DEFAULT_IRQ0_LOCATION = ~0u; // (RealMake(0xf000,0xfea5)) +Bitu BIOS_DEFAULT_IRQ1_LOCATION = ~0u; // (RealMake(0xf000,0xe987)) +Bitu BIOS_DEFAULT_IRQ07_DEF_LOCATION = ~0u; // (RealMake(0xf000,0xff55)) +Bitu BIOS_DEFAULT_IRQ815_DEF_LOCATION = ~0u; // (RealMake(0xf000,0xe880)) + +Bitu BIOS_DEFAULT_HANDLER_LOCATION = ~0u; // (RealMake(0xf000,0xff53)) +Bitu BIOS_DEFAULT_INT5_LOCATION = ~0u; // (RealMake(0xf000,0xff54)) + +Bitu BIOS_VIDEO_TABLE_LOCATION = ~0u; // RealMake(0xf000,0xf0a4) +Bitu BIOS_VIDEO_TABLE_SIZE = 0u; + +Bitu BIOS_DEFAULT_RESET_LOCATION = ~0u; // RealMake(0xf000,0xe05b) +Bitu BIOS_DEFAULT_RESET_CODE_LOCATION = ~0u; + +bool allow_more_than_640kb = false; + +unsigned int APM_BIOS_connected_minor_version = 0;// what version the OS connected to us with. default to 1.0 +unsigned int APM_BIOS_minor_version = 2; // what version to emulate e.g to emulate 1.2 set this to 2 + +static bool apm_realmode_connected = false; + +/* default bios type/version/date strings */ +const char* const bios_type_string = "IBM COMPATIBLE BIOS for DOSBox-X"; +const char* const bios_version_string = "DOSBox-X BIOS v1.0"; +const char* const bios_date_string = "01/01/92"; + +bool APM_inactivity_timer = true; + +RegionAllocTracking rombios_alloc; + +Bitu rombios_minimum_location = 0xF0000; /* minimum segment allowed */ +Bitu rombios_minimum_size = 0x10000; + +static bool ACPI_SCI_EN = false; +static bool ACPI_BM_RLD = false; + +static IO_Callout_t acpi_iocallout = IO_Callout_t_none; + +static unsigned int ACPI_PM1_Enable = 0; +static unsigned int ACPI_PM1_Status = 0; +static constexpr unsigned int ACPI_PM1_Enable_TMR_EN = (1u << 0u); +static constexpr unsigned int ACPI_PM1_Enable_GBL_EN = (1u << 5u); +static constexpr unsigned int ACPI_PM1_Enable_PWRBTN_EN = (1u << 8u); +static constexpr unsigned int ACPI_PM1_Enable_SLPBTN_EN = (1u << 9u); +static constexpr unsigned int ACPI_PM1_Enable_RTC_EN = (1u << 10u); + +unsigned int ACPI_buffer_global_lock = 0; + +unsigned long ACPI_FACS_GlobalLockValue(void) { + if (ACPI_buffer && ACPI_buffer_global_lock != 0) + return host_readd(ACPI_buffer+ACPI_buffer_global_lock); + + return 0; +} + +/* Triggered by GBL_RLS bit */ +static void ACPI_OnGuestGlobalRelease(void) { + LOG(LOG_MISC,LOG_DEBUG)("ACPI GBL_RLS event. Global lock = %lx",ACPI_FACS_GlobalLockValue()); +} + +bool ACPI_GuestEnabled(void) { + return ACPI_SCI_EN; +} + +static void ACPI_SCI_Check(void) { + if (ACPI_SCI_EN) { + if (ACPI_PM1_Status & ACPI_PM1_Enable) { + LOG(LOG_MISC,LOG_DEBUG)("ACPI SCI interrupt"); + PIC_ActivateIRQ(ACPI_IRQ); + } + } +} + +void ACPI_PowerButtonEvent(void) { + if (ACPI_SCI_EN) { + if (!(ACPI_PM1_Status & ACPI_PM1_Enable_PWRBTN_EN)) { + ACPI_PM1_Status |= ACPI_PM1_Enable_PWRBTN_EN; + ACPI_SCI_Check(); + } + } +} + +void ACPI_PMTIMER_Event(Bitu /*val*/) { + if (!(ACPI_PM1_Status & ACPI_PM1_Enable_TMR_EN)) { + ACPI_PM1_Status |= ACPI_PM1_Enable_TMR_EN; + ACPI_SCI_Check(); + } + + ACPI_PMTIMER_ScheduleNext(); +} + +/* you can't very well write strings with this, but you could write codes */ +static void acpi_cb_port_debug_w(Bitu /*port*/,Bitu val,Bitu /*iolen*/) { + LOG(LOG_MISC,LOG_DEBUG)("ACPI debug: 0x%x\n",(unsigned int)val); +} + +static void acpi_cb_port_smi_cmd_w(Bitu /*port*/,Bitu val,Bitu /*iolen*/) { + /* 8-bit SMI_CMD port */ + LOG(LOG_MISC,LOG_DEBUG)("ACPI SMI_CMD %x",(unsigned int)val); + + if (val == ACPI_ENABLE_CMD) { + if (!ACPI_SCI_EN) { + LOG(LOG_MISC,LOG_DEBUG)("Guest enabled ACPI"); + ACPI_SCI_EN = true; + ACPI_PMTIMER_CHECK(); + ACPI_SCI_Check(); + } + } + else if (val == ACPI_DISABLE_CMD) { + if (ACPI_SCI_EN) { + LOG(LOG_MISC,LOG_DEBUG)("Guest disabled ACPI"); + ACPI_PMTIMER_CHECK(); + ACPI_SCI_EN = false; + } + } +} + +static Bitu acpi_cb_port_cnt_blk_r(Bitu port,Bitu /*iolen*/) { + /* 16-bit register (PM1_CNT_LEN == 2) */ + Bitu ret = 0; + if (ACPI_SCI_EN) ret |= (1u << 0u); + if (ACPI_BM_RLD) ret |= (1u << 1u); + /* GBL_RLS is write only */ + /* TODO: bits 3-8 are "reserved by the ACPI driver"? So are they writeable then? */ + /* TODO: SLP_TYPx */ + /* SLP_EN is write-only */ + + LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM1_CNT_BLK read port %x ret %x",(unsigned int)port,(unsigned int)ret); + return ret; +} + +static void acpi_cb_port_cnt_blk_w(Bitu port,Bitu val,Bitu iolen) { + /* 16-bit register (PM1_CNT_LEN == 2) */ + LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM1_CNT_BLK write port %x val %x iolen %x",(unsigned int)port,(unsigned int)val,(unsigned int)iolen); + + /* BIOS controls SCI_EN and therefore guest cannot change it */ + ACPI_BM_RLD = !!(val & (1u << 1u)); + /* GLB_RLS is write only and triggers an SMI interrupt to pass execution to the BIOS, usually to indicate a release of the global lock and set of pending bit */ + if (val & (1u << 2u)/*GBL_RLS*/) ACPI_OnGuestGlobalRelease(); + /* TODO: bits 3-8 are "reserved by the ACPI driver"? So are they writeable then? */ + /* TODO: SLP_TYPx */ + /* SLP_EN is write-only */ +} + +static Bitu acpi_cb_port_evtst_blk_r(Bitu port,Bitu /*iolen*/) { + /* 16-bit register (PM1_EVT_LEN/2 == 2) */ + Bitu ret = ACPI_PM1_Status; + LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM1_EVT_BLK(status) read port %x ret %x",(unsigned int)port,(unsigned int)ret); + return ret; +} + +static void acpi_cb_port_evtst_blk_w(Bitu port,Bitu val,Bitu iolen) { + /* 16-bit register (PM1_EVT_LEN/2 == 2) */ + LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM1_EVT_BLK(status) write port %x val %x iolen %x",(unsigned int)port,(unsigned int)val,(unsigned int)iolen); + ACPI_PM1_Status &= (~val); + ACPI_SCI_Check(); +} + +static Bitu acpi_cb_port_evten_blk_r(Bitu port,Bitu /*iolen*/) { + /* 16-bit register (PM1_EVT_LEN/2 == 2) */ + Bitu ret = ACPI_PM1_Enable; + LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM1_EVT_BLK(enable) read port %x ret %x",(unsigned int)port,(unsigned int)ret); + return ret; +} + +static Bitu acpi_cb_port_tmr_r(Bitu port,Bitu /*iolen*/) { + /* 24 or 32-bit TMR_VAL (depends on the mask value and whether our ACPI structures tell the OS it's 32-bit wide) */ + Bitu ret = (Bitu)ACPI_PMTIMER(); + LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM_TMR read port %x ret %x",(unsigned int)port,(unsigned int)ret); + return ret; +} + +static void acpi_cb_port_evten_blk_w(Bitu port,Bitu val,Bitu iolen) { + /* 16-bit register (PM1_EVT_LEN/2 == 2) */ + LOG(LOG_MISC,LOG_DEBUG)("ACPI_PM1_EVT_BLK(enable) write port %x val %x iolen %x",(unsigned int)port,(unsigned int)val,(unsigned int)iolen); + ACPI_PM1_Enable = val; + ACPI_SCI_Check(); +} + +static IO_ReadHandler* acpi_cb_port_r(IO_CalloutObject &co,Bitu port,Bitu iolen) { + (void)co; + (void)iolen; + + if ((port & (~1u)) == (ACPI_PM1A_EVT_BLK+0) && iolen >= 2) + return acpi_cb_port_evtst_blk_r; + else if ((port & (~1u)) == (ACPI_PM1A_EVT_BLK+2) && iolen >= 2) + return acpi_cb_port_evten_blk_r; + else if ((port & (~1u)) == ACPI_PM1A_CNT_BLK && iolen >= 2) + return acpi_cb_port_cnt_blk_r; + /* The ACPI specification says nothing about reading SMI_CMD so assume that means write only */ + else if ((port & (~3u)) == ACPI_PM_TMR_BLK && iolen >= 4) + return acpi_cb_port_tmr_r; + + return NULL; +} + +static IO_WriteHandler* acpi_cb_port_w(IO_CalloutObject &co,Bitu port,Bitu iolen) { + (void)co; + (void)iolen; + + if ((port & (~1u)) == (ACPI_PM1A_EVT_BLK+0) && iolen >= 2) + return acpi_cb_port_evtst_blk_w; + else if ((port & (~1u)) == (ACPI_PM1A_EVT_BLK+2) && iolen >= 2) + return acpi_cb_port_evten_blk_w; + else if ((port & (~1u)) == ACPI_PM1A_CNT_BLK && iolen >= 2) + return acpi_cb_port_cnt_blk_w; + else if ((port & (~3u)) == ACPI_SMI_CMD) + return acpi_cb_port_smi_cmd_w; + else if (port == ACPI_DEBUG_IO && iolen >= 4) + return acpi_cb_port_debug_w; + else if ((port & (~3u)) == ACPI_PM_TMR_BLK) { + LOG(LOG_MISC,LOG_DEBUG)("write ACPI_PM_TMR_BLK port=0x%x iolen=%u",(unsigned int)port,(unsigned int)iolen); + } + + return NULL; +} + +bool MEM_map_ROM_physmem(Bitu start,Bitu end); +bool MEM_unmap_physmem(Bitu start,Bitu end); + +static std::string bochs_port_e9_line; + +static void bochs_port_e9_flush() { + if (!bochs_port_e9_line.empty()) { + LOG_MSG("Bochs port E9h: %s",bochs_port_e9_line.c_str()); + bochs_port_e9_line.clear(); + } +} + +void bochs_port_e9_write(Bitu port,Bitu val,Bitu /*iolen*/) { + (void)port;//UNUSED + if (val == '\n' || val == '\r') { + bochs_port_e9_flush(); + } + else { + bochs_port_e9_line += (char)val; + if (bochs_port_e9_line.length() >= 256) + bochs_port_e9_flush(); + } +} + +LoopHandler *DOSBOX_GetLoop(void); + +static Bitu APM_SuspendedLoopFunc(void); + +static RealPt APM_SuspendedLoopRptr=0; + +/* "wakeup" keys were pressed and released */ +void APM_Suspend_Wakeup_Key(void) { + APM_WakeupKeys++; +} + +void APM_SuspendedLoopLeaveState() { + APM_WakeupKeys = 0; + PowerButtonClicks = 0; + + /* Turn on the VGA display, assuming it was on when suspended */ + if (IS_VGA_ARCH) { + Bitu crtc; + Bitu tmp; + + IO_Write(0x3C4,0x01); // clocking mode + tmp = IO_Read(0x3C5); + IO_Write(0x3C5,tmp & (~0x20)); // turn on screen + + // NTS: vga_crtc.cpp/vga_draw.cpp does not emulate blanking the display upon disabling sync signals + crtc = (IO_Read(0x3CC) & 1) ? 0x3D4 : 0x3B4; + IO_Write(crtc,0x17); // mode control + tmp = IO_Read(crtc+1); + IO_Write(crtc+1,tmp | 0x80); // enable sync + } +} + +/* callback for APM suspended loop routine in BIOS */ +static Bitu APM_SuspendedLoopFunc(void) { + if (APM_WakeupKeys != 0 || PowerButtonClicks != 0) { + APM_SuspendedLoopLeaveState(); + LOG_MSG("APM: leaving suspended state"); + reg_eip += 3; /* skip over HLT+JMP to get to RET */ + return CBRET_NONE; + } + + return CBRET_NONE; +} + +bool PowerManagementEnabledButton() { + if (IS_PC98_ARCH) /* power management not yet known or implemented */ + return false; + + if (ACPI_GuestEnabled()) + ACPI_PowerButtonEvent(); + + if (apm_realmode_connected) /* guest has connected to the APM BIOS */ + return true; + + return false; +} + +void APM_BeginSuspendedMode(void) { + /* Enable interrupts, dumbass. We use HLT here. */ + CPU_STI(); + + /* WARNING: This assumes, like all callbacks, that they reside in the same segment. + * The APM BIOS entry point can be called from real mode, 16-bit or 32-bit protected mode, + * therefore this code cannot assume any particular segment value and can only safely + * change reg_(e)ip to direct CPU execution. The most likely scenario is that the + * return address pushed here will point at the IRET in the INT 15 handler. */ + if (cpu.stack.big) CPU_Push32(reg_eip); + else CPU_Push16(reg_ip); + + reg_ip = APM_SuspendedLoopRptr & 0xFFFF; /* offset only */ + + /* reset counters */ + PowerButtonClicks = 0; + APM_WakeupKeys = 0; + + /* Turn off the VGA display */ + if (IS_VGA_ARCH) { + Bitu crtc; + Bitu tmp; + + IO_Write(0x3C4,0x01); // clocking mode + tmp = IO_Read(0x3C5); + IO_Write(0x3C5,tmp | 0x20); // turn off screen + + // NTS: vga_crtc.cpp/vga_draw.cpp does not emulate blanking the display upon disabling sync signals + crtc = (IO_Read(0x3CC) & 1) ? 0x3D4 : 0x3B4; + IO_Write(crtc,0x17); // mode control + tmp = IO_Read(crtc+1); + IO_Write(crtc+1,tmp & (~0x80)); // disable sync + } + + LOG_MSG("System is now in APM suspend mode"); +} + + +void ROMBIOS_DumpMemory() { + rombios_alloc.logDump(); +} + +void ROMBIOS_SanityCheck() { + rombios_alloc.sanityCheck(); +} + +Bitu ROMBIOS_MinAllocatedLoc() { + Bitu r = rombios_alloc.getMinAddress(); + + if (r > (0x100000u - rombios_minimum_size)) + r = (0x100000u - rombios_minimum_size); + + return r & ~0xFFFu; +} + +void ROMBIOS_FreeUnusedMinToLoc(Bitu phys) { + Bitu new_phys; + + if (rombios_minimum_location & 0xFFF) E_Exit("ROMBIOS: FreeUnusedMinToLoc minimum location not page aligned"); + + phys &= ~0xFFFUL; + new_phys = rombios_alloc.freeUnusedMinToLoc(phys) & (~0xFFFUL); + assert(new_phys >= phys); + if (phys < new_phys) MEM_unmap_physmem(phys,new_phys-1); + rombios_minimum_location = new_phys; + ROMBIOS_SanityCheck(); + ROMBIOS_DumpMemory(); +} + +bool ROMBIOS_FreeMemory(Bitu phys) { + return rombios_alloc.freeMemory(phys); +} + +Bitu ROMBIOS_GetMemory(Bitu bytes,const char *who,Bitu alignment,Bitu must_be_at) { + return rombios_alloc.getMemory(bytes,who,alignment,must_be_at); +} + +void ROMBIOS_InitForCustomBIOS(void) { + rombios_alloc.initSetRange(0xD8000,0xE0000); +} + +static IO_Callout_t dosbox_int_iocallout = IO_Callout_t_none; + +static unsigned char dosbox_int_register_shf = 0; +static uint32_t dosbox_int_register = 0; +static unsigned char dosbox_int_regsel_shf = 0; +static uint32_t dosbox_int_regsel = 0; +static bool dosbox_int_error = false; +static bool dosbox_int_busy = false; + +#define STRINGIZE_HELPER(A) #A +#define STRINGIZE(A) STRINGIZE_HELPER(A) +#define PPCAT_HELPER(A, B, C) A ## . ## B ## . ## C +#define PPCAT(A, B, C) PPCAT_HELPER(A, B, C) + +#define INTDEV_VERSION_BUMP 0 +#define INTDEV_VERSION_MAJOR 1 +#define INTDEV_VERSION_MINOR 1 +#define INTDEV_VERSION_SUB 0 + +static const char *dosbox_int_version = "DOSBox-X integration device v" STRINGIZE(PPCAT(INTDEV_VERSION_MAJOR, INTDEV_VERSION_MINOR, INTDEV_VERSION_SUB)); +static const char *dosbox_int_ver_read = NULL; + +struct dosbox_int_saved_state { + const char* dosbox_int_ver_read; + unsigned char dosbox_int_register_shf; + uint32_t dosbox_int_register; + unsigned char dosbox_int_regsel_shf; + uint32_t dosbox_int_regsel; + bool dosbox_int_error; + bool dosbox_int_busy; +}; + +#define DOSBOX_INT_SAVED_STATE_MAX 4 + +struct dosbox_int_saved_state dosbox_int_saved[DOSBOX_INT_SAVED_STATE_MAX]; +int dosbox_int_saved_sp = -1; + +/* for use with interrupt handlers in DOS/Windows that need to save IG state + * to ensure that IG state is restored on return in order to not interfere + * with anything userspace is doing (as an alternative to wrapping all access + * in CLI/STI or PUSHF/CLI/POPF) */ +bool dosbox_int_push_save_state(void) { + if (dosbox_int_saved_sp >= (DOSBOX_INT_SAVED_STATE_MAX-1)) + return false; + + struct dosbox_int_saved_state *ss = &dosbox_int_saved[++dosbox_int_saved_sp]; + + ss->dosbox_int_ver_read = dosbox_int_ver_read; + ss->dosbox_int_register_shf = dosbox_int_register_shf; + ss->dosbox_int_register = dosbox_int_register; + ss->dosbox_int_regsel_shf = dosbox_int_regsel_shf; + ss->dosbox_int_regsel = dosbox_int_regsel; + ss->dosbox_int_error = dosbox_int_error; + ss->dosbox_int_busy = dosbox_int_busy; + return true; +} + +bool dosbox_int_pop_save_state(void) { + if (dosbox_int_saved_sp < 0) + return false; + + struct dosbox_int_saved_state *ss = &dosbox_int_saved[dosbox_int_saved_sp--]; + + dosbox_int_ver_read = ss->dosbox_int_ver_read; + dosbox_int_register_shf = ss->dosbox_int_register_shf; + dosbox_int_register = ss->dosbox_int_register; + dosbox_int_regsel_shf = ss->dosbox_int_regsel_shf; + dosbox_int_regsel = ss->dosbox_int_regsel; + dosbox_int_error = ss->dosbox_int_error; + dosbox_int_busy = ss->dosbox_int_busy; + return true; +} + +bool dosbox_int_discard_save_state(void) { + if (dosbox_int_saved_sp < 0) + return false; + + dosbox_int_saved_sp--; + return true; +} + +extern bool user_cursor_locked; +extern int user_cursor_x,user_cursor_y; +extern int user_cursor_sw,user_cursor_sh; +extern int master_cascade_irq,bootdrive; +extern bool enable_slave_pic; +extern bool bootguest, use_quick_reboot; +extern uint16_t countryNo; +bool bootvm = false, bootfast = false; +static std::string dosbox_int_debug_out; + +uint32_t Mixer_MIXQ(void); +uint32_t VGA_QuerySizeIG(void); + +/* read triggered, update the regsel */ +void dosbox_integration_trigger_read() { + dosbox_int_error = false; + + switch (dosbox_int_regsel) { + case DOSBOX_ID_REG_IDENTIFY: + dosbox_int_register = 0xD05B0740; + break; + case DOSBOX_ID_REG_TEST: + break; + case DOSBOX_ID_REG_VERSION_STRING: + if (dosbox_int_ver_read == NULL) + dosbox_int_ver_read = dosbox_int_version; + + dosbox_int_register = 0; + for (Bitu i=0;i < 4;i++) { + if (*dosbox_int_ver_read == 0) { + dosbox_int_ver_read = dosbox_int_version; + break; + } + + dosbox_int_register += ((uint32_t)((unsigned char)(*dosbox_int_ver_read++))) << (uint32_t)(i * 8); + } + break; + case DOSBOX_ID_REG_VERSION_NUMBER: + dosbox_int_register = INTDEV_VERSION_MAJOR + (INTDEV_VERSION_MINOR << 8U) + (INTDEV_VERSION_SUB << 16U) + (INTDEV_VERSION_BUMP << 24U); + break; + case DOSBOX_ID_REG_READ_EMTIME: /* current emulator time as 16.16 fixed point */ + dosbox_int_register = (uint32_t)(PIC_FullIndex() * 0x10000); + break; + case DOSBOX_ID_REG_DOSBOX_VERSION_MAJOR: // DOSBox-X version number major (e.g. 2022) + { + const char * ver = strchr(VERSION, '.'); + dosbox_int_register = ver == NULL ? 0 : atoi(std::string(VERSION).substr(0, strlen(ver) - strlen(VERSION)).c_str()); + break; + } + case DOSBOX_ID_REG_DOSBOX_VERSION_MINOR: // DOSBox-X version number minor (e.g. 8) + { + const char * ver = strchr(VERSION, '.'); + dosbox_int_register = ver == NULL ? 0 : atoi(ver + 1); + break; + } + case DOSBOX_ID_REG_DOSBOX_VERSION_SUB: // DOSBox-X version number sub (e.g. 0) + { + const char * ver = strchr(VERSION, '.'); + ver = strchr(ver + 1, '.'); + dosbox_int_register = ver == NULL ? 0 : atoi(ver + 1); + break; + } + case DOSBOX_ID_REG_DOSBOX_PLATFORM_TYPE: // DOSBox-X platform type + dosbox_int_register = 0; +#if defined(HX_DOS) + dosbox_int_register = 4; +#elif defined(WIN32) + dosbox_int_register = 1; +#elif defined(LINUX) + dosbox_int_register = 2; +#elif defined(MACOSX) + dosbox_int_register = 3; +#elif defined(OS2) + dosbox_int_register = 5; +#else + dosbox_int_register = 0; +#endif + if (control->opt_securemode || control->SecureMode()) dosbox_int_register = 0; +#if OS_BIT_INT == 64 + dosbox_int_register += 0x20; // 64-bit +#else + dosbox_int_register += 0x10; // 32-bit +#endif +#if defined(C_SDL2) + dosbox_int_register += 0x200; // SDL2 +#elif defined(SDL_DOSBOX_X_SPECIAL) + dosbox_int_register += 0x100; // SDL1 (modified) +#endif + break; + case DOSBOX_ID_REG_DOSBOX_MACHINE_TYPE: // DOSBox-X machine type + dosbox_int_register = machine; + break; + + case DOSBOX_ID_REG_MIXER_QUERY: /* query mixer output 'MIXQ' */ + /* bits [19:0] = sample rate in Hz or 0 if mixer is not mixing AT ALL + * bits [23:20] = number of channels (at this time, always 2 aka stereo) + * bits [29:29] = 1=swap stereo 0=normal + * bits [30:30] = 1=muted 0=not muted + * bits [31:31] = 1=sound 0=nosound */ + dosbox_int_register = Mixer_MIXQ(); + break; + + case DOSBOX_ID_REG_DOS_KERNEL_STATUS: // DOS kernel status + dosbox_int_register = dos_kernel_disabled ? 0: 1; + break; + case DOSBOX_ID_REG_DOS_KERNEL_CODEPAGE: // DOS codepage number + dosbox_int_register = dos_kernel_disabled ? 0: dos.loaded_codepage; + break; + case DOSBOX_ID_REG_DOS_KERNEL_COUNTRY: // DOS country number + dosbox_int_register = dos_kernel_disabled ? 0: countryNo; + break; + case DOSBOX_ID_REG_DOS_KERNEL_VERSION_MAJOR: // DOS version major + dosbox_int_register = dos_kernel_disabled ? 0: dos.version.major; + break; + case DOSBOX_ID_REG_DOS_KERNEL_VERSION_MINOR: // DOS version minor + dosbox_int_register = dos_kernel_disabled ? 0: dos.version.minor; + break; + case DOSBOX_ID_REG_DOS_KERNEL_ERROR_CODE: // DOS error code + dosbox_int_register = dos_kernel_disabled ? 0 : dos.errorcode; + break; + case DOSBOX_ID_REG_DOS_KERNEL_BOOT_DRIVE: // DOS boot drive + dosbox_int_register = bootdrive; + break; + case DOSBOX_ID_REG_DOS_KERNEL_CURRENT_DRIVE: // DOS current drive + dosbox_int_register = dos_kernel_disabled ? 0 : DOS_GetDefaultDrive(); + break; + case DOSBOX_ID_REG_DOS_KERNEL_LFN_STATUS: // DOS LFN status + dosbox_int_register = dos_kernel_disabled || !uselfn ? 0: 1; + break; + + case DOSBOX_ID_REG_GET_VGA_MEMBASE: + dosbox_int_register = S3_LFB_BASE; + break; + case DOSBOX_ID_REG_GET_VGA_MEMSIZE: + dosbox_int_register = vga.mem.memsize; + break; + case DOSBOX_ID_REG_GET_VGA_SIZE: /* query VGA display size */ + dosbox_int_register = VGA_QuerySizeIG(); + break; + + case DOSBOX_ID_REG_GET_WINDOW_SIZE: /* query window size (so user mouse cursor has meaning) */ + dosbox_int_register = user_cursor_sw | (user_cursor_sh << 16); + break; + + case DOSBOX_ID_REG_8237_INJECT_READ: /* ISA DMA injection, single byte/word (read from memory) */ + break; + + case DOSBOX_ID_REG_8259_PIC_INFO: /* PIC configuration */ + /* bits [7:0] = cascade interrupt or 0xFF if none + * bit [8:8] = primary PIC present + * bit [9:9] = secondary PIC present */ + if (master_cascade_irq >= 0) + dosbox_int_register = ((unsigned int)master_cascade_irq & 0xFFu); + else + dosbox_int_register = 0xFFu; + + dosbox_int_register |= 0x100; // primary always present + if (enable_slave_pic) dosbox_int_register |= 0x200; + break; + + case DOSBOX_ID_REG_8042_KB_STATUS: /* keyboard status */ + dosbox_int_register = Keyb_ig_status(); + break; + + case DOSBOX_ID_REG_USER_MOUSE_STATUS: /* read user mouse status */ + dosbox_int_register = + (user_cursor_locked ? (1UL << 0UL) : 0UL) | /* bit 0 = mouse capture lock */ + (sdl.mouse.locked ? (1UL << 1UL) : 0UL); /* bit 1 = mouse captured */ + break; + + case DOSBOX_ID_REG_USER_MOUSE_CURSOR: /* read user mouse cursor position */ + dosbox_int_register = (uint32_t((uint16_t)user_cursor_y & 0xFFFFUL) << 16UL) | uint32_t((uint16_t)user_cursor_x & 0xFFFFUL); + break; + + case DOSBOX_ID_REG_USER_MOUSE_CURSOR_NORMALIZED: + { /* read user mouse cursor position (normalized for Windows 1.x/2.x/3.x/95/98/ME mouse driver interface) */ + signed long long x = ((signed long long)user_cursor_x << 16LL) / (signed long long)(user_cursor_sw-1); + signed long long y = ((signed long long)user_cursor_y << 16LL) / (signed long long)(user_cursor_sh-1); + if (x < 0x0000LL) x = 0x0000LL; + if (x > 0xFFFFLL) x = 0xFFFFLL; + if (y < 0x0000LL) y = 0x0000LL; + if (y > 0xFFFFLL) y = 0xFFFFLL; + dosbox_int_register = ((unsigned int)y << 16UL) | (unsigned int)x; + } break; + + case DOSBOX_ID_REG_SCREENSHOT_TRIGGER: /* Screenshot/capture trigger */ + /* TODO: This should be designed so that rogue DOS development cannot abuse this interface + * to prevent the user from recording anything */ +#if (C_SSHOT) + dosbox_int_register = 0x00000000; // available + if (CaptureState & CAPTURE_IMAGE) + dosbox_int_register |= 1 << 0; // Image capture is in progress + if (CaptureState & CAPTURE_VIDEO) + dosbox_int_register |= 1 << 1; // Video capture is in progress + if (CaptureState & CAPTURE_WAVE) + dosbox_int_register |= 1 << 2; // WAVE capture is in progress +#else + dosbox_int_register = 0xC0000000; // not available (bit 31 set), not enabled (bit 30 set) +#endif + break; + + case DOSBOX_ID_RESET_INDEX_CODE: /* interface reset result */ + break; + + case DOSBOX_ID_REG_CPU_CYCLES: + ig_cpu_cycles_set = 0; + if (CPU_CycleMax < 0x80000000) + dosbox_int_register = (uint32_t)CPU_CycleMax; + else + dosbox_int_register = (uint32_t)0x7FFFFFFFUL; + break; + + case DOSBOX_ID_REG_CPU_MAX_PERCENT: + dosbox_int_register = CPU_CyclePercUsed; + ig_cpu_cycles_set = 0; + break; + + case DOSBOX_ID_REG_CPU_CYCLES_INFO: + ig_cpu_cycles_set = 0; + dosbox_int_register = 0; + if (CPU_CycleAutoAdjust) + dosbox_int_register |= DOSBOX_ID_REG_CPU_CYCLES_INFO_MAX; + else if (CPU_AutoDetermineMode &CPU_AUTODETERMINE_CYCLES) + dosbox_int_register |= DOSBOX_ID_REG_CPU_CYCLES_INFO_AUTO; + else + dosbox_int_register |= DOSBOX_ID_REG_CPU_CYCLES_INFO_FIXED; + break; + + case DOSBOX_ID_REG_VGAIG_CAPS: + if (IS_VGA_ARCH && svgaCard == SVGA_DOSBoxIG) { + dosbox_int_register = DOSBOX_ID_REG_VGAIG_CAPS_ENABLED; + } + else { + dosbox_int_register = 0; + } + break; + + case DOSBOX_ID_REG_VGAIG_CTL: + /* Windows 3.1 "grabber" driver needs to be able to save/restore the IG registers, + * or perhaps switch on/off things at runtime. */ + if (IS_VGA_ARCH && svgaCard == SVGA_DOSBoxIG) { + dosbox_int_register = vga.dosboxig.ctlreg; + } + else { + dosbox_int_register = 0; + } + break; + + case DOSBOX_ID_REG_VGAIG_DISPLAYSIZE: + dosbox_int_register = vga.dosboxig.width | (vga.dosboxig.height << 16u); + break; + + case DOSBOX_ID_REG_VGAIG_RBANKWINDOW: + dosbox_int_register = vga.dosboxig.rbank_offset; + break; + + case DOSBOX_ID_REG_VGAIG_WBANKWINDOW: + dosbox_int_register = vga.dosboxig.wbank_offset; + break; + + default: + dosbox_int_register = 0xAA55AA55; + dosbox_int_error = true; + break; + } + + LOG(LOG_MISC,LOG_DEBUG)("DOSBox-X integration read 0x%08lx got 0x%08lx (err=%u)\n", + (unsigned long)dosbox_int_regsel, + (unsigned long)dosbox_int_register, + dosbox_int_error?1:0); +} + +bool watchdog_set = false; + +void Watchdog_Timeout_Event(Bitu /*val*/) { + LOG_MSG("Watchdog timeout occurred"); + CPU_Raise_NMI(); +} + +void Watchdog_Timer_Clear(void) { + if (watchdog_set) { + PIC_RemoveEvents(Watchdog_Timeout_Event); + watchdog_set = false; + } +} + +void Watchdog_Timer_Set(uint32_t timeout_ms) { + Watchdog_Timer_Clear(); + + if (timeout_ms != 0) { + watchdog_set = true; + PIC_AddEvent(Watchdog_Timeout_Event,(double)timeout_ms); + } +} + +void VGA_DOSBoxIG_FmtToVGA(void); + +unsigned int mouse_notify_mode = 0; +// 0 = off +// 1 = trigger as PS/2 mouse interrupt + +/* write triggered */ +void dosbox_integration_trigger_write() { + dosbox_int_error = false; + + LOG(LOG_MISC,LOG_DEBUG)("DOSBox-X integration write 0x%08lx val 0x%08lx\n", + (unsigned long)dosbox_int_regsel, + (unsigned long)dosbox_int_register); + + switch (dosbox_int_regsel) { + case DOSBOX_ID_REG_TEST: + break; + + case DOSBOX_ID_REG_VERSION_STRING: + dosbox_int_ver_read = NULL; + break; + + case DOSBOX_ID_REG_DEBUG_OUT: /* debug output (to log) */ + for (unsigned int b=0;b < 4;b++) { + unsigned char c = (unsigned char)(dosbox_int_register >> (b * 8U)); + if (c == '\n' || dosbox_int_debug_out.length() >= 200) { + LOG_MSG("Client debug message: %s\n",dosbox_int_debug_out.c_str()); + dosbox_int_debug_out.clear(); + } + else if (c != 0) { + dosbox_int_debug_out += ((char)c); + } + else { + break; + } + } + dosbox_int_register = 0; + break; + + case DOSBOX_ID_REG_DEBUG_CLEAR: /* debug output clear */ + dosbox_int_debug_out.clear(); + break; + + case DOSBOX_ID_REG_RELEASE_MOUSE_CAPTURE: /* release mouse capture 'MCR' */ + void GFX_ReleaseMouse(void); + GFX_ReleaseMouse(); + break; + + case DOSBOX_ID_REG_SET_WATCHDOG: /* Set/clear watchdog timer 'WATD' */ + Watchdog_Timer_Set(dosbox_int_register); + break; + + case DOSBOX_ID_REG_INJECT_NMI: /* NMI (INT 02h) interrupt injection */ + { + dosbox_int_register_shf = 0; + dosbox_int_regsel_shf = 0; + CPU_Raise_NMI(); + } + break; + + case DOSBOX_ID_REG_8259_INJECT_IRQ: /* PIC interrupt injection */ + { + dosbox_int_register_shf = 0; + dosbox_int_regsel_shf = 0; + /* bits [7:0] = IRQ to signal (must be 0-15) + * bit [8:8] = 1=raise 0=lower IRQ */ + uint8_t IRQ = dosbox_int_register&0xFFu; + bool raise = (dosbox_int_register>>8u)&1u; + + if (IRQ < 16) { + if (raise) + PIC_ActivateIRQ(IRQ); + else + PIC_DeActivateIRQ(IRQ); + } + } + break; + + case DOSBOX_ID_REG_8237_INJECT_WRITE: /* ISA DMA injection, single byte/word (write to memory) */ + { + dosbox_int_register_shf = 0; + dosbox_int_regsel_shf = 0; + /* bits [7:0] = data byte if 8-bit DNA + * bits [15:0] = data word if 16-bit DMA + * bits [18:16] = DMA channel to send to */ + DmaChannel *ch = GetDMAChannel((dosbox_int_register>>16u)&7u); + if (ch != NULL) { + unsigned char tmp[2]; + + tmp[0] = (unsigned char)( dosbox_int_register & 0xFFu); + tmp[1] = (unsigned char)((dosbox_int_register >> 8u) & 0xFFu); + + /* NTS: DMA channel write will write tmp[0] if 8-bit, tmp[0]/tmp[1] if 16-bit */ + if (ch->Write(1/*one unit of transfer*/,tmp) == 1) { + dosbox_int_register = 0; + dosbox_int_error = false; + } + else { + dosbox_int_register = 0x823700; + dosbox_int_error = true; + } + } + else { + dosbox_int_register = 0x8237FF; + dosbox_int_error = true; + } + } + break; + + case DOSBOX_ID_REG_8237_INJECT_READ: /* ISA DMA injection, single byte/word (read from memory) */ + { + dosbox_int_register_shf = 0; + dosbox_int_regsel_shf = 0; + /* bits [18:16] = DMA channel to send to */ + DmaChannel *ch = GetDMAChannel((dosbox_int_register>>16u)&7u); + if (ch != NULL) { + unsigned char tmp[2]; + + /* NTS: DMA channel write will write tmp[0] if 8-bit, tmp[0]/tmp[1] if 16-bit */ + tmp[0] = tmp[1] = 0; + if (ch->Read(1/*one unit of transfer*/,tmp) == 1) { + dosbox_int_register = ((unsigned int)tmp[1] << 8u) + (unsigned int)tmp[0]; + dosbox_int_error = false; + } + else { + dosbox_int_register = 0x823700; + dosbox_int_error = true; + } + } + else { + dosbox_int_register = 0x8237FF; + dosbox_int_error = true; + } + } + break; + + case DOSBOX_ID_REG_8042_KB_INJECT: /* keyboard input injection */ + void Mouse_ButtonPressed(uint8_t button); + void Mouse_ButtonReleased(uint8_t button); + void pc98_keyboard_send(const unsigned char b); + void Mouse_CursorMoved(float xrel,float yrel,float x,float y,bool emulate); + void KEYBOARD_AUX_Event(float x,float y,Bitu buttons,int scrollwheel); + void KEYBOARD_AddBuffer(uint16_t data); + + switch ((dosbox_int_register>>8)&0xFF) { + case 0x00: // keyboard + if (IS_PC98_ARCH) + pc98_keyboard_send(dosbox_int_register&0xFF); + else + KEYBOARD_AddBuffer(dosbox_int_register&0xFF); + break; + case 0x01: // AUX + if (!IS_PC98_ARCH) + KEYBOARD_AddBuffer((dosbox_int_register&0xFF)|0x100/*AUX*/); + else // no such interface in PC-98 mode + dosbox_int_error = true; + break; + case 0x08: // mouse button injection + if (dosbox_int_register&0x80) Mouse_ButtonPressed(dosbox_int_register&0x7F); + else Mouse_ButtonReleased(dosbox_int_register&0x7F); + break; + case 0x09: // mouse movement injection (X) + Mouse_CursorMoved(((dosbox_int_register>>16UL) / 256.0f) - 1.0f,0,0,0,true); + break; + case 0x0A: // mouse movement injection (Y) + Mouse_CursorMoved(0,((dosbox_int_register>>16UL) / 256.0f) - 1.0f,0,0,true); + break; + case 0x0B: // mouse scrollwheel injection + // TODO + break; + default: + dosbox_int_error = true; + break; + } + break; + + /* this command is used to enable notification of mouse movement over the windows even if the mouse isn't captured */ + case DOSBOX_ID_REG_USER_MOUSE_CURSOR: /* read user mouse cursor position */ + case DOSBOX_ID_REG_USER_MOUSE_CURSOR_NORMALIZED: /* read user mouse cursor position (normalized for Windows 3.x) */ + mouse_notify_mode = dosbox_int_register & 0xFF; + LOG(LOG_MISC,LOG_DEBUG)("Mouse notify mode=%u",mouse_notify_mode); + break; + + case DOSBOX_ID_REG_SCREENSHOT_TRIGGER: /* Screenshot/capture trigger */ +#if (C_SSHOT) + void CAPTURE_ScreenShotEvent(bool pressed); + void CAPTURE_VideoEvent(bool pressed); +#endif + void CAPTURE_WaveEvent(bool pressed); + + /* TODO: It would be wise to grant/deny access to this register through another dosbox-x.conf option + * so that rogue DOS development cannot shit-spam the capture folder */ +#if (C_SSHOT) + if (dosbox_int_register & 1) + CAPTURE_ScreenShotEvent(true); + if (dosbox_int_register & 2) + CAPTURE_VideoEvent(true); +#endif + if (dosbox_int_register & 4) + CAPTURE_WaveEvent(true); + break; + + case DOSBOX_ID_REG_VGAIG_CTL: { + bool modechange = false; + bool mapchange = false; + bool pv; + + if (IS_VGA_ARCH && svgaCard == SVGA_DOSBoxIG) { + vga.dosboxig.ctlreg = dosbox_int_register; + + pv = vga.dosboxig.svga; + vga.dosboxig.svga = !!(dosbox_int_register & DOSBOX_ID_REG_VGAIG_CTL_OVERRIDE); + if (vga.dosboxig.svga != pv) modechange = true; + + pv = vga.dosboxig.override_refresh; + vga.dosboxig.override_refresh = !!(dosbox_int_register & DOSBOX_ID_REG_VGAIG_CTL_OVERRIDE_REFRESH); + if (vga.dosboxig.override_refresh != pv) modechange = true; + + pv = vga.dosboxig.force_A0000; + vga.dosboxig.force_A0000 = !!(dosbox_int_register & DOSBOX_ID_REG_VGAIG_CTL_A0000_FORCE); + if (vga.dosboxig.force_A0000 != pv) mapchange = true; + + vga.dosboxig.vesa_bios_lockout = !!(dosbox_int_register & DOSBOX_ID_REG_VGAIG_CTL_VBEMODESET_DISABLE); + vga.dosboxig.vga_reg_lockout = !!(dosbox_int_register & DOSBOX_ID_REG_VGAIG_CTL_VGAREG_LOCKOUT); + vga.dosboxig.vga_acpal_bypass = !!(dosbox_int_register & DOSBOX_ID_REG_VGAIG_CTL_ACPAL_BYPASS); + vga.dosboxig.vga_3da_lockout = !!(dosbox_int_register & DOSBOX_ID_REG_VGAIG_CTL_3DA_LOCKOUT); + vga.dosboxig.vga_dac_lockout = !!(dosbox_int_register & DOSBOX_ID_REG_VGAIG_CTL_DAC_LOCKOUT); + + if (modechange) { + VGA_DetermineMode(); + VGA_StartResize(0); + VGA_DAC_UpdateColorPalette(); + } + + if (mapchange) { + VGA_SetupHandlers(); + } + } + break; } + + case DOSBOX_ID_REG_VGAIG_DISPLAYSIZE: + { + unsigned int nw = dosbox_int_register & 0xFFFFu; + unsigned int nh = dosbox_int_register >> 16u; + + if (nw < 16) nw = 16; + if (nh < 16) nh = 16; + if (nw > vga.max_svga_width) nw = vga.max_svga_width; + if (nh > vga.max_svga_height) nh = vga.max_svga_height; + + if (vga.dosboxig.width != nw || vga.dosboxig.height != nh) { + vga.dosboxig.width = nw; + vga.dosboxig.height = nh; + if (vga.dosboxig.svga) VGA_StartResize(0); + } + } + break; + + case DOSBOX_ID_REG_VGAIG_HVTOTALADD: + { + unsigned int nw = dosbox_int_register & 0xFFFFu; + unsigned int nh = dosbox_int_register >> 16u; + + if (vga.dosboxig.wa_total != nw || vga.dosboxig.ha_total != nh) { + vga.dosboxig.wa_total = nw; + vga.dosboxig.ha_total = nh; + if (vga.dosboxig.svga) VGA_StartResize(0); + } + } + break; + + case DOSBOX_ID_REG_VGAIG_FMT_BYTESPERSCANLINE: + { + unsigned int bpl = dosbox_int_register & 0xFFFFu; + unsigned int fmt = (dosbox_int_register >> 16u) & 0xFFu; + + if (vga.dosboxig.vidformat != fmt && fmt != 0xFFu) { + vga.dosboxig.vidformat = fmt; + if (vga.dosboxig.svga) { + VGA_DetermineMode(); + VGA_StartResize(0); + } + } + if (vga.dosboxig.bytes_per_scanline != bpl) { + vga.dosboxig.bytes_per_scanline = bpl; + if (vga.dosboxig.svga) VGA_CheckScanLength(); + } + } + break; + + case DOSBOX_ID_REG_VGAIG_REFRESHRATE: + { + uint32_t nr = dosbox_int_register; + + if (nr > (240ul << 16ul)) nr = 240ul << 16ul; /* 240fps is enough! */ + + if (vga.dosboxig.vratefp16 != nr) { + vga.dosboxig.vratefp16 = nr; + if (vga.dosboxig.svga) VGA_StartResize(0); + } + } + break; + + case DOSBOX_ID_REG_VGAIG_DISPLAYOFFSET: { + vga.dosboxig.display_offset = dosbox_int_register; + break; } + + case DOSBOX_ID_REG_VGAIG_HVPELSCALE: { + uint8_t vs = (dosbox_int_register >> 24u) & 0xFFu; + uint8_t hs = (dosbox_int_register >> 16u) & 0xFFu; + uint8_t vp = (dosbox_int_register >> 8u) & 0xFFu; + uint8_t hp = dosbox_int_register & 0xFFu; + bool modechange = false; + + if (vs != 0xFFu && vga.dosboxig.vscale != vs) { vga.dosboxig.vscale = vs; modechange = true; } + if (hs != 0xFFu && vga.dosboxig.hscale != hs) { vga.dosboxig.hscale = hs; modechange = true; } + if (vp != 0xFFu && vga.dosboxig.vpel != vp) { vga.dosboxig.vpel = vp; modechange = true; } + if (hp != 0xFFu && vga.dosboxig.hpel != hp) { vga.dosboxig.hpel = hp; modechange = true; } + + if (modechange && vga.dosboxig.svga) VGA_StartResize(0); + break; } + + case DOSBOX_ID_REG_VGAIG_BANKWINDOW: + { + uint32_t nr = dosbox_int_register & (~0xFFFul); + vga.dosboxig.rbank_offset = nr; + vga.dosboxig.wbank_offset = nr; + VGA_SetupHandlers(); + } + break; + + case DOSBOX_ID_REG_VGAIG_RBANKWINDOW: + { + uint32_t nr = dosbox_int_register & (~0xFFFul); + vga.dosboxig.rbank_offset = nr; + VGA_SetupHandlers(); + } + break; + + case DOSBOX_ID_REG_VGAIG_WBANKWINDOW: + { + uint32_t nr = dosbox_int_register & (~0xFFFul); + vga.dosboxig.wbank_offset = nr; + VGA_SetupHandlers(); + } + break; + + case DOSBOX_ID_REG_VGAIG_ASPECTRATIO: + { + uint16_t w = dosbox_int_register & 0xFFFFu; + uint16_t h = dosbox_int_register >> 16u; + + if (vga.dosboxig.dar_width != w || vga.dosboxig.dar_height != h) { + vga.dosboxig.dar_width = w; + vga.dosboxig.dar_height = h; + if (vga.dosboxig.svga) VGA_StartResize(0); + } + } + break; + + case DOSBOX_ID_REG_CPU_CYCLES: + ig_cpu_cycles_set |= 1u; + ig_cpu_cycles_value = dosbox_int_register; + if (ig_cpu_cycles_value == 0) ig_cpu_cycles_value = 3000; + if (ig_cpu_cycles_value > 0x7FFFFFFFul) ig_cpu_cycles_value = 0x7FFFFFFFul; + break; + + case DOSBOX_ID_REG_CPU_MAX_PERCENT: + ig_cpu_cycles_set |= 2u; + ig_cpu_cycles_max_percent = dosbox_int_register; + if (ig_cpu_cycles_max_percent == 0) ig_cpu_cycles_max_percent = 100; + if (ig_cpu_cycles_max_percent > 100) ig_cpu_cycles_max_percent = 100; + break; + + case DOSBOX_ID_REG_CPU_CYCLES_INFO: + dosbox_int_error = false; + { + unsigned int mode = dosbox_int_register & DOSBOX_ID_REG_CPU_CYCLES_INFO_MODE_MASK; + char setting[256] = {0}; + + if (mode == 0) { + if (CPU_CycleAutoAdjust) + mode = DOSBOX_ID_REG_CPU_CYCLES_INFO_MAX; + else if (CPU_AutoDetermineMode &CPU_AUTODETERMINE_CYCLES) + mode = DOSBOX_ID_REG_CPU_CYCLES_INFO_AUTO; + else + mode = DOSBOX_ID_REG_CPU_CYCLES_INFO_FIXED; + } + + switch (mode) { + case DOSBOX_ID_REG_CPU_CYCLES_INFO_MAX: + if (ig_cpu_cycles_set & 2) + sprintf(setting,"cycles=max %lu%%",(unsigned long)ig_cpu_cycles_max_percent); + break; + case DOSBOX_ID_REG_CPU_CYCLES_INFO_AUTO: + if (ig_cpu_cycles_set & 2) + sprintf(setting,"cycles=auto %lu%%",(unsigned long)ig_cpu_cycles_max_percent); + break; + case DOSBOX_ID_REG_CPU_CYCLES_INFO_FIXED: + if (ig_cpu_cycles_set & 1) + sprintf(setting,"cycles=fixed %lu",(unsigned long)ig_cpu_cycles_value); + break; + default: + dosbox_int_error = true; + break; + }; + + if (setting) { + LOG(LOG_MISC,LOG_DEBUG)("Integratoin device cycle change: %s\n",setting); + Section* sec = control->GetSection("cpu"); + if (sec) sec->HandleInputline(setting); + } + else { + LOG(LOG_MISC,LOG_DEBUG)("Integratoin device cycle change ignored (setmask 0x%x mode 0x%x)\n", + ig_cpu_cycles_set,mode); + } + } + ig_cpu_cycles_set = 0; + break; + + default: + dosbox_int_register = 0x55AA55AA; + dosbox_int_error = true; + break; + } +} + +void dosbox_integration_trigger_write_direct32(const uint32_t reg,const uint32_t val) { + dosbox_int_regsel = reg; + dosbox_int_register = val; + dosbox_integration_trigger_write(); +} + +/* PORT 0x28: Index + * 0x29: Data + * 0x2A: Status(R) or Command(W) + * 0x2B: Not yet assigned + * + * Registers are 32-bit wide. I/O to index and data rotate through the + * bytes of the register depending on I/O length, meaning that one 32-bit + * I/O read will read the entire register, while four 8-bit reads will + * read one byte out of 4. */ + +static Bitu dosbox_integration_port00_index_r(Bitu port,Bitu iolen) { + (void)port;//UNUSED + Bitu retb = 0; + Bitu ret = 0; + + while (iolen > 0) { + ret += ((dosbox_int_regsel >> (dosbox_int_regsel_shf * 8)) & 0xFFU) << (retb * 8); + if ((++dosbox_int_regsel_shf) >= 4) dosbox_int_regsel_shf = 0; + iolen--; + retb++; + } + + return ret; +} + +static void dosbox_integration_port00_index_w(Bitu port,Bitu val,Bitu iolen) { + (void)port;//UNUSED + + while (iolen > 0) { + uint32_t msk = 0xFFU << (dosbox_int_regsel_shf * 8); + dosbox_int_regsel = (dosbox_int_regsel & ~msk) + ((val & 0xFF) << (dosbox_int_regsel_shf * 8)); + if ((++dosbox_int_regsel_shf) >= 4) dosbox_int_regsel_shf = 0; + val >>= 8U; + iolen--; + } +} + +static Bitu dosbox_integration_port01_data_r(Bitu port,Bitu iolen) { + (void)port;//UNUSED + Bitu retb = 0; + Bitu ret = 0; + + while (iolen > 0) { + if (dosbox_int_register_shf == 0) dosbox_integration_trigger_read(); + ret += ((dosbox_int_register >> (dosbox_int_register_shf * 8)) & 0xFFU) << (retb * 8); + if ((++dosbox_int_register_shf) >= 4) dosbox_int_register_shf = 0; + iolen--; + retb++; + } + + return ret; +} + +static void dosbox_integration_port01_data_w(Bitu port,Bitu val,Bitu iolen) { + (void)port;//UNUSED + + while (iolen > 0) { + uint32_t msk = 0xFFU << (dosbox_int_register_shf * 8); + dosbox_int_register = (dosbox_int_register & ~msk) + ((val & 0xFF) << (dosbox_int_register_shf * 8)); + if ((++dosbox_int_register_shf) >= 4) dosbox_int_register_shf = 0; + if (dosbox_int_register_shf == 0) dosbox_integration_trigger_write(); + val >>= 8U; + iolen--; + } +} + +static Bitu dosbox_integration_port02_status_r(Bitu port,Bitu iolen) { + (void)iolen;//UNUSED + (void)port;//UNUSED + /* status */ + /* 7:6 = regsel byte index + * 5:4 = register byte index + * 3:2 = reserved + * 1 = error + * 0 = busy */ + return + ((unsigned int)dosbox_int_regsel_shf << 6u) + ((unsigned int)dosbox_int_register_shf << 4u) + + (dosbox_int_error ? 2u : 0u) + (dosbox_int_busy ? 1u : 0u); +} + +static void dosbox_integration_port02_command_w(Bitu port,Bitu val,Bitu iolen) { + (void)port; + (void)iolen; + switch (val) { + case DOSBOX_ID_CMD_RESET_LATCH: + dosbox_int_register_shf = 0; + dosbox_int_regsel_shf = 0; + break; + case DOSBOX_ID_CMD_FLUSH_WRITE: + if (dosbox_int_register_shf != 0) { + dosbox_integration_trigger_write(); + dosbox_int_register_shf = 0; + } + break; + case DOSBOX_ID_CMD_PUSH_STATE: + if (dosbox_int_push_save_state()) { + dosbox_int_register_shf = 0; + dosbox_int_regsel_shf = 0; + dosbox_int_error = false; + dosbox_int_busy = false; + dosbox_int_regsel = DOSBOX_ID_RESET_INDEX_CODE; + dosbox_int_register = DOSBOX_ID_RESET_DATA_CODE; + LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X IG state saved"); + } + else { + LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X IG unable to push state, stack overflow"); + dosbox_int_error = true; + } + break; + case DOSBOX_ID_CMD_POP_STATE: + if (dosbox_int_pop_save_state()) { + LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X IG state restored"); + } + else { + LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X IG unable to pop state, stack underflow"); + dosbox_int_error = true; + } + break; + case DOSBOX_ID_CMD_DISCARD_STATE: + if (dosbox_int_discard_save_state()) { + LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X IG state discarded"); + } + else { + LOG(LOG_MISC,LOG_DEBUG)("DOSBOX-X IG unable to discard state, stack underflow"); + dosbox_int_error = true; + } + break; + case DOSBOX_ID_CMD_DISCARD_ALL_STATE: + while (dosbox_int_discard_save_state()); + break; + case DOSBOX_ID_CMD_CLEAR_ERROR: + dosbox_int_error = false; + break; + case DOSBOX_ID_CMD_RESET_INTERFACE: + dosbox_int_busy = false; + dosbox_int_error = false; + dosbox_int_regsel = DOSBOX_ID_RESET_INDEX_CODE; + dosbox_int_register = DOSBOX_ID_RESET_DATA_CODE; + break; + default: + dosbox_int_error = true; + break; + } +} + +static IO_ReadHandler* const dosbox_integration_cb_ports_r[4] = { + dosbox_integration_port00_index_r, + dosbox_integration_port01_data_r, + dosbox_integration_port02_status_r, + NULL +}; + +static IO_ReadHandler* dosbox_integration_cb_port_r(IO_CalloutObject &co,Bitu port,Bitu iolen) { + (void)co; + (void)iolen; + return dosbox_integration_cb_ports_r[port&3]; +} + +static IO_WriteHandler* const dosbox_integration_cb_ports_w[4] = { + dosbox_integration_port00_index_w, + dosbox_integration_port01_data_w, + dosbox_integration_port02_command_w, + NULL +}; + +static IO_WriteHandler* dosbox_integration_cb_port_w(IO_CalloutObject &co,Bitu port,Bitu iolen) { + (void)co; + (void)iolen; + return dosbox_integration_cb_ports_w[port&3]; +} + +/* if mem_systems 0 then size_extended is reported as the real size else + * zero is reported. ems and xms can increase or decrease the other_memsystems + * counter using the BIOS_ZeroExtendedSize call */ +static uint16_t size_extended; +static unsigned int ISA_PNP_WPORT = 0x20B; +static unsigned int ISA_PNP_WPORT_BIOS = 0; +static IO_ReadHandleObject *ISAPNP_PNP_READ_PORT = NULL; /* 0x200-0x3FF range */ +static IO_WriteHandleObject *ISAPNP_PNP_ADDRESS_PORT = NULL; /* 0x279 */ +static IO_WriteHandleObject *ISAPNP_PNP_DATA_PORT = NULL; /* 0xA79 */ +static IO_WriteHandleObject *BOCHS_PORT_E9 = NULL; +//static unsigned char ISA_PNP_CUR_CSN = 0; +static unsigned char ISA_PNP_CUR_ADDR = 0; +static unsigned char ISA_PNP_CUR_STATE = 0; +enum { + ISA_PNP_WAIT_FOR_KEY=0, + ISA_PNP_SLEEP, + ISA_PNP_ISOLATE, + ISA_PNP_CONFIG +}; + +const unsigned char isa_pnp_init_keystring[32] = { + 0x6A,0xB5,0xDA,0xED,0xF6,0xFB,0x7D,0xBE, + 0xDF,0x6F,0x37,0x1B,0x0D,0x86,0xC3,0x61, + 0xB0,0x58,0x2C,0x16,0x8B,0x45,0xA2,0xD1, + 0xE8,0x74,0x3A,0x9D,0xCE,0xE7,0x73,0x39 +}; + +static RealPt INT15_apm_pmentry=0; +static unsigned char ISA_PNP_KEYMATCH=0; +static Bits other_memsystems=0; +void CMOS_SetRegister(Bitu regNr, uint8_t val); //For setting equipment word +bool enable_integration_device_pnp=false; +bool enable_integration_device=false; +bool ISAPNPBIOS=false; +bool ISAPNPPORT=false; +bool APMBIOS=false; +bool APMBIOS_pnp=false; +bool APMBIOS_allow_realmode=false; +bool APMBIOS_allow_prot16=false; +bool APMBIOS_allow_prot32=false; +int APMBIOS_connect_mode=0; + +enum { + APMBIOS_CONNECT_REAL=0, + APMBIOS_CONNECT_PROT16, + APMBIOS_CONNECT_PROT32 +}; + +unsigned int APMBIOS_connected_already_err() { + switch (APMBIOS_connect_mode) { + case APMBIOS_CONNECT_REAL: return 0x02; + case APMBIOS_CONNECT_PROT16: return 0x05; + case APMBIOS_CONNECT_PROT32: return 0x07; + } + + return 0x00; +} + +ISAPnPDevice::ISAPnPDevice() { + memset(ident,0,sizeof(ident)); +} + +bool ISAPnPDevice::alloc(size_t sz) { + if (sz == alloc_sz) + return true; + + if (alloc_res == resource_data) { + resource_data_len = 0; + resource_data_pos = 0; + resource_data = NULL; + } + if (alloc_res != NULL) + delete[] alloc_res; + + alloc_res = NULL; + alloc_write = 0; + alloc_sz = 0; + + if (sz == 0) + return true; + if (sz > 65536) + return false; + + alloc_res = new unsigned char[sz]; + if (alloc_res == NULL) return false; + memset(alloc_res,0xFF,sz); + alloc_sz = sz; + return true; +} + +ISAPnPDevice::~ISAPnPDevice() { + ISAPnPDevice::alloc(0); +} + +void ISAPnPDevice::begin_write_res() { + if (alloc_res == NULL) return; + + resource_data_pos = 0; + resource_data_len = 0; + resource_data = NULL; + alloc_write = 0; +} + +void ISAPnPDevice::write_byte(const unsigned char c) { + if (alloc_res == NULL || alloc_write >= alloc_sz) return; + alloc_res[alloc_write++] = c; +} + +void ISAPnPDevice::write_begin_SMALLTAG(const ISAPnPDevice::SmallTags stag,unsigned char len) { + if (len >= 8 || (unsigned int)stag >= 0x10) return; + write_byte(((unsigned char)stag << 3) + len); +} + +void ISAPnPDevice::write_begin_LARGETAG(const ISAPnPDevice::LargeTags stag,unsigned int len) { + if (len >= 4096) return; + write_byte(0x80 + ((unsigned char)stag)); + write_byte(len & 0xFF); + write_byte(len >> 8); +} + +void ISAPnPDevice::write_Device_ID(const char c1,const char c2,const char c3,const char c4,const char c5,const char c6,const char c7) { + write_byte((((unsigned char)c1 & 0x1FU) << 2) + (((unsigned char)c2 & 0x18U) >> 3)); + write_byte((((unsigned char)c2 & 0x07U) << 5) + ((unsigned char)c3 & 0x1FU)); + write_byte((((unsigned char)c4 & 0x0FU) << 4) + ((unsigned char)c5 & 0x0FU)); + write_byte((((unsigned char)c6 & 0x0FU) << 4) + ((unsigned char)c7 & 0x0FU)); +} + +void ISAPnPDevice::write_Logical_Device_ID(const char c1,const char c2,const char c3,const char c4,const char c5,const char c6,const char c7) { + write_begin_SMALLTAG(SmallTags::LogicalDeviceID,5); + write_Device_ID(c1,c2,c3,c4,c5,c6,c7); + write_byte(0x00); +} + +void ISAPnPDevice::write_Compatible_Device_ID(const char c1,const char c2,const char c3,const char c4,const char c5,const char c6,const char c7) { + write_begin_SMALLTAG(SmallTags::CompatibleDeviceID,4); + write_Device_ID(c1,c2,c3,c4,c5,c6,c7); +} + +void ISAPnPDevice::write_IRQ_Format(const uint16_t IRQ_mask,const unsigned char IRQ_signal_type) { + bool write_irq_info = (IRQ_signal_type != 0); + + write_begin_SMALLTAG(SmallTags::IRQFormat,write_irq_info?3:2); + write_byte(IRQ_mask & 0xFF); + write_byte(IRQ_mask >> 8); + if (write_irq_info) write_byte(IRQ_signal_type & 0x0F); +} + +void ISAPnPDevice::write_DMA_Format(const uint8_t DMA_mask,const unsigned char transfer_type_preference,const bool is_bus_master,const bool byte_mode,const bool word_mode,const unsigned char speed_supported) { + write_begin_SMALLTAG(SmallTags::DMAFormat,2); + write_byte(DMA_mask); + write_byte( + (transfer_type_preference & 0x03) | + (is_bus_master ? 0x04 : 0x00) | + (byte_mode ? 0x08 : 0x00) | + (word_mode ? 0x10 : 0x00) | + ((speed_supported & 3) << 5)); +} + +void ISAPnPDevice::write_IO_Port(const uint16_t min_port,const uint16_t max_port,const uint8_t count,const uint8_t alignment,const bool full16bitdecode) { + write_begin_SMALLTAG(SmallTags::IOPortDescriptor,7); + write_byte((full16bitdecode ? 0x01 : 0x00)); + write_byte(min_port & 0xFF); + write_byte(min_port >> 8); + write_byte(max_port & 0xFF); + write_byte(max_port >> 8); + write_byte(alignment); + write_byte(count); +} + +void ISAPnPDevice::write_Dependent_Function_Start(const ISAPnPDevice::DependentFunctionConfig cfg,const bool force) { + bool write_cfg_byte = force || (cfg != ISAPnPDevice::DependentFunctionConfig::AcceptableDependentConfiguration); + + write_begin_SMALLTAG(SmallTags::StartDependentFunctions,write_cfg_byte ? 1 : 0); + if (write_cfg_byte) write_byte((unsigned char)cfg); +} + +void ISAPnPDevice::write_End_Dependent_Functions() { + write_begin_SMALLTAG(SmallTags::EndDependentFunctions,0); +} + +void ISAPnPDevice::write_nstring(const char *str,const size_t l) { + (void)l; + + if (alloc_res == NULL || alloc_write >= alloc_sz) return; + + while (*str != 0 && alloc_write < alloc_sz) + alloc_res[alloc_write++] = (unsigned char)(*str++); +} + +void ISAPnPDevice::write_Identifier_String(const char *str) { + const size_t l = strlen(str); + if (l > 4096) return; + + write_begin_LARGETAG(LargeTags::IdentifierStringANSI,(unsigned int)l); + if (l != 0) write_nstring(str,l); +} + +void ISAPnPDevice::write_ISAPnP_version(unsigned char major,unsigned char minor,unsigned char vendor) { + write_begin_SMALLTAG(SmallTags::PlugAndPlayVersionNumber,2); + write_byte((major << 4) + minor); + write_byte(vendor); +} + +void ISAPnPDevice::write_END() { + unsigned char sum = 0; + size_t i; + + write_begin_SMALLTAG(SmallTags::EndTag,/*length*/1); + + for (i=0;i < alloc_write;i++) sum += alloc_res[i]; + write_byte((0x100 - sum) & 0xFF); +} + +void ISAPnPDevice::end_write_res() { + if (alloc_res == NULL) return; + + write_END(); + + if (alloc_write >= alloc_sz) LOG(LOG_MISC,LOG_WARN)("ISA PNP generation overflow"); + + resource_data_pos = 0; + resource_data_len = alloc_sz; // the device usually has a reason for allocating the fixed size it does + resource_data = alloc_res; + alloc_write = 0; +} + +void ISAPnPDevice::config(Bitu val) { + (void)val; +} + +void ISAPnPDevice::wakecsn(Bitu val) { + (void)val; + ident_bp = 0; + ident_2nd = 0; + resource_data_pos = 0; + resource_ident = 0; +} + +void ISAPnPDevice::select_logical_device(Bitu val) { + (void)val; +} + +void ISAPnPDevice::checksum_ident() { + unsigned char checksum = 0x6a,bit; + + for (int i=0;i < 8;i++) { + for (int j=0;j < 8;j++) { + bit = (ident[i] >> j) & 1; + checksum = ((((checksum ^ (checksum >> 1)) & 1) ^ bit) << 7) | (checksum >> 1); + } + } + + ident[8] = checksum; +} + +void ISAPnPDevice::on_pnp_key() { + resource_ident = 0; +} + +uint8_t ISAPnPDevice::read(Bitu addr) { + (void)addr; + return 0x00; +} + +void ISAPnPDevice::write(Bitu addr,Bitu val) { + (void)addr; + (void)val; +} + +#define MAX_ISA_PNP_DEVICES 64 +#define MAX_ISA_PNP_SYSDEVNODES 256 + +static ISAPnPDevice *ISA_PNP_selected = NULL; +static ISAPnPDevice *ISA_PNP_devs[MAX_ISA_PNP_DEVICES] = {NULL}; /* FIXME: free objects on shutdown */ +static Bitu ISA_PNP_devnext = 0; + +static const unsigned char ISAPnPIntegrationDevice_sysdev[] = { + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0x28,0x28, /* min-max range I/O port */ + 0x04,0x04), /* align=4 length=4 */ + ISAPNP_END +}; + +class ISAPnPIntegrationDevice : public ISAPnPDevice { + public: + ISAPnPIntegrationDevice() : ISAPnPDevice() { + resource_ident = 0; + resource_data = (unsigned char*)ISAPnPIntegrationDevice_sysdev; + resource_data_len = sizeof(ISAPnPIntegrationDevice_sysdev); + host_writed(ident+0,ISAPNP_ID('D','O','S',0x1,0x2,0x3,0x4)); /* DOS1234 test device */ + host_writed(ident+4,0xFFFFFFFFUL); + checksum_ident(); + } +}; + +ISAPnPIntegrationDevice *isapnpigdevice = NULL; + +class ISAPNP_SysDevNode { +public: + ISAPNP_SysDevNode(const unsigned char *ir,size_t len,bool already_alloc=false) { + if (already_alloc) { + raw = (unsigned char*)ir; + raw_len = len; + own = false; + } + else { + if (len > 65535) E_Exit("ISAPNP_SysDevNode data too long"); + raw = new unsigned char[len+1u]; + if (ir == NULL) + E_Exit("ISAPNP_SysDevNode cannot allocate buffer"); + else + memcpy(raw, ir, len); + raw_len = len; + raw[len] = 0; + own = true; + } + } + virtual ~ISAPNP_SysDevNode() { + if (own) delete[] raw; + } + + unsigned char* raw; + size_t raw_len; + bool own; +}; + +static ISAPNP_SysDevNode* ISAPNP_SysDevNodes[MAX_ISA_PNP_SYSDEVNODES] = {NULL}; +static Bitu ISAPNP_SysDevNodeLargest=0; +static Bitu ISAPNP_SysDevNodeCount=0; + +void ISA_PNP_FreeAllSysNodeDevs() { + for (Bitu i=0;i < MAX_ISA_PNP_SYSDEVNODES;i++) { + if (ISAPNP_SysDevNodes[i] != NULL) delete ISAPNP_SysDevNodes[i]; + ISAPNP_SysDevNodes[i] = NULL; + } + + ISAPNP_SysDevNodeLargest=0; + ISAPNP_SysDevNodeCount=0; +} + +void ISA_PNP_FreeAllDevs() { + Bitu i; + + for (i=0;i < MAX_ISA_PNP_DEVICES;i++) { + if (ISA_PNP_devs[i] != NULL) { + delete ISA_PNP_devs[i]; + ISA_PNP_devs[i] = NULL; + } + } + for (i=0;i < MAX_ISA_PNP_SYSDEVNODES;i++) { + if (ISAPNP_SysDevNodes[i] != NULL) delete ISAPNP_SysDevNodes[i]; + ISAPNP_SysDevNodes[i] = NULL; + } + + ISAPNP_SysDevNodeLargest=0; + ISAPNP_SysDevNodeCount=0; +} + +void ISA_PNP_devreg(ISAPnPDevice *x) { + if (ISA_PNP_devnext < MAX_ISA_PNP_DEVICES) { + if (ISA_PNP_WPORT_BIOS == 0 && ISAPNPPORT) ISA_PNP_WPORT_BIOS = ISA_PNP_WPORT; + ISA_PNP_devs[ISA_PNP_devnext++] = x; + x->CSN = ISA_PNP_devnext; + } +} + +static Bitu isapnp_read_port(Bitu port,Bitu /*iolen*/) { + (void)port;//UNUSED + Bitu ret=0xff; + + switch (ISA_PNP_CUR_ADDR) { + case 0x01: /* serial isolation */ + if (ISA_PNP_selected && ISA_PNP_selected->CSN == 0) { + if (ISA_PNP_selected->ident_bp < 72) { + if (ISA_PNP_selected->ident[ISA_PNP_selected->ident_bp>>3] & (1 << (ISA_PNP_selected->ident_bp&7))) + ret = ISA_PNP_selected->ident_2nd ? 0xAA : 0x55; + else + ret = 0xFF; + + if (++ISA_PNP_selected->ident_2nd >= 2) { + ISA_PNP_selected->ident_2nd = 0; + ISA_PNP_selected->ident_bp++; + } + } + } + else { + ret = 0xFF; + } + break; + case 0x04: /* read resource data */ + if (ISA_PNP_selected) { + if (ISA_PNP_selected->resource_ident < 9) + ret = ISA_PNP_selected->ident[ISA_PNP_selected->resource_ident++]; + else { + /* real-world hardware testing shows that devices act as if there was some fixed block of ROM, + * that repeats every 128, 256, 512, or 1024 bytes if you just blindly read from this port. */ + if (ISA_PNP_selected->resource_data_pos < ISA_PNP_selected->resource_data_len) + ret = ISA_PNP_selected->resource_data[ISA_PNP_selected->resource_data_pos++]; + + /* that means that if you read enough bytes the ROM loops back to returning the ident */ + if (ISA_PNP_selected->resource_data_pos >= ISA_PNP_selected->resource_data_len) { + ISA_PNP_selected->resource_data_pos = 0; + ISA_PNP_selected->resource_ident = 0; + } + } + } + break; + case 0x05: /* read resource status */ + if (ISA_PNP_selected) { + /* real-world hardware testing shows that devices act as if there was some fixed block of ROM, + * that repeats every 128, 256, 512, or 1024 bytes if you just blindly read from this port. + * therefore, there's always a byte to return. */ + ret = 0x01; /* TODO: simulate hardware slowness */ + } + break; + case 0x06: /* card select number */ + if (ISA_PNP_selected) ret = ISA_PNP_selected->CSN; + break; + case 0x07: /* logical device number */ + if (ISA_PNP_selected) ret = ISA_PNP_selected->logical_device; + break; + default: /* pass the rest down to the class */ + if (ISA_PNP_selected) ret = ISA_PNP_selected->read(ISA_PNP_CUR_ADDR); + break; + } + +// if (1) LOG_MSG("PnP read(%02X) = %02X\n",ISA_PNP_CUR_ADDR,ret); + return ret; +} + +void isapnp_write_port(Bitu port,Bitu val,Bitu /*iolen*/) { + Bitu i; + + if (port == 0x279) { +// if (1) LOG_MSG("PnP addr(%02X)\n",val); + if (val == isa_pnp_init_keystring[ISA_PNP_KEYMATCH]) { + if (++ISA_PNP_KEYMATCH == 32) { +// LOG_MSG("ISA PnP key -> going to sleep\n"); + ISA_PNP_CUR_STATE = ISA_PNP_SLEEP; + ISA_PNP_KEYMATCH = 0; + for (i=0;i < MAX_ISA_PNP_DEVICES;i++) { + if (ISA_PNP_devs[i] != NULL) { + ISA_PNP_devs[i]->on_pnp_key(); + } + } + } + } + else { + ISA_PNP_KEYMATCH = 0; + } + + ISA_PNP_CUR_ADDR = val; + } + else if (port == 0xA79) { +// if (1) LOG_MSG("PnP write(%02X) = %02X\n",ISA_PNP_CUR_ADDR,val); + switch (ISA_PNP_CUR_ADDR) { + case 0x00: { /* RD_DATA */ + unsigned int np = ((val & 0xFF) << 2) | 3; + if (np != ISA_PNP_WPORT) { + if (ISAPNP_PNP_READ_PORT != NULL) { + ISAPNP_PNP_READ_PORT = NULL; + delete ISAPNP_PNP_READ_PORT; + } + + if (np >= 0x200 && np <= 0x3FF) { /* allowable port I/O range according to spec */ + LOG_MSG("PNP OS changed I/O read port to 0x%03X (from 0x%03X)\n",np,ISA_PNP_WPORT); + + ISA_PNP_WPORT = np; + ISAPNP_PNP_READ_PORT = new IO_ReadHandleObject; + ISAPNP_PNP_READ_PORT->Install(ISA_PNP_WPORT,isapnp_read_port,IO_MB); + } + else { + LOG_MSG("PNP OS I/O read port disabled\n"); + + ISA_PNP_WPORT = 0; + } + + if (ISA_PNP_selected != NULL) { + ISA_PNP_selected->ident_bp = 0; + ISA_PNP_selected->ident_2nd = 0; + ISA_PNP_selected->resource_data_pos = 0; + } + } + } break; + case 0x02: /* config control */ + if (val & 4) { + /* ALL CARDS RESET CSN to 0 */ + for (i=0;i < MAX_ISA_PNP_DEVICES;i++) { + if (ISA_PNP_devs[i] != NULL) { + ISA_PNP_devs[i]->CSN = 0; + } + } + } + if (val & 2) ISA_PNP_CUR_STATE = ISA_PNP_WAIT_FOR_KEY; + if ((val & 1) && ISA_PNP_selected) ISA_PNP_selected->config(val); + for (i=0;i < MAX_ISA_PNP_DEVICES;i++) { + if (ISA_PNP_devs[i] != NULL) { + ISA_PNP_devs[i]->ident_bp = 0; + ISA_PNP_devs[i]->ident_2nd = 0; + ISA_PNP_devs[i]->resource_data_pos = 0; + } + } + break; + case 0x03: { /* wake[CSN] */ + ISA_PNP_selected = NULL; + for (i=0;ISA_PNP_selected == NULL && i < MAX_ISA_PNP_DEVICES;i++) { + if (ISA_PNP_devs[i] == NULL) + continue; + if (ISA_PNP_devs[i]->CSN == val) { + ISA_PNP_selected = ISA_PNP_devs[i]; + ISA_PNP_selected->wakecsn(val); + } + } + if (val == 0) + ISA_PNP_CUR_STATE = ISA_PNP_ISOLATE; + else + ISA_PNP_CUR_STATE = ISA_PNP_CONFIG; + } break; + case 0x06: /* card select number */ + if (ISA_PNP_selected) ISA_PNP_selected->CSN = val; + break; + case 0x07: /* logical device number */ + if (ISA_PNP_selected) ISA_PNP_selected->select_logical_device(val); + break; + default: /* pass the rest down to the class */ + if (ISA_PNP_selected) ISA_PNP_selected->write(ISA_PNP_CUR_ADDR,val); + break; + } + } +} + +// IBM PC/AT CTRL+BREAK interrupt, called by IRQ1 handler. +// Not applicable to PC-98 mode, of course. +Bitu INT1B_Break_Handler(void) { + // BIOS DATA AREA 40:71 bit 7 is set when Break key is pressed. + // This is already implemented by IRQ1 handler in src/ints/bios_keyboard.cpp. + // Ref: [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/Computers/IBM/PS%e2%88%952/IBM%20Personal%20System%e2%88%952%20and%20Personal%20Computer%20BIOS%20Interface%20Technical%20Reference%20%281991%2d09%29%20First%20Edition%2c%20part%203%2epdf] + return CBRET_NONE; +} + + +static Bitu INT15_Handler(void); + +// FIXME: This initializes both APM BIOS and ISA PNP emulation! +// Need to separate APM BIOS init from ISA PNP init from ISA PNP BIOS init! +// It might also be appropriate to move this into the BIOS init sequence. +void ISAPNP_Cfg_Reset(Section *sec) { + (void)sec;//UNUSED + const Section_prop* section = static_cast(control->GetSection("cpu")); + + LOG(LOG_MISC,LOG_DEBUG)("Initializing ISA PnP emulation"); + + enable_integration_device = section->Get_bool("integration device"); + enable_integration_device_pnp = section->Get_bool("integration device pnp"); + ISAPNPBIOS = section->Get_bool("isapnpbios"); + { + /* ISAPNPPORT = off|auto|on */ + const char *s = section->Get_string("isapnpport"); + + if (!strcmp(s,"true") || !strcmp(s,"1")) + ISAPNPPORT = true; + else if (!strcmp(s,"false") || !strcmp(s,"0")) + ISAPNPPORT = false; + else /* auto */ + ISAPNPPORT = ISAPNPBIOS; /* if the PnP BIOS is enabled, then so is the port */ + } + APMBIOS = section->Get_bool("apmbios"); + APMBIOS_pnp = section->Get_bool("apmbios pnp"); + APMBIOS_allow_realmode = section->Get_bool("apmbios allow realmode"); + APMBIOS_allow_prot16 = section->Get_bool("apmbios allow 16-bit protected mode"); + APMBIOS_allow_prot32 = section->Get_bool("apmbios allow 32-bit protected mode"); + + /* The DOSBox Integration Graphics require the integration device */ + if (IS_VGA_ARCH && svgaCard == SVGA_DOSBoxIG) { + if (!enable_integration_device) { + LOG(LOG_MISC,LOG_WARN)("Machine type is SVGA DOSBox Integrated Graphics, which requires integration device. Enabling it."); + enable_integration_device = true; + } + } + + std::string apmbiosver = section->Get_string("apmbios version"); + + /* PC-98 does not have the IBM PC/AT APM BIOS interface */ + if (IS_PC98_ARCH) { + APMBIOS = false; + APMBIOS_pnp = false; + } + + if (apmbiosver == "1.0") + APM_BIOS_minor_version = 0; + else if (apmbiosver == "1.1") + APM_BIOS_minor_version = 1; + else if (apmbiosver == "1.2") + APM_BIOS_minor_version = 2; + else//auto + APM_BIOS_minor_version = 2; + + /* PC-98 does not have APM. + * I *think* it has Plug & Play, but probably different from ISA PnP and specific to the C-Bus interface, + * which I have no information on at this time --J.C. */ + if (IS_PC98_ARCH) + return; + + LOG(LOG_MISC,LOG_DEBUG)("APM BIOS allow: real=%u pm16=%u pm32=%u version=1.%u", + APMBIOS_allow_realmode, + APMBIOS_allow_prot16, + APMBIOS_allow_prot32, + APM_BIOS_minor_version); + + std::string apmbiospwrbtn = section->Get_string("apm power button event"); + if (apmbiospwrbtn == "standby") + APM_PowerButtonSendsSuspend = false; + else + APM_PowerButtonSendsSuspend = true; + + + if (APMBIOS && (APMBIOS_allow_prot16 || APMBIOS_allow_prot32) && INT15_apm_pmentry == 0) { + Bitu cb,base; + + /* NTS: This is... kind of a terrible hack. It basically tricks Windows into executing our + * INT 15h handler as if the APM entry point. Except that instead of an actual INT 15h + * triggering the callback, a FAR CALL triggers the callback instead (CB_RETF not CB_IRET). */ + /* TODO: We should really consider moving the APM BIOS code in INT15_Handler() out into its + * own function, then having the INT15_Handler() call it as well as directing this callback + * directly to it. If you think about it, this hack also lets the "APM entry point" invoke + * other arbitrary INT 15h calls which is not valid. */ + + cb = CALLBACK_Allocate(); + INT15_apm_pmentry = CALLBACK_RealPointer(cb); + LOG_MSG("Allocated APM BIOS pm entry point at %04x:%04x\n",INT15_apm_pmentry>>16,INT15_apm_pmentry&0xFFFF); + CALLBACK_Setup(cb,INT15_Handler,CB_RETF,"APM BIOS protected mode entry point"); + + /* NTS: Actually INT15_Handler is written to act like an interrupt (IRETF) type callback. + * Prior versions hacked this into something that responds by CB_RETF, however some + * poking around reveals that CALLBACK_SCF and friends still assume an interrupt + * stack, thus, the cause of random crashes in Windows was simply that we were + * flipping flag bits in the middle of the return address on the stack. The other + * source of random crashes is that the CF/ZF manipulation in INT 15h wasn't making + * its way back to Windows, meaning that when APM BIOS emulation intended to return + * an error (by setting CF), Windows didn't get the memo (CF wasn't set on return) + * and acted as if the call succeeded, or worse, CF happened to be set on entry and + * was never cleared by APM BIOS emulation. + * + * So what we need is: + * + * PUSHF ; put flags in right place + * PUSH BP ; dummy FAR pointer + * PUSH BP ; again + * + * POP BP ; drop it + * POP BP ; drop it + * POPF + * RETF + * + * Then CALLBACK_SCF can work normally this way. + * + * NTS: We *still* need to separate APM BIOS calls from the general INT 15H emulation though... */ + base = Real2Phys(INT15_apm_pmentry); + LOG_MSG("Writing code to %05x\n",(unsigned int)base); + + phys_writeb(base+0x00,0x9C); /* pushf */ + phys_writeb(base+0x01,0x55); /* push (e)bp */ + phys_writeb(base+0x02,0x55); /* push (e)bp */ + + phys_writeb(base+0x03,(uint8_t)0xFE); //GRP 4 + phys_writeb(base+0x04,(uint8_t)0x38); //Extra Callback instruction + phys_writew(base+0x05,(uint16_t)cb); //The immediate word + + phys_writeb(base+0x07,0x5D); /* pop (e)bp */ + phys_writeb(base+0x08,0x5D); /* pop (e)bp */ + phys_writeb(base+0x09,0x9D); /* popf */ + phys_writeb(base+0x0A,0xCB); /* retf */ + + /* APM suspended mode execution loop */ + cb = CALLBACK_Allocate(); + APM_SuspendedLoopRptr = CALLBACK_RealPointer(cb); + CALLBACK_Setup(cb,APM_SuspendedLoopFunc,CB_RETF,"APM BIOS suspend/standby loop"); + + base = Real2Phys(APM_SuspendedLoopRptr); + LOG_MSG("Writing code to %05x\n",(unsigned int)base); + phys_writeb(base+0x04,0xF4); /* hlt */ + phys_writew(base+0x05,0xF9EB); /* jmp $-5 (EB xx) */ + phys_writeb(base+0x07,0xC3); /* ret */ + } +} + +void ISAPNP_Cfg_Init() { + AddVMEventFunction(VM_EVENT_RESET,AddVMEventFunctionFuncPair(ISAPNP_Cfg_Reset)); +} + +/* the PnP callback registered two entry points. One for real, one for protected mode. */ +static Bitu PNPentry_real,PNPentry_prot; + +static bool ISAPNP_Verify_BiosSelector(Bitu seg) { + if (!cpu.pmode || (reg_flags & FLAG_VM)) { + return (seg == 0xF000); + } else if (seg == 0) + return 0; + else { +#if 1 + /* FIXME: Always return true. But figure out how to ask DOSBox the linear->phys + mapping to determine whether the segment's base address maps to 0xF0000. + In the meantime disabling this check makes PnP BIOS emulation work with + Windows 95 OSR2 which appears to give us a segment mapped to a virtual + address rather than linearly mapped to 0xF0000 as Windows 95 original + did. */ + return true; +#else + Descriptor desc; + cpu.gdt.GetDescriptor(seg,desc); + + /* TODO: Check desc.Type() to make sure it's a writeable data segment */ + return (desc.GetBase() == 0xF0000); +#endif + } +} + +static bool ISAPNP_CPU_ProtMode() { + if (!cpu.pmode || (reg_flags & FLAG_VM)) + return 0; + + return 1; +} + +static Bitu ISAPNP_xlate_address(Bitu far_ptr) { + if (!cpu.pmode || (reg_flags & FLAG_VM)) + return Real2Phys(far_ptr); + else { + Descriptor desc; + cpu.gdt.GetDescriptor(far_ptr >> 16,desc); + + /* TODO: Check desc.Type() to make sure it's a writeable data segment */ + return (desc.GetBase() + (far_ptr & 0xFFFF)); + } +} + +static const unsigned char ISAPNP_sysdev_Keyboard[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0x3,0x0,0x3), /* PNP0303 IBM Enhanced 101/102 key with PS/2 */ + ISAPNP_TYPE(0x09,0x00,0x00), /* type: input, keyboard */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0x60,0x60, /* min-max range I/O port */ + 0x01,0x01), /* align=1 length=1 */ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0x64,0x64, /* min-max range I/O port */ + 0x01,0x01), /* align=1 length=1 */ + ISAPNP_IRQ_SINGLE( + 1, /* IRQ 1 */ + 0x09), /* HTE=1 LTL=1 */ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +static const unsigned char ISAPNP_sysdev_Mouse[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0xF,0x0,0xE), /* PNP0F0E Microsoft compatible PS/2 */ + ISAPNP_TYPE(0x09,0x02,0x00), /* type: input, keyboard */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_IRQ_SINGLE( + 12, /* IRQ 12 */ + 0x09), /* HTE=1 LTL=1 */ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +static const unsigned char ISAPNP_sysdev_DMA_Controller[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0x2,0x0,0x0), /* PNP0200 AT DMA controller */ + ISAPNP_TYPE(0x08,0x01,0x00), /* type: input, keyboard */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0x00,0x00, /* min-max range I/O port (DMA channels 0-3) */ + 0x10,0x10), /* align=16 length=16 */ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0x81,0x81, /* min-max range I/O port (DMA page registers) */ + 0x01,0x0F), /* align=1 length=15 */ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0xC0,0xC0, /* min-max range I/O port (AT DMA channels 4-7) */ + 0x20,0x20), /* align=32 length=32 */ + ISAPNP_DMA_SINGLE( + 4, /* DMA 4 */ + 0x01), /* 8/16-bit transfers, compatible speed */ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +static const unsigned char ISAPNP_sysdev_PIC[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0x0,0x0,0x0), /* PNP0000 Interrupt controller */ + ISAPNP_TYPE(0x08,0x00,0x01), /* type: ISA interrupt controller */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0x20,0x20, /* min-max range I/O port */ + 0x01,0x02), /* align=1 length=2 */ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0xA0,0xA0, /* min-max range I/O port */ + 0x01,0x02), /* align=1 length=2 */ + ISAPNP_IRQ_SINGLE( + 2, /* IRQ 2 */ + 0x09), /* HTE=1 LTL=1 */ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +static const unsigned char ISAPNP_sysdev_Timer[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0x1,0x0,0x0), /* PNP0100 Timer */ + ISAPNP_TYPE(0x08,0x02,0x01), /* type: ISA timer */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0x40,0x40, /* min-max range I/O port */ + 0x04,0x04), /* align=4 length=4 */ + ISAPNP_IRQ_SINGLE( + 0, /* IRQ 0 */ + 0x09), /* HTE=1 LTL=1 */ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +static const unsigned char ISAPNP_sysdev_RTC[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0xB,0x0,0x0), /* PNP0B00 Real-time clock */ + ISAPNP_TYPE(0x08,0x03,0x01), /* type: ISA real-time clock */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0x70,0x70, /* min-max range I/O port */ + 0x01,0x02), /* align=1 length=2 */ + ISAPNP_IRQ_SINGLE( + 8, /* IRQ 8 */ + 0x09), /* HTE=1 LTL=1 */ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +static const unsigned char ISAPNP_sysdev_PC_Speaker[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0x8,0x0,0x0), /* PNP0800 PC speaker */ + ISAPNP_TYPE(0x04,0x01,0x00), /* type: PC speaker */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0x61,0x61, /* min-max range I/O port */ + 0x01,0x01), /* align=1 length=1 */ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +static const unsigned char ISAPNP_sysdev_Numeric_Coprocessor[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0xC,0x0,0x4), /* PNP0C04 Numeric Coprocessor */ + ISAPNP_TYPE(0x0B,0x80,0x00), /* type: FPU */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0xF0,0xF0, /* min-max range I/O port */ + 0x10,0x10), /* align=16 length=16 */ + ISAPNP_IRQ_SINGLE( + 13, /* IRQ 13 */ + 0x09), /* HTE=1 LTL=1 */ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +static const unsigned char ISAPNP_sysdev_System_Board[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0xC,0x0,0x1), /* PNP0C01 System board */ + ISAPNP_TYPE(0x08,0x80,0x00), /* type: System peripheral, Other */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0x24,0x24, /* min-max range I/O port */ + 0x04,0x04), /* align=4 length=4 */ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +/* NTS: If some of my late 1990's laptops are any indication, this resource list can be used + * as a hint that the motherboard supports Intel EISA/PCI controller DMA registers that + * allow ISA DMA to extend to 32-bit addresses instead of being limited to 24-bit */ +static const unsigned char ISAPNP_sysdev_General_ISAPNP[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0xC,0x0,0x2), /* PNP0C02 General ID for reserving resources */ + ISAPNP_TYPE(0x08,0x80,0x00), /* type: System peripheral, Other */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_IO_RANGE( + 0x01, /* decodes 16-bit ISA addr */ + 0x208,0x208, /* min-max range I/O port */ + 0x04,0x04), /* align=4 length=4 */ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +/* PnP system entry to tell Windows 95 the obvious: That there's an ISA bus present */ +/* NTS: Examination of some old laptops of mine shows that these devices do not list any resources, + * or at least, an old Toshiba of mine lists the PCI registers 0xCF8-0xCFF as motherboard resources + * and defines no resources for the PCI Bus PnP device. */ +static const unsigned char ISAPNP_sysdev_ISA_BUS[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0xA,0x0,0x0), /* PNP0A00 ISA Bus */ + ISAPNP_TYPE(0x06,0x04,0x00), /* type: System device, peripheral bus */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +/* PnP system entry to tell Windows 95 the obvious: That there's a PCI bus present */ +static const unsigned char ISAPNP_sysdev_PCI_BUS[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0xA,0x0,0x3), /* PNP0A03 PCI Bus */ + ISAPNP_TYPE(0x06,0x04,0x00), /* type: System device, peripheral bus */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +/* to help convince Windows 95 that the APM BIOS is present */ +static const unsigned char ISAPNP_sysdev_APM_BIOS[] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0xC,0x0,0x5), /* PNP0C05 APM BIOS */ + ISAPNP_TYPE(0x08,0x80,0x00), /* type: FIXME is this right?? I can't find any examples or documentation */ + 0x0001 | 0x0002), /* can't disable, can't configure */ + /*----------allocated--------*/ + ISAPNP_END, + /*----------possible--------*/ + ISAPNP_END, + /*----------compatible--------*/ + ISAPNP_END +}; + +bool ISAPNP_RegisterSysDev(const unsigned char *raw,Bitu len,bool already) { + if (ISAPNP_SysDevNodeCount >= MAX_ISA_PNP_SYSDEVNODES) + return false; + + ISAPNP_SysDevNodes[ISAPNP_SysDevNodeCount] = new ISAPNP_SysDevNode(raw,len,already); + if (ISAPNP_SysDevNodes[ISAPNP_SysDevNodeCount] == NULL) + return false; + + ISAPNP_SysDevNodeCount++; + if (ISAPNP_SysDevNodeLargest < (len+3)) + ISAPNP_SysDevNodeLargest = len+3; + + return true; +} + +/* ISA PnP function calls have their parameters stored on the stack "C" __cdecl style. Parameters + * are either int, long, or FAR pointers. Like __cdecl an assembly language implementation pushes + * the function arguments on the stack BACKWARDS */ +static Bitu ISAPNP_Handler(bool protmode /* called from protected mode interface == true */) { + Bitu arg; + Bitu func,BiosSelector; + + /* I like how the ISA PnP spec says that the 16-bit entry points (real and protected) are given 16-bit data segments + * which implies that all segments involved might as well be 16-bit. + * + * Right? + * + * Well, guess what Windows 95 gives us when calling this entry point: + * + * Segment SS = DS = 0x30 base=0 limit=0xFFFFFFFF + * SS:SP = 0x30:0xC138BADF or something like that from within BIOS.VXD + * + * Yeah... for a 16-bit code segment call. Right. Typical Microsoft. >:( + * + * This might also explain why my early experiments with Bochs always had the perpetual + * APM BIOS that never worked but was always detected. + * + * ------------------------------------------------------------------------ + * Windows 95 OSR2: + * + * Windows 95 OSR2 however uses a 16-bit stack (where the stack segment is based somewhere + * around 0xC1xxxxxx), all we have to do to correctly access it is work through the page tables. + * This is within spec, but now Microsoft sends us a data segment that is based at virtual address + * 0xC2xxxxxx, which is why I had to disable the "verify selector" routine */ + arg = SegPhys(ss) + (reg_esp&cpu.stack.mask) + (2*2); /* entry point (real and protected) is 16-bit, expected to RETF (skip CS:IP) */ + + if (protmode != ISAPNP_CPU_ProtMode()) { + //LOG_MSG("ISA PnP %s entry point called from %s. On real BIOSes this would CRASH\n",protmode ? "Protected mode" : "Real mode", + // ISAPNP_CPU_ProtMode() ? "Protected mode" : "Real mode"); + reg_ax = 0x84;/* BAD_PARAMETER */ + return 0; + } + + func = mem_readw(arg); +// LOG_MSG("PnP prot=%u DS=%04x (base=0x%08lx) SS:ESP=%04x:%04x (base=0x%08lx phys=0x%08lx) function=0x%04x\n", +// (unsigned int)protmode,(unsigned int)SegValue(ds),(unsigned long)SegPhys(ds), +// (unsigned int)SegValue(ss),(unsigned int)reg_esp,(unsigned long)SegPhys(ss), +// (unsigned long)arg,(unsigned int)func); + + /* every function takes the form + * + * int __cdecl FAR (*entrypoint)(int Function...); + * + * so the first argument on the stack is an int that we read to determine what the caller is asking + * + * Don't forget in the real-mode world: + * sizeof(int) == 16 bits + * sizeof(long) == 32 bits + */ + switch (func) { + case 0: { /* Get Number of System Nodes */ + /* int __cdecl FAR (*entrypoint)(int Function,unsigned char FAR *NumNodes,unsigned int FAR *NodeSize,unsigned int BiosSelector); + * ^ +0 ^ +2 ^ +6 ^ +10 = 12 */ + Bitu NumNodes_ptr = mem_readd(arg+2); + Bitu NodeSize_ptr = mem_readd(arg+6); + BiosSelector = mem_readw(arg+10); + + if (!ISAPNP_Verify_BiosSelector(BiosSelector)) + goto badBiosSelector; + + if (NumNodes_ptr != 0) mem_writeb(ISAPNP_xlate_address(NumNodes_ptr),ISAPNP_SysDevNodeCount); + if (NodeSize_ptr != 0) mem_writew(ISAPNP_xlate_address(NodeSize_ptr),ISAPNP_SysDevNodeLargest); + + reg_ax = 0x00;/* SUCCESS */ + } break; + case 1: { /* Get System Device Node */ + /* int __cdecl FAR (*entrypoint)(int Function,unsigned char FAR *Node,struct DEV_NODE FAR *devNodeBuffer,unsigned int Control,unsigned int BiosSelector); + * ^ +0 ^ +2 ^ +6 ^ +10 ^ +12 = 14 */ + Bitu Node_ptr = mem_readd(arg+2); + Bitu devNodeBuffer_ptr = mem_readd(arg+6); + Bitu Control = mem_readw(arg+10); + BiosSelector = mem_readw(arg+12); + unsigned char Node; + Bitu i=0; + + if (!ISAPNP_Verify_BiosSelector(BiosSelector)) + goto badBiosSelector; + + /* control bits 0-1 must be '01' or '10' but not '00' or '11' */ + if (Control == 0 || (Control&3) == 3) { + LOG_MSG("ISAPNP Get System Device Node: Invalid Control value 0x%04x\n",(int)Control); + reg_ax = 0x84;/* BAD_PARAMETER */ + break; + } + + devNodeBuffer_ptr = ISAPNP_xlate_address(devNodeBuffer_ptr); + Node_ptr = ISAPNP_xlate_address(Node_ptr); + Node = mem_readb(Node_ptr); + if (Node >= ISAPNP_SysDevNodeCount) { + LOG_MSG("ISAPNP Get System Device Node: Invalid Node 0x%02x (max 0x%04x)\n",(int)Node,(int)ISAPNP_SysDevNodeCount); + reg_ax = 0x84;/* BAD_PARAMETER */ + break; + } + + const ISAPNP_SysDevNode *nd = ISAPNP_SysDevNodes[Node]; + + mem_writew(devNodeBuffer_ptr+0,(uint16_t)(nd->raw_len+3)); /* Length */ + mem_writeb(devNodeBuffer_ptr+2,Node); /* on most PnP BIOS implementations I've seen "handle" is set to the same value as Node */ + for (i=0;i < (Bitu)nd->raw_len;i++) + mem_writeb(devNodeBuffer_ptr+i+3,nd->raw[i]); + +// LOG_MSG("ISAPNP OS asked for Node 0x%02x\n",Node); + + if (++Node >= ISAPNP_SysDevNodeCount) Node = 0xFF; /* no more nodes */ + mem_writeb(Node_ptr,Node); + + reg_ax = 0x00;/* SUCCESS */ + } break; + case 4: { /* Send Message */ + /* int __cdecl FAR (*entrypoint)(int Function,unsigned int Message,unsigned int BiosSelector); + * ^ +0 ^ +2 ^ +4 = 6 */ + Bitu Message = mem_readw(arg+2); + BiosSelector = mem_readw(arg+4); + + if (!ISAPNP_Verify_BiosSelector(BiosSelector)) + goto badBiosSelector; + + switch (Message) { + case 0x41: /* POWER_OFF */ + LOG_MSG("Plug & Play OS requested power off.\n"); + reg_ax = 0; + throw 1; /* NTS: Based on the Reboot handler code, causes DOSBox-X to cleanly shutdown and exit */ + break; + case 0x42: /* PNP_OS_ACTIVE */ + LOG_MSG("Plug & Play OS reports itself active\n"); + reg_ax = 0; + break; + case 0x43: /* PNP_OS_INACTIVE */ + LOG_MSG("Plug & Play OS reports itself inactive\n"); + reg_ax = 0; + break; + default: + LOG_MSG("Unknown ISA PnP message 0x%04x\n",(int)Message); + reg_ax = 0x82;/* FUNCTION_NOT_SUPPORTED */ + break; + } + } break; + case 0x40: { /* Get PnP ISA configuration */ + /* int __cdecl FAR (*entrypoint)(int Function,unsigned char far *struct,unsigned int BiosSelector); + * ^ +0 ^ +2 ^ +6 = 8 */ + Bitu struct_ptr = mem_readd(arg+2); + BiosSelector = mem_readw(arg+6); + + if (!ISAPNP_Verify_BiosSelector(BiosSelector)) + goto badBiosSelector; + + /* struct isapnp_pnp_isa_cfg { + uint8_t revision; + uint8_t total_csn; + uint16_t isa_pnp_port; + uint16_t reserved; + }; */ + + if (struct_ptr != 0) { + Bitu ph = ISAPNP_xlate_address(struct_ptr); + mem_writeb(ph+0,0x01); /* ->revision = 0x01 */ + mem_writeb(ph+1,ISA_PNP_devnext); /* ->total_csn */ + mem_writew(ph+2,ISA_PNP_WPORT_BIOS); /* ->isa_pnp_port */ + mem_writew(ph+4,0); /* ->reserved */ + } + + reg_ax = 0x00;/* SUCCESS */ + } break; + default: + //LOG_MSG("Unsupported ISA PnP function 0x%04x\n",func); + reg_ax = 0x82;/* FUNCTION_NOT_SUPPORTED */ + break; + } + + return 0; +badBiosSelector: + /* return an error. remind the user (possible developer) how lucky he is, a real + * BIOS implementation would CRASH when misused like this */ + LOG_MSG("ISA PnP function 0x%04x called with incorrect BiosSelector parameter 0x%04x\n",(int)func,(int)BiosSelector); + LOG_MSG(" > STACK %04X %04X %04X %04X %04X %04X %04X %04X\n", + mem_readw(arg), mem_readw(arg+2), mem_readw(arg+4), mem_readw(arg+6), + mem_readw(arg+8), mem_readw(arg+10), mem_readw(arg+12), mem_readw(arg+14)); + + reg_ax = 0x84;/* BAD_PARAMETER */ + return 0; +} + +static Bitu ISAPNP_Handler_PM(void) { + return ISAPNP_Handler(true); +} + +static Bitu ISAPNP_Handler_RM(void) { + return ISAPNP_Handler(false); +} + +static Bitu INT70_Handler(void) { + /* Acknowledge irq with cmos */ + IO_Write(0x70,0xc); + IO_Read(0x71); + if (mem_readb(BIOS_WAIT_FLAG_ACTIVE)) { + uint32_t count=mem_readd(BIOS_WAIT_FLAG_COUNT); + if (count>997) { + mem_writed(BIOS_WAIT_FLAG_COUNT,count-997); + } else { + mem_writed(BIOS_WAIT_FLAG_COUNT,0); + PhysPt where=Real2Phys(mem_readd(BIOS_WAIT_FLAG_POINTER)); + mem_writeb(where,mem_readb(where)|0x80); + mem_writeb(BIOS_WAIT_FLAG_ACTIVE,0); + mem_writed(BIOS_WAIT_FLAG_POINTER,RealMake(0,BIOS_WAIT_FLAG_TEMP)); + IO_Write(0x70,0xb); + IO_Write(0x71,IO_Read(0x71)&~0x40); + } + } + /* Signal EOI to both pics */ + IO_Write(0xa0,0x20); + IO_Write(0x20,0x20); + return 0; +} + +CALLBACK_HandlerObject* tandy_DAC_callback[2]; +static struct { + uint16_t port; + uint8_t irq; + uint8_t dma; +} tandy_sb; +static struct { + uint16_t port; + uint8_t irq; + uint8_t dma; +} tandy_dac; + +static bool Tandy_InitializeSB() { + /* see if soundblaster module available and at what port/IRQ/DMA */ + Bitu sbport, sbirq, sbdma; + if (SB_Get_Address(sbport, sbirq, sbdma)) { + tandy_sb.port=(uint16_t)(sbport&0xffff); + tandy_sb.irq =(uint8_t)(sbirq&0xff); + tandy_sb.dma =(uint8_t)(sbdma&0xff); + return true; + } else { + /* no soundblaster accessible, disable Tandy DAC */ + tandy_sb.port=0; + return false; + } +} + +static bool Tandy_InitializeTS() { + /* see if Tandy DAC module available and at what port/IRQ/DMA */ + Bitu tsport, tsirq, tsdma; + if (TS_Get_Address(tsport, tsirq, tsdma)) { + tandy_dac.port=(uint16_t)(tsport&0xffff); + tandy_dac.irq =(uint8_t)(tsirq&0xff); + tandy_dac.dma =(uint8_t)(tsdma&0xff); + return true; + } else { + /* no Tandy DAC accessible */ + tandy_dac.port=0; + return false; + } +} + +/* check if Tandy DAC is still playing */ +static bool Tandy_TransferInProgress(void) { + if (real_readw(0x40,0xd0)) return true; /* not yet done */ + if (real_readb(0x40,0xd4)==0xff) return false; /* still in init-state */ + + uint8_t tandy_dma = 1; + if (tandy_sb.port) tandy_dma = tandy_sb.dma; + else if (tandy_dac.port) tandy_dma = tandy_dac.dma; + + IO_Write(0x0c,0x00); + uint16_t datalen = (IO_ReadB(tandy_dma * 2 + 1)) + (IO_ReadB(tandy_dma * 2 + 1) << 8); + if (datalen==0xffff) return false; /* no DMA transfer */ + else if ((datalen<0x10) && (real_readb(0x40,0xd4)==0x0f) && (real_readw(0x40,0xd2)==0x1c)) { + /* stop already requested */ + return false; + } + return true; +} + +static void Tandy_SetupTransfer(PhysPt bufpt,bool isplayback) { + Bitu length=real_readw(0x40,0xd0); + if (length==0) return; /* nothing to do... */ + + if ((tandy_sb.port==0) && (tandy_dac.port==0)) return; + + uint8_t tandy_irq = 7; + if (tandy_sb.port) tandy_irq = tandy_sb.irq; + else if (tandy_dac.port) tandy_irq = tandy_dac.irq; + uint8_t tandy_irq_vector = tandy_irq; + if (tandy_irq_vector<8) tandy_irq_vector += 8; + else tandy_irq_vector += (0x70-8); + + /* revector IRQ-handler if necessary */ + RealPt current_irq=RealGetVec(tandy_irq_vector); + if (current_irq!=tandy_DAC_callback[0]->Get_RealPointer()) { + real_writed(0x40,0xd6,current_irq); + RealSetVec(tandy_irq_vector,tandy_DAC_callback[0]->Get_RealPointer()); + } + + uint8_t tandy_dma = 1; + if (tandy_sb.port) tandy_dma = tandy_sb.dma; + else if (tandy_dac.port) tandy_dma = tandy_dac.dma; + + if (tandy_sb.port) { + IO_Write(tandy_sb.port+0xcu,0xd0); /* stop DMA transfer */ + IO_Write(0x21,IO_Read(0x21)&(~(1u<>16u)&0xff); + IO_Write(tandy_dma*2u,(uint8_t)(bufpt&0xff)); + IO_Write(tandy_dma*2u,(uint8_t)((bufpt>>8u)&0xff)); + switch (tandy_dma) { + case 0: IO_Write(0x87,bufpage); break; + case 1: IO_Write(0x83,bufpage); break; + case 2: IO_Write(0x81,bufpage); break; + case 3: IO_Write(0x82,bufpage); break; + } + real_writeb(0x40,0xd4,bufpage); + + /* calculate transfer size (respects segment boundaries) */ + uint32_t tlength=length; + if (tlength+(bufpt&0xffff)>0x10000) tlength=0x10000-(bufpt&0xffff); + real_writew(0x40,0xd0,(uint16_t)(length-tlength)); /* remaining buffer length */ + tlength--; + + /* set transfer size */ + IO_Write(tandy_dma*2u+1u,(uint8_t)(tlength&0xffu)); + IO_Write(tandy_dma*2u+1u,(uint8_t)((tlength>>8u)&0xffu)); + + uint16_t delay=(uint16_t)(real_readw(0x40,0xd2)&0xfff); + uint8_t amplitude=(uint8_t)(((unsigned int)real_readw(0x40,0xd2)>>13u)&0x7u); + if (tandy_sb.port) { + IO_Write(0x0a,tandy_dma); /* enable DMA channel */ + /* set frequency */ + IO_Write(tandy_sb.port+0xcu,0x40); + IO_Write(tandy_sb.port+0xcu,256u - delay*100u/358u); + /* set playback type to 8bit */ + if (isplayback) IO_Write(tandy_sb.port+0xcu,0x14u); + else IO_Write(tandy_sb.port+0xcu,0x24u); + /* set transfer size */ + IO_Write(tandy_sb.port+0xcu,(uint8_t)(tlength&0xffu)); + IO_Write(tandy_sb.port+0xcu,(uint8_t)((tlength>>8)&0xffu)); + } else { + if (isplayback) IO_Write(tandy_dac.port,(IO_Read(tandy_dac.port)&0x7cu) | 0x03u); + else IO_Write(tandy_dac.port,(IO_Read(tandy_dac.port)&0x7cu) | 0x02u); + IO_Write(tandy_dac.port+2u,(uint8_t)(delay&0xffu)); + IO_Write(tandy_dac.port+3u,(uint8_t)((((unsigned int)delay>>8u)&0xfu) | ((unsigned int)amplitude<<5u))); + if (isplayback) IO_Write(tandy_dac.port,(IO_Read(tandy_dac.port)&0x7cu) | 0x1fu); + else IO_Write(tandy_dac.port,(IO_Read(tandy_dac.port)&0x7c) | 0x1e); + IO_Write(0x0a,tandy_dma); /* enable DMA channel */ + } + + if (!isplayback) { + /* mark transfer as recording operation */ + real_writew(0x40,0xd2,(uint16_t)(delay|0x1000)); + } +} + +static Bitu IRQ_TandyDAC(void) { + if (tandy_dac.port) { + IO_Read(tandy_dac.port); + } + if (real_readw(0x40,0xd0)) { /* play/record next buffer */ + /* acknowledge IRQ */ + IO_Write(0x20,0x20); + if (tandy_sb.port) { + IO_Read(tandy_sb.port+0xeu); + } + + /* buffer starts at the next page */ + uint8_t npage=real_readb(0x40,0xd4)+1u; + real_writeb(0x40,0xd4,npage); + + Bitu rb=real_readb(0x40,0xd3); + if (rb&0x10) { + /* start recording */ + real_writeb(0x40,0xd3,rb&0xefu); + Tandy_SetupTransfer((unsigned int)npage<<16u,false); + } else { + /* start playback */ + Tandy_SetupTransfer((unsigned int)npage<<16u,true); + } + } else { /* playing/recording is finished */ + uint8_t tandy_irq = 7u; + if (tandy_sb.port) tandy_irq = tandy_sb.irq; + else if (tandy_dac.port) tandy_irq = tandy_dac.irq; + uint8_t tandy_irq_vector = tandy_irq; + if (tandy_irq_vector<8u) tandy_irq_vector += 8u; + else tandy_irq_vector += (0x70u-8u); + + RealSetVec(tandy_irq_vector,real_readd(0x40,0xd6)); + + /* turn off speaker and acknowledge soundblaster IRQ */ + if (tandy_sb.port) { + IO_Write(tandy_sb.port+0xcu,0xd3u); + IO_Read(tandy_sb.port+0xeu); + } + + /* issue BIOS tandy sound device busy callout */ + SegSet16(cs, RealSeg(tandy_DAC_callback[1]->Get_RealPointer())); + reg_ip = RealOff(tandy_DAC_callback[1]->Get_RealPointer()); + } + return CBRET_NONE; +} + +static void TandyDAC_Handler(uint8_t tfunction) { + if ((!tandy_sb.port) && (!tandy_dac.port)) return; + switch (tfunction) { + case 0x81: /* Tandy sound system check */ + if (tandy_dac.port) { + reg_ax=tandy_dac.port; + } else { + reg_ax=0xc4; + } + CALLBACK_SCF(Tandy_TransferInProgress()); + break; + case 0x82: /* Tandy sound system start recording */ + case 0x83: /* Tandy sound system start playback */ + if (Tandy_TransferInProgress()) { + /* cannot play yet as the last transfer isn't finished yet */ + reg_ah=0x00; + CALLBACK_SCF(true); + break; + } + /* store buffer length */ + real_writew(0x40,0xd0,reg_cx); + /* store delay and volume */ + real_writew(0x40,0xd2,(reg_dx&0xfff)|((reg_al&7)<<13)); + Tandy_SetupTransfer(PhysMake(SegValue(es),reg_bx),reg_ah==0x83); + reg_ah=0x00; + CALLBACK_SCF(false); + break; + case 0x84: /* Tandy sound system stop playing */ + reg_ah=0x00; + + /* setup for a small buffer with silence */ + real_writew(0x40,0xd0,0x0a); + real_writew(0x40,0xd2,0x1c); + Tandy_SetupTransfer(PhysMake(0xf000,0xa084),true); + CALLBACK_SCF(false); + break; + case 0x85: /* Tandy sound system reset */ + if (tandy_dac.port) { + IO_Write(tandy_dac.port,(uint8_t)(IO_Read(tandy_dac.port)&0xe0)); + } + reg_ah=0x00; + CALLBACK_SCF(false); + break; + } +} + +extern bool date_host_forced; +static uint8_t ReadCmosByte (Bitu index) { + IO_Write(0x70, index); + return IO_Read(0x71); +} + +static void WriteCmosByte (Bitu index, Bitu val) { + IO_Write(0x70, index); + IO_Write(0x71, val); +} + +static bool RtcUpdateDone () { + while ((ReadCmosByte(0x0a) & 0x80) != 0) CALLBACK_Idle(); + return true; // cannot fail in DOSbox +} + +static void InitRtc () { + // Change the RTC to return BCD and set the 24h bit. Clear the SET bit. + // That's it. Do not change any other bits. + // + // Some games ("The Tales of Peter Rabbit") use the RTC clock periodic + // interrupt for timing and music at rates other than 1024Hz and we must + // not change that rate nor clear any interrupt enable bits. Do not clear + // pending interrupts, either! The periodic interrupt does not affect reading + // the RTC clock. The point of this function and INT 15h code calling this + // function is to read the clock. + WriteCmosByte(0x0b, (ReadCmosByte(0x0b) & 0x7du/*clear=SET[7]|DM[2]*/) | 0x03u/*set=24/12[1]|DSE[0]*/); +} + +static Bitu INT1A_Handler(void) { + CALLBACK_SIF(true); + switch (reg_ah) { + case 0x00: /* Get System time */ + { + uint32_t ticks=mem_readd(BIOS_TIMER); + reg_al=mem_readb(BIOS_24_HOURS_FLAG); + mem_writeb(BIOS_24_HOURS_FLAG,0); // reset the "flag" + reg_cx=(uint16_t)(ticks >> 16u); + reg_dx=(uint16_t)(ticks & 0xffff); + break; + } + case 0x01: /* Set System time */ + mem_writed(BIOS_TIMER,((unsigned int)reg_cx<<16u)|reg_dx); + break; + case 0x02: /* GET REAL-TIME CLOCK TIME (AT,XT286,PS) */ + InitRtc(); // make sure BCD and no am/pm + if (RtcUpdateDone()) { // make sure it's safe to read + reg_ch = ReadCmosByte(0x04); // hours + reg_cl = ReadCmosByte(0x02); // minutes + reg_dh = ReadCmosByte(0x00); // seconds + reg_dl = ReadCmosByte(0x0b) & 0x01; // daylight saving time + /* 2023/10/06 - Let interrupts and CPU cycles catch up and the RTC clock a chance to tick. This is needed for + * "Pizza Tycoon" which appears to start by running in a loop reading time from the BIOS and writing + * time to INT 21h in a loop until the second value changes. */ + for (unsigned int c=0;c < 4;c++) CALLBACK_Idle(); + } + CALLBACK_SCF(false); + break; + case 0x03: // set RTC time + InitRtc(); // make sure BCD and no am/pm + if (RtcUpdateDone()) { // make sure it's safe to read + WriteCmosByte(0x0b, ReadCmosByte(0x0b) | 0x80u); // prohibit updates + WriteCmosByte(0x04, reg_ch); // hours + WriteCmosByte(0x02, reg_cl); // minutes + WriteCmosByte(0x00, reg_dh); // seconds + WriteCmosByte(0x0b, (ReadCmosByte(0x0b) & 0x7eu) | (reg_dh & 0x01u)); // dst + implicitly allow updates + /* 2023/10/06 - Let interrupts and CPU cycles catch up and the RTC clock a chance to tick. This is needed for + * "Pizza Tycoon" which appears to start by running in a loop reading time from the BIOS and writing + * time to INT 21h in a loop until the second value changes. */ + for (unsigned int c=0;c < 4;c++) CALLBACK_Idle(); + } + break; + case 0x04: /* GET REAL-TIME ClOCK DATE (AT,XT286,PS) */ + InitRtc(); // make sure BCD and no am/pm + if (RtcUpdateDone()) { // make sure it's safe to read + reg_ch = ReadCmosByte(0x32); // century + reg_cl = ReadCmosByte(0x09); // year + reg_dh = ReadCmosByte(0x08); // month + reg_dl = ReadCmosByte(0x07); // day + /* 2023/10/06 - Let interrupts and CPU cycles catch up and the RTC clock a chance to tick. This is needed for + * "Pizza Tycoon" which appears to start by running in a loop reading time from the BIOS and writing + * time to INT 21h in a loop until the second value changes. */ + for (unsigned int c=0;c < 4;c++) CALLBACK_Idle(); + } + CALLBACK_SCF(false); + break; + case 0x05: // set RTC date + InitRtc(); // make sure BCD and no am/pm + if (RtcUpdateDone()) { // make sure it's safe to read + WriteCmosByte(0x0b, ReadCmosByte(0x0b) | 0x80); // prohibit updates + WriteCmosByte(0x32, reg_ch); // century + WriteCmosByte(0x09, reg_cl); // year + WriteCmosByte(0x08, reg_dh); // month + WriteCmosByte(0x07, reg_dl); // day + WriteCmosByte(0x0b, (ReadCmosByte(0x0b) & 0x7f)); // allow updates + /* 2023/10/06 - Let interrupts and CPU cycles catch up and the RTC clock a chance to tick. This is needed for + * "Pizza Tycoon" which appears to start by running in a loop reading time from the BIOS and writing + * time to INT 21h in a loop until the second value changes. */ + for (unsigned int c=0;c < 4;c++) CALLBACK_Idle(); + } + break; + case 0x80: /* Pcjr Setup Sound Multiplexer */ + LOG(LOG_BIOS,LOG_ERROR)("INT1A:80:Setup tandy sound multiplexer to %d",reg_al); + break; + case 0x81: /* Tandy sound system check */ + case 0x82: /* Tandy sound system start recording */ + case 0x83: /* Tandy sound system start playback */ + case 0x84: /* Tandy sound system stop playing */ + case 0x85: /* Tandy sound system reset */ + TandyDAC_Handler(reg_ah); + break; + case 0xb1: /* PCI Bios Calls */ + if (pcibus_enable) { + LOG(LOG_BIOS,LOG_WARN)("INT1A:PCI bios call %2X",reg_al); + switch (reg_al) { + case 0x01: // installation check + if (PCI_IsInitialized()) { + reg_ah=0x00; + reg_al=0x01; // cfg space mechanism 1 supported + reg_bx=0x0210; // ver 2.10 + reg_cx=0x0000; // only one PCI bus + reg_edx=0x20494350; + reg_edi=PCI_GetPModeInterface(); + CALLBACK_SCF(false); + } else { + CALLBACK_SCF(true); + } + break; + case 0x02: { // find device + Bitu devnr=0u; + Bitu count=0x100u; + uint32_t devicetag=((unsigned int)reg_cx<<16u)|reg_dx; + Bits found=-1; + for (Bitu i=0; i<=count; i++) { + IO_WriteD(0xcf8,0x80000000u|(i<<8u)); // query unique device/subdevice entries + if (IO_ReadD(0xcfc)==devicetag) { + if (devnr==reg_si) { + found=(Bits)i; + break; + } else { + // device found, but not the SIth device + devnr++; + } + } + } + if (found>=0) { + reg_ah=0x00; + reg_bh=0x00; // bus 0 + reg_bl=(uint8_t)(found&0xff); + CALLBACK_SCF(false); + } else { + reg_ah=0x86; // device not found + CALLBACK_SCF(true); + } + } + break; + case 0x03: { // find device by class code + Bitu devnr=0; + Bitu count=0x100u; + uint32_t classtag=reg_ecx&0xffffffu; + Bits found=-1; + for (Bitu i=0; i<=count; i++) { + IO_WriteD(0xcf8,0x80000000u|(i<<8u)); // query unique device/subdevice entries + if (IO_ReadD(0xcfc)!=0xffffffffu) { + IO_WriteD(0xcf8,0x80000000u|(i<<8u)|0x08u); + if ((IO_ReadD(0xcfc)>>8u)==classtag) { + if (devnr==reg_si) { + found=(Bits)i; + break; + } else { + // device found, but not the SIth device + devnr++; + } + } + } + } + if (found>=0) { + reg_ah=0x00; + reg_bh=0x00; // bus 0 + reg_bl=(uint8_t)found & 0xffu; + CALLBACK_SCF(false); + } else { + reg_ah=0x86; // device not found + CALLBACK_SCF(true); + } + } + break; + case 0x08: // read configuration byte + IO_WriteD(0xcf8,0x80000000u|((unsigned int)reg_bx<<8u)|(reg_di&0xfcu)); + reg_cl=IO_ReadB(0xcfc+(reg_di&3u)); + CALLBACK_SCF(false); + reg_ah=0x00; + break; + case 0x09: // read configuration word + IO_WriteD(0xcf8,0x80000000u|((unsigned int)reg_bx<<8u)|(reg_di&0xfcu)); + reg_cx=IO_ReadW(0xcfc+(reg_di&2u)); + CALLBACK_SCF(false); + reg_ah=0x00; + break; + case 0x0a: // read configuration dword + IO_WriteD(0xcf8,0x80000000u|((unsigned int)reg_bx<<8u)|(reg_di&0xfcu)); + reg_ecx=IO_ReadD(0xcfc+(reg_di&3u)); + CALLBACK_SCF(false); + reg_ah=0x00; + break; + case 0x0b: // write configuration byte + IO_WriteD(0xcf8,0x80000000u|((unsigned int)reg_bx<<8u)|(reg_di&0xfcu)); + IO_WriteB(0xcfc+(reg_di&3u),reg_cl); + CALLBACK_SCF(false); + reg_ah=0x00; + break; + case 0x0c: // write configuration word + IO_WriteD(0xcf8,0x80000000u|((unsigned int)reg_bx<<8u)|(reg_di&0xfcu)); + IO_WriteW(0xcfc+(reg_di&2u),reg_cx); + CALLBACK_SCF(false); + reg_ah=0x00; + break; + case 0x0d: // write configuration dword + IO_WriteD(0xcf8,0x80000000u|((unsigned int)reg_bx<<8u)|(reg_di&0xfcu)); + IO_WriteD(0xcfc+((unsigned int)reg_di&3u),reg_ecx); + CALLBACK_SCF(false); + reg_ah=0x00; + break; + default: + LOG(LOG_BIOS,LOG_ERROR)("INT1A:PCI BIOS: unknown function %x (%x %x %x)", + reg_ax,reg_bx,reg_cx,reg_dx); + CALLBACK_SCF(true); + break; + } + } + else { + CALLBACK_SCF(true); + } + break; + default: + LOG(LOG_BIOS,LOG_ERROR)("INT1A:Undefined call %2X",reg_ah); + } + return CBRET_NONE; +} + +bool INT16_get_key(uint16_t &code); +bool INT16_peek_key(uint16_t &code); + +extern uint8_t GDC_display_plane; +extern uint8_t GDC_display_plane_pending; +extern bool GDC_vsync_interrupt; + +unsigned char prev_pc98_mode42 = 0; + +unsigned char pc98_function_row_mode = 0; + +const char *pc98_func_key_default[10] = { + " C1 ", + " CU ", + " CA ", + " S1 ", + " SU ", + + "VOID ", + "NWL ", + "INS ", + "REP ", + " ^Z " +}; + +const char pc98_func_key_escapes_default[10][3] = { + {0x1B,0x53,0}, // F1 + {0x1B,0x54,0}, // F2 + {0x1B,0x55,0}, // F3 + {0x1B,0x56,0}, // F4 + {0x1B,0x57,0}, // F5 + {0x1B,0x45,0}, // F6 + {0x1B,0x4A,0}, // F7 + {0x1B,0x50,0}, // F8 + {0x1B,0x51,0}, // F9 + {0x1B,0x5A,0} // F10 +}; + +const char pc98_editor_key_escapes_default[11][3] = { + {0}, // ROLL UP 0x36 + {0}, // ROLL DOWN 0x37 + {0x1B,0x50,0}, // INS 0x38 + {0x1B,0x44,0}, // DEL 0x39 + {0x0B,0}, // UP ARROW 0x3A + {0x08,0}, // LEFT ARROW 0x3B + {0x0C,0}, // RIGHT ARROW 0x3C + {0x0A,0}, // DOWN ARROW 0x3D + {0}, // HOME/CLR 0x3E + {0}, // HELP 0x3F + {0} // KEYPAD - 0x40 +}; + +// shortcuts offered by SHIFT F1-F10. You can bring this onscreen using CTRL+F7. This row shows '*' in col 2. +// The text displayed onscreen is obviously just the first 6 chars of the shortcut text. +const char *pc98_shcut_key_defaults[10] = { + "dir a:\x0D", + "dir b:\x0D", + "copy ", + "del ", + "ren ", + + "chkdsk a:\x0D", + "chkdsk b:\x0D", + "type ", + "date\x0D", + "time\x0D" +}; + +#pragma pack(push,1) +struct pc98_func_key_shortcut_def { + unsigned char length; /* +0x00 length of text */ + unsigned char shortcut[0x0F]; /* +0x01 Shortcut text to insert into CON device */ + + std::string getShortcutText(void) const { + std::string ret; + unsigned int i; + + /* Whether a shortcut or escape (0xFE or not) the first 6 chars are displayed always */ + /* TODO: Strings for display are expected to display as Shift-JIS, convert to UTF-8 for display on host */ + for (i=0;i < 0x0F;i++) { + if (shortcut[i] == 0u) + break; + else if (shortcut[i] == 0x1B) { + ret += ""; + } + else if (shortcut[i] > 0x7Fu || shortcut[i] < 32u) /* 0xFE is invisible on real hardware */ + ret += ' '; + else + ret += (char)shortcut[i]; + } + + return ret; + } + + std::string getDisplayText(void) const { + unsigned int i; + char tmp[8]; + + /* Whether a shortcut or escape (0xFE or not) the first 6 chars are displayed always */ + /* TODO: Strings for display are expected to display as Shift-JIS, convert to UTF-8 for display on host */ + for (i=0;i < 6;i++) { + if (shortcut[i] == 0u) + break; + else if (shortcut[i] > 0x7Fu || shortcut[i] < 32u) /* 0xFE is invisible on real hardware */ + tmp[i] = ' '; + else + tmp[i] = (char)shortcut[i]; + } + tmp[i] = 0; + + return tmp; + } + + std::string debugToString(void) const { + std::string ret; + char tmp[512]; + + if (length == 0) + return "(none)"; + + if (shortcut[0] == 0xFE) { + sprintf(tmp,"disp=\"%s\" ",getDisplayText().c_str()); + ret += tmp; + + ret += "dispraw={ "; + for (unsigned int i=0;i < 6;i++) { + sprintf(tmp,"%02x ",shortcut[i]); + ret += tmp; + } + ret += "} "; + + ret += "esc={ "; + for (unsigned int i=6;i < length;i++) { + sprintf(tmp,"%02x ",shortcut[i]); + ret += tmp; + } + ret += "}"; + } + else { + sprintf(tmp,"text=\"%s\" ",getShortcutText().c_str()); + ret += tmp; + + ret += "esc={ "; + for (unsigned int i=0;i < length;i++) { + sprintf(tmp,"%02x ",shortcut[i]); + ret += tmp; + } + ret += "}"; + } + + return ret; + } + + // set shortcut. + // usually a direct string to insert. + void set_shortcut(const char *str) { + unsigned int i=0; + char c; + + while (i < 0x0F && (c = *str++) != 0) shortcut[i++] = (unsigned char)c; + length = i; + + while (i < 0x0F) shortcut[i++] = 0; + } + + // set text and escape code. text does NOT include the leading 0xFE char. + void set_text_and_escape(const char *text,const char *escape) { + unsigned int i=1; + char c; + + // this is based on observed MS-DOS behavior on PC-98. + // the length byte covers both the display text and escape code (sum of the two). + // the first byte of the shortcut is 0xFE which apparently means the next 5 chars + // are text to display. The 0xFE is copied as-is to the display when rendered. + // 0xFE in the CG ROM is a blank space. + shortcut[0] = 0xFE; + while (i < 6 && (c = *text++) != 0) shortcut[i++] = (unsigned char)c; + while (i < 6) shortcut[i++] = ' '; + + while (i < 0x0F && (c = *escape++) != 0) shortcut[i++] = (unsigned char)c; + length = i; + while (i < 0x0F) shortcut[i++] = 0; + } +}; /* =0x10 */ +#pragma pack(pop) + +struct pc98_func_key_shortcut_def pc98_func_key[10]; /* F1-F10 */ +struct pc98_func_key_shortcut_def pc98_vfunc_key[5]; /* VF1-VF5 */ +struct pc98_func_key_shortcut_def pc98_func_key_shortcut[10]; /* Shift+F1 - Shift-F10 */ +struct pc98_func_key_shortcut_def pc98_vfunc_key_shortcut[5]; /* Shift+VF1 - Shift-VF5 */ +struct pc98_func_key_shortcut_def pc98_func_key_ctrl[10]; /* Control+F1 - Control-F10 */ +struct pc98_func_key_shortcut_def pc98_vfunc_key_ctrl[5]; /* Control+VF1 - Control-VF5 */ +struct pc98_func_key_shortcut_def pc98_editor_key_escapes[11]; /* Editor keys */ + +// FIXME: This is STUPID. Cleanup is needed in order to properly use std::min without causing grief. +#ifdef _MSC_VER +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +#else +# define MIN(a,b) std::min(a,b) +# define MAX(a,b) std::max(a,b) +#endif + +void PC98_GetFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i,const struct pc98_func_key_shortcut_def *keylist) { + if (i >= 1 && i <= 10) { + const pc98_func_key_shortcut_def &def = keylist[i-1u]; + unsigned int j=0,o=0; + + /* if the shortcut starts with 0xFE then the next 5 chars are intended for display only + * and the shortcut starts after that. Else the entire string is stuffed into the CON + * device. */ + if (def.shortcut[0] == 0xFE) + j = 6; + + while (j < MIN(0x0Fu,(unsigned int)def.length)) + buf[o++] = def.shortcut[j++]; + + len = (size_t)o; + buf[o] = 0; + } + else { + len = 0; + buf[0] = 0; + } +} + +void PC98_GetEditorKeyEscape(size_t &len,unsigned char buf[16],const unsigned int scan) { + if (scan >= 0x36 && scan <= 0x40) { + const pc98_func_key_shortcut_def &def = pc98_editor_key_escapes[scan-0x36]; + unsigned int j=0,o=0; + + while (j < MIN(0x05u,(unsigned int)def.length)) + buf[o++] = def.shortcut[j++]; + + len = (size_t)o; + buf[o] = 0; + } + else { + len = 0; + buf[0] = 0; + } +} + +void PC98_GetVFKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i,const struct pc98_func_key_shortcut_def *keylist) { + if (i >= 1 && i <= 5) { + const pc98_func_key_shortcut_def &def = keylist[i-1]; + unsigned int j=0,o=0; + + /* if the shortcut starts with 0xFE then the next 5 chars are intended for display only + * and the shortcut starts after that. Else the entire string is stuffed into the CON + * device. */ + if (def.shortcut[0] == 0xFE) + j = 6; + + while (j < MIN(0x0Fu,(unsigned int)def.length)) + buf[o++] = def.shortcut[j++]; + + len = (size_t)o; + buf[o] = 0; + } + else { + len = 0; + buf[0] = 0; + } +} + +void PC98_GetFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i) { + PC98_GetFuncKeyEscape(len,buf,i,pc98_func_key); +} + +void PC98_GetShiftFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i) { + PC98_GetFuncKeyEscape(len,buf,i,pc98_func_key_shortcut); +} + +void PC98_GetCtrlFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i) { + PC98_GetFuncKeyEscape(len,buf,i,pc98_func_key_ctrl); +} + +void PC98_GetVFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i) { + PC98_GetVFKeyEscape(len,buf,i,pc98_vfunc_key); +} + +void PC98_GetShiftVFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i) { + PC98_GetVFKeyEscape(len,buf,i,pc98_vfunc_key_shortcut); +} + +void PC98_GetCtrlVFuncKeyEscape(size_t &len,unsigned char buf[16],const unsigned int i) { + PC98_GetVFKeyEscape(len,buf,i,pc98_vfunc_key_ctrl); +} + +void PC98_InitDefFuncRow(void) { + for (unsigned int i=0;i < 10;i++) { + pc98_func_key_shortcut_def &def = pc98_func_key[i]; + + def.set_text_and_escape(pc98_func_key_default[i],pc98_func_key_escapes_default[i]); + } + for (unsigned int i=0;i < 10;i++) { + pc98_func_key_shortcut_def &def = pc98_func_key_shortcut[i]; + + def.set_shortcut(pc98_shcut_key_defaults[i]); + } + for (unsigned int i=0;i < 11;i++) { + pc98_func_key_shortcut_def &def = pc98_editor_key_escapes[i]; + + def.set_shortcut(pc98_editor_key_escapes_default[i]); + } + for (unsigned int i=0;i < 10;i++) { + pc98_func_key_shortcut_def &def = pc98_func_key_ctrl[i]; + + def.set_shortcut(""); + } + /* MS-DOS by default does not assign the VFn keys anything */ + for (unsigned int i=0;i < 5;i++) { + pc98_func_key_shortcut_def &def = pc98_vfunc_key[i]; + + def.set_shortcut(""); + } + for (unsigned int i=0;i < 5;i++) { + pc98_func_key_shortcut_def &def = pc98_vfunc_key_shortcut[i]; + + def.set_shortcut(""); + } + for (unsigned int i=0;i < 5;i++) { + pc98_func_key_shortcut_def &def = pc98_vfunc_key_ctrl[i]; + + def.set_shortcut(""); + } +} + +void draw_pc98_function_row_elem(unsigned int o, unsigned int co, const struct pc98_func_key_shortcut_def& key) { + const unsigned char *str = key.shortcut; + unsigned int j = 0,i = 0; + + // NTS: Some shortcut strings start with 0xFE, which is rendered as an invisible space anyway. + + // NTS: Apparently the strings are Shift-JIS and expected to render to the function key row + // the same way the console normally does it. + ShiftJISDecoder sjis; + + while (j < 6u && str[i] != 0) { + if (sjis.take(str[i++])) { + if (sjis.doublewide) { + /* JIS conversion to WORD value appropriate for text RAM */ + if (sjis.b2 != 0) sjis.b1 -= 0x20; + + uint16_t w = (sjis.b2 << 8) + sjis.b1; + mem_writew(0xA0000+((o+co+j)*2u),w); + mem_writeb(0xA2000+((o+co+j)*2u),0xE5); // white reverse visible + j++; + mem_writew(0xA0000+((o+co+j)*2u),w); + mem_writeb(0xA2000+((o+co+j)*2u),0xE5); // white reverse visible + j++; + } + else { + mem_writew(0xA0000+((o+co+j)*2u),str[j]); + mem_writeb(0xA2000+((o+co+j)*2u),0xE5); // white reverse visible + j++; + } + } + } + + while (j < 6u) { + mem_writew(0xA0000+((o+co+j)*2u),(unsigned char)(' ')); + mem_writeb(0xA2000+((o+co+j)*2u),0xE5); // white reverse visible + j++; + } +} + +void draw_pc98_function_row(unsigned int o, const struct pc98_func_key_shortcut_def* keylist) { + mem_writew(0xA0000+((o+1)*2),real_readb(0x60,0x8B)); + mem_writeb(0xA2000+((o+1)*2),0xE1); + for (unsigned int i=0u;i < 5u;i++) + draw_pc98_function_row_elem(o,4u + (i * 7u),keylist[i]); + for (unsigned int i=5u;i < 10u;i++) + draw_pc98_function_row_elem(o,42u + ((i - 5u) * 7u),keylist[i]); +} + +unsigned int pc98_DOS_console_rows(void) { + uint8_t b = real_readb(0x60,0x113); + + return (b & 0x01) ? 25 : 20; +} + +void update_pc98_function_row(unsigned char setting,bool force_redraw) { + if (!force_redraw && pc98_function_row_mode == setting) return; + pc98_function_row_mode = setting; + + unsigned int total_rows = pc98_DOS_console_rows(); + unsigned char c = real_readb(0x60,0x11C); + unsigned char r = real_readb(0x60,0x110); + unsigned int o = 80 * (total_rows - 1); + + if (pc98_function_row_mode != 0) { + if (r > (total_rows - 2)) { + r = (total_rows - 2); + void INTDC_CL10h_AH04h(void); + INTDC_CL10h_AH04h(); + } + } + + /* update mode 2 indicator */ + real_writeb(0x60,0x8C,(pc98_function_row_mode == 2) ? '*' : ' '); + + real_writeb(0x60,0x112,total_rows - 1 - ((pc98_function_row_mode != 0) ? 1 : 0)); + + if (pc98_function_row_mode == 2) { + /* draw the function row. + * based on real hardware: + * + * The function key is 72 chars wide. 4 blank chars on each side of the screen. + * It is divided into two halves, 36 chars each. + * Within each half, aligned to its side, is 5 x 7 regions. + * 6 of the 7 are inverted. centered in the white block is the function key. */ + for (unsigned int i=0;i < 40;) { + mem_writew(0xA0000+((o+i)*2),0x0000); + mem_writeb(0xA2000+((o+i)*2),0xE1); + + mem_writew(0xA0000+((o+(79-i))*2),0x0000); + mem_writeb(0xA2000+((o+(79-i))*2),0xE1); + + if (i >= 3 && i < 38) + i += 7; + else + i++; + } + + mem_writew(0xA0000+((o+2)*2),real_readb(0x60,0x8C)); + mem_writeb(0xA2000+((o+2)*2),0xE1); + + draw_pc98_function_row(o,pc98_func_key_shortcut); + } + else if (pc98_function_row_mode == 1) { + /* draw the function row. + * based on real hardware: + * + * The function key is 72 chars wide. 4 blank chars on each side of the screen. + * It is divided into two halves, 36 chars each. + * Within each half, aligned to its side, is 5 x 7 regions. + * 6 of the 7 are inverted. centered in the white block is the function key. */ + for (unsigned int i=0;i < 40;) { + mem_writew(0xA0000+((o+i)*2),0x0000); + mem_writeb(0xA2000+((o+i)*2),0xE1); + + mem_writew(0xA0000+((o+(79-i))*2),0x0000); + mem_writeb(0xA2000+((o+(79-i))*2),0xE1); + + if (i >= 3 && i < 38) + i += 7; + else + i++; + } + + draw_pc98_function_row(o,pc98_func_key); + } + else { + /* erase the function row */ + for (unsigned int i=0;i < 80;i++) { + mem_writew(0xA0000+((o+i)*2),0x0000); + mem_writeb(0xA2000+((o+i)*2),0xE1); + } + } + + real_writeb(0x60,0x11C,c); + real_writeb(0x60,0x110,r); + + real_writeb(0x60,0x111,(pc98_function_row_mode != 0) ? 0x01 : 0x00);/* function key row display status */ + + void vga_pc98_direct_cursor_pos(uint16_t address); + vga_pc98_direct_cursor_pos((r*80)+c); +} + +void pc98_function_row_user_toggle(void) { + if (pc98_function_row_mode >= 2) + update_pc98_function_row(0,true); + else + update_pc98_function_row(pc98_function_row_mode+1,true); +} + +void pc98_set_char_mode(bool mode) { + real_writeb(0x60,0x8A,mode); + real_writeb(0x60,0x8B,(mode == true) ? ' ' : 'g'); + update_pc98_function_row(pc98_function_row_mode,true); +} + +void pc98_toggle_char_mode(void) { + pc98_set_char_mode(!real_readb(0x60,0x8A)); +} + +void pc98_set_digpal_entry(unsigned char ent,unsigned char grb); +void PC98_show_cursor(bool show); + +extern bool gdc_5mhz_mode; +extern bool enable_pc98_egc; +extern bool enable_pc98_grcg; +extern bool enable_pc98_16color; +extern bool enable_pc98_256color; +extern bool enable_pc98_188usermod; +extern bool pc98_31khz_mode; +extern bool pc98_attr4_graphic; + +extern unsigned char pc98_text_first_row_scanline_start; /* port 70h */ +extern unsigned char pc98_text_first_row_scanline_end; /* port 72h */ +extern unsigned char pc98_text_row_scanline_blank_at; /* port 74h */ +extern unsigned char pc98_text_row_scroll_lines; /* port 76h */ +extern unsigned char pc98_text_row_scroll_count_start; /* port 78h */ +extern unsigned char pc98_text_row_scroll_num_lines; /* port 7Ah */ + +void pc98_update_text_layer_lineheight_from_bda(void) { +// unsigned char c = mem_readb(0x53C); + unsigned char lineheight = mem_readb(0x53B) + 1; + + pc98_gdc[GDC_MASTER].force_fifo_complete(); + pc98_gdc[GDC_MASTER].row_height = lineheight; + + if (lineheight > 20) { // usually 24 + pc98_text_first_row_scanline_start = 0x1C; + pc98_text_first_row_scanline_end = lineheight - 5; + pc98_text_row_scanline_blank_at = 16; + } + else if (lineheight > 16) { // usually 20 + pc98_text_first_row_scanline_start = 0x1E; + pc98_text_first_row_scanline_end = lineheight - 3; + pc98_text_row_scanline_blank_at = 16; + } + else { + pc98_text_first_row_scanline_start = 0; + pc98_text_first_row_scanline_end = lineheight - 1; + pc98_text_row_scanline_blank_at = lineheight; + } + + pc98_text_row_scroll_lines = 0; + pc98_text_row_scroll_count_start = 0; + pc98_text_row_scroll_num_lines = 0; + + vga.crtc.cursor_start = 0; + vga.draw.cursor.sline = 0; + + vga.crtc.cursor_end = lineheight - 1; + vga.draw.cursor.eline = lineheight - 1; +} + +void pc98_update_text_lineheight_from_bda(void) { + unsigned char b597 = mem_readb(0x597); + unsigned char c = mem_readb(0x53C); + unsigned char lineheight; + + if ((b597 & 0x3) == 0x3) {//WARNING: This could be wrong + if (c & 0x10)/*30-line mode (30x16 = 640x480)*/ + lineheight = 16; + else if (c & 0x01)/*20-line mode (20x24 = 640x480)*/ + lineheight = 24; + else/*25-line mode (25x19 = 640x480)*/ + lineheight = 19; + } + else { + if (c & 0x10)/*30-line mode (30x13 = 640x400)*/ + lineheight = 13;//?? + else if (c & 0x01)/*20-line mode (20x20 = 640x400)*/ + lineheight = 20; + else/*25-line mode (25x16 = 640x400)*/ + lineheight = 16; + } + + mem_writeb(0x53B,lineheight - 1); +} + +static const uint8_t pc98_katakana6x8_font[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x50,0x20,0x00, + 0x70,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x1c,0x00, + 0x00,0x00,0x00,0x00,0x40,0x20,0x10,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, + 0x7c,0x04,0x7c,0x04,0x04,0x08,0x30,0x00,0x00,0x00,0x7c,0x14,0x18,0x10,0x20,0x00, + 0x00,0x00,0x04,0x08,0x18,0x28,0x08,0x00,0x00,0x00,0x10,0x7c,0x44,0x04,0x18,0x00, + 0x00,0x00,0x00,0x38,0x10,0x10,0x7c,0x00,0x00,0x00,0x08,0x7c,0x18,0x28,0x48,0x00, + 0x00,0x00,0x20,0x7c,0x24,0x28,0x20,0x00,0x00,0x00,0x00,0x38,0x08,0x08,0x7c,0x00, + 0x00,0x00,0x3c,0x04,0x3c,0x04,0x3c,0x00,0x00,0x00,0x00,0x54,0x54,0x04,0x18,0x00, + 0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x7c,0x04,0x14,0x18,0x10,0x20,0x40,0x00, + 0x04,0x08,0x10,0x30,0x50,0x10,0x10,0x00,0x10,0x7c,0x44,0x44,0x04,0x08,0x10,0x00, + 0x00,0x7c,0x10,0x10,0x10,0x10,0x7c,0x00,0x08,0x7c,0x18,0x28,0x48,0x08,0x08,0x00, + 0x20,0x7c,0x24,0x24,0x24,0x44,0x08,0x00,0x10,0x7c,0x10,0x7c,0x10,0x10,0x10,0x00, + 0x3c,0x24,0x44,0x04,0x04,0x08,0x30,0x00,0x20,0x3c,0x28,0x48,0x08,0x08,0x30,0x00, + 0x00,0x7c,0x04,0x04,0x04,0x04,0x7c,0x00,0x28,0x28,0x7c,0x28,0x08,0x10,0x20,0x00, + 0x60,0x00,0x64,0x04,0x04,0x08,0x70,0x00,0x7c,0x04,0x04,0x08,0x10,0x28,0x44,0x00, + 0x20,0x7c,0x24,0x28,0x20,0x20,0x18,0x00,0x44,0x44,0x24,0x04,0x04,0x08,0x30,0x00, + 0x3c,0x24,0x34,0x4c,0x04,0x08,0x30,0x00,0x08,0x70,0x10,0x7c,0x10,0x10,0x20,0x00, + 0x54,0x54,0x54,0x04,0x08,0x08,0x30,0x00,0x38,0x00,0x7c,0x10,0x10,0x10,0x20,0x00, + 0x20,0x20,0x20,0x38,0x24,0x20,0x20,0x00,0x10,0x10,0x7c,0x10,0x10,0x20,0x40,0x00, + 0x00,0x38,0x00,0x00,0x00,0x00,0x7c,0x00,0x7c,0x04,0x04,0x28,0x10,0x28,0x40,0x00, + 0x10,0x7c,0x08,0x10,0x38,0x54,0x10,0x00,0x04,0x04,0x04,0x04,0x08,0x10,0x20,0x00, + 0x10,0x08,0x04,0x44,0x44,0x44,0x44,0x00,0x40,0x4c,0x70,0x40,0x40,0x40,0x3c,0x00, + 0x7c,0x04,0x04,0x04,0x04,0x08,0x30,0x00,0x00,0x20,0x50,0x08,0x04,0x04,0x00,0x00, + 0x10,0x7c,0x10,0x10,0x54,0x54,0x10,0x00,0x00,0x7c,0x04,0x04,0x28,0x10,0x08,0x00, + 0x00,0x38,0x00,0x38,0x00,0x38,0x04,0x00,0x10,0x10,0x20,0x40,0x44,0x7c,0x04,0x00, + 0x04,0x04,0x28,0x10,0x28,0x40,0x00,0x00,0x7c,0x10,0x7c,0x10,0x10,0x10,0x0c,0x00, + 0x20,0x7c,0x24,0x24,0x28,0x20,0x20,0x00,0x00,0x38,0x08,0x08,0x08,0x08,0x7c,0x00, + 0x7c,0x04,0x04,0x7c,0x04,0x04,0x7c,0x00,0x38,0x00,0x7c,0x04,0x04,0x08,0x30,0x00, + 0x24,0x24,0x24,0x04,0x04,0x08,0x10,0x00,0x10,0x50,0x50,0x50,0x54,0x58,0x10,0x00, + 0x20,0x20,0x20,0x24,0x24,0x28,0x30,0x00,0x7c,0x44,0x44,0x44,0x44,0x44,0x7c,0x00, + 0x7c,0x44,0x44,0x04,0x04,0x08,0x10,0x00,0x60,0x00,0x04,0x04,0x08,0x10,0x60,0x00, + 0x20,0x10,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x20,0x50,0x20,0x00,0x00,0x00,0x00 +}; + +unsigned char byte_reverse(unsigned char c); + +static void PC98_INT18_DrawShape(void) +{ + PhysPt ucw; + uint8_t type, dir; + uint16_t x1, y1; + uint16_t ead, dad; + uint16_t dc, d, d2, dm; + + ucw = SegPhys(ds) + reg_bx; + type = mem_readb(ucw + 0x28); + dir = mem_readb(ucw + 0x03); + x1 = mem_readw(ucw + 0x08); + y1 = mem_readw(ucw + 0x0a); + if((reg_ch & 0xc0) == 0x40) { + y1 += 200; + } + ead = (y1 * 40) + (x1 >> 4); + dad = x1 % 16; + // line pattern + pc98_gdc[GDC_SLAVE].set_textw(((uint16_t)byte_reverse(mem_readb(ucw + 0x20)) << 8) | byte_reverse(mem_readb(ucw + 0x21))); + if(type == 0x04) { + // arc + dc = mem_readw(ucw + 0x0c); + d = mem_readw(ucw + 0x1c) - 1; + d2 = d >> 1; + dm = mem_readw(ucw + 0x1a); + if((reg_ch & 0x30) == 0x30) { + uint8_t plane = mem_readb(ucw + 0x00); + uint32_t offset = 0x4000; + for(uint8_t bit = 1 ; bit <= 4 ; bit <<= 1) { + pc98_gdc[GDC_SLAVE].set_mode((plane & bit) ? 0x03 : 0x02); + pc98_gdc[GDC_SLAVE].set_vectw(0x20, dir, dc, d, d2, 0x3fff, dm); + pc98_gdc[GDC_SLAVE].set_csrw(offset + ead, dad); + pc98_gdc[GDC_SLAVE].exec(0x6c); + offset += 0x4000; + } + } else { + pc98_gdc[GDC_SLAVE].set_mode(mem_readb(ucw + 0x02)); + pc98_gdc[GDC_SLAVE].set_vectw(0x20, dir, dc, d, d2, 0x3fff, dm); + pc98_gdc[GDC_SLAVE].set_csrw(0x4000 + ((reg_ch & 0x30) << 10) + ead, dad); + pc98_gdc[GDC_SLAVE].exec(0x6c); + } + } else { + uint16_t x2, y2, temp; + x2 = mem_readw(ucw + 0x16); + y2 = mem_readw(ucw + 0x18); + if(type == 0x01) { + // line + if((reg_ch & 0x30) == 0x30) { + uint8_t plane = mem_readb(ucw + 0x00); + uint32_t offset = 0x4000; + for(uint8_t bit = 1 ; bit <= 4 ; bit <<= 1) { + pc98_gdc[GDC_SLAVE].set_mode((plane & bit) ? 0x03 : 0x02); + pc98_gdc[GDC_SLAVE].set_vectl(x1, y1, x2, y2); + pc98_gdc[GDC_SLAVE].set_csrw(offset + ead, dad); + pc98_gdc[GDC_SLAVE].exec(0x6c); + offset += 0x4000; + } + } else { + pc98_gdc[GDC_SLAVE].set_mode(mem_readb(ucw + 0x02)); + pc98_gdc[GDC_SLAVE].set_vectl(x1, y1, x2, y2); + pc98_gdc[GDC_SLAVE].set_csrw(0x4000 + ((reg_ch & 0x30) << 10) + ead, dad); + pc98_gdc[GDC_SLAVE].exec(0x6c); + } + } else if(type == 0x02) { + // box + uint16_t dx, dy; + if(x1 > x2) { + temp = x2; x2 = x1; x1 = temp; + } + if(y1 > y2) { + temp = y2; y2 = y1; y1 = temp; + } + dx = x2 - x1; + dy = y2 - y1; + switch(dir & 3) { + case 0: + d = dy; + d2 = dx; + break; + case 1: + d2 = dx + dy; + d2 >>= 1; + d = dx - dy; + d = (d >> 1) & 0x3fff; + break; + case 2: + d = dx; + d2 = dy; + break; + case 3: + d2 = dx + dy; + d2 >>= 1; + d = dy - dx; + d = (d >> 1) & 0x3fff; + break; + } + if((reg_ch & 0x30) == 0x30) { + uint8_t plane = mem_readb(ucw + 0x00); + uint32_t offset = 0x4000; + for(uint8_t bit = 1 ; bit <= 4 ; bit <<= 1) { + pc98_gdc[GDC_SLAVE].set_mode((plane & bit) ? 0x03 : 0x02); + pc98_gdc[GDC_SLAVE].set_vectw(0x40, dir, 3, d, d2, 0xffff, d); + pc98_gdc[GDC_SLAVE].set_csrw(offset + ead, dad); + pc98_gdc[GDC_SLAVE].exec(0x6c); + offset += 0x4000; + } + } else { + pc98_gdc[GDC_SLAVE].set_mode(mem_readb(ucw + 0x02)); + pc98_gdc[GDC_SLAVE].set_vectw(0x40, dir, 3, d, d2, 0xffff, d); + pc98_gdc[GDC_SLAVE].set_csrw(0x4000 + ((reg_ch & 0x30) << 10) + ead, dad); + pc98_gdc[GDC_SLAVE].exec(0x6c); + } + } + } +} + +static void PC98_INT18_DrawText(void) +{ + PhysPt ucw; + uint8_t dir; + uint8_t tile[8]; + uint16_t len; + uint16_t x1, y1; + uint16_t ead, dad; + uint16_t dc, d; + + ucw = SegPhys(ds) + reg_bx; + for(uint8_t i = 0 ; i < 8 ; i++) { + tile[i] = byte_reverse(mem_readb(ucw + 0x20 + i)); + } + pc98_gdc[GDC_SLAVE].set_textw(tile, 8); + len = mem_readw(ucw + 0x0c); + if(len > 0) { + d = len; + dc = (mem_readw(ucw + 0x1e) - 1) & 0x3fff; + } else { + d = 8; + dc = 7; + } + dir = mem_readb(ucw + 0x03); + x1 = mem_readw(ucw + 0x08); + y1 = mem_readw(ucw + 0x0a); + if((reg_ch & 0xc0) == 0x40) { + y1 += 200; + } + ead = (y1 * 40) + (x1 >> 4); + dad = x1 % 16; + if((reg_ch & 0x30) == 0x30) { + uint8_t plane = mem_readb(ucw + 0x00); + uint32_t offset = 0x4000; + for(uint8_t bit = 1 ; bit <= 4 ; bit <<= 1) { + pc98_gdc[GDC_SLAVE].set_mode((plane & bit) ? 0x03 : 0x02); + pc98_gdc[GDC_SLAVE].set_vectw(0x10, dir, dc, d, 0, 0, 0); + pc98_gdc[GDC_SLAVE].set_csrw(offset + ead, dad); + pc98_gdc[GDC_SLAVE].exec(0x68); + offset += 0x4000; + } + } else { + pc98_gdc[GDC_SLAVE].set_mode(mem_readb(ucw + 0x02)); + pc98_gdc[GDC_SLAVE].set_vectw(0x10, dir, dc, d, 0, 0, 0); + pc98_gdc[GDC_SLAVE].set_csrw(0x4000 + ((reg_ch & 0x30) << 10) + ead, dad); + pc98_gdc[GDC_SLAVE].exec(0x68); + } +} + +/* TODO: The text and graphics code that talks to the GDC will need to be converted + * to CPU I/O read and write calls. I think the reason Windows 3.1's 16-color + * driver is causing screen distortion when going fullscreen with COMMAND.COM, + * and the reason COMMAND.COM windowed doesn't show anything, has to do with + * the fact that Windows 3.1 expects this BIOS call to use I/O so it can trap + * and virtualize the GDC and display state. + * + * Obviously for the same reason VGA INT 10h emulation in IBM PC mode needs to + * do the same to prevent display and virtualization problems with the IBM PC + * version of Windows 3.1. + * + * See also: [https://github.com/joncampbell123/dosbox-x/issues/1066] */ +static Bitu INT18_PC98_Handler(void) { + uint16_t temp16; + +#if 0 + if (reg_ah >= 0x0A) { + LOG_MSG("PC-98 INT 18h unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + } +#endif +#if defined(USE_TTF) + if(!finish_prepare){ + conf_output= static_cast(control->GetSection("sdl"))->Get_string("output"); + if(conf_output == "ttf") { // BIOS screen does not like TTF mode, switch it on later + toOutput("ttf"); + ttf_switch_off(true); + is_ttfswitched_on = true; + //LOG_MSG("TTF output is temporary switched off"); + } + } +#endif + /* NTS: Based on information gleaned from Neko Project II source code including comments which + * I've run through GNU iconv to convert from SHIFT-JIS to UTF-8 here in case Google Translate + * got anything wrong. */ + switch (reg_ah) { + case 0x00: /* Reading of key data (キー・データの読みだし) */ + /* FIXME: We use the IBM PC/AT keyboard buffer to fake this call. + * This will be replaced with PROPER emulation once the PC-98 keyboard handler has been + * updated to write the buffer the way PC-98 BIOSes do it. + * + * IBM PC/AT keyboard buffer at 40:1E-40:3D + * + * PC-98 keyboard buffer at 50:02-50:21 */ + /* This call blocks until keyboard input */ + if (INT16_get_key(temp16)) { + reg_ax = temp16; + } + else { + /* Keyboard checks. + * If the interrupt got masked, unmask it. + * If the keyboard has data waiting, make sure the interrupt signal is active in case the last interrupt handler + * handled the keyboard interrupt and never read the keyboard (Quarth). + * + * TODO: Is this what real PC-98 BIOSes do? */ + void check_keyboard_fire_IRQ1(void); + check_keyboard_fire_IRQ1(); + IO_WriteB(0x02,IO_ReadB(0x02) & (~(1u << /*IRQ*/1u))); // unmask IRQ1 + + reg_ip += 1; /* step over IRET, to NOPs which then JMP back to callback */ + } + break; + case 0x01: /* Sense of key buffer state (キー・バッファ状態のセンス) */ + /* This call returns whether or not there is input waiting. + * The waiting data is read, but NOT discarded from the buffer. */ + if (INT16_peek_key(temp16)) { + reg_ax = temp16; + reg_bh = 1; + } + else { + /* Keyboard checks. + * If the interrupt got masked, unmask it. + * If the keyboard has data waiting, make sure the interrupt signal is active in case the last interrupt handler + * handled the keyboard interrupt and never read the keyboard (Quarth). + * + * TODO: Is this what real PC-98 BIOSes do? */ + void check_keyboard_fire_IRQ1(void); + check_keyboard_fire_IRQ1(); + IO_WriteB(0x02,IO_ReadB(0x02) & (~(1u << /*IRQ*/1u))); // unmask IRQ1 + + reg_bh = 0; + } + break; + case 0x02: /* Sense of shift key state (シフト・キー状態のセンス) */ + reg_al = mem_readb(0x53A); + break; + case 0x03: /* Initialization of keyboard interface (キーボード・インタフェイスの初期化) */ + /* TODO */ + IO_WriteB(0x43, 0x3a); + IO_WriteB(0x43, 0x32); + IO_WriteB(0x43, 0x16); + for (int i=0; i<0x20; i++) mem_writeb(0x502+i, 0); + for (int i=0; i<0x13; i++) mem_writeb(0x528+i, 0); + mem_writew(0x522,(unsigned int)(Real2Phys(BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION) - 0xFD800)); + mem_writew(0x524, 0x0502); + mem_writew(0x526, 0x0502); + mem_writew(0x5C6,(unsigned int)(Real2Phys(BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION) - 0xFD800)); + mem_writew(0x5C8,0xFD80); + break; + case 0x04: /* Sense of key input state (キー入力状態のセンス) */ + reg_ah = mem_readb(0x52A + (unsigned int)(reg_al & 0x0Fu)); + /* Hack for "Shangrlia" by Elf: The game's regulation of animation speed seems to depend on + * INT 18h AH=0x04 taking some amount of time. If we do not do this, animation will run way + * too fast and everyone will be talking/moving at a million miles a second. + * + * This is based on comparing animation speed vs the same game on real Pentium-class PC-98 + * hardware. + * + * Looking at the software loop involved during opening cutscenes, the game is constantly + * polling INT 18h AH=04h (keyboard state) and INT 33h AH=03h (mouse button/position state) + * while animating the characters on the screen. Without this delay, animation runs way too + * fast. + * + * This guess is also loosely based on a report by the Touhou Community Reliant Automatic Patcher + * that Touhou Project directly reads this byte but delays by 0.6ms to handle the fact that + * the bit in question may toggle while the key is held down due to the scan codes returned by + * the keyboard. + * + * This is a guess, but it seems to help animation speed match that of real hardware regardless + * of cycle count in DOSBox-X. */ + CPU_Cycles -= (cpu_cycles_count_t)(CPU_CycleMax * 0.006); + break; + case 0x05: /* Key input sense (キー入力センス) */ + /* This appears to return a key from the buffer (and remove from + * buffer) or return BH == 0 to signal no key was pending. */ + if (INT16_get_key(temp16)) { + reg_ax = temp16; + reg_bh = 1; + } + else { + /* Keyboard checks. + * If the interrupt got masked, unmask it. + * If the keyboard has data waiting, make sure the interrupt signal is active in case the last interrupt handler + * handled the keyboard interrupt and never read the keyboard (Quarth). + * + * TODO: Is this what real PC-98 BIOSes do? */ + void check_keyboard_fire_IRQ1(void); + check_keyboard_fire_IRQ1(); + IO_WriteB(0x02,IO_ReadB(0x02) & (~(1u << /*IRQ*/1u))); // unmask IRQ1 + + reg_bh = 0; + } + break; + case 0x0A: /* set CRT mode */ + /* bit off on + 0 25lines 20lines + 1 80cols 40cols + 2 v.lines simp.graphics + 3 K-CG access mode(not available on original PC-9801) */ + + //TODO: set 25/20 lines mode and 80/40 columns mode. + //Attribute bit (bit 2) + pc98_attr4_graphic = !!(reg_al & 0x04); + pc98_40col_text = !!(reg_al & 0x02); +#if defined(USE_TTF) + if (!(reg_al & 0xc) && pc98_gdc[GDC_MASTER].display_enable) ttf_switch_on(false); +#endif + + mem_writeb(0x53C,(mem_readb(0x53C) & 0xF0u) | (reg_al & 0x0Fu)); + + pc98_cg_kanji_dot_access_mode = !!(reg_al & 8); + + pc98_update_text_lineheight_from_bda(); + pc98_update_text_layer_lineheight_from_bda(); + + /* Apparently, this BIOS call also hides the cursor */ + PC98_show_cursor(0); + break; + case 0x0B: /* get CRT mode */ + /* bit off on + 0 25lines 20lines + 1 80cols 40cols + 2 v.lines simp.graphics + 3 K-CG access mode(not available on original PC-9801) + 7 std CRT hi-res CRT */ + /* NTS: I assume that real hardware doesn't offer a way to read back the state of these bits, + * so the BIOS's only option is to read the mode byte back from the data area. + * Neko Project II agrees. */ + reg_al = mem_readb(0x53C); + break; + // TODO: "Edge" is using INT 18h AH=06h, what is that? + // (Something to do with the buffer [https://ia801305.us.archive.org/8/items/PC9800TechnicalDataBookBIOS1992/PC-9800TechnicalDataBook_BIOS_1992_text.pdf]) + // Neko Project is also unaware of such a call. + case 0x0C: /* text layer enable */ + /* PROBLEM: Okay, so it's unclear when text layer is or is not allowed. + * I was unable to turn on the text layer with this BIOS call on real PC-9821 hardware, so I believed that it did not allow it. + * + * But PC-9821 CD-ROM game "Shamat, The Holy Circlet" expects to turn on the text layer in 640x400 256-color PEGC mode, + * because it displays graphics in the background while scrolling Japanese text up over it, and if sound hardware is available, + * plays a voice reading the text synchronized to it. + * + * Perhaps in my case it was 640x480 256-color mode, not 640x400 256-color mode, but then, 640x480 also enables a text mode with + * either more rows or a taller character cell which is apparently recognized by the MS-DOS console driver. + * + * So then, what exactly decides whether or not to allow this call to enable the text layer? */ + if (pc98_gdc_vramop & (1u << VOPBIT_VGA) && 0/*DISABLED*/) { + /* NTS: According to tests on real PC-9821 hardware, you can't turn on the text layer in 256-color mode, at least through the BIOS. */ + /* FIXME: Is this a restriction imposed by the BIOS, or the hardware itself? */ + LOG_MSG("INT 18h: Attempt to turn on text layer in 256-color mode"); + } + else { + pc98_gdc[GDC_MASTER].force_fifo_complete(); + pc98_gdc[GDC_MASTER].display_enable = true; +#if defined(USE_TTF) + ttf_switch_on(false); +#endif + } + break; + case 0x0D: /* text layer disable */ +#if defined(USE_TTF) + ttf_switch_off(false); +#endif + pc98_gdc[GDC_MASTER].force_fifo_complete(); + pc98_gdc[GDC_MASTER].display_enable = false; + break; + case 0x0E: /* set text display area (DX=byte offset) */ + pc98_gdc[GDC_MASTER].force_fifo_complete(); + pc98_gdc[GDC_MASTER].param_ram[0] = (reg_dx >> 1) & 0xFF; + pc98_gdc[GDC_MASTER].param_ram[1] = (reg_dx >> 9) & 0xFF; + pc98_gdc[GDC_MASTER].param_ram[2] = (400 << 4) & 0xFF; + pc98_gdc[GDC_MASTER].param_ram[3] = (400 << 4) >> 8; + break; + case 0x10: /* set cursor blink */ + PC98_show_cursor(false); /* side effect: hides the cursor */ + pc98_gdc[GDC_MASTER].force_fifo_complete(); + pc98_gdc[GDC_MASTER].cursor_blink = !!(reg_al & 1); + break; + case 0x11: /* show cursor */ + PC98_show_cursor(true); + break; + case 0x12: /* hide cursor */ + PC98_show_cursor(false); + break; + case 0x13: /* set cursor position (DX=byte position) */ + void vga_pc98_direct_cursor_pos(uint16_t address); + + pc98_gdc[GDC_MASTER].force_fifo_complete(); + vga_pc98_direct_cursor_pos(reg_dx >> 1); + break; + case 0x14: /* read FONT RAM */ + { + unsigned int i,o,r; + + /* DX = code (must be 0x76xx or 0x7700) + * BX:CX = 34-byte region to write to */ + if (reg_dh == 0x80u) { /* 8x16 ascii */ + i = ((unsigned int)reg_bx << 4u) + reg_cx + 2u; + mem_writew(i-2u,0x0102u); + for (r=0;r < 16u;r++) { + o = (reg_dl*16u)+r; + + assert((o+2u) <= sizeof(vga.draw.font)); + + mem_writeb(i+r,vga.draw.font[o]); + } + } + else if ((reg_dh & 0xFC) == 0x28) { /* 8x16 kanji */ + i = ((unsigned int)reg_bx << 4u) + reg_cx + 2u; + mem_writew(i-2u,0x0102u); + for (r=0;r < 16u;r++) { + o = (((((reg_dl & 0x7Fu)*128u)+((reg_dh - 0x20u) & 0x7Fu))*16u)+r)*2u; + + assert((o+2u) <= sizeof(vga.draw.font)); + + mem_writeb(i+r+0u,vga.draw.font[o+0u]); + } + } + else if (reg_dh != 0) { /* 16x16 kanji */ + i = ((unsigned int)reg_bx << 4u) + reg_cx + 2u; + mem_writew(i-2u,0x0202u); + for (r=0;r < 16u;r++) { + o = (((((reg_dl & 0x7Fu)*128u)+((reg_dh - 0x20u) & 0x7Fu))*16u)+r)*2u; + + assert((o+2u) <= sizeof(vga.draw.font)); + + mem_writeb(i+(r*2u)+0u,vga.draw.font[o+0u]); + mem_writeb(i+(r*2u)+1u,vga.draw.font[o+1u]); + } + } + else if(reg_dl < 0x80) { /* 6x8 ascii .. Substitute 8x8 */ + i = ((unsigned int)reg_bx << 4u) + reg_cx + 2u; + mem_writew(i-2u,0x0101u); + o = reg_dl * 8; + for (r=0;r < 8u;r++) { + mem_writeb(i+r, int10_font_08[o + r]); + } + } + else if(reg_dl >= 0xa0 && reg_dl <= 0xdf) { /* 6x8 kana */ + i = ((unsigned int)reg_bx << 4u) + reg_cx + 2u; + mem_writew(i - 2u, 0x0101u); + o = (reg_dl - 0xa0) * 8; + for(r = 0; r < 8u; r++) { + mem_writeb(i + r, pc98_katakana6x8_font[o + r]); + } + } + else { + LOG_MSG("PC-98 INT 18h AH=14h font RAM read ignored, code 0x%04x not supported",reg_dx); + } + } + break; + case 0x16: /* fill screen with chr + attr */ + { + /* DL = character + * DH = attribute */ + unsigned int i; + + for (i=0;i < 0x2000;i += 2) { + vga.mem.linear[i+0] = reg_dl; + vga.mem.linear[i+1] = 0x00; + } + for ( ;i < 0x3FE0;i += 2) { + vga.mem.linear[i+0] = reg_dh; + vga.mem.linear[i+1] = 0x00; + } + } + break; + case 0x17: /* BELL ON */ + IO_WriteB(0x37,0x06); + break; + case 0x18: /* BELL OFF */ + IO_WriteB(0x37,0x07); + break; + case 0x1A: /* load FONT RAM */ + { + /* DX = code (must be 0x76xx or 0x7700) + * BX:CX = 34-byte region to read from */ + if ((reg_dh & 0x7Eu) == 0x76u) { + unsigned int i = ((unsigned int)reg_bx << 4u) + reg_cx + 2u; + for (unsigned int r=0;r < 16u;r++) { + unsigned int o = (((((reg_dl & 0x7Fu)*128u)+((reg_dh - 0x20u) & 0x7Fu))*16u)+r)*2u; + + assert((o+2u) <= sizeof(vga.draw.font)); + + vga.draw.font[o+0u] = mem_readb(i+(r*2u)+0u); + vga.draw.font[o+1u] = mem_readb(i+(r*2u)+1u); + } + } + else { + LOG_MSG("PC-98 INT 18h AH=1Ah font RAM load ignored, code 0x%04x out of range",reg_dx); + } + } + break; + case 0x30: /* Set display mode */ + /* FIXME: There is still a lot that is inaccurate about this call */ + if (enable_pc98_egc) { + unsigned char b597 = mem_readb(0x597); + unsigned char tstat = mem_readb(0x53C); + unsigned char b54C = mem_readb(0x54C); + unsigned char ret = 0x05; // according to NP2 + + // assume the same as AH=42h + while (!(IO_ReadB(0x60) & 0x20/*vertical retrace*/)) { + void CALLBACK_Idle(void); + CALLBACK_Idle(); + } + + LOG_MSG("PC-98 INT 18 AH=30h AL=%02Xh BH=%02Xh",reg_al,reg_bh); + + if ((reg_bh & 0x30) == 0x30) { // 640x480 + if ((reg_al & 0xC) == 0x0C) { // 31KHz sync + void PC98_Set31KHz_480line(void); + pc98_31khz_mode = true; + PC98_Set31KHz_480line(); + + void pc98_port6A_command_write(unsigned char b); + pc98_port6A_command_write(0x69); // disable 128KB wrap + + b54C = (b54C & (~0x20)) + ((reg_al & 0x04) ? 0x20 : 0x00); + +#if defined(USE_TTF) + ttf_switch_off(false); +#endif + pc98_gdc[GDC_MASTER].force_fifo_complete(); + pc98_gdc[GDC_SLAVE].force_fifo_complete(); + + // according to real hardware, this also hides the text layer for some reason + pc98_gdc[GDC_MASTER].display_enable = false; + + /* clear PRAM, graphics */ + for (unsigned int i=0;i < 16;i++) + pc98_gdc[GDC_SLAVE].param_ram[i] = 0x00; + + /* reset scroll area of graphics */ + pc98_gdc[GDC_SLAVE].param_ram[0] = 0; + pc98_gdc[GDC_SLAVE].param_ram[1] = 0; + + pc98_gdc[GDC_SLAVE].param_ram[2] = 0xF0; + pc98_gdc[GDC_SLAVE].param_ram[3] = 0x3F + (gdc_5mhz_according_to_bios()?0x40:0x00/*IM bit*/); + pc98_gdc[GDC_SLAVE].display_pitch = gdc_5mhz_according_to_bios() ? 80u : 40u; + + pc98_gdc[GDC_SLAVE].doublescan = false; + pc98_gdc[GDC_SLAVE].row_height = 1; + + b597 = (b597 & ~3u) + ((uint8_t)(reg_bh >> 4u) & 3u); + + pc98_gdc_vramop &= ~(1 << VOPBIT_ACCESS); + pc98_update_cpu_page_ptr(); + + GDC_display_plane = GDC_display_plane_pending = 0; + pc98_update_display_page_ptr(); + + /* based on real hardware behavior, this ALSO sets 256-color mode */ + void pc98_port6A_command_write(unsigned char b); + pc98_port6A_command_write(0x07); // enable EGC + pc98_port6A_command_write(0x01); // enable 16-color + pc98_port6A_command_write(0x21); // enable 256-color + } + else { + // according to Neko Project II, this case is ignored. + // this is confirmed on real hardware as well. + LOG_MSG("PC-98 INT 18h AH=30h attempt to set 640x480 mode with 24KHz hsync which is not supported by the platform"); + ret = 0; + } + } + else { // 640x400 or 640x200 + // TODO: A PC9821Lt2 laptop's BIOS refuses to allow 31khz except for 640x480 mode. + // Perhaps it's just a technical restriction of the LCD display. + // + // Check on other PC-98 hardware to see what the policy is for 31khz in all modes. + // That restriction would make no sense on another system I have that has a VGA + // port and a default setting of 70Hz / 31KHz 640x400. + if ((reg_al & 0x0C) < 0x08) { /* bits [3:2] == 0x */ + LOG_MSG("PC-98 INT 18h AH=30h attempt to set 15KHz hsync which is not yet supported"); + ret = 0; + } + else { + if ((reg_al ^ (((b54C & 0x20) ? 3 : 2) << 2)) & 0x0C) { /* change in bits [3:2] */ + LOG_MSG("PC-98 change in hsync frequency to %uHz",(reg_al & 0x04) ? 31 : 24); + + if (reg_al & 4) { + void PC98_Set31KHz(void); + pc98_31khz_mode = true; + PC98_Set31KHz(); + } + else { + void PC98_Set24KHz(void); + pc98_31khz_mode = false; + PC98_Set24KHz(); + } + + b54C = (b54C & (~0x20)) + ((reg_al & 0x04) ? 0x20 : 0x00); + } + } + + void pc98_port6A_command_write(unsigned char b); + pc98_port6A_command_write(0x68); // restore 128KB wrap + +#if defined(USE_TTF) + ttf_switch_off(false); +#endif + pc98_gdc[GDC_MASTER].force_fifo_complete(); + pc98_gdc[GDC_SLAVE].force_fifo_complete(); + + // 640x480 forces 256-color mode. + // the 400 line modes (this case) do not clear 256-color mode. + + // according to real hardware, this also hides the text layer for some reason + pc98_gdc[GDC_MASTER].display_enable = false; + + /* clear PRAM, graphics */ + for (unsigned int i=0;i < 16;i++) + pc98_gdc[GDC_SLAVE].param_ram[i] = 0x00; + + /* reset scroll area of graphics */ + if ((reg_bh & 0x30) == 0x10) { /* 640x200 upper half bits [5:4] == 1 */ + pc98_gdc[GDC_SLAVE].param_ram[0] = (200*40) & 0xFF; + pc98_gdc[GDC_SLAVE].param_ram[1] = (200*40) >> 8; + } + else { + pc98_gdc[GDC_SLAVE].param_ram[0] = 0; + pc98_gdc[GDC_SLAVE].param_ram[1] = 0; + } + + pc98_gdc[GDC_SLAVE].param_ram[2] = 0xF0; + pc98_gdc[GDC_SLAVE].param_ram[3] = 0x3F + (gdc_5mhz_according_to_bios()?0x40:0x00/*IM bit*/); + pc98_gdc[GDC_SLAVE].display_pitch = gdc_5mhz_according_to_bios() ? 80u : 40u; + + if ((reg_bh & 0x20) == 0x00) { /* 640x200 */ + pc98_gdc[GDC_SLAVE].doublescan = true; + pc98_gdc[GDC_SLAVE].row_height = pc98_gdc[GDC_SLAVE].doublescan ? 2 : 1; + } + else { + pc98_gdc[GDC_SLAVE].doublescan = false; + pc98_gdc[GDC_SLAVE].row_height = 1; + } + + b597 = (b597 & ~3u) + ((uint8_t)(reg_bh >> 4u) & 3u); + + pc98_gdc_vramop &= ~(1 << VOPBIT_ACCESS); + pc98_update_cpu_page_ptr(); + + GDC_display_plane = GDC_display_plane_pending = 0; + pc98_update_display_page_ptr(); + } + + tstat &= ~(0x10 | 0x01); + if (reg_bh & 2) + tstat |= 0x10; + else if ((reg_bh & 1) == 0) + tstat |= 0x01; + + mem_writeb(0x597,b597); + mem_writeb(0x53C,tstat); + mem_writeb(0x54C,b54C); + + pc98_update_text_lineheight_from_bda(); + pc98_update_text_layer_lineheight_from_bda(); + + // according to real hardware (PC-9821Lt2), AH=5 on success (same as NP2) + // or AH is unchanged on failure and AL=1 and BH=1 (NOT the same as NP2) + if (ret == 0x05) reg_ah = ret; + reg_al = (ret == 0x05) ? 0x00 : 0x01; // according to NP2 + reg_bh = (ret == 0x05) ? 0x00 : 0x01; // according to NP2 + } + break; + case 0x31: /* Return display mode and status */ + /* NTS: According to NP II this call shouldn't even work unless you first call AH=30h to set 640x480 mode. + * It seems that is wrong. Real hardware will still return the current mode regardless. */ + if (enable_pc98_egc) { /* FIXME: INT 18h AH=31/30h availability is tied to EGC enable */ + unsigned char b597 = mem_readb(0x597); + unsigned char tstat = mem_readb(0x53C); + unsigned char b54C = mem_readb(0x54C); + + /* 54Ch: + * bit[5:5] = Horizontal sync rate 1=31.47KHz 0=24.83KHz */ + + /* Return values: + * + * AL = + * bit [7:7] = ? + * bit [6:6] = ? + * bit [5:5] = ? + * bit [4:4] = ? + * bit [3:2] = horizontal sync + * 00 = 15.98KHz + * 01 = ? + * 10 = 24.83KHz + * 11 = 31.47KHz + * bit [1:1] = ? + * bit [0:0] = interlaced (1=yes 0=no) + * BH = + * bit [7:7] = ? + * bit [6:6] = ? + * bit [5:4] = graphics video mode + * 00 = 640x200 (upper half) + * 01 = 640x200 (lower half) + * 10 = 640x400 + * 11 = 640x480 + * bit [3:3] = ? + * bit [2:2] = ? + * bit [1:0] = number of text rows + * 00 = 20 rows + * 01 = 25 rows + * 10 = 30 rows + * 11 = ? + */ + reg_al = + (((b54C & 0x20) ? 3 : 2) << 2)/*hsync*/; + reg_bh = + ((b597 & 3) << 4)/*graphics video mode*/; + if (tstat & 0x10) + reg_bh |= 2;/*30 rows*/ + else if ((tstat & 0x01) == 0) + reg_bh |= 1;/*25 rows*/ + } + break; + /* From this point on the INT 18h call list appears to wander off from the keyboard into CRT/GDC/display management. */ + case 0x40: /* Start displaying the graphics screen (グラフィック画面の表示開始) */ + pc98_gdc[GDC_SLAVE].force_fifo_complete(); + pc98_gdc[GDC_SLAVE].display_enable = true; +#if defined(USE_TTF) + if (!pc98_gdc[GDC_MASTER].display_enable) ttf_switch_off(false); +#endif + + { + unsigned char b = mem_readb(0x54C/*MEMB_PRXCRT*/); + mem_writeb(0x54C/*MEMB_PRXCRT*/,b | 0x80); + } + break; + case 0x41: /* Stop displaying the graphics screen (グラフィック画面の表示終了) */ + pc98_gdc[GDC_SLAVE].force_fifo_complete(); + pc98_gdc[GDC_SLAVE].display_enable = false; +#if defined(USE_TTF) + if (pc98_gdc[GDC_MASTER].display_enable) ttf_switch_on(false); +#endif + + { + unsigned char b = mem_readb(0x54C/*MEMB_PRXCRT*/); + mem_writeb(0x54C/*MEMB_PRXCRT*/,b & (~0x80)); + } + break; + case 0x42: /* Display area setup (表示領域の設定) */ + // HACK for Quarth: If the game has triggered vsync interrupt, wait for it. + // Quarth's vsync interrupt will reprogram the display partitions back to what + // it would have set for gameplay after this modeset and cause display problems + // with the main menu. Waiting one vertical retrace period before mode setting + // gives Quarth one last frame to reprogram partitions before realizing that + // it's time to stop it. + // + // If the BIOS on real hardware has any check like this, it's probably a loop + // to wait for vsync. + // + // The interrupt does NOT cancel the vertical retrace interrupt. Some games + // (Rusty) will not work properly if this call cancels the vertical retrace + // interrupt. + while (!(IO_ReadB(0x60) & 0x20/*vertical retrace*/)) { + void CALLBACK_Idle(void); + CALLBACK_Idle(); + } + + pc98_gdc[GDC_MASTER].force_fifo_complete(); + pc98_gdc[GDC_SLAVE].force_fifo_complete(); + + /* clear PRAM, graphics */ + for (unsigned int i=0;i < 16;i++) + pc98_gdc[GDC_SLAVE].param_ram[i] = 0x00; + + /* reset scroll area of graphics */ + if ((reg_ch & 0xC0) == 0x40) { /* 640x200 G-RAM upper half */ + pc98_gdc[GDC_SLAVE].param_ram[0] = (200*40) & 0xFF; + pc98_gdc[GDC_SLAVE].param_ram[1] = (200*40) >> 8; + } + else { + pc98_gdc[GDC_SLAVE].param_ram[0] = 0; + pc98_gdc[GDC_SLAVE].param_ram[1] = 0; + } + + pc98_gdc[GDC_SLAVE].param_ram[2] = 0xF0; + pc98_gdc[GDC_SLAVE].param_ram[3] = 0x3F + (gdc_5mhz_according_to_bios()?0x40:0x00/*IM bit*/); + pc98_gdc[GDC_SLAVE].display_pitch = gdc_5mhz_according_to_bios() ? 80u : 40u; + + // CH + // [7:6] = G-RAM setup + // 00 = no graphics (?) + // 01 = 640x200 upper half + // 10 = 640x200 lower half + // 11 = 640x400 + // [5:5] = CRT + // 0 = color + // 1 = monochrome + // [4:4] = Display bank + + // Color or monochrome mode + IO_WriteB(0x68, (reg_ch & 0x20) ? 0x03 : 0x02); + + // FIXME: This is a guess. I have no idea as to actual behavior, yet. + // This seems to help with clearing the text layer when games start the graphics. + // This is ALSO how we will detect games that switch on the 200-line double-scan mode vs 400-line mode. + if ((reg_ch & 0xC0) != 0) { + pc98_gdc[GDC_SLAVE].doublescan = ((reg_ch & 0xC0) == 0x40) || ((reg_ch & 0xC0) == 0x80); + pc98_gdc[GDC_SLAVE].row_height = pc98_gdc[GDC_SLAVE].doublescan ? 2 : 1; + + /* update graphics mode bits */ + { + unsigned char b = mem_readb(0x597); + + b &= ~3; + b |= ((reg_ch >> 6) - 1) & 3; + + mem_writeb(0x597,b); + } + } + else { + pc98_gdc[GDC_SLAVE].doublescan = false; + pc98_gdc[GDC_SLAVE].row_height = 1; + } + + { + unsigned char b = mem_readb(0x54C/*MEMB_PRXCRT*/); + + // Real hardware behavior: graphics selection updated by BIOS to reflect MEMB_PRXCRT state + pc98_gdc[GDC_SLAVE].display_enable = !!(b & 0x80); +#if defined(USE_TTF) + if (pc98_gdc[GDC_SLAVE].display_enable) + ttf_switch_off(false); + else if (pc98_gdc[GDC_MASTER].display_enable) + ttf_switch_on(false); +#endif + } + + GDC_display_plane = GDC_display_plane_pending = (reg_ch & 0x10) ? 1 : 0; + pc98_update_display_page_ptr(); + + prev_pc98_mode42 = reg_ch; + + LOG_MSG("PC-98 INT 18 AH=42h CH=0x%02X",reg_ch); + break; + case 0x43: // Palette register settings? Only works in digital mode? --leonier + // + // This is said to fix Thexder's GAME ARTS logo. --Jonathan C. + // + // TODO: Validate this against real PC-98 hardware and BIOS + { + unsigned int gbcpc = SegValue(ds)*0x10u + reg_bx; + for(unsigned int i=0;i<4;i++) + { + unsigned char p=mem_readb(gbcpc+4u+i); + pc98_set_digpal_entry(7u-2u*i, p&0xFu); + pc98_set_digpal_entry(6u-2u*i, p>>4u); + } + LOG_MSG("PC-98 INT 18 AH=43h CX=0x%04X DS=0x%04X", reg_cx, SegValue(ds)); + break; + } + case 0x47: // Line, Box + case 0x48: // Arc + PC98_INT18_DrawShape(); + break; + case 0x49: // Text + PC98_INT18_DrawText(); + break; + case 0x4D: // 256-color enable + if (reg_ch == 1) { + void pc98_port6A_command_write(unsigned char b); + pc98_port6A_command_write(0x07); // enable EGC + pc98_port6A_command_write(0x01); // enable 16-color + pc98_port6A_command_write(0x21); // enable 256-color + PC98_show_cursor(false); // apparently hides the cursor? + mem_writeb(0x54D, mem_readb(0x54D) | 0x80); + } + else if (reg_ch == 0) { + void pc98_port6A_command_write(unsigned char b); + pc98_port6A_command_write(0x20); // disable 256-color + PC98_show_cursor(false); // apparently hides the cursor? + mem_writeb(0x54D, mem_readb(0x54D) & ~0x80); + } + else { + LOG_MSG("PC-98 INT 18h AH=4Dh unknown CH=%02xh",reg_ch); + } + break; + default: + LOG_MSG("PC-98 INT 18h unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + break; + } + + /* FIXME: What do actual BIOSes do when faced with an unknown INT 18h call? */ + return CBRET_NONE; +} + +#define PC98_FLOPPY_HIGHDENSITY 0x01 +#define PC98_FLOPPY_2HEAD 0x02 +#define PC98_FLOPPY_RPM_3MODE 0x04 +#define PC98_FLOPPY_RPM_IBMPC 0x08 + +unsigned char PC98_BIOS_FLOPPY_BUFFER[32768]; /* 128 << 8 */ + +static unsigned int PC98_FDC_SZ_TO_BYTES(unsigned int sz) { + return 128U << sz; +} + +int PC98_BIOS_SCSI_POS(imageDisk *floppy,uint32_t §or) { + if (reg_al & 0x80) { + uint32_t img_heads=0,img_cyl=0,img_sect=0,img_ssz=0; + + floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); + + /* DL = sector + * DH = head + * CX = track */ + if (reg_dl >= img_sect || + reg_dh >= img_heads || + reg_cx >= img_cyl) { + return (reg_ah=0x60); + } + + sector = reg_cx; + sector *= img_heads; + sector += reg_dh; + sector *= img_sect; + sector += reg_dl; + +// LOG_MSG("Sector CHS %u/%u/%u -> %u (geo %u/%u/%u)",reg_cx,reg_dh,reg_dl,sector,img_cyl,img_heads,img_sect); + } + else { + /* Linear LBA addressing */ + sector = ((unsigned int)reg_dl << 16UL) + reg_cx; + /* TODO: SASI caps at 0x1FFFFF according to NP2 */ + } + + return 0; +} + +void PC98_BIOS_SCSI_CALL(void) { + uint32_t img_heads=0,img_cyl=0,img_sect=0,img_ssz=0; + uint32_t memaddr,size,ssize; + imageDisk *floppy; + unsigned int i; + uint32_t sector; + int idx; + +#if 0 + LOG_MSG("PC-98 INT 1Bh SCSI BIOS call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); +#endif + + idx = (reg_al & 0xF) + 2; + if (idx < 0 || idx >= MAX_DISK_IMAGES) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + floppy = imageDiskList[idx]; + if (floppy == NULL) { + CALLBACK_SCF(true); + reg_ah = 0x60; + return; + } + + /* FIXME: According to NPKai, command is reg_ah & 0x1F not reg_ah & 0x0F. Right? */ + + /* what to do is in the lower 4 bits of AH */ + switch (reg_ah & 0x0F) { + case 0x05: /* write */ + if (PC98_BIOS_SCSI_POS(floppy,/*&*/sector) == 0) { + floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); + assert(img_ssz != 0); + + size = reg_bx; + if (size == 0) size = 0x10000U; + memaddr = ((unsigned int)SegValue(es) << 4u) + reg_bp; + + reg_ah = 0; + CALLBACK_SCF(false); + +// LOG_MSG("WRITE memaddr=0x%lx size=0x%x sector=0x%lx ES:BP=%04x:%04X", +// (unsigned long)memaddr,(unsigned int)size,(unsigned long)sector,SegValue(es),reg_bp); + + while (size != 0) { + ssize = size; + if (ssize > img_ssz) ssize = img_ssz; + +// LOG_MSG(" ... memaddr=0x%lx ssize=0x%x sector=0x%lx", +// (unsigned long)memaddr,(unsigned int)ssize,(unsigned long)sector); + + for (i=0;i < ssize;i++) PC98_BIOS_FLOPPY_BUFFER[i] = mem_readb(memaddr+i); + + if (floppy->Write_AbsoluteSector(sector,PC98_BIOS_FLOPPY_BUFFER) != 0) { + reg_ah = 0xD0; + CALLBACK_SCF(true); + break; + } + + sector++; + size -= ssize; + memaddr += ssize; + } + } + else { + CALLBACK_SCF(true); + } + break; + case 0x06: /* read */ + if (PC98_BIOS_SCSI_POS(floppy,/*&*/sector) == 0) { + floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); + assert(img_ssz != 0); + + size = reg_bx; + if (size == 0) size = 0x10000U; + memaddr = ((unsigned int)SegValue(es) << 4u) + reg_bp; + + reg_ah = 0; + CALLBACK_SCF(false); + +// LOG_MSG("READ memaddr=0x%lx size=0x%x sector=0x%lx ES:BP=%04x:%04X", +// (unsigned long)memaddr,(unsigned int)size,(unsigned long)sector,SegValue(es),reg_bp); + + while (size != 0) { + ssize = size; + if (ssize > img_ssz) ssize = img_ssz; + +// LOG_MSG(" ... memaddr=0x%lx ssize=0x%x sector=0x%lx", +// (unsigned long)memaddr,(unsigned int)ssize,(unsigned long)sector); + + if (floppy->Read_AbsoluteSector(sector,PC98_BIOS_FLOPPY_BUFFER) == 0) { + for (i=0;i < ssize;i++) mem_writeb(memaddr+i,PC98_BIOS_FLOPPY_BUFFER[i]); + } + else { + reg_ah = 0xD0; + CALLBACK_SCF(true); + break; + } + + sector++; + size -= ssize; + memaddr += ssize; + } + } + else { + CALLBACK_SCF(true); + } + break; + case 0x03: /* according to NPKai source code: "negate ack" (cbus/scsicmd.c line 211, and 61) */ + reg_ah = 0x35; /* according to scsicmd_negate() line 61, as translated by stat2ret[] by code line 228 */ + CALLBACK_SCF(false); + // NTS: This is needed for an HDI image to boot that apparently contains FreeDOS98 + break; + case 0x07: /* unknown, always succeeds */ + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x0E: /* unknown, always fails */ + reg_ah = 0x40; + CALLBACK_SCF(true); + break; + case 0x04: /* drive status */ + if (reg_ah == 0x84) { + floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); + + reg_dl = img_sect; + reg_dh = img_heads; /* Max 16 */ + reg_cx = img_cyl; /* Max 4096 */ + reg_bx = img_ssz; + + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + } + else if (reg_ah == 0x04 || reg_ah == 0x14) { + reg_ah = 0x00; + CALLBACK_SCF(false); + } + else { + goto default_goto; + } + default: + default_goto: + LOG_MSG("PC-98 INT 1Bh unknown SCSI BIOS call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + CALLBACK_SCF(true); + break; + } +} + +void PC98_BIOS_FDC_CALL_GEO_UNPACK(unsigned int &fdc_cyl,unsigned int &fdc_head,unsigned int &fdc_sect,unsigned int &fdc_sz) { + fdc_cyl = reg_cl; + fdc_head = reg_dh; + fdc_sect = reg_dl; + fdc_sz = reg_ch; + if (fdc_sz > 8) fdc_sz = 8; +} + +/* NTS: FDC calls reset IRQ 0 timer to a specific fixed interval, + * because the real BIOS likely does the same in the act of + * controlling the floppy drive. + * + * Resetting the interval is required to prevent Ys II from + * crashing after disk swap (divide by zero/overflow) because + * Ys II reads the timer after INT 1Bh for whatever reason + * and the upper half of the timer byte later affects a divide + * by 3 in the code. */ + +void PC98_Interval_Timer_Continue(void); + +bool enable_fdc_timer_hack = false; + +void FDC_WAIT_TIMER_HACK(void) { + unsigned int v; + unsigned int c=0; + + // Explanation: + // + // Originally the FDC code here changed the timer interval back to the stock 100hz + // normally used in PC-98, to fix Ys II. However that seems to break other booter + // games that hook IRQ 0 directly and set the timer ONCE, then access the disk. + // + // For example, "Angelus" ran WAY too slow with the timer hack because it programs + // the timer to a 600hz interval and expects it to stay that way. + // + // So the new method to satisfy both games is to loop here until the timer + // count is below the maximum that would occur if the 100hz tick count were + // still in effect, even if the timer interval was reprogrammed. + // + // NTS: Writing port 0x77 to relatch the timer also seems to break games + // + // TODO: As a safety against getting stuck, perhaps PIC_FullIndex() should be used + // to break out of the loop if this runs for more than 1 second, since that + // is a sign the timer is in an odd state that will never terminate this loop. + + v = ~0U; + c = 10; + do { + void CALLBACK_Idle(void); + CALLBACK_Idle(); + + unsigned int pv = v; + + v = (unsigned int)IO_ReadB(0x71); + v |= (unsigned int)IO_ReadB(0x71) << 8u; + + if (v > pv) { + /* if the timer rolled around, we might have missed the narrow window we're watching for */ + if (--c == 0) break; + } + } while (v >= 0x60); +} + +void PC98_BIOS_FDC_CALL(unsigned int flags) { + static unsigned int fdc_cyl[2]={0,0},fdc_head[2]={0,0},fdc_sect[2]={0,0},fdc_sz[2]={0,0}; // FIXME: Rename and move out. Making "static" is a hack here. + uint32_t img_heads=0,img_cyl=0,img_sect=0,img_ssz=0; + unsigned int drive; + unsigned int status; + unsigned int size,accsize,unitsize; + unsigned long memaddr; + imageDisk *floppy; + + /* AL bits[1:0] = which floppy drive */ + if ((reg_al & 3) >= 2) { + /* This emulation only supports up to 2 floppy drives */ + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + floppy = GetINT13FloppyDrive(drive=(reg_al & 3)); + + /* what to do is in the lower 4 bits of AH */ + switch (reg_ah & 0x0F) { + /* TODO: 0x00 = seek to track (in CL) */ + /* TODO: 0x01 = test read? */ + /* TODO: 0x03 = equipment flags? */ + /* TODO: 0x04 = format detect? */ + /* TODO: 0x05 = write disk */ + /* TODO: 0x07 = recalibrate (seek to track 0) */ + /* TODO: 0x0A = Read ID */ + /* TODO: 0x0D = Format track */ + /* TODO: 0x0E = ?? */ + case 0x03: /* equipment flags update (?) */ + // TODO: Update the disk equipment flags in BDA. + // For now, make Alantia happy by returning success. + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x00: /* seek */ + /* CL = track */ + if (floppy == NULL) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + if (enable_fdc_timer_hack) { + // Hack for Ys II + FDC_WAIT_TIMER_HACK(); + } + + fdc_cyl[drive] = reg_cl; + + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x01: /* test read */ + /* AH bits[4:4] = If set, seek to track specified */ + /* CL = cylinder (track) */ + /* CH = sector size (0=128 1=256 2=512 3=1024 etc) */ + /* DL = sector number (1-based) */ + /* DH = head */ + /* BX = size (in bytes) of data to read */ + /* ES:BP = buffer to read data into */ + if (floppy == NULL) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); + + if (enable_fdc_timer_hack) { + // Hack for Ys II + FDC_WAIT_TIMER_HACK(); + } + + /* Prevent reading 1.44MB floppies using 1.2MB read commands and vice versa. + * FIXME: It seems MS-DOS 5.0 booted from a HDI image has trouble understanding + * when Drive A: (the first floppy) is a 1.44MB drive or not and fails + * because it only attempts it using 1.2MB format read commands. */ + if (flags & PC98_FLOPPY_RPM_IBMPC) { + if (img_ssz == 1024) { /* reject 1.2MB 3-mode format */ + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + } + else { + if (img_ssz == 512) { /* reject IBM PC 1.44MB format */ + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + } + + PC98_BIOS_FDC_CALL_GEO_UNPACK(/*&*/fdc_cyl[drive],/*&*/fdc_head[drive],/*&*/fdc_sect[drive],/*&*/fdc_sz[drive]); + unitsize = PC98_FDC_SZ_TO_BYTES(fdc_sz[drive]); + if (0/*unitsize != img_ssz || img_heads == 0 || img_cyl == 0 || img_sect == 0*/) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + size = reg_bx; + while (size > 0) { + accsize = size > unitsize ? unitsize : size; + + if (floppy->Read_Sector(fdc_head[drive],fdc_cyl[drive],fdc_sect[drive],PC98_BIOS_FLOPPY_BUFFER,unitsize) != 0) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + size -= accsize; + + if (size == 0) break; + + if ((++fdc_sect[drive]) > img_sect && img_sect != 0) { + fdc_sect[drive] = 1; + if ((++fdc_head[drive]) >= img_heads && img_heads != 0) { + fdc_head[drive] = 0; + fdc_cyl[drive]++; + } + } + } + + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x02: /* read sectors */ + case 0x06: /* read sectors (what's the difference from 0x02?) */ + /* AH bits[4:4] = If set, seek to track specified */ + /* CL = cylinder (track) */ + /* CH = sector size (0=128 1=256 2=512 3=1024 etc) */ + /* DL = sector number (1-based) */ + /* DH = head */ + /* BX = size (in bytes) of data to read */ + /* ES:BP = buffer to read data into */ + if (floppy == NULL) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); + + if (enable_fdc_timer_hack) { + // Hack for Ys II + FDC_WAIT_TIMER_HACK(); + } + + /* Prevent reading 1.44MB floppies using 1.2MB read commands and vice versa. + * FIXME: It seems MS-DOS 5.0 booted from a HDI image has trouble understanding + * when Drive A: (the first floppy) is a 1.44MB drive or not and fails + * because it only attempts it using 1.2MB format read commands. */ + if (flags & PC98_FLOPPY_RPM_IBMPC) { + if (img_ssz == 1024) { /* reject 1.2MB 3-mode format */ + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + } + else { + if (img_ssz == 512) { /* reject IBM PC 1.44MB format */ + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + } + + PC98_BIOS_FDC_CALL_GEO_UNPACK(/*&*/fdc_cyl[drive],/*&*/fdc_head[drive],/*&*/fdc_sect[drive],/*&*/fdc_sz[drive]); + unitsize = PC98_FDC_SZ_TO_BYTES(fdc_sz[drive]); + if (0/*unitsize != img_ssz || img_heads == 0 || img_cyl == 0 || img_sect == 0*/) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + size = reg_bx; + memaddr = ((unsigned int)SegValue(es) << 4U) + reg_bp; + while (size > 0) { + accsize = size > unitsize ? unitsize : size; + + if (floppy->Read_Sector(fdc_head[drive],fdc_cyl[drive],fdc_sect[drive],PC98_BIOS_FLOPPY_BUFFER,unitsize) != 0) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + for (unsigned int i=0;i < accsize;i++) + mem_writeb(memaddr+i,PC98_BIOS_FLOPPY_BUFFER[i]); + + memaddr += accsize; + size -= accsize; + + if (size == 0) break; + + if ((++fdc_sect[drive]) > img_sect && img_sect != 0) { + fdc_sect[drive] = 1; + if ((++fdc_head[drive]) >= img_heads && img_heads != 0) { + fdc_head[drive] = 0; + fdc_cyl[drive]++; + } + } + } + + /* need to clear DMA terminal count after read as BIOS would, I assume (Arsys Star Cruiser) */ + { + DmaChannel *dma = GetDMAChannel(2); + if (dma) dma->tcount = false; + } + + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x04: /* drive status */ + status = 0; + + /* TODO: bit 4 is set if write protected */ + + if (reg_al & 0x80) { /* high density */ + status |= 0x01; + } + else { /* double density */ + /* TODO: */ + status |= 0x01; + } + + if ((reg_ax & 0x8F40) == 0x8400) { + status |= 8; /* 1MB/640KB format, spindle speed for 3-mode */ + if (reg_ah & 0x40) /* DOSBox-X always supports 1.44MB */ + status |= 4; /* 1.44MB format, spindle speed for IBM PC format */ + } + + if (floppy == NULL) + status |= 0xC0; + + reg_ah = status; + CALLBACK_SCF(false); + break; + /* TODO: 0x00 = seek to track (in CL) */ + /* TODO: 0x01 = test read? */ + /* TODO: 0x03 = equipment flags? */ + /* TODO: 0x04 = format detect? */ + /* TODO: 0x05 = write disk */ + /* TODO: 0x07 = recalibrate (seek to track 0) */ + /* TODO: 0x0A = Read ID */ + /* TODO: 0x0D = Format track */ + /* TODO: 0x0E = ?? */ + case 0x05: /* write sectors */ + /* AH bits[4:4] = If set, seek to track specified */ + /* CL = cylinder (track) */ + /* CH = sector size (0=128 1=256 2=512 3=1024 etc) */ + /* DL = sector number (1-based) */ + /* DH = head */ + /* BX = size (in bytes) of data to read */ + /* ES:BP = buffer to write data from */ + if (floppy == NULL) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); + + if (enable_fdc_timer_hack) { + // Hack for Ys II + FDC_WAIT_TIMER_HACK(); + } + + /* TODO: Error if write protected */ + + PC98_BIOS_FDC_CALL_GEO_UNPACK(/*&*/fdc_cyl[drive],/*&*/fdc_head[drive],/*&*/fdc_sect[drive],/*&*/fdc_sz[drive]); + unitsize = PC98_FDC_SZ_TO_BYTES(fdc_sz[drive]); + if (0/*unitsize != img_ssz || img_heads == 0 || img_cyl == 0 || img_sect == 0*/) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + size = reg_bx; + memaddr = ((unsigned int)SegValue(es) << 4U) + reg_bp; + while (size > 0) { + accsize = size > unitsize ? unitsize : size; + + for (unsigned int i=0;i < accsize;i++) + PC98_BIOS_FLOPPY_BUFFER[i] = mem_readb(memaddr+i); + + if (floppy->Write_Sector(fdc_head[drive],fdc_cyl[drive],fdc_sect[drive],PC98_BIOS_FLOPPY_BUFFER,unitsize) != 0) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + memaddr += accsize; + size -= accsize; + + if (size == 0) break; + + if ((++fdc_sect[drive]) > img_sect && img_sect != 0) { + fdc_sect[drive] = 1; + if ((++fdc_head[drive]) >= img_heads && img_heads != 0) { + fdc_head[drive] = 0; + fdc_cyl[drive]++; + } + } + } + + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x07: /* recalibrate (seek to track 0) */ + if (floppy == NULL) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + if (enable_fdc_timer_hack) { + // Hack for Ys II + FDC_WAIT_TIMER_HACK(); + } + + fdc_cyl[drive] = 0; + + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x0D: /* format track */ + if (floppy == NULL) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + PC98_BIOS_FDC_CALL_GEO_UNPACK(/*&*/fdc_cyl[drive],/*&*/fdc_head[drive],/*&*/fdc_sect[drive],/*&*/fdc_sz[drive]); + unitsize = PC98_FDC_SZ_TO_BYTES(fdc_sz[drive]); + + if (enable_fdc_timer_hack) { + // Hack for Ys II + FDC_WAIT_TIMER_HACK(); + } + + LOG_MSG("WARNING: INT 1Bh FDC format track command not implemented. Formatting is faked, for now on C/H/S/sz %u/%u/%u/%u drive %c.", + (unsigned int)fdc_cyl[drive], + (unsigned int)fdc_head[drive], + (unsigned int)fdc_sect[drive], + (unsigned int)unitsize, + drive + 'A'); + + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x0A: /* read ID */ + /* NTS: PC-98 "MEGDOS" used by some games seems to rely heavily on this call to + * verify the floppy head is where it thinks it should be! */ + if (floppy == NULL) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + floppy->Get_Geometry(&img_heads, &img_cyl, &img_sect, &img_ssz); + + if (enable_fdc_timer_hack) { + // Hack for Ys II + FDC_WAIT_TIMER_HACK(); + } + + if (reg_ah & 0x10) { // seek to track number in CL + if (img_cyl != 0 && reg_cl >= img_cyl) { + CALLBACK_SCF(true); + reg_ah = 0x00; + /* TODO? Error code? */ + return; + } + + fdc_cyl[drive] = reg_cl; + } + + if (fdc_sect[drive] == 0) + fdc_sect[drive] = 1; + + if (img_ssz >= 1024) + fdc_sz[drive] = 3; + else if (img_ssz >= 512) + fdc_sz[drive] = 2; + else if (img_ssz >= 256) + fdc_sz[drive] = 1; + else + fdc_sz[drive] = 0; + + reg_cl = fdc_cyl[drive]; + reg_dh = fdc_head[drive]; + reg_dl = fdc_sect[drive]; + /* ^ FIXME: A more realistic emulation would return a random number from 1 to N + * where N=sectors/track because the floppy motor is running and tracks + * are moving past the head. */ + reg_ch = fdc_sz[drive]; + + /* per read ID call, increment the sector through the range on disk. + * This is REQUIRED or else MEGDOS will not attempt to read this disk. */ + if (img_sect != 0) { + if ((++fdc_sect[drive]) > img_sect) + fdc_sect[drive] = 1; + } + + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + default: + LOG_MSG("PC-98 INT 1Bh unknown FDC BIOS call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + CALLBACK_SCF(true); + break; + } +} + +static Bitu INT19_PC98_Handler(void) { + LOG_MSG("PC-98 INT 19h unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + + return CBRET_NONE; +} + +static Bitu INT1A_PC98_Handler(void) { + /* HACK: This makes the "test" program in DOSLIB work. + * We'll remove this when we implement INT 1Ah */ + if (reg_ax == 0x1000) { + CALLBACK_SCF(false); + reg_ax = 0; + } + + LOG_MSG("PC-98 INT 1Ah unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + + return CBRET_NONE; +} + +static Bitu INT1B_PC98_Handler(void) { + /* As BIOS interfaces for disk I/O go, this is fairly unusual */ + switch (reg_al & 0xF0) { + /* floppy disk access */ + /* AL bits[1:0] = floppy drive number */ + /* Uses INT42 if high density, INT41 if double density */ + /* AH bits[3:0] = command */ + case 0x90: /* 1.2MB HD */ + PC98_BIOS_FDC_CALL(PC98_FLOPPY_HIGHDENSITY|PC98_FLOPPY_2HEAD|PC98_FLOPPY_RPM_3MODE); + break; + case 0x30: /* 1.44MB HD (NTS: not supported until the early 1990s) */ + case 0xB0: + PC98_BIOS_FDC_CALL(PC98_FLOPPY_HIGHDENSITY|PC98_FLOPPY_2HEAD|PC98_FLOPPY_RPM_IBMPC); + break; + case 0x70: /* 720KB DD (??) */ + case 0xF0: + PC98_BIOS_FDC_CALL(PC98_FLOPPY_2HEAD|PC98_FLOPPY_RPM_3MODE); // FIXME, correct?? + break; + case 0x20: /* SCSI hard disk BIOS */ + case 0xA0: /* SCSI hard disk BIOS */ + case 0x00: /* SASI hard disk BIOS */ + case 0x80: /* SASI hard disk BIOS */ + PC98_BIOS_SCSI_CALL(); + break; + /* TODO: Other disk formats */ + /* TODO: Future SASI/SCSI BIOS emulation for hard disk images */ + default: + LOG_MSG("PC-98 INT 1Bh unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + CALLBACK_SCF(true); + break; + } + + return CBRET_NONE; +} + +void PC98_Interval_Timer_Continue(void) { + /* assume: interrupts are disabled */ + IO_WriteB(0x71,0x00); + // TODO: What time interval is this supposed to be? + if (PIT_TICK_RATE == PIT_TICK_RATE_PC98_8MHZ) + IO_WriteB(0x71,0x4E); + else + IO_WriteB(0x71,0x60); + + IO_WriteB(0x02,IO_ReadB(0x02) & (~(1u << /*IRQ*/0u))); // unmask IRQ0 +} + +unsigned char pc98_dec2bcd(unsigned char c) { + return ((c / 10u) << 4u) + (c % 10u); +} + +static Bitu INT1C_PC98_Handler(void) { + if (reg_ah == 0x00) { /* get time and date */ + time_t curtime; + const struct tm *loctime; + curtime = time (NULL); + loctime = localtime (&curtime); + + unsigned char tmp[6]; + + tmp[0] = pc98_dec2bcd((unsigned int)loctime->tm_year % 100u); + tmp[1] = (((unsigned int)loctime->tm_mon + 1u) << 4u) + (unsigned int)loctime->tm_wday; + tmp[2] = pc98_dec2bcd(loctime->tm_mday); + tmp[3] = pc98_dec2bcd(loctime->tm_hour); + tmp[4] = pc98_dec2bcd(loctime->tm_min); + tmp[5] = pc98_dec2bcd(loctime->tm_sec); + + unsigned long mem = ((unsigned int)SegValue(es) << 4u) + reg_bx; + + for (unsigned int i=0;i < 6;i++) + mem_writeb(mem+i,tmp[i]); + } + else if (reg_ah == 0x02) { /* set interval timer (single event) */ + /* es:bx = interrupt handler to execute + * cx = timer interval in ticks (FIXME: what units of time?) */ + mem_writew(0x1C,reg_bx); + mem_writew(0x1E,SegValue(es)); + mem_writew(0x58A,reg_cx); + + IO_WriteB(0x77,0x36); /* mode 3, binary, low-byte high-byte 16-bit counter */ + + PC98_Interval_Timer_Continue(); + } + else if (reg_ah == 0x03) { /* continue interval timer */ + PC98_Interval_Timer_Continue(); + } + /* TODO: According to the PDF at + * + * http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20NEC%20PC%2d98/Collections/PC%2d9801%20Bible%20%e6%9d%b1%e4%ba%ac%e7%90%86%e7%a7%91%e5%a4%a7%e5%ad%a6EIC%20%281994%29%2epdf + * + * There are additional functions + * + * AH = 04h + * ES:BX = ? + * + * --- + * + * AH = 05h + * ES:BX = ? + * + * --- + * + * AH = 06h + * CX = ? (1-FFFFh) + * DX = ? (20h-8000h Hz) + * + * If any PC-98 games or applications rely on this, let me know. Adding a case for them is easy enough if anyone is interested. --J.C. + */ + else { + LOG_MSG("PC-98 INT 1Ch unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + } + + return CBRET_NONE; +} + +// NTS: According to this PDF, chapter 5, INT 1Dh has additional functions on "High Resolution" PC-98 systems. +// [https://ia801305.us.archive.org/8/items/PC9800TechnicalDataBookBIOS1992/PC-9800TechnicalDataBook_BIOS_1992_text.pdf] +static Bitu INT1D_PC98_Handler(void) { + LOG_MSG("PC-98 INT 1Dh unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + + return CBRET_NONE; +} + +static Bitu INT1E_PC98_Handler(void) { + LOG_MSG("PC-98 INT 1Eh unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + + return CBRET_NONE; +} + +void PC98_EXTMEMCPY(void) { + bool enabled = MEM_A20_Enabled(); + MEM_A20_Enable(true); + + Bitu bytes = ((reg_cx - 1u) & 0xFFFFu) + 1u; // bytes, except that 0 == 64KB + PhysPt data = SegPhys(es)+reg_bx; + PhysPt source = (mem_readd(data + 0x12u) & 0x00FFFFFFu) + ((unsigned int)mem_readb(data + 0x17u) << 24u) + reg_si; + PhysPt dest = (mem_readd(data + 0x1Au) & 0x00FFFFFFu) + ((unsigned int)mem_readb(data + 0x1Fu) << 24u) + reg_di; + + LOG_MSG("PC-98 memcpy: src=0x%x dst=0x%x data=0x%x count=0x%x", + (unsigned int)source,(unsigned int)dest,(unsigned int)data,(unsigned int)bytes); + + MEM_BlockCopy(dest,source,bytes); + MEM_A20_Enable(enabled); + Segs.limit[cs] = 0xFFFF; + Segs.limit[ds] = 0xFFFF; + Segs.limit[es] = 0xFFFF; + Segs.limit[ss] = 0xFFFF; + + CALLBACK_SCF(false); +} + +static Bitu INT1F_PC98_Handler(void) { + switch (reg_ah) { + case 0x90: + /* Copy extended memory */ + PC98_EXTMEMCPY(); + break; + default: + LOG_MSG("PC-98 INT 1Fh unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + CALLBACK_SCF(true); + break; + } + + return CBRET_NONE; +} + +static Bitu INTGEN_PC98_Handler(void) { + LOG_MSG("PC-98 INT stub unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + + return CBRET_NONE; +} + +/* This interrupt should only exist while the DOS kernel is active. + * On actual PC-98 MS-DOS this is a direct interface to MS-DOS's built-in ANSI CON driver. + * + * CL = major function call number + * AH = minor function call number + * DX = data?? */ + +void PC98_INTDC_WriteChar(unsigned char b); + +void INTDC_LOAD_FUNCDEC(pc98_func_key_shortcut_def &def,const Bitu ofs) { + unsigned int i; + + for (i=0;i < 0x0F;i++) + def.shortcut[i] = mem_readb(ofs+0x0+i); + + for (i=0;i < 0x0F && def.shortcut[i] != 0;) i++; + def.length = i; +} + +void INTDC_STORE_FUNCDEC(const Bitu ofs,const pc98_func_key_shortcut_def &def) { + for (unsigned int i=0;i < 0x0F;i++) mem_writeb(ofs+0x0+i,def.shortcut[i]); + mem_writeb(ofs+0xF,0); +} + +void INTDC_LOAD_EDITDEC(pc98_func_key_shortcut_def &def,const Bitu ofs) { + unsigned int i; + + for (i=0;i < 0x05;i++) + def.shortcut[i] = mem_readb(ofs+0x0+i); + + for (i=0;i < 0x05 && def.shortcut[i] != 0;) i++; + def.length = i; +} + +void INTDC_STORE_EDITDEC(const Bitu ofs,const pc98_func_key_shortcut_def &def) { + for (unsigned int i=0;i < 0x05;i++) mem_writeb(ofs+0x0+i,def.shortcut[i]); + mem_writeb(ofs+0x5,0); +} + +bool inhibited_ControlFn(void) { + return real_readb(0x60,0x10C) & 0x01; +} + +static const char *fneditkeys[11] = { + "ROLLUP", + "ROLLDOWN", + "INS", + "DEL", + "UPARROW", + "LEFTARROW", + "RIGHTARROW", + "DOWNARROW", + "HOMECLR", + "HELP", + "KEYPAD-" +}; + +void DEBUG_INTDC_FnKeyMapInfo(void) { + if (!IS_PC98_ARCH) { + DEBUG_ShowMsg("INT DCh has no meaning except in PC-98 mode"); + } + else if (dos_kernel_disabled) { + DEBUG_ShowMsg("INT DCh FnKey mapping has no meaning outside the DOS environment"); + } + else { + DEBUG_ShowMsg("INT DCh FnKey mapping. Ctrl+Fn builtin inhibited=%s",inhibited_ControlFn()?"yes":"no"); + for (unsigned int i=0;i < 10;i++) + DEBUG_ShowMsg(" F%u: %s",i+1,pc98_func_key[i].debugToString().c_str()); + for (unsigned int i=0;i < 5;i++) + DEBUG_ShowMsg(" VF%u: %s",i+1,pc98_vfunc_key[i].debugToString().c_str()); + + for (unsigned int i=0;i < 10;i++) + DEBUG_ShowMsg(" Shift+F%u: %s",i+1,pc98_func_key_shortcut[i].debugToString().c_str()); + for (unsigned int i=0;i < 5;i++) + DEBUG_ShowMsg(" Shift+VF%u: %s",i+1,pc98_vfunc_key_shortcut[i].debugToString().c_str()); + + for (unsigned int i=0;i < 10;i++) + DEBUG_ShowMsg(" Control+F%u: %s",i+1,pc98_func_key_ctrl[i].debugToString().c_str()); + for (unsigned int i=0;i < 5;i++) + DEBUG_ShowMsg(" Control+VF%u: %s",i+1,pc98_vfunc_key_ctrl[i].debugToString().c_str()); + + for (unsigned int i=0;i < 11;i++) + DEBUG_ShowMsg(" %s: %s",fneditkeys[i],pc98_editor_key_escapes[i].debugToString().c_str()); + } +} + +/* PC-98 application notes, that are NOT DOSBox-X bugs because they occur on real MS-DOS as well: + * + * VZ.COM - If the function key row was hidden when VZ.COM is started, VZ.COM will not restore the + * function key row. VZ.COM's function key shortcuts affect Fn and Shift+Fn keys and the + * text they display even if VZ.COM also disables the Ctrl+F7 shortcut that lets you + * toggle the function key row, which makes displaying the Shift+Fn key shortcuts impossible + * unless the function key row was left showing that at startup. + */ + +static Bitu INTDC_PC98_Handler(void) { + if (dos_kernel_disabled) goto unknown; + + switch (reg_cl) { + /* Tracking implementation according to [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20NEC%20PC%2d98/Collections/Undocumented%209801%2c%209821%20Volume%201%20English%20translation/INTDC%2eTXT] */ + case 0x0C: /* CL=0x0C General entry point to read function key state */ +/*=================================================================================================== +Table [List of key specification values and corresponding keys] + ------------------------+--------------------------------------------------- + Key specification value | Corresponding key + ------------------------+--------------------------------------------------- + 0000h | [f・1] to [f・10], [SHIFT] + [f・1] to [SHIFT] + [f・10], + | [ROLL UP], [ROLL DOWN], [INS], [DEL], [↑], [←], [→], [↓], + | [HOME/CLR], [HELP], [SHIFT] + [HOME/CLR] + 0001 to 000Ah | [f・1] to [f・10] + 000B to 0014h | [SHIFT] + [f・1] to [SHIFT] + [f・10] + 0015h | [ROLL UP] + 0016h | [ROLL DOWN] + 0017h | [INS] + 0018h | [DEL] + 0019h | [↑] + 001Ah | [←] + 001Bh | [→] + 001Ch | [↓] + 001Dh | [HOME/CLR](XA keyboard:[CLR]) + 001Eh | [HELP] + 001Fh | [SHIFT]+[HOME/CLR](XA keyboard:[HOME]) + 0020-0024h | [vf・1]-[vf・5] + 0025-0029h | [SHIFT]+[vf・1]-[vf・5] + 002A-0033h | [CTRL]+[f・1]-[f・10] + 0034-0038h | [CTRL]+[vf・1]-[vf・5] + 0039h | [CTRL]+[XFER]/[NFER] (Undocumented) + 003Ah | [CTRL]+[XFER]/[NFER],[CTRL]+[f・1]~[f・10] + | (Undocumented) + 00FFh | [f・1]〜[f・10],[vf・1]〜[vf・5], + | [SHIFT]+[f・1]〜[SHIFT]+[f・10],[SHIFT]+[vf・1]〜[vf・5], + | [ROLL UP],[ROLL DOWN],[INS],[DEL],[↑],[←],[→],[↓], + | [HOME/CLR],[HELP],[SHIFT]+[HOME/CLR], + | [CTRL]+[f・1] to [f・10], [CTRL]+[vf・1] to [vf・5] + ------------------------+--------------------------------------------------- + + Table [Supported range of key specification values for each MS-DOS version] + ------------------------+---+---+---+---+---+---+---+---+-----+ + Key specification value | MS-DOS version (PS98-XXX) + |111|121|122|123|125|127|129|011|XA125 + ------------------------+---+---+---+---+---+---+---+---+-----+ + 0000 to 001Fh | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ + 0020 to 0029h | × | × | × | × | × | × | × | ○ | ○ + 002A-0033h | × | × | × | × | ○ | ○ | ○ | ○ | △ + 0034-0038h | × | × | × | × | × | × | × | ○ | △ + 0039h | × | × | × | × | × | ○ | ○ | ○ | × + 003Ah | × | × | × | × | ○ | ○ | ○ | ○ | × + 00FFh | × | × | × | × | × | × | × | ○ | ○ + ------------------------+---+---+---+---+---+---+---+---+-----+ + * PC-98LT/HA is the same as PS98-127. + * MS-DOS 3.3(all), 5.0, 5.0A is the same as PS98-011. + * For the PS98-XA125 triangle mark, the keys are as follows. + Key values 002B to 0033h specify [CTRL]+[f・1] to [f・9]. + Key values 0035 to 0038h specify [CTRL]+[vf・1] to [vf・4]. +=============================================================================================== + * NTS: According to a translation table in the MS-DOS kernel, where + * AX=1h to AX=29h inclusive look up from this 0x29-element table: + * + * Table starts with AX=1h, ends with AX=29h + * + * 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 + * | | | | | | | | | | | | | | | | + * 0ADC:00003DE0 01 02 03 04 05 06 07 08 09 0A 10 11 12 13 14 15 ................ + * 0ADC:00003DF0 16 17 18 19 1F 20 21 22 23 24 25 26 27 28 29 0B ..... !"#$%&'(). + * 0ADC:00003E00 0C 0D 0E 0F 1A 1B 1C 1D 1E| + * + * The table is read, then the byte is decremented by one. + * + * If the result of that is less than 0x1E, it's an index into + * the 16 byte/entry Fn key table. + * + * If the result is 0x1E or larger, then (result - 0x1E) is an + * index into the editor table, 8 bytes/entry. + * + * Meanings: + * + * 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 + * | | | | | | | | | | | | | | | | + * 0ADC:00003DE0 01 02 03 04 05 06 07 08 09 0A 10 11 12 13 14 15 ................ + * | --- Function keys F1-F10 ---| Fn shift F1-F6 - + * 0ADC:00003DF0 16 17 18 19 1F 20 21 22 23 24 25 26 27 28 29 0B ..... !"#$%&'(). + * | Sh F7-F10 | ------- EDITOR KEYS -----------| - + * 0ADC:00003E00 0C 0D 0E 0F 1A 1B 1C 1D 1E| + * | --------- | ------------ | +===============================================================================================*/ + if (reg_ax == 0x00) { /* Read all state, DS:DX = data to store to */ +/*============================================================================================= + DS:DX contains + +Table [Programmable key setting data buffer structure] + (1) Key specification value 0000h + -------+--------------------+-------------------------------------- + Offset | Key type | Size of key setting data + -------+--------------------+-------------------------------------- + +0000h | [f・1] | 16 bytes (15 bytes of key setting data + 00h) + +0010h | [f・2] | 16 bytes (15 bytes of key setting data + 00h) + +0020h | [f・3] | 16 bytes (15 bytes of key setting data + 00h) + +0030h | [f・4] | 16 bytes (15 bytes of key setting data + 00h) + +0040h | [f・5] | 16 bytes (15 bytes of key setting data + 00h) + +0050h | [f・6] | 16 bytes (15 bytes of key setting data + 00h) + +0060h | [f・7] | 16 bytes (15 bytes of key setting data + 00h) + +0070h | [f・8] | 16 bytes (15 bytes of key setting data + 00h) + +0080h | [f・9] | 16 bytes (15 bytes of key setting data + 00h) + +0090h | [f・10] | 16 bytes (15 bytes of key setting data + 00h) + +00A0h | [SHIFT]+[f・1] | 16 bytes (15 bytes of key setting data + 00h) + +00B0h | [SHIFT]+[f・2] | 16 bytes (15 bytes of key setting data + 00h) + +00C0h | [SHIFT]+[f・3] | 16 bytes (15 bytes of key setting data + 00h) + +00D0h | [SHIFT]+[f・4] | 16 bytes (15 bytes of key setting data + 00h) + +00E0h | [SHIFT]+[f・5] | 16 bytes (15 bytes of key setting data + 00h) + +00F0h | [SHIFT]+[f・6] | 16 bytes (15 bytes of key setting data + 00h) + +0100h | [SHIFT]+[f・7] | 16 bytes (15 bytes of key setting data + 00h) + +0110h | [SHIFT]+[f・8] | 16 bytes (15 bytes of key setting data + 00h) + +0120h | [SHIFT]+[f・9] | 16 bytes (15 bytes of key setting data + 00h) + +0130h | [SHIFT]+[f・10] | 16 bytes (15 bytes of key setting data + 00h) + +0140h | [ROLL UP] | 6 bytes (5 bytes of key setting data + 00h) + +0146h | [ROLL DOWN] | 6 bytes (5 bytes of key setting data + 00h) + +014Ch | [INS] | 6 bytes (5 bytes of key setting data + 00h) + +0152h | [DEL] | 6 bytes (5 bytes of key setting data + 00h) + +0158h | [↑] | 6 bytes (5 bytes of key setting data + 00h) + +015Eh | [←] | 6 bytes (5 bytes of key setting data + 00h) + +0164h | [→] | 6 bytes (5 bytes of key setting data + 00h) + +016Ah | [↓] | 6 bytes (5 bytes of key setting data + 00h) + +0170h | [HOME/CLR] | 6 bytes (5 bytes of key setting data + 00h) + +0176h | [HELP] | 6 bytes (5 bytes of key setting data + 00h) + +017Ch | [SHIFT]+[HOME/CLR] | 6 bytes (5 bytes of key setting data + 00h) + -------+--------------------+-------------------------------------- +===============================================================================================*/ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + + /* function keys F1-F10 */ + for (unsigned int f=0;f < 10;f++,ofs += 16) + INTDC_STORE_FUNCDEC(ofs,pc98_func_key[f]); + /* function keys Shift+F1 - Shift+F10 */ + for (unsigned int f=0;f < 10;f++,ofs += 16) + INTDC_STORE_FUNCDEC(ofs,pc98_func_key_shortcut[f]); + /* editor keys */ + for (unsigned int f=0;f < 11;f++,ofs += 6) + INTDC_STORE_EDITDEC(ofs,pc98_editor_key_escapes[f]); + + goto done; + } + else if (reg_ax >= 0x01 && reg_ax <= 0x0A) { /* Read individual function keys, DS:DX = data to store to */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_STORE_FUNCDEC(ofs,pc98_func_key[reg_ax - 0x01]); + goto done; + } + else if (reg_ax >= 0x0B && reg_ax <= 0x14) { /* Read individual shift + function keys, DS:DX = data to store to */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_STORE_FUNCDEC(ofs,pc98_func_key_shortcut[reg_ax - 0x0B]); + goto done; + } + else if (reg_ax >= 0x15 && reg_ax <= 0x1F) { /* Read individual editor keys, DS:DX = data to store to */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_STORE_EDITDEC(ofs,pc98_editor_key_escapes[reg_ax - 0x15]); + goto done; + } + else if (reg_ax >= 0x20 && reg_ax <= 0x24) { /* Read VF1-VF5 keys, DS:DX = data to store to */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_STORE_FUNCDEC(ofs,pc98_vfunc_key[reg_ax - 0x20]); + goto done; + } + else if (reg_ax >= 0x25 && reg_ax <= 0x29) { /* Read shift VF1-VF5 keys, DS:DX = data to store to */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_STORE_FUNCDEC(ofs,pc98_vfunc_key_shortcut[reg_ax - 0x25]); + goto done; + } + else if (reg_ax >= 0x2A && reg_ax <= 0x33) { /* Read individual function keys, DS:DX = data to store to */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_STORE_FUNCDEC(ofs,pc98_func_key_ctrl[reg_ax - 0x2A]); + goto done; + } + else if (reg_ax >= 0x34 && reg_ax <= 0x38) { /* Read control VF1-VF5 keys, DS:DX = data to store to */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_STORE_FUNCDEC(ofs,pc98_vfunc_key_ctrl[reg_ax - 0x34]); + goto done; + } + else if (reg_ax == 0xFF) { /* Extended version of the API when AX == 0, DS:DX = data to store to */ + /* DS:DX contains + * 16*10 bytes, 16 bytes per entry for function keys F1-F10 + * 16*5 bytes, 16 bytes per entry for VF1-VF5 + * 16*10 bytes, 16 bytes per entry for function key shortcuts Shift+F1 to Shift+F10 + * 16*5 bytes, 16 bytes per entry for shift VF1-VF5 + * 6*11 bytes, 6 bytes per entry for editor keys + * 16*10 bytes, 16 bytes per entry for function key shortcuts Control+F1 to Control+F10 + * 16*5 bytes, 16 bytes per entry for control VF1-VF5 + * + * For whatever reason, the buffer is copied to the DOS buffer +1, meaning that on write it skips the 0x08 byte. */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + + /* function keys F1-F10 */ + for (unsigned int f=0;f < 10;f++,ofs += 16) + INTDC_STORE_FUNCDEC(ofs,pc98_func_key[f]); + /* VF1-VF5 */ + for (unsigned int f=0;f < 5;f++,ofs += 16) + INTDC_STORE_FUNCDEC(ofs,pc98_vfunc_key[f]); + /* function keys Shift+F1 - Shift+F10 */ + for (unsigned int f=0;f < 10;f++,ofs += 16) + INTDC_STORE_FUNCDEC(ofs,pc98_func_key_shortcut[f]); + /* VF1-VF5 */ + for (unsigned int f=0;f < 5;f++,ofs += 16) + INTDC_STORE_FUNCDEC(ofs,pc98_vfunc_key_shortcut[f]); + /* editor keys */ + for (unsigned int f=0;f < 11;f++,ofs += 6) + INTDC_STORE_EDITDEC(ofs,pc98_editor_key_escapes[f]); + /* function keys Control+F1 - Control+F10 */ + for (unsigned int f=0;f < 10;f++,ofs += 16) + INTDC_STORE_FUNCDEC(ofs,pc98_func_key_ctrl[f]); + /* VF1-VF5 */ + for (unsigned int f=0;f < 5;f++,ofs += 16) + INTDC_STORE_FUNCDEC(ofs,pc98_vfunc_key_ctrl[f]); + + goto done; + } + goto unknown; + case 0x0D: /* CL=0x0D General entry point to set function key state */ + if (reg_ax == 0xFF) { /* Extended version of the API when AX == 0, DS:DX = data to set */ + /* DS:DX contains + * 16*10 bytes, 16 bytes per entry for function keys F1-F10 + * 16*5 bytes, 16 bytes per entry for VF1-VF5 + * 16*10 bytes, 16 bytes per entry for function key shortcuts Shift+F1 to Shift+F10 + * 16*5 bytes, 16 bytes per entry for shift VF1-VF5 + * 6*11 bytes, 6 bytes per entry for editor keys + * 16*10 bytes, 16 bytes per entry for function key shortcuts Control+F1 to Control+F10 + * 16*5 bytes, 16 bytes per entry for control VF1-VF5 + * + * For whatever reason, the buffer is copied to the DOS buffer +1, meaning that on write it skips the 0x08 byte. */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + + /* function keys F1-F10 */ + for (unsigned int f=0;f < 10;f++,ofs += 16) + INTDC_LOAD_FUNCDEC(pc98_func_key[f],ofs); + /* VF1-VF5 */ + for (unsigned int f=0;f < 5;f++,ofs += 16) + INTDC_LOAD_FUNCDEC(pc98_vfunc_key[f],ofs); + /* function keys Shift+F1 - Shift+F10 */ + for (unsigned int f=0;f < 10;f++,ofs += 16) + INTDC_LOAD_FUNCDEC(pc98_func_key_shortcut[f],ofs); + /* Shift+VF1 - Shift+VF5 */ + for (unsigned int f=0;f < 5;f++,ofs += 16) + INTDC_LOAD_FUNCDEC(pc98_vfunc_key_shortcut[f],ofs); + /* editor keys */ + for (unsigned int f=0;f < 11;f++,ofs += 6) + INTDC_LOAD_EDITDEC(pc98_editor_key_escapes[f],ofs); + /* function keys Control+F1 - Control+F10 */ + for (unsigned int f=0;f < 10;f++,ofs += 16) + INTDC_LOAD_FUNCDEC(pc98_func_key_ctrl[f],ofs); + /* Shift+VF1 - Shift+VF5 */ + for (unsigned int f=0;f < 5;f++,ofs += 16) + INTDC_LOAD_FUNCDEC(pc98_vfunc_key_ctrl[f],ofs); + + update_pc98_function_row(pc98_function_row_mode,true); + goto done; + } + else if (reg_ax >= 0x01 && reg_ax <= 0x0A) { /* Write individual function keys, DS:DX = data to set */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_LOAD_FUNCDEC(pc98_func_key[reg_ax - 0x01],ofs); + update_pc98_function_row(pc98_function_row_mode,true); + goto done; + } + else if (reg_ax >= 0x0B && reg_ax <= 0x14) { /* Write individual shift + function keys, DS:DX = data to set */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_LOAD_FUNCDEC(pc98_func_key_shortcut[reg_ax - 0x0B],ofs); + update_pc98_function_row(pc98_function_row_mode,true); + goto done; + } + else if (reg_ax >= 0x15 && reg_ax <= 0x1F) { /* Write individual editor keys, DS:DX = data to set */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_LOAD_EDITDEC(pc98_editor_key_escapes[reg_ax - 0x15],ofs); + update_pc98_function_row(pc98_function_row_mode,true); + goto done; + } + else if (reg_ax >= 0x20 && reg_ax <= 0x24) { /* Write VF1-VF5 keys, DS:DX = data to set */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_LOAD_FUNCDEC(pc98_vfunc_key[reg_ax - 0x20],ofs); + update_pc98_function_row(pc98_function_row_mode,true); + goto done; + } + else if (reg_ax >= 0x25 && reg_ax <= 0x29) { /* Write shift VF1-VF5 keys, DS:DX = data to set */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_LOAD_FUNCDEC(pc98_vfunc_key_shortcut[reg_ax - 0x25],ofs); + update_pc98_function_row(pc98_function_row_mode,true); + goto done; + } + else if (reg_ax >= 0x2A && reg_ax <= 0x33) { /* Write individual function keys, DS:DX = data to set */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_LOAD_FUNCDEC(pc98_func_key_ctrl[reg_ax - 0x2A],ofs); + update_pc98_function_row(pc98_function_row_mode,true); + goto done; + } + else if (reg_ax >= 0x34 && reg_ax <= 0x38) { /* Write control VF1-VF5 keys, DS:DX = data to set */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + INTDC_LOAD_FUNCDEC(pc98_vfunc_key_ctrl[reg_ax - 0x34],ofs); + update_pc98_function_row(pc98_function_row_mode,true); + goto done; + } + else if (reg_ax == 0x00) { /* Write all state, DS:DX = data to set */ + /* DS:DX contains + * 16*10 bytes, 16 bytes per entry for function keys F1-F10 + * 16*10 bytes, 16 bytes per entry for function key shortcuts Shift+F1 to Shift+F10 + * 6*11 bytes, 6 bytes per entry of editor keys (INS, DEL, etc) that match a specific scan code range + * + * For whatever reason, the buffer is copied to the DOS buffer +1, meaning that on write it skips the 0x08 byte. */ + Bitu ofs = (Bitu)(SegValue(ds) << 4ul) + (Bitu)reg_dx; + + /* function keys F1-F10 */ + for (unsigned int f=0;f < 10;f++,ofs += 16) + INTDC_LOAD_FUNCDEC(pc98_func_key[f],ofs); + /* function keys Shift+F1 - Shift+F10 */ + for (unsigned int f=0;f < 10;f++,ofs += 16) + INTDC_LOAD_FUNCDEC(pc98_func_key_shortcut[f],ofs); + /* editor keys */ + for (unsigned int f=0;f < 11;f++,ofs += 6) + INTDC_LOAD_EDITDEC(pc98_editor_key_escapes[f],ofs); + + update_pc98_function_row(pc98_function_row_mode,true); + goto done; + } + goto unknown; + case 0x0F: + if (reg_ax == 0) { /* inhibit Control+Fn shortcuts */ + real_writeb(0x60,0x10C,real_readb(0x60,0x10C) | 0x01); + goto done; + } + else if (reg_ax == 1) { /* enable Control+Fn shortcuts */ + real_writeb(0x60,0x10C,real_readb(0x60,0x10C) & (~0x01)); + goto done; + } + goto unknown; + case 0x10: + if (reg_ah == 0x00) { /* CL=0x10 AH=0x00 DL=char write char to CON */ + PC98_INTDC_WriteChar(reg_dl); + goto done; + } + else if (reg_ah == 0x01) { /* CL=0x10 AH=0x01 DS:DX write string to CON */ + /* According to the example at http://tepe.tec.fukuoka-u.ac.jp/HP98/studfile/grth/gt10.pdf + * the string ends in '$' just like the main DOS string output function. */ + uint16_t ofs = reg_dx; + do { + unsigned char c = real_readb(SegValue(ds),ofs++); + if (c == '$') break; + PC98_INTDC_WriteChar(c); + } while (1); + goto done; + } + else if (reg_ah == 0x02) { /* CL=0x10 AH=0x02 DL=attribute set console output attribute */ + /* Ref: https://nas.jmc/jmcs/docs/browse/Computer/Platform/PC%2c%20NEC%20PC%2d98/Collections/Undocumented%209801%2c%209821%20Volume%202%20%28webtech.co.jp%29%20English%20translation/memdos%2eenglish%2dgoogle%2dtranslate%2etxt + * + * DL is the attribute byte (in the format written directly to video RAM, not the ANSI code) + * + * NTS: Reverse engineering INT DCh shows it sets both 71Dh and 73Ch as below */ + real_writeb(0x60,0x11D,reg_dl); + real_writeb(0x60,0x13C,reg_dx); + goto done; + } + else if (reg_ah == 0x03) { /* CL=0x10 AH=0x03 DL=X-coord DH=Y-coord set cursor position */ + void INTDC_CL10h_AH03h(uint16_t raw); + INTDC_CL10h_AH03h(reg_dx); + goto done; + } + else if (reg_ah == 0x04) { /* CL=0x10 AH=0x04 Move cursor down one line */ + void INTDC_CL10h_AH04h(void); + INTDC_CL10h_AH04h(); + goto done; + } + else if (reg_ah == 0x05) { /* CL=0x10 AH=0x05 Move cursor up one line */ + void INTDC_CL10h_AH05h(void); + INTDC_CL10h_AH05h(); + goto done; + } + else if (reg_ah == 0x06) { /* CL=0x10 AH=0x06 DX=count Move cursor up multiple lines */ + void INTDC_CL10h_AH06h(uint16_t count); + INTDC_CL10h_AH06h(reg_dx); + goto done; + } + else if (reg_ah == 0x07) { /* CL=0x10 AH=0x07 DX=count Move cursor down multiple lines */ + void INTDC_CL10h_AH07h(uint16_t count); + INTDC_CL10h_AH07h(reg_dx); + goto done; + } + else if (reg_ah == 0x08) { /* CL=0x10 AH=0x08 DX=count Move cursor right multiple lines */ + void INTDC_CL10h_AH08h(uint16_t count); + INTDC_CL10h_AH08h(reg_dx); + goto done; + } + else if (reg_ah == 0x09) { /* CL=0x10 AH=0x09 DX=count Move cursor left multiple lines */ + void INTDC_CL10h_AH09h(uint16_t count); + INTDC_CL10h_AH09h(reg_dx); + goto done; + } + else if (reg_ah == 0x0a) { /* CL=0x10 AH=0x0A DL=pattern Erase screen */ + void INTDC_CL10h_AH0Ah(uint16_t pattern); + INTDC_CL10h_AH0Ah(reg_dx); + goto done; + } + else if (reg_ah == 0x0b) { /* CL=0x10 AH=0x0B DL=pattern Erase lines */ + void INTDC_CL10h_AH0Bh(uint16_t pattern); + INTDC_CL10h_AH0Bh(reg_dx); + goto done; + } + else if (reg_ah == 0x0c) { /* CL=0x10 AH=0x0C DL=count Insert lines */ + void INTDC_CL10h_AH0Ch(uint16_t count); + INTDC_CL10h_AH0Ch(reg_dx); + goto done; + } + else if (reg_ah == 0x0d) { /* CL=0x10 AH=0x0D DL=count Erase lines */ + void INTDC_CL10h_AH0Dh(uint16_t count); + INTDC_CL10h_AH0Dh(reg_dx); + goto done; + } + else if (reg_ah == 0x0E) { /* CL=0x10 AH=0x0E DL=mode Change character mode */ + void pc98_set_char_mode(bool mode); + pc98_set_char_mode(reg_dl == 0); + goto done; + } + goto unknown; + default: /* some compilers don't like not having a default case */ + goto unknown; + } + +done: + return CBRET_NONE; + +unknown: + LOG_MSG("PC-98 INT DCh unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + + return CBRET_NONE; +} + +static Bitu INTF2_PC98_Handler(void) { + LOG_MSG("PC-98 INT F2h unknown call AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + + return CBRET_NONE; +} + +extern void lio_read_parameter(); +extern uint8_t PC98_BIOS_LIO_GINIT(); +extern uint8_t PC98_BIOS_LIO_GSCREEN(); +extern uint8_t PC98_BIOS_LIO_GVIEW(); +extern uint8_t PC98_BIOS_LIO_GCOLOR1(); +extern uint8_t PC98_BIOS_LIO_GCOLOR2(); +extern uint8_t PC98_BIOS_LIO_GCLS(); +extern uint8_t PC98_BIOS_LIO_GPSET(); +extern uint8_t PC98_BIOS_LIO_GLINE(); +extern uint8_t PC98_BIOS_LIO_GCIRCLE(); +extern uint8_t PC98_BIOS_LIO_GPAINT1(); +extern uint8_t PC98_BIOS_LIO_GPAINT2(); +extern uint8_t PC98_BIOS_LIO_GGET(); +extern uint8_t PC98_BIOS_LIO_GPUT1(); +extern uint8_t PC98_BIOS_LIO_GPUT2(); +extern uint8_t PC98_BIOS_LIO_GPOINT2(); + +// for more information see [https://ia801305.us.archive.org/8/items/PC9800TechnicalDataBookBIOS1992/PC-9800TechnicalDataBook_BIOS_1992_text.pdf] +static Bitu PC98_BIOS_LIO(void) { + uint8_t ret = 0; + const char *call_name = "?"; + + lio_read_parameter(); + switch (reg_al) { + case 0xA0: // GINIT + ret = PC98_BIOS_LIO_GINIT(); + break; + case 0xA1: // GSCREEN + ret = PC98_BIOS_LIO_GSCREEN(); + break; + case 0xA2: // GVIEW + ret = PC98_BIOS_LIO_GVIEW(); + break; + case 0xA3: // GCOLOR1 + ret = PC98_BIOS_LIO_GCOLOR1(); + break; + case 0xA4: // GCOLOR2 + ret = PC98_BIOS_LIO_GCOLOR2(); + break; + case 0xA5: // GCLS + ret = PC98_BIOS_LIO_GCLS(); + break; + case 0xA6: // GPSET + ret = PC98_BIOS_LIO_GPSET(); + break; + case 0xA7: // GLINE + ret = PC98_BIOS_LIO_GLINE(); + break; + case 0xA8: // GCIRCLE + ret = PC98_BIOS_LIO_GCIRCLE(); + break; + case 0xA9: // GPAINT1 + ret = PC98_BIOS_LIO_GPAINT1(); + break; + case 0xAA: // GPAINT2 + ret = PC98_BIOS_LIO_GPAINT2(); + break; + case 0xAB: // GGET + ret = PC98_BIOS_LIO_GGET(); + break; + case 0xAC: // GPUT1 + ret = PC98_BIOS_LIO_GPUT1(); + break; + case 0xAD: // GPUT2 + ret = PC98_BIOS_LIO_GPUT2(); + break; + case 0xAE: // GROLL + call_name = "GROLL"; + goto unknown; + case 0xAF: // GPOINT2 + ret = PC98_BIOS_LIO_GPOINT2(); + break; + case 0xCE: // GCOPY + call_name = "GCOPY"; + goto unknown; + case 0x00: // GRAPH BIO + call_name = "GRAPH BIO"; + goto unknown; + default: + unknown: + /* on entry, AL (from our BIOS code) is set to the call number that lead here */ + LOG_MSG("PC-98 BIOS LIO graphics call 0x%02x '%s' with AX=%04X BX=%04X CX=%04X DX=%04X SI=%04X DI=%04X DS=%04X ES=%04X", + reg_al, + call_name, + reg_ax, + reg_bx, + reg_cx, + reg_dx, + reg_si, + reg_di, + SegValue(ds), + SegValue(es)); + break; + }; + // from Yksoft1's patch + reg_ah = ret; + + return CBRET_NONE; +} + + +extern bool enable_weitek; + +static Bitu INT11_Handler(void) { + if (enable_weitek) reg_eax = (1u << 24u)/*Weitek math coprocessor present*/; + reg_ax=mem_readw(BIOS_CONFIGURATION); + return CBRET_NONE; +} +/* + * Define the following define to 1 if you want dosbox-x to check + * the system time every 5 seconds and adjust 1/2 a second to sync them. + */ +#ifndef DOSBOX_CLOCKSYNC +#define DOSBOX_CLOCKSYNC 0 +#endif + +uint32_t BIOS_HostTimeSync(uint32_t /*ticks*/) { +#if 0//DISABLED TEMPORARILY + uint32_t milli = 0; +#if defined(DB_HAVE_CLOCK_GETTIME) && ! defined(WIN32) + struct timespec tp; + clock_gettime(CLOCK_REALTIME,&tp); + + struct tm *loctime; + loctime = localtime(&tp.tv_sec); + milli = (uint32_t) (tp.tv_nsec / 1000000); +#else + /* Setup time and date */ + struct timeb timebuffer; + ftime(&timebuffer); + + const struct tm *loctime; + loctime = localtime (&timebuffer.time); + milli = (uint32_t) timebuffer.millitm; +#endif + /* + loctime->tm_hour = 23; + loctime->tm_min = 59; + loctime->tm_sec = 45; + loctime->tm_mday = 28; + loctime->tm_mon = 2-1; + loctime->tm_year = 2007 - 1900; + */ + +// FIXME: Why is the BIOS filling in the DOS kernel's date? That should be done when DOS boots! + dos.date.day=(uint8_t)loctime->tm_mday; + dos.date.month=(uint8_t)loctime->tm_mon+1; + dos.date.year=(uint16_t)loctime->tm_year+1900; + + uint32_t nticks=(uint32_t)(((double)( + (unsigned int)loctime->tm_hour*3600u*1000u+ + (unsigned int)loctime->tm_min*60u*1000u+ + (unsigned int)loctime->tm_sec*1000u+ + milli))*(((double)PIT_TICK_RATE/65536.0)/1000.0)); + + /* avoid stepping back from off by one errors */ + if (nticks == (ticks - 1u)) + nticks = ticks; + + return nticks; +#endif + return 0; +} + +// TODO: make option +bool enable_bios_timer_synchronize_keyboard_leds = true; + +void KEYBOARD_SetLEDs(uint8_t bits); + +void BIOS_KEYBOARD_SetLEDs(Bitu state) { + Bitu x = mem_readb(BIOS_KEYBOARD_LEDS); + + x &= ~7u; + x |= (state & 7u); + mem_writeb(BIOS_KEYBOARD_LEDS,x); + KEYBOARD_SetLEDs(state); +} + +/* PC-98 IRQ 0 system timer */ +static Bitu INT8_PC98_Handler(void) { + uint16_t counter = mem_readw(0x58A) - 1; + mem_writew(0x58A,counter); + + /* NTS 2018/02/23: I just confirmed from the ROM BIOS of an actual + * PC-98 system that this implementation and Neko Project II + * are 100% accurate to what the BIOS actually does. + * INT 07h really is the "timer tick" interrupt called + * from INT 08h / IRQ 0, and the BIOS really does call + * INT 1Ch AH=3 from INT 08h if the tick count has not + * yet reached zero. + * + * I'm guessing NEC's BIOS developers invented this prior + * to the Intel 80286 and it's INT 07h + * "Coprocessor not present" exception. */ + + if (counter == 0) { + /* mask IRQ 0 */ + IO_WriteB(0x02,IO_ReadB(0x02) | 0x01); + /* ack IRQ 0 */ + IO_WriteB(0x00,0x20); + /* INT 07h */ + CPU_Interrupt(7,CPU_INT_SOFTWARE,reg_eip); + } + else { + /* ack IRQ 0 */ + IO_WriteB(0x00,0x20); + /* make sure it continues ticking */ + PC98_Interval_Timer_Continue(); + } + + return CBRET_NONE; +} + + +extern bool cmos_sync_flag; +extern uint8_t cmos_sync_sec,cmos_sync_min,cmos_sync_hour; + +extern bool sync_time, manualtime; +bool sync_time_timerrate_warning = false; + +uint32_t PIT0_GetAssignedCounter(void); + +static Bitu INT8_Handler(void) { + /* Increase the bios tick counter */ + uint32_t value = mem_readd(BIOS_TIMER) + 1; + if(value >= 0x1800B0) { + // time wrap at midnight + mem_writeb(BIOS_24_HOURS_FLAG,mem_readb(BIOS_24_HOURS_FLAG)+1); + value=0; + } + + /* Legacy BIOS behavior: This isn't documented at all but most BIOSes + check the BIOS data area for LED keyboard status. If it sees that + value change, then it sends it to the keyboard. This is why on + older DOS machines you could change LEDs by writing to 40:17. + We have to emulate this also because Windows 3.1/9x seems to rely on + it when handling the keyboard from its own driver. Their driver does + hook the keyboard and handles keyboard I/O by itself, but it still + allows the BIOS to do the keyboard magic from IRQ 0 (INT 8h). Yech. */ + if (enable_bios_timer_synchronize_keyboard_leds) { + Bitu should_be = (mem_readb(BIOS_KEYBOARD_STATE) >> 4) & 7; + Bitu led_state = (mem_readb(BIOS_KEYBOARD_LEDS) & 7); + + if (should_be != led_state) + BIOS_KEYBOARD_SetLEDs(should_be); + } + + if (sync_time && cmos_sync_flag) { + value = (uint32_t)((cmos_sync_hour*3600+cmos_sync_min*60+cmos_sync_sec)*(float)PIT_TICK_RATE/65536.0); + cmos_sync_flag = false; + } +#if 0//DISABLED TEMPORARILY + if (sync_time&&!manualtime) { +#if DOSBOX_CLOCKSYNC + static bool check = false; + if((value %50)==0) { + if(((value %100)==0) && check) { + check = false; + time_t curtime;struct tm *loctime; + curtime = time (NULL);loctime = localtime (&curtime); + uint32_t ticksnu = (uint32_t)((loctime->tm_hour*3600+loctime->tm_min*60+loctime->tm_sec)*(float)PIT_TICK_RATE/65536.0); + int32_t bios = value;int32_t tn = ticksnu; + int32_t diff = tn - bios; + if(diff>0) { + if(diff < 18) { diff = 0; } else diff = 9; + } else { + if(diff > -18) { diff = 0; } else diff = -9; + } + + value += diff; + } else if((value%100)==50) check = true; + } +#endif + + /* synchronize time=true is based around the assumption + * that the timer is left ticking at the standard 18.2Hz + * rate. If that is not true, and this IRQ0 handler is + * being called faster, then synchronization will not + * work properly. + * + * Two 1996 demoscene entries sl_fokus.zip and sl_haloo.zip + * are known to program the timer to run faster (58Hz and + * 150Hz) yet use BIOS_TIMER from the BIOS data area to + * track the passage of time. Synchronizing time that way + * will only lead to BIOS_TIMER values that repeat or go + * backwards and will break the demo. */ + if (PIT0_GetAssignedCounter() >= 0xFFFF/*Should be 0x10000 but we'll accept some programs might write 0xFFFF*/) { + uint32_t BIOS_HostTimeSync(uint32_t ticks); + value = BIOS_HostTimeSync(value); + + if (sync_time_timerrate_warning) { + sync_time_timerrate_warning = false; + LOG(LOG_MISC,LOG_WARN)("IRQ0 timer rate restored to 18.2Hz and synchronize time=true, resuming synchronization. BIOS_TIMER may jump backwards suddenly."); + } + } + else { + if (!sync_time_timerrate_warning) { + /* Okay, you changed the tick rate. That affects BIOS_TIMER + * and therefore counts as manual time. Sorry. */ + sync_time_timerrate_warning = true; + LOG(LOG_MISC,LOG_WARN)("IRQ0 timer rate is not 18.2Hz and synchronize time=true, disabling synchronization until normal rate restored."); + } + } + } +#endif + mem_writed(BIOS_TIMER,value); + + if(bootdrive>=0) { +#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && (defined(C_SDL2) || defined(SDL_DOSBOX_X_SPECIAL)) + SetIMPosition(); +#endif + } else if (IS_DOSV && DOSV_CheckCJKVideoMode()) { + INT8_DOSV(); + } else if(J3_IsJapanese()) { + INT8_J3(); + } else if (IS_DOS_CJK) { +#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && (defined(C_SDL2) || defined(SDL_DOSBOX_X_SPECIAL)) + SetIMPosition(); +#endif + } + + /* decrement FDD motor timeout counter; roll over on earlier PC, stop at zero on later PC */ + uint8_t val = mem_readb(BIOS_DISK_MOTOR_TIMEOUT); + if (val || !IS_EGAVGA_ARCH) mem_writeb(BIOS_DISK_MOTOR_TIMEOUT,val-1); + /* clear FDD motor bits when counter reaches zero */ + if (val == 1) mem_writeb(BIOS_DRIVE_RUNNING,mem_readb(BIOS_DRIVE_RUNNING) & 0xF0); + return CBRET_NONE; +} +#undef DOSBOX_CLOCKSYNC + +static Bitu INT1C_Handler(void) { + return CBRET_NONE; +} + +static Bitu INT12_Handler(void) { + reg_ax=mem_readw(BIOS_MEMORY_SIZE); + return CBRET_NONE; +} + +static Bitu INT17_Handler(void) { + if (reg_ah > 0x2 || reg_dx > 0x2) { // 0-2 printer port functions + // and no more than 3 parallel ports + LOG_MSG("BIOS INT17: Unhandled call AH=%2X DX=%4x",reg_ah,reg_dx); + return CBRET_NONE; + } + + switch(reg_ah) { + case 0x00: // PRINTER: Write Character + if(parallelPortObjects[reg_dx]) { + if(parallelPortObjects[reg_dx]->Putchar(reg_al)) + reg_ah=parallelPortObjects[reg_dx]->getPrinterStatus(); + else reg_ah=1; + } + break; + case 0x01: // PRINTER: Initialize port + if(parallelPortObjects[reg_dx]) { + parallelPortObjects[reg_dx]->initialize(); + reg_ah=parallelPortObjects[reg_dx]->getPrinterStatus(); + } + break; + case 0x02: // PRINTER: Get Status + if(parallelPortObjects[reg_dx]) + reg_ah=parallelPortObjects[reg_dx]->getPrinterStatus(); + //LOG_MSG("printer status: %x",reg_ah); + break; + case 0x20: /* Some sort of printerdriver install check*/ + break; + case 0x50: // Printer BIOS for AX + if (!IS_JEGA_ARCH) break; + switch (reg_al) { + case 0x00:// Set JP/US mode in PRT BIOS + LOG(LOG_BIOS, LOG_NORMAL)("AX PRT BIOS 5000h is called. (not implemented)"); + reg_al = 0x01; // Return error (not implemented) + break; + case 0x01:// Get JP/US mode in PRT BIOS + reg_al = 0x01; // Return US mode (not implemented) + break; + default: + LOG(LOG_BIOS, LOG_ERROR)("Unhandled AX Function 50%2X", reg_al); + break; + } + break; + } + return CBRET_NONE; +} + +static bool INT14_Wait(uint16_t port, uint8_t mask, uint8_t timeout, uint8_t* retval) { + double starttime = PIC_FullIndex(); + double timeout_f = timeout * 1000.0; + while (((*retval = IO_ReadB(port)) & mask) != mask) { + if (starttime < (PIC_FullIndex() - timeout_f)) { + return false; + } + CALLBACK_Idle(); + } + return true; +} + +static Bitu INT4B_Handler(void) { + /* TODO: This is where the Virtual DMA specification is accessed on modern systems. + * When we implement that, move this to EMM386 emulation code. */ + + if (reg_ax >= 0x8102 && reg_ax <= 0x810D) { + LOG(LOG_MISC,LOG_DEBUG)("Guest OS attempted Virtual DMA specification call (INT 4Bh AX=%04x BX=%04x CX=%04x DX=%04x", + reg_ax,reg_bx,reg_cx,reg_dx); + } + else if (reg_ah == 0x80) { + LOG(LOG_MISC,LOG_DEBUG)("Guest OS attempted IBM SCSI interface call"); + } + else if (reg_ah <= 0x02) { + LOG(LOG_MISC,LOG_DEBUG)("Guest OS attempted TI Professional PC parallel port function AH=%02x",reg_ah); + } + else { + LOG(LOG_MISC,LOG_DEBUG)("Guest OS attempted unknown INT 4Bh call AX=%04x",reg_ax); + } + + /* Oh, I'm just a BIOS that doesn't know what the hell you're doing. CF=1 */ + CALLBACK_SCF(true); + return CBRET_NONE; +} + +static Bitu INT14_Handler(void) { + if (reg_ah > 0x3 || reg_dx > 0x3) { // 0-3 serial port functions + // and no more than 4 serial ports + LOG_MSG("BIOS INT14: Unhandled call AH=%2X DX=%4x",reg_ah,reg_dx); + return CBRET_NONE; + } + + uint16_t port = real_readw(0x40,reg_dx * 2u); // DX is always port number + uint8_t timeout = mem_readb((PhysPt)((unsigned int)BIOS_COM1_TIMEOUT + (unsigned int)reg_dx)); + if (port==0) { + LOG(LOG_BIOS,LOG_NORMAL)("BIOS INT14: port %d does not exist.",reg_dx); + return CBRET_NONE; + } + switch (reg_ah) { + case 0x00: { + // Initialize port + // Parameters: Return: + // AL: port parameters AL: modem status + // AH: line status + + // set baud rate + Bitu baudrate = 9600u; + uint16_t baudresult; + Bitu rawbaud=(Bitu)reg_al>>5u; + + if (rawbaud==0){ baudrate=110u;} + else if (rawbaud==1){ baudrate=150u;} + else if (rawbaud==2){ baudrate=300u;} + else if (rawbaud==3){ baudrate=600u;} + else if (rawbaud==4){ baudrate=1200u;} + else if (rawbaud==5){ baudrate=2400u;} + else if (rawbaud==6){ baudrate=4800u;} + else if (rawbaud==7){ baudrate=9600u;} + + baudresult = (uint16_t)(115200u / baudrate); + + IO_WriteB(port+3u, 0x80u); // enable divider access + IO_WriteB(port, (uint8_t)baudresult&0xffu); + IO_WriteB(port+1u, (uint8_t)(baudresult>>8u)); + + // set line parameters, disable divider access + IO_WriteB(port+3u, reg_al&0x1Fu); // LCR + + // disable interrupts + IO_WriteB(port+1u, 0u); // IER + + // get result + reg_ah=IO_ReadB(port+5u)&0xffu; + reg_al=IO_ReadB(port+6u)&0xffu; + CALLBACK_SCF(false); + break; + } + case 0x01: // Transmit character + // Parameters: Return: + // AL: character AL: unchanged + // AH: 0x01 AH: line status from just before the char was sent + // (0x80 | unpredicted) in case of timeout + // [undoc] (0x80 | line status) in case of tx timeout + // [undoc] (0x80 | modem status) in case of dsr/cts timeout + + // set DTR & RTS on + IO_WriteB(port+4u,0x3u); + // wait for DSR & CTS + if (INT14_Wait(port+6u, 0x30u, timeout, ®_ah)) { + // wait for TX buffer empty + if (INT14_Wait(port+5u, 0x20u, timeout, ®_ah)) { + // finally send the character + IO_WriteB(port,reg_al); + } else + reg_ah |= 0x80u; + } else // timed out + reg_ah |= 0x80u; + + CALLBACK_SCF(false); + break; + case 0x02: // Read character + // Parameters: Return: + // AH: 0x02 AL: received character + // [undoc] will be trashed in case of timeout + // AH: (line status & 0x1E) in case of success + // (0x80 | unpredicted) in case of timeout + // [undoc] (0x80 | line status) in case of rx timeout + // [undoc] (0x80 | modem status) in case of dsr timeout + + // set DTR on + IO_WriteB(port+4u,0x1u); + + // wait for DSR + if (INT14_Wait(port+6, 0x20, timeout, ®_ah)) { + // wait for character to arrive + if (INT14_Wait(port+5, 0x01, timeout, ®_ah)) { + reg_ah &= 0x1E; + reg_al = IO_ReadB(port); + } else + reg_ah |= 0x80; + } else + reg_ah |= 0x80; + + CALLBACK_SCF(false); + break; + case 0x03: // get status + reg_ah=IO_ReadB(port+5u)&0xffu; + reg_al=IO_ReadB(port+6u)&0xffu; + CALLBACK_SCF(false); + break; + + } + return CBRET_NONE; +} + +Bits HLT_Decode(void); +void KEYBOARD_AUX_Write(Bitu val); +unsigned char KEYBOARD_AUX_GetType(); +unsigned char KEYBOARD_AUX_DevStatus(); +unsigned char KEYBOARD_AUX_Resolution(); +unsigned char KEYBOARD_AUX_SampleRate(); +void KEYBOARD_ClrBuffer(void); +void KEYBOARD_AUX_LowerIRQ(); + +static Bitu INT15_Handler(void) { + if( ( machine==MCH_AMSTRAD ) && ( reg_ah<0x07 ) ) { + switch(reg_ah) { + case 0x00: + // Read/Reset Mouse X/Y Counts. + // CX = Signed X Count. + // DX = Signed Y Count. + // CC. + case 0x01: + // Write NVR Location. + // AL = NVR Address to be written (0-63). + // BL = NVR Data to be written. + + // AH = Return Code. + // 00 = NVR Written Successfully. + // 01 = NVR Address out of range. + // 02 = NVR Data write error. + // CC. + case 0x02: + // Read NVR Location. + // AL = NVR Address to be read (0-63). + + // AH = Return Code. + // 00 = NVR read successfully. + // 01 = NVR Address out of range. + // 02 = NVR checksum error. + // AL = Byte read from NVR. + // CC. + case 0x03: + // Write VDU Colour Plane Write Register. + vga.amstrad.write_plane = reg_al & 0x0F; + CALLBACK_SCF(false); + break; + case 0x04: + // Write VDU Colour Plane Read Register. + vga.amstrad.read_plane = reg_al & 0x03; + CALLBACK_SCF(false); + break; + case 0x05: + // Write VDU Graphics Border Register. + vga.amstrad.border_color = reg_al & 0x0F; + CALLBACK_SCF(false); + break; + case 0x06: + // Return ROS Version Number. + reg_bx = 0x0001; + CALLBACK_SCF(false); + break; + default: + LOG(LOG_BIOS, LOG_NORMAL)("INT15 Unsupported PC1512 Call %02X", reg_ah); + return CBRET_NONE; + } + } + switch (reg_ah) { + case 0x06: + LOG(LOG_BIOS,LOG_NORMAL)("INT15 Unknown Function 6 (Amstrad?)"); + break; + case 0x24: //A20 stuff + switch (reg_al) { + case 0: //Disable a20 + MEM_A20_Enable(false); + reg_ah = 0; //call successful + CALLBACK_SCF(false); //clear on success + break; + case 1: //Enable a20 + MEM_A20_Enable( true ); + reg_ah = 0; //call successful + CALLBACK_SCF(false); //clear on success + break; + case 2: //Query a20 + reg_al = MEM_A20_Enabled() ? 0x1 : 0x0; + reg_ah = 0; //call successful + CALLBACK_SCF(false); + break; + case 3: //Get a20 support + reg_bx = 0x3; //Bitmask, keyboard and 0x92 + reg_ah = 0; //call successful + CALLBACK_SCF(false); + break; + default: + goto unhandled; + } + break; + case 0xC0: /* Get Configuration*/ + CPU_SetSegGeneral(es,biosConfigSeg); + reg_bx = 0; + reg_ah = 0; + CALLBACK_SCF(false); + break; + case 0x4f: /* BIOS - Keyboard intercept */ + /* Carry should be set but let's just set it just in case */ + CALLBACK_SCF(true); + break; + case 0x83: /* BIOS - SET EVENT WAIT INTERVAL */ + { + if(reg_al == 0x01) { /* Cancel it */ + mem_writeb(BIOS_WAIT_FLAG_ACTIVE,0); + IO_Write(0x70,0xb); + IO_Write(0x71,IO_Read(0x71)&~0x40); + CALLBACK_SCF(false); + break; + } + if (mem_readb(BIOS_WAIT_FLAG_ACTIVE)) { + reg_ah=0x80; + CALLBACK_SCF(true); + break; + } + uint32_t count=((uint32_t)reg_cx<<16u)|reg_dx; + mem_writed(BIOS_WAIT_FLAG_POINTER,RealMake(SegValue(es),reg_bx)); + mem_writed(BIOS_WAIT_FLAG_COUNT,count); + mem_writeb(BIOS_WAIT_FLAG_ACTIVE,1); + /* Reprogram RTC to start */ + IO_Write(0x70,0xb); + IO_Write(0x71,IO_Read(0x71)|0x40); + CALLBACK_SCF(false); + } + break; + case 0x84: /* BIOS - JOYSTICK SUPPORT (XT after 11/8/82,AT,XT286,PS) */ + if (reg_dx == 0x0000) { + // Get Joystick button status + if (JOYSTICK_IsEnabled(0) || JOYSTICK_IsEnabled(1)) { + reg_al = IO_ReadB(0x201)&0xf0; + CALLBACK_SCF(false); + } else { + // dos values + reg_ax = 0x00f0; reg_dx = 0x0201; + CALLBACK_SCF(true); + } + } else if (reg_dx == 0x0001) { + if (JOYSTICK_IsEnabled(0)) { + reg_ax = (uint16_t)(JOYSTICK_GetMove_X(0)*127+128); + reg_bx = (uint16_t)(JOYSTICK_GetMove_Y(0)*127+128); + if(JOYSTICK_IsEnabled(1)) { + reg_cx = (uint16_t)(JOYSTICK_GetMove_X(1)*127+128); + reg_dx = (uint16_t)(JOYSTICK_GetMove_Y(1)*127+128); + } + else { + reg_cx = reg_dx = 0; + } + CALLBACK_SCF(false); + } else if (JOYSTICK_IsEnabled(1)) { + reg_ax = reg_bx = 0; + reg_cx = (uint16_t)(JOYSTICK_GetMove_X(1)*127+128); + reg_dx = (uint16_t)(JOYSTICK_GetMove_Y(1)*127+128); + CALLBACK_SCF(false); + } else { + reg_ax = reg_bx = reg_cx = reg_dx = 0; + CALLBACK_SCF(true); + } + } else { + LOG(LOG_BIOS,LOG_ERROR)("INT15:84:Unknown Bios Joystick functionality."); + } + break; + case 0x86: /* BIOS - WAIT (AT,PS) */ + { + if (mem_readb(BIOS_WAIT_FLAG_ACTIVE)) { + reg_ah=0x83; + CALLBACK_SCF(true); + break; + } + uint8_t t; + uint32_t count=((uint32_t)reg_cx<<16u)|reg_dx; + mem_writed(BIOS_WAIT_FLAG_POINTER,RealMake(0,BIOS_WAIT_FLAG_TEMP)); + mem_writed(BIOS_WAIT_FLAG_COUNT,count); + mem_writeb(BIOS_WAIT_FLAG_ACTIVE,1); + + /* if the user has not set the option, warn if IRQs are masked */ + if (!int15_wait_force_unmask_irq) { + /* make sure our wait function works by unmasking IRQ 2, and IRQ 8. + * (bugfix for 1993 demo Yodel "Mayday" demo. this demo keeps masking IRQ 2 for some stupid reason.) */ + if ((t=IO_Read(0x21)) & (1 << 2)) { + LOG(LOG_BIOS,LOG_ERROR)("INT15:86:Wait: IRQ 2 masked during wait. " + "Consider adding 'int15 wait force unmask irq=true' to your dosbox-x.conf"); + } + if ((t=IO_Read(0xA1)) & (1 << 0)) { + LOG(LOG_BIOS,LOG_ERROR)("INT15:86:Wait: IRQ 8 masked during wait. " + "Consider adding 'int15 wait force unmask irq=true' to your dosbox-x.conf"); + } + } + + /* Reprogram RTC to start */ + IO_Write(0x70,0xb); + IO_Write(0x71,IO_Read(0x71)|0x40); + while (mem_readd(BIOS_WAIT_FLAG_COUNT)) { + if (int15_wait_force_unmask_irq) { + /* make sure our wait function works by unmasking IRQ 2, and IRQ 8. + * (bugfix for 1993 demo Yodel "Mayday" demo. this demo keeps masking IRQ 2 for some stupid reason.) */ + if ((t=IO_Read(0x21)) & (1 << 2)) { + LOG(LOG_BIOS,LOG_WARN)("INT15:86:Wait: IRQ 2 masked during wait. " + "This condition might result in an infinite wait on " + "some BIOSes. Unmasking IRQ to keep things moving along."); + IO_Write(0x21,t & ~(1 << 2)); + } + if ((t=IO_Read(0xA1)) & (1 << 0)) { + LOG(LOG_BIOS,LOG_WARN)("INT15:86:Wait: IRQ 8 masked during wait. " + "This condition might result in an infinite wait on some " + "BIOSes. Unmasking IRQ to keep things moving along."); + IO_Write(0xA1,t & ~(1 << 0)); + } + } + + CALLBACK_Idle(); + } + CALLBACK_SCF(false); + break; + } + case 0x87: /* Copy extended memory */ + { + bool enabled = MEM_A20_Enabled(); + MEM_A20_Enable(true); + Bitu bytes = reg_cx * 2u; + PhysPt data = SegPhys(es)+reg_si; + PhysPt source = (mem_readd(data+0x12u) & 0x00FFFFFFu) + ((unsigned int)mem_readb(data+0x17u)<<24u); + PhysPt dest = (mem_readd(data+0x1Au) & 0x00FFFFFFu) + ((unsigned int)mem_readb(data+0x1Fu)<<24u); + MEM_BlockCopy(dest,source,bytes); + reg_ax = 0x00; + MEM_A20_Enable(enabled); + Segs.limit[cs] = 0xFFFF; + Segs.limit[ds] = 0xFFFF; + Segs.limit[es] = 0xFFFF; + Segs.limit[ss] = 0xFFFF; + CALLBACK_SCF(false); + break; + } + case 0x88: /* SYSTEM - GET EXTENDED MEMORY SIZE (286+) */ + /* This uses the 16-bit value read back from CMOS which is capped at 64MB */ + reg_ax=other_memsystems?0:size_extended; + LOG(LOG_BIOS,LOG_NORMAL)("INT15:Function 0x88 Remaining %04X kb",reg_ax); + CALLBACK_SCF(false); + break; + case 0x89: /* SYSTEM - SWITCH TO PROTECTED MODE */ + { + IO_Write(0x20,0x10);IO_Write(0x21,reg_bh);IO_Write(0x21,0);IO_Write(0x21,0xFF); + IO_Write(0xA0,0x10);IO_Write(0xA1,reg_bl);IO_Write(0xA1,0);IO_Write(0xA1,0xFF); + MEM_A20_Enable(true); + PhysPt table=SegPhys(es)+reg_si; + CPU_LGDT(mem_readw(table+0x8),mem_readd(table+0x8+0x2) & 0xFFFFFF); + CPU_LIDT(mem_readw(table+0x10),mem_readd(table+0x10+0x2) & 0xFFFFFF); + CPU_SET_CRX(0,CPU_GET_CRX(0)|1); + CPU_SetSegGeneral(ds,0x18); + CPU_SetSegGeneral(es,0x20); + CPU_SetSegGeneral(ss,0x28); + Bitu ret = mem_readw(SegPhys(ss)+reg_sp); + reg_sp+=6; //Clear stack of interrupt frame + CPU_SetFlags(0,FMASK_ALL); + reg_ax=0; + CPU_JMP(false,0x30,ret,0); + } + break; + case 0x8A: /* EXTENDED MEMORY SIZE */ + { + Bitu sz = MEM_TotalPages()*4; + if (sz >= 1024) sz -= 1024; + else sz = 0; + reg_ax = sz & 0xFFFF; + reg_dx = sz >> 16; + CALLBACK_SCF(false); + } + break; + case 0x90: /* OS HOOK - DEVICE BUSY */ + case 0x91: /* OS HOOK - DEVICE POST */ + CALLBACK_SCF(false); + reg_ah=0; + break; + case 0xc2: /* BIOS PS2 Pointing Device Support */ + /* TODO: Our reliance on AUX emulation means that at some point, AUX emulation + * must always be enabled if BIOS PS/2 emulation is enabled. Future planned change: + * + * If biosps2=true and aux=true, carry on what we're already doing now: emulate INT 15h by + * directly writing to the AUX port of the keyboard controller. + * + * If biosps2=false, the aux= setting enables/disables AUX emulation as it already does now. + * biosps2=false implies that we're emulating a keyboard controller with AUX but no BIOS + * support for it (however rare that might be). This gives the user of DOSBox-X the means + * to test that scenario especially in case he/she is developing a homebrew OS and needs + * to ensure their code can handle cases like that gracefully. + * + * If biosps2=true and aux=false, AUX emulation is enabled anyway, but the keyboard emulation + * must act as if the AUX port is not there so the guest OS cannot control it. Again, not + * likely on real hardware, but a useful test case for homebrew OS developers. + * + * If you the user set aux=false, then you obviously want to test a system configuration + * where the keyboard controller has no AUX port. If you set biosps2=true, then you want to + * test an OS that uses BIOS functions to setup the "pointing device" but you do not want the + * guest OS to talk directly to the AUX port on the keyboard controller. + * + * Logically that's not likely to happen on real hardware, but we like giving the end-user + * options to play with, so instead, if aux=false and biosps2=true, DOSBox-X should print + * a warning stating that INT 15h mouse emulation with a PS/2 port is nonstandard and may + * cause problems with OSes that need to talk directly to hardware. + * + * It is noteworthy that PS/2 mouse support in MS-DOS mouse drivers as well as Windows 3.x, + * Windows 95, and Windows 98, is carried out NOT by talking directly to the AUX port but + * instead by relying on the BIOS INT 15h functions here to do the dirty work. For those + * scenarios, biosps2=true and aux=false is perfectly safe and does not cause issues. + * + * OSes that communicate directly with the AUX port however (Linux, Windows NT) will not work + * unless aux=true. */ + if (en_bios_ps2mouse) { +// LOG_MSG("INT 15h AX=%04x BX=%04x\n",reg_ax,reg_bx); + switch (reg_al) { + case 0x00: // enable/disable + if (reg_bh==0) { // disable + KEYBOARD_AUX_Write(0xF5); + Mouse_SetPS2State(false); + reg_ah=0; + CALLBACK_SCF(false); + KEYBOARD_ClrBuffer(); + } else if (reg_bh==0x01) { //enable + if (!Mouse_SetPS2State(true)) { + reg_ah=5; + CALLBACK_SCF(true); + break; + } + KEYBOARD_AUX_Write(0xF4); + KEYBOARD_ClrBuffer(); + reg_ah=0; + CALLBACK_SCF(false); + } else { + CALLBACK_SCF(true); + reg_ah=1; + } + break; + case 0x01: // reset + KEYBOARD_AUX_Write(0xFF); + Mouse_SetPS2State(false); + KEYBOARD_ClrBuffer(); + reg_bx=0x00aa; // mouse (BH=device ID BL=value returned by attached device after reset) [http://www.ctyme.com/intr/rb-1597.htm] + LOG_MSG("INT 15h mouse reset\n"); + KEYBOARD_AUX_Write(0xF6); /* set defaults */ + Mouse_SetPS2State(false); + KEYBOARD_ClrBuffer(); + KEYBOARD_AUX_LowerIRQ(); /* HACK: Lower IRQ or else it will persist, which can cause problems with Windows 3.1 stock PS/2 mouse drivers */ + CALLBACK_SCF(false); + reg_ah=0; // must return success. Fall through was well intended but, no, causes an error code that confuses mouse drivers + break; + case 0x05: // initialize + if (reg_bh >= 3 && reg_bh <= 4) { + /* TODO: BIOSes remember this value as the number of bytes to store before + * calling the device callback. Setting this value to "1" is perfectly + * valid if you want a byte-stream like mode (at the cost of one + * interrupt per byte!). Most OSes will call this with BH=3 for standard + * PS/2 mouse protocol. You can also call this with BH=4 for Intellimouse + * protocol support, though testing (so far with VirtualBox) shows the + * device callback still only gets the first three bytes on the stack. + * Contrary to what you might think, the BIOS does not interpret the + * bytes at all. + * + * The source code of CuteMouse 1.9 seems to suggest some BIOSes take + * pains to repack the 4th byte in the upper 8 bits of one of the WORDs + * on the stack in Intellimouse mode at the cost of shifting the W and X + * fields around. I can't seem to find any source on who does that or + * if it's even true, so I disregard the example at this time. + * + * Anyway, you need to store off this value somewhere and make use of + * it in src/ints/mouse.cpp device callback emulation to reframe the + * PS/2 mouse bytes coming from AUX (if aux=true) or emulate the + * re-framing if aux=false to emulate this protocol fully. */ + LOG_MSG("INT 15h mouse initialized to %u-byte protocol\n",reg_bh); + Mouse_PS2SetPacketSize(reg_bh); + KEYBOARD_AUX_Write(0xF6); /* set defaults */ + Mouse_SetPS2State(false); + KEYBOARD_ClrBuffer(); + CALLBACK_SCF(false); + reg_ah=0; + } + else { + CALLBACK_SCF(false); + reg_ah=0x02; /* invalid input */ + } + break; + case 0x02: { // set sampling rate + Mouse_PS2SetSamplingRate(reg_bh); + static const unsigned char tbl[7] = {10,20,40,60,80,100,200}; + KEYBOARD_AUX_Write(0xF3); + if (reg_bh > 6) reg_bh = 6; + KEYBOARD_AUX_Write(tbl[reg_bh]); + KEYBOARD_ClrBuffer(); + CALLBACK_SCF(false); + reg_ah=0; + } break; + case 0x03: // set resolution + KEYBOARD_AUX_Write(0xE8); + KEYBOARD_AUX_Write(reg_bh&3); + KEYBOARD_ClrBuffer(); + CALLBACK_SCF(false); + reg_ah=0; + break; + case 0x04: // get type + reg_bh=KEYBOARD_AUX_GetType(); // ID + KEYBOARD_AUX_LowerIRQ(); /* HACK: Lower IRQ or else it will persist, which can cause problems with Windows 3.1 stock PS/2 mouse drivers */ + LOG_MSG("INT 15h reporting mouse device ID 0x%02x\n",reg_bh); + KEYBOARD_ClrBuffer(); + CALLBACK_SCF(false); + reg_ah=0; + break; + case 0x06: // extended commands + if (reg_bh == 0x00) { + /* Read device status and info. + * Windows 9x does not appear to use this, but Windows NT 3.1 does (prior to entering + * full 32-bit protected mode) */ + CALLBACK_SCF(false); + reg_bx=KEYBOARD_AUX_DevStatus(); + reg_cx=KEYBOARD_AUX_Resolution(); + reg_dx=KEYBOARD_AUX_SampleRate(); + KEYBOARD_AUX_LowerIRQ(); /* HACK: Lower IRQ or else it will persist, which can cause problems with Windows 3.1 stock PS/2 mouse drivers */ + KEYBOARD_ClrBuffer(); + reg_ah=0; + } + else if ((reg_bh==0x01) || (reg_bh==0x02)) { /* set scaling */ + KEYBOARD_AUX_Write(0xE6u+reg_bh-1u); /* 0xE6 1:1 or 0xE7 2:1 */ + KEYBOARD_ClrBuffer(); + CALLBACK_SCF(false); + reg_ah=0; + } else { + CALLBACK_SCF(true); + reg_ah=1; + } + break; + case 0x07: // set callback + Mouse_ChangePS2Callback(SegValue(es),reg_bx); + CALLBACK_SCF(false); + reg_ah=0; + break; + default: + LOG_MSG("INT 15h unknown mouse call AX=%04x\n",reg_ax); + CALLBACK_SCF(true); + reg_ah=1; + break; + } + } + else { + reg_ah=0x86; + CALLBACK_SCF(true); + if ((IS_EGAVGA_ARCH) || (machine==MCH_CGA)) { + /* relict from comparisons, as int15 exits with a retf2 instead of an iret */ + CALLBACK_SZF(false); + } + } + break; + case 0xc3: /* set carry flag so BorlandRTM doesn't assume a VECTRA/PS2 */ + reg_ah=0x86; + CALLBACK_SCF(true); + break; + case 0xc4: /* BIOS POS Program option Select */ + LOG(LOG_BIOS,LOG_NORMAL)("INT15:Function %X called, bios mouse not supported",reg_ah); + CALLBACK_SCF(true); + break; + case 0x53: // APM BIOS + if (APMBIOS) { + /* Windows 98 calls AH=05h CPU IDLE way too much per second, it makes it difficult to see anything important scroll by. + * Rate limit this particular call in the log file. */ + if (reg_al == 0x05) { + APM_log_cpu_idle++; + if (PIC_FullIndex() >= APM_log_cpu_idle_next_report) { + LOG(LOG_BIOS,LOG_DEBUG)("APM BIOS, %lu calls to AX=%04x BX=0x%04x CX=0x%04x\n",(unsigned long)APM_log_cpu_idle,reg_ax,reg_bx,reg_cx); + APM_log_cpu_idle_next_report = PIC_FullIndex() + 1000; + APM_log_cpu_idle = 0; + } + } + else { + LOG(LOG_BIOS,LOG_DEBUG)("APM BIOS call AX=%04x BX=0x%04x CX=0x%04x\n",reg_ax,reg_bx,reg_cx); + } + + switch(reg_al) { + case 0x00: // installation check + reg_ah = 1; // major + reg_al = APM_BIOS_minor_version; // minor + reg_bx = 0x504d; // 'PM' + reg_cx = (APMBIOS_allow_prot16?0x01:0x00) + (APMBIOS_allow_prot32?0x02:0x00); + // 32-bit interface seems to be needed for standby in win95 + CALLBACK_SCF(false); + break; + case 0x01: // connect real mode interface + if(!APMBIOS_allow_realmode) { + LOG_MSG("APM BIOS: OS attempted real-mode connection, which is disabled in your dosbox-x.conf\n"); + reg_ah = 0x86; // APM not present + CALLBACK_SCF(true); + break; + } + if(reg_bx != 0x0) { + reg_ah = 0x09; // unrecognized device ID + CALLBACK_SCF(true); + break; + } + if(!apm_realmode_connected) { // not yet connected + LOG_MSG("APM BIOS: Connected to real-mode interface\n"); + CALLBACK_SCF(false); + APMBIOS_connect_mode = APMBIOS_CONNECT_REAL; + PowerButtonClicks=0; /* BIOSes probably clear whatever hardware register this involves... we'll see */ + APM_ResumeNotificationFromStandby = false; + APM_ResumeNotificationFromSuspend = false; + apm_realmode_connected=true; + } else { + LOG_MSG("APM BIOS: OS attempted to connect to real-mode interface when already connected\n"); + reg_ah = APMBIOS_connected_already_err(); // interface connection already in effect + CALLBACK_SCF(true); + } + APM_BIOS_connected_minor_version = 0; + break; + case 0x02: // connect 16-bit protected mode interface + if(!APMBIOS_allow_prot16) { + LOG_MSG("APM BIOS: OS attempted 16-bit protected mode connection, which is disabled in your dosbox-x.conf\n"); + reg_ah = 0x06; // not supported + CALLBACK_SCF(true); + break; + } + if(reg_bx != 0x0) { + reg_ah = 0x09; // unrecognized device ID + CALLBACK_SCF(true); + break; + } + if(!apm_realmode_connected) { // not yet connected + /* NTS: We use the same callback address for both 16-bit and 32-bit + * because only the DOS callback and RETF instructions are involved, + * which can be executed as either 16-bit or 32-bit code without problems. */ + LOG_MSG("APM BIOS: Connected to 16-bit protected mode interface\n"); + CALLBACK_SCF(false); + reg_ax = INT15_apm_pmentry >> 16; // AX = 16-bit code segment (real mode base) + reg_bx = INT15_apm_pmentry & 0xFFFF; // BX = offset of entry point + reg_cx = INT15_apm_pmentry >> 16; // CX = 16-bit data segment (NTS: doesn't really matter) + reg_si = 0xFFFF; // SI = code segment length + reg_di = 0xFFFF; // DI = data segment length + APMBIOS_connect_mode = APMBIOS_CONNECT_PROT16; + PowerButtonClicks=0; /* BIOSes probably clear whatever hardware register this involves... we'll see */ + APM_ResumeNotificationFromStandby = false; + APM_ResumeNotificationFromSuspend = false; + apm_realmode_connected=true; + } else { + LOG_MSG("APM BIOS: OS attempted to connect to 16-bit protected mode interface when already connected\n"); + reg_ah = APMBIOS_connected_already_err(); // interface connection already in effect + CALLBACK_SCF(true); + } + APM_BIOS_connected_minor_version = 0; + break; + case 0x03: // connect 32-bit protected mode interface + // Note that Windows 98 will NOT talk to the APM BIOS unless the 32-bit protected mode connection is available. + // And if you lie about it in function 0x00 and then fail, Windows 98 will fail with a "Windows protection error". + if(!APMBIOS_allow_prot32) { + LOG_MSG("APM BIOS: OS attempted 32-bit protected mode connection, which is disabled in your dosbox-x.conf\n"); + reg_ah = 0x08; // not supported + CALLBACK_SCF(true); + break; + } + if(reg_bx != 0x0) { + reg_ah = 0x09; // unrecognized device ID + CALLBACK_SCF(true); + break; + } + if(!apm_realmode_connected) { // not yet connected + LOG_MSG("APM BIOS: Connected to 32-bit protected mode interface\n"); + CALLBACK_SCF(false); + /* NTS: We use the same callback address for both 16-bit and 32-bit + * because only the DOS callback and RETF instructions are involved, + * which can be executed as either 16-bit or 32-bit code without problems. */ + reg_ax = INT15_apm_pmentry >> 16; // AX = 32-bit code segment (real mode base) + reg_ebx = INT15_apm_pmentry & 0xFFFF; // EBX = offset of entry point + reg_cx = INT15_apm_pmentry >> 16; // CX = 16-bit code segment (real mode base) + reg_dx = INT15_apm_pmentry >> 16; // DX = data segment (real mode base) (?? what size?) + reg_esi = 0xFFFFFFFF; // ESI = upper word: 16-bit code segment len lower word: 32-bit code segment length + reg_di = 0xFFFF; // DI = data segment length + APMBIOS_connect_mode = APMBIOS_CONNECT_PROT32; + PowerButtonClicks=0; /* BIOSes probably clear whatever hardware register this involves... we'll see */ + APM_ResumeNotificationFromStandby = false; + APM_ResumeNotificationFromSuspend = false; + apm_realmode_connected=true; + } else { + LOG_MSG("APM BIOS: OS attempted to connect to 32-bit protected mode interface when already connected\n"); + reg_ah = APMBIOS_connected_already_err(); // interface connection already in effect + CALLBACK_SCF(true); + } + APM_BIOS_connected_minor_version = 0; + break; + case 0x04: // DISCONNECT INTERFACE + if(reg_bx != 0x0) { + reg_ah = 0x09; // unrecognized device ID + CALLBACK_SCF(true); + break; + } + if(apm_realmode_connected) { + LOG_MSG("APM BIOS: OS disconnected\n"); + CALLBACK_SCF(false); + apm_realmode_connected=false; + } else { + reg_ah = 0x03; // interface not connected + CALLBACK_SCF(true); + } + APM_BIOS_connected_minor_version = 0; + break; + case 0x05: // CPU IDLE + if(!apm_realmode_connected) { + reg_ah = 0x03; + CALLBACK_SCF(true); + break; + } + + // Trigger CPU HLT instruction. + // NTS: For whatever weird reason, NOT emulating HLT makes Windows 95 + // crashy when the APM driver is active! There's something within + // the Win95 kernel that apparently screws up really badly if + // the APM IDLE call returns immediately. The best case scenario + // seems to be that Win95's APM driver has some sort of timing + // logic to it that if it detects an immediate return, immediately + // shuts down and powers off the machine. Windows 98 also seems + // to require a HLT, and will act erratically without it. + // + // Also need to note that the choice of "HLT" is not arbitrary + // at all. The APM BIOS standard mentions CPU IDLE either stopping + // the CPU clock temporarily or issuing HLT as a valid method. + // + // TODO: Make this a dosbox-x.conf configuration option: what do we do + // on APM idle calls? Allow selection between "nothing" "hlt" + // and "software delay". + if (!(reg_flags&0x200)) { + LOG(LOG_BIOS,LOG_WARN)("APM BIOS warning: CPU IDLE called with IF=0, not HLTing\n"); + } + else if (cpudecoder == &HLT_Decode) { /* do not re-execute HLT, it makes DOSBox-X hang */ + LOG_MSG("APM BIOS warning: CPU IDLE HLT within HLT (DOSBox-X core failure)\n"); + } + else { + CPU_HLT(reg_eip); + } + break; + case 0x06: // CPU BUSY + if(!apm_realmode_connected) { + reg_ah = 0x03; + CALLBACK_SCF(true); + break; + } + + /* OK. whatever. system no longer idle */ + CALLBACK_SCF(false); + break; + case 0x07: + if(reg_bx != 0x1) { + reg_ah = 0x09; // wrong device ID + CALLBACK_SCF(true); + break; + } + if(!apm_realmode_connected) { + reg_ah = 0x03; + CALLBACK_SCF(true); + break; + } + switch(reg_cx) { + case 0x1: // standby + LOG(LOG_MISC,LOG_DEBUG)("Guest attempted to set power state to standby"); + APM_BeginSuspendedMode(); + reg_ah = 0x00;//TODO + CALLBACK_SCF(false); + APM_ResumeNotificationFromStandby = true; + break; + case 0x2: // suspend + LOG(LOG_MISC,LOG_DEBUG)("Guest attempted to set power state to suspend"); + APM_BeginSuspendedMode(); + reg_ah = 0x00;//TODO + CALLBACK_SCF(false); + APM_ResumeNotificationFromSuspend = true; + break; + case 0x3: // power off + throw 0; + case 0x4: // last request processing notification (used by Windows ME) + LOG(LOG_MISC,LOG_DEBUG)("Guest is considering whether to accept the last returned APM event"); + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x5: // reject last request (used by Windows ME) + LOG(LOG_MISC,LOG_DEBUG)("Guest has rejected the last APM event"); + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + default: + reg_ah = 0x0A; // invalid parameter value in CX + CALLBACK_SCF(true); + break; + } + break; + case 0x08: // ENABLE/DISABLE POWER MANAGEMENT + if(reg_bx != 0x0 && reg_bx != 0x1) { + reg_ah = 0x09; // unrecognized device ID + CALLBACK_SCF(true); + break; + } else if(!apm_realmode_connected) { + reg_ah = 0x03; + CALLBACK_SCF(true); + break; + } + if(reg_cx==0x0) LOG_MSG("disable APM for device %4x",reg_bx); + else if(reg_cx==0x1) LOG_MSG("enable APM for device %4x",reg_bx); + else { + reg_ah = 0x0A; // invalid parameter value in CX + CALLBACK_SCF(true); + } + break; + case 0x0a: // GET POWER STATUS + if (!apm_realmode_connected) { + reg_ah = 0x03; // interface not connected + CALLBACK_SCF(true); + break; + } + if (reg_bx != 0x0001 && reg_bx != 0x8001) { + reg_ah = 0x09; // unrecognized device ID + CALLBACK_SCF(true); + break; + } + /* FIXME: Allow configuration and shell commands to dictate whether or + * not we emulate a laptop with a battery */ + reg_bh = 0x01; // AC line status (1=on-line) + reg_bl = 0xFF; // Battery status (unknown) + reg_ch = 0x80; // Battery flag (no system battery) + reg_cl = 0xFF; // Remaining battery charge (unknown) + reg_dx = 0xFFFF; // Remaining battery life (unknown) + reg_si = 0; // Number of battery units (if called with reg_bx == 0x8001) + CALLBACK_SCF(false); + break; + case 0x0b: // GET PM EVENT + if (!apm_realmode_connected) { + reg_ah = 0x03; // interface not connected + CALLBACK_SCF(true); + break; + } + // power button? + if (PowerButtonClicks != 0) { // Hardware and BIOSes probably just set a bit somewhere, so act like it + LOG(LOG_MISC,LOG_DEBUG)("Returning APM power button event to guest OS"); + reg_ah = 0x00; // FIXME: The standard doesn't say anything about AH on success + + if (APM_PowerButtonSendsSuspend) + reg_bx = 0x000A;// user pushed a button, wants to suspend the system + else + reg_bx = 0x0009;// user pushed a button, wants to put the system into standby + + reg_cx = 0x0000; + CALLBACK_SCF(false); + PowerButtonClicks = 0; + break; + } + // resume from standby? Windows 98 will spin in a loop for 5+ seconds until it gets this APM message after suspend + if (APM_ResumeNotificationFromStandby) { + LOG(LOG_MISC,LOG_DEBUG)("Returning APM resume from standby notification event to guest OS"); + reg_ah = 0x00; // FIXME: The standard doesn't say anything about AH on success + reg_bx = 0x000B;// System Standby Resume Notification + reg_cx = 0x0000; + CALLBACK_SCF(false); + APM_ResumeNotificationFromStandby = false; + break; + } + // resume from suspend? Windows 98 will spin in a loop for 5+ seconds until it gets this APM message after suspend + if (APM_ResumeNotificationFromSuspend) { + LOG(LOG_MISC,LOG_DEBUG)("Returning APM resume from suspend notification event to guest OS"); + reg_ah = 0x00; // FIXME: The standard doesn't say anything about AH on success + reg_bx = 0x0003;// Normal Resume System Notification + reg_cx = 0x0000; + CALLBACK_SCF(false); + APM_ResumeNotificationFromSuspend = false; + break; + } + // nothing + reg_ah = 0x80; // no power management events pending + CALLBACK_SCF(true); + break; + case 0x0d: + // NTS: NOT implementing this call can cause Windows 98's APM driver to crash on startup + if(reg_bx != 0x0 && reg_bx != 0x1) { + reg_ah = 0x09; // unrecognized device ID + CALLBACK_SCF(true); + break; + } else if(!apm_realmode_connected) { + reg_ah = 0x03; + CALLBACK_SCF(true); + break; + } + if(reg_cx==0x0) { + LOG_MSG("disable APM for device %4x",reg_bx); + CALLBACK_SCF(false); + } + else if(reg_cx==0x1) { + LOG_MSG("enable APM for device %4x",reg_bx); + CALLBACK_SCF(false); + } + else { + reg_ah = 0x0A; // invalid parameter value in CX + CALLBACK_SCF(true); + } + break; + case 0x0e: + if (APM_BIOS_minor_version != 0) { // APM 1.1 or higher only + if(reg_bx != 0x0) { + reg_ah = 0x09; // unrecognized device ID + CALLBACK_SCF(true); + break; + } else if(!apm_realmode_connected) { + reg_ah = 0x03; // interface not connected + CALLBACK_SCF(true); + break; + } + reg_ah = reg_ch; /* we are called with desired version in CH,CL, return actual version in AH,AL */ + reg_al = reg_cl; + if(reg_ah != 1) reg_ah = 1; // major + if(reg_al > APM_BIOS_minor_version) reg_al = APM_BIOS_minor_version; // minor + APM_BIOS_connected_minor_version = reg_al; // what we decided becomes the interface we emulate + LOG_MSG("APM BIOS negotiated to v1.%u",APM_BIOS_connected_minor_version); + CALLBACK_SCF(false); + } + else { // APM 1.0 does not recognize this call + reg_ah = 0x0C; // function not supported + CALLBACK_SCF(true); + } + break; + case 0x0f: + if(reg_bx != 0x0 && reg_bx != 0x1) { + reg_ah = 0x09; // unrecognized device ID + CALLBACK_SCF(true); + break; + } else if(!apm_realmode_connected) { + reg_ah = 0x03; + CALLBACK_SCF(true); + break; + } + if(reg_cx==0x0) { + LOG_MSG("disengage APM for device %4x",reg_bx); + CALLBACK_SCF(false); + } + else if(reg_cx==0x1) { + LOG_MSG("engage APM for device %4x",reg_bx); + CALLBACK_SCF(false); + } + else { + reg_ah = 0x0A; // invalid parameter value in CX + CALLBACK_SCF(true); + } + break; + case 0x10: + if (!apm_realmode_connected) { + reg_ah = 0x03; // interface not connected + CALLBACK_SCF(true); + break; + } + if (reg_bx != 0) { + reg_ah = 0x09; // unrecognized device ID + CALLBACK_SCF(true); + break; + } + reg_ah = 0; + reg_bl = 0; // number of battery units + reg_cx = 0x03; // can enter suspend/standby and will post standby/resume events + CALLBACK_SCF(false); + break; + case 0x13://enable/disable/query timer based requests + // NTS: NOT implementing this call can cause Windows 98's APM driver to crash on startup + if (!apm_realmode_connected) { + reg_ah = 0x03; // interface not connected + CALLBACK_SCF(true); + break; + } + if (reg_bx != 0) { + reg_ah = 0x09; // unrecognized device ID + CALLBACK_SCF(true); + break; + } + + if (reg_cx == 0) { // disable + APM_inactivity_timer = false; + reg_cx = 0; + CALLBACK_SCF(false); + } + else if (reg_cx == 1) { // enable + APM_inactivity_timer = true; + reg_cx = 1; + CALLBACK_SCF(false); + } + else if (reg_cx == 2) { // get enabled status + reg_cx = APM_inactivity_timer ? 1 : 0; + CALLBACK_SCF(false); + } + else { + reg_ah = 0x0A; // invalid parameter value in CX + CALLBACK_SCF(true); + } + break; + default: + LOG_MSG("Unknown APM BIOS call AX=%04x\n",reg_ax); + if (!apm_realmode_connected) { + reg_ah = 0x03; // interface not connected + CALLBACK_SCF(true); + break; + } + reg_ah = 0x0C; // function not supported + CALLBACK_SCF(true); + break; + } + } + else { + reg_ah=0x86; + CALLBACK_SCF(true); + LOG_MSG("APM BIOS call attempted. set apmbios=1 if you want power management\n"); + if ((IS_EGAVGA_ARCH) || (machine==MCH_CGA) || (machine==MCH_AMSTRAD)) { + /* relict from comparisons, as int15 exits with a retf2 instead of an iret */ + CALLBACK_SZF(false); + } + } + break; + case 0xe8: + switch (reg_al) { + case 0x01: { /* E801: memory size */ + Bitu sz = MEM_TotalPages()*4; + if (sz >= 1024) sz -= 1024; + else sz = 0; + reg_ax = reg_cx = (sz > 0x3C00) ? 0x3C00 : sz; /* extended memory between 1MB and 16MB in KBs */ + sz -= reg_ax; + sz /= 64; /* extended memory size from 16MB in 64KB blocks */ + if (sz > 65535) sz = 65535; + reg_bx = reg_dx = sz; + CALLBACK_SCF(false); + } + break; + case 0x20: { /* E820: MEMORY LISTING */ + if (reg_edx == 0x534D4150 && reg_ecx >= 20 && (MEM_TotalPages()*4) >= 24000) { + /* return a minimalist list: + * + * 0) 0x000000-0x09EFFF Free memory + * 1) 0x0C0000-0x0FFFFF Reserved + * 2) 0x100000-... Free memory (no ACPI tables) */ + if (reg_ebx < E280_table_entries) { + BIOS_E280_entry &ent = E280_table[reg_ebx]; + Bitu seg = SegValue(es); + + /* write to ES:DI */ + real_writed(seg,reg_di+0x00,ent.base); + real_writed(seg,reg_di+0x04,(uint32_t)(ent.base >> (uint64_t)32u)); + real_writed(seg,reg_di+0x08,ent.length); + real_writed(seg,reg_di+0x0C,(uint32_t)(ent.length >> (uint64_t)32u)); + real_writed(seg,reg_di+0x10,ent.type); + reg_ecx = 20; + + /* return EBX pointing to next entry. wrap around, as most BIOSes do. + * the program is supposed to stop on CF=1 or when we return EBX == 0 */ + if (++reg_ebx >= E280_table_entries) reg_ebx = 0; + } + else { + CALLBACK_SCF(true); + } + + reg_eax = 0x534D4150; + } + else { + reg_eax = 0x8600; + CALLBACK_SCF(true); + } + } + break; + default: + unhandled: + LOG(LOG_BIOS,LOG_ERROR)("INT15:Unknown call ah=E8, al=%2X",reg_al); + reg_ah=0x86; + CALLBACK_SCF(true); + if ((IS_EGAVGA_ARCH) || (machine==MCH_CGA) || (machine==MCH_AMSTRAD)) { + /* relict from comparisons, as int15 exits with a retf2 instead of an iret */ + CALLBACK_SZF(false); + } + } + break; + case 0x50: + if(isDBCSCP()) { + if(reg_al == 0x00) { + if(reg_bl == 0x00 && reg_bp == 0x00) { + enum DOSV_FONT font = DOSV_FONT_MAX; + if(reg_bh & 0x01) { + if(reg_dh == 16 && reg_dl == 16) { + font = DOSV_FONT_16X16; + } else if(reg_dh == 24 && reg_dl == 24) { + font = DOSV_FONT_24X24; + } + } else { + if(reg_dh == 8) { + if(reg_dl == 16) { + font = DOSV_FONT_8X16; + } else if(reg_dl == 19) { + font = DOSV_FONT_8X19; + } + } else if(reg_dh == 12 && reg_dl == 24) { + font = DOSV_FONT_12X24; + } + } + if(font != DOSV_FONT_MAX) { + reg_ah = 0x00; + SegSet16(es, CB_SEG); + reg_bx = DOSV_GetFontHandlerOffset(font); + CALLBACK_SCF(false); + break; + } + } + } else if(reg_al == 0x01) { + if(reg_dh == 16 && reg_dl == 16) { + reg_ah = 0x00; + SegSet16(es, CB_SEG); + reg_bx = DOSV_GetFontHandlerOffset(DOSV_FONT_16X16_WRITE); + CALLBACK_SCF(false); + break; + } else if(reg_dh == 24 && reg_dl == 24) { + reg_ah = 0x00; + SegSet16(es, CB_SEG); + reg_bx = DOSV_GetFontHandlerOffset(DOSV_FONT_24X24_WRITE); + CALLBACK_SCF(false); + break; + } else { + reg_ah = 0x06; // read only + } + } + CALLBACK_SCF(true); + } + break; + case 0x49: + if(isDBCSCP()) { + reg_ah = 0x00; + reg_bl = 0x00; + CALLBACK_SCF(false); + } else { + CALLBACK_SCF(true); + } + break; + default: + LOG(LOG_BIOS,LOG_ERROR)("INT15:Unknown call ax=%4X",reg_ax); + reg_ah=0x86; + CALLBACK_SCF(true); + if ((IS_EGAVGA_ARCH) || (machine==MCH_CGA) || (machine==MCH_AMSTRAD)) { + /* relict from comparisons, as int15 exits with a retf2 instead of an iret */ + CALLBACK_SZF(false); + } + } + return CBRET_NONE; +} + +void BIOS_UnsetupKeyboard(void); +void BIOS_SetupKeyboard(void); +void BIOS_UnsetupDisks(void); +void BIOS_SetupDisks(void); +void CPU_Snap_Back_To_Real_Mode(); +void CPU_Snap_Back_Restore(); + +static Bitu Default_IRQ_Handler(void) { + IO_WriteB(0x20, 0x0b); + uint8_t master_isr = IO_ReadB(0x20); + if (master_isr) { + IO_WriteB(0xa0, 0x0b); + uint8_t slave_isr = IO_ReadB(0xa0); + if (slave_isr) { + IO_WriteB(0xa1, IO_ReadB(0xa1) | slave_isr); + IO_WriteB(0xa0, 0x20); + } + else IO_WriteB(0x21, IO_ReadB(0x21) | (master_isr & ~4)); + IO_WriteB(0x20, 0x20); +#if C_DEBUG + uint16_t irq = 0; + uint16_t isr = master_isr; + if (slave_isr) isr = slave_isr << 8; + while (isr >>= 1) irq++; + LOG(LOG_BIOS, LOG_WARN)("Unexpected IRQ %u", irq); +#endif + } + else master_isr = 0xff; + mem_writeb(BIOS_LAST_UNEXPECTED_IRQ, master_isr); + return CBRET_NONE; +} + +static Bitu IRQ14_Dummy(void) { + /* FIXME: That's it? Don't I EOI the PIC? */ + return CBRET_NONE; +} + +static Bitu IRQ15_Dummy(void) { + /* FIXME: That's it? Don't I EOI the PIC? */ + return CBRET_NONE; +} + +void On_Software_CPU_Reset(); + +static Bitu INT18_Handler(void) { + if (ibm_rom_basic_size != 0) { + /* jump to BASIC (usually F600:0000 for IBM 5150 ROM BASIC) */ + SegSet16(cs, ibm_rom_basic_base >> 4); + reg_eip = 0; + } + else { + LOG_MSG("Restart by INT 18h requested\n"); + On_Software_CPU_Reset(); + /* does not return */ + } + return CBRET_NONE; +} + +static Bitu INT19_Handler(void) { + LOG_MSG("Restart by INT 19h requested\n"); + /* FIXME: INT 19h is sort of a BIOS boot BIOS reset-ish thing, not really a CPU reset at all. */ + On_Software_CPU_Reset(); + /* does not return */ + return CBRET_NONE; +} + +void bios_enable_ps2() { + mem_writew(BIOS_CONFIGURATION, + mem_readw(BIOS_CONFIGURATION)|0x04); /* PS/2 mouse */ +} + +void BIOS_ZeroExtendedSize(bool in) { + if(in) other_memsystems++; + else other_memsystems--; + if(other_memsystems < 0) other_memsystems=0; + + if (IS_PC98_ARCH) { + Bitu mempages = MEM_TotalPages(); /* in 4KB pages */ + + /* What applies to IBM PC/AT (zeroing out the extended memory size) + * also applies to PC-98, when HIMEM.SYS is loaded */ + if (in) mempages = 0; + + /* extended memory size (286 systems, below 16MB) */ + if (mempages > (1024UL/4UL)) { + unsigned int ext = ((mempages - (1024UL/4UL)) * 4096UL) / (128UL * 1024UL); /* convert to 128KB units */ + + /* extended memory, up to 16MB capacity (for 286 systems?) + * + * MS-DOS drivers will "allocate" for themselves by taking from the top of + * extended memory then subtracting from this value. + * + * capacity does not include conventional memory below 1MB, nor any memory + * above 16MB. + * + * PC-98 systems may reserve the top 1MB, limiting the top to 15MB instead, + * for the ISA memory hole needed for DOS games that use the 256-color linear framebuffer. + * + * 0x70 = 128KB * 0x70 = 14MB + * 0x78 = 128KB * 0x70 = 15MB */ + if (isa_memory_hole_15mb) { + if (ext > 0x70) ext = 0x70; + } + else { + if (ext > 0x78) ext = 0x78; + } + + mem_writeb(0x401,ext); + } + else { + mem_writeb(0x401,0x00); + } + + /* extended memory size (386 systems, at or above 16MB) */ + if (mempages > ((1024UL*16UL)/4UL)) { + unsigned int ext = ((mempages - ((1024UL*16UL)/4UL)) * 4096UL) / (1024UL * 1024UL); /* convert to MB */ + + /* extended memory, at or above 16MB capacity (for 386+ systems?) + * + * MS-DOS drivers will "allocate" for themselves by taking from the top of + * extended memory then subtracting from this value. + * + * capacity does not include conventional memory below 1MB, nor any memory + * below 16MB. */ + if (ext > 0xFFFE) ext = 0xFFFE; + + mem_writew(0x594,ext); + } + else { + mem_writew(0x594,0x00); + } + } +} + +unsigned char do_isapnp_chksum(const unsigned char* d, int i) { + unsigned char sum = 0; + + while (i-- > 0) + sum += *d++; + + return (0x100 - sum) & 0xFF; +} + +void MEM_ResetPageHandler_Unmapped(Bitu phys_page, Bitu pages); + +unsigned int dos_conventional_limit = 0; + +Bitu MEM_ConventionalPages(void) { + if (dos_conventional_limit == 0) return MEM_TotalPages(); + unsigned int x = dos_conventional_limit / 4u; + if (x == 0) x = 1; + if (x > MEM_TotalPages()) x = MEM_TotalPages(); + return x; +} + +bool AdapterROM_Read(Bitu address,unsigned long *size) { + unsigned char c[3]; + unsigned int i; + + if ((address & 0x1FF) != 0) { + LOG(LOG_MISC,LOG_DEBUG)("AdapterROM_Read: Caller attempted ROM scan not aligned to 512-byte boundary"); + return false; + } + + for (i=0;i < 3;i++) + c[i] = mem_readb(address+i); + + if (c[0] == 0x55 && c[1] == 0xAA) { + unsigned char chksum=0; + *size = (unsigned long)c[2] * 512UL; + for (i=0;i < (unsigned int)(*size);i++) chksum += mem_readb(address+i); + if (chksum != 0) { + LOG(LOG_MISC,LOG_WARN)("AdapterROM_Read: Found ROM at 0x%lx but checksum failed (got %02xh expect %02xh)\n",(unsigned long)address,chksum,0); + return false; + } + + return true; + } + + return false; +} + +static int bios_pc98_posx = 0; +extern bool tooutttf; + +static void BIOS_Int10RightJustifiedPrint(const int x,int &y,const char *msg, bool boxdraw = false, bool tobold = false) { + if (tooutttf) { + tooutttf = false; + change_output(10); + } + if (control->opt_fastlaunch) return; + const char *s = msg; + if (machine != MCH_PC98) { + unsigned int bold = 0; + while (*s != 0) { + if (*s == '\n') { + y++; + reg_eax = 0x0200u; // set cursor pos + reg_ebx = 0; // page zero + reg_dh = y; // row 4 + reg_dl = x; // column 20 + CALLBACK_RunRealInt(0x10); + s++; + } + else { + if (tobold&&!bold) { + if ((strlen(s)>3&&!strncmp(s, "DEL", 3))||!strncmp(s, "ESC", 3)) bold = 3; + else if (strlen(s)>5&&!strncmp(s, "ENTER", 5)) bold = 5; + else if (strlen(s)>8&&!strncmp(s, "SPACEBAR", 8)) bold = 8; + } + if (bold>0) { + bold--; + reg_eax = 0x0900u | ((unsigned char)(*s++)); + reg_ebx = 0x000fu; + reg_ecx = 0x0001u; + CALLBACK_RunRealInt(0x10); + reg_eax = 0x0300u; + reg_ebx = 0x0000u; + CALLBACK_RunRealInt(0x10); + reg_eax = 0x0200u; + reg_ebx = 0x0000u; + reg_edx++; + CALLBACK_RunRealInt(0x10); + } else { + reg_eax = 0x0E00u | ((unsigned char)(*s++)); + reg_ebx = 0x07u; + CALLBACK_RunRealInt(0x10); + } + } + } + } + else { + unsigned int bo; + + while (*s != 0) { + if (*s == '\n') { + y++; + s++; + bios_pc98_posx = x; + + bo = (((unsigned int)y * 80u) + (unsigned int)bios_pc98_posx) * 2u; + } + else if (*s == '\r') { + s++; /* ignore */ + continue; + } + else { + bo = (((unsigned int)y * 80u) + (unsigned int)(bios_pc98_posx++)) * 2u; /* NTS: note the post increment */ + if (boxdraw) { + unsigned int ch = (unsigned char)*s; + if (ch==0xcd) ch = 0x250B; + else if (ch==0xba) ch = 0x270B; + else if (ch==0xc9) ch = 0x330B; + else if (ch==0xbb) ch = 0x370B; + else if (ch==0xc8) ch = 0x3B0B; + else if (ch==0xbc) ch = 0x3F0B; + mem_writew(0xA0000+bo,ch); + } else + mem_writew(0xA0000+bo,(unsigned char)*s); + mem_writeb(0xA2000+bo,0xE1); + + s++; + bo += 2; /* and keep the cursor following the text */ + } + + reg_eax = 0x1300; // set cursor pos (PC-98) + reg_edx = bo; // byte position + CALLBACK_RunRealInt(0x18); + } + } +} + +char *getSetupLine(const char *capt, const char *cont) { + unsigned int pad1=(unsigned int)(25-strlen(capt)), pad2=(unsigned int)(41-strlen(cont)); + static char line[90]; + sprintf(line, "\x0ba%*c%s%*c%s%*c\x0ba", 12, ' ', capt, pad1, ' ', cont, pad2, ' '); + return line; +} + +const char *GetCPUType(); +void updateDateTime(int x, int y, int pos) +{ + (void)x;//UNUSED + (void)y;//UNUSED + char str[50]; + time_t curtime = time(NULL); + struct tm *loctime = localtime (&curtime); + Bitu time=(Bitu)((100.0/((double)PIT_TICK_RATE/65536.0)) * mem_readd(BIOS_TIMER))/100; + unsigned int sec=(uint8_t)((Bitu)time % 60); + time/=60; + unsigned int min=(uint8_t)((Bitu)time % 60); + time/=60; + unsigned int hour=(uint8_t)((Bitu)time % 24); + int val=0; + unsigned int bo; + Bitu edx=0, pdx=0x0500u; + for (int i=1; i<7; i++) { + switch (i) { + case 1: + val = machine==MCH_PC98?loctime->tm_year+1900:dos.date.year; + reg_edx = 0x0326u; + if (i==pos) pdx = reg_edx; + break; + case 2: + val = machine==MCH_PC98?loctime->tm_mon+1:dos.date.month; + reg_edx = 0x032bu; + if (i==pos) pdx = reg_edx; + break; + case 3: + val = machine==MCH_PC98?loctime->tm_mday:dos.date.day; + reg_edx = 0x032eu; + if (i==pos) pdx = reg_edx; + break; + case 4: + val = machine==MCH_PC98?loctime->tm_hour:hour; + reg_edx = 0x0426u; + if (i==pos) pdx = reg_edx; + break; + case 5: + val = machine==MCH_PC98?loctime->tm_min:min; + reg_edx = 0x0429u; + if (i==pos) pdx = reg_edx; + break; + case 6: + val = machine==MCH_PC98?loctime->tm_sec:sec; + reg_edx = 0x042cu; + if (i==pos) pdx = reg_edx; + break; + } + edx = reg_edx; + sprintf(str, i==1?"%04u":"%02u",val); + for (unsigned int j=0; jopt_securemode || control->SecureMode()) + strcpy(pcname, "N/A"); + else { +#if defined(WIN32) + DWORD size = DOSNAMEBUF; + GetComputerName(pcname, &size); + if (!size) +#else + int result = gethostname(pcname, DOSNAMEBUF); + if (result) +#endif + strcpy(pcname, "N/A"); + } + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Computer name:", pcname), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Product name:", ("DOSBox-X "+std::string(VERSION)).c_str()), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Product updated:", UPDATED_STR), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("", ""), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("BIOS description:", bios_type_string), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("BIOS version:", bios_version_string), true); + uint32_t year,month,day; + if (sscanf(bios_date_string,"%u/%u/%u",&month,&day,&year)==3) { + char datestr[30]; + sprintf(datestr, "%04u-%02u-%02u",year<80?2000+year:(year<100?1900+year:year),month,day); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("BIOS date:", datestr), true); + } else + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("BIOS date:", bios_date_string), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("", ""), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Processor type:", GetCPUType()), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Processor speed:", (std::to_string(CPU_CycleAutoAdjust?CPU_CyclePercUsed:CPU_CycleMax)+(CPU_CycleAutoAdjust?"%":" cycles/ms")).c_str()), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Coprocessor:", enable_fpu?"Yes":"No"), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("", ""), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Video card:", card), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Video memory:", (std::to_string(vga.mem.memsize/1024)+"K").c_str()), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("Total memory:", (std::to_string(MEM_TotalPages()*4096/1024)+"K").c_str()), true); + BIOS_Int10RightJustifiedPrint(x,y,getSetupLine("", ""), true); + BIOS_Int10RightJustifiedPrint(x,y,"\x0c8\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0cd\x0bc", true); + if (machine == MCH_PC98) + BIOS_Int10RightJustifiedPrint(x,y," ESC = Exit "); + else + BIOS_Int10RightJustifiedPrint(x,y," ESC: Exit Arrows: Select Item +/-: Change Values "); +} + +static Bitu mlimit = 0; +static Bitu t_conv = 0; +static Bitu t_conv_real = 0; +static bool bios_first_init=true; +static bool bios_has_exec_vga_bios=false; +static Bitu adapter_scan_start; + +/* FIXME: At global scope their destructors are called after the rest of DOSBox-X has shut down. Move back into BIOS scope. */ +static CALLBACK_HandlerObject int4b_callback; +static const size_t callback_count = 20; +static CALLBACK_HandlerObject callback[callback_count]; /* <- fixme: this is stupid. just declare one per interrupt. */ +static CALLBACK_HandlerObject cb_bios_post; +static CALLBACK_HandlerObject callback_pc98_lio; +static CALLBACK_HandlerObject callback_pc98_avspcm; + +Bitu call_pnp_r = ~0UL; +Bitu call_pnp_rp = 0; + +Bitu call_pnp_p = ~0UL; +Bitu call_pnp_pp = 0; + +Bitu isapnp_biosstruct_base = 0; + +Bitu BIOS_boot_code_offset = 0; +Bitu BIOS_bootfail_code_offset = 0; + +bool bios_user_reset_vector_blob_run = false; +Bitu bios_user_reset_vector_blob = 0; + +Bitu bios_user_boot_hook = 0; + +void CALLBACK_DeAllocate(Bitu in); + +void BIOS_OnResetComplete(Section *x); + +Bitu call_irq0 = 0; +Bitu call_irq07default = 0; +Bitu call_irq815default = 0; + + +/* NEC PC-98 detection notes: + * - Documented: No ASCII date at F000:FFF5 + * - CWSDPMI (PC-98 patched version): Call INT 10h AH=0F BH=FF. If registers don't change, it's PC-98 + * - DJGPP libc, crt1.c (PC-98 patched version): If the WORD at F000:FFF3 (segment part of JMP FAR) is 0xFD80, it's PC-98 */ + +void write_FFFF_PC98_signature() { + /* this may overwrite the existing signature. + * PC-98 systems DO NOT have an ASCII date at F000:FFF5 + * and the WORD value at F000:FFFE is said to be a checksum of the BIOS */ + + // The farjump at the processor reset entry point (jumps to POST routine) + phys_writeb(0xffff0,0xEA); // FARJMP + + /* Segment value must be 0xFD80 to satisfy PC-98 patched DJGPP check */ + const uint16_t oseg = RealSeg(BIOS_DEFAULT_RESET_LOCATION); + phys_writew(0xffff1,RealOff(BIOS_DEFAULT_RESET_LOCATION)-((0xFD80-oseg)*16)); // offset + phys_writew(0xffff3,0xFD80); // segment + + // write nothing (not used) + for(Bitu i = 0; i < 9; i++) phys_writeb(0xffff5+i,0); + + // fake BIOS checksum + phys_writew(0xffffe,0xABCD); +} + +void gdc_egc_enable_update_vars(void) { + unsigned char b; + + b = mem_readb(0x54D); + b &= ~0x40; + if (enable_pc98_egc) b |= 0x40; + mem_writeb(0x54D,b); + + b = mem_readb(0x597); + b &= ~0x04; + if (enable_pc98_egc) b |= 0x04; + mem_writeb(0x597,b); + + if (!enable_pc98_egc) + pc98_gdc_vramop &= ~(1 << VOPBIT_EGC); +} + +void gdc_grcg_enable_update_vars(void) { + unsigned char b; + + b = mem_readb(0x54C); + b &= ~0x02; + if (enable_pc98_grcg) b |= 0x02; + mem_writeb(0x54C,b); + + //TODO: How to reset GRCG? +} + + +void gdc_16color_enable_update_vars(void) { + unsigned char b; + + b = mem_readb(0x54C); + b &= ~0x05; + if (enable_pc98_16color) b |= 0x05; // bit0 .. DIPSW 1-8 support GLIO 16-colors + mem_writeb(0x54C,b); + + if(!enable_pc98_256color) {//force switch to 16-colors mode + void pc98_port6A_command_write(unsigned char b); + pc98_port6A_command_write(0x20); + } + if(!enable_pc98_16color) {//force switch to 8-colors mode + void pc98_port6A_command_write(unsigned char b); + pc98_port6A_command_write(0x00); + } +} + +uint32_t BIOS_get_PC98_INT_STUB(void) { + return callback[18].Get_RealPointer(); +} + +Bitu call_pc98_default_stop; + +extern bool DOS_BreakFlag; +extern bool DOS_BreakConioFlag; + +static Bitu pc98_default_stop_handler(void) { + // INT 06h, which means someone pressed the STOP key... or the CPU is signalling an invalid opcode. + // The overlap makes it extremely unclear. + LOG_MSG("Invalid opcode or unhandled PC-98 STOP key interrupt 06h"); + + // try to make it work as CTRL+BREAK in the built-in DOS environment. + if (!dos_kernel_disabled) + DOS_BreakFlag = DOS_BreakConioFlag = true; + + return CBRET_NONE; +} + +static unsigned char BCD2BIN(unsigned char x) { + return ((x >> 4) * 10) + (x & 0xF); +} + + +/* NTS: Remember the 8259 is non-sentient, and the term "slave" is used in a computer programming context */ +static Bitu Default_IRQ_Handler_Cooperative_Slave_Pic(void) { + /* PC-98 style IRQ 8-15 handling. + * + * This mimics the recommended procedure [https://www.webtech.co.jp/company/doc/undocumented_mem/io_pic.txt] + * + * mov al,20h ;Send EOI to SLAVE + * out 0008h,al + * jmp $+2 ;I/O WAIT + * mov al,0Bh ;ISR read mode set(slave) + * out 0008h,al + * jmp $+2 ;I/O WAIT + * in al,0008h ;ISR read(slave) + * cmp al,00h ;slave pic in-service ? + * jne EoiEnd + * mov al,20h ;Send EOI to MASTER + * out 0000h,al + */ + IO_WriteB(IS_PC98_ARCH ? 0x08 : 0xA0,0x20); // send EOI to slave + IO_WriteB(IS_PC98_ARCH ? 0x08 : 0xA0,0x0B); // ISR read mode set + if (IO_ReadB(IS_PC98_ARCH ? 0x08 : 0xA0) == 0) // if slave pic in service.. + IO_WriteB(IS_PC98_ARCH ? 0x00 : 0x20,0x20); // then EOI the master + + return CBRET_NONE; +} + +extern uint32_t tandy_128kbase; + +static int bios_post_counter = 0; + +extern void BIOSKEY_PC98_Write_Tables(void); +#if !defined(OSFREE) +extern Bitu PC98_AVSDRV_PCM_Handler(void); +#endif + +static unsigned int acpiptr2ofs(unsigned char *w) { + return w - ACPI_buffer; +} + +static PhysPt acpiofs2phys(unsigned int o) { + return ACPI_BASE + o; +} + +class ACPISysDescTableWriter { +public: + ACPISysDescTableWriter(); + ~ACPISysDescTableWriter(void); +public: + ACPISysDescTableWriter &begin(unsigned char *w,unsigned char *f,size_t n_tablesize=36); + ACPISysDescTableWriter &setRev(const unsigned char rev); + ACPISysDescTableWriter &setOemID(const char *id); + ACPISysDescTableWriter &setSig(const char *sig); + ACPISysDescTableWriter &setOemTableID(const char *id); + ACPISysDescTableWriter &setOemRev(const uint32_t rev); + ACPISysDescTableWriter &setCreatorID(const uint32_t id); + ACPISysDescTableWriter &setCreatorRev(const uint32_t rev); + ACPISysDescTableWriter &expandto(size_t sz); + unsigned char* getptr(size_t ofs=0,size_t sz=1); + size_t get_tablesize(void) const; + unsigned char* finish(void); +private: + size_t tablesize = 0; + unsigned char* base = NULL; + unsigned char* f = NULL; +}; + +size_t ACPISysDescTableWriter::get_tablesize(void) const { + return tablesize; +} + +ACPISysDescTableWriter::ACPISysDescTableWriter() { +} + +ACPISysDescTableWriter::~ACPISysDescTableWriter(void) { + if (tablesize != 0) LOG(LOG_MISC,LOG_ERROR)("ACPI table writer destructor called without completing a table"); +} + +ACPISysDescTableWriter &ACPISysDescTableWriter::begin(unsigned char *n_w,unsigned char *n_f,size_t n_tablesize) { + if (tablesize != 0) LOG(LOG_MISC,LOG_ERROR)("ACPI table writer asked to begin a table without completing the last table"); + base = n_w; + f = n_f; + tablesize = n_tablesize; + assert(tablesize >= 36); + assert((base+tablesize) <= f); + assert(base != NULL); + assert(f != NULL); + assert(base < f); + + memset(base,0,tablesize); + memcpy(base+10,"DOSBOX",6); // OEM ID + memcpy(base+16,"DOSBox-X",8); // OEM Table ID + host_writed(base+24,1); // OEM revision + memcpy(base+28,"DBOX",4); // Creator ID + host_writed(base+32,1); // Creator revision + + return *this; +} + +ACPISysDescTableWriter &ACPISysDescTableWriter::setRev(const unsigned char rev) { + assert(base != NULL); + assert(tablesize >= 36); + base[8] = rev; + return *this; +} + +ACPISysDescTableWriter &ACPISysDescTableWriter::setOemID(const char *id) { + assert(id != NULL); + assert(base != NULL); + assert(tablesize >= 36); + unsigned char *wp = base+10; + for (unsigned int i=0;i < 6;i++) { + if (*id != 0) + *wp++ = (unsigned char)(*id++); + else + *wp++ = ' '; + } + return *this; +} + +ACPISysDescTableWriter &ACPISysDescTableWriter::setSig(const char *sig) { + assert(sig != NULL); + assert(base != NULL); + assert(tablesize >= 36); + unsigned char *wp = base; + for (unsigned int i=0;i < 4;i++) { + if (*sig != 0) + *wp++ = (unsigned char)(*sig++); + else + *wp++ = ' '; + } + return *this; +} + +ACPISysDescTableWriter &ACPISysDescTableWriter::setOemTableID(const char *id) { + assert(id != NULL); + assert(base != NULL); + assert(tablesize >= 36); + unsigned char *wp = base+16; + for (unsigned int i=0;i < 8;i++) { + if (*id != 0) + *wp++ = (unsigned char)(*id++); + else + *wp++ = ' '; + } + return *this; +} + +ACPISysDescTableWriter &ACPISysDescTableWriter::setOemRev(const uint32_t rev) { + assert(base != NULL); + assert(tablesize >= 36); + host_writed(base+24,rev); + return *this; +} + +ACPISysDescTableWriter &ACPISysDescTableWriter::setCreatorID(const uint32_t id) { + assert(base != NULL); + assert(tablesize >= 36); + host_writed(base+28,id); + return *this; +} + +ACPISysDescTableWriter &ACPISysDescTableWriter::setCreatorRev(const uint32_t rev) { + assert(base != NULL); + assert(tablesize >= 36); + host_writed(base+32,rev); + return *this; +} + +ACPISysDescTableWriter &ACPISysDescTableWriter::expandto(size_t sz) { + assert(base != NULL); + assert((base+sz) <= f); + if (tablesize < sz) tablesize = sz; + return *this; +} + +unsigned char* ACPISysDescTableWriter::getptr(size_t ofs,size_t sz) { + assert(base != NULL); + assert((base+ofs+sz) <= f); + if (tablesize < (ofs+sz)) tablesize = ofs+sz; + return base+ofs; +} + +unsigned char *ACPISysDescTableWriter::finish(void) { + if (base != NULL) { + unsigned char *ret = base + tablesize; + + assert((base+tablesize) <= f); + assert(tablesize >= 36); + + /* update length field */ + host_writed(base+4,tablesize); + + /* update checksum field */ + unsigned int i,c; + base[9] = 0; + c = 0; for (i=0;i < tablesize;i++) c += base[i]; + base[9] = (0 - c) & 0xFFu; + + base = f = NULL; + tablesize = 0; + return ret; + } + + return NULL; +} + +enum class ACPIRegionSpace { + SystemMemory=0, + SystemIO=1, + PCIConfig=2, + EmbeddedControl=3, + SMBus=4 +}; + +namespace ACPIMethodFlags { + static constexpr unsigned char ArgCount(const unsigned c) { + return c&3u; + } + enum { + NotSerialized=(0 << 3), + Serialized=(1 << 3) + }; +} + +static constexpr unsigned int ACPIrtIO_16BitDecode = (1u << 0u); + +static constexpr unsigned int ACPIrtMR24_Writeable = (1u << 0u); +static constexpr unsigned int ACPIrtMR32_Writeable = (1u << 0u); + +namespace ACPIFieldFlag { + namespace AccessType { + enum { + AnyAcc=0, + ByteAcc=1, + WordAcc=2, + DwordAcc=3, + BlockAcc=4, + SMBSendRevAcc=5, + SMBQuickAcc=6 + }; + } + namespace LockRule { + enum { + NoLock=(0 << 4), + Lock=(1 << 4) + }; + } + namespace UpdateRule { + enum { + Preserve=(0 << 5), + WriteAsOnes=(1 << 5), + WriteAsZeros=(2 << 5) + }; + } +} + +enum class ACPIAMLOpcode:unsigned char { + ZeroOp = 0x00, // ACPI 1.0+ + OneOp = 0x01, // ACPI 1.0+ + + AliasOp = 0x06, // ACPI 1.0+ + + NameOp = 0x08, // ACPI 1.0+ + + BytePrefix = 0x0A, // ACPI 1.0+ + WordPrefix = 0x0B, // ACPI 1.0+ + DwordPrefix = 0x0C, // ACPI 1.0+ + StringPrefix = 0x0D, // ACPI 1.0+ + QWordPrefix = 0x0E, // ACPI 2.0+ + + ScopeOp = 0x10, // ACPI 1.0+ + BufferOP = 0x11, // ACPI 1.0+ + PackageOp = 0x12, // ACPI 1.0+ + VarPackageOp = 0x13, // ACPI 2.0+ + MethodOp = 0x14, // ACPI 1.0+ + ExternalOp = 0x15, // ACPI 6.0+ + + DualNamePrefix = 0x2E, // ACPI 1.0+ + MultiNamePrefix = 0x2F, // ACPI 1.0+ + + NameCharA = 0x41, // ACPI 1.0b+ + NameCharB = 0x42, // ACPI 1.0b+ + NameCharC = 0x43, // ACPI 1.0b+ + NameCharD = 0x44, // ACPI 1.0b+ + NameCharE = 0x45, // ACPI 1.0b+ + NameCharF = 0x46, // ACPI 1.0b+ + NameCharG = 0x47, // ACPI 1.0b+ + NameCharH = 0x48, // ACPI 1.0b+ + NameCharI = 0x49, // ACPI 1.0b+ + NameCharJ = 0x4A, // ACPI 1.0b+ + NameCharK = 0x4B, // ACPI 1.0b+ + NameCharL = 0x4C, // ACPI 1.0b+ + NameCharM = 0x4D, // ACPI 1.0b+ + NameCharN = 0x4E, // ACPI 1.0b+ + NameCharO = 0x4F, // ACPI 1.0b+ + NameCharP = 0x50, // ACPI 1.0b+ + NameCharQ = 0x51, // ACPI 1.0b+ + NameCharR = 0x52, // ACPI 1.0b+ + NameCharS = 0x53, // ACPI 1.0b+ + NameCharT = 0x54, // ACPI 1.0b+ + NameCharU = 0x55, // ACPI 1.0b+ + NameCharV = 0x56, // ACPI 1.0b+ + NameCharW = 0x57, // ACPI 1.0b+ + NameCharX = 0x58, // ACPI 1.0b+ + NameCharY = 0x59, // ACPI 1.0b+ + NameCharZ = 0x5A, // ACPI 1.0b+ + + ExtendedOperatorPrefix = 0x5B, // ACPI 1.0+ + RootNamePrefix = 0x5C, // ACPI 1.0+ + + ParentNamePrefix = 0x5E, // ACPI 1.0+ + NameChar_ = 0x5F, // ACPI 2.0+ + + Local0 = 0x60, // ACPI 1.0+ + Local1 = 0x61, // ACPI 1.0+ + Local2 = 0x62, // ACPI 1.0+ + Local3 = 0x63, // ACPI 1.0+ + Local4 = 0x64, // ACPI 1.0+ + Local5 = 0x65, // ACPI 1.0+ + Local6 = 0x66, // ACPI 1.0+ + Local7 = 0x67, // ACPI 1.0+ + Arg0 = 0x68, // ACPI 1.0+ + Arg1 = 0x69, // ACPI 1.0+ + Arg2 = 0x6A, // ACPI 1.0+ + Arg3 = 0x6B, // ACPI 1.0+ + Arg4 = 0x6C, // ACPI 1.0+ + Arg5 = 0x6D, // ACPI 1.0+ + Arg6 = 0x6E, // ACPI 1.0+ + + StoreOp = 0x70, // ACPI 1.0+ + RefOfOp = 0x71, // ACPI 1.0+ + AddOp = 0x72, // ACPI 1.0+ + ConcatOp = 0x73, // ACPI 1.0+ + SubtractOp = 0x74, // ACPI 1.0+ + IncrementOp = 0x75, // ACPI 1.0+ + DecrementOp = 0x76, // ACPI 1.0+ + MultiplyOp = 0x77, // ACPI 1.0+ + DivideOp = 0x78, // ACPI 1.0+ + ShiftLeftOp = 0x79, // ACPI 1.0+ + ShiftRightOp = 0x7A, // ACPI 1.0+ + AndOp = 0x7B, // ACPI 1.0+ + NAndOp = 0x7C, // ACPI 1.0+ + OrOp = 0x7D, // ACPI 1.0+ + NOrOp = 0x7E, // ACPI 1.0+ + XOrOp = 0x7F, // ACPI 1.0+ + NotOp = 0x80, // ACPI 1.0+ + FindSetLeftBitOp = 0x81, // ACPI 1.0+ + FindSetRightBitOp = 0x82, // ACPI 1.0+ + DerefOfOp = 0x83, // ACPI 2.0+ + ConcatResOp = 0x84, // ACPI 2.0+ + ModOp = 0x85, // ACPI 2.0+ + NotifyOp = 0x86, // ACPI 1.0+ + SizeOfOp = 0x87, // ACPI 1.0+ + IndexOp = 0x88, // ACPI 1.0+ + MatchOp = 0x89, // ACPI 1.0+ + DWordFieldOp = 0x8A, // ACPI 1.0+ + CreateDWordFieldOp = 0x8A, // ACPI 1.0b+ + WordFieldOp = 0x8B, // ACPI 1.0+ + CreateWordFieldOp = 0x8B, // ACPI 1.0b+ + ByteFieldOp = 0x8C, // ACPI 1.0+ + CreateByteFieldOp = 0x8C, // ACPI 1.0b+ + BitFieldOp = 0x8D, // ACPI 1.0+ + CreateBitFieldOp = 0x8D, // ACPI 1.0b+ + ObjTypeOp = 0x8E, // ACPI 1.0+ + CreateQWordField = 0x8F, // ACPI 2.0+ + LAndOp = 0x90, // ACPI 1.0+ + LOrOp = 0x91, // ACPI 1.0+ + LNotOp = 0x92, // ACPI 1.0+ + LEQOp = 0x93, // ACPI 1.0+ + LEqualOp = 0x93, // ACPI 1.0b+ same as LEQOp obviously to make opcode name clearer +/* LNotEQOp = 0x93 0x92 */ // ACPI 1.0, seems to be an error in the documentation as that is LEqualOp LNotOp which doesn't make sense +/* LNotEqualOp = 0x92 0x93 */ // ACPI 1.0b+, correction of opcode and to make opcode name clearer. Literally LNotOp LEqualOp + LGOp = 0x94, // ACPI 1.0+ + LGreaterOp = 0x94, // ACPI 1.0b+ same as LGOp obviously to make opcode name clearer +/* LLEQOp = 0x94 0x92 */ // ACPI 1.0, seems to be an error in the documentation as that is LEqualOp LNotOp which doesn't make sense +/* LLessEqualOp = 0x92 0x94 */ // ACPI 1.0b+, correction of opcode and to make opcode name clearer. Literally LNotOp LGreaterOp + LLOp = 0x95, // ACPI 1.0+ + LLessOp = 0x95, // ACPI 1.0b+ same as LLOp obviously to make opcode name clearer +/* LGEQOp = 0x95 0x92 */ // ACPI 1.0, seems to be an error in the documentation as that is LEqualOp LNotOp which doesn't make sense +/* LGreaterEqualOp = 0x95 0x92 */ + // ^ ACPI 1.0b+, um... they kept the same mistake, but does make opcode name clearer, but the definition does correctly say LNotOp LLessOp. + // ^ Um... in fact ACPI 2.0 keeps the mistake and the corrected definition! They didn't fix THAT error until ACPI 3.0! + // ^ Would mistakes like this have anything to do with the Linux kernel reportedly not wanting to support any ACPI BIOS made before the year 2000? +/* LGreaterEqualOp = 0x92 0x95 */ // ACPI 3.0+ corrected byte pattern. Literally LNotOp LLessOp + BuffOp = 0x96, // ACPI 2.0+ + ToBufferOp = 0x96, // ACPI 2.0a+, correction of opcode and to make opcode name clearer + DecStrOp = 0x97, // ACPI 2.0+ + ToDecimalStringOp = 0x97, // ACPI 2.0a+, correction of opcode and to make opcode name clearer + HexStrOp = 0x98, // ACPI 2.0+ + ToHexStringOp = 0x98, // ACPI 2.0a+, correction of opcode and to make opcode name clearer + IntOp = 0x99, // ACPI 2.0+ + ToIntegerOp = 0x99, // ACPI 2.0a+, correction of opcode and to make opcode name clearer + + StringOp = 0x9C, // ACPI 2.0+ + ToStringOp = 0x9C, // ACPI 2.0a+, correction of opcode and to make opcode name clearer + CopyOp = 0x9D, // ACPI 2.0+ + CopyObjectOp = 0x9D, // ACPI 2.0a+, correction of opcode and to make opcode name clearer + MidOp = 0x9E, // ACPI 2.0+ + ContinueOp = 0x9F, // ACPI 2.0+ + IfOp = 0xA0, // ACPI 1.0+ + ElseOp = 0xA1, // ACPI 1.0+ + WhileOp = 0xA2, // ACPI 1.0+ + NoOp = 0xA3, // ACPI 1.0+ + ReturnOp = 0xA4, // ACPI 1.0+ + BreakOp = 0xA5, // ACPI 1.0+ + + BreakPointOp = 0xCC, // ACPI 1.0+ + + OnesOp = 0xFF // ACPI 1.0+ +}; + +enum class ACPIAMLOpcodeEOP5B:unsigned char { + /*0x5B*/MutexOp = 0x01, // ACPI 1.0+ + /*0x5B*/EventOp = 0x02, // ACPI 1.0+ + + /*0x5B*/ShiftRightBitOp = 0x10, // ACPI 1.0 only, disappeared 1.0b + /*0x5B*/ShiftLeftBitOp = 0x11, // ACPI 1.0 only, disappeared 1.0b + /*0x5B*/CondRefOp = 0x12, // ACPI 1.0+ + /*0x5B*/CreateFieldOp = 0x13, // ACPI 1.0+ + + /*0x5B*/LocalTableOp = 0x1F, // ACPI 2.0+ + /*0x5B*/LoadOp = 0x20, // ACPI 1.0+ + /*0x5B*/StallOp = 0x21, // ACPI 1.0+ + /*0x5B*/SleepOp = 0x22, // ACPI 1.0+ + /*0x5B*/AcquireOp = 0x23, // ACPI 1.0+ + /*0x5B*/SignalOp = 0x24, // ACPI 1.0+ + /*0x5B*/WaitOp = 0x25, // ACPI 1.0+ + /*0x5B*/ResetOp = 0x26, // ACPI 1.0+ + /*0x5B*/ReleaseOp = 0x27, // ACPI 1.0+ + /*0x5B*/FromBCDOp = 0x28, // ACPI 1.0+ + /*0x5B*/ToBCD = 0x29, // ACPI 1.0+ + /*0x5B*/UnloadOp = 0x2A, // ACPI 1.0+ + + /*0x5B*/RevisionOp = 0x30, // ACPI 1.0b+ + /*0x5B*/DebugOp = 0x31, // ACPI 1.0+ + /*0x5B*/FatalOp = 0x32, // ACPI 1.0+ + /*0x5B*/TimerOp = 0x33, // ACPI 3.0+ + + /*0x5B*/OpRegionOp = 0x80, // ACPI 1.0+ + /*0x5B*/FieldOp = 0x81, // ACPI 1.0+ + /*0x5B*/DeviceOp = 0x82, // ACPI 1.0+ + /*0x5B*/ProcessorOp = 0x83, // ACPI 1.0+ + /*0x5B*/PowerResOp = 0x84, // ACPI 1.0+ + /*0x5B*/ThermalZoneOp = 0x85, // ACPI 1.0+ + /*0x5B*/IndexFieldOp = 0x86, // ACPI 1.0+ + /*0x5B*/BankFieldOp = 0x87, // ACPI 1.0+ + /*0x5B*/DataRegionOp = 0x88 // ACPI 2.0+ +}; + +#include + +/* ACPI AML (ACPI Machine Language) writer. + * See also ACPI Specification 1.0b [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/BIOS/ACPI%2c%20Advanced%20Configuration%20and%20Power%20Interface/Advanced%20Configuration%20and%20Power%20Interface%20Specification%20%281999%2d02%2d02%29%20v1%2e0b%2epdf]. + * + * WARNING: The 1.0 specification [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/BIOS/ACPI%2c%20Advanced%20Configuration%20and%20Power%20Interface/Advanced%20Configuration%20and%20Power%20Interface%20Specification%20%281996%2d12%2d22%29%20v1%2e0%2epdf] seems to have some mistakes in a few opcodes in how they are defined, which probably means if your BIOS is from 1996-1998 it might have those few erroneous AML opcodes. */ +class ACPIAMLWriter { + public: + static constexpr unsigned int MaxPkgSize = 0xFFFFFFFu; + public: + struct pkg_t { + unsigned char* pkg_len = NULL; + unsigned char* pkg_data = NULL; + unsigned int element_count = 0; + }; + std::stack pkg_stack; + public: + ACPIAMLWriter(); + ~ACPIAMLWriter(); + public: + unsigned char* writeptr(void) const; + void begin(unsigned char *n_w,unsigned char *n_f); + public: + ACPIAMLWriter &rtDMA(const unsigned char bitmask,const unsigned char flags); + ACPIAMLWriter &rtMemRange24(const unsigned int flags,const unsigned int minr,const unsigned int maxr,const unsigned int alignr,const unsigned int rangr); + ACPIAMLWriter &rtMemRange32(const unsigned int flags,const unsigned int minr,const unsigned int maxr,const unsigned int alignr,const unsigned int rangr); + ACPIAMLWriter &rtIO(const unsigned int flags,const uint16_t minport,const uint16_t maxport,const uint8_t alignment,const uint8_t rlength); + ACPIAMLWriter &rtIRQ(const uint16_t bitmask/*bits [15:0] correspond to IRQ 15-0*/,const bool pciStyle=false); + ACPIAMLWriter &rtHdrSmall(const unsigned char itemName,const unsigned int length); + ACPIAMLWriter &rtHdrLarge(const unsigned char itemName,const unsigned int length); + ACPIAMLWriter &rtBegin(void); + ACPIAMLWriter &rtEnd(void); + public: + ACPIAMLWriter &NameOp(const char *name); + ACPIAMLWriter &ByteOp(const unsigned char v); + ACPIAMLWriter &WordOp(const unsigned int v); + ACPIAMLWriter &DwordOp(const unsigned long v); + ACPIAMLWriter &StringOp(const char *str); + ACPIAMLWriter &OpRegionOp(const char *name,const ACPIRegionSpace regionspace); + ACPIAMLWriter &FieldOp(const char *name,const unsigned int pred_size,const unsigned int fieldflag); + ACPIAMLWriter &FieldOpEnd(void); + ACPIAMLWriter &ScopeOp(const unsigned int pred_size=MaxPkgSize); + ACPIAMLWriter &ScopeOpEnd(void); + ACPIAMLWriter &PackageOp(const unsigned int pred_size=MaxPkgSize); + ACPIAMLWriter &RootCharScopeOp(void); + ACPIAMLWriter &PackageOpEnd(void); + ACPIAMLWriter &RootCharOp(void); + ACPIAMLWriter &NothingOp(void); + ACPIAMLWriter &ZeroOp(void); + ACPIAMLWriter &OneOp(void); + ACPIAMLWriter &AliasOp(const char *what,const char *to_what); + ACPIAMLWriter &BufferOpEnd(void); + ACPIAMLWriter &BufferOp(const unsigned int pred_size=MaxPkgSize); + ACPIAMLWriter &BufferOp(const unsigned char *data,const size_t datalen); + ACPIAMLWriter &DeviceOp(const char *name,const unsigned int pred_size=MaxPkgSize); + ACPIAMLWriter &DeviceOpEnd(void); + ACPIAMLWriter &MethodOp(const char *name,const unsigned int pred_size,const unsigned int methodflags); + ACPIAMLWriter &MethodOpEnd(void); + ACPIAMLWriter &ReturnOp(void); + ACPIAMLWriter &IfOp(const unsigned int pred_size=MaxPkgSize); + ACPIAMLWriter &IfOpEnd(void); + ACPIAMLWriter &ElseOp(const unsigned int pred_size=MaxPkgSize); + ACPIAMLWriter &ElseOpEnd(void); + ACPIAMLWriter &LEqualOp(void); + ACPIAMLWriter &LNotEqualOp(void); + ACPIAMLWriter &LNotOp(void); + ACPIAMLWriter &LAndOp(void); + ACPIAMLWriter &AndOp(void); + ACPIAMLWriter &ArgOp(const unsigned int arg); /* Arg0 through Arg6 */ + ACPIAMLWriter &LocalOp(const unsigned int l); /* Local0 through Local7 */ + ACPIAMLWriter &StoreOp(void); + ACPIAMLWriter &NOrOp(void); + ACPIAMLWriter &OrOp(void); + ACPIAMLWriter &NAndOp(void); + public:// ONLY for writing fields! + ACPIAMLWriter &FieldOpElement(const char *name,const unsigned int bits); + public: + ACPIAMLWriter &PkgLength(const unsigned int len,unsigned char* &wp,const unsigned int minlen=1); + ACPIAMLWriter &PkgLength(const unsigned int len,const unsigned int minlen=1); + ACPIAMLWriter &Name(const char *name); + ACPIAMLWriter &MultiNameOp(void); + ACPIAMLWriter &DualNameOp(void); + ACPIAMLWriter &BeginPkg(const unsigned int pred_length=MaxPkgSize); + ACPIAMLWriter &EndPkg(void); + ACPIAMLWriter &CountElement(void); + private: + unsigned char* w=NULL,*f=NULL; + unsigned char* buffer_len_pl = NULL; + unsigned char* rt_start = NULL; +}; + +/* StoreOp Operand Supername: Store Operand into Supername */ +ACPIAMLWriter &ACPIAMLWriter::StoreOp(void) { + *w++ = 0x70; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::LocalOp(const unsigned int l) { + if (l <= 7) + *w++ = 0x60 + l; /* 0x60..0x67 -> Local0..Local7 */ + else + E_Exit("ACPI AML writer LocalOp out of range"); + + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::ArgOp(const unsigned int arg) { + if (arg <= 6) + *w++ = 0x68 + arg; /* 0x68..0x6E -> Arg0..Arg6 */ + else + E_Exit("ACPI AML writer ArgOp out of range"); + + return *this; +} + +/* Binary operators like And and Xor are Operand1 Operand2 Target, and the return value + * of the operator is the result. What the ACPI specification is very unclear about, but + * hints at from a sample bit of ASL concerning PowerResource(), is that if you just + * want to evaluate the operator and do not care to store the result anywhere you can just + * set Target to Zero. + * + * This example doesn't make sense unless you consider that this is how you encode "Nothing" + * in the example on that page in spec 1.0b: + * + * Method(_STA) { + * Return (Xor (GIO.IDEI, One, Zero)) // inverse of isolation + * } + * + * See what they did there? */ +ACPIAMLWriter &ACPIAMLWriter::RootCharOp(void) { + *w++ = '\\'; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::RootCharScopeOp(void) { + RootCharOp(); /* this is how iasl encodes for example Scope(\) */ + ZeroOp(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::NothingOp(void) { + ZeroOp(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::ZeroOp(void) { + *w++ = 0x00; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::OneOp(void) { + *w++ = 0x01; + return *this; +} + +/* LEqual Operand1 Operand2 */ +ACPIAMLWriter &ACPIAMLWriter::LEqualOp(void) { + *w++ = 0x93; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::LNotOp(void) { + *w++ = 0x92; + return *this; +} + +/* LAndOp Operand1 Operand2 == Operand1 && Operand2 */ +ACPIAMLWriter &ACPIAMLWriter::LAndOp(void) { + *w++ = 0x90; + return *this; +} + +/* NAndOp Operand1 Operand2 Target -> Target = Operand1 & Operand2 */ +ACPIAMLWriter &ACPIAMLWriter::NAndOp(void) { + *w++ = 0x7C; + return *this; +} + +/* AndOp Operand1 Operand2 Target -> Target = Operand1 & Operand2 */ +ACPIAMLWriter &ACPIAMLWriter::AndOp(void) { + *w++ = 0x7B; + return *this; +} + +/* NOrOp Operand1 Operand2 Target -> Target = Operand1 & Operand2 */ +ACPIAMLWriter &ACPIAMLWriter::NOrOp(void) { + *w++ = 0x7E; + return *this; +} + +/* OrOp Operand1 Operand2 Target -> Target = Operand1 & Operand2 */ +ACPIAMLWriter &ACPIAMLWriter::OrOp(void) { + *w++ = 0x7D; + return *this; +} + +/* This makes sense if you think of an AML interpreter as something which encounters a LNotOp() + * and then runs the interpreter to parse the following token(s) to evaluate an int so it can + * do a logical NOT on the result of the evaluation. In other words this isn't like x86 assembly + * which you follow instruction by instruction but more like how you parse and evaluate expressions + * such as "4+5*3" properly. */ +ACPIAMLWriter &ACPIAMLWriter::LNotEqualOp(void) { + LNotOp(); + LEqualOp(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::BufferOp(const unsigned char *data,const size_t datalen) { + /* Notice this OP was obviously invented by the Department of Redundant Redundancy somewhere deep within Microsoft. + * This op stores both a PkgLength containing the overall buffer data and then the first bytes are a ByteOp encoding the length of the buffer. + * So basically it stores the length twice. What? Why? */ + *w++ = 0x11; + BeginPkg(datalen+8/*Byte/Word/DwordOp*/); + if (datalen >= 0x10000) DwordOp(datalen); + else if (datalen >= 0x100) WordOp(datalen); + else ByteOp(datalen); + if (datalen > 0) { + memcpy(w,data,datalen); + w += datalen; + } + EndPkg(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::BufferOp(const unsigned int pred_size) { + assert(pred_size >= 10); + *w++ = 0x11; + BeginPkg(pred_size); + DwordOp(0); // placeholder + buffer_len_pl = w - 4; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::BufferOpEnd(void) { + assert(buffer_len_pl != NULL); + host_writed(buffer_len_pl,size_t(w - (buffer_len_pl + 4))); + buffer_len_pl = NULL; + EndPkg(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::AliasOp(const char *what,const char *to_what) { + *w++ = 0x06; + Name(what); + Name(to_what); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::ReturnOp(void) { + *w++ = 0xA4; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::IfOp(const unsigned int pred_size) { + *w++ = 0xA0; + BeginPkg(pred_size); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::IfOpEnd(void) { + EndPkg(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::ElseOp(const unsigned int pred_size) { + *w++ = 0xA1; + BeginPkg(pred_size); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::ElseOpEnd(void) { + EndPkg(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::rtHdrLarge(const unsigned char itemName,const unsigned int length) { + assert(length <= 65536); + assert(itemName < 128); + *w++ = 0x80 + itemName; + host_writew(w,length); w += 2; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::rtHdrSmall(const unsigned char itemName,const unsigned int length) { + assert(length < 8); + assert(itemName < 16); + *w++ = (itemName << 3) + length; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::rtBegin(void) { + rt_start = w; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::rtEnd(void) { + rtHdrSmall(15/*end tag format*/,1/*length*/); + if (rt_start != NULL) { + unsigned char sum = 0; + for (unsigned char *s=rt_start;s < w;s++) sum += *s++; + *w++ = 0x100 - sum; + } + else { + *w++ = 0; + } + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::rtMemRange24(const unsigned int flags,const unsigned int minr,const unsigned int maxr,const unsigned int alignr,const unsigned int rangr) { + rtHdrLarge(1/*24-bit memory range format*/,9/*length*/); + *w++ = flags; + host_writew(w,minr >> 8u); w += 2; + host_writew(w,maxr >> 8u); w += 2; + host_writew(w,(alignr + 0xFFu) >> 8u); w += 2; /* FIXME: Um... alignment in bytes but everything else multiple of 256 bytes? */ + host_writew(w,rangr >> 8u); w += 2; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::rtMemRange32(const unsigned int flags,const unsigned int minr,const unsigned int maxr,const unsigned int alignr,const unsigned int rangr) { + rtHdrLarge(5/*32-bit memory range format*/,17/*length*/); + *w++ = flags; + host_writed(w,minr); w += 4; + host_writed(w,maxr); w += 4; + host_writed(w,alignr); w += 4; + host_writed(w,rangr); w += 4; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::rtDMA(const unsigned char bitmask,const unsigned char flags) { + rtHdrSmall(5/*DMA format*/,2/*length*/); + *w++ = bitmask; + *w++ = flags; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::rtIO(const unsigned int flags,const uint16_t minport,const uint16_t maxport,const uint8_t alignment,const uint8_t rlength) { + rtHdrSmall(8/*IO format*/,7/*length*/); + *w++ = (unsigned char)flags; + host_writew(w,minport); w += 2; + host_writew(w,maxport); w += 2; + *w++ = alignment; + *w++ = rlength; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::rtIRQ(const uint16_t bitmask,const bool pciStyle) { + rtHdrSmall(4/*IRQ format*/,3/*length*/); + host_writew(w,bitmask); w += 2; + *w++ = pciStyle ? 0x18/*active low level trigger shareable*/ : 0x01/*active high edge trigger*/; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::NameOp(const char *name) { + *w++ = 0x08; // NameOp + Name(name); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::Name(const char *name) { + for (unsigned int i=0;i < 4;i++) { + if (*name) *w++ = *name++; + else *w++ = '_'; + } + + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::MultiNameOp(void) { + *w++ = 0x2F; // MultiNamePrefix + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::DualNameOp() { + *w++ = 0x2E; // DualNamePrefix + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::ByteOp(const unsigned char v) { + *w++ = 0x0A; // ByteOp + *w++ = v; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::WordOp(const unsigned int v) { + *w++ = 0x0B; // WordOp + host_writew(w,v); w += 2; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::DwordOp(const unsigned long v) { + *w++ = 0x0C; // DwordOp + host_writed(w,v); w += 4; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::StringOp(const char *str) { + /* WARNING: Strings are only supposed to have ASCII 0x01-0x7F */ + *w++ = 0x0D; // StringOp + while (*str != 0) *w++ = *str++; + *w++ = 0x00; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::OpRegionOp(const char *name,const ACPIRegionSpace regionspace) { + *w++ = 0x5B; + *w++ = 0x80; + Name(name); + *w++ = (unsigned char)regionspace; + // and then the caller must write the RegionAddress and RegionLength + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::DeviceOp(const char *name,const unsigned int pred_size) { + *w++ = 0x5B; + *w++ = 0x82; + BeginPkg(pred_size); + Name(name); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::DeviceOpEnd(void) { + EndPkg(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::MethodOp(const char *name,const unsigned int pred_size,const unsigned int methodflags) { + *w++ = 0x14; + BeginPkg(pred_size); + Name(name); + *w++ = (unsigned char)methodflags; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::MethodOpEnd(void) { + EndPkg(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::FieldOp(const char *name,const unsigned int pred_size,const unsigned int fieldflag) { + *w++ = 0x5B; + *w++ = 0x81; + BeginPkg(pred_size); + Name(name); + *w++ = fieldflag; + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::FieldOpEnd(void) { + EndPkg(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::ScopeOp(const unsigned int pred_size) { + *w++ = 0x10; + BeginPkg(pred_size); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::ScopeOpEnd(void) { + EndPkg(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::PackageOp(const unsigned int pred_size) { + *w++ = 0x12; + BeginPkg(pred_size); + *w++ = 0x00; // placeholder for element count + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::PackageOpEnd(void) { + assert(!pkg_stack.empty()); + + pkg_t &ent = pkg_stack.top(); + + if (ent.element_count > 255u) E_Exit("ACPI AML writer too many elements in package"); + *ent.pkg_data = ent.element_count; /* element count follows PkgLength */ + + EndPkg(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::PkgLength(const unsigned int len,const unsigned int minlen) { + return PkgLength(len,w,minlen); +} + +ACPIAMLWriter &ACPIAMLWriter::PkgLength(const unsigned int len,unsigned char* &wp,const unsigned int minlen) { + if (len >= 0x10000000 || minlen > 4) { + E_Exit("ACPI AML writer PkgLength value too large"); + } + else if (len >= 0x100000 || minlen >= 4) { + *wp++ = (unsigned char)( len & 0x0F) | 0xC0; + *wp++ = (unsigned char)((len >> 4) & 0xFF); + *wp++ = (unsigned char)((len >> 12) & 0xFF); + *wp++ = (unsigned char)((len >> 20) & 0xFF); + } + else if (len >= 0x1000 || minlen >= 3) { + *wp++ = (unsigned char)( len & 0x0F) | 0x80; + *wp++ = (unsigned char)((len >> 4) & 0xFF); + *wp++ = (unsigned char)((len >> 12) & 0xFF); + } + else if (len >= 0x40 || minlen >= 2) { + *wp++ = (unsigned char)( len & 0x0F) | 0x40; + *wp++ = (unsigned char)((len >> 4) & 0xFF); + } + else { + *wp++ = (unsigned char)len; + } + + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::FieldOpElement(const char *name,const unsigned int bits) { + if (*name != 0) + Name(name); + else + *w++ = 0; + + PkgLength(bits); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::BeginPkg(const unsigned int /*pred_length*/) { + pkg_t ent; + + /* WARNING: Specify a size large enough. Once written, it cannot be extended if + * needed. By default, this code writes an overlarge field to make sure + * it can always update */ + + if (pkg_stack.size() >= 32) E_Exit("ACPI AML writer BeginPkg too much recursion"); + + ent.pkg_len = w; + PkgLength(MaxPkgSize);//placeholder + ent.pkg_data = w; + + pkg_stack.push(std::move(ent)); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::EndPkg(void) { + if (pkg_stack.empty()) E_Exit("ACPI AML writer EndPkg with empty stack"); + + pkg_t &ent = pkg_stack.top(); + + const unsigned long len = (unsigned long)(w - ent.pkg_len); + const unsigned int lflen = (unsigned int)(ent.pkg_data - ent.pkg_len); + PkgLength(len,ent.pkg_len,lflen); + if (ent.pkg_len != ent.pkg_data) E_Exit("ACPI AML writer length update exceeds pkglength field"); + pkg_stack.pop(); + return *this; +} + +ACPIAMLWriter &ACPIAMLWriter::CountElement(void) { + if (pkg_stack.empty()) E_Exit("ACPI AML writer counting elements not supported unless within package"); + pkg_stack.top().element_count++; + return *this; +} + +ACPIAMLWriter::ACPIAMLWriter() { +} + +ACPIAMLWriter::~ACPIAMLWriter() { +} + +unsigned char* ACPIAMLWriter::writeptr(void) const { + return w; +} + +void ACPIAMLWriter::begin(unsigned char *n_w,unsigned char *n_f) { + w = n_w; + f = n_f; +} + +void BuildACPITable(void) { + uint32_t rsdt_reserved = 16384; + unsigned char *w,*f; + unsigned int i,c; + + if (ACPI_buffer == NULL || ACPI_buffer_size < 32768) return; + w = ACPI_buffer; + f = ACPI_buffer+ACPI_buffer_size-rsdt_reserved; + + /* RSDT starts at last 16KB of ACPI buffer because it needs to build up a list of other tables */ + unsigned char *rsdt = f; + + /* RSD PTR is written to the legacy BIOS region, on a 16-byte boundary */ + Bitu rsdptr = ROMBIOS_GetMemory(20,"ACPI BIOS Root System Description Pointer",/*paragraph align*/16); + if (rsdptr == 0) E_Exit("ACPI BIOS RSD PTR alloc fail"); + LOG(LOG_MISC,LOG_DEBUG)("ACPI: RSD PTR at 0x%lx",(unsigned long)rsdptr); + + phys_writes(rsdptr + 0,"RSD PTR ",8); // Signature + phys_writeb(rsdptr + 8,0); // Checksum (fill in later) + phys_writes(rsdptr + 9,"DOSBOX",6); // OEMID + phys_writeb(rsdptr + 15,0); // Reserved must be zero + phys_writed(rsdptr + 16,acpiofs2phys( acpiptr2ofs( rsdt ) )); // RSDT physical address + c=0; for (i=0;i < 20;i++) c += phys_readb(rsdptr+i); + phys_writeb(rsdptr + 8,(0u - c)&0xFF); // Checksum + + /* RSDT */ + ACPISysDescTableWriter rsdt_tw; + rsdt_tw.begin(rsdt,ACPI_buffer+ACPI_buffer_size).setSig("RSDT").setRev(1); + unsigned int rsdt_tw_ofs = 36; + // leave open for adding one DWORD per table to the end as we go... this is why RSDT is written to the END of the ACPI region. + + /* FACP, which does not have a checksum and does not follow the normal format */ + unsigned char *facs = w; + size_t facs_size = 64; + w += facs_size; + { + assert(w <= f); + memset(facs,0,facs_size); + memcpy(facs+0x00,"FACS",4); + host_writed(facs+0x04,facs_size); + host_writed(facs+0x08,0x12345678UL); // hardware signature + host_writed(facs+0x0C,0); // firmware waking vector + ACPI_buffer_global_lock = acpiptr2ofs(facs+0x10); + host_writed(facs+0x10,0); // global lock + host_writed(facs+0x14,0); // S4BIOS_REQ not supported + LOG(LOG_MISC,LOG_DEBUG)("ACPI: FACS at 0x%lx len 0x%lx",(unsigned long)acpiofs2phys( acpiptr2ofs( facs ) ),(unsigned long)facs_size); + } + + unsigned char *dsdt_base = w; + { + ACPISysDescTableWriter dsdt; + ACPIAMLWriter aml; + + dsdt.begin(w,f).setSig("DSDT").setRev(1); + aml.begin(dsdt.getptr()+dsdt.get_tablesize(),f); + + /* WARNING: To simplify this code, you are responsible for writing the AML in the syntax required. + * See the ACPI BIOS specification for more details. + * + * For reference: + * + * Name := [LeadNameChar NameChar NameChar NameChar] | + * [LeadNameChar NameChar NameChar '_'] | + * [LeadNameChar NameChar '_' '_'] | + * [LeadNameChar '_' '_' '_'] + * + * DefName := NameOp Name DataTerm + * NameOp => 0x08 + * Data := DataTerm [DataTerm ...] + * DataTerm := DataItem | DefPackage + * DataItem := DefBuffer | DefNum | DefString + * + * How to write: ACPIAML1_NameOp(Name) followed by the necessary functions to write the buffer, string, etc. for the name. */ + aml.ScopeOp().RootCharScopeOp();/* Scope (\) */ + aml.OpRegionOp("DBG",ACPIRegionSpace::SystemIO).WordOp(ACPI_DEBUG_IO).ByteOp(0x10); + aml.FieldOp("DBG",ACPIAMLWriter::MaxPkgSize,ACPIFieldFlag::AccessType::DwordAcc|ACPIFieldFlag::UpdateRule::WriteAsZeros); + aml.FieldOpElement("DBGV",32); + aml.FieldOpEnd(); + aml.ScopeOpEnd(); /* } end of Scope(\) */ + + aml.ScopeOp().RootCharOp().Name("_SB"); + if (pcibus_enable) { + aml.DeviceOp("PCI0"); + aml.NameOp("_HID").DwordOp(ISAPNP_ID('P','N','P',0x00,0x0A,0x00,0x03)); + aml.NameOp("_ADR").DwordOp(0); /* [31:16] device [15:0] function */ + aml.NameOp("_UID").DwordOp(0xD05B0C5); + aml.NameOp("_CRS").BufferOp().rtBegin(); /* ResourceTemplate() i.e. resource list */ + aml.rtIO( + ACPIrtIO_16BitDecode, + 0x0CF8,/*min*/ + 0x0CF8,/*max*/ + 0x01,/*align*/ + 0x4/*number of I/O ports req*/); + aml.rtEnd(); + aml.BufferOpEnd(); + } + else { + aml.DeviceOp("ISA"); + aml.NameOp("_HID").DwordOp(ISAPNP_ID('P','N','P',0x00,0x0A,0x00,0x00)); + aml.NameOp("_ADR").DwordOp(0); /* [31:16] device [15:0] function */ + aml.NameOp("_UID").DwordOp(0xD05B0C5); + aml.DeviceOpEnd(); + + } + aml.ScopeOpEnd(); + + assert(aml.writeptr() >= (dsdt.getptr()+dsdt.get_tablesize())); + assert(aml.writeptr() <= f); + dsdt.expandto((size_t)(aml.writeptr() - dsdt.getptr())); + LOG(LOG_MISC,LOG_DEBUG)("ACPI: DSDT at 0x%lx len 0x%lx",(unsigned long)acpiofs2phys( acpiptr2ofs( dsdt_base ) ),(unsigned long)dsdt.get_tablesize()); + w = dsdt.finish(); + } + + { /* Fixed ACPI Description Table (FACP) */ + ACPISysDescTableWriter facp; + const PhysPt facp_offset = acpiofs2phys( acpiptr2ofs( w ) ); + + host_writed(rsdt_tw.getptr(rsdt_tw_ofs,4),(uint32_t)facp_offset); + rsdt_tw_ofs += 4; + + facp.begin(w,f,116).setSig("FACP").setRev(1); + host_writed(w+36,acpiofs2phys( acpiptr2ofs( facs ) ) ); // FIRMWARE_CTRL (FACS table) + host_writed(w+40,acpiofs2phys( acpiptr2ofs( dsdt_base ) ) ); // DSDT + w[44] = 0; // dual PIC PC-AT type implementation + host_writew(w+46,ACPI_IRQ); // SCI_INT + host_writed(w+48,ACPI_SMI_CMD); // SCI_CMD (I/O port) + w[52] = ACPI_ENABLE_CMD; // what the guest writes to SMI_CMD to disable SMI ownership from BIOS during bootup + w[53] = ACPI_DISABLE_CMD; // what the guest writes to SMI_CMD to re-enable SMI ownership to BIOS + // TODO: S4BIOS_REQ + host_writed(w+56,ACPI_PM1A_EVT_BLK); // PM1a_EVT_BLK event register block + host_writed(w+64,ACPI_PM1A_CNT_BLK); // PM1a_CNT_BLK control register block + host_writed(w+76,ACPI_PM_TMR_BLK); // PM_TMR_BLK power management timer control register block + w[88] = 4; // PM1_EVT_LEN + w[89] = 2; // PM1_CNT_LEN + w[90] = 0; // PM2_CNT_LEN + w[91] = 4; // PM_TM_LEN + host_writed(w+112,(1u << 0u)/*WBINVD*/); + LOG(LOG_MISC,LOG_DEBUG)("ACPI: FACP at 0x%lx len 0x%lx",(unsigned long)facp_offset,(unsigned long)facp.get_tablesize()); + w = facp.finish(); + } + + /* Finish RSDT */ + LOG(LOG_MISC,LOG_DEBUG)("ACPI: RDST at 0x%lx len 0x%lx",(unsigned long)acpiofs2phys( acpiptr2ofs( rsdt ) ),(unsigned long)rsdt_tw.get_tablesize()); + rsdt_tw.finish(); +} + +#if C_LIBPNG +# include "dosbox224x93.h" +# include "dosbox224x163.h" +# include "dosbox224x186.h" +# include "dosbox224x224.h" + +static const unsigned char *BIOSLOGO_PNG_PTR = NULL; +static const unsigned char *BIOSLOGO_PNG_FENCE = NULL; + +static void BIOSLOGO_PNG_READ(png_structp context,png_bytep buf,size_t count) { + (void)context; + + while (count > 0 && BIOSLOGO_PNG_PTR < BIOSLOGO_PNG_FENCE) { + *buf++ = *BIOSLOGO_PNG_PTR++; + count--; + } + while (count > 0) { + *buf++ = 0; + count--; + } +} + +#endif + +#if !defined(OSFREE) +extern unsigned int INT13Xfer; +#endif + +class BIOS:public Module_base{ +private: + static Bitu cb_bios_post__func(void) { + void TIMER_BIOS_INIT_Configure(); +#if C_DEBUG + void DEBUG_CheckCSIP(); + +# if C_HEAVY_DEBUG + /* the game/app obviously crashed, which is way more important + * to log than what we do here in the BIOS at POST */ + void DEBUG_StopLog(void); + DEBUG_StopLog(); +# endif +#endif + + INT13_ElTorito_NoEmuDriveNumber = 0; + INT13_ElTorito_NoEmuCDROMDrive = 0; + INT13_ElTorito_IDEInterface = -1; +#if !defined(OSFREE) + INT13Xfer = 0; +#endif + + ACPI_mem_enable(false); + ACPI_REGION_SIZE = 0; + ACPI_BASE = 0; + ACPI_enabled = false; + ACPI_version = 0; + ACPI_free(); + ACPI_SCI_EN = false; + ACPI_BM_RLD = false; + ACPI_PM1_Status = 0; + ACPI_PM1_Enable = 0; + + E280_table_entries = 0; + + {/*Conventional memory*/ + BIOS_E280_entry &ent = E280_table[E280_table_entries++]; + ent.base = 0x00000000; + ent.length = 0x9F000; /* 640KB minus the EBDA */ + ent.type = 1;/*Normal RAM*/ + } + {/*Conventional adapter ROM/RAM/BIOS*/ + BIOS_E280_entry &ent = E280_table[E280_table_entries++]; + ent.base = 0x000C0000; + ent.length = 0x40000; + ent.type = 2;/*Reserved*/ + } + if (MEM_TotalPages() > 0x100) { /* more than 1MB of RAM */ + BIOS_E280_entry &ent = E280_table[E280_table_entries++]; + ent.base = 0x00100000; + ent.length = (MEM_TotalPages()-0x100u)*4096u; + ent.type = 1;/*Normal RAM*/ + } + if (MEM_TotalPagesAt4GB() > 0) { /* anything above 4GB? */ + BIOS_E280_entry &ent = E280_table[E280_table_entries++]; + ent.base = uint64_t(0x100000000ull); + ent.length = uint64_t(MEM_TotalPagesAt4GB())*uint64_t(4096ul); + ent.type = 1;/*Normal RAM*/ + } + + /* If we're here because of a JMP to F000:FFF0 from a DOS program, then + * an actual reset is needed to prevent reentrancy problems with the DOS + * kernel shell. The WINNT.EXE install program for Windows NT/2000/XP + * likes to restart the program by JMPing to F000:FFF0 */ + if (!dos_kernel_disabled && first_shell != NULL) { + LOG(LOG_MISC,LOG_DEBUG)("BIOS POST: JMP to F000:FFF0 detected, initiating proper reset"); + throw int(9); + } + + { + Section_prop * section=static_cast(control->GetSection("dosbox")); + int val = section->Get_int("reboot delay"); + + if (val < 0) + val = IS_PC98_ARCH ? 1000 : 500; + + reset_post_delay = (unsigned int)val; + + /* Read the ACPI setting and decide on a ACPI region to use */ + { + std::string s = section->Get_string("acpi"); + + if (IS_PC98_ARCH) { + /* do not enable ACPI, PC-98 does not have it */ + } + else if (MEM_get_address_bits() < 32) { + /* I doubt any 486DX systems with less than 32 address bits has ACPI */ + } + else if (CPU_ArchitectureType < CPU_ARCHTYPE_386) { + /* Your 286 does not have ACPI and it never will. + * Your 386 as well, but the 386 is 32-bit and the user might change it to 486 or higher later though, so we'll allow that */ + } + else if (s == "1.0") { + ACPI_version = 0x100; + ACPI_REGION_SIZE = (256u << 10u); // 256KB + } + else if (s == "1.0b") { + ACPI_version = 0x10B; + ACPI_REGION_SIZE = (256u << 10u); // 256KB + } + } + + /* TODO: Read from dosbox.conf */ + if (ACPI_version != 0) { + ACPI_IRQ = 9; + ACPI_IO_BASE = 0x820; + ACPI_SMI_CMD = 0x828; + } + } + + if (bios_post_counter != 0 && reset_post_delay != 0) { + /* reboot delay, in case the guest OS/application had something to day before hitting the "reset" signal */ + uint32_t lasttick=GetTicks(); + while ((GetTicks()-lasttick) < reset_post_delay) { + void CALLBACK_IdleNoInts(void); + CALLBACK_IdleNoInts(); + } + } + + if (bios_post_counter != 0) { + /* turn off the PC speaker if the guest left it on at reset */ + if (IS_PC98_ARCH) { + IO_Write(0x37,0x07); + } + else { + IO_Write(0x61,IO_Read(0x61) & (~3u)); + } + } + + bios_post_counter++; + + if (bios_first_init) { + /* clear the first 1KB-32KB */ + for (uint16_t i=0x400;i<0x8000;i++) real_writeb(0x0,i,0); + } + + if (IS_PC98_ARCH) { + for (unsigned int i=0;i < callback_count;i++) callback[i].Uninstall(); + + /* clear out 0x50 segment (TODO: 0x40 too?) */ + for (unsigned int i=0;i < 0x100;i++) phys_writeb(0x500+i,0); + + BIOS_ZeroExtendedSize(false); + + if (call_pc98_default_stop == 0) + call_pc98_default_stop = CALLBACK_Allocate(); + + CALLBACK_Setup(call_pc98_default_stop,&pc98_default_stop_handler,CB_IRET,"INT 6h invalid opcode or STOP interrupt"); + + unsigned char memsize_real_code = 0; + Bitu mempages = MEM_TotalPages(); /* in 4KB pages */ + + /* NTS: Fill in the 3-bit code in FLAGS1 that represents + * how much lower conventional memory is in the system. + * + * Note that MEM.EXE requires this value, or else it + * will complain about broken UMB linkage and fail + * to show anything else. */ + /* TODO: In the event we eventually support "high resolution mode" + * we can indicate 768KB here, code == 5, meaning that + * the RAM extends up to 0xBFFFF instead of 0x9FFFF */ + if (mempages >= (640UL/4UL)) /* 640KB */ + memsize_real_code = 4; + else if (mempages >= (512UL/4UL)) /* 512KB */ + memsize_real_code = 3; + else if (mempages >= (384UL/4UL)) /* 384KB */ + memsize_real_code = 2; + else if (mempages >= (256UL/4UL)) /* 256KB */ + memsize_real_code = 1; + else /* 128KB */ + memsize_real_code = 0; + + void pc98_msw3_set_ramsize(const unsigned char b); + pc98_msw3_set_ramsize(memsize_real_code); + + /* CRT status */ + /* bit[7:6] = 00=conventional compatible 01=extended attr JEH 10=extended attr EGH + * bit[5:5] = Single event timer in use flag 1=busy 0=not used + * bit[4:4] = ? + * bit[3:3] = raster scan 1=non-interlaced 0=interlaced + * bit[2:2] = Content ruled line color 1=I/O set value 0=attributes of VRAM + * bit[1:1] = ? + * bit[0:0] = 480-line mode 1=640x480 0=640x400 or 640x200 */ + mem_writeb(0x459,0x08/*non-interlaced*/); + + /* Time stamper */ + /* bit[7:7] = 1=Port 5Fh exists 0=No such port Write to port 0x5F to wait 0.6us + * bit[6:6] = ? + * bit[5:5] = "Power" ? + * bit[4:4] = 1=PCMCIA BIOS running 0=not running + * bit[3:3] = ? + * bit[2:2] = 1=Time stamper (I/O ports 0x5C and 0x5E) available + * bit[1:1] = 1=Card I/O slot function 0=No card slot function + * bit[0:0] = 1=386SL(98) 0=Other */ + mem_writeb(0x45B,(pc98_timestamp5c?0x4:0x0)|0x80/*port 5Fh*/); + + /* CPU/Display */ + /* bit[7:7] = 486SX equivalent (?) 1=yes + * bit[6:6] = PC-9821 Extended Graph Architecture supported (FIXME: Is this the same as having EGC?) 1=yes + * bit[5:5] = LCD display is color 1=yes 0=no + * bit[4:4] = ? + * bit[3:3] = ROM drive allow writing + * bit[2:2] = 98 NOTE PC-9801N-08 expansion I/O box connected + * bit[1:1] = 98 NOTE prohibit transition to power saving mode + * bit[0:0] = 98 NOTE coprocessor function available */ + mem_writeb(0x45C,(enable_pc98_egc ? 0x40/*Extended Graphics*/ : 0x00)); + + /* CPU type in bits [1:0] */ + if (CPU_ArchitectureType >= CPU_ARCHTYPE_286) { + mem_writeb(0x480,CPU_ArchitectureType >= CPU_ARCHTYPE_386 ? 3 : 1); + } + + + /* Keyboard type */ + /* bit[7:7] = ? + * bit[6:6] = keyboard type bit 1 + * bit[5:5] = EMS page frame at B0000h 1=present 0=none + * bit[4:4] = EMS page frame at B0000h 1=page frame 0=G-VRAM + * bit[3:3] = keyboard type bit 0 + * bit[2:2] = High resolution memory window available + * bit[1:1] = ? + * bit[0:0] = ? + * + * keyboard bits[1:0] from bit 6 as bit 1 and bit 3 as bit 0 combined: + * 11 = new keyboard (NUM key, DIP switch 2-7 OFF) + * 10 = new keyboard (without NUM key) + * 01 = new keyboard (NUM key, DIP switch 2-7 ON) + * 00 = old keyboard + * + * The old keyboard is documented not to support software control of CAPS and KANA states */ + /* TODO: Make this a dosbox-x.conf option. Default is new keyboard without NUM key because that is + * what keyboard emulation currently acts like anyway. */ + mem_writeb(0x481,0x40/*bit 6=1 bit 3=0 new keyboard without NUM key*/); + + /* BIOS flags */ + /* bit[7:7] = Startup 1=hot start 0=cold start + * bit[6:6] = BASIC type ?? + * bit[5:5] = Keyboard beep 1=don't beep 0=beep ... when buffer full + * bit[4:4] = Expansion conv RAM 1=present 0=absent + * bit[3:3] = ?? + * bit[2:2] = ?? + * bit[1:1] = HD mode 1=1MB mode 0=640KB mode ... of the floppy drive + * bit[0:0] = Model 1=other 0=PC-9801 original */ + /* NTS: MS-DOS 5.0 appears to reduce it's BIOS calls and render the whole + * console as green IF bit 0 is clear. + * + * If bit 0 is set, INT 1Ah will be hooked by MS-DOS and, for some odd reason, + * MS-DOS's hook proc will call to our INT 1Ah + 0x19 bytes. */ + mem_writeb(0x500,0x01 | 0x02/*high density drive*/); + + /* BIOS flags */ + /* timer setup will set/clear bit 7 */ + /* bit[7:7] = system clock freq 1=8MHz 0=5/10Mhz + * = timer clock freq 1=1.9968MHz 0=2.4576MHz + * bit[6:6] = CPU 1=V30 0=Intel (8086 through Pentium) + * bit[5:5] = Model info 1=Other model 0=PC-9801 Muji, PC-98XA + * bit[4:4] = Model info ... + * bit[3:3] = Model info 1=High res 0=normal + * bit[2:0] = Realmode memsize + * 000=128KB 001=256KB + * 010=384KB 011=512KB + * 100=640KB 101=768KB + * + * Ref: http://hackipedia.org/browse/Computer/Platform/PC,%20NEC%20PC-98/Collections/Undocumented%209801,%209821%20Volume%202%20(webtech.co.jp)/memsys.txt */ + /* NTS: High resolution means 640x400, not the 1120x750 mode known as super high resolution mode. + * DOSBox-X does not yet emulate super high resolution nor does it emulate the 15khz 200-line "standard" mode. + * ref: https://github.com/joncampbell123/dosbox-x/issues/906#issuecomment-434513930 + * ref: https://jisho.org/search?utf8=%E2%9C%93&keyword=%E8%B6%85 */ + mem_writeb(0x501,0x20 | memsize_real_code); + + /* keyboard buffer */ + mem_writew(0x524/*tail*/,0x502); + mem_writew(0x526/*tail*/,0x502); + + /* number of scanlines per text row - 1 */ + mem_writeb(0x53B,0x0F); // CRT_RASTER, 640x400 24.83KHz-hsync 56.42Hz-vsync + + /* Text screen status. + * Note that most of the bits are used verbatim in INT 18h AH=0Ah/AH=0Bh */ + /* bit[7:7] = High resolution display 1=yes 0=no (standard) NOT super high res + * bit[6:6] = vsync 1=VSYNC wait 0=end of vsync handling + * bit[5:5] = unused + * bit[4:4] = Number of lines 1=30 lines 0=20/25 lines + * bit[3:3] = K-CG access mode 1=dot access 0=code access + * bit[2:2] = Attribute mode (how to handle bit 4) 1=Simp. graphic 0=Vertical line + * bit[1:1] = Number of columns 1=40 cols 0=80 cols + * bit[0:0] = Number of lines 1=20/30 lines 0=25 lines */ + mem_writeb(0x53C,(true/*TODO*/ ? 0x80/*high res*/ : 0x00/*standard*/)); + + /* BIOS raster location */ + mem_writew(0x54A,0x1900); + + /* BIOS flags */ + /* bit[7:7] = Graphics display state 1=Visible 0=Blanked (hidden) + * bit[6:6] = CRT type 1=high res 0=standard NOT super high res + * bit[5:5] = Horizontal sync rate 1=31.47KHz 0=24.83KHz + * bit[4:4] = CRT line mode 1=480-line 0=400-line + * bit[3:3] = Number of user-defined characters 1=188+ 0=63 + * bit[2:2] = Extended graphics RAM (for 16-color) 1=present 0=absent + * bit[1:1] = Graphics Charger is present 1=present 0=absent + * bit[0:0] = DIP switch 1-8 at startup 1=ON 0=OFF (support GLIO 16-colors) */ + mem_writeb(0x54C,(true/*TODO*/ ? 0x40/*high res*/ : 0x00/*standard*/) | (enable_pc98_grcg ? 0x02 : 0x00) | (enable_pc98_16color ? 0x05 : 0x00) | (pc98_31khz_mode ? 0x20/*31khz*/ : 0x00/*24khz*/) | (enable_pc98_188usermod ? 0x08 : 0x00)); // PRXCRT, 16-color G-VRAM, GRCG + + /* BIOS flags */ + /* bit[7:7] = PC-9821 graphics mode (INT 18h AH=4Dh CH=01h/00h) 1=extend 0=normal + * bit[6:6] = Enhanced Graphics Charger (EGC) is present + * bit[5:5] = GDC at 5.0MHz at boot up (copy of DIP switch 2-8 at startup) 1=yes 0=no + * bit[4:4] = Always "flickerless" drawing mode + * bit[3:3] = Drawing mode with flicker + * bit[2:2] = GDC clock 1=5MHz 0=2.5MHz + * bit[1:0] = Drawing mode of the GDC + * 00 = REPLACE + * 01 = COMPLEMENT + * 10 = CLEAR + * 11 = SET */ + mem_writeb(0x54D, + (enable_pc98_egc ? 0x40 : 0x00) | + (gdc_5mhz_mode ? 0x20 : 0x00) | + (gdc_5mhz_mode ? 0x04 : 0x00)); // EGC + + /* BIOS flags */ + /* bit[7:7] = INT 18h AH=30h/31h support enabled + * bit[6:3] = 0 (unused) + * bit[2:2] = Enhanced Graphics Mode (EGC) supported + * bit[1:0] = Graphic resolution + * 00 = 640x200 upper half (2/8/16-color mode) + * 01 = 640x200 lower half (2/8/16-color mode) + * 10 = 640x400 (2/8/16/256-color mode) + * 11 = 640x480 256-color mode */ + mem_writeb(0x597,(enable_pc98_egc ? 0x04 : 0x00)/*EGC*/ | + (enable_pc98_egc ? 0x80 : 0x00)/*supports INT 18h AH=30h and AH=31h*/ | + 2/*640x400*/); + /* TODO: I would like to eventually add a dosbox-x.conf option that controls whether INT 18h AH=30h and 31h + * are enabled, so that retro-development can test code to see how it acts on a newer PC-9821 + * that supports it vs an older PC-9821 that doesn't. + * + * If the user doesn't set the option, then it is "auto" and determined by machine= PC-98 model and + * by another option in dosbox-x.conf that determines whether 31khz support is enabled. + * + * NOTED: Neko Project II determines INT 18h AH=30h availability by whether or not it was compiled + * with 31khz hsync support (SUPPORT_CRT31KHZ) */ + + /* Set up the translation table pointer, which is relative to segment 0xFD80 */ + mem_writew(0x522,(unsigned int)(Real2Phys(BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION) - 0xFD800)); + mem_writew(0x5C6,(unsigned int)(Real2Phys(BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION) - 0xFD800)); + mem_writew(0x5C8,0xFD80); + } + + if (bios_user_reset_vector_blob != 0 && !bios_user_reset_vector_blob_run) { + LOG_MSG("BIOS POST: Running user reset vector blob at 0x%lx",(unsigned long)bios_user_reset_vector_blob); + bios_user_reset_vector_blob_run = true; + + assert((bios_user_reset_vector_blob&0xF) == 0); /* must be page aligned */ + + SegSet16(cs,bios_user_reset_vector_blob>>4); + reg_eip = 0; + +#if C_DEBUG + /* help the debugger reflect the new instruction pointer */ + DEBUG_CheckCSIP(); +#endif + + return CBRET_NONE; + } + + if (cpu.pmode) E_Exit("BIOS error: POST function called while in protected/vm86 mode"); + + CPU_CLI(); + + /* we need A20 enabled for BIOS boot-up */ + void A20Gate_OverrideOn(Section *sec); + void MEM_A20_Enable(bool enabled); + A20Gate_OverrideOn(NULL); + MEM_A20_Enable(true); + + BIOS_OnResetComplete(NULL); + + adapter_scan_start = 0xC0000; + bios_has_exec_vga_bios = false; + LOG(LOG_MISC,LOG_DEBUG)("BIOS: executing POST routine"); + + if (ACPI_REGION_SIZE != 0 && !IS_PC98_ARCH) { + // place it just below the mirror of the BIOS at FFFF0000 + ACPI_BASE = 0xFFFF0000 - ACPI_REGION_SIZE; + + LOG(LOG_MISC,LOG_DEBUG)("ACPI: Setting up version %u.%02x at 0x%lx-0x%lx", + ACPI_version>>8,ACPI_version&0xFF, + (unsigned long)ACPI_BASE,(unsigned long)(ACPI_BASE+ACPI_REGION_SIZE-1lu)); + + ACPI_init(); + ACPI_enabled = true; + ACPI_mem_enable(true); + memset(ACPI_buffer,0,ACPI_buffer_size); + } + + // TODO: Anything we can test in the CPU here? + + // initialize registers + SegSet16(ds,0x0000); + SegSet16(es,0x0000); + SegSet16(fs,0x0000); + SegSet16(gs,0x0000); + SegSet16(ss,0x0000); + + { + Bitu sz = MEM_ConventionalPages(); + + /* The standard BIOS is said to put its stack (at least at OS boot time) 512 bytes past the end of the boot sector + * meaning that the boot sector loads to 0000:7C00 and the stack is set grow downward from 0000:8000 */ + + if (sz > 8) sz = 8; /* 4KB * 8 = 32KB = 0x8000 */ + sz *= 4096; + reg_esp = sz - 4; + reg_ebp = 0; + LOG(LOG_MISC,LOG_DEBUG)("BIOS: POST stack set to 0000:%04x",reg_esp); + } + + if (dosbox_int_iocallout != IO_Callout_t_none) { + IO_FreeCallout(dosbox_int_iocallout); + dosbox_int_iocallout = IO_Callout_t_none; + } + + if (isapnp_biosstruct_base != 0) { + ROMBIOS_FreeMemory(isapnp_biosstruct_base); + isapnp_biosstruct_base = 0; + } + + if (acpi_iocallout != IO_Callout_t_none) { + IO_FreeCallout(acpi_iocallout); + acpi_iocallout = IO_Callout_t_none; + } + + if (BOCHS_PORT_E9) { + delete BOCHS_PORT_E9; + BOCHS_PORT_E9=NULL; + } + if (ISAPNP_PNP_ADDRESS_PORT) { + delete ISAPNP_PNP_ADDRESS_PORT; + ISAPNP_PNP_ADDRESS_PORT=NULL; + } + if (ISAPNP_PNP_DATA_PORT) { + delete ISAPNP_PNP_DATA_PORT; + ISAPNP_PNP_DATA_PORT=NULL; + } + if (ISAPNP_PNP_READ_PORT) { + delete ISAPNP_PNP_READ_PORT; + ISAPNP_PNP_READ_PORT=NULL; + } + + if (bochs_port_e9) { + if (BOCHS_PORT_E9 == NULL) { + BOCHS_PORT_E9 = new IO_WriteHandleObject; + BOCHS_PORT_E9->Install(0xE9,bochs_port_e9_write,IO_MB); + } + LOG(LOG_MISC,LOG_DEBUG)("Bochs port E9h emulation is active"); + } + else { + if (BOCHS_PORT_E9 != NULL) { + delete BOCHS_PORT_E9; + BOCHS_PORT_E9 = NULL; + } + } + + extern Bitu call_default; + + if (IS_PC98_ARCH) { + /* INT 00h-FFh generic stub routine */ + /* NTS: MS-DOS on PC-98 will fill all yet-unused interrupt vectors with a stub. + * No vector is left at 0000:0000. On a related note, PC-98 games apparently + * like to call INT 33h (mouse functions) without first checking that the + * vector is non-null. */ + callback[18].Uninstall(); + callback[18].Install(&INTGEN_PC98_Handler,CB_IRET,"Int stub ???"); + for (unsigned int i=0x00;i < 0x100;i++) RealSetVec(i,callback[18].Get_RealPointer()); + + for (unsigned int i=0x00;i < 0x08;i++) + real_writed(0,i*4,CALLBACK_RealPointer(call_default)); + + // STOP interrupt or invalid opcode + real_writed(0,0x06*4,CALLBACK_RealPointer(call_pc98_default_stop)); + + // Magical Girl Pretty Sammy installer + // Installer enters an infinite loop if lower 8 bits of the segment portion of int 7 are 0 + real_writew(0, 7*4, real_readw(0, 7*4) - 0x10); + real_writew(0, 7*4+2, real_readw(0, 7*4+2) + 1); + } + else { + /* Clear the vector table */ + for (uint16_t i=0x70*4;i<0x400;i++) real_writeb(0x00,i,0); + + /* Only setup default handler for first part of interrupt table */ + for (uint16_t ct=0;ct<0x60;ct++) { + real_writed(0,ct*4,CALLBACK_RealPointer(call_default)); + } + for (uint16_t ct=0x68;ct<0x70;ct++) { + if(!IS_J3100 || ct != 0x6f) + real_writed(0,ct*4,CALLBACK_RealPointer(call_default)); + } + + // default handler for IRQ 2-7 + for (uint16_t ct=0x0A;ct <= 0x0F;ct++) + RealSetVec(ct,BIOS_DEFAULT_IRQ07_DEF_LOCATION); + } + + if (unhandled_irq_method == UNHANDLED_IRQ_COOPERATIVE_2ND) { + // PC-98 style: Master PIC ack with 0x20 for IRQ 0-7. + // For the slave PIC, ack with 0x20 on the slave, then only ack the master (cascade interrupt) + // if the ISR register on the slave indicates none are in service. + CALLBACK_Setup(call_irq07default,NULL,CB_IRET_EOI_PIC1,Real2Phys(BIOS_DEFAULT_IRQ07_DEF_LOCATION),"bios irq 0-7 default handler"); + CALLBACK_Setup(call_irq815default,Default_IRQ_Handler_Cooperative_Slave_Pic,CB_IRET,Real2Phys(BIOS_DEFAULT_IRQ815_DEF_LOCATION),"bios irq 8-15 default handler"); + } + else { + // IBM PC style: Master PIC ack with 0x20, slave PIC ack with 0x20, no checking + CALLBACK_Setup(call_irq07default,NULL,CB_IRET_EOI_PIC1,Real2Phys(BIOS_DEFAULT_IRQ07_DEF_LOCATION),"bios irq 0-7 default handler"); + CALLBACK_Setup(call_irq815default,NULL,CB_IRET_EOI_PIC2,Real2Phys(BIOS_DEFAULT_IRQ815_DEF_LOCATION),"bios irq 8-15 default handler"); + } + + if (IS_PC98_ARCH) { + BIOS_UnsetupKeyboard(); + BIOS_UnsetupDisks(); + + /* no such INT 4Bh */ + int4b_callback.Uninstall(); + + /* remove some IBM-style BIOS interrupts that don't exist on PC-98 */ + /* IRQ to INT arrangement + * + * IBM PC-98 IRQ + * -------------------------------- + * 0x08 0x08 0 + * 0x09 0x09 1 + * 0x0A CASCADE 0x0A 2 + * 0x0B 0x0B 3 + * 0x0C 0x0C 4 + * 0x0D 0x0D 5 + * 0x0E 0x0E 6 + * 0x0F 0x0F CASCADE 7 + * 0x70 0x10 8 + * 0x71 0x11 9 + * 0x72 0x12 10 + * 0x73 0x13 11 + * 0x74 0x14 12 + * 0x75 0x15 13 + * 0x76 0x16 14 + * 0x77 0x17 15 + * + * As part of the change the IRQ cascade emulation needs to change for PC-98 as well. + * IBM uses IRQ 2 for cascade. + * PC-98 uses IRQ 7 for cascade. */ + + void INT10_EnterPC98(Section *sec); + INT10_EnterPC98(NULL); /* INT 10h */ + + callback_pc98_lio.Uninstall(); + + callback_pc98_avspcm.Uninstall(); + + callback[1].Uninstall(); /* INT 11h */ + callback[2].Uninstall(); /* INT 12h */ + callback[3].Uninstall(); /* INT 14h */ + callback[4].Uninstall(); /* INT 15h */ + callback[5].Uninstall(); /* INT 17h */ + callback[6].Uninstall(); /* INT 1Ah */ + callback[7].Uninstall(); /* INT 1Ch */ + callback[10].Uninstall(); /* INT 19h */ + callback[11].Uninstall(); /* INT 76h: IDE IRQ 14 */ + callback[12].Uninstall(); /* INT 77h: IDE IRQ 15 */ + callback[15].Uninstall(); /* INT 18h: Enter BASIC */ + callback[19].Uninstall(); /* INT 1Bh */ + + /* IRQ 6 is nothing special */ + callback[13].Uninstall(); /* INT 0Eh: IDE IRQ 6 */ + callback[13].Install(NULL,CB_IRET_EOI_PIC1,"irq 6"); + + /* IRQ 8 is nothing special */ + callback[8].Uninstall(); + callback[8].Install(NULL,CB_IRET_EOI_PIC2,"irq 8"); + + /* IRQ 9 is nothing special */ + callback[9].Uninstall(); + callback[9].Install(NULL,CB_IRET_EOI_PIC2,"irq 9"); + + /* INT 18h keyboard and video display functions */ + callback[1].Install(&INT18_PC98_Handler,CB_INT16,"Int 18 keyboard and display"); + callback[1].Set_RealVec(0x18,/*reinstall*/true); + + /* INT 19h *STUB* */ + callback[2].Install(&INT19_PC98_Handler,CB_IRET,"Int 19 ???"); + callback[2].Set_RealVec(0x19,/*reinstall*/true); + + /* INT 1Ah *STUB* */ + callback[3].Install(&INT1A_PC98_Handler,CB_IRET,"Int 1A ???"); + callback[3].Set_RealVec(0x1A,/*reinstall*/true); + + /* MS-DOS 5.0 FIXUP: + * - For whatever reason, if we set bits in the BIOS data area that + * indicate we're NOT the original model of the PC-98, MS-DOS will + * hook our INT 1Ah and then call down to 0x19 bytes into our + * INT 1Ah procedure. If anyone can explain this, I'd like to hear it. --J.C. + * + * NTS: On real hardware, the BIOS appears to have an INT 1Ah, a bunch of NOPs, + * then at 0x19 bytes into the procedure, the actual handler. This is what + * MS-DOS is pointing at. + * + * But wait, there's more. + * + * MS-DOS calldown pushes DS and DX onto the stack (after the IRET frame) + * before JMPing into the BIOS. + * + * Apparently the function at INT 1Ah + 0x19 is expected to do this: + * + * + * POP DX + * POP DS + * IRET + * + * I can only imaging what a headache this might have caused NEC when + * maintaining the platform and compatibility! */ + { + Bitu addr = callback[3].Get_RealPointer(); + addr = ((addr >> 16) << 4) + (addr & 0xFFFF); + + /* to make this work, we need to pop the two regs, then JMP to our + * callback and proceed as normal. */ + phys_writeb(addr + 0x19,0x5A); // POP DX + phys_writeb(addr + 0x1A,0x1F); // POP DS + phys_writeb(addr + 0x1B,0xEB); // jmp short ... + phys_writeb(addr + 0x1C,0x100 - 0x1D); + } + + /* INT 1Bh *STUB* */ + callback[4].Install(&INT1B_PC98_Handler,CB_IRET,"Int 1B ???"); + callback[4].Set_RealVec(0x1B,/*reinstall*/true); + + /* INT 1Ch *STUB* */ + callback[5].Install(&INT1C_PC98_Handler,CB_IRET,"Int 1C ???"); + callback[5].Set_RealVec(0x1C,/*reinstall*/true); + + /* INT 1Dh *STUB* */ + /* Place it in the PC-98 int vector area at FD80:0000 to satisfy some DOS games + * that detect PC-98 from the segment value of the vector (issue #927). + * Note that on real hardware (PC-9821) INT 1Dh appears to be a stub that IRETs immediately. */ + callback[6].Install(&INT1D_PC98_Handler,CB_IRET,"Int 1D ???"); +// callback[6].Set_RealVec(0x1D,/*reinstall*/true); + { + Bitu ofs = 0xFD813; /* 0xFD80:0013 try not to look like a phony address */ + unsigned int vec = 0x1D; + uint32_t target = callback[6].Get_RealPointer(); + + phys_writeb(ofs+0,0xEA); // JMP FAR + phys_writed(ofs+1,target); + + phys_writew((vec*4)+0,(ofs-0xFD800)); + phys_writew((vec*4)+2,0xFD80); + } + + /* INT 1Eh *STUB* */ + callback[7].Install(&INT1E_PC98_Handler,CB_IRET,"Int 1E ???"); + callback[7].Set_RealVec(0x1E,/*reinstall*/true); + + /* INT 1Fh *STUB* */ + callback[10].Install(&INT1F_PC98_Handler,CB_IRET,"Int 1F ???"); + callback[10].Set_RealVec(0x1F,/*reinstall*/true); + + /* INT DCh *STUB* */ + callback[16].Install(&INTDC_PC98_Handler,CB_IRET,"Int DC ???"); + callback[16].Set_RealVec(0xDC,/*reinstall*/true); + + /* INT F2h *STUB* */ + callback[17].Install(&INTF2_PC98_Handler,CB_IRET,"Int F2 ???"); + callback[17].Set_RealVec(0xF2,/*reinstall*/true); + + // default handler for IRQ 2-7 + for (uint16_t ct=0x0A;ct <= 0x0F;ct++) + RealSetVec(ct,BIOS_DEFAULT_IRQ07_DEF_LOCATION); + + // default handler for IRQ 8-15 + for (uint16_t ct=0;ct < 8;ct++) + RealSetVec(ct+(IS_PC98_ARCH ? 0x10 : 0x70),BIOS_DEFAULT_IRQ815_DEF_LOCATION); + + // LIO graphics interface (number of entry points, unknown WORD value and offset into the segment). + // For more information see Chapter 6 of this PDF [https://ia801305.us.archive.org/8/items/PC9800TechnicalDataBookBIOS1992/PC-9800TechnicalDataBook_BIOS_1992_text.pdf] + { + callback_pc98_lio.Install(&PC98_BIOS_LIO,CB_IRET,"LIO graphics library"); + + Bitu ofs = 0xF990u << 4u; // F990:0000... + unsigned int entrypoints = 0x11; + Bitu final_addr = callback_pc98_lio.Get_RealPointer(); + + /* NTS: Based on GAME/MAZE 999 behavior, these numbers are interrupt vector numbers. + * The entry point marked 0xA0 is copied by the game to interrupt vector A0 and + * then called with INT A0h even though it blindly assumes the numbers are + * sequential from 0xA0-0xAF. */ + unsigned char entrypoint_indexes[0x11] = { + 0xA0, 0xA1, 0xA2, 0xA3, // +0x00 + 0xA4, 0xA5, 0xA6, 0xA7, // +0x04 + 0xA8, 0xA9, 0xAA, 0xAB, // +0x08 + 0xAC, 0xAD, 0xAE, 0xAF, // +0x0C + 0xCE // +0x10 + }; + + assert(((entrypoints * 4) + 4) <= 0x50); + assert((50 + (entrypoints * 7)) <= 0x100); // a 256-byte region is set aside for this! + + phys_writed(ofs+0,entrypoints); + for (unsigned int ent=0;ent < entrypoints;ent++) { + /* each entry point is "MOV AL, ; JMP FAR " */ + /* Yksoft1's patch suggests a segment offset of 0x50 which I'm OK with */ + unsigned int ins_ofs = ofs + 0x50 + (ent * 7); + + phys_writew(ofs+4+(ent*4)+0,entrypoint_indexes[ent]); + phys_writew(ofs+4+(ent*4)+2,ins_ofs - ofs); + + phys_writeb(ins_ofs+0,0xB0); // MOV AL,(entrypoint index) + phys_writeb(ins_ofs+1,entrypoint_indexes[ent]); + phys_writeb(ins_ofs+2,0xEA); // JMP FAR + phys_writed(ins_ofs+3,final_addr); + // total: ins_ofs+7 + } + } + +#if !defined(OSFREE) + callback_pc98_avspcm.Install(&PC98_AVSDRV_PCM_Handler,CB_IRET,"AVSDRV.SYS PCM driver"); + callback_pc98_avspcm.Set_RealVec(0xd9, true); +#endif + } + + if (IS_PC98_ARCH) { + real_writew(0,0x58A,0x0000U); // countdown timer value + PIC_SetIRQMask(0,true); /* PC-98 keeps the timer off unless INT 1Ch is called to set a timer interval */ + } + + bool null_68h = false; + + { + Section_prop * section=static_cast(control->GetSection("dos")); + + null_68h = section->Get_bool("zero unused int 68h"); + } + + /* Default IRQ handler */ + if (call_irq_default == 0) + call_irq_default = CALLBACK_Allocate(); + CALLBACK_Setup(call_irq_default, &Default_IRQ_Handler, CB_IRET, "irq default"); + RealSetVec(0x0b, CALLBACK_RealPointer(call_irq_default)); // IRQ 3 + RealSetVec(0x0c, CALLBACK_RealPointer(call_irq_default)); // IRQ 4 + RealSetVec(0x0d, CALLBACK_RealPointer(call_irq_default)); // IRQ 5 + RealSetVec(0x0f, CALLBACK_RealPointer(call_irq_default)); // IRQ 7 + if (!IS_PC98_ARCH) { + RealSetVec(0x72, CALLBACK_RealPointer(call_irq_default)); // IRQ 10 + RealSetVec(0x73, CALLBACK_RealPointer(call_irq_default)); // IRQ 11 + } + + // setup a few interrupt handlers that point to bios IRETs by default + real_writed(0,0x66*4,CALLBACK_RealPointer(call_default)); //war2d + real_writed(0,0x67*4,CALLBACK_RealPointer(call_default)); + if (machine==MCH_CGA || null_68h) real_writed(0,0x68*4,0); //Popcorn + real_writed(0,0x5c*4,CALLBACK_RealPointer(call_default)); //Network stuff + //real_writed(0,0xf*4,0); some games don't like it + + bios_first_init = false; + + DispatchVMEvent(VM_EVENT_BIOS_INIT); + + TIMER_BIOS_INIT_Configure(); + + void INT10_Startup(Section *sec); + INT10_Startup(NULL); + + if (!IS_PC98_ARCH) { + extern uint8_t BIOS_tandy_D4_flag; + real_writeb(0x40,0xd4,BIOS_tandy_D4_flag); + } + + /* INT 13 Bios Disk Support */ + BIOS_SetupDisks(); + + /* INT 16 Keyboard handled in another file */ + BIOS_SetupKeyboard(); + + if (!IS_PC98_ARCH) { + int4b_callback.Set_RealVec(0x4B,/*reinstall*/true); + callback[1].Set_RealVec(0x11,/*reinstall*/true); + callback[2].Set_RealVec(0x12,/*reinstall*/true); + callback[3].Set_RealVec(0x14,/*reinstall*/true); + callback[4].Set_RealVec(0x15,/*reinstall*/true); + callback[5].Set_RealVec(0x17,/*reinstall*/true); + callback[6].Set_RealVec(0x1A,/*reinstall*/true); + callback[7].Set_RealVec(0x1C,/*reinstall*/true); + callback[8].Set_RealVec(0x70,/*reinstall*/true); + callback[9].Set_RealVec(0x71,/*reinstall*/true); + callback[10].Set_RealVec(0x19,/*reinstall*/true); + callback[11].Set_RealVec(0x76,/*reinstall*/true); + callback[12].Set_RealVec(0x77,/*reinstall*/true); + callback[13].Set_RealVec(0x0E,/*reinstall*/true); + callback[15].Set_RealVec(0x18,/*reinstall*/true); + callback[19].Set_RealVec(0x1B,/*reinstall*/true); + } + + // FIXME: We're using IBM PC memory size storage even in PC-98 mode. + // This cannot be removed, because the DOS kernel uses this variable even in PC-98 mode. + mem_writew(BIOS_MEMORY_SIZE,t_conv); + // According to Ripsaw, Tandy systems hold the real memory size in a normally reserved field [https://www.vogons.org/viewtopic.php?p=948898#p948898] + // According to the PCjr hardware reference library that memory location means the same thing + if (machine == MCH_PCJR || machine == MCH_TANDY) mem_writew(BIOS_MEMORY_SIZE+2,t_conv_real); + + RealSetVec(0x08,BIOS_DEFAULT_IRQ0_LOCATION); + // pseudocode for CB_IRQ0: + // sti + // callback INT8_Handler + // push ds,ax,dx + // int 0x1c + // cli + // mov al, 0x20 + // out 0x20, al + // pop dx,ax,ds + // iret + + if (!IS_PC98_ARCH) { + mem_writed(BIOS_TIMER,0); //Calculate the correct time + + // INT 05h: Print Screen + // IRQ1 handler calls it when PrtSc key is pressed; does nothing unless hooked + phys_writeb(Real2Phys(BIOS_DEFAULT_INT5_LOCATION), 0xcf); + RealSetVec(0x05, BIOS_DEFAULT_INT5_LOCATION); + + phys_writew(Real2Phys(RealGetVec(0x12))+0x12,0x20); //Hack for Jurresic + } + + phys_writeb(Real2Phys(BIOS_DEFAULT_HANDLER_LOCATION),0xcf); /* bios default interrupt vector location -> IRET */ + + if (!IS_PC98_ARCH) { + // tandy DAC setup + bool use_tandyDAC=(real_readb(0x40,0xd4)==0xff); + + tandy_sb.port=0; + tandy_dac.port=0; + if (use_tandyDAC) { + /* tandy DAC sound requested, see if soundblaster device is available */ + Bitu tandy_dac_type = 0; + if (Tandy_InitializeSB()) { + tandy_dac_type = 1; + } else if (Tandy_InitializeTS()) { + tandy_dac_type = 2; + } + if (tandy_dac_type) { + real_writew(0x40,0xd0,0x0000); + real_writew(0x40,0xd2,0x0000); + real_writeb(0x40,0xd4,0xff); /* tandy DAC init value */ + real_writed(0x40,0xd6,0x00000000); + /* install the DAC callback handler */ + tandy_DAC_callback[0]=new CALLBACK_HandlerObject(); + tandy_DAC_callback[1]=new CALLBACK_HandlerObject(); + tandy_DAC_callback[0]->Install(&IRQ_TandyDAC,CB_IRET,"Tandy DAC IRQ"); + tandy_DAC_callback[1]->Install(NULL,CB_TDE_IRET,"Tandy DAC end transfer"); + // pseudocode for CB_TDE_IRET: + // push ax + // mov ax, 0x91fb + // int 15 + // cli + // mov al, 0x20 + // out 0x20, al + // pop ax + // iret + + uint8_t tandy_irq = 7; + if (tandy_dac_type==1) tandy_irq = tandy_sb.irq; + else if (tandy_dac_type==2) tandy_irq = tandy_dac.irq; + uint8_t tandy_irq_vector = tandy_irq; + if (tandy_irq_vector<8) tandy_irq_vector += 8; + else tandy_irq_vector += (0x70-8); + + RealPt current_irq=RealGetVec(tandy_irq_vector); + real_writed(0x40,0xd6,current_irq); + for (uint16_t i=0; i<0x10; i++) phys_writeb(PhysMake(0xf000,0xa084+i),0x80); + } else real_writeb(0x40,0xd4,0x00); + } + } + + if (!IS_PC98_ARCH) { + /* Setup some stuff in 0x40 bios segment */ + + // Disney workaround + // uint16_t disney_port = mem_readw(BIOS_ADDRESS_LPT1); + // port timeouts + // always 1 second even if the port does not exist + // BIOS_SetLPTPort(0, disney_port); + for(Bitu i = 1; i < 3; i++) BIOS_SetLPTPort(i, 0); + mem_writeb(BIOS_COM1_TIMEOUT,1); + mem_writeb(BIOS_COM2_TIMEOUT,1); + mem_writeb(BIOS_COM3_TIMEOUT,1); + mem_writeb(BIOS_COM4_TIMEOUT,1); + + void BIOS_Post_register_parports(); + BIOS_Post_register_parports(); + + void BIOS_Post_register_comports(); + BIOS_Post_register_comports(); + } + + if (!IS_PC98_ARCH) { + /* Setup equipment list */ + // look http://www.bioscentral.com/misc/bda.htm + + //uint16_t config=0x4400; //1 Floppy, 2 serial and 1 parallel + uint16_t config = 0x0; + + config |= bios_post_parport_count() << 14; + config |= bios_post_comport_count() << 9; + +#if (C_FPU) + //FPU + if (enable_fpu) + config|=0x2; +#endif + switch (machine) { + case MCH_MDA: + case MCH_HERC: + //Startup monochrome + config|=0x30; + break; + case EGAVGA_ARCH_CASE: + case MCH_CGA: + case MCH_MCGA: + case TANDY_ARCH_CASE: + case MCH_AMSTRAD: + //Startup 80x25 color + config|=0x20; + break; + default: + //EGA VGA + config|=0; + break; + } + + // PS2 mouse + if (KEYBOARD_Report_BIOS_PS2Mouse()) + config |= 0x04; + + // DMA *not* supported - Ancient Art of War CGA uses this to identify PCjr + if (machine==MCH_PCJR) config |= 0x100; + + // Several online sources say bit 0 indicates a floppy drive is installed. + // Testing of a couple BIOSes from 1992 and 1993 showed bit 0 to always be 1, + // even with no floppy drives installed or configured in the BIOS. + // Maybe 0 is possible in older BIOSes. + config |= 0x01; + + // Bit 6 is 1 if there are 2 floppies connected and configured in the BIOS. + // Setting to 1 since DOSBox-X can mount floppy images in both drives A and B. + config |= 0x40; + + // Bit 12 is "game I/O attached" for PCJr, Tandy and PC/XT, and 0 (not used) for PC/AT + if ((CPU_ArchitectureType == CPU_ARCHTYPE_8086) && (joytype != JOY_NONE)) + config |= 0x1000; + + mem_writew(BIOS_CONFIGURATION,config); + if (IS_EGAVGA_ARCH) config &= ~0x30; //EGA/VGA startup display mode differs in CMOS + CMOS_SetRegister(0x14,(uint8_t)(config&0xff)); //Should be updated on changes + } + + if (!IS_PC98_ARCH) { + /* Setup extended memory size */ + IO_Write(0x70,0x30); + size_extended=IO_Read(0x71); + IO_Write(0x70,0x31); + size_extended|=(IO_Read(0x71) << 8); + + uint32_t value = 0; + + RtcUpdateDone(); + IO_Write(0x70,0xB); + IO_Write(0x71,0x02); // BCD + + /* set BIOS_TIMER according to time/date of RTC */ + IO_Write(0x70,0); + const unsigned char sec = BCD2BIN(IO_Read(0x71)); + IO_Write(0x70,2); + const unsigned char min = BCD2BIN(IO_Read(0x71)); + IO_Write(0x70,4); + const unsigned char hour = BCD2BIN(IO_Read(0x71)); + + value = (uint32_t)(((hour * 3600.00) + (min * 60.00) + sec) * ((double)PIT_TICK_RATE/65536.0)); + + mem_writed(BIOS_TIMER,value); + } + else { + /* Provide a valid memory size anyway */ + size_extended=MEM_TotalPages()*4; + if (size_extended >= 1024) size_extended -= 1024; + else size_extended = 0; + } + + /* PS/2 mouse */ + void BIOS_PS2Mouse_Startup(Section *sec); + BIOS_PS2Mouse_Startup(NULL); + + if (!IS_PC98_ARCH) { + /* this belongs HERE not on-demand from INT 15h! */ + biosConfigSeg = ROMBIOS_GetMemory(16/*one paragraph*/,"BIOS configuration (INT 15h AH=0xC0)",/*paragraph align*/16)>>4; + if (biosConfigSeg != 0) { + PhysPt data = PhysMake(biosConfigSeg,0); + phys_writew(data,8); // 8 Bytes following + if (IS_TANDY_ARCH) { + if (machine==MCH_TANDY) { + // Model ID (Tandy) + phys_writeb(data+2,0xFF); + } else { + // Model ID (PCJR) + phys_writeb(data+2,0xFD); + } + phys_writeb(data+3,0x0A); // Submodel ID + phys_writeb(data+4,0x10); // Bios Revision + /* Tandy doesn't have a 2nd PIC, left as is for now */ + phys_writeb(data+5,(1<<6)|(1<<5)|(1<<4)); // Feature Byte 1 + } else { + if (machine==MCH_MCGA) { + /* PC/2 model 30 model */ + phys_writeb(data+2,0xFA); + phys_writeb(data+3,0x00); // Submodel ID (PS/2) model 30 + } else if (PS1AudioCard) { /* FIXME: Won't work because BIOS_Init() comes before PS1SOUND_Init() */ + phys_writeb(data+2,0xFC); // Model ID (PC) + phys_writeb(data+3,0x0B); // Submodel ID (PS/1). + } else { + phys_writeb(data+2,0xFC); // Model ID (PC) + phys_writeb(data+3,0x00); // Submodel ID + } + phys_writeb(data+4,0x01); // Bios Revision + phys_writeb(data+5,(1<<6)|(1<<5)|(1<<4)); // Feature Byte 1 + } + phys_writeb(data+6,(1<<6)); // Feature Byte 2 + phys_writeb(data+7,0); // Feature Byte 3 + phys_writeb(data+8,0); // Feature Byte 4 + phys_writeb(data+9,0); // Feature Byte 5 + } + } + + // ISA Plug & Play I/O ports + if (!IS_PC98_ARCH && ISAPNPPORT) { + ISAPNP_PNP_ADDRESS_PORT = new IO_WriteHandleObject; + ISAPNP_PNP_ADDRESS_PORT->Install(0x279,isapnp_write_port,IO_MB); + ISAPNP_PNP_DATA_PORT = new IO_WriteHandleObject; + ISAPNP_PNP_DATA_PORT->Install(0xA79,isapnp_write_port,IO_MB); + ISAPNP_PNP_READ_PORT = new IO_ReadHandleObject; + ISAPNP_PNP_READ_PORT->Install(ISA_PNP_WPORT,isapnp_read_port,IO_MB); + LOG(LOG_MISC,LOG_DEBUG)("Registered ISA PnP read port at 0x%03x",ISA_PNP_WPORT); + } + + if (enable_integration_device) { + /* integration device callout */ + if (dosbox_int_iocallout == IO_Callout_t_none) + dosbox_int_iocallout = IO_AllocateCallout(IO_TYPE_MB); + if (dosbox_int_iocallout == IO_Callout_t_none) + E_Exit("Failed to get dosbox-x integration IO callout handle"); + + { + IO_CalloutObject *obj = IO_GetCallout(dosbox_int_iocallout); + if (obj == NULL) E_Exit("Failed to get dosbox-x integration IO callout"); + + /* NTS: Ports 28h-2Bh conflict with extended DMA control registers in PC-98 mode. + * TODO: Move again, if DB28h-DB2Bh are taken by something standard on PC-98. */ + obj->Install(IS_PC98_ARCH ? 0xDB28 : 0x28, + IOMASK_Combine(IOMASK_FULL,IOMASK_Range(4)),dosbox_integration_cb_port_r,dosbox_integration_cb_port_w); + IO_PutCallout(obj); + } + + /* DOSBox-X integration device */ + if (!IS_PC98_ARCH && isapnpigdevice == NULL && enable_integration_device_pnp) { + isapnpigdevice = new ISAPnPIntegrationDevice; + ISA_PNP_devreg(isapnpigdevice); + } + } + + // ISA Plug & Play BIOS entrypoint + // NTS: Apparently, Windows 95, 98, and ME will re-enumerate and re-install PnP devices if our entry point changes its address. + if (!IS_PC98_ARCH && ISAPNPBIOS) { + Bitu base; + unsigned int i; + unsigned char c,tmp[256]; + + isapnp_biosstruct_base = base = ROMBIOS_GetMemory(0x21,"ISA Plug & Play BIOS struct",/*paragraph alignment*/0x10); + + if (base == 0) E_Exit("Unable to allocate ISA PnP struct"); + LOG_MSG("ISA Plug & Play BIOS enabled"); + + call_pnp_r = CALLBACK_Allocate(); + call_pnp_rp = PNPentry_real = CALLBACK_RealPointer(call_pnp_r); + CALLBACK_Setup(call_pnp_r,ISAPNP_Handler_RM,CB_RETF,"ISA Plug & Play entry point (real)"); + //LOG_MSG("real entry pt=%08lx\n",PNPentry_real); + + call_pnp_p = CALLBACK_Allocate(); + call_pnp_pp = PNPentry_prot = CALLBACK_RealPointer(call_pnp_p); + CALLBACK_Setup(call_pnp_p,ISAPNP_Handler_PM,CB_RETF,"ISA Plug & Play entry point (protected)"); + //LOG_MSG("prot entry pt=%08lx\n",PNPentry_prot); + + phys_writeb(base+0,'$'); + phys_writeb(base+1,'P'); + phys_writeb(base+2,'n'); + phys_writeb(base+3,'P'); + phys_writeb(base+4,0x10); /* Version: 1.0 */ + phys_writeb(base+5,0x21); /* Length: 0x21 bytes */ + phys_writew(base+6,0x0000); /* Control field: Event notification not supported */ + /* skip checksum atm */ + phys_writed(base+9,0); /* Event notify flag addr: (none) */ + phys_writed(base+0xD,call_pnp_rp); /* Real-mode entry point */ + phys_writew(base+0x11,call_pnp_pp&0xFFFF); /* Protected mode offset */ + phys_writed(base+0x13,(call_pnp_pp >> 12) & 0xFFFF0); /* Protected mode code segment base */ + phys_writed(base+0x17,ISAPNP_ID('D','O','S',0,8,4,0)); /* OEM device identifier (DOSBox-X 0.84.x) */ + phys_writew(base+0x1B,0xF000); /* real-mode data segment */ + phys_writed(base+0x1D,0xF0000); /* protected mode data segment address */ + /* run checksum */ + c=0; + for (i=0;i < 0x21;i++) { + if (i != 8) c += phys_readb(base+i); + } + phys_writeb(base+8,0x100-c); /* checksum value: set so that summing bytes across the struct == 0 */ + + /* input device (keyboard) */ + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_Keyboard,sizeof(ISAPNP_sysdev_Keyboard),true)) + LOG_MSG("ISAPNP register failed\n"); + + /* input device (mouse) */ + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_Mouse,sizeof(ISAPNP_sysdev_Mouse),true)) + LOG_MSG("ISAPNP register failed\n"); + + /* DMA controller */ + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_DMA_Controller,sizeof(ISAPNP_sysdev_DMA_Controller),true)) + LOG_MSG("ISAPNP register failed\n"); + + /* Interrupt controller */ + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_PIC,sizeof(ISAPNP_sysdev_PIC),true)) + LOG_MSG("ISAPNP register failed\n"); + + /* Timer */ + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_Timer,sizeof(ISAPNP_sysdev_Timer),true)) + LOG_MSG("ISAPNP register failed\n"); + + /* Realtime clock */ + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_RTC,sizeof(ISAPNP_sysdev_RTC),true)) + LOG_MSG("ISAPNP register failed\n"); + + /* PC speaker */ + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_PC_Speaker,sizeof(ISAPNP_sysdev_PC_Speaker),true)) + LOG_MSG("ISAPNP register failed\n"); + + /* System board */ + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_System_Board,sizeof(ISAPNP_sysdev_System_Board),true)) + LOG_MSG("ISAPNP register failed\n"); + + /* Motherboard PNP resources and general */ + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_General_ISAPNP,sizeof(ISAPNP_sysdev_General_ISAPNP),true)) + LOG_MSG("ISAPNP register failed\n"); + + /* ISA bus, meaning, a computer with ISA slots. + * The purpose of this device is to convince Windows 95 to automatically install it's + * "ISA Plug and Play bus" so that PnP devices are recognized automatically */ + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_ISA_BUS,sizeof(ISAPNP_sysdev_ISA_BUS),true)) + LOG_MSG("ISAPNP register failed\n"); + + if (pcibus_enable) { + /* PCI bus, meaning, a computer with PCI slots. + * The purpose of this device is to tell Windows 95 that a PCI bus is present. Without + * this entry, PCI devices will not be recognized until you manually install the PCI driver. */ + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_PCI_BUS,sizeof(ISAPNP_sysdev_PCI_BUS),true)) + LOG_MSG("ISAPNP register failed\n"); + } + + /* APM BIOS device. To help Windows 95 see our APM BIOS. */ + if (APMBIOS && APMBIOS_pnp) { + LOG_MSG("Registering APM BIOS as ISA Plug & Play BIOS device node"); + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_APM_BIOS,sizeof(ISAPNP_sysdev_APM_BIOS),true)) + LOG_MSG("ISAPNP register failed\n"); + } + +#if (C_FPU) + /* Numeric Coprocessor */ + if (!ISAPNP_RegisterSysDev(ISAPNP_sysdev_Numeric_Coprocessor,sizeof(ISAPNP_sysdev_Numeric_Coprocessor),true)) + LOG_MSG("ISAPNP register failed\n"); +#endif + + /* RAM resources. we have to construct it */ + /* NTS: We don't do this here, but I have an old Toshiba laptop who's PnP BIOS uses + * this device ID to report both RAM and ROM regions. */ + { + Bitu max = MEM_TotalPages() * 4096; + const unsigned char h1[9] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0xC,0x0,0x1), /* PNP0C01 System device, motherboard resources */ + ISAPNP_TYPE(0x05,0x00,0x00), /* type: Memory, RAM, general */ + 0x0001 | 0x0002) + }; + + i = 0; + memcpy(tmp+i,h1,9); i += 9; /* can't disable, can't configure */ + /*----------allocated--------*/ + tmp[i+0] = 0x80 | 6; /* 32-bit memory range */ + tmp[i+1] = 9; /* length=9 */ + tmp[i+2] = 0; + tmp[i+3] = 0x01; /* writeable, no cache, 8-bit, not shadowable, not ROM */ + host_writed(tmp+i+4,0x00000); /* base */ + host_writed(tmp+i+8,max > 0xA0000 ? 0xA0000 : 0x00000); /* length */ + i += 9+3; + + if (max > 0x100000) { + tmp[i+0] = 0x80 | 6; /* 32-bit memory range */ + tmp[i+1] = 9; /* length=9 */ + tmp[i+2] = 0; + tmp[i+3] = 0x01; + host_writed(tmp+i+4,0x100000); /* base */ + host_writed(tmp+i+8,max-0x100000); /* length */ + i += 9+3; + } + + tmp[i+0] = 0x79; /* END TAG */ + tmp[i+1] = 0x00; + i += 2; + /*-------------possible-----------*/ + tmp[i+0] = 0x79; /* END TAG */ + tmp[i+1] = 0x00; + i += 2; + /*-------------compatible---------*/ + tmp[i+0] = 0x79; /* END TAG */ + tmp[i+1] = 0x00; + i += 2; + + if (!ISAPNP_RegisterSysDev(tmp,i)) + LOG_MSG("ISAPNP register failed\n"); + } + + /* register parallel ports */ + for (Bitu portn=0;portn < 3;portn++) { + Bitu port = mem_readw(BIOS_ADDRESS_LPT1+(portn*2)); + if (port != 0) { + const unsigned char h1[9] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0x4,0x0,0x0), /* PNP0400 Standard LPT printer port */ + ISAPNP_TYPE(0x07,0x01,0x00), /* type: General parallel port */ + 0x0001 | 0x0002) + }; + + i = 0; + memcpy(tmp+i,h1,9); i += 9; /* can't disable, can't configure */ + /*----------allocated--------*/ + tmp[i+0] = (8 << 3) | 7; /* IO resource */ + tmp[i+1] = 0x01; /* 16-bit decode */ + host_writew(tmp+i+2,port); /* min */ + host_writew(tmp+i+4,port); /* max */ + tmp[i+6] = 0x10; /* align */ + tmp[i+7] = 0x03; /* length */ + i += 7+1; + + /* TODO: If/when LPT emulation handles the IRQ, add IRQ resource here */ + + tmp[i+0] = 0x79; /* END TAG */ + tmp[i+1] = 0x00; + i += 2; + /*-------------possible-----------*/ + tmp[i+0] = 0x79; /* END TAG */ + tmp[i+1] = 0x00; + i += 2; + /*-------------compatible---------*/ + tmp[i+0] = 0x79; /* END TAG */ + tmp[i+1] = 0x00; + i += 2; + + if (!ISAPNP_RegisterSysDev(tmp,i)) + LOG_MSG("ISAPNP register failed\n"); + } + } + + void BIOS_Post_register_comports_PNP(); + BIOS_Post_register_comports_PNP(); + + void BIOS_Post_register_IDE(); + BIOS_Post_register_IDE(); + + void BIOS_Post_register_FDC(); + BIOS_Post_register_FDC(); + } + + if (IS_PC98_ARCH) { + /* initialize IRQ0 timer to default tick interval. + * PC-98 does not pre-initialize timer 0 of the PIT to 0xFFFF the way IBM PC/XT/AT do */ + PC98_Interval_Timer_Continue(); + PIC_SetIRQMask(0,true); /* PC-98 keeps the timer off unless INT 1Ch is called to set a timer interval */ + } + + if (!IS_PC98_ARCH) { + Section_prop * section=static_cast(control->GetSection("speaker")); + bool bit0en = section->Get_bool("pcspeaker clock gate enable at startup"); + + if (bit0en) { + uint8_t x = IO_Read(0x61); + IO_Write(0x61,(x & (~3u)) | 1u); /* set bits[1:0] = 01 (clock gate enable but output gate disable) */ + LOG_MSG("xxxx"); + } + } + + if (ACPI_enabled) { + if (acpi_iocallout == IO_Callout_t_none) + acpi_iocallout = IO_AllocateCallout(IO_TYPE_MB); + if (acpi_iocallout == IO_Callout_t_none) + E_Exit("Failed to get ACPI IO callout handle"); + + { + IO_CalloutObject *obj = IO_GetCallout(acpi_iocallout); + if (obj == NULL) E_Exit("Failed to get ACPI IO callout"); + obj->Install(ACPI_IO_BASE,IOMASK_Combine(IOMASK_FULL,IOMASK_Range(0x20)),acpi_cb_port_r,acpi_cb_port_w); + IO_PutCallout(obj); + } + + BuildACPITable(); + } + + CPU_STI(); + + return CBRET_NONE; + } + CALLBACK_HandlerObject cb_bios_scan_video_bios; + static Bitu cb_bios_scan_video_bios__func(void) { + unsigned long size; + + /* NTS: As far as I can tell, video is integrated into the PC-98 BIOS and there is no separate BIOS */ + if (IS_PC98_ARCH) return CBRET_NONE; + + if (cpu.pmode) E_Exit("BIOS error: VIDEO BIOS SCAN function called while in protected/vm86 mode"); + + if (!bios_has_exec_vga_bios) { + bios_has_exec_vga_bios = true; + if (IS_EGAVGA_ARCH) { + /* make sure VGA BIOS is there at 0xC000:0x0000 */ + if (AdapterROM_Read(0xC0000,&size)) { + LOG(LOG_MISC,LOG_DEBUG)("BIOS VIDEO ROM SCAN found VGA BIOS (size=%lu)",size); + adapter_scan_start = 0xC0000 + size; + + // step back into the callback instruction that triggered this call + reg_eip -= 4; + + // FAR CALL into the VGA BIOS + CPU_CALL(false,0xC000,0x0003,reg_eip); + return CBRET_NONE; + } + else { + LOG(LOG_MISC,LOG_WARN)("BIOS VIDEO ROM SCAN did not find VGA BIOS"); + } + } + else { + // CGA, MDA, Tandy, PCjr. No video BIOS to scan for + } + } + + return CBRET_NONE; + } + CALLBACK_HandlerObject cb_bios_adapter_rom_scan; + static Bitu cb_bios_adapter_rom_scan__func(void) { + unsigned long size; + uint32_t c1; + + /* FIXME: I have no documentation on how PC-98 scans for adapter ROM or even if it supports it */ + if (IS_PC98_ARCH) return CBRET_NONE; + + if (cpu.pmode) E_Exit("BIOS error: ADAPTER ROM function called while in protected/vm86 mode"); + + while (adapter_scan_start < 0xF0000) { + if (AdapterROM_Read(adapter_scan_start,&size)) { + uint16_t segm = (uint16_t)(adapter_scan_start >> 4); + + LOG(LOG_MISC,LOG_DEBUG)("BIOS ADAPTER ROM scan found ROM at 0x%lx (size=%lu)",(unsigned long)adapter_scan_start,size); + + c1 = mem_readd(adapter_scan_start+3); + adapter_scan_start += size; + if (c1 != 0UL) { + LOG(LOG_MISC,LOG_DEBUG)("Running ADAPTER ROM entry point"); + + // step back into the callback instruction that triggered this call + reg_eip -= 4; + + // FAR CALL into the VGA BIOS + CPU_CALL(false,segm,0x0003,reg_eip); + return CBRET_NONE; + } + else { + LOG(LOG_MISC,LOG_DEBUG)("FIXME: ADAPTER ROM entry point does not exist"); + } + } + else { + if (IS_EGAVGA_ARCH) // supposedly newer systems only scan on 2KB boundaries by standard? right? + adapter_scan_start = (adapter_scan_start | 2047UL) + 1UL; + else // while older PC/XT systems scanned on 512-byte boundaries? right? + adapter_scan_start = (adapter_scan_start | 511UL) + 1UL; + } + } + + LOG(LOG_MISC,LOG_DEBUG)("BIOS ADAPTER ROM scan complete"); + return CBRET_NONE; + } + CALLBACK_HandlerObject cb_bios_startup_screen; + static Bitu cb_bios_startup_screen__func(void) { + const Section_prop* section = static_cast(control->GetSection("dosbox")); + const char *logo_text = section->Get_string("logo text"); + const char *logo = section->Get_string("logo"); + bool fastbioslogo=section->Get_bool("fastbioslogo")||control->opt_fastbioslogo||control->opt_fastlaunch; + if (fastbioslogo && machine != MCH_PC98) { +#if defined(USE_TTF) + if (TTF_using()) { + uint32_t lasttick=GetTicks(); + while ((GetTicks()-lasttick)<500) { + reg_eax = 0x0100; + CALLBACK_RunRealInt(0x16); + } + reg_eax = 3; + CALLBACK_RunRealInt(0x10); + } +#endif + if (control->opt_fastlaunch) return CBRET_NONE; + } + extern const char* RunningProgram; + extern void GFX_SetTitle(int32_t cycles, int frameskip, Bits timing, bool paused); + RunningProgram = "DOSBOX-X"; + GFX_SetTitle(-1,-1,-1,false); + const char *msg = "DOSBox-X (C) 2011-" COPYRIGHT_END_YEAR " The DOSBox-X Team\nDOSBox-X project maintainer: joncampbell123\nDOSBox-X project homepage: https://dosbox-x.com\nDOSBox-X user guide: https://dosbox-x.com/wiki\n\n"; + bool textsplash = section->Get_bool("disable graphical splash"); +#if defined(USE_TTF) + if (TTF_using()) { + textsplash = true; + if (ttf.cols != 80 || ttf.lins != 25) { + oldcols = ttf.cols; + oldlins = ttf.lins; + } else + oldcols = oldlins = 0; + } +#endif + + textsplash = true; + + char logostr[8][34]; + strcpy(logostr[0], "+---------------------+"); + strcpy(logostr[1], "| Welcome To |"); + strcpy(logostr[2], "| |"); + strcpy(logostr[3], "| D O S B o x - X ! |"); + strcpy(logostr[4], "| Bizhawk Edition |"); + sprintf(logostr[5],"| %d-bit %s |", + OS_BIT_INT, SDL_STRING); + sprintf(logostr[6], "| Version %10s |", VERSION); + strcpy(logostr[7], "+---------------------+"); +startfunction: + int logo_x,logo_y,x=2,y=2; + + logo_y = 2; + if (machine == MCH_HERC || machine == MCH_MDA) + logo_x = 80 - 2 - (224/9); + else + logo_x = 80 - 2 - (224/8); + + if (cpu.pmode) E_Exit("BIOS error: STARTUP function called while in protected/vm86 mode"); + + if (IS_VGA_ARCH) { + reg_eax = 18; // 640x480 16-color + CALLBACK_RunRealInt(0x10); + + if (svgaCard == SVGA_DOSBoxIG) + VGA_StartUpdateLFB(); + } + else if (machine == MCH_PC98) { + // clear the graphics layer + for (unsigned int i=0;i < (80*400);i++) { + mem_writeb(0xA8000+i,0); // B + mem_writeb(0xB0000+i,0); // G + mem_writeb(0xB8000+i,0); // R + mem_writeb(0xE0000+i,0); // E + } + + reg_eax = 0x0C00; // enable text layer (PC-98) + CALLBACK_RunRealInt(0x18); + + reg_eax = 0x1100; // show cursor (PC-98) + CALLBACK_RunRealInt(0x18); + + reg_eax = 0x1300; // set cursor pos (PC-98) + reg_edx = 0x0000; // byte position + CALLBACK_RunRealInt(0x18); + + bios_pc98_posx = x; + + reg_eax = 0x4200; // setup 640x400 graphics + reg_ecx = 0xC000; + CALLBACK_RunRealInt(0x18); + + IO_Write(0x6A, 0x01); // enable 16-color analog mode (this makes the 4th bitplane appear) + IO_Write(0x6A, 0x04); // but we don't need the EGC graphics + IO_Write(0xA4, 0x00); // display page 0 + IO_Write(0xA6, 0x00); // write to page 0 + + // setup palette for TTF mode + for(unsigned int i = 0; i < 16; i++) { + unsigned int bias = (i & 8) ? 0x5 : 0x0; + + IO_Write(0xA8, i); // DAC index + IO_Write(0xAA, ((i & 2) ? 0xA : 0x0) + bias); // green + IO_Write(0xAC, ((i & 4) ? 0xA : 0x0) + bias); // red + IO_Write(0xAE, ((i & 1) ? 0xA : 0x0) + bias); // blue + } + } + else { + reg_eax = 3; // 80x25 text + CALLBACK_RunRealInt(0x10); + } + +#if defined(USE_TTF) + if (TTF_using() && (ttf.cols != 80 || ttf.lins != 25)) ttf_setlines(80, 25); +#endif + + if (machine != MCH_PC98) { + reg_eax = 0x0200; // set cursor pos + reg_ebx = 0; // page zero + reg_dh = y; // row 4 + reg_dl = x; // column 20 + CALLBACK_RunRealInt(0x10); + } + + BIOS_Int10RightJustifiedPrint(x,y,msg); + +#if defined(C_LIBPNG) + { + png_bytep rows[1]; + unsigned char *row = NULL;/*png_width*/ + png_structp png_context = NULL; + png_infop png_info = NULL; + png_infop png_end = NULL; + png_uint_32 png_width = 0,png_height = 0; + int png_bit_depth = 0,png_color_type = 0,png_interlace = 0,png_filter = 0,png_compression = 0; + png_color *palette = NULL; + int palette_count = 0; + std::string user_filename; + unsigned int rowheight = 8; + const char *filename = NULL; + const unsigned char *inpng = NULL; + size_t inpng_size = 0; + FILE *png_fp = NULL; + + /* If the user wants a custom logo, just put it in the same directory as the .conf file and have at it. + * Requirements: The PNG must be 1/2/4/8bpp with a color palette, not grayscale, not truecolor, and + * no alpha channel data at all. No interlacing. Must be 224x224 or smaller, and should fit the size + * indicated in the filename. There are multiple versions, one for each vertical resolution of common + * CGA/EGA/VGA/etc. modes: 480-line, 400-line, 350-line, and 200-line. All images other than the 480-line + * one have a non-square pixel aspect ratio. Please take that into consideration. */ + /* 2026/03/29: You can now put it in the DOSBox config directory in your home directory as well. */ + if (IS_VGA_ARCH) { + if (logo) user_filename = std::string(logo) + "224x224.png"; + filename = "dosbox224x224.png"; + inpng_size = dosbox224x224_png_len; + inpng = dosbox224x224_png; + rowheight = 16; + } + else if (IS_PC98_ARCH || machine == MCH_MCGA) { + if (logo) user_filename = std::string(logo) + "224x186.png"; + filename = "dosbox224x186.png"; + inpng_size = dosbox224x186_png_len; + inpng = dosbox224x186_png; + rowheight = 16; + } + else if (IS_EGA_ARCH) { + if (ega200) { + if (logo) user_filename = std::string(logo) + "224x93.png"; + filename = "dosbox224x93.png"; + inpng_size = dosbox224x93_png_len; + inpng = dosbox224x93_png; + } + else { + if (logo) user_filename = std::string(logo) + "224x163.png"; + filename = "dosbox224x163.png"; + inpng_size = dosbox224x163_png_len; + inpng = dosbox224x163_png; + rowheight = 14; + } + } + else if (machine == MCH_HERC || machine == MCH_MDA) { + if (logo) user_filename = std::string(logo) + "224x163.png"; + filename = "dosbox224x163.png"; + inpng_size = dosbox224x163_png_len; + inpng = dosbox224x163_png; + rowheight = 14; + } + else { + if (logo) user_filename = std::string(logo) + "224x93.png"; + filename = "dosbox224x93.png"; + inpng_size = dosbox224x93_png_len; + inpng = dosbox224x93_png; + } + + const std::string configdir = Cross::GetPlatformConfigDir(); + + if (png_fp == NULL && !configdir.empty() && !user_filename.empty()) + png_fp = fopen((configdir + user_filename).c_str(),"rb"); + if (png_fp == NULL && !configdir.empty() && filename != NULL) + png_fp = fopen((configdir + filename).c_str(),"rb"); + if (png_fp == NULL && !user_filename.empty()) + png_fp = fopen(user_filename.c_str(),"rb"); + if (png_fp == NULL && filename != NULL) + png_fp = fopen(filename,"rb"); + + if (png_fp || inpng) { + png_context = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL/*err*/,NULL/*err fn*/,NULL/*warn fn*/); + if (png_context) { + png_info = png_create_info_struct(png_context); + if (png_info) { + png_set_user_limits(png_context,320,320); + } + } + } + + if (png_context && png_info) { + if (png_fp) { + LOG(LOG_MISC,LOG_DEBUG)("Using external file logo %s",filename); + png_init_io(png_context,png_fp); + } + else if (inpng) { + LOG(LOG_MISC,LOG_DEBUG)("Using built-in logo"); + BIOSLOGO_PNG_PTR = inpng; + BIOSLOGO_PNG_FENCE = inpng + inpng_size; + png_set_read_fn(png_context,NULL,BIOSLOGO_PNG_READ); + } + else { + abort(); /* should not be here */ + } + + png_read_info(png_context,png_info); + png_get_IHDR(png_context,png_info,&png_width,&png_height,&png_bit_depth,&png_color_type,&png_interlace,&png_compression,&png_filter); + + LOG(LOG_MISC,LOG_DEBUG)("BIOS png image: w=%u h=%u bitdepth=%u ct=%u il=%u compr=%u filt=%u", + png_width,png_height,png_bit_depth,png_color_type,png_interlace,png_compression,png_filter); + + if (png_width != 0 && png_height != 0 && png_bit_depth != 0 && png_bit_depth <= 8 && + (png_color_type&(PNG_COLOR_MASK_PALETTE|PNG_COLOR_MASK_COLOR)) == (PNG_COLOR_MASK_PALETTE|PNG_COLOR_MASK_COLOR)/*palatted color only*/ && + png_interlace == 0/*do not support interlacing*/) { + LOG(LOG_MISC,LOG_DEBUG)("PNG accepted"); + /* please convert everything to 8bpp for us */ + png_set_strip_16(png_context); + png_set_packing(png_context); + png_get_PLTE(png_context,png_info,&palette,&palette_count); + + row = new unsigned char[png_width + 32]; + rows[0] = row; + + if (palette != 0 && palette_count > 0 && palette_count <= 256 && row != NULL) { + textsplash = false; + if (machine == MCH_HERC || machine == MCH_MDA) + VGA_InitBiosLogo(png_width,png_height,logo_x*9,logo_y*rowheight); + else + VGA_InitBiosLogo(png_width,png_height,logo_x*8,logo_y*rowheight); + + { + unsigned char tmp[256*3]; + for (unsigned int x=0;x < (unsigned int)palette_count;x++) { + tmp[(x*3)+0] = palette[x].red; + tmp[(x*3)+1] = palette[x].green; + tmp[(x*3)+2] = palette[x].blue; + } + VGA_WriteBiosLogoPalette(0,palette_count,tmp); + } + + for (unsigned int y=0;y < png_height;y++) { + png_read_rows(png_context,rows,NULL,1); + VGA_WriteBiosLogoBMP(y,row,png_width); + } + VGA_ShowBIOSLogo(); + } + + delete[] row; + } + } + + if (png_context) png_destroy_read_struct(&png_context,&png_info,&png_end); + if (png_fp) fclose(png_fp); + } +#endif + + if (machine == MCH_PC98 && textsplash) { + unsigned int bo, lastline = 7; + for (unsigned int i=0; i<=lastline; i++) { + for (unsigned int j=0; j= ((uint64_t)128 << (uint64_t)20)) + sprintf(tmp,"%uMB memory installed\r\n",(unsigned int)(sz >> (uint64_t)20)); + else + sprintf(tmp,"%uKB memory installed\r\n",(unsigned int)(sz >> (uint64_t)10)); + + BIOS_Int10RightJustifiedPrint(x,y,tmp); + } + + const char *card = "Unknown Graphics Adapter"; + + switch (machine) { + case MCH_CGA: + card = "IBM Color Graphics Adapter"; + break; + case MCH_MCGA: + card = "IBM Multi Color Graphics Adapter"; + break; + case MCH_MDA: + card = "IBM Monochrome Display Adapter"; + break; + case MCH_HERC: + switch (hercCard) { + case HERC_GraphicsCardPlus: + card = "Hercules+ Graphics Adapter"; + break; + case HERC_InColor: + card = "Hercules InColor Graphics Adapter"; + break; + default: + card = "Hercules Graphics Adapter"; + break; + } + break; + case MCH_EGA: + card = "IBM Enhanced Graphics Adapter"; + break; + case MCH_PCJR: + card = "PCjr Graphics Adapter"; + break; + case MCH_TANDY: + card = "Tandy Graphics Adapter"; + break; + case MCH_VGA: + switch (svgaCard) { + case SVGA_TsengET4K: + card = "Tseng ET4000 SVGA"; + break; + case SVGA_TsengET3K: + card = "Tseng ET3000 SVGA"; + break; + case SVGA_ParadisePVGA1A: + card = "Paradise SVGA"; + break; + case SVGA_S3Trio: + card = "S3 Trio SVGA"; + switch (s3Card) { + case S3_86C928: card = "S3 86C928"; break; + case S3_Vision864: card = "S3 Vision864 SVGA"; break; + case S3_Vision868: card = "S3 Vision868 SVGA"; break; + case S3_Vision964: card = "S3 Vision964 SVGA"; break; + case S3_Vision968: card = "S3 Vision968 SVGA"; break; + case S3_Trio32: card = "S3 Trio32 SVGA"; break; + case S3_Trio64: card = "S3 Trio64 SVGA"; break; + case S3_Trio64V: card = "S3 Trio64V+ SVGA"; break; + case S3_ViRGE: card = "S3 ViRGE SVGA"; break; + case S3_ViRGEVX: card = "S3 ViRGE VX SVGA"; break; + case S3_Generic: card = "S3"; break; + } + break; + case SVGA_ATI: + card = "ATI SVGA"; + switch (atiCard) { + case ATI_EGAVGAWonder: card = "ATI EGA/VGA Wonder"; break; + case ATI_VGAWonder: card = "ATI VGA Wonder"; break; + case ATI_VGAWonderPlus: card = "ATI VGA Wonder+"; break; + case ATI_VGAWonderXL: card = "ATI VGA WonderXL"; break; + case ATI_VGAWonderXL24: card = "ATI VGA WonderXL24"; break; + case ATI_Mach8: card = "ATI Mach8"; break; + case ATI_Mach32: card = "ATI Mach32"; break; + case ATI_Mach64: card = "ATI Mach64"; break; + } + break; + case SVGA_DOSBoxIG: + card = "DOSBox Integrated Graphics"; + break; + default: + card = "Standard VGA"; + break; + } + + break; + case MCH_PC98: + card = "PC98 graphics"; + break; + case MCH_AMSTRAD: + card = "Amstrad graphics"; + break; + default: + abort(); // should not happen + } + + { + char tmp[512]; + sprintf(tmp,"Video card is %s\n",card); + BIOS_Int10RightJustifiedPrint(x,y,tmp); + } + + { + char tmp[512]; + const char *cpuType = "?"; + + switch (CPU_ArchitectureType) { + case CPU_ARCHTYPE_8086: + cpuType = "8086"; + break; + case CPU_ARCHTYPE_80186: + cpuType = "80186"; + break; + case CPU_ARCHTYPE_286: + cpuType = "286"; + break; + case CPU_ARCHTYPE_386: + cpuType = "386"; + break; + case CPU_ARCHTYPE_486OLD: + cpuType = "486 (older generation)"; + break; + case CPU_ARCHTYPE_486NEW: + cpuType = "486 (later generation)"; + break; + case CPU_ARCHTYPE_PENTIUM: + cpuType = "Pentium"; + break; + case CPU_ARCHTYPE_PMMXSLOW: + cpuType = "Pentium MMX"; + break; + case CPU_ARCHTYPE_PPROSLOW: + cpuType = "Pentium Pro"; + break; + case CPU_ARCHTYPE_PENTIUMII: + cpuType = "Pentium II"; + break; + case CPU_ARCHTYPE_PENTIUMIII: + cpuType = "Pentium III"; + break; + case CPU_ARCHTYPE_MIXED: + cpuType = "Auto (mixed)"; + break; + case CPU_ARCHTYPE_EXPERIMENTAL: + cpuType = "Experimental"; + break; + } + + sprintf(tmp,"%s CPU present",cpuType); + BIOS_Int10RightJustifiedPrint(x,y,tmp); + if (enable_fpu) BIOS_Int10RightJustifiedPrint(x,y," with FPU"); + BIOS_Int10RightJustifiedPrint(x,y,"\n"); + } + + if (APMBIOS) { + BIOS_Int10RightJustifiedPrint(x,y,"Advanced Power Management interface active\n"); + } + + if (ISAPNPBIOS) { + BIOS_Int10RightJustifiedPrint(x,y,"ISA Plug & Play BIOS active\n"); + } + +#if defined(OSFREE) + BIOS_Int10RightJustifiedPrint(x,y,"OS-FREE BUILD\n"); +#endif + + if (*logo_text) { + const size_t max_w = 76; + const char *s = logo_text; + const int saved_y = y; + size_t max_h; + char tmp[81]; + int x,y; + + x = 0; /* use it here as index to tmp[] */ + if (IS_VGA_ARCH) /* VGA 640x480 has 30 lines (480/16) not 25 */ + max_h = 30; + else + max_h = 25; + y = max_h - 3; + + y--; + BIOS_Int10RightJustifiedPrint(x+2,y,"\n"); /* sync cursor */ + + while (*s) { + bool newline = false; + + assert((size_t)x < max_w); + if (isalpha(*s) || isdigit(*s)) { + size_t wi = 1;/*we already know s[0] fits the criteria*/ + while (s[wi] != 0 && (isalpha(s[wi]) || isdigit(s[wi]))) wi++; + + if (wi >= 24) { /* don't let overlong words crowd out the text */ + if (((size_t)x+wi) > max_w) + wi = max_w - (size_t)x; + } + + if (((size_t)x+wi) < max_w) { + memcpy(tmp+x,s,wi); + x += wi; + s += wi; + } + else { + newline = true; + } + } + else if (*s == ' ') { + if ((size_t)x < max_w) tmp[x++] = *s++; + + if ((size_t)x == max_w) { + while (*s == ' ') s++; + newline = true; + } + } + else if (*s == '\\') { + s++; + if (*s == 'n') { + newline = true; /* \n */ + s++; + } + else { + s++; + } + } + else { + tmp[x++] = *s++; + } + + assert((size_t)x <= max_w); + if ((size_t)x >= max_w || newline) { + tmp[x] = 0; + BIOS_Int10RightJustifiedPrint(x+2,y,tmp); + x = 0; + BIOS_Int10RightJustifiedPrint(x+2,y,"\n"); /* next line, which increments y */ + if ((size_t)y >= max_h) break; + } + } + + if (x != 0 && (size_t)y < max_h) { + tmp[x] = 0; + BIOS_Int10RightJustifiedPrint(x+2,y,tmp); + x = 0; + BIOS_Int10RightJustifiedPrint(x+2,y,"\n"); /* next line, which increments y */ + } + + y = saved_y - 1; + BIOS_Int10RightJustifiedPrint(x+2,y,"\n"); /* sync cursor */ + } + +#if !defined(C_EMSCRIPTEN) + BIOS_Int10RightJustifiedPrint(x,y,"\nHit SPACEBAR to pause at this screen\n", false, true); + BIOS_Int10RightJustifiedPrint(x,y,"\nPress DEL to enter BIOS setup screen\n", false, true); + y--; /* next message should overprint */ + if (machine != MCH_PC98) { + reg_eax = 0x0200; // set cursor pos + reg_ebx = 0; // page zero + reg_dh = y; // row 4 + reg_dl = x; // column 20 + CALLBACK_RunRealInt(0x10); + } + else { + reg_eax = 0x1300u; // set cursor pos (PC-98) + reg_edx = (((unsigned int)y * 80u) + (unsigned int)x) * 2u; // byte position + CALLBACK_RunRealInt(0x18); + } +#endif + + // TODO: Then at this screen, we can print messages demonstrating the detection of + // IDE devices, floppy, ISA PnP initialization, anything of importance. + // I also envision adding the ability to hit DEL or F2 at this point to enter + // a "BIOS setup" screen where all DOSBox-X configuration options can be + // modified, with the same look and feel of an old BIOS. + +#if C_EMSCRIPTEN + uint32_t lasttick=GetTicks(); + while ((GetTicks()-lasttick)<1000) { + void CALLBACK_Idle(void); + CALLBACK_Idle(); + emscripten_sleep(100); + } +#else + if (!fastbioslogo&&!bootguest&&!bootfast&&(bootvm||!use_quick_reboot)) { + bool wait_for_user = false, bios_setup = false; + int pos=1; + uint32_t lasttick=GetTicks(); + while ((GetTicks()-lasttick)<1000) { + if (machine == MCH_PC98) { + reg_eax = 0x0100; // sense key + CALLBACK_RunRealInt(0x18); + SETFLAGBIT(ZF,reg_bh == 0); + } + else { + reg_eax = 0x0100; + CALLBACK_RunRealInt(0x16); + } + + if (!GETFLAG(ZF)) { + if (machine == MCH_PC98) { + reg_eax = 0x0000; // read key + CALLBACK_RunRealInt(0x18); + } + else { + reg_eax = 0x0000; + CALLBACK_RunRealInt(0x16); + } + + if (reg_al == 32) { // user hit space + BIOS_Int10RightJustifiedPrint(x,y,"Hit ENTER or ESC to continue \n", false, true); // overprint + BIOS_Int10RightJustifiedPrint(x,y,"\nPress DEL to enter BIOS setup screen\n", false, true); + wait_for_user = true; + break; + } + + if ((machine != MCH_PC98 && reg_ax == 0x5300) || (machine == MCH_PC98 && reg_ax == 0x3900)) { // user hit Del + bios_setup = true; + showBIOSSetup(card, x, y); + break; + } + } + } + + while (wait_for_user) { + if (machine == MCH_PC98) { + reg_eax = 0x0000; // read key + CALLBACK_RunRealInt(0x18); + } + else { + reg_eax = 0x0000; + CALLBACK_RunRealInt(0x16); + } + + if ((machine != MCH_PC98 && reg_ax == 0x5300/*DEL*/) || (machine == MCH_PC98 && reg_ax == 0x3900)) { + bios_setup = true; + VGA_FreeBiosLogo(); + showBIOSSetup(card, x, y); + break; + } + + if (reg_al == 27/*ESC*/ || reg_al == 13/*ENTER*/) + break; + } + + lasttick=GetTicks(); + bool askexit = false, mod = false; + while (bios_setup) { + if (GetTicks()-lasttick>=500 && !askexit) { + lasttick=GetTicks(); + updateDateTime(x,y,pos); + } + if (machine == MCH_PC98) { + reg_eax = 0x0100; // sense key + CALLBACK_RunRealInt(0x18); + SETFLAGBIT(ZF,reg_bh == 0); + } + else { + reg_eax = 0x0100; + CALLBACK_RunRealInt(0x16); + } + + if (!GETFLAG(ZF)) { + if (machine == MCH_PC98) { + reg_eax = 0x0000; // read key + CALLBACK_RunRealInt(0x18); + } + else { + reg_eax = 0x0000; + CALLBACK_RunRealInt(0x16); + } + if (askexit) { + if (reg_al == 'Y' || reg_al == 'y') { + if (machine == MCH_PC98) { + reg_eax = 0x1600; + reg_edx = 0xE100; + CALLBACK_RunRealInt(0x18); + } + goto startfunction; + } else if (machine == MCH_PC98) { + const char *exitstr = "ESC = Exit"; + unsigned int bo; + for (unsigned int i=0; i1?pos-1:6; + lasttick-=500; + } else if ((machine != MCH_PC98 && reg_ax == 0x4D00) || (machine == MCH_PC98 && reg_ax == 0x3C00)) { // Right key + pos=pos<6?pos+1:1; + lasttick-=500; + } else if (((machine != MCH_PC98 && reg_ax == 0x4800) || (machine == MCH_PC98 && reg_ax == 0x3A00)) && pos>3) { // Up key + if (pos==4||pos==5) pos=1; + else if (pos==6) pos=2; + lasttick-=500; + } else if (((machine != MCH_PC98 && reg_ax == 0x5000) || (machine == MCH_PC98 && reg_ax == 0x3D00)) && pos<4) { // Down key + if (pos==1) pos=4; + else if (pos==2||pos==3) pos=6; + lasttick-=500; + } else if (machine != MCH_PC98 && reg_al == 43) { // '+' key + if (pos==1&&dos.date.year<2100) dos.date.year++; + else if (pos==2) dos.date.month=dos.date.month<12?dos.date.month+1:1; + else if (pos==3) dos.date.day=dos.date.day<(dos.date.month==1||dos.date.month==3||dos.date.month==5||dos.date.month==7||dos.date.month==8||dos.date.month==10||dos.date.month==12?31:(dos.date.month==2?29:30))?dos.date.day+1:1; + else if (pos==4||pos==5||pos==6) { + Bitu time=(Bitu)((100.0/((double)PIT_TICK_RATE/65536.0)) * mem_readd(BIOS_TIMER))/100; + unsigned int sec=(uint8_t)((Bitu)time % 60); + time/=60; + unsigned int min=(uint8_t)((Bitu)time % 60); + time/=60; + unsigned int hour=(uint8_t)((Bitu)time % 24); + if (pos==4) hour=hour<23?hour+1:0; + else if (pos==5) min=min<59?min+1:0; + else if (pos==6) sec=sec<59?sec+1:0; + mem_writed(BIOS_TIMER,(uint32_t)((double)hour*3600+min*60+sec)*18.206481481); + } + mod = true; + if (sync_time) {manualtime=true;mainMenu.get_item("sync_host_datetime").check(false).refresh_item(mainMenu);} + lasttick-=500; + } else if (machine != MCH_PC98 && reg_al == 45) { // '-' key + if (pos==1&&dos.date.year>1900) dos.date.year--; + else if (pos==2) dos.date.month=dos.date.month>1?dos.date.month-1:12; + else if (pos==3) dos.date.day=dos.date.day>1?dos.date.day-1:(dos.date.month==1||dos.date.month==3||dos.date.month==5||dos.date.month==7||dos.date.month==8||dos.date.month==10||dos.date.month==12?31:(dos.date.month==2?29:30)); + else if (pos==4||pos==5||pos==6) { + Bitu time=(Bitu)((100.0/((double)PIT_TICK_RATE/65536.0)) * mem_readd(BIOS_TIMER))/100; + unsigned int sec=(uint8_t)(time % 60); + time/=60; + unsigned int min=(uint8_t)(time % 60); + time/=60; + unsigned int hour=(uint8_t)(time % 24); + if (pos==4) hour=hour>0?hour-1:23; + else if (pos==5) min=min>0?min-1:59; + else if (pos==6) sec=sec>0?sec-1:59; + mem_writed(BIOS_TIMER,(uint32_t)((double)hour*3600+min*60+sec)*18.206481481); + } + mod = true; + if (sync_time) {manualtime=true;mainMenu.get_item("sync_host_datetime").check(false).refresh_item(mainMenu);} + lasttick-=500; + } else if (reg_al == 27/*ESC*/) { + if (machine == MCH_PC98) { + const char *exitstr = "Exit[Y/N]?"; + unsigned int bo; + for (unsigned int i=0; i0 && oldlins>0) { + ttf_setlines(oldcols, oldlins); + oldcols = oldlins = 0; + } +#endif + + return CBRET_NONE; + } + CALLBACK_HandlerObject cb_bios_boot; + CALLBACK_HandlerObject cb_bios_bootfail; + CALLBACK_HandlerObject cb_pc98_rombasic; /* hardcoded entry point used by various PC-98 games that jump to N88 ROM BASIC */ + CALLBACK_HandlerObject cb_ibm_basic; /* hardcoded entry point used by MS-DOS 1.x BASIC.COM and BASICA.COM to jump to IBM ROM BASIC (F600:4C79) */ + static Bitu cb_pc98_entry__func(void) { + /* the purpose of this function is to say "N88 ROM BASIC NOT FOUND" */ + int x,y; + + x = y = 0; + + /* PC-98 MS-DOS boot sector may RETF back to the BIOS, and this is where execution ends up */ + BIOS_Int10RightJustifiedPrint(x,y,"N88 ROM BASIC NOT IMPLEMENTED"); + + return CBRET_NONE; + } + static Bitu cb_ibm_basic_entry__func(void) { + /* the purpose of this function is to say "IBM ROM BASIC NOT FOUND" */ + int x,y; + + x = y = 0; + + /* PC-98 MS-DOS boot sector may RETF back to the BIOS, and this is where execution ends up */ + BIOS_Int10RightJustifiedPrint(x,y,"IBM ROM BASIC NOT IMPLEMENTED"); + + return CBRET_NONE; + } + static Bitu cb_bios_bootfail__func(void) { + int x,y; + + x = y = 0; + + /* PC-98 MS-DOS boot sector may RETF back to the BIOS, and this is where execution ends up */ + BIOS_Int10RightJustifiedPrint(x,y,"Guest OS failed to boot, returned failure"); + + /* and then after this call, there is a JMP $ to loop endlessly */ + return CBRET_NONE; + } + static Bitu cb_bios_boot__func(void) { + /* Reset/power-on overrides the user's A20 gate preferences. + * It's time to revert back to what the user wants. */ + void A20Gate_TakeUserSetting(Section *sec); + void MEM_A20_Enable(bool enabled); + A20Gate_TakeUserSetting(NULL); + MEM_A20_Enable(false); + + if (cpu.pmode) E_Exit("BIOS error: BOOT function called while in protected/vm86 mode"); + DispatchVMEvent(VM_EVENT_BIOS_BOOT); + + // TODO: If instructed to, follow the INT 19h boot pattern, perhaps follow the BIOS Boot Specification, etc. + + // TODO: If instructed to boot a guest OS... + + /* wipe out the stack so it's not there to interfere with the system, point it at top of memory or top of segment */ + reg_esp = std::min((unsigned int)((MEM_ConventionalPages() << 12) - 0x600 - 4),0xFFFCu); + reg_eip = 0; + CPU_SetSegGeneral(cs, 0x60); + CPU_SetSegGeneral(ss, 0x60); + + LOG(LOG_MISC,LOG_DEBUG)("BIOS boot SS:SP %04x:%04x",(unsigned int)0x60,(unsigned int)reg_esp); + + for (Bitu i=0;i < 0x400;i++) mem_writeb(0x7C00+i,0); + if ((bootguest||(!bootvm&&use_quick_reboot))&&!bootfast&&bootdrive>=0&&imageDiskList[bootdrive]) { + MOUSE_Startup(NULL); + char drive[] = "-QQ A:"; + drive[4]='A'+bootdrive; + runBoot(drive); + } + if (!bootguest&&!bootvm&&!bootfast&&bootdrive>=0) { + void IDE_CDROM_DetachAll(); + IDE_CDROM_DetachAll(); + } + if ((use_quick_reboot||IS_DOSV)&&!bootvm&&!bootfast&&bootdrive<0&&first_shell != NULL) throw int(6); + + bootvm=false; + bootfast=false; + bootguest=false; + bootdrive=-1; + // Begin booting the DOSBox-X shell. NOTE: VM_Boot_DOSBox_Kernel will change CS:IP instruction pointer! + if (!VM_Boot_DOSBox_Kernel()) E_Exit("BIOS error: BOOT function failed to boot DOSBox-X kernel"); + return CBRET_NONE; + } +public: + void write_FFFF_signature() { + /* write the signature at 0xF000:0xFFF0 */ + + // The farjump at the processor reset entry point (jumps to POST routine) + phys_writeb(0xffff0,0xEA); // FARJMP + phys_writew(0xffff1,RealOff(BIOS_DEFAULT_RESET_LOCATION)); // offset + phys_writew(0xffff3,RealSeg(BIOS_DEFAULT_RESET_LOCATION)); // segment + + // write system BIOS date + for(Bitu i = 0; i < strlen(bios_date_string); i++) phys_writeb(0xffff5+i,(uint8_t)bios_date_string[i]); + + /* model byte */ + if (machine==MCH_TANDY || machine==MCH_AMSTRAD) phys_writeb(0xffffe,0xff); /* Tandy model */ + else if (machine==MCH_PCJR) phys_writeb(0xffffe,0xfd); /* PCJr model */ + else if (machine==MCH_MCGA) phys_writeb(0xffffe,0xfa); /* PC/2 model 30 model */ + else phys_writeb(0xffffe,0xfc); /* PC (FIXME: This is listed as model byte PS/2 model 60) */ + + // signature + if (machine==MCH_TANDY) + phys_writeb(0xfffff,0xff); // Needed for Ninja (1986) + else + phys_writeb(0xfffff,0x55); + } + BIOS(Section* configuration):Module_base(configuration){ + isapnp_biosstruct_base = 0; + + { // TODO: Eventually, move this to BIOS POST or init phase + Section_prop * section=static_cast(control->GetSection("dosbox")); + Section_prop * pc98_section=static_cast(control->GetSection("pc98")); + + pc98_timestamp5c = pc98_section->Get_bool("pc-98 time stamp"); + + enable_pc98_copyright_string = pc98_section->Get_bool("pc-98 BIOS copyright string"); + + // NTS: This setting is also valid in PC-98 mode. According to Undocumented PC-98 by Webtech, + // there's nothing at I/O port E9h. I will move the I/O port in PC-98 mode if there is in + // fact a conflict. --J.C. + bochs_port_e9 = section->Get_bool("bochs debug port e9"); + + // TODO: motherboard init, especially when we get around to full Intel Triton/i440FX chipset emulation + { + std::string s = section->Get_string("isa memory hole at 512kb"); + + if (s == "true" || s == "1") + isa_memory_hole_512kb = true; + else if (s == "false" || s == "0") + isa_memory_hole_512kb = false; + else + isa_memory_hole_512kb = false; + } + + // TODO: motherboard init, especially when we get around to full Intel Triton/i440FX chipset emulation + { + std::string s = section->Get_string("isa memory hole at 15mb"); + + // Do NOT emulate the memory hole if emulating 24 or less address bits! BIOS crashes will result at startup! + // The whole point of the 15MB memory hole is to emulate a hole into hardware as if a 24-bit 386SX. A memalias + // setting of 24 makes it redundant. Furthermore memalias=24 and 15MB memory hole prevents the BIOS from + // mapping correctly and crashes immediately at startup. This is especially necessary for PC-98 mode where + // memalias==24 and memory hole enabled for the PEGC linear framebuffer prevents booting. + + if (MEM_get_address_bits() <= 24) + isa_memory_hole_15mb = false; + else if (s == "true" || s == "1") + isa_memory_hole_15mb = true; + else if (s == "false" || s == "0") + isa_memory_hole_15mb = false; + else if (IS_PC98_ARCH) + isa_memory_hole_15mb = true; // For the sake of some PC-98 DOS games, enable by default + else + isa_memory_hole_15mb = false; + } + + // FIXME: Erm, well this could've been named better. It refers to the amount of conventional memory + // made available to the operating system below 1MB, which is usually DOS. + dos_conventional_limit = (unsigned int)section->Get_int("dos mem limit"); + + // for PC-98: When accessing the floppy through INT 1Bh, when enabled, run through a waiting loop to make sure + // the timer count is not too high on exit (Ys II) + enable_fdc_timer_hack = pc98_section->Get_bool("pc-98 int 1b fdc timer wait"); + + { + std::string s = section->Get_string("unhandled irq handler"); + + if (s == "simple") + unhandled_irq_method = UNHANDLED_IRQ_SIMPLE; + else if (s == "cooperative_2nd") + unhandled_irq_method = UNHANDLED_IRQ_COOPERATIVE_2ND; + // pick default + else if (IS_PC98_ARCH) + unhandled_irq_method = UNHANDLED_IRQ_COOPERATIVE_2ND; + else + unhandled_irq_method = UNHANDLED_IRQ_SIMPLE; + } + } + + if (IS_PC98_ARCH) { + /* Keyboard translation tables, must exist at segment 0xFD80:0x0E00 because PC-98 MS-DOS assumes it (it writes 0x522 itself on boot) */ + /* The table must be placed back far enough so that (0x60 * 10) bytes do not overlap the lookup table at 0xE28 */ + BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION = PhysToReal416(ROMBIOS_GetMemory(0x60 * 10,"Keyboard translation tables",/*align*/1,0xFD800+0xA13)); + if (ROMBIOS_GetMemory(0x2 * 10,"Keyboard translation shift tables",/*align*/1,0xFD800+0xE28) == (~0u)) E_Exit("Failed to allocate shift tables");//reserve it + BIOSKEY_PC98_Write_Tables(); + } + + /* pick locations */ + /* IBM PC mode: See [https://github.com/skiselev/8088_bios/blob/master/bios.asm]. Some values also provided by Allofich. + * PCJr: The BIOS jumps to an address much lower in segment F000, low enough that the second byte of the offset is zero. + * "Pitstop II" uses that as a method to test for PCjr [https://www.vogons.org/viewtopic.php?t=50417] */ + if (machine == MCH_PCJR) + BIOS_DEFAULT_RESET_LOCATION = PhysToReal416(ROMBIOS_GetMemory(3/*JMP NEAR*/,"BIOS default reset location (JMP, PCjr style)",/*align*/1,0xF0043)); + else if (IS_PC98_ARCH) + BIOS_DEFAULT_RESET_LOCATION = PhysToReal416(ROMBIOS_GetMemory(5/*JMP NEAR*/,"BIOS default reset location (JMP, PC-98)",/*align*/1,IS_PC98_ARCH ? 0 : 0xFE05B)); + else + BIOS_DEFAULT_RESET_LOCATION = PhysToReal416(ROMBIOS_GetMemory(3/*JMP NEAR*/,"BIOS default reset location (JMP)",/*align*/1,IS_PC98_ARCH ? 0 : 0xFE05B)); + + BIOS_DEFAULT_RESET_CODE_LOCATION = PhysToReal416(ROMBIOS_GetMemory(64/*several callbacks*/,"BIOS default reset location (CODE)",/*align*/1)); + BIOS_DEFAULT_HANDLER_LOCATION = PhysToReal416(ROMBIOS_GetMemory(1/*IRET*/,"BIOS default handler location",/*align*/1,IS_PC98_ARCH ? 0 : 0xFFF53)); + BIOS_DEFAULT_INT5_LOCATION = PhysToReal416(ROMBIOS_GetMemory(1/*IRET*/, "BIOS default INT5 location",/*align*/1,IS_PC98_ARCH ? 0 : 0xFFF54)); + BIOS_DEFAULT_IRQ0_LOCATION = PhysToReal416(ROMBIOS_GetMemory(0x13/*see callback.cpp for IRQ0*/,"BIOS default IRQ0 location",/*align*/1,IS_PC98_ARCH ? 0 : 0xFFEA5)); + BIOS_DEFAULT_IRQ1_LOCATION = PhysToReal416(ROMBIOS_GetMemory(0x20/*see callback.cpp for IRQ1*/,"BIOS default IRQ1 location",/*align*/1,IS_PC98_ARCH ? 0 : 0xFE987)); + BIOS_DEFAULT_IRQ07_DEF_LOCATION = PhysToReal416(ROMBIOS_GetMemory(7/*see callback.cpp for EOI_PIC1*/,"BIOS default IRQ2-7 location",/*align*/1,IS_PC98_ARCH ? 0 : 0xFFF55)); + BIOS_DEFAULT_IRQ815_DEF_LOCATION = PhysToReal416(ROMBIOS_GetMemory(9/*see callback.cpp for EOI_PIC1*/,"BIOS default IRQ8-15 location",/*align*/1,IS_PC98_ARCH ? 0 : 0xFE880)); + + write_FFFF_signature(); + if (IS_PC98_ARCH) + write_FFFF_PC98_signature(); + + /* Setup all the interrupt handlers the bios controls */ + + /* INT 8 Clock IRQ Handler */ + call_irq0=CALLBACK_Allocate(); + if (IS_PC98_ARCH) + CALLBACK_Setup(call_irq0,INT8_PC98_Handler,CB_IRET,Real2Phys(BIOS_DEFAULT_IRQ0_LOCATION),"IRQ 0 Clock"); + else + CALLBACK_Setup(call_irq0,INT8_Handler,CB_IRQ0,Real2Phys(BIOS_DEFAULT_IRQ0_LOCATION),"IRQ 0 Clock"); + + /* INT 11 Get equipment list */ + callback[1].Install(&INT11_Handler,CB_IRET,"Int 11 Equipment"); + + /* INT 12 Memory Size default at 640 kb */ + callback[2].Install(&INT12_Handler,CB_IRET,"Int 12 Memory"); + + mlimit = 640; + t_conv = MEM_TotalPages() << 2; /* convert 4096/byte pages -> 1024/byte KB units */ + /* NTS: Tandy machines, because top of memory shares video memory, need more than 640KB of memory to present 640KB of memory + * to DOS. In that case, apparently, that gives 640KB to DOS and 128KB to video memory. 640KB of memory in a Tandy system + * means 624KB for DOS and 16KB for Tandy video memory... except that 16-color higher Tandy modes need 32KB of video + * memory, so the top of memory has to be adjusted or handled carefully to avoid corruption of the MCB chain. In the 768KB + * case video memory is high enough not to conflict with DOS conventional memory at all. + * + * Might and Magic III Isles of Terra will crash in Tandy graphics modes unless we emulate the 768KB Tandy case because the + * game doesn't appear to correctly handle the conflict between the DOS MCB chain and video memory (causing an MCB corruption + * error) and it appears to make some effort to allocate memory blocks from top of memory which makes the problem worse. + * + * I am fairly certain that there is nothing on Tandy systems to occupy A0000-AFFFFh. Unless of course you install EGA/VGA + * hardware in such a system. */ + if (allow_more_than_640kb) { + if (machine == MCH_CGA) + mlimit = 736; /* 640KB + 96KB = 0x00000-0xB7FFF */ + else if (machine == MCH_HERC || machine == MCH_MDA) + mlimit = 704; /* 640KB + 64KB = 0x00000-0xAFFFF */ + else if (machine == MCH_TANDY) + mlimit = 768; /* 640KB + 128KB = 0x00000-0xBFFFF */ + + /* NTS: Yes, this means Tandy video memory at B8000 overlaps conventional memory, but the + * top of conventional memory is stolen as video memory anyway. Tandy documentation + * suggests that memory is only installed in multiples of 128KB so there doesn't seem + * to be a way to install only 704KB for example. */ + + if (t_conv > mlimit) t_conv = mlimit; + if (t_conv > 640 && machine != MCH_TANDY) { + /* because the memory emulation has already set things up + * HOWEVER Tandy emulation has already properly mapped A0000-BFFFF so don't mess with it */ + bool MEM_map_RAM_physmem(Bitu start,Bitu end); + MEM_map_RAM_physmem(0xA0000,(t_conv<<10)-1); + memset(GetMemBase()+(640<<10),0,(t_conv-640)<<10); + } + } + else { + if (t_conv > 640) t_conv = 640; + } + + /* allow user to further limit the available memory below 1MB */ + if (dos_conventional_limit != 0 && t_conv > dos_conventional_limit) + t_conv = dos_conventional_limit; + + // TODO: Allow dosbox-x.conf to specify an option to add an EBDA (Extended BIOS Data Area) + // at the top of the DOS conventional limit, which we then reduce further to hold + // it. Most BIOSes past 1992 or so allocate an EBDA. + + /* if requested to emulate an ISA memory hole at 512KB, further limit the memory */ + if (isa_memory_hole_512kb && t_conv > 512) t_conv = 512; + t_conv_real = t_conv; + + if (machine == MCH_TANDY) { + /* Tandy models are said to have started with 256KB. We'll allow down to 64KB */ + if (t_conv < 64) + t_conv = 64; + if (t_conv < 256) + LOG(LOG_MISC,LOG_WARN)("Warning: Tandy with less than 256KB is unusual"); + + /* The shared video/system memory design, and the placement of video RAM at top + * of conventional memory, means that if conventional memory is less than 640KB + * and not a multiple of 32KB, things can break. */ + if ((t_conv % 32) != 0) + LOG(LOG_MISC,LOG_WARN)("Warning: Conventional memory size %uKB in Tandy mode is not a multiple of 32KB, games may not display graphics correctly",(unsigned int)t_conv); + } + else if (machine == MCH_PCJR) { + if (t_conv < 64) + t_conv = 64; + + /* PCjr also shares video/system memory, but the video memory can only exist + * below 128KB because IBM intended it to only carry 64KB or 128KB on the + * motherboard. Any memory past 128KB is likely provided by addons (sidecars) */ + if (t_conv < 128 && (t_conv % 32) != 0) + LOG(LOG_MISC,LOG_WARN)("Warning: Conventional memory size %uKB in PCjr mode is not a multiple of 32KB, games may not display graphics correctly",(unsigned int)t_conv); + } + + /* and then unmap RAM between t_conv and mlimit */ + if (t_conv < mlimit) { + Bitu start = (t_conv+3)/4; /* start = 1KB to page round up */ + Bitu end = mlimit/4; /* end = 1KB to page round down */ + if (start < end) MEM_ResetPageHandler_Unmapped(start,end-start); + } + + if (isa_memory_hole_15mb) MEM_ResetPageHandler_Unmapped(0xf00,0x100); /* 0xF00000-0xFFFFFF */ + + if (machine == MCH_TANDY) { + /* Take 16KB off the top for video RAM. + * This value never changes after boot, even if you then use the 16-color modes which then moves + * the video RAM region down 16KB to make a 32KB region. Neither MS-DOS nor INT 10h change this + * top of memory value. I hope your DOS game doesn't put any important structures or MCBs above + * the 32KB below top of memory, because it WILL get overwritten with graphics! + * + * This is apparently correct behavior, and DOSBox SVN and other forks follow it too. + * + * See also: [https://www.vogons.org/viewtopic.php?p=948879#p948879] + * Issue: [https://github.com/joncampbell123/dosbox-x/issues/2380] + * + * Mickeys Space Adventure assumes it can find video RAM by calling INT 12h, subtracting 16KB, and + * converting KB to paragraphs. Note that it calls INT 12h while in CGA mode, and subtracts 16KB + * knowing video memory will extend downward 16KB into a 32KB region when it switches into the + * Tandy/PCjr 16-color mode. */ + /* Tandy systems can present full 640KB of conventional memory with 128KB for video memory if 768KB + * is installed! */ + if (t_conv > (640+32)) { + if (t_conv > 640) t_conv = 640; + if (mlimit > 640) mlimit = 640; + + /* Video memory takes the rest */ + tandy_128kbase = 0xA0000; + } + else { + if (t_conv > 640) t_conv = 640; + if (mlimit > 640) mlimit = 640; + t_conv -= 16; + mlimit -= 16; + + /* if 32KB would cross a 128KB boundary, then adjust again or else + * things will horribly break between text and graphics modes */ + if ((t_conv % 128) < 16) + t_conv -= 16; + + /* Our choice also affects which 128KB bank within which the 16KB banks + * select what system memory becomes video memory. + * + * FIXME: Is this controlled by the "extended ram page register?" How? */ + tandy_128kbase = ((t_conv - 16u) << 10u) & 0xE0000; /* byte offset = (KB - 16) * 64, round down to multiple of 128KB */ + } + LOG(LOG_MISC,LOG_DEBUG)("BIOS: setting tandy 128KB base region to %lxh",(unsigned long)tandy_128kbase); + } + else if (machine == MCH_PCJR) { + /* PCjr reserves the top of its internal 128KB of RAM for video RAM. + * Sidecars can extend it past 128KB but it requires DOS drivers or TSRs + * to modify the MCB chain so that it a) marks the video memory as reserved + * and b) creates a new free region above the video RAM region. + * + * Therefore, only subtract 16KB if 128KB or less is configured for this machine. + * + * Note this is not speculation, it's there in the PCjr BIOS source code: + * [http://hackipedia.org/browse.cgi/Computer/Platform/PC%2c%20IBM%20compatible/Video/PCjr/IBM%20Personal%20Computer%20PCjr%20Hardware%20Reference%20Library%20Technical%20Reference%20%281983%2d11%29%20First%20Edition%20Revised%2epdf] ROM BIOS source code page A-16 */ + if (t_conv <= (128+16)) { + if (t_conv > 128) t_conv = 128; + t_conv -= 16; + } + if (mlimit <= (128+16)) { + if (mlimit > 128) mlimit = 128; + mlimit -= 16; + } + } + + /* INT 4B. Now we can safely signal error instead of printing "Invalid interrupt 4B" + * whenever we install Windows 95. Note that Windows 95 would call INT 4Bh because + * that is where the Virtual DMA API lies in relation to EMM386.EXE */ + int4b_callback.Install(&INT4B_Handler,CB_IRET,"INT 4B"); + + /* INT 14 Serial Ports */ + callback[3].Install(&INT14_Handler,CB_IRET_STI,"Int 14 COM-port"); + + /* INT 15 Misc Calls */ + callback[4].Install(&INT15_Handler,CB_IRET,"Int 15 Bios"); + + /* INT 17 Printer Routines */ + callback[5].Install(&INT17_Handler,CB_IRET_STI,"Int 17 Printer"); + + /* INT 1A TIME and some other functions */ + callback[6].Install(&INT1A_Handler,CB_IRET_STI,"Int 1a Time"); + + /* INT 1C System Timer tick called from INT 8 */ + callback[7].Install(&INT1C_Handler,CB_IRET,"Int 1c Timer"); + + /* IRQ 8 RTC Handler */ + callback[8].Install(&INT70_Handler,CB_IRET,"Int 70 RTC"); + + /* Irq 9 rerouted to irq 2 */ + callback[9].Install(NULL,CB_IRQ9,"irq 9 bios"); + + // INT 19h: Boot function + callback[10].Install(&INT19_Handler,CB_IRET,"int 19"); + + // INT 1Bh: IBM PC CTRL+Break + callback[19].Install(&INT1B_Break_Handler,CB_IRET,"BIOS 1Bh stock CTRL+BREAK handler"); + + // INT 76h: IDE IRQ 14 + // This is just a dummy IRQ handler to prevent crashes when + // IDE emulation fires the IRQ and OS's like Win95 expect + // the BIOS to handle the interrupt. + // FIXME: Shouldn't the IRQ send an ACK to the PIC as well?!? + callback[11].Install(&IRQ14_Dummy,CB_IRET_EOI_PIC2,"irq 14 ide"); + + // INT 77h: IDE IRQ 15 + // This is just a dummy IRQ handler to prevent crashes when + // IDE emulation fires the IRQ and OS's like Win95 expect + // the BIOS to handle the interrupt. + // FIXME: Shouldn't the IRQ send an ACK to the PIC as well?!? + callback[12].Install(&IRQ15_Dummy,CB_IRET_EOI_PIC2,"irq 15 ide"); + + // INT 0Eh: IDE IRQ 6 + callback[13].Install(&IRQ15_Dummy,CB_IRET_EOI_PIC1,"irq 6 floppy"); + + // INT 18h: Enter BASIC + // Non-IBM BIOS would display "NO ROM BASIC" here + callback[15].Install(&INT18_Handler,CB_IRET,"int 18"); + + if(IS_J3100) { + callback[16].Install(&INT60_Handler,CB_IRET,"Int 60 Bios"); + callback[16].Set_RealVec(0x60); + + callback[17].Install(&INT6F_Handler,CB_INT6F_ATOK,"Int 6F Bios"); + callback[17].Set_RealVec(0x6f); + } + + init_vm86_fake_io(); + + /* Irq 2-7 */ + call_irq07default=CALLBACK_Allocate(); + + /* Irq 8-15 */ + call_irq815default=CALLBACK_Allocate(); + + /* BIOS boot stages */ + cb_bios_post.Install(&cb_bios_post__func,CB_RETF,"BIOS POST"); + cb_bios_scan_video_bios.Install(&cb_bios_scan_video_bios__func,CB_RETF,"BIOS Scan Video BIOS"); + cb_bios_adapter_rom_scan.Install(&cb_bios_adapter_rom_scan__func,CB_RETF,"BIOS Adapter ROM scan"); + cb_bios_startup_screen.Install(&cb_bios_startup_screen__func,CB_RETF,"BIOS Startup screen"); + cb_bios_boot.Install(&cb_bios_boot__func,CB_RETF,"BIOS BOOT"); + cb_bios_bootfail.Install(&cb_bios_bootfail__func,CB_RETF,"BIOS BOOT FAIL"); + + if (IS_PC98_ARCH) { + cb_pc98_rombasic.Install(&cb_pc98_entry__func,CB_RETF,"N88 ROM BASIC"); + } + else { + /* IBM ROM BASIC resides at segment F600:0000 just below the 5150 ROM BIOS. + * MS-DOS 1.x and 2.x BASIC(A).COM jump to specific addresses in the ROM BASIC to do their thing. + * The purpose of these callbacks is to catch those programs and safely halt emulation to + * state that ROM BASIC is not present */ + cb_ibm_basic.Install(&cb_ibm_basic_entry__func,CB_RETF,"IBM ROM BASIC entry"); + } + + // Compatible POST routine location: jump to the callback + { + Bitu wo_fence; + + { + const Bitu wo = Real2Phys(BIOS_DEFAULT_RESET_LOCATION); + if (IS_PC98_ARCH) { + const unsigned int ofs = Real2Phys(BIOS_DEFAULT_RESET_CODE_LOCATION) - 0xF0000u; + phys_writeb(wo+0,0xEA);/*JMP far*/ + phys_writew(wo+1,ofs); + phys_writew(wo+3,0xF000); + } + else { + const unsigned int delta = (Real2Phys(BIOS_DEFAULT_RESET_CODE_LOCATION) - (Real2Phys(BIOS_DEFAULT_RESET_LOCATION) + 3u)) & 0xFFFFu; + const Bitu wo = Real2Phys(BIOS_DEFAULT_RESET_LOCATION); + phys_writeb(wo+0,0xE9);/*JMP near*/ + phys_writew(wo+1,delta); + } + } + + Bitu wo = Real2Phys(BIOS_DEFAULT_RESET_CODE_LOCATION); + wo_fence = wo + 64; + + // POST + phys_writeb(wo+0x00,(uint8_t)0xFE); //GRP 4 + phys_writeb(wo+0x01,(uint8_t)0x38); //Extra Callback instruction + phys_writew(wo+0x02,(uint16_t)cb_bios_post.Get_callback()); //The immediate word + wo += 4; + + // video bios scan + phys_writeb(wo+0x00,(uint8_t)0xFE); //GRP 4 + phys_writeb(wo+0x01,(uint8_t)0x38); //Extra Callback instruction + phys_writew(wo+0x02,(uint16_t)cb_bios_scan_video_bios.Get_callback()); //The immediate word + wo += 4; + + // adapter ROM scan + phys_writeb(wo+0x00,(uint8_t)0xFE); //GRP 4 + phys_writeb(wo+0x01,(uint8_t)0x38); //Extra Callback instruction + phys_writew(wo+0x02,(uint16_t)cb_bios_adapter_rom_scan.Get_callback()); //The immediate word + wo += 4; + + // startup screen + phys_writeb(wo+0x00,(uint8_t)0xFE); //GRP 4 + phys_writeb(wo+0x01,(uint8_t)0x38); //Extra Callback instruction + phys_writew(wo+0x02,(uint16_t)cb_bios_startup_screen.Get_callback()); //The immediate word + wo += 4; + + // user boot hook + if (bios_user_boot_hook != 0) { + phys_writeb(wo+0x00,0x9C); //PUSHF + phys_writeb(wo+0x01,0x9A); //CALL FAR + phys_writew(wo+0x02,0x0000); //seg:0 + phys_writew(wo+0x04,bios_user_boot_hook>>4); + wo += 6; + } + + // boot + BIOS_boot_code_offset = wo; + phys_writeb(wo+0x00,(uint8_t)0xFE); //GRP 4 + phys_writeb(wo+0x01,(uint8_t)0x38); //Extra Callback instruction + phys_writew(wo+0x02,(uint16_t)cb_bios_boot.Get_callback()); //The immediate word + wo += 4; + + // boot fail + BIOS_bootfail_code_offset = wo; + phys_writeb(wo+0x00,(uint8_t)0xFE); //GRP 4 + phys_writeb(wo+0x01,(uint8_t)0x38); //Extra Callback instruction + phys_writew(wo+0x02,(uint16_t)cb_bios_bootfail.Get_callback()); //The immediate word + wo += 4; + + /* fence */ + phys_writeb(wo++,0xEB); // JMP $-2 + phys_writeb(wo++,0xFE); + + if (wo > wo_fence) E_Exit("BIOS boot callback overrun"); + + if (IS_PC98_ARCH) { + /* Boot disks that run N88 basic, stopgap */ + PhysPt bo = 0xE8002; // E800:0002 + + ROMBIOS_GetMemory(6,"N88 ROM BASIC entry point",/*align*/1,bo); + + phys_writeb(bo+0x00,(uint8_t)0xFE); //GRP 4 + phys_writeb(bo+0x01,(uint8_t)0x38); //Extra Callback instruction + phys_writew(bo+0x02,(uint16_t)cb_pc98_rombasic.Get_callback()); //The immediate word + + phys_writeb(bo+0x04,0xEB); // JMP $-2 + phys_writeb(bo+0x05,0xFE); + + // On careful examination of BIOS.ROM, there's a JMP instruction at E800:0000 as well. + // I don't have any test cases that jump there, but add a JMP forward just in case. + bo = 0xE8000; + phys_writeb(bo+0x00,(uint8_t)0xEB); // JMP $+2 (to next instruction) + phys_writeb(bo+0x01,(uint8_t)0x00); + + /* "Nut Berry" expects a 8-byte lookup table for [AL&7] -> 1 << (AL&7) at 0xFD80:0x0E3C so it's + * custom keyboard interrupt handler can update the keyboard status bitmap in the BIOS data area. + * I don't know if the game even uses it. On a BIOS.ROM image I have, and on real hardware, there + * is clearly that table but at slightly different addresses (One PC-9821 laptop has it at + * 0xFD80:0x0E45) which means whether the game uses it or not the bitmap may have random bits set + * when you exit to DOS. + * + * Assuming no other game does this, this fixed address should be fine. + * + * NOTE: After disassembling the IRQ1 handler on a real PC-9821 laptop, I noticed this game's + * custom ISR bears a strong resemblance to it. In fact, you might say it's an exact instruction + * for instruction copy of the ISR, except that the table addresses in ROM are slightly different. + * Ha. Theoretically then, that means we could also get this game to work fully properly by patching + * it not to hook the keyboard interrupt at all! */ + for (unsigned int i=0;i < 8;i++) phys_writeb(0xFD800+0xE3C+i,1u << i); + + /* "Nut Berry" also assumes shift state table offsets (for all 16 possible combinations) exist + * at 0xFD80:0x0E28. Once again, this means it will not work properly on anything other than the dev's + * machine because on a real PC-9821 laptop used for testing, the table offset is slightly different + * (0xE31 instead of 0xE28). The table mentioned here is used to update the 0x522 offset WORD in the + * BIOS data area to reflect the translation table in effect based on the shift key status, so if you + * misread the table you end up pointing it at junk and then keyboard input doesn't work anymore. */ + // NTS: On a real PC-9821 laptop, the table is apparently 10 entries long. If BDA byte 0x53A is less than + // 8 then it's just a simple lookup. If BDA byte 0x53A has bit 4 set, then use the 8th entry, and + // if bit 4 and 3 are set, use the 9th entry. + for (unsigned int i=0;i < 10;i++) phys_writew(0xFD800+0xE28+(i*2),(unsigned int)(Real2Phys(BIOS_PC98_KEYBOARD_TRANSLATION_LOCATION) - 0xFD800) + (i * 0x60)); + } + else { + if (ibm_rom_basic_size == 0) { + /* IBM MS-DOS 1.x/2.x BASIC and BASICA, stopgap */ + PhysPt bo; + + bo = 0xF6000+0x2DB0; // F600:2DB0 + + ROMBIOS_GetMemory(6,"IBM ROM BASIC entry point",/*align*/1,bo); + + phys_writeb(bo+0x00,(uint8_t)0xFE); //GRP 4 + phys_writeb(bo+0x01,(uint8_t)0x38); //Extra Callback instruction + phys_writew(bo+0x02,(uint16_t)cb_ibm_basic.Get_callback()); //The immediate word + + phys_writeb(bo+0x04,0xEB); // JMP $-2 + phys_writeb(bo+0x05,0xFE); + + bo = 0xF6000+0x4C79; // F600:4C79 + + ROMBIOS_GetMemory(6,"IBM ROM BASIC entry point",/*align*/1,bo); + + phys_writeb(bo+0x00,(uint8_t)0xFE); //GRP 4 + phys_writeb(bo+0x01,(uint8_t)0x38); //Extra Callback instruction + phys_writew(bo+0x02,(uint16_t)cb_ibm_basic.Get_callback()); //The immediate word + + phys_writeb(bo+0x04,0xEB); // JMP $-2 + phys_writeb(bo+0x05,0xFE); + } + } + + if (IS_PC98_ARCH && enable_pc98_copyright_string) { + size_t i=0; + + ROMBIOS_GetMemory(pc98_copyright_str.length()+1,"NEC PC-98 copyright string",/*align*/1,0xE8000 + 0x0DD8); + + for (;i < pc98_copyright_str.length();i++) + phys_writeb(0xE8000 + 0x0DD8 + (PhysPt)i,(uint8_t)pc98_copyright_str[i]); + + phys_writeb(0xE8000 + 0x0DD8 + (PhysPt)i,0); + + ROMBIOS_GetMemory(sizeof(pc98_epson_check_2),"NEC PC-98 Epson check data #2",/*align*/1,0xF5200 + 0x018E); + + for (i=0;i < sizeof(pc98_epson_check_2);i++) + phys_writeb(0xF5200 + 0x018E + (PhysPt)i,(uint8_t)pc98_epson_check_2[i]); + } + } + } + ~BIOS(){ + /* snap the CPU back to real mode. this code thinks in terms of 16-bit real mode + * and if allowed to do its thing in a 32-bit guest OS like WinNT, will trigger + * a page fault. */ + CPU_Snap_Back_To_Real_Mode(); + + if (acpi_iocallout != IO_Callout_t_none) { + IO_FreeCallout(acpi_iocallout); + acpi_iocallout = IO_Callout_t_none; + } + + if (BOCHS_PORT_E9) { + delete BOCHS_PORT_E9; + BOCHS_PORT_E9=NULL; + } + if (ISAPNP_PNP_ADDRESS_PORT) { + delete ISAPNP_PNP_ADDRESS_PORT; + ISAPNP_PNP_ADDRESS_PORT=NULL; + } + if (ISAPNP_PNP_DATA_PORT) { + delete ISAPNP_PNP_DATA_PORT; + ISAPNP_PNP_DATA_PORT=NULL; + } + if (ISAPNP_PNP_READ_PORT) { + delete ISAPNP_PNP_READ_PORT; + ISAPNP_PNP_READ_PORT=NULL; + } + if (isapnpigdevice) { + /* ISA PnP will auto-free it */ + isapnpigdevice=NULL; + } + + if (dosbox_int_iocallout != IO_Callout_t_none) { + IO_FreeCallout(dosbox_int_iocallout); + dosbox_int_iocallout = IO_Callout_t_none; + } + + /* abort DAC playing */ + if (tandy_sb.port) { + IO_Write(tandy_sb.port+0xcu,0xd3u); + IO_Write(tandy_sb.port+0xcu,0xd0u); + } + real_writeb(0x40,0xd4,0x00); + if (tandy_DAC_callback[0]) { + uint32_t orig_vector=real_readd(0x40,0xd6); + if (orig_vector==tandy_DAC_callback[0]->Get_RealPointer()) { + /* set IRQ vector to old value */ + uint8_t tandy_irq = 7; + if (tandy_sb.port) tandy_irq = tandy_sb.irq; + else if (tandy_dac.port) tandy_irq = tandy_dac.irq; + uint8_t tandy_irq_vector = tandy_irq; + if (tandy_irq_vector<8) tandy_irq_vector += 8; + else tandy_irq_vector += (0x70-8); + + RealSetVec(tandy_irq_vector,real_readd(0x40,0xd6)); + real_writed(0x40,0xd6,0x00000000); + } + delete tandy_DAC_callback[0]; + delete tandy_DAC_callback[1]; + tandy_DAC_callback[0]=NULL; + tandy_DAC_callback[1]=NULL; + } + + /* encourage the callback objects to uninstall HERE while we're in real mode, NOT during the + * destructor stage where we're back in protected mode */ + for (unsigned int i=0;i < callback_count;i++) callback[i].Uninstall(); + + /* assume these were allocated */ + CALLBACK_DeAllocate(call_irq0); + CALLBACK_DeAllocate(call_irq07default); + CALLBACK_DeAllocate(call_irq815default); + + /* done */ + CPU_Snap_Back_Restore(); + } +}; + +void BIOS_Enter_Boot_Phase(void) { + /* direct CS:IP right to the instruction that leads to the boot process */ + /* note that since it's a callback instruction it doesn't really matter + * what CS:IP is as long as it points to the instruction */ + reg_eip = BIOS_boot_code_offset & 0xFUL; + CPU_SetSegGeneral(cs, BIOS_boot_code_offset >> 4UL); +} + +void BIOS_SetCOMPort(Bitu port, uint16_t baseaddr) { + switch(port) { + case 0: + mem_writew(BIOS_BASE_ADDRESS_COM1,baseaddr); + mem_writeb(BIOS_COM1_TIMEOUT, 10); // FIXME: Right?? + break; + case 1: + mem_writew(BIOS_BASE_ADDRESS_COM2,baseaddr); + mem_writeb(BIOS_COM2_TIMEOUT, 10); // FIXME: Right?? + break; + case 2: + mem_writew(BIOS_BASE_ADDRESS_COM3,baseaddr); + mem_writeb(BIOS_COM3_TIMEOUT, 10); // FIXME: Right?? + break; + case 3: + mem_writew(BIOS_BASE_ADDRESS_COM4,baseaddr); + mem_writeb(BIOS_COM4_TIMEOUT, 10); // FIXME: Right?? + break; + } +} + +void BIOS_SetLPTPort(Bitu port, uint16_t baseaddr) { + switch(port) { + case 0: + mem_writew(BIOS_ADDRESS_LPT1,baseaddr); + mem_writeb(BIOS_LPT1_TIMEOUT, 10); + break; + case 1: + mem_writew(BIOS_ADDRESS_LPT2,baseaddr); + mem_writeb(BIOS_LPT2_TIMEOUT, 10); + break; + case 2: + mem_writew(BIOS_ADDRESS_LPT3,baseaddr); + mem_writeb(BIOS_LPT3_TIMEOUT, 10); + break; + } +} + +void BIOS_PnP_ComPortRegister(Bitu port,Bitu irq) { + /* add to PnP BIOS */ + if (ISAPNPBIOS) { + unsigned char tmp[256]; + unsigned int i; + + /* register serial ports */ + const unsigned char h1[9] = { + ISAPNP_SYSDEV_HEADER( + ISAPNP_ID('P','N','P',0x0,0x5,0x0,0x1), /* PNP0501 16550A-compatible COM port */ + ISAPNP_TYPE(0x07,0x00,0x02), /* type: RS-232 communications device, 16550-compatible */ + 0x0001 | 0x0002) + }; + + i = 0; + memcpy(tmp+i,h1,9); i += 9; /* can't disable, can't configure */ + /*----------allocated--------*/ + tmp[i+0] = (8 << 3) | 7; /* IO resource */ + tmp[i+1] = 0x01; /* 16-bit decode */ + host_writew(tmp+i+2,port); /* min */ + host_writew(tmp+i+4,port); /* max */ + tmp[i+6] = 0x10; /* align */ + tmp[i+7] = 0x08; /* length */ + i += 7+1; + + if (irq > 0) { + tmp[i+0] = (4 << 3) | 3; /* IRQ resource */ + host_writew(tmp+i+1,1 << irq); + tmp[i+3] = 0x09; /* HTL=1 LTL=1 */ + i += 3+1; + } + + tmp[i+0] = 0x79; /* END TAG */ + tmp[i+1] = 0x00; + i += 2; + /*-------------possible-----------*/ + tmp[i+0] = 0x79; /* END TAG */ + tmp[i+1] = 0x00; + i += 2; + /*-------------compatible---------*/ + tmp[i+0] = 0x79; /* END TAG */ + tmp[i+1] = 0x00; + i += 2; + + if (!ISAPNP_RegisterSysDev(tmp,i)) { + //LOG_MSG("ISAPNP register failed\n"); + } + } +} + +static BIOS* test = NULL; + +void BIOS_Destroy(Section* /*sec*/){ + ROMBIOS_DumpMemory(); + ISA_PNP_FreeAllDevs(); + if (test != NULL) { + delete test; + test = NULL; + } + + if (INT13_ElTorito_cdrom) { + INT13_ElTorito_cdrom->Release(); + INT13_ElTorito_cdrom = NULL; + } +} + +void BIOS_OnPowerOn(Section* sec) { + (void)sec;//UNUSED + if (test) delete test; + test = new BIOS(control->GetSection("joystick")); +} + +void swapInNextDisk(bool pressed); +void swapInNextCD(bool pressed); + +void INT10_OnResetComplete(); +void CALLBACK_DeAllocate(Bitu in); + +void MOUSE_Unsetup_DOS(void); +void MOUSE_Unsetup_BIOS(void); + +void BIOS_OnResetComplete(Section *x) { + (void)x;//UNUSED + INT10_OnResetComplete(); + + if (IS_PC98_ARCH) { + void PC98_BIOS_Bank_Switch_Reset(void); + PC98_BIOS_Bank_Switch_Reset(); + } + + if (biosConfigSeg != 0u) { + ROMBIOS_FreeMemory((Bitu)(biosConfigSeg << 4u)); /* remember it was alloc'd paragraph aligned, then saved >> 4 */ + biosConfigSeg = 0u; + } + + if (INT13_ElTorito_cdrom) { + INT13_ElTorito_cdrom->Release(); + INT13_ElTorito_cdrom = NULL; + } + + call_pnp_rp = 0; + if (call_pnp_r != ~0UL) { + CALLBACK_DeAllocate(call_pnp_r); + call_pnp_r = ~0UL; + } + + call_pnp_pp = 0; + if (call_pnp_p != ~0UL) { + CALLBACK_DeAllocate(call_pnp_p); + call_pnp_p = ~0UL; + } + + MOUSE_Unsetup_DOS(); + MOUSE_Unsetup_BIOS(); + + ISA_PNP_FreeAllSysNodeDevs(); +} + +void BIOS_Init() { + DOSBoxMenu::item *item; + + LOG(LOG_MISC,LOG_DEBUG)("Initializing BIOS"); + + /* make sure the array is zeroed */ + ISAPNP_SysDevNodeCount = 0; + ISAPNP_SysDevNodeLargest = 0; + for (int i=0;i < MAX_ISA_PNP_SYSDEVNODES;i++) ISAPNP_SysDevNodes[i] = NULL; + + /* make sure CD swap and floppy swap mapper events are available */ + MAPPER_AddHandler(swapInNextDisk,MK_o,MMODHOST,"swapimg","Swap floppy drive",&item); /* Originally "Swap Image" but this version does not swap CDs */ + item->set_text("Swap floppy drive"); + + MAPPER_AddHandler(swapInNextCD,MK_d,MMODHOST,"swapcd","Swap CD drive",&item); /* Variant of "Swap Image" for CDs */ + item->set_text("Swap CD drive"); + + /* NTS: VM_EVENT_BIOS_INIT this callback must be first. */ + AddExitFunction(AddExitFunctionFuncPair(BIOS_Destroy),false); + AddVMEventFunction(VM_EVENT_POWERON,AddVMEventFunctionFuncPair(BIOS_OnPowerOn)); + AddVMEventFunction(VM_EVENT_RESET_END,AddVMEventFunctionFuncPair(BIOS_OnResetComplete)); +} + +void write_ID_version_string() { + Bitu str_id_at,str_ver_at; + size_t str_id_len,str_ver_len; + + /* NTS: We can't move the version and ID strings, it causes programs like MSD.EXE to lose + * track of the "IBM compatible blahblahblah" string. Which means that apparently + * programs looking for this information have the address hardcoded ALTHOUGH + * experiments show you can move the version string around so long as it's + * +1 from a paragraph boundary */ + /* TODO: *DO* allow dynamic relocation however if the dosbox-x.conf indicates that the user + * is not interested in IBM BIOS compatibility. Also, it would be really cool if + * dosbox-x.conf could override these strings and the user could enter custom BIOS + * version and ID strings. Heh heh heh.. :) */ + str_id_at = 0xFE00E; + str_ver_at = 0xFE061; + str_id_len = strlen(bios_type_string)+1; + str_ver_len = strlen(bios_version_string)+1; + if (!IS_PC98_ARCH) { + /* need to mark these strings off-limits so dynamic allocation does not overwrite them */ + ROMBIOS_GetMemory((Bitu)str_id_len+1,"BIOS ID string",1,str_id_at); + ROMBIOS_GetMemory((Bitu)str_ver_len+1,"BIOS version string",1,str_ver_at); + } + if (str_id_at != 0) { + for (size_t i=0;i < str_id_len;i++) phys_writeb(str_id_at+(PhysPt)i,(uint8_t)bios_type_string[i]); + } + if (str_ver_at != 0) { + for (size_t i=0;i < str_ver_len;i++) phys_writeb(str_ver_at+(PhysPt)i,(uint8_t)bios_version_string[i]); + } +} + +void GEN_PowerButton(bool pressed) { + if (!pressed) + return; + + if (PowerManagementEnabledButton()) { + PowerButtonClicks++; + } + else { + LOG(LOG_MISC,LOG_WARN)("Power button: Guest OS is not using power management and is probably ignoring the power button"); + } +} + + +extern uint16_t j3_font_offset; + +/* NTS: Do not use callbacks! This function is called before CALLBACK_Init() */ +void ROMBIOS_Init() { + Section_prop * section=static_cast(control->GetSection("dosbox")); + Bitu oi; + + /* This is GENERIC. Right now it only ties into the APM BIOS emulation. + * In the future, it will also tie into the ACPI emulation. We'll have + * menu items to trigger specific APM/ACPI events of course, but for + * the mapper, we'll try not to confuse the user with APM vs ACPI for + * the same reason PC manufacturers don't have two power buttons for + * each standard on the front. + * + * Note for PC-98 mode: I'm aware that there are mid to late 1990s + * PC-98 laptops that also have a power button to send some kind of + * power off event. If how that works becomes known, it can be tied + * to this mapper shortcut as well. It's obviously not APM since + * the APM standard is tied to the IBM compatible PC world. */ + + // log + LOG(LOG_MISC,LOG_DEBUG)("Initializing ROM BIOS"); + + ibm_rom_basic.clear(); + ibm_rom_basic_size = 0; + + oi = (Bitu)section->Get_int("rom bios minimum size"); /* in KB */ + oi = (oi + 3u) & ~3u; /* round to 4KB page */ + if (oi > 128u) oi = 128u; + if (oi == 0u) { + if (IS_PC98_ARCH) + oi = 96u; // BIOS standard range is E8000-FFFFF + else + oi = 64u; + } + if (oi < 8) oi = 8; /* because of some of DOSBox's fixed ROM structures we can only go down to 8KB */ + rombios_minimum_size = (oi << 10); /* convert to minimum, using size coming downward from 1MB */ + + oi = (Bitu)section->Get_int("rom bios allocation max"); /* in KB */ + oi = (oi + 3u) & ~3u; /* round to 4KB page */ + if (oi > 128u) oi = 128u; + if (oi == 0u) { + if (IS_PC98_ARCH) + oi = 96u; + else + oi = 64u; + } + if (oi < 8u) oi = 8u; /* because of some of DOSBox's fixed ROM structures we can only go down to 8KB */ + oi <<= 10u; + if (oi < rombios_minimum_size) oi = rombios_minimum_size; + rombios_minimum_location = 0x100000ul - oi; /* convert to minimum, using size coming downward from 1MB */ + + LOG(LOG_BIOS,LOG_DEBUG)("ROM BIOS range: 0x%05X-0xFFFFF",(int)rombios_minimum_location); + LOG(LOG_BIOS,LOG_DEBUG)("ROM BIOS range according to minimum size: 0x%05X-0xFFFFF",(int)(0x100000 - rombios_minimum_size)); + + if (IS_PC98_ARCH && rombios_minimum_location > 0xE8000) + LOG(LOG_BIOS,LOG_DEBUG)("Caution: Minimum ROM base higher than E8000 will prevent use of actual PC-98 BIOS image or N88 BASIC"); + + if (!MEM_map_ROM_physmem(rombios_minimum_location,0xFFFFF)) E_Exit("Unable to map ROM region as ROM"); + + /* and the BIOS alias at the top of memory (TODO: what about 486/Pentium emulation where the BIOS at the 4GB top is different + * from the BIOS at the legacy 1MB boundary because of shadowing and/or decompressing from ROM at boot? */ + { + uint64_t top = (uint64_t)1UL << (uint64_t)MEM_get_address_bits4GB(); + if (top >= ((uint64_t)1UL << (uint64_t)21UL)) { /* 2MB or more */ + unsigned long alias_base,alias_end; + + alias_base = (unsigned long)top + (unsigned long)rombios_minimum_location - 0x100000UL; + alias_end = (unsigned long)top - 1UL; + + LOG(LOG_BIOS,LOG_DEBUG)("ROM BIOS also mapping alias to 0x%08lx-0x%08lx",alias_base,alias_end); + if (!MEM_map_ROM_alias_physmem(alias_base,alias_end)) { + void MEM_cut_RAM_up_to(Bitu addr); + + /* it's possible if memory aliasing is set that memsize is too large to make room. + * let memory emulation know where the ROM BIOS starts so it can unmap the RAM pages, + * reduce the memory reported to the OS, and try again... */ + LOG(LOG_BIOS,LOG_DEBUG)("No room for ROM BIOS alias, reducing reported memory and unmapping RAM pages to make room"); + MEM_cut_RAM_up_to(alias_base); + + if (!MEM_map_ROM_alias_physmem(alias_base,alias_end)) + E_Exit("Unable to map ROM region as ROM alias"); + } + } + } + + /* set up allocation */ + rombios_alloc.name = "ROM BIOS"; + rombios_alloc.topDownAlloc = true; + rombios_alloc.initSetRange(rombios_minimum_location,0xFFFF0 - 1); + + if (IS_PC98_ARCH) { + /* TODO: Is this needed? And where? */ + } + else { + /* prevent dynamic allocation from taking reserved fixed addresses above F000:E000 in IBM PC mode. */ + rombios_alloc.setMaxDynamicAllocationAddress(0xFE000 - 1); + } + + if (!IS_PC98_ARCH) { + ibm_rom_basic = section->Get_string("ibm rom basic"); + if (!ibm_rom_basic.empty()) { + void ResolvePath(std::string& in); + ResolvePath(ibm_rom_basic); + struct stat st; + if (stat(ibm_rom_basic.c_str(),&st) == 0 && S_ISREG(st.st_mode) && st.st_size >= (off_t)(32u*1024u) && st.st_size <= (off_t)(64u*1024u) && (st.st_size % 4096) == 0) { + ibm_rom_basic_size = (size_t)st.st_size; + ibm_rom_basic_base = rombios_alloc._max_nonfixed + 1 - st.st_size; + LOG_MSG("Will load IBM ROM BASIC to %05lx-%05lx",(unsigned long)ibm_rom_basic_base,(unsigned long)(ibm_rom_basic_base+ibm_rom_basic_size-1)); + Bitu base = ROMBIOS_GetMemory(ibm_rom_basic_size,"IBM ROM BASIC",1u/*page align*/,ibm_rom_basic_base); + rombios_alloc.setMaxDynamicAllocationAddress(ibm_rom_basic_base - 1); + (void)base; + + FILE *fp = fopen(ibm_rom_basic.c_str(),"rb"); + if (fp != NULL) { + fread(GetMemBase()+ibm_rom_basic_base,ibm_rom_basic_size,1u,fp); + fclose(fp); + } + } + } + } + + write_ID_version_string(); + + if (IS_PC98_ARCH && enable_pc98_copyright_string) { // PC-98 BIOSes have a copyright string at E800:0DD8 + if (ROMBIOS_GetMemory(pc98_copyright_str.length()+1,"PC-98 copyright string",1,0xE8000 + 0x0DD8) == 0) + LOG_MSG("WARNING: Was not able to mark off E800:0DD8 off-limits for PC-98 copyright string"); + if (ROMBIOS_GetMemory(sizeof(pc98_epson_check_2),"PC-98 unknown data / Epson check",1,0xF5200 + 0x018E) == 0) + LOG_MSG("WARNING: Was not able to mark off E800:0DD8 off-limits for PC-98 copyright string"); + } + + /* some structures when enabled are fixed no matter what */ + if (rom_bios_8x8_cga_font && !IS_PC98_ARCH) { + /* line 139, int10_memory.cpp: the 8x8 font at 0xF000:FA6E, first 128 chars. + * allocate this NOW before other things get in the way */ + if (ROMBIOS_GetMemory(128*8,"BIOS 8x8 font (first 128 chars)",1,0xFFA6E) == 0) { + LOG_MSG("WARNING: Was not able to mark off 0xFFA6E off-limits for 8x8 font"); + } + } + + /* PC-98 BIOS vectors appear to reside at segment 0xFD80. This is so common some games + * use it (through INT 1Dh) to detect whether they are running on PC-98 or not (issue #927). + * + * Note that INT 1Dh is one of the few BIOS interrupts not intercepted by PC-98 MS-DOS */ + if (IS_PC98_ARCH) { + if (ROMBIOS_GetMemory(128,"PC-98 INT vector stub segment 0xFD80",1,0xFD800) == 0) { + LOG_MSG("WARNING: Was not able to mark off 0xFD800 off-limits for PC-98 int vector stubs"); + } + } + + /* PC-98 BIOSes have a LIO interface at segment F990 with graphic subroutines for Microsoft BASIC */ + if (IS_PC98_ARCH) { + if (ROMBIOS_GetMemory(256,"PC-98 LIO graphic ROM BIOS library",1,0xF9900) == 0) { + LOG_MSG("WARNING: Was not able to mark off 0xF9900 off-limits for PC-98 LIO graphics library"); + } + } + + /* install the font */ + if (rom_bios_8x8_cga_font) { + for (Bitu i=0;i<128*8;i++) { + phys_writeb(PhysMake(0xf000,0xfa6e)+i,int10_font_08[i]); + } + } + + /* we allow dosbox-x.conf to specify a binary blob to load into ROM BIOS and execute after reset. + * we allow this for both hacker curiosity and automated CPU testing. */ + { + std::string path = section->Get_string("call binary on reset"); + struct stat st; + + if (!path.empty() && stat(path.c_str(),&st) == 0 && S_ISREG(st.st_mode) && st.st_size <= (off_t)(128u*1024u)) { + Bitu base = ROMBIOS_GetMemory((Bitu)st.st_size,"User reset vector binary",16u/*page align*/,0u); + + if (base != 0) { + FILE *fp = fopen(path.c_str(),"rb"); + + if (fp != NULL) { + /* NTS: Make sure memory base != NULL, and that it fits within 1MB. + * memory code allocates a minimum 1MB of memory even if + * guest memory is less than 1MB because ROM BIOS emulation + * depends on it. */ + assert(GetMemBase() != NULL); + assert((base+(Bitu)st.st_size) <= 0x100000ul); + size_t readResult = fread(GetMemBase()+base,(size_t)st.st_size,1u,fp); + fclose(fp); + if (readResult != 1) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in ROMBIOS_Init\n"); + return; + } + + LOG_MSG("User reset vector binary '%s' loaded at 0x%lx",path.c_str(),(unsigned long)base); + bios_user_reset_vector_blob = base; + } + else { + LOG_MSG("WARNING: Unable to open file to load user reset vector binary '%s' into ROM BIOS memory",path.c_str()); + } + } + else { + LOG_MSG("WARNING: Unable to load user reset vector binary '%s' into ROM BIOS memory",path.c_str()); + } + } + } + + /* we allow dosbox-x.conf to specify a binary blob to load into ROM BIOS and execute just before boot. + * we allow this for both hacker curiosity and automated CPU testing. */ + { + std::string path = section->Get_string("call binary on boot"); + struct stat st; + + if (!path.empty() && stat(path.c_str(),&st) == 0 && S_ISREG(st.st_mode) && st.st_size <= (off_t)(128u*1024u)) { + Bitu base = ROMBIOS_GetMemory((Bitu)st.st_size,"User boot hook binary",16u/*page align*/,0u); + + if (base != 0) { + FILE *fp = fopen(path.c_str(),"rb"); + + if (fp != NULL) { + /* NTS: Make sure memory base != NULL, and that it fits within 1MB. + * memory code allocates a minimum 1MB of memory even if + * guest memory is less than 1MB because ROM BIOS emulation + * depends on it. */ + assert(GetMemBase() != NULL); + assert((base+(Bitu)st.st_size) <= 0x100000ul); + size_t readResult = fread(GetMemBase()+base,(size_t)st.st_size,1u,fp); + fclose(fp); + if (readResult != 1) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in ROMBIOS_Init\n"); + return; + } + + LOG_MSG("User boot hook binary '%s' loaded at 0x%lx",path.c_str(),(unsigned long)base); + bios_user_boot_hook = base; + } + else { + LOG_MSG("WARNING: Unable to open file to load user boot hook binary '%s' into ROM BIOS memory",path.c_str()); + } + } + else { + LOG_MSG("WARNING: Unable to load user boot hook binary '%s' into ROM BIOS memory",path.c_str()); + } + } + } + // J-3100's DOS reads 8x16 font data directly from F000:CA00. + if(IS_J3100) { + ROMBIOS_GetMemory(256*16, "J-3100 8x16 font data", 1, 0xf0000 + j3_font_offset); + } +} + +//! \brief Updates the state of a lockable key. +void UpdateKeyWithLed(int nVirtKey, int flagAct, int flagLed); + +bool IsSafeToMemIOOnBehalfOfGuest() +{ + if(cpu.pmode) return false; // protected mode (including virtual 8086 mode): NO + if(dos_kernel_disabled) return false; // guest OS not running under our own DOS kernel: NO + return true; +} + +void BIOS_SynchronizeNumLock() +{ +#if defined(WIN32) + UpdateKeyWithLed(VK_NUMLOCK, BIOS_KEYBOARD_FLAGS1_NUMLOCK_ACTIVE, BIOS_KEYBOARD_LEDS_NUM_LOCK); +#endif +} + +void BIOS_SynchronizeCapsLock() +{ +#if defined(WIN32) + UpdateKeyWithLed(VK_CAPITAL, BIOS_KEYBOARD_FLAGS1_CAPS_LOCK_ACTIVE, BIOS_KEYBOARD_LEDS_CAPS_LOCK); +#endif +} + +void BIOS_SynchronizeScrollLock() +{ +#if defined(WIN32) + UpdateKeyWithLed(VK_SCROLL, BIOS_KEYBOARD_FLAGS1_SCROLL_LOCK_ACTIVE, BIOS_KEYBOARD_LEDS_SCROLL_LOCK); +#endif +} + +void UpdateKeyWithLed(int nVirtKey, int flagAct, int flagLed) +{ +#if defined(WIN32) + + const auto state = GetKeyState(nVirtKey); + + const auto flags1 = BIOS_KEYBOARD_FLAGS1; + const auto flags2 = BIOS_KEYBOARD_LEDS; + + auto flag1 = mem_readb(flags1); + auto flag2 = mem_readb(flags2); + + if (state & 1) + { + flag1 |= flagAct; + flag2 |= flagLed; + } + else + { + flag1 &= ~flagAct; + flag2 &= ~flagLed; + } + + mem_writeb(flags1, flag1); + mem_writeb(flags2, flag2); + +#else + + (void)nVirtKey; + (void)flagAct; + (void)flagLed; + +#endif +} + diff --git a/src/ints/bios_disk.cpp b/src/ints/bios_disk.cpp index 3b2a6cfb336..cca2dc872e8 100644 --- a/src/ints/bios_disk.cpp +++ b/src/ints/bios_disk.cpp @@ -16,3995 +16,4040 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - #include - #include - - #include "dosbox.h" - #include "callback.h" - #include "bios.h" - #include "bios_disk.h" - #include "timer.h" - #include "regs.h" - #include "mem.h" - #include "dos_inc.h" /* for Drives[] */ - #include "../dos/drives.h" - #include "mapper.h" - #include "ide.h" - #include "cpu.h" - - #if defined(_MSC_VER) - # pragma warning(disable:4244) /* const fmath::local::uint64_t to double possible loss of data */ - #endif - +#include +#include + +#include "dosbox.h" +#include "callback.h" +#include "bios.h" +#include "bios_disk.h" +#include "timer.h" +#include "regs.h" +#include "mem.h" +#include "dos_inc.h" /* for Drives[] */ +#include "../dos/drives.h" +#include "mapper.h" +#include "ide.h" +#include "cpu.h" + +#if defined(_MSC_VER) +# pragma warning(disable:4244) /* const fmath::local::uint64_t to double possible loss of data */ +#endif + +#if defined(__linux__) && !defined(__GLIBC__) +// musl libc does not need 64 suffix to work with files > 2 GiB +#define fopen64 fopen +#define fseeko64 fseeko +#define ftello64 ftello +#endif + extern bool _driveUsed; - extern unsigned long freec; - extern const uint8_t freedos_mbr[]; - extern int bootdrive, tryconvertcp; - extern bool int13_disk_change_detect_enable, skipintprog, rsize; - extern bool int13_extensions_enable, bootguest, bootvm, use_quick_reboot; - bool isDBCSCP(), isKanji1_gbk(uint8_t chr), shiftjis_lead_byte(int c), CheckDBCSCP(int32_t codepage); - extern bool CodePageGuestToHostUTF16(uint16_t *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*/); - - #define STATIC_ASSERTM(A,B) static_assertion_##A##_##B - #define STATIC_ASSERTN(A,B) STATIC_ASSERTM(A,B) - #define STATIC_ASSERT(cond) typedef char STATIC_ASSERTN(__LINE__,__COUNTER__)[(cond)?1:-1] - - uint32_t DriveCalculateCRC32(const uint8_t *ptr, size_t len, uint32_t crc) - { - // Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C implementation that balances processor cache usage against speed": http://www.geocities.com/malbrain/ - static const uint32_t s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; - uint32_t crcu32 = ~crc; - while (len--) { uint8_t b = *ptr++; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)]; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)]; } - return ~crcu32; - } - - bool DriveFileIterator(DOS_Drive* drv, void(*func)(const char* path, bool is_dir, uint32_t size, uint16_t date, uint16_t time, uint8_t attr, Bitu data), Bitu data, int timeout) - { - if (!drv) return true; - uint32_t starttick = GetTicks(); - struct Iter - { - static bool ParseDir(DOS_Drive* drv, uint32_t startticks, const std::string& dir, std::vector& dirs, void(*func)(const char* path, bool is_dir, uint32_t size, uint16_t date, uint16_t time, uint8_t attr, Bitu data), Bitu data, uint32_t timeout) - { - size_t dirlen = dir.length(); - if (dirlen + DOS_NAMELENGTH >= DOS_PATHLENGTH) return true; - char full_path[DOS_PATHLENGTH+4]; - if (dirlen) - { - memcpy(full_path, &dir[0], dirlen); - full_path[dirlen++] = '\\'; - } - full_path[dirlen] = '\0'; - - RealPt save_dta = dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - dta.SetupSearch(255, (uint8_t)(0xffff & ~DOS_ATTR_VOLUME), (char*)"*.*"); - for (bool more = drv->FindFirst((char*)dir.c_str(), dta); more; more = drv->FindNext(dta)) - { - if (startticks && timeout > 0 && GetTicks()-startticks > timeout * 1000) { - LOG_MSG("Timeout iterating directories"); - dos.dta(save_dta); - return false; - } - char dta_name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH+1]; uint32_t dta_size, dta_hsize; uint16_t dta_date, dta_time; uint8_t dta_attr; - dta.GetResult(dta_name, lname, dta_size, dta_hsize, dta_date, dta_time, dta_attr); - strcpy(full_path + dirlen, dta_name); - bool is_dir = !!(dta_attr & DOS_ATTR_DIRECTORY); - //if (is_dir) printf("[%s] [%s] %s (size: %u - date: %u - time: %u - attr: %u)\n", (const char*)data, (dta_attr == 8 ? "V" : (is_dir ? "D" : "F")), full_path, dta_size, dta_date, dta_time, dta_attr); - if (dta_name[0] == '.' && dta_name[dta_name[1] == '.' ? 2 : 1] == '\0') continue; - if (is_dir) dirs.emplace_back(full_path); - func(full_path, is_dir, dta_size, dta_date, dta_time, dta_attr, data); - } - dos.dta(save_dta); - return true; - } - }; - std::vector dirs; - dirs.emplace_back(""); - std::string dir; - while (dirs.size()) - { - std::swap(dirs.back(), dir); - dirs.pop_back(); - if (!Iter::ParseDir(drv, starttick, dir.c_str(), dirs, func, data, timeout)) return false; - } - return true; - } - - template struct StringToPointerHashMap - { - StringToPointerHashMap() : len(0), maxlen(0), keys(NULL), vals(NULL) { } - ~StringToPointerHashMap() { free(keys); free(vals); } - - static uint32_t Hash(const char* str, uint32_t str_limit = 0xFFFF, uint32_t hash_init = (uint32_t)0x811c9dc5) - { - for (const char* e = str + str_limit; *str && str != e;) - hash_init = ((hash_init * (uint32_t)0x01000193) ^ (uint32_t)*(str++)); - return hash_init; - } - - TVal* Get(const char* str, uint32_t str_limit = 0xFFFF, uint32_t hash_init = (uint32_t)0x811c9dc5) const - { - if (len == 0) return NULL; - for (uint32_t key0 = Hash(str, str_limit, hash_init), key = (key0 ? key0 : 1), i = key;; i++) - { - if (keys[i &= maxlen] == key) return vals[i]; - if (!keys[i]) return NULL; - } - } - - void Put(const char* str, TVal* val, uint32_t str_limit = 0xFFFF, uint32_t hash_init = (uint32_t)0x811c9dc5) - { - if (len * 2 >= maxlen) Grow(); - for (uint32_t key0 = Hash(str, str_limit, hash_init), key = (key0 ? key0 : 1), i = key;; i++) - { - if (!keys[i &= maxlen]) { len++; keys[i] = key; vals[i] = val; return; } - if (keys[i] == key) { vals[i] = val; return; } - } - } - - bool Remove(const char* str, uint32_t str_limit = 0xFFFF, uint32_t hash_init = (uint32_t)0x811c9dc5) - { - if (len == 0) return false; - for (uint32_t key0 = Hash(str, str_limit, hash_init), key = (key0 ? key0 : 1), i = key;; i++) - { - if (keys[i &= maxlen] == key) - { - keys[i] = 0; - len--; - while ((key = keys[i = (i + 1) & maxlen]) != 0) - { - for (uint32_t j = key;; j++) - { - if (keys[j &= maxlen] == key) break; - if (!keys[j]) { keys[i] = 0; keys[j] = key; vals[j] = vals[i]; break; } - } - } - return true; - } - if (!keys[i]) return false; - } - } - - void Clear() { memset(keys, len = 0, (maxlen + 1) * sizeof(uint32_t)); } - - uint32_t Len() const { return len; } - uint32_t Capacity() const { return (maxlen ? maxlen + 1 : 0); } - TVal* GetAtIndex(uint32_t idx) const { return (keys[idx] ? vals[idx] : NULL); } - - struct Iterator - { - Iterator(StringToPointerHashMap& _map, uint32_t _index) : map(_map), index(_index - 1) { this->operator++(); } - StringToPointerHashMap& map; - uint32_t index; - TVal* operator *() const { return map.vals[index]; } - bool operator ==(const Iterator &other) const { return index == other.index; } - bool operator !=(const Iterator &other) const { return index != other.index; } - Iterator& operator ++() - { - if (!map.maxlen) { index = 0; return *this; } - if (++index > map.maxlen) index = map.maxlen + 1; - while (index <= map.maxlen && !map.keys[index]) index++; - return *this; - } - }; - - Iterator begin() { return Iterator(*this, 0); } - Iterator end() { return Iterator(*this, (maxlen ? maxlen + 1 : 0)); } - - private: - uint32_t len, maxlen, *keys; - TVal** vals; - - void Grow() - { - uint32_t oldMax = maxlen, oldCap = (maxlen ? oldMax + 1 : 0), *oldKeys = keys; - TVal **oldVals = vals; - maxlen = (maxlen ? maxlen * 2 + 1 : 15); - keys = (uint32_t*)calloc(maxlen + 1, sizeof(uint32_t)); - vals = (TVal**)malloc((maxlen + 1) * sizeof(TVal*)); - for (uint32_t i = 0; i != oldCap; i++) - { - if (!oldKeys[i]) continue; - for (uint32_t key = oldKeys[i], j = key;; j++) - { - if (!keys[j &= maxlen]) { keys[j] = key; vals[j] = oldVals[i]; break; } - } - } - free(oldKeys); - free(oldVals); - } - - // not copyable - StringToPointerHashMap(const StringToPointerHashMap&); - StringToPointerHashMap& operator=(const StringToPointerHashMap&); - }; - - #ifdef _MSC_VER - #pragma pack (1) - #endif - struct sector { - uint8_t content[512]; - } GCC_ATTRIBUTE(packed); - - typedef struct { - uint8_t sectors; - uint8_t surfaces; - uint16_t cylinders; - } SASIHDD; - - struct bootstrap { - uint8_t nearjmp[3]; - uint8_t oemname[8]; - uint8_t bytespersector[2]; - uint8_t sectorspercluster; - uint16_t reservedsectors; - uint8_t fatcopies; - uint16_t rootdirentries; - uint16_t totalsectorcount; - uint8_t mediadescriptor; - uint16_t sectorsperfat; - uint16_t sectorspertrack; - uint16_t headcount; - uint32_t hiddensectorcount; - uint32_t totalsecdword; - uint8_t bootcode[474]; - uint8_t magic1; /* 0x55 */ - uint8_t magic2; /* 0xaa */ - } GCC_ATTRIBUTE(packed); - - struct lfndirentry { - uint8_t ord; - uint8_t name1[10]; - uint8_t attrib; - uint8_t type; - uint8_t chksum; - uint8_t name2[12]; - uint16_t loFirstClust; - uint8_t name3[4]; - char* Name(int j) { return (char*)(j < 5 ? name1 + j*2 : j < 11 ? name2 + (j-5)*2 : name3 + (j-11)*2); } - } GCC_ATTRIBUTE(packed); - #ifdef _MSC_VER - #pragma pack () - #endif - - /* .HDI and .FDI header (NP2) */ - #pragma pack(push,1) - typedef struct { - uint8_t dummy[4]; // +0x00 - uint8_t hddtype[4]; // +0x04 - uint8_t headersize[4]; // +0x08 - uint8_t hddsize[4]; // +0x0C - uint8_t sectorsize[4]; // +0x10 - uint8_t sectors[4]; // +0x14 - uint8_t surfaces[4]; // +0x18 - uint8_t cylinders[4]; // +0x1C - } HDIHDR; // =0x20 - - typedef struct { - uint8_t dummy[4]; // +0x00 - uint8_t fddtype[4]; // +0x04 - uint8_t headersize[4]; // +0x08 - uint8_t fddsize[4]; // +0x0C - uint8_t sectorsize[4]; // +0x10 - uint8_t sectors[4]; // +0x14 - uint8_t surfaces[4]; // +0x18 - uint8_t cylinders[4]; // +0x1C - } FDIHDR; // =0x20 - - typedef struct { - char sig[16]; // +0x000 - char comment[0x100]; // +0x010 - UINT8 headersize[4]; // +0x110 - uint8_t prot; // +0x114 - uint8_t nhead; // +0x115 - uint8_t _unknown_[10]; // +0x116 - } NFDHDR; // =0x120 - - typedef struct { - char sig[16]; // +0x000 - char comment[0x100]; // +0x010 - UINT8 headersize[4]; // +0x110 - uint8_t prot; // +0x114 - uint8_t nhead; // +0x115 - uint8_t _unknown_[10]; // +0x116 - uint32_t trackheads[164]; // +0x120 - uint32_t addinfo; // +0x3b0 - uint8_t _unknown2_[12]; // +0x3b4 - } NFDHDRR1; // =0x3c0 - - typedef struct { - uint8_t log_cyl; // +0x0 - uint8_t log_head; // +0x1 - uint8_t log_rec; // +0x2 - uint8_t sec_len_pow2; // +0x3 sz = 128 << len_pow2 - uint8_t flMFM; // +0x4 - uint8_t flDDAM; // +0x5 - uint8_t byStatus; // +0x6 - uint8_t bySTS0; // +0x7 - uint8_t bySTS1; // +0x8 - uint8_t bySTS2; // +0x9 - uint8_t byRetry; // +0xA - uint8_t byPDA; // +0xB - uint8_t _unknown_[4]; // +0xC - } NFDHDR_ENTRY; // =0x10 - - typedef struct { - char szFileID[15]; // 識別ID "T98HDDIMAGE.R0" - char Reserve1[1]; // 予約 - char szComment[0x100]; // イメージコメント(ASCIIz) - uint32_t dwHeadSize; // ヘッダ部のサイズ - uint32_t dwCylinder; // シリンダ数 - uint16_t wHead; // ヘッド数 - uint16_t wSect; // 1トラックあたりのセクタ数 - uint16_t wSectLen; // セクタ長 - char Reserve2[2]; // 予約 - char Reserve3[0xe0]; // 予約 - }NHD_FILE_HEAD,*LP_NHD_FILE_HEAD; - #pragma pack(pop) - - #define STOREINTELDWORD(a, b) *((a)+0) = (uint8_t)((b)); *((a)+1) = (uint8_t)((b)>>8); *((a)+2) = (uint8_t)((b)>>16); *((a)+3) = (uint8_t)((b)>>24) - - STATIC_ASSERT(sizeof(direntry) == sizeof(lfndirentry)); - enum - { - DOS_ATTR_LONG_NAME = (DOS_ATTR_READ_ONLY | DOS_ATTR_HIDDEN | DOS_ATTR_SYSTEM | DOS_ATTR_VOLUME), - DOS_ATTR_LONG_NAME_MASK = (DOS_ATTR_READ_ONLY | DOS_ATTR_HIDDEN | DOS_ATTR_SYSTEM | DOS_ATTR_VOLUME | DOS_ATTR_DIRECTORY | DOS_ATTR_ARCHIVE), - DOS_ATTR_PENDING_SHORT_NAME = 0x80, - }; - - static const uint8_t hdddiskboot[] = { - 0xeb,0x0a,0x90,0x90,0x49,0x50,0x4c,0x31,0x00,0x00,0x00,0x1e, - 0xb8,0x04,0x0a,0xcd,0x18,0xb4,0x16,0xba,0x20,0xe1,0xcd,0x18, - 0xfa,0xfc,0xb8,0x00,0xa0,0x8e,0xc0,0xbe,0x3c,0x00,0x31,0xff, - 0xe8,0x09,0x00,0xbf,0xa0,0x00,0xe8,0x03,0x00,0xf4,0xeb,0xfd, - 0x2e,0xad,0x85,0xc0,0x74,0x05,0xab,0x47,0x47,0xeb,0xf5,0xc3, - 0x04,0x33,0x04,0x4e,0x05,0x4f,0x01,0x3c,0x05,0x49,0x05,0x47, - 0x05,0x23,0x05,0x39,0x05,0x2f,0x05,0x24,0x05,0x61,0x01,0x3c, - 0x05,0x38,0x04,0x4f,0x05,0x55,0x05,0x29,0x01,0x3c,0x05,0x5e, - 0x05,0x43,0x05,0x48,0x04,0x35,0x04,0x6c,0x04,0x46,0x04,0x24, - 0x04,0x5e,0x04,0x3b,0x04,0x73,0x01,0x25,0x00,0x00,0x05,0x47, - 0x05,0x23,0x05,0x39,0x05,0x2f,0x05,0x24,0x05,0x61,0x01,0x3c, - 0x05,0x38,0x04,0x72,0x21,0x5e,0x26,0x7e,0x18,0x65,0x01,0x24, - 0x05,0x6a,0x05,0x3b,0x05,0x43,0x05,0x48,0x04,0x37,0x04,0x46, - 0x12,0x3c,0x04,0x35,0x04,0x24,0x01,0x25,0x00,0x00, - }; - - struct fatFromDOSDrive - { - DOS_Drive* drive; - - enum ffddDefs : uint32_t - { - BYTESPERSECTOR = 512, - HEADCOUNT = 255, // needs to be >128 to fit 4GB into CHS - SECTORSPERTRACK = 63, - SECT_MBR = 0, - SECT_BOOT = 32, - CACHECOUNT = 256, - KEEPOPENCOUNT = 8, - NULL_CURSOR = (uint32_t)-1, - }; - - partTable mbr; - bootstrap bootsec; - sector header; - sector ipl; - sector pt; - SASIHDD sasi; - uint8_t fatSz; - uint8_t fsinfosec[BYTESPERSECTOR]; - uint32_t sectorsPerCluster, codepage = 0; - bool tryconvcp = false, readOnly = false, success = false, tomany = false; - - struct ffddFile { char path[DOS_PATHLENGTH+1]; uint32_t firstSect; }; - std::vector root, dirs; - std::vector files; - std::vector fileAtSector; - std::vector fat; - uint32_t sect_boot_pc98, sect_disk_end, sect_files_end, sect_files_start, sect_dirs_start, sect_root_start, sect_fat2_start, sect_fat1_start; - - struct ffddBuf { uint8_t data[BYTESPERSECTOR]; }; - struct ffddSec { uint32_t cursor = NULL_CURSOR; }; - std::vector diffSectorBufs; - std::vector diffSectors; - std::vector diffFreeCursors; - uint32_t saveEndCursor = 0; - uint8_t cacheSectorData[CACHECOUNT][BYTESPERSECTOR]; - uint32_t cacheSectorNumber[CACHECOUNT]; - DOS_File* openFiles[KEEPOPENCOUNT]; - uint32_t openIndex[KEEPOPENCOUNT]; - uint32_t openCursor = 0; - - ~fatFromDOSDrive() - { - for (DOS_File* df : openFiles) - if (df) { df->Close(); delete df; } - } - - fatFromDOSDrive(DOS_Drive* drv, uint32_t freeMB, int timeout) : drive(drv) - { - cacheSectorNumber[0] = 1; // must not state that sector 0 is already cached - memset(&cacheSectorNumber[1], 0, sizeof(cacheSectorNumber) - sizeof(cacheSectorNumber[0])); - memset(openFiles, 0, sizeof(openFiles)); - - struct Iter - { - static void SetFAT(fatFromDOSDrive& ffdd, size_t idx, uint32_t val) - { - while (idx >= (uint64_t)ffdd.fat.size() * 8 / ffdd.fatSz) - { - // FAT12 table grows in steps of 3 sectors otherwise the table doesn't align - size_t addSz = (ffdd.fatSz != 12 ? BYTESPERSECTOR : (BYTESPERSECTOR * 3)); - ffdd.fat.resize(ffdd.fat.size() + addSz); - memset(&ffdd.fat[ffdd.fat.size() - addSz], 0, addSz); - } - if (ffdd.fatSz == 32) // FAT32 - var_write((uint32_t *)&ffdd.fat[idx * 4], val); - else if (ffdd.fatSz == 16) // FAT 16 - var_write((uint16_t *)&ffdd.fat[idx * 2], (uint16_t)val); - else if (idx & 1) // FAT12 odd cluster - var_write((uint16_t *)&ffdd.fat[idx + idx / 2], (uint16_t)((var_read((uint16_t *)&ffdd.fat[idx + idx / 2]) & 0xF) | ((val & 0xFFF) << 4))); - else // FAT12 even cluster - var_write((uint16_t *)&ffdd.fat[idx + idx / 2], (uint16_t)((var_read((uint16_t *)&ffdd.fat[idx + idx / 2]) & 0xF000) | (val & 0xFFF))); - } - - static direntry* AddDirEntry(fatFromDOSDrive& ffdd, bool useFAT16Root, size_t& diridx) - { - const uint32_t entriesPerCluster = ffdd.sectorsPerCluster * BYTESPERSECTOR / sizeof(direntry); - if (!useFAT16Root && (diridx % entriesPerCluster) == 0) - { - // link fat (was set to 0xFFFF before but now we knew the chain continues) - if (diridx) SetFAT(ffdd, 2 + (diridx - 1) / entriesPerCluster, (uint32_t)(2 + ffdd.dirs.size() / entriesPerCluster)); - diridx = ffdd.dirs.size(); - ffdd.dirs.resize(diridx + entriesPerCluster); - memset(&ffdd.dirs[diridx], 0, sizeof(direntry) * entriesPerCluster); - SetFAT(ffdd, 2 + diridx / entriesPerCluster, (uint32_t)0xFFFFFFFF); // set as last cluster in chain for now - } - else if (useFAT16Root && diridx && (diridx % 512) == 0) - { - // this actually should never be larger than 512 for some FAT16 drivers - ffdd.root.resize(diridx + 512); - memset(&ffdd.root[diridx], 0, sizeof(direntry) * 512); - } - return &(!useFAT16Root ? ffdd.dirs : ffdd.root)[diridx++]; - } - - static void ParseDir(fatFromDOSDrive& ffdd, char* dir, const StringToPointerHashMap* filter, int dirlen = 0, uint16_t parentFirstCluster = 0) - { - if (ffdd.tomany) return; - const bool useFAT16Root = (!dirlen && ffdd.fatSz != 32), readOnly = ffdd.readOnly; - const size_t firstidx = (!useFAT16Root ? ffdd.dirs.size() : 0); - const uint32_t sectorsPerCluster = ffdd.sectorsPerCluster, bytesPerCluster = sectorsPerCluster * BYTESPERSECTOR, entriesPerCluster = bytesPerCluster / sizeof(direntry); - const uint16_t myFirstCluster = (dirlen ? (uint16_t)(2 + firstidx / entriesPerCluster) : (uint16_t)0) ; - - char finddir[DOS_PATHLENGTH+4]; - memcpy(finddir, dir, dirlen); // because FindFirst can modify this... - finddir[dirlen] = '\0'; - if (dirlen) dir[dirlen++] = '\\'; - - size_t diridx = 0; - RealPt save_dta = dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - dta.SetupSearch(255, 0xFF, (char*)"*.*"); - skipintprog = true; - for (bool more = ffdd.drive->FindFirst(finddir, dta); more; more = ffdd.drive->FindNext(dta)) - { - char dta_name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH+1]; uint32_t dta_size, dta_hsize; uint16_t dta_date, dta_time; uint8_t dta_attr; - dta.GetResult(dta_name, lname, dta_size, dta_hsize, dta_date, dta_time, dta_attr); - //LOG_MSG("dta_name %s lname %s\n", dta_name, lname); - const char *fend = dta_name + strlen(dta_name); - const bool dot = (dta_name[0] == '.' && dta_name[1] == '\0'), dotdot = (dta_name[0] == '.' && dta_name[1] == '.' && dta_name[2] == '\0'); - if (!dirlen && (dot || dotdot)) continue; // root shouldn't have dot entries (yet localDrive does...) - - ffddFile f; - memcpy(f.path, dir, dirlen); - memcpy(f.path + dirlen, dta_name, fend - dta_name + 1); - if (filter && filter->Get(f.path, sizeof(f.path))) continue; - - const bool isLongFileName = (!dot && !dotdot && !(dta_attr & DOS_ATTR_VOLUME)); - if (isLongFileName) - { - bool lead = false; - size_t len = 0, lfnlen = strlen(lname); - uint16_t *lfnw = (uint16_t *)malloc((lfnlen + 1) * sizeof(uint16_t)); - if (lfnw == NULL) continue; - char text[3]; - uint16_t uname[4]; - #if defined(WIN32) - uint16_t cp = GetACP(), cpbak = dos.loaded_codepage; - if (tryconvertcp && cpbak == 437 && CheckDBCSCP(cp)) - dos.loaded_codepage = cp; - #endif - for (size_t i=0; i < lfnlen; i++) { - if (lead) { - lead = false; - text[0]=lname[i-1]&0xFF; - text[1]=lname[i]&0xFF; - text[2]=0; - uname[0]=0; - uname[1]=0; - if (CodePageGuestToHostUTF16(uname,text)&&uname[0]!=0&&uname[1]==0) - lfnw[len++] = uname[0]; - else { - lfnw[len++] = lname[i-1]; - lfnw[len++] = lname[i]; - } - } else if (i+1ord = (uint8_t)((lfnblocks - i)|(i == 0 ? 0x40 : 0x0)); - le->attrib = DOS_ATTR_LONG_NAME; - le->type = 0; - le->loFirstClust = 0; - uint16_t* plfn = lfnw + (lfnblocks - i - 1) * 13; - for (int j = 0; j != 13; j++, plfn++) - { - char* p = le->Name(j); - if (plfn > lfn_end) - p[0] = p[1] = (char)0xFF; - else if (plfn == lfn_end) - p[0] = p[1] = 0; - else if (*plfn > 0xFF) { - p[0] = (uint8_t)(*plfn%0x100); - p[1] = (uint8_t)(*plfn/0x100); - } else { - p[0] = *plfn; - p[1] = 0; - } - } - } - free(lfnw); - } - - const char *fext = (dot || dotdot ? NULL : strrchr(dta_name, '.')); - direntry* e = AddDirEntry(ffdd, useFAT16Root, diridx); - memset(e->entryname, ' ', sizeof(e->entryname)); - memcpy(e->entryname, dta_name, (fext ? fext : fend) - dta_name); - if (fext++) memcpy(e->entryname + 8, fext, fend - fext); - - e->attrib = dta_attr | (readOnly ? DOS_ATTR_READ_ONLY : 0) | (isLongFileName ? DOS_ATTR_PENDING_SHORT_NAME : 0); - if (dos.version.major >= 7) { - var_write(&e->crtTime, dta_time); // create date/time is DOS 7.0 and up only - var_write(&e->crtDate, dta_date); // create date/time is DOS 7.0 and up only - } - var_write(&e->accessDate, dta_date); - var_write(&e->modTime, dta_time); - var_write(&e->modDate, dta_date); - - if (dot) - { - e->attrib |= DOS_ATTR_DIRECTORY; // make sure - var_write(&e->loFirstClust, myFirstCluster); - } - else if (dotdot) - { - e->attrib |= DOS_ATTR_DIRECTORY; // make sure - var_write(&e->loFirstClust, parentFirstCluster); - } - else if (dta_attr & DOS_ATTR_VOLUME) - { - if (dirlen || (e->attrib & DOS_ATTR_DIRECTORY) || dta_size) - LOG_MSG("Invalid volume entry - %s\n", e->entryname); - } - else if (!(dta_attr & DOS_ATTR_DIRECTORY)) - { - var_write(&e->entrysize, dta_size); - - uint32_t fileIdx = (uint32_t)ffdd.files.size(); - ffdd.files.push_back(f); - - uint32_t numSects = (dta_size + bytesPerCluster - 1) / bytesPerCluster * sectorsPerCluster; - try { - ffdd.fileAtSector.resize(ffdd.fileAtSector.size() + numSects, fileIdx); - } catch (...) { - LOG_MSG("Too many sectors needed, will discard remaining files (from %s)", lname); - ffdd.tomany = ffdd.readOnly = true; - var_write((uint32_t *)&ffdd.fsinfosec[488], (uint32_t)0x0); - break; - } - } - } - skipintprog = false; - dos.dta(save_dta); - if (dirlen && diridx < firstidx + 2) { - LOG_MSG("Directory need at least . and .. entries - %s\n", finddir); - return; - } - - // Now fill out the subdirectories (can't be done above because only one dos.dta can run simultaneously - std::vector& entries = (!useFAT16Root ? ffdd.dirs : ffdd.root); - for (size_t ei = firstidx; ei != diridx; ei++) - { - direntry& e = entries[ei]; - uint8_t* entryname = e.entryname; - int totlen = dirlen; - if (e.attrib & DOS_ATTR_DIRECTORY) // copy name before modifying SFN - { - if (entryname[0] == '.' && entryname[entryname[1] == '.' ? 2 : 1] == ' ') continue; - for (int i = 0; i != 8 && entryname[i] != ' '; i++) dir[totlen++] = entryname[i]; - if (entryname[8] != ' ') dir[totlen++] = '.'; - for (int i = 8; i != 11 && entryname[i] != ' '; i++) dir[totlen++] = entryname[i]; - } - if (e.attrib & DOS_ATTR_PENDING_SHORT_NAME) // convert LFN to SFN - { - uint8_t chksum = 0; - for (int i = 0; i != 11;) chksum = (chksum >> 1) + (chksum << 7) + e.entryname[i++]; - for (lfndirentry* le = (lfndirentry*)&e; le-- == (lfndirentry*)&e || !(le[1].ord & 0x40);) le->chksum = chksum; - e.attrib &= ~DOS_ATTR_PENDING_SHORT_NAME; - } - if (e.attrib & DOS_ATTR_DIRECTORY) // this reallocates ffdd.dirs so do this last - { - var_write(&e.loFirstClust, (uint16_t)(2 + ffdd.dirs.size() / entriesPerCluster)); - ParseDir(ffdd, dir, filter, totlen, myFirstCluster); - } - } - } - - struct SumInfo { uint64_t used_bytes; const StringToPointerHashMap* filter; }; - static void SumFileSize(const char* path, bool /*is_dir*/, uint32_t size, uint16_t, uint16_t, uint8_t, Bitu data) - { - if (!((SumInfo*)data)->filter || !((SumInfo*)data)->filter->Get(path)) - ((SumInfo*)data)->used_bytes += (size + (32*1024-1)) / (32*1024) * (32*1024); // count as 32 kb clusters - } - }; - - drv->EmptyCache(); - Iter::SumInfo sum = { 0, NULL }; - uint64_t freeSpace = 0, freeSpaceMB = 0; - uint32_t free_clusters = 0; - uint16_t drv_bytes_sector; uint8_t drv_sectors_cluster; uint16_t drv_total_clusters, drv_free_clusters; - rsize=true; - freec=0; - drv->AllocationInfo(&drv_bytes_sector, &drv_sectors_cluster, &drv_total_clusters, &drv_free_clusters); - free_clusters = freec?freec:drv_free_clusters; - freeSpace = (uint64_t)drv_bytes_sector * drv_sectors_cluster * (freec?freec:free_clusters); - freeSpaceMB = freeSpace / (1024*1024); - if (freeMB < freeSpaceMB) freeSpaceMB = freeMB; - rsize=false; - tomany=false; - readOnly = free_clusters == 0 || freeSpaceMB == 0; - if (!DriveFileIterator(drv, Iter::SumFileSize, (Bitu)&sum, timeout)) return; - - uint32_t usedMB = sum.used_bytes / (1024*1024), addFreeMB, totalMB, tsizeMB; - uint64_t tsize = 0; - if (IS_PC98_ARCH) { - if (usedMB < 6) { - sasi.sectors = 33; - sasi.surfaces = 4; - sasi.cylinders = 153; - } else if (usedMB < 16) { - sasi.sectors = 33; - sasi.surfaces = 4; - sasi.cylinders = 310; - } else if (usedMB < 26) { - sasi.sectors = 33; - sasi.surfaces = 6; - sasi.cylinders = 310; - } else if (usedMB < 36) { - sasi.sectors = 33; - sasi.surfaces = 8; - sasi.cylinders = 310; - } else { - sasi.sectors = 33; - uint32_t heads = std::ceil((double)(usedMB+(readOnly?0:(usedMB>=2047?freeSpaceMB:5)))/10); - if (heads > 255) { - sasi.surfaces = 255; - sasi.cylinders = heads * 615 / 255; - } else { - sasi.surfaces = heads; - sasi.cylinders = 615; - } - } - tsize = BYTESPERSECTOR * sasi.sectors * sasi.surfaces * sasi.cylinders; - tsizeMB = sasi.sectors * sasi.surfaces * sasi.cylinders / (1024 * 1024 / BYTESPERSECTOR); - if (tsizeMB < usedMB) readOnly = true; - addFreeMB = readOnly ? 0 : (usedMB >= 2047 ? freeSpaceMB : (std::ceil((double)tsize - sum.used_bytes) / (1024 * 1024) + 1)); - } else - addFreeMB = (readOnly ? 0 : freeSpaceMB); - totalMB = usedMB + (addFreeMB ? (1 + addFreeMB) : 0); - if (totalMB >= 3072) { fatSz = 32; sectorsPerCluster = 64; } // 32 kb clusters ( 98304 ~ FAT entries) - else if (totalMB >= 2048) { fatSz = 32; sectorsPerCluster = 32; } // 16 kb clusters (131072 ~ 196608 FAT entries) - else if (totalMB >= 384) { fatSz = 16; sectorsPerCluster = 64; } // 32 kb clusters ( 12288 ~ 65504 FAT entries) - else if (totalMB >= 192) { fatSz = 16; sectorsPerCluster = 32; } // 16 kb clusters ( 12288 ~ 24576 FAT entries) - else if (totalMB >= 96) { fatSz = 16; sectorsPerCluster = 16; } // 8 kb clusters ( 12288 ~ 24576 FAT entries) - else if (totalMB >= 48) { fatSz = 16; sectorsPerCluster = 8; } // 4 kb clusters ( 12288 ~ 24576 FAT entries) - else if (totalMB >= 12) { fatSz = 16; sectorsPerCluster = 4; } // 2 kb clusters ( 6144 ~ 24576 FAT entries) - else if (totalMB >= 4) { fatSz = 16; sectorsPerCluster = 1; } // .5 kb clusters ( 8192 ~ 24576 FAT entries) - else if (totalMB >= 2) { fatSz = 12; sectorsPerCluster = 4; } // 2 kb clusters ( 1024 ~ 2048 FAT entries) - else if (totalMB >= 1) { fatSz = 12; sectorsPerCluster = 2; } // 1 kb clusters ( 1024 ~ 2048 FAT entries) - else { fatSz = 12; sectorsPerCluster = 1; } // .5 kb clusters ( ~ 2048 FAT entries) - - // mediadescriptor in very first byte of FAT table - Iter::SetFAT(*this, 0, (uint32_t)0xFFFFFF8); - Iter::SetFAT(*this, 1, (uint32_t)0xFFFFFFF); - - if (fatSz != 32) - { - // this actually should never be anything but 512 for some FAT16 drivers - root.resize(512); - memset(&root[0], 0, sizeof(direntry) * 512); - } - - char dirbuf[DOS_PATHLENGTH+4]; - Iter::ParseDir(*this, dirbuf, NULL); - - const uint32_t bytesPerCluster = sectorsPerCluster * BYTESPERSECTOR; - const uint32_t entriesPerCluster = bytesPerCluster / sizeof(direntry); - uint32_t fileCluster = (uint32_t)(2 + dirs.size() / entriesPerCluster); - for (uint32_t fileSect = 0, rootOrDir = 0; rootOrDir != 2; rootOrDir++) - { - for (direntry& e : (rootOrDir ? dirs : root)) - { - if (!e.entrysize || (e.attrib & DOS_ATTR_LONG_NAME_MASK) == DOS_ATTR_LONG_NAME) continue; - var_write(&e.hiFirstClust, (uint16_t)(fileCluster >> 16)); - var_write(&e.loFirstClust, (uint16_t)(fileCluster)); - - // Write FAT link chain - uint32_t numClusters = (var_read(&e.entrysize) + bytesPerCluster - 1) / bytesPerCluster; - for (uint32_t i = fileCluster, iEnd = i + numClusters - 1; i != iEnd; i++) Iter::SetFAT(*this, i, i + 1); - Iter::SetFAT(*this, fileCluster + numClusters - 1, (uint32_t)0xFFFFFFF); - - files[fileAtSector[fileSect]].firstSect = fileSect; - - fileCluster += numClusters; - fileSect += numClusters * sectorsPerCluster; - } - } - - if (IS_PC98_ARCH) { - HDIHDR hdi; - memset(&hdi, 0, sizeof(hdi)); - // STOREINTELDWORD(hdi.hddtype, 0); - STOREINTELDWORD(hdi.headersize, 4096); - STOREINTELDWORD(hdi.hddsize, (uint32_t)tsize); - STOREINTELDWORD(hdi.sectorsize, BYTESPERSECTOR); - STOREINTELDWORD(hdi.sectors, sasi.sectors); - STOREINTELDWORD(hdi.surfaces, sasi.surfaces); - STOREINTELDWORD(hdi.cylinders, sasi.cylinders); - memset(&header, 0, sizeof(header)); - memcpy(&header,&hdi,sizeof(hdi)); - memset(&ipl, 0, sizeof(ipl)); - memcpy(&ipl,&hdddiskboot,sizeof(hdddiskboot)); - ipl.content[0xFE] = 0x55; - ipl.content[0xFF] = 0xaa; - ipl.content[0x1FE] = 0x55; - ipl.content[0x1FF] = 0xaa; - struct _PC98RawPartition pe; - memset(&pe, 0, sizeof(pe)); - STOREINTELDWORD(&pe.mid, 0xa0); - STOREINTELDWORD(&pe.sid, 0xa1); - STOREINTELDWORD(&pe.ipl_cyl, 1); - STOREINTELDWORD(&pe.cyl, 1); - STOREINTELDWORD(&pe.end_cyl, sasi.cylinders); - strncpy(pe.name, "MS-DOS ", 16); - memset(&pt, 0, sizeof(pt)); - memcpy(&pt,&pe,sizeof(pe)); - } - - // Add at least one page after the last file or FAT spec minimum to make ScanDisk happy (even on read-only disks) - const uint32_t FATPageClusters = BYTESPERSECTOR * 8 / fatSz, FATMinCluster = (fatSz == 32 ? 65525 : (fatSz == 16 ? 4085 : 0)) + FATPageClusters; - const uint32_t addFreeClusters = ((addFreeMB * (1024*1024/BYTESPERSECTOR)) + sectorsPerCluster - 1) / sectorsPerCluster; - const uint32_t targetClusters = fileCluster + (addFreeClusters < FATPageClusters ? FATPageClusters : addFreeClusters); - Iter::SetFAT(*this, (targetClusters < FATMinCluster ? FATMinCluster : targetClusters) - 1, 0); - const uint32_t totalClusters = (uint32_t)((uint64_t)fat.size() * 8 / fatSz); // as set by Iter::SetFAT - - // on read-only disks, fill up the end of the FAT table with "Bad sector in cluster or reserved cluster" markers - if (readOnly) - for (uint32_t cluster = fileCluster; cluster != totalClusters; cluster++) - Iter::SetFAT(*this, cluster, 0xFFFFFF7); - - const uint32_t sectorsPerFat = (uint32_t)(fat.size() / BYTESPERSECTOR); - const uint16_t reservedSectors = (fatSz == 32 ? 32 : 1); - const uint32_t partSize = totalClusters * sectorsPerCluster + reservedSectors; - - sect_boot_pc98 = sasi.surfaces * sasi.sectors; - sect_fat1_start = (IS_PC98_ARCH ? sect_boot_pc98 : SECT_BOOT) + reservedSectors; - sect_fat2_start = sect_fat1_start + sectorsPerFat; - sect_root_start = sect_fat2_start + sectorsPerFat; - sect_dirs_start = sect_root_start + ((root.size() * sizeof(direntry) + BYTESPERSECTOR - 1) / BYTESPERSECTOR); - sect_files_start = sect_dirs_start + ((dirs.size() * sizeof(direntry) + BYTESPERSECTOR - 1) / BYTESPERSECTOR); - sect_files_end = sect_files_start + fileAtSector.size(); - sect_disk_end = (IS_PC98_ARCH ? sect_boot_pc98 : SECT_BOOT) + partSize; - if (IS_PC98_ARCH && tsize/BYTESPERSECTOR-8 > sect_disk_end) sect_disk_end = tsize/BYTESPERSECTOR-8; - if (sect_disk_end < sect_files_end) return; - - for (ffddFile& f : files) - f.firstSect += sect_files_start; - - uint32_t serial = 0; - if (!serial) - { - serial = DriveCalculateCRC32(&fat[0], fat.size(), 0); - if (root.size()) serial = DriveCalculateCRC32((uint8_t*)&root[0], root.size() * sizeof(direntry), serial); - if (dirs.size()) serial = DriveCalculateCRC32((uint8_t*)&dirs[0], dirs.size() * sizeof(direntry), serial); - } - - memset(&mbr, 0, sizeof(mbr)); - //memcpy(&mbr,freedos_mbr,512); - var_write((uint32_t *)&mbr.booter[440], serial); //4 byte disk serial number - var_write(&mbr.pentry[0].bootflag, 0x80); //Active bootable - if ((sect_disk_end - 1) / (HEADCOUNT * SECTORSPERTRACK) > 0x3FF) - { - mbr.pentry[0].beginchs[0] = mbr.pentry[0].beginchs[1] = mbr.pentry[0].beginchs[2] = 0; - mbr.pentry[0].endchs[0] = mbr.pentry[0].endchs[1] = mbr.pentry[0].endchs[2] = 0; - } - else - { - chs_write(mbr.pentry[0].beginchs, IS_PC98_ARCH ? sect_boot_pc98 : SECT_BOOT); - chs_write(mbr.pentry[0].endchs, sect_disk_end - 1); - } - var_write(&mbr.pentry[0].absSectStart, IS_PC98_ARCH ? sect_boot_pc98 : SECT_BOOT); - var_write(&mbr.pentry[0].partSize, partSize); - mbr.magic1 = 0x55; mbr.magic2 = 0xaa; - - memset(&bootsec, 0, sizeof(bootsec)); - memcpy(bootsec.nearjmp, "\xEB\x3C\x90", sizeof(bootsec.nearjmp)); - memcpy(bootsec.oemname, fatSz == 32 ? "MSWIN4.1" : "MSDOS5.0", sizeof(bootsec.oemname)); - var_write((uint16_t *)&bootsec.bytespersector, (uint16_t)BYTESPERSECTOR); - var_write(&bootsec.sectorspercluster, sectorsPerCluster); - var_write(&bootsec.reservedsectors, reservedSectors); - var_write(&bootsec.fatcopies, 2); - var_write(&bootsec.totalsectorcount, 0); // 16 bit field is 0, actual value is in totalsecdword - var_write(&bootsec.mediadescriptor, 0xF8); //also in FAT[0] - var_write(&bootsec.sectorspertrack, IS_PC98_ARCH ? sasi.sectors : SECTORSPERTRACK); - var_write(&bootsec.headcount, IS_PC98_ARCH ? sasi.surfaces : HEADCOUNT); - var_write(&bootsec.hiddensectorcount, IS_PC98_ARCH ? sect_boot_pc98 : SECT_BOOT); - var_write(&bootsec.totalsecdword, partSize); - bootsec.magic1 = 0x55; bootsec.magic2 = 0xaa; - if (fatSz != 32) // FAT12/FAT16 - { - var_write(&mbr.pentry[0].parttype, (fatSz == 12 ? 0x01 : (sect_disk_end < 65536 ? 0x04 : 0x06))); // FAT12/16 - var_write(&bootsec.rootdirentries, (uint16_t)root.size()); - var_write(&bootsec.sectorsperfat, (uint16_t)sectorsPerFat); - bootsec.bootcode[0] = 0x80; //Physical drive (harddisk) flag - bootsec.bootcode[2] = 0x29; //Extended boot signature - var_write((uint32_t *)&bootsec.bootcode[3], serial + 1); //4 byte partition serial number - memcpy(&bootsec.bootcode[7], "NO NAME ", 11); // volume label - memcpy(&bootsec.bootcode[18], "FAT1 ", 8); // file system string name - bootsec.bootcode[22] = (char)('0' + (fatSz % 10)); // '2' or '6' - } - else // FAT32 - { - var_write(&mbr.pentry[0].parttype, 0x0C); //FAT32 - var_write((uint32_t *)&bootsec.bootcode[0], sectorsPerFat); - var_write((uint32_t *)&bootsec.bootcode[8], (uint32_t)2); // First cluster number of the root directory - var_write((uint16_t *)&bootsec.bootcode[12], (uint16_t)1); // Sector of FSInfo structure in offset from top of the FAT32 volume - var_write((uint16_t *)&bootsec.bootcode[14], (uint16_t)6); // Sector of backup boot sector in offset from top of the FAT32 volume - bootsec.bootcode[28] = 0x80; //Physical drive (harddisk) flag - bootsec.bootcode[30] = 0x29; //Extended boot signature - var_write((uint32_t *)&bootsec.bootcode[31], serial + 1); //4 byte partition serial number - memcpy(&bootsec.bootcode[35], "NO NAME ", 11); // volume label - memcpy(&bootsec.bootcode[46], "FAT32 ", 8); // file system string name - - memset(fsinfosec, 0, sizeof(fsinfosec)); - var_write((uint32_t *)&fsinfosec[0], (uint32_t)0x41615252); //lead signature - var_write((uint32_t *)&fsinfosec[484], (uint32_t)0x61417272); //Another signature - bool ver71 = dos.version.major > 7 || (dos.version.major == 7 && dos.version.minor >= 10); - //Bitu freeclusters = readOnly ? 0x0 : (ver71 ? (Bitu)freeSpace / (BYTESPERSECTOR * sectorsPerCluster) : 0xFFFFFFFF); - Bitu freeclusters = readOnly ? 0x0 : (ver71 ? (Bitu)((sect_disk_end - sect_files_end) / sectorsPerCluster): 0xFFFFFFFF); - var_write((uint32_t *)&fsinfosec[488], (uint32_t)(freeclusters < 0xFFFFFFFF ? freeclusters : 0xFFFFFFFF)); //last known free cluster count (all FF is unknown) - var_write((uint32_t *)&fsinfosec[492], (ver71 ? (sect_files_end / sectorsPerCluster): 0xFFFFFFFF)); //the cluster number at which the driver should start looking for free clusters (all FF is unknown) - var_write((uint32_t *)&fsinfosec[508], 0xAA550000); //ending signature - } - - codepage = dos.loaded_codepage; - tryconvcp = tryconvertcp>0; - success = true; - } - - static void chs_write(uint8_t* chs, uint32_t lba) - { - uint32_t cylinder = lba / (HEADCOUNT * SECTORSPERTRACK); - uint32_t head = (lba / SECTORSPERTRACK) % HEADCOUNT; - uint32_t sector = (lba % SECTORSPERTRACK) + 1; - if (head > 0xFF || sector > 0x3F || cylinder > 0x3FF) - LOG_MSG("Warning: Invalid CHS data - %X, %X, %X\n", head, sector, cylinder); - chs[0] = (uint8_t)(head & 0xFF); - chs[1] = (uint8_t)((sector & 0x3F) | ((cylinder >> 8) & 0x3)); - chs[2] = (uint8_t)(cylinder & 0xFF); - } - - uint8_t WriteSector(uint32_t sectnum, const void* data) - { - _driveUsed = true; - if (sectnum >= sect_disk_end) return 1; - if (sectnum == SECT_MBR) - { - // Windows 9x writes the disk timestamp into the booter area on startup. - // Just copy that part over so it doesn't get treated as a difference that needs to be stored. - memcpy(mbr.booter, data, sizeof(mbr.booter)); - } - - if (readOnly) return 0; // just return without error to avoid bluescreens in Windows 9x - - if (sectnum >= diffSectors.size()) diffSectors.resize(sectnum + 128); - uint32_t *cursor_ptr = &diffSectors[sectnum].cursor, cursor_val = *cursor_ptr; - - int is_different; - uint8_t filebuf[BYTESPERSECTOR]; - void* unmodified = GetUnmodifiedSector(sectnum, filebuf); - if (!unmodified) - { - is_different = false; // to be equal it must be filled with zeroes - for (uint64_t* p = (uint64_t*)data, *pEnd = p + (BYTESPERSECTOR / sizeof(uint64_t)); p != pEnd; p++) - if (*p) { is_different = true; break; } - } - else is_different = memcmp(unmodified, data, BYTESPERSECTOR); - - if (is_different) - { - if (cursor_val == NULL_CURSOR && diffFreeCursors.size()) - { - *cursor_ptr = cursor_val = diffFreeCursors.back(); - diffFreeCursors.pop_back(); - } - if (cursor_val == NULL_CURSOR) - { - *cursor_ptr = cursor_val = (uint32_t)diffSectorBufs.size(); - diffSectorBufs.resize(cursor_val + 1); - } - memcpy(diffSectorBufs[cursor_val].data, data, BYTESPERSECTOR); - cacheSectorNumber[sectnum % CACHECOUNT] = (uint32_t)-1; // invalidate cache - } - else if (cursor_val != NULL_CURSOR) - { - diffFreeCursors.push_back(cursor_val); - *cursor_ptr = NULL_CURSOR; - cacheSectorNumber[sectnum % CACHECOUNT] = (uint32_t)-1; // invalidate cache - } - return 0; - } - - void* GetUnmodifiedSector(uint32_t sectnum, void* filebuf) - { - if (sectnum >= sect_files_end) {} - else if (sectnum >= sect_files_start) - { - uint32_t idx = fileAtSector[sectnum - sect_files_start]; - ffddFile& f = files[idx]; - DOS_File* df = NULL; - for (uint32_t i = 0; i != KEEPOPENCOUNT; i++) - if (openIndex[i] == idx && openFiles[i]) - { df = openFiles[i]; break; } - if (!df) - { - openCursor = (openCursor + 1) % KEEPOPENCOUNT; - DOS_File*& cachedf = openFiles[openCursor]; - if (cachedf) - { - cachedf->Close(); - delete cachedf; - cachedf = NULL; - } - bool res = drive->FileOpen(&df, f.path, OPEN_READ); - if (!res && codepage && (codepage != dos.loaded_codepage || (tryconvcp && codepage == 437))) { - uint32_t cp = dos.loaded_codepage; - dos.loaded_codepage = codepage; - #if defined(WIN32) - if (tryconvcp && dos.loaded_codepage == 437) dos.loaded_codepage = GetACP(); - #endif - res = drive->FileOpen(&df, f.path, OPEN_READ); - dos.loaded_codepage = cp; - } - if (res) - { - df->AddRef(); - cachedf = df; - openIndex[openCursor] = idx; - } - else return NULL; - } - if (df) - { - uint32_t pos = (sectnum - f.firstSect) * BYTESPERSECTOR; - uint16_t read = (uint16_t)BYTESPERSECTOR; - df->Seek(&pos, DOS_SEEK_SET); - if (!df->Read((uint8_t*)filebuf, &read)) { read = 0; assert(0); } - if (read != BYTESPERSECTOR) - memset((uint8_t*)filebuf + read, 0, BYTESPERSECTOR - read); - return filebuf; - } - } - else if (sectnum >= sect_dirs_start) return &dirs[(sectnum - sect_dirs_start) * (BYTESPERSECTOR / sizeof(direntry))]; - else if (sectnum >= sect_root_start) return &root[(sectnum - sect_root_start) * (BYTESPERSECTOR / sizeof(direntry))]; - else if (sectnum >= sect_fat2_start) return &fat[(sectnum - sect_fat2_start) * BYTESPERSECTOR]; - else if (sectnum >= sect_fat1_start) return &fat[(sectnum - sect_fat1_start) * BYTESPERSECTOR]; - else if (IS_PC98_ARCH) { - if (sectnum == 0) return &ipl; - else if (sectnum == 1) return &pt; - else if (sectnum == sect_boot_pc98) return &bootsec; - else if (sectnum == sect_boot_pc98+1) return fsinfosec; - else if (sectnum == sect_boot_pc98+2) return fsinfosec; // additional boot loader code (anything is ok for us but needs 0x55AA footer signature) - else if (sectnum == sect_boot_pc98+6) return &bootsec; // boot sector copy - else if (sectnum == sect_boot_pc98+7) return fsinfosec; // boot sector copy - else if (sectnum == sect_boot_pc98+8) return fsinfosec; // boot sector copy - return NULL; - } - else if (sectnum == SECT_BOOT) return &bootsec; - else if (sectnum == SECT_MBR) return &mbr; - else if (sectnum == SECT_BOOT+1) return fsinfosec; - else if (sectnum == SECT_BOOT+2) return fsinfosec; // additional boot loader code (anything is ok for us but needs 0x55AA footer signature) - else if (sectnum == SECT_BOOT+6) return &bootsec; // boot sector copy - else if (sectnum == SECT_BOOT+7) return fsinfosec; // boot sector copy - else if (sectnum == SECT_BOOT+8) return fsinfosec; // boot sector copy - return NULL; - } - - uint8_t ReadSector(uint32_t sectnum, void* data) - { +extern unsigned long freec; +extern const uint8_t freedos_mbr[]; +extern int bootdrive, tryconvertcp; +extern bool int13_disk_change_detect_enable, skipintprog, rsize; +extern bool int13_extensions_enable, bootguest, bootvm, use_quick_reboot; +extern bool int13_enable_48bitLBA; +bool isDBCSCP(), isKanji1_gbk(uint8_t chr), shiftjis_lead_byte(int c), CheckDBCSCP(int32_t codepage); +extern bool CodePageGuestToHostUTF16(uint16_t *d/*CROSS_LEN*/,const char *s/*CROSS_LEN*/); + +#define STATIC_ASSERTM(A,B) static_assertion_##A##_##B +#define STATIC_ASSERTN(A,B) STATIC_ASSERTM(A,B) +#define STATIC_ASSERT(cond) typedef char STATIC_ASSERTN(__LINE__,__COUNTER__)[(cond)?1:-1] + +uint32_t DriveCalculateCRC32(const uint8_t *ptr, size_t len, uint32_t crc) +{ + // Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C implementation that balances processor cache usage against speed": http://www.geocities.com/malbrain/ + static const uint32_t s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; + uint32_t crcu32 = ~crc; + while (len--) { uint8_t b = *ptr++; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)]; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)]; } + return ~crcu32; +} + +bool DriveFileIterator(DOS_Drive* drv, void(*func)(const char* path, bool is_dir, uint32_t size, uint16_t date, uint16_t time, uint8_t attr, Bitu data), Bitu data, int timeout) +{ + if (!drv) return true; + uint32_t starttick = GetTicks(); + struct Iter + { + static bool ParseDir(DOS_Drive* drv, uint32_t startticks, const std::string& dir, std::vector& dirs, void(*func)(const char* path, bool is_dir, uint32_t size, uint16_t date, uint16_t time, uint8_t attr, Bitu data), Bitu data, uint32_t timeout) + { + size_t dirlen = dir.length(); + if (dirlen + DOS_NAMELENGTH >= DOS_PATHLENGTH) return true; + char full_path[DOS_PATHLENGTH+4]; + if (dirlen) + { + memcpy(full_path, &dir[0], dirlen); + full_path[dirlen++] = '\\'; + } + full_path[dirlen] = '\0'; + + RealPt save_dta = dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + dta.SetupSearch(255, (uint8_t)(0xffff & ~DOS_ATTR_VOLUME), (char*)"*.*"); + for (bool more = drv->FindFirst((char*)dir.c_str(), dta); more; more = drv->FindNext(dta)) + { + if (startticks && timeout > 0 && GetTicks()-startticks > timeout * 1000) { + LOG_MSG("Timeout iterating directories"); + dos.dta(save_dta); + return false; + } + char dta_name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH+1]; uint32_t dta_size, dta_hsize; uint16_t dta_date, dta_time; uint8_t dta_attr; + dta.GetResult(dta_name, lname, dta_size, dta_hsize, dta_date, dta_time, dta_attr); + strcpy(full_path + dirlen, dta_name); + bool is_dir = !!(dta_attr & DOS_ATTR_DIRECTORY); + //if (is_dir) printf("[%s] [%s] %s (size: %u - date: %u - time: %u - attr: %u)\n", (const char*)data, (dta_attr == 8 ? "V" : (is_dir ? "D" : "F")), full_path, dta_size, dta_date, dta_time, dta_attr); + if (dta_name[0] == '.' && dta_name[dta_name[1] == '.' ? 2 : 1] == '\0') continue; + if (is_dir) dirs.emplace_back(full_path); + func(full_path, is_dir, dta_size, dta_date, dta_time, dta_attr, data); + } + dos.dta(save_dta); + return true; + } + }; + std::vector dirs; + dirs.emplace_back(""); + std::string dir; + while (dirs.size()) + { + std::swap(dirs.back(), dir); + dirs.pop_back(); + if (!Iter::ParseDir(drv, starttick, dir.c_str(), dirs, func, data, timeout)) return false; + } + return true; +} + +template struct StringToPointerHashMap +{ + StringToPointerHashMap() : len(0), maxlen(0), keys(NULL), vals(NULL) { } + ~StringToPointerHashMap() { free(keys); free(vals); } + + static uint32_t Hash(const char* str, uint32_t str_limit = 0xFFFF, uint32_t hash_init = (uint32_t)0x811c9dc5) + { + for (const char* e = str + str_limit; *str && str != e;) + hash_init = ((hash_init * (uint32_t)0x01000193) ^ (uint32_t)*(str++)); + return hash_init; + } + + TVal* Get(const char* str, uint32_t str_limit = 0xFFFF, uint32_t hash_init = (uint32_t)0x811c9dc5) const + { + if (len == 0) return NULL; + for (uint32_t key0 = Hash(str, str_limit, hash_init), key = (key0 ? key0 : 1), i = key;; i++) + { + if (keys[i &= maxlen] == key) return vals[i]; + if (!keys[i]) return NULL; + } + } + + void Put(const char* str, TVal* val, uint32_t str_limit = 0xFFFF, uint32_t hash_init = (uint32_t)0x811c9dc5) + { + if (len * 2 >= maxlen) Grow(); + for (uint32_t key0 = Hash(str, str_limit, hash_init), key = (key0 ? key0 : 1), i = key;; i++) + { + if (!keys[i &= maxlen]) { len++; keys[i] = key; vals[i] = val; return; } + if (keys[i] == key) { vals[i] = val; return; } + } + } + + bool Remove(const char* str, uint32_t str_limit = 0xFFFF, uint32_t hash_init = (uint32_t)0x811c9dc5) + { + if (len == 0) return false; + for (uint32_t key0 = Hash(str, str_limit, hash_init), key = (key0 ? key0 : 1), i = key;; i++) + { + if (keys[i &= maxlen] == key) + { + keys[i] = 0; + len--; + while ((key = keys[i = (i + 1) & maxlen]) != 0) + { + for (uint32_t j = key;; j++) + { + if (keys[j &= maxlen] == key) break; + if (!keys[j]) { keys[i] = 0; keys[j] = key; vals[j] = vals[i]; break; } + } + } + return true; + } + if (!keys[i]) return false; + } + } + + void Clear() { memset(keys, len = 0, (maxlen + 1) * sizeof(uint32_t)); } + + uint32_t Len() const { return len; } + uint32_t Capacity() const { return (maxlen ? maxlen + 1 : 0); } + TVal* GetAtIndex(uint32_t idx) const { return (keys[idx] ? vals[idx] : NULL); } + + struct Iterator + { + Iterator(StringToPointerHashMap& _map, uint32_t _index) : map(_map), index(_index - 1) { this->operator++(); } + StringToPointerHashMap& map; + uint32_t index; + TVal* operator *() const { return map.vals[index]; } + bool operator ==(const Iterator &other) const { return index == other.index; } + bool operator !=(const Iterator &other) const { return index != other.index; } + Iterator& operator ++() + { + if (!map.maxlen) { index = 0; return *this; } + if (++index > map.maxlen) index = map.maxlen + 1; + while (index <= map.maxlen && !map.keys[index]) index++; + return *this; + } + }; + + Iterator begin() { return Iterator(*this, 0); } + Iterator end() { return Iterator(*this, (maxlen ? maxlen + 1 : 0)); } + +private: + uint32_t len, maxlen, *keys; + TVal** vals; + + void Grow() + { + uint32_t oldMax = maxlen, oldCap = (maxlen ? oldMax + 1 : 0), *oldKeys = keys; + TVal **oldVals = vals; + maxlen = (maxlen ? maxlen * 2 + 1 : 15); + keys = (uint32_t*)calloc(maxlen + 1, sizeof(uint32_t)); + vals = (TVal**)malloc((maxlen + 1) * sizeof(TVal*)); + for (uint32_t i = 0; i != oldCap; i++) + { + if (!oldKeys[i]) continue; + for (uint32_t key = oldKeys[i], j = key;; j++) + { + if (!keys[j &= maxlen]) { keys[j] = key; vals[j] = oldVals[i]; break; } + } + } + free(oldKeys); + free(oldVals); + } + + // not copyable + StringToPointerHashMap(const StringToPointerHashMap&); + StringToPointerHashMap& operator=(const StringToPointerHashMap&); +}; + +#ifdef _MSC_VER +#pragma pack (1) +#endif +struct sector { + uint8_t content[512]; +} GCC_ATTRIBUTE(packed); + +typedef struct { + uint8_t sectors; + uint8_t surfaces; + uint16_t cylinders; +} SASIHDD; + +struct bootstrap { + uint8_t nearjmp[3]; + uint8_t oemname[8]; + uint8_t bytespersector[2]; + uint8_t sectorspercluster; + uint16_t reservedsectors; + uint8_t fatcopies; + uint16_t rootdirentries; + uint16_t totalsectorcount; + uint8_t mediadescriptor; + uint16_t sectorsperfat; + uint16_t sectorspertrack; + uint16_t headcount; + uint32_t hiddensectorcount; + uint32_t totalsecdword; + uint8_t bootcode[474]; + uint8_t magic1; /* 0x55 */ + uint8_t magic2; /* 0xaa */ +} GCC_ATTRIBUTE(packed); + +struct lfndirentry { + uint8_t ord; + uint8_t name1[10]; + uint8_t attrib; + uint8_t type; + uint8_t chksum; + uint8_t name2[12]; + uint16_t loFirstClust; + uint8_t name3[4]; + char* Name(int j) { return (char*)(j < 5 ? name1 + j*2 : j < 11 ? name2 + (j-5)*2 : name3 + (j-11)*2); } +} GCC_ATTRIBUTE(packed); +#ifdef _MSC_VER +#pragma pack () +#endif + +/* .HDI and .FDI header (NP2) */ +#pragma pack(push,1) +typedef struct { + uint8_t dummy[4]; // +0x00 + uint8_t hddtype[4]; // +0x04 + uint8_t headersize[4]; // +0x08 + uint8_t hddsize[4]; // +0x0C + uint8_t sectorsize[4]; // +0x10 + uint8_t sectors[4]; // +0x14 + uint8_t surfaces[4]; // +0x18 + uint8_t cylinders[4]; // +0x1C +} HDIHDR; // =0x20 + +typedef struct { + uint8_t dummy[4]; // +0x00 + uint8_t fddtype[4]; // +0x04 + uint8_t headersize[4]; // +0x08 + uint8_t fddsize[4]; // +0x0C + uint8_t sectorsize[4]; // +0x10 + uint8_t sectors[4]; // +0x14 + uint8_t surfaces[4]; // +0x18 + uint8_t cylinders[4]; // +0x1C +} FDIHDR; // =0x20 + +typedef struct { + char sig[16]; // +0x000 + char comment[0x100]; // +0x010 + UINT8 headersize[4]; // +0x110 + uint8_t prot; // +0x114 + uint8_t nhead; // +0x115 + uint8_t _unknown_[10]; // +0x116 +} NFDHDR; // =0x120 + +typedef struct { + char sig[16]; // +0x000 + char comment[0x100]; // +0x010 + UINT8 headersize[4]; // +0x110 + uint8_t prot; // +0x114 + uint8_t nhead; // +0x115 + uint8_t _unknown_[10]; // +0x116 + uint32_t trackheads[164]; // +0x120 + uint32_t addinfo; // +0x3b0 + uint8_t _unknown2_[12]; // +0x3b4 +} NFDHDRR1; // =0x3c0 + +typedef struct { + uint8_t log_cyl; // +0x0 + uint8_t log_head; // +0x1 + uint8_t log_rec; // +0x2 + uint8_t sec_len_pow2; // +0x3 sz = 128 << len_pow2 + uint8_t flMFM; // +0x4 + uint8_t flDDAM; // +0x5 + uint8_t byStatus; // +0x6 + uint8_t bySTS0; // +0x7 + uint8_t bySTS1; // +0x8 + uint8_t bySTS2; // +0x9 + uint8_t byRetry; // +0xA + uint8_t byPDA; // +0xB + uint8_t _unknown_[4]; // +0xC +} NFDHDR_ENTRY; // =0x10 + +typedef struct { + char szFileID[15]; // 識別ID "T98HDDIMAGE.R0" + char Reserve1[1]; // 予約 + char szComment[0x100]; // イメージコメント(ASCIIz) + uint32_t dwHeadSize; // ヘッダ部のサイズ + uint32_t dwCylinder; // シリンダ数 + uint16_t wHead; // ヘッド数 + uint16_t wSect; // 1トラックあたりのセクタ数 + uint16_t wSectLen; // セクタ長 + char Reserve2[2]; // 予約 + char Reserve3[0xe0]; // 予約 +}NHD_FILE_HEAD,*LP_NHD_FILE_HEAD; +#pragma pack(pop) + +#define STOREINTELDWORD(a, b) *((a)+0) = (uint8_t)((b)); *((a)+1) = (uint8_t)((b)>>8); *((a)+2) = (uint8_t)((b)>>16); *((a)+3) = (uint8_t)((b)>>24) + +STATIC_ASSERT(sizeof(direntry) == sizeof(lfndirentry)); +enum +{ + DOS_ATTR_LONG_NAME = (DOS_ATTR_READ_ONLY | DOS_ATTR_HIDDEN | DOS_ATTR_SYSTEM | DOS_ATTR_VOLUME), + DOS_ATTR_LONG_NAME_MASK = (DOS_ATTR_READ_ONLY | DOS_ATTR_HIDDEN | DOS_ATTR_SYSTEM | DOS_ATTR_VOLUME | DOS_ATTR_DIRECTORY | DOS_ATTR_ARCHIVE), + DOS_ATTR_PENDING_SHORT_NAME = 0x80, +}; + +static const uint8_t hdddiskboot[] = { + 0xeb,0x0a,0x90,0x90,0x49,0x50,0x4c,0x31,0x00,0x00,0x00,0x1e, + 0xb8,0x04,0x0a,0xcd,0x18,0xb4,0x16,0xba,0x20,0xe1,0xcd,0x18, + 0xfa,0xfc,0xb8,0x00,0xa0,0x8e,0xc0,0xbe,0x3c,0x00,0x31,0xff, + 0xe8,0x09,0x00,0xbf,0xa0,0x00,0xe8,0x03,0x00,0xf4,0xeb,0xfd, + 0x2e,0xad,0x85,0xc0,0x74,0x05,0xab,0x47,0x47,0xeb,0xf5,0xc3, + 0x04,0x33,0x04,0x4e,0x05,0x4f,0x01,0x3c,0x05,0x49,0x05,0x47, + 0x05,0x23,0x05,0x39,0x05,0x2f,0x05,0x24,0x05,0x61,0x01,0x3c, + 0x05,0x38,0x04,0x4f,0x05,0x55,0x05,0x29,0x01,0x3c,0x05,0x5e, + 0x05,0x43,0x05,0x48,0x04,0x35,0x04,0x6c,0x04,0x46,0x04,0x24, + 0x04,0x5e,0x04,0x3b,0x04,0x73,0x01,0x25,0x00,0x00,0x05,0x47, + 0x05,0x23,0x05,0x39,0x05,0x2f,0x05,0x24,0x05,0x61,0x01,0x3c, + 0x05,0x38,0x04,0x72,0x21,0x5e,0x26,0x7e,0x18,0x65,0x01,0x24, + 0x05,0x6a,0x05,0x3b,0x05,0x43,0x05,0x48,0x04,0x37,0x04,0x46, + 0x12,0x3c,0x04,0x35,0x04,0x24,0x01,0x25,0x00,0x00, +}; + +struct fatFromDOSDrive +{ + DOS_Drive* drive; + + enum ffddDefs : uint32_t + { + BYTESPERSECTOR = 512, + HEADCOUNT = 255, // needs to be >128 to fit 4GB into CHS + SECTORSPERTRACK = 63, + SECT_MBR = 0, + SECT_BOOT = 32, + CACHECOUNT = 256, + KEEPOPENCOUNT = 8, + NULL_CURSOR = (uint32_t)-1, + }; + + partTable mbr; + bootstrap bootsec; + sector header; + sector ipl; + sector pt; + SASIHDD sasi; + uint8_t fatSz; + uint8_t fsinfosec[BYTESPERSECTOR]; + uint32_t sectorsPerCluster, codepage = 0; + bool tryconvcp = false, readOnly = false, success = false, tomany = false; + + struct ffddFile { char path[DOS_PATHLENGTH+1]; uint32_t firstSect; }; + std::vector root, dirs; + std::vector files; + std::vector fileAtSector; + std::vector fat; + uint32_t sect_boot_pc98, sect_disk_end, sect_files_end, sect_files_start, sect_dirs_start, sect_root_start, sect_fat2_start, sect_fat1_start; + + struct ffddBuf { uint8_t data[BYTESPERSECTOR]; }; + struct ffddSec { uint32_t cursor = NULL_CURSOR; }; + std::vector diffSectorBufs; + std::vector diffSectors; + std::vector diffFreeCursors; + uint32_t saveEndCursor = 0; + uint8_t cacheSectorData[CACHECOUNT][BYTESPERSECTOR]; + uint32_t cacheSectorNumber[CACHECOUNT]; + DOS_File* openFiles[KEEPOPENCOUNT]; + uint32_t openIndex[KEEPOPENCOUNT]; + uint32_t openCursor = 0; + + ~fatFromDOSDrive() + { + for (DOS_File* df : openFiles) + if (df) { df->Close(); delete df; } + } + + fatFromDOSDrive(DOS_Drive* drv, uint32_t freeMB, int timeout) : drive(drv) + { + cacheSectorNumber[0] = 1; // must not state that sector 0 is already cached + memset(&cacheSectorNumber[1], 0, sizeof(cacheSectorNumber) - sizeof(cacheSectorNumber[0])); + memset(openFiles, 0, sizeof(openFiles)); + + struct Iter + { + static void SetFAT(fatFromDOSDrive& ffdd, size_t idx, uint32_t val) + { + while (idx >= (uint64_t)ffdd.fat.size() * 8 / ffdd.fatSz) + { + // FAT12 table grows in steps of 3 sectors otherwise the table doesn't align + size_t addSz = (ffdd.fatSz != 12 ? BYTESPERSECTOR : (BYTESPERSECTOR * 3)); + ffdd.fat.resize(ffdd.fat.size() + addSz); + memset(&ffdd.fat[ffdd.fat.size() - addSz], 0, addSz); + } + if (ffdd.fatSz == 32) // FAT32 + var_write((uint32_t *)&ffdd.fat[idx * 4], val); + else if (ffdd.fatSz == 16) // FAT 16 + var_write((uint16_t *)&ffdd.fat[idx * 2], (uint16_t)val); + else if (idx & 1) // FAT12 odd cluster + var_write((uint16_t *)&ffdd.fat[idx + idx / 2], (uint16_t)((var_read((uint16_t *)&ffdd.fat[idx + idx / 2]) & 0xF) | ((val & 0xFFF) << 4))); + else // FAT12 even cluster + var_write((uint16_t *)&ffdd.fat[idx + idx / 2], (uint16_t)((var_read((uint16_t *)&ffdd.fat[idx + idx / 2]) & 0xF000) | (val & 0xFFF))); + } + + static direntry* AddDirEntry(fatFromDOSDrive& ffdd, bool useFAT16Root, size_t& diridx) + { + const uint32_t entriesPerCluster = ffdd.sectorsPerCluster * BYTESPERSECTOR / sizeof(direntry); + if (!useFAT16Root && (diridx % entriesPerCluster) == 0) + { + // link fat (was set to 0xFFFF before but now we knew the chain continues) + if (diridx) SetFAT(ffdd, 2 + (diridx - 1) / entriesPerCluster, (uint32_t)(2 + ffdd.dirs.size() / entriesPerCluster)); + diridx = ffdd.dirs.size(); + ffdd.dirs.resize(diridx + entriesPerCluster); + memset(&ffdd.dirs[diridx], 0, sizeof(direntry) * entriesPerCluster); + SetFAT(ffdd, 2 + diridx / entriesPerCluster, (uint32_t)0xFFFFFFFF); // set as last cluster in chain for now + } + else if (useFAT16Root && diridx && (diridx % 512) == 0) + { + // this actually should never be larger than 512 for some FAT16 drivers + ffdd.root.resize(diridx + 512); + memset(&ffdd.root[diridx], 0, sizeof(direntry) * 512); + } + return &(!useFAT16Root ? ffdd.dirs : ffdd.root)[diridx++]; + } + + static void ParseDir(fatFromDOSDrive& ffdd, char* dir, const StringToPointerHashMap* filter, int dirlen = 0, uint16_t parentFirstCluster = 0) + { + if (ffdd.tomany) return; + const bool useFAT16Root = (!dirlen && ffdd.fatSz != 32), readOnly = ffdd.readOnly; + const size_t firstidx = (!useFAT16Root ? ffdd.dirs.size() : 0); + const uint32_t sectorsPerCluster = ffdd.sectorsPerCluster, bytesPerCluster = sectorsPerCluster * BYTESPERSECTOR, entriesPerCluster = bytesPerCluster / sizeof(direntry); + const uint16_t myFirstCluster = (dirlen ? (uint16_t)(2 + firstidx / entriesPerCluster) : (uint16_t)0) ; + + char finddir[DOS_PATHLENGTH+4]; + memcpy(finddir, dir, dirlen); // because FindFirst can modify this... + finddir[dirlen] = '\0'; + if (dirlen) dir[dirlen++] = '\\'; + + size_t diridx = 0; + RealPt save_dta = dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + dta.SetupSearch(255, 0xFF, (char*)"*.*"); + skipintprog = true; + for (bool more = ffdd.drive->FindFirst(finddir, dta); more; more = ffdd.drive->FindNext(dta)) + { + char dta_name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH+1]; uint32_t dta_size, dta_hsize; uint16_t dta_date, dta_time; uint8_t dta_attr; + dta.GetResult(dta_name, lname, dta_size, dta_hsize, dta_date, dta_time, dta_attr); + //LOG_MSG("dta_name %s lname %s\n", dta_name, lname); + const char *fend = dta_name + strlen(dta_name); + const bool dot = (dta_name[0] == '.' && dta_name[1] == '\0'), dotdot = (dta_name[0] == '.' && dta_name[1] == '.' && dta_name[2] == '\0'); + if (!dirlen && (dot || dotdot)) continue; // root shouldn't have dot entries (yet localDrive does...) + + ffddFile f; + memcpy(f.path, dir, dirlen); + memcpy(f.path + dirlen, dta_name, fend - dta_name + 1); + if (filter && filter->Get(f.path, sizeof(f.path))) continue; + + const bool isLongFileName = (!dot && !dotdot && !(dta_attr & DOS_ATTR_VOLUME)); + if (isLongFileName) + { + bool lead = false; + size_t len = 0, lfnlen = strlen(lname); + uint16_t *lfnw = (uint16_t *)malloc((lfnlen + 1) * sizeof(uint16_t)); + if (lfnw == NULL) continue; + char text[3]; + uint16_t uname[4]; +#if defined(WIN32) + uint16_t cp = GetACP(), cpbak = dos.loaded_codepage; + if (tryconvertcp && cpbak == 437 && CheckDBCSCP(cp)) + dos.loaded_codepage = cp; +#endif + for (size_t i=0; i < lfnlen; i++) { + if (lead) { + lead = false; + text[0]=lname[i-1]&0xFF; + text[1]=lname[i]&0xFF; + text[2]=0; + uname[0]=0; + uname[1]=0; + if (CodePageGuestToHostUTF16(uname,text)&&uname[0]!=0&&uname[1]==0) + lfnw[len++] = uname[0]; + else { + lfnw[len++] = lname[i-1]; + lfnw[len++] = lname[i]; + } + } else if (i+1ord = (uint8_t)((lfnblocks - i)|(i == 0 ? 0x40 : 0x0)); + le->attrib = DOS_ATTR_LONG_NAME; + le->type = 0; + le->loFirstClust = 0; + uint16_t* plfn = lfnw + (lfnblocks - i - 1) * 13; + for (int j = 0; j != 13; j++, plfn++) + { + char* p = le->Name(j); + if (plfn > lfn_end) + p[0] = p[1] = (char)0xFF; + else if (plfn == lfn_end) + p[0] = p[1] = 0; + else if (*plfn > 0xFF) { + p[0] = (uint8_t)(*plfn%0x100); + p[1] = (uint8_t)(*plfn/0x100); + } else { + p[0] = *plfn; + p[1] = 0; + } + } + } + free(lfnw); + } + + const char *fext = (dot || dotdot ? NULL : strrchr(dta_name, '.')); + direntry* e = AddDirEntry(ffdd, useFAT16Root, diridx); + memset(e->entryname, ' ', sizeof(e->entryname)); + memcpy(e->entryname, dta_name, (fext ? fext : fend) - dta_name); + if (fext++) memcpy(e->entryname + 8, fext, fend - fext); + + e->attrib = dta_attr | (readOnly ? DOS_ATTR_READ_ONLY : 0) | (isLongFileName ? DOS_ATTR_PENDING_SHORT_NAME : 0); + if (dos.version.major >= 7) { + var_write(&e->crtTime, dta_time); // create date/time is DOS 7.0 and up only + var_write(&e->crtDate, dta_date); // create date/time is DOS 7.0 and up only + } + var_write(&e->accessDate, dta_date); + var_write(&e->modTime, dta_time); + var_write(&e->modDate, dta_date); + + if (dot) + { + e->attrib |= DOS_ATTR_DIRECTORY; // make sure + var_write(&e->loFirstClust, myFirstCluster); + } + else if (dotdot) + { + e->attrib |= DOS_ATTR_DIRECTORY; // make sure + var_write(&e->loFirstClust, parentFirstCluster); + } + else if (dta_attr & DOS_ATTR_VOLUME) + { + if (dirlen || (e->attrib & DOS_ATTR_DIRECTORY) || dta_size) + LOG_MSG("Invalid volume entry - %s\n", e->entryname); + } + else if (!(dta_attr & DOS_ATTR_DIRECTORY)) + { + var_write(&e->entrysize, dta_size); + + uint32_t fileIdx = (uint32_t)ffdd.files.size(); + ffdd.files.push_back(f); + + uint32_t numSects = (dta_size + bytesPerCluster - 1) / bytesPerCluster * sectorsPerCluster; + try { + ffdd.fileAtSector.resize(ffdd.fileAtSector.size() + numSects, fileIdx); + } catch (...) { + LOG_MSG("Too many sectors needed, will discard remaining files (from %s)", lname); + ffdd.tomany = ffdd.readOnly = true; + var_write((uint32_t *)&ffdd.fsinfosec[488], (uint32_t)0x0); + break; + } + } + } + skipintprog = false; + dos.dta(save_dta); + if (dirlen && diridx < firstidx + 2) { + LOG_MSG("Directory need at least . and .. entries - %s\n", finddir); + return; + } + + // Now fill out the subdirectories (can't be done above because only one dos.dta can run simultaneously + std::vector& entries = (!useFAT16Root ? ffdd.dirs : ffdd.root); + for (size_t ei = firstidx; ei != diridx; ei++) + { + direntry& e = entries[ei]; + uint8_t* entryname = e.entryname; + int totlen = dirlen; + if (e.attrib & DOS_ATTR_DIRECTORY) // copy name before modifying SFN + { + if (entryname[0] == '.' && entryname[entryname[1] == '.' ? 2 : 1] == ' ') continue; + for (int i = 0; i != 8 && entryname[i] != ' '; i++) dir[totlen++] = entryname[i]; + if (entryname[8] != ' ') dir[totlen++] = '.'; + for (int i = 8; i != 11 && entryname[i] != ' '; i++) dir[totlen++] = entryname[i]; + } + if (e.attrib & DOS_ATTR_PENDING_SHORT_NAME) // convert LFN to SFN + { + uint8_t chksum = 0; + for (int i = 0; i != 11;) chksum = (chksum >> 1) + (chksum << 7) + e.entryname[i++]; + for (lfndirentry* le = (lfndirentry*)&e; le-- == (lfndirentry*)&e || !(le[1].ord & 0x40);) le->chksum = chksum; + e.attrib &= ~DOS_ATTR_PENDING_SHORT_NAME; + } + if (e.attrib & DOS_ATTR_DIRECTORY) // this reallocates ffdd.dirs so do this last + { + var_write(&e.loFirstClust, (uint16_t)(2 + ffdd.dirs.size() / entriesPerCluster)); + ParseDir(ffdd, dir, filter, totlen, myFirstCluster); + } + } + } + + struct SumInfo { uint64_t used_bytes; const StringToPointerHashMap* filter; }; + static void SumFileSize(const char* path, bool /*is_dir*/, uint32_t size, uint16_t, uint16_t, uint8_t, Bitu data) + { + if (!((SumInfo*)data)->filter || !((SumInfo*)data)->filter->Get(path)) + ((SumInfo*)data)->used_bytes += (size + (32*1024-1)) / (32*1024) * (32*1024); // count as 32 kb clusters + } + }; + + drv->EmptyCache(); + Iter::SumInfo sum = { 0, NULL }; + uint64_t freeSpace = 0, freeSpaceMB = 0; + uint32_t free_clusters = 0; + uint16_t drv_bytes_sector; uint8_t drv_sectors_cluster; uint16_t drv_total_clusters, drv_free_clusters; + rsize=true; + freec=0; + drv->AllocationInfo(&drv_bytes_sector, &drv_sectors_cluster, &drv_total_clusters, &drv_free_clusters); + free_clusters = freec?freec:drv_free_clusters; + freeSpace = (uint64_t)drv_bytes_sector * drv_sectors_cluster * (freec?freec:free_clusters); + freeSpaceMB = freeSpace / (1024*1024); + if (freeMB < freeSpaceMB) freeSpaceMB = freeMB; + rsize=false; + tomany=false; + readOnly = free_clusters == 0 || freeSpaceMB == 0; + if (!DriveFileIterator(drv, Iter::SumFileSize, (Bitu)&sum, timeout)) return; + + uint32_t usedMB = sum.used_bytes / (1024*1024), addFreeMB, totalMB, tsizeMB; + uint64_t tsize = 0; + if (IS_PC98_ARCH) { + if (usedMB < 6) { + sasi.sectors = 33; + sasi.surfaces = 4; + sasi.cylinders = 153; + } else if (usedMB < 16) { + sasi.sectors = 33; + sasi.surfaces = 4; + sasi.cylinders = 310; + } else if (usedMB < 26) { + sasi.sectors = 33; + sasi.surfaces = 6; + sasi.cylinders = 310; + } else if (usedMB < 36) { + sasi.sectors = 33; + sasi.surfaces = 8; + sasi.cylinders = 310; + } else { + sasi.sectors = 33; + uint32_t heads = std::ceil((double)(usedMB+(readOnly?0:(usedMB>=2047?freeSpaceMB:5)))/10); + if (heads > 255) { + sasi.surfaces = 255; + sasi.cylinders = heads * 615 / 255; + } else { + sasi.surfaces = heads; + sasi.cylinders = 615; + } + } + tsize = BYTESPERSECTOR * sasi.sectors * sasi.surfaces * sasi.cylinders; + tsizeMB = sasi.sectors * sasi.surfaces * sasi.cylinders / (1024 * 1024 / BYTESPERSECTOR); + if (tsizeMB < usedMB) readOnly = true; + addFreeMB = readOnly ? 0 : (usedMB >= 2047 ? freeSpaceMB : (std::ceil((double)tsize - sum.used_bytes) / (1024 * 1024) + 1)); + } else + addFreeMB = (readOnly ? 0 : freeSpaceMB); + totalMB = usedMB + (addFreeMB ? (1 + addFreeMB) : 0); + if (totalMB >= 3072) { fatSz = 32; sectorsPerCluster = 64; } // 32 kb clusters ( 98304 ~ FAT entries) + else if (totalMB >= 2048) { fatSz = 32; sectorsPerCluster = 32; } // 16 kb clusters (131072 ~ 196608 FAT entries) + else if (totalMB >= 384) { fatSz = 16; sectorsPerCluster = 64; } // 32 kb clusters ( 12288 ~ 65504 FAT entries) + else if (totalMB >= 192) { fatSz = 16; sectorsPerCluster = 32; } // 16 kb clusters ( 12288 ~ 24576 FAT entries) + else if (totalMB >= 96) { fatSz = 16; sectorsPerCluster = 16; } // 8 kb clusters ( 12288 ~ 24576 FAT entries) + else if (totalMB >= 48) { fatSz = 16; sectorsPerCluster = 8; } // 4 kb clusters ( 12288 ~ 24576 FAT entries) + else if (totalMB >= 12) { fatSz = 16; sectorsPerCluster = 4; } // 2 kb clusters ( 6144 ~ 24576 FAT entries) + else if (totalMB >= 4) { fatSz = 16; sectorsPerCluster = 1; } // .5 kb clusters ( 8192 ~ 24576 FAT entries) + else if (totalMB >= 2) { fatSz = 12; sectorsPerCluster = 4; } // 2 kb clusters ( 1024 ~ 2048 FAT entries) + else if (totalMB >= 1) { fatSz = 12; sectorsPerCluster = 2; } // 1 kb clusters ( 1024 ~ 2048 FAT entries) + else { fatSz = 12; sectorsPerCluster = 1; } // .5 kb clusters ( ~ 2048 FAT entries) + + // mediadescriptor in very first byte of FAT table + Iter::SetFAT(*this, 0, (uint32_t)0xFFFFFF8); + Iter::SetFAT(*this, 1, (uint32_t)0xFFFFFFF); + + if (fatSz != 32) + { + // this actually should never be anything but 512 for some FAT16 drivers + root.resize(512); + memset(&root[0], 0, sizeof(direntry) * 512); + } + + char dirbuf[DOS_PATHLENGTH+4]; + Iter::ParseDir(*this, dirbuf, NULL); + + const uint32_t bytesPerCluster = sectorsPerCluster * BYTESPERSECTOR; + const uint32_t entriesPerCluster = bytesPerCluster / sizeof(direntry); + uint32_t fileCluster = (uint32_t)(2 + dirs.size() / entriesPerCluster); + for (uint32_t fileSect = 0, rootOrDir = 0; rootOrDir != 2; rootOrDir++) + { + for (direntry& e : (rootOrDir ? dirs : root)) + { + if (!e.entrysize || (e.attrib & DOS_ATTR_LONG_NAME_MASK) == DOS_ATTR_LONG_NAME) continue; + var_write(&e.hiFirstClust, (uint16_t)(fileCluster >> 16)); + var_write(&e.loFirstClust, (uint16_t)(fileCluster)); + + // Write FAT link chain + uint32_t numClusters = (var_read(&e.entrysize) + bytesPerCluster - 1) / bytesPerCluster; + for (uint32_t i = fileCluster, iEnd = i + numClusters - 1; i != iEnd; i++) Iter::SetFAT(*this, i, i + 1); + Iter::SetFAT(*this, fileCluster + numClusters - 1, (uint32_t)0xFFFFFFF); + + files[fileAtSector[fileSect]].firstSect = fileSect; + + fileCluster += numClusters; + fileSect += numClusters * sectorsPerCluster; + } + } + + if (IS_PC98_ARCH) { + HDIHDR hdi; + memset(&hdi, 0, sizeof(hdi)); + // STOREINTELDWORD(hdi.hddtype, 0); + STOREINTELDWORD(hdi.headersize, 4096); + STOREINTELDWORD(hdi.hddsize, (uint32_t)tsize); + STOREINTELDWORD(hdi.sectorsize, BYTESPERSECTOR); + STOREINTELDWORD(hdi.sectors, sasi.sectors); + STOREINTELDWORD(hdi.surfaces, sasi.surfaces); + STOREINTELDWORD(hdi.cylinders, sasi.cylinders); + memset(&header, 0, sizeof(header)); + memcpy(&header,&hdi,sizeof(hdi)); + memset(&ipl, 0, sizeof(ipl)); + memcpy(&ipl,&hdddiskboot,sizeof(hdddiskboot)); + ipl.content[0xFE] = 0x55; + ipl.content[0xFF] = 0xaa; + ipl.content[0x1FE] = 0x55; + ipl.content[0x1FF] = 0xaa; + struct _PC98RawPartition pe; + memset(&pe, 0, sizeof(pe)); + STOREINTELDWORD(&pe.mid, 0xa0); + STOREINTELDWORD(&pe.sid, 0xa1); + STOREINTELDWORD(&pe.ipl_cyl, 1); + STOREINTELDWORD(&pe.cyl, 1); + STOREINTELDWORD(&pe.end_cyl, sasi.cylinders); + strncpy(pe.name, "MS-DOS ", 16); + memset(&pt, 0, sizeof(pt)); + memcpy(&pt,&pe,sizeof(pe)); + } + + // Add at least one page after the last file or FAT spec minimum to make ScanDisk happy (even on read-only disks) + const uint32_t FATPageClusters = BYTESPERSECTOR * 8 / fatSz, FATMinCluster = (fatSz == 32 ? 65525 : (fatSz == 16 ? 4085 : 0)) + FATPageClusters; + const uint32_t addFreeClusters = ((addFreeMB * (1024*1024/BYTESPERSECTOR)) + sectorsPerCluster - 1) / sectorsPerCluster; + const uint32_t targetClusters = fileCluster + (addFreeClusters < FATPageClusters ? FATPageClusters : addFreeClusters); + Iter::SetFAT(*this, (targetClusters < FATMinCluster ? FATMinCluster : targetClusters) - 1, 0); + const uint32_t totalClusters = (uint32_t)((uint64_t)fat.size() * 8 / fatSz); // as set by Iter::SetFAT + + // on read-only disks, fill up the end of the FAT table with "Bad sector in cluster or reserved cluster" markers + if (readOnly) + for (uint32_t cluster = fileCluster; cluster != totalClusters; cluster++) + Iter::SetFAT(*this, cluster, 0xFFFFFF7); + + const uint32_t sectorsPerFat = (uint32_t)(fat.size() / BYTESPERSECTOR); + const uint16_t reservedSectors = (fatSz == 32 ? 32 : 1); + const uint32_t partSize = totalClusters * sectorsPerCluster + reservedSectors; + + sect_boot_pc98 = sasi.surfaces * sasi.sectors; + sect_fat1_start = (IS_PC98_ARCH ? sect_boot_pc98 : SECT_BOOT) + reservedSectors; + sect_fat2_start = sect_fat1_start + sectorsPerFat; + sect_root_start = sect_fat2_start + sectorsPerFat; + sect_dirs_start = sect_root_start + ((root.size() * sizeof(direntry) + BYTESPERSECTOR - 1) / BYTESPERSECTOR); + sect_files_start = sect_dirs_start + ((dirs.size() * sizeof(direntry) + BYTESPERSECTOR - 1) / BYTESPERSECTOR); + sect_files_end = sect_files_start + fileAtSector.size(); + sect_disk_end = (IS_PC98_ARCH ? sect_boot_pc98 : SECT_BOOT) + partSize; + if (IS_PC98_ARCH && tsize/BYTESPERSECTOR-8 > sect_disk_end) sect_disk_end = tsize/BYTESPERSECTOR-8; + if (sect_disk_end < sect_files_end) return; + + for (ffddFile& f : files) + f.firstSect += sect_files_start; + + uint32_t serial = 0; + if (!serial) + { + serial = DriveCalculateCRC32(&fat[0], fat.size(), 0); + if (root.size()) serial = DriveCalculateCRC32((uint8_t*)&root[0], root.size() * sizeof(direntry), serial); + if (dirs.size()) serial = DriveCalculateCRC32((uint8_t*)&dirs[0], dirs.size() * sizeof(direntry), serial); + } + + memset(&mbr, 0, sizeof(mbr)); + //memcpy(&mbr,freedos_mbr,512); + var_write((uint32_t *)&mbr.booter[440], serial); //4 byte disk serial number + var_write(&mbr.pentry[0].bootflag, 0x80); //Active bootable + if ((sect_disk_end - 1) / (HEADCOUNT * SECTORSPERTRACK) > 0x3FF) + { + mbr.pentry[0].beginchs[0] = mbr.pentry[0].beginchs[1] = mbr.pentry[0].beginchs[2] = 0; + mbr.pentry[0].endchs[0] = mbr.pentry[0].endchs[1] = mbr.pentry[0].endchs[2] = 0; + } + else + { + chs_write(mbr.pentry[0].beginchs, IS_PC98_ARCH ? sect_boot_pc98 : SECT_BOOT); + chs_write(mbr.pentry[0].endchs, sect_disk_end - 1); + } + var_write(&mbr.pentry[0].absSectStart, IS_PC98_ARCH ? sect_boot_pc98 : SECT_BOOT); + var_write(&mbr.pentry[0].partSize, partSize); + mbr.magic1 = 0x55; mbr.magic2 = 0xaa; + + memset(&bootsec, 0, sizeof(bootsec)); + memcpy(bootsec.nearjmp, "\xEB\x3C\x90", sizeof(bootsec.nearjmp)); + memcpy(bootsec.oemname, fatSz == 32 ? "MSWIN4.1" : "MSDOS5.0", sizeof(bootsec.oemname)); + var_write((uint16_t *)&bootsec.bytespersector, (uint16_t)BYTESPERSECTOR); + var_write(&bootsec.sectorspercluster, sectorsPerCluster); + var_write(&bootsec.reservedsectors, reservedSectors); + var_write(&bootsec.fatcopies, 2); + var_write(&bootsec.totalsectorcount, 0); // 16 bit field is 0, actual value is in totalsecdword + var_write(&bootsec.mediadescriptor, 0xF8); //also in FAT[0] + var_write(&bootsec.sectorspertrack, IS_PC98_ARCH ? sasi.sectors : SECTORSPERTRACK); + var_write(&bootsec.headcount, IS_PC98_ARCH ? sasi.surfaces : HEADCOUNT); + var_write(&bootsec.hiddensectorcount, IS_PC98_ARCH ? sect_boot_pc98 : SECT_BOOT); + var_write(&bootsec.totalsecdword, partSize); + bootsec.magic1 = 0x55; bootsec.magic2 = 0xaa; + if (fatSz != 32) // FAT12/FAT16 + { + var_write(&mbr.pentry[0].parttype, (fatSz == 12 ? 0x01 : (sect_disk_end < 65536 ? 0x04 : 0x06))); // FAT12/16 + var_write(&bootsec.rootdirentries, (uint16_t)root.size()); + var_write(&bootsec.sectorsperfat, (uint16_t)sectorsPerFat); + bootsec.bootcode[0] = 0x80; //Physical drive (harddisk) flag + bootsec.bootcode[2] = 0x29; //Extended boot signature + var_write((uint32_t *)&bootsec.bootcode[3], serial + 1); //4 byte partition serial number + memcpy(&bootsec.bootcode[7], "NO NAME ", 11); // volume label + memcpy(&bootsec.bootcode[18], "FAT1 ", 8); // file system string name + bootsec.bootcode[22] = (char)('0' + (fatSz % 10)); // '2' or '6' + } + else // FAT32 + { + var_write(&mbr.pentry[0].parttype, 0x0C); //FAT32 + var_write((uint32_t *)&bootsec.bootcode[0], sectorsPerFat); + var_write((uint32_t *)&bootsec.bootcode[8], (uint32_t)2); // First cluster number of the root directory + var_write((uint16_t *)&bootsec.bootcode[12], (uint16_t)1); // Sector of FSInfo structure in offset from top of the FAT32 volume + var_write((uint16_t *)&bootsec.bootcode[14], (uint16_t)6); // Sector of backup boot sector in offset from top of the FAT32 volume + bootsec.bootcode[28] = 0x80; //Physical drive (harddisk) flag + bootsec.bootcode[30] = 0x29; //Extended boot signature + var_write((uint32_t *)&bootsec.bootcode[31], serial + 1); //4 byte partition serial number + memcpy(&bootsec.bootcode[35], "NO NAME ", 11); // volume label + memcpy(&bootsec.bootcode[46], "FAT32 ", 8); // file system string name + + memset(fsinfosec, 0, sizeof(fsinfosec)); + var_write((uint32_t *)&fsinfosec[0], (uint32_t)0x41615252); //lead signature + var_write((uint32_t *)&fsinfosec[484], (uint32_t)0x61417272); //Another signature + bool ver71 = dos.version.major > 7 || (dos.version.major == 7 && dos.version.minor >= 10); + //Bitu freeclusters = readOnly ? 0x0 : (ver71 ? (Bitu)freeSpace / (BYTESPERSECTOR * sectorsPerCluster) : 0xFFFFFFFF); + Bitu freeclusters = readOnly ? 0x0 : (ver71 ? (Bitu)((sect_disk_end - sect_files_end) / sectorsPerCluster): 0xFFFFFFFF); + var_write((uint32_t *)&fsinfosec[488], (uint32_t)(freeclusters < 0xFFFFFFFF ? freeclusters : 0xFFFFFFFF)); //last known free cluster count (all FF is unknown) + var_write((uint32_t *)&fsinfosec[492], (ver71 ? (sect_files_end / sectorsPerCluster): 0xFFFFFFFF)); //the cluster number at which the driver should start looking for free clusters (all FF is unknown) + var_write((uint32_t *)&fsinfosec[508], 0xAA550000); //ending signature + } + + codepage = dos.loaded_codepage; + tryconvcp = tryconvertcp>0; + success = true; + } + + static void chs_write(uint8_t* chs, uint32_t lba) + { + uint32_t cylinder = lba / (HEADCOUNT * SECTORSPERTRACK); + uint32_t head = (lba / SECTORSPERTRACK) % HEADCOUNT; + uint32_t sector = (lba % SECTORSPERTRACK) + 1; + if (head > 0xFF || sector > 0x3F || cylinder > 0x3FF) + LOG_MSG("Warning: Invalid CHS data - %X, %X, %X\n", head, sector, cylinder); + chs[0] = (uint8_t)(head & 0xFF); + chs[1] = (uint8_t)((sector & 0x3F) | ((cylinder >> 8) & 0x3)); + chs[2] = (uint8_t)(cylinder & 0xFF); + } + + uint8_t WriteSector(uint32_t sectnum, const void* data) + { _driveUsed = true; - uint32_t sectorHash = sectnum % CACHECOUNT; - void *cachedata = cacheSectorData[sectorHash]; - if (cacheSectorNumber[sectorHash] == sectnum) - { - memcpy(data, cachedata, BYTESPERSECTOR); - return 0; - } - cacheSectorNumber[sectorHash] = sectnum; - - void *src; - uint32_t cursor = (sectnum >= diffSectors.size() ? NULL_CURSOR : diffSectors[sectnum].cursor); - if (cursor != NULL_CURSOR) - src = diffSectorBufs[cursor].data; - else - src = GetUnmodifiedSector(sectnum, cachedata); - - if (src) memcpy(data, src, BYTESPERSECTOR); - else memset(data, 0, BYTESPERSECTOR); - if (src != cachedata) memcpy(cachedata, data, BYTESPERSECTOR); - return 0; - } - - bool SaveImage(const char *name) - { - FILE* f = fopen_wrap(name, "wb"); - if (f) { - uint8_t filebuf[BYTESPERSECTOR]; - if (IS_PC98_ARCH) { - memcpy(filebuf, &header, BYTESPERSECTOR); - if (fwrite(filebuf, 1, BYTESPERSECTOR, f) != BYTESPERSECTOR) {fclose(f);return false;} - memset(filebuf, 0, BYTESPERSECTOR); - for (int i = 0; i < 7; i++) - if (fwrite(filebuf, 1, BYTESPERSECTOR, f) != BYTESPERSECTOR) {fclose(f);return false;} - } - for (unsigned int i = 0; i < sect_disk_end; i++) { - ReadSector(i, filebuf); - if (fwrite(filebuf, 1, BYTESPERSECTOR, f) != BYTESPERSECTOR) { - fclose(f); - return false; - } - } - fclose(f); - return true; - } else - return false; - } - }; - - bool saveDiskImage(imageDisk *image, const char *name) { - return image && image->ffdd && image->ffdd->SaveImage(name); - } - - diskGeo DiskGeometryList[] = { - { 160, 8, 1, 40, 0, 512, 64, 1, 0xFE}, // IBM PC double density 5.25" single-sided 160KB - { 180, 9, 1, 40, 0, 512, 64, 1, 0xFC}, // IBM PC double density 5.25" single-sided 180KB - { 200, 10, 1, 40, 0, 512, 64, 2, 0xFC}, // DEC Rainbow double density 5.25" single-sided 200KB (I think...) - { 320, 8, 2, 40, 1, 512, 112, 2, 0xFF}, // IBM PC double density 5.25" double-sided 320KB - { 360, 9, 2, 40, 1, 512, 112, 2, 0xFD}, // IBM PC double density 5.25" double-sided 360KB - { 400, 10, 2, 40, 1, 512, 112, 2, 0xFD}, // DEC Rainbow double density 5.25" double-sided 400KB (I think...) - { 640, 8, 2, 80, 3, 512, 112, 2, 0xFB}, // IBM PC double density 3.5" double-sided 640KB - { 720, 9, 2, 80, 3, 512, 112, 2, 0xF9}, // IBM PC double density 3.5" double-sided 720KB - {1200, 15, 2, 80, 2, 512, 224, 1, 0xF9}, // IBM PC double density 5.25" double-sided 1.2MB - {1440, 18, 2, 80, 4, 512, 224, 1, 0xF0}, // IBM PC high density 3.5" double-sided 1.44MB - {1680, 21, 2, 80, 4, 512, 16, 4, 0xF0}, // IBM PC high density 3.5" double-sided 1.68MB (DMF) - {2880, 36, 2, 80, 6, 512, 240, 2, 0xF0}, // IBM PC high density 3.5" double-sided 2.88MB - - {1232, 8, 2, 77, 7, 1024,192, 1, 0xFE}, // NEC PC-98 high density 3.5" double-sided 1.2MB "3-mode" - {1520, 19, 2, 80, 2, 512, 224, 1, 0xF9}, // IBM PC high density 5.25" double-sided 1.52MB (XDF) - {1840, 23, 2, 80, 4, 512, 224, 1, 0xF0}, // IBM PC high density 3.5" double-sided 1.84MB (XDF) - - { 0, 0, 0, 0, 0, 0, 0, 0, 0} - }; - - Bitu call_int13 = 0; - Bitu diskparm0 = 0, diskparm1 = 0; - static uint8_t last_status; - static uint8_t last_drive; - uint16_t imgDTASeg; - RealPt imgDTAPtr; - DOS_DTA *imgDTA; - bool killRead; - static bool swapping_requested; - - void CMOS_SetRegister(Bitu regNr, uint8_t val); //For setting equipment word - - /* 2 floppies and 2 harddrives, max */ - bool imageDiskChange[MAX_DISK_IMAGES]={false}; - imageDisk *imageDiskList[MAX_DISK_IMAGES]={NULL}; - imageDisk *diskSwap[MAX_SWAPPABLE_DISKS]={NULL}; - int32_t swapPosition; - - imageDisk *GetINT13FloppyDrive(unsigned char drv) { - if (drv >= 2) - return NULL; - return imageDiskList[drv]; - } - - imageDisk *GetINT13HardDrive(unsigned char drv) { - if (drv < 0x80 || drv >= (0x80+MAX_DISK_IMAGES-2)) - return NULL; - - return imageDiskList[drv-0x80]; - } - - void FreeBIOSDiskList() { - for (int i=0;i < MAX_DISK_IMAGES;i++) { - if (imageDiskList[i] != NULL) { - if (i >= 2) IDE_Hard_Disk_Detach(i); - imageDiskList[i]->Release(); - imageDiskList[i] = NULL; - } - } - - for (int j=0;j < MAX_SWAPPABLE_DISKS;j++) { - if (diskSwap[j] != NULL) { - diskSwap[j]->Release(); - diskSwap[j] = NULL; - } - } - } - - //update BIOS disk parameter tables for first two hard drives - void updateDPT(void) { - uint32_t tmpheads, tmpcyl, tmpsect, tmpsize; - PhysPt dpphysaddr[2] = { CALLBACK_PhysPointer(diskparm0), CALLBACK_PhysPointer(diskparm1) }; - for (int i = 0; i < 2; i++) { - tmpheads = 0; tmpcyl = 0; tmpsect = 0; tmpsize = 0; - if (imageDiskList[i + 2] != NULL) { - imageDiskList[i + 2]->Get_Geometry(&tmpheads, &tmpcyl, &tmpsect, &tmpsize); - } - phys_writew(dpphysaddr[i], (uint16_t)tmpcyl); - phys_writeb(dpphysaddr[i] + 0x2, (uint8_t)tmpheads); - phys_writew(dpphysaddr[i] + 0x3, 0); - phys_writew(dpphysaddr[i] + 0x5, tmpcyl == 0 ? 0 : (uint16_t)-1); - phys_writeb(dpphysaddr[i] + 0x7, 0); - phys_writeb(dpphysaddr[i] + 0x8, tmpcyl == 0 ? 0 : (0xc0 | ((tmpheads > 8) << 3))); - phys_writeb(dpphysaddr[i] + 0x9, 0); - phys_writeb(dpphysaddr[i] + 0xa, 0); - phys_writeb(dpphysaddr[i] + 0xb, 0); - phys_writew(dpphysaddr[i] + 0xc, (uint16_t)tmpcyl); - phys_writeb(dpphysaddr[i] + 0xe, (uint8_t)tmpsect); - } - } - - void incrementFDD(void) { - uint16_t equipment=mem_readw(BIOS_CONFIGURATION); - if(equipment&1) { - Bitu numofdisks = (equipment>>6)&3; - numofdisks++; - if(numofdisks > 1) numofdisks=1;//max 2 floppies at the moment - equipment&=~0x00C0; - equipment|=(numofdisks<<6); - } else equipment|=1; - mem_writew(BIOS_CONFIGURATION,equipment); - if(IS_EGAVGA_ARCH) equipment &= ~0x30; //EGA/VGA startup display mode differs in CMOS - CMOS_SetRegister(0x14, (uint8_t)(equipment&0xff)); - } - - int swapInDisksSpecificDrive = -1; - // -1 = swap across A: and B: (DOSBox / DOSBox-X default behavior) - // 0 = swap across A: only - // 1 = swap across B: only - - void swapInDisks(int drive) { - bool allNull = true; - int32_t diskcount = 0; - Bits diskswapcount = 2; - Bits diskswapdrive = 0; - int32_t swapPos = swapPosition; - int32_t i; - - /* Check to make sure that there is at least one setup image */ - for(i=0;i= 0 && swapInDisksSpecificDrive <= 1 && (drive == -1 || drive == swapInDisksSpecificDrive)) { - diskswapdrive = swapInDisksSpecificDrive; - diskswapcount = 1; - } else if (swapInDisksSpecificDrive != -1 || drive != -1) /* Swap A: and B: drives */ - return; - - /* If only one disk is loaded, this loop will load the same disk in dive A and drive B */ - while(diskcount < diskswapcount) { - if(diskSwap[swapPos] != NULL) { - LOG_MSG("Loaded drive %d disk %d from swaplist position %d - \"%s\"", (int)diskswapdrive, (int)diskcount, (int)swapPos, diskSwap[swapPos]->diskname.c_str()); - - if (imageDiskList[diskswapdrive] != NULL) - imageDiskList[diskswapdrive]->Release(); - - imageDiskList[diskswapdrive] = diskSwap[swapPos]; - imageDiskList[diskswapdrive]->Addref(); - - imageDiskChange[diskswapdrive] = true; - - diskcount++; - diskswapdrive++; - } - - swapPos++; - if(swapPos>=MAX_SWAPPABLE_DISKS) swapPos=0; - } - } - - bool getSwapRequest(void) { - bool sreq=swapping_requested; - swapping_requested = false; - return sreq; - } - - void swapInDrive(int drive, unsigned int position=0) { - #if 0 /* FIX_ME: Disabled to swap CD by IMGSWAP command (Issue #4932). Revert this if any regression occurs */ - //if (drive>1||swapInDisksSpecificDrive!=drive) return; - #endif - swapPosition = position; + if (sectnum >= sect_disk_end) return 1; + if (sectnum == SECT_MBR) + { + // Windows 9x writes the disk timestamp into the booter area on startup. + // Just copy that part over so it doesn't get treated as a difference that needs to be stored. + memcpy(mbr.booter, data, sizeof(mbr.booter)); + } + + if (readOnly) return 0; // just return without error to avoid bluescreens in Windows 9x + + if (sectnum >= diffSectors.size()) diffSectors.resize(sectnum + 128); + uint32_t *cursor_ptr = &diffSectors[sectnum].cursor, cursor_val = *cursor_ptr; + + int is_different; + uint8_t filebuf[BYTESPERSECTOR]; + void* unmodified = GetUnmodifiedSector(sectnum, filebuf); + if (!unmodified) + { + is_different = false; // to be equal it must be filled with zeroes + for (uint64_t* p = (uint64_t*)data, *pEnd = p + (BYTESPERSECTOR / sizeof(uint64_t)); p != pEnd; p++) + if (*p) { is_different = true; break; } + } + else is_different = memcmp(unmodified, data, BYTESPERSECTOR); + + if (is_different) + { + if (cursor_val == NULL_CURSOR && diffFreeCursors.size()) + { + *cursor_ptr = cursor_val = diffFreeCursors.back(); + diffFreeCursors.pop_back(); + } + if (cursor_val == NULL_CURSOR) + { + *cursor_ptr = cursor_val = (uint32_t)diffSectorBufs.size(); + diffSectorBufs.resize(cursor_val + 1); + } + memcpy(diffSectorBufs[cursor_val].data, data, BYTESPERSECTOR); + cacheSectorNumber[sectnum % CACHECOUNT] = (uint32_t)-1; // invalidate cache + } + else if (cursor_val != NULL_CURSOR) + { + diffFreeCursors.push_back(cursor_val); + *cursor_ptr = NULL_CURSOR; + cacheSectorNumber[sectnum % CACHECOUNT] = (uint32_t)-1; // invalidate cache + } + return 0; + } + + void* GetUnmodifiedSector(uint32_t sectnum, void* filebuf) + { + if (sectnum >= sect_files_end) {} + else if (sectnum >= sect_files_start) + { + uint32_t idx = fileAtSector[sectnum - sect_files_start]; + ffddFile& f = files[idx]; + DOS_File* df = NULL; + for (uint32_t i = 0; i != KEEPOPENCOUNT; i++) + if (openIndex[i] == idx && openFiles[i]) + { df = openFiles[i]; break; } + if (!df) + { + openCursor = (openCursor + 1) % KEEPOPENCOUNT; + DOS_File*& cachedf = openFiles[openCursor]; + if (cachedf) + { + cachedf->Close(); + delete cachedf; + cachedf = NULL; + } + bool res = drive->FileOpen(&df, f.path, OPEN_READ); + if (!res && codepage && (codepage != dos.loaded_codepage || (tryconvcp && codepage == 437))) { + uint32_t cp = dos.loaded_codepage; + dos.loaded_codepage = codepage; +#if defined(WIN32) + if (tryconvcp && dos.loaded_codepage == 437) dos.loaded_codepage = GetACP(); +#endif + res = drive->FileOpen(&df, f.path, OPEN_READ); + dos.loaded_codepage = cp; + } + if (res) + { + df->AddRef(); + cachedf = df; + openIndex[openCursor] = idx; + } + else return NULL; + } + if (df) + { + uint32_t pos = (sectnum - f.firstSect) * BYTESPERSECTOR; + uint16_t read = (uint16_t)BYTESPERSECTOR; + df->Seek(&pos, DOS_SEEK_SET); + if (!df->Read((uint8_t*)filebuf, &read)) { read = 0; assert(0); } + if (read != BYTESPERSECTOR) + memset((uint8_t*)filebuf + read, 0, BYTESPERSECTOR - read); + return filebuf; + } + } + else if (sectnum >= sect_dirs_start) return &dirs[(sectnum - sect_dirs_start) * (BYTESPERSECTOR / sizeof(direntry))]; + else if (sectnum >= sect_root_start) return &root[(sectnum - sect_root_start) * (BYTESPERSECTOR / sizeof(direntry))]; + else if (sectnum >= sect_fat2_start) return &fat[(sectnum - sect_fat2_start) * BYTESPERSECTOR]; + else if (sectnum >= sect_fat1_start) return &fat[(sectnum - sect_fat1_start) * BYTESPERSECTOR]; + else if (IS_PC98_ARCH) { + if (sectnum == 0) return &ipl; + else if (sectnum == 1) return &pt; + else if (sectnum == sect_boot_pc98) return &bootsec; + else if (sectnum == sect_boot_pc98+1) return fsinfosec; + else if (sectnum == sect_boot_pc98+2) return fsinfosec; // additional boot loader code (anything is ok for us but needs 0x55AA footer signature) + else if (sectnum == sect_boot_pc98+6) return &bootsec; // boot sector copy + else if (sectnum == sect_boot_pc98+7) return fsinfosec; // boot sector copy + else if (sectnum == sect_boot_pc98+8) return fsinfosec; // boot sector copy + return NULL; + } + else if (sectnum == SECT_BOOT) return &bootsec; + else if (sectnum == SECT_MBR) return &mbr; + else if (sectnum == SECT_BOOT+1) return fsinfosec; + else if (sectnum == SECT_BOOT+2) return fsinfosec; // additional boot loader code (anything is ok for us but needs 0x55AA footer signature) + else if (sectnum == SECT_BOOT+6) return &bootsec; // boot sector copy + else if (sectnum == SECT_BOOT+7) return fsinfosec; // boot sector copy + else if (sectnum == SECT_BOOT+8) return fsinfosec; // boot sector copy + return NULL; + } + + uint8_t ReadSector(uint32_t sectnum, void* data) + { + _driveUsed = true; + uint32_t sectorHash = sectnum % CACHECOUNT; + void *cachedata = cacheSectorData[sectorHash]; + if (cacheSectorNumber[sectorHash] == sectnum) + { + memcpy(data, cachedata, BYTESPERSECTOR); + return 0; + } + cacheSectorNumber[sectorHash] = sectnum; + + void *src; + uint32_t cursor = (sectnum >= diffSectors.size() ? NULL_CURSOR : diffSectors[sectnum].cursor); + if (cursor != NULL_CURSOR) + src = diffSectorBufs[cursor].data; + else + src = GetUnmodifiedSector(sectnum, cachedata); + + if (src) memcpy(data, src, BYTESPERSECTOR); + else memset(data, 0, BYTESPERSECTOR); + if (src != cachedata) memcpy(cachedata, data, BYTESPERSECTOR); + return 0; + } + + bool SaveImage(const char *name) + { + FILE* f = fopen_wrap(name, "wb"); + if (f) { + uint8_t filebuf[BYTESPERSECTOR]; + if (IS_PC98_ARCH) { + memcpy(filebuf, &header, BYTESPERSECTOR); + if (fwrite(filebuf, 1, BYTESPERSECTOR, f) != BYTESPERSECTOR) {fclose(f);return false;} + memset(filebuf, 0, BYTESPERSECTOR); + for (int i = 0; i < 7; i++) + if (fwrite(filebuf, 1, BYTESPERSECTOR, f) != BYTESPERSECTOR) {fclose(f);return false;} + } + for (unsigned int i = 0; i < sect_disk_end; i++) { + ReadSector(i, filebuf); + if (fwrite(filebuf, 1, BYTESPERSECTOR, f) != BYTESPERSECTOR) { + fclose(f); + return false; + } + } + fclose(f); + return true; + } else + return false; + } +}; + +bool saveDiskImage(imageDisk *image, const char *name) { + return image && image->ffdd && image->ffdd->SaveImage(name); +} + +diskGeo DiskGeometryList[] = { + { 160, 8, 1, 40, 0, 512, 64, 1, 0xFE}, // IBM PC double density 5.25" single-sided 160KB + { 180, 9, 1, 40, 0, 512, 64, 1, 0xFC}, // IBM PC double density 5.25" single-sided 180KB + { 200, 10, 1, 40, 0, 512, 64, 2, 0xFC}, // DEC Rainbow double density 5.25" single-sided 200KB (I think...) + { 320, 8, 2, 40, 1, 512, 112, 2, 0xFF}, // IBM PC double density 5.25" double-sided 320KB + { 360, 9, 2, 40, 1, 512, 112, 2, 0xFD}, // IBM PC double density 5.25" double-sided 360KB + { 400, 10, 2, 40, 1, 512, 112, 2, 0xFD}, // DEC Rainbow double density 5.25" double-sided 400KB (I think...) + { 640, 8, 2, 80, 3, 512, 112, 2, 0xFB}, // IBM PC double density 3.5" double-sided 640KB + { 720, 9, 2, 80, 3, 512, 112, 2, 0xF9}, // IBM PC double density 3.5" double-sided 720KB + {1200, 15, 2, 80, 2, 512, 224, 1, 0xF9}, // IBM PC double density 5.25" double-sided 1.2MB + {1440, 18, 2, 80, 4, 512, 224, 1, 0xF0}, // IBM PC high density 3.5" double-sided 1.44MB + {1680, 21, 2, 80, 4, 512, 16, 4, 0xF0}, // IBM PC high density 3.5" double-sided 1.68MB (DMF) + {2880, 36, 2, 80, 6, 512, 240, 2, 0xF0}, // IBM PC high density 3.5" double-sided 2.88MB + + {1232, 8, 2, 77, 7, 1024,192, 1, 0xFE}, // NEC PC-98 high density 3.5" double-sided 1.2MB "3-mode" + {1520, 19, 2, 80, 2, 512, 224, 1, 0xF9}, // IBM PC high density 5.25" double-sided 1.52MB (XDF) + {1840, 23, 2, 80, 4, 512, 224, 1, 0xF0}, // IBM PC high density 3.5" double-sided 1.84MB (XDF) + + { 0, 0, 0, 0, 0, 0, 0, 0, 0} +}; + +Bitu call_int13 = 0; +Bitu diskparm0 = 0, diskparm1 = 0; +static uint8_t last_status; +static uint8_t last_drive; +uint16_t imgDTASeg; +RealPt imgDTAPtr; +DOS_DTA *imgDTA; +bool killRead; +static bool swapping_requested; + +void CMOS_SetRegister(Bitu regNr, uint8_t val); //For setting equipment word + +/* 2 floppies and 2 harddrives, max */ +bool imageDiskChange[MAX_DISK_IMAGES]={false}; +imageDisk *imageDiskList[MAX_DISK_IMAGES]={NULL}; +imageDisk *diskSwap[MAX_SWAPPABLE_DISKS]={NULL}; +int32_t swapPosition; + +imageDisk *GetINT13FloppyDrive(unsigned char drv) { + if (drv >= 2) + return NULL; + return imageDiskList[drv]; +} + +imageDisk *GetINT13HardDrive(unsigned char drv) { + if (drv < 0x80 || drv >= (0x80+MAX_DISK_IMAGES-2)) + return NULL; + + return imageDiskList[drv-0x80]; +} + +void FreeBIOSDiskList() { + for (int i=0;i < MAX_DISK_IMAGES;i++) { + if (imageDiskList[i] != NULL) { + if (i >= 2) IDE_Hard_Disk_Detach(i); + imageDiskList[i]->Release(); + imageDiskList[i] = NULL; + } + } + + for (int j=0;j < MAX_SWAPPABLE_DISKS;j++) { + if (diskSwap[j] != NULL) { + diskSwap[j]->Release(); + diskSwap[j] = NULL; + } + } +} + +//update BIOS disk parameter tables for first two hard drives +void updateDPT(void) { + uint32_t tmpheads, tmpcyl, tmpsect, tmpsize; + PhysPt dpphysaddr[2] = { CALLBACK_PhysPointer(diskparm0), CALLBACK_PhysPointer(diskparm1) }; + for (int i = 0; i < 2; i++) { + tmpheads = 0; tmpcyl = 0; tmpsect = 0; tmpsize = 0; + if (imageDiskList[i + 2] != NULL) { + imageDiskList[i + 2]->Get_Geometry(&tmpheads, &tmpcyl, &tmpsect, &tmpsize); + } + phys_writew(dpphysaddr[i], (uint16_t)tmpcyl); + phys_writeb(dpphysaddr[i] + 0x2, (uint8_t)tmpheads); + phys_writew(dpphysaddr[i] + 0x3, 0); + phys_writew(dpphysaddr[i] + 0x5, tmpcyl == 0 ? 0 : (uint16_t)-1); + phys_writeb(dpphysaddr[i] + 0x7, 0); + phys_writeb(dpphysaddr[i] + 0x8, tmpcyl == 0 ? 0 : (0xc0 | ((tmpheads > 8) << 3))); + phys_writeb(dpphysaddr[i] + 0x9, 0); + phys_writeb(dpphysaddr[i] + 0xa, 0); + phys_writeb(dpphysaddr[i] + 0xb, 0); + phys_writew(dpphysaddr[i] + 0xc, (uint16_t)tmpcyl); + phys_writeb(dpphysaddr[i] + 0xe, (uint8_t)tmpsect); + } +} + +void incrementFDD(void) { + uint16_t equipment=mem_readw(BIOS_CONFIGURATION); + if(equipment&1) { + Bitu numofdisks = (equipment>>6)&3; + numofdisks++; + if(numofdisks > 1) numofdisks=1;//max 2 floppies at the moment + equipment&=~0x00C0; + equipment|=(numofdisks<<6); + } else equipment|=1; + mem_writew(BIOS_CONFIGURATION,equipment); + if(IS_EGAVGA_ARCH) equipment &= ~0x30; //EGA/VGA startup display mode differs in CMOS + CMOS_SetRegister(0x14, (uint8_t)(equipment&0xff)); +} + +int swapInDisksSpecificDrive = -1; +// -1 = swap across A: and B: (DOSBox / DOSBox-X default behavior) +// 0 = swap across A: only +// 1 = swap across B: only + +void swapInDisks(int drive) { + bool allNull = true; + int32_t diskcount = 0; + Bits diskswapcount = 2; + Bits diskswapdrive = 0; + int32_t swapPos = swapPosition; + int32_t i; + + /* Check to make sure that there is at least one setup image */ + for(i=0;i= 0 && swapInDisksSpecificDrive <= 1 && (drive == -1 || drive == swapInDisksSpecificDrive)) { + diskswapdrive = swapInDisksSpecificDrive; + diskswapcount = 1; + } else if (swapInDisksSpecificDrive != -1 || drive != -1) /* Swap A: and B: drives */ + return; + + /* If only one disk is loaded, this loop will load the same disk in dive A and drive B */ + while(diskcount < diskswapcount) { + if(diskSwap[swapPos] != NULL) { + LOG_MSG("Loaded drive %d disk %d from swaplist position %d - \"%s\"", (int)diskswapdrive, (int)diskcount, (int)swapPos, diskSwap[swapPos]->diskname.c_str()); + + if (imageDiskList[diskswapdrive] != NULL) + imageDiskList[diskswapdrive]->Release(); + + imageDiskList[diskswapdrive] = diskSwap[swapPos]; + imageDiskList[diskswapdrive]->Addref(); + + imageDiskChange[diskswapdrive] = true; + + diskcount++; + diskswapdrive++; + } + + swapPos++; + if(swapPos>=MAX_SWAPPABLE_DISKS) swapPos=0; + } +} + +bool getSwapRequest(void) { + bool sreq=swapping_requested; + swapping_requested = false; + return sreq; +} + +void swapInDrive(int drive, unsigned int position=0) { +#if 0 /* FIX_ME: Disabled to swap CD by IMGSWAP command (Issue #4932). Revert this if any regression occurs */ + //if (drive>1||swapInDisksSpecificDrive!=drive) return; +#endif + swapPosition = position; // if (position<1) swapPosition++; // else swapPosition=position-1; - if(diskSwap[swapPosition] == NULL) swapPosition = 0; - swapInDisks(drive); - swapping_requested = true; - DriveManager::CycleDisks(drive, true, position); - /* Hack/feature: rescan all disks as well */ - LOG_MSG("Diskcaching reset for drive %c.", drive+'A'); - if (Drives[drive] != NULL) { - Drives[drive]->EmptyCache(); - Drives[drive]->MediaChange(); - } - } - - void swapInNextDisk(bool pressed) { - if (!pressed) - return; - - DriveManager::CycleAllDisks(); - /* Hack/feature: rescan all disks as well */ - LOG_MSG("Diskcaching reset for floppy drives."); - for(Bitu i=0;i<2;i++) { /* Swap A: and B: where DOSBox mainline would run through ALL drive letters */ - if (Drives[i] != NULL) { - Drives[i]->EmptyCache(); - Drives[i]->MediaChange(); - } - } - if (swapInDisksSpecificDrive>1) return; - swapPosition++; - if(diskSwap[swapPosition] == NULL) swapPosition = 0; - swapInDisks(-1); - swapping_requested = true; - } - - void swapInNextCD(bool pressed) { - if (!pressed) - return; - DriveManager::CycleAllCDs(); - /* Hack/feature: rescan all disks as well */ - LOG_MSG("Diskcaching reset for normal mounted drives."); - for(Bitu i=2;i(Drives[i]) != NULL) { - Drives[i]->EmptyCache(); - Drives[i]->MediaChange(); - } - } - } - - - uint8_t imageDisk::Read_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,void * data,unsigned int req_sector_size) { - uint32_t sectnum; - - if (req_sector_size == 0) - req_sector_size = sector_size; - if (req_sector_size != sector_size) - return 0x05; - - if (sector == 0) { - LOG_MSG("Attempted to read invalid sector 0."); - return 0x05; - } - - sectnum = ( (cylinder * heads + head) * sectors ) + sector - 1L; - - _driveUsed = true; - return Read_AbsoluteSector(sectnum, data); - } - - uint8_t imageDisk::Read_AbsoluteSector(uint32_t sectnum, void * data) { - if (ffdd) return ffdd->ReadSector(sectnum, data); - _driveUsed = true; + if(diskSwap[swapPosition] == NULL) swapPosition = 0; + swapInDisks(drive); + swapping_requested = true; + DriveManager::CycleDisks(drive, true, position); + /* Hack/feature: rescan all disks as well */ + LOG_MSG("Diskcaching reset for drive %c.", drive+'A'); + if (Drives[drive] != NULL) { + Drives[drive]->EmptyCache(); + Drives[drive]->MediaChange(); + } +} - uint64_t bytenum,res; - int got; - - bytenum = (uint64_t)sectnum * (uint64_t)sector_size; - if ((bytenum + sector_size) > this->image_length) { - LOG_MSG("Attempt to read invalid sector in Read_AbsoluteSector for sector %lu.\n", (unsigned long)sectnum); - return 0x05; - } - bytenum += image_base; - - //LOG_MSG("Reading sectors %ld at bytenum %I64d", sectnum, bytenum); - - fseeko64(diskimg,(fseek_ofs_t)bytenum,SEEK_SET); - res = (uint64_t)ftello64(diskimg); - if (res != bytenum) { - LOG_MSG("fseek() failed in Read_AbsoluteSector for sector %lu. Want=%llu Got=%llu\n", - (unsigned long)sectnum,(unsigned long long)bytenum,(unsigned long long)res); - return 0x05; - } - - got = (int)fread(data, 1, sector_size, diskimg); - if ((unsigned int)got != sector_size) { - LOG_MSG("fread() failed in Read_AbsoluteSector for sector %lu. Want=%u got=%d\n", - (unsigned long)sectnum,sector_size,(unsigned int)got); - return 0x05; - } - - // size_t checksum = 0; - // for (size_t i = 0; i < sector_size; i++) checksum += ((uint8_t*)data)[i]; - // printf("Read sector %u - From Pos: %lu - Checksum: %lu\n", sectnum, bytenum, checksum); - - return 0x00; - } - - uint8_t imageDisk::Write_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,const void * data,unsigned int req_sector_size) { - uint32_t sectnum; - - if (req_sector_size == 0) - req_sector_size = sector_size; - if (req_sector_size != sector_size) - return 0x05; - - sectnum = ( (cylinder * heads + head) * sectors ) + sector - 1L; - - _driveUsed = true; - return Write_AbsoluteSector(sectnum, data); - } - - - uint8_t imageDisk::Write_AbsoluteSector(uint32_t sectnum, const void *data) { - if (ffdd) return ffdd->WriteSector(sectnum, data); - - uint64_t bytenum; - - bytenum = (uint64_t)sectnum * sector_size; - if ((bytenum + sector_size) > this->image_length) { - LOG_MSG("Attempt to read invalid sector in Write_AbsoluteSector for sector %lu.\n", (unsigned long)sectnum); - return 0x05; - } - bytenum += image_base; - - //LOG_MSG("Writing sectors to %ld at bytenum %d", sectnum, bytenum); - - fseeko64(diskimg,(fseek_ofs_t)bytenum,SEEK_SET); - if ((uint64_t)ftello64(diskimg) != bytenum) - LOG_MSG("WARNING: fseek() failed in Write_AbsoluteSector for sector %lu\n",(unsigned long)sectnum); - - size_t ret=fwrite(data, sector_size, 1, diskimg); - - _driveUsed = true; - return ((ret>0)?0x00:0x05); - - } - - void imageDisk::Set_Reserved_Cylinders(Bitu resCyl) { - reserved_cylinders = resCyl; - } - - uint32_t imageDisk::Get_Reserved_Cylinders() { - return reserved_cylinders; - } - - imageDisk::imageDisk(IMAGE_TYPE class_id) : class_id(class_id) { - } - - imageDisk::imageDisk(FILE* diskimg, const char* diskName, uint32_t cylinders, uint32_t heads, uint32_t sectors, uint32_t sector_size, bool hardDrive) - { - if (diskName) this->diskname = diskName; - this->cylinders = cylinders; - this->heads = heads; - this->sectors = sectors; - image_base = 0; - this->image_length = (uint64_t)cylinders * heads * sectors * sector_size; - refcount = 0; - this->sector_size = sector_size; - this->diskSizeK = this->image_length / 1024; - reserved_cylinders = 0; - this->diskimg = diskimg; - class_id = ID_BASE; - active = true; - this->hardDrive = hardDrive; - floppytype = 0; - } - - - void imageDisk::UpdateFloppyType(void) { - uint8_t i=0; - - while (DiskGeometryList[i].ksize!=0x0) { - if ((DiskGeometryList[i].ksize==diskSizeK) || (DiskGeometryList[i].ksize+1==diskSizeK)) { - floppytype = i; - LOG_MSG("Updating floppy type to %u BIOS type 0x%02x",floppytype,GetBiosType()); - break; - } - i++; - } - } - - imageDisk::imageDisk(FILE* imgFile, const char* imgName, uint32_t imgSizeK, bool isHardDisk) : diskSizeK(imgSizeK), diskimg(imgFile), image_length((uint64_t)imgSizeK * 1024) { - if (imgName != NULL) - diskname = imgName; - +void swapInNextDisk(bool pressed) { + if (!pressed) + return; + + DriveManager::CycleAllDisks(); + /* Hack/feature: rescan all disks as well */ + LOG_MSG("Diskcaching reset for floppy drives."); + for(Bitu i=0;i<2;i++) { /* Swap A: and B: where DOSBox mainline would run through ALL drive letters */ + if (Drives[i] != NULL) { + Drives[i]->EmptyCache(); + Drives[i]->MediaChange(); + } + } + if (swapInDisksSpecificDrive>1) return; + swapPosition++; + if(diskSwap[swapPosition] == NULL) swapPosition = 0; + swapInDisks(-1); + swapping_requested = true; +} + +void swapInNextCD(bool pressed) { + if (!pressed) + return; + DriveManager::CycleAllCDs(); + /* Hack/feature: rescan all disks as well */ + LOG_MSG("Diskcaching reset for normal mounted drives."); + for(Bitu i=2;i(Drives[i]) != NULL) { + Drives[i]->EmptyCache(); + Drives[i]->MediaChange(); + } + } +} + + +uint8_t imageDisk::Read_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,void * data,unsigned int req_sector_size) { + uint32_t sectnum; + + if (req_sector_size == 0) + req_sector_size = sector_size; + if (req_sector_size != sector_size) + return 0x05; + + if (sector == 0) { + LOG_MSG("Attempted to read invalid sector 0."); + return 0x05; + } + + sectnum = ( (cylinder * heads + head) * sectors ) + sector - 1L; + + _driveUsed = true; + return Read_AbsoluteSector(sectnum, data); +} + +uint8_t imageDisk::Read_AbsoluteSector(uint32_t sectnum, void * data) { + if (ffdd) return ffdd->ReadSector(sectnum, data); + _driveUsed = true; + + uint64_t bytenum,res; + int got; + + bytenum = (uint64_t)sectnum * (uint64_t)sector_size; + if ((bytenum + sector_size) > this->image_length) { + LOG_MSG("Attempt to read invalid sector in Read_AbsoluteSector for sector %lu.\n", (unsigned long)sectnum); + return 0x05; + } + bytenum += image_base; + + //LOG_MSG("Reading sectors %ld at bytenum %I64d", sectnum, bytenum); + + fseeko64(diskimg,(fseek_ofs_t)bytenum,SEEK_SET); + res = (uint64_t)ftello64(diskimg); + if (res != bytenum) { + LOG_MSG("fseek() failed in Read_AbsoluteSector for sector %lu. Want=%llu Got=%llu\n", + (unsigned long)sectnum,(unsigned long long)bytenum,(unsigned long long)res); + return 0x05; + } + + got = (int)fread(data, 1, sector_size, diskimg); + if ((unsigned int)got != sector_size) { + LOG_MSG("fread() failed in Read_AbsoluteSector for sector %lu. Want=%u got=%d\n", + (unsigned long)sectnum,sector_size,(unsigned int)got); + return 0x05; + } + + return 0x00; +} + +uint8_t imageDisk::Write_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,const void * data,unsigned int req_sector_size) { + uint32_t sectnum; + + if (req_sector_size == 0) + req_sector_size = sector_size; + if (req_sector_size != sector_size) + return 0x05; + + sectnum = ( (cylinder * heads + head) * sectors ) + sector - 1L; + + _driveUsed = true; + return Write_AbsoluteSector(sectnum, data); +} + + +uint8_t imageDisk::Write_AbsoluteSector(uint32_t sectnum, const void *data) { + if (ffdd) return ffdd->WriteSector(sectnum, data); + _driveUsed = true; + uint64_t bytenum; + + bytenum = (uint64_t)sectnum * sector_size; + if ((bytenum + sector_size) > this->image_length) { + LOG_MSG("Attempt to read invalid sector in Write_AbsoluteSector for sector %lu.\n", (unsigned long)sectnum); + return 0x05; + } + bytenum += image_base; + + //LOG_MSG("Writing sectors to %ld at bytenum %d", sectnum, bytenum); + + fseeko64(diskimg,(fseek_ofs_t)bytenum,SEEK_SET); + if ((uint64_t)ftello64(diskimg) != bytenum) + LOG_MSG("WARNING: fseek() failed in Write_AbsoluteSector for sector %lu\n",(unsigned long)sectnum); + + size_t ret=fwrite(data, sector_size, 1, diskimg); + + return ((ret>0)?0x00:0x05); + +} + +void imageDisk::Set_Reserved_Cylinders(Bitu resCyl) { + reserved_cylinders = resCyl; +} + +uint32_t imageDisk::Get_Reserved_Cylinders() { + return reserved_cylinders; +} + +imageDisk::imageDisk(IMAGE_TYPE class_id) : class_id(class_id) { +} + +imageDisk::imageDisk(FILE* diskimg, const char* diskName, uint32_t cylinders, uint32_t heads, uint32_t sectors, uint32_t sector_size, bool hardDrive) +{ + if (diskName) this->diskname = diskName; + this->cylinders = cylinders; + this->heads = heads; + this->sectors = sectors; + image_base = 0; + if (image_length == 0) image_length = (uint64_t)cylinders * heads * sectors * sector_size; + refcount = 0; + this->sector_size = sector_size; + this->diskSizeK = this->image_length / 1024; + LBA = image_length / sector_size; + if(!int13_enable_48bitLBA && (LBA > 0x0FFFFFFF)) + LOG_MSG("Warning: Disk size (%lf GiB) exceeds 128GiB limit for 28-bit LBA. You may need to enable 48-bit LBA support.", (double)image_length / (1024.0 * 1024 * 1024)); + reserved_cylinders = 0; + this->diskimg = diskimg; + class_id = ID_BASE; + active = true; + this->hardDrive = hardDrive; + floppytype = 0; +} + + +void imageDisk::UpdateFloppyType(void) { + uint8_t i=0; + + while (DiskGeometryList[i].ksize!=0x0) { + if ((DiskGeometryList[i].ksize==diskSizeK) || (DiskGeometryList[i].ksize+1==diskSizeK)) { + floppytype = i; + LOG_MSG("Updating floppy type to %u BIOS type 0x%02x",floppytype,GetBiosType()); + break; + } + i++; + } +} + +imageDisk::imageDisk(FILE* imgFile, const char* imgName, uint64_t imgSize, bool isHardDisk) : diskSizeK(imgSize/1024), diskimg(imgFile), image_length(imgSize) { + if (imgName != NULL) + diskname = imgName; _driveUsed = true; - active = false; - hardDrive = isHardDisk; - if(!isHardDisk) { - bool founddisk = false; - - if (imgName != NULL) { - const char *ext = strrchr((char*)imgName,'.'); - if (ext != NULL) { - if (!strcasecmp(ext,".fdi")) { - if (imgSizeK >= 160) { - FDIHDR fdihdr; - - // PC-98 .FDI images appear to be 4096 bytes of a short header and many zeros. - // followed by a straight sector dump of the disk. The header is NOT NECESSARILY - // 4KB in size, but usually is. - LOG_MSG("Image file has .FDI extension, assuming FDI image and will take on parameters in header."); - - assert(sizeof(fdihdr) == 0x20); - if (fseek(imgFile,0,SEEK_SET) == 0 && ftell(imgFile) == 0 && - fread(&fdihdr,sizeof(fdihdr),1,imgFile) == 1) { - uint32_t ofs = host_readd(fdihdr.headersize); - uint32_t fddsize = host_readd(fdihdr.fddsize); /* includes header */ - uint32_t sectorsize = host_readd(fdihdr.sectorsize); - - if (sectorsize != 0 && ((sectorsize & (sectorsize - 1)) == 0/*is power of 2*/) && - sectorsize >= 256 && sectorsize <= 1024 && - ofs != 0 && (ofs % sectorsize) == 0/*offset is nonzero and multiple of sector size*/ && - (ofs % 1024) == 0/*offset is a multiple of 1024 because of imgSizeK*/ && - fddsize >= sectorsize && (fddsize/1024) <= (imgSizeK+4)) { - - founddisk = true; - sector_size = sectorsize; - imgSizeK -= (ofs / 1024); - image_base = ofs; - image_length -= ofs; - LOG_MSG("FDI header: sectorsize is %u bytes/sector, header is %u bytes, fdd size (plus header) is %u bytes", - sectorsize,ofs,fddsize); - - /* take on the geometry. */ - sectors = host_readd(fdihdr.sectors); - heads = host_readd(fdihdr.surfaces); - cylinders = host_readd(fdihdr.cylinders); - LOG_MSG("FDI: Geometry is C/H/S %u/%u/%u", - cylinders,heads,sectors); - } - else { - LOG_MSG("FDI header rejected. sectorsize=%u headersize=%u fddsize=%u", - sectorsize,ofs,fddsize); - } - } - else { - LOG_MSG("Unable to read .FDI header"); - } - } - } - } - } - - if (sectors == 0 && heads == 0 && cylinders == 0) { - uint8_t i=0; - while (DiskGeometryList[i].ksize!=0x0) { - if ((DiskGeometryList[i].ksize==imgSizeK) || - (DiskGeometryList[i].ksize+1==imgSizeK)) { - if (DiskGeometryList[i].ksize!=imgSizeK) - LOG_MSG("ImageLoader: image file with additional data, might not load!"); - founddisk = true; - active = true; - floppytype = i; - heads = DiskGeometryList[i].headscyl; - cylinders = DiskGeometryList[i].cylcount; - sectors = DiskGeometryList[i].secttrack; - sector_size = DiskGeometryList[i].bytespersect; - LOG_MSG("Identified '%s' as C/H/S %u/%u/%u %u bytes/sector", - imgName,cylinders,heads,sectors,sector_size); - break; - } - // Supports cases where the size of a 1.2 Mbytes disk image file is 1.44 Mbytes. - if(DiskGeometryList[i].ksize == 1200 && (imgSizeK > 1200 && imgSizeK <= 1440)) { - char buff[0x20]; - if (fseek(imgFile,0,SEEK_SET) == 0 && ftell(imgFile) == 0 && fread(buff,sizeof(buff),1,imgFile) == 1) { - if(buff[0x18] == DiskGeometryList[i].secttrack) { - founddisk = true; - active = true; - floppytype = i; - heads = DiskGeometryList[i].headscyl; - cylinders = DiskGeometryList[i].cylcount; - sectors = DiskGeometryList[i].secttrack; - break; - } - } - } - i++; - } - } - if(!founddisk) { - active = false; - } - } - else { /* hard disk */ - if (imgName != NULL) { - char *ext = strrchr((char*)imgName,'.'); - if (ext != NULL) { - if (!strcasecmp(ext,".nhd")) { - if (imgSizeK >= 160) { - NHD_FILE_HEAD nhdhdr; - - LOG_MSG("Image file has .NHD extension, assuming NHD image and will take on parameters in header."); - - assert(sizeof(nhdhdr) == 0x200); - if (fseek(imgFile,0,SEEK_SET) == 0 && ftell(imgFile) == 0 && - fread(&nhdhdr,sizeof(nhdhdr),1,imgFile) == 1 && - host_readd((ConstHostPt)(&nhdhdr.dwHeadSize)) >= 0x200 && - !memcmp(nhdhdr.szFileID,"T98HDDIMAGE.R0\0",15)) { - uint32_t ofs = host_readd((ConstHostPt)(&nhdhdr.dwHeadSize)); - uint32_t sectorsize = host_readw((ConstHostPt)(&nhdhdr.wSectLen)); - - if (sectorsize != 0 && ((sectorsize & (sectorsize - 1)) == 0/*is power of 2*/) && - sectorsize >= 256 && sectorsize <= 1024 && - ofs != 0 && (ofs % sectorsize) == 0/*offset is nonzero and multiple of sector size*/) { - - sector_size = sectorsize; - imgSizeK -= (ofs / 1024); - image_base = ofs; - image_length -= ofs; - LOG_MSG("NHD header: sectorsize is %u bytes/sector, header is %u bytes", - sectorsize,ofs); - - /* take on the geometry. - * PC-98 IPL1 support will need it to make sense of the partition table. */ - sectors = host_readw((ConstHostPt)(&nhdhdr.wSect)); - heads = host_readw((ConstHostPt)(&nhdhdr.wHead)); - cylinders = host_readd((ConstHostPt)(&nhdhdr.dwCylinder)); - LOG_MSG("NHD: Geometry is C/H/S %u/%u/%u", - cylinders,heads,sectors); - } - else { - LOG_MSG("NHD header rejected. sectorsize=%u headersize=%u", - sectorsize,ofs); - } - } - else { - LOG_MSG("Unable to read .NHD header"); - } - } - } - if (!strcasecmp(ext,".hdi")) { - if (imgSizeK >= 160) { - HDIHDR hdihdr; - - // PC-98 .HDI images appear to be 4096 bytes of a short header and many zeros. - // followed by a straight sector dump of the disk. The header is NOT NECESSARILY - // 4KB in size, but usually is. - LOG_MSG("Image file has .HDI extension, assuming HDI image and will take on parameters in header."); - - assert(sizeof(hdihdr) == 0x20); - if (fseek(imgFile,0,SEEK_SET) == 0 && ftell(imgFile) == 0 && - fread(&hdihdr,sizeof(hdihdr),1,imgFile) == 1) { - uint32_t ofs = host_readd(hdihdr.headersize); - uint32_t hddsize = host_readd(hdihdr.hddsize); /* includes header */ - uint32_t sectorsize = host_readd(hdihdr.sectorsize); - - if (sectorsize != 0 && ((sectorsize & (sectorsize - 1)) == 0/*is power of 2*/) && - sectorsize >= 256 && sectorsize <= 1024 && - ofs != 0 && (ofs % sectorsize) == 0/*offset is nonzero and multiple of sector size*/ && - (ofs % 1024) == 0/*offset is a multiple of 1024 because of imgSizeK*/ && - hddsize >= sectorsize && (hddsize/1024) <= (imgSizeK+4)) { - - sector_size = sectorsize; - image_base = ofs; - image_length -= ofs; - LOG_MSG("HDI header: sectorsize is %u bytes/sector, header is %u bytes, hdd size (plus header) is %u bytes", - sectorsize,ofs,hddsize); - - /* take on the geometry. - * PC-98 IPL1 support will need it to make sense of the partition table. */ - sectors = host_readd(hdihdr.sectors); - heads = host_readd(hdihdr.surfaces); - cylinders = host_readd(hdihdr.cylinders); - LOG_MSG("HDI: Geometry is C/H/S %u/%u/%u", - cylinders,heads,sectors); - } - else { - LOG_MSG("HDI header rejected. sectorsize=%u headersize=%u hddsize=%u", - sectorsize,ofs,hddsize); - } - } - else { - LOG_MSG("Unable to read .HDI header"); - } - } - } - } - } - - if (sectors == 0 || heads == 0 || cylinders == 0) - active = false; - } - } - - imageDisk::imageDisk(class DOS_Drive *useDrive, unsigned int letter, uint32_t freeMB, int timeout) - { - ffdd = new fatFromDOSDrive(useDrive, freeMB, timeout); - if (!ffdd->success) { - LOG_MSG("FAT conversion failed"); - delete ffdd; - ffdd = NULL; - return; - } - if (IS_PC98_ARCH) { - cylinders = ffdd->sasi.cylinders; - heads = ffdd->sasi.surfaces; - sectors = ffdd->sasi.sectors; - } - drvnum = letter; - diskimg = NULL; - diskname[0] = '\0'; - hardDrive = true; - Set_GeometryForHardDisk(); - } - - imageDisk::~imageDisk() - { - if(diskimg != NULL) { - fclose(diskimg); - diskimg=NULL; - } - if (ffdd) - delete ffdd; - } - - void imageDisk::Set_GeometryForHardDisk() - { - sector_size = 512; - partTable mbrData; - for (int m = (Read_AbsoluteSector(0, &mbrData) ? 0 : 4); m--;) - { - if(!mbrData.pentry[m].partSize) continue; - bootstrap bootbuffer; - if (Read_AbsoluteSector(mbrData.pentry[m].absSectStart, &bootbuffer)) continue; - bootbuffer.sectorspertrack = var_read(&bootbuffer.sectorspertrack); - bootbuffer.headcount = var_read(&bootbuffer.headcount); - uint32_t setSect = bootbuffer.sectorspertrack; - uint32_t setHeads = bootbuffer.headcount; - uint32_t setCyl = (mbrData.pentry[m].absSectStart + mbrData.pentry[m].partSize) / (setSect * setHeads); - Set_Geometry(setHeads, setCyl, setSect, 512); - return; - } - if (!diskimg) return; - uint32_t diskimgsize; - fseek(diskimg,0,SEEK_END); - diskimgsize = (uint32_t)ftell(diskimg); - fseek(diskimg,current_fpos,SEEK_SET); - Set_Geometry(16, diskimgsize / (512 * 63 * 16), 63, 512); - } - - void imageDisk::Set_Geometry(uint32_t setHeads, uint32_t setCyl, uint32_t setSect, uint32_t setSectSize) { - Bitu bigdisk_shift = 0; - - if (IS_PC98_ARCH) { - /* TODO: PC-98 has its own 4096 cylinder limit */ - } - else { - if(setCyl > 16384) LOG_MSG("Warning: This disk image is too big."); - else if(setCyl > 8192) bigdisk_shift = 4; - else if(setCyl > 4096) bigdisk_shift = 3; - else if(setCyl > 2048) bigdisk_shift = 2; - else if(setCyl > 1024) bigdisk_shift = 1; - } - - heads = setHeads << bigdisk_shift; - cylinders = setCyl >> bigdisk_shift; - sectors = setSect; - sector_size = setSectSize; - active = true; - } - - void imageDisk::Get_Geometry(uint32_t * getHeads, uint32_t *getCyl, uint32_t *getSect, uint32_t *getSectSize) { - *getHeads = heads; - *getCyl = cylinders; - *getSect = sectors; - *getSectSize = sector_size; - } - - uint8_t imageDisk::GetBiosType(void) { - if(!hardDrive) { - return (uint8_t)DiskGeometryList[floppytype].biosval; - } else return 0; - } - - uint32_t imageDisk::getSectSize(void) { - return sector_size; - } - - static uint8_t GetDosDriveNumber(uint8_t biosNum) { - switch(biosNum) { - case 0x0: - return 0x0; - case 0x1: - return 0x1; - case 0x80: - return 0x2; - case 0x81: - return 0x3; - case 0x82: - return 0x4; - case 0x83: - return 0x5; - default: - return 0x7f; - } - } - - static bool driveInactive(uint8_t driveNum) { - if(driveNum>=MAX_DISK_IMAGES) { - int driveCalledFor = reg_dl & 0x7f; - LOG(LOG_BIOS,LOG_ERROR)("Disk %d non-existent", driveCalledFor); - last_status = 0x01; - CALLBACK_SCF(true); - return true; - } - if(imageDiskList[driveNum] == NULL) { - LOG(LOG_BIOS,LOG_ERROR)("Disk %d not active", (int)driveNum); - last_status = 0x01; - CALLBACK_SCF(true); - return true; - } - if(!imageDiskList[driveNum]->active) { - LOG(LOG_BIOS,LOG_ERROR)("Disk %d not active", (int)driveNum); - last_status = 0x01; - CALLBACK_SCF(true); - return true; - } - return false; - } - - static struct { - uint8_t sz; - uint8_t res; - uint16_t num; - uint16_t off; - uint16_t seg; - uint32_t sector; - } dap; - - static void readDAP(uint16_t seg, uint16_t off) { - dap.sz = real_readb(seg,off++); - dap.res = real_readb(seg,off++); - dap.num = real_readw(seg,off); off += 2; - dap.off = real_readw(seg,off); off += 2; - dap.seg = real_readw(seg,off); off += 2; - - /* Although sector size is 64-bit, 32-bit 2TB limit should be more than enough */ - dap.sector = real_readd(seg,off); off +=4; - - if (real_readd(seg,off)) { - LOG(LOG_BIOS,LOG_WARN)("INT13: 64-bit sector addressing not supported"); - dap.num = 0; /* this will cause calling INT 13h code to return an error */ - } - } - - void IDE_ResetDiskByBIOS(unsigned char disk); - void IDE_EmuINT13DiskReadByBIOS(unsigned char disk,unsigned int cyl,unsigned int head,unsigned sect); - bool IDE_GetPhysGeometry(unsigned char disk,uint32_t &heads,uint32_t &cyl,uint32_t §,uint32_t &size); - void IDE_EmuINT13DiskReadByBIOS_LBA(unsigned char disk,uint64_t lba); - - void diskio_delay(Bits value/*bytes*/, int type = -1); - - /* For El Torito "No emulation" INT 13 services */ - unsigned char INT13_ElTorito_NoEmuDriveNumber = 0; - signed char INT13_ElTorito_IDEInterface = -1; /* (controller * 2) + (is_slave?1:0) */ - char INT13_ElTorito_NoEmuCDROMDrive = 0; - - bool GetMSCDEXDrive(unsigned char drive_letter, CDROM_Interface **_cdrom); - - - static Bitu INT13_DiskHandler(void) { - uint16_t segat, bufptr; - uint8_t sectbuf[2048/*CD-ROM support*/]; - uint8_t drivenum; - Bitu i,t; - last_drive = reg_dl; - drivenum = GetDosDriveNumber(reg_dl); - bool any_images = false; - for(i = 0;i < MAX_DISK_IMAGES;i++) { - if(imageDiskList[i]) any_images=true; - } - - // unconditionally enable the interrupt flag - CALLBACK_SIF(true); - - /* map out functions 0x40-0x48 if not emulating INT 13h extensions */ - if (!int13_extensions_enable && reg_ah >= 0x40 && reg_ah <= 0x48) { - LOG_MSG("Warning: Guest is attempting to use INT 13h extensions (AH=0x%02X). Set 'int 13 extensions=1' if you want to enable them.\n",reg_ah); - reg_ah=0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - - //drivenum = 0; - //LOG_MSG("INT13: Function %x called on drive %x (dos drive %d)", reg_ah, reg_dl, drivenum); - - // NOTE: the 0xff error code returned in some cases is questionable; 0x01 seems more correct - switch(reg_ah) { - case 0x0: /* Reset disk */ - { - /* if there aren't any diskimages (so only localdrives and virtual drives) - * always succeed on reset disk. If there are diskimages then and only then - * do real checks - */ - if (any_images && driveInactive(drivenum)) { - /* driveInactive sets carry flag if the specified drive is not available */ - if ((machine==MCH_CGA) || (machine==MCH_AMSTRAD) || (machine==MCH_PCJR)) { - /* those bioses call floppy drive reset for invalid drive values */ - if (((imageDiskList[0]) && (imageDiskList[0]->active)) || ((imageDiskList[1]) && (imageDiskList[1]->active))) { - if (machine!=MCH_PCJR && reg_dl<0x80) reg_ip++; - last_status = 0x00; - CALLBACK_SCF(false); - } - } - return CBRET_NONE; - } - if (machine!=MCH_PCJR && reg_dl<0x80) reg_ip++; - if (reg_dl >= 0x80) IDE_ResetDiskByBIOS(reg_dl); - last_status = 0x00; - CALLBACK_SCF(false); - } - break; - case 0x1: /* Get status of last operation */ - - if(last_status != 0x00) { - reg_ah = last_status; - CALLBACK_SCF(true); - } else { - reg_ah = 0x00; - CALLBACK_SCF(false); - } - break; - case 0x2: /* Read sectors */ - if (reg_al==0) { - reg_ah = 0x01; - CALLBACK_SCF(true); - return CBRET_NONE; - } - if (drivenum >= MAX_DISK_IMAGES || imageDiskList[drivenum] == NULL) { - if (drivenum >= DOS_DRIVES || !Drives[drivenum] || Drives[drivenum]->isRemovable()) { - reg_ah = 0x01; - CALLBACK_SCF(true); - return CBRET_NONE; - } - // Inherit the Earth cdrom and Amberstar use it as a disk test - if (((reg_dl&0x80)==0x80) && (reg_dh==0) && ((reg_cl&0x3f)==1)) { - if (reg_ch==0) { - // write some MBR data into buffer for Amberstar installer - real_writeb(SegValue(es),reg_bx+0x1be,0x80); // first partition is active - real_writeb(SegValue(es),reg_bx+0x1c2,0x06); // first partition is FAT16B - } - reg_ah = 0; - CALLBACK_SCF(false); - return CBRET_NONE; - } - } - if (driveInactive(drivenum)) { - reg_ah = 0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - - /* INT 13h is limited to 512 bytes/sector (as far as I know). - * The sector buffer in this function is limited to 512 bytes/sector, - * so this is also a protection against overrunning the stack if you - * mount a PC-98 disk image (1024 bytes/sector) and try to read it with INT 13h. */ - if (imageDiskList[drivenum]->sector_size > sizeof(sectbuf)) { - LOG(LOG_MISC,LOG_DEBUG)("INT 13h: Read failed because disk bytes/sector on drive %c is too large",(char)drivenum+'A'); - - imageDiskChange[drivenum] = false; - - reg_ah = 0x80; /* timeout */ - CALLBACK_SCF(true); - return CBRET_NONE; - } - - /* If the disk changed, the first INT 13h read will signal an error and set AH = 0x06 to indicate disk change */ - if (drivenum < 2 && imageDiskChange[drivenum]) { - LOG(LOG_MISC,LOG_DEBUG)("INT 13h: Failing first read of drive %c to indicate disk change",(char)drivenum+'A'); - - imageDiskChange[drivenum] = false; - - reg_ah = 0x06; /* diskette changed or removed */ - CALLBACK_SCF(true); - return CBRET_NONE; - } - - segat = SegValue(es); - bufptr = reg_bx; - for(i=0;iRead_Sector((uint32_t)reg_dh, (uint32_t)(reg_ch | ((reg_cl & 0xc0)<< 2)), (uint32_t)((reg_cl & 63)+i), sectbuf); - - if (drivenum < 2) - diskio_delay(512, 0); // Floppy - else - diskio_delay(512); - - /* IDE emulation: simulate change of IDE state that would occur on a real machine after INT 13h */ - IDE_EmuINT13DiskReadByBIOS(reg_dl, (uint32_t)(reg_ch | ((reg_cl & 0xc0)<< 2)), (uint32_t)reg_dh, (uint32_t)((reg_cl & 63)+i)); - - if((last_status != 0x00) || killRead) { - LOG_MSG("Error in disk read"); - killRead = false; - reg_ah = 0x04; - CALLBACK_SCF(true); - return CBRET_NONE; - } - for(t=0;t<512;t++) { - real_writeb(segat,bufptr,sectbuf[t]); - bufptr++; - } - } - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x3: /* Write sectors */ - - if(driveInactive(drivenum) || !imageDiskList[drivenum]) { - reg_ah = 0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - - /* INT 13h is limited to 512 bytes/sector (as far as I know). - * The sector buffer in this function is limited to 512 bytes/sector, - * so this is also a protection against overrunning the stack if you - * mount a PC-98 disk image (1024 bytes/sector) and try to read it with INT 13h. */ - if (imageDiskList[drivenum]->sector_size > sizeof(sectbuf)) { - LOG(LOG_MISC,LOG_DEBUG)("INT 13h: Write failed because disk bytes/sector on drive %c is too large",(char)drivenum+'A'); - - imageDiskChange[drivenum] = false; - - reg_ah = 0x80; /* timeout */ - CALLBACK_SCF(true); - return CBRET_NONE; - } - - bufptr = reg_bx; - for(i=0;igetSectSize();t++) { - sectbuf[t] = real_readb(SegValue(es),bufptr); - bufptr++; - } - - if(drivenum < 2) - diskio_delay(512, 0); // Floppy - else - diskio_delay(512); - - last_status = imageDiskList[drivenum]->Write_Sector((uint32_t)reg_dh, (uint32_t)(reg_ch | ((reg_cl & 0xc0) << 2)), (uint32_t)((reg_cl & 63) + i), §buf[0]); - if(last_status != 0x00) { - CALLBACK_SCF(true); - return CBRET_NONE; - } - } - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x04: /* Verify sectors */ - if (reg_al==0) { - reg_ah = 0x01; - CALLBACK_SCF(true); - return CBRET_NONE; - } - if(driveInactive(drivenum)) { - reg_ah = last_status; - return CBRET_NONE; - } - - /* TODO: Finish coding this section */ - /* - segat = SegValue(es); - bufptr = reg_bx; - for(i=0;iRead_Sector((uint32_t)reg_dh, (uint32_t)(reg_ch | ((reg_cl & 0xc0)<< 2)), (uint32_t)((reg_cl & 63)+i), sectbuf); - if(last_status != 0x00) { - LOG_MSG("Error in disk read"); - CALLBACK_SCF(true); - return CBRET_NONE; - } - for(t=0;t<512;t++) { - real_writeb(segat,bufptr,sectbuf[t]); - bufptr++; - } - }*/ - reg_ah = 0x00; - //Qbix: The following codes don't match my specs. al should be number of sector verified - //reg_al = 0x10; /* CRC verify failed */ - //reg_al = 0x00; /* CRC verify succeeded */ - CALLBACK_SCF(false); - - break; - case 0x05: /* Format track */ - /* ignore it. I just fucking want FORMAT.COM to write the FAT structure for God's sake */ - LOG_MSG("WARNING: Format track ignored\n"); - if (driveInactive(drivenum)) { - reg_ah = 0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - CALLBACK_SCF(false); - reg_ah = 0x00; - break; - case 0x06: /* Format track set bad sector flags */ - /* ignore it. I just fucking want FORMAT.COM to write the FAT structure for God's sake */ - LOG_MSG("WARNING: Format track set bad sector flags ignored (6)\n"); - if (driveInactive(drivenum)) { - reg_ah = 0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - CALLBACK_SCF(false); - reg_ah = 0x00; - break; - case 0x07: /* Format track set bad sector flags */ - /* ignore it. I just fucking want FORMAT.COM to write the FAT structure for God's sake */ - LOG_MSG("WARNING: Format track set bad sector flags ignored (7)\n"); - if (driveInactive(drivenum)) { - reg_ah = 0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - CALLBACK_SCF(false); - reg_ah = 0x00; - break; - case 0x08: /* Get drive parameters */ - if(driveInactive(drivenum)) { - last_status = 0x07; - reg_ah = last_status; - CALLBACK_SCF(true); - return CBRET_NONE; - } - reg_ax = 0x00; - reg_bl = imageDiskList[drivenum]->GetBiosType(); - uint32_t tmpheads, tmpcyl, tmpsect, tmpsize; - imageDiskList[drivenum]->Get_Geometry(&tmpheads, &tmpcyl, &tmpsect, &tmpsize); - if (tmpcyl==0) LOG(LOG_BIOS,LOG_ERROR)("INT13 DrivParm: cylinder count zero!"); - else tmpcyl--; // cylinder count -> max cylinder - if (tmpheads==0) LOG(LOG_BIOS,LOG_ERROR)("INT13 DrivParm: head count zero!"); - else tmpheads--; // head count -> max head - - /* older BIOSes were known to subtract 1 or 2 additional "reserved" cylinders. - * some code, such as Windows 3.1 WDCTRL, might assume that fact. emulate that here */ - { - uint32_t reserv = imageDiskList[drivenum]->Get_Reserved_Cylinders(); - if (tmpcyl > reserv) tmpcyl -= reserv; - else tmpcyl = 0; - } - - reg_ch = (uint8_t)(tmpcyl & 0xff); - reg_cl = (uint8_t)(((tmpcyl >> 2) & 0xc0) | (tmpsect & 0x3f)); - reg_dh = (uint8_t)tmpheads; - last_status = 0x00; - if (reg_dl&0x80) { // harddisks - reg_dl = 0; - for (int index = 2; index < MAX_DISK_IMAGES; index++) { - if (imageDiskList[index] != NULL) reg_dl++; - } - } else { // floppy disks - reg_dl = 0; - if(imageDiskList[0] != NULL) reg_dl++; - if(imageDiskList[1] != NULL) reg_dl++; - } - CALLBACK_SCF(false); - break; - case 0x11: /* Recalibrate drive */ - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x15: /* Get disk type */ - /* Korean Powerdolls uses this to detect harddrives */ - LOG(LOG_BIOS,LOG_WARN)("INT13: Get disktype used!"); - if (any_images) { - if(driveInactive(drivenum)) { - last_status = 0x07; - reg_ah = last_status; - CALLBACK_SCF(true); - return CBRET_NONE; - } - imageDiskList[drivenum]->Get_Geometry(&tmpheads, &tmpcyl, &tmpsect, &tmpsize); - uint64_t largesize = tmpheads*tmpcyl*tmpsect*tmpsize; - largesize/=512; - uint32_t ts = static_cast(largesize); - reg_ah = (drivenum < 2)?(int13_disk_change_detect_enable?2:1):3; //With 2 for floppy MSDOS starts calling int 13 ah 16 - if(reg_ah == 3) { - reg_cx = static_cast(ts >>16); - reg_dx = static_cast(ts & 0xffff); - } - CALLBACK_SCF(false); - } else { - if (drivenum = 2048, "not big enough" ); - diskio_delay(512); - if (killRead || !src_drive->ReadSectorsHost(sectbuf, false, dap.sector+i, 1)) { - real_writew(SegValue(ds),reg_si+2,i); // According to RBIL this should update the number of blocks field to what was successfully transferred - LOG_MSG("Error in CDROM read"); - killRead = false; - reg_ah = 0x04; - CALLBACK_SCF(true); - return CBRET_NONE; - } - - for(t=0;t<2048;t++) { - real_writeb(segat,bufptr,sectbuf[t]); - bufptr++; - } - } - reg_ah = 0x00; - CALLBACK_SCF(false); - return CBRET_NONE; - } - - if (!any_images) { - // Inherit the Earth cdrom (uses it as disk test) - if (((reg_dl&0x80)==0x80) && (reg_dh==0) && ((reg_cl&0x3f)==1)) { - reg_ah = 0; - CALLBACK_SCF(false); - return CBRET_NONE; - } - } - if (driveInactive(drivenum)) { - reg_ah = 0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - - segat = dap.seg; - bufptr = dap.off; - for(i=0;iRead_AbsoluteSector(dap.sector+i, sectbuf); - - if(drivenum < 2) - diskio_delay(512, 0); // Floppy - else - diskio_delay(512); - - IDE_EmuINT13DiskReadByBIOS_LBA(reg_dl,dap.sector+i); - - if((last_status != 0x00) || killRead) { - real_writew(SegValue(ds),reg_si+2,i); // According to RBIL this should update the number of blocks field to what was successfully transferred - LOG_MSG("Error in disk read"); - killRead = false; - reg_ah = 0x04; - CALLBACK_SCF(true); - return CBRET_NONE; - } - for(t=0;t<512;t++) { - real_writeb(segat,bufptr,sectbuf[t]); - bufptr++; - } - } - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x43: /* Extended Write Sectors to Drive */ - if(driveInactive(drivenum)) { - reg_ah = 0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - - /* Read Disk Address Packet */ - readDAP(SegValue(ds),reg_si); - - if (dap.num==0) { - reg_ah = 0x01; - CALLBACK_SCF(true); - return CBRET_NONE; - } - - bufptr = dap.off; - for(i=0;igetSectSize();t++) { - sectbuf[t] = real_readb(dap.seg,bufptr); - bufptr++; - } - - if(drivenum < 2) - diskio_delay(512, 0); // Floppy - else - diskio_delay(512); - - last_status = imageDiskList[drivenum]->Write_AbsoluteSector(dap.sector+i, §buf[0]); - if(last_status != 0x00) { - CALLBACK_SCF(true); - return CBRET_NONE; - } - } - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x44: /* Extended Verify Sectors [http://www.ctyme.com/intr/rb-0711.htm] */ - if(driveInactive(drivenum)) { - reg_ah = 0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - /* Just signal success, we don't actually verify anything */ - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - case 0x48: { /* get drive parameters */ - uint16_t bufsz; - - if(driveInactive(drivenum)) { - reg_ah = 0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - - segat = SegValue(ds); - bufptr = reg_si; - bufsz = real_readw(segat,bufptr+0); - if (bufsz < 0x1A) { - reg_ah = 0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - if (bufsz > 0x1E) bufsz = 0x1E; - else bufsz = 0x1A; - - tmpheads = tmpcyl = tmpsect = tmpsize = 0; - if (!IDE_GetPhysGeometry(drivenum,tmpheads,tmpcyl,tmpsect,tmpsize)) - imageDiskList[drivenum]->Get_Geometry(&tmpheads, &tmpcyl, &tmpsect, &tmpsize); - - real_writew(segat,bufptr+0x00,bufsz); - real_writew(segat,bufptr+0x02,0x0003); /* C/H/S valid, DMA boundary errors handled */ - real_writed(segat,bufptr+0x04,tmpcyl); - real_writed(segat,bufptr+0x08,tmpheads); - real_writed(segat,bufptr+0x0C,tmpsect); - real_writed(segat,bufptr+0x10,tmpcyl*tmpheads*tmpsect); - real_writed(segat,bufptr+0x14,0); - real_writew(segat,bufptr+0x18,512); - if (bufsz >= 0x1E) - real_writed(segat,bufptr+0x1A,0xFFFFFFFF); /* no EDD information available */ - - reg_ah = 0x00; - CALLBACK_SCF(false); - } break; - case 0x4B: /* Terminate disk emulation or get emulation status */ - /* NTS: Windows XP CD-ROM boot requires this call to work or else setup cannot find its own files. */ - if (reg_dl == 0x7F || (INT13_ElTorito_NoEmuDriveNumber != 0 && INT13_ElTorito_NoEmuDriveNumber == reg_dl)) { - if (reg_al <= 1) { - PhysPt p = (SegValue(ds) << 4) + reg_si; - phys_writeb(p + 0x00,0x13); - phys_writeb(p + 0x01,(0/*no emulation*/) + ((INT13_ElTorito_IDEInterface >= 0) ? 0x40 : 0)); - phys_writeb(p + 0x02,INT13_ElTorito_NoEmuDriveNumber); - if (INT13_ElTorito_IDEInterface >= 0) { - phys_writeb(p + 0x03,(unsigned char)(INT13_ElTorito_IDEInterface >> 1)); /* which IDE controller */ - phys_writew(p + 0x08,INT13_ElTorito_IDEInterface & 1);/* bit 0: IDE master/slave */ - } - else { - phys_writeb(p + 0x03,0); - phys_writew(p + 0x08,0); - } - phys_writed(p + 0x04,0); - phys_writew(p + 0x0A,0); - phys_writew(p + 0x0C,0); - phys_writew(p + 0x0E,0); - phys_writeb(p + 0x10,0); - phys_writeb(p + 0x11,0); - phys_writeb(p + 0x12,0); - reg_ah = 0x00; - CALLBACK_SCF(false); - break; - } - else { - reg_ah=0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - } - else { - reg_ah=0xff; - CALLBACK_SCF(true); - return CBRET_NONE; - } - break; - default: - LOG(LOG_BIOS,LOG_ERROR)("INT13: Function %x called on drive %x (dos drive %d)", (int)reg_ah, (int)reg_dl, (int)drivenum); - reg_ah=0xff; - CALLBACK_SCF(true); - } - return CBRET_NONE; - } - - void CALLBACK_DeAllocate(Bitu in); - - void BIOS_UnsetupDisks(void) { - if (call_int13 != 0) { - CALLBACK_DeAllocate(call_int13); - RealSetVec(0x13,0); /* zero INT 13h for now */ - call_int13 = 0; - } - if (diskparm0 != 0) { - CALLBACK_DeAllocate(diskparm0); - diskparm0 = 0; - } - if (diskparm1 != 0) { - CALLBACK_DeAllocate(diskparm1); - diskparm1 = 0; - } - } - - void BIOS_SetupDisks(void) { - unsigned int i; - - if (IS_PC98_ARCH) { - // TODO - return; - } - - /* TODO Start the time correctly */ - call_int13=CALLBACK_Allocate(); - CALLBACK_Setup(call_int13,&INT13_DiskHandler,CB_INT13,"Int 13 Bios disk"); - RealSetVec(0x13,CALLBACK_RealPointer(call_int13)); - - //release the drives after a soft reset - if ((!bootguest&&(bootvm||!use_quick_reboot))||bootdrive<0) FreeBIOSDiskList(); - - /* FIXME: Um... these aren't callbacks. Why are they allocated as callbacks? We have ROM general allocation now. */ - diskparm0 = CALLBACK_Allocate(); - CALLBACK_SetDescription(diskparm0,"BIOS Disk 0 parameter table"); - diskparm1 = CALLBACK_Allocate(); - CALLBACK_SetDescription(diskparm1,"BIOS Disk 1 parameter table"); - swapPosition = 0; - - RealSetVec(0x41,CALLBACK_RealPointer(diskparm0)); - RealSetVec(0x46,CALLBACK_RealPointer(diskparm1)); - - PhysPt dp0physaddr=CALLBACK_PhysPointer(diskparm0); - PhysPt dp1physaddr=CALLBACK_PhysPointer(diskparm1); - for(i=0;i<16;i++) { - phys_writeb(dp0physaddr+i,0); - phys_writeb(dp1physaddr+i,0); - } - - imgDTASeg = 0; - - /* Setup the Bios Area */ - mem_writeb(BIOS_HARDDISK_COUNT,2); - - killRead = false; - swapping_requested = false; - } - - // VFD *.FDD floppy disk format support - - uint8_t imageDiskVFD::Read_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,void * data,unsigned int req_sector_size) { - const vfdentry *ent; - _driveUsed = true; - - if (req_sector_size == 0) - req_sector_size = sector_size; - - // LOG_MSG("VFD read sector: CHS %u/%u/%u sz=%u",cylinder,head,sector,req_sector_size); - - ent = findSector(head,cylinder,sector,req_sector_size); - if (ent == NULL) return 0x05; - if (ent->getSectorSize() != req_sector_size) return 0x05; - - if (ent->hasSectorData()) { - fseek(diskimg,(long)ent->data_offset,SEEK_SET); - if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; - if (fread(data,req_sector_size,1,diskimg) != 1) return 0x05; - return 0; - } - else if (ent->hasFill()) { - memset(data,ent->fillbyte,req_sector_size); - return 0x00; - } - - return 0x05; - } - - uint8_t imageDiskVFD::Read_AbsoluteSector(uint32_t sectnum, void * data) { - unsigned int c,h,s; - - if (sectors == 0 || heads == 0) - return 0x05; - - s = (sectnum % sectors) + 1; - h = (sectnum / sectors) % heads; - c = (sectnum / sectors / heads); + uint64_t imgSizeK = diskSizeK; + active = false; + hardDrive = isHardDisk; + if(!isHardDisk) { + bool founddisk = false; + + if (imgName != NULL) { + const char *ext = strrchr((char*)imgName,'.'); + if (ext != NULL) { + if (!strcasecmp(ext,".fdi")) { + if (imgSizeK >= 160) { + FDIHDR fdihdr; + + // PC-98 .FDI images appear to be 4096 bytes of a short header and many zeros. + // followed by a straight sector dump of the disk. The header is NOT NECESSARILY + // 4KB in size, but usually is. + LOG_MSG("Image file has .FDI extension, assuming FDI image and will take on parameters in header."); + + assert(sizeof(fdihdr) == 0x20); + if (fseek(imgFile,0,SEEK_SET) == 0 && ftell(imgFile) == 0 && + fread(&fdihdr,sizeof(fdihdr),1,imgFile) == 1) { + uint32_t ofs = host_readd(fdihdr.headersize); + uint32_t fddsize = host_readd(fdihdr.fddsize); /* includes header */ + uint32_t sectorsize = host_readd(fdihdr.sectorsize); + + if (sectorsize != 0 && ((sectorsize & (sectorsize - 1)) == 0/*is power of 2*/) && + sectorsize >= 256 && sectorsize <= 1024 && + ofs != 0 && (ofs % sectorsize) == 0/*offset is nonzero and multiple of sector size*/ && + (ofs % 1024) == 0/*offset is a multiple of 1024 because of imgSizeK*/ && + fddsize >= sectorsize && (fddsize/1024) <= (imgSizeK+4)) { + + founddisk = true; + sector_size = sectorsize; + imgSizeK -= (ofs / 1024); + image_base = ofs; + image_length -= ofs; + LOG_MSG("FDI header: sectorsize is %u bytes/sector, header is %u bytes, fdd size (plus header) is %u bytes", + sectorsize,ofs,fddsize); + + /* take on the geometry. */ + sectors = host_readd(fdihdr.sectors); + heads = host_readd(fdihdr.surfaces); + cylinders = host_readd(fdihdr.cylinders); + LOG_MSG("FDI: Geometry is C/H/S %u/%u/%u", + cylinders,heads,sectors); + } + else { + LOG_MSG("FDI header rejected. sectorsize=%u headersize=%u fddsize=%u", + sectorsize,ofs,fddsize); + } + } + else { + LOG_MSG("Unable to read .FDI header"); + } + } + } + } + } + + if (sectors == 0 && heads == 0 && cylinders == 0) { + uint8_t i=0; + while (DiskGeometryList[i].ksize!=0x0) { + if ((DiskGeometryList[i].ksize==imgSizeK) || + (DiskGeometryList[i].ksize+1==imgSizeK)) { + if (DiskGeometryList[i].ksize!=imgSizeK) + LOG_MSG("ImageLoader: image file with additional data, might not load!"); + founddisk = true; + active = true; + floppytype = i; + heads = DiskGeometryList[i].headscyl; + cylinders = DiskGeometryList[i].cylcount; + sectors = DiskGeometryList[i].secttrack; + sector_size = DiskGeometryList[i].bytespersect; + LOG_MSG("Identified '%s' as C/H/S %u/%u/%u %u bytes/sector", + imgName,cylinders,heads,sectors,sector_size); + break; + } + // Supports cases where the size of a 1.2 Mbytes disk image file is 1.44 Mbytes. + if(DiskGeometryList[i].ksize == 1200 && (imgSizeK > 1200 && imgSizeK <= 1440)) { + char buff[0x20]; + if (fseek(imgFile,0,SEEK_SET) == 0 && ftell(imgFile) == 0 && fread(buff,sizeof(buff),1,imgFile) == 1) { + if(buff[0x18] == DiskGeometryList[i].secttrack) { + founddisk = true; + active = true; + floppytype = i; + heads = DiskGeometryList[i].headscyl; + cylinders = DiskGeometryList[i].cylcount; + sectors = DiskGeometryList[i].secttrack; + break; + } + } + } + i++; + } + } + if(!founddisk) { + active = false; + } + } + else { /* hard disk */ + if (imgName != NULL) { + char *ext = strrchr((char*)imgName,'.'); + if (ext != NULL) { + if (!strcasecmp(ext,".nhd")) { + if (imgSizeK >= 160) { + NHD_FILE_HEAD nhdhdr; + + LOG_MSG("Image file has .NHD extension, assuming NHD image and will take on parameters in header."); + + assert(sizeof(nhdhdr) == 0x200); + if (fseek(imgFile,0,SEEK_SET) == 0 && ftell(imgFile) == 0 && + fread(&nhdhdr,sizeof(nhdhdr),1,imgFile) == 1 && + host_readd((ConstHostPt)(&nhdhdr.dwHeadSize)) >= 0x200 && + !memcmp(nhdhdr.szFileID,"T98HDDIMAGE.R0\0",15)) { + uint32_t ofs = host_readd((ConstHostPt)(&nhdhdr.dwHeadSize)); + uint32_t sectorsize = host_readw((ConstHostPt)(&nhdhdr.wSectLen)); + + if (sectorsize != 0 && ((sectorsize & (sectorsize - 1)) == 0/*is power of 2*/) && + sectorsize >= 256 && sectorsize <= 1024 && + ofs != 0 && (ofs % sectorsize) == 0/*offset is nonzero and multiple of sector size*/) { + + sector_size = sectorsize; + imgSizeK -= (ofs / 1024); + image_base = ofs; + image_length -= ofs; + LOG_MSG("NHD header: sectorsize is %u bytes/sector, header is %u bytes", + sectorsize,ofs); + + /* take on the geometry. + * PC-98 IPL1 support will need it to make sense of the partition table. */ + sectors = host_readw((ConstHostPt)(&nhdhdr.wSect)); + heads = host_readw((ConstHostPt)(&nhdhdr.wHead)); + cylinders = host_readd((ConstHostPt)(&nhdhdr.dwCylinder)); + LOG_MSG("NHD: Geometry is C/H/S %u/%u/%u", + cylinders,heads,sectors); + } + else { + LOG_MSG("NHD header rejected. sectorsize=%u headersize=%u", + sectorsize,ofs); + } + } + else { + LOG_MSG("Unable to read .NHD header"); + } + } + } + if (!strcasecmp(ext,".hdi")) { + if (imgSizeK >= 160) { + HDIHDR hdihdr; + + // PC-98 .HDI images appear to be 4096 bytes of a short header and many zeros. + // followed by a straight sector dump of the disk. The header is NOT NECESSARILY + // 4KB in size, but usually is. + LOG_MSG("Image file has .HDI extension, assuming HDI image and will take on parameters in header."); + + assert(sizeof(hdihdr) == 0x20); + if (fseek(imgFile,0,SEEK_SET) == 0 && ftell(imgFile) == 0 && + fread(&hdihdr,sizeof(hdihdr),1,imgFile) == 1) { + uint32_t ofs = host_readd(hdihdr.headersize); + uint32_t hddsize = host_readd(hdihdr.hddsize); /* includes header */ + uint32_t sectorsize = host_readd(hdihdr.sectorsize); + + if (sectorsize != 0 && ((sectorsize & (sectorsize - 1)) == 0/*is power of 2*/) && + sectorsize >= 256 && sectorsize <= 1024 && + ofs != 0 && (ofs % sectorsize) == 0/*offset is nonzero and multiple of sector size*/ && + (ofs % 1024) == 0/*offset is a multiple of 1024 because of imgSizeK*/ && + hddsize >= sectorsize && (hddsize/1024) <= (imgSizeK+4)) { + + sector_size = sectorsize; + image_base = ofs; + image_length -= ofs; + LOG_MSG("HDI header: sectorsize is %u bytes/sector, header is %u bytes, hdd size (plus header) is %u bytes", + sectorsize,ofs,hddsize); + + /* take on the geometry. + * PC-98 IPL1 support will need it to make sense of the partition table. */ + sectors = host_readd(hdihdr.sectors); + heads = host_readd(hdihdr.surfaces); + cylinders = host_readd(hdihdr.cylinders); + LOG_MSG("HDI: Geometry is C/H/S %u/%u/%u", + cylinders,heads,sectors); + } + else { + LOG_MSG("HDI header rejected. sectorsize=%u headersize=%u hddsize=%u", + sectorsize,ofs,hddsize); + } + } + else { + LOG_MSG("Unable to read .HDI header"); + } + } + } + } + } + + LBA = imgSize / sector_size; + if(!int13_enable_48bitLBA && (LBA > 0x0FFFFFFF)) + LOG_MSG("Warning: Disk size (%lf GiB) exceeds 128GiB limit for 28-bit LBA. You may need to enable 48-bit LBA support.", (double)image_length / (1024.0 * 1024 * 1024)); + if (sectors == 0 || heads == 0 || cylinders == 0) + active = false; + } +} + +imageDisk::imageDisk(class DOS_Drive *useDrive, unsigned int letter, uint32_t freeMB, int timeout) +{ + ffdd = new fatFromDOSDrive(useDrive, freeMB, timeout); + if (!ffdd->success) { + LOG_MSG("FAT conversion failed"); + delete ffdd; + ffdd = NULL; + return; + } + if (IS_PC98_ARCH) { + cylinders = ffdd->sasi.cylinders; + heads = ffdd->sasi.surfaces; + sectors = ffdd->sasi.sectors; + } + drvnum = letter; + diskimg = NULL; + diskname[0] = '\0'; + hardDrive = true; + Set_GeometryForHardDisk(); +} + +imageDisk::~imageDisk() +{ + if(diskimg != NULL) { + fclose(diskimg); + diskimg=NULL; + } + if (ffdd) + delete ffdd; +} + +void imageDisk::Set_GeometryForHardDisk() +{ + sector_size = 512; + partTable mbrData; + for (int m = (Read_AbsoluteSector(0, &mbrData) ? 0 : 4); m--;) + { + if(!mbrData.pentry[m].partSize) continue; + bootstrap bootbuffer; + if (Read_AbsoluteSector(mbrData.pentry[m].absSectStart, &bootbuffer)) continue; + bootbuffer.sectorspertrack = var_read(&bootbuffer.sectorspertrack); + bootbuffer.headcount = var_read(&bootbuffer.headcount); + uint32_t setSect = bootbuffer.sectorspertrack; + uint32_t setHeads = bootbuffer.headcount; + uint32_t setCyl = (mbrData.pentry[m].absSectStart + mbrData.pentry[m].partSize) / (setSect * setHeads); + Set_Geometry(setHeads, setCyl, setSect, 512); + return; + } + if (!diskimg) return; + uint32_t diskimgsize; + fseek(diskimg,0,SEEK_END); + diskimgsize = (uint32_t)ftell(diskimg); + fseek(diskimg,current_fpos,SEEK_SET); + Set_Geometry(16, diskimgsize / (512 * 63 * 16), 63, 512); +} + +void imageDisk::Set_Geometry(uint32_t setHeads, uint32_t setCyl, uint32_t setSect, uint32_t setSectSize) { + + uint64_t total_sectors = (uint64_t)setHeads * (uint64_t)setCyl * (uint64_t)setSect; + sectors = 63; // Default to 63 sectors per track. + heads = 16; // Default to 16 heads. + + if(setHeads == 0 || setCyl == 0 || setSect == 0 || total_sectors > 0x0FFFFFFF) { + LOG_MSG("bios_disk: Invalid disk geometry C, H, S = %u, %u, %u", setCyl, setHeads, setSect); + active = false; + return; + } + else if (total_sectors > 1024ULL * 255ULL * 63ULL) { + LOG_MSG("bios_disk: Disk geometry C, H, S = %u, %u, %u is too large, setting to max limits", setCyl, setHeads, setSect); + cylinders = 1024; + heads = 255; + sectors = 63; + active = true; + return; + } + + if (IS_PC98_ARCH) { + /* TODO: Some early PC-98 SCSI BIOS has its own 4096 cylinder (12-bit) limit */ + } + + if(total_sectors < 17ULL * 1024 * 16) + sectors = 17; + else if(total_sectors < 32ULL * 1024 * 16) + sectors = 32; + else + sectors = 63; + + while(heads < 255) { + uint64_t test_cyl = + total_sectors / ((uint64_t)heads * sectors); + if(test_cyl <= 1024) + break; + heads <<= 1; + if(heads > 255) { + heads = 255; + break; + } + } + cylinders = (uint32_t)(total_sectors / ((uint32_t)heads * sectors)); + sector_size = setSectSize; + active = true; +} + +void imageDisk::Get_Geometry(uint32_t * getHeads, uint32_t *getCyl, uint32_t *getSect, uint32_t *getSectSize) { + *getHeads = heads; + *getCyl = cylinders; + *getSect = sectors; + *getSectSize = sector_size; +} + +uint8_t imageDisk::GetBiosType(void) { + if(!hardDrive) { + return (uint8_t)DiskGeometryList[floppytype].biosval; + } else return 0; +} + +uint32_t imageDisk::getSectSize(void) { + return sector_size; +} + +static uint8_t GetDosDriveNumber(uint8_t biosNum) { + switch(biosNum) { + case 0x0: + return 0x0; + case 0x1: + return 0x1; + case 0x80: + return 0x2; + case 0x81: + return 0x3; + case 0x82: + return 0x4; + case 0x83: + return 0x5; + default: + return 0x7f; + } +} + +static bool driveInactive(uint8_t driveNum) { + if(driveNum>=MAX_DISK_IMAGES) { + int driveCalledFor = reg_dl & 0x7f; + LOG(LOG_BIOS,LOG_ERROR)("Disk %d non-existent", driveCalledFor); + last_status = 0x01; + CALLBACK_SCF(true); + return true; + } + if(imageDiskList[driveNum] == NULL) { + LOG(LOG_BIOS,LOG_ERROR)("Disk %d not active", (int)driveNum); + last_status = 0x01; + CALLBACK_SCF(true); + return true; + } + if(!imageDiskList[driveNum]->active) { + LOG(LOG_BIOS,LOG_ERROR)("Disk %d not active", (int)driveNum); + last_status = 0x01; + CALLBACK_SCF(true); + return true; + } + return false; +} + +static struct { + uint8_t sz; + uint8_t res; + uint16_t num; + uint16_t off; + uint16_t seg; + uint32_t sector; +} dap; + +static void readDAP(uint16_t seg, uint16_t off) { + dap.sz = real_readb(seg,off++); + dap.res = real_readb(seg,off++); + dap.num = real_readw(seg,off); off += 2; + dap.off = real_readw(seg,off); off += 2; + dap.seg = real_readw(seg,off); off += 2; + + /* Although sector size is 64-bit, 32-bit 2TB limit should be more than enough */ + dap.sector = real_readd(seg,off); off +=4; + + if (real_readd(seg,off)) { + LOG(LOG_BIOS,LOG_WARN)("INT13: 64-bit sector addressing not supported"); + dap.num = 0; /* this will cause calling INT 13h code to return an error */ + } +} + +void IDE_ResetDiskByBIOS(unsigned char disk); +void IDE_EmuINT13DiskReadByBIOS(unsigned char disk,unsigned int cyl,unsigned int head,unsigned sect); +bool IDE_GetPhysGeometry(unsigned char disk,uint32_t &heads,uint32_t &cyl,uint32_t §,uint32_t &size, uint64_t &LBA); +void IDE_EmuINT13DiskReadByBIOS_LBA(unsigned char disk,uint64_t lba); + +void diskio_delay(Bits value/*bytes*/, int type = -1); + +/* For El Torito "No emulation" INT 13 services */ +unsigned char INT13_ElTorito_NoEmuDriveNumber = 0; +CDROM_Interface * INT13_ElTorito_cdrom = NULL; +signed char INT13_ElTorito_IDEInterface = -1; /* (controller * 2) + (is_slave?1:0) */ +char INT13_ElTorito_NoEmuCDROMDrive = 0; + +bool GetMSCDEXDrive(unsigned char drive_letter, CDROM_Interface **_cdrom); + + +static Bitu INT13_DiskHandler(void) { + uint16_t segat, bufptr; + uint8_t sectbuf[2048/*CD-ROM support*/]; + uint8_t drivenum; + Bitu i,t; + uint64_t LBA = 0; + last_drive = reg_dl; + drivenum = GetDosDriveNumber(reg_dl); + bool any_images = false; + for(i = 0;i < MAX_DISK_IMAGES;i++) { + if(imageDiskList[i]) any_images=true; + } + + // unconditionally enable the interrupt flag + CALLBACK_SIF(true); + + /* map out functions 0x40-0x48 if not emulating INT 13h extensions */ + if (!int13_extensions_enable && reg_ah >= 0x40 && reg_ah <= 0x48) { + LOG_MSG("Warning: Guest is attempting to use INT 13h extensions (AH=0x%02X). Set 'int 13 extensions=1' if you want to enable them.\n",reg_ah); + reg_ah=0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + + //drivenum = 0; + //LOG_MSG("INT13: Function %x called on drive %x (dos drive %d)", reg_ah, reg_dl, drivenum); + + // NOTE: the 0xff error code returned in some cases is questionable; 0x01 seems more correct + switch(reg_ah) { + case 0x0: /* Reset disk */ + { + /* if there aren't any diskimages (so only localdrives and virtual drives) + * always succeed on reset disk. If there are diskimages then and only then + * do real checks + */ + if (any_images && driveInactive(drivenum)) { + /* driveInactive sets carry flag if the specified drive is not available */ + if ((machine==MCH_CGA) || (machine==MCH_AMSTRAD) || (machine==MCH_PCJR)) { + /* those bioses call floppy drive reset for invalid drive values */ + if (((imageDiskList[0]) && (imageDiskList[0]->active)) || ((imageDiskList[1]) && (imageDiskList[1]->active))) { + if (machine!=MCH_PCJR && reg_dl<0x80) reg_ip++; + last_status = 0x00; + CALLBACK_SCF(false); + } + } + return CBRET_NONE; + } + if (machine!=MCH_PCJR && reg_dl<0x80) reg_ip++; + if (reg_dl >= 0x80) IDE_ResetDiskByBIOS(reg_dl); + last_status = 0x00; + CALLBACK_SCF(false); + } + break; + case 0x1: /* Get status of last operation */ + + if(last_status != 0x00) { + reg_ah = last_status; + CALLBACK_SCF(true); + } else { + reg_ah = 0x00; + CALLBACK_SCF(false); + } + break; + case 0x2: /* Read sectors */ + if (reg_al==0) { + reg_ah = 0x01; + CALLBACK_SCF(true); + return CBRET_NONE; + } + if (drivenum >= MAX_DISK_IMAGES || imageDiskList[drivenum] == NULL) { + if (drivenum >= DOS_DRIVES || !Drives[drivenum] || Drives[drivenum]->isRemovable()) { + reg_ah = 0x01; + CALLBACK_SCF(true); + return CBRET_NONE; + } + // Inherit the Earth cdrom and Amberstar use it as a disk test + if (((reg_dl&0x80)==0x80) && (reg_dh==0) && ((reg_cl&0x3f)==1)) { + if (reg_ch==0) { + // write some MBR data into buffer for Amberstar installer + real_writeb(SegValue(es),reg_bx+0x1be,0x80); // first partition is active + real_writeb(SegValue(es),reg_bx+0x1c2,0x06); // first partition is FAT16B + } + reg_ah = 0; + CALLBACK_SCF(false); + return CBRET_NONE; + } + } + if (driveInactive(drivenum)) { + reg_ah = 0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + + /* INT 13h is limited to 512 bytes/sector (as far as I know). + * The sector buffer in this function is limited to 512 bytes/sector, + * so this is also a protection against overrunning the stack if you + * mount a PC-98 disk image (1024 bytes/sector) and try to read it with INT 13h. */ + if (imageDiskList[drivenum]->sector_size > sizeof(sectbuf)) { + LOG(LOG_MISC,LOG_DEBUG)("INT 13h: Read failed because disk bytes/sector on drive %c is too large",(char)drivenum+'A'); + + imageDiskChange[drivenum] = false; + + reg_ah = 0x80; /* timeout */ + CALLBACK_SCF(true); + return CBRET_NONE; + } + + /* If the disk changed, the first INT 13h read will signal an error and set AH = 0x06 to indicate disk change */ + if (drivenum < 2 && imageDiskChange[drivenum]) { + LOG(LOG_MISC,LOG_DEBUG)("INT 13h: Failing first read of drive %c to indicate disk change",(char)drivenum+'A'); + + imageDiskChange[drivenum] = false; + + reg_ah = 0x06; /* diskette changed or removed */ + CALLBACK_SCF(true); + return CBRET_NONE; + } + + segat = SegValue(es); + bufptr = reg_bx; + for(i=0;iRead_Sector((uint32_t)reg_dh, (uint32_t)(reg_ch | ((reg_cl & 0xc0)<< 2)), (uint32_t)((reg_cl & 63)+i), sectbuf); + + if (imageDiskList[drivenum]->class_id == imageDisk::ID_EL_TORITO_FLOPPY) + diskio_delay(512); + else if (drivenum < 2) + diskio_delay(512, 0); // Floppy + else + diskio_delay(512); + + /* IDE emulation: simulate change of IDE state that would occur on a real machine after INT 13h */ + IDE_EmuINT13DiskReadByBIOS(reg_dl, (uint32_t)(reg_ch | ((reg_cl & 0xc0)<< 2)), (uint32_t)reg_dh, (uint32_t)((reg_cl & 63)+i)); + + if((last_status != 0x00) || killRead) { + LOG_MSG("Error in disk read"); + killRead = false; + reg_ah = 0x04; + CALLBACK_SCF(true); + return CBRET_NONE; + } + for(t=0;t<512;t++) { + real_writeb(segat,bufptr,sectbuf[t]); + bufptr++; + } + } + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x3: /* Write sectors */ + + if(driveInactive(drivenum) || !imageDiskList[drivenum]) { + reg_ah = 0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + + /* INT 13h is limited to 512 bytes/sector (as far as I know). + * The sector buffer in this function is limited to 512 bytes/sector, + * so this is also a protection against overrunning the stack if you + * mount a PC-98 disk image (1024 bytes/sector) and try to read it with INT 13h. */ + if (imageDiskList[drivenum]->sector_size > sizeof(sectbuf)) { + LOG(LOG_MISC,LOG_DEBUG)("INT 13h: Write failed because disk bytes/sector on drive %c is too large",(char)drivenum+'A'); + + imageDiskChange[drivenum] = false; + + reg_ah = 0x80; /* timeout */ + CALLBACK_SCF(true); + return CBRET_NONE; + } + + bufptr = reg_bx; + for(i=0;igetSectSize();t++) { + sectbuf[t] = real_readb(SegValue(es),bufptr); + bufptr++; + } + + if(drivenum < 2) + diskio_delay(512, 0); // Floppy + else + diskio_delay(512); + + last_status = imageDiskList[drivenum]->Write_Sector((uint32_t)reg_dh, (uint32_t)(reg_ch | ((reg_cl & 0xc0) << 2)), (uint32_t)((reg_cl & 63) + i), §buf[0]); + if(last_status != 0x00) { + CALLBACK_SCF(true); + return CBRET_NONE; + } + } + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x04: /* Verify sectors */ + if (reg_al==0) { + reg_ah = 0x01; + CALLBACK_SCF(true); + return CBRET_NONE; + } + if(driveInactive(drivenum)) { + reg_ah = last_status; + return CBRET_NONE; + } + + /* TODO: Finish coding this section */ + /* + segat = SegValue(es); + bufptr = reg_bx; + for(i=0;iRead_Sector((uint32_t)reg_dh, (uint32_t)(reg_ch | ((reg_cl & 0xc0)<< 2)), (uint32_t)((reg_cl & 63)+i), sectbuf); + if(last_status != 0x00) { + LOG_MSG("Error in disk read"); + CALLBACK_SCF(true); + return CBRET_NONE; + } + for(t=0;t<512;t++) { + real_writeb(segat,bufptr,sectbuf[t]); + bufptr++; + } + }*/ + reg_ah = 0x00; + //Qbix: The following codes don't match my specs. al should be number of sector verified + //reg_al = 0x10; /* CRC verify failed */ + //reg_al = 0x00; /* CRC verify succeeded */ + CALLBACK_SCF(false); + + break; + case 0x05: /* Format track */ + /* ignore it. I just fucking want FORMAT.COM to write the FAT structure for God's sake */ + LOG_MSG("WARNING: Format track ignored\n"); + if (driveInactive(drivenum)) { + reg_ah = 0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + CALLBACK_SCF(false); + reg_ah = 0x00; + break; + case 0x06: /* Format track set bad sector flags */ + /* ignore it. I just fucking want FORMAT.COM to write the FAT structure for God's sake */ + LOG_MSG("WARNING: Format track set bad sector flags ignored (6)\n"); + if (driveInactive(drivenum)) { + reg_ah = 0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + CALLBACK_SCF(false); + reg_ah = 0x00; + break; + case 0x07: /* Format track set bad sector flags */ + /* ignore it. I just fucking want FORMAT.COM to write the FAT structure for God's sake */ + LOG_MSG("WARNING: Format track set bad sector flags ignored (7)\n"); + if (driveInactive(drivenum)) { + reg_ah = 0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + CALLBACK_SCF(false); + reg_ah = 0x00; + break; + case 0x08: /* Get drive parameters */ + if(driveInactive(drivenum)) { + if(drivenum == 0) { + // if no floppy drive 0 mounted, return fixed values for 1.44MB drive + // This fixes a problem in some DOS applications that occurred when booting from the hard disk without a mounted floppy disk. + reg_ax = 0x00; + reg_bl = 4; + reg_ch = 79; + reg_cl = 18; + reg_dh = 1; + reg_dl = 1; + last_status = 0x00; + CALLBACK_SCF(false); + return CBRET_NONE; + } + last_status = 0x07; + reg_ah = last_status; + CALLBACK_SCF(true); + return CBRET_NONE; + } + reg_ax = 0x00; + reg_bl = imageDiskList[drivenum]->GetBiosType(); + uint32_t tmpheads, tmpcyl, tmpsect, tmpsize; + imageDiskList[drivenum]->Get_Geometry(&tmpheads, &tmpcyl, &tmpsect, &tmpsize); + if (tmpcyl==0) LOG(LOG_BIOS,LOG_ERROR)("INT13 DrivParm: cylinder count zero!"); + else tmpcyl--; // cylinder count -> max cylinder + if (tmpheads==0) LOG(LOG_BIOS,LOG_ERROR)("INT13 DrivParm: head count zero!"); + else tmpheads--; // head count -> max head + + /* older BIOSes were known to subtract 1 or 2 additional "reserved" cylinders. + * some code, such as Windows 3.1 WDCTRL, might assume that fact. emulate that here */ + { + uint32_t reserv = imageDiskList[drivenum]->Get_Reserved_Cylinders(); + if (tmpcyl > reserv) tmpcyl -= reserv; + else tmpcyl = 0; + } + + reg_ch = (uint8_t)(tmpcyl & 0xff); + reg_cl = (uint8_t)(((tmpcyl >> 2) & 0xc0) | (tmpsect & 0x3f)); + reg_dh = (uint8_t)tmpheads; + last_status = 0x00; + if (reg_dl&0x80) { // harddisks + reg_dl = 0; + for (int index = 2; index < MAX_DISK_IMAGES; index++) { + if (imageDiskList[index] != NULL) reg_dl++; + } + } else { // floppy disks + reg_dl = 0; + if(imageDiskList[0] != NULL) reg_dl++; + if(imageDiskList[1] != NULL) reg_dl++; + } + CALLBACK_SCF(false); + break; + case 0x11: /* Recalibrate drive */ + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x15: /* Get disk type */ + /* Korean Powerdolls uses this to detect harddrives */ + LOG(LOG_BIOS,LOG_WARN)("INT13: Get disktype used!"); + if (any_images) { + if(driveInactive(drivenum)) { + last_status = 0x07; + reg_ah = last_status; + CALLBACK_SCF(true); + return CBRET_NONE; + } + imageDiskList[drivenum]->Get_Geometry(&tmpheads, &tmpcyl, &tmpsect, &tmpsize); + uint64_t largesize = tmpheads*tmpcyl*tmpsect*tmpsize; + largesize/=512; + uint32_t ts = static_cast(largesize); + reg_ah = (drivenum < 2)?(int13_disk_change_detect_enable?2:1):3; //With 2 for floppy MSDOS starts calling int 13 ah 16 + if(reg_ah == 3) { + reg_cx = static_cast(ts >>16); + reg_dx = static_cast(ts & 0xffff); + } + CALLBACK_SCF(false); + } else { + if (drivenum = 2048, "not big enough" ); + diskio_delay(512); + if (killRead || !src_drive->ReadSectorsHost(sectbuf, false, dap.sector+i, 1)) { + real_writew(SegValue(ds),reg_si+2,i); // According to RBIL this should update the number of blocks field to what was successfully transferred + LOG_MSG("Error in CDROM read"); + killRead = false; + reg_ah = 0x04; + CALLBACK_SCF(true); + src_drive->Release(); + return CBRET_NONE; + } + + for(t=0;t<2048;t++) { + real_writeb(segat,bufptr,sectbuf[t]); + bufptr++; + } + } + reg_ah = 0x00; + CALLBACK_SCF(false); + return CBRET_NONE; + } + + if (!any_images) { + // Inherit the Earth cdrom (uses it as disk test) + if (((reg_dl&0x80)==0x80) && (reg_dh==0) && ((reg_cl&0x3f)==1)) { + reg_ah = 0; + CALLBACK_SCF(false); + return CBRET_NONE; + } + } + if (driveInactive(drivenum)) { + reg_ah = 0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + + segat = dap.seg; + bufptr = dap.off; + for(i=0;iRead_AbsoluteSector(dap.sector+i, sectbuf); + + if(drivenum < 2) + diskio_delay(512, 0); // Floppy + else + diskio_delay(512); + + IDE_EmuINT13DiskReadByBIOS_LBA(reg_dl,dap.sector+i); + + if((last_status != 0x00) || killRead) { + real_writew(SegValue(ds),reg_si+2,i); // According to RBIL this should update the number of blocks field to what was successfully transferred + LOG_MSG("Error in disk read"); + killRead = false; + reg_ah = 0x04; + CALLBACK_SCF(true); + return CBRET_NONE; + } + for(t=0;t<512;t++) { + real_writeb(segat,bufptr,sectbuf[t]); + bufptr++; + } + } + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x43: /* Extended Write Sectors to Drive */ + if(driveInactive(drivenum)) { + reg_ah = 0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + + /* Read Disk Address Packet */ + readDAP(SegValue(ds),reg_si); + + if (dap.num==0) { + reg_ah = 0x01; + CALLBACK_SCF(true); + return CBRET_NONE; + } + + bufptr = dap.off; + for(i=0;igetSectSize();t++) { + sectbuf[t] = real_readb(dap.seg,bufptr); + bufptr++; + } + + if(drivenum < 2) + diskio_delay(512, 0); // Floppy + else + diskio_delay(512); + + last_status = imageDiskList[drivenum]->Write_AbsoluteSector(dap.sector+i, §buf[0]); + if(last_status != 0x00) { + CALLBACK_SCF(true); + return CBRET_NONE; + } + } + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x44: /* Extended Verify Sectors [http://www.ctyme.com/intr/rb-0711.htm] */ + if(driveInactive(drivenum)) { + reg_ah = 0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + /* Just signal success, we don't actually verify anything */ + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + case 0x48: { /* get drive parameters */ + uint16_t bufsz; + + if(driveInactive(drivenum)) { + reg_ah = 0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + + segat = SegValue(ds); + bufptr = reg_si; + bufsz = real_readw(segat,bufptr+0); + if (bufsz < 0x1A) { + reg_ah = 0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + if (bufsz > 0x1E) bufsz = 0x1E; + else bufsz = 0x1A; + + tmpheads = tmpcyl = tmpsect = tmpsize = 0; + if(!IDE_GetPhysGeometry(drivenum, tmpheads, tmpcyl, tmpsect, tmpsize, LBA)) { + imageDiskList[drivenum]->Get_Geometry(&tmpheads, &tmpcyl, &tmpsect, &tmpsize); + LBA = imageDiskList[drivenum]->getLBA(); + } + real_writew(segat,bufptr+0x00,bufsz); + real_writew(segat,bufptr+0x02,0x0003); /* C/H/S valid, DMA boundary errors handled */ + real_writed(segat,bufptr+0x04,tmpcyl); + real_writed(segat,bufptr+0x08,tmpheads); + real_writed(segat,bufptr+0x0C,tmpsect); + real_writed(segat,bufptr+0x10, int13_enable_48bitLBA?(uint32_t)(LBA & 0xFFFFFFFF): (uint32_t)(LBA > 0x0FFFFFFF?0x0FFFFFFF:LBA)); /* LBA lower 32bit */ + real_writed(segat,bufptr+0x14, int13_enable_48bitLBA?(uint32_t)(LBA >> 32):0); /* LBA upper 32bit */ + real_writew(segat,bufptr+0x18,512); + if (bufsz >= 0x1E) + real_writed(segat,bufptr+0x1A,0xFFFFFFFF); /* no EDD information available */ + + reg_ah = 0x00; + CALLBACK_SCF(false); + } break; + case 0x4B: /* Terminate disk emulation or get emulation status */ + /* NTS: Windows XP CD-ROM boot requires this call to work or else setup cannot find its own files. */ + if (reg_dl == 0x7F || (INT13_ElTorito_NoEmuDriveNumber != 0 && INT13_ElTorito_NoEmuDriveNumber == reg_dl)) { + if (reg_al <= 1) { + PhysPt p = (SegValue(ds) << 4) + reg_si; + phys_writeb(p + 0x00,0x13); + phys_writeb(p + 0x01,(0/*no emulation*/) + ((INT13_ElTorito_IDEInterface >= 0) ? 0x40 : 0)); + phys_writeb(p + 0x02,INT13_ElTorito_NoEmuDriveNumber); + if (INT13_ElTorito_IDEInterface >= 0) { + phys_writeb(p + 0x03,(unsigned char)(INT13_ElTorito_IDEInterface >> 1)); /* which IDE controller */ + phys_writew(p + 0x08,INT13_ElTorito_IDEInterface & 1);/* bit 0: IDE master/slave */ + } + else { + phys_writeb(p + 0x03,0); + phys_writew(p + 0x08,0); + } + phys_writed(p + 0x04,0); + phys_writew(p + 0x0A,0); + phys_writew(p + 0x0C,0); + phys_writew(p + 0x0E,0); + phys_writeb(p + 0x10,0); + phys_writeb(p + 0x11,0); + phys_writeb(p + 0x12,0); + reg_ah = 0x00; + CALLBACK_SCF(false); + break; + } + else { + reg_ah=0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + } + else { + reg_ah=0xff; + CALLBACK_SCF(true); + return CBRET_NONE; + } + break; + default: + LOG(LOG_BIOS,LOG_ERROR)("INT13: Function %x called on drive %x (dos drive %d)", (int)reg_ah, (int)reg_dl, (int)drivenum); + reg_ah=0xff; + CALLBACK_SCF(true); + } + return CBRET_NONE; +} + +void CALLBACK_DeAllocate(Bitu in); + +void BIOS_UnsetupDisks(void) { + if (call_int13 != 0) { + CALLBACK_DeAllocate(call_int13); + RealSetVec(0x13,0); /* zero INT 13h for now */ + call_int13 = 0; + } + if (diskparm0 != 0) { + CALLBACK_DeAllocate(diskparm0); + diskparm0 = 0; + } + if (diskparm1 != 0) { + CALLBACK_DeAllocate(diskparm1); + diskparm1 = 0; + } +} + +void BIOS_SetupDisks(void) { + unsigned int i; + + if (IS_PC98_ARCH) { + // TODO + return; + } + +/* TODO Start the time correctly */ + call_int13=CALLBACK_Allocate(); + CALLBACK_Setup(call_int13,&INT13_DiskHandler,CB_INT13,"Int 13 Bios disk"); + RealSetVec(0x13,CALLBACK_RealPointer(call_int13)); + + //release the drives after a soft reset + if ((!bootguest&&(bootvm||!use_quick_reboot))||bootdrive<0) FreeBIOSDiskList(); + + /* FIXME: Um... these aren't callbacks. Why are they allocated as callbacks? We have ROM general allocation now. */ + diskparm0 = CALLBACK_Allocate(); + CALLBACK_SetDescription(diskparm0,"BIOS Disk 0 parameter table"); + diskparm1 = CALLBACK_Allocate(); + CALLBACK_SetDescription(diskparm1,"BIOS Disk 1 parameter table"); + swapPosition = 0; + + RealSetVec(0x41,CALLBACK_RealPointer(diskparm0)); + RealSetVec(0x46,CALLBACK_RealPointer(diskparm1)); + + PhysPt dp0physaddr=CALLBACK_PhysPointer(diskparm0); + PhysPt dp1physaddr=CALLBACK_PhysPointer(diskparm1); + for(i=0;i<16;i++) { + phys_writeb(dp0physaddr+i,0); + phys_writeb(dp1physaddr+i,0); + } + + imgDTASeg = 0; + +/* Setup the Bios Area */ + mem_writeb(BIOS_HARDDISK_COUNT,2); + + killRead = false; + swapping_requested = false; +} + +// VFD *.FDD floppy disk format support + +uint8_t imageDiskVFD::Read_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,void * data,unsigned int req_sector_size) { + const vfdentry *ent; + _driveUsed = true; + + if (req_sector_size == 0) + req_sector_size = sector_size; + +// LOG_MSG("VFD read sector: CHS %u/%u/%u sz=%u",cylinder,head,sector,req_sector_size); + + ent = findSector(head,cylinder,sector,req_sector_size); + if (ent == NULL) return 0x05; + if (ent->getSectorSize() != req_sector_size) return 0x05; + + if (ent->hasSectorData()) { + fseek(diskimg,(long)ent->data_offset,SEEK_SET); + if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; + if (fread(data,req_sector_size,1,diskimg) != 1) return 0x05; + return 0; + } + else if (ent->hasFill()) { + memset(data,ent->fillbyte,req_sector_size); + return 0x00; + } + + return 0x05; +} + +uint8_t imageDiskVFD::Read_AbsoluteSector(uint32_t sectnum, void * data) { + unsigned int c,h,s; + + if (sectors == 0 || heads == 0) + return 0x05; + + s = (sectnum % sectors) + 1; + h = (sectnum / sectors) % heads; + c = (sectnum / sectors / heads); + + _driveUsed = true; + return Read_Sector(h,c,s,data); +} + +imageDiskVFD::vfdentry *imageDiskVFD::findSector(uint8_t head,uint8_t track,uint8_t sector/*TODO: physical head?*/,unsigned int req_sector_size) { + std::vector::iterator i = dents.begin(); + unsigned char szb=0xFF; + + if (req_sector_size == 0) + req_sector_size = sector_size; + + if (req_sector_size != ~0U) { + unsigned int c = req_sector_size; + while (c >= 128U) { + c >>= 1U; + szb++; + } + +// LOG_MSG("req=%u c=%u szb=%u",req_sector_size,c,szb); + + if (szb > 8 || c != 64U) + return NULL; + } + + while (i != dents.end()) { + const imageDiskVFD::vfdentry &ent = *i; + + if (ent.head == head && + ent.track == track && + ent.sector == sector && + (ent.sizebyte == szb || req_sector_size == ~0U)) + return &(*i); + + ++i; + } + + return NULL; +} + +uint8_t imageDiskVFD::Write_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,const void * data,unsigned int req_sector_size) { + unsigned long new_offset; + unsigned char tmp[12]; + vfdentry *ent; + +// LOG_MSG("VFD write sector: CHS %u/%u/%u",cylinder,head,sector); + + if (req_sector_size == 0) + req_sector_size = sector_size; + + ent = findSector(head,cylinder,sector,req_sector_size); + if (ent == NULL) return 0x05; + if (ent->getSectorSize() != req_sector_size) return 0x05; + + if (ent->hasSectorData()) { + fseek(diskimg,(long)ent->data_offset,SEEK_SET); + if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; + if (fwrite(data,req_sector_size,1,diskimg) != 1) return 0x05; + return 0; + } + else if (ent->hasFill()) { + bool isfill = false; + + /* well, is the data provided one character repeated? + * note the format cannot represent a fill byte of 0xFF */ + if (((unsigned char*)data)[0] != 0xFF) { + unsigned int i=1; + + do { + if (((unsigned char*)data)[i] == ((unsigned char*)data)[0]) { + if ((++i) == req_sector_size) { + isfill = true; + break; // yes! + } + } + else { + break; // nope + } + } while (1); + } + + if (ent->entry_offset == 0) return 0x05; + + if (isfill) { + fseek(diskimg,(long)ent->entry_offset,SEEK_SET); + if ((uint32_t)ftell(diskimg) != ent->entry_offset) return 0x05; + if (fread(tmp,12,1,diskimg) != 1) return 0x05; + + tmp[0x04] = ((unsigned char*)data)[0]; // change the fill byte + + LOG_MSG("VFD write: 'fill' sector changing fill byte to 0x%x",tmp[0x04]); + + fseek(diskimg,(long)ent->entry_offset,SEEK_SET); + if ((uint32_t)ftell(diskimg) != ent->entry_offset) return 0x05; + if (fwrite(tmp,12,1,diskimg) != 1) return 0x05; + } + else { + fseek(diskimg,0,SEEK_END); + new_offset = (unsigned long)ftell(diskimg); + + /* we have to change it from a fill sector to an actual sector */ + LOG_MSG("VFD write: changing 'fill' sector to one with data (data at %lu)",(unsigned long)new_offset); + + fseek(diskimg,(long)ent->entry_offset,SEEK_SET); + if ((uint32_t)ftell(diskimg) != ent->entry_offset) return 0x05; + if (fread(tmp,12,1,diskimg) != 1) return 0x05; + + tmp[0x00] = ent->track; + tmp[0x01] = ent->head; + tmp[0x02] = ent->sector; + tmp[0x03] = ent->sizebyte; + tmp[0x04] = 0xFF; // no longer a fill byte + tmp[0x05] = 0x00; // TODO ?? + tmp[0x06] = 0x00; // TODO ?? + tmp[0x07] = 0x00; // TODO ?? + *((uint32_t*)(tmp+8)) = new_offset; + ent->fillbyte = 0xFF; + ent->data_offset = (uint32_t)new_offset; + + fseek(diskimg,(long)ent->entry_offset,SEEK_SET); + if ((uint32_t)ftell(diskimg) != ent->entry_offset) return 0x05; + if (fwrite(tmp,12,1,diskimg) != 1) return 0x05; + + fseek(diskimg,(long)ent->data_offset,SEEK_SET); + if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; + if (fwrite(data,req_sector_size,1,diskimg) != 1) return 0x05; + } + } + + return 0x05; +} + +uint8_t imageDiskVFD::Write_AbsoluteSector(uint32_t sectnum,const void *data) { + unsigned int c,h,s; + + if (sectors == 0 || heads == 0) + return 0x05; + + s = (sectnum % sectors) + 1; + h = (sectnum / sectors) % heads; + c = (sectnum / sectors / heads); + + _driveUsed = true; + return Write_Sector(h,c,s,data); +} + +imageDiskVFD::imageDiskVFD(FILE *imgFile, const char *imgName, uint32_t imgSizeK, bool isHardDisk) : imageDisk(ID_VFD) { + (void)isHardDisk;//UNUSED + unsigned char tmp[16]; + + heads = 1; + cylinders = 0; + image_base = 0; + sectors = 0; + active = false; + sector_size = 0; + reserved_cylinders = 0; + diskSizeK = imgSizeK; + diskimg = imgFile; + + if (imgName != NULL) + diskname = imgName; + + // NOTES: + // + // +0x000: "VFD1.00" + // +0x0DC: array of 12-byte entries each describing a sector + // + // Each entry: + // +0x0: track + // +0x1: head + // +0x2: sector + // +0x3: sector size (128 << this byte) + // +0x4: fill byte, or 0xFF + // +0x5: unknown + // +0x6: unknown + // +0x7: unknown + // +0x8: absolute data offset (32-bit integer) or 0xFFFFFFFF if the entire sector is that fill byte + fseek(diskimg,0,SEEK_SET); + memset(tmp,0,8); + size_t readResult = fread(tmp,1,8,diskimg); + if (readResult != 8) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in imageDiskVFD constructor\n"); + return; + } + + if (!memcmp(tmp,"VFD1.",5)) { + uint32_t stop_at = 0xC3FC; + unsigned long entof; + + // load table. + // we have to determine as we go where to stop reading. + // the source of info I read assumes the whole header (and table) + // is 0xC3FC bytes. I'm not inclined to assume that, so we go by + // that OR the first sector offset whichever is smaller. + // the table seems to trail off into a long series of 0xFF at the end. + fseek(diskimg,0xDC,SEEK_SET); + while ((entof=((unsigned long)ftell(diskimg)+12ul)) <= stop_at) { + memset(tmp,0xFF,12); + readResult = fread(tmp,12,1,diskimg); + if (readResult != 1) { + LOG(LOG_IO, LOG_ERROR) ("Reading error in imageDiskVFD constructor\n"); + return; + } + + if (!memcmp(tmp,"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF",12)) + continue; + if (!memcmp(tmp,"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",12)) + continue; + + struct vfdentry v; + + v.track = tmp[0]; + v.head = tmp[1]; + v.sector = tmp[2]; + v.sizebyte = tmp[3]; + v.fillbyte = tmp[4]; + v.data_offset = *((uint32_t*)(tmp+8)); + v.entry_offset = (uint32_t)entof; + + // maybe the table can end sooner than 0xC3FC? + // if we see sectors appear at an offset lower than our stop_at point + // then adjust the stop_at point. assume the table cannot mix with + // sector data. + if (v.hasSectorData()) { + if (stop_at > v.data_offset) + stop_at = v.data_offset; + } + + dents.push_back(v); + + LOG_MSG("VFD entry: track=%u head=%u sector=%u size=%u fill=0x%2X has_data=%u has_fill=%u entoff=%lu dataoff=%lu", + v.track, + v.head, + v.sector, + v.getSectorSize(), + v.fillbyte, + v.hasSectorData(), + v.hasFill(), + (unsigned long)v.entry_offset, + (unsigned long)v.data_offset); + } + + if (!dents.empty()) { + /* okay, now to figure out what the geometry of the disk is. + * we cannot just work from an "absolute" disk image model + * because there's no VFD header to just say what the geometry is. + * Like the IBM PC BIOS, we have to look at the disk and figure out + * which geometry to apply to it, even if the FDD format allows + * sectors on other tracks to have wild out of range sector, track, + * and head numbers or odd sized sectors. + * + * First, determine sector size according to the boot sector. */ + const vfdentry *ent; + + ent = findSector(/*head*/0,/*track*/0,/*sector*/1,~0U); + if (ent != NULL) { + if (ent->sizebyte <= 3) /* x <= 1024 */ + sector_size = ent->getSectorSize(); + } + + /* oh yeah right, sure. + * I suppose you're one of those FDD images where the sector size is 128 bytes/sector + * in the boot sector and the rest is 256 bytes/sector elsewhere. I have no idea why + * but quite a few FDD images have this arrangement. */ + if (sector_size != 0 && sector_size < 512) { + ent = findSector(/*head*/0,/*track*/1,/*sector*/1,~0U); + if (ent != NULL) { + if (ent->sizebyte <= 3) { /* x <= 1024 */ + unsigned int nsz = ent->getSectorSize(); + if (sector_size != nsz) + LOG_MSG("VFD warning: sector size changes between track 0 and 1"); + if (sector_size < nsz) + sector_size = nsz; + } + } + } + + uint8_t i; + if (sector_size != 0) { + i=0; + while (DiskGeometryList[i].ksize != 0) { + const diskGeo &diskent = DiskGeometryList[i]; + + if (diskent.bytespersect == sector_size) { + ent = findSector(0,0,diskent.secttrack); + if (ent != NULL) { + LOG_MSG("VFD disk probe: %u/%u/%u exists",0,0,diskent.secttrack); + if (sectors < diskent.secttrack) + sectors = diskent.secttrack; + } + } + + i++; + } + } + + if (sector_size != 0 && sectors != 0) { + i=0; + while (DiskGeometryList[i].ksize != 0) { + const diskGeo &diskent = DiskGeometryList[i]; + + if (diskent.bytespersect == sector_size && diskent.secttrack >= sectors) { + ent = findSector(0,diskent.cylcount-1,sectors); + if (ent != NULL) { + LOG_MSG("VFD disk probe: %u/%u/%u exists",0,diskent.cylcount-1,sectors); + if (cylinders < diskent.cylcount) + cylinders = diskent.cylcount; + } + } + + i++; + } + } + + if (sector_size != 0 && sectors != 0 && cylinders != 0) { + ent = findSector(1,0,sectors); + if (ent != NULL) { + LOG_MSG("VFD disk probe: %u/%u/%u exists",1,0,sectors); + heads = 2; + } + } + + // TODO: drive_fat.cpp should use an extension to this API to allow changing the sectors/track + // according to what it reads from the MS-DOS BIOS parameter block, just like real MS-DOS. + // This would allow better representation of strange disk formats such as the "extended" + // floppy format that Microsoft used to use for Word 95 and Windows 95 install floppies. + + LOG_MSG("VFD geometry detection: C/H/S %u/%u/%u %u bytes/sector", + cylinders, heads, sectors, sector_size); + + bool founddisk = false; + if (sector_size != 0 && sectors != 0 && cylinders != 0 && heads != 0) + founddisk = true; + + if(!founddisk) { + active = false; + } else { + incrementFDD(); + } + } + } +} + +imageDiskVFD::~imageDiskVFD() { + if(diskimg != NULL) { + fclose(diskimg); + diskimg=NULL; + } +} + +// D88 *.D88 floppy disk format support + +enum { + D88_TRACKMAX = 164, + D88_HEADERSIZE = 0x20 + (D88_TRACKMAX * 4) +}; + +#pragma pack(push,1) +typedef struct D88HEAD { + char fd_name[17]; // +0x00 Disk Name + unsigned char reserved1[9]; // +0x11 Reserved + unsigned char protect; // +0x1A Write Protect bit:4 + unsigned char fd_type; // +0x1B Disk Format + uint32_t fd_size; // +0x1C Disk Size + uint32_t trackp[D88_TRACKMAX]; // +0x20 164 x 4 = 656 = 0x290 +} D88HEAD; // =0x2B0 total + +typedef struct D88SEC { + unsigned char c; // +0x00 + unsigned char h; // +0x01 + unsigned char r; // +0x02 + unsigned char n; // +0x03 + uint16_t sectors; // +0x04 Sector Count + unsigned char mfm_flg; // +0x06 sides + unsigned char del_flg; // +0x07 DELETED DATA + unsigned char stat; // +0x08 STATUS (FDC ret) + unsigned char seektime; // +0x09 Seek Time + unsigned char reserved[3]; // +0x0A Reserved + unsigned char rpm_flg; // +0x0D rpm 0:1.2 1:1.44 + uint16_t size; // +0x0E Sector Size + // +} D88SEC; // =0x10 total +#pragma pack(pop) + +uint8_t imageDiskD88::Read_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,void * data,unsigned int req_sector_size) { + const vfdentry *ent; + + if (req_sector_size == 0) + req_sector_size = sector_size; + +// LOG_MSG("D88 read sector: CHS %u/%u/%u sz=%u",cylinder,head,sector,req_sector_size); + + ent = findSector(head,cylinder,sector,req_sector_size); + if (ent == NULL) return 0x05; + if (ent->getSectorSize() != req_sector_size) return 0x05; + + fseek(diskimg,(long)ent->data_offset,SEEK_SET); + if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; + if (fread(data,req_sector_size,1,diskimg) != 1) return 0x05; + + _driveUsed = true; + return 0; +} + +uint8_t imageDiskD88::Read_AbsoluteSector(uint32_t sectnum, void * data) { + unsigned int c,h,s; + + if (sectors == 0 || heads == 0) + return 0x05; + + s = (sectnum % sectors) + 1; + h = (sectnum / sectors) % heads; + c = (sectnum / sectors / heads); + + _driveUsed = true; + return Read_Sector(h,c,s,data); +} + +imageDiskD88::vfdentry *imageDiskD88::findSector(uint8_t head,uint8_t track,uint8_t sector/*TODO: physical head?*/,unsigned int req_sector_size) { + if ((size_t)track >= dents.size()) + return NULL; + + std::vector::iterator i = dents.begin(); + + if (req_sector_size == 0) + req_sector_size = sector_size; + + while (i != dents.end()) { + const imageDiskD88::vfdentry &ent = *i; + + if (ent.head == head && + ent.track == track && + ent.sector == sector && + (ent.sector_size == req_sector_size || req_sector_size == ~0U)) + return &(*i); + + ++i; + } + + return NULL; +} + +uint8_t imageDiskD88::Write_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,const void * data,unsigned int req_sector_size) { + const vfdentry *ent; + + if (req_sector_size == 0) + req_sector_size = sector_size; + +// LOG_MSG("D88 read sector: CHS %u/%u/%u sz=%u",cylinder,head,sector,req_sector_size); + + ent = findSector(head,cylinder,sector,req_sector_size); + if (ent == NULL) return 0x05; + if (ent->getSectorSize() != req_sector_size) return 0x05; + + fseek(diskimg,(long)ent->data_offset,SEEK_SET); + if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; + if (fwrite(data,req_sector_size,1,diskimg) != 1) return 0x05; + return 0; +} + +uint8_t imageDiskD88::Write_AbsoluteSector(uint32_t sectnum,const void *data) { + unsigned int c,h,s; + + if (sectors == 0 || heads == 0) + return 0x05; + + s = (sectnum % sectors) + 1; + h = (sectnum / sectors) % heads; + c = (sectnum / sectors / heads); + return Write_Sector(h,c,s,data); +} + +imageDiskD88::imageDiskD88(FILE *imgFile, const char *imgName, uint32_t imgSizeK, bool isHardDisk) : imageDisk(ID_D88) { + (void)isHardDisk;//UNUSED + D88HEAD head; + + fd_type_major = DISKTYPE_2D; + fd_type_minor = 0; + + assert(sizeof(D88HEAD) == 0x2B0); + assert(sizeof(D88SEC) == 0x10); + + heads = 0; + cylinders = 0; + image_base = 0; + sectors = 0; + active = false; + sector_size = 0; + reserved_cylinders = 0; + diskSizeK = imgSizeK; + diskimg = imgFile; + + if (imgName != NULL) + diskname = imgName; + + // NOTES: + // + // +0x000: D88 header + // +0x020: Offset of D88 tracks, per track + // +0x2B0: + // + // Track offsets are sequential, always + // + // Each track is an array of: + // + // ENTRY: + // + // + // + // Array of ENTRY from offset until next track + fseek(diskimg,0,SEEK_END); + off_t fsz = ftell(diskimg); + + fseek(diskimg,0,SEEK_SET); + if (fread(&head,sizeof(head),1,diskimg) != 1) return; + + // validate fd_size + if (host_readd((ConstHostPt)(&head.fd_size)) > (uint32_t)fsz) return; + + fd_type_major = head.fd_type >> 4U; + fd_type_minor = head.fd_type & 0xFU; + + // validate that none of the track offsets extend past the file + { + for (unsigned int i=0;i < D88_TRACKMAX;i++) { + uint32_t trackoff = host_readd((ConstHostPt)(&head.trackp[i])); + + if (trackoff == 0) continue; + + if ((trackoff + 16U) > (uint32_t)fsz) { + LOG_MSG("D88: track starts past end of file"); + return; + } + } + } + + // read each track + for (unsigned int track=0;track < D88_TRACKMAX;track++) { + uint32_t trackoff = host_readd((ConstHostPt)(&head.trackp[track])); + + if (trackoff != 0) { + fseek(diskimg, (long)trackoff, SEEK_SET); + if ((off_t)ftell(diskimg) != (off_t)trackoff) continue; + + D88SEC s; + unsigned int count = 0; + + do { + if (fread(&s,sizeof(s),1,diskimg) != 1) break; + + uint16_t sector_count = host_readw((ConstHostPt)(&s.sectors)); + uint16_t sector_size = host_readw((ConstHostPt)(&s.size)); + + if (sector_count == 0U || sector_size < 128U) break; + if (sector_count > 128U || sector_size > 16384U) break; + if (s.n > 8U) s.n = 8U; + + vfdentry vent; + vent.sector_size = 128 << s.n; + vent.data_offset = (uint32_t)ftell(diskimg); + vent.entry_offset = vent.data_offset - (uint32_t)16; + vent.track = s.c; + vent.head = s.h; + vent.sector = s.r; + + LOG_MSG("D88: trackindex=%u C/H/S/sz=%u/%u/%u/%u data-at=0x%lx", + track,vent.track,vent.head,vent.sector,vent.sector_size,(unsigned long)vent.data_offset); + + dents.push_back(vent); + if ((++count) >= sector_count) break; + + fseek(diskimg, (long)sector_size, SEEK_CUR); + } while (1); + } + } + + if (!dents.empty()) { + /* okay, now to figure out what the geometry of the disk is. + * we cannot just work from an "absolute" disk image model + * because there's no D88 header to just say what the geometry is. + * Like the IBM PC BIOS, we have to look at the disk and figure out + * which geometry to apply to it, even if the FDD format allows + * sectors on other tracks to have wild out of range sector, track, + * and head numbers or odd sized sectors. + * + * First, determine sector size according to the boot sector. */ + bool founddisk = false; + const vfdentry *ent; + + ent = findSector(/*head*/0,/*track*/0,/*sector*/1,~0U); + if (ent != NULL) { + if (ent->getSectorSize() <= 1024) /* x <= 1024 */ + sector_size = ent->getSectorSize(); + } + + /* oh yeah right, sure. + * I suppose you're one of those FDD images where the sector size is 128 bytes/sector + * in the boot sector and the rest is 256 bytes/sector elsewhere. I have no idea why + * but quite a few FDD images have this arrangement. */ + if (sector_size != 0 && sector_size < 512) { + ent = findSector(/*head*/0,/*track*/1,/*sector*/1,~0U); + if (ent != NULL) { + if (ent->getSectorSize() <= 1024) { /* x <= 1024 */ + unsigned int nsz = ent->getSectorSize(); + if (sector_size != nsz) + LOG_MSG("D88 warning: sector size changes between track 0 and 1"); + if (sector_size < nsz) + sector_size = nsz; + } + } + } + + if (sector_size != 0) { + unsigned int i = 0; + while (DiskGeometryList[i].ksize != 0) { + const diskGeo &diskent = DiskGeometryList[i]; + + if (diskent.bytespersect == sector_size) { + ent = findSector(0,0,diskent.secttrack); + if (ent != NULL) { + LOG_MSG("D88 disk probe: %u/%u/%u exists",0,0,diskent.secttrack); + if (sectors < diskent.secttrack) + sectors = diskent.secttrack; + } + } + + i++; + } + } + + if (sector_size != 0 && sectors != 0) { + unsigned int i = 0; + while (DiskGeometryList[i].ksize != 0) { + const diskGeo &diskent = DiskGeometryList[i]; + + if (diskent.bytespersect == sector_size && diskent.secttrack >= sectors) { + ent = findSector(0,diskent.cylcount-1,sectors); + if (ent != NULL) { + LOG_MSG("D88 disk probe: %u/%u/%u exists",0,diskent.cylcount-1,sectors); + if (cylinders < diskent.cylcount) + cylinders = diskent.cylcount; + } + } + + i++; + } + } + + if (sector_size != 0 && sectors != 0 && cylinders != 0) { + ent = findSector(1,0,sectors); + if (ent != NULL) { + LOG_MSG("D88 disk probe: %u/%u/%u exists",1,0,sectors); + heads = 2; + } + } + + // TODO: drive_fat.cpp should use an extension to this API to allow changing the sectors/track + // according to what it reads from the MS-DOS BIOS parameter block, just like real MS-DOS. + // This would allow better representation of strange disk formats such as the "extended" + // floppy format that Microsoft used to use for Word 95 and Windows 95 install floppies. + + LOG_MSG("D88 geometry detection: C/H/S %u/%u/%u %u bytes/sector", + cylinders, heads, sectors, sector_size); + + if (sector_size != 0 && sectors != 0 && cylinders != 0 && heads != 0) + founddisk = true; + + if(!founddisk) { + active = false; + } else { + incrementFDD(); + } + } +} + +imageDiskD88::~imageDiskD88() { + if(diskimg != NULL) { + fclose(diskimg); + diskimg=NULL; + } +} + +/*--------------------------------*/ + +uint8_t imageDiskNFD::Read_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,void * data,unsigned int req_sector_size) { + const vfdentry *ent; + + if (req_sector_size == 0) + req_sector_size = sector_size; + +// LOG_MSG("NFD read sector: CHS %u/%u/%u sz=%u",cylinder,head,sector,req_sector_size); + + ent = findSector(head,cylinder,sector,req_sector_size); + if (ent == NULL) return 0x05; + if (ent->getSectorSize() != req_sector_size) return 0x05; + + fseek(diskimg,(long)ent->data_offset,SEEK_SET); + if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; + if (fread(data,req_sector_size,1,diskimg) != 1) return 0x05; + + _driveUsed = true; + return 0; +} + +uint8_t imageDiskNFD::Read_AbsoluteSector(uint32_t sectnum, void * data) { + unsigned int c,h,s; + + if (sectors == 0 || heads == 0) + return 0x05; + + s = (sectnum % sectors) + 1; + h = (sectnum / sectors) % heads; + c = (sectnum / sectors / heads); + + _driveUsed = true; + return Read_Sector(h,c,s,data); +} + +imageDiskNFD::vfdentry *imageDiskNFD::findSector(uint8_t head,uint8_t track,uint8_t sector/*TODO: physical head?*/,unsigned int req_sector_size) { + if ((size_t)track >= dents.size()) + return NULL; + + std::vector::iterator i = dents.begin(); + + if (req_sector_size == 0) + req_sector_size = sector_size; + + while (i != dents.end()) { + const imageDiskNFD::vfdentry &ent = *i; + + if (ent.head == head && + ent.track == track && + ent.sector == sector && + (ent.sector_size == req_sector_size || req_sector_size == ~0U)) + return &(*i); + + ++i; + } + + return NULL; +} + +uint8_t imageDiskNFD::Write_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,const void * data,unsigned int req_sector_size) { + const vfdentry *ent; + + if (req_sector_size == 0) + req_sector_size = sector_size; + +// LOG_MSG("NFD read sector: CHS %u/%u/%u sz=%u",cylinder,head,sector,req_sector_size); + + ent = findSector(head,cylinder,sector,req_sector_size); + if (ent == NULL) return 0x05; + if (ent->getSectorSize() != req_sector_size) return 0x05; + + fseek(diskimg,(long)ent->data_offset,SEEK_SET); + if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; + if (fwrite(data,req_sector_size,1,diskimg) != 1) return 0x05; + + _driveUsed = true; + return 0; +} + +uint8_t imageDiskNFD::Write_AbsoluteSector(uint32_t sectnum,const void *data) { + unsigned int c,h,s; + + if (sectors == 0 || heads == 0) + return 0x05; + + s = (sectnum % sectors) + 1; + h = (sectnum / sectors) % heads; + c = (sectnum / sectors / heads); + + _driveUsed = true; + return Write_Sector(h,c,s,data); +} + +imageDiskNFD::imageDiskNFD(FILE *imgFile, const char *imgName, uint32_t imgSizeK, bool isHardDisk, unsigned int revision) : imageDisk(ID_NFD) { + (void)isHardDisk;//UNUSED + union { + NFDHDR head; + NFDHDRR1 headr1; + }; // these occupy the same location of memory + + assert(sizeof(NFDHDR) == 0x120); + assert(sizeof(NFDHDRR1) == 0x3C0); + assert(sizeof(NFDHDR_ENTRY) == 0x10); + + heads = 0; + cylinders = 0; + image_base = 0; + sectors = 0; + active = false; + sector_size = 0; + reserved_cylinders = 0; + diskSizeK = imgSizeK; + diskimg = imgFile; + + if (imgName != NULL) + diskname = imgName; + + // NOTES: + // + // +0x000: NFD header + // +0x020: Offset of NFD tracks, per track + // +0x2B0: + // + // Track offsets are sequential, always + // + // Each track is an array of: + // + // ENTRY: + // + // + // + // Array of ENTRY from offset until next track + fseek(diskimg,0,SEEK_END); + off_t fsz = ftell(diskimg); + + fseek(diskimg,0,SEEK_SET); + if (revision == 0) { + if (fread(&head,sizeof(head),1,diskimg) != 1) return; + } + else if (revision == 1) { + if (fread(&headr1,sizeof(headr1),1,diskimg) != 1) return; + } + else { + abort(); + } + + // validate fd_size + if (host_readd((ConstHostPt)(&head.headersize)) < sizeof(head)) return; + if (host_readd((ConstHostPt)(&head.headersize)) > (uint32_t)fsz) return; + + unsigned int data_offset = host_readd((ConstHostPt)(&head.headersize)); + + std::vector< std::pair > seclist; + + if (revision == 0) { + unsigned int secents = (host_readd((ConstHostPt)(&head.headersize)) - sizeof(head)) / sizeof(NFDHDR_ENTRY); + if (secents == 0) return; + secents--; + if (secents == 0) return; + + for (unsigned int i=0;i < secents;i++) { + uint32_t ofs = (uint32_t)ftell(diskimg); + NFDHDR_ENTRY e; + + if (fread(&e,sizeof(e),1,diskimg) != 1) return; + seclist.push_back( std::pair(ofs,e) ); + + if (e.log_cyl == 0xFF || e.log_head == 0xFF || e.log_rec == 0xFF || e.sec_len_pow2 > 7) + continue; + + LOG_MSG("NFD %u/%u: ofs=%lu data=%lu cyl=%u head=%u sec=%u len=%u", + (unsigned int)i, + (unsigned int)secents, + (unsigned long)ofs, + (unsigned long)data_offset, + e.log_cyl, + e.log_head, + e.log_rec, + 128 << e.sec_len_pow2); + + vfdentry vent; + vent.sector_size = 128 << e.sec_len_pow2; + vent.data_offset = (uint32_t)data_offset; + vent.entry_offset = ofs; + vent.track = e.log_cyl; + vent.head = e.log_head; + vent.sector = e.log_rec; + dents.push_back(vent); + + data_offset += 128u << e.sec_len_pow2; + if (data_offset > (unsigned int)fsz) return; + } + } + else { + /* R1 has an array of offsets to where each tracks begins. + * The end of the track is an entry like 0x1A 0x00 0x00 0x00 0x00 0x00 0x00 .... */ + /* The R1 images I have as reference always have offsets in ascending order. */ + for (unsigned int ti=0;ti < 164;ti++) { + uint32_t trkoff = host_readd((ConstHostPt)(&headr1.trackheads[ti])); + + if (trkoff == 0) break; + + fseek(diskimg,(long)trkoff,SEEK_SET); + if ((off_t)ftell(diskimg) != (off_t)trkoff) return; + + NFDHDR_ENTRY e; + + // track id + if (fread(&e,sizeof(e),1,diskimg) != 1) return; + unsigned int sectors = host_readw((ConstHostPt)(&e) + 0); + unsigned int diagcount = host_readw((ConstHostPt)(&e) + 2); + + LOG_MSG("NFD R1 track ent %u offset %lu sectors %u diag %u",ti,(unsigned long)trkoff,sectors,diagcount); + + for (unsigned int s=0;s < sectors;s++) { + uint32_t ofs = (uint32_t)ftell(diskimg); + + if (fread(&e,sizeof(e),1,diskimg) != 1) return; + + LOG_MSG("NFD %u/%u: ofs=%lu data=%lu cyl=%u head=%u sec=%u len=%u rep=%u", + s, + sectors, + (unsigned long)ofs, + (unsigned long)data_offset, + e.log_cyl, + e.log_head, + e.log_rec, + 128 << e.sec_len_pow2, + e.byRetry); + + vfdentry vent; + vent.sector_size = 128 << e.sec_len_pow2; + vent.data_offset = (uint32_t)data_offset; + vent.entry_offset = ofs; + vent.track = e.log_cyl; + vent.head = e.log_head; + vent.sector = e.log_rec; + dents.push_back(vent); + + data_offset += 128u << e.sec_len_pow2; + if (data_offset > (unsigned int)fsz) return; + } + + for (unsigned int d=0;d < diagcount;d++) { + if (fread(&e,sizeof(e),1,diskimg) != 1) return; + + unsigned int retry = e.byRetry; + unsigned int len = host_readd((ConstHostPt)(&e) + 10); + + LOG_MSG("NFD diag %u/%u: retry=%u len=%u data=%lu",d,diagcount,retry,len,(unsigned long)data_offset); + + data_offset += (1+retry) * len; + } + } + } + + if (!dents.empty()) { + /* okay, now to figure out what the geometry of the disk is. + * we cannot just work from an "absolute" disk image model + * because there's no NFD header to just say what the geometry is. + * Like the IBM PC BIOS, we have to look at the disk and figure out + * which geometry to apply to it, even if the FDD format allows + * sectors on other tracks to have wild out of range sector, track, + * and head numbers or odd sized sectors. + * + * First, determine sector size according to the boot sector. */ + bool founddisk = false; + const vfdentry *ent; + + ent = findSector(/*head*/0,/*track*/0,/*sector*/1,~0U); + if (ent != NULL) { + if (ent->getSectorSize() <= 1024) /* x <= 1024 */ + sector_size = ent->getSectorSize(); + } + + /* oh yeah right, sure. + * I suppose you're one of those FDD images where the sector size is 128 bytes/sector + * in the boot sector and the rest is 256 bytes/sector elsewhere. I have no idea why + * but quite a few FDD images have this arrangement. */ + if (sector_size != 0 && sector_size < 512) { + ent = findSector(/*head*/0,/*track*/1,/*sector*/1,~0U); + if (ent != NULL) { + if (ent->getSectorSize() <= 1024) { /* x <= 1024 */ + unsigned int nsz = ent->getSectorSize(); + if (sector_size != nsz) + LOG_MSG("NFD warning: sector size changes between track 0 and 1"); + if (sector_size < nsz) + sector_size = nsz; + } + } + } + + if (sector_size != 0) { + unsigned int i = 0; + while (DiskGeometryList[i].ksize != 0) { + const diskGeo &diskent = DiskGeometryList[i]; + + if (diskent.bytespersect == sector_size) { + ent = findSector(0,0,diskent.secttrack); + if (ent != NULL) { + LOG_MSG("NFD disk probe: %u/%u/%u exists",0,0,diskent.secttrack); + if (sectors < diskent.secttrack) + sectors = diskent.secttrack; + } + } + + i++; + } + } + + if (sector_size != 0 && sectors != 0) { + unsigned int i = 0; + while (DiskGeometryList[i].ksize != 0) { + const diskGeo &diskent = DiskGeometryList[i]; + + if (diskent.bytespersect == sector_size && diskent.secttrack >= sectors) { + ent = findSector(0,diskent.cylcount-1,sectors); + if (ent != NULL) { + LOG_MSG("NFD disk probe: %u/%u/%u exists",0,diskent.cylcount-1,sectors); + if (cylinders < diskent.cylcount) + cylinders = diskent.cylcount; + } + } + + i++; + } + } + + if (sector_size != 0 && sectors != 0 && cylinders != 0) { + ent = findSector(1,0,sectors); + if (ent != NULL) { + LOG_MSG("NFD disk probe: %u/%u/%u exists",1,0,sectors); + heads = 2; + } + } + + // TODO: drive_fat.cpp should use an extension to this API to allow changing the sectors/track + // according to what it reads from the MS-DOS BIOS parameter block, just like real MS-DOS. + // This would allow better representation of strange disk formats such as the "extended" + // floppy format that Microsoft used to use for Word 95 and Windows 95 install floppies. + + LOG_MSG("NFD geometry detection: C/H/S %u/%u/%u %u bytes/sector", + cylinders, heads, sectors, sector_size); + + if (sector_size != 0 && sectors != 0 && cylinders != 0 && heads != 0) + founddisk = true; + + if(!founddisk) { + active = false; + } else { + incrementFDD(); + } + } +} + +imageDiskNFD::~imageDiskNFD() { + if(diskimg != NULL) { + fclose(diskimg); + diskimg=NULL; + } +} + +bool PartitionLoadMBR(std::vector &parts,imageDisk *loadedDisk) { + partTable smbr; + + parts.clear(); + + if (loadedDisk->getSectSize() > sizeof(smbr)) return false; + if (loadedDisk->Read_Sector(0,0,1,&smbr) != 0x00) return false; + if (smbr.magic1 != 0x55 || smbr.magic2 != 0xaa) return false; /* Must have signature */ + + /* first copy the main partition table entries */ + for (size_t i=0;i < 4;i++) + parts.push_back(smbr.pentry[i]); + + /* then, enumerate extended partitions and add the partitions within, doing it in a way that + * allows recursive extended partitions */ + { + size_t i=0; + + do { + if (parts[i].parttype == 0x05/*extended*/ || parts[i].parttype == 0x0F/*LBA extended*/) { + unsigned long sect = parts[i].absSectStart; + unsigned long send = sect + parts[i].partSize; + + /* partitions within an extended partition form a sort of linked list. + * first entry is the partition, sector start relative to parent partition. + * second entry points to next link in the list. */ + + /* parts[i] is the parent partition in this loop. + * this loop will add to the parts vector, the parent + * loop will continue enumerating through the vector + * until all have processed. in this way, extended + * partitions will be expanded into the sub partitions + * until none is left to do. */ + + /* FIXME: Extended partitions within extended partitions not yet tested, + * MS-DOS FDISK.EXE won't generate that. */ + + while (sect < send) { + smbr.magic1 = smbr.magic2 = 0; + loadedDisk->Read_AbsoluteSector(sect,&smbr); + + if (smbr.magic1 != 0x55 || smbr.magic2 != 0xAA) + break; + if (smbr.pentry[0].absSectStart == 0 || smbr.pentry[0].partSize == 0) + break; // FIXME: Not sure what MS-DOS considers the end of the linked list + + const size_t idx = parts.size(); + + /* Right, get this: absolute start sector in entry #0 is relative to this link in the linked list. + * The pointer to the next link in the linked list is relative to the parent partition. Blegh. */ + smbr.pentry[0].absSectStart += sect; + if (smbr.pentry[1].absSectStart != 0) + smbr.pentry[1].absSectStart += parts[i].absSectStart; + + /* if the partition extends past the parent, then stop */ + if ((smbr.pentry[0].absSectStart+smbr.pentry[0].partSize) > (parts[i].absSectStart+parts[i].partSize)) + break; + + parts.push_back(smbr.pentry[0]); + + /* Based on MS-DOS 5.0, the 2nd entry is a link to the next entry, but only if + * start sector is nonzero and type is 0x05/0x0F. I'm not certain if MS-DOS allows + * the linked list to go either direction, but for the sake of preventing infinite + * loops stop if the link points to a lower sector number. */ + if (idx < 256 && (smbr.pentry[1].parttype == 0x05 || smbr.pentry[1].parttype == 0x0F) && + smbr.pentry[1].absSectStart != 0 && smbr.pentry[1].absSectStart > sect) { + sect = smbr.pentry[1].absSectStart; + } + else { + break; + } + } + } + i++; + } while (i < parts.size()); + } + + return true; +} + +bool PartitionLoadIPL1(std::vector<_PC98RawPartition> &parts,imageDisk *loadedDisk) { + unsigned char ipltable[SECTOR_SIZE_MAX]; + + parts.clear(); + + assert(sizeof(_PC98RawPartition) == 32); + if (loadedDisk->getSectSize() > sizeof(ipltable)) return false; + + memset(ipltable,0,sizeof(ipltable)); + if (loadedDisk->Read_Sector(0,0,2,ipltable) != 0) return false; + + const unsigned int max_entries = std::min(16UL,(unsigned long)(loadedDisk->getSectSize() / sizeof(_PC98RawPartition))); + + for (size_t i=0;i < max_entries;i++) { + const _PC98RawPartition *pe = (_PC98RawPartition*)(ipltable+(i * 32)); + + if (pe->mid == 0 && pe->sid == 0 && + pe->ipl_sect == 0 && pe->ipl_head == 0 && pe->ipl_cyl == 0 && + pe->sector == 0 && pe->head == 0 && pe->cyl == 0 && + pe->end_sector == 0 && pe->end_head == 0 && pe->end_cyl == 0) + continue; /* unused */ + + parts.push_back(*pe); + } + + return true; +} + +std::string PartitionIdentifyType(imageDisk *loadedDisk) { + struct partTable mbrData; + + if (loadedDisk->getSectSize() > sizeof(mbrData)) + return std::string(); /* That would cause a buffer overrun */ + + if (loadedDisk->Read_Sector(0,0,1,&mbrData) != 0) + return std::string(); + + if (!memcmp(mbrData.booter+4,"IPL1",4)) + return "IPL1"; /* PC-98 IPL1 */ + + if (mbrData.magic1 == 0x55 && mbrData.magic2 == 0xaa) + return "MBR"; /* IBM PC MBR */ + + return std::string(); +} + +void LogPrintPartitionTable(const std::vector<_PC98RawPartition> &parts) { + for (size_t i=0;i < parts.size();i++) { + const _PC98RawPartition &part = parts[i]; + + LOG(LOG_DOSMISC,LOG_DEBUG)("IPL #%u: boot=%u active=%u startchs=%u/%u/%u endchs=%u/%u/%u '%s'", + (unsigned int)i,(part.mid&0x80)?1:0,(part.sid&0x80)?1:0, + part.cyl,part.head,part.sector,part.end_cyl,part.end_head,part.end_sector, + std::string((char*)part.name,sizeof(part.name)).c_str()); + } +} + +void LogPrintPartitionTable(const std::vector &parts) { + for (size_t i=0;i < parts.size();i++) { + const partTable::partentry_t &part = parts[i]; + + LOG(LOG_DOSMISC,LOG_DEBUG)("MBR #%u: bootflag=%u parttype=0x%02x beginchs=0x%02x%02x%02x endchs=0x%02x%02x%02x start=%llu size=%llu", + (unsigned int)i,(part.bootflag&0x80)?1:0,part.parttype, + part.beginchs[0],part.beginchs[1],part.beginchs[2], + part.endchs[0],part.endchs[1],part.endchs[2], + (unsigned long long)part.absSectStart, + (unsigned long long)part.partSize); + } +} - _driveUsed = true; - return Read_Sector(h,c,s,data); - } - - imageDiskVFD::vfdentry *imageDiskVFD::findSector(uint8_t head,uint8_t track,uint8_t sector/*TODO: physical head?*/,unsigned int req_sector_size) { - std::vector::iterator i = dents.begin(); - unsigned char szb=0xFF; - - if (req_sector_size == 0) - req_sector_size = sector_size; - - if (req_sector_size != ~0U) { - unsigned int c = req_sector_size; - while (c >= 128U) { - c >>= 1U; - szb++; - } - - // LOG_MSG("req=%u c=%u szb=%u",req_sector_size,c,szb); - - if (szb > 8 || c != 64U) - return NULL; - } - - while (i != dents.end()) { - const imageDiskVFD::vfdentry &ent = *i; - - if (ent.head == head && - ent.track == track && - ent.sector == sector && - (ent.sizebyte == szb || req_sector_size == ~0U)) - return &(*i); - - ++i; - } - - return NULL; - } - - uint8_t imageDiskVFD::Write_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,const void * data,unsigned int req_sector_size) { - unsigned long new_offset; - unsigned char tmp[12]; - vfdentry *ent; - _driveUsed = true; - // LOG_MSG("VFD write sector: CHS %u/%u/%u",cylinder,head,sector); - - if (req_sector_size == 0) - req_sector_size = sector_size; - - ent = findSector(head,cylinder,sector,req_sector_size); - if (ent == NULL) return 0x05; - if (ent->getSectorSize() != req_sector_size) return 0x05; - - if (ent->hasSectorData()) { - fseek(diskimg,(long)ent->data_offset,SEEK_SET); - if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; - if (fwrite(data,req_sector_size,1,diskimg) != 1) return 0x05; - return 0; - } - else if (ent->hasFill()) { - bool isfill = false; - - /* well, is the data provided one character repeated? - * note the format cannot represent a fill byte of 0xFF */ - if (((unsigned char*)data)[0] != 0xFF) { - unsigned int i=1; - - do { - if (((unsigned char*)data)[i] == ((unsigned char*)data)[0]) { - if ((++i) == req_sector_size) { - isfill = true; - break; // yes! - } - } - else { - break; // nope - } - } while (1); - } - - if (ent->entry_offset == 0) return 0x05; - - if (isfill) { - fseek(diskimg,(long)ent->entry_offset,SEEK_SET); - if ((uint32_t)ftell(diskimg) != ent->entry_offset) return 0x05; - if (fread(tmp,12,1,diskimg) != 1) return 0x05; - - tmp[0x04] = ((unsigned char*)data)[0]; // change the fill byte - - LOG_MSG("VFD write: 'fill' sector changing fill byte to 0x%x",tmp[0x04]); - - fseek(diskimg,(long)ent->entry_offset,SEEK_SET); - if ((uint32_t)ftell(diskimg) != ent->entry_offset) return 0x05; - if (fwrite(tmp,12,1,diskimg) != 1) return 0x05; - } - else { - fseek(diskimg,0,SEEK_END); - new_offset = (unsigned long)ftell(diskimg); - - /* we have to change it from a fill sector to an actual sector */ - LOG_MSG("VFD write: changing 'fill' sector to one with data (data at %lu)",(unsigned long)new_offset); - - fseek(diskimg,(long)ent->entry_offset,SEEK_SET); - if ((uint32_t)ftell(diskimg) != ent->entry_offset) return 0x05; - if (fread(tmp,12,1,diskimg) != 1) return 0x05; - - tmp[0x00] = ent->track; - tmp[0x01] = ent->head; - tmp[0x02] = ent->sector; - tmp[0x03] = ent->sizebyte; - tmp[0x04] = 0xFF; // no longer a fill byte - tmp[0x05] = 0x00; // TODO ?? - tmp[0x06] = 0x00; // TODO ?? - tmp[0x07] = 0x00; // TODO ?? - *((uint32_t*)(tmp+8)) = new_offset; - ent->fillbyte = 0xFF; - ent->data_offset = (uint32_t)new_offset; - - fseek(diskimg,(long)ent->entry_offset,SEEK_SET); - if ((uint32_t)ftell(diskimg) != ent->entry_offset) return 0x05; - if (fwrite(tmp,12,1,diskimg) != 1) return 0x05; - - fseek(diskimg,(long)ent->data_offset,SEEK_SET); - if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; - if (fwrite(data,req_sector_size,1,diskimg) != 1) return 0x05; - } - } - - return 0x05; - } - - uint8_t imageDiskVFD::Write_AbsoluteSector(uint32_t sectnum,const void *data) { - unsigned int c,h,s; - - if (sectors == 0 || heads == 0) - return 0x05; - - s = (sectnum % sectors) + 1; - h = (sectnum / sectors) % heads; - c = (sectnum / sectors / heads); +uint8_t imageDiskEmptyDrive::Read_Sector(uint32_t /*head*/,uint32_t /*cylinder*/,uint32_t /*sector*/,void * /*data*/,unsigned int /*req_sector_size*/) { + return 0x05; +} - _driveUsed = true; - return Write_Sector(h,c,s,data); - } - - imageDiskVFD::imageDiskVFD(FILE *imgFile, const char *imgName, uint32_t imgSizeK, bool isHardDisk) : imageDisk(ID_VFD) { - (void)isHardDisk;//UNUSED - unsigned char tmp[16]; - - heads = 1; - cylinders = 0; - image_base = 0; - sectors = 0; - active = false; - sector_size = 0; - reserved_cylinders = 0; - diskSizeK = imgSizeK; - diskimg = imgFile; - - if (imgName != NULL) - diskname = imgName; - - // NOTES: - // - // +0x000: "VFD1.00" - // +0x0DC: array of 12-byte entries each describing a sector - // - // Each entry: - // +0x0: track - // +0x1: head - // +0x2: sector - // +0x3: sector size (128 << this byte) - // +0x4: fill byte, or 0xFF - // +0x5: unknown - // +0x6: unknown - // +0x7: unknown - // +0x8: absolute data offset (32-bit integer) or 0xFFFFFFFF if the entire sector is that fill byte - fseek(diskimg,0,SEEK_SET); - memset(tmp,0,8); - size_t readResult = fread(tmp,1,8,diskimg); - if (readResult != 8) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in imageDiskVFD constructor\n"); - return; - } - - if (!memcmp(tmp,"VFD1.",5)) { - uint32_t stop_at = 0xC3FC; - unsigned long entof; - - // load table. - // we have to determine as we go where to stop reading. - // the source of info I read assumes the whole header (and table) - // is 0xC3FC bytes. I'm not inclined to assume that, so we go by - // that OR the first sector offset whichever is smaller. - // the table seems to trail off into a long series of 0xFF at the end. - fseek(diskimg,0xDC,SEEK_SET); - while ((entof=((unsigned long)ftell(diskimg)+12ul)) <= stop_at) { - memset(tmp,0xFF,12); - readResult = fread(tmp,12,1,diskimg); - if (readResult != 1) { - LOG(LOG_IO, LOG_ERROR) ("Reading error in imageDiskVFD constructor\n"); - return; - } - - if (!memcmp(tmp,"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF",12)) - continue; - if (!memcmp(tmp,"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",12)) - continue; - - struct vfdentry v; - - v.track = tmp[0]; - v.head = tmp[1]; - v.sector = tmp[2]; - v.sizebyte = tmp[3]; - v.fillbyte = tmp[4]; - v.data_offset = *((uint32_t*)(tmp+8)); - v.entry_offset = (uint32_t)entof; - - // maybe the table can end sooner than 0xC3FC? - // if we see sectors appear at an offset lower than our stop_at point - // then adjust the stop_at point. assume the table cannot mix with - // sector data. - if (v.hasSectorData()) { - if (stop_at > v.data_offset) - stop_at = v.data_offset; - } - - dents.push_back(v); - - LOG_MSG("VFD entry: track=%u head=%u sector=%u size=%u fill=0x%2X has_data=%u has_fill=%u entoff=%lu dataoff=%lu", - v.track, - v.head, - v.sector, - v.getSectorSize(), - v.fillbyte, - v.hasSectorData(), - v.hasFill(), - (unsigned long)v.entry_offset, - (unsigned long)v.data_offset); - } - - if (!dents.empty()) { - /* okay, now to figure out what the geometry of the disk is. - * we cannot just work from an "absolute" disk image model - * because there's no VFD header to just say what the geometry is. - * Like the IBM PC BIOS, we have to look at the disk and figure out - * which geometry to apply to it, even if the FDD format allows - * sectors on other tracks to have wild out of range sector, track, - * and head numbers or odd sized sectors. - * - * First, determine sector size according to the boot sector. */ - const vfdentry *ent; - - ent = findSector(/*head*/0,/*track*/0,/*sector*/1,~0U); - if (ent != NULL) { - if (ent->sizebyte <= 3) /* x <= 1024 */ - sector_size = ent->getSectorSize(); - } - - /* oh yeah right, sure. - * I suppose you're one of those FDD images where the sector size is 128 bytes/sector - * in the boot sector and the rest is 256 bytes/sector elsewhere. I have no idea why - * but quite a few FDD images have this arrangement. */ - if (sector_size != 0 && sector_size < 512) { - ent = findSector(/*head*/0,/*track*/1,/*sector*/1,~0U); - if (ent != NULL) { - if (ent->sizebyte <= 3) { /* x <= 1024 */ - unsigned int nsz = ent->getSectorSize(); - if (sector_size != nsz) - LOG_MSG("VFD warning: sector size changes between track 0 and 1"); - if (sector_size < nsz) - sector_size = nsz; - } - } - } - - uint8_t i; - if (sector_size != 0) { - i=0; - while (DiskGeometryList[i].ksize != 0) { - const diskGeo &diskent = DiskGeometryList[i]; - - if (diskent.bytespersect == sector_size) { - ent = findSector(0,0,diskent.secttrack); - if (ent != NULL) { - LOG_MSG("VFD disk probe: %u/%u/%u exists",0,0,diskent.secttrack); - if (sectors < diskent.secttrack) - sectors = diskent.secttrack; - } - } - - i++; - } - } - - if (sector_size != 0 && sectors != 0) { - i=0; - while (DiskGeometryList[i].ksize != 0) { - const diskGeo &diskent = DiskGeometryList[i]; - - if (diskent.bytespersect == sector_size && diskent.secttrack >= sectors) { - ent = findSector(0,diskent.cylcount-1,sectors); - if (ent != NULL) { - LOG_MSG("VFD disk probe: %u/%u/%u exists",0,diskent.cylcount-1,sectors); - if (cylinders < diskent.cylcount) - cylinders = diskent.cylcount; - } - } - - i++; - } - } - - if (sector_size != 0 && sectors != 0 && cylinders != 0) { - ent = findSector(1,0,sectors); - if (ent != NULL) { - LOG_MSG("VFD disk probe: %u/%u/%u exists",1,0,sectors); - heads = 2; - } - } - - // TODO: drive_fat.cpp should use an extension to this API to allow changing the sectors/track - // according to what it reads from the MS-DOS BIOS parameter block, just like real MS-DOS. - // This would allow better representation of strange disk formats such as the "extended" - // floppy format that Microsoft used to use for Word 95 and Windows 95 install floppies. - - LOG_MSG("VFD geometry detection: C/H/S %u/%u/%u %u bytes/sector", - cylinders, heads, sectors, sector_size); - - bool founddisk = false; - if (sector_size != 0 && sectors != 0 && cylinders != 0 && heads != 0) - founddisk = true; - - if(!founddisk) { - active = false; - } else { - incrementFDD(); - } - } - } - } - - imageDiskVFD::~imageDiskVFD() { - if(diskimg != NULL) { - fclose(diskimg); - diskimg=NULL; - } - } - - // D88 *.D88 floppy disk format support - - enum { - D88_TRACKMAX = 164, - D88_HEADERSIZE = 0x20 + (D88_TRACKMAX * 4) - }; - - #pragma pack(push,1) - typedef struct D88HEAD { - char fd_name[17]; // +0x00 Disk Name - unsigned char reserved1[9]; // +0x11 Reserved - unsigned char protect; // +0x1A Write Protect bit:4 - unsigned char fd_type; // +0x1B Disk Format - uint32_t fd_size; // +0x1C Disk Size - uint32_t trackp[D88_TRACKMAX]; // +0x20 164 x 4 = 656 = 0x290 - } D88HEAD; // =0x2B0 total - - typedef struct D88SEC { - unsigned char c; // +0x00 - unsigned char h; // +0x01 - unsigned char r; // +0x02 - unsigned char n; // +0x03 - uint16_t sectors; // +0x04 Sector Count - unsigned char mfm_flg; // +0x06 sides - unsigned char del_flg; // +0x07 DELETED DATA - unsigned char stat; // +0x08 STATUS (FDC ret) - unsigned char seektime; // +0x09 Seek Time - unsigned char reserved[3]; // +0x0A Reserved - unsigned char rpm_flg; // +0x0D rpm 0:1.2 1:1.44 - uint16_t size; // +0x0E Sector Size - // - } D88SEC; // =0x10 total - #pragma pack(pop) - - uint8_t imageDiskD88::Read_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,void * data,unsigned int req_sector_size) { - const vfdentry *ent; - - if (req_sector_size == 0) - req_sector_size = sector_size; - - // LOG_MSG("D88 read sector: CHS %u/%u/%u sz=%u",cylinder,head,sector,req_sector_size); - - ent = findSector(head,cylinder,sector,req_sector_size); - if (ent == NULL) return 0x05; - if (ent->getSectorSize() != req_sector_size) return 0x05; - - fseek(diskimg,(long)ent->data_offset,SEEK_SET); - if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; - if (fread(data,req_sector_size,1,diskimg) != 1) return 0x05; +uint8_t imageDiskEmptyDrive::Write_Sector(uint32_t /*head*/,uint32_t /*cylinder*/,uint32_t /*sector*/,const void * /*data*/,unsigned int /*req_sector_size*/) { + return 0x05; +} - _driveUsed = true; - return 0; - } - - uint8_t imageDiskD88::Read_AbsoluteSector(uint32_t sectnum, void * data) { - unsigned int c,h,s; - - if (sectors == 0 || heads == 0) - return 0x05; - - s = (sectnum % sectors) + 1; - h = (sectnum / sectors) % heads; - c = (sectnum / sectors / heads); +uint8_t imageDiskEmptyDrive::Read_AbsoluteSector(uint32_t /*sectnum*/, void * /*data*/) { + return 0x05; +} - _driveUsed = true; - return Read_Sector(h,c,s,data); - } - - imageDiskD88::vfdentry *imageDiskD88::findSector(uint8_t head,uint8_t track,uint8_t sector/*TODO: physical head?*/,unsigned int req_sector_size) { - if ((size_t)track >= dents.size()) - return NULL; - - std::vector::iterator i = dents.begin(); - - if (req_sector_size == 0) - req_sector_size = sector_size; - - while (i != dents.end()) { - const imageDiskD88::vfdentry &ent = *i; - - if (ent.head == head && - ent.track == track && - ent.sector == sector && - (ent.sector_size == req_sector_size || req_sector_size == ~0U)) - return &(*i); - - ++i; - } - - return NULL; - } - - uint8_t imageDiskD88::Write_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,const void * data,unsigned int req_sector_size) { - const vfdentry *ent; - - if (req_sector_size == 0) - req_sector_size = sector_size; - - // LOG_MSG("D88 read sector: CHS %u/%u/%u sz=%u",cylinder,head,sector,req_sector_size); - - ent = findSector(head,cylinder,sector,req_sector_size); - if (ent == NULL) return 0x05; - if (ent->getSectorSize() != req_sector_size) return 0x05; - - fseek(diskimg,(long)ent->data_offset,SEEK_SET); - if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; - if (fwrite(data,req_sector_size,1,diskimg) != 1) return 0x05; +uint8_t imageDiskEmptyDrive::Write_AbsoluteSector(uint32_t /*sectnum*/, const void * /*data*/) { + return 0x05; +} - _driveUsed = true; - return 0; - } - - uint8_t imageDiskD88::Write_AbsoluteSector(uint32_t sectnum,const void *data) { - unsigned int c,h,s; - - if (sectors == 0 || heads == 0) - return 0x05; - - s = (sectnum % sectors) + 1; - h = (sectnum / sectors) % heads; - c = (sectnum / sectors / heads); +imageDiskEmptyDrive::imageDiskEmptyDrive() : imageDisk(ID_EMPTY_DRIVE) { + active = true; + sector_size = 512; + heads = 2; + cylinders = 80; + sectors = 18; + diskSizeK = 1440; +} - _driveUsed = true; - return Write_Sector(h,c,s,data); - } - - imageDiskD88::imageDiskD88(FILE *imgFile, const char *imgName, uint32_t imgSizeK, bool isHardDisk) : imageDisk(ID_D88) { - (void)isHardDisk;//UNUSED - D88HEAD head; - - fd_type_major = DISKTYPE_2D; - fd_type_minor = 0; - - assert(sizeof(D88HEAD) == 0x2B0); - assert(sizeof(D88SEC) == 0x10); - - heads = 0; - cylinders = 0; - image_base = 0; - sectors = 0; - active = false; - sector_size = 0; - reserved_cylinders = 0; - diskSizeK = imgSizeK; - diskimg = imgFile; - - if (imgName != NULL) - diskname = imgName; - - // NOTES: - // - // +0x000: D88 header - // +0x020: Offset of D88 tracks, per track - // +0x2B0: - // - // Track offsets are sequential, always - // - // Each track is an array of: - // - // ENTRY: - // - // - // - // Array of ENTRY from offset until next track - fseek(diskimg,0,SEEK_END); - off_t fsz = ftell(diskimg); - - fseek(diskimg,0,SEEK_SET); - if (fread(&head,sizeof(head),1,diskimg) != 1) return; - - // validate fd_size - if (host_readd((ConstHostPt)(&head.fd_size)) > (uint32_t)fsz) return; - - fd_type_major = head.fd_type >> 4U; - fd_type_minor = head.fd_type & 0xFU; - - // validate that none of the track offsets extend past the file - { - for (unsigned int i=0;i < D88_TRACKMAX;i++) { - uint32_t trackoff = host_readd((ConstHostPt)(&head.trackp[i])); - - if (trackoff == 0) continue; - - if ((trackoff + 16U) > (uint32_t)fsz) { - LOG_MSG("D88: track starts past end of file"); - return; - } - } - } - - // read each track - for (unsigned int track=0;track < D88_TRACKMAX;track++) { - uint32_t trackoff = host_readd((ConstHostPt)(&head.trackp[track])); - - if (trackoff != 0) { - fseek(diskimg, (long)trackoff, SEEK_SET); - if ((off_t)ftell(diskimg) != (off_t)trackoff) continue; - - D88SEC s; - unsigned int count = 0; - - do { - if (fread(&s,sizeof(s),1,diskimg) != 1) break; - - uint16_t sector_count = host_readw((ConstHostPt)(&s.sectors)); - uint16_t sector_size = host_readw((ConstHostPt)(&s.size)); - - if (sector_count == 0U || sector_size < 128U) break; - if (sector_count > 128U || sector_size > 16384U) break; - if (s.n > 8U) s.n = 8U; - - vfdentry vent; - vent.sector_size = 128 << s.n; - vent.data_offset = (uint32_t)ftell(diskimg); - vent.entry_offset = vent.data_offset - (uint32_t)16; - vent.track = s.c; - vent.head = s.h; - vent.sector = s.r; - - LOG_MSG("D88: trackindex=%u C/H/S/sz=%u/%u/%u/%u data-at=0x%lx", - track,vent.track,vent.head,vent.sector,vent.sector_size,(unsigned long)vent.data_offset); - - dents.push_back(vent); - if ((++count) >= sector_count) break; - - fseek(diskimg, (long)sector_size, SEEK_CUR); - } while (1); - } - } - - if (!dents.empty()) { - /* okay, now to figure out what the geometry of the disk is. - * we cannot just work from an "absolute" disk image model - * because there's no D88 header to just say what the geometry is. - * Like the IBM PC BIOS, we have to look at the disk and figure out - * which geometry to apply to it, even if the FDD format allows - * sectors on other tracks to have wild out of range sector, track, - * and head numbers or odd sized sectors. - * - * First, determine sector size according to the boot sector. */ - bool founddisk = false; - const vfdentry *ent; - - ent = findSector(/*head*/0,/*track*/0,/*sector*/1,~0U); - if (ent != NULL) { - if (ent->getSectorSize() <= 1024) /* x <= 1024 */ - sector_size = ent->getSectorSize(); - } - - /* oh yeah right, sure. - * I suppose you're one of those FDD images where the sector size is 128 bytes/sector - * in the boot sector and the rest is 256 bytes/sector elsewhere. I have no idea why - * but quite a few FDD images have this arrangement. */ - if (sector_size != 0 && sector_size < 512) { - ent = findSector(/*head*/0,/*track*/1,/*sector*/1,~0U); - if (ent != NULL) { - if (ent->getSectorSize() <= 1024) { /* x <= 1024 */ - unsigned int nsz = ent->getSectorSize(); - if (sector_size != nsz) - LOG_MSG("D88 warning: sector size changes between track 0 and 1"); - if (sector_size < nsz) - sector_size = nsz; - } - } - } - - if (sector_size != 0) { - unsigned int i = 0; - while (DiskGeometryList[i].ksize != 0) { - const diskGeo &diskent = DiskGeometryList[i]; - - if (diskent.bytespersect == sector_size) { - ent = findSector(0,0,diskent.secttrack); - if (ent != NULL) { - LOG_MSG("D88 disk probe: %u/%u/%u exists",0,0,diskent.secttrack); - if (sectors < diskent.secttrack) - sectors = diskent.secttrack; - } - } - - i++; - } - } - - if (sector_size != 0 && sectors != 0) { - unsigned int i = 0; - while (DiskGeometryList[i].ksize != 0) { - const diskGeo &diskent = DiskGeometryList[i]; - - if (diskent.bytespersect == sector_size && diskent.secttrack >= sectors) { - ent = findSector(0,diskent.cylcount-1,sectors); - if (ent != NULL) { - LOG_MSG("D88 disk probe: %u/%u/%u exists",0,diskent.cylcount-1,sectors); - if (cylinders < diskent.cylcount) - cylinders = diskent.cylcount; - } - } - - i++; - } - } - - if (sector_size != 0 && sectors != 0 && cylinders != 0) { - ent = findSector(1,0,sectors); - if (ent != NULL) { - LOG_MSG("D88 disk probe: %u/%u/%u exists",1,0,sectors); - heads = 2; - } - } - - // TODO: drive_fat.cpp should use an extension to this API to allow changing the sectors/track - // according to what it reads from the MS-DOS BIOS parameter block, just like real MS-DOS. - // This would allow better representation of strange disk formats such as the "extended" - // floppy format that Microsoft used to use for Word 95 and Windows 95 install floppies. - - LOG_MSG("D88 geometry detection: C/H/S %u/%u/%u %u bytes/sector", - cylinders, heads, sectors, sector_size); - - if (sector_size != 0 && sectors != 0 && cylinders != 0 && heads != 0) - founddisk = true; - - if(!founddisk) { - active = false; - } else { - incrementFDD(); - } - } - } - - imageDiskD88::~imageDiskD88() { - if(diskimg != NULL) { - fclose(diskimg); - diskimg=NULL; - } - } - - /*--------------------------------*/ - - uint8_t imageDiskNFD::Read_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,void * data,unsigned int req_sector_size) { - const vfdentry *ent; - - if (req_sector_size == 0) - req_sector_size = sector_size; - - // LOG_MSG("NFD read sector: CHS %u/%u/%u sz=%u",cylinder,head,sector,req_sector_size); - - ent = findSector(head,cylinder,sector,req_sector_size); - if (ent == NULL) return 0x05; - if (ent->getSectorSize() != req_sector_size) return 0x05; - - fseek(diskimg,(long)ent->data_offset,SEEK_SET); - if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; - if (fread(data,req_sector_size,1,diskimg) != 1) return 0x05; +imageDiskEmptyDrive::~imageDiskEmptyDrive() { +} - _driveUsed = true; - return 0; - } - - uint8_t imageDiskNFD::Read_AbsoluteSector(uint32_t sectnum, void * data) { - unsigned int c,h,s; - - if (sectors == 0 || heads == 0) - return 0x05; - - s = (sectnum % sectors) + 1; - h = (sectnum / sectors) % heads; - c = (sectnum / sectors / heads); +///// - _driveUsed = true; - return Read_Sector(h,c,s,data); - } - - imageDiskNFD::vfdentry *imageDiskNFD::findSector(uint8_t head,uint8_t track,uint8_t sector/*TODO: physical head?*/,unsigned int req_sector_size) { - if ((size_t)track >= dents.size()) - return NULL; - - std::vector::iterator i = dents.begin(); - - if (req_sector_size == 0) - req_sector_size = sector_size; - - while (i != dents.end()) { - const imageDiskNFD::vfdentry &ent = *i; - - if (ent.head == head && - ent.track == track && - ent.sector == sector && - (ent.sector_size == req_sector_size || req_sector_size == ~0U)) - return &(*i); - - ++i; - } - - return NULL; - } - - uint8_t imageDiskNFD::Write_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,const void * data,unsigned int req_sector_size) { - const vfdentry *ent; - - if (req_sector_size == 0) - req_sector_size = sector_size; - - // LOG_MSG("NFD read sector: CHS %u/%u/%u sz=%u",cylinder,head,sector,req_sector_size); - - ent = findSector(head,cylinder,sector,req_sector_size); - if (ent == NULL) return 0x05; - if (ent->getSectorSize() != req_sector_size) return 0x05; - - fseek(diskimg,(long)ent->data_offset,SEEK_SET); - if ((uint32_t)ftell(diskimg) != ent->data_offset) return 0x05; - if (fwrite(data,req_sector_size,1,diskimg) != 1) return 0x05; +unsigned int INT13Xfer = 0; +size_t INT13XferSize = 4096; + +static void imageDiskCallINT13(void) { + unsigned int rv = CALLBACK_RealPointer(call_int13); + Bitu oldIF=GETFLAG(IF); + SETFLAGBIT(IF,true); + uint16_t oldcs=SegValue(cs); + uint32_t oldeip=reg_eip; + SegSet16(cs,rv>>16); + reg_eip=(rv&0xFFFF)+4+5; + DOSBOX_RunMachine(); + reg_eip=oldeip; + SegSet16(cs,oldcs); + SETFLAGBIT(IF,oldIF); +} + +uint8_t imageDiskINT13Drive::Read_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,void * data,unsigned int req_sector_size) { + if (!enable_int13 || busy) return subdisk->Read_Sector(head,cylinder,sector,data,req_sector_size); + + _driveUsed = true; + + uint8_t ret = 0x05; + unsigned int retry = 3; + + if (req_sector_size == 0) req_sector_size = sector_size; + +// LOG_MSG("INT13 read C/H/S %u/%u/%u busy=%u",cylinder,head,sector,busy); + + if (!busy && sector_size == req_sector_size && sector_size <= INT13XferSize) { + busy = true; + + if (INT13Xfer == 0) INT13Xfer = DOS_GetMemory(INT13XferSize/16u,"INT 13 transfer buffer"); + + unsigned int s_eax = reg_eax; + unsigned int s_ebx = reg_ebx; + unsigned int s_ecx = reg_ecx; + unsigned int s_edx = reg_edx; + unsigned int s_esi = reg_esi; + unsigned int s_edi = reg_edi; + unsigned int s_esp = reg_esp; + unsigned int s_ebp = reg_ebp; + unsigned int s_es = SegValue(es); + unsigned int s_fl = reg_flags; + +again: + reg_eax = 0x200/*read command*/ | 1/*count*/; + reg_ebx = 0; + reg_ch = cylinder; + reg_cl = sector; + reg_dh = head; + reg_dl = bios_disk; + CPU_SetSegGeneral(es,INT13Xfer); + + imageDiskCallINT13(); + + if (reg_flags & FLAG_CF) { + ret = reg_ah; + if (ret == 0) ret = 0x05; + + if (ret == 6/*disk change*/) { + diskChangeFlag = true; + if (--retry > 0) goto again; + } + } + else { + MEM_BlockRead32(INT13Xfer<<4,data,sector_size); + data = (void*)((char*)data + sector_size); + if ((++sector) >= (sectors + 1)) { + assert(sector == (sectors + 1)); + sector = 1; + if ((++head) >= heads) { + assert(head == heads); + head = 0; + cylinder++; + } + } + } + + reg_eax = s_eax; + reg_ebx = s_ebx; + reg_ecx = s_ecx; + reg_edx = s_edx; + reg_esi = s_esi; + reg_edi = s_edi; + reg_esp = s_esp; + reg_ebp = s_ebp; + reg_flags = s_fl; + CPU_SetSegGeneral(es,s_es); - _driveUsed = true; - return 0; - } - - uint8_t imageDiskNFD::Write_AbsoluteSector(uint32_t sectnum,const void *data) { - unsigned int c,h,s; - - if (sectors == 0 || heads == 0) - return 0x05; - - s = (sectnum % sectors) + 1; - h = (sectnum / sectors) % heads; - c = (sectnum / sectors / heads); + busy = false; + } + + return ret; +} + +uint8_t imageDiskINT13Drive::Write_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,const void * data,unsigned int req_sector_size) { + if (INT13Xfer == 0) INT13Xfer = DOS_GetMemory(INT13XferSize/16u,"INT 13 transfer buffer"); - _driveUsed = true; - return Write_Sector(h,c,s,data); - } - - imageDiskNFD::imageDiskNFD(FILE *imgFile, const char *imgName, uint32_t imgSizeK, bool isHardDisk, unsigned int revision) : imageDisk(ID_NFD) { - (void)isHardDisk;//UNUSED - union { - NFDHDR head; - NFDHDRR1 headr1; - }; // these occupy the same location of memory - - assert(sizeof(NFDHDR) == 0x120); - assert(sizeof(NFDHDRR1) == 0x3C0); - assert(sizeof(NFDHDR_ENTRY) == 0x10); - - heads = 0; - cylinders = 0; - image_base = 0; - sectors = 0; - active = false; - sector_size = 0; - reserved_cylinders = 0; - diskSizeK = imgSizeK; - diskimg = imgFile; - - if (imgName != NULL) - diskname = imgName; - - // NOTES: - // - // +0x000: NFD header - // +0x020: Offset of NFD tracks, per track - // +0x2B0: - // - // Track offsets are sequential, always - // - // Each track is an array of: - // - // ENTRY: - // - // - // - // Array of ENTRY from offset until next track - fseek(diskimg,0,SEEK_END); - off_t fsz = ftell(diskimg); - - fseek(diskimg,0,SEEK_SET); - if (revision == 0) { - if (fread(&head,sizeof(head),1,diskimg) != 1) return; - } - else if (revision == 1) { - if (fread(&headr1,sizeof(headr1),1,diskimg) != 1) return; - } - else { - abort(); - } - - // validate fd_size - if (host_readd((ConstHostPt)(&head.headersize)) < sizeof(head)) return; - if (host_readd((ConstHostPt)(&head.headersize)) > (uint32_t)fsz) return; - - unsigned int data_offset = host_readd((ConstHostPt)(&head.headersize)); - - std::vector< std::pair > seclist; - - if (revision == 0) { - unsigned int secents = (host_readd((ConstHostPt)(&head.headersize)) - sizeof(head)) / sizeof(NFDHDR_ENTRY); - if (secents == 0) return; - secents--; - if (secents == 0) return; - - for (unsigned int i=0;i < secents;i++) { - uint32_t ofs = (uint32_t)ftell(diskimg); - NFDHDR_ENTRY e; - - if (fread(&e,sizeof(e),1,diskimg) != 1) return; - seclist.push_back( std::pair(ofs,e) ); - - if (e.log_cyl == 0xFF || e.log_head == 0xFF || e.log_rec == 0xFF || e.sec_len_pow2 > 7) - continue; - - LOG_MSG("NFD %u/%u: ofs=%lu data=%lu cyl=%u head=%u sec=%u len=%u", - (unsigned int)i, - (unsigned int)secents, - (unsigned long)ofs, - (unsigned long)data_offset, - e.log_cyl, - e.log_head, - e.log_rec, - 128 << e.sec_len_pow2); - - vfdentry vent; - vent.sector_size = 128 << e.sec_len_pow2; - vent.data_offset = (uint32_t)data_offset; - vent.entry_offset = ofs; - vent.track = e.log_cyl; - vent.head = e.log_head; - vent.sector = e.log_rec; - dents.push_back(vent); - - data_offset += 128u << e.sec_len_pow2; - if (data_offset > (unsigned int)fsz) return; - } - } - else { - /* R1 has an array of offsets to where each tracks begins. - * The end of the track is an entry like 0x1A 0x00 0x00 0x00 0x00 0x00 0x00 .... */ - /* The R1 images I have as reference always have offsets in ascending order. */ - for (unsigned int ti=0;ti < 164;ti++) { - uint32_t trkoff = host_readd((ConstHostPt)(&headr1.trackheads[ti])); - - if (trkoff == 0) break; - - fseek(diskimg,(long)trkoff,SEEK_SET); - if ((off_t)ftell(diskimg) != (off_t)trkoff) return; - - NFDHDR_ENTRY e; - - // track id - if (fread(&e,sizeof(e),1,diskimg) != 1) return; - unsigned int sectors = host_readw((ConstHostPt)(&e) + 0); - unsigned int diagcount = host_readw((ConstHostPt)(&e) + 2); - - LOG_MSG("NFD R1 track ent %u offset %lu sectors %u diag %u",ti,(unsigned long)trkoff,sectors,diagcount); - - for (unsigned int s=0;s < sectors;s++) { - uint32_t ofs = (uint32_t)ftell(diskimg); - - if (fread(&e,sizeof(e),1,diskimg) != 1) return; - - LOG_MSG("NFD %u/%u: ofs=%lu data=%lu cyl=%u head=%u sec=%u len=%u rep=%u", - s, - sectors, - (unsigned long)ofs, - (unsigned long)data_offset, - e.log_cyl, - e.log_head, - e.log_rec, - 128 << e.sec_len_pow2, - e.byRetry); - - vfdentry vent; - vent.sector_size = 128 << e.sec_len_pow2; - vent.data_offset = (uint32_t)data_offset; - vent.entry_offset = ofs; - vent.track = e.log_cyl; - vent.head = e.log_head; - vent.sector = e.log_rec; - dents.push_back(vent); - - data_offset += 128u << e.sec_len_pow2; - if (data_offset > (unsigned int)fsz) return; - } - - for (unsigned int d=0;d < diagcount;d++) { - if (fread(&e,sizeof(e),1,diskimg) != 1) return; - - unsigned int retry = e.byRetry; - unsigned int len = host_readd((ConstHostPt)(&e) + 10); - - LOG_MSG("NFD diag %u/%u: retry=%u len=%u data=%lu",d,diagcount,retry,len,(unsigned long)data_offset); - - data_offset += (1+retry) * len; - } - } - } - - if (!dents.empty()) { - /* okay, now to figure out what the geometry of the disk is. - * we cannot just work from an "absolute" disk image model - * because there's no NFD header to just say what the geometry is. - * Like the IBM PC BIOS, we have to look at the disk and figure out - * which geometry to apply to it, even if the FDD format allows - * sectors on other tracks to have wild out of range sector, track, - * and head numbers or odd sized sectors. - * - * First, determine sector size according to the boot sector. */ - bool founddisk = false; - const vfdentry *ent; - - ent = findSector(/*head*/0,/*track*/0,/*sector*/1,~0U); - if (ent != NULL) { - if (ent->getSectorSize() <= 1024) /* x <= 1024 */ - sector_size = ent->getSectorSize(); - } - - /* oh yeah right, sure. - * I suppose you're one of those FDD images where the sector size is 128 bytes/sector - * in the boot sector and the rest is 256 bytes/sector elsewhere. I have no idea why - * but quite a few FDD images have this arrangement. */ - if (sector_size != 0 && sector_size < 512) { - ent = findSector(/*head*/0,/*track*/1,/*sector*/1,~0U); - if (ent != NULL) { - if (ent->getSectorSize() <= 1024) { /* x <= 1024 */ - unsigned int nsz = ent->getSectorSize(); - if (sector_size != nsz) - LOG_MSG("NFD warning: sector size changes between track 0 and 1"); - if (sector_size < nsz) - sector_size = nsz; - } - } - } - - if (sector_size != 0) { - unsigned int i = 0; - while (DiskGeometryList[i].ksize != 0) { - const diskGeo &diskent = DiskGeometryList[i]; - - if (diskent.bytespersect == sector_size) { - ent = findSector(0,0,diskent.secttrack); - if (ent != NULL) { - LOG_MSG("NFD disk probe: %u/%u/%u exists",0,0,diskent.secttrack); - if (sectors < diskent.secttrack) - sectors = diskent.secttrack; - } - } - - i++; - } - } - - if (sector_size != 0 && sectors != 0) { - unsigned int i = 0; - while (DiskGeometryList[i].ksize != 0) { - const diskGeo &diskent = DiskGeometryList[i]; - - if (diskent.bytespersect == sector_size && diskent.secttrack >= sectors) { - ent = findSector(0,diskent.cylcount-1,sectors); - if (ent != NULL) { - LOG_MSG("NFD disk probe: %u/%u/%u exists",0,diskent.cylcount-1,sectors); - if (cylinders < diskent.cylcount) - cylinders = diskent.cylcount; - } - } - - i++; - } - } - - if (sector_size != 0 && sectors != 0 && cylinders != 0) { - ent = findSector(1,0,sectors); - if (ent != NULL) { - LOG_MSG("NFD disk probe: %u/%u/%u exists",1,0,sectors); - heads = 2; - } - } - - // TODO: drive_fat.cpp should use an extension to this API to allow changing the sectors/track - // according to what it reads from the MS-DOS BIOS parameter block, just like real MS-DOS. - // This would allow better representation of strange disk formats such as the "extended" - // floppy format that Microsoft used to use for Word 95 and Windows 95 install floppies. - - LOG_MSG("NFD geometry detection: C/H/S %u/%u/%u %u bytes/sector", - cylinders, heads, sectors, sector_size); - - if (sector_size != 0 && sectors != 0 && cylinders != 0 && heads != 0) - founddisk = true; - - if(!founddisk) { - active = false; - } else { - incrementFDD(); - } - } - } - - imageDiskNFD::~imageDiskNFD() { - if(diskimg != NULL) { - fclose(diskimg); - - } - } - - bool PartitionLoadMBR(std::vector &parts,imageDisk *loadedDisk) { - partTable smbr; - - parts.clear(); - - if (loadedDisk->getSectSize() > sizeof(smbr)) return false; - if (loadedDisk->Read_Sector(0,0,1,&smbr) != 0x00) return false; - if (smbr.magic1 != 0x55 || smbr.magic2 != 0xaa) return false; /* Must have signature */ - - /* first copy the main partition table entries */ - for (size_t i=0;i < 4;i++) - parts.push_back(smbr.pentry[i]); - - /* then, enumerate extended partitions and add the partitions within, doing it in a way that - * allows recursive extended partitions */ - { - size_t i=0; - - do { - if (parts[i].parttype == 0x05/*extended*/ || parts[i].parttype == 0x0F/*LBA extended*/) { - unsigned long sect = parts[i].absSectStart; - unsigned long send = sect + parts[i].partSize; - - /* partitions within an extended partition form a sort of linked list. - * first entry is the partition, sector start relative to parent partition. - * second entry points to next link in the list. */ - - /* parts[i] is the parent partition in this loop. - * this loop will add to the parts vector, the parent - * loop will continue enumerating through the vector - * until all have processed. in this way, extended - * partitions will be expanded into the sub partitions - * until none is left to do. */ - - /* FIXME: Extended partitions within extended partitions not yet tested, - * MS-DOS FDISK.EXE won't generate that. */ - - while (sect < send) { - smbr.magic1 = smbr.magic2 = 0; - loadedDisk->Read_AbsoluteSector(sect,&smbr); - - if (smbr.magic1 != 0x55 || smbr.magic2 != 0xAA) - break; - if (smbr.pentry[0].absSectStart == 0 || smbr.pentry[0].partSize == 0) - break; // FIXME: Not sure what MS-DOS considers the end of the linked list - - const size_t idx = parts.size(); - - /* Right, get this: absolute start sector in entry #0 is relative to this link in the linked list. - * The pointer to the next link in the linked list is relative to the parent partition. Blegh. */ - smbr.pentry[0].absSectStart += sect; - if (smbr.pentry[1].absSectStart != 0) - smbr.pentry[1].absSectStart += parts[i].absSectStart; - - /* if the partition extends past the parent, then stop */ - if ((smbr.pentry[0].absSectStart+smbr.pentry[0].partSize) > (parts[i].absSectStart+parts[i].partSize)) - break; - - parts.push_back(smbr.pentry[0]); - - /* Based on MS-DOS 5.0, the 2nd entry is a link to the next entry, but only if - * start sector is nonzero and type is 0x05/0x0F. I'm not certain if MS-DOS allows - * the linked list to go either direction, but for the sake of preventing infinite - * loops stop if the link points to a lower sector number. */ - if (idx < 256 && (smbr.pentry[1].parttype == 0x05 || smbr.pentry[1].parttype == 0x0F) && - smbr.pentry[1].absSectStart != 0 && smbr.pentry[1].absSectStart > sect) { - sect = smbr.pentry[1].absSectStart; - } - else { - break; - } - } - } - i++; - } while (i < parts.size()); - } - - return true; - } - - bool PartitionLoadIPL1(std::vector<_PC98RawPartition> &parts,imageDisk *loadedDisk) { - unsigned char ipltable[SECTOR_SIZE_MAX]; - - parts.clear(); - - assert(sizeof(_PC98RawPartition) == 32); - if (loadedDisk->getSectSize() > sizeof(ipltable)) return false; - - memset(ipltable,0,sizeof(ipltable)); - if (loadedDisk->Read_Sector(0,0,2,ipltable) != 0) return false; - - const unsigned int max_entries = std::min(16UL,(unsigned long)(loadedDisk->getSectSize() / sizeof(_PC98RawPartition))); - - for (size_t i=0;i < max_entries;i++) { - const _PC98RawPartition *pe = (_PC98RawPartition*)(ipltable+(i * 32)); - - if (pe->mid == 0 && pe->sid == 0 && - pe->ipl_sect == 0 && pe->ipl_head == 0 && pe->ipl_cyl == 0 && - pe->sector == 0 && pe->head == 0 && pe->cyl == 0 && - pe->end_sector == 0 && pe->end_head == 0 && pe->end_cyl == 0) - continue; /* unused */ - - parts.push_back(*pe); - } - - return true; - } - - std::string PartitionIdentifyType(imageDisk *loadedDisk) { - struct partTable mbrData; - - if (loadedDisk->getSectSize() > sizeof(mbrData)) - return std::string(); /* That would cause a buffer overrun */ - - if (loadedDisk->Read_Sector(0,0,1,&mbrData) != 0) - return std::string(); - - if (!memcmp(mbrData.booter+4,"IPL1",4)) - return "IPL1"; /* PC-98 IPL1 */ - - if (mbrData.magic1 == 0x55 && mbrData.magic2 == 0xaa) - return "MBR"; /* IBM PC MBR */ - - return std::string(); - } - - void LogPrintPartitionTable(const std::vector<_PC98RawPartition> &parts) { - for (size_t i=0;i < parts.size();i++) { - const _PC98RawPartition &part = parts[i]; - - LOG(LOG_DOSMISC,LOG_DEBUG)("IPL #%u: boot=%u active=%u startchs=%u/%u/%u endchs=%u/%u/%u '%s'", - (unsigned int)i,(part.mid&0x80)?1:0,(part.sid&0x80)?1:0, - part.cyl,part.head,part.sector,part.end_cyl,part.end_head,part.end_sector, - std::string((char*)part.name,sizeof(part.name)).c_str()); - } - } - - void LogPrintPartitionTable(const std::vector &parts) { - for (size_t i=0;i < parts.size();i++) { - const partTable::partentry_t &part = parts[i]; - - LOG(LOG_DOSMISC,LOG_DEBUG)("MBR #%u: bootflag=%u parttype=0x%02x beginchs=0x%02x%02x%02x endchs=0x%02x%02x%02x start=%llu size=%llu", - (unsigned int)i,(part.bootflag&0x80)?1:0,part.parttype, - part.beginchs[0],part.beginchs[1],part.beginchs[2], - part.endchs[0],part.endchs[1],part.endchs[2], - (unsigned long long)part.absSectStart, - (unsigned long long)part.partSize); - } - } - - - uint8_t imageDiskEmptyDrive::Read_Sector(uint32_t /*head*/,uint32_t /*cylinder*/,uint32_t /*sector*/,void * /*data*/,unsigned int /*req_sector_size*/) { - _driveUsed = true; - return 0x05; - } - - uint8_t imageDiskEmptyDrive::Write_Sector(uint32_t /*head*/,uint32_t /*cylinder*/,uint32_t /*sector*/,const void * /*data*/,unsigned int /*req_sector_size*/) { _driveUsed = true; - return 0x05; - } - - uint8_t imageDiskEmptyDrive::Read_AbsoluteSector(uint32_t /*sectnum*/, void * /*data*/) { + return subdisk->Write_Sector(head,cylinder,sector,data,req_sector_size); +} + +uint8_t imageDiskINT13Drive::Read_AbsoluteSector(uint32_t sectnum, void * data) { + unsigned int c,h,s; + + if (sectors == 0 || heads == 0) + return 0x05; + + s = (sectnum % sectors) + 1; + h = (sectnum / sectors) % heads; + c = (sectnum / sectors / heads); _driveUsed = true; - return 0x05; - } - - uint8_t imageDiskEmptyDrive::Write_AbsoluteSector(uint32_t /*sectnum*/, const void * /*data*/) { + return Read_Sector(h,c,s,data); +} + +uint8_t imageDiskINT13Drive::Write_AbsoluteSector(uint32_t sectnum, const void * data) { + unsigned int c,h,s; + + if (sectors == 0 || heads == 0) + return 0x05; + + s = (sectnum % sectors) + 1; + h = (sectnum / sectors) % heads; + c = (sectnum / sectors / heads); _driveUsed = true; - return 0x05; - } - - imageDiskEmptyDrive::imageDiskEmptyDrive() : imageDisk(ID_EMPTY_DRIVE) { - active = true; - sector_size = 512; - heads = 2; - cylinders = 80; - sectors = 18; - diskSizeK = 1440; - } - - imageDiskEmptyDrive::~imageDiskEmptyDrive() { - } - - ///// - - unsigned int INT13Xfer = 0; - size_t INT13XferSize = 4096; - - static void imageDiskCallINT13(void) { - unsigned int rv = CALLBACK_RealPointer(call_int13); - Bitu oldIF=GETFLAG(IF); - SETFLAGBIT(IF,true); - uint16_t oldcs=SegValue(cs); - uint32_t oldeip=reg_eip; - SegSet16(cs,rv>>16); - reg_eip=(rv&0xFFFF)+4+5; - DOSBOX_RunMachine(); - reg_eip=oldeip; - SegSet16(cs,oldcs); - SETFLAGBIT(IF,oldIF); - } - - uint8_t imageDiskINT13Drive::Read_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,void * data,unsigned int req_sector_size) { - if (!enable_int13 || busy) return subdisk->Read_Sector(head,cylinder,sector,data,req_sector_size); - - uint8_t ret = 0x05; - unsigned int retry = 3; - - if (req_sector_size == 0) req_sector_size = sector_size; - - // LOG_MSG("INT13 read C/H/S %u/%u/%u busy=%u",cylinder,head,sector,busy); - - if (!busy && sector_size == req_sector_size && sector_size <= INT13XferSize) { - busy = true; - - if (INT13Xfer == 0) INT13Xfer = DOS_GetMemory(INT13XferSize/16u,"INT 13 transfer buffer"); - - unsigned int s_eax = reg_eax; - unsigned int s_ebx = reg_ebx; - unsigned int s_ecx = reg_ecx; - unsigned int s_edx = reg_edx; - unsigned int s_esi = reg_esi; - unsigned int s_edi = reg_edi; - unsigned int s_esp = reg_esp; - unsigned int s_ebp = reg_ebp; - unsigned int s_es = SegValue(es); - unsigned int s_fl = reg_flags; - - again: - reg_eax = 0x200/*read command*/ | 1/*count*/; - reg_ebx = 0; - reg_ch = cylinder; - reg_cl = sector; - reg_dh = head; - reg_dl = bios_disk; - CPU_SetSegGeneral(es,INT13Xfer); - - imageDiskCallINT13(); - - if (reg_flags & FLAG_CF) { - ret = reg_ah; - if (ret == 0) ret = 0x05; - - if (ret == 6/*disk change*/) { - diskChangeFlag = true; - if (--retry > 0) goto again; - } - } - else { - MEM_BlockRead32(INT13Xfer<<4,data,sector_size); - data = (void*)((char*)data + sector_size); - if ((++sector) >= (sectors + 1)) { - assert(sector == (sectors + 1)); - sector = 1; - if ((++head) >= heads) { - assert(head == heads); - head = 0; - cylinder++; - } - } - } - - reg_eax = s_eax; - reg_ebx = s_ebx; - reg_ecx = s_ecx; - reg_edx = s_edx; - reg_esi = s_esi; - reg_edi = s_edi; - reg_esp = s_esp; - reg_ebp = s_ebp; - reg_flags = s_fl; - CPU_SetSegGeneral(es,s_es); - - busy = false; - } - - _driveUsed = true; - return ret; - } - - uint8_t imageDiskINT13Drive::Write_Sector(uint32_t head,uint32_t cylinder,uint32_t sector,const void * data,unsigned int req_sector_size) { - if (INT13Xfer == 0) INT13Xfer = DOS_GetMemory(INT13XferSize/16u,"INT 13 transfer buffer"); - - _driveUsed = true; - return subdisk->Write_Sector(head,cylinder,sector,data,req_sector_size); - } - - uint8_t imageDiskINT13Drive::Read_AbsoluteSector(uint32_t sectnum, void * data) { - unsigned int c,h,s; - - if (sectors == 0 || heads == 0) - return 0x05; - - s = (sectnum % sectors) + 1; - h = (sectnum / sectors) % heads; - c = (sectnum / sectors / heads); + return Write_Sector(h,c,s,data); +} - _driveUsed = true; - return Read_Sector(h,c,s,data); - } - - uint8_t imageDiskINT13Drive::Write_AbsoluteSector(uint32_t sectnum, const void * data) { - unsigned int c,h,s; - - if (sectors == 0 || heads == 0) - return 0x05; - - s = (sectnum % sectors) + 1; - h = (sectnum / sectors) % heads; - c = (sectnum / sectors / heads); - _driveUsed = true; - return Write_Sector(h,c,s,data); - } - - void imageDiskINT13Drive::UpdateFloppyType(void) { - subdisk->UpdateFloppyType(); - } - - void imageDiskINT13Drive::Set_Reserved_Cylinders(Bitu resCyl) { - subdisk->Set_Reserved_Cylinders(resCyl); - } - - uint32_t imageDiskINT13Drive::Get_Reserved_Cylinders() { - return subdisk->Get_Reserved_Cylinders(); - } - - void imageDiskINT13Drive::Set_Geometry(uint32_t setHeads, uint32_t setCyl, uint32_t setSect, uint32_t setSectSize) { - heads = setHeads; - cylinders = setCyl; - sectors = setSect; - sector_size = setSectSize; - return subdisk->Set_Geometry(setHeads,setCyl,setSect,setSectSize); - } - - void imageDiskINT13Drive::Get_Geometry(uint32_t * getHeads, uint32_t *getCyl, uint32_t *getSect, uint32_t *getSectSize) { - return subdisk->Get_Geometry(getHeads,getCyl,getSect,getSectSize); - } - - uint8_t imageDiskINT13Drive::GetBiosType(void) { - return subdisk->GetBiosType(); - } - - uint32_t imageDiskINT13Drive::getSectSize(void) { - return subdisk->getSectSize(); - } - - bool imageDiskINT13Drive::detectDiskChange(void) { - if (enable_int13 && !busy) { - busy = true; - - unsigned int s_eax = reg_eax; - unsigned int s_ebx = reg_ebx; - unsigned int s_ecx = reg_ecx; - unsigned int s_edx = reg_edx; - unsigned int s_esi = reg_esi; - unsigned int s_edi = reg_edi; - unsigned int s_esp = reg_esp; - unsigned int s_ebp = reg_ebp; - unsigned int s_fl = reg_flags; - - reg_eax = 0x1600/*disk change detect*/; - reg_dl = bios_disk; - CPU_SetSegGeneral(es,INT13Xfer); - - imageDiskCallINT13(); - - if (reg_flags & FLAG_CF) { - if (reg_ah == 0x06) { - LOG(LOG_MISC,LOG_DEBUG)("INT13 image disk change flag"); - diskChangeFlag = true; - } - } - - reg_eax = s_eax; - reg_ebx = s_ebx; - reg_ecx = s_ecx; - reg_edx = s_edx; - reg_esi = s_esi; - reg_edi = s_edi; - reg_esp = s_esp; - reg_ebp = s_ebp; - reg_flags = s_fl; - - busy = false; - } - - return imageDisk::detectDiskChange(); - } - - imageDiskINT13Drive::imageDiskINT13Drive(imageDisk *sdisk) : imageDisk(ID_INT13) { - subdisk = sdisk; - subdisk->Addref(); - - drvnum = subdisk->drvnum; - diskname = subdisk->diskname; - active = subdisk->active; - sector_size = subdisk->sector_size; - heads = subdisk->heads; - cylinders = subdisk->cylinders; - sectors = subdisk->sectors; - hardDrive = subdisk->hardDrive; - diskSizeK = subdisk->diskSizeK; - diskChangeFlag = subdisk->diskChangeFlag; - } - - imageDiskINT13Drive::~imageDiskINT13Drive() { - subdisk->Release(); - } - - - /////////////////////////////////////// +void imageDiskINT13Drive::UpdateFloppyType(void) { + subdisk->UpdateFloppyType(); +} + +void imageDiskINT13Drive::Set_Reserved_Cylinders(Bitu resCyl) { + subdisk->Set_Reserved_Cylinders(resCyl); +} + +uint32_t imageDiskINT13Drive::Get_Reserved_Cylinders() { + return subdisk->Get_Reserved_Cylinders(); +} + +void imageDiskINT13Drive::Set_Geometry(uint32_t setHeads, uint32_t setCyl, uint32_t setSect, uint32_t setSectSize) { + heads = setHeads; + cylinders = setCyl; + sectors = setSect; + sector_size = setSectSize; + return subdisk->Set_Geometry(setHeads,setCyl,setSect,setSectSize); +} + +void imageDiskINT13Drive::Get_Geometry(uint32_t * getHeads, uint32_t *getCyl, uint32_t *getSect, uint32_t *getSectSize) { + return subdisk->Get_Geometry(getHeads,getCyl,getSect,getSectSize); +} + +uint8_t imageDiskINT13Drive::GetBiosType(void) { + return subdisk->GetBiosType(); +} + +uint32_t imageDiskINT13Drive::getSectSize(void) { + return subdisk->getSectSize(); +} + +bool imageDiskINT13Drive::detectDiskChange(void) { + if (enable_int13 && !busy) { + busy = true; + + unsigned int s_eax = reg_eax; + unsigned int s_ebx = reg_ebx; + unsigned int s_ecx = reg_ecx; + unsigned int s_edx = reg_edx; + unsigned int s_esi = reg_esi; + unsigned int s_edi = reg_edi; + unsigned int s_esp = reg_esp; + unsigned int s_ebp = reg_ebp; + unsigned int s_fl = reg_flags; + + reg_eax = 0x1600/*disk change detect*/; + reg_dl = bios_disk; + CPU_SetSegGeneral(es,INT13Xfer); + + imageDiskCallINT13(); + + if (reg_flags & FLAG_CF) { + if (reg_ah == 0x06) { + LOG(LOG_MISC,LOG_DEBUG)("INT13 image disk change flag"); + diskChangeFlag = true; + } + } + + reg_eax = s_eax; + reg_ebx = s_ebx; + reg_ecx = s_ecx; + reg_edx = s_edx; + reg_esi = s_esi; + reg_edi = s_edi; + reg_esp = s_esp; + reg_ebp = s_ebp; + reg_flags = s_fl; + + busy = false; + } + + return imageDisk::detectDiskChange(); +} + +imageDiskINT13Drive::imageDiskINT13Drive(imageDisk *sdisk) : imageDisk(ID_INT13) { + subdisk = sdisk; + subdisk->Addref(); + + drvnum = subdisk->drvnum; + diskname = subdisk->diskname; + active = subdisk->active; + sector_size = subdisk->sector_size; + heads = subdisk->heads; + cylinders = subdisk->cylinders; + sectors = subdisk->sectors; + hardDrive = subdisk->hardDrive; + diskSizeK = subdisk->diskSizeK; + diskChangeFlag = subdisk->diskChangeFlag; +} + +imageDiskINT13Drive::~imageDiskINT13Drive() { + subdisk->Release(); +} + +/////////////////////////////////////// imageDisk_Mem::imageDisk_Mem(jaffarCommon::file::MemoryFile* memfile, const char* imgName, uint32_t imgSizeK, bool isHardDisk) diff --git a/src/ints/bios_keyboard.cpp b/src/ints/bios_keyboard.cpp index fe672f8cfac..f9dc9afa765 100644 --- a/src/ints/bios_keyboard.cpp +++ b/src/ints/bios_keyboard.cpp @@ -615,7 +615,9 @@ static Bitu IRQ1_Handler(void) { #else flags2&=~(0x40+0x20);//remove numlock/capslock pressed (hack for sdl only reporting states) #endif +#if !defined(OSFREE) if (DOS_LayoutKey(scancode,flags1,flags2,flags3)) return CBRET_NONE; +#endif //LOG_MSG("key input %d %d %d %d",scancode,flags1,flags2,flags3); switch (scancode) { /* First the hard ones */ diff --git a/src/ints/bios_vhd.cpp b/src/ints/bios_vhd.cpp index c7174590efe..5c5e7aaf034 100644 --- a/src/ints/bios_vhd.cpp +++ b/src/ints/bios_vhd.cpp @@ -1,6 +1,6 @@ /* * -* Copyright (c) 2018 Shane Krueger. Fixes and upgrades (c) 2023-24 maxpat78. +* Copyright (c) 2018 Shane Krueger. Fixes and upgrades (c) 2023-26 maxpat78. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,6 +20,9 @@ #include #include #include +#if defined(__linux__) +#include +#endif #include "dosbox.h" #include "callback.h" #include "bios.h" @@ -32,6 +35,15 @@ #include "SDL.h" extern bool _driveUsed; +extern bool int13_enable_48bitLBA; + +#if defined(__linux__) && !defined(__GLIBC__) +// msul libc does not need 64 suffix to work with files > 2 GiB +#define fopen64 fopen +#define fseeko64 fseeko +#define ftello64 ftello +#endif + /* * imageDiskVHD supports fixed, dynamic, and differential VHD file formats * @@ -163,10 +175,11 @@ imageDiskVHD::ErrorCodes imageDiskVHD::Open(const char* fileName, const bool rea vhd->sectors = footer.geometry.sectors; vhd->sector_size = 512; vhd->diskSizeK = footer.currentSize / 1024; + vhd->image_length = footer.currentSize; vhd->diskimg = file; vhd->diskname = fileName; vhd->hardDrive = true; - vhd->active = true; + vhd->active = true; //use delete vhd from now on to release the disk image upon failure //if fixed image, store a plain imageDisk also @@ -201,7 +214,7 @@ imageDiskVHD::ErrorCodes imageDiskVHD::Open(const char* fileName, const bool rea } //read dynamic disk header (applicable for dynamic and differencing types) DynamicHeader dynHeader; - if (fseeko64(file, (off_t)footer.dataOffset, SEEK_SET)) { delete vhd; return INVALID_DATA; } + if (fseeko64(file, footer.dataOffset, SEEK_SET)) { delete vhd; return INVALID_DATA; } if (fread(&dynHeader, sizeof(uint8_t), 1024, file) != 1024) { delete vhd; return INVALID_DATA; } //swap byte order and validate checksum dynHeader.SwapByteOrder(); @@ -221,7 +234,7 @@ imageDiskVHD::ErrorCodes imageDiskVHD::Open(const char* fileName, const bool rea uint32_t dataLength = dynHeader.parentLocatorEntry[i].platformDataLength; uint8_t * buffer = nullptr; if (dataOffset && dataLength && ((uint64_t)dataOffset + dataLength) <= footerPosition) { - if (fseeko64(file, (off_t)dataOffset, SEEK_SET)) { delete vhd; return INVALID_DATA; } + if (fseeko64(file, dataOffset, SEEK_SET)) { delete vhd; return INVALID_DATA; } buffer = (uint8_t*)malloc(dataLength + 2); if (!buffer) { delete vhd; return INVALID_DATA; } if (fread(buffer, sizeof(uint8_t), dataLength, file) != dataLength) { free(buffer); delete vhd; return INVALID_DATA; } @@ -271,14 +284,20 @@ imageDiskVHD::ErrorCodes imageDiskVHD::Open(const char* fileName, const bool rea return INVALID_DATA; } - //detect real DOS geometry (MBR, BPB or default X-255-63) - Bitu sizes[4]; - vhd->DetectGeometry(sizes); - vhd->cylinders = sizes[3]; - vhd->heads = sizes[2]; - vhd->sectors = sizes[1]; + if(vhd->cylinders == 0 || vhd->heads == 0 || vhd->sectors == 0) { + Bitu sizes[4]; + vhd->DetectGeometry(sizes, vhd->image_length); /* Derive geometry from image_length if geometry in VHD footer is not valid */ + vhd->cylinders = sizes[3]; + vhd->heads = sizes[2]; + vhd->sectors = sizes[1]; + vhd->sector_size = sizes[0]; + } + vhd->Set_Geometry(vhd->heads, vhd->cylinders, vhd->sectors, vhd->sector_size); + vhd->LBA = vhd->getLBA(); /* Initialize LBA value */ + if(!int13_enable_48bitLBA && (vhd->LBA > 0x0FFFFFFF)) + LOG_MSG("Warning: Disk size (%lf GiB) exceeds 128GiB limit for 28-bit LBA. You may need to enable 48-bit LBA support.", (double)vhd->image_length / (1024.0 * 1024 * 1024)); - *disk = vhd; + *disk = vhd; return !readOnly && roflag ? UNSUPPORTED_WRITE : OPEN_SUCCESS; } @@ -391,7 +410,7 @@ uint8_t imageDiskVHD::Read_AbsoluteSector(uint32_t sectnum, void * data) { uint32_t bitNum = sectorOffset % 8; bool hasData = currentBlockDirtyMap[byteNum] & (1 << (7 - bitNum)); if (hasData) { - if (fseeko64(diskimg, (off_t)(((uint64_t)currentBlockSectorOffset + blockMapSectors + sectorOffset) * 512ull), SEEK_SET)) return 0x05; //can't seek + if (fseeko64(diskimg, (((uint64_t)currentBlockSectorOffset + blockMapSectors + sectorOffset) * 512ull), SEEK_SET)) return 0x05; //can't seek if (fread(data, sizeof(uint8_t), 512, diskimg) != 512) return 0x05; //can't read return 0; } @@ -407,11 +426,8 @@ uint8_t imageDiskVHD::Read_AbsoluteSector(uint32_t sectnum, void * data) { } bool imageDiskVHD::is_zeroed_sector(const void* data) { - uint32_t* p = (uint32_t*) data; - uint8_t* q = ((uint8_t*)data + 512); - while((void*)p < (void*)q && *p++ == 0); - if((void*)p < (void*)q) return false; - return true; + const auto* p = static_cast(data); + return std::all_of(p, p + 512, [](uint8_t b) { return b == 0; }); } bool imageDiskVHD::is_block_allocated(uint32_t blockNumber) { @@ -425,7 +441,9 @@ uint8_t imageDiskVHD::Write_AbsoluteSector(uint32_t sectnum, const void * data) if(vhdType == VHD_TYPE_FIXED) return fixedDisk->Write_AbsoluteSector(sectnum, data); uint32_t blockNumber = sectnum / sectorsPerBlock; uint32_t sectorOffset = sectnum % sectorsPerBlock; - if (!loadBlock(blockNumber)) return 0x05; //can't load block + if(!loadBlock(blockNumber)) { + return 0x05; //can't load block + } if (!currentBlockAllocated) { //an unallocated block is kept virtual until zeroed if(is_zeroed_sector(data)) { @@ -433,39 +451,63 @@ uint8_t imageDiskVHD::Write_AbsoluteSector(uint32_t sectnum, const void * data) if(!is_block_allocated(blockNumber)) return 0; } - if (!copiedFooter) { - //write backup of footer at start of file (should already exist, but we never checked to be sure it is readable or matches the footer we used) - if (fseeko64(diskimg, (off_t)0, SEEK_SET)) return 0x05; - if (fwrite(&originalFooter, sizeof(uint8_t), 512, diskimg) != 512) return 0x05; + if(!copiedFooter) { + //write backup of footer at start of file (should already exist, but we never checked to be sure it is readable or matches the footer we used) + if(fseeko64(diskimg, 0, SEEK_SET)) { + return 0x05; + } + if(fwrite(&originalFooter, sizeof(uint8_t), 512, diskimg) != 512) { + return 0x05; + } copiedFooter = true; //flush the data to disk after writing the backup footer - if (fflush(diskimg)) return 0x05; + if(fflush(diskimg)) { + return 0x05; + } } //calculate new location of footer, and round up to nearest 512 byte increment "just in case" uint64_t newFooterPosition = (((footerPosition + blockMapSize + dynamicHeader.blockSize) + 511ull) / 512ull) * 512ull; //attempt to extend the length appropriately first (on some operating systems this will extend the file) - if (fseeko64(diskimg, (off_t)newFooterPosition + 512, SEEK_SET)) return 0x05; + if(fseeko64(diskimg, newFooterPosition + 512, SEEK_SET)) { + return 0x05; + } //now write the footer - if (fseeko64(diskimg, (off_t)newFooterPosition, SEEK_SET)) return 0x05; - if (fwrite(&originalFooter, sizeof(uint8_t), 512, diskimg) != 512) return 0x05; + if(fseeko64(diskimg, newFooterPosition, SEEK_SET)) { + return 0x05; + } + if(fwrite(&originalFooter, sizeof(uint8_t), 512, diskimg) != 512) { + return 0x05; + } //save the new block location and new footer position uint32_t newBlockSectorNumber = (uint32_t)((footerPosition + 511ul) / 512ul); footerPosition = newFooterPosition; //clear the dirty flags for the new footer position for (uint32_t i = 0; i < blockMapSize; i++) currentBlockDirtyMap[i] = 0; //write the dirty map - if (fseeko64(diskimg, (off_t)(newBlockSectorNumber * 512ull), SEEK_SET)) return 0x05; - if (fwrite(currentBlockDirtyMap, sizeof(uint8_t), blockMapSize, diskimg) != blockMapSize) return 0x05; + if(fseeko64(diskimg, (newBlockSectorNumber * 512ull), SEEK_SET)) { + return 0x05; + } + if(fwrite(currentBlockDirtyMap, sizeof(uint8_t), blockMapSize, diskimg) != blockMapSize) { + return 0x05; + } //flush the data to disk after expanding the file, before allocating the block in the BAT - if (fflush(diskimg)) return 0x05; + if(fflush(diskimg)) { + return 0x05; + } //update the BAT - if (fseeko64(diskimg, (off_t)(dynamicHeader.tableOffset + (blockNumber * 4ull)), SEEK_SET)) return 0x05; + if(fseeko64(diskimg, (dynamicHeader.tableOffset + (blockNumber * 4ull)), SEEK_SET)) { + return 0x05; + } uint32_t newBlockSectorNumberBE = SDL_SwapBE32(newBlockSectorNumber); - if (fwrite(&newBlockSectorNumberBE, sizeof(uint8_t), 4, diskimg) != 4) return false; + if(fwrite(&newBlockSectorNumberBE, sizeof(uint8_t), 4, diskimg) != 4) { + return 0x05; + } currentBlockAllocated = true; currentBlockSectorOffset = newBlockSectorNumber; //flush the data to disk after allocating a block - if (fflush(diskimg)) return 0x05; + if(fflush(diskimg)) { + return 0x05; + } } //current block has now been allocated uint32_t byteNum = sectorOffset / 8; @@ -474,13 +516,21 @@ uint8_t imageDiskVHD::Write_AbsoluteSector(uint32_t sectnum, const void * data) //if the sector hasn't been marked as dirty, mark it as dirty if (!hasData) { currentBlockDirtyMap[byteNum] |= 1 << (7 - bitNum); - if (fseeko64(diskimg, (off_t)(currentBlockSectorOffset * 512ull), SEEK_SET)) return 0x05; //can't seek - if (fwrite(currentBlockDirtyMap, sizeof(uint8_t), blockMapSize, diskimg) != blockMapSize) return 0x05; + if(fseeko64(diskimg, (currentBlockSectorOffset * 512ull), SEEK_SET)) { + return 0x05; //can't seek + } + if(fwrite(currentBlockDirtyMap, sizeof(uint8_t), blockMapSize, diskimg) != blockMapSize) { + return 0x05; + } } //current sector has now been marked as dirty //write the sector - if (fseeko64(diskimg, (off_t)(((uint64_t)currentBlockSectorOffset + (uint64_t)blockMapSectors + (uint64_t)sectorOffset) * 512ull), SEEK_SET)) return 0x05; //can't seek - if (fwrite(data, sizeof(uint8_t), 512, diskimg) != 512) return 0x05; //can't write + if(fseeko64(diskimg, (((uint64_t)currentBlockSectorOffset + (uint64_t)blockMapSectors + (uint64_t)sectorOffset) * 512ull), SEEK_SET)) { + return 0x05; //can't seek + } + if(fwrite(data, sizeof(uint8_t), 512, diskimg) != 512) { + return 0x05; //can't write + } return 0; } @@ -501,7 +551,7 @@ imageDiskVHD::VHDTypes imageDiskVHD::GetVHDType(const char* fileName) { bool imageDiskVHD::loadBlock(const uint32_t blockNumber) { if (currentBlock == blockNumber) return true; if (blockNumber >= dynamicHeader.maxTableEntries) return false; - if (fseeko64(diskimg, (off_t)(dynamicHeader.tableOffset + (blockNumber * 4ull)), SEEK_SET)) return false; + if (fseeko64(diskimg, (dynamicHeader.tableOffset + (blockNumber * 4ull)), SEEK_SET)) return false; uint32_t blockSectorOffset; if (fread(&blockSectorOffset, sizeof(uint8_t), 4, diskimg) != 4) return false; blockSectorOffset = SDL_SwapBE32(blockSectorOffset); @@ -510,7 +560,7 @@ bool imageDiskVHD::loadBlock(const uint32_t blockNumber) { currentBlockAllocated = false; } else { - if (fseeko64(diskimg, (off_t)(blockSectorOffset * (uint64_t)512), SEEK_SET)) return false; + if (fseeko64(diskimg, (blockSectorOffset * (uint64_t)512), SEEK_SET)) return false; currentBlock = 0xFFFFFFFFul; currentBlockAllocated = true; currentBlockSectorOffset = blockSectorOffset; @@ -610,7 +660,7 @@ void imageDiskVHD::DynamicHeader::SwapByteOrder() { } //parent guid might need the byte order swapped also //however, for our purposes (comparing to the parent guid on differential disks), - // it doesn't matter so long as we are consistent + //it doesn't matter so long as we are consistent } uint32_t imageDiskVHD::DynamicHeader::CalculateChecksum() { @@ -763,7 +813,10 @@ uint32_t imageDiskVHD::CreateDifferencing(const char* filename, const char* base imageDiskVHD* base_vhd; if(Open(basename, true, (imageDisk**)&base_vhd) != OPEN_SUCCESS) return ERROR_OPENING_PARENT; FILE* vhd = fopen(filename, "wb"); - if(!vhd) return ERROR_OPENING; + if(!vhd) { + delete base_vhd; + return ERROR_OPENING; + } uint32_t STATUS = OPEN_SUCCESS; //clone parent's VHD structures @@ -948,6 +1001,7 @@ bool imageDiskVHD::MergeSnapshot(uint32_t* totalSectorsMerged, uint32_t* totalBl } std::string name = parentDisk->diskname; parentDisk->Release(); + parentDisk = nullptr; if(Open(name.c_str(), false, &parentDisk) != OPEN_SUCCESS) { LOG_MSG("Couldn't re-open parent in RW mode!"); return false; @@ -971,7 +1025,7 @@ bool imageDiskVHD::MergeSnapshot(uint32_t* totalSectorsMerged, uint32_t* totalBl bool hasData = currentBlockDirtyMap[byteNum] & (1 << (7 - bitNum)); if(hasData) { uint8_t data[512]; - if(fseeko64(diskimg, (off_t)(((uint64_t)currentBlockSectorOffset + blockMapSectors + sector) * 512ull), SEEK_SET)) return false; + if(fseeko64(diskimg, (((uint64_t)currentBlockSectorOffset + blockMapSectors + sector) * 512ull), SEEK_SET)) return false; if(fread(data, sizeof(uint8_t), 512, diskimg) != 512) return false; uint32_t absoluteSector = block * sectorsPerBlock + sector; //LOG_MSG("Merging sector %d", absoluteSector); @@ -1018,6 +1072,11 @@ void imageDiskVHD::DetectGeometry(Bitu sizes[]) { Read_AbsoluteSector(lba / 512, buf); DetectGeometry(buf, sizes, footer.currentSize); } + else { + LBA = image_length / (sector_size ? sector_size : 512); + DetectGeometry(sizes, footer.currentSize); + } + } void imageDiskVHD::DetectGeometry(uint8_t* buf, Bitu sizes[], uint64_t currentSize) { @@ -1035,6 +1094,45 @@ void imageDiskVHD::DetectGeometry(uint8_t* buf, Bitu sizes[], uint64_t currentSi } } +void imageDiskVHD::DetectGeometry(Bitu sizes[], uint64_t currentSize) { + if(!sizes) return; + + const uint16_t sector_size = 512; + uint64_t totalSectors = currentSize / sector_size; + + uint32_t sectorsPerTrack; + uint32_t heads; + uint32_t cylinders; + uint32_t cylinderTimesHeads = 0; + + if(totalSectors > 65535ULL * 16ULL * 255ULL) + totalSectors = 65535ULL * 16ULL * 255ULL; // cap total sectors to max supported by CHS + + if(totalSectors > 65535ULL * 16ULL * 63ULL) { + sectorsPerTrack = 255; + heads = 16; + cylinders = (uint32_t)(totalSectors / (heads * sectorsPerTrack)); + } + else { + sectorsPerTrack = 63; + cylinderTimesHeads = (uint32_t)(totalSectors / sectorsPerTrack); + cylinders = (uint32_t)(totalSectors / sectorsPerTrack); + heads = (cylinderTimesHeads + 1023) / 1024; + } + + cylinderTimesHeads = totalSectors / sectorsPerTrack; + + if(heads < 4) heads = 4; + if(heads > 16 || (cylinderTimesHeads >= (heads * 1024))) { + heads = 16; + } + + sizes[3] = (uint16_t)(cylinderTimesHeads / heads); // cylinders + sizes[2] = heads; + sizes[1] = sectorsPerTrack; + sizes[0] = sector_size; +} + //scans a MBR and returns //0 for failure //1 for GPT partition @@ -1071,7 +1169,7 @@ uint64_t imageDiskVHD::scanMBR(uint8_t* mbr, Bitu sizes[], uint64_t disksize) { //partition end h = (unsigned)*(part + 5); s = (unsigned)*(part + 6) & 0x3F; - c = (unsigned)*(part + 6) & 0xC0 | *(part + 7); + c = (((unsigned)*(part + 6) & 0xC0) << 2) | *(part + 7); //since a MBR partition *should* be aligned to a cylinder boundary, //the last sector CHS reveals total heads and sectors per cylinder spc = s; diff --git a/src/ints/ems.cpp b/src/ints/ems.cpp index da9c0c53fae..3d072f29b51 100644 --- a/src/ints/ems.cpp +++ b/src/ints/ems.cpp @@ -51,40 +51,58 @@ * A20 should be turned on or left off in this case. */ +#if !defined(OSFREE) Bitu XMS_EnableA20(bool enable); +#endif unsigned short EMM_PAGEFRAME = 0xE000; + +#if !defined(OSFREE) unsigned short EMM_PAGEFRAME4K = ((EMM_PAGEFRAME*16)/4096); +#endif Bitu GetEMSPageFrameSegment(void) { return EMM_PAGEFRAME; } +#if !defined(OSFREE) #define EMM_MAX_HANDLES 200U /* 255 Max */ #define EMM_PAGE_SIZE (16U*1024U) #define EMM_MAX_PHYS 4U /* 4 16kb pages in pageframe */ +#endif +#if !defined(OSFREE) Bitu GetEMSPageFrameSize(void) { return EMM_MAX_PHYS * EMM_PAGE_SIZE; } +#endif +#if !defined(OSFREE) #define EMM_VERSION 0x40 #define EMM_MINOR_VERSION 0x00 //#define EMM_MINOR_VERSION 0x30 // emm386 4.48 #define GEMMIS_VERSION 0x0001 // Version 1.0 +#endif +#if !defined(OSFREE) #define EMM_SYSTEM_HANDLE 0x0000 #define NULL_HANDLE 0xffff #define NULL_PAGE 0xffff +#endif +#if !defined(OSFREE) bool ENABLE_VCPI=true; bool ENABLE_V86_STARTUP=false; bool zero_int67_if_no_ems=true; bool ems_syshandle_on_even_mb=false; +#endif +#if !defined(OSFREE) #define EMM_VOLATILE 0 #define EMM_NONVOLATILE 1 +#endif +#if !defined(OSFREE) /* EMM errors */ #define EMM_NO_ERROR 0x00 #define EMM_SOFT_MAL 0x80 @@ -106,19 +124,25 @@ bool ems_syshandle_on_even_mb=false; #define EMM_MOVE_OVLAP 0x92 #define EMM_MOVE_OVLAPI 0x97 #define EMM_NOT_FOUND 0xa0 +#endif +#if !defined(OSFREE) enum { EMS_NONE=0, /* no emulation */ EMS_MIXED, /* "mixed mode", default if "true", attempts to please everybody */ EMS_BOARD, /* act like pre-386 expanded memory, provided by an expansion card */ EMS_EMM386 /* act like 386+ expanded memory, faked using virtual 8086 mode (EMM386.EXE style) */ }; +#endif +#if !defined(OSFREE) struct EMM_Mapping { uint16_t handle; uint16_t page; }; +#endif +#if !defined(OSFREE) struct EMM_Handle { uint16_t pages; MemHandle mem; @@ -126,9 +150,13 @@ struct EMM_Handle { bool saved_page_map; EMM_Mapping page_map[EMM_MAX_PHYS]; }; +#endif +#if !defined(OSFREE) static Bitu ems_type = EMS_NONE; +#endif +#if !defined(OSFREE) const char *EMS_Type_String(void) { switch (ems_type) { case EMS_NONE: return "None"; @@ -140,11 +168,15 @@ const char *EMS_Type_String(void) { return NULL; } +#endif +#if !defined(OSFREE) static EMM_Handle emm_handles[EMM_MAX_HANDLES]; static EMM_Mapping emm_mappings[EMM_MAX_PHYS]; static EMM_Mapping emm_segmentmappings[0x40]; +#endif +#if !defined(OSFREE) bool EMS_GetMapping(Bitu &handle,uint16_t &log_page,Bitu ems_page) { if (ems_page < EMM_MAX_PHYS) { auto &x = emm_mappings[ems_page]; @@ -158,7 +190,9 @@ bool EMS_GetMapping(Bitu &handle,uint16_t &log_page,Bitu ems_page) { return false; } +#endif +#if !defined(OSFREE) bool EMS_GetHandle(Bitu &size,PhysPt &addr,std::string &name,Bitu handle) { if (handle < EMM_MAX_HANDLES) { auto &x = emm_handles[handle]; @@ -178,17 +212,27 @@ bool EMS_GetHandle(Bitu &size,PhysPt &addr,std::string &name,Bitu handle) { return false; } +#endif +#if !defined(OSFREE) Bitu EMS_Max_Handles(void) { return EMM_MAX_HANDLES; } +#endif bool EMS_Active(void) { +#if !defined(OSFREE) return ems_type != EMS_NONE; +#else + return false; +#endif } +#if !defined(OSFREE) static uint16_t GEMMIS_seg; +#endif +#if !defined(OSFREE) class device_EMM : public DOS_Device { public: device_EMM(bool is_emm386_avail) : is_emm386(is_emm386_avail) { @@ -212,7 +256,9 @@ class device_EMM : public DOS_Device { // uint8_t cache; bool is_emm386; }; +#endif +#if !defined(OSFREE) bool device_EMM::ReadFromControlChannel(PhysPt bufptr,uint16_t size,uint16_t * retcode) { Bitu subfct=mem_readb(bufptr); switch (subfct) { @@ -297,7 +343,9 @@ bool device_EMM::ReadFromControlChannel(PhysPt bufptr,uint16_t size,uint16_t * r } return false; } +#endif +#if !defined(OSFREE) static struct { bool enabled; uint16_t ems_handle; @@ -305,7 +353,9 @@ static struct { MemHandle private_area; uint8_t pic1_remapping,pic2_remapping; } vcpi ; +#endif +#if !defined(OSFREE) struct MoveRegion { uint32_t bytes; uint8_t src_type; @@ -317,25 +367,33 @@ struct MoveRegion { uint16_t dest_offset; uint16_t dest_page_seg; }; +#endif +#if !defined(OSFREE) static uint16_t EMM_GetTotalPages(void) { Bitu count=MEM_FreeLargest()/4; if (count>0x7fff) count=0x7fff; return (uint16_t)count; } +#endif +#if !defined(OSFREE) static uint16_t EMM_GetFreePages(void) { Bitu count=MEM_FreeTotal()/4; if (count>0x7fff) count=0x7fff; return (uint16_t)count; } +#endif +#if !defined(OSFREE) static bool INLINE ValidHandle(uint16_t handle) { if (handle>=EMM_MAX_HANDLES) return false; if (emm_handles[handle].pages==NULL_HANDLE) return false; return true; } +#endif +#if !defined(OSFREE) void EMS_ZeroAllocation(MemHandle mem,unsigned int pages) { PhysPt address; @@ -349,9 +407,13 @@ void EMS_ZeroAllocation(MemHandle mem,unsigned int pages) { pages--; } } +#endif +#if !defined(OSFREE) extern bool dbg_zero_on_ems_allocmem; +#endif +#if !defined(OSFREE) /* NTS: "page" in EMS refers to 16KB regions, not the 4KB memory pages we normally work with */ uint8_t EMM_AllocateMemory(uint16_t pages,uint16_t & dhandle,bool can_allocate_zpages) { /* Check for 0 page allocation */ @@ -377,7 +439,9 @@ uint8_t EMM_AllocateMemory(uint16_t pages,uint16_t & dhandle,bool can_allocate_z dhandle = handle; return EMM_NO_ERROR; } +#endif +#if !defined(OSFREE) static uint8_t EMM_AllocateSystemHandle(uint16_t pages/*NTS: EMS pages are 16KB, this does not refer to 4KB CPU pages*/) { MemHandle mem = 0; @@ -412,7 +476,9 @@ static uint8_t EMM_AllocateSystemHandle(uint16_t pages/*NTS: EMS pages are 16KB, ((unsigned long)mem * 4096UL) + (pages * 16384UL) - 1ul); return EMM_NO_ERROR; } +#endif +#if !defined(OSFREE) static uint8_t EMM_ReallocatePages(uint16_t handle, const uint16_t& pages) { /* Check for valid handle */ if (!ValidHandle(handle)) return EMM_INVALID_HANDLE; @@ -428,10 +494,14 @@ static uint8_t EMM_ReallocatePages(uint16_t handle, const uint16_t& pages) { emm_handles[handle].pages=pages; return EMM_NO_ERROR; } +#endif +#if !defined(OSFREE) Bitu XMS_EnableA20(bool enable); Bitu XMS_GetEnabledA20(void); +#endif +#if !defined(OSFREE) static uint8_t EMM_MapPage(Bitu phys_page,uint16_t handle,uint16_t log_page) { // LOG_MSG("EMS MapPage handle %d phys %d log %d",handle,phys_page,log_page); /* Check for too high physical page */ @@ -475,7 +545,9 @@ static uint8_t EMM_MapPage(Bitu phys_page,uint16_t handle,uint16_t log_page) { return EMM_LOG_OUT_RANGE; } } +#endif +#if !defined(OSFREE) static uint8_t EMM_MapSegment(Bitu segment,uint16_t handle,uint16_t log_page) { // LOG_MSG("EMS MapSegment handle %d segment %d log %d",handle,segment,log_page); @@ -541,7 +613,9 @@ static uint8_t EMM_MapSegment(Bitu segment,uint16_t handle,uint16_t log_page) { return EMM_ILL_PHYS; } +#endif +#if !defined(OSFREE) uint8_t EMM_ReleaseMemory(uint16_t handle) { /* Check for valid handle */ if (!ValidHandle(handle)) return EMM_INVALID_HANDLE; @@ -564,7 +638,9 @@ uint8_t EMM_ReleaseMemory(uint16_t handle) { memset(&emm_handles[handle].name,0,8); return EMM_NO_ERROR; } +#endif +#if !defined(OSFREE) static uint8_t EMM_SavePageMap(uint16_t handle) { /* Check for valid handle */ if (handle>=EMM_MAX_HANDLES || (handle != 0 && emm_handles[handle].pages==NULL_HANDLE)) { @@ -580,7 +656,9 @@ static uint8_t EMM_SavePageMap(uint16_t handle) { emm_handles[handle].saved_page_map=true; return EMM_NO_ERROR; } +#endif +#if !defined(OSFREE) static uint8_t EMM_RestoreMappingTable(void) { /* Move through the mappings table and setup mapping accordingly */ for (Bitu i=0;i<0x40;i++) { @@ -594,6 +672,9 @@ static uint8_t EMM_RestoreMappingTable(void) { return EMM_NO_ERROR; } +#endif + +#if !defined(OSFREE) static uint8_t EMM_RestorePageMap(uint16_t handle) { /* Check for valid handle */ if (handle>=EMM_MAX_HANDLES || (handle != 0 && emm_handles[handle].pages==NULL_HANDLE)) { @@ -609,7 +690,9 @@ static uint8_t EMM_RestorePageMap(uint16_t handle) { } return EMM_RestoreMappingTable(); } +#endif +#if !defined(OSFREE) static uint8_t EMM_GetPagesForAllHandles(PhysPt table,uint16_t & handles) { handles=0; for (uint16_t i=0;i0;count--) { uint16_t segment=mem_readw(list);list+=2; if ((segment>=EMM_PAGEFRAME) && (segment>4u); - mem_writew(data,segment);data+=2; - MEM_BlockWrite(data,&emm_mappings[page],sizeof(EMM_Mapping)); - data+=sizeof(EMM_Mapping); + page=(segment-EMM_PAGEFRAME)>>10; + mem_writeb(data++,(uint8_t)page); + mem_writeb(data++,(uint8_t)emm_mappings[page].handle); + mem_writew(data,emm_mappings[page].page); } else if ((ems_type == EMS_MIXED) || (ems_type == EMS_EMM386) || ((segment>=EMM_PAGEFRAME-0x1000) && (segment=0xa000) && (segment<0xb000))) { - mem_writew(data,segment);data+=2; - MEM_BlockWrite(data,&emm_segmentmappings[segment>>10u],sizeof(EMM_Mapping)); - data+=sizeof(EMM_Mapping); + page=segment>>10; + mem_writeb(data++,(uint8_t)page); + mem_writeb(data++,(uint8_t)emm_segmentmappings[page].handle); + mem_writew(data,emm_segmentmappings[page].page); } else { return EMM_ILL_PHYS; } + data+=2; } break; case 0x01: /* Restore Partial Page Map */ data = SegPhys(ds)+reg_si; count= mem_readw(data);data+=2; for (;count>0;count--) { - uint16_t segment=mem_readw(data);data+=2; - if ((segment>=EMM_PAGEFRAME) && (segment>4); - MEM_BlockRead(data,&emm_mappings[page],sizeof(EMM_Mapping)); - } else if ((ems_type == EMS_MIXED) || (ems_type == EMS_EMM386) || ((segment>=EMM_PAGEFRAME-0x1000) && (segment=0xa000) && (segment<0xb000))) { - MEM_BlockRead(data,&emm_segmentmappings[segment>>10u],sizeof(EMM_Mapping)); + page=(uint16_t)mem_readb(data++); + if (page>6u)+(unsigned int)(ct*0x10u); real_writew(SegValue(es),entry_addr+0x00u+0x01u,(memh+0u)*0x10u); // mapping of 1/4 of page @@ -1152,7 +1253,7 @@ static Bitu INT67_Handler(void) { else if (mem_seg>3u),b); } +#endif +#if !defined(OSFREE) static void SetupVCPI() { Bitu old_a20 = XMS_GetEnabledA20(); @@ -1617,7 +1734,9 @@ static void SetupVCPI() { XMS_EnableA20(old_a20 != 0); } +#endif +#if !defined(OSFREE) static Bitu INT4B_Handler() { switch (reg_ah) { case 0x81: @@ -1630,7 +1749,9 @@ static Bitu INT4B_Handler() { } return CBRET_NONE; } +#endif +#if !defined(OSFREE) Bitu GetEMSType(const Section_prop* section) { std::string emstypestr = section->Get_string("ems"); Bitu rtype = 0; @@ -1646,16 +1767,22 @@ Bitu GetEMSType(const Section_prop* section) { return rtype; } +#endif +#if !defined(OSFREE) void setup_EMS_none() { if (zero_int67_if_no_ems) { /* zero INT 67h */ phys_writed(0x67*4,0); } } +#endif +#if !defined(OSFREE) Bitu call_int67 = 0; +#endif +#if !defined(OSFREE) class EMS: public Module_base { private: uint16_t ems_baseseg = 0; @@ -1965,15 +2092,21 @@ class EMS: public Module_base { } } }; +#endif +#if !defined(OSFREE) static EMS* test = NULL; extern const char* RunningProgram; void CALLBACK_DeAllocate(Bitu in); +#endif +#if !defined(OSFREE) RealPt Get_EMS_vm86control() { return (test != NULL) ? test->Get_EMS_vm86control() : 0; } +#endif +#if !defined(OSFREE) void EMS_DoShutDown() { if (!strcmp(RunningProgram, "LOADLIN")) { test = NULL; @@ -1988,11 +2121,17 @@ void EMS_DoShutDown() { call_int67 = 0; } } +#endif +#if !defined(OSFREE) extern uint16_t desired_ems_segment; +#endif +#if !defined(OSFREE) void Update_Get_Desired_Segment(void); +#endif +#if !defined(OSFREE) void EMS_PickPageFrame(void) { if (desired_ems_segment == 0) Update_Get_Desired_Segment(); @@ -2007,15 +2146,21 @@ void EMS_PickPageFrame(void) { EMM_PAGEFRAME4K = ((EMM_PAGEFRAME*16)/4096); } +#endif +#if !defined(OSFREE) void EMS_DOSBoot(Section* /*sec*/) { EMS_PickPageFrame(); } +#endif +#if !defined(OSFREE) void EMS_ShutDown(Section* /*sec*/) { EMS_DoShutDown(); } +#endif +#if !defined(OSFREE) void EMS_Startup(Section* sec) { (void)sec;//UNUSED if (test == NULL) { @@ -2023,7 +2168,9 @@ void EMS_Startup(Section* sec) { test = new EMS(control->GetSection("dos")); } } +#endif +#if !defined(OSFREE) void EMS_Init() { LOG(LOG_MISC,LOG_DEBUG)("Initializing EMS expanded memory services"); @@ -2032,7 +2179,9 @@ void EMS_Init() { AddVMEventFunction(VM_EVENT_DOS_BOOT,AddVMEventFunctionFuncPair(EMS_DOSBoot)); AddVMEventFunction(VM_EVENT_DOS_EXIT_BEGIN,AddVMEventFunctionFuncPair(EMS_ShutDown)); } +#endif +#if !defined(OSFREE) //save state support namespace { @@ -2054,3 +2203,5 @@ class SerializeEMS : public SerializeGlobalPOD } } dummy; } +#endif + diff --git a/src/ints/int10.cpp b/src/ints/int10.cpp index 5ff9452ae63..a9254284264 100644 --- a/src/ints/int10.cpp +++ b/src/ints/int10.cpp @@ -300,14 +300,14 @@ Bitu INT10_Handler(void) { } break; case 0x11: /* Character generator functions */ - if (machine==MCH_MCGA) { - if (!(reg_al == 0x24 || reg_al == 0x30)) - break; - } - else { - if (!IS_EGAVGA_ARCH) - break; - } + if (machine==MCH_MCGA) { + if (!(reg_al == 0x24 || reg_al == 0x30)) + break; + } + else { + if (!IS_EGAVGA_ARCH) + break; + } if ((reg_al&0xf0)==0x10) Mouse_BeforeNewVideoMode(false); switch (reg_al) { @@ -336,11 +336,11 @@ Bitu INT10_Handler(void) { break; case 0x03: /* Set Block Specifier */ #if defined(USE_TTF) - if (ttf.inUse&&wpType==1) { - DOS_Block dos; - if (mem_readd(((dos.psp()-1)<<4)+8) == 0x5057) // Name of MCB PSP should be WP - wpExtChar = reg_bl != 0; - } + if (ttf.inUse&&wpType==1) { + DOS_Block dos; + if (mem_readd(((dos.psp()-1)<<4)+8) == 0x5057) // Name of MCB PSP should be WP + wpExtChar = reg_bl != 0; + } #endif IO_Write(0x3c4,0x3);IO_Write(0x3c5,reg_bl); break; @@ -372,15 +372,20 @@ Bitu INT10_Handler(void) { goto graphics_chars; graphics_chars: switch (reg_bl) { - case 0x00:real_writeb(BIOSMEM_SEG,BIOSMEM_NB_ROWS,reg_dl-1);break; - case 0x01:real_writeb(BIOSMEM_SEG,BIOSMEM_NB_ROWS,13);break; - case 0x03:real_writeb(BIOSMEM_SEG,BIOSMEM_NB_ROWS,42);break; - case 0x02: - default:real_writeb(BIOSMEM_SEG,BIOSMEM_NB_ROWS,24);break; + case 0x00:real_writeb(BIOSMEM_SEG,BIOSMEM_NB_ROWS,reg_dl-1);break; + case 0x01:real_writeb(BIOSMEM_SEG,BIOSMEM_NB_ROWS,13);break; + case 0x03:real_writeb(BIOSMEM_SEG,BIOSMEM_NB_ROWS,42);break; + case 0x02: + default:real_writeb(BIOSMEM_SEG,BIOSMEM_NB_ROWS,24);break; } break; /* General */ case 0x30:/* Get Font Information */ + if (machine == MCH_MCGA) { + if (reg_bh == 5 || reg_bh == 7) /* these don't work on MCGA */ + break; + } + switch (reg_bh) { case 0x00: /* interrupt 0x1f vector */ { @@ -397,8 +402,15 @@ Bitu INT10_Handler(void) { } break; case 0x02: /* font 8x14 */ - SegSet16(es,RealSeg(int10.rom.font_14)); - reg_bp=RealOff(int10.rom.font_14); + if (machine == MCH_MCGA) { + /* No such font on MCGA, returns 8x16 font */ + SegSet16(es,RealSeg(int10.rom.font_16)); + reg_bp=RealOff(int10.rom.font_16); + } + else { + SegSet16(es,RealSeg(int10.rom.font_14)); + reg_bp=RealOff(int10.rom.font_14); + } break; case 0x03: /* font 8x8 first 128 */ SegSet16(es,RealSeg(int10.rom.font_8_first)); @@ -413,14 +425,26 @@ Bitu INT10_Handler(void) { reg_bp=RealOff(int10.rom.font_14_alternate); break; case 0x06: /* font 8x16 */ - if (!IS_VGA_ARCH) break; - SegSet16(es,RealSeg(int10.rom.font_16)); - reg_bp=RealOff(int10.rom.font_16); + if (IS_VGA_ARCH || machine == MCH_MCGA) { + SegSet16(es,RealSeg(int10.rom.font_16)); + reg_bp=RealOff(int10.rom.font_16); + } + else if (IS_EGA_ARCH) { + /* EGA BIOSes reportedly return garbage here */ + SegSet16(es,0xC000); + reg_bp=0xFB80; + } break; case 0x07: /* alpha alternate 9x16 */ - if (!IS_VGA_ARCH) break; - SegSet16(es,RealSeg(int10.rom.font_16_alternate)); - reg_bp=RealOff(int10.rom.font_16_alternate); + if (IS_VGA_ARCH) { + SegSet16(es,RealSeg(int10.rom.font_16_alternate)); + reg_bp=RealOff(int10.rom.font_16_alternate); + } + else if (IS_EGA_ARCH) { + /* EGA BIOSes reportedly return garbage here */ + SegSet16(es,0xC000); + reg_bp=0x7210; + } break; default: LOG(LOG_INT10,LOG_ERROR)("Function 11:30 Request for font %2X",reg_bh); @@ -783,10 +807,13 @@ CX 640x480 800x600 1024x768/1280x1024 } break; case 0x4f: /* VESA Calls */ - if ((!IS_VGA_ARCH) || (svgaCard!=SVGA_S3Trio)) + if ((!IS_VGA_ARCH) || !(svgaCard==SVGA_S3Trio||svgaCard==SVGA_DOSBoxIG)) break; if (int10.vesa_oldvbe10 && reg_al >= 6) /* Functions 6 and up did not exist until VBE 1.2 (or 1.1?) */ break; + if (vga.dosboxig.vesa_bios_lockout) + break; + switch (reg_al) { case 0x00: /* Get SVGA Information */ reg_al=0x4f; @@ -867,7 +894,7 @@ CX 640x480 800x600 1024x768/1280x1024 case 0x08: switch (reg_bl) { case 0x00: /* Set DAC width */ - if (CurMode->type == M_LIN8) { + if (CurMode->type == M_LIN8 || CurMode->type == M_LIN4 || CurMode->type == M_PACKED4 || CurMode->type == M_CGA2) { /* TODO: If there is a bit on S3 cards to control DAC width in "pseudocolor" modes, replace this code * with something to write that bit instead of internal state change like this. */ if (reg_bh >= 8 && enable_vga_8bit_dac) @@ -888,7 +915,7 @@ CX 640x480 800x600 1024x768/1280x1024 } break; case 0x01: /* Get DAC width */ - if (CurMode->type == M_LIN8) { + if (CurMode->type == M_LIN8 || CurMode->type == M_LIN4 || CurMode->type == M_PACKED4 || CurMode->type == M_CGA2) { reg_bh=(vga_8bit_dac ? 8 : 6); reg_al=0x4f; reg_ah=0x0; @@ -922,7 +949,7 @@ CX 640x480 800x600 1024x768/1280x1024 } break; case 0x0a: /* Get Pmode Interface */ - if (int10.vesa_oldvbe) { + if (int10.vesa_oldvbe || int10.rom.pmode_interface == 0) { reg_ax=0x014f; break; } @@ -1429,7 +1456,7 @@ FILE *Try_Load_FontFile(std::string filename) { } /* try to load file from user config directory */ - Cross::GetPlatformConfigDir(confdir); + confdir = Cross::GetPlatformConfigDir(); if (!confdir.empty()) { tmpdir = confdir + filename; if ((fp = fopen(tmpdir.c_str(),"rb"))) @@ -1437,7 +1464,7 @@ FILE *Try_Load_FontFile(std::string filename) { } /* try to load file from resources directory */ - Cross::GetPlatformResDir(resdir); + resdir = Cross::GetPlatformResDir(); if (!resdir.empty()) { tmpdir = resdir + filename; if ((fp = fopen(tmpdir.c_str(),"rb"))) diff --git a/src/ints/int10.h b/src/ints/int10.h index 1ea13987850..4091909c45d 100644 --- a/src/ints/int10.h +++ b/src/ints/int10.h @@ -99,6 +99,7 @@ extern uint32_t S3_LFB_BASE; #define BIOS_CHEIGHT uint8_t cheight=IS_EGAVGA_ARCH?real_readb(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT):8; extern uint8_t int10_font_08[256 * 8]; +extern uint8_t int10_font_13[256 * 13]; extern uint8_t int10_font_14[256 * 14]; extern uint8_t int10_font_16[256 * 16]; extern uint8_t int10_font_19[256 * 19]; @@ -107,6 +108,7 @@ extern uint8_t int10_font_14_alternate[20 * 15 + 1]; extern uint8_t int10_font_16_alternate[19 * 17 + 1]; extern uint8_t int10_font_14_init[256 * 14]; extern uint8_t int10_font_16_init[256 * 16]; +extern uint8_t int10_font_16_mcga[256 * 16]; struct VideoModeBlock { uint16_t mode; @@ -129,6 +131,7 @@ typedef struct { struct { RealPt font_8_first; RealPt font_8_second; + RealPt font_13; RealPt font_14; RealPt font_16; RealPt font_14_alternate; @@ -136,7 +139,7 @@ typedef struct { RealPt font_19; RealPt static_state; RealPt video_save_pointers; - RealPt video_dynamic_save_area; + RealPt video_dynamic_save_area; RealPt video_parameter_table; RealPt video_save_pointer_table; RealPt video_dcc_table; @@ -149,13 +152,14 @@ typedef struct { uint16_t pmode_interface_start; uint16_t pmode_interface_window; uint16_t pmode_interface_palette; - uint16_t vesa_alloc_modes; + uint16_t vesa_alloc_modes; uint16_t used; } rom; uint16_t vesa_setmode; bool vesa_nolfb; bool vesa_oldvbe; bool vesa_oldvbe10; + bool vesa_vbe3; uint8_t text_row; } Int10Data; @@ -176,8 +180,10 @@ typedef struct { #define _HIGH_DEFINITION 0x0080 #define _UNUSUAL_MODE 0x0100 #define _DO_NOT_LIST 0x0200 /* support the mode but do not list in VBE mode enumeration */ -#define _USER_DISABLED 0x4000 /* disabled (cannot set mode) but still listed in modelist */ +#define _USER_DISABLED 0x4000 /* user disabled (cannot set mode) but still listed in modelist */ #define _USER_MODIFIED 0x8000 /* user modified (through VESAMOED) */ +#define _BIOS_DISABLED 0x10000 /* BIOS disabled (cannot set mode), may be listed in modelist but likely not */ +#define _REQUIRE_LFB 0x20000 /* Require LFB, no bank switching permitted */ extern Int10Data int10; @@ -283,3 +289,6 @@ bool INT10_VideoState_Restore(Bitu state,RealPt buffer); /* Video Parameter Tables */ uint16_t INT10_SetupVideoParameterTable(PhysPt basepos); void INT10_SetupBasicVideoParameterTable(void); + +Bitu VideoModeMemSize(VideoModeBlock* vmodeBlock,Bitu mode); + diff --git a/src/ints/int10_char.cpp b/src/ints/int10_char.cpp index 59217c340a7..9a65351727e 100644 --- a/src/ints/int10_char.cpp +++ b/src/ints/int10_char.cpp @@ -1289,6 +1289,23 @@ void INT10_GetCursorPos(uint8_t *row, uint8_t*col, const uint8_t page) } void INT10_SetCursorPos(uint8_t row,uint8_t col,uint8_t page) { + // Get the dimensions + BIOS_NCOLS; + +#if 0 // Disabled to fix Bad Dude (issue #6114). Elder Scrolls Arena installer still works fine, but may need additional fixes. + BIOS_NROWS; + + // EGA/VGA: Emulate a VGA BIOS that range-checks at least the row. + // The DOS installer for Elder Scrolla Arena is obviously trying to put something on the last row of + // the display, however it sets the cursor position to row=25. row is 0-based so that would actually put + // it one row beyond the end of the display. This fixes the "Press F1 for"... message at the bottom. + // Assume MDA/CGA do not range check because the rows value in the BDA did not exist in the original IBM PC/XT BIOS. + if (IS_EGAVGA_ARCH && !IS_PC98_ARCH) { + if (nrows && row >= nrows) + row = nrows - 1; + } +#endif + if (IS_DOSV && DOSV_CheckCJKVideoMode()) DOSV_OffCursor(); else if(J3_IsJapanese()) J3_OffCursor(); if (page>7) LOG(LOG_INT10,LOG_ERROR)("INT10_SetCursorPos page %d",page); @@ -1305,8 +1322,6 @@ void INT10_SetCursorPos(uint8_t row,uint8_t col,uint8_t page) { // Set the hardware cursor uint8_t current=IS_PC98_ARCH ? 0 : real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE); if(page==current) { - // Get the dimensions - BIOS_NCOLS; // Calculate the address knowing nbcols nbrows and page num // NOTE: BIOSMEM_CURRENT_START counts in colour/flag pairs uint16_t address=(ncols*row)+col+(IS_PC98_ARCH ? 0 : (real_readw(BIOSMEM_SEG,BIOSMEM_CURRENT_START)/2)); @@ -1780,78 +1795,84 @@ void INT10_WriteChar(uint16_t chr,uint8_t attr,uint8_t page,uint16_t count,bool } } +unsigned int BeepDuration(); + static void INT10_TeletypeOutputAttr(uint8_t chr,uint8_t attr,bool useattr,uint8_t page) { - BIOS_NCOLS;BIOS_NROWS; - uint8_t cur_row=CURSOR_POS_ROW(page); - uint8_t cur_col=CURSOR_POS_COL(page); - switch (chr) { - case 8: - if(cur_col>0) cur_col--; - break; - case '\r': - cur_col=0; - break; - case '\n': -// cur_col=0; //Seems to break an old chess game - cur_row++; - break; - case 7: /* Beep */ - // Prepare PIT counter 2 for ~900 Hz square wave - IO_Write(0x43, 0xb6); - IO_Write(0x42, 0x28); - IO_Write(0x42, 0x05); - // Speaker on - IO_Write(0x61, IO_Read(0x61) | 0x3); - // Idle for 1/3rd of a second - double start; - start = PIC_FullIndex(); - while ((PIC_FullIndex() - start) < 333.0) CALLBACK_Idle(); - // Speaker off - IO_Write(0x61, IO_Read(0x61) & ~0x3); - if (CurMode->type==M_TEXT) { - uint16_t chat; - INT10_ReadCharAttr(&chat,page); - if ((uint8_t)(chat>>8)!=7) return; - } - chr=' '; - default: - /* Return if the char code is DBCS at the end of the line (for DOS/V) */ - if (cur_col + 1 == ncols && IS_DOSV && DOSV_CheckCJKVideoMode() && isKanji1(chr) && prevchr == 0) { - INT10_TeletypeOutputAttr(' ', attr, useattr, page); - cur_row = CURSOR_POS_ROW(page); - cur_col = CURSOR_POS_COL(page); + BIOS_NCOLS;BIOS_NROWS; + uint8_t cur_row=CURSOR_POS_ROW(page); + uint8_t cur_col=CURSOR_POS_COL(page); + switch (chr) { + case 8: + if(cur_col>0) cur_col--; + break; + case '\r': + cur_col=0; + break; + case '\n': +// cur_col=0; // Seems to break an old chess game +// // That's absolutely right, \r CR and \n LF, this is why DOS requires \r\n for newline --J.C. + cur_row++; + break; + case 7: /* Beep */ + { + if (IS_PC98_ARCH) LOG(LOG_MISC,LOG_WARN)("BUG: INT 10h beep called in PC-98 mode"); + // Prepare PIT counter 2 for ~900 Hz square wave + IO_Write(0x43, 0xb6); + IO_Write(0x42, 0x28); + IO_Write(0x42, 0x05); + // Speaker on + IO_Write(0x61, IO_Read(0x61) | 0x3); + // Idle for 1/3rd of a second + double start,dur = BeepDuration(); + start = PIC_FullIndex(); + while ((PIC_FullIndex() - start) < dur) CALLBACK_Idle(); + // Speaker off + IO_Write(0x61, IO_Read(0x61) & ~0x3); + if (CurMode->type==M_TEXT) { + uint16_t chat; + INT10_ReadCharAttr(&chat,page); + if ((uint8_t)(chat>>8)!=7) return; + } + } + return; /* don't do anything else, not even scrollup on last line (fix for Elder Scrolls Arena installer) */ + default: + /* Return if the char code is DBCS at the end of the line (for DOS/V) */ + if (cur_col + 1 == ncols && IS_DOSV && DOSV_CheckCJKVideoMode() && isKanji1(chr) && prevchr == 0) { + INT10_TeletypeOutputAttr(' ', attr, useattr, page); + cur_row = CURSOR_POS_ROW(page); + cur_col = CURSOR_POS_COL(page); + } + /* Draw the actual Character */ + if(IS_DOSV && DOSV_CheckCJKVideoMode()) { + WriteCharV(cur_col,cur_row,chr,attr,useattr); + } else { + WriteChar(cur_col,cur_row,page,chr,attr,useattr); + } + cur_col++; + } + if(cur_col==ncols) { + cur_col=0; + cur_row++; + } + // Do we need to scroll ? + if(cur_row==nrows) { + //Fill with black on non-text modes + uint8_t fill = 0; + if (IS_PC98_ARCH && CurMode->type == M_TEXT) { + //Fill with the default ANSI attribute on textmode + fill = DefaultANSIAttr(); } - /* Draw the actual Character */ - if(IS_DOSV && DOSV_CheckCJKVideoMode()) { - WriteCharV(cur_col,cur_row,chr,attr,useattr); - } else { - WriteChar(cur_col,cur_row,page,chr,attr,useattr); - } - cur_col++; - } - if(cur_col==ncols) { - cur_col=0; - cur_row++; - } - // Do we need to scroll ? - if(cur_row==nrows) { - //Fill with black on non-text modes - uint8_t fill = 0; - if (IS_PC98_ARCH && CurMode->type == M_TEXT) { - //Fill with the default ANSI attribute on textmode - fill = DefaultANSIAttr(); - } - else if (CurMode->type==M_TEXT || DOSV_CheckCJKVideoMode()) { - //Fill with attribute at cursor on textmode - uint16_t chat; - INT10_ReadCharAttr(&chat,page); - fill=(uint8_t)(chat>>8); - } - INT10_ScrollWindow(0,0,(uint8_t)(nrows-1),(uint8_t)(ncols-1),-1,fill,page); - cur_row--; - } - // Set the cursor for the page - INT10_SetCursorPos(cur_row,cur_col,page); + else if (CurMode->type==M_TEXT || DOSV_CheckCJKVideoMode()) { + //Fill with attribute at cursor on textmode + uint16_t chat; + INT10_ReadCharAttr(&chat,page); + fill=(uint8_t)(chat>>8); + } + INT10_ScrollWindow(0,0,(uint8_t)(nrows-1),(uint8_t)(ncols-1),-1,fill,page); + cur_row--; + } + // Set the cursor for the page + INT10_SetCursorPos(cur_row,cur_col,page); } void INT10_TeletypeOutputAttr(uint8_t chr,uint8_t attr,bool useattr) { diff --git a/src/ints/int10_memory.cpp b/src/ints/int10_memory.cpp index 370b9816d78..8cbf544f0b2 100644 --- a/src/ints/int10_memory.cpp +++ b/src/ints/int10_memory.cpp @@ -59,7 +59,7 @@ static uint16_t map_offset[8]={ void INT10_LoadFont(PhysPt font,bool reload,uint16_t count,Bitu offset,Bitu map,uint8_t height) { unsigned char m64k; - if (IS_VGA_ARCH || (IS_EGA_ARCH && vga.mem.memsize >= 0x20000)) + if (IS_VGA_ARCH || (IS_EGA_ARCH && vga.mem.memsize >= 0x20000)) m64k=0x02; else m64k = 0x00; @@ -147,6 +147,10 @@ void INT10_ReloadFont(void) { case 8: INT10_LoadFont(Real2Phys(int10.rom.font_8_first),false,256,0,map,8); break; + case 13: /* ET4000 emulation */ + if (IS_VGA_ARCH && svgaCard==SVGA_None && CurMode->mode==7) map=0x80; + INT10_LoadFont(Real2Phys(int10.rom.font_13),false,256,0,map,13); + break; case 14: if (IS_VGA_ARCH && svgaCard==SVGA_None && CurMode->mode==7) map=0x80; INT10_LoadFont(Real2Phys(int10.rom.font_14),false,256,0,map,14); @@ -199,6 +203,7 @@ void INT10_SetupRomMemory(void) { int10.rom.font_8_first=RealMake(0xF000,0xFA6E); /* why duplicate data? use the copy in the ROM BIOS */ int10.rom.font_8_second=0; int10.rom.static_state=0; + int10.rom.font_13=0; int10.rom.font_14=0; int10.rom.font_16=0; @@ -224,7 +229,7 @@ void INT10_SetupRomMemory(void) { if (base == 0) E_Exit("Unable to alloc MCGA 16x font"); for (unsigned int i=0;i<256*16;i++) - phys_writeb((PhysPt)base+i,int10_font_16[i]); + phys_writeb((PhysPt)base+i,int10_font_16_mcga[i]); int10.rom.font_16 = RealMake((uint16_t)(base >> 4u),(uint16_t)(base & 0xF)); @@ -298,6 +303,9 @@ void INT10_SetupRomMemory(void) { if (IS_VGA_ARCH) { // SVGA card-specific ROM signatures switch (svgaCard) { + case SVGA_DOSBoxIG: + phys_writes(rom_base+0x0040, "DOSBox Integrated Graphics", 26); + break; case SVGA_S3Trio: if(!VGA_BIOS_use_rom) { // S3 ROM signature @@ -403,7 +411,7 @@ void INT10_SetupRomMemory(void) { int10.rom.used=0x100; } - if (IS_VGA_ARCH && svgaCard==SVGA_S3Trio) INT10_SetupVESA(); + if (IS_VGA_ARCH && (svgaCard==SVGA_S3Trio || svgaCard==SVGA_DOSBoxIG)) INT10_SetupVESA(); if (VGA_BIOS_dont_duplicate_CGA_first_half) { int10.rom.font_8_first=RealMake(0xF000,0xFA6E); /* why duplicate data? use the copy in the ROM BIOS */ @@ -431,17 +439,34 @@ void INT10_SetupRomMemory(void) { int10.rom.font_14_alternate=RealMake(0xC000,int10.rom.used); for (i=0;i<20*15+1;i++) { phys_writeb(rom_base+int10.rom.used++,int10_font_14_alternate[i]); - } + } + + if (IS_VGA_ARCH && (svgaCard == SVGA_TsengET3K || svgaCard == SVGA_TsengET4K)) { + int10.rom.font_13=RealMake(0xC000,int10.rom.used); + for (i=0;i<256*13;i++) { + phys_writeb(rom_base+int10.rom.used++,int10_font_13[i]); + } + } } else { + int10.rom.font_13=0; /* why write the 14-high version if not emulating EGA/VGA? */ int10.rom.font_14=0; /* why write the 14-high version if not emulating EGA/VGA? */ int10.rom.font_14_alternate=0; } if (IS_VGA_ARCH || VIDEO_BIOS_always_carry_16_high_font) { int10.rom.font_16=RealMake(0xC000,int10.rom.used); - for (i=0;i<256*16;i++) { - phys_writeb(rom_base+int10.rom.used++,int10_font_16[i]); + + if (machine == MCH_MCGA) { + for (i=0;i<256*16;i++) { + phys_writeb(rom_base+int10.rom.used++,int10_font_16_mcga[i]); + } } + else { + for (i=0;i<256*16;i++) { + phys_writeb(rom_base+int10.rom.used++,int10_font_16[i]); + } + } + int10.rom.font_16_alternate=RealMake(0xC000,int10.rom.used); for (i=0;i<19*17+1;i++) { phys_writeb(rom_base+int10.rom.used++,int10_font_16_alternate[i]); @@ -542,8 +567,15 @@ void INT10_SetupRomMemory(void) { void INT10_ReloadRomFonts(void) { // 16x8 font PhysPt font16pt=Real2Phys(int10.rom.font_16); - for (unsigned int i=0;i<256*16;i++) { - phys_writeb(font16pt+i,int10_font_16[i]); + if (machine == MCH_MCGA) { + for (unsigned int i=0;i<256*16;i++) { + phys_writeb(font16pt+i,int10_font_16_mcga[i]); + } + } + else { + for (unsigned int i=0;i<256*16;i++) { + phys_writeb(font16pt+i,int10_font_16[i]); + } } phys_writeb(Real2Phys(int10.rom.font_16_alternate),0x1d); // 14x8 font @@ -843,6 +875,265 @@ uint8_t int10_font_08[256 * 8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +uint8_t int10_font_13[256 * 13] = { /* taken from Tseng ET4000 VGA BIOS */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x7e, 0x00, 0x00, + 0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0x7e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, + 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0xc0, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x06, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x06, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, + 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, + 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x66, 0xc6, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x1e, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, + 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0x66, 0x3a, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00, 0x00, + 0x00, 0x00, 0xe6, 0x66, 0x6c, 0x6c, 0x78, 0x6c, 0x6c, 0x66, 0xe6, 0x00, 0x00, + 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, + 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, + 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x7c, 0x6c, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0xc6, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, + 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, + 0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, + 0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x70, 0x1c, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x66, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, + 0x00, 0x00, 0xcc, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x66, 0x3c, 0x0c, 0x06, 0x3c, 0x00, + 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, + 0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, + 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, + 0x00, 0xc6, 0xc6, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, + 0x38, 0x6c, 0x38, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, + 0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x66, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, + 0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, + 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, + 0x00, 0xc6, 0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, + 0x00, 0xc6, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, + 0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xc6, 0x00, 0x00, + 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0xd8, 0x70, + 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, + 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, + 0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, + 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0x00, 0x00, + 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc6, 0xc6, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0xc0, 0xc6, 0xcc, 0xd8, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, + 0x00, 0xc0, 0xc0, 0xc6, 0xcc, 0xd8, 0x30, 0x66, 0xce, 0x9e, 0x3e, 0x06, 0x06, + 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, + 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, + 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfc, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0x40, + 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, + 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, + 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c, 0x00, 0x00, + 0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + uint8_t int10_font_14[256 * 14] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -9550,3 +9841,349 @@ uint8_t int10_font_16_alternate[19 * 17 + 1] = { 0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00 }; + +uint8_t int10_font_16_mcga[256 * 16] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, + 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xff, + 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, + 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, + 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, + 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1e, 0x0e, + 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, + 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x63, + 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, + 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0e, + 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xdb, + 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, + 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, + 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, + 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, + 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, + 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, + 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, + 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, + 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, + 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, + 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, + 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, + 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, + 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, + 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, + 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, + 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, + 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, + 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6c, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, + 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, + 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, + 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xee, + 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, + 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, + 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, + 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, + 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, + 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x60, + 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, + 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x60, + 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x60, + 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, + 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, + 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, + 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x30, + 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, + 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, + 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, + 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0xcc, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, + 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, + 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, + 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x0c, 0x06, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, + 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, + 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x66, + 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x10, 0x38, 0x6c, 0xc6, 0xc6, + 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x00, + 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x60, 0x66, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x76, 0x36, + 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x6c, + 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, + 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, + 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00, 0x00, + 0x00, 0xc6, 0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x3c, + 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, + 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xcc, 0xcc, + 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, + 0xd8, 0x70, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, + 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, + 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, + 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c, + 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, + 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, + 0x18, 0x3e, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, + 0x66, 0xce, 0x9e, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, + 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, + 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x44, 0x11, 0x44, + 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, + 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, + 0x55, 0xaa, 0x55, 0xaa, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, + 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, + 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, + 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, + 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfc, 0xc6, 0xc6, 0xc6, 0xfc, 0xc0, + 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc0, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, + 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, + 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, + 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, + 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, + 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, + 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, + 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 +}; + diff --git a/src/ints/int10_modes.cpp b/src/ints/int10_modes.cpp index 47d99707676..cafcd550906 100644 --- a/src/ints/int10_modes.cpp +++ b/src/ints/int10_modes.cpp @@ -37,6 +37,13 @@ #include +#define DOSBOX_INCLUDE +#include "iglib.h" + +void dosbox_integration_trigger_write_direct32(const uint32_t reg,const uint32_t val); +bool dosbox_int_push_save_state(void); +bool dosbox_int_pop_save_state(void); + #define SEQ_REGS 0x05 #define GFX_REGS 0x09 #define ATT_REGS 0x15 @@ -59,6 +66,10 @@ extern bool allow_vesa_tty; extern bool vga_8bit_dac; extern bool blinking; extern bool ega200; +extern bool finish_prepare; +bool toOutput(const char* what); +static std::string conf_output; + /* This list includes non-explicitly 24bpp modes (in the 0x100-0x11F range) that are available * when the VBE1.2 setting indicates they should be 24bpp. @@ -333,6 +344,62 @@ VideoModeBlock ModeList_VGA[]={ { 0x354 ,M_LIN32 ,1920,1440,240,90 ,8 ,16 ,1 ,0xA0000 ,0x10000,264 ,1584,240 ,1440,_HIGH_DEFINITION, 0}, { 0x355 ,M_LIN24 ,1920,1440,240,90 ,8 ,16 ,1 ,0xA0000 ,0x10000,264 ,1584,240 ,1440,_HIGH_DEFINITION, 0}, +// 1920x1200 16:10 modes +{ 0x360 ,M_LIN4 ,1920,1200,240,75 ,8 ,16 ,1 ,0xA0000 ,0x10000,264 ,1300,240 ,1200,_HIGH_DEFINITION, 0}, +{ 0x361 ,M_LIN8 ,1920,1200,240,75 ,8 ,16 ,1 ,0xA0000 ,0x10000,264 ,1300,240 ,1200,_HIGH_DEFINITION, 0}, +{ 0x362 ,M_LIN15 ,1920,1200,240,75 ,8 ,16 ,1 ,0xA0000 ,0x10000,528 ,1300,480 ,1200,_HIGH_DEFINITION, 0}, +{ 0x363 ,M_LIN16 ,1920,1200,240,75 ,8 ,16 ,1 ,0xA0000 ,0x10000,528 ,1300,480 ,1200,_HIGH_DEFINITION, 0}, +{ 0x364 ,M_LIN32 ,1920,1200,240,75 ,8 ,16 ,1 ,0xA0000 ,0x10000,264 ,1300,240 ,1200,_HIGH_DEFINITION, 0}, +{ 0x365 ,M_LIN24 ,1920,1200,240,75 ,8 ,16 ,1 ,0xA0000 ,0x10000,264 ,1300,240 ,1200,_HIGH_DEFINITION, 0}, + +// 2560x1600 16:10 modes +{ 0x370 ,M_LIN4 ,2560,1600,320,100,8 ,16 ,1 ,0xA0000 ,0x10000,340 ,1700,320 ,1600,_HIGH_DEFINITION, 0}, +{ 0x371 ,M_LIN8 ,2560,1600,320,100,8 ,16 ,1 ,0xA0000 ,0x10000,340 ,1700,320 ,1600,_HIGH_DEFINITION, 0}, +{ 0x372 ,M_LIN15 ,2560,1600,320,100,8 ,16 ,1 ,0xA0000 ,0x10000,680 ,1700,640 ,1600,_HIGH_DEFINITION, 0}, +{ 0x373 ,M_LIN16 ,2560,1600,320,100,8 ,16 ,1 ,0xA0000 ,0x10000,680 ,1700,640 ,1600,_HIGH_DEFINITION, 0}, +{ 0x374 ,M_LIN32 ,2560,1600,320,100,8 ,16 ,1 ,0xA0000 ,0x10000,340 ,1700,320 ,1600,_HIGH_DEFINITION, 0}, +{ 0x375 ,M_LIN24 ,2560,1600,320,100,8 ,16 ,1 ,0xA0000 ,0x10000,340 ,1700,320 ,1600,_HIGH_DEFINITION, 0}, + +// 2880x2160 4:3 modes +{ 0x380 ,M_LIN4 ,2880,2160,360,135,8 ,16 ,1 ,0xA0000 ,0x10000,380 ,2260,360 ,2160,_HIGH_DEFINITION, 0}, +{ 0x381 ,M_LIN8 ,2880,2160,360,135,8 ,16 ,1 ,0xA0000 ,0x10000,380 ,2260,360 ,2160,_HIGH_DEFINITION, 0}, +{ 0x382 ,M_LIN15 ,2880,2160,360,135,8 ,16 ,1 ,0xA0000 ,0x10000,760 ,2260,720 ,2160,_HIGH_DEFINITION, 0}, +{ 0x383 ,M_LIN16 ,2880,2160,360,135,8 ,16 ,1 ,0xA0000 ,0x10000,760 ,2260,720 ,2160,_HIGH_DEFINITION, 0}, +{ 0x384 ,M_LIN32 ,2880,2160,360,135,8 ,16 ,1 ,0xA0000 ,0x10000,380 ,2260,360 ,2160,_HIGH_DEFINITION, 0}, +{ 0x385 ,M_LIN24 ,2880,2160,360,135,8 ,16 ,1 ,0xA0000 ,0x10000,380 ,2260,360 ,2160,_HIGH_DEFINITION, 0}, + +// 3840x2160 16:9 modes +{ 0x390 ,M_LIN4 ,3840,2160,480,135,8 ,16 ,1 ,0xA0000 ,0x10000,500 ,2260,480 ,2160,_HIGH_DEFINITION, 0}, +{ 0x391 ,M_LIN8 ,3840,2160,480,135,8 ,16 ,1 ,0xA0000 ,0x10000,500 ,2260,480 ,2160,_HIGH_DEFINITION, 0}, +{ 0x392 ,M_LIN15 ,3840,2160,480,135,8 ,16 ,1 ,0xA0000 ,0x10000,1000,2260,960 ,2160,_HIGH_DEFINITION, 0}, +{ 0x393 ,M_LIN16 ,3840,2160,480,135,8 ,16 ,1 ,0xA0000 ,0x10000,1000,2260,960 ,2160,_HIGH_DEFINITION, 0}, +{ 0x394 ,M_LIN32 ,3840,2160,480,135,8 ,16 ,1 ,0xA0000 ,0x10000,500 ,2260,480 ,2160,_HIGH_DEFINITION, 0}, +{ 0x395 ,M_LIN24 ,3840,2160,480,135,8 ,16 ,1 ,0xA0000 ,0x10000,500 ,2260,480 ,2160,_HIGH_DEFINITION, 0}, + +// 4096x2160 modes +{ 0x3A0 ,M_LIN4 ,4096,2160,512,135,8 ,16 ,1 ,0xA0000 ,0x10000,612 ,2260,512 ,2160,_HIGH_DEFINITION, 0}, +{ 0x3A1 ,M_LIN8 ,4096,2160,512,135,8 ,16 ,1 ,0xA0000 ,0x10000,612 ,2260,512 ,2160,_HIGH_DEFINITION, 0}, +{ 0x3A2 ,M_LIN15 ,4096,2160,512,135,8 ,16 ,1 ,0xA0000 ,0x10000,1224,2260,1024,2160,_HIGH_DEFINITION, 0}, +{ 0x3A3 ,M_LIN16 ,4096,2160,512,135,8 ,16 ,1 ,0xA0000 ,0x10000,1224,2260,1024,2160,_HIGH_DEFINITION, 0}, +{ 0x3A4 ,M_LIN32 ,4096,2160,512,135,8 ,16 ,1 ,0xA0000 ,0x10000,612 ,2260,512 ,2160,_HIGH_DEFINITION, 0}, +{ 0x3A5 ,M_LIN24 ,4096,2160,512,135,8 ,16 ,1 ,0xA0000 ,0x10000,612 ,2260,512 ,2160,_HIGH_DEFINITION, 0}, + +// 3840x2880 4:3 modes +{ 0x3B0 ,M_LIN4 ,3840,2880,480,180,8 ,16 ,1 ,0xA0000 ,0x10000,500 ,2960,480 ,2880,_HIGH_DEFINITION, 0}, +{ 0x3B1 ,M_LIN8 ,3840,2880,480,180,8 ,16 ,1 ,0xA0000 ,0x10000,500 ,2960,480 ,2880,_HIGH_DEFINITION, 0}, +{ 0x3B2 ,M_LIN15 ,3840,2880,480,180,8 ,16 ,1 ,0xA0000 ,0x10000,1000,2960,960 ,2880,_HIGH_DEFINITION, 0}, +{ 0x3B3 ,M_LIN16 ,3840,2880,480,180,8 ,16 ,1 ,0xA0000 ,0x10000,1000,2960,960 ,2880,_HIGH_DEFINITION, 0}, +{ 0x3B4 ,M_LIN32 ,3840,2880,480,180,8 ,16 ,1 ,0xA0000 ,0x10000,500 ,2960,480 ,2880,_HIGH_DEFINITION, 0}, +{ 0x3B5 ,M_LIN24 ,3840,2880,480,180,8 ,16 ,1 ,0xA0000 ,0x10000,500 ,2960,480 ,2880,_HIGH_DEFINITION, 0}, + +// 4096x3072 4:3 modes +{ 0x3C0 ,M_LIN4 ,4096,3072,512,192,8 ,16 ,1 ,0xA0000 ,0x10000,612 ,3172,512 ,3072,_HIGH_DEFINITION, 0}, +{ 0x3C1 ,M_LIN8 ,4096,3072,512,192,8 ,16 ,1 ,0xA0000 ,0x10000,612 ,3172,512 ,3072,_HIGH_DEFINITION, 0}, +{ 0x3C2 ,M_LIN15 ,4096,3072,512,192,8 ,16 ,1 ,0xA0000 ,0x10000,1224,3172,1024,3072,_HIGH_DEFINITION, 0}, +{ 0x3C3 ,M_LIN16 ,4096,3072,512,192,8 ,16 ,1 ,0xA0000 ,0x10000,1224,3172,1024,3072,_HIGH_DEFINITION, 0}, +{ 0x3C4 ,M_LIN32 ,4096,3072,512,192,8 ,16 ,1 ,0xA0000 ,0x10000,612 ,3172,512 ,3072,_HIGH_DEFINITION, 0}, +{ 0x3C5 ,M_LIN24 ,4096,3072,512,192,8 ,16 ,1 ,0xA0000 ,0x10000,612 ,3172,512 ,3072,_HIGH_DEFINITION, 0}, + // packed 16-color (4bpp) modes seen on a Toshiba Libretto VESA BIOS (Chips & Technologies 65550) { 0x25F ,M_PACKED4,320 ,200 ,40 ,25 ,8 ,8 ,1 ,0xA0000 ,0x10000,50 ,449 ,40 ,400 , _REPEAT1, 0}, { 0x260 ,M_PACKED4,640 ,400 ,80 ,25 ,8 ,16 ,1 ,0xA0000 ,0x10000,100 ,449 ,80 ,400 ,0, 0}, @@ -349,6 +416,13 @@ VideoModeBlock ModeList_VGA[]={ { 0x26B ,M_PACKED4,1920,1080,240,67 ,8 ,16 ,1 ,0xA0000 ,0x10000,264 ,1188,240 ,1080,_HIGH_DEFINITION, 0}, { 0x356 ,M_PACKED4,1920,1440,240,90 ,8 ,16 ,1 ,0xA0000 ,0x10000,264 ,1584,240 ,1440,_HIGH_DEFINITION, 0}, +// dosbox IG 1bpp monochrome modes. 640x480 is already provided by MCGA 640x480 mode +{ 0x400 ,M_CGA2 ,640 ,400 ,80 ,25 ,8 ,16 ,1 ,0xA0000 ,0x10000,100 ,449 ,80 ,400 ,0, 0}, +{ 0x401 ,M_CGA2 ,640 ,480 ,80 ,30 ,8 ,16 ,1 ,0xA0000 ,0x10000,100 ,525 ,80 ,480 ,0, 0}, +{ 0x402 ,M_CGA2 ,800 ,600 ,100,37 ,8 ,16 ,1 ,0xA0000 ,0x10000,132 ,628 ,100,600 ,0, 0}, +{ 0x403 ,M_CGA2 ,1024,768 ,128,48 ,8 ,16 ,1 ,0xA0000 ,0x10000,168 ,806 ,128,768 ,0, 0}, +{ 0x404 ,M_CGA2 ,1280,1024,160,64 ,8 ,16 ,1 ,0xA0000 ,0x10000,212 ,1066,160,1024,0, 0}, + {0xFFFF ,M_ERROR ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0x00000 ,0x0000 ,0 ,0 ,0 ,0 ,0 , 0}, }; @@ -387,16 +461,15 @@ VideoModeBlock ModeList_VGA_Tseng[]={ { 0x011 ,M_EGA ,640 ,480 ,80 ,30 ,8 ,16 ,1 ,0xA0000 ,0xA000 ,100 ,525 ,80 ,480 ,0, 0}, { 0x012 ,M_EGA ,640 ,480 ,80 ,30 ,8 ,16 ,1 ,0xA0000 ,0xA000 ,100 ,525 ,80 ,480 ,0, 0}, { 0x013 ,M_VGA ,320 ,200 ,40 ,25 ,8 ,8 ,1 ,0xA0000 ,0x2000 ,100 ,449 ,80 ,400 ,_REPEAT1, 0}, - -{ 0x018 ,M_TEXT ,1056 ,688, 132,44, 8, 8, 1 ,0xB0000 ,0x4000, 192, 800, 132, 704, 0, 0}, -{ 0x019 ,M_TEXT ,1056 ,400, 132,25, 8, 16,1 ,0xB0000 ,0x2000, 192, 449, 132, 400, 0, 0}, -{ 0x01A ,M_TEXT ,1056 ,400, 132,28, 8, 16,1 ,0xB0000 ,0x2000, 192, 449, 132, 448, 0, 0}, -{ 0x022 ,M_TEXT ,1056 ,688, 132,44, 8, 8, 1 ,0xB8000 ,0x4000, 192, 800, 132, 704, 0, 0}, -{ 0x023 ,M_TEXT ,1056 ,400, 132,25, 8, 16,1 ,0xB8000 ,0x2000, 192, 449, 132, 400, 0, 0}, -{ 0x024 ,M_TEXT ,1056 ,400, 132,28, 8, 16,1 ,0xB8000 ,0x2000, 192, 449, 132, 448, 0, 0}, -{ 0x025 ,M_LIN4 ,640 ,480 ,80 ,30 ,8 ,16 ,1 ,0xA0000 ,0xA000 ,100 ,525 ,80 ,480 , 0, 0}, +{ 0x018 ,M_TEXT ,1056 ,352, 132,44, 8, 8, 1 ,0xB0000 ,0x4000, 166, 428, 132, 352, 0, 0}, +{ 0x019 ,M_TEXT ,1056 ,350, 132,25, 8, 14,1 ,0xB0000 ,0x2000, 166, 428, 132, 350, 0, 0}, +{ 0x01A ,M_TEXT ,1056 ,364, 132,28, 8, 13,1 ,0xB0000 ,0x2000, 192, 429, 132, 364, 0, 0}, +{ 0x022 ,M_TEXT ,1056 ,352, 132,44, 8, 8, 1 ,0xB8000 ,0x4000, 166, 428, 132, 352, 0, 0}, +{ 0x023 ,M_TEXT ,1056 ,350, 132,25, 8, 14,1 ,0xB8000 ,0x2000, 166, 428, 132, 350, 0, 0}, +{ 0x024 ,M_TEXT ,1056 ,364, 132,28, 8, 13,1 ,0xB8000 ,0x2000, 192, 429, 132, 364, 0, 0}, +{ 0x025 ,M_LIN4 ,640 ,480 ,80 ,60 ,8 ,8 ,1 ,0xA0000 ,0xA000 ,100 ,525 ,80 ,480 , 0, 0}, { 0x029 ,M_LIN4 ,800 ,600 ,100,37 ,8 ,16 ,1 ,0xA0000 ,0xA000, 128 ,663 ,100,600 , 0, 0}, -{ 0x02D ,M_LIN8 ,640 ,350 ,80 ,21 ,8 ,16 ,1 ,0xA0000 ,0x10000,100 ,449 ,80 ,350 , 0, 0}, +{ 0x02D ,M_LIN8 ,640 ,350 ,80 ,25 ,8 ,14 ,1 ,0xA0000 ,0x10000,100 ,449 ,80 ,350 , 0, 0}, { 0x02E ,M_LIN8 ,640 ,480 ,80 ,30 ,8 ,16 ,1 ,0xA0000 ,0x10000,100 ,525 ,80 ,480 , 0, 0}, { 0x02F ,M_LIN8 ,640 ,400 ,80 ,25 ,8 ,16 ,1 ,0xA0000 ,0x10000,100 ,449 ,80 ,400 , 0, 0},/* ET4000 only */ { 0x030 ,M_LIN8 ,800 ,600 ,100,37 ,8 ,16 ,1 ,0xA0000 ,0x10000,128 ,663 ,100,600 , 0, 0}, @@ -699,13 +772,7 @@ static bool SetCurMode(VideoModeBlock modeblock[],uint16_t mode) { i++; } /* ignore disabled modes */ - else if (modeblock[i].special & _USER_DISABLED) { - /* ignore */ - i++; - } - /* ignore modes beyond the render scaler architecture's limits... unless the user created it. We did warn the user! */ - else if (!(modeblock[i].special & _USER_MODIFIED) && - (modeblock[i].swidth > SCALER_MAXWIDTH || modeblock[i].sheight > SCALER_MAXHEIGHT)) { + else if (modeblock[i].special & (_USER_DISABLED|_BIOS_DISABLED)) { /* ignore */ i++; } @@ -713,8 +780,9 @@ static bool SetCurMode(VideoModeBlock modeblock[],uint16_t mode) { if ((!int10.vesa_oldvbe) || (ModeList_VGA[i].mode<0x120)) { CurMode=&modeblock[i]; #if defined(USE_TTF) - ttf_switch_off(false); // Disable TTF output when switching to graphics mode, - // however for text mode, temporary switched off and switched on again later to avoid glitches + conf_output = static_cast(control->GetSection("sdl"))->Get_string("output"); + if(conf_output.empty())conf_output = "default"; + if(finish_prepare) ttf_switch_off(); #endif return true; } @@ -746,6 +814,13 @@ static void SetTextLines(void) { bool DISP2_Active(void); bool INT10_SetCurMode(void) { + // bug fix: This code might match a VBE mode properly, but then revert it to some entirely different mode. + // This fixes a bug where VBETEST was getting weird wacky incorrect results for mode 0x10D (320x200 15bpp) + // because mode 0x10D is INT 10h mode 0x75, and mode 0x75 is also a JEGA mode in the modelist, causing + // VBE scanling and panning to behave as if M_CGA4. + if (CurMode && CurMode->mode >= 0x100) + return false; + bool mode_changed=false; uint16_t bios_mode=(uint16_t)real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE); if (CurMode == NULL || CurMode->mode != bios_mode) { @@ -920,12 +995,6 @@ static void FinishSetMode(bool clearmem) { int10.text_row = real_readb(BIOSMEM_SEG, BIOSMEM_NB_ROWS); /* FIXME */ VGA_DAC_UpdateColorPalette(); -#if defined(USE_TTF) - //LOG_MSG("INT10: type=%d, mode=%d, twidth=%d, theight=%d", CurMode->type, CurMode->mode, CurMode->twidth, CurMode->theight); - if(CurMode->type == M_TEXT) { // FIX_ME: Text mode detection when screen mode is not changed via INT 10h function - ttf_switch_on(); // TTF mode is switched on in text mode only. - } -#endif } uint8_t TandyGetCRTPage(void) { @@ -1306,8 +1375,10 @@ bool INT10_SetVideoMode(uint16_t mode) { } //LOG_MSG("set mode %x",mode); bool clearmem=true;Bitu i; + bool lfb=false; if (mode>=0x100) { - if ((mode & 0x4000) && int10.vesa_nolfb) return false; + lfb = !!(mode & 0x4000); + if (lfb && int10.vesa_nolfb) return false; if (mode & 0x8000) clearmem=false; mode&=0xfff; } @@ -1318,6 +1389,13 @@ bool INT10_SetVideoMode(uint16_t mode) { if (IS_VGA_ARCH && svgaCard == SVGA_None && mode > 0x13) return false; /* Standard VGA does not have anything above 0x13 */ + if (IS_VGA_ARCH && svgaCard == SVGA_DOSBoxIG) { + /* switch off Integration Graphics */ + dosbox_int_push_save_state(); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_CTL,0); + dosbox_int_pop_save_state(); + } + if (unmask_irq0_on_int10_setmode) { /* setting the video mode unmasks certain IRQs as a matter of course */ PIC_SetIRQMask(0,false); /* Enable system timer */ @@ -1444,6 +1522,12 @@ bool INT10_SetVideoMode(uint16_t mode) { } if (CurMode->type==M_TEXT) SetTextLines(); + // if the mode says to require LFB, reject non-LFB modeset + if (mode >= 0x100 && !lfb && (CurMode->special & _REQUIRE_LFB)) { + LOG(LOG_INT10,LOG_ERROR)("Attempt to set VESA mode %X as non-LFB, but mode requires LFB",mode); + return false; + } + // INT 10h modeset will always clear 8-bit DAC mode (by VESA BIOS standards) vga_8bit_dac = false; VGA_DAC_UpdateColorPalette(); @@ -1827,6 +1911,8 @@ bool INT10_SetVideoMode(uint16_t mode) { /* Mode Control */ uint8_t mode_control=0; + bool dosboxIGsvga = (svgaCard == SVGA_DOSBoxIG) && CurMode->mode >= 0x100; + switch (CurMode->type) { case M_DCGA: mode_control=0xc4; @@ -1932,41 +2018,44 @@ bool INT10_SetVideoMode(uint16_t mode) { gfx_data[0x6]|=mono_mode ? 0x0a : 0x0e; //Either b800 or b000, chain odd/even enable break; case M_LIN8: - case M_LIN15: - case M_LIN16: - case M_LIN24: - case M_LIN32: - case M_PACKED4: - gfx_data[0x5] |= 0x40; //256 color mode - if (int10_vesa_map_as_128kb) - gfx_data[0x6] |= 0x01; //graphics mode at 0xa000-bffff - else - gfx_data[0x6] |= 0x05; //graphics mode at 0xa000-affff - break; - case M_VGA: - gfx_data[0x5]|=0x40; //256 color mode - gfx_data[0x6]|=0x05; //graphics mode at 0xa000-affff - break; - case M_LIN4: - case M_EGA: - if (IS_EGA_ARCH && vga.mem.memsize < 0x20000 && CurMode->vdispend==350 && CurMode->type == M_EGA) { - gfx_data[0x5]|=0x10; //Odd-Even Mode - gfx_data[0x6]|=0x02; //Odd-Even Mode - gfx_data[0x7]=0x5; /* Color don't care */ - } - gfx_data[0x6]|=0x05; //graphics mode at 0xa000-affff - break; - case M_CGA4: - gfx_data[0x5]|=0x20; //CGA mode - gfx_data[0x6]|=0x0f; //graphics mode at 0xb800=0xbfff - if (IS_EGAVGA_ARCH) gfx_data[0x5]|=0x10; - break; - case M_DCGA: - case M_CGA2: - gfx_data[0x6]|=0x0d; //graphics mode at 0xb800=0xbfff, chain odd/even disabled - break; - default: - break; + case M_LIN15: + case M_LIN16: + case M_LIN24: + case M_LIN32: + case M_PACKED4: + gfx_data[0x5] |= 0x40; //256 color mode + if (int10_vesa_map_as_128kb) + gfx_data[0x6] |= 0x01; //graphics mode at 0xa000-bffff + else + gfx_data[0x6] |= 0x05; //graphics mode at 0xa000-affff + break; + case M_VGA: + gfx_data[0x5]|=0x40; //256 color mode + gfx_data[0x6]|=0x05; //graphics mode at 0xa000-affff + break; + case M_LIN4: + case M_EGA: + if (IS_EGA_ARCH && vga.mem.memsize < 0x20000 && CurMode->vdispend==350 && CurMode->type == M_EGA) { + gfx_data[0x5]|=0x10; //Odd-Even Mode + gfx_data[0x6]|=0x02; //Odd-Even Mode + gfx_data[0x7]=0xF; /* Color don't care */ + } + gfx_data[0x6]|=0x05; //graphics mode at 0xa000-affff + break; + case M_CGA4: + gfx_data[0x5]|=0x20; //CGA mode + gfx_data[0x6]|=0x0f; //graphics mode at 0xb800=0xbfff + if (IS_EGAVGA_ARCH) gfx_data[0x5]|=0x10; + break; + case M_DCGA: + case M_CGA2: + if (dosboxIGsvga) + gfx_data[0x6]|=0x05; //graphics mode at 0xa000-affff + else + gfx_data[0x6]|=0x0d; //graphics mode at 0xb800=0xbfff, chain odd/even disabled + break; + default: + break; } if (vptable) { @@ -2113,6 +2202,11 @@ bool INT10_SetVideoMode(uint16_t mode) { att_data[i] = phys_readb(vptp+0x23+i); /* contents of attribute controller regs 0-13h */ } + if (dosboxIGsvga && CurMode->type == M_CGA2) { + for (uint8_t ct=0;ct<10;ct++) + att_data[ct] = (ct & 1) ? 1 : 0; + } + if ((modeset_ctl & 8)==0) { for (uint8_t ct=0;cttype==M_TEXT) { - INT10_ReloadFont(); + if(CurMode->type == M_TEXT) { + INT10_ReloadFont(); + #if defined(USE_TTF) - if (ttf.inUse) - ttf_reset(); - else - ttf_switch_on(false); - } else { - ttf_switch_off(false); + if(ttf.inUse) + ttf_reset(); + else { + if(!finish_prepare && conf_output == "ttf") { // Workaround for blank BIOS screen in TTF mode + toOutput("surface"); + toOutput("ttf"); + } + if(finish_prepare) ttf_switch_on(true); // M_TEXT modes can switch to TTF mode is initialization is completed + else ttf_switch_off(true); // Workaround for blank BIOS screen in TTF mode + } +#endif + } +#if defined(USE_TTF) + else ttf_switch_off(true); #endif - } // Enable screen memory access IO_Write(0x3c4,1); IO_Write(0x3c5,seq_data[1] & ~0x20); //LOG_MSG("setmode end"); @@ -2434,6 +2544,41 @@ bool INT10_SetVideoMode(uint16_t mode) { return true; } +Bitu VideoModeMemSize(VideoModeBlock* vmodeBlock,Bitu mode) { + switch(vmodeBlock->type) { + case M_PACKED4: + if (mode >= 0x100 && !(mode >= 0x202 && mode <= 0x208)/*S3 Windows 95 driver needs these*/ && !allow_vesa_4bpp_packed) return ~0ul; + return vmodeBlock->swidth*vmodeBlock->sheight/2; + case M_LIN4: + if (mode >= 0x100 && !allow_vesa_4bpp) return ~0ul; + return vmodeBlock->swidth*vmodeBlock->sheight/2; + case M_LIN8: + if (mode >= 0x100 && !allow_vesa_8bpp) return ~0ul; + return vmodeBlock->swidth*vmodeBlock->sheight; + case M_LIN15: + if (mode >= 0x100 && !allow_vesa_15bpp) return ~0ul; + return vmodeBlock->swidth*vmodeBlock->sheight*2; + case M_LIN16: + if (mode >= 0x100 && !allow_vesa_16bpp) return ~0ul; + return vmodeBlock->swidth*vmodeBlock->sheight*2; + case M_LIN24: + if (mode >= 0x100 && !allow_vesa_24bpp) return ~0ul; + if (mode >= 0x120 && !allow_explicit_vesa_24bpp) return ~0ul; + return vmodeBlock->swidth*vmodeBlock->sheight*3; + case M_LIN32: + if (mode >= 0x100 && !allow_vesa_32bpp) return ~0ul; + return vmodeBlock->swidth*vmodeBlock->sheight*4; + case M_TEXT: + if (mode >= 0x100 && !allow_vesa_tty) return ~0ul; + return vmodeBlock->twidth*vmodeBlock->theight*2; + default: + break; + } + + // Return 0 for all other types, those always fit in memory + return 0; +} + Bitu VideoModeMemSize(Bitu mode) { if (!IS_VGA_ARCH) return 0; @@ -2455,6 +2600,7 @@ Bitu VideoModeMemSize(Bitu mode) { VideoModeBlock* vmodeBlock = NULL; Bitu i=0; + while (modelist[i].mode!=0xffff) { if (modelist[i].mode==mode) { /* Hack for VBE 1.2 modes and 24/32bpp ambiguity */ @@ -2475,37 +2621,7 @@ Bitu VideoModeMemSize(Bitu mode) { if (!vmodeBlock) return ~0ul; - switch(vmodeBlock->type) { - case M_PACKED4: - if (mode >= 0x100 && !(mode >= 0x202 && mode <= 0x208)/*S3 Windows 95 driver needs these*/ && !allow_vesa_4bpp_packed) return ~0ul; - return vmodeBlock->swidth*vmodeBlock->sheight/2; - case M_LIN4: - if (mode >= 0x100 && !allow_vesa_4bpp) return ~0ul; - return vmodeBlock->swidth*vmodeBlock->sheight/2; - case M_LIN8: - if (mode >= 0x100 && !allow_vesa_8bpp) return ~0ul; - return vmodeBlock->swidth*vmodeBlock->sheight; - case M_LIN15: - if (mode >= 0x100 && !allow_vesa_15bpp) return ~0ul; - return vmodeBlock->swidth*vmodeBlock->sheight*2; - case M_LIN16: - if (mode >= 0x100 && !allow_vesa_16bpp) return ~0ul; - return vmodeBlock->swidth*vmodeBlock->sheight*2; - case M_LIN24: - if (mode >= 0x100 && !allow_vesa_24bpp) return ~0ul; - if (mode >= 0x120 && !allow_explicit_vesa_24bpp) return ~0ul; - return vmodeBlock->swidth*vmodeBlock->sheight*3; - case M_LIN32: - if (mode >= 0x100 && !allow_vesa_32bpp) return ~0ul; - return vmodeBlock->swidth*vmodeBlock->sheight*4; - case M_TEXT: - if (mode >= 0x100 && !allow_vesa_tty) return ~0ul; - return vmodeBlock->twidth*vmodeBlock->theight*2; - default: - break; - } - // Return 0 for all other types, those always fit in memory - return 0; + return VideoModeMemSize(vmodeBlock,mode); } VideoModeBlock ModeList_DOSV[]={ @@ -2645,12 +2761,13 @@ class VESAMOED : public Program { int ch = -1; int newmode = -1; signed char enable = -1; + signed char lfbreq = -1; bool doDelete = false; bool modefind = false; cmd->BeginOpt(); while (cmd->GetOpt(/*&*/arg)) { - got_opt=true; + got_opt=true; if (arg == "?" || arg == "help") { doHelp(); return; @@ -2669,10 +2786,14 @@ class VESAMOED : public Program { return; } } + else if (arg == "require-lfb") { + cmd->NextOptArgv(/*&*/tmp); + lfbreq = (int)strtoul(tmp.c_str(),NULL,0); + } else if (arg == "fmt") { cmd->NextOptArgv(/*&*/tmp); - if (tmp == "LIN4") + if (tmp == "LIN4") fmt = M_LIN4; else if (tmp == "LIN8") fmt = M_LIN8; @@ -2738,7 +2859,7 @@ class VESAMOED : public Program { } } cmd->EndOpt(); - if(!got_opt) { + if(!got_opt) { doHelp(); return; } @@ -2750,7 +2871,7 @@ class VESAMOED : public Program { while (ModeList_VGA[array_i].mode != 0xFFFF) { bool match = true; - if (w > 0 && (Bitu)w != ModeList_VGA[array_i].swidth) + if (w > 0 && (Bitu)w != ModeList_VGA[array_i].swidth) match = false; else if (h > 0 && (Bitu)h != ModeList_VGA[array_i].sheight) match = false; @@ -2789,9 +2910,16 @@ class VESAMOED : public Program { } if (enable == 0) - ModeList_VGA[array_i].special |= (uint16_t) _USER_DISABLED; + ModeList_VGA[array_i].special |= (Bitu) _USER_DISABLED; else if (enable == 1) - ModeList_VGA[array_i].special &= (uint16_t)(~_USER_DISABLED); + ModeList_VGA[array_i].special &= (Bitu)(~_USER_DISABLED); + + if (lfbreq == 0) + ModeList_VGA[array_i].special &= (Bitu)(~_REQUIRE_LFB); + else if (lfbreq == 1) + ModeList_VGA[array_i].special |= (Bitu) _REQUIRE_LFB; + + LOG_MSG("%x %x",(unsigned int)ModeList_VGA[array_i].mode,(unsigned int)ModeList_VGA[array_i].special); if (doDelete) { if (ModeList_VGA[array_i].type != M_ERROR) @@ -2812,7 +2940,7 @@ class VESAMOED : public Program { if (!modefind && (w > 0 || h > 0 || fmt >= 0 || ch > 0 || pitch >= 0)) { WriteOut("Changing mode 0x%x parameters\n",(unsigned int)ModeList_VGA[array_i].mode); - ModeList_VGA[array_i].special |= _USER_MODIFIED; + ModeList_VGA[array_i].special |= (Bitu)_USER_MODIFIED; LOG_MSG("pitch %d",pitch); if (pitch >= 0) { @@ -2875,16 +3003,6 @@ class VESAMOED : public Program { INT10_WriteVESAModeList(int10.rom.vesa_alloc_modes); } - /* If the new mode exceeds the maximum supported resolution of the render scaler architecture, then warn. - * Exceeding the scaler maximum will result in a frozen screen with the contents prior to the mode switch, - * which is useless. VESA BIOS emulation will not allow setting the mode. */ - if (ModeList_VGA[array_i].swidth > SCALER_MAXWIDTH || ModeList_VGA[array_i].sheight > SCALER_MAXHEIGHT) { - WriteOut("WARNING: Mode %u x %u as specified exceeds the maximum resolution\n", - ModeList_VGA[array_i].swidth,ModeList_VGA[array_i].sheight); - WriteOut("supported by the render scaler architecture of this emulator and\n"); - WriteOut("will be disabled.\n"); - } - /* if the new mode cannot fit in available memory, then mark as disabled */ { unsigned int pitch = 0; @@ -2941,8 +3059,9 @@ class VESAMOED : public Program { WriteOut(" -delete Delete video mode\n"); WriteOut(" -disable Disable video mode (list but do not allow setting)\n"); WriteOut(" -enable Enable video mode\n"); - WriteOut(" -pitch Change display pitch (pixels per scanline).\n"); - WriteOut(" A value of zero will restore normal calculation.\n"); + WriteOut(" -pitch Change display pitch (pixels per scanline).\n"); + WriteOut(" A value of zero will restore normal calculation.\n"); + WriteOut(" -require-lfb Set/clear flag to require LFB for mode\n"); } }; diff --git a/src/ints/int10_put_pixel.cpp b/src/ints/int10_put_pixel.cpp index 06db86270c9..4c24fd9a9cd 100644 --- a/src/ints/int10_put_pixel.cpp +++ b/src/ints/int10_put_pixel.cpp @@ -168,6 +168,8 @@ void INT10_PutPixel(uint16_t x,uint16_t y,uint8_t page,uint8_t color) { } case M_EGA: { + /* Enable writing to all planes */ + IO_Write(0x3c4,0x2);IO_Write(0x3c5,0xf); /* Set the correct bitmask for the pixel position */ IO_Write(0x3ce,0x8);uint8_t mask=128u>>(x&7u);IO_Write(0x3cf,mask); /* Set the color to set/reset register */ diff --git a/src/ints/int10_vesa.cpp b/src/ints/int10_vesa.cpp index 0e3663323a2..c204b7cf5b4 100644 --- a/src/ints/int10_vesa.cpp +++ b/src/ints/int10_vesa.cpp @@ -31,6 +31,13 @@ #include "dos_inc.h" #include "bitop.h" +#define DOSBOX_INCLUDE +#include "iglib.h" + +void dosbox_integration_trigger_write_direct32(const uint32_t reg,const uint32_t val); +bool dosbox_int_push_save_state(void); +bool dosbox_int_pop_save_state(void); + int hack_lfb_yadjust = 0; int hack_lfb_xadjust = 0; @@ -45,6 +52,7 @@ extern unsigned int vbe_window_size; extern int vesa_mode_width_cap; extern int vesa_mode_height_cap; extern bool enable_vga_8bit_dac; +extern bool enable_vbe_pmode_if; extern bool allow_hd_vesa_modes; extern bool allow_unusual_vesa_modes; extern bool allow_explicit_vesa_24bpp; @@ -60,6 +68,8 @@ extern bool allow_vesa_4bpp; extern bool allow_vesa_tty; extern bool vga_8bit_dac; +void dosbox_integration_trigger_write_direct32(const uint32_t reg,const uint32_t val); + #define VESA_SUCCESS 0x00 #define VESA_FAIL 0x01 #define VESA_HW_UNSUPPORTED 0x02 @@ -81,6 +91,11 @@ static char string_vendorname[]="DOSBox Development Team"; static char string_productname[]="DOSBox - The DOS Emulator"; static char string_productrev[]="2"; +static char dosboxig_string_oem[]="DOSBox Integrated Video"; +static char dosboxig_string_vendorname[]="DOSBox Development Team"; +static char dosboxig_string_productname[]="DOSBox - The DOS Emulator"; +static char dosboxig_string_productrev[]="1"; + #ifdef _MSC_VER #pragma pack (1) #endif @@ -144,34 +159,6 @@ void VESA_OnReset_Clear_Callbacks(void) { extern bool vesa_bios_modelist_in_info; -uint32_t GetReportedVideoMemorySize(void) { - uint32_t sz = vga.mem.memsize; - - /* if the user specified custom window granularity, than - * limitations in the interface to program bank offset - * can cause problems if the granularity is small enough - * that the reported video memory exceeds 128 (if 64KB - * banks) or 256 (if not 64KB banks) possible values - * of granularity. */ - if (vbe_window_granularity != 0) { - unsigned int banks = (unsigned int)sz / vbe_window_granularity; - - if (vbe_window_granularity >= (64*1024) && banks > 128) - banks = 128; /* ref: vga_s3.cpp port 6Ah */ - else if (banks > 256) - banks = 256; /* ref: vga_s3.cpp port 6Ah hack for < 64KB granularity */ - - uint32_t maxsz = (uint32_t)banks * (uint32_t)vbe_window_granularity; - - if (vga.svga.bank_size > vbe_window_granularity) - maxsz -= (vga.svga.bank_size - vbe_window_granularity); - - if (sz > maxsz) sz = maxsz; - } - - return sz; -} - uint8_t VESA_GetSVGAInformation(uint16_t seg,uint16_t off) { /* Fill 256 byte buffer with VESA information */ PhysPt buffer=PhysMake(seg,off); @@ -180,70 +167,84 @@ uint8_t VESA_GetSVGAInformation(uint16_t seg,uint16_t off) { Bitu id=mem_readd(buffer); if (((id==0x56424532)||(id==0x32454256)) && (!int10.vesa_oldvbe)) vbe2=true; - /* The reason this is an option is that there are some old DOS games that assume the BIOS - * fills in only the structure members. These games do not provide enough room for the - * full 256-byte block. If we zero the entire block, unrelated data next to the buffer - * gets wiped and the game crashes. */ - if (vesa_zero_on_get_information) { - if (vbe2) { - for (i=0;i<0x200;i++) mem_writeb((PhysPt)(buffer+i),0); - } else { - for (i=0;i<0x100;i++) mem_writeb((PhysPt)(buffer+i),0); - } - } + /* The reason this is an option is that there are some old DOS games that assume the BIOS + * fills in only the structure members. These games do not provide enough room for the + * full 256-byte block. If we zero the entire block, unrelated data next to the buffer + * gets wiped and the game crashes. */ + if (vesa_zero_on_get_information) { + if (vbe2) { + for (i=0;i<0x200;i++) mem_writeb((PhysPt)(buffer+i),0); + } else { + for (i=0;i<0x100;i++) mem_writeb((PhysPt)(buffer+i),0); + } + } /* Fill common data */ - MEM_BlockWrite(buffer,(void *)"VESA",4); //Identification - if (!int10.vesa_oldvbe) mem_writew(buffer+0x04,0x200); //Vesa version 2.0 - else if (!int10.vesa_oldvbe10) mem_writew(buffer+0x04,0x102); //Vesa version 1.2 + MEM_BlockWrite(buffer,(void *)"VESA",4); //Identification + if (int10.vesa_vbe3) mem_writew(buffer+0x04,0x300); //Vesa version 3.0 + else if (!int10.vesa_oldvbe) mem_writew(buffer+0x04,0x200); //Vesa version 2.0 + else if (!int10.vesa_oldvbe10) mem_writew(buffer+0x04,0x102); //Vesa version 1.2 else mem_writew(buffer+0x04,0x100); //Vesa version 1.0 if (vbe2) { - vbe2_pos=256+off; - - mem_writed(buffer+0x06,RealMake(seg,vbe2_pos)); - for (i=0;i> 16; - uint16_t modoff = int10.rom.vesa_modes & 0xFFFF; + vbe2_pos=256+off; + + if (svgaCard == SVGA_DOSBoxIG) { + mem_writed(buffer+0x06,RealMake(seg,vbe2_pos)); + for (i=0;i= (509+off)) break; - } - else { - if (vbe2_pos >= (253+off)) break; - } - uint16_t m = real_readw(modesg,modoff); - if (m == 0xFFFF) break; - real_writew(seg,vbe2_pos,m); - vbe2_pos += 2; - modoff += 2; - } while (1); - real_writew(seg,vbe2_pos,0xFFFF); - } - else { - mem_writed(buffer+0x0e,int10.rom.vesa_modes); //VESA Mode list - } + if (vesa_bios_modelist_in_info) { + /* put the modelist into the VBE struct itself, as modern BIOSes like to do. + * NOTICE: This limits the modelist to what is able to fit! Extended modes may not fit, which is why the option is OFF by default. */ + uint16_t modesg = int10.rom.vesa_modes >> 16; + uint16_t modoff = int10.rom.vesa_modes & 0xFFFF; + + mem_writed(buffer+0x0e,RealMake(seg,vbe2_pos)); //VESA Mode list + + do { + if (vbe2) { + if (vbe2_pos >= (509+off)) break; + } + else { + if (vbe2_pos >= (253+off)) break; + } + uint16_t m = real_readw(modesg,modoff); + if (m == 0xFFFF) break; + real_writew(seg,vbe2_pos,m); + vbe2_pos += 2; + modoff += 2; + } while (1); + real_writew(seg,vbe2_pos,0xFFFF); + } + else { + mem_writed(buffer+0x0e,int10.rom.vesa_modes); //VESA Mode list + } mem_writed(buffer+0x0a,(enable_vga_8bit_dac ? 1 : 0)); //Capabilities and flags - mem_writew(buffer+0x12,(uint16_t)(GetReportedVideoMemorySize()/(64*1024))); // memory size in 64kb blocks + mem_writew(buffer+0x12,(uint16_t)(vga.mem.vbe_memsize/(64*1024))); // memory size in 64kb blocks return VESA_SUCCESS; } @@ -261,17 +262,17 @@ uint8_t VESA_GetSVGAModeInformation(uint16_t mode,uint16_t seg,uint16_t off) { while (ModeList_VGA[i].mode!=0xffff) { /* Hack for VBE 1.2 modes and 24/32bpp ambiguity */ if (ModeList_VGA[i].mode >= 0x100 && ModeList_VGA[i].mode <= 0x11F && - !(ModeList_VGA[i].special & _USER_MODIFIED) && + !(ModeList_VGA[i].special & _USER_MODIFIED) && ((ModeList_VGA[i].type == M_LIN32 && !vesa12_modes_32bpp) || (ModeList_VGA[i].type == M_LIN24 && vesa12_modes_32bpp))) { /* ignore */ i++; } - /* ignore deleted modes */ - else if (ModeList_VGA[i].type == M_ERROR) { - /* ignore */ - i++; - } + /* ignore deleted modes */ + else if (ModeList_VGA[i].type == M_ERROR) { + /* ignore */ + i++; + } else if (mode==ModeList_VGA[i].mode) goto foundit; else @@ -282,14 +283,14 @@ uint8_t VESA_GetSVGAModeInformation(uint16_t mode,uint16_t seg,uint16_t off) { if ((int10.vesa_oldvbe) && (ModeList_VGA[i].mode>=0x120)) return 0x01; VideoModeBlock * mblock=&ModeList_VGA[i]; - /* Don't allow querying modes the SVGA card does not accept, - * unless the user modified the mode. */ - if (svga.accepts_mode && !(mblock->special & _USER_MODIFIED)) { + /* Don't allow querying modes the SVGA card does not accept, + * unless the user modified the mode. */ + if (svga.accepts_mode && !(mblock->special & _USER_MODIFIED)) { if (!svga.accepts_mode(mode)) return 0x01; } - /* do not return information on deleted modes */ - if (mblock->type == M_ERROR) return 0x01; + /* do not return information on deleted modes */ + if (mblock->type == M_ERROR) return 0x01; bool allow_res = allow_vesa_lowres_modes || (ModeList_VGA[i].swidth >= 640 && ModeList_VGA[i].sheight >= 400); @@ -297,139 +298,163 @@ uint8_t VESA_GetSVGAModeInformation(uint16_t mode,uint16_t seg,uint16_t off) { unsigned int cwidth = (mblock->pitch != 0) ? mblock->pitch : mblock->swidth; switch (mblock->type) { - case M_PACKED4: - if (!allow_vesa_4bpp_packed && !(ModeList_VGA[i].mode >= 0x202 && ModeList_VGA[i].mode <= 0x208)) return VESA_FAIL;//TODO: New option to disable - pageSize = mblock->sheight * cwidth/2; - adj = hack_lfb_xadjust / 2; - var_write(&minfo.BytesPerScanLine,(uint16_t)((((cwidth+15U)/8U)&(~1U))*4)); /* NTS: 4bpp requires even value due to VGA registers, round up */ - if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ - var_write(&minfo.NumberOfPlanes,0x1); - var_write(&minfo.BitsPerPixel,4); - var_write(&minfo.MemoryModel,4); //packed pixel - } - modeAttributes = 0x1b; // Color, graphics - if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer - break; - case M_LIN4: - if (!allow_vesa_4bpp) return VESA_FAIL; - pageSize = mblock->sheight * (uint16_t)(((cwidth+15U)/8U)&(~1U)); - adj = hack_lfb_xadjust / 8; - var_write(&minfo.BytesPerScanLine,(uint16_t)(((cwidth+15U)/8U)&(~1U))); /* NTS: 4bpp requires even value due to VGA registers, round up */ - if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ - var_write(&minfo.NumberOfPlanes,0x4); - var_write(&minfo.BitsPerPixel,4); // bits per pixel is 4 as specified by VESA BIOS 2.0 specification - var_write(&minfo.MemoryModel,3); //ega planar mode - } - modeAttributes = 0x1b; // Color, graphics, no linear buffer - break; - case M_LIN8: - if (!allow_vesa_8bpp || !allow_res) return VESA_FAIL; - pageSize = mblock->sheight * cwidth; - adj = hack_lfb_xadjust; - var_write(&minfo.BytesPerScanLine,(uint16_t)cwidth); - if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ - var_write(&minfo.NumberOfPlanes,0x1); - var_write(&minfo.BitsPerPixel,8); - var_write(&minfo.MemoryModel,4); //packed pixel - } - modeAttributes = 0x1b; // Color, graphics - if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer - break; - case M_LIN15: - if (!allow_vesa_15bpp || !allow_res) return VESA_FAIL; - pageSize = mblock->sheight * cwidth*2; - adj = hack_lfb_xadjust * 2; - var_write(&minfo.BytesPerScanLine,(uint16_t)(cwidth*2)); - if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ - var_write(&minfo.NumberOfPlanes,0x1); - var_write(&minfo.BitsPerPixel,15); - var_write(&minfo.MemoryModel,6); //HiColour - var_write(&minfo.RedMaskSize,5); - var_write(&minfo.RedMaskPos,10); - var_write(&minfo.GreenMaskSize,5); - var_write(&minfo.GreenMaskPos,5); - var_write(&minfo.BlueMaskSize,5); - var_write(&minfo.BlueMaskPos,0); - var_write(&minfo.ReservedMaskSize,0x01); - var_write(&minfo.ReservedMaskPos,0x0f); - } - modeAttributes = 0x1b; // Color, graphics - if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer - break; - case M_LIN16: - if (!allow_vesa_16bpp || !allow_res) return VESA_FAIL; - pageSize = mblock->sheight * cwidth*2; - adj = hack_lfb_xadjust * 2; - var_write(&minfo.BytesPerScanLine,(uint16_t)(cwidth*2)); - if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ - var_write(&minfo.NumberOfPlanes,0x1); - var_write(&minfo.BitsPerPixel,16); - var_write(&minfo.MemoryModel,6); //HiColour - var_write(&minfo.RedMaskSize,5); - var_write(&minfo.RedMaskPos,11); - var_write(&minfo.GreenMaskSize,6); - var_write(&minfo.GreenMaskPos,5); - var_write(&minfo.BlueMaskSize,5); - var_write(&minfo.BlueMaskPos,0); - } - modeAttributes = 0x1b; // Color, graphics - if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer - break; - case M_LIN24: - if (!allow_vesa_24bpp || !allow_res) return VESA_FAIL; - if (mode >= 0x120 && !allow_explicit_vesa_24bpp) return VESA_FAIL; - pageSize = mblock->sheight * cwidth*3; - adj = hack_lfb_xadjust * 3; - var_write(&minfo.BytesPerScanLine,(uint16_t)(cwidth*3)); - if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ - var_write(&minfo.NumberOfPlanes,0x1); - var_write(&minfo.BitsPerPixel,24); - var_write(&minfo.MemoryModel,6); //HiColour - var_write(&minfo.RedMaskSize,8); - var_write(&minfo.RedMaskPos,0x10); - var_write(&minfo.GreenMaskSize,0x8); - var_write(&minfo.GreenMaskPos,0x8); - var_write(&minfo.BlueMaskSize,0x8); - var_write(&minfo.BlueMaskPos,0x0); - } - modeAttributes = 0x1b; // Color, graphics - if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer - break; - case M_LIN32: - if (!allow_vesa_32bpp || !allow_res) return VESA_FAIL; - pageSize = mblock->sheight * cwidth*4; - adj = hack_lfb_xadjust * 4; - var_write(&minfo.BytesPerScanLine,(uint16_t)(cwidth*4)); - if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ - var_write(&minfo.NumberOfPlanes,0x1); - var_write(&minfo.BitsPerPixel,32); - var_write(&minfo.MemoryModel,6); //HiColour - var_write(&minfo.RedMaskSize,8); - var_write(&minfo.RedMaskPos,0x10); - var_write(&minfo.GreenMaskSize,0x8); - var_write(&minfo.GreenMaskPos,0x8); - var_write(&minfo.BlueMaskSize,0x8); - var_write(&minfo.BlueMaskPos,0x0); - var_write(&minfo.ReservedMaskSize,0x8); - var_write(&minfo.ReservedMaskPos,0x18); - } - modeAttributes = 0x1b; // Color, graphics - if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer - break; - case M_TEXT: - if (!allow_vesa_tty) return VESA_FAIL; - adj = hack_lfb_xadjust / 8; - pageSize = mblock->sheight * cwidth/8; - var_write(&minfo.BytesPerScanLine, (uint16_t)(mblock->twidth * 2)); - if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ - var_write(&minfo.NumberOfPlanes,0x1); - var_write(&minfo.BitsPerPixel,4); - var_write(&minfo.MemoryModel,0); // text - } - modeAttributes = 0x0f; //Color, text, bios output - break; - default: - return VESA_FAIL; + case M_PACKED4: + if (!allow_vesa_4bpp_packed && !(ModeList_VGA[i].mode >= 0x202 && ModeList_VGA[i].mode <= 0x208)) return VESA_FAIL;//TODO: New option to disable + pageSize = mblock->sheight * cwidth/2; + adj = hack_lfb_xadjust / 2; + var_write(&minfo.BytesPerScanLine,(uint16_t)((((cwidth+15U)/8U)&(~1U))*4)); /* NTS: 4bpp requires even value due to VGA registers, round up */ + if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ + var_write(&minfo.NumberOfPlanes,0x1); + var_write(&minfo.BitsPerPixel,4); + var_write(&minfo.MemoryModel,4); //packed pixel + } + modeAttributes = 0x1b; // Color, graphics + if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer + if (mblock->special & _REQUIRE_LFB) modeAttributes |= 0x40; // windowed memory mode NOT available + break; + case M_CGA2: + if (svgaCard != SVGA_DOSBoxIG) return VESA_FAIL; + if (!allow_vesa_4bpp) return VESA_FAIL;//TODO + if (mblock->special & _REQUIRE_LFB) return VESA_FAIL; /* um, no */ + pageSize = mblock->sheight * (uint16_t)(((cwidth+15U)/8U)&(~1U)); + adj = hack_lfb_xadjust / 8; + var_write(&minfo.BytesPerScanLine,(uint16_t)(((cwidth+15U)/8U)&(~1U))); /* NTS: 4bpp requires even value due to VGA registers, round up */ + if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ + var_write(&minfo.NumberOfPlanes,0x1); + var_write(&minfo.BitsPerPixel,1); // bits per pixel + var_write(&minfo.MemoryModel,4); //packed pixel + } + modeAttributes = 0x1b; // Color, graphics + if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer + if (mblock->special & _REQUIRE_LFB) modeAttributes |= 0x40; // windowed memory mode NOT available + break; + case M_LIN4: + if (!allow_vesa_4bpp) return VESA_FAIL; + if (mblock->special & _REQUIRE_LFB) return VESA_FAIL; /* um, no */ + pageSize = mblock->sheight * (uint16_t)(((cwidth+15U)/8U)&(~1U)); + adj = hack_lfb_xadjust / 8; + var_write(&minfo.BytesPerScanLine,(uint16_t)(((cwidth+15U)/8U)&(~1U))); /* NTS: 4bpp requires even value due to VGA registers, round up */ + if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ + var_write(&minfo.NumberOfPlanes,0x4); + var_write(&minfo.BitsPerPixel,4); // bits per pixel is 4 as specified by VESA BIOS 2.0 specification + var_write(&minfo.MemoryModel,3); //ega planar mode + } + modeAttributes = 0x1b; // Color, graphics, no linear buffer + break; + case M_LIN8: + if (!allow_vesa_8bpp || !allow_res) return VESA_FAIL; + pageSize = mblock->sheight * cwidth; + adj = hack_lfb_xadjust; + var_write(&minfo.BytesPerScanLine,(uint16_t)cwidth); + if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ + var_write(&minfo.NumberOfPlanes,0x1); + var_write(&minfo.BitsPerPixel,8); + var_write(&minfo.MemoryModel,4); //packed pixel + } + modeAttributes = 0x1b; // Color, graphics + if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer + if (mblock->special & _REQUIRE_LFB) modeAttributes |= 0x40; // windowed memory mode NOT available + break; + case M_LIN15: + if (!allow_vesa_15bpp || !allow_res) return VESA_FAIL; + pageSize = mblock->sheight * cwidth*2; + adj = hack_lfb_xadjust * 2; + var_write(&minfo.BytesPerScanLine,(uint16_t)(cwidth*2)); + if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ + var_write(&minfo.NumberOfPlanes,0x1); + var_write(&minfo.BitsPerPixel,15); + var_write(&minfo.MemoryModel,6); //HiColour + var_write(&minfo.RedMaskSize,5); + var_write(&minfo.RedMaskPos,10); + var_write(&minfo.GreenMaskSize,5); + var_write(&minfo.GreenMaskPos,5); + var_write(&minfo.BlueMaskSize,5); + var_write(&minfo.BlueMaskPos,0); + var_write(&minfo.ReservedMaskSize,0x01); + var_write(&minfo.ReservedMaskPos,0x0f); + } + modeAttributes = 0x1b; // Color, graphics + if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer + if (mblock->special & _REQUIRE_LFB) modeAttributes |= 0x40; // windowed memory mode NOT available + break; + case M_LIN16: + if (!allow_vesa_16bpp || !allow_res) return VESA_FAIL; + pageSize = mblock->sheight * cwidth*2; + adj = hack_lfb_xadjust * 2; + var_write(&minfo.BytesPerScanLine,(uint16_t)(cwidth*2)); + if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ + var_write(&minfo.NumberOfPlanes,0x1); + var_write(&minfo.BitsPerPixel,16); + var_write(&minfo.MemoryModel,6); //HiColour + var_write(&minfo.RedMaskSize,5); + var_write(&minfo.RedMaskPos,11); + var_write(&minfo.GreenMaskSize,6); + var_write(&minfo.GreenMaskPos,5); + var_write(&minfo.BlueMaskSize,5); + var_write(&minfo.BlueMaskPos,0); + } + modeAttributes = 0x1b; // Color, graphics + if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer + if (mblock->special & _REQUIRE_LFB) modeAttributes |= 0x40; // windowed memory mode NOT available + break; + case M_LIN24: + if (!allow_vesa_24bpp || !allow_res) return VESA_FAIL; + if (mode >= 0x120 && !allow_explicit_vesa_24bpp) return VESA_FAIL; + pageSize = mblock->sheight * cwidth*3; + adj = hack_lfb_xadjust * 3; + var_write(&minfo.BytesPerScanLine,(uint16_t)(cwidth*3)); + if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ + var_write(&minfo.NumberOfPlanes,0x1); + var_write(&minfo.BitsPerPixel,24); + var_write(&minfo.MemoryModel,6); //HiColour + var_write(&minfo.RedMaskSize,8); + var_write(&minfo.RedMaskPos,0x10); + var_write(&minfo.GreenMaskSize,0x8); + var_write(&minfo.GreenMaskPos,0x8); + var_write(&minfo.BlueMaskSize,0x8); + var_write(&minfo.BlueMaskPos,0x0); + } + modeAttributes = 0x1b; // Color, graphics + if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer + if (mblock->special & _REQUIRE_LFB) modeAttributes |= 0x40; // windowed memory mode NOT available + break; + case M_LIN32: + if (!allow_vesa_32bpp || !allow_res) return VESA_FAIL; + pageSize = mblock->sheight * cwidth*4; + adj = hack_lfb_xadjust * 4; + var_write(&minfo.BytesPerScanLine,(uint16_t)(cwidth*4)); + if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ + var_write(&minfo.NumberOfPlanes,0x1); + var_write(&minfo.BitsPerPixel,32); + var_write(&minfo.MemoryModel,6); //HiColour + var_write(&minfo.RedMaskSize,8); + var_write(&minfo.RedMaskPos,0x10); + var_write(&minfo.GreenMaskSize,0x8); + var_write(&minfo.GreenMaskPos,0x8); + var_write(&minfo.BlueMaskSize,0x8); + var_write(&minfo.BlueMaskPos,0x0); + var_write(&minfo.ReservedMaskSize,0x8); + var_write(&minfo.ReservedMaskPos,0x18); + } + modeAttributes = 0x1b; // Color, graphics + if (!int10.vesa_nolfb && !int10.vesa_oldvbe) modeAttributes |= 0x80; // linear framebuffer + if (mblock->special & _REQUIRE_LFB) modeAttributes |= 0x40; // windowed memory mode NOT available + break; + case M_TEXT: + if (!allow_vesa_tty) return VESA_FAIL; + if (mblock->special & _REQUIRE_LFB) return VESA_FAIL; /* um, no */ + adj = hack_lfb_xadjust / 8; + pageSize = mblock->sheight * cwidth/8; + var_write(&minfo.BytesPerScanLine, (uint16_t)(mblock->twidth * 2)); + if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ + var_write(&minfo.NumberOfPlanes,0x1); + var_write(&minfo.BitsPerPixel,4); + var_write(&minfo.MemoryModel,0); // text + } + modeAttributes = 0x0f; //Color, text, bios output + break; + default: + return VESA_FAIL; } if (pageSize & 0xFFFFu) { // It is documented that many applications assume 64k-aligned page sizes @@ -438,9 +463,9 @@ uint8_t VESA_GetSVGAModeInformation(uint16_t mode,uint16_t seg,uint16_t off) { pageSize &= ~0xFFFFu; } Bitu pages = 0; - Bitu calcmemsize = GetReportedVideoMemorySize(); + Bitu calcmemsize = vga.mem.vbe_memsize; if (mblock->type == M_LIN4) calcmemsize /= 4u; /* 4bpp planar = 4 bytes per video memory byte */ - if (pageSize > calcmemsize || (mblock->special & _USER_DISABLED)) { + if (pageSize > calcmemsize || (mblock->special & (_USER_DISABLED|_BIOS_DISABLED))) { // mode not supported by current hardware configuration modeAttributes &= ~0x1; } else if (pageSize) { @@ -460,29 +485,40 @@ uint8_t VESA_GetSVGAModeInformation(uint16_t mode,uint16_t seg,uint16_t off) { var_write(&minfo.NumberOfImagePages, (uint8_t)pages); /* did not exist until VBE 1.1 */ var_write(&minfo.ModeAttributes, modeAttributes); - var_write(&minfo.WinAAttributes, 0x7); // Exists/readable/writable + if (mblock->special & _REQUIRE_LFB) { + var_write(&minfo.WinAAttributes, 0x0); // Not there + } + else { + var_write(&minfo.WinAAttributes, 0x7); // Exists/readable/writable + } if (mblock->type==M_TEXT) { - var_write(&minfo.WinGranularity,32); - var_write(&minfo.WinSize,32); - var_write(&minfo.WinASegment,(uint16_t)0xb800); + if (mblock->special & _REQUIRE_LFB) { + var_write(&minfo.WinGranularity,0); + var_write(&minfo.WinSize,0); + var_write(&minfo.WinASegment,(uint16_t)0); + } + else { + var_write(&minfo.WinGranularity,32); + var_write(&minfo.WinSize,32); + var_write(&minfo.WinASegment,(uint16_t)0xb800); + } if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ var_write(&minfo.XResolution,(uint16_t)mblock->twidth); var_write(&minfo.YResolution,(uint16_t)mblock->theight); } } else { - if (vbe_window_granularity > 0) + if (mblock->special & _REQUIRE_LFB) { + var_write(&minfo.WinGranularity,0); + var_write(&minfo.WinSize,0); + var_write(&minfo.WinASegment,(uint16_t)0); + } + else { var_write(&minfo.WinGranularity,vbe_window_granularity>>10u); /* field is in KB */ - else - var_write(&minfo.WinGranularity,64); - - if (vbe_window_size > 0) var_write(&minfo.WinSize,vbe_window_size>>10u); /* field is in KB */ - else - var_write(&minfo.WinSize,64); - - var_write(&minfo.WinASegment,(uint16_t)0xa000); + var_write(&minfo.WinASegment,(uint16_t)0xa000); + } if (!int10.vesa_oldvbe10) { /* optional in VBE 1.0 */ var_write(&minfo.XResolution,(uint16_t)mblock->swidth); @@ -520,6 +556,7 @@ uint8_t VESA_SetSVGAMode(uint16_t mode) { int10.vesa_setmode=mode&0x7fff; return VESA_SUCCESS; } + return VESA_FAIL; } @@ -541,22 +578,35 @@ uint8_t VESA_SetCPUWindow(uint8_t window,uint16_t address) { * full DX value. DOSBox SVN and forks achieve equivalent behavior * here by defining this function prototype with an 8-bit "address" * parameter. */ - address &= 0xFFu; + address &= vga.svga.bank_mask; - Bitu calcmemsize = GetReportedVideoMemorySize(); + Bitu calcmemsize = vga.mem.vbe_memsize; if (CurMode->type == M_LIN4) calcmemsize /= 4u; /* 4bpp planar = 4 bytes per video memory byte */ if ((!vesa_bank_switch_window_range_check) || (uint32_t)(address)*vga.svga.bank_size= 128 but only if emulating a full 64KB bank as normal */ + if (svgaCard == SVGA_DOSBoxIG) { + dosbox_int_push_save_state(); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_BANKWINDOW,(uint32_t)address * (uint32_t)vga.svga.bank_size); + dosbox_int_pop_save_state(); + VGA_SetupHandlers(); + } + else { + IO_Write(0x3d4,0x6a); + IO_Write(0x3d5,(uint8_t)address); /* NTS: in vga_s3.cpp this is a 7-bit field, wraparound will occur at address >= 128 but only if emulating a full 64KB bank as normal */ + } return VESA_SUCCESS; } else return VESA_FAIL; } uint8_t VESA_GetCPUWindow(uint8_t window,uint16_t & address) { if (window && !vesa_bank_switch_window_mirror) return VESA_FAIL; - IO_Write(0x3d4,0x6a); - address=IO_Read(0x3d5); + if (svgaCard == SVGA_DOSBoxIG) { + address=vga.svga.bank_read_full / vga.svga.bank_size; + } + else { + IO_Write(0x3d4,0x6a); + address=IO_Read(0x3d5); + } return VESA_SUCCESS; } @@ -608,8 +658,8 @@ uint8_t VESA_ScanLineLength(uint8_t subcall,uint16_t val, uint16_t & bytes,uint1 // offset register: virtual scanline length Bitu pixels_per_offset; Bitu bytes_per_offset = 8; - Bitu vmemsize = GetReportedVideoMemorySize(); - Bitu new_offset = vga.config.scan_len; + Bitu vmemsize = vga.mem.vbe_memsize; + Bitu new_offset = vga.dosboxig.svga ? vga.dosboxig.bytes_per_scanline : vga.config.scan_len; Bitu screen_height = CurMode->sheight; Bitu max_offset; @@ -617,40 +667,85 @@ uint8_t VESA_ScanLineLength(uint8_t subcall,uint16_t val, uint16_t & bytes,uint1 if (CurMode->special & _S3_POW2_STRIDE) return VESA_MODE_UNSUPPORTED; - switch (CurMode->type) { - case M_TEXT: - vmemsize = 0x8000; // we have only the 32kB window here - screen_height = CurMode->theight; - pixels_per_offset = 16; // two characters each 8 pixels wide - bytes_per_offset = 4; // 2 characters + 2 attributes - break; - case M_LIN4: - bytes_per_offset = 2; - pixels_per_offset = 16; - vmemsize /= 4u; /* because planar VGA */ - break; - case M_PACKED4: - pixels_per_offset = 16; - break; - case M_LIN8: - pixels_per_offset = 8; - break; - case M_LIN15: - case M_LIN16: - pixels_per_offset = 4; - break; - case M_LIN24: - pixels_per_offset = 8; - bytes_per_offset = 24; - break; - case M_LIN32: - pixels_per_offset = 2; - break; - default: - return VESA_MODE_UNSUPPORTED; + if (vga.dosboxig.svga) { + max_offset = 8192; + switch (CurMode->type) { + case M_LIN4: + case M_EGA: + bytes_per_offset = 1; + pixels_per_offset = 8; + vmemsize /= 4u; /* because planar VGA */ + max_offset /= 4u; + break; + case M_CGA2: + bytes_per_offset = 1; + pixels_per_offset = 8; + break; + case M_PACKED4: + bytes_per_offset = 1; + pixels_per_offset = 2; + break; + case M_LIN8: + bytes_per_offset = 1; + pixels_per_offset = 1; + break; + case M_LIN15: + case M_LIN16: + bytes_per_offset = 2; + pixels_per_offset = 1; + new_offset /= 2; + break; + case M_LIN24: + bytes_per_offset = 3; + pixels_per_offset = 1; + new_offset /= 3; + break; + case M_LIN32: + bytes_per_offset = 4; + pixels_per_offset = 1; + new_offset /= 4; + break; + default: + return VESA_MODE_UNSUPPORTED; + } + } + else { + switch (CurMode->type) { + case M_TEXT: + vmemsize = 0x8000; // we have only the 32kB window here + screen_height = CurMode->theight; + pixels_per_offset = 16; // two characters each 8 pixels wide + bytes_per_offset = 4; // 2 characters + 2 attributes + break; + case M_LIN4: + bytes_per_offset = 2; + pixels_per_offset = 16; + vmemsize /= 4u; /* because planar VGA */ + break; + case M_PACKED4: + pixels_per_offset = 16; + break; + case M_LIN8: + pixels_per_offset = 8; + break; + case M_LIN15: + case M_LIN16: + pixels_per_offset = 4; + break; + case M_LIN24: + pixels_per_offset = 8; + bytes_per_offset = 24; + break; + case M_LIN32: + pixels_per_offset = 2; + break; + default: + return VESA_MODE_UNSUPPORTED; + } + + max_offset = S3_MAX_OFFSET; } - max_offset = S3_MAX_OFFSET; if ((max_offset * bytes_per_offset * screen_height) > vmemsize) max_offset = vmemsize / (bytes_per_offset * screen_height); @@ -671,12 +766,19 @@ uint8_t VESA_ScanLineLength(uint8_t subcall,uint16_t val, uint16_t & bytes,uint1 // TODO: Add dosbox-x.conf option to control which behavior is emulated. if (new_offset > max_offset) new_offset = max_offset; - if (CurMode->type == M_LIN24) - vga.config.scan_len = new_offset * 3u; - else - vga.config.scan_len = new_offset; - - VGA_CheckScanLength(); + if (vga.dosboxig.svga) { + dosbox_int_push_save_state(); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_FMT_BYTESPERSCANLINE,(new_offset * bytes_per_offset) | DOSBOX_ID_REG_VGAIG_FMT_MASK); + dosbox_int_pop_save_state(); + } + else { + if (CurMode->type == M_LIN24) + vga.config.scan_len = new_offset * 3u; + else + vga.config.scan_len = new_offset; + + VGA_CheckScanLength(); + } break; case 0x01: // get current scanline length @@ -696,12 +798,19 @@ uint8_t VESA_ScanLineLength(uint8_t subcall,uint16_t val, uint16_t & bytes,uint1 // TODO: Add dosbox-x.conf option to control which behavior is emulated. if (new_offset > max_offset) new_offset = max_offset; - if (CurMode->type == M_LIN24) - vga.config.scan_len = new_offset * 3u; - else - vga.config.scan_len = new_offset; - - VGA_CheckScanLength(); + if (vga.dosboxig.svga) { + dosbox_int_push_save_state(); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_FMT_BYTESPERSCANLINE,(new_offset * bytes_per_offset) | DOSBOX_ID_REG_VGAIG_FMT_MASK); + dosbox_int_pop_save_state(); + } + else { + if (CurMode->type == M_LIN24) + vga.config.scan_len = new_offset * 3u; + else + vga.config.scan_len = new_offset; + + VGA_CheckScanLength(); + } break; case 0x03: // get maximum scan line length @@ -738,10 +847,6 @@ uint8_t VESA_SetDisplayStart(uint16_t x,uint16_t y,bool wait) { Bitu pixels_per_offset; Bitu panning_factor = 1; - /* this special hack is for the Windows 3.1 S3 driver in "640x480 (1MB) 16 million colors" mode which does no scan line or display offset calls at all */ - if (CurMode->special & _S3_POW2_STRIDE) - return VESA_MODE_UNSUPPORTED; - if (!wait) { if (vesa_set_display_vsync_wait > 0) wait = true; @@ -749,9 +854,57 @@ uint8_t VESA_SetDisplayStart(uint16_t x,uint16_t y,bool wait) { wait = int10.vesa_oldvbe; } + if (vga.dosboxig.svga) { + uint32_t offset = vga.dosboxig.bytes_per_scanline * y; + uint8_t hpel = 0; + + switch (CurMode->type) { + case M_LIN4: + case M_EGA: + case M_CGA2: + offset += x >> 3u; + hpel = x & 7u; + break; + case M_PACKED4: + offset += x >> 1u; + hpel = x & 1u; + break; + case M_LIN8: + offset += x; + break; + case M_LIN15: + case M_LIN16: + offset += x * 2u; + break; + case M_LIN24: + offset += x * 3u; + break; + case M_LIN32: + offset += x * 4u; + break; + default: + return VESA_MODE_UNSUPPORTED; + } + + dosbox_int_push_save_state(); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_DISPLAYOFFSET,offset); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_HVPELSCALE,hpel | 0xFFFFFF00u); + dosbox_int_pop_save_state(); + + // Wait for retrace if requested + if (wait) CALLBACK_RunRealFar(RealSeg(int10.rom.wait_retrace),RealOff(int10.rom.wait_retrace)); + + return VESA_SUCCESS; + } + + /* this special hack is for the Windows 3.1 S3 driver in "640x480 (1MB) 16 million colors" mode which does no scan line or display offset calls at all */ + if (CurMode->special & _S3_POW2_STRIDE) + return VESA_MODE_UNSUPPORTED; + switch (CurMode->type) { case M_TEXT: case M_LIN4: + case M_CGA2: case M_PACKED4: pixels_per_offset = 16; break; @@ -793,7 +946,7 @@ uint8_t VESA_SetDisplayStart(uint16_t x,uint16_t y,bool wait) { IO_Read(0x3da); // reset attribute flipflop IO_Write(0x3c0,0x13 | 0x20); // panning register, screen on IO_Write(0x3c0,(uint8_t)new_panning); - + // Wait for retrace if requested if (wait) CALLBACK_RunRealFar(RealSeg(int10.rom.wait_retrace),RealOff(int10.rom.wait_retrace)); @@ -804,6 +957,45 @@ uint8_t VESA_GetDisplayStart(uint16_t & x,uint16_t & y) { Bitu pixels_per_offset; Bitu panning_factor = 1; + if (vga.dosboxig.svga) { + if (vga.dosboxig.bytes_per_scanline) { + x = vga.dosboxig.display_offset % vga.dosboxig.bytes_per_scanline; + y = vga.dosboxig.display_offset / vga.dosboxig.bytes_per_scanline; + } + else { + x = y = 0; + } + + switch (CurMode->type) { + case M_LIN4: + case M_CGA2: + case M_EGA: + x *= 8u; + x += vga.dosboxig.hpel & 7u; + break; + case M_PACKED4: + x *= 2u; + x += vga.dosboxig.hpel & 1u; + break; + case M_LIN8: + break; + case M_LIN15: + case M_LIN16: + x /= 2u; + break; + case M_LIN24: + x /= 3u; + break; + case M_LIN32: + x /= 4u; + break; + default: + return VESA_MODE_UNSUPPORTED; + } + + return VESA_SUCCESS; + } + switch (CurMode->type) { case M_TEXT: pixels_per_offset = 16; @@ -832,6 +1024,7 @@ uint8_t VESA_GetDisplayStart(uint16_t & x,uint16_t & y) { IO_Read(0x3da); // reset attribute flipflop IO_Write(0x3c0,0x13 | 0x20); // panning register, screen on uint8_t panning = IO_Read(0x3c1); + if ((CurMode->type == M_TEXT) && (panning > 7)) panning = 0; /* FIXME: Why does this happen with VBETEST.EXE and more than 1MB of RAM? */ if (vga.config.scan_len == 0) { @@ -856,8 +1049,16 @@ static Bitu VESA_SetWindow(void) { } static Bitu VESA_PMSetWindow(void) { - IO_Write(0x3d4,0x6a); - IO_Write(0x3d5,reg_dl); + if (svgaCard == SVGA_DOSBoxIG) { + dosbox_int_push_save_state(); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_BANKWINDOW,(uint32_t)reg_dl * (uint32_t)vga.svga.bank_size); + dosbox_int_pop_save_state(); + VGA_SetupHandlers(); + } + else { + IO_Write(0x3d4,0x6a); + IO_Write(0x3d5,reg_dl); + } return CBRET_NONE; } static Bitu VESA_PMSetPalette(void) { @@ -874,7 +1075,48 @@ static Bitu VESA_PMSetPalette(void) { } static Bitu VESA_PMSetStart(void) { uint32_t start = (uint32_t)(((unsigned int)reg_dx << 16u) | (unsigned int)reg_cx); - vga.config.display_start = start; + + if (vga.dosboxig.svga) { + /* From the VBE 3.0 standard: + * + * "For the VBE 2.0 32-bit protected mode version, the value passed in DX:CX is the 32 bit offset in + * display memory, aligned to a plane boundary. For planar modes this means the value is the byte + * offset in memory, but in 8+ bits per pixel modes this is the offset from the start of memory divided + * by 4. Hence the value passed in is identical to the value that would be programmed into the + * standard VGA CRTC start address register." + * + * "For VBE 3.0 the application program may optionally pass the missing two bits of information in the + * top two bits of DX, to allow for pixel perfect horizontal panning" + * + * Ah, so VBE 2.0 defined "byte offset" in a planar manner, then in VBE 3.0 they realized they fucked up + * and were like "Ok, ok, here, you can put the missing 2 LSBs in the upper 2 MSBs of DX". Bleh. + * + * Anyway, to make this compatible with the DOSBox IG the start address needs to be multiplied by 4 and + * then add the upper 2 bits of DX to adjust. This is apparently true of any mode except 16-color planar. + * + * Duke Nukem 3D source code shows that indeed, if it calls the protected mode display start function, + * it passes N >> 2, not N, for this reason. If we want the DOSBox IG to display Duke Nukem 3D properly, + * we have to compensate for this or else you're going to be fighting monsters while your screen looks + * like a TV set with a rapidly rolling picture. + * + * 16-color planar modes are already 1:1 byte to display memory and do not need this compensation. + */ + + if (!(CurMode->type == M_LIN4 || CurMode->type == M_EGA)) { + if (0/*TODO: If VBE 3.0 emulation*/) + start = (start << 2ul) + (start >> 30ul); + else + start <<= 2ul; + } + + dosbox_int_push_save_state(); + dosbox_integration_trigger_write_direct32(DOSBOX_ID_REG_VGAIG_DISPLAYOFFSET,start); + dosbox_int_pop_save_state(); + } + else { + vga.config.display_start = start; + } + return CBRET_NONE; } @@ -904,6 +1146,10 @@ Bitu INT10_WriteVESAModeList(Bitu max_modes) { else if (ModeList_VGA[i].special & _DO_NOT_LIST) { /* ignore */ } + /* only DOSBox IG supports 1bpp modes */ + else if (ModeList_VGA[i].type == M_CGA2 && svgaCard != SVGA_DOSBoxIG) { + /* ignore */ + } else { /* If there is no "accepts mode" then accept. * @@ -931,11 +1177,11 @@ Bitu INT10_WriteVESAModeList(Bitu max_modes) { bool allow4 = allow_unusual_vesa_modes || !(ModeList_VGA[i].special & _UNUSUAL_MODE); - bool allow5 = /* either user modified or within the limits of the render scaler architecture */ - (ModeList_VGA[i].special & _USER_MODIFIED) || - (ModeList_VGA[i].swidth <= SCALER_MAXWIDTH && ModeList_VGA[i].sheight <= SCALER_MAXHEIGHT); + bool allow5 = + ModeList_VGA[i].swidth <= vga.max_svga_width && ModeList_VGA[i].sheight <= vga.max_svga_height && + ModeList_VGA[i].vtotal <= vga.max_svga_height; bool allow_res = allow1 && allow2 && allow3 && allow4 && allow5; - bool allow_s3_packed4 = (ModeList_VGA[i].mode >= 0x202 && ModeList_VGA[i].mode <= 0x208); + bool allow_s3_packed4 = (ModeList_VGA[i].mode >= 0x202 && ModeList_VGA[i].mode <= 0x208 && ModeList_VGA[i].type == M_PACKED4); switch (ModeList_VGA[i].type) { case M_LIN32: canuse_mode=allow_vesa_32bpp && allow_res; break; @@ -944,6 +1190,7 @@ Bitu INT10_WriteVESAModeList(Bitu max_modes) { case M_LIN15: canuse_mode=allow_vesa_15bpp && allow_res; break; case M_LIN8: canuse_mode=allow_vesa_8bpp && allow_res; break; case M_LIN4: canuse_mode=allow_vesa_4bpp && allow_res; break; + case M_CGA2: canuse_mode=allow_vesa_4bpp && allow_res; break;//TODO case M_PACKED4: canuse_mode=(allow_vesa_4bpp_packed || allow_s3_packed4) && allow_res; break; case M_TEXT: canuse_mode=allow_vesa_tty && allow_res; break; default: break; @@ -964,7 +1211,6 @@ Bitu INT10_WriteVESAModeList(Bitu max_modes) { if (canuse_mode && vesa_mode_height_cap > 0 && (unsigned int)ModeList_VGA[i].sheight > (unsigned int)vesa_mode_height_cap) canuse_mode = false; } - if (ModeList_VGA[i].mode>=0x100 && canuse_mode) { if ((!int10.vesa_oldvbe) || (ModeList_VGA[i].mode<0x120)) { phys_writew(PhysMake((uint16_t)0xc000,(uint16_t)mode_wptr),(uint16_t)ModeList_VGA[i].mode); @@ -993,18 +1239,64 @@ void INT10_SetupVESA(void) { if (machine != MCH_VGA) return; if (svgaCard == SVGA_None) return; + /* S3: The hardware register for SVGA bank can only count up to 128. + * For 64KB granularity that allows up to (128 * 64KB) = 8MB. + * Modes too large to fit in that limit need to be marked with _REQUIRE_LFB */ + if (svgaCard == SVGA_S3Trio) { + for (VideoModeBlock* modelist=ModeList_VGA;modelist->mode != 0xFFFFu;modelist++) { + if (modelist->mode >= 0x100) { + Bitu sz = VideoModeMemSize(modelist,modelist->mode); + if (modelist->type == M_LIN4 || modelist->type == M_EGA) sz /= 4u; + + /* convert size to banks */ + Bitu banks = sz / (Bitu)vbe_window_granularity; + + /* S3 hardware can only count up to 128 banks, therefore if the mode + * is large enough, it should be restricted only to DOS programs that + * support the linear framebuffer. + * + * This is not foolproof. DOS programs that intend to page flip with + * multiple pages of video memory are going to have problems regardless + * if they still use bank switching. */ + if (banks > 128) modelist->special |= _REQUIRE_LFB; + } + } + } + + int10.rom.pmode_interface = 0; + int10.rom.pmode_interface_window = 0; + int10.rom.pmode_interface_start = 0; + int10.rom.pmode_interface_palette = 0; + int10.rom.pmode_interface_size = 0; + + /* default 8-bit mask, because of legacy code and Demoscene bugs */ + vga.svga.bank_mask = 0xFFu; + + /* if there are enough SVGA banks to need more than 256, then allow the full 16 bits */ + { + unsigned int banks = vga.mem.vbe_memsize; + banks /= vbe_window_granularity; + if (banks > 256u) vga.svga.bank_mask = 0xFFFFu; + + LOG(LOG_MISC,LOG_DEBUG)("VESA total banks=%u bank mask=0x%x",banks,vga.svga.bank_mask); + } + /* Put the mode list somewhere in memory */ - int10.rom.vesa_alloc_modes = (uint16_t)(~0u); - int10.rom.vesa_modes = RealMake(0xc000,int10.rom.used); - modecount = INT10_WriteVESAModeList(0xFFFF/*max mode count*/); - int10.rom.vesa_alloc_modes = (uint16_t)modecount; - int10.rom.used += (uint16_t)(modecount * 2u); + int10.rom.vesa_alloc_modes = (uint16_t)(~0u); + int10.rom.vesa_modes = RealMake(0xc000,int10.rom.used); + modecount = INT10_WriteVESAModeList(0xFFFF/*max mode count*/); + int10.rom.vesa_alloc_modes = (uint16_t)modecount; + int10.rom.used += (uint16_t)(modecount * 2u); phys_writew(PhysMake(0xc000,int10.rom.used),0xffff); int10.rom.used+=2; int10.rom.oemstring=RealMake(0xc000,int10.rom.used); - Bitu len=(Bitu)(strlen(string_oem)+1); - for (i=0;i= 0x40 && chr <= 0x7e) || (del_flag && chr == 0x7f) || (chr >= 0x80 && chr <= 0xfc); } + +#ifdef __cplusplus +extern "C" { +#endif + bool tfd_isKanji1(uint8_t chr) { + return isKanji1(chr); + } + bool tfd_isKanji2(uint8_t chr) { + return isKanji2(chr); + } +#ifdef __cplusplus +} +#endif + + static inline int Hex2Int(const char *p) { if (*p <= '9') @@ -645,7 +660,8 @@ bool LoadFontxFile(const char *fname, int height, bool dbcs) { if(*fname=='\0') return false; FILE * mfile=fopen(fname,"rb"); std::string config_path, res_path, exepath=GetDOSBoxXPath(); - Cross::GetPlatformConfigDir(config_path), Cross::GetPlatformResDir(res_path); + config_path = Cross::GetPlatformConfigDir(); + res_path = Cross::GetPlatformResDir(); if (!mfile && exepath.size()) mfile=fopen((exepath + fname).c_str(),"rb"); if (!mfile && config_path.size()) mfile=fopen((config_path + fname).c_str(),"rb"); if (!mfile && res_path.size()) mfile=fopen((res_path + fname).c_str(),"rb"); @@ -1181,7 +1197,8 @@ uint8_t *GetDbcsFont(Bitu code) if (!getwqy16) { getwqy16=true; std::string config_path, res_path, exepath=GetDOSBoxXPath(), fname="wqy_12pt.bdf"; - Cross::GetPlatformConfigDir(config_path), Cross::GetPlatformResDir(res_path); + config_path = Cross::GetPlatformConfigDir(); + res_path = Cross::GetPlatformResDir(); FILE * mfile=fopen(fname.c_str(),"rb"); if (!mfile && exepath.size()) mfile=fopen((exepath + fname).c_str(),"rb"); if (!mfile && config_path.size()) mfile=fopen((config_path + fname).c_str(),"rb"); @@ -1279,7 +1296,8 @@ uint8_t *GetDbcs14Font(Bitu code, bool &is14) if (!getwqy14) { getwqy14=true; std::string config_path, res_path, exepath=GetDOSBoxXPath(), fname="wqy_11pt.bdf"; - Cross::GetPlatformConfigDir(config_path), Cross::GetPlatformResDir(res_path); + config_path = Cross::GetPlatformConfigDir(); + res_path = Cross::GetPlatformResDir(); FILE * mfile=fopen(fname.c_str(),"rb"); if (!mfile && exepath.size()) mfile=fopen((exepath + fname).c_str(),"rb"); if (!mfile && config_path.size()) mfile=fopen((config_path + fname).c_str(),"rb"); @@ -2065,7 +2083,7 @@ uint8_t GetKanjiAttr(Bitu x, Bitu y) { Bitu cx, pos; uint8_t flag; - uint16_t seg = (IS_JEGA_ARCH) ? 0xb800 : jtext_seg; + uint16_t seg = IS_DOSV ? jtext_seg : 0xb800; pos = y * real_readw(BIOSMEM_SEG, BIOSMEM_NB_COLS) * 2; cx = 0; flag = 0x00; diff --git a/src/ints/mouse.cpp b/src/ints/mouse.cpp index c8ba66b9c62..05d37c57269 100644 --- a/src/ints/mouse.cpp +++ b/src/ints/mouse.cpp @@ -190,7 +190,6 @@ static uint16_t defaultCursorMaskNEC[CURSORY*2] = { static uint16_t userdefScreenMask[CURSORY]; static uint16_t userdefCursorMask[CURSORY*2]; - double clamp(double d, double min, double max) { const double t = d < min ? min : d; return t > max ? max : t; @@ -349,6 +348,23 @@ void ChangeMouseReportRate(unsigned int new_rate) { } } +int KEYBOARD_PS2REPORT_Active(); + +bool MouseInterruptEnabled(void) { + if (!IS_PC98_ARCH && KEYBOARD_AUX_Active()) + return true; + if (KEYBOARD_PS2REPORT_Active()) // FIXME: INT 15h needs to issue keyboard command "enable AUX" + return true; + if (mouse.polled) + return true; + if (mouse.sub_mask) + return true; + if (!mouse.hidden) + return true; + + return false; +} + void MOUSE_Limit_Events(Bitu /*val*/) { mouse.timer_in_progress = false; @@ -363,7 +379,7 @@ void MOUSE_Limit_Events(Bitu /*val*/) { PIC_AddEvent(MOUSE_Limit_Events,MOUSE_DELAY); if (MOUSE_IRQ != 0) { - if (!IS_PC98_ARCH) + if (!IS_PC98_ARCH && MouseInterruptEnabled()) PIC_ActivateIRQ(MOUSE_IRQ); } } @@ -389,7 +405,7 @@ void Mouse_AddEvent(uint8_t type) { PIC_AddEvent(MOUSE_Limit_Events,MOUSE_DELAY); if (MOUSE_IRQ != 0) { - if (!IS_PC98_ARCH) + if (!IS_PC98_ARCH && MouseInterruptEnabled()) PIC_ActivateIRQ(MOUSE_IRQ); } } @@ -406,7 +422,15 @@ void RestoreCursorBackgroundText() { if (mouse.hidden || mouse.inhibit_draw) return; if (mouse.background) { - WriteChar((uint16_t)mouse.backposx,(uint16_t)mouse.backposy,real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE),mouse.backData[0],mouse.backData[1],true); + if(mouse.backData[4] == 1) { + WriteChar((uint16_t)mouse.backposx,mouse.backposy,real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE),mouse.backData[0],mouse.backData[1],true); + WriteChar((uint16_t)(mouse.backposx + 1),(uint16_t)mouse.backposy,real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE),mouse.backData[2],mouse.backData[3],true); + } else if(mouse.backData[4] == 2) { + WriteChar((uint16_t)(mouse.backposx - 1),(uint16_t)mouse.backposy,real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE),mouse.backData[2], mouse.backData[3],true); + WriteChar((uint16_t)mouse.backposx,(uint16_t)mouse.backposy,real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE),mouse.backData[0], mouse.backData[1],true); + } else { + WriteChar((uint16_t)mouse.backposx,(uint16_t)mouse.backposy,real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE),mouse.backData[0],mouse.backData[1],true); + } mouse.background = false; } } @@ -432,12 +456,29 @@ void DrawCursorText() { if (mouse.cursorType == 0 || mouse.cursorType == 2/*Microsoft Word 5.5 even in text mode*/) { uint16_t result; ReadCharAttr((uint16_t)mouse.backposx,(uint16_t)mouse.backposy,page,&result); + mouse.backData[4] = DOSV_CheckCJKVideoMode() ? GetKanjiAttr(mouse.backposx, mouse.backposy) : 0; mouse.backData[0] = (uint8_t)(result & 0xFF); mouse.backData[1] = (uint8_t)(result>>8); mouse.background = true; // Write Cursor result = (result & mouse.textAndMask) ^ mouse.textXorMask; - WriteChar((uint16_t)mouse.backposx,(uint16_t)mouse.backposy,page,(uint8_t)(result&0xFF),(uint8_t)(result>>8),true); + if(mouse.backData[4] == 1) { + uint16_t result2; + ReadCharAttr(mouse.backposx + 1, mouse.backposy, page, &result2); + mouse.backData[2] = (uint8_t)(result2 & 0xFF); + mouse.backData[3] = (uint8_t)(result2>>8); + WriteChar((uint16_t)mouse.backposx,mouse.backposy,page,(uint8_t)(result&0xFF),(uint8_t)(result>>8),true); + WriteChar((uint16_t)(mouse.backposx+1),mouse.backposy,page,(uint8_t)(result2&0xFF),(uint8_t)(result>>8),true); + } else if(mouse.backData[4] == 2) { + uint16_t result2; + ReadCharAttr(mouse.backposx - 1, mouse.backposy, page, &result2); + mouse.backData[2] = (uint8_t)(result2 & 0xFF); + mouse.backData[3] = (uint8_t)(result2>>8); + WriteChar((uint16_t)(mouse.backposx-1),(uint16_t)mouse.backposy,page,(uint8_t)(result2&0xFF),(uint8_t)(result>>8),true); + WriteChar((uint16_t)mouse.backposx,(uint16_t)mouse.backposy,page,(uint8_t)(result&0xFF),(uint8_t)(result>>8),true); + } else { + WriteChar((uint16_t)mouse.backposx,(uint16_t)mouse.backposy,page,(uint8_t)(result&0xFF),(uint8_t)(result>>8),true); + } } else { uint16_t address=page * real_readw(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE); address += (mouse.backposy * real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS) + mouse.backposx) * 2; @@ -607,7 +648,7 @@ void DrawCursor() { } INT10_SetCurMode(); // In Textmode ? - if (CurMode->type==M_TEXT) { + if (CurMode->type==M_TEXT || (IS_DOSV && DOSV_CheckCJKVideoMode())) { DrawCursorText(); return; } @@ -737,6 +778,10 @@ static bool AllowINT33RMAccess() { return false; } +#if C_DEBUG +bool IsDebuggerActive(void); +#endif + /* FIXME: Re-test this code */ void Mouse_CursorMoved(float xrel,float yrel,float x,float y,bool emulate) { @@ -744,6 +789,12 @@ void Mouse_CursorMoved(float xrel,float yrel,float x,float y,bool emulate) { float dx = xrel * mouse.pixelPerMickey_x; float dy = (Mouse_Vertical?-yrel:yrel) * mouse.pixelPerMickey_y; +#if C_DEBUG + /* if debugging the code don't let mouse movement over the emulator window cause problems */ + if (IsDebuggerActive()) + return; +#endif + if (!IS_PC98_ARCH && KEYBOARD_AUX_Active()) { KEYBOARD_AUX_Event(xrel,yrel,mouse.buttons,mouse.scrollwheel); mouse.scrollwheel = 0; @@ -1368,6 +1419,14 @@ void Mouse_AfterNewVideoMode(bool setmode) { mouse.first_range_setx = true; mouse.first_range_sety = true; break; + case 0x70: + if(IS_DOSV && DOSV_CheckCJKVideoMode()) { + mouse.gran_x = (int16_t)0xfff8; + mouse.gran_y = (int16_t)0xfff8; + mouse.max_y = (real_readb(BIOSMEM_SEG, BIOSMEM_NB_ROWS) + 1) * 8 - 1; + mouse.max_x = real_readw(BIOSMEM_SEG, BIOSMEM_NB_COLS) * 8 - 1; + break; + } default: LOG(LOG_MOUSE,LOG_ERROR)("Unhandled videomode %X on reset",mode); mouse.inhibit_draw = true; @@ -1484,6 +1543,7 @@ static Bitu INT33_Handler(void) { switch (reg_ax) { case 0x00: /* MS MOUSE - RESET DRIVER AND READ STATUS */ Mouse_ResetHardware(); + mouse.polled = false; goto software_reset; case 0x01: /* MS MOUSE v1.0+ - SHOW MOUSE CURSOR */ if (mouse.hidden) mouse.hidden--; @@ -1511,6 +1571,7 @@ static Bitu INT33_Handler(void) { } reg_cx=POS_X; reg_dx=POS_Y; + mouse.polled = true; mouse.first_range_setx = false; mouse.first_range_sety = false; if (en_int33_hide_if_polling) int33_last_poll = PIC_FullIndex(); @@ -1556,6 +1617,7 @@ static Bitu INT33_Handler(void) { } if (en_int33_hide_if_polling) int33_last_poll = PIC_FullIndex(); } + mouse.polled = true; Mouse_Used(); break; case 0x06: /* MS MOUSE v1.0+ - RETURN BUTTON RELEASE DATA */ @@ -1585,6 +1647,7 @@ static Bitu INT33_Handler(void) { } if (en_int33_hide_if_polling) int33_last_poll = PIC_FullIndex(); } + mouse.polled = true; Mouse_Used(); break; case 0x07: /* MS MOUSE v1.0+ - DEFINE HORIZONTAL CURSOR RANGE */ @@ -1756,6 +1819,7 @@ static Bitu INT33_Handler(void) { DrawCursor(); break; case 0x0b: /* MS MOUSE v1.0+ - READ MOTION COUNTERS */ + mouse.polled = true; Mouse_Read_Motion_Data(); break; case 0x0c: /* MS MOUSE v1.0+ - DEFINE INTERRUPT SUBROUTINE PARAMETERS */ @@ -1959,6 +2023,7 @@ static Bitu INT33_Handler(void) { reg_dx = (uint16_t)mouse.max_y; break; case 0x27: /* MS MOUSE v7.01+ - GET SCREEN/CURSOR MASKS AND MICKEY COUNTS */ + mouse.polled = true; reg_ax = mouse.textAndMask; reg_bx = mouse.textXorMask; Mouse_Read_Motion_Data(); @@ -2382,6 +2447,7 @@ void MOUSE_Startup(Section *sec) { mouse.timer_in_progress = false; mouse.mode = 0xFF; //Non existing mode mouse.scrollwheel = 0; + mouse.polled = 0; mouse.sub_mask=0; mouse.sub_seg=0x6362; // magic value diff --git a/src/ints/qcow2_disk.cpp b/src/ints/qcow2_disk.cpp index f956602f5f3..c72e1f52016 100644 --- a/src/ints/qcow2_disk.cpp +++ b/src/ints/qcow2_disk.cpp @@ -23,6 +23,13 @@ # pragma warning(disable:4244) /* const fmath::local::uint64_t to double possible loss of data */ #endif +#if defined(__linux__) && !defined(__GLIBC__) +// msul libc does not need 64 suffix to work with files > 2 GiB +#define fopen64 fopen +#define fseeko64 fseeko +#define ftello64 ftello +#endif + using namespace std; @@ -69,7 +76,7 @@ using namespace std; if (header.backing_file_offset != 0 && header.backing_file_size != 0){ char* backing_file_name = new char[header.backing_file_size + 1]; backing_file_name[header.backing_file_size] = 0; - fseeko64(file, (off_t)header.backing_file_offset, SEEK_SET); + fseeko64(file, header.backing_file_offset, SEEK_SET); size_t readResult = fread(backing_file_name, header.backing_file_size, 1, file); if (readResult != 1) { LOG(LOG_IO, LOG_ERROR) ("Reading error in QCow2Image constructor\n"); @@ -270,7 +277,7 @@ using namespace std; //Read data of arbitrary length that is present in the image file. uint8_t QCow2Image::read_allocated_data(uint64_t file_offset, uint8_t* data, uint64_t data_size) { - if (0 != fseeko64(file, (off_t)file_offset, SEEK_SET)){ + if (0 != fseeko64(file, file_offset, SEEK_SET)){ return 0x05; } if (1 != fread(data, data_size, 1, file)){ @@ -386,7 +393,7 @@ using namespace std; //Write data of arbitrary length to the image file. uint8_t QCow2Image::write_data(uint64_t file_offset, const uint8_t* data, uint64_t data_size){ - if (0 != fseeko64(file, (off_t)file_offset, SEEK_SET)){ + if (0 != fseeko64(file, file_offset, SEEK_SET)){ return 0x05; } if (1 != fwrite(data, data_size, 1, file)){ @@ -433,7 +440,7 @@ using namespace std; //Public Constructor. - QCow2Disk::QCow2Disk(QCow2Image::QCow2Header& qcow2Header, FILE *qcow2File, const char *imgName, uint32_t imgSizeK, uint32_t sectorSizeBytes, bool isHardDisk) : imageDisk(qcow2File, (const char*)imgName, imgSizeK, isHardDisk), qcowImage(qcow2Header, qcow2File, (const char*) imgName, sectorSizeBytes){ + QCow2Disk::QCow2Disk(QCow2Image::QCow2Header& qcow2Header, FILE *qcow2File, const char *imgName, uint64_t imgSize, uint32_t sectorSizeBytes, bool isHardDisk) : imageDisk(qcow2File, (const char*)imgName, imgSize, isHardDisk), qcowImage(qcow2Header, qcow2File, (const char*) imgName, sectorSizeBytes){ } diff --git a/src/ints/xms.cpp b/src/ints/xms.cpp index 0f5fcfe1a38..833991fd05a 100644 --- a/src/ints/xms.cpp +++ b/src/ints/xms.cpp @@ -97,6 +97,9 @@ bool xms_hma_alloc_non_dos_kernel_control = true; bool xms_memmove_flatrealmode = false; bool xms_init_flatrealmode = false; +#if !defined(OSFREE) +bool xms_debug_log_memmove = false; +#endif struct XMS_Block { Bitu size; @@ -156,9 +159,13 @@ Bitu XMS_GetEnabledA20(void) { } static RealPt xms_callback; +#if !defined(OSFREE) static bool umb_available = false; static bool umb_init = false; uint16_t desired_ems_segment = 0; +#else +static constexpr bool umb_available = false; +#endif static XMS_Block xms_handles[XMS_HANDLES_MAX]; @@ -200,6 +207,7 @@ Bitu XMS_QueryFreeMemory(uint32_t& largestFree, uint32_t& totalFree) { return 0; } +#if !defined(OSFREE) void XMS_ZeroAllocation(MemHandle mem,unsigned int pages) { PhysPt address; @@ -213,9 +221,12 @@ void XMS_ZeroAllocation(MemHandle mem,unsigned int pages) { pages--; } } +#endif +#if !defined(OSFREE) extern bool enable_a20_on_windows_init; extern bool dbg_zero_on_xms_allocmem; +#endif Bitu XMS_AllocateMemory(Bitu size, uint16_t& handle) { // size = kb /* Find free handle */ @@ -228,11 +239,15 @@ Bitu XMS_AllocateMemory(Bitu size, uint16_t& handle) { // size = kb Bitu pages=(size/4) + ((size & 3) ? 1 : 0); mem=MEM_AllocatePages(pages,true); if (!mem) return XMS_OUT_OF_SPACE; +#if !defined(OSFREE) if (dbg_zero_on_xms_allocmem) XMS_ZeroAllocation(mem,(unsigned int)pages); +#endif } else { mem=MEM_GetNextFreePage(); if (mem==0) LOG(LOG_MISC,LOG_DEBUG)("XMS:Allocate zero pages with no memory left"); // Windows 3.1 triggers this surprisingly often! +#if !defined(OSFREE) if (mem != 0 && dbg_zero_on_xms_allocmem) XMS_ZeroAllocation(mem,1); +#endif } xms_handles[index].free=false; xms_handles[index].mem=mem; @@ -252,7 +267,7 @@ Bitu XMS_FreeMemory(Bitu handle) { return 0; } -void XMS_InitFlatRealMode(void); +bool XMS_InitFlatRealMode(void); Bitu XMS_MoveMemory(PhysPt bpt) { /* Read the block with mem_read's */ @@ -306,7 +321,12 @@ Bitu XMS_MoveMemory(PhysPt bpt) { * extend past the end of the 8086-accessible conventional memory area. */ if ((destpt+length) > 0x10FFF0u) return XMS_INVALID_LENGTH; } -// LOG_MSG("XMS move src %X dest %X length %X",srcpt,destpt,length); + +#if !defined(OSFREE) + if (xms_debug_log_memmove) { + LOG_MSG("XMS move src %X dest %X length %X",(unsigned int)srcpt,(unsigned int)destpt,(unsigned int)length); + } +#endif /* we must enable the A20 gate during this copy. * DOSBox-X masks the A20 line and this will only cause corruption otherwise. */ @@ -320,9 +340,8 @@ Bitu XMS_MoveMemory(PhysPt bpt) { // HIMEM.SYS on 386 and higher is said to use "flat real mode" to copy extended memory. // That means if a program calls this function, it implicitly sets up flat real mode. // It seems some demoscene stuff in the 1992-1994 timeframe assume this case. - if (xms_memmove_flatrealmode) { + if (xms_memmove_flatrealmode && XMS_InitFlatRealMode()) { LOG(LOG_MISC,LOG_DEBUG)("XMS: Memory move/copy is enabling flat real mode"); - XMS_InitFlatRealMode(); } mem_memcpy(destpt,srcpt,length); @@ -678,7 +697,9 @@ Bitu XMS_Handler(void) { bool xms_init = false; +#if !defined(OSFREE) bool keep_umb_on_boot; +#endif extern Bitu VGA_BIOS_SEG; extern Bitu VGA_BIOS_SEG_END; @@ -692,13 +713,16 @@ bool XMS_HMA_EXISTS() { return XMS_IS_ACTIVE() && xms_hma_exists; } +#if !defined(OSFREE) Bitu GetEMSType(const Section_prop* section); +#endif void DOS_GetMemory_Choose(); void ROMBIOS_FreeUnusedMinToLoc(Bitu phys); bool MEM_unmap_physmem(Bitu start,Bitu end); Bitu ROMBIOS_MinAllocatedLoc(); +#if !defined(OSFREE) void RemoveUMBBlock() { /* FIXME: Um... why is umb_available == false even when set to true below? */ if (umb_init) { @@ -707,7 +731,9 @@ void RemoveUMBBlock() { umb_init = false; } } +#endif +#if !defined(OSFREE) void Update_Get_Desired_Segment(void) { const Section_prop * section=static_cast(control->GetSection("dos")); @@ -723,6 +749,7 @@ void Update_Get_Desired_Segment(void) { desired_ems_segment = IS_PC98_ARCH ? 0xD000 : 0xE000; } } +#endif class XMS: public Module_base { private: @@ -730,18 +757,29 @@ class XMS: public Module_base { public: XMS(Section* configuration):Module_base(configuration){ Section_prop * section=static_cast(configuration); +#if !defined(OSFREE) umb_available=false; +#endif xms_global_enable = false; xms_local_enable_count = 0; +#if !defined(OSFREE) + xms_debug_log_memmove = false; xms_memmove_flatrealmode = false; xms_init_flatrealmode = false; if (!section->Get_bool("xms")) return; + xms_debug_log_memmove = section->Get_bool("xms log memmove"); xms_memmove_flatrealmode = section->Get_bool("xms memmove causes flat real mode"); xms_init_flatrealmode = section->Get_bool("xms init causes flat real mode"); +#else + /* OSFREE: MS-DOS is not supposed to be there, you do NOT get to control these options! That includes the ability to turn off XMS! */ + xms_memmove_flatrealmode = true; + xms_init_flatrealmode = true; +#endif +#if !defined(OSFREE) XMS_HANDLES = (unsigned int)(section->Get_int("xms handles")); if (XMS_HANDLES == 0) XMS_HANDLES = XMS_HANDLES_DEFAULT; @@ -751,6 +789,10 @@ class XMS: public Module_base { XMS_HANDLES = XMS_HANDLES_MAX; LOG_MSG("XMS: %u handles allocated for use by the DOS environment",XMS_HANDLES); +#else + /* OSFREE: MS-DOS is not supposed to be there, you do NOT get to control these options! */ + XMS_HANDLES = XMS_HANDLES_DEFAULT; +#endif /* NTS: Disable XMS emulation if CPU type is less than a 286, because extended memory did not * exist until the CPU had enough address lines to read past the 1MB mark. @@ -781,21 +823,30 @@ class XMS: public Module_base { xms_init = true; +#if !defined(OSFREE) xms_hma_exists = section->Get_bool("hma"); xms_hma_minimum_alloc = (unsigned int)section->Get_int("hma minimum allocation"); xms_hma_alloc_non_dos_kernel_control = section->Get_bool("hma allow reservation"); if (xms_hma_minimum_alloc > 0xFFF0U) xms_hma_minimum_alloc = 0xFFF0U; +#else + /* OSFREE: MS-DOS is not supposed to be there, you do NOT get to control these options! */ + xms_hma_exists = true; + xms_hma_minimum_alloc = 0xFFF0U; + xms_hma_alloc_non_dos_kernel_control = false; +#endif Bitu i; BIOS_ZeroExtendedSize(true); DOS_AddMultiplexHandler(multiplex_xms); +#if !defined(OSFREE) enable_a20_on_windows_init = section->Get_bool("enable a20 on windows init"); dbg_zero_on_xms_allocmem = section->Get_bool("zero memory on xms memory allocation"); if (dbg_zero_on_xms_allocmem) { LOG_MSG("Debug option enabled: XMS memory allocation will always clear memory block before returning\n"); } +#endif /* place hookable callback in writable memory area */ xms_callback=RealMake(DOS_GetMemory(0x1,"xms_callback")-1,0x10); @@ -816,27 +867,36 @@ class XMS: public Module_base { /* Disable the 0 handle */ xms_handles[0].free = false; +#if !defined(OSFREE) /* Set up UMB chain */ keep_umb_on_boot=section->Get_bool("keep umb on boot"); umb_available=section->Get_bool("umb"); first_umb_seg=section->Get_hex("umb start"); first_umb_size=section->Get_hex("umb end"); +#endif +#if !defined(OSFREE) Update_Get_Desired_Segment(); +#endif +#if !defined(OSFREE) /* This code will mess up the MCB chain in PCjr mode if umb=true */ if (umb_available && machine == MCH_PCJR) { LOG(LOG_MISC,LOG_DEBUG)("UMB emulation is incompatible with PCjr emulation, disabling UMBs"); umb_available = false; } +#endif +#if !defined(OSFREE) LOG(LOG_MISC,LOG_DEBUG)("Desired EMS segment 0x%04x",desired_ems_segment); +#endif DOS_GetMemory_Choose(); // Sanity check if (rombios_minimum_location == 0) E_Exit("Uninitialized ROM BIOS base"); +#if !defined(OSFREE) if (first_umb_seg == 0) { first_umb_seg = DOS_PRIVATE_SEGMENT_END; if (first_umb_seg < (uint16_t)VGA_BIOS_SEG_END) @@ -854,7 +914,9 @@ class XMS: public Module_base { LOG(LOG_MISC,LOG_NORMAL)("UMB starting segment 0x%04x conflict with BIOS at 0x%04x. Disabling UMBs",(int)first_umb_seg,(int)(rombios_minimum_location>>4)); umb_available = false; } +#endif +#if !defined(OSFREE) if (IS_PC98_ARCH) { bool PC98_FM_SoundBios_Enabled(void); @@ -883,9 +945,11 @@ class XMS: public Module_base { LOG(LOG_MISC,LOG_DEBUG)("UMB ending segment 0x%04x conflicts with BIOS at 0x%04x, truncating region",(int)first_umb_size,(int)(rombios_minimum_location>>4)); first_umb_size = ((unsigned int)rombios_minimum_location>>4u)-1u; } +#endif Bitu GetEMSPageFrameSegment(void); +#if !defined(OSFREE) bool ems_available = GetEMSType(section)>0; /* 2017/12/24 I just noticed that the EMS page frame will conflict with UMB on standard configuration. @@ -918,13 +982,15 @@ class XMS: public Module_base { umb_available = false; } } +#endif +#if !defined(OSFREE) DOS_BuildUMBChain(umb_available&&dos_umb,ems_available); umb_init = true; +#endif - if (xms_init_flatrealmode) { + if (xms_init_flatrealmode && XMS_InitFlatRealMode()) { LOG(LOG_MISC,LOG_DEBUG)("XMS: Initialization is enabling flat real mode"); - XMS_InitFlatRealMode(); } /* CP/M compat will break unless a copy of the JMP instruction is mirrored in HMA */ @@ -934,10 +1000,12 @@ class XMS: public Module_base { ~XMS(){ /* Remove upper memory information */ dos_infoblock.SetStartOfUMBChain(0xffff); +#if !defined(OSFREE) if (umb_available) { if (dos_umb) dos_infoblock.SetUMBChainState(0); umb_available=false; } +#endif if (!xms_init) return; diff --git a/src/libs/physfs/physfs_platform_os2.c b/src/libs/physfs/physfs_platform_os2.c index 8cc8044cf42..6a62ffcd9df 100644 --- a/src/libs/physfs/physfs_platform_os2.c +++ b/src/libs/physfs/physfs_platform_os2.c @@ -33,7 +33,7 @@ static HMODULE uconvdll = 0; static UconvObject uconv = 0; static int (_System *pUniCreateUconvObject)(UniChar *, UconvObject *) = NULL; -static int (_System *pUniFreeUconvObject)(UconvObject *) = NULL; +static int (_System *pUniFreeUconvObject)(UconvObject) = NULL; static int (_System *pUniUconvToUcs)(UconvObject,void **,size_t *, UniChar**, size_t *, size_t *) = NULL; static int (_System *pUniUconvFromUcs)(UconvObject,UniChar **,size_t *,void **,size_t *,size_t *) = NULL; @@ -172,7 +172,7 @@ static char *cvtCodepageToUtf8(const char *cpstr) size_t cplen = len; size_t unilen = len; size_t subs = 0; - UniChar *uc2ptr = __PHYSFS_smallAlloc(len * sizeof (UniChar)); + UniChar *uc2ptr = (UniChar*)__PHYSFS_smallAlloc(len * sizeof (UniChar)); UniChar *uc2str = uc2ptr; BAIL_IF(!uc2ptr, PHYSFS_ERR_OUT_OF_MEMORY, NULL); @@ -268,9 +268,9 @@ static void prepUnicodeSupport(void) int ok = 0; char buf[CCHMAXPATH]; UniChar defstr[] = { 0 }; - if (DosLoadModule(buf, sizeof (buf) - 1, "uconv", &uconvdll) == NO_ERROR) + if (DosLoadModule((PSZ)buf, sizeof (buf) - 1, (PCSZ)"uconv", &uconvdll) == NO_ERROR) { - #define LOAD(x) (DosQueryProcAddr(uconvdll,0,#x,(PFN*)&p##x)==NO_ERROR) + #define LOAD(x) (DosQueryProcAddr(uconvdll,0,(PCSZ)#x,(PFN*)&p##x)==NO_ERROR) ok = LOAD(UniCreateUconvObject) && LOAD(UniFreeUconvObject) && LOAD(UniUconvToUcs) && @@ -298,12 +298,12 @@ int __PHYSFS_platformInit(void) return 1; /* ready to go! */ } /* __PHYSFS_platformInit */ - void __PHYSFS_platformDeinit(void) { if (uconvdll) { - pUniFreeUconvObject(uconv); + if (uconv) + pUniFreeUconvObject(uconv); uconv = 0; DosFreeModule(uconvdll); uconvdll = 0; @@ -551,7 +551,7 @@ static HFILE openFile(const char *filename, const ULONG flags, const ULONG mode) BAIL_IF_ERRPASS(!cpfname, 0); - rc = DosOpen(cpfname, &hfile, &action, 0, FILE_NORMAL, flags, mode, NULL); + rc = DosOpen((PCSZ)cpfname, &hfile, &action, 0, FILE_NORMAL, flags, mode, NULL); allocator.Free(cpfname); BAIL_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), 0); @@ -690,9 +690,9 @@ int __PHYSFS_platformDelete(const char *path) int retval = 0; BAIL_IF_ERRPASS(!cppath, 0); - rc = DosQueryPathInfo(cppath, FIL_STANDARD, &fs, sizeof (fs)); + rc = DosQueryPathInfo((PCSZ)cppath, FIL_STANDARD, &fs, sizeof (fs)); GOTO_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), done); - rc = (fs.attrFile & FILE_DIRECTORY) ? DosDeleteDir(path) : DosDelete(path); + rc = (fs.attrFile & FILE_DIRECTORY) ? DosDeleteDir((PCSZ)path) : DosDelete((PCSZ)path); GOTO_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), done); retval = 1; /* success */ @@ -730,7 +730,7 @@ int __PHYSFS_platformStat(const char *filename, PHYSFS_Stat *stat, const int fol BAIL_IF_ERRPASS(!cpfname, 0); - rc = DosQueryPathInfo(cpfname, FIL_STANDARD, &fs, sizeof (fs)); + rc = DosQueryPathInfo((PCSZ)cpfname, FIL_STANDARD, &fs, sizeof (fs)); GOTO_IF(rc != NO_ERROR, errcodeFromAPIRET(rc), done); if (fs.attrFile & FILE_DIRECTORY) diff --git a/src/libs/tinyfiledialogs/tinyfiledialogs.c b/src/libs/tinyfiledialogs/tinyfiledialogs.c index 229ab2232c4..452989d1fc5 100644 --- a/src/libs/tinyfiledialogs/tinyfiledialogs.c +++ b/src/libs/tinyfiledialogs/tinyfiledialogs.c @@ -21,7 +21,7 @@ Copyright (c) 2014 - 2024 Guillaume Vareille http://ysengrin.com | the windows only wchar_t UTF-16 prototypes are at the bottom of the header file | |_________________________________________________________________________________| _________________________________________________________ - | | + | 10 | | on windows: - since v3.6 char is UTF-8 by default | | - if you want MBCS set tinyfd_winUtf8 to 0 | | - functions like fopen expect MBCS | @@ -172,6 +172,15 @@ char tinyfd_needs[] = "\ \n a graphic display\ \nor dialog.exe (curses console mode ** Disabled by default **)\ \nor a console for basic input"; +#elif defined(OS2) +char tinyfd_needs[] = "\ + ___________\n\ +/ \\ \n\ +| tiny file |\n\ +| dialogs |\n\ +\\_____ ____/\n\ + \\|\ +\ntiny file dialogs on Windows needs a graphic display"; #else char tinyfd_needs[] = "\ ___________\n\ @@ -197,7 +206,7 @@ char tinyfd_needs[] = "\ #pragma warning(disable:4706) /* allows usage of strncpy, strcpy, strcat, sprintf, fopen */ #endif - +#if !defined(OS2) static int getenvDISPLAY(void) { /* return tinyfd_assumeGraphicDisplay || getenv("DISPLAY") || getenv("WAYLAND_DISPLAY") ; */ @@ -386,8 +395,9 @@ static int filenameValid( char const * aFileNameWithoutPath ) } return 1 ; } +#endif -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(OS2) static int fileExists( char const * aFilePathAndName ) { @@ -407,7 +417,7 @@ static int fileExists( char const * aFilePathAndName ) #endif - +#if !defined(OS2) static void wipefile(char const * aFilename) { int i; @@ -427,37 +437,55 @@ static void wipefile(char const * aFilename) } } +#include +#include +#ifdef __cplusplus +extern "C" { +#endif + bool tfd_isDBCSCP(void); + bool tfd_isKanji1(uint8_t chr); + bool tfd_isKanji2(uint8_t chr); +#ifdef __cplusplus +} +#endif int tfd_quoteDetected(char const * aString) { - char const * p; + if(!aString) + return 0; - if (!aString) return 0; - - p = aString; - if ( strchr(p, '\'')) - { - return 1; - } + const char* p = aString; + bool is_dbcscp = tfd_isDBCSCP(); + while(*p != '\0') + { + // Skip if the current character is the second byte of a DBCS character + if(is_dbcscp && tfd_isKanji1(*p) && tfd_isKanji2(*(p + 1))) + { + p += 2; // Skip both bytes of the DBCS character + continue; + } - if ( strchr(p, '\"')) - { - return 1; - } + // Check for single-byte quote characters + if(*p == '\'' || *p == '\"' || *p == '`') + { + return 1; + } - if ( strchr(p, '`')) - { - return 1; - } + // Check for '$' followed by '(', '_', or an alphabetic character + if(*p == '$') + { + p++; + if(*p == '(' || *p == '_' || isalpha(*p)) + { + return 1; + } + // If not followed by the specified characters, continue checking + } - p = aString; - while ((p = strchr(p, '$'))) - { - p ++ ; - if ( ( * p == '(' ) || ( * p == '_' ) || isalpha( * p) ) return 1 ; - } + p++; + } - return 0; + return 0; } @@ -499,7 +527,7 @@ int tinyfd_setGlobalInt(char const * aIntVariableName, int aValue) /* to be call #endif else return -1; } - +#endif #ifdef _WIN32 @@ -999,6 +1027,7 @@ static int quoteDetectedW(wchar_t const * aString) #endif /* _WIN32 */ +#if !defined(OS2) /* source and destination can be the same or ovelap*/ static char * ensureFilesExist(char * aDestination, char const * aSourcePathsAndNames) @@ -1044,6 +1073,7 @@ static char * ensureFilesExist(char * aDestination, } return aDestination; } +#endif #ifdef _WIN32 @@ -2072,13 +2102,13 @@ static int messageBoxWinGui( if (aTitle) { - if (tinyfd_winUtf8) lTmpWChar = tinyfd_utf8to16(aTitle); + if (tinyfd_winUtf8 || !tfd_isDBCSCP()) lTmpWChar = tinyfd_utf8to16(aTitle); else lTmpWChar = tinyfd_mbcsTo16(aTitle); wcscpy(lTitle, lTmpWChar); } if (aMessage) { - if (tinyfd_winUtf8) lTmpWChar = tinyfd_utf8to16(aMessage); + if (tinyfd_winUtf8 || !tfd_isDBCSCP()) lTmpWChar = tinyfd_utf8to16(aMessage); else lTmpWChar = tinyfd_mbcsTo16(aMessage); lMessage = (wchar_t *) malloc((wcslen(lTmpWChar) + 1)* sizeof(wchar_t)); if (lMessage) wcscpy(lMessage, lTmpWChar); @@ -2859,7 +2889,6 @@ static void writeUtf8( char const * aUtf8String ) (void)WriteConsoleW(lConsoleHandle, lTmpWChar, (DWORD) wcslen(lTmpWChar), &lNum, NULL); } - int tinyfd_messageBox( char const * aTitle, /* NULL or "" */ char const * aMessage, /* NULL or "" may contain \n and \t */ @@ -2871,8 +2900,8 @@ int tinyfd_messageBox( UINT lOriginalCP = 0; UINT lOriginalOutputCP = 0; - if (tfd_quoteDetected(aTitle)) return tinyfd_messageBox("INVALID TITLE WITH QUOTES", aMessage, aDialogType, aIconType, aDefaultButton); - if (tfd_quoteDetected(aMessage)) return tinyfd_messageBox(aTitle, "INVALID MESSAGE WITH QUOTES", aDialogType, aIconType, aDefaultButton); + //if (tfd_quoteDetected(aTitle)) return tinyfd_messageBox("INVALID TITLE WITH QUOTES", aMessage, aDialogType, aIconType, aDefaultButton); + //if (tfd_quoteDetected(aMessage)) return tinyfd_messageBox(aTitle, "INVALID MESSAGE WITH QUOTES", aDialogType, aIconType, aDefaultButton); if ((!tinyfd_forceConsole || !(GetConsoleWindow() || dialogPresent())) && (!getenv("SSH_CLIENT") || getenvDISPLAY())) @@ -3398,6 +3427,304 @@ char * tinyfd_colorChooser( return lDefaultHexRGB; } +#elif defined(OS2) +#include "os2res.h" +#include + +int tinyfd_notifyPopup( + char const * aTitle, /* NULL or "" */ + char const * aMessage, /* NULL or "" may contain \n \t */ + char const * aIconType) /* "info" "warning" "error" */ + /* return has only meaning for tinyfd_query */ +{ + return tinyfd_messageBox(aTitle, aMessage, NULL, aIconType, 0); +} + +int tinyfd_messageBox( + char const * aTitle , /* NULL or "" */ + char const * aMessage , /* NULL or "" may contain \n \t */ + char const * aDialogType , /* "ok" "okcancel" "yesno" "yesnocancel" */ + char const * aIconType , /* "info" "warning" "error" "question" */ + int aDefaultButton ) /* 0 for cancel/no , 1 for ok/yes , 2 for no in yesnocancel */ +{ + +// TODO aDefaultButton cf Windows implementation + ULONG style = MB_NOICON; + // Build the dialog style + if (aDialogType) + { + if (!strcasecmp(aDialogType, "ok")) + style |= MB_OK; + else if (!strcasecmp(aDialogType, "okcancel")) + style |= MB_OKCANCEL; + else if (!strcasecmp(aDialogType, "yesno")) + style |= MB_YESNO; + else if (!strcasecmp(aDialogType, "yesnocancel")) + style |= MB_YESNOCANCEL; + } + + // Build the icon style + if (aIconType) + { + if (!strcasecmp(aIconType, "info")) + style |= MB_INFORMATION; + else if (!strcasecmp(aIconType, "warning")) + style |= MB_WARNING; + else if (!strcasecmp(aIconType, "error")) + style |= MB_ERROR; + else if (!strcasecmp(aIconType, "question")) + style |= MB_QUERY; + } + + ULONG result = WinMessageBox(HWND_DESKTOP, WinQueryActiveWindow(HWND_DESKTOP), (PCSZ)aMessage, (PCSZ)aTitle, 1, style); + if (result == MBID_NO && !strcasecmp("yesnocancel", aDialogType)) + return 2; + else if (result == MBID_OK || result == MBID_YES) + return 1; + else + return 0; +} + +MRESULT EXPENTRY InputBox_Callback(HWND hWnd, ULONG message, MPARAM wParam, MPARAM lParam) +{ + int wmID; + + switch (message) + { + case WM_COMMAND: + { + wmID = SHORT1FROMMP(wParam); + if (wmID == DID_OK || wmID == DID_CANCEL) + { + PCH entry = NULL; + if (wmID == DID_OK) + { + HWND hInput = WinWindowFromID(hWnd, IB_INPUT); + ULONG len = WinQueryWindowTextLength(hInput) + 1; + entry = (PCH)malloc(len); + WinQueryWindowText(hInput, len, entry); + } + WinDismissDlg(hWnd, (ULONG)entry); + } + } + break; + + case WM_INITDLG: + { + HWND hInput = WinWindowFromID(hWnd, IB_INPUT); + char const **data = (char const **)PVOIDFROMMP(lParam); + // Set the dialogs title + WinSetWindowText(hWnd, (PSZ)data[0]); + WinSetWindowText(WinWindowFromID(hWnd, IB_LABEL), (PSZ)data[1]); + if (data[2] != NULL) + WinSetWindowText(hInput, (PCSZ)data[2]); + else + {} // TODO Password field. + WinSetFocus(HWND_DESKTOP, hInput); + } + + return (MRESULT)1; + + case WM_DESTROY: + break; + + default: + /* + * Any event messages that the dialog procedure has not processed + * come here and are processed by WinDefDlgProc. + * This call MUST exist in your dialog procedure. + */ + return WinDefDlgProc(hWnd, message, wParam, lParam); + } + return 0; +} + +char * tinyfd_inputBox( + char const * aTitle , /* NULL or "" */ + char const * aMessage , /* NULL or "" (\n and \t have no effect) */ + char const * aDefaultInput ) /* NULL = passwordBox, "" = inputbox */ + /* returns NULL on cancel */ +{ + char const *data[3] = { aTitle, aMessage, aDefaultInput }; + ULONG result = WinDlgBox(HWND_DESKTOP, WinQueryActiveWindow(HWND_DESKTOP), InputBox_Callback, NULLHANDLE, 100, &data); + if (result != DID_ERROR) + { + return (char*)result; + } + return NULL; +} + +inline static void setupFILEDLG( + PFILEDLG filedlg, + char const * aTitle, + int aNumOfFilterPatterns, + char const * const * aFilterPatterns, + int aAllowMultipleSelects +) { + int i; + char *j; + + memset(filedlg, 0, sizeof(FILEDLG)); + filedlg->cbSize = sizeof(FILEDLG); + filedlg->fl = FDS_CENTER; + if (aAllowMultipleSelects) + { + filedlg->fl |= FDS_MULTIPLESEL; + } + filedlg->pszTitle = (PSZ)aTitle; + + j = filedlg->szFullFile; + *j = 0; // Pre-initialize the string. + if (aFilterPatterns && aNumOfFilterPatterns) + { + for(i = 0; i < aNumOfFilterPatterns; i++) + { + size_t len = strlen(aFilterPatterns[i]); + if (j + len >= filedlg->szFullFile+CCHMAXPATH) + break; // Too long for buffer + + strcpy(j, aFilterPatterns[i]); + j += len; + *j = ';'; // Insert separator + j++; + } + *(j-1) = 0; // End the string + } +} + + +char * tinyfd_saveFileDialog( + char const * aTitle , /* NULL or "" */ + char const * aDefaultPathAndOrFile , /* NULL or "" , ends with / to set only a directory */ + int aNumOfFilterPatterns , /* 0 (1 in the following example) */ + char const * const * aFilterPatterns , /* NULL or char const * lFilterPatterns[1]={"*.txt"} */ + char const * aSingleFilterDescription ) /* NULL or "text files" */ + /* returns NULL on cancel */ +{ + FILEDLG filedlg; + HWND hwndDlg; + + setupFILEDLG(&filedlg, aTitle, aNumOfFilterPatterns, aFilterPatterns, 0); + hwndDlg = WinFileDlg(HWND_DESKTOP, WinQueryActiveWindow(HWND_DESKTOP), &filedlg); + if (hwndDlg && filedlg.lReturn == DID_OK) + { + char *result = (char*)malloc(strlen(filedlg.szFullFile)+1); + strcpy(result, filedlg.szFullFile); + return result; + } + return NULL; +} + +char * tinyfd_openFileDialog( + char const * aTitle, /* NULL or "" */ + char const * aDefaultPathAndOrFile, /* NULL or "" , ends with / to set only a directory */ + int aNumOfFilterPatterns , /* 0 (2 in the following example) */ + char const * const * aFilterPatterns, /* NULL or char const * lFilterPatterns[2]={"*.png","*.jpg"}; */ + char const * aSingleFilterDescription, /* NULL or "image files" */ + int aAllowMultipleSelects ) /* 0 or 1 */ + /* in case of multiple files, the separator is | */ + /* returns NULL on cancel */ +{ + FILEDLG filedlg; + HWND hwndDlg; + + setupFILEDLG(&filedlg, aTitle, aNumOfFilterPatterns, aFilterPatterns, aAllowMultipleSelects); + filedlg.fl |= FDS_OPEN_DIALOG; + hwndDlg = WinFileDlg(HWND_DESKTOP, WinQueryActiveWindow(HWND_DESKTOP), &filedlg); + if (hwndDlg && filedlg.lReturn == DID_OK) + { + char *result; + if (!filedlg.papszFQFilename) { + result = (char*)malloc(strlen(filedlg.szFullFile)+1); + strcpy(result, filedlg.szFullFile); + } + else + { + ULONG i, size=CCHMAXPATH; + + result = (char*)malloc(CCHMAXPATH); + *result = 0; // Terminate the string; + for(i = 0; i < filedlg.ulFQFCount; i++) + { + char* filename = (char*)*filedlg.papszFQFilename[i]; + if (filename && strlen(filename) > 0) + { + if (strlen(result) + strlen(filename) + 2 > size) + { + realloc(result, size + CCHMAXPATH); + size += CCHMAXPATH; + } + if (i > 0) + strcat(result, "|"); + strcat(result, filename); + } + } + WinFreeFileDlgList(filedlg.papszFQFilename); + } + + return result; + } + + return NULL; +} + +char * tinyfd_selectFolderDialog( + char const * aTitle, /* NULL or "" */ + char const * aDefaultPath) /* NULL or "" */ + /* returns NULL on cancel */ +{ + FILEDLG filedlg; + HWND hwndDlg; + + setupFILEDLG(&filedlg, aTitle, 0, NULL, false); + filedlg.fl |= FDS_OPEN_DIALOG; + hwndDlg = WinFileDlg(HWND_DESKTOP, WinQueryActiveWindow(HWND_DESKTOP), &filedlg); + if (hwndDlg && filedlg.lReturn == DID_OK) + { + char *result = (char*)malloc(strlen(filedlg.szFullFile)+1); + strcpy(result, dirname(filedlg.szFullFile)); + return result; + } + return NULL; +} + +char * tinyfd_colorChooser( + char const * aTitle, /* NULL or "" */ + char const * aDefaultHexRGB, /* NULL or "" or "#FF0000" */ + unsigned char const aDefaultRGB[3] , /* unsigned char lDefaultRGB[3] = { 0 , 128 , 255 }; */ + unsigned char aoResultRGB[3] ) /* unsigned char lResultRGB[3]; */ + /* aDefaultRGB is used only if aDefaultHexRGB is absent */ + /* aDefaultRGB and aoResultRGB can be the same array */ + /* returns NULL on cancel */ + /* returns the hexcolor as a string "#FF0000" */ + /* aoResultRGB also contains the result */ +{ + char color[8]; + if (aDefaultHexRGB != NULL) + { + strcpy(color, aDefaultHexRGB); + } + else + { + sprintf(color, "#%02hx%02hx%02hx", aDefaultRGB[0], aDefaultRGB[1], aDefaultRGB[2]); + } + + char *result = tinyfd_inputBox(aTitle, "Enter a color in the format '#RRGGBB'", (char*)color); + if (result != NULL && result[0] == '#') + { + strcpy(color, result); + aoResultRGB[2] = (unsigned char)strtoul(color+5, NULL, 16); + color[5] = '\0'; + aoResultRGB[2] = (unsigned char)strtoul(color+3, NULL, 16); + color[3] = '\0'; + aoResultRGB[2] = (unsigned char)strtoul(color+1, NULL, 16); + } + else + return NULL; + + return result; +} + #else /* unix */ @@ -4495,7 +4822,7 @@ int tinyfd_messageBox( lBuff[0]='\0'; if (tfd_quoteDetected(aTitle)) return tinyfd_messageBox("INVALID TITLE WITH QUOTES", aMessage, aDialogType, aIconType, aDefaultButton); - if (tfd_quoteDetected(aMessage)) return tinyfd_messageBox(aTitle, "INVALID MESSAGE WITH QUOTES", aDialogType, aIconType, aDefaultButton); + //if (tfd_quoteDetected(aMessage)) return tinyfd_messageBox(aTitle, "INVALID MESSAGE WITH QUOTES", aDialogType, aIconType, aDefaultButton); lTitleLen = aTitle ? strlen(aTitle) : 0 ; lMessageLen = aMessage ? strlen(aMessage) : 0 ; @@ -4914,8 +5241,7 @@ else :\n\tprint(1)\n\"" ) ; if ( tfd_isDarwin( ) ) { strcat( lDialogString , -"import os;os.system('''/usr/bin/osascript -e 'tell app \\\"Finder\\\" to set \ -frontmost of process \\\"Python\\\" to true' ''');"); +"import subprocess;subprocess.call(['/usr/bin/osascript','-e','tell app \\\"Finder\\\" to set frontmost of process \\\"Python\\\" to true']);"); } strcat( lDialogString ,"res=tkMessageBox." ) ; @@ -6545,8 +6871,7 @@ char * tinyfd_saveFileDialog( if ( tfd_isDarwin( ) ) { strcat( lDialogString , -"import os;os.system('''/usr/bin/osascript -e 'tell app \\\"Finder\\\" to set\ - frontmost of process \\\"Python\\\" to true' ''');"); +"import subprocess;subprocess.call(['/usr/bin/osascript','-e','tell app \\\"Finder\\\" to set frontmost of process \\\"Python\\\" to true']);"); } strcat( lDialogString , "res=tkFileDialog.asksaveasfilename("); @@ -7819,8 +8144,7 @@ to set mycolor to choose color default color {"); if ( tfd_isDarwin( ) ) { strcat( lDialogString , -"import os;os.system('''osascript -e 'tell app \\\"Finder\\\" to set \ -frontmost of process \\\"Python\\\" to true' ''');"); +"import subprocess;subprocess.call(['osascript','-e','tell app \\\"Finder\\\" to set frontmost of process \\\"Python\\\" to true']);"); } strcat( lDialogString , "res=tkColorChooser.askcolor(color='" ) ; diff --git a/src/misc/cross.cpp b/src/misc/cross.cpp index ca96a6493ae..9e0070ee1ef 100644 --- a/src/misc/cross.cpp +++ b/src/misc/cross.cpp @@ -16,7 +16,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - #include "dosbox.h" #include "cross.h" #include "support.h" @@ -52,10 +51,6 @@ bool isKanji1_gbk(uint8_t chr), CodePageHostToGuestUTF16(char *d/*CROSS_LEN*/,co #include #endif -#if defined __MINGW32__ -#define _mkdir(x) mkdir(x) -#endif - int resolveopt = 1; void autoExpandEnvironmentVariables(std::string & text, bool dosvar) { static std::regex env(dosvar?"\\%([^%]+)%":"\\$\\{([^}]+)\\}"); @@ -91,47 +86,56 @@ void ResolvePath(std::string& in) { } #if defined(WIN32) && !defined(HX_DOS) -static void W32_ConfDir(std::string& in,bool create) { - int c = create?1:0; - char result[MAX_PATH] = { 0 }; - #if !defined(_WIN32_WINDOWS) - BOOL r = SHGetSpecialFolderPath(NULL,result,CSIDL_LOCAL_APPDATA,c); - if(!r || result[0] == 0) r = SHGetSpecialFolderPath(NULL,result,CSIDL_APPDATA,c); - #else +static std::string W32_ConfDir(bool create) { + char result[MAX_PATH] = { 0 }; +#if !defined(_WIN32_WINDOWS) + BOOL r = SHGetSpecialFolderPathA(NULL, result, CSIDL_LOCAL_APPDATA, create ? 1 : 0); + if(!r || result[0] == 0) + r = SHGetSpecialFolderPathA(NULL, result, CSIDL_APPDATA, create ? 1 : 0); +#else BOOL r = GetModuleFileNameA(NULL, result, MAX_PATH); while(r && result[r] != '\\') result[r--] = '\0'; - #endif - if(!r || result[0] == 0) { - char const * windir = getenv("windir"); - if(!windir) windir = "c:\\windows"; - safe_strncpy(result,windir,MAX_PATH); - char const* appdata = "\\Application Data"; - size_t len = strlen(result); - if(len + strlen(appdata) < MAX_PATH) strcat(result,appdata); - //if(create) _mkdir(result); - } - in = result; +#endif + + if(!r || result[0] == 0) { + const char* windir = getenv("windir"); + if(!windir) windir = "c:\\windows"; + strncpy(result, windir, MAX_PATH - 1); + result[MAX_PATH - 1] = '\0'; + const char* appdata = "\\Application Data"; + size_t len = strlen(result); + if(len + strlen(appdata) < MAX_PATH) + strcat(result, appdata); + } + + return std::string(result); } #endif -void Cross::GetPlatformResDir(std::string& in) { +std::string Cross::GetPlatformResDir() { + std::string in; + #if defined(MACOSX) - in = MacOSXResPath; - if (in.empty()) { - in = "/usr/local/share/dosbox-x"; - struct stat info; - if ((stat(in.c_str(), &info) != 0) || (!(info.st_mode & S_IFDIR))) - in = "/usr/share/dosbox-x"; - if ((stat(in.c_str(), &info) != 0) || (!(info.st_mode & S_IFDIR))) - in = RESDIR; - } + in = MacOSXResPath; + if(in.empty()) { + in = "/usr/local/share/dosbox-x"; + struct stat info; + if((stat(in.c_str(), &info) != 0) || (!(info.st_mode & S_IFDIR))) + in = "/usr/share/dosbox-x"; + if((stat(in.c_str(), &info) != 0) || (!(info.st_mode & S_IFDIR))) + in = RESDIR; + } + #elif defined(RISCOS) - in = "//resources"; + in = "//resources"; + #elif defined(LINUX) - const char *xdg_data_home = getenv("XDG_DATA_HOME"); - const std::string data_home = xdg_data_home && xdg_data_home[0] == '/' ? xdg_data_home: "~/.local/share"; - in = data_home + "/dosbox-x"; - ResolveHomedir(in); + const char* xdg_data_home = getenv("XDG_DATA_HOME"); + const std::string data_home = + (xdg_data_home && xdg_data_home[0] == '/') ? xdg_data_home : "~/.local/share"; + + in = data_home + "/dosbox-x"; + ResolveHomedir(in); // Let's check if the above exists, otherwise use RESDIR struct stat info; @@ -140,82 +144,90 @@ void Cross::GetPlatformResDir(std::string& in) { if ((stat(in.c_str(), &info) != 0) || (!(info.st_mode & S_IFDIR))) in = "/usr/share/dosbox-x"; // if ((stat(in.c_str(), &info) != 0) || (!(info.st_mode & S_IFDIR))) { - //LOG_MSG("XDG_DATA_HOME (%s) does not exist. Using %s", in.c_str(), RESDIR); - // in = RESDIR; + // //LOG_MSG("XDG_DATA_HOME (%s) does not exist. Using %s", in.c_str(), RESDIR); + // in = RESDIR; // } #elif defined(WIN32) - in = "C:\\DOSBox-X"; -#if defined(RESDIR) - struct stat info; - if ((stat(in.c_str(), &info) != 0) || (!(info.st_mode & S_IFDIR))) - in = RESDIR; -#endif + in = "C:\\DOSBox-X"; +# if defined(RESDIR) + struct stat info; + if((stat(in.c_str(), &info) != 0) || (!(info.st_mode & S_IFDIR))) + in = RESDIR; +# endif + #elif defined(RESDIR) - in = RESDIR; + in = RESDIR; #endif - if (!in.empty()) - in += CROSS_FILESPLIT; + + if(!in.empty()) + in += CROSS_FILESPLIT; + + return in; } -void Cross::GetPlatformConfigDir(std::string& in) { + +std::string Cross::GetPlatformConfigDir() +{ + std::string dir; + #if defined(WIN32) && !defined(HX_DOS) - W32_ConfDir(in,false); - in += "\\DOSBox-X"; + dir = W32_ConfDir(false); + dir += "\\DOSBox-X"; + #elif defined(MACOSX) - in = "~/Library/Preferences"; - ResolveHomedir(in); + dir = "~/Library/Preferences"; + ResolveHomedir(dir); + #elif defined(HAIKU) - in = "~/config/settings/dosbox-x"; - ResolveHomedir(in); + dir = "~/config/settings/dosbox-x"; + ResolveHomedir(dir); + #elif defined(RISCOS) - in = "//DosBox-X"; + dir = "//DosBox-X"; + #elif !defined(HX_DOS) - const char *xdg_conf_home = getenv("XDG_CONFIG_HOME"); - const std::string conf_home = xdg_conf_home && xdg_conf_home[0] == '/' ? xdg_conf_home: "~/.config"; - in = conf_home + "/dosbox-x"; - ResolveHomedir(in); + const char* xdg_conf_home = getenv("XDG_CONFIG_HOME"); + const std::string conf_home = (xdg_conf_home && xdg_conf_home[0] == '/') + ? xdg_conf_home + : "~/.config"; + + dir = conf_home + "/dosbox-x"; + ResolveHomedir(dir); #endif - //LOG_MSG("Config dir: %s", in.c_str()); - in += CROSS_FILESPLIT; + + if(!dir.empty()) + dir += CROSS_FILESPLIT; + + return dir; } -void Cross::GetPlatformConfigName(std::string& in) { + +std::string Cross::GetPlatformConfigName() +{ + std::string name; + #ifdef WIN32 #define DEFAULT_CONFIG_FILE "dosbox-x-" VERSION ".conf" #elif defined(MACOSX) #define DEFAULT_CONFIG_FILE "DOSBox-X " VERSION " Preferences" -#else /*linux freebsd*/ +#elif defined(OS2) && defined(C_SDL2) +#define DEFAULT_CONFIG_FILE "dosbox-x-" PACKAGE_VERSION ".conf" +#else /* linux, freebsd */ #define DEFAULT_CONFIG_FILE "dosbox-x-" VERSION ".conf" #endif - in = DEFAULT_CONFIG_FILE; + + name = DEFAULT_CONFIG_FILE; + return name; } -void Cross::CreatePlatformConfigDir(std::string& in) { -#if defined(WIN32) && !defined(HX_DOS) - W32_ConfDir(in,true); - in += "\\DOSBox-X"; - //_mkdir(in.c_str()); -#elif defined(MACOSX) - in = "~/Library/Preferences"; - ResolveHomedir(in); - //Don't create it. Assume it exists -#elif defined(HAIKU) - in = "~/config/settings/dosbox-x"; - ResolveHomedir(in); - //mkdir(in.c_str(),0700); -#elif defined(RISCOS) - in = "//DosBox-X"; - mkdir(in.c_str(),0700); -#elif !defined(HX_DOS) - const char *xdg_conf_home = getenv("XDG_CONFIG_HOME"); - const std::string conf_home = xdg_conf_home && xdg_conf_home[0] == '/' ? xdg_conf_home: "~/.config"; - in = conf_home + "/dosbox-x"; - ResolveHomedir(in); - //mkdir(in.c_str(),0700); -#endif - in += CROSS_FILESPLIT; +std::string Cross::CreatePlatformConfigDir() +{ + std::string path = "."; + + return path; } + void Cross::ResolveHomedir(std::string & temp_line) { if(!temp_line.size() || temp_line[0] != '~') return; //No ~ @@ -234,11 +246,6 @@ void Cross::ResolveHomedir(std::string & temp_line) { } void Cross::CreateDir(std::string const& in) { -#ifdef WIN32 - //_mkdir(in.c_str()); -#else - //mkdir(in.c_str(),0700); -#endif } bool Cross::IsPathAbsolute(std::string const& in) { @@ -567,3 +574,15 @@ FILE *fopen_wrap(const char *path, const char *mode) { return fopen(path,mode); } + +const char* get_time(void) +{ + static char buf[16]; + time_t curtime; + struct tm* loctime; + + curtime = time(NULL); + loctime = localtime(&curtime); + strftime(buf, sizeof(buf), "%H:%M:%S", loctime); + return buf; +} diff --git a/src/misc/ethernet_slirp.cpp b/src/misc/ethernet_slirp.cpp index 6e0b7d5d5cc..49866d09913 100644 --- a/src/misc/ethernet_slirp.cpp +++ b/src/misc/ethernet_slirp.cpp @@ -30,6 +30,50 @@ extern std::string niclist; +#if __APPLE__ && __MAC_OS_X_VERSION_MIN_REQUIRED < 101200 +typedef enum { + _CLOCK_REALTIME = 0, +#if !defined(CLOCK_REALTIME) +#define CLOCK_REALTIME _CLOCK_REALTIME +#endif + _CLOCK_MONOTONIC = 6, +#if !defined(CLOCK_MONOTONIC) +#define CLOCK_MONOTONIC _CLOCK_MONOTONIC +#endif +#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) + _CLOCK_MONOTONIC_RAW = 4, +#if !defined(CLOCK_MONOTONIC_RAW) +#define CLOCK_MONOTONIC_RAW _CLOCK_MONOTONIC_RAW +#endif + _CLOCK_MONOTONIC_RAW_APPROX = 5, +#if !defined(CLOCK_MONOTONIC_RAW_APPROX) +#define CLOCK_MONOTONIC_RAW_APPROX _CLOCK_MONOTONIC_RAW_APPROX +#endif + _CLOCK_UPTIME_RAW = 8, +#if !defined(CLOCK_UPTIME_RAW) +#define CLOCK_UPTIME_RAW _CLOCK_UPTIME_RAW +#endif + _CLOCK_UPTIME_RAW_APPROX = 9, +#if !defined(CLOCK_UPTIME_RAW_APPROX) +#define CLOCK_UPTIME_RAW_APPROX _CLOCK_UPTIME_RAW_APPROX +#endif +#endif + _CLOCK_PROCESS_CPUTIME_ID = 12, +#if !defined(CLOCK_PROCESS_CPUTIME_ID) +#define CLOCK_PROCESS_CPUTIME_ID _CLOCK_PROCESS_CPUTIME_ID +#endif + _CLOCK_THREAD_CPUTIME_ID = 16 +#if !defined(CLOCK_THREAD_CPUTIME_ID) +#define CLOCK_THREAD_CPUTIME_ID _CLOCK_THREAD_CPUTIME_ID +#endif +} clockid_t; + +extern "C" { +/* clock_gettime() only available in macOS 10.12+ (Sierra) */ +int clock_gettime(clockid_t clk_id, struct timespec *tp); +} +#endif + #ifdef WIN32 #if _WIN32_WINNT < 0x600 /* Very quick Windows XP-compatible inet_pton implementation */ @@ -217,12 +261,14 @@ void SlirpEthernetConnection::ClearPortForwards(const bool is_udp, std::map= 0) LOG_MSG("SLIRP: Removed old %s port %d:%d forward", protocol, host_port, guest_port); else LOG_MSG("SLIRP: Failed removing old %s port %d:%d forward", protocol, host_port, guest_port); - + } existing_port_forwards.clear(); } diff --git a/src/misc/messages.cpp b/src/misc/messages.cpp index 501c0917323..ad7acf9c186 100644 --- a/src/misc/messages.cpp +++ b/src/misc/messages.cpp @@ -34,6 +34,10 @@ #include #include #include +#include +#include +#include +#include #if defined(__MINGW32__) && !defined(HX_DOS) #include #endif @@ -55,41 +59,98 @@ Bitu DOS_LoadKeyboardLayout(const char* layoutname, int32_t codepage, const char const char* DOS_GetLoadedLayout(void); bool CheckDBCSCP(int32_t codepage); void MSG_Init(void); +void get_yesno_chars(void); +extern char char_yes, char_no; #define LINE_IN_MAXLEN 2048 struct MessageBlock { - string name; - string val; - MessageBlock(const char* _name, const char* _val): - name(_name),val(_val){} + std::string name; + std::string val; + MessageBlock(const char* _name, const char* _val) : name(_name), val(_val) {} }; -static list Lang; -typedef list::iterator itmb; +std::list LangList; // list of translation messages, order maintained in inserted order -void MSG_Add(const char * _name, const char* _val) { - /* Find the message */ - for(itmb tel=Lang.begin();tel!=Lang.end();++tel) { - if((*tel).name==_name) { -// LOG_MSG("double entry for %s",_name); //Message file might be loaded before default text messages - return; - } - } - /* if the message doesn't exist add it */ - Lang.emplace_back(MessageBlock(_name,_val)); +// Map for fast lookup +std::unordered_map::iterator> LangMap; + +void MSG_Add(const char* _name, const char* _val) { //add messages to the translation message list + // If the message already exists, ignore it + if(LangMap.find(_name) != LangMap.end()) return; + + // Add the message to the end of the list + LangList.emplace_back(_name, _val); + + // Save the position in the map + LangMap[_name] = std::prev(LangList.end()); } -void MSG_Replace(const char * _name, const char* _val) { - /* Find the message */ - for(itmb tel=Lang.begin();tel!=Lang.end();++tel) { - if((*tel).name==_name) { - Lang.erase(tel); - break; - } - } - /* Even if the message doesn't exist add it */ - Lang.emplace_back(MessageBlock(_name,_val)); +void MSG_Replace(const char* _name, const char* _val) { + auto it = LangMap.find(_name); + + if(it != LangMap.end()) { + // Update the value while maintaining the order + it->second->val = _val; + } + else { + // If not found, add the message + LangList.emplace_back(_name, _val); + LangMap[_name] = std::prev(LangList.end()); + } +} + +const char* MSG_Get(const char* msg) { // add messages to the translation message list + auto it = LangMap.find(msg); + + if(it != LangMap.end()) + return it->second->val.c_str(); // Return the value if found + + return msg; // Return the original name if not found +} + +const char* MSG_GetUTF8(const char* msg) +{ + thread_local std::string storage; + + const char* guest = MSG_Get(msg); + + size_t len = strlen(guest); + std::vector buf(len * 4 + 1, 0); + + CodePageGuestToHostUTF8(buf.data(), guest); + + storage = buf.data(); + return storage.c_str(); +} + + + +std::string formatString(const char* format, ...) { + /** + * @brief Generates a formatted string using a format specifier and variable arguments. + * + * @param format A format string (e.g., "File: '%s', Error Code: %d, Language: '%s'.") + * @param ... Values corresponding to format specifiers (e.g., "lang_en.msg", 404, "English"). + * @return std::string A formatted string. + */ + va_list args; + va_start(args, format); + + // Determine required buffer size + int size = vsnprintf(nullptr, 0, format, args); + va_end(args); + + if(size < 0) { + return ""; // Return empty string on error + } + + std::vector buffer(size + 1); // Allocate buffer (+1 for null-terminator) + va_start(args, format); + vsnprintf(buffer.data(), buffer.size(), format, args); + va_end(args); + + return std::string(buffer.data()); } bool InitCodePage() { @@ -140,11 +201,14 @@ void AddMessages() { MSG_Add("MAPPER_EDITOR_EXIT","Exit mapper editor"); MSG_Add("SAVE_MAPPER_FILE","Save mapper file"); MSG_Add("WARNING","Warning"); + MSG_Add("ERROR", "Error"); + MSG_Add("INFORMATION", "Information"); MSG_Add("YES","Yes"); MSG_Add("NO","No"); MSG_Add("OK","OK"); MSG_Add("CANCEL","Cancel"); MSG_Add("CLOSE","Close"); + MSG_Add("THEME","Theme"); MSG_Add("DEBUGCMD","Enter Debugger Command"); MSG_Add("ADD","Add"); MSG_Add("DEL","Del"); @@ -176,7 +240,7 @@ void AddMessages() { MSG_Add("HELP_COMMAND","Help on DOS command"); MSG_Add("CURRENT_VOLUME","Current sound mixer volumes"); MSG_Add("CURRENT_SBCONFIG","Sound Blaster configuration"); - MSG_Add("CURRENT_MIDICONFIG","Current MIDI configuration"); + MSG_Add("CURRENT_MIDICONFIG","Current MIDI/OPL configuration"); MSG_Add("CREATE_IMAGE","Create blank disk image"); MSG_Add("NETWORK_LIST","Network interface list"); MSG_Add("PRINTER_LIST","Printer device list"); @@ -207,6 +271,17 @@ void AddMessages() { MSG_Add("AUTO_CYCLE_MAX","Auto cycles [max]"); MSG_Add("AUTO_CYCLE_AUTO","Auto cycles [auto]"); MSG_Add("AUTO_CYCLE_OFF","Auto cycles [off]"); + MSG_Add("LANG_LOAD_ERROR", "Could not load language message file %s. The default language will be used."); + MSG_Add("LANG_JP_INCOMPATIBLE", "You have specified a language file which uses a code page incompatible with the Japanese PC-98 or JEGA/AX system.\n\n" + "Are you sure to use the language file for this machine type?"); + MSG_Add("LANG_DOSV_INCOMPATIBLE", "You have specified a language file which uses a code page incompatible with the current DOS/V system.\n\n" + "Are you sure to use the language file for this system type?"); + MSG_Add("LANG_CHANGE_CP", "The specified language file uses code page %d. Do you want to change to this code page accordingly?"); + MSG_Add("HELP_ABOUT_VERSION","DOSBox-X ver.%s (%s %s %s-bit)%s"); + MSG_Add("HELP_ABOUT_UPDATED","Build date/time: %s"); + MSG_Add("HELP_ABOUT_COPYRIGHT","Copyright %s-%s %s"); + MSG_Add("HELP_ABOUT_MAINTAINER","Project maintainer: %s"); + MSG_Add("HELP_ABOUT_HOMEPAGE","DOSBox-X homepage: %s"); } // True if specified codepage is a DBCS codepage @@ -218,261 +293,300 @@ bool CheckDBCSCP(int32_t codepage) { else return false; } -#if 0 -void SetKEYBCP() { - if (IS_PC98_ARCH || IS_JEGA_ARCH || IS_DOSV || dos_kernel_disabled || !strcmp(RunningProgram, "LOADLIN")) return; - Bitu return_code; +FILE* testLoadLangFile(const char* fname) { + std::string exepath = GetDOSBoxXPath(); + std::string config_path, res_path; + config_path = Cross::GetPlatformConfigDir(); + res_path = Cross::GetPlatformResDir(); - if(CheckDBCSCP(msgcodepage)) { - MSG_Init(); - InitFontHandle(); - JFONT_Init(); - dos.loaded_codepage = msgcodepage; - } - else { - return_code = DOS_ChangeCodepage(858, "auto"); /* FIX_ME: Somehow requires to load codepage twice */ - return_code = DOS_ChangeCodepage(msgcodepage, "auto"); - if(return_code == KEYB_NOERROR) { - dos.loaded_codepage = msgcodepage; + std::vector base_paths = { + "", exepath, config_path, res_path, + "languages/", exepath + "languages/", config_path + "languages/", res_path + "languages/", + "language/", exepath + "language/", config_path + "language/", res_path + "language/" + }; + + std::vector suffixes = { "", ".lng" }; + + for(const auto& base : base_paths) { + for(const auto& suffix : suffixes) { + std::string full_path = base + fname + suffix; + FILE* mfile = fopen(full_path.c_str(), "rt"); + if(mfile) return mfile; } } - runRescan("-A -Q"); -} -#endif -FILE *testLoadLangFile(const char *fname) { - std::string config_path, res_path, exepath=GetDOSBoxXPath(); - Cross::GetPlatformConfigDir(config_path), Cross::GetPlatformResDir(res_path); - FILE * mfile=fopen(fname,"rt"); - if (!mfile) mfile=fopen((fname + std::string(".lng")).c_str(),"rt"); - if (!mfile && exepath.size()) mfile=fopen((exepath + fname).c_str(),"rt"); - if (!mfile && exepath.size()) mfile=fopen((exepath + fname + ".lng").c_str(),"rt"); - if (!mfile && config_path.size()) mfile=fopen((config_path + fname).c_str(),"rt"); - if (!mfile && config_path.size()) mfile=fopen((config_path + fname + ".lng").c_str(),"rt"); - if (!mfile && res_path.size()) mfile=fopen((res_path + fname).c_str(),"rt"); - if (!mfile && res_path.size()) mfile=fopen((res_path + fname + ".lng").c_str(),"rt"); - if (!mfile) mfile=fopen((std::string("languages/") + fname).c_str(),"rt"); - if (!mfile) mfile=fopen((std::string("languages/") + fname + ".lng").c_str(),"rt"); - if (!mfile && exepath.size()) mfile=fopen((exepath + "languages/" + fname).c_str(),"rt"); - if (!mfile && exepath.size()) mfile=fopen((exepath + "languages/" + fname + ".lng").c_str(),"rt"); - if (!mfile && config_path.size()) mfile=fopen((config_path + "languages/" + fname).c_str(),"rt"); - if (!mfile && config_path.size()) mfile=fopen((config_path + "languages/" + fname + ".lng").c_str(),"rt"); - if (!mfile && res_path.size()) mfile=fopen((res_path + "languages/" + fname).c_str(),"rt"); - if (!mfile && res_path.size()) mfile=fopen((res_path + "languages/" + fname + ".lng").c_str(),"rt"); - if (!mfile) mfile=fopen((std::string("language/") + fname).c_str(),"rt"); - if (!mfile) mfile=fopen((std::string("language/") + fname + ".lng").c_str(),"rt"); - if (!mfile && exepath.size()) mfile=fopen((exepath + "language/" + fname).c_str(),"rt"); - if (!mfile && exepath.size()) mfile=fopen((exepath + "language/" + fname + ".lng").c_str(),"rt"); - if (!mfile && config_path.size()) mfile=fopen((config_path + "language/" + fname).c_str(),"rt"); - if (!mfile && config_path.size()) mfile=fopen((config_path + "language/" + fname + ".lng").c_str(),"rt"); - if (!mfile && res_path.size()) mfile=fopen((res_path + "language/" + fname).c_str(),"rt"); - if (!mfile && res_path.size()) mfile=fopen((res_path + "language/" + fname + ".lng").c_str(),"rt"); #if defined(WIN32) && defined(C_SDL2) std::string localname = fname; - if (!mfile && FileDirExistUTF8(localname, fname) == 1) mfile=fopen(localname.c_str(),"rt"); + if(FileDirExistUTF8(localname, fname) == 1) { + FILE* mfile = fopen(localname.c_str(), "rt"); + if(mfile) return mfile; + } #endif - return mfile; + + return nullptr; } -char loaded_fname[LINE_IN_MAXLEN + 1024]; -void LoadMessageFile(const char * fname) { - if (!fname) return; - if(*fname=='\0') return;//empty string=no languagefile - if (!strcmp(fname, loaded_fname)){ - //LOG_MSG("Message file %s already loaded.",fname); + +static std::string loaded_fname; + +void LoadMessageFile(const char* fname) { + if(!fname || *fname == '\0') return; + + if(loaded_fname == fname) { return; } - LOG(LOG_MISC,LOG_DEBUG)("Loading message file %s",fname); - - FILE * mfile=testLoadLangFile(fname); - /* This should never happen and since other modules depend on this use a normal printf */ - if (!mfile) { - std::string message="Could not load language message file '"+std::string(fname)+"'. The default language will be used."; - systemmessagebox("Warning", message.c_str(), "ok","warning", 1); - SetVal("dosbox", "language", ""); - LOG_MSG("MSG:Cannot load language file: %s",fname); - control->opt_lang = ""; - return; - } - strcpy(loaded_fname, fname); - langname = langnote = ""; - char linein[LINE_IN_MAXLEN+1024]; - char name[LINE_IN_MAXLEN+1024], menu_name[LINE_IN_MAXLEN], mapper_name[LINE_IN_MAXLEN]; - char string[LINE_IN_MAXLEN*10], temp[4096]; - /* Start out with empty strings */ - name[0]=0;string[0]=0; - morelen=inmsg=true; - bool res=true; + + LOG(LOG_MISC, LOG_DEBUG)("Loading message file %s", fname); + + FILE* mfile = testLoadLangFile(fname); + + if(!mfile) { + std::string message = formatString(MSG_Get("LANG_LOAD_ERROR"), fname); + systemmessagebox("Warning", message.c_str(), "ok", "warning", 1); + SetVal("dosbox", "language", ""); + LOG_MSG("MSG:Cannot load language file: %s", fname); + control->opt_lang = ""; + return; + } + + loaded_fname = fname; + langname.clear(); + langnote.clear(); + std::string linein, name, menu_name, mapper_name, string; + + morelen = inmsg = true; + bool res = true; bool loadlangcp = false; - int cp=dos.loaded_codepage; - if (!dos.loaded_codepage) res=InitCodePage(); - while(fgets(linein, LINE_IN_MAXLEN+1024, mfile)) { - /* Parse the read line */ - /* First remove characters 10 and 13 from the line */ - char * parser=linein; - char * writer=linein; - - while (*parser) { - if (*parser != 10 && *parser != 13) - *writer++ = *parser; - - parser++; - } - *writer=0; - /* New string name */ - if (linein[0]==':') { - string[0]=0; - if (!strncasecmp(linein+1, "DOSBOX-X:", 9)) { - char *p = linein+10; - char *r = strchr(p, ':'); - if (*p && r!=NULL && r>p && *(r+1)) { - *r=0; - if (!strcmp(p, "CODEPAGE")) { - int c = atoi(r+1); + int cp = dos.loaded_codepage; + if(!dos.loaded_codepage) res = InitCodePage(); + + const size_t buffer_size = LINE_IN_MAXLEN + 1024; + char* buffer = new char[buffer_size]; + + while(fgets(buffer, buffer_size, mfile)) { + linein = buffer; + // Remove \r and \n + linein.erase(std::remove(linein.begin(), linein.end(), '\r'), linein.end()); + linein.erase(std::remove(linein.begin(), linein.end(), '\n'), linein.end()); + + if(linein.empty()) { + string += "\n"; + continue; + } + + std::string trimmed = linein.substr(1); + trim(trimmed); + + if(linein[0] == ':') { + string.clear(); + + if(!strncasecmp(linein.c_str() + 1, "DOSBOX-X:", 9)) { + std::string p = linein.substr(10); + size_t colon_pos = p.find(':'); + if(colon_pos != std::string::npos && colon_pos > 0 && colon_pos + 1 < p.size()) { + std::string key = p.substr(0, colon_pos); + std::string val = p.substr(colon_pos + 1); + if(key == "CODEPAGE") { + int c = std::atoi(val.c_str()); if(!isSupportedCP(c)) { LOG_MSG("Language file: Invalid codepage :DOSBOX-X:CODEPAGE:%d", c); loadlangcp = false; } - else if (((IS_PC98_ARCH||IS_JEGA_ARCH) && c!=437 && c!=932 && !systemmessagebox("DOSBox-X language file", "You have specified a language file which uses a code page incompatible with the Japanese PC-98 or JEGA/AX system.\n\nAre you sure to use the language file for this machine type?", "yesno","question", 2)) || (((IS_JDOSV && c!=932) || (IS_PDOSV && c!=936) || (IS_KDOSV && c!=949) || (IS_TDOSV && c!=950 && c!=951)) && c!=437 && !systemmessagebox("DOSBox-X language file", "You have specified a language file which uses a code page incompatible with the current DOS/V system.\n\nAre you sure to use the language file for this system type?", "yesno","question", 2))) { - fclose(mfile); - dos.loaded_codepage = cp; - return; + else if(((IS_PC98_ARCH || IS_JEGA_ARCH) && c != 437 && c != 932 && + !systemmessagebox("DOSBox-X language file", + MSG_Get("LANG_JP_INCOMPATIBLE"), + "yesno", "question", 2)) || + (((IS_JDOSV && c != 932) || (IS_PDOSV && c != 936) || + (IS_KDOSV && c != 949) || (IS_TDOSV && c != 950 && c != 951)) && + c != 437 && + !systemmessagebox("DOSBox-X language file", + MSG_Get("LANG_DOSV_INCOMPATIBLE"), + "yesno", "question", 2))) { + fclose(mfile); + dos.loaded_codepage = cp; + return; } else { - std::string msg = "The specified language file uses code page " + std::to_string(c) + ". Do you want to change to this code page accordingly?"; + std::string msg = formatString(MSG_Get("LANG_CHANGE_CP"), c); if(c == dos.loaded_codepage) { msgcodepage = c; lastmsgcp = msgcodepage; } - if(c != dos.loaded_codepage && (control->opt_langcp || uselangcp || !CHCP_changed || CheckDBCSCP(c) || !loadlang || (loadlang && systemmessagebox("DOSBox-X language file", msg.c_str(), "yesno", "question", 1)))) { + if(c != dos.loaded_codepage && (control->opt_langcp || uselangcp || !CHCP_changed || CheckDBCSCP(c) || !loadlang || + (loadlang && systemmessagebox("DOSBox-X language file", msg.c_str(), "yesno", "question", 1)))) { loadlangcp = true; - if(c == 950 && dos.loaded_codepage == 951) msgcodepage = 951; // zh_tw defaults to CP950, but CP951 is acceptable as well so keep it + if(c == 950 && dos.loaded_codepage == 951) msgcodepage = 951; // zh_tw defaults to CP950, but CP951 is acceptable as well so keep it else if(c == 951 && dos.loaded_codepage == 950) msgcodepage = 950; // And vice versa for lang files requiring CP951 else msgcodepage = c; dos.loaded_codepage = c; - if (c == 950 && !chinasea) makestdcp950table(); - if (c == 951 && chinasea) makeseacp951table(); + if(c == 950 && !chinasea) makestdcp950table(); + if(c == 951 && chinasea) makeseacp951table(); lastmsgcp = c; } } - } else if (!strcmp(p, "LANGUAGE")) - langname = r+1; - else if (!strcmp(p, "REMARK")) - langnote = r+1; - *r=':'; + } + else if(key == "LANGUAGE") { + langname = val; + } + else if(key == "REMARK") { + langnote = val; + } } - } else if (!strncasecmp(linein+1, "MENU:", 5)&&strlen(linein+6)6&&!strncmp(menu_name, "drive_", 6)) - for (char c='A'; c<='Z'; c++) { - std::string mname = "drive_"+std::string(1, c)+(menu_name+5); - if (mainMenu.item_exists(mname)) mainMenu.get_item(mname).set_text(string); + else if(!strncasecmp(linein.c_str() + 1, "MENU:", 5) && linein.size() > 6) { + name.clear(); mapper_name.clear(); + menu_name = linein.substr(6); + } + else if(!strncasecmp(linein.c_str() + 1, "MAPPER:", 7) && linein.size() > 8) { + name.clear(); menu_name.clear(); + mapper_name = linein.substr(8); + } + else { + menu_name.clear(); mapper_name.clear(); + name = linein.substr(1); + } + + } + else if(linein[0] == '.' && trimmed.empty()) { + if(!string.empty() && string.back() == '\n') string.pop_back(); + + if(!name.empty()) { + MSG_Replace(name.c_str(), string.c_str()); + } + else if(menu_name.size() > 6 && menu_name.rfind("drive_", 0) == 0) { + for(char c = 'A'; c <= 'Z'; ++c) { + std::string mname = "drive_" + std::string(1, c) + menu_name.substr(5); + if(mainMenu.item_exists(mname)) { + mainMenu.get_item(mname).set_text(string); + } } - else if (strlen(menu_name)&&mainMenu.item_exists(menu_name)) { + } + else if(!menu_name.empty() && mainMenu.item_exists(menu_name)) { mainMenu.get_item(menu_name).set_text(string); - if (strlen(menu_name)>7&&!strncmp(menu_name, "mapper_", 7)) set_eventbutton_text(menu_name+7, string); + if(menu_name.rfind("mapper_", 0) == 0 && menu_name.size() > 7) { + set_eventbutton_text(menu_name.c_str() + 7, string.c_str()); + } } - else if (strlen(mapper_name)) - set_eventbutton_text(mapper_name, string); - } else { - /* Normal string to be added */ - if (!CodePageHostToGuestUTF8(temp,linein)) - strcat(string,linein); - else - strcat(string,temp); - strcat(string,"\n"); - } - } - morelen=inmsg=false; - fclose(mfile); + else if(!mapper_name.empty()) { + set_eventbutton_text(mapper_name.c_str(), string.c_str()); + } + } + else { + size_t temp_size = linein.size() * 3 + 1; // Converting to UTF-8 will expand to max. 3-bytes / character + null terminator + std::vector temp(temp_size); + if(!CodePageHostToGuestUTF8(temp.data(), linein.c_str())) { + string += linein + "\n"; + } + else { + string += std::string(temp.data()) + "\n"; + } + } + } + + morelen = inmsg = false; + delete[] buffer; + fclose(mfile); menu_update_dynamic(); menu_update_autocycle(); update_bindbutton_text(); - dos.loaded_codepage=cp; - if (loadlangcp && msgcodepage>0) { + dos.loaded_codepage = cp; + +#if !defined(OSFREE) + if(loadlangcp && msgcodepage > 0) { const char* layoutname = DOS_GetLoadedLayout(); - if(!IS_DOSV && !IS_JEGA_ARCH && !IS_PC98_ARCH && layoutname != NULL) { - toSetCodePage(NULL, msgcodepage, -1); + if(!IS_DOSV && !IS_JEGA_ARCH && !IS_PC98_ARCH && layoutname != nullptr) { + toSetCodePage(nullptr, msgcodepage, -1); } } +#endif + + get_yesno_chars(); refreshExtChar(); - LOG_MSG("LoadMessageFile: Loaded language file: %s",fname); + LOG_MSG("LoadMessageFile: Loaded language file: %s", fname); loadlang = true; } -const char * MSG_Get(char const * msg) { - for(itmb tel=Lang.begin();tel!=Lang.end();++tel){ - if((*tel).name==msg) - { - return (*tel).val.c_str(); - } - } - return msg; -} -bool MSG_Write(const char * location, const char * name) { - char temp[4096]; - FILE* out=fopen(location,"w+t"); - if(out==NULL) return false;//maybe an error? - if (name!=NULL) langname=std::string(name); - if (langname!="") fprintf(out,":DOSBOX-X:LANGUAGE:%s\n",langname.c_str()); - if (dos.loaded_codepage) fprintf(out,":DOSBOX-X:CODEPAGE:%d\n",dos.loaded_codepage); - fprintf(out,":DOSBOX-X:VERSION:%s\n",VERSION); - fprintf(out,":DOSBOX-X:REMARK:%s\n",langnote.c_str()); - morelen=inmsg=true; - for(itmb tel=Lang.begin();tel!=Lang.end();++tel){ - if (!CodePageGuestToHostUTF8(temp,(*tel).val.c_str())) - fprintf(out,":%s\n%s\n.\n",(*tel).name.c_str(),(*tel).val.c_str()); + +bool MSG_Write(const char* location, const char* name) { + std::unique_ptr temp(new char[4096]); + + FILE* out = fopen(location, "w+t"); + if(out == nullptr) return false; // Failed to open file for writing + + if(name != nullptr) langname = std::string(name); + + if(!langname.empty()) + fprintf(out, ":DOSBOX-X:LANGUAGE:%s\n", langname.c_str()); + + if(dos.loaded_codepage) + fprintf(out, ":DOSBOX-X:CODEPAGE:%d\n", dos.loaded_codepage); + + fprintf(out, ":DOSBOX-X:VERSION:%s\n", VERSION); + fprintf(out, ":DOSBOX-X:REMARK:%s\n", langnote.c_str()); + + morelen = inmsg = true; + + // Output messages in insertion order using LangList + for(const auto& msg : LangList) { + const char* out_text = msg.val.c_str(); + if(!CodePageGuestToHostUTF8(temp.get(), out_text)) + fprintf(out, ":%s\n%s\n.\n", msg.name.c_str(), out_text); else - fprintf(out,":%s\n%s\n.\n",(*tel).name.c_str(),temp); - } - std::vector master_list = mainMenu.get_master_list(); - for (auto &id : master_list) { - if (id.is_allocated()&&id.get_type()!=DOSBoxMenu::separator_type_id&&id.get_type()!=DOSBoxMenu::vseparator_type_id&&!(id.get_name().size()==5&&id.get_name().substr(0,4)=="slot")&&!(id.get_name().size()>9&&id.get_name().substr(0,8)=="command_")&&!(id.get_name().size()==6&&id.get_name().substr(0,5)=="Drive"&&id.get_name().back()>='A'&&id.get_name().back()<='Z')&&!(id.get_name().size()>9&&id.get_name().substr(0,6)=="drive_"&&id.get_name()[6]>='B'&&id.get_name()[6]<='Z'&&id.get_name()[7]=='_')&&id.get_name()!="mapper_cycauto") { - std::string text = id.get_text(); - if (id.get_name()=="hostkey_mapper"||id.get_name()=="clipboard_device") { - std::size_t found = text.find(":"); - if (found!=std::string::npos) text = text.substr(0, found); - } - std::string idname = id.get_name().size()>9&&id.get_name().substr(0,8)=="drive_A_"?"drive_"+id.get_name().substr(8):id.get_name(); - if (!CodePageGuestToHostUTF8(temp,text.c_str())) - fprintf(out,":MENU:%s\n%s\n.\n",idname.c_str(),text.c_str()); - else - fprintf(out,":MENU:%s\n%s\n.\n",idname.c_str(),temp); + fprintf(out, ":%s\n%s\n.\n", msg.name.c_str(), temp.get()); + } + + // Output menu items (menu filtering conditions remain unchanged) + std::vector master_list = mainMenu.get_master_list(); + for(auto& id : master_list) { + if(!id.is_allocated() || id.get_type() == DOSBoxMenu::separator_type_id || + id.get_type() == DOSBoxMenu::vseparator_type_id || + (id.get_name().size() == 5 && id.get_name().substr(0, 4) == "slot") || + (id.get_name().size() > 9 && id.get_name().substr(0, 8) == "command_") || + (id.get_name().size() == 6 && id.get_name().substr(0, 5) == "Drive" && + id.get_name().back() >= 'A' && id.get_name().back() <= 'Z') || + (id.get_name().size() > 9 && id.get_name().substr(0, 6) == "drive_" && + id.get_name()[6] >= 'B' && id.get_name()[6] <= 'Z' && id.get_name()[7] == '_') || + id.get_name() == "mapper_cycauto") + continue; + + std::string text = id.get_text(); + if(id.get_name() == "hostkey_mapper" || id.get_name() == "clipboard_device") { + size_t found = text.find(":"); + if(found != std::string::npos) text = text.substr(0, found); } - } - std::map event_map = get_event_map(); - for (auto it=event_map.begin();it!=event_map.end();++it) { - if (mainMenu.item_exists("mapper_"+it->first) && mainMenu.get_item("mapper_"+it->first).get_text() == it->second) continue; - if (!CodePageGuestToHostUTF8(temp,it->second.c_str())) - fprintf(out,":MAPPER:%s\n%s\n.\n",it->first.c_str(),it->second.c_str()); + + std::string idname = (id.get_name().size() > 9 && id.get_name().substr(0, 8) == "drive_A_") + ? "drive_" + id.get_name().substr(8) + : id.get_name(); + + const char* out_text = text.c_str(); + if(!CodePageGuestToHostUTF8(temp.get(), out_text)) + fprintf(out, ":MENU:%s\n%s\n.\n", idname.c_str(), out_text); + else + fprintf(out, ":MENU:%s\n%s\n.\n", idname.c_str(), temp.get()); + } + + // Output MAPPER items that differ from mainMenu mappings + std::map event_map = get_event_map(); + for(const auto& it : event_map) { + if(mainMenu.item_exists("mapper_" + it.first) && + mainMenu.get_item("mapper_" + it.first).get_text() == it.second) + continue; + + const char* out_text = it.second.c_str(); + if(!CodePageGuestToHostUTF8(temp.get(), out_text)) + fprintf(out, ":MAPPER:%s\n%s\n.\n", it.first.c_str(), out_text); else - fprintf(out,":MAPPER:%s\n%s\n.\n",it->first.c_str(),temp); + fprintf(out, ":MAPPER:%s\n%s\n.\n", it.first.c_str(), temp.get()); } - morelen=inmsg=false; - fclose(out); - return true; + + morelen = inmsg = false; + fclose(out); + return true; } + void ResolvePath(std::string& in); void MSG_Init() { Section_prop *section=static_cast(control->GetSection("dosbox")); @@ -511,8 +625,12 @@ void MSG_Init() { if (pathprop != NULL) { std::string path = pathprop->realpath; ResolvePath(path); - if (testLoadLangFile(path.c_str())) + + FILE* f = testLoadLangFile(path.c_str()); + if (f) { + fclose(f); LoadMessageFile(path.c_str()); + } else { std::string lang = section->Get_string("language"); if (lang.size()) LoadMessageFile(lang.c_str()); diff --git a/src/misc/mkdir_p.cpp b/src/misc/mkdir_p.cpp index 82611a729e7..d92d56e802e 100644 --- a/src/misc/mkdir_p.cpp +++ b/src/misc/mkdir_p.cpp @@ -27,99 +27,6 @@ using namespace std; # define PSEP '\\' int _wmkdir_p(const wchar_t *pathname) { - const size_t pathlen = wcslen(pathname); - wchar_t *pc = new wchar_t[pathlen+1]; - wchar_t *pcl = new wchar_t[pathlen+1]; - const wchar_t *ps = pathname; - wchar_t *pwf = pc + pathlen; - wchar_t *pw = pc; - wchar_t lt = 0; - bool bs = false; - struct _stat st; - int result = 0; - errno = 0; - - /* if there is a drive like letter C: then skip it */ - if (((ps[0] >= 'A' && ps[0] <= 'Z') || (ps[0] >= 'a' && ps[0] <= 'z')) && ps[1] == ':') { - lt = ps[0]; - if (ps[2] == '\\') bs = true; - *pw = *ps++; - *pw = *ps++; - assert(pw <= pwf); - } - - /* if the string starts with leading \\ like a UNC path or we're at the first \ after a drive letter, skip it */ - /* FIXME: Proper UNC path detect and skip? The NT kernel will obviously fail a mkdir() on this part of the path */ - while (*ps == PSEP) *pw++ = *ps++; - assert(pw <= pwf); - - if (*ps != 0) { - /* for each path element, copy element and then mkdir */ - do { - if (*ps == PSEP) { - *pw++ = *ps++; /* extra path separator? ok... */ - assert(pw <= pwf); - } - else { - /* one element */ - while (!(*ps == 0 || *ps == PSEP)) *pw++ = *ps++; - assert(pw <= pwf); - - /* and mkdir() with it if needed */ - *pw = 0; /* NUL terminate pc we copied so far */ - if (lt) { - pcl[0] = lt; - pcl[1] = ':'; - if (bs) { - pcl[2] = '\\'; - pcl[3] = 0; - } else - pcl[2] = 0; - } else - pcl[0] = 0; - wcscat(pcl, pc); - if (_wstat(pcl,&st) == 0) { - if (S_ISDIR(st.st_mode)) { - /* expected, do nothing */ - } - else { - /* not a directory? stop and do not continue */ - result = -1; - errno = ENOTDIR; - break; /* out of while (*ps != 0) */ - } - } - else { - if (errno == ENOENT) { - /* expected, create directory */ - if (_wmkdir(pcl)/*failed*/) { - /* create failed, stop and do not continue. */ - result = -1; - /* errno already set by mkdir() */ - break; - } - } - else { - /* not expected, stop and do not continue */ - result = -1; - /* errno already set by stat() */ - break; - } - } - - /* skip path separator and continue */ - if (*ps == PSEP) *pw++ = *ps++; - assert(pw <= pwf); - } - } while (*ps != 0); - } - else { - errno = ENOTSUP; /* trying to mkdir "" or "/", why?? */ - } - - delete[] pc; - return result; - errno = ENOSYS; return -1; } @@ -129,74 +36,7 @@ int _wmkdir_p(const wchar_t *pathname) { # define PSEP '/' int mkdir_p(const char *pathname, mode_t mode) { - const size_t pathlen = strlen(pathname); - char *pc = new char[pathlen+1]; - const char *ps = pathname; - char *pwf = pc + pathlen; - struct stat st; - int result = 0; - char *pw = pc; - errno = 0; - - /* copy initial leading / if caller wants absolute paths */ - while (*ps == PSEP) *pw++ = *ps++; - assert(pw <= pwf); - - if (*ps != 0) { - /* for each path element, copy element and then mkdir */ - do { - if (*ps == PSEP) { - *pw++ = *ps++; /* extra path separator? ok... */ - assert(pw <= pwf); - } - else { - /* one element */ - while (!(*ps == 0 || *ps == PSEP)) *pw++ = *ps++; - assert(pw <= pwf); - - /* and mkdir() with it if needed */ - *pw = 0; /* NUL terminate pc we copied so far */ - if (stat(pc,&st) == 0) { - if (S_ISDIR(st.st_mode)) { - /* expected, do nothing */ - } - else { - /* not a directory? stop and do not continue */ - result = -1; - errno = ENOTDIR; - break; /* out of while (*ps != 0) */ - } - } - else { - if (errno == ENOENT) { - /* expected, create directory */ - if (mkdir(pc,mode)/*failed*/) { - /* create failed, stop and do not continue. */ - result = -1; - /* errno already set by mkdir() */ - break; - } - } - else { - /* not expected, stop and do not continue */ - result = -1; - /* errno already set by stat() */ - break; - } - } - - /* skip path separator and continue */ - if (*ps == PSEP) *pw++ = *ps++; - assert(pw <= pwf); - } - } while (*ps != 0); - } - else { - errno = ENOTSUP; /* trying to mkdir "" or "/", why?? */ - } - - delete[] pc; - return result; + return -1; } #endif diff --git a/src/misc/programs.cpp b/src/misc/programs.cpp index 39503e4ae7b..05c337848cb 100644 --- a/src/misc/programs.cpp +++ b/src/misc/programs.cpp @@ -17,2177 +17,2830 @@ */ - #include - #include - #include - #include - #include - #include - #include - #include - #include - - #include "programs.h" - #include "callback.h" - #include "logging.h" - #include "regs.h" - #include "support.h" - #include "cross.h" - #include "control.h" - #include "shell.h" - #include "menudef.h" - #include "hardware.h" - #include "mapper.h" - #include "menu.h" - #include "bios.h" - #include "timer.h" - #include "jfont.h" - #include "render.h" - #include "../ints/int10.h" - #include "sdlmain.h" - #if defined(WIN32) - #include "windows.h" - RECT monrect; - int curscreen; - #endif - - #include - #include - - Bitu call_program; - extern char lastmount; - extern const char *modifier; - extern unsigned int sendkeymap; - extern std::string langname, configfile, dosbox_title; - extern int autofixwarn, enablelfn, fat32setver, paste_speed, wheel_key, freesizecap, wpType, wpVersion, wpBG, wpFG, lastset, blinkCursor, msgcodepage; - extern bool dos_kernel_disabled, force_nocachedir, wpcolon, convertimg, lockmount, enable_config_as_shell_commands, lesssize, load, winrun, winautorun, startcmd, startwait, startquiet, starttranspath, mountwarning, wheel_guest, clipboard_dosapi, noremark_save_state, force_load_state, sync_time, manualtime, ttfswitch, loadlang, showbold, showital, showline, showsout, char512, printfont, rtl, gbk, chinasea, uao, showdbcs, dbcs_sbcs, autoboxdraw, halfwidthkana, ticksLocked, outcon, enable_dbcs_tables, show_recorded_filename, internal_program, pipetmpdev, notrysgf, uselangcp, incall; - - /* This registers a file on the virtual drive and creates the correct structure for it*/ - - static uint8_t exe_block[]={ - 0xbc,0x00,0x04, //0x100 MOV SP,0x400 decrease stack size - 0xbb,0x40,0x00, //0x103 MOV BX,0x0040 for memory resize - 0xb4,0x4a, //0x106 MOV AH,0x4A Resize memory block - 0xcd,0x21, //0x108 INT 0x21 ... - 0x30,0xc0, //0x10A XOR AL,AL Clear AL (exit code). Program will write AL to modify exit status - //pos 14 is callback number - 0xFE,0x38,0x00,0x00, //0x10C CALLBack number - 0xb4,0x4c, //0x110 Mov AH,0x4C Prepare to exit, preserve AL - 0xcd,0x21 //0x112 INT 0x21 Exit to DOS - }; //0x114 --DONE-- - - #define CB_POS 14 - - class InternalProgramEntry { - public: - InternalProgramEntry() { - main = NULL; - comsize = 0; - comdata = NULL; - } - ~InternalProgramEntry() { - if (comdata != NULL) free(comdata); - comdata = NULL; - comsize = 0; - main = NULL; - } - public: - std::string name; - uint8_t* comdata; - uint32_t comsize; - PROGRAMS_Main* main; - }; - - static std::vector internal_progs; - uint8_t DOS_GetAnsiAttr(void); - int setTTFMap(bool changecp); - char *FormatDate(uint16_t year, uint8_t month, uint8_t day); - bool isDBCSCP(void), CheckBoxDrawing(uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4), DOS_SetAnsiAttr(uint8_t attr), GFX_GetPreventFullscreen(void), toOutput(const char *what); - void EMS_DoShutDown(void), UpdateDefaultPrinterFont(void), GFX_ForceRedrawScreen(void), resetFontSize(void), ttf_reset_colors(void), makestdcp950table(void), makeseacp951table(void), clearFontCache(void), DOSBox_SetSysMenu(void), MSG_Init(void), initRand(void), PRINTER_Init(void), SetKEYBCP(void); - void EMS_Startup(Section* sec), DOSV_SetConfig(Section_prop *section), DOSBOX_UnlockSpeed2(bool pressed), RebootLanguage(std::string filename, bool confirm=false), SetWindowTransparency(int trans), SetOutputSwitch(const char *outputstr), runRescan(const char *str), runSerial(const char *str), runParallel(const char *str), DOS_AddDays(uint8_t days), PRINTER_Shutdown(Section* sec), setAspectRatio(Section_prop * section); - - void PROGRAMS_Shutdown(void) { - LOG(LOG_MISC,LOG_DEBUG)("Shutting down internal programs list"); - - for (size_t i=0;i < internal_progs.size();i++) { - if (internal_progs[i] != NULL) { - delete internal_progs[i]; - internal_progs[i] = NULL; - } - } - internal_progs.clear(); - } - - void PROGRAMS_MakeFile(char const * const name,PROGRAMS_Main * main,const char *dir) { - uint32_t size=sizeof(exe_block)+sizeof(uint8_t); - InternalProgramEntry *ipe; - uint8_t *comdata; - uint8_t index; - - /* Copy save the pointer in the vector and save its index */ - if (internal_progs.size()>255) E_Exit("PROGRAMS_MakeFile program size too large (%d)",static_cast(internal_progs.size())); - - index = (uint8_t)internal_progs.size(); - comdata = (uint8_t *)malloc(32); //MEM LEAK - memcpy(comdata,&exe_block,sizeof(exe_block)); - memcpy(&comdata[sizeof(exe_block)],&index,sizeof(index)); - comdata[CB_POS]=(uint8_t)(call_program&0xff); - comdata[CB_POS+1]=(uint8_t)((call_program>>8)&0xff); - - ipe = new InternalProgramEntry(); - ipe->main = main; - ipe->name = name; - ipe->comsize = size; - ipe->comdata = comdata; - internal_progs.push_back(ipe); - internal_program = true; - VFILE_Register(name,ipe->comdata,ipe->comsize,dir); - internal_program = false; - } - - static Bitu PROGRAMS_Handler(void) { - /* This sets up everything for a program start up call */ - Bitu size=sizeof(uint8_t); - uint8_t index; - /* Read the index from program code in memory */ - PhysPt reader=PhysMake(dos.psp(),256+sizeof(exe_block)); - HostPt writer=(HostPt)&index; - for (;size>0;size--) *writer++=mem_readb(reader++); - Program * new_program = NULL; - if (index >= internal_progs.size()) E_Exit("something is messing with the memory"); - InternalProgramEntry *ipe = internal_progs[index]; - if (ipe == NULL) E_Exit("Attempt to run internal program slot with nothing allocated"); - if (ipe->main == NULL) return CBRET_NONE; - PROGRAMS_Main * handler = internal_progs[index]->main; - (*handler)(&new_program); - - try { /* "BOOT" can throw an exception (int(2)) */ - new_program->Run(); - delete new_program; - } - catch (...) { /* well if it happened, free the program anyway to avert memory leaks */ - delete new_program; - throw; /* pass it on */ - } - - return CBRET_NONE; - } - - /* Main functions used in all program */ - - Program::Program() { - /* Find the command line and setup the PSP */ - psp = new DOS_PSP(dos.psp()); - /* Scan environment for filename */ - PhysPt envscan=PhysMake(psp->GetEnvironment(),0); - while (mem_readb(envscan)) envscan+=(PhysPt)(mem_strlen(envscan)+1); - envscan+=3; - CommandTail tail; - MEM_BlockRead(PhysMake(dos.psp(),CTBUF+1),&tail,CTBUF+1); - if (tail.countSecureMode() ||*/ cmd->Get_arglength() > 100 && full_arguments.size()) { - CommandLine* temp = new CommandLine(cmd->GetFileName(),full_arguments.c_str()); - delete cmd; - cmd = temp; - } - full_arguments.assign(""); //Clear so it gets even more save - } - - bool resetcolor = false; - static char last_written_character = 0;//For 0xA to OxD 0xA expansion - void Program::WriteOut(const char * format,...) { - uint8_t attr = DOS_GetAnsiAttr(); - char buf[2048]; - va_list msg; - - va_start(msg,format); - vsnprintf(buf,2047,format,msg); - va_end(msg); - - // printf("%s", buf); - - uint16_t size = (uint16_t)strlen(buf); - dos.internal_output=true; - for(uint16_t i = 0; i < size;i++) { - uint8_t out;uint16_t s=1; - if (buf[i] == 0xA && last_written_character != 0xD) { - out = 0xD; - DOS_WriteFile(STDOUT,&out,&s); - } - last_written_character = (char)(out = (uint8_t)buf[i]); - DOS_WriteFile(STDOUT,&out,&s); - } - dos.internal_output=false; - if (resetcolor && attr) DOS_SetAnsiAttr(attr); - resetcolor = false; - - // DOS_WriteFile(STDOUT,(uint8_t *)buf,&size); - } - - void Program::WriteOut(const char *format, const char *arguments) { - char buf[2048 + CMD_MAXLINE]; - sprintf(buf,format,arguments); - - // printf("%s", buf); - uint16_t size = (uint16_t)strlen(buf); - dos.internal_output=true; - for(uint16_t i = 0; i < size;i++) { - uint8_t out;uint16_t s=1; - if (buf[i] == 0xA && last_written_character != 0xD) { - out = 0xD;DOS_WriteFile(STDOUT,&out,&s); - } - last_written_character = (char)(out = (uint8_t)buf[i]); - DOS_WriteFile(STDOUT,&out,&s); - } - dos.internal_output=false; - - // DOS_WriteFile(STDOUT,(uint8_t *)buf,&size); - } - - int Program::WriteOut_NoParsing(const char * format, bool dbcs) { - uint16_t size = (uint16_t)strlen(format); - char const* buf = format; - char last2 = 0, last3 = 0; - int lastcol = 0, COLS=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); - uint8_t page=outcon?real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE):0; - bool lead=false; - dos.internal_output=true; - int rcount = 0; - for(uint16_t i = 0; i < size;i++) { - uint8_t out;uint16_t s=1; - BIOS_NCOLS; - if (!CURSOR_POS_COL(page)) last2=last3=0; - if (lead) lead = false; - else if ((IS_PC98_ARCH || isDBCSCP()) - #if defined(USE_TTF) - && dbcs_sbcs - #endif - && dbcs && isKanji1(buf[i])) lead = true; - if (buf[i] == 0xA) { - if (last_written_character != 0xD) {out = 0xD;DOS_WriteFile(STDOUT,&out,&s);} - if (outcon) rcount++; - } else if (outcon && lead && CURSOR_POS_COL(page)==COLS-1 && !(TTF_using() - #if defined(USE_TTF) - && autoboxdraw - #endif - && CheckBoxDrawing(last3, last2, last_written_character, buf[i]))) { - out = 0xD;DOS_WriteFile(STDOUT,&out,&s); - out = 0xA;DOS_WriteFile(STDOUT,&out,&s); - rcount++; - } else if (outcon && !CURSOR_POS_COL(page) && lastcol == COLS-1) - rcount++; - lastcol=CURSOR_POS_COL(page); - last3=last2;last2=last_written_character; - last_written_character = (char)(out = (uint8_t)buf[i]); - DOS_WriteFile(STDOUT,&out,&s); - } - dos.internal_output=false; - return rcount; - - // DOS_WriteFile(STDOUT,(uint8_t *)format,&size); - } - - static bool LocateEnvironmentBlock(PhysPt &env_base,PhysPt &env_fence,Bitu env_seg) { - if (env_seg == 0) { - /* The DOS program might have freed it's environment block perhaps. */ - return false; - } - - DOS_MCB env_mcb((uint16_t)(env_seg-1)); /* read the environment block's MCB to determine how large it is */ - env_base = PhysMake((uint16_t)env_seg,0); - env_fence = env_base + (PhysPt)(env_mcb.GetSize() << 4u); - return true; - } - - int EnvPhys_StrCmp(PhysPt es,PhysPt ef,const char *ls) { - (void)ef;//UNUSED - while (1) { - unsigned char a = mem_readb(es++); - unsigned char b = (unsigned char)(*ls++); - if (a == '=') a = 0; - if (a == 0 && b == 0) break; - if (a == b) continue; - return (int)a - (int)b; - } - - return 0; - } - - void EnvPhys_StrCpyToCPPString(std::string &result,PhysPt &env_scan,PhysPt env_fence) { - char tmp[512],*w=tmp,*wf=tmp+sizeof(tmp)-1; - - result.clear(); - while (env_scan < env_fence) { - char c; - if ((c=(char)mem_readb(env_scan++)) == 0) break; - - if (w >= wf) { - *w = 0; - result += tmp; - w = tmp; - } - - assert(w < wf); - *w++ = c; - } - if (w != tmp) { - *w = 0; - result += tmp; - } - } - - bool EnvPhys_ScanUntilNextString(PhysPt &env_scan,PhysPt env_fence) { - /* scan until end of block or NUL */ - while (env_scan < env_fence && mem_readb(env_scan) != 0) env_scan++; - - /* if we hit the fence, that's something to warn about. */ - if (env_scan >= env_fence) { - LOG_MSG("Warning: environment string scan hit the end of the environment block without terminating NUL\n"); - return false; - } - - /* if we stopped at anything other than a NUL, that's something to warn about */ - if (mem_readb(env_scan) != 0) { - LOG_MSG("Warning: environment string scan scan stopped without hitting NUL\n"); - return false; - } - - env_scan++; /* skip NUL */ - return true; - } - - bool Program::GetEnvStr(const char * entry,std::string & result) { - PhysPt env_base,env_fence,env_scan; - - if (dos_kernel_disabled) { - LOG_MSG("BUG: Program::GetEnvNum() called with DOS kernel disabled (such as OS boot).\n"); - return false; - } - - if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) { - LOG_MSG("Warning: GetEnvCount() was not able to locate the program's environment block\n"); - return false; - } - - std::string bigentry(entry); - for (std::string::iterator it = bigentry.begin(); it != bigentry.end(); ++it) *it = toupper(*it); - - env_scan = env_base; - while (env_scan < env_fence) { - /* "NAME" + "=" + "VALUE" + "\0" */ - /* end of the block is a NULL string meaning a \0 follows the last string's \0 */ - if (mem_readb(env_scan) == 0) break; /* normal end of block */ - - if (EnvPhys_StrCmp(env_scan,env_fence,bigentry.c_str()) == 0) { - EnvPhys_StrCpyToCPPString(result,env_scan,env_fence); - return true; - } - - if (!EnvPhys_ScanUntilNextString(env_scan,env_fence)) break; - } - - return false; - } - - bool Program::GetEnvNum(Bitu want_num,std::string & result) { - PhysPt env_base,env_fence,env_scan; - Bitu num = 0; - - if (dos_kernel_disabled) { - LOG_MSG("BUG: Program::GetEnvNum() called with DOS kernel disabled (such as OS boot).\n"); - return false; - } - - if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) { - LOG_MSG("Warning: GetEnvCount() was not able to locate the program's environment block\n"); - return false; - } - - result.clear(); - env_scan = env_base; - while (env_scan < env_fence) { - /* "NAME" + "=" + "VALUE" + "\0" */ - /* end of the block is a NULL string meaning a \0 follows the last string's \0 */ - if (mem_readb(env_scan) == 0) break; /* normal end of block */ - - if (num == want_num) { - EnvPhys_StrCpyToCPPString(result,env_scan,env_fence); - return true; - } - - num++; - if (!EnvPhys_ScanUntilNextString(env_scan,env_fence)) break; - } - - return false; - } - - Bitu Program::GetEnvCount(void) { - PhysPt env_base,env_fence,env_scan; - Bitu num = 0; - - if (dos_kernel_disabled) { - LOG_MSG("BUG: Program::GetEnvCount() called with DOS kernel disabled (such as OS boot).\n"); - return 0; - } - - if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) { - LOG_MSG("Warning: GetEnvCount() was not able to locate the program's environment block\n"); - return false; - } - - env_scan = env_base; - while (env_scan < env_fence) { - /* "NAME" + "=" + "VALUE" + "\0" */ - /* end of the block is a NULL string meaning a \0 follows the last string's \0 */ - if (mem_readb(env_scan++) == 0) break; /* normal end of block */ - num++; - if (!EnvPhys_ScanUntilNextString(env_scan,env_fence)) break; - } - - return num; - } - - void Program::DebugDumpEnv() { - PhysPt env_base,env_fence,env_scan; - unsigned char c; - std::string tmp; - - if (dos_kernel_disabled) - return; - - if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) - return; - - env_scan = env_base; - LOG_MSG("DebugDumpEnv()"); - while (env_scan < env_fence) { - if (mem_readb(env_scan) == 0) break; - - while (env_scan < env_fence) { - if ((c=mem_readb(env_scan++)) == 0) break; - tmp += (char)c; - } - - LOG_MSG("...%s",tmp.c_str()); - tmp = ""; - } - } - - bool Program::FirstEnv(const char * entry) { - PhysPt env_base,env_fence,env_scan,env_first,env_last; - bool found = false; - - if (dos_kernel_disabled) { - LOG_MSG("BUG: Program::FirstEnv() called with DOS kernel disabled (such as OS boot).\n"); - return false; - } - - if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) { - LOG_MSG("Warning: GetEnvCount() was not able to locate the program's environment block\n"); - return false; - } - - std::string bigentry(entry); - for (std::string::iterator it = bigentry.begin(); it != bigentry.end(); ++it) *it = toupper(*it); - - env_scan = env_base; - while (env_scan < env_fence) { - /* "NAME" + "=" + "VALUE" + "\0" */ - /* end of the block is a NULL string meaning a \0 follows the last string's \0 */ - if (mem_readb(env_scan) == 0) break; /* normal end of block */ - - if (EnvPhys_StrCmp(env_scan,env_fence,bigentry.c_str()) == 0) { - found = true; - break; - } - - if (!EnvPhys_ScanUntilNextString(env_scan,env_fence)) break; - } - - if (found) { - env_first = env_scan; - if (!EnvPhys_ScanUntilNextString(env_scan,env_fence)) return false; - env_last = env_scan; - - #if 0//DEBUG - fprintf(stderr,"Env base=%x fence=%x first=%x last=%x\n", - (unsigned int)env_base, (unsigned int)env_fence, - (unsigned int)env_first, (unsigned int)env_last); - #endif - - assert(env_first <= env_last); - - /* if the variable is already at the beginning, do nothing */ - if (env_first == env_base) return true; - - { - std::vector tmp; - tmp.resize(size_t(env_last-env_first)); - - /* save variable */ - for (size_t i=0;i < tmp.size();i++) - tmp[i] = mem_readb(env_first+(PhysPt)i); - - /* shift all variables prior to it forward over the variable, BACKWARDS */ - const size_t pl = size_t(env_first - env_base); - assert((env_first-pl) == env_base); - assert((env_last-pl) >= env_base); - assert(env_first < env_last); - assert(pl != 0); - for (size_t i=0;i < pl;i++) mem_writeb(env_last-(i+1), mem_readb(env_first-(i+1))); - - /* put the variable in at the beginning */ - assert((env_base+tmp.size()) == (env_last-pl)); - for (size_t i=0;i < tmp.size();i++) - mem_writeb(env_base+(PhysPt)i,tmp[i]); - } - } - - return true; - } - - bool Program::EraseEnv(void) { - PhysPt env_base,env_fence; - size_t nsl = 0,el = 0,needs; - - if (dos_kernel_disabled) { - LOG_MSG("BUG: Program::EraseEnv() called with DOS kernel disabled (such as OS boot).\n"); - return false; - } - - if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) { - LOG_MSG("Warning: SetEnv() was not able to locate the program's environment block\n"); - return false; - } - - for (PhysPt w=env_base;w < env_fence;w++) - mem_writeb(w,0); - - return true; - } - - /* NTS: "entry" string must have already been converted to uppercase */ - bool Program::SetEnv(const char * entry,const char * new_string) { - PhysPt env_base,env_fence,env_scan; - size_t nsl = 0,el = 0,needs; - - if (dos_kernel_disabled) { - LOG_MSG("BUG: Program::SetEnv() called with DOS kernel disabled (such as OS boot).\n"); - return false; - } - - if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) { - LOG_MSG("Warning: SetEnv() was not able to locate the program's environment block\n"); - return false; - } - - std::string bigentry(entry); - for (std::string::iterator it = bigentry.begin(); it != bigentry.end(); ++it) *it = toupper(*it); - - el = strlen(bigentry.c_str()); - if (*new_string != 0) nsl = strlen(new_string); - needs = nsl+1+el+1+1; /* entry + '=' + new_string + '\0' + '\0' */ - - /* look for the variable in the block. break the loop if found */ - env_scan = env_base; - while (env_scan < env_fence) { - if (mem_readb(env_scan) == 0) break; - - if (EnvPhys_StrCmp(env_scan,env_fence,bigentry.c_str()) == 0) { - /* found it. remove by shifting the rest of the environment block over */ - int zeroes=0; - PhysPt s,d; - - /* before we remove it: is there room for the new value? */ - if (nsl != 0) { - if ((env_scan+needs) > env_fence) { - LOG_MSG("Program::SetEnv() error, insufficient room for environment variable %s=%s (replacement)\n",bigentry.c_str(),new_string); - DebugDumpEnv(); - return false; - } - } - - s = env_scan; d = env_scan; - while (s < env_fence && mem_readb(s) != 0) s++; - if (s < env_fence && mem_readb(s) == 0) s++; - - while (s < env_fence) { - unsigned char b = mem_readb(s++); - - if (b == 0) zeroes++; - else zeroes=0; - - mem_writeb(d++,b); - if (zeroes >= 2) break; /* two consecutive zeros means the end of the block */ - } - } - else { - /* scan to next string */ - if (!EnvPhys_ScanUntilNextString(env_scan,env_fence)) break; - } - } - - /* At this point, env_scan points to the first byte beyond the block */ - /* add the string to the end of the block */ - if (*new_string != 0) { - if ((env_scan+needs) > env_fence) { - LOG_MSG("Program::SetEnv() error, insufficient room for environment variable %s=%s (addition)\n",bigentry.c_str(),new_string); - DebugDumpEnv(); - return false; - } - - assert(env_scan < env_fence); - for (const char *s=bigentry.c_str();*s != 0;) mem_writeb(env_scan++,(uint8_t)(*s++)); - mem_writeb(env_scan++,'='); - - assert(env_scan < env_fence); - for (const char *s=new_string;*s != 0;) mem_writeb(env_scan++,(uint8_t)(*s++)); - mem_writeb(env_scan++,0); - mem_writeb(env_scan++,0); - - assert(env_scan <= env_fence); - } - - return true; - } - - bool MSG_Write(const char *, const char *); - - /*! \brief CONFIG.COM utility to control configuration and files - * - * \description Utility to write configuration, set configuration, - * and other configuration related functions. - */ - class CONFIG : public Program { - public: - /*! \brief Program entry point, when the command is run - */ - void Run(void) override; - private: - void restart(const char* useconfig); - - void writeconf(std::string name, bool configdir,int everything, bool norem) { - // "config -wcd" should write to the config directory - if (configdir) { - // write file to the default config directory - std::string config_path; - Cross::GetPlatformConfigDir(config_path); - struct stat info; - if (!stat(config_path.c_str(), &info) || !(info.st_mode & S_IFDIR)) { - #ifdef WIN32 - CreateDirectory(config_path.c_str(), NULL); - #else - mkdir(config_path.c_str(), 0755); - #endif - } - name = config_path + name; - } - WriteOut(MSG_Get("PROGRAM_CONFIG_FILE_WHICH"),name.c_str()); - if (!control->PrintConfig(name.c_str(),everything,norem)) { - WriteOut(MSG_Get("PROGRAM_CONFIG_FILE_ERROR"),name.c_str()); - } - return; - } - - bool securemode_check() { - if (control->SecureMode()) { - WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW")); - return true; - } - return false; - } - }; - - void dos_ver_menu(bool start), ReloadMapper(Section_prop *sec, bool init), SetGameState_Run(int value), update_dos_ems_menu(void), MountAllDrives(bool quiet), GFX_SwitchFullScreen(void), RebootConfig(std::string filename, bool confirm=false); - bool set_ver(char *s), GFX_IsFullscreen(void); - - void Load_Language(std::string name) { - if(control->opt_lang != "") control->opt_lang = name; - MSG_Init(); - #if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU || DOSBOXMENU_TYPE == DOSBOXMENU_NSMENU - mainMenu.unbuild(); - mainMenu.rebuild(); - #endif - if (!GFX_GetPreventFullscreen()) { - if (menu.toggle) DOSBox_SetMenu(); else DOSBox_NoMenu(); - } - #if defined(USE_TTF) - if (TTF_using()) resetFontSize(); - #endif - #if 0 - if (!uselangcp && !incall) { - int oldmsgcp = msgcodepage; - msgcodepage = dos.loaded_codepage; - SetKEYBCP(); - msgcodepage = oldmsgcp; - } - #endif - } - - void ApplySetting(std::string pvar, std::string inputline, bool quiet) { - if (!strcasecmp(pvar.c_str(), "dosbox")||!strcasecmp(pvar.c_str(), "dos")||!strcasecmp(pvar.c_str(), "dosv")||!strcasecmp(pvar.c_str(), "cpu")||!strcasecmp(pvar.c_str(), "sdl")||!strcasecmp(pvar.c_str(), "ttf")||!strcasecmp(pvar.c_str(), "render")||!strcasecmp(pvar.c_str(), "serial")||!strcasecmp(pvar.c_str(), "parallel")||!strcasecmp(pvar.c_str(), "printer")) { - Section_prop *section = static_cast(control->GetSection(pvar.c_str())); - if (section != NULL) { - if (!strcasecmp(pvar.c_str(), "dosbox")) { - force_nocachedir = section->Get_bool("nocachedir"); - sync_time = section->Get_bool("synchronize time"); - if (!strcasecmp(inputline.substr(0, 17).c_str(), "synchronize time=")) { - manualtime=false; - mainMenu.get_item("sync_host_datetime").check(sync_time).refresh_item(mainMenu); - } - std::string freesizestr = section->Get_string("freesizecap"); - if (freesizestr == "fixed" || freesizestr == "false" || freesizestr == "0") freesizecap = 0; - else if (freesizestr == "relative" || freesizestr == "2") freesizecap = 2; - else freesizecap = 1; - convertimg = section->Get_bool("convertdrivefat"); - wpcolon = section->Get_bool("leading colon write protect image"); - lockmount = section->Get_bool("locking disk image mount"); - if (!strcasecmp(inputline.substr(0, 9).c_str(), "saveslot=")) SetGameState_Run(section->Get_int("saveslot")-1); - if (!strcasecmp(inputline.substr(0, 11).c_str(), "saveremark=")) { - noremark_save_state = !section->Get_bool("saveremark"); - mainMenu.get_item("noremark_savestate").check(noremark_save_state).refresh_item(mainMenu); - } - if (!strcasecmp(inputline.substr(0, 15).c_str(), "forceloadstate=")) { - force_load_state = section->Get_bool("forceloadstate"); - mainMenu.get_item("force_loadstate").check(force_load_state).refresh_item(mainMenu); - } - if (!strcasecmp(inputline.substr(0, 23).c_str(), "show recorded filename=")) - show_recorded_filename = section->Get_bool("show recorded filename"); - if (!strcasecmp(inputline.substr(0, 6).c_str(), "title=")) { - dosbox_title=section->Get_string("title"); - trim(dosbox_title); - } - if (!strcasecmp(inputline.substr(0, 9).c_str(), "language=")) - Load_Language(section->Get_string("language")); - if (!strcasecmp(inputline.substr(0, 16).c_str(), "mapper send key=")) { - std::string mapsendkey = section->Get_string("mapper send key"); - if (mapsendkey=="winlogo") sendkeymap=1; - else if (mapsendkey=="winmenu") sendkeymap=2; - else if (mapsendkey=="alttab") sendkeymap=3; - else if (mapsendkey=="ctrlesc") sendkeymap=4; - else if (mapsendkey=="ctrlbreak") sendkeymap=5; - else sendkeymap=0; - mainMenu.get_item("sendkey_mapper_winlogo").check(sendkeymap==1).refresh_item(mainMenu); - mainMenu.get_item("sendkey_mapper_winmenu").check(sendkeymap==2).refresh_item(mainMenu); - mainMenu.get_item("sendkey_mapper_alttab").check(sendkeymap==3).refresh_item(mainMenu); - mainMenu.get_item("sendkey_mapper_ctrlesc").check(sendkeymap==4).refresh_item(mainMenu); - mainMenu.get_item("sendkey_mapper_ctrlbreak").check(sendkeymap==5).refresh_item(mainMenu); - mainMenu.get_item("sendkey_mapper_cad").check(!sendkeymap).refresh_item(mainMenu); - } - } else if (!strcasecmp(pvar.c_str(), "sdl")) { - modifier = section->Get_string("clip_key_modifier"); - paste_speed = section->Get_int("clip_paste_speed"); - if (!strcasecmp(inputline.substr(0, 16).c_str(), "mouse_wheel_key=")) { - wheel_key = section->Get_int("mouse_wheel_key"); - wheel_guest=wheel_key>0; - if (wheel_key<0) wheel_key=-wheel_key; - mainMenu.get_item("wheel_updown").check(wheel_key==1).refresh_item(mainMenu); - mainMenu.get_item("wheel_leftright").check(wheel_key==2).refresh_item(mainMenu); - mainMenu.get_item("wheel_pageupdown").check(wheel_key==3).refresh_item(mainMenu); - mainMenu.get_item("wheel_ctrlupdown").check(wheel_key==4).refresh_item(mainMenu); - mainMenu.get_item("wheel_ctrlleftright").check(wheel_key==5).refresh_item(mainMenu); - mainMenu.get_item("wheel_ctrlpageupdown").check(wheel_key==6).refresh_item(mainMenu); - mainMenu.get_item("wheel_ctrlwz").check(wheel_key==7).refresh_item(mainMenu); - mainMenu.get_item("wheel_none").check(wheel_key==0).refresh_item(mainMenu); - mainMenu.get_item("wheel_guest").check(wheel_guest).refresh_item(mainMenu); - } - if (!strcasecmp(inputline.substr(0, 12).c_str(), "sensitivity=")) { - Prop_multival* p3 = static_cast(section)->Get_multival("sensitivity"); - sdl.mouse.xsensitivity = p3->GetSection()->Get_int("xsens"); - sdl.mouse.ysensitivity = p3->GetSection()->Get_int("ysens"); - } - #if C_GAMELINK - if (!strcasecmp(inputline.substr(0, 22).c_str(), "gamelink load address=")) { - sdl.gamelink.loadaddr = section->Get_int("gamelink load address"); - } - #endif - if (!strcasecmp(inputline.substr(0, 11).c_str(), "fullscreen=")) { - if (section->Get_bool("fullscreen")) { - if (!GFX_IsFullscreen()) {GFX_LosingFocus();GFX_SwitchFullScreen();} - } else if (GFX_IsFullscreen()) {GFX_LosingFocus();GFX_SwitchFullScreen();} - } - if (!strcasecmp(inputline.substr(0, 7).c_str(), "output=")) { - std::string output=section->Get_string("output"); - if (output == "default") output=GetDefaultOutput(); - GFX_LosingFocus(); - toOutput(output.c_str()); - #if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU - if (!GFX_GetPreventFullscreen()) { - if (menu.toggle) DOSBox_SetMenu(); else DOSBox_NoMenu(); - } - #endif - #if defined(WIN32) && !defined(HX_DOS) - DOSBox_SetSysMenu(); - #endif - } - if (!strcasecmp(inputline.substr(0, 13).c_str(), "transparency=")) - SetWindowTransparency(section->Get_int("transparency")); - #if defined(C_SDL2) - if (!strcasecmp(inputline.substr(0, 16).c_str(), "mapperfile_sdl2=")) ReloadMapper(section,true); - #else - if (!strcasecmp(inputline.substr(0, 16).c_str(), "mapperfile_sdl1=")) ReloadMapper(section,true); - #if !defined(HAIKU) && !defined(RISCOS) - if (!strcasecmp(inputline.substr(0, 11).c_str(), "mapperfile=")) { - Prop_path* pp; - #if defined(C_SDL2) - pp = section->Get_path("mapperfile_sdl2"); - #else - pp = section->Get_path("mapperfile_sdl1"); - #endif - if (pp->realpath=="") ReloadMapper(section,true); - } - if (!strcasecmp(inputline.substr(0, 13).c_str(), "usescancodes=")) { - void setScanCode(Section_prop * section), loadScanCode(), MAPPER_Init(); - setScanCode(section); - loadScanCode(); - GFX_LosingFocus(); - MAPPER_Init(); - load=true; - } - #endif - #endif - if (!strcasecmp(inputline.substr(0, 8).c_str(), "display=")) { - void SetDisplayNumber(int display); - int numscreen = GetNumScreen(); - const int display = section->Get_int("display"); - if (display >= 0 && display <= numscreen) - SetDisplayNumber(display); - } - if (!strcasecmp(inputline.substr(0, 15).c_str(), "windowposition=")) { - const char* windowposition = section->Get_string("windowposition"); - int GetDisplayNumber(void); - #if defined(C_SDL2) || defined (WIN32) - int posx = -1, posy = -1; - #endif - if (windowposition && *windowposition) { - char result[100]; - safe_strncpy(result, windowposition, sizeof(result)); - char* y = strchr(result, ','); - if (y && *y) { - *y = 0; - #if defined(C_SDL2) || defined (WIN32) - posx = atoi(result); - posy = atoi(y + 1); - #endif - } - } - #if defined(C_SDL2) - SDL_Window* GFX_GetSDLWindow(void); - SDL_SetWindowTitle(GFX_GetSDLWindow(),"DOSBox-X"); - if (posx < 0 || posy < 0) { - SDL_DisplayMode dm; - int w = 640,h = 480; - SDL_GetWindowSize(GFX_GetSDLWindow(), &w, &h); - if (SDL_GetDesktopDisplayMode(GetDisplayNumber()?GetDisplayNumber()-1:0,&dm) == 0) { - posx = (dm.w - w)/2; - posy = (dm.h - h)/2; - } - } - if (GetDisplayNumber()>0) { - int displays = SDL_GetNumVideoDisplays(); - SDL_Rect bound; - for( int i = 1; i <= displays; i++ ) { - bound = SDL_Rect(); - SDL_GetDisplayBounds(i-1, &bound); - if (i == GetDisplayNumber()) { - posx += bound.x; - posy += bound.y; - break; - } - } - } - SDL_SetWindowPosition(GFX_GetSDLWindow(), posx, posy); - #elif defined(WIN32) - RECT rect; - MONITORINFO info; - GetWindowRect(GetHWND(), &rect); - #if !defined(HX_DOS) && !defined(_WIN32_WINDOWS) - if (GetDisplayNumber()>0) { - xyp xy={0}; - xy.x=-1; - xy.y=-1; - curscreen=0; - BOOL CALLBACK EnumDispProc(HMONITOR hMon, HDC dcMon, RECT* pRcMon, LPARAM lParam); - EnumDisplayMonitors(0, 0, EnumDispProc, reinterpret_cast(&xy)); - HMONITOR monitor = MonitorFromRect(&monrect, MONITOR_DEFAULTTONEAREST); - info.cbSize = sizeof(MONITORINFO); - GetMonitorInfo(monitor, &info); - if (posx >=0 && posy >=0) { - posx+=info.rcMonitor.left; - posy+=info.rcMonitor.top; - } else { - posx = info.rcMonitor.left+(info.rcMonitor.right-info.rcMonitor.left-(rect.right-rect.left))/2; - posy = info.rcMonitor.top+(info.rcMonitor.bottom-info.rcMonitor.top-(rect.bottom-rect.top))/2; - } - } else - #endif - if (posx < 0 && posy < 0) { - posx = (GetSystemMetrics(SM_CXSCREEN)-(rect.right-rect.left))/2; - posy = (GetSystemMetrics(SM_CYSCREEN)-(rect.bottom-rect.top))/2; - } - MoveWindow(GetHWND(), posx, posy, rect.right-rect.left, rect.bottom-rect.top, true); - #endif - } - - #if defined(USE_TTF) - if (TTF_using()) resetFontSize(); - #endif - } else if (!strcasecmp(pvar.c_str(), "cpu")) { - bool turbo = section->Get_bool("turbo"); - if (turbo != ticksLocked) DOSBOX_UnlockSpeed2(true); - } else if (!strcasecmp(pvar.c_str(), "dos")) { - mountwarning = section->Get_bool("mountwarning"); - if (!strcasecmp(inputline.substr(0, 15).c_str(), "autofixwarning=")) { - std::string autofixwarning=section->Get_string("autofixwarning"); - autofixwarn=autofixwarning=="false"||autofixwarning=="0"||autofixwarning=="none"?0:(autofixwarning=="a20fix"?1:(autofixwarning=="loadfix"?2:3)); - } else if (!strcasecmp(inputline.substr(0, 4).c_str(), "lfn=")) { - std::string lfn = section->Get_string("lfn"); - if (lfn=="true"||lfn=="1") enablelfn=1; - else if (lfn=="false"||lfn=="0") enablelfn=0; - else if (lfn=="autostart") enablelfn=-2; - else enablelfn=-1; - mainMenu.get_item("dos_lfn_auto").check(enablelfn==-1).refresh_item(mainMenu); - mainMenu.get_item("dos_lfn_enable").check(enablelfn==1).refresh_item(mainMenu); - mainMenu.get_item("dos_lfn_disable").check(enablelfn==0).refresh_item(mainMenu); - uselfn = enablelfn==1 || ((enablelfn == -1 || enablelfn == -2) && (dos.version.major>6 || winrun)); - } else if (!strcasecmp(inputline.substr(0, 16).c_str(), "fat32setversion=")) { - std::string fat32setverstr = section->Get_string("fat32setversion"); - if (fat32setverstr=="auto") fat32setver=1; - else if (fat32setverstr=="manual") fat32setver=0; - else fat32setver=-1; - } else if (!strcasecmp(inputline.substr(0, 4).c_str(), "ver=")) { - const char *ver = section->Get_string("ver"); - if (!*ver) { - dos.version.minor=0; - dos.version.major=5; - dos_ver_menu(false); - } else if (set_ver((char *)ver)) - dos_ver_menu(false); - } else if (!strcasecmp(inputline.substr(0, 4).c_str(), "ems=")) { - EMS_DoShutDown(); - EMS_Startup(NULL); - update_dos_ems_menu(); - } else if (!strcasecmp(inputline.substr(0, 32).c_str(), "shell configuration as commands=")) { - enable_config_as_shell_commands = section->Get_bool("shell configuration as commands"); - mainMenu.get_item("shell_config_commands").check(enable_config_as_shell_commands).enable(true).refresh_item(mainMenu); - } else if (!strcasecmp(inputline.substr(0, 18).c_str(), "dos clipboard api=")) { - clipboard_dosapi = section->Get_bool("dos clipboard api"); - mainMenu.get_item("clipboard_dosapi").check(clipboard_dosapi).refresh_item(mainMenu); - } else if (!strcasecmp(inputline.substr(0, 22).c_str(), "pipe temporary device=")) { - pipetmpdev = section->Get_bool("pipe temporary device"); - #if defined(WIN32) && !defined(HX_DOS) - } else if (!strcasecmp(inputline.substr(0, 13).c_str(), "automountall=")) { - const char *automountstr = section->Get_string("automountall"); - if (strcmp(automountstr, "0") && strcmp(automountstr, "false")) MountAllDrives(quiet||!strcmp(automountstr, "quiet")); - } else if (!strcasecmp(inputline.substr(0, 9).c_str(), "startcmd=")) { - winautorun = section->Get_bool("startcmd"); - mainMenu.get_item("dos_win_autorun").check(winautorun).enable(true).refresh_item(mainMenu); - #endif - #if defined(WIN32) && !defined(HX_DOS) || defined(LINUX) || defined(MACOSX) - } else if (!strcasecmp(inputline.substr(0, 15).c_str(), "starttranspath=")) { - starttranspath = section->Get_bool("starttranspath"); - mainMenu.get_item("dos_win_transpath").check(starttranspath).enable( - #if defined(WIN32) && !defined(HX_DOS) - true - #else - startcmd - #endif - ).refresh_item(mainMenu); - } else if (!strcasecmp(inputline.substr(0, 10).c_str(), "startwait=")) { - startwait = section->Get_bool("startwait"); - mainMenu.get_item("dos_win_wait").check(startwait).enable( - #if defined(WIN32) && !defined(HX_DOS) - true - #else - startcmd - #endif - ).refresh_item(mainMenu); - } else if (!strcasecmp(inputline.substr(0, 11).c_str(), "startquiet=")) { - startquiet = section->Get_bool("startquiet"); - mainMenu.get_item("dos_win_quiet").check(startquiet).enable( - #if defined(WIN32) && !defined(HX_DOS) - true - #else - startcmd - #endif - ).refresh_item(mainMenu); - #endif - } - } else if (!strcasecmp(pvar.c_str(), "ttf")) { - void ttf_reset(void), ttf_setlines(int cols, int lins), SetBlinkRate(Section_prop* section); - if (!strcasecmp(inputline.substr(0, 5).c_str(), "font=")) { - #if defined(USE_TTF) - if (TTF_using()) { - std::string font = section->Get_string("font"); - if (font.empty() && !IS_PC98_ARCH && !isDBCSCP()) notrysgf = true; - ttf_reset(); - notrysgf = false; - int missing = IS_PC98_ARCH ? 0 : setTTFMap(false); - if (missing > 0 && first_shell) first_shell->WriteOut(MSG_Get("SHELL_CMD_CHCP_MISSING"), missing); - - #if C_PRINTER - if (printfont) UpdateDefaultPrinterFont(); - #endif - } - #endif - } else if (!strcasecmp(inputline.substr(0, 7).c_str(), "ptsize=")||!strcasecmp(inputline.substr(0, 8).c_str(), "winperc=")) { - #if defined(USE_TTF) - lesssize = true; - if (TTF_using()) ttf_reset(); - lesssize = false; - #endif - } else if (!strcasecmp(inputline.substr(0, 5).c_str(), "lins=")||!strcasecmp(inputline.substr(0, 5).c_str(), "cols=")) { - #if defined(USE_TTF) - if (TTF_using()) { - bool iscol=!strcasecmp(inputline.substr(0, 5).c_str(), "cols="); - if (iscol&&IS_PC98_ARCH) - SetVal("render", "cols", "80"); - else if (!CurMode) - ; - else if (CurMode->type==M_TEXT || IS_PC98_ARCH) { - const char *str = "\033[2J"; - uint16_t n = (uint16_t)strlen(str); - DOS_WriteFile(STDOUT,(uint8_t *)str,&n); - if (quiet && first_shell) first_shell->ShowPrompt(); - } else { - reg_ax=CurMode->mode; - CALLBACK_RunRealInt(0x10); - } - lastset=iscol?2:1; - ttf_setlines(0, 0); - lastset=0; - } - #endif - } else if (!strcasecmp(inputline.substr(0, 13).c_str(), "outputswitch=")) { - #if defined(USE_TTF) - SetOutputSwitch(section->Get_string("outputswitch")); - #endif - } else if (!strcasecmp(inputline.substr(0, 7).c_str(), "colors=")) { - #if defined(USE_TTF) - if (TTF_using() && !strlen(section->Get_string("colors"))) ttf_reset_colors(); - #endif - } else if (!strcasecmp(inputline.substr(0, 3).c_str(), "wp=")) { - #if defined(USE_TTF) - const char *wpstr=section->Get_string("wp"); - wpType=wpVersion=0; - if (strlen(wpstr)>1) { - if (!strncasecmp(wpstr, "WP", 2)) wpType=1; - else if (!strncasecmp(wpstr, "WS", 2)) wpType=2; - else if (!strncasecmp(wpstr, "XY", 3)) wpType=3; - if (strlen(wpstr)>2&&wpstr[2]>='1'&&wpstr[2]<='9') wpVersion=wpstr[2]-'0'; - } - mainMenu.get_item("ttf_wpno").check(!wpType).refresh_item(mainMenu); - mainMenu.get_item("ttf_wpwp").check(wpType==1).refresh_item(mainMenu); - mainMenu.get_item("ttf_wpws").check(wpType==2).refresh_item(mainMenu); - mainMenu.get_item("ttf_wpxy").check(wpType==3).refresh_item(mainMenu); - mainMenu.get_item("ttf_wpfe").check(wpType==4).refresh_item(mainMenu); - if (TTF_using()) resetFontSize(); - #endif - } else if (!strcasecmp(inputline.substr(0, 5).c_str(), "wpbg=")) { - #if defined(USE_TTF) - wpBG = section->Get_int("wpbg"); - if (TTF_using()) resetFontSize(); - #endif - } else if (!strcasecmp(inputline.substr(0, 5).c_str(), "wpfg=")) { - #if defined(USE_TTF) - wpFG = section->Get_int("wpfg"); - if (wpFG<0) wpFG = 7; - if (TTF_using()) resetFontSize(); - #endif - } else if (!strcasecmp(inputline.substr(0, 5).c_str(), "bold=")) { - #if defined(USE_TTF) - showbold = section->Get_bool("bold"); - mainMenu.get_item("ttf_showbold").check(showbold).refresh_item(mainMenu); - if (TTF_using()) resetFontSize(); - #endif - } else if (!strcasecmp(inputline.substr(0, 7).c_str(), "italic=")) { - #if defined(USE_TTF) - showital = section->Get_bool("italic"); - mainMenu.get_item("ttf_showital").check(showital).refresh_item(mainMenu); - if (TTF_using()) resetFontSize(); - #endif - } else if (!strcasecmp(inputline.substr(0, 10).c_str(), "underline=")) { - #if defined(USE_TTF) - showline = section->Get_bool("underline"); - mainMenu.get_item("ttf_showline").check(showline).refresh_item(mainMenu); - if (TTF_using()) resetFontSize(); - #endif - } else if (!strcasecmp(inputline.substr(0, 10).c_str(), "strikeout=")) { - #if defined(USE_TTF) - showsout = section->Get_bool("strikeout"); - mainMenu.get_item("ttf_showsout").check(showsout).refresh_item(mainMenu); - if (TTF_using()) resetFontSize(); - #endif - } else if (!strcasecmp(inputline.substr(0, 8).c_str(), "char512=")) { - #if defined(USE_TTF) - char512 = section->Get_bool("char512"); - if (TTF_using()) resetFontSize(); - #endif - } else if (!strcasecmp(inputline.substr(0, 12).c_str(), "righttoleft=")) { - #if defined(USE_TTF) - rtl = section->Get_bool("righttoleft"); - mainMenu.get_item("ttf_right_left").check(rtl).refresh_item(mainMenu); - if (TTF_using()) resetFontSize(); - #endif - } else if (!strcasecmp(inputline.substr(0, 10).c_str(), "printfont=")) { - #if defined(USE_TTF) && C_PRINTER - printfont = section->Get_bool("printfont"); - mainMenu.get_item("ttf_printfont").check(printfont).refresh_item(mainMenu); - UpdateDefaultPrinterFont(); - #endif - } else if (!strcasecmp(inputline.substr(0, 9).c_str(), "autodbcs=")) { - #if defined(USE_TTF) - dbcs_sbcs = section->Get_bool("autodbcs"); - mainMenu.get_item("mapper_dbcssbcs").check(dbcs_sbcs).refresh_item(mainMenu); - if (TTF_using()) resetFontSize(); - #endif - } else if (!strcasecmp(inputline.substr(0, 12).c_str(), "autoboxdraw=")) { - #if defined(USE_TTF) - autoboxdraw = section->Get_bool("autoboxdraw"); - mainMenu.get_item("mapper_autoboxdraw").check(autoboxdraw).refresh_item(mainMenu); - if (TTF_using()) resetFontSize(); - #endif - } else if (!strcasecmp(inputline.substr(0, 14).c_str(), "halfwidthkana=")) { - #if defined(USE_TTF) - halfwidthkana = section->Get_bool("halfwidthkana"); - mainMenu.get_item("ttf_halfwidthkana").check(halfwidthkana||IS_PC98_ARCH||IS_JEGA_ARCH).refresh_item(mainMenu); - if (TTF_using()) {setTTFCodePage();resetFontSize();} - #endif - } else if (!strcasecmp(inputline.substr(0, 7).c_str(), "blinkc=")) { - #if defined(USE_TTF) - SetBlinkRate(section); - mainMenu.get_item("ttf_blinkc").check(blinkCursor>-1).refresh_item(mainMenu); - #endif - } else if (!strcasecmp(inputline.substr(0, 4).c_str(), "gbk=")) { - if (gbk != section->Get_bool("gbk")) { - gbk = !gbk; - if (enable_dbcs_tables&&dos.tables.dbcs&&(IS_PDOSV||dos.loaded_codepage==936)) mem_writeb(Real2Phys(dos.tables.dbcs)+2,gbk?0x81:0xA1); - clearFontCache(); - if (dos.loaded_codepage!=950&&dos.loaded_codepage!=951) mainMenu.get_item("ttf_extcharset").check(dos.loaded_codepage==936?gbk:(gbk&&chinasea)).refresh_item(mainMenu); - #if defined(USE_TTF) - if (TTF_using() && dos.loaded_codepage==936) resetFontSize(); - #endif - } - } else if (!strcasecmp(inputline.substr(0, 9).c_str(), "chinasea=")) { - if (chinasea != section->Get_bool("chinasea")) { - chinasea = !chinasea; - if (!chinasea) makestdcp950table(); - else makeseacp951table(); - clearFontCache(); - if (dos.loaded_codepage!=936) mainMenu.get_item("ttf_extcharset").check(dos.loaded_codepage==950||dos.loaded_codepage==951?chinasea:(gbk&&chinasea)).refresh_item(mainMenu); - if ((TTF_using() || showdbcs) && (dos.loaded_codepage==950 || dos.loaded_codepage==951)) { - MSG_Init(); - #if defined(USE_TTF) - if (TTF_using()) resetFontSize(); - #endif - } - } - } else if (!strcasecmp(inputline.substr(0, 4).c_str(), "uao=")) { - if (uao != section->Get_bool("uao")) { - uao = !uao; - clearFontCache(); - if ((TTF_using() || showdbcs) && dos.loaded_codepage==951) { - MSG_Init(); - DOSBox_SetSysMenu(); - #if defined(USE_TTF) - if (TTF_using()) resetFontSize(); - #endif - runRescan("-A -Q"); - } - } - } - } else if (!strcasecmp(pvar.c_str(), "dosv")) { - if (!strcasecmp(inputline.substr(0, 15).c_str(), "showdbcsnodosv=") - #if defined(USE_TTF) - && !ttfswitch - #endif - ) { - std::string showdbcsstr = section->Get_string("showdbcsnodosv"); - #if defined(USE_TTF) - showdbcs = showdbcsstr=="true"||showdbcsstr=="1"||(showdbcsstr=="auto" && (loadlang || dbcs_sbcs)); - #else - showdbcs = showdbcsstr=="true"||showdbcsstr=="1"||(showdbcsstr=="auto" && loadlang); - #endif - if (!IS_EGAVGA_ARCH) showdbcs = false; - } else if (!strcasecmp(inputline.substr(0, 11).c_str(), "fepcontrol=")||!strcasecmp(inputline.substr(0, 7).c_str(), "vtext1=")||!strcasecmp(inputline.substr(0, 7).c_str(), "vtext2=")) - DOSV_SetConfig(section); - } else if (!strcasecmp(pvar.c_str(), "render")) { - if (!strcasecmp(inputline.substr(0, 9).c_str(), "glshader=")) { - #if C_OPENGL - std::string LoadGLShader(Section_prop * section); - LoadGLShader(section); - GFX_ForceRedrawScreen(); - #endif - } else if (!strcasecmp(inputline.substr(0, 12).c_str(), "pixelshader=")) - GFX_ForceRedrawScreen(); - else if (!strcasecmp(inputline.substr(0, 13).c_str(), "aspect_ratio=")) { - setAspectRatio(section); - if (render.aspect) GFX_ForceRedrawScreen(); - } - } else if (!strcasecmp(pvar.c_str(), "serial")) { - if (!strcasecmp(inputline.substr(0, 6).c_str(), "serial") && inputline[7]=='=') { - std::string val = section->Get_string("serial" + std::string(1, inputline[6])), cmd = std::string(1, inputline[6]) + " " + (val.size()?val:"dummy"); - runSerial(cmd.c_str()); - } - } else if (!strcasecmp(pvar.c_str(), "parallel")) { - if (!strcasecmp(inputline.substr(0, 8).c_str(), "parallel") && inputline[9]=='=') { - std::string val = section->Get_string("parallel" + std::string(1, inputline[8])), cmd = std::string(1, inputline[8]) + " " + (val.size()?val:"disabled"); - runParallel(cmd.c_str()); - } - #if C_PRINTER - } else if (!strcasecmp(pvar.c_str(), "printer")) { - PRINTER_Shutdown(NULL); - PRINTER_Init(); - #endif - } - } - } - } - - void CONFIG::Run(void) { - static const char* const params[] = { - "-r", "-wcp", "-wcd", "-wc", "-writeconf", "-wcpboot", "-wcdboot", "-wcboot", "-writeconfboot", "-bootconf", "-bc", - "-l", "-rmconf", "-h", "-help", "-?", "-axclear", "-axadd", "-axtype", - "-avistart","-avistop", - "-startmapper", - "-get", "-set", "-setf", - "-writelang", "-wl", "-langname", "-ln", - "-securemode", "-setup", "-all", "-mod", "-norem", "-errtest", "-gui", NULL }; - /* HACK: P_ALL is in linux/wait.h */ - #if defined(P_ALL) - #define __P_ALL P_ALL - #undef P_ALL - #endif - enum prs { - P_NOMATCH, P_NOPARAMS, // fixed return values for GetParameterFromList - P_RESTART, - P_WRITECONF_PORTABLE, P_WRITECONF_DEFAULT, P_WRITECONF, P_WRITECONF2, - P_WRITECONF_PORTABLE_REBOOT, P_WRITECONF_DEFAULT_REBOOT, P_WRITECONF_REBOOT, P_WRITECONF2_REBOOT, - P_BOOTCONF, P_BOOTCONF2, P_LISTCONF, P_KILLCONF, - P_HELP, P_HELP2, P_HELP3, - P_AUTOEXEC_CLEAR, P_AUTOEXEC_ADD, P_AUTOEXEC_TYPE, - P_REC_AVI_START, P_REC_AVI_STOP, - P_START_MAPPER, - P_GETPROP, P_SETPROP, P_SETFORCE, - P_WRITELANG, P_WRITELANG2, P_LANGNAME, P_LANGNAME2, - P_SECURE, P_SETUP, P_ALL, P_MOD, P_NOREM, P_ERRTEST, P_GUI - } presult = P_NOMATCH; - - Section_prop * section=static_cast(control->GetSection("dosbox")); - int all = section->Get_bool("show advanced options")?1:-1; - bool first = true, norem = false; - std::vector pvars; - if (cmd->FindExist("-setup", true)) all = 2; - else if (cmd->FindExist("-all", true)) all = 1; - else if (cmd->FindExist("-mod", true)) all = 0; - if (cmd->FindExist("-norem", true)) norem = true; - // Loop through the passed parameters - while(presult != P_NOPARAMS) { - presult = (enum prs)cmd->GetParameterFromList(params, pvars); - switch(presult) { - - case P_SETUP: - all = 2; - break; - - case P_ALL: - if (all<1) all = 1; - break; - #if defined(__P_ALL) - #define P_ALL __P_ALL - #endif - - case P_MOD: - if (all==-1) all = 0; - break; - - case P_NOREM: - norem = true; - break; - - case P_GUI: - void GUI_Run(bool pressed); - GUI_Run(false); - break; - - case P_LANGNAME: case P_LANGNAME2: - if (pvars.size() < 1) { - WriteOut("%s\n", langname.c_str()); - return; - } else - langname=pvars[0]; - break; - - case P_ERRTEST: - exit_status = 1; - WriteExitStatus(); - return; - - case P_RESTART: - WriteOut("-restart is no longer supported\n"); - return; - - case P_LISTCONF: { - Bitu size = (Bitu)control->configfiles.size(); - std::string config_path; - Cross::GetPlatformConfigDir(config_path); - WriteOut(MSG_Get("PROGRAM_CONFIG_CONFDIR"), VERSION,config_path.c_str()); - char cwd[512] = "."; - // char *res = getcwd(cwd,sizeof(cwd)-1); - // if (res!=NULL) WriteOut(MSG_Get("PROGRAM_CONFIG_WORKDIR"), cwd); - if (size==0&&!configfile.size()) WriteOut(MSG_Get("PROGRAM_CONFIG_NOCONFIGFILE")); - else { - WriteOut(MSG_Get("PROGRAM_CONFIG_PRIMARY_CONF"),control->configfiles.front().c_str()); - if (size > 1) { - WriteOut(MSG_Get("PROGRAM_CONFIG_ADDITIONAL_CONF")); - for(Bitu i = 1; i < size; i++) - WriteOut("%s\n",control->configfiles[i].c_str()); - } - if (configfile.size()) WriteOut(MSG_Get("PROGRAM_CONFIG_GLOBAL_CONF"),configfile.c_str()); - } - if (control->startup_params.size() > 0) { - std::string test; - for(size_t k = 0; k < control->startup_params.size(); k++) - test += control->startup_params[k] + " "; - WriteOut(MSG_Get("PROGRAM_CONFIG_PRINT_STARTUP"), test.c_str()); - } - break; - } - case P_WRITECONF: case P_WRITECONF2: case P_WRITECONF_REBOOT: case P_WRITECONF2_REBOOT: - if (securemode_check()) return; - if (pvars.size() > 1) return; - else if (pvars.size() == 1) { - // write config to specific file, except if it is an absolute path - writeconf(pvars[0], !Cross::IsPathAbsolute(pvars[0]), all, norem); - if (presult==P_WRITECONF_REBOOT || presult==P_WRITECONF2_REBOOT) RebootConfig(pvars[0]); - } else { - // -wc without parameter: write primary config file - if (control->configfiles.size()) { - writeconf(control->configfiles[0], false, all, norem); - if (presult==P_WRITECONF_REBOOT || presult==P_WRITECONF2_REBOOT) RebootConfig(control->configfiles[0]); - } else WriteOut(MSG_Get("PROGRAM_CONFIG_NOCONFIGFILE")); - } - break; - case P_WRITECONF_DEFAULT: case P_WRITECONF_DEFAULT_REBOOT: { - // write to /userdir/dosbox-x-0.xx.conf - if (securemode_check()) return; - if (pvars.size() > 0) return; - std::string confname; - Cross::GetPlatformConfigName(confname); - writeconf(confname, true, all, norem); - if (presult==P_WRITECONF_DEFAULT_REBOOT) RebootConfig(confname); - break; - } - case P_WRITECONF_PORTABLE: case P_WRITECONF_PORTABLE_REBOOT: - if (securemode_check()) return; - if (pvars.size() > 1) return; - else if (pvars.size() == 1) { - // write config to startup directory - writeconf(pvars[0], false, all, norem); - if (presult==P_WRITECONF_PORTABLE_REBOOT) RebootConfig(pvars[0]); - } else { - // -wcp without parameter: write dosbox-x.conf to startup directory - writeconf(std::string("dosbox-x.conf"), false, all, norem); - if (presult==P_WRITECONF_PORTABLE_REBOOT) RebootConfig(std::string("dosbox-x.conf")); - } - break; - case P_BOOTCONF: case P_BOOTCONF2: - if (securemode_check()) return; - if (pvars.size() > 1) return; - else if (pvars.size() == 1) { - RebootConfig(pvars[0]); - } else { - Bitu size = (Bitu)control->configfiles.size(); - if (size==0) RebootConfig("dosbox-x.conf"); - else RebootConfig(control->configfiles.front().c_str()); - } - break; - case P_NOPARAMS: - if (!first) break; - - case P_NOMATCH: - WriteOut(MSG_Get("PROGRAM_CONFIG_USAGE")); - return; - - case P_HELP: case P_HELP2: case P_HELP3: { - switch(pvars.size()) { - case 0: - WriteOut(MSG_Get("PROGRAM_CONFIG_USAGE")); - return; - case 1: { - if (!strcasecmp("sections",pvars[0].c_str())) { - // list the sections - WriteOut(MSG_Get("PROGRAM_CONFIG_HLP_SECTLIST")); - int i = 0; - while(true) { - Section* sec = control->GetSection(i++); - if (!sec) break; - WriteOut("%s\n",sec->GetName()); - } - return; - } - // if it's a section, leave it as one-param - Section* sec = control->GetSection(pvars[0].c_str()); - if (!sec) { - // could be a property - sec = control->GetSectionFromProperty(pvars[0].c_str()); - if (!sec&&pvars[0].size()>4&&!strcasecmp(pvars[0].substr(0, 4).c_str(), "ttf.")) { - pvars[0].erase(0,4); - sec = control->GetSectionFromProperty(pvars[0].c_str()); - } - if (!sec) { - WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_ERROR")); - return; - } - pvars.insert(pvars.begin(),std::string(sec->GetName())); - } - break; - } - case 2: { - // sanity check - Section* sec = control->GetSection(pvars[0].c_str()); - Section* sec2 = control->GetSectionFromProperty(pvars[1].c_str()); - - if (sec != sec2) { - WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_DUPLICATE")); - } - break; - } - default: - WriteOut(MSG_Get("PROGRAM_CONFIG_USAGE")); - return; - } - // if we have one value in pvars, it's a section - // two values are section + property - Section* sec = control->GetSection(pvars[0].c_str()); - if (sec==NULL) { - WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_ERROR")); - return; - } - Section_prop* psec = dynamic_cast (sec); - if (psec==NULL) { - // failed; maybe it's the autoexec section? - Section_line* pline = dynamic_cast (sec); - if (pline==NULL) E_Exit("Section dynamic cast failed."); - - WriteOut(MSG_Get("PROGRAM_CONFIG_HLP_LINEHLP"), - pline->GetName(), - // this is 'unclean' but the autoexec section has no help associated - MSG_Get("AUTOEXEC_CONFIGFILE_HELP"), - pline->data.c_str() ); - return; - } - if (pvars.size()==1) { - size_t i = 0; - WriteOut(MSG_Get("PROGRAM_CONFIG_HLP_SECTHLP"),pvars[0].c_str()); - while(true) { - // list the properties - Property* p = psec->Get_prop((int)(i++)); - if (p==NULL) break; - if (!(all>0 || (all==-1 && (p->basic() || p->modified())) || (!all && ((p->propname == "rem" && (!strcmp(pvars[0].c_str(), "4dos") || !strcmp(pvars[0].c_str(), "config"))) || p->modified())))) continue; - WriteOut("%s\n", p->propname.c_str()); - } - if (!strcasecmp(pvars[0].c_str(), "config")) - WriteOut("set\ninstall\ninstallhigh\ndevice\ndevicehigh\n"); - } else { - // find the property by its name - size_t i = 0; - while (true) { - Property *p = psec->Get_prop((int)(i++)); - if (p==NULL) break; - if (!strcasecmp(p->propname.c_str(),pvars[1].c_str())) { - // found it; make the list of possible values - std::string propvalues; - std::vector pv = p->GetValues(); - - if (p->Get_type()==Value::V_BOOL) { - // possible values for boolean are true, false - propvalues += "true, false"; - } else if (p->Get_type()==Value::V_INT) { - // print min, max for integer values if used - Prop_int* pint = dynamic_cast (p); - if (pint==NULL) E_Exit("Int property dynamic cast failed."); - if (pint->getMin() != pint->getMax()) { - std::ostringstream oss; - oss << pint->getMin(); - oss << ".."; - oss << pint->getMax(); - propvalues += oss.str(); - } - } - for(Bitu k = 0; k < pv.size(); k++) { - if (pv[k].ToString() =="%u") - propvalues += MSG_Get("PROGRAM_CONFIG_HLP_POSINT"); - else propvalues += pv[k].ToString(); - if ((k+1) < pv.size() && (strcmp(pvars[0].c_str(), "config") || p->propname != "numlock" || pv[k+1].ToString() != "")) propvalues += ", "; - } - - WriteOut(MSG_Get("PROGRAM_CONFIG_HLP_PROPHLP"), - p->propname.c_str(), - sec->GetName(), - p->Get_help(),propvalues.c_str(), - p->Get_Default_Value().ToString().c_str(), - p->GetValue().ToString().c_str()); - // print 'changeability' - if (p->getChange()==Property::Changeable::OnlyAtStart) { - WriteOut(MSG_Get("PROGRAM_CONFIG_HLP_NOCHANGE")); - } - return; - } - } - break; - } - return; - } - case P_AUTOEXEC_CLEAR: { - Section_line* sec = dynamic_cast - (control->GetSection(std::string("autoexec"))); - sec->data.clear(); - break; - } - case P_AUTOEXEC_ADD: { - if (pvars.size() == 0) { - WriteOut(MSG_Get("PROGRAM_CONFIG_MISSINGPARAM")); - return; - } - Section_line* sec = dynamic_cast - (control->GetSection(std::string("autoexec"))); - - for(Bitu i = 0; i < pvars.size(); i++) sec->HandleInputline(pvars[i]); - break; - } - case P_AUTOEXEC_TYPE: { - Section_line* sec = dynamic_cast - (control->GetSection(std::string("autoexec"))); - WriteOut("\n%s",sec->data.c_str()); - break; - } - case P_REC_AVI_START: - CAPTURE_VideoStart(); - break; - case P_REC_AVI_STOP: - CAPTURE_VideoStop(); - break; - case P_START_MAPPER: - if (securemode_check()) return; - MAPPER_Run(false); - break; - case P_GETPROP: { - // "section property" - // "property" - // "section" - // "section" "property" - if (pvars.size()==0) { - WriteOut(MSG_Get("PROGRAM_CONFIG_GET_SYNTAX")); - return; - } - Section* sec = control->GetSectionFromProperty(pvars[0].c_str()); - std::string::size_type spcpos = pvars[0].find_first_of(' '); - // split on the ' ' - if (!sec && spcpos != std::string::npos) { - if (spcpos>1&&pvars[0].c_str()[spcpos-1]==',') - spcpos=pvars[0].find_first_of(' ', spcpos+1); - if (spcpos != std::string::npos) { - pvars.insert(pvars.begin()+1,pvars[0].substr(spcpos+1)); - pvars[0].erase(spcpos); - } - } - switch(pvars.size()) { - case 1: { - // property/section only - // is it a section? - sec = control->GetSection(pvars[0].c_str()); - if (sec) { - // list properties in section - int i = 0; - Section_prop* psec = dynamic_cast (sec); - if (psec==NULL) { - // autoexec section - Section_line* pline = dynamic_cast (sec); - if (pline==NULL) E_Exit("Section dynamic cast failed."); - - WriteOut("%s",pline->data.c_str()); - break; - } - while(true) { - // list the properties - Property* p = psec->Get_prop(i++); - if (p==NULL) break; - if (!(all>0 || (all==-1 && (p->basic() || p->modified())) || (!all && ((p->propname == "rem" && (!strcmp(pvars[0].c_str(), "4dos") || !strcmp(pvars[0].c_str(), "config"))) || p->modified())))) continue; - WriteOut("%s=%s\n", p->propname.c_str(), - p->GetValue().ToString().c_str()); - } - if (!strcasecmp(pvars[0].c_str(), "config")||!strcasecmp(pvars[0].c_str(), "4dos")) { - const char * extra = psec->data.c_str(); - if (extra&&strlen(extra)) { - std::istringstream in(extra); - char linestr[CROSS_LEN+1], cmdstr[CROSS_LEN], valstr[CROSS_LEN]; - char *cmd=cmdstr, *val=valstr, /**lin=linestr,*/ *p; - if (in) for (std::string line; std::getline(in, line); ) { - if (line.length()>CROSS_LEN) { - strncpy(linestr, line.c_str(), CROSS_LEN); - linestr[CROSS_LEN]=0; - } else - strcpy(linestr, line.c_str()); - p=strchr(linestr, '='); - if (p!=NULL) { - *p=0; - strcpy(cmd, linestr); - cmd=trim(cmd); - strcpy(val, p+1); - val=trim(val); - lowcase(cmd); - if (!strcasecmp(pvars[0].c_str(), "4dos")||!strncmp(cmd, "set ", 4)||!strcmp(cmd, "install")||!strcmp(cmd, "installhigh")||!strcmp(cmd, "device")||!strcmp(cmd, "devicehigh")) - if (!((!strcmp(cmd, "install")||!strcmp(cmd, "installhigh")||!strcmp(cmd, "device")||!strcmp(cmd, "devicehigh"))&&!strlen(val)&&!all)) - WriteOut("%s=%s\n", cmd, val); - } - } - } - } - } else { - // no: maybe it's a property? - sec = control->GetSectionFromProperty(pvars[0].c_str()); - if (!sec&&pvars[0].size()>4&&!strcasecmp(pvars[0].substr(0, 4).c_str(), "ttf.")) { - pvars[0].erase(0,4); - sec = control->GetSectionFromProperty(pvars[0].c_str()); - } else if (!sec && pvars[0].size() && !strcasecmp(pvars[0].c_str(), "langcp")) { - pvars[0] = "language"; - sec = control->GetSectionFromProperty(pvars[0].c_str()); - } - if (!sec) { - unsigned int maxWidth, maxHeight; - void GetMaxWidthHeight(unsigned int *pmaxWidth, unsigned int *pmaxHeight), GetDrawWidthHeight(unsigned int *pdrawWidth, unsigned int *pdrawHeight); - if (!strcasecmp(pvars[0].c_str(), "screenwidth")) { - GetMaxWidthHeight(&maxWidth, &maxHeight); - WriteOut("%d\n",maxWidth); - first_shell->SetEnv("CONFIG",std::to_string(maxWidth).c_str()); - } else if (!strcasecmp(pvars[0].c_str(), "screenheight")) { - GetMaxWidthHeight(&maxWidth, &maxHeight); - WriteOut("%d\n",maxHeight); - first_shell->SetEnv("CONFIG",std::to_string(maxHeight).c_str()); - } else if (!strcasecmp(pvars[0].c_str(), "drawwidth")) { - GetDrawWidthHeight(&maxWidth, &maxHeight); - WriteOut("%d\n",maxWidth); - first_shell->SetEnv("CONFIG",std::to_string(maxWidth).c_str()); - } else if (!strcasecmp(pvars[0].c_str(), "drawheight")) { - GetDrawWidthHeight(&maxWidth, &maxHeight); - WriteOut("%d\n",maxHeight); - first_shell->SetEnv("CONFIG",std::to_string(maxHeight).c_str()); - #if defined(C_SDL2) - } else if (!strcasecmp(pvars[0].c_str(), "clientwidth")) { - int w = 640,h = 480; - SDL_Window* GFX_GetSDLWindow(void); - SDL_GetWindowSize(GFX_GetSDLWindow(), &w, &h); - WriteOut("%d\n",w); - first_shell->SetEnv("CONFIG",std::to_string(w).c_str()); - } else if (!strcasecmp(pvars[0].c_str(), "clientheight")) { - int w = 640,h = 480; - SDL_Window* GFX_GetSDLWindow(void); - SDL_GetWindowSize(GFX_GetSDLWindow(), &w, &h); - WriteOut("%d\n",h); - first_shell->SetEnv("CONFIG",std::to_string(h).c_str()); - #elif defined(WIN32) - } else if (!strcasecmp(pvars[0].c_str(), "clientwidth")) { - RECT rect; - GetClientRect(GetHWND(), &rect); - WriteOut("%d\n",rect.right-rect.left); - first_shell->SetEnv("CONFIG",std::to_string(rect.right-rect.left).c_str()); - } else if (!strcasecmp(pvars[0].c_str(), "clientheight")) { - RECT rect; - GetClientRect(GetHWND(), &rect); - WriteOut("%d\n",rect.bottom-rect.top); - first_shell->SetEnv("CONFIG",std::to_string(rect.bottom-rect.top).c_str()); - #endif - #if defined(WIN32) - } else if (!strcasecmp(pvars[0].c_str(), "windowwidth")) { - RECT rect; - GetWindowRect(GetHWND(), &rect); - WriteOut("%d\n",rect.right-rect.left); - first_shell->SetEnv("CONFIG",std::to_string(rect.right-rect.left).c_str()); - } else if (!strcasecmp(pvars[0].c_str(), "windowheight")) { - RECT rect; - GetWindowRect(GetHWND(), &rect); - WriteOut("%d\n",rect.bottom-rect.top); - first_shell->SetEnv("CONFIG",std::to_string(rect.bottom-rect.top).c_str()); - #endif - } else if (!strcasecmp(pvars[0].c_str(), "system")) { - WriteOut("%s\n",PACKAGE); - first_shell->SetEnv("CONFIG",PACKAGE); - } else if (!strcasecmp(pvars[0].c_str(), "version")) { - WriteOut("%s\n",VERSION); - first_shell->SetEnv("CONFIG",VERSION); - } else if (!strcasecmp(pvars[0].c_str(), "hostos")) { - if (securemode_check()) return; - const char *hostos = - #if defined(HX_DOS) - "DOS" - #elif defined(WIN32) - "Windows" - #elif defined(LINUX) - "Linux" - #elif defined(MACOSX) - "macOS" - #elif defined(OS2) - "OS/2" - #else - "Other" - #endif - ; - WriteOut("%s\n",hostos); - first_shell->SetEnv("CONFIG",hostos); - } else if (!strcasecmp(pvars[0].c_str(), "workdir")) { - if (securemode_check()) return; - char cwd[512] = "."; - // char *res = getcwd(cwd,sizeof(cwd)-1); - // WriteOut("%s\n",res==NULL?"":cwd); - first_shell->SetEnv("CONFIG",cwd); - } else if (!strcasecmp(pvars[0].c_str(), "programdir")) { - if (securemode_check()) return; - std::string GetDOSBoxXPath(bool withexe=false), exepath=GetDOSBoxXPath(); - WriteOut("%s\n",exepath.c_str()); - first_shell->SetEnv("CONFIG",exepath.c_str()); - } else if (!strcasecmp(pvars[0].c_str(), "userconfigdir")) { - if (securemode_check()) return; - std::string config_path; - Cross::GetPlatformConfigDir(config_path); - WriteOut("%s\n",config_path.c_str()); - first_shell->SetEnv("CONFIG",config_path.c_str()); - } else if (!strcasecmp(pvars[0].c_str(), "configdir")) { - if (securemode_check()) return; - std::string configdir=control->configfiles.size()?control->configfiles[control->configfiles.size()-1]:""; - if (configdir.size()) { - std::string::size_type pos = configdir.rfind(CROSS_FILESPLIT); - if(pos == std::string::npos) pos = 0; - configdir.erase(pos); - } - WriteOut("%s\n",configdir.c_str()); - first_shell->SetEnv("CONFIG",configdir.c_str()); - } else if (!strcasecmp(pvars[0].c_str(), "cd")) { - uint8_t drive = DOS_GetDefaultDrive()+'A'; - char dir[DOS_PATHLENGTH]; - DOS_GetCurrentDir(0,dir,true); - WriteOut("%c:\\",drive); - WriteOut_NoParsing(dir, true); - WriteOut("\n"); - first_shell->SetEnv("CONFIG",(std::string(1, drive)+":\\"+std::string(dir)).c_str()); - } else if (!strcasecmp(pvars[0].c_str(), "date")) { - uint32_t ticks=mem_readd(BIOS_TIMER); - uint8_t add=mem_readb(BIOS_24_HOURS_FLAG); - mem_writeb(BIOS_24_HOURS_FLAG,0); // reset the "flag" - if (add) DOS_AddDays(add); - const char *date = FormatDate(dos.date.year, dos.date.month, dos.date.day); - WriteOut("%s\n",date); - first_shell->SetEnv("CONFIG",date); - } else if (!strcasecmp(pvars[0].c_str(), "errorlevel")) { - WriteOut("%d\n",dos.return_code); - first_shell->SetEnv("CONFIG",std::to_string(dos.return_code).c_str()); - } else if (!strcasecmp(pvars[0].c_str(), "random")) { - initRand(); - int random = rand()%32768; - WriteOut("%s\n",std::to_string(random).c_str()); - first_shell->SetEnv("CONFIG",std::to_string(random).c_str()); - } else if (!strcasecmp(pvars[0].c_str(), "time")) { - uint32_t hour, min, sec; - char c=dos.tables.country[13]; - uint32_t ticks=mem_readd(BIOS_TIMER); - uint8_t add=mem_readb(BIOS_24_HOURS_FLAG); - mem_writeb(BIOS_24_HOURS_FLAG,0); // reset the "flag" - uint16_t cx=(uint16_t)(ticks >> 16u), dx=(uint16_t)(ticks & 0xffff); - if (add) DOS_AddDays(add); - ticks=((Bitu)cx<<16)|dx; - Bitu time=(Bitu)((100.0/((double)PIT_TICK_RATE/65536.0)) * (double)ticks); - time/=100; - sec=(uint8_t)((Bitu)time % 60); // seconds - time/=60; - min=(uint8_t)((Bitu)time % 60); // minutes - time/=60; - hour=(uint8_t)((Bitu)time % 24); // hours - char format[11]; - sprintf(format,"%u%c%02u%c%02u",hour,c,min,c,sec); - WriteOut("%s\n",format); - first_shell->SetEnv("CONFIG",format); - } else if (!strcasecmp(pvars[0].c_str(), "lastmount")) { - if (lastmount) WriteOut("%c:\n",lastmount); - first_shell->SetEnv("CONFIG",lastmount?(std::string(1, lastmount) + ":").c_str():""); - } else - WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_ERROR")); - return; - } - // it's a property name - std::string val = sec->GetPropValue(pvars[0].c_str()); - WriteOut("%s\n",val.c_str()); - first_shell->SetEnv("CONFIG",val.c_str()); - } - break; - } - case 2: { - // section + property - sec = control->GetSection(pvars[0].c_str()); - if (!sec) { - WriteOut(MSG_Get("PROGRAM_CONFIG_SECTION_ERROR"), pvars[0].c_str()); - return; - } - std::string val = sec->GetPropValue(pvars[1].c_str()); - if (val == NO_SUCH_PROPERTY) { - if (!strcasecmp(pvars[0].c_str(), "config") && (!strcasecmp(pvars[1].c_str(), "set") || !strcasecmp(pvars[1].c_str(), "device") || !strcasecmp(pvars[1].c_str(), "devicehigh") || !strcasecmp(pvars[1].c_str(), "install") || !strcasecmp(pvars[1].c_str(), "installhigh"))) { - Section_prop* psec = dynamic_cast (sec); - const char * extra = psec->data.c_str(); - if (extra&&strlen(extra)) { - std::istringstream in(extra); - char linestr[CROSS_LEN+1], cmdstr[CROSS_LEN], valstr[CROSS_LEN]; - char *cmd=cmdstr, *val=valstr, /**lin=linestr,*/ *p; - if (in) for (std::string line; std::getline(in, line); ) { - if (line.length()>CROSS_LEN) { - strncpy(linestr, line.c_str(), CROSS_LEN); - linestr[CROSS_LEN]=0; - } else - strcpy(linestr, line.c_str()); - p=strchr(linestr, '='); - if (p!=NULL) { - *p=0; - strcpy(cmd, linestr); - cmd=trim(cmd); - strcpy(val, p+1); - val=trim(val); - lowcase(cmd); - if (!strncasecmp(cmd, "set ", 4)&&!strcasecmp(pvars[1].c_str(), "set")) - WriteOut("%s=%s\n", trim(cmd+4), val); - else if(!strcasecmp(cmd, pvars[1].c_str())) - WriteOut("%s\n", val); - } - } - } - } else - WriteOut(MSG_Get("PROGRAM_CONFIG_NO_PROPERTY"), pvars[1].c_str(),pvars[0].c_str()); - return; - } - WriteOut("%s\n",val.c_str()); - first_shell->SetEnv("CONFIG",val.c_str()); - break; - } - default: - WriteOut(MSG_Get("PROGRAM_CONFIG_GET_SYNTAX")); - return; - } - return; - } - case P_SETPROP: case P_SETFORCE: { - // Code for the configuration changes - // Official format: config -set "section property=value" - // Accepted: with or without -set, - // "section property=value" - // "property" "value" - // "section" "property=value" - // "section" "property=value" "value" "value" ... - // "section" "property" "value" - // "section" "property" "value" "value" ... - // "section property" "value" "value" ... - // "property" "value" "value" ... - // "property=value" "value" "value" ... - - if (pvars.size()==0) { - WriteOut(MSG_Get("PROGRAM_CONFIG_SET_SYNTAX")); - return; - } - - // add rest of command - std::string rest; - if (cmd->GetStringRemain(rest)) pvars.push_back(rest); - - Section* sec = control->GetSectionFromProperty(pvars[0].c_str()); - // attempt to split off the first word - std::string::size_type spcpos = pvars[0].find_first_of(' '); - if (spcpos>1&&pvars[0].c_str()[spcpos-1]==',') - spcpos=pvars[0].find_first_of(' ', spcpos+1); - - std::string::size_type equpos = pvars[0].find_first_of('='); - if (equpos != std::string::npos) { - std::string p = pvars[0]; - p.erase(equpos); - sec = control->GetSectionFromProperty(p.c_str()); - } - - uselangcp = false; - if ((equpos != std::string::npos) && - ((spcpos == std::string::npos) || (equpos < spcpos) || sec)) { - // If we have a '=' possibly before a ' ' split on the = - pvars.insert(pvars.begin()+1,pvars[0].substr(equpos+1)); - pvars[0].erase(equpos); - // As we had a = the first thing must be a property now - sec=control->GetSectionFromProperty(pvars[0].c_str()); - if (!sec&&pvars[0].size()>4&&!strcasecmp(pvars[0].substr(0, 4).c_str(), "ttf.")) { - pvars[0].erase(0,4); - sec = control->GetSectionFromProperty(pvars[0].c_str()); - } else if (!sec && pvars[0].size() && !strcasecmp(pvars[0].c_str(), "langcp")) { - pvars[0] = "language"; - sec = control->GetSectionFromProperty(pvars[0].c_str()); - if (sec) uselangcp = true; - } - if (sec) pvars.insert(pvars.begin(),std::string(sec->GetName())); - else { - WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_ERROR")); - uselangcp = false; - return; - } - // order in the vector should be ok now - } else { - if (equpos != std::string::npos && spcpos < equpos) { - // ' ' before a possible '=', split on the ' ' - pvars.insert(pvars.begin()+1,pvars[0].substr(spcpos+1)); - pvars[0].erase(spcpos); - } - // check if the first parameter is a section or property - sec = control->GetSection(pvars[0].c_str()); - if (!sec) { - // not a section: little duplicate from above - sec=control->GetSectionFromProperty(pvars[0].c_str()); - if (sec) pvars.insert(pvars.begin(),std::string(sec->GetName())); - else { - WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_ERROR")); - return; - } - } else { - // first of pvars is most likely a section, but could still be gus - // have a look at the second parameter - if (pvars.size() < 2) { - WriteOut(MSG_Get("PROGRAM_CONFIG_SET_SYNTAX")); - return; - } - std::string::size_type equpos2 = pvars[1].find_first_of('='); - if (equpos2 != std::string::npos) { - // split on the = - pvars.insert(pvars.begin()+2,pvars[1].substr(equpos2+1)); - pvars[1].erase(equpos2); - } - // is this a property? - Section* sec2 = control->GetSectionFromProperty(pvars[1].c_str()); - if (!sec2) { - // not a property, - Section* sec3 = control->GetSectionFromProperty(pvars[0].c_str()); - if (sec3 && !(equpos != std::string::npos && spcpos != std::string::npos && equpos > spcpos)) { - // section and property name are identical - pvars.insert(pvars.begin(),pvars[0]); - } // else has been checked above already - } - } - } - if(pvars.size() < 3) { - WriteOut(MSG_Get("PROGRAM_CONFIG_SET_SYNTAX")); - uselangcp = false; - return; - } - // check if the property actually exists in the section - Section* sec2 = control->GetSectionFromProperty(pvars[1].c_str()); - if (!sec2) { - if (!strcasecmp(pvars[0].c_str(), "config") && (!strcasecmp(pvars[1].c_str(), "set") || !strcasecmp(pvars[1].c_str(), "device") || !strcasecmp(pvars[1].c_str(), "devicehigh") || !strcasecmp(pvars[1].c_str(), "install") || !strcasecmp(pvars[1].c_str(), "installhigh"))) - WriteOut("Cannot set property %s in section %s.\n", pvars[1].c_str(),pvars[0].c_str()); - else - WriteOut(MSG_Get("PROGRAM_CONFIG_NO_PROPERTY"), pvars[1].c_str(),pvars[0].c_str()); - uselangcp = false; - return; - } - bool applynew=false; - Property *p = static_cast(sec2)->Get_prop(pvars[1]); - if ((p==NULL||p->getChange()==Property::Changeable::OnlyAtStart)&&presult!=P_SETFORCE) { - WriteOut(MSG_Get("PROGRAM_CONFIG_HLP_NOCHANGE")); - first_1: - WriteOut(MSG_Get("PROGRAM_CONFIG_APPLY_RESTART")); - first_2: - uint8_t c;uint16_t n=1; - DOS_ReadFile (STDIN,&c,&n); - do switch (c) { - case 'n': case 'N': - { - DOS_WriteFile (STDOUT,&c, &n); - DOS_ReadFile (STDIN,&c,&n); - do switch (c) { - case 0xD: WriteOut("\n");goto next; - case 0x03: goto next; - case 0x08: WriteOut("\b \b"); goto first_2; - } while (DOS_ReadFile (STDIN,&c,&n)); - } - case 'y': case 'Y': - { - DOS_WriteFile (STDOUT,&c, &n); - DOS_ReadFile (STDIN,&c,&n); - do switch (c) { - case 0xD: WriteOut("\n"); applynew = true; goto next; - case 0x03: goto next; - case 0x08: WriteOut("\b \b"); goto first_2; - } while (DOS_ReadFile (STDIN,&c,&n)); - } - case 0xD: WriteOut("\n"); goto first_1; - case 0x03: goto next; - case '\t': - case 0x08: - goto first_2; - default: - { - DOS_WriteFile (STDOUT,&c, &n); - DOS_ReadFile (STDIN,&c,&n); - do switch (c) { - case 0xD: WriteOut("\n"); goto first_1; - case 0x03: goto next; - case 0x08: WriteOut("\b \b"); goto first_2; - } while (DOS_ReadFile (STDIN,&c,&n)); - goto first_2; - } - } while (DOS_ReadFile (STDIN,&c,&n)); - } - next: - // Input has been parsed (pvar[0]=section, [1]=property, [2]=value) - // now execute - Section* tsec = control->GetSection(pvars[0]); - std::string value(pvars[2]); - //Due to parsing there can be a = at the start of value. - while (value.size() && (value.at(0) ==' ' ||value.at(0) =='=') ) value.erase(0,1); - for(Bitu i = 3; i < pvars.size(); i++) value += (std::string(" ") + pvars[i]); - std::string inputline = pvars[1] + "=" + value; - bool change_success = tsec->HandleInputline(inputline.c_str()); - if (change_success) { - if (applynew) RebootLanguage(""); - else ApplySetting(pvars[0], inputline, false); - } else WriteOut(MSG_Get("PROGRAM_CONFIG_VALUE_ERROR"), - value.c_str(),pvars[1].c_str()); - uselangcp = false; - return; - } - case P_WRITELANG: case P_WRITELANG2: - // In secure mode don't allow a new languagefile to be created - // Who knows which kind of file we would overwrite. - if (securemode_check()) return; - if (pvars.size() < 1) { - if (control->opt_lang == "") { - WriteOut(MSG_Get("PROGRAM_CONFIG_MISSINGPARAM")); - return; - } else if (!MSG_Write(control->opt_lang.c_str(), NULL)) { - WriteOut(MSG_Get("PROGRAM_CONFIG_FILE_ERROR"),control->opt_lang.c_str()); - return; - } else - WriteOut(MSG_Get("PROGRAM_LANGUAGE_FILE_WHICH"),control->opt_lang.c_str()); - } else if (!MSG_Write(pvars[0].c_str(), NULL)) { - WriteOut(MSG_Get("PROGRAM_CONFIG_FILE_ERROR"),pvars[0].c_str()); - return; - } else - WriteOut(MSG_Get("PROGRAM_LANGUAGE_FILE_WHICH"),pvars[0].c_str()); - break; - - case P_SECURE: - // Code for switching to secure mode - control->SwitchToSecureMode(); - WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_ON")); - return; - - default: - E_Exit("bug"); - break; - } - first = false; - } - return; - } - - void CONFIG_ProgramStart(Program * * make) { - *make=new CONFIG; - } - - void PROGRAMS_DOS_Boot(Section *) { - } - - /* FIXME: Rename the function to clarify it does not init programs, it inits the callback mechanism - * that program generation on drive Z: needs to tie a .COM executable to a callback */ - void PROGRAMS_Init() { - LOG(LOG_MISC,LOG_DEBUG)("PROGRAMS_Init(): initializing Z: drive .COM stub and program management"); - - /* Setup a special callback to start virtual programs */ - call_program=CALLBACK_Allocate(); - CALLBACK_Setup(call_program,&PROGRAMS_Handler,CB_RETF,"internal program"); - - AddVMEventFunction(VM_EVENT_DOS_INIT_KERNEL_READY,AddVMEventFunctionFuncPair(PROGRAMS_DOS_Boot)); - - // listconf - MSG_Add("PROGRAM_CONFIG_NOCONFIGFILE","No config file loaded!\n"); - MSG_Add("PROGRAM_CONFIG_PRIMARY_CONF","Primary config file: \n%s\n"); - MSG_Add("PROGRAM_CONFIG_ADDITIONAL_CONF","Additional config files:\n"); - MSG_Add("PROGRAM_CONFIG_GLOBAL_CONF","\nGlobal config file: \n%s\n"); - MSG_Add("PROGRAM_CONFIG_CONFDIR","DOSBox-X %s user configuration directory: \n%s\n\n"); - MSG_Add("PROGRAM_CONFIG_WORKDIR","DOSBox-X's working directory: \n%s\n\n"); - - // writeconf - MSG_Add("PROGRAM_CONFIG_FILE_ERROR","\nCan't open file %s\n"); - MSG_Add("PROGRAM_CONFIG_FILE_WHICH","Writing config file %s\n"); - MSG_Add("PROGRAM_LANGUAGE_FILE_WHICH","Written to language file %s\n"); - - // help - MSG_Add("PROGRAM_CONFIG_USAGE","The DOSBox-X command-line configuration utility. Supported options:\n"\ - "-wc (or -writeconf) without parameter: Writes to primary loaded config file.\n"\ - "-wc (or -writeconf) with filename: Writes file to the config directory.\n"\ - "-wl (or -writelang) with filename: Writes the current language strings.\n"\ - "-ln (or -langname) Displays (without arguments) or specifies the language name.\n"\ - "-wcp [filename] Writes file to program directory (dosbox-x.conf or filename).\n"\ - "-wcd Writes to the default config file in the config directory.\n"\ - "-all, -mod Use with -wc, -wcp, or -wcd to write ALL or only modified options.\n"\ - "-wcboot, -wcpboot, or -wcdboot will reboot DOSBox-X after writing the file.\n"\ - "-bootconf (or -bc) reboots with specified config file (or primary loaded file).\n"\ - "-norem Use this with -wc, -wcp, or -wcd to not write config option remarks.\n"\ - "-l Lists DOSBox-X's configuration parameters.\n"\ - "-h, -help, -? Shows this help; add the word \"sections\" for a list of sections.\n"\ - "-h, -help, -? section / property Shows info on a specific section or property.\n"\ - "-axclear Clears the [autoexec] section.\n"\ - "-axadd [line] Adds a line to the [autoexec] section.\n"\ - "-axtype Prints the content of the [autoexec] section.\n"\ - "-avistart, -avistop Starts or stops AVI recording.\n"\ - "-securemode Enables secure mode where features like mounting will be disabled.\n"\ - "-startmapper Starts the DOSBox-X mapper editor.\n"\ - "-gui Starts the graphical configuration tool.\n" - "-get \"section property\" returns the value of the property (also to %%CONFIG%%).\n"\ - "-set (-setf for force) \"section property=value\" sets the value of the property.\n"); - MSG_Add("PROGRAM_CONFIG_HLP_PROPHLP","Purpose of property \"%s\" (contained in section \"%s\"):\n%s\n\nPossible Values: %s\nDefault value: %s\nCurrent value: %s\n"); - MSG_Add("PROGRAM_CONFIG_HLP_LINEHLP","Purpose of section \"%s\":\n%s\nCurrent value:\n%s\n"); - MSG_Add("PROGRAM_CONFIG_HLP_NOCHANGE","This property cannot be changed at runtime.\n"); - MSG_Add("PROGRAM_CONFIG_APPLY_RESTART","Do you want to restart now to apply the setting [Y/N]?"); - MSG_Add("PROGRAM_CONFIG_HLP_POSINT","positive integer"); - MSG_Add("PROGRAM_CONFIG_HLP_SECTHLP","Section %s contains the following properties:\n"); - MSG_Add("PROGRAM_CONFIG_HLP_SECTLIST","DOSBox-X configuration contains the following sections:\n\n"); - - MSG_Add("PROGRAM_CONFIG_SECURE_ON","Switched to secure mode.\n"); - MSG_Add("PROGRAM_CONFIG_SECURE_DISALLOW","This operation is not permitted in secure mode.\n"); - MSG_Add("PROGRAM_CONFIG_SECTION_ERROR","Section %s doesn't exist.\n"); - MSG_Add("PROGRAM_CONFIG_VALUE_ERROR","\"%s\" is not a valid value for property %s.\n"); - MSG_Add("PROGRAM_CONFIG_PROPERTY_ERROR","No such section or property.\n"); - MSG_Add("PROGRAM_CONFIG_PROPERTY_DUPLICATE","There may be other sections with the same property name.\n"); - MSG_Add("PROGRAM_CONFIG_NO_PROPERTY","There is no property %s in section %s.\n"); - MSG_Add("PROGRAM_CONFIG_SET_SYNTAX","Correct syntax: config -set \"section property=value\".\n"); - MSG_Add("PROGRAM_CONFIG_GET_SYNTAX","Correct syntax: config -get \"section property\".\n"); - MSG_Add("PROGRAM_CONFIG_PRINT_STARTUP","\nDOSBox-X was started with the following command line parameters:\n%s\n"); - MSG_Add("PROGRAM_CONFIG_MISSINGPARAM","Missing parameter.\n"); - } - \ No newline at end of file +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "programs.h" +#include "callback.h" +#include "logging.h" +#include "regs.h" +#include "support.h" +#include "cross.h" +#include "control.h" +#include "shell.h" +#include "menudef.h" +#include "hardware.h" +#include "../dos/drives.h" +#include "mapper.h" +#include "menu.h" +#include "bios.h" +#include "timer.h" +#include "jfont.h" +#include "render.h" +#include "../ints/int10.h" +#include "bios_disk.h" +#include "sdlmain.h" +#include "cpu.h" +#if defined(WIN32) +#include "windows.h" +RECT monrect; +int curscreen; +#endif + +#include +#include + +Bitu call_program; +extern char lastmount; +extern const char *modifier; +extern unsigned int sendkeymap; +extern std::string langname, configfile, dosbox_title; +extern int autofixwarn, enablelfn, fat32setver, paste_speed, wheel_key, freesizecap, wpType, wpVersion, wpBG, wpFG, lastset, blinkCursor, msgcodepage; +extern bool dos_kernel_disabled, force_nocachedir, wpcolon, convertimg, lockmount, enable_config_as_shell_commands, lesssize, load, winrun, winautorun, startcmd, startwait, startquiet, starttranspath, mountwarning, wheel_guest, clipboard_dosapi, noremark_save_state, force_load_state, sync_time, manualtime, ttfswitch, loadlang, showbold, showital, showline, showsout, char512, printfont, rtl, gbk, chinasea, uao, showdbcs, dbcs_sbcs, autoboxdraw, halfwidthkana, ticksLocked, outcon, enable_dbcs_tables, show_recorded_filename, internal_program, pipetmpdev, notrysgf, uselangcp, incall; +extern bool clipboard_biospaste; +/* This registers a file on the virtual drive and creates the correct structure for it*/ + +static uint8_t exe_block[]={ + 0xbc,0x00,0x04, //0x100 MOV SP,0x400 decrease stack size + 0xbb,0x40,0x00, //0x103 MOV BX,0x0040 for memory resize + 0xb4,0x4a, //0x106 MOV AH,0x4A Resize memory block + 0xcd,0x21, //0x108 INT 0x21 ... + 0x30,0xc0, //0x10A XOR AL,AL Clear AL (exit code). Program will write AL to modify exit status +//pos 14 is callback number + 0xFE,0x38,0x00,0x00, //0x10C CALLBack number + 0xb4,0x4c, //0x110 Mov AH,0x4C Prepare to exit, preserve AL + 0xcd,0x21 //0x112 INT 0x21 Exit to DOS +}; //0x114 --DONE-- + +#define CB_POS 14 + +class InternalProgramEntry { +public: + InternalProgramEntry() { + main = NULL; + comsize = 0; + comdata = NULL; + } + ~InternalProgramEntry() { + if (comdata != NULL) free(comdata); + comdata = NULL; + comsize = 0; + main = NULL; + } +public: + std::string name; + uint8_t* comdata; + uint32_t comsize; + PROGRAMS_Main* main; +}; + +static std::vector internal_progs; +uint8_t DOS_GetAnsiAttr(void); +int setTTFMap(bool changecp); +char *FormatDate(uint16_t year, uint8_t month, uint8_t day); +bool isDBCSCP(void), CheckBoxDrawing(uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4), DOS_SetAnsiAttr(uint8_t attr), GFX_GetPreventFullscreen(void), toOutput(const char *what); +void EMS_DoShutDown(void), UpdateDefaultPrinterFont(void), GFX_ForceRedrawScreen(void), resetFontSize(void), ttf_reset_colors(void), makestdcp950table(void), makeseacp951table(void), clearFontCache(void), DOSBox_SetSysMenu(void), MSG_Init(void), initRand(void), PRINTER_Init(void), SetKEYBCP(void); +void EMS_Startup(Section* sec), DOSV_SetConfig(Section_prop *section), DOSBOX_UnlockSpeed2(bool pressed), RebootLanguage(std::string filename, bool confirm=false), SetWindowTransparency(int trans), SetOutputSwitch(const char *outputstr), runRescan(const char *str), runSerial(const char *str), runParallel(const char *str), DOS_AddDays(uint8_t days), PRINTER_Shutdown(Section* sec), setAspectRatio(Section_prop * section); + +void PROGRAMS_Shutdown(void) { + LOG(LOG_MISC,LOG_DEBUG)("Shutting down internal programs list"); + + for (size_t i=0;i < internal_progs.size();i++) { + if (internal_progs[i] != NULL) { + delete internal_progs[i]; + internal_progs[i] = NULL; + } + } + internal_progs.clear(); +} + +void PROGRAMS_MakeFile(char const * const name,PROGRAMS_Main * main,const char *dir) { + uint32_t size=sizeof(exe_block)+sizeof(uint8_t); + InternalProgramEntry *ipe; + uint8_t *comdata; + uint8_t index; + + /* Copy save the pointer in the vector and save its index */ + if (internal_progs.size()>255) E_Exit("PROGRAMS_MakeFile program size too large (%d)",static_cast(internal_progs.size())); + + index = (uint8_t)internal_progs.size(); + comdata = (uint8_t *)malloc(32); //MEM LEAK + memcpy(comdata,&exe_block,sizeof(exe_block)); + memcpy(&comdata[sizeof(exe_block)],&index,sizeof(index)); + comdata[CB_POS]=(uint8_t)(call_program&0xff); + comdata[CB_POS+1]=(uint8_t)((call_program>>8)&0xff); + + ipe = new InternalProgramEntry(); + ipe->main = main; + ipe->name = name; + ipe->comsize = size; + ipe->comdata = comdata; + internal_progs.push_back(ipe); + internal_program = true; + VFILE_Register(name,ipe->comdata,ipe->comsize,dir); + internal_program = false; +} + +static Bitu PROGRAMS_Handler(void) { + /* This sets up everything for a program start up call */ + Bitu size=sizeof(uint8_t); + uint8_t index; + /* Read the index from program code in memory */ + PhysPt reader=PhysMake(dos.psp(),256+sizeof(exe_block)); + HostPt writer=(HostPt)&index; + for (;size>0;size--) *writer++=mem_readb(reader++); + Program * new_program = NULL; + if (index >= internal_progs.size()) E_Exit("something is messing with the memory"); + InternalProgramEntry *ipe = internal_progs[index]; + if (ipe == NULL) E_Exit("Attempt to run internal program slot with nothing allocated"); + if (ipe->main == NULL) return CBRET_NONE; + PROGRAMS_Main * handler = internal_progs[index]->main; + (*handler)(&new_program); + + try { /* "BOOT" can throw an exception (int(2)) */ + new_program->Run(); + delete new_program; + } + catch (...) { /* well if it happened, free the program anyway to avert memory leaks */ + delete new_program; + throw; /* pass it on */ + } + + return CBRET_NONE; +} + +/* Main functions used in all program */ + +Program::Program() { + /* Find the command line and setup the PSP */ + psp = new DOS_PSP(dos.psp()); + /* Scan environment for filename */ + PhysPt envscan=PhysMake(psp->GetEnvironment(),0); + while (mem_readb(envscan)) envscan+=(PhysPt)(mem_strlen(envscan)+1); + envscan+=3; + CommandTail tail; + MEM_BlockRead(PhysMake(dos.psp(),CTBUF+1),&tail,CTBUF+1); + if (tail.countSecureMode() ||*/ cmd->Get_arglength() > 100 && full_arguments.size()) { + CommandLine* temp = new CommandLine(cmd->GetFileName(),full_arguments.c_str()); + delete cmd; + cmd = temp; + } + full_arguments.assign(""); //Clear so it gets even more save +} + +bool resetcolor = false; +static char last_written_character = 0;//For 0xA to OxD 0xA expansion +void Program::WriteOut(const char * format,...) { + uint8_t attr = DOS_GetAnsiAttr(); + char buf[2048]; + va_list msg; + + va_start(msg,format); + vsnprintf(buf,2047,format,msg); + va_end(msg); + + uint16_t size = (uint16_t)strlen(buf); + dos.internal_output=true; + for(uint16_t i = 0; i < size;i++) { + uint8_t out;uint16_t s=1; + if (buf[i] == 0xA && last_written_character != 0xD) { + out = 0xD;DOS_WriteFile(STDOUT,&out,&s); + } + last_written_character = (char)(out = (uint8_t)buf[i]); + if(isDBCSCP() && isKanji1(buf[i]) && i + 1 < size && isKanji2(buf[i + 1])) { + uint8_t dbchar[3] = { (uint8_t)buf[i], (uint8_t)buf[i + 1],0 }; + s = 2; + DOS_WriteFile(STDOUT, dbchar, &s); // send two bytes if next character is a DBCS character + i++; + s = 1; + continue; + } + DOS_WriteFile(STDOUT,&out,&s); + } + dos.internal_output=false; + if (resetcolor && attr) DOS_SetAnsiAttr(attr); + resetcolor = false; + +// DOS_WriteFile(STDOUT,(uint8_t *)buf,&size); +} + +void Program::WriteOut(const char *format, const char *arguments) { + char buf[2048 + CMD_MAXLINE]; + sprintf(buf,format,arguments); + + uint16_t size = (uint16_t)strlen(buf); + dos.internal_output=true; + for(uint16_t i = 0; i < size;i++) { + uint8_t out; uint16_t s = 1; + if (buf[i] == 0xA && last_written_character != 0xD) { + out = 0xD;DOS_WriteFile(STDOUT,&out,&s); + } + last_written_character = (char)(out = (uint8_t)buf[i]); + if(isDBCSCP() && isKanji1(buf[i]) && i + 1 < size && isKanji2(buf[i + 1])) { + uint8_t dbchar[3] = { (uint8_t)buf[i], (uint8_t)buf[i + 1], 0}; + s = 2; + DOS_WriteFile(STDOUT, dbchar, &s); // send two bytes if next character is a DBCS character + i++; + s = 1; + continue; + } + DOS_WriteFile(STDOUT,&out,&s); + } + dos.internal_output=false; + +// DOS_WriteFile(STDOUT,(uint8_t *)buf,&size); +} + +int Program::WriteOut_NoParsing(const char * format, bool dbcs) { + uint16_t size = (uint16_t)strlen(format); + char const* buf = format; + char last2 = 0, last3 = 0; + int lastcol = 0; + uint8_t page=outcon?real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE):0; + bool lead=false; + dos.internal_output=true; + int rcount = 0; + for(uint16_t i = 0; i < size;i++) { + uint8_t out;uint16_t s=1; + BIOS_NCOLS; + if (!CURSOR_POS_COL(page)) last2=last3=0; + if (lead) lead = false; + else if ((IS_PC98_ARCH || isDBCSCP()) +#if defined(USE_TTF) + && dbcs_sbcs +#endif + && dbcs && isKanji1(buf[i])) lead = true; + if (buf[i] == 0xA) { + if (last_written_character != 0xD) {out = 0xD;DOS_WriteFile(STDOUT,&out,&s);} + if (outcon) rcount++; + } else if (outcon && lead && CURSOR_POS_COL(page)==ncols-1 && !(TTF_using() +#if defined(USE_TTF) + && autoboxdraw +#endif + && CheckBoxDrawing(last3, last2, last_written_character, buf[i]))) { + out = 0xD;DOS_WriteFile(STDOUT,&out,&s); + out = 0xA;DOS_WriteFile(STDOUT,&out,&s); + rcount++; + } else if (outcon && !CURSOR_POS_COL(page) && lastcol == ncols-1) + rcount++; + lastcol=CURSOR_POS_COL(page); + last3=last2;last2=last_written_character; + last_written_character = (char)(out = (uint8_t)buf[i]); + DOS_WriteFile(STDOUT,&out,&s); + } + dos.internal_output=false; + return rcount; + +// DOS_WriteFile(STDOUT,(uint8_t *)format,&size); +} + +static bool LocateEnvironmentBlock(PhysPt &env_base,PhysPt &env_fence,Bitu env_seg) { + if (env_seg == 0) { + /* The DOS program might have freed it's environment block perhaps. */ + return false; + } + + DOS_MCB env_mcb((uint16_t)(env_seg-1)); /* read the environment block's MCB to determine how large it is */ + env_base = PhysMake((uint16_t)env_seg,0); + env_fence = env_base + (PhysPt)(env_mcb.GetSize() << 4u); + return true; +} + +int EnvPhys_StrCmp(PhysPt es,PhysPt ef,const char *ls) { + (void)ef;//UNUSED + while (1) { + unsigned char a = mem_readb(es++); + unsigned char b = (unsigned char)(*ls++); + if (a == '=') a = 0; + if (a == 0 && b == 0) break; + if (a == b) continue; + return (int)a - (int)b; + } + + return 0; +} + +void EnvPhys_StrCpyToCPPString(std::string &result,PhysPt &env_scan,PhysPt env_fence) { + char tmp[512],*w=tmp,*wf=tmp+sizeof(tmp)-1; + + result.clear(); + while (env_scan < env_fence) { + char c; + if ((c=(char)mem_readb(env_scan++)) == 0) break; + + if (w >= wf) { + *w = 0; + result += tmp; + w = tmp; + } + + assert(w < wf); + *w++ = c; + } + if (w != tmp) { + *w = 0; + result += tmp; + } +} + +bool EnvPhys_ScanUntilNextString(PhysPt &env_scan,PhysPt env_fence) { + /* scan until end of block or NUL */ + while (env_scan < env_fence && mem_readb(env_scan) != 0) env_scan++; + + /* if we hit the fence, that's something to warn about. */ + if (env_scan >= env_fence) { + LOG_MSG("Warning: environment string scan hit the end of the environment block without terminating NUL\n"); + return false; + } + + /* if we stopped at anything other than a NUL, that's something to warn about */ + if (mem_readb(env_scan) != 0) { + LOG_MSG("Warning: environment string scan scan stopped without hitting NUL\n"); + return false; + } + + env_scan++; /* skip NUL */ + return true; +} + +bool Program::GetEnvStr(const char * entry,std::string & result) { + PhysPt env_base,env_fence,env_scan; + + if (dos_kernel_disabled) { + LOG_MSG("BUG: Program::GetEnvNum() called with DOS kernel disabled (such as OS boot).\n"); + return false; + } + + if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) { + LOG_MSG("Warning: GetEnvCount() was not able to locate the program's environment block\n"); + return false; + } + + std::string bigentry(entry); + for (std::string::iterator it = bigentry.begin(); it != bigentry.end(); ++it) *it = toupper(*it); + + env_scan = env_base; + while (env_scan < env_fence) { + /* "NAME" + "=" + "VALUE" + "\0" */ + /* end of the block is a NULL string meaning a \0 follows the last string's \0 */ + if (mem_readb(env_scan) == 0) break; /* normal end of block */ + + if (EnvPhys_StrCmp(env_scan,env_fence,bigentry.c_str()) == 0) { + EnvPhys_StrCpyToCPPString(result,env_scan,env_fence); + return true; + } + + if (!EnvPhys_ScanUntilNextString(env_scan,env_fence)) break; + } + + return false; +} + +bool Program::GetEnvNum(Bitu want_num,std::string & result) { + PhysPt env_base,env_fence,env_scan; + Bitu num = 0; + + if (dos_kernel_disabled) { + LOG_MSG("BUG: Program::GetEnvNum() called with DOS kernel disabled (such as OS boot).\n"); + return false; + } + + if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) { + LOG_MSG("Warning: GetEnvCount() was not able to locate the program's environment block\n"); + return false; + } + + result.clear(); + env_scan = env_base; + while (env_scan < env_fence) { + /* "NAME" + "=" + "VALUE" + "\0" */ + /* end of the block is a NULL string meaning a \0 follows the last string's \0 */ + if (mem_readb(env_scan) == 0) break; /* normal end of block */ + + if (num == want_num) { + EnvPhys_StrCpyToCPPString(result,env_scan,env_fence); + return true; + } + + num++; + if (!EnvPhys_ScanUntilNextString(env_scan,env_fence)) break; + } + + return false; +} + +Bitu Program::GetEnvCount(void) { + PhysPt env_base,env_fence,env_scan; + Bitu num = 0; + + if (dos_kernel_disabled) { + LOG_MSG("BUG: Program::GetEnvCount() called with DOS kernel disabled (such as OS boot).\n"); + return 0; + } + + if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) { + LOG_MSG("Warning: GetEnvCount() was not able to locate the program's environment block\n"); + return false; + } + + env_scan = env_base; + while (env_scan < env_fence) { + /* "NAME" + "=" + "VALUE" + "\0" */ + /* end of the block is a NULL string meaning a \0 follows the last string's \0 */ + if (mem_readb(env_scan++) == 0) break; /* normal end of block */ + num++; + if (!EnvPhys_ScanUntilNextString(env_scan,env_fence)) break; + } + + return num; +} + +void Program::DebugDumpEnv() { + PhysPt env_base,env_fence,env_scan; + unsigned char c; + std::string tmp; + + if (dos_kernel_disabled) + return; + + if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) + return; + + env_scan = env_base; + LOG_MSG("DebugDumpEnv()"); + while (env_scan < env_fence) { + if (mem_readb(env_scan) == 0) break; + + while (env_scan < env_fence) { + if ((c=mem_readb(env_scan++)) == 0) break; + tmp += (char)c; + } + + LOG_MSG("...%s",tmp.c_str()); + tmp = ""; + } +} + +bool Program::FirstEnv(const char * entry) { + PhysPt env_base,env_fence,env_scan,env_first,env_last; + bool found = false; + + if (dos_kernel_disabled) { + LOG_MSG("BUG: Program::FirstEnv() called with DOS kernel disabled (such as OS boot).\n"); + return false; + } + + if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) { + LOG_MSG("Warning: GetEnvCount() was not able to locate the program's environment block\n"); + return false; + } + + std::string bigentry(entry); + for (std::string::iterator it = bigentry.begin(); it != bigentry.end(); ++it) *it = toupper(*it); + + env_scan = env_base; + while (env_scan < env_fence) { + /* "NAME" + "=" + "VALUE" + "\0" */ + /* end of the block is a NULL string meaning a \0 follows the last string's \0 */ + if (mem_readb(env_scan) == 0) break; /* normal end of block */ + + if (EnvPhys_StrCmp(env_scan,env_fence,bigentry.c_str()) == 0) { + found = true; + break; + } + + if (!EnvPhys_ScanUntilNextString(env_scan,env_fence)) break; + } + + if (found) { + env_first = env_scan; + if (!EnvPhys_ScanUntilNextString(env_scan,env_fence)) return false; + env_last = env_scan; + +#if 0//DEBUG + fprintf(stderr,"Env base=%x fence=%x first=%x last=%x\n", + (unsigned int)env_base, (unsigned int)env_fence, + (unsigned int)env_first, (unsigned int)env_last); +#endif + + assert(env_first <= env_last); + + /* if the variable is already at the beginning, do nothing */ + if (env_first == env_base) return true; + + { + std::vector tmp; + tmp.resize(size_t(env_last-env_first)); + + /* save variable */ + for (size_t i=0;i < tmp.size();i++) + tmp[i] = mem_readb(env_first+(PhysPt)i); + + /* shift all variables prior to it forward over the variable, BACKWARDS */ + const size_t pl = size_t(env_first - env_base); + assert((env_first-pl) == env_base); + assert((env_last-pl) >= env_base); + assert(env_first < env_last); + assert(pl != 0); + for (size_t i=0;i < pl;i++) mem_writeb(env_last-(i+1), mem_readb(env_first-(i+1))); + + /* put the variable in at the beginning */ + assert((env_base+tmp.size()) == (env_last-pl)); + for (size_t i=0;i < tmp.size();i++) + mem_writeb(env_base+(PhysPt)i,tmp[i]); + } + } + + return true; +} + +bool Program::EraseEnv(void) { + PhysPt env_base,env_fence; + size_t nsl = 0,el = 0,needs; + + if (dos_kernel_disabled) { + LOG_MSG("BUG: Program::EraseEnv() called with DOS kernel disabled (such as OS boot).\n"); + return false; + } + + if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) { + LOG_MSG("Warning: SetEnv() was not able to locate the program's environment block\n"); + return false; + } + + for (PhysPt w=env_base;w < env_fence;w++) + mem_writeb(w,0); + + return true; +} + +/* NTS: "entry" string must have already been converted to uppercase */ +bool Program::SetEnv(const char * entry,const char * new_string) { + PhysPt env_base,env_fence,env_scan; + size_t nsl = 0,el = 0,needs; + + if (dos_kernel_disabled) { + LOG_MSG("BUG: Program::SetEnv() called with DOS kernel disabled (such as OS boot).\n"); + return false; + } + + if (!LocateEnvironmentBlock(env_base,env_fence,psp->GetEnvironment())) { + LOG_MSG("Warning: SetEnv() was not able to locate the program's environment block\n"); + return false; + } + + std::string bigentry(entry); + for (std::string::iterator it = bigentry.begin(); it != bigentry.end(); ++it) *it = toupper(*it); + + el = strlen(bigentry.c_str()); + if (*new_string != 0) nsl = strlen(new_string); + needs = nsl+1+el+1+1; /* entry + '=' + new_string + '\0' + '\0' */ + + /* look for the variable in the block. break the loop if found */ + env_scan = env_base; + while (env_scan < env_fence) { + if (mem_readb(env_scan) == 0) break; + + if (EnvPhys_StrCmp(env_scan,env_fence,bigentry.c_str()) == 0) { + /* found it. remove by shifting the rest of the environment block over */ + int zeroes=0; + PhysPt s,d; + + /* before we remove it: is there room for the new value? */ + if (nsl != 0) { + if ((env_scan+needs) > env_fence) { + LOG_MSG("Program::SetEnv() error, insufficient room for environment variable %s=%s (replacement)\n",bigentry.c_str(),new_string); + DebugDumpEnv(); + return false; + } + } + + s = env_scan; d = env_scan; + while (s < env_fence && mem_readb(s) != 0) s++; + if (s < env_fence && mem_readb(s) == 0) s++; + + while (s < env_fence) { + unsigned char b = mem_readb(s++); + + if (b == 0) zeroes++; + else zeroes=0; + + mem_writeb(d++,b); + if (zeroes >= 2) break; /* two consecutive zeros means the end of the block */ + } + } + else { + /* scan to next string */ + if (!EnvPhys_ScanUntilNextString(env_scan,env_fence)) break; + } + } + + /* At this point, env_scan points to the first byte beyond the block */ + /* add the string to the end of the block */ + if (*new_string != 0) { + if ((env_scan+needs) > env_fence) { + LOG_MSG("Program::SetEnv() error, insufficient room for environment variable %s=%s (addition)\n",bigentry.c_str(),new_string); + DebugDumpEnv(); + return false; + } + + assert(env_scan < env_fence); + for (const char *s=bigentry.c_str();*s != 0;) mem_writeb(env_scan++,(uint8_t)(*s++)); + mem_writeb(env_scan++,'='); + + assert(env_scan < env_fence); + for (const char *s=new_string;*s != 0;) mem_writeb(env_scan++,(uint8_t)(*s++)); + mem_writeb(env_scan++,0); + mem_writeb(env_scan++,0); + + assert(env_scan <= env_fence); + } + + return true; +} + +bool MSG_Write(const char *, const char *); + +/*! \brief CONFIG.COM utility to control configuration and files + * + * \description Utility to write configuration, set configuration, + * and other configuration related functions. + */ +class CONFIG : public Program { +public: + /*! \brief Program entry point, when the command is run + */ + void Run(void) override; +private: + void restart(const char* useconfig); + + void writeconf(std::string name, bool configdir,int everything, bool norem) { + } + + bool securemode_check() { + if (control->SecureMode()) { + WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_DISALLOW")); + return true; + } + return false; + } +}; + +void dos_ver_menu(bool start), ReloadMapper(Section_prop *sec, bool init), SetGameState_Run(int value), update_dos_ems_menu(void), MountAllDrives(bool quiet), GFX_SwitchFullScreen(void), RebootConfig(std::string filename, bool confirm=false); +bool set_ver(char *s), GFX_IsFullscreen(void); + +void Load_Language(std::string name) { + if(control->opt_lang != "") control->opt_lang = name; + MSG_Init(); +#if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU || DOSBOXMENU_TYPE == DOSBOXMENU_NSMENU + mainMenu.unbuild(); + mainMenu.rebuild(); +#endif + if (!GFX_GetPreventFullscreen()) { + if (menu.toggle) DOSBox_SetMenu(); else DOSBox_NoMenu(); + } +#if defined(USE_TTF) + if (TTF_using()) resetFontSize(); +#endif +#if 0 + if (!uselangcp && !incall) { + int oldmsgcp = msgcodepage; + msgcodepage = dos.loaded_codepage; + SetKEYBCP(); + msgcodepage = oldmsgcp; + } +#endif +} + +void ApplySetting(std::string pvar, std::string inputline, bool quiet) { + if (!strcasecmp(pvar.c_str(), "dosbox")||!strcasecmp(pvar.c_str(), "dos")||!strcasecmp(pvar.c_str(), "dosv")||!strcasecmp(pvar.c_str(), "cpu")||!strcasecmp(pvar.c_str(), "sdl")||!strcasecmp(pvar.c_str(), "ttf")||!strcasecmp(pvar.c_str(), "render")||!strcasecmp(pvar.c_str(), "serial")||!strcasecmp(pvar.c_str(), "parallel")||!strcasecmp(pvar.c_str(), "printer")) { + Section_prop *section = static_cast(control->GetSection(pvar.c_str())); + if (section != NULL) { + if (!strcasecmp(pvar.c_str(), "dosbox")) { + force_nocachedir = section->Get_bool("nocachedir"); + sync_time = section->Get_bool("synchronize time"); + if (!strcasecmp(inputline.substr(0, 17).c_str(), "synchronize time=")) { + manualtime=false; + mainMenu.get_item("sync_host_datetime").check(sync_time).refresh_item(mainMenu); + } + std::string freesizestr = section->Get_string("freesizecap"); + if (freesizestr == "fixed" || freesizestr == "false" || freesizestr == "0") freesizecap = 0; + else if (freesizestr == "relative" || freesizestr == "2") freesizecap = 2; + else freesizecap = 1; + convertimg = section->Get_bool("convertdrivefat"); + wpcolon = section->Get_bool("leading colon write protect image"); + lockmount = section->Get_bool("locking disk image mount"); + if (!strcasecmp(inputline.substr(0, 9).c_str(), "saveslot=")) SetGameState_Run(section->Get_int("saveslot")-1); + if (!strcasecmp(inputline.substr(0, 11).c_str(), "saveremark=")) { + noremark_save_state = !section->Get_bool("saveremark"); + mainMenu.get_item("noremark_savestate").check(noremark_save_state).refresh_item(mainMenu); + } + if (!strcasecmp(inputline.substr(0, 15).c_str(), "forceloadstate=")) { + force_load_state = section->Get_bool("forceloadstate"); + mainMenu.get_item("force_loadstate").check(force_load_state).refresh_item(mainMenu); + } + if (!strcasecmp(inputline.substr(0, 23).c_str(), "show recorded filename=")) + show_recorded_filename = section->Get_bool("show recorded filename"); + if (!strcasecmp(inputline.substr(0, 6).c_str(), "title=")) { + dosbox_title=section->Get_string("title"); + trim(dosbox_title); + } + if (!strcasecmp(inputline.substr(0, 9).c_str(), "language=")) + Load_Language(section->Get_string("language")); + if (!strcasecmp(inputline.substr(0, 16).c_str(), "mapper send key=")) { + std::string mapsendkey = section->Get_string("mapper send key"); + if (mapsendkey=="winlogo") sendkeymap=1; + else if (mapsendkey=="winmenu") sendkeymap=2; + else if (mapsendkey=="alttab") sendkeymap=3; + else if (mapsendkey=="ctrlesc") sendkeymap=4; + else if (mapsendkey=="ctrlbreak") sendkeymap=5; + else sendkeymap=0; + mainMenu.get_item("sendkey_mapper_winlogo").check(sendkeymap==1).refresh_item(mainMenu); + mainMenu.get_item("sendkey_mapper_winmenu").check(sendkeymap==2).refresh_item(mainMenu); + mainMenu.get_item("sendkey_mapper_alttab").check(sendkeymap==3).refresh_item(mainMenu); + mainMenu.get_item("sendkey_mapper_ctrlesc").check(sendkeymap==4).refresh_item(mainMenu); + mainMenu.get_item("sendkey_mapper_ctrlbreak").check(sendkeymap==5).refresh_item(mainMenu); + mainMenu.get_item("sendkey_mapper_cad").check(!sendkeymap).refresh_item(mainMenu); + } + } else if (!strcasecmp(pvar.c_str(), "sdl")) { + modifier = section->Get_string("clip_key_modifier"); + paste_speed = section->Get_int("clip_paste_speed"); + const char* pastebios = section->Get_string("clip_paste_bios"); + if(!strcasecmp(pastebios, "default") || !strcasecmp(pastebios, "true") || !strcmp(pastebios, "1")) clipboard_biospaste = true; + else if(!strcasecmp(pastebios, "false") || !strcmp(pastebios, "0")) clipboard_biospaste = false; + mainMenu.get_item("clipboard_biospaste").check(clipboard_biospaste).refresh_item(mainMenu); + if (!strcasecmp(inputline.substr(0, 16).c_str(), "mouse_wheel_key=")) { + wheel_key = section->Get_int("mouse_wheel_key"); + wheel_guest=wheel_key>0; + if (wheel_key<0) wheel_key=-wheel_key; + mainMenu.get_item("wheel_updown").check(wheel_key==1).refresh_item(mainMenu); + mainMenu.get_item("wheel_leftright").check(wheel_key==2).refresh_item(mainMenu); + mainMenu.get_item("wheel_pageupdown").check(wheel_key==3).refresh_item(mainMenu); + mainMenu.get_item("wheel_ctrlupdown").check(wheel_key==4).refresh_item(mainMenu); + mainMenu.get_item("wheel_ctrlleftright").check(wheel_key==5).refresh_item(mainMenu); + mainMenu.get_item("wheel_ctrlpageupdown").check(wheel_key==6).refresh_item(mainMenu); + mainMenu.get_item("wheel_ctrlwz").check(wheel_key==7).refresh_item(mainMenu); + mainMenu.get_item("wheel_none").check(wheel_key==0).refresh_item(mainMenu); + mainMenu.get_item("wheel_guest").check(wheel_guest).refresh_item(mainMenu); + } + if (!strcasecmp(inputline.substr(0, 12).c_str(), "sensitivity=")) { + Prop_multival* p3 = static_cast(section)->Get_multival("sensitivity"); + sdl.mouse.xsensitivity = p3->GetSection()->Get_int("xsens"); + sdl.mouse.ysensitivity = p3->GetSection()->Get_int("ysens"); + } +#if C_GAMELINK + if (!strcasecmp(inputline.substr(0, 22).c_str(), "gamelink load address=")) { + sdl.gamelink.loadaddr = section->Get_int("gamelink load address"); + } +#endif + if (!strcasecmp(inputline.substr(0, 11).c_str(), "fullscreen=")) { + if (section->Get_bool("fullscreen")) { + if (!GFX_IsFullscreen()) {GFX_LosingFocus();GFX_SwitchFullScreen();} + } else if (GFX_IsFullscreen()) {GFX_LosingFocus();GFX_SwitchFullScreen();} + } + if (!strcasecmp(inputline.substr(0, 7).c_str(), "output=")) { + std::string output=section->Get_string("output"); + if (output == "default") output=GetDefaultOutput(); + GFX_LosingFocus(); + toOutput(output.c_str()); +#if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU + if (!GFX_GetPreventFullscreen()) { + if (menu.toggle) DOSBox_SetMenu(); else DOSBox_NoMenu(); + } +#endif +#if defined(WIN32) && !defined(HX_DOS) + DOSBox_SetSysMenu(); +#endif + } + if (!strcasecmp(inputline.substr(0, 13).c_str(), "transparency=")) + SetWindowTransparency(section->Get_int("transparency")); +#if defined(C_SDL2) + if (!strcasecmp(inputline.substr(0, 16).c_str(), "mapperfile_sdl2=")) ReloadMapper(section,true); +#else + if (!strcasecmp(inputline.substr(0, 16).c_str(), "mapperfile_sdl1=")) ReloadMapper(section,true); +#if !defined(HAIKU) && !defined(RISCOS) + if (!strcasecmp(inputline.substr(0, 11).c_str(), "mapperfile=")) { + Prop_path* pp; +#if defined(C_SDL2) + pp = section->Get_path("mapperfile_sdl2"); +#else + pp = section->Get_path("mapperfile_sdl1"); +#endif + if (pp->realpath=="") ReloadMapper(section,true); + } + if (!strcasecmp(inputline.substr(0, 13).c_str(), "usescancodes=")) { + void setScanCode(Section_prop * section), loadScanCode(), MAPPER_Init(); + setScanCode(section); + loadScanCode(); + GFX_LosingFocus(); + MAPPER_Init(); + load=true; + } +#endif +#endif + if (!strcasecmp(inputline.substr(0, 8).c_str(), "display=")) { + void SetDisplayNumber(int display); + int numscreen = GetNumScreen(); + const int display = section->Get_int("display"); + if (display >= 0 && display <= numscreen) + SetDisplayNumber(display); + } + if (!strcasecmp(inputline.substr(0, 15).c_str(), "windowposition=")) { + const char* windowposition = section->Get_string("windowposition"); + int GetDisplayNumber(void); +#if defined(C_SDL2) || defined (WIN32) + int posx = -1, posy = -1; +#endif + if (windowposition && *windowposition) { + char result[100]; + safe_strncpy(result, windowposition, sizeof(result)); + char* y = strchr(result, ','); + if (y && *y) { + *y = 0; +#if defined(C_SDL2) || defined (WIN32) + posx = atoi(result); + posy = atoi(y + 1); +#endif + } + } +#if defined(C_SDL2) + SDL_Window* GFX_GetSDLWindow(void); + SDL_SetWindowTitle(GFX_GetSDLWindow(),"DOSBox-X"); + if (posx < 0 || posy < 0) { + SDL_DisplayMode dm; + int w = 640,h = 480; + SDL_GetWindowSize(GFX_GetSDLWindow(), &w, &h); + if (SDL_GetDesktopDisplayMode(GetDisplayNumber()?GetDisplayNumber()-1:0,&dm) == 0) { + posx = (dm.w - w)/2; + posy = (dm.h - h)/2; + } + } + if (GetDisplayNumber()>0) { + int displays = SDL_GetNumVideoDisplays(); + SDL_Rect bound; + for( int i = 1; i <= displays; i++ ) { + bound = SDL_Rect(); + SDL_GetDisplayBounds(i-1, &bound); + if (i == GetDisplayNumber()) { + posx += bound.x; + posy += bound.y; + break; + } + } + } + SDL_SetWindowPosition(GFX_GetSDLWindow(), posx, posy); +#elif defined(WIN32) + RECT rect; + MONITORINFO info; + GetWindowRect(GetHWND(), &rect); +#if !defined(HX_DOS) && !defined(_WIN32_WINDOWS) + if (GetDisplayNumber()>0) { + xyp xy={0}; + xy.x=-1; + xy.y=-1; + curscreen=0; + BOOL CALLBACK EnumDispProc(HMONITOR hMon, HDC dcMon, RECT* pRcMon, LPARAM lParam); + EnumDisplayMonitors(0, 0, EnumDispProc, reinterpret_cast(&xy)); + HMONITOR monitor = MonitorFromRect(&monrect, MONITOR_DEFAULTTONEAREST); + info.cbSize = sizeof(MONITORINFO); + GetMonitorInfo(monitor, &info); + if (posx >=0 && posy >=0) { + posx+=info.rcMonitor.left; + posy+=info.rcMonitor.top; + } else { + posx = info.rcMonitor.left+(info.rcMonitor.right-info.rcMonitor.left-(rect.right-rect.left))/2; + posy = info.rcMonitor.top+(info.rcMonitor.bottom-info.rcMonitor.top-(rect.bottom-rect.top))/2; + } + } else +#endif + if (posx < 0 && posy < 0) { + posx = (GetSystemMetrics(SM_CXSCREEN)-(rect.right-rect.left))/2; + posy = (GetSystemMetrics(SM_CYSCREEN)-(rect.bottom-rect.top))/2; + } + MoveWindow(GetHWND(), posx, posy, rect.right-rect.left, rect.bottom-rect.top, true); +#endif + } + +#if defined(USE_TTF) + if (TTF_using()) resetFontSize(); +#endif + } else if (!strcasecmp(pvar.c_str(), "cpu")) { + bool turbo = section->Get_bool("turbo"); + if (turbo != ticksLocked) DOSBOX_UnlockSpeed2(true); + } else if (!strcasecmp(pvar.c_str(), "dos")) { + mountwarning = section->Get_bool("mountwarning"); + if (!strcasecmp(inputline.substr(0, 15).c_str(), "autofixwarning=")) { + std::string autofixwarning=section->Get_string("autofixwarning"); + autofixwarn=autofixwarning=="false"||autofixwarning=="0"||autofixwarning=="none"?0:(autofixwarning=="a20fix"?1:(autofixwarning=="loadfix"?2:3)); + } else if (!strcasecmp(inputline.substr(0, 4).c_str(), "lfn=")) { + std::string lfn = section->Get_string("lfn"); + if (lfn=="true"||lfn=="1") enablelfn=1; + else if (lfn=="false"||lfn=="0") enablelfn=0; + else if (lfn=="autostart") enablelfn=-2; + else enablelfn=-1; + mainMenu.get_item("dos_lfn_auto").check(enablelfn==-1).refresh_item(mainMenu); + mainMenu.get_item("dos_lfn_enable").check(enablelfn==1).refresh_item(mainMenu); + mainMenu.get_item("dos_lfn_disable").check(enablelfn==0).refresh_item(mainMenu); + uselfn = enablelfn==1 || ((enablelfn == -1 || enablelfn == -2) && (dos.version.major>6 || winrun)); + } else if (!strcasecmp(inputline.substr(0, 16).c_str(), "fat32setversion=")) { + std::string fat32setverstr = section->Get_string("fat32setversion"); + if (fat32setverstr=="auto") fat32setver=1; + else if (fat32setverstr=="manual") fat32setver=0; + else fat32setver=-1; + } else if (!strcasecmp(inputline.substr(0, 4).c_str(), "ver=")) { + const char *ver = section->Get_string("ver"); + if (!*ver) { + dos.version.minor=0; + dos.version.major=5; + dos_ver_menu(false); + } else if (set_ver((char *)ver)) + dos_ver_menu(false); + } else if (!strcasecmp(inputline.substr(0, 4).c_str(), "ems=")) { +#if !defined(OSFREE) + EMS_DoShutDown(); + EMS_Startup(NULL); +#endif + update_dos_ems_menu(); + } else if (!strcasecmp(inputline.substr(0, 32).c_str(), "shell configuration as commands=")) { + enable_config_as_shell_commands = section->Get_bool("shell configuration as commands"); + mainMenu.get_item("shell_config_commands").check(enable_config_as_shell_commands).enable(true).refresh_item(mainMenu); + } else if (!strcasecmp(inputline.substr(0, 18).c_str(), "dos clipboard api=")) { + clipboard_dosapi = section->Get_bool("dos clipboard api"); + mainMenu.get_item("clipboard_dosapi").check(clipboard_dosapi).refresh_item(mainMenu); + } else if (!strcasecmp(inputline.substr(0, 22).c_str(), "pipe temporary device=")) { + pipetmpdev = section->Get_bool("pipe temporary device"); +#if defined(WIN32) && !defined(HX_DOS) + } else if (!strcasecmp(inputline.substr(0, 13).c_str(), "automountall=")) { + const char *automountstr = section->Get_string("automountall"); + if (strcmp(automountstr, "0") && strcmp(automountstr, "false")) MountAllDrives(quiet||!strcmp(automountstr, "quiet")); + } else if (!strcasecmp(inputline.substr(0, 9).c_str(), "startcmd=")) { + winautorun = section->Get_bool("startcmd"); + mainMenu.get_item("dos_win_autorun").check(winautorun).enable(true).refresh_item(mainMenu); +#endif +#if defined(WIN32) && !defined(HX_DOS) || defined(LINUX) || defined(MACOSX) + } else if (!strcasecmp(inputline.substr(0, 15).c_str(), "starttranspath=")) { + starttranspath = section->Get_bool("starttranspath"); + mainMenu.get_item("dos_win_transpath").check(starttranspath).enable( +#if defined(WIN32) && !defined(HX_DOS) + true +#else + startcmd +#endif + ).refresh_item(mainMenu); + } else if (!strcasecmp(inputline.substr(0, 10).c_str(), "startwait=")) { + startwait = section->Get_bool("startwait"); + mainMenu.get_item("dos_win_wait").check(startwait).enable( +#if defined(WIN32) && !defined(HX_DOS) + true +#else + startcmd +#endif + ).refresh_item(mainMenu); + } else if (!strcasecmp(inputline.substr(0, 11).c_str(), "startquiet=")) { + startquiet = section->Get_bool("startquiet"); + mainMenu.get_item("dos_win_quiet").check(startquiet).enable( +#if defined(WIN32) && !defined(HX_DOS) + true +#else + startcmd +#endif + ).refresh_item(mainMenu); +#endif + } + } else if (!strcasecmp(pvar.c_str(), "ttf")) { + void ttf_reset(void), ttf_setlines(int cols, int lins), SetBlinkRate(Section_prop* section); + if (!strcasecmp(inputline.substr(0, 5).c_str(), "font=")) { +#if defined(USE_TTF) + if (TTF_using()) { + std::string font = section->Get_string("font"); + if (font.empty() && !IS_PC98_ARCH && !isDBCSCP()) notrysgf = true; + ttf_reset(); + notrysgf = false; + int missing = IS_PC98_ARCH ? 0 : setTTFMap(false); + if (missing > 0 && first_shell) first_shell->WriteOut(MSG_Get("SHELL_CMD_CHCP_MISSING"), missing); + +#if C_PRINTER + if (printfont) UpdateDefaultPrinterFont(); +#endif + } +#endif + } else if (!strcasecmp(inputline.substr(0, 7).c_str(), "ptsize=")||!strcasecmp(inputline.substr(0, 8).c_str(), "winperc=")) { +#if defined(USE_TTF) + lesssize = true; + if (TTF_using()) ttf_reset(); + lesssize = false; +#endif + } else if (!strcasecmp(inputline.substr(0, 5).c_str(), "lins=")||!strcasecmp(inputline.substr(0, 5).c_str(), "cols=")) { +#if defined(USE_TTF) + if (TTF_using()) { + bool iscol=!strcasecmp(inputline.substr(0, 5).c_str(), "cols="); + if (iscol&&IS_PC98_ARCH) + SetVal("render", "cols", "80"); + else if (!CurMode) + ; + else if (CurMode->type==M_TEXT || IS_PC98_ARCH) { + const char *str = "\033[2J"; + uint16_t n = (uint16_t)strlen(str); + DOS_WriteFile(STDOUT,(uint8_t *)str,&n); + if (quiet && first_shell) first_shell->ShowPrompt(); + } else { + reg_ax=CurMode->mode; + CALLBACK_RunRealInt(0x10); + } + lastset=iscol?2:1; + ttf_setlines(0, 0); + lastset=0; + } +#endif + } else if (!strcasecmp(inputline.substr(0, 13).c_str(), "outputswitch=")) { +#if defined(USE_TTF) + SetOutputSwitch(section->Get_string("outputswitch")); +#endif + } else if (!strcasecmp(inputline.substr(0, 7).c_str(), "colors=")) { +#if defined(USE_TTF) + if (TTF_using() && !strlen(section->Get_string("colors"))) ttf_reset_colors(); +#endif + } else if (!strcasecmp(inputline.substr(0, 3).c_str(), "wp=")) { +#if defined(USE_TTF) + const char *wpstr=section->Get_string("wp"); + wpType=wpVersion=0; + if (strlen(wpstr)>1) { + if (!strncasecmp(wpstr, "WP", 2)) wpType=1; + else if (!strncasecmp(wpstr, "WS", 2)) wpType=2; + else if (!strncasecmp(wpstr, "XY", 3)) wpType=3; + if (strlen(wpstr)>2&&wpstr[2]>='1'&&wpstr[2]<='9') wpVersion=wpstr[2]-'0'; + } + mainMenu.get_item("ttf_wpno").check(!wpType).refresh_item(mainMenu); + mainMenu.get_item("ttf_wpwp").check(wpType==1).refresh_item(mainMenu); + mainMenu.get_item("ttf_wpws").check(wpType==2).refresh_item(mainMenu); + mainMenu.get_item("ttf_wpxy").check(wpType==3).refresh_item(mainMenu); + mainMenu.get_item("ttf_wpfe").check(wpType==4).refresh_item(mainMenu); + if (TTF_using()) resetFontSize(); +#endif + } else if (!strcasecmp(inputline.substr(0, 5).c_str(), "wpbg=")) { +#if defined(USE_TTF) + wpBG = section->Get_int("wpbg"); + if (TTF_using()) resetFontSize(); +#endif + } else if (!strcasecmp(inputline.substr(0, 5).c_str(), "wpfg=")) { +#if defined(USE_TTF) + wpFG = section->Get_int("wpfg"); + if (wpFG<0) wpFG = 7; + if (TTF_using()) resetFontSize(); +#endif + } else if (!strcasecmp(inputline.substr(0, 5).c_str(), "bold=")) { +#if defined(USE_TTF) + showbold = section->Get_bool("bold"); + mainMenu.get_item("ttf_showbold").check(showbold).refresh_item(mainMenu); + if (TTF_using()) resetFontSize(); +#endif + } else if (!strcasecmp(inputline.substr(0, 7).c_str(), "italic=")) { +#if defined(USE_TTF) + showital = section->Get_bool("italic"); + mainMenu.get_item("ttf_showital").check(showital).refresh_item(mainMenu); + if (TTF_using()) resetFontSize(); +#endif + } else if (!strcasecmp(inputline.substr(0, 10).c_str(), "underline=")) { +#if defined(USE_TTF) + showline = section->Get_bool("underline"); + mainMenu.get_item("ttf_showline").check(showline).refresh_item(mainMenu); + if (TTF_using()) resetFontSize(); +#endif + } else if (!strcasecmp(inputline.substr(0, 10).c_str(), "strikeout=")) { +#if defined(USE_TTF) + showsout = section->Get_bool("strikeout"); + mainMenu.get_item("ttf_showsout").check(showsout).refresh_item(mainMenu); + if (TTF_using()) resetFontSize(); +#endif + } else if (!strcasecmp(inputline.substr(0, 8).c_str(), "char512=")) { +#if defined(USE_TTF) + char512 = section->Get_bool("char512"); + if (TTF_using()) resetFontSize(); +#endif + } else if (!strcasecmp(inputline.substr(0, 12).c_str(), "righttoleft=")) { +#if defined(USE_TTF) + rtl = section->Get_bool("righttoleft"); + mainMenu.get_item("ttf_right_left").check(rtl).refresh_item(mainMenu); + if (TTF_using()) resetFontSize(); +#endif + } else if (!strcasecmp(inputline.substr(0, 10).c_str(), "printfont=")) { +#if defined(USE_TTF) && C_PRINTER + printfont = section->Get_bool("printfont"); + mainMenu.get_item("ttf_printfont").check(printfont).refresh_item(mainMenu); + UpdateDefaultPrinterFont(); +#endif + } else if (!strcasecmp(inputline.substr(0, 9).c_str(), "autodbcs=")) { +#if defined(USE_TTF) + dbcs_sbcs = section->Get_bool("autodbcs"); + mainMenu.get_item("mapper_dbcssbcs").check(dbcs_sbcs).refresh_item(mainMenu); + if (TTF_using()) resetFontSize(); +#endif + } else if (!strcasecmp(inputline.substr(0, 12).c_str(), "autoboxdraw=")) { +#if defined(USE_TTF) + autoboxdraw = section->Get_bool("autoboxdraw"); + mainMenu.get_item("mapper_autoboxdraw").check(autoboxdraw).refresh_item(mainMenu); + if (TTF_using()) resetFontSize(); +#endif + } else if (!strcasecmp(inputline.substr(0, 14).c_str(), "halfwidthkana=")) { +#if defined(USE_TTF) + halfwidthkana = section->Get_bool("halfwidthkana"); + mainMenu.get_item("ttf_halfwidthkana").check(halfwidthkana||IS_PC98_ARCH||IS_JEGA_ARCH).refresh_item(mainMenu); + if (TTF_using()) {setTTFCodePage();resetFontSize();} +#endif + } else if (!strcasecmp(inputline.substr(0, 7).c_str(), "blinkc=")) { +#if defined(USE_TTF) + SetBlinkRate(section); + mainMenu.get_item("ttf_blinkc").check(blinkCursor>-1).refresh_item(mainMenu); +#endif + } else if (!strcasecmp(inputline.substr(0, 4).c_str(), "gbk=")) { + if (gbk != section->Get_bool("gbk")) { + gbk = !gbk; + if (enable_dbcs_tables&&dos.tables.dbcs&&(IS_PDOSV||dos.loaded_codepage==936)) mem_writeb(Real2Phys(dos.tables.dbcs)+2,gbk?0x81:0xA1); + clearFontCache(); + if (dos.loaded_codepage!=950&&dos.loaded_codepage!=951) mainMenu.get_item("ttf_extcharset").check(dos.loaded_codepage==936?gbk:(gbk&&chinasea)).refresh_item(mainMenu); +#if defined(USE_TTF) + if (TTF_using() && dos.loaded_codepage==936) resetFontSize(); +#endif + } + } else if (!strcasecmp(inputline.substr(0, 9).c_str(), "chinasea=")) { + if (chinasea != section->Get_bool("chinasea")) { + chinasea = !chinasea; + if (!chinasea) makestdcp950table(); + else makeseacp951table(); + clearFontCache(); + if (dos.loaded_codepage!=936) mainMenu.get_item("ttf_extcharset").check(dos.loaded_codepage==950||dos.loaded_codepage==951?chinasea:(gbk&&chinasea)).refresh_item(mainMenu); + if ((TTF_using() || showdbcs) && (dos.loaded_codepage==950 || dos.loaded_codepage==951)) { + MSG_Init(); +#if defined(USE_TTF) + if (TTF_using()) resetFontSize(); +#endif + } + } + } else if (!strcasecmp(inputline.substr(0, 4).c_str(), "uao=")) { + if (uao != section->Get_bool("uao")) { + uao = !uao; + clearFontCache(); + if ((TTF_using() || showdbcs) && dos.loaded_codepage==951) { + MSG_Init(); + DOSBox_SetSysMenu(); +#if defined(USE_TTF) + if (TTF_using()) resetFontSize(); +#endif + runRescan("-A -Q"); + } + } + } + } else if (!strcasecmp(pvar.c_str(), "dosv")) { + if (!strcasecmp(inputline.substr(0, 15).c_str(), "showdbcsnodosv=") +#if defined(USE_TTF) + && !ttfswitch +#endif + ) { + std::string showdbcsstr = section->Get_string("showdbcsnodosv"); +#if defined(USE_TTF) + showdbcs = showdbcsstr=="true"||showdbcsstr=="1"||(showdbcsstr=="auto" && (loadlang || dbcs_sbcs)); +#else + showdbcs = showdbcsstr=="true"||showdbcsstr=="1"||(showdbcsstr=="auto" && loadlang); +#endif + if (!IS_EGAVGA_ARCH) showdbcs = false; + } else if (!strcasecmp(inputline.substr(0, 11).c_str(), "fepcontrol=")||!strcasecmp(inputline.substr(0, 7).c_str(), "vtext1=")||!strcasecmp(inputline.substr(0, 7).c_str(), "vtext2=")) + DOSV_SetConfig(section); + } else if (!strcasecmp(pvar.c_str(), "render")) { + if (!strcasecmp(inputline.substr(0, 9).c_str(), "glshader=")) { +#if C_OPENGL + std::string LoadGLShader(Section_prop * section); + LoadGLShader(section); + GFX_ForceRedrawScreen(); +#endif + } else if (!strcasecmp(inputline.substr(0, 12).c_str(), "pixelshader=")) + GFX_ForceRedrawScreen(); + else if (!strcasecmp(inputline.substr(0, 13).c_str(), "aspect_ratio=")) { + setAspectRatio(section); + if (render.aspect) GFX_ForceRedrawScreen(); + } + } else if (!strcasecmp(pvar.c_str(), "serial")) { + if (!strcasecmp(inputline.substr(0, 6).c_str(), "serial") && inputline[7]=='=') { + std::string val = section->Get_string("serial" + std::string(1, inputline[6])), cmd = std::string(1, inputline[6]) + " " + (val.size()?val:"dummy"); + runSerial(cmd.c_str()); + } + } else if (!strcasecmp(pvar.c_str(), "parallel")) { + if (!strcasecmp(inputline.substr(0, 8).c_str(), "parallel") && inputline[9]=='=') { + std::string val = section->Get_string("parallel" + std::string(1, inputline[8])), cmd = std::string(1, inputline[8]) + " " + (val.size()?val:"disabled"); + runParallel(cmd.c_str()); + } +#if C_PRINTER + } else if (!strcasecmp(pvar.c_str(), "printer")) { + PRINTER_Shutdown(NULL); + PRINTER_Init(); +#endif + } + } + } +} + +#if !defined(OSFREE) +uint8_t device_nextdrive = 0; +#endif + +#if !defined(OSFREE) +uint8_t imageDiskMSDOSBlockDevice::Read_AbsoluteSector(uint32_t sectnum, void * data) { + const unsigned int max_sects = (bdevbuf_sz - 16) / sector_size; + if (max_sects == 0) return 0x05; + + const uint16_t count = 1; + const uint32_t sector = sectnum; + const uint16_t strategy = mem_readw(devhdr+6); + const uint16_t intrupt = mem_readw(devhdr+8); + unsigned char *p_data = (unsigned char*)data; + + uint16_t oldbx = reg_bx; + uint16_t oldds = SegValue(ds); + uint16_t oldes = SegValue(es); + + DOS_DEVHDR::req_rwio req = {0}; + req.hdr.record_length = sizeof(req); + req.hdr.unit_code = unit_code; + req.hdr.cmd_code = DEVFUNC_READ; + req.xfer_addr = RealMake(bdevbuf_seg+1,0); + req.count = count; + req.ptr_volid = RealMake(bdevbuf_seg,0); + if (attr & DEVATTRBLK_EXTENDED) { + req.start_sector = 0xFFFF; + req.start_sector32 = sector; + } + else { + if (sector > 0xFFFFu) return 0x05; + req.start_sector = sector; + req.start_sector32 = 0; + } + req.media_dpb = media_dpb; + MEM_BlockWrite(PhysMake(dos.dcp,0),&req,sizeof(req)); + + LOG(LOG_MISC,LOG_DEBUG)("Block device read devseg=%x sectnum %x devseg %x strat %x intr %x xfer=%x:%x", + devseg,sectnum,devseg,strategy,intrupt, + req.xfer_addr>>16,req.xfer_addr&0xFFFFu); + + reg_bx = 0; + SegSet16(ds, devseg); + SegSet16(es, dos.dcp); + CALLBACK_RunRealFar(devseg, strategy); + CALLBACK_RunRealFar(devseg, intrupt); + reg_bx = oldbx; + SegSet16(es, oldes); + SegSet16(ds, oldds); + + MEM_BlockRead(PhysMake(dos.dcp,0),&req,sizeof(req)); + + LOG(LOG_MISC,LOG_DEBUG)("--result status=%x count=%u", + req.hdr.status,req.count); + + if (req.hdr.status & 0x8000) return 0x05;/*error*/ + if (req.count == 0) return 0x05;/*error*/ + + MEM_BlockRead(PhysMake(bdevbuf_seg+1,0),p_data,sector_size); + return 0; +} +#endif + +#if !defined(OSFREE) +uint8_t imageDiskMSDOSBlockDevice::Write_AbsoluteSector(uint32_t sectnum, const void * data) { + const unsigned int max_sects = (bdevbuf_sz - 16) / sector_size; + if (max_sects == 0) return 0x05; + + const uint16_t count = 1; + const uint32_t sector = sectnum; + const uint16_t strategy = mem_readw(devhdr+6); + const uint16_t intrupt = mem_readw(devhdr+8); + const unsigned char *p_data = (const unsigned char*)data; + + uint16_t oldbx = reg_bx; + uint16_t oldds = SegValue(ds); + uint16_t oldes = SegValue(es); + + DOS_DEVHDR::req_rwio req = {0}; + req.hdr.record_length = sizeof(req); + req.hdr.unit_code = unit_code; + req.hdr.cmd_code = DEVFUNC_WRITE; + req.xfer_addr = RealMake(bdevbuf_seg+1,0); + req.count = count; + req.ptr_volid = RealMake(bdevbuf_seg,0); + if (attr & DEVATTRBLK_EXTENDED) { + req.start_sector = 0xFFFF; + req.start_sector32 = sector; + } + else { + if (sector > 0xFFFFu) return 0x05; + req.start_sector = sector; + req.start_sector32 = 0; + } + req.media_dpb = media_dpb; + MEM_BlockWrite(PhysMake(dos.dcp,0),&req,sizeof(req)); + MEM_BlockWrite(PhysMake(bdevbuf_seg+1,0),p_data,sector_size); + + LOG(LOG_MISC,LOG_DEBUG)("Block device write devseg=%x sectnum %x devseg %x strat %x intr %x xfer=%x:%x", + devseg,sectnum,devseg,strategy,intrupt, + req.xfer_addr>>16,req.xfer_addr&0xFFFFu); + + reg_bx = 0; + SegSet16(ds, devseg); + SegSet16(es, dos.dcp); + CALLBACK_RunRealFar(devseg, strategy); + CALLBACK_RunRealFar(devseg, intrupt); + reg_bx = oldbx; + SegSet16(es, oldes); + SegSet16(ds, oldds); + + MEM_BlockRead(PhysMake(dos.dcp,0),&req,sizeof(req)); + + LOG(LOG_MISC,LOG_DEBUG)("--result status=%x count=%u", + req.hdr.status,req.count); + + if (req.hdr.status & 0x8000) return 0x05;/*error*/ + if (req.count == 0) return 0x05;/*error*/ + + return 0; +} +#endif + +#if !defined(OSFREE) +bool imageDiskMSDOSBlockDevice::detectDiskChange(void) { + return false;//TODO +} +#endif + +#if !defined(OSFREE) +imageDiskMSDOSBlockDevice::imageDiskMSDOSBlockDevice() : imageDisk(ID_MSDOSBLOCKDEV) { +} +#endif + +#if !defined(OSFREE) +imageDiskMSDOSBlockDevice::~imageDiskMSDOSBlockDevice() { +} +#endif + +#if !defined(OSFREE) +bool DeviceLoad(const std::string &device,const std::string &devparm) { + bool user_wants_mcb_per_driver = false; + uint16_t devseg = 0,ofs,attr; + bool adj_mcb_base = false; + uint16_t stacksz = 256u; + + std::string devname = device; + { + const char *s = strrchr(device.c_str(),'\\'); + if (s && *s) { + s++; + if (*s) devname = s; + } + } + + Section_prop * section=static_cast(control->GetSection("config")); + + if (section->Get_bool("device driver mcb")) + user_wants_mcb_per_driver = true; + + /* reduce our executable image down to only the PSP segment to maximize memory for the device driver load */ + unsigned int psp_sz = 0x80 + devname.length() + 1 + devparm.length() + 3u + stacksz; + uint16_t psp_blocks = (psp_sz + 15u) / 16u; /* just enough for a PSP segment so DOS exit is possible -- we don't care about the command tail either */ + uint16_t blocks = psp_blocks; + if (!DOS_ResizeMemory(dos.psp(),&blocks)) + return false; + + /* free the environment block associated with the PSP */ + { + DOS_PSP p(dos.psp()); + const uint16_t s = p.GetEnvironment(); + if (s != 0) { + DOS_FreeMemory(s); + p.SetEnvironment(0); + } + } + + /* relocate PSP segment to end of memory, if possible, to help load the driver image as low as possible + * and try to avoid leaving behind small blocks of free memory behind */ + { + uint16_t pmemstrat = DOS_GetMemAllocStrategy(); + DOS_SetMemAllocStrategy(2/*lastfit*/); + uint16_t blocks = psp_blocks; + uint16_t newpsp = 0; + bool ok = DOS_AllocateMemory(&newpsp,&blocks); + DOS_SetMemAllocStrategy(pmemstrat); + + if (ok && newpsp) { + LOG(LOG_MISC,LOG_DEBUG)("Relocating PSP segment from %x to %x",dos.psp(),newpsp); + mem_memcpy(PhysMake(newpsp,0),PhysMake(dos.psp(),0),psp_blocks << 4u); + DOS_FreeMemory(dos.psp()); + dos.psp(newpsp); + + /* update the pointer to the Job File Table to prevent breaking all file I/O past this point */ + real_writew(dos.psp(),0x36,dos.psp()); + + DOS_MCB dev_mcb((uint16_t)(dos.psp()-1)); + dev_mcb.SetPSPSeg(dos.psp()); + + CPU_SetSegGeneral(cs,dos.psp()); + CPU_SetSegGeneral(ds,dos.psp()); + CPU_SetSegGeneral(es,dos.psp()); + } + } + + /* redirect instruction pointer to PSP:0 so that CONFIG exits immediately after this function returns */ + reg_ip = 0; + + /* redirect the stack pointer */ + CPU_SetSegGeneral(ss,dos.psp()); + reg_esp = psp_sz - 2u; + + /* allocate a new memory block to hold the device driver image. */ + /* ownership remains with CONFIG unless successful driver init and initialization, so that on error it is freed automatically */ + blocks = 0xFFFFu; + if (DOS_AllocateMemory(&devseg,&blocks)) E_Exit("Allocate memory: memory availability check actually allocated memory unexpectedly"); + LOG(LOG_MISC,LOG_DEBUG)("Device driver load: %u bytes available",(unsigned int)blocks * 16u); + + if (!DOS_AllocateMemory(&devseg,&blocks)) + return false; + + uint8_t devseg_mcb[16]; + MEM_BlockRead(PhysMake(devseg-1,0),devseg_mcb,16); + + /* if the allocated block is the first in the chain, and the CONFIG shell is active, and the MCB block is + * owned by this program, we might be able to load over the MCB block and write a new one at the end of + * the image and adjust the MCB start in order to pack the drivers together into the DOS segment like + * real MS-DOS does. */ + if (!user_wants_mcb_per_driver && first_shell && first_shell->config_shell && devseg == (dos_infoblock.GetFirstMCB()+1)) { + DOS_MCB mcb(devseg-1u); + + /* this program must own the PSP segment (because we allocated it) */ + if (mcb.GetPSPSeg() == 0 || mcb.GetPSPSeg() == dos.psp()) { + LOG(LOG_MISC,LOG_DEBUG)("Allocated memory for driver is the first in MCB chain, may adjust it forward"); + adj_mcb_base = true; + devseg--; /* load overtop the MCB */ + } + } + + LOG(LOG_MISC,LOG_DEBUG)("Device driver load area: segment %x-%x for driver '%s'",(unsigned int)devseg,(unsigned int)(devseg+blocks-1u),device.c_str()); + + /* Use DOS_Execute() with special device driver flag value, which loads it like an overlay. + * Contrary to what you've probably been told about device drivers, they do not have to be + * flat COM type images. They can be EXE files too (MZ header with relocation table and + * everything), in which case the device driver header is within the first 18 bytes of the + * resident image. + * + * If you've ever wondered how MS-DOS allows EMM386.EXE to work as both an executable program + * AND a device driver, and how DEVICE=C:\DOS\EMM386.EXE is even allowed, that is how. */ + if (!DOS_Execute(device.c_str(),devseg | ((devseg+blocks)<<16u),DOSEXEC_DEVICEDRIVER)) { + if (adj_mcb_base) MEM_BlockWrite(PhysMake(devseg,0),devseg_mcb,16); /* put the MCB back */ + return false; + } + + /* FIXME: Apparently you are allowed to put multiple device drivers in one file. + * That would suggest that the header could have some valid next pointer + * instead of FFFF:FFFF. + * + * I do not have any such driver to test with, therefore, that is not supported. + * + * Guess: If it's a flat SYS file, maybe you can't do that. Maybe. + * If it's an EXE file, you could do that, because the relocation + * table could automatically set the segment value properly to + * point to the next driver. */ + if (real_readd(devseg,0) != 0xFFFFFFFF) { + LOG(LOG_MISC,LOG_DEBUG)("FIXME: Device driver files with multiple drivers inside it not yet supported"); + } + + attr = real_readw(devseg,4); + LOG(LOG_MISC,LOG_DEBUG)("Device driver attributes: %x",attr); + if (attr & DEVATTR_ISCHAR) { + std::string blah; + + if (attr & DEVATTRCHR_IOCTL_CTLSTRINGS) blah += " ctlstrings"; + if (attr & DEVATTRCHR_IOCTL_OUTPUT_UNTIL_BUSY) blah += " outubusy"; + if (attr & DEVATTRCHR_OPENCLOSE) blah += " openclose"; + if (attr & DEVATTRCHR_INT29) blah += " int29"; + if (attr & DEVATTRCHR_CLOCK) blah += " CLOCK$"; + if (attr & DEVATTRCHR_NULL) blah += " NULL"; + if (attr & DEVATTRCHR_CONOUT) blah += " CONOUT"; + if (attr & DEVATTRCHR_CONIN) blah += " CONIN"; + + LOG(LOG_MISC,LOG_DEBUG)("Supports:%s",blah.c_str()); + } + else { + std::string blah; + + if (attr & DEVATTRBLK_IOCTL_CTLSTRINGS) blah += " ctlstrings"; + if (attr & DEVATTRBLK_IOCTL_MEDIA_FAT_BYTE) blah += " mediafatbyte"; + if (attr & DEVATTRBLK_OPENCLOSEREMOVABLE) blah += " opencloseremove"; + if (attr & DEVATTRBLK_IBM_DRIVE_SHARED) blah += " ibmdriveshared"; + if (attr & DEVATTRBLK_IOCTL_GEN) blah += " ioctl-generic"; + if (attr & DEVATTRBLK_EXTENDED) blah += " extended>32mb"; + + LOG(LOG_MISC,LOG_DEBUG)("Supports:%s",blah.c_str()); + } + + /* Call strategy routine in driver so it knows where to look for structure, give it ES:BX = dos.dcp:0 */ + ofs = real_readw(devseg,0x6); + reg_bx = 0; CPU_SetSegGeneral(ds,devseg); + CPU_SetSegGeneral(es,dos.dcp); + LOG(LOG_MISC,LOG_DEBUG)("Calling device driver strategy routine at %x:%x",devseg,ofs); + CALLBACK_RunRealFar(devseg,ofs); /* no return value */ + + /* INIT */ + { + struct DOS_DEVHDR::req_init s; + memset(&s,0,sizeof(s)); + + if (dos.version.major >= 4) + s.hdr.record_length = 25; + else + s.hdr.record_length = 22; + + /* init arguments */ + /* NTS: This is also not documented by Microsoft apparently, but the init string apparently includes + * the name of the device driver. It's not just the text following the device. + * + * Apparently 'DEVICE=C:\DOS\BLAH.SYS /X /Y /Z' + * will produce an init string of 'BLAH.SYS /X /Y /Z' not '/X /Y /Z' + * + * RAMDRIVE.SYS is hardcoded to assume this. If we don't prepend the driver name into the init + * str the first command line switch will be silently ignored. + * + * Sometimes I wonder if the MS-DOS environment was chaotic and buggy purely because so many + * programmers had to guess and hack around to figure things out like that from lack of good + * or any documentation. */ + { + unsigned int i=0; + const char *s; + + s = devname.c_str(); + LOG(LOG_MISC,LOG_DEBUG)("Init device name '%s'",s); + while (*s) real_writeb(dos.psp(),0x80+(i++),*s++); + + real_writeb(dos.psp(),0x80+(i++),' '); + + s = devparm.c_str(); + LOG(LOG_MISC,LOG_DEBUG)("Init str '%s'",s); + while (*s) real_writeb(dos.psp(),0x80+(i++),*s++); + + /* \r\n terminated */ + /* OAKCDROM.SYS requires \r\n, or else scans memory for eternity */ + real_writeb(dos.psp(),0x80+(i++),0x0D); + real_writeb(dos.psp(),0x80+(i++),0x0A); + + /* NULL terminator */ + real_writeb(dos.psp(),0x80+(i++),0); + + assert((0x80+i) <= (psp_sz - stacksz)); + } + + /* block device: fill in drive number so RAMDRIVE.SYS can properly claim anything but drive A: */ + /* NTS: If a block device reports multiple units, that means it occupies consecutive drive letters. + * If we can't guarantee that, that might be a problem. Maybe. */ + if (!(attr & DEVATTR_ISCHAR)) { + s.drive_num = device_nextdrive; + + while (s.drive_num= DOS_DRIVES) { + if (adj_mcb_base) MEM_BlockWrite(PhysMake(devseg,0),devseg_mcb,16); /* put the MCB back */ + LOG(LOG_MISC,LOG_DEBUG)("No available drive letters for block device"); + return false; + } + } + + s.bpb_ptr = RealMake(dos.psp(),0x80); + s.end_ptr = RealMake(devseg+blocks,0);/*tell the driver where the current end is, perhaps as a memory size detect?*/ + const uint32_t bpb_ptr_initial = s.bpb_ptr; + LOG(LOG_MISC,LOG_DEBUG)("Giving device driver in DEVINIT request initial endptr %x:%x initstr %x:%x",devseg+blocks,0,dos.psp(),0x80); + s.hdr.cmd_code = DEVFUNC_INIT; + MEM_BlockWrite(PhysMake(dos.dcp,0),&s,sizeof(s)); + + /* interrupt routine is not expected to accept or return register values but must preserve all registers. + * if device drivers happen to assume things anyway, then, well'll deal with that later */ + ofs = real_readw(devseg,0x8); + LOG(LOG_MISC,LOG_DEBUG)("Calling device driver interrupt routine (DEVINIT request) at %x:%x",devseg,ofs); + CALLBACK_RunRealFar(devseg,ofs); /* no return value */ + + /* so what did the driver do with the request? */ + MEM_BlockRead(PhysMake(dos.dcp,0),&s,sizeof(s)); + + /* programming experience suggests that DOS doesn't give a damn about the status word of INIT, + * but if you want to fail loading, set end_ptr == 0. If DOS did give a crap, my old SBSYS device + * driver experiment from 1995 would have failed to run at all--I just realized today there's a bug + * in the code that sets the error bit in status word only because AL != 0 having come from playing + * audio directly to the SB DSP chip (usually 0x80) + * + * Some device drivers indicate failure by setting end_ptr to the first byte of their device driver, + * instead of NULL, because doing so effectively means leaving behind zero bytes of memory. */ + + /* did the driver zero the end ptr or set it too far back? */ + uint32_t newend_seg = s.end_ptr >> 16; + uint32_t newend_ofs = s.end_ptr & 0xFFFFu; + LOG(LOG_MISC,LOG_DEBUG)("Device driver returned new end_ptr %x:%x",newend_seg,newend_ofs); + + /* normalize the pointer to determine how many blocks to keep */ + newend_seg += newend_ofs >> 4u; + newend_ofs &= 0xFu; + LOG(LOG_MISC,LOG_DEBUG)("Device driver returned new end_ptr (normalized) %x:%x",newend_seg,newend_ofs); + + if (newend_ofs) { + newend_seg++; + newend_ofs = 0; + } + LOG(LOG_MISC,LOG_DEBUG)("Device driver returned new end_ptr (as segment) %x",newend_seg); + + if (newend_seg == 0 || PhysMake(newend_seg,newend_ofs) == PhysMake(devseg,0)) { /* normal error out */ + /* don't need to say anything, the driver will normally say it failed and probably why */ + LOG(LOG_MISC,LOG_DEBUG)("Device driver indicates normal error out by setting the end_ptr to effectively remove itself from memory"); + if (adj_mcb_base) MEM_BlockWrite(PhysMake(devseg,0),devseg_mcb,16); /* put the MCB back */ + return false; + } + else if ( + PhysMake(newend_seg,newend_ofs) < PhysMake(devseg,32)/*oh come on, keep at least 32 bytes of yourself around!*/ || + PhysMake(newend_seg,newend_ofs) > PhysMake(devseg+blocks,0)/*you cannot make your driver bigger than the original size!*/) { + LOG(LOG_MISC,LOG_DEBUG)("Device driver indicates error with invalid end_ptr"); + if (adj_mcb_base) MEM_BlockWrite(PhysMake(devseg,0),devseg_mcb,16); /* put the MCB back */ + return false; + } + + assert(newend_seg > devseg); + uint32_t drvszseg = newend_seg - devseg; + + LOG(LOG_MISC,LOG_DEBUG)("Device driver will occupy %x paragraphs (%u bytes)",drvszseg,drvszseg * 16u); + + if (adj_mcb_base) { + uint16_t nseg = devseg + drvszseg; + uint16_t xseg = devseg + blocks; + + /* put the MCB in the new location and update the size */ + MEM_BlockWrite(PhysMake(nseg,0),devseg_mcb,16); + LOG(LOG_MISC,LOG_DEBUG)("Moving MCB chain base from %x to %x",dos_infoblock.GetFirstMCB(),nseg); + + DOS_MCB mcb(nseg); + assert(xseg >= nseg); + mcb.SetSize(xseg - nseg); + dos_infoblock.SetFirstMCB(dos.firstMCB=nseg); + } + else { + blocks = drvszseg; + if (!DOS_ResizeMemory(devseg,&blocks)) + return false; + } + + if (s.bpb_ptr && s.bpb_ptr != bpb_ptr_initial && !(attr & DEVATTR_ISCHAR)/*block device*/) { + /* the init str ptr is changed in block devices to a pointer to BPB structures. */ + /* The MS-DOS source code provides documentation on the device driver interface, + * but the unclear way it is written implies that this is a pointer to an array of BPB structures. + * In reality, it's an array of BPB structure pointers (the offset field only) that point to BPB + * structures. Old Microsoft shit documentation, as usual. + * + * But at least in the MS-DOS 4.0 source code, this is much clearer from the ASM files that make up RAMDRIVE.SYS. + * + * The BPB structures provided by the driver follow the exact same structure as the BPB on disk. */ + LOG(LOG_MISC,LOG_DEBUG)("Device driver set BPB array pointer to %04x:%04x and returned %u units", + s.bpb_ptr >> 16,s.bpb_ptr & 0xFFFFu,s.num_of_units); + + /* adjust nextdrive by the number of units reported */ + device_nextdrive = s.drive_num + s.num_of_units; + + /* FIXME: I need a block device driver to test that provides multiple units from one driver */ + if (s.num_of_units > 1) LOG(LOG_MISC,LOG_DEBUG)("FIXME: Multiple units from one device driver not yet supported"); + + /* Make a drive letter for each unit */ + for (unsigned int i=0;i < s.num_of_units && i < 1/*<--remove this when multiple units supported*/;i++) { + uint16_t offset = real_readw(s.bpb_ptr>>16,(s.bpb_ptr&0xFFFFu)+(i*2)); + if (offset == 0xFFFF) break; /* RAMDRIVE.SYS seems to fill entries past num_of_units with 0xFFFF */ + + uint8_t newdrv = s.drive_num + i; + if (newdrv < DOS_DRIVES && Drives[newdrv]) { + LOG(LOG_MISC,LOG_DEBUG)("Drive %c is already taken",newdrv+'A'); + while (newdrv < DOS_DRIVES && Drives[newdrv]) newdrv++; + + if (newdrv < DOS_DRIVES) { + LOG(LOG_MISC,LOG_DEBUG)("Attaching block device to drive %c instead",newdrv+'A'); + } + else { + LOG(LOG_MISC,LOG_DEBUG)("There is no available drive letter for the block device"); + continue; + } + } + + /* assume the largest possible structure. + * I don't have yet a device driver that uses the full structure or + * that provides a disk larger than 32MB (RAMDRIVE.SYS limits itself to 32MB or less). + * doing this also allows possible FAT32 support if a block device can actually support that. + * + * Maybe when Microsoft first defined this interface they should have designed it so the + * device driver can indicate how many bytes the BPB structure occupies. */ + FAT_BootSector::bpb_union_t bpb; + unsigned int bpb_sz = 13;/*assume structure according to MS-DOS 2.0 documentation that ends afer "FAT sector count"*/ + + LOG(LOG_MISC,LOG_DEBUG)("Reading BPB from driver at %04x:%04x (assuming up to %u bytes)",devseg,offset,(unsigned int)sizeof(bpb)); + MEM_BlockRead(PhysMake(devseg,offset),&bpb,sizeof(bpb)); + + /* FIXME: MS-DOS 2.0 driver specification only mentions fields up to "number of sectors occupied by FAT". + * + * RAMDRIVE.SYS fills out the BPB only up to the first 16 bits of the 32-bit "hidden sectors" field. + * In any case, anything beyond the media descriptor byte is not necessarily valid data. The BPB + * pointer it returns points directly into the in-memory image of the boot sector of the RAM disk. + * + * If Microsoft had only thought while writing MS-DOS 2.0 to put a 16-bit or even 8-bit "size of struct" + * field at the beginning of the BPB struct in memory, it would be much easier to know whether structure members + * are actually there. + * + * What exactly does MS-DOS expect for a BPB struct if the device driver allows >= 32MB drives? + * How does Windows 95/98/ME extend this crappy interface so block devices can handle FAT32? */ + + if (bpb.is_fat32() && (attr & DEVATTRBLK_EXTENDED)/*supports >=32MB*/) + bpb_sz = 29;/*FIXME: Assume that a FAT32 BPB in memory probably ends after the "32-bit FAT sector count" field*/ + else if (bpb.v.BPB_TotSec16 == 0 && bpb.v.BPB_TotSec32 != 0 && (attr & DEVATTRBLK_EXTENDED)/*supports >=32MB*/) + bpb_sz = 25;/*FIXME: Assume that TotSec32 is valid and therefore the BPB struct ends after that field*/ + + /* zero out anything in the BPB past the assumed size, because it's probably structures or data specific to the device driver anyway */ + if (bpb_sz < sizeof(bpb)) { + const unsigned int rem = sizeof(bpb) - bpb_sz; + assert((rem+bpb_sz) == sizeof(bpb)); + memset(((char*)(&bpb))+bpb_sz,0,rem); + } + + LOG(LOG_MISC,LOG_DEBUG)("BPB: assumed-size=%u bytes/sec=%u sec/clus=%u rsvdsec=%u numfat=%u rootent=%u totsec16=%u mtb=%02xh fatsz16=%u", + bpb_sz, + bpb.v.BPB_BytsPerSec, + bpb.v.BPB_SecPerClus, + bpb.v.BPB_RsvdSecCnt, + bpb.v.BPB_NumFATs, + bpb.v.BPB_RootEntCnt, + bpb.v.BPB_TotSec16, + bpb.v.BPB_Media, + bpb.v.BPB_FATSz16); + + if (bpb.v.BPB_BytsPerSec >= 128 && bpb.v.BPB_BytsPerSec <= SECTOR_SIZE_MAX) { + imageDiskMSDOSBlockDevice *bd = new imageDiskMSDOSBlockDevice(); + bd->attr = attr; + bd->unit_code = i; + bd->devseg = devseg; + bd->devhdr = PhysMake(devseg,0); + bd->bpbptr = PhysMake(devseg,offset); + bd->media_dpb = bpb.v.BPB_Media; + bd->sector_size = bpb.v.BPB_BytsPerSec; + if (bpb.v.BPB_TotSec16 == 0) + bd->image_length = (uint64_t)bd->sector_size * (uint64_t)bpb.v.BPB_TotSec32; + else + bd->image_length = (uint64_t)bd->sector_size * (uint64_t)bpb.v.BPB_TotSec16; + + bd->diskSizeK = (bd->image_length + 1023) / 1024; + + InitBdevBuf(); + if (bd->image_length != 0) { + std::vector opt; + DOS_Drive* nd = new fatDrive(bd,opt); + if ((dynamic_cast(nd))->created_successfully) { + DriveManager::AppendDisk(newdrv, nd); + DriveManager::InitializeDrive(newdrv); + } + else { + LOG(LOG_MISC,LOG_DEBUG)("Drive creation failed"); + delete nd; /* releases and deletes bd */ + } + } + else { + LOG(LOG_MISC,LOG_DEBUG)("Block device image length == 0, removed"); + delete bd; + } + } + } + } + } + + if (!adj_mcb_base) { + /* Success. Change ownership of the device driver MCB so it remains in memory when CONFIG exits */ + DOS_MCB dev_mcb((uint16_t)(devseg-1)); + dev_mcb.SetPSPSeg(0x0008/*MS-DOS*/); + { + /* use the in-memory device name to name the MCB */ + char tmp[9]; + MEM_BlockRead(PhysMake(devseg,0xA),tmp,8); + tmp[8] = 0; + dev_mcb.SetFileName(tmp); + LOG(LOG_MISC,LOG_DEBUG)("Device driver added to device chain as '%s'",tmp); + } + } + + /* attach the driver to the device chain */ + { + unsigned int patience = 1024; + uint32_t start = dos_infoblock.GetDeviceChain(); + uint16_t segm = (uint16_t)(start>>16ul); + uint16_t offm = (uint16_t)(start&0xFFFFu); + while(start != 0xFFFFFFFFul) { + segm = (uint16_t)(start>>16u); + offm = (uint16_t)(start&0xFFFFu); + start = real_readd(segm,offm); + if (--patience == 0) E_Exit("Device driver chain corrupt"); + } + real_writed(segm,offm,(unsigned int)devseg<<16u); + } + + return true; +} +#endif + +#if !defined(OSFREE) +std::string config_run_var_device; +std::string config_run_var_devparm; +#endif + +#if !defined(OSFREE) +void CONFIG::Run(void) { + static const char* const params[] = { + "-r", "-wcp", "-wcd", "-wc", "-writeconf", "-wcpboot", "-wcdboot", "-wcboot", "-writeconfboot", "-bootconf", "-bc", + "-l", "-rmconf", "-h", "-help", "-?", "-axclear", "-axadd", "-axtype", + "-avistart","-avistop", + "-startmapper", + "-get", "-set", "-setf", + "-writelang", "-wl", "-langname", "-ln", + "-securemode", "-setup", "-all", "-mod", "-norem", "-errtest", "-gui", + "-device","-devparm", + NULL }; +/* HACK: P_ALL is in linux/wait.h */ +#if defined(P_ALL) +#define __P_ALL P_ALL +#undef P_ALL +#endif + enum prs { + P_NOMATCH, P_NOPARAMS, // fixed return values for GetParameterFromList + P_RESTART, + P_WRITECONF_PORTABLE, P_WRITECONF_DEFAULT, P_WRITECONF, P_WRITECONF2, + P_WRITECONF_PORTABLE_REBOOT, P_WRITECONF_DEFAULT_REBOOT, P_WRITECONF_REBOOT, P_WRITECONF2_REBOOT, + P_BOOTCONF, P_BOOTCONF2, P_LISTCONF, P_KILLCONF, + P_HELP, P_HELP2, P_HELP3, + P_AUTOEXEC_CLEAR, P_AUTOEXEC_ADD, P_AUTOEXEC_TYPE, + P_REC_AVI_START, P_REC_AVI_STOP, + P_START_MAPPER, + P_GETPROP, P_SETPROP, P_SETFORCE, + P_WRITELANG, P_WRITELANG2, P_LANGNAME, P_LANGNAME2, + P_SECURE, P_SETUP, P_ALL, P_MOD, P_NOREM, P_ERRTEST, P_GUI, + P_DEVICE, P_DEVPARM + } presult = P_NOMATCH; + + std::string device,devparm; + Section_prop * section=static_cast(control->GetSection("dosbox")); + int all = section->Get_bool("show advanced options")?1:-1; + bool first = true, norem = false; + std::vector pvars; + const char *rawcmd = cmd->GetRawCmdline().c_str(); + + /* direct path for config shell to trigger device driver load */ + if (first_shell && first_shell->config_shell) { + while (*rawcmd == ' ') rawcmd++; + if (!strcmp(rawcmd,"\xff\xaa\xff")/*User is unlikely to type this into their dosbox.conf*/) { + /* read from global vars */ + device = config_run_var_device; + devparm = config_run_var_devparm; + if (device.empty()) return; + DeviceLoad(device,devparm); + return; + } + } + + if (cmd->FindExist("-setup", true)) all = 2; + else if (cmd->FindExist("-all", true)) all = 1; + else if (cmd->FindExist("-mod", true)) all = 0; + if (cmd->FindExist("-norem", true)) norem = true; + // Loop through the passed parameters + while(presult != P_NOPARAMS) { + presult = (enum prs)cmd->GetParameterFromList(params, pvars); + switch(presult) { + + case P_DEVPARM: + for (const auto &p : pvars) { + if (!devparm.empty()) devparm += " "; + devparm += p; + } + break; + + case P_DEVICE: + if (pvars.size() < 1) { + WriteOut("-device requires path\n"); + return; + } else + device=pvars[0]; + break; + + case P_SETUP: + all = 2; + break; + + case P_ALL: + if (all<1) all = 1; + break; +#if defined(__P_ALL) +#define P_ALL __P_ALL +#endif + + case P_MOD: + if (all==-1) all = 0; + break; + + case P_NOREM: + norem = true; + break; + + case P_GUI: + void GUI_Run(bool pressed); + GUI_Run(false); + break; + + case P_LANGNAME: case P_LANGNAME2: + if (pvars.size() < 1) { + WriteOut("%s\n", langname.c_str()); + return; + } else + langname=pvars[0]; + break; + + case P_ERRTEST: + exit_status = 1; + WriteExitStatus(); + return; + + case P_RESTART: + WriteOut("-restart is no longer supported\n"); + return; + + case P_LISTCONF: { + Bitu size = (Bitu)control->configfiles.size(); + std::string config_path; + config_path = Cross::GetPlatformConfigDir(); + WriteOut(MSG_Get("PROGRAM_CONFIG_CONFDIR"), VERSION,config_path.c_str()); + char cwd[512] = "."; + // char *res = getcwd(cwd,sizeof(cwd)-1); + // if (res!=NULL) WriteOut(MSG_Get("PROGRAM_CONFIG_WORKDIR"), cwd); + if (size==0&&!configfile.size()) WriteOut(MSG_Get("PROGRAM_CONFIG_NOCONFIGFILE")); + else { + WriteOut(MSG_Get("PROGRAM_CONFIG_PRIMARY_CONF"),control->configfiles.front().c_str()); + if (size > 1) { + WriteOut(MSG_Get("PROGRAM_CONFIG_ADDITIONAL_CONF")); + for(Bitu i = 1; i < size; i++) + WriteOut("%s\n",control->configfiles[i].c_str()); + } + if (configfile.size()) WriteOut(MSG_Get("PROGRAM_CONFIG_GLOBAL_CONF"),configfile.c_str()); + } + if (control->startup_params.size() > 0) { + std::string test; + for(size_t k = 0; k < control->startup_params.size(); k++) + test += control->startup_params[k] + " "; + WriteOut(MSG_Get("PROGRAM_CONFIG_PRINT_STARTUP"), test.c_str()); + } + break; + } + case P_WRITECONF: case P_WRITECONF2: case P_WRITECONF_REBOOT: case P_WRITECONF2_REBOOT: + if (securemode_check()) return; + if (pvars.size() > 1) return; + else if (pvars.size() == 1) { + // write config to specific file, except if it is an absolute path + writeconf(pvars[0], !Cross::IsPathAbsolute(pvars[0]), all, norem); + if (presult==P_WRITECONF_REBOOT || presult==P_WRITECONF2_REBOOT) RebootConfig(pvars[0]); + } else { + // -wc without parameter: write primary config file + if (control->configfiles.size()) { + writeconf(control->configfiles[0], false, all, norem); + if (presult==P_WRITECONF_REBOOT || presult==P_WRITECONF2_REBOOT) RebootConfig(control->configfiles[0]); + } else WriteOut(MSG_Get("PROGRAM_CONFIG_NOCONFIGFILE")); + } + break; + case P_WRITECONF_DEFAULT: case P_WRITECONF_DEFAULT_REBOOT: { + // write to /userdir/dosbox-x-0.xx.conf + if (securemode_check()) return; + if (pvars.size() > 0) return; + std::string confname; + confname = Cross::GetPlatformConfigName(); + writeconf(confname, true, all, norem); + if (presult==P_WRITECONF_DEFAULT_REBOOT) RebootConfig(confname); + break; + } + case P_WRITECONF_PORTABLE: case P_WRITECONF_PORTABLE_REBOOT: + if (securemode_check()) return; + if (pvars.size() > 1) return; + else if (pvars.size() == 1) { + // write config to startup directory + writeconf(pvars[0], false, all, norem); + if (presult==P_WRITECONF_PORTABLE_REBOOT) RebootConfig(pvars[0]); + } else { + // -wcp without parameter: write dosbox-x.conf to startup directory + writeconf(std::string("dosbox-x.conf"), false, all, norem); + if (presult==P_WRITECONF_PORTABLE_REBOOT) RebootConfig(std::string("dosbox-x.conf")); + } + break; + case P_BOOTCONF: case P_BOOTCONF2: + if (securemode_check()) return; + if (pvars.size() > 1) return; + else if (pvars.size() == 1) { + RebootConfig(pvars[0]); + } else { + Bitu size = (Bitu)control->configfiles.size(); + if (size==0) RebootConfig("dosbox-x.conf"); + else RebootConfig(control->configfiles.front().c_str()); + } + break; + case P_NOPARAMS: + if (!first) break; + + case P_NOMATCH: + WriteOut(MSG_Get("PROGRAM_CONFIG_USAGE")); + return; + + case P_HELP: case P_HELP2: case P_HELP3: { + switch(pvars.size()) { + case 0: + WriteOut(MSG_Get("PROGRAM_CONFIG_USAGE")); + return; + case 1: { + if (!strcasecmp("sections",pvars[0].c_str())) { + // list the sections + WriteOut(MSG_Get("PROGRAM_CONFIG_HLP_SECTLIST")); + int i = 0; + while(true) { + Section* sec = control->GetSection(i++); + if (!sec) break; + WriteOut("%s\n",sec->GetName()); + } + return; + } + // if it's a section, leave it as one-param + Section* sec = control->GetSection(pvars[0].c_str()); + if (!sec) { + // could be a property + sec = control->GetSectionFromProperty(pvars[0].c_str()); + if (!sec&&pvars[0].size()>4&&!strcasecmp(pvars[0].substr(0, 4).c_str(), "ttf.")) { + pvars[0].erase(0,4); + sec = control->GetSectionFromProperty(pvars[0].c_str()); + } + if (!sec) { + WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_ERROR")); + return; + } + pvars.insert(pvars.begin(),std::string(sec->GetName())); + } + break; + } + case 2: { + // sanity check + Section* sec = control->GetSection(pvars[0].c_str()); + Section* sec2 = control->GetSectionFromProperty(pvars[1].c_str()); + + if (sec != sec2) { + WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_DUPLICATE")); + } + break; + } + default: + WriteOut(MSG_Get("PROGRAM_CONFIG_USAGE")); + return; + } + // if we have one value in pvars, it's a section + // two values are section + property + Section* sec = control->GetSection(pvars[0].c_str()); + if (sec==NULL) { + WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_ERROR")); + return; + } + Section_prop* psec = dynamic_cast (sec); + if (psec==NULL) { + // failed; maybe it's the autoexec section? + Section_line* pline = dynamic_cast (sec); + if (pline==NULL) E_Exit("Section dynamic cast failed."); + + WriteOut(MSG_Get("PROGRAM_CONFIG_HLP_LINEHLP"), + pline->GetName(), + // this is 'unclean' but the autoexec section has no help associated + MSG_Get("AUTOEXEC_CONFIGFILE_HELP"), + pline->data.c_str() ); + return; + } + if (pvars.size()==1) { + size_t i = 0; + WriteOut(MSG_Get("PROGRAM_CONFIG_HLP_SECTHLP"),pvars[0].c_str()); + while(true) { + // list the properties + Property* p = psec->Get_prop((int)(i++)); + if (p==NULL) break; + if (!(all>0 || (all==-1 && (p->basic() || p->modified())) || (!all && ((p->propname == "rem" && (!strcmp(pvars[0].c_str(), "4dos") || !strcmp(pvars[0].c_str(), "config"))) || p->modified())))) continue; + WriteOut("%s\n", p->propname.c_str()); + } + if (!strcasecmp(pvars[0].c_str(), "config")) + WriteOut("set\ninstall\ninstallhigh\ndevice\ndevicehigh\n"); + } else { + // find the property by its name + size_t i = 0; + while (true) { + Property *p = psec->Get_prop((int)(i++)); + if (p==NULL) break; + if (!strcasecmp(p->propname.c_str(),pvars[1].c_str())) { + // found it; make the list of possible values + std::string propvalues; + std::vector pv = p->GetValues(); + + if (p->Get_type()==Value::V_BOOL) { + // possible values for boolean are true, false + propvalues += "true, false"; + } else if (p->Get_type()==Value::V_INT) { + // print min, max for integer values if used + Prop_int* pint = dynamic_cast (p); + if (pint==NULL) E_Exit("Int property dynamic cast failed."); + if (pint->getMin() != pint->getMax()) { + std::ostringstream oss; + oss << pint->getMin(); + oss << ".."; + oss << pint->getMax(); + propvalues += oss.str(); + } + } + for(Bitu k = 0; k < pv.size(); k++) { + if (pv[k].ToString() =="%u") + propvalues += MSG_Get("PROGRAM_CONFIG_HLP_POSINT"); + else propvalues += pv[k].ToString(); + if ((k+1) < pv.size() && (strcmp(pvars[0].c_str(), "config") || p->propname != "numlock" || pv[k+1].ToString() != "")) propvalues += ", "; + } + + WriteOut(MSG_Get("PROGRAM_CONFIG_HLP_PROPHLP"), + p->propname.c_str(), + sec->GetName(), + p->Get_help(),propvalues.c_str(), + p->Get_Default_Value().ToString().c_str(), + p->GetValue().ToString().c_str()); + // print 'changeability' + if (p->getChange()==Property::Changeable::OnlyAtStart) { + WriteOut(MSG_Get("PROGRAM_CONFIG_HLP_NOCHANGE")); + } + return; + } + } + break; + } + return; + } + case P_AUTOEXEC_CLEAR: { + Section_line* sec = dynamic_cast + (control->GetSection(std::string("autoexec"))); + sec->data.clear(); + break; + } + case P_AUTOEXEC_ADD: { + if (pvars.size() == 0) { + WriteOut(MSG_Get("PROGRAM_CONFIG_MISSINGPARAM")); + return; + } + Section_line* sec = dynamic_cast + (control->GetSection(std::string("autoexec"))); + + for(Bitu i = 0; i < pvars.size(); i++) sec->HandleInputline(pvars[i]); + break; + } + case P_AUTOEXEC_TYPE: { + Section_line* sec = dynamic_cast + (control->GetSection(std::string("autoexec"))); + WriteOut("\n%s",sec->data.c_str()); + break; + } + case P_REC_AVI_START: + CAPTURE_VideoStart(); + break; + case P_REC_AVI_STOP: + CAPTURE_VideoStop(); + break; + case P_START_MAPPER: + if (securemode_check()) return; + MAPPER_Run(false); + break; + case P_GETPROP: { + // "section property" + // "property" + // "section" + // "section" "property" + if (pvars.size()==0) { + WriteOut(MSG_Get("PROGRAM_CONFIG_GET_SYNTAX")); + return; + } + Section* sec = control->GetSectionFromProperty(pvars[0].c_str()); + std::string::size_type spcpos = pvars[0].find_first_of(' '); + // split on the ' ' + if (!sec && spcpos != std::string::npos) { + if (spcpos>1&&pvars[0].c_str()[spcpos-1]==',') + spcpos=pvars[0].find_first_of(' ', spcpos+1); + if (spcpos != std::string::npos) { + pvars.insert(pvars.begin()+1,pvars[0].substr(spcpos+1)); + pvars[0].erase(spcpos); + } + } + switch(pvars.size()) { + case 1: { + // property/section only + // is it a section? + sec = control->GetSection(pvars[0].c_str()); + if (sec) { + // list properties in section + int i = 0; + Section_prop* psec = dynamic_cast (sec); + if (psec==NULL) { + // autoexec section + Section_line* pline = dynamic_cast (sec); + if (pline==NULL) E_Exit("Section dynamic cast failed."); + + WriteOut("%s",pline->data.c_str()); + break; + } + while(true) { + // list the properties + Property* p = psec->Get_prop(i++); + if (p==NULL) break; + if (!(all>0 || (all==-1 && (p->basic() || p->modified())) || (!all && ((p->propname == "rem" && (!strcmp(pvars[0].c_str(), "4dos") || !strcmp(pvars[0].c_str(), "config"))) || p->modified())))) continue; + WriteOut("%s=%s\n", p->propname.c_str(), + p->GetValue().ToString().c_str()); + } + if (!strcasecmp(pvars[0].c_str(), "config")||!strcasecmp(pvars[0].c_str(), "4dos")) { + const char * extra = psec->data.c_str(); + if (extra&&strlen(extra)) { + std::istringstream in(extra); + char linestr[CROSS_LEN+1], cmdstr[CROSS_LEN], valstr[CROSS_LEN]; + char *cmd=cmdstr, *val=valstr, /**lin=linestr,*/ *p; + if (in) for (std::string line; std::getline(in, line); ) { + if (line.length()>CROSS_LEN) { + strncpy(linestr, line.c_str(), CROSS_LEN); + linestr[CROSS_LEN]=0; + } else + strcpy(linestr, line.c_str()); + p=strchr(linestr, '='); + if (p!=NULL) { + *p=0; + strcpy(cmd, linestr); + cmd=trim(cmd); + strcpy(val, p+1); + val=trim(val); + lowcase(cmd); + if (!strcasecmp(pvars[0].c_str(), "4dos")||!strncmp(cmd, "set ", 4)||!strcmp(cmd, "install")||!strcmp(cmd, "installhigh")||!strcmp(cmd, "device")||!strcmp(cmd, "devicehigh")) + if (!((!strcmp(cmd, "install")||!strcmp(cmd, "installhigh")||!strcmp(cmd, "device")||!strcmp(cmd, "devicehigh"))&&!strlen(val)&&!all)) + WriteOut("%s=%s\n", cmd, val); + } + } + } + } + } else { + // no: maybe it's a property? + sec = control->GetSectionFromProperty(pvars[0].c_str()); + if (!sec&&pvars[0].size()>4&&!strcasecmp(pvars[0].substr(0, 4).c_str(), "ttf.")) { + pvars[0].erase(0,4); + sec = control->GetSectionFromProperty(pvars[0].c_str()); + } else if (!sec && pvars[0].size() && !strcasecmp(pvars[0].c_str(), "langcp")) { + pvars[0] = "language"; + sec = control->GetSectionFromProperty(pvars[0].c_str()); + } + if (!sec) { + unsigned int maxWidth, maxHeight; + void GetMaxWidthHeight(unsigned int *pmaxWidth, unsigned int *pmaxHeight), GetDrawWidthHeight(unsigned int *pdrawWidth, unsigned int *pdrawHeight); + if (!strcasecmp(pvars[0].c_str(), "screenwidth")) { + GetMaxWidthHeight(&maxWidth, &maxHeight); + WriteOut("%d\n",maxWidth); + first_shell->SetEnv("CONFIG",std::to_string(maxWidth).c_str()); + } else if (!strcasecmp(pvars[0].c_str(), "screenheight")) { + GetMaxWidthHeight(&maxWidth, &maxHeight); + WriteOut("%d\n",maxHeight); + first_shell->SetEnv("CONFIG",std::to_string(maxHeight).c_str()); + } else if (!strcasecmp(pvars[0].c_str(), "drawwidth")) { + GetDrawWidthHeight(&maxWidth, &maxHeight); + WriteOut("%d\n",maxWidth); + first_shell->SetEnv("CONFIG",std::to_string(maxWidth).c_str()); + } else if (!strcasecmp(pvars[0].c_str(), "drawheight")) { + GetDrawWidthHeight(&maxWidth, &maxHeight); + WriteOut("%d\n",maxHeight); + first_shell->SetEnv("CONFIG",std::to_string(maxHeight).c_str()); +#if defined(C_SDL2) + } else if (!strcasecmp(pvars[0].c_str(), "clientwidth")) { + int w = 640,h = 480; + SDL_Window* GFX_GetSDLWindow(void); + SDL_GetWindowSize(GFX_GetSDLWindow(), &w, &h); + WriteOut("%d\n",w); + first_shell->SetEnv("CONFIG",std::to_string(w).c_str()); + } else if (!strcasecmp(pvars[0].c_str(), "clientheight")) { + int w = 640,h = 480; + SDL_Window* GFX_GetSDLWindow(void); + SDL_GetWindowSize(GFX_GetSDLWindow(), &w, &h); + WriteOut("%d\n",h); + first_shell->SetEnv("CONFIG",std::to_string(h).c_str()); +#elif defined(WIN32) + } else if (!strcasecmp(pvars[0].c_str(), "clientwidth")) { + RECT rect; + GetClientRect(GetHWND(), &rect); + WriteOut("%d\n",rect.right-rect.left); + first_shell->SetEnv("CONFIG",std::to_string(rect.right-rect.left).c_str()); + } else if (!strcasecmp(pvars[0].c_str(), "clientheight")) { + RECT rect; + GetClientRect(GetHWND(), &rect); + WriteOut("%d\n",rect.bottom-rect.top); + first_shell->SetEnv("CONFIG",std::to_string(rect.bottom-rect.top).c_str()); +#endif +#if defined(WIN32) + } else if (!strcasecmp(pvars[0].c_str(), "windowwidth")) { + RECT rect; + GetWindowRect(GetHWND(), &rect); + WriteOut("%d\n",rect.right-rect.left); + first_shell->SetEnv("CONFIG",std::to_string(rect.right-rect.left).c_str()); + } else if (!strcasecmp(pvars[0].c_str(), "windowheight")) { + RECT rect; + GetWindowRect(GetHWND(), &rect); + WriteOut("%d\n",rect.bottom-rect.top); + first_shell->SetEnv("CONFIG",std::to_string(rect.bottom-rect.top).c_str()); +#endif + } else if (!strcasecmp(pvars[0].c_str(), "system")) { + WriteOut("%s\n",PACKAGE); + first_shell->SetEnv("CONFIG",PACKAGE); + } else if (!strcasecmp(pvars[0].c_str(), "version")) { + WriteOut("%s\n",VERSION); + first_shell->SetEnv("CONFIG",VERSION); + } else if (!strcasecmp(pvars[0].c_str(), "hostos")) { + if (securemode_check()) return; + const char *hostos = +#if defined(HX_DOS) + "DOS" +#elif defined(WIN32) + "Windows" +#elif defined(LINUX) + "Linux" +#elif defined(MACOSX) + "macOS" +#elif defined(OS2) + "OS/2" +#else + "Other" +#endif + ; + WriteOut("%s\n",hostos); + first_shell->SetEnv("CONFIG",hostos); + } else if (!strcasecmp(pvars[0].c_str(), "workdir")) { + if (securemode_check()) return; + char cwd[512] = "."; + // char *res = getcwd(cwd,sizeof(cwd)-1); + // WriteOut("%s\n",res==NULL?"":cwd); + first_shell->SetEnv("CONFIG",cwd); + } else if (!strcasecmp(pvars[0].c_str(), "programdir")) { + if (securemode_check()) return; + std::string GetDOSBoxXPath(bool withexe=false), exepath=GetDOSBoxXPath(); + WriteOut("%s\n",exepath.c_str()); + first_shell->SetEnv("CONFIG",exepath.c_str()); + } else if (!strcasecmp(pvars[0].c_str(), "userconfigdir")) { + if (securemode_check()) return; + std::string config_path; + config_path = Cross::GetPlatformConfigDir(); + WriteOut("%s\n",config_path.c_str()); + first_shell->SetEnv("CONFIG",config_path.c_str()); + } else if (!strcasecmp(pvars[0].c_str(), "configdir")) { + if (securemode_check()) return; + std::string configdir=control->configfiles.size()?control->configfiles[control->configfiles.size()-1]:""; + if (configdir.size()) { + std::string::size_type pos = configdir.rfind(CROSS_FILESPLIT); + if(pos == std::string::npos) pos = 0; + configdir.erase(pos); + } + WriteOut("%s\n",configdir.c_str()); + first_shell->SetEnv("CONFIG",configdir.c_str()); + } else if (!strcasecmp(pvars[0].c_str(), "cd")) { + uint8_t drive = DOS_GetDefaultDrive()+'A'; + char dir[DOS_PATHLENGTH]; + DOS_GetCurrentDir(0,dir,true); + WriteOut("%c:\\",drive); + WriteOut_NoParsing(dir, true); + WriteOut("\n"); + first_shell->SetEnv("CONFIG",(std::string(1, drive)+":\\"+std::string(dir)).c_str()); + } else if (!strcasecmp(pvars[0].c_str(), "date")) { + uint32_t ticks=mem_readd(BIOS_TIMER); + uint8_t add=mem_readb(BIOS_24_HOURS_FLAG); + mem_writeb(BIOS_24_HOURS_FLAG,0); // reset the "flag" + if (add) DOS_AddDays(add); + const char *date = FormatDate(dos.date.year, dos.date.month, dos.date.day); + WriteOut("%s\n",date); + first_shell->SetEnv("CONFIG",date); + } else if (!strcasecmp(pvars[0].c_str(), "errorlevel")) { + WriteOut("%d\n",dos.return_code); + first_shell->SetEnv("CONFIG",std::to_string((unsigned int)dos.return_code).c_str()); + } else if (!strcasecmp(pvars[0].c_str(), "random")) { + initRand(); + int random = rand()%32768; + WriteOut("%s\n",std::to_string(random).c_str()); + first_shell->SetEnv("CONFIG",std::to_string(random).c_str()); + } else if (!strcasecmp(pvars[0].c_str(), "time")) { + uint32_t hour, min, sec; + char c=dos.tables.country[13]; + uint32_t ticks=mem_readd(BIOS_TIMER); + uint8_t add=mem_readb(BIOS_24_HOURS_FLAG); + mem_writeb(BIOS_24_HOURS_FLAG,0); // reset the "flag" + uint16_t cx=(uint16_t)(ticks >> 16u), dx=(uint16_t)(ticks & 0xffff); + if (add) DOS_AddDays(add); + ticks=((Bitu)cx<<16)|dx; + Bitu time=(Bitu)((100.0/((double)PIT_TICK_RATE/65536.0)) * (double)ticks); + time/=100; + sec=(uint8_t)((Bitu)time % 60); // seconds + time/=60; + min=(uint8_t)((Bitu)time % 60); // minutes + time/=60; + hour=(uint8_t)((Bitu)time % 24); // hours + char format[11]; + sprintf(format,"%u%c%02u%c%02u",hour,c,min,c,sec); + WriteOut("%s\n",format); + first_shell->SetEnv("CONFIG",format); + } else if (!strcasecmp(pvars[0].c_str(), "lastmount")) { + if (lastmount) WriteOut("%c:\n",lastmount); + first_shell->SetEnv("CONFIG",lastmount?(std::string(1, lastmount) + ":").c_str():""); + } else + WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_ERROR")); + return; + } + // it's a property name + std::string val = sec->GetPropValue(pvars[0].c_str()); + WriteOut("%s\n",val.c_str()); + first_shell->SetEnv("CONFIG",val.c_str()); + } + break; + } + case 2: { + // section + property + sec = control->GetSection(pvars[0].c_str()); + if (!sec) { + WriteOut(MSG_Get("PROGRAM_CONFIG_SECTION_ERROR"), pvars[0].c_str()); + return; + } + std::string val = sec->GetPropValue(pvars[1].c_str()); + if (val == NO_SUCH_PROPERTY) { + if (!strcasecmp(pvars[0].c_str(), "config") && (!strcasecmp(pvars[1].c_str(), "set") || !strcasecmp(pvars[1].c_str(), "device") || !strcasecmp(pvars[1].c_str(), "devicehigh") || !strcasecmp(pvars[1].c_str(), "install") || !strcasecmp(pvars[1].c_str(), "installhigh"))) { + Section_prop* psec = dynamic_cast (sec); + const char * extra = psec->data.c_str(); + if (extra&&strlen(extra)) { + std::istringstream in(extra); + char linestr[CROSS_LEN+1], cmdstr[CROSS_LEN], valstr[CROSS_LEN]; + char *cmd=cmdstr, *val=valstr, /**lin=linestr,*/ *p; + if (in) for (std::string line; std::getline(in, line); ) { + if (line.length()>CROSS_LEN) { + strncpy(linestr, line.c_str(), CROSS_LEN); + linestr[CROSS_LEN]=0; + } else + strcpy(linestr, line.c_str()); + p=strchr(linestr, '='); + if (p!=NULL) { + *p=0; + strcpy(cmd, linestr); + cmd=trim(cmd); + strcpy(val, p+1); + val=trim(val); + lowcase(cmd); + if (!strncasecmp(cmd, "set ", 4)&&!strcasecmp(pvars[1].c_str(), "set")) + WriteOut("%s=%s\n", trim(cmd+4), val); + else if(!strcasecmp(cmd, pvars[1].c_str())) + WriteOut("%s\n", val); + } + } + } + } else + WriteOut(MSG_Get("PROGRAM_CONFIG_NO_PROPERTY"), pvars[1].c_str(),pvars[0].c_str()); + return; + } + WriteOut("%s\n",val.c_str()); + first_shell->SetEnv("CONFIG",val.c_str()); + break; + } + default: + WriteOut(MSG_Get("PROGRAM_CONFIG_GET_SYNTAX")); + return; + } + return; + } + case P_SETPROP: case P_SETFORCE: { + // Code for the configuration changes + // Official format: config -set "section property=value" + // Accepted: with or without -set, + // "section property=value" + // "property" "value" + // "section" "property=value" + // "section" "property=value" "value" "value" ... + // "section" "property" "value" + // "section" "property" "value" "value" ... + // "section property" "value" "value" ... + // "property" "value" "value" ... + // "property=value" "value" "value" ... + + if (pvars.size()==0) { + WriteOut(MSG_Get("PROGRAM_CONFIG_SET_SYNTAX")); + return; + } + + // add rest of command + std::string rest; + if (cmd->GetStringRemain(rest)) pvars.push_back(rest); + + Section* sec = control->GetSectionFromProperty(pvars[0].c_str()); + // attempt to split off the first word + std::string::size_type spcpos = pvars[0].find_first_of(' '); + if (spcpos>1&&pvars[0].c_str()[spcpos-1]==',') + spcpos=pvars[0].find_first_of(' ', spcpos+1); + + std::string::size_type equpos = pvars[0].find_first_of('='); + if (equpos != std::string::npos) { + std::string p = pvars[0]; + p.erase(equpos); + sec = control->GetSectionFromProperty(p.c_str()); + } + + uselangcp = false; + if ((equpos != std::string::npos) && + ((spcpos == std::string::npos) || (equpos < spcpos) || sec)) { + // If we have a '=' possibly before a ' ' split on the = + pvars.insert(pvars.begin()+1,pvars[0].substr(equpos+1)); + pvars[0].erase(equpos); + // As we had a = the first thing must be a property now + sec=control->GetSectionFromProperty(pvars[0].c_str()); + if (!sec&&pvars[0].size()>4&&!strcasecmp(pvars[0].substr(0, 4).c_str(), "ttf.")) { + pvars[0].erase(0,4); + sec = control->GetSectionFromProperty(pvars[0].c_str()); + } else if (!sec && pvars[0].size() && !strcasecmp(pvars[0].c_str(), "langcp")) { + pvars[0] = "language"; + sec = control->GetSectionFromProperty(pvars[0].c_str()); + if (sec) uselangcp = true; + } + if (sec) pvars.insert(pvars.begin(),std::string(sec->GetName())); + else { + WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_ERROR")); + uselangcp = false; + return; + } + // order in the vector should be ok now + } else { + if (equpos != std::string::npos && spcpos < equpos) { + // ' ' before a possible '=', split on the ' ' + pvars.insert(pvars.begin()+1,pvars[0].substr(spcpos+1)); + pvars[0].erase(spcpos); + } + // check if the first parameter is a section or property + sec = control->GetSection(pvars[0].c_str()); + if (!sec) { + // not a section: little duplicate from above + sec=control->GetSectionFromProperty(pvars[0].c_str()); + if (sec) pvars.insert(pvars.begin(),std::string(sec->GetName())); + else { + WriteOut(MSG_Get("PROGRAM_CONFIG_PROPERTY_ERROR")); + return; + } + } else { + // first of pvars is most likely a section, but could still be gus + // have a look at the second parameter + if (pvars.size() < 2) { + WriteOut(MSG_Get("PROGRAM_CONFIG_SET_SYNTAX")); + return; + } + std::string::size_type equpos2 = pvars[1].find_first_of('='); + if (equpos2 != std::string::npos) { + // split on the = + pvars.insert(pvars.begin()+2,pvars[1].substr(equpos2+1)); + pvars[1].erase(equpos2); + } + // is this a property? + Section* sec2 = control->GetSectionFromProperty(pvars[1].c_str()); + if (!sec2) { + // not a property, + Section* sec3 = control->GetSectionFromProperty(pvars[0].c_str()); + if (sec3 && !(equpos != std::string::npos && spcpos != std::string::npos && equpos > spcpos)) { + // section and property name are identical + pvars.insert(pvars.begin(),pvars[0]); + } // else has been checked above already + } + } + } + if(pvars.size() < 3) { + WriteOut(MSG_Get("PROGRAM_CONFIG_SET_SYNTAX")); + uselangcp = false; + return; + } + // check if the property actually exists in the section + Section* sec2 = control->GetSectionFromProperty(pvars[1].c_str()); + if (!sec2) { + if (!strcasecmp(pvars[0].c_str(), "config") && (!strcasecmp(pvars[1].c_str(), "set") || !strcasecmp(pvars[1].c_str(), "device") || !strcasecmp(pvars[1].c_str(), "devicehigh") || !strcasecmp(pvars[1].c_str(), "install") || !strcasecmp(pvars[1].c_str(), "installhigh"))) + WriteOut("Cannot set property %s in section %s.\n", pvars[1].c_str(),pvars[0].c_str()); + else + WriteOut(MSG_Get("PROGRAM_CONFIG_NO_PROPERTY"), pvars[1].c_str(),pvars[0].c_str()); + uselangcp = false; + return; + } + bool applynew=false; + Property *p = static_cast(sec2)->Get_prop(pvars[1]); + if ((p==NULL||p->getChange()==Property::Changeable::OnlyAtStart)&&presult!=P_SETFORCE) { + WriteOut(MSG_Get("PROGRAM_CONFIG_HLP_NOCHANGE")); +first_1: + WriteOut(MSG_Get("PROGRAM_CONFIG_APPLY_RESTART")); +first_2: + uint8_t c;uint16_t n=1; + DOS_ReadFile (STDIN,&c,&n); + do switch (c) { + case 'n': case 'N': + { + DOS_WriteFile (STDOUT,&c, &n); + DOS_ReadFile (STDIN,&c,&n); + do switch (c) { + case 0xD: WriteOut("\n");goto next; + case 0x03: goto next; + case 0x08: WriteOut("\b \b"); goto first_2; + } while (DOS_ReadFile (STDIN,&c,&n)); + } + case 'y': case 'Y': + { + DOS_WriteFile (STDOUT,&c, &n); + DOS_ReadFile (STDIN,&c,&n); + do switch (c) { + case 0xD: WriteOut("\n"); applynew = true; goto next; + case 0x03: goto next; + case 0x08: WriteOut("\b \b"); goto first_2; + } while (DOS_ReadFile (STDIN,&c,&n)); + } + case 0xD: WriteOut("\n"); goto first_1; + case 0x03: goto next; + case '\t': + case 0x08: + goto first_2; + default: + { + DOS_WriteFile (STDOUT,&c, &n); + DOS_ReadFile (STDIN,&c,&n); + do switch (c) { + case 0xD: WriteOut("\n"); goto first_1; + case 0x03: goto next; + case 0x08: WriteOut("\b \b"); goto first_2; + } while (DOS_ReadFile (STDIN,&c,&n)); + goto first_2; + } + } while (DOS_ReadFile (STDIN,&c,&n)); + } +next: + // Input has been parsed (pvar[0]=section, [1]=property, [2]=value) + // now execute + Section* tsec = control->GetSection(pvars[0]); + std::string value(pvars[2]); + //Due to parsing there can be a = at the start of value. + while (value.size() && (value.at(0) ==' ' ||value.at(0) =='=') ) value.erase(0,1); + for(Bitu i = 3; i < pvars.size(); i++) value += (std::string(" ") + pvars[i]); + std::string inputline = pvars[1] + "=" + value; + bool change_success = tsec->HandleInputline(inputline.c_str()); + if (change_success) { + if (applynew) RebootLanguage(""); + else ApplySetting(pvars[0], inputline, false); + } else WriteOut(MSG_Get("PROGRAM_CONFIG_VALUE_ERROR"), + value.c_str(),pvars[1].c_str()); + uselangcp = false; + return; + } + case P_WRITELANG: case P_WRITELANG2: + // In secure mode don't allow a new languagefile to be created + // Who knows which kind of file we would overwrite. + if (securemode_check()) return; + if (pvars.size() < 1) { + if (control->opt_lang == "") { + WriteOut(MSG_Get("PROGRAM_CONFIG_MISSINGPARAM")); + return; + } else if (!MSG_Write(control->opt_lang.c_str(), NULL)) { + WriteOut(MSG_Get("PROGRAM_CONFIG_FILE_ERROR"),control->opt_lang.c_str()); + return; + } else + WriteOut(MSG_Get("PROGRAM_LANGUAGE_FILE_WHICH"),control->opt_lang.c_str()); + } else if (!MSG_Write(pvars[0].c_str(), NULL)) { + WriteOut(MSG_Get("PROGRAM_CONFIG_FILE_ERROR"),pvars[0].c_str()); + return; + } else + WriteOut(MSG_Get("PROGRAM_LANGUAGE_FILE_WHICH"),pvars[0].c_str()); + break; + + case P_SECURE: + // Code for switching to secure mode + control->SwitchToSecureMode(); + WriteOut(MSG_Get("PROGRAM_CONFIG_SECURE_ON")); + return; + + default: + E_Exit("bug"); + break; + } + first = false; + } + + if (!device.empty()) { + DeviceLoad(device,devparm); + } + + return; +} +#endif + +#if !defined(OSFREE) +void CONFIG_ProgramStart(Program * * make) { + *make=new CONFIG; +} +#endif + +void PROGRAMS_DOS_Boot(Section *) { +} + +/* FIXME: Rename the function to clarify it does not init programs, it inits the callback mechanism + * that program generation on drive Z: needs to tie a .COM executable to a callback */ +void PROGRAMS_Init() { + LOG(LOG_MISC,LOG_DEBUG)("PROGRAMS_Init(): initializing Z: drive .COM stub and program management"); + + /* Setup a special callback to start virtual programs */ + call_program=CALLBACK_Allocate(); + CALLBACK_Setup(call_program,&PROGRAMS_Handler,CB_RETF,"internal program"); + + AddVMEventFunction(VM_EVENT_DOS_INIT_KERNEL_READY,AddVMEventFunctionFuncPair(PROGRAMS_DOS_Boot)); + + // listconf + MSG_Add("PROGRAM_CONFIG_NOCONFIGFILE","No config file loaded!\n"); + MSG_Add("PROGRAM_CONFIG_PRIMARY_CONF","Primary config file: \n%s\n"); + MSG_Add("PROGRAM_CONFIG_ADDITIONAL_CONF","Additional config files:\n"); + MSG_Add("PROGRAM_CONFIG_GLOBAL_CONF","\nGlobal config file: \n%s\n"); + MSG_Add("PROGRAM_CONFIG_CONFDIR","DOSBox-X %s user configuration directory: \n%s\n\n"); + MSG_Add("PROGRAM_CONFIG_WORKDIR","DOSBox-X's working directory: \n%s\n\n"); + + // writeconf + MSG_Add("PROGRAM_CONFIG_FILE_ERROR","\nCan't open file %s\n"); + MSG_Add("PROGRAM_CONFIG_FILE_WHICH","Writing config file %s\n"); + MSG_Add("PROGRAM_LANGUAGE_FILE_WHICH","Written to language file %s\n"); + + // help + MSG_Add("PROGRAM_CONFIG_USAGE","The DOSBox-X command-line configuration utility. Supported options:\n"\ + "-wc (or -writeconf) without parameter: Writes to primary loaded config file.\n"\ + "-wc (or -writeconf) with filename: Writes file to the config directory.\n"\ + "-wl (or -writelang) with filename: Writes the current language strings.\n"\ + "-ln (or -langname) Displays (without arguments) or specifies the language name.\n"\ + "-wcp [filename] Writes file to program directory (dosbox-x.conf or filename).\n"\ + "-wcd Writes to the default config file in the config directory.\n"\ + "-all, -mod Use with -wc, -wcp, or -wcd to write ALL or only modified options.\n"\ + "-wcboot, -wcpboot, or -wcdboot will reboot DOSBox-X after writing the file.\n"\ + "-bootconf (or -bc) reboots with specified config file (or primary loaded file).\n"\ + "-norem Use this with -wc, -wcp, or -wcd to not write config option remarks.\n"\ + "-l Lists DOSBox-X's configuration parameters.\n"\ + "-h, -help, -? Shows this help; add the word \"sections\" for a list of sections.\n"\ + "-h, -help, -? section / property Shows info on a specific section or property.\n"\ + "-axclear Clears the [autoexec] section.\n"\ + "-axadd [line] Adds a line to the [autoexec] section.\n"\ + "-axtype Prints the content of the [autoexec] section.\n"\ + "-avistart, -avistop Starts or stops AVI recording.\n"\ + "-securemode Enables secure mode where features like mounting will be disabled.\n"\ + "-startmapper Starts the DOSBox-X mapper editor.\n"\ + "-gui Starts the graphical configuration tool.\n" + "-get \"section property\" returns the value of the property (also to %%CONFIG%%).\n"\ + "-set (-setf for force) \"section property=value\" sets the value of the property.\n"); + MSG_Add("PROGRAM_CONFIG_HLP_PROPHLP","Purpose of property \"%s\" (contained in section \"%s\"):\n%s\n\nPossible Values: %s\nDefault value: %s\nCurrent value: %s\n"); + MSG_Add("PROGRAM_CONFIG_HLP_LINEHLP","Purpose of section \"%s\":\n%s\nCurrent value:\n%s\n"); + MSG_Add("PROGRAM_CONFIG_HLP_NOCHANGE","This property cannot be changed at runtime.\n"); + MSG_Add("PROGRAM_CONFIG_APPLY_RESTART","Do you want to restart now to apply the setting [Y/N]?"); + MSG_Add("PROGRAM_CONFIG_HLP_POSINT","positive integer"); + MSG_Add("PROGRAM_CONFIG_HLP_SECTHLP","Section %s contains the following properties:\n"); + MSG_Add("PROGRAM_CONFIG_HLP_SECTLIST","DOSBox-X configuration contains the following sections:\n\n"); + + MSG_Add("PROGRAM_CONFIG_SECURE_ON","Switched to secure mode.\n"); + MSG_Add("PROGRAM_CONFIG_SECURE_DISALLOW","This operation is not permitted in secure mode.\n"); + MSG_Add("PROGRAM_CONFIG_SECTION_ERROR","Section %s doesn't exist.\n"); + MSG_Add("PROGRAM_CONFIG_VALUE_ERROR","\"%s\" is not a valid value for property %s.\n"); + MSG_Add("PROGRAM_CONFIG_PROPERTY_ERROR","No such section or property.\n"); + MSG_Add("PROGRAM_CONFIG_PROPERTY_DUPLICATE","There may be other sections with the same property name.\n"); + MSG_Add("PROGRAM_CONFIG_NO_PROPERTY","There is no property %s in section %s.\n"); + MSG_Add("PROGRAM_CONFIG_SET_SYNTAX","Correct syntax: config -set \"section property=value\".\n"); + MSG_Add("PROGRAM_CONFIG_GET_SYNTAX","Correct syntax: config -get \"section property\".\n"); + MSG_Add("PROGRAM_CONFIG_PRINT_STARTUP","\nDOSBox-X was started with the following command line parameters:\n%s\n"); + MSG_Add("PROGRAM_CONFIG_MISSINGPARAM","Missing parameter.\n"); +} diff --git a/src/misc/savestates.cpp b/src/misc/savestates.cpp index 0523499899a..9c7ffa88af7 100644 --- a/src/misc/savestates.cpp +++ b/src/misc/savestates.cpp @@ -174,6 +174,8 @@ namespace void SaveGameState(bool pressed) { if (!pressed) return; + GFX_LosingFocus(); + try { LOG_MSG("Saving state to slot: %d", (int)currentSlot + 1); @@ -198,7 +200,7 @@ namespace // LOG_MSG("[%s]: State %d is empty!", getTime().c_str(), currentSlot + 1); // return; // } - if (!GFX_IsFullscreen()&&render.aspect) GFX_LosingFocus(); + try { LOG_MSG("Loading state from slot: %d", (int)currentSlot + 1); @@ -531,7 +533,7 @@ void SaveState::save(size_t slot) { //throw (Error) if ((errclose=zipOutOpenFile(zf,"Memory_Size",zi,compresssaveparts)) != ZIP_OK) { save_err = true; goto done; } zip_ostreambuf zos(zf); std::ostream memorysize(&zos); - memorysize << MEM_TotalPages(); + memorysize << std::to_string( MEM_TotalPages()); if ((errclose=zos.close()) != ZIP_OK) { save_err = true; goto done; } } @@ -581,7 +583,7 @@ void SaveState::save(size_t slot) { //throw (Error) if (!dos_kernel_disabled) flagged_backup((char *)save.c_str()); if (save_err) - notifyError("Failed to save the current state."); + notifyError(MSG_Get("SAVE_FAILED")); else LOG_MSG("[%s]: Saved. (Slot %d)", getTime().c_str(), (int)slot+1); #endif @@ -589,7 +591,7 @@ void SaveState::save(size_t slot) { //throw (Error) void savestatecorrupt(const char* part) { LOG_MSG("Save state corrupted! Program in inconsistent state! - %s", part); - systemmessagebox("Error","Save state corrupted! Program may not work.","ok","error", 1); + systemmessagebox("Error", MSG_Get("SAVE_CORRUPTED"),"ok","error", 1); } bool confres=false; @@ -937,10 +939,11 @@ std::string SaveState::getName(size_t slot, bool nl) const { if (length != 0) ret += nl?"Remark: "+(!strlen(buffer1)?"-":std::string(buffer1))+"\n":" - "+std::string(buffer1); } } - + unzClose(zf); return ret; #endif return "(Error slot)"; } + diff --git a/src/misc/setup.cpp b/src/misc/setup.cpp index 15d1bdd921f..5a68b9dfac6 100644 --- a/src/misc/setup.cpp +++ b/src/misc/setup.cpp @@ -34,6 +34,69 @@ #include #include +#if defined(_WIN32) +#include +#include +#define PATH_SEPARATOR '\\' +#else +#include +#include +#include // dirname +#define PATH_SEPARATOR '/' +#endif + +#ifndef PATH_MAX + #if defined(WIN32) + #define PATH_MAX MAX_PATH + #else + #define PATH_MAX 4096 /* LINUX sets to 4096, while this varies from 260 to 4096 depending on platforms */ + #endif +#endif + +static int get_dirname(const char* path, char* dirbuf, size_t size); +static int dir_exists(const char* path); + +// Extract directory part from path (simple implementation) +static int get_dirname(const char* path, char* dirbuf, size_t size) { + // Use '\\' on Windows and '/' on Linux/macOS + const char sep = PATH_SEPARATOR; + size_t len = strlen(path); + if(len == 0) return -1; + + // Remove trailing separators + while(len > 0 && (path[len - 1] == sep || path[len - 1] == '/' || path[len - 1] == '\\')) { + len--; + } + if(len == 0) return -1; + + // Find the last separator + size_t pos = len; + while(pos > 0) { + if(path[pos - 1] == sep || path[pos - 1] == '/' || path[pos - 1] == '\\') break; + pos--; + } + if(pos == 0) return -1; // No separator found (only filename) + + size_t copy_len = (pos - 1 < size - 1) ? pos - 1 : size - 1; + memcpy(dirbuf, path, copy_len); + dirbuf[copy_len] = '\0'; + return 0; +} + +// Check if directory exists +static int dir_exists(const char* path) { +#if defined(_WIN32) + struct _stat info; + if(_stat(path, &info) != 0) return 0; + return (info.st_mode & _S_IFDIR) != 0; +#else + struct stat info; + if(stat(path, &info) != 0) return 0; + return S_ISDIR(info.st_mode); +#endif +} + + #if defined(_MSC_VER) # pragma warning(disable:4244) /* const fmath::local::uint64_t to double possible loss of data */ # pragma warning(disable:4267) /* ... possible loss of data */ @@ -792,170 +855,7 @@ string Section_line::GetPropValue(string const& /* _property*/) const { #define HELPLINE_SIZE 256 bool Config::PrintConfig(char const * const configfilename,int everything,bool norem) const { - char temp[50]; - char helpline[HELPLINE_SIZE] = { 0 }; - FILE* outfile = fopen(configfilename,"w+t"); - if (outfile == NULL) return false; - - /* Print start of configfile and add a return to improve readability. */ - if (!norem) { - fprintf(outfile,MSG_Get("CONFIGFILE_INTRO"),VERSION); - fprintf(outfile,"\n"); - } - for (const_it tel = sectionlist.begin(); tel != sectionlist.end(); ++tel){ - /* Print out the Section header */ - safe_strncpy(temp,(*tel)->GetName(),sizeof(temp)); - lowcase(temp); - - Section_prop *sec = dynamic_cast(*tel); - if (sec) { - int mods=0; - Property *p; - size_t i = 0, maxwidth = 0; - while ((p = sec->Get_prop(int(i++)))) { - if (!(everything>0 || (everything==-1 && (p->basic() || p->modified())) || (!everything && ((p->propname == "rem" && (!strcmp(temp, "4dos") || !strcmp(temp, "config"))) || p->modified())))) - continue; - - size_t w = strlen(p->propname.c_str()); - if (w > maxwidth) maxwidth = w; - mods++; - } - - if (!everything && mods == 0) { - /* nothing to print */ - continue; - } - - fprintf(outfile,"[%s]\n",temp); - - i=0; - char prefix[80]; - int intmaxwidth = (maxwidth > 60) ? 60 : static_cast(maxwidth); - std::vector advopts; - advopts.clear(); - if (!norem) - while ((p = sec->Get_prop(int(i++)))) { - std::string help = p->Get_help(); - if (!(everything==1 || (everything==-1 && (p->basic() || p->modified())) || (!everything && ((p->propname == "rem" && (!strcmp(temp, "4dos") || !strcmp(temp, "config"))) || p->modified())))) { - if ((everything==-1 || everything==2) && !p->basic() && !p->modified() && help.size()) - advopts.push_back(p->propname); - if (everything!=2) continue; - } - - std::string pre=everything==2&&!p->basic()?"#DOSBOX-X-ADV:":""; - snprintf(prefix,80, "\n%s#%*s ", pre.c_str(), intmaxwidth, ""); - std::string::size_type pos = std::string::npos; - while ((pos = help.find('\n', pos+1)) != std::string::npos) { - help.replace(pos, 1, prefix); - } - - std::vector values = p->GetValues(); - - if (help != "" || !values.empty()) { - fprintf(outfile, "%s# %*s: %s", pre.c_str(), intmaxwidth, p->propname.c_str(), help.c_str()); - - if (!values.empty()) { - fprintf(outfile, "%s%s:", prefix, MSG_Get("CONFIG_SUGGESTED_VALUES")); - std::vector::const_iterator it = values.begin(); - while (it != values.end()) { - if ((*it).ToString() != "%u" && (strcmp(temp, "config") || p->propname != "numlock" || (*it).ToString() != "")) { //Hack hack hack. else we need to modify GetValues, but that one is const... - if (it != values.begin()) fputs(",", outfile); - fprintf(outfile, " %s", (*it).ToString().c_str()); - } - ++it; - } - fprintf(outfile,"."); - } - fprintf(outfile, "\n"); - } - } - if ((everything==-1 || everything==2) && !advopts.empty()) { - fprintf(outfile, everything==2?"#DOSBOX-X-ADV-SEE:#\n#DOSBOX-X-ADV-SEE:# %s:\n#DOSBOX-X-ADV-SEE:# ->":"#\n# %s:\n# ->", MSG_Get("CONFIG_ADVANCED_OPTION")); - for (std::vector::iterator advopt = advopts.begin(); advopt != advopts.end(); ++advopt) - fprintf(outfile, " %s%c", advopt->c_str(), advopt+1 >= advopts.end()?'\n':';'); - fprintf(outfile, everything==2?"#DOSBOX-X-ADV-SEE:#\n":"#\n"); - } - } else { - fprintf(outfile,"[%s]\n",temp); - - if (!norem) { - upcase(temp); - strcat(temp,"_CONFIGFILE_HELP"); - const char * helpstr = MSG_Get(temp); - const char * linestart = helpstr; - char * helpwrite = helpline; - while (*helpstr && helpstr - linestart < HELPLINE_SIZE - 2) { - *helpwrite++ = *helpstr; - if (*helpstr == '\n') { - *helpwrite = 0; - fprintf(outfile,"# %s",helpline); - helpwrite = helpline; - linestart = ++helpstr; - } else helpstr++; - } - } - } - - (*tel)->PrintData(outfile,everything,norem); - if (!strcmp(temp, "config")||!strcmp(temp, "4dos")) { - const char * extra = sec->data.c_str(); - bool used1=false, used2=false; - char linestr[CROSS_LEN+1], *lin=linestr; - if (extra&&strlen(extra)) { - std::istringstream in(extra); - char cmdstr[CROSS_LEN], valstr[CROSS_LEN], *cmd=cmdstr, *val=valstr, *p; - if (in) for (std::string line; std::getline(in, line); ) { - if (line.length()>CROSS_LEN) { - strncpy(linestr, line.c_str(), CROSS_LEN); - linestr[CROSS_LEN]=0; - } else - strcpy(linestr, line.c_str()); - p=strchr(linestr, '='); - if (p!=NULL) { - *p=0; - strcpy(cmd, linestr); - cmd=trim(cmd); - strcpy(val, p+1); - val=trim(val); - lowcase(cmd); - if (!strcmp(temp, "4dos")||!strncmp(cmd, "set ", 4)||!strcmp(cmd, "install")||!strcmp(cmd, "installhigh")||!strcmp(cmd, "device")||!strcmp(cmd, "devicehigh")) { - (!strncmp(cmd, "set ", 4)?used1:used2)=true; - if (!((!strcmp(cmd, "install")||!strcmp(cmd, "installhigh")||!strcmp(cmd, "device")||!strcmp(cmd, "devicehigh"))&&!strlen(val)&&!everything)) - fprintf(outfile, strcmp(temp, "4dos")?"%-11s = %s\n":"%-14s = %s\n", cmd, val); - } - } - } - } - if (!strcmp(temp, "config")) { - if (everything&&!used1) { - fprintf(outfile, "%-11s = %s\n", "set path", "Z:\\;Z:\\SYSTEM;Z:\\BIN;Z:\\DOS;Z:\\4DOS;Z:\\DEBUG;Z:\\TEXTUTIL"); - fprintf(outfile, "%-11s = %s\n", "set prompt", "$P$G"); - fprintf(outfile, "%-11s = %s\n", "set temp", ""); - } - if (everything&&!used2) { - fprintf(outfile, "%-11s = %s\n", "install", ""); - fprintf(outfile, "%-11s = %s\n", "installhigh", ""); - fprintf(outfile, "%-11s = %s\n", "device", ""); - fprintf(outfile, "%-11s = %s\n", "devicehigh", ""); - } - if (extra&&strlen(extra)) { - std::istringstream rem(extra); - if (everything&&rem) for (std::string line; std::getline(rem, line); ) { - if (line.length()>CROSS_LEN) { - strncpy(linestr, line.c_str(), CROSS_LEN); - linestr[CROSS_LEN]=0; - } else - strcpy(linestr, line.c_str()); - if (!strncasecmp(trim(lin), "rem ", 4)&&*trim(trim(lin)+4)!='='&&!norem) - fprintf(outfile, "%s\n", trim(lin)); - } - } - } - } - fprintf(outfile,"\n"); /* Always an empty line between sections */ - } - fclose(outfile); - return true; + return false; } @@ -1084,8 +984,14 @@ bool Config::ParseConfigFile(char const * const configfilename) { LOG(LOG_MISC,LOG_DEBUG)("CONFIG: Attempting to load config file #%zu from %s",configfiles.size(),configfilename); //static bool first_configfile = true; + if (strlen(configfilename) >= PATH_MAX) { + LOG_MSG("Warning: config file path %d characters is too long: %s", strlen(configfilename), configfilename); + } ifstream in(configfilename); - if (!in) return false; + if (!in) { + LOG(LOG_MISC,LOG_NORMAL)("CONFIG: Failed Loading %s as a config file", configfilename); + return false; + } const char * settings_type; settings_type = (configfiles.size() == 0)? "primary":"additional"; configfiles.emplace_back(configfilename); diff --git a/src/os2res.h b/src/os2res.h new file mode 100644 index 00000000000..fcfbb0166b4 --- /dev/null +++ b/src/os2res.h @@ -0,0 +1,4 @@ + +#define INPUTBOX_DLG 100 +#define IB_INPUT 101 +#define IB_LABEL 102 diff --git a/src/os2res.rc b/src/os2res.rc new file mode 100644 index 00000000000..516374e0673 --- /dev/null +++ b/src/os2res.rc @@ -0,0 +1,33 @@ +#define INCL_NLS +#include "os2.h" +#include "os2res.h" + +// Executable Icon +ICON 1 "..\\contrib\\icons\\dosbox-x_os2.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + + +DLGTEMPLATE INPUTBOX_DLG PRELOAD MOVEABLE DISCARDABLE +BEGIN + DIALOG "tinyfd_inputbox", INPUTBOX_DLG, 272, 59, 155, 85, + WS_VISIBLE | WS_SAVEBITS, + FCF_DLGBORDER | FCF_NOBYTEALIGN | FCF_TITLEBAR | FCF_SYSMENU + BEGIN + CONTROL "Input", IB_LABEL, 6, 50, 143, 32, WC_STATIC, SS_TEXT | + DT_LEFT | DT_TOP | DT_WORDBREAK | WS_VISIBLE + ENTRYFIELD "", IB_INPUT, 6, 23, 143, 8, + ES_LEFT | WS_VISIBLE + CONTROL "OK", DID_OK, 6, 6, 38, 12, WC_BUTTON, + BS_PUSHBUTTON | BS_DEFAULT | + WS_TABSTOP | WS_VISIBLE | WS_TABSTOP + CONTROL "Cancel", DID_CANCEL, 49, 6, 38, 12, WC_BUTTON, + BS_PUSHBUTTON | WS_TABSTOP | + WS_VISIBLE | WS_TABSTOP + END +END + +///////////////////////////////////////////////////////////////////////////// diff --git a/src/output/Makefile.am b/src/output/Makefile.am index 45da482f625..17ce7495ff4 100644 --- a/src/output/Makefile.am +++ b/src/output/Makefile.am @@ -7,8 +7,12 @@ SUBDIRS += direct3d endif noinst_LIBRARIES = liboutput.a -liboutput_a_SOURCES = output_direct3d.cpp output_opengl.cpp output_surface.cpp output_tools.cpp output_tools_xbrz.cpp output_ttf.cpp +liboutput_a_SOURCES = output_direct3d.cpp output_opengl.cpp output_surface.cpp output_tools.cpp output_tools_xbrz.cpp output_ttf.cpp output_direct3d11.cpp if C_GAMELINK liboutput_a_SOURCES += output_gamelink.cpp endif + +if C_METAL +liboutput_a_SOURCES += output_metal.mm +endif \ No newline at end of file diff --git a/src/output/direct3d/direct3d.cpp b/src/output/direct3d/direct3d.cpp index 7befc2c0a60..4bb49621503 100644 --- a/src/output/direct3d/direct3d.cpp +++ b/src/output/direct3d/direct3d.cpp @@ -72,7 +72,8 @@ std::string shader_translate_directory(const std::string& path) { if (FileDirExistCP(("shaders\\"+path+".fx").c_str())==1) return "shaders\\"+path+".fx"; std::string confpath, respath, exepath=GetDOSBoxXPath(); - Cross::GetPlatformConfigDir(confpath), Cross::GetPlatformResDir(respath); + confpath = Cross::GetPlatformConfigDir(); + respath = Cross::GetPlatformResDir(); if (exepath.size()) { if (FileDirExistCP((exepath+path).c_str())==1) return exepath+path; @@ -1035,9 +1036,9 @@ HRESULT CDirect3D::LoadPixelShader(const char * shader, double scalex, double sc // Compare optimal scaling factor bool dblgfx=((scalex < scaley ? scalex : scaley) >= psEffect->getScale()); - std::string message = "This pixel shader may be unneeded or have undesired effect:\n\n"+std::string(shader)+"\n\nDo you want to load the pixel shader anyway?\n\n(You may append 'forced' to the pixelshader setting to force load the pixel shader without this message)"; + std::string message = formatString(MSG_Get("PIXEL_SHADER_WARN"), shader); if(dblgfx || forced || systemmessagebox("Direct3D shader", message.c_str(), "yesno","question", 1)) { - message = "Loaded pixel shader - "+std::string(shader); + message = formatString(MSG_Get("PIXEL_SHADER_LOADED"), shader); if (informd3d) systemmessagebox("Direct3D shader", message.c_str(), "ok","info", 1); LOG_MSG("D3D:Pixel shader %s active", shader); RENDER_SetForceUpdate(psEffect->getForceUpdate()); diff --git a/src/output/output_direct3d11.cpp b/src/output/output_direct3d11.cpp new file mode 100644 index 00000000000..ef69acb8733 --- /dev/null +++ b/src/output/output_direct3d11.cpp @@ -0,0 +1,869 @@ +#include "config.h" + +#if C_DIRECT3D +#if defined(C_SDL2) + +#include + +#include "sdlmain.h" +#include "control.h" +#include "dosbox.h" +#include "logging.h" +#include "menudef.h" +#include "render.h" +#include "vga.h" +#include "..\ints\int10.h" +#include "output_surface.h" + +#include "output_direct3d11.h" +//#pragma comment(lib, "d3d11.lib") +//#pragma comment(lib, "dxgi.lib") + +#include +//#pragma comment(lib, "d3dcompiler.lib") + +typedef HRESULT(WINAPI* PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN)( + IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE, UINT, + const D3D_FEATURE_LEVEL*, UINT, UINT, + const DXGI_SWAP_CHAIN_DESC*, IDXGISwapChain**, + ID3D11Device**, D3D_FEATURE_LEVEL*, ID3D11DeviceContext**); + +typedef HRESULT(WINAPI* PFN_D3D_COMPILE)( + LPCVOID, SIZE_T, LPCSTR, const D3D_SHADER_MACRO*, + ID3DInclude*, LPCSTR, LPCSTR, UINT, UINT, ID3DBlob**, ID3DBlob**); + +static PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN pD3D11CreateDeviceAndSwapChain = nullptr; +static PFN_D3D_COMPILE my_pD3DCompile = nullptr; +static HMODULE hD3D11 = nullptr; +static HMODULE hD3DCompiler = nullptr; + +static const char* vs_source = R"( +struct VSOut { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; +}; + +VSOut main(uint id : SV_VertexID) +{ + float2 pos[6] = { + {-1,-1},{-1,1},{1,-1}, + {1,-1},{-1,1},{1,1} + }; + + float2 uv[6] = { + {0,1},{0,0},{1,1}, + {1,1},{0,0},{1,0} + }; + + VSOut o; + o.pos = float4(pos[id], 0, 1); + o.uv = uv[id]; + return o; +} +)"; + +static const char* ps_source = R"( +Texture2D tex0 : register(t0); +SamplerState smp : register(s0); + +float4 main(float4 pos : SV_POSITION, float2 uv : TEXCOORD0) + : SV_Target +{ + return tex0.Sample(smp, uv); +} +)"; + +extern VGA_Type vga; +extern VideoModeBlock* CurMode; + +CDirect3D11::CDirect3D11() {} +CDirect3D11::~CDirect3D11() { Shutdown(); } + +bool CDirect3D11::Initialize(HWND hwnd, int w, int h) +{ + last_window_w = 0; + last_window_h = 0; + last_tex_w = 0; + last_tex_h = 0; + + width = w; + height = h; + + cpu_pitch = width * 4; + cpu_buffer.resize(cpu_pitch * height); + + DXGI_SWAP_CHAIN_DESC sd = {}; + sd.BufferCount = 1; + sd.BufferDesc.Width = width; + sd.BufferDesc.Height = height; + sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + sd.OutputWindow = hwnd; + sd.SampleDesc.Count = 1; + sd.Windowed = TRUE; + sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; + + HRESULT hr = pD3D11CreateDeviceAndSwapChain( + nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, 0, nullptr, 0, + D3D11_SDK_VERSION, &sd, &swapchain, &device, nullptr, &context); + + if(FAILED(hr)) { + LOG_MSG("D3D11: CreateDeviceAndSwapChain failed (0x%08lx)", hr); + return false; + } + + ID3D11Texture2D* backbuffer = nullptr; + hr = swapchain->GetBuffer(0, IID_PPV_ARGS(&backbuffer)); + if(FAILED(hr)) { + LOG_MSG("D3D11: GetBuffer failed (0x%08lx)", hr); + return false; + } + + hr = device->CreateRenderTargetView(backbuffer, nullptr, &rtv); + backbuffer->Release(); + if(FAILED(hr)) { + LOG_MSG("D3D11: CreateRTV failed (0x%08lx)", hr); + return false; + } + + context->OMSetRenderTargets(1, &rtv, nullptr); + + D3D11_VIEWPORT vp = {}; + vp.Width = (FLOAT)width; + vp.Height = (FLOAT)height; + vp.MinDepth = 0.0f; + vp.MaxDepth = 1.0f; + context->RSSetViewports(1, &vp); + + if(!CreateFrameTextures(width, height)) + return false; + + /** + hr = device->CreateShaderResourceView(frameTexGPU, nullptr, &frameSRV); + if(FAILED(hr)) { + LOG_MSG("D3D11: Create SRV failed (0x%08lx)", hr); + return false; + } + */ + + /* ------------------------------------------------- + * Shaders(SV_VertexID) + * ------------------------------------------------- */ + ID3DBlob* vs_blob = nullptr; + ID3DBlob* ps_blob = nullptr; + ID3DBlob* err = nullptr; + + hr = my_pD3DCompile( + vs_source, strlen(vs_source), + nullptr, nullptr, nullptr, + "main", "vs_4_0", + 0, 0, &vs_blob, &err); + + if(FAILED(hr)) { + LOG_MSG("VS compile error: %s", + err ? (char*)err->GetBufferPointer() : ""); + return false; + } + + hr = my_pD3DCompile( + ps_source, strlen(ps_source), + nullptr, nullptr, nullptr, + "main", "ps_4_0", + 0, 0, &ps_blob, &err); + + if(FAILED(hr)) { + LOG_MSG("PS compile error: %s", + err ? (char*)err->GetBufferPointer() : ""); + vs_blob->Release(); + return false; + } + + device->CreateVertexShader( + vs_blob->GetBufferPointer(), + vs_blob->GetBufferSize(), + nullptr, + &vs); + + device->CreatePixelShader( + ps_blob->GetBufferPointer(), + ps_blob->GetBufferSize(), + nullptr, + &ps); + + vs_blob->Release(); + ps_blob->Release(); + + /* ------------------------------------------------- + * Sampler + * ------------------------------------------------- */ + + if(!CreateSamplers()) { + LOG_MSG("D3D11: CreateSamplers failed"); + return false; + } + GetRenderMode(); + SetSamplerMode(); + + return true; +} + +void CDirect3D11::CheckSourceResolution() +{ + static uint32_t last_w = 0; + static uint32_t last_h = 0; + + if(last_w == sdl.draw.width && + last_h == sdl.draw.height) + return; + + LOG_MSG("D3D11: VGA source resolution changed %ux%u -> %ux%u", + last_w, last_h, + sdl.draw.width, sdl.draw.height); + + // Resize CPU buffer(don't shrink if smaller) + ResizeCPUBuffer( + sdl.draw.width, + sdl.draw.height); + + last_w = sdl.draw.width; + last_h = sdl.draw.height; + + Resize( + sdl.draw.width, sdl.draw.height, // Window size + sdl.draw.width, sdl.draw.height); // Frame texture size + +} + +void CDirect3D11::ResizeCPUBuffer(uint32_t src_w, uint32_t src_h) +{ + const uint32_t required_pitch = src_w * 4; // BGRA32 + const uint32_t required_size = required_pitch * src_h; + + // Resize CPU buffer(don't shrink if smaller) + if(cpu_buffer.size() < required_size) { + cpu_buffer.resize(required_size); + //LOG_MSG("D3D11: CPU buffer resized to %u bytes", required_size); + } + + cpu_pitch = required_pitch; +} + +void CDirect3D11::Shutdown() +{ + if(context) { + context->ClearState(); + context->Flush(); + } + SAFE_RELEASE(frameSRV); + SAFE_RELEASE(frameTexGPU); + SAFE_RELEASE(frameTexCPU); + SAFE_RELEASE(rtv); + SAFE_RELEASE(swapchain); + //SAFE_RELEASE(context); + SAFE_RELEASE(device); + SAFE_RELEASE(frameSRV); + if(vs) { vs->Release(); vs = nullptr; } + if(ps) { ps->Release(); ps = nullptr; } + SAFE_RELEASE(samplerNearest); + SAFE_RELEASE(samplerLinear); + SAFE_RELEASE(samplerStretch); + if(fullscreenVB) {fullscreenVB->Release(); fullscreenVB = nullptr;} + //if(inputLayout) { inputLayout->Release(); inputLayout = nullptr; } + d3d11_UnloadDLL(); +} + +bool CDirect3D11::StartUpdate(uint8_t*& pixels, Bitu& pitch) +{ + if(textureMapped) return false; + + // Begin frame update by returning the CPU-side framebuffer + pixels = cpu_buffer.data(); + pitch = cpu_pitch; + render.scale.outWrite = cpu_buffer.data(); + render.scale.outPitch = cpu_pitch; + textureMapped = true; + return true; +} + +void CDirect3D11::EndUpdate() +{ + if(!textureMapped) return; + + /* Map dynamic texture for CPU write using WRITE_DISCARD (full frame update) */ + D3D11_MAPPED_SUBRESOURCE mapped = {}; + HRESULT hr = context->Map(frameTexGPU, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped); + if(FAILED(hr)) { + LOG_MSG("D3D11: Map failed in EndUpdate (0x%08lx)", hr); + textureMapped = false; + return; + } + + uint8_t* dst = static_cast(mapped.pData); + uint8_t* src = cpu_buffer.data(); + + const uint32_t copy_w = frame_width; + const uint32_t copy_h = frame_height; + const size_t lineBytes = copy_w * 4; + + // Copy each scanline from the CPU framebuffer to the mapped GPU texture. + // The GPU texture rows are padded (RowPitch), so we must copy line by line. + if(mapped.RowPitch == cpu_pitch) { + memcpy(dst, src, lineBytes * copy_h); + } + else { + for(uint32_t y = 0; y < copy_h; y++) { + memcpy(dst, src, lineBytes); + dst += mapped.RowPitch; + src += cpu_pitch; + } + } + + context->Unmap(frameTexGPU, 0); + //context->CopyResource(frameTexGPU, frameTexCPU); + + // Bind the back buffer render target (no depth buffer needed for 2D rendering) + context->OMSetRenderTargets(1, &rtv, nullptr); + + // Set viewport to cover the entire output surface + // This maps normalized device coordinates directly to the window area + /** + D3D11_VIEWPORT vp = {}; + vp.TopLeftX = 0.0f; + vp.TopLeftY = 0.0f; + vp.Width = (FLOAT)width; + vp.Height = (FLOAT)height; + vp.MinDepth = 0.0f; + vp.MaxDepth = 1.0f; + context->RSSetViewports(1, &vp); + */ + + // Draw a full-screen quad using two triangles (6 vertices) + // Vertex positions are generated in the vertex shader via SV_VertexID + context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); + context->IASetInputLayout(inputLayout); // For SV_VertexID + + context->VSSetShader(vs, nullptr, 0); + context->PSSetShader(ps, nullptr, 0); + context->PSSetShaderResources(0, 1, &frameSRV); + + SetSamplerMode(); + // Draw two triangles (6 vertices) to cover the entire screen + context->Draw(6, 0); + + ID3D11ShaderResourceView* nullSRV[1] = { nullptr }; + context->PSSetShaderResources(0, 1, nullSRV); + + // Present the rendered frame to the screen (vsync is currently disabled) + swapchain->Present(0, 0); + + textureMapped = false; +} + +bool CDirect3D11::CreateSamplers(void) { + D3D11_SAMPLER_DESC samp = {}; + samp.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; + samp.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; + samp.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; + samp.ComparisonFunc = D3D11_COMPARISON_NEVER; + samp.MinLOD = 0; + samp.MaxLOD = D3D11_FLOAT32_MAX; + samp.MaxAnisotropy = 16; + + // Nearest + samp.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT; + if(FAILED(device->CreateSamplerState(&samp, &samplerNearest))) return false; + + // Bilinear + samp.Filter = D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT; + if(FAILED(device->CreateSamplerState(&samp, &samplerLinear))) return false; + + // Stretch + samp.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + if(FAILED(device->CreateSamplerState(&samp, &samplerStretch))) return false; + + return true; +} + +void CDirect3D11::SetSamplerMode() { + //static int last_mode = -1; + //if(last_mode == current_render_mode) return; + ID3D11SamplerState* s = samplerLinear; + if (current_render_mode == ASPECT_NEAREST) s = samplerNearest; + + context->PSSetSamplers(0, 1, &s); + //last_mode = current_render_mode; +} + +void CDirect3D11::GetRenderMode() { + Section_prop* section = static_cast(control->GetSection("render")); + std::string s_aspect = section->Get_string("aspect"); + + if(s_aspect == "nearest") { + current_render_mode = ASPECT_NEAREST; + } + else if(s_aspect == "bilinear") { + current_render_mode = ASPECT_BILINEAR; + } + else { + current_render_mode = ASPECT_NEAREST; // default + } +} + +bool d3d11_LoadDLL() { + if(!hD3D11) { + hD3D11 = LoadLibraryA("d3d11.dll"); + if(!hD3D11) return false; + pD3D11CreateDeviceAndSwapChain = (PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN)GetProcAddress(hD3D11, "D3D11CreateDeviceAndSwapChain"); + } + + if(!hD3DCompiler) { + const char* dlls[] = { "d3dcompiler_47.dll", "d3dcompiler_43.dll", "d3dcompiler.dll" }; + for(int i = 0; i < 3; i++) { + hD3DCompiler = LoadLibraryA(dlls[i]); + if(hD3DCompiler) break; + } + if(hD3DCompiler) { + my_pD3DCompile = (PFN_D3D_COMPILE)GetProcAddress(hD3DCompiler, "D3DCompile"); + } + } + + return (pD3D11CreateDeviceAndSwapChain != nullptr && my_pD3DCompile != nullptr); +} + +void d3d11_UnloadDLL() { + pD3D11CreateDeviceAndSwapChain = nullptr; + my_pD3DCompile = nullptr; + + if(hD3DCompiler) { + FreeLibrary(hD3DCompiler); + hD3DCompiler = nullptr; + } + if(hD3D11) { + FreeLibrary(hD3D11); + hD3D11 = nullptr; + } + + //LOG_MSG("D3D11: DLLs unloaded."); +} + +static CDirect3D11* d3d11 = nullptr; + +void d3d11_init(void) +{ + if(d3d11) { + d3d11->Shutdown(); + } + sdl.desktop.want_type = SCREEN_DIRECT3D11; + + LOG_MSG("D3D11: Init called"); + + if(!sdl.window) { // Create window if not yet created + sdl.window = GFX_SetSDLWindowMode(640, 400, SCREEN_SURFACE); + + if(!sdl.window) { + LOG_MSG("SDL: Failed to create window: %s", SDL_GetError()); + OUTPUT_SURFACE_Select(); + return; + } + + sdl.surface = SDL_GetWindowSurface(sdl.window); + sdl.desktop.pixelFormat = SDL_GetWindowPixelFormat(sdl.window); + } + + SDL_SysWMinfo wmi; + SDL_VERSION(&wmi.version); + +#if defined(C_SDL2) + if(!SDL_GetWindowWMInfo(sdl.window, &wmi)) +#else + if(!SDL_GetWMInfo(&wmi)) +#endif + { + LOG_MSG("D3D11: Failed to get window info"); + OUTPUT_SURFACE_Select(); + return; + } + + HWND hwnd = wmi.info.win.window; + + if(sdl.desktop.fullscreen) + GFX_CaptureMouse(); + + if(d3d11) delete d3d11; + d3d11 = new CDirect3D11(); + + if(!d3d11) { + LOG_MSG("D3D11: Failed to create object"); + OUTPUT_SURFACE_Select(); + return; + } + + if(!d3d11_LoadDLL()) { + LOG_MSG("D3D11: Failed to load d3d11.dll or d3dcompiler_xx.dll"); + OUTPUT_SURFACE_Select(); + return; + } + + if(!d3d11->Initialize(hwnd, sdl.draw.width?sdl.draw.width:640, sdl.draw.height?sdl.draw.height:400)) { + LOG_MSG("D3D11: Initialize failed"); + delete d3d11; + d3d11 = nullptr; + OUTPUT_SURFACE_Select(); + return; + } + sdl.desktop.type = SCREEN_DIRECT3D11; +} + + +void OUTPUT_DIRECT3D11_Select() +{ + sdl.desktop.want_type = SCREEN_DIRECT3D11; + render.aspectOffload = true; +} + +Bitu OUTPUT_DIRECT3D11_GetBestMode(Bitu flags) +{ + flags |= GFX_SCALING; + flags &= ~(GFX_CAN_8 | GFX_CAN_15 | GFX_CAN_16); + flags |= GFX_CAN_32; + return flags; +} + +Bitu OUTPUT_DIRECT3D11_SetSize(void) +{ + if(!d3d11) { + LOG_MSG("D3D11: Not initialized"); + return 0; + } + + // Framebuffer size + uint32_t tex_w = d3d11->frame_width? d3d11->frame_width: sdl.draw.width; + uint32_t tex_h = d3d11->frame_height? d3d11->frame_height : sdl.draw.height; + + // Window Size + int cur_w = 0, cur_h = 0; + SDL_GetWindowSize(sdl.window, &cur_w, &cur_h); + if(!sdl.desktop.fullscreen && !d3d11->was_fullscreen){ + d3d11->window_width = cur_w; + } + + if(sdl.desktop.fullscreen && !d3d11->was_fullscreen) { + d3d11->was_fullscreen = true; + d3d11->window_width = cur_w; + d3d11->window_height = cur_w * sdl.draw.height / sdl.draw.width; + SDL_SetWindowFullscreen( + sdl.window, + SDL_WINDOW_FULLSCREEN_DESKTOP); + } + else if(!sdl.desktop.fullscreen && d3d11->was_fullscreen){ + SDL_SetWindowFullscreen(sdl.window, 0); + cur_w = d3d11->window_width; + cur_h = d3d11->window_height; + d3d11->was_fullscreen = false; + } + + if(!d3d11->Resize( + cur_w, cur_h, // Window size + tex_w, tex_h)) // Frame texture size + { + LOG_MSG("D3D11: Resize failed"); + return 0; + } + return GFX_CAN_32 | GFX_SCALING | GFX_HARDWARE; +} + +extern bool hardware_scaler_selected; +bool CDirect3D11::Resize( + uint32_t window_w, // current window width + uint32_t window_h, // current window height + uint32_t tex_w, // texture width + uint32_t tex_h) // texture height +{ + static bool was_fullscreen = 0; // Fix me: Hack for window size reset when exiting fullscreen mode + const bool reset_window_size = + (((userResizeWindowWidth == 0) && (userResizeWindowHeight == 0)) || + (tex_w != last_tex_w || tex_h != last_tex_h)) + && !sdl.desktop.fullscreen; + + double target_ratio = 4.0 / 3.0; // default aspect ratio 4:3 + if(render.aspect) { // "Fit to aspect ratio" is enabled + if(aspect_ratio_x > 0 && aspect_ratio_y > 0) + target_ratio = (double)aspect_ratio_x / aspect_ratio_y; // user-defined / preset aspect ratio + else if(aspect_ratio_x < 0 && aspect_ratio_y < 0 || IS_PC98_ARCH) + target_ratio = (double)CurMode->swidth / CurMode->sheight; // Use current mode's aspect ratio + } + else if(tex_h != CurMode->sheight) { + target_ratio = (double)CurMode->swidth / CurMode->sheight; + } + else target_ratio = (double)tex_w / tex_h; + + if(!sdl.desktop.fullscreen) { + if(hardware_scaler_selected) { + render.scale.hardware = true; + hardware_scaler_selected = false; + } + if(reset_window_size || render.scale.size != last_scalesize) { + if(tex_h >= CurMode->sheight * 2) { // doublescan mode + uint32_t width = tex_w; + uint32_t height = tex_h; + if(render.aspect) { + width = (uint32_t)((double)height * CurMode->swidth / CurMode->sheight + 0.5); // First adjust width to match the original aspect ratio. + height = (uint32_t)((double)width / target_ratio + 0.5); // Then adjust height to match the target aspect ratio. This ensures the final window size maintains the target aspect ratio, even in doublescan mode. + } + window_w = (uint32_t)(height * target_ratio * (render.scale.hardware ? (double)render.scale.size / 2.0 : 1u) + 0.5); + window_h = (uint32_t)(height * (render.scale.hardware ? (double)render.scale.size / 2.0 : 1u) + 0.5); + } + else { + window_w = tex_w * (render.scale.hardware ? render.scale.size : 1); + if(CurMode->type == M_TEXT && vga.mode != M_HERC_GFX) window_w = (uint32_t)((double)window_w / 2.0 + 0.5); // Suppress window size in text mode + if(window_w < tex_w) window_w = tex_w; // Keep at least original size + window_h = (uint32_t)((double)window_w / target_ratio + 0.5); + } + if(window_w != last_window_w || window_h != last_window_h) SDL_SetWindowSize(sdl.window, window_w, window_h); + last_scalesize = render.scale.size; + } + if(render.aspect) { + int real_w = 0, real_h = 0; + SDL_GetWindowSize(sdl.window, &real_w, &real_h); + if(real_w > 0) { + window_w = real_w; + window_h = (uint32_t)((double)window_w / target_ratio + 0.5); + } + if(window_w != last_window_w || window_h != last_window_h) SDL_SetWindowSize(sdl.window, window_w, window_h); + //LOG_MSG("window_w=%d, window_h=%d, sdl.draw.width=%d, real_w=%d, real_h=%d, w/h=%lf, target=%lf", window_w, window_h, sdl.draw.width, real_w, real_h, (double)real_w/real_h, target_ratio); + } + } + else { + userResizeWindowWidth = 0; + userResizeWindowHeight = 0; + was_fullscreen = true; + } + + if(window_w == last_window_w && + window_h == last_window_h && + tex_w == last_tex_w && + tex_h == last_tex_h) { + return true; // No change + } + + // Texture size is fixed + frame_width = tex_w; + frame_height = tex_h; + + if(sdl.window && !sdl.desktop.fullscreen) { + SDL_SetWindowSize(sdl.window, (reset_window_size || was_fullscreen > 0) ? tex_w : window_w, (reset_window_size || was_fullscreen > 0) ? tex_h : window_h); + if(!reset_window_size) was_fullscreen = false; // Fix me: This flag is set to recover unintended size changes when returning from fullscreen mode. + } + + int real_w = 0, real_h = 0; + SDL_GetWindowSize(sdl.window, &real_w, &real_h); + + width = (uint32_t)real_w; + height = (uint32_t)real_h; + + /* ---------------------------- + * 1. Unbind pipeline resources + * ---------------------------- */ + context->OMSetRenderTargets(0, nullptr, nullptr); + + SAFE_RELEASE(rtv); + + /* ---------------------------- + * 2. Resize the swap chain buffers + * ---------------------------- */ + HRESULT hr = swapchain->ResizeBuffers( + 0, + width, + height, + DXGI_FORMAT_UNKNOWN, + 0); + + if(FAILED(hr)) { + LOG_MSG("D3D11: ResizeBuffers failed"); + return false; + } + + /* ---------------------------- + * 3. Recreate back buffer render target view + * ---------------------------- */ + ID3D11Texture2D* backbuffer = nullptr; + hr = swapchain->GetBuffer(0, IID_PPV_ARGS(&backbuffer)); + if(FAILED(hr)) { + LOG_MSG("D3D11: GetBuffer failed"); + return false; + } + + hr = device->CreateRenderTargetView(backbuffer, nullptr, &rtv); + backbuffer->Release(); + + if(FAILED(hr)) { + LOG_MSG("D3D11: CreateRenderTargetView failed"); + return false; + } + + context->OMSetRenderTargets(1, &rtv, nullptr); + + double screen_ratio = (double)width / height; + float offset_x = 0.0f; + float offset_y = 0.0f; + float vp_w = (float)width; + float vp_h = (float)height; + + if(sdl.desktop.fullscreen && render.aspect) { + if(screen_ratio > target_ratio) { + vp_w = vp_h * target_ratio; + offset_x = ((float)width - vp_w) * 0.5f; + } + else if(screen_ratio < target_ratio) { + vp_h = vp_w / target_ratio; + offset_y = ((float)height - vp_h) * 0.5f; + } + } + + /* ---------------------------- + * 4. Update viewport to match the window size + * ---------------------------- */ + D3D11_VIEWPORT vp = {}; + vp.TopLeftX = offset_x; + vp.TopLeftY = offset_y; + vp.Width = (FLOAT)vp_w; + vp.Height = (FLOAT)vp_h; + vp.MinDepth = 0.0f; + vp.MaxDepth = 1.0f; + context->RSSetViewports(1, &vp); + + /* ---------------------------- + * 5. Recreate frame textures at internal resolution + * ---------------------------- */ + if(tex_w != last_tex_w || tex_h != last_tex_h) { + SAFE_RELEASE(frameTexCPU); + SAFE_RELEASE(frameTexGPU); + SAFE_RELEASE(frameSRV); + if(!CreateFrameTextures(frame_width, frame_height)) + return false; + } + + LOG_MSG( + "D3D11 Resize: window=%ux%u frame=%ux%u", + width, height, + frame_width, frame_height); + last_window_w = width; + last_window_h = height; + last_tex_w = frame_width; + last_tex_h = frame_height; + return true; +} + +bool CDirect3D11::CreateFrameTextures( + uint32_t w, + uint32_t h) +{ + /* ---------------------------- + * CPU-writable texture (mapped via Map) + * ---------------------------- */ + + /** + D3D11_TEXTURE2D_DESC cpu = {}; + cpu.Width = w; + cpu.Height = h; + cpu.MipLevels = 1; + cpu.ArraySize = 1; + cpu.Format = DXGI_FORMAT_B8G8R8A8_UNORM; + cpu.SampleDesc.Count = 1; + cpu.Usage = D3D11_USAGE_DYNAMIC; + cpu.BindFlags = D3D11_BIND_SHADER_RESOURCE; + cpu.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + + if(FAILED(device->CreateTexture2D( + &cpu, nullptr, &frameTexCPU))) { + LOG_MSG("D3D11: Create CPU frame texture failed"); + return false; + } + */ + + /* ---------------------------- + * GPU render texture + * ---------------------------- */ + D3D11_TEXTURE2D_DESC gpu = {}; + gpu.Width = w; + gpu.Height = h; + gpu.MipLevels = 1; + gpu.ArraySize = 1; + gpu.Format = DXGI_FORMAT_B8G8R8A8_UNORM; + gpu.SampleDesc.Count = 1; + gpu.Usage = D3D11_USAGE_DYNAMIC; + gpu.BindFlags = D3D11_BIND_SHADER_RESOURCE; + gpu.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + gpu.MiscFlags = 0; + + if(FAILED(device->CreateTexture2D( + &gpu, nullptr, &frameTexGPU))) { + LOG_MSG("D3D11: Create GPU frame texture failed"); + return false; + } + + /* ---------------------------- + * Shader Resource View (SRV) + * ---------------------------- */ + D3D11_SHADER_RESOURCE_VIEW_DESC srv = {}; + srv.Format = gpu.Format; + srv.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; + srv.Texture2D.MipLevels = 1; + + if(FAILED(device->CreateShaderResourceView( + frameTexGPU, &srv, &frameSRV))) { + LOG_MSG("D3D11: Create SRV failed"); + return false; + } + + return true; +} + +bool OUTPUT_DIRECT3D11_StartUpdate(uint8_t*& pixels, Bitu& pitch) +{ + //LOG_MSG("D3D11: StartUpdate"); + bool result = false; + if(d3d11) result = d3d11->StartUpdate(pixels, pitch); + return result; +} + +void OUTPUT_DIRECT3D11_EndUpdate(const uint16_t* changedLines) +{ + //LOG_MSG("D3D11: EndUpdate called, changedLines=%p", changedLines); + if(d3d11) + d3d11->EndUpdate(); +} + +void OUTPUT_DIRECT3D11_Shutdown() +{ + if(d3d11) d3d11->Shutdown(); +} + +void OUTPUT_DIRECT3D11_CheckSourceResolution() +{ + if(d3d11) d3d11->CheckSourceResolution(); +} + +#if 0 +void D3D11_DrawLine_8bpp(const void* src) +{ + const uint8_t* s = static_cast(src); + const unsigned int w = render.src.width; + if(d3d11) { + uint32_t* dst = reinterpret_cast(d3d11->cpu_buffer.data() + vga.draw.lines_done * d3d11->cpu_pitch); + + for(unsigned int x = 0; x < w; x++) { + dst[x] = vga.dac.xlat32[s[x]]; // 8bpp → 32bpp + //LOG_MSG("D3D11: DrawLine_8bpp x=%u idx=%u color=0x%08lx", x, idx, dst[x]); + } + } + + if(vga.draw.lines_done == vga.draw.lines_total-1){ + RENDER_EndUpdate(false); + } + +} +#endif + +#endif //#if defined(C_SDL2) +#endif //#if C_DIRECT3D diff --git a/src/output/output_direct3d11.h b/src/output/output_direct3d11.h new file mode 100644 index 00000000000..de9b2d18d7a --- /dev/null +++ b/src/output/output_direct3d11.h @@ -0,0 +1,101 @@ +#pragma once + +#include +#include +#include + +#include "control.h" +#include "dosbox.h" +#include "logging.h" +#include "menudef.h" +#include "render.h" + +#include +#include +#include +#include + +#include "sdlmain.h" + +using namespace std; +#if C_DIRECT3D +#if defined(C_SDL2) + +#include +#include +#include + +void d3d11_init(); +bool d3d11_LoadDLL(); +void d3d11_UnloadDLL(); + +void OUTPUT_DIRECT3D11_Select(); +Bitu OUTPUT_DIRECT3D11_GetBestMode(Bitu flags); +Bitu OUTPUT_DIRECT3D11_SetSize(); +bool OUTPUT_DIRECT3D11_StartUpdate(uint8_t*& pixels, Bitu& pitch); +void OUTPUT_DIRECT3D11_EndUpdate(const uint16_t*); +void OUTPUT_DIRECT3D11_Shutdown(); +void OUTPUT_DIRECT3D11_CheckSourceResolution(); + +class CDirect3D11 { +public: + CDirect3D11(); + ~CDirect3D11(); + + bool Initialize(HWND hwnd, int width, int height); + void Shutdown(); + + bool StartUpdate(uint8_t*& pixels, Bitu& pitch); + void EndUpdate(); + bool Resize(uint32_t window_w, uint32_t window_h, uint32_t tex_w, uint32_t tex_h); + bool CreateFrameTextures(uint32_t w, uint32_t h); + void CheckSourceResolution(); + void ResizeCPUBuffer(uint32_t src_w, uint32_t src_h); + bool CreateSamplers(void); + void SetSamplerMode(void); + void GetRenderMode(void); + + uint32_t frame_width = 0, frame_height = 0; // Framebuffer size (Internal resolution) + uint32_t window_width = 0; // Window width (Used when returning from fullscreen) + uint32_t window_height = 0; // Window width (Used when returning from fullscreen) + bool was_fullscreen = false; + bool device_ready = false; + int cpu_pitch = 0; + std::vector cpu_buffer; + +private: + ID3D11Device* device = nullptr; + ID3D11DeviceContext* context = nullptr; + IDXGISwapChain* swapchain = nullptr; + ID3D11RenderTargetView* rtv = nullptr; + + ID3D11Texture2D* frameTexCPU = nullptr; // Map 用(D3D11_USAGE_DYNAMIC) + ID3D11Texture2D* frameTexGPU = nullptr; // Copy 用(D3D11_USAGE_DEFAULT) + + ID3D11SamplerState* samplerNearest = nullptr; + ID3D11SamplerState* samplerLinear = nullptr; + ID3D11SamplerState* samplerStretch = nullptr; + + ID3D11VertexShader* vs = nullptr; + ID3D11PixelShader* ps = nullptr; + ID3D11InputLayout* inputLayout = nullptr; + + ID3D11ShaderResourceView* frameSRV = nullptr; + + ID3D11Buffer* fullscreenVB = nullptr; + UINT stride = 0; + UINT offset = 0; + + int width = 0, height = 0; + bool textureMapped = false; + bool resizing = false; + uint32_t last_window_w = 0; + uint32_t last_window_h = 0; + uint32_t last_tex_w = 0; + uint32_t last_tex_h = 0; + uint32_t last_scalesize = 0; + int current_render_mode; +}; + +#endif // defined(C_SDL2) +#endif // C_DIRECT3D diff --git a/src/output/output_gamelink.cpp b/src/output/output_gamelink.cpp index 9dc72526764..60853ad6e8f 100644 --- a/src/output/output_gamelink.cpp +++ b/src/output/output_gamelink.cpp @@ -174,6 +174,9 @@ Bitu OUTPUT_GAMELINK_SetSize() sdl.clip.x = 0; sdl.clip.y = 0; + // FIXME: Please use sdl.draw.width and sdl.draw.height and allocate based on that. + // Free the buffer and reallocate on size change. Look at the OpenGL output + // code for a good example. if (!sdl.gamelink.framebuf) { sdl.gamelink.framebuf = malloc(SCALER_MAXWIDTH * SCALER_MAXHEIGHT * 4); // 32 bit color frame buffer } diff --git a/src/output/output_metal.h b/src/output/output_metal.h new file mode 100644 index 00000000000..7ef87f31ebb --- /dev/null +++ b/src/output/output_metal.h @@ -0,0 +1,94 @@ +#pragma once + +#include +#include +#include + +#include "control.h" +#include "dosbox.h" +#include "logging.h" +#include "menudef.h" +#include "render.h" + +#include +#include +#include +#include + +#include "sdlmain.h" + + +using namespace std; +#if defined(MACOSX) && C_METAL +#if defined(C_SDL2) + +#import +#import +#import + + +void metal_init(); + +void OUTPUT_Metal_Select(); +Bitu OUTPUT_Metal_GetBestMode(Bitu flags); +bool OUTPUT_Metal_StartUpdate(uint8_t*& pixels, Bitu& pitch); +void OUTPUT_Metal_EndUpdate(const uint16_t* changedLines); +Bitu OUTPUT_Metal_SetSize(void); +void OUTPUT_Metal_Shutdown(); +void OUTPUT_Metal_CheckSourceResolution(); + +class CMetal { +public: + CMetal(); + ~CMetal(); + + bool Initialize(void* nsview, int w, int h); + void Shutdown(); + + bool StartUpdate(uint8_t*& pixels, Bitu& pitch); + void EndUpdate(); + + bool Resize(uint32_t window_w, uint32_t window_h, + uint32_t tex_w, uint32_t tex_h); + + void ResizeCPUBuffer(uint32_t src_w, uint32_t src_h); + bool CreateSampler(); + void GetRenderMode(); + bool CreatePipeline(); + bool CreateFrameTexture(uint32_t w, uint32_t h); + void SetSamplerMode(id encoder); + void CheckSourceResolution(); + + uint32_t frame_width = 0; + uint32_t frame_height = 0; + + int cpu_pitch = 0; + std::vector cpu_buffer; + uint32_t window_width = 0; + uint32_t window_height = 0; + uint32_t last_window_w = 0; + uint32_t last_window_h = 0; + uint32_t last_tex_w = 0; + uint32_t last_tex_h = 0; + uint32_t last_scalesize = 0; + bool was_fullscreen = false; + +private: + NSView* view = nil; + + id device = nil; + id queue = nil; + CAMetalLayer* layer = nil; + + id frameTexture = nil; + id samplerNearest = nil; + id samplerLinear = nil; + id pipeline = nil; + + bool textureMapped = false; + int current_render_mode = ASPECT_NEAREST; + MTLViewport currentViewport; +}; + +#endif // defined(C_SDL2) +#endif // defined(MACOSX) diff --git a/src/output/output_metal.mm b/src/output/output_metal.mm new file mode 100644 index 00000000000..39efa34808e --- /dev/null +++ b/src/output/output_metal.mm @@ -0,0 +1,712 @@ +#include "config.h" + +#include + +#include "sdlmain.h" +#include "control.h" +#include "dosbox.h" +#include "logging.h" +#include "menudef.h" +#include "render.h" +#include "vga.h" +#include "../ints/int10.h" +#include "output_surface.h" + +#if defined(MACOSX) && C_METAL +#if defined(C_SDL2) + +#import +#import +#import + +#include "output_metal.h" + +extern VGA_Type vga; +extern VideoModeBlock* CurMode; + +CMetal::CMetal() {} +CMetal::~CMetal() { Shutdown(); } + +bool CMetal::Initialize(void* nsview, int w, int h) +{ + /* --------------------------------- + * 1. Metal Device + * --------------------------------- */ + device = MTLCreateSystemDefaultDevice(); + if (!device) { + LOG_MSG("Metal: No device available"); + return false; + } + + queue = [device newCommandQueue]; + if (!queue) { + LOG_MSG("Metal: Failed to create command queue"); + return false; + } + this->view = (__bridge NSView*)nsview; + + /* --------------------------------- + * 2. Create Metal Layer + SubView + * --------------------------------- */ + layer = [CAMetalLayer layer]; + layer.device = device; + layer.pixelFormat = MTLPixelFormatBGRA8Unorm; + layer.framebufferOnly = NO; + + /* Metal専用NSViewを作る */ + NSView* parentView = (__bridge NSView*)view; + NSView* metalView = [[NSView alloc] initWithFrame:parentView.bounds]; + + metalView.autoresizingMask = + NSViewWidthSizable | NSViewHeightSizable; + + metalView.wantsLayer = YES; + metalView.layer = layer; + + /* SDLのcontentViewに追加 */ + [view addSubview:metalView]; + + /* layerサイズ同期 */ + layer.frame = metalView.bounds; + + /* --------------------------------- + * 3. Retina / drawableSize + * --------------------------------- */ + CGFloat scale = 1.0; + +#if TARGET_OS_OSX + if (view.window) + scale = view.window.backingScaleFactor; +#endif + + /** + LOG_MSG("Metal: drawableSize = %f x %f", + layer.drawableSize.width, + layer.drawableSize.height); + */ + + /* --------------------------------- + * 4. CPU framebuffer + * --------------------------------- */ + frame_width = w; + frame_height = h; + + cpu_pitch = w * 4; + cpu_buffer.resize(cpu_pitch * h); + + /* --------------------------------- + * 5. GPU resources + * --------------------------------- */ + if (!CreateFrameTexture(w, h)) { + LOG_MSG("Metal: CreateFrameTexture failed"); + return false; + } + + if (!CreatePipeline()) { + LOG_MSG("Metal: CreatePipeline failed"); + return false; + } + + if (!CreateSampler()) { + LOG_MSG("Metal: CreateSampler failed"); + return false; + } + CheckSourceResolution(); + LOG_MSG("Metal: Initialize complete"); + + return true; +} +void CMetal::CheckSourceResolution() +{ + static uint32_t last_w = 0; + static uint32_t last_h = 0; + + if(last_w == sdl.draw.width && + last_h == sdl.draw.height) + return; + + LOG_MSG("Metal: VGA source resolution changed %ux%u -> %ux%u", + last_w, last_h, + sdl.draw.width, sdl.draw.height); + + // Resize CPU buffer(don't shrink if smaller) + ResizeCPUBuffer( + sdl.draw.width, + sdl.draw.height); + + last_w = sdl.draw.width; + last_h = sdl.draw.height; + + Resize( + sdl.draw.width, sdl.draw.height, // Window size + sdl.draw.width, sdl.draw.height); // Frame texture size + +} + +void CMetal::ResizeCPUBuffer(uint32_t src_w, uint32_t src_h) +{ + const uint32_t required_pitch = src_w * 4; // BGRA32 + const uint32_t required_size = required_pitch * src_h; + + // Resize CPU buffer(don't shrink if smaller) + if(cpu_buffer.size() < required_size) { + cpu_buffer.resize(required_size); + //LOG_MSG("D3D11: CPU buffer resized to %u bytes", required_size); + } + + cpu_pitch = required_pitch; +} + +void CMetal::Shutdown() +{ + frameTexture = nil; + pipeline = nil; + queue = nil; + device = nil; + samplerNearest = nil; + samplerLinear = nil; +} + +bool CMetal::StartUpdate(uint8_t*& pixels, Bitu& pitch) +{ + if(textureMapped) return false; + + // Begin frame update by returning the CPU-side framebuffer + pixels = cpu_buffer.data(); + pitch = cpu_pitch; + render.scale.outWrite = cpu_buffer.data(); + render.scale.outPitch = cpu_pitch; + textureMapped = true; + return true; +} + +void CMetal::EndUpdate() +{ + if(!textureMapped){ + //LOG_MSG("METAL: EndUpdate textureMapped=false"); + return; + } + + MTLRegion region = { + {0,0,0}, + {frame_width, frame_height, 1} + }; + + [frameTexture replaceRegion : region + mipmapLevel : 0 + withBytes : cpu_buffer.data() + bytesPerRow : cpu_pitch] ; + + id drawable = [layer nextDrawable]; + if (!drawable) { + LOG_MSG("Metal: drawable is NULL"); + return; + } + //LOG_MSG("Drawable texture size = %f x %f", + // drawable.texture.width, + // drawable.texture.height); + + MTLRenderPassDescriptor* pass = + [MTLRenderPassDescriptor renderPassDescriptor]; + pass.colorAttachments[0].clearColor = + MTLClearColorMake(0, 0, 0, 1); // Black + pass.colorAttachments[0].texture = drawable.texture; + pass.colorAttachments[0].loadAction = MTLLoadActionClear; + pass.colorAttachments[0].storeAction = MTLStoreActionStore; + + id cmd = [queue commandBuffer]; + + id enc = + [cmd renderCommandEncoderWithDescriptor : pass]; + [enc setViewport:currentViewport]; + [enc setRenderPipelineState : pipeline] ; + [enc setFragmentTexture : frameTexture atIndex : 0] ; + GetRenderMode(); + SetSamplerMode(enc); + + [enc drawPrimitives : MTLPrimitiveTypeTriangleStrip + vertexStart : 0 + vertexCount : 4]; + [enc endEncoding] ; + + [cmd presentDrawable : drawable] ; + [cmd commit] ; + + textureMapped = false; +} + + +bool CMetal::CreateSampler() +{ + MTLSamplerDescriptor* s = [[MTLSamplerDescriptor alloc]init]; + + // ---- Nearest ---- + s.minFilter = MTLSamplerMinMagFilterNearest; + s.magFilter = MTLSamplerMinMagFilterNearest; + samplerNearest = [device newSamplerStateWithDescriptor : s]; + + // ---- Linear ---- + s.minFilter = MTLSamplerMinMagFilterLinear; + s.magFilter = MTLSamplerMinMagFilterLinear; + samplerLinear = [device newSamplerStateWithDescriptor : s]; + if(!(samplerNearest && samplerLinear)) LOG_MSG("METAL:CreateSampler failed"); + return samplerNearest && samplerLinear; +} + +void CMetal::SetSamplerMode(id encoder) +{ + static int last_mode = -1; + if(last_mode == current_render_mode) return; + + id s = samplerLinear; + + if(current_render_mode == ASPECT_NEAREST) + s = samplerNearest; + + [encoder setFragmentSamplerState : s atIndex : 0] ; + + last_mode = current_render_mode; +} + +void CMetal::GetRenderMode() { + Section_prop* section = static_cast(control->GetSection("render")); + std::string s_aspect = section->Get_string("aspect"); + + if(s_aspect == "nearest") { + current_render_mode = ASPECT_NEAREST; + } + else if(s_aspect == "bilinear") { + current_render_mode = ASPECT_BILINEAR; + } + else { + current_render_mode = ASPECT_NEAREST; // default + } +} + +bool CMetal::CreatePipeline() +{ + NSError* err = nil; + + NSString* src = @"\ + #include \n\ + using namespace metal;\n\ + \ + struct VSOut {\ + float4 pos [[position]];\ + float2 uv;\ + };\ + \ + vertex VSOut vs_main(uint vid [[vertex_id]]) {\ + float2 pos[4] = {\ + {-1.0,-1.0},{ 1.0,-1.0},\ + {-1.0, 1.0},{ 1.0, 1.0}\ + };\ + float2 uv[4] = {\ + {0.0,1.0},{1.0,1.0},\ + {0.0,0.0},{1.0,0.0}\ + };\ + VSOut o;\ + o.pos = float4(pos[vid],0,1);\ + o.uv = uv[vid];\ + return o;\ + }\ + \ + fragment float4 ps_main(VSOut in [[stage_in]],\ + texture2d tex [[texture(0)]],\ + sampler smp [[sampler(0)]]) {\ + return tex.sample(smp, in.uv);\ + }"; + + id lib = + [device newLibraryWithSource:src options:nil error:&err]; + + if (!lib) { + LOG_MSG("Metal: Shader compile error: %s", + err.localizedDescription.UTF8String); + return false; + } + + id vs = [lib newFunctionWithName:@"vs_main"]; + id ps = [lib newFunctionWithName:@"ps_main"]; + + if (!vs || !ps) { + LOG_MSG("Metal: Shader function missing"); + return false; + } + + MTLRenderPipelineDescriptor* desc = + [[MTLRenderPipelineDescriptor alloc] init]; + + desc.vertexFunction = vs; + desc.fragmentFunction = ps; + desc.colorAttachments[0].pixelFormat = + MTLPixelFormatBGRA8Unorm; + + desc.colorAttachments[0].blendingEnabled = NO; + + pipeline = + [device newRenderPipelineStateWithDescriptor:desc + error:&err]; + + if (!pipeline) { + LOG_MSG("Metal: Pipeline creation failed: %s", + err.localizedDescription.UTF8String); + return false; + } + + return true; +} + +static CMetal* metal = nullptr; + +void metal_init(void) +{ + if(metal) { + metal->Shutdown(); + } + + sdl.desktop.want_type = SCREEN_METAL; + + //LOG_MSG("OUTPUT METAL: Init called"); + + if(!sdl.window) { + sdl.window = GFX_SetSDLWindowMode(640, 400, SCREEN_SURFACE); + + if(!sdl.window) { + LOG_MSG("SDL: Failed to create window: %s", SDL_GetError()); + OUTPUT_SURFACE_Select(); + return; + } + + sdl.surface = SDL_GetWindowSurface(sdl.window); + sdl.desktop.pixelFormat = SDL_GetWindowPixelFormat(sdl.window); + } + + SDL_SysWMinfo wmi; + SDL_VERSION(&wmi.version); + + if(!SDL_GetWindowWMInfo(sdl.window, &wmi)) { + LOG_MSG("METAL: Failed to get WM info"); + OUTPUT_SURFACE_Select(); + return; + } + + NSWindow* nswin = (__bridge NSWindow*)wmi.info.cocoa.window; + NSView* view = [nswin contentView]; + + if(!view) { + LOG_MSG("METAL: Failed to get NSView"); + OUTPUT_SURFACE_Select(); + return; + } + + if(sdl.desktop.fullscreen) + GFX_CaptureMouse(); + + delete metal; + metal = new CMetal(); + + if(!metal) { + LOG_MSG("METAL: Failed to create object"); + OUTPUT_SURFACE_Select(); + return; + } + + int w = sdl.draw.width ? sdl.draw.width : 640; + int h = sdl.draw.height ? sdl.draw.height : 400; + + if(!metal->Initialize((__bridge void*)view, w, h)) { + LOG_MSG("METAL: Initialize failed"); + delete metal; + metal = nullptr; + OUTPUT_SURFACE_Select(); + return; + } + + sdl.desktop.type = SCREEN_METAL; +} + + +void OUTPUT_Metal_Select() +{ + sdl.desktop.want_type = SCREEN_METAL; + render.aspectOffload = true; +} + +Bitu OUTPUT_Metal_GetBestMode(Bitu flags) +{ + flags |= GFX_SCALING; + flags &= ~(GFX_CAN_8 | GFX_CAN_15 | GFX_CAN_16); + flags |= GFX_CAN_32; + return flags; +} + +Bitu OUTPUT_Metal_SetSize(void) +{ + if (!metal) { + LOG_MSG("Metal: Not initialized"); + return 0; + } + + /* ------------------------ + * Framebuffer (texture) size + * ------------------------ */ + uint32_t tex_w = metal->frame_width ? metal->frame_width : sdl.draw.width; + uint32_t tex_h = metal->frame_height ? metal->frame_height : sdl.draw.height; + + /* ------------------------ + * Window logical size + * ------------------------ */ + int cur_w = 0, cur_h = 0; + SDL_GetWindowSize(sdl.window, &cur_w, &cur_h); + + if (cur_w <= 0 || cur_h <= 0) + return 0; + + /* ------------------------ + * Fullscreen handling + * ------------------------ */ + if(!sdl.desktop.fullscreen && !metal->was_fullscreen){ + metal->window_width = cur_w; + metal->window_height = cur_h; + } + + if(sdl.desktop.fullscreen && !metal->was_fullscreen) { + metal->was_fullscreen = true; + metal->window_width = cur_w; + metal->window_height = cur_w * sdl.draw.height / sdl.draw.width; + SDL_SetWindowFullscreen( + sdl.window, + SDL_WINDOW_FULLSCREEN_DESKTOP); + } + else if(!sdl.desktop.fullscreen && metal->was_fullscreen){ + SDL_SetWindowFullscreen(sdl.window, 0); + cur_w = metal->window_width; + cur_h = metal->window_height; + metal->was_fullscreen = false; + } + + /* ------------------------ + * Metal resize + * ------------------------ */ + if (!metal->Resize(cur_w, cur_h, tex_w, tex_h)) { + LOG_MSG("Metal: Resize failed"); + return 0; + } + + return GFX_CAN_32 | GFX_SCALING | GFX_HARDWARE; +} + +extern bool hardware_scaler_selected; +bool CMetal::Resize(uint32_t window_w, + uint32_t window_h, + uint32_t tex_w, + uint32_t tex_h) +{ + if (!layer || !view) + return false; + //LOG_MSG("Resize called: win=%u,%u tex=%u,%u", window_w, window_h, tex_w, tex_h); + + const bool reset_window_size = + (((userResizeWindowWidth == 0) && (userResizeWindowHeight == 0)) || + (tex_w != last_tex_w || tex_h != last_tex_h)) + && !sdl.desktop.fullscreen; + + double target_ratio = 4.0 / 3.0; // default aspect ratio 4:3 + if(render.aspect) { // "Fit to aspect ratio" is enabled + if(aspect_ratio_x > 0 && aspect_ratio_y > 0) + target_ratio = (double)aspect_ratio_x / aspect_ratio_y; // user-defined / preset aspect ratio + else if(aspect_ratio_x < 0 && aspect_ratio_y < 0 || IS_PC98_ARCH) + target_ratio = (double)CurMode->swidth / CurMode->sheight; // Use current mode's aspect ratio + } + else if(tex_h != CurMode->sheight) { + target_ratio = (double)CurMode->swidth / CurMode->sheight; + } + else target_ratio = (double)tex_w / tex_h; + + uint32_t width=0, height=0; + if(!sdl.desktop.fullscreen) { + if(hardware_scaler_selected) { + render.scale.hardware = true; + hardware_scaler_selected = false; + } + if(reset_window_size || render.scale.size != last_scalesize){ + if(tex_h >= CurMode->sheight * 2) { // doublescan mode + width = tex_w; + height = tex_h; + if(render.aspect) { + width = (uint32_t)((double)height * CurMode->swidth / CurMode->sheight +0.5); // First adjust width to match the original aspect ratio. + height = (uint32_t)((double)width / target_ratio + 0.5); // Then adjust height to match the target aspect ratio. This ensures the final window size maintains the target aspect ratio, even in doublescan mode. + } + window_w = (uint32_t)(height * target_ratio * (render.scale.hardware ? (double)render.scale.size / 2.0 : 1u) + 0.5); + window_h = (uint32_t)(height * (render.scale.hardware ? (double)render.scale.size / 2.0 : 1u) + 0.5); + } + else { + window_w = tex_w * (render.scale.hardware ? render.scale.size : 1); + if(CurMode->type == M_TEXT && vga.mode != M_HERC_GFX) window_w = (uint32_t)((double)window_w / 2.0 + 0.5); // Suppress window size in text mode + if(window_w < tex_w) window_w = tex_w; // Keep at least original size + window_h = (uint32_t)((double)window_w / target_ratio + 0.5); + } + if(window_w != last_window_w || window_h != last_window_h) SDL_SetWindowSize(sdl.window, window_w, window_h); + last_scalesize = render.scale.size; + } + if(render.aspect) { + int real_w = 0, real_h = 0; + SDL_GetWindowSize(sdl.window, &real_w, &real_h); + if(real_w > 0) { + window_w = real_w; + window_h = (uint32_t)((double)window_w / target_ratio + 0.5); + } + if(window_w != last_window_w || window_h != last_window_h) SDL_SetWindowSize(sdl.window, window_w, window_h); + //LOG_MSG("window_w=%d, window_h=%d, sdl.draw.width=%d, real_w=%d, real_h=%d, w/h=%lf, target=%lf", window_w, window_h, sdl.draw.width, real_w, real_h, (double)real_w/real_h, target_ratio); + } + } + + if(window_w == last_window_w && + window_h == last_window_h && + tex_w == last_tex_w && + tex_h == last_tex_h) { + return true; // No change + } + + /* --------------------------------- + * 1. Recreate Frame Texture + * --------------------------------- */ + + if (tex_w != frame_width || + tex_h != frame_height) + { + frame_width = tex_w; + frame_height = tex_h; + ResizeCPUBuffer(frame_width, frame_height); + + if (!CreateFrameTexture(frame_width, + frame_height)) + { + LOG_MSG("Metal: CreateFrameTexture failed in Resize"); + return false; + } + LOG_MSG("Metal: Texture resized to %ux%u", tex_w, tex_h); + } + + // Texture size is fixed + frame_width = tex_w; + frame_height = tex_h; + + if(sdl.window && !sdl.desktop.fullscreen) { + SDL_SetWindowSize(sdl.window, window_w, window_h); + } + + int real_w = 0, real_h = 0; + SDL_GetWindowSize(sdl.window, &real_w, &real_h); + + width = (uint32_t)real_w; + height = (uint32_t)real_h; + + /* --------------------------------- + * 2. Retina / HiDPI + * --------------------------------- */ + CGFloat scale = 1.0; + NSView* nsv = (__bridge NSView*)view; + + if (nsv.window) { + scale = nsv.window.backingScaleFactor; + } else { + scale = [NSScreen mainScreen].backingScaleFactor; + } + /* --------------------------------- + * 3. Update Layer size + * --------------------------------- */ + layer.contentsScale = scale; + + CGRect newFrame = CGRectMake(0, 0, (CGFloat)width, (CGFloat)height); + layer.frame = newFrame; + + layer.drawableSize = CGSizeMake(width * scale, height * scale); + + uint32_t dw = (uint32_t)layer.drawableSize.width; + uint32_t dh = (uint32_t)layer.drawableSize.height; + + if (sdl.desktop.fullscreen && render.aspect) { + + double win_ratio = (double)dw / (double)dh; + + double vp_w, vp_h; + double vp_x = 0.0; + double vp_y = 0.0; + + if (win_ratio > target_ratio) { + vp_h = dh; + vp_w = vp_h * target_ratio; + vp_x = (dw - vp_w) * 0.5; + } + else { + vp_w = dw; + vp_h = vp_w / target_ratio; + vp_y = (dh - vp_h) * 0.5; + } + + currentViewport = { vp_x, vp_y, vp_w, vp_h, 0.0, 1.0 }; + } + else { + currentViewport = { 0.0, 0.0, (double)dw, (double)dh, 0.0, 1.0 }; + } + + last_window_w = width; + last_window_h = height; + last_tex_w = frame_width; + last_tex_h = frame_height; + return true; +} + + +bool CMetal::CreateFrameTexture(uint32_t w, uint32_t h) +{ + MTLTextureDescriptor* desc = + [MTLTextureDescriptor texture2DDescriptorWithPixelFormat: + MTLPixelFormatBGRA8Unorm + width:w + height:h + mipmapped:NO]; + + desc.usage = + MTLTextureUsageShaderRead | + MTLTextureUsageShaderWrite; + + desc.storageMode = MTLStorageModeShared; + + frameTexture = [device newTextureWithDescriptor:desc]; + + if(!frameTexture) + LOG_MSG("METAL: CreateFrameTexture failed"); + + return frameTexture != nil; +} + +bool OUTPUT_Metal_StartUpdate(uint8_t*& pixels, Bitu& pitch) +{ + //LOG_MSG("D3D11: StartUpdate"); + bool result = false; + if(metal) result = metal->StartUpdate(pixels, pitch); + return result; +} + +void OUTPUT_Metal_EndUpdate(const uint16_t* changedLines) +{ + //LOG_MSG("METAL: EndUpdate called, changedLines=%p", changedLines); + if(metal) + metal->EndUpdate(); +} + +void OUTPUT_Metal_Shutdown() +{ + if(metal) metal->Shutdown(); +} + +void OUTPUT_Metal_CheckSourceResolution() +{ + if(metal) metal->CheckSourceResolution(); +} + +#endif //#if defined(C_SDL2) +#endif //#if defined(MACOSX) diff --git a/src/output/output_opengl.cpp b/src/output/output_opengl.cpp index 253c1b635d0..c2532febccf 100644 --- a/src/output/output_opengl.cpp +++ b/src/output/output_opengl.cpp @@ -15,6 +15,7 @@ extern "C" { #include "dosbox.h" #include "logging.h" #include "menudef.h" +#include "../ints/int10.h" #include #include #include @@ -101,7 +102,6 @@ extern bool SDLDrawGenFontTextureInit; extern int aspect_ratio_x, aspect_ratio_y; extern int initgl, lastcp; extern bool font_16_init; -extern uint8_t int10_font_16[256 * 16], int10_font_16_init[256 * 16]; SDL_OpenGL sdl_opengl = {0}; @@ -342,7 +342,12 @@ void OUTPUT_OPENGL_Select( GLKind kind ) sdl_opengl.use_shader = false; initgl=0; #if defined(C_SDL2) - SDL_SetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION, "opengl"); +#if defined(MACOSX) + SDL_SetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION, "opengl");// setting this to "1" caused crashes on macOS +#else + SDL_SetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION, "1"); // setting this to "opengl" caused crashes in certain situations (#3661). can still be overridden via environment variable +#endif + void GFX_SetResizeable(bool enable); GFX_SetResizeable(true); sdl.window = GFX_SetSDLWindowMode(640,400, SCREEN_OPENGL); @@ -353,6 +358,8 @@ void OUTPUT_OPENGL_Select( GLKind kind ) } sdl_opengl.context = SDL_GL_CreateContext(sdl.window); sdl.surface = SDL_GetWindowSurface(sdl.window); + + LOG_MSG( "OpenGL Version : %s", glGetString( GL_VERSION )); } if (!sdl.window || !sdl_opengl.context || sdl.surface == NULL) { #else @@ -764,7 +771,9 @@ Bitu OUTPUT_OPENGL_SetSize() } else { - sdl_opengl.framebuf = calloc(adjTexWidth*adjTexHeight, 4); //32 bit color + /* NTS: Allocate an additional 4K on top because modern MesaGL / libgallium likes to use SSE/AVX + * instructions to memcpy on texture update and that can EASILY read a little bit past the buffer. */ + sdl_opengl.framebuf = calloc((adjTexWidth*adjTexHeight) + (4096/4), 4); //32 bit color } sdl_opengl.pitch = adjTexWidth * 4; @@ -779,7 +788,7 @@ Bitu OUTPUT_OPENGL_SetSize() } #endif - if (sdl.desktop.fullscreen&&sdl_opengl.use_shader) + if (sdl_opengl.use_shader) glViewport((sdl.surface->w-sdl.clip.w)/2,(sdl.surface->h-sdl.clip.h)/2,sdl.clip.w,sdl.clip.h); else glViewport(0, 0, sdl.surface->w, sdl.surface->h); @@ -941,17 +950,17 @@ bool OUTPUT_OPENGL_StartUpdate(uint8_t* &pixels, Bitu &pitch) return true; } -void OUTPUT_OPENGL_EndUpdate(const uint16_t *changedLines) -{ - if (!(sdl.must_redraw_all && changedLines == NULL)) - { +static void CheckClearing(void) { if (sdl_opengl.clear_countdown > 0) { - sdl_opengl.clear_countdown--; glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); + if (sdl_opengl.menudraw_countdown == 0) + sdl_opengl.menudraw_countdown++; } +} +static void CheckMenuDrawing(void) { if (sdl_opengl.menudraw_countdown > 0) { sdl_opengl.menudraw_countdown--; @@ -960,7 +969,17 @@ void OUTPUT_OPENGL_EndUpdate(const uint16_t *changedLines) GFX_DrawSDLMenu(mainMenu, mainMenu.display_list); #endif } +} +static void CheckManagement(void) { + CheckClearing(); + CheckMenuDrawing(); +} + +void OUTPUT_OPENGL_EndUpdate(const uint16_t *changedLines) +{ + if (!(sdl.must_redraw_all && changedLines == NULL)) + { #if C_XBRZ if (sdl_xbrz.enable && sdl_xbrz.scale_on) { @@ -1017,6 +1036,7 @@ void OUTPUT_OPENGL_EndUpdate(const uint16_t *changedLines) #endif (uint8_t *)sdl_opengl.framebuf); } + CheckManagement(); glCallList(sdl_opengl.displaylist); SDL_GL_SwapBuffers(); } @@ -1060,6 +1080,17 @@ void OUTPUT_OPENGL_EndUpdate(const uint16_t *changedLines) { uint8_t *pixels = (uint8_t *)sdl_opengl.framebuf + y * sdl_opengl.pitch; Bitu height = changedLines[index]; + + // FIXME: This is causing libgallium crashes by sometimes getting y+height > sdl.draw.height. + // It seems to happen on VGA mode changes. + // Figure out what is causing that. + // I have to see any crash from y >= sdl.draw.height though. + if ((y+height) > sdl.draw.height) { + LOG(LOG_MISC,LOG_WARN)("OpenGL: Changed lines extend past texture (y=%u h=%u drawheight=%u y+h=%u y+h>drawheight)", + (unsigned int)y,(unsigned int)height,(unsigned int)(y+height),(unsigned int)sdl.draw.height); + height = sdl.draw.height - y; + } + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, (int)y, (int)sdl.draw.width, (int)height, GL_BGRA_EXT, #if defined (MACOSX) && !defined(C_SDL2) @@ -1076,6 +1107,8 @@ void OUTPUT_OPENGL_EndUpdate(const uint16_t *changedLines) } } else return; + + CheckManagement(); if (sdl_opengl.program_object) { glUniform1i(sdl_opengl.ruby.frame_count, sdl_opengl.actual_frame_count++); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); @@ -1083,37 +1116,37 @@ void OUTPUT_OPENGL_EndUpdate(const uint16_t *changedLines) glCallList(sdl_opengl.displaylist); #if 0 /* DEBUG Prove to me that you're drawing the damn texture */ - glBindTexture(GL_TEXTURE_2D, SDLDrawGenFontTexture); + glBindTexture(GL_TEXTURE_2D, SDLDrawGenFontTexture); - glPushMatrix(); + glPushMatrix(); - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glScaled(1.0 / SDLDrawGenFontTextureWidth, 1.0 / SDLDrawGenFontTextureHeight, 1.0); + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glScaled(1.0 / SDLDrawGenFontTextureWidth, 1.0 / SDLDrawGenFontTextureHeight, 1.0); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_ALPHA_TEST); - glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_ALPHA_TEST); + glEnable(GL_BLEND); - glBegin(GL_QUADS); + glBegin(GL_QUADS); - glTexCoord2i(0, 0); glVertex2i(0, 0); // lower left - glTexCoord2i(SDLDrawGenFontTextureWidth, 0); glVertex2i(SDLDrawGenFontTextureWidth, 0); // lower right - glTexCoord2i(SDLDrawGenFontTextureWidth, SDLDrawGenFontTextureHeight); glVertex2i(SDLDrawGenFontTextureWidth, SDLDrawGenFontTextureHeight); // upper right - glTexCoord2i(0, SDLDrawGenFontTextureHeight); glVertex2i(0, SDLDrawGenFontTextureHeight); // upper left + glTexCoord2i(0, 0); glVertex2i(0, 0); // lower left + glTexCoord2i(SDLDrawGenFontTextureWidth, 0); glVertex2i(SDLDrawGenFontTextureWidth, 0); // lower right + glTexCoord2i(SDLDrawGenFontTextureWidth, SDLDrawGenFontTextureHeight); glVertex2i(SDLDrawGenFontTextureWidth, SDLDrawGenFontTextureHeight); // upper right + glTexCoord2i(0, SDLDrawGenFontTextureHeight); glVertex2i(0, SDLDrawGenFontTextureHeight); // upper left - glEnd(); + glEnd(); - glBlendFunc(GL_ONE, GL_ZERO); - glDisable(GL_ALPHA_TEST); - glEnable(GL_TEXTURE_2D); + glBlendFunc(GL_ONE, GL_ZERO); + glDisable(GL_ALPHA_TEST); + glEnable(GL_TEXTURE_2D); - glPopMatrix(); + glPopMatrix(); - glBindTexture(GL_TEXTURE_2D, sdl_opengl.texture); + glBindTexture(GL_TEXTURE_2D, sdl_opengl.texture); #endif - SDL_GL_SwapBuffers(); + SDL_GL_SwapBuffers(); if (!menu.hidecycles && !sdl.desktop.fullscreen) frames++; } diff --git a/src/output/output_tools.cpp b/src/output/output_tools.cpp index ed6725c2275..7598aed25d0 100644 --- a/src/output/output_tools.cpp +++ b/src/output/output_tools.cpp @@ -35,9 +35,18 @@ #include #include #include +#include + +#if C_METAL +void OUTPUT_Metal_Select(); +void metal_init(); +#endif #if C_DIRECT3D void d3d_init(void); +#if defined(C_SDL2) +void d3d11_init(void); +#endif #endif #if defined(USE_TTF) @@ -45,6 +54,11 @@ void resetFontSize(); #endif void res_init(void), RENDER_Reset(void), UpdateOverscanMenu(void), GFX_SetTitle(int32_t cycles, int frameskip, Bits timing, bool paused); +void OutputSettingMenuUpdate(void); + +#if defined(MACOSX) && defined(C_SDL2) && C_METAL +void OUTPUT_Metal_Shutdown(); +#endif extern int initgl, posx, posy; extern bool rtl, gbk, chinasea, window_was_maximized, dpi_aware_enable, isVirtualBox; @@ -169,7 +183,20 @@ void change_output(int output) { OUTPUT_GAMELINK_Select(); break; #endif - +#if C_DIRECT3D && defined(C_SDL2) + case 13: /* direct3d11 */ + LOG_MSG("change_output: DIRECT3D11"); + OUTPUT_DIRECT3D11_Select(); + d3d11_init(); + break; +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + case 14: /* Metal */ + LOG_MSG("change_output: Metal"); + OUTPUT_Metal_Select(); + metal_init(); + break; +#endif default: LOG_MSG("SDL: Unsupported output device %d, switching back to surface",output); OUTPUT_SURFACE_Select(); @@ -275,10 +302,11 @@ void change_output(int output) { GFX_LogSDLState(); UpdateWindowDimensions(); + OutputSettingMenuUpdate(); #ifdef C_SDL2 // UX: always center window after changing output - SDL_SetWindowPosition(sdl.window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); + // SDL_SetWindowPosition(sdl.window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); #endif } @@ -286,6 +314,9 @@ void OutputSettingMenuUpdate(void) { mainMenu.get_item("output_surface").check(sdl.desktop.want_type == SCREEN_SURFACE).refresh_item(mainMenu); #if C_DIRECT3D mainMenu.get_item("output_direct3d").check(sdl.desktop.want_type == SCREEN_DIRECT3D).refresh_item(mainMenu); +#if defined(C_SDL2) + mainMenu.get_item("output_direct3d11").check(sdl.desktop.want_type == SCREEN_DIRECT3D11).refresh_item(mainMenu); +#endif #endif #if C_OPENGL mainMenu.get_item("output_opengl").check(sdl.desktop.want_type == SCREEN_OPENGL && sdl_opengl.kind == GLBilinear).refresh_item(mainMenu); @@ -298,6 +329,9 @@ void OutputSettingMenuUpdate(void) { #if C_GAMELINK mainMenu.get_item("output_gamelink").check(sdl.desktop.want_type == SCREEN_GAMELINK).refresh_item(mainMenu); #endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + mainMenu.get_item("output_metal").check(sdl.desktop.want_type == SCREEN_METAL).refresh_item(mainMenu); +#endif } void SwitchFS(Bitu val) { @@ -423,6 +457,45 @@ bool toOutput(const char *what) { reset = true; #endif } +#if C_DIRECT3D && defined(C_SDL2) + else if(!strcmp(what, "direct3d11")) { + if(sdl.desktop.want_type == SCREEN_DIRECT3D11) + return false; + + if(window_was_maximized && !GFX_IsFullscreen()) { + change_output(13); +#if defined(WIN32) + ShowWindow(GetHWND(), SW_MAXIMIZE); +#endif + } + else { + change_output(13); + } + } +#endif +#if MACOSX && defined(C_SDL2) && C_METAL + else if(!strcmp(what, "metal")) { + if(sdl.desktop.type == SCREEN_METAL) + return false; + OUTPUT_Metal_Shutdown(); +#if defined(C_OPENGL) + change_output(3); +#endif + if(window_was_maximized && !GFX_IsFullscreen()) { + change_output(14); +#if defined(WIN32) + ShowWindow(GetHWND(), SW_MAXIMIZE); +#endif + } + else { + OUTPUT_Metal_Shutdown(); +#if defined(C_OPENGL) + change_output(3); +#endif + change_output(14); + } + } +#endif if (reset) RENDER_Reset(); OutputSettingMenuUpdate(); return true; diff --git a/src/output/output_ttf.cpp b/src/output/output_ttf.cpp index 4216b148e7c..7384c3e9ae7 100644 --- a/src/output/output_ttf.cpp +++ b/src/output/output_ttf.cpp @@ -121,6 +121,8 @@ static alt_rgb *rgbColors = (alt_rgb*)render.pal.rgb; static bool blinkstate = false; bool colorChanged = false, justChanged = false, staycolors = false, firstsize = true, ttfswitch = false, switch_output_from_ttf = false; bool init_once = false, init_twice = false; +extern bool finish_prepare; +bool is_ttfswitched_on=false; int menuwidth_atleast(int width), FileDirExistCP(const char *name), FileDirExistUTF8(std::string &localname, const char *name); void AdjustIMEFontSize(void),refreshExtChar(void), initcodepagefont(void), change_output(int output), drawmenu(Bitu val), KEYBOARD_Clear(void), RENDER_Reset(void), DOSBox_SetSysMenu(void), GetMaxWidthHeight(unsigned int *pmaxWidth, unsigned int *pmaxHeight), SetWindowTransparency(int trans), resetFontSize(void), RENDER_CallBack( GFX_CallBackFunctions_t function ); @@ -211,7 +213,7 @@ Bitu OUTPUT_TTF_SetSize() { GFX_SetResizeable(false); sdl.window = GFX_SetSDLSurfaceWindow(sdl.draw.width + sdl.clip.x, sdl.draw.height + sdl.clip.y); sdl.surface = sdl.window?SDL_GetWindowSurface(sdl.window):NULL; - if (firstsize && (posx < 0 || posy < 0) && !(posx == -2 && posy == -2) && text) { + if (/* firstsize && */ (posx < 0 || posy < 0) && !(posx == -2 && posy == -2) && text) { firstsize=false; if (sdl.displayNumber==0) SDL_SetWindowPosition(sdl.window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); else SDL_SetWindowPosition(sdl.window, bx, by); @@ -337,7 +339,7 @@ bool readTTF(const char *fName, bool bold, bool ital) { } if (!ttf_fh) { std::string config_path; - Cross::GetPlatformConfigDir(config_path); + config_path = Cross::GetPlatformConfigDir(); struct stat info; if (!stat(config_path.c_str(), &info) && (info.st_mode & S_IFDIR)) { strcpy(ttfPath, config_path.c_str()); @@ -353,7 +355,7 @@ bool readTTF(const char *fName, bool bold, bool ital) { } if (!ttf_fh) { std::string res_path; - Cross::GetPlatformResDir(res_path); + res_path = Cross::GetPlatformResDir(); struct stat info; if (!stat(res_path.c_str(), &info) && (info.st_mode & S_IFDIR)) { strcpy(ttfPath, res_path.c_str()); @@ -494,69 +496,75 @@ void CheckTTFLimit() { } int setTTFMap(bool changecp) { - char text[2]; - uint16_t uname[4], wcTest[256]; - int cp = dos.loaded_codepage; - for (int i = 0; i < 256; i++) { - text[0]=i; - text[1]=0; - uname[0]=0; - uname[1]=0; - if (cp == 932 && (halfwidthkana || IS_JEGA_ARCH)) forceswk=true; - if (CheckDBCSCP(cp)) dos.loaded_codepage = 437; - if (CodePageGuestToHostUTF16(uname,text)) { - wcTest[i] = uname[1]==0?uname[0]:i; - if (cp == 932 && lowboxdrawmap.find(i)!=lowboxdrawmap.end() && TTF_GlyphIsProvided(ttf.SDL_font, wcTest[i])) - cpMap[i] = wcTest[i]; - } - forceswk=false; - if (CheckDBCSCP(cp)) dos.loaded_codepage = cp; - } - uint16_t unimap; - int notMapped = 0; - for (int y = ((cpMap[1]!=1&&cpMap[1]!=0x263A)||cp==867||(customcp&&(dos.loaded_codepage==customcp||changecp))||(altcp&&(dos.loaded_codepage==altcp||changecp))?0:8); y < 16; y++) - for (int x = 0; x < 16; x++) { - if (y<8 && (wcTest[y*16+x] == y*16+x || wcTest[y*16+x] == cp437_to_unicode[y*16+x])) unimap = cpMap_copy[y*16+x]; - else unimap = wcTest[y*16+x]; - if (!TTF_GlyphIsProvided(ttf.SDL_font, unimap)) { - cpMap[y*16+x] = 0; - notMapped++; - LOG_MSG("Unmapped character: %3d - %4x", y*16+x, unimap); - } else - cpMap[y*16+x] = unimap; - } - if (eurAscii != -1 && TTF_GlyphIsProvided(ttf.SDL_font, 0x20ac)) - cpMap[eurAscii] = 0x20ac; - return notMapped; + char text[2]; + uint16_t uname[4], wcTest[256]; + int cp = dos.loaded_codepage; + + // BUGFIX: If not started with output=ttf, then ttf.SDL_font == NULL and this code will cause a segfault. + if (ttf.SDL_font == NULL) return 256; + + for (int i = 0; i < 256; i++) { + text[0]=i; + text[1]=0; + uname[0]=0; + uname[1]=0; + if (cp == 932 && (halfwidthkana || IS_JEGA_ARCH)) forceswk=true; + if (CheckDBCSCP(cp)) dos.loaded_codepage = 437; + if (CodePageGuestToHostUTF16(uname,text)) { + wcTest[i] = uname[1]==0?uname[0]:i; + if (cp == 932 && lowboxdrawmap.find(i)!=lowboxdrawmap.end() && TTF_GlyphIsProvided(ttf.SDL_font, wcTest[i])) + cpMap[i] = wcTest[i]; + } + forceswk=false; + if (CheckDBCSCP(cp)) dos.loaded_codepage = cp; + } + uint16_t unimap; + int notMapped = 0; + for (int y = ((cpMap[1]!=1&&cpMap[1]!=0x263A)||cp==867||(customcp&&(dos.loaded_codepage==customcp||changecp))||(altcp&&(dos.loaded_codepage==altcp||changecp))?0:8); y < 16; y++) + for (int x = 0; x < 16; x++) { + if (y<8 && (wcTest[y*16+x] == y*16+x || wcTest[y*16+x] == cp437_to_unicode[y*16+x])) unimap = cpMap_copy[y*16+x]; + else unimap = wcTest[y*16+x]; + if (!TTF_GlyphIsProvided(ttf.SDL_font, unimap)) { + cpMap[y*16+x] = 0; + notMapped++; + LOG_MSG("Unmapped character: %3d - %4x", y*16+x, unimap); + } else + cpMap[y*16+x] = unimap; + } + if (eurAscii != -1 && TTF_GlyphIsProvided(ttf.SDL_font, 0x20ac)) + cpMap[eurAscii] = 0x20ac; + return notMapped; } int setTTFCodePage() { - if (!copied) { - memcpy(cpMap_copy,cpMap,sizeof(cpMap[0])*256); - copied=true; - } - int cp = dos.loaded_codepage; - if (IS_PC98_ARCH) { - static_assert(sizeof(cpMap[0])*256 >= sizeof(cpMap_PC98), "sizeof err 1"); - static_assert(sizeof(cpMap[0]) == sizeof(cpMap_PC98[0]), "sizeof err 2"); - memcpy(cpMap,cpMap_PC98,sizeof(cpMap[0])*256); - return 0; - } + if (!copied) { + memcpy(cpMap_copy,cpMap,sizeof(cpMap[0])*256); + copied=true; + } + int cp = dos.loaded_codepage; + if (IS_PC98_ARCH) { + static_assert(sizeof(cpMap[0])*256 >= sizeof(cpMap_PC98), "sizeof err 1"); + static_assert(sizeof(cpMap[0]) == sizeof(cpMap_PC98[0]), "sizeof err 2"); + memcpy(cpMap,cpMap_PC98,sizeof(cpMap[0])*256); + return 0; + } - if (cp) { - LOG_MSG("Loaded system codepage: %d\n", cp); - int notMapped = setTTFMap(true); - if (strcmp(RunningProgram, "LOADLIN") && !dos_kernel_disabled) - initcodepagefont(); + if (cp) { + LOG_MSG("Loaded system codepage: %d\n", cp); + int notMapped = setTTFMap(true); +#if !defined(OSFREE) + if (strcmp(RunningProgram, "LOADLIN") && !dos_kernel_disabled) + initcodepagefont(); +#endif #if defined(WIN32) && !defined(HX_DOS) - DOSBox_SetSysMenu(); + DOSBox_SetSysMenu(); #endif - if(IS_JEGA_ARCH) memcpy(cpMap,cpMap_AX,sizeof(cpMap[0])*32); - if (cp == 932 && halfwidthkana) resetFontSize(); - refreshExtChar(); - return notMapped; - } else - return -1; + if(IS_JEGA_ARCH) memcpy(cpMap,cpMap_AX,sizeof(cpMap[0])*32); + if (cp == 932 && halfwidthkana) resetFontSize(); + refreshExtChar(); + return notMapped; + } else + return -1; } void GFX_SelectFontByPoints(int ptsize) { @@ -570,27 +578,27 @@ void GFX_SelectFontByPoints(int ptsize) { if (ttf.SDL_fontbi) TTF_CloseFont(ttf.SDL_fontbi); SDL_RWops *rwfont = SDL_RWFromConstMem(ttfFont, (int)ttfSize); ttf.SDL_font = TTF_OpenFontRW(rwfont, 1, ptsize); - if (ttfSizeb>0) { - SDL_RWops *rwfont = SDL_RWFromConstMem(ttfFontb, (int)ttfSizeb); - ttf.SDL_fontb = TTF_OpenFontRW(rwfont, 1, ptsize); - } else - ttf.SDL_fontb = NULL; - if (ttfSizei>0) { - SDL_RWops *rwfont = SDL_RWFromConstMem(ttfFonti, (int)ttfSizei); - ttf.SDL_fonti = TTF_OpenFontRW(rwfont, 1, ptsize); - } else - ttf.SDL_fonti = NULL; - if (ttfSizebi>0) { - SDL_RWops *rwfont = SDL_RWFromConstMem(ttfFontbi, (int)ttfSizebi); - ttf.SDL_fontbi = TTF_OpenFontRW(rwfont, 1, ptsize); - } else - ttf.SDL_fontbi = NULL; - ttf.pointsize = ptsize; + if (ttfSizeb>0) { + SDL_RWops *rwfont = SDL_RWFromConstMem(ttfFontb, (int)ttfSizeb); + ttf.SDL_fontb = TTF_OpenFontRW(rwfont, 1, ptsize); + } else + ttf.SDL_fontb = NULL; + if (ttfSizei>0) { + SDL_RWops *rwfont = SDL_RWFromConstMem(ttfFonti, (int)ttfSizei); + ttf.SDL_fonti = TTF_OpenFontRW(rwfont, 1, ptsize); + } else + ttf.SDL_fonti = NULL; + if (ttfSizebi>0) { + SDL_RWops *rwfont = SDL_RWFromConstMem(ttfFontbi, (int)ttfSizebi); + ttf.SDL_fontbi = TTF_OpenFontRW(rwfont, 1, ptsize); + } else + ttf.SDL_fontbi = NULL; + ttf.pointsize = ptsize; TTF_GlyphMetrics(ttf.SDL_font, 65, NULL, NULL, NULL, NULL, &ttf.width); ttf.height = TTF_FontAscent(ttf.SDL_font)-TTF_FontDescent(ttf.SDL_font); if (ttf.fullScrn) { - unsigned int maxWidth, maxHeight; - GetMaxWidthHeight(&maxWidth, &maxHeight); + unsigned int maxWidth, maxHeight; + GetMaxWidthHeight(&maxWidth, &maxHeight); ttf.offX = (maxWidth-ttf.width*ttf.cols)/2; ttf.offY = (maxHeight-ttf.height*ttf.lins)/2; } @@ -819,9 +827,18 @@ void OUTPUT_TTF_Select(int fsize) { } else ttf.fullScrn = false; + // FIXME: TTF output makes the window non-resizeable, which is a problem, because + // this code picks a font point size designed to fill as much screen as possible! + // Until resizing is an option, limit the window to 2/3 of each dimension. --J.C. + unsigned int maxWidth, maxHeight; GetMaxWidthHeight(&maxWidth, &maxHeight); + // Limit dimenions + if(!ttf.fullScrn) { + maxWidth = (maxWidth * 2) / 3; + maxHeight = (maxHeight * 2) / 3; + } #if DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW /* SDL drawn menus */ maxHeight -= mainMenu.menuBarHeightBase * 2; #endif @@ -832,7 +849,7 @@ void OUTPUT_TTF_Select(int fsize) { maxHeight -= GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYBORDER)*2; } #endif - int curSize = fontSize>=MIN_PTSIZE?fontSize:30; // no clear idea what would be a good starting value + int curSize = fontSize>=MIN_PTSIZE?fontSize:12; int lastGood = -1; int trapLoop = 0; @@ -859,7 +876,7 @@ void OUTPUT_TTF_Select(int fsize) { GFX_SelectFontByPoints(curSize); #if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU if (!ttf.fullScrn && menu_gui && menu.toggle && menuwidth_atleast(ttf.cols*ttf.width+ttf.offX*2+GetSystemMetrics(SM_CXBORDER)*2)>0) { - if (ttf.cols*ttf.width > maxWidth || ttf.lins*ttf.height > maxHeight) E_Exit("Cannot accommodate a window for %dx%d", ttf.lins, ttf.cols); + if (ttf.cols*ttf.width > maxWidth || ttf.lins*ttf.height > maxHeight) E_Exit("Cannot accommodate a window for %dx%d", ttf.cols, ttf.lins); curSize++; goto resize1; } @@ -878,7 +895,7 @@ void OUTPUT_TTF_Select(int fsize) { GFX_SelectFontByPoints(curSize); goto resize2; } - E_Exit("Cannot accommodate a window for %dx%d", ttf.lins, ttf.cols); + E_Exit("Cannot accommodate a window for %dx%d", ttf.cols, ttf.lins); } if (ttf.SDL_font && ttf.width) { int widthb, widthm, widthx, width0, width1, width9; @@ -1343,7 +1360,7 @@ void TTF_DecreaseSize(bool pressed) { void DBCSSBCS_mapper_shortcut(bool pressed) { if (!pressed) return; if (!isDBCSCP()) { - systemmessagebox("Warning", "This function is only available for the Chinese/Japanese/Korean code pages.", "ok","warning", 1); + systemmessagebox("Warning", MSG_Get("TTF_DBCS_ONLY"), "ok","warning", 1); return; } dbcs_sbcs=!dbcs_sbcs; @@ -1355,7 +1372,7 @@ void DBCSSBCS_mapper_shortcut(bool pressed) { void AutoBoxDraw_mapper_shortcut(bool pressed) { if (!pressed) return; if (!isDBCSCP()) { - systemmessagebox("Warning", "This function is only available for the Chinese/Japanese/Korean code pages.", "ok","warning", 1); + systemmessagebox("Warning", MSG_Get("TTF_DBCS_ONLY"), "ok","warning", 1); return; } autoboxdraw=!autoboxdraw; @@ -1459,6 +1476,7 @@ void ttf_switch_on(bool ss=true) { #endif if (!IS_PC98_ARCH && vga.draw.address_add != ttf.cols * 2) checkcol = ss?2:1; } + is_ttfswitched_on = true; } void ttf_switch_off(bool ss=true) { @@ -1511,5 +1529,6 @@ void ttf_switch_off(bool ss=true) { #endif if (Mouse_IsLocked()) GFX_CaptureMouse(true); } + is_ttfswitched_on = false; } #endif diff --git a/src/shell/shell.cpp b/src/shell/shell.cpp index 0cc4d3c485a..14c6ffe40d2 100644 --- a/src/shell/shell.cpp +++ b/src/shell/shell.cpp @@ -51,7 +51,16 @@ #include "build_timestamp.h" #include "version_string.h" +/* if any step requires bringing up the command prompt for the CONFIG shell, set to true */ +bool config_shell_run = false; +bool config_shell_prompt = false; +bool config_shell_prompt_start = false; // at start before running device drivers +bool config_shell_prompt_end = false; // at end after running device drivers + +bool shown_welcome = false; + extern bool shell_keyboard_flush; +extern bool dos_kernel_shutdown_mcb; extern bool dos_shell_running_program, mountwarning, winautorun; extern bool startcmd, startwait, startquiet, internal_program; extern bool addovl, addipx, addne2k, enableime, showdbcs; @@ -60,9 +69,12 @@ extern const char* RunningProgram; extern int enablelfn, msgcodepage, lastmsgcp; extern uint16_t countryNo; extern unsigned int dosbox_shell_env_size; +extern bool is_ttfswitched_on; bool outcon = true, usecon = true, pipetmpdev = true; bool shellrun = false, prepared = false, testerr = false; +char char_yes = 'y', char_no = 'n'; // YES NO CHARS in lower case + uint16_t shell_psp = 0; Bitu call_int2e = 0; Bitu call_int23 = 0; @@ -75,7 +87,10 @@ int Reflect_Menu(void); void SetIMPosition(void); void SetKEYBCP(); void initRand(); +#if !defined(OSFREE) void initcodepagefont(void); +void get_yesno_chars(void); +#endif void runMount(const char *str); void ResolvePath(std::string& in); void DOS_SetCountry(uint16_t countryNo); @@ -85,6 +100,13 @@ void GFX_SetTitle(int32_t cycles, int frameskip, Bits timing, bool paused); bool isDBCSCP(), InitCodePage(), isKanji1(uint8_t chr), shiftjis_lead_byte(int c), sdl_wait_on_error(), CheckDBCSCP(int32_t codepage), TTF_using(void); void makestdcp950table(), makeseacp951table(); +#if defined(USE_TTF) +void ttf_switch_on(bool ss = true), ttf_switch_off(bool ss = true); +void ttf_setlines(int cols, int lins); +void ttf_reset(); +#endif +extern VideoModeBlock* CurMode; + Bitu call_shellstop = 0; /* Larger scope so shell_del autoexec can use it to * remove things from the environment */ @@ -94,14 +116,41 @@ static Bitu shellstop_handler(void) { return CBRET_STOP; } +void get_yesno_chars(void) { + const char* yesno = MSG_Get("INT21_6523_YESNO_CHARS"); + char_yes = 'y', char_no = 'n'; + if(yesno && yesno[0] && yesno[1]) { + unsigned char y = static_cast(yesno[0]); + unsigned char n = static_cast(yesno[1]); + + if(y != n && isprint(static_cast(y)) + && isprint(static_cast(n)) && + y < 0x80 && n < 0x80) { + if(y >= 'A' && y <= 'Z') y = y - 'A' + 'a'; + if(n >= 'A' && n <= 'Z') n = n - 'A' + 'a'; + char_yes = static_cast(y); + char_no = static_cast(n); + } + else { + char_yes = 'y'; + char_no = 'n'; + } + } +} + void SHELL_ProgramStart(Program * * make) { *make = new DOS_Shell; } -//Repeat it with the correct type, could do it in the function below, but this way it should be +//Repeat it with the correct type, could do it in the function below, but this way it should be //clear that if the above function is changed, this function might need a change as well. static void SHELL_ProgramStart_First_shell(DOS_Shell * * make) { *make = new DOS_Shell; } +#if !defined(OSFREE) +static void SHELL_ProgramStart_Config_shell(DOS_Shell * * make) { + *make = new DOS_ConfigShell; +} +#endif bool i4dos=false; char i4dos_data[CONFIG_SIZE] = { 0 }; @@ -112,7 +161,9 @@ typedef std::list::iterator auto_it; void VFILE_Remove(const char *name,const char *dir=""); void runRescan(const char *str), DOSBox_SetSysMenu(void); +#if !defined(OSFREE) int toSetCodePage(DOS_Shell *shell, int newCP, int opt); +#endif #if defined(WIN32) void MountAllDrives(bool quiet) { @@ -243,6 +294,7 @@ void AutoexecObject::Uninstall() { char* after_set = buf2 + 4;//move to variable that is being set char* test2 = strpbrk(after_set,"="); if (!test2) { + it++; delete [] buf2; continue; } @@ -271,6 +323,27 @@ AutoexecObject::~AutoexecObject(){ DOS_Shell::~DOS_Shell() { if (bf != NULL) delete bf; /* free batch file */ + + /* shell termination is not handled like a normal program. + * memory allocated by the shell is not automatically freed on termination. + * files are not automatically closed */ + if (psp->GetSegment()) { + /* BOOT will set the first MCB chain to zero to signal that low memory has been overwritten + * by the guest OS boot code */ + if (!dos_kernel_shutdown_mcb) { + DOS_FreeProcessMemory(psp->GetSegment()); + + /* NTS: DOS_PSP would ideally allow JFT handle operations regardless of whatever the + * current PSP segment is, but that's not how the code is written */ + const uint16_t o_psp = dos.psp(); + dos.psp(psp->GetSegment()); + psp->CloseFiles(); + dos.psp(o_psp); + } + } + + if (psp->GetSegment() == shell_psp) + shell_psp = 0; } DOS_Shell::DOS_Shell():Program(){ @@ -378,7 +451,7 @@ Bitu DOS_Shell::GetRedirection(char *s, char **ifn, char **ofn, char **toc,bool } *lw=0; return num; -} +} class device_TMP : public DOS_Device { public: @@ -425,7 +498,7 @@ class device_TMP : public DOS_Device { void DOS_Shell::ParseLine(char * line) { LOG(LOG_EXEC,LOG_DEBUG)("Parsing command line: %s",line); /* Check for a leading @ */ - if (line[0] == '@') line[0] = ' '; + if (line[0] == '@') line[0] = ' '; line = trim(line); /* Do redirection and pipe checks */ @@ -439,11 +512,20 @@ void DOS_Shell::ParseLine(char * line) { bool append; bool normalstdin = false; /* whether stdin/out are open on start. */ bool normalstdout = false; /* Bug: Assumed is they are "con" */ - - GetRedirection(line, &in, &out, &toc, &append); + + GetRedirection(line, &in, &out, &toc, &append); + + if(toc && *trim(toc) == '\0') { + SyntaxError(); /* No command to pass output */ + if(in) free(in); + if(out) free(out); + if(toc) free(toc); + return; + } + if (in || out || toc) { - normalstdin = (psp->GetFileHandle(0) != 0xff); - normalstdout = (psp->GetFileHandle(1) != 0xff); + normalstdin = (psp->GetFileHandle(0) != 0xff); + normalstdout = (psp->GetFileHandle(1) != 0xff); } if (in) { if(DOS_OpenFile(in,OPEN_READ,&dummy)) { //Test if file exists @@ -453,27 +535,54 @@ void DOS_Shell::ParseLine(char * line) { DOS_OpenFile(in,OPEN_READ,&dummy); //Open new stdin } else { WriteOut(!*in?"File open error\n":(dos.errorcode==DOSERR_ACCESS_DENIED?MSG_Get("SHELL_CMD_FILE_ACCESS_DENIED"):"File open error - %s\n"), in); - in = nullptr; + if(in) free(in); + if(out) free(out); + if(toc) free(toc); return; } } bool fail=false; char pipetmp[270]; uint16_t fattr; - if (toc) { + if(toc) { + // Initialize random number generator initRand(); - std::string line; - if (!GetEnvStr("TEMP",line)&&!GetEnvStr("TMP",line)) - sprintf(pipetmp, "pipe%d.tmp", rand()%10000); + + // Try to get TEMP or TMP environment variable + std::string tempPath; + if(!GetEnvStr("TEMP", tempPath) && !GetEnvStr("TMP", tempPath)) { + // Fallback: use current drive root as fallback directory (e.g., "C:\") + char currentDrive = DOS_GetDefaultDrive() + 'A'; + tempPath = std::string(1, currentDrive) + ":\\"; + } else { - std::string::size_type idx = line.find('='); - std::string temp=line.substr(idx +1 , std::string::npos); - if (DOS_GetFileAttr(temp.c_str(), &fattr) && fattr&DOS_ATTR_DIRECTORY) - sprintf(pipetmp, "%s\\pipe%d.tmp", temp.c_str(), rand()%10000); - else - sprintf(pipetmp, "pipe%d.tmp", rand()%10000); + // Extract directory from environmental variable + std::string::size_type idx = tempPath.find('='); + if(idx != std::string::npos) + tempPath = tempPath.substr(idx + 1); } + + // Ensure the path ends with backslash + if(!tempPath.empty() && tempPath.back() != '\\') { + tempPath += '\\'; + } + + // Check if directory is valid + uint16_t fattr; + if(!(DOS_GetFileAttr(tempPath.c_str(), &fattr) && (fattr & DOS_ATTR_DIRECTORY))) { + // Fallback to current drive root again if directory is invalid + char currentDrive = DOS_GetDefaultDrive() + 'A'; + tempPath = std::string(1, currentDrive) + ":\\"; + } + + // Assign to tempEnv after fixing the path + const char* tempEnv = tempPath.c_str(); + + // Generate unique pipe file path + int pipeid = rand() % 10000; + snprintf(pipetmp, sizeof(pipetmp), "%spipe%d.tmp", tempEnv, pipeid); } + DOS_Device *tmpdev = NULL; if (out||toc) { if (out&&toc) @@ -488,7 +597,7 @@ void DOS_Shell::ParseLine(char * line) { DOS_SetError(DOSERR_ACCESS_DENIED); status = false; } else if( (status = DOS_OpenFile(out,OPEN_READWRITE,&dummy)) ) { - DOS_SeekFile(1,&bigdummy,DOS_SEEK_END); + DOS_SeekFile(1,&bigdummy,DOS_SEEK_END); } else { status = DOS_CreateFile(out,DOS_ATTR_ARCHIVE,&dummy); //Create if not exists. } @@ -496,40 +605,50 @@ void DOS_Shell::ParseLine(char * line) { DOS_SetError(DOSERR_ACCESS_DENIED); status = false; } else { - bool device=DOS_FindDevice(pipetmp)!=DOS_DEVICES; + bool device=DOS_FindDevice(pipetmp)!=DOS_DEVICES; if (toc&&!device&&DOS_FindFirst(pipetmp, ~DOS_ATTR_VOLUME)&&!DOS_UnlinkFile(pipetmp)) fail=true; status = device?false:DOS_OpenFileExtended(toc&&!fail?pipetmp:out,OPEN_READWRITE,DOS_ATTR_ARCHIVE,0x12,&dummy,&dummy2); - if (toc&&(fail||!status)&&!strchr(pipetmp,'\\')) { - Overlay_Drive *da = Drives[0] ? (Overlay_Drive *)Drives[0] : NULL, *dc = Drives[2] ? (Overlay_Drive *)Drives[2] : NULL; - if ((Drives[0]&&!Drives[0]->readonly&&!(da&&da->ovlreadonly))||(Drives[2]&&!Drives[2]->readonly&&!(dc&&dc->ovlreadonly))) { - int len = (int)strlen(pipetmp); - if (len > 266) { - len = 266; - pipetmp[len] = 0; - } - for (int i = len; i >= 0; i--) - pipetmp[i + 3] = pipetmp[i]; - pipetmp[0] = Drives[2]?'c':'a'; - pipetmp[1] = ':'; - pipetmp[2] = '\\'; - fail=false; - } else if (!tmpdev && pipetmpdev) { - char *p=strchr(pipetmp, '.'); - if (p) *p = 0; - tmpdev = new device_TMP(pipetmp); - if (p) *p = '.'; - if (tmpdev) { - DOS_AddDevice(tmpdev); - fail = false; - } - } else - fail=true; - if (!tmpdev && DOS_FindFirst(pipetmp, ~DOS_ATTR_VOLUME) && !DOS_UnlinkFile(pipetmp)) - fail=true; - else - status = DOS_OpenFileExtended(pipetmp, OPEN_READWRITE, DOS_ATTR_ARCHIVE, 0x12, &dummy, &dummy2); - } + bool pipetmp_is_zdrive = strncasecmp(pipetmp, "Z:\\", 3) == 0; + if (toc&&(fail||!status)&&(!strchr(pipetmp,'\\')|| pipetmp_is_zdrive)) { + Overlay_Drive *da = Drives[0] ? (Overlay_Drive *)Drives[0] : NULL, *dc = Drives[2] ? (Overlay_Drive *)Drives[2] : NULL; + if (!pipetmp_is_zdrive && ((Drives[0]&&!Drives[0]->readonly&&!(da&&da->ovlreadonly))||(Drives[2]&&!Drives[2]->readonly&&!(dc&&dc->ovlreadonly)))) { + int len = (int)strlen(pipetmp); + if(len > 266) { + len = 266; + pipetmp[len] = 0; + } + for(int i = len; i >= 0; i--) + pipetmp[i + 3] = pipetmp[i]; + pipetmp[0] = Drives[2] ? 'c' : 'a'; + pipetmp[1] = ':'; + pipetmp[2] = '\\'; + fail = false; + } else if (!tmpdev && pipetmpdev) { + char* filename_only = strrchr(pipetmp, '\\'); + if(!filename_only) filename_only = pipetmp; + else filename_only++; + char tmpname[270]; + strncpy(tmpname, filename_only, sizeof(tmpname)); + tmpname[sizeof(tmpname) - 1] = 0; + + char* p = strchr(tmpname, '.'); + if(p) *p = 0; + + tmpdev = new device_TMP(tmpname); + if(p) *p = '.'; + + if(tmpdev) { + DOS_AddDevice(tmpdev); + fail = false; + } + } else + fail=true; + if (!tmpdev && DOS_FindFirst(pipetmp, ~DOS_ATTR_VOLUME) && !DOS_UnlinkFile(pipetmp)) + fail=true; + else + status = DOS_OpenFileExtended(pipetmp, OPEN_READWRITE, DOS_ATTR_ARCHIVE, 0x12, &dummy, &dummy2); + } } if(!status && normalstdout) { DOS_OpenFile("con", OPEN_READWRITE, &dummy); // Read only file, open con again @@ -571,8 +690,19 @@ void DOS_Shell::ParseLine(char * line) { if (out) free(out); } if (toc) { + if(tmpdev != nullptr) { + std::string path(pipetmp); + size_t lastSlash = path.find_last_of("\\/"); + if(lastSlash != std::string::npos) + path = path.substr(lastSlash + 1); + size_t dot = path.find_last_of('.'); + if(dot != std::string::npos) + path = path.substr(0, dot); + strncpy(pipetmp, path.c_str(), sizeof(pipetmp) - 1); + pipetmp[sizeof(pipetmp) - 1] = '\0'; + } if (!fail&&DOS_OpenFile(pipetmp, OPEN_READ, &dummy)) // Test if file can be opened for reading - { + { DOS_CloseFile(dummy); if (normalstdin) DOS_CloseFile(0); // Close stdin @@ -581,7 +711,7 @@ void DOS_Shell::ParseLine(char * line) { DOS_CloseFile(0); if (normalstdin) DOS_OpenFile("con", OPEN_READWRITE, &dummy); - } + } else WriteOut("\nFailed to create/open a temporary file for piping. Check the %%TEMP%% variable.\n"); free(toc); @@ -730,8 +860,9 @@ const char *ParseMsg(const char *msg) { } } -static char const * const path_string="PATH=Z:\\;Z:\\SYSTEM;Z:\\BIN;Z:\\DOS;Z:\\4DOS;Z:\\DEBUG;Z:\\TEXTUTIL"; +static char const * const path_string="PATH=Z:\\;Z:\\SYSTEM;Z:\\BIN;Z:\\DOS;Z:\\4DOS;Z:\\DEBUG;Z:\\TEXTUTIL;Z:\\PATCHING"; static char const * const comspec_string="COMSPEC=Z:\\COMMAND.COM"; +static char const * const prompt_string_config="PROMPT=CONFIG:$P$G"; static char const * const prompt_string="PROMPT=$P$G"; static char const * const full_name="Z:\\COMMAND.COM"; static char const * const init_line="/INIT AUTOEXEC.BAT"; @@ -820,73 +951,120 @@ void showWelcome(Program *shell) { } bool finish_prepare = false; +void change_output(int type); +bool setColors(const char* colorArray, int n); +extern bool switch_to_d3d11_on_startup; +extern bool switch_to_metal_on_startup; + void DOS_Shell::Prepare(void) { - if (this == first_shell) { - const char* layoutname = DOS_GetLoadedLayout(); - if(layoutname == NULL) { - int32_t cp = dos.loaded_codepage; - Bitu keyb_error = DOS_LoadKeyboardLayout("us", 437, "auto"); - toSetCodePage(NULL, cp, -1); - } - Section_prop *section = static_cast(control->GetSection("dosbox")); - if (section->Get_bool("startbanner")&&!control->opt_fastlaunch) - showWelcome(this); - else if ((CurMode->type==M_TEXT || IS_PC98_ARCH) && ANSI_SYS_installed()) - WriteOut("\033[2J"); + if (this == first_shell) { +#if C_DIRECT3D && C_SDL2 + if(switch_to_d3d11_on_startup){ + switch_to_d3d11_on_startup = false; + change_output(13); + } +#endif +#if defined(MACOSX) && defined(C_SDL2) && C_METAL + if(switch_to_metal_on_startup){ + switch_to_metal_on_startup = false; + change_output(14); + } +#endif +#if defined(USE_TTF) + if(CurMode->type == M_TEXT || (IS_PC98_ARCH && is_ttfswitched_on)) ttf_switch_on(true); // Initialization completed, M_TEXT modes can switch to TTF mode from now on. + if(ttf.inUse) { + int cols = static_cast(control->GetSection("ttf"))->Get_int("cols"); + int lins = static_cast(control->GetSection("ttf"))->Get_int("lins"); + if(cols || lins) ttf_setlines(cols, lins); + if(is_ttfswitched_on){ + const char* colors = static_cast(control->GetSection("ttf"))->Get_string("colors"); + if(*colors && !setColors(colors, -1)) { + LOG_MSG("Incorrect color scheme: %s", colors); + } + is_ttfswitched_on = false; + } + } +#endif +#if !defined(OSFREE) + get_yesno_chars(); + + const char* layoutname = DOS_GetLoadedLayout(); + if(layoutname == NULL && !IS_PC98_ARCH) {/*Keyboard layouts and CPI/CPX files have no meaning in PC-98 mode*/ + int32_t cp = dos.loaded_codepage; + DOS_LoadKeyboardLayout("us", 437, "auto"); + toSetCodePage(NULL, cp, -1); + } +#endif + Section_prop *section = static_cast(control->GetSection("dosbox")); + bool startbanner = section->Get_bool("startbanner"); + first_shell->perm = section->Get_bool("shell permanent"); +#if !defined(OSFREE) if (!countryNo) { -#if defined(WIN32) +# if defined(WIN32) char buffer[128]; -#endif - if (IS_PC98_ARCH || IS_JEGA_ARCH) - countryNo = 81; - else if (IS_DOSV) - countryNo = IS_PDOSV?86:(IS_TDOSV?886:(IS_KDOSV?82:81)); -#if defined(WIN32) +# endif + if (IS_PC98_ARCH || IS_JEGA_ARCH) + countryNo = 81; + else if (IS_DOSV) + countryNo = IS_PDOSV?86:(IS_TDOSV?886:(IS_KDOSV?82:81)); +# if defined(WIN32) else if (GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ICOUNTRY, buffer, 128)) { countryNo = uint16_t(atoi(buffer)); DOS_SetCountry(countryNo); } -#endif +# endif else { - const char *layout = DOS_GetLoadedLayout(); - if (layout == NULL) - countryNo = COUNTRYNO::United_States; - else if (country_code_map.find(layout) != country_code_map.end()) - countryNo = country_code_map.find(layout)->second; - else - countryNo = COUNTRYNO::United_States; - DOS_SetCountry(countryNo); + const char *layout = DOS_GetLoadedLayout(); + if (layout == NULL) + countryNo = COUNTRYNO::United_States; + else if (country_code_map.find(layout) != country_code_map.end()) + countryNo = country_code_map.find(layout)->second; + else + countryNo = COUNTRYNO::United_States; + DOS_SetCountry(countryNo); } } +#endif section = static_cast(control->GetSection("dos")); bool zdirpath = section->Get_bool("drive z expand path"); std::string layout = section->Get_string("keyboardlayout"); strcpy(config_data, ""); section = static_cast(control->GetSection("config")); +#if !defined(OSFREE) if ((section!=NULL&&!control->opt_noconfig)||control->opt_langcp) { char *countrystr = (char *)section->Get_string("country"), *r=strchr(countrystr, ','); int country = 0; - int32_t newCP = dos.loaded_codepage; - if((control->opt_langcp && msgcodepage > 0) || CheckDBCSCP(msgcodepage) || msgcodepage == dos.loaded_codepage) newCP = msgcodepage; - if ((r==NULL || !*(r+1)) && !control->opt_langcp) + int32_t newCP = dos.loaded_codepage; + if((control->opt_langcp && msgcodepage > 0) || CheckDBCSCP(msgcodepage) || msgcodepage == dos.loaded_codepage) newCP = msgcodepage; + if ((r==NULL || !*(r+1)) && !control->opt_langcp) country = atoi(trim(countrystr)); else if(!msgcodepage){ if (r!=NULL) *r=0; country = atoi(trim(countrystr)); newCP = r==NULL||IS_PC98_ARCH||IS_JEGA_ARCH||IS_DOSV?dos.loaded_codepage:atoi(trim(r+1)); if (r!=NULL) *r=','; - } - if (newCP != dos.loaded_codepage && (!TTF_using() || (TTF_using() && isSupportedCP(newCP)))) { - int missing = toSetCodePage(this, newCP, -1); - } - if (country>0&&!control->opt_noconfig) { + } + if (newCP != dos.loaded_codepage && (!TTF_using() || (TTF_using() && isSupportedCP(newCP)))) { + toSetCodePage(this, newCP, -1); + } + if (country>0&&!control->opt_noconfig) { countryNo = country; DOS_SetCountry(countryNo); } - if(!chinasea)makestdcp950table(); - if(chinasea) makeseacp951table(); - runRescan("-A -Q"); - const char * extra = section->data.c_str(); + if(!chinasea)makestdcp950table(); + if(chinasea) makeseacp951table(); + InitCodePage(); + if(startbanner && !control->opt_fastlaunch) { + if (!shown_welcome) { + //showWelcome(this); + DoCommand((char *)std::string("z:\\system\\intro welcome").c_str()); + shown_welcome = true; + } + } + else if((CurMode->type == M_TEXT || IS_PC98_ARCH) && ANSI_SYS_installed()) { + WriteOut("\033[2J"); + } + const char * extra = section->data.c_str(); if (extra&&!control->opt_securemode&&!control->SecureMode()&&!control->opt_noconfig) { std::string vstr; std::istringstream in(extra); @@ -942,17 +1120,27 @@ void DOS_Shell::Prepare(void) { } } } - std::string line; - GetEnvStr("PATH",line); +#else + WriteOut("\x1B[2J"); /* erase screen */ + WriteOut("\x1B[H"); /* home cursor */ +#endif + std::string line; + GetEnvStr("PATH",line); if (!strlen(config_data)) { strcat(config_data, "rem="); strcat(config_data, section->Get_string("rem")); strcat(config_data, "\r\n"); } - internal_program = true; +#if !defined(OSFREE) + if(dos.loaded_codepage == 932) toSetCodePage(this, 932, -1); // Workaround for corrupted box-drawing characters +#endif + runRescan("-A -Q"); + internal_program = true; VFILE_Register("AUTOEXEC.BAT",(uint8_t *)autoexec_data,(uint32_t)strlen(autoexec_data)); +#if !defined(OSFREE) VFILE_Register("CONFIG.SYS",(uint8_t *)config_data,(uint32_t)strlen(config_data)); - internal_program = false; +#endif + internal_program = false; #if defined(WIN32) if (!control->opt_securemode&&!control->SecureMode()) { @@ -975,21 +1163,68 @@ void DOS_Shell::Prepare(void) { } } } - internal_program = true; + internal_program = true; VFILE_Register("4DOS.INI",(uint8_t *)i4dos_data,(uint32_t)strlen(i4dos_data), "/4DOS/"); - internal_program = false; - //unsigned int cp=dos.loaded_codepage; - //if (!dos.loaded_codepage) InitCodePage(); - //initcodepagefont(); - //dos.loaded_codepage=cp; - finish_prepare = true; - - } + internal_program = false; + //unsigned int cp=dos.loaded_codepage; + //if (!dos.loaded_codepage) InitCodePage(); + //initcodepagefont(); + //dos.loaded_codepage=cp; + finish_prepare = true; + } #if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11 || defined(MACOSX)) && (defined(C_SDL2) || defined(SDL_DOSBOX_X_SPECIAL)) - if (enableime) SetIMPosition(); + if (enableime) SetIMPosition(); #endif } +#if defined(OSFREE) +bool DOS_Shell::OSFreeOperatingSystemNotFound(void) { + uint16_t n; + uint8_t c; + + WriteOut("\n"); + WriteOut("Operating System Not Found.\n\n"); + WriteOut("Press ENTER for more information, ESC to exit.\n"); + + do { + n=1;c=0; + if (!DOS_ReadFile(0/*STDIN*/,&c,&n)) break; + + if (c == 0x04/*CTRL+D secret drop to command line--though you're not going to find much!*/) return true; + if (c == 27/*ESC*/) return false; + if (c == 13/*ENTER*/) break; + } while(1); + + WriteOut("\n"); + WriteOut("This version was built without MS-DOS emulation.\n"); + WriteOut("\n"); + WriteOut("The full version may be unavailable for your use for legal reasons including\n"); + WriteOut("but not limited to OS level age verification requirements in your local\n"); + WriteOut("state, province, or general jurisdiction.\n"); + WriteOut("\n"); + WriteOut("To use this emulator, you will need to obtain and use a working MS-DOS boot\n"); + WriteOut("disk or bootable hard disk image. Then, modify your dosbox.conf to IMGMOUNT\n"); + WriteOut("and/or BOOT the image to run your DOS application. Please read documentation\n"); + WriteOut("for more information on how to boot disk images.\n"); + WriteOut("\n"); + WriteOut("Hit ENTER or ESC to close the emulator.\n"); + + do { + n=1;c=0; + if (!DOS_ReadFile(0/*STDIN*/,&c,&n)) break; + + if (c == 0x04/*CTRL+D secret drop to command line--though you're not going to find much!*/) return true; + if (c == 13/*ENTER*/ || c == 27/*ESC*/) break; + } while(1); + + return false; +} +#endif + +#if defined(OSFREE) +static bool once_block = false; +#endif + void DOS_Shell::Run(void) { shellrun=true; char input_line[CMD_MAXLINE] = {0}; @@ -1046,6 +1281,14 @@ void DOS_Shell::Run(void) { } else input_line[0]='\0'; } else { if (optInit && control->opt_exit) break; +#if defined(OSFREE) + if (!once_block) { + once_block = true; + LOG_MSG("DOS shell not available in OSFREE mode"); + if (!OSFreeOperatingSystemNotFound()) break; + } +#endif + if (echo) ShowPrompt(); InputCommand(input_line); if (echo && !input_eof) WriteOut("\n"); @@ -1167,7 +1410,7 @@ class AUTOEXEC:public Module_base { } /* if "echo off" move it to the front of autoexec.bat */ - if (echo_off) { + if (echo_off) { autoexec_echo.InstallBefore("@echo off"); if (*extra == '\r') extra++; //It can point to \0 if (*extra == '\n') extra++; //same @@ -1199,7 +1442,7 @@ class AUTOEXEC:public Module_base { bool command_found = false; while (control->cmdline->FindCommand(dummy++,line) && !command_found) { struct stat test; - if (line.length() > CROSS_LEN) continue; + if (line.length() > CROSS_LEN) continue; strcpy(buffer,line.c_str()); if (stat(buffer,&test)) { strcpy(buffer, "."); @@ -1216,7 +1459,7 @@ class AUTOEXEC:public Module_base { command_found = true; } else { char* name = strrchr(buffer,CROSS_FILESPLIT); - if (!name) { //Only a filename + if (!name) { //Only a filename line = buffer; strcpy(buffer, "."); // if (getcwd(buffer,CROSS_LEN) == NULL) continue; @@ -1260,19 +1503,21 @@ class AUTOEXEC:public Module_base { } /* Combining -securemode, noautoexec and no parameters leaves you with a lovely Z:\. */ - if ( !command_found ) { + if ( !command_found ) { if ( secure ) autoexec[12].Install("z:\\system\\config.com -securemode"); } #else if (secure) autoexec[i++].Install("z:\\system\\config.com -securemode"); #endif -#if defined(WIN32) - if(TTF_using()) { +#if 0 +//#if defined(WIN32) && defined(USE_TTF) /* Workaround for TTF screen initialization */ + if(static_cast(control->GetSection("sdl"))->Get_string("output")=="ttf") { autoexec[i++].Install("@config -set output=surface"); autoexec[i++].Install("@config -set output=ttf"); } -#endif - if (addexit) autoexec[i++].Install("exit"); +//#endif /* (WIN32) && (USE_TTF) */ +#endif // 0 + if (addexit) autoexec[i++].Install("exit"); assert(i <= 17); /* FIXME: autoexec[] should not be fixed size */ @@ -1284,25 +1529,34 @@ class AUTOEXEC:public Module_base { }; static AUTOEXEC* test = NULL; - + static void AUTOEXEC_ShutDown(Section * sec) { - (void)sec;//UNUSED + (void)sec;//UNUSED if (test != NULL) { delete test; test = NULL; } - if (first_shell != NULL) { + if (first_shell != NULL) { delete first_shell; first_shell = nullptr;//Make clear that it shouldn't be used anymore - } - if (call_shellstop != 0) { - CALLBACK_DeAllocate(call_shellstop); - call_shellstop = 0; - } + } + if (call_shellstop != 0) { + CALLBACK_DeAllocate(call_shellstop); + call_shellstop = 0; + } + if (call_int2e != 0) { + CALLBACK_DeAllocate(call_int2e); + call_int2e = 0; + } + if (call_int23 != 0) { + CALLBACK_DeAllocate(call_int23); + call_int23 = 0; + } + shown_welcome = false; } void AUTOEXEC_Startup(Section *sec) { - (void)sec;//UNUSED + (void)sec;//UNUSED if (test == NULL) { LOG(LOG_MISC,LOG_DEBUG)("Allocating AUTOEXEC.BAT emulation"); test = new AUTOEXEC(control->GetSection("autoexec")); @@ -1360,14 +1614,7 @@ static Bitu INT2E_Handler(void) { return CBRET_NONE; } -/* TODO: Why is all this DOS kernel and VFILE registration here in SHELL_Init()? - * That's like claiming that DOS memory and device initialization happens from COMMAND.COM! - * We need to move the DOS kernel initialization into another function, and the VFILE - * registration to another function, and then message initialization to another function, - * and then those functions need to be called before SHELL_Init() -J.C. */ -void SHELL_Init() { - LOG(LOG_MISC,LOG_DEBUG)("Initializing DOS shell"); - +void SHELL_MessagesInit() { /* Add messages */ MSG_Add("SHELL_CMD_TREE_ERROR", "No subdirectories exist\n"); MSG_Add("SHELL_CMD_VOL_TREE", "Directory PATH listing for Volume %s\n"); @@ -1396,29 +1643,29 @@ void SHELL_Init() { MSG_Add("SHELL_CMD_DATE_NOW","Current date: "); MSG_Add("SHELL_CMD_DATE_SETHLP","Type 'date %s' to change.\n"); MSG_Add("SHELL_CMD_DATE_HELP_LONG","DATE [[/T] [/H] [/S] | date]\n"\ - " date: New date to set\n"\ - " /S: Permanently use host time and date as DOS time\n"\ - " /F: Switch back to DOSBox-X internal time (opposite of /S)\n"\ - " /T: Only display date\n"\ - " /H: Synchronize with host\n"); + " date: New date to set\n"\ + " /S: Permanently use host time and date as DOS time\n"\ + " /F: Switch back to DOSBox-X internal time (opposite of /S)\n"\ + " /T: Only display date\n"\ + " /H: Synchronize with host\n"); MSG_Add("SHELL_CMD_TIME_HELP","Displays or changes the internal time.\n"); MSG_Add("SHELL_CMD_TIME_ERROR","The specified time is not correct.\n"); MSG_Add("SHELL_CMD_TIME_NOW","Current time: "); MSG_Add("SHELL_CMD_TIME_SETHLP","Type 'time %s' to change.\n"); MSG_Add("SHELL_CMD_TIME_HELP_LONG","TIME [[/T] [/H] | time]\n"\ - " time: New time to set\n"\ - " /T: Display simple time\n"\ - " /H: Synchronize with host\n"); + " time: New time to set\n"\ + " /T: Display simple time\n"\ + " /H: Synchronize with host\n"); MSG_Add("SHELL_CMD_MKDIR_EXIST","Directory already exists - %s\n"); MSG_Add("SHELL_CMD_MKDIR_ERROR","Unable to create directory - %s\n"); MSG_Add("SHELL_CMD_RMDIR_ERROR","Invalid path, not directory, or directory not empty - %s\n"); - MSG_Add("SHELL_CMD_RMDIR_FULLTREE_CONFIRM", "Delete directory \"%s\" and all its subdirectories? (Y/N)?"); - MSG_Add("SHELL_CMD_RMDIR_SINGLE_CONFIRM", "Delete file \"%s\" (Y/N)?"); - MSG_Add("SHELL_CMD_RENAME_ERROR","Unable to rename - %s\n"); + MSG_Add("SHELL_CMD_RMDIR_FULLTREE_CONFIRM", "Delete directory \"%s\" and all its subdirectories? (Y/N)?"); + MSG_Add("SHELL_CMD_RMDIR_SINGLE_CONFIRM", "Delete file \"%s\" (Y/N)?"); + MSG_Add("SHELL_CMD_RENAME_ERROR","Unable to rename - %s\n"); MSG_Add("SHELL_CMD_ATTRIB_GET_ERROR","Unable to get attributes: %s\n"); MSG_Add("SHELL_CMD_ATTRIB_SET_ERROR","Unable to set attributes: %s\n"); MSG_Add("SHELL_CMD_DEL_ERROR","Unable to delete - %s\n"); - MSG_Add("SHELL_CMD_DEL_CONFIRM", "Delete %s (Y/N)?"); + MSG_Add("SHELL_CMD_DEL_CONFIRM", "Delete %s (Y/N)?"); MSG_Add("SHELL_CMD_DEL_SURE","All files in directory will be deleted!\nAre you sure [Y/N]?"); MSG_Add("SHELL_SYNTAXERROR","Syntax error\n"); MSG_Add("SHELL_CMD_SET_NOT_SET","Environment variable %s not defined.\n"); @@ -1450,7 +1697,7 @@ void SHELL_Init() { MSG_Add("SHELL_CMD_COPY_CONFIRM","Overwrite %s (Yes/No/All)?"); MSG_Add("SHELL_CMD_COPY_NOSPACE","Insufficient disk space - %s\n"); MSG_Add("SHELL_CMD_COPY_ERROR","Copy error - %s\n"); - MSG_Add("SHELL_CMD_COPY_NOSELF", "File cannot be copied onto itself\r\n"); + MSG_Add("SHELL_CMD_COPY_NOSELF", "File cannot be copied onto itself\r\n"); MSG_Add("SHELL_CMD_SUBST_DRIVE_LIST","The currently mounted local drives are:\n"); MSG_Add("SHELL_CMD_SUBST_NO_REMOVE","Unable to remove, drive not in use.\n"); MSG_Add("SHELL_CMD_SUBST_IN_USE","Target drive is already in use.\n"); @@ -1459,142 +1706,142 @@ void SHELL_Init() { MSG_Add("SHELL_CMD_SUBST_FAILURE","SUBST: There is an error in your command line.\n"); MSG_Add("SHELL_CMD_VTEXT_ON","DOS/V V-text is currently enabled.\n"); MSG_Add("SHELL_CMD_VTEXT_OFF","DOS/V V-text is currently disabled.\n"); - MSG_Add("SHELL_ALLFILES_CHAR", "a"); + MSG_Add("SHELL_ALLFILES_CHAR", "a"); - std::string mapper_keybind = mapper_event_keybind_string("host"); - if (mapper_keybind.empty()) mapper_keybind = "unbound"; + std::string mapper_keybind = mapper_event_keybind_string("host"); + if (mapper_keybind.empty()) mapper_keybind = "unbound"; - /* Capitalize the binding */ - if (mapper_keybind.size() > 0) - mapper_keybind[0] = toupper(mapper_keybind[0]); + /* Capitalize the binding */ + if (mapper_keybind.size() > 0) + mapper_keybind[0] = toupper(mapper_keybind[0]); - std::string default_host = + std::string default_host = #if defined(WIN32) && !defined(HX_DOS) - "F11" + "F11" #else - "F12" + "F12" #endif - ; + ; - /* Punctuation is important too. */ - //mapper_keybind += "."; + /* Punctuation is important too. */ + //mapper_keybind += "."; - /* NTS: MSG_Add() takes the string as const char * but it does make a copy of the string when entering into the message map, - * so there is no problem here of causing use-after-free crashes when we exit. */ - std::string host_key_help; // SHELL_STARTUP_BEGIN2 + /* NTS: MSG_Add() takes the string as const char * but it does make a copy of the string when entering into the message map, + * so there is no problem here of causing use-after-free crashes when we exit. */ + //std::string host_key_help; // SHELL_STARTUP_BEGIN2 <- UNUSED - if (machine == MCH_PC98) { -// "\x86\x46 To activate the keymapper \033[31mhost+M\033[37m. Host key is F12. \x86\x46\n" - } - else { -// "\xBA To activate the keymapper \033[31mhost+M\033[37m. Host key is F12. \xBA\n" - } + if (machine == MCH_PC98) { + // "\x86\x46 To activate the keymapper \033[31mhost+M\033[37m. Host key is F12. \x86\x46\n" + } + else { + // "\xBA To activate the keymapper \033[31mhost+M\033[37m. Host key is F12. \xBA\n" + } - MSG_Add("SHELL_STARTUP_TITLE", "Welcome to DOSBox-X !"); - MSG_Add("SHELL_STARTUP_HEAD1_PC98", "\033[36mGetting Started with DOSBox-X:\033[37m "); - MSG_Add("SHELL_STARTUP_TEXT1_PC98", "Type \033[32mHELP\033[37m for shell commands, and \033[32mINTRO\033[37m for a short introduction. \nYou could also complete various tasks through the \033[33mdrop-down menus\033[37m."); - MSG_Add("SHELL_STARTUP_EXAMPLE_PC98", "\033[32mExample\033[37m: Try select \033[33mTrueType font\033[37m or \033[33mOpenGL perfect\033[37m output option."); - MSG_Add("SHELL_STARTUP_TEXT2_PC98", (std::string("To launch the \033[33mConfiguration Tool\033[37m, use \033[31mhost+C\033[37m. Host key is \033[32m") + (mapper_keybind + "\033[37m. ").substr(0,13) + std::string("\nTo activate the \033[33mMapper Editor\033[37m for key assignments, use \033[31mhost+M\033[37m. \nTo switch between windowed and full-screen mode, use \033[31mhost+F\033[37m. \nTo adjust the emulated CPU speed, use \033[31mhost+Plus\033[37m and \033[31mhost+Minus\033[37m. ")).c_str()); - MSG_Add("SHELL_STARTUP_INFO_PC98","\033[36mDOSBox-X is now running in \033[32mJapanese NEC PC-98\033[36m emulation mode.\033[37m "); - MSG_Add("SHELL_STARTUP_TEXT3_PC98", "\033[32mDOSBox-X project \033[33mhttps://dosbox-x.com/ \033[36mComplete DOS emulations\033[37m\n\033[32mDOSBox-X guide \033[33mhttps://dosbox-x.com/wiki\033[37m \033[36mDOS, Windows 3.x and 9x\033[37m\n\033[32mDOSBox-X support \033[33mhttps://github.com/joncampbell123/dosbox-x/issues\033[37m"); - MSG_Add("SHELL_STARTUP_HEAD1", "\033[36mGetting started with DOSBox-X: \033[37m"); - MSG_Add("SHELL_STARTUP_TEXT1", "Type \033[32mHELP\033[37m to see the list of shell commands, \033[32mINTRO\033[37m for a brief introduction.\nYou can also complete various tasks in DOSBox-X through the \033[33mdrop-down menus\033[37m."); - MSG_Add("SHELL_STARTUP_EXAMPLE", "\033[32mExample\033[37m: Try select the \033[33mTrueType font\033[37m or \033[33mOpenGL pixel-perfect\033[37m output option."); - MSG_Add("SHELL_STARTUP_HEAD2", "\033[36mUseful default shortcuts: \033[37m"); - MSG_Add("SHELL_STARTUP_TEXT2", (std::string("- switch between windowed and full-screen mode with key combination \033[31m")+(default_host+" \033[37m+ \033[31mF\033[37m ").substr(0,23)+std::string("\033[37m\n") + - std::string("- launch \033[33mConfiguration Tool\033[37m using \033[31m")+(default_host+" \033[37m+ \033[31mC\033[37m ").substr(0,22)+std::string("\033[37m, and \033[33mMapper Editor\033[37m using \033[31m")+(default_host+" \033[37m+ \033[31mM\033[37m ").substr(0,24)+std::string("\033[37m\n") + - std::string("- increase or decrease the emulation speed with \033[31m")+(default_host+" \033[37m+ \033[31mPlus\033[37m ").substr(0,25)+std::string("\033[37m or \033[31m") + - (default_host+" \033[37m+ \033[31mMinus\033[37m ").substr(0,29)+std::string("\033[37m")).c_str()); - MSG_Add("SHELL_STARTUP_DOSV","\033[32mDOS/V mode\033[37m is now active. Try also \033[32mTTF CJK mode\033[37m for a general DOS emulation."); - MSG_Add("SHELL_STARTUP_CGA", "Composite CGA mode is supported. Use \033[31mCtrl+F8\033[37m to set composite output ON/OFF.\nUse \033[31mCtrl+Shift+[F7/F8]\033[37m to change hue; \033[31mCtrl+F7\033[37m selects early/late CGA model. "); - MSG_Add("SHELL_STARTUP_CGA_MONO","Use \033[31mCtrl+F7\033[37m to cycle through green, amber, and white monochrome color, \nand \033[31mCtrl+F8\033[37m to change contrast/brightness settings. "); - MSG_Add("SHELL_STARTUP_HERC","Use \033[31mCtrl+F7\033[37m to cycle through white, amber, and green monochrome color. \nUse \033[31mCtrl+F8\033[37m to toggle horizontal blending (only in graphics mode). "); - MSG_Add("SHELL_STARTUP_HEAD3", "\033[36mDOSBox-X project on the web: \033[37m"); - MSG_Add("SHELL_STARTUP_TEXT3", "\033[32mHomepage of project\033[37m: \033[33mhttps://dosbox-x.com/ \033[36mComplete DOS emulations\033[37m\n\033[32mUser guides on Wiki\033[37m: \033[33mhttps://dosbox-x.com/wiki\033[32m \033[36mDOS, Windows 3.x and 9x\033[37m\n\033[32mIssue or suggestion\033[37m: \033[33mhttps://github.com/joncampbell123/dosbox-x/issues \033[37m"); - MSG_Add("SHELL_STARTUP_LAST", "HAVE FUN WITH DOSBox-X !"); + MSG_Add("SHELL_STARTUP_TITLE", "Welcome to DOSBox-X !"); + MSG_Add("SHELL_STARTUP_HEAD1_PC98", "\033[36mGetting Started with DOSBox-X:\033[37m "); + MSG_Add("SHELL_STARTUP_TEXT1_PC98", "Type \033[32mHELP\033[37m for shell commands, and \033[32mINTRO\033[37m for a short introduction. \nYou could also complete various tasks through the \033[33mdrop-down menus\033[37m."); + MSG_Add("SHELL_STARTUP_EXAMPLE_PC98", "\033[32mExample\033[37m: Try select \033[33mTrueType font\033[37m or \033[33mOpenGL perfect\033[37m output option."); + MSG_Add("SHELL_STARTUP_TEXT2_PC98", (std::string("To launch the \033[33mConfiguration Tool\033[37m, use \033[31mhost+C\033[37m. Host key is \033[32m") + (mapper_keybind + "\033[37m. ").substr(0,13) + std::string("\nTo activate the \033[33mMapper Editor\033[37m for key assignments, use \033[31mhost+M\033[37m. \nTo switch between windowed and full-screen mode, use \033[31mhost+F\033[37m. \nTo adjust the emulated CPU speed, use \033[31mhost+Plus\033[37m and \033[31mhost+Minus\033[37m. ")).c_str()); + MSG_Add("SHELL_STARTUP_INFO_PC98","\033[36mDOSBox-X is now running in \033[32mJapanese NEC PC-98\033[36m emulation mode.\033[37m "); + MSG_Add("SHELL_STARTUP_TEXT3_PC98", "\033[32mDOSBox-X project \033[33mhttps://dosbox-x.com/ \033[36mComplete DOS emulations\033[37m\n\033[32mDOSBox-X guide \033[33mhttps://dosbox-x.com/wiki\033[37m \033[36mDOS, Windows 3.x and 9x\033[37m\n\033[32mDOSBox-X support \033[33mhttps://github.com/joncampbell123/dosbox-x/issues\033[37m"); + MSG_Add("SHELL_STARTUP_HEAD1", "\033[36mGetting started with DOSBox-X: \033[37m"); + MSG_Add("SHELL_STARTUP_TEXT1", "Type \033[32mHELP\033[37m to see the list of shell commands, \033[32mINTRO\033[37m for a brief introduction.\nYou can also complete various tasks in DOSBox-X through the \033[33mdrop-down menus\033[37m."); + MSG_Add("SHELL_STARTUP_EXAMPLE", "\033[32mExample\033[37m: Try select the \033[33mTrueType font\033[37m or \033[33mOpenGL pixel-perfect\033[37m output option."); + MSG_Add("SHELL_STARTUP_HEAD2", "\033[36mUseful default shortcuts: \033[37m"); + MSG_Add("SHELL_STARTUP_TEXT2", (std::string("- switch between windowed and full-screen mode with key combination \033[31m")+(default_host+" \033[37m+ \033[31mF\033[37m ").substr(0,23)+std::string("\033[37m\n") + + std::string("- launch \033[33mConfiguration Tool\033[37m using \033[31m")+(default_host+" \033[37m+ \033[31mC\033[37m ").substr(0,22)+std::string("\033[37m, and \033[33mMapper Editor\033[37m using \033[31m")+(default_host+" \033[37m+ \033[31mM\033[37m ").substr(0,24)+std::string("\033[37m\n") + + std::string("- increase or decrease the emulation speed with \033[31m")+(default_host+" \033[37m+ \033[31mPlus\033[37m ").substr(0,25)+std::string("\033[37m or \033[31m") + + (default_host+" \033[37m+ \033[31mMinus\033[37m ").substr(0,29)+std::string("\033[37m")).c_str()); + MSG_Add("SHELL_STARTUP_DOSV","\033[32mDOS/V mode\033[37m is now active. Try also \033[32mTTF CJK mode\033[37m for a general DOS emulation."); + MSG_Add("SHELL_STARTUP_CGA", "Composite CGA mode is supported. Use \033[31mCtrl+F8\033[37m to set composite output ON/OFF.\nUse \033[31mCtrl+Shift+[F7/F8]\033[37m to change hue; \033[31mCtrl+F7\033[37m selects early/late CGA model. "); + MSG_Add("SHELL_STARTUP_CGA_MONO","Use \033[31mCtrl+F7\033[37m to cycle through green, amber, and white monochrome color, \nand \033[31mCtrl+F8\033[37m to change contrast/brightness settings. "); + MSG_Add("SHELL_STARTUP_HERC","Use \033[31mCtrl+F7\033[37m to cycle through white, amber, and green monochrome color. \nUse \033[31mCtrl+F8\033[37m to toggle horizontal blending (only in graphics mode). "); + MSG_Add("SHELL_STARTUP_HEAD3", "\033[36mDOSBox-X project on the web: \033[37m"); + MSG_Add("SHELL_STARTUP_TEXT3", "\033[32mHomepage of project\033[37m: \033[33mhttps://dosbox-x.com/ \033[36mComplete DOS emulations\033[37m\n\033[32mUser guides on Wiki\033[37m: \033[33mhttps://dosbox-x.com/wiki\033[32m \033[36mDOS, Windows 3.x and 9x\033[37m\n\033[32mIssue or suggestion\033[37m: \033[33mhttps://github.com/joncampbell123/dosbox-x/issues \033[37m"); + MSG_Add("SHELL_STARTUP_LAST", "HAVE FUN WITH DOSBox-X !"); MSG_Add("SHELL_CMD_BREAK_HELP","Sets or clears extended CTRL+C checking.\n"); MSG_Add("SHELL_CMD_BREAK_HELP_LONG","BREAK [ON | OFF]\n\nType BREAK without a parameter to display the current BREAK setting.\n"); MSG_Add("SHELL_CMD_CHDIR_HELP","Displays or changes the current directory.\n"); MSG_Add("SHELL_CMD_CHDIR_HELP_LONG","CHDIR [drive:][path]\n" - "CHDIR [..]\n" - "CD [drive:][path]\n" - "CD [..]\n\n" - " .. Specifies that you want to change to the parent directory.\n\n" - "Type CD drive: to display the current directory in the specified drive.\n" - "Type CD without parameters to display the current drive and directory.\n"); + "CHDIR [..]\n" + "CD [drive:][path]\n" + "CD [..]\n\n" + " .. Specifies that you want to change to the parent directory.\n\n" + "Type CD drive: to display the current directory in the specified drive.\n" + "Type CD without parameters to display the current drive and directory.\n"); MSG_Add("SHELL_CMD_CLS_HELP","Clears screen.\n"); MSG_Add("SHELL_CMD_CLS_HELP_LONG","CLS\n"); MSG_Add("SHELL_CMD_DIR_HELP","Displays a list of files and subdirectories in a directory.\n"); MSG_Add("SHELL_CMD_DIR_HELP_LONG","DIR [drive:][path][filename] [/[W|B]] [/S] [/P] [/A[D|H|S|R|A]] [/O[N|E|G|S|D]]\n\n" - " [drive:][path][filename]\n" - " Specifies drive, directory, and/or files to list.\n" - " /W Uses wide list format.\n" - " /B Uses bare format (no heading information or summary).\n" - " /S Displays files in specified directory and all subdirectories.\n" - " /P Pauses after each screenful of information.\n" - " /A Displays files with specified attributes.\n" - " attributes D Directories R Read-only files\n" - " H Hidden files A Files ready for archiving\n" - " S System files - Prefix meaning not\n" - " /O List by files in sorted order.\n" - " sortorder N By name (alphabetic) S By size (smallest first)\n" - " E By extension (alphabetic) D By date & time (earliest first)\n" - " G Group directories first - Prefix to reverse order\n\n" - "Switches may be preset in the DIRCMD environment variable. Override\n" - "preset switches by prefixing any switch with - (hyphen)--for example, /-W.\n" - ); + " [drive:][path][filename]\n" + " Specifies drive, directory, and/or files to list.\n" + " /W Uses wide list format.\n" + " /B Uses bare format (no heading information or summary).\n" + " /S Displays files in specified directory and all subdirectories.\n" + " /P Pauses after each screenful of information.\n" + " /A Displays files with specified attributes.\n" + " attributes D Directories R Read-only files\n" + " H Hidden files A Files ready for archiving\n" + " S System files - Prefix meaning not\n" + " /O List by files in sorted order.\n" + " sortorder N By name (alphabetic) S By size (smallest first)\n" + " E By extension (alphabetic) D By date & time (earliest first)\n" + " G Group directories first - Prefix to reverse order\n\n" + "Switches may be preset in the DIRCMD environment variable. Override\n" + "preset switches by prefixing any switch with - (hyphen)--for example, /-W.\n" + ); MSG_Add("SHELL_CMD_ECHO_HELP","Displays messages, or turns command-echoing on or off.\n"); MSG_Add("SHELL_CMD_ECHO_HELP_LONG"," ECHO [ON | OFF]\n ECHO [message]\n\nType ECHO without parameters to display the current echo setting.\n"); MSG_Add("SHELL_CMD_EXIT_HELP","Exits from the command shell.\n"); MSG_Add("SHELL_CMD_EXIT_HELP_LONG","EXIT\n"); MSG_Add("SHELL_CMD_HELP_HELP","Shows DOSBox-X command help.\n"); MSG_Add("SHELL_CMD_HELP_HELP_LONG","HELP [/A or /ALL]\nHELP [command]\n\n" - " /A or /ALL Lists all supported internal commands.\n" - " [command] Shows help for the specified command.\n\n" - "\033[0mE.g., \033[37;1mHELP COPY\033[0m or \033[37;1mCOPY /?\033[0m shows help information for COPY command.\n\n" + " /A or /ALL Lists all supported internal commands.\n" + " [command] Shows help for the specified command.\n\n" + "\033[0mE.g., \033[37;1mHELP COPY\033[0m or \033[37;1mCOPY /?\033[0m shows help information for COPY command.\n\n" "Note: External commands like \033[33;1mMOUNT\033[0m and \033[33;1mIMGMOUNT\033[0m are not listed by HELP [/A].\n" " These commands can be found on the Z: drive as programs (e.g. MOUNT.COM).\n" - " Type \033[33;1mcommand /?\033[0m or \033[33;1mHELP command\033[0m for help information for that command.\n"); - MSG_Add("SHELL_CMD_LS_HELP","Lists directory contents.\n"); - MSG_Add("SHELL_CMD_LS_HELP_LONG","LS [drive:][path][filename] [/A] [/L] [/P] [/Z]\n\n" - " /A Lists hidden and system files also.\n" - " /L Lists names one per line.\n" - " /P Pauses after each screenful of information.\n" - " /Z Displays short names even if LFN support is available.\n"); + " Type \033[33;1mcommand /?\033[0m or \033[33;1mHELP command\033[0m for help information for that command.\n"); + MSG_Add("SHELL_CMD_LS_HELP","Lists directory contents.\n"); + MSG_Add("SHELL_CMD_LS_HELP_LONG","LS [drive:][path][filename] [/A] [/L] [/P] [/Z]\n\n" + " /A Lists hidden and system files also.\n" + " /L Lists names one per line.\n" + " /P Pauses after each screenful of information.\n" + " /Z Displays short names even if LFN support is available.\n"); MSG_Add("SHELL_CMD_MKDIR_HELP","Creates a directory.\n"); MSG_Add("SHELL_CMD_MKDIR_HELP_LONG","MKDIR [drive:][path]\n" - "MD [drive:][path]\n"); + "MD [drive:][path]\n"); MSG_Add("SHELL_CMD_RMDIR_HELP","Removes a directory.\n"); MSG_Add("SHELL_CMD_RMDIR_HELP_LONG","RMDIR [drive:][path]\n" - "RD [drive:][path]\n"); + "RD [drive:][path]\n"); MSG_Add("SHELL_CMD_SET_HELP","Displays or changes environment variables.\n"); MSG_Add("SHELL_CMD_SET_HELP_LONG","SET [variable=[string]]\n\n" - " variable Specifies the environment-variable name.\n" - " string Specifies a series of characters to assign to the variable.\n\n" - "* If no string is specified, the variable is removed from the environment.\n\n" - "Type SET without parameters to display the current environment variables.\n"); + " variable Specifies the environment-variable name.\n" + " string Specifies a series of characters to assign to the variable.\n\n" + "* If no string is specified, the variable is removed from the environment.\n\n" + "Type SET without parameters to display the current environment variables.\n"); MSG_Add("SHELL_CMD_IF_HELP","Performs conditional processing in batch programs.\n"); MSG_Add("SHELL_CMD_IF_HELP_LONG","IF [NOT] ERRORLEVEL number command\n" - "IF [NOT] string1==string2 command\n" - "IF [NOT] EXIST filename command\n\n" - " NOT Specifies that DOS should carry out\n" - " the command only if the condition is false.\n\n" - " ERRORLEVEL number Specifies a true condition if the last program run\n" - " returned an exit code equal to or greater than the number\n" - " specified.\n\n" - " string1==string2 Specifies a true condition if the specified text strings\n" - " match.\n\n" - " EXIST filename Specifies a true condition if the specified filename\n" - " exists.\n\n" - " command Specifies the command to carry out if the condition is\n" - " met. Command can be followed by ELSE command which\n" - " will execute the command after the ELSE keyword if the\n" - " specified condition is FALSE\n"); + "IF [NOT] string1==string2 command\n" + "IF [NOT] EXIST filename command\n\n" + " NOT Specifies that DOS should carry out\n" + " the command only if the condition is false.\n\n" + " ERRORLEVEL number Specifies a true condition if the last program run\n" + " returned an exit code equal to or greater than the number\n" + " specified.\n\n" + " string1==string2 Specifies a true condition if the specified text strings\n" + " match.\n\n" + " EXIST filename Specifies a true condition if the specified filename\n" + " exists.\n\n" + " command Specifies the command to carry out if the condition is\n" + " met. Command can be followed by ELSE command which\n" + " will execute the command after the ELSE keyword if the\n" + " specified condition is FALSE\n"); MSG_Add("SHELL_CMD_GOTO_HELP","Jumps to a labeled line in a batch program.\n"); MSG_Add("SHELL_CMD_GOTO_HELP_LONG","GOTO label\n\n" - " label Specifies a text string used in the batch program as a label.\n\n" - "You type a label on a line by itself, beginning with a colon.\n"); + " label Specifies a text string used in the batch program as a label.\n\n" + "You type a label on a line by itself, beginning with a colon.\n"); MSG_Add("SHELL_CMD_HISTORY_HELP","Displays or clears the command history list.\n"); MSG_Add("SHELL_CMD_HISTORY_HELP_LONG","HISTORY [/C]\n\n /C Clears the command history list.\n"); MSG_Add("SHELL_CMD_SHIFT_HELP","Changes the position of replaceable parameters in a batch file.\n"); @@ -1609,53 +1856,53 @@ void SHELL_Init() { MSG_Add("SHELL_CMD_REM_HELP_LONG","REM [comment]\n"); MSG_Add("SHELL_CMD_RENAME_HELP","Renames a file/directory or files.\n"); MSG_Add("SHELL_CMD_RENAME_HELP_LONG","RENAME [drive:][path][directoryname1 | filename1] [directoryname2 | filename2]\n" - "REN [drive:][path][directoryname1 | filename1] [directoryname2 | filename2]\n\n" - "Note that you can not specify a new drive or path for your destination.\n\n" - "Wildcards (* and ?) are supported for files. For example, the following command\n" - "renames all text files: \033[37;1mREN *.TXT *.BAK\033[0m\n"); + "REN [drive:][path][directoryname1 | filename1] [directoryname2 | filename2]\n\n" + "Note that you can not specify a new drive or path for your destination.\n\n" + "Wildcards (* and ?) are supported for files. For example, the following command\n" + "renames all text files: \033[37;1mREN *.TXT *.BAK\033[0m\n"); MSG_Add("SHELL_CMD_DELETE_HELP","Removes one or more files.\n"); MSG_Add("SHELL_CMD_DELETE_HELP_LONG","DEL [/P] [/F] [/Q] names\n" - "ERASE [/P] [/F] [/Q] names\n\n" - " names Specifies a list of one or more files or directories.\n" - " Wildcards may be used to delete multiple files. If a\n" - " directory is specified, all files within the directory\n" - " will be deleted.\n" - " /P Prompts for confirmation before deleting one or more files.\n" - " /F Force deleting of read-only files.\n" - " /Q Quiet mode, do not ask if ok to delete on global wildcard.\n"); + "ERASE [/P] [/F] [/Q] names\n\n" + " names Specifies a list of one or more files or directories.\n" + " Wildcards may be used to delete multiple files. If a\n" + " directory is specified, all files within the directory\n" + " will be deleted.\n" + " /P Prompts for confirmation before deleting one or more files.\n" + " /F Force deleting of read-only files.\n" + " /Q Quiet mode, do not ask if ok to delete on global wildcard.\n"); MSG_Add("SHELL_CMD_COPY_HELP","Copies one or more files.\n"); MSG_Add("SHELL_CMD_COPY_HELP_LONG","COPY [/Y | /-Y] source [+source [+ ...]] [destination]\n\n" - " source Specifies the file or files to be copied.\n" - " destination Specifies the directory and/or filename for the new file(s).\n" - " /Y Suppresses prompting to confirm you want to overwrite an\n" - " existing destination file.\n" - " /-Y Causes prompting to confirm you want to overwrite an\n" - " existing destination file.\n\n" - "The switch /Y may be preset in the COPYCMD environment variable.\n" - "This may be overridden with /-Y on the command line.\n\n" - "To append files, specify a single file for destination, but multiple files\n" - "for source (using wildcards or file1+file2+file3 format).\n"); + " source Specifies the file or files to be copied.\n" + " destination Specifies the directory and/or filename for the new file(s).\n" + " /Y Suppresses prompting to confirm you want to overwrite an\n" + " existing destination file.\n" + " /-Y Causes prompting to confirm you want to overwrite an\n" + " existing destination file.\n\n" + "The switch /Y may be preset in the COPYCMD environment variable.\n" + "This may be overridden with /-Y on the command line.\n\n" + "To append files, specify a single file for destination, but multiple files\n" + "for source (using wildcards or file1+file2+file3 format).\n"); MSG_Add("SHELL_CMD_CALL_HELP","Starts a batch file from within another batch file.\n"); MSG_Add("SHELL_CMD_CALL_HELP_LONG","CALL [drive:][path]filename [batch-parameters]\n\n" - "batch-parameters Specifies any command-line information required by\n" - " the batch program.\n"); + "batch-parameters Specifies any command-line information required by\n" + " the batch program.\n"); MSG_Add("SHELL_CMD_SUBST_HELP","Assigns an internal directory to a drive.\n"); MSG_Add("SHELL_CMD_SUBST_HELP_LONG","SUBST [drive1: [drive2:]path]\nSUBST drive1: /D\n\n" - " drive1: Specifies a drive to which you want to assign a path.\n" - " [drive2:]path Specifies a mounted local drive and path you want to assign to.\n" - " /D Deletes a mounted or substituted drive.\n\n" - "Type SUBST with no parameters to display a list of mounted local drives.\n"); + " drive1: Specifies a drive to which you want to assign a path.\n" + " [drive2:]path Specifies a mounted local drive and path you want to assign to.\n" + " /D Deletes a mounted or substituted drive.\n\n" + "Type SUBST with no parameters to display a list of mounted local drives.\n"); MSG_Add("SHELL_CMD_LOADHIGH_HELP","Loads a program into upper memory (requires XMS and UMB memory).\n"); MSG_Add("SHELL_CMD_LOADHIGH_HELP_LONG","LH [drive:][path]filename [parameters]\n" - "LOADHIGH [drive:][path]filename [parameters]\n"); + "LOADHIGH [drive:][path]filename [parameters]\n"); MSG_Add("SHELL_CMD_CHOICE_HELP","Waits for a user keypress to choose one of a set of choices.\n"); MSG_Add("SHELL_CMD_CHOICE_HELP_LONG","CHOICE [/C:choices] [/N] [/S] /T[:]c,nn text\n\n" - " /C[:]choices Specifies allowable keys. Default is: yn.\n" - " /N Do not display the choices at end of prompt.\n" - " /S Enables case-sensitive choices to be selected.\n" - " /T[:]c,nn Default choice to c after nn seconds.\n" - " text The text to display as a prompt.\n\n" - "ERRORLEVEL is set to offset of key user presses in choices.\n"); + " /C[:]choices Specifies allowable keys. Default is: yn.\n" + " /N Do not display the choices at end of prompt.\n" + " /S Enables case-sensitive choices to be selected.\n" + " /T[:]c,nn Default choice to c after nn seconds.\n" + " text The text to display as a prompt.\n\n" + "ERRORLEVEL is set to offset of key user presses in choices.\n"); MSG_Add("SHELL_CMD_ATTRIB_HELP","Displays or changes file attributes.\n"); MSG_Add("SHELL_CMD_ATTRIB_HELP_LONG","ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [drive:][path][filename] [/S]\n\n" " + Sets an attribute.\n" @@ -1669,55 +1916,55 @@ void SHELL_Init() { " /S Processes files in all directories in the specified path.\n"); MSG_Add("SHELL_CMD_PATH_HELP","Displays or sets a search path for executable files.\n"); MSG_Add("SHELL_CMD_PATH_HELP_LONG","PATH [[drive:]path[;...][;%PATH%]\n" - "PATH ;\n\n" - "Type PATH ; to clear all search path settings.\n" - "Type PATH without parameters to display the current path.\n"); + "PATH ;\n\n" + "Type PATH ; to clear all search path settings.\n" + "Type PATH without parameters to display the current path.\n"); MSG_Add("SHELL_CMD_PUSHD_HELP","Stores the current directory for use by the POPD command, then\nchanges to the specified directory.\n"); MSG_Add("SHELL_CMD_PUSHD_HELP_LONG","PUSHD [path]\n\n" - "path Specifies the directory to make the current directory.\n\n" - "Type PUSHD with no parameters to display currently stored directories.\n"); + "path Specifies the directory to make the current directory.\n\n" + "Type PUSHD with no parameters to display currently stored directories.\n"); MSG_Add("SHELL_CMD_POPD_HELP","Changes to the directory stored by the PUSHD command.\n"); MSG_Add("SHELL_CMD_POPD_HELP_LONG","POPD\n"); MSG_Add("SHELL_CMD_VERIFY_HELP","Controls whether to verify files are written correctly to a disk.\n"); MSG_Add("SHELL_CMD_VERIFY_HELP_LONG","VERIFY [ON | OFF]\n\nType VERIFY without a parameter to display the current VERIFY setting.\n"); MSG_Add("SHELL_CMD_VER_HELP","Displays or sets DOSBox-X's reported DOS version.\n"); MSG_Add("SHELL_CMD_VER_HELP_LONG","VER [/R]\n" - "VER [SET] number or VER SET [major minor]\n\n" - " /R Display DOSBox-X's Git commit version and build date.\n" - " [SET] number Set the specified number as the reported DOS version.\n" - " SET [major minor] Set the reported DOS version in major and minor format.\n\n" - " \033[0mE.g., \033[37;1mVER 6.0\033[0m or \033[37;1mVER 7.1\033[0m sets the DOS version to 6.0 and 7.1, respectively.\n" - " On the other hand, \033[37;1mVER SET 7 1\033[0m sets the DOS version to 7.01 instead of 7.1.\n\n" - "Type VER without parameters to display DOSBox-X and the reported DOS version.\n"); + "VER [SET] number or VER SET [major minor]\n\n" + " /R Display DOSBox-X's Git commit version and build date.\n" + " [SET] number Set the specified number as the reported DOS version.\n" + " SET [major minor] Set the reported DOS version in major and minor format.\n\n" + " \033[0mE.g., \033[37;1mVER 6.0\033[0m or \033[37;1mVER 7.1\033[0m sets the DOS version to 6.0 and 7.1, respectively.\n" + " On the other hand, \033[37;1mVER SET 7 1\033[0m sets the DOS version to 7.01 instead of 7.1.\n\n" + "Type VER without parameters to display DOSBox-X and the reported DOS version.\n"); MSG_Add("SHELL_CMD_VER_VER","DOSBox-X version %s (%s). Reported DOS version %d.%02d.\n"); MSG_Add("SHELL_CMD_VER_INVALID","The specified DOS version is not correct.\n"); MSG_Add("SHELL_CMD_VOL_HELP","Displays the disk volume label and serial number, if they exist.\n"); MSG_Add("SHELL_CMD_VOL_HELP_LONG","VOL [drive]\n"); MSG_Add("SHELL_CMD_PROMPT_HELP","Changes the command prompt.\n"); MSG_Add("SHELL_CMD_PROMPT_HELP_LONG","PROMPT [text]\n" - " text Specifies a new command prompt.\n\n" - "Prompt can be made up of normal characters and the following special codes:\n" - " $A & (Ampersand)\n" - " $B | (pipe)\n" - " $C ( (Left parenthesis)\n" - " $D Current date\n" - " $E Escape code (ASCII code 27)\n" - " $F ) (Right parenthesis)\n" - " $G > (greater-than sign)\n" - " $H Backspace (erases previous character)\n" - " $L < (less-than sign)\n" - " $N Current drive\n" - " $P Current drive and path\n" - " $Q = (equal sign)\n" - " $S (space)\n" - " $T Current time\n" - " $V DOS version number\n" - " $_ Carriage return and linefeed\n" - " $$ $ (dollar sign)\n"); - MSG_Add("SHELL_CMD_ALIAS_HELP", "Defines or displays aliases.\n"); - MSG_Add("SHELL_CMD_ALIAS_HELP_LONG", "ALIAS [name[=value] ... ]\n\nType ALIAS without parameters to display the list of aliases in the form:\n`ALIAS NAME = VALUE'\n"); - MSG_Add("SHELL_CMD_ASSOC_HELP", "Displays or changes file extension associations.\n"); - MSG_Add("SHELL_CMD_ASSOC_HELP_LONG", "ASSOC [.ext[=command] ... ]\n\nType ASSOC without parameters to display the current file associations.\nFile extensions must start with a dot (.); wildcards (* and ?) are allowed.\n"); + " text Specifies a new command prompt.\n\n" + "Prompt can be made up of normal characters and the following special codes:\n" + " $A & (Ampersand)\n" + " $B | (pipe)\n" + " $C ( (Left parenthesis)\n" + " $D Current date\n" + " $E Escape code (ASCII code 27)\n" + " $F ) (Right parenthesis)\n" + " $G > (greater-than sign)\n" + " $H Backspace (erases previous character)\n" + " $L < (less-than sign)\n" + " $N Current drive\n" + " $P Current drive and path\n" + " $Q = (equal sign)\n" + " $S (space)\n" + " $T Current time\n" + " $V DOS version number\n" + " $_ Carriage return and linefeed\n" + " $$ $ (dollar sign)\n"); + MSG_Add("SHELL_CMD_ALIAS_HELP", "Defines or displays aliases.\n"); + MSG_Add("SHELL_CMD_ALIAS_HELP_LONG", "ALIAS [name[=value] ... ]\n\nType ALIAS without parameters to display the list of aliases in the form:\n`ALIAS NAME = VALUE'\n"); + MSG_Add("SHELL_CMD_ASSOC_HELP", "Displays or changes file extension associations.\n"); + MSG_Add("SHELL_CMD_ASSOC_HELP_LONG", "ASSOC [.ext[=command] ... ]\n\nType ASSOC without parameters to display the current file associations.\nFile extensions must start with a dot (.); wildcards (* and ?) are allowed.\n"); MSG_Add("SHELL_CMD_CHCP_HELP", "Displays or changes the current DOS code page.\n"); MSG_Add("SHELL_CMD_CHCP_HELP_LONG", "CHCP [nnn [file]]\nCHCP nnn[:[language]]\n\n nnn Specifies a code page number.\n file Specifies a code page file.\n language Specifies a corresponding language.\n\nSupported code pages for changing in the TrueType font output:\n\n437,737,775,808,850,852,853,855-869,872,874,1250-1258,3021\n\nAlso double-byte code pages including 932, 936, 949, and 950/951.\n\nCustomized code pages are supported by providing code page files.\n"); MSG_Add("SHELL_CMD_CHCP_ACTIVE", "Active code page: %d\n"); @@ -1725,22 +1972,35 @@ void SHELL_Init() { MSG_Add("SHELL_CMD_CHCP_INVALID", "Invalid code page number - %s\n"); MSG_Add("SHELL_CMD_COUNTRY_HELP", "Displays or changes the current country.\n"); MSG_Add("SHELL_CMD_COUNTRY_HELP_LONG", "COUNTRY [nnn] \n\n nnn Specifies a country code.\n\nCountry-specific information such as date and time formats will be affected.\n"); - MSG_Add("SHELL_CMD_CTTY_HELP","Changes the terminal device used to control the system.\n"); + MSG_Add("SHELL_CMD_CTTY_HELP","Changes the terminal device used to control the system.\n"); MSG_Add("SHELL_CMD_CTTY_HELP_LONG","CTTY device\n device The terminal device to use, such as CON.\n"); MSG_Add("SHELL_CMD_MORE_HELP","Displays output one screen at a time.\n"); MSG_Add("SHELL_CMD_MORE_HELP_LONG","MORE [drive:][path][filename]\nMORE < [drive:][path]filename\ncommand-name | MORE [drive:][path][filename]\n"); MSG_Add("SHELL_CMD_TRUENAME_HELP","Finds the fully-expanded name for a file.\n"); MSG_Add("SHELL_CMD_TRUENAME_HELP_LONG","TRUENAME [/H] file\n"); MSG_Add("SHELL_CMD_DXCAPTURE_HELP","Runs program with video or audio capture.\n"); - MSG_Add("SHELL_CMD_DXCAPTURE_HELP_LONG","DX-CAPTURE [/V|/-V] [/A|/-A] [/M|/-M] [/O|/-O] [command] [options]\n\nIt will start video or audio capture, run program, and then automatically stop capture when the program exits.\n /V for video, /A for audio, /M multi-track audio and /O for OPL FM (DROv2 format)"); + MSG_Add("SHELL_CMD_DXCAPTURE_HELP_LONG","DX-CAPTURE [/V|/-V] [/A|/-A] [/M|/-M] [/O|/-O] [/D|/-D] [command] [options]\n\nIt will start video or audio capture, run program, and then automatically stop capture when the program exits.\n /V for video, /A for audio, /M multi-track audio, /O for OPL FM (DROv2 format) and /-D for disabling the post-exit delay."); #if C_DEBUG MSG_Add("SHELL_CMD_DEBUGBOX_HELP","Runs program and breaks into debugger at entry point.\n"); MSG_Add("SHELL_CMD_DEBUGBOX_HELP_LONG","DEBUGBOX [command] [options]\n\nType DEBUGBOX without a parameter to start the debugger.\n"); #endif MSG_Add("SHELL_CMD_COMMAND_HELP","Starts the DOSBox-X command shell.\n\nThe following options are accepted:\n\n /C Executes the specified command and returns.\n /K Executes the specified command and continues running.\n /P Loads a permanent copy of the command shell.\n /INIT Initializes the command shell.\n"); +} + +void DOS_ApplyMinMCBAndDummyDCB(void); + +void SHELL_Init() { + LOG(LOG_MISC,LOG_DEBUG)("Initializing DOS shell"); + +#if !defined(OSFREE) + /* now that CONFIG shell has had a chance to load drivers, apply minimum mcb segment / minimum free segment and dummy DCB */ + DOS_ApplyMinMCBAndDummyDCB(); +#endif + /* Regular startup */ - call_shellstop=CALLBACK_Allocate(); + if (call_shellstop == 0) call_shellstop = CALLBACK_Allocate(); + /* Setup the startup CS:IP to kill the last running machine when exited */ RealPt newcsip=CALLBACK_RealPointer(call_shellstop); SegSet16(cs,RealSeg(newcsip)); @@ -1748,110 +2008,110 @@ void SHELL_Init() { CALLBACK_Setup(call_shellstop,shellstop_handler,CB_IRET,"shell stop"); - /* NTS: Some DOS programs behave badly if run from a command interpreter - * who's PSP segment is too low in memory and does not appear in - * the MCB chain (SimCity 2000). So allocate shell memory normally - * as any DOS application would do. - * - * That includes allocating COMMAND.COM stack NORMALLY (not up in - * the UMB as DOSBox SVN would do) */ + /* NTS: Some DOS programs behave badly if run from a command interpreter + * who's PSP segment is too low in memory and does not appear in + * the MCB chain (SimCity 2000). So allocate shell memory normally + * as any DOS application would do. + * + * That includes allocating COMMAND.COM stack NORMALLY (not up in + * the UMB as DOSBox SVN would do) */ /* Now call up the shell for the first time */ uint16_t psp_seg;//=DOS_FIRST_SHELL; uint16_t env_seg;//=DOS_FIRST_SHELL+19; //DOS_GetMemory(1+(4096/16))+1; uint16_t stack_seg;//=DOS_GetMemory(2048/16,"COMMAND.COM stack"); - uint16_t tmp,total_sz; - bool tiny_memory_mode = false; - - // below a certain memory size, alter memory arrangement and allocation to minimize memory - if (MEM_TotalPages() < 0x8) tiny_memory_mode = true; - - // decide shell env size - if (dosbox_shell_env_size == 0) { - if (MEM_TotalPages() >= 0x10/*64KB or more*/) - dosbox_shell_env_size = (0x158u - (0x118u + 19u)) << 4u; /* equivalent to DOSBox SVN */ - else if (MEM_TotalPages() >= 0x8/*32KB or more*/) - dosbox_shell_env_size = 384; - else if (MEM_TotalPages() >= 0x4/*16KB or more*/) - dosbox_shell_env_size = 256; - else - dosbox_shell_env_size = 144; - } - else { - dosbox_shell_env_size = (dosbox_shell_env_size+15u)&(~15u); /* round up to paragraph */ - } + uint16_t tmp,total_sz; + bool tiny_memory_mode = false; + + // below a certain memory size, alter memory arrangement and allocation to minimize memory + if (MEM_ConventionalPages() < 0x8) tiny_memory_mode = true; + + // decide shell env size + if (dosbox_shell_env_size == 0) { + if (MEM_ConventionalPages() >= 0x10/*64KB or more*/) + dosbox_shell_env_size = (0x158u - (0x118u + 19u)) << 4u; /* equivalent to DOSBox SVN */ + else if (MEM_ConventionalPages() >= 0x8/*32KB or more*/) + dosbox_shell_env_size = 384; + else if (MEM_ConventionalPages() >= 0x4/*16KB or more*/) + dosbox_shell_env_size = 256; + else + dosbox_shell_env_size = 144; + } + else { + dosbox_shell_env_size = (dosbox_shell_env_size+15u)&(~15u); /* round up to paragraph */ + } - LOG_MSG("COMMAND.COM env size: %u bytes",dosbox_shell_env_size); + LOG_MSG("COMMAND.COM env size: %u bytes",dosbox_shell_env_size); - // According to some sources, 0x0008 is a special PSP segment value used by DOS before the first - // program is used. We need the current PSP segment to be nonzero so that DOS_AllocateMemory() - // can properly allocate memory. - dos.psp(8); + // According to some sources, 0x0008 is a special PSP segment value used by DOS before the first + // program is used. We need the current PSP segment to be nonzero so that DOS_AllocateMemory() + // can properly allocate memory. + dos.psp(8); - auto savedMemAllocStrategy = DOS_GetMemAllocStrategy(); - auto shellHigh = std::string(static_cast(control->GetSection("dos"))->Get_string("shellhigh")); - if (shellHigh=="true" || shellHigh=="1" || - (shellHigh=="auto" && dos.version.major >= 7)) - { - DOS_SetMemAllocStrategy(savedMemAllocStrategy | 0x80); - } + auto savedMemAllocStrategy = DOS_GetMemAllocStrategy(); + auto shellHigh = std::string(static_cast(control->GetSection("dos"))->Get_string("shellhigh")); + if (shellHigh=="true" || shellHigh=="1" || + (shellHigh=="auto" && dos.version.major >= 7)) + { + DOS_SetMemAllocStrategy(savedMemAllocStrategy | 0x80); + } - // COMMAND.COM environment block - tmp = dosbox_shell_env_size>>4; + // COMMAND.COM environment block + tmp = dosbox_shell_env_size>>4; if (!DOS_AllocateMemory(&env_seg,&tmp)) E_Exit("COMMAND.COM failed to allocate environment block segment"); - LOG_MSG("COMMAND.COM environment block: 0x%04x sz=0x%04x",env_seg,tmp); - - // COMMAND.COM main binary (including PSP and stack) - if (tiny_memory_mode) - tmp = 0x13 + (1536/16); - else - tmp = 0x1A + (2048/16); - total_sz = tmp; - - // Use normal MCB allocation unless memsize is 4KB - if (MEM_TotalPages() > 1) { - if (!DOS_AllocateMemory(&psp_seg,&tmp)) E_Exit("COMMAND.COM failed to allocate main body + PSP segment"); - } - else { - psp_seg = DOS_GetMemory(tmp,"COMMAND.COM main body and PSP"); - } + LOG_MSG("COMMAND.COM environment block: 0x%04x sz=0x%04x",env_seg,tmp); + + // COMMAND.COM main binary (including PSP and stack) + if (tiny_memory_mode) + tmp = 0x13 + (1536/16); + else + tmp = 0x1A + (2048/16); + total_sz = tmp; + + // Use normal MCB allocation unless memsize is 4KB + if (MEM_ConventionalPages() > 1) { + if (!DOS_AllocateMemory(&psp_seg,&tmp)) E_Exit("COMMAND.COM failed to allocate main body + PSP segment"); + } + else { + psp_seg = DOS_GetMemory(tmp,"COMMAND.COM main body and PSP"); + } - LOG_MSG("COMMAND.COM main body (PSP): 0x%04x sz=0x%04x",psp_seg,tmp); + LOG_MSG("COMMAND.COM main body (PSP): 0x%04x sz=0x%04x",psp_seg,tmp); - DOS_SetMemAllocStrategy(savedMemAllocStrategy); + DOS_SetMemAllocStrategy(savedMemAllocStrategy); - // now COMMAND.COM has a main body and PSP segment, reflect it - dos.psp(psp_seg); - shell_psp = psp_seg; + // now COMMAND.COM has a main body and PSP segment, reflect it + dos.psp(psp_seg); + shell_psp = psp_seg; - { - DOS_MCB mcb((uint16_t)(env_seg-1)); - mcb.SetPSPSeg(psp_seg); - mcb.SetFileName("COMMAND"); - } + { + DOS_MCB mcb((uint16_t)(env_seg-1)); + mcb.SetPSPSeg(psp_seg); + mcb.SetFileName("COMMAND"); + } - { - DOS_MCB mcb((uint16_t)(psp_seg-1)); - mcb.SetPSPSeg(psp_seg); - mcb.SetFileName("COMMAND"); - } + { + DOS_MCB mcb((uint16_t)(psp_seg-1)); + mcb.SetPSPSeg(psp_seg); + mcb.SetFileName("COMMAND"); + } - // set the stack at 0x1A - if (tiny_memory_mode) - stack_seg = psp_seg + 0x13; - else - stack_seg = psp_seg + 0x1A; - LOG_MSG("COMMAND.COM stack: 0x%04x",stack_seg); + // set the stack at 0x1A + if (tiny_memory_mode) + stack_seg = psp_seg + 0x13; + else + stack_seg = psp_seg + 0x1A; + LOG_MSG("COMMAND.COM stack: 0x%04x",stack_seg); - // set the stack pointer + // set the stack pointer SegSet16(ss,stack_seg); - if (tiny_memory_mode) - reg_sp=1534; - else - reg_sp=2046; + if (tiny_memory_mode) + reg_sp=1534; + else + reg_sp=2046; - LOG(LOG_MISC,LOG_DEBUG)("Shell init SS:SP %04x:%04x",(unsigned int)stack_seg,(unsigned int)reg_sp); + LOG(LOG_MISC,LOG_DEBUG)("Shell init SS:SP %04x:%04x",(unsigned int)stack_seg,(unsigned int)reg_sp); /* Set up int 24 and psp (Telarium games) */ real_writeb(psp_seg+16+1,0,0xea); /* far jmp */ @@ -1860,8 +2120,7 @@ void SHELL_Init() { /* Old comment: Set up int 23 to "int 20" in the psp. Fixes what.exe */ /* 2023/09/28: Point INT 23h at a vector that calls our callback and then calls INT 21h AH=4Ch. Real COMMAND.COM does this too. */ - if (call_int23 == 0) - call_int23 = CALLBACK_Allocate(); + if (call_int23 == 0) call_int23 = CALLBACK_Allocate(); RealPt addr_int23=RealMake(psp_seg,8+((16+2)*16)); @@ -1869,8 +2128,7 @@ void SHELL_Init() { RealSetVec(0x23,addr_int23); /* Set up int 2e handler */ - if (call_int2e == 0) - call_int2e = CALLBACK_Allocate(); + if (call_int2e == 0) call_int2e = CALLBACK_Allocate(); // RealPt addr_int2e=RealMake(psp_seg+16+1,8); // NTS: It's apparently common practice to enumerate MCBs by reading the segment value of INT 2Eh and then @@ -1901,22 +2159,19 @@ void SHELL_Init() { DOS_PSP psp(psp_seg); psp.MakeNew(0); dos.psp(psp_seg); - + /* The start of the filetable in the psp must look like this: * 01 01 01 00 02 * In order to achieve this: First open 2 files. Close the first and * duplicate the second (so the entries get 01) */ - uint16_t dummy=0; - DOS_OpenFile("CON",OPEN_READWRITE,&dummy); /* STDIN */ - DOS_OpenFile("CON",OPEN_READWRITE,&dummy); /* STDOUT */ - DOS_CloseFile(0); /* Close STDIN */ - DOS_ForceDuplicateEntry(1,0); /* "new" STDIN */ - DOS_ForceDuplicateEntry(1,2); /* STDERR */ - DOS_OpenFile("CON",OPEN_READWRITE,&dummy); /* STDAUX */ - if (!DOS_OpenFile("PRN",OPEN_READWRITE,&dummy)) DOS_OpenFile("CON",OPEN_READWRITE,&dummy); /* STDPRN */ - - psp.SetSize(psp_seg + total_sz); - psp.SetStack(((unsigned int)stack_seg << 16u) + (unsigned int)reg_sp); + DOS_OpenExistingSFTEntry(0,1); + DOS_OpenExistingSFTEntry(1,1); + DOS_OpenExistingSFTEntry(2,1); + DOS_OpenExistingSFTEntry(3,0); + DOS_OpenExistingSFTEntry(4,2); + + psp.SetSize(psp_seg + total_sz); + psp.SetStack(((unsigned int)stack_seg << 16u) + (unsigned int)reg_sp); /* Create appearance of handle inheritance by first shell */ for (uint16_t i=0;i<5;i++) { @@ -1933,14 +2188,14 @@ void SHELL_Init() { memset(&tail.buffer, 0, CTBUF); strncpy(tail.buffer,init_line,CTBUF); MEM_BlockWrite(PhysMake(psp_seg,CTBUF+1),&tail,CTBUF+1); - + /* Setup internal DOS Variables */ dos.dta(RealMake(psp_seg,CTBUF+1)); dos.psp(psp_seg); } /* Pfff... starting and running the shell from a configuration section INIT - * What the hell were you guys thinking? --J.C. */ + * What the hell were you guys thinking over there at DOSBox SVN? --J.C. */ void SHELL_Run() { dos_shell_running_program = false; #if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU @@ -2017,3 +2272,448 @@ void SHELL_Run() { throw; } } + +#if !defined(OSFREE) +struct ConfigShell_Entry { + bool debugbreak = false; // break into debugger before running program or loading device driver + bool echo = false; // echo program or device driver path/command on console + + enum { + NONE=0, + RUN, + DEVICE, + PAUSE, + NEXTDRIVE, + }; + + uint8_t type = NONE; + uint8_t drive = 0; + std::string path; + std::string args; + std::string cmd; +}; + +extern std::string config_run_var_device; +extern std::string config_run_var_devparm; +extern uint8_t device_nextdrive; + +void DOS_ConfigShell::Run(void) { + if (config_shell_prompt && config_shell_prompt_start) + DOS_Shell::Run(); + + { + Section_prop *section = static_cast(control->GetSection("dosbox")); + bool startbanner = section->Get_bool("startbanner"); + + if(startbanner && !control->opt_fastlaunch) { + if (!shown_welcome) { + //showWelcome(this); + DoCommand((char *)std::string("z:\\system\\intro welcome").c_str()); + shown_welcome = true; + } + } + else if((CurMode->type == M_TEXT || IS_PC98_ARCH) && ANSI_SYS_installed()) { + WriteOut("\033[2J"); + } + } + + const Section_line * section=static_cast(control->GetSection("devices")); + const char *cfgstr = section->data.c_str(); + + std::vector entries; + ConfigShell_Entry entry_template; + + if (IS_PC98_ARCH) + device_nextdrive = 0;/*A:*/ + else + device_nextdrive = 2;/*C:*/ + + while (*cfgstr) { + /* every line has the format NAME=VALUE */ + /* DEVICE=C:\DOS\EMM386.EXE /X /Y /A /X */ + std::string name,value; + + { + const char *b = cfgstr; + while (*cfgstr && *cfgstr != '=' && *cfgstr != '\n' && *cfgstr != '\r') cfgstr++; + const char *e = cfgstr; + while (e > b && *(e-1) == ' ') e--; + name = std::string(b,size_t(e-b)); + } + + if (*cfgstr == '=') { + cfgstr++; + while (*cfgstr == ' ' || *cfgstr == '\t') cfgstr++; + const char *b = cfgstr; + while (*cfgstr && *cfgstr != '\n' && *cfgstr != '\r') cfgstr++; + const char *e = cfgstr; + while (e > b && *(e-1) == ' ') e--; + value = std::string(b,size_t(e-b)); + } + + while (*cfgstr && *cfgstr != '\n' && *cfgstr != '\r') cfgstr++; + if (*cfgstr == '\r') cfgstr++; + if (*cfgstr == '\n') cfgstr++; + + if (name == "ECHO") { + if (value == "ON" || value == "1") + entry_template.echo = true; + else if (value == "OFF" || value == "0") + entry_template.echo = false; + } + else if (name == "DEBUGBREAK") { + if (value == "ON" || value == "1") + entry_template.debugbreak = true; + else if (value == "OFF" || value == "0") + entry_template.debugbreak = false; + } + else if (name == "PAUSE") { + entries.push_back(entry_template); + ConfigShell_Entry &ent = entries[entries.size()-1u]; + ent.type = ConfigShell_Entry::PAUSE; + } + else if (name == "RUN") { + entries.push_back(entry_template); + ConfigShell_Entry &ent = entries[entries.size()-1u]; + ent.type = ConfigShell_Entry::RUN; + ent.cmd = value; + } + else if (name == "DEVICE") { + entries.push_back(entry_template); + ConfigShell_Entry &ent = entries[entries.size()-1u]; + ent.type = ConfigShell_Entry::DEVICE; + + size_t i = value.find_first_of(' '); + if (i == std::string::npos) i = value.length(); + ent.path = value.substr(0,i); + while (i < value.length() && value[i] == ' ') i++; + ent.args = value.substr(i); + } + else if (name == "NEXTDRIVE") { + entries.push_back(entry_template); + ConfigShell_Entry &ent = entries[entries.size()-1u]; + ent.type = ConfigShell_Entry::NEXTDRIVE; + + const char *c = value.c_str(); + if (isalpha(*c)) { + ent.drive = toupper(*c) - 'A'; + } + else if (isdigit(*c)) { + ent.drive = strtoul(c,NULL,10); + if (ent.drive > 25) ent.drive = 25; + } + } + } + + if (false/*DEBUG*/) { + LOG_MSG("CONFIG.SYS devices parsing result"); + for (const auto &e : entries) { + if (e.type == ConfigShell_Entry::RUN) { + LOG_MSG(" - dbgbrk=%u echo=%u RUN '%s'",e.debugbreak,e.echo,e.cmd.c_str()); + } + else if (e.type == ConfigShell_Entry::DEVICE) { + LOG_MSG(" - dbgbrk=%u echo=%u DEVICE '%s' '%s'",e.debugbreak,e.echo,e.path.c_str(),e.args.c_str()); + } + else { + LOG_MSG(" - ????"); + } + } + } + + shellrun=true; + char tmp[512]; + for (auto &ent : entries) { + if (ent.type == ConfigShell_Entry::RUN) { + if (ent.echo) WriteOut("RUNNING: RUN=%s",ent.cmd.c_str()); + if (ent.debugbreak) snprintf(tmp,sizeof(tmp),"DEBUGBOX %s",ent.cmd.c_str()); + else snprintf(tmp,sizeof(tmp),"%s",ent.cmd.c_str()); + ParseLine(tmp); + } + else if (ent.type == ConfigShell_Entry::DEVICE) { + if (ent.echo) WriteOut("RUNNING: DEVICE=%s %s",ent.path.c_str(),ent.args.c_str()); + + config_run_var_device = ent.path; + config_run_var_devparm = ent.args; + + if (ent.debugbreak) snprintf(tmp,sizeof(tmp),"DEBUGBOX CONFIG \xff\xaa\xff"); + else snprintf(tmp,sizeof(tmp),"CONFIG \xff\xaa\xff"); + ParseLine(tmp); + + config_run_var_device.clear(); + config_run_var_devparm.clear(); + } + else if (ent.type == ConfigShell_Entry::PAUSE) { + if (ent.echo) WriteOut("RUNNING: PAUSE"); + /* FIXME: Our own internal pause function? */ + strcpy(tmp,"PAUSE"); + ParseLine(tmp); + } + else if (ent.type == ConfigShell_Entry::NEXTDRIVE) { + if (ent.echo) WriteOut("RUNNING: NEXTDRIVE=%c",ent.drive+'A'); + device_nextdrive=ent.drive; + } + + } + shellrun=false; + + if (config_shell_prompt && config_shell_prompt_end) + DOS_Shell::Run(); +} + +DOS_ConfigShell::~DOS_ConfigShell() { +} + +DOS_ConfigShell::DOS_ConfigShell():DOS_Shell(){ + config_shell = true; +} +#endif + +void CONFIGSHELL_Init() { +#if !defined(OSFREE) + config_shell_run = true; + + // if there is nothing there, don't even run this code + const Section_line * section=static_cast(control->GetSection("devices")); + const char *cfgstr = section->data.c_str(); + while (*cfgstr == ' ' || *cfgstr == '\t') cfgstr++; + if (*cfgstr == 0) config_shell_run = false; + + if (!config_shell_run) return; + + LOG(LOG_MISC,LOG_DEBUG)("Initializing CONFIG shell"); + + /* Regular startup */ + if (call_shellstop == 0) call_shellstop = CALLBACK_Allocate(); + + /* Setup the startup CS:IP to kill the last running machine when exited */ + RealPt newcsip=CALLBACK_RealPointer(call_shellstop); + SegSet16(cs,RealSeg(newcsip)); + reg_ip=RealOff(newcsip); + + CALLBACK_Setup(call_shellstop,shellstop_handler,CB_IRET,"shell stop"); + + /* This version is for loading device drivers, which by their nature, + * are loaded low in memory alongside all the other parts of MS-DOS. + * Device drivers that cannot load low without crashing are not worth supporting. + * + * Any DOS application run in this phase is by default loaded into the + * top of available memory (lastfit memory strategy), not from the bottom, + * and therefore should never crash because it was loaded to low. + * + * Only device drivers are allocated from the bottom up in memory. */ + + /* Now call up the shell for the first time */ + uint16_t psp_seg;//=DOS_FIRST_SHELL; + uint16_t env_seg;//=DOS_FIRST_SHELL+19; //DOS_GetMemory(1+(4096/16))+1; + uint16_t stack_seg;//=DOS_GetMemory(2048/16,"COMMAND.COM stack"); + uint16_t tmp,total_sz; + bool tiny_memory_mode = false; + + // below a certain memory size, alter memory arrangement and allocation to minimize memory + if (MEM_ConventionalPages() < 0x8) tiny_memory_mode = true; + + // decide shell env size---CONFIG size is more restricted than main shell + if (MEM_ConventionalPages() >= 0x10/*64KB or more*/) + dosbox_shell_env_size = (0x158u - (0x118u + 19u)) << 4u; /* equivalent to DOSBox SVN */ + else if (MEM_ConventionalPages() >= 0x8/*32KB or more*/) + dosbox_shell_env_size = 384; + else if (MEM_ConventionalPages() >= 0x4/*16KB or more*/) + dosbox_shell_env_size = 256; + else + dosbox_shell_env_size = 144; + + LOG_MSG("COMMAND.COM env size: %u bytes",dosbox_shell_env_size); + + // According to some sources, 0x0008 is a special PSP segment value used by DOS before the first + // program is used. We need the current PSP segment to be nonzero so that DOS_AllocateMemory() + // can properly allocate memory. + dos.psp(8); + + auto savedMemAllocStrategy = DOS_GetMemAllocStrategy(); + DOS_SetMemAllocStrategy(2/*last fit*/); + + // COMMAND.COM environment block + tmp = dosbox_shell_env_size>>4; + if (!DOS_AllocateMemory(&env_seg,&tmp)) E_Exit("COMMAND.COM failed to allocate environment block segment"); + LOG_MSG("COMMAND.COM environment block: 0x%04x sz=0x%04x",env_seg,tmp); + + // COMMAND.COM main binary (including PSP and stack) + if (tiny_memory_mode) + tmp = 0x13 + (1536/16); + else + tmp = 0x1A + (2048/16); + total_sz = tmp; + + // Use normal MCB allocation unless memsize is 4KB + if (MEM_ConventionalPages() > 1) { + if (!DOS_AllocateMemory(&psp_seg,&tmp)) E_Exit("COMMAND.COM failed to allocate main body + PSP segment"); + } + else { + psp_seg = DOS_GetMemory(tmp,"COMMAND.COM main body and PSP"); + } + + LOG_MSG("COMMAND.COM main body (PSP): 0x%04x sz=0x%04x",psp_seg,tmp); + + DOS_SetMemAllocStrategy(savedMemAllocStrategy); + + // now COMMAND.COM has a main body and PSP segment, reflect it + dos.psp(psp_seg); + shell_psp = psp_seg; + + { + DOS_MCB mcb((uint16_t)(env_seg-1)); + mcb.SetPSPSeg(psp_seg); + mcb.SetFileName("CONFIG"); + } + + { + DOS_MCB mcb((uint16_t)(psp_seg-1)); + mcb.SetPSPSeg(psp_seg); + mcb.SetFileName("CONFIG"); + } + + // set the stack at 0x1A + if (tiny_memory_mode) + stack_seg = psp_seg + 0x13; + else + stack_seg = psp_seg + 0x1A; + LOG_MSG("COMMAND.COM stack: 0x%04x",stack_seg); + + // set the stack pointer + SegSet16(ss,stack_seg); + + if (tiny_memory_mode) + reg_sp=1534; + else + reg_sp=2046; + + LOG(LOG_MISC,LOG_DEBUG)("Shell init SS:SP %04x:%04x",(unsigned int)stack_seg,(unsigned int)reg_sp); + + /* Set up int 24 and psp (Telarium games) */ + real_writeb(psp_seg+16+1,0,0xea); /* far jmp */ + real_writed(psp_seg+16+1,1,real_readd(0,0x24*4)); + real_writed(0,0x24*4,((uint32_t)psp_seg<<16) | ((16+1)<<4)); + + /* Old comment: Set up int 23 to "int 20" in the psp. Fixes what.exe */ + /* 2023/09/28: Point INT 23h at a vector that calls our callback and then calls INT 21h AH=4Ch. Real COMMAND.COM does this too. */ + if (call_int23 == 0) call_int23 = CALLBACK_Allocate(); + + RealPt addr_int23=RealMake(psp_seg,8+((16+2)*16)); + + CALLBACK_Setup(call_int23,&INT23_Handler,CB_RETF,Real2Phys(addr_int23),"Shell Int 23 CTRL+C"); + RealSetVec(0x23,addr_int23); + + /* Set up int 2e handler */ + if (call_int2e == 0) call_int2e = CALLBACK_Allocate(); + + // RealPt addr_int2e=RealMake(psp_seg+16+1,8); + // NTS: It's apparently common practice to enumerate MCBs by reading the segment value of INT 2Eh and then + // scanning forward from there. The assumption seems to be that COMMAND.COM writes INT 2Eh there using + // it's PSP segment and an offset like that of a COM executable even though COMMAND.COM is often an EXE file. + RealPt addr_int2e=RealMake(psp_seg,8+((16+1)*16)); + + CALLBACK_Setup(call_int2e,&INT2E_Handler,CB_IRET_STI,Real2Phys(addr_int2e),"Shell Int 2e"); + RealSetVec(0x2e,addr_int2e); + + if (config_shell_prompt) { + /* Setup environment */ + PhysPt env_write=PhysMake(env_seg,0); + MEM_BlockWrite(env_write,path_string,(Bitu)(strlen(path_string)+1)); + env_write += (PhysPt)(strlen(path_string)+1); + MEM_BlockWrite(env_write,comspec_string,(Bitu)(strlen(comspec_string)+1)); + env_write += (PhysPt)(strlen(comspec_string)+1); + MEM_BlockWrite(env_write,prompt_string_config,(Bitu)(strlen(prompt_string_config)+1)); + env_write +=(PhysPt)(strlen(prompt_string_config)+1); + mem_writeb(env_write++,0); + mem_writew(env_write,1); + env_write+=2; + MEM_BlockWrite(env_write,full_name,(Bitu)(strlen(full_name)+1)); + } + else { + /* Setup environment */ + PhysPt env_write=PhysMake(env_seg,0); + MEM_BlockWrite(env_write,path_string,(Bitu)(strlen(path_string)+1)); + env_write += (PhysPt)(strlen(path_string)+1); + // Do not write COMSPEC or PROMPT, this is not a general purpose shell + mem_writeb(env_write++,0); + mem_writew(env_write,1); + env_write+=2; + mem_writeb(env_write++,0);// No, we're not writing the full name either + } + + DOS_PSP psp(psp_seg); + psp.MakeNew(0); + dos.psp(psp_seg); + + /* The start of the filetable in the psp must look like this: + * 01 01 01 00 02 + * In order to achieve this: First open 2 files. Close the first and + * duplicate the second (so the entries get 01) */ + DOS_OpenExistingSFTEntry(0,1); + DOS_OpenExistingSFTEntry(1,1); + DOS_OpenExistingSFTEntry(2,1); + DOS_OpenExistingSFTEntry(3,0); + DOS_OpenExistingSFTEntry(4,2); + + psp.SetSize(psp_seg + total_sz); + psp.SetStack(((unsigned int)stack_seg << 16u) + (unsigned int)reg_sp); + + /* Create appearance of handle inheritance by first shell */ + for (uint16_t i=0;i<5;i++) { + uint8_t handle=psp.GetFileHandle(i); + if (Files[handle]) Files[handle]->AddRef(); + } + + psp.SetParent(psp_seg); + /* Set the environment */ + psp.SetEnvironment(env_seg); + /* Set the command line for the shell start up */ + CommandTail tail; + tail.count=(uint8_t)0; + memset(&tail.buffer, 0, CTBUF); + MEM_BlockWrite(PhysMake(psp_seg,CTBUF+1),&tail,CTBUF+1); + + /* Setup internal DOS Variables */ + dos.dta(RealMake(psp_seg,CTBUF+1)); + dos.psp(psp_seg); +#endif +} + +void CONFIGSHELL_Run() { +#if !defined(OSFREE) + if (!config_shell_run) return; + + dos_shell_running_program = false; +#if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU + Reflect_Menu(); +#endif + + LOG(LOG_MISC,LOG_DEBUG)("Running CONFIG shell now"); + + if (first_shell != NULL) E_Exit("Attempt to start shell when shell already running"); + SHELL_ProgramStart_Config_shell(&first_shell); + prepared = true; + i4dos=false; + try { + first_shell->Run(); + delete first_shell; + first_shell = nullptr;//Make clear that it shouldn't be used anymore + prepared = false; + dos_shell_running_program = false; +#if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU + Reflect_Menu(); +#endif + } + catch (...) { + delete first_shell; + first_shell = nullptr;//Make clear that it shouldn't be used anymore + prepared = false; + dos_shell_running_program = false; +#if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU + Reflect_Menu(); +#endif + throw; + } +#endif +} + diff --git a/src/shell/shell_batch.cpp b/src/shell/shell_batch.cpp index 342fede07bc..930c88b920f 100644 --- a/src/shell/shell_batch.cpp +++ b/src/shell/shell_batch.cpp @@ -33,13 +33,6 @@ BatchFile::BatchFile(DOS_Shell * host,char const * const resolved_name,char cons DOS_Canonicalize(resolved_name,totalname); // Get fullname including drive specification cmd = new CommandLine(entered_name,cmd_line); filename = totalname; - - //Test if file is openable - if (!DOS_OpenFile(totalname,(DOS_NOT_INHERIT|OPEN_READ),&file_handle)) { - //TODO Come up with something better - E_Exit("SHELL:Can't open BatchFile %s",totalname); - } - DOS_CloseFile(file_handle); } BatchFile::~BatchFile() { @@ -66,6 +59,13 @@ bool BatchFile::ReadLine(char * line) { n=1; DOS_ReadFile(file_handle,&c,&n); if (n>0) { + if (c==0x1a) { + // Stop at EOF character + n=0; + this->location=0; + DOS_SeekFile(file_handle,&(this->location),DOS_SEEK_END); + break; + } /* Why are we filtering this ? * Exclusion list: tab for batch files * escape for ansi diff --git a/src/shell/shell_cmds.cpp b/src/shell/shell_cmds.cpp index 81681f21e29..762be898b90 100644 --- a/src/shell/shell_cmds.cpp +++ b/src/shell/shell_cmds.cpp @@ -22,4772 +22,4879 @@ */ - #include "dosbox.h" - #include "logging.h" - #include "shell.h" - #include "callback.h" - #include "dos_inc.h" - #include "regs.h" - #include "pic.h" - #include "keyboard.h" - #include "timer.h" - #include "../ints/int10.h" - #include - #include - #include "bios.h" - #include "../dos/drives.h" - #include "support.h" - #include "control.h" - #include "paging.h" - #include "menu.h" - #include "jfont.h" - #include "render.h" - #include - #include - #include - #include - #include - #include - #include "sdlmain.h" - #include "menudef.h" - #include "build_timestamp.h" - #include "version_string.h" - - #include - - #if defined(_MSC_VER) - # pragma warning(disable:4244) /* const fmath::local::uint64_t to double possible loss of data */ - #endif - - SHELL_Cmd cmd_list[]={ - { "DIR", 0, &DOS_Shell::CMD_DIR, "SHELL_CMD_DIR_HELP"}, - { "CD", 0, &DOS_Shell::CMD_CHDIR, "SHELL_CMD_CHDIR_HELP"}, - { "ALIAS", 1, &DOS_Shell::CMD_ALIAS, "SHELL_CMD_ALIAS_HELP"}, - { "ASSOC", 1, &DOS_Shell::CMD_ASSOC, "SHELL_CMD_ASSOC_HELP"}, - { "ATTRIB", 1, &DOS_Shell::CMD_ATTRIB, "SHELL_CMD_ATTRIB_HELP"}, - { "BREAK", 1, &DOS_Shell::CMD_BREAK, "SHELL_CMD_BREAK_HELP"}, - { "CALL", 1, &DOS_Shell::CMD_CALL, "SHELL_CMD_CALL_HELP"}, - { "CHDIR", 1, &DOS_Shell::CMD_CHDIR, "SHELL_CMD_CHDIR_HELP"}, - //{ "CHOICE", 1, &DOS_Shell::CMD_CHOICE, "SHELL_CMD_CHOICE_HELP"}, // CHOICE as a program (Z:\DOS\CHOICE.COM) instead of shell command - { "CLS", 0, &DOS_Shell::CMD_CLS, "SHELL_CMD_CLS_HELP"}, - { "COPY", 0, &DOS_Shell::CMD_COPY, "SHELL_CMD_COPY_HELP"}, - { "CHCP", 1, &DOS_Shell::CMD_CHCP, "SHELL_CMD_CHCP_HELP"}, - //{ "COUNTRY", 1, &DOS_Shell::CMD_COUNTRY, "SHELL_CMD_COUNTRY_HELP"}, // COUNTRY as a program (Z:\SYSTEM\COUNTRY.COM) instead of shell command - { "CTTY", 1, &DOS_Shell::CMD_CTTY, "SHELL_CMD_CTTY_HELP"}, - { "DATE", 0, &DOS_Shell::CMD_DATE, "SHELL_CMD_DATE_HELP"}, - { "DEL", 0, &DOS_Shell::CMD_DELETE, "SHELL_CMD_DELETE_HELP"}, - //{ "DELTREE", 1, &DOS_Shell::CMD_DELTREE, "SHELL_CMD_DELTREE_HELP"}, // DELTREE as a program (Z:\DOS\DELTREE.EXE) instead of shell command - { "ECHO", 0, &DOS_Shell::CMD_ECHO, "SHELL_CMD_ECHO_HELP"}, - { "ERASE", 1, &DOS_Shell::CMD_DELETE, "SHELL_CMD_DELETE_HELP"}, - { "EXIT", 0, &DOS_Shell::CMD_EXIT, "SHELL_CMD_EXIT_HELP"}, - { "FOR", 1, &DOS_Shell::CMD_FOR, "SHELL_CMD_FOR_HELP"}, - { "GOTO", 1, &DOS_Shell::CMD_GOTO, "SHELL_CMD_GOTO_HELP"}, - //{ "HELP", 1, &DOS_Shell::CMD_HELP, "SHELL_CMD_HELP_HELP"}, // HELP as a program (Z:\SYSTEM\HELP.COM) instead of shell command - { "HISTORY", 1, &DOS_Shell::CMD_HISTORY, "SHELL_CMD_HISTORY_HELP"}, - { "IF", 1, &DOS_Shell::CMD_IF, "SHELL_CMD_IF_HELP"}, - { "LFNFOR", 1, &DOS_Shell::CMD_LFNFOR, "SHELL_CMD_LFNFOR_HELP"}, - { "LH", 1, &DOS_Shell::CMD_LOADHIGH, "SHELL_CMD_LOADHIGH_HELP"}, - { "LOADHIGH", 1, &DOS_Shell::CMD_LOADHIGH, "SHELL_CMD_LOADHIGH_HELP"}, - //{ "LS", 1, &DOS_Shell::CMD_LS, "SHELL_CMD_LS_HELP"}, // LS as a program (Z:\BIN\LS.COM) instead of shell command - { "MD", 0, &DOS_Shell::CMD_MKDIR, "SHELL_CMD_MKDIR_HELP"}, - { "MKDIR", 1, &DOS_Shell::CMD_MKDIR, "SHELL_CMD_MKDIR_HELP"}, - { "MORE", 1, &DOS_Shell::CMD_MORE, "SHELL_CMD_MORE_HELP"}, - { "PATH", 1, &DOS_Shell::CMD_PATH, "SHELL_CMD_PATH_HELP"}, - { "PAUSE", 1, &DOS_Shell::CMD_PAUSE, "SHELL_CMD_PAUSE_HELP"}, - { "PROMPT", 0, &DOS_Shell::CMD_PROMPT, "SHELL_CMD_PROMPT_HELP"}, - { "RD", 0, &DOS_Shell::CMD_RMDIR, "SHELL_CMD_RMDIR_HELP"}, - { "REM", 1, &DOS_Shell::CMD_REM, "SHELL_CMD_REM_HELP"}, - { "REN", 0, &DOS_Shell::CMD_RENAME, "SHELL_CMD_RENAME_HELP"}, - { "RENAME", 1, &DOS_Shell::CMD_RENAME, "SHELL_CMD_RENAME_HELP"}, - { "RMDIR", 1, &DOS_Shell::CMD_RMDIR, "SHELL_CMD_RMDIR_HELP"}, - { "SET", 1, &DOS_Shell::CMD_SET, "SHELL_CMD_SET_HELP"}, - { "SHIFT", 1, &DOS_Shell::CMD_SHIFT, "SHELL_CMD_SHIFT_HELP"}, - { "SUBST", 1, &DOS_Shell::CMD_SUBST, "SHELL_CMD_SUBST_HELP"}, - { "TIME", 0, &DOS_Shell::CMD_TIME, "SHELL_CMD_TIME_HELP"}, - { "TRUENAME", 1, &DOS_Shell::CMD_TRUENAME, "SHELL_CMD_TRUENAME_HELP"}, - { "TYPE", 0, &DOS_Shell::CMD_TYPE, "SHELL_CMD_TYPE_HELP"}, - { "VER", 0, &DOS_Shell::CMD_VER, "SHELL_CMD_VER_HELP"}, - { "VERIFY", 1, &DOS_Shell::CMD_VERIFY, "SHELL_CMD_VERIFY_HELP"}, - { "VOL", 0, &DOS_Shell::CMD_VOL, "SHELL_CMD_VOL_HELP"}, - { "POPD", 1, &DOS_Shell::CMD_POPD, "SHELL_CMD_POPD_HELP"}, - { "PUSHD", 1, &DOS_Shell::CMD_PUSHD, "SHELL_CMD_PUSHD_HELP"}, - #if C_DEBUG - // Additional commands for debugging purposes in DOSBox-X - { "DEBUGBOX", 1, &DOS_Shell::CMD_DEBUGBOX, "SHELL_CMD_DEBUGBOX_HELP"}, - //{ "INT2FDBG", 1, &DOS_Shell::CMD_INT2FDBG, "SHELL_CMD_INT2FDBG_HELP"}, // INT2FDBG as a program (Z:\DEBUG\INT2FDBG.COM) instead of shell command - #endif - // Advanced commands specific to DOSBox-X - //{ "ADDKEY", 1, &DOS_Shell::CMD_ADDKEY, "SHELL_CMD_ADDKEY_HELP"}, // ADDKEY as a program (Z:\BIN\ADDKEY.COM) instead of shell command - { "DX-CAPTURE", 1, &DOS_Shell::CMD_DXCAPTURE, "SHELL_CMD_DXCAPTURE_HELP"}, - { nullptr, 0, nullptr, nullptr } - }; - - const char *GetCmdName(int i) { - size_t n = sizeof(cmd_list)/sizeof(cmd_list[0])-1; - return i>n?NULL:cmd_list[i].name; - } - - extern int enablelfn, lfn_filefind_handle, file_access_tries, lastmsgcp; - extern bool date_host_forced, usecon, outcon, rsize, autoboxdraw, dbcs_sbcs, sync_time, manualtime, inshell, noassoc, dotype, loadlang, chinasea; - extern unsigned long freec; - extern uint8_t DOS_GetAnsiAttr(void); - extern uint16_t countryNo, altcp_to_unicode[256]; - extern bool isDBCSCP(), isKanji1(uint8_t chr), shiftjis_lead_byte(int c), TTF_using(void), Network_IsNetworkResource(const char * filename); - extern bool CheckBoxDrawing(uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4), GFX_GetPreventFullscreen(void), DOS_SetAnsiAttr(uint8_t attr); - extern bool systemmessagebox(char const * aTitle, char const * aMessage, char const * aDialogType, char const * aIconType, int aDefaultButton); - extern void Load_Language(std::string name), GetExpandedPath(std::string &path); - extern void MAPPER_AutoType(std::vector &sequence, const uint32_t wait_ms, const uint32_t pace_ms, bool choice); - extern void DOS_SetCountry(uint16_t countryNo), DOSV_FillScreen(void); - void clearFontCache(void); - std::string GetDOSBoxXPath(bool withexe=false); - FILE *testLoadLangFile(const char *fname); - Bitu DOS_ChangeCodepage(int32_t codepage, const char* codepagefile); - bool CheckDBCSCP(int32_t codepage), SwitchLanguage(int oldcp, int newcp, bool confirm); - void makestdcp950table(), makeseacp951table(); - #if C_OPENGL - bool OpenGL_using(void); - #endif - void UpdateSDLDrawTexture(); - - static int32_t lastsetcp = 0; - bool CHCP_changed = false; - - /* support functions */ - static char empty_char = 0; - static char* empty_string = &empty_char; - static void StripSpaces(char*&args) { - while(args && *args && isspace(*reinterpret_cast(args))) - args++; - } - - static void StripSpaces(char*&args,char also) { - while(args && *args && (isspace(*reinterpret_cast(args)) || (*args == also))) - args++; - } - - static char* ExpandDot(char*args, char* buffer , size_t bufsize, bool expand) { - if(*args == '.') { - if(*(args+1) == 0){ - safe_strncpy(buffer, "*.*", bufsize); - return buffer; - } - if( (*(args+1) != '.') && (*(args+1) != '\\') && expand) { - buffer[0] = '*'; - buffer[1] = 0; - if (bufsize > 2) strncat(buffer,args,bufsize - 1 /*used buffer portion*/ - 1 /*trailing zero*/ ); - return buffer; - } else - safe_strncpy (buffer, args, bufsize); - } - else safe_strncpy(buffer,args, bufsize); - return buffer; - } - - static char* ExpandDotMore(char*args, char* buffer , size_t bufsize) { - char * find_last; - find_last=strrchr_dbcs(args,'\\'); - if (find_last!=NULL) find_last++; - if (find_last!=NULL && *find_last == '.') { - if(*(find_last+1) == 0){ - safe_strncpy(buffer, args, bufsize); - return buffer; - } - if( (*(find_last+1) != '.')) { - *find_last = 0; - strcpy(buffer, args); - *find_last = '.'; - size_t len = strlen(buffer); - buffer[len] = '*'; - buffer[len+1] = 0; - if (bufsize > len + 2) strncat(buffer,find_last,bufsize - len - 1 /*used buffer portion*/ - 1 /*trailing zero*/ ); - else safe_strncpy(buffer, args, bufsize); - return buffer; - } else - safe_strncpy(buffer, args, bufsize); - } - else safe_strncpy(buffer, args, bufsize); - return buffer; - } - - bool DOS_Shell::CheckConfig(char* cmd_in,char*line) { - bool quote=false; - if (strlen(cmd_in)>2&&cmd_in[0]=='"'&&cmd_in[strlen(cmd_in)-1]=='"') { - cmd_in[strlen(cmd_in)-1]=0; - cmd_in++; - quote=true; - } - Section* test = control->GetSectionFromProperty(cmd_in); - if(!test) return false; - if(line && !line[0]) { - std::string val = test->GetPropValue(cmd_in); - if(val != NO_SUCH_PROPERTY) WriteOut("%s\n",val.c_str()); - return true; - } - char newcom[1024]; newcom[0] = 0; strcpy(newcom,"z:\\system\\config -set "); - if (line != NULL) { - line=trim(line); - if (*line=='=') line=trim(++line); - if (line[0]=='"'&&line[strlen(line)-1]=='"') { - line[strlen(line)-1]=0; - line++; - quote=true; - } - if (quote) strcat(newcom,"\""); - strcat(newcom,test->GetName()); strcat(newcom," "); - strcat(newcom,cmd_in); - strcat(newcom, "="); - strcat(newcom, line); - if (quote) strcat(newcom,"\""); - } else - E_Exit("'line' in CheckConfig is NULL"); - DoCommand(newcom); - return true; - } - - bool enable_config_as_shell_commands = false; - - bool DOS_Shell::execute_shell_cmd(char *name, char *arguments) { - // SHELL_Cmd shell_cmd = {}; /* unused */ - uint32_t cmd_index=0; - while (cmd_list[cmd_index].name) { - if (strcasecmp(cmd_list[cmd_index].name,name)==0) { - (this->*(cmd_list[cmd_index].handler))(arguments); - return true; - } - cmd_index++; - } - return false; - } - - void DOS_Shell::DoCommand(char * line) { - /* First split the line into command and arguments */ - std::string origin_cmd_line = line; - std::string last_alias_cmd; - std::string altered_cmd_line; - int alias_counter = 0; - __do_command_begin: - if (alias_counter > 64) { - WriteOut(MSG_Get("SHELL_EXECUTE_ALIAS_EXPAND_OVERFLOW"), origin_cmd_line.c_str()); - } - line=trim(line); - char cmd_buffer[CMD_MAXLINE]; - char * cmd_write=cmd_buffer; - int c=0,q=0; - while (*line) { - if (*line == '/' || *line == '\t') break; - - if ((q & 1) == 0) { - if (*line == ' ' || *line == '=') break; - - if (*line == '.' || *line == ';' || (*line == ':' && !(c == 1 && tolower(*(line-1)) >= 'a' && tolower(*(line-1)) <= 'z')) || *line == '[' || *line == ']' || *line == '\\' || *line == '/' || *line == '\"' || *line == '+') { //allow stuff like cd.. and dir.exe cd\kees - *cmd_write=0; - if (execute_shell_cmd(cmd_buffer,line)) return; - } - } - c++; - if (*line == '"') q++; - *cmd_write++=*line++; - } - *cmd_write=0; - if (strlen(cmd_buffer)==0) { - if (strlen(line)&&line[0]=='/') WriteOut(MSG_Get("SHELL_EXECUTE_ILLEGAL_COMMAND"),line); - return; - } - cmd_alias_map_t::iterator iter = cmd_alias.find(cmd_buffer); - if (iter != cmd_alias.end() && last_alias_cmd != cmd_buffer) { - alias_counter++; - altered_cmd_line = iter->second + " " + line; - line = (char*)altered_cmd_line.c_str(); - last_alias_cmd = iter->first; - goto __do_command_begin; - } - - /* Check the internal list */ - if (execute_shell_cmd(cmd_buffer,line)) return; - - /* This isn't an internal command execute it */ - char ldir[CROSS_LEN], *p=ldir; - if (strchr(cmd_buffer,'\"')&&DOS_GetSFNPath(cmd_buffer,ldir,false)) { - if (!strchr_dbcs(cmd_buffer, '\\') && strrchr_dbcs(ldir, '\\')) - p=strrchr_dbcs(ldir, '\\')+1; - if (uselfn&&strchr(p, ' ')&&!DOS_FileExists(("\""+std::string(p)+"\"").c_str())) { - bool append=false; - if (DOS_FileExists(("\""+std::string(p)+".COM\"").c_str())) {append=true;strcat(p, ".COM");} - else if (DOS_FileExists(("\""+std::string(p)+".EXE\"").c_str())) {append=true;strcat(p, ".EXE");} - else if (DOS_FileExists(("\""+std::string(p)+".BAT\"").c_str())) {append=true;strcat(p, ".BAT");} - if (append&&DOS_GetSFNPath(("\""+std::string(p)+"\"").c_str(), cmd_buffer,false)) if(Execute(cmd_buffer,line)) return; - } - if(Execute(p,line)) return; - } else - if(Execute(cmd_buffer,line)) return; - if(enable_config_as_shell_commands && CheckConfig(cmd_buffer,line)) return; - std::string errhandler = static_cast(control->GetSection("dos"))->Get_string("badcommandhandler"); - if (errhandler.size()&&!noassoc) { - noassoc=true; - LOG_MSG("errhandler %s line %s\n", errhandler.c_str(), origin_cmd_line.c_str()); - DoCommand((char *)(errhandler+" "+origin_cmd_line).c_str()); - noassoc=false; - } else - WriteOut(MSG_Get("SHELL_EXECUTE_ILLEGAL_COMMAND"),cmd_buffer); - } - - #define HELP(command) \ - if (ScanCMDBool(args,"?")) { \ - uint8_t attr = DOS_GetAnsiAttr(); \ - WriteOut(MSG_Get("SHELL_CMD_" command "_HELP")); \ - const char* long_m = MSG_Get("SHELL_CMD_" command "_HELP_LONG"); \ - WriteOut("\n"); \ - if(strcmp("Message not Found!\n",long_m)) WriteOut(long_m); \ - else WriteOut(command "\n"); \ - if (attr) DOS_SetAnsiAttr(attr); \ - return; \ - } - - #if C_DEBUG - extern Bitu int2fdbg_hook_callback; - static Bitu INT2FDBG_Handler(void) { - if (reg_ax == 0x1605) { /* Windows init broadcast */ - int patience = 500; - Bitu st_seg,st_ofs; - - LOG_MSG("INT 2Fh debug hook: Caught Windows init broadcast results (ES:BX=%04x:%04x DS:SI=%04x:%04x CX=%04x DX=%04x DI=%04x)\n", - SegValue(es),reg_bx, - SegValue(ds),reg_si, - reg_cx,reg_dx,reg_di); - - st_seg = SegValue(es); - st_ofs = reg_bx; - while (st_seg != 0 || st_ofs != 0) { - unsigned char v_major,v_minor; - Bitu st_seg_next,st_ofs_next; - Bitu idrc_seg,idrc_ofs; - Bitu vdev_seg,vdev_ofs; - Bitu name_seg,name_ofs; - char devname[64]; - PhysPt st_o; - - if (--patience <= 0) { - LOG_MSG("**WARNING: Chain is too long. Something might have gotten corrupted\n"); - break; - } - - st_o = PhysMake(st_seg,st_ofs); - /* +0x00: Major, minor version of info structure - * +0x02: pointer to next startup info structure or 0000:0000 - * +0x06: pointer to ASCIIZ name of virtual device or 0000:0000 - * +0x0A: virtual device ref data (pointer to?? or actual data??) or 0000:0000 - * +0x0E: pointer to instance data records or 0000:0000 - * Windows 95 or later (v4.0+): - * +0x12: pointer to optionally-instanced data records or 0000:0000 */ - v_major = mem_readb(st_o+0x00); - v_minor = mem_readb(st_o+0x01); - st_seg_next = mem_readw(st_o+0x02+2); - st_ofs_next = mem_readw(st_o+0x02+0); - name_ofs = mem_readw(st_o+0x06+0); - name_seg = mem_readw(st_o+0x06+2); - vdev_ofs = mem_readw(st_o+0x0A+0); - vdev_seg = mem_readw(st_o+0x0A+2); - idrc_ofs = mem_readw(st_o+0x0A+4); /* FIXME: 0x0E+0 and 0x0E+2 generates weird compiler error WTF?? */ - idrc_seg = mem_readw(st_o+0x0A+6); - - { - devname[0] = 0; - if (name_seg != 0 || name_ofs != 0) { - unsigned char c; - unsigned int i; - PhysPt scan; - - scan = PhysMake(name_seg,name_ofs); - for (i=0;i < 63 && (c=mem_readb(scan++)) != 0;) devname[i++] = (char)c; - devname[i] = 0; - } - } - - LOG_MSG(" >> Version %u.%u\n",v_major,v_minor); - LOG_MSG(" Next entry at %04x:%04x\n",(int)st_seg_next,(int)st_ofs_next); - LOG_MSG(" Virtual device name: %04x:%04x '%s'\n",(int)name_seg,(int)name_ofs,devname); - LOG_MSG(" Virtual dev ref data: %04x:%04x\n",(int)vdev_seg,(int)vdev_ofs); - LOG_MSG(" Instance data records: %04x:%04x\n",(int)idrc_seg,(int)idrc_ofs); - - st_seg = st_seg_next; - st_ofs = st_ofs_next; - } - - LOG_MSG("----END CHAIN\n"); - } - - return CBRET_NONE; - } - - void Int2fhook() { - uint32_t old_int2Fh; - PhysPt w; - - int2fdbg_hook_callback = CALLBACK_Allocate(); - CALLBACK_Setup(int2fdbg_hook_callback,&INT2FDBG_Handler,CB_IRET,"INT 2Fh DBG callback"); - - /* record old vector, set our new vector */ - old_int2Fh = RealGetVec(0x2f); - w = CALLBACK_PhysPointer(int2fdbg_hook_callback); - RealSetVec(0x2f,CALLBACK_RealPointer(int2fdbg_hook_callback)); - - /* overwrite the callback with code to chain the call down, then invoke our callback on the way back up: */ - - /* first, chain to the previous INT 15h handler */ - phys_writeb(w++,(uint8_t)0x9C); //PUSHF - phys_writeb(w++,(uint8_t)0x9A); //CALL FAR
- phys_writew(w,(uint16_t)(old_int2Fh&0xFFFF)); w += 2; //offset - phys_writew(w,(uint16_t)((old_int2Fh>>16)&0xFFFF)); w += 2; //seg - - /* then, having returned from it, invoke our callback */ - phys_writeb(w++,(uint8_t)0xFE); //GRP 4 - phys_writeb(w++,(uint8_t)0x38); //Extra Callback instruction - phys_writew(w,(uint16_t)int2fdbg_hook_callback); w += 2; //The immediate word - - /* return */ - phys_writeb(w++,(uint8_t)0xCF); //IRET - } - - /* NTS: I know I could just modify the DOS kernel's INT 2Fh code to receive the init call, - * the problem is that at that point, the registers do not yet contain anything interesting. - * all the interesting results of the call are added by TSRs on the way back UP the call - * chain. The purpose of this program therefore is to hook INT 2Fh on the other end - * of the call chain so that we can see the results just before returning INT 2Fh back - * to WIN.COM */ - void DOS_Shell::CMD_INT2FDBG(char * args) { - //HELP("INT2FDBG"); - while (*args == ' ') args++; - - /* TODO: Allow /U to remove INT 2Fh hook */ - if (ScanCMDBool(args,"I")) { - if (int2fdbg_hook_callback == 0) { - Int2fhook(); - LOG_MSG("INT 2Fh debugging hook set\n"); - WriteOut("INT 2Fh hook has been set.\n"); - } else - WriteOut("INT 2Fh hook was already set up.\n"); - } else if (*args) - WriteOut(MSG_Get("SHELL_INVALID_PARAMETER"), args); - } - #endif - - void DOS_Shell::CMD_BREAK(char * args) { - HELP("BREAK"); - args = trim(args); - if (!*args) - WriteOut("BREAK is %s\n", dos.breakcheck ? "on" : "off"); - else if (!strcasecmp(args, "OFF")) - dos.breakcheck = false; - else if (!strcasecmp(args, "ON")) - dos.breakcheck = true; - else - WriteOut("Must specify ON or OFF\n"); - } - - bool is_ANSI_installed(Program *shell); - void DOS_Shell::CMD_CLS(char * args) { - HELP("CLS"); - if ((CurMode->type==M_TEXT || IS_PC98_ARCH) && is_ANSI_installed(this)) - WriteOut("\033[2J"); +#include "dosbox.h" +#include "logging.h" +#include "shell.h" +#include "callback.h" +#include "dos_inc.h" +#include "regs.h" +#include "pic.h" +#include "keyboard.h" +#include "timer.h" +#include "../ints/int10.h" +#include +#include +#include "bios.h" +#include "../dos/drives.h" +#include "support.h" +#include "control.h" +#include "paging.h" +#include "menu.h" +#include "jfont.h" +#include "render.h" +#include +#include +#include +#include +#include +#include +#include "sdlmain.h" +#include "menudef.h" +#include "build_timestamp.h" +#include "version_string.h" + +#include + +#if defined(_MSC_VER) +# pragma warning(disable:4244) /* const fmath::local::uint64_t to double possible loss of data */ +#endif + +SHELL_Cmd cmd_list[]={ +{ "DIR", 0, &DOS_Shell::CMD_DIR, "SHELL_CMD_DIR_HELP"}, +{ "CD", 0, &DOS_Shell::CMD_CHDIR, "SHELL_CMD_CHDIR_HELP"}, +#if !defined(OSFREE) +{ "ALIAS", 1, &DOS_Shell::CMD_ALIAS, "SHELL_CMD_ALIAS_HELP"}, +{ "ASSOC", 1, &DOS_Shell::CMD_ASSOC, "SHELL_CMD_ASSOC_HELP"}, +{ "ATTRIB", 1, &DOS_Shell::CMD_ATTRIB, "SHELL_CMD_ATTRIB_HELP"}, +{ "BREAK", 1, &DOS_Shell::CMD_BREAK, "SHELL_CMD_BREAK_HELP"}, +#endif +{ "CALL", 1, &DOS_Shell::CMD_CALL, "SHELL_CMD_CALL_HELP"}, +{ "CHDIR", 1, &DOS_Shell::CMD_CHDIR, "SHELL_CMD_CHDIR_HELP"}, +#if !defined(OSFREE) +//{ "CHOICE", 1, &DOS_Shell::CMD_CHOICE, "SHELL_CMD_CHOICE_HELP"}, // CHOICE as a program (Z:\DOS\CHOICE.COM) instead of shell command +{ "CLS", 0, &DOS_Shell::CMD_CLS, "SHELL_CMD_CLS_HELP"}, +{ "COPY", 0, &DOS_Shell::CMD_COPY, "SHELL_CMD_COPY_HELP"}, +{ "CHCP", 1, &DOS_Shell::CMD_CHCP, "SHELL_CMD_CHCP_HELP"}, +//{ "COUNTRY", 1, &DOS_Shell::CMD_COUNTRY, "SHELL_CMD_COUNTRY_HELP"}, // COUNTRY as a program (Z:\SYSTEM\COUNTRY.COM) instead of shell command +{ "CTTY", 1, &DOS_Shell::CMD_CTTY, "SHELL_CMD_CTTY_HELP"}, +{ "DATE", 0, &DOS_Shell::CMD_DATE, "SHELL_CMD_DATE_HELP"}, +{ "DEL", 0, &DOS_Shell::CMD_DELETE, "SHELL_CMD_DELETE_HELP"}, +//{ "DELTREE", 1, &DOS_Shell::CMD_DELTREE, "SHELL_CMD_DELTREE_HELP"}, // DELTREE as a program (Z:\DOS\DELTREE.EXE) instead of shell command +#endif +{ "ECHO", 0, &DOS_Shell::CMD_ECHO, "SHELL_CMD_ECHO_HELP"}, +#if !defined(OSFREE) +{ "ERASE", 1, &DOS_Shell::CMD_DELETE, "SHELL_CMD_DELETE_HELP"}, +#endif +{ "EXIT", 0, &DOS_Shell::CMD_EXIT, "SHELL_CMD_EXIT_HELP"}, +{ "FOR", 1, &DOS_Shell::CMD_FOR, "SHELL_CMD_FOR_HELP"}, +{ "GOTO", 1, &DOS_Shell::CMD_GOTO, "SHELL_CMD_GOTO_HELP"}, +#if !defined(OSFREE) +//{ "HELP", 1, &DOS_Shell::CMD_HELP, "SHELL_CMD_HELP_HELP"}, // HELP as a program (Z:\SYSTEM\HELP.COM) instead of shell command +{ "HISTORY", 1, &DOS_Shell::CMD_HISTORY, "SHELL_CMD_HISTORY_HELP"}, +#endif +{ "IF", 1, &DOS_Shell::CMD_IF, "SHELL_CMD_IF_HELP"}, +#if !defined(OSFREE) +{ "LFNFOR", 1, &DOS_Shell::CMD_LFNFOR, "SHELL_CMD_LFNFOR_HELP"}, +{ "LH", 1, &DOS_Shell::CMD_LOADHIGH, "SHELL_CMD_LOADHIGH_HELP"}, +{ "LOADHIGH", 1, &DOS_Shell::CMD_LOADHIGH, "SHELL_CMD_LOADHIGH_HELP"}, +//{ "LS", 1, &DOS_Shell::CMD_LS, "SHELL_CMD_LS_HELP"}, // LS as a program (Z:\BIN\LS.COM) instead of shell command +{ "MD", 0, &DOS_Shell::CMD_MKDIR, "SHELL_CMD_MKDIR_HELP"}, +{ "MKDIR", 1, &DOS_Shell::CMD_MKDIR, "SHELL_CMD_MKDIR_HELP"}, +{ "MORE", 1, &DOS_Shell::CMD_MORE, "SHELL_CMD_MORE_HELP"}, +{ "PATH", 1, &DOS_Shell::CMD_PATH, "SHELL_CMD_PATH_HELP"}, +{ "PAUSE", 1, &DOS_Shell::CMD_PAUSE, "SHELL_CMD_PAUSE_HELP"}, +{ "PROMPT", 0, &DOS_Shell::CMD_PROMPT, "SHELL_CMD_PROMPT_HELP"}, +{ "RD", 0, &DOS_Shell::CMD_RMDIR, "SHELL_CMD_RMDIR_HELP"}, +#endif +{ "REM", 1, &DOS_Shell::CMD_REM, "SHELL_CMD_REM_HELP"}, +#if !defined(OSFREE) +{ "REN", 0, &DOS_Shell::CMD_RENAME, "SHELL_CMD_RENAME_HELP"}, +{ "RENAME", 1, &DOS_Shell::CMD_RENAME, "SHELL_CMD_RENAME_HELP"}, +{ "RMDIR", 1, &DOS_Shell::CMD_RMDIR, "SHELL_CMD_RMDIR_HELP"}, +#endif +{ "SET", 1, &DOS_Shell::CMD_SET, "SHELL_CMD_SET_HELP"}, +{ "SHIFT", 1, &DOS_Shell::CMD_SHIFT, "SHELL_CMD_SHIFT_HELP"}, +#if !defined(OSFREE) +{ "SUBST", 1, &DOS_Shell::CMD_SUBST, "SHELL_CMD_SUBST_HELP"}, +{ "TIME", 0, &DOS_Shell::CMD_TIME, "SHELL_CMD_TIME_HELP"}, +{ "TRUENAME", 1, &DOS_Shell::CMD_TRUENAME, "SHELL_CMD_TRUENAME_HELP"}, +{ "TYPE", 0, &DOS_Shell::CMD_TYPE, "SHELL_CMD_TYPE_HELP"}, +{ "VER", 0, &DOS_Shell::CMD_VER, "SHELL_CMD_VER_HELP"}, +{ "VERIFY", 1, &DOS_Shell::CMD_VERIFY, "SHELL_CMD_VERIFY_HELP"}, +{ "VOL", 0, &DOS_Shell::CMD_VOL, "SHELL_CMD_VOL_HELP"}, +#endif +{ "POPD", 1, &DOS_Shell::CMD_POPD, "SHELL_CMD_POPD_HELP"}, +{ "PUSHD", 1, &DOS_Shell::CMD_PUSHD, "SHELL_CMD_PUSHD_HELP"}, +#if !defined(OSFREE) +# if C_DEBUG +// Additional commands for debugging purposes in DOSBox-X +{ "DEBUGBOX", 1, &DOS_Shell::CMD_DEBUGBOX, "SHELL_CMD_DEBUGBOX_HELP"}, +//{ "INT2FDBG", 1, &DOS_Shell::CMD_INT2FDBG, "SHELL_CMD_INT2FDBG_HELP"}, // INT2FDBG as a program (Z:\DEBUG\INT2FDBG.COM) instead of shell command +# endif +// Advanced commands specific to DOSBox-X +//{ "ADDKEY", 1, &DOS_Shell::CMD_ADDKEY, "SHELL_CMD_ADDKEY_HELP"}, // ADDKEY as a program (Z:\BIN\ADDKEY.COM) instead of shell command +{ "DX-CAPTURE", 1, &DOS_Shell::CMD_DXCAPTURE, "SHELL_CMD_DXCAPTURE_HELP"}, +#endif +{ nullptr, 0, nullptr, nullptr } +}; + +const char *GetCmdName(int i) { + size_t n = sizeof(cmd_list)/sizeof(cmd_list[0])-1; + return i>n?NULL:cmd_list[i].name; +} + +extern int enablelfn, lfn_filefind_handle, file_access_tries, lastmsgcp; +extern bool date_host_forced, usecon, outcon, rsize, autoboxdraw, dbcs_sbcs, sync_time, manualtime, inshell, noassoc, dotype, loadlang, chinasea; +extern unsigned long freec; +extern uint8_t DOS_GetAnsiAttr(void); +extern uint16_t countryNo, altcp_to_unicode[256]; +extern bool isDBCSCP(), isKanji1(uint8_t chr), shiftjis_lead_byte(int c), TTF_using(void), Network_IsNetworkResource(const char * filename); +extern bool CheckBoxDrawing(uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4), GFX_GetPreventFullscreen(void), DOS_SetAnsiAttr(uint8_t attr); +extern bool systemmessagebox(char const * aTitle, char const * aMessage, char const * aDialogType, char const * aIconType, int aDefaultButton); +extern void Load_Language(std::string name), GetExpandedPath(std::string &path); +extern void MAPPER_AutoType(std::vector &sequence, const uint32_t wait_ms, const uint32_t pace_ms, bool choice); +extern void DOS_SetCountry(uint16_t countryNo), DOSV_FillScreen(void); +void clearFontCache(void); +std::string GetDOSBoxXPath(bool withexe=false); +Bitu DOS_ChangeCodepage(int32_t codepage, const char* codepagefile); +bool CheckDBCSCP(int32_t codepage), SwitchLanguage(int oldcp, int newcp, bool confirm); +void makestdcp950table(), makeseacp951table(); +#if C_OPENGL +bool OpenGL_using(void); +#endif +void UpdateSDLDrawTexture(); +extern char char_yes, char_no; + +static int32_t lastsetcp = 0; +bool CHCP_changed = false; + +/* support functions */ +static char empty_char = 0; +static char* empty_string = &empty_char; +static void StripSpaces(char*&args) { + while(args && *args && isspace(*reinterpret_cast(args))) + args++; +} + +static void StripSpaces(char*&args,char also) { + while(args && *args && (isspace(*reinterpret_cast(args)) || (*args == also))) + args++; +} + +static char* ExpandDot(char*args, char* buffer , size_t bufsize, bool expand) { + if(*args == '.') { + if(*(args+1) == 0){ + safe_strncpy(buffer, "*.*", bufsize); + return buffer; + } + if( (*(args+1) != '.') && (*(args+1) != '\\') && expand) { + buffer[0] = '*'; + buffer[1] = 0; + if (bufsize > 2) strncat(buffer,args,bufsize - 1 /*used buffer portion*/ - 1 /*trailing zero*/ ); + return buffer; + } else + safe_strncpy (buffer, args, bufsize); + } + else safe_strncpy(buffer,args, bufsize); + return buffer; +} + +static char* ExpandDotMore(char*args, char* buffer , size_t bufsize) { + char * find_last; + find_last=strrchr_dbcs(args,'\\'); + if (find_last!=NULL) find_last++; + if (find_last!=NULL && *find_last == '.') { + if(*(find_last+1) == 0){ + safe_strncpy(buffer, args, bufsize); + return buffer; + } + if( (*(find_last+1) != '.')) { + *find_last = 0; + strcpy(buffer, args); + *find_last = '.'; + size_t len = strlen(buffer); + buffer[len] = '*'; + buffer[len+1] = 0; + if (bufsize > len + 2) strncat(buffer,find_last,bufsize - len - 1 /*used buffer portion*/ - 1 /*trailing zero*/ ); + else safe_strncpy(buffer, args, bufsize); + return buffer; + } else + safe_strncpy(buffer, args, bufsize); + } + else safe_strncpy(buffer, args, bufsize); + return buffer; +} + +bool DOS_Shell::CheckConfig(char* cmd_in,char*line) { + bool quote=false; + if (strlen(cmd_in)>2&&cmd_in[0]=='"'&&cmd_in[strlen(cmd_in)-1]=='"') { + cmd_in[strlen(cmd_in)-1]=0; + cmd_in++; + quote=true; + } + Section* test = control->GetSectionFromProperty(cmd_in); + if(!test) return false; + if(line && !line[0]) { + std::string val = test->GetPropValue(cmd_in); + if(val != NO_SUCH_PROPERTY) WriteOut("%s\n",val.c_str()); + return true; + } + char newcom[1024]; newcom[0] = 0; strcpy(newcom,"z:\\system\\config -set "); + if (line != NULL) { + line=trim(line); + if (*line=='=') line=trim(++line); + if (line[0]=='"'&&line[strlen(line)-1]=='"') { + line[strlen(line)-1]=0; + line++; + quote=true; + } + if (quote) strcat(newcom,"\""); + strcat(newcom,test->GetName()); strcat(newcom," "); + strcat(newcom,cmd_in); + strcat(newcom, "="); + strcat(newcom, line); + if (quote) strcat(newcom,"\""); + } else + E_Exit("'line' in CheckConfig is NULL"); + DoCommand(newcom); + return true; +} + +bool enable_config_as_shell_commands = false; + +bool DOS_Shell::execute_shell_cmd(char *name, char *arguments) { + // SHELL_Cmd shell_cmd = {}; /* unused */ + uint32_t cmd_index=0; + while (cmd_list[cmd_index].name) { + if (strcasecmp(cmd_list[cmd_index].name,name)==0) { + (this->*(cmd_list[cmd_index].handler))(arguments); + return true; + } + cmd_index++; + } + return false; +} + +void DOS_Shell::DoCommand(char * line) { + /* First split the line into command and arguments */ + std::string origin_cmd_line = line; + std::string last_alias_cmd; + std::string altered_cmd_line; + int alias_counter = 0; +__do_command_begin: + if (alias_counter > 64) { + WriteOut(MSG_Get("SHELL_EXECUTE_ALIAS_EXPAND_OVERFLOW"), origin_cmd_line.c_str()); + } + line=trim(line); + char cmd_buffer[CMD_MAXLINE]; + char * cmd_write=cmd_buffer; + int c=0,q=0; + while (*line) { + if (*line == '/' || *line == '\t') break; + + if ((q & 1) == 0) { + if (*line == ' ' || *line == '=') break; + + if (*line == '.' || *line == ';' || (*line == ':' && !(c == 1 && tolower(*(line-1)) >= 'a' && tolower(*(line-1)) <= 'z')) || *line == '[' || *line == ']' || *line == '\\' || *line == '/' || *line == '\"' || *line == '+') { //allow stuff like cd.. and dir.exe cd\kees + *cmd_write=0; + if (execute_shell_cmd(cmd_buffer,line)) return; + } + } + c++; + if (*line == '"') q++; + *cmd_write++=*line++; + } + *cmd_write=0; + if (strlen(cmd_buffer)==0) { + if (strlen(line)&&line[0]=='/') WriteOut(MSG_Get("SHELL_EXECUTE_ILLEGAL_COMMAND"),line); + return; + } + cmd_alias_map_t::iterator iter = cmd_alias.find(cmd_buffer); + if (iter != cmd_alias.end() && last_alias_cmd != cmd_buffer) { + alias_counter++; + altered_cmd_line = iter->second + " " + line; + line = (char*)altered_cmd_line.c_str(); + last_alias_cmd = iter->first; + goto __do_command_begin; + } + + /* Check the internal list */ + if (execute_shell_cmd(cmd_buffer,line)) return; + + /* This isn't an internal command execute it */ + char ldir[CROSS_LEN], *p=ldir; + if (strchr(cmd_buffer,'\"')&&DOS_GetSFNPath(cmd_buffer,ldir,false)) { + if (!strchr_dbcs(cmd_buffer, '\\') && strrchr_dbcs(ldir, '\\')) + p=strrchr_dbcs(ldir, '\\')+1; + if (uselfn&&strchr(p, ' ')&&!DOS_FileExists(("\""+std::string(p)+"\"").c_str())) { + bool append=false; + if (DOS_FileExists(("\""+std::string(p)+".COM\"").c_str())) {append=true;strcat(p, ".COM");} + else if (DOS_FileExists(("\""+std::string(p)+".EXE\"").c_str())) {append=true;strcat(p, ".EXE");} + else if (DOS_FileExists(("\""+std::string(p)+".BAT\"").c_str())) {append=true;strcat(p, ".BAT");} + if (append&&DOS_GetSFNPath(("\""+std::string(p)+"\"").c_str(), cmd_buffer,false)) if(Execute(cmd_buffer,line)) return; + } + if(Execute(p,line)) return; + } else + if(Execute(cmd_buffer,line)) return; + if(enable_config_as_shell_commands && CheckConfig(cmd_buffer,line)) return; + std::string errhandler = static_cast(control->GetSection("dos"))->Get_string("badcommandhandler"); + if (errhandler.size()&&!noassoc) { + noassoc=true; + LOG_MSG("errhandler %s line %s\n", errhandler.c_str(), origin_cmd_line.c_str()); + DoCommand((char *)(errhandler+" "+origin_cmd_line).c_str()); + noassoc=false; + } else + WriteOut(MSG_Get("SHELL_EXECUTE_ILLEGAL_COMMAND"),cmd_buffer); +} + +#define HELP(command) \ + if (ScanCMDBool(args,"?")) { \ + uint8_t attr = DOS_GetAnsiAttr(); \ + WriteOut(MSG_Get("SHELL_CMD_" command "_HELP")); \ + const char* long_m = MSG_Get("SHELL_CMD_" command "_HELP_LONG"); \ + WriteOut("\n"); \ + if(strcmp("Message not Found!\n",long_m)) WriteOut(long_m); \ + else WriteOut(command "\n"); \ + if (attr) DOS_SetAnsiAttr(attr); \ + return; \ + } + +#if C_DEBUG +extern Bitu int2fdbg_hook_callback; +static Bitu INT2FDBG_Handler(void) { + if (reg_ax == 0x1605) { /* Windows init broadcast */ + int patience = 500; + Bitu st_seg,st_ofs; + + LOG_MSG("INT 2Fh debug hook: Caught Windows init broadcast results (ES:BX=%04x:%04x DS:SI=%04x:%04x CX=%04x DX=%04x DI=%04x)\n", + SegValue(es),reg_bx, + SegValue(ds),reg_si, + reg_cx,reg_dx,reg_di); + + st_seg = SegValue(es); + st_ofs = reg_bx; + while (st_seg != 0 || st_ofs != 0) { + unsigned char v_major,v_minor; + Bitu st_seg_next,st_ofs_next; + Bitu idrc_seg,idrc_ofs; + Bitu vdev_seg,vdev_ofs; + Bitu name_seg,name_ofs; + char devname[64]; + PhysPt st_o; + + if (--patience <= 0) { + LOG_MSG("**WARNING: Chain is too long. Something might have gotten corrupted\n"); + break; + } + + st_o = PhysMake(st_seg,st_ofs); + /* +0x00: Major, minor version of info structure + * +0x02: pointer to next startup info structure or 0000:0000 + * +0x06: pointer to ASCIIZ name of virtual device or 0000:0000 + * +0x0A: virtual device ref data (pointer to?? or actual data??) or 0000:0000 + * +0x0E: pointer to instance data records or 0000:0000 + * Windows 95 or later (v4.0+): + * +0x12: pointer to optionally-instanced data records or 0000:0000 */ + v_major = mem_readb(st_o+0x00); + v_minor = mem_readb(st_o+0x01); + st_seg_next = mem_readw(st_o+0x02+2); + st_ofs_next = mem_readw(st_o+0x02+0); + name_ofs = mem_readw(st_o+0x06+0); + name_seg = mem_readw(st_o+0x06+2); + vdev_ofs = mem_readw(st_o+0x0A+0); + vdev_seg = mem_readw(st_o+0x0A+2); + idrc_ofs = mem_readw(st_o+0x0A+4); /* FIXME: 0x0E+0 and 0x0E+2 generates weird compiler error WTF?? */ + idrc_seg = mem_readw(st_o+0x0A+6); + + { + devname[0] = 0; + if (name_seg != 0 || name_ofs != 0) { + unsigned char c; + unsigned int i; + PhysPt scan; + + scan = PhysMake(name_seg,name_ofs); + for (i=0;i < 63 && (c=mem_readb(scan++)) != 0;) devname[i++] = (char)c; + devname[i] = 0; + } + } + + LOG_MSG(" >> Version %u.%u\n",v_major,v_minor); + LOG_MSG(" Next entry at %04x:%04x\n",(int)st_seg_next,(int)st_ofs_next); + LOG_MSG(" Virtual device name: %04x:%04x '%s'\n",(int)name_seg,(int)name_ofs,devname); + LOG_MSG(" Virtual dev ref data: %04x:%04x\n",(int)vdev_seg,(int)vdev_ofs); + LOG_MSG(" Instance data records: %04x:%04x\n",(int)idrc_seg,(int)idrc_ofs); + + st_seg = st_seg_next; + st_ofs = st_ofs_next; + } + + LOG_MSG("----END CHAIN\n"); + } + + return CBRET_NONE; +} + +void Int2fhook() { + uint32_t old_int2Fh; + PhysPt w; + + int2fdbg_hook_callback = CALLBACK_Allocate(); + CALLBACK_Setup(int2fdbg_hook_callback,&INT2FDBG_Handler,CB_IRET,"INT 2Fh DBG callback"); + + /* record old vector, set our new vector */ + old_int2Fh = RealGetVec(0x2f); + w = CALLBACK_PhysPointer(int2fdbg_hook_callback); + RealSetVec(0x2f,CALLBACK_RealPointer(int2fdbg_hook_callback)); + + /* overwrite the callback with code to chain the call down, then invoke our callback on the way back up: */ + + /* first, chain to the previous INT 15h handler */ + phys_writeb(w++,(uint8_t)0x9C); //PUSHF + phys_writeb(w++,(uint8_t)0x9A); //CALL FAR
+ phys_writew(w,(uint16_t)(old_int2Fh&0xFFFF)); w += 2; //offset + phys_writew(w,(uint16_t)((old_int2Fh>>16)&0xFFFF)); w += 2; //seg + + /* then, having returned from it, invoke our callback */ + phys_writeb(w++,(uint8_t)0xFE); //GRP 4 + phys_writeb(w++,(uint8_t)0x38); //Extra Callback instruction + phys_writew(w,(uint16_t)int2fdbg_hook_callback); w += 2; //The immediate word + + /* return */ + phys_writeb(w++,(uint8_t)0xCF); //IRET +} + +/* NTS: I know I could just modify the DOS kernel's INT 2Fh code to receive the init call, + * the problem is that at that point, the registers do not yet contain anything interesting. + * all the interesting results of the call are added by TSRs on the way back UP the call + * chain. The purpose of this program therefore is to hook INT 2Fh on the other end + * of the call chain so that we can see the results just before returning INT 2Fh back + * to WIN.COM */ +void DOS_Shell::CMD_INT2FDBG(char * args) { + //HELP("INT2FDBG"); + while (*args == ' ') args++; + + /* TODO: Allow /U to remove INT 2Fh hook */ + if (ScanCMDBool(args,"I")) { + if (int2fdbg_hook_callback == 0) { + Int2fhook(); + LOG_MSG("INT 2Fh debugging hook set\n"); + WriteOut("INT 2Fh hook has been set.\n"); + } else + WriteOut("INT 2Fh hook was already set up.\n"); + } else if (*args) + WriteOut(MSG_Get("SHELL_INVALID_PARAMETER"), args); +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_BREAK(char * args) { + HELP("BREAK"); + args = trim(args); + if (!*args) + WriteOut("BREAK is %s\n", dos.breakcheck ? "on" : "off"); + else if (!strcasecmp(args, "OFF")) + dos.breakcheck = false; + else if (!strcasecmp(args, "ON")) + dos.breakcheck = true; + else + WriteOut("Must specify ON or OFF\n"); +} +#endif + +bool is_ANSI_installed(Program *shell); +#if !defined(OSFREE) +void DOS_Shell::CMD_CLS(char * args) { + HELP("CLS"); + if ((CurMode->type==M_TEXT || IS_PC98_ARCH) && is_ANSI_installed(this)) + WriteOut("\033[2J"); + else { + uint16_t oldax=reg_ax; + if (IS_DOSV && DOSV_CheckCJKVideoMode()) reg_ax = GetTrueVideoMode(); + else reg_ax=(uint16_t)CurMode->mode; + CALLBACK_RunRealInt(0x10); + reg_ax=oldax; + } +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_DELETE(char* args) { + HELP("DELETE"); + bool optP = ScanCMDBool(args, "P"); + bool optF = ScanCMDBool(args, "F"); + bool optQ = ScanCMDBool(args, "Q"); + + const char char_yes_upper = toupper(char_yes); + const char char_no_upper = toupper(char_no); + + // ignore /f, /s, /ar, /as, /ah and /aa switches for compatibility + ScanCMDBool(args, "S"); + ScanCMDBool(args, "AR"); + ScanCMDBool(args, "AS"); + ScanCMDBool(args, "AH"); + ScanCMDBool(args, "AA"); + + char* rem = ScanCMDRemain(args); + if(rem) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"), rem); + return; + } + if(!*args) { + WriteOut(MSG_Get("SHELL_MISSING_PARAMETER")); + return; + } + + StripSpaces(args); + args = trim(args); + + /* Command uses dta so set it to our internal dta */ + //DOS_DTA dta(dos.dta()); + RealPt save_dta = dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + /* If delete accept switches mind the space in front of them. See the dir /p code */ + + char full[DOS_PATHLENGTH], sfull[DOS_PATHLENGTH + 2]; + char buffer[CROSS_LEN]; + char name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH + 1]; + uint32_t size, hsize; uint16_t time, date; uint8_t attr; + args = ExpandDot(args, buffer, CROSS_LEN, false); + StripSpaces(args); + if(!DOS_Canonicalize(args, full)) { WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); dos.dta(save_dta); return; } + if(strlen(args) && args[strlen(args) - 1] != '\\') { + uint16_t fattr; + if(strcmp(args, "*.*") && DOS_GetFileAttr(args, &fattr) && (fattr & DOS_ATTR_DIRECTORY)) + strcat(args, "\\"); + } + if(strlen(args) && args[strlen(args) - 1] == '\\') strcat(args, "*.*"); + else if(!strcmp(args, ".") || (strlen(args) > 1 && (args[strlen(args) - 2] == ':' || args[strlen(args) - 2] == '\\') && args[strlen(args) - 1] == '.')) { + args[strlen(args) - 1] = '*'; + strcat(args, ".*"); + } + else if(uselfn && strchr(args, '*')) { + char* find_last; + find_last = strrchr_dbcs(args, '\\'); + if(find_last == NULL) find_last = args; + else find_last++; + if(strlen(find_last) > 0 && args[strlen(args) - 1] == '*' && strchr(find_last, '.') == NULL) strcat(args, ".*"); + } + if(!strcmp(args, "*.*") || (strlen(args) > 3 && (!strcmp(args + strlen(args) - 4, "\\*.*") || !strcmp(args + strlen(args) - 4, ":*.*")))) { + if(!optQ) { + first_1: + WriteOut(MSG_Get("SHELL_CMD_DEL_SURE")); + first_2: + uint8_t c; uint16_t n = 1; + DOS_ReadFile(STDIN, &c, &n); + do { + if(c == char_no || c == char_no_upper) { + DOS_WriteFile(STDOUT, &c, &n); + DOS_ReadFile(STDIN, &c, &n); + do switch(c) { + case 0xD: WriteOut("\n"); dos.dta(save_dta); return; + case 0x03: dos.dta(save_dta); return; + case 0x08: WriteOut("\b \b"); goto first_2; + } while(DOS_ReadFile(STDIN, &c, &n)); + } + + if(c == char_yes || c == char_yes_upper) { + DOS_WriteFile(STDOUT, &c, &n); + DOS_ReadFile(STDIN, &c, &n); + do switch(c) { + case 0xD: WriteOut("\n"); goto continue_1; + case 0x03: dos.dta(save_dta); return; + case 0x08: WriteOut("\b \b"); goto first_2; + } while(DOS_ReadFile(STDIN, &c, &n)); + } + + if(c == 0xD) { WriteOut("\n"); goto first_1; } + if(c == 0x03) { dos.dta(save_dta); return; } + if(c == '\t' || c == 0x08) goto first_2; + + DOS_WriteFile(STDOUT, &c, &n); + DOS_ReadFile(STDIN, &c, &n); + do switch(c) { + case 0xD: WriteOut("\n"); goto first_1; + case 0x03: dos.dta(save_dta); return; + case 0x08: WriteOut("\b \b"); goto first_2; + } while(DOS_ReadFile(STDIN, &c, &n)); + goto first_2; + } while(DOS_ReadFile(STDIN, &c, &n)); + } + } + +continue_1: + /* Command uses dta so set it to our internal dta */ + if(!DOS_Canonicalize(args, full)) { WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); dos.dta(save_dta); return; } + char path[DOS_PATHLENGTH], spath[DOS_PATHLENGTH], pattern[DOS_PATHLENGTH], * r = strrchr_dbcs(full, '\\'); + if(r != NULL) { + *r = 0; + strcpy(path, full); + strcat(path, "\\"); + strcpy(pattern, r + 1); + *r = '\\'; + } else { - uint16_t oldax=reg_ax; - if (IS_DOSV && DOSV_CheckCJKVideoMode()) reg_ax = GetTrueVideoMode(); - else reg_ax=(uint16_t)CurMode->mode; - CALLBACK_RunRealInt(0x10); - reg_ax=oldax; - } - } - - void DOS_Shell::CMD_DELETE(char* args) { - HELP("DELETE"); - bool optP = ScanCMDBool(args, "P"); - bool optF = ScanCMDBool(args, "F"); - bool optQ = ScanCMDBool(args, "Q"); - - const char ch_y = MSG_Get("INT21_6523_YESNO_CHARS")[0]; - const char ch_n = MSG_Get("INT21_6523_YESNO_CHARS")[1]; - const char ch_Y = toupper(ch_y); - const char ch_N = toupper(ch_n); - - // ignore /f, /s, /ar, /as, /ah and /aa switches for compatibility - ScanCMDBool(args, "S"); - ScanCMDBool(args, "AR"); - ScanCMDBool(args, "AS"); - ScanCMDBool(args, "AH"); - ScanCMDBool(args, "AA"); - - char* rem = ScanCMDRemain(args); - if(rem) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"), rem); - return; - } - if(!*args) { - WriteOut(MSG_Get("SHELL_MISSING_PARAMETER")); - return; - } - - StripSpaces(args); - args = trim(args); - - /* Command uses dta so set it to our internal dta */ - //DOS_DTA dta(dos.dta()); - RealPt save_dta = dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - /* If delete accept switches mind the space in front of them. See the dir /p code */ - - char full[DOS_PATHLENGTH], sfull[DOS_PATHLENGTH + 2]; - char buffer[CROSS_LEN]; - char name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH + 1]; - uint32_t size, hsize; uint16_t time, date; uint8_t attr; - args = ExpandDot(args, buffer, CROSS_LEN, false); - StripSpaces(args); - if(!DOS_Canonicalize(args, full)) { WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); dos.dta(save_dta); return; } - if(strlen(args) && args[strlen(args) - 1] != '\\') { - uint16_t fattr; - if(strcmp(args, "*.*") && DOS_GetFileAttr(args, &fattr) && (fattr & DOS_ATTR_DIRECTORY)) - strcat(args, "\\"); - } - if(strlen(args) && args[strlen(args) - 1] == '\\') strcat(args, "*.*"); - else if(!strcmp(args, ".") || (strlen(args) > 1 && (args[strlen(args) - 2] == ':' || args[strlen(args) - 2] == '\\') && args[strlen(args) - 1] == '.')) { - args[strlen(args) - 1] = '*'; - strcat(args, ".*"); - } - else if(uselfn && strchr(args, '*')) { - char* find_last; - find_last = strrchr_dbcs(args, '\\'); - if(find_last == NULL) find_last = args; - else find_last++; - if(strlen(find_last) > 0 && args[strlen(args) - 1] == '*' && strchr(find_last, '.') == NULL) strcat(args, ".*"); - } - if(!strcmp(args, "*.*") || (strlen(args) > 3 && (!strcmp(args + strlen(args) - 4, "\\*.*") || !strcmp(args + strlen(args) - 4, ":*.*")))) { - if(!optQ) { - first_1: - WriteOut(MSG_Get("SHELL_CMD_DEL_SURE")); - first_2: - uint8_t c; uint16_t n = 1; - DOS_ReadFile(STDIN, &c, &n); - do { - if(c == ch_n || c == ch_N) { - DOS_WriteFile(STDOUT, &c, &n); - DOS_ReadFile(STDIN, &c, &n); - do switch(c) { - case 0xD: WriteOut("\n"); dos.dta(save_dta); return; - case 0x03: dos.dta(save_dta); return; - case 0x08: WriteOut("\b \b"); goto first_2; - } while(DOS_ReadFile(STDIN, &c, &n)); - } - - if(c == ch_y || c == ch_Y) { - DOS_WriteFile(STDOUT, &c, &n); - DOS_ReadFile(STDIN, &c, &n); - do switch(c) { - case 0xD: WriteOut("\n"); goto continue_1; - case 0x03: dos.dta(save_dta); return; - case 0x08: WriteOut("\b \b"); goto first_2; - } while(DOS_ReadFile(STDIN, &c, &n)); - } - - if(c == 0xD) { WriteOut("\n"); goto first_1; } - if(c == 0x03) { dos.dta(save_dta); return; } - if(c == '\t' || c == 0x08) goto first_2; - - DOS_WriteFile(STDOUT, &c, &n); - DOS_ReadFile(STDIN, &c, &n); - do switch(c) { - case 0xD: WriteOut("\n"); goto first_1; - case 0x03: dos.dta(save_dta); return; - case 0x08: WriteOut("\b \b"); goto first_2; - } while(DOS_ReadFile(STDIN, &c, &n)); - goto first_2; - } while(DOS_ReadFile(STDIN, &c, &n)); - } - } - - continue_1: - /* Command uses dta so set it to our internal dta */ - if(!DOS_Canonicalize(args, full)) { WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); dos.dta(save_dta); return; } - char path[DOS_PATHLENGTH], spath[DOS_PATHLENGTH], pattern[DOS_PATHLENGTH], * r = strrchr_dbcs(full, '\\'); - if(r != NULL) { - *r = 0; - strcpy(path, full); - strcat(path, "\\"); - strcpy(pattern, r + 1); - *r = '\\'; - } - else { - strcpy(path, ""); - strcpy(pattern, full); - } - int k = 0; - for(int i = 0; i < (int)strlen(pattern); i++) - if(pattern[i] != '\"') - pattern[k++] = pattern[i]; - pattern[k] = 0; - strcpy(spath, path); - if(strchr(args, '\"') || uselfn) { - if(!DOS_GetSFNPath(("\"" + std::string(path) + "\\").c_str(), spath, false)) strcpy(spath, path); - if(!strlen(spath) || spath[strlen(spath) - 1] != '\\') strcat(spath, "\\"); - } - std::string pfull = std::string(spath) + std::string(pattern); - int fbak = lfn_filefind_handle; - lfn_filefind_handle = uselfn ? LFN_FILEFIND_INTERNAL : LFN_FILEFIND_NONE; - bool res = DOS_FindFirst(((uselfn && pfull.length() && pfull[0] != '"' ? "\"" : "") + pfull + (uselfn && pfull.length() && pfull[pfull.length() - 1] != '"' ? "\"" : "")).c_str(), 0xffff & ~DOS_ATTR_VOLUME); - if(!res) { - lfn_filefind_handle = fbak; - WriteOut(MSG_Get("SHELL_CMD_DEL_ERROR"), args); - dos.dta(save_dta); - return; - } - lfn_filefind_handle = fbak; - //end can't be 0, but if it is we'll get a nice crash, who cares :) - strcpy(sfull, full); - char* end = strrchr_dbcs(full, '\\') + 1; *end = 0; - char* lend = strrchr_dbcs(sfull, '\\') + 1; *lend = 0; - dta = dos.dta(); - bool exist = false; - lfn_filefind_handle = uselfn ? LFN_FILEFIND_INTERNAL : LFN_FILEFIND_NONE; - while(res) { - dta.GetResult(name, lname, size, hsize, date, time, attr); - if(!optF && (attr & DOS_ATTR_READ_ONLY) && !(attr & DOS_ATTR_DIRECTORY)) { - exist = true; - strcpy(end, name); - strcpy(lend, lname); - WriteOut(MSG_Get("SHELL_CMD_DEL_ERROR"), uselfn ? sfull : full); - } - else if(!(attr & DOS_ATTR_DIRECTORY)) { - exist = true; - strcpy(end, name); - strcpy(lend, lname); - if(optP) { - WriteOut(MSG_Get("SHELL_CMD_DEL_CONFIRM"), uselfn ? sfull : full); - uint8_t c; - uint16_t n = 1; - DOS_ReadFile(STDIN, &c, &n); - if(c == 3) break; - c = c == ch_y || c == ch_Y ? ch_Y : ch_N; - WriteOut("%c\r\n", c); - if(c == ch_N) { lfn_filefind_handle = uselfn ? LFN_FILEFIND_INTERNAL : LFN_FILEFIND_NONE; res = DOS_FindNext(); continue; } - } - if(strlen(full)) { - std::string pfull = (uselfn || strchr(full, ' ') ? (full[0] != '"' ? "\"" : "") : "") + std::string(full) + (uselfn || strchr(full, ' ') ? (full[strlen(full) - 1] != '"' ? "\"" : "") : ""); - bool reset = false; - if(optF && (attr & DOS_ATTR_READ_ONLY) && DOS_SetFileAttr(pfull.c_str(), attr & ~DOS_ATTR_READ_ONLY)) reset = true; - if(!DOS_UnlinkFile(pfull.c_str())) { - if(optF && reset) DOS_SetFileAttr(pfull.c_str(), attr); - WriteOut(MSG_Get("SHELL_CMD_DEL_ERROR"), uselfn ? sfull : full); - } - } - else WriteOut(MSG_Get("SHELL_CMD_DEL_ERROR"), uselfn ? sfull : full); - } - res = DOS_FindNext(); - } - lfn_filefind_handle = fbak; - if(!exist) WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"), args); - dos.dta(save_dta); - } - - size_t GetPauseCount() { - uint16_t rows; - if (IS_PC98_ARCH) - rows=real_readb(0x60,0x113) & 0x01 ? 25 : 20; - else - rows=(IS_EGAVGA_ARCH?real_readb(BIOSMEM_SEG,BIOSMEM_NB_ROWS):24)+1; - return (rows > 2u) ? (rows - 2u) : 23u; - } - - struct DtaResult { - char name[DOS_NAMELENGTH_ASCII]; - char lname[LFN_NAMELENGTH+1]; - uint32_t size; - uint32_t hsize; - uint16_t date; - uint16_t time; - uint8_t attr; - - static bool groupDef(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && strcmp(lhs.name, rhs.name) < 0); } - static bool groupExt(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && strcmp(lhs.getExtension(), rhs.getExtension()) < 0); } - static bool groupSize(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && lhs.size+lhs.hsize*0x100000000 < rhs.size+rhs.hsize*0x100000000); } - static bool groupDate(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && (lhs.date < rhs.date || (lhs.date == rhs.date && lhs.time < rhs.time))); } - static bool groupRevDef(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && strcmp(lhs.name, rhs.name) > 0); } - static bool groupRevExt(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && strcmp(lhs.getExtension(), rhs.getExtension()) > 0); } - static bool groupRevSize(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && lhs.size+lhs.hsize*0x100000000 > rhs.size+rhs.hsize*0x100000000); } - static bool groupRevDate(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && (lhs.date > rhs.date || (lhs.date == rhs.date && lhs.time > rhs.time))); } - static bool groupDirs(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY); } - static bool compareName(const DtaResult &lhs, const DtaResult &rhs) { return strcmp(lhs.name, rhs.name) < 0; } - static bool compareExt(const DtaResult &lhs, const DtaResult &rhs) { return strcmp(lhs.getExtension(), rhs.getExtension()) < 0; } - static bool compareSize(const DtaResult &lhs, const DtaResult &rhs) { return lhs.size+lhs.hsize*0x100000000 < rhs.size+rhs.hsize*0x100000000; } - static bool compareDate(const DtaResult &lhs, const DtaResult &rhs) { return lhs.date < rhs.date || (lhs.date == rhs.date && lhs.time < rhs.time); } - - const char * getExtension() const { - const char * ext = empty_string; - if (name[0] != '.') { - ext = strrchr(name, '.'); - if (!ext) ext = empty_string; - } - return ext; - } - - }; - - extern bool ctrlbrk; - std::vector tdirs; - - static bool doDeltree(DOS_Shell * shell, char * args, DOS_DTA dta, bool optY, bool first) { - const char ch_y = MSG_Get("INT21_6523_YESNO_CHARS")[0]; - const char ch_n = MSG_Get("INT21_6523_YESNO_CHARS")[1]; - const char ch_Y = toupper(ch_y); - const char ch_N = toupper(ch_n); - char spath[DOS_PATHLENGTH],sargs[DOS_PATHLENGTH+4],path[DOS_PATHLENGTH+4],full[DOS_PATHLENGTH],sfull[DOS_PATHLENGTH+2]; - if (!DOS_Canonicalize(args,full)||strrchr_dbcs(full,'\\')==NULL) { shell->WriteOut(MSG_Get("SHELL_ILLEGAL_PATH"));return false; } - if (!DOS_GetSFNPath(args,spath,false)) { - if (first) shell->WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); - return false; - } - if (!uselfn||!DOS_GetSFNPath(args,sfull,true)) strcpy(sfull,full); - sprintf(sargs,"\"%s\"",spath); - bool found=false, fdir=false, res=DOS_FindFirst(sargs,0xffff & ~DOS_ATTR_VOLUME); - if (!res) return false; - //end can't be 0, but if it is we'll get a nice crash, who cares :) - uint16_t attribute=0; - strcpy(path,full); - if (!first&&strlen(args)>3&&!strcmp(args+strlen(args)-4,"\\.\\.")) { - if (strlen(path)&&path[strlen(path)-1]=='\\') path[strlen(path)-1]=0; - if (strlen(path)&&path[strlen(path)-1]!=':') { - bool reset=false; - if(DOS_GetFileAttr(path,&attribute) && (attribute&DOS_ATTR_READ_ONLY)&&DOS_SetFileAttr(path, attribute & ~DOS_ATTR_READ_ONLY)) reset=true; - if (!DOS_RemoveDir(path)&&!(uselfn&&DOS_RemoveDir(sfull))) { - if (reset) DOS_SetFileAttr(path, attribute); - shell->WriteOut(MSG_Get("SHELL_CMD_RMDIR_ERROR"),uselfn?sfull:full); - } - } - return true; - } - *(strrchr_dbcs(path,'\\')+1)=0; - char * end=strrchr_dbcs(full,'\\')+1;*end=0; - char * lend=strrchr_dbcs(sfull,'\\')+1;*lend=0; - char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH+1]; - uint32_t size,hsize;uint16_t time,date;uint8_t attr;uint16_t fattr; - std::vector cdirs, cfiles; - cdirs.clear(); - cfiles.clear(); - std::string pfull; - while (res) { - strcpy(spath, path); - dta.GetResult(name,lname,size,hsize,date,time,attr); - if (!((!strcmp(name, ".") || !strcmp(name, "..")) && attr & DOS_ATTR_DIRECTORY)) { - found=true; - strcpy(end,name); - strcpy(lend,lname); - if (strlen(full)&&DOS_GetFileAttr(((uselfn||strchr(full, ' ')?(full[0]!='"'?"\"":""):"")+std::string(full)+(uselfn||strchr(full, ' ')?(full[strlen(full)-1]!='"'?"\"":""):"")).c_str(), &fattr)) { - uint8_t c; - uint16_t n=1; - if(attr&DOS_ATTR_DIRECTORY) { - if (strcmp(name, ".")&&strcmp(name, "..")) { - if (!optY&&first) { - shell->WriteOut(MSG_Get("SHELL_CMD_RMDIR_FULLTREE_CONFIRM"), uselfn ? sfull : full); - DOS_ReadFile (STDIN,&c,&n); - if (c==3) {shell->WriteOut("^C\r\n");break;} - c = c==ch_y||c==ch_Y ? ch_Y:ch_N; - shell->WriteOut("%c\r\n", c); - if (c==ch_N) {res = DOS_FindNext();continue;} - } - fdir=true; - strcat(spath, name); - strcat(spath, "\\*.*"); - cdirs.emplace_back(std::string(spath)); - } - } else { - if (!optY&&first) { - shell->WriteOut(MSG_Get("SHELL_CMD_RMDIR_SINGLE_CONFIRM"), uselfn ? sfull : full); - DOS_ReadFile (STDIN,&c,&n); - if (c==3) {shell->WriteOut("^C\r\n");break;} - c = c==ch_y||c==ch_Y ? ch_Y:ch_N; - shell->WriteOut("%c\r\n", c); - if (c==ch_N) {res = DOS_FindNext();continue;} - } - pfull=(uselfn||strchr(uselfn?sfull:full, ' ')?((uselfn?sfull:full)[0]!='"'?"\"":""):"")+std::string(uselfn?sfull:full)+(uselfn||strchr(uselfn?sfull:full, ' ')?((uselfn?sfull:full)[strlen(uselfn?sfull:full)-1]!='"'?"\"":""):""); - cfiles.push_back(pfull); - } - } - } - res=DOS_FindNext(); - } - while (!cfiles.empty()) { - bool reset=false; - pfull = std::string(cfiles.begin()->c_str()); - if ((attr & DOS_ATTR_READ_ONLY)&&DOS_SetFileAttr(pfull.c_str(), attr & ~DOS_ATTR_READ_ONLY)) reset=true; - if (!DOS_UnlinkFile(pfull.c_str())) { - if (reset) DOS_SetFileAttr(pfull.c_str(), attr); - shell->WriteOut(MSG_Get("SHELL_CMD_DEL_ERROR"),pfull.c_str()); - } - cfiles.erase(cfiles.begin()); - } - if (!first&&strlen(args)>4&&!strcmp(args+strlen(args)-4,"\\*.*")) { - end=strrchr_dbcs(full,'\\')+1;*end=0; - lend=strrchr_dbcs(sfull,'\\')+1;*lend=0; - if (fdir) { - strcpy(spath, path); - strcat(spath, ".\\."); - cdirs.push_back(std::string(spath)); - } else { - if (strlen(path)&&path[strlen(path)-1]=='\\') path[strlen(path)-1]=0; - if (strlen(path)&&path[strlen(path)-1]!=':') { - bool reset=false; - if(DOS_GetFileAttr(path,&attribute) && (attribute&DOS_ATTR_READ_ONLY)&&DOS_SetFileAttr(path, attribute & ~DOS_ATTR_READ_ONLY)) reset=true; - if (!DOS_RemoveDir(path)&&!(uselfn&&DOS_RemoveDir(sfull))) { - if (reset) DOS_SetFileAttr(path, attribute); - shell->WriteOut(MSG_Get("SHELL_CMD_RMDIR_ERROR"),uselfn?sfull:full); - } - } - } - } - tdirs.insert(tdirs.begin()+1, cdirs.begin(), cdirs.end()); - return found; - } - - void DOS_Shell::CMD_DELTREE(char * args) { - //HELP("DELTREE"); - StripSpaces(args); - bool optY=ScanCMDBool(args,"Y"); - char * rem=ScanCMDRemain(args); - if (rem) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); - return; - } - if (!*args) { - WriteOut(MSG_Get("SHELL_MISSING_PARAMETER")); - return; - } - - if (uselfn&&strchr(args, '*')) { - char * find_last; - find_last=strrchr_dbcs(args,'\\'); - if (find_last==NULL) find_last=args; - else find_last++; - if (strlen(find_last)>0&&args[strlen(args)-1]=='*'&&strchr(find_last, '.')==NULL) strcat(args, ".*"); - } - char buffer[CROSS_LEN]; - args = ExpandDot(args,buffer, CROSS_LEN, true); - StripSpaces(args); - RealPt save_dta=dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - tdirs.clear(); - tdirs.emplace_back(std::string(args)); - bool first=true, found=false; - ctrlbrk=false; - inshell=true; - while (!tdirs.empty()) { - if (doDeltree(this, (char *)tdirs.begin()->c_str(), dta, optY, first)) - found=true; - first=false; - tdirs.erase(tdirs.begin()); - } - inshell=true; - if (!found) WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); - dos.dta(save_dta); - } - - bool CheckBreak(DOS_Shell * shell) { - if (ctrlbrk || dos.errorcode == 77) { - if (dos.errorcode == 77) dos.errorcode = 0; - else if (ctrlbrk) { - ctrlbrk=false; - uint8_t c;uint16_t n=1; - DOS_ReadFile (STDIN,&c,&n); - if (c == 3 && (inshell || dos.errorcode == 77)) shell->WriteOut("^C\r\n"); - if (dos.errorcode == 77) dos.errorcode = 0; - ctrlbrk=false; - } - return true; - } else - return false; - } - - bool cont[200]; - static bool doTree(DOS_Shell * shell, char * args, DOS_DTA dta, bool optA, bool optF) { - char *p=strchr(args, ':'); - bool found=false, last=false, plast=false; - int level=1; - if (p) { - *p=0; - if (*args=='-') { - plast=true; - args++; - } - level=atoi(args); - args=p+1; - if (tdirs.size()<2) last=true; - else { - char * arg=(char *)(tdirs.begin()+1)->c_str(); - p=strchr(arg, ':'); - if (p) { - *p=0; - if (level!=atoi(*arg=='-'?arg+1:arg)) last=true; - *p=':'; - } - } - } - if (level>=200) return false; - char spath[DOS_PATHLENGTH],sargs[DOS_PATHLENGTH+4],path[DOS_PATHLENGTH+4],full[DOS_PATHLENGTH],sfull[DOS_PATHLENGTH+2]; - if (!DOS_Canonicalize(args,full)||strrchr_dbcs(full,'\\')==NULL) { shell->WriteOut(MSG_Get("SHELL_ILLEGAL_PATH"));return level; } - if (!DOS_GetSFNPath(args,spath,false)) { - if (!level) shell->WriteOut(MSG_Get("SHELL_CMD_TREE_ERROR")); - return level; - } - if (!uselfn||!DOS_GetSFNPath(args,sfull,true)) strcpy(sfull,full); - if (level&&strlen(sfull)>4&&!strcasecmp(sfull+strlen(sfull)-4, "\\*.*")) { - *(sfull+strlen(sfull)-4)=0; - p=strrchr_dbcs(sfull, '\\'); - char c=optA?(last?'\\':'+'):(last?0xc0:0xc3); - cont[level]=!last; - for (int i=1; iWriteOut("%c ", cont[i]?(optA?'|':0xb3):' '); - shell->WriteOut(("%c"+std::string(3, optA?'-':0xc4)+"%s\n").c_str(), c, p?p+1:sfull); - *(sfull+strlen(sfull))='\\'; - } - sprintf(sargs,"\"%s\"",spath); - bool res=DOS_FindFirst(sargs,0xffff & ~DOS_ATTR_VOLUME); - if (!res) { - if (!level) shell->WriteOut(MSG_Get("SHELL_CMD_TREE_ERROR")); - return level; - } - //uint16_t attribute=0; UNUSED - strcpy(path,full); - *(strrchr_dbcs(path,'\\')+1)=0; - char * end=strrchr_dbcs(full,'\\')+1;*end=0; - char * lend=strrchr_dbcs(sfull,'\\')+1;*lend=0; - char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH+1]; - uint32_t size,hsize;uint16_t time,date;uint8_t attr;uint16_t fattr; - std::vector cdirs; - cdirs.clear(); - while (res) { - if (CheckBreak(shell)) return false; - strcpy(spath,((plast||(level==1&&last)?"-":"")+std::to_string(level+1)+":").c_str()); - strcat(spath, path); - dta.GetResult(name,lname,size,hsize,date,time,attr); - if (!((!strcmp(name, ".") || !strcmp(name, "..")) && attr & DOS_ATTR_DIRECTORY)) { - strcpy(end,name); - strcpy(lend,lname); - if (strlen(full)&&DOS_GetFileAttr(((uselfn||strchr(full, ' ')?(full[0]!='"'?"\"":""):"")+std::string(full)+(uselfn||strchr(full, ' ')?(full[strlen(full)-1]!='"'?"\"":""):"")).c_str(), &fattr)) { - if(attr&DOS_ATTR_DIRECTORY) { - if (strcmp(name, ".")&&strcmp(name, "..")) { - strcat(spath, name); - strcat(spath, "\\*.*"); - cdirs.emplace_back(std::string(spath)); - found=true; - } - } else if (optF) { - for (int i=1; i<=level; i++) shell->WriteOut("%c ", (i==1&&level>1?!plast:cont[i])?(optA?'|':0xb3):' '); - shell->WriteOut(" %s\n", uselfn?lname:name); - } - } - } - res=DOS_FindNext(); - } - if (!found&&!level) { - shell->WriteOut(MSG_Get("SHELL_CMD_TREE_ERROR")); - return false; - } - tdirs.insert(tdirs.begin()+1, cdirs.begin(), cdirs.end()); - return true; - } - - bool tree=false; - void DOS_Shell::CMD_TREE(char * args) { - //HELP("TREE"); - StripSpaces(args); - bool optA=ScanCMDBool(args,"A"); - bool optF=ScanCMDBool(args,"F"); - char * rem=ScanCMDRemain(args); - if (rem) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); - return; - } - StripSpaces(args); - char buffer[CROSS_LEN]; - strcpy(buffer, "0:"); - strcat(buffer, *args?args:"."); - if (strlen(args)==2&&args[1]==':') strcat(buffer, "."); - if (args[strlen(args)-1]!='\\') strcat(buffer, "\\"); - strcat(buffer, "*.*"); - RealPt save_dta=dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - if (strlen(args)>1&&args[1]==':') { - char c[]=" _:"; - c[1]=toupper(args[0]); - if (!Drives[c[1]-'A']) { - WriteOut(MSG_Get("SHELL_ILLEGAL_DRIVE")); - return; - } - tree=true; - CMD_VOL(c[1]>='A'&&c[1]<='Z'?c:empty_string); - tree=false; - WriteOut("%c:%s\n", c[1], *args?args+2:"."); - } else { - tree=true; - CMD_VOL(empty_string); - tree=false; - uint8_t drive=DOS_GetDefaultDrive(); - WriteOut("%c:%s\n", 'A'+drive, *args?args:"."); - } - for (int i=0; i<200; i++) cont[i]=false; - ctrlbrk=false; - inshell=true; - tdirs.clear(); - tdirs.emplace_back(std::string(buffer)); - while (!tdirs.empty()) { - if (!doTree(this, (char *)tdirs.begin()->c_str(), dta, optA, optF)) break; - tdirs.erase(tdirs.begin()); - } - inshell=false; - dos.dta(save_dta); - } - - void DOS_Shell::CMD_HELP(char * args){ - HELP("HELP"); - bool optall=ScanCMDBool(args,"A")|ScanCMDBool(args,"ALL"); - /* Print the help */ - args = trim(args); - upcase(args); - uint8_t attr = DOS_GetAnsiAttr(); - if(!optall&&!*args) WriteOut(MSG_Get("SHELL_CMD_HELP")); - uint32_t cmd_index=0,write_count=0; - bool show=false; - while (cmd_list[cmd_index].name) { - if (optall || (*args && !strcmp(args, cmd_list[cmd_index].name)) || (!*args && !cmd_list[cmd_index].flags)) { - show=true; - if (*args && !strcmp(args, cmd_list[cmd_index].name) && !optall) { - std::string cmd=std::string(args); - if (cmd=="CD") cmd="CHDIR"; - else if (cmd=="DEL"||cmd=="ERASE") cmd="DELETE"; - else if (cmd=="LH") cmd="LOADHIGH"; - else if (cmd=="MD") cmd="MKDIR"; - else if (cmd=="RD") cmd="RMDIR"; - else if (cmd=="REN") cmd="RENAME"; - else if (cmd=="DX-CAPTURE") cmd="DXCAPTURE"; - WriteOut("%s\n%s",MSG_Get(cmd_list[cmd_index].help), MSG_Get(("SHELL_CMD_" +cmd+ "_HELP_LONG").c_str())); - } else { - WriteOut("<\033[34;1m%-8s\033[0m> %s",cmd_list[cmd_index].name,MSG_Get(cmd_list[cmd_index].help)); - if(!(++write_count%GetPauseCount())) { - WriteOut(MSG_Get("SHELL_CMD_PAUSE")); - uint8_t c;uint16_t n=1; - DOS_ReadFile(STDIN,&c,&n); - if (c==3) {if (attr) DOS_SetAnsiAttr(attr);return;} - if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key - } - } - } - cmd_index++; - } - if (optall&&show) - WriteOut(MSG_Get("SHELL_CMD_HELP_END1")); - else if (*args&&!show) { - std::string argc=std::string(StripArg(args)); - if (argc!=""&&argc!="CWSDPMI") DoCommand((char *)(argc+(argc=="DOS4GW"||argc=="DOS32A"||argc=="ZIP"||argc=="UNZIP"?"":" /?")).c_str()); - } - if (!*args&&show) - WriteOut(MSG_Get("SHELL_CMD_HELP_END2")); - if (attr) DOS_SetAnsiAttr(attr); - } - - void removeChar(char *str, char c) { - char *src, *dst; - for (src = dst = str; *src != '\0'; src++) { - *dst = *src; - if (*dst != c) dst++; - } - *dst = '\0'; - } - - void DOS_Shell::CMD_RENAME(char * args){ - HELP("RENAME"); - StripSpaces(args); - char * rem=ScanCMDRemain(args); - if (rem) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); - return; - } - if (!*args) {SyntaxError();return;} - char * arg1=StripArg(args); - StripSpaces(args); - if (!*args) {SyntaxError();return;} - char * arg2=StripArg(args); - StripSpaces(args); - if (*args) {SyntaxError();return;} - char* slash = strrchr_dbcs(arg1,'\\'); - uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; - char name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH+1], tname1[LFN_NAMELENGTH+1], tname2[LFN_NAMELENGTH+1], text1[LFN_NAMELENGTH+1], text2[LFN_NAMELENGTH+1], tfull[CROSS_LEN+2]; - //dir_source and target are introduced for when we support multiple files being renamed. - char sargs[CROSS_LEN], targs[CROSS_LEN], dir_source[DOS_PATHLENGTH + 4] = {0}, dir_target[CROSS_LEN + 4] = {0}, target[CROSS_LEN + 4] = {0}; //not sure if drive portion is included in pathlength - - if (!slash) slash = strrchr(arg1,':'); - if (slash) { - /* If directory specified (crystal caves installer) - * rename from c:\X : rename c:\abc.exe abc.shr. - * File must appear in C:\ - * Ren X:\A\B C => ren X:\A\B X:\A\C */ - - //Copy first and then modify, makes GCC happy - safe_strncpy(dir_source,arg1,DOS_PATHLENGTH + 4); - char* dummy = strrchr_dbcs(dir_source,'\\'); - if (!dummy) dummy = strrchr(dir_source,':'); - if (!dummy) { //Possible due to length - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - return; - } - dummy++; - *dummy = 0; - if (strchr_dbcs(arg2,'\\')||strchr(arg2,':')) { - safe_strncpy(dir_target,arg2,DOS_PATHLENGTH + 4); - dummy = strrchr_dbcs(dir_target,'\\'); - if (!dummy) dummy = strrchr(dir_target,':'); - if (dummy) { - dummy++; - *dummy = 0; - if (strcasecmp(dir_source, dir_target)) { - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - return; - } - } - arg2=strrchr_dbcs(arg2,strrchr_dbcs(arg2,'\\')?'\\':':')+1; - } - if (strlen(dummy)&&dummy[strlen(dummy)-1]==':') - strcat(dummy, ".\\"); - } else { - if (strchr_dbcs(arg2,'\\')||strchr(arg2,':')) {SyntaxError();return;}; - strcpy(dir_source, ".\\"); - } - - strcpy(target,arg2); - - char path[DOS_PATHLENGTH], spath[DOS_PATHLENGTH], pattern[DOS_PATHLENGTH], full[DOS_PATHLENGTH], *r; - if (!DOS_Canonicalize(arg1,full)) return; - r=strrchr_dbcs(full, '\\'); - if (r!=NULL) { - *r=0; - strcpy(path, full); - strcat(path, "\\"); - strcpy(pattern, r+1); - *r='\\'; - } else { - strcpy(path, ""); - strcpy(pattern, full); - } - int k=0; - for (int i=0;i<(int)strlen(pattern);i++) - if (pattern[i]!='\"') - pattern[k++]=pattern[i]; - pattern[k]=0; - strcpy(spath, path); - if (strchr(arg1,'\"')||uselfn) { - if (!DOS_GetSFNPath(("\""+std::string(path)+"\\").c_str(), spath, false)) strcpy(spath, path); - if (!strlen(spath)||spath[strlen(spath)-1]!='\\') strcat(spath, "\\"); - } - RealPt save_dta=dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - std::string pfull=std::string(spath)+std::string(pattern); - int fbak=lfn_filefind_handle; - lfn_filefind_handle=uselfn?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; - if (!DOS_FindFirst(((uselfn&&pfull.length()&&pfull[0]!='"'?"\"":"")+pfull+(uselfn&&pfull.length()&&pfull[pfull.length()-1]!='"'?"\"":"")).c_str(), strchr(arg1,'*')!=NULL || strchr(arg1,'?')!=NULL ? 0xffff & ~DOS_ATTR_VOLUME & ~DOS_ATTR_DIRECTORY : 0xffff & ~DOS_ATTR_VOLUME)) { - lfn_filefind_handle=fbak; - WriteOut(MSG_Get("SHELL_CMD_RENAME_ERROR"),arg1); - } else { - std::vector sources; - sources.clear(); - - do { /* File name and extension */ - dta.GetResult(name,lname,size,hsize,date,time,attr); - lfn_filefind_handle=fbak; - - if(!(attr&DOS_ATTR_DIRECTORY && (!strcmp(name, ".") || !strcmp(name, "..")))) { - strcpy(dir_target, target); - removeChar(dir_target, '\"'); - arg2=dir_target; - strcpy(sargs, dir_source); - if (uselfn) removeChar(sargs, '\"'); - strcat(sargs, uselfn?lname:name); - if (uselfn&&strchr(arg2,'*')&&!strchr(arg2,'.')) strcat(arg2, ".*"); - char *dot1=strrchr(uselfn?lname:name,'.'), *dot2=strrchr(arg2,'.'), *star; - if (dot2==NULL) { - star=strchr(arg2,'*'); - if (strchr(arg2,'?')) { - for (unsigned int i=0; i<(uselfn?LFN_NAMELENGTH:DOS_NAMELENGTH) && i<(star?star-arg2:strlen(arg2)); i++) { - if (*(arg2+i)=='?'&&i2&&sargs[0]=='.'&&sargs[1]=='\\'?sargs+2:sargs); - } - lfn_filefind_handle=uselfn?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; - } while ( DOS_FindNext() ); - lfn_filefind_handle=fbak; - if (sources.empty()) WriteOut(MSG_Get("SHELL_CMD_RENAME_ERROR"),arg1); - else { - for (std::vector::iterator source = sources.begin(); source != sources.end(); ++source) { - char *oname=(char *)source->c_str(); - source++; - if (source==sources.end()) break; - char *nname=(char *)source->c_str(); - source++; - if (source==sources.end()||oname==NULL||nname==NULL) break; - char *fname=(char *)source->c_str(); - if (!DOS_Rename(oname,nname)&&fname!=NULL) - WriteOut(MSG_Get("SHELL_CMD_RENAME_ERROR"),fname); - } - } - } - dos.dta(save_dta); - } - - void DOS_Shell::CMD_ECHO(char * args){ - if (!*args) { - if (echo) { WriteOut(MSG_Get("SHELL_CMD_ECHO_ON"));} - else { WriteOut(MSG_Get("SHELL_CMD_ECHO_OFF"));} - return; - } - char buffer[512]; - char* pbuffer = buffer; - safe_strncpy(buffer,args,512); - StripSpaces(pbuffer); - if (strcasecmp(pbuffer,"OFF")==0) { - echo=false; - return; - } - if (strcasecmp(pbuffer,"ON")==0) { - echo=true; - return; - } - if(strcasecmp(pbuffer,"/?")==0) { HELP("ECHO"); } - - args++;//skip first character. either a slash or dot or space - size_t len = strlen(args); //TODO check input of else ook nodig is. - if(len && args[len - 1] == '\r') { - LOG(LOG_MISC,LOG_WARN)("Hu ? carriage return already present. Is this possible?"); - WriteOut_NoParsing(args, true); - WriteOut("\n"); - } else { - WriteOut_NoParsing(args, true); - WriteOut("\r\n"); - } - } - - void DOS_Shell::CMD_EXIT(char * args) { - HELP("EXIT"); - exit = true; - } - - std::vector olddrives; - std::vector olddirs; - void DOS_Shell::CMD_PUSHD(char * args) { - HELP("PUSHD"); - StripSpaces(args); - char sargs[CROSS_LEN]; - if (strlen(args)>1 && args[1]==':' && toupper(args[0])>='A' && toupper(args[0])<='Z' && !Drives[toupper(args[0])-'A']) { - WriteOut(MSG_Get("SHELL_ILLEGAL_DRIVE")); - return; - } - if (*args && !DOS_GetSFNPath(args,sargs,false)) { - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - return; - } - if (*args) { - char dir[DOS_PATHLENGTH]; - uint8_t drive = DOS_GetDefaultDrive()+'A'; - DOS_GetCurrentDir(0,dir,true); - if (strlen(args)>1 && args[1]==':') DOS_SetDefaultDrive(toupper(args[0])-'A'); - if (DOS_ChangeDir(sargs)) { - olddrives.push_back(drive); - olddirs.emplace_back(std::string(dir)); - } else { - if (strlen(args)>1 && args[1]==':') DOS_SetDefaultDrive(drive-'A'); - WriteOut(MSG_Get("SHELL_CMD_CHDIR_ERROR"),args); - } - } else { - for (int i=(int)(olddrives.size()-1); i>=0; i--) - if (olddrives.at(i)>='A'&&olddrives.at(i)<='Z') - WriteOut("%c:\\%s\n",olddrives.at(i),olddirs.at(i).c_str()); - } - } - - void DOS_Shell::CMD_POPD(char * args) { - HELP("POPD"); - if (!olddrives.size()) return; - uint8_t olddrive=olddrives.back(); - std::string olddir=olddirs.back(); - if (olddrive>='A'&&olddrive<='Z'&&Drives[olddrive-'A']) { - uint8_t drive = DOS_GetDefaultDrive()+'A'; - if (olddrive!=DOS_GetDefaultDrive()+'A') DOS_SetDefaultDrive(olddrive-'A'); - if (Drives[DOS_GetDefaultDrive()]->TestDir(olddir.c_str())) - strcpy(Drives[DOS_GetDefaultDrive()]->curdir,olddir.c_str()); - else - DOS_SetDefaultDrive(drive-'A'); - } - olddrives.pop_back(); - olddirs.pop_back(); - } - - void DOS_Shell::CMD_CHDIR(char * args) { - HELP("CHDIR"); - StripSpaces(args); - char sargs[CROSS_LEN]; - if (*args && !DOS_GetSFNPath(args,sargs,false)) { - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - return; - } - uint8_t drive = DOS_GetDefaultDrive()+'A'; - char dir[DOS_PATHLENGTH]; - if (!*args) { - DOS_GetCurrentDir(0,dir,true); - WriteOut("%c:\\",drive); - WriteOut_NoParsing(dir, true); - WriteOut("\n"); - } else if(strlen(args) == 2 && args[1]==':') { - uint8_t targetdrive = (args[0] | 0x20)-'a' + 1; - unsigned char targetdisplay = *reinterpret_cast(&args[0]); - if(!DOS_GetCurrentDir(targetdrive,dir,true)) { // verify that this should be true - if(drive == 'Z') { - WriteOut(MSG_Get("SHELL_EXECUTE_DRIVE_NOT_FOUND"),toupper(targetdisplay)); - } else { - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - } - return; - } - WriteOut("%c:\\",toupper(targetdisplay)); - WriteOut_NoParsing(dir, true); - WriteOut("\n"); - if(drive == 'Z') - WriteOut(MSG_Get("SHELL_CMD_CHDIR_HINT"),toupper(targetdisplay)); - } else if (!DOS_ChangeDir(sargs)) { - /* Changedir failed. Check if the filename is longer than 8 and/or contains spaces */ - - std::string temps(args),slashpart; - std::string::size_type separator = temps.find_first_of("\\/"); - if(!separator) { - slashpart = temps.substr(0,1); - temps.erase(0,1); - } - separator = temps.find_first_of("\""); - if(separator != std::string::npos) temps.erase(separator); - separator = temps.rfind('.'); - if(separator != std::string::npos) temps.erase(separator); - separator = temps.find(' '); - if(separator != std::string::npos) {/* Contains spaces */ - temps.erase(separator); - if(temps.size() >6) temps.erase(6); - temps += "~1"; - WriteOut(MSG_Get("SHELL_CMD_CHDIR_HINT_2"),temps.insert(0,slashpart).c_str()); - } else { - if (drive == 'Z') { - WriteOut(MSG_Get("SHELL_CMD_CHDIR_HINT_3")); - } else { - WriteOut(MSG_Get("SHELL_CMD_CHDIR_ERROR"),args); - } - } - } - } - - void DOS_Shell::CMD_MKDIR(char * args) { - HELP("MKDIR"); - StripSpaces(args); - char * rem=ScanCMDRemain(args); - if (rem) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); - return; - } - if (!*args) { - WriteOut(MSG_Get("SHELL_MISSING_PARAMETER")); - return; - } - if (!DOS_MakeDir(args)) { - WriteOut(MSG_Get(dos.errorcode==DOSERR_ACCESS_DENIED?"SHELL_CMD_MKDIR_EXIST":"SHELL_CMD_MKDIR_ERROR"),args); - } - } - - void DOS_Shell::CMD_RMDIR(char * args) { - HELP("RMDIR"); - // ignore /s,and /q switches for compatibility - ScanCMDBool(args,"S"); - ScanCMDBool(args,"Q"); - StripSpaces(args); - char * rem=ScanCMDRemain(args); - if (rem) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); - return; - } - if (!*args) { - WriteOut(MSG_Get("SHELL_MISSING_PARAMETER")); - return; - } - if (!DOS_RemoveDir(args)) { - WriteOut(MSG_Get("SHELL_CMD_RMDIR_ERROR"),args); - } - } - - static void FormatNumber(uint64_t num,char * buf) { - uint64_t numo = num; - uint32_t numb,numk,numm,numg,nummi,numgi,numti,numpi,numei; - numb=num % 1000; - num/=1000; - numk=num % 1000; - num/=1000; - numm=num % 1000; - num/=1000; - numg=num % 1000; - numo/=1024; - numo/=1024; - nummi=(numo % 1024) / 10.24 + 0.5; - numo/=1024; - numgi=numo % 1000; - numo/=1000; - numti=numo % 1000; - numo/=1000; - numpi=numo % 1000; - numei=numo / 1000; - if (numei) { - sprintf(buf,"%u%c%03u%c%03u%c%03u%c%02u G",numei,dos.tables.country[7],numpi,dos.tables.country[7],numti,dos.tables.country[7],numgi,dos.tables.country[9],nummi); - return; - } - if (numpi) { - sprintf(buf,"%u%c%03u%c%03u%c%02u G",numpi,dos.tables.country[7],numti,dos.tables.country[7],numgi,dos.tables.country[9],nummi); - return; - } - if (numti) { - sprintf(buf,"%u%c%03u%c%02u G",numti,dos.tables.country[7],numgi,dos.tables.country[9],nummi); - return; - } - if (numg) { - if (numgi>127) sprintf(buf,"%u%c%02u G",numgi,dos.tables.country[9],nummi); - else sprintf(buf,"%u%c%03u%c%03u%c%03u",numg,dos.tables.country[7],numm,dos.tables.country[7],numk,dos.tables.country[7],numb); - return; - } - if (numm) { - sprintf(buf,"%u%c%03u%c%03u",numm,dos.tables.country[7],numk,dos.tables.country[7],numb); - return; - } - if (numk) { - sprintf(buf,"%u%c%03u",numk,dos.tables.country[7],numb); - return; - } - sprintf(buf,"%u",numb); - } - - char buffer[15] = {0}; - char *FormatDate(uint16_t year, uint8_t month, uint8_t day) { - char formatstring[6], c=dos.tables.country[11]; - sprintf(formatstring, dos.tables.country[0]==1?"D%cM%cY":(dos.tables.country[0]==2?"Y%cM%cD":"M%cD%cY"), c, c); - Bitu bufferptr=0; - for(Bitu i = 0; i < 5; i++) { - if(i==1 || i==3) { - buffer[bufferptr] = formatstring[i]; - bufferptr++; - } else { - if(formatstring[i]=='M') bufferptr += (Bitu)sprintf(buffer+bufferptr,"%02u", month); - if(formatstring[i]=='D') bufferptr += (Bitu)sprintf(buffer+bufferptr,"%02u", day); - if(formatstring[i]=='Y') bufferptr += (Bitu)sprintf(buffer+bufferptr,"%04u", year); - } - } - return buffer; - } - - char *FormatTime(Bitu hour, Bitu min, Bitu sec, Bitu msec) { - Bitu fhour=hour; - static char retBuf[14]; - char ampm[3]=""; - if (!(dos.tables.country[17]&1)) { // 12 hour notation? - if (hour!=12) - hour %= 12; - strcpy(ampm, hour != 12 && hour == fhour ? "am" : "pm"); - } - char sep = dos.tables.country[13]; - if (sec>=100&&msec>=100) - sprintf(retBuf, "%2u%c%02u%c", (unsigned int)hour, sep, (unsigned int)min, *ampm); - else - sprintf(retBuf, "%u%c%02u%c%02u%c%02u%s", (unsigned int)hour, sep, (unsigned int)min, sep, (unsigned int)sec, dos.tables.country[9], (unsigned int)msec, ampm); - return retBuf; - } - - uint64_t byte_count; - uint32_t file_count,dir_count; - Bitu p_count; - std::vector dirs, adirs; - static bool dirPaused(DOS_Shell * shell, Bitu w_size, bool optP, bool optW, bool show=true) { - p_count+=optW?5:1; - if (optP && p_count%(GetPauseCount()*w_size)<1) { - shell->WriteOut(MSG_Get("SHELL_CMD_PAUSE")); - uint8_t c;uint16_t n=1; - DOS_ReadFile(STDIN,&c,&n); - if (c==3) {if (show) shell->WriteOut("^C\r\n");return false;} - if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key - } - return true; - } - - static bool doDir(DOS_Shell * shell, char * args, DOS_DTA dta, char * numformat, Bitu w_size, bool optW, bool optZ, bool optS, bool optP, bool optB, bool optA, bool optAD, bool optAminusD, bool optAS, bool optAminusS, bool optAH, bool optAminusH, bool optAR, bool optAminusR, bool optAA, bool optAminusA, bool optOGN, bool optOGD, bool optOGE, bool optOGS, bool optOG, bool optON, bool optOD, bool optOE, bool optOS, bool reverseSort, bool rev2Sort) { - char path[DOS_PATHLENGTH]; - char sargs[CROSS_LEN], largs[CROSS_LEN], buffer[CROSS_LEN]; - unsigned int tcols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); - if (!tcols) tcols=80; - - /* Make a full path in the args */ - if (!DOS_Canonicalize(args,path)) { - shell->WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - return true; - } - *(strrchr_dbcs(path,'\\')+1)=0; - if (!DOS_GetSFNPath(path,sargs,false)) { - shell->WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - return true; - } - if (!optB&&!optS) { - shell->WriteOut(MSG_Get("SHELL_CMD_DIR_INTRO"),uselfn&&!optZ&&DOS_GetSFNPath(path,largs,true)?largs:sargs); - if (optP) { - p_count+=optW?10:2; - if (p_count%(GetPauseCount()*w_size)<2) { - shell->WriteOut(MSG_Get("SHELL_CMD_PAUSE")); - uint8_t c;uint16_t n=1; - DOS_ReadFile(STDIN,&c,&n); - if (c==3) return false; - if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key - } - } - } - if (*(sargs+strlen(sargs)-1) != '\\') strcat(sargs,"\\"); - - uint64_t cbyte_count=0; - uint32_t cfile_count=0,w_count=0; - int fbak=lfn_filefind_handle; - lfn_filefind_handle=uselfn&&!optZ?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; - bool ret=DOS_FindFirst(args,0xffff & ~DOS_ATTR_VOLUME), found=true, first=true; - if (!ret) { - size_t len = strlen(args); - args = ExpandDotMore(args,buffer,CROSS_LEN); - if (strlen(args)!=len) ret=DOS_FindFirst(args,0xffff & ~DOS_ATTR_VOLUME); - } - lfn_filefind_handle=fbak; - if (ret) { - std::vector results; - - lfn_filefind_handle=uselfn&&!optZ?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; - do { /* File name and extension */ - DtaResult result; - dta.GetResult(result.name,result.lname,result.size,result.hsize,result.date,result.time,result.attr); - - /* Skip non-directories if option AD is present, or skip dirs in case of A-D */ - if(optAD && !(result.attr&DOS_ATTR_DIRECTORY) ) continue; - else if(optAminusD && (result.attr&DOS_ATTR_DIRECTORY) ) continue; - else if(optAS && !(result.attr&DOS_ATTR_SYSTEM) ) continue; - else if(optAminusS && (result.attr&DOS_ATTR_SYSTEM) ) continue; - else if(optAH && !(result.attr&DOS_ATTR_HIDDEN) ) continue; - else if(optAminusH && (result.attr&DOS_ATTR_HIDDEN) ) continue; - else if(optAR && !(result.attr&DOS_ATTR_READ_ONLY) ) continue; - else if(optAminusR && (result.attr&DOS_ATTR_READ_ONLY) ) continue; - else if(optAA && !(result.attr&DOS_ATTR_ARCHIVE) ) continue; - else if(optAminusA && (result.attr&DOS_ATTR_ARCHIVE) ) continue; - else if(!(optA||optAD||optAminusD||optAS||optAminusS||optAH||optAminusH||optAR||optAminusR||optAA||optAminusA) && (result.attr&DOS_ATTR_SYSTEM || result.attr&DOS_ATTR_HIDDEN) && strcmp(result.name, "..") ) continue; - - results.push_back(result); - - } while ( (ret=DOS_FindNext()) ); - lfn_filefind_handle=fbak; - - bool oneRev = (reverseSort||rev2Sort)&&reverseSort!=rev2Sort; - if (optON) { - // Sort by name - std::sort(results.begin(), results.end(), DtaResult::compareName); - } else if (optOE) { - // Sort by extension - std::sort(results.begin(), results.end(), DtaResult::compareExt); - } else if (optOD) { - // Sort by date - std::sort(results.begin(), results.end(), DtaResult::compareDate); - } else if (optOS) { - // Sort by size - std::sort(results.begin(), results.end(), DtaResult::compareSize); - } else if (optOG) { - // Directories first, then files - std::sort(results.begin(), results.end(), DtaResult::groupDirs); - } else if (optOGN) { - // Directories first, then files, both sort by name - std::sort(results.begin(), results.end(), oneRev?DtaResult::groupRevDef:DtaResult::groupDef); - } else if (optOGE) { - // Directories first, then files, both sort by extension - std::sort(results.begin(), results.end(), oneRev?DtaResult::groupRevExt:DtaResult::groupExt); - } else if (optOGS) { - // Directories first, then files, both sort by size - std::sort(results.begin(), results.end(), oneRev?DtaResult::groupRevSize:DtaResult::groupSize); - } else if (optOGD) { - // Directories first, then files, both sort by date - std::sort(results.begin(), results.end(), oneRev?DtaResult::groupRevDate:DtaResult::groupDate); - } - if (reverseSort) std::reverse(results.begin(), results.end()); - - for (std::vector::iterator iter = results.begin(); iter != results.end(); ++iter) { - if (CheckBreak(shell)) return false; - char * name = iter->name; - char *lname = iter->lname; - uint32_t size = iter->size; - uint32_t hsize = iter->hsize; - uint16_t date = iter->date; - uint16_t time = iter->time; - uint8_t attr = iter->attr; - - /* output the file */ - if (optB) { - // this overrides pretty much everything - if (strcmp(".",uselfn&&!optZ?lname:name) && strcmp("..",uselfn&&!optZ?lname:name)) { - int m=shell->WriteOut_NoParsing(uselfn&&!optZ?lname:name, true); - shell->WriteOut("\n"); - if (optP) { - p_count+=m+1; - if (p_count%GetPauseCount()WriteOut(MSG_Get("SHELL_CMD_PAUSE")); - uint8_t c;uint16_t n=1; - DOS_ReadFile(STDIN,&c,&n); - if (c==3) return false; - if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key - p_count=0; - } - } - } - } else { - if (first&&optS) { - first=false; - shell->WriteOut("\n"); - shell->WriteOut(MSG_Get("SHELL_CMD_DIR_INTRO"),uselfn&&!optZ&&DOS_GetSFNPath(path,largs,true)?largs:sargs); - if (optP) { - p_count+=optW?15:3; - if (optS&&p_count%(GetPauseCount()*w_size)<3) { - shell->WriteOut(MSG_Get("SHELL_CMD_PAUSE")); - uint8_t c;uint16_t n=1; - DOS_ReadFile(STDIN,&c,&n); - if (c==3) return false; - if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key - } - } - } - char * ext = empty_string; - if (!optW && (name[0] != '.')) { - ext = strrchr(name, '.'); - if (!ext) ext = empty_string; - else *ext++ = 0; - } - uint8_t day = (uint8_t)(date & 0x001f); - uint8_t month = (uint8_t)((date >> 5) & 0x000f); - uint16_t year = (uint16_t)((date >> 9) + 1980); - uint8_t hour = (uint8_t)((time >> 5 ) >> 6); - uint8_t minute = (uint8_t)((time >> 5) & 0x003f); - unsigned int m=0; - if (attr & DOS_ATTR_DIRECTORY) { - if (optW) { - shell->WriteOut("[%s]",name); - size_t namelen = strlen(name); - if (namelen <= 14) { - for (size_t i=14-namelen;i>0;i--) shell->WriteOut(" "); - } - } else { - shell->WriteOut("%-8s %-3s %-16s %s %s",name,ext,"",FormatDate(year,month,day),FormatTime(hour,minute,100,100)); - if (uselfn&&!optZ) { - shell->WriteOut(" "); - m=shell->WriteOut_NoParsing(lname, true); - } - shell->WriteOut("\n"); - if (optP) { - p_count+=(optW?5:1)*m; - if (p_count%(GetPauseCount()*w_size)WriteOut(MSG_Get("SHELL_CMD_PAUSE")); - uint8_t c;uint16_t n=1; - DOS_ReadFile(STDIN,&c,&n); - if (c==3) return false; - if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key - p_count=0; - } - } - } - dir_count++; - } else { - if (optW) { - shell->WriteOut("%-16s",name); - } else { - FormatNumber(size+hsize*0x100000000,numformat); - shell->WriteOut("%-8s %-3s %16s %s %s",name,ext,numformat,FormatDate(year,month,day),FormatTime(hour,minute,100,100)); - if (uselfn&&!optZ) { - shell->WriteOut(" "); - m=shell->WriteOut_NoParsing(lname, true); - } - shell->WriteOut("\n"); - if (optP) { - p_count+=(optW?5:1)*m; - if (p_count%(GetPauseCount()*w_size)WriteOut(MSG_Get("SHELL_CMD_PAUSE")); - uint8_t c;uint16_t n=1; - DOS_ReadFile(STDIN,&c,&n); - if (c==3) return false; - if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key - p_count=0; - } - } - } - if (optS) { - cfile_count++; - cbyte_count+=size+hsize*0x100000000; - } - file_count++; - byte_count+=size+hsize*0x100000000; - } - if (optW) w_count++; - } - if (optW && w_count%5==0 && tcols>80) shell->WriteOut("\n"); - if (optP && !optB && !(++p_count%(GetPauseCount()*w_size))) { - if (optW&&w_count%5) {shell->WriteOut("\n");w_count=0;} - shell->WriteOut(MSG_Get("SHELL_CMD_PAUSE")); - uint8_t c;uint16_t n=1; - DOS_ReadFile(STDIN,&c,&n); - if (c==3) return false; - if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key - } - } - - if (!results.size()) - found=false; - else if (optW&&w_count%5) - shell->WriteOut("\n"); - } else - found=false; - if (!found&&!optB&&!optS) { - shell->WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); - if (!dirPaused(shell, w_size, optP, optW, false)) return false; - } - if (optS) { - size_t len=strlen(sargs); - strcat(sargs, "*.*"); - bool ret=DOS_FindFirst(sargs,0xffff & ~DOS_ATTR_VOLUME); - *(sargs+len)=0; - if (ret) { - std::vector cdirs; - cdirs.clear(); - do { /* File name and extension */ - DtaResult result; - dta.GetResult(result.name,result.lname,result.size,result.hsize,result.date,result.time,result.attr); - - if(result.attr&DOS_ATTR_DIRECTORY && strcmp(result.name, ".")&&strcmp(result.name, "..")) { - strcat(sargs, result.name); - strcat(sargs, "\\"); - char *fname = strrchr_dbcs(args, '\\'); - if (fname==NULL) fname=args; - else fname++; - strcat(sargs, fname); - cdirs.push_back((sargs[0]!='"'&&sargs[strlen(sargs)-1]=='"'?"\"":"")+std::string(sargs)); - *(sargs+len)=0; - } - } while ( (ret=DOS_FindNext()) ); - dirs.insert(dirs.begin()+1, cdirs.begin(), cdirs.end()); - } - if (found&&!optB) { - FormatNumber(cbyte_count,numformat); - shell->WriteOut(MSG_Get("SHELL_CMD_DIR_BYTES_USED"),cfile_count,numformat); - if (!dirPaused(shell, w_size, optP, optW, false)) return false; - } - } - return true; - } - - void DOS_Shell::CMD_DIR(char * args) { - HELP("DIR"); - char numformat[64]; - char path[DOS_PATHLENGTH]; - char sargs[CROSS_LEN]; - - std::string line; - if(GetEnvStr("DIRCMD",line)){ - std::string::size_type idx = line.find('='); - std::string value=line.substr(idx +1 , std::string::npos); - line = std::string(args) + " " + value; - args=const_cast(line.c_str()); - } - - ScanCMDBool(args,"4"); /* /4 ignored (default) */ - bool optW=ScanCMDBool(args,"W"); - bool optP=ScanCMDBool(args,"P"); - if (ScanCMDBool(args,"WP") || ScanCMDBool(args,"PW")) optW=optP=true; - if (ScanCMDBool(args,"-W")) optW=false; - if (ScanCMDBool(args,"-P")) optP=false; - bool optZ=ScanCMDBool(args,"Z"); - if (ScanCMDBool(args,"-Z")) optZ=false; - bool optS=ScanCMDBool(args,"S"); - if (ScanCMDBool(args,"-S")) optS=false; - bool optB=ScanCMDBool(args,"B"); - if (ScanCMDBool(args,"-B")) optB=false; - bool optA=ScanCMDBool(args,"A"); - bool optAD=ScanCMDBool(args,"AD")||ScanCMDBool(args,"A:D"); - bool optAminusD=ScanCMDBool(args,"A-D")||ScanCMDBool(args,"A:-D"); - bool optAS=ScanCMDBool(args,"AS")||ScanCMDBool(args,"A:S"); - bool optAminusS=ScanCMDBool(args,"A-S")||ScanCMDBool(args,"A:-S"); - bool optAH=ScanCMDBool(args,"AH")||ScanCMDBool(args,"A:H"); - bool optAminusH=ScanCMDBool(args,"A-H")||ScanCMDBool(args,"A:-H"); - bool optAR=ScanCMDBool(args,"AR")||ScanCMDBool(args,"A:R"); - bool optAminusR=ScanCMDBool(args,"A-R")||ScanCMDBool(args,"A:-R"); - bool optAA=ScanCMDBool(args,"AA")||ScanCMDBool(args,"A:A"); - bool optAminusA=ScanCMDBool(args,"A-A")||ScanCMDBool(args,"A:-A"); - if (ScanCMDBool(args,"-A")) { - optA = false; - optAD = false; - optAminusD = false; - optAS = false; - optAminusS = false; - optAH = false; - optAminusH = false; - optAR = false; - optAminusR = false; - optAA = false; - optAminusA = false; - } - // Sorting flags - bool reverseSort = false, rev2Sort = false; - bool optON=ScanCMDBool(args,"ON")||ScanCMDBool(args,"O:N"); - if (ScanCMDBool(args,"O-N")||ScanCMDBool(args,"O:-N")) { - optON = true; - reverseSort = true; - } - bool optOD=ScanCMDBool(args,"OD")||ScanCMDBool(args,"O:D"); - if (ScanCMDBool(args,"O-D")||ScanCMDBool(args,"O:-D")) { - optOD = true; - reverseSort = true; - } - bool optOE=ScanCMDBool(args,"OE")||ScanCMDBool(args,"O:E"); - if (ScanCMDBool(args,"O-E")||ScanCMDBool(args,"O:-E")) { - optOE = true; - reverseSort = true; - } - bool optOS=ScanCMDBool(args,"OS")||ScanCMDBool(args,"O:S"); - if (ScanCMDBool(args,"O-S")||ScanCMDBool(args,"O:-S")) { - optOS = true; - reverseSort = true; - } - bool optOG=ScanCMDBool(args,"OG")||ScanCMDBool(args,"O:G"); - if (ScanCMDBool(args,"O-G")||ScanCMDBool(args,"O:-G")) { - optOG = true; - reverseSort = true; - } - bool b0 = false, b1 = false, b2 = false, b3 = false; - bool optOGN = false, optOGD = false, optOGE = false, optOGS = false; - b0=ScanCMDBool(args,"O")||ScanCMDBool(args,"OGN")||ScanCMDBool(args,"O:GN");b1=ScanCMDBool(args,"O-GN")||ScanCMDBool(args,"O:-GN"); - b2=ScanCMDBool(args,"O-G-N")||ScanCMDBool(args,"O:-G-N"),b3=ScanCMDBool(args,"OG-N")||ScanCMDBool(args,"O:G-N"); - if (b0||b1||b2||b3) { - optOGN = true; - reverseSort = b1||b2; - rev2Sort = b2||b3; - } - b0=ScanCMDBool(args,"OGD")||ScanCMDBool(args,"O:GD");b1=ScanCMDBool(args,"O-GD")||ScanCMDBool(args,"O:-GD"); - b2=ScanCMDBool(args,"O-G-D")||ScanCMDBool(args,"O:-G-D");b3=ScanCMDBool(args,"OG-D")||ScanCMDBool(args,"O:G-D"); - if (b0||b1||b2||b3) { - optOGD = true; - reverseSort = b1||b2; - rev2Sort = b2||b3; - } - b0=ScanCMDBool(args,"OGE")||ScanCMDBool(args,"O:GE");b1=ScanCMDBool(args,"O-GE")||ScanCMDBool(args,"O:-GE"); - b2=ScanCMDBool(args,"O-G-E")||ScanCMDBool(args,"O:-G-E");b3=ScanCMDBool(args,"OG-E")||ScanCMDBool(args,"O:G-E"); - if (b0||b1||b2||b3) { - optOGE = true; - reverseSort = b1||b2; - rev2Sort = b2||b3; - } - b0=ScanCMDBool(args,"OGS")||ScanCMDBool(args,"O:GS");b1=ScanCMDBool(args,"O-GS")||ScanCMDBool(args,"O:-GS"); - b2=ScanCMDBool(args,"O-G-S")||ScanCMDBool(args,"O:-G-S");b3=ScanCMDBool(args,"OG-S")||ScanCMDBool(args,"O:G-S"); - if (b0||b1||b2||b3) { - optOGS = true; - reverseSort = b1||b2; - rev2Sort = b2||b3; - } - if (optOGN||optOGD||optOGE||optOGS) optOG = false; - if (ScanCMDBool(args,"-O")) { - optOG = false; - optON = false; - optOD = false; - optOE = false; - optOS = false; - optOGN = false; - optOGD = false; - optOGE = false; - optOGS = false; - reverseSort = false; - } - const char *valid[] = {"4","W","P","-W","-P","WP","PW","Z","-Z","S","-S","B","-B", - "A","-A","AD","A:D","A-D","A:-D","AS","A:S","A-S","A:-S","AH","A:H","A-H","A:-H","AR","A:R","A-R","A:-R","AA","A:A","A-A","A:-A", - "O","-O","ON","O:N","O-N","O:-N","OD","O:D","O-D","O:-D","OE","O:E","O-E","O:-E","OS","O:S","O-S","O:-S","OG","O:G","O-G","O:-G", - "OGN","O:GN","O-GN","O:-GN","OG-N","O:G-N","O-G-N","O:-G-N","OGD","O:GD","O-GD","O:-GD","OG-D","O:G-D","O-G-D","O:-G-D", - "OGE","O:GE","O-GE","O:-GE","OG-E","O:G-E","O-G-E","O:-G-E","OGS","O:GS","O-GS","O:-GS","OG-S","O:G-S","O-G-S","O:-G-S", - NULL}; - if (args && strlen(args)>1) for (int i=0; valid[i] && *args && strchr(args,'/'); i++) while (ScanCMDBool(args,valid[i])); - char * rem=ScanCMDRemain(args); - if (rem) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); - return; - } - byte_count=0;file_count=0;dir_count=0;p_count=0; - Bitu w_size = optW?5:1; - - char buffer[CROSS_LEN]; - args = trim(args); - size_t argLen = strlen(args); - if (argLen == 0) { - strcpy(args,"*.*"); //no arguments. - } else { - // handle \, C:\, etc. handle C:, etc. - if(check_last_split_char(args, argLen, '\\') || args[argLen-1] == ':') { - strcat(args,"*.*"); - } - } - args = ExpandDot(args,buffer,CROSS_LEN,!uselfn); - - if (DOS_FindDevice(args) != DOS_DEVICES) { - WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); - return; - } - if (!strrchr(args,'*') && !strrchr(args,'?')) { - uint16_t attribute=0; - if(!DOS_GetSFNPath(args,sargs,false)) { - if (strlen(args)>1&&toupper(args[0])>='A'&&toupper(args[0])<='Z'&&args[1]==':'&&!Drives[toupper(args[0])-'A']) - WriteOut(MSG_Get("SHELL_ILLEGAL_DRIVE")); - else - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - return; - } - if(DOS_GetFileAttr(sargs,&attribute) && (attribute&DOS_ATTR_DIRECTORY) ) { - DOS_FindFirst(sargs,0xffff & ~DOS_ATTR_VOLUME); - DOS_DTA dta(dos.dta()); - strcpy(args,sargs); - strcat(args,"\\*.*"); // if no wildcard and a directory, get its files - } - } - if (!DOS_GetSFNPath(args,sargs,false)) { - if (strlen(args)>1&&toupper(args[0])>='A'&&toupper(args[0])<='Z'&&args[1]==':'&&!Drives[toupper(args[0])-'A']) - WriteOut(MSG_Get("SHELL_ILLEGAL_DRIVE")); - else - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - return; - } - if (!(uselfn&&!optZ&&strchr(sargs,'*'))&&!strrchr(sargs,'.')) - strcat(sargs,".*"); // if no extension, get them all - sprintf(args,"\"%s\"",sargs); - - /* Make a full path in the args */ - if (!DOS_Canonicalize(args,path)) { - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - return; - } - *(strrchr_dbcs(path,'\\')+1)=0; - if (!DOS_GetSFNPath(path,sargs,true)) { - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - return; - } - if (*(sargs+strlen(sargs)-1) != '\\') strcat(sargs,"\\"); - if (!optB) { - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (Network_IsNetworkResource(args)) { - WriteOut("\n"); - if (optP) p_count+=optW?5:1; - } else - #endif - { - if (strlen(sargs)>2&&sargs[1]==':') { - char c[]=" _:"; - c[1]=toupper(sargs[0]); - CMD_VOL(c[1]>='A'&&c[1]<='Z'?c:empty_string); - } else - CMD_VOL(empty_string); - if (optP) p_count+=optW?15:3; - } - } - - /* Command uses dta so set it to our internal dta */ - RealPt save_dta=dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - dirs.clear(); - dirs.emplace_back(std::string(args)); - inshell=true; - while (!dirs.empty()) { - ctrlbrk=false; - if (!doDir(this, (char *)dirs.begin()->c_str(), dta, numformat, w_size, optW, optZ, optS, optP, optB, optA, optAD, optAminusD, optAS, optAminusS, optAH, optAminusH, optAR, optAminusR, optAA, optAminusA, optOGN, optOGD, optOGE, optOGS, optOG, optON, optOD, optOE, optOS, reverseSort, rev2Sort)) {dos.dta(save_dta);inshell=false;return;} - dirs.erase(dirs.begin()); - } - inshell=false; - if (!optB) { - if (optS) { - WriteOut("\n"); - if (!dirPaused(this, w_size, optP, optW)) {dos.dta(save_dta);return;} - if (!file_count&&!dir_count) - WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); - else - WriteOut(MSG_Get("SHELL_CMD_DIR_FILES_LISTED")); - if (!dirPaused(this, w_size, optP, optW)) {dos.dta(save_dta);return;} - } - /* Show the summary of results */ - FormatNumber(byte_count,numformat); - WriteOut(MSG_Get("SHELL_CMD_DIR_BYTES_USED"),file_count,numformat); - if (!dirPaused(this, w_size, optP, optW)) {dos.dta(save_dta);return;} - uint8_t drive=dta.GetSearchDrive(); - uint64_t free_space=1024u*1024u*100u; - - if(Drives[drive]) { - uint32_t bytes_sector32; uint32_t sectors_cluster32; uint32_t total_clusters32; uint32_t free_clusters32; - uint64_t total_clusters64; uint64_t free_clusters64; - // Since this is the *internal* shell, we want use maximum available query capability at first - if(Drives[drive]->AllocationInfo64(&bytes_sector32, §ors_cluster32, &total_clusters64, &free_clusters64)) { - freec = 0; - free_space = (uint64_t)bytes_sector32 * (Bitu)sectors_cluster32 * (Bitu)free_clusters64; - } - else if((dos.version.major > 7 || (dos.version.major == 7 && dos.version.minor >= 10)) && - Drives[drive]->AllocationInfo32(&bytes_sector32, §ors_cluster32, &total_clusters32, &free_clusters32)) { /* FAT32 aware extended API */ - freec = 0; - free_space = (uint64_t)bytes_sector32 * (Bitu)sectors_cluster32 * (Bitu)free_clusters32; - } - else { - uint16_t bytes_sector; uint8_t sectors_cluster; uint16_t total_clusters; uint16_t free_clusters; - rsize = true; - freec = 0; - Drives[drive]->AllocationInfo(&bytes_sector, §ors_cluster, &total_clusters, &free_clusters); - free_space = (uint64_t)bytes_sector * (Bitu)sectors_cluster * (Bitu)(freec ? freec : free_clusters); - rsize = false; - } - } - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (Network_IsNetworkResource(args)) { - std::string str = MSG_Get("SHELL_CMD_DIR_BYTES_FREE"); - std::string::size_type idx = str.rfind(" %"); - if (idx != std::string::npos) { - str = str.substr(0, idx)+"\n"; // No "nnn Bytes free" - WriteOut(str.c_str(),dir_count); - if (!dirPaused(this, w_size, optP, optW)) {dos.dta(save_dta);return;} - } - } else - #endif - { - FormatNumber(free_space,numformat); - WriteOut(MSG_Get("SHELL_CMD_DIR_BYTES_FREE"),dir_count,numformat); - if (!dirPaused(this, w_size, optP, optW)) {dos.dta(save_dta);return;} - } - } - dos.dta(save_dta); - } - - void DOS_Shell::CMD_LS(char *args) { - HELP("LS"); - bool optA=ScanCMDBool(args,"A"); - bool optL=ScanCMDBool(args,"L"); - bool optP=ScanCMDBool(args,"P"); - bool optZ=ScanCMDBool(args,"Z"); - char * rem=ScanCMDRemain(args); - if (rem) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); - return; - } - if (!outcon) optL = true; - - RealPt save_dta=dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - - std::string pattern = args; - trim(pattern); - - const char last_char = (pattern.length() > 0 ? pattern.back() : '\0'); - switch (last_char) { - case '\0': // No arguments, search for all. - pattern = "*.*"; - break; - case '\\': // Handle \, C:\, etc. - case ':': // Handle C:, etc. - pattern += "*.*"; - break; - default: break; - } - - // Handle patterns starting with a dot. - char buffer[CROSS_LEN]; - pattern = ExpandDot((char *)pattern.c_str(), buffer, sizeof(buffer), true); - - // When there's no wildcard and target is a directory then search files - // inside the directory. - const char *p = pattern.c_str(); - if (!strrchr(p, '*') && !strrchr(p, '?')) { - uint16_t attr = 0; - if (DOS_GetFileAttr(p, &attr) && (attr & DOS_ATTR_DIRECTORY)) - pattern += "\\*.*"; - } - - // If no extension, list all files. - // This makes patterns like foo* work. - if (!strrchr(pattern.c_str(), '.')) - pattern += ".*"; - - char spattern[CROSS_LEN]; - if (!DOS_GetSFNPath(pattern.c_str(),spattern,false)) { - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - return; - } - int fbak=lfn_filefind_handle; - lfn_filefind_handle=uselfn?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; - bool ret = DOS_FindFirst(((uselfn?"\"":"")+std::string(spattern)+(uselfn?"\"":"")).c_str(), 0xffff & ~DOS_ATTR_VOLUME); - if (!ret) { - lfn_filefind_handle=fbak; - if (strlen(trim(args))) - WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"), trim(args)); - else - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - dos.dta(save_dta); - return; - } - - std::vector results; - // reserve space for as many as we can fit into a single memory page - // nothing more to it; make it larger if necessary - results.reserve(MEM_PAGE_SIZE / sizeof(DtaResult)); - - do { - DtaResult result; - dta.GetResult(result.name, result.lname, result.size, result.hsize, result.date, result.time, result.attr); - results.push_back(result); - } while ((ret = DOS_FindNext()) == true); - lfn_filefind_handle=fbak; - - size_t w_count, p_count, col; - unsigned int max[15], total, tcols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); - if (!tcols) tcols=80; - int mrow=tcols>80?15:10; - - for (col=mrow; col>0; col--) { - for (int i=0; imax[w_count%col]) max[w_count%col]=(unsigned int)(name.size()+2); - ++w_count; - } - total=0; - for (size_t i=0; i4) { - std::string ext=name.substr(name.length()-4); - std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower); - if (ext==".exe"||ext==".com"||ext==".bat") is_executable=true; - } - if (col==1) { - if (is_executable) WriteOut("\033[32;1m"); - p_count+=WriteOut_NoParsing(name.c_str(), true); - WriteOut(is_executable?"\033[0m\n":"\n"); - p_count++; - } else - WriteOut(is_executable?"\033[32;1m%-*s\033[0m":"%-*s", max[w_count % col], name.c_str()); - } - if (col>1) { - ++w_count; - if (w_count % col == 0) {p_count++;WriteOut_NoParsing("\n");} - } - if (optP&&p_count>=GetPauseCount()) { - WriteOut(MSG_Get("SHELL_CMD_PAUSE")); - uint8_t c;uint16_t n=1; - DOS_ReadFile(STDIN,&c,&n); - if (c==3) {dos.dta(save_dta);return;} - if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key - p_count=0; - } - } - if (col>1&&w_count%col) WriteOut_NoParsing("\n"); - dos.dta(save_dta); - } - - struct copysource { - std::string filename; - bool concat; - copysource(std::string& filein,bool concatin): - filename(filein),concat(concatin){ }; - copysource():filename(""),concat(false){ }; - }; - - void DOS_Shell::CMD_COPY(char * args) { - HELP("COPY"); - static std::string defaulttarget = "."; - const char ch_y = MSG_Get("INT21_6523_YESNO_CHARS")[0]; - const char ch_n = MSG_Get("INT21_6523_YESNO_CHARS")[1]; - const char ch_Y = toupper(ch_y); - const char ch_N = toupper(ch_n); - const char ch_a = MSG_Get("SHELL_ALLFILES_CHAR")[0]; - const char ch_A = toupper(ch_a); - StripSpaces(args); - /* Command uses dta so set it to our internal dta */ - RealPt save_dta=dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; - char name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH+1]; - std::vector sources; - // ignore /b and /t switches: always copy binary - while(ScanCMDBool(args,"B")) ; - while(ScanCMDBool(args,"T")) ; //Shouldn't this be A ? - while(ScanCMDBool(args,"A")) ; - bool optY=ScanCMDBool(args,"Y"); - if (bf||call||exec) optY=true; - std::string line; - if(GetEnvStr("COPYCMD",line)){ - std::string::size_type idx = line.find('='); - std::string value=line.substr(idx +1 , std::string::npos); - char copycmd[CROSS_LEN]; - strcpy(copycmd, value.c_str()); - if (ScanCMDBool(copycmd, "Y") && !ScanCMDBool(copycmd, "-Y")) optY = true; - } - if (ScanCMDBool(args,"-Y")) optY=false; - ScanCMDBool(args,"V"); - - char * rem=ScanCMDRemain(args); - if (rem) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); - dos.dta(save_dta); - return; - } - // Gather all sources (extension to copy more than 1 file specified at command line) - // Concatenating files go as follows: All parts except for the last bear the concat flag. - // This construction allows them to be counted (only the non concat set) - char q[]="\""; - char* source_p = NULL; - char source_x[DOS_PATHLENGTH+CROSS_LEN]; - while ( (source_p = StripArg(args)) && *source_p ) { - do { - char* plus = strchr(source_p,'+'); - // If StripWord() previously cut at a space before a plus then - // set concatenate flag on last source and remove leading plus. - if (plus == source_p && sources.size()) { - sources[sources.size()-1].concat = true; - // If spaces also followed plus then item is only a plus. - if (strlen(++source_p)==0) break; - plus = strchr(source_p,'+'); - } - if (plus) { - char *c=source_p+strlen(source_p)-1; - if (*source_p=='"'&&*c=='"') { - *c=0; - if (strchr(source_p+1,'"')) - *plus++ = 0; - else - plus=NULL; - *c='"'; - } else - *plus++ = 0; - } - safe_strncpy(source_x,source_p,CROSS_LEN); - bool has_drive_spec = false; - size_t source_x_len = strlen(source_x); - if (source_x_len>0) { - if (source_x[source_x_len-1]==':') has_drive_spec = true; - else if (uselfn&&strchr(source_x, '*')) { - char * find_last; - find_last=strrchr_dbcs(source_x,'\\'); - if (find_last==NULL) find_last=source_x; - else find_last++; - if (strlen(find_last)>0&&source_x[source_x_len-1]=='*'&&strchr(find_last, '.')==NULL) strcat(source_x, ".*"); - } - } - if (!has_drive_spec && !strpbrk(source_p,"*?") ) { //doubt that fu*\*.* is valid - char spath[DOS_PATHLENGTH]; - if (DOS_GetSFNPath(source_p,spath,false)) { - bool root=false; - if (strlen(spath)==3&&spath[1]==':'&&spath[2]=='\\') { - root=true; - strcat(spath, "*.*"); - } - if (DOS_FindFirst(spath,0xffff & ~DOS_ATTR_VOLUME)) { - dta.GetResult(name,lname,size,hsize,date,time,attr); - if (attr & DOS_ATTR_DIRECTORY || root) - strcat(source_x,"\\*.*"); - } - } - } - std::string source_xString = std::string(source_x); - sources.push_back(copysource(source_xString,(plus)?true:false)); - source_p = plus; - } while(source_p && *source_p); - } - // At least one source has to be there - if (!sources.size() || !sources[0].filename.size()) { - WriteOut(MSG_Get("SHELL_MISSING_PARAMETER")); - dos.dta(save_dta); - return; - } - - copysource target; - // If more than one object exists and last target is not part of a - // concat sequence then make it the target. - if(sources.size()>1 && !sources[sources.size()-2].concat){ - target = sources.back(); - sources.pop_back(); - } - //If no target => default target with concat flag true to detect a+b+c - if(target.filename.size() == 0) target = copysource(defaulttarget,true); - - copysource oldsource; - copysource source; - uint32_t count = 0; - while(sources.size()) { - /* Get next source item and keep track of old source for concat start end */ - oldsource = source; - source = sources[0]; - sources.erase(sources.begin()); - - //Skip first file if doing a+b+c. Set target to first file - if(!oldsource.concat && source.concat && target.concat) { - target = source; - continue; - } - - /* Make a full path in the args */ - char pathSourcePre[DOS_PATHLENGTH], pathSource[DOS_PATHLENGTH+2]; - char pathTarget[DOS_PATHLENGTH]; - - if (!DOS_Canonicalize(const_cast(source.filename.c_str()),pathSourcePre)) { - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - dos.dta(save_dta); - return; - } - strcpy(pathSource,pathSourcePre); - if (uselfn) sprintf(pathSource,"\"%s\"",pathSourcePre); - // cut search pattern - char* pos = strrchr_dbcs(pathSource,'\\'); - if (pos) *(pos+1) = 0; - - if (!DOS_Canonicalize(const_cast(target.filename.c_str()),pathTarget)) { - WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - dos.dta(save_dta); - return; - } - char* temp = strstr(pathTarget,"*.*"); - if(temp && (temp == pathTarget || temp[-1] == '\\')) *temp = 0;//strip off *.* from target - - // add '\\' if target is a directory - bool target_is_file = true; - if (pathTarget[strlen(pathTarget)-1]!='\\') { - if (DOS_FindFirst(pathTarget,0xffff & ~DOS_ATTR_VOLUME)) { - dta.GetResult(name,lname,size,hsize,date,time,attr); - if (attr & DOS_ATTR_DIRECTORY) { - strcat(pathTarget,"\\"); - target_is_file = false; - } - } - } else target_is_file = false; - - //Find first sourcefile - char sPath[DOS_PATHLENGTH]; - bool ret=DOS_GetSFNPath(source.filename.c_str(),sPath,false) && DOS_FindFirst(((strchr(sPath, ' ')&&sPath[0]!='"'?"\"":"")+std::string(sPath)+(strchr(sPath, ' ')&&sPath[strlen(sPath)-1]!='"'?"\"":"")).c_str(),0xffff & ~DOS_ATTR_VOLUME); - if (!ret) { - WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),source.filename.c_str()); - dos.dta(save_dta); - return; - } - - uint16_t sourceHandle,targetHandle = 0; - char nameTarget[DOS_PATHLENGTH]; - char nameSource[DOS_PATHLENGTH], nametmp[DOS_PATHLENGTH+2]; - - // Cache so we don't have to recalculate - size_t pathTargetLen = strlen(pathTarget); - - // See if we have to substitute filename or extension - char * ext = nullptr; - size_t replacementOffset = 0; - if (pathTarget[pathTargetLen-1]!='\\') { - // only if it's not a directory - ext = strchr(pathTarget, '.'); - if (ext > pathTarget) { // no possible substitution - if (ext[-1] == '*') { - // we substitute extension, save it, hide the name - ext[-1] = 0; - assert(ext > pathTarget + 1); // pathTarget is fully qualified - if (ext[-2] != '\\') { - // there is something before the asterisk - // save the offset in the source names - - replacementOffset = source.filename.find('*'); - size_t lastSlash = std::string::npos; - bool lead = false; - for (unsigned int i=0; i1&&(nameTarget[1]==':'||nameTarget[2]==':')?(toupper(nameTarget[nameTarget[0]=='"'?1:0])-'A'):-1; - if(drive >= 0 && Drives[drive]) { - uint16_t bytes_sector; uint8_t sectors_cluster; uint16_t total_clusters; uint16_t free_clusters; - uint32_t bytes32 = 0, sectors32 = 0, clusters32 = 0, free32 = 0; - bool no_free_space = true; - rsize = true; - freec = 0; - if(dos.version.major > 7 || (dos.version.major == 7 && dos.version.minor >= 10)) { - Drives[drive]->AllocationInfo32(&bytes32, §ors32, &clusters32, &free32); - no_free_space = (uint64_t)bytes32 * (uint64_t)sectors32 * (uint64_t)free32 < size ? true : false; - //LOG_MSG("drive=%u, no_free_space = %d bytes32=%u, sectors32=%u, free32 =%u, free_space=%u, size=%u", - // drive, no_free_space ? 1 : 0, bytes32, sectors32, free32, bytes32*sectors32*free32, size); - } - if(bytes32 == 0 || sectors32 == 0 || dos.version.major < 7 || (dos.version.major == 7 && dos.version.minor < 10)) { - Drives[drive]->AllocationInfo(&bytes_sector, §ors_cluster, &total_clusters, &free_clusters); - no_free_space = (Bitu)bytes_sector* (Bitu)sectors_cluster* (Bitu)(freec ? freec : free_clusters) < size ? true : false; - //LOG_MSG("no_free_space = %d bytes=%u, sectors=%u, free =%u, free_space=%u, size=%u", - // no_free_space ? 1 : 0, bytes_sector, sectors_cluster, freec, bytes_sector*sectors_cluster*free_clusters, size); - } - rsize = false; - if (no_free_space) { - WriteOut(MSG_Get("SHELL_CMD_COPY_NOSPACE"), uselfn?lname:name); - DOS_CloseFile(sourceHandle); - ret = DOS_FindNext(); - continue; - } - } - } - } - //Don't create a new file when in concat mode - if (oldsource.concat || DOS_CreateFile(nameTarget,0,&targetHandle)) { - uint32_t dummy=0; - - if (DOS_FindDevice(name) == DOS_DEVICES && !DOS_SetFileDate(targetHandle, ftime, fdate)) - LOG_MSG("WARNING: COPY unable to apply date/time to dest"); - - //In concat mode. Open the target and seek to the eof - if (!oldsource.concat || (DOS_OpenFile(nameTarget,OPEN_READWRITE,&targetHandle) && - DOS_SeekFile(targetHandle,&dummy,DOS_SEEK_END))) { - // Copy - static uint8_t buffer[0x8000]; // static, otherwise stack overflow possible. - bool failed = false; - uint16_t toread = 0x8000; - bool iscon=DOS_FindDevice(name)==DOS_FindDevice("con"); - if (iscon) dos.echo=true; - bool cont; - do { - if (!DOS_ReadFile(sourceHandle,buffer,&toread)) failed=true; - if (iscon) { - if (dos.errorcode==77) { - dos.dta(save_dta); - DOS_CloseFile(sourceHandle); - DOS_CloseFile(targetHandle); - if (!exist) DOS_UnlinkFile(nameTarget); - dos.echo=echo; - return; - } - cont=true; - for (int i=0;i0 && DOS_FindDevice(name) == DOS_DEVICES) DOS_SetFileDate(targetHandle, ftime, fdate); - #endif - if (!DOS_CloseFile(targetHandle)) failed=true; - if (failed) - WriteOut(MSG_Get("SHELL_CMD_COPY_ERROR"),uselfn?lname:name); - else if (strcmp(name,lname)&&uselfn) - WriteOut(" %s [%s]\n",lname,name); - else - WriteOut(" %s\n",uselfn?lname:name); - if(!source.concat && !special && !failed) count++; //Only count concat files once - } else { - DOS_CloseFile(sourceHandle); - printf("Fail1\n"); - WriteOut(MSG_Get("SHELL_CMD_COPY_FAILURE"),const_cast(target.filename.c_str())); - } - } else { - DOS_CloseFile(sourceHandle); - printf("Fail2\n"); - WriteOut(MSG_Get("SHELL_CMD_COPY_FAILURE"),const_cast(target.filename.c_str())); - } - } else - { - printf("Fail3\n"); - WriteOut(MSG_Get("SHELL_CMD_COPY_FAILURE"),const_cast(source.filename.c_str())); - } - } - //On to the next file if the previous one wasn't a device - if ((attr&DOS_ATTR_DEVICE) == 0) ret = DOS_FindNext(); - else ret = false; - } - } - - WriteOut(MSG_Get("SHELL_CMD_COPY_SUCCESS"),count); - dos.dta(save_dta); - dos.echo=echo; - Drives[DOS_GetDefaultDrive()]->EmptyCache(); - } - - static void skipspc(char* &pcheck) { - while (*pcheck != 0 && (*pcheck == ' ' || *pcheck == '\t')) pcheck++; - } - - static void readnonspcu(std::string &s,char* &pcheck) { - s.clear(); - while (*pcheck != 0 && !(*pcheck == ' ' || *pcheck == '\t')) s += toupper( *(pcheck++) ); - } - - static void readnonspc(std::string &s,char* &pcheck) { - s.clear(); - while (*pcheck != 0 && !(*pcheck == ' ' || *pcheck == '\t')) s += *(pcheck++); - } - - /* NTS: WARNING, this function modifies the buffer pointed to by char *args */ - void DOS_Shell::CMD_SET(char * args) { - HELP("SET"); - StripSpaces(args); - - enum op_mode_t { - show_all_env, - set_env, - show_env, - erase_env, - first_env - }; - - op_mode_t op_mode = show_all_env; - std::string env_name,env_value; - - const bool zdirpath = static_cast(control->GetSection("dos"))->Get_bool("drive z expand path"); - - { - std::string sw; - - /* parse arguments at the start */ - skipspc(args); - while (*args == '/') { - args++; /* skip / */ - readnonspcu(sw,args); - - if (sw == "P") { - WriteOut("Set /P is not supported. Use Choice!"); /* TODO: What is SET /P supposed to do? */ - return; - } - else if (sw == "ERASE") { /* DOSBox-X extension: Completely erase the environment block */ - op_mode = erase_env; - } - else if (sw == "FIRST") { /* DOSBox-X extension: Move the specified variable to the front of the environment block */ - op_mode = first_env; - } - else { - WriteOut("Unknown switch /"); - WriteOut(sw.c_str()); - WriteOut("\n"); - return; - } - - skipspc(args); - } - } - - if (op_mode == first_env) { - if (*args == 0) return; - readnonspc(env_name,args); - } - else if (op_mode == show_all_env) { - if (*args != 0) { - /* Most SET commands take the form NAME=VALUE */ - char *p = strchr(args,'='); - if (p == NULL) { - /* SET without assignment prints the variable instead */ - op_mode = show_env; - readnonspc(env_name,args); - } else { - /* ASCIIZ snip the args string in two, so that args is C-string name of the variable, - * and "p" is C-string value of the variable */ - op_mode = set_env; - *p++ = 0; env_name = args; env_value = p; - } - } - } - - switch (op_mode) { - case show_all_env: { - const Bitu count = GetEnvCount(); - std::string line; - - for (Bitu a = 0;a < count;a++) { - if (GetEnvNum(a,line)) - WriteOut("%s\n",line.c_str()); - } - break; } - case show_env: - if (GetEnvStr(env_name.c_str(),env_value)) - WriteOut("%s\n",env_value.c_str()); - else - WriteOut(MSG_Get("SHELL_CMD_SET_NOT_SET"),env_name.c_str()); - break; - case set_env: - if(zdirpath && !strcasecmp(env_name.c_str(), "path")) GetExpandedPath(env_value); - - /* No parsing is needed. The command interpreter does the variable substitution for us */ - /* NTS: If Win95 is any example, the command interpreter expands the variables for us */ - if (!SetEnv(env_name.c_str(),env_value.c_str())) - WriteOut(MSG_Get("SHELL_CMD_SET_OUT_OF_SPACE")); - - break; - case erase_env: - if (!EraseEnv()) - WriteOut("Unable to erase environment block\n"); - break; - case first_env: - if (!FirstEnv(env_name.c_str())) - WriteOut("Unable to move environment variable\n"); - break; - default: - abort(); - break; - } - } - - void DOS_Shell::CMD_IF(char * args) { - HELP("IF"); - StripSpaces(args,'='); - bool has_not=false; - - while (strncasecmp(args,"NOT",3) == 0) { - if (!isspace(*reinterpret_cast(&args[3])) && (args[3] != '=')) break; - args += 3; //skip text - //skip more spaces - StripSpaces(args,'='); - has_not = !has_not; - } - - if(strncasecmp(args,"ERRORLEVEL",10) == 0) { - args += 10; //skip text - //Strip spaces and == - StripSpaces(args,'='); - char* word = StripWord(args); - if(!isdigit(*word)) { - WriteOut(MSG_Get("SHELL_CMD_IF_ERRORLEVEL_MISSING_NUMBER")); - return; - } - - uint8_t n = 0; - do n = n * 10 + (*word - '0'); - while (isdigit(*++word)); - if(*word && !isspace(*word)) { - WriteOut(MSG_Get("SHELL_CMD_IF_ERRORLEVEL_INVALID_NUMBER")); - return; - } - /* Read the error code from DOS */ - if ((dos.return_code>=n) ==(!has_not)) DoCommand(args); - return; - } - - if(strncasecmp(args,"EXIST ",6) == 0) { - args += 6; //Skip text - StripSpaces(args); - char* word = StripArg(args); - if (!*word) { - WriteOut(MSG_Get("SHELL_CMD_IF_EXIST_MISSING_FILENAME")); - return; - } - - { /* DOS_FindFirst uses dta so set it to our internal dta */ - char spath[DOS_PATHLENGTH], path[DOS_PATHLENGTH], pattern[DOS_PATHLENGTH], full[DOS_PATHLENGTH], *r; - if (!DOS_Canonicalize(word,full)) { - if (has_not) DoCommand(args); - return; - } - r=strrchr_dbcs(full, '\\'); - if (r!=NULL) { - *r=0; - strcpy(path, full); - strcat(path, "\\"); - strcpy(pattern, r+1); - *r='\\'; - } else { - strcpy(path, ""); - strcpy(pattern, full); - } - int k=0; - for (int i=0;i<(int)strlen(pattern);i++) - if (pattern[i]!='\"') - pattern[k++]=pattern[i]; - pattern[k]=0; - strcpy(spath, path); - if (strchr_dbcs(word,'\"')||uselfn) { - if (!DOS_GetSFNPath(("\""+std::string(path)+"\\").c_str(), spath, false)) strcpy(spath, path); - if (!strlen(spath)||spath[strlen(spath)-1]!='\\') strcat(spath, "\\"); - } - RealPt save_dta=dos.dta(); - dos.dta(dos.tables.tempdta); - int fbak=lfn_filefind_handle; - lfn_filefind_handle=uselfn?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; - std::string sfull=std::string(spath)+std::string(pattern); - bool ret=DOS_FindFirst(((uselfn&&sfull.length()&&sfull[0]!='"'?"\"":"")+sfull+(uselfn&&sfull.length()&&sfull[sfull.length()-1]!='"'?"\"":"")).c_str(),0xffff & ~(DOS_ATTR_VOLUME|DOS_ATTR_DIRECTORY)); - lfn_filefind_handle=fbak; - dos.dta(save_dta); - if (ret==(!has_not)) DoCommand(args); - } - return; - } - - /* Normal if string compare */ - - char* word1 = args; - // first word is until space or = - while (*args && !isspace(*reinterpret_cast(args)) && (*args != '=')) - args++; - char* end_word1 = args; - - // scan for = - while (*args && (*args != '=')) - args++; - // check for == - if ((*args==0) || (args[1] != '=')) { - SyntaxError(); - return; - } - args += 2; - StripSpaces(args,'='); - - char* word2 = args; - // second word is until space or = - while (*args && !isspace(*reinterpret_cast(args)) && (*args != '=')) - args++; - - if (*args) { - *end_word1 = 0; // mark end of first word - *args++ = 0; // mark end of second word - StripSpaces(args,'='); - - if ((strcmp(word1,word2)==0)==(!has_not)) DoCommand(args); - } - } - - void DOS_Shell::CMD_GOTO(char * args) { - HELP("GOTO"); - StripSpaces(args); - if (!bf) return; - if (*args==':') args++; - //label ends at the first space - char* non_space = args; - while (*non_space) { - if((*non_space == ' ') || (*non_space == '\t')) - *non_space = 0; - else non_space++; - } - if (!*args) { - WriteOut(MSG_Get("SHELL_CMD_GOTO_MISSING_LABEL")); - return; - } - if (!bf->Goto(args)) { - WriteOut(MSG_Get("SHELL_CMD_GOTO_LABEL_NOT_FOUND"),args); - return; - } - } - - void DOS_Shell::CMD_SHIFT(char * args ) { - HELP("SHIFT"); - if(bf) bf->Shift(); - } - - void DOS_Shell::CMD_TYPE(char * args) { - HELP("TYPE"); - - // ignore /p /h and /t for compatibility - ScanCMDBool(args,"P"); - ScanCMDBool(args,"H"); - ScanCMDBool(args,"T"); - StripSpaces(args); - if (strcasecmp(args,"nul")==0) return; - if (!*args) { - WriteOut(MSG_Get("SHELL_SYNTAXERROR")); - return; - } - uint16_t handle; - char * word; - bool lead = false; - int COLS = 80; - if (!IS_PC98_ARCH && outcon) COLS=real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); - BIOS_NCOLS; - uint8_t page=outcon?real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE):0; - nextfile: - word=StripArg(args); - if (!DOS_OpenFile(word,0,&handle)) { - WriteOut(MSG_Get(dos.errorcode==DOSERR_ACCESS_DENIED?"SHELL_CMD_FILE_ACCESS_DENIED":(dos.errorcode==DOSERR_PATH_NOT_FOUND?"SHELL_ILLEGAL_PATH":"SHELL_CMD_FILE_NOT_FOUND")),word); - return; - } - ctrlbrk=false; - uint8_t c,last,last2,last3;uint16_t n=1; - last3=last2=last=0; - bool iscon=DOS_FindDevice(word)==DOS_FindDevice("con"); - while (n) { - DOS_ReadFile(handle,&c,&n); - if (outcon && !CURSOR_POS_COL(page)) last3=last2=last=0; - if (lead) lead=false; - else if ((IS_PC98_ARCH || isDBCSCP()) - #if defined(USE_TTF) - && dbcs_sbcs - #endif - ) lead = isKanji1(c) && !(TTF_using() - #if defined(USE_TTF) - && autoboxdraw - #endif - && CheckBoxDrawing(last3, last2, last, c)); - if (n==0 || c==0x1a) break; // stop at EOF - if (iscon) { - if (c==3) break; - else if (c==13) WriteOut("\r\n"); - } else if (CheckBreak(this)) break; - else if (outcon && lead && CURSOR_POS_COL(page) == COLS-1) WriteOut(" "); - DOS_WriteFile(STDOUT,&c,&n); - if (outcon) {last3=last2;last2=last;last=c;} - } - DOS_CloseFile(handle); - if (*args) goto nextfile; - } - - void DOS_Shell::CMD_REM(char * args) { - HELP("REM"); - } - - static char PAUSED(void) { - uint8_t c; uint16_t n=1, handle; - if (!usecon&&DOS_OpenFile("con", OPEN_READWRITE, &handle)) { - DOS_ReadFile (handle,&c,&n); - DOS_CloseFile(handle); - } else - DOS_ReadFile (STDIN,&c,&n); - return c; - } - - void DOS_Shell::CMD_MORE(char * args) { - HELP("MORE"); - //ScanCMDBool(args,">"); - int nchars = 0, nlines = 0, linecount = 0, LINES = 25, COLS = 80, TABSIZE = 8; - char * word; - uint8_t c,last,last2,last3; - last3=last2=last=0; - bool lead=false; - uint16_t n=1; - StripSpaces(args); - if (IS_PC98_ARCH) { - LINES=real_readb(0x60,0x113) & 0x01 ? 25 : 20; - COLS=80; - if (real_readb(0x60,0x111)) LINES--; // Function keys displayed - } else { - LINES=(IS_EGAVGA_ARCH?real_readb(BIOSMEM_SEG,BIOSMEM_NB_ROWS):24)+1; - COLS=real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); - } - LINES--; - if(!*args||!strcasecmp(args, "con")) { - while (true) { - DOS_ReadFile (STDIN,&c,&n); - if (lead) lead=false; - else if ((IS_PC98_ARCH || isDBCSCP()) - #if defined(USE_TTF) - && dbcs_sbcs - #endif - ) lead = isKanji1(c) && !(TTF_using() - #if defined(USE_TTF) - && autoboxdraw - #endif - && CheckBoxDrawing(last3, last2, last, c)); - if (c==3) {dos.echo=echo;return;} - else if (n==0) {if (last!=10) WriteOut("\r\n");dos.echo=echo;return;} - else if (c==13&&last==26) {dos.echo=echo;return;} - else { - if (c==10); - else if (c==13) { - linecount++; - WriteOut("\r\n"); - last3=last2=last=0; - } else if (c=='\t') { - do { - WriteOut(" "); - nchars++; - } while ( nchars < COLS && nchars % TABSIZE ); - } else { - if (lead && nchars == COLS-1) { - last3=last2=last=0; - nlines++; - nchars = 0; - WriteOut("\n"); - if (nlines == LINES) { - WriteOut("-- More -- (%u) --",linecount); - if (PAUSED()==3) return; - WriteOut("\n"); - nlines=0; - } - } - nchars++; - WriteOut("%c", c); - } - if (c == 13 || nchars >= COLS) { - nlines++; - nchars = 0; - if (nlines == LINES) { - WriteOut("-- More -- (%u) --",linecount); - if (PAUSED()==3) return; - WriteOut("\n"); - nlines=0; - } - } - last3=last2;last2=last;last=c; - } - } - } - if (strcasecmp(args,"nul")==0) return; - if (!*args) { - WriteOut(MSG_Get("SHELL_SYNTAXERROR")); - return; - } - uint16_t handle; - nextfile: - word=StripArg(args); - if (!DOS_OpenFile(word,0,&handle)) { - WriteOut(MSG_Get(dos.errorcode==DOSERR_ACCESS_DENIED?"SHELL_CMD_FILE_ACCESS_DENIED":(dos.errorcode==DOSERR_PATH_NOT_FOUND?"SHELL_ILLEGAL_PATH":"SHELL_CMD_FILE_NOT_FOUND")),word); - return; - } - ctrlbrk=false; - lead=false; - last3=last2=last=0; - nlines=0; - do { - n=1; - DOS_ReadFile(handle,&c,&n); - if (lead) lead=false; - else if ((IS_PC98_ARCH || isDBCSCP()) - #if defined(USE_TTF) - && dbcs_sbcs + strcpy(path, ""); + strcpy(pattern, full); + } + int k = 0; + for(int i = 0; i < (int)strlen(pattern); i++) + if(pattern[i] != '\"') + pattern[k++] = pattern[i]; + pattern[k] = 0; + strcpy(spath, path); + if(strchr(args, '\"') || uselfn) { + if(!DOS_GetSFNPath(("\"" + std::string(path) + "\\").c_str(), spath, false)) strcpy(spath, path); + if(!strlen(spath) || spath[strlen(spath) - 1] != '\\') strcat(spath, "\\"); + } + std::string pfull = std::string(spath) + std::string(pattern); + int fbak = lfn_filefind_handle; + lfn_filefind_handle = uselfn ? LFN_FILEFIND_INTERNAL : LFN_FILEFIND_NONE; + bool res = DOS_FindFirst(((uselfn && pfull.length() && pfull[0] != '"' ? "\"" : "") + pfull + (uselfn && pfull.length() && pfull[pfull.length() - 1] != '"' ? "\"" : "")).c_str(), 0xffff & ~DOS_ATTR_VOLUME); + if(!res) { + lfn_filefind_handle = fbak; + WriteOut(MSG_Get("SHELL_CMD_DEL_ERROR"), args); + dos.dta(save_dta); + return; + } + lfn_filefind_handle = fbak; + //end can't be 0, but if it is we'll get a nice crash, who cares :) + strcpy(sfull, full); + char* end = strrchr_dbcs(full, '\\') + 1; *end = 0; + char* lend = strrchr_dbcs(sfull, '\\') + 1; *lend = 0; + dta = dos.dta(); + bool exist = false; + lfn_filefind_handle = uselfn ? LFN_FILEFIND_INTERNAL : LFN_FILEFIND_NONE; + while(res) { + dta.GetResult(name, lname, size, hsize, date, time, attr); + if(!optF && (attr & DOS_ATTR_READ_ONLY) && !(attr & DOS_ATTR_DIRECTORY)) { + exist = true; + strcpy(end, name); + strcpy(lend, lname); + WriteOut(MSG_Get("SHELL_CMD_DEL_ERROR"), uselfn ? sfull : full); + } + else if(!(attr & DOS_ATTR_DIRECTORY)) { + exist = true; + strcpy(end, name); + strcpy(lend, lname); + if(optP) { + WriteOut(MSG_Get("SHELL_CMD_DEL_CONFIRM"), uselfn ? sfull : full); + uint8_t c; + uint16_t n = 1; + DOS_ReadFile(STDIN, &c, &n); + if(c == 3) break; + c = c == char_yes || c == char_yes_upper ? char_yes_upper : char_no_upper; + WriteOut("%c\r\n", c); + if(c == char_no_upper) { lfn_filefind_handle = uselfn ? LFN_FILEFIND_INTERNAL : LFN_FILEFIND_NONE; res = DOS_FindNext(); continue; } + } + if(strlen(full)) { + std::string pfull = (uselfn || strchr(full, ' ') ? (full[0] != '"' ? "\"" : "") : "") + std::string(full) + (uselfn || strchr(full, ' ') ? (full[strlen(full) - 1] != '"' ? "\"" : "") : ""); + bool reset = false; + if(optF && (attr & DOS_ATTR_READ_ONLY) && DOS_SetFileAttr(pfull.c_str(), attr & ~DOS_ATTR_READ_ONLY)) reset = true; + if(!DOS_UnlinkFile(pfull.c_str())) { + if(optF && reset) DOS_SetFileAttr(pfull.c_str(), attr); + WriteOut(MSG_Get("SHELL_CMD_DEL_ERROR"), uselfn ? sfull : full); + } + } + else WriteOut(MSG_Get("SHELL_CMD_DEL_ERROR"), uselfn ? sfull : full); + } + res = DOS_FindNext(); + } + lfn_filefind_handle = fbak; + if(!exist) WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"), args); + dos.dta(save_dta); +} +#endif + +size_t GetPauseCount() { + uint16_t rows; + if (IS_PC98_ARCH) + rows=real_readb(0x60,0x113) & 0x01 ? 25 : 20; + else + rows=(IS_EGAVGA_ARCH?real_readb(BIOSMEM_SEG,BIOSMEM_NB_ROWS):24)+1; + return (rows > 2u) ? (rows - 2u) : 23u; +} + +struct DtaResult { + char name[DOS_NAMELENGTH_ASCII]; + char lname[LFN_NAMELENGTH+1]; + uint32_t size; + uint32_t hsize; + uint16_t date; + uint16_t time; + uint8_t attr; + + static bool groupDef(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && strcmp(lhs.name, rhs.name) < 0); } + static bool groupExt(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && strcmp(lhs.getExtension(), rhs.getExtension()) < 0); } + static bool groupSize(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && lhs.size+lhs.hsize*0x100000000 < rhs.size+rhs.hsize*0x100000000); } + static bool groupDate(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && (lhs.date < rhs.date || (lhs.date == rhs.date && lhs.time < rhs.time))); } + static bool groupRevDef(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && strcmp(lhs.name, rhs.name) > 0); } + static bool groupRevExt(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && strcmp(lhs.getExtension(), rhs.getExtension()) > 0); } + static bool groupRevSize(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && lhs.size+lhs.hsize*0x100000000 > rhs.size+rhs.hsize*0x100000000); } + static bool groupRevDate(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY)?true:((((lhs.attr & DOS_ATTR_DIRECTORY) && (rhs.attr & DOS_ATTR_DIRECTORY)) || (!(lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY))) && (lhs.date > rhs.date || (lhs.date == rhs.date && lhs.time > rhs.time))); } + static bool groupDirs(const DtaResult &lhs, const DtaResult &rhs) { return (lhs.attr & DOS_ATTR_DIRECTORY) && !(rhs.attr & DOS_ATTR_DIRECTORY); } + static bool compareName(const DtaResult &lhs, const DtaResult &rhs) { return strcmp(lhs.name, rhs.name) < 0; } + static bool compareExt(const DtaResult &lhs, const DtaResult &rhs) { return strcmp(lhs.getExtension(), rhs.getExtension()) < 0; } + static bool compareSize(const DtaResult &lhs, const DtaResult &rhs) { return lhs.size+lhs.hsize*0x100000000 < rhs.size+rhs.hsize*0x100000000; } + static bool compareDate(const DtaResult &lhs, const DtaResult &rhs) { return lhs.date < rhs.date || (lhs.date == rhs.date && lhs.time < rhs.time); } + + const char * getExtension() const { + const char * ext = empty_string; + if (name[0] != '.') { + ext = strrchr(name, '.'); + if (!ext) ext = empty_string; + } + return ext; + } + +}; + +extern bool ctrlbrk; +std::vector tdirs; + +static bool doDeltree(DOS_Shell * shell, char * args, DOS_DTA dta, bool optY, bool first) { + const char char_yes_upper = toupper(char_yes); + const char char_no_upper = toupper(char_no); + char spath[DOS_PATHLENGTH],sargs[DOS_PATHLENGTH+4],path[DOS_PATHLENGTH+4],full[DOS_PATHLENGTH],sfull[DOS_PATHLENGTH+2]; + if (!DOS_Canonicalize(args,full)||strrchr_dbcs(full,'\\')==NULL) { shell->WriteOut(MSG_Get("SHELL_ILLEGAL_PATH"));return false; } + if (!DOS_GetSFNPath(args,spath,false)) { + if (first) shell->WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); + return false; + } + if (!uselfn||!DOS_GetSFNPath(args,sfull,true)) strcpy(sfull,full); + sprintf(sargs,"\"%s\"",spath); + bool found=false, fdir=false, res=DOS_FindFirst(sargs,0xffff & ~DOS_ATTR_VOLUME); + if (!res) return false; + //end can't be 0, but if it is we'll get a nice crash, who cares :) + uint16_t attribute=0; + strcpy(path,full); + if (!first&&strlen(args)>3&&!strcmp(args+strlen(args)-4,"\\.\\.")) { + if (strlen(path)&&path[strlen(path)-1]=='\\') path[strlen(path)-1]=0; + if (strlen(path)&&path[strlen(path)-1]!=':') { + bool reset=false; + if(DOS_GetFileAttr(path,&attribute) && (attribute&DOS_ATTR_READ_ONLY)&&DOS_SetFileAttr(path, attribute & ~DOS_ATTR_READ_ONLY)) reset=true; + if (!DOS_RemoveDir(path)&&!(uselfn&&DOS_RemoveDir(sfull))) { + if (reset) DOS_SetFileAttr(path, attribute); + shell->WriteOut(MSG_Get("SHELL_CMD_RMDIR_ERROR"),uselfn?sfull:full); + } + } + return true; + } + *(strrchr_dbcs(path,'\\')+1)=0; + char * end=strrchr_dbcs(full,'\\')+1;*end=0; + char * lend=strrchr_dbcs(sfull,'\\')+1;*lend=0; + char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH+1]; + uint32_t size,hsize;uint16_t time,date;uint8_t attr;uint16_t fattr; + std::vector cdirs, cfiles; + cdirs.clear(); + cfiles.clear(); + std::string pfull; + while (res) { + strcpy(spath, path); + dta.GetResult(name,lname,size,hsize,date,time,attr); + if (!((!strcmp(name, ".") || !strcmp(name, "..")) && attr & DOS_ATTR_DIRECTORY)) { + found=true; + strcpy(end,name); + strcpy(lend,lname); + if (strlen(full)&&DOS_GetFileAttr(((uselfn||strchr(full, ' ')?(full[0]!='"'?"\"":""):"")+std::string(full)+(uselfn||strchr(full, ' ')?(full[strlen(full)-1]!='"'?"\"":""):"")).c_str(), &fattr)) { + uint8_t c; + uint16_t n=1; + if(attr&DOS_ATTR_DIRECTORY) { + if (strcmp(name, ".")&&strcmp(name, "..")) { + if (!optY&&first) { + shell->WriteOut(MSG_Get("SHELL_CMD_RMDIR_FULLTREE_CONFIRM"), uselfn ? sfull : full); + DOS_ReadFile (STDIN,&c,&n); + if (c==3) {shell->WriteOut("^C\r\n");break;} + c = c==char_yes||c==char_yes_upper ? char_yes_upper:char_no_upper; + shell->WriteOut("%c\r\n", c); + if (c==char_no_upper) {res = DOS_FindNext();continue;} + } + fdir=true; + strcat(spath, name); + strcat(spath, "\\*.*"); + cdirs.emplace_back(std::string(spath)); + } + } else { + if (!optY&&first) { + shell->WriteOut(MSG_Get("SHELL_CMD_RMDIR_SINGLE_CONFIRM"), uselfn ? sfull : full); + DOS_ReadFile (STDIN,&c,&n); + if (c==3) {shell->WriteOut("^C\r\n");break;} + c = c==char_yes||c==char_yes_upper ? char_yes_upper:char_no_upper; + shell->WriteOut("%c\r\n", c); + if (c==char_no_upper) {res = DOS_FindNext();continue;} + } + pfull=(uselfn||strchr(uselfn?sfull:full, ' ')?((uselfn?sfull:full)[0]!='"'?"\"":""):"")+std::string(uselfn?sfull:full)+(uselfn||strchr(uselfn?sfull:full, ' ')?((uselfn?sfull:full)[strlen(uselfn?sfull:full)-1]!='"'?"\"":""):""); + cfiles.push_back(pfull); + } + } + } + res=DOS_FindNext(); + } + while (!cfiles.empty()) { + bool reset=false; + pfull = std::string(cfiles.begin()->c_str()); + if ((attr & DOS_ATTR_READ_ONLY)&&DOS_SetFileAttr(pfull.c_str(), attr & ~DOS_ATTR_READ_ONLY)) reset=true; + if (!DOS_UnlinkFile(pfull.c_str())) { + if (reset) DOS_SetFileAttr(pfull.c_str(), attr); + shell->WriteOut(MSG_Get("SHELL_CMD_DEL_ERROR"),pfull.c_str()); + } + cfiles.erase(cfiles.begin()); + } + if (!first&&strlen(args)>4&&!strcmp(args+strlen(args)-4,"\\*.*")) { + end=strrchr_dbcs(full,'\\')+1;*end=0; + lend=strrchr_dbcs(sfull,'\\')+1;*lend=0; + if (fdir) { + strcpy(spath, path); + strcat(spath, ".\\."); + cdirs.push_back(std::string(spath)); + } else { + if (strlen(path)&&path[strlen(path)-1]=='\\') path[strlen(path)-1]=0; + if (strlen(path)&&path[strlen(path)-1]!=':') { + bool reset=false; + if(DOS_GetFileAttr(path,&attribute) && (attribute&DOS_ATTR_READ_ONLY)&&DOS_SetFileAttr(path, attribute & ~DOS_ATTR_READ_ONLY)) reset=true; + if (!DOS_RemoveDir(path)&&!(uselfn&&DOS_RemoveDir(sfull))) { + if (reset) DOS_SetFileAttr(path, attribute); + shell->WriteOut(MSG_Get("SHELL_CMD_RMDIR_ERROR"),uselfn?sfull:full); + } + } + } + } + tdirs.insert(tdirs.begin()+1, cdirs.begin(), cdirs.end()); + return found; +} + +#if !defined(OSFREE) +void DOS_Shell::CMD_DELTREE(char * args) { + //HELP("DELTREE"); + StripSpaces(args); + bool optY=ScanCMDBool(args,"Y"); + char * rem=ScanCMDRemain(args); + if (rem) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); + return; + } + if (!*args) { + WriteOut(MSG_Get("SHELL_MISSING_PARAMETER")); + return; + } + + if (uselfn&&strchr(args, '*')) { + char * find_last; + find_last=strrchr_dbcs(args,'\\'); + if (find_last==NULL) find_last=args; + else find_last++; + if (strlen(find_last)>0&&args[strlen(args)-1]=='*'&&strchr(find_last, '.')==NULL) strcat(args, ".*"); + } + char buffer[CROSS_LEN]; + args = ExpandDot(args,buffer, CROSS_LEN, true); + StripSpaces(args); + RealPt save_dta=dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + tdirs.clear(); + tdirs.emplace_back(std::string(args)); + bool first=true, found=false; + ctrlbrk=false; + inshell=true; + while (!tdirs.empty()) { + if (doDeltree(this, (char *)tdirs.begin()->c_str(), dta, optY, first)) + found=true; + first=false; + tdirs.erase(tdirs.begin()); + } + inshell=true; + if (!found) WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); + dos.dta(save_dta); +} +#endif + +bool CheckBreak(DOS_Shell * shell) { + if (ctrlbrk || dos.errorcode == 77) { + if (dos.errorcode == 77) dos.errorcode = 0; + else if (ctrlbrk) { + ctrlbrk=false; + uint8_t c;uint16_t n=1; + DOS_ReadFile (STDIN,&c,&n); + if (c == 3 && (inshell || dos.errorcode == 77)) shell->WriteOut("^C\r\n"); + if (dos.errorcode == 77) dos.errorcode = 0; + ctrlbrk=false; + } + return true; + } else + return false; +} + +bool cont[200]; +static bool doTree(DOS_Shell * shell, char * args, DOS_DTA dta, bool optA, bool optF) { + char *p=strchr(args, ':'); + bool found=false, last=false, plast=false; + int level=1; + if (p) { + *p=0; + if (*args=='-') { + plast=true; + args++; + } + level=atoi(args); + args=p+1; + if (tdirs.size()<2) last=true; + else { + char * arg=(char *)(tdirs.begin()+1)->c_str(); + p=strchr(arg, ':'); + if (p) { + *p=0; + if (level!=atoi(*arg=='-'?arg+1:arg)) last=true; + *p=':'; + } + } + } + if (level>=200) return false; + char spath[DOS_PATHLENGTH],sargs[DOS_PATHLENGTH+4],path[DOS_PATHLENGTH+4],full[DOS_PATHLENGTH],sfull[DOS_PATHLENGTH+2]; + if (!DOS_Canonicalize(args,full)||strrchr_dbcs(full,'\\')==NULL) { shell->WriteOut(MSG_Get("SHELL_ILLEGAL_PATH"));return level; } + if (!DOS_GetSFNPath(args,spath,false)) { + if (!level) shell->WriteOut(MSG_Get("SHELL_CMD_TREE_ERROR")); + return level; + } + if (!uselfn||!DOS_GetSFNPath(args,sfull,true)) strcpy(sfull,full); + if (level&&strlen(sfull)>4&&!strcasecmp(sfull+strlen(sfull)-4, "\\*.*")) { + *(sfull+strlen(sfull)-4)=0; + p=strrchr_dbcs(sfull, '\\'); + char c=optA?(last?'\\':'+'):(last?0xc0:0xc3); + cont[level]=!last; + for (int i=1; iWriteOut("%c ", cont[i]?(optA?'|':0xb3):' '); + shell->WriteOut(("%c"+std::string(3, optA?'-':0xc4)+"%s\n").c_str(), c, p?p+1:sfull); + *(sfull+strlen(sfull))='\\'; + } + sprintf(sargs,"\"%s\"",spath); + bool res=DOS_FindFirst(sargs,0xffff & ~DOS_ATTR_VOLUME); + if (!res) { + if (!level) shell->WriteOut(MSG_Get("SHELL_CMD_TREE_ERROR")); + return level; + } + //uint16_t attribute=0; UNUSED + strcpy(path,full); + *(strrchr_dbcs(path,'\\')+1)=0; + char * end=strrchr_dbcs(full,'\\')+1;*end=0; + char * lend=strrchr_dbcs(sfull,'\\')+1;*lend=0; + char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH+1]; + uint32_t size,hsize;uint16_t time,date;uint8_t attr;uint16_t fattr; + std::vector cdirs; + cdirs.clear(); + while (res) { + if (CheckBreak(shell)) return false; + strcpy(spath,((plast||(level==1&&last)?"-":"")+std::to_string(level+1)+":").c_str()); + strcat(spath, path); + dta.GetResult(name,lname,size,hsize,date,time,attr); + if (!((!strcmp(name, ".") || !strcmp(name, "..")) && attr & DOS_ATTR_DIRECTORY)) { + strcpy(end,name); + strcpy(lend,lname); + if (strlen(full)&&DOS_GetFileAttr(((uselfn||strchr(full, ' ')?(full[0]!='"'?"\"":""):"")+std::string(full)+(uselfn||strchr(full, ' ')?(full[strlen(full)-1]!='"'?"\"":""):"")).c_str(), &fattr)) { + if(attr&DOS_ATTR_DIRECTORY) { + if (strcmp(name, ".")&&strcmp(name, "..")) { + strcat(spath, name); + strcat(spath, "\\*.*"); + cdirs.emplace_back(std::string(spath)); + found=true; + } + } else if (optF) { + for (int i=1; i<=level; i++) shell->WriteOut("%c ", (i==1&&level>1?!plast:cont[i])?(optA?'|':0xb3):' '); + shell->WriteOut(" %s\n", uselfn?lname:name); + } + } + } + res=DOS_FindNext(); + } + if (!found&&!level) { + shell->WriteOut(MSG_Get("SHELL_CMD_TREE_ERROR")); + return false; + } + tdirs.insert(tdirs.begin()+1, cdirs.begin(), cdirs.end()); + return true; +} + +bool tree=false; +#if !defined(OSFREE) +void DOS_Shell::CMD_TREE(char * args) { + //HELP("TREE"); + StripSpaces(args); + bool optA=ScanCMDBool(args,"A"); + bool optF=ScanCMDBool(args,"F"); + char * rem=ScanCMDRemain(args); + if (rem) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); + return; + } + StripSpaces(args); + char buffer[CROSS_LEN]; + strcpy(buffer, "0:"); + strcat(buffer, *args?args:"."); + if (strlen(args)==2&&args[1]==':') strcat(buffer, "."); + if (args[strlen(args)-1]!='\\') strcat(buffer, "\\"); + strcat(buffer, "*.*"); + RealPt save_dta=dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + if (strlen(args)>1&&args[1]==':') { + char c[]=" _:"; + c[1]=toupper(args[0]); + if (!Drives[c[1]-'A']) { + WriteOut(MSG_Get("SHELL_ILLEGAL_DRIVE")); + return; + } + tree=true; + CMD_VOL(c[1]>='A'&&c[1]<='Z'?c:empty_string); + tree=false; + WriteOut("%c:%s\n", c[1], *args?args+2:"."); + } else { + tree=true; + CMD_VOL(empty_string); + tree=false; + uint8_t drive=DOS_GetDefaultDrive(); + WriteOut("%c:%s\n", 'A'+drive, *args?args:"."); + } + for (int i=0; i<200; i++) cont[i]=false; + ctrlbrk=false; + inshell=true; + tdirs.clear(); + tdirs.emplace_back(std::string(buffer)); + while (!tdirs.empty()) { + if (!doTree(this, (char *)tdirs.begin()->c_str(), dta, optA, optF)) break; + tdirs.erase(tdirs.begin()); + } + inshell=false; + dos.dta(save_dta); +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_HELP(char * args){ + HELP("HELP"); + bool optall=ScanCMDBool(args,"A")|ScanCMDBool(args,"ALL"); + /* Print the help */ + args = trim(args); + upcase(args); + uint8_t attr = DOS_GetAnsiAttr(); + if(!optall&&!*args) WriteOut(MSG_Get("SHELL_CMD_HELP")); + uint32_t cmd_index=0,write_count=0; + bool show=false; + while (cmd_list[cmd_index].name) { + if (optall || (*args && !strcmp(args, cmd_list[cmd_index].name)) || (!*args && !cmd_list[cmd_index].flags)) { + show=true; + if (*args && !strcmp(args, cmd_list[cmd_index].name) && !optall) { + std::string cmd=std::string(args); + if (cmd=="CD") cmd="CHDIR"; + else if (cmd=="DEL"||cmd=="ERASE") cmd="DELETE"; + else if (cmd=="LH") cmd="LOADHIGH"; + else if (cmd=="MD") cmd="MKDIR"; + else if (cmd=="RD") cmd="RMDIR"; + else if (cmd=="REN") cmd="RENAME"; + else if (cmd=="DX-CAPTURE") cmd="DXCAPTURE"; + WriteOut("%s\n%s",MSG_Get(cmd_list[cmd_index].help), MSG_Get(("SHELL_CMD_" +cmd+ "_HELP_LONG").c_str())); + } else { + WriteOut("<\033[34;1m%-8s\033[0m> %s",cmd_list[cmd_index].name,MSG_Get(cmd_list[cmd_index].help)); + if(!(++write_count%GetPauseCount())) { + WriteOut(MSG_Get("SHELL_CMD_PAUSE")); + uint8_t c;uint16_t n=1; + DOS_ReadFile(STDIN,&c,&n); + if (c==3) {if (attr) DOS_SetAnsiAttr(attr);return;} + if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key + } + } + } + cmd_index++; + } + if (optall&&show) + WriteOut(MSG_Get("SHELL_CMD_HELP_END1")); + else if (*args&&!show) { + std::string argc=std::string(StripArg(args)); + if (argc!=""&&argc!="CWSDPMI") DoCommand((char *)(argc+(argc=="DOS4GW"||argc=="DOS32A"||argc=="ZIP"||argc=="UNZIP"?"":" /?")).c_str()); + } + if (!*args&&show) + WriteOut(MSG_Get("SHELL_CMD_HELP_END2")); + if (attr) DOS_SetAnsiAttr(attr); +} +#endif + +void removeChar(char *str, char c) { + char *src, *dst; + for (src = dst = str; *src != '\0'; src++) { + *dst = *src; + if (*dst != c) dst++; + } + *dst = '\0'; +} + +#if !defined(OSFREE) +void DOS_Shell::CMD_RENAME(char * args){ + HELP("RENAME"); + StripSpaces(args); + char * rem=ScanCMDRemain(args); + if (rem) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); + return; + } + if (!*args) {SyntaxError();return;} + char * arg1=StripArg(args); + StripSpaces(args); + if (!*args) {SyntaxError();return;} + char * arg2=StripArg(args); + StripSpaces(args); + if (*args) {SyntaxError();return;} + char* slash = strrchr_dbcs(arg1,'\\'); + uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; + char name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH+1], tname1[LFN_NAMELENGTH+1], tname2[LFN_NAMELENGTH+1], text1[LFN_NAMELENGTH+1], text2[LFN_NAMELENGTH+1], tfull[CROSS_LEN+2]; + //dir_source and target are introduced for when we support multiple files being renamed. + char sargs[CROSS_LEN], targs[CROSS_LEN], dir_source[DOS_PATHLENGTH + 4] = {0}, dir_target[CROSS_LEN + 4] = {0}, target[CROSS_LEN + 4] = {0}; //not sure if drive portion is included in pathlength + + if (!slash) slash = strrchr(arg1,':'); + if (slash) { + /* If directory specified (crystal caves installer) + * rename from c:\X : rename c:\abc.exe abc.shr. + * File must appear in C:\ + * Ren X:\A\B C => ren X:\A\B X:\A\C */ + + //Copy first and then modify, makes GCC happy + safe_strncpy(dir_source,arg1,DOS_PATHLENGTH + 4); + char* dummy = strrchr_dbcs(dir_source,'\\'); + if (!dummy) dummy = strrchr(dir_source,':'); + if (!dummy) { //Possible due to length + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + return; + } + dummy++; + *dummy = 0; + if (strchr_dbcs(arg2,'\\')||strchr(arg2,':')) { + safe_strncpy(dir_target,arg2,DOS_PATHLENGTH + 4); + dummy = strrchr_dbcs(dir_target,'\\'); + if (!dummy) dummy = strrchr(dir_target,':'); + if (dummy) { + dummy++; + *dummy = 0; + if (strcasecmp(dir_source, dir_target)) { + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + return; + } + } + arg2=strrchr_dbcs(arg2,strrchr_dbcs(arg2,'\\')?'\\':':')+1; + } + if (strlen(dummy)&&dummy[strlen(dummy)-1]==':') + strcat(dummy, ".\\"); + } else { + if (strchr_dbcs(arg2,'\\')||strchr(arg2,':')) {SyntaxError();return;}; + strcpy(dir_source, ".\\"); + } + + strcpy(target,arg2); + + char path[DOS_PATHLENGTH], spath[DOS_PATHLENGTH], pattern[DOS_PATHLENGTH], full[DOS_PATHLENGTH], *r; + if (!DOS_Canonicalize(arg1,full)) return; + r=strrchr_dbcs(full, '\\'); + if (r!=NULL) { + *r=0; + strcpy(path, full); + strcat(path, "\\"); + strcpy(pattern, r+1); + *r='\\'; + } else { + strcpy(path, ""); + strcpy(pattern, full); + } + int k=0; + for (int i=0;i<(int)strlen(pattern);i++) + if (pattern[i]!='\"') + pattern[k++]=pattern[i]; + pattern[k]=0; + strcpy(spath, path); + if (strchr(arg1,'\"')||uselfn) { + if (!DOS_GetSFNPath(("\""+std::string(path)+"\\").c_str(), spath, false)) strcpy(spath, path); + if (!strlen(spath)||spath[strlen(spath)-1]!='\\') strcat(spath, "\\"); + } + RealPt save_dta=dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + std::string pfull=std::string(spath)+std::string(pattern); + int fbak=lfn_filefind_handle; + lfn_filefind_handle=uselfn?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; + if (!DOS_FindFirst(((uselfn&&pfull.length()&&pfull[0]!='"'?"\"":"")+pfull+(uselfn&&pfull.length()&&pfull[pfull.length()-1]!='"'?"\"":"")).c_str(), strchr(arg1,'*')!=NULL || strchr(arg1,'?')!=NULL ? 0xffff & ~DOS_ATTR_VOLUME & ~DOS_ATTR_DIRECTORY : 0xffff & ~DOS_ATTR_VOLUME)) { + lfn_filefind_handle=fbak; + WriteOut(MSG_Get("SHELL_CMD_RENAME_ERROR"),arg1); + } else { + std::vector sources; + sources.clear(); + + do { /* File name and extension */ + dta.GetResult(name,lname,size,hsize,date,time,attr); + lfn_filefind_handle=fbak; + + if(!(attr&DOS_ATTR_DIRECTORY && (!strcmp(name, ".") || !strcmp(name, "..")))) { + strcpy(dir_target, target); + removeChar(dir_target, '\"'); + arg2=dir_target; + strcpy(sargs, dir_source); + if (uselfn) removeChar(sargs, '\"'); + strcat(sargs, uselfn?lname:name); + if (uselfn&&strchr(arg2,'*')&&!strchr(arg2,'.')) strcat(arg2, ".*"); + char *dot1=strrchr(uselfn?lname:name,'.'), *dot2=strrchr(arg2,'.'), *star; + if (dot2==NULL) { + star=strchr(arg2,'*'); + if (strchr(arg2,'?')) { + for (unsigned int i=0; i<(uselfn?LFN_NAMELENGTH:DOS_NAMELENGTH) && i<(star?star-arg2:strlen(arg2)); i++) { + if (*(arg2+i)=='?'&&i2&&sargs[0]=='.'&&sargs[1]=='\\'?sargs+2:sargs); + } + lfn_filefind_handle=uselfn?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; + } while ( DOS_FindNext() ); + lfn_filefind_handle=fbak; + if (sources.empty()) WriteOut(MSG_Get("SHELL_CMD_RENAME_ERROR"),arg1); + else { + for (std::vector::iterator source = sources.begin(); source != sources.end(); ++source) { + char *oname=(char *)source->c_str(); + source++; + if (source==sources.end()) break; + char *nname=(char *)source->c_str(); + source++; + if (source==sources.end()||oname==NULL||nname==NULL) break; + char *fname=(char *)source->c_str(); + if (!DOS_Rename(oname,nname)&&fname!=NULL) + WriteOut(MSG_Get("SHELL_CMD_RENAME_ERROR"),fname); + } + } + } + dos.dta(save_dta); +} +#endif + +void DOS_Shell::CMD_ECHO(char * args){ + if (!*args) { + if (echo) { WriteOut(MSG_Get("SHELL_CMD_ECHO_ON"));} + else { WriteOut(MSG_Get("SHELL_CMD_ECHO_OFF"));} + return; + } + char buffer[512]; + char* pbuffer = buffer; + safe_strncpy(buffer,args,512); + StripSpaces(pbuffer); + if (strcasecmp(pbuffer,"OFF")==0) { + echo=false; + return; + } + if (strcasecmp(pbuffer,"ON")==0) { + echo=true; + return; + } + if(strcasecmp(pbuffer,"/?")==0) { HELP("ECHO"); } + + args++;//skip first character. either a slash or dot or space + size_t len = strlen(args); //TODO check input of else ook nodig is. + if(len && args[len - 1] == '\r') { + LOG(LOG_MISC,LOG_WARN)("Hu ? carriage return already present. Is this possible?"); + WriteOut_NoParsing(args, true); + WriteOut("\n"); + } else { + WriteOut_NoParsing(args, true); + WriteOut("\r\n"); + } +} + +void DOS_Shell::CMD_EXIT(char * args) { + HELP("EXIT"); + exit = true; +} + +std::vector olddrives; +std::vector olddirs; +void DOS_Shell::CMD_PUSHD(char * args) { + HELP("PUSHD"); + StripSpaces(args); + char sargs[CROSS_LEN]; + if (strlen(args)>1 && args[1]==':' && toupper(args[0])>='A' && toupper(args[0])<='Z' && !Drives[toupper(args[0])-'A']) { + WriteOut(MSG_Get("SHELL_ILLEGAL_DRIVE")); + return; + } + if (*args && !DOS_GetSFNPath(args,sargs,false)) { + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + return; + } + if (*args) { + char dir[DOS_PATHLENGTH]; + uint8_t drive = DOS_GetDefaultDrive()+'A'; + DOS_GetCurrentDir(0,dir,true); + if (strlen(args)>1 && args[1]==':') DOS_SetDefaultDrive(toupper(args[0])-'A'); + if (DOS_ChangeDir(sargs)) { + olddrives.push_back(drive); + olddirs.emplace_back(std::string(dir)); + } else { + if (strlen(args)>1 && args[1]==':') DOS_SetDefaultDrive(drive-'A'); + WriteOut(MSG_Get("SHELL_CMD_CHDIR_ERROR"),args); + } + } else { + for (int i=(int)(olddrives.size()-1); i>=0; i--) + if (olddrives.at(i)>='A'&&olddrives.at(i)<='Z') + WriteOut("%c:\\%s\n",olddrives.at(i),olddirs.at(i).c_str()); + } +} + +void DOS_Shell::CMD_POPD(char * args) { + HELP("POPD"); + if (!olddrives.size()) return; + uint8_t olddrive=olddrives.back(); + std::string olddir=olddirs.back(); + if (olddrive>='A'&&olddrive<='Z'&&Drives[olddrive-'A']) { + uint8_t drive = DOS_GetDefaultDrive()+'A'; + if (olddrive!=DOS_GetDefaultDrive()+'A') DOS_SetDefaultDrive(olddrive-'A'); + if (Drives[DOS_GetDefaultDrive()]->TestDir(olddir.c_str())) + strcpy(Drives[DOS_GetDefaultDrive()]->curdir,olddir.c_str()); + else + DOS_SetDefaultDrive(drive-'A'); + } + olddrives.pop_back(); + olddirs.pop_back(); +} + +void DOS_Shell::CMD_CHDIR(char * args) { + HELP("CHDIR"); + StripSpaces(args); + char sargs[CROSS_LEN]; + if (*args && !DOS_GetSFNPath(args,sargs,false)) { + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + return; + } + uint8_t drive = DOS_GetDefaultDrive()+'A'; + char dir[DOS_PATHLENGTH]; + if (!*args) { + DOS_GetCurrentDir(0,dir,true); + WriteOut("%c:\\",drive); + WriteOut_NoParsing(dir, true); + WriteOut("\n"); + } else if(strlen(args) == 2 && args[1]==':') { + uint8_t targetdrive = (args[0] | 0x20)-'a' + 1; + unsigned char targetdisplay = *reinterpret_cast(&args[0]); + if(!DOS_GetCurrentDir(targetdrive,dir,true)) { // verify that this should be true + if(drive == 'Z') { + WriteOut(MSG_Get("SHELL_EXECUTE_DRIVE_NOT_FOUND"),toupper(targetdisplay)); + } else { + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + } + return; + } + WriteOut("%c:\\",toupper(targetdisplay)); + WriteOut_NoParsing(dir, true); + WriteOut("\n"); + if(drive == 'Z') + WriteOut(MSG_Get("SHELL_CMD_CHDIR_HINT"),toupper(targetdisplay)); + } else if (!DOS_ChangeDir(sargs)) { + /* Changedir failed. Check if the filename is longer than 8 and/or contains spaces */ + + std::string temps(args),slashpart; + std::string::size_type separator = temps.find_first_of("\\/"); + if(!separator) { + slashpart = temps.substr(0,1); + temps.erase(0,1); + } + separator = temps.find_first_of("\""); + if(separator != std::string::npos) temps.erase(separator); + separator = temps.rfind('.'); + if(separator != std::string::npos) temps.erase(separator); + separator = temps.find(' '); + if(separator != std::string::npos) {/* Contains spaces */ + temps.erase(separator); + if(temps.size() >6) temps.erase(6); + temps += "~1"; + WriteOut(MSG_Get("SHELL_CMD_CHDIR_HINT_2"),temps.insert(0,slashpart).c_str()); + } else { + if (drive == 'Z') { + WriteOut(MSG_Get("SHELL_CMD_CHDIR_HINT_3")); + } else { + WriteOut(MSG_Get("SHELL_CMD_CHDIR_ERROR"),args); + } + } + } +} + +#if !defined(OSFREE) +void DOS_Shell::CMD_MKDIR(char * args) { + HELP("MKDIR"); + StripSpaces(args); + char * rem=ScanCMDRemain(args); + if (rem) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); + return; + } + if (!*args) { + WriteOut(MSG_Get("SHELL_MISSING_PARAMETER")); + return; + } + if (!DOS_MakeDir(args)) { + WriteOut(MSG_Get(dos.errorcode==DOSERR_ACCESS_DENIED?"SHELL_CMD_MKDIR_EXIST":"SHELL_CMD_MKDIR_ERROR"),args); + } +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_RMDIR(char * args) { + HELP("RMDIR"); + // ignore /s,and /q switches for compatibility + ScanCMDBool(args,"S"); + ScanCMDBool(args,"Q"); + StripSpaces(args); + char * rem=ScanCMDRemain(args); + if (rem) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); + return; + } + if (!*args) { + WriteOut(MSG_Get("SHELL_MISSING_PARAMETER")); + return; + } + if (!DOS_RemoveDir(args)) { + WriteOut(MSG_Get("SHELL_CMD_RMDIR_ERROR"),args); + } +} +#endif + +static void FormatNumber(uint64_t num,char * buf) { + uint64_t numo = num; + uint32_t numb,numk,numm,numg,nummi,numgi,numti,numpi,numei; + numb=num % 1000; + num/=1000; + numk=num % 1000; + num/=1000; + numm=num % 1000; + num/=1000; + numg=num % 1000; + numo/=1024; + numo/=1024; + nummi=(numo % 1024) / 10.24 + 0.5; + numo/=1024; + numgi=numo % 1000; + numo/=1000; + numti=numo % 1000; + numo/=1000; + numpi=numo % 1000; + numei=numo / 1000; + if (numei) { + sprintf(buf,"%u%c%03u%c%03u%c%03u%c%02u G",numei,dos.tables.country[7],numpi,dos.tables.country[7],numti,dos.tables.country[7],numgi,dos.tables.country[9],nummi); + return; + } + if (numpi) { + sprintf(buf,"%u%c%03u%c%03u%c%02u G",numpi,dos.tables.country[7],numti,dos.tables.country[7],numgi,dos.tables.country[9],nummi); + return; + } + if (numti) { + sprintf(buf,"%u%c%03u%c%02u G",numti,dos.tables.country[7],numgi,dos.tables.country[9],nummi); + return; + } + if (numg) { + if (numgi>127) sprintf(buf,"%u%c%02u G",numgi,dos.tables.country[9],nummi); + else sprintf(buf,"%u%c%03u%c%03u%c%03u",numg,dos.tables.country[7],numm,dos.tables.country[7],numk,dos.tables.country[7],numb); + return; + } + if (numm) { + sprintf(buf,"%u%c%03u%c%03u",numm,dos.tables.country[7],numk,dos.tables.country[7],numb); + return; + } + if (numk) { + sprintf(buf,"%u%c%03u",numk,dos.tables.country[7],numb); + return; + } + sprintf(buf,"%u",numb); +} + +char buffer[15] = {0}; +char *FormatDate(uint16_t year, uint8_t month, uint8_t day) { + char formatstring[6], c=dos.tables.country[11]; + sprintf(formatstring, dos.tables.country[0]==1?"D%cM%cY":(dos.tables.country[0]==2?"Y%cM%cD":"M%cD%cY"), c, c); + Bitu bufferptr=0; + for(Bitu i = 0; i < 5; i++) { + if(i==1 || i==3) { + buffer[bufferptr] = formatstring[i]; + bufferptr++; + } else { + if(formatstring[i]=='M') bufferptr += (Bitu)sprintf(buffer+bufferptr,"%02u", month); + if(formatstring[i]=='D') bufferptr += (Bitu)sprintf(buffer+bufferptr,"%02u", day); + if(formatstring[i]=='Y') bufferptr += (Bitu)sprintf(buffer+bufferptr,"%04u", year); + } + } + return buffer; +} + +char *FormatTime(Bitu hour, Bitu min, Bitu sec, Bitu msec) { + Bitu fhour=hour; + static char retBuf[14]; + char ampm[3]=""; + if (!(dos.tables.country[17]&1)) { // 12 hour notation? + if (hour!=12) + hour %= 12; + strcpy(ampm, hour != 12 && hour == fhour ? "am" : "pm"); + } + char sep = dos.tables.country[13]; + if (sec>=100&&msec>=100) + sprintf(retBuf, "%2u%c%02u%c", (unsigned int)hour, sep, (unsigned int)min, *ampm); + else + sprintf(retBuf, "%u%c%02u%c%02u%c%02u%s", (unsigned int)hour, sep, (unsigned int)min, sep, (unsigned int)sec, dos.tables.country[9], (unsigned int)msec, ampm); + return retBuf; + } + +uint64_t byte_count; +uint32_t file_count,dir_count; +Bitu p_count; +std::vector dirs, adirs; +static bool dirPaused(DOS_Shell * shell, Bitu w_size, bool optP, bool optW, bool show=true) { + p_count+=optW?5:1; + if (optP && p_count%(GetPauseCount()*w_size)<1) { + shell->WriteOut(MSG_Get("SHELL_CMD_PAUSE")); + uint8_t c;uint16_t n=1; + DOS_ReadFile(STDIN,&c,&n); + if (c==3) {if (show) shell->WriteOut("^C\r\n");return false;} + if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key + } + return true; +} + +static bool doDir(DOS_Shell * shell, char * args, DOS_DTA dta, char * numformat, Bitu w_size, bool optW, bool optZ, bool optS, bool optP, bool optB, bool optA, bool optAD, bool optAminusD, bool optAS, bool optAminusS, bool optAH, bool optAminusH, bool optAR, bool optAminusR, bool optAA, bool optAminusA, bool optOGN, bool optOGD, bool optOGE, bool optOGS, bool optOG, bool optON, bool optOD, bool optOE, bool optOS, bool reverseSort, bool rev2Sort) { + char path[DOS_PATHLENGTH]; + char sargs[CROSS_LEN], largs[CROSS_LEN], buffer[CROSS_LEN]; + unsigned int tcols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); + if (!tcols) tcols=80; + + /* Make a full path in the args */ + if (!DOS_Canonicalize(args,path)) { + shell->WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + return true; + } + *(strrchr_dbcs(path,'\\')+1)=0; + if (!DOS_GetSFNPath(path,sargs,false)) { + shell->WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + return true; + } + if (!optB&&!optS) { + shell->WriteOut(MSG_Get("SHELL_CMD_DIR_INTRO"),uselfn&&!optZ&&DOS_GetSFNPath(path,largs,true)?largs:sargs); + if (optP) { + p_count+=optW?10:2; + if (p_count%(GetPauseCount()*w_size)<2) { + shell->WriteOut(MSG_Get("SHELL_CMD_PAUSE")); + uint8_t c;uint16_t n=1; + DOS_ReadFile(STDIN,&c,&n); + if (c==3) return false; + if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key + } + } + } + if (*(sargs+strlen(sargs)-1) != '\\') strcat(sargs,"\\"); + + uint64_t cbyte_count=0; + uint32_t cfile_count=0,w_count=0; + int fbak=lfn_filefind_handle; + lfn_filefind_handle=uselfn&&!optZ?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; + bool ret=DOS_FindFirst(args,0xffff & ~DOS_ATTR_VOLUME), found=true, first=true; + if (!ret) { + size_t len = strlen(args); + args = ExpandDotMore(args,buffer,CROSS_LEN); + if (strlen(args)!=len) ret=DOS_FindFirst(args,0xffff & ~DOS_ATTR_VOLUME); + } + lfn_filefind_handle=fbak; + if (ret) { + std::vector results; + + lfn_filefind_handle=uselfn&&!optZ?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; + do { /* File name and extension */ + DtaResult result; + dta.GetResult(result.name,result.lname,result.size,result.hsize,result.date,result.time,result.attr); + + /* Skip non-directories if option AD is present, or skip dirs in case of A-D */ + if(optAD && !(result.attr&DOS_ATTR_DIRECTORY) ) continue; + else if(optAminusD && (result.attr&DOS_ATTR_DIRECTORY) ) continue; + else if(optAS && !(result.attr&DOS_ATTR_SYSTEM) ) continue; + else if(optAminusS && (result.attr&DOS_ATTR_SYSTEM) ) continue; + else if(optAH && !(result.attr&DOS_ATTR_HIDDEN) ) continue; + else if(optAminusH && (result.attr&DOS_ATTR_HIDDEN) ) continue; + else if(optAR && !(result.attr&DOS_ATTR_READ_ONLY) ) continue; + else if(optAminusR && (result.attr&DOS_ATTR_READ_ONLY) ) continue; + else if(optAA && !(result.attr&DOS_ATTR_ARCHIVE) ) continue; + else if(optAminusA && (result.attr&DOS_ATTR_ARCHIVE) ) continue; + else if(!(optA||optAD||optAminusD||optAS||optAminusS||optAH||optAminusH||optAR||optAminusR||optAA||optAminusA) && (result.attr&DOS_ATTR_SYSTEM || result.attr&DOS_ATTR_HIDDEN) && strcmp(result.name, "..") ) continue; + + results.push_back(result); + + } while ( (ret=DOS_FindNext()) ); + lfn_filefind_handle=fbak; + + bool oneRev = (reverseSort||rev2Sort)&&reverseSort!=rev2Sort; + if (optON) { + // Sort by name + std::sort(results.begin(), results.end(), DtaResult::compareName); + } else if (optOE) { + // Sort by extension + std::sort(results.begin(), results.end(), DtaResult::compareExt); + } else if (optOD) { + // Sort by date + std::sort(results.begin(), results.end(), DtaResult::compareDate); + } else if (optOS) { + // Sort by size + std::sort(results.begin(), results.end(), DtaResult::compareSize); + } else if (optOG) { + // Directories first, then files + std::sort(results.begin(), results.end(), DtaResult::groupDirs); + } else if (optOGN) { + // Directories first, then files, both sort by name + std::sort(results.begin(), results.end(), oneRev?DtaResult::groupRevDef:DtaResult::groupDef); + } else if (optOGE) { + // Directories first, then files, both sort by extension + std::sort(results.begin(), results.end(), oneRev?DtaResult::groupRevExt:DtaResult::groupExt); + } else if (optOGS) { + // Directories first, then files, both sort by size + std::sort(results.begin(), results.end(), oneRev?DtaResult::groupRevSize:DtaResult::groupSize); + } else if (optOGD) { + // Directories first, then files, both sort by date + std::sort(results.begin(), results.end(), oneRev?DtaResult::groupRevDate:DtaResult::groupDate); + } + if (reverseSort) std::reverse(results.begin(), results.end()); + + for (std::vector::iterator iter = results.begin(); iter != results.end(); ++iter) { + if (CheckBreak(shell)) return false; + char * name = iter->name; + char *lname = iter->lname; + uint32_t size = iter->size; + uint32_t hsize = iter->hsize; + uint16_t date = iter->date; + uint16_t time = iter->time; + uint8_t attr = iter->attr; + + /* output the file */ + if (optB) { + // this overrides pretty much everything + if (strcmp(".",uselfn&&!optZ?lname:name) && strcmp("..",uselfn&&!optZ?lname:name)) { + int m=shell->WriteOut_NoParsing(uselfn&&!optZ?lname:name, true); + shell->WriteOut("\n"); + if (optP) { + p_count+=m+1; + if (p_count%GetPauseCount()WriteOut(MSG_Get("SHELL_CMD_PAUSE")); + uint8_t c;uint16_t n=1; + DOS_ReadFile(STDIN,&c,&n); + if (c==3) return false; + if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key + p_count=0; + } + } + } + } else { + if (first&&optS) { + first=false; + shell->WriteOut("\n"); + shell->WriteOut(MSG_Get("SHELL_CMD_DIR_INTRO"),uselfn&&!optZ&&DOS_GetSFNPath(path,largs,true)?largs:sargs); + if (optP) { + p_count+=optW?15:3; + if (optS&&p_count%(GetPauseCount()*w_size)<3) { + shell->WriteOut(MSG_Get("SHELL_CMD_PAUSE")); + uint8_t c;uint16_t n=1; + DOS_ReadFile(STDIN,&c,&n); + if (c==3) return false; + if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key + } + } + } + char * ext = empty_string; + if (!optW && (name[0] != '.')) { + ext = strrchr(name, '.'); + if (!ext) ext = empty_string; + else *ext++ = 0; + } + uint8_t day = (uint8_t)(date & 0x001f); + uint8_t month = (uint8_t)((date >> 5) & 0x000f); + uint16_t year = (uint16_t)((date >> 9) + 1980); + uint8_t hour = (uint8_t)((time >> 5 ) >> 6); + uint8_t minute = (uint8_t)((time >> 5) & 0x003f); + unsigned int m=0; + if (attr & DOS_ATTR_DIRECTORY) { + if (optW) { + shell->WriteOut("[%s]",name); + size_t namelen = strlen(name); + if (namelen <= 14) { + for (size_t i=14-namelen;i>0;i--) shell->WriteOut(" "); + } + } else { + shell->WriteOut("%-8s %-3s %-16s %s %s",name,ext,"",FormatDate(year,month,day),FormatTime(hour,minute,100,100)); + if (uselfn&&!optZ) { + shell->WriteOut(" "); + m=shell->WriteOut_NoParsing(lname, true); + } + shell->WriteOut("\n"); + if (optP) { + p_count+=(optW?5:1)*m; + if (p_count%(GetPauseCount()*w_size)WriteOut(MSG_Get("SHELL_CMD_PAUSE")); + uint8_t c;uint16_t n=1; + DOS_ReadFile(STDIN,&c,&n); + if (c==3) return false; + if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key + p_count=0; + } + } + } + dir_count++; + } else { + if (optW) { + shell->WriteOut("%-16s",name); + } else { + FormatNumber(size+hsize*0x100000000,numformat); + shell->WriteOut("%-8s %-3s %16s %s %s",name,ext,numformat,FormatDate(year,month,day),FormatTime(hour,minute,100,100)); + if (uselfn&&!optZ) { + shell->WriteOut(" "); + m=shell->WriteOut_NoParsing(lname, true); + } + shell->WriteOut("\n"); + if (optP) { + p_count+=(optW?5:1)*m; + if (p_count%(GetPauseCount()*w_size)WriteOut(MSG_Get("SHELL_CMD_PAUSE")); + uint8_t c;uint16_t n=1; + DOS_ReadFile(STDIN,&c,&n); + if (c==3) return false; + if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key + p_count=0; + } + } + } + if (optS) { + cfile_count++; + cbyte_count+=size+hsize*0x100000000; + } + file_count++; + byte_count+=size+hsize*0x100000000; + } + if (optW) w_count++; + } + if (optW && w_count%5==0 && tcols>80) shell->WriteOut("\n"); + if (optP && !optB && !(++p_count%(GetPauseCount()*w_size))) { + if (optW&&w_count%5) {shell->WriteOut("\n");w_count=0;} + shell->WriteOut(MSG_Get("SHELL_CMD_PAUSE")); + uint8_t c;uint16_t n=1; + DOS_ReadFile(STDIN,&c,&n); + if (c==3) return false; + if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key + } + } + + if (!results.size()) + found=false; + else if (optW&&w_count%5) + shell->WriteOut("\n"); + } else + found=false; + if (!found&&!optB&&!optS) { + shell->WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); + if (!dirPaused(shell, w_size, optP, optW, false)) return false; + } + if (optS) { + size_t len=strlen(sargs); + strcat(sargs, "*.*"); + bool ret=DOS_FindFirst(sargs,0xffff & ~DOS_ATTR_VOLUME); + *(sargs+len)=0; + if (ret) { + std::vector cdirs; + cdirs.clear(); + do { /* File name and extension */ + DtaResult result; + dta.GetResult(result.name,result.lname,result.size,result.hsize,result.date,result.time,result.attr); + + if(result.attr&DOS_ATTR_DIRECTORY && strcmp(result.name, ".")&&strcmp(result.name, "..")) { + strcat(sargs, result.name); + strcat(sargs, "\\"); + char *fname = strrchr_dbcs(args, '\\'); + if (fname==NULL) fname=args; + else fname++; + strcat(sargs, fname); + cdirs.push_back((sargs[0]!='"'&&sargs[strlen(sargs)-1]=='"'?"\"":"")+std::string(sargs)); + *(sargs+len)=0; + } + } while ( (ret=DOS_FindNext()) ); + dirs.insert(dirs.begin()+1, cdirs.begin(), cdirs.end()); + } + if (found&&!optB) { + FormatNumber(cbyte_count,numformat); + shell->WriteOut(MSG_Get("SHELL_CMD_DIR_BYTES_USED"),cfile_count,numformat); + if (!dirPaused(shell, w_size, optP, optW, false)) return false; + } + } + return true; +} + +void DOS_Shell::CMD_DIR(char * args) { + HELP("DIR"); + char numformat[64]; + char path[DOS_PATHLENGTH]; + char sargs[CROSS_LEN]; + + std::string line; + if(GetEnvStr("DIRCMD",line)){ + std::string::size_type idx = line.find('='); + std::string value=line.substr(idx +1 , std::string::npos); + line = std::string(args) + " " + value; + args=const_cast(line.c_str()); + } + + ScanCMDBool(args,"4"); /* /4 ignored (default) */ + bool optW=ScanCMDBool(args,"W"); + bool optP=ScanCMDBool(args,"P"); + if (ScanCMDBool(args,"WP") || ScanCMDBool(args,"PW")) optW=optP=true; + if (ScanCMDBool(args,"-W")) optW=false; + if (ScanCMDBool(args,"-P")) optP=false; + bool optZ=ScanCMDBool(args,"Z"); + if (ScanCMDBool(args,"-Z")) optZ=false; + bool optS=ScanCMDBool(args,"S"); + if (ScanCMDBool(args,"-S")) optS=false; + bool optB=ScanCMDBool(args,"B"); + if (ScanCMDBool(args,"-B")) optB=false; + bool optA=ScanCMDBool(args,"A"); + bool optAD=ScanCMDBool(args,"AD")||ScanCMDBool(args,"A:D"); + bool optAminusD=ScanCMDBool(args,"A-D")||ScanCMDBool(args,"A:-D"); + bool optAS=ScanCMDBool(args,"AS")||ScanCMDBool(args,"A:S"); + bool optAminusS=ScanCMDBool(args,"A-S")||ScanCMDBool(args,"A:-S"); + bool optAH=ScanCMDBool(args,"AH")||ScanCMDBool(args,"A:H"); + bool optAminusH=ScanCMDBool(args,"A-H")||ScanCMDBool(args,"A:-H"); + bool optAR=ScanCMDBool(args,"AR")||ScanCMDBool(args,"A:R"); + bool optAminusR=ScanCMDBool(args,"A-R")||ScanCMDBool(args,"A:-R"); + bool optAA=ScanCMDBool(args,"AA")||ScanCMDBool(args,"A:A"); + bool optAminusA=ScanCMDBool(args,"A-A")||ScanCMDBool(args,"A:-A"); + if (ScanCMDBool(args,"-A")) { + optA = false; + optAD = false; + optAminusD = false; + optAS = false; + optAminusS = false; + optAH = false; + optAminusH = false; + optAR = false; + optAminusR = false; + optAA = false; + optAminusA = false; + } + // Sorting flags + bool reverseSort = false, rev2Sort = false; + bool optON=ScanCMDBool(args,"ON")||ScanCMDBool(args,"O:N"); + if (ScanCMDBool(args,"O-N")||ScanCMDBool(args,"O:-N")) { + optON = true; + reverseSort = true; + } + bool optOD=ScanCMDBool(args,"OD")||ScanCMDBool(args,"O:D"); + if (ScanCMDBool(args,"O-D")||ScanCMDBool(args,"O:-D")) { + optOD = true; + reverseSort = true; + } + bool optOE=ScanCMDBool(args,"OE")||ScanCMDBool(args,"O:E"); + if (ScanCMDBool(args,"O-E")||ScanCMDBool(args,"O:-E")) { + optOE = true; + reverseSort = true; + } + bool optOS=ScanCMDBool(args,"OS")||ScanCMDBool(args,"O:S"); + if (ScanCMDBool(args,"O-S")||ScanCMDBool(args,"O:-S")) { + optOS = true; + reverseSort = true; + } + bool optOG=ScanCMDBool(args,"OG")||ScanCMDBool(args,"O:G"); + if (ScanCMDBool(args,"O-G")||ScanCMDBool(args,"O:-G")) { + optOG = true; + reverseSort = true; + } + bool b0 = false, b1 = false, b2 = false, b3 = false; + bool optOGN = false, optOGD = false, optOGE = false, optOGS = false; + b0=ScanCMDBool(args,"O")||ScanCMDBool(args,"OGN")||ScanCMDBool(args,"O:GN");b1=ScanCMDBool(args,"O-GN")||ScanCMDBool(args,"O:-GN"); + b2=ScanCMDBool(args,"O-G-N")||ScanCMDBool(args,"O:-G-N"),b3=ScanCMDBool(args,"OG-N")||ScanCMDBool(args,"O:G-N"); + if (b0||b1||b2||b3) { + optOGN = true; + reverseSort = b1||b2; + rev2Sort = b2||b3; + } + b0=ScanCMDBool(args,"OGD")||ScanCMDBool(args,"O:GD");b1=ScanCMDBool(args,"O-GD")||ScanCMDBool(args,"O:-GD"); + b2=ScanCMDBool(args,"O-G-D")||ScanCMDBool(args,"O:-G-D");b3=ScanCMDBool(args,"OG-D")||ScanCMDBool(args,"O:G-D"); + if (b0||b1||b2||b3) { + optOGD = true; + reverseSort = b1||b2; + rev2Sort = b2||b3; + } + b0=ScanCMDBool(args,"OGE")||ScanCMDBool(args,"O:GE");b1=ScanCMDBool(args,"O-GE")||ScanCMDBool(args,"O:-GE"); + b2=ScanCMDBool(args,"O-G-E")||ScanCMDBool(args,"O:-G-E");b3=ScanCMDBool(args,"OG-E")||ScanCMDBool(args,"O:G-E"); + if (b0||b1||b2||b3) { + optOGE = true; + reverseSort = b1||b2; + rev2Sort = b2||b3; + } + b0=ScanCMDBool(args,"OGS")||ScanCMDBool(args,"O:GS");b1=ScanCMDBool(args,"O-GS")||ScanCMDBool(args,"O:-GS"); + b2=ScanCMDBool(args,"O-G-S")||ScanCMDBool(args,"O:-G-S");b3=ScanCMDBool(args,"OG-S")||ScanCMDBool(args,"O:G-S"); + if (b0||b1||b2||b3) { + optOGS = true; + reverseSort = b1||b2; + rev2Sort = b2||b3; + } + if (optOGN||optOGD||optOGE||optOGS) optOG = false; + if (ScanCMDBool(args,"-O")) { + optOG = false; + optON = false; + optOD = false; + optOE = false; + optOS = false; + optOGN = false; + optOGD = false; + optOGE = false; + optOGS = false; + reverseSort = false; + } + const char *valid[] = {"4","W","P","-W","-P","WP","PW","Z","-Z","S","-S","B","-B", + "A","-A","AD","A:D","A-D","A:-D","AS","A:S","A-S","A:-S","AH","A:H","A-H","A:-H","AR","A:R","A-R","A:-R","AA","A:A","A-A","A:-A", + "O","-O","ON","O:N","O-N","O:-N","OD","O:D","O-D","O:-D","OE","O:E","O-E","O:-E","OS","O:S","O-S","O:-S","OG","O:G","O-G","O:-G", + "OGN","O:GN","O-GN","O:-GN","OG-N","O:G-N","O-G-N","O:-G-N","OGD","O:GD","O-GD","O:-GD","OG-D","O:G-D","O-G-D","O:-G-D", + "OGE","O:GE","O-GE","O:-GE","OG-E","O:G-E","O-G-E","O:-G-E","OGS","O:GS","O-GS","O:-GS","OG-S","O:G-S","O-G-S","O:-G-S", + NULL}; + if (args && strlen(args)>1) for (int i=0; valid[i] && *args && strchr(args,'/'); i++) while (ScanCMDBool(args,valid[i])); + char * rem=ScanCMDRemain(args); + if (rem) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); + return; + } + byte_count=0;file_count=0;dir_count=0;p_count=0; + Bitu w_size = optW?5:1; + + char buffer[CROSS_LEN]; + args = trim(args); + size_t argLen = strlen(args); + if (argLen == 0) { + strcpy(args,"*.*"); //no arguments. + } else { + // handle \, C:\, etc. handle C:, etc. + if(check_last_split_char(args, argLen, '\\') || args[argLen-1] == ':') { + strcat(args,"*.*"); + } + } + args = ExpandDot(args,buffer,CROSS_LEN,!uselfn); + + if (DOS_FindDevice(args) != DOS_DEVICES) { + WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); + return; + } + if (!strrchr(args,'*') && !strrchr(args,'?')) { + uint16_t attribute=0; + if(!DOS_GetSFNPath(args,sargs,false)) { + if (strlen(args)>1&&toupper(args[0])>='A'&&toupper(args[0])<='Z'&&args[1]==':'&&!Drives[toupper(args[0])-'A']) + WriteOut(MSG_Get("SHELL_ILLEGAL_DRIVE")); + else + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + return; + } + if(DOS_GetFileAttr(sargs,&attribute) && (attribute&DOS_ATTR_DIRECTORY) ) { + DOS_FindFirst(sargs,0xffff & ~DOS_ATTR_VOLUME); + DOS_DTA dta(dos.dta()); + strcpy(args,sargs); + strcat(args,"\\*.*"); // if no wildcard and a directory, get its files + } + } + if (!DOS_GetSFNPath(args,sargs,false)) { + if (strlen(args)>1&&toupper(args[0])>='A'&&toupper(args[0])<='Z'&&args[1]==':'&&!Drives[toupper(args[0])-'A']) + WriteOut(MSG_Get("SHELL_ILLEGAL_DRIVE")); + else + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + return; + } + if (!(uselfn&&!optZ&&strchr(sargs,'*'))&&!strrchr(sargs,'.')) + strcat(sargs,".*"); // if no extension, get them all + sprintf(args,"\"%s\"",sargs); + + /* Make a full path in the args */ + if (!DOS_Canonicalize(args,path)) { + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + return; + } + *(strrchr_dbcs(path,'\\')+1)=0; + if (!DOS_GetSFNPath(path,sargs,true)) { + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + return; + } + if (*(sargs+strlen(sargs)-1) != '\\') strcat(sargs,"\\"); + if (!optB) { +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + #if !defined(OSFREE) + if (Network_IsNetworkResource(args)) { + WriteOut("\n"); + if (optP) p_count+=optW?5:1; + } else #endif - ) lead = isKanji1(c) && !(TTF_using() - #if defined(USE_TTF) - && autoboxdraw +#endif + { + if (strlen(sargs)>2&&sargs[1]==':') { + char c[]=" _:"; + c[1]=toupper(sargs[0]); + CMD_VOL(c[1]>='A'&&c[1]<='Z'?c:empty_string); + } else + CMD_VOL(empty_string); + if (optP) p_count+=optW?15:3; + } + } + + /* Command uses dta so set it to our internal dta */ + RealPt save_dta=dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + dirs.clear(); + dirs.emplace_back(std::string(args)); + inshell=true; + while (!dirs.empty()) { + ctrlbrk=false; + if (!doDir(this, (char *)dirs.begin()->c_str(), dta, numformat, w_size, optW, optZ, optS, optP, optB, optA, optAD, optAminusD, optAS, optAminusS, optAH, optAminusH, optAR, optAminusR, optAA, optAminusA, optOGN, optOGD, optOGE, optOGS, optOG, optON, optOD, optOE, optOS, reverseSort, rev2Sort)) {dos.dta(save_dta);inshell=false;return;} + dirs.erase(dirs.begin()); + } + inshell=false; + if (!optB) { + if (optS) { + WriteOut("\n"); + if (!dirPaused(this, w_size, optP, optW)) {dos.dta(save_dta);return;} + if (!file_count&&!dir_count) + WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); + else + WriteOut(MSG_Get("SHELL_CMD_DIR_FILES_LISTED")); + if (!dirPaused(this, w_size, optP, optW)) {dos.dta(save_dta);return;} + } + /* Show the summary of results */ + FormatNumber(byte_count,numformat); + WriteOut(MSG_Get("SHELL_CMD_DIR_BYTES_USED"),file_count,numformat); + if (!dirPaused(this, w_size, optP, optW)) {dos.dta(save_dta);return;} + uint8_t drive=dta.GetSearchDrive(); + uint64_t free_space=1024u*1024u*100u; + + if(Drives[drive]) { + uint32_t bytes_sector32; uint32_t sectors_cluster32; uint32_t total_clusters32; uint32_t free_clusters32; + uint64_t total_clusters64; uint64_t free_clusters64; + // Since this is the *internal* shell, we want use maximum available query capability at first + if(Drives[drive]->AllocationInfo64(&bytes_sector32, §ors_cluster32, &total_clusters64, &free_clusters64)) { + freec = 0; + free_space = (uint64_t)bytes_sector32 * (Bitu)sectors_cluster32 * (Bitu)free_clusters64; + } + else if((dos.version.major > 7 || (dos.version.major == 7 && dos.version.minor >= 10)) && + Drives[drive]->AllocationInfo32(&bytes_sector32, §ors_cluster32, &total_clusters32, &free_clusters32)) { /* FAT32 aware extended API */ + freec = 0; + free_space = (uint64_t)bytes_sector32 * (Bitu)sectors_cluster32 * (Bitu)free_clusters32; + } + else { + uint16_t bytes_sector; uint8_t sectors_cluster; uint16_t total_clusters; uint16_t free_clusters; + rsize = true; + freec = 0; + Drives[drive]->AllocationInfo(&bytes_sector, §ors_cluster, &total_clusters, &free_clusters); + free_space = (uint64_t)bytes_sector * (Bitu)sectors_cluster * (Bitu)(freec ? freec : free_clusters); + rsize = false; + } + } +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + #if !defined(OSFREE) + if (Network_IsNetworkResource(args)) { + std::string str = MSG_Get("SHELL_CMD_DIR_BYTES_FREE"); + std::string::size_type idx = str.rfind(" %"); + if (idx != std::string::npos) { + str = str.substr(0, idx)+"\n"; // No "nnn Bytes free" + WriteOut(str.c_str(),dir_count); + if (!dirPaused(this, w_size, optP, optW)) {dos.dta(save_dta);return;} + } + } else #endif - && CheckBoxDrawing(last3, last2, last, c)); - if (lead && nchars == COLS-1) { - last3=last2=last=0; - nlines++; - nchars = 0; - WriteOut("\n"); - if (nlines == LINES && usecon) { - WriteOut("-- More -- %s (%u) --",word,linecount); - if (PAUSED()==3) {DOS_CloseFile(handle);return;} - WriteOut("\n"); - nlines=0; - } - } - DOS_WriteFile(STDOUT,&c,&n); - last3=last2;last2=last;last=c; - if (c != '\t') nchars++; - else do { - WriteOut(" "); - nchars++; - } while ( nchars < COLS && nchars % TABSIZE ); - - if (c == '\n') linecount++; - if (c == '\n' || nchars >= COLS) { - last3=last2=last=0; - nlines++; - nchars = 0; - if (!usecon) { - if (c != '\n') WriteOut("\n"); - } else if (nlines == LINES) { - WriteOut("-- More -- %s (%u) --",word,linecount); - if (PAUSED()==3) {DOS_CloseFile(handle);return;} - WriteOut("\n"); - nlines=0; - } - } - if (CheckBreak(this)) break; - } while (n); - DOS_CloseFile(handle); - if (*args) { - WriteOut("\n"); - if (usecon && PAUSED()==3) return; - goto nextfile; - } - } - - void DOS_Shell::CMD_PAUSE(char * args){ - HELP("PAUSE"); - if(args && *args) { - args++; - WriteOut("%s\n",args); // optional specified message - } else - WriteOut(MSG_Get("SHELL_CMD_PAUSE")); - uint8_t c;uint16_t n=1; - DOS_ReadFile(STDIN,&c,&n); - if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key - } - - void DOS_Shell::CMD_CALL(char * args){ - HELP("CALL"); - this->call=true; /* else the old batchfile will be closed first */ - this->ParseLine(args); - this->call=false; - } - - void DOS_Shell::CMD_DATE(char * args) { - HELP("DATE"); - if(ScanCMDBool(args,"H")) { - // synchronize date with host parameter - time_t curtime; - struct tm *loctime; - curtime = time (NULL); - loctime = localtime (&curtime); - - reg_cx = loctime->tm_year+1900; - reg_dh = loctime->tm_mon+1; - reg_dl = loctime->tm_mday; - - reg_ah=0x2b; // set system date - CALLBACK_RunRealInt(0x21); - if (sync_time) {manualtime=false;mainMenu.get_item("sync_host_datetime").check(true).refresh_item(mainMenu);} - return; - } else if(ScanCMDBool(args,"S")) { - sync_time=true; - manualtime=false; - mainMenu.get_item("sync_host_datetime").check(true).refresh_item(mainMenu); - return; - } else if(ScanCMDBool(args,"F")) { - sync_time=false; - manualtime=false; - mainMenu.get_item("sync_host_datetime").check(false).refresh_item(mainMenu); - return; - } - // check if a date was passed in command line - char c=dos.tables.country[11], c1, c2; - uint32_t newday,newmonth,newyear; - int n=dos.tables.country[0]==1?sscanf(args,"%u%c%u%c%u",&newday,&c1,&newmonth,&c2,&newyear):(dos.tables.country[0]==2?sscanf(args,"%u%c%u%c%u",&newyear,&c1,&newmonth,&c2,&newday):sscanf(args,"%u%c%u%c%u",&newmonth,&c1,&newday,&c2,&newyear)); - if (n==5 && c1==c && c2==c) { - reg_cx = static_cast(newyear); - reg_dh = static_cast(newmonth); - reg_dl = static_cast(newday); - - reg_ah=0x2b; // set system date - CALLBACK_RunRealInt(0x21); - if(reg_al==0xff) WriteOut(MSG_Get("SHELL_CMD_DATE_ERROR")); - return; - } - // display the current date - reg_ah=0x2a; // get system date - CALLBACK_RunRealInt(0x21); - - const char* datestring = MSG_Get("SHELL_CMD_DATE_DAYS"); - uint32_t length; - char day[6] = {0}; - if(sscanf(datestring,"%u",&length) && (length<7) && (strlen(datestring)==((size_t)length*7+1))) { - // date string appears valid - for(uint32_t i = 0; i < length; i++) day[i] = datestring[reg_al*length+1+i]; - } - bool dateonly = ScanCMDBool(args,"T"); - if(!dateonly) WriteOut(MSG_Get("SHELL_CMD_DATE_NOW")); - if (!dateonly) WriteOut("%s ", day); - WriteOut("%s\n",FormatDate((uint16_t)reg_cx, (uint8_t)reg_dh, (uint8_t)reg_dl)); - if(!dateonly) { - char format[11]; - sprintf(format, dos.tables.country[0]==1?"DD%cMM%cYYYY":(dos.tables.country[0]==2?"YYYY%cMM%cDD":"MM%cDD%cYYYY"), c, c); - WriteOut(MSG_Get("SHELL_CMD_DATE_SETHLP"), format); - } - } - - void DOS_Shell::CMD_TIME(char * args) { - HELP("TIME"); - if(ScanCMDBool(args,"H")) { - // synchronize time with host parameter - time_t curtime; - struct tm *loctime; - curtime = time (NULL); - loctime = localtime (&curtime); - - //reg_cx = loctime->; - //reg_dh = loctime->; - //reg_dl = loctime->; - - // reg_ah=0x2d; // set system time TODO - // CALLBACK_RunRealInt(0x21); - - uint32_t ticks=(uint32_t)(((double)(loctime->tm_hour*3600+ - loctime->tm_min*60+ - loctime->tm_sec))*18.206481481); - mem_writed(BIOS_TIMER,ticks); - if (sync_time) {manualtime=false;mainMenu.get_item("sync_host_datetime").check(true).refresh_item(mainMenu);} - return; - } - uint32_t newhour,newminute,newsecond; - char c=dos.tables.country[13], c1, c2; - if (sscanf(args,"%u%c%u%c%u",&newhour,&c1,&newminute,&c2,&newsecond)==5 && c1==c && c2==c) { - reg_ch = static_cast(newhour); - reg_cl = static_cast(newminute); - reg_dx = static_cast(newsecond)<<8; - - reg_ah=0x2d; // set system time - CALLBACK_RunRealInt(0x21); - if(reg_al==0xff) WriteOut(MSG_Get("SHELL_CMD_TIME_ERROR")); - return; - } - bool timeonly = ScanCMDBool(args,"T"); - - reg_ah=0x2c; // get system time - CALLBACK_RunRealInt(0x21); - /* - reg_dl= // 1/100 seconds - reg_dh= // seconds - reg_cl= // minutes - reg_ch= // hours +#endif + { + FormatNumber(free_space,numformat); + WriteOut(MSG_Get("SHELL_CMD_DIR_BYTES_FREE"),dir_count,numformat); + if (!dirPaused(this, w_size, optP, optW)) {dos.dta(save_dta);return;} + } + } + dos.dta(save_dta); +} + +void DOS_Shell::CMD_LS(char *args) { + HELP("LS"); + bool optA=ScanCMDBool(args,"A"); + bool optL=ScanCMDBool(args,"L"); + bool optP=ScanCMDBool(args,"P"); + bool optZ=ScanCMDBool(args,"Z"); + char * rem=ScanCMDRemain(args); + if (rem) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); + return; + } + if (!outcon) optL = true; + + RealPt save_dta=dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + + std::string pattern = args; + trim(pattern); + + const char last_char = (pattern.length() > 0 ? pattern.back() : '\0'); + switch (last_char) { + case '\0': // No arguments, search for all. + pattern = "*.*"; + break; + case '\\': // Handle \, C:\, etc. + case ':': // Handle C:, etc. + pattern += "*.*"; + break; + default: break; + } + + // Handle patterns starting with a dot. + char buffer[CROSS_LEN]; + pattern = ExpandDot((char *)pattern.c_str(), buffer, sizeof(buffer), true); + + // When there's no wildcard and target is a directory then search files + // inside the directory. + const char *p = pattern.c_str(); + if (!strrchr(p, '*') && !strrchr(p, '?')) { + uint16_t attr = 0; + if (DOS_GetFileAttr(p, &attr) && (attr & DOS_ATTR_DIRECTORY)) + pattern += "\\*.*"; + } + + // If no extension, list all files. + // This makes patterns like foo* work. + if (!strrchr(pattern.c_str(), '.')) + pattern += ".*"; + + char spattern[CROSS_LEN]; + if (!DOS_GetSFNPath(pattern.c_str(),spattern,false)) { + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + return; + } + int fbak=lfn_filefind_handle; + lfn_filefind_handle=uselfn?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; + bool ret = DOS_FindFirst(((uselfn?"\"":"")+std::string(spattern)+(uselfn?"\"":"")).c_str(), 0xffff & ~DOS_ATTR_VOLUME); + if (!ret) { + lfn_filefind_handle=fbak; + if (strlen(trim(args))) + WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"), trim(args)); + else + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + dos.dta(save_dta); + return; + } + + std::vector results; + // reserve space for as many as we can fit into a single memory page + // nothing more to it; make it larger if necessary + results.reserve(MEM_PAGE_SIZE / sizeof(DtaResult)); + + do { + DtaResult result; + dta.GetResult(result.name, result.lname, result.size, result.hsize, result.date, result.time, result.attr); + results.push_back(result); + } while ((ret = DOS_FindNext()) == true); + lfn_filefind_handle=fbak; + + size_t w_count, p_count, col; + unsigned int max[15], total, tcols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); + if (!tcols) tcols=80; + int mrow=tcols>80?15:10; + + for (col=mrow; col>0; col--) { + for (int i=0; imax[w_count%col]) max[w_count%col]=(unsigned int)(name.size()+2); + ++w_count; + } + total=0; + for (size_t i=0; i4) { + std::string ext=name.substr(name.length()-4); + std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower); + if (ext==".exe"||ext==".com"||ext==".bat") is_executable=true; + } + if (col==1) { + if (is_executable) WriteOut("\033[32;1m"); + p_count+=WriteOut_NoParsing(name.c_str(), true); + WriteOut(is_executable?"\033[0m\n":"\n"); + p_count++; + } else + WriteOut(is_executable?"\033[32;1m%-*s\033[0m":"%-*s", max[w_count % col], name.c_str()); + } + if (col>1) { + ++w_count; + if (w_count % col == 0) {p_count++;WriteOut_NoParsing("\n");} + } + if (optP&&p_count>=GetPauseCount()) { + WriteOut(MSG_Get("SHELL_CMD_PAUSE")); + uint8_t c;uint16_t n=1; + DOS_ReadFile(STDIN,&c,&n); + if (c==3) {dos.dta(save_dta);return;} + if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key + p_count=0; + } + } + if (col>1&&w_count%col) WriteOut_NoParsing("\n"); + dos.dta(save_dta); +} + +struct copysource { + std::string filename; + bool concat; + copysource(std::string& filein,bool concatin): + filename(filein),concat(concatin){ }; + copysource():filename(""),concat(false){ }; +}; + +#if !defined(OSFREE) +void DOS_Shell::CMD_COPY(char * args) { + HELP("COPY"); + static std::string defaulttarget = "."; + const char char_yes_upper = toupper(char_yes); + const char char_no_upper = toupper(char_no); + const char ch_a = MSG_Get("SHELL_ALLFILES_CHAR")[0]; + const char ch_A = toupper(ch_a); + StripSpaces(args); + /* Command uses dta so set it to our internal dta */ + RealPt save_dta=dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; + char name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH+1]; + std::vector sources; + // ignore /b and /t switches: always copy binary + while(ScanCMDBool(args,"B")) ; + while(ScanCMDBool(args,"T")) ; //Shouldn't this be A ? + while(ScanCMDBool(args,"A")) ; + bool optY=ScanCMDBool(args,"Y"); + if (bf||call||exec) optY=true; + std::string line; + if(GetEnvStr("COPYCMD",line)){ + std::string::size_type idx = line.find('='); + std::string value=line.substr(idx +1 , std::string::npos); + char copycmd[CROSS_LEN]; + strcpy(copycmd, value.c_str()); + if (ScanCMDBool(copycmd, "Y") && !ScanCMDBool(copycmd, "-Y")) optY = true; + } + if (ScanCMDBool(args,"-Y")) optY=false; + ScanCMDBool(args,"V"); + + char * rem=ScanCMDRemain(args); + if (rem) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); + dos.dta(save_dta); + return; + } + // Gather all sources (extension to copy more than 1 file specified at command line) + // Concatenating files go as follows: All parts except for the last bear the concat flag. + // This construction allows them to be counted (only the non concat set) + char q[]="\""; + char* source_p = NULL; + char source_x[DOS_PATHLENGTH+CROSS_LEN]; + while ( (source_p = StripArg(args)) && *source_p ) { + do { + char* plus = strchr(source_p,'+'); + // If StripWord() previously cut at a space before a plus then + // set concatenate flag on last source and remove leading plus. + if (plus == source_p && sources.size()) { + sources[sources.size()-1].concat = true; + // If spaces also followed plus then item is only a plus. + if (strlen(++source_p)==0) break; + plus = strchr(source_p,'+'); + } + if (plus) { + char *c=source_p+strlen(source_p)-1; + if (*source_p=='"'&&*c=='"') { + *c=0; + if (strchr(source_p+1,'"')) + *plus++ = 0; + else + plus=NULL; + *c='"'; + } else + *plus++ = 0; + } + safe_strncpy(source_x,source_p,CROSS_LEN); + bool has_drive_spec = false; + size_t source_x_len = strlen(source_x); + if (source_x_len>0) { + if (source_x[source_x_len-1]==':') has_drive_spec = true; + else if (uselfn&&strchr(source_x, '*')) { + char * find_last; + find_last=strrchr_dbcs(source_x,'\\'); + if (find_last==NULL) find_last=source_x; + else find_last++; + if (strlen(find_last)>0&&source_x[source_x_len-1]=='*'&&strchr(find_last, '.')==NULL) strcat(source_x, ".*"); + } + } + if (!has_drive_spec && !strpbrk(source_p,"*?") ) { //doubt that fu*\*.* is valid + char spath[DOS_PATHLENGTH]; + if (DOS_GetSFNPath(source_p,spath,false)) { + bool root=false; + if (strlen(spath)==3&&spath[1]==':'&&spath[2]=='\\') { + root=true; + strcat(spath, "*.*"); + } + if (DOS_FindFirst(spath,0xffff & ~DOS_ATTR_VOLUME)) { + dta.GetResult(name,lname,size,hsize,date,time,attr); + if (attr & DOS_ATTR_DIRECTORY || root) + strcat(source_x,"\\*.*"); + } + } + } + std::string source_xString = std::string(source_x); + sources.push_back(copysource(source_xString,(plus)?true:false)); + source_p = plus; + } while(source_p && *source_p); + } + // At least one source has to be there + if (!sources.size() || !sources[0].filename.size()) { + WriteOut(MSG_Get("SHELL_MISSING_PARAMETER")); + dos.dta(save_dta); + return; + } + + copysource target; + // If more than one object exists and last target is not part of a + // concat sequence then make it the target. + if(sources.size()>1 && !sources[sources.size()-2].concat){ + target = sources.back(); + sources.pop_back(); + } + //If no target => default target with concat flag true to detect a+b+c + if(target.filename.size() == 0) target = copysource(defaulttarget,true); + + copysource oldsource; + copysource source; + uint32_t count = 0; + while(sources.size()) { + /* Get next source item and keep track of old source for concat start end */ + oldsource = source; + source = sources[0]; + sources.erase(sources.begin()); + + //Skip first file if doing a+b+c. Set target to first file + if(!oldsource.concat && source.concat && target.concat) { + target = source; + continue; + } + + /* Make a full path in the args */ + char pathSourcePre[DOS_PATHLENGTH], pathSource[DOS_PATHLENGTH+2]; + char pathTarget[DOS_PATHLENGTH]; + + if (!DOS_Canonicalize(const_cast(source.filename.c_str()),pathSourcePre)) { + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + dos.dta(save_dta); + return; + } + strcpy(pathSource,pathSourcePre); + if (uselfn) sprintf(pathSource,"\"%s\"",pathSourcePre); + // cut search pattern + char* pos = strrchr_dbcs(pathSource,'\\'); + if (pos) *(pos+1) = 0; + + if (!DOS_Canonicalize(const_cast(target.filename.c_str()),pathTarget)) { + WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + dos.dta(save_dta); + return; + } + char* temp = strstr(pathTarget,"*.*"); + if(temp && (temp == pathTarget || temp[-1] == '\\')) *temp = 0;//strip off *.* from target + + // add '\\' if target is a directory + bool target_is_file = true; + if (pathTarget[strlen(pathTarget)-1]!='\\') { + if (DOS_FindFirst(pathTarget,0xffff & ~DOS_ATTR_VOLUME)) { + dta.GetResult(name,lname,size,hsize,date,time,attr); + if (attr & DOS_ATTR_DIRECTORY) { + strcat(pathTarget,"\\"); + target_is_file = false; + } + } + } else target_is_file = false; + + //Find first sourcefile + char sPath[DOS_PATHLENGTH]; + bool ret=DOS_GetSFNPath(source.filename.c_str(),sPath,false) && DOS_FindFirst(((strchr(sPath, ' ')&&sPath[0]!='"'?"\"":"")+std::string(sPath)+(strchr(sPath, ' ')&&sPath[strlen(sPath)-1]!='"'?"\"":"")).c_str(),0xffff & ~DOS_ATTR_VOLUME); + if (!ret) { + WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),source.filename.c_str()); + dos.dta(save_dta); + return; + } + + uint16_t sourceHandle,targetHandle = 0; + char nameTarget[DOS_PATHLENGTH]; + char nameSource[DOS_PATHLENGTH], nametmp[DOS_PATHLENGTH+2]; + + // Cache so we don't have to recalculate + size_t pathTargetLen = strlen(pathTarget); + + // See if we have to substitute filename or extension + char * ext = nullptr; + size_t replacementOffset = 0; + if (pathTarget[pathTargetLen-1]!='\\') { + // only if it's not a directory + ext = strchr(pathTarget, '.'); + if (ext > pathTarget) { // no possible substitution + if (ext[-1] == '*') { + // we substitute extension, save it, hide the name + ext[-1] = 0; + assert(ext > pathTarget + 1); // pathTarget is fully qualified + if (ext[-2] != '\\') { + // there is something before the asterisk + // save the offset in the source names + + replacementOffset = source.filename.find('*'); + size_t lastSlash = std::string::npos; + bool lead = false; + for (unsigned int i=0; i1&&(nameTarget[1]==':'||nameTarget[2]==':')?(toupper(nameTarget[nameTarget[0]=='"'?1:0])-'A'):-1; + if(drive >= 0 && Drives[drive]) { + uint16_t bytes_sector; uint8_t sectors_cluster; uint16_t total_clusters; uint16_t free_clusters; + uint32_t bytes32 = 0, sectors32 = 0, clusters32 = 0, free32 = 0; + bool no_free_space = true; + rsize = true; + freec = 0; + if(dos.version.major > 7 || (dos.version.major == 7 && dos.version.minor >= 10)) { + Drives[drive]->AllocationInfo32(&bytes32, §ors32, &clusters32, &free32); + no_free_space = (uint64_t)bytes32 * (uint64_t)sectors32 * (uint64_t)free32 < size ? true : false; + //LOG_MSG("drive=%u, no_free_space = %d bytes32=%u, sectors32=%u, free32 =%u, free_space=%u, size=%u", + // drive, no_free_space ? 1 : 0, bytes32, sectors32, free32, bytes32*sectors32*free32, size); + } + if(bytes32 == 0 || sectors32 == 0 || dos.version.major < 7 || (dos.version.major == 7 && dos.version.minor < 10)) { + Drives[drive]->AllocationInfo(&bytes_sector, §ors_cluster, &total_clusters, &free_clusters); + no_free_space = (Bitu)bytes_sector* (Bitu)sectors_cluster* (Bitu)(freec ? freec : free_clusters) < size ? true : false; + //LOG_MSG("no_free_space = %d bytes=%u, sectors=%u, free =%u, free_space=%u, size=%u", + // no_free_space ? 1 : 0, bytes_sector, sectors_cluster, freec, bytes_sector*sectors_cluster*free_clusters, size); + } + rsize = false; + if (no_free_space) { + WriteOut(MSG_Get("SHELL_CMD_COPY_NOSPACE"), uselfn?lname:name); + DOS_CloseFile(sourceHandle); + ret = DOS_FindNext(); + continue; + } + } + } + } + //Don't create a new file when in concat mode + if (oldsource.concat || DOS_CreateFile(nameTarget,0,&targetHandle)) { + uint32_t dummy=0; + + if (DOS_FindDevice(name) == DOS_DEVICES && !DOS_SetFileDate(targetHandle, ftime, fdate)) + LOG_MSG("WARNING: COPY unable to apply date/time to dest"); + + //In concat mode. Open the target and seek to the eof + if (!oldsource.concat || (DOS_OpenFile(nameTarget,OPEN_READWRITE,&targetHandle) && + DOS_SeekFile(targetHandle,&dummy,DOS_SEEK_END))) { + // Copy + static uint8_t buffer[0x8000]; // static, otherwise stack overflow possible. + bool failed = false; + uint16_t toread = 0x8000; + bool iscon=DOS_FindDevice(name)==DOS_FindDevice("con"); + if (iscon) dos.echo=true; + bool cont; + do { + if (!DOS_ReadFile(sourceHandle,buffer,&toread)) failed=true; + if (iscon) { + if (dos.errorcode==77) { + dos.dta(save_dta); + DOS_CloseFile(sourceHandle); + DOS_CloseFile(targetHandle); + if (!exist) DOS_UnlinkFile(nameTarget); + dos.echo=echo; + return; + } + cont=true; + for (int i=0;i0 && DOS_FindDevice(name) == DOS_DEVICES) DOS_SetFileDate(targetHandle, ftime, fdate); +#endif + if (!DOS_CloseFile(targetHandle)) failed=true; + if (failed) + WriteOut(MSG_Get("SHELL_CMD_COPY_ERROR"),uselfn?lname:name); + else if (strcmp(name,lname)&&uselfn) + WriteOut(" %s [%s]\n",lname,name); + else + WriteOut(" %s\n",uselfn?lname:name); + if(!source.concat && !special && !failed) count++; //Only count concat files once + } else { + DOS_CloseFile(sourceHandle); + WriteOut(MSG_Get("SHELL_CMD_COPY_FAILURE"),const_cast(target.filename.c_str())); + } + } else { + DOS_CloseFile(sourceHandle); + WriteOut(MSG_Get("SHELL_CMD_COPY_FAILURE"),const_cast(target.filename.c_str())); + } + } else WriteOut(MSG_Get("SHELL_CMD_COPY_FAILURE"),const_cast(source.filename.c_str())); + } + //On to the next file if the previous one wasn't a device + if ((attr&DOS_ATTR_DEVICE) == 0) ret = DOS_FindNext(); + else ret = false; + } + } + + WriteOut(MSG_Get("SHELL_CMD_COPY_SUCCESS"),count); + dos.dta(save_dta); + dos.echo=echo; + Drives[DOS_GetDefaultDrive()]->EmptyCache(); +} +#endif + +static void skipspc(char* &pcheck) { + while (*pcheck != 0 && (*pcheck == ' ' || *pcheck == '\t')) pcheck++; +} + +static void readnonspcu(std::string &s,char* &pcheck) { + s.clear(); + while (*pcheck != 0 && !(*pcheck == ' ' || *pcheck == '\t')) s += toupper( *(pcheck++) ); +} + +static void readnonspc(std::string &s,char* &pcheck) { + s.clear(); + while (*pcheck != 0 && !(*pcheck == ' ' || *pcheck == '\t')) s += *(pcheck++); +} + +#if defined(OSFREE) +extern bool openfile_deny_non_z; +#endif + +/* NTS: WARNING, this function modifies the buffer pointed to by char *args */ +void DOS_Shell::CMD_SET(char * args) { + HELP("SET"); + StripSpaces(args); + + enum op_mode_t { + show_all_env, + set_env, + show_env, + erase_env, + first_env + }; + + op_mode_t op_mode = show_all_env; + std::string env_name,env_value; + + const bool zdirpath = static_cast(control->GetSection("dos"))->Get_bool("drive z expand path"); + + { + std::string sw; + + /* parse arguments at the start */ + skipspc(args); + while (*args == '/') { + args++; /* skip / */ + readnonspcu(sw,args); + + if (sw == "P") { + WriteOut("Set /P is not supported. Use Choice!"); /* TODO: What is SET /P supposed to do? */ + return; + } + else if (sw == "ERASE") { /* DOSBox-X extension: Completely erase the environment block */ + op_mode = erase_env; + } + else if (sw == "FIRST") { /* DOSBox-X extension: Move the specified variable to the front of the environment block */ + op_mode = first_env; + } +#if defined(OSFREE) && 0 + else if (sw == "U") { /* DEBUG option: Unlock non-drive Z: file I/O blocking. For osfree official releases this must be disabled */ + /* this is here to make sure the stripped down DOS kernel in this build is still working properly, nothing more */ + openfile_deny_non_z = false; + WriteOut("OK"); /* be vague */ + return; + } +#endif + else { + WriteOut("Unknown switch /"); + WriteOut(sw.c_str()); + WriteOut("\n"); + return; + } + + skipspc(args); + } + } + + if (op_mode == first_env) { + if (*args == 0) return; + readnonspc(env_name,args); + } + else if (op_mode == show_all_env) { + if (*args != 0) { + /* Most SET commands take the form NAME=VALUE */ + char *p = strchr(args,'='); + if (p == NULL) { + /* SET without assignment prints the variable instead */ + op_mode = show_env; + readnonspc(env_name,args); + } else { + /* ASCIIZ snip the args string in two, so that args is C-string name of the variable, + * and "p" is C-string value of the variable */ + op_mode = set_env; + *p++ = 0; env_name = args; env_value = p; + } + } + } + + switch (op_mode) { + case show_all_env: { + const Bitu count = GetEnvCount(); + std::string line; + + for (Bitu a = 0;a < count;a++) { + if (GetEnvNum(a,line)) + WriteOut("%s\n",line.c_str()); + } + break; } + case show_env: + if (GetEnvStr(env_name.c_str(),env_value)) + WriteOut("%s\n",env_value.c_str()); + else + WriteOut(MSG_Get("SHELL_CMD_SET_NOT_SET"),env_name.c_str()); + break; + case set_env: + if(zdirpath && !strcasecmp(env_name.c_str(), "path")) GetExpandedPath(env_value); + + /* No parsing is needed. The command interpreter does the variable substitution for us */ + /* NTS: If Win95 is any example, the command interpreter expands the variables for us */ + if (!SetEnv(env_name.c_str(),env_value.c_str())) + WriteOut(MSG_Get("SHELL_CMD_SET_OUT_OF_SPACE")); + + break; + case erase_env: + if (!EraseEnv()) + WriteOut("Unable to erase environment block\n"); + break; + case first_env: + if (!FirstEnv(env_name.c_str())) + WriteOut("Unable to move environment variable\n"); + break; + default: + abort(); + break; + } +} + +void DOS_Shell::CMD_IF(char * args) { + HELP("IF"); + StripSpaces(args,'='); + bool has_not=false; + + while (strncasecmp(args,"NOT",3) == 0) { + if (!isspace(*reinterpret_cast(&args[3])) && (args[3] != '=')) break; + args += 3; //skip text + //skip more spaces + StripSpaces(args,'='); + has_not = !has_not; + } + + if(strncasecmp(args,"ERRORLEVEL",10) == 0) { + args += 10; //skip text + //Strip spaces and == + StripSpaces(args,'='); + char* word = StripWord(args); + if(!isdigit(*word)) { + WriteOut(MSG_Get("SHELL_CMD_IF_ERRORLEVEL_MISSING_NUMBER")); + return; + } + + uint8_t n = 0; + do n = n * 10 + (*word - '0'); + while (isdigit(*++word)); + if(*word && !isspace(*word)) { + WriteOut(MSG_Get("SHELL_CMD_IF_ERRORLEVEL_INVALID_NUMBER")); + return; + } + /* Read the error code from DOS */ + if ((dos.return_code>=n) ==(!has_not)) DoCommand(args); + return; + } + + if(strncasecmp(args,"EXIST ",6) == 0) { + args += 6; //Skip text + StripSpaces(args); + char* word = StripArg(args); + if (!*word) { + WriteOut(MSG_Get("SHELL_CMD_IF_EXIST_MISSING_FILENAME")); + return; + } + + { /* DOS_FindFirst uses dta so set it to our internal dta */ + char spath[DOS_PATHLENGTH], path[DOS_PATHLENGTH], pattern[DOS_PATHLENGTH], full[DOS_PATHLENGTH], *r; + if (!DOS_Canonicalize(word,full)) { + if (has_not) DoCommand(args); + return; + } + r=strrchr_dbcs(full, '\\'); + if (r!=NULL) { + *r=0; + strcpy(path, full); + strcat(path, "\\"); + strcpy(pattern, r+1); + *r='\\'; + } else { + strcpy(path, ""); + strcpy(pattern, full); + } + int k=0; + for (int i=0;i<(int)strlen(pattern);i++) + if (pattern[i]!='\"') + pattern[k++]=pattern[i]; + pattern[k]=0; + strcpy(spath, path); + if (strchr_dbcs(word,'\"')||uselfn) { + if (!DOS_GetSFNPath(("\""+std::string(path)+"\\").c_str(), spath, false)) strcpy(spath, path); + if (!strlen(spath)||spath[strlen(spath)-1]!='\\') strcat(spath, "\\"); + } + RealPt save_dta=dos.dta(); + dos.dta(dos.tables.tempdta); + int fbak=lfn_filefind_handle; + lfn_filefind_handle=uselfn?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; + std::string sfull=std::string(spath)+std::string(pattern); + bool ret=DOS_FindFirst(((uselfn&&sfull.length()&&sfull[0]!='"'?"\"":"")+sfull+(uselfn&&sfull.length()&&sfull[sfull.length()-1]!='"'?"\"":"")).c_str(),0xffff & ~(DOS_ATTR_VOLUME|DOS_ATTR_DIRECTORY)); + lfn_filefind_handle=fbak; + dos.dta(save_dta); + if (ret==(!has_not)) DoCommand(args); + } + return; + } + + /* Normal if string compare */ + + char* word1 = args; + // first word is until space or = + while (*args && !isspace(*reinterpret_cast(args)) && (*args != '=')) + args++; + char* end_word1 = args; + + // scan for = + while (*args && (*args != '=')) + args++; + // check for == + if ((*args==0) || (args[1] != '=')) { + SyntaxError(); + return; + } + args += 2; + StripSpaces(args,'='); + + char* word2 = args; + // second word is until space or = + while (*args && !isspace(*reinterpret_cast(args)) && (*args != '=')) + args++; + + if (*args) { + *end_word1 = 0; // mark end of first word + *args++ = 0; // mark end of second word + StripSpaces(args,'='); + + if ((strcmp(word1,word2)==0)==(!has_not)) DoCommand(args); + } +} + +void DOS_Shell::CMD_GOTO(char * args) { + HELP("GOTO"); + StripSpaces(args); + if (!bf) return; + if (*args==':') args++; + //label ends at the first space + char* non_space = args; + while (*non_space) { + if((*non_space == ' ') || (*non_space == '\t')) + *non_space = 0; + else non_space++; + } + if (!*args) { + WriteOut(MSG_Get("SHELL_CMD_GOTO_MISSING_LABEL")); + return; + } + if (!bf->Goto(args)) { + WriteOut(MSG_Get("SHELL_CMD_GOTO_LABEL_NOT_FOUND"),args); + return; + } +} + +void DOS_Shell::CMD_SHIFT(char * args ) { + HELP("SHIFT"); + if(bf) bf->Shift(); +} + +#if !defined(OSFREE) +void DOS_Shell::CMD_TYPE(char * args) { + HELP("TYPE"); + + // ignore /p /h and /t for compatibility + ScanCMDBool(args,"P"); + ScanCMDBool(args,"H"); + ScanCMDBool(args,"T"); + StripSpaces(args); + if (strcasecmp(args,"nul")==0) return; + if (!*args) { + WriteOut(MSG_Get("SHELL_SYNTAXERROR")); + return; + } + uint16_t handle; + char * word; + bool lead = false; + int COLS = 80; + if (!IS_PC98_ARCH && outcon) COLS=real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); + BIOS_NCOLS; + uint8_t page=outcon?real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE):0; +nextfile: + word=StripArg(args); + if (!DOS_OpenFile(word,0,&handle)) { + WriteOut(MSG_Get(dos.errorcode==DOSERR_ACCESS_DENIED?"SHELL_CMD_FILE_ACCESS_DENIED":(dos.errorcode==DOSERR_PATH_NOT_FOUND?"SHELL_ILLEGAL_PATH":"SHELL_CMD_FILE_NOT_FOUND")),word); + return; + } + ctrlbrk=false; + uint8_t c,last,last2,last3;uint16_t n=1; + last3=last2=last=0; + bool iscon=DOS_FindDevice(word)==DOS_FindDevice("con"); + while (n) { + DOS_ReadFile(handle,&c,&n); + if (outcon && !CURSOR_POS_COL(page)) last3=last2=last=0; + if (lead) lead=false; + else if ((IS_PC98_ARCH || isDBCSCP()) +#if defined(USE_TTF) + && dbcs_sbcs +#endif + ) lead = isKanji1(c) && !(TTF_using() +#if defined(USE_TTF) + && autoboxdraw +#endif + && CheckBoxDrawing(last3, last2, last, c)); + if (n==0 || c==0x1a) break; // stop at EOF + if (iscon) { + if (c==3) break; + else if (c==13) WriteOut("\r\n"); + } else if (CheckBreak(this)) break; + else if (outcon && lead && CURSOR_POS_COL(page) == COLS-1) WriteOut(" "); + DOS_WriteFile(STDOUT,&c,&n); + if (outcon) {last3=last2;last2=last;last=c;} + } + DOS_CloseFile(handle); + if (*args) goto nextfile; +} +#endif + +void DOS_Shell::CMD_REM(char * args) { + HELP("REM"); +} + +static char PAUSED(void) { + uint8_t c; uint16_t n=1, handle; + if (!usecon&&DOS_OpenFile("con", OPEN_READWRITE, &handle)) { + DOS_ReadFile (handle,&c,&n); + DOS_CloseFile(handle); + } else + DOS_ReadFile (STDIN,&c,&n); + return c; +} + +#if !defined(OSFREE) +void DOS_Shell::CMD_MORE(char * args) { + HELP("MORE"); + //ScanCMDBool(args,">"); + int nchars = 0, nlines = 0, linecount = 0, LINES = 25, COLS = 80, TABSIZE = 8; + char * word; + uint8_t c,last,last2,last3; + last3=last2=last=0; + bool lead=false; + uint16_t n=1; + StripSpaces(args); + if (IS_PC98_ARCH) { + LINES=real_readb(0x60,0x113) & 0x01 ? 25 : 20; + COLS=80; + if (real_readb(0x60,0x111)) LINES--; // Function keys displayed + } else { + LINES=(IS_EGAVGA_ARCH?real_readb(BIOSMEM_SEG,BIOSMEM_NB_ROWS):24)+1; + COLS=real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); + } + LINES--; + if(!*args||!strcasecmp(args, "con")) { + while (true) { + DOS_ReadFile (STDIN,&c,&n); + if (lead) lead=false; + else if ((IS_PC98_ARCH || isDBCSCP()) +#if defined(USE_TTF) + && dbcs_sbcs +#endif + ) lead = isKanji1(c) && !(TTF_using() +#if defined(USE_TTF) + && autoboxdraw +#endif + && CheckBoxDrawing(last3, last2, last, c)); + if (c==3) {dos.echo=echo;return;} + else if (n==0) {if (last!=10) WriteOut("\r\n");dos.echo=echo;return;} + else if (c==13&&last==26) {dos.echo=echo;return;} + else { + if (c==10); + else if (c==13) { + linecount++; + WriteOut("\r\n"); + last3=last2=last=0; + } else if (c=='\t') { + do { + WriteOut(" "); + nchars++; + } while ( nchars < COLS && nchars % TABSIZE ); + } else { + if (lead && nchars == COLS-1) { + last3=last2=last=0; + nlines++; + nchars = 0; + WriteOut("\n"); + if (nlines == LINES) { + WriteOut("-- More -- (%u) --",linecount); + if (PAUSED()==3) return; + WriteOut("\n"); + nlines=0; + } + } + nchars++; + WriteOut("%c", c); + } + if (c == 13 || nchars >= COLS) { + nlines++; + nchars = 0; + if (nlines == LINES) { + WriteOut("-- More -- (%u) --",linecount); + if (PAUSED()==3) return; + WriteOut("\n"); + nlines=0; + } + } + last3=last2;last2=last;last=c; + } + } + } + if (strcasecmp(args,"nul")==0) return; + if (!*args) { + WriteOut(MSG_Get("SHELL_SYNTAXERROR")); + return; + } + uint16_t handle; +nextfile: + word=StripArg(args); + if (!DOS_OpenFile(word,0,&handle)) { + WriteOut(MSG_Get(dos.errorcode==DOSERR_ACCESS_DENIED?"SHELL_CMD_FILE_ACCESS_DENIED":(dos.errorcode==DOSERR_PATH_NOT_FOUND?"SHELL_ILLEGAL_PATH":"SHELL_CMD_FILE_NOT_FOUND")),word); + return; + } + ctrlbrk=false; + lead=false; + last3=last2=last=0; + nlines=0; + do { + n=1; + DOS_ReadFile(handle,&c,&n); + if (lead) lead=false; + else if ((IS_PC98_ARCH || isDBCSCP()) +#if defined(USE_TTF) + && dbcs_sbcs +#endif + ) lead = isKanji1(c) && !(TTF_using() +#if defined(USE_TTF) + && autoboxdraw +#endif + && CheckBoxDrawing(last3, last2, last, c)); + if (lead && nchars == COLS-1) { + last3=last2=last=0; + nlines++; + nchars = 0; + WriteOut("\n"); + if (nlines == LINES && usecon) { + WriteOut("-- More -- %s (%u) --",word,linecount); + if (PAUSED()==3) {DOS_CloseFile(handle);return;} + WriteOut("\n"); + nlines=0; + } + } + DOS_WriteFile(STDOUT,&c,&n); + last3=last2;last2=last;last=c; + if (c != '\t') nchars++; + else do { + WriteOut(" "); + nchars++; + } while ( nchars < COLS && nchars % TABSIZE ); + + if (c == '\n') linecount++; + if (c == '\n' || nchars >= COLS) { + last3=last2=last=0; + nlines++; + nchars = 0; + if (!usecon) { + if (c != '\n') WriteOut("\n"); + } else if (nlines == LINES) { + WriteOut("-- More -- %s (%u) --",word,linecount); + if (PAUSED()==3) {DOS_CloseFile(handle);return;} + WriteOut("\n"); + nlines=0; + } + } + if (CheckBreak(this)) break; + } while (n); + DOS_CloseFile(handle); + if (*args) { + WriteOut("\n"); + if (usecon && PAUSED()==3) return; + goto nextfile; + } +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_PAUSE(char * args){ + HELP("PAUSE"); + if(args && *args) { + args++; + WriteOut("%s\n",args); // optional specified message + } else + WriteOut(MSG_Get("SHELL_CMD_PAUSE")); + uint8_t c;uint16_t n=1; + DOS_ReadFile(STDIN,&c,&n); + if (c==0) DOS_ReadFile(STDIN,&c,&n); // read extended key +} +#endif + +void DOS_Shell::CMD_CALL(char * args){ + HELP("CALL"); + this->call=true; /* else the old batchfile will be closed first */ + this->ParseLine(args); + this->call=false; +} + +#if !defined(OSFREE) +void DOS_Shell::CMD_DATE(char * args) { + HELP("DATE"); + if(ScanCMDBool(args,"H")) { + // synchronize date with host parameter + time_t curtime; + struct tm *loctime; + curtime = time (NULL); + loctime = localtime (&curtime); + + reg_cx = loctime->tm_year+1900; + reg_dh = loctime->tm_mon+1; + reg_dl = loctime->tm_mday; + + reg_ah=0x2b; // set system date + CALLBACK_RunRealInt(0x21); + if (sync_time) {manualtime=false;mainMenu.get_item("sync_host_datetime").check(true).refresh_item(mainMenu);} + return; + } else if(ScanCMDBool(args,"S")) { + sync_time=true; + manualtime=false; + mainMenu.get_item("sync_host_datetime").check(true).refresh_item(mainMenu); + return; + } else if(ScanCMDBool(args,"F")) { + sync_time=false; + manualtime=false; + mainMenu.get_item("sync_host_datetime").check(false).refresh_item(mainMenu); + return; + } + // check if a date was passed in command line + char c=dos.tables.country[11], c1, c2; + uint32_t newday,newmonth,newyear; + int n=dos.tables.country[0]==1?sscanf(args,"%u%c%u%c%u",&newday,&c1,&newmonth,&c2,&newyear):(dos.tables.country[0]==2?sscanf(args,"%u%c%u%c%u",&newyear,&c1,&newmonth,&c2,&newday):sscanf(args,"%u%c%u%c%u",&newmonth,&c1,&newday,&c2,&newyear)); + if (n==5 && c1==c && c2==c) { + reg_cx = static_cast(newyear); + reg_dh = static_cast(newmonth); + reg_dl = static_cast(newday); + + reg_ah=0x2b; // set system date + CALLBACK_RunRealInt(0x21); + if(reg_al==0xff) WriteOut(MSG_Get("SHELL_CMD_DATE_ERROR")); + return; + } + // display the current date + reg_ah=0x2a; // get system date + CALLBACK_RunRealInt(0x21); + + const char* datestring = MSG_Get("SHELL_CMD_DATE_DAYS"); + uint32_t length; + char day[6] = {0}; + if(sscanf(datestring,"%u",&length) && (length<7) && (strlen(datestring)==((size_t)length*7+1))) { + // date string appears valid + for(uint32_t i = 0; i < length; i++) day[i] = datestring[reg_al*length+1+i]; + } + bool dateonly = ScanCMDBool(args,"T"); + if(!dateonly) WriteOut(MSG_Get("SHELL_CMD_DATE_NOW")); + if (!dateonly) WriteOut("%s ", day); + WriteOut("%s\n",FormatDate((uint16_t)reg_cx, (uint8_t)reg_dh, (uint8_t)reg_dl)); + if(!dateonly) { + char format[11]; + sprintf(format, dos.tables.country[0]==1?"DD%cMM%cYYYY":(dos.tables.country[0]==2?"YYYY%cMM%cDD":"MM%cDD%cYYYY"), c, c); + WriteOut(MSG_Get("SHELL_CMD_DATE_SETHLP"), format); + } +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_TIME(char * args) { + HELP("TIME"); + if(ScanCMDBool(args,"H")) { + // synchronize time with host parameter + time_t curtime; + struct tm *loctime; + curtime = time (NULL); + loctime = localtime (&curtime); + + //reg_cx = loctime->; + //reg_dh = loctime->; + //reg_dl = loctime->; + + // reg_ah=0x2d; // set system time TODO + // CALLBACK_RunRealInt(0x21); + + uint32_t ticks=(uint32_t)(((double)(loctime->tm_hour*3600+ + loctime->tm_min*60+ + loctime->tm_sec))*18.206481481); + mem_writed(BIOS_TIMER,ticks); + if (sync_time) {manualtime=false;mainMenu.get_item("sync_host_datetime").check(true).refresh_item(mainMenu);} + return; + } + uint32_t newhour,newminute,newsecond; + char c=dos.tables.country[13], c1, c2; + if (sscanf(args,"%u%c%u%c%u",&newhour,&c1,&newminute,&c2,&newsecond)==5 && c1==c && c2==c) { + reg_ch = static_cast(newhour); + reg_cl = static_cast(newminute); + reg_dx = static_cast(newsecond)<<8; + + reg_ah=0x2d; // set system time + CALLBACK_RunRealInt(0x21); + if(reg_al==0xff) WriteOut(MSG_Get("SHELL_CMD_TIME_ERROR")); + return; + } + bool timeonly = ScanCMDBool(args,"T"); + + reg_ah=0x2c; // get system time + CALLBACK_RunRealInt(0x21); +/* + reg_dl= // 1/100 seconds + reg_dh= // seconds + reg_cl= // minutes + reg_ch= // hours +*/ + if(timeonly) { + WriteOut("%u%c%02u%c%02u\n",reg_ch,dos.tables.country[13],reg_cl,dos.tables.country[13],reg_dh); + } else { + WriteOut(MSG_Get("SHELL_CMD_TIME_NOW")); + WriteOut("%s\n", FormatTime(reg_ch,reg_cl,reg_dh,reg_dl)); + char format[9]; + sprintf(format, "hh%cmm%css", dos.tables.country[13], dos.tables.country[13]); + WriteOut(MSG_Get("SHELL_CMD_TIME_SETHLP"), format); + } +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_SUBST(char * args) { +/* If more that one type can be substed think of something else + * E.g. make basedir member dos_drive instead of localdrive */ - if(timeonly) { - WriteOut("%u%c%02u%c%02u\n",reg_ch,dos.tables.country[13],reg_cl,dos.tables.country[13],reg_dh); - } else { - WriteOut(MSG_Get("SHELL_CMD_TIME_NOW")); - WriteOut("%s\n", FormatTime(reg_ch,reg_cl,reg_dh,reg_dl)); - char format[9]; - sprintf(format, "hh%cmm%css", dos.tables.country[13], dos.tables.country[13]); - WriteOut(MSG_Get("SHELL_CMD_TIME_SETHLP"), format); - } - } - - void DOS_Shell::CMD_SUBST(char * args) { - /* If more that one type can be substed think of something else - * E.g. make basedir member dos_drive instead of localdrive - */ - HELP("SUBST"); - try { - char mountstring[DOS_PATHLENGTH+CROSS_LEN+20]; - strcpy(mountstring,"MOUNT "); - StripSpaces(args); - std::string arg; - CommandLine command(nullptr, args); - if (!command.GetCount()) { - char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH]; - uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; - /* Command uses dta so set it to our internal dta */ - RealPt save_dta = dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - - WriteOut(MSG_Get("SHELL_CMD_SUBST_DRIVE_LIST")); - WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_FORMAT"),"Drive","Type","Label"); - int cols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); - if (!cols) cols=80; - for(int p = 0;p < cols;p++) WriteOut("-"); - bool none=true; - for (int d = 0;d < DOS_DRIVES;d++) { - if (!Drives[d]||strncmp(Drives[d]->GetInfo(),"local ",6)) continue; - - char root[7] = {(char)('A'+d),':','\\','*','.','*',0}; - bool ret = DOS_FindFirst(root,DOS_ATTR_VOLUME); - if (ret) { - dta.GetResult(name,lname,size,hsize,date,time,attr); - DOS_FindNext(); //Mark entry as invalid - } else name[0] = 0; - - /* Change 8.3 to 11.0 */ - const char* dot = strchr(name, '.'); - if(dot && (dot - name == 8) ) { - name[8] = name[9];name[9] = name[10];name[10] = name[11];name[11] = 0; - } - - root[1] = 0; //This way, the format string can be reused. - WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_FORMAT"),root, Drives[d]->GetInfo(),name); - none=false; - } - if (none) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NONE")); - dos.dta(save_dta); - return; - } - - if (command.GetCount() != 2) throw 0 ; - - command.FindCommand(1,arg); - if( (arg.size()>1) && arg[1] !=':') throw(0); - char temp_str[2] = { 0,0 }; - temp_str[0]=(char)toupper(args[0]); - command.FindCommand(2,arg); - if((arg=="/D") || (arg=="/d")) { - if(!Drives[temp_str[0]-'A'] ) throw 1; //targetdrive not in use - strcat(mountstring,"-u "); - strcat(mountstring,temp_str); - this->ParseLine(mountstring); - return; - } - if(Drives[temp_str[0]-'A'] ) throw 2; //targetdrive in use - strcat(mountstring,temp_str); - strcat(mountstring," "); - - uint8_t drive;char dir[DOS_PATHLENGTH+2],fulldir[DOS_PATHLENGTH]; - if (strchr(arg.c_str(),'\"')==NULL) - sprintf(dir,"\"%s\"",arg.c_str()); - else strcpy(dir,arg.c_str()); - if (!DOS_MakeName(dir,fulldir,&drive)) throw 3; - - localDrive * const ldp = dynamic_cast(Drives[drive]); - if (!ldp) throw 4; - char newname[CROSS_LEN]; - strcpy(newname, ldp->basedir); - strcat(newname,fulldir); - CROSS_FILENAME(newname); - ldp->dirCache.ExpandName(newname); - strcat(mountstring,"\""); - strcat(mountstring, newname); - strcat(mountstring,"\""); - this->ParseLine(mountstring); - } - catch(int a){ - switch (a) { - case 1: - WriteOut(MSG_Get("SHELL_CMD_SUBST_NO_REMOVE")); - break; - case 2: - WriteOut(MSG_Get("SHELL_CMD_SUBST_IN_USE")); - break; - case 3: - WriteOut(MSG_Get("SHELL_CMD_SUBST_INVALID_PATH")); - break; - case 4: - WriteOut(MSG_Get("SHELL_CMD_SUBST_NOT_LOCAL")); - break; - default: - WriteOut(MSG_Get("SHELL_CMD_SUBST_FAILURE")); - } - return; - } - catch(...) { //dynamic cast failed =>so no localdrive - WriteOut(MSG_Get("SHELL_CMD_SUBST_FAILURE")); - return; - } - - return; - } - - void DOS_Shell::CMD_LOADHIGH(char *args){ - HELP("LOADHIGH"); - uint16_t umb_start=dos_infoblock.GetStartOfUMBChain(); - uint8_t umb_flag=dos_infoblock.GetUMBChainState(); - uint8_t old_memstrat=(uint8_t)(DOS_GetMemAllocStrategy()&0xff); - if (umb_start==0x9fff) { - if ((umb_flag&1)==0) DOS_LinkUMBsToMemChain(1); - DOS_SetMemAllocStrategy(0x80); // search in UMBs first - this->ParseLine(args); - uint8_t current_umb_flag=dos_infoblock.GetUMBChainState(); - if ((current_umb_flag&1)!=(umb_flag&1)) DOS_LinkUMBsToMemChain(umb_flag); - DOS_SetMemAllocStrategy(old_memstrat); // restore strategy - } else this->ParseLine(args); - } - - bool get_param(char *&args, char *&rem, char *&temp, char &wait_char, int &wait_sec) - { - const char *last = strchr(args, 0); - StripSpaces(args); - temp = ScanCMDRemain(args); - const bool optC = temp && tolower(temp[1]) == 'c'; - const bool optT = temp && tolower(temp[1]) == 't'; - if (temp && *temp && !optC && !optT) - return false; - if (temp) { - if (args == temp) - args = strchr(temp, 0) + 1; - temp += 2; - if (temp[0] == ':') - temp++; - } - if (optC) { - rem = temp; - } else if (optT) { - if (temp && *temp && *(temp + 1) == ',') { - wait_char = *temp; - wait_sec = atoi(temp + 2); - } else - wait_sec = 0; - } - if (args > last) - args = NULL; - if (args) args = trim(args); - return true; - } - - void DOS_Shell::CMD_CHOICE(char * args){ - HELP("CHOICE"); - static char defchoice[3] = {MSG_Get("INT21_6523_YESNO_CHARS")[0],MSG_Get("INT21_6523_YESNO_CHARS")[1],0}; - //char *rem1 = NULL, *rem2 = NULL; /* unused */ - char *rem = NULL, *temp = NULL, waitchar = 0, *ptr; - int waitsec = 0; - //bool optC = false, optT = false; /* unused */ - bool optN = ScanCMDBool(args,"N"); - bool optS = ScanCMDBool(args,"S"); //Case-sensitive matching - // ignore /b and /m switches for compatibility - ScanCMDBool(args,"B"); - ScanCMDBool(args,"M"); // Text - ScanCMDBool(args,"T"); //Default Choice after timeout - - while (args && *trim(args) == '/') { - if (!get_param(args, rem, temp, waitchar, waitsec)) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"), temp); - return; - } - } - if (!rem || !*rem) rem = defchoice; /* No choices specified use (national) YN */ - ptr = rem; - uint8_t c; - if(!optS) while ((c = (uint8_t)(*ptr))) *ptr++ = (char)toupper(c); /* When in no case-sensitive mode. make everything upcase */ - if(args && *args ) { - StripSpaces(args); - size_t argslen = strlen(args); - if(argslen>1 && args[0] == '"' && args[argslen-1] =='"') { - args[argslen-1] = 0; //Remove quotes - args++; - } - WriteOut(args); - } - /* Show question prompt of the form [a,b]? where a b are the choice values */ - if (!optN) { - if(args && *args) WriteOut(" "); - WriteOut("["); - size_t len = strlen(rem); - for(size_t t = 1; t < len; t++) { - WriteOut("%c,",rem[t-1]); - } - WriteOut("%c]?",rem[len-1]); - } - - // TO-DO: Find out how real DOS handles /T option for making a choice after delay; use AUTOTYPE for now - std::vector sequence; - bool in_char = optS ? (strchr(rem, waitchar) != nullptr) : (strchr(rem, toupper(waitchar)) || strchr(rem, tolower(waitchar))); - if (waitchar && *rem && in_char && waitsec > 0) { - sequence.emplace_back(std::string(1, optS?waitchar:tolower(waitchar))); - MAPPER_AutoType(sequence, waitsec * 1000, 500, true); - } - uint16_t n=1; - do { - dotype = true; - DOS_ReadFile (STDIN,&c,&n); - dotype = false; - if (n==0) {dos.return_code=255;return;} - if (CheckBreak(this) || c==3) {dos.return_code=0;return;} - } while (!c || !(ptr = strchr(rem,(optS?c:toupper(c))))); - c = optS?c:(uint8_t)toupper(c); - DOS_WriteFile (STDOUT,&c, &n); - c = '\r'; DOS_WriteFile (STDOUT,&c, &n); - c = '\n'; DOS_WriteFile (STDOUT,&c, &n); - dos.return_code = (uint8_t)(ptr-rem+1); - } - - static bool doAttrib(DOS_Shell * shell, char * args, DOS_DTA dta, bool optS, bool adda, bool adds, bool addh, bool addr, bool suba, bool subs, bool subh, bool subr) { - char spath[DOS_PATHLENGTH],sargs[DOS_PATHLENGTH+4],path[DOS_PATHLENGTH+4],full[DOS_PATHLENGTH],sfull[DOS_PATHLENGTH+2]; - if (!DOS_Canonicalize(args,full)||strrchr_dbcs(full,'\\')==NULL) { - shell->WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); - if (!optS) ctrlbrk=true; - return false; - } - if (!DOS_GetSFNPath(args,spath,false)) { - shell->WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); - if (!optS) ctrlbrk=true; - return false; - } - if (!uselfn||!DOS_GetSFNPath(args,sfull,true)) strcpy(sfull,full); - sprintf(sargs,"\"%s\"",spath); - bool found=false, res=DOS_FindFirst(sargs,0xffff & ~DOS_ATTR_VOLUME); - if (!res&&!optS) return false; - //end can't be 0, but if it is we'll get a nice crash, who cares :) - strcpy(path,full); - *(strrchr_dbcs(path,'\\')+1)=0; - char * end=strrchr_dbcs(full,'\\')+1;*end=0; - char * lend=strrchr_dbcs(sfull,'\\')+1;*lend=0; - char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH+1]; - uint32_t size,hsize;uint16_t time,date;uint8_t attr;uint16_t fattr; - while (res) { - if (CheckBreak(shell)) {ctrlbrk=true;return false;} - dta.GetResult(name,lname,size,hsize,date,time,attr); - if (!((!strcmp(name, ".") || !strcmp(name, "..") || strchr(sargs, '*')!=NULL || strchr(sargs, '?')!=NULL) && attr & DOS_ATTR_DIRECTORY)) { - found=true; - strcpy(end,name); - strcpy(lend,lname); - if (strlen(full)&&DOS_GetFileAttr(((uselfn||strchr(full, ' ')?(full[0]!='"'?"\"":""):"")+std::string(full)+(uselfn||strchr(full, ' ')?(full[strlen(full)-1]!='"'?"\"":""):"")).c_str(), &fattr)) { - bool attra=fattr&DOS_ATTR_ARCHIVE, attrs=fattr&DOS_ATTR_SYSTEM, attrh=fattr&DOS_ATTR_HIDDEN, attrr=fattr&DOS_ATTR_READ_ONLY; - if (adda||adds||addh||addr||suba||subs||subh||subr) { - if (adda) fattr|=DOS_ATTR_ARCHIVE; - if (adds) fattr|=DOS_ATTR_SYSTEM; - if (addh) fattr|=DOS_ATTR_HIDDEN; - if (addr) fattr|=DOS_ATTR_READ_ONLY; - if (suba) fattr&=~DOS_ATTR_ARCHIVE; - if (subs) fattr&=~DOS_ATTR_SYSTEM; - if (subh) fattr&=~DOS_ATTR_HIDDEN; - if (subr) fattr&=~DOS_ATTR_READ_ONLY; - if (DOS_SetFileAttr(((uselfn||strchr(full, ' ')?(full[0]!='"'?"\"":""):"")+std::string(full)+(uselfn||strchr(full, ' ')?(full[strlen(full)-1]!='"'?"\"":""):"")).c_str(), fattr)) { - if (DOS_GetFileAttr(((uselfn||strchr(full, ' ')?(full[0]!='"'?"\"":""):"")+std::string(full)+(uselfn||strchr(full, ' ')?(full[strlen(full)-1]!='"'?"\"":""):"")).c_str(), &fattr)) { - shell->WriteOut(" %c %c%c%c ", fattr&DOS_ATTR_ARCHIVE?'A':' ', fattr&DOS_ATTR_SYSTEM?'S':' ', fattr&DOS_ATTR_HIDDEN?'H':' ', fattr&DOS_ATTR_READ_ONLY?'R':' '); - shell->WriteOut_NoParsing(uselfn?sfull:full, true); - shell->WriteOut("\n"); - } - } else - shell->WriteOut(MSG_Get("SHELL_CMD_ATTRIB_SET_ERROR"),uselfn?sfull:full); - } else { - shell->WriteOut(" %c %c%c%c ", attra?'A':' ', attrs?'S':' ', attrh?'H':' ', attrr?'R':' '); - shell->WriteOut_NoParsing(uselfn?sfull:full, true); - shell->WriteOut("\n"); - } - } else - shell->WriteOut(MSG_Get("SHELL_CMD_ATTRIB_GET_ERROR"),uselfn?sfull:full); - } - res=DOS_FindNext(); - } - if (optS) { - size_t len=strlen(path); - strcat(path, "*.*"); - bool ret=DOS_FindFirst(path,0xffff & ~DOS_ATTR_VOLUME); - *(path+len)=0; - if (ret) { - std::vector cdirs; - cdirs.clear(); - do { /* File name and extension */ - DtaResult result; - dta.GetResult(result.name,result.lname,result.size,result.hsize,result.date,result.time,result.attr); - - if((result.attr&DOS_ATTR_DIRECTORY) && strcmp(result.name, ".")&&strcmp(result.name, "..")) { - strcat(path, result.name); - strcat(path, "\\"); - char *fname = strrchr_dbcs(args, '\\'); - if (fname!=NULL) fname++; - else { - fname = strrchr(args, ':'); - if (fname!=NULL) fname++; - else fname=args; - } - strcat(path, fname); - cdirs.push_back((path[0]!='"'&&path[strlen(path)-1]=='"'?"\"":"")+std::string(path)); - *(path+len)=0; - } - } while ( (ret=DOS_FindNext()) ); - adirs.insert(adirs.begin()+1, cdirs.begin(), cdirs.end()); - } - } - return found; - } - - void DOS_Shell::CMD_ATTRIB(char *args){ - HELP("ATTRIB"); - StripSpaces(args); - - bool optS=ScanCMDBool(args,"S"); - char * rem=ScanCMDRemain(args); - if (rem) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); - return; - } - - bool adda=false, adds=false, addh=false, addr=false, suba=false, subs=false, subh=false, subr=false; - char sfull[DOS_PATHLENGTH+2]; - char* arg1; - strcpy(sfull, "*.*"); - do { - arg1=StripArg(args); - if (!strcasecmp(arg1, "+A")) adda=true; - else if (!strcasecmp(arg1, "+S")) adds=true; - else if (!strcasecmp(arg1, "+H")) addh=true; - else if (!strcasecmp(arg1, "+R")) addr=true; - else if (!strcasecmp(arg1, "-A")) suba=true; - else if (!strcasecmp(arg1, "-S")) subs=true; - else if (!strcasecmp(arg1, "-H")) subh=true; - else if (!strcasecmp(arg1, "-R")) subr=true; - else if (*arg1) { - strcpy(sfull, arg1); - if (uselfn&&strchr(sfull, '*')) { - char * find_last; - find_last=strrchr_dbcs(sfull,'\\'); - if (find_last==NULL) find_last=sfull; - else find_last++; - if (sfull[strlen(sfull)-1]=='*'&&strchr(find_last, '.')==NULL) strcat(sfull, ".*"); - } - } - } while (*args); - - char buffer[CROSS_LEN]; - args = ExpandDot(sfull,buffer, CROSS_LEN, false); - StripSpaces(args); - RealPt save_dta=dos.dta(); - dos.dta(dos.tables.tempdta); - DOS_DTA dta(dos.dta()); - adirs.clear(); - adirs.emplace_back(std::string(args)); - bool found=false; - inshell=true; - while (!adirs.empty()) { - ctrlbrk=false; - if (doAttrib(this, (char *)adirs.begin()->c_str(), dta, optS, adda, adds, addh, addr, suba, subs, subh, subr)) - found=true; - else if (ctrlbrk) - break; - adirs.erase(adirs.begin()); - } - if (!found&&!ctrlbrk) WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); - inshell=false; - ctrlbrk=false; - dos.dta(save_dta); - } - - void DOS_Shell::CMD_PROMPT(char *args){ - HELP("PROMPT"); - if(args && *args) { - args++; - SetEnv("PROMPT",args); - } else - SetEnv("PROMPT","$P$G"); - return; - } - - void DOS_Shell::CMD_PATH(char *args){ - HELP("PATH"); - if(args && *args){ - char pathstring[DOS_PATHLENGTH+CROSS_LEN+20]={ 0 }; - strcpy(pathstring,"set PATH="); - while(args && (*args=='='|| *args==' ')) - args++; - if (strlen(args) == 1 && *args == ';') - *args = 0; - if (args) { - std::string vstr = args; - bool zdirpath = static_cast(control->GetSection("dos"))->Get_bool("drive z expand path"); - if (zdirpath) GetExpandedPath(vstr); - strcat(pathstring,vstr.c_str()); - } - this->ParseLine(pathstring); - return; - } else { - std::string line; - if(GetEnvStr("PATH",line)) { - WriteOut("%s\n",line.c_str()); - } else { - WriteOut("PATH=(null)\n"); - } - } - } - - void DOS_Shell::CMD_VERIFY(char * args) { - HELP("VERIFY"); - args = trim(args); - if (!*args) - WriteOut("VERIFY is %s\n", dos.verify ? "on" : "off"); - else if (!strcasecmp(args, "OFF")) - dos.verify = false; - else if (!strcasecmp(args, "ON")) - dos.verify = true; - else - WriteOut("Must specify ON or OFF\n"); - } - - void dos_ver_menu(bool start); - bool set_ver(char *s); - void DOS_Shell::CMD_VER(char *args) { - HELP("VER"); - bool optR=ScanCMDBool(args,"R"); - if (char* rem = ScanCMDRemain(args)) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"), rem); - return; - } - if(!optR && args && *args) { - char* word = StripWord(args); - if(strcasecmp(word,"set")) { - if (*word=='=') word=trim(word+1); - if (isdigit(*word)) { - if (*args) { - WriteOut(MSG_Get("SHELL_INVALID_PARAMETER"), args); - return; - } - if (set_ver(word)) - dos_ver_menu(false); - else - WriteOut(MSG_Get("SHELL_CMD_VER_INVALID")); - return; - } - if (*word) { - WriteOut(MSG_Get("SHELL_INVALID_PARAMETER"), word); - return; - } - } - if (!*args) { - dos.version.major = 5; - dos.version.minor = 0; - } else if (!set_ver(args)) { - WriteOut(MSG_Get("SHELL_CMD_VER_INVALID")); - return; - } - dos_ver_menu(false); - } else { - WriteOut(MSG_Get("SHELL_CMD_VER_VER"),VERSION,SDL_STRING,dos.version.major,dos.version.minor); - if (optR) WriteOut("DOSBox-X Git commit %s, built on %s\nPlatform: %s %d-bit", GIT_COMMIT_HASH, UPDATED_STR, OS_PLATFORM_LONG, OS_BIT_INT); - } - } - - void DOS_Shell::CMD_VOL(char *args){ - HELP("VOL"); - uint8_t drive=DOS_GetDefaultDrive(); - if(args && *args){ - args++; - uint32_t argLen = (uint32_t)strlen(args); - switch (args[argLen-1]) { - case ':' : - if(!strcasecmp(args,":")) return; - int drive2; drive2= toupper(*reinterpret_cast(&args[0])); - char * c; c = strchr(args,':'); *c = '\0'; - if (Drives[drive2-'A']) drive = drive2 - 'A'; - else { - WriteOut(MSG_Get("SHELL_ILLEGAL_DRIVE")); - return; - } - break; - default: - WriteOut(MSG_Get("SHELL_SYNTAXERROR")); - return; - } - } - char const* bufin = Drives[drive]->GetLabel(); - if (tree) - WriteOut(MSG_Get("SHELL_CMD_VOL_TREE"),bufin); - else { - WriteOut(MSG_Get("SHELL_CMD_VOL_DRIVE"),drive+'A'); - - //if((drive+'A')=='Z') bufin="DOSBOX-X"; - if(strcasecmp(bufin,"")==0) - WriteOut(MSG_Get("SHELL_CMD_VOL_SERIAL_NOLABEL")); - else - WriteOut(MSG_Get("SHELL_CMD_VOL_SERIAL_LABEL"),bufin); - } - - WriteOut(tree?MSG_Get("SHELL_CMD_VOL_SERIAL")+1:MSG_Get("SHELL_CMD_VOL_SERIAL")); - unsigned long serial_number=0x1234; - if (!strncmp(Drives[drive]->GetInfo(),"fatDrive ",9)) { - fatDrive* fdp = dynamic_cast(Drives[drive]); - if (fdp != NULL) serial_number=fdp->GetSerial(); - } - #if defined (WIN32) - if (!strncmp(Drives[drive]->GetInfo(),"local ",6) || !strncmp(Drives[drive]->GetInfo(),"CDRom ",6)) { - localDrive* ldp = !strncmp(Drives[drive]->GetInfo(),"local ",6)?dynamic_cast(Drives[drive]):dynamic_cast(Drives[drive]); - if (ldp != NULL) serial_number=ldp->GetSerial(); - } + HELP("SUBST"); + try { + char mountstring[DOS_PATHLENGTH+CROSS_LEN+20]; + strcpy(mountstring,"MOUNT "); + StripSpaces(args); + std::string arg; + CommandLine command(nullptr, args); + if (!command.GetCount()) { + char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH]; + uint32_t size,hsize;uint16_t date;uint16_t time;uint8_t attr; + /* Command uses dta so set it to our internal dta */ + RealPt save_dta = dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + + WriteOut(MSG_Get("SHELL_CMD_SUBST_DRIVE_LIST")); + WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_FORMAT"),"Drive","Type","Label"); + int cols=IS_PC98_ARCH?80:real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS); + if (!cols) cols=80; + for(int p = 0;p < cols;p++) WriteOut("-"); + bool none=true; + for (int d = 0;d < DOS_DRIVES;d++) { + if (!Drives[d]||strncmp(Drives[d]->GetInfo(),"local ",6)) continue; + + char root[7] = {(char)('A'+d),':','\\','*','.','*',0}; + bool ret = DOS_FindFirst(root,DOS_ATTR_VOLUME); + if (ret) { + dta.GetResult(name,lname,size,hsize,date,time,attr); + DOS_FindNext(); //Mark entry as invalid + } else name[0] = 0; + + /* Change 8.3 to 11.0 */ + const char* dot = strchr(name, '.'); + if(dot && (dot - name == 8) ) { + name[8] = name[9];name[9] = name[10];name[10] = name[11];name[11] = 0; + } + + root[1] = 0; //This way, the format string can be reused. + WriteOut(MSG_Get("PROGRAM_MOUNT_STATUS_FORMAT"),root, Drives[d]->GetInfo(),name); + none=false; + } + if (none) WriteOut(MSG_Get("PROGRAM_IMGMOUNT_STATUS_NONE")); + dos.dta(save_dta); + return; + } + + if (command.GetCount() != 2) throw 0 ; + + command.FindCommand(1,arg); + if( (arg.size()>1) && arg[1] !=':') throw(0); + char temp_str[2] = { 0,0 }; + temp_str[0]=(char)toupper(args[0]); + command.FindCommand(2,arg); + if((arg=="/D") || (arg=="/d")) { + if(!Drives[temp_str[0]-'A'] ) throw 1; //targetdrive not in use + strcat(mountstring,"-u "); + strcat(mountstring,temp_str); + this->ParseLine(mountstring); + return; + } + if(Drives[temp_str[0]-'A'] ) throw 2; //targetdrive in use + strcat(mountstring,temp_str); + strcat(mountstring," "); + + uint8_t drive;char dir[DOS_PATHLENGTH+2],fulldir[DOS_PATHLENGTH]; + if (strchr(arg.c_str(),'\"')==NULL) + sprintf(dir,"\"%s\"",arg.c_str()); + else strcpy(dir,arg.c_str()); + if (!DOS_MakeName(dir,fulldir,&drive)) throw 3; + + localDrive * const ldp = dynamic_cast(Drives[drive]); + if (!ldp) throw 4; + char newname[CROSS_LEN]; + strcpy(newname, ldp->basedir); + strcat(newname,fulldir); + CROSS_FILENAME(newname); + ldp->dirCache.ExpandName(newname); + strcat(mountstring,"\""); + strcat(mountstring, newname); + strcat(mountstring,"\""); + this->ParseLine(mountstring); + } + catch(int a){ + switch (a) { + case 1: + WriteOut(MSG_Get("SHELL_CMD_SUBST_NO_REMOVE")); + break; + case 2: + WriteOut(MSG_Get("SHELL_CMD_SUBST_IN_USE")); + break; + case 3: + WriteOut(MSG_Get("SHELL_CMD_SUBST_INVALID_PATH")); + break; + case 4: + WriteOut(MSG_Get("SHELL_CMD_SUBST_NOT_LOCAL")); + break; + default: + WriteOut(MSG_Get("SHELL_CMD_SUBST_FAILURE")); + } + return; + } + catch(...) { //dynamic cast failed =>so no localdrive + WriteOut(MSG_Get("SHELL_CMD_SUBST_FAILURE")); + return; + } + + return; +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_LOADHIGH(char *args){ + HELP("LOADHIGH"); + uint16_t umb_start=dos_infoblock.GetStartOfUMBChain(); + uint8_t umb_flag=dos_infoblock.GetUMBChainState(); + uint8_t old_memstrat=(uint8_t)(DOS_GetMemAllocStrategy()&0xff); + if (umb_start==0x9fff) { + if ((umb_flag&1)==0) DOS_LinkUMBsToMemChain(1); + DOS_SetMemAllocStrategy(0x80); // search in UMBs first + this->ParseLine(args); + uint8_t current_umb_flag=dos_infoblock.GetUMBChainState(); + if ((current_umb_flag&1)!=(umb_flag&1)) DOS_LinkUMBsToMemChain(umb_flag); + DOS_SetMemAllocStrategy(old_memstrat); // restore strategy + } else this->ParseLine(args); +} +#endif + +bool get_param(char *&args, char *&rem, char *&temp, char &wait_char, int &wait_sec) +{ + const char *last = strchr(args, 0); + StripSpaces(args); + temp = ScanCMDRemain(args); + const bool optC = temp && tolower(temp[1]) == 'c'; + const bool optT = temp && tolower(temp[1]) == 't'; + if (temp && *temp && !optC && !optT) + return false; + if (temp) { + if (args == temp) + args = strchr(temp, 0) + 1; + temp += 2; + if (temp[0] == ':') + temp++; + } + if (optC) { + rem = temp; + } else if (optT) { + if (temp && *temp && *(temp + 1) == ',') { + wait_char = *temp; + wait_sec = atoi(temp + 2); + } else + wait_sec = 0; + } + if (args > last) + args = NULL; + if (args) args = trim(args); + return true; +} + +#if !defined(OSFREE) +void DOS_Shell::CMD_CHOICE(char * args){ + HELP("CHOICE"); + static char defchoice[3] = {MSG_Get("INT21_6523_YESNO_CHARS")[0],MSG_Get("INT21_6523_YESNO_CHARS")[1],0}; + //char *rem1 = NULL, *rem2 = NULL; /* unused */ + char *rem = NULL, *temp = NULL, waitchar = 0, *ptr; + int waitsec = 0; + //bool optC = false, optT = false; /* unused */ + bool optN = ScanCMDBool(args,"N"); + bool optS = ScanCMDBool(args,"S"); //Case-sensitive matching + // ignore /b and /m switches for compatibility + ScanCMDBool(args,"B"); + ScanCMDBool(args,"M"); // Text + ScanCMDBool(args,"T"); //Default Choice after timeout + + while (args && *trim(args) == '/') { + if (!get_param(args, rem, temp, waitchar, waitsec)) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"), temp); + return; + } + } + if (!rem || !*rem) rem = defchoice; /* No choices specified use (national) YN */ + ptr = rem; + uint8_t c; + if(!optS) while ((c = (uint8_t)(*ptr))) *ptr++ = (char)toupper(c); /* When in no case-sensitive mode. make everything upcase */ + if(args && *args ) { + StripSpaces(args); + size_t argslen = strlen(args); + if(argslen>1 && args[0] == '"' && args[argslen-1] =='"') { + args[argslen-1] = 0; //Remove quotes + args++; + } + WriteOut(args); + } + /* Show question prompt of the form [a,b]? where a b are the choice values */ + if (!optN) { + if(args && *args) WriteOut(" "); + WriteOut("["); + size_t len = strlen(rem); + for(size_t t = 1; t < len; t++) { + WriteOut("%c,",rem[t-1]); + } + WriteOut("%c]?",rem[len-1]); + } + + // TO-DO: Find out how real DOS handles /T option for making a choice after delay; use AUTOTYPE for now + std::vector sequence; + bool in_char = optS ? (strchr(rem, waitchar) != nullptr) : (strchr(rem, toupper(waitchar)) || strchr(rem, tolower(waitchar))); + if (waitchar && *rem && in_char && waitsec > 0) { + sequence.emplace_back(std::string(1, optS?waitchar:tolower(waitchar))); + MAPPER_AutoType(sequence, waitsec * 1000, 500, true); + } + uint16_t n=1; + do { + dotype = true; + DOS_ReadFile (STDIN,&c,&n); + dotype = false; + if (n==0) {dos.return_code=255;return;} + if (CheckBreak(this) || c==3) {dos.return_code=0;return;} + } while (!c || !(ptr = strchr(rem,(optS?c:toupper(c))))); + c = optS?c:(uint8_t)toupper(c); + DOS_WriteFile (STDOUT,&c, &n); + c = '\r'; DOS_WriteFile (STDOUT,&c, &n); + c = '\n'; DOS_WriteFile (STDOUT,&c, &n); + dos.return_code = (uint8_t)(ptr-rem+1); +} +#endif + +static bool doAttrib(DOS_Shell * shell, char * args, DOS_DTA dta, bool optS, bool adda, bool adds, bool addh, bool addr, bool suba, bool subs, bool subh, bool subr) { + char spath[DOS_PATHLENGTH],sargs[DOS_PATHLENGTH+4],path[DOS_PATHLENGTH+4],full[DOS_PATHLENGTH],sfull[DOS_PATHLENGTH+2]; + if (!DOS_Canonicalize(args,full)||strrchr_dbcs(full,'\\')==NULL) { + shell->WriteOut(MSG_Get("SHELL_ILLEGAL_PATH")); + if (!optS) ctrlbrk=true; + return false; + } + if (!DOS_GetSFNPath(args,spath,false)) { + shell->WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); + if (!optS) ctrlbrk=true; + return false; + } + if (!uselfn||!DOS_GetSFNPath(args,sfull,true)) strcpy(sfull,full); + sprintf(sargs,"\"%s\"",spath); + bool found=false, res=DOS_FindFirst(sargs,0xffff & ~DOS_ATTR_VOLUME); + if (!res&&!optS) return false; + //end can't be 0, but if it is we'll get a nice crash, who cares :) + strcpy(path,full); + *(strrchr_dbcs(path,'\\')+1)=0; + char * end=strrchr_dbcs(full,'\\')+1;*end=0; + char * lend=strrchr_dbcs(sfull,'\\')+1;*lend=0; + char name[DOS_NAMELENGTH_ASCII],lname[LFN_NAMELENGTH+1]; + uint32_t size,hsize;uint16_t time,date;uint8_t attr;uint16_t fattr; + while (res) { + if (CheckBreak(shell)) {ctrlbrk=true;return false;} + dta.GetResult(name,lname,size,hsize,date,time,attr); + if (!((!strcmp(name, ".") || !strcmp(name, "..") || strchr(sargs, '*')!=NULL || strchr(sargs, '?')!=NULL) && attr & DOS_ATTR_DIRECTORY)) { + found=true; + strcpy(end,name); + strcpy(lend,lname); + if (strlen(full)&&DOS_GetFileAttr(((uselfn||strchr(full, ' ')?(full[0]!='"'?"\"":""):"")+std::string(full)+(uselfn||strchr(full, ' ')?(full[strlen(full)-1]!='"'?"\"":""):"")).c_str(), &fattr)) { + bool attra=fattr&DOS_ATTR_ARCHIVE, attrs=fattr&DOS_ATTR_SYSTEM, attrh=fattr&DOS_ATTR_HIDDEN, attrr=fattr&DOS_ATTR_READ_ONLY; + if (adda||adds||addh||addr||suba||subs||subh||subr) { + if (adda) fattr|=DOS_ATTR_ARCHIVE; + if (adds) fattr|=DOS_ATTR_SYSTEM; + if (addh) fattr|=DOS_ATTR_HIDDEN; + if (addr) fattr|=DOS_ATTR_READ_ONLY; + if (suba) fattr&=~DOS_ATTR_ARCHIVE; + if (subs) fattr&=~DOS_ATTR_SYSTEM; + if (subh) fattr&=~DOS_ATTR_HIDDEN; + if (subr) fattr&=~DOS_ATTR_READ_ONLY; + if (DOS_SetFileAttr(((uselfn||strchr(full, ' ')?(full[0]!='"'?"\"":""):"")+std::string(full)+(uselfn||strchr(full, ' ')?(full[strlen(full)-1]!='"'?"\"":""):"")).c_str(), fattr)) { + if (DOS_GetFileAttr(((uselfn||strchr(full, ' ')?(full[0]!='"'?"\"":""):"")+std::string(full)+(uselfn||strchr(full, ' ')?(full[strlen(full)-1]!='"'?"\"":""):"")).c_str(), &fattr)) { + shell->WriteOut(" %c %c%c%c ", fattr&DOS_ATTR_ARCHIVE?'A':' ', fattr&DOS_ATTR_SYSTEM?'S':' ', fattr&DOS_ATTR_HIDDEN?'H':' ', fattr&DOS_ATTR_READ_ONLY?'R':' '); + shell->WriteOut_NoParsing(uselfn?sfull:full, true); + shell->WriteOut("\n"); + } + } else + shell->WriteOut(MSG_Get("SHELL_CMD_ATTRIB_SET_ERROR"),uselfn?sfull:full); + } else { + shell->WriteOut(" %c %c%c%c ", attra?'A':' ', attrs?'S':' ', attrh?'H':' ', attrr?'R':' '); + shell->WriteOut_NoParsing(uselfn?sfull:full, true); + shell->WriteOut("\n"); + } + } else + shell->WriteOut(MSG_Get("SHELL_CMD_ATTRIB_GET_ERROR"),uselfn?sfull:full); + } + res=DOS_FindNext(); + } + if (optS) { + size_t len=strlen(path); + strcat(path, "*.*"); + bool ret=DOS_FindFirst(path,0xffff & ~DOS_ATTR_VOLUME); + *(path+len)=0; + if (ret) { + std::vector cdirs; + cdirs.clear(); + do { /* File name and extension */ + DtaResult result; + dta.GetResult(result.name,result.lname,result.size,result.hsize,result.date,result.time,result.attr); + + if((result.attr&DOS_ATTR_DIRECTORY) && strcmp(result.name, ".")&&strcmp(result.name, "..")) { + strcat(path, result.name); + strcat(path, "\\"); + char *fname = strrchr_dbcs(args, '\\'); + if (fname!=NULL) fname++; + else { + fname = strrchr(args, ':'); + if (fname!=NULL) fname++; + else fname=args; + } + strcat(path, fname); + cdirs.push_back((path[0]!='"'&&path[strlen(path)-1]=='"'?"\"":"")+std::string(path)); + *(path+len)=0; + } + } while ( (ret=DOS_FindNext()) ); + adirs.insert(adirs.begin()+1, cdirs.begin(), cdirs.end()); + } + } + return found; +} + +#if !defined(OSFREE) +void DOS_Shell::CMD_ATTRIB(char *args){ + HELP("ATTRIB"); + StripSpaces(args); + + bool optS=ScanCMDBool(args,"S"); + char * rem=ScanCMDRemain(args); + if (rem) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),rem); + return; + } + + bool adda=false, adds=false, addh=false, addr=false, suba=false, subs=false, subh=false, subr=false; + char sfull[DOS_PATHLENGTH+2]; + char* arg1; + strcpy(sfull, "*.*"); + do { + arg1=StripArg(args); + if (!strcasecmp(arg1, "+A")) adda=true; + else if (!strcasecmp(arg1, "+S")) adds=true; + else if (!strcasecmp(arg1, "+H")) addh=true; + else if (!strcasecmp(arg1, "+R")) addr=true; + else if (!strcasecmp(arg1, "-A")) suba=true; + else if (!strcasecmp(arg1, "-S")) subs=true; + else if (!strcasecmp(arg1, "-H")) subh=true; + else if (!strcasecmp(arg1, "-R")) subr=true; + else if (*arg1) { + strcpy(sfull, arg1); + if (uselfn&&strchr(sfull, '*')) { + char * find_last; + find_last=strrchr_dbcs(sfull,'\\'); + if (find_last==NULL) find_last=sfull; + else find_last++; + if (sfull[strlen(sfull)-1]=='*'&&strchr(find_last, '.')==NULL) strcat(sfull, ".*"); + } + } + } while (*args); + + char buffer[CROSS_LEN]; + args = ExpandDot(sfull,buffer, CROSS_LEN, false); + StripSpaces(args); + RealPt save_dta=dos.dta(); + dos.dta(dos.tables.tempdta); + DOS_DTA dta(dos.dta()); + adirs.clear(); + adirs.emplace_back(std::string(args)); + bool found=false; + inshell=true; + while (!adirs.empty()) { + ctrlbrk=false; + if (doAttrib(this, (char *)adirs.begin()->c_str(), dta, optS, adda, adds, addh, addr, suba, subs, subh, subr)) + found=true; + else if (ctrlbrk) + break; + adirs.erase(adirs.begin()); + } + if (!found&&!ctrlbrk) WriteOut(MSG_Get("SHELL_CMD_FILE_NOT_FOUND"),args); + inshell=false; + ctrlbrk=false; + dos.dta(save_dta); +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_PROMPT(char *args){ + HELP("PROMPT"); + if(args && *args) { + args++; + SetEnv("PROMPT",args); + } else + SetEnv("PROMPT","$P$G"); + return; +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_PATH(char *args){ + HELP("PATH"); + if(args && *args){ + char pathstring[DOS_PATHLENGTH+CROSS_LEN+20]={ 0 }; + strcpy(pathstring,"set PATH="); + while(args && (*args=='='|| *args==' ')) + args++; + if (strlen(args) == 1 && *args == ';') + *args = 0; + if (args) { + std::string vstr = args; + bool zdirpath = static_cast(control->GetSection("dos"))->Get_bool("drive z expand path"); + if (zdirpath) GetExpandedPath(vstr); + strcat(pathstring,vstr.c_str()); + } + this->ParseLine(pathstring); + return; + } else { + std::string line; + if(GetEnvStr("PATH",line)) { + WriteOut("%s\n",line.c_str()); + } else { + WriteOut("PATH=(null)\n"); + } + } +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_VERIFY(char * args) { + HELP("VERIFY"); + args = trim(args); + if (!*args) + WriteOut("VERIFY is %s\n", dos.verify ? "on" : "off"); + else if (!strcasecmp(args, "OFF")) + dos.verify = false; + else if (!strcasecmp(args, "ON")) + dos.verify = true; + else + WriteOut("Must specify ON or OFF\n"); +} +#endif + +#if !defined(OSFREE) +void dos_ver_menu(bool start); +bool set_ver(char *s); +void DOS_Shell::CMD_VER(char *args) { + HELP("VER"); + bool optR=ScanCMDBool(args,"R"); + if (char* rem = ScanCMDRemain(args)) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"), rem); + return; + } + if(!optR && args && *args) { + char* word = StripWord(args); + if(strcasecmp(word,"set")) { + if (*word=='=') word=trim(word+1); + if (isdigit(*word)) { + if (*args) { + WriteOut(MSG_Get("SHELL_INVALID_PARAMETER"), args); + return; + } + if (set_ver(word)) + dos_ver_menu(false); + else + WriteOut(MSG_Get("SHELL_CMD_VER_INVALID")); + return; + } + if (*word) { + WriteOut(MSG_Get("SHELL_INVALID_PARAMETER"), word); + return; + } + } + if (!*args) { + dos.version.major = 5; + dos.version.minor = 0; + } else if (!set_ver(args)) { + WriteOut(MSG_Get("SHELL_CMD_VER_INVALID")); + return; + } + dos_ver_menu(false); + } else { + WriteOut(MSG_Get("SHELL_CMD_VER_VER"),VERSION,SDL_STRING,dos.version.major,dos.version.minor); + if (optR) WriteOut("DOSBox-X Git commit %s, built on %s\nPlatform: %s %d-bit", GIT_COMMIT_HASH, UPDATED_STR, OS_PLATFORM_LONG, OS_BIT_INT); + } +} +#endif + +// OSFREE NTS: Even though we remove the command from the shell, the DIR command needs this to exist +void DOS_Shell::CMD_VOL(char *args){ + HELP("VOL"); + uint8_t drive=DOS_GetDefaultDrive(); + if(args && *args){ + args++; + uint32_t argLen = (uint32_t)strlen(args); + switch (args[argLen-1]) { + case ':' : + if(!strcasecmp(args,":")) return; + int drive2; drive2= toupper(*reinterpret_cast(&args[0])); + char * c; c = strchr(args,':'); *c = '\0'; + if (Drives[drive2-'A']) drive = drive2 - 'A'; + else { + WriteOut(MSG_Get("SHELL_ILLEGAL_DRIVE")); + return; + } + break; + default: + WriteOut(MSG_Get("SHELL_SYNTAXERROR")); + return; + } + } + char const* bufin = Drives[drive]->GetLabel(); + if (tree) + WriteOut(MSG_Get("SHELL_CMD_VOL_TREE"),bufin); + else { + WriteOut(MSG_Get("SHELL_CMD_VOL_DRIVE"),drive+'A'); + + //if((drive+'A')=='Z') bufin="DOSBOX-X"; + if(strcasecmp(bufin,"")==0) + WriteOut(MSG_Get("SHELL_CMD_VOL_SERIAL_NOLABEL")); + else + WriteOut(MSG_Get("SHELL_CMD_VOL_SERIAL_LABEL"),bufin); + } + + WriteOut(tree?MSG_Get("SHELL_CMD_VOL_SERIAL")+1:MSG_Get("SHELL_CMD_VOL_SERIAL")); + unsigned long serial_number=0x1234; + if (!strncmp(Drives[drive]->GetInfo(),"fatDrive ",9)) { +#if !defined(OSFREE) + fatDrive* fdp = dynamic_cast(Drives[drive]); + if (fdp != NULL) serial_number=fdp->GetSerial(); +#endif + } +#if defined (WIN32) + if (!strncmp(Drives[drive]->GetInfo(),"local ",6) || !strncmp(Drives[drive]->GetInfo(),"CDRom ",6)) { +# if !defined(OSFREE) + localDrive* ldp = !strncmp(Drives[drive]->GetInfo(),"local ",6)?dynamic_cast(Drives[drive]):dynamic_cast(Drives[drive]); + if (ldp != NULL) serial_number=ldp->GetSerial(); +# endif + } +#endif + WriteOut("%04X-%04X\n", serial_number/0x10000, serial_number%0x10000); + return; +} + +#if !defined(OSFREE) +void DOS_Shell::CMD_TRUENAME(char * args) { + HELP("TRUENAME"); + bool optH=ScanCMDBool(args,"H"); + args = trim(args); + if (!*args) { + WriteOut("No file name given.\n"); + return; + } + if (char* rem = ScanCMDRemain(args)) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"), rem); + return; + } + char *name = StripArg(args), fullname[DOS_PATHLENGTH]; + uint8_t drive; + if (DOS_MakeName(name, fullname, &drive)) { + if (optH) { + if (!strncmp(Drives[drive]->GetInfo(),"local ",6) || !strncmp(Drives[drive]->GetInfo(),"CDRom ",6)) { + localDrive *ldp = dynamic_cast(Drives[drive]); + Overlay_Drive *odp = dynamic_cast(Drives[drive]); + std::string hostname = ""; + if (odp) hostname = odp->GetHostName(fullname); + else if (ldp) hostname = ldp->GetHostName(fullname); + if (hostname.size()) { + WriteOut_NoParsing(hostname.c_str(), true); + WriteOut("\n"); + } + } + } else +#if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) + #if !defined(OSFREE) + if (Network_IsNetworkResource(fullname)) { + WriteOut_NoParsing(name, true); + WriteOut("\r\n"); + } else #endif - WriteOut("%04X-%04X\n", serial_number/0x10000, serial_number%0x10000); - return; +#endif + { + WriteOut("%c:\\", drive+'A'); + WriteOut_NoParsing(fullname, true); + WriteOut("\r\n"); + } + } + else + WriteOut(dos.errorcode==DOSERR_PATH_NOT_FOUND?"Path not found\n":"File not found\n"); +} +#endif + +void SetVal(const std::string& secname, const std::string& preval, const std::string& val); +static void delayed_press(Bitu key) { KEYBOARD_AddKey((KBD_KEYS)key,true); } +static void delayed_release(Bitu key) { KEYBOARD_AddKey((KBD_KEYS)key,false); } +static void delayed_sdlpress(Bitu core) { + if(core==1) SetVal("cpu","core","normal"); + else if(core==2) SetVal("cpu","core","simple"); + else if(core==3) SetVal("cpu","core","dynamic"); + else if(core==4) SetVal("cpu","core","full"); +} +// ADDKEY patch was created by Moe +void DOS_Shell::CMD_ADDKEY(char * args){ + //HELP("ADDKEY"); + StripSpaces(args); + if (!*args) { + WriteOut(MSG_Get("SHELL_SYNTAXERROR")); + return; + } + pic_tickindex_t delay = 0; + int duration = 0, core = 0; + + while (*args) { + char *word=StripWord(args); + KBD_KEYS scankey = (KBD_KEYS)0; + char *tail; + bool alt = false, ctrl = false, shift = false; + while (word[1] == '-') { + switch (word[0]) { + case 'c': + ctrl = true; + word += 2; + break; + case 's': + shift = true; + word += 2; + break; + case 'a': + alt = true; + word += 2; + break; + default: + WriteOut(MSG_Get("SHELL_SYNTAXERROR")); + return; + } + } + if (!strcasecmp(word,"enter")) { + word[0] = (char)10; + word[1] = (char)0; + } else if (!strcasecmp(word,"space")) { + word[0] = (char)32; + word[1] = (char)0; + } else if (!strcasecmp(word,"bs")) { + word[0] = (char)8; + word[1] = (char)0; + } else if (!strcasecmp(word,"tab")) { + word[0] = (char)9; + word[1] = (char)0; + } else if (!strcasecmp(word,"escape")) { + word[0] = (char)27; + word[1] = (char)0; + } else if (!strcasecmp(word,"up")) { + word[0] = (char)141; + word[1] = (char)0; + } else if (!strcasecmp(word,"down")) { + word[0] = (char)142; + word[1] = (char)0; + } else if (!strcasecmp(word,"left")) { + word[0] = (char)143; + word[1] = (char)0; + } else if (!strcasecmp(word,"right")) { + word[0] = (char)144; + word[1] = (char)0; + } else if (!strcasecmp(word,"ins")) { + word[0] = (char)145; + word[1] = (char)0; + } else if (!strcasecmp(word,"del")) { + word[0] = (char)146; + word[1] = (char)0; + } else if (!strcasecmp(word,"home")) { + word[0] = (char)147; + word[1] = (char)0; + } else if (!strcasecmp(word,"end")) { + word[0] = (char)148; + word[1] = (char)0; + } else if (!strcasecmp(word,"pgup")) { + word[0] = (char)149; + word[1] = (char)0; + } else if (!strcasecmp(word,"pgdown")) { + word[0] = (char)150; + word[1] = (char)0; + } else if (!strcasecmp(word,"normal")) { + core = 1; + } else if (!strcasecmp(word,"simple")) { + core = 2; + } else if (!strcasecmp(word,"dynamic")) { + core = 3; + } else if (!strcasecmp(word,"full")) { + core = 4; + } else if (word[0] == 'k' && word[1] == 'p' && word[2] && !word[3]) { + word[0] = 151+word[2]-'0'; + word[1] = 0; + } else if (word[0] == 'f' && word[1]) { + word[0] = 128+word[1]-'0'; + if (word[1] == '1' && word[2]) word[0] = 128+word[2]-'0'+10; + word[1] = 0; + } + if (!word[1]) { + const int shiftflag = 0x1000000; + const int map[256] = { + 0,0,0,0,0,0,0,0, + KBD_backspace, + KBD_tab, + KBD_enter, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + KBD_esc, + 0,0,0,0, + KBD_space, KBD_1|shiftflag, KBD_quote|shiftflag, KBD_3|shiftflag, KBD_4|shiftflag, KBD_5|shiftflag, KBD_7|shiftflag, KBD_quote, + KBD_9|shiftflag, KBD_0|shiftflag, KBD_8|shiftflag, KBD_equals|shiftflag, KBD_comma, KBD_minus, KBD_period, KBD_slash, + KBD_0, KBD_1, KBD_2, KBD_3, KBD_4, KBD_5, KBD_6, KBD_7, + KBD_8, KBD_9, KBD_semicolon|shiftflag, KBD_semicolon, KBD_comma|shiftflag, KBD_equals, KBD_period|shiftflag, KBD_slash|shiftflag, + KBD_2|shiftflag, KBD_a|shiftflag, KBD_b|shiftflag, KBD_c|shiftflag, KBD_d|shiftflag, KBD_e|shiftflag, KBD_f|shiftflag, KBD_g|shiftflag, + KBD_h|shiftflag, KBD_i|shiftflag, KBD_j|shiftflag, KBD_k|shiftflag, KBD_l|shiftflag, KBD_m|shiftflag, KBD_n|shiftflag, KBD_o|shiftflag, + KBD_p|shiftflag, KBD_q|shiftflag, KBD_r|shiftflag, KBD_s|shiftflag, KBD_t|shiftflag, KBD_u|shiftflag, KBD_v|shiftflag, KBD_w|shiftflag, + KBD_x|shiftflag, KBD_y|shiftflag, KBD_z|shiftflag, KBD_leftbracket, KBD_backslash, KBD_rightbracket, KBD_6|shiftflag, KBD_minus|shiftflag, + KBD_grave, KBD_a, KBD_b, KBD_c, KBD_d, KBD_e, KBD_f, KBD_g, + KBD_h, KBD_i, KBD_j, KBD_k, KBD_l, KBD_m, KBD_n, KBD_o, + KBD_p, KBD_q, KBD_r, KBD_s, KBD_t, KBD_u, KBD_v, KBD_w, + KBD_x, KBD_y, KBD_z, KBD_leftbracket|shiftflag, KBD_backslash|shiftflag, KBD_rightbracket|shiftflag, KBD_grave|shiftflag, 0, + 0, KBD_f1, KBD_f2, KBD_f3, KBD_f4, KBD_f5, KBD_f6, KBD_f7, KBD_f8, KBD_f9, KBD_f10, KBD_f11, KBD_f12, + KBD_up, KBD_down, KBD_left, KBD_right, KBD_insert, KBD_delete, KBD_home, KBD_end, KBD_pageup, KBD_pagedown, + KBD_kp0, KBD_kp1, KBD_kp2, KBD_kp3, KBD_kp4, KBD_kp5, KBD_kp6, KBD_kp7, KBD_kp8, KBD_kp9, + }; + scankey = (KBD_KEYS)(map[(unsigned char)word[0]] & ~shiftflag); + if (map[(unsigned char)word[0]] & shiftflag) shift = true; + if (!scankey && core == 0) { + WriteOut(MSG_Get("SHELL_SYNTAXERROR"),word); + return; + } + if (core == 0) word[0] = 0; + } + if (word[0] == 'p') { + delay += strtol(word+1,&tail,0); + if (tail && *tail) { + WriteOut(MSG_Get("SHELL_SYNTAXERROR"),word); + return; + } + } else if (word[0] == 'l') { + duration = strtol(word+1,&tail,0); + if (tail && *tail) { + WriteOut(MSG_Get("SHELL_SYNTAXERROR"),word); + return; + } + } else if (!word[0] || ((scankey = (KBD_KEYS)strtol(word,NULL,0)) > KBD_NONE && scankey < KBD_LAST)) { + if (shift) { + if (delay == 0) KEYBOARD_AddKey(KBD_leftshift,true); + else PIC_AddEvent(&delayed_press,delay++,KBD_leftshift); + } + if (ctrl) { + if (delay == 0) KEYBOARD_AddKey(KBD_leftctrl,true); + else PIC_AddEvent(&delayed_press,delay++,KBD_leftctrl); + } + if (alt) { + if (delay == 0) KEYBOARD_AddKey(KBD_leftalt,true); + else PIC_AddEvent(&delayed_press,delay++,KBD_leftalt); + } + if (delay == 0) KEYBOARD_AddKey(scankey,true); + else PIC_AddEvent(&delayed_press,delay++,scankey); + + if (delay+duration == 0) KEYBOARD_AddKey(scankey,false); + else PIC_AddEvent(&delayed_release,delay+++duration,scankey); + if (alt) { + if (delay+duration == 0) KEYBOARD_AddKey(KBD_leftalt,false); + else PIC_AddEvent(&delayed_release,delay+++duration,KBD_leftalt); + } + if (ctrl) { + if (delay+duration == 0) KEYBOARD_AddKey(KBD_leftctrl,false); + else PIC_AddEvent(&delayed_release,delay+++duration,KBD_leftctrl); + } + if (shift) { + if (delay+duration == 0) KEYBOARD_AddKey(KBD_leftshift,false); + else PIC_AddEvent(&delayed_release,delay+++duration,KBD_leftshift); + } + } else if (core != 0) { + if (core == 1) { + if (delay == 0) SetVal("cpu","core","normal"); + else PIC_AddEvent(&delayed_sdlpress,delay++,1); + } else if (core == 2) { + if (delay == 0) SetVal("cpu","core","simple"); + else PIC_AddEvent(&delayed_sdlpress,delay++,2); + } else if (core == 3) { + if (delay == 0) SetVal("cpu","core","dynamic"); + else PIC_AddEvent(&delayed_sdlpress,delay++,3); + } else if (core == 4) { + if (delay == 0) SetVal("cpu","core","full"); + else PIC_AddEvent(&delayed_sdlpress,delay++,4); + } + } else { + WriteOut(MSG_Get("SHELL_SYNTAXERROR"),word); + return; + } + } } - - void DOS_Shell::CMD_TRUENAME(char * args) { - HELP("TRUENAME"); - bool optH=ScanCMDBool(args,"H"); - args = trim(args); - if (!*args) { - WriteOut("No file name given.\n"); - return; - } - if (char* rem = ScanCMDRemain(args)) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"), rem); - return; - } - char *name = StripArg(args), fullname[DOS_PATHLENGTH]; - uint8_t drive; - if (DOS_MakeName(name, fullname, &drive)) { - if (optH) { - if (!strncmp(Drives[drive]->GetInfo(),"local ",6) || !strncmp(Drives[drive]->GetInfo(),"CDRom ",6)) { - localDrive *ldp = dynamic_cast(Drives[drive]); - Overlay_Drive *odp = dynamic_cast(Drives[drive]); - std::string hostname = ""; - if (odp) hostname = odp->GetHostName(fullname); - else if (ldp) hostname = ldp->GetHostName(fullname); - if (hostname.size()) { - WriteOut_NoParsing(hostname.c_str(), true); - WriteOut("\n"); + +#if !defined(OSFREE) +# if C_DEBUG +extern bool tohide; +bool debugger_break_on_exec = false; +void DEBUG_Enable_Handler(bool pressed); +void DOS_Shell::CMD_DEBUGBOX(char * args) { + while (*args == ' ') args++; + std::string argv=std::string(args); + args=StripArg(args); + HELP("DEBUGBOX"); + /* TODO: The command as originally taken from DOSBox SVN supported a /NOMOUSE option to remove the INT 33h vector */ + if (!*args) { + tohide=false; + DEBUG_Enable_Handler(true); + tohide=true; + return; + } else if (!strcmp(args,"-?")) { + args[0]='/'; + HELP("DEBUGBOX"); + return; + } + debugger_break_on_exec = true; + DoCommand((char *)argv.c_str()); + debugger_break_on_exec = false; +} +# endif +#endif + +char *str_replace(const char *orig, const char *rep, const char *with) { + char *result, *ins, *tmp; + size_t len_rep, len_with, len_front; + int count; + + if (!orig || !rep) return NULL; + + char* mutable_orig = strdup(orig); // Make a mutable copy of orig + char* original_mutable_orig = mutable_orig; // Store the original address for freeing below + + len_rep = strlen(rep); + if (len_rep == 0) return NULL; + len_with = with?strlen(with):0; + + ins = mutable_orig; + for (count = 0; (tmp = strstr(ins, rep)) != NULL; ++count) + ins = tmp + len_rep; + + tmp = result = (char *)malloc(strlen(mutable_orig) + (len_with - len_rep) * count + 1); + if (!result) return NULL; + + while (count--) { + ins = strstr(mutable_orig, rep); + len_front = ins - mutable_orig; + tmp = strncpy(tmp, mutable_orig, len_front) + len_front; + tmp = strcpy(tmp, with?with:"") + len_with; + mutable_orig += len_front + len_rep; + } + strcpy(tmp, mutable_orig); + free(original_mutable_orig); + return result; +} + +void DOS_Shell::CMD_FOR(char *args) { + HELP("FOR"); + args = ltrim(args); + if (strlen(args)<12){SyntaxError();return;} + char s[3]; + strcpy(s,"%%"); + if (*args=='%' && (isalpha(args[1]) || isdigit(args[1]) || strchr("_-/*.;#$",args[1])) && isspace(args[2])) + s[1]=*(args+1); + else{SyntaxError();return;} + args = ltrim(args+3); + if (strncasecmp(args, "IN", 2) || !isspace(args[2])){SyntaxError();return;} + args = ltrim(args+3); + if (*args=='(') + args = ltrim(args+1); + else{SyntaxError();return;} + char *p=strchr(args, ')'); + if (p==NULL||!isspace(*(p+1))){SyntaxError();return;} + *p=0; + char flist[260], *fp=flist; + if (strlen(ltrim(args))<260) + strcpy(flist, ltrim(args)); + else + { + strncpy(flist, args, 259); + flist[259]=0; + } + *p=')'; + args=ltrim(p+2); + if (strncasecmp(args, "DO", 2) || !isspace(args[2])){SyntaxError();return;} + args = ltrim(args+3); + bool lfn=uselfn&&lfnfor; + while (*fp) { + p=fp; + int q=0; + while (*p&&(q/2*2!=q||(*p!=' '&&*p!=','&&*p!=';'))) + { + if (*p=='"') + q++; + p++; + } + bool last=!!strlen(p); + if (last) *p=0; + if (strchr(fp, '?') || strchr(fp, '*')) { + char name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH], spath[DOS_PATHLENGTH], path[DOS_PATHLENGTH], pattern[DOS_PATHLENGTH], full[DOS_PATHLENGTH], *r; + if (!DOS_Canonicalize(fp,full)) return; + r=strrchr_dbcs(full, '\\'); + if (r!=NULL) { + *r=0; + strcpy(path, full); + strcat(path, "\\"); + strcpy(pattern, r+1); + *r='\\'; + } else { + strcpy(path, ""); + strcpy(pattern, full); + } + strcpy(spath, path); + if (strchr(fp,'\"')||uselfn) { + if (!DOS_GetSFNPath(("\""+std::string(path)+"\\").c_str(), spath, false)) strcpy(spath, path); + if (!strlen(spath)||spath[strlen(spath)-1]!='\\') strcat(spath, "\\"); + int k=0; + for (int i=0;i<(int)strlen(path);i++) + if (path[i]!='\"') + path[k++]=path[i]; + path[k]=0; + } + uint32_t size, hsize; + uint16_t date, time; + uint8_t attr; + DOS_DTA dta(dos.dta()); + std::vector sources; + std::string tmp; + int fbak=lfn_filefind_handle; + lfn_filefind_handle=lfn?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; + if (DOS_FindFirst((std::string(spath)+std::string(pattern)).c_str(), ~(DOS_ATTR_VOLUME|DOS_ATTR_DIRECTORY|DOS_ATTR_DEVICE|DOS_ATTR_HIDDEN|DOS_ATTR_SYSTEM))) + { + dta.GetResult(name, lname, size, hsize, date, time, attr); + tmp=std::string(path)+std::string(lfn?lname:name); + sources.push_back(tmp); + while (DOS_FindNext()) + { + dta.GetResult(name, lname, size, hsize, date, time, attr); + tmp=std::string(path)+std::string(lfn?lname:name); + sources.push_back(tmp); + } + } + lfn_filefind_handle=fbak; + for (std::vector::iterator source = sources.begin(); source != sources.end(); ++source) + DoCommand(str_replace(args, s, source->c_str())); + } else + DoCommand(str_replace(args, s, fp)); + if (last) *p=' '; + fp=ltrim(p); + } +} + +#if !defined(OSFREE) +void DOS_Shell::CMD_LFNFOR(char * args) { + HELP("LFNFOR"); + args = trim(args); + if (!*args) + WriteOut("LFNFOR is %s\n", lfnfor ? "on" : "off"); + else if (!strcasecmp(args, "OFF")) + lfnfor = false; + else if (!strcasecmp(args, "ON")) + lfnfor = true; + else + WriteOut("Must specify ON or OFF\n"); +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_ALIAS(char* args) { + HELP("ALIAS"); + args = trim(args); + if (!*args || strchr(args, '=') == NULL) { + for (cmd_alias_map_t::iterator iter = cmd_alias.begin(), end = cmd_alias.end(); iter != end; ++iter) { + if (!*args || !strcasecmp(args, iter->first.c_str())) + WriteOut("ALIAS %s='%s'\n", iter->first.c_str(), iter->second.c_str()); + } + } else { + char alias_name[256] = { 0 }; + for (unsigned int offset = 0; *args && offset < sizeof(alias_name)-1; ++offset, ++args) { + if (*args == '=') { + char * const cmd = trim(alias_name); + ++args; + args = trim(args); + size_t args_len = strlen(args); + if ((*args == '"' && args[args_len - 1] == '"') || (*args == '\'' && args[args_len - 1] == '\'')) { + args[args_len - 1] = 0; + ++args; + } + if (!*args) { + cmd_alias.erase(cmd); + } else { + cmd_alias[cmd] = args; + cmd_alias_map_t::iterator iter = cmd_alias.find(cmd); + if (iter != cmd_alias.end()) WriteOut("ALIAS %s='%s'\n", iter->first.c_str(), iter->second.c_str()); } + break; + } else { + alias_name[offset] = *args; } - } else - #if defined(WIN32) && !(defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)) - if (Network_IsNetworkResource(fullname)) { - WriteOut_NoParsing(name, true); - WriteOut("\r\n"); - } else - #endif - { - WriteOut("%c:\\", drive+'A'); - WriteOut_NoParsing(fullname, true); - WriteOut("\r\n"); - } - } - else - WriteOut(dos.errorcode==DOSERR_PATH_NOT_FOUND?"Path not found\n":"File not found\n"); - } - - void SetVal(const std::string& secname, const std::string& preval, const std::string& val); - static void delayed_press(Bitu key) { KEYBOARD_AddKey((KBD_KEYS)key,true); } - static void delayed_release(Bitu key) { KEYBOARD_AddKey((KBD_KEYS)key,false); } - static void delayed_sdlpress(Bitu core) { - if(core==1) SetVal("cpu","core","normal"); - else if(core==2) SetVal("cpu","core","simple"); - else if(core==3) SetVal("cpu","core","dynamic"); - else if(core==4) SetVal("cpu","core","full"); - } - // ADDKEY patch was created by Moe - void DOS_Shell::CMD_ADDKEY(char * args){ - //HELP("ADDKEY"); - StripSpaces(args); - if (!*args) { - WriteOut(MSG_Get("SHELL_SYNTAXERROR")); - return; - } - pic_tickindex_t delay = 0; - int duration = 0, core = 0; - - while (*args) { - char *word=StripWord(args); - KBD_KEYS scankey = (KBD_KEYS)0; - char *tail; - bool alt = false, ctrl = false, shift = false; - while (word[1] == '-') { - switch (word[0]) { - case 'c': - ctrl = true; - word += 2; - break; - case 's': - shift = true; - word += 2; - break; - case 'a': - alt = true; - word += 2; - break; - default: - WriteOut(MSG_Get("SHELL_SYNTAXERROR")); - return; - } - } - if (!strcasecmp(word,"enter")) { - word[0] = (char)10; - word[1] = (char)0; - } else if (!strcasecmp(word,"space")) { - word[0] = (char)32; - word[1] = (char)0; - } else if (!strcasecmp(word,"bs")) { - word[0] = (char)8; - word[1] = (char)0; - } else if (!strcasecmp(word,"tab")) { - word[0] = (char)9; - word[1] = (char)0; - } else if (!strcasecmp(word,"escape")) { - word[0] = (char)27; - word[1] = (char)0; - } else if (!strcasecmp(word,"up")) { - word[0] = (char)141; - word[1] = (char)0; - } else if (!strcasecmp(word,"down")) { - word[0] = (char)142; - word[1] = (char)0; - } else if (!strcasecmp(word,"left")) { - word[0] = (char)143; - word[1] = (char)0; - } else if (!strcasecmp(word,"right")) { - word[0] = (char)144; - word[1] = (char)0; - } else if (!strcasecmp(word,"ins")) { - word[0] = (char)145; - word[1] = (char)0; - } else if (!strcasecmp(word,"del")) { - word[0] = (char)146; - word[1] = (char)0; - } else if (!strcasecmp(word,"home")) { - word[0] = (char)147; - word[1] = (char)0; - } else if (!strcasecmp(word,"end")) { - word[0] = (char)148; - word[1] = (char)0; - } else if (!strcasecmp(word,"pgup")) { - word[0] = (char)149; - word[1] = (char)0; - } else if (!strcasecmp(word,"pgdown")) { - word[0] = (char)150; - word[1] = (char)0; - } else if (!strcasecmp(word,"normal")) { - core = 1; - } else if (!strcasecmp(word,"simple")) { - core = 2; - } else if (!strcasecmp(word,"dynamic")) { - core = 3; - } else if (!strcasecmp(word,"full")) { - core = 4; - } else if (word[0] == 'k' && word[1] == 'p' && word[2] && !word[3]) { - word[0] = 151+word[2]-'0'; - word[1] = 0; - } else if (word[0] == 'f' && word[1]) { - word[0] = 128+word[1]-'0'; - if (word[1] == '1' && word[2]) word[0] = 128+word[2]-'0'+10; - word[1] = 0; - } - if (!word[1]) { - const int shiftflag = 0x1000000; - const int map[256] = { - 0,0,0,0,0,0,0,0, - KBD_backspace, - KBD_tab, - KBD_enter, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - KBD_esc, - 0,0,0,0, - KBD_space, KBD_1|shiftflag, KBD_quote|shiftflag, KBD_3|shiftflag, KBD_4|shiftflag, KBD_5|shiftflag, KBD_7|shiftflag, KBD_quote, - KBD_9|shiftflag, KBD_0|shiftflag, KBD_8|shiftflag, KBD_equals|shiftflag, KBD_comma, KBD_minus, KBD_period, KBD_slash, - KBD_0, KBD_1, KBD_2, KBD_3, KBD_4, KBD_5, KBD_6, KBD_7, - KBD_8, KBD_9, KBD_semicolon|shiftflag, KBD_semicolon, KBD_comma|shiftflag, KBD_equals, KBD_period|shiftflag, KBD_slash|shiftflag, - KBD_2|shiftflag, KBD_a|shiftflag, KBD_b|shiftflag, KBD_c|shiftflag, KBD_d|shiftflag, KBD_e|shiftflag, KBD_f|shiftflag, KBD_g|shiftflag, - KBD_h|shiftflag, KBD_i|shiftflag, KBD_j|shiftflag, KBD_k|shiftflag, KBD_l|shiftflag, KBD_m|shiftflag, KBD_n|shiftflag, KBD_o|shiftflag, - KBD_p|shiftflag, KBD_q|shiftflag, KBD_r|shiftflag, KBD_s|shiftflag, KBD_t|shiftflag, KBD_u|shiftflag, KBD_v|shiftflag, KBD_w|shiftflag, - KBD_x|shiftflag, KBD_y|shiftflag, KBD_z|shiftflag, KBD_leftbracket, KBD_backslash, KBD_rightbracket, KBD_6|shiftflag, KBD_minus|shiftflag, - KBD_grave, KBD_a, KBD_b, KBD_c, KBD_d, KBD_e, KBD_f, KBD_g, - KBD_h, KBD_i, KBD_j, KBD_k, KBD_l, KBD_m, KBD_n, KBD_o, - KBD_p, KBD_q, KBD_r, KBD_s, KBD_t, KBD_u, KBD_v, KBD_w, - KBD_x, KBD_y, KBD_z, KBD_leftbracket|shiftflag, KBD_backslash|shiftflag, KBD_rightbracket|shiftflag, KBD_grave|shiftflag, 0, - 0, KBD_f1, KBD_f2, KBD_f3, KBD_f4, KBD_f5, KBD_f6, KBD_f7, KBD_f8, KBD_f9, KBD_f10, KBD_f11, KBD_f12, - KBD_up, KBD_down, KBD_left, KBD_right, KBD_insert, KBD_delete, KBD_home, KBD_end, KBD_pageup, KBD_pagedown, - KBD_kp0, KBD_kp1, KBD_kp2, KBD_kp3, KBD_kp4, KBD_kp5, KBD_kp6, KBD_kp7, KBD_kp8, KBD_kp9, - }; - scankey = (KBD_KEYS)(map[(unsigned char)word[0]] & ~shiftflag); - if (map[(unsigned char)word[0]] & shiftflag) shift = true; - if (!scankey && core == 0) { - WriteOut(MSG_Get("SHELL_SYNTAXERROR"),word); - return; - } - if (core == 0) word[0] = 0; - } - if (word[0] == 'p') { - delay += strtol(word+1,&tail,0); - if (tail && *tail) { - WriteOut(MSG_Get("SHELL_SYNTAXERROR"),word); - return; - } - } else if (word[0] == 'l') { - duration = strtol(word+1,&tail,0); - if (tail && *tail) { - WriteOut(MSG_Get("SHELL_SYNTAXERROR"),word); - return; - } - } else if (!word[0] || ((scankey = (KBD_KEYS)strtol(word,NULL,0)) > KBD_NONE && scankey < KBD_LAST)) { - if (shift) { - if (delay == 0) KEYBOARD_AddKey(KBD_leftshift,true); - else PIC_AddEvent(&delayed_press,delay++,KBD_leftshift); - } - if (ctrl) { - if (delay == 0) KEYBOARD_AddKey(KBD_leftctrl,true); - else PIC_AddEvent(&delayed_press,delay++,KBD_leftctrl); - } - if (alt) { - if (delay == 0) KEYBOARD_AddKey(KBD_leftalt,true); - else PIC_AddEvent(&delayed_press,delay++,KBD_leftalt); - } - if (delay == 0) KEYBOARD_AddKey(scankey,true); - else PIC_AddEvent(&delayed_press,delay++,scankey); - - if (delay+duration == 0) KEYBOARD_AddKey(scankey,false); - else PIC_AddEvent(&delayed_release,delay+++duration,scankey); - if (alt) { - if (delay+duration == 0) KEYBOARD_AddKey(KBD_leftalt,false); - else PIC_AddEvent(&delayed_release,delay+++duration,KBD_leftalt); - } - if (ctrl) { - if (delay+duration == 0) KEYBOARD_AddKey(KBD_leftctrl,false); - else PIC_AddEvent(&delayed_release,delay+++duration,KBD_leftctrl); - } - if (shift) { - if (delay+duration == 0) KEYBOARD_AddKey(KBD_leftshift,false); - else PIC_AddEvent(&delayed_release,delay+++duration,KBD_leftshift); - } - } else if (core != 0) { - if (core == 1) { - if (delay == 0) SetVal("cpu","core","normal"); - else PIC_AddEvent(&delayed_sdlpress,delay++,1); - } else if (core == 2) { - if (delay == 0) SetVal("cpu","core","simple"); - else PIC_AddEvent(&delayed_sdlpress,delay++,2); - } else if (core == 3) { - if (delay == 0) SetVal("cpu","core","dynamic"); - else PIC_AddEvent(&delayed_sdlpress,delay++,3); - } else if (core == 4) { - if (delay == 0) SetVal("cpu","core","full"); - else PIC_AddEvent(&delayed_sdlpress,delay++,4); - } - } else { - WriteOut(MSG_Get("SHELL_SYNTAXERROR"),word); - return; - } - } - } - - #if C_DEBUG - extern bool tohide; - bool debugger_break_on_exec = false; - void DEBUG_Enable_Handler(bool pressed); - void DOS_Shell::CMD_DEBUGBOX(char * args) { - while (*args == ' ') args++; - std::string argv=std::string(args); - args=StripArg(args); - HELP("DEBUGBOX"); - /* TODO: The command as originally taken from DOSBox SVN supported a /NOMOUSE option to remove the INT 33h vector */ - if (!*args) { - tohide=false; - DEBUG_Enable_Handler(true); - tohide=true; - return; - } else if (!strcmp(args,"-?")) { - args[0]='/'; - HELP("DEBUGBOX"); - return; - } - debugger_break_on_exec = true; - DoCommand((char *)argv.c_str()); - debugger_break_on_exec = false; - } - #endif - - char *str_replace(const char *orig, const char *rep, const char *with) { - char *result, *ins, *tmp; - size_t len_rep, len_with, len_front; - int count; - - if (!orig || !rep) return NULL; - - char* mutable_orig = strdup(orig); // Make a mutable copy of orig - char* original_mutable_orig = mutable_orig; // Store the original address for freeing below - - len_rep = strlen(rep); - if (len_rep == 0) return NULL; - len_with = with?strlen(with):0; - - ins = mutable_orig; - for (count = 0; (tmp = strstr(ins, rep)) != NULL; ++count) - ins = tmp + len_rep; - - tmp = result = (char *)malloc(strlen(mutable_orig) + (len_with - len_rep) * count + 1); - if (!result) return NULL; - - while (count--) { - ins = strstr(mutable_orig, rep); - len_front = ins - mutable_orig; - tmp = strncpy(tmp, mutable_orig, len_front) + len_front; - tmp = strcpy(tmp, with?with:"") + len_with; - mutable_orig += len_front + len_rep; - } - strcpy(tmp, mutable_orig); - free(original_mutable_orig); - return result; - } - - void DOS_Shell::CMD_FOR(char *args) { - HELP("FOR"); - args = ltrim(args); - if (strlen(args)<12){SyntaxError();return;} - char s[3]; - strcpy(s,"%%"); - if (*args=='%' && (isalpha(args[1]) || isdigit(args[1]) || strchr("_-/*.;#$",args[1])) && isspace(args[2])) - s[1]=*(args+1); - else{SyntaxError();return;} - args = ltrim(args+3); - if (strncasecmp(args, "IN", 2) || !isspace(args[2])){SyntaxError();return;} - args = ltrim(args+3); - if (*args=='(') - args = ltrim(args+1); - else{SyntaxError();return;} - char *p=strchr(args, ')'); - if (p==NULL||!isspace(*(p+1))){SyntaxError();return;} - *p=0; - char flist[260], *fp=flist; - if (strlen(ltrim(args))<260) - strcpy(flist, ltrim(args)); - else - { - strncpy(flist, args, 259); - flist[259]=0; - } - *p=')'; - args=ltrim(p+2); - if (strncasecmp(args, "DO", 2) || !isspace(args[2])){SyntaxError();return;} - args = ltrim(args+3); - bool lfn=uselfn&&lfnfor; - while (*fp) { - p=fp; - int q=0; - while (*p&&(q/2*2!=q||(*p!=' '&&*p!=','&&*p!=';'))) - { - if (*p=='"') - q++; - p++; - } - bool last=!!strlen(p); - if (last) *p=0; - if (strchr(fp, '?') || strchr(fp, '*')) { - char name[DOS_NAMELENGTH_ASCII], lname[LFN_NAMELENGTH], spath[DOS_PATHLENGTH], path[DOS_PATHLENGTH], pattern[DOS_PATHLENGTH], full[DOS_PATHLENGTH], *r; - if (!DOS_Canonicalize(fp,full)) return; - r=strrchr_dbcs(full, '\\'); - if (r!=NULL) { - *r=0; - strcpy(path, full); - strcat(path, "\\"); - strcpy(pattern, r+1); - *r='\\'; - } else { - strcpy(path, ""); - strcpy(pattern, full); - } - strcpy(spath, path); - if (strchr(fp,'\"')||uselfn) { - if (!DOS_GetSFNPath(("\""+std::string(path)+"\\").c_str(), spath, false)) strcpy(spath, path); - if (!strlen(spath)||spath[strlen(spath)-1]!='\\') strcat(spath, "\\"); - int k=0; - for (int i=0;i<(int)strlen(path);i++) - if (path[i]!='\"') - path[k++]=path[i]; - path[k]=0; - } - uint32_t size, hsize; - uint16_t date, time; - uint8_t attr; - DOS_DTA dta(dos.dta()); - std::vector sources; - std::string tmp; - int fbak=lfn_filefind_handle; - lfn_filefind_handle=lfn?LFN_FILEFIND_INTERNAL:LFN_FILEFIND_NONE; - if (DOS_FindFirst((std::string(spath)+std::string(pattern)).c_str(), ~(DOS_ATTR_VOLUME|DOS_ATTR_DIRECTORY|DOS_ATTR_DEVICE|DOS_ATTR_HIDDEN|DOS_ATTR_SYSTEM))) - { - dta.GetResult(name, lname, size, hsize, date, time, attr); - tmp=std::string(path)+std::string(lfn?lname:name); - sources.push_back(tmp); - while (DOS_FindNext()) - { - dta.GetResult(name, lname, size, hsize, date, time, attr); - tmp=std::string(path)+std::string(lfn?lname:name); - sources.push_back(tmp); - } - } - lfn_filefind_handle=fbak; - for (std::vector::iterator source = sources.begin(); source != sources.end(); ++source) - DoCommand(str_replace(args, s, source->c_str())); - } else - DoCommand(str_replace(args, s, fp)); - if (last) *p=' '; - fp=ltrim(p); - } - } - - void DOS_Shell::CMD_LFNFOR(char * args) { - HELP("LFNFOR"); - args = trim(args); - if (!*args) - WriteOut("LFNFOR is %s\n", lfnfor ? "on" : "off"); - else if (!strcasecmp(args, "OFF")) - lfnfor = false; - else if (!strcasecmp(args, "ON")) - lfnfor = true; - else - WriteOut("Must specify ON or OFF\n"); - } - - void DOS_Shell::CMD_ALIAS(char* args) { - HELP("ALIAS"); - args = trim(args); - if (!*args || strchr(args, '=') == NULL) { - for (cmd_alias_map_t::iterator iter = cmd_alias.begin(), end = cmd_alias.end(); iter != end; ++iter) { - if (!*args || !strcasecmp(args, iter->first.c_str())) - WriteOut("ALIAS %s='%s'\n", iter->first.c_str(), iter->second.c_str()); - } - } else { - char alias_name[256] = { 0 }; - for (unsigned int offset = 0; *args && offset < sizeof(alias_name)-1; ++offset, ++args) { - if (*args == '=') { - char * const cmd = trim(alias_name); - ++args; - args = trim(args); - size_t args_len = strlen(args); - if ((*args == '"' && args[args_len - 1] == '"') || (*args == '\'' && args[args_len - 1] == '\'')) { - args[args_len - 1] = 0; - ++args; - } - if (!*args) { - cmd_alias.erase(cmd); - } else { - cmd_alias[cmd] = args; - cmd_alias_map_t::iterator iter = cmd_alias.find(cmd); - if (iter != cmd_alias.end()) WriteOut("ALIAS %s='%s'\n", iter->first.c_str(), iter->second.c_str()); - } - break; - } else { - alias_name[offset] = *args; - } - } - } - } - - void DOS_Shell::CMD_ASSOC(char* args) { - HELP("ASSOC"); - args = trim(args); - if (!*args || strchr(args, '=') == NULL) { - for (cmd_assoc_map_t::iterator iter = cmd_assoc.begin(), end = cmd_assoc.end(); iter != end; ++iter) { - if (!*args || !strcasecmp(args, iter->first.c_str())) - WriteOut("%s=%s\n", iter->first.c_str(), iter->second.c_str()); - } - } else { - char assoc_name[256] = { 0 }; - for (unsigned int offset = 0; *args && offset < sizeof(assoc_name)-1; ++offset, ++args) { - if (*args == '=') { - char * const cmd = trim(assoc_name); - if (!*cmd || cmd[0] != '.') { - WriteOut(MSG_Get("SHELL_INVALID_PARAMETER"), cmd); - break; - } - ++args; - args = trim(args); - size_t args_len = strlen(args); - if ((*args == '"' && args[args_len - 1] == '"') || (*args == '\'' && args[args_len - 1] == '\'')) { - args[args_len - 1] = 0; - ++args; - } - if (!*args) { - cmd_assoc.erase(cmd); - } else { - cmd_assoc[cmd] = args; - cmd_assoc_map_t::iterator iter = cmd_assoc.find(cmd); - if (iter != cmd_assoc.end()) WriteOut("%s=%s\n", iter->first.c_str(), iter->second.c_str()); - } - break; - } else { - assoc_name[offset] = *args; - } - } - } - } - - void DOS_Shell::CMD_HISTORY(char* args) { - HELP("HISTORY"); - if (ScanCMDBool(args,"C")) - l_history.clear(); - for (auto it = l_history.rbegin(); it != l_history.rend(); ++it) { - WriteOut_NoParsing(it->c_str(), true); - WriteOut("\n"); - } - } - - void CAPTURE_StartCapture(void); - void CAPTURE_StopCapture(void); - - void CAPTURE_StartWave(void); - void CAPTURE_StopWave(void); - - void CAPTURE_StartMTWave(void); - void CAPTURE_StopMTWave(void); - - void CAPTURE_StartOPL(void); - void CAPTURE_StopOPL(void); - - // Explanation: Start capture, run program, stop capture when program exits. - // Great for gameplay footage or demoscene capture. - // - // The command name is chosen not to conform to the 8.3 pattern - // on purpose to avoid conflicts with any existing DOS applications. - void DOS_Shell::CMD_DXCAPTURE(char * args) { - while (*args == ' ') args++; - std::string argv=std::string(args); - args=StripArg(args); - HELP("DXCAPTURE"); - bool cap_video = false; - bool cap_audio = false; - bool cap_mtaudio = false; - bool cap_opl = false; - unsigned long post_exit_delay_ms = 3000; /* 3 sec */ - - if (!strcmp(args,"-?")) { - args[0]='/'; - HELP("DXCAPTURE"); - return; - } - - args=(char *)argv.c_str(); - char *arg1; - while (strlen(args)&&args[0]=='/') { - arg1=StripArg(args); - upcase(arg1); - if (!(strcmp(arg1,"/V"))) - cap_video = true; - else if (!(strcmp(arg1,"/-V"))) - cap_video = false; - else if (!(strcmp(arg1,"/A"))) - cap_audio = true; - else if (!(strcmp(arg1,"/O"))) - cap_opl = true; - else if (!(strcmp(arg1,"/-A"))) - cap_audio = false; - else if (!(strcmp(arg1,"/-O"))) - cap_opl = false; - else if (!(strcmp(arg1,"/M"))) - cap_mtaudio = true; - else if (!(strcmp(arg1,"/-M"))) - cap_mtaudio = false; - else { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),arg1); - return; - } - } - - if (!cap_video && !cap_audio && !cap_mtaudio && !cap_opl) - cap_video = true; - - if (cap_video) - CAPTURE_StartCapture(); - if (cap_audio) - CAPTURE_StartWave(); - if (cap_mtaudio) - CAPTURE_StartMTWave(); - if (cap_opl) - CAPTURE_StartOPL(); - - DoCommand(args); - - if (post_exit_delay_ms > 0) { - LOG_MSG("Pausing for post exit delay (%.3f seconds)",(double)post_exit_delay_ms / 1000); - - uint32_t lasttick=GetTicks(); - while ((GetTicks()-lasttick)0) { - countryNo = newCC; - DOS_SetCountry(countryNo); - return; - } - WriteOut("Invalid country code - %s\n", StripArg(args)); - return; - } - - extern bool jfont_init, finish_prepare, isDBCSCP(); - extern Bitu DOS_LoadKeyboardLayout(const char * layoutname, int32_t codepage, const char * codepagefile); - void runRescan(const char *str), MSG_Init(), JFONT_Init(), InitFontHandle(), ShutFontHandle(), initcodepagefont(), DOSBox_SetSysMenu(); - int toSetCodePage(DOS_Shell *shell, int newCP, int opt) { - if((TTF_using() && isSupportedCP(newCP)) || !TTF_using()) { - int32_t oldcp = dos.loaded_codepage, cpbak = newCP; - Bitu keyb_error; - if(IS_PC98_ARCH || IS_JEGA_ARCH) newCP = 932; - else if(IS_DOSV) { - if(IS_JDOSV) newCP = 932; - else if(IS_PDOSV) newCP = 936; - else if(IS_KDOSV) newCP = 949; - else if(IS_TDOSV) newCP = 950; - } - else if (!CheckDBCSCP(newCP)){ - keyb_error = DOS_ChangeCodepage(newCP, "auto"); - if (keyb_error != KEYB_NOERROR) { - dos.loaded_codepage = oldcp; - return -1; - } - } - if(newCP != cpbak) LOG_MSG("SHELL: Invalid codepage %d, set to %d.", cpbak, newCP); - dos.loaded_codepage = newCP; - int missing = 0; - #if defined(USE_TTF) - missing = TTF_using() ? setTTFCodePage() : 0; - #endif - if (!TTF_using()) initcodepagefont(); - if (opt==-1) { - MSG_Init(); - #if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU - mainMenu.unbuild(); - mainMenu.rebuild(); - if (!GFX_GetPreventFullscreen()) { - if (menu.toggle) DOSBox_SetMenu(); else DOSBox_NoMenu(); - } - #endif - DOSBox_SetSysMenu(); - } - if(isDBCSCP()) { - ShutFontHandle(); - InitFontHandle(); - JFONT_Init(); - SetupDBCSTable(); - if(newCP == 950 && !chinasea) makestdcp950table(); - if(newCP == 951 && chinasea) makeseacp951table(); - } - if (finish_prepare) runRescan("-A -Q"); - #if C_OPENGL && DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW - if(OpenGL_using() && control->opt_lang.size()) - UpdateSDLDrawTexture(); - #endif - #if defined(USE_TTF) - if ((opt==-1||opt==-2)&&TTF_using()) { - Section_prop * ttf_section = static_cast(control->GetSection("ttf")); - const char *font = ttf_section->Get_string("font"); - if (!font || !*font) { - ttf_reset(); - #if C_PRINTER - if (printfont) UpdateDefaultPrinterFont(); - #endif - } - } - #endif - if(newCP != lastsetcp) { - LOG_MSG("Codepage set to %d", newCP); - lastsetcp = newCP; - } - return missing; - } else if (opt<1 && shell) { - shell->WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), std::to_string(newCP).c_str()); - } - return -1; - } - - const char* DOS_GetLoadedLayout(void); - Bitu DOS_ChangeCodepage(int32_t codepage, const char* codepagefile); - Bitu DOS_ChangeKeyboardLayout(const char* layoutname, int32_t codepage); - - void DOS_Shell::CMD_CHCP(char * args) { - HELP("CHCP"); - args = trim(args); - if (!*args) { - WriteOut(MSG_Get("SHELL_CMD_CHCP_ACTIVE"), dos.loaded_codepage); - return; - } - if (IS_PC98_ARCH || IS_JEGA_ARCH) { - WriteOut("Changing code page is not supported for the PC-98 or JEGA/AX system.\n"); - return; - } - if (IS_DOSV || IS_J3100) - { - WriteOut("Changing code page is not supported for the DOS/V or J-3100 system.\n"); - return; - } - int32_t newCP; - char buff[256], *r; - int missing = 0, n = sscanf(args, "%d%s", &newCP, buff); - auto iter = langcp_map.find(newCP); - const char* layout_name = DOS_GetLoadedLayout(); - int32_t cp = dos.loaded_codepage; - Bitu keyb_error; - if(n == 1) { - if (!TTF_using() || (TTF_using() && isSupportedCP(newCP))){ - bool load_language = SwitchLanguage(cp, newCP, true); - CHCP_changed = true; - missing = toSetCodePage(this, newCP, load_language ? -1: -2); - if(missing > 0) WriteOut(MSG_Get("SHELL_CMD_CHCP_MISSING"), missing); - else if(missing < 0) { - WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); - CHCP_changed = false; - return; - } - } - else { - if(TTF_using() && !isSupportedCP(newCP)) { - WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); - LOG_MSG("CHCP: Codepage %d not supported for TTF output", newCP); - } - else { - WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); - } - CHCP_changed = false; - return; - } - CHCP_changed = false; - WriteOut(MSG_Get("SHELL_CMD_CHCP_ACTIVE"), dos.loaded_codepage); - } - else if(n == 2 && strlen(buff)) { - if(*buff == ':' && strchr(StripArg(args), ':')) { - std::string name = buff + 1; - if(name.empty() && iter != langcp_map.end()) name = iter->second; - if(!TTF_using() || (TTF_using() && isSupportedCP(newCP))) { - CHCP_changed = true; - missing = toSetCodePage(this, newCP, -1); - if(missing > 0) WriteOut(MSG_Get("SHELL_CMD_CHCP_MISSING"), missing); - else if(missing < 0) { - WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); - CHCP_changed = false; - return; - } - } - if(name.size() && dos.loaded_codepage == newCP) { - SetVal("dosbox", "language", name); - Load_Language(name); - } - WriteOut(MSG_Get("SHELL_CMD_CHCP_ACTIVE"), dos.loaded_codepage); - CHCP_changed = false; - return; - } - #if defined(USE_TTF) - if(ttf.inUse) { - if(isSupportedCP(newCP)) { - missing = toSetCodePage(this, newCP, -1); - if(missing > -1) SwitchLanguage(cp, newCP, true); - if(missing > 0) WriteOut(MSG_Get("SHELL_CMD_CHCP_MISSING"), missing); - LOG_MSG("CHCP: Loading cpi/cpx files ignored for TTF output"); - } - else { - WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); - LOG_MSG("CHCP: Codepage %d not supported for TTF output", newCP); - return; - } - } - else { - #endif - altcp = 0; - for(int i = 0; i < 256; i++) altcp_to_unicode[i] = 0; - std::string cpfile = buff; - FILE* file = fopen(cpfile.c_str(), "r"); /* should check the result */ - std::string exepath = GetDOSBoxXPath(); - if(!file && exepath.size()) file = fopen((exepath + CROSS_FILESPLIT + cpfile).c_str(), "r"); - if(file && newCP > 0 && !CheckDBCSCP(newCP)) { - altcp = newCP; - char line[256], * l = line; - while(fgets(line, sizeof(line), file)) { - l = trim(l); - if(!strlen(l)) continue; - r = strchr(l, '#'); - if(r) *r = 0; - l = trim(l); - if(!strlen(l) || strncasecmp(l, "0x", 2)) continue; - r = strchr(l, ' '); - if(!r) r = strchr(l, '\t'); - if(!r) continue; - *r = 0; - int ind = (int)strtol(l + 2, NULL, 16); - r = trim(r + 1); - if(ind > 0xFF || strncasecmp(r, "0x", 2)) continue; - int map = (int)strtol(r + 2, NULL, 16); - altcp_to_unicode[ind] = map; - } - if(file) fclose(file); - keyb_error = DOS_ChangeCodepage(newCP, cpfile.c_str()); - if(keyb_error == KEYB_NOERROR) { - if(layout_name != NULL) { - keyb_error = DOS_ChangeKeyboardLayout(layout_name, cp); - } - } - WriteOut(MSG_Get("SHELL_CMD_CHCP_ACTIVE"), dos.loaded_codepage); - #if defined(USE_TTF) - if(missing > 0) WriteOut(MSG_Get("SHELL_CMD_CHCP_MISSING"), missing); - #endif - } - else - WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); - if(file) fclose(file); - #if defined(USE_TTF) - } - #endif - } - else WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); - return; - } - - void DOS_Shell::CMD_VTEXT(char *args) - { - HELP("VTEXT"); - if (!IS_DOSV) { - WriteOut("This command is only supported in DOS/V mode.\n"); - return; - } - if (char* rem = ScanCMDRemain(args)) { - WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"), rem); - return; - } - args = trim(args); - if(args && *args) { - uint8_t new_mode = 0xff; - char *word = StripWord(args); - if(!strcasecmp(word, "1")) - new_mode = 0x70; - else if(!strcasecmp(word, "2")) - new_mode = 0x78; - else if(!strcasecmp(word, "0")) - new_mode = 0x03; - else { - WriteOut(MSG_Get("SHELL_INVALID_PARAMETER"), word); - return; - } - if(new_mode != 0xff) { - uint16_t oldax=reg_ax; - reg_ax = new_mode; - CALLBACK_RunRealInt(0x10); - if(new_mode == 0x78) new_mode = 0x70; - reg_ax = oldax; - } - } - uint8_t mode = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_MODE); - WriteOut(MSG_Get(mode == 0x70?"SHELL_CMD_VTEXT_ON":"SHELL_CMD_VTEXT_OFF")); - } - \ No newline at end of file + } + } +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_ASSOC(char* args) { + HELP("ASSOC"); + args = trim(args); + if (!*args || strchr(args, '=') == NULL) { + for (cmd_assoc_map_t::iterator iter = cmd_assoc.begin(), end = cmd_assoc.end(); iter != end; ++iter) { + if (!*args || !strcasecmp(args, iter->first.c_str())) + WriteOut("%s=%s\n", iter->first.c_str(), iter->second.c_str()); + } + } else { + char assoc_name[256] = { 0 }; + for (unsigned int offset = 0; *args && offset < sizeof(assoc_name)-1; ++offset, ++args) { + if (*args == '=') { + char * const cmd = trim(assoc_name); + if (!*cmd || cmd[0] != '.') { + WriteOut(MSG_Get("SHELL_INVALID_PARAMETER"), cmd); + break; + } + ++args; + args = trim(args); + size_t args_len = strlen(args); + if ((*args == '"' && args[args_len - 1] == '"') || (*args == '\'' && args[args_len - 1] == '\'')) { + args[args_len - 1] = 0; + ++args; + } + if (!*args) { + cmd_assoc.erase(cmd); + } else { + cmd_assoc[cmd] = args; + cmd_assoc_map_t::iterator iter = cmd_assoc.find(cmd); + if (iter != cmd_assoc.end()) WriteOut("%s=%s\n", iter->first.c_str(), iter->second.c_str()); + } + break; + } else { + assoc_name[offset] = *args; + } + } + } +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_HISTORY(char* args) { + HELP("HISTORY"); + if (ScanCMDBool(args,"C")) + l_history.clear(); + for (auto it = l_history.rbegin(); it != l_history.rend(); ++it) { + WriteOut_NoParsing(it->c_str(), true); + WriteOut("\n"); + } +} +#endif + +void CAPTURE_StartCapture(void); +void CAPTURE_StopCapture(void); + +void CAPTURE_StartWave(void); +void CAPTURE_StopWave(void); + +void CAPTURE_StartMTWave(void); +void CAPTURE_StopMTWave(void); + +void CAPTURE_StartOPL(void); +void CAPTURE_StopOPL(void); + +#if !defined(OSFREE) +// Explanation: Start capture, run program, stop capture when program exits. +// Great for gameplay footage or demoscene capture. +// +// The command name is chosen not to conform to the 8.3 pattern +// on purpose to avoid conflicts with any existing DOS applications. +void DOS_Shell::CMD_DXCAPTURE(char * args) { + while (*args == ' ') args++; + std::string argv=std::string(args); + args=StripArg(args); + HELP("DXCAPTURE"); + bool cap_video = false; + bool cap_audio = false; + bool cap_mtaudio = false; + bool cap_opl = false; + const unsigned long default_post_exit_delay_ms = 3000; /* 3 sec */ + unsigned long post_exit_delay_ms = default_post_exit_delay_ms; + + if (!strcmp(args,"-?")) { + args[0]='/'; + HELP("DXCAPTURE"); + return; + } + + args=(char *)argv.c_str(); + char *arg1; + while (strlen(args)&&args[0]=='/') { + arg1=StripArg(args); + upcase(arg1); + if (!(strcmp(arg1,"/V"))) + cap_video = true; + else if (!(strcmp(arg1,"/-V"))) + cap_video = false; + else if (!(strcmp(arg1,"/A"))) + cap_audio = true; + else if (!(strcmp(arg1,"/O"))) + cap_opl = true; + else if (!(strcmp(arg1,"/-A"))) + cap_audio = false; + else if (!(strcmp(arg1,"/-O"))) + cap_opl = false; + else if (!(strcmp(arg1,"/M"))) + cap_mtaudio = true; + else if (!(strcmp(arg1,"/-M"))) + cap_mtaudio = false; + else if (!(strcmp(arg1,"/D"))) + post_exit_delay_ms = default_post_exit_delay_ms; + else if (!(strcmp(arg1,"/-D"))) + post_exit_delay_ms = 0; + else { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"),arg1); + return; + } + } + + if (!cap_video && !cap_audio && !cap_mtaudio && !cap_opl) + cap_video = true; + + if (cap_video) + CAPTURE_StartCapture(); + if (cap_audio) + CAPTURE_StartWave(); + if (cap_mtaudio) + CAPTURE_StartMTWave(); + if (cap_opl) + CAPTURE_StartOPL(); + + DoCommand(args); + + if (post_exit_delay_ms > 0) { + LOG_MSG("Pausing for post exit delay (%.3f seconds)",(double)post_exit_delay_ms / 1000); + + uint32_t lasttick=GetTicks(); + while ((GetTicks()-lasttick)0) { + countryNo = newCC; + DOS_SetCountry(countryNo); + return; + } + WriteOut("Invalid country code - %s\n", StripArg(args)); + return; +} +#endif + +#if !defined(OSFREE) +extern bool jfont_init, finish_prepare, isDBCSCP(); +extern Bitu DOS_LoadKeyboardLayout(const char * layoutname, int32_t codepage, const char * codepagefile); +void runRescan(const char *str), MSG_Init(), JFONT_Init(), InitFontHandle(), ShutFontHandle(), initcodepagefont(), DOSBox_SetSysMenu(); +int setTTFMap(bool changecp); +int toSetCodePage(DOS_Shell *shell, int newCP, int opt) { + if((TTF_using() && isSupportedCP(newCP)) || !TTF_using()) { + int32_t oldcp = dos.loaded_codepage, cpbak = newCP; + Bitu keyb_error; + if(IS_PC98_ARCH || IS_JEGA_ARCH) newCP = 932; + else if(IS_DOSV) { + if(IS_JDOSV) newCP = 932; + else if(IS_PDOSV) newCP = 936; + else if(IS_KDOSV) newCP = 949; + else if(IS_TDOSV) newCP = 950; + } + else if (!CheckDBCSCP(newCP)){ + keyb_error = DOS_ChangeCodepage(newCP, "auto"); + if (keyb_error != KEYB_NOERROR) { + dos.loaded_codepage = oldcp; + return -1; + } + } + if(newCP != cpbak) LOG_MSG("SHELL: Invalid codepage %d, set to %d.", cpbak, newCP); + dos.loaded_codepage = newCP; + int missing = 0; +#if defined(USE_TTF) + missing = TTF_using() ? setTTFCodePage() : 0; +#endif + if (!TTF_using()) initcodepagefont(); + if (opt==-1) { + MSG_Init(); +#if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU + mainMenu.unbuild(); + mainMenu.rebuild(); + if (!GFX_GetPreventFullscreen()) { + if (menu.toggle) DOSBox_SetMenu(); else DOSBox_NoMenu(); + } +#endif + DOSBox_SetSysMenu(); + } + if(isDBCSCP()) { + ShutFontHandle(); + InitFontHandle(); + JFONT_Init(); + SetupDBCSTable(); + if(newCP == 950 && !chinasea) makestdcp950table(); + if(newCP == 951 && chinasea) makeseacp951table(); + } + if (finish_prepare) runRescan("-A -Q"); +#if C_OPENGL && DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW + if(OpenGL_using() && control->opt_lang.size()) + UpdateSDLDrawTexture(); +#endif +#if defined(USE_TTF) + if ((opt==-1||opt==-2)&&TTF_using()) { + Section_prop * ttf_section = static_cast(control->GetSection("ttf")); + const char *font = ttf_section->Get_string("font"); + if (!font || !*font) { + ttf_reset(); +#if C_PRINTER + if (printfont) UpdateDefaultPrinterFont(); +#endif + } + } +#endif + if(newCP != lastsetcp) { + LOG_MSG("Codepage set to %d", newCP); + lastsetcp = newCP; +#if defined(USE_TTF) + setTTFMap(true/* force update mapping */); +#endif + } + return missing; + } else if (opt<1 && shell) { + shell->WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), std::to_string(newCP).c_str()); + } + return -1; +} +#endif + +#if !defined(OSFREE) +const char* DOS_GetLoadedLayout(void); +Bitu DOS_ChangeCodepage(int32_t codepage, const char* codepagefile); +Bitu DOS_ChangeKeyboardLayout(const char* layoutname, int32_t codepage); +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_CHCP(char * args) { + HELP("CHCP"); + args = trim(args); + if (!*args) { + WriteOut(MSG_Get("SHELL_CMD_CHCP_ACTIVE"), dos.loaded_codepage); + return; + } + if (IS_PC98_ARCH || IS_JEGA_ARCH) { + WriteOut("Changing code page is not supported for the PC-98 or JEGA/AX system.\n"); + return; + } + if (IS_DOSV || IS_J3100) + { + WriteOut("Changing code page is not supported for the DOS/V or J-3100 system.\n"); + return; + } + int32_t newCP; + char buff[256], *r; + int missing = 0, n = sscanf(args, "%d%s", &newCP, buff); + auto iter = langcp_map.find(newCP); + const char* layout_name = DOS_GetLoadedLayout(); + int32_t cp = dos.loaded_codepage; + Bitu keyb_error; + if(n == 1) { + if (!TTF_using() || (TTF_using() && isSupportedCP(newCP))){ + bool load_language = SwitchLanguage(cp, newCP, true); + CHCP_changed = true; + missing = toSetCodePage(this, newCP, load_language ? -1: -2); + if(missing > 0) WriteOut(MSG_Get("SHELL_CMD_CHCP_MISSING"), missing); + else if(missing < 0) { + WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); + CHCP_changed = false; + return; + } + } + else { + if(TTF_using() && !isSupportedCP(newCP)) { + WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); + LOG_MSG("CHCP: Codepage %d not supported for TTF output", newCP); + } + else { + WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); + } + CHCP_changed = false; + return; + } + CHCP_changed = false; + WriteOut(MSG_Get("SHELL_CMD_CHCP_ACTIVE"), dos.loaded_codepage); + } + else if(n == 2 && strlen(buff)) { + if(*buff == ':' && strchr(StripArg(args), ':')) { + std::string name = buff + 1; + if(name.empty() && iter != langcp_map.end()) name = iter->second; + if(!TTF_using() || (TTF_using() && isSupportedCP(newCP))) { + CHCP_changed = true; + missing = toSetCodePage(this, newCP, -1); + if(missing > 0) WriteOut(MSG_Get("SHELL_CMD_CHCP_MISSING"), missing); + else if(missing < 0) { + WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); + CHCP_changed = false; + return; + } + } + if(name.size() && dos.loaded_codepage == newCP) { + SetVal("dosbox", "language", name); + Load_Language(name); + } + WriteOut(MSG_Get("SHELL_CMD_CHCP_ACTIVE"), dos.loaded_codepage); + CHCP_changed = false; + return; + } +#if defined(USE_TTF) + if(ttf.inUse) { + if(isSupportedCP(newCP)) { + missing = toSetCodePage(this, newCP, -1); + if(missing > -1) SwitchLanguage(cp, newCP, true); + if(missing > 0) WriteOut(MSG_Get("SHELL_CMD_CHCP_MISSING"), missing); + LOG_MSG("CHCP: Loading cpi/cpx files ignored for TTF output"); + } + else { + WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); + LOG_MSG("CHCP: Codepage %d not supported for TTF output", newCP); + return; + } + } + else { +#endif + altcp = 0; + for(int i = 0; i < 256; i++) altcp_to_unicode[i] = 0; + std::string cpfile = buff; + FILE* file = fopen(cpfile.c_str(), "r"); /* should check the result */ + std::string exepath = GetDOSBoxXPath(); + if(!file && exepath.size()) file = fopen((exepath + CROSS_FILESPLIT + cpfile).c_str(), "r"); + if(file && newCP > 0 && !CheckDBCSCP(newCP)) { + altcp = newCP; + char line[256], * l = line; + while(fgets(line, sizeof(line), file)) { + l = trim(l); + if(!strlen(l)) continue; + r = strchr(l, '#'); + if(r) *r = 0; + l = trim(l); + if(!strlen(l) || strncasecmp(l, "0x", 2)) continue; + r = strchr(l, ' '); + if(!r) r = strchr(l, '\t'); + if(!r) continue; + *r = 0; + int ind = (int)strtol(l + 2, NULL, 16); + r = trim(r + 1); + if(ind > 0xFF || strncasecmp(r, "0x", 2)) continue; + int map = (int)strtol(r + 2, NULL, 16); + altcp_to_unicode[ind] = map; + } + if(file) fclose(file); + keyb_error = DOS_ChangeCodepage(newCP, cpfile.c_str()); + if(keyb_error == KEYB_NOERROR) { + if(layout_name != NULL) { + keyb_error = DOS_ChangeKeyboardLayout(layout_name, cp); + } + } + WriteOut(MSG_Get("SHELL_CMD_CHCP_ACTIVE"), dos.loaded_codepage); +#if defined(USE_TTF) + if(missing > 0) WriteOut(MSG_Get("SHELL_CMD_CHCP_MISSING"), missing); +#endif + } + else + WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); + if(file) fclose(file); +#if defined(USE_TTF) + } +#endif + } + else WriteOut(MSG_Get("SHELL_CMD_CHCP_INVALID"), StripArg(args)); + return; +} +#endif + +#if !defined(OSFREE) +void DOS_Shell::CMD_VTEXT(char *args) +{ + HELP("VTEXT"); + if (!IS_DOSV) { + WriteOut("This command is only supported in DOS/V mode.\n"); + return; + } + if (char* rem = ScanCMDRemain(args)) { + WriteOut(MSG_Get("SHELL_ILLEGAL_SWITCH"), rem); + return; + } + args = trim(args); + if(args && *args) { + uint8_t new_mode = 0xff; + char *word = StripWord(args); + if(!strcasecmp(word, "1")) + new_mode = 0x70; + else if(!strcasecmp(word, "2")) + new_mode = 0x78; + else if(!strcasecmp(word, "0")) + new_mode = 0x03; + else { + WriteOut(MSG_Get("SHELL_INVALID_PARAMETER"), word); + return; + } + if(new_mode != 0xff) { + uint16_t oldax=reg_ax; + reg_ax = new_mode; + CALLBACK_RunRealInt(0x10); + if(new_mode == 0x78) new_mode = 0x70; + reg_ax = oldax; + } + } + uint8_t mode = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_MODE); + WriteOut(MSG_Get(mode == 0x70?"SHELL_CMD_VTEXT_ON":"SHELL_CMD_VTEXT_OFF")); +} +#endif diff --git a/src/shell/shell_misc.cpp b/src/shell/shell_misc.cpp index 390fd758301..83345266902 100644 --- a/src/shell/shell_misc.cpp +++ b/src/shell/shell_misc.cpp @@ -53,10 +53,16 @@ extern int lfn_filefind_handle; extern bool ctrlbrk, gbk, rtl, dbcs_sbcs; extern bool DOS_BreakFlag, DOS_BreakConioFlag; extern uint16_t cmd_line_seg; +extern char char_yes, char_no; // YES NO CHARS in lower case + +uint8_t prompt_col; // Column position after prompt is displayed +void WriteChar(uint16_t col, uint16_t row, uint8_t page, uint16_t chr, uint8_t attr, bool useattr); + #if defined(USE_TTF) extern bool ttf_dosv; #endif extern std::map pc98boxdrawmap; + void DOS_Shell::ShowPrompt(void) { char dir[DOS_PATHLENGTH]; dir[0] = 0; //DOS_GetCurrentDir doesn't always return something. (if drive is messed up) @@ -103,7 +109,11 @@ void DOS_Shell::ShowPrompt(void) { WriteOut("%d:%02d:%02d.%02d",reg_ch,reg_cl,reg_dh,reg_dl); break; } +#if !defined(OS2) || !defined(C_SDL2) case 'V': WriteOut("DOSBox-X version %s. Reported DOS version %d.%d.",VERSION,dos.version.major,dos.version.minor); break; +#else + case 'V': WriteOut("DOSBox-X version %s. Reported DOS version %d.%d.",PACKAGE_VERSION,dos.version.major,dos.version.minor); break; +#endif case '$': WriteOut("$"); break; case '_': WriteOut("\n"); break; case 'M': break; @@ -112,6 +122,7 @@ void DOS_Shell::ShowPrompt(void) { promptstr++; } inshell = false; + prompt_col = CURSOR_POS_COL(real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE)); } static void outc(uint8_t c) { @@ -442,6 +453,9 @@ static uint16_t DeleteBackspace(bool delete_flag, char *line, uint16_t &str_inde } extern bool isDBCSCP(); +void ReadCharAttr(uint16_t col, uint16_t row, uint8_t page, uint16_t* result); +bool read_lead_byte = false; +uint8_t temp_lead_byte; /* NTS: buffer pointed to by "line" must be at least CMD_MAXLINE+1 large */ void DOS_Shell::InputCommand(char * line) { Bitu size=CMD_MAXLINE-2; //lastcharacter+0 @@ -596,28 +610,29 @@ void DOS_Shell::InputCommand(char * line) { else if (cr == 0x7400) cr = 0x7300; } #endif + uint8_t page, col, row; switch (cr) { case 0x3d00: /* F3 */ if (!l_history.size()) break; it_history = l_history.begin(); if (it_history != l_history.end() && it_history->length() > str_len) { const char *reader = &(it_history->c_str())[str_len]; - while ((c = (uint8_t)(*reader++))) { - line[str_index ++] = (char)c; - DOS_WriteFile(STDOUT,&c,&n); + while((c = (uint8_t)(*reader++))) { + line[str_index++] = (char)c; } str_len = str_index = (uint16_t)it_history->length(); size = (unsigned int)CMD_MAXLINE - str_index - 2u; line[str_len] = 0; + DOS_WriteFile(STDOUT, (const uint8_t *)it_history->c_str(), &str_len); } break; case 0x4B00: /* LEFT */ - if(IS_PC98_ARCH || (isDBCSCP() + if(IS_PC98_ARCH #if defined(USE_TTF) && dbcs_sbcs #endif - && IS_DOS_JAPANESE)) { + ) { if (str_index) { uint16_t count = GetLastCount(line, str_index); uint8_t ch = line[str_index - 1]; @@ -632,6 +647,15 @@ void DOS_Shell::InputCommand(char * line) { backone(); } } + page = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE); + col = CURSOR_POS_COL(page); + row = CURSOR_POS_ROW(page); + uint16_t get_char, get_char2; + ReadCharAttr(col, row, page, &get_char); + if((line[str_index] & 0xFF) != (uint8_t)(get_char & 0xFF)) { + ReadCharAttr(col-1, row, page, &get_char2); + if((uint8_t)(get_char2 & 0xFF) == (line[str_index] & 0xFF)) INT10_SetCursorPos(row, col - 1, page); + } } else { if (isDBCSCP() #if defined(USE_TTF) @@ -641,8 +665,32 @@ void DOS_Shell::InputCommand(char * line) { backone(); str_index --; MoveCaretBackwards(); + page = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE); + col = CURSOR_POS_COL(page); + row = CURSOR_POS_ROW(page); + uint16_t get_char, get_char2; + ReadCharAttr(col, row, page, &get_char); + if((line[str_index] & 0xFF) != (uint8_t)(get_char & 0xFF)) { + ReadCharAttr(col - 1, row, page, &get_char2); + if((uint8_t)(get_char2 & 0xFF) == (line[str_index] & 0xFF)) INT10_SetCursorPos(row, col - 1, page); + } + uint8_t iskanji = 0; + col = CURSOR_POS_COL(page); + if(col > 0 && str_index > 0) { + for(uint16_t i = 0; i < str_index; i++) { + if(isKanji1(line[i]) && isKanji2(line[i + 1])) { + if(i + 1 == str_index) iskanji = 2; + else i++; // skip next character + } + } + + if(iskanji == 2) { + backone(); + str_index--; + } + } } - if (str_index) { + else if (str_index) { backone(); str_index --; MoveCaretBackwards(); @@ -711,15 +759,31 @@ void DOS_Shell::InputCommand(char * line) { count--; } } + page = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE); + col = CURSOR_POS_COL(page); + BIOS_NCOLS; + if(col == ncols - 1 && str_index < str_len && isKanji1(line[str_index]) && isKanji2(line[str_index+1])) { + row = CURSOR_POS_ROW(page); + INT10_SetCursorPos(row+1, 0, page); + } } else { if (isDBCSCP() #if defined(USE_TTF) &&dbcs_sbcs #endif &&str_index=0x40))) { - outc((uint8_t)line[str_index++]); + if(isKanji1((uint8_t)line[str_index]) && isKanji2((uint8_t)line[str_index + 1])) { + const uint8_t buf[2] = {(uint8_t)line[str_index],(uint8_t)line[str_index + 1]}; + uint16_t num = 2; + DOS_WriteFile(STDOUT, buf, &num); + str_index += 2; + } + else { + outc((uint8_t)line[str_index]); + str_index++; + } } - if (str_index < str_len) { + else if (str_index < str_len) { outc((uint8_t)line[str_index++]); } } @@ -730,6 +794,12 @@ void DOS_Shell::InputCommand(char * line) { backone(); str_index--; } + page = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE); + col = CURSOR_POS_COL(page); + while(col > prompt_col) { + backone(); + col = CURSOR_POS_COL(page); + } break; case 0x5200: /* INS */ @@ -742,8 +812,11 @@ void DOS_Shell::InputCommand(char * line) { break; case 0x4F00: /* END */ - while (str_index < str_len) { - outc((uint8_t)line[str_index++]); + { + uint16_t a = str_len - str_index; + uint8_t* text = reinterpret_cast(&line[str_index]); + DOS_WriteFile(STDOUT, text, &a);//write buffer to screen + str_index = str_len; } break; @@ -765,6 +838,13 @@ void DOS_Shell::InputCommand(char * line) { // removes all characters backone(); outc(' '); backone(); } + page = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE); + col = CURSOR_POS_COL(page); + while(col > prompt_col){ + backone(); outc(' '); backone(); + col = CURSOR_POS_COL(page); + } + strcpy(line, it_history->c_str()); len = (uint16_t)it_history->length(); str_len = str_index = len; @@ -799,6 +879,13 @@ void DOS_Shell::InputCommand(char * line) { // removes all characters backone(); outc(' '); backone(); } + page = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE); + col = CURSOR_POS_COL(page); + while(col > prompt_col) { + backone(); outc(' '); backone(); + col = CURSOR_POS_COL(page); + } + strcpy(line, it_history->c_str()); len = (uint16_t)it_history->length(); str_len = str_index = len; @@ -808,35 +895,56 @@ void DOS_Shell::InputCommand(char * line) { break; case 0x5300:/* DELETE */ - if(IS_PC98_ARCH || (isDBCSCP() + if(IS_PC98_ARCH #if defined(USE_TTF) && dbcs_sbcs #endif - && IS_DOS_JAPANESE)) { + ) { if(str_len) { size += DeleteBackspace(true, line, str_index, str_len); } } else { if(str_index>=str_len) break; - int k=1; + uint8_t k=1; if (isDBCSCP() #if defined(USE_TTF) &&dbcs_sbcs #endif &&str_index=0x40))) k=2; - for (int i=0; i(&line[str_index+1]); - DOS_WriteFile(STDOUT,text,&a);//write buffer to screen - outc(' ');backone(); - for(Bitu i=str_index;i<(str_len-1u);i++) { - line[i]=line[i+1u]; - backone(); - } - line[--str_len]=0; - size++; + for(uint16_t i = str_index; i < (str_len - k); i++) { + line[i] = line[i + k]; + } + line[str_len - k] = 0; + line[str_len - k + 1] = 0; + line[str_len] = 0; + str_len -= k; + uint16_t a=str_len-str_index; + uint8_t* text=reinterpret_cast(&line[str_index]); + page = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE); + BIOS_NCOLS; BIOS_NROWS; + col = CURSOR_POS_COL(page); + DOS_WriteFile(STDOUT,text,&a);//write buffer to screen + uint16_t col2 = CURSOR_POS_COL(page); + row = CURSOR_POS_ROW(page); + if(k == 2){ + outc(' '); outc(' '); backone(); backone(); + } + else { + outc(' '); backone(); } + if(col2 >= ncols - (k==2?3:1) && row < nrows) { + for(int i = 0; i <= k; i++) WriteChar(i, row + 1, page, ' ', 0, false); + } + col2 = CURSOR_POS_COL(page); //LOG_MSG("col=%d, a=%d", col,a); + if(col2 >= a) INT10_SetCursorPos(row, col2 - a, page); + else { + uint16_t lines_up = (a - col2 - 1) / ncols + 1; + if(col2 < ncols) for(int i = col2; i < ncols; i++) WriteChar(i, row, page, ' ', 0, false); + if(row >= lines_up) INT10_SetCursorPos(row - lines_up, col, page); + else INT10_SetCursorPos(0, 0, page); + } + size += k; } break; case 0x0F00: /* Shift-Tab */ @@ -865,42 +973,70 @@ void DOS_Shell::InputCommand(char * line) { } break; case 0x08: /* BackSpace */ - if(IS_PC98_ARCH || (isDBCSCP() + if(IS_PC98_ARCH #if defined(USE_TTF) && dbcs_sbcs #endif - && IS_DOS_JAPANESE)) { + ) { if(str_index) { size += DeleteBackspace(false, line, str_index, str_len); } - } else { - int k=1; - if (isDBCSCP() + } + else { + if(str_index == 0)break; + page = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE); + uint8_t bytes = 1; // Previous character is DBCS or SBCS + if(isDBCSCP() #if defined(USE_TTF) - &&dbcs_sbcs + && dbcs_sbcs #endif - &&str_index>1&&(line[str_index-1]<0||((dos.loaded_codepage==932||(dos.loaded_codepage==936&&gbk)||dos.loaded_codepage==950||dos.loaded_codepage==951)&&line[str_index-1]>=0x40))&&line[str_index-2]<0) - k=2; - for (int i=0; i(&line[str_index]); + DOS_WriteFile(STDOUT, text, &a); + } + backone(); + if(bytes == 2 && str_len >= 2) backone(); + outc(' '); + if(bytes == 2 && str_len >= 2) outc(' '); + backone(); + if(bytes == 2 && str_len >= 2) backone(); + + if(str_index < str_len) + memmove(&line[str_index - bytes], &line[str_index], str_len - str_index); // Shift buffer to left + + line[str_len - 1] = '\0'; + if(bytes == 2)line[str_len - 2] = '\0'; + str_len -= bytes; + str_index -= bytes; + size -= bytes; + + for(int i = str_len; i > 0; i--) backone(); + col = CURSOR_POS_COL(page); + while(col > prompt_col) { + backone(); + col = CURSOR_POS_COL(page); + } + + uint16_t a = str_len; + uint8_t* text = reinterpret_cast(&line[0]); + DOS_WriteFile(STDOUT, text, &a); // Rewrite the command history + outc(' '); outc(' '); backone(); backone(); + + if(str_index < str_len) { + for(int i = str_len; i > 0; i--) backone(); + col = CURSOR_POS_COL(page); + while(col > prompt_col) { backone(); - uint32_t str_remain=(uint32_t)(str_len - str_index); - size++; - if (str_remain) { - memmove(&line[str_index-1],&line[str_index],str_remain); - line[--str_len]=0; - str_index --; - /* Go back to redraw */ - for (uint16_t i=str_index; i < str_len; i++) - outc((uint8_t)line[i]); - } else { - line[--str_index] = '\0'; - str_len--; - } - outc(' '); backone(); - // moves the cursor left - while (str_remain--) backone(); + col = CURSOR_POS_COL(page); } + + a = str_index; + text = reinterpret_cast(&line[0]); + DOS_WriteFile(STDOUT, text, &a); // Move to the cursor position + } } if (l_completion.size()) l_completion.clear(); break; @@ -916,6 +1052,12 @@ void DOS_Shell::InputCommand(char * line) { DOS_BreakConioFlag = false; break; case 0x0d: /* Don't care, and return */ + { + uint16_t a = str_len - str_index; + uint8_t* text = reinterpret_cast(&line[str_index]); + DOS_WriteFile(STDOUT, text, &a);//goto end of command line + str_index = str_len; + } if(!echo) { outc('\r'); outc('\n'); } size=0; //Kill the while loop break; @@ -1059,11 +1201,12 @@ void DOS_Shell::InputCommand(char * line) { str_len = 0; break; default: - if(IS_PC98_ARCH || (isDBCSCP() + if(IS_PC98_ARCH #if defined(USE_TTF) && dbcs_sbcs #endif - && IS_DOS_JAPANESE)) { + ) { + if(dos.loaded_codepage == 932 && isKanji1(cr >> 8) && (cr & 0xFF) == 0) break; bool kanji_flag = false; uint16_t pos = str_index; while(1) { @@ -1101,30 +1244,96 @@ void DOS_Shell::InputCommand(char * line) { } } } else { - if (cr >= 0x100) break; - if (l_completion.size()) l_completion.clear(); - if(str_index < str_len && !INT10_GetInsertState()) { //mem_readb(BIOS_KEYBOARD_FLAGS1)&0x80) dev_con.h ? - outc(' ');//move cursor one to the right. + if(cr >= 0x100) break; + if(l_completion.size()) l_completion.clear(); + + page = real_readb(BIOSMEM_SEG, BIOSMEM_CURRENT_PAGE); + if(str_index < str_len) { // Insert Mode Handling + col = CURSOR_POS_COL(page); + bool delete_lead_byte = false; + if(INT10_GetInsertState()) { + for(uint16_t i = str_len; i > str_index; i--) { + line[i] = line[i - 1]; // Shift buffer to the right + } + line[++str_len] = '\0'; // New buffer end + size--; + } + else { + if(isDBCSCP()) { + if(read_lead_byte) { + if(!isKanji1(line[str_index])) { + for(uint16_t i = str_len; i > str_index; i--) { + line[i] = line[i - 1]; // Shift buffer to the right + } + line[++str_len] = '\0'; // New buffer end + size--; + } + line[str_index] = temp_lead_byte; + line[str_index + 1] = (char)(cr & 0xFF); + } + else if(!isKanji1(cr & 0xFF) && isKanji1(line[str_index])) { + for(uint16_t i = str_index + 1; i < str_len; i++) { + line[i] = line[i + 1]; // Delete trailing byte of DBCS since leading byte is overwritten + } + read_lead_byte = false; + delete_lead_byte = true; + line[str_len] = ' '; + size++; + } + else if(isKanji1(cr & 0xFF)) { + temp_lead_byte = (char)(cr & 0xFF); + read_lead_byte = true; + continue; + } + } + else read_lead_byte = false; + } + if(!read_lead_byte)line[str_index] = (char)(cr & 0xFF); uint16_t a = str_len - str_index; - uint8_t* text=reinterpret_cast(&line[str_index]); - DOS_WriteFile(STDOUT,text,&a);//write buffer to screen - backone();//undo the cursor the right. - for(Bitu i=str_len;i>str_index;i--) { - line[i]=line[i-1]; //move internal buffer - backone(); //move cursor back (from write buffer to screen) + uint8_t* text = reinterpret_cast(&line[str_index]); + DOS_WriteFile(STDOUT, text, &a); // Write remaining buffer to screen + str_index++; + if(read_lead_byte) { + str_index++; + col++; + read_lead_byte = false; } - line[++str_len]=0;//new end (as the internal buffer moved one place to the right - size--; + if(delete_lead_byte) { + line[str_len] = '\0'; // Ensure null-terminated + str_len--; + outc(' '); outc(' '); backone(); backone(); + } + + for(uint16_t i = str_len; i > str_index; i--) { + backone(); + } + uint8_t col2 = CURSOR_POS_COL(page); + while(col2 > col+1) { + backone(); + col2 = CURSOR_POS_COL(page); + } + break; } - line[str_index]=(char)(cr&0xFF); - str_index ++; - if (str_index > str_len){ - line[str_index] = '\0'; + // Insert the new character + line[str_index] = (char)(cr & 0xFF); + str_index++; + if(str_index > str_len) { + line[str_index] = '\0'; // Null-terminate if new end str_len++; size--; } - DOS_WriteFile(STDOUT,&c,&n); + else if(!INT10_GetInsertState()) { + // Overwrite mode: just move to the next position + if(str_index == str_len) { + line[str_index] = '\0'; // Ensure null-terminated + str_len++; + size--; + } + } + + // Output the inserted character + outc((uint8_t)(cr & 0xFF)); } break; } @@ -1243,8 +1452,8 @@ std::string full_arguments = ""; bool dos_a20_disable_on_exec=false; extern bool packerr, mountwarning, nowarn; bool DOS_Shell::Execute(char* name, const char* args) { -/* return true => don't check for hardware changes in do_command - * return false => check for hardware changes in do_command */ + /* return true => don't check for hardware changes in do_command + * return false => check for hardware changes in do_command */ char fullname[DOS_PATHLENGTH+4]; //stores results from Which const char* p_fullname; char line[CMD_MAXLINE]; @@ -1264,15 +1473,17 @@ bool DOS_Shell::Execute(char* name, const char* args) { const Section_prop* sec = static_cast(control->GetSection("dos")); /* check for a drive change */ - if (((strcmp(name + 1, ":") == 0) || (strcmp(name + 1, ":\\") == 0)) && isalpha(*name) && !control->SecureMode()) + if (((strcmp(name + 1, ":") == 0) || (strcmp(name + 1, ":\\") == 0)) && isalpha(*name)) { #ifdef WIN32 uint8_t c;uint16_t n; #endif - if (strrchr_dbcs(name,'\\')) { WriteOut(MSG_Get("SHELL_EXECUTE_ILLEGAL_COMMAND"),name); return true; } - if (!DOS_SetDrive(toupper(name[0])-'A')) { + if (!DOS_SetDrive(toupper(name[0])-'A')) { #ifdef WIN32 - if(!sec->Get_bool("automount")) { WriteOut(MSG_Get("SHELL_EXECUTE_DRIVE_NOT_FOUND"),toupper(name[0])); return true; } + #if !defined(OSFREE) + char char_no_upper = toupper(char_no); + char char_yes_upper = toupper(char_yes); + if(!sec->Get_bool("automount")) { WriteOut(MSG_Get("SHELL_EXECUTE_DRIVE_NOT_FOUND"),toupper(name[0])); return true; } // automount: attempt direct letter to drive map. int type=GetDriveType(name); if(!mountwarning && type!=DRIVE_NO_ROOT_DIR) goto continue_1; @@ -1286,44 +1497,42 @@ bool DOS_Shell::Execute(char* name, const char* args) { else { WriteOut(MSG_Get("SHELL_EXECUTE_DRIVE_NOT_FOUND"),toupper(name[0])); return true; } first_2: - n=1; - DOS_ReadFile (STDIN,&c,&n); - do switch (c) { - case 'n': case 'N': - { - DOS_WriteFile (STDOUT,&c, &n); - DOS_ReadFile (STDIN,&c,&n); - do switch (c) { - case 0xD: WriteOut("\n\n"); WriteOut(MSG_Get("SHELL_EXECUTE_DRIVE_NOT_FOUND"),toupper(name[0])); return true; - case 0x3: return true; - case 0x8: WriteOut("\b \b"); goto first_2; - } while (DOS_ReadFile (STDIN,&c,&n)); - } - case 'y': case 'Y': - { - DOS_WriteFile (STDOUT,&c, &n); - DOS_ReadFile (STDIN,&c,&n); - do switch (c) { - case 0xD: WriteOut("\n"); goto continue_1; - case 0x3: return true; - case 0x8: WriteOut("\b \b"); goto first_2; - } while (DOS_ReadFile (STDIN,&c,&n)); - } - case 0x3: return true; - case 0xD: WriteOut("\n"); goto first_1; - case '\t': case 0x08: goto first_2; - default: - { - DOS_WriteFile (STDOUT,&c, &n); - DOS_ReadFile (STDIN,&c,&n); - do switch (c) { - case 0xD: WriteOut("\n");goto first_1; - case 0x3: return true; - case 0x8: WriteOut("\b \b"); goto first_2; - } while (DOS_ReadFile (STDIN,&c,&n)); - goto first_2; - } - } while (DOS_ReadFile (STDIN,&c,&n)); + n=1; + DOS_ReadFile (STDIN,&c,&n); + + do { + if(c == char_no || c == char_no_upper) { + DOS_WriteFile(STDOUT, &c, &n); + DOS_ReadFile(STDIN, &c, &n); + do switch(c) { + case 0xD: WriteOut("\n\n"); WriteOut(MSG_Get("SHELL_EXECUTE_DRIVE_NOT_FOUND"), toupper(name[0])); return true; + case 0x3: return true; + case 0x8: WriteOut("\b \b"); goto first_2; + } while(DOS_ReadFile(STDIN, &c, &n)); + } + else if(c == char_yes || c == char_yes_upper) { + DOS_WriteFile (STDOUT,&c, &n); + DOS_ReadFile (STDIN,&c,&n); + do switch (c) { + case 0xD: WriteOut("\n"); goto continue_1; + case 0x3: return true; + case 0x8: WriteOut("\b \b"); goto first_2; + } while (DOS_ReadFile (STDIN,&c,&n)); + } + else if (c == 0x3) return true; + else if (c == 0xD) { WriteOut("\n"); goto first_1; } + else if (c == '\t' || c == 0x08) goto first_2; + else { + DOS_WriteFile (STDOUT,&c, &n); + DOS_ReadFile (STDIN,&c,&n); + do switch (c) { + case 0xD: WriteOut("\n");goto first_1; + case 0x3: return true; + case 0x8: WriteOut("\b \b"); goto first_2; + } while (DOS_ReadFile (STDIN,&c,&n)); + goto first_2; + } + } while (DOS_ReadFile (STDIN,&c,&n)); continue_1: @@ -1337,9 +1546,10 @@ bool DOS_Shell::Execute(char* name, const char* args) { // if(GetDriveType(name)==5) strcat(mountstring," -ioctl"); nowarn=true; this->ParseLine(mountstring); - nowarn=false; -//failed: + nowarn=false; + //failed: if (!DOS_SetDrive(toupper(name[0])-'A')) + #endif #endif WriteOut(MSG_Get("SHELL_EXECUTE_DRIVE_NOT_FOUND"),toupper(name[0])); } @@ -1349,13 +1559,13 @@ bool DOS_Shell::Execute(char* name, const char* args) { p_fullname = Which(name); if (!p_fullname) return false; strcpy(fullname,p_fullname); - std::string assoc = hasAssociation(fullname); - if (assoc.size()) { - noassoc=true; - DoCommand((char *)(assoc+" "+fullname).c_str()); - noassoc=false; - return true; - } + std::string assoc = hasAssociation(fullname); + if (assoc.size()) { + noassoc=true; + DoCommand((char *)(assoc+" "+fullname).c_str()); + noassoc=false; + return true; + } const char* extension = strrchr(fullname,'.'); /*always disallow files without extension from being executed. */ @@ -1363,10 +1573,10 @@ bool DOS_Shell::Execute(char* name, const char* args) { if (!extension) { //Check if the result will fit in the parameters. Else abort if(strlen(fullname) >( DOS_PATHLENGTH - 1) ) return false; - char temp_name[DOS_PATHLENGTH + 4]; - const char* temp_fullname; + char temp_name[DOS_PATHLENGTH + 4]; + const char* temp_fullname; //try to add .com, .exe and .bat extensions to filename - + strcpy(temp_name,fullname); strcat(temp_name,".COM"); temp_fullname=Which(temp_name); @@ -1377,24 +1587,24 @@ bool DOS_Shell::Execute(char* name, const char* args) { strcpy(temp_name,fullname); strcat(temp_name,".EXE"); temp_fullname=Which(temp_name); - if (temp_fullname) { extension=".exe";strcpy(fullname,temp_fullname);} + if (temp_fullname) { extension=".exe";strcpy(fullname,temp_fullname);} else { strcpy(temp_name,fullname); strcat(temp_name,".BAT"); temp_fullname=Which(temp_name); - if (temp_fullname) { extension=".bat";strcpy(fullname,temp_fullname);} + if (temp_fullname) { extension=".bat";strcpy(fullname,temp_fullname);} else { - return false; + return false; } - + } } } - + if (strcasecmp(extension, ".bat") == 0) { /* Run the .bat file */ /* delete old batch file if call is not active*/ @@ -1425,17 +1635,17 @@ bool DOS_Shell::Execute(char* name, const char* args) { /* Fill the command line */ CommandTail cmdtail; cmdtail.count = 0; - memset(&cmdtail.buffer,0,CTBUF); //Else some part of the string is uninitialized (valgrind) - if (strlen(line)>=CTBUF) line[CTBUF-1]=0; + memset(&cmdtail.buffer,0,CTBUF); //Else some part of the string is uninitialized (valgrind) + if (strlen(line)>=CTBUF) line[CTBUF-1]=0; cmdtail.count=(uint8_t)strlen(line); memcpy(cmdtail.buffer,line,strlen(line)); cmdtail.buffer[strlen(line)]=0xd; /* Copy command line in stack block too */ MEM_BlockWrite(SegPhys(ss)+reg_sp+0x100,&cmdtail,CTBUF+1); - + /* Split input line up into parameters, using a few special rules, most notable the one for /AAA => A\0AA * Qbix: It is extremely messy, but this was the only way I could get things like /:aa and :/aa to work correctly */ - + //Prepare string first char parseline[258] = { 0 }; for(char *pl = line,*q = parseline; *pl ;pl++,q++) { @@ -1463,7 +1673,7 @@ bool DOS_Shell::Execute(char* name, const char* args) { while(skip < 256 && parseline[skip] == 0) skip++; FCB_Parsename(dos.psp(),0x5C,0x01,parseline + skip,&add); skip += add; - + //Move to next argument if it exists while(parseline[skip] != 0) skip++; //This is safe as there is always a 0 in parseline at the end. while(skip < 256 && parseline[skip] == 0) skip++; //Which is higher than 256 @@ -1474,6 +1684,10 @@ bool DOS_Shell::Execute(char* name, const char* args) { /* Set the command line in the block and save it */ block.exec.cmdtail=RealMakeSeg(ss,reg_sp+0x100); block.SaveData(); + + /* clear DOS error to detect errors */ + dos.errorcode = 0; + #if 0 /* Save CS:IP to some point where i can return them from */ uint32_t oldeip=reg_eip; @@ -1499,6 +1713,16 @@ bool DOS_Shell::Execute(char* name, const char* args) { reg_eip=oldeip; SegSet16(cs,oldcs); #endif + + if (dos.errorcode != 0) { + if (dos.errorcode == DOSERR_ACCESS_DENIED) { + WriteOut(MSG_Get("SHELL_CMD_FILE_ACCESS_DENIED"), name); + } + else { + WriteOut("Unable to run program (errcode=%u)\n", dos.errorcode); + } + } + if (packerr&&infix<0&&sec->Get_bool("autoa20fix")) { LOG(LOG_DOSMISC,LOG_DEBUG)("Attempting autoa20fix workaround for EXEPACK error"); if (autofixwarn==1||autofixwarn==3) WriteOut("\r\n\033[41;1m\033[1;37;1mDOSBox-X\033[0m Failed to load the executable\r\n\033[41;1m\033[37;1mDOSBox-X\033[0m Now try again with A20 fix...\r\n"); @@ -1515,18 +1739,18 @@ bool DOS_Shell::Execute(char* name, const char* args) { if (segment < 0x1000) { uint16_t needed = 0x1000 - segment; DOS_ResizeMemory(segment,&needed); - } - mcb.SetPSPSeg(0x40); /* FIXME: Wouldn't 0x08, a magic value used to show ownership by MS-DOS, be more appropriate here? */ - LOG(LOG_DOSMISC,LOG_DEBUG)("Attempting autoloadfix workaround for EXEPACK error"); - if (autofixwarn==2||autofixwarn==3) WriteOut("\r\n\033[41;1m\033[1;37;1mDOSBox-X\033[0m Failed to load the executable\r\n\033[41;1m\033[37;1mDOSBox-X\033[0m Now try again with LOADFIX...\r\n"); - infix=1; - Execute(name, args); - infix=-1; + } + mcb.SetPSPSeg(0x40); /* FIXME: Wouldn't 0x08, a magic value used to show ownership by MS-DOS, be more appropriate here? */ + LOG(LOG_DOSMISC,LOG_DEBUG)("Attempting autoloadfix workaround for EXEPACK error"); + if (autofixwarn==2||autofixwarn==3) WriteOut("\r\n\033[41;1m\033[1;37;1mDOSBox-X\033[0m Failed to load the executable\r\n\033[41;1m\033[37;1mDOSBox-X\033[0m Now try again with LOADFIX...\r\n"); + infix=1; + Execute(name, args); + infix=-1; DOS_FreeMemory(segment); } } else if (packerr&&infix<2&&!autofixwarn) { - WriteOut("Packed file is corrupt"); - } + WriteOut("Packed file is corrupt"); + } packerr=false; } return true; //Executable started diff --git a/src/winres.rc b/src/winres.rc index 025090a5488..53f89b21244 100644 --- a/src/winres.rc +++ b/src/winres.rc @@ -3,7 +3,7 @@ #include "../include/resource.h" #include "../vs/config_package.h" -#define VERSION_NUMBER 2025,02,01,0 +#define VERSION_NUMBER 2026,05,02,0 // icon resource dosbox_ico ICON "../contrib/icons/dosbox-x.ico" diff --git a/tests/drives_tests.cpp b/tests/drives_tests.cpp index 60986c30987..0fcd6590a09 100644 --- a/tests/drives_tests.cpp +++ b/tests/drives_tests.cpp @@ -113,7 +113,7 @@ TEST(Set_Label, Daggerfall) TEST(Set_Label, DaggerfallCD) { std::string output = run_Set_Label("Daggerfall", true); - EXPECT_EQ("Daggerfall", output); + EXPECT_EQ("Daggerfa.ll", output); } TEST(Set_Label, LongerThan11) @@ -124,7 +124,7 @@ TEST(Set_Label, LongerThan11) TEST(Set_Label, LongerThan11CD) { std::string output = run_Set_Label("a123456789AAA", true); - EXPECT_EQ("a123456789A", output); + EXPECT_EQ("a1234567.89A", output); } TEST(Set_Label, ShorterThan8) @@ -148,7 +148,7 @@ TEST(Set_Label, EqualTo8) TEST(Set_Label, EqualTo8CD) { std::string output = run_Set_Label("a1234567", true); - EXPECT_EQ("a1234567", output); + EXPECT_EQ("a1234567.", output); } // A test to ensure non-CD-ROM function strips trailing dot diff --git a/update-version-number b/update-version-number index 1dfdc583e5b..acf88a4355f 100755 --- a/update-version-number +++ b/update-version-number @@ -8,6 +8,8 @@ fi ver=${1} +GITBRANCH=`git rev-parse --abbrev-ref HEAD` + pushd "$(git rev-parse --show-toplevel)" > /dev/null || exit find contrib/translations -type f -name '*.lng' -exec sed -b -i "s/^:DOSBOX-X:VERSION:\([0-9.]\+\)/:DOSBOX-X:VERSION:${ver}/" {} + @@ -26,4 +28,12 @@ ver=$(echo "${ver}" | tr . ,) sed -b -i "s/^#define VERSION_NUMBER \([0-9,]\+\)/#define VERSION_NUMBER ${ver},0/" src/winres.rc +sed -b -i -r "/^#define (C_OSFREE|OSFREE) .*$/d" vs/config_package.h +if [[ x"$GITBRANCH" == x"main-osfree" ]]; then + echo '#define C_OSFREE 1' >>vs/config_package.h + echo '#define OSFREE 1' >>vs/config_package.h +fi + +sed -b -i "/^[[:space:]]*$/d" vs/config_package.h + popd > /dev/null || exit diff --git a/vs/config_package.h b/vs/config_package.h index 8ca201189bf..5b49e92ee53 100644 --- a/vs/config_package.h +++ b/vs/config_package.h @@ -1,8 +1,9 @@ #define PACKAGE "dosbox-x" #define PACKAGE_BUGREPORT "https://github.com/joncampbell123/dosbox-x/issues" #define PACKAGE_NAME "dosbox-x" -#define PACKAGE_STRING "dosbox-x 2025.02.01" +#define PACKAGE_STRING "dosbox-x 2026.05.02" #define PACKAGE_TARNAME "dosbox-x" #define PACKAGE_URL "https://dosbox-x.com" -#define PACKAGE_VERSION "2025.02.01" -#define VERSION "2025.02.01" +#define PACKAGE_VERSION "2026.05.02" +#define VERSION "2026.05.02" +#define COPYRIGHT_YEAR "2025" diff --git a/vs/dosbox-x.vcxproj b/vs/dosbox-x.vcxproj index 6f3b3dbb0a1..cd15c6d4a26 100644 --- a/vs/dosbox-x.vcxproj +++ b/vs/dosbox-x.vcxproj @@ -1120,6 +1120,8 @@ for /d %%i in ("$(SolutionDir)\..\contrib\translations\*") do copy "%%i\*.lng" " + + @@ -1394,6 +1396,7 @@ for /d %%i in ("$(SolutionDir)\..\contrib\translations\*") do copy "%%i\*.lng" " + @@ -1487,6 +1490,7 @@ for /d %%i in ("$(SolutionDir)\..\contrib\translations\*") do copy "%%i\*.lng" " + @@ -1554,6 +1558,7 @@ for /d %%i in ("$(SolutionDir)\..\contrib\translations\*") do copy "%%i\*.lng" " + @@ -1818,6 +1823,7 @@ for /d %%i in ("$(SolutionDir)\..\contrib\translations\*") do copy "%%i\*.lng" " + @@ -1911,6 +1917,7 @@ for /d %%i in ("$(SolutionDir)\..\contrib\translations\*") do copy "%%i\*.lng" " + @@ -1918,6 +1925,7 @@ for /d %%i in ("$(SolutionDir)\..\contrib\translations\*") do copy "%%i\*.lng" " + diff --git a/vs/dosbox-x.vcxproj.filters b/vs/dosbox-x.vcxproj.filters index 4ec6501bf88..fa62349438b 100644 --- a/vs/dosbox-x.vcxproj.filters +++ b/vs/dosbox-x.vcxproj.filters @@ -1658,6 +1658,19 @@ Sources\builtin + + + Sources\builtin + + + Sources\builtin + + + Sources\hardware + + + Sources\output + @@ -2614,6 +2627,13 @@ + + + Sources\hardware + + + Sources\output + diff --git a/vs/freetype/build-dosbox.sh b/vs/freetype/build-dosbox.sh index 3517da94b95..0877211bbdc 100755 --- a/vs/freetype/build-dosbox.sh +++ b/vs/freetype/build-dosbox.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh rm -Rfv linux-host || exit 1 mkdir -p linux-host || exit 1 diff --git a/vs/freetype/builds/unix/ltmain.sh b/vs/freetype/builds/unix/ltmain.sh index 2a50d7f6f72..c997e22726d 100755 --- a/vs/freetype/builds/unix/ltmain.sh +++ b/vs/freetype/builds/unix/ltmain.sh @@ -1,4 +1,4 @@ -#! /usr/bin/env sh +#!/bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2019-02-19.15 diff --git a/vs/libpng/.appveyor.yml b/vs/libpng/.appveyor.yml new file mode 100644 index 00000000000..70d5e00d440 --- /dev/null +++ b/vs/libpng/.appveyor.yml @@ -0,0 +1,81 @@ +version: 1.6.x-{build} + +branches: + except: + - /libpng[0-1][0-8]/ + - /v[0-1][.][0-8][.][0-9]+/ + +image: + - Visual Studio 2022 + +shallow_clone: true + +environment: + matrix: + - TOOLCHAIN: vstudio + AUTOMATION: cmake + ARCH: x86 + - TOOLCHAIN: vstudio + AUTOMATION: cmake + ARCH: x64 + - TOOLCHAIN: vstudio + AUTOMATION: cmake + ARCH: arm64 + - TOOLCHAIN: llvm + AUTOMATION: cmake + ARCH: x64 + - TOOLCHAIN: msys2 + AUTOMATION: cmake + ARCH: i686 + - TOOLCHAIN: msys2 + AUTOMATION: cmake + ARCH: x86_64 + - TOOLCHAIN: msys2 + AUTOMATION: configure + ARCH: i686 + - TOOLCHAIN: msys2 + AUTOMATION: configure + ARCH: x86_64 + - TOOLCHAIN: msys2 + AUTOMATION: makefiles + ARCH: i686 + - TOOLCHAIN: msys2 + AUTOMATION: makefiles + ARCH: x86_64 + +install: + - 'if "%TOOLCHAIN%"=="vstudio" C:\tools\vcpkg\vcpkg.exe install zlib:%ARCH%-windows' + - 'if "%TOOLCHAIN%"=="vstudio" C:\tools\vcpkg\vcpkg.exe integrate install' + - 'if "%TOOLCHAIN%"=="llvm" C:\tools\vcpkg\vcpkg.exe install zlib:%ARCH%-windows' + - 'if "%TOOLCHAIN%"=="llvm" C:\tools\vcpkg\vcpkg.exe integrate install' + - 'if "%TOOLCHAIN%"=="msys2" if "%AUTOMATION%"=="cmake" C:\msys64\usr\bin\pacman.exe -S --noconfirm mingw-w64-%ARCH%-cmake mingw-w64-%ARCH%-ninja' + +before_build: + - 'if "%TOOLCHAIN%"=="vstudio" set CI_CMAKE_GENERATOR=Visual Studio 17 2022' + - 'if "%TOOLCHAIN%"=="vstudio" set CI_CMAKE_TOOLCHAIN_FILE=C:\tools\vcpkg\scripts\buildsystems\vcpkg.cmake' + - 'if "%TOOLCHAIN%"=="vstudio" if "%ARCH%"=="x86" set CI_CMAKE_GENERATOR_PLATFORM=Win32' + - 'if "%TOOLCHAIN%"=="vstudio" if "%ARCH%"=="x64" set CI_CMAKE_GENERATOR_PLATFORM=x64' + - 'if "%TOOLCHAIN%"=="vstudio" if "%ARCH%"=="arm64" set CI_CMAKE_GENERATOR_PLATFORM=ARM64' + - 'if "%TOOLCHAIN%"=="vstudio" if "%ARCH%"=="arm64" set CI_CMAKE_VARS=-DPNG_TESTS=0' + - 'if "%TOOLCHAIN%"=="llvm" set CI_CMAKE_GENERATOR=Ninja' + - 'if "%TOOLCHAIN%"=="llvm" set CI_CMAKE_TOOLCHAIN_FILE=C:\tools\vcpkg\scripts\buildsystems\vcpkg.cmake' + - 'if "%TOOLCHAIN%"=="llvm" set CI_CC=clang' + - 'if "%TOOLCHAIN%"=="msys2" set CI_CMAKE_GENERATOR=Ninja' + - 'if "%TOOLCHAIN%"=="msys2" set CI_CC=gcc' + - 'if "%TOOLCHAIN%"=="msys2" if "%ARCH%"=="i686" set MSYSTEM=MINGW32' + - 'if "%TOOLCHAIN%"=="msys2" if "%ARCH%"=="x86_64" set MSYSTEM=MINGW64' + - 'set CI_CMAKE_BUILD_FLAGS=-j2' + - 'set CI_CTEST_FLAGS=-j2' + - 'set CI_MAKE_FLAGS=-j2' + - 'set CI_MAKEFILES=scripts/makefile.gcc scripts/makefile.msys scripts/makefile.std' + +build_script: + - 'if "%TOOLCHAIN%"=="vstudio" C:\msys64\usr\bin\bash.exe -l "%APPVEYOR_BUILD_FOLDER%\ci\ci_verify_cmake.sh"' + - 'if "%TOOLCHAIN%"=="llvm" C:\msys64\usr\bin\bash.exe -l "%APPVEYOR_BUILD_FOLDER%\ci\ci_verify_cmake.sh"' + - 'if "%TOOLCHAIN%"=="msys2" if "%AUTOMATION%"=="cmake" C:\msys64\usr\bin\bash.exe -l "%APPVEYOR_BUILD_FOLDER%\ci\ci_verify_cmake.sh"' + - 'if "%TOOLCHAIN%"=="msys2" if "%AUTOMATION%"=="configure" C:\msys64\usr\bin\bash.exe -l "%APPVEYOR_BUILD_FOLDER%\ci\ci_verify_configure.sh"' + - 'if "%TOOLCHAIN%"=="msys2" if "%AUTOMATION%"=="makefiles" C:\msys64\usr\bin\bash.exe -l "%APPVEYOR_BUILD_FOLDER%\ci\ci_verify_makefiles.sh"' + +cache: + - 'C:\tools\vcpkg\installed' + - 'C:\msys64\var\cache\pacman' diff --git a/vs/libpng/.cmake-format.yaml b/vs/libpng/.cmake-format.yaml new file mode 100644 index 00000000000..81a5e26436e --- /dev/null +++ b/vs/libpng/.cmake-format.yaml @@ -0,0 +1,94 @@ +# https://pypi.org/project/cmakelang +# https://github.com/cheshirekow/cmake_format + +# ---------------------- +# Options for formatting +# ---------------------- + +# How wide to allow formatted cmake files +# TODO: Reflow the CMake files to allow setting the maximum line width to 100. +line_width: 255 + +# How many spaces to tab for indent +tab_size: 2 + +# If true, lines are indented using tab characters (utf-8 0x09) instead of +# space characters (utf-8 0x20). In cases where the layout would +# require a fractional tab character, the behavior of the fractional +# indentation is governed by +use_tabchars: false + +# If is True, then the value of this variable indicates how +# fractional indentions are handled during whitespace replacement. If set to +# 'use-space', fractional indentation is left as spaces (utf-8 0x20). If set +# to `round-up` fractional indentation is replaced with a single tab character +# (utf-8 0x09) effectively shifting the column to the next tabstop +fractional_tab_policy: "use-space" + +# Enable comment markup parsing and reflow +enable_markup: false + +# ------------------- +# Options for linting +# ------------------- + +# Lint codes to disable +disabled_codes: [ + # TODO: + # Reconcile the CMake variable names with the patterns below, then + # re-enable the "invalid variable name XXX" messages. + "C0103", + + # A custom command with one output doesn't really need a comment because + # the default "generating XXX" is a good message already. + "C0113", +] + +# Regular expression pattern describing valid function names +function_pattern: "[0-9a-z_]+" + +# Regular expression pattern describing valid macro names +macro_pattern: "[0-9A-Z_]+" + +# Regular expression pattern describing valid names for variables with global +# (cache) scope +global_var_pattern: "[A-Z][0-9A-Z_]+" + +# Regular expression pattern describing valid names for variables with global +# scope (but internal semantic) +internal_var_pattern: "_[A-Z][0-9A-Z_]+" + +# Regular expression pattern describing valid names for variables with local +# scope +local_var_pattern: "[a-z][a-z0-9_]+" + +# Regular expression pattern describing valid names for privatedirectory +# variables +private_var_pattern: "_[0-9a-z_]+" + +# Regular expression pattern describing valid names for public directory +# variables +public_var_pattern: "[A-Z][0-9A-Z_]+" + +# Regular expression pattern describing valid names for function/macro +# arguments and loop variables. +argument_var_pattern: "[a-z][a-z0-9_]+" + +# Regular expression pattern describing valid names for keywords used in +# functions or macros +keyword_pattern: "[A-Z][0-9A-Z_]+" + +# In the heuristic for C0201, how many conditionals to match within a loop in +# before considering the loop a parser +max_conditionals_custom_parser: 2 + +# Require at least this many newlines between statements +min_statement_spacing: 1 + +# Require no more than this many newlines between statements +max_statement_spacing: 2 +max_returns: 6 +max_branches: 12 +max_arguments: 5 +max_localvars: 15 +max_statements: 50 diff --git a/vs/libpng/.editorconfig b/vs/libpng/.editorconfig new file mode 100644 index 00000000000..4181a3796b8 --- /dev/null +++ b/vs/libpng/.editorconfig @@ -0,0 +1,55 @@ +# https://editorconfig.org + +root = true + +[*] +charset = utf-8 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.txt] +indent_size = unset +indent_style = space + +[*.[chS]] +indent_size = 3 +indent_style = space +max_doc_length = 80 +max_line_length = 80 + +[*.dfa] +indent_size = 3 +indent_style = space +max_doc_length = 80 +max_line_length = 80 + +[*.awk] +indent_size = 3 +indent_style = space +max_doc_length = 80 +max_line_length = 100 + +[*.cmake] +indent_size = 2 +indent_style = space +max_doc_length = 80 +max_line_length = 100 + +[*.sh] +indent_size = 4 +indent_style = space +max_doc_length = 100 +max_line_length = 100 + +[{Makefile.in,aclocal.m4,ltmain.sh}] +indent_size = unset +indent_style = unset +insert_final_newline = unset +max_doc_length = unset +max_line_length = unset +trim_trailing_whitespace = unset + +[COMMIT_EDITMSG] +indent_style = space +max_doc_length = unset +max_line_length = 72 diff --git a/vs/libpng/.editorconfig-checker.json b/vs/libpng/.editorconfig-checker.json new file mode 100644 index 00000000000..ef08e0801ef --- /dev/null +++ b/vs/libpng/.editorconfig-checker.json @@ -0,0 +1,9 @@ +{ + "Disable": { + "IndentSize": true + }, + "Exclude": [ + ".git/", + "out/" + ] +} diff --git a/vs/libpng/.gitignore b/vs/libpng/.gitignore new file mode 100644 index 00000000000..7245e536b1b --- /dev/null +++ b/vs/libpng/.gitignore @@ -0,0 +1,155 @@ +# Prerequisites +*.d + +# Precompiled headers +*.gch +*.pch + +# Object files +*.slo +*.lo +*.o +*.obj + +# Linker output files +*.exp +*.ilk +*.map + +# Compiled dynamic libraries +*.dll +*.dylib +*.so +*.so.* + +# Compiled static libraries +*.a +*.la +*.lai +*.lib + +# Compiled executables +*.app/ +*.exe +a.out + +# Debug files +*.dSYM/ +*.idb +*.pdb +*.su + +# Tag files +TAGS +.TAGS +!TAGS/ +tags +.tags +!tags/ +gtags.files +GTAGS +GRTAGS +GPATH +GSYMS +cscope.files +cscope.out +cscope.*.out + +# Text editing and text processing artifacts +\#*\# +.\#* +[._]*.sw[a-p] +[._]sw[a-p] +*.bak +*.orig +*.rej +*.tmp +*~ + +# IDE files and directories +## Eclipse +.cproject/ +.project/ +.settings/ +## Embarcadero RAD Studio +*.cbproj.* +__recovery/ +## JetBrains +.idea/ +## NetBeans +nbbuild/ +nbdist/ +nbproject/ +## Visual Studio +.vs/ +### Visual Studio user files +*.rsuser +*.sln.docstates +*.suo +*.user +*.userprefs +### Visual Studio cache files (for older versions) +*.aps +*.ncb +*.opensdf +*.sdf +*.VC.db +*.VC.opendb +ipch/ +## Visual Studio Code +.vscode/* +!.vscode/extensions.json +!.vscode/launch.json +!.vscode/settings.json +!.vscode/tasks.json +## (Various) +*.*cache +*.cache* +[._]*_history +.history/ +[Bb]ackup*/ + +# Build, test and CI output directories +*[Dd]ebug/ +[Dd]ebug*/ +*[Rr]elease/ +[Rr]elease*/ +[._]build*/ +/[Bb]uild*/ +/[Oo]ut/ + +# Libpng configuration and auxiliary build artifacts +*.out +*out.png +[._]deps/ +.dirstamp +/Makefile +/autom4te.cache/ +/config*~ +/config.h +/config.log +/config.status +/install*~ +/libpng*-config +/libpng*.pc +/libpng.vers +/libtool +/stamp-h1 +CMake*.json +!CMakePresets.json +CMakeLists.txt.* +pnglibconf.[ch] +pnglibconf.dfn +pnglibconf.pre +pngprefix.h + +# Libpng test programs +png-fix-itxt +pngcp +pngfix +pngimage +pngstest +pngtest +pngunknown +pngvalid +timepng diff --git a/vs/libpng/.travis.yml b/vs/libpng/.travis.yml new file mode 100644 index 00000000000..b93aa77d93f --- /dev/null +++ b/vs/libpng/.travis.yml @@ -0,0 +1,28 @@ +branches: + except: + - /libpng[0-1][0-8]/ + - /v[0-1][.][0-8][.][0-9]+/ + +language: c + +os: + - freebsd + - linux + - osx + +env: + - AUTOMATION=cmake + - AUTOMATION=configure + - AUTOMATION=makefiles + +before_script: + - 'if test "$TRAVIS_OS_NAME" = "linux"; then export CI_CC="gcc"; else export CI_CC="clang"; fi' + - 'if test "$TRAVIS_OS_NAME" = "osx"; then export CI_CMAKE_GENERATOR="Xcode"; fi' + - 'if test "$TRAVIS_OS_NAME" != "osx"; then export CI_SANITIZERS="address,undefined"; fi' + - 'export CI_MAKEFILES="scripts/makefile.$CI_CC scripts/makefile.std"' + - 'export CI_MAKE_FLAGS=-j2' + - 'export CI_CMAKE_BUILD_FLAGS=-j2' + - 'export CI_CTEST_FLAGS=-j2' + +script: + - './ci/ci_verify_$AUTOMATION.sh' diff --git a/vs/libpng/.yamllint.yml b/vs/libpng/.yamllint.yml new file mode 100644 index 00000000000..9b7af5f2c37 --- /dev/null +++ b/vs/libpng/.yamllint.yml @@ -0,0 +1,7 @@ +extends: default +rules: + document-start: disable + document-end: disable + line-length: disable + truthy: + check-keys: false diff --git a/vs/libpng/ANNOUNCE b/vs/libpng/ANNOUNCE index 0f66c0d1da6..603b2df48e3 100644 --- a/vs/libpng/ANNOUNCE +++ b/vs/libpng/ANNOUNCE @@ -1,35 +1,46 @@ -Libpng 1.6.34 - September 29, 2017 +libpng 1.6.47 - February 18, 2025 +================================= -This is a public release of libpng, intended for use in production codes. +This is a public release of libpng, intended for use in production code. -Files available for download: -Source files with LF line endings (for Unix/Linux) and with a -"configure" script +Files available for download +---------------------------- - libpng-1.6.34.tar.xz (LZMA-compressed, recommended) - libpng-1.6.34.tar.gz +Source files with LF line endings (for Unix/Linux): -Source files with CRLF line endings (for Windows), without the -"configure" script + * libpng-1.6.47.tar.xz (LZMA-compressed, recommended) + * libpng-1.6.47.tar.gz (deflate-compressed) - lpng1634.7z (LZMA-compressed, recommended) - lpng1634.zip +Source files with CRLF line endings (for Windows): + + * lpng1647.7z (LZMA-compressed, recommended) + * lpng1647.zip (deflate-compressed) Other information: - libpng-1.6.34-README.txt - libpng-1.6.34-LICENSE.txt - libpng-1.6.34-*.asc (armored detached GPG signatures) + * README.md + * LICENSE.md + * AUTHORS.md + * TRADEMARK.md -Changes since the last public release (1.6.33): - Removed contrib/pngsuite/i*.png; some of these were incorrect and caused - test failures. -Send comments/corrections/commendations to png-mng-implement at lists.sf.net -(subscription required; visit -https://lists.sourceforge.net/lists/listinfo/png-mng-implement -to subscribe) -or to glennrp at users.sourceforge.net +Changes from version 1.6.46 to version 1.6.47 +--------------------------------------------- + + * Modified the behaviour of colorspace chunks in order to adhere + to the new precedence rules formulated in the latest draft of + the PNG Specification. + (Contributed by John Bowler) + * Fixed a latent bug in `png_write_iCCP`. + This would have been a read-beyond-end-of-malloc vulnerability, + introduced early in the libpng-1.6.0 development, yet (fortunately!) + it was inaccessible before the above-mentioned modification of the + colorspace precedence rules, due to pre-existing colorspace checks. + (Reported by Bob Friesenhahn; fixed by John Bowler) -Glenn R-P + +Send comments/corrections/commendations to png-mng-implement at lists.sf.net. +Subscription is required; visit +https://lists.sourceforge.net/lists/listinfo/png-mng-implement +to subscribe. diff --git a/vs/libpng/AUTHORS b/vs/libpng/AUTHORS new file mode 100644 index 00000000000..f30a4ee1925 --- /dev/null +++ b/vs/libpng/AUTHORS @@ -0,0 +1,62 @@ +PNG REFERENCE LIBRARY AUTHORS +============================= + +This is the list of PNG Reference Library ("libpng") Contributing +Authors, for copyright and licensing purposes. + + * Adam Richter + * Andreas Dilger + * Chris Blume + * Cosmin Truta + * Dave Martindale + * Eric S. Raymond + * Gilles Vollant + * Glenn Randers-Pehrson + * Greg Roelofs + * Guy Eric Schalnat + * James Yu + * John Bowler + * Kevin Bracey + * Lucas Chollet + * Magnus Holmgren + * Mandar Sahastrabuddhe + * Mans Rullgard + * Matt Sarett + * Mike Klein + * Pascal Massimino + * Paul Schmidt + * Philippe Antoine + * Qiang Zhou + * Sam Bushell + * Samuel Williams + * Simon-Pierre Cadieux + * Tim Wegner + * Tom Lane + * Tom Tanner + * Vadim Barkov + * Willem van Schaik + * Zhijie Liang + * Apple Inc. + - Zixu Wang (王子旭) + * Arm Holdings + - Richard Townsend + * Google Inc. + - Dan Field + - Leon Scroggins III + - Matt Sarett + - Mike Klein + - Sami Boukortt + - Wan-Teh Chang + * Loongson Technology Corporation Ltd. + - GuXiWei (顾希伟) + - JinBo (金波) + - ZhangLixia (张利霞) + +The build projects, the build scripts, the test scripts, and other +files in the "projects", "scripts" and "tests" directories, have +other copyright owners, but are released under the libpng license. + +Some files in the "ci" and "contrib" directories, as well as some +of the tools-generated files that are distributed with libpng, have +other copyright owners, and are released under other open source +licenses. diff --git a/vs/libpng/CHANGES b/vs/libpng/CHANGES index 4b82118910e..834b5e19277 100644 --- a/vs/libpng/CHANGES +++ b/vs/libpng/CHANGES @@ -1,4 +1,3 @@ -#if 0 CHANGES - changes for libpng version 0.1 [March 29, 1995] @@ -205,7 +204,7 @@ Version 0.97 [January, 1998] Added simple sRGB support (Glenn R-P) Easier conditional compiling, e.g., define PNG_READ/WRITE_NOT_FULLY_SUPPORTED; - all configurable options can be selected from command-line instead + all configurable options can be selected from command line instead of having to edit pngconf.h (Glenn R-P) Fixed memory leak in pngwrite.c (free info_ptr->text) (Glenn R-P) Added more conditions for png_do_background, to avoid changing @@ -943,7 +942,7 @@ Version 1.0.8 [July 24, 2000] Version 1.0.9beta1 [November 10, 2000] Fixed typo in scripts/makefile.hpux Updated makevms.com in scripts and contrib/* and contrib/* (Martin Zinser) - Fixed seqence-point bug in contrib/pngminus/png2pnm (Martin Zinser) + Fixed sequence-point bug in contrib/pngminus/png2pnm (Martin Zinser) Changed "cdrom.com" in documentation to "libpng.org" Revised pnggccrd.c to get it all working, and updated makefile.gcmmx (Greg). Changed type of "params" from voidp to png_voidp in png_read|write_png(). @@ -1454,7 +1453,7 @@ Version 1.2.6beta4 [July 28, 2004] sequential read support. Added some "#if PNG_WRITE_SUPPORTED" blocks. Added #ifdef to remove some redundancy in png_malloc_default(). - Use png_malloc instead of png_zalloc to allocate the pallete. + Use png_malloc instead of png_zalloc to allocate the palette. Version 1.0.16rc1 and 1.2.6rc1 [August 4, 2004] Fixed buffer overflow vulnerability (CVE-2004-0597) in png_handle_tRNS(). @@ -2296,7 +2295,7 @@ Version 1.4.0beta58 [May 14, 2009] Clarified usage of sig_bit versus sig_bit_p in example.c (Vincent Torri) Version 1.4.0beta59 [May 15, 2009] - Reformated sources in libpng style (3-space intentation, comment format) + Reformatted sources in libpng style (3-space indentation, comment format) Fixed typo in libpng docs (PNG_FILTER_AVE should be PNG_FILTER_AVG) Added sections about the git repository and our coding style to the documentation @@ -2662,7 +2661,7 @@ Version 1.4.1beta06 [January 28, 2010] Version 1.4.1beta07 [February 6, 2010] Folded some long lines in the source files. - Added defineable PNG_USER_CHUNK_CACHE_MAX, PNG_USER_CHUNK_MALLOC_MAX, + Added definable PNG_USER_CHUNK_CACHE_MAX, PNG_USER_CHUNK_MALLOC_MAX, and a PNG_USER_LIMITS_SUPPORTED flag. Eliminated use of png_ptr->irowbytes and reused the slot in png_ptr as png_ptr->png_user_chunk_malloc_max. @@ -3259,7 +3258,7 @@ Version 1.5.2beta01 [February 13, 2011] Revised PNG_EXPORTA macro to not use an empty parameter, to accommodate the old VisualC++ preprocessor. Turned on interlace handling in png_read_png(). - Fixed gcc pendantic warnings. + Fixed gcc pedantic warnings. Handle longjmp in Cygwin. Fixed png_get_current_row_number() in the interlaced case. Cleaned up ALPHA flags and transformations. @@ -3359,7 +3358,7 @@ Version 1.5.3beta05 [May 6, 2011] Pass "" instead of '\0' to png_default_error() in png_err(). This mistake was introduced in libpng-1.2.20beta01. This fixes CVE-2011-2691. Added PNG_WRITE_OPTIMIZE_CMF_SUPPORTED macro to make the zlib "CMF" byte - optimization configureable. + optimization configurable. IDAT compression failed if preceded by a compressed text chunk (bug introduced in libpng-1.5.3beta01-02). This was because the attempt to reset the zlib stream in png_write_IDAT happened after the first IDAT @@ -3643,7 +3642,7 @@ Version 1.5.6beta05 [October 12, 2011] Fixed bug in png_write_chunk_header() debug print, introduced in 1.5.6beta01. Version 1.5.6beta06 [October 17, 2011] - Removed two redundant tests for unitialized row. + Removed two redundant tests for uninitialized row. Fixed a relatively harmless memory overwrite in compressed text writing with a 1 byte zlib buffer. Add ability to call png_read_update_info multiple times to pngvalid.c. @@ -3689,7 +3688,7 @@ Version 1.5.7beta01 [November 4, 2011] crash. The pngmem.c implementation of png_malloc() included a cast to png_size_t which would fail on large allocations on 16-bit systems. Fix for the preprocessor of the Intel C compiler. The preprocessor - splits adjacent @ signs with a space; this changes the concatentation + splits adjacent @ signs with a space; this changes the concatenation token from @-@-@ to PNG_JOIN; that should work with all compiler preprocessors. Paeth filter speed improvements from work by Siarhei Siamashka. This @@ -3735,7 +3734,7 @@ Version 1.5.7beta03 [November 17, 2011] gray (on palette) itself. Fixes for C++ compilation using g++ When libpng source is compiled using g++. The compiler imposes C++ rules on the C source; thus it - is desireable to make the source work with either C or C++ rules + is desirable to make the source work with either C or C++ rules without throwing away useful error information. This change adds png_voidcast to allow C semantic (void*) cases or the corresponding C++ static_cast operation, as appropriate. @@ -3887,7 +3886,7 @@ Version 1.6.0beta06 [January 24, 2012] Version 1.6.0beta07 [January 28, 2012] Eliminated Intel icc/icl compiler warnings. The Intel (GCC derived) compiler issues slightly different warnings from those issued by the - current vesions of GCC. This eliminates those warnings by + current versions of GCC. This eliminates those warnings by adding/removing casts and small code rewrites. Updated configure.ac from autoupdate: added --enable-werror option. Also some layout regularization and removal of introduced tab characters @@ -3920,7 +3919,7 @@ Version 1.6.0beta08 [February 1, 2012] version checking to configure.ac Improved pngstest speed by not doing redundant tests and add const to the background parameter of png_image_finish_read. The --background - option is now done automagically only when required, so that commandline + option is now done automagically only when required, so that command-line option no longer exists. Cleaned up pngpriv.h to consistently declare all functions and data. Also eliminated PNG_CONST_DATA, which is apparently not needed but we @@ -4053,7 +4052,7 @@ Version 1.6.0beta16 [March 6, 2012] (in fact this is harmless, but the PNG data produced may be sub-optimal). Version 1.6.0beta17 [March 10, 2012] - Fixed PNG_LIBPNG_BUILD_BASE_TYPE definition. + Fixed PNG_LIBPNG_BUILD_BASE_TYPE definition. Reject all iCCP chunks after the first, even if the first one is invalid. Deflate/inflate was reworked to move common zlib calls into single functions [rw]util.c. A new shared keyword check routine was also added @@ -4061,7 +4060,7 @@ Version 1.6.0beta17 [March 10, 2012] possible to call png_inflate() incrementally. A warning is no longer issued if the language tag or translated keyword in the iTXt chunk has zero length. - If benign errors are disabled use maximum window on ancilliary inflate. + If benign errors are disabled use maximum window on ancillary inflate. This works round a bug introduced in 1.5.4 where compressed ancillary chunks could end up with a too-small windowBits value in the deflate header. @@ -4176,7 +4175,7 @@ Version 1.6.0beta27 [August 11, 2012] declared even though the functions are never actually defined. This change provides a dummy definition so that the declarations work, yet any implementation will fail to compile because of an incomplete type. - Re-eliminated the use of strcpy() in pngtest.c. An unncessary use of + Re-eliminated the use of strcpy() in pngtest.c. An unnecessary use of strcpy() was accidentally re-introduced in libpng16; this change replaces it with strncpy(). Eliminated use of png_sizeof(); use sizeof() instead. @@ -4309,7 +4308,7 @@ Version 1.6.0beta31 [November 1, 2012] resulting in VS2010 having to update the files. Removed non-working ICC profile support code that was mostly added to libpng-1.6.0beta29 and beta30. There was too much code for too little - gain; implementing full ICC color correction may be desireable but is left + gain; implementing full ICC color correction may be desirable but is left up to applications. Version 1.6.0beta32 [November 25, 2012] @@ -4592,7 +4591,7 @@ Version 1.6.3beta07 [June 8, 2013] the optimizations ('check' vs 'api') are exposed in the public header files except that the new setting PNG_ARM_NEON_OPT documents how libpng makes the decision about whether or not to use the optimizations. - Protect symbol prefixing against CC/CPPFLAGS/CFLAGS useage. + Protect symbol prefixing against CC/CPPFLAGS/CFLAGS usage. Previous iOS/Xcode fixes for the ARM NEON optimizations moved the test on __ARM_NEON__ from configure time to compile time. This breaks symbol prefixing because the definition of the special png_init_filter_functions @@ -4963,7 +4962,7 @@ Version 1.6.13beta01 [July 4, 2014] Changed "if defined(__ARM_NEON__)" to "if (defined(__ARM_NEON__) || defined(__ARM_NEON))" (James Wu). Fixed clang no-warning builds: png_digit was defined but never used. - + Version 1.6.13beta02 [July 21, 2014] Fixed an incorrect separator ("/" should be "\") in scripts/makefile.vcwin32 (bug report from Wolfgang S. Kechel). Bug was introduced in libpng-1.6.11. @@ -5454,7 +5453,7 @@ Version 1.6.21beta01 [December 11, 2015] Version 1.6.21beta02 [December 14, 2015] Moved png_check_keyword() from pngwutil.c to pngset.c Removed LE/BE dependencies in pngvalid, to 'fix' the current problem - in the BigEndian tests by not testing it, making the BE code the same + in the BigEndian tests by not testing it, making the BE code the same as the LE version. Fixes to pngvalid for various reduced build configurations (eliminate unused statics) and a fix for the case in rgb_to_gray when the digitize option @@ -5518,7 +5517,7 @@ Version 1.6.22beta03 [March 9, 2016] Added a common-law trademark notice and export control information to the LICENSE file, png.h, and the man page. Restored "& 0xff" in png_save_uint_16() and png_save_uint_32() that - were accidentally removed from libpng-1.6.17. + were accidentally removed from libpng-1.6.17. Changed PNG_INFO_cHNK and PNG_FREE_cHNK from 0xnnnn to 0xnnnnU in png.h (Robert C. Seacord). Removed dubious "#if INT_MAX" test from png.h that was added to @@ -5635,7 +5634,7 @@ Version 1.6.24beta02 [June 23, 2016] to All and adds a list of the warnings that need to be turned off. This is semi-documentary; the intent is to tell libpng users which warnings have been examined and judged non-fixable at present. The warning about - structure padding is fixable, but it would be a signficant change (moving + structure padding is fixable, but it would be a significant change (moving structure members around). Version 1.6.24beta03 [July 4, 2016] @@ -5781,7 +5780,7 @@ Version 1.6.28rc01 [January 3, 2017] Added option to Cmake build allowing a custom location of zlib to be specified in a scenario where libpng is being built as a subproject alongside zlib by another project (Sam Serrels). - Changed png_ptr->options from a png_byte to png_uint_32, to accomodate + Changed png_ptr->options from a png_byte to png_uint_32, to accommodate up to 16 options. Version 1.6.28rc02 [January 4, 2017] @@ -5928,11 +5927,11 @@ Version 1.6.32beta03 [August 2, 2017] (Bug report from the OSS-fuzz project). Version 1.6.32beta04 [August 2, 2017] - Replaced local eXIf_buf with info_ptr-eXIf_buf in png_handle_eXIf(). + Replaced local eXIf_buf with info_ptr->eXIf_buf in png_handle_eXIf(). Update libpng.3 and libpng-manual.txt about eXIf functions. Version 1.6.32beta05 [August 2, 2017] - Restored png_get_eXIf() and png_set_eXIf() to maintain API compatability. + Restored png_get_eXIf() and png_set_eXIf() to maintain API compatibility. Version 1.6.32beta06 [August 2, 2017] Removed png_get_eXIf_1() and png_set_eXIf_1(). @@ -5951,7 +5950,7 @@ Version 1.6.32beta09 [August 3, 2017] Require cmake-2.8.8 in CMakeLists.txt. Revised symlink creation, no longer using deprecated cmake LOCATION feature (Clifford Yapp). Fixed five-byte error in the calculation of IDAT maximum possible size. - + Version 1.6.32beta10 [August 5, 2017] Moved chunk-length check into a png_check_chunk_length() private function (Suggested by Max Stepin). @@ -6038,14 +6037,221 @@ Version 1.6.33 [September 28, 2017] Add end_info structure and png_read_end() to the libpng fuzzer. Version 1.6.34 [September 29, 2017] - Removed contrib/pngsuite/i*.png; some of these were incorrect and caused - test failures. - -Send comments/corrections/commendations to png-mng-implement at lists.sf.net -(subscription required; visit + Removed contrib/pngsuite/i*.png; some of them caused test failures. + +Version 1.6.35beta01 [March 6, 2018] + Restored 21 of the contrib/pngsuite/i*.png, which do not cause test + failures. Placed the remainder in contrib/pngsuite/interlaced/i*.png. + Added calls to png_set_*() transforms commonly used by browsers to + the fuzzer. + Removed some unnecessary brackets in pngrtran.c + Fixed miscellaneous typos (Patch by github user "luzpaz"). + Change "ASM C" to "C ASM" in CMakeLists.txt + Fixed incorrect handling of bKGD chunk in sub-8-bit files (Cosmin) + Added hardware optimization directories to zip and 7z distributions. + Fixed incorrect bitmask for options. + Fixed many spelling typos. + +Version 1.6.35beta02 [March 28, 2018] + Make png_get_iCCP consistent with man page (allow compression-type argument + to be NULL, bug report by Lenard Szolnoki). + +Version 1.6.35 [July 15, 2018] + Replaced the remaining uses of png_size_t with size_t (Cosmin) + Fixed the calculation of row_factor in png_check_chunk_length + (reported by Thuan Pham in SourceForge issue #278) + Added missing parentheses to a macro definition + (suggested by "irwir" in GitHub issue #216) + +Version 1.6.36 [December 1, 2018] + Optimized png_do_expand_palette for ARM processors. + Improved performance by around 10-22% on a recent ARM Chromebook. + (Contributed by Richard Townsend, ARM Holdings) + Fixed manipulation of machine-specific optimization options. + (Contributed by Vicki Pfau) + Used memcpy instead of manual pointer arithmetic on Intel SSE2. + (Contributed by Samuel Williams) + Fixed build errors with MSVC on ARM64. + (Contributed by Zhijie Liang) + Fixed detection of libm in CMakeLists. + (Contributed by Cameron Cawley) + Fixed incorrect creation of pkg-config file in CMakeLists. + (Contributed by Kyle Bentley) + Fixed the CMake build on Windows MSYS by avoiding symlinks. + Fixed a build warning on OpenBSD. + (Contributed by Theo Buehler) + Fixed various typos in comments. + (Contributed by "luz.paz") + Raised the minimum required CMake version from 3.0.2 to 3.1. + Removed yet more of the vestigial support for pre-ANSI C compilers. + Removed ancient makefiles for ancient systems that have been broken + across all previous libpng-1.6.x versions. + Removed the Y2K compliance statement and the export control + information. + Applied various code style and documentation fixes. + +Version 1.6.37 [April 14, 2019] + Fixed a use-after-free vulnerability (CVE-2019-7317) in png_image_free. + Fixed a memory leak in the ARM NEON implementation of png_do_expand_palette. + Fixed a memory leak in pngtest.c. + Fixed two vulnerabilities (CVE-2018-14048, CVE-2018-14550) in + contrib/pngminus; refactor. + Changed the license of contrib/pngminus to MIT; refresh makefile and docs. + (Contributed by Willem van Schaik) + Fixed a typo in the libpng license v2. + (Contributed by Miguel Ojeda) + Added makefiles for AddressSanitizer-enabled builds. + Cleaned up various makefiles. + +Version 1.6.38 [September 14, 2022] + Added configurations and scripts for continuous integration. + Fixed various errors in the handling of tRNS, hIST and eXIf. + Implemented many stability improvements across all platforms. + Updated the internal documentation. + +Version 1.6.39 [November 20, 2022] + Changed the error handler of oversized chunks (i.e. larger than + PNG_USER_CHUNK_MALLOC_MAX) from png_chunk_error to png_benign_error. + Fixed a buffer overflow error in contrib/tools/pngfix. + Fixed a memory leak (CVE-2019-6129) in contrib/tools/pngcp. + Disabled the ARM Neon optimizations by default in the CMake file, + following the default behavior of the configure script. + Allowed configure.ac to work with the trunk version of autoconf. + Removed the support for "install" targets from the legacy makefiles; + removed the obsolete makefile.cegcc. + Cleaned up the code and updated the internal documentation. + +Version 1.6.40 [June 21, 2023] + Fixed the eXIf chunk multiplicity checks. + Fixed a memory leak in pCAL processing. + Corrected the validity report about tRNS inside png_get_valid(). + Fixed various build issues on *BSD, Mac and Windows. + Updated the configurations and the scripts for continuous integration. + Cleaned up the code, the build scripts, and the documentation. + +Version 1.6.41 [January 24, 2024] + Added SIMD-optimized code for the LoongArch LSX hardware. + (Contributed by GuXiWei, JinBo and ZhangLixia) + Fixed the run-time discovery of MIPS MSA hardware. + (Contributed by Sui Jingfeng) + Fixed an off-by-one error in the function png_do_check_palette_indexes(), + which failed to recognize errors that might have existed in the first + column of a broken palette-encoded image. This was a benign regression + accidentally introduced in libpng-1.6.33. No pixel was harmed. + (Contributed by Adam Richter; reviewed by John Bowler) + Fixed, improved and modernized the contrib/pngminus programs, i.e., + png2pnm.c and pnm2png.c + Removed old and peculiar portability hacks that were meant to silence + warnings issued by gcc version 7.1 alone. + (Contributed by John Bowler) + Fixed and modernized the CMake file, and raised the minimum required + CMake version from 3.1 to 3.6. + (Contributed by Clinton Ingram, Timothy Lyanguzov, Tyler Kropp, et al.) + Allowed the configure script to disable the building of auxiliary tools + and tests, thus catching up with the CMake file. + (Contributed by Carlo Bramini) + Fixed a build issue on Mac. + (Contributed by Zixu Wang) + Moved the Autoconf macro files to scripts/autoconf. + Moved the CMake files (except for the main CMakeLists.txt) to + scripts/cmake and moved the list of their contributing authors to + scripts/cmake/AUTHORS.md + Updated the CI configurations and scripts. + Relicensed the CI scripts to the MIT License. + Improved the test coverage. + (Contributed by John Bowler) + +Version 1.6.42 [January 29, 2024] + Fixed the implementation of the macro function png_check_sig(). + This was an API regression, introduced in libpng-1.6.41. + (Reported by Matthieu Darbois) + Fixed and updated the libpng manual. + +Version 1.6.43 [February 23, 2024] + Fixed the row width check in png_check_IHDR(). + This corrected a bug that was specific to the 16-bit platforms, + and removed a spurious compiler warning from the 64-bit builds. + (Reported by Jacek Caban; fixed by John Bowler) + Added eXIf chunk support to the push-mode reader in pngpread.c. + (Contributed by Chris Blume) + Added contrib/pngexif for the benefit of the users who would like + to inspect the content of eXIf chunks. + Added contrib/conftest/basic.dfa, a basic build-time configuration. + (Contributed by John Bowler) + Fixed a preprocessor condition in pngread.c that broke build-time + configurations like contrib/conftest/pngcp.dfa. + (Contributed by John Bowler) + Added CMake build support for LoongArch LSX. + (Contributed by GuXiWei) + Fixed a CMake build error that occurred under a peculiar state of the + dependency tree. This was a regression introduced in libpng-1.6.41. + (Contributed by Dan Rosser) + Marked the installed libpng headers as system headers in CMake. + (Contributed by Benjamin Buch) + Updated the build support for RISCOS. + (Contributed by Cameron Cawley) + Updated the makefiles to allow cross-platform builds to initialize + conventional make variables like AR and ARFLAGS. + Added various improvements to the CI scripts in areas like version + consistency verification and text linting. + Added version consistency verification to pngtest.c also. + +Version 1.6.44 [September 12, 2024] + Hardened calculations in chroma handling to prevent overflows, and + relaxed a constraint in cHRM validation to accomodate the standard + ACES AP1 set of color primaries. + (Contributed by John Bowler) + Removed the ASM implementation of ARM Neon optimizations and updated + the build accordingly. Only the remaining C implementation shall be + used from now on, thus ensuring the support of the PAC/BTI security + features on ARM64. + (Contributed by Ross Burton and John Bowler) + Fixed the pickup of the PNG_HARDWARE_OPTIMIZATIONS option in the + CMake build on FreeBSD/amd64. This is an important performance fix + on this platform. + Applied various fixes and improvements to the CMake build. + (Contributed by Eric Riff, Benjamin Buch and Erik Scholz) + Added fuzzing targets for the simplified read API. + (Contributed by Mikhail Khachayants) + Fixed a build error involving pngtest.c under a custom config. + This was a regression introduced in a code cleanup in libpng-1.6.43. + (Contributed by Ben Wagner) + Fixed and improved the config files for AppVeyor CI and Travis CI. + +Version 1.6.45 [January 7, 2025] + Added support for the cICP chunk. + (Contributed by Lucas Chollet and John Bowler) + Adjusted and improved various checks in colorspace calculations. + (Contributed by John Bowler) + Rearranged the write order of colorspace chunks for better conformance + with the PNG v3 draft specification. + (Contributed by John Bowler) + Raised the minimum required CMake version from 3.6 to 3.14. + Forked off a development branch for libpng version 1.8. + +Version 1.6.46 [January 23, 2025] + Added support for the mDCV and cLLI chunks. + (Contributed by John Bowler) + Fixed a build issue affecting C89 compilers. + This was a regression introduced in libpng-1.6.45. + (Contributed by John Bowler) + Added makefile.c89, specifically for testing C89 compilers. + Cleaned up contrib/pngminus: corrected an old typo, removed an old + workaround, and updated the CMake file. + +Version 1.6.47 [February 18, 2025] + Modified the behaviour of colorspace chunks in order to adhere + to the new precedence rules formulated in the latest draft of + the PNG Specification. + (Contributed by John Bowler) + Fixed a latent bug in `png_write_iCCP`. + This would have been a read-beyond-end-of-malloc vulnerability, + introduced early in the libpng-1.6.0 development, yet (fortunately!) + it was inaccessible before the above-mentioned modification of the + colorspace precedence rules, due to pre-existing colorspace checks. + (Reported by Bob Friesenhahn; fixed by John Bowler) + +Send comments/corrections/commendations to png-mng-implement at lists.sf.net. +Subscription is required; visit https://lists.sourceforge.net/lists/listinfo/png-mng-implement -to subscribe) -or to glennrp at users.sourceforge.net - -Glenn R-P -#endif +to subscribe. diff --git a/vs/libpng/CMakeLists.txt b/vs/libpng/CMakeLists.txt index 48c6fa28795..4a97bd50e4f 100644 --- a/vs/libpng/CMakeLists.txt +++ b/vs/libpng/CMakeLists.txt @@ -1,359 +1,401 @@ -# CMakeLists.txt - -# Copyright (C) 2007,2009-2017 Glenn Randers-Pehrson -# Written by Christian Ehrlicher, 2007 -# Revised by Roger Lowman, 2009-2010 -# Revised by Clifford Yapp, 2011-2012 -# Revised by Roger Leigh, 2016 -# Revised by Andreas Franek, 2016 - -# This code is released under the libpng license. -# For conditions of distribution and use, see the disclaimer -# and license in png.h - -cmake_minimum_required(VERSION 3.0.2) -cmake_policy(VERSION 3.0.2) - -# Set MacOSX @rpath usage globally. -if (POLICY CMP0020) - cmake_policy(SET CMP0020 NEW) -endif(POLICY CMP0020) -if (POLICY CMP0042) - cmake_policy(SET CMP0042 NEW) -endif(POLICY CMP0042) -# Use new variable expansion policy. -if (POLICY CMP0053) - cmake_policy(SET CMP0053 NEW) -endif(POLICY CMP0053) -if (POLICY CMP0054) - cmake_policy(SET CMP0054 NEW) -endif(POLICY CMP0054) - -set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo") - -project(libpng ASM C) -enable_testing() +# CMakeLists.txt - CMake lists for libpng +# +# Copyright (c) 2018-2025 Cosmin Truta +# Copyright (c) 2007-2018 Glenn Randers-Pehrson +# Originally written by Christian Ehrlicher, 2007 +# +# Use, modification and distribution are subject to +# the same licensing terms and conditions as libpng. +# Please see the copyright notice in png.h or visit +# http://libpng.org/pub/png/src/libpng-LICENSE.txt +# +# For copyright and licensing purposes, please see +# the accompanying file scripts/cmake/AUTHORS.md +# +# SPDX-License-Identifier: libpng-2.0 + +cmake_minimum_required(VERSION 3.14) set(PNGLIB_MAJOR 1) set(PNGLIB_MINOR 6) -set(PNGLIB_RELEASE 34) -set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR}) -set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE}) +set(PNGLIB_REVISION 47) +set(PNGLIB_SUBREVISION 0) +#set(PNGLIB_SUBREVISION "git") +set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_REVISION}) +set(PNGLIB_ABI_VERSION ${PNGLIB_MAJOR}${PNGLIB_MINOR}) +set(PNGLIB_SHARED_VERSION ${PNGLIB_ABI_VERSION}.${PNGLIB_REVISION}.${PNGLIB_SUBREVISION}) +project(libpng + VERSION ${PNGLIB_VERSION} + LANGUAGES C ASM) + +include(CheckCSourceCompiles) include(GNUInstallDirs) -# needed packages +# Allow the users to specify an application-specific API prefix for libpng +# vendoring purposes. A standard libpng build should have no such prefix. +set(PNG_PREFIX "" + CACHE STRING "Prefix to prepend to the API function names") + +# Allow the users to override the postfix appended to debug library file names. +# Previously, we used to set CMAKE_DEBUG_POSTFIX globally. That variable should +# not be cached, however, because doing so would affect all projects processed +# after libpng, in unexpected and undesirable ways. +set(PNG_DEBUG_POSTFIX "d" + CACHE STRING "Postfix to append to library file names under the Debug configuration") + +# Allow the users to import their own extra configuration settings. +set(DFA_XTRA "" + CACHE FILEPATH "File containing extra configuration settings") + +# Allow the users to switch on/off various library build types. +option(PNG_SHARED "Build libpng as a shared library" ON) +option(PNG_STATIC "Build libpng as a static library" ON) +if(APPLE) + option(PNG_FRAMEWORK "Build libpng as a framework bundle" ON) +endif() -#Allow users to specify location of Zlib, -# Useful if zlib is being built alongside this as a sub-project -option(PNG_BUILD_ZLIB "Custom zlib Location, else find_package is used" OFF) +# Allow the users to switch on/off the auxiliary build and test artifacts. +# These artifacts are NOT part of libpng proper, and are subject to change +# at any time. +option(PNG_TESTS "Build the libpng tests" ON) -IF(NOT PNG_BUILD_ZLIB) - find_package(ZLIB REQUIRED) - include_directories(${ZLIB_INCLUDE_DIR}) -ENDIF(NOT PNG_BUILD_ZLIB) +# Same as above, but for the third-party tools. +# Although these tools are targetted at development environments only, +# the users are allowed to override the option to build by default. +if(ANDROID OR IOS) + option(PNG_TOOLS "Build the libpng tools" OFF) +else() + option(PNG_TOOLS "Build the libpng tools" ON) +endif() -if(NOT WIN32) - find_library(M_LIBRARY - NAMES m - PATHS /usr/lib /usr/local/lib - ) - if(NOT M_LIBRARY) - message(STATUS "math lib 'libm' not found; floating point support disabled") +# Maintain backwards compatibility with the deprecated option PNG_EXECUTABLES. +option(PNG_EXECUTABLES "[Deprecated; please use PNG_TOOLS]" ON) +if(NOT PNG_EXECUTABLES) + message(DEPRECATION "The option PNG_EXECUTABLES has been deprecated in favour of PNG_TOOLS") + if(PNG_TOOLS) + message(AUTHOR_WARNING + "Setting PNG_TOOLS to ${PNG_EXECUTABLES}, to stay compatible with PNG_EXECUTABLES") + set(PNG_TOOLS "${PNG_EXECUTABLES}") endif() +endif() + +# Allow the users to configure various compilation options. +option(PNG_DEBUG "Enable debug output" OFF) +option(PNG_HARDWARE_OPTIMIZATIONS "Enable hardware optimizations" ON) + +# Initialize and show the target architecture variable PNG_TARGET_ARCHITECTURE. +# +# NOTE: +# On macOS, CMake sets CMAKE_SYSTEM_PROCESSOR to either "x86_64" or "arm64", +# based upon the OS architecture, not the target architecture. As such, we need +# to check CMAKE_OSX_ARCHITECTURES to identify which hardware-specific flags to +# enable. Note that this will fail if you attempt to build a universal binary +# in a single CMake invocation. +if(APPLE AND CMAKE_OSX_ARCHITECTURES) + string(TOLOWER "${CMAKE_OSX_ARCHITECTURES}" PNG_TARGET_ARCHITECTURE) else() - # not needed on windows - set(M_LIBRARY "") + string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" PNG_TARGET_ARCHITECTURE) +endif() +message(STATUS "Building for target architecture: ${PNG_TARGET_ARCHITECTURE}") + +# Allow the users to specify a custom location of zlib. +# With CMake 3.12 and newer, this option is no longer necessary. +option(PNG_BUILD_ZLIB "[Deprecated; please use ZLIB_ROOT]" OFF) +if(PNG_BUILD_ZLIB) + if("x${ZLIB_ROOT}" STREQUAL "x") + message(SEND_ERROR + "The option PNG_BUILD_ZLIB=${PNG_BUILD_ZLIB} is no longer supported; " + "please use ZLIB_ROOT instead") + else() + message(SEND_ERROR + "The option PNG_BUILD_ZLIB=${PNG_BUILD_ZLIB} is no longer supported; " + "using ZLIB_ROOT=\"${ZLIB_ROOT}\"") + endif() endif() -# COMMAND LINE OPTIONS -option(PNG_SHARED "Build shared lib" ON) -option(PNG_STATIC "Build static lib" ON) -option(PNG_TESTS "Build libpng tests" ON) +find_package(ZLIB REQUIRED) -# Many more configuration options could be added here -option(PNG_FRAMEWORK "Build OS X framework" OFF) -option(PNG_DEBUG "Build with debug output" OFF) -option(PNGARG "Disable ANSI-C prototypes" OFF) +if(UNIX + AND NOT (APPLE OR BEOS OR HAIKU) + AND NOT EMSCRIPTEN) + find_library(M_LIBRARY m) + if(M_LIBRARY) + set(M_LIBRARY m) + else() + set(M_LIBRARY "") + endif() +else() + # libm is not available or not needed. +endif() -option(PNG_HARDWARE_OPTIMIZATIONS "Enable Hardware Optimizations" ON) +if(PNG_HARDWARE_OPTIMIZATIONS) + # Set definitions and sources for ARM. + if(PNG_TARGET_ARCHITECTURE MATCHES "^(arm|aarch)") + if(PNG_TARGET_ARCHITECTURE MATCHES "^(arm64|aarch64)") + set(PNG_ARM_NEON_POSSIBLE_VALUES on off) + set(PNG_ARM_NEON "on" + CACHE STRING "Enable ARM NEON optimizations: on|off; on is default") + else() + set(PNG_ARM_NEON_POSSIBLE_VALUES check on off) + set(PNG_ARM_NEON "off" + CACHE STRING "Enable ARM NEON optimizations: check|on|off; off is default") + endif() + set_property(CACHE PNG_ARM_NEON + PROPERTY STRINGS ${PNG_ARM_NEON_POSSIBLE_VALUES}) + list(FIND PNG_ARM_NEON_POSSIBLE_VALUES ${PNG_ARM_NEON} index) + if(index EQUAL -1) + message(FATAL_ERROR "PNG_ARM_NEON must be one of [${PNG_ARM_NEON_POSSIBLE_VALUES}]") + elseif(NOT PNG_ARM_NEON STREQUAL "off") + set(libpng_arm_sources + arm/arm_init.c + arm/filter_neon_intrinsics.c + arm/palette_neon_intrinsics.c) + if(PNG_ARM_NEON STREQUAL "on") + add_definitions(-DPNG_ARM_NEON_OPT=2) + elseif(PNG_ARM_NEON STREQUAL "check") + add_definitions(-DPNG_ARM_NEON_CHECK_SUPPORTED) + endif() + else() + add_definitions(-DPNG_ARM_NEON_OPT=0) + endif() + endif() -set(PNG_PREFIX "" CACHE STRING "Prefix to add to the API function names") -set(DFA_XTRA "" CACHE FILEPATH "File containing extra configuration settings") + # Set definitions and sources for PowerPC. + if(PNG_TARGET_ARCHITECTURE MATCHES "^(powerpc|ppc64)") + set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off) + set(PNG_POWERPC_VSX "on" + CACHE STRING "Enable POWERPC VSX optimizations: on|off; on is default") + set_property(CACHE PNG_POWERPC_VSX + PROPERTY STRINGS ${PNG_POWERPC_VSX_POSSIBLE_VALUES}) + list(FIND PNG_POWERPC_VSX_POSSIBLE_VALUES ${PNG_POWERPC_VSX} index) + if(index EQUAL -1) + message(FATAL_ERROR "PNG_POWERPC_VSX must be one of [${PNG_POWERPC_VSX_POSSIBLE_VALUES}]") + elseif(NOT PNG_POWERPC_VSX STREQUAL "off") + set(libpng_powerpc_sources + powerpc/powerpc_init.c + powerpc/filter_vsx_intrinsics.c) + if(PNG_POWERPC_VSX STREQUAL "on") + add_definitions(-DPNG_POWERPC_VSX_OPT=2) + endif() + else() + add_definitions(-DPNG_POWERPC_VSX_OPT=0) + endif() + endif() -if(PNG_HARDWARE_OPTIMIZATIONS) -# set definitions and sources for arm -if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR - CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64") - set(PNG_ARM_NEON_POSSIBLE_VALUES check on off) - set(PNG_ARM_NEON "check" CACHE STRING "Enable ARM NEON optimizations: - check: (default) use internal checking code; - off: disable the optimizations; - on: turn on unconditionally.") - set_property(CACHE PNG_ARM_NEON PROPERTY STRINGS - ${PNG_ARM_NEON_POSSIBLE_VALUES}) - list(FIND PNG_ARM_NEON_POSSIBLE_VALUES ${PNG_ARM_NEON} index) - if(index EQUAL -1) - message(FATAL_ERROR - " PNG_ARM_NEON must be one of [${PNG_ARM_NEON_POSSIBLE_VALUES}]") - elseif(NOT ${PNG_ARM_NEON} STREQUAL "no") - set(libpng_arm_sources - arm/arm_init.c - arm/filter_neon.S - arm/filter_neon_intrinsics.c) - - if(${PNG_ARM_NEON} STREQUAL "on") - add_definitions(-DPNG_ARM_NEON_OPT=2) - elseif(${PNG_ARM_NEON} STREQUAL "check") - add_definitions(-DPNG_ARM_NEON_CHECK_SUPPORTED) + # Set definitions and sources for Intel. + if(PNG_TARGET_ARCHITECTURE MATCHES "^(i[3-6]86|x86|amd64)") + set(PNG_INTEL_SSE_POSSIBLE_VALUES on off) + set(PNG_INTEL_SSE "on" + CACHE STRING "Enable INTEL_SSE optimizations: on|off; on is default") + set_property(CACHE PNG_INTEL_SSE + PROPERTY STRINGS ${PNG_INTEL_SSE_POSSIBLE_VALUES}) + list(FIND PNG_INTEL_SSE_POSSIBLE_VALUES ${PNG_INTEL_SSE} index) + if(index EQUAL -1) + message(FATAL_ERROR "PNG_INTEL_SSE must be one of [${PNG_INTEL_SSE_POSSIBLE_VALUES}]") + elseif(NOT PNG_INTEL_SSE STREQUAL "off") + set(libpng_intel_sources + intel/intel_init.c + intel/filter_sse2_intrinsics.c) + if(PNG_INTEL_SSE STREQUAL "on") + add_definitions(-DPNG_INTEL_SSE_OPT=1) + endif() + else() + add_definitions(-DPNG_INTEL_SSE_OPT=0) endif() - else() - add_definitions(-DPNG_ARM_NEON_OPT=0) endif() -endif() -# set definitions and sources for powerpc -if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR - CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*" ) - set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off) - set(PNG_POWERPC_VSX "on" CACHE STRING "Enable POWERPC VSX optimizations: - off: disable the optimizations.") - set_property(CACHE PNG_POWERPC_VSX PROPERTY STRINGS - ${PNG_POWERPC_VSX_POSSIBLE_VALUES}) - list(FIND PNG_POWERPC_VSX_POSSIBLE_VALUES ${PNG_POWERPC_VSX} index) - if(index EQUAL -1) - message(FATAL_ERROR - " PNG_POWERPC_VSX must be one of [${PNG_POWERPC_VSX_POSSIBLE_VALUES}]") - elseif(NOT ${PNG_POWERPC_VSX} STREQUAL "no") - set(libpng_powerpc_sources - powerpc/powerpc_init.c - powerpc/filter_vsx_intrinsics.c) - if(${PNG_POWERPC_VSX} STREQUAL "on") - add_definitions(-DPNG_POWERPC_VSX_OPT=2) + # Set definitions and sources for MIPS. + if(PNG_TARGET_ARCHITECTURE MATCHES "^(mipsel|mips64el)") + set(PNG_MIPS_MSA_POSSIBLE_VALUES on off) + set(PNG_MIPS_MSA "on" + CACHE STRING "Enable MIPS_MSA optimizations: on|off; on is default") + set_property(CACHE PNG_MIPS_MSA + PROPERTY STRINGS ${PNG_MIPS_MSA_POSSIBLE_VALUES}) + list(FIND PNG_MIPS_MSA_POSSIBLE_VALUES ${PNG_MIPS_MSA} index_msa) + if(index_msa EQUAL -1) + message(FATAL_ERROR "PNG_MIPS_MSA must be one of [${PNG_MIPS_MSA_POSSIBLE_VALUES}]") + endif() + + set(PNG_MIPS_MMI_POSSIBLE_VALUES on off) + set(PNG_MIPS_MMI "on" + CACHE STRING "Enable MIPS_MMI optimizations: on|off; on is default") + set_property(CACHE PNG_MIPS_MMI + PROPERTY STRINGS ${PNG_MIPS_MMI_POSSIBLE_VALUES}) + list(FIND PNG_MIPS_MMI_POSSIBLE_VALUES ${PNG_MIPS_MMI} index_mmi) + if(index_mmi EQUAL -1) + message(FATAL_ERROR "PNG_MIPS_MMI must be one of [${PNG_MIPS_MMI_POSSIBLE_VALUES}]") + endif() + + if(PNG_MIPS_MSA STREQUAL "on" AND PNG_MIPS_MMI STREQUAL "on") + set(libpng_mips_sources + mips/mips_init.c + mips/filter_msa_intrinsics.c + mips/filter_mmi_inline_assembly.c) + add_definitions(-DPNG_MIPS_MSA_OPT=2) + add_definitions(-DPNG_MIPS_MMI_OPT=1) + elseif(PNG_MIPS_MSA STREQUAL "on") + set(libpng_mips_sources + mips/mips_init.c + mips/filter_msa_intrinsics.c) + add_definitions(-DPNG_MIPS_MSA_OPT=2) + add_definitions(-DPNG_MIPS_MMI_OPT=0) + elseif(PNG_MIPS_MMI STREQUAL "on") + set(libpng_mips_sources + mips/mips_init.c + mips/filter_mmi_inline_assembly.c) + add_definitions(-DPNG_MIPS_MSA_OPT=0) + add_definitions(-DPNG_MIPS_MMI_OPT=1) + else() + add_definitions(-DPNG_MIPS_MSA_OPT=0) + add_definitions(-DPNG_MIPS_MMI_OPT=0) endif() - else() - add_definitions(-DPNG_POWERPC_VSX_OPT=0) endif() -endif() -# set definitions and sources for intel -if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR - CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*" ) - set(PNG_INTEL_SSE_POSSIBLE_VALUES on off) - set(PNG_INTEL_SSE "on" CACHE STRING "Enable INTEL_SSE optimizations: - off: disable the optimizations") - set_property(CACHE PNG_INTEL_SSE PROPERTY STRINGS - ${PNG_INTEL_SSE_POSSIBLE_VALUES}) - list(FIND PNG_INTEL_SSE_POSSIBLE_VALUES ${PNG_INTEL_SSE} index) - if(index EQUAL -1) - message(FATAL_ERROR - " PNG_INTEL_SSE must be one of [${PNG_INTEL_SSE_POSSIBLE_VALUES}]") - elseif(NOT ${PNG_INTEL_SSE} STREQUAL "no") - set(libpng_intel_sources - intel/intel_init.c - intel/filter_sse2_intrinsics.c) - if(${PNG_INTEL_SSE} STREQUAL "on") - add_definitions(-DPNG_INTEL_SSE_OPT=1) + # Set definitions and sources for LoongArch. + if(PNG_TARGET_ARCHITECTURE MATCHES "^(loongarch)") + include(CheckCCompilerFlag) + set(PNG_LOONGARCH_LSX_POSSIBLE_VALUES on off) + set(PNG_LOONGARCH_LSX "on" + CACHE STRING "Enable LOONGARCH_LSX optimizations: on|off; on is default") + set_property(CACHE PNG_LOONGARCH_LSX + PROPERTY STRINGS ${PNG_LOONGARCH_LSX_POSSIBLE_VALUES}) + list(FIND PNG_LOONGARCH_LSX_POSSIBLE_VALUES ${PNG_LOONGARCH_LSX} index) + if(index EQUAL -1) + message(FATAL_ERROR "PNG_LOONGARCH_LSX must be one of [${PNG_LOONGARCH_LSX_POSSIBLE_VALUES}]") + elseif(NOT PNG_LOONGARCH_LSX STREQUAL "off") + CHECK_C_COMPILER_FLAG("-mlsx" COMPILER_SUPPORTS_LSX) + if(COMPILER_SUPPORTS_LSX) + set(libpng_loongarch_sources + loongarch/loongarch_lsx_init.c + loongarch/filter_lsx_intrinsics.c) + set_source_files_properties(${libpng_loongarch_sources} + PROPERTIES + COMPILE_FLAGS "-mlsx") + add_definitions(-DPNG_LOONGARCH_LSX_OPT=1) + else() + message(FATAL_ERROR "Compiler does not support -mlsx option") + endif() + else() + add_definitions(-DPNG_LOONGARCH_LSX_OPT=0) endif() - else() + endif() + +else(PNG_HARDWARE_OPTIMIZATIONS) + + # Set definitions and sources for ARM. + if(PNG_TARGET_ARCHITECTURE MATCHES "^(arm|aarch)") + add_definitions(-DPNG_ARM_NEON_OPT=0) + endif() + + # Set definitions and sources for PowerPC. + if(PNG_TARGET_ARCHITECTURE MATCHES "^(powerpc|ppc64)") + add_definitions(-DPNG_POWERPC_VSX_OPT=0) + endif() + + # Set definitions and sources for Intel. + if(PNG_TARGET_ARCHITECTURE MATCHES "^(i[3-6]86|x86|amd64)") add_definitions(-DPNG_INTEL_SSE_OPT=0) endif() -endif() -# set definitions and sources for MIPS -if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR - CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*" ) - set(PNG_MIPS_MSA_POSSIBLE_VALUES on off) - set(PNG_MIPS_MSA "on" CACHE STRING "Enable MIPS_MSA optimizations: - off: disable the optimizations") - set_property(CACHE PNG_MIPS_MSA PROPERTY STRINGS - ${PNG_MIPS_MSA_POSSIBLE_VALUES}) - list(FIND PNG_MIPS_MSA_POSSIBLE_VALUES ${PNG_MIPS_MSA} index) - if(index EQUAL -1) - message(FATAL_ERROR - " PNG_MIPS_MSA must be one of [${PNG_MIPS_MSA_POSSIBLE_VALUES}]") - elseif(NOT ${PNG_MIPS_MSA} STREQUAL "no") - set(libpng_mips_sources - mips/mips_init.c - mips/filter_msa_intrinsics.c) - if(${PNG_MIPS_MSA} STREQUAL "on") - add_definitions(-DPNG_MIPS_MSA_OPT=2) - endif() - else() + # Set definitions and sources for MIPS. + if(PNG_TARGET_ARCHITECTURE MATCHES "^(mipsel|mips64el)") add_definitions(-DPNG_MIPS_MSA_OPT=0) endif() -endif() -endif(PNG_HARDWARE_OPTIMIZATIONS) -# SET LIBNAME -set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR}) + # Set definitions and sources for LoongArch. + if(PNG_TARGET_ARCHITECTURE MATCHES "^(loongarch)") + add_definitions(-DPNG_LOONGARCH_LSX_OPT=0) + endif() -# to distinguish between debug and release lib -set(CMAKE_DEBUG_POSTFIX "d") +endif(PNG_HARDWARE_OPTIMIZATIONS) -include(CheckCSourceCompiles) option(ld-version-script "Enable linker version script" ON) -if(ld-version-script AND NOT APPLE) +if(ld-version-script AND NOT (ANDROID OR APPLE)) # Check if LD supports linker scripts. - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map" "VERS_1 { - global: sym; - local: *; -}; - -VERS_2 { - global: sym2; - main; -} VERS_1; + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map" " +VERS_1 { global: sym1; local: *; }; +VERS_2 { global: sym2; main; } VERS_1; ") - set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) - set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/conftest.map'") - check_c_source_compiles("void sym(void) {} + set(_SAVED_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) + if(NOT CMAKE_HOST_SOLARIS) + # Avoid using CMAKE_SHARED_LIBRARY_C_FLAGS in version script checks on + # Solaris, because of an incompatibility with the Solaris link editor. + list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) + endif() + list(APPEND CMAKE_REQUIRED_FLAGS "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/conftest.map'") + check_c_source_compiles(" +void sym1(void) {} void sym2(void) {} -int main(void) {return 0;} +int main(void) { return 0; } " HAVE_LD_VERSION_SCRIPT) if(NOT HAVE_LD_VERSION_SCRIPT) - set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE} "-Wl,-M -Wl,${CMAKE_CURRENT_BINARY_DIR}/conftest.map") - check_c_source_compiles("void sym(void) {} + set(CMAKE_REQUIRED_FLAGS ${_SAVED_CMAKE_REQUIRED_FLAGS}) + if(NOT CMAKE_HOST_SOLARIS) + # Again, avoid using CMAKE_SHARED_LIBRARY_C_FLAGS in version script + # checks on Solaris. + list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_SHARED_LIBRARY_C_FLAGS}) + endif() + list(APPEND CMAKE_REQUIRED_FLAGS "-Wl,-M -Wl,${CMAKE_CURRENT_BINARY_DIR}/conftest.map") + check_c_source_compiles(" +void sym1(void) {} void sym2(void) {} -int main(void) {return 0;} +int main(void) { return 0; } " HAVE_SOLARIS_LD_VERSION_SCRIPT) endif() - set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) + set(CMAKE_REQUIRED_FLAGS ${_SAVED_CMAKE_REQUIRED_FLAGS}) file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map") endif() -# Find symbol prefix. Likely obsolete and unnecessary with recent -# toolchains (it's not done in many other projects). -function(symbol_prefix) - set(SYMBOL_PREFIX) - - execute_process(COMMAND "${CMAKE_C_COMPILER}" "-E" "-" - INPUT_FILE /dev/null - OUTPUT_VARIABLE OUT - RESULT_VARIABLE STATUS) - - if(CPP_FAIL) - message(WARNING "Failed to run the C preprocessor") - endif() - - string(REPLACE "\n" ";" OUT "${OUT}") - foreach(line ${OUT}) - string(REGEX MATCH "^PREFIX=" found_match "${line}") - if(found_match) - STRING(REGEX REPLACE "^PREFIX=(.*\)" "\\1" prefix "${line}") - string(REGEX MATCH "__USER_LABEL_PREFIX__" found_match "${prefix}") - if(found_match) - STRING(REGEX REPLACE "(.*)__USER_LABEL_PREFIX__(.*)" "\\1\\2" prefix "${prefix}") - endif() - set(SYMBOL_PREFIX "${prefix}") - endif() - endforeach() - - message(STATUS "Symbol prefix: ${SYMBOL_PREFIX}") - set(SYMBOL_PREFIX "${SYMBOL_PREFIX}" PARENT_SCOPE) -endfunction() - -if(UNIX) - symbol_prefix() +# Find an AWK language processor. +# Start with specific AWK implementations like gawk and nawk, which are +# known to work with our scripts, then fall back to the system awk. +find_program(AWK NAMES gawk nawk awk) +if(AWK) + message(STATUS "Found AWK program: ${AWK}") +else() + message(STATUS "Could not find an AWK-compatible program") endif() -find_program(AWK NAMES gawk awk) - -include_directories(${CMAKE_CURRENT_BINARY_DIR}) - -if(NOT AWK OR ANDROID) +if(NOT AWK OR (ANDROID OR IOS)) # No awk available to generate sources; use pre-built pnglibconf.h configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt ${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h) - add_custom_target(genfiles) # Dummy + add_custom_target(png_genfiles) else() - include(CMakeParseArguments) - # Generate .chk from .out with awk - # generate_chk(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]]) - function(generate_chk) - set(options) - set(oneValueArgs INPUT OUTPUT) - set(multiValueArgs DEPENDS) - cmake_parse_arguments(_GC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - if (NOT _GC_INPUT) - message(FATAL_ERROR "Invalid arguments. generate_out requires input.") - endif() - if (NOT _GC_OUTPUT) - message(FATAL_ERROR "Invalid arguments. generate_out requires output.") - endif() - - add_custom_command(OUTPUT "${_GC_OUTPUT}" - COMMAND "${CMAKE_COMMAND}" - "-DINPUT=${_GC_INPUT}" - "-DOUTPUT=${_GC_OUTPUT}" - -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/genchk.cmake" - DEPENDS "${_GC_INPUT}" ${_GC_DEPENDS} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") - endfunction() - - # Generate .out from .c with awk - # generate_out(INPUT inputfile OUTPUT outputfile [DEPENDS dep1 [dep2...]]) - function(generate_out) - set(options) - set(oneValueArgs INPUT OUTPUT) - set(multiValueArgs DEPENDS) - cmake_parse_arguments(_GO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - if (NOT _GO_INPUT) - message(FATAL_ERROR "Invalid arguments. generate_out requires input.") - endif() - if (NOT _GO_OUTPUT) - message(FATAL_ERROR "Invalid arguments. generate_out requires output.") - endif() - - add_custom_command(OUTPUT "${_GO_OUTPUT}" - COMMAND "${CMAKE_COMMAND}" - "-DINPUT=${_GO_INPUT}" - "-DOUTPUT=${_GO_OUTPUT}" - -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/genout.cmake" - DEPENDS "${_GO_INPUT}" ${_GO_DEPENDS} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") - endfunction() - - # Generate specific source file with awk - # generate_source(OUTPUT outputfile [DEPENDS dep1 [dep2...]]) - function(generate_source) - set(options) - set(oneValueArgs OUTPUT) - set(multiValueArgs DEPENDS) - cmake_parse_arguments(_GSO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - if (NOT _GSO_OUTPUT) - message(FATAL_ERROR "Invalid arguments. generate_source requires output.") - endif() - - add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_GSO_OUTPUT}" - COMMAND "${CMAKE_COMMAND}" - "-DOUTPUT=${_GSO_OUTPUT}" - -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake" - DEPENDS ${_GSO_DEPENDS} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") - endfunction() - - # Copy file - function(generate_copy source destination) - add_custom_command(OUTPUT "${destination}" - COMMAND "${CMAKE_COMMAND}" -E remove "${destination}" - COMMAND "${CMAKE_COMMAND}" -E copy "${source}" - "${destination}" - DEPENDS "${source}") - endfunction() + # Include the internal module PNGGenConfig.cmake + include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/PNGGenConfig.cmake) + + # Copy the awk scripts, converting their line endings to Unix (LF) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/checksym.awk + ${CMAKE_CURRENT_BINARY_DIR}/scripts/checksym.awk + @ONLY + NEWLINE_STYLE LF) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.awk + ${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk + @ONLY + NEWLINE_STYLE LF) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/dfn.awk + ${CMAKE_CURRENT_BINARY_DIR}/scripts/dfn.awk + @ONLY + NEWLINE_STYLE LF) # Generate scripts/pnglibconf.h generate_source(OUTPUT "scripts/pnglibconf.c" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa" - "${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.awk" + "${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk" "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h") + add_custom_target(png_scripts_pnglibconf_c + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c") # Generate pnglibconf.c generate_source(OUTPUT "pnglibconf.c" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.dfa" - "${CMAKE_CURRENT_SOURCE_DIR}/scripts/options.awk" + "${CMAKE_CURRENT_BINARY_DIR}/scripts/options.awk" "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h") + add_custom_target(pnglibconf_c + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c") if(PNG_PREFIX) set(PNGLIBCONF_H_EXTRA_DEPENDS @@ -364,352 +406,396 @@ else() endif() generate_out(INPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c" - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out") + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" + DEPENDS pnglibconf_c) + add_custom_target(pnglibconf_out + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out") # Generate pnglibconf.h generate_source(OUTPUT "pnglibconf.h" - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out ${PNGLIBCONF_H_EXTRA_DEPENDS}) + add_custom_target(pnglibconf_h + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h") generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/intprefix.c" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h") + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h) + add_custom_target(png_scripts_intprefix_out + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out") generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/prefix.c" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" - "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out") + "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out) + add_custom_target(png_scripts_prefix_out + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out") # Generate pngprefix.h generate_source(OUTPUT "pngprefix.h" DEPENDS ${PNGPREFIX_H_EXTRA_DEPENDS}) + add_custom_target(pngprefix_h + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h") generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/sym.c" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" - DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h") + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h) + add_custom_target(png_scripts_sym_out + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out") generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.c" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" "${CMAKE_CURRENT_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt") + add_custom_target(png_scripts_symbols_out + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out") generate_out(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/vers.c" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/png.h" "${CMAKE_CURRENT_SOURCE_DIR}/pngconf.h" - "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h") + "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h) + add_custom_target(png_scripts_vers_out + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out") generate_chk(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" - DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/scripts/checksym.awk" + DEPENDS png_scripts_symbols_out + "${CMAKE_CURRENT_BINARY_DIR}/scripts/checksym.awk" "${CMAKE_CURRENT_SOURCE_DIR}/scripts/symbols.def") - add_custom_target(symbol-check DEPENDS - "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk") + add_custom_target(png_scripts_symbols_chk + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk") - generate_copy("${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" - "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym") - generate_copy("${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" - "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers") + generate_copy(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym" + DEPENDS png_scripts_sym_out) + generate_copy(INPUT "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers" + DEPENDS png_scripts_vers_out) - add_custom_target(genvers DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers") - add_custom_target(gensym DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym") + add_custom_target(png_genvers + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers") + add_custom_target(png_gensym + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym") - add_custom_target("genprebuilt" + add_custom_target(png_genprebuilt COMMAND "${CMAKE_COMMAND}" "-DOUTPUT=scripts/pnglibconf.h.prebuilt" - -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake" + -P "${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") - # A single target handles generation of all generated files. If - # they are dependend upon separately by multiple targets, this - # confuses parallel make (it would require a separate top-level - # target for each file to track the dependencies properly). - add_custom_target(genfiles DEPENDS - "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym" - "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers" - "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c" - "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" - "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" - "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h" - "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" - "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c" - "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" - "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" - "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" - "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" - "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out") -endif(NOT AWK OR ANDROID) - -# OUR SOURCES + # A single target handles generation of all generated files. + add_custom_target(png_genfiles + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/libpng.sym" png_gensym + "${CMAKE_CURRENT_BINARY_DIR}/libpng.vers" png_genvers + "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.c" pnglibconf_c + "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" pnglibconf_h + "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.out" pnglibconf_out + "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h" pngprefix_h + "${CMAKE_CURRENT_BINARY_DIR}/scripts/intprefix.out" png_scripts_intprefix_out + "${CMAKE_CURRENT_BINARY_DIR}/scripts/pnglibconf.c" png_scripts_pnglibconf_c + "${CMAKE_CURRENT_BINARY_DIR}/scripts/prefix.out" png_scripts_prefix_out + "${CMAKE_CURRENT_BINARY_DIR}/scripts/sym.out" png_scripts_sym_out + "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.chk" png_scripts_symbols_chk + "${CMAKE_CURRENT_BINARY_DIR}/scripts/symbols.out" png_scripts_symbols_out + "${CMAKE_CURRENT_BINARY_DIR}/scripts/vers.out" png_scripts_vers_out) +endif(NOT AWK OR (ANDROID OR IOS)) + +# List the source code files. set(libpng_public_hdrs - png.h - pngconf.h - "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" + png.h + pngconf.h + "${CMAKE_CURRENT_BINARY_DIR}/pnglibconf.h" ) set(libpng_private_hdrs - pngpriv.h - pngdebug.h - pnginfo.h - pngstruct.h + pngpriv.h + pngdebug.h + pnginfo.h + pngstruct.h ) -if(AWK AND NOT ANDROID) +if(AWK AND NOT (ANDROID OR IOS)) list(APPEND libpng_private_hdrs "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h") endif() set(libpng_sources - ${libpng_public_hdrs} - ${libpng_private_hdrs} - png.c - pngerror.c - pngget.c - pngmem.c - pngpread.c - pngread.c - pngrio.c - pngrtran.c - pngrutil.c - pngset.c - pngtrans.c - pngwio.c - pngwrite.c - pngwtran.c - pngwutil.c - ${libpng_arm_sources} - ${libpng_intel_sources} - ${libpng_mips_sources} - ${libpng_powerpc_sources} + ${libpng_public_hdrs} + ${libpng_private_hdrs} + png.c + pngerror.c + pngget.c + pngmem.c + pngpread.c + pngread.c + pngrio.c + pngrtran.c + pngrutil.c + pngset.c + pngtrans.c + pngwio.c + pngwrite.c + pngwtran.c + pngwutil.c + ${libpng_arm_sources} + ${libpng_intel_sources} + ${libpng_mips_sources} + ${libpng_powerpc_sources} + ${libpng_loongarch_sources} ) set(pngtest_sources - pngtest.c + pngtest.c ) set(pngvalid_sources - contrib/libtests/pngvalid.c + contrib/libtests/pngvalid.c ) set(pngstest_sources - contrib/libtests/pngstest.c + contrib/libtests/pngstest.c ) set(pngunknown_sources - contrib/libtests/pngunknown.c + contrib/libtests/pngunknown.c ) set(pngimage_sources - contrib/libtests/pngimage.c + contrib/libtests/pngimage.c ) set(pngfix_sources - contrib/tools/pngfix.c + contrib/tools/pngfix.c ) set(png_fix_itxt_sources - contrib/tools/png-fix-itxt.c + contrib/tools/png-fix-itxt.c ) -if(MSVC) +if(MSVC OR (WIN32 AND (CMAKE_C_COMPILER_ID MATCHES "Clang"))) + add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) add_definitions(-D_CRT_SECURE_NO_DEPRECATE) -endif(MSVC) +endif() if(PNG_DEBUG) add_definitions(-DPNG_DEBUG) endif() -# NOW BUILD OUR TARGET -include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR}) +# Now build our targets. -unset(PNG_LIB_TARGETS) +# Initialize the list of libpng library targets. +set(PNG_LIBRARY_TARGETS "") -if(PNG_SHARED) - add_library(png SHARED ${libpng_sources}) - set(PNG_LIB_TARGETS png) - set_target_properties(png PROPERTIES OUTPUT_NAME ${PNG_LIB_NAME}) - add_dependencies(png genfiles) - if(MSVC) - # msvc does not append 'lib' - do it here to have consistent name - set_target_properties(png PROPERTIES PREFIX "lib") - set_target_properties(png PROPERTIES IMPORT_PREFIX "lib") - endif() - target_link_libraries(png ${ZLIB_LIBRARY} ${M_LIBRARY}) +# Initialize the libpng library file names. +if(UNIX + OR (WIN32 AND NOT CMAKE_SHARED_LIBRARY_PREFIX STREQUAL "") + OR (WIN32 AND NOT CMAKE_STATIC_LIBRARY_PREFIX STREQUAL "")) + # We are on a Unix or Unix-like toolchain like the GNU toolchain on Windows. + # Library file names are expected to have an implicit prefix such as "lib". + # Let CMake prepend and append its usual prefixes and suffixes by default. + set(PNG_SHARED_OUTPUT_NAME "png${PNGLIB_ABI_VERSION}") + set(PNG_STATIC_OUTPUT_NAME "png${PNGLIB_ABI_VERSION}") +else() + # We are, most likely, on a Windows toolchain like MSVC, Clang on Windows, + # Borland/Embarcadero, etc. We need to specify the "libpng" name explicitly. + # We also need to use a custom suffix, in order to distinguish between the + # shared import library name and the static library name. + set(PNG_SHARED_OUTPUT_NAME "libpng${PNGLIB_ABI_VERSION}") + set(PNG_STATIC_OUTPUT_NAME "libpng${PNGLIB_ABI_VERSION}_static") +endif() +if(PNG_SHARED) + add_library(png_shared SHARED ${libpng_sources}) + add_dependencies(png_shared png_genfiles) + list(APPEND PNG_LIBRARY_TARGETS png_shared) + set_target_properties(png_shared PROPERTIES + OUTPUT_NAME "${PNG_SHARED_OUTPUT_NAME}" + DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}" + VERSION "${PNGLIB_SHARED_VERSION}" + SOVERSION "${PNGLIB_ABI_VERSION}") if(UNIX AND AWK) if(HAVE_LD_VERSION_SCRIPT) - set_target_properties(png PROPERTIES LINK_FLAGS - "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'") + set_target_properties(png_shared PROPERTIES + LINK_FLAGS "-Wl,--version-script='${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'") elseif(HAVE_SOLARIS_LD_VERSION_SCRIPT) - set_target_properties(png PROPERTIES LINK_FLAGS - "-Wl,-M -Wl,'${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'") + set_target_properties(png_shared PROPERTIES + LINK_FLAGS "-Wl,-M -Wl,'${CMAKE_CURRENT_BINARY_DIR}/libpng.vers'") endif() endif() + if(APPLE) + # Avoid CMake's implicit compile definition "png_shared_EXPORTS". + set_target_properties(png_shared PROPERTIES DEFINE_SYMBOL "") + elseif(WIN32) + # Use the explicit compile definition "PNG_BUILD_DLL" for Windows DLLs. + set_target_properties(png_shared PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL) + endif() + target_include_directories(png_shared + PUBLIC $) + target_include_directories(png_shared + PUBLIC $) + target_include_directories(png_shared SYSTEM + INTERFACE $) + target_link_libraries(png_shared PUBLIC ZLIB::ZLIB ${M_LIBRARY}) endif() if(PNG_STATIC) - # does not work without changing name - set(PNG_LIB_NAME_STATIC png_static) add_library(png_static STATIC ${libpng_sources}) - add_dependencies(png_static genfiles) - # MSVC doesn't use a different file extension for shared vs. static - # libs. We are able to change OUTPUT_NAME to remove the _static - # for all other platforms. - if(NOT MSVC) - set_target_properties(png_static PROPERTIES - OUTPUT_NAME "${PNG_LIB_NAME}" - CLEAN_DIRECT_OUTPUT 1) - else() - set_target_properties(png_static PROPERTIES - OUTPUT_NAME "${PNG_LIB_NAME}_static" - CLEAN_DIRECT_OUTPUT 1) - endif() - list(APPEND PNG_LIB_TARGETS png_static) - if(MSVC) - # msvc does not append 'lib' - do it here to have consistent name - set_target_properties(png_static PROPERTIES PREFIX "lib") - endif() - target_link_libraries(png_static ${ZLIB_LIBRARY} ${M_LIBRARY}) + add_dependencies(png_static png_genfiles) + list(APPEND PNG_LIBRARY_TARGETS png_static) + set_target_properties(png_static PROPERTIES + OUTPUT_NAME "${PNG_STATIC_OUTPUT_NAME}" + DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}") + target_include_directories(png_static + PUBLIC $) + target_include_directories(png_static + PUBLIC $) + target_include_directories(png_static SYSTEM + INTERFACE $) + target_link_libraries(png_static PUBLIC ZLIB::ZLIB ${M_LIBRARY}) +endif() + +if(PNG_FRAMEWORK AND NOT APPLE) + message(AUTHOR_WARNING + "Setting PNG_FRAMEWORK to OFF, as it only applies to Apple systems") + set(PNG_FRAMEWORK OFF) endif() if(PNG_FRAMEWORK) - set(PNG_LIB_NAME_FRAMEWORK png_framework) add_library(png_framework SHARED ${libpng_sources}) - add_dependencies(png_framework genfiles) - list(APPEND PNG_LIB_TARGETS png_framework) + add_dependencies(png_framework png_genfiles) + list(APPEND PNG_LIBRARY_TARGETS png_framework) set_target_properties(png_framework PROPERTIES - FRAMEWORK TRUE - FRAMEWORK_VERSION ${PNGLIB_VERSION} - MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${PNGLIB_MAJOR}.${PNGLIB_MINOR} - MACOSX_FRAMEWORK_BUNDLE_VERSION ${PNGLIB_VERSION} - MACOSX_FRAMEWORK_IDENTIFIER org.libpng.libpng - XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" - PUBLIC_HEADER "${libpng_public_hdrs}" - OUTPUT_NAME png) - target_link_libraries(png_framework ${ZLIB_LIBRARY} ${M_LIBRARY}) + FRAMEWORK TRUE + FRAMEWORK_VERSION "${PNGLIB_VERSION}" + MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${PNGLIB_MAJOR}.${PNGLIB_MINOR}" + MACOSX_FRAMEWORK_BUNDLE_VERSION "${PNGLIB_VERSION}" + MACOSX_FRAMEWORK_IDENTIFIER "org.libpng.libpng" + XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" + PUBLIC_HEADER "${libpng_public_hdrs}" + OUTPUT_NAME "png" + DEBUG_POSTFIX "${PNG_DEBUG_POSTFIX}") + # Avoid CMake's implicit compile definition "-Dpng_framework_EXPORTS". + set_target_properties(png_framework PROPERTIES DEFINE_SYMBOL "") + target_include_directories(png_framework + PUBLIC $) + target_include_directories(png_framework + PUBLIC $) + target_include_directories(png_framework SYSTEM + INTERFACE $) + target_link_libraries(png_framework PUBLIC ZLIB::ZLIB ${M_LIBRARY}) endif() -if(NOT PNG_LIB_TARGETS) - message(SEND_ERROR - "No library variant selected to build. " - "Please enable at least one of the following options: " - " PNG_STATIC, PNG_SHARED, PNG_FRAMEWORK") +if(NOT PNG_LIBRARY_TARGETS) + message(SEND_ERROR "No library variant selected to build. " + "Please enable at least one of the following options: " + "PNG_SHARED, PNG_STATIC, PNG_FRAMEWORK") endif() -if(PNG_SHARED AND WIN32) - set_target_properties(png PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL) -endif() - -function(png_add_test) - set(options) - set(oneValueArgs NAME COMMAND) - set(multiValueArgs OPTIONS FILES) - cmake_parse_arguments(_PAT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if (NOT _PAT_NAME) - message(FATAL_ERROR "Invalid arguments. png_add_test requires name.") - endif() - if (NOT _PAT_COMMAND) - message(FATAL_ERROR "Invalid arguments. png_add_test requires command.") - endif() +if(PNG_TESTS AND PNG_SHARED) + enable_testing() - set(TEST_OPTIONS "${_PAT_OPTIONS}") - set(TEST_FILES "${_PAT_FILES}") - - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scripts/test.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake" @ONLY) - if(CMAKE_MAJOR_VERSION GREATER 2) # have generator expressions - add_test(NAME "${_PAT_NAME}" - COMMAND "${CMAKE_COMMAND}" - "-DLIBPNG=$" - "-DTEST_COMMAND=$" - -P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake") - else() # old 2.x add_test; limited and won't work well on Windows - # Note LIBPNG is a dummy value as there are no generator expressions - add_test("${_PAT_NAME}" "${CMAKE_COMMAND}" - "-DLIBPNG=${CMAKE_CURRENT_BINARY_DIR}/libpng.so" - "-DTEST_COMMAND=./${_PAT_COMMAND}" - -P "${CMAKE_CURRENT_BINARY_DIR}/tests/${_PAT_NAME}.cmake") - endif() -endfunction() + # Include the internal module PNGTest.cmake + include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/PNGTest.cmake) -if(PNG_TESTS AND PNG_SHARED) # Find test PNG files by globbing, but sort lists to ensure # consistency between different filesystems. file(GLOB PNGSUITE_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/pngsuite/*.png") list(SORT PNGSUITE_PNGS) file(GLOB TEST_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/testpngs/*.png") list(SORT TEST_PNGS) + file(GLOB TEST_PNG3_PNGS "${CMAKE_CURRENT_SOURCE_DIR}/contrib/testpngs/png-3/*.png") + list(SORT TEST_PNG3_PNGS) set(PNGTEST_PNG "${CMAKE_CURRENT_SOURCE_DIR}/pngtest.png") add_executable(pngtest ${pngtest_sources}) - target_link_libraries(pngtest png) + target_link_libraries(pngtest PRIVATE png_shared) + + png_add_test(NAME pngtest + COMMAND pngtest + FILES "${PNGTEST_PNG}") - png_add_test(NAME pngtest COMMAND pngtest FILES "${PNGTEST_PNG}") + png_add_test(NAME pngtest-png-3 + COMMAND pngtest + FILES "${TEST_PNG3_PNGS}") add_executable(pngvalid ${pngvalid_sources}) - target_link_libraries(pngvalid png) + target_link_libraries(pngvalid PRIVATE png_shared) png_add_test(NAME pngvalid-gamma-16-to-8 - COMMAND pngvalid OPTIONS --gamma-16-to-8) + COMMAND pngvalid + OPTIONS --gamma-16-to-8) png_add_test(NAME pngvalid-gamma-alpha-mode - COMMAND pngvalid OPTIONS --gamma-alpha-mode) + COMMAND pngvalid + OPTIONS --gamma-alpha-mode) png_add_test(NAME pngvalid-gamma-background - COMMAND pngvalid OPTIONS --gamma-background) + COMMAND pngvalid + OPTIONS --gamma-background) png_add_test(NAME pngvalid-gamma-expand16-alpha-mode - COMMAND pngvalid OPTIONS --gamma-alpha-mode --expand16) + COMMAND pngvalid + OPTIONS --gamma-alpha-mode --expand16) png_add_test(NAME pngvalid-gamma-expand16-background - COMMAND pngvalid OPTIONS --gamma-background --expand16) + COMMAND pngvalid + OPTIONS --gamma-background --expand16) png_add_test(NAME pngvalid-gamma-expand16-transform - COMMAND pngvalid OPTIONS --gamma-transform --expand16) + COMMAND pngvalid + OPTIONS --gamma-transform --expand16) png_add_test(NAME pngvalid-gamma-sbit - COMMAND pngvalid OPTIONS --gamma-sbit) + COMMAND pngvalid + OPTIONS --gamma-sbit) png_add_test(NAME pngvalid-gamma-threshold - COMMAND pngvalid OPTIONS --gamma-threshold) + COMMAND pngvalid + OPTIONS --gamma-threshold) png_add_test(NAME pngvalid-gamma-transform - COMMAND pngvalid OPTIONS --gamma-transform) + COMMAND pngvalid + OPTIONS --gamma-transform) png_add_test(NAME pngvalid-progressive-interlace-standard - COMMAND pngvalid OPTIONS --standard --progressive-read --interlace) + COMMAND pngvalid + OPTIONS --standard --progressive-read --interlace) png_add_test(NAME pngvalid-progressive-size - COMMAND pngvalid OPTIONS --size --progressive-read) + COMMAND pngvalid + OPTIONS --size --progressive-read) png_add_test(NAME pngvalid-progressive-standard - COMMAND pngvalid OPTIONS --standard --progressive-read) + COMMAND pngvalid + OPTIONS --standard --progressive-read) png_add_test(NAME pngvalid-standard - COMMAND pngvalid OPTIONS --standard) + COMMAND pngvalid + OPTIONS --standard) png_add_test(NAME pngvalid-transform - COMMAND pngvalid OPTIONS --transform) + COMMAND pngvalid + OPTIONS --transform) add_executable(pngstest ${pngstest_sources}) - target_link_libraries(pngstest png) + target_link_libraries(pngstest PRIVATE png_shared) foreach(gamma_type 1.8 linear none sRGB) foreach(alpha_type none alpha) set(PNGSTEST_FILES) foreach(test_png ${TEST_PNGS}) - string(REGEX MATCH ".*-linear[-.].*" TEST_PNG_LINEAR "${test_png}") - string(REGEX MATCH ".*-sRGB[-.].*" TEST_PNG_SRGB "${test_png}") - string(REGEX MATCH ".*-1.8[-.].*" TEST_PNG_G18 "${test_png}") - string(REGEX MATCH ".*-alpha-.*" TEST_PNG_ALPHA "${test_png}") + string(REGEX MATCH "-linear[-.]" TEST_PNG_LINEAR "${test_png}") + string(REGEX MATCH "-sRGB[-.]" TEST_PNG_SRGB "${test_png}") + string(REGEX MATCH "-1.8[-.]" TEST_PNG_G18 "${test_png}") + string(REGEX MATCH "-alpha-" TEST_PNG_ALPHA "${test_png}") set(TEST_PNG_VALID TRUE) if(TEST_PNG_ALPHA) - if (NOT "${alpha_type}" STREQUAL "alpha") + if(NOT alpha_type STREQUAL "alpha") set(TEST_PNG_VALID FALSE) endif() else() - if ("${alpha_type}" STREQUAL "alpha") + if(alpha_type STREQUAL "alpha") set(TEST_PNG_VALID FALSE) endif() endif() if(TEST_PNG_LINEAR) - if(NOT "${gamma_type}" STREQUAL "linear") + if(NOT gamma_type STREQUAL "linear") set(TEST_PNG_VALID FALSE) endif() elseif(TEST_PNG_SRGB) - if(NOT "${gamma_type}" STREQUAL "sRGB") + if(NOT gamma_type STREQUAL "sRGB") set(TEST_PNG_VALID FALSE) endif() elseif(TEST_PNG_G18) - if(NOT "${gamma_type}" STREQUAL "1.8") + if(NOT gamma_type STREQUAL "1.8") set(TEST_PNG_VALID FALSE) endif() else() - if(NOT "${gamma_type}" STREQUAL "none") + if(NOT gamma_type STREQUAL "none") set(TEST_PNG_VALID FALSE) endif() endif() @@ -728,218 +814,249 @@ if(PNG_TESTS AND PNG_SHARED) endforeach() add_executable(pngunknown ${pngunknown_sources}) - target_link_libraries(pngunknown png) - - png_add_test(NAME pngunknown-discard COMMAND pngunknown OPTIONS --strict default=discard FILES "${PNGTEST_PNG}") - png_add_test(NAME pngunknown-IDAT COMMAND pngunknown OPTIONS --strict default=discard IDAT=save FILES "${PNGTEST_PNG}") - png_add_test(NAME pngunknown-if-safe COMMAND pngunknown OPTIONS --strict default=if-safe FILES "${PNGTEST_PNG}") - png_add_test(NAME pngunknown-sAPI COMMAND pngunknown OPTIONS --strict bKGD=save cHRM=save gAMA=save all=discard iCCP=save sBIT=save sRGB=save FILES "${PNGTEST_PNG}") - png_add_test(NAME pngunknown-save COMMAND pngunknown OPTIONS --strict default=save FILES "${PNGTEST_PNG}") - png_add_test(NAME pngunknown-sTER COMMAND pngunknown OPTIONS --strict sTER=if-safe FILES "${PNGTEST_PNG}") - png_add_test(NAME pngunknown-vpAg COMMAND pngunknown OPTIONS --strict vpAg=if-safe FILES "${PNGTEST_PNG}") + target_link_libraries(pngunknown PRIVATE png_shared) + + png_add_test(NAME pngunknown-discard + COMMAND pngunknown + OPTIONS --strict default=discard + FILES "${PNGTEST_PNG}") + png_add_test(NAME pngunknown-IDAT + COMMAND pngunknown + OPTIONS --strict default=discard IDAT=save + FILES "${PNGTEST_PNG}") + png_add_test(NAME pngunknown-if-safe + COMMAND pngunknown + OPTIONS --strict default=if-safe + FILES "${PNGTEST_PNG}") + png_add_test(NAME pngunknown-sAPI + COMMAND pngunknown + OPTIONS --strict bKGD=save cHRM=save gAMA=save all=discard iCCP=save sBIT=save sRGB=save + FILES "${PNGTEST_PNG}") + png_add_test(NAME pngunknown-save + COMMAND pngunknown + OPTIONS --strict default=save + FILES "${PNGTEST_PNG}") + png_add_test(NAME pngunknown-sTER + COMMAND pngunknown + OPTIONS --strict sTER=if-safe + FILES "${PNGTEST_PNG}") + png_add_test(NAME pngunknown-vpAg + COMMAND pngunknown + OPTIONS --strict vpAg=if-safe + FILES "${PNGTEST_PNG}") add_executable(pngimage ${pngimage_sources}) - target_link_libraries(pngimage png) - - png_add_test(NAME pngimage-quick COMMAND pngimage OPTIONS --list-combos --log FILES ${PNGSUITE_PNGS}) - png_add_test(NAME pngimage-full COMMAND pngimage OPTIONS --exhaustive --list-combos --log FILES ${PNGSUITE_PNGS}) + target_link_libraries(pngimage PRIVATE png_shared) + + png_add_test(NAME pngimage-quick + COMMAND pngimage + OPTIONS --list-combos --log + FILES ${PNGSUITE_PNGS}) + png_add_test(NAME pngimage-full + COMMAND pngimage + OPTIONS --exhaustive --list-combos --log + FILES ${PNGSUITE_PNGS}) endif() -if(PNG_SHARED) +if(PNG_SHARED AND PNG_TOOLS) add_executable(pngfix ${pngfix_sources}) - target_link_libraries(pngfix png) + target_link_libraries(pngfix PRIVATE png_shared) set(PNG_BIN_TARGETS pngfix) add_executable(png-fix-itxt ${png_fix_itxt_sources}) - target_link_libraries(png-fix-itxt ${ZLIB_LIBRARY} ${M_LIBRARY}) + target_link_libraries(png-fix-itxt PRIVATE ZLIB::ZLIB ${M_LIBRARY}) list(APPEND PNG_BIN_TARGETS png-fix-itxt) endif() -# Set a variable with CMake code which: -# Creates a symlink from src to dest (if possible) or alternatively -# copies if different. -include(CMakeParseArguments) - -function(CREATE_SYMLINK DEST_FILE) - - cmake_parse_arguments(S "" "FILE;TARGET" "" ${ARGN}) - - if(NOT S_TARGET AND NOT S_FILE) - message(FATAL_ERROR "Specify either a TARGET or a FILE for CREATE_SYMLINK to link to.") - endif(NOT S_TARGET AND NOT S_FILE) - - if(S_TARGET AND S_FILE) - message(FATAL_ERROR "CREATE_SYMLINK called with both source file ${S_FILE} and build target ${S_TARGET} arguments - can only handle 1 type per call.") - endif(S_TARGET AND S_FILE) +# Create a symlink that points to a target file (if symlinking is possible), +# or make a copy of the target file (if symlinking is not possible): +# create_symlink( [FILE | TARGET ]) +function(create_symlink DEST_FILE) + # TODO: + # Replace this implementation with CMake's built-in create_symlink function, + # which has been fully functional on all platforms, including Windows, since + # CMake version 3.13. + cmake_parse_arguments(_SYM "" "FILE;TARGET" "" ${ARGN}) + if(NOT _SYM_FILE AND NOT _SYM_TARGET) + message(FATAL_ERROR "create_symlink: Missing FILE or TARGET argument") + endif() + if(_SYM_FILE AND _SYM_TARGET) + message(FATAL_ERROR "create_symlink: " + "The arguments FILE (${_SYM_FILE}) and TARGET (${_SYM_TARGET}) " + "are mutually-exclusive") + endif() - if(S_FILE) + if(_SYM_FILE) # If we don't need to symlink something that's coming from a build target, # we can go ahead and symlink/copy at configure time. + if(CMAKE_HOST_WIN32 AND NOT CYGWIN) + execute_process(COMMAND "${CMAKE_COMMAND}" + -E copy_if_different + ${_SYM_FILE} ${DEST_FILE} + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") + else() + execute_process(COMMAND "${CMAKE_COMMAND}" + -E create_symlink + ${_SYM_FILE} ${DEST_FILE} + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") + endif() + endif() - if(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS) - execute_process( - COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${S_FILE} ${DEST_FILE} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" - ) - else(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS) - execute_process( - COMMAND ${CMAKE_COMMAND} -E create_symlink ${S_FILE} ${DEST_FILE} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" - ) - endif(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS) - endif(S_FILE) - - if(S_TARGET) - # We need to use generator expressions, which can be a bit tricky, so for - # simplicity make the symlink a POST_BUILD step and use the TARGET + if(_SYM_TARGET) + # We need to use generator expressions, which can be a bit tricky. + # For simplicity, make the symlink a POST_BUILD step, and use the TARGET # signature of add_custom_command. - - if(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS) - add_custom_command(TARGET ${S_TARGET} POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E copy_if_different $ $/${DEST_FILE} - ) - else(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS) - add_custom_command(TARGET ${S_TARGET} POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E create_symlink $ $/${DEST_FILE} - ) - endif(CMAKE_HOST_WIN32 AND NOT CYGWIN AND NOT MSYS) - - endif(S_TARGET) - + if(CMAKE_HOST_WIN32 AND NOT CYGWIN) + add_custom_command(TARGET ${_SYM_TARGET} + POST_BUILD + COMMAND "${CMAKE_COMMAND}" + -E copy_if_different + $/$ + $/${DEST_FILE}) + else() + add_custom_command(TARGET ${_SYM_TARGET} + POST_BUILD + COMMAND "${CMAKE_COMMAND}" + -E create_symlink + $ + $/${DEST_FILE}) + endif() + endif() endfunction() # Create source generation scripts. -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genchk.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/scripts/genchk.cmake @ONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/genout.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/scripts/genout.cmake @ONLY) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/gensrc.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/scripts/gensrc.cmake @ONLY) - +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/genchk.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genchk.cmake + @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/genout.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/genout.cmake + @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/gensrc.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/scripts/cmake/gensrc.cmake + @ONLY) # libpng is a library so default to 'lib' if(NOT DEFINED CMAKE_INSTALL_LIBDIR) set(CMAKE_INSTALL_LIBDIR lib) -endif(NOT DEFINED CMAKE_INSTALL_LIBDIR) +endif() -# CREATE PKGCONFIG FILES -# we use the same files like ./configure, so we have to set its vars -# Only do this on Windows for Cygwin - the files don't make much sense outside -# a UNIX look alike +# Create pkgconfig files. +# We use the same files like ./configure, so we have to set its vars. +# Only do this on Windows for Cygwin - the files don't make much sense +# outside of a UNIX look-alike. if(NOT WIN32 OR CYGWIN OR MINGW) set(prefix ${CMAKE_INSTALL_PREFIX}) set(exec_prefix ${CMAKE_INSTALL_PREFIX}) - set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) - set(includedir ${CMAKE_INSTALL_PREFIX}/include) + set(libdir ${CMAKE_INSTALL_FULL_LIBDIR}) + set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR}) set(LIBS "-lz -lm") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc @ONLY) - CREATE_SYMLINK(libpng.pc FILE ${PNGLIB_NAME}.pc) - + ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}.pc + @ONLY) + create_symlink(libpng.pc FILE libpng${PNGLIB_ABI_VERSION}.pc) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libpng-config.in - ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config @ONLY) - CREATE_SYMLINK(libpng-config FILE ${PNGLIB_NAME}-config) -endif(NOT WIN32 OR CYGWIN OR MINGW) - -# SET UP LINKS -if(PNG_SHARED) - set_target_properties(png PROPERTIES -# VERSION 16.${PNGLIB_RELEASE}.1.6.34 - VERSION 16.${PNGLIB_RELEASE}.0 - SOVERSION 16 - CLEAN_DIRECT_OUTPUT 1) + ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config + @ONLY) + create_symlink(libpng-config FILE libpng${PNGLIB_ABI_VERSION}-config) endif() -# If CMake > 2.4.x, we set a variable used below to export -# targets to an export file. -# TODO: Use VERSION_GREATER after our cmake_minimum_required >= 2.6.2 -if(CMAKE_MAJOR_VERSION GREATER 1 AND CMAKE_MINOR_VERSION GREATER 4) - set(PNG_EXPORT_RULE EXPORT libpng) -elseif(CMAKE_MAJOR_VERSION GREATER 2) # future proof - set(PNG_EXPORT_RULE EXPORT libpng) -endif() - -# INSTALL -if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) - install(TARGETS ${PNG_LIB_TARGETS} - ${PNG_EXPORT_RULE} - RUNTIME DESTINATION bin - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}) +# Install. +if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL) + install(TARGETS ${PNG_LIBRARY_TARGETS} + EXPORT libpng + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}) if(PNG_SHARED) # Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin - if(CYGWIN OR MINGW) - CREATE_SYMLINK(libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} TARGET png) - install(FILES $/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif(CYGWIN OR MINGW) - - if(NOT WIN32) - CREATE_SYMLINK(libpng${CMAKE_SHARED_LIBRARY_SUFFIX} TARGET png) - install(FILES $/libpng${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif(NOT WIN32) - endif(PNG_SHARED) + if(NOT WIN32 OR CYGWIN OR MINGW) + create_symlink(libpng${CMAKE_SHARED_LIBRARY_SUFFIX} TARGET png_shared) + install(FILES $/libpng${CMAKE_SHARED_LIBRARY_SUFFIX} + DESTINATION ${CMAKE_INSTALL_LIBDIR}) + endif() + endif() if(PNG_STATIC) if(NOT WIN32 OR CYGWIN OR MINGW) - CREATE_SYMLINK( libpng${CMAKE_STATIC_LIBRARY_SUFFIX} TARGET png_static) - install(FILES $/libpng${CMAKE_STATIC_LIBRARY_SUFFIX} DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif(NOT WIN32 OR CYGWIN OR MINGW) - endif() + create_symlink(libpng${CMAKE_STATIC_LIBRARY_SUFFIX} TARGET png_static) + install(FILES $/libpng${CMAKE_STATIC_LIBRARY_SUFFIX} + DESTINATION ${CMAKE_INSTALL_LIBDIR}) + endif() + endif() endif() -if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) - install(FILES ${libpng_public_hdrs} DESTINATION include) - install(FILES ${libpng_public_hdrs} DESTINATION include/${PNGLIB_NAME}) +if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL) + install(FILES ${libpng_public_hdrs} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install(FILES ${libpng_public_hdrs} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libpng${PNGLIB_ABI_VERSION}) endif() -if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL ) +if(NOT SKIP_INSTALL_EXECUTABLES AND NOT SKIP_INSTALL_ALL) if(NOT WIN32 OR CYGWIN OR MINGW) - install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config DESTINATION bin) - install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config - DESTINATION bin) - endif(NOT WIN32 OR CYGWIN OR MINGW) + install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config + DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config + DESTINATION ${CMAKE_INSTALL_BINDIR}) + endif() endif() -if(NOT SKIP_INSTALL_PROGRAMS AND NOT SKIP_INSTALL_ALL ) +if(NOT SKIP_INSTALL_PROGRAMS AND NOT SKIP_INSTALL_ALL) install(TARGETS ${PNG_BIN_TARGETS} - RUNTIME DESTINATION bin) + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() -if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) - # Install man pages - if(NOT PNG_MAN_DIR) - set(PNG_MAN_DIR "share/man") - endif() - install(FILES libpng.3 libpngpf.3 DESTINATION ${PNG_MAN_DIR}/man3) - install(FILES png.5 DESTINATION ${PNG_MAN_DIR}/man5) - # Install pkg-config files +if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL) + # Install the man pages. + install(FILES libpng.3 libpngpf.3 + DESTINATION ${CMAKE_INSTALL_MANDIR}/man3) + install(FILES png.5 + DESTINATION ${CMAKE_INSTALL_MANDIR}/man5) + # Install the pkg-config files. if(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config - DESTINATION bin) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc + DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config - DESTINATION bin) - endif(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW) + install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng${PNGLIB_ABI_VERSION}-config + DESTINATION ${CMAKE_INSTALL_BINDIR}) + endif() endif() -# On versions of CMake that support it, create an export file CMake -# users can include() to import our targets -if(PNG_EXPORT_RULE AND NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL ) - install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake) +# Create an export file that CMake users can include() to import our targets. +if(NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL) + install(EXPORT libpng + DESTINATION ${CMAKE_INSTALL_LIBDIR}/libpng + FILE libpng${PNGLIB_ABI_VERSION}.cmake) endif() -# what's with libpng-manual.txt and all the extra files? - -# UNINSTALL -# do we need this? - -# DIST -# do we need this? +# Create a CMake Config File that can be used via find_package(PNG CONFIG) +if(NOT SKIP_INSTALL_CONFIG_FILE AND NOT SKIP_INSTALL_ALL) + install(TARGETS ${PNG_LIBRARY_TARGETS} + EXPORT PNGTargets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}) + + include(CMakePackageConfigHelpers) + write_basic_package_version_file(PNGConfigVersion.cmake + VERSION ${PNGLIB_VERSION} + COMPATIBILITY SameMinorVersion) + + install(EXPORT PNGTargets + FILE PNGTargets.cmake + NAMESPACE PNG:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PNG) + + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/PNGConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/PNGConfigVersion.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PNG) +endif() -# to create msvc import lib for mingw compiled shared lib +# TODO: Create MSVC import lib for MinGW-compiled shared lib. # pexports libpng.dll > libpng.def # lib /def:libpng.def /machine:x86 diff --git a/vs/libpng/INSTALL b/vs/libpng/INSTALL index e8edb7240f4..df1a494468b 100644 --- a/vs/libpng/INSTALL +++ b/vs/libpng/INSTALL @@ -1,4 +1,3 @@ - Installing libpng Contents @@ -128,16 +127,18 @@ Your directory structure should look like this: README *.h, *.c => libpng source files CMakeLists.txt => "cmake" script + ci + ci_*.sh configuration files: configure.ac, configure, Makefile.am, Makefile.in, autogen.sh, config.guess, ltmain.sh, missing, libpng.pc.in, libpng-config.in, aclocal.m4, config.h.in, config.sub, - depcomp, install-sh, mkinstalldirs, test-pngtest.sh + depcomp, install-sh, mkinstalldirs, test-pngtest.sh, etc. contrib arm-neon, conftest, examples, gregbook, libtests, pngminim, pngminus, pngsuite, tools, visupng projects - cbuilder5, owatcom, visualc71, vstudio, xcode + owatcom, visualc71, vstudio scripts makefile.* *.def (module definition files) @@ -145,7 +146,7 @@ Your directory structure should look like this: pngtest.png etc. zlib - README, *.h, *.c contrib, etc. + README, *.h, *.c, contrib, etc. If the line endings in the files look funny, you may wish to get the other distribution of libpng. It is available in both tar.gz (UNIX style line @@ -153,28 +154,27 @@ endings) and zip (DOS style line endings) formats. VI. Building with project files -If you are building libpng with MSVC, you can enter the -libpng projects\visualc71 or vstudio directory and follow the instructions -in README.txt. +If you are building libpng with Microsoft Visual Studio, you can enter +the directory projects\visualc71 or projects\vstudio and follow the +instructions in README.txt. -Otherwise enter the zlib directory and follow the instructions in zlib/README, -then come back here and run "configure" or choose the appropriate -makefile.sys in the scripts directory. +Otherwise, enter the zlib directory and follow the instructions in +zlib/README, then come back here and run "configure" or choose the +appropriate makefile in the scripts directory. VII. Building with makefiles Copy the file (or files) that you need from the scripts directory into this directory, for example -MSDOS example: +UNIX example: - copy scripts\makefile.msc makefile - copy scripts\pnglibconf.h.prebuilt pnglibconf.h + cp scripts/makefile.std Makefile + make -UNIX example: +Windows example: - cp scripts/makefile.std makefile - cp scripts/pnglibconf.h.prebuilt pnglibconf.h + nmake -f scripts\makefile.vcwin32 Read the makefile to see if you need to change any source or target directories to match your preferences. @@ -191,36 +191,33 @@ test. For more confidence, you can run another test by typing Also, you can run "pngtest -m contrib/pngsuite/*.png" and compare your output with the result shown in contrib/pngsuite/README. -Most of the makefiles will allow you to run "make install" to -put the library in its final resting place (if you want to -do that, run "make install" in the zlib directory first if necessary). -Some also allow you to run "make test-installed" after you have -run "make install". - -VIII. Configuring libpng for 16-bit platforms +Most of the makefiles used to allow you to run "make install" to put +the library in its final resting place, but that feature is no longer +supported. The only tested and supported manners to install libpng are +the conventional build and install procedures driven by the configure +script or by the CMake file. -You will want to look into zconf.h to tell zlib (and thus libpng) that -it cannot allocate more than 64K at a time. Even if you can, the memory -won't be accessible. So limit zlib and libpng to 64K by defining MAXSEG_64K. +VIII. Configuring for DOS and other 16-bit platforms -IX. Configuring for DOS +Officially, the support for 16-bit platforms has been removed. For DOS users who only have access to the lower 640K, you will have to limit zlib's memory usage via a png_set_compression_mem_level() call. See zlib.h or zconf.h in the zlib library for more information. -X. Configuring for Medium Model +You may be or may not be in luck if you target the "large" memory model, +but all the smaller models ("small", "compact" and "medium") are known +to be unworkable. For DOS users who have access beyond the lower 640K, +a "flat" 32-bit DOS model (such as DJGPP) is strongly recommended. -Libpng's support for medium model has been tested on most of the popular -compilers. Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets -defined, and FAR gets defined to far in pngconf.h, and you should be -all set. Everything in the library (except for zlib's structure) is -expecting far data. You must use the typedefs with the p or pp on -the end for pointers (or at least look at them and be careful). Make -note that the rows of data are defined as png_bytepp, which is -an "unsigned char far * far *". +For DOS users who only have access to the lower 640K, you will have to +limit zlib's memory usage via a png_set_compression_mem_level() call. +You will also have to look into zconf.h to tell zlib (and thus libpng) +that it cannot allocate more than 64K at a time. Even if you can, the +memory won't be accessible. Therefore, you should limit zlib and libpng +to 64K by defining MAXSEG_64K. -XI. Prepending a prefix to exported symbols +IX. Prepending a prefix to exported symbols Starting with libpng-1.6.0, you can configure libpng (when using the "configure" script) to prefix all exported symbols by means of the @@ -231,7 +228,7 @@ identifier). This creates a set of macros in pnglibconf.h, so this is transparent to applications; their function calls get transformed by the macros to use the modified names. -XII. Configuring for compiler xxx: +X. Configuring for compiler xxx: All includes for libpng are in pngconf.h. If you need to add, change or delete an include, this is the place to do it. @@ -243,7 +240,7 @@ As of libpng-1.5.0, pngpriv.h also includes three other private header files, pngstruct.h, pnginfo.h, and pngdebug.h, which contain material that previously appeared in the public headers. -XIII. Removing unwanted object code +XI. Removing unwanted object code There are a bunch of #define's in pngconf.h that control what parts of libpng are compiled. All the defines end in _SUPPORTED. If you are @@ -282,9 +279,9 @@ library to fail if they call functions not available in your library. The size of the library itself should not be an issue, because only those sections that are actually used will be loaded into memory. -XIV. Enabling or disabling hardware optimizations +XII. Enabling or disabling hardware optimizations -Certain hardware capabilites, such as the Intel SSE instructions, +Certain hardware capabilities, such as the Intel SSE instructions, are normally detected at run time. Enable them with configure options such as one of @@ -332,7 +329,7 @@ or disable them all at once with cmake . -DPNG_HARDWARE_OPTIMIZATIONS=no -XV. Changes to the build and configuration of libpng in libpng-1.5.x +XIII. Changes to the build and configuration of libpng in libpng-1.5.x Details of internal changes to the library code can be found in the CHANGES file and in the GIT repository logs. These will be of no concern to the vast @@ -423,7 +420,7 @@ $PREFIX/include directory). Do not edit pnglibconf.h after you have built libpng, because than the settings would not accurately reflect the settings that were used to build libpng. -XVI. Setjmp/longjmp issues +XIV. Setjmp/longjmp issues Libpng uses setjmp()/longjmp() for error handling. Unfortunately setjmp() is known to be not thread-safe on some platforms and we don't know of @@ -441,7 +438,7 @@ This requires setjmp/longjmp, so you must either build the library with PNG_SETJMP_SUPPORTED defined, or with PNG_SIMPLIFIED_READ_SUPPORTED and PNG_SIMPLIFIED_WRITE_SUPPORTED undefined. -XVII. Common linking failures +XV. Common linking failures If your application fails to find libpng or zlib entries while linking: @@ -453,12 +450,13 @@ If your application fails to find libpng or zlib entries while linking: If you are using the vstudio project, observe the WARNING in project/vstudio/README.txt. -XVIII. Other sources of information about libpng: +XVI. Other sources of information about libpng: Further information can be found in the README and libpng-manual.txt files, in the individual makefiles, in png.h, and the manual pages libpng.3 and png.5. +Copyright (c) 2022 Cosmin Truta Copyright (c) 1998-2002,2006-2016 Glenn Randers-Pehrson This document is released under the libpng license. For conditions of distribution and use, see the disclaimer diff --git a/vs/libpng/LICENSE b/vs/libpng/LICENSE index 4cda4fa0add..ea6df986cb6 100644 --- a/vs/libpng/LICENSE +++ b/vs/libpng/LICENSE @@ -1,53 +1,82 @@ +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE +========================================= -This copy of the libpng notices is provided for your convenience. In case of -any discrepancy between this copy and the notices in the file png.h that is -included in the libpng distribution, the latter shall prevail. +PNG Reference Library License version 2 +--------------------------------------- -COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + * Copyright (c) 1995-2025 The PNG Reference Library Authors. + * Copyright (c) 2018-2025 Cosmin Truta. + * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson. + * Copyright (c) 1996-1997 Andreas Dilger. + * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. -If you modify libpng you may insert additional notices immediately following -this sentence. +The software is supplied "as is", without warranty of any kind, +express or implied, including, without limitation, the warranties +of merchantability, fitness for a particular purpose, title, and +non-infringement. In no event shall the Copyright owners, or +anyone distributing the software, be liable for any damages or +other liability, whether in contract, tort or otherwise, arising +from, out of, or in connection with the software, or the use or +other dealings in the software, even if advised of the possibility +of such damage. -This code is released under the libpng license. +Permission is hereby granted to use, copy, modify, and distribute +this software, or portions hereof, for any purpose, without fee, +subject to the following restrictions: -libpng versions 1.0.7, July 1, 2000 through 1.6.34, September 29, 2017 are -Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are + 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 Copyright notice may not be removed or altered from any + source or altered source distribution. + + +PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35) +----------------------------------------------------------------------- + +libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are +Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are derived from libpng-1.0.6, and are distributed according to the same disclaimer and license as libpng-1.0.6 with the following individuals added to the list of Contributing Authors: - Simon-Pierre Cadieux - Eric S. Raymond - Mans Rullgard - Cosmin Truta - Gilles Vollant - James Yu - Mandar Sahastrabuddhe - Google Inc. - Vadim Barkov + Simon-Pierre Cadieux + Eric S. Raymond + Mans Rullgard + Cosmin Truta + Gilles Vollant + James Yu + Mandar Sahastrabuddhe + Google Inc. + Vadim Barkov and with the following additions to the disclaimer: - There is no warranty against interference with your enjoyment of the - library or against infringement. There is no warranty that our - efforts or the library will fulfill any of your particular purposes - or needs. This library is provided with all faults, and the entire - risk of satisfactory quality, performance, accuracy, and effort is with - the user. + There is no warranty against interference with your enjoyment of + the library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is + with the user. Some files in the "contrib" directory and some configure-generated -files that are distributed with libpng have other copyright owners and +files that are distributed with libpng have other copyright owners, and are released under other open source licenses. libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from libpng-0.96, and are distributed according to the same disclaimer and -license as libpng-0.96, with the following individuals added to the list -of Contributing Authors: +license as libpng-0.96, with the following individuals added to the +list of Contributing Authors: - Tom Lane - Glenn Randers-Pehrson - Willem van Schaik + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik libpng versions 0.89, June 1996, through 0.96, May 1997, are Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88, @@ -55,14 +84,14 @@ and are distributed according to the same disclaimer and license as libpng-0.88, with the following individuals added to the list of Contributing Authors: - John Bowler - Kevin Bracey - Sam Bushell - Magnus Holmgren - Greg Roelofs - Tom Tanner + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner -Some files in the "scripts" directory have other copyright owners +Some files in the "scripts" directory have other copyright owners, but are released under this license. libpng versions 0.5, May 1995, through 0.88, January 1996, are @@ -71,63 +100,35 @@ Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. For the purposes of this copyright and license, "Contributing Authors" is defined as the following set of individuals: - Andreas Dilger - Dave Martindale - Guy Eric Schalnat - Paul Schmidt - Tim Wegner - -The PNG Reference Library is supplied "AS IS". The Contributing Authors -and Group 42, Inc. disclaim all warranties, expressed or implied, -including, without limitation, the warranties of merchantability and of -fitness for any purpose. The Contributing Authors and Group 42, Inc. -assume no liability for direct, indirect, incidental, special, exemplary, -or consequential damages, which may result from the use of the PNG -Reference Library, even if advised of the possibility of such damage. + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing +Authors and Group 42, Inc. disclaim all warranties, expressed or +implied, including, without limitation, the warranties of +merchantability and of fitness for any purpose. The Contributing +Authors and Group 42, Inc. assume no liability for direct, indirect, +incidental, special, exemplary, or consequential damages, which may +result from the use of the PNG Reference Library, even if advised of +the possibility of such damage. Permission is hereby granted to use, copy, modify, and distribute this source code, or portions hereof, for any purpose, without fee, subject to the following restrictions: - 1. The origin of this source code must not be misrepresented. - - 2. Altered versions must be plainly marked as such and must not - be misrepresented as being the original source. - - 3. This Copyright notice may not be removed or altered from any - source or altered source distribution. - -The Contributing Authors and Group 42, Inc. specifically permit, without -fee, and encourage the use of this source code as a component to -supporting the PNG file format in commercial products. If you use this -source code in a product, acknowledgment is not required but would be -appreciated. - -END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE. - -TRADEMARK: - -The name "libpng" has not been registered by the Copyright owner -as a trademark in any jurisdiction. However, because libpng has -been distributed and maintained world-wide, continually since 1995, -the Copyright owner claims "common-law trademark protection" in any -jurisdiction where common-law trademark is recognized. - -OSI CERTIFICATION: - -Libpng is OSI Certified Open Source Software. OSI Certified Open Source is -a certification mark of the Open Source Initiative. OSI has not addressed -the additional disclaimers inserted at version 1.0.7. + 1. The origin of this source code must not be misrepresented. -EXPORT CONTROL: + 2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. -The Copyright owner believes that the Export Control Classification -Number (ECCN) for libpng is EAR99, which means not subject to export -controls or International Traffic in Arms Regulations (ITAR) because -it is open source, publicly available software, that does not contain -any encryption software. See the EAR, paragraphs 734.3(b)(3) and -734.7(b). + 3. This Copyright notice may not be removed or altered from any + source or altered source distribution. -Glenn Randers-Pehrson -glennrp at users.sourceforge.net -September 29, 2017 +The Contributing Authors and Group 42, Inc. specifically permit, +without fee, and encourage the use of this source code as a component +to supporting the PNG file format in commercial products. If you use +this source code in a product, acknowledgment is not required but would +be appreciated. diff --git a/vs/libpng/Makefile.am b/vs/libpng/Makefile.am index 08db3e59909..217f1af8481 100644 --- a/vs/libpng/Makefile.am +++ b/vs/libpng/Makefile.am @@ -1,7 +1,7 @@ # Makefile.am, the source file for Makefile.in (and hence Makefile), is # +# Copyright (c) 2018-2025 Cosmin Truta # Copyright (c) 2004-2016 Glenn Randers-Pehrson -# Last changed in libpng 1.6.25 [September 1, 2016] # # This code is released under the libpng license. # For conditions of distribution and use, see the disclaimer @@ -9,16 +9,24 @@ PNGLIB_BASENAME= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@ -ACLOCAL_AMFLAGS = -I scripts +ACLOCAL_AMFLAGS = -I scripts/autoconf # test programs - run on make check, make distcheck +if ENABLE_TESTS check_PROGRAMS= pngtest pngunknown pngstest pngvalid pngimage pngcp if HAVE_CLOCK_GETTIME check_PROGRAMS += timepng endif +else +check_PROGRAMS= +endif # Utilities - installed +if ENABLE_TOOLS bin_PROGRAMS= pngfix png-fix-itxt +else +bin_PROGRAMS= +endif # This ensures that pnglibconf.h gets built at the start of 'make all' or # 'make check', but it does not add dependencies to the individual programs, @@ -30,6 +38,7 @@ bin_PROGRAMS= pngfix png-fix-itxt # always wrong and always very confusing. BUILT_SOURCES = pnglibconf.h +if ENABLE_TESTS pngtest_SOURCES = pngtest.c pngtest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la @@ -48,19 +57,22 @@ pngimage_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la timepng_SOURCES = contrib/libtests/timepng.c timepng_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +pngcp_SOURCES = contrib/tools/pngcp.c +pngcp_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +endif + +if ENABLE_TOOLS pngfix_SOURCES = contrib/tools/pngfix.c pngfix_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la png_fix_itxt_SOURCES = contrib/tools/png-fix-itxt.c - -pngcp_SOURCES = contrib/tools/pngcp.c -pngcp_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +endif # Generally these are single line shell scripts to run a test with a particular # set of parameters: +if ENABLE_TESTS TESTS =\ - tests/pngtest\ - tests/pngtest-badpngs\ + tests/pngtest-all\ tests/pngvalid-gamma-16-to-8 tests/pngvalid-gamma-alpha-mode\ tests/pngvalid-gamma-background tests/pngvalid-gamma-expand16-alpha-mode\ tests/pngvalid-gamma-expand16-background\ @@ -76,6 +88,7 @@ TESTS =\ tests/pngunknown-discard tests/pngunknown-if-safe tests/pngunknown-sAPI\ tests/pngunknown-sTER tests/pngunknown-save tests/pngunknown-vpAg\ tests/pngimage-quick tests/pngimage-full +endif # man pages dist_man_MANS= libpng.3 libpngpf.3 png.5 @@ -95,7 +108,8 @@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = png.c pngerror.c\ if PNG_ARM_NEON libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += arm/arm_init.c\ - arm/filter_neon.S arm/filter_neon_intrinsics.c + arm/filter_neon_intrinsics.c \ + arm/palette_neon_intrinsics.c endif if PNG_MIPS_MSA @@ -103,6 +117,13 @@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += mips/mips_init.c\ mips/filter_msa_intrinsics.c endif +if PNG_MIPS_MMI +if !PNG_MIPS_MSA +libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += mips/mips_init.c +endif +libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += mips/filter_mmi_inline_assembly.c +endif + if PNG_INTEL_SSE libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += intel/intel_init.c\ intel/filter_sse2_intrinsics.c @@ -113,6 +134,15 @@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += powerpc/powerpc_init.c\ powerpc/filter_vsx_intrinsics.c endif +if PNG_LOONGARCH_LSX +noinst_LTLIBRARIES= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx.la +libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_SOURCES = loongarch/loongarch_lsx_init.c\ + loongarch/filter_lsx_intrinsics.c +libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_CFLAGS = -mlsx +libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LIBADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx.la +# libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx.la +endif + nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = pnglibconf.h libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS = -no-undefined -export-dynamic \ @@ -133,6 +163,10 @@ else libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng.sym endif +if PNG_LOONGARCH_LSX + libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES += libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx.la +endif + #distribute headers in /usr/include/libpng/* pkgincludedir= $(includedir)/$(PNGLIB_BASENAME) pkginclude_HEADERS= png.h pngconf.h @@ -147,9 +181,9 @@ pkgconfig_DATA = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc # from those directories being included. This only works if the configure is # not done in the source directory! EXTRA_DIST= \ - ANNOUNCE CHANGES INSTALL LICENSE README TODO \ + ANNOUNCE AUTHORS CHANGES INSTALL LICENSE README TODO TRADEMARK \ pngtest.png pngbar.png pngnow.png pngbar.jpg autogen.sh \ - ${srcdir}/contrib ${srcdir}/projects ${srcdir}/scripts \ + ${srcdir}/ci ${srcdir}/contrib ${srcdir}/projects ${srcdir}/scripts \ $(TESTS) $(XFAIL_TESTS) tests/pngstest \ CMakeLists.txt example.c libpng-manual.txt @@ -165,7 +199,7 @@ MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess config.h.in \ config.sub configure depcomp install-sh ltmain.sh missing # PNG_COPTS give extra options for the C compiler to be used on all compilation -# steps (unless targe_CFLAGS is specified; that will take precedence over +# steps (unless target_CFLAGS is specified; that will take precedence over # AM_CFLAGS) PNG_COPTS = @PNG_COPTS@ AM_CFLAGS = ${PNG_COPTS} diff --git a/vs/libpng/Makefile.in b/vs/libpng/Makefile.in index b25f3387b29..a8dc362bd8d 100644 --- a/vs/libpng/Makefile.in +++ b/vs/libpng/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.17 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2024 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,8 +16,8 @@ # Makefile.am, the source file for Makefile.in (and hence Makefile), is # +# Copyright (c) 2018-2025 Cosmin Truta # Copyright (c) 2004-2016 Glenn Randers-Pehrson -# Last changed in libpng 1.6.25 [September 1, 2016] # # This code is released under the libpng license. # For conditions of distribution and use, see the disclaimer @@ -83,6 +83,8 @@ am__make_running_with_option = \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +am__rm_f = rm -f $(am__rm_f_notfound) +am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ @@ -100,37 +102,43 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -check_PROGRAMS = pngtest$(EXEEXT) pngunknown$(EXEEXT) \ - pngstest$(EXEEXT) pngvalid$(EXEEXT) pngimage$(EXEEXT) \ - pngcp$(EXEEXT) $(am__EXEEXT_1) -@HAVE_CLOCK_GETTIME_TRUE@am__append_1 = timepng -bin_PROGRAMS = pngfix$(EXEEXT) png-fix-itxt$(EXEEXT) +@ENABLE_TESTS_TRUE@check_PROGRAMS = pngtest$(EXEEXT) \ +@ENABLE_TESTS_TRUE@ pngunknown$(EXEEXT) pngstest$(EXEEXT) \ +@ENABLE_TESTS_TRUE@ pngvalid$(EXEEXT) pngimage$(EXEEXT) \ +@ENABLE_TESTS_TRUE@ pngcp$(EXEEXT) $(am__EXEEXT_1) +@ENABLE_TESTS_TRUE@@HAVE_CLOCK_GETTIME_TRUE@am__append_1 = timepng +@ENABLE_TOOLS_TRUE@bin_PROGRAMS = pngfix$(EXEEXT) \ +@ENABLE_TOOLS_TRUE@ png-fix-itxt$(EXEEXT) @PNG_ARM_NEON_TRUE@am__append_2 = arm/arm_init.c\ -@PNG_ARM_NEON_TRUE@ arm/filter_neon.S arm/filter_neon_intrinsics.c +@PNG_ARM_NEON_TRUE@ arm/filter_neon_intrinsics.c \ +@PNG_ARM_NEON_TRUE@ arm/palette_neon_intrinsics.c @PNG_MIPS_MSA_TRUE@am__append_3 = mips/mips_init.c\ @PNG_MIPS_MSA_TRUE@ mips/filter_msa_intrinsics.c -@PNG_INTEL_SSE_TRUE@am__append_4 = intel/intel_init.c\ +@PNG_MIPS_MMI_TRUE@@PNG_MIPS_MSA_FALSE@am__append_4 = mips/mips_init.c +@PNG_MIPS_MMI_TRUE@am__append_5 = mips/filter_mmi_inline_assembly.c +@PNG_INTEL_SSE_TRUE@am__append_6 = intel/intel_init.c\ @PNG_INTEL_SSE_TRUE@ intel/filter_sse2_intrinsics.c -@PNG_POWERPC_VSX_TRUE@am__append_5 = powerpc/powerpc_init.c\ +@PNG_POWERPC_VSX_TRUE@am__append_7 = powerpc/powerpc_init.c\ @PNG_POWERPC_VSX_TRUE@ powerpc/filter_vsx_intrinsics.c # Versioned symbols and restricted exports -@HAVE_LD_VERSION_SCRIPT_TRUE@@HAVE_SOLARIS_LD_TRUE@am__append_6 = -Wl,-M -Wl,libpng.vers -@HAVE_LD_VERSION_SCRIPT_TRUE@@HAVE_SOLARIS_LD_FALSE@am__append_7 = -Wl,--version-script=libpng.vers +@HAVE_LD_VERSION_SCRIPT_TRUE@@HAVE_SOLARIS_LD_TRUE@am__append_8 = -Wl,-M -Wl,libpng.vers +@HAVE_LD_VERSION_SCRIPT_TRUE@@HAVE_SOLARIS_LD_FALSE@am__append_9 = -Wl,--version-script=libpng.vers # Only restricted exports when possible -@HAVE_LD_VERSION_SCRIPT_FALSE@am__append_8 = -export-symbols libpng.sym -@DO_PNG_PREFIX_TRUE@am__append_9 = -DPNG_PREFIX='@PNG_PREFIX@' +@HAVE_LD_VERSION_SCRIPT_FALSE@am__append_10 = -export-symbols libpng.sym +@PNG_LOONGARCH_LSX_TRUE@am__append_11 = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx.la +@DO_PNG_PREFIX_TRUE@am__append_12 = -DPNG_PREFIX='@PNG_PREFIX@' subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/scripts/libtool.m4 \ - $(top_srcdir)/scripts/ltoptions.m4 \ - $(top_srcdir)/scripts/ltsugar.m4 \ - $(top_srcdir)/scripts/ltversion.m4 \ - $(top_srcdir)/scripts/lt~obsolete.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/scripts/autoconf/libtool.m4 \ + $(top_srcdir)/scripts/autoconf/ltoptions.m4 \ + $(top_srcdir)/scripts/autoconf/ltsugar.m4 \ + $(top_srcdir)/scripts/autoconf/ltversion.m4 \ + $(top_srcdir)/scripts/autoconf/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) @@ -142,6 +150,13 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = libpng.pc libpng-config CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" \ + "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man3dir)" \ + "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" \ + "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)" +@ENABLE_TESTS_TRUE@@HAVE_CLOCK_GETTIME_TRUE@am__EXEEXT_1 = \ +@ENABLE_TESTS_TRUE@@HAVE_CLOCK_GETTIME_TRUE@ timepng$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -164,40 +179,40 @@ am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ + { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \ } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ - "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man3dir)" \ - "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" \ - "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LIBADD = +LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) am__libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES_DIST = png.c \ pngerror.c pngget.c pngmem.c pngpread.c pngread.c pngrio.c \ pngrtran.c pngrutil.c pngset.c pngtrans.c pngwio.c pngwrite.c \ pngwtran.c pngwutil.c png.h pngconf.h pngdebug.h pnginfo.h \ pngpriv.h pngstruct.h pngusr.dfa arm/arm_init.c \ - arm/filter_neon.S arm/filter_neon_intrinsics.c \ + arm/filter_neon_intrinsics.c arm/palette_neon_intrinsics.c \ mips/mips_init.c mips/filter_msa_intrinsics.c \ - intel/intel_init.c intel/filter_sse2_intrinsics.c \ - powerpc/powerpc_init.c powerpc/filter_vsx_intrinsics.c + mips/filter_mmi_inline_assembly.c intel/intel_init.c \ + intel/filter_sse2_intrinsics.c powerpc/powerpc_init.c \ + powerpc/filter_vsx_intrinsics.c am__dirstamp = $(am__leading_dot)dirstamp -@PNG_ARM_NEON_TRUE@am__objects_1 = arm/arm_init.lo arm/filter_neon.lo \ -@PNG_ARM_NEON_TRUE@ arm/filter_neon_intrinsics.lo +@PNG_ARM_NEON_TRUE@am__objects_1 = arm/arm_init.lo \ +@PNG_ARM_NEON_TRUE@ arm/filter_neon_intrinsics.lo \ +@PNG_ARM_NEON_TRUE@ arm/palette_neon_intrinsics.lo @PNG_MIPS_MSA_TRUE@am__objects_2 = mips/mips_init.lo \ @PNG_MIPS_MSA_TRUE@ mips/filter_msa_intrinsics.lo -@PNG_INTEL_SSE_TRUE@am__objects_3 = intel/intel_init.lo \ +@PNG_MIPS_MMI_TRUE@@PNG_MIPS_MSA_FALSE@am__objects_3 = \ +@PNG_MIPS_MMI_TRUE@@PNG_MIPS_MSA_FALSE@ mips/mips_init.lo +@PNG_MIPS_MMI_TRUE@am__objects_4 = mips/filter_mmi_inline_assembly.lo +@PNG_INTEL_SSE_TRUE@am__objects_5 = intel/intel_init.lo \ @PNG_INTEL_SSE_TRUE@ intel/filter_sse2_intrinsics.lo -@PNG_POWERPC_VSX_TRUE@am__objects_4 = powerpc/powerpc_init.lo \ +@PNG_POWERPC_VSX_TRUE@am__objects_6 = powerpc/powerpc_init.lo \ @PNG_POWERPC_VSX_TRUE@ powerpc/filter_vsx_intrinsics.lo am_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS = png.lo pngerror.lo \ pngget.lo pngmem.lo pngpread.lo pngread.lo pngrio.lo \ pngrtran.lo pngrutil.lo pngset.lo pngtrans.lo pngwio.lo \ pngwrite.lo pngwtran.lo pngwutil.lo $(am__objects_1) \ - $(am__objects_2) $(am__objects_3) $(am__objects_4) + $(am__objects_2) $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS = \ $(am_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS) \ @@ -211,35 +226,69 @@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) \ $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS) $(LDFLAGS) -o \ $@ -@HAVE_CLOCK_GETTIME_TRUE@am__EXEEXT_1 = timepng$(EXEEXT) -PROGRAMS = $(bin_PROGRAMS) -am_png_fix_itxt_OBJECTS = contrib/tools/png-fix-itxt.$(OBJEXT) +libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_LIBADD = +am__libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_SOURCES_DIST = \ + loongarch/loongarch_lsx_init.c \ + loongarch/filter_lsx_intrinsics.c +@PNG_LOONGARCH_LSX_TRUE@am_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_OBJECTS = loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.lo \ +@PNG_LOONGARCH_LSX_TRUE@ loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.lo +libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_OBJECTS = \ + $(am_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_OBJECTS) +libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_LINK = $(LIBTOOL) $(AM_V_lt) \ + --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ + $(CCLD) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +@PNG_LOONGARCH_LSX_TRUE@am_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_rpath = +am__png_fix_itxt_SOURCES_DIST = contrib/tools/png-fix-itxt.c +@ENABLE_TOOLS_TRUE@am_png_fix_itxt_OBJECTS = \ +@ENABLE_TOOLS_TRUE@ contrib/tools/png-fix-itxt.$(OBJEXT) png_fix_itxt_OBJECTS = $(am_png_fix_itxt_OBJECTS) png_fix_itxt_LDADD = $(LDADD) -am_pngcp_OBJECTS = contrib/tools/pngcp.$(OBJEXT) +am__pngcp_SOURCES_DIST = contrib/tools/pngcp.c +@ENABLE_TESTS_TRUE@am_pngcp_OBJECTS = contrib/tools/pngcp.$(OBJEXT) pngcp_OBJECTS = $(am_pngcp_OBJECTS) -pngcp_DEPENDENCIES = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -am_pngfix_OBJECTS = contrib/tools/pngfix.$(OBJEXT) +@ENABLE_TESTS_TRUE@pngcp_DEPENDENCIES = \ +@ENABLE_TESTS_TRUE@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +am__pngfix_SOURCES_DIST = contrib/tools/pngfix.c +@ENABLE_TOOLS_TRUE@am_pngfix_OBJECTS = contrib/tools/pngfix.$(OBJEXT) pngfix_OBJECTS = $(am_pngfix_OBJECTS) -pngfix_DEPENDENCIES = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -am_pngimage_OBJECTS = contrib/libtests/pngimage.$(OBJEXT) +@ENABLE_TOOLS_TRUE@pngfix_DEPENDENCIES = \ +@ENABLE_TOOLS_TRUE@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +am__pngimage_SOURCES_DIST = contrib/libtests/pngimage.c +@ENABLE_TESTS_TRUE@am_pngimage_OBJECTS = \ +@ENABLE_TESTS_TRUE@ contrib/libtests/pngimage.$(OBJEXT) pngimage_OBJECTS = $(am_pngimage_OBJECTS) -pngimage_DEPENDENCIES = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -am_pngstest_OBJECTS = contrib/libtests/pngstest.$(OBJEXT) +@ENABLE_TESTS_TRUE@pngimage_DEPENDENCIES = \ +@ENABLE_TESTS_TRUE@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +am__pngstest_SOURCES_DIST = contrib/libtests/pngstest.c +@ENABLE_TESTS_TRUE@am_pngstest_OBJECTS = \ +@ENABLE_TESTS_TRUE@ contrib/libtests/pngstest.$(OBJEXT) pngstest_OBJECTS = $(am_pngstest_OBJECTS) -pngstest_DEPENDENCIES = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -am_pngtest_OBJECTS = pngtest.$(OBJEXT) +@ENABLE_TESTS_TRUE@pngstest_DEPENDENCIES = \ +@ENABLE_TESTS_TRUE@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +am__pngtest_SOURCES_DIST = pngtest.c +@ENABLE_TESTS_TRUE@am_pngtest_OBJECTS = pngtest.$(OBJEXT) pngtest_OBJECTS = $(am_pngtest_OBJECTS) -pngtest_DEPENDENCIES = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -am_pngunknown_OBJECTS = contrib/libtests/pngunknown.$(OBJEXT) +@ENABLE_TESTS_TRUE@pngtest_DEPENDENCIES = \ +@ENABLE_TESTS_TRUE@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +am__pngunknown_SOURCES_DIST = contrib/libtests/pngunknown.c +@ENABLE_TESTS_TRUE@am_pngunknown_OBJECTS = \ +@ENABLE_TESTS_TRUE@ contrib/libtests/pngunknown.$(OBJEXT) pngunknown_OBJECTS = $(am_pngunknown_OBJECTS) -pngunknown_DEPENDENCIES = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -am_pngvalid_OBJECTS = contrib/libtests/pngvalid.$(OBJEXT) +@ENABLE_TESTS_TRUE@pngunknown_DEPENDENCIES = \ +@ENABLE_TESTS_TRUE@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +am__pngvalid_SOURCES_DIST = contrib/libtests/pngvalid.c +@ENABLE_TESTS_TRUE@am_pngvalid_OBJECTS = \ +@ENABLE_TESTS_TRUE@ contrib/libtests/pngvalid.$(OBJEXT) pngvalid_OBJECTS = $(am_pngvalid_OBJECTS) -pngvalid_DEPENDENCIES = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -am_timepng_OBJECTS = contrib/libtests/timepng.$(OBJEXT) +@ENABLE_TESTS_TRUE@pngvalid_DEPENDENCIES = \ +@ENABLE_TESTS_TRUE@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +am__timepng_SOURCES_DIST = contrib/libtests/timepng.c +@ENABLE_TESTS_TRUE@am_timepng_OBJECTS = \ +@ENABLE_TESTS_TRUE@ contrib/libtests/timepng.$(OBJEXT) timepng_OBJECTS = $(am_timepng_OBJECTS) -timepng_DEPENDENCIES = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +@ENABLE_TESTS_TRUE@timepng_DEPENDENCIES = \ +@ENABLE_TESTS_TRUE@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la SCRIPTS = $(bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) @@ -255,18 +304,36 @@ am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ./$(DEPDIR)/png.Plo ./$(DEPDIR)/pngerror.Plo \ + ./$(DEPDIR)/pngget.Plo ./$(DEPDIR)/pngmem.Plo \ + ./$(DEPDIR)/pngpread.Plo ./$(DEPDIR)/pngread.Plo \ + ./$(DEPDIR)/pngrio.Plo ./$(DEPDIR)/pngrtran.Plo \ + ./$(DEPDIR)/pngrutil.Plo ./$(DEPDIR)/pngset.Plo \ + ./$(DEPDIR)/pngtest.Po ./$(DEPDIR)/pngtrans.Plo \ + ./$(DEPDIR)/pngwio.Plo ./$(DEPDIR)/pngwrite.Plo \ + ./$(DEPDIR)/pngwtran.Plo ./$(DEPDIR)/pngwutil.Plo \ + arm/$(DEPDIR)/arm_init.Plo \ + arm/$(DEPDIR)/filter_neon_intrinsics.Plo \ + arm/$(DEPDIR)/palette_neon_intrinsics.Plo \ + contrib/libtests/$(DEPDIR)/pngimage.Po \ + contrib/libtests/$(DEPDIR)/pngstest.Po \ + contrib/libtests/$(DEPDIR)/pngunknown.Po \ + contrib/libtests/$(DEPDIR)/pngvalid.Po \ + contrib/libtests/$(DEPDIR)/timepng.Po \ + contrib/tools/$(DEPDIR)/png-fix-itxt.Po \ + contrib/tools/$(DEPDIR)/pngcp.Po \ + contrib/tools/$(DEPDIR)/pngfix.Po \ + intel/$(DEPDIR)/filter_sse2_intrinsics.Plo \ + intel/$(DEPDIR)/intel_init.Plo \ + loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.Plo \ + loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.Plo \ + mips/$(DEPDIR)/filter_mmi_inline_assembly.Plo \ + mips/$(DEPDIR)/filter_msa_intrinsics.Plo \ + mips/$(DEPDIR)/mips_init.Plo \ + powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo \ + powerpc/$(DEPDIR)/powerpc_init.Plo am__mv = mv -f -CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -LTCPPASCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CCASFLAGS) $(CCASFLAGS) -AM_V_CPPAS = $(am__v_CPPAS_@AM_V@) -am__v_CPPAS_ = $(am__v_CPPAS_@AM_DEFAULT_V@) -am__v_CPPAS_0 = @echo " CPPAS " $@; -am__v_CPPAS_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ @@ -287,14 +354,18 @@ am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES) \ $(nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES) \ + $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_SOURCES) \ $(png_fix_itxt_SOURCES) $(pngcp_SOURCES) $(pngfix_SOURCES) \ $(pngimage_SOURCES) $(pngstest_SOURCES) $(pngtest_SOURCES) \ $(pngunknown_SOURCES) $(pngvalid_SOURCES) $(timepng_SOURCES) DIST_SOURCES = \ $(am__libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES_DIST) \ - $(png_fix_itxt_SOURCES) $(pngcp_SOURCES) $(pngfix_SOURCES) \ - $(pngimage_SOURCES) $(pngstest_SOURCES) $(pngtest_SOURCES) \ - $(pngunknown_SOURCES) $(pngvalid_SOURCES) $(timepng_SOURCES) + $(am__libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_SOURCES_DIST) \ + $(am__png_fix_itxt_SOURCES_DIST) $(am__pngcp_SOURCES_DIST) \ + $(am__pngfix_SOURCES_DIST) $(am__pngimage_SOURCES_DIST) \ + $(am__pngstest_SOURCES_DIST) $(am__pngtest_SOURCES_DIST) \ + $(am__pngunknown_SOURCES_DIST) $(am__pngvalid_SOURCES_DIST) \ + $(am__timepng_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -306,8 +377,8 @@ NROFF = nroff MANS = $(dist_man_MANS) DATA = $(pkgconfig_DATA) HEADERS = $(nodist_pkginclude_HEADERS) $(pkginclude_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ + config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -324,9 +395,6 @@ am__define_uniq_tagged_files = \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope AM_RECURSIVE_TARGETS = cscope check recheck am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ @@ -436,6 +504,7 @@ am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ + $$am__collect_skipped_logs \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the @@ -460,6 +529,11 @@ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ +if test -n '$(IGNORE_SKIPPED_LOGS)'; then \ + am__collect_skipped_logs='--collect-skipped-logs no'; \ +else \ + am__collect_skipped_logs=''; \ +fi; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ @@ -483,6 +557,7 @@ am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` +AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test @@ -506,7 +581,7 @@ TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(srcdir)/libpng-config.in \ - $(srcdir)/libpng.pc.in INSTALL README TODO compile \ + $(srcdir)/libpng.pc.in AUTHORS INSTALL README TODO compile \ config.guess config.sub depcomp install-sh ltmain.sh missing \ test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -514,18 +589,22 @@ distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ + find "$(distdir)" -type d ! -perm -700 -exec chmod u+rwx {} ';' \ + ; rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz -GZIP_ENV = --best +GZIP_ENV = -9 DIST_TARGETS = dist-xz dist-gzip +# Exists only to be overridden by the user if desired. +AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print +distcleancheck_listfiles = \ + find . \( -type f -a \! \ + \( -name .nfs* -o -name .smb* -o -name .__afs* \) \) -print #distribute headers in /usr/include/libpng/* pkgincludedir = $(includedir)/$(PNGLIB_BASENAME) @@ -546,6 +625,8 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -563,8 +644,10 @@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FILECMD = @FILECMD@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ @@ -604,11 +687,10 @@ PNGLIB_RELEASE = @PNGLIB_RELEASE@ PNGLIB_VERSION = @PNGLIB_VERSION@ # PNG_COPTS give extra options for the C compiler to be used on all compilation -# steps (unless targe_CFLAGS is specified; that will take precedence over +# steps (unless target_CFLAGS is specified; that will take precedence over # AM_CFLAGS) PNG_COPTS = @PNG_COPTS@ PNG_PREFIX = @PNG_PREFIX@ -POW_LIB = @POW_LIB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ @@ -626,8 +708,10 @@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ +am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ +am__xargs_n = @am__xargs_n@ # generate the -config scripts if required binconfigs = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config @@ -667,6 +751,7 @@ pkgconfigdir = @pkgconfigdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -676,7 +761,7 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ PNGLIB_BASENAME = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@ -ACLOCAL_AMFLAGS = -I scripts +ACLOCAL_AMFLAGS = -I scripts/autoconf # This ensures that pnglibconf.h gets built at the start of 'make all' or # 'make check', but it does not add dependencies to the individual programs, @@ -687,44 +772,43 @@ ACLOCAL_AMFLAGS = -I scripts # result in the installed (system) pnglibconf.h being used and the result is # always wrong and always very confusing. BUILT_SOURCES = pnglibconf.h -pngtest_SOURCES = pngtest.c -pngtest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -pngvalid_SOURCES = contrib/libtests/pngvalid.c -pngvalid_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -pngstest_SOURCES = contrib/libtests/pngstest.c -pngstest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -pngunknown_SOURCES = contrib/libtests/pngunknown.c -pngunknown_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -pngimage_SOURCES = contrib/libtests/pngimage.c -pngimage_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -timepng_SOURCES = contrib/libtests/timepng.c -timepng_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -pngfix_SOURCES = contrib/tools/pngfix.c -pngfix_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la -png_fix_itxt_SOURCES = contrib/tools/png-fix-itxt.c -pngcp_SOURCES = contrib/tools/pngcp.c -pngcp_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +@ENABLE_TESTS_TRUE@pngtest_SOURCES = pngtest.c +@ENABLE_TESTS_TRUE@pngtest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +@ENABLE_TESTS_TRUE@pngvalid_SOURCES = contrib/libtests/pngvalid.c +@ENABLE_TESTS_TRUE@pngvalid_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +@ENABLE_TESTS_TRUE@pngstest_SOURCES = contrib/libtests/pngstest.c +@ENABLE_TESTS_TRUE@pngstest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +@ENABLE_TESTS_TRUE@pngunknown_SOURCES = contrib/libtests/pngunknown.c +@ENABLE_TESTS_TRUE@pngunknown_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +@ENABLE_TESTS_TRUE@pngimage_SOURCES = contrib/libtests/pngimage.c +@ENABLE_TESTS_TRUE@pngimage_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +@ENABLE_TESTS_TRUE@timepng_SOURCES = contrib/libtests/timepng.c +@ENABLE_TESTS_TRUE@timepng_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +@ENABLE_TESTS_TRUE@pngcp_SOURCES = contrib/tools/pngcp.c +@ENABLE_TESTS_TRUE@pngcp_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +@ENABLE_TOOLS_TRUE@pngfix_SOURCES = contrib/tools/pngfix.c +@ENABLE_TOOLS_TRUE@pngfix_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la +@ENABLE_TOOLS_TRUE@png_fix_itxt_SOURCES = contrib/tools/png-fix-itxt.c # Generally these are single line shell scripts to run a test with a particular # set of parameters: -TESTS = \ - tests/pngtest\ - tests/pngtest-badpngs\ - tests/pngvalid-gamma-16-to-8 tests/pngvalid-gamma-alpha-mode\ - tests/pngvalid-gamma-background tests/pngvalid-gamma-expand16-alpha-mode\ - tests/pngvalid-gamma-expand16-background\ - tests/pngvalid-gamma-expand16-transform tests/pngvalid-gamma-sbit\ - tests/pngvalid-gamma-threshold tests/pngvalid-gamma-transform\ - tests/pngvalid-progressive-size\ - tests/pngvalid-progressive-interlace-standard\ - tests/pngvalid-transform\ - tests/pngvalid-progressive-standard tests/pngvalid-standard\ - tests/pngstest-1.8 tests/pngstest-1.8-alpha tests/pngstest-linear\ - tests/pngstest-linear-alpha tests/pngstest-none tests/pngstest-none-alpha\ - tests/pngstest-sRGB tests/pngstest-sRGB-alpha tests/pngunknown-IDAT\ - tests/pngunknown-discard tests/pngunknown-if-safe tests/pngunknown-sAPI\ - tests/pngunknown-sTER tests/pngunknown-save tests/pngunknown-vpAg\ - tests/pngimage-quick tests/pngimage-full +@ENABLE_TESTS_TRUE@TESTS = \ +@ENABLE_TESTS_TRUE@ tests/pngtest-all\ +@ENABLE_TESTS_TRUE@ tests/pngvalid-gamma-16-to-8 tests/pngvalid-gamma-alpha-mode\ +@ENABLE_TESTS_TRUE@ tests/pngvalid-gamma-background tests/pngvalid-gamma-expand16-alpha-mode\ +@ENABLE_TESTS_TRUE@ tests/pngvalid-gamma-expand16-background\ +@ENABLE_TESTS_TRUE@ tests/pngvalid-gamma-expand16-transform tests/pngvalid-gamma-sbit\ +@ENABLE_TESTS_TRUE@ tests/pngvalid-gamma-threshold tests/pngvalid-gamma-transform\ +@ENABLE_TESTS_TRUE@ tests/pngvalid-progressive-size\ +@ENABLE_TESTS_TRUE@ tests/pngvalid-progressive-interlace-standard\ +@ENABLE_TESTS_TRUE@ tests/pngvalid-transform\ +@ENABLE_TESTS_TRUE@ tests/pngvalid-progressive-standard tests/pngvalid-standard\ +@ENABLE_TESTS_TRUE@ tests/pngstest-1.8 tests/pngstest-1.8-alpha tests/pngstest-linear\ +@ENABLE_TESTS_TRUE@ tests/pngstest-linear-alpha tests/pngstest-none tests/pngstest-none-alpha\ +@ENABLE_TESTS_TRUE@ tests/pngstest-sRGB tests/pngstest-sRGB-alpha tests/pngunknown-IDAT\ +@ENABLE_TESTS_TRUE@ tests/pngunknown-discard tests/pngunknown-if-safe tests/pngunknown-sAPI\ +@ENABLE_TESTS_TRUE@ tests/pngunknown-sTER tests/pngunknown-save tests/pngunknown-vpAg\ +@ENABLE_TESTS_TRUE@ tests/pngimage-quick tests/pngimage-full # man pages @@ -740,14 +824,24 @@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = png.c pngerror.c \ pngrutil.c pngset.c pngtrans.c pngwio.c pngwrite.c pngwtran.c \ pngwutil.c png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h \ pngstruct.h pngusr.dfa $(am__append_2) $(am__append_3) \ - $(am__append_4) $(am__append_5) + $(am__append_4) $(am__append_5) $(am__append_6) \ + $(am__append_7) +@PNG_LOONGARCH_LSX_TRUE@noinst_LTLIBRARIES = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx.la +@PNG_LOONGARCH_LSX_TRUE@libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_SOURCES = loongarch/loongarch_lsx_init.c\ +@PNG_LOONGARCH_LSX_TRUE@ loongarch/filter_lsx_intrinsics.c + +@PNG_LOONGARCH_LSX_TRUE@libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_CFLAGS = -mlsx +@PNG_LOONGARCH_LSX_TRUE@libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LIBADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx.la +# libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx.la nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = pnglibconf.h libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS = -no-undefined \ -export-dynamic -version-number \ @PNGLIB_MAJOR@@PNGLIB_MINOR@:@PNGLIB_RELEASE@:0 \ - $(am__append_6) $(am__append_7) $(am__append_8) -@HAVE_LD_VERSION_SCRIPT_FALSE@libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng.sym -@HAVE_LD_VERSION_SCRIPT_TRUE@libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = libpng.vers + $(am__append_8) $(am__append_9) $(am__append_10) +@HAVE_LD_VERSION_SCRIPT_FALSE@libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = \ +@HAVE_LD_VERSION_SCRIPT_FALSE@ libpng.sym $(am__append_11) +@HAVE_LD_VERSION_SCRIPT_TRUE@libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES = \ +@HAVE_LD_VERSION_SCRIPT_TRUE@ libpng.vers $(am__append_11) pkginclude_HEADERS = png.h pngconf.h nodist_pkginclude_HEADERS = pnglibconf.h pkgconfig_DATA = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc @@ -756,9 +850,9 @@ pkgconfig_DATA = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc # from those directories being included. This only works if the configure is # not done in the source directory! EXTRA_DIST = \ - ANNOUNCE CHANGES INSTALL LICENSE README TODO \ + ANNOUNCE AUTHORS CHANGES INSTALL LICENSE README TODO TRADEMARK \ pngtest.png pngbar.png pngnow.png pngbar.jpg autogen.sh \ - ${srcdir}/contrib ${srcdir}/projects ${srcdir}/scripts \ + ${srcdir}/ci ${srcdir}/contrib ${srcdir}/projects ${srcdir}/scripts \ $(TESTS) $(XFAIL_TESTS) tests/pngstest \ CMakeLists.txt example.c libpng-manual.txt @@ -781,7 +875,7 @@ SUFFIXES = .chk .out SYMBOL_CFLAGS = -DPNGLIB_LIBNAME='PNG@PNGLIB_MAJOR@@PNGLIB_MINOR@_0' \ -DPNGLIB_VERSION='@PNGLIB_VERSION@' \ -DSYMBOL_PREFIX='$(SYMBOL_PREFIX)' -DPNG_NO_USE_READ_MACROS \ - -DPNG_BUILDING_SYMBOL_TABLE $(am__append_9) + -DPNG_BUILDING_SYMBOL_TABLE $(am__append_12) # EXT_LIST is a list of the possibly library directory extensions, this exists # because we can't find a good way of discovering the file extensions that are @@ -792,7 +886,7 @@ all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .chk .out .S .c .lo .log .o .obj .test .test$(EXEEXT) .trs +.SUFFIXES: .chk .out .c .lo .log .o .obj .test .test$(EXEEXT) .trs am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @@ -814,8 +908,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -832,12 +926,12 @@ config.h: stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h + $(AM_V_at)rm -f stamp-h1 + $(AM_V_GEN)cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ + $(AM_V_GEN)($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + $(AM_V_at)rm -f stamp-h1 + $(AM_V_at)touch $@ distclean-hdr: -rm -f config.h stamp-h1 @@ -845,6 +939,54 @@ libpng.pc: $(top_builddir)/config.status $(srcdir)/libpng.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ libpng-config: $(top_builddir)/config.status $(srcdir)/libpng-config.in cd $(top_builddir) && $(SHELL) ./config.status $@ +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && $(am__rm_f) $$files + +clean-binPROGRAMS: + $(am__rm_f) $(bin_PROGRAMS) + test -z "$(EXEEXT)" || $(am__rm_f) $(bin_PROGRAMS:$(EXEEXT)=) + +clean-checkPROGRAMS: + $(am__rm_f) $(check_PROGRAMS) + test -z "$(EXEEXT)" || $(am__rm_f) $(check_PROGRAMS:$(EXEEXT)=) install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @@ -871,50 +1013,60 @@ uninstall-libLTLIBRARIES: done clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + -$(am__rm_f) $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } + echo rm -f $${locs}; \ + $(am__rm_f) $${locs} + +clean-noinstLTLIBRARIES: + -$(am__rm_f) $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + echo rm -f $${locs}; \ + $(am__rm_f) $${locs} arm/$(am__dirstamp): @$(MKDIR_P) arm - @: > arm/$(am__dirstamp) + @: >>arm/$(am__dirstamp) arm/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) arm/$(DEPDIR) - @: > arm/$(DEPDIR)/$(am__dirstamp) + @: >>arm/$(DEPDIR)/$(am__dirstamp) arm/arm_init.lo: arm/$(am__dirstamp) arm/$(DEPDIR)/$(am__dirstamp) -arm/filter_neon.lo: arm/$(am__dirstamp) arm/$(DEPDIR)/$(am__dirstamp) arm/filter_neon_intrinsics.lo: arm/$(am__dirstamp) \ arm/$(DEPDIR)/$(am__dirstamp) +arm/palette_neon_intrinsics.lo: arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) mips/$(am__dirstamp): @$(MKDIR_P) mips - @: > mips/$(am__dirstamp) + @: >>mips/$(am__dirstamp) mips/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) mips/$(DEPDIR) - @: > mips/$(DEPDIR)/$(am__dirstamp) + @: >>mips/$(DEPDIR)/$(am__dirstamp) mips/mips_init.lo: mips/$(am__dirstamp) mips/$(DEPDIR)/$(am__dirstamp) mips/filter_msa_intrinsics.lo: mips/$(am__dirstamp) \ mips/$(DEPDIR)/$(am__dirstamp) +mips/filter_mmi_inline_assembly.lo: mips/$(am__dirstamp) \ + mips/$(DEPDIR)/$(am__dirstamp) intel/$(am__dirstamp): @$(MKDIR_P) intel - @: > intel/$(am__dirstamp) + @: >>intel/$(am__dirstamp) intel/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) intel/$(DEPDIR) - @: > intel/$(DEPDIR)/$(am__dirstamp) + @: >>intel/$(DEPDIR)/$(am__dirstamp) intel/intel_init.lo: intel/$(am__dirstamp) \ intel/$(DEPDIR)/$(am__dirstamp) intel/filter_sse2_intrinsics.lo: intel/$(am__dirstamp) \ intel/$(DEPDIR)/$(am__dirstamp) powerpc/$(am__dirstamp): @$(MKDIR_P) powerpc - @: > powerpc/$(am__dirstamp) + @: >>powerpc/$(am__dirstamp) powerpc/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) powerpc/$(DEPDIR) - @: > powerpc/$(DEPDIR)/$(am__dirstamp) + @: >>powerpc/$(DEPDIR)/$(am__dirstamp) powerpc/powerpc_init.lo: powerpc/$(am__dirstamp) \ powerpc/$(DEPDIR)/$(am__dirstamp) powerpc/filter_vsx_intrinsics.lo: powerpc/$(am__dirstamp) \ @@ -922,70 +1074,25 @@ powerpc/filter_vsx_intrinsics.lo: powerpc/$(am__dirstamp) \ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la: $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES) $(EXTRA_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_DEPENDENCIES) $(AM_V_CCLD)$(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LINK) -rpath $(libdir) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LIBADD) $(LIBS) -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ - fi; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p \ - || test -f $$p1 \ - ; then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' \ - -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' \ - `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list - -clean-checkPROGRAMS: - @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list +loongarch/$(am__dirstamp): + @$(MKDIR_P) loongarch + @: >>loongarch/$(am__dirstamp) +loongarch/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) loongarch/$(DEPDIR) + @: >>loongarch/$(DEPDIR)/$(am__dirstamp) +loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.lo: \ + loongarch/$(am__dirstamp) loongarch/$(DEPDIR)/$(am__dirstamp) +loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.lo: \ + loongarch/$(am__dirstamp) loongarch/$(DEPDIR)/$(am__dirstamp) + +libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx.la: $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_OBJECTS) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_DEPENDENCIES) $(EXTRA_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_DEPENDENCIES) + $(AM_V_CCLD)$(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_LINK) $(am_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_rpath) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_OBJECTS) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_LIBADD) $(LIBS) contrib/tools/$(am__dirstamp): @$(MKDIR_P) contrib/tools - @: > contrib/tools/$(am__dirstamp) + @: >>contrib/tools/$(am__dirstamp) contrib/tools/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) contrib/tools/$(DEPDIR) - @: > contrib/tools/$(DEPDIR)/$(am__dirstamp) + @: >>contrib/tools/$(DEPDIR)/$(am__dirstamp) contrib/tools/png-fix-itxt.$(OBJEXT): contrib/tools/$(am__dirstamp) \ contrib/tools/$(DEPDIR)/$(am__dirstamp) @@ -1006,10 +1113,10 @@ pngfix$(EXEEXT): $(pngfix_OBJECTS) $(pngfix_DEPENDENCIES) $(EXTRA_pngfix_DEPENDE $(AM_V_CCLD)$(LINK) $(pngfix_OBJECTS) $(pngfix_LDADD) $(LIBS) contrib/libtests/$(am__dirstamp): @$(MKDIR_P) contrib/libtests - @: > contrib/libtests/$(am__dirstamp) + @: >>contrib/libtests/$(am__dirstamp) contrib/libtests/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) contrib/libtests/$(DEPDIR) - @: > contrib/libtests/$(DEPDIR)/$(am__dirstamp) + @: >>contrib/libtests/$(DEPDIR)/$(am__dirstamp) contrib/libtests/pngimage.$(OBJEXT): contrib/libtests/$(am__dirstamp) \ contrib/libtests/$(DEPDIR)/$(am__dirstamp) @@ -1089,6 +1196,8 @@ mostlyclean-compile: -rm -f contrib/tools/*.$(OBJEXT) -rm -f intel/*.$(OBJEXT) -rm -f intel/*.lo + -rm -f loongarch/*.$(OBJEXT) + -rm -f loongarch/*.lo -rm -f mips/*.$(OBJEXT) -rm -f mips/*.lo -rm -f powerpc/*.$(OBJEXT) @@ -1097,63 +1206,48 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/png.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngerror.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngget.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngmem.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngpread.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngread.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngrio.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngrtran.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngrutil.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngset.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngtest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngtrans.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwio.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwrite.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwtran.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwutil.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_init.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/filter_neon.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/filter_neon_intrinsics.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngimage.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngstest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngunknown.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngvalid.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/timepng.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@contrib/tools/$(DEPDIR)/png-fix-itxt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@contrib/tools/$(DEPDIR)/pngcp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@contrib/tools/$(DEPDIR)/pngfix.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@intel/$(DEPDIR)/filter_sse2_intrinsics.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@intel/$(DEPDIR)/intel_init.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mips/$(DEPDIR)/filter_msa_intrinsics.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@mips/$(DEPDIR)/mips_init.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@powerpc/$(DEPDIR)/powerpc_init.Plo@am__quote@ - -.S.o: -@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ -@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ $< - -.S.obj: -@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ -@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ -@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.S.lo: -@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ -@am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ -@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(LTCPPASCOMPILE) -c -o $@ $< +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/png.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngerror.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngget.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngmem.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngpread.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngread.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngrio.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngrtran.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngrutil.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngset.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngtest.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngtrans.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwio.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwrite.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwtran.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngwutil.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_init.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/filter_neon_intrinsics.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/palette_neon_intrinsics.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngimage.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngstest.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngunknown.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/pngvalid.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@contrib/libtests/$(DEPDIR)/timepng.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@contrib/tools/$(DEPDIR)/png-fix-itxt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@contrib/tools/$(DEPDIR)/pngcp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@contrib/tools/$(DEPDIR)/pngfix.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@intel/$(DEPDIR)/filter_sse2_intrinsics.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@intel/$(DEPDIR)/intel_init.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mips/$(DEPDIR)/filter_mmi_inline_assembly.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mips/$(DEPDIR)/filter_msa_intrinsics.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@mips/$(DEPDIR)/mips_init.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@powerpc/$(DEPDIR)/powerpc_init.Plo@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @: >>$@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -1179,6 +1273,20 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< +loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.lo: loongarch/loongarch_lsx_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_CFLAGS) $(CFLAGS) -MT loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.lo -MD -MP -MF loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.Tpo -c -o loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.lo `test -f 'loongarch/loongarch_lsx_init.c' || echo '$(srcdir)/'`loongarch/loongarch_lsx_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.Tpo loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loongarch/loongarch_lsx_init.c' object='loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_CFLAGS) $(CFLAGS) -c -o loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.lo `test -f 'loongarch/loongarch_lsx_init.c' || echo '$(srcdir)/'`loongarch/loongarch_lsx_init.c + +loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.lo: loongarch/filter_lsx_intrinsics.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_CFLAGS) $(CFLAGS) -MT loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.lo -MD -MP -MF loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.Tpo -c -o loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.lo `test -f 'loongarch/filter_lsx_intrinsics.c' || echo '$(srcdir)/'`loongarch/filter_lsx_intrinsics.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.Tpo loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loongarch/filter_lsx_intrinsics.c' object='loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la_CFLAGS) $(CFLAGS) -c -o loongarch/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.lo `test -f 'loongarch/filter_lsx_intrinsics.c' || echo '$(srcdir)/'`loongarch/filter_lsx_intrinsics.c + mostlyclean-libtool: -rm -f *.lo @@ -1186,6 +1294,7 @@ clean-libtool: -rm -rf .libs _libs -rm -rf arm/.libs arm/_libs -rm -rf intel/.libs intel/_libs + -rm -rf loongarch/.libs loongarch/_libs -rm -rf mips/.libs mips/_libs -rm -rf powerpc/.libs powerpc/_libs @@ -1413,7 +1522,6 @@ distclean-tags: am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: - $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ @@ -1489,10 +1597,37 @@ $(TEST_SUITE_LOG): $(TEST_LOGS) result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ + output_system_information () \ + { \ + echo; \ + { uname -a | $(AWK) '{ \ + printf "System information (uname -a):"; \ + for (i = 1; i < NF; ++i) \ + { \ + if (i != 2) \ + printf " %s", $$i; \ + } \ + printf "\n"; \ +}'; } 2>&1; \ + if test -r /etc/os-release; then \ + echo "Distribution information (/etc/os-release):"; \ + sed 8q /etc/os-release; \ + elif test -r /etc/issue; then \ + echo "Distribution information (/etc/issue):"; \ + cat /etc/issue; \ + fi; \ + }; \ + please_report () \ + { \ +echo "Some test(s) failed. Please report this to $(PACKAGE_BUGREPORT),"; \ +echo "together with the test-suite.log file (gzipped) and your system"; \ +echo "information. Thanks."; \ + }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ + output_system_information; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ @@ -1507,31 +1642,30 @@ $(TEST_SUITE_LOG): $(TEST_LOGS) test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ - echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ - echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG) for debugging.$${std}";\ if test -n "$(PACKAGE_BUGREPORT)"; then \ - echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + please_report | sed -e "s/^/$${col}/" -e s/'$$'/"$${std}"/; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 -check-TESTS: - @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list - @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list - @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) +check-TESTS: $(check_PROGRAMS) + @$(am__rm_f) $(RECHECK_LOGS) + @$(am__rm_f) $(RECHECK_LOGS:.log=.trs) + @$(am__rm_f) $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ - trs_list=`for i in $$bases; do echo $$i.trs; done`; \ - log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) - @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @$(am__rm_f) $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ @@ -1541,16 +1675,9 @@ recheck: all $(check_PROGRAMS) am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? -tests/pngtest.log: tests/pngtest - @p='tests/pngtest'; \ - b='tests/pngtest'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/pngtest-badpngs.log: tests/pngtest-badpngs - @p='tests/pngtest-badpngs'; \ - b='tests/pngtest-badpngs'; \ +tests/pngtest-all.log: tests/pngtest-all + @p='tests/pngtest-all'; \ + b='tests/pngtest-all'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ @@ -1786,10 +1913,12 @@ tests/pngimage-full.log: tests/pngimage-full @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am -distdir: $(DISTFILES) +distdir-am: $(DISTFILES) $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" + $(AM_V_at)$(MKDIR_P) "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -1830,7 +1959,7 @@ distdir: $(DISTFILES) ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir @@ -1844,6 +1973,10 @@ dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) +dist-zstd: distdir + tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst + $(am__post_remove_distdir) + dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -1855,7 +1988,7 @@ dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir @@ -1873,7 +2006,7 @@ dist dist-all: distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + eval GZIP= gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ @@ -1883,9 +2016,11 @@ distcheck: dist *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + eval GZIP= gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ + *.tar.zst*) \ + zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -1901,7 +2036,7 @@ distcheck: dist $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ @@ -1957,17 +2092,20 @@ check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) \ +all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(SCRIPTS) $(MANS) $(DATA) \ $(HEADERS) config.h install-binPROGRAMS: install-libLTLIBRARIES +install-checkPROGRAMS: install-libLTLIBRARIES + installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \ + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am -install-exec: install-exec-am +install-exec: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data: install-data-am uninstall: uninstall-am @@ -1986,45 +2124,83 @@ install-strip: "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: - -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) - -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) - -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + -$(am__rm_f) $(TEST_LOGS) + -$(am__rm_f) $(TEST_LOGS:.log=.trs) + -$(am__rm_f) $(TEST_SUITE_LOG) clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + -$(am__rm_f) $(CLEANFILES) distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -rm -f arm/$(DEPDIR)/$(am__dirstamp) - -rm -f arm/$(am__dirstamp) - -rm -f contrib/libtests/$(DEPDIR)/$(am__dirstamp) - -rm -f contrib/libtests/$(am__dirstamp) - -rm -f contrib/tools/$(DEPDIR)/$(am__dirstamp) - -rm -f contrib/tools/$(am__dirstamp) - -rm -f intel/$(DEPDIR)/$(am__dirstamp) - -rm -f intel/$(am__dirstamp) - -rm -f mips/$(DEPDIR)/$(am__dirstamp) - -rm -f mips/$(am__dirstamp) - -rm -f powerpc/$(DEPDIR)/$(am__dirstamp) - -rm -f powerpc/$(am__dirstamp) + -$(am__rm_f) $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) + -$(am__rm_f) arm/$(DEPDIR)/$(am__dirstamp) + -$(am__rm_f) arm/$(am__dirstamp) + -$(am__rm_f) contrib/libtests/$(DEPDIR)/$(am__dirstamp) + -$(am__rm_f) contrib/libtests/$(am__dirstamp) + -$(am__rm_f) contrib/tools/$(DEPDIR)/$(am__dirstamp) + -$(am__rm_f) contrib/tools/$(am__dirstamp) + -$(am__rm_f) intel/$(DEPDIR)/$(am__dirstamp) + -$(am__rm_f) intel/$(am__dirstamp) + -$(am__rm_f) loongarch/$(DEPDIR)/$(am__dirstamp) + -$(am__rm_f) loongarch/$(am__dirstamp) + -$(am__rm_f) mips/$(DEPDIR)/$(am__dirstamp) + -$(am__rm_f) mips/$(am__dirstamp) + -$(am__rm_f) powerpc/$(DEPDIR)/$(am__dirstamp) + -$(am__rm_f) powerpc/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -$(am__rm_f) $(BUILT_SOURCES) + -$(am__rm_f) $(MAINTAINERCLEANFILES) @DO_INSTALL_LIBPNG_CONFIG_FALSE@@DO_INSTALL_LINKS_FALSE@install-exec-hook: @DO_INSTALL_LIBPNG_PC_FALSE@@DO_INSTALL_LINKS_FALSE@install-data-hook: @DO_INSTALL_LIBPNG_CONFIG_FALSE@@DO_INSTALL_LIBPNG_PC_FALSE@@DO_INSTALL_LINKS_FALSE@uninstall-hook: clean: clean-am clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ - clean-libLTLIBRARIES clean-libtool mostlyclean-am + clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf ./$(DEPDIR) arm/$(DEPDIR) contrib/libtests/$(DEPDIR) contrib/tools/$(DEPDIR) intel/$(DEPDIR) mips/$(DEPDIR) powerpc/$(DEPDIR) + -rm -f ./$(DEPDIR)/png.Plo + -rm -f ./$(DEPDIR)/pngerror.Plo + -rm -f ./$(DEPDIR)/pngget.Plo + -rm -f ./$(DEPDIR)/pngmem.Plo + -rm -f ./$(DEPDIR)/pngpread.Plo + -rm -f ./$(DEPDIR)/pngread.Plo + -rm -f ./$(DEPDIR)/pngrio.Plo + -rm -f ./$(DEPDIR)/pngrtran.Plo + -rm -f ./$(DEPDIR)/pngrutil.Plo + -rm -f ./$(DEPDIR)/pngset.Plo + -rm -f ./$(DEPDIR)/pngtest.Po + -rm -f ./$(DEPDIR)/pngtrans.Plo + -rm -f ./$(DEPDIR)/pngwio.Plo + -rm -f ./$(DEPDIR)/pngwrite.Plo + -rm -f ./$(DEPDIR)/pngwtran.Plo + -rm -f ./$(DEPDIR)/pngwutil.Plo + -rm -f arm/$(DEPDIR)/arm_init.Plo + -rm -f arm/$(DEPDIR)/filter_neon_intrinsics.Plo + -rm -f arm/$(DEPDIR)/palette_neon_intrinsics.Plo + -rm -f contrib/libtests/$(DEPDIR)/pngimage.Po + -rm -f contrib/libtests/$(DEPDIR)/pngstest.Po + -rm -f contrib/libtests/$(DEPDIR)/pngunknown.Po + -rm -f contrib/libtests/$(DEPDIR)/pngvalid.Po + -rm -f contrib/libtests/$(DEPDIR)/timepng.Po + -rm -f contrib/tools/$(DEPDIR)/png-fix-itxt.Po + -rm -f contrib/tools/$(DEPDIR)/pngcp.Po + -rm -f contrib/tools/$(DEPDIR)/pngfix.Po + -rm -f intel/$(DEPDIR)/filter_sse2_intrinsics.Plo + -rm -f intel/$(DEPDIR)/intel_init.Plo + -rm -f loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.Plo + -rm -f loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.Plo + -rm -f mips/$(DEPDIR)/filter_mmi_inline_assembly.Plo + -rm -f mips/$(DEPDIR)/filter_msa_intrinsics.Plo + -rm -f mips/$(DEPDIR)/mips_init.Plo + -rm -f powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo + -rm -f powerpc/$(DEPDIR)/powerpc_init.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags @@ -2076,7 +2252,42 @@ installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf ./$(DEPDIR) arm/$(DEPDIR) contrib/libtests/$(DEPDIR) contrib/tools/$(DEPDIR) intel/$(DEPDIR) mips/$(DEPDIR) powerpc/$(DEPDIR) + -rm -f ./$(DEPDIR)/png.Plo + -rm -f ./$(DEPDIR)/pngerror.Plo + -rm -f ./$(DEPDIR)/pngget.Plo + -rm -f ./$(DEPDIR)/pngmem.Plo + -rm -f ./$(DEPDIR)/pngpread.Plo + -rm -f ./$(DEPDIR)/pngread.Plo + -rm -f ./$(DEPDIR)/pngrio.Plo + -rm -f ./$(DEPDIR)/pngrtran.Plo + -rm -f ./$(DEPDIR)/pngrutil.Plo + -rm -f ./$(DEPDIR)/pngset.Plo + -rm -f ./$(DEPDIR)/pngtest.Po + -rm -f ./$(DEPDIR)/pngtrans.Plo + -rm -f ./$(DEPDIR)/pngwio.Plo + -rm -f ./$(DEPDIR)/pngwrite.Plo + -rm -f ./$(DEPDIR)/pngwtran.Plo + -rm -f ./$(DEPDIR)/pngwutil.Plo + -rm -f arm/$(DEPDIR)/arm_init.Plo + -rm -f arm/$(DEPDIR)/filter_neon_intrinsics.Plo + -rm -f arm/$(DEPDIR)/palette_neon_intrinsics.Plo + -rm -f contrib/libtests/$(DEPDIR)/pngimage.Po + -rm -f contrib/libtests/$(DEPDIR)/pngstest.Po + -rm -f contrib/libtests/$(DEPDIR)/pngunknown.Po + -rm -f contrib/libtests/$(DEPDIR)/pngvalid.Po + -rm -f contrib/libtests/$(DEPDIR)/timepng.Po + -rm -f contrib/tools/$(DEPDIR)/png-fix-itxt.Po + -rm -f contrib/tools/$(DEPDIR)/pngcp.Po + -rm -f contrib/tools/$(DEPDIR)/pngfix.Po + -rm -f intel/$(DEPDIR)/filter_sse2_intrinsics.Plo + -rm -f intel/$(DEPDIR)/intel_init.Plo + -rm -f loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-filter_lsx_intrinsics.Plo + -rm -f loongarch/$(DEPDIR)/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@lsx_la-loongarch_lsx_init.Plo + -rm -f mips/$(DEPDIR)/filter_mmi_inline_assembly.Plo + -rm -f mips/$(DEPDIR)/filter_msa_intrinsics.Plo + -rm -f mips/$(DEPDIR)/mips_init.Plo + -rm -f powerpc/$(DEPDIR)/filter_vsx_intrinsics.Plo + -rm -f powerpc/$(DEPDIR)/powerpc_init.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -2102,14 +2313,15 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-man: uninstall-man3 uninstall-man5 .MAKE: all check check-am install install-am install-data-am \ - install-exec-am install-strip uninstall-am + install-exec install-exec-am install-strip uninstall-am -.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-TESTS \ - check-am clean clean-binPROGRAMS clean-checkPROGRAMS \ - clean-cscope clean-generic clean-libLTLIBRARIES clean-libtool \ +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \ + check-TESTS check-am clean clean-binPROGRAMS \ + clean-checkPROGRAMS clean-cscope clean-generic \ + clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ - dist-zip distcheck distclean distclean-compile \ + dist-zip dist-zstd distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ @@ -2320,3 +2532,10 @@ all-am: $(check_PROGRAMS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: + +# Tell GNU make to disable its built-in pattern rules. +%:: %,v +%:: RCS/%,v +%:: RCS/% +%:: s.% +%:: SCCS/s.% diff --git a/vs/libpng/README b/vs/libpng/README index 0da5a5ef839..57952fb215a 100644 --- a/vs/libpng/README +++ b/vs/libpng/README @@ -1,56 +1,88 @@ -README for libpng version 1.6.34 - September 29, 2017 (shared library 16.0) -See the note about version numbers near the top of png.h +README for libpng version 1.6.47 +================================ -See INSTALL for instructions on how to install libpng. +See the note about version numbers near the top of `png.h`. +See `INSTALL` for instructions on how to install libpng. -Libpng comes in several distribution formats. Get libpng-*.tar.gz or -libpng-*.tar.xz or if you want UNIX-style line endings in the text files, -or lpng*.7z or lpng*.zip if you want DOS-style line endings. +Libpng comes in several distribution formats. Get `libpng-*.tar.gz` +or `libpng-*.tar.xz` if you want UNIX-style line endings in the text +files, or `lpng*.7z` or `lpng*.zip` if you want DOS-style line endings. -Version 0.89 was the first official release of libpng. Don't let the -fact that it's the first release fool you. The libpng library has been in -extensive use and testing since mid-1995. By late 1997 it had -finally gotten to the stage where there hadn't been significant -changes to the API in some time, and people have a bad feeling about -libraries with versions < 1.0. Version 1.0.0 was released in -March 1998. +For a detailed description on using libpng, read `libpng-manual.txt`. +For examples of libpng in a program, see `example.c` and `pngtest.c`. +For usage information and restrictions (what little they are) on libpng, +see `png.h`. For a description on using zlib (the compression library +used by libpng) and zlib's restrictions, see `zlib.h`. -**** -Note that some of the changes to the png_info structure render this +You should use zlib 1.0.4 or later to run this, but it _may_ work with +versions as old as zlib 0.95. Even so, there are bugs in older zlib +versions which can cause the output of invalid compression streams for +some images. + +You should also note that zlib is a compression library that is useful +for more things than just PNG files. You can use zlib as a drop-in +replacement for `fread()` and `fwrite()`, if you are so inclined. + +zlib should be available at the same place that libpng is, or at +https://zlib.net . + +You may also want a copy of the PNG specification. It is available +as an RFC, a W3C Recommendation, and an ISO/IEC Standard. You can find +these at http://www.libpng.org/pub/png/pngdocs.html . + +This code is currently being archived at https://libpng.sourceforge.io +in the download area, and at http://libpng.download/src . + +This release, based in a large way on Glenn's, Guy's and Andreas' +earlier work, was created and will be supported by myself and the PNG +development group. + +Send comments, corrections and commendations to `png-mng-implement` +at `lists.sourceforge.net`. (Subscription is required; visit +https://lists.sourceforge.net/lists/listinfo/png-mng-implement +to subscribe.) + +Send general questions about the PNG specification to `png-mng-misc` +at `lists.sourceforge.net`. (Subscription is required; visit +https://lists.sourceforge.net/lists/listinfo/png-mng-misc +to subscribe.) + +Historical notes +---------------- + +The libpng library has been in extensive use and testing since mid-1995. +Version 0.89, published a year later, was the first official release. +By late 1997, it had finally gotten to the stage where there hadn't +been significant changes to the API in some time, and people have a bad +feeling about libraries with versions below 1.0. Version 1.0.0 was +released in March 1998. + +Note that some of the changes to the `png_info` structure render this version of the library binary incompatible with libpng-0.89 or earlier versions if you are using a shared library. The type of the -"filler" parameter for png_set_filler() has changed from png_byte to -png_uint_32, which will affect shared-library applications that use -this function. +`filler` parameter for `png_set_filler()` has changed from `png_byte` +to `png_uint_32`, which will affect shared-library applications that +use this function. -To avoid problems with changes to the internals of the png info_struct, +To avoid problems with changes to the internals of the `info_struct`, new APIs have been made available in 0.95 to avoid direct application -access to info_ptr. These functions are the png_set_ and -png_get_ functions. These functions should be used when -accessing/storing the info_struct data, rather than manipulating it +access to `info_ptr`. These functions are the `png_set_` and +`png_get_` functions. These functions should be used when +accessing/storing the `info_struct` data, rather than manipulating it directly, to avoid such problems in the future. It is important to note that the APIs did not make current programs that access the info struct directly incompatible with the new library, through libpng-1.2.x. In libpng-1.4.x, which was meant to -be a transitional release, members of the png_struct and the -info_struct can still be accessed, but the compiler will issue a +be a transitional release, members of the `png_struct` and the +`info_struct` can still be accessed, but the compiler will issue a warning about deprecated usage. Since libpng-1.5.0, direct access to these structs is not allowed, and the definitions of the structs -reside in private pngstruct.h and pnginfo.h header files that are not -accessible to applications. It is strongly suggested that new -programs use the new APIs (as shown in example.c and pngtest.c), and -older programs be converted to the new format, to facilitate upgrades -in the future. -**** - -Additions since 0.90 include the ability to compile libpng as a -Windows DLL, and new APIs for accessing data in the info struct. -Experimental functions include the ability to set weighting and cost -factors for row filter selection, direct reads of integers from buffers -on big-endian processors that support misaligned data access, faster -methods of doing alpha composition, and more accurate 16->8 bit color -conversion. +reside in private `pngstruct.h` and `pnginfo.h` header files that are +not accessible to applications. It is strongly suggested that new +programs use the new APIs (as shown in `example.c` and `pngtest.c`), +and older programs be converted to the new format, to facilitate +upgrades in the future. The additions since 0.89 include the ability to read from a PNG stream which has had some (or all) of the signature bytes read by the calling @@ -60,163 +92,91 @@ the library action on the detection of chunk CRC errors. It is possible to set different actions based on whether the CRC error occurred in a critical or an ancillary chunk. -The changes made to the library, and bugs fixed are based on discussions -on the PNG-implement mailing list and not on material submitted -privately to Guy, Andreas, or Glenn. They will forward any good -suggestions to the list. - -For a detailed description on using libpng, read libpng-manual.txt. For -examples of libpng in a program, see example.c and pngtest.c. For usage -information and restrictions (what little they are) on libpng, see -png.h. For a description on using zlib (the compression library used by -libpng) and zlib's restrictions, see zlib.h - -I have included a general makefile, as well as several machine and -compiler specific ones, but you may have to modify one for your own needs. - -You should use zlib 1.0.4 or later to run this, but it MAY work with -versions as old as zlib 0.95. Even so, there are bugs in older zlib -versions which can cause the output of invalid compression streams for -some images. You will definitely need zlib 1.0.4 or later if you are -taking advantage of the MS-DOS "far" structure allocation for the small -and medium memory models. You should also note that zlib is a -compression library that is useful for more things than just PNG files. -You can use zlib as a drop-in replacement for fread() and fwrite() if -you are so inclined. - -zlib should be available at the same place that libpng is, or at zlib.net. - -You may also want a copy of the PNG specification. It is available -as an RFC, a W3C Recommendation, and an ISO/IEC Standard. You can find -these at http://www.libpng.org/pub/png/pngdocs.html . - -This code is currently being archived at libpng.sourceforge.io in the -[DOWNLOAD] area, and at http://libpng.download/src . If you -can't find it in any of those places, e-mail me, and I'll help you find it. - -I am not a lawyer, but I believe that the Export Control Classification -Number (ECCN) for libpng is EAR99, which means not subject to export -controls or International Traffic in Arms Regulations (ITAR) because it -is open source, publicly available software, that does not contain any -encryption software. See the EAR, paragraphs 734.3(b)(3) and 734.7(b). - -If you have any code changes, requests, problems, etc., please e-mail -them to me. Also, I'd appreciate any make files or project files, -and any modifications you needed to make to get libpng to compile, -along with a #define variable to tell what compiler/system you are on. -If you needed to add transformations to libpng, or wish libpng would -provide the image in a different way, drop me a note (and code, if -possible), so I can consider supporting the transformation. -Finally, if you get any warning messages when compiling libpng -(note: not zlib), and they are easy to fix, I'd appreciate the -fix. Please mention "libpng" somewhere in the subject line. Thanks. - -This release was created and will be supported by myself (of course -based in a large way on Guy's and Andreas' earlier work), and the PNG -development group. - -Send comments/corrections/commendations to png-mng-implement at -lists.sourceforge.net (subscription required; visit -https://lists.sourceforge.net/lists/listinfo/png-mng-implement -to subscribe) or to glennrp at users.sourceforge.net - -You can't reach Guy, the original libpng author, at the addresses -given in previous versions of this document. He and Andreas will -read mail addressed to the png-implement list, however. - -Please do not send general questions about PNG. Send them to -png-mng-misc at lists.sf.net (subscription required; visit -https://lists.sourceforge.net/lists/listinfo/png-mng-misc to -subscribe). If you have a question about something -in the PNG specification that is related to using libpng, send it -to me. Send me any questions that start with "I was using libpng, -and ...". If in doubt, send questions to me. I'll bounce them -to others, if necessary. - -Please do not send suggestions on how to change PNG. We have -been discussing PNG for twenty years now, and it is official and -finished. If you have suggestions for libpng, however, I'll -gladly listen. Even if your suggestion is not used immediately, -it may be used later. - -Files in this distribution: - - ANNOUNCE => Announcement of this version, with recent changes - CHANGES => Description of changes between libpng versions - KNOWNBUG => List of known bugs and deficiencies - LICENSE => License to use and redistribute libpng - README => This file - TODO => Things not implemented in the current library - Y2KINFO => Statement of Y2K compliance - example.c => Example code for using libpng functions - libpng.3 => manual page for libpng (includes libpng-manual.txt) - libpng-manual.txt => Description of libpng and its functions - libpngpf.3 => manual page for libpng's private functions - png.5 => manual page for the PNG format - png.c => Basic interface functions common to library - png.h => Library function and interface declarations (public) - pngpriv.h => Library function and interface declarations (private) - pngconf.h => System specific library configuration (public) - pngstruct.h => png_struct declaration (private) - pnginfo.h => png_info struct declaration (private) - pngdebug.h => debugging macros (private) - pngerror.c => Error/warning message I/O functions - pngget.c => Functions for retrieving info from struct - pngmem.c => Memory handling functions - pngbar.png => PNG logo, 88x31 - pngnow.png => PNG logo, 98x31 - pngpread.c => Progressive reading functions - pngread.c => Read data/helper high-level functions - pngrio.c => Lowest-level data read I/O functions - pngrtran.c => Read data transformation functions - pngrutil.c => Read data utility functions - pngset.c => Functions for storing data into the info_struct - pngtest.c => Library test program - pngtest.png => Library test sample image - pngtrans.c => Common data transformation functions - pngwio.c => Lowest-level write I/O functions - pngwrite.c => High-level write functions - pngwtran.c => Write data transformations - pngwutil.c => Write utility functions - arm => Contains optimized code for the ARM platform - powerpc => Contains optimized code for the PowerPC platform - contrib => Contributions - arm-neon => Optimized code for ARM-NEON platform - powerpc-vsx => Optimized code for POWERPC-VSX platform - examples => Example programs - gregbook => source code for PNG reading and writing, from - Greg Roelofs' "PNG: The Definitive Guide", - O'Reilly, 1999 - libtests => Test programs - mips-msa => Optimized code for MIPS-MSA platform - pngminim => Minimal decoder, encoder, and progressive decoder - programs demonstrating use of pngusr.dfa - pngminus => Simple pnm2png and png2pnm programs - pngsuite => Test images - testpngs - tools => Various tools - visupng => Contains a MSVC workspace for VisualPng - intel => Optimized code for INTEL-SSE2 platform - mips => Optimized code for MIPS platform - projects => Contains project files and workspaces for - building a DLL - owatcom => Contains a WATCOM project for building libpng - visualc71 => Contains a Microsoft Visual C++ (MSVC) - workspace for building libpng and zlib - vstudio => Contains a Microsoft Visual C++ (MSVC) - workspace for building libpng and zlib - scripts => Directory containing scripts for building libpng: - (see scripts/README.txt for the list of scripts) - -Good luck, and happy coding. - --Glenn Randers-Pehrson (current maintainer, since 1998) - Internet: glennrp at users.sourceforge.net - --Andreas Eric Dilger (former maintainer, 1996-1997) - Internet: adilger at enel.ucalgary.ca - Web: http://www-mddsp.enel.ucalgary.ca/People/adilger/ - --Guy Eric Schalnat (original author and former maintainer, 1995-1996) - (formerly of Group 42, Inc) - Internet: gschal at infinet.com +The additions since 0.90 include the ability to compile libpng as a +Windows DLL, and new APIs for accessing data in the `info_struct`. +Experimental functions included the ability to set weighting and cost +factors for row filter selection, direct reads of integers from buffers +on big-endian processors that support misaligned data access, faster +methods of doing alpha composition, and more accurate 16-to-8 bit color +conversion. Some of these experimental functions, such as the weighted +filter heuristics, have since been removed. + +Files included in this distribution +----------------------------------- + + ANNOUNCE => Announcement of this version, with recent changes + AUTHORS => List of contributing authors + CHANGES => Description of changes between libpng versions + INSTALL => Instructions to install libpng + LICENSE => License to use and redistribute libpng + README => This file + TODO => Things not implemented in the current library + TRADEMARK => Trademark information + example.c => Example code for using libpng functions + libpng.3 => Manual page for libpng (includes libpng-manual.txt) + libpng-manual.txt => Description of libpng and its functions + libpngpf.3 => Manual page for libpng's private functions (deprecated) + png.5 => Manual page for the PNG format + png.c => Basic interface functions common to library + png.h => Library function and interface declarations (public) + pngpriv.h => Library function and interface declarations (private) + pngconf.h => System specific library configuration (public) + pngstruct.h => png_struct declaration (private) + pnginfo.h => png_info struct declaration (private) + pngdebug.h => debugging macros (private) + pngerror.c => Error/warning message I/O functions + pngget.c => Functions for retrieving info from struct + pngmem.c => Memory handling functions + pngbar.png => PNG logo, 88x31 + pngnow.png => PNG logo, 98x31 + pngpread.c => Progressive reading functions + pngread.c => Read data/helper high-level functions + pngrio.c => Lowest-level data read I/O functions + pngrtran.c => Read data transformation functions + pngrutil.c => Read data utility functions + pngset.c => Functions for storing data into the info_struct + pngtest.c => Library test program + pngtest.png => Library test sample image + pngtrans.c => Common data transformation functions + pngwio.c => Lowest-level write I/O functions + pngwrite.c => High-level write functions + pngwtran.c => Write data transformations + pngwutil.c => Write utility functions + arm/ => Optimized code for ARM Neon + intel/ => Optimized code for INTEL SSE2 + loongarch/ => Optimized code for LoongArch LSX + mips/ => Optimized code for MIPS MSA and MIPS MMI + powerpc/ => Optimized code for PowerPC VSX + ci/ => Scripts for continuous integration + contrib/ => External contributions + arm-neon/ => Optimized code for the ARM-NEON platform + mips-msa/ => Optimized code for the MIPS-MSA platform + powerpc-vsx/ => Optimized code for the POWERPC-VSX platform + examples/ => Examples of libpng usage + gregbook/ => Source code for PNG reading and writing, from + "PNG: The Definitive Guide" by Greg Roelofs, + O'Reilly, 1999 + libtests/ => Test programs + pngexif/ => Program to inspect the EXIF information in PNG files + pngminim/ => Minimal decoder, encoder, and progressive decoder + programs demonstrating the use of pngusr.dfa + pngminus/ => Simple pnm2png and png2pnm programs + pngsuite/ => Test images + testpngs/ => Test images + tools/ => Various tools + visupng/ => VisualPng, a Windows viewer for PNG images + projects/ => Project files and workspaces for various IDEs + owatcom/ => OpenWatcom project + visualc71/ => Microsoft Visual C++ 7.1 workspace + vstudio/ => Microsoft Visual Studio workspace + scripts/ => Scripts and makefiles for building libpng + (see scripts/README.txt for the complete list) + tests/ => Test scripts + +Good luck, and happy coding! + + * Cosmin Truta (current maintainer, since 2018) + * Glenn Randers-Pehrson (former maintainer, 1998-2018) + * Andreas Eric Dilger (former maintainer, 1996-1997) + * Guy Eric Schalnat (original author and former maintainer, 1995-1996) + (formerly of Group 42, Inc.) diff --git a/vs/libpng/TODO b/vs/libpng/TODO index 36d6092a2e7..8ddb7d123c2 100644 --- a/vs/libpng/TODO +++ b/vs/libpng/TODO @@ -1,30 +1,22 @@ -/* -TODO - list of things to do for libpng: +TODO list for libpng +-------------------- -Final bug fixes. -Better C++ wrapper/full C++ implementation? -Fix problem with C++ and EXTERN "C". -cHRM transformation. -Remove setjmp/longjmp usage in favor of returning error codes. As a start on - this, minimize the use of png_error(), replacing them with - png_warning(); return(0); or similar. -Palette creation. -Add "grayscale->palette" transformation and "palette->grayscale" detection. -Improved dithering. -Multi-lingual error and warning message support. -Complete sRGB transformation (presently it simply uses gamma=0.45455). -Man pages for function calls. -Better documentation. -Better filter selection - (counting huffman bits/precompression? filter inertia? filter costs?). -Histogram creation. -Text conversion between different code pages (Latin-1 -> Mac and DOS). -Avoid building gamma tables whenever possible. -Use greater precision when changing to linear gamma for compositing against - background and doing rgb-to-gray transformation. -Investigate pre-incremented loop counters and other loop constructions. -Add interpolated method of handling interlacing. -Extend pngvalid.c to validate more of the libpng transformations. -Refactor preprocessor conditionals to compile entire statements - -*/ + * Fix all defects (duh!) + * cHRM transformation. + * Palette creation. + * "grayscale->palette" transformation and "palette->grayscale" detection. + * Improved dithering. + * Multi-lingual error and warning message support. + * Complete sRGB transformation. (Currently it simply uses gamma=0.45455.) + * Man pages for function calls. + * Better documentation. + * Better filter selection + (e.g., counting huffman bits/precompression; filter inertia; filter costs). + * Histogram creation. + * Text conversion between different code pages (e.g., Latin-1 to Mac). + * Avoid building gamma tables whenever possible. + * Greater precision in changing to linear gamma for compositing against + background, and in doing rgb-to-gray transformations. + * Investigate pre-incremented loop counters and other loop constructions. + * Interpolated method of handling interlacing. + * More validations for libpng transformations. diff --git a/vs/libpng/TRADEMARK b/vs/libpng/TRADEMARK new file mode 100644 index 00000000000..ac667187d67 --- /dev/null +++ b/vs/libpng/TRADEMARK @@ -0,0 +1,8 @@ +TRADEMARK +========= + +The name "libpng" has not been registered by the Copyright owners +as a trademark in any jurisdiction. However, because libpng has +been distributed and maintained world-wide, continually since 1995, +the Copyright owners claim "common-law trademark protection" in any +jurisdiction where common-law trademark is recognized. diff --git a/vs/libpng/aclocal.m4 b/vs/libpng/aclocal.m4 index 0ea1ad32428..0a6cb3f2041 100644 --- a/vs/libpng/aclocal.m4 +++ b/vs/libpng/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.15 -*- Autoconf -*- +# generated automatically by aclocal 1.17 -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,13 +14,13 @@ m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, -[m4_warning([this file was generated for autoconf 2.69. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.72],, +[m4_warning([this file was generated for autoconf 2.72. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# Copyright (C) 2002-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.]) # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.15' +[am__api_version='1.17' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.15], [], +m4_if([$1], [1.17], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.15])dnl +[AM_AUTOMAKE_VERSION([1.17])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Figure out how to run the assembler. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -78,7 +78,7 @@ _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -130,7 +130,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -161,7 +161,7 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -293,7 +293,7 @@ AC_CACHE_CHECK([dependency style of $depcc], # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: + # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported @@ -352,13 +352,12 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. - # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], @@ -366,49 +365,43 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + AS_CASE([$CONFIG_FILES], + [*\'*], [eval set x "$CONFIG_FILES"], + [*], [set x $CONFIG_FILES]) shift - for mf + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf do # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line + am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`AS_DIRNAME(["$am_mf"])` + am_filepart=`AS_BASENAME(["$am_mf"])` + AM_RUN_LOG([cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles]) || am_rc=$? done + if test $am_rc -ne 0; then + AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. If GNU make was not used, consider + re-running the configure script with MAKE="gmake" (or whatever is + necessary). You can also try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking).]) + fi + AS_UNSET([am_dirpart]) + AS_UNSET([am_filepart]) + AS_UNSET([am_mf]) + AS_UNSET([am_rc]) + rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -417,18 +410,17 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will -# need in order to bootstrap the dependency handling code. +# This code is only required when automatic dependency tracking is enabled. +# This creates each '.Po' and '.Plo' makefile fragment that we'll need in +# order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) + [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -456,6 +448,10 @@ m4_defn([AC_PROG_CC]) # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl +m4_ifdef([_$0_ALREADY_INIT], + [m4_fatal([$0 expanded multiple times +]m4_defn([_$0_ALREADY_INIT]))], + [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl @@ -492,7 +488,7 @@ m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl @@ -515,8 +511,8 @@ AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: -# -# +# +# AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. @@ -544,7 +540,21 @@ AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) -AC_REQUIRE([AM_SILENT_RULES])dnl +# Variables for tags utilities; see am/tags.am +if test -z "$CTAGS"; then + CTAGS=ctags +fi +AC_SUBST([CTAGS]) +if test -z "$ETAGS"; then + ETAGS=etags +fi +AC_SUBST([ETAGS]) +if test -z "$CSCOPE"; then + CSCOPE=cscope +fi +AC_SUBST([CSCOPE]) + +AC_REQUIRE([_AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. @@ -552,47 +562,9 @@ AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . +AC_REQUIRE([_AM_PROG_RM_F]) +AC_REQUIRE([_AM_PROG_XARGS_N]) -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) - fi -fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. @@ -625,7 +597,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -646,7 +618,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# Copyright (C) 2003-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -668,7 +640,7 @@ AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -703,7 +675,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -711,49 +683,42 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) # AM_MAKE_INCLUDE() # ----------------- -# Check to see how make treats includes. +# Check whether make has an 'include' directive that can support all +# the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' +[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) +cat > confinc.mk << 'END' am__doit: - @echo this is the am__doit target + @echo this is the am__doit target >confinc.out .PHONY: am__doit END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) + AS_CASE([$?:`cat confinc.out 2>/dev/null`], + ['0:this is the am__doit target'], + [AS_CASE([$s], + [BSD], [am__include='.include' am__quote='"'], + [am__include='include' am__quote=''])]) + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +AC_MSG_RESULT([${_am_result}]) +AC_SUBST([am__include])]) +AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -774,12 +739,7 @@ AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac + MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then @@ -792,7 +752,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -821,7 +781,7 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -868,7 +828,23 @@ AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2022-2024 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_RM_F +# --------------- +# Check whether 'rm -f' without any arguments works. +# https://bugs.gnu.org/10828 +AC_DEFUN([_AM_PROG_RM_F], +[am__rm_f_notfound= +AS_IF([(rm -f && rm -fr && rm -rf) 2>/dev/null], [], [am__rm_f_notfound='""']) +AC_SUBST(am__rm_f_notfound) +]) + +# Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -887,16 +863,169 @@ AC_DEFUN([AM_RUN_LOG], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# _AM_SLEEP_FRACTIONAL_SECONDS +# ---------------------------- +AC_DEFUN([_AM_SLEEP_FRACTIONAL_SECONDS], [dnl +AC_CACHE_CHECK([whether sleep supports fractional seconds], + am_cv_sleep_fractional_seconds, [dnl +AS_IF([sleep 0.001 2>/dev/null], [am_cv_sleep_fractional_seconds=yes], + [am_cv_sleep_fractional_seconds=no]) +])]) + +# _AM_FILESYSTEM_TIMESTAMP_RESOLUTION +# ----------------------------------- +# Determine the filesystem's resolution for file modification +# timestamps. The coarsest we know of is FAT, with a resolution +# of only two seconds, even with the most recent "exFAT" extensions. +# The finest (e.g. ext4 with large inodes, XFS, ZFS) is one +# nanosecond, matching clock_gettime. However, it is probably not +# possible to delay execution of a shell script for less than one +# millisecond, due to process creation overhead and scheduling +# granularity, so we don't check for anything finer than that. (See below.) +AC_DEFUN([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION], [dnl +AC_REQUIRE([_AM_SLEEP_FRACTIONAL_SECONDS]) +AC_CACHE_CHECK([filesystem timestamp resolution], + am_cv_filesystem_timestamp_resolution, [dnl +# Default to the worst case. +am_cv_filesystem_timestamp_resolution=2 + +# Only try to go finer than 1 sec if sleep can do it. +# Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, +# - 1 sec is not much of a win compared to 2 sec, and +# - it takes 2 seconds to perform the test whether 1 sec works. +# +# Instead, just use the default 2s on platforms that have 1s resolution, +# accept the extra 1s delay when using $sleep in the Automake tests, in +# exchange for not incurring the 2s delay for running the test for all +# packages. +# +am_try_resolutions= +if test "$am_cv_sleep_fractional_seconds" = yes; then + # Even a millisecond often causes a bunch of false positives, + # so just try a hundredth of a second. The time saved between .001 and + # .01 is not terribly consequential. + am_try_resolutions="0.01 0.1 $am_try_resolutions" +fi + +# In order to catch current-generation FAT out, we must *modify* files +# that already exist; the *creation* timestamp is finer. Use names +# that make ls -t sort them differently when they have equal +# timestamps than when they have distinct timestamps, keeping +# in mind that ls -t prints the *newest* file first. +rm -f conftest.ts? +: > conftest.ts1 +: > conftest.ts2 +: > conftest.ts3 + +# Make sure ls -t actually works. Do 'set' in a subshell so we don't +# clobber the current shell's arguments. (Outer-level square brackets +# are removed by m4; they're present so that m4 does not expand +# ; be careful, easy to get confused.) +if ( + set X `[ls -t conftest.ts[12]]` && + { + test "$[]*" != "X conftest.ts1 conftest.ts2" || + test "$[]*" != "X conftest.ts2 conftest.ts1"; + } +); then :; else + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + _AS_ECHO_UNQUOTED( + ["Bad output from ls -t: \"`[ls -t conftest.ts[12]]`\""], + [AS_MESSAGE_LOG_FD]) + AC_MSG_FAILURE([ls -t produces unexpected output. +Make sure there is not a broken ls alias in your environment.]) +fi + +for am_try_res in $am_try_resolutions; do + # Any one fine-grained sleep might happen to cross the boundary + # between two values of a coarser actual resolution, but if we do + # two fine-grained sleeps in a row, at least one of them will fall + # entirely within a coarse interval. + echo alpha > conftest.ts1 + sleep $am_try_res + echo beta > conftest.ts2 + sleep $am_try_res + echo gamma > conftest.ts3 + + # We assume that 'ls -t' will make use of high-resolution + # timestamps if the operating system supports them at all. + if (set X `ls -t conftest.ts?` && + test "$[]2" = conftest.ts3 && + test "$[]3" = conftest.ts2 && + test "$[]4" = conftest.ts1); then + # + # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, + # because we don't need to test make. + make_ok=true + if test $am_try_res != 1; then + # But if we've succeeded so far with a subsecond resolution, we + # have one more thing to check: make. It can happen that + # everything else supports the subsecond mtimes, but make doesn't; + # notably on macOS, which ships make 3.81 from 2006 (the last one + # released under GPLv2). https://bugs.gnu.org/68808 + # + # We test $MAKE if it is defined in the environment, else "make". + # It might get overridden later, but our hope is that in practice + # it does not matter: it is the system "make" which is (by far) + # the most likely to be broken, whereas if the user overrides it, + # probably they did so with a better, or at least not worse, make. + # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html + # + # Create a Makefile (real tab character here): + rm -f conftest.mk + echo 'conftest.ts1: conftest.ts2' >conftest.mk + echo ' touch conftest.ts2' >>conftest.mk + # + # Now, running + # touch conftest.ts1; touch conftest.ts2; make + # should touch ts1 because ts2 is newer. This could happen by luck, + # but most often, it will fail if make's support is insufficient. So + # test for several consecutive successes. + # + # (We reuse conftest.ts[12] because we still want to modify existing + # files, not create new ones, per above.) + n=0 + make=${MAKE-make} + until test $n -eq 3; do + echo one > conftest.ts1 + sleep $am_try_res + echo two > conftest.ts2 # ts2 should now be newer than ts1 + if $make -f conftest.mk | grep 'up to date' >/dev/null; then + make_ok=false + break # out of $n loop + fi + n=`expr $n + 1` + done + fi + # + if $make_ok; then + # Everything we know to check worked out, so call this resolution good. + am_cv_filesystem_timestamp_resolution=$am_try_res + break # out of $am_try_res loop + fi + # Otherwise, we'll go on to check the next resolution. + fi +done +rm -f conftest.ts? +# (end _am_filesystem_timestamp_resolution) +])]) + # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) +[AC_REQUIRE([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION]) +# This check should not be cached, as it may vary across builds of +# different projects. +AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -915,49 +1044,40 @@ esac # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken - alias in your environment]) - fi - if test "$[2]" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! +am_build_env_is_sane=no +am_has_slept=no +rm -f conftest.file +for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[]*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + test "$[]2" = conftest.file + ); then + am_build_env_is_sane=yes + break + fi + # Just in case. + sleep "$am_cv_filesystem_timestamp_resolution" + am_has_slept=yes +done + +AC_MSG_RESULT([$am_build_env_is_sane]) +if test "$am_build_env_is_sane" = no; then + AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi -AC_MSG_RESULT([yes]) + # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & +AS_IF([test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1],, [dnl + ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! -fi +]) AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then @@ -968,18 +1088,18 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# Copyright (C) 2009-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# AM_SILENT_RULES([DEFAULT]) -# -------------------------- -# Enable less verbose build rules; with the default set to DEFAULT -# ("yes" being less verbose, "no" or empty being verbose). -AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], [dnl +# _AM_SILENT_RULES +# ---------------- +# Enable less verbose build rules support. +AC_DEFUN([_AM_SILENT_RULES], +[AM_DEFAULT_VERBOSITY=1 +AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) @@ -987,11 +1107,6 @@ AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) -case $enable_silent_rules in @%:@ ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. @@ -1010,14 +1125,6 @@ am__doit: else am_cv_make_support_nested_variables=no fi]) -if test $am_cv_make_support_nested_variables = yes; then - dnl Using '$V' instead of '$(V)' breaks IRIX make. - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl @@ -1026,9 +1133,33 @@ AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +dnl Delay evaluation of AM_DEFAULT_VERBOSITY to the end to allow multiple calls +dnl to AM_SILENT_RULES to change the default value. +AC_CONFIG_COMMANDS_PRE([dnl +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; +esac +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +])dnl ]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Set the default verbosity level to DEFAULT ("yes" being less verbose, "no" or +# empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_REQUIRE([_AM_SILENT_RULES]) +AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1])]) + +# Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1056,7 +1187,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# Copyright (C) 2006-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1075,7 +1206,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# Copyright (C) 2004-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1121,15 +1252,19 @@ m4_if([$1], [v7], am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) - if test $am_uid -le $am_max_uid; then - AC_MSG_RESULT([yes]) + if test x$am_uid = xunknown; then + AC_MSG_WARN([ancient id detected; assuming current UID is ok, but dist-ustar might not work]) + elif test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) else - AC_MSG_RESULT([no]) - _am_tools=none + AC_MSG_RESULT([no]) + _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) - if test $am_gid -le $am_max_gid; then - AC_MSG_RESULT([yes]) + if test x$gm_gid = xunknown; then + AC_MSG_WARN([ancient id detected; assuming current GID is ok, but dist-ustar might not work]) + elif test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none @@ -1206,8 +1341,28 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR -m4_include([scripts/libtool.m4]) -m4_include([scripts/ltoptions.m4]) -m4_include([scripts/ltsugar.m4]) -m4_include([scripts/ltversion.m4]) -m4_include([scripts/lt~obsolete.m4]) +# Copyright (C) 2022-2024 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_XARGS_N +# ---------------- +# Check whether 'xargs -n' works. It should work everywhere, so the fallback +# is not optimized at all as we never expect to use it. +AC_DEFUN([_AM_PROG_XARGS_N], +[AC_CACHE_CHECK([xargs -n works], am_cv_xargs_n_works, [dnl +AS_IF([test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 +3"], [am_cv_xargs_n_works=yes], [am_cv_xargs_n_works=no])]) +AS_IF([test "$am_cv_xargs_n_works" = yes], [am__xargs_n='xargs -n'], [dnl + am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "$@" "$am__xargs_n_arg"; done; }' +])dnl +AC_SUBST(am__xargs_n) +]) + +m4_include([scripts/autoconf/libtool.m4]) +m4_include([scripts/autoconf/ltoptions.m4]) +m4_include([scripts/autoconf/ltsugar.m4]) +m4_include([scripts/autoconf/ltversion.m4]) +m4_include([scripts/autoconf/lt~obsolete.m4]) diff --git a/vs/libpng/arm/arm_init.c b/vs/libpng/arm/arm_init.c index 02df812e775..50376081a3c 100644 --- a/vs/libpng/arm/arm_init.c +++ b/vs/libpng/arm/arm_init.c @@ -1,17 +1,15 @@ - /* arm_init.c - NEON optimised filter functions * + * Copyright (c) 2018-2022 Cosmin Truta * Copyright (c) 2014,2016 Glenn Randers-Pehrson * Written by Mans Rullgard, 2011. - * Last changed in libpng 1.6.22 [May 26, 2016] * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer * and license in png.h */ -/* Below, after checking __linux__, various non-C90 POSIX 1003.1 functions are - * called. - */ + +/* This module requires POSIX 1003.1 functions. */ #define _POSIX_SOURCE 1 #include "../pngpriv.h" @@ -32,21 +30,26 @@ * has partial support is contrib/arm-neon/linux.c - a generic Linux * implementation which reads /proc/cpufino. */ +#include /* for sig_atomic_t */ + #ifndef PNG_ARM_NEON_FILE -# ifdef __linux__ -# define PNG_ARM_NEON_FILE "contrib/arm-neon/linux.c" +# if defined(__aarch64__) || defined(_M_ARM64) + /* ARM Neon is expected to be unconditionally available on ARM64. */ +# error "PNG_ARM_NEON_CHECK_SUPPORTED must not be defined on ARM64" +# elif defined(__ARM_NEON__) || defined(__ARM_NEON) + /* ARM Neon is expected to be available on the target CPU architecture. */ +# error "PNG_ARM_NEON_CHECK_SUPPORTED must not be defined on this CPU arch" +# elif defined(__linux__) +# define PNG_ARM_NEON_FILE "contrib/arm-neon/linux.c" +# else +# error "No support for run-time ARM Neon checking; use compile-time options" # endif #endif -#ifdef PNG_ARM_NEON_FILE - -#include /* for sig_atomic_t */ static int png_have_neon(png_structp png_ptr); -#include PNG_ARM_NEON_FILE - -#else /* PNG_ARM_NEON_FILE */ -# error "PNG_ARM_NEON_FILE undefined: no support for run-time ARM NEON checks" -#endif /* PNG_ARM_NEON_FILE */ +#ifdef PNG_ARM_NEON_FILE +# include PNG_ARM_NEON_FILE +#endif #endif /* PNG_ARM_NEON_CHECK_SUPPORTED */ #ifndef PNG_ALIGNED_MEMORY_SUPPORTED diff --git a/vs/libpng/arm/filter_neon.S b/vs/libpng/arm/filter_neon.S index 000764cd212..0cbd372cb13 100644 --- a/vs/libpng/arm/filter_neon.S +++ b/vs/libpng/arm/filter_neon.S @@ -1,253 +1,60 @@ - -/* filter_neon.S - NEON optimised filter functions +/* filter_neon.S - placeholder file * - * Copyright (c) 2014,2017 Glenn Randers-Pehrson - * Written by Mans Rullgard, 2011. - * Last changed in libpng 1.6.31 [July 27, 2017] + * Copyright (c) 2024 Cosmin Truta * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer * and license in png.h */ +/* IMPORTANT NOTE: + * + * Historically, the hand-coded assembler implementation of Neon optimizations + * in this module had not been in sync with the intrinsics-based implementation + * in filter_neon_intrinsics.c and palette_neon_intrinsics.c, at least since + * the introduction of riffled palette optimizations. Moreover, the assembler + * code used to work on 32-bit ARM only, and it caused problems, even if empty, + * on 64-bit ARM. + * + * All references to this module from our internal build scripts and projects + * have been removed. + * + * For the external projects that might still expect this module to be present, + * we leave this stub in place, for the remaining lifetime of libpng-1.6.x. + * Everything should continue to function normally, as long as there are no + * deliberate attempts to use the old hand-made assembler code. A build error + * will be raised otherwise. + */ + /* This is required to get the symbol renames, which are #defines, and the * definitions (or not) of PNG_ARM_NEON_OPT and PNG_ARM_NEON_IMPLEMENTATION. */ #define PNG_VERSION_INFO_ONLY #include "../pngpriv.h" -#if (defined(__linux__) || defined(__FreeBSD__)) && defined(__ELF__) -.section .note.GNU-stack,"",%progbits /* mark stack as non-executable */ -#endif - #ifdef PNG_READ_SUPPORTED - -/* Assembler NEON support - only works for 32-bit ARM (i.e. it does not work for - * ARM64). The code in arm/filter_neon_intrinsics.c supports ARM64, however it - * only works if -mfpu=neon is specified on the GCC command line. See pngpriv.h - * for the logic which sets PNG_USE_ARM_NEON_ASM: - */ #if PNG_ARM_NEON_IMPLEMENTATION == 2 /* hand-coded assembler */ - #if PNG_ARM_NEON_OPT > 0 -#ifdef __ELF__ -# define ELF +#if defined(__clang__) +#define GNUC_VERSION 0 /* not gcc, although it might pretend to be */ +#elif defined(__GNUC__) +#define GNUC_MAJOR (__GNUC__ + 0) +#define GNUC_MINOR (__GNUC_MINOR__ + 0) +#define GNUC_PATCHLEVEL (__GNUC_PATCHLEVEL__ + 0) +#define GNUC_VERSION (GNUC_MAJOR * 10000 + GNUC_MINOR * 100 + GNUC_PATCHLEVEL) #else -# define ELF @ +#define GNUC_VERSION 0 /* not gcc */ #endif - .arch armv7-a - .fpu neon - -.macro func name, export=0 - .macro endfunc -ELF .size \name, . - \name - .endfunc - .purgem endfunc - .endm - .text - - /* Explicitly specifying alignment here because some versions of - * GAS don't align code correctly. This is harmless in correctly - * written versions of GAS. - */ - .align 2 - - .if \export - .global \name - .endif -ELF .type \name, STT_FUNC - .func \name -\name: -.endm - -func png_read_filter_row_sub4_neon, export=1 - ldr r3, [r0, #4] @ rowbytes - vmov.i8 d3, #0 -1: - vld4.32 {d4[],d5[],d6[],d7[]}, [r1,:128] - vadd.u8 d0, d3, d4 - vadd.u8 d1, d0, d5 - vadd.u8 d2, d1, d6 - vadd.u8 d3, d2, d7 - vst4.32 {d0[0],d1[0],d2[0],d3[0]},[r1,:128]! - subs r3, r3, #16 - bgt 1b - - bx lr -endfunc - -func png_read_filter_row_sub3_neon, export=1 - ldr r3, [r0, #4] @ rowbytes - vmov.i8 d3, #0 - mov r0, r1 - mov r2, #3 - mov r12, #12 - vld1.8 {q11}, [r0], r12 -1: - vext.8 d5, d22, d23, #3 - vadd.u8 d0, d3, d22 - vext.8 d6, d22, d23, #6 - vadd.u8 d1, d0, d5 - vext.8 d7, d23, d23, #1 - vld1.8 {q11}, [r0], r12 - vst1.32 {d0[0]}, [r1,:32], r2 - vadd.u8 d2, d1, d6 - vst1.32 {d1[0]}, [r1], r2 - vadd.u8 d3, d2, d7 - vst1.32 {d2[0]}, [r1], r2 - vst1.32 {d3[0]}, [r1], r2 - subs r3, r3, #12 - bgt 1b - - bx lr -endfunc - -func png_read_filter_row_up_neon, export=1 - ldr r3, [r0, #4] @ rowbytes -1: - vld1.8 {q0}, [r1,:128] - vld1.8 {q1}, [r2,:128]! - vadd.u8 q0, q0, q1 - vst1.8 {q0}, [r1,:128]! - subs r3, r3, #16 - bgt 1b - - bx lr -endfunc - -func png_read_filter_row_avg4_neon, export=1 - ldr r12, [r0, #4] @ rowbytes - vmov.i8 d3, #0 -1: - vld4.32 {d4[],d5[],d6[],d7[]}, [r1,:128] - vld4.32 {d16[],d17[],d18[],d19[]},[r2,:128]! - vhadd.u8 d0, d3, d16 - vadd.u8 d0, d0, d4 - vhadd.u8 d1, d0, d17 - vadd.u8 d1, d1, d5 - vhadd.u8 d2, d1, d18 - vadd.u8 d2, d2, d6 - vhadd.u8 d3, d2, d19 - vadd.u8 d3, d3, d7 - vst4.32 {d0[0],d1[0],d2[0],d3[0]},[r1,:128]! - subs r12, r12, #16 - bgt 1b - - bx lr -endfunc - -func png_read_filter_row_avg3_neon, export=1 - push {r4,lr} - ldr r12, [r0, #4] @ rowbytes - vmov.i8 d3, #0 - mov r0, r1 - mov r4, #3 - mov lr, #12 - vld1.8 {q11}, [r0], lr -1: - vld1.8 {q10}, [r2], lr - vext.8 d5, d22, d23, #3 - vhadd.u8 d0, d3, d20 - vext.8 d17, d20, d21, #3 - vadd.u8 d0, d0, d22 - vext.8 d6, d22, d23, #6 - vhadd.u8 d1, d0, d17 - vext.8 d18, d20, d21, #6 - vadd.u8 d1, d1, d5 - vext.8 d7, d23, d23, #1 - vld1.8 {q11}, [r0], lr - vst1.32 {d0[0]}, [r1,:32], r4 - vhadd.u8 d2, d1, d18 - vst1.32 {d1[0]}, [r1], r4 - vext.8 d19, d21, d21, #1 - vadd.u8 d2, d2, d6 - vhadd.u8 d3, d2, d19 - vst1.32 {d2[0]}, [r1], r4 - vadd.u8 d3, d3, d7 - vst1.32 {d3[0]}, [r1], r4 - subs r12, r12, #12 - bgt 1b - - pop {r4,pc} -endfunc - -.macro paeth rx, ra, rb, rc - vaddl.u8 q12, \ra, \rb @ a + b - vaddl.u8 q15, \rc, \rc @ 2*c - vabdl.u8 q13, \rb, \rc @ pa - vabdl.u8 q14, \ra, \rc @ pb - vabd.u16 q15, q12, q15 @ pc - vcle.u16 q12, q13, q14 @ pa <= pb - vcle.u16 q13, q13, q15 @ pa <= pc - vcle.u16 q14, q14, q15 @ pb <= pc - vand q12, q12, q13 @ pa <= pb && pa <= pc - vmovn.u16 d28, q14 - vmovn.u16 \rx, q12 - vbsl d28, \rb, \rc - vbsl \rx, \ra, d28 -.endm - -func png_read_filter_row_paeth4_neon, export=1 - ldr r12, [r0, #4] @ rowbytes - vmov.i8 d3, #0 - vmov.i8 d20, #0 -1: - vld4.32 {d4[],d5[],d6[],d7[]}, [r1,:128] - vld4.32 {d16[],d17[],d18[],d19[]},[r2,:128]! - paeth d0, d3, d16, d20 - vadd.u8 d0, d0, d4 - paeth d1, d0, d17, d16 - vadd.u8 d1, d1, d5 - paeth d2, d1, d18, d17 - vadd.u8 d2, d2, d6 - paeth d3, d2, d19, d18 - vmov d20, d19 - vadd.u8 d3, d3, d7 - vst4.32 {d0[0],d1[0],d2[0],d3[0]},[r1,:128]! - subs r12, r12, #16 - bgt 1b - - bx lr -endfunc - -func png_read_filter_row_paeth3_neon, export=1 - push {r4,lr} - ldr r12, [r0, #4] @ rowbytes - vmov.i8 d3, #0 - vmov.i8 d4, #0 - mov r0, r1 - mov r4, #3 - mov lr, #12 - vld1.8 {q11}, [r0], lr -1: - vld1.8 {q10}, [r2], lr - paeth d0, d3, d20, d4 - vext.8 d5, d22, d23, #3 - vadd.u8 d0, d0, d22 - vext.8 d17, d20, d21, #3 - paeth d1, d0, d17, d20 - vst1.32 {d0[0]}, [r1,:32], r4 - vext.8 d6, d22, d23, #6 - vadd.u8 d1, d1, d5 - vext.8 d18, d20, d21, #6 - paeth d2, d1, d18, d17 - vext.8 d7, d23, d23, #1 - vld1.8 {q11}, [r0], lr - vst1.32 {d1[0]}, [r1], r4 - vadd.u8 d2, d2, d6 - vext.8 d19, d21, d21, #1 - paeth d3, d2, d19, d18 - vst1.32 {d2[0]}, [r1], r4 - vmov d4, d19 - vadd.u8 d3, d3, d7 - vst1.32 {d3[0]}, [r1], r4 - subs r12, r12, #12 - bgt 1b +#if (GNUC_VERSION > 0) && (GNUC_VERSION < 40300) +#error "PNG_ARM_NEON is not supported with gcc versions earlier than 4.3.0" +#elif GNUC_VERSION == 40504 +#error "PNG_ARM_NEON is not supported with gcc version 4.5.4" +#else +#error "Please use 'arm/*_neon_intrinsics.c' for PNG_ARM_NEON support" +#endif - pop {r4,pc} -endfunc #endif /* PNG_ARM_NEON_OPT > 0 */ -#endif /* PNG_ARM_NEON_IMPLEMENTATION == 2 (assembler) */ +#endif /* PNG_ARM_NEON_IMPLEMENTATION == 2 */ #endif /* READ */ diff --git a/vs/libpng/arm/filter_neon_intrinsics.c b/vs/libpng/arm/filter_neon_intrinsics.c index ea7e356bccf..7c3e0da4d8d 100644 --- a/vs/libpng/arm/filter_neon_intrinsics.c +++ b/vs/libpng/arm/filter_neon_intrinsics.c @@ -1,12 +1,10 @@ - /* filter_neon_intrinsics.c - NEON optimised filter functions * + * Copyright (c) 2018 Cosmin Truta * Copyright (c) 2014,2016 Glenn Randers-Pehrson * Written by James Yu , October 2013. * Based on filter_neon.S, written by Mans Rullgard, 2011. * - * Last changed in libpng 1.6.22 [May 26, 2016] - * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer * and license in png.h @@ -19,7 +17,11 @@ /* This code requires -mfpu=neon on the command line: */ #if PNG_ARM_NEON_IMPLEMENTATION == 1 /* intrinsics code from pngpriv.h */ -#include +#if defined(_MSC_VER) && !defined(__clang__) && defined(_M_ARM64) +# include +#else +# include +#endif /* libpng row pointers are not necessarily aligned to any particular boundary, * however this code will only work with appropriate alignment. arm/arm_init.c @@ -33,6 +35,11 @@ * 'type'. This is written this way just to hide the GCC strict aliasing * warning; note that the code is safe because there never is an alias between * the input and output pointers. + * + * When compiling with MSVC ARM64, the png_ldr macro can't be passed directly + * to vst4_lane_u32, because of an internal compiler error inside MSVC. + * To avoid this compiler bug, we use a temporary variable (vdest_val) to store + * the result of png_ldr. */ #define png_ldr(type,pointer)\ (temp_pointer = png_ptr(type,pointer), *temp_pointer) @@ -125,12 +132,15 @@ png_read_filter_row_sub4_neon(png_row_infop row_info, png_bytep row, uint8x8x4_t *vrpt = png_ptr(uint8x8x4_t,&vtmp); uint8x8x4_t vrp = *vrpt; uint32x2x4_t *temp_pointer; + uint32x2x4_t vdest_val; vdest.val[0] = vadd_u8(vdest.val[3], vrp.val[0]); vdest.val[1] = vadd_u8(vdest.val[0], vrp.val[1]); vdest.val[2] = vadd_u8(vdest.val[1], vrp.val[2]); vdest.val[3] = vadd_u8(vdest.val[2], vrp.val[3]); - vst4_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2x4_t,&vdest), 0); + + vdest_val = png_ldr(uint32x2x4_t, &vdest); + vst4_lane_u32(png_ptr(uint32_t,rp), vdest_val, 0); } PNG_UNUSED(prev_row) @@ -223,6 +233,7 @@ png_read_filter_row_avg4_neon(png_row_infop row_info, png_bytep row, uint8x8x4_t *vrpt, *vppt; uint8x8x4_t vrp, vpp; uint32x2x4_t *temp_pointer; + uint32x2x4_t vdest_val; vtmp = vld4_u32(png_ptr(uint32_t,rp)); vrpt = png_ptr(uint8x8x4_t,&vtmp); @@ -240,7 +251,8 @@ png_read_filter_row_avg4_neon(png_row_infop row_info, png_bytep row, vdest.val[3] = vhadd_u8(vdest.val[2], vpp.val[3]); vdest.val[3] = vadd_u8(vdest.val[3], vrp.val[3]); - vst4_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2x4_t,&vdest), 0); + vdest_val = png_ldr(uint32x2x4_t, &vdest); + vst4_lane_u32(png_ptr(uint32_t,rp), vdest_val, 0); } } @@ -359,6 +371,7 @@ png_read_filter_row_paeth4_neon(png_row_infop row_info, png_bytep row, uint8x8x4_t *vrpt, *vppt; uint8x8x4_t vrp, vpp; uint32x2x4_t *temp_pointer; + uint32x2x4_t vdest_val; vtmp = vld4_u32(png_ptr(uint32_t,rp)); vrpt = png_ptr(uint8x8x4_t,&vtmp); @@ -378,7 +391,8 @@ png_read_filter_row_paeth4_neon(png_row_infop row_info, png_bytep row, vlast = vpp.val[3]; - vst4_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2x4_t,&vdest), 0); + vdest_val = png_ldr(uint32x2x4_t, &vdest); + vst4_lane_u32(png_ptr(uint32_t,rp), vdest_val, 0); } } diff --git a/vs/libpng/arm/palette_neon_intrinsics.c b/vs/libpng/arm/palette_neon_intrinsics.c new file mode 100644 index 00000000000..ece9d46f2f6 --- /dev/null +++ b/vs/libpng/arm/palette_neon_intrinsics.c @@ -0,0 +1,150 @@ +/* palette_neon_intrinsics.c - NEON optimised palette expansion functions + * + * Copyright (c) 2018-2019 Cosmin Truta + * Copyright (c) 2017-2018 Arm Holdings. All rights reserved. + * Written by Richard Townsend , February 2017. + * + * This code is released under the libpng license. + * For conditions of distribution and use, see the disclaimer + * and license in png.h + */ + +#include "../pngpriv.h" + +#if PNG_ARM_NEON_IMPLEMENTATION == 1 + +#if defined(_MSC_VER) && !defined(__clang__) && defined(_M_ARM64) +# include +#else +# include +#endif + +/* Build an RGBA8 palette from the separate RGB and alpha palettes. */ +void +png_riffle_palette_neon(png_structrp png_ptr) +{ + png_const_colorp palette = png_ptr->palette; + png_bytep riffled_palette = png_ptr->riffled_palette; + png_const_bytep trans_alpha = png_ptr->trans_alpha; + int num_trans = png_ptr->num_trans; + int i; + + /* Initially black, opaque. */ + uint8x16x4_t w = {{ + vdupq_n_u8(0x00), + vdupq_n_u8(0x00), + vdupq_n_u8(0x00), + vdupq_n_u8(0xff), + }}; + + png_debug(1, "in png_riffle_palette_neon"); + + /* First, riffle the RGB colours into an RGBA8 palette. + * The alpha component is set to opaque for now. + */ + for (i = 0; i < 256; i += 16) + { + uint8x16x3_t v = vld3q_u8((png_const_bytep)(palette + i)); + w.val[0] = v.val[0]; + w.val[1] = v.val[1]; + w.val[2] = v.val[2]; + vst4q_u8(riffled_palette + (i << 2), w); + } + + /* Fix up the missing transparency values. */ + for (i = 0; i < num_trans; i++) + riffled_palette[(i << 2) + 3] = trans_alpha[i]; +} + +/* Expands a palettized row into RGBA8. */ +int +png_do_expand_palette_rgba8_neon(png_structrp png_ptr, png_row_infop row_info, + png_const_bytep row, png_bytepp ssp, png_bytepp ddp) +{ + png_uint_32 row_width = row_info->width; + const png_uint_32 *riffled_palette = + png_aligncastconst(png_const_uint_32p, png_ptr->riffled_palette); + const png_uint_32 pixels_per_chunk = 4; + png_uint_32 i; + + png_debug(1, "in png_do_expand_palette_rgba8_neon"); + + PNG_UNUSED(row) + if (row_width < pixels_per_chunk) + return 0; + + /* This function originally gets the last byte of the output row. + * The NEON part writes forward from a given position, so we have + * to seek this back by 4 pixels x 4 bytes. + */ + *ddp = *ddp - ((pixels_per_chunk * sizeof(png_uint_32)) - 1); + + for (i = 0; i < row_width; i += pixels_per_chunk) + { + uint32x4_t cur; + png_bytep sp = *ssp - i, dp = *ddp - (i << 2); + cur = vld1q_dup_u32 (riffled_palette + *(sp - 3)); + cur = vld1q_lane_u32(riffled_palette + *(sp - 2), cur, 1); + cur = vld1q_lane_u32(riffled_palette + *(sp - 1), cur, 2); + cur = vld1q_lane_u32(riffled_palette + *(sp - 0), cur, 3); + vst1q_u32((void *)dp, cur); + } + if (i != row_width) + { + /* Remove the amount that wasn't processed. */ + i -= pixels_per_chunk; + } + + /* Decrement output pointers. */ + *ssp = *ssp - i; + *ddp = *ddp - (i << 2); + return i; +} + +/* Expands a palettized row into RGB8. */ +int +png_do_expand_palette_rgb8_neon(png_structrp png_ptr, png_row_infop row_info, + png_const_bytep row, png_bytepp ssp, png_bytepp ddp) +{ + png_uint_32 row_width = row_info->width; + png_const_bytep palette = (png_const_bytep)png_ptr->palette; + const png_uint_32 pixels_per_chunk = 8; + png_uint_32 i; + + png_debug(1, "in png_do_expand_palette_rgb8_neon"); + + PNG_UNUSED(row) + if (row_width <= pixels_per_chunk) + return 0; + + /* Seeking this back by 8 pixels x 3 bytes. */ + *ddp = *ddp - ((pixels_per_chunk * sizeof(png_color)) - 1); + + for (i = 0; i < row_width; i += pixels_per_chunk) + { + uint8x8x3_t cur; + png_bytep sp = *ssp - i, dp = *ddp - ((i << 1) + i); + cur = vld3_dup_u8(palette + sizeof(png_color) * (*(sp - 7))); + cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 6)), cur, 1); + cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 5)), cur, 2); + cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 4)), cur, 3); + cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 3)), cur, 4); + cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 2)), cur, 5); + cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 1)), cur, 6); + cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 0)), cur, 7); + vst3_u8((void *)dp, cur); + } + + if (i != row_width) + { + /* Remove the amount that wasn't processed. */ + i -= pixels_per_chunk; + } + + /* Decrement output pointers. */ + *ssp = *ssp - i; + *ddp = *ddp - ((i << 1) + i); + return i; +} + +#endif /* PNG_ARM_NEON_IMPLEMENTATION */ diff --git a/vs/libpng/autogen.sh b/vs/libpng/autogen.sh index 91607171bbd..4ac8f4b9e5d 100755 --- a/vs/libpng/autogen.sh +++ b/vs/libpng/autogen.sh @@ -77,13 +77,14 @@ libpng_autotools_files="Makefile.in aclocal.m4 config.guess config.h.in config.sub configure depcomp install-sh ltmain.sh missing\ test-driver" # -# Files generated by versions of configue >2.68 or automake >1.13 (i.e. later +# Files generated by versions of autoconf >2.68 or automake >1.13 (i.e. later # versions than those required by configure.ac): libpng_autotools_extra="compile config.h.in~" # # These are separate because 'maintainer-clean' does not remove them. -libpng_libtool_files="scripts/libtool.m4 scripts/ltoptions.m4\ - scripts/ltsugar.m4 scripts/ltversion.m4 scripts/lt~obsolete.m4" +libpng_libtool_files="scripts/autoconf/libtool.m4 scripts/autoconf/ltoptions.m4\ + scripts/autoconf/ltsugar.m4 scripts/autoconf/ltversion.m4\ + scripts/autoconf/lt~obsolete.m4" libpng_autotools_dirs="autom4te.cache" # not required # @@ -194,7 +195,7 @@ case "$mode" in if test -d .git then exec >&2 - echo "ERROR: running autoreconf on an initialized sytem" + echo "ERROR: running autoreconf on an initialized system" echo " This is not necessary; it is only necessary to remake the" echo " autotools generated files if Makefile.am or configure.ac" echo " change and make does the right thing with:" diff --git a/vs/libpng/build-dosbox.sh b/vs/libpng/build-dosbox.sh index e3a3e694d5c..6a8179839a8 100755 --- a/vs/libpng/build-dosbox.sh +++ b/vs/libpng/build-dosbox.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh rm -Rfv linux-host || exit 1 mkdir -p linux-host || exit 1 diff --git a/vs/libpng/ci/.shellcheckrc b/vs/libpng/ci/.shellcheckrc new file mode 100644 index 00000000000..3c035d60c96 --- /dev/null +++ b/vs/libpng/ci/.shellcheckrc @@ -0,0 +1,11 @@ +# Disable the "expressions don't expand in single quotes, use double quotes" +# advice. We need the regular expressions to remain uninterpolated. +disable=SC2016 + +# Disable the "variable appears unused" warning caused by the use of getopts +# with an obligatory (but unused) variable name in the main function. +disable=SC2034 + +# Disable all the "quote to prevent globbing or word splitting" advice. +# We need word splitting for well-known variables like MAKEFLAGS and CFLAGS. +disable=SC2086,SC2206 diff --git a/vs/libpng/ci/LICENSE_MIT.txt b/vs/libpng/ci/LICENSE_MIT.txt new file mode 100644 index 00000000000..9cf106272ac --- /dev/null +++ b/vs/libpng/ci/LICENSE_MIT.txt @@ -0,0 +1,19 @@ +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vs/libpng/ci/README.md b/vs/libpng/ci/README.md new file mode 100644 index 00000000000..f26229ce08b --- /dev/null +++ b/vs/libpng/ci/README.md @@ -0,0 +1,25 @@ +Scripts for the Continuous Integration of the PNG Reference Library +=================================================================== + +Copyright Notice +---------------- + +Copyright (c) 2019-2024 Cosmin Truta. + +Use, modification and distribution are subject to the MIT License. +Please see the accompanying file `LICENSE_MIT.txt` or visit +https://opensource.org/license/mit + +File List +--------- + + LICENSE_MIT.txt ==> The License file + README.md ==> This file + ci_lint.sh ==> Lint the source code + ci_shellify.sh ==> Convert select definitions to shell syntax + ci_verify_cmake.sh ==> Verify the build driven by CMakeLists.txt + ci_verify_configure.sh ==> Verify the build driven by configure + ci_verify_makefiles.sh ==> Verify the build driven by scripts/makefile.* + ci_verify_version.sh ==> Verify the consistency of version definitions + lib/ci.lib.sh ==> Shell utilities for the main ci_*.sh scripts + targets/*/ci_env.*.sh ==> Shell environments for cross-platform testing diff --git a/vs/libpng/ci/ci_lint.sh b/vs/libpng/ci/ci_lint.sh new file mode 100644 index 00000000000..6620843cb5b --- /dev/null +++ b/vs/libpng/ci/ci_lint.sh @@ -0,0 +1,142 @@ +#!/bin/sh +set -o errexit -o pipefail -o posix + +# Copyright (c) 2019-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +# shellcheck source=ci/lib/ci.lib.sh +source "$(dirname "$0")/lib/ci.lib.sh" +cd "$CI_TOPLEVEL_DIR" + +# Initialize the global constants CI_{...}{CHECK,CHECKER,LINT}. +CI_SHELLCHECK="${CI_SHELLCHECK:-shellcheck}" +CI_EDITORCONFIG_CHECKER="${CI_EDITORCONFIG_CHECKER:-editorconfig-checker}" +CI_YAMLLINT="${CI_YAMLLINT:-yamllint}" + +# Initialize the global lint status. +CI_LINT_STATUS=0 + +ci_init_lint() { + ci_info "## START OF LINTING ##" + local my_program + # Complete the initialization of CI_SHELLCHECK. + # Set it to the empty string if the shellcheck program is unavailable. + my_program="$(command -v "$CI_SHELLCHECK")" || { + ci_warn "program not found: '$CI_SHELLCHECK'" + } + CI_SHELLCHECK="$my_program" + # Complete the initialization of CI_EDITORCONFIG_CHECKER. + # Set it to the empty string if the editorconfig-checker program is unavailable. + my_program="$(command -v "$CI_EDITORCONFIG_CHECKER")" || { + ci_warn "program not found: '$CI_EDITORCONFIG_CHECKER'" + } + CI_EDITORCONFIG_CHECKER="$my_program" + # Complete the initialization of CI_YAMLLINT. + # Set it to the empty string if the yamllint program is unavailable. + my_program="$(command -v "$CI_YAMLLINT")" || { + ci_warn "program not found: '$CI_YAMLLINT'" + } + CI_YAMLLINT="$my_program" +} + +ci_finish_lint() { + ci_info "## END OF LINTING ##" + if [ $CI_LINT_STATUS -eq 0 ] + then + ci_info "## SUCCESS ##" + else + ci_info "linting failed" + fi + return "$CI_LINT_STATUS" +} + +ci_lint_ci_scripts() { + [ -x $CI_SHELLCHECK ] || { + ci_warn "## NOT LINTING: CI scripts ##" + return 0 + } + ci_info "## LINTING: CI scripts ##" + ci_spawn "$CI_SHELLCHECK" --version + find ./ci -maxdepth 1 -name "*.sh" | { + local my_file + while IFS="" read -r my_file + do + ci_spawn "$CI_SHELLCHECK" -x "$my_file" || { + # Linting failed. + return 1 + } + done + } +} + +ci_lint_text_files() { + [ -x $CI_EDITORCONFIG_CHECKER ] || { + ci_warn "## NOT LINTING: text files ##" + return 0 + } + ci_info "## LINTING: text files ##" + ci_spawn "$CI_EDITORCONFIG_CHECKER" --version + ci_spawn "$CI_EDITORCONFIG_CHECKER" --config .editorconfig-checker.json || { + # Linting failed. + return 1 + } +} + +ci_lint_yaml_files() { + [ -x $CI_YAMLLINT ] || { + ci_warn "## NOT LINTING: YAML files ##" + return 0 + } + ci_info "## LINTING: YAML files ##" + ci_spawn "$CI_YAMLLINT" --version + # Considering that the YAML format is an extension of the JSON format, + # we can lint both the YAML files and the plain JSON files here. + find . \( -iname "*.yml" -o -iname "*.yaml" -o -iname "*.json" \) -not -path "./out/*" | { + local my_file + while IFS="" read -r my_file + do + ci_spawn "$CI_YAMLLINT" --strict "$my_file" || { + # Linting failed. + return 1 + } + done + } +} + +ci_lint() { + ci_init_lint + ci_lint_ci_scripts || CI_LINT_STATUS=1 + ci_lint_text_files || CI_LINT_STATUS=1 + ci_lint_yaml_files || CI_LINT_STATUS=1 + # TODO: ci_lint_png_files, etc. + ci_finish_lint +} + +usage() { + echo "usage: $CI_SCRIPT_NAME []" + echo "options: -?|-h|--help" + exit "${@:-0}" +} + +main() { + local opt + while getopts ":" opt + do + # This ain't a while-loop. It only pretends to be. + case $1 in -[?h]*|--help|--help=*) usage 0;; esac + ci_err "unknown option: '$1'" + done + shift $((OPTIND - 1)) + [ $# -eq 0 ] || { + echo >&2 "error: unexpected argument: '$1'" + usage 2 + } + # And... go! + ci_lint +} + +main "$@" diff --git a/vs/libpng/ci/ci_shellify.sh b/vs/libpng/ci/ci_shellify.sh new file mode 100644 index 00000000000..09463ddfab2 --- /dev/null +++ b/vs/libpng/ci/ci_shellify.sh @@ -0,0 +1,93 @@ +#!/bin/sh +set -o errexit -o pipefail -o posix + +# Copyright (c) 2019-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +# shellcheck source=ci/lib/ci.lib.sh +source "$(dirname "$0")/lib/ci.lib.sh" +cd "$CI_TOPLEVEL_DIR" + +ci_shellify_c() { + # Convert C preprocessor text, specifically originating + # from png.h, to shell scripting text. + # Select only the easy-to-parse definitions of PNG_LIBPNG_*. + sed -n -e '/^\# *define * PNG_LIBPNG_[^ ]* * ["0-9A-Za-z_]/ p' | + sed -e 's/^\# *define * PNG\([^ ]*\) * \([^ ]*\)/PNG\1=\2/' \ + -e 's/=PNG\([0-9A-Za-z_]*\)/=\${PNG\1}/' \ + -e 's/^\([^ ]*=[^ ]*\).*$/export \1;/' +} + +ci_shellify_autoconf() { + # Convert autoconf (M4) text, specifically originating + # from configure.ac, to shell scripting text. + # Select only the easy-to-parse definitions of PNGLIB_*. + sed -n -e '/^ *PNGLIB_[^ ]*=[$"0-9A-Za-z_]/ p' | + sed -e 's/^ *PNG\([0-9A-Za-z_]*\)=\([^# ]*\).*$/PNG\1=\2/' \ + -e 's/^\([^ ]*=[^ ]*\).*$/export \1;/' +} + +ci_shellify_cmake() { + # Convert CMake lists text, specifically originating + # from CMakeLists.txt, to shell scripting text. + # Select only the easy-to-parse definitions of PNGLIB_*. + sed -n -e '/^ *set *(PNGLIB_[^ ]* * [$"0-9A-Za-z_].*)/ p' | + sed -e 's/^ *set *(PNG\([^ ]*\) * \([^() ]*\)).*$/PNG\1=\2/' \ + -e 's/^\([^ ]*=[^ ]*\).*$/export \1;/' +} + +ci_shellify() { + local arg filename + for arg in "$@" + do + test -f "$arg" || ci_err "no such file: '$arg'" + filename="$(basename -- "$arg")" + case "$filename" in + ( *.[ch] ) + [ $filename = png.h ] || { + ci_err "unable to shellify: '$filename' (expecting: 'png.h')" + } + ci_shellify_c <"$arg" ;; + ( config* | *.ac ) + [ $filename = configure.ac ] || { + ci_err "unable to shellify: '$filename' (expecting: 'configure.ac')" + } + ci_shellify_autoconf <"$arg" ;; + ( *CMake* | *cmake* | *.txt ) + case $filename in + [Cc][Mm]ake[Ll]ists.txt) ;; + *) ci_err "unable to shellify: '$filename' (expecting: 'CMakeLists.txt')" ;; + esac + ci_shellify_cmake <"$arg" ;; + ( * ) + ci_err "unable to shellify: '$arg'" ;; + esac + done +} + +usage() { + echo "usage: $CI_SCRIPT_NAME [] ..." + echo "options: -?|-h|--help" + echo "files: png.h|configure.ac|CMakeLists.txt" + exit "${@:-0}" +} + +main() { + local opt + while getopts ":" opt + do + # This ain't a while-loop. It only pretends to be. + case $1 in -[?h]*|--help|--help=*) usage 0;; esac + ci_err "unknown option: '$1'" + done + shift $((OPTIND - 1)) + [ $# -eq 0 ] && usage 2 + # And... go! + ci_shellify "$@" +} + +main "$@" diff --git a/vs/libpng/ci/ci_verify_cmake.sh b/vs/libpng/ci/ci_verify_cmake.sh new file mode 100644 index 00000000000..b016e1a521c --- /dev/null +++ b/vs/libpng/ci/ci_verify_cmake.sh @@ -0,0 +1,220 @@ +#!/bin/sh +set -o errexit -o pipefail -o posix + +# Copyright (c) 2019-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +# shellcheck source=ci/lib/ci.lib.sh +source "$(dirname "$0")/lib/ci.lib.sh" +cd "$CI_TOPLEVEL_DIR" + +CI_SRC_DIR="$CI_TOPLEVEL_DIR" +CI_OUT_DIR="$CI_TOPLEVEL_DIR/out" +CI_BUILD_DIR="$CI_OUT_DIR/ci_verify_cmake.$CI_TARGET_SYSTEM.$CI_TARGET_ARCH.build" +CI_INSTALL_DIR="$CI_OUT_DIR/ci_verify_cmake.$CI_TARGET_SYSTEM.$CI_TARGET_ARCH.install" + +ci_init_build() { + # Ensure that the mandatory variables are initialized. + CI_CMAKE="${CI_CMAKE:-cmake}" + CI_CTEST="${CI_CTEST:-ctest}" + CI_CMAKE_BUILD_TYPE="${CI_CMAKE_BUILD_TYPE:-Release}" + case $CI_CMAKE_GENERATOR in + "Visual Studio"*) + # Clean up incidental mixtures of Windows and Bash-on-Windows + # environment variables, to avoid confusing MSBuild. + [ -n "$TEMP" ] && { [ -n "$Temp" ] || [ -n "$temp" ]; } && unset TEMP + [ -n "$TMP" ] && { [ -n "$Tmp" ] || [ -n "$tmp" ]; } && unset TMP + # Ensure that CI_CMAKE_GENERATOR_PLATFORM is initialized for this generator. + [ -z "$CI_CMAKE_GENERATOR_PLATFORM" ] && + ci_err_internal "missing \$CI_CMAKE_GENERATOR_PLATFORM" + ;; + *) + [ -x $(command -v ninja) ] && + CI_CMAKE_GENERATOR=${CI_CMAKE_GENERATOR:-Ninja} + ;; + esac +} + +ci_trace_build() { + ci_info "## START OF CONFIGURATION ##" + ci_info "build arch: $CI_BUILD_ARCH" + ci_info "build system: $CI_BUILD_SYSTEM" + [ "$CI_TARGET_SYSTEM.$CI_TARGET_ARCH" != "$CI_BUILD_SYSTEM.$CI_BUILD_ARCH" ] && { + ci_info "target arch: $CI_TARGET_ARCH" + ci_info "target system: $CI_TARGET_SYSTEM" + } + ci_info "source directory: $CI_SRC_DIR" + ci_info "build directory: $CI_BUILD_DIR" + ci_info "install directory: $CI_INSTALL_DIR" + ci_info "environment option: \$CI_CMAKE: '$CI_CMAKE'" + ci_info "environment option: \$CI_CMAKE_GENERATOR: '$CI_CMAKE_GENERATOR'" + ci_info "environment option: \$CI_CMAKE_GENERATOR_PLATFORM: '$CI_CMAKE_GENERATOR_PLATFORM'" + ci_info "environment option: \$CI_CMAKE_BUILD_TYPE: '$CI_CMAKE_BUILD_TYPE'" + ci_info "environment option: \$CI_CMAKE_BUILD_FLAGS: '$CI_CMAKE_BUILD_FLAGS'" + ci_info "environment option: \$CI_CMAKE_TOOLCHAIN_FILE: '$CI_CMAKE_TOOLCHAIN_FILE'" + ci_info "environment option: \$CI_CMAKE_VARS: '$CI_CMAKE_VARS'" + ci_info "environment option: \$CI_CTEST: '$CI_CTEST'" + ci_info "environment option: \$CI_CTEST_FLAGS: '$CI_CTEST_FLAGS'" + ci_info "environment option: \$CI_CC: '$CI_CC'" + ci_info "environment option: \$CI_CC_FLAGS: '$CI_CC_FLAGS'" + ci_info "environment option: \$CI_AR: '$CI_AR'" + ci_info "environment option: \$CI_RANLIB: '$CI_RANLIB'" + ci_info "environment option: \$CI_SANITIZERS: '$CI_SANITIZERS'" + ci_info "environment option: \$CI_FORCE: '$CI_FORCE'" + ci_info "environment option: \$CI_NO_BUILD: '$CI_NO_BUILD'" + ci_info "environment option: \$CI_NO_TEST: '$CI_NO_TEST'" + ci_info "environment option: \$CI_NO_INSTALL: '$CI_NO_INSTALL'" + ci_info "environment option: \$CI_NO_CLEAN: '$CI_NO_CLEAN'" + ci_info "executable: \$CI_CMAKE: $(command -V "$CI_CMAKE")" + ci_info "executable: \$CI_CTEST: $(command -V "$CI_CTEST")" + [ -n "$CI_CC" ] && { + ci_info "executable: \$CI_CC: $(command -V "$CI_CC")" + } + [ -n "$CI_AR" ] && { + ci_info "executable: \$CI_AR: $(command -V "$CI_AR")" + } + [ -n "$CI_RANLIB" ] && { + ci_info "executable: \$CI_RANLIB: $(command -V "$CI_RANLIB")" + } + ci_info "## END OF CONFIGURATION ##" +} + +ci_cleanup_old_build() { + ci_info "## START OF PRE-BUILD CLEANUP ##" + [[ ! -e $CI_BUILD_DIR && ! -e $CI_INSTALL_DIR ]] || { + ci_spawn rm -fr "$CI_BUILD_DIR" + ci_spawn rm -fr "$CI_INSTALL_DIR" + } + ci_info "## END OF PRE-BUILD CLEANUP ##" +} + +ci_build() { + ci_info "## START OF BUILD ##" + # Adjust the CI environment variables, as needed. + CI_CMAKE="$(command -v "$CI_CMAKE")" || ci_err "bad or missing \$CI_CMAKE" + ci_spawn "$CI_CMAKE" --version + CI_CTEST="$(command -v "$CI_CTEST")" || ci_err "bad or missing \$CI_CTEST" + ci_spawn "$CI_CTEST" --version + [[ $CI_CMAKE_GENERATOR == *"Ninja"* ]] && { + CI_NINJA="$(command -v ninja)" || ci_err "bad or missing ninja, no pun intended" + ci_spawn "$CI_NINJA" --version + } + [ -n "$CI_AR" ] && { + # Use the full path of CI_AR to work around a mysterious CMake error. + CI_AR="$(command -v "$CI_AR")" || ci_err "bad or missing \$CI_AR" + } + [ -n "$CI_RANLIB" ] && { + # Use the full path of CI_RANLIB to work around a mysterious CMake error. + CI_RANLIB="$(command -v "$CI_RANLIB")" || ci_err "bad or missing \$CI_RANLIB" + } + # Export the CMake environment variables. + [ -n "$CI_CMAKE_GENERATOR" ] && { + ci_spawn export CMAKE_GENERATOR="$CI_CMAKE_GENERATOR" + } + [ -n "$CI_CMAKE_GENERATOR_PLATFORM" ] && { + ci_spawn export CMAKE_GENERATOR_PLATFORM="$CI_CMAKE_GENERATOR_PLATFORM" + } + # Initialize and populate the local arrays. + local all_cmake_vars= + local all_cmake_build_flags= + local all_ctest_flags= + [ -n "$CI_CMAKE_TOOLCHAIN_FILE" ] && { + all_cmake_vars="${all_cmake_vars}-DCMAKE_TOOLCHAIN_FILE=$CI_CMAKE_TOOLCHAIN_FILE +" + } + [ -n "$CI_CC" ] && { + all_cmake_vars="${all_cmake_vars}-DCMAKE_C_COMPILER=$CI_CC +" + } + [[ $CI_CC_FLAGS || $CI_SANITIZERS ]] && { + [ -n "$CI_SANITIZERS" ] && CI_CC_FLAGS="$CI_CC_FLAGS${CI_CC_FLAGS:+" "}-fsanitize=$CI_SANITIZERS" + all_cmake_vars="${all_cmake_vars}-DCMAKE_C_FLAGS=$CI_CC_FLAGS +" + } + [ -n "$CI_AR" ] && { + all_cmake_vars="${all_cmake_vars}-DCMAKE_AR=$CI_AR +" + } + [ -n "$CI_RANLIB" ] && { + all_cmake_vars="${all_cmake_vars}-DCMAKE_RANLIB=$CI_RANLIB +" + } + all_cmake_vars="${all_cmake_vars}-DCMAKE_BUILD_TYPE=$CI_CMAKE_BUILD_TYPE +" + all_cmake_vars="${all_cmake_vars}-DCMAKE_VERBOSE_MAKEFILE=ON +" + all_cmake_vars="${all_cmake_vars}$CI_CMAKE_VARS +" + all_cmake_build_flags="${all_cmake_build_flags}$CI_CMAKE_BUILD_FLAGS +" + all_ctest_flags="${all_ctest_flags}$CI_CTEST_FLAGS +" + # And... build! + ci_spawn mkdir -p "$CI_BUILD_DIR" + # Spawn "cmake ...". + ci_spawn "$CI_CMAKE" -B "$CI_BUILD_DIR" \ + -S . \ + -DCMAKE_INSTALL_PREFIX="$CI_INSTALL_DIR" \ + $all_cmake_vars + ci_expr $((CI_NO_BUILD)) || { + # Spawn "cmake --build ...". + ci_spawn "$CI_CMAKE" --build "$CI_BUILD_DIR" \ + --config "$CI_CMAKE_BUILD_TYPE" \ + $all_cmake_build_flags + } + ci_expr $((CI_NO_TEST)) || { + # Spawn "ctest" if testing is not disabled. + ci_spawn pushd "$CI_BUILD_DIR" + ci_spawn "$CI_CTEST" --build-config "$CI_CMAKE_BUILD_TYPE" \ + $all_ctest_flags + ci_spawn popd + } + ci_expr $((CI_NO_INSTALL)) || { + # Spawn "cmake --build ... --target install" if installation is not disabled. + ci_spawn "$CI_CMAKE" --build "$CI_BUILD_DIR" \ + --config "$CI_CMAKE_BUILD_TYPE" \ + --target install \ + $all_cmake_build_flags + } + ci_expr $((CI_NO_CLEAN)) || { + # Spawn "make --build ... --target clean" if cleaning is not disabled. + ci_spawn "$CI_CMAKE" --build "$CI_BUILD_DIR" \ + --config "$CI_CMAKE_BUILD_TYPE" \ + --target clean \ + $all_cmake_build_flags + } + ci_info "## END OF BUILD ##" +} + +usage() { + echo "usage: $CI_SCRIPT_NAME []" + echo "options: -?|-h|--help" + exit "${@:-0}" +} + +main() { + local opt + while getopts ":" opt + do + # This ain't a while-loop. It only pretends to be. + case $1 in -[?h]*|--help|--help=*) usage 0;; esac + ci_err "unknown option: '$1'" + done + shift $((OPTIND - 1)) + # And... go! + ci_init_build + ci_trace_build + [ $# -eq 0 ] || { + echo >&2 "error: unexpected argument: '$1'" + echo >&2 "note: this program accepts environment options only" + usage 2 + } + ci_cleanup_old_build + ci_build +} + +main "$@" diff --git a/vs/libpng/ci/ci_verify_configure.sh b/vs/libpng/ci/ci_verify_configure.sh new file mode 100644 index 00000000000..a3cac760f45 --- /dev/null +++ b/vs/libpng/ci/ci_verify_configure.sh @@ -0,0 +1,182 @@ +#!/bin/sh +set -o errexit -o pipefail -o posix + +# Copyright (c) 2019-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +# shellcheck source=ci/lib/ci.lib.sh +source "$(dirname "$0")/lib/ci.lib.sh" +cd "$CI_TOPLEVEL_DIR" + +CI_SRC_DIR="$CI_TOPLEVEL_DIR" +CI_OUT_DIR="$CI_TOPLEVEL_DIR/out" +CI_BUILD_DIR="$CI_OUT_DIR/ci_verify_configure.$CI_TARGET_SYSTEM.$CI_TARGET_ARCH.build" +CI_INSTALL_DIR="$CI_OUT_DIR/ci_verify_configure.$CI_TARGET_SYSTEM.$CI_TARGET_ARCH.install" + +ci_init_build() { + # Ensure that the mandatory variables are initialized. + CI_MAKE="${CI_MAKE:-make}" + [ "$CI_TARGET_SYSTEM.$CI_TARGET_ARCH" != "$CI_BUILD_SYSTEM.$CI_BUILD_ARCH" ] || { + # For native builds, set CI_CC to "cc" by default if the cc command is available. + # The configure script defaults CC to "gcc", which is not always a good idea. + [ -x $(command -v cc) ] && CI_CC="${CI_CC:-cc}" + } + # Ensure that the CI_ variables that cannot be customized reliably are not initialized. + [ -z "$CI_CONFIGURE_VARS" ] || { + ci_err "unsupported: \$CI_CONFIGURE_VARS='$CI_CONFIGURE_VARS'" + } + [ -z "$CI_MAKE_VARS" ] || { + ci_err "unsupported: \$CI_MAKE_VARS='$CI_MAKE_VARS'" + } +} + +ci_trace_build() { + ci_info "## START OF CONFIGURATION ##" + ci_info "build arch: $CI_BUILD_ARCH" + ci_info "build system: $CI_BUILD_SYSTEM" + [ "$CI_TARGET_SYSTEM.$CI_TARGET_ARCH" != "$CI_BUILD_SYSTEM.$CI_BUILD_ARCH" ] && { + ci_info "target arch: $CI_TARGET_ARCH" + ci_info "target system: $CI_TARGET_SYSTEM" + } + ci_info "source directory: $CI_SRC_DIR" + ci_info "build directory: $CI_BUILD_DIR" + ci_info "install directory: $CI_INSTALL_DIR" + ci_info "environment option: \$CI_CONFIGURE_FLAGS: '$CI_CONFIGURE_FLAGS'" + ci_info "environment option: \$CI_MAKE: '$CI_MAKE'" + ci_info "environment option: \$CI_MAKE_FLAGS: '$CI_MAKE_FLAGS'" + ci_info "environment option: \$CI_CC: '$CI_CC'" + ci_info "environment option: \$CI_CC_FLAGS: '$CI_CC_FLAGS'" + ci_info "environment option: \$CI_CPP: '$CI_CPP'" + ci_info "environment option: \$CI_CPP_FLAGS: '$CI_CPP_FLAGS'" + ci_info "environment option: \$CI_AR: '$CI_AR'" + ci_info "environment option: \$CI_RANLIB: '$CI_RANLIB'" + ci_info "environment option: \$CI_LD: '$CI_LD'" + ci_info "environment option: \$CI_LD_FLAGS: '$CI_LD_FLAGS'" + ci_info "environment option: \$CI_SANITIZERS: '$CI_SANITIZERS'" + ci_info "environment option: \$CI_FORCE: '$CI_FORCE'" + ci_info "environment option: \$CI_NO_BUILD: '$CI_NO_BUILD'" + ci_info "environment option: \$CI_NO_TEST: '$CI_NO_TEST'" + ci_info "environment option: \$CI_NO_INSTALL: '$CI_NO_INSTALL'" + ci_info "environment option: \$CI_NO_CLEAN: '$CI_NO_CLEAN'" + ci_info "executable: \$CI_MAKE: $(command -V "$CI_MAKE")" + [ -n "$CI_CC" ] && { + ci_info "executable: \$CI_CC: $(command -V "$CI_CC")" + } + [ -n "$CI_CPP" ] && { + ci_info "executable: \$CI_CPP: $(command -V "$CI_CPP")" + } + [ -n "$CI_AR" ] && { + ci_info "executable: \$CI_AR: $(command -V "$CI_AR")" + } + [ -n "$CI_RANLIB" ] && { + ci_info "executable: \$CI_RANLIB: $(command -V "$CI_RANLIB")" + } + [ -n "$CI_LD" ] && { + ci_info "executable: \$CI_LD: $(command -V "$CI_LD")" + } + ci_info "## END OF CONFIGURATION ##" +} + +ci_cleanup_old_build() { + ci_info "## START OF PRE-BUILD CLEANUP ##" + [ ! -e $CI_BUILD_DIR ] && [ ! -e $CI_INSTALL_DIR ] || { + ci_spawn rm -fr "$CI_BUILD_DIR" + ci_spawn rm -fr "$CI_INSTALL_DIR" + } + [ ! -e "$CI_SRC_DIR/config.status" ] || { + ci_warn "unexpected build configuration file: '$CI_SRC_DIR/config.status'" + if ci_expr $((CI_FORCE)) + then + # Delete the old config and (possibly) the old build. + ci_info "note: forcing an in-tree build cleanup" + if [ -f $CI_SRC_DIR/Makefile ] + then + ci_spawn make -C "$CI_SRC_DIR" distclean + else + ci_spawn rm -fr "$CI_SRC_DIR"/config.{log,status} + fi + else + # Alert the user, but do not delete their files. + ci_warn "the configure script might fail" + ci_info "hint: consider using the option \$CI_FORCE=1" + fi + } + ci_info "## END OF PRE-BUILD CLEANUP ##" +} + +ci_build() { + ci_info "## START OF BUILD ##" + # Export the configure build environment. + [ -n "$CI_CC" ] && ci_spawn export CC="$CI_CC" + [ -n "$CI_CC_FLAGS" ] && ci_spawn export CFLAGS="$CI_CC_FLAGS" + [ -n "$CI_CPP" ] && ci_spawn export CPP="$CI_CPP" + [ -n "$CI_CPP_FLAGS" ] && ci_spawn export CPPFLAGS="$CI_CPP_FLAGS" + [ -n "$CI_AR" ] && ci_spawn export AR="$CI_AR" + [ -n "$CI_RANLIB" ] && ci_spawn export RANLIB="$CI_RANLIB" + [ -n "$CI_LD" ] && ci_spawn export LD="$CI_LD" + [ -n "$CI_LD_FLAGS" ] && ci_spawn export LDFLAGS="$CI_LD_FLAGS" + [ -n "$CI_SANITIZERS" ] && { + ci_spawn export CFLAGS="${CFLAGS:-"-O2"} -fsanitize=$CI_SANITIZERS" + ci_spawn export LDFLAGS="${LDFLAGS}${LDFLAGS:+" "}-fsanitize=$CI_SANITIZERS" + } + # Spawn "autogen.sh" if the configure script is not available. + [ -x "$CI_SRC_DIR/configure" ] || { + ci_spawn "$CI_SRC_DIR/autogen.sh" --maintainer + } + # And... build! + ci_spawn mkdir -p "$CI_BUILD_DIR" + ci_spawn cd "$CI_BUILD_DIR" + # Spawn "configure". + ci_spawn "$CI_SRC_DIR/configure" --prefix="$CI_INSTALL_DIR" $CI_CONFIGURE_FLAGS + ci_expr $((CI_NO_BUILD)) || { + # Spawn "make". + ci_spawn "$CI_MAKE" $CI_MAKE_FLAGS + } + ci_expr $((CI_NO_TEST)) || { + # Spawn "make test" if testing is not disabled. + ci_spawn "$CI_MAKE" $CI_MAKE_FLAGS test + } + ci_expr $((CI_NO_INSTALL)) || { + # Spawn "make install" if installation is not disabled. + ci_spawn "$CI_MAKE" $CI_MAKE_FLAGS install + } + ci_expr $((CI_NO_CLEAN)) || { + # Spawn "make clean" and "make distclean" if cleaning is not disabled. + ci_spawn "$CI_MAKE" $CI_MAKE_FLAGS clean + ci_spawn "$CI_MAKE" $CI_MAKE_FLAGS distclean + } + ci_info "## END OF BUILD ##" +} + +usage() { + echo "usage: $CI_SCRIPT_NAME []" + echo "options: -?|-h|--help" + exit "${@:-0}" +} + +main() { + local opt + while getopts ":" opt + do + # This ain't a while-loop. It only pretends to be. + case $1 in -[?h]*|--help|--help=*) usage 0;; esac + ci_err "unknown option: '$1'" + done + shift $((OPTIND - 1)) + # And... go! + ci_init_build + ci_trace_build + [ $# -eq 0 ] || { + echo >&2 "error: unexpected argument: '$1'" + echo >&2 "note: this program accepts environment options only" + usage 2 + } + ci_cleanup_old_build + ci_build +} + +main "$@" diff --git a/vs/libpng/ci/ci_verify_makefiles.sh b/vs/libpng/ci/ci_verify_makefiles.sh new file mode 100644 index 00000000000..1b3e1d1afa2 --- /dev/null +++ b/vs/libpng/ci/ci_verify_makefiles.sh @@ -0,0 +1,199 @@ +#!/bin/sh +set -o errexit -o pipefail -o posix + +# Copyright (c) 2019-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +# shellcheck source=ci/lib/ci.lib.sh +source "$(dirname "$0")/lib/ci.lib.sh" +cd "$CI_TOPLEVEL_DIR" + +CI_SRC_DIR="$CI_TOPLEVEL_DIR" + +ci_init_build() { + # Ensure that the mandatory variables are initialized. + CI_MAKE="${CI_MAKE:-make}" + case "$CI_CC" in + ( *clang* ) + CI_MAKEFILES="${CI_MAKEFILES:-"scripts/makefile.clang"}" ;; + ( *gcc* ) + CI_MAKEFILES="${CI_MAKEFILES:-"scripts/makefile.gcc"}" ;; + ( * ) + CI_MAKEFILES="${CI_MAKEFILES:-"scripts/makefile.std"}" ;; + esac +} + +ci_trace_build() { + ci_info "## START OF CONFIGURATION ##" + ci_info "build arch: $CI_BUILD_ARCH" + ci_info "build system: $CI_BUILD_SYSTEM" + [ "$CI_TARGET_SYSTEM.$CI_TARGET_ARCH" != "$CI_BUILD_SYSTEM.$CI_BUILD_ARCH" ] && { + ci_info "target arch: $CI_TARGET_ARCH" + ci_info "target system: $CI_TARGET_SYSTEM" + } + ci_info "source directory: $CI_SRC_DIR" + ci_info "environment option: \$CI_MAKEFILES: '$CI_MAKEFILES'" + ci_info "environment option: \$CI_MAKE: '$CI_MAKE'" + ci_info "environment option: \$CI_MAKE_FLAGS: '$CI_MAKE_FLAGS'" + ci_info "environment option: \$CI_MAKE_VARS: '$CI_MAKE_VARS'" + ci_info "environment option: \$CI_CC: '$CI_CC'" + ci_info "environment option: \$CI_CC_FLAGS: '$CI_CC_FLAGS'" + ci_info "environment option: \$CI_CPP: '$CI_CPP'" + ci_info "environment option: \$CI_CPP_FLAGS: '$CI_CPP_FLAGS'" + ci_info "environment option: \$CI_AR: '$CI_AR'" + ci_info "environment option: \$CI_RANLIB: '$CI_RANLIB'" + ci_info "environment option: \$CI_LD: '$CI_LD'" + ci_info "environment option: \$CI_LD_FLAGS: '$CI_LD_FLAGS'" + ci_info "environment option: \$CI_LIBS: '$CI_LIBS'" + ci_info "environment option: \$CI_SANITIZERS: '$CI_SANITIZERS'" + ci_info "environment option: \$CI_FORCE: '$CI_FORCE'" + ci_info "environment option: \$CI_NO_BUILD: '$CI_NO_BUILD'" + ci_info "environment option: \$CI_NO_TEST: '$CI_NO_TEST'" + ci_info "environment option: \$CI_NO_CLEAN: '$CI_NO_CLEAN'" + ci_info "executable: \$CI_MAKE: $(command -V "$CI_MAKE")" + [ -n "$CI_CC" ] && { + ci_info "executable: \$CI_CC: $(command -V "$CI_CC")" + } + [ -n "$CI_CPP" ] && { + ci_info "executable: \$CI_CPP: $(command -V "$CI_CPP")" + } + [ -n "$CI_AR" ] && { + ci_info "executable: \$CI_AR: $(command -V "$CI_AR")" + } + [ -n "$CI_RANLIB" ] && { + ci_info "executable: \$CI_RANLIB: $(command -V "$CI_RANLIB")" + } + [ -n "$CI_LD" ] && { + ci_info "executable: \$CI_LD: $(command -V "$CI_LD")" + } + ci_info "## END OF CONFIGURATION ##" +} + +ci_cleanup_old_build() { + # Any old makefile-based build will most likely leave a mess + # of object files behind if interrupted, e.g., via Ctrl+C. + # There may be other files behind, depending on what makefile + # had been used. We cannot easily enumerate all of those. + # Fortunately, for a clean makefiles-based build, it should be + # sufficient to remove the old object files only. + ci_info "## START OF PRE-BUILD CLEANUP ##" + local find_args=(-maxdepth 1 \( -iname "*.o" -o -iname "*.obj" \)) + [ -z "$(find "$CI_SRC_DIR" $find_args | head -n1)" ] || { + ci_warn "unexpected build found in '$CI_SRC_DIR'" + if ci_expr $((CI_FORCE)) + then + # Delete the old build. + local my_file + find "$CI_SRC_DIR" $find_args | + while IFS="" read -r my_file + do + ci_spawn rm -fr "$my_file" + done + ci_info "## END OF PRE-BUILD CLEANUP ##" + else + # Alert the user, but do not delete their existing files, + # and do not mess up their existing build. + ci_info "hint: consider using the option \$CI_FORCE=1" + ci_err "unable to continue" + fi + } +} + +ci_build() { + ci_info "## START OF BUILD ##" + # Initialize and populate the local arrays. + local all_make_flags= + local all_make_vars= + [ -n "$CI_MAKE_FLAGS" ] && { + all_make_flags="$all_make_flags $CI_MAKE_FLAGS" + } + [ -n "$CI_CC" ] && { + all_make_vars="$all_make_vars CC=$CI_CC" + } + [ -n "$CI_CC_FLAGS" ] || [ -n "$CI_SANITIZERS" ] && { + [ -n "$CI_SANITIZERS" ] && CI_CC_FLAGS="${CI_CC_FLAGS:-"-O2"} -fsanitize=$CI_SANITIZERS" + all_make_vars="$all_make_vars CFLAGS=$CI_CC_FLAGS" + } + [ -n "$CI_CPP" ] && { + all_make_vars="$all_make_vars CPP=$CI_CPP" + } + [ -n "$CI_CPP_FLAGS" ] && { + all_make_vars="$all_make_vars CPPFLAGS=$CI_CPP_FLAGS" + [ -n "$CI_AR" ] && { + all_make_vars="$all_make_vars AR=$CI_AR" + } + [ -n "$CI_RANLIB" ] && { + all_make_vars="$all_make_vars RANLIB=$CI_RANLIB" + } + [ -n "$CI_LD" ] && { + all_make_vars="$all_make_vars LD=$CI_LD" + } + [ -n "$CI_LD_FLAGS" ] || [ -n "$CI_SANITIZERS" ] && { + [ -n "$CI_SANITIZERS" ] && CI_LD_FLAGS="$CI_LD_FLAGS${CI_LD_FLAGS:+" "}-fsanitize=$CI_SANITIZERS" + all_make_vars="$all_make_vars LDFLAGS=$CI_LD_FLAGS" + } + [ -n "$CI_LIBS" ] && { + all_make_vars="$all_make_vars LIBS=$CI_LIBS" + } + all_make_vars="$all_make_vars $CI_MAKE_VARS" + # And... build! + local my_makefile + for my_makefile in $CI_MAKEFILES + do + ci_info "using makefile: $my_makefile" + ci_expr $((CI_NO_BUILD)) || { + # Spawn "make". + ci_spawn "$CI_MAKE" -f "$my_makefile" \ + $all_make_flags \ + $all_make_vars + } + ci_expr $((CI_NO_TEST)) || { + # Spawn "make test" if testing is not disabled. + ci_spawn "$CI_MAKE" -f "$my_makefile" \ + $all_make_flags \ + $all_make_vars \ + test + } + ci_expr $((CI_NO_CLEAN)) || { + # Spawn "make clean" if cleaning is not disabled. + ci_spawn "$CI_MAKE" -f "$my_makefile" \ + $all_make_flags \ + $all_make_vars \ + clean + } + done + ci_info "## END OF BUILD ##" +} + +usage() { + echo "usage: $CI_SCRIPT_NAME []" + echo "options: -?|-h|--help" + exit "${@:-0}" +} + +main() { + local opt + while getopts ":" opt + do + # This ain't a while-loop. It only pretends to be. + case $1 in -[?h]*|--help|--help=*) usage 0;; esac + ci_err "unknown option: '$1'" + done + shift $((OPTIND - 1)) + # And... go! + ci_init_build + ci_trace_build + [ $# -eq 0 ] || { + echo >&2 "error: unexpected argument: '$1'" + echo >&2 "note: this program accepts environment options only" + usage 2 + } + ci_cleanup_old_build + ci_build +} + +main "$@" diff --git a/vs/libpng/ci/ci_verify_version.sh b/vs/libpng/ci/ci_verify_version.sh new file mode 100644 index 00000000000..f1b44628cf4 --- /dev/null +++ b/vs/libpng/ci/ci_verify_version.sh @@ -0,0 +1,159 @@ +#!/bin/sh +set -o errexit -o pipefail -o posix + +# Copyright (c) 2019-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +# shellcheck source=ci/lib/ci.lib.sh +source "$(dirname "$0")/lib/ci.lib.sh" +cd "$CI_TOPLEVEL_DIR" + +ci_init_shellify() { + [ -f $CI_SCRIPT_DIR/ci_shellify.sh ] || { + ci_err_internal "missing script: '$CI_SCRIPT_DIR/ci_shellify.sh'" + } +} + +ci_run_shellify() { + ci_info "shellifying:" "$@" + local my_result + "$BASH" "$CI_SCRIPT_DIR/ci_shellify.sh" "$@" + echo "$my_result" | "$BASH" --posix || ci_err "bad shellify output" + echo "$my_result" +} + +ci_verify_version() { + ci_info "## START OF VERIFICATION ##" + local my_env_libpng_ver my_env_autoconf_ver my_env_cmake_ver my_expect + ci_init_shellify + my_env_libpng_ver="$(ci_run_shellify png.h)" + echo "$my_env_libpng_ver" + my_env_autoconf_ver="$(ci_run_shellify configure.ac)" + echo "$my_env_autoconf_ver" + my_env_cmake_ver="$(ci_run_shellify CMakeLists.txt)" + echo "$my_env_cmake_ver" + ci_info "## VERIFYING: png.h version definitions ##" + eval "$my_env_libpng_ver" + local my_expect="${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}" + case "$PNG_LIBPNG_VER_STRING" in + "$my_expect"*) ci_info "matched: \$PNG_LIBPNG_VER_STRING == $my_expect*" ;; + *) ci_err "mismatched: \$PNG_LIBPNG_VER_STRING != $my_expect*" ;; + esac + my_expect=$((PNG_LIBPNG_VER_MAJOR*10000 + PNG_LIBPNG_VER_MINOR*100 + PNG_LIBPNG_VER_RELEASE)) + if [ "$PNG_LIBPNG_VER" = "$my_expect" ] + then + ci_info "matched: \$PNG_LIBPNG_VER == $my_expect" + else + ci_err "mismatched: \$PNG_LIBPNG_VER != $my_expect" + fi + my_expect=$((PNG_LIBPNG_VER_MAJOR*10 + PNG_LIBPNG_VER_MINOR)) + if [ "$PNG_LIBPNG_VER_SHAREDLIB" = "$my_expect" ] + then + ci_info "matched: \$PNG_LIBPNG_VER_SHAREDLIB == $my_expect" + else + ci_err "mismatched: \$PNG_LIBPNG_VER_SHAREDLIB != $my_expect" + fi + if [ "$PNG_LIBPNG_VER_SONUM" = "$my_expect" ] + then + ci_info "matched: \$PNG_LIBPNG_VER_SONUM == $my_expect" + else + ci_err "mismatched: \$PNG_LIBPNG_VER_SONUM != $my_expect" + fi + if [ "$PNG_LIBPNG_VER_DLLNUM" = "$my_expect" ] + then + ci_info "matched: \$PNG_LIBPNG_VER_DLLNUM == $my_expect" + else + ci_err "mismatched: \$PNG_LIBPNG_VER_DLLNUM != $my_expect" + fi + case "$PNG_LIBPNG_VER_BUILD" in + [01]) ci_info "matched: \$PNG_LIBPNG_VER_BUILD == [01]" ;; + *) ci_err "mismatched: \$PNG_LIBPNG_VER_BUILD != [01]" ;; + esac + ci_info "## VERIFYING: png.h build definitions ##" + my_expect="${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}" + if [ "$PNG_LIBPNG_VER_STRING" = "$my_expect" ] + then + if [ $PNG_LIBPNG_VER_BUILD -eq 0 ] + then + ci_info "matched: \$PNG_LIBPNG_VER_BUILD -eq 0" + else + ci_err "mismatched: \$PNG_LIBPNG_VER_BUILD -ne 0" + fi + if [ $PNG_LIBPNG_BUILD_BASE_TYPE -eq $PNG_LIBPNG_BUILD_STABLE ] + then + ci_info "matched: \$PNG_LIBPNG_BUILD_BASE_TYPE -eq \$PNG_LIBPNG_BUILD_STABLE" + else + ci_err "mismatched: \$PNG_LIBPNG_BUILD_BASE_TYPE -ne \$PNG_LIBPNG_BUILD_STABLE" + fi + elif [ "$PNG_LIBPNG_VER_STRING" = "$my_expect".git ] + then + if [ $PNG_LIBPNG_VER_BUILD -ne 0 ] + then + ci_info "matched: \$PNG_LIBPNG_VER_BUILD -ne 0" + else + ci_err "mismatched: \$PNG_LIBPNG_VER_BUILD -eq 0" + fi + if [ $PNG_LIBPNG_BUILD_BASE_TYPE -ne $PNG_LIBPNG_BUILD_STABLE ] + then + ci_info "matched: \$PNG_LIBPNG_BUILD_BASE_TYPE -ne \$PNG_LIBPNG_BUILD_STABLE" + else + ci_err "mismatched: \$PNG_LIBPNG_BUILD_BASE_TYPE -eq \$PNG_LIBPNG_BUILD_STABLE" + fi + else + ci_err "unexpected: \$PNG_LIBPNG_VER_STRING == '$PNG_LIBPNG_VER_STRING'" + fi + ci_info "## VERIFYING: png.h type definitions ##" + my_expect="$(echo "png_libpng_version_${PNG_LIBPNG_VER_STRING}" | tr . _)" + ci_spawn grep -w -e "$my_expect" png.h + ci_info "## VERIFYING: configure.ac version definitions ##" + eval "$my_env_autoconf_ver" + if [ "$PNGLIB_VERSION" = "$PNG_LIBPNG_VER_STRING" ] + then + ci_info "matched: \$PNGLIB_VERSION == \$PNG_LIBPNG_VER_STRING" + else + ci_err "mismatched: \$PNGLIB_VERSION != \$PNG_LIBPNG_VER_STRING" + fi + ci_info "## VERIFYING: CMakeLists.txt version definitions ##" + eval "$my_env_cmake_ver" + if [ "$PNGLIB_VERSION" = "$PNG_LIBPNG_VER_STRING" ] && [ "$PNGLIB_SUBREVISION" = 0 ] + then + ci_info "matched: \$PNGLIB_VERSION == \$PNG_LIBPNG_VER_STRING" + ci_info "matched: \$PNGLIB_SUBREVISION == 0" + elif [ "$PNGLIB_VERSION.$PNGLIB_SUBREVISION" = "$PNG_LIBPNG_VER_STRING" ] + then + ci_info "matched: \$PNGLIB_VERSION.\$PNGLIB_SUBREVISION == \$PNG_LIBPNG_VER_STRING" + else + ci_err "mismatched: \$PNGLIB_VERSION != \$PNG_LIBPNG_VER_STRING" + fi + ci_info "## END OF VERIFICATION ##" + ci_info "success!" +} + +usage() { + echo "usage: $CI_SCRIPT_NAME []" + echo "options: -?|-h|--help" + exit "${@:-0}" +} + +main() { + local opt + while getopts ":" opt + do + # This ain't a while-loop. It only pretends to be. + case $1 in -[?h]*|--help|--help=*) usage 0;; esac + ci_err "unknown option: '$1'" + done + shift $((OPTIND - 1)) + [ $# -eq 0 ] || { + echo >&2 "error: unexpected argument: '$1'" + usage 2 + } + # And... go! + ci_verify_version +} + +main "$@" diff --git a/vs/libpng/ci/lib/ci.lib.sh b/vs/libpng/ci/lib/ci.lib.sh new file mode 100644 index 00000000000..eadee46220f --- /dev/null +++ b/vs/libpng/ci/lib/ci.lib.sh @@ -0,0 +1,111 @@ +# Copyright (c) 2019-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +test -f "$BASH_SOURCE" || { + echo >&2 "warning: this module requires Bash version 3 or newer" +} +test "${#BASH_SOURCE[@]}" -gt 1 || { + echo >&2 "warning: this module should be sourced from a Bash script" +} + +# Reset the locale to avoid surprises from locale-dependent commands. +export LC_ALL=C +export LANG=C +export LANGUAGE=C + +# Reset CDPATH to avoid surprises from the "cd" command. +export CDPATH="" + +# Initialize the global constants CI_SCRIPT_{NAME,DIR} and CI_TOPLEVEL_DIR. +CI_SCRIPT_NAME="$(basename -- "$0")" +CI_SCRIPT_DIR="$(cd "$(dirname -- "$0")" && pwd)" +CI_TOPLEVEL_DIR="$(cd "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd)" + +# Initialize the global constants CI_BUILD_{...} for the host build platform. +CI_BUILD_ARCH="${CI_BUILD_ARCH:-"$(uname -m | tr 'A-Z/\.-' 'a-z____')"}" +CI_BUILD_SYSTEM="${CI_BUILD_SYSTEM:-"$(uname -s | tr 'A-Z/\.-' 'a-z____')"}" + +# Initialize the global constants CI_TARGET_{...} for the target platform. +CI_TARGET_ARCH="${CI_TARGET_ARCH:-"$CI_BUILD_ARCH"}" +CI_TARGET_SYSTEM="${CI_TARGET_SYSTEM:-"$CI_BUILD_SYSTEM"}" + +ci_info() { + printf >&2 "%s: %s\\n" "$CI_SCRIPT_NAME" "$*" +} + +ci_warn() { + printf >&2 "%s: warning: %s\\n" "$CI_SCRIPT_NAME" "$*" +} + +ci_err() { + printf >&2 "%s: error: %s\\n" "$CI_SCRIPT_NAME" "$*" + exit 2 +} + +ci_err_internal() { + printf >&2 "%s: internal error: %s\\n" "$CI_SCRIPT_NAME" "$*" + printf >&2 "ABORTED\\n" + # Exit with the conventional SIGABRT code. + exit 134 +} + +ci_expr() { + if [[ ${*:-0} == [0-9] ]] + then + # This is the same as in the else-branch below, albeit much faster + # for our intended use cases. + return $((!$1)) + else + # The funny-looking compound command "... && return $? || return $?" + # allows the execution to continue uninterrupted under "set -e". + expr >/dev/null "$@" && return $? || return $? + fi +} + +ci_spawn() { + printf >&2 "%s: executing:" "$CI_SCRIPT_NAME" + printf >&2 " %q" "$@" + printf >&2 "\\n" + "$@" +} + +# Ensure that the internal initialization is correct. +[[ $CI_TOPLEVEL_DIR/ci/lib/ci.lib.sh -ef ${BASH_SOURCE[0]} ]] || { + ci_err_internal "bad or missing \$CI_TOPLEVEL_DIR" +} +[[ $CI_SCRIPT_DIR/$CI_SCRIPT_NAME -ef $0 ]] || { + ci_err_internal "bad or missing \$CI_SCRIPT_DIR/\$CI_SCRIPT_NAME" +} +[[ $CI_BUILD_ARCH && $CI_BUILD_SYSTEM ]] || { + ci_err_internal "missing \$CI_BUILD_ARCH or \$CI_BUILD_SYSTEM" +} +[[ $CI_TARGET_ARCH && $CI_TARGET_SYSTEM ]] || { + ci_err_internal "missing \$CI_TARGET_ARCH or \$CI_TARGET_SYSTEM" +} + +# Ensure that the user initialization is correct. +[[ ${CI_FORCE:-0} == [01] ]] || { + ci_err "bad boolean option: \$CI_FORCE: '$CI_FORCE'" +} +[[ ${CI_NO_BUILD:-0} == [01] ]] || { + ci_err "bad boolean option: \$CI_NO_BUILD: '$CI_NO_BUILD'" +} +[[ ${CI_NO_TEST:-0} == [01] ]] || { + ci_err "bad boolean option: \$CI_NO_TEST: '$CI_NO_TEST'" +} +[[ ${CI_NO_INSTALL:-0} == [01] ]] || { + ci_err "bad boolean option: \$CI_NO_INSTALL: '$CI_NO_INSTALL'" +} +[[ ${CI_NO_CLEAN:-0} == [01] ]] || { + ci_err "bad boolean option: \$CI_NO_CLEAN: '$CI_NO_CLEAN'" +} +if ci_expr $((CI_NO_BUILD)) +then + ci_expr $((CI_NO_TEST && CI_NO_INSTALL)) || { + ci_err "\$CI_NO_BUILD requires \$CI_NO_TEST and \$CI_NO_INSTALL" + } +fi diff --git a/vs/libpng/ci/targets/android/ci_env.aarch64-linux-android.sh b/vs/libpng/ci/targets/android/ci_env.aarch64-linux-android.sh new file mode 100644 index 00000000000..fef0ef138fa --- /dev/null +++ b/vs/libpng/ci/targets/android/ci_env.aarch64-linux-android.sh @@ -0,0 +1,16 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=aarch64 +export CI_TARGET_ARCHVER=aarch64 +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=android +export CI_TARGET_ABIVER=android29 + +export CI_CC="$CI_TARGET_ARCHVER-$CI_TARGET_SYSTEM-$CI_TARGET_ABIVER-clang" +export CI_AR="llvm-ar" +export CI_RANLIB="llvm-ranlib" diff --git a/vs/libpng/ci/targets/android/ci_env.armv7a-linux-androideabi.sh b/vs/libpng/ci/targets/android/ci_env.armv7a-linux-androideabi.sh new file mode 100644 index 00000000000..c27bd121ebc --- /dev/null +++ b/vs/libpng/ci/targets/android/ci_env.armv7a-linux-androideabi.sh @@ -0,0 +1,16 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=arm +export CI_TARGET_ARCHVER=armv7a +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=androideabi +export CI_TARGET_ABIVER=androideabi29 + +export CI_CC="$CI_TARGET_ARCHVER-$CI_TARGET_SYSTEM-$CI_TARGET_ABIVER-clang" +export CI_AR="llvm-ar" +export CI_RANLIB="llvm-ranlib" diff --git a/vs/libpng/ci/targets/android/ci_env.i686-linux-android.sh b/vs/libpng/ci/targets/android/ci_env.i686-linux-android.sh new file mode 100644 index 00000000000..88e36908241 --- /dev/null +++ b/vs/libpng/ci/targets/android/ci_env.i686-linux-android.sh @@ -0,0 +1,16 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=i686 +export CI_TARGET_ARCHVER=i686 +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=android +export CI_TARGET_ABIVER=android29 + +export CI_CC="$CI_TARGET_ARCHVER-$CI_TARGET_SYSTEM-$CI_TARGET_ABIVER-clang" +export CI_AR="llvm-ar" +export CI_RANLIB="llvm-ranlib" diff --git a/vs/libpng/ci/targets/android/ci_env.x86_64-linux-android.sh b/vs/libpng/ci/targets/android/ci_env.x86_64-linux-android.sh new file mode 100644 index 00000000000..87460c88853 --- /dev/null +++ b/vs/libpng/ci/targets/android/ci_env.x86_64-linux-android.sh @@ -0,0 +1,16 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=x86_64 +export CI_TARGET_ARCHVER=x86_64 +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=android +export CI_TARGET_ABIVER=android29 + +export CI_CC="$CI_TARGET_ARCHVER-$CI_TARGET_SYSTEM-$CI_TARGET_ABIVER-clang" +export CI_AR="llvm-ar" +export CI_RANLIB="llvm-ranlib" diff --git a/vs/libpng/ci/targets/cygwin/ci_env.i686-pc-cygwin.sh b/vs/libpng/ci/targets/cygwin/ci_env.i686-pc-cygwin.sh new file mode 100644 index 00000000000..66b99997b9a --- /dev/null +++ b/vs/libpng/ci/targets/cygwin/ci_env.i686-pc-cygwin.sh @@ -0,0 +1,18 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=i686 +export CI_TARGET_SYSTEM=cygwin + +export CI_CC="$CI_TARGET_ARCH-pc-$CI_TARGET_SYSTEM-gcc" +export CI_AR="$CI_CC-ar" +export CI_RANLIB="$CI_CC-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=CYGWIN + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/cygwin/ci_env.x86_64-pc-cygwin.sh b/vs/libpng/ci/targets/cygwin/ci_env.x86_64-pc-cygwin.sh new file mode 100644 index 00000000000..78f8c25ff8d --- /dev/null +++ b/vs/libpng/ci/targets/cygwin/ci_env.x86_64-pc-cygwin.sh @@ -0,0 +1,18 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=x86_64 +export CI_TARGET_SYSTEM=cygwin + +export CI_CC="$CI_TARGET_ARCH-pc-$CI_TARGET_SYSTEM-gcc" +export CI_AR="$CI_CC-ar" +export CI_RANLIB="$CI_CC-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=CYGWIN + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/darwin/ci_env.arm64-apple-darwin.sh b/vs/libpng/ci/targets/darwin/ci_env.arm64-apple-darwin.sh new file mode 100644 index 00000000000..c54d8c7605f --- /dev/null +++ b/vs/libpng/ci/targets/darwin/ci_env.arm64-apple-darwin.sh @@ -0,0 +1,15 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=arm64 +export CI_TARGET_SYSTEM=darwin + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Darwin + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH + -DCMAKE_OSX_ARCHITECTURES=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/darwin/ci_env.x86_64-apple-darwin.sh b/vs/libpng/ci/targets/darwin/ci_env.x86_64-apple-darwin.sh new file mode 100644 index 00000000000..ee87711d547 --- /dev/null +++ b/vs/libpng/ci/targets/darwin/ci_env.x86_64-apple-darwin.sh @@ -0,0 +1,15 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=x86_64 +export CI_TARGET_SYSTEM=darwin + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Darwin + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH + -DCMAKE_OSX_ARCHITECTURES=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/freebsd/ci_env.aarch64-unknown-freebsd.sh b/vs/libpng/ci/targets/freebsd/ci_env.aarch64-unknown-freebsd.sh new file mode 100644 index 00000000000..42235de7d0d --- /dev/null +++ b/vs/libpng/ci/targets/freebsd/ci_env.aarch64-unknown-freebsd.sh @@ -0,0 +1,14 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=aarch64 +export CI_TARGET_SYSTEM=freebsd + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=FreeBSD + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/freebsd/ci_env.i686-unknown-freebsd.sh b/vs/libpng/ci/targets/freebsd/ci_env.i686-unknown-freebsd.sh new file mode 100644 index 00000000000..3d188f8da19 --- /dev/null +++ b/vs/libpng/ci/targets/freebsd/ci_env.i686-unknown-freebsd.sh @@ -0,0 +1,14 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=i686 +export CI_TARGET_SYSTEM=freebsd + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=FreeBSD + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/freebsd/ci_env.riscv64-unknown-freebsd.sh b/vs/libpng/ci/targets/freebsd/ci_env.riscv64-unknown-freebsd.sh new file mode 100644 index 00000000000..0a02cde4f60 --- /dev/null +++ b/vs/libpng/ci/targets/freebsd/ci_env.riscv64-unknown-freebsd.sh @@ -0,0 +1,14 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=riscv64 +export CI_TARGET_SYSTEM=freebsd + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=FreeBSD + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/freebsd/ci_env.x86_64-unknown-freebsd.sh b/vs/libpng/ci/targets/freebsd/ci_env.x86_64-unknown-freebsd.sh new file mode 100644 index 00000000000..c77ace53bae --- /dev/null +++ b/vs/libpng/ci/targets/freebsd/ci_env.x86_64-unknown-freebsd.sh @@ -0,0 +1,14 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=x86_64 +export CI_TARGET_SYSTEM=freebsd + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=FreeBSD + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.aarch64-linux-gnu.sh b/vs/libpng/ci/targets/linux/ci_env.aarch64-linux-gnu.sh new file mode 100644 index 00000000000..cb85bc6d8bd --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.aarch64-linux-gnu.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=aarch64 +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnu + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.arm-linux-gnueabi.sh b/vs/libpng/ci/targets/linux/ci_env.arm-linux-gnueabi.sh new file mode 100644 index 00000000000..45504dfcd58 --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.arm-linux-gnueabi.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=arm +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnueabi + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.arm-linux-gnueabihf.sh b/vs/libpng/ci/targets/linux/ci_env.arm-linux-gnueabihf.sh new file mode 100644 index 00000000000..3eb9d1892d2 --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.arm-linux-gnueabihf.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=arm +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnueabihf + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.i686-linux-gnu.sh b/vs/libpng/ci/targets/linux/ci_env.i686-linux-gnu.sh new file mode 100644 index 00000000000..a5efd9f7fec --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.i686-linux-gnu.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=i686 +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnu + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.mips-linux-gnu.sh b/vs/libpng/ci/targets/linux/ci_env.mips-linux-gnu.sh new file mode 100644 index 00000000000..532c93c04c7 --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.mips-linux-gnu.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=mips +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnu + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.mips64-linux-gnuabi64.sh b/vs/libpng/ci/targets/linux/ci_env.mips64-linux-gnuabi64.sh new file mode 100644 index 00000000000..348d2b80065 --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.mips64-linux-gnuabi64.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=mips64 +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnuabi64 + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.mips64el-linux-gnuabi64.sh b/vs/libpng/ci/targets/linux/ci_env.mips64el-linux-gnuabi64.sh new file mode 100644 index 00000000000..e264913d8e2 --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.mips64el-linux-gnuabi64.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=mips64el +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnuabi64 + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.mipsel-linux-gnu.sh b/vs/libpng/ci/targets/linux/ci_env.mipsel-linux-gnu.sh new file mode 100644 index 00000000000..f99050f10e1 --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.mipsel-linux-gnu.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=mipsel +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnu + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.mipsisa32r6-linux-gnu.sh b/vs/libpng/ci/targets/linux/ci_env.mipsisa32r6-linux-gnu.sh new file mode 100644 index 00000000000..0a32867f632 --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.mipsisa32r6-linux-gnu.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=mipsisa32r6 +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnu + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.mipsisa32r6el-linux-gnu.sh b/vs/libpng/ci/targets/linux/ci_env.mipsisa32r6el-linux-gnu.sh new file mode 100644 index 00000000000..ca060093002 --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.mipsisa32r6el-linux-gnu.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=mipsisa32r6el +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnu + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.mipsisa64r6-linux-gnuabi64.sh b/vs/libpng/ci/targets/linux/ci_env.mipsisa64r6-linux-gnuabi64.sh new file mode 100644 index 00000000000..6c1138fe62c --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.mipsisa64r6-linux-gnuabi64.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=mipsisa64r6 +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnuabi64 + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.mipsisa64r6el-linux-gnuabi64.sh b/vs/libpng/ci/targets/linux/ci_env.mipsisa64r6el-linux-gnuabi64.sh new file mode 100644 index 00000000000..f64f2fcf442 --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.mipsisa64r6el-linux-gnuabi64.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=mipsisa64r6el +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnuabi64 + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.powerpc-linux-gnu.sh b/vs/libpng/ci/targets/linux/ci_env.powerpc-linux-gnu.sh new file mode 100644 index 00000000000..e50d9b502a3 --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.powerpc-linux-gnu.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=powerpc +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnu + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.powerpc64-linux-gnu.sh b/vs/libpng/ci/targets/linux/ci_env.powerpc64-linux-gnu.sh new file mode 100644 index 00000000000..15e60adf27e --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.powerpc64-linux-gnu.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=powerpc64 +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnu + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.powerpc64le-linux-gnu.sh b/vs/libpng/ci/targets/linux/ci_env.powerpc64le-linux-gnu.sh new file mode 100644 index 00000000000..be0e2ca69cc --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.powerpc64le-linux-gnu.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=powerpc64le +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnu + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.riscv64-linux-gnu.sh b/vs/libpng/ci/targets/linux/ci_env.riscv64-linux-gnu.sh new file mode 100644 index 00000000000..d8518d97fec --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.riscv64-linux-gnu.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=riscv64 +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnu + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/linux/ci_env.x86_64-linux-gnu.sh b/vs/libpng/ci/targets/linux/ci_env.x86_64-linux-gnu.sh new file mode 100644 index 00000000000..3263fbff8ab --- /dev/null +++ b/vs/libpng/ci/targets/linux/ci_env.x86_64-linux-gnu.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=x86_64 +export CI_TARGET_SYSTEM=linux +export CI_TARGET_ABI=gnu + +export CI_GCC="${CI_GCC-gcc}" + +export CI_CC="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-$CI_GCC" +export CI_AR="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ar" +export CI_RANLIB="$CI_TARGET_ARCH-$CI_TARGET_SYSTEM-$CI_TARGET_ABI-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Linux + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/msdos/ci_env.i386-pc-msdoswatcom.sh b/vs/libpng/ci/targets/msdos/ci_env.i386-pc-msdoswatcom.sh new file mode 100644 index 00000000000..59f3bd58fd1 --- /dev/null +++ b/vs/libpng/ci/targets/msdos/ci_env.i386-pc-msdoswatcom.sh @@ -0,0 +1,18 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=i386 +export CI_TARGET_SYSTEM=msdoswatcom + +export CI_CC="wcl386" + +# Open Watcom V2 CMake build +# https://github.com/open-watcom/open-watcom-v2/discussions/716 +export CI_CMAKE_GENERATOR="Watcom WMake" +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=DOS +" diff --git a/vs/libpng/ci/targets/msdos/ci_env.i586-pc-msdosdjgpp.sh b/vs/libpng/ci/targets/msdos/ci_env.i586-pc-msdosdjgpp.sh new file mode 100644 index 00000000000..63e6d067670 --- /dev/null +++ b/vs/libpng/ci/targets/msdos/ci_env.i586-pc-msdosdjgpp.sh @@ -0,0 +1,18 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=i586 +export CI_TARGET_SYSTEM=msdosdjgpp + +export CI_CC="$CI_TARGET_ARCH-pc-$CI_TARGET_SYSTEM-gcc" +export CI_AR="$CI_CC-ar" +export CI_RANLIB="$CI_CC-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Generic + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/msdos/ci_env.i86-pc-msdoswatcom.sh b/vs/libpng/ci/targets/msdos/ci_env.i86-pc-msdoswatcom.sh new file mode 100644 index 00000000000..3059f183566 --- /dev/null +++ b/vs/libpng/ci/targets/msdos/ci_env.i86-pc-msdoswatcom.sh @@ -0,0 +1,19 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=i86 +export CI_TARGET_SYSTEM=msdoswatcom + +export CI_CC="wcl" + +# Open Watcom V2 CMake build +# https://github.com/open-watcom/open-watcom-v2/discussions/716 +export CI_CMAKE_GENERATOR="Watcom WMake" +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=DOS + -DCMAKE_SYSTEM_PROCESSOR=I86 +" diff --git a/vs/libpng/ci/targets/windows/ci_env.aarch64-windows-llvm.sh b/vs/libpng/ci/targets/windows/ci_env.aarch64-windows-llvm.sh new file mode 100644 index 00000000000..80244172a34 --- /dev/null +++ b/vs/libpng/ci/targets/windows/ci_env.aarch64-windows-llvm.sh @@ -0,0 +1,18 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=aarch64 +export CI_TARGET_SYSTEM=windows + +export CI_CC="clang" +export CI_AR="llvm-ar" +export CI_RANLIB="llvm-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Windows + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/windows/ci_env.i686-w64-mingw32.sh b/vs/libpng/ci/targets/windows/ci_env.i686-w64-mingw32.sh new file mode 100644 index 00000000000..8c83d0f2c64 --- /dev/null +++ b/vs/libpng/ci/targets/windows/ci_env.i686-w64-mingw32.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=i686 +export CI_TARGET_SYSTEM=mingw32 + +# The output of `uname -s` on MSYS2 is understandable, and so is +# CI_TARGET_SYSTEM above, in simplified form. (See also Cygwin.) +# But aside from that, the Mingw-w64 nomenclature is rather messy. +export CI_CC="$CI_TARGET_ARCH-w64-mingw32-gcc" +export CI_AR="$CI_CC-ar" +export CI_RANLIB="$CI_CC-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Windows + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/windows/ci_env.i686-windows-llvm.sh b/vs/libpng/ci/targets/windows/ci_env.i686-windows-llvm.sh new file mode 100644 index 00000000000..3d29f6d558e --- /dev/null +++ b/vs/libpng/ci/targets/windows/ci_env.i686-windows-llvm.sh @@ -0,0 +1,18 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=i686 +export CI_TARGET_SYSTEM=windows + +export CI_CC="clang" +export CI_AR="llvm-ar" +export CI_RANLIB="llvm-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Windows + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/windows/ci_env.x86_64-w64-mingw32.sh b/vs/libpng/ci/targets/windows/ci_env.x86_64-w64-mingw32.sh new file mode 100644 index 00000000000..67d83557bde --- /dev/null +++ b/vs/libpng/ci/targets/windows/ci_env.x86_64-w64-mingw32.sh @@ -0,0 +1,21 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=x86_64 +export CI_TARGET_SYSTEM=mingw64 + +# The output of `uname -s` on MSYS2 is understandable, and so is +# CI_TARGET_SYSTEM above, in simplified form. (See also Cygwin.) +# But aside from that, the Mingw-w64 nomenclature is rather messy. +export CI_CC="$CI_TARGET_ARCH-w64-mingw32-gcc" +export CI_AR="$CI_CC-ar" +export CI_RANLIB="$CI_CC-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Windows + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/ci/targets/windows/ci_env.x86_64-windows-llvm.sh b/vs/libpng/ci/targets/windows/ci_env.x86_64-windows-llvm.sh new file mode 100644 index 00000000000..747f99b2148 --- /dev/null +++ b/vs/libpng/ci/targets/windows/ci_env.x86_64-windows-llvm.sh @@ -0,0 +1,18 @@ +# Copyright (c) 2023-2024 Cosmin Truta. +# +# Use, modification and distribution are subject to the MIT License. +# Please see the accompanying file LICENSE_MIT.txt +# +# SPDX-License-Identifier: MIT + +export CI_TARGET_ARCH=x86_64 +export CI_TARGET_SYSTEM=windows + +export CI_CC="clang" +export CI_AR="llvm-ar" +export CI_RANLIB="llvm-ranlib" + +export CI_CMAKE_VARS=" + -DCMAKE_SYSTEM_NAME=Windows + -DCMAKE_SYSTEM_PROCESSOR=$CI_TARGET_ARCH +" diff --git a/vs/libpng/compile b/vs/libpng/compile index a85b723c7e6..49b3d05fde4 100755 --- a/vs/libpng/compile +++ b/vs/libpng/compile @@ -1,9 +1,9 @@ #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. -scriptversion=2012-10-14.11; # UTC +scriptversion=2024-06-19.01; # UTC -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2024 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ scriptversion=2012-10-14.11; # UTC # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -53,7 +53,7 @@ func_file_conv () MINGW*) file_conv=mingw ;; - CYGWIN*) + CYGWIN* | MSYS*) file_conv=cygwin ;; *) @@ -67,7 +67,7 @@ func_file_conv () mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; - cygwin/*) + cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) @@ -143,7 +143,7 @@ func_cl_wrapper () # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in - *.o | *.[oO][bB][jJ]) + *.o | *.lo | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift @@ -248,14 +248,18 @@ If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . +GNU Automake home page: . +General help using GNU software: . EOF exit $? ;; -v | --v*) - echo "compile $scriptversion" + echo "compile (GNU Automake) $scriptversion" exit $? ;; - cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ + clang-cl | *[/\\]clang-cl | clang-cl.exe | *[/\\]clang-cl.exe | \ + icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac @@ -339,9 +343,9 @@ exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff --git a/vs/libpng/config.guess b/vs/libpng/config.guess index 6c32c8645c8..f6d217a49f8 100755 --- a/vs/libpng/config.guess +++ b/vs/libpng/config.guess @@ -1,12 +1,14 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2024 Free Software Foundation, Inc. -timestamp='2014-11-04' +# shellcheck disable=SC2006,SC2268 # see below for rationale + +timestamp='2024-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -15,7 +17,7 @@ timestamp='2014-11-04' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -27,19 +29,27 @@ timestamp='2014-11-04' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + + me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] -Output the configuration name of the system \`$me' is run on. +Output the configuration name of the system '$me' is run on. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -50,13 +60,13 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" -Try \`$me --help' for more information." +Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do @@ -84,78 +94,109 @@ if test $# != 0; then exit 1 fi -trap 'exit 1' 1 2 15 +# Just in case it came from the environment. +GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. +# Historically, 'CC_FOR_BUILD' used to be named 'HOST_CC'. We still +# use 'HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039,SC3028 + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD=$driver + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then +if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "${UNAME_SYSTEM}" in +case $UNAME_SYSTEM in Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu + LIBC=unknown - eval $set_cc_for_build - cat <<-EOF > $dummy.c + set_cc_for_build + cat <<-EOF > "$dummy.c" + #if defined(__ANDROID__) + LIBC=android + #else #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc - #else + #elif defined(__GLIBC__) LIBC=gnu + #elif defined(__LLVM_LIBC__) + LIBC=llvm + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl + #endif + #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "$cc_set_libc" + + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl + fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu + fi ;; esac # Note: order is significant - the case branches are not exclusive. -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in +case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, @@ -167,22 +208,32 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + echo unknown)` + case $UNAME_MACHINE_ARCH in + aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + earmv*) + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; + *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in + # to ELF recently (or will in the future) and ABI. + case $UNAME_MACHINE_ARCH in + earm*) + os=netbsdelf + ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build + set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then @@ -197,45 +248,80 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in os=netbsd ;; esac + # Determine ABI tags. + case $UNAME_MACHINE_ARCH in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in + case $UNAME_VERSION in Debian*) release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; + GUESS=$machine-${os}${release}${abi-} + ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE + ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE + ;; + *:SecBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE + ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE + ;; + *:MidnightBSD:*:*) + GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE + ;; *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE + ;; *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE + ;; + *:OS108:*:*) + GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE + ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; + GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE + ;; *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE + ;; + *:Sortix:*:*) + GUESS=$UNAME_MACHINE-unknown-sortix + ;; + *:Twizzler:*:*) + GUESS=$UNAME_MACHINE-unknown-twizzler + ;; + *:Redox:*:*) + GUESS=$UNAME_MACHINE-unknown-redox + ;; + mips:OSF1:*.*) + GUESS=mips-dec-osf1 + ;; alpha:OSF1:*:*) + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` @@ -249,163 +335,158 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in + case $ALPHA_CPU_TYPE in "EV4 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; + UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; + UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; + UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; + UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; + UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; + UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; + UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; + UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; + UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; + OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + GUESS=$UNAME_MACHINE-dec-osf$OSF_REL + ;; Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; + GUESS=m68k-unknown-sysv4 + ;; *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; + GUESS=$UNAME_MACHINE-unknown-amigaos + ;; *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; + GUESS=$UNAME_MACHINE-unknown-morphos + ;; *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; + GUESS=i370-ibm-openedition + ;; *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; + GUESS=s390-ibm-zvmoe + ;; *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; + GUESS=powerpc-ibm-os400 + ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; + GUESS=arm-acorn-riscix$UNAME_RELEASE + ;; arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; + GUESS=arm-unknown-riscos + ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; + GUESS=hppa1.1-hitachi-hiuxmpp + ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; + case `(/bin/universe) 2>/dev/null` in + att) GUESS=pyramid-pyramid-sysv3 ;; + *) GUESS=pyramid-pyramid-bsd ;; + esac + ;; NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; + GUESS=pyramid-pyramid-svr4 + ;; DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; + GUESS=sparc-icl-nx6 + ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; + sparc) GUESS=sparc-icl-nx7 ;; + esac + ;; s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL + ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-hal-solaris2$SUN_REL + ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris2$SUN_REL + ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; + GUESS=i386-pc-auroraux$UNAME_RELEASE + ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" + set_cc_for_build + SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then - SUN_ARCH="x86_64" + SUN_ARCH=x86_64 fi fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$SUN_ARCH-pc-solaris2$SUN_REL + ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris3$SUN_REL + ;; sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in + case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; + # Japanese Language versions have a version number like '4.1.3-JL'. + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` + GUESS=sparc-sun-sunos$SUN_REL + ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; + GUESS=m68k-sun-sunos$UNAME_RELEASE + ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 + case `/bin/arch` in sun3) - echo m68k-sun-sunos${UNAME_RELEASE} + GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) - echo sparc-sun-sunos${UNAME_RELEASE} + GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac - exit ;; + ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; + GUESS=sparc-auspex-sunos$UNAME_RELEASE + ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor @@ -415,44 +496,44 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; + GUESS=m68k-milan-mint$UNAME_RELEASE + ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; + GUESS=m68k-hades-mint$UNAME_RELEASE + ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; + GUESS=m68k-unknown-mint$UNAME_RELEASE + ;; m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; + GUESS=m68k-apple-machten$UNAME_RELEASE + ;; powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; + GUESS=powerpc-apple-machten$UNAME_RELEASE + ;; RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; + GUESS=mips-dec-mach_bsd4.3 + ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; + GUESS=mips-dec-ultrix$UNAME_RELEASE + ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; + GUESS=vax-dec-ultrix$UNAME_RELEASE + ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; + GUESS=clipper-intergraph-clix$UNAME_RELEASE + ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { @@ -461,95 +542,96 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; + GUESS=mips-mips-riscos$UNAME_RELEASE + ;; Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; + GUESS=powerpc-motorola-powermax + ;; Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; + GUESS=powerpc-harris-powermax + ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; + GUESS=powerpc-harris-powermax + ;; Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; + GUESS=powerpc-harris-powerunix + ;; m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; + GUESS=m88k-harris-cxux7 + ;; m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; + GUESS=m88k-motorola-sysv4 + ;; m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; + GUESS=m88k-motorola-sysv3 + ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x then - echo m88k-dg-dgux${UNAME_RELEASE} + GUESS=m88k-dg-dgux$UNAME_RELEASE else - echo m88k-dg-dguxbcs${UNAME_RELEASE} + GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else - echo i586-dg-dgux${UNAME_RELEASE} + GUESS=i586-dg-dgux$UNAME_RELEASE fi - exit ;; + ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; + GUESS=m88k-dolphin-sysv3 + ;; M88*:*:R3*:*) # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; + GUESS=m88k-motorola-sysv3 + ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; + GUESS=m88k-tektronix-sysv3 + ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; + GUESS=m68k-tektronix-bsd + ;; *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; + IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` + GUESS=mips-sgi-irix$IRIX_REL + ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id + ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; + GUESS=i386-ibm-aix + ;; ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then + if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; + GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV + ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #include main() @@ -560,77 +642,77 @@ EOF exit(0); } EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then - echo "$SYSTEM_NAME" + GUESS=$SYSTEM_NAME else - echo rs6000-ibm-aix3.2.5 + GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 + GUESS=rs6000-ibm-aix3.2.4 else - echo rs6000-ibm-aix3.2 + GUESS=rs6000-ibm-aix3.2 fi - exit ;; + ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi - if [ -x /usr/bin/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + if test -x /usr/bin/lslpp ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; + GUESS=$IBM_ARCH-ibm-aix$IBM_REV + ;; *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; + GUESS=rs6000-ibm-aix + ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + GUESS=romp-ibm-bsd4.4 + ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 + GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to + ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; + GUESS=rs6000-bull-bosx + ;; DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; + GUESS=m68k-bull-sysv3 + ;; 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; + GUESS=m68k-hp-bsd + ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; + GUESS=m68k-hp-bsd4.4 + ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + case $UNAME_MACHINE in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then + if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + case $sc_cpu_version in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + case $sc_kernel_bits in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + if test "$HP_ARCH" = ""; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include @@ -663,13 +745,13 @@ EOF exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = "hppa2.0w" ] + if test "$HP_ARCH" = hppa2.0w then - eval $set_cc_for_build + set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -680,23 +762,23 @@ EOF # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then - HP_ARCH="hppa2.0w" + HP_ARCH=hppa2.0w else - HP_ARCH="hppa64" + HP_ARCH=hppa64 fi fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; + GUESS=$HP_ARCH-hp-hpux$HPUX_REV + ;; ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + GUESS=ia64-hp-hpux$HPUX_REV + ;; 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #include int main () @@ -721,38 +803,38 @@ EOF exit (0); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; + GUESS=unknown-hitachi-hiuxwe2 + ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + GUESS=hppa1.1-hp-bsd + ;; 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; + GUESS=hppa1.0-hp-bsd + ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; + GUESS=hppa1.0-hp-mpeix + ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + GUESS=hppa1.1-hp-osf + ;; hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; + GUESS=hppa1.0-hp-osf + ;; i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk + if test -x /usr/sbin/sysversion ; then + GUESS=$UNAME_MACHINE-unknown-osf1mk else - echo ${UNAME_MACHINE}-unknown-osf1 + GUESS=$UNAME_MACHINE-unknown-osf1 fi - exit ;; + ;; parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; + GUESS=hppa1.1-hp-lites + ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; + GUESS=c1-convex-bsd + ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd @@ -760,139 +842,174 @@ EOF fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; + GUESS=c34-convex-bsd + ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; + GUESS=c38-convex-bsd + ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; + GUESS=c4-convex-bsd + ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=ymp-cray-unicos$CRAY_REL + ;; CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=t90-cray-unicos$CRAY_REL + ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=alphaev5-cray-unicosmk$CRAY_REL + ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=sv1-cray-unicos$CRAY_REL + ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=craynv-cray-unicosmp$CRAY_REL + ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` + GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} + ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} + ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE + ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; + GUESS=sparc-unknown-bsdi$UNAME_RELEASE + ;; *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE + ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=`uname -p` + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi + else + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf + fi + ;; *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in + UNAME_PROCESSOR=`uname -p` + case $UNAME_PROCESSOR in amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; esac - exit ;; + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL + ;; i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; + GUESS=$UNAME_MACHINE-pc-cygwin + ;; *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 - exit ;; + GUESS=$UNAME_MACHINE-pc-mingw64 + ;; *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; + GUESS=$UNAME_MACHINE-pc-mingw32 + ;; *:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; + GUESS=$UNAME_MACHINE-pc-msys + ;; i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; + GUESS=$UNAME_MACHINE-pc-pw32 + ;; + *:SerenityOS:*:*) + GUESS=$UNAME_MACHINE-pc-serenity + ;; *:Interix*:*) - case ${UNAME_MACHINE} in + case $UNAME_MACHINE in x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; + GUESS=i586-pc-interix$UNAME_RELEASE + ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; + GUESS=x86_64-unknown-interix$UNAME_RELEASE + ;; IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; + GUESS=ia64-unknown-interix$UNAME_RELEASE + ;; esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; + GUESS=$UNAME_MACHINE-pc-uwin + ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; + GUESS=x86_64-pc-cygwin + ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=powerpcle-unknown-solaris2$SUN_REL + ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; + GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` + GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` + GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL + ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; + GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` + GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC + ;; + x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*) + GUESS="$UNAME_MACHINE-pc-managarm-mlibc" + ;; + *:[Mm]anagarm:*:*) + GUESS="$UNAME_MACHINE-unknown-managarm-mlibc" + ;; + *:Minix:*:*) + GUESS=$UNAME_MACHINE-unknown-minix + ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + set_cc_for_build + CPU=$UNAME_MACHINE + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + ABI=64 + sed 's/^ //' << EOF > "$dummy.c" + #ifdef __ARM_EABI__ + #ifdef __ARM_PCS_VFP + ABI=eabihf + #else + ABI=eabi + #endif + #endif +EOF + cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` + eval "$cc_set_abi" + case $ABI in + eabi | eabihf) CPU=armv8l; LIBCABI=$LIBC$ABI ;; + esac + fi + GUESS=$CPU-unknown-linux-$LIBCABI + ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; @@ -902,172 +1019,246 @@ EOF EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; arm*:Linux:*:*) - eval $set_cc_for_build + set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi - exit ;; + ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-axis-linux-$LIBC + ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-axis-linux-$LIBC + ;; + e2k:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-pc-linux-$LIBC + ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + k1om:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + kvx:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + kvx:cos:*:*) + GUESS=$UNAME_MACHINE-unknown-cos + ;; + kvx:mbr:*:*) + GUESS=$UNAME_MACHINE-unknown-mbr + ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 + sed 's/^ //' << EOF > "$dummy.c" #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el + MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} + MIPS_ENDIAN= #else - CPU= + MIPS_ENDIAN= #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` + eval "$cc_set_vars" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } + ;; + mips64el:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) - echo or1k-unknown-linux-${LIBC} - exit ;; + GUESS=or1k-unknown-linux-$LIBC + ;; or32:Linux:*:* | or1k*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} - exit ;; + GUESS=sparc-unknown-linux-$LIBC + ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} - exit ;; + GUESS=hppa64-unknown-linux-$LIBC + ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; + PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; + PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; + *) GUESS=hppa-unknown-linux-$LIBC ;; esac - exit ;; + ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} - exit ;; + GUESS=powerpc64-unknown-linux-$LIBC + ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} - exit ;; + GUESS=powerpc-unknown-linux-$LIBC + ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} - exit ;; + GUESS=powerpc64le-unknown-linux-$LIBC + ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} - exit ;; + GUESS=powerpcle-unknown-linux-$LIBC + ;; + riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-ibm-linux-$LIBC + ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-dec-linux-$LIBC + ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + set_cc_for_build + CPU=$UNAME_MACHINE + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + ABI=64 + sed 's/^ //' << EOF > "$dummy.c" + #ifdef __i386__ + ABI=x86 + #else + #ifdef __ILP32__ + ABI=x32 + #endif + #endif +EOF + cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` + eval "$cc_set_abi" + case $ABI in + x86) CPU=i686 ;; + x32) LIBCABI=${LIBC}x32 ;; + esac + fi + GUESS=$CPU-pc-linux-$LIBCABI + ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; + GUESS=i386-sequent-sysv4 + ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; + GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION + ;; i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility + # If we were able to find 'uname', then EMX Unix compatibility # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; + GUESS=$UNAME_MACHINE-pc-os2-emx + ;; i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; + GUESS=$UNAME_MACHINE-unknown-stop + ;; i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; + GUESS=$UNAME_MACHINE-unknown-atheos + ;; i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; + GUESS=$UNAME_MACHINE-pc-syllable + ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; + GUESS=i386-unknown-lynxos$UNAME_RELEASE + ;; i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + GUESS=$UNAME_MACHINE-pc-msdosdjgpp + ;; + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi - exit ;; + ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in @@ -1075,12 +1266,12 @@ EOF *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; + GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 @@ -1090,43 +1281,43 @@ EOF && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else - echo ${UNAME_MACHINE}-pc-sysv32 + GUESS=$UNAME_MACHINE-pc-sysv32 fi - exit ;; + ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that + # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; + GUESS=i586-pc-msdosdjgpp + ;; Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; + GUESS=i386-pc-mach3 + ;; paragon:*:*:*) - echo i860-intel-osf1 - exit ;; + GUESS=i860-intel-osf1 + ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi - exit ;; + ;; mini*:CTIX:SYS*5:*) # "miniframe" - echo m68010-convergent-sysv - exit ;; + GUESS=m68010-convergent-sysv + ;; mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; + GUESS=m68k-convergent-sysv + ;; M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; + GUESS=m68k-diab-dnix + ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) @@ -1134,9 +1325,9 @@ EOF test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; @@ -1145,248 +1336,447 @@ EOF test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; + GUESS=m68k-unknown-lynxos$UNAME_RELEASE + ;; mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; + GUESS=m68k-atari-sysv4 + ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; + GUESS=sparc-unknown-lynxos$UNAME_RELEASE + ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; + GUESS=rs6000-unknown-lynxos$UNAME_RELEASE + ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; + GUESS=powerpc-unknown-lynxos$UNAME_RELEASE + ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; + GUESS=mips-dde-sysv$UNAME_RELEASE + ;; RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; + GUESS=mips-sni-sysv4 + ;; RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; + GUESS=mips-sni-sysv4 + ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 + GUESS=$UNAME_MACHINE-sni-sysv4 else - echo ns32k-sni-sysv + GUESS=ns32k-sni-sysv fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + ;; + PENTIUM:*:4.0*:*) # Unisys 'ClearPath HMP IX 4000' SVR4/MP effort # says - echo i586-unisys-sysv4 - exit ;; + GUESS=i586-unisys-sysv4 + ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; + GUESS=hppa1.1-stratus-sysv4 + ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; + GUESS=i860-stratus-sysv4 + ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; + GUESS=$UNAME_MACHINE-stratus-vos + ;; *:VOS:*:*) # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; + GUESS=hppa1.1-stratus-vos + ;; mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; + GUESS=m68k-apple-aux$UNAME_RELEASE + ;; news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; + GUESS=mips-sony-newsos6 + ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + if test -d /usr/nec; then + GUESS=mips-nec-sysv$UNAME_RELEASE else - echo mips-unknown-sysv${UNAME_RELEASE} + GUESS=mips-unknown-sysv$UNAME_RELEASE fi - exit ;; + ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; + GUESS=powerpc-be-beos + ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; + GUESS=powerpc-apple-beos + ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; + GUESS=i586-pc-beos + ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - x86_64:Haiku:*:*) - echo x86_64-unknown-haiku - exit ;; + GUESS=i586-pc-haiku + ;; + ppc:Haiku:*:*) # Haiku running on Apple PowerPC + GUESS=powerpc-apple-haiku + ;; + *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) + GUESS=$UNAME_MACHINE-unknown-haiku + ;; SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; + GUESS=sx4-nec-superux$UNAME_RELEASE + ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; + GUESS=sx5-nec-superux$UNAME_RELEASE + ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; + GUESS=sx6-nec-superux$UNAME_RELEASE + ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; + GUESS=sx7-nec-superux$UNAME_RELEASE + ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; + GUESS=sx8-nec-superux$UNAME_RELEASE + ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; + GUESS=sx8r-nec-superux$UNAME_RELEASE + ;; + SX-ACE:SUPER-UX:*:*) + GUESS=sxace-nec-superux$UNAME_RELEASE + ;; Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; + GUESS=powerpc-apple-rhapsody$UNAME_RELEASE + ;; *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE + ;; + arm64:Darwin:*:*) + GUESS=aarch64-apple-darwin$UNAME_RELEASE + ;; *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc + UNAME_PROCESSOR=`uname -p` + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build fi - if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE + ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then + if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE + ;; *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - exit ;; + GUESS=i386-pc-qnx + ;; + NEO-*:NONSTOP_KERNEL:*:*) + GUESS=neo-tandem-nsk$UNAME_RELEASE + ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; + GUESS=nse-tandem-nsk$UNAME_RELEASE + ;; + NSR-*:NONSTOP_KERNEL:*:*) + GUESS=nsr-tandem-nsk$UNAME_RELEASE + ;; + NSV-*:NONSTOP_KERNEL:*:*) + GUESS=nsv-tandem-nsk$UNAME_RELEASE + ;; + NSX-*:NONSTOP_KERNEL:*:*) + GUESS=nsx-tandem-nsk$UNAME_RELEASE + ;; *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; + GUESS=mips-compaq-nonstopux + ;; BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; + GUESS=bs2000-siemens-sysv + ;; DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE + ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = "386"; then + if test "${cputype-}" = 386; then UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" + elif test "x${cputype-}" != x; then + UNAME_MACHINE=$cputype fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; + GUESS=$UNAME_MACHINE-unknown-plan9 + ;; *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; + GUESS=pdp10-unknown-tops10 + ;; *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; + GUESS=pdp10-unknown-tenex + ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; + GUESS=pdp10-dec-tops20 + ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; + GUESS=pdp10-xkl-tops20 + ;; *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; + GUESS=pdp10-unknown-tops20 + ;; *:ITS:*:*) - echo pdp10-unknown-its - exit ;; + GUESS=pdp10-unknown-its + ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; + GUESS=mips-sei-seiux$UNAME_RELEASE + ;; *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; + DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL + ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; + case $UNAME_MACHINE in + A*) GUESS=alpha-dec-vms ;; + I*) GUESS=ia64-dec-vms ;; + V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; + GUESS=i386-pc-xenix + ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; + SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` + GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL + ;; i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; + GUESS=$UNAME_MACHINE-pc-rdos + ;; + i*86:Fiwix:*:*) + GUESS=$UNAME_MACHINE-pc-fiwix + ;; + *:AROS:*:*) + GUESS=$UNAME_MACHINE-unknown-aros + ;; x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx - exit ;; + GUESS=$UNAME_MACHINE-unknown-esx + ;; + amd64:Isilon\ OneFS:*:*) + GUESS=x86_64-unknown-onefs + ;; + *:Unleashed:*:*) + GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE + ;; + *:Ironclad:*:*) + GUESS=$UNAME_MACHINE-unknown-ironclad + ;; +esac + +# Do we have a guess based on uname results? +if test "x$GUESS" != x; then + echo "$GUESS" + exit +fi + +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + +echo "$0: unable to guess system type" >&2 + +case $UNAME_MACHINE:$UNAME_SYSTEM in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 < in order to provide the needed -information to handle your system. +our_year=`echo $timestamp | sed 's,-.*,,'` +thisyear=`date +%Y` +# shellcheck disable=SC2003 +script_age=`expr "$thisyear" - "$our_year"` +if test "$script_age" -lt 3 ; then + cat >&2 </dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" EOF +fi exit 1 # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/vs/libpng/config.h.in b/vs/libpng/config.h.in index a0ec9bc1428..3ec0c8ae874 100644 --- a/vs/libpng/config.h.in +++ b/vs/libpng/config.h.in @@ -3,30 +3,27 @@ /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H -/* Define to 1 if you have the `feenableexcept' function. */ +/* Define to 1 if you have the 'feenableexcept' function. */ #undef HAVE_FEENABLEEXCEPT /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H -/* Define to 1 if you have the `m' library (-lm). */ +/* Define to 1 if you have the 'm' library (-lm). */ #undef HAVE_LIBM -/* Define to 1 if you have the `z' library (-lz). */ +/* Define to 1 if you have the 'z' library (-lz). */ #undef HAVE_LIBZ -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `memset' function. */ -#undef HAVE_MEMSET - -/* Define to 1 if you have the `pow' function. */ +/* Define to 1 if you have the 'pow' function. */ #undef HAVE_POW /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H +/* Define to 1 if you have the header file. */ +#undef HAVE_STDIO_H + /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H @@ -81,6 +78,18 @@ /* Enable Intel SSE optimizations */ #undef PNG_INTEL_SSE_OPT +/* Enable LOONGARCH LSX optimizations */ +#undef PNG_LOONGARCH_LSX_OPT + +/* Turn on MIPS MMI optimizations at run-time */ +#undef PNG_MIPS_MMI_API_SUPPORTED + +/* Check for MIPS MMI support at run-time */ +#undef PNG_MIPS_MMI_CHECK_SUPPORTED + +/* Enable MIPS MMI optimizations */ +#undef PNG_MIPS_MMI_OPT + /* Turn on MIPS MSA optimizations at run-time */ #undef PNG_MIPS_MSA_API_SUPPORTED @@ -99,31 +108,28 @@ /* Enable POWERPC VSX optimizations */ #undef PNG_POWERPC_VSX_OPT -/* Define to 1 if you have the ANSI C header files. */ +/* Define to 1 if all of the C89 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ #undef STDC_HEADERS -/* Define to 1 if your declares `struct tm'. */ +/* Define to 1 if your declares 'struct tm'. */ #undef TM_IN_SYS_TIME /* Version number of package */ #undef VERSION -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is - supported directly. */ + supported only directly. */ #undef restrict -/* Work around a bug in Sun C++: it does not support _Restrict or - __restrict__, even though the corresponding Sun C compiler ends up with - "#define restrict _Restrict" or "#define restrict __restrict__" in the - previous line. Perhaps some future version of Sun C++ will work with - restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ -#if defined __SUNPRO_CC && !defined __RESTRICT +/* Work around a bug in older versions of Sun C++, which did not + #define __restrict__ or support _Restrict or __restrict__ + even though the corresponding Sun C compiler ended up with + "#define restrict _Restrict" or "#define restrict __restrict__" + in the previous line. This workaround can be removed once + we assume Oracle Developer Studio 12.5 (2016) or later. */ +#if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ # define _Restrict # define __restrict__ #endif - -/* Define to `unsigned int' if does not define. */ -#undef size_t diff --git a/vs/libpng/config.sub b/vs/libpng/config.sub index 7ffe3737842..2c6a07ab3c3 100755 --- a/vs/libpng/config.sub +++ b/vs/libpng/config.sub @@ -1,12 +1,14 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2024 Free Software Foundation, Inc. -timestamp='2014-12-03' +# shellcheck disable=SC2006,SC2268 # see below for rationale + +timestamp='2024-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -15,7 +17,7 @@ timestamp='2014-12-03' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -33,7 +35,7 @@ timestamp='2014-12-03' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD +# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -50,15 +52,21 @@ timestamp='2014-12-03' # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + me=`echo "$0" | sed -e 's,.*/,,'` usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -68,13 +76,13 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" -Try \`$me --help' for more information." +Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do @@ -90,12 +98,12 @@ while test $# -gt 0 ; do - ) # Use stdin as input. break ;; -* ) - echo "$me: invalid option $1$help" + echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. - echo $1 + echo "$1" exit ;; * ) @@ -111,1228 +119,1167 @@ case $# in exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac +# Split fields of configuration type +# shellcheck disable=SC2162 +saved_IFS=$IFS +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + *-*-*-*) + basic_machine=$field1-$field2 + basic_os=$field3-$field4 ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \ + | windows-* ) + basic_machine=$field1 + basic_os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + basic_os=linux-android + ;; + *) + basic_machine=$field1-$field2 + basic_os=$field3 + ;; + esac ;; - -psos*) - os=-psos + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + basic_os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + basic_os=$field2 + ;; + zephyr*) + basic_machine=$field1-unknown + basic_os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + basic_os= + ;; + *) + basic_machine=$field1 + basic_os=$field2 + ;; + esac + ;; + esac ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + basic_os=bsd + ;; + a29khif) + basic_machine=a29k-amd + basic_os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + basic_os=scout + ;; + alliant) + basic_machine=fx80-alliant + basic_os= + ;; + altos | altos3068) + basic_machine=m68k-altos + basic_os= + ;; + am29k) + basic_machine=a29k-none + basic_os=bsd + ;; + amdahl) + basic_machine=580-amdahl + basic_os=sysv + ;; + amiga) + basic_machine=m68k-unknown + basic_os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + basic_os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + basic_os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + basic_os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + basic_os=bsd + ;; + aros) + basic_machine=i386-pc + basic_os=aros + ;; + aux) + basic_machine=m68k-apple + basic_os=aux + ;; + balance) + basic_machine=ns32k-sequent + basic_os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + basic_os=linux + ;; + cegcc) + basic_machine=arm-unknown + basic_os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + basic_os=bsd + ;; + convex-c2) + basic_machine=c2-convex + basic_os=bsd + ;; + convex-c32) + basic_machine=c32-convex + basic_os=bsd + ;; + convex-c34) + basic_machine=c34-convex + basic_os=bsd + ;; + convex-c38) + basic_machine=c38-convex + basic_os=bsd + ;; + cray) + basic_machine=j90-cray + basic_os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + basic_os= + ;; + da30) + basic_machine=m68k-da30 + basic_os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + basic_os= + ;; + delta88) + basic_machine=m88k-motorola + basic_os=sysv3 + ;; + dicos) + basic_machine=i686-pc + basic_os=dicos + ;; + djgpp) + basic_machine=i586-pc + basic_os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + basic_os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + basic_os=ose + ;; + gmicro) + basic_machine=tron-gmicro + basic_os=sysv + ;; + go32) + basic_machine=i386-pc + basic_os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + basic_os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + basic_os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + basic_os=hms + ;; + harris) + basic_machine=m88k-harris + basic_os=sysv3 + ;; + hp300 | hp300hpux) + basic_machine=m68k-hp + basic_os=hpux + ;; + hp300bsd) + basic_machine=m68k-hp + basic_os=bsd + ;; + hppaosf) + basic_machine=hppa1.1-hp + basic_os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + basic_os=proelf + ;; + i386mach) + basic_machine=i386-mach + basic_os=mach + ;; + isi68 | isi) + basic_machine=m68k-isi + basic_os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + basic_os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + basic_os=sysv + ;; + merlin) + basic_machine=ns32k-utek + basic_os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + basic_os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + basic_os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + basic_os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + basic_os=coff + ;; + morphos) + basic_machine=powerpc-unknown + basic_os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + basic_os=moxiebox + ;; + msdos) + basic_machine=i386-pc + basic_os=msdos + ;; + msys) + basic_machine=i686-pc + basic_os=msys + ;; + mvs) + basic_machine=i370-ibm + basic_os=mvs + ;; + nacl) + basic_machine=le32-unknown + basic_os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + basic_os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + basic_os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + basic_os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + basic_os=newsos + ;; + news1000) + basic_machine=m68030-sony + basic_os=newsos + ;; + necv70) + basic_machine=v70-nec + basic_os=sysv + ;; + nh3000) + basic_machine=m68k-harris + basic_os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + basic_os=cxux + ;; + nindy960) + basic_machine=i960-intel + basic_os=nindy + ;; + mon960) + basic_machine=i960-intel + basic_os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + basic_os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + basic_os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + basic_os=ose + ;; + os68k) + basic_machine=m68k-none + basic_os=os68k + ;; + paragon) + basic_machine=i860-intel + basic_os=osf + ;; + parisc) + basic_machine=hppa-unknown + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp + ;; + pw32) + basic_machine=i586-unknown + basic_os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + basic_os=rdos + ;; + rdos32) + basic_machine=i386-pc + basic_os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + basic_os=coff + ;; + sa29200) + basic_machine=a29k-amd + basic_os=udi + ;; + sei) + basic_machine=mips-sei + basic_os=seiux + ;; + sequent) + basic_machine=i386-sequent + basic_os= + ;; + sps7) + basic_machine=m68k-bull + basic_os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + basic_os= + ;; + stratus) + basic_machine=i860-stratus + basic_os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + basic_os= + ;; + sun2os3) + basic_machine=m68000-sun + basic_os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + basic_os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + basic_os= + ;; + sun3os3) + basic_machine=m68k-sun + basic_os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + basic_os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + basic_os= + ;; + sun4os3) + basic_machine=sparc-sun + basic_os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + basic_os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + basic_os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + basic_os= + ;; + sv1) + basic_machine=sv1-cray + basic_os=unicos + ;; + symmetry) + basic_machine=i386-sequent + basic_os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + basic_os=unicos + ;; + t90) + basic_machine=t90-cray + basic_os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + basic_os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + basic_os=tpf + ;; + udi29k) + basic_machine=a29k-amd + basic_os=udi + ;; + ultra3) + basic_machine=a29k-nyu + basic_os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + basic_os=none + ;; + vaxv) + basic_machine=vax-dec + basic_os=sysv + ;; + vms) + basic_machine=vax-dec + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta + ;; + vxworks960) + basic_machine=i960-wrs + basic_os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + basic_os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + basic_os=vxworks + ;; + xbox) + basic_machine=i686-pc + basic_os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + basic_os=unicos + ;; + *) + basic_machine=$1 + basic_os= + ;; + esac ;; esac -# Decode aliases for certain CPU-COMPANY combinations. +# Decode 1-component or ad-hoc basic machines case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - leon|leon[3-9]) - basic_machine=sparc-$basic_machine - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + op50n) + cpu=hppa1.1 + vendor=oki ;; - ms1) - basic_machine=mt-unknown + op60c) + cpu=hppa1.1 + vendor=oki ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown + ibm*) + cpu=i370 + vendor=ibm ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none + orion105) + cpu=clipper + vendor=highlevel ;; - xscaleeb) - basic_machine=armeb-unknown + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple ;; - - xscaleel) - basic_machine=armel-unknown + pmac | pmac-mpw) + cpu=powerpc + vendor=apple ;; - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pyramid-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att + cpu=m68000 + vendor=att ;; 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux + cpu=we32k + vendor=att ;; bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec + cpu=powerpc + vendor=ibm + basic_os=cnk ;; decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 + cpu=pdp10 + vendor=dec + basic_os=tops10 ;; decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 + cpu=pdp10 + vendor=dec + basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 + cpu=m68k + vendor=motorola ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd + dpx2*) + cpu=m68k + vendor=bull + basic_os=sysv3 ;; encore | umax | mmax) - basic_machine=ns32k-encore + cpu=ns32k + vendor=encore ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose + elxsi) + cpu=elxsi + vendor=elxsi + basic_os=${basic_os:-bsd} ;; fx2800) - basic_machine=i860-alliant + cpu=i860 + vendor=alliant ;; genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 + cpu=ns32k + vendor=ns ;; h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp + cpu=m68000 + vendor=hp ;; hp9k3[2-9][0-9]) - basic_machine=m68k-hp + cpu=m68k + vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm + cpu=hppa1.0 + vendor=hp ;; i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv32 ;; i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv4 ;; i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv ;; i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=solaris2 ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta + j90 | j90-cray) + cpu=j90 + vendor=cray + basic_os=${basic_os:-unicos} ;; iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) + cpu=mips + vendor=sgi + case $basic_os in + irix*) ;; *) - os=-irix4 + basic_os=irix4 ;; esac ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys + cpu=m68000 + vendor=convergent ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + basic_os=mint ;; news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) + cpu=mips + vendor=sony + basic_os=newsos + ;; + next | m*-next) + cpu=m68k + vendor=next + case $basic_os in + openstep*) + ;; + nextstep*) ;; - -ns2*) - os=-nextstep2 + ns2*) + basic_os=nextstep2 ;; *) - os=-nextstep3 + basic_os=nextstep3 ;; esac ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem + cpu=np1 + vendor=gould ;; op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k + cpu=hppa1.1 + vendor=oki + basic_os=proelf ;; pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; pbd) - basic_machine=sparc-tti + cpu=sparc + vendor=tti ;; pbb) - basic_machine=m68k-tti + cpu=m68k + vendor=tti ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + pc532) + cpu=ns32k + vendor=pc532 ;; pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + cpu=pn + vendor=gould ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + power) + cpu=power + vendor=ibm ;; ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff + cpu=i386 + vendor=ibm ;; rm[46]00) - basic_machine=mips-siemens + cpu=mips + vendor=siemens ;; rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm + cpu=romp + vendor=ibm ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown + sde) + cpu=mipsisa32 + vendor=sde + basic_os=${basic_os:-elf} ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown + simso-wrs) + cpu=sparclite + vendor=wrs + basic_os=vxworks ;; - sde) - basic_machine=mipsisa32-sde - os=-elf + tower | tower-32) + cpu=m68k + vendor=ncr ;; - sei) - basic_machine=mips-sei - os=-seiux + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu ;; - sequent) - basic_machine=i386-sequent + w65) + cpu=w65 + vendor=wdc ;; - sh) - basic_machine=sh-hitachi - os=-hms + w89k-*) + cpu=hppa1.1 + vendor=winbond + basic_os=proelf ;; - sh5el) - basic_machine=sh5le-unknown + none) + cpu=none + vendor=none ;; - sh64) - basic_machine=sh64-unknown + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 + + *-*) + # shellcheck disable=SC2162 + saved_IFS=$IFS + IFS="-" read cpu vendor <&2 - exit 1 + # Recognize the canonical CPU types that are allowed with any + # company name. + case $cpu in + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be | aarch64c | arm64ec \ + | abacus \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ + | alphapca5[67] | alpha64pca5[67] \ + | am33_2.0 \ + | amdgcn \ + | arc | arceb | arc32 | arc64 \ + | arm | arm[lb]e | arme[lb] | armv* \ + | avr | avr32 \ + | asmjs \ + | ba \ + | be32 | be64 \ + | bfin | bpf | bs2000 \ + | c[123]* | c30 | [cjt]90 | c4x \ + | c8051 | clipper | craynv | csky | cydra \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | elxsi | epiphany \ + | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | javascript \ + | h8300 | h8500 \ + | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i*86 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | kvx \ + | le32 | le64 \ + | lm32 \ + | loongarch32 | loongarch64 \ + | m32c | m32r | m32rle \ + | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ + | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ + | m88110 | m88k | maxq | mb | mcore | mep | metag \ + | microblaze | microblazeel \ + | mips* \ + | mmix \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nanomips* \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | none | np1 | ns16k | ns32k | nvptx \ + | open8 \ + | or1k* \ + | or32 \ + | orion \ + | picochip \ + | pdp10 | pdp11 | pj | pjl | pn | power \ + | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ + | rl78 | romp | rs6000 | rx \ + | s390 | s390x \ + | score \ + | sh | shl \ + | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ + | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ + | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ + | spu \ + | tahoe \ + | thumbv7* \ + | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ + | tron \ + | ubicom32 \ + | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ + | vax \ + | vc4 \ + | visium \ + | w65 \ + | wasm32 | wasm64 \ + | we32k \ + | x86 | x86_64 | xc16x | xgate | xps100 \ + | xstormy16 | xtensa* \ + | ymp \ + | z8k | z80) + ;; + + *) + echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2 + exit 1 + ;; + esac ;; esac # Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` +case $vendor in + digital*) + vendor=dec ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + commodore*) + vendor=cbm ;; *) ;; @@ -1340,200 +1287,226 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if [ x"$os" != x"" ] +if test x"$basic_os" != x then + +# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just +# set os. +obj= +case $basic_os in + gnu/linux*) + kernel=linux + os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` + ;; + os2-emx) + kernel=os2 + os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` + ;; + nto-qnx*) + kernel=nto + os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` + ;; + *-*) + # shellcheck disable=SC2162 + saved_IFS=$IFS + IFS="-" read kernel os <&2 - exit 1 + # No normalization, but not necessarily accepted, that comes below. ;; esac + else # Here we handle the default operating systems that come with various machines. @@ -1546,261 +1519,452 @@ else # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. -case $basic_machine in +kernel= +obj= +case $cpu-$vendor in score-*) - os=-elf + os= + obj=elf ;; spu-*) - os=-elf + os= + obj=elf ;; *-acorn) - os=-riscix1.2 + os=riscix1.2 ;; arm*-rebel) - os=-linux + kernel=linux + os=gnu ;; arm*-semi) - os=-aout + os= + obj=aout ;; c4x-* | tic4x-*) - os=-coff + os= + obj=coff ;; c8051-*) - os=-elf + os= + obj=elf + ;; + clipper-intergraph) + os=clix ;; hexagon-*) - os=-elf + os= + obj=elf ;; tic54x-*) - os=-coff + os= + obj=coff ;; tic55x-*) - os=-coff + os= + obj=coff ;; tic6x-*) - os=-coff + os= + obj=coff ;; # This must come before the *-dec entry. pdp10-*) - os=-tops20 + os=tops20 ;; pdp11-*) - os=-none + os=none ;; *-dec | vax-*) - os=-ultrix4.2 + os=ultrix4.2 ;; m68*-apollo) - os=-domain + os=domain ;; i386-sun) - os=-sunos4.0.2 + os=sunos4.0.2 ;; m68000-sun) - os=-sunos3 + os=sunos3 ;; m68*-cisco) - os=-aout + os= + obj=aout ;; mep-*) - os=-elf + os= + obj=elf ;; mips*-cisco) - os=-elf + os= + obj=elf ;; - mips*-*) - os=-elf + mips*-*|nanomips*-*) + os= + obj=elf ;; or32-*) - os=-coff + os= + obj=coff ;; *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 + os=sysv3 ;; sparc-* | *-sun) - os=-sunos4.1.1 + os=sunos4.1.1 ;; - *-be) - os=-beos + pru-*) + os= + obj=elf ;; - *-haiku) - os=-haiku + *-be) + os=beos ;; *-ibm) - os=-aix + os=aix ;; *-knuth) - os=-mmixware + os=mmixware ;; *-wec) - os=-proelf + os=proelf ;; *-winbond) - os=-proelf + os=proelf ;; *-oki) - os=-proelf + os=proelf ;; *-hp) - os=-hpux + os=hpux ;; *-hitachi) - os=-hiux + os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv + os=sysv ;; *-cbm) - os=-amigaos + os=amigaos ;; *-dg) - os=-dgux + os=dgux ;; *-dolphin) - os=-sysv3 + os=sysv3 ;; m68k-ccur) - os=-rtu + os=rtu ;; m88k-omron*) - os=-luna + os=luna ;; - *-next ) - os=-nextstep + *-next) + os=nextstep ;; *-sequent) - os=-ptx + os=ptx ;; *-crds) - os=-unos + os=unos ;; *-ns) - os=-genix + os=genix ;; i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 + os=mvs ;; *-gould) - os=-sysv + os=sysv ;; *-highlevel) - os=-bsd + os=bsd ;; *-encore) - os=-bsd + os=bsd ;; *-sgi) - os=-irix + os=irix ;; *-siemens) - os=-sysv4 + os=sysv4 ;; *-masscomp) - os=-rtu + os=rtu ;; f30[01]-fujitsu | f700-fujitsu) - os=-uxpv + os=uxpv ;; *-rom68k) - os=-coff + os= + obj=coff ;; *-*bug) - os=-coff + os= + obj=coff ;; *-apple) - os=-macos + os=macos ;; *-atari*) - os=-mint + os=mint + ;; + *-wrs) + os=vxworks ;; *) - os=-none + os=none ;; esac + fi +# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ). + +case $os in + # Sometimes we do "kernel-libc", so those need to count as OSes. + llvm* | musl* | newlib* | relibc* | uclibc*) + ;; + # Likewise for "kernel-abi" + eabi* | gnueabi*) + ;; + # VxWorks passes extra cpu info in the 4th filed. + simlinux | simwindows | spe) + ;; + # See `case $cpu-$os` validation below + ghcjs) + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ + | hiux* | abug | nacl* | netware* | windows* \ + | os9* | macos* | osx* | ios* | tvos* | watchos* \ + | mpw* | magic* | mmixware* | mon960* | lnews* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* | twizzler* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | mirbsd* | netbsd* | dicos* | openedition* | ose* \ + | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ + | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ + | bosx* | nextstep* | cxux* | oabi* \ + | ptx* | ecoff* | winnt* | domain* | vsta* \ + | udi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* | serenity* \ + | cygwin* | msys* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | mint* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ + | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ + | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ + | fiwix* | mlibc* | cos* | mbr* | ironclad* ) + ;; + # This one is extra strict with allowed versions + sco3.2v2 | sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + # This refers to builds using the UEFI calling convention + # (which depends on the architecture) and PE file format. + # Note that this is both a different calling convention and + # different file format than that of GNU-EFI + # (x86_64-w64-mingw32). + uefi) + ;; + none) + ;; + kernel* | msvc* ) + # Restricted further below + ;; + '') + if test x"$obj" = x + then + echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2 + fi + ;; + *) + echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 + exit 1 + ;; +esac + +case $obj in + aout* | coff* | elf* | pe*) + ;; + '') + # empty is fine + ;; + *) + echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2 + exit 1 + ;; +esac + +# Here we handle the constraint that a (synthetic) cpu and os are +# valid only in combination with each other and nowhere else. +case $cpu-$os in + # The "javascript-unknown-ghcjs" triple is used by GHC; we + # accept it here in order to tolerate that, but reject any + # variations. + javascript-ghcjs) + ;; + javascript-* | *-ghcjs) + echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2 + exit 1 + ;; +esac + +# As a final step for OS-related things, validate the OS-kernel combination +# (given a valid OS), if there is a kernel. +case $kernel-$os-$obj in + linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \ + | linux-mlibc*- | linux-musl*- | linux-newlib*- \ + | linux-relibc*- | linux-uclibc*- ) + ;; + uclinux-uclibc*- ) + ;; + managarm-mlibc*- | managarm-kernel*- ) + ;; + windows*-msvc*-) + ;; + -dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \ + | -uclibc*- ) + # These are just libc implementations, not actual OSes, and thus + # require a kernel. + echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 + exit 1 + ;; + -kernel*- ) + echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 + exit 1 + ;; + *-kernel*- ) + echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 + exit 1 + ;; + *-msvc*- ) + echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 + exit 1 + ;; + kfreebsd*-gnu*- | kopensolaris*-gnu*-) + ;; + vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) + ;; + nto-qnx*-) + ;; + os2-emx-) + ;; + *-eabi*- | *-gnueabi*-) + ;; + none--*) + # None (no kernel, i.e. freestanding / bare metal), + # can be paired with an machine code file format + ;; + -*-) + # Blank kernel with real OS is always fine. + ;; + --*) + # Blank kernel and OS with real machine code file format is always fine. + ;; + *-*-*) + echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 + exit 1 + ;; +esac + # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) +case $vendor in + unknown) + case $cpu-$os in + *-riscix*) vendor=acorn ;; - -sunos*) + *-sunos*) vendor=sun ;; - -cnk*|-aix*) + *-cnk* | *-aix*) vendor=ibm ;; - -beos*) + *-beos*) vendor=be ;; - -hpux*) + *-hpux*) vendor=hp ;; - -mpeix*) + *-mpeix*) vendor=hp ;; - -hiux*) + *-hiux*) vendor=hitachi ;; - -unos*) + *-unos*) vendor=crds ;; - -dgux*) + *-dgux*) vendor=dg ;; - -luna*) + *-luna*) vendor=omron ;; - -genix*) + *-genix*) vendor=ns ;; - -mvs* | -opened*) + *-clix*) + vendor=intergraph + ;; + *-mvs* | *-opened*) + vendor=ibm + ;; + *-os400*) vendor=ibm ;; - -os400*) + s390-* | s390x-*) vendor=ibm ;; - -ptx*) + *-ptx*) vendor=sequent ;; - -tpf*) + *-tpf*) vendor=ibm ;; - -vxsim* | -vxworks* | -windiss*) + *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; - -aux*) + *-aux*) vendor=apple ;; - -hms*) + *-hms*) vendor=hitachi ;; - -mpw* | -macos*) + *-mpw* | *-macos*) vendor=apple ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; - -vos*) + *-vos*) vendor=stratus ;; esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac -echo $basic_machine$os +echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" exit # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/vs/libpng/configure b/vs/libpng/configure index 603fd9e0e6f..bd274ab9fbf 100755 --- a/vs/libpng/configure +++ b/vs/libpng/configure @@ -1,11 +1,12 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libpng 1.6.34. +# Generated by GNU Autoconf 2.72 for libpng 1.6.47. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -16,63 +17,65 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -81,13 +84,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -96,43 +92,27 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -153,26 +133,28 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +# out after a failed 'exec'. +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( +else case e in #( + e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi " @@ -187,12 +169,16 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else - exitcode=1; echo positional parameters were not saved. +else case e in #( + e) exitcode=1; echo positional parameters were not saved. ;; +esac fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO @@ -207,30 +193,39 @@ test \$(( 1 + 1 )) = 2 || exit 1 PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else - as_have_required=no +else case e in #( + e) as_have_required=no ;; +esac fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -238,14 +233,22 @@ fi esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : + +else case e in #( + e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi ;; +esac +fi - if test "x$CONFIG_SHELL" != x; then : + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -262,26 +265,28 @@ case $- in # (((( esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +# out after a failed 'exec'. +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org and + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: png-mng-implement@lists.sourceforge.net about your $0: system, including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 -fi +fi ;; +esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} @@ -302,6 +307,7 @@ as_fn_unset () } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -333,7 +339,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -342,7 +348,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -381,16 +387,18 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -398,16 +406,18 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith @@ -421,9 +431,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -450,7 +460,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -483,6 +493,8 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits /[$]LINENO/= ' <$as_myself | sed ' + t clear + :clear s/[$]LINENO.*/&-/ t lineno b @@ -494,7 +506,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -508,6 +520,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -521,6 +537,12 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -532,9 +554,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -559,10 +581,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated SHELL=${CONFIG_SHELL-/bin/sh} @@ -590,55 +614,56 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libpng' PACKAGE_TARNAME='libpng' -PACKAGE_VERSION='1.6.34' -PACKAGE_STRING='libpng 1.6.34' +PACKAGE_VERSION='1.6.47' +PACKAGE_STRING='libpng 1.6.47' PACKAGE_BUGREPORT='png-mng-implement@lists.sourceforge.net' PACKAGE_URL='' ac_unique_file="pngget.c" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include +#include +#ifdef HAVE_STDIO_H +# include #endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #ifdef HAVE_UNISTD_H # include #endif" +ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS +LIBOBJS +PNG_LOONGARCH_LSX_FALSE +PNG_LOONGARCH_LSX_TRUE PNG_POWERPC_VSX_FALSE PNG_POWERPC_VSX_TRUE PNG_INTEL_SSE_FALSE PNG_INTEL_SSE_TRUE +PNG_MIPS_MMI_FALSE +PNG_MIPS_MMI_TRUE PNG_MIPS_MSA_FALSE PNG_MIPS_MSA_TRUE PNG_ARM_NEON_FALSE @@ -665,9 +690,11 @@ HAVE_SOLARIS_LD_FALSE HAVE_SOLARIS_LD_TRUE HAVE_CLOCK_GETTIME_FALSE HAVE_CLOCK_GETTIME_TRUE -LIBOBJS -POW_LIB PNG_COPTS +ENABLE_TOOLS_FALSE +ENABLE_TOOLS_TRUE +ENABLE_TESTS_FALSE +ENABLE_TESTS_TRUE DFNCPP LT_SYS_LIBRARY_PATH OTOOL64 @@ -679,6 +706,7 @@ MANIFEST_TOOL RANLIB ac_ct_AR AR +FILECMD NM ac_ct_DUMPBIN DUMPBIN @@ -713,7 +741,6 @@ am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE -am__quote am__include DEPDIR OBJEXT @@ -726,10 +753,15 @@ CC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE +am__xargs_n +am__rm_f_notfound AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V +CSCOPE +ETAGS +CTAGS am__untar am__tar AMTAR @@ -772,6 +804,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -790,7 +823,8 @@ PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR -SHELL' +SHELL +am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking @@ -800,11 +834,15 @@ enable_dependency_tracking with_gnu_ld enable_shared enable_static +enable_pic with_pic enable_fast_install +enable_aix_soname with_aix_soname with_sysroot enable_libtool_lock +enable_tests +enable_tools enable_werror with_zlib_prefix with_pkgconfigdir @@ -816,8 +854,10 @@ enable_unversioned_libpng_config enable_hardware_optimizations enable_arm_neon enable_mips_msa +enable_mips_mmi enable_intel_sse enable_powerpc_vsx +enable_loongarch_lsx ' ac_precious_vars='build_alias host_alias @@ -831,6 +871,7 @@ CCAS CCASFLAGS CPP LT_SYS_LIBRARY_PATH +AWK PNG_COPTS' @@ -870,6 +911,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -899,8 +941,6 @@ do *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -941,9 +981,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -967,9 +1007,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1122,6 +1162,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1171,9 +1220,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1187,9 +1236,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1217,8 +1266,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" + -*) as_fn_error $? "unrecognized option: '$ac_option' +Try '$0 --help' for more information" ;; *=*) @@ -1226,16 +1275,16 @@ Try \`$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1251,7 +1300,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1259,7 +1308,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1276,7 +1325,7 @@ do as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done -# There might be people who depend on the old broken behavior: `$host' +# There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias @@ -1315,7 +1364,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1344,7 +1393,7 @@ if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` @@ -1372,7 +1421,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libpng 1.6.34 to adapt to many kinds of systems. +'configure' configures libpng 1.6.47 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1386,11 +1435,11 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages + -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' + -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] + --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @@ -1398,10 +1447,10 @@ Installation directories: --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. +By default, 'make install' will install all the files in +'$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify +an installation prefix other than '$ac_default_prefix' using '--prefix', +for instance '--prefix=\$HOME'. For better control, use the options below. @@ -1412,6 +1461,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1442,7 +1492,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libpng 1.6.34:";; + short | recursive ) echo "Configuration of libpng 1.6.47:";; esac cat <<\_ACEOF @@ -1461,9 +1511,17 @@ Optional Features: speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] + --enable-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] + --enable-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. --disable-libtool-lock avoid locking (might break parallel builds) + --disable-tests do not build the test programs (default is to build) + --disable-tools do not build the auxiliary tools (default is to + build) --enable-werror[=OPT] Pass -Werror or the given argument to the compiler if it is supported --enable-unversioned-links @@ -1495,41 +1553,48 @@ Optional Features: default - use --disable-unversioned-libpng-config to change this. --enable-hardware-optimizations - Enable hardware optimizations: =no/off, yes/on: + Enable hardware optimizations: =no/off, yes/on. --enable-arm-neon Enable ARM NEON optimizations: =no/off, check, api, - yes/on: no/off: disable the optimizations; check: + yes/on. no/off: disable the optimizations; check: use internal checking code (deprecated and poorly supported); api: disable by default, enable by a call to png_set_option; yes/on: turn on unconditionally. If not specified: determined by the compiler. --enable-mips-msa Enable MIPS MSA optimizations: =no/off, check, api, - yes/on: no/off: disable the optimizations; check: + yes/on. no/off: disable the optimizations; check: + use internal checking code (deprecated and poorly + supported); api: disable by default, enable by a + call to png_set_option; yes/on: turn on + unconditionally. If not specified: determined by the + compiler. + --enable-mips-mmi Enable MIPS MMI optimizations: =no/off, check, api, + yes/on. no/off: disable the optimizations; check: use internal checking code (deprecated and poorly supported); api: disable by default, enable by a call to png_set_option; yes/on: turn on unconditionally. If not specified: determined by the compiler. - --enable-intel-sse Enable Intel SSE optimizations: =no/off, yes/on: + --enable-intel-sse Enable Intel SSE optimizations: =no/off, yes/on. no/off: disable the optimizations; yes/on: enable the optimizations. If not specified: determined by the compiler. --enable-powerpc-vsx Enable POWERPC VSX optimizations: =no/off, check, - api, yes/on: no/off: disable the optimizations; - check: use internal checking code api: disable by - default, enable by a call to png_set_option yes/on: + api, yes/on. no/off: disable the optimizations; + check: use internal checking code; api: disable by + default, enable by a call to png_set_option; yes/on: turn on unconditionally. If not specified: determined by the compiler. + --enable-loongarch-lsx + Enable LOONGARCH LSX optimizations: =no/off, yes/on: + no/off: disable the optimizations; yes/on: turn on + unconditionally. If not specified: determined by the + compiler. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use - both] - --with-aix-soname=aix|svr4|both - shared library versioning (aka "SONAME") variant to - provide on AIX, [default=aix]. --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-zlib-prefix prefix that may have been used in installed zlib @@ -1553,10 +1618,11 @@ Some influential environment variables: CPP C preprocessor LT_SYS_LIBRARY_PATH User-defined run-time library search path. - PNG_COPTS additional flags for the C compiler, use this for options that + AWK AWK language processor + PNG_COPTS additional flags for the C compiler, to be used for options that would cause configure itself to fail -Use these variables to override the choices made by `configure' or to help +Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . @@ -1575,9 +1641,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1605,7 +1671,8 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1613,7 +1680,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1622,10 +1689,10 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libpng configure 1.6.34 -generated by GNU Autoconf 2.69 +libpng configure 1.6.47 +generated by GNU Autoconf 2.72 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1642,14 +1709,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1657,17 +1724,19 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1686,7 +1755,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1694,17 +1763,19 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval @@ -1717,14 +1788,14 @@ fi ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1732,20 +1803,22 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 ;; +esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would @@ -1764,100 +1837,56 @@ fi ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (void); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -1866,7 +1895,7 @@ else #ifdef __cplusplus extern "C" #endif -char $2 (); +char $2 (void); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ @@ -1875,89 +1904,58 @@ choke me #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$3=yes" -else - eval "$3=no" +else case e in #( + e) eval "$3=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; +esac fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac -} # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libpng $as_me 1.6.34, which was -generated by GNU Autoconf 2.69. Invocation command line was +It was created by libpng $as_me 1.6.47, which was +generated by GNU Autoconf 2.72. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -1990,8 +1988,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -2026,7 +2028,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2061,11 +2063,13 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2076,8 +2080,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2101,7 +2105,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2109,14 +2113,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2124,15 +2128,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2140,8 +2144,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2155,65 +2159,50 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } fi done @@ -2221,127 +2210,534 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (char **p, int i) +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +/* C89 style stringification. */ +#define noexpand_stringify(a) #a +const char *stringified = noexpand_stringify(arbitrary+token=sequence); + +/* C89 style token pasting. Exercises some of the corner cases that + e.g. old MSVC gets wrong, but not very hard. */ +#define noexpand_concat(a,b) a##b +#define expand_concat(a,b) noexpand_concat(a,b) +extern int vA; +extern int vbee; +#define aye A +#define bee B +int *pvA = &expand_concat(v,aye); +int *pvbee = &noexpand_concat(v,bee); +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; -# libpng does not follow GNU file name conventions (hence 'foreign') -# color-tests requires automake 1.11 or later -# silent-rules requires automake 1.11 or later -# dist-xz requires automake 1.11 or later -# 1.12.2 fixes a security issue in 1.11.2 and 1.12.1 -# 1.13 is required for parallel tests -am__api_version='1.15' +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' + +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +/* Does the compiler advertise C99 conformance? */ +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif + +// See if C++-style comments work. + +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); +extern void free (void *); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +' + +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + // Work around memory leak warnings. + free (ia); + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' + +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +/* Does the compiler advertise C11 conformance? */ +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif + +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' + +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' + +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" + +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" + +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" + +# Auxiliary files required by this configure script. +ac_aux_files="ltmain.sh config.guess config.sub compile missing install-sh" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in $ac_aux_dir_candidates +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" break fi + ac_first_candidate=false + + as_found=false done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +IFS=$as_save_IFS +if $as_found +then : + +else case e in #( + e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; +esac fi + # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" +fi +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +fi +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' + and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + -# Find a good install program. We prefer a C program (faster), +# libpng does not follow GNU file name conventions (hence 'foreign') +# color-tests requires automake 1.11 or later +# silent-rules requires automake 1.11 or later +# dist-xz requires automake 1.11 or later +# 1.12.2 fixes a security issue in 1.11.2 and 1.12.1 +# 1.13 is required for parallel tests +am__api_version='1.17' + + + + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install @@ -2355,20 +2751,25 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +case $as_dir in #(( + ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; @@ -2378,13 +2779,13 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else @@ -2392,12 +2793,12 @@ case $as_dir/ in #(( echo one > conftest.one echo two > conftest.two mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi @@ -2411,9 +2812,10 @@ esac IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir - + ;; +esac fi - if test "${ac_cv_path_install+set}" = set; then + if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a @@ -2423,8 +2825,8 @@ fi INSTALL=$ac_install_sh fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -2434,8 +2836,167 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5 +printf %s "checking whether sleep supports fractional seconds... " >&6; } +if test ${am_cv_sleep_fractional_seconds+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if sleep 0.001 2>/dev/null +then : + am_cv_sleep_fractional_seconds=yes +else case e in #( + e) am_cv_sleep_fractional_seconds=no ;; +esac +fi + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_sleep_fractional_seconds" >&5 +printf "%s\n" "$am_cv_sleep_fractional_seconds" >&6; } + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking filesystem timestamp resolution" >&5 +printf %s "checking filesystem timestamp resolution... " >&6; } +if test ${am_cv_filesystem_timestamp_resolution+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) # Default to the worst case. +am_cv_filesystem_timestamp_resolution=2 + +# Only try to go finer than 1 sec if sleep can do it. +# Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, +# - 1 sec is not much of a win compared to 2 sec, and +# - it takes 2 seconds to perform the test whether 1 sec works. +# +# Instead, just use the default 2s on platforms that have 1s resolution, +# accept the extra 1s delay when using $sleep in the Automake tests, in +# exchange for not incurring the 2s delay for running the test for all +# packages. +# +am_try_resolutions= +if test "$am_cv_sleep_fractional_seconds" = yes; then + # Even a millisecond often causes a bunch of false positives, + # so just try a hundredth of a second. The time saved between .001 and + # .01 is not terribly consequential. + am_try_resolutions="0.01 0.1 $am_try_resolutions" +fi + +# In order to catch current-generation FAT out, we must *modify* files +# that already exist; the *creation* timestamp is finer. Use names +# that make ls -t sort them differently when they have equal +# timestamps than when they have distinct timestamps, keeping +# in mind that ls -t prints the *newest* file first. +rm -f conftest.ts? +: > conftest.ts1 +: > conftest.ts2 +: > conftest.ts3 + +# Make sure ls -t actually works. Do 'set' in a subshell so we don't +# clobber the current shell's arguments. (Outer-level square brackets +# are removed by m4; they're present so that m4 does not expand +# ; be careful, easy to get confused.) +if ( + set X `ls -t conftest.ts[12]` && + { + test "$*" != "X conftest.ts1 conftest.ts2" || + test "$*" != "X conftest.ts2 conftest.ts1"; + } +); then :; else + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + printf "%s\n" ""Bad output from ls -t: \"`ls -t conftest.ts[12]`\""" >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +as_fn_error $? "ls -t produces unexpected output. +Make sure there is not a broken ls alias in your environment. +See 'config.log' for more details" "$LINENO" 5; } +fi + +for am_try_res in $am_try_resolutions; do + # Any one fine-grained sleep might happen to cross the boundary + # between two values of a coarser actual resolution, but if we do + # two fine-grained sleeps in a row, at least one of them will fall + # entirely within a coarse interval. + echo alpha > conftest.ts1 + sleep $am_try_res + echo beta > conftest.ts2 + sleep $am_try_res + echo gamma > conftest.ts3 + + # We assume that 'ls -t' will make use of high-resolution + # timestamps if the operating system supports them at all. + if (set X `ls -t conftest.ts?` && + test "$2" = conftest.ts3 && + test "$3" = conftest.ts2 && + test "$4" = conftest.ts1); then + # + # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, + # because we don't need to test make. + make_ok=true + if test $am_try_res != 1; then + # But if we've succeeded so far with a subsecond resolution, we + # have one more thing to check: make. It can happen that + # everything else supports the subsecond mtimes, but make doesn't; + # notably on macOS, which ships make 3.81 from 2006 (the last one + # released under GPLv2). https://bugs.gnu.org/68808 + # + # We test $MAKE if it is defined in the environment, else "make". + # It might get overridden later, but our hope is that in practice + # it does not matter: it is the system "make" which is (by far) + # the most likely to be broken, whereas if the user overrides it, + # probably they did so with a better, or at least not worse, make. + # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html + # + # Create a Makefile (real tab character here): + rm -f conftest.mk + echo 'conftest.ts1: conftest.ts2' >conftest.mk + echo ' touch conftest.ts2' >>conftest.mk + # + # Now, running + # touch conftest.ts1; touch conftest.ts2; make + # should touch ts1 because ts2 is newer. This could happen by luck, + # but most often, it will fail if make's support is insufficient. So + # test for several consecutive successes. + # + # (We reuse conftest.ts[12] because we still want to modify existing + # files, not create new ones, per above.) + n=0 + make=${MAKE-make} + until test $n -eq 3; do + echo one > conftest.ts1 + sleep $am_try_res + echo two > conftest.ts2 # ts2 should now be newer than ts1 + if $make -f conftest.mk | grep 'up to date' >/dev/null; then + make_ok=false + break # out of $n loop + fi + n=`expr $n + 1` + done + fi + # + if $make_ok; then + # Everything we know to check worked out, so call this resolution good. + am_cv_filesystem_timestamp_resolution=$am_try_res + break # out of $am_try_res loop + fi + # Otherwise, we'll go on to check the next resolution. + fi +done +rm -f conftest.ts? +# (end _am_filesystem_timestamp_resolution) + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_filesystem_timestamp_resolution" >&5 +printf "%s\n" "$am_cv_filesystem_timestamp_resolution" >&6; } + +# This check should not be cached, as it may vary across builds of +# different projects. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -2454,49 +3015,45 @@ esac # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). -if ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken - alias in your environment" "$LINENO" 5 - fi - if test "$2" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! +am_build_env_is_sane=no +am_has_slept=no +rm -f conftest.file +for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + test "$2" = conftest.file + ); then + am_build_env_is_sane=yes + break + fi + # Just in case. + sleep "$am_cv_filesystem_timestamp_resolution" + am_has_slept=yes +done + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_build_env_is_sane" >&5 +printf "%s\n" "$am_build_env_is_sane" >&6; } +if test "$am_build_env_is_sane" = no; then + as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & +if test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1 +then : + +else case e in #( + e) ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! + ;; +esac fi rm -f conftest.file @@ -2507,28 +3064,25 @@ test "$program_prefix" != NONE && test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. -# By default was `s,x,x', remove it if useless. +# By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` +program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` + # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac + + if test x"${MISSING+set}" != xset; then + MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then @@ -2548,38 +3102,44 @@ if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -2588,38 +3148,44 @@ if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -2627,8 +3193,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -2640,98 +3206,110 @@ fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 +printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + if test ${ac_cv_path_mkdir+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ + as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue + case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir ('*'coreutils) '* | \ + *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS - + ;; +esac fi test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then + if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" + # As a last resort, use plain mkdir -p, + # in the hope it doesn't have the bugs of ancient mkdir. + MKDIR_P='mkdir -p' fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF +ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval test \${ac_cv_prog_make_${ac_make}_set+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' @@ -2743,15 +3321,16 @@ case `${MAKE-make} -f conftest.make 2>/dev/null` in *) eval ac_cv_prog_make_${ac_make}_set=no;; esac -rm -f conftest.make +rm -f conftest.make ;; +esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } SET_MAKE= else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -2764,23 +3343,21 @@ else fi rmdir .tst 2>/dev/null +AM_DEFAULT_VERBOSITY=1 # Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : +if test ${enable_silent_rules+y} +then : enableval=$enable_silent_rules; fi -case $enable_silent_rules in # ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=1;; -esac am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +printf %s "checking whether $am_make supports nested variables... " >&6; } +if test ${am_cv_make_support_nested_variables+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 @@ -2790,19 +3367,50 @@ am__doit: am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no +fi ;; +esac fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } -if test $am_cv_make_support_nested_variables = yes; then - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } AM_BACKSLASH='\' +am__rm_f_notfound= +if (rm -f && rm -fr && rm -rf) 2>/dev/null +then : + +else case e in #( + e) am__rm_f_notfound='""' ;; +esac +fi + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking xargs -n works" >&5 +printf %s "checking xargs -n works... " >&6; } +if test ${am_cv_xargs_n_works+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 +3" +then : + am_cv_xargs_n_works=yes +else case e in #( + e) am_cv_xargs_n_works=no ;; +esac +fi ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_xargs_n_works" >&5 +printf "%s\n" "$am_cv_xargs_n_works" >&6; } +if test "$am_cv_xargs_n_works" = yes +then : + am__xargs_n='xargs -n' +else case e in #( + e) am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "" "$am__xargs_n_arg"; done; }' + ;; +esac +fi + if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." @@ -2825,17 +3433,13 @@ fi # Define the identity of the package. PACKAGE='libpng' - VERSION='1.6.34' + VERSION='1.6.47' -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF +printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF +printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. @@ -2855,8 +3459,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: -# -# +# +# mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The @@ -2875,64 +3479,42 @@ am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' +# Variables for tags utilities; see am/tags.am +if test -z "$CTAGS"; then + CTAGS=ctags +fi + +if test -z "$ETAGS"; then + ETAGS=etags +fi -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! +if test -z "$CSCOPE"; then + CSCOPE=cscope +fi -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. -END - as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 - fi -fi # The following line causes --disable-maintainer-mode to be the default to # configure. This is necessary because libpng distributions cannot rely on the # time stamps of the autotools generated files being correct -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : +if test ${enable_maintainer_mode+y} +then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no +else case e in #( + e) USE_MAINTAINER_MODE=no ;; +esac fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +printf "%s\n" "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' @@ -2946,23 +3528,32 @@ fi -PNGLIB_VERSION=1.6.34 +PNGLIB_VERSION=1.6.47 PNGLIB_MAJOR=1 PNGLIB_MINOR=6 -PNGLIB_RELEASE=34 +PNGLIB_RELEASE=47 ac_config_headers="$ac_config_headers config.h" -# Checks for programs. +# Check the basic programs. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -2971,38 +3562,44 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3011,38 +3608,44 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -3050,8 +3653,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -3064,38 +3667,44 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3104,12 +3713,13 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no @@ -3117,15 +3727,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3141,18 +3755,19 @@ if test $ac_prog_rejected = yes; then # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3163,38 +3778,44 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3207,38 +3828,44 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3250,34 +3877,140 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi ;; +esac +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi ;; +esac +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi +else + CC="$ac_cv_prog_CC" fi fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -3287,7 +4020,7 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -3295,7 +4028,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3307,9 +4040,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" @@ -3330,13 +4063,14 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : + # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. +# So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. @@ -3351,12 +4085,12 @@ do # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' + # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. @@ -3367,48 +4101,52 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else - ac_file='' +else case e in #( + e) ac_file='' ;; +esac fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +See 'config.log' for more details" "$LINENO" 5; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : + # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) +# catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will +# work properly (i.e., refer to 'conftest.exe'), while it won't with +# 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in @@ -3418,15 +4156,16 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext @@ -3435,9 +4174,11 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { FILE *f = fopen ("conftest.out", "w"); + if (!f) + return 1; return ferror (f) || fclose (f) != 0; ; @@ -3447,8 +4188,8 @@ _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in @@ -3456,10 +4197,10 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in @@ -3467,39 +4208,41 @@ $as_echo "$ac_try_echo"; } >&5 *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. +If you meant to cross compile, use '--host'. +See 'config.log' for more details" "$LINENO" 5; } fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +rm -f conftest.$ac_ext conftest$ac_cv_exeext \ + conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3513,11 +4256,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -3526,31 +4270,34 @@ $as_echo "$ac_try_echo"; } >&5 break;; esac done -else - $as_echo "$as_me: failed program was:" >&5 +else case e in #( + e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext +rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -3560,30 +4307,36 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else - ac_compiler_gnu=no +else case e in #( + e) ac_compiler_gnu=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" @@ -3591,57 +4344,63 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else - CFLAGS="" +else case e in #( + e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else - ac_c_werror_flag=$ac_save_c_werror_flag +else case e in #( + e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -3656,94 +4415,153 @@ else CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC ;; +esac +fi -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else case e in #( + e) if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" ;; +esac +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 ;; +esac +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC ;; +esac +fi -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else case e in #( + e) if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" ;; +esac +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 ;; +esac +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext -CC=$ac_save_CC +CC=$ac_save_CC ;; +esac +fi +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else case e in #( + e) if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" ;; +esac fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 ;; esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - +fi fi ac_ext=c @@ -3752,21 +4570,23 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -ac_ext=c + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +printf %s "checking whether $CC understands -c and -o together... " >&6; } +if test ${am_cv_prog_cc_c_o+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3792,10 +4612,11 @@ _ACEOF fi done rm -f core conftest* - unset am_i + unset am_i ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. @@ -3814,48 +4635,49 @@ DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" - -am_make=${MAKE-make} -cat > confinc << 'END' +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 +printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } +cat > confinc.mk << 'END' am__doit: - @echo this is the am__doit target + @echo this is the am__doit target >confinc.out .PHONY: am__doit END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 + (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + case $?:`cat confinc.out 2>/dev/null` in #( + '0:this is the am__doit target') : + case $s in #( + BSD) : + am__include='.include' am__quote='"' ;; #( + *) : + am__include='include' am__quote='' ;; +esac ;; #( + *) : ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf +esac + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 +printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : +if test ${enable_dependency_tracking+y} +then : enableval=$enable_dependency_tracking; fi @@ -3876,12 +4698,13 @@ fi depcc="$CC" am_compiler_list= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +printf %s "checking dependency style of $depcc... " >&6; } +if test ${am_cv_CC_dependencies_compiler_type+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up @@ -3968,7 +4791,7 @@ else # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: + # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported @@ -3985,10 +4808,11 @@ else else am_cv_CC_dependencies_compiler_type=none fi - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if @@ -4011,12 +4835,13 @@ test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS depcc="$CCAS" am_compiler_list= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +printf %s "checking dependency style of $depcc... " >&6; } +if test ${am_cv_CCAS_dependencies_compiler_type+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up @@ -4101,7 +4926,7 @@ else # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: + # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported @@ -4118,10 +4943,11 @@ else else am_cv_CCAS_dependencies_compiler_type=none fi - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 +printf "%s\n" "$am_cv_CCAS_dependencies_compiler_type" >&6; } CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type if @@ -4135,26 +4961,30 @@ else fi -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias + + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; @@ -4173,21 +5003,23 @@ IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; @@ -4206,12 +5038,13 @@ IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done @@ -4224,25 +5057,31 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in +case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +#( *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" + printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4268,10 +5107,11 @@ IFS=$as_save_IFS else ac_cv_path_SED=$SED fi - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed @@ -4288,37 +5128,44 @@ Xsed="$SED -e 1s/^X//" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in +case `"$ac_path_GREP" --version 2>&1` in #( *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +#( *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4344,19 +5191,21 @@ IFS=$as_save_IFS else ac_cv_path_GREP=$GREP fi - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then @@ -4366,25 +5215,31 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in +case `"$ac_path_EGREP" --version 2>&1` in #( *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +#( *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4411,19 +5266,23 @@ else ac_cv_path_EGREP=$EGREP fi - fi + fi ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" + EGREP_TRADITIONAL=$EGREP + ac_cv_path_EGREP_TRADITIONAL=$EGREP -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +printf %s "checking for fgrep... " >&6; } +if test ${ac_cv_path_FGREP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then @@ -4433,25 +5292,31 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in fgrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in +case `"$ac_path_FGREP" --version 2>&1` in #( *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +#( *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" + printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4478,10 +5343,11 @@ else ac_cv_path_FGREP=$FGREP fi - fi + fi ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" @@ -4507,8 +5373,8 @@ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then @@ -4534,12 +5400,12 @@ func_echo_all () } case $ECHO in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; + printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +printf "%s\n" "printf" >&6; } ;; + print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +printf "%s\n" "print -r" >&6; } ;; + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +printf "%s\n" "cat" >&6; } ;; esac @@ -4558,19 +5424,21 @@ esac # Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : +if test ${with_gnu_ld+y} +then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else - with_gnu_ld=no +else case e in #( + e) with_gnu_ld=no ;; +esac fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } case $host in - *-*-mingw*) + *-*-mingw* | *-*-windows*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) @@ -4597,16 +5465,17 @@ $as_echo_n "checking for ld used by $CC... " >&6; } ;; esac elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs @@ -4629,24 +5498,26 @@ else IFS=$lt_save_ifs else lt_cv_path_LD=$LD # Let the user override the test with a path. -fi +fi ;; +esac fi LD=$lt_cv_path_LD if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -4673,42 +5545,39 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + if test ${ac_cv_prog_CPP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) # Double quotes because $CC needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : -else - # Broken: fails on valid input. -continue +else case e in #( + e) # Broken: fails on valid input. +continue ;; +esac fi rm -f conftest.err conftest.i conftest.$ac_ext @@ -4718,56 +5587,56 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else - # Passes both tests. +else case e in #( + e) # Passes both tests. ac_preproc_ok=: -break +break ;; +esac fi rm -f conftest.err conftest.i conftest.$ac_ext done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : break fi done ac_cv_prog_CPP=$CPP - + ;; +esac fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : -else - # Broken: fails on valid input. -continue +else case e in #( + e) # Broken: fails on valid input. +continue ;; +esac fi rm -f conftest.err conftest.i conftest.$ac_ext @@ -4777,26 +5646,30 @@ rm -f conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else - # Passes both tests. +else case e in #( + e) # Passes both tests. ac_preproc_ok=: -break +break ;; +esac fi rm -f conftest.err conftest.i conftest.$ac_ext done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +# Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else case e in #( + e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } +See 'config.log' for more details" "$LINENO" 5; } ;; +esac fi ac_ext=c @@ -4809,38 +5682,44 @@ for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4848,25 +5727,26 @@ fi done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF +ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval test \${ac_cv_prog_make_${ac_make}_set+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' @@ -4878,29 +5758,31 @@ case `${MAKE-make} -f conftest.make 2>/dev/null` in *) eval ac_cv_prog_make_${ac_make}_set=no;; esac -rm -f conftest.make +rm -f conftest.make ;; +esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } SET_MAKE= else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi case `pwd` in *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac -macro_version='2.4.6' -macro_revision='2.4.6' +macro_version='2.5.4' +macro_revision='2.5.4' + @@ -4933,12 +5815,13 @@ delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test ${lt_cv_path_NM+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else @@ -4959,16 +5842,16 @@ else # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in - mingw*) lt_bad_file=conftest.nm/nofile ;; + mingw* | windows*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac - case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 @@ -4985,10 +5868,11 @@ else IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} +fi ;; +esac fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else @@ -5001,38 +5885,44 @@ else do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +printf "%s\n" "$DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5045,38 +5935,44 @@ if test -z "$DUMPBIN"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5088,15 +5984,15 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi - case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; @@ -5117,12 +6013,13 @@ test -z "$NM" && NM=nm -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +printf %s "checking the name lister ($NM) interface... " >&6; } +if test ${lt_cv_nm_interface+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) @@ -5135,18 +6032,20 @@ else if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi - rm -f conftest* + rm -f conftest* ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +printf "%s\n" "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else - i=0 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +printf %s "checking the maximum length of command line arguments... " >&6; } +if test ${lt_cv_sys_max_cmd_len+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) i=0 teststring=ABCD case $build_os in @@ -5158,14 +6057,14 @@ else lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. + gnu* | ironclad*) + # Under GNU Hurd and Ironclad, this test is not required because there + # is no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; - cygwin* | mingw* | cegcc*) + cygwin* | mingw* | windows* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, @@ -5187,7 +6086,7 @@ else lt_cv_sys_max_cmd_len=8192; ;; - bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -5230,7 +6129,7 @@ else sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi @@ -5268,15 +6167,16 @@ else fi ;; esac - + ;; +esac fi if test -n "$lt_cv_sys_max_cmd_len"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len @@ -5320,15 +6220,16 @@ esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +printf %s "checking how to convert $build file names to $host format... " >&6; } +if test ${lt_cv_to_host_file_cmd+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) case $host in *-*-mingw* ) case $build in - *-*-mingw* ) # actually msys + *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) @@ -5341,7 +6242,7 @@ else ;; *-*-cygwin* ) case $build in - *-*-mingw* ) # actually msys + *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) @@ -5356,53 +6257,58 @@ else lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac - + ;; +esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +printf %s "checking how to convert $build file names to toolchain format... " >&6; } +if test ${lt_cv_to_tool_file_cmd+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in - *-*-mingw* ) + *-*-mingw* | *-*-windows* ) case $build in - *-*-mingw* ) # actually msys + *-*-mingw* | *-*-windows* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac - + ;; +esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +printf %s "checking for $LD option to reload object files... " >&6; } +if test ${lt_cv_ld_reload_flag+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_ld_reload_flag='-r' ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; @@ -5410,7 +6316,7 @@ case $reload_flag in esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi @@ -5432,41 +6338,97 @@ esac +# Extract the first word of "file", so it can be a program name with args. +set dummy file; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_FILECMD+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$FILECMD"; then + ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_FILECMD="file" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_FILECMD" && ac_cv_prog_FILECMD=":" +fi ;; +esac +fi +FILECMD=$ac_cv_prog_FILECMD +if test -n "$FILECMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5 +printf "%s\n" "$FILECMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + + + + + + if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +printf "%s\n" "$OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5475,38 +6437,44 @@ if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then @@ -5514,8 +6482,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP @@ -5531,12 +6499,13 @@ test -z "$OBJDUMP" && OBJDUMP=objdump -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +printf %s "checking how to recognize dependent libraries... " >&6; } +if test ${lt_cv_deplibs_check_method+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support @@ -5544,7 +6513,6 @@ lt_cv_deplibs_check_method='unknown' # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure @@ -5561,7 +6529,7 @@ beos*) bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; @@ -5571,7 +6539,7 @@ cygwin*) lt_cv_file_magic_cmd='func_win32_libid' ;; -mingw* | pw32*) +mingw* | windows* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. @@ -5580,7 +6548,7 @@ mingw* | pw32*) lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; @@ -5595,14 +6563,14 @@ darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac @@ -5616,7 +6584,7 @@ haiku*) ;; hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' @@ -5653,7 +6621,11 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; -netbsd*) +*-mlibc) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else @@ -5663,7 +6635,7 @@ netbsd*) newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; @@ -5671,7 +6643,7 @@ newos6*) lt_cv_deplibs_check_method=pass_all ;; -openbsd* | bitrig*) +openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else @@ -5687,6 +6659,10 @@ rdos*) lt_cv_deplibs_check_method=pass_all ;; +serenity*) + lt_cv_deplibs_check_method=pass_all + ;; + solaris*) lt_cv_deplibs_check_method=pass_all ;; @@ -5729,16 +6705,17 @@ os2*) lt_cv_deplibs_check_method=pass_all ;; esac - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in - mingw* | pw32*) + mingw* | windows* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else @@ -5776,38 +6753,44 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +printf "%s\n" "$DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5816,38 +6799,44 @@ if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then @@ -5855,8 +6844,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL @@ -5873,15 +6862,16 @@ test -z "$DLLTOOL" && DLLTOOL=dlltool -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_sharedlib_from_linklib_cmd='unknown' +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +printf %s "checking how to associate runtime and link libraries... " >&6; } +if test ${lt_cv_sharedlib_from_linklib_cmd+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in -cygwin* | mingw* | pw32* | cegcc*) +cygwin* | mingw* | windows* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in @@ -5898,10 +6888,11 @@ cygwin* | mingw* | pw32* | cegcc*) lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO @@ -5912,43 +6903,153 @@ test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi ;; +esac +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi ;; +esac +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5961,38 +7062,44 @@ if test -z "$AR"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6004,8 +7111,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -6013,42 +7120,60 @@ esac fi : ${AR=ar} -: ${AR_FLAGS=cru} +# Use ARFLAGS variable as AR's operation code to sync the variable naming with +# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have +# higher priority because that's what people were doing historically (setting +# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS +# variable obsoleted/removed. +test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} +lt_ar_flags=$AR_FLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no + + +# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override +# by AR_FLAGS because that was never working and AR_FLAGS is about to die. + + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +printf %s "checking for archiver @FILE support... " >&6; } +if test ${lt_cv_ar_at_file+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. @@ -6056,7 +7181,7 @@ if ac_fn_c_try_compile "$LINENO"; then : { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ @@ -6065,11 +7190,12 @@ if ac_fn_c_try_compile "$LINENO"; then : rm -f conftest.* libconftest.a fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= @@ -6086,38 +7212,44 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6126,38 +7258,44 @@ if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -6165,8 +7303,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -6182,99 +7320,8 @@ test -z "$STRIP" && STRIP=: -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: +test -z "$RANLIB" && RANLIB=: @@ -6287,15 +7334,8 @@ old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then - case $host_os in - bitrig* | openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in @@ -6354,12 +7394,13 @@ compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else - +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +printf %s "checking command to parse $NM output from $compiler object... " >&6; } +if test ${lt_cv_sys_global_symbol_pipe+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] @@ -6374,7 +7415,7 @@ case $host_os in aix*) symcode='[BCDT]' ;; -cygwin* | mingw* | pw32* | cegcc*) +cygwin* | mingw* | windows* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) @@ -6389,7 +7430,7 @@ osf*) symcode='[BCDEGQRST]' ;; solaris*) - symcode='[BDRT]' + symcode='[BCDRT]' ;; sco3.2v5*) symcode='[DT]' @@ -6413,7 +7454,7 @@ esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. - lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" @@ -6431,20 +7472,20 @@ fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ @@ -6453,7 +7494,7 @@ $lt_c_name_lib_hook\ # Handle CRLF in mingw tool chain opt_cr= case $build_os in -mingw*) +mingw* | windows*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac @@ -6468,7 +7509,7 @@ for ac_symprfx in "" "_"; do if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. - # Also find C++ and __fastcall symbols from MSVC++, + # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ @@ -6486,9 +7527,9 @@ for ac_symprfx in "" "_"; do " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no @@ -6504,21 +7545,18 @@ void nm_test_func(void){} #ifdef __cplusplus } #endif -int main(){nm_test_var='a';nm_test_func();return(0);} +int main(void){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then + $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&5 + if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&5 && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" @@ -6586,7 +7624,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi @@ -6614,18 +7652,19 @@ _LT_EOF lt_cv_sys_global_symbol_pipe= fi done - + ;; +esac fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +printf "%s\n" "failed" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +printf "%s\n" "ok" >&6; } fi # Response file support. @@ -6671,14 +7710,16 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : +if test ${with_sysroot+y} +then : withval=$with_sysroot; -else - with_sysroot=no +else case e in #( + e) with_sysroot=no ;; +esac fi @@ -6686,34 +7727,37 @@ lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` + # Trim trailing / since we'll always append absolute paths and we want + # to avoid //, if only for less confusing output for the user. + lt_sysroot=`$CC --print-sysroot 2>/dev/null | $SED 's:/\+$::'` fi ;; #( /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -$as_echo "$with_sysroot" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +printf "%s\n" "${lt_sysroot:-no}" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -$as_echo_n "checking for a working dd... " >&6; } -if ${ac_cv_path_lt_DD+:} false; then : - $as_echo_n "(cached) " >&6 -else - printf 0123456789abcdef0123456789abcdef >conftest.i +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +printf %s "checking for a working dd... " >&6; } +if test ${ac_cv_path_lt_DD+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then @@ -6723,10 +7767,15 @@ if test -z "$lt_DD"; then for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in dd; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in dd + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ @@ -6744,18 +7793,20 @@ else ac_cv_path_lt_DD=$lt_DD fi -rm -f conftest.i conftest2.i conftest.out +rm -f conftest.i conftest2.i conftest.out ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -$as_echo "$ac_cv_path_lt_DD" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +printf "%s\n" "$ac_cv_path_lt_DD" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -$as_echo_n "checking how to truncate binary pipes... " >&6; } -if ${lt_cv_truncate_bin+:} false; then : - $as_echo_n "(cached) " >&6 -else - printf 0123456789abcdef0123456789abcdef >conftest.i +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +printf %s "checking how to truncate binary pipes... " >&6; } +if test ${lt_cv_truncate_bin+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then @@ -6763,10 +7814,11 @@ if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; the && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out -test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -$as_echo "$lt_cv_truncate_bin" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +printf "%s\n" "$lt_cv_truncate_bin" >&6; } @@ -6789,7 +7841,8 @@ func_cc_basename () } # Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : +if test ${enable_libtool_lock+y} +then : enableval=$enable_libtool_lock; fi @@ -6805,9 +7858,9 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; @@ -6825,10 +7878,10 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; @@ -6840,7 +7893,7 @@ ia64-*-hpux*) ;; esac else - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; @@ -6863,10 +7916,10 @@ mips64*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; @@ -6874,7 +7927,7 @@ mips64*-*linux*) emul="${emul}64" ;; esac - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; @@ -6882,7 +7935,7 @@ mips64*-*linux*) emul="${emul}ltsmip" ;; esac - case `/usr/bin/file conftest.$ac_objext` in + case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; @@ -6893,7 +7946,7 @@ mips64*-*linux*) ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) +s390*-*linux*|s390*-*tpf*|sparc*-*linux*|x86_64-gnu*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when @@ -6904,16 +7957,16 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; - x86_64-*linux*) - case `/usr/bin/file conftest.o` in + x86_64-*linux*|x86_64-gnu*) + case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; @@ -6941,7 +7994,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; - x86_64-*linux*) + x86_64-*linux*|x86_64-gnu*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) @@ -6967,12 +8020,13 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +printf %s "checking whether the C compiler needs -belf... " >&6; } +if test ${lt_cv_cc_needs_belf+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' @@ -6982,29 +8036,32 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no +else case e in #( + e) lt_cv_cc_needs_belf=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS @@ -7017,9 +8074,9 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; } if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in + case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) @@ -7054,38 +8111,44 @@ need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MANIFEST_TOOL"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +printf "%s\n" "$MANIFEST_TOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7094,38 +8157,44 @@ if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MANIFEST_TOOL"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then @@ -7133,8 +8202,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL @@ -7144,23 +8213,25 @@ else fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_path_mainfest_tool=no +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if test ${lt_cv_path_manifest_tool+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_path_manifest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes + lt_cv_path_manifest_tool=yes fi - rm -f conftest* + rm -f conftest* ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test yes != "$lt_cv_path_mainfest_tool"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_manifest_tool" >&5 +printf "%s\n" "$lt_cv_path_manifest_tool" >&6; } +if test yes != "$lt_cv_path_manifest_tool"; then MANIFEST_TOOL=: fi @@ -7174,38 +8245,44 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +printf "%s\n" "$DSYMUTIL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7214,38 +8291,44 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then @@ -7253,8 +8336,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL @@ -7266,38 +8349,44 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +printf "%s\n" "$NMEDIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7306,38 +8395,44 @@ if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +printf "%s\n" "$ac_ct_NMEDIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then @@ -7345,8 +8440,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT @@ -7358,38 +8453,44 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LIPO+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +printf "%s\n" "$LIPO" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7398,38 +8499,44 @@ if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_LIPO+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +printf "%s\n" "$ac_ct_LIPO" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then @@ -7437,8 +8544,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO @@ -7450,38 +8557,44 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +printf "%s\n" "$OTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7490,38 +8603,44 @@ if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +printf "%s\n" "$ac_ct_OTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then @@ -7529,8 +8648,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL @@ -7542,38 +8661,44 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +printf "%s\n" "$OTOOL64" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7582,38 +8707,44 @@ if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +printf "%s\n" "$ac_ct_OTOOL64" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then @@ -7621,8 +8752,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 @@ -7657,12 +8788,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +printf %s "checking for -single_module linker flag... " >&6; } +if test ${lt_cv_apple_cc_single_mod+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE @@ -7688,17 +8820,58 @@ else fi rm -rf libconftest.dylib* rm -f conftest.* - fi + fi ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } + + # Feature test to disable chained fixups since it is not + # compatible with '-undefined dynamic_lookup' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -no_fixup_chains linker flag" >&5 +printf %s "checking for -no_fixup_chains linker flag... " >&6; } +if test ${lt_cv_support_no_fixup_chains+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-no_fixup_chains" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_cv_support_no_fixup_chains=yes +else case e in #( + e) lt_cv_support_no_fixup_chains=no + ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_support_no_fixup_chains" >&5 +printf "%s\n" "$lt_cv_support_no_fixup_chains" >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +printf %s "checking for -exported_symbols_list linker flag... " >&6; } +if test ${lt_cv_ld_exported_symbols_list+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" @@ -7706,43 +8879,47 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no +else case e in #( + e) lt_cv_ld_exported_symbols_list=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +printf %s "checking for -force_load linker flag... " >&6; } +if test ${lt_cv_ld_force_load+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 + echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5 + $AR $AR_FLAGS libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF -int main() { return 0;} +int main(void) { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err @@ -7756,32 +8933,47 @@ _LT_EOF fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - 10.[012][,.]*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + darwin*) + case $MACOSX_DEPLOYMENT_TARGET,$host in + 10.[012],*|,*powerpc*-darwin[5-8]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' + if test yes = "$lt_cv_support_no_fixup_chains"; then + as_fn_append _lt_dar_allow_undefined ' $wl-no_fixup_chains' + fi + ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi + _lt_dar_needs_single_mod=no + case $host_os in + rhapsody* | darwin1.*) + _lt_dar_needs_single_mod=yes ;; + darwin*) + # When targeting Mac OS X 10.4 (darwin 8) or later, + # -single_module is the default and -multi_module is unsupported. + # The toolchain on macOS 10.14 (darwin 18) and later cannot + # target any OS version that needs -single_module. + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*-darwin[567].*|10.[0-3],*-darwin[5-9].*|10.[0-3],*-darwin1[0-7].*) + _lt_dar_needs_single_mod=yes ;; + esac + ;; + esac if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else @@ -7830,149 +9022,43 @@ func_munge_path_list () esac } +ac_header= ac_cache= +for ac_item in $ac_header_c_list +do + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h + fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item + fi +done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then -$as_echo "#define STDC_HEADERS 1" >>confdefs.h -fi +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF +if test "x$ac_cv_header_dlfcn_h" = xyes +then : + printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi -done - @@ -7981,42 +9067,48 @@ done enable_win32_dll=yes case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) +*-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AS+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AS"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AS+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi AS=$ac_cv_prog_AS if test -n "$AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 -$as_echo "$AS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +printf "%s\n" "$AS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8025,38 +9117,44 @@ if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AS+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AS"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AS+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 -$as_echo "$ac_ct_AS" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +printf "%s\n" "$ac_ct_AS" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_AS" = x; then @@ -8064,8 +9162,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS @@ -8077,38 +9175,44 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +printf "%s\n" "$DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8117,38 +9221,44 @@ if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then @@ -8156,8 +9266,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL @@ -8169,38 +9279,44 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +printf "%s\n" "$OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8209,38 +9325,44 @@ if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS -fi +fi ;; +esac fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then @@ -8248,8 +9370,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP @@ -8286,7 +9408,8 @@ test -z "$OBJDUMP" && OBJDUMP=objdump # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : +if test ${enable_shared+y} +then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; @@ -8304,8 +9427,9 @@ if test "${enable_shared+set}" = set; then : IFS=$lt_save_ifs ;; esac -else - enable_shared=yes +else case e in #( + e) enable_shared=yes ;; +esac fi @@ -8317,7 +9441,8 @@ fi # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : +if test ${enable_static+y} +then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; @@ -8335,8 +9460,9 @@ if test "${enable_static+set}" = set; then : IFS=$lt_save_ifs ;; esac -else - enable_static=yes +else case e in #( + e) enable_static=yes ;; +esac fi @@ -8347,27 +9473,52 @@ fi - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : + # Check whether --enable-pic was given. +if test ${enable_pic+y} +then : + enableval=$enable_pic; lt_p=${PACKAGE-default} + case $enableval in + yes|no) pic_mode=$enableval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else case e in #( + e) # Check whether --with-pic was given. +if test ${with_pic+y} +then : withval=$with_pic; lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, - for lt_pkg in $withval; do - IFS=$lt_save_ifs - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS=$lt_save_ifs - ;; - esac -else - pic_mode=default + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else case e in #( + e) pic_mode=default ;; +esac +fi + + ;; +esac fi @@ -8378,7 +9529,8 @@ fi # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : +if test ${enable_fast_install+y} +then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; @@ -8396,8 +9548,9 @@ if test "${enable_fast_install+set}" = set; then : IFS=$lt_save_ifs ;; esac -else - enable_fast_install=yes +else case e in #( + e) enable_fast_install=yes ;; +esac fi @@ -8410,31 +9563,50 @@ fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } - -# Check whether --with-aix-soname was given. -if test "${with_aix_soname+set}" = set; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +printf %s "checking which variant of shared library versioning to provide... " >&6; } + # Check whether --enable-aix-soname was given. +if test ${enable_aix_soname+y} +then : + enableval=$enable_aix_soname; case $enableval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --enable-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$enable_aix_soname +else case e in #( + e) # Check whether --with-aix-soname was given. +if test ${with_aix_soname+y} +then : withval=$with_aix_soname; case $withval in - aix|svr4|both) - ;; - *) - as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 - ;; - esac - lt_cv_with_aix_soname=$with_aix_soname -else - if ${lt_cv_with_aix_soname+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_with_aix_soname=aix + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else case e in #( + e) if test ${lt_cv_with_aix_soname+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_with_aix_soname=aix ;; +esac +fi + ;; +esac fi - with_aix_soname=$lt_cv_with_aix_soname + enable_aix_soname=$lt_cv_with_aix_soname ;; +esac fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -$as_echo "$with_aix_soname" >&6; } + with_aix_soname=$enable_aix_soname + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', @@ -8516,12 +9688,13 @@ if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +printf %s "checking for objdir... " >&6; } +if test ${lt_cv_objdir+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs @@ -8529,19 +9702,18 @@ else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi -rmdir .libs 2>/dev/null +rmdir .libs 2>/dev/null ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF +printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h @@ -8562,8 +9734,8 @@ esac ofile=libtool can_build_shared=yes -# All known linkers require a '.a' archive for static linking (except MSVC, -# which needs '.lib'). +# All known linkers require a '.a' archive for static linking (except MSVC and +# ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld @@ -8587,12 +9759,13 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +printf %s "checking for ${ac_tool_prefix}file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; @@ -8635,16 +9808,17 @@ _LT_EOF IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; +esac ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8653,12 +9827,13 @@ fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +printf %s "checking for file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; @@ -8701,16 +9876,17 @@ _LT_EOF IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; +esac ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8744,7 +9920,7 @@ objext=$objext lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' +lt_simple_link_test_code='int main(void){return(0);}' @@ -8795,12 +9971,13 @@ if test yes = "$GCC"; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test ${lt_cv_prog_compiler_rtti_exceptions+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment @@ -8828,10 +10005,11 @@ else fi fi $RM conftest* - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -8884,7 +10062,7 @@ lt_prog_compiler_static= # PIC is the default for these OSes. ;; - mingw* | cygwin* | pw32* | os2* | cegcc*) + mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style @@ -8987,7 +10165,7 @@ lt_prog_compiler_static= esac ;; - mingw* | cygwin* | pw32* | os2* | cegcc*) + mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' @@ -9028,6 +10206,12 @@ lt_prog_compiler_static= lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; + *flang* | ftn | f18* | f95*) + # Flang compiler. + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) @@ -9072,7 +10256,7 @@ lt_prog_compiler_static= lt_prog_compiler_static='-qstaticlink' ;; *) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' @@ -9110,6 +10294,12 @@ lt_prog_compiler_static= lt_prog_compiler_static='-Bstatic' ;; + *-mlibc) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. @@ -9126,6 +10316,9 @@ lt_prog_compiler_static= lt_prog_compiler_static='-non_shared' ;; + serenity*) + ;; + solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' @@ -9188,27 +10381,30 @@ case $host_os in ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_prog_compiler_pic=$lt_prog_compiler_pic ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment @@ -9236,10 +10432,11 @@ else fi fi $RM conftest* - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in @@ -9267,12 +10464,13 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext @@ -9293,10 +10491,11 @@ else fi $RM -r conftest* LDFLAGS=$save_LDFLAGS - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : @@ -9310,12 +10509,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest @@ -9355,22 +10555,24 @@ else cd .. $RM -r conftest $RM conftest* - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest @@ -9410,10 +10612,11 @@ else cd .. $RM -r conftest $RM conftest* - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } @@ -9421,19 +10624,19 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -9445,8 +10648,8 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -9489,21 +10692,18 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie extract_expsyms_cmds= case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time + cygwin* | mingw* | windows* | pw32* | cegcc*) + # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. + # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) + # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; - openbsd* | bitrig*) - with_gnu_ld=no - ;; esac ld_shlibs=yes @@ -9550,7 +10750,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie whole_archive_flag_spec= fi supports_anon_versioning=no - case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... @@ -9604,7 +10804,7 @@ _LT_EOF fi ;; - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' @@ -9614,6 +10814,7 @@ _LT_EOF enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + file_list_spec='@' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' @@ -9633,7 +10834,7 @@ _LT_EOF haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - link_all_deplibs=yes + link_all_deplibs=no ;; os2*) @@ -9660,8 +10861,9 @@ _LT_EOF cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes + file_list_spec='@' ;; interix[3-9]*) @@ -9676,7 +10878,7 @@ _LT_EOF # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) @@ -9719,7 +10921,7 @@ _LT_EOF compiler_needs_object=yes ;; esac - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes @@ -9731,13 +10933,14 @@ _LT_EOF if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) @@ -9747,7 +10950,7 @@ _LT_EOF archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi @@ -9758,7 +10961,12 @@ _LT_EOF fi ;; - netbsd*) + *-mlibc) + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -9879,7 +11087,7 @@ _LT_EOF if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no @@ -10001,21 +11209,23 @@ _LT_EOF if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -10030,12 +11240,13 @@ if ac_fn_c_try_link "$LINENO"; then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi - + ;; +esac fi aix_libpath=$lt_cv_aix_libpath_ @@ -10054,21 +11265,23 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -10083,12 +11296,13 @@ if ac_fn_c_try_link "$LINENO"; then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi - + ;; +esac fi aix_libpath=$lt_cv_aix_libpath_ @@ -10144,14 +11358,14 @@ fi export_dynamic_flag_spec=-rdynamic ;; - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. + # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in - cl*) - # Native MSVC + cl* | icl*) + # Native MSVC or ICC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes @@ -10161,14 +11375,14 @@ fi # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_cmds='$CC -Fe$output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + $CC -Fe$tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' @@ -10192,7 +11406,7 @@ fi fi' ;; *) - # Assume MSVC wrapper + # Assume MSVC and ICC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. @@ -10233,8 +11447,8 @@ fi output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" - archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" - module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no @@ -10268,7 +11482,7 @@ fi ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) + freebsd* | dragonfly* | midnightbsd*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes @@ -10334,12 +11548,13 @@ fi # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +printf %s "checking if $CC understands -b... " >&6; } +if test ${lt_cv_prog_compiler__b+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext @@ -10360,10 +11575,11 @@ else fi $RM -r conftest* LDFLAGS=$save_LDFLAGS - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' @@ -10403,28 +11619,32 @@ fi # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_LDFLAGS=$LDFLAGS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if test ${lt_cv_irix_exported_symbol+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_irix_exported_symbol=yes -else - lt_cv_irix_exported_symbol=no +else case e in #( + e) lt_cv_irix_exported_symbol=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS + LDFLAGS=$save_LDFLAGS ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi @@ -10445,11 +11665,15 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' ;; esac ;; - netbsd*) + *-mlibc) + ;; + + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else @@ -10471,7 +11695,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } *nto* | *qnx*) ;; - openbsd* | bitrig*) + openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no @@ -10514,8 +11738,9 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes + file_list_spec='@' ;; osf3*) @@ -10549,6 +11774,9 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } hardcode_libdir_separator=: ;; + serenity*) + ;; + solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then @@ -10704,8 +11932,8 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -10741,18 +11969,19 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -10770,7 +11999,7 @@ else if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no @@ -10782,10 +12011,11 @@ else cat conftest.err 1>&5 fi $RM conftest* - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac @@ -10944,8 +12174,8 @@ esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in @@ -10953,7 +12183,7 @@ if test yes = "$GCC"; then *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in - mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + mingw* | windows* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` @@ -11011,7 +12241,7 @@ BEGIN {RS = " "; FS = "/|\n";} { # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + mingw* | windows* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` @@ -11085,7 +12315,7 @@ aix[4-9]*) # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl - # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # linker flag in LDFLAGS as well, or --enable-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the @@ -11179,7 +12409,7 @@ bsdi[45]*) # libtool to hard-code these into programs ;; -cygwin* | mingw* | pw32* | cegcc*) +cygwin* | mingw* | windows* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no @@ -11190,15 +12420,29 @@ cygwin* | mingw* | pw32* | cegcc*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \$file`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' + # If user builds GCC with multilib enabled, + # it should just install on $(libdir) + # not on $(libdir)/../bin or 32 bits dlls would override 64 bit ones. + if test xyes = x"$multilib"; then + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + $install_prog $dir/$dlname $destdir/$dlname~ + chmod a+x $destdir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib $destdir/$dlname'\'' || exit \$?; + fi' + else + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + fi postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' @@ -11207,30 +12451,30 @@ cygwin* | mingw* | pw32* | cegcc*) case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; - mingw* | cegcc*) + mingw* | windows* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; - *,cl*) - # Native MSVC + *,cl* | *,icl*) + # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in - mingw*) + mingw* | windows*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' @@ -11243,7 +12487,7 @@ cygwin* | mingw* | pw32* | cegcc*) done IFS=$lt_save_ifs # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form @@ -11280,7 +12524,7 @@ cygwin* | mingw* | pw32* | cegcc*) ;; *) - # Assume MSVC wrapper + # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; @@ -11313,7 +12557,7 @@ dgux*) shlibpath_var=LD_LIBRARY_PATH ;; -freebsd* | dragonfly*) +freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then @@ -11337,7 +12581,28 @@ freebsd* | dragonfly*) need_version=yes ;; esac + case $host_cpu in + powerpc64) + # On FreeBSD bi-arch platforms, a different variable is used for 32-bit + # binaries. See . + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int test_pointer_size[sizeof (void *) - 5]; + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : shlibpath_var=LD_LIBRARY_PATH +else case e in #( + e) shlibpath_var=LD_32_LIBRARY_PATH ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; + *) + shlibpath_var=LD_LIBRARY_PATH + ;; + esac case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes @@ -11367,8 +12632,9 @@ haiku*) soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes + sys_lib_search_path_spec='/boot/system/non-packaged/develop/lib /boot/system/develop/lib' + sys_lib_dlsearch_path_spec='/boot/home/config/non-packaged/lib /boot/home/config/lib /boot/system/non-packaged/lib /boot/system/lib' + hardcode_into_libs=no ;; hpux9* | hpux10* | hpux11*) @@ -11478,7 +12744,7 @@ linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no - library_names_spec='$libname$release$shared_ext' + library_names_spec='$libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH @@ -11490,8 +12756,9 @@ linux*android*) hardcode_into_libs=yes dynamic_linker='Android linker' - # Don't embed -rpath directories since the linker doesn't support them. - hardcode_libdir_flag_spec='-L$libdir' + # -rpath works at least for libraries that are not overridden by + # libraries installed in system locations. + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' ;; # This must be glibc/ELF. @@ -11506,10 +12773,11 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ @@ -11518,23 +12786,26 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : +if ac_fn_c_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : lt_cv_shlibpath_overrides_runpath=yes fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir - + ;; +esac fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath @@ -11544,7 +12815,7 @@ fi # before this can be enabled. hardcode_into_libs=yes - # Ideally, we could use ldconfig to report *all* directores which are + # Ideally, we could use ldconfig to report *all* directories which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, @@ -11564,6 +12835,18 @@ fi dynamic_linker='GNU/Linux ld.so' ;; +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + netbsd*) version_type=sunos need_lib_prefix=no @@ -11582,6 +12865,18 @@ netbsd*) hardcode_into_libs=yes ;; +*-mlibc) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='mlibc ld.so' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' @@ -11601,7 +12896,7 @@ newsos6) dynamic_linker='ldqnx.so' ;; -openbsd* | bitrig*) +openbsd*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no @@ -11661,6 +12956,17 @@ rdos*) dynamic_linker=no ;; +serenity*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + dynamic_linker='SerenityOS LibELF' + ;; + solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no @@ -11751,19 +13057,509 @@ tpf*) hardcode_into_libs=yes ;; -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' - soname_spec='$libname$release$shared_ext$major' - shlibpath_var=LD_LIBRARY_PATH +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +emscripten*) + version_type=none + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + dynamic_linker="Emscripten linker" + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + + mingw* | windows* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + *flang* | ftn | f18* | f95*) + # Flang compiler. + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | $SED 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *-mlibc) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + serenity*) + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_prog_compiler_pic=$lt_prog_compiler_pic ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi + + + +='-fPIC' + archive_cmds='$CC -sSIDE_MODULE=2 -shared $libobjs $deplibs $compiler_flags -o $lib' + archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -sSIDE_MODULE=2 -shared $libobjs $deplibs $compiler_flags -o $lib -s EXPORTED_FUNCTIONS=@$output_objdir/$soname.expsym' + archive_cmds_need_lc=no + no_undefined_flag= ;; *) dynamic_linker=no ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -11884,8 +13680,8 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || @@ -11909,8 +13705,8 @@ else # directories. hardcode_action=unsupported fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then @@ -11942,7 +13738,7 @@ else lt_cv_dlopen_self=yes ;; - mingw* | pw32* | cegcc*) + mingw* | windows* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; @@ -11954,50 +13750,59 @@ else darwin*) # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif -char dlopen (); +char dlopen (void); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no +else case e in #( + e) ac_cv_lib_dl_dlopen=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - +else case e in #( + e) lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes - + ;; +esac fi ;; @@ -12012,183 +13817,222 @@ fi *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : +if test "x$ac_cv_func_shl_load" = xyes +then : lt_cv_dlopen=shl_load -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +printf %s "checking for shl_load in -ldld... " >&6; } +if test ${ac_cv_lib_dld_shl_load+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif -char shl_load (); +char shl_load (void); int -main () +main (void) { return shl_load (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no +else case e in #( + e) ac_cv_lib_dld_shl_load=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes +then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : +else case e in #( + e) ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes +then : lt_cv_dlopen=dlopen -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif -char dlopen (); +char dlopen (void); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no +else case e in #( + e) ac_cv_lib_dl_dlopen=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +printf %s "checking for dlopen in -lsvld... " >&6; } +if test ${ac_cv_lib_svld_dlopen+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif -char dlopen (); +char dlopen (void); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no +else case e in #( + e) ac_cv_lib_svld_dlopen=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +printf %s "checking for dld_link in -ldld... " >&6; } +if test ${ac_cv_lib_dld_dld_link+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif -char dld_link (); +char dld_link (void); int -main () +main (void) { return dld_link (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no +else case e in #( + e) ac_cv_lib_dld_dld_link=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes +then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi - + ;; +esac fi ;; @@ -12211,12 +14055,13 @@ fi save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test yes = "$cross_compiling"; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +printf %s "checking whether a program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -12266,11 +14111,11 @@ else /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); +int fnord (void) __attribute__((visibility("default"))); #endif -int fnord () { return 42; } -int main () +int fnord (void) { return 42; } +int main (void) { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; @@ -12294,7 +14139,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -12310,19 +14155,21 @@ _LT_EOF fi rm -fr conftest* - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test yes = "$cross_compiling"; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +printf %s "checking whether a statically linked program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self_static+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -12372,11 +14219,11 @@ else /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); +int fnord (void) __attribute__((visibility("default"))); #endif -int fnord () { return 42; } -int main () +int fnord (void) { return 42; } +int main (void) { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; @@ -12400,7 +14247,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -12416,10 +14263,11 @@ _LT_EOF fi rm -fr conftest* - + ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS @@ -12457,32 +14305,43 @@ fi striplib= old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP"; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +printf %s "checking whether stripping libraries is possible... " >&6; } +if test -z "$STRIP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +else + if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + old_striplib="$STRIP --strip-debug" + striplib="$STRIP --strip-unneeded" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + case $host_os in + darwin*) + # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + ;; + freebsd*) + if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then + old_striplib="$STRIP --strip-debug" + striplib="$STRIP --strip-unneeded" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + ;; + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; + esac + fi fi @@ -12497,13 +14356,13 @@ fi # Report what library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +printf %s "checking if libtool supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +printf "%s\n" "$can_build_shared" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -12527,15 +14386,15 @@ $as_echo_n "checking whether to build shared libraries... " >&6; } fi ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +printf "%s\n" "$enable_shared" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +printf "%s\n" "$enable_static" >&6; } @@ -12573,21 +14432,23 @@ CC=$lt_save_CC -# Some awks crash when confronted with pnglibconf.dfa, do a test run now -# to make sure this doesn't happen -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that AWK works" >&5 -$as_echo_n "checking that AWK works... " >&6; } + + +# Some awk implementations crash when confronted with pnglibconf.dfa. +# Run a test now, to make sure this doesn't happen. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if awk ($AWK) works" >&5 +printf %s "checking if awk ($AWK) works... " >&6; } if ${AWK} -f ${srcdir}/scripts/options.awk out="/dev/null" version=search\ ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\ ${srcdir}/pngusr.dfa 1>&2 then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 1 "failed -See \`config.log' for more details" "$LINENO" 5; } + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +as_fn_error 1 "no +See 'config.log' for more details" "$LINENO" 5; } fi # This is a remnant of the old cc -E validation, where it may have been @@ -12595,18 +14456,57 @@ fi DFNCPP="$CPP" -# -Werror cannot be passed to GCC in CFLAGS because configure will fail (it -# checks the compiler with a program that generates a warning), add the -# following option to deal with this +# Check whether --enable-tests was given. +if test ${enable_tests+y} +then : + enableval=$enable_tests; enable_tests="$enableval" +else case e in #( + e) enable_tests=yes ;; +esac +fi + + + if test "$enable_tests" != "no"; then + ENABLE_TESTS_TRUE= + ENABLE_TESTS_FALSE='#' +else + ENABLE_TESTS_TRUE='#' + ENABLE_TESTS_FALSE= +fi + + +# Check whether --enable-tools was given. +if test ${enable_tools+y} +then : + enableval=$enable_tools; enable_tools="$enableval" +else case e in #( + e) enable_tools=yes ;; +esac +fi + + + if test "$enable_tools" != "no"; then + ENABLE_TOOLS_TRUE= + ENABLE_TOOLS_FALSE='#' +else + ENABLE_TOOLS_TRUE='#' + ENABLE_TOOLS_FALSE= +fi + + +# -Werror cannot be passed to GCC in CFLAGS because configure will fail +# (it checks the compiler with a program that generates a warning). +# Add the following option to deal with this: # Check whether --enable-werror was given. -if test "${enable_werror+set}" = set; then : +if test ${enable_werror+y} +then : enableval=$enable_werror; test "$enable_werror" = "yes" && enable_werror="-Werror" if test "$enable_werror" != "no"; then sav_CFLAGS="$CFLAGS" CFLAGS="$enable_werror $CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler allows $enable_werror" >&5 -$as_echo_n "checking if the compiler allows $enable_werror... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the compiler allows $enable_werror" >&5 +printf %s "checking if the compiler allows $enable_werror... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12614,26 +14514,28 @@ $as_echo_n "checking if the compiler allows $enable_werror... " >&6; } return argv[argc-1][0]; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } PNG_COPTS="$PNG_COPTS $enable_werror" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; +esac fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$sav_CFLAGS" fi fi -# For GCC 5 the default mode for C is -std=gnu11 instead of -std=gnu89 -# In pngpriv.h we request just the POSIX 1003.1 and C89 APIs by defining _POSIX_SOURCE to 1 -# This is incompatible with the new default mode, so we test for that and force the -# "-std=c89" compiler option: -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need to force back C standard to C89" >&5 -$as_echo_n "checking if we need to force back C standard to C89... " >&6; } +# For GCC 5 the default mode for C is -std=gnu11 instead of -std=gnu89. +# In pngpriv.h we request just the POSIX 1003.1 and C89 APIs by defining +# _POSIX_SOURCE to 1. This is incompatible with the new default mode, so +# we test for that and force the "-std=c89" compiler option: +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we need to force back C standard to C89" >&5 +printf %s "checking if we need to force back C standard to C89... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -12641,247 +14543,44 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -else - +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +else case e in #( + e) if test "x$GCC" != "xyes"; then as_fn_error $? "Forcing back to C89 is required but the flags are only known for GCC" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$CFLAGS -std=c89" - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -# Checks for header files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - - -# Checks for typedefs, structures, and compiler characteristics. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if ${ac_cv_c_const+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - -#ifndef __cplusplus - /* Ultrix mips cc rejects this sort of thing. */ - typedef int charset[2]; - const charset cs = { 0, 0 }; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this sort of thing. */ - char tx; - char *t = &tx; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; } bx; - struct s *b = &bx; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_const=yes -else - ac_cv_c_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -$as_echo "#define const /**/" >>confdefs.h - -fi - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - + ;; +esac fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 -$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } -if ${ac_cv_struct_tm+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +# Checks for structures and compiler characteristics. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 +printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; } +if test ${ac_cv_struct_tm+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int -main () +main (void) { struct tm tm; int *p = &tm.tm_sec; @@ -12890,263 +14589,155 @@ struct tm tm; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_struct_tm=time.h -else - ac_cv_struct_tm=sys/time.h -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 -$as_echo "$ac_cv_struct_tm" >&6; } -if test $ac_cv_struct_tm = sys/time.h; then - -$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 -$as_echo_n "checking for C/C++ restrict keyword... " >&6; } -if ${ac_cv_c_restrict+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_restrict=no - # The order here caters to the fact that C++ does not require restrict. - for ac_kw in __restrict __restrict__ _Restrict restrict; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -typedef int * int_ptr; - int foo (int_ptr $ac_kw ip) { - return ip[0]; - } -int -main () -{ -int s[1]; - int * $ac_kw t = s; - t[0] = 0; - return foo(t) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_restrict=$ac_kw -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - test "$ac_cv_c_restrict" != no && break - done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 -$as_echo "$ac_cv_c_restrict" >&6; } - - case $ac_cv_c_restrict in - restrict) ;; - no) $as_echo "#define restrict /**/" >>confdefs.h - ;; - *) cat >>confdefs.h <<_ACEOF -#define restrict $ac_cv_c_restrict -_ACEOF - ;; - esac - - -# Checks for library functions. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5 -$as_echo_n "checking for working strtod... " >&6; } -if ${ac_cv_func_strtod+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_strtod=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -$ac_includes_default -#ifndef strtod -double strtod (); -#endif -int -main() -{ - { - /* Some versions of Linux strtod mis-parse strings with leading '+'. */ - char *string = " +69"; - char *term; - double value; - value = strtod (string, &term); - if (value != 69 || term != (string + 4)) - return 1; - } - - { - /* Under Solaris 2.4, strtod returns the wrong value for the - terminating character under some conditions. */ - char *string = "NaN"; - char *term; - strtod (string, &term); - if (term != string && *(term - 1) == 0) - return 1; - } - return 0; -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_strtod=yes -else - ac_cv_func_strtod=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - +else case e in #( + e) ac_cv_struct_tm=sys/time.h ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5 -$as_echo "$ac_cv_func_strtod" >&6; } -if test $ac_cv_func_strtod = no; then - case " $LIBOBJS " in - *" strtod.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS strtod.$ac_objext" - ;; +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 +printf "%s\n" "$ac_cv_struct_tm" >&6; } +if test $ac_cv_struct_tm = sys/time.h; then -ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow" -if test "x$ac_cv_func_pow" = xyes; then : +printf "%s\n" "#define TM_IN_SYS_TIME 1" >>confdefs.h fi -if test $ac_cv_func_pow = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 -$as_echo_n "checking for pow in -lm... " >&6; } -if ${ac_cv_lib_m_pow+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 +printf %s "checking for C/C++ restrict keyword... " >&6; } +if test ${ac_cv_c_restrict+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_cv_c_restrict=no + # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see: + # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html + # Put 'restrict' last, because C++ lacks it. + for ac_kw in __restrict__ __restrict _Restrict restrict; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +typedef int *int_ptr; + int foo (int_ptr $ac_kw ip) { return ip[0]; } + int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ + int bar (int ip[$ac_kw]) { return ip[0]; } -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pow (); int -main () +main (void) { -return pow (); +int s[1]; + int *$ac_kw t = s; + t[0] = 0; + return foo (t) + bar (t); + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_m_pow=yes -else - ac_cv_lib_m_pow=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 -$as_echo "$ac_cv_lib_m_pow" >&6; } -if test "x$ac_cv_lib_m_pow" = xyes; then : - POW_LIB=-lm -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5 -$as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;} +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_c_restrict=$ac_kw fi - +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + test "$ac_cv_c_restrict" != no && break + done + ;; +esac fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 +printf "%s\n" "$ac_cv_c_restrict" >&6; } -fi + case $ac_cv_c_restrict in + restrict) ;; + no) printf "%s\n" "#define restrict /**/" >>confdefs.h + ;; + *) printf "%s\n" "#define restrict $ac_cv_c_restrict" >>confdefs.h + ;; + esac -for ac_func in memset -do : - ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset" -if test "x$ac_cv_func_memset" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MEMSET 1 -_ACEOF -else - as_fn_error $? "memset not found in libc" "$LINENO" 5 -fi -done +# Checks for library functions. -for ac_func in pow + for ac_func in pow do : ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow" -if test "x$ac_cv_func_pow" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_POW 1 -_ACEOF - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 -$as_echo_n "checking for pow in -lm... " >&6; } -if ${ac_cv_lib_m_pow+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS +if test "x$ac_cv_func_pow" = xyes +then : + printf "%s\n" "#define HAVE_POW 1" >>confdefs.h + +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 +printf %s "checking for pow in -lm... " >&6; } +if test ${ac_cv_lib_m_pow+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif -char pow (); +char pow (void); int -main () +main (void) { return pow (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_m_pow=yes -else - ac_cv_lib_m_pow=no +else case e in #( + e) ac_cv_lib_m_pow=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 -$as_echo "$ac_cv_lib_m_pow" >&6; } -if test "x$ac_cv_lib_m_pow" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBM 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 +printf "%s\n" "$ac_cv_lib_m_pow" >&6; } +if test "x$ac_cv_lib_m_pow" = xyes +then : + printf "%s\n" "#define HAVE_LIBM 1" >>confdefs.h LIBS="-lm $LIBS" -else - as_fn_error $? "cannot find pow" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "cannot find pow" "$LINENO" 5 ;; +esac fi - + ;; +esac fi -done +done -# Some later POSIX 1003.1 functions are required for test programs, failure here -# is soft (the corresponding test program is not built). +# Some later POSIX 1003.1 functions are required for test programs, failure +# here is soft (the corresponding test program is not built). ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" -if test "x$ac_cv_func_clock_gettime" = xyes; then : +if test "x$ac_cv_func_clock_gettime" = xyes +then : -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: not building timepng" >&5 -$as_echo "$as_me: WARNING: not building timepng" >&2;} +else case e in #( + e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: not building timepng" >&5 +printf "%s\n" "$as_me: WARNING: not building timepng" >&2;} ;; +esac fi if test "$ac_cv_func_clock_gettime" = "yes"; then @@ -13160,179 +14751,197 @@ fi # Check whether --with-zlib-prefix was given. -if test "${with_zlib_prefix+set}" = set; then : +if test ${with_zlib_prefix+y} +then : withval=$with_zlib_prefix; ZPREFIX=${withval} -else - ZPREFIX='z_' +else case e in #( + e) ZPREFIX='z_' ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for zlibVersion in -lz" >&5 -$as_echo_n "checking for zlibVersion in -lz... " >&6; } -if ${ac_cv_lib_z_zlibVersion+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zlibVersion in -lz" >&5 +printf %s "checking for zlibVersion in -lz... " >&6; } +if test ${ac_cv_lib_z_zlibVersion+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif -char zlibVersion (); +char zlibVersion (void); int -main () +main (void) { return zlibVersion (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_z_zlibVersion=yes -else - ac_cv_lib_z_zlibVersion=no +else case e in #( + e) ac_cv_lib_z_zlibVersion=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_zlibVersion" >&5 -$as_echo "$ac_cv_lib_z_zlibVersion" >&6; } -if test "x$ac_cv_lib_z_zlibVersion" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBZ 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_zlibVersion" >&5 +printf "%s\n" "$ac_cv_lib_z_zlibVersion" >&6; } +if test "x$ac_cv_lib_z_zlibVersion" = xyes +then : + printf "%s\n" "#define HAVE_LIBZ 1" >>confdefs.h LIBS="-lz $LIBS" -else - as_ac_Lib=`$as_echo "ac_cv_lib_z_${ZPREFIX}zlibVersion" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ZPREFIX}zlibVersion in -lz" >&5 -$as_echo_n "checking for ${ZPREFIX}zlibVersion in -lz... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS +else case e in #( + e) as_ac_Lib=`printf "%s\n" "ac_cv_lib_z_${ZPREFIX}zlibVersion" | sed "$as_sed_sh"` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ZPREFIX}zlibVersion in -lz" >&5 +printf %s "checking for ${ZPREFIX}zlibVersion in -lz... " >&6; } +if eval test \${$as_ac_Lib+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif -char ${ZPREFIX}zlibVersion (); +char ${ZPREFIX}zlibVersion (void); int -main () +main (void) { return ${ZPREFIX}zlibVersion (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" +else case e in #( + e) eval "$as_ac_Lib=no" ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBZ 1 -_ACEOF + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes" +then : + printf "%s\n" "#define HAVE_LIBZ 1" >>confdefs.h LIBS="-lz $LIBS" -else - as_fn_error $? "zlib not installed" "$LINENO" 5 +else case e in #( + e) as_fn_error $? "zlib not installed" "$LINENO" 5 ;; +esac fi - + ;; +esac fi # The following is for pngvalid, to ensure it catches FP errors even on # platforms that don't enable FP exceptions, the function appears in the math # library (typically), it's not an error if it is not found. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for feenableexcept in -lm" >&5 -$as_echo_n "checking for feenableexcept in -lm... " >&6; } -if ${ac_cv_lib_m_feenableexcept+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for feenableexcept in -lm" >&5 +printf %s "checking for feenableexcept in -lm... " >&6; } +if test ${ac_cv_lib_m_feenableexcept+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ + builtin and then its argument prototype would still apply. + The 'extern "C"' is for builds by C++ compilers; + although this is not generally supported in C code supporting it here + has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif -char feenableexcept (); +char feenableexcept (void); int -main () +main (void) { return feenableexcept (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_m_feenableexcept=yes -else - ac_cv_lib_m_feenableexcept=no +else case e in #( + e) ac_cv_lib_m_feenableexcept=no ;; +esac fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +LIBS=$ac_check_lib_save_LIBS ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_feenableexcept" >&5 -$as_echo "$ac_cv_lib_m_feenableexcept" >&6; } -if test "x$ac_cv_lib_m_feenableexcept" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBM 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_feenableexcept" >&5 +printf "%s\n" "$ac_cv_lib_m_feenableexcept" >&6; } +if test "x$ac_cv_lib_m_feenableexcept" = xyes +then : + printf "%s\n" "#define HAVE_LIBM 1" >>confdefs.h LIBS="-lm $LIBS" fi -for ac_func in feenableexcept -do : - ac_fn_c_check_func "$LINENO" "feenableexcept" "ac_cv_func_feenableexcept" -if test "x$ac_cv_func_feenableexcept" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_FEENABLEEXCEPT 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "feenableexcept" "ac_cv_func_feenableexcept" +if test "x$ac_cv_func_feenableexcept" = xyes +then : + printf "%s\n" "#define HAVE_FEENABLEEXCEPT 1" >>confdefs.h fi -done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if using Solaris linker" >&5 -$as_echo_n "checking if using Solaris linker... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if using Solaris linker" >&5 +printf %s "checking if using Solaris linker... " >&6; } SLD=`$LD --version 2>&1 | grep Solaris` if test "$SLD"; then have_solaris_ld=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else have_solaris_ld=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "$have_solaris_ld" = "yes"; then HAVE_SOLARIS_LD_TRUE= @@ -13343,16 +14952,16 @@ else fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if libraries can be versioned" >&5 -$as_echo_n "checking if libraries can be versioned... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libraries can be versioned" >&5 +printf %s "checking if libraries can be versioned... " >&6; } # Special case for PE/COFF platforms: ld reports # support for version-script, but doesn't actually # DO anything with it. case $host in *cygwin* | *mingw32* | *interix* ) have_ld_version_script=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; * ) @@ -13364,14 +14973,14 @@ fi if test "$GLD"; then have_ld_version_script=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else have_ld_version_script=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** You have not enabled versioned symbols." >&5 -$as_echo "$as_me: WARNING: *** You have not enabled versioned symbols." >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: *** You have not enabled versioned symbols." >&5 +printf "%s\n" "$as_me: WARNING: *** You have not enabled versioned symbols." >&2;} fi ;; esac @@ -13386,15 +14995,15 @@ fi if test "$have_ld_version_script" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for symbol prefix" >&5 -$as_echo_n "checking for symbol prefix... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for symbol prefix" >&5 +printf %s "checking for symbol prefix... " >&6; } SYMBOL_PREFIX=`echo "PREFIX=__USER_LABEL_PREFIX__" \ - | ${CPP-${CC-gcc} -E} - 2>&1 \ - | ${EGREP-grep} "^PREFIX=" \ - | ${SED-sed} -e "s:^PREFIX=::" -e "s:__USER_LABEL_PREFIX__::"` + | ${CPP:-${CC:-gcc} -E} - 2>&1 \ + | ${EGREP:-grep} "^PREFIX=" \ + | ${SED:-sed} -e "s:^PREFIX=::" -e "s:__USER_LABEL_PREFIX__::"` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SYMBOL_PREFIX" >&5 -$as_echo "$SYMBOL_PREFIX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SYMBOL_PREFIX" >&5 +printf "%s\n" "$SYMBOL_PREFIX" >&6; } fi # Substitutions for .in files @@ -13407,30 +15016,34 @@ fi # Allow the pkg-config directory to be set # Check whether --with-pkgconfigdir was given. -if test "${with_pkgconfigdir+set}" = set; then : +if test ${with_pkgconfigdir+y} +then : withval=$with_pkgconfigdir; pkgconfigdir=${withval} -else - pkgconfigdir='${libdir}/pkgconfig' +else case e in #( + e) pkgconfigdir='${libdir}/pkgconfig' ;; +esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: pkgconfig directory is ${pkgconfigdir}" >&5 -$as_echo "$as_me: pkgconfig directory is ${pkgconfigdir}" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: pkgconfig directory is ${pkgconfigdir}" >&5 +printf "%s\n" "$as_me: pkgconfig directory is ${pkgconfigdir}" >&6;} # Make the *-config binary config scripts optional # Check whether --with-binconfigs was given. -if test "${with_binconfigs+set}" = set; then : +if test ${with_binconfigs+y} +then : withval=$with_binconfigs; if test "${withval}" = no; then binconfigs= - { $as_echo "$as_me:${as_lineno-$LINENO}: libpng-config scripts will not be built" >&5 -$as_echo "$as_me: libpng-config scripts will not be built" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libpng-config scripts will not be built" >&5 +printf "%s\n" "$as_me: libpng-config scripts will not be built" >&6;} else binconfigs='${binconfigs}' fi -else - binconfigs='${binconfigs}' +else case e in #( + e) binconfigs='${binconfigs}' ;; +esac fi @@ -13439,7 +15052,8 @@ fi # at the start of the build to rename exported library functions # Check whether --with-libpng-prefix was given. -if test "${with_libpng_prefix+set}" = set; then : +if test ${with_libpng_prefix+y} +then : withval=$with_libpng_prefix; if test "${withval:-no}" != "no"; then PNG_PREFIX=${withval} @@ -13459,7 +15073,8 @@ fi # always installed, when the following options are turned on corresponding # unversioned links are also created (normally as symbolic links): # Check whether --enable-unversioned-links was given. -if test "${enable_unversioned_links+set}" = set; then : +if test ${enable_unversioned_links+y} +then : enableval=$enable_unversioned_links; fi @@ -13476,7 +15091,8 @@ fi # Check whether --enable-unversioned-libpng-pc was given. -if test "${enable_unversioned_libpng_pc+set}" = set; then : +if test ${enable_unversioned_libpng_pc+y} +then : enableval=$enable_unversioned_libpng_pc; fi @@ -13490,7 +15106,8 @@ fi # Check whether --enable-unversioned-libpng-config was given. -if test "${enable_unversioned_libpng_config+set}" = set; then : +if test ${enable_unversioned_libpng_config+y} +then : enableval=$enable_unversioned_libpng_config; fi @@ -13503,32 +15120,41 @@ else fi -# HOST SPECIFIC OPTIONS +# HOST-SPECIFIC OPTIONS # ===================== # # DEFAULT # ======= # # Check whether --enable-hardware-optimizations was given. -if test "${enable_hardware_optimizations+set}" = set; then : +if test ${enable_hardware_optimizations+y} +then : enableval=$enable_hardware_optimizations; case "$enableval" in no|off) # disable hardware optimization on all systems: enable_arm_neon=no -$as_echo "#define PNG_ARM_NEON_OPT 0" >>confdefs.h +printf "%s\n" "#define PNG_ARM_NEON_OPT 0" >>confdefs.h enable_mips_msa=no -$as_echo "#define PNG_MIPS_MSA_OPT 0" >>confdefs.h +printf "%s\n" "#define PNG_MIPS_MSA_OPT 0" >>confdefs.h + + enable_mips_mmi=no + +printf "%s\n" "#define PNG_MIPS_MMI_OPT 0" >>confdefs.h enable_powerpc_vsx=no -$as_echo "#define PNG_POWERPC_VSX_OPT 0" >>confdefs.h +printf "%s\n" "#define PNG_POWERPC_VSX_OPT 0" >>confdefs.h enable_intel_sse=no -$as_echo "#define PNG_INTEL_SSE_OPT 0" >>confdefs.h +printf "%s\n" "#define PNG_INTEL_SSE_OPT 0" >>confdefs.h + + enable_loongarch_lsx=no + +printf "%s\n" "#define PNG_LOONGARCH_LSX_OPT 0" >>confdefs.h ;; *) @@ -13537,25 +15163,35 @@ $as_echo "#define PNG_INTEL_SSE_OPT 0" >>confdefs.h arm*|aarch64*) enable_arm_neon=yes -$as_echo "#define PNG_ARM_NEON_OPT 0" >>confdefs.h +printf "%s\n" "#define PNG_ARM_NEON_OPT 2" >>confdefs.h ;; mipsel*|mips64el*) + enable_mips_mmi=yes enable_mips_msa=yes -$as_echo "#define PNG_MIPS_MSA_OPT 0" >>confdefs.h +printf "%s\n" "#define PNG_MIPS_MMI_OPT 1" >>confdefs.h + + +printf "%s\n" "#define PNG_MIPS_MSA_OPT 2" >>confdefs.h ;; i?86|x86_64) enable_intel_sse=yes -$as_echo "#define PNG_INTEL_SSE_OPT 1" >>confdefs.h +printf "%s\n" "#define PNG_INTEL_SSE_OPT 1" >>confdefs.h ;; powerpc*|ppc64*) enable_powerpc_vsx=yes -$as_echo "#define PNG_POWERPC_VSX_OPT 2" >>confdefs.h +printf "%s\n" "#define PNG_POWERPC_VSX_OPT 2" >>confdefs.h + + ;; + loongarch*) + enable_loongarch_lsx=yes + +printf "%s\n" "#define PNG_LOONGARCH_LSX_OPT 1" >>confdefs.h ;; esac @@ -13564,53 +15200,53 @@ $as_echo "#define PNG_POWERPC_VSX_OPT 2" >>confdefs.h fi -# ARM -# === -# -# ARM NEON (SIMD) support. +# ARM NEON +# ======== # Check whether --enable-arm-neon was given. -if test "${enable_arm_neon+set}" = set; then : +if test ${enable_arm_neon+y} +then : enableval=$enable_arm_neon; case "$enableval" in no|off) # disable the default enabling on __ARM_NEON__ systems: -$as_echo "#define PNG_ARM_NEON_OPT 0" >>confdefs.h +printf "%s\n" "#define PNG_ARM_NEON_OPT 0" >>confdefs.h # Prevent inclusion of the assembler files below: - enable_arm_neon=no;; + enable_arm_neon=no ;; check) -$as_echo "#define PNG_ARM_NEON_CHECK_SUPPORTED /**/" >>confdefs.h +printf "%s\n" "#define PNG_ARM_NEON_CHECK_SUPPORTED /**/" >>confdefs.h ;; api) -$as_echo "#define PNG_ARM_NEON_API_SUPPORTED /**/" >>confdefs.h +printf "%s\n" "#define PNG_ARM_NEON_API_SUPPORTED /**/" >>confdefs.h ;; yes|on) -$as_echo "#define PNG_ARM_NEON_OPT 2" >>confdefs.h +printf "%s\n" "#define PNG_ARM_NEON_OPT 2" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-arm-neon: please specify 'check' or 'api', if - you want the optimizations unconditionally pass -mfpu=neon - to the compiler." >&5 -$as_echo "$as_me: WARNING: --enable-arm-neon: please specify 'check' or 'api', if - you want the optimizations unconditionally pass -mfpu=neon - to the compiler." >&2;};; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: --enable-arm-neon: please specify 'check' or 'api'; + if you want the optimizations unconditionally, + pass '-mfpu=neon' to the compiler." >&5 +printf "%s\n" "$as_me: WARNING: --enable-arm-neon: please specify 'check' or 'api'; + if you want the optimizations unconditionally, + pass '-mfpu=neon' to the compiler." >&2;};; *) - as_fn_error $? "--enable-arm-neon=${enable_arm_neon}: invalid value" "$LINENO" 5 + as_fn_error $? "--enable-arm-neon=${enable_arm_neon}: + invalid argument" "$LINENO" 5 esac fi -# Add ARM specific files to all builds where the host_cpu is arm ('arm*') or -# where ARM optimizations were explicitly requested (this allows a fallback if a -# future host CPU does not match 'arm*') +# Add ARM-specific files to all builds where $host_cpu is arm ('arm*') or +# where ARM optimizations were explicitly requested. (This allows a fallback +# if a future host CPU does not match 'arm*'.) if test "$enable_arm_neon" != 'no' && case "$host_cpu" in - arm*|aarch64*) :;; - *) test "$enable_arm_neon" != '';; + arm*|aarch64*) : ;; + *) test "$enable_arm_neon" != '' ;; esac; then PNG_ARM_NEON_TRUE= PNG_ARM_NEON_FALSE='#' @@ -13620,52 +15256,52 @@ else fi -# MIPS -# === -# -# MIPS MSA (SIMD) support. +# MIPS MSA +# ======== # Check whether --enable-mips-msa was given. -if test "${enable_mips_msa+set}" = set; then : +if test ${enable_mips_msa+y} +then : enableval=$enable_mips_msa; case "$enableval" in no|off) # disable the default enabling on __mips_msa systems: -$as_echo "#define PNG_MIPS_MSA_OPT 0" >>confdefs.h +printf "%s\n" "#define PNG_MIPS_MSA_OPT 0" >>confdefs.h # Prevent inclusion of the assembler files below: - enable_mips_msa=no;; + enable_mips_msa=no ;; check) -$as_echo "#define PNG_MIPS_MSA_CHECK_SUPPORTED /**/" >>confdefs.h +printf "%s\n" "#define PNG_MIPS_MSA_CHECK_SUPPORTED /**/" >>confdefs.h ;; api) -$as_echo "#define PNG_MIPS_MSA_API_SUPPORTED /**/" >>confdefs.h +printf "%s\n" "#define PNG_MIPS_MSA_API_SUPPORTED /**/" >>confdefs.h ;; yes|on) -$as_echo "#define PNG_MIPS_MSA_OPT 2" >>confdefs.h +printf "%s\n" "#define PNG_MIPS_MSA_OPT 2" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-mips-msa: please specify 'check' or 'api', if - you want the optimizations unconditionally pass '-mmsa -mfp64' - to the compiler." >&5 -$as_echo "$as_me: WARNING: --enable-mips-msa: please specify 'check' or 'api', if - you want the optimizations unconditionally pass '-mmsa -mfp64' - to the compiler." >&2;};; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: --enable-mips-msa: please specify 'check' or 'api'; + if you want the optimizations unconditionally, + pass '-mmsa -mfp64' to the compiler." >&5 +printf "%s\n" "$as_me: WARNING: --enable-mips-msa: please specify 'check' or 'api'; + if you want the optimizations unconditionally, + pass '-mmsa -mfp64' to the compiler." >&2;};; *) - as_fn_error $? "--enable-mips-msa=${enable_mips_msa}: invalid value" "$LINENO" 5 + as_fn_error $? "--enable-mips-msa=${enable_mips_msa}: + invalid argument" "$LINENO" 5 esac fi -# Add MIPS specific files to all builds where the host_cpu is mips ('mips*') or -# where MIPS optimizations were explicitly requested (this allows a fallback if a -# future host CPU does not match 'mips*') +# Add MIPS-specific files to all builds where $host_cpu is mips ('mips*') or +# where MIPS optimizations were explicitly requested. (This allows a fallback +# if a future host CPU does not match 'mips*'.) if test "$enable_mips_msa" != 'no' && case "$host_cpu" in - mipsel*|mips64el*) :;; + mipsel*|mips64el*) : ;; esac; then PNG_MIPS_MSA_TRUE= PNG_MIPS_MSA_FALSE='#' @@ -13675,38 +15311,93 @@ else fi -# INTEL -# ===== -# -# INTEL SSE (SIMD) support. +# MIPS MMI +# ======== + +# Check whether --enable-mips-mmi was given. +if test ${enable_mips_mmi+y} +then : + enableval=$enable_mips_mmi; case "$enableval" in + no|off) + # disable the default enabling on __mips_mmi systems: + +printf "%s\n" "#define PNG_MIPS_MMI_OPT 0" >>confdefs.h + + # Prevent inclusion of the assembler files below: + enable_mips_mmi=no;; + check) + +printf "%s\n" "#define PNG_MIPS_MMI_CHECK_SUPPORTED /**/" >>confdefs.h +;; + api) + +printf "%s\n" "#define PNG_MIPS_MMI_API_SUPPORTED /**/" >>confdefs.h +;; + yes|on) + +printf "%s\n" "#define PNG_MIPS_MMI_OPT 1" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: --enable-mips-mmi: please specify 'check' or 'api'; + if you want the optimizations unconditionally + pass '-mloongson-mmi -march=loongson3a' to the compiler." >&5 +printf "%s\n" "$as_me: WARNING: --enable-mips-mmi: please specify 'check' or 'api'; + if you want the optimizations unconditionally + pass '-mloongson-mmi -march=loongson3a' to the compiler." >&2;};; + *) + as_fn_error $? "--enable-mips-mmi=${enable_mips_mmi}: + invalid argument" "$LINENO" 5 + esac +fi + + +# Add MIPS specific files to all builds where the host_cpu is mips ('mips*') or +# where MIPS optimizations were explicitly requested. (This allows a fallback +# if a future host CPU does not match 'mips*'.) + + if test "$enable_mips_mmi" != 'no' && + case "$host_cpu" in + mipsel*|mips64el*) : ;; + esac; then + PNG_MIPS_MMI_TRUE= + PNG_MIPS_MMI_FALSE='#' +else + PNG_MIPS_MMI_TRUE='#' + PNG_MIPS_MMI_FALSE= +fi + + +# INTEL SSE +# ========= # Check whether --enable-intel-sse was given. -if test "${enable_intel_sse+set}" = set; then : +if test ${enable_intel_sse+y} +then : enableval=$enable_intel_sse; case "$enableval" in no|off) # disable the default enabling: -$as_echo "#define PNG_INTEL_SSE_OPT 0" >>confdefs.h +printf "%s\n" "#define PNG_INTEL_SSE_OPT 0" >>confdefs.h # Prevent inclusion of the assembler files below: - enable_intel_sse=no;; + enable_intel_sse=no ;; yes|on) -$as_echo "#define PNG_INTEL_SSE_OPT 1" >>confdefs.h +printf "%s\n" "#define PNG_INTEL_SSE_OPT 1" >>confdefs.h ;; *) - as_fn_error $? "--enable-intel-sse=${enable_intel_sse}: invalid value" "$LINENO" 5 + as_fn_error $? "--enable-intel-sse=${enable_intel_sse}: + invalid argument" "$LINENO" 5 esac fi -# Add Intel specific files to all builds where the host_cpu is Intel ('x86*') -# or where Intel optimizations were explicitly requested (this allows a -# fallback if a future host CPU does not match 'x86*') +# Add Intel-specific files to all builds where $host_cpu is Intel ('x86*') or +# where Intel optimizations were explicitly requested. (This allows a fallback +# if a future host CPU does not match 'x86*'.) if test "$enable_intel_sse" != 'no' && case "$host_cpu" in - i?86|x86_64) :;; - *) test "$enable_intel_sse" != '';; + i?86|x86_64) : ;; + *) test "$enable_intel_sse" != '' ;; esac; then PNG_INTEL_SSE_TRUE= PNG_INTEL_SSE_FALSE='#' @@ -13716,56 +15407,56 @@ else fi -# PowerPC -# === -# -# PowerPC VSX (SIMD) support. +# POWERPC VSX +# =========== # Check whether --enable-powerpc-vsx was given. -if test "${enable_powerpc_vsx+set}" = set; then : +if test ${enable_powerpc_vsx+y} +then : enableval=$enable_powerpc_vsx; case "$enableval" in no|off) # disable the default enabling on __ppc64__ systems: -$as_echo "#define PNG_POWERPC_VSX_OPT 0" >>confdefs.h +printf "%s\n" "#define PNG_POWERPC_VSX_OPT 0" >>confdefs.h - # Prevent inclusion of the platform specific files below: - enable_powerpc_vsx=no;; + # Prevent inclusion of the platform-specific files below: + enable_powerpc_vsx=no ;; check) -$as_echo "#define PNG_POWERPC_VSX_CHECK_SUPPORTED /**/" >>confdefs.h +printf "%s\n" "#define PNG_POWERPC_VSX_CHECK_SUPPORTED /**/" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-powerpc-vsx Please check contrib/powerpc/README file - for the list of supported OSes." >&5 -$as_echo "$as_me: WARNING: --enable-powerpc-vsx Please check contrib/powerpc/README file - for the list of supported OSes." >&2;};; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: --enable-powerpc-vsx: please see contrib/powerpc/README + for the list of supported systems." >&5 +printf "%s\n" "$as_me: WARNING: --enable-powerpc-vsx: please see contrib/powerpc/README + for the list of supported systems." >&2;};; api) -$as_echo "#define PNG_POWERPC_VSX_API_SUPPORTED /**/" >>confdefs.h +printf "%s\n" "#define PNG_POWERPC_VSX_API_SUPPORTED /**/" >>confdefs.h ;; yes|on) -$as_echo "#define PNG_POWERPC_VSX_OPT 2" >>confdefs.h +printf "%s\n" "#define PNG_POWERPC_VSX_OPT 2" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-powerpc-vsx: please specify 'check' or 'api', if - you want the optimizations unconditionally pass '-maltivec -mvsx' - or '-mcpu=power8'to the compiler." >&5 -$as_echo "$as_me: WARNING: --enable-powerpc-vsx: please specify 'check' or 'api', if - you want the optimizations unconditionally pass '-maltivec -mvsx' - or '-mcpu=power8'to the compiler." >&2;};; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: --enable-powerpc-vsx: please specify 'check' or 'api'; + if you want the optimizations unconditionally, + pass '-maltivec -mvsx' or '-mcpu=power8' to the compiler." >&5 +printf "%s\n" "$as_me: WARNING: --enable-powerpc-vsx: please specify 'check' or 'api'; + if you want the optimizations unconditionally, + pass '-maltivec -mvsx' or '-mcpu=power8' to the compiler." >&2;};; *) - as_fn_error $? "--enable-powerpc-vsx=${enable_powerpc_vsx}: invalid value" "$LINENO" 5 + as_fn_error $? "--enable-powerpc-vsx=${enable_powerpc_vsx}: + invalid argument" "$LINENO" 5 esac fi -# Add PowerPC specific files to all builds where the host_cpu is powerpc('powerpc*') or -# where POWERPC optimizations were explicitly requested (this allows a fallback if a -# future host CPU does not match 'powerpc*') +# Add PowerPC-specific files to all builds where $host_cpu is powerpc +# ('powerpc*') or where PowerPC optimizations were explicitly requested. +# (This allows a fallback if a future host CPU does not match 'powerpc*'.) if test "$enable_powerpc_vsx" != 'no' && case "$host_cpu" in - powerpc*|ppc64*) :;; + powerpc*|ppc64*) : ;; esac; then PNG_POWERPC_VSX_TRUE= PNG_POWERPC_VSX_FALSE='#' @@ -13775,9 +15466,92 @@ else fi +# LOONGARCH LSX +# ============= + +# Check whether --enable-loongarch-lsx was given. +if test ${enable_loongarch_lsx+y} +then : + enableval=$enable_loongarch_lsx; case "$enableval" in + no|off) + # disable the default enabling on __loongarch_simd systems: + +printf "%s\n" "#define PNG_LOONGARCH_LSX_OPT 0" >>confdefs.h + + # Prevent inclusion of the assembler files below: + enable_loongarch_lsx=no;; + yes|on) + +printf "%s\n" "#define PNG_LOONGARCH_LSX_OPT 1" >>confdefs.h + + ;; + *) + as_fn_error $? "--enable-loongarch-lsx=${enable_loongarch_lsx}: + invalid argument" "$LINENO" 5 + esac +fi + + +if test "$enable_loongarch_lsx" != "no" && + case "$host_cpu" in + loongarch*) : ;; + *) test "$enable_loongarch_lsx" != '' ;; + esac +then + compiler_support_loongarch_lsx=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use LoongArch LSX intrinsics" >&5 +printf %s "checking whether to use LoongArch LSX intrinsics... " >&6; } + save_CFLAGS="$CFLAGS" + LSX_CFLAGS="${LSX_CFLAGS:-"-mlsx"}" + CFLAGS="$CFLAGS $LSX_CFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +int main(){ + __m128i a, b, c; + a = __lsx_vadd_w(b, c); + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + compiler_support_loongarch_lsx=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CFLAGS="$save_CFLAGS" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $compiler_support_loongarch_lsx" >&5 +printf "%s\n" "$compiler_support_loongarch_lsx" >&6; } + if test "$compiler_support_loongarch_lsx" = "yes"; then + +printf "%s\n" "#define PNG_LOONGARCH_LSX_OPT 1" >>confdefs.h + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Compiler does not support loongarch LSX." >&5 +printf "%s\n" "$as_me: WARNING: Compiler does not support loongarch LSX." >&2;} + fi +fi + +# Add LoongArch specific files to all builds where the host_cpu is loongarch +# ('loongarch*') or where LoongArch optimizations were explicitly requested. +# (This allows a fallback if a future host CPU does not match 'loongarch*'.) + + if test "$enable_loongarch_lsx" != "no" && + test "$compiler_support_loongarch_lsx" = "yes" && + case "$host_cpu" in + loongarch*) : ;; + *) test "$enable_loongarch_lsx" != '' ;; + esac; then + PNG_LOONGARCH_LSX_TRUE= + PNG_LOONGARCH_LSX_FALSE='#' +else + PNG_LOONGARCH_LSX_TRUE='#' + PNG_LOONGARCH_LSX_FALSE= +fi + -{ $as_echo "$as_me:${as_lineno-$LINENO}: Extra options for compiler: $PNG_COPTS" >&5 -$as_echo "$as_me: Extra options for compiler: $PNG_COPTS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Extra options for compiler: $PNG_COPTS" >&5 +printf "%s\n" "$as_me: Extra options for compiler: $PNG_COPTS" >&6;} # Config files, substituting as above ac_config_files="$ac_config_files Makefile libpng.pc:libpng.pc.in" @@ -13795,8 +15569,8 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the +# 'ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF @@ -13812,8 +15586,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -13826,14 +15600,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote + # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) - # `set' quotes correctly as required by POSIX, so do not add quotes. + # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | @@ -13843,15 +15617,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -13865,8 +15639,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;} fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -13883,7 +15657,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -13894,14 +15668,26 @@ LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 +printf "%s\n" "done" >&6; } +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; +esac +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi + if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' @@ -13926,6 +15712,14 @@ if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${ENABLE_TESTS_TRUE}" && test -z "${ENABLE_TESTS_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_TESTS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_TOOLS_TRUE}" && test -z "${ENABLE_TOOLS_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_TOOLS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_CLOCK_GETTIME_TRUE}" && test -z "${HAVE_CLOCK_GETTIME_FALSE}"; then as_fn_error $? "conditional \"HAVE_CLOCK_GETTIME\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -13962,6 +15756,10 @@ if test -z "${PNG_MIPS_MSA_TRUE}" && test -z "${PNG_MIPS_MSA_FALSE}"; then as_fn_error $? "conditional \"PNG_MIPS_MSA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${PNG_MIPS_MMI_TRUE}" && test -z "${PNG_MIPS_MMI_FALSE}"; then + as_fn_error $? "conditional \"PNG_MIPS_MMI\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${PNG_INTEL_SSE_TRUE}" && test -z "${PNG_INTEL_SSE_FALSE}"; then as_fn_error $? "conditional \"PNG_INTEL_SSE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -13970,13 +15768,17 @@ if test -z "${PNG_POWERPC_VSX_TRUE}" && test -z "${PNG_POWERPC_VSX_FALSE}"; then as_fn_error $? "conditional \"PNG_POWERPC_VSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${PNG_LOONGARCH_LSX_TRUE}" && test -z "${PNG_LOONGARCH_LSX_FALSE}"; then + as_fn_error $? "conditional \"PNG_LOONGARCH_LSX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -13999,63 +15801,65 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( +else case e in #( + e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; +esac ;; esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -14064,13 +15868,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -14079,43 +15876,27 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac -# We did not find ourselves, most probably we were run as `sh COMMAND' +# We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -14128,9 +15909,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -14161,22 +15942,25 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else - as_fn_append () +else case e in #( + e) as_fn_append () { eval $1=\$$1\$2 - } + } ;; +esac fi # as_fn_append # as_fn_arith ARG... @@ -14184,16 +15968,18 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else - as_fn_arith () +else case e in #( + e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` - } + } ;; +esac fi # as_fn_arith @@ -14220,7 +16006,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -14242,6 +16028,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -14255,6 +16045,12 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -14266,9 +16062,9 @@ if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. + # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. + # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then @@ -14296,7 +16092,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -14305,7 +16101,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -14349,10 +16145,12 @@ as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 @@ -14367,8 +16165,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libpng $as_me 1.6.34, which was -generated by GNU Autoconf 2.69. Invocation command line was +This file was extended by libpng $as_me 1.6.47, which was +generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -14400,7 +16198,7 @@ _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions +'$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. @@ -14430,14 +16228,16 @@ $config_commands Report bugs to ." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libpng config.status 1.6.34 -configured by $0, generated by GNU Autoconf 2.69, +libpng config.status 1.6.47 +configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -14477,15 +16277,15 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" @@ -14493,23 +16293,23 @@ do --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; + as_fn_error $? "ambiguous option: '$1' +Try '$0 --help' for more information.";; --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; + -*) as_fn_error $? "unrecognized option: '$1' +Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; @@ -14530,7 +16330,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -14544,7 +16344,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -14552,7 +16352,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout @@ -14599,12 +16399,14 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' @@ -14728,13 +16530,13 @@ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ +FILECMD \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ -AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ @@ -14854,7 +16656,7 @@ do "libpng.pc") CONFIG_FILES="$CONFIG_FILES libpng.pc:libpng.pc.in" ;; "libpng-config") CONFIG_FILES="$CONFIG_FILES libpng-config:libpng-config.in" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done @@ -14864,9 +16666,9 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -14874,7 +16676,7 @@ fi # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. +# after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= @@ -14898,7 +16700,7 @@ ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. +# This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then @@ -15056,13 +16858,13 @@ fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. +# This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF -# Transform confdefs.h into an awk script `defines.awk', embedded as +# Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. @@ -15172,7 +16974,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -15194,33 +16996,33 @@ do -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. + # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done - # Let's still pretend it is `configure' which instantiates (i.e., don't + # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -15237,7 +17039,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -15261,9 +17063,9 @@ $as_echo X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -15325,8 +17127,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -15339,7 +17141,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 esac _ACEOF -# Neutralize VPATH when `$srcdir' = `.'. +# Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 @@ -15370,9 +17172,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -15388,20 +17190,20 @@ which seems to be undefined. Please make sure it is defined" >&2;} # if test x"$ac_file" != x-; then { - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi @@ -15421,7 +17223,7 @@ $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | +printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -15441,8 +17243,8 @@ $as_echo X"$_am_arg" | s/.*/./; q'`/stamp-h$_am_stamp_count ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -15452,29 +17254,35 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + case $CONFIG_FILES in #( + *\'*) : + eval set x "$CONFIG_FILES" ;; #( + *) : + set x $CONFIG_FILES ;; #( + *) : + ;; +esac shift - for mf + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf do # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line + am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`$as_dirname -- "$am_mf" || +$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$am_mf" : 'X\(//\)[^/]' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -15492,53 +17300,50 @@ $as_echo X"$mf" | q } s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ + am_filepart=`$as_basename -- "$am_mf" || +$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X/"$am_mf" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } - /^X\(\/\/\)$/{ + /^X\/\(\/\/\)$/{ s//\1/ q } - /^X\(\/\).*/{ + /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done + { echo "$as_me:$LINENO: cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles" >&5 + (cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } || am_rc=$? done + if test $am_rc -ne 0; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} +as_fn_error $? "Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. If GNU make was not used, consider + re-running the configure script with MAKE=\"gmake\" (or whatever is + necessary). You can also try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking). +See 'config.log' for more details" "$LINENO" 5; } + fi + { am_dirpart=; unset am_dirpart;} + { am_filepart=; unset am_filepart;} + { am_mf=; unset am_mf;} + { am_rc=; unset am_rc;} + rm -f conftest-deps.mk } ;; "libtool":C) @@ -15556,19 +17361,18 @@ $as_echo X"$file" | cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 -# Copyright (C) 2014 Free Software Foundation, Inc. +# Copyright (C) 2024 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of of the License, or +# the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you @@ -15685,6 +17489,9 @@ to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd +# A file(cmd) program that detects file types. +FILECMD=$lt_FILECMD + # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -15703,8 +17510,11 @@ sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR +# Flags to create an archive (by configure). +lt_ar_flags=$lt_ar_flags + # Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS +AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"} # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec @@ -15946,7 +17756,7 @@ hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# "absolute",i.e. impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute @@ -16072,6 +17882,7 @@ _LT_EOF esac + ltmain=$ac_aux_dir/ltmain.sh @@ -16079,7 +17890,7 @@ ltmain=$ac_aux_dir/ltmain.sh # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ + $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || @@ -16122,7 +17933,8 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi + diff --git a/vs/libpng/configure.ac b/vs/libpng/configure.ac index e3cfafd6edd..df48325e00b 100644 --- a/vs/libpng/configure.ac +++ b/vs/libpng/configure.ac @@ -1,7 +1,7 @@ # configure.ac +# Copyright (c) 2018-2024 Cosmin Truta # Copyright (c) 2004-2016 Glenn Randers-Pehrson -# Last changed in libpng 1.6.25 [September 1, 2016] # This code is released under the libpng license. # For conditions of distribution and use, see the disclaimer @@ -25,8 +25,8 @@ AC_PREREQ([2.68]) dnl Version number stuff here: -AC_INIT([libpng],[1.6.34],[png-mng-implement@lists.sourceforge.net]) -AC_CONFIG_MACRO_DIR([scripts]) +AC_INIT([libpng],[1.6.47],[png-mng-implement@lists.sourceforge.net]) +AC_CONFIG_MACRO_DIR([scripts/autoconf]) # libpng does not follow GNU file name conventions (hence 'foreign') # color-tests requires automake 1.11 or later @@ -46,17 +46,17 @@ dnl automake, so the following is not necessary (and is not defined anyway): dnl AM_PREREQ([1.11.2]) dnl stop configure from automagically running automake -PNGLIB_VERSION=1.6.34 +PNGLIB_VERSION=1.6.47 PNGLIB_MAJOR=1 PNGLIB_MINOR=6 -PNGLIB_RELEASE=34 +PNGLIB_RELEASE=47 dnl End of version number stuff AC_CONFIG_SRCDIR([pngget.c]) AC_CONFIG_HEADERS([config.h]) -# Checks for programs. +# Check the basic programs. AC_LANG([C]) AC_PROG_CC AM_PROG_AS @@ -72,16 +72,19 @@ dnl compatible later version may be used LT_INIT([win32-dll]) LT_PREREQ([2.4.2]) -# Some awks crash when confronted with pnglibconf.dfa, do a test run now -# to make sure this doesn't happen -AC_MSG_CHECKING([that AWK works]) +dnl Declare the AWK variable. +AC_ARG_VAR(AWK, [AWK language processor]) + +# Some awk implementations crash when confronted with pnglibconf.dfa. +# Run a test now, to make sure this doesn't happen. +AC_MSG_CHECKING([if awk ($AWK) works]) if ${AWK} -f ${srcdir}/scripts/options.awk out="/dev/null" version=search\ ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\ ${srcdir}/pngusr.dfa 1>&2 then - AC_MSG_RESULT([ok]) + AC_MSG_RESULT([yes]) else - AC_MSG_FAILURE([failed], 1) + AC_MSG_FAILURE([no], 1) fi # This is a remnant of the old cc -E validation, where it may have been @@ -89,11 +92,29 @@ fi DFNCPP="$CPP" AC_SUBST(DFNCPP) -# -Werror cannot be passed to GCC in CFLAGS because configure will fail (it -# checks the compiler with a program that generates a warning), add the -# following option to deal with this +AC_ARG_ENABLE([tests], + AS_HELP_STRING([--disable-tests], + [do not build the test programs (default is to build)]), + [enable_tests="$enableval"], + [enable_tests=yes]) + +AM_CONDITIONAL([ENABLE_TESTS], + [test "$enable_tests" != "no"]) + +AC_ARG_ENABLE([tools], + AS_HELP_STRING([--disable-tools], + [do not build the auxiliary tools (default is to build)]), + [enable_tools="$enableval"], + [enable_tools=yes]) + +AM_CONDITIONAL([ENABLE_TOOLS], + [test "$enable_tools" != "no"]) + +# -Werror cannot be passed to GCC in CFLAGS because configure will fail +# (it checks the compiler with a program that generates a warning). +# Add the following option to deal with this: AC_ARG_VAR(PNG_COPTS, - [additional flags for the C compiler, use this for options that would] + [additional flags for the C compiler, to be used for options that would] [cause configure itself to fail]) AC_ARG_ENABLE(werror, AS_HELP_STRING([[[--enable-werror[=OPT]]]], @@ -114,10 +135,10 @@ AC_ARG_ENABLE(werror, CFLAGS="$sav_CFLAGS" fi],) -# For GCC 5 the default mode for C is -std=gnu11 instead of -std=gnu89 -# In pngpriv.h we request just the POSIX 1003.1 and C89 APIs by defining _POSIX_SOURCE to 1 -# This is incompatible with the new default mode, so we test for that and force the -# "-std=c89" compiler option: +# For GCC 5 the default mode for C is -std=gnu11 instead of -std=gnu89. +# In pngpriv.h we request just the POSIX 1003.1 and C89 APIs by defining +# _POSIX_SOURCE to 1. This is incompatible with the new default mode, so +# we test for that and force the "-std=c89" compiler option: AC_MSG_CHECKING([if we need to force back C standard to C89]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([ @@ -133,23 +154,17 @@ AC_COMPILE_IFELSE( CFLAGS="$CFLAGS -std=c89" ]) -# Checks for header files. -AC_HEADER_STDC - -# Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_SIZE_T +# Checks for structures and compiler characteristics. AC_STRUCT_TM AC_C_RESTRICT # Checks for library functions. -AC_FUNC_STRTOD -AC_CHECK_FUNCS([memset], , AC_MSG_ERROR(memset not found in libc)) -AC_CHECK_FUNCS([pow], , AC_CHECK_LIB(m, pow, , AC_MSG_ERROR(cannot find pow)) ) +AC_CHECK_FUNCS([pow], , + [AC_CHECK_LIB([m], [pow], , [AC_MSG_ERROR([cannot find pow])])]) -# Some later POSIX 1003.1 functions are required for test programs, failure here -# is soft (the corresponding test program is not built). -AC_CHECK_FUNC([clock_gettime],,[AC_MSG_WARN([not building timepng])]) +# Some later POSIX 1003.1 functions are required for test programs, failure +# here is soft (the corresponding test program is not built). +AC_CHECK_FUNC([clock_gettime], , [AC_MSG_WARN([not building timepng])]) AM_CONDITIONAL([HAVE_CLOCK_GETTIME], [test "$ac_cv_func_clock_gettime" = "yes"]) AC_ARG_WITH(zlib-prefix, @@ -157,8 +172,9 @@ AC_ARG_WITH(zlib-prefix, [prefix that may have been used in installed zlib]), [ZPREFIX=${withval}], [ZPREFIX='z_']) -AC_CHECK_LIB(z, zlibVersion, , - AC_CHECK_LIB(z, ${ZPREFIX}zlibVersion, , AC_MSG_ERROR(zlib not installed))) +AC_CHECK_LIB([z], [zlibVersion], , + [AC_CHECK_LIB([z], [${ZPREFIX}zlibVersion], , + [AC_MSG_ERROR([zlib not installed])])]) # The following is for pngvalid, to ensure it catches FP errors even on # platforms that don't enable FP exceptions, the function appears in the math @@ -210,9 +226,9 @@ AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes") if test "$have_ld_version_script" = "yes"; then AC_MSG_CHECKING([for symbol prefix]) SYMBOL_PREFIX=`echo "PREFIX=__USER_LABEL_PREFIX__" \ - | ${CPP-${CC-gcc} -E} - 2>&1 \ - | ${EGREP-grep} "^PREFIX=" \ - | ${SED-sed} -e "s:^PREFIX=::" -e "s:__USER_LABEL_PREFIX__::"` + | ${CPP:-${CC:-gcc} -E} - 2>&1 \ + | ${EGREP:-grep} "^PREFIX=" \ + | ${SED:-sed} -e "s:^PREFIX=::" -e "s:__USER_LABEL_PREFIX__::"` AC_SUBST(SYMBOL_PREFIX) AC_MSG_RESULT($SYMBOL_PREFIX) fi @@ -297,7 +313,7 @@ AC_ARG_ENABLE([unversioned-libpng-config], AM_CONDITIONAL([DO_INSTALL_LIBPNG_CONFIG], [test "$enable_unversioned_libpng_config" != "no"]) -# HOST SPECIFIC OPTIONS +# HOST-SPECIFIC OPTIONS # ===================== # # DEFAULT @@ -305,7 +321,7 @@ AM_CONDITIONAL([DO_INSTALL_LIBPNG_CONFIG], # AC_ARG_ENABLE([hardware-optimizations], AS_HELP_STRING([[[--enable-hardware-optimizations]]], - [Enable hardware optimizations: =no/off, yes/on:]), + [Enable hardware optimizations: =no/off, yes/on.]), [case "$enableval" in no|off) # disable hardware optimization on all systems: @@ -315,24 +331,33 @@ AC_ARG_ENABLE([hardware-optimizations], enable_mips_msa=no AC_DEFINE([PNG_MIPS_MSA_OPT], [0], [Disable MIPS_MSA optimizations]) + enable_mips_mmi=no + AC_DEFINE([PNG_MIPS_MMI_OPT], [0], + [Disable MIPS_MMI optimizations]) enable_powerpc_vsx=no AC_DEFINE([PNG_POWERPC_VSX_OPT], [0], [Disable POWERPC VSX optimizations]) enable_intel_sse=no AC_DEFINE([PNG_INTEL_SSE_OPT], [0], [Disable INTEL_SSE optimizations]) + enable_loongarch_lsx=no + AC_DEFINE([PNG_LOONGARCH_LSX_OPT], [0], + [Disable LOONGARCH_LSX optimizations]) ;; *) # allow enabling hardware optimization on any system: case "$host_cpu" in arm*|aarch64*) enable_arm_neon=yes - AC_DEFINE([PNG_ARM_NEON_OPT], [0], + AC_DEFINE([PNG_ARM_NEON_OPT], [2], [Enable ARM_NEON optimizations]) ;; mipsel*|mips64el*) + enable_mips_mmi=yes enable_mips_msa=yes - AC_DEFINE([PNG_MIPS_MSA_OPT], [0], + AC_DEFINE([PNG_MIPS_MMI_OPT], [1], + [Enable MIPS_MMI optimizations]) + AC_DEFINE([PNG_MIPS_MSA_OPT], [2], [Enable MIPS_MSA optimizations]) ;; i?86|x86_64) @@ -345,21 +370,25 @@ AC_ARG_ENABLE([hardware-optimizations], AC_DEFINE([PNG_POWERPC_VSX_OPT], [2], [Enable POWERPC VSX optimizations]) ;; + loongarch*) + enable_loongarch_lsx=yes + AC_DEFINE([PNG_LOONGARCH_LSX_OPT], [1], + [Enable LOONGARCH_LSX optimizations]) + ;; esac ;; esac]) -# ARM -# === -# -# ARM NEON (SIMD) support. +# ARM NEON +# ======== AC_ARG_ENABLE([arm-neon], AS_HELP_STRING([[[--enable-arm-neon]]], - [Enable ARM NEON optimizations: =no/off, check, api, yes/on:] - [no/off: disable the optimizations; check: use internal checking code] - [(deprecated and poorly supported); api: disable by default, enable by] - [a call to png_set_option; yes/on: turn on unconditionally.] + [Enable ARM NEON optimizations: =no/off, check, api, yes/on.] + [no/off: disable the optimizations;] + [check: use internal checking code (deprecated and poorly supported);] + [api: disable by default, enable by a call to png_set_option;] + [yes/on: turn on unconditionally.] [If not specified: determined by the compiler.]), [case "$enableval" in no|off) @@ -367,7 +396,7 @@ AC_ARG_ENABLE([arm-neon], AC_DEFINE([PNG_ARM_NEON_OPT], [0], [Disable ARM Neon optimizations]) # Prevent inclusion of the assembler files below: - enable_arm_neon=no;; + enable_arm_neon=no ;; check) AC_DEFINE([PNG_ARM_NEON_CHECK_SUPPORTED], [], [Check for ARM Neon support at run-time]);; @@ -377,35 +406,35 @@ AC_ARG_ENABLE([arm-neon], yes|on) AC_DEFINE([PNG_ARM_NEON_OPT], [2], [Enable ARM Neon optimizations]) - AC_MSG_WARN([--enable-arm-neon: please specify 'check' or 'api', if] - [you want the optimizations unconditionally pass -mfpu=neon] - [to the compiler.]);; + AC_MSG_WARN([--enable-arm-neon: please specify 'check' or 'api';] + [if you want the optimizations unconditionally,] + [pass '-mfpu=neon' to the compiler.]);; *) - AC_MSG_ERROR([--enable-arm-neon=${enable_arm_neon}: invalid value]) + AC_MSG_ERROR([--enable-arm-neon=${enable_arm_neon}:] + [invalid argument]) esac]) -# Add ARM specific files to all builds where the host_cpu is arm ('arm*') or -# where ARM optimizations were explicitly requested (this allows a fallback if a -# future host CPU does not match 'arm*') +# Add ARM-specific files to all builds where $host_cpu is arm ('arm*') or +# where ARM optimizations were explicitly requested. (This allows a fallback +# if a future host CPU does not match 'arm*'.) AM_CONDITIONAL([PNG_ARM_NEON], [test "$enable_arm_neon" != 'no' && case "$host_cpu" in - arm*|aarch64*) :;; - *) test "$enable_arm_neon" != '';; + arm*|aarch64*) : ;; + *) test "$enable_arm_neon" != '' ;; esac]) -# MIPS -# === -# -# MIPS MSA (SIMD) support. +# MIPS MSA +# ======== AC_ARG_ENABLE([mips-msa], AS_HELP_STRING([[[--enable-mips-msa]]], - [Enable MIPS MSA optimizations: =no/off, check, api, yes/on:] - [no/off: disable the optimizations; check: use internal checking code] - [(deprecated and poorly supported); api: disable by default, enable by] - [a call to png_set_option; yes/on: turn on unconditionally.] + [Enable MIPS MSA optimizations: =no/off, check, api, yes/on.] + [no/off: disable the optimizations;] + [check: use internal checking code (deprecated and poorly supported);] + [api: disable by default, enable by a call to png_set_option;] + [yes/on: turn on unconditionally.] [If not specified: determined by the compiler.]), [case "$enableval" in no|off) @@ -413,7 +442,7 @@ AC_ARG_ENABLE([mips-msa], AC_DEFINE([PNG_MIPS_MSA_OPT], [0], [Disable MIPS MSA optimizations]) # Prevent inclusion of the assembler files below: - enable_mips_msa=no;; + enable_mips_msa=no ;; check) AC_DEFINE([PNG_MIPS_MSA_CHECK_SUPPORTED], [], [Check for MIPS MSA support at run-time]);; @@ -423,31 +452,75 @@ AC_ARG_ENABLE([mips-msa], yes|on) AC_DEFINE([PNG_MIPS_MSA_OPT], [2], [Enable MIPS MSA optimizations]) - AC_MSG_WARN([--enable-mips-msa: please specify 'check' or 'api', if] - [you want the optimizations unconditionally pass '-mmsa -mfp64'] - [to the compiler.]);; + AC_MSG_WARN([--enable-mips-msa: please specify 'check' or 'api';] + [if you want the optimizations unconditionally,] + [pass '-mmsa -mfp64' to the compiler.]);; *) - AC_MSG_ERROR([--enable-mips-msa=${enable_mips_msa}: invalid value]) + AC_MSG_ERROR([--enable-mips-msa=${enable_mips_msa}:] + [invalid argument]) esac]) -# Add MIPS specific files to all builds where the host_cpu is mips ('mips*') or -# where MIPS optimizations were explicitly requested (this allows a fallback if a -# future host CPU does not match 'mips*') +# Add MIPS-specific files to all builds where $host_cpu is mips ('mips*') or +# where MIPS optimizations were explicitly requested. (This allows a fallback +# if a future host CPU does not match 'mips*'.) AM_CONDITIONAL([PNG_MIPS_MSA], [test "$enable_mips_msa" != 'no' && case "$host_cpu" in - mipsel*|mips64el*) :;; + mipsel*|mips64el*) : ;; esac]) -# INTEL -# ===== -# -# INTEL SSE (SIMD) support. +# MIPS MMI +# ======== + +AC_ARG_ENABLE([mips-mmi], + AS_HELP_STRING([[[--enable-mips-mmi]]], + [Enable MIPS MMI optimizations: =no/off, check, api, yes/on.] + [no/off: disable the optimizations;] + [check: use internal checking code (deprecated and poorly supported);] + [api: disable by default, enable by a call to png_set_option;] + [yes/on: turn on unconditionally.] + [If not specified: determined by the compiler.]), + [case "$enableval" in + no|off) + # disable the default enabling on __mips_mmi systems: + AC_DEFINE([PNG_MIPS_MMI_OPT], [0], + [Disable MIPS MMI optimizations]) + # Prevent inclusion of the assembler files below: + enable_mips_mmi=no;; + check) + AC_DEFINE([PNG_MIPS_MMI_CHECK_SUPPORTED], [], + [Check for MIPS MMI support at run-time]);; + api) + AC_DEFINE([PNG_MIPS_MMI_API_SUPPORTED], [], + [Turn on MIPS MMI optimizations at run-time]);; + yes|on) + AC_DEFINE([PNG_MIPS_MMI_OPT], [1], + [Enable MIPS MMI optimizations]) + AC_MSG_WARN([--enable-mips-mmi: please specify 'check' or 'api';] + [if you want the optimizations unconditionally] + [pass '-mloongson-mmi -march=loongson3a' to the compiler.]);; + *) + AC_MSG_ERROR([--enable-mips-mmi=${enable_mips_mmi}:] + [invalid argument]) + esac]) + +# Add MIPS specific files to all builds where the host_cpu is mips ('mips*') or +# where MIPS optimizations were explicitly requested. (This allows a fallback +# if a future host CPU does not match 'mips*'.) + +AM_CONDITIONAL([PNG_MIPS_MMI], + [test "$enable_mips_mmi" != 'no' && + case "$host_cpu" in + mipsel*|mips64el*) : ;; + esac]) + +# INTEL SSE +# ========= AC_ARG_ENABLE([intel-sse], AS_HELP_STRING([[[--enable-intel-sse]]], - [Enable Intel SSE optimizations: =no/off, yes/on:] + [Enable Intel SSE optimizations: =no/off, yes/on.] [no/off: disable the optimizations;] [yes/on: enable the optimizations.] [If not specified: determined by the compiler.]), @@ -457,34 +530,34 @@ AC_ARG_ENABLE([intel-sse], AC_DEFINE([PNG_INTEL_SSE_OPT], [0], [Disable Intel SSE optimizations]) # Prevent inclusion of the assembler files below: - enable_intel_sse=no;; + enable_intel_sse=no ;; yes|on) AC_DEFINE([PNG_INTEL_SSE_OPT], [1], [Enable Intel SSE optimizations]);; *) - AC_MSG_ERROR([--enable-intel-sse=${enable_intel_sse}: invalid value]) + AC_MSG_ERROR([--enable-intel-sse=${enable_intel_sse}:] + [invalid argument]) esac]) -# Add Intel specific files to all builds where the host_cpu is Intel ('x86*') -# or where Intel optimizations were explicitly requested (this allows a -# fallback if a future host CPU does not match 'x86*') +# Add Intel-specific files to all builds where $host_cpu is Intel ('x86*') or +# where Intel optimizations were explicitly requested. (This allows a fallback +# if a future host CPU does not match 'x86*'.) AM_CONDITIONAL([PNG_INTEL_SSE], [test "$enable_intel_sse" != 'no' && case "$host_cpu" in - i?86|x86_64) :;; - *) test "$enable_intel_sse" != '';; + i?86|x86_64) : ;; + *) test "$enable_intel_sse" != '' ;; esac]) -# PowerPC -# === -# -# PowerPC VSX (SIMD) support. +# POWERPC VSX +# =========== AC_ARG_ENABLE([powerpc-vsx], AS_HELP_STRING([[[--enable-powerpc-vsx]]], - [Enable POWERPC VSX optimizations: =no/off, check, api, yes/on:] - [no/off: disable the optimizations; check: use internal checking code] - [api: disable by default, enable by a call to png_set_option] + [Enable POWERPC VSX optimizations: =no/off, check, api, yes/on.] + [no/off: disable the optimizations;] + [check: use internal checking code;] + [api: disable by default, enable by a call to png_set_option;] [yes/on: turn on unconditionally.] [If not specified: determined by the compiler.]), [case "$enableval" in @@ -492,36 +565,101 @@ AS_HELP_STRING([[[--enable-powerpc-vsx]]], # disable the default enabling on __ppc64__ systems: AC_DEFINE([PNG_POWERPC_VSX_OPT], [0], [Disable POWERPC VSX optimizations]) - # Prevent inclusion of the platform specific files below: - enable_powerpc_vsx=no;; + # Prevent inclusion of the platform-specific files below: + enable_powerpc_vsx=no ;; check) AC_DEFINE([PNG_POWERPC_VSX_CHECK_SUPPORTED], [], [Check for POWERPC VSX support at run-time]) - AC_MSG_WARN([--enable-powerpc-vsx Please check contrib/powerpc/README file] - [for the list of supported OSes.]);; + AC_MSG_WARN([--enable-powerpc-vsx: please see contrib/powerpc/README] + [for the list of supported systems.]);; api) AC_DEFINE([PNG_POWERPC_VSX_API_SUPPORTED], [], [Turn on POWERPC VSX optimizations at run-time]);; yes|on) AC_DEFINE([PNG_POWERPC_VSX_OPT], [2], [Enable POWERPC VSX optimizations]) - AC_MSG_WARN([--enable-powerpc-vsx: please specify 'check' or 'api', if] - [you want the optimizations unconditionally pass '-maltivec -mvsx'] - [or '-mcpu=power8'to the compiler.]);; + AC_MSG_WARN([--enable-powerpc-vsx: please specify 'check' or 'api';] + [if you want the optimizations unconditionally,] + [pass '-maltivec -mvsx' or '-mcpu=power8' to the compiler.]);; *) - AC_MSG_ERROR([--enable-powerpc-vsx=${enable_powerpc_vsx}: invalid value]) + AC_MSG_ERROR([--enable-powerpc-vsx=${enable_powerpc_vsx}:] + [invalid argument]) esac]) -# Add PowerPC specific files to all builds where the host_cpu is powerpc('powerpc*') or -# where POWERPC optimizations were explicitly requested (this allows a fallback if a -# future host CPU does not match 'powerpc*') +# Add PowerPC-specific files to all builds where $host_cpu is powerpc +# ('powerpc*') or where PowerPC optimizations were explicitly requested. +# (This allows a fallback if a future host CPU does not match 'powerpc*'.) AM_CONDITIONAL([PNG_POWERPC_VSX], [test "$enable_powerpc_vsx" != 'no' && case "$host_cpu" in - powerpc*|ppc64*) :;; + powerpc*|ppc64*) : ;; esac]) +# LOONGARCH LSX +# ============= + +AC_ARG_ENABLE([loongarch-lsx], + AS_HELP_STRING([[[--enable-loongarch-lsx]]], + [Enable LOONGARCH LSX optimizations: =no/off, yes/on:] + [no/off: disable the optimizations;] + [yes/on: turn on unconditionally.] + [If not specified: determined by the compiler.]), + [case "$enableval" in + no|off) + # disable the default enabling on __loongarch_simd systems: + AC_DEFINE([PNG_LOONGARCH_LSX_OPT], [0], + [Disable LOONGARCH LSX optimizations]) + # Prevent inclusion of the assembler files below: + enable_loongarch_lsx=no;; + yes|on) + AC_DEFINE([PNG_LOONGARCH_LSX_OPT], [1], + [Enable LOONGARCH LSX optimizations]) + ;; + *) + AC_MSG_ERROR([--enable-loongarch-lsx=${enable_loongarch_lsx}:] + [invalid argument]) + esac]) + +if test "$enable_loongarch_lsx" != "no" && + case "$host_cpu" in + loongarch*) : ;; + *) test "$enable_loongarch_lsx" != '' ;; + esac +then + compiler_support_loongarch_lsx=no + AC_MSG_CHECKING(whether to use LoongArch LSX intrinsics) + save_CFLAGS="$CFLAGS" + LSX_CFLAGS="${LSX_CFLAGS:-"-mlsx"}" + CFLAGS="$CFLAGS $LSX_CFLAGS" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#include +int main(){ + __m128i a, b, c; + a = __lsx_vadd_w(b, c); + return 0; +}]])],compiler_support_loongarch_lsx=yes) + CFLAGS="$save_CFLAGS" + AC_MSG_RESULT($compiler_support_loongarch_lsx) + if test "$compiler_support_loongarch_lsx" = "yes"; then + AC_DEFINE([PNG_LOONGARCH_LSX_OPT], [1], + [Enable LOONGARCH LSX optimizations]) + else + AC_MSG_WARN([Compiler does not support loongarch LSX.]) + fi +fi + +# Add LoongArch specific files to all builds where the host_cpu is loongarch +# ('loongarch*') or where LoongArch optimizations were explicitly requested. +# (This allows a fallback if a future host CPU does not match 'loongarch*'.) + +AM_CONDITIONAL([PNG_LOONGARCH_LSX], + [test "$enable_loongarch_lsx" != "no" && + test "$compiler_support_loongarch_lsx" = "yes" && + case "$host_cpu" in + loongarch*) : ;; + *) test "$enable_loongarch_lsx" != '' ;; + esac]) AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]]) diff --git a/vs/libpng/contrib/.editorconfig b/vs/libpng/contrib/.editorconfig new file mode 100644 index 00000000000..8b1466b1d98 --- /dev/null +++ b/vs/libpng/contrib/.editorconfig @@ -0,0 +1,9 @@ +# https://editorconfig.org + +root = false + +[*.[ch]] +indent_size = unset +indent_style = unset +max_doc_length = unset +max_line_length = unset diff --git a/vs/libpng/contrib/README.txt b/vs/libpng/contrib/README.txt index 97963c6d545..34dfbae4c45 100644 --- a/vs/libpng/contrib/README.txt +++ b/vs/libpng/contrib/README.txt @@ -1,3 +1,5 @@ +External contributions to libpng +-------------------------------- This "contrib" directory contains contributions which are not necessarily under the libpng license, although all are open source. They are not part of diff --git a/vs/libpng/contrib/arm-neon/android-ndk.c b/vs/libpng/contrib/arm-neon/android-ndk.c index fb3a4898de6..c72c468a70c 100644 --- a/vs/libpng/contrib/arm-neon/android-ndk.c +++ b/vs/libpng/contrib/arm-neon/android-ndk.c @@ -2,7 +2,6 @@ * * Copyright (c) 2014 Glenn Randers-Pehrson * Written by John Bowler, 2014. - * Last changed in libpng 1.6.10 [March 6, 2014] * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer @@ -24,6 +23,7 @@ * has been compiled only, not linked: no version of the library has been found, * only the header files exist in the NDK. */ + #include static int diff --git a/vs/libpng/contrib/arm-neon/linux-auxv.c b/vs/libpng/contrib/arm-neon/linux-auxv.c index 4d26bd3b354..c5d7f51271f 100644 --- a/vs/libpng/contrib/arm-neon/linux-auxv.c +++ b/vs/libpng/contrib/arm-neon/linux-auxv.c @@ -2,7 +2,6 @@ * * Copyright (c) 2014 Glenn Randers-Pehrson * Written by Mans Rullgard, 2011. - * Last changed in libpng 1.6.10 [March 6, 2014] * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer @@ -22,6 +21,7 @@ * This generic __linux__ implementation requires reading /proc/self/auxv and * looking at each element for one that records NEON capabilities. */ + #include /* for POSIX 1003.1 */ #include /* for EINTR */ diff --git a/vs/libpng/contrib/arm-neon/linux.c b/vs/libpng/contrib/arm-neon/linux.c index a9bc360dd5b..b5429d0c34f 100644 --- a/vs/libpng/contrib/arm-neon/linux.c +++ b/vs/libpng/contrib/arm-neon/linux.c @@ -1,6 +1,5 @@ /* contrib/arm-neon/linux.c * - * Last changed in libpng 1.6.31 [July 27, 2017] * Copyright (c) 2014, 2017 Glenn Randers-Pehrson * Written by John Bowler, 2014, 2017. * @@ -19,6 +18,7 @@ * This code is strict ANSI-C and is probably moderately portable; it does * however use and it assumes that /proc/cpuinfo is never localized. */ + #include static int diff --git a/vs/libpng/contrib/conftest/basic.dfa b/vs/libpng/contrib/conftest/basic.dfa new file mode 100644 index 00000000000..f9ae5c34661 --- /dev/null +++ b/vs/libpng/contrib/conftest/basic.dfa @@ -0,0 +1,133 @@ +# basic.dfa +# Build time configuration of libpng +# +# Author: John Bowler +# Copyright: (c) John Bowler, 2024 +# Usage rights: +# To the extent possible under law, the author has waived all copyright and +# related or neighboring rights to this work. This work is published from: +# United States. +# +# Build libpng with basic read and write support. This enables the lowest +# level libpng read and write APIs - the "row-by-row" ones. +# +# Support is enabled only for those transformations that are observed to be +# required by widely used apps or are in the v3 specification. +# + +everything = off + +# The sequential read code is enabled here; the progressive code can be used +# instead but there is no point enabling both. + +option READ on +option SEQUENTIAL_READ on +option EASY_ACCESS on +option SET_USER_LIMITS on +option INFO_IMAGE on +option READ_16BIT on + +# Errors: these can be disabled but then there won't be any error messages +# just failures and the error messages are really needed for apps: +option WARNINGS on +option ERROR_TEXT on +option BENIGN_READ_ERRORS on + +# Required for many display programs such as web browsers: +option PROGRESSIVE_READ on + +# Switch on the write code - this makes a minimalist encoder but with +# interlace support turned on; otherwise png_read_png..png_write_png will +# fail on an interlaced image. +option WRITE on +option WRITE_INTERLACING on +option WRITE_16BIT on + +# Usages of the 'fixed' APIs are relatively rare but they do occur +# one or the other for both the API and the internal math. + +#Fixed point: +option FIXED_POINT on + +#Floating point: +option FLOATING_POINT on +option FLOATING_ARITHMETIC on + +# Basic error handling, IO and user memory support. The latter allows the +# application program to provide its own implementations of 'malloc' and 'free'. +option SETJMP on +option STDIO on +option USER_MEM on + +# Gamma handling: this needs to be on for the gamma handling +option READ_GAMMA on + +# The supported chunks +chunk bKGD on +chunk cHRM on +chunk eXIf on +chunk gAMA on +chunk iCCP on +chunk iTXt on +chunk pHYs on +chunk sBIT on +chunk sRGB on +chunk tEXt on +chunk tIME on +chunk tRNS on +chunk zTXt on + +# These don't seem to be used anywhere: +# chunk pCAL +# chunk sCAL +# chunk sPLT + +# The rest of this is app dependent: none of these options are required for +# read/write of the full range of PNG files and the normal chunk handling on +# read. +option WRITE_CUSTOMIZE_ZTXT_COMPRESSION on +option WRITE_CUSTOMIZE_COMPRESSION on + +option READ_EXPAND on +option READ_FILLER on +option READ_GRAY_TO_RGB on +option READ_INVERT on +option READ_PACK on +option READ_RGB_TO_GRAY on +option READ_SCALE_16_TO_8 on +option READ_SHIFT on +option READ_STRIP_16_TO_8 on +option READ_STRIP_ALPHA on +option READ_SWAP on + +option CONVERT_tIME on + +# optipng +option IO_STATE on +option STORE_UNKNOWN_CHUNKS on +option HANDLE_AS_UNKNOWN on + +# pngcrush +option READ_USER_TRANSFORM on +option WRITE_FLUSH on + +# pnmtopng +chunk hIST on + +# cairo +option WRITE_PACKSWAP on +option WRITE_USER_TRANSFORM on + +# graphicsmagick +option READ_USER_CHUNKS on + +# Qt5.15 qtgui (gentoo package split) Qt6.6 qtbase +option READ_BGR on +option WRITE_BGR on +option READ_SWAP_ALPHA on +option WRITE_SWAP_ALPHA on +chunk oFFs on + +# ghostscript-gpl +option WRITE_INVERT_ALPHA on +option WRITE_INVERT on diff --git a/vs/libpng/contrib/conftest/fixed.dfa b/vs/libpng/contrib/conftest/fixed.dfa new file mode 100644 index 00000000000..cb45f013631 --- /dev/null +++ b/vs/libpng/contrib/conftest/fixed.dfa @@ -0,0 +1,15 @@ +# fixed.dfa +# Build time configuration of libpng +# +# Author: John Bowler +# Copyright: (c) John Bowler, 2025 +# Usage rights: +# To the extent possible under law, the author has waived all copyright and +# related or neighboring rights to this work. This work is published from: +# United States. +# +# Test the standard libpng configuration without floating point (the internal +# fixed point implementations are used instead). +# +option FLOATING_ARITHMETIC off +option FLOATING_POINT off diff --git a/vs/libpng/contrib/conftest/float-fixed.dfa b/vs/libpng/contrib/conftest/float-fixed.dfa new file mode 100644 index 00000000000..c13da319848 --- /dev/null +++ b/vs/libpng/contrib/conftest/float-fixed.dfa @@ -0,0 +1,14 @@ +# fixed-float.dfa +# Build time configuration of libpng +# +# Author: John Bowler +# Copyright: (c) John Bowler, 2025 +# Usage rights: +# To the extent possible under law, the author has waived all copyright and +# related or neighboring rights to this work. This work is published from: +# United States. +# +# Test the standard libpng configuration with the fixed point internal +# implementation in place of the default floating point +# +option FLOATING_ARITHMETIC off diff --git a/vs/libpng/contrib/conftest/nocompile-limits.dfa b/vs/libpng/contrib/conftest/nocompile-limits.dfa new file mode 100644 index 00000000000..24e1e2e083e --- /dev/null +++ b/vs/libpng/contrib/conftest/nocompile-limits.dfa @@ -0,0 +1,21 @@ +# nolimits.dfa +# Build time configuration of libpng +# +# Author: John Bowler +# Copyright: (c) John Bowler, 2025 +# +# Usage rights: +# To the extent possible under law, the author has waived all copyright and +# related or neighboring rights to this work. This work is published from: +# United States. +# +# Build libpng without any limits and without run-time settable limits. Turning +# USER_LIMITS off reduces libpng code size by allowing compile-time elimination +# of some checking code. +# +option USER_LIMITS off + +@# define PNG_USER_WIDTH_MAX PNG_UINT_31_MAX +@# define PNG_USER_HEIGHT_MAX PNG_UINT_31_MAX +@# define PNG_USER_CHUNK_CACHE_MAX 0 +@# define PNG_USER_CHUNK_MALLOC_MAX 0 diff --git a/vs/libpng/contrib/conftest/nolimits.dfa b/vs/libpng/contrib/conftest/nolimits.dfa new file mode 100644 index 00000000000..5b37fcf727a --- /dev/null +++ b/vs/libpng/contrib/conftest/nolimits.dfa @@ -0,0 +1,19 @@ +# nolimits.dfa +# Build time configuration of libpng +# +# Author: John Bowler +# Copyright: (c) John Bowler, 2025 +# +# Usage rights: +# To the extent possible under law, the author has waived all copyright and +# related or neighboring rights to this work. This work is published from: +# United States. +# +# Build libpng without any limits. With these settigs run-time limits are still +# possible. +# +@# define PNG_USER_WIDTH_MAX PNG_UINT_31_MAX +@# define PNG_USER_HEIGHT_MAX PNG_UINT_31_MAX +@# define PNG_USER_CHUNK_CACHE_MAX 0 +@# define PNG_USER_CHUNK_MALLOC_MAX 0 + diff --git a/vs/libpng/contrib/conftest/pngcp.dfa b/vs/libpng/contrib/conftest/pngcp.dfa index 15a856e2fb9..31c411d5f82 100644 --- a/vs/libpng/contrib/conftest/pngcp.dfa +++ b/vs/libpng/contrib/conftest/pngcp.dfa @@ -33,7 +33,7 @@ option WRITE_16BIT on option WRITE_FILTER on # pngcp needs this to preserve unknown chunks, switching all these on means that -# pngcp can work without explicit known chunk reading suppport +# pngcp can work without explicit known chunk reading support option UNKNOWN_CHUNKS on option SET_UNKNOWN_CHUNKS on option HANDLE_AS_UNKNOWN on @@ -52,6 +52,6 @@ option TEXT on option USER_LIMITS on option SET_USER_LIMITS on -# these are are just required for specific customizations +# these are just required for specific customizations option WRITE_CUSTOMIZE_ZTXT_COMPRESSION on option WRITE_CUSTOMIZE_COMPRESSION on diff --git a/vs/libpng/contrib/examples/README.txt b/vs/libpng/contrib/examples/README.txt index 48dab4f0fda..7833d536ccc 100644 --- a/vs/libpng/contrib/examples/README.txt +++ b/vs/libpng/contrib/examples/README.txt @@ -1,4 +1,3 @@ - This directory (contrib/examples) contains examples of libpng usage. NO COPYRIGHT RIGHTS ARE CLAIMED TO ANY OF THE FILES IN THIS DIRECTORY. diff --git a/vs/libpng/contrib/examples/iccfrompng.c b/vs/libpng/contrib/examples/iccfrompng.c index 603037e7097..0f86714a817 100644 --- a/vs/libpng/contrib/examples/iccfrompng.c +++ b/vs/libpng/contrib/examples/iccfrompng.c @@ -10,7 +10,7 @@ * without processing the image. Notice that some header information may occur * after the image data. Textual data and comments are an example; the approach * in this file won't work reliably for such data because it only looks for the - * information in the section of the file that preceeds the image data. + * information in the section of the file that precedes the image data. * * Compile and link against libpng and zlib, plus anything else required on the * system you use. @@ -80,7 +80,7 @@ extract(FILE *fp, png_uint_32 *proflen) } else - result = no_profile; + result = no_profile; } png_destroy_read_struct(&png_ptr, &info_ptr, NULL); @@ -155,7 +155,7 @@ extract_one_file(const char *filename) } else if (verbose && profile == no_profile) - printf("%s has no profile\n", filename); + printf("%s has no profile\n", filename); } else diff --git a/vs/libpng/contrib/examples/pngpixel.c b/vs/libpng/contrib/examples/pngpixel.c index f762379ed3c..9185d518fba 100644 --- a/vs/libpng/contrib/examples/pngpixel.c +++ b/vs/libpng/contrib/examples/pngpixel.c @@ -42,7 +42,7 @@ component(png_const_bytep row, png_uint_32 x, unsigned int c, png_uint_32 bit_offset_hi = bit_depth * ((x >> 6) * channels); png_uint_32 bit_offset_lo = bit_depth * ((x & 0x3f) * channels + c); - row = (png_const_bytep)(((PNG_CONST png_byte (*)[8])row) + bit_offset_hi); + row = (png_const_bytep)(((const png_byte (*)[8])row) + bit_offset_hi); row += bit_offset_lo >> 3; bit_offset_lo &= 0x07; @@ -73,7 +73,7 @@ static void print_pixel(png_structp png_ptr, png_infop info_ptr, png_const_bytep row, png_uint_32 x) { - PNG_CONST unsigned int bit_depth = png_get_bit_depth(png_ptr, info_ptr); + unsigned int bit_depth = png_get_bit_depth(png_ptr, info_ptr); switch (png_get_color_type(png_ptr, info_ptr)) { @@ -87,7 +87,7 @@ print_pixel(png_structp png_ptr, png_infop info_ptr, png_const_bytep row, */ case PNG_COLOR_TYPE_PALETTE: { - PNG_CONST int index = component(row, x, 0, bit_depth, 1); + int index = component(row, x, 0, bit_depth, 1); png_colorp palette = NULL; int num_palette = 0; diff --git a/vs/libpng/contrib/examples/pngtopng.c b/vs/libpng/contrib/examples/pngtopng.c index 904b972382f..1d55496acc3 100644 --- a/vs/libpng/contrib/examples/pngtopng.c +++ b/vs/libpng/contrib/examples/pngtopng.c @@ -5,8 +5,6 @@ * related or neighboring rights to this work. This work is published from: * United States. * - * Last changed in libpng 1.6.29 [March 16, 2017] - * * Read a PNG and write it out in a fixed format, using the 'simplified API' * that was introduced in libpng-1.6.0. * diff --git a/vs/libpng/contrib/gregbook/COPYING b/vs/libpng/contrib/gregbook/COPYING index 3ef84d3f1b4..a3e97747969 100644 --- a/vs/libpng/contrib/gregbook/COPYING +++ b/vs/libpng/contrib/gregbook/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. diff --git a/vs/libpng/contrib/gregbook/LICENSE b/vs/libpng/contrib/gregbook/LICENSE index 2748af5612e..d9567178cb6 100644 --- a/vs/libpng/contrib/gregbook/LICENSE +++ b/vs/libpng/contrib/gregbook/LICENSE @@ -45,6 +45,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --------------------------------------------------------------------------- diff --git a/vs/libpng/contrib/gregbook/readpng.c b/vs/libpng/contrib/gregbook/readpng.c index 99e94284c2b..fad9b536ab9 100644 --- a/vs/libpng/contrib/gregbook/readpng.c +++ b/vs/libpng/contrib/gregbook/readpng.c @@ -49,7 +49,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---------------------------------------------------------------------------*/ diff --git a/vs/libpng/contrib/gregbook/readpng.h b/vs/libpng/contrib/gregbook/readpng.h index 5253ed2c6fc..fad9fe3b4c5 100644 --- a/vs/libpng/contrib/gregbook/readpng.h +++ b/vs/libpng/contrib/gregbook/readpng.h @@ -49,7 +49,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---------------------------------------------------------------------------*/ diff --git a/vs/libpng/contrib/gregbook/readpng2.c b/vs/libpng/contrib/gregbook/readpng2.c index 6c7e3454750..610b3cd87e0 100644 --- a/vs/libpng/contrib/gregbook/readpng2.c +++ b/vs/libpng/contrib/gregbook/readpng2.c @@ -49,7 +49,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --------------------------------------------------------------------------- @@ -146,7 +146,7 @@ int readpng2_init(mainprog_info *mainprog_ptr) /* These byte strings were copied from png.h. If a future version * of readpng2.c recognizes more chunks, add them to this list. */ - static PNG_CONST png_byte chunks_to_process[] = { + static const png_byte chunks_to_process[] = { 98, 75, 71, 68, '\0', /* bKGD */ 103, 65, 77, 65, '\0', /* gAMA */ 115, 82, 71, 66, '\0', /* sRGB */ diff --git a/vs/libpng/contrib/gregbook/readpng2.h b/vs/libpng/contrib/gregbook/readpng2.h index d8ed61b2191..6b3660d7c17 100644 --- a/vs/libpng/contrib/gregbook/readpng2.h +++ b/vs/libpng/contrib/gregbook/readpng2.h @@ -49,7 +49,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---------------------------------------------------------------------------*/ diff --git a/vs/libpng/contrib/gregbook/readppm.c b/vs/libpng/contrib/gregbook/readppm.c index 063b760d9cc..52e70277713 100644 --- a/vs/libpng/contrib/gregbook/readppm.c +++ b/vs/libpng/contrib/gregbook/readppm.c @@ -54,7 +54,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---------------------------------------------------------------------------*/ diff --git a/vs/libpng/contrib/gregbook/rpng-win.c b/vs/libpng/contrib/gregbook/rpng-win.c index 7487d716c0d..1a6f876154d 100644 --- a/vs/libpng/contrib/gregbook/rpng-win.c +++ b/vs/libpng/contrib/gregbook/rpng-win.c @@ -73,7 +73,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---------------------------------------------------------------------------*/ diff --git a/vs/libpng/contrib/gregbook/rpng-x.c b/vs/libpng/contrib/gregbook/rpng-x.c index ffa55e199e2..2fc9272c642 100644 --- a/vs/libpng/contrib/gregbook/rpng-x.c +++ b/vs/libpng/contrib/gregbook/rpng-x.c @@ -21,7 +21,7 @@ - 1.10: added support for non-default visuals; fixed X pixel-conversion - 1.11: added extra set of parentheses to png_jmpbuf() macro; fixed command-line parsing bug - - 1.12: fixed some small X memory leaks (thanks to Franois Petitjean) + - 1.12: fixed some small X memory leaks (thanks to François Petitjean) - 1.13: fixed XFreeGC() crash bug (thanks to Patrick Welche) - 1.14: added support for X resources (thanks to Gerhard Niklasch) - 2.00: dual-licensed (added GNU GPL) @@ -77,7 +77,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---------------------------------------------------------------------------*/ diff --git a/vs/libpng/contrib/gregbook/rpng2-win.c b/vs/libpng/contrib/gregbook/rpng2-win.c index f45dfe8f934..ed6b526ecb9 100644 --- a/vs/libpng/contrib/gregbook/rpng2-win.c +++ b/vs/libpng/contrib/gregbook/rpng2-win.c @@ -82,7 +82,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---------------------------------------------------------------------------*/ diff --git a/vs/libpng/contrib/gregbook/rpng2-x.c b/vs/libpng/contrib/gregbook/rpng2-x.c index d850b68b996..1375dc9a6df 100644 --- a/vs/libpng/contrib/gregbook/rpng2-x.c +++ b/vs/libpng/contrib/gregbook/rpng2-x.c @@ -27,7 +27,7 @@ - 1.11: added -usleep option for demos; fixed command-line parsing bug - 1.12: added -pause option for demos and testing - 1.20: added runtime MMX-enabling/disabling and new -mmx* options - - 1.21: fixed some small X memory leaks (thanks to Franois Petitjean) + - 1.21: fixed some small X memory leaks (thanks to François Petitjean) - 1.22: fixed XFreeGC() crash bug (thanks to Patrick Welche) - 1.23: added -bgpat 0 mode (std white/gray checkerboard, 8x8 squares) - 1.30: added -loop option for -bgpat (ifdef FEATURE_LOOP); fixed bpp = @@ -93,7 +93,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---------------------------------------------------------------------------*/ diff --git a/vs/libpng/contrib/gregbook/wpng.c b/vs/libpng/contrib/gregbook/wpng.c index 7c70a314294..a8f367fb84a 100644 --- a/vs/libpng/contrib/gregbook/wpng.c +++ b/vs/libpng/contrib/gregbook/wpng.c @@ -84,7 +84,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---------------------------------------------------------------------------*/ diff --git a/vs/libpng/contrib/gregbook/writepng.c b/vs/libpng/contrib/gregbook/writepng.c index 9d8b1d70640..055c74374a6 100644 --- a/vs/libpng/contrib/gregbook/writepng.c +++ b/vs/libpng/contrib/gregbook/writepng.c @@ -49,7 +49,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---------------------------------------------------------------------------*/ diff --git a/vs/libpng/contrib/gregbook/writepng.h b/vs/libpng/contrib/gregbook/writepng.h index 4dc2ab40b2c..78b966b5874 100644 --- a/vs/libpng/contrib/gregbook/writepng.h +++ b/vs/libpng/contrib/gregbook/writepng.h @@ -49,7 +49,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA USA + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---------------------------------------------------------------------------*/ diff --git a/vs/libpng/contrib/libtests/gentests.sh b/vs/libpng/contrib/libtests/gentests.sh index f0f8d2395a5..eba7ce50c8c 100755 --- a/vs/libpng/contrib/libtests/gentests.sh +++ b/vs/libpng/contrib/libtests/gentests.sh @@ -2,8 +2,6 @@ # # Copyright (c) 2013 John Cunningham Bowler # -# Last changed in libpng 1.6.0 [February 14, 2013] -# # This code is released under the libpng license. # For conditions of distribution and use, see the disclaimer # and license in png.h diff --git a/vs/libpng/contrib/libtests/makepng.c b/vs/libpng/contrib/libtests/makepng.c index 9dff0484605..a866fc1d112 100644 --- a/vs/libpng/contrib/libtests/makepng.c +++ b/vs/libpng/contrib/libtests/makepng.c @@ -3,8 +3,6 @@ /* Copyright: */ #define COPYRIGHT "\251 2013,2015 John Cunningham Bowler" /* - * Last changed in libpng 1.6.20 [November 24, 2015] - * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer * and license in png.h @@ -299,25 +297,28 @@ generate_palette(png_colorp palette, png_bytep trans, int bit_depth, unsigned int x, y; volatile unsigned int ip = 0; - for (x=0; x 0xfffffffc) /* Maximum profile length */ { fprintf(stderr, "%s: file too long (%lu) for an ICC profile\n", @@ -1179,7 +1183,7 @@ insert_iCCP(png_structp png_ptr, png_infop info_ptr, int nparams, case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { - png_size_t fake_len = load_fake(params[1], &profile); + size_t fake_len = load_fake(params[1], &profile); if (fake_len > 0) /* else a simple parameter */ { @@ -1274,7 +1278,7 @@ set_text(png_structp png_ptr, png_infop info_ptr, png_textp text, case '5': case '6': case '7': case '8': case '9': { png_bytep data = NULL; - png_size_t fake_len = load_fake(param, &data); + size_t fake_len = load_fake(param, &data); if (fake_len > 0) /* else a simple parameter */ { @@ -1378,10 +1382,10 @@ static void insert_sBIT(png_structp png_ptr, png_infop info_ptr, int nparams, png_charpp params) { - const int ct = png_get_color_type(png_ptr, info_ptr); - const int c = (ct & PNG_COLOR_MASK_COLOR ? 3 : 1) + + int ct = png_get_color_type(png_ptr, info_ptr); + int c = (ct & PNG_COLOR_MASK_COLOR ? 3 : 1) + (ct & PNG_COLOR_MASK_ALPHA ? 1 : 0); - const unsigned int maxval = + unsigned int maxval = ct & PNG_COLOR_MASK_PALETTE ? 8U : png_get_bit_depth(png_ptr, info_ptr); png_color_8 sBIT; @@ -1430,10 +1434,13 @@ find_parameters(png_const_charp what, png_charp param, png_charp *list, for (i=0; *param && i #include #include @@ -317,11 +317,10 @@ transform_name(int t) t &= -t; /* first set bit */ - for (i=0; i APP_FAIL || (level > ERRORS && !(dp->options & CONTINUE))) + { + dp->error_code = level; longjmp(dp->error_return, level); + } } /* error handler callbacks for libpng */ @@ -807,7 +813,7 @@ display_cache_file(struct display *dp, const char *filename) static void buffer_read(struct display *dp, struct buffer *bp, png_bytep data, - png_size_t size) + size_t size) { struct buffer_list *last = bp->current; size_t read_count = bp->read_count; @@ -855,7 +861,7 @@ buffer_read(struct display *dp, struct buffer *bp, png_bytep data, } static void PNGCBAPI -read_function(png_structp pp, png_bytep data, png_size_t size) +read_function(png_structp pp, png_bytep data, size_t size) { buffer_read(get_dp(pp), get_buffer(pp), data, size); } @@ -927,7 +933,7 @@ update_display(struct display *dp) png_structp pp; png_infop ip; - /* Now perform the initial read with a 0 tranform. */ + /* Now perform the initial read with a 0 transform. */ read_png(dp, &dp->original_file, "original read", 0/*no transform*/); /* Move the result to the 'original' fields */ @@ -962,21 +968,24 @@ update_display(struct display *dp) int bd = dp->bit_depth; unsigned int i; - for (i=0; iread_pp, dp->read_ip, &width, &height, &bit_depth, - &color_type, &interlace_method, &compression_method, &filter_method); + if (!png_get_IHDR(dp->read_pp, dp->read_ip, &width, &height, &bit_depth, + &color_type, &interlace_method, &compression_method, &filter_method)) + display_log(dp, LIBPNG_BUG, "png_get_IHDR failed"); # define C(item) if (item != dp->item) \ display_log(dp, APP_WARNING, "IHDR " #item "(%lu) changed to %lu",\ @@ -1012,7 +1022,12 @@ compare_read(struct display *dp, int applied_transforms) C(height); C(bit_depth); C(color_type); - C(interlace_method); +# ifdef PNG_WRITE_INTERLACING_SUPPORTED + /* If write interlace has been disabled, the PNG file is still + * written correctly, but as a regular (not-interlaced) PNG. + */ + C(interlace_method); +# endif C(compression_method); C(filter_method); @@ -1081,8 +1096,9 @@ compare_read(struct display *dp, int applied_transforms) size_t x; /* Find the first error */ - for (x=0; x 0x%.2x", @@ -1137,6 +1153,7 @@ compare_read(struct display *dp, int applied_transforms) display_log(dp, LIBPNG_ERROR, "invalid colour type %d", color_type); /*NOTREACHED*/ + memset(sig_bits, 0, sizeof(sig_bits)); bpp = 0; break; } @@ -1198,7 +1215,7 @@ compare_read(struct display *dp, int applied_transforms) sig_bits[0] = (png_byte)b; break; - case 4: /* Relicate twice */ + case 4: /* Replicate twice */ /* Value is 1, 2, 3 or 4 */ b = 0xf & ((0xf << 4) >> sig_bits[0]); b |= b << 4; @@ -1267,7 +1284,7 @@ compare_read(struct display *dp, int applied_transforms) #ifdef PNG_WRITE_PNG_SUPPORTED static void buffer_write(struct display *dp, struct buffer *buffer, png_bytep data, - png_size_t size) + size_t size) /* Generic write function used both from the write callback provided to * libpng and from the generic read code. */ @@ -1311,7 +1328,7 @@ buffer_write(struct display *dp, struct buffer *buffer, png_bytep data, } static void PNGCBAPI -write_function(png_structp pp, png_bytep data, png_size_t size) +write_function(png_structp pp, png_bytep data, size_t size) { buffer_write(get_dp(pp), get_buffer(pp), data, size); } @@ -1446,7 +1463,7 @@ test_one_file(struct display *dp, const char *filename) * unsigned, because some transforms are negative on a 16-bit system. */ unsigned int active = dp->active_transforms; - const int exhaustive = (dp->options & EXHAUSTIVE) != 0; + int exhaustive = (dp->options & EXHAUSTIVE) != 0; unsigned int current = first_transform(active); unsigned int bad_transforms = 0; unsigned int bad_combo = ~0U; /* bitwise AND of failing transforms */ @@ -1557,22 +1574,23 @@ static int do_test(struct display *dp, const char *file) /* Exists solely to isolate the setjmp clobbers */ { - int ret = setjmp(dp->error_return); + dp->error_code = VERBOSE; /* The "lowest" level */ - if (ret == 0) + if (setjmp(dp->error_return) == 0) { test_one_file(dp, file); return 0; } - else if (ret < ERRORS) /* shouldn't longjmp on warnings */ - display_log(dp, INTERNAL_ERROR, "unexpected return code %d", ret); + else if (dp->error_code < ERRORS) /* shouldn't longjmp on warnings */ + display_log(dp, INTERNAL_ERROR, "unexpected return code %d", + dp->error_code); - return ret; + return dp->error_code; } int -main(const int argc, const char * const * const argv) +main(int argc, char **argv) { /* For each file on the command line test it with a range of transforms */ int option_end, ilog = 0; @@ -1668,13 +1686,17 @@ main(const int argc, const char * const * const argv) int ret = do_test(&d, argv[i]); if (ret > QUIET) /* abort on user or internal error */ + { + display_clean(&d); + display_destroy(&d); return 99; + } } /* Here on any return, including failures, except user/internal issues */ { - const int pass = (d.options & STRICT) ? + int pass = (d.options & STRICT) ? RESULT_STRICT(d.results) : RESULT_RELAXED(d.results); if (!pass) @@ -1686,8 +1708,9 @@ main(const int argc, const char * const * const argv) printf("%s: pngimage ", pass ? "PASS" : "FAIL"); - for (j=1; j #include @@ -372,7 +372,7 @@ print_opts(png_uint_32 opts) */ #define FORMAT_COUNT 64 #define FORMAT_MASK 0x3f -static PNG_CONST char * PNG_CONST format_names[FORMAT_COUNT] = +static const char * const format_names[FORMAT_COUNT] = { "sRGB-gray", "sRGB-gray+alpha", @@ -578,11 +578,11 @@ typedef struct int stride_extra; FILE *input_file; png_voidp input_memory; - png_size_t input_memory_size; + size_t input_memory_size; png_bytep buffer; ptrdiff_t stride; - png_size_t bufsize; - png_size_t allocsize; + size_t bufsize; + size_t allocsize; char tmpfile_name[32]; png_uint_16 colormap[256*4]; } @@ -665,7 +665,7 @@ static void initimage(Image *image, png_uint_32 opts, const char *file_name, static void allocbuffer(Image *image) { - png_size_t size = PNG_IMAGE_BUFFER_SIZE(image->image, image->stride); + size_t size = PNG_IMAGE_BUFFER_SIZE(image->image, image->stride); if (size+32 > image->bufsize) { @@ -1142,7 +1142,7 @@ get_pixel(png_uint_32 format))(Pixel *p, png_const_voidp pb) } } -/* Convertion between pixel formats. The code above effectively eliminates the +/* Conversion between pixel formats. The code above effectively eliminates the * component ordering changes leaving three basic changes: * * 1) Remove an alpha channel by pre-multiplication or compositing on a @@ -1150,7 +1150,7 @@ get_pixel(png_uint_32 format))(Pixel *p, png_const_voidp pb) * * 2) Remove color by mapping to grayscale. (Grayscale to color is a no-op.) * - * 3) Convert between 8-bit and 16-bit components. (Both directtions are + * 3) Convert between 8-bit and 16-bit components. (Both directions are * relevant.) * * This gives the following base format conversion matrix: @@ -2036,7 +2036,7 @@ typedef struct /* Precalculated values: */ int in_opaque; /* Value of input alpha that is opaque */ int is_palette; /* Sample values come from the palette */ - int accumulate; /* Accumlate component errors (don't log) */ + int accumulate; /* Accumulate component errors (don't log) */ int output_8bit; /* Output is 8-bit (else 16-bit) */ void (*in_gp)(Pixel*, png_const_voidp); @@ -2346,8 +2346,8 @@ static int logpixel(const Transform *transform, png_uint_32 x, png_uint_32 y, const Pixel *in, const Pixel *calc, const Pixel *out, const char *reason) { - const png_uint_32 in_format = transform->in_image->image.format; - const png_uint_32 out_format = transform->out_image->image.format; + png_uint_32 in_format = transform->in_image->image.format; + png_uint_32 out_format = transform->out_image->image.format; png_uint_32 back_format = out_format & ~PNG_FORMAT_FLAG_ALPHA; const char *via_linear = ""; @@ -2602,12 +2602,12 @@ compare_two_images(Image *a, Image *b, int via_linear, ptrdiff_t strideb = b->stride; png_const_bytep rowa = a->buffer+16; png_const_bytep rowb = b->buffer+16; - const png_uint_32 width = a->image.width; - const png_uint_32 height = a->image.height; - const png_uint_32 formata = a->image.format; - const png_uint_32 formatb = b->image.format; - const unsigned int a_sample = PNG_IMAGE_SAMPLE_SIZE(formata); - const unsigned int b_sample = PNG_IMAGE_SAMPLE_SIZE(formatb); + png_uint_32 width = a->image.width; + png_uint_32 height = a->image.height; + png_uint_32 formata = a->image.format; + png_uint_32 formatb = b->image.format; + unsigned int a_sample = PNG_IMAGE_SAMPLE_SIZE(formata); + unsigned int b_sample = PNG_IMAGE_SAMPLE_SIZE(formatb); int alpha_added, alpha_removed; int bchannels; png_uint_32 y; @@ -2701,7 +2701,7 @@ compare_two_images(Image *a, Image *b, int via_linear, { if ((a->opts & ACCUMULATE) == 0) { - char pindex[9]; + char pindex[16]; sprintf(pindex, "%lu[%lu]", (unsigned long)y, (unsigned long)a->image.colormap_entries); logerror(a, a->file_name, ": bad pixel index: ", pindex); @@ -2712,12 +2712,12 @@ compare_two_images(Image *a, Image *b, int via_linear, else if (y >= b->image.colormap_entries) { if ((b->opts & ACCUMULATE) == 0) - { - char pindex[9]; + { + char pindex[16]; sprintf(pindex, "%lu[%lu]", (unsigned long)y, (unsigned long)b->image.colormap_entries); logerror(b, b->file_name, ": bad pixel index: ", pindex); - } + } result = 0; } @@ -2726,7 +2726,7 @@ compare_two_images(Image *a, Image *b, int via_linear, result = 0; } - /* If reqested copy the error values back from the Transform. */ + /* If requested, copy the error values back from the Transform. */ if (a->opts & ACCUMULATE) { tr.error_ptr[0] = tr.error[0]; @@ -2790,8 +2790,7 @@ compare_two_images(Image *a, Image *b, int via_linear, (formata & (formatb ^ PNG_FORMAT_FLAG_COLOR) & PNG_FORMAT_FLAG_COLOR))) { /* Was an alpha channel changed? */ - const png_uint_32 alpha_changed = (formata ^ formatb) & - PNG_FORMAT_FLAG_ALPHA; + png_uint_32 alpha_changed = (formata ^ formatb) & PNG_FORMAT_FLAG_ALPHA; /* Was an alpha channel removed? (The third test.) If so the direct * comparison is only possible if the input alpha is opaque. @@ -2821,8 +2820,11 @@ compare_two_images(Image *a, Image *b, int via_linear, bchannels = component_loc(bloc, formatb); /* Hence the btoa array. */ - for (i=0; i<4; ++i) if (bloc[i] < 4) - btoa[bloc[i]] = aloc[i]; /* may be '4' for alpha */ + for (i=0; i<4; ++i) + { + if (bloc[i] < 4) + btoa[bloc[i]] = aloc[i]; /* may be '4' for alpha */ + } if (alpha_added) alpha_added = bloc[0]; /* location of alpha channel in image b */ @@ -2932,7 +2934,7 @@ compare_two_images(Image *a, Image *b, int via_linear, } } - /* If reqested copy the error values back from the Transform. */ + /* If requested, copy the error values back from the Transform. */ if (a->opts & ACCUMULATE) { tr.error_ptr[0] = tr.error[0]; @@ -3210,10 +3212,10 @@ write_one_file(Image *output, Image *image, int convert_to_8bit) else if (image->opts & USE_FILE) { #ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED - static int counter = 0; + static unsigned int counter = 0; char name[32]; - sprintf(name, "%s%d.png", tmpf, ++counter); + sprintf(name, "%s%u.png", tmpf, ++counter); if (png_image_write_to_file(&image->image, name, convert_to_8bit, image->buffer+16, (png_int_32)image->stride, image->colormap)) @@ -3497,7 +3499,7 @@ main(int argc, char **argv) int retval = 0; int c; -#if PNG_LIBPNG_VER >= 10700 +#if PNG_LIBPNG_VER == 10700 /* This error should not exist in 1.7 or later: */ opts |= GBG_ERROR; #endif @@ -3627,7 +3629,7 @@ main(int argc, char **argv) if (arg[0] == '-') { - const int term = (arg[1] == '0' ? 0 : '\n'); + int term = (arg[1] == '0' ? 0 : '\n'); unsigned int ich = 0; /* Loop reading files, use a static buffer to simplify this and just diff --git a/vs/libpng/contrib/libtests/pngunknown.c b/vs/libpng/contrib/libtests/pngunknown.c index 12eab72584a..47a84d984d7 100644 --- a/vs/libpng/contrib/libtests/pngunknown.c +++ b/vs/libpng/contrib/libtests/pngunknown.c @@ -1,7 +1,6 @@ - /* pngunknown.c - test the read side unknown chunk handling * - * Last changed in libpng 1.6.32 [August 24, 2017] + * Copyright (c) 2021 Cosmin Truta * Copyright (c) 2015,2017 Glenn Randers-Pehrson * Written by John Cunningham Bowler * @@ -56,7 +55,7 @@ defined(PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED) #if PNG_LIBPNG_VER < 10500 -/* This deliberately lacks the PNG_CONST. */ +/* This deliberately lacks the const. */ typedef png_byte *png_const_bytep; /* This is copied from 1.5.1 png.h: */ @@ -85,7 +84,7 @@ typedef png_byte *png_const_bytep; #define PNG_WRITE_16BIT_SUPPORTED #define PNG_READ_16BIT_SUPPORTED -/* This comes from pnglibconf.h afer 1.5: */ +/* This comes from pnglibconf.h after 1.5: */ #define PNG_FP_1 100000 #define PNG_GAMMA_THRESHOLD_FIXED\ ((png_fixed_point)(PNG_GAMMA_THRESHOLD * PNG_FP_1)) @@ -114,6 +113,8 @@ typedef png_byte *png_const_bytep; #define png_PLTE PNG_U32( 80, 76, 84, 69) #define png_bKGD PNG_U32( 98, 75, 71, 68) #define png_cHRM PNG_U32( 99, 72, 82, 77) +#define png_cICP PNG_U32( 99, 73, 67, 80) /* PNGv3 */ +#define png_cLLI PNG_U32( 99, 76, 76, 73) /* PNGv3 */ #define png_eXIf PNG_U32(101, 88, 73, 102) /* registered July 2017 */ #define png_fRAc PNG_U32(102, 82, 65, 99) /* registered, not defined */ #define png_gAMA PNG_U32(103, 65, 77, 65) @@ -123,6 +124,7 @@ typedef png_byte *png_const_bytep; #define png_hIST PNG_U32(104, 73, 83, 84) #define png_iCCP PNG_U32(105, 67, 67, 80) #define png_iTXt PNG_U32(105, 84, 88, 116) +#define png_mDCV PNG_U32(109, 68, 67, 86) /* PNGv3 */ #define png_oFFs PNG_U32(111, 70, 70, 115) #define png_pCAL PNG_U32(112, 67, 65, 76) #define png_pHYs PNG_U32(112, 72, 89, 115) @@ -209,6 +211,20 @@ static struct 0, # else 1, +# endif + 1, START, 0 }, + { "cICP", PNG_INFO_cICP, png_cICP, +# ifdef PNG_READ_cICP_SUPPORTED + 0, +# else + 1, +# endif + 1, START, 0 }, + { "cLLI", PNG_INFO_cLLI, png_cLLI, +# ifdef PNG_READ_cLLI_SUPPORTED + 0, +# else + 1, # endif 1, START, 0 }, { "eXIf", PNG_INFO_eXIf, png_eXIf, @@ -246,6 +262,13 @@ static struct 1, # endif 1, ABSENT, 0 }, + { "mDCV", PNG_INFO_mDCV, png_mDCV, +# ifdef PNG_READ_mDCV_SUPPORTED + 0, +# else + 1, +# endif + 1, START, 0 }, { "oFFs", PNG_INFO_oFFs, png_oFFs, # ifdef PNG_READ_oFFs_SUPPORTED 0, @@ -370,7 +393,9 @@ find_by_flag(png_uint_32 flag) { int i = NINFO; - while (--i >= 0) if (chunk_info[i].flag == flag) return i; + while (--i >= 0) + if (chunk_info[i].flag == flag) + return i; fprintf(stderr, "pngunknown: internal error\n"); exit(4); @@ -547,27 +572,30 @@ read_callback(png_structp pp, png_unknown_chunkp pc) case PNG_HANDLE_CHUNK_AS_DEFAULT: case PNG_HANDLE_CHUNK_NEVER: - discard = 1/*handled; discard*/; + discard = 1; /*handled; discard*/ break; case PNG_HANDLE_CHUNK_IF_SAFE: case PNG_HANDLE_CHUNK_ALWAYS: - discard = 0/*not handled; keep*/; + discard = 0; /*not handled; keep*/ break; } /* Also store information about this chunk in the display, the relevant flag * is set if the chunk is to be kept ('not handled'.) */ - if (chunk >= 0) if (!discard) /* stupidity to stop a GCC warning */ + if (chunk >= 0) { - png_uint_32 flag = chunk_info[chunk].flag; + if (!discard) /* stupidity to stop a GCC warning */ + { + png_uint_32 flag = chunk_info[chunk].flag; - if (pc->location & PNG_AFTER_IDAT) - d->after_IDAT |= flag; + if (pc->location & PNG_AFTER_IDAT) + d->after_IDAT |= flag; - else - d->before_IDAT |= flag; + else + d->before_IDAT |= flag; + } } /* However if there is no support to store unknown chunks don't ask libpng to @@ -841,8 +869,9 @@ check(FILE *fp, int argc, const char **argv, png_uint_32p flags/*out*/, { png_uint_32 y; - for (y=0; ypng_ptr, NULL, NULL); + for (y=0; ypng_ptr, NULL, NULL); } } } /* interlaced */ @@ -1091,15 +1120,15 @@ perform_one_test_safe(FILE *fp, int argc, const char **argv, static const char *standard_tests[] = { - "discard", "default=discard", 0, - "save", "default=save", 0, - "if-safe", "default=if-safe", 0, - "vpAg", "vpAg=if-safe", 0, - "sTER", "sTER=if-safe", 0, - "IDAT", "default=discard", "IDAT=save", 0, - "sAPI", "bKGD=save", "cHRM=save", "gAMA=save", "all=discard", "iCCP=save", - "sBIT=save", "sRGB=save", "eXIf=save", 0, - 0/*end*/ + "discard", "default=discard", NULL, + "save", "default=save", NULL, + "if-safe", "default=if-safe", NULL, + "vpAg", "vpAg=if-safe", NULL, + "sTER", "sTER=if-safe", NULL, + "IDAT", "default=discard", "IDAT=save", NULL, + "sAPI", "bKGD=save", "cHRM=save", "gAMA=save", "all=discard", "iCCP=save", + "sBIT=save", "sRGB=save", "eXIf=save", NULL, + NULL /*end*/ }; static PNG_NORETURN void @@ -1115,7 +1144,7 @@ int main(int argc, const char **argv) { FILE *fp; - png_uint_32 default_flags[4/*valid,unknown{before,after}*/]; + png_uint_32 default_flags[4]; /*valid,unknown{before,after}*/ int strict = 0, default_tests = 0; const char *count_argv = "default=save"; const char *touch_file = NULL; @@ -1153,8 +1182,9 @@ main(int argc, const char **argv) /* GCC BUG: if (default_tests && argc != 1) triggers some weird GCC argc * optimization which causes warnings with -Wstrict-overflow! */ - else if (default_tests) if (argc != 1) - usage(d.program, "extra arguments"); + else if (default_tests) + if (argc != 1) + usage(d.program, "extra arguments"); /* The name of the test file is the last argument; remove it. */ d.file = argv[--argc]; @@ -1216,7 +1246,11 @@ main(int argc, const char **argv) const char *result; int arg_count = 0; - while (*next) ++next, ++arg_count; + while (*next != NULL) + { + ++next; + ++arg_count; + } perform_one_test_safe(fp, arg_count, test, default_flags, &d, this_test); diff --git a/vs/libpng/contrib/libtests/pngvalid.c b/vs/libpng/contrib/libtests/pngvalid.c index 4dc4f844765..bddf32141bf 100644 --- a/vs/libpng/contrib/libtests/pngvalid.c +++ b/vs/libpng/contrib/libtests/pngvalid.c @@ -1,7 +1,6 @@ - /* pngvalid.c - validate libpng by constructing then reading png files. * - * Last changed in libpng 1.6.31 [July 27, 2017] + * Copyright (c) 2021 Cosmin Truta * Copyright (c) 2014-2017 John Cunningham Bowler * * This code is released under the libpng license. @@ -21,6 +20,8 @@ #define _POSIX_SOURCE 1 #define _ISOC99_SOURCE 1 /* For floating point */ #define _GNU_SOURCE 1 /* For the floating point exception extension */ +#define _BSD_SOURCE 1 /* For the floating point exception extension */ +#define _DEFAULT_SOURCE 1 /* For the floating point exception extension */ #include #include @@ -68,9 +69,12 @@ #endif /* pngvalid requires write support and one of the fixed or floating point APIs. + * progressive read is also required currently as the progressive read pointer + * is used to record the 'display' structure. */ -#if defined(PNG_WRITE_SUPPORTED) &&\ - (defined(PNG_FIXED_POINT_SUPPORTED) || defined(PNG_FLOATING_POINT_SUPPORTED)) +#if defined PNG_WRITE_SUPPORTED &&\ + (defined PNG_PROGRESSIVE_READ_SUPPORTED) &&\ + (defined PNG_FIXED_POINT_SUPPORTED || defined PNG_FLOATING_POINT_SUPPORTED) #if PNG_LIBPNG_VER < 10500 /* This deliberately lacks the const. */ @@ -102,7 +106,7 @@ typedef png_byte *png_const_bytep; #define PNG_WRITE_16BIT_SUPPORTED #define PNG_READ_16BIT_SUPPORTED -/* This comes from pnglibconf.h afer 1.5: */ +/* This comes from pnglibconf.h after 1.5: */ #define PNG_FP_1 100000 #define PNG_GAMMA_THRESHOLD_FIXED\ ((png_fixed_point)(PNG_GAMMA_THRESHOLD * PNG_FP_1)) @@ -299,20 +303,20 @@ make_four_random_bytes(png_uint_32* seed, png_bytep bytes) #if defined PNG_READ_SUPPORTED || defined PNG_WRITE_tRNS_SUPPORTED ||\ defined PNG_WRITE_FILTER_SUPPORTED static void -randomize(void *pv, size_t size) +randomize_bytes(void *pv, size_t size) { static png_uint_32 random_seed[2] = {0x56789abc, 0xd}; make_random_bytes(random_seed, pv, size); } -#define R8(this) randomize(&(this), sizeof (this)) +#define R8(this) randomize_bytes(&(this), sizeof (this)) #ifdef PNG_READ_SUPPORTED static png_byte random_byte(void) { unsigned char b1[1]; - randomize(b1, sizeof b1); + randomize_bytes(b1, sizeof b1); return b1[0]; } #endif /* READ */ @@ -321,7 +325,7 @@ static png_uint_16 random_u16(void) { unsigned char b2[2]; - randomize(b2, sizeof b2); + randomize_bytes(b2, sizeof b2); return png_get_uint_16(b2); } @@ -331,7 +335,7 @@ static png_uint_32 random_u32(void) { unsigned char b4[4]; - randomize(b4, sizeof b4); + randomize_bytes(b4, sizeof b4); return png_get_uint_32(b4); } #endif /* READ_FILLER || READ_RGB_TO_GRAY */ @@ -711,7 +715,7 @@ typedef struct png_store_file unsigned int IDAT_bits; /* Number of bits in IDAT size */ png_uint_32 IDAT_size; /* Total size of IDAT data */ png_uint_32 id; /* must be correct (see FILEID) */ - png_size_t datacount; /* In this (the last) buffer */ + size_t datacount; /* In this (the last) buffer */ png_store_buffer data; /* Last buffer in file */ int npalette; /* Number of entries in palette */ store_palette_entry* palette; /* May be NULL */ @@ -777,10 +781,10 @@ typedef struct png_store png_infop piread; png_store_file* current; /* Set when reading */ png_store_buffer* next; /* Set when reading */ - png_size_t readpos; /* Position in *next */ + size_t readpos; /* Position in *next */ png_byte* image; /* Buffer for reading interlaced images */ - png_size_t cb_image; /* Size of this buffer */ - png_size_t cb_row; /* Row size of the image(s) */ + size_t cb_image; /* Size of this buffer */ + size_t cb_row; /* Row size of the image(s) */ uLong IDAT_crc; png_uint_32 IDAT_len; /* Used when re-chunking IDAT chunks */ png_uint_32 IDAT_pos; /* Used when re-chunking IDAT chunks */ @@ -791,7 +795,7 @@ typedef struct png_store png_store_file* saved; png_structp pwrite; /* Used when writing a new file */ png_infop piwrite; - png_size_t writepos; /* Position in .new */ + size_t writepos; /* Position in .new */ char wname[FILE_NAME_SIZE]; png_store_buffer new; /* The end of the new PNG file being written. */ store_pool write_memory_pool; @@ -961,7 +965,7 @@ bits_of(png_uint_32 num) return b; /* 0..32 */ } -/* Main interface to file storeage, after writing a new PNG file (see the API +/* Main interface to file storage, after writing a new PNG file (see the API * below) call store_storefile to store the result with the given name and id. */ static void @@ -1125,7 +1129,7 @@ static png_bytep store_image_row(const png_store* ps, png_const_structp pp, int nImage, png_uint_32 y) { - png_size_t coffset = (nImage * ps->image_h + y) * (ps->cb_row + 5) + 2; + size_t coffset = (nImage * ps->image_h + y) * (ps->cb_row + 5) + 2; if (ps->image == NULL) png_error(pp, "no allocated image"); @@ -1160,9 +1164,9 @@ store_image_free(png_store *ps, png_const_structp pp) static void store_ensure_image(png_store *ps, png_const_structp pp, int nImages, - png_size_t cbRow, png_uint_32 cRows) + size_t cbRow, png_uint_32 cRows) { - png_size_t cb = nImages * cRows * (cbRow + 5); + size_t cb = nImages * cRows * (cbRow + 5); if (ps->cb_image < cb) { @@ -1234,7 +1238,7 @@ store_image_check(const png_store* ps, png_const_structp pp, int iImage) png_error(pp, "image overwrite"); else { - png_size_t cbRow = ps->cb_row; + size_t cbRow = ps->cb_row; png_uint_32 rows = ps->image_h; image += iImage * (cbRow+5) * ps->image_h; @@ -1278,7 +1282,7 @@ valid_chunktype(png_uint_32 chunktype) } static void PNGCBAPI -store_write(png_structp ppIn, png_bytep pb, png_size_t st) +store_write(png_structp ppIn, png_bytep pb, size_t st) { png_const_structp pp = ppIn; png_store *ps = voidcast(png_store*, png_get_io_ptr(pp)); @@ -1346,13 +1350,13 @@ store_write(png_structp ppIn, png_bytep pb, png_size_t st) else /* chunkpos >= 8 */ { - png_size_t cb = st; + size_t cb = st; if (cb > STORE_BUFFER_SIZE - writepos) cb = STORE_BUFFER_SIZE - writepos; if (cb > chunklen - chunkpos/* bytes left in chunk*/) - cb = (png_size_t)/*SAFE*/(chunklen - chunkpos); + cb = (size_t)/*SAFE*/(chunklen - chunkpos); memcpy(ps->new.buffer + writepos, pb, cb); chunkpos += (png_uint_32)/*SAFE*/cb; @@ -1440,7 +1444,7 @@ store_read_buffer_next(png_store *ps) * during progressive read, where the io_ptr is set internally by libpng. */ static void -store_read_imp(png_store *ps, png_bytep pb, png_size_t st) +store_read_imp(png_store *ps, png_bytep pb, size_t st) { if (ps->current == NULL || ps->next == NULL) png_error(ps->pread, "store state damaged"); @@ -1463,14 +1467,13 @@ store_read_imp(png_store *ps, png_bytep pb, png_size_t st) } } -static png_size_t -store_read_chunk(png_store *ps, png_bytep pb, const png_size_t max, - const png_size_t min) +static size_t +store_read_chunk(png_store *ps, png_bytep pb, size_t max, size_t min) { png_uint_32 chunklen = ps->chunklen; png_uint_32 chunktype = ps->chunktype; png_uint_32 chunkpos = ps->chunkpos; - png_size_t st = max; + size_t st = max; if (st > 0) do { @@ -1601,8 +1604,8 @@ store_read_chunk(png_store *ps, png_bytep pb, const png_size_t max, store_read_imp(ps, pb, avail); ps->IDAT_crc = crc32(ps->IDAT_crc, pb, avail); - pb += (png_size_t)/*SAFE*/avail; - st -= (png_size_t)/*SAFE*/avail; + pb += (size_t)/*SAFE*/avail; + st -= (size_t)/*SAFE*/avail; chunkpos += (png_uint_32)/*SAFE*/avail; IDAT_size -= (png_uint_32)/*SAFE*/avail; IDAT_pos += (png_uint_32)/*SAFE*/avail; @@ -1669,10 +1672,10 @@ store_read_chunk(png_store *ps, png_bytep pb, const png_size_t max, else /* Return chunk bytes, including the CRC */ { - png_size_t avail = st; + size_t avail = st; if (avail > chunklen - chunkpos) - avail = (png_size_t)/*SAFE*/(chunklen - chunkpos); + avail = (size_t)/*SAFE*/(chunklen - chunkpos); store_read_imp(ps, pb, avail); pb += avail; @@ -1698,7 +1701,7 @@ store_read_chunk(png_store *ps, png_bytep pb, const png_size_t max, } static void PNGCBAPI -store_read(png_structp ppIn, png_bytep pb, png_size_t st) +store_read(png_structp ppIn, png_bytep pb, size_t st) { png_const_structp pp = ppIn; png_store *ps = voidcast(png_store*, png_get_io_ptr(pp)); @@ -1724,7 +1727,7 @@ store_progressive_read(png_store *ps, png_structp pp, png_infop pi) while (store_read_buffer_avail(ps) > 0) { static png_uint_32 noise = 2; - png_size_t cb; + size_t cb; png_byte buffer[512]; /* Generate 15 more bits of stuff: */ @@ -2570,7 +2573,7 @@ modifier_init(png_modifier *pm) * in the rgb_to_gray check, replacing it with an exact copy of the libpng 1.5 * algorithm. */ -#define DIGITIZE PNG_LIBPNG_VER < 10700 +#define DIGITIZE PNG_LIBPNG_VER != 10700 /* If pm->calculations_use_input_precision is set then operations will happen * with the precision of the input, not the precision of the output depth. @@ -2590,7 +2593,7 @@ static double digitize(double value, int depth, int do_round) * rounding and 'do_round' should be 1, if it is 0 the digitized value will * be truncated. */ - const unsigned int digitization_factor = (1U << depth) -1; + unsigned int digitization_factor = (1U << depth) - 1; /* Limiting the range is done as a convenience to the caller - it's easier to * do it once here than every time at the call site. @@ -2991,7 +2994,7 @@ modifier_setbuffer(png_modifier *pm) * png_struct. */ static void -modifier_read_imp(png_modifier *pm, png_bytep pb, png_size_t st) +modifier_read_imp(png_modifier *pm, png_bytep pb, size_t st) { while (st > 0) { @@ -3137,7 +3140,7 @@ modifier_read_imp(png_modifier *pm, png_bytep pb, png_size_t st) */ if (len+12 <= sizeof pm->buffer) { - png_size_t s = len+12-pm->buffer_count; + size_t s = len+12-pm->buffer_count; store_read_chunk(&pm->this, pm->buffer+pm->buffer_count, s, s); pm->buffer_count = len+12; @@ -3196,7 +3199,7 @@ modifier_read_imp(png_modifier *pm, png_bytep pb, png_size_t st) /* The callback: */ static void PNGCBAPI -modifier_read(png_structp ppIn, png_bytep pb, png_size_t st) +modifier_read(png_structp ppIn, png_bytep pb, size_t st) { png_const_structp pp = ppIn; png_modifier *pm = voidcast(png_modifier*, png_get_io_ptr(pp)); @@ -3226,7 +3229,7 @@ modifier_progressive_read(png_modifier *pm, png_structp pp, png_infop pi) for (;;) { static png_uint_32 noise = 1; - png_size_t cb, cbAvail; + size_t cb, cbAvail; png_byte buffer[512]; /* Generate 15 more bits of stuff: */ @@ -3688,8 +3691,8 @@ init_standard_palette(png_store *ps, png_structp pp, png_infop pi, int npalette, #ifdef PNG_WRITE_tRNS_SUPPORTED static void -set_random_tRNS(png_structp pp, png_infop pi, const png_byte colour_type, - const int bit_depth) +set_random_tRNS(png_structp pp, png_infop pi, png_byte colour_type, + int bit_depth) { /* To make this useful the tRNS color needs to match at least one pixel. * Random values are fine for gray, including the 16-bit case where we know @@ -3697,7 +3700,7 @@ set_random_tRNS(png_structp pp, png_infop pi, const png_byte colour_type, * method as only 65536 different RGB values are generated. */ png_color_16 tRNS; - const png_uint_16 mask = (png_uint_16)((1U << bit_depth)-1); + png_uint_16 mask = (png_uint_16)((1U << bit_depth)-1); R8(tRNS); /* makes unset fields random */ @@ -3982,7 +3985,7 @@ transform_row(png_const_structp pp, png_byte buffer[TRANSFORM_ROWMAX], # define check_interlace_type(type) ((void)(type)) # define set_write_interlace_handling(pp,type) png_set_interlace_handling(pp) # define do_own_interlace 0 -#elif PNG_LIBPNG_VER < 10700 +#elif PNG_LIBPNG_VER != 10700 # define set_write_interlace_handling(pp,type) (1) static void check_interlace_type(int const interlace_type) @@ -4010,7 +4013,7 @@ check_interlace_type(int const interlace_type) # define do_own_interlace 1 #endif /* WRITE_INTERLACING tests */ -#if PNG_LIBPNG_VER >= 10700 || defined PNG_WRITE_INTERLACING_SUPPORTED +#if PNG_LIBPNG_VER == 10700 || defined PNG_WRITE_INTERLACING_SUPPORTED # define CAN_WRITE_INTERLACE 1 #else # define CAN_WRITE_INTERLACE 0 @@ -4338,7 +4341,7 @@ make_size_image(png_store* const ps, png_byte const colour_type, /* Make a name and get an appropriate id for the store: */ char name[FILE_NAME_SIZE]; - const png_uint_32 id = FILEID(colour_type, bit_depth, 0/*palette*/, + png_uint_32 id = FILEID(colour_type, bit_depth, 0/*palette*/, interlace_type, w, h, do_interlace); standard_name_from_id(name, sizeof name, 0, id); @@ -4414,7 +4417,7 @@ make_size_image(png_store* const ps, png_byte const colour_type, for (pass=0; passnpalette = 0; /* Preset the transparent color to black: */ memset(&dp->transparent, 0, sizeof dp->transparent); - /* Preset the palette to full intensity/opaque througout: */ + /* Preset the palette to full intensity/opaque throughout: */ memset(dp->palette, 0xff, sizeof dp->palette); } @@ -5270,7 +5273,7 @@ standard_info_part1(standard_display *dp, png_structp pp, png_infop pi) */ standard_palette_validate(dp, pp, pi); - /* In any case always check for a tranparent color (notice that the + /* In any case always check for a transparent color (notice that the * colour type 3 case must not give a successful return on the get_tRNS call * with these arguments!) */ @@ -5469,14 +5472,14 @@ progressive_row(png_structp ppIn, png_bytep new_row, png_uint_32 y, int pass) static void sequential_row(standard_display *dp, png_structp pp, png_infop pi, - const int iImage, const int iDisplay) + int iImage, int iDisplay) { - const int npasses = dp->npasses; - const int do_interlace = dp->do_interlace && + int npasses = dp->npasses; + int do_interlace = dp->do_interlace && dp->interlace_type == PNG_INTERLACE_ADAM7; - const png_uint_32 height = standard_height(pp, dp->id); - const png_uint_32 width = standard_width(pp, dp->id); - const png_store* ps = dp->ps; + png_uint_32 height = standard_height(pp, dp->id); + png_uint_32 width = standard_width(pp, dp->id); + const png_store* ps = dp->ps; int pass; for (pass=0; passthis, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/, - interlace_type, 0, 0, 0), do_read_interlace, pm->use_update_info); + standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), + 0/*palette*/, interlace_type, 0, 0, 0), do_read_interlace, + pm->use_update_info); if (fail(pm)) return 0; @@ -5870,53 +5874,56 @@ test_size(png_modifier* const pm, png_byte const colour_type, */ static const png_byte hinc[] = {1, 3, 11, 1, 5}; static const png_byte winc[] = {1, 9, 5, 7, 1}; - const int save_bdlo = bdlo; + int save_bdlo = bdlo; for (; bdlo <= bdhi; ++bdlo) { png_uint_32 h, w; - for (h=1; h<=16; h+=hinc[bdlo]) for (w=1; w<=16; w+=winc[bdlo]) + for (h=1; h<=16; h+=hinc[bdlo]) { - /* First test all the 'size' images against the sequential - * reader using libpng to deinterlace (where required.) This - * validates the write side of libpng. There are four possibilities - * to validate. - */ - standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/, - PNG_INTERLACE_NONE, w, h, 0), 0/*do_interlace*/, - pm->use_update_info); + for (w=1; w<=16; w+=winc[bdlo]) + { + /* First test all the 'size' images against the sequential + * reader using libpng to deinterlace (where required.) This + * validates the write side of libpng. There are four possibilities + * to validate. + */ + standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), + 0/*palette*/, PNG_INTERLACE_NONE, w, h, 0), 0/*do_interlace*/, + pm->use_update_info); - if (fail(pm)) - return 0; + if (fail(pm)) + return 0; - standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/, - PNG_INTERLACE_NONE, w, h, 1), 0/*do_interlace*/, - pm->use_update_info); + standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), + 0/*palette*/, PNG_INTERLACE_NONE, w, h, 1), 0/*do_interlace*/, + pm->use_update_info); - if (fail(pm)) - return 0; + if (fail(pm)) + return 0; - /* Now validate the interlaced read side - do_interlace true, - * in the progressive case this does actually make a difference - * to the code used in the non-interlaced case too. - */ - standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/, - PNG_INTERLACE_NONE, w, h, 0), 1/*do_interlace*/, - pm->use_update_info); + /* Now validate the interlaced read side - do_interlace true, + * in the progressive case this does actually make a difference + * to the code used in the non-interlaced case too. + */ + standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), + 0/*palette*/, PNG_INTERLACE_NONE, w, h, 0), 1/*do_interlace*/, + pm->use_update_info); - if (fail(pm)) - return 0; + if (fail(pm)) + return 0; -# if CAN_WRITE_INTERLACE - /* Validate the pngvalid code itself: */ - standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/, - PNG_INTERLACE_ADAM7, w, h, 1), 1/*do_interlace*/, - pm->use_update_info); +# if CAN_WRITE_INTERLACE + /* Validate the pngvalid code itself: */ + standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), + 0/*palette*/, PNG_INTERLACE_ADAM7, w, h, 1), 1/*do_interlace*/, + pm->use_update_info); - if (fail(pm)) - return 0; -# endif + if (fail(pm)) + return 0; +# endif + } } } @@ -5927,45 +5934,48 @@ test_size(png_modifier* const pm, png_byte const colour_type, { png_uint_32 h, w; - for (h=1; h<=16; h+=hinc[bdlo]) for (w=1; w<=16; w+=winc[bdlo]) + for (h=1; h<=16; h+=hinc[bdlo]) { -# ifdef PNG_READ_INTERLACING_SUPPORTED - /* Test with pngvalid generated interlaced images first; we have - * already verify these are ok (unless pngvalid has self-consistent - * read/write errors, which is unlikely), so this detects errors in the - * read side first: - */ -# if CAN_WRITE_INTERLACE - standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/, - PNG_INTERLACE_ADAM7, w, h, 1), 0/*do_interlace*/, - pm->use_update_info); + for (w=1; w<=16; w+=winc[bdlo]) + { +# ifdef PNG_READ_INTERLACING_SUPPORTED + /* Test with pngvalid generated interlaced images first; we have + * already verify these are ok (unless pngvalid has self-consistent + * read/write errors, which is unlikely), so this detects errors in + * the read side first: + */ +# if CAN_WRITE_INTERLACE + standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), + 0/*palette*/, PNG_INTERLACE_ADAM7, w, h, 1), 0/*do_interlace*/, + pm->use_update_info); - if (fail(pm)) - return 0; -# endif -# endif /* READ_INTERLACING */ + if (fail(pm)) + return 0; +# endif +# endif /* READ_INTERLACING */ -# ifdef PNG_WRITE_INTERLACING_SUPPORTED - /* Test the libpng write side against the pngvalid read side: */ - standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/, - PNG_INTERLACE_ADAM7, w, h, 0), 1/*do_interlace*/, - pm->use_update_info); +# ifdef PNG_WRITE_INTERLACING_SUPPORTED + /* Test the libpng write side against the pngvalid read side: */ + standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), + 0/*palette*/, PNG_INTERLACE_ADAM7, w, h, 0), 1/*do_interlace*/, + pm->use_update_info); - if (fail(pm)) - return 0; -# endif + if (fail(pm)) + return 0; +# endif -# ifdef PNG_READ_INTERLACING_SUPPORTED -# ifdef PNG_WRITE_INTERLACING_SUPPORTED - /* Test both together: */ - standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), 0/*palette*/, - PNG_INTERLACE_ADAM7, w, h, 0), 0/*do_interlace*/, - pm->use_update_info); +# ifdef PNG_READ_INTERLACING_SUPPORTED +# ifdef PNG_WRITE_INTERLACING_SUPPORTED + /* Test both together: */ + standard_test(&pm->this, FILEID(colour_type, DEPTH(bdlo), + 0/*palette*/, PNG_INTERLACE_ADAM7, w, h, 0), 0/*do_interlace*/, + pm->use_update_info); - if (fail(pm)) - return 0; -# endif -# endif /* READ_INTERLACING */ + if (fail(pm)) + return 0; +# endif +# endif /* READ_INTERLACING */ + } } } @@ -6078,12 +6088,12 @@ image_pixel_init(image_pixel *this, png_const_bytep row, png_byte colour_type, png_byte bit_depth, png_uint_32 x, store_palette palette, const image_pixel *format /*from pngvalid transform of input*/) { - const png_byte sample_depth = (png_byte)(colour_type == - PNG_COLOR_TYPE_PALETTE ? 8 : bit_depth); - const unsigned int max = (1U<swap16); - const int littleendian = (format != 0 && format->littleendian); - const int sig_bits = (format != 0 && format->sig_bits); + png_byte sample_depth = + (png_byte)(colour_type == PNG_COLOR_TYPE_PALETTE ? 8 : bit_depth); + unsigned int max = (1U<swap16); + int littleendian = (format != 0 && format->littleendian); + int sig_bits = (format != 0 && format->sig_bits); /* Initially just set everything to the same number and the alpha to opaque. * Note that this currently assumes a simple palette where entry x has colour @@ -6101,7 +6111,7 @@ image_pixel_init(image_pixel *this, png_const_bytep row, png_byte colour_type, /* This permits the caller to default to the sample value. */ if (palette != 0) { - const unsigned int i = this->palette_index; + unsigned int i = this->palette_index; this->red = palette[i].red; this->green = palette[i].green; @@ -6225,7 +6235,7 @@ image_pixel_add_alpha(image_pixel *this, const standard_display *display, { if (this->colour_type == PNG_COLOR_TYPE_GRAY) { -# if PNG_LIBPNG_VER < 10700 +# if PNG_LIBPNG_VER != 10700 if (!for_background && this->bit_depth < 8) this->bit_depth = this->sample_depth = 8; # endif @@ -6235,7 +6245,7 @@ image_pixel_add_alpha(image_pixel *this, const standard_display *display, /* After 1.7 the expansion of bit depth only happens if there is a * tRNS chunk to expand at this point. */ -# if PNG_LIBPNG_VER >= 10700 +# if PNG_LIBPNG_VER == 10700 if (!for_background && this->bit_depth < 8) this->bit_depth = this->sample_depth = 8; # endif @@ -6432,8 +6442,8 @@ static void image_transform_mod_end(const image_transform *this, image_pixel *that, png_const_structp pp, const transform_display *display) { - const unsigned int scale = (1U<sample_depth)-1; - const int sig_bits = that->sig_bits; + unsigned int scale = (1U<sample_depth)-1; + int sig_bits = that->sig_bits; UNUSED(this) UNUSED(pp) @@ -6711,7 +6721,7 @@ transform_range_check(png_const_structp pp, unsigned int r, unsigned int g, unsigned int out, png_byte sample_depth, double err, double limit, const char *name, double digitization_error) { - /* Compare the scaled, digitzed, values of our local calculation (in+-err) + /* Compare the scaled, digitized, values of our local calculation (in+-err) * with the digitized values libpng produced; 'sample_depth' is the actual * digitization depth of the libpng output colors (the bit depth except for * palette images where it is always 8.) The check on 'err' is to detect @@ -6756,19 +6766,19 @@ transform_image_validate(transform_display *dp, png_const_structp pp, { /* Constants for the loop below: */ const png_store* const ps = dp->this.ps; - const png_byte in_ct = dp->this.colour_type; - const png_byte in_bd = dp->this.bit_depth; - const png_uint_32 w = dp->this.w; - const png_uint_32 h = dp->this.h; - const png_byte out_ct = dp->output_colour_type; - const png_byte out_bd = dp->output_bit_depth; - const png_byte sample_depth = (png_byte)(out_ct == - PNG_COLOR_TYPE_PALETTE ? 8 : out_bd); - const png_byte red_sBIT = dp->this.red_sBIT; - const png_byte green_sBIT = dp->this.green_sBIT; - const png_byte blue_sBIT = dp->this.blue_sBIT; - const png_byte alpha_sBIT = dp->this.alpha_sBIT; - const int have_tRNS = dp->this.is_transparent; + png_byte in_ct = dp->this.colour_type; + png_byte in_bd = dp->this.bit_depth; + png_uint_32 w = dp->this.w; + png_uint_32 h = dp->this.h; + png_byte out_ct = dp->output_colour_type; + png_byte out_bd = dp->output_bit_depth; + png_byte sample_depth = + (png_byte)(out_ct == PNG_COLOR_TYPE_PALETTE ? 8 : out_bd); + png_byte red_sBIT = dp->this.red_sBIT; + png_byte green_sBIT = dp->this.green_sBIT; + png_byte blue_sBIT = dp->this.blue_sBIT; + png_byte alpha_sBIT = dp->this.alpha_sBIT; + int have_tRNS = dp->this.is_transparent; double digitization_error; store_palette out_palette; @@ -6780,7 +6790,7 @@ transform_image_validate(transform_display *dp, png_const_structp pp, store_image_check(dp->this.ps, pp, 0); /* Read the palette corresponding to the output if the output colour type - * indicates a palette, othewise set out_palette to garbage. + * indicates a palette, otherwise set out_palette to garbage. */ if (out_ct == PNG_COLOR_TYPE_PALETTE) { @@ -6929,7 +6939,7 @@ transform_end(png_structp ppIn, png_infop pi) /* A single test run. */ static void -transform_test(png_modifier *pmIn, const png_uint_32 idIn, +transform_test(png_modifier *pmIn, png_uint_32 idIn, const image_transform* transform_listIn, const char * const name) { transform_display d; @@ -7116,7 +7126,7 @@ image_transform_png_set_tRNS_to_alpha_mod(const image_transform *this, image_pixel *that, png_const_structp pp, const transform_display *display) { -#if PNG_LIBPNG_VER < 10700 +#if PNG_LIBPNG_VER != 10700 /* LIBPNG BUG: this always forces palette images to RGB. */ if (that->colour_type == PNG_COLOR_TYPE_PALETTE) image_pixel_convert_PLTE(that); @@ -7126,13 +7136,13 @@ image_transform_png_set_tRNS_to_alpha_mod(const image_transform *this, * convert to an alpha channel. */ if (that->have_tRNS) -# if PNG_LIBPNG_VER >= 10700 +# if PNG_LIBPNG_VER == 10700 if (that->colour_type != PNG_COLOR_TYPE_PALETTE && (that->colour_type & PNG_COLOR_MASK_ALPHA) == 0) # endif image_pixel_add_alpha(that, &display->this, 0/*!for background*/); -#if PNG_LIBPNG_VER < 10700 +#if PNG_LIBPNG_VER != 10700 /* LIBPNG BUG: otherwise libpng still expands to 8 bits! */ else { @@ -7161,7 +7171,7 @@ image_transform_png_set_tRNS_to_alpha_add(image_transform *this, * any action on a palette image. */ return -# if PNG_LIBPNG_VER >= 10700 +# if PNG_LIBPNG_VER == 10700 colour_type != PNG_COLOR_TYPE_PALETTE && # endif (colour_type & PNG_COLOR_MASK_ALPHA) == 0; @@ -7302,7 +7312,7 @@ image_transform_png_set_expand_gray_1_2_4_to_8_mod( const image_transform *this, image_pixel *that, png_const_structp pp, const transform_display *display) { -#if PNG_LIBPNG_VER < 10700 +#if PNG_LIBPNG_VER != 10700 image_transform_png_set_expand_mod(this, that, pp, display); #else /* Only expand grayscale of bit depth less than 8: */ @@ -7318,7 +7328,7 @@ static int image_transform_png_set_expand_gray_1_2_4_to_8_add(image_transform *this, const image_transform **that, png_byte colour_type, png_byte bit_depth) { -#if PNG_LIBPNG_VER < 10700 +#if PNG_LIBPNG_VER != 10700 return image_transform_png_set_expand_add(this, that, colour_type, bit_depth); #else @@ -7348,7 +7358,7 @@ image_transform_png_set_expand_16_set(const image_transform *this, png_set_expand_16(pp); /* NOTE: prior to 1.7 libpng does SET_EXPAND as well, so tRNS is expanded. */ -# if PNG_LIBPNG_VER < 10700 +# if PNG_LIBPNG_VER != 10700 if (that->this.has_tRNS) that->this.is_transparent = 1; # endif @@ -7401,7 +7411,7 @@ image_transform_png_set_scale_16_set(const image_transform *this, transform_display *that, png_structp pp, png_infop pi) { png_set_scale_16(pp); -# if PNG_LIBPNG_VER < 10700 +# if PNG_LIBPNG_VER != 10700 /* libpng will limit the gamma table size: */ that->max_gamma_8 = PNG_MAX_GAMMA_8; # endif @@ -7449,7 +7459,7 @@ image_transform_png_set_strip_16_set(const image_transform *this, transform_display *that, png_structp pp, png_infop pi) { png_set_strip_16(pp); -# if PNG_LIBPNG_VER < 10700 +# if PNG_LIBPNG_VER != 10700 /* libpng will limit the gamma table size: */ that->max_gamma_8 = PNG_MAX_GAMMA_8; # endif @@ -7635,8 +7645,8 @@ image_transform_png_set_rgb_to_gray_ini(const image_transform *this, else { - /* The default (built in) coeffcients, as above: */ -# if PNG_LIBPNG_VER < 10700 + /* The default (built in) coefficients, as above: */ +# if PNG_LIBPNG_VER != 10700 data.red_coefficient = 6968 / 32768.; data.green_coefficient = 23434 / 32768.; data.blue_coefficient = 2366 / 32768.; @@ -7719,7 +7729,7 @@ image_transform_png_set_rgb_to_gray_ini(const image_transform *this, * conversion adds another +/-2 in the 16-bit case and * +/-(1<<(15-PNG_MAX_GAMMA_8)) in the 8-bit case. */ -# if PNG_LIBPNG_VER < 10700 +# if PNG_LIBPNG_VER != 10700 if (that->this.bit_depth < 16) that->max_gamma_8 = PNG_MAX_GAMMA_8; # endif @@ -7764,7 +7774,7 @@ static void image_transform_png_set_rgb_to_gray_set(const image_transform *this, transform_display *that, png_structp pp, png_infop pi) { - const int error_action = 1; /* no error, no defines in png.h */ + int error_action = 1; /* no error, no defines in png.h */ # ifdef PNG_FLOATING_POINT_SUPPORTED png_set_rgb_to_gray(pp, error_action, data.red_to_set, data.green_to_set); @@ -7896,7 +7906,7 @@ image_transform_png_set_rgb_to_gray_mod(const image_transform *this, { double gray, err; -# if PNG_LIBPNG_VER < 10700 +# if PNG_LIBPNG_VER != 10700 if (that->colour_type == PNG_COLOR_TYPE_PALETTE) image_pixel_convert_PLTE(that); # endif @@ -7905,10 +7915,10 @@ image_transform_png_set_rgb_to_gray_mod(const image_transform *this, # if DIGITIZE { png_modifier *pm = display->pm; - const unsigned int sample_depth = that->sample_depth; - const unsigned int calc_depth = (pm->assume_16_bit_calculations ? 16 : + unsigned int sample_depth = that->sample_depth; + unsigned int calc_depth = (pm->assume_16_bit_calculations ? 16 : sample_depth); - const unsigned int gamma_depth = + unsigned int gamma_depth = (sample_depth == 16 ? display->max_gamma_8 : (pm->assume_16_bit_calculations ? @@ -7991,7 +8001,7 @@ image_transform_png_set_rgb_to_gray_mod(const image_transform *this, /* Now calculate the actual gray values. Although the error in the * coefficients depends on whether they were specified on the command * line (in which case truncation to 15 bits happened) or not (rounding - * was used) the maxium error in an individual coefficient is always + * was used) the maximum error in an individual coefficient is always * 2/32768, because even in the rounding case the requirement that * coefficients add up to 32768 can cause a larger rounding error. * @@ -8002,7 +8012,7 @@ image_transform_png_set_rgb_to_gray_mod(const image_transform *this, b * data.blue_coefficient; { - const int do_round = data.gamma != 1 || calc_depth == 16; + int do_round = data.gamma != 1 || calc_depth == 16; const double ce = 2. / 32768; graylo = DD(rlo * (data.red_coefficient-ce) + @@ -8083,7 +8093,7 @@ image_transform_png_set_rgb_to_gray_mod(const image_transform *this, double b = that->bluef; double be = that->bluee; -# if PNG_LIBPNG_VER < 10700 +# if PNG_LIBPNG_VER != 10700 /* The true gray case involves no math in earlier versions (not * true, there was some if gamma correction was happening too.) */ @@ -8207,7 +8217,7 @@ image_transform_png_set_rgb_to_gray_mod(const image_transform *this, that->bluef = that->greenf = that->redf = gray; that->bluee = that->greene = that->rede = err; - /* The sBIT is the minium of the three colour channel sBITs. */ + /* The sBIT is the minimum of the three colour channel sBITs. */ if (that->red_sBIT > that->green_sBIT) that->red_sBIT = that->green_sBIT; if (that->red_sBIT > that->blue_sBIT) @@ -8626,7 +8636,7 @@ image_transform_png_set_filler_mod(const image_transform *this, (that->colour_type == PNG_COLOR_TYPE_RGB || that->colour_type == PNG_COLOR_TYPE_GRAY)) { - const unsigned int max = (1U << that->bit_depth)-1; + unsigned int max = (1U << that->bit_depth)-1; that->alpha = data.filler & max; that->alphaf = ((double)that->alpha) / max; that->alphae = 0; @@ -8693,7 +8703,7 @@ image_transform_png_set_add_alpha_mod(const image_transform *this, (that->colour_type == PNG_COLOR_TYPE_RGB || that->colour_type == PNG_COLOR_TYPE_GRAY)) { - const unsigned int max = (1U << that->bit_depth)-1; + unsigned int max = (1U << that->bit_depth)-1; that->alpha = data.filler & max; that->alphaf = ((double)that->alpha) / max; that->alphae = 0; @@ -8884,7 +8894,7 @@ image_transform_png_set_shift_set(const image_transform *this, * field is randomized independently. This acts as a check that * libpng does use the correct field. */ - const unsigned int depth = that->this.bit_depth; + unsigned int depth = that->this.bit_depth; data.red = (png_byte)/*SAFE*/(random_mod(depth)+1); data.green = (png_byte)/*SAFE*/(random_mod(depth)+1); @@ -9057,7 +9067,7 @@ image_transform_reset_count(void) static int image_transform_test_counter(png_uint_32 counter, unsigned int max) { - /* Test the list to see if there is any point contining, given a current + /* Test the list to see if there is any point continuing, given a current * counter and a 'max' value. */ image_transform *next = image_transform_first; @@ -9299,12 +9309,12 @@ gamma_info_imp(gamma_display *dp, png_structp pp, png_infop pi) int mode = dp->do_background - ALPHA_MODE_OFFSET; /* The gamma value is the output gamma, and is in the standard, - * non-inverted, represenation. It provides a default for the PNG file + * non-inverted, representation. It provides a default for the PNG file * gamma, but since the file has a gAMA chunk this does not matter. */ const double sg = dp->screen_gamma; # ifndef PNG_FLOATING_POINT_SUPPORTED - const png_fixed_point g = fix(sg); + png_fixed_point g = fix(sg); # endif # ifdef PNG_FLOATING_POINT_SUPPORTED @@ -9352,7 +9362,7 @@ gamma_info_imp(gamma_display *dp, png_structp pp, png_infop pi) */ const double bg = dp->background_gamma; # ifndef PNG_FLOATING_POINT_SUPPORTED - const png_fixed_point g = fix(bg); + png_fixed_point g = fix(bg); # endif # ifdef PNG_FLOATING_POINT_SUPPORTED @@ -9426,7 +9436,7 @@ static void init_validate_info(validate_info *vi, gamma_display *dp, png_const_structp pp, int in_depth, int out_depth) { - const unsigned int outmax = (1U<pp = pp; vi->dp = dp; @@ -9588,14 +9598,14 @@ gamma_component_compose(int do_background, double input_sample, double alpha, /* This API returns the encoded *input* component, in the range 0..1 */ static double gamma_component_validate(const char *name, const validate_info *vi, - const unsigned int id, const unsigned int od, + unsigned int id, unsigned int od, const double alpha /* <0 for the alpha channel itself */, const double background /* component background value */) { - const unsigned int isbit = id >> vi->isbit_shift; - const unsigned int sbit_max = vi->sbit_max; - const unsigned int outmax = vi->outmax; - const int do_background = vi->do_background; + unsigned int isbit = id >> vi->isbit_shift; + unsigned int sbit_max = vi->sbit_max; + unsigned int outmax = vi->outmax; + int do_background = vi->do_background; double i; @@ -9746,7 +9756,7 @@ gamma_component_validate(const char *name, const validate_info *vi, * * pngvalid calculations: * input_sample: linear result; i linearized and composed, range 0..1 - * encoded_sample: encoded result; input_sample scaled to ouput bit depth + * encoded_sample: encoded result; input_sample scaled to output bit depth * * libpng calculations: * output: linear result; od scaled to 0..1 and linearized @@ -9862,7 +9872,7 @@ gamma_component_validate(const char *name, const validate_info *vi, * lost. This can result in up to a +/-1 error in the presence of * an sbit less than the bit depth. */ -# if PNG_LIBPNG_VER < 10700 +# if PNG_LIBPNG_VER != 10700 # define SBIT_ERROR .5 # else # define SBIT_ERROR 1. @@ -10001,9 +10011,12 @@ gamma_component_validate(const char *name, const validate_info *vi, case ALPHA_MODE_OFFSET + PNG_ALPHA_BROKEN: case ALPHA_MODE_OFFSET + PNG_ALPHA_OPTIMIZED: # endif /* ALPHA_MODE_SUPPORTED */ +# if (defined PNG_READ_BACKGROUND_SUPPORTED) ||\ + (defined PNG_READ_ALPHA_MODE_SUPPORTED) do_compose = (alpha > 0 && alpha < 1); use_input = (alpha != 0); break; +# endif default: break; @@ -10161,13 +10174,13 @@ gamma_image_validate(gamma_display *dp, png_const_structp pp, { /* Get some constants derived from the input and output file formats: */ const png_store* const ps = dp->this.ps; - const png_byte in_ct = dp->this.colour_type; - const png_byte in_bd = dp->this.bit_depth; - const png_uint_32 w = dp->this.w; - const png_uint_32 h = dp->this.h; + png_byte in_ct = dp->this.colour_type; + png_byte in_bd = dp->this.bit_depth; + png_uint_32 w = dp->this.w; + png_uint_32 h = dp->this.h; const size_t cbRow = dp->this.cbRow; - const png_byte out_ct = png_get_color_type(pp, pi); - const png_byte out_bd = png_get_bit_depth(pp, pi); + png_byte out_ct = png_get_color_type(pp, pi); + png_byte out_bd = png_get_bit_depth(pp, pi); /* There are three sources of error, firstly the quantization in the * file encoding, determined by sbit and/or the file depth, secondly @@ -10183,10 +10196,10 @@ gamma_image_validate(gamma_display *dp, png_const_structp pp, * Since the library must quantize the output to 8 or 16 bits there is * a fundamental limit on the accuracy of the output of +/-.5 - this * quantization limit is included in addition to the other limits - * specified by the paramaters to the API. (Effectively, add .5 + * specified by the parameters to the API. (Effectively, add .5 * everywhere.) * - * The behavior of the 'sbit' paramter is defined by section 12.5 + * The behavior of the 'sbit' parameter is defined by section 12.5 * (sample depth scaling) of the PNG spec. That section forces the * decoder to assume that the PNG values have been scaled if sBIT is * present: @@ -10208,11 +10221,11 @@ gamma_image_validate(gamma_display *dp, png_const_structp pp, * The basic tests below do not do this, however if 'use_input_precision' * is set a subsequent test is performed above. */ - const unsigned int samples_per_pixel = (out_ct & 2U) ? 3U : 1U; + unsigned int samples_per_pixel = (out_ct & 2U) ? 3U : 1U; int processing; png_uint_32 y; const store_palette_entry *in_palette = dp->this.palette; - const int in_is_transparent = dp->this.is_transparent; + int in_is_transparent = dp->this.is_transparent; int process_tRNS; int out_npalette = -1; int out_is_transparent = 0; /* Just refers to the palette case */ @@ -10260,9 +10273,9 @@ gamma_image_validate(gamma_display *dp, png_const_structp pp, double alpha = 1; /* serves as a flag value */ /* Record the palette index for index images. */ - const unsigned int in_index = + unsigned int in_index = in_ct == 3 ? sample(std, 3, in_bd, x, 0, 0, 0) : 256; - const unsigned int out_index = + unsigned int out_index = out_ct == 3 ? sample(std, 3, out_bd, x, 0, 0, 0) : 256; /* Handle input alpha - png_set_background will cause the output @@ -10271,7 +10284,7 @@ gamma_image_validate(gamma_display *dp, png_const_structp pp, if ((in_ct & PNG_COLOR_MASK_ALPHA) != 0 || (in_ct == 3 && in_is_transparent)) { - const unsigned int input_alpha = in_ct == 3 ? + unsigned int input_alpha = in_ct == 3 ? dp->this.palette[in_index].alpha : sample(std, in_ct, in_bd, x, samples_per_pixel, 0, 0); @@ -10396,14 +10409,14 @@ gamma_end(png_structp ppIn, png_infop pi) * maxpc: maximum percentage error (as a percentage) */ static void -gamma_test(png_modifier *pmIn, const png_byte colour_typeIn, - const png_byte bit_depthIn, const int palette_numberIn, - const int interlace_typeIn, +gamma_test(png_modifier *pmIn, png_byte colour_typeIn, + png_byte bit_depthIn, int palette_numberIn, + int interlace_typeIn, const double file_gammaIn, const double screen_gammaIn, - const png_byte sbitIn, const int threshold_testIn, + png_byte sbitIn, int threshold_testIn, const char *name, - const int use_input_precisionIn, const int scale16In, - const int expand16In, const int do_backgroundIn, + int use_input_precisionIn, int scale16In, + int expand16In, int do_backgroundIn, const png_color_16 *bkgd_colorIn, double bkgd_gammaIn) { gamma_display d; @@ -10607,11 +10620,11 @@ perform_gamma_threshold_tests(png_modifier *pm) } static void gamma_transform_test(png_modifier *pm, - const png_byte colour_type, const png_byte bit_depth, - const int palette_number, - const int interlace_type, const double file_gamma, - const double screen_gamma, const png_byte sbit, - const int use_input_precision, const int scale16) + png_byte colour_type, png_byte bit_depth, + int palette_number, + int interlace_type, const double file_gamma, + const double screen_gamma, png_byte sbit, + int use_input_precision, int scale16) { size_t pos = 0; char name[64]; @@ -10649,16 +10662,21 @@ static void perform_gamma_transform_tests(png_modifier *pm) { unsigned int i, j; - for (i=0; ingamma_tests; ++i) for (j=0; jngamma_tests; ++j) - if (i != j) + for (i=0; ingamma_tests; ++i) + { + for (j=0; jngamma_tests; ++j) { - gamma_transform_test(pm, colour_type, bit_depth, palette_number, - pm->interlace_type, 1/pm->gammas[i], pm->gammas[j], 0/*sBIT*/, - pm->use_input_precision, 0 /*do not scale16*/); + if (i != j) + { + gamma_transform_test(pm, colour_type, bit_depth, palette_number, + pm->interlace_type, 1/pm->gammas[i], pm->gammas[j], + 0/*sBIT*/, pm->use_input_precision, 0/*do not scale16*/); - if (fail(pm)) - return; + if (fail(pm)) + return; + } } + } } } @@ -10687,14 +10705,17 @@ static void perform_gamma_sbit_tests(png_modifier *pm) { unsigned int j; - for (j=0; jngamma_tests; ++j) if (i != j) + for (j=0; jngamma_tests; ++j) { - gamma_transform_test(pm, colour_type, bit_depth, npalette, - pm->interlace_type, 1/pm->gammas[i], pm->gammas[j], - sbit, pm->use_input_precision_sbit, 0 /*scale16*/); + if (i != j) + { + gamma_transform_test(pm, colour_type, bit_depth, npalette, + pm->interlace_type, 1/pm->gammas[i], pm->gammas[j], + sbit, pm->use_input_precision_sbit, 0 /*scale16*/); - if (fail(pm)) - return; + if (fail(pm)) + return; + } } } } @@ -10711,7 +10732,7 @@ static void perform_gamma_scale16_tests(png_modifier *pm) # ifndef PNG_MAX_GAMMA_8 # define PNG_MAX_GAMMA_8 11 # endif -# if defined PNG_MAX_GAMMA_8 || PNG_LIBPNG_VER < 10700 +# if defined PNG_MAX_GAMMA_8 || PNG_LIBPNG_VER != 10700 # define SBIT_16_TO_8 PNG_MAX_GAMMA_8 # else # define SBIT_16_TO_8 16 @@ -10768,12 +10789,12 @@ static void perform_gamma_scale16_tests(png_modifier *pm) #if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\ defined(PNG_READ_ALPHA_MODE_SUPPORTED) static void gamma_composition_test(png_modifier *pm, - const png_byte colour_type, const png_byte bit_depth, - const int palette_number, - const int interlace_type, const double file_gamma, + png_byte colour_type, png_byte bit_depth, + int palette_number, + int interlace_type, const double file_gamma, const double screen_gamma, - const int use_input_precision, const int do_background, - const int expand_16) + int use_input_precision, int do_background, + int expand_16) { size_t pos = 0; png_const_charp base; @@ -10946,14 +10967,17 @@ perform_gamma_composition_tests(png_modifier *pm, int do_background, unsigned int i, j; /* Don't skip the i==j case here - it's relevant. */ - for (i=0; ingamma_tests; ++i) for (j=0; jngamma_tests; ++j) + for (i=0; ingamma_tests; ++i) { - gamma_composition_test(pm, colour_type, bit_depth, palette_number, - pm->interlace_type, 1/pm->gammas[i], pm->gammas[j], - pm->use_input_precision, do_background, expand_16); + for (j=0; jngamma_tests; ++j) + { + gamma_composition_test(pm, colour_type, bit_depth, palette_number, + pm->interlace_type, 1/pm->gammas[i], pm->gammas[j], + pm->use_input_precision, do_background, expand_16); - if (fail(pm)) - return; + if (fail(pm)) + return; + } } } } @@ -11056,7 +11080,7 @@ perform_gamma_test(png_modifier *pm, int summary) pm->calculations_use_input_precision = 0; if (summary) - summarize_gamma_errors(pm, 0/*who*/, 1/*low bit depth*/, 1/*indexed*/); + summarize_gamma_errors(pm, NULL/*who*/, 1/*low bit depth*/, 1/*indexed*/); if (fail(pm)) return; @@ -11182,8 +11206,10 @@ png_pass_start_row(int pass) { int x, y; ++pass; - for (y=0; y<8; ++y) for (x=0; x<8; ++x) if (adam7[y][x] == pass) - return y; + for (y=0; y<8; ++y) + for (x=0; x<8; ++x) + if (adam7[y][x] == pass) + return y; return 0xf; } @@ -11192,8 +11218,10 @@ png_pass_start_col(int pass) { int x, y; ++pass; - for (x=0; x<8; ++x) for (y=0; y<8; ++y) if (adam7[y][x] == pass) - return x; + for (x=0; x<8; ++x) + for (y=0; y<8; ++y) + if (adam7[y][x] == pass) + return x; return 0xf; } @@ -11202,18 +11230,24 @@ png_pass_row_shift(int pass) { int x, y, base=(-1), inc=8; ++pass; - for (y=0; y<8; ++y) for (x=0; x<8; ++x) if (adam7[y][x] == pass) + for (y=0; y<8; ++y) { - if (base == (-1)) - base = y; - else if (base == y) - {} - else if (inc == y-base) - base=y; - else if (inc == 8) - inc = y-base, base=y; - else if (inc != y-base) - return 0xff; /* error - more than one 'inc' value! */ + for (x=0; x<8; ++x) + { + if (adam7[y][x] == pass) + { + if (base == (-1)) + base = y; + else if (base == y) + {} + else if (inc == y-base) + base=y; + else if (inc == 8) + inc = y-base, base=y; + else if (inc != y-base) + return 0xff; /* error - more than one 'inc' value! */ + } + } } if (base == (-1)) return 0xfe; /* error - no row in pass! */ @@ -11236,18 +11270,24 @@ png_pass_col_shift(int pass) { int x, y, base=(-1), inc=8; ++pass; - for (x=0; x<8; ++x) for (y=0; y<8; ++y) if (adam7[y][x] == pass) + for (x=0; x<8; ++x) { - if (base == (-1)) - base = x; - else if (base == x) - {} - else if (inc == x-base) - base=x; - else if (inc == 8) - inc = x-base, base=x; - else if (inc != x-base) - return 0xff; /* error - more than one 'inc' value! */ + for (y=0; y<8; ++y) + { + if (adam7[y][x] == pass) + { + if (base == (-1)) + base = x; + else if (base == x) + {} + else if (inc == x-base) + base=x; + else if (inc == 8) + inc = x-base, base=x; + else if (inc != x-base) + return 0xff; /* error - more than one 'inc' value! */ + } + } } if (base == (-1)) return 0xfe; /* error - no row in pass! */ @@ -11311,8 +11351,9 @@ png_row_in_interlace_pass(png_uint_32 y, int pass) int x; y &= 7; ++pass; - for (x=0; x<8; ++x) if (adam7[y][x] == pass) - return 1; + for (x=0; x<8; ++x) + if (adam7[y][x] == pass) + return 1; return 0; } @@ -11324,8 +11365,9 @@ png_col_in_interlace_pass(png_uint_32 x, int pass) int y; x &= 7; ++pass; - for (y=0; y<8; ++y) if (adam7[y][x] == pass) - return 1; + for (y=0; y<8; ++y) + if (adam7[y][x] == pass) + return 1; return 0; } @@ -11339,11 +11381,17 @@ png_pass_rows(png_uint_32 height, int pass) height &= 7; ++pass; - for (y=0; y<8; ++y) for (x=0; x<8; ++x) if (adam7[y][x] == pass) + for (y=0; y<8; ++y) { - rows += tiles; - if (y < height) ++rows; - break; /* i.e. break the 'x', column, loop. */ + for (x=0; x<8; ++x) + { + if (adam7[y][x] == pass) + { + rows += tiles; + if (y < height) ++rows; + break; /* i.e. break the 'x', column, loop. */ + } + } } return rows; @@ -11358,11 +11406,17 @@ png_pass_cols(png_uint_32 width, int pass) width &= 7; ++pass; - for (x=0; x<8; ++x) for (y=0; y<8; ++y) if (adam7[y][x] == pass) + for (x=0; x<8; ++x) { - cols += tiles; - if (x < width) ++cols; - break; /* i.e. break the 'y', row, loop. */ + for (y=0; y<8; ++y) + { + if (adam7[y][x] == pass) + { + cols += tiles; + if (x < width) ++cols; + break; /* i.e. break the 'y', row, loop. */ + } + } } return cols; @@ -11681,7 +11735,7 @@ int main(int argc, char **argv) * code that 16-bit arithmetic is used for 8-bit samples when it would make a * difference. */ - pm.assume_16_bit_calculations = PNG_LIBPNG_VER >= 10700; + pm.assume_16_bit_calculations = PNG_LIBPNG_VER == 10700; /* Currently 16 bit expansion happens at the end of the pipeline, so the * calculations are done in the input bit depth not the output. @@ -11705,13 +11759,13 @@ int main(int argc, char **argv) pm.test_lbg_gamma_threshold = 1; pm.test_lbg_gamma_transform = PNG_LIBPNG_VER >= 10600; pm.test_lbg_gamma_sbit = 1; - pm.test_lbg_gamma_composition = PNG_LIBPNG_VER >= 10700; + pm.test_lbg_gamma_composition = PNG_LIBPNG_VER == 10700; /* And the test encodings */ pm.encodings = test_encodings; pm.nencodings = ARRAY_SIZE(test_encodings); -# if PNG_LIBPNG_VER < 10700 +# if PNG_LIBPNG_VER != 10700 pm.sbitlow = 8U; /* because libpng doesn't do sBIT below 8! */ # else pm.sbitlow = 1U; @@ -11719,7 +11773,7 @@ int main(int argc, char **argv) /* The following allows results to pass if they correspond to anything in the * transformed range [input-.5,input+.5]; this is is required because of the - * way libpng treates the 16_TO_8 flag when building the gamma tables in + * way libpng treats the 16_TO_8 flag when building the gamma tables in * releases up to 1.6.0. * * TODO: review this @@ -11729,7 +11783,7 @@ int main(int argc, char **argv) /* Some default values (set the behavior for 'make check' here). * These values simply control the maximum error permitted in the gamma - * transformations. The practial limits for human perception are described + * transformations. The practical limits for human perception are described * below (the setting for maxpc16), however for 8 bit encodings it isn't * possible to meet the accepted capabilities of human vision - i.e. 8 bit * images can never be good enough, regardless of encoding. @@ -11741,7 +11795,7 @@ int main(int argc, char **argv) pm.maxout16 = .499; /* Error in *encoded* value */ pm.maxabs16 = .00005;/* 1/20000 */ pm.maxcalc16 =1./65535;/* +/-1 in 16 bits for compose errors */ -# if PNG_LIBPNG_VER < 10700 +# if PNG_LIBPNG_VER != 10700 pm.maxcalcG = 1./((1< 0) + { if (strcmp(*++argv, "-a") == 0) showall = 1; else if (strcmp(*argv, "-e") == 0 && argc > 0) @@ -105,10 +104,11 @@ int validation_ascii_to_fp(int count, int argc, char **argv) fprintf(stderr, "unknown argument %s\n", *argv); return 1; } + } do { - png_size_t index; + size_t index; int state, failed = 0; char buffer[64]; @@ -130,8 +130,8 @@ int validation_ascii_to_fp(int count, int argc, char **argv) */ if (buffer[precision+7] != 71) { - fprintf(stderr, "%g[%d] -> '%s'[%lu] buffer overflow\n", test, - precision, buffer, (unsigned long)strlen(buffer)); + fprintf(stderr, "%g[%d] -> '%s'[%lu] buffer overflow\n", + test, precision, buffer, (unsigned long)strlen(buffer)); failed = 1; } @@ -146,16 +146,16 @@ int validation_ascii_to_fp(int count, int argc, char **argv) if (test >= 0 && strcmp(buffer, "inf") || test < 0 && strcmp(buffer, "-inf")) { - fprintf(stderr, "%g[%d] -> '%s' but expected 'inf'\n", test, - precision, buffer); + fprintf(stderr, "%g[%d] -> '%s' but expected 'inf'\n", + test, precision, buffer); failed = 1; } } else if (!png_check_fp_number(buffer, precision+10, &state, &index) || buffer[index] != 0) { - fprintf(stderr, "%g[%d] -> '%s' but has bad format ('%c')\n", test, - precision, buffer, buffer[index]); + fprintf(stderr, "%g[%d] -> '%s' but has bad format ('%c')\n", + test, precision, buffer, buffer[index]); failed = 1; } else if (PNG_FP_IS_NEGATIVE(state) && !(test < 0)) @@ -176,7 +176,7 @@ int validation_ascii_to_fp(int count, int argc, char **argv) } else if (PNG_FP_IS_POSITIVE(state) && !(test > 0)) { - fprintf(stderr, "%g[%d] -> '%s' but postive value not so reported\n", + fprintf(stderr, "%g[%d] -> '%s' but positive value not so reported\n", test, precision, buffer); failed = 1; assert(!PNG_FP_IS_NEGATIVE(state)); @@ -187,7 +187,7 @@ int validation_ascii_to_fp(int count, int argc, char **argv) /* Check the result against the original. */ double out = atof(buffer); double change = fabs((out - test)/test); - double allow = .5/pow(10, + double allow = .5 / pow(10, (precision >= DBL_DIG) ? DBL_DIG-1 : precision-1); /* NOTE: if you hit this error case are you compiling with gcc @@ -257,8 +257,9 @@ int validation_ascii_to_fp(int count, int argc, char **argv) } while (--count); - printf("Tested %d finite values, %d non-finite, %d OK (%d failed) %d minor " - "arithmetic errors\n", finite, nonfinite, ok, failcount, minorarith); + printf("Tested %d finite values, %d non-finite, %d OK (%d failed) " + "%d minor arithmetic errors\n", + finite, nonfinite, ok, failcount, minorarith); printf(" Error with >=%d digit precision %.2f%%\n", DBL_DIG, max_abs); printf(" Error with < %d digit precision %.2f%%\n", DBL_DIG, max); @@ -329,10 +330,10 @@ static int check_one_character(checkfp_command *co, checkfp_control c, int ch) { /* Test this character (ch) to ensure the parser does the correct thing. */ - png_size_t index = 0; + size_t index = 0; const char test = (char)ch; - const int number_is_valid = png_check_fp_number(&test, 1, &c.state, &index); - const int character_accepted = (index == 1); + int number_is_valid = png_check_fp_number(&test, 1, &c.state, &index); + int character_accepted = (index == 1); if (c.check_state != exponent && isdigit(ch) && ch != '0') c.is_zero = 0; @@ -371,8 +372,8 @@ static int check_one_character(checkfp_command *co, checkfp_control c, int ch) /* This should never fail (it's a serious bug if it does): */ if (index != 0 && index != 1) { - fprintf(stderr, "%s: read beyond end of string (%lu)\n", co->number, - (unsigned long)index); + fprintf(stderr, "%s: read beyond end of string (%lu)\n", + co->number, (unsigned long)index); return 0; } @@ -503,8 +504,8 @@ static int check_one_character(checkfp_command *co, checkfp_control c, int ch) if (number_is_valid != c.number_was_valid) { fprintf(stderr, - "%s: character '%c' [0x%.2x] changed number validity\n", co->number, - ch, ch); + "%s: character '%c' [0x%.2x] changed number validity\n", + co->number, ch, ch); return 0; } @@ -521,10 +522,13 @@ static int check_all_characters(checkfp_command *co, checkfp_control c) { int ch; - if (c.cnumber+4 < sizeof co->number) for (ch=0; ch<256; ++ch) + if (c.cnumber+4 < sizeof co->number) { - if (!check_one_character(co, c, ch)) - return 0; + for (ch=0; ch<256; ++ch) + { + if (!check_one_character(co, c, ch)) + return 0; + } } return 1; @@ -539,10 +543,13 @@ static int check_some_characters(checkfp_command *co, checkfp_control c, if (c.cnumber+4 < sizeof co->number && c.limit >= 0) { - if (c.limit > 0) for (i=0; tests[i]; ++i) + if (c.limit > 0) { - if (!check_one_character(co, c, tests[i])) - return 0; + for (i=0; tests[i]; ++i) + { + if (!check_one_character(co, c, tests[i])) + return 0; + } } /* At the end check all the characters. */ @@ -616,10 +623,10 @@ int validation_muldiv(int count, int argc, char **argv) png_int_32 times, div; while (--argc > 0) - { - fprintf(stderr, "unknown argument %s\n", *++argv); - return 1; - } + { + fprintf(stderr, "unknown argument %s\n", *++argv); + return 1; + } /* Find out about the random number generator. */ randbuffer = RAND_MAX; @@ -687,25 +694,25 @@ int validation_muldiv(int count, int argc, char **argv) ok = 0, ++overflow, fpround = fp/*misleading*/; if (verbose) - fprintf(stderr, "TEST %d * %d / %d -> %lld (%s)\n", a, times, div, - fp, ok ? "ok" : "overflow"); + fprintf(stderr, "TEST %d * %d / %d -> %lld (%s)\n", + a, times, div, fp, ok ? "ok" : "overflow"); ++tested; if (png_muldiv(&result, a, times, div) != ok) { ++error; if (ok) - fprintf(stderr, "%d * %d / %d -> overflow (expected %lld)\n", a, - times, div, fp); + fprintf(stderr, "%d * %d / %d -> overflow (expected %lld)\n", + a, times, div, fp); else - fprintf(stderr, "%d * %d / %d -> %d (expected overflow %lld)\n", a, - times, div, result, fp); + fprintf(stderr, "%d * %d / %d -> %d (expected overflow %lld)\n", + a, times, div, result, fp); } else if (ok && result != fpround) { ++error; - fprintf(stderr, "%d * %d / %d -> %d not %lld\n", a, times, div, result, - fp); + fprintf(stderr, "%d * %d / %d -> %d not %lld\n", + a, times, div, result, fp); } else ++passed; @@ -721,8 +728,8 @@ int validation_muldiv(int count, int argc, char **argv) } while (--count > 0); - printf("%d tests including %d overflows, %d passed, %d failed (%d 64-bit " - "errors)\n", tested, overflow, passed, error, error64); + printf("%d tests including %d overflows, %d passed, %d failed " + "(%d 64-bit errors)\n", tested, overflow, passed, error, error64); return 0; } @@ -821,8 +828,9 @@ int validation_gamma(int argc, char **argv) { if (error > .68) /* By experiment error is less than .68 */ { - fprintf(stderr, "16-bit log error: %d: got %u, expected %f" - " error: %f\n", i, png_log16bit(i), correct, error); + fprintf(stderr, + "16-bit log error: %d: got %u, expected %f error: %f\n", + i, png_log16bit(i), correct, error); } } } @@ -841,8 +849,9 @@ int validation_gamma(int argc, char **argv) maxerr = fabs(error); if (fabs(error) > 1883) /* By experiment. */ { - fprintf(stderr, "32-bit exp error: %d: got %u, expected %f" - " error: %f\n", i, png_exp(i), correct, error); + fprintf(stderr, + "32-bit exp error: %d: got %u, expected %f error: %f\n", + i, png_exp(i), correct, error); } } @@ -859,8 +868,9 @@ int validation_gamma(int argc, char **argv) maxerr = fabs(error); if (fabs(error) > .50002) /* By experiment */ { - fprintf(stderr, "8-bit exp error: %d: got %u, expected %f" - " error: %f\n", i, png_exp8bit(i), correct, error); + fprintf(stderr, + "8-bit exp error: %d: got %u, expected %f error: %f\n", + i, png_exp8bit(i), correct, error); } } @@ -877,8 +887,9 @@ int validation_gamma(int argc, char **argv) maxerr = fabs(error); if (fabs(error) > .524) /* By experiment */ { - fprintf(stderr, "16-bit exp error: %d: got %u, expected %f" - " error: %f\n", i, png_exp16bit(i), correct, error); + fprintf(stderr, + "16-bit exp error: %d: got %u, expected %f error: %f\n", + i, png_exp16bit(i), correct, error); } } @@ -940,7 +951,7 @@ int validation_gamma(int argc, char **argv) /**************************** VALIDATION TESTS ********************************/ /* Various validation routines are included herein, they require some - * definition for png_warning and png_error, seetings of VALIDATION: + * definition for png_warning and png_error, settings of VALIDATION: * * 1: validates the ASCII to floating point conversions * 2: validates png_muldiv diff --git a/vs/libpng/contrib/libtests/timepng.c b/vs/libpng/contrib/libtests/timepng.c index 3bcfde5a359..a66f51345f8 100644 --- a/vs/libpng/contrib/libtests/timepng.c +++ b/vs/libpng/contrib/libtests/timepng.c @@ -2,8 +2,6 @@ * * Copyright (c) 2013,2016 John Cunningham Bowler * - * Last changed in libpng 1.6.22 [May 26, 2016] - * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer * and license in png.h @@ -65,7 +63,7 @@ typedef struct } io_data; static PNG_CALLBACK(void, read_and_copy, - (png_structp png_ptr, png_bytep buffer, png_size_t cb)) + (png_structp png_ptr, png_bytep buffer, size_t cb)) { io_data *io = (io_data*)png_get_io_ptr(png_ptr); @@ -100,7 +98,7 @@ static void read_by_row(png_structp png_ptr, png_infop info_ptr, png_read_info(png_ptr, info_ptr); { - png_size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr); + size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr); row = voidcast(png_bytep,malloc(rowbytes)); display = voidcast(png_bytep,malloc(rowbytes)); @@ -528,7 +526,7 @@ int main(int argc, char **argv) } } - else if (nfiles == 0) /* Read from stdin withoout --dissemble */ + else if (nfiles == 0) /* Read from stdin without --dissemble */ { char filename[FILENAME_MAX+1]; diff --git a/vs/libpng/contrib/mips-mmi/linux.c b/vs/libpng/contrib/mips-mmi/linux.c new file mode 100644 index 00000000000..dc003807c56 --- /dev/null +++ b/vs/libpng/contrib/mips-mmi/linux.c @@ -0,0 +1,141 @@ +/* contrib/mips-mmi/linux.c + * + * Copyright (c) 2024 Cosmin Truta + * Written by guxiwei, 2023 + * + * This code is released under the libpng license. + * For conditions of distribution and use, see the disclaimer + * and license in png.h + */ + +#include +#include +#include +#include + +/* + * parse_r var, r - Helper assembler macro for parsing register names. + * + * This converts the register name in $n form provided in \r to the + * corresponding register number, which is assigned to the variable \var. It is + * needed to allow explicit encoding of instructions in inline assembly where + * registers are chosen by the compiler in $n form, allowing us to avoid using + * fixed register numbers. + * + * It also allows newer instructions (not implemented by the assembler) to be + * transparently implemented using assembler macros, instead of needing separate + * cases depending on toolchain support. + * + * Simple usage example: + * __asm__ __volatile__("parse_r __rt, %0\n\t" + * ".insn\n\t" + * "# di %0\n\t" + * ".word (0x41606000 | (__rt << 16))" + * : "=r" (status); + */ + +/* Match an individual register number and assign to \var */ +#define _IFC_REG(n) \ + ".ifc \\r, $" #n "\n\t" \ + "\\var = " #n "\n\t" \ + ".endif\n\t" + +__asm__(".macro parse_r var r\n\t" + "\\var = -1\n\t" + _IFC_REG(0) _IFC_REG(1) _IFC_REG(2) _IFC_REG(3) + _IFC_REG(4) _IFC_REG(5) _IFC_REG(6) _IFC_REG(7) + _IFC_REG(8) _IFC_REG(9) _IFC_REG(10) _IFC_REG(11) + _IFC_REG(12) _IFC_REG(13) _IFC_REG(14) _IFC_REG(15) + _IFC_REG(16) _IFC_REG(17) _IFC_REG(18) _IFC_REG(19) + _IFC_REG(20) _IFC_REG(21) _IFC_REG(22) _IFC_REG(23) + _IFC_REG(24) _IFC_REG(25) _IFC_REG(26) _IFC_REG(27) + _IFC_REG(28) _IFC_REG(29) _IFC_REG(30) _IFC_REG(31) + ".iflt \\var\n\t" + ".error \"Unable to parse register name \\r\"\n\t" + ".endif\n\t" + ".endm"); + +#define HWCAP_LOONGSON_CPUCFG (1 << 14) + +static int cpucfg_available(void) +{ + return getauxval(AT_HWCAP) & HWCAP_LOONGSON_CPUCFG; +} + +static int strstart(const char *str, const char *pfx, const char **ptr) +{ + while (*pfx && *pfx == *str) { + pfx++; + str++; + } + if (!*pfx && ptr) + *ptr = str; + return !*pfx; +} + +/* Most toolchains have no CPUCFG support yet */ +static uint32_t read_cpucfg(uint32_t reg) +{ + uint32_t __res; + + __asm__ __volatile__( + "parse_r __res,%0\n\t" + "parse_r reg,%1\n\t" + ".insn \n\t" + ".word (0xc8080118 | (reg << 21) | (__res << 11))\n\t" + :"=r"(__res) + :"r"(reg) + : + ); + return __res; +} + +#define LOONGSON_CFG1 0x1 + +#define LOONGSON_CFG1_MMI (1 << 4) + +static int cpu_flags_cpucfg(void) +{ + int flags = 0; + uint32_t cfg1 = read_cpucfg(LOONGSON_CFG1); + + if (cfg1 & LOONGSON_CFG1_MMI) + flags = 1; + + return flags; +} + +static int cpu_flags_cpuinfo(void) +{ + FILE *f = fopen("/proc/cpuinfo", "r"); + char buf[200]; + int flags = 0; + + if (!f) + return flags; + + while (fgets(buf, sizeof(buf), f)) { + /* Legacy kernel may not export MMI in ASEs implemented */ + if (strstart(buf, "cpu model", NULL)) { + if (strstr(buf, "Loongson-3 ")) + flags = 1; + break; + } + if (strstart(buf, "ASEs implemented", NULL)) { + if (strstr(buf, " loongson-mmi")) + flags = 1; + break; + } + } + fclose(f); + return flags; +} + +static int png_have_mmi() +{ + if (cpucfg_available()) + return cpu_flags_cpucfg(); + else + return cpu_flags_cpuinfo(); + return 0; +} diff --git a/vs/libpng/contrib/mips-msa/linux.c b/vs/libpng/contrib/mips-msa/linux.c index 140215c4ea6..5651df707e5 100644 --- a/vs/libpng/contrib/mips-msa/linux.c +++ b/vs/libpng/contrib/mips-msa/linux.c @@ -1,64 +1,54 @@ /* contrib/mips-msa/linux.c * + * Copyright (c) 2020-2023 Cosmin Truta * Copyright (c) 2016 Glenn Randers-Pehrson * Written by Mandar Sahastrabuddhe, 2016. - * Last changed in libpng 1.6.25beta03 [August 29, 2016] + * Updated by Sui Jingfeng, 2021. * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer * and license in png.h * - * SEE contrib/mips-msa/README before reporting bugs + * On Linux, png_have_msa is implemented by reading the pseudo-file + * "/proc/self/auxv". + * + * See contrib/mips-msa/README before reporting bugs. * * STATUS: SUPPORTED * BUG REPORTS: png-mng-implement@sourceforge.net - * - * png_have_msa implemented for Linux by reading the widely available - * pseudo-file /proc/cpuinfo. - * - * This code is strict ANSI-C and is probably moderately portable; it does - * however use and it assumes that /proc/cpuinfo is never localized. */ -#include -#include +#include +#include #include +#include static int png_have_msa(png_structp png_ptr) { - FILE *f = fopen("/proc/cpuinfo", "rb"); + Elf64_auxv_t aux; + int fd; + int has_msa = 0; - char *string = "msa"; - char word[10]; - - if (f != NULL) + fd = open("/proc/self/auxv", O_RDONLY); + if (fd >= 0) { - while(!feof(f)) + while (read(fd, &aux, sizeof(Elf64_auxv_t)) == sizeof(Elf64_auxv_t)) { - int ch = fgetc(f); - static int i = 0; - - while(!(ch <= 32)) + if (aux.a_type == AT_HWCAP) { - word[i++] = ch; - ch = fgetc(f); - } + uint64_t hwcap = aux.a_un.a_val; - int val = strcmp(string, word); - - if (val == 0) - return 1; - - i = 0; - memset(word, 0, 10); + has_msa = (hwcap >> 1) & 1; + break; + } } - - fclose(f); + close(fd); } #ifdef PNG_WARNINGS_SUPPORTED else - png_warning(png_ptr, "/proc/cpuinfo open failed"); + png_warning(png_ptr, "/proc/self/auxv open failed"); #endif - return 0; + + return has_msa; } diff --git a/vs/libpng/contrib/oss-fuzz/Dockerfile b/vs/libpng/contrib/oss-fuzz/Dockerfile index 7e4d1ebff2c..f5bc1a985d3 100644 --- a/vs/libpng/contrib/oss-fuzz/Dockerfile +++ b/vs/libpng/contrib/oss-fuzz/Dockerfile @@ -16,9 +16,10 @@ FROM gcr.io/oss-fuzz-base/base-builder MAINTAINER glennrp@gmail.com -RUN apt-get update && apt-get install -y make autoconf automake libtool zlib1g-dev +RUN apt-get update && \ + apt-get install -y make autoconf automake libtool +RUN git clone --depth 1 https://github.com/madler/zlib.git RUN git clone --depth 1 https://github.com/glennrp/libpng.git -RUN (cd libpng; git log | head -1) +RUN cp libpng/contrib/oss-fuzz/build.sh $SRC WORKDIR libpng -COPY build.sh $SRC/ diff --git a/vs/libpng/contrib/oss-fuzz/README.txt b/vs/libpng/contrib/oss-fuzz/README.txt index a2b67366584..66d5242c574 100644 --- a/vs/libpng/contrib/oss-fuzz/README.txt +++ b/vs/libpng/contrib/oss-fuzz/README.txt @@ -1,4 +1,3 @@ -Last changed in libpng 1.6.33 [September 28, 2017] Copyright (c) 2017 Glenn Randers-Pehrson This code is released under the libpng license. @@ -24,13 +23,13 @@ The files are Filename or derived Copyright License ========================= ========== ================ ========== Dockerfile* derived 2017, Glenn R-P Apache 2.0 - build.sh* derived 2017, Glenn R-P Apache 2.0 + build.sh derived 2017, Glenn R-P Apache 2.0 libpng_read_fuzzer.cc derived 2017, Glenn R-P Chromium libpng_read_fuzzer.options original 2015, Chrome Devs Chromium png.dict original 2015, Chrome Devs Chromium README.txt (this file) original 2017, Glenn R-P libpng - * Dockerfile and build.sh are copies of the files used by oss-fuzz. + * Dockerfile is a copy of the file used by oss-fuzz. build.sh, png.dict and libpng_read_fuzzer.* are the actual files used by oss-fuzz, which retrieves them from the libpng repository at Github. diff --git a/vs/libpng/contrib/oss-fuzz/build.sh b/vs/libpng/contrib/oss-fuzz/build.sh index c1b98c3de28..b136ec102d6 100755 --- a/vs/libpng/contrib/oss-fuzz/build.sh +++ b/vs/libpng/contrib/oss-fuzz/build.sh @@ -1,5 +1,6 @@ -#!/usr/bin/env bash -eu -# Copyright 2017 Glenn Randers-Pehrson +#!/bin/sh -eu + +# Copyright 2017-2018 Glenn Randers-Pehrson # Copyright 2016 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,12 +15,11 @@ # See the License for the specific language governing permissions and # limitations under the License. # -# Last changed in libpng 1.6.33 [September 28, 2017] -# -# Revisions by Glenn Randers-Pehson, 2017: +# Revisions by Glenn Randers-Pehrson, 2017: # 1. Build only the library, not the tools (changed "make -j$(nproc) all" to # "make -j$(nproc) libpng16.la"). # 2. Disabled WARNING and WRITE options in pnglibconf.dfa. +# 3. Build zlib alongside libpng ################################################################################ # Disable logging via library build configuration control. @@ -30,9 +30,9 @@ cat scripts/pnglibconf.dfa | \ > scripts/pnglibconf.dfa.temp mv scripts/pnglibconf.dfa.temp scripts/pnglibconf.dfa -# build the library. +# build the libpng library. autoreconf -f -i -./configure +./configure --with-libpng-prefix=OSS_FUZZ_ make -j$(nproc) clean make -j$(nproc) libpng16.la diff --git a/vs/libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc b/vs/libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc index 78c7c9ff096..bfb5d9d3df1 100644 --- a/vs/libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc +++ b/vs/libpng/contrib/oss-fuzz/libpng_read_fuzzer.cc @@ -1,21 +1,20 @@ - // libpng_read_fuzzer.cc -// Copyright 2017 Glenn Randers-Pehrson +// Copyright 2017-2018 Glenn Randers-Pehrson // Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that may // be found in the LICENSE file https://cs.chromium.org/chromium/src/LICENSE -// Last changed in libpng 1.6.32 [August 24, 2017] - // The modifications in 2017 by Glenn Randers-Pehrson include // 1. addition of a PNG_CLEANUP macro, // 2. setting the option to ignore ADLER32 checksums, // 3. adding "#include " which is needed on some platforms // to provide memcpy(). // 4. adding read_end_info() and creating an end_info structure. +// 5. adding calls to png_set_*() transforms commonly used by browsers. #include #include +#include #include #include @@ -59,7 +58,7 @@ struct PngObjectHandler { png_free(png_ptr, row_ptr); if (end_info_ptr) png_destroy_read_struct(&png_ptr, &info_ptr, &end_info_ptr); - else if (info_ptr) + else if (info_ptr) png_destroy_read_struct(&png_ptr, &info_ptr, nullptr); else png_destroy_read_struct(&png_ptr, nullptr, nullptr); @@ -67,7 +66,7 @@ struct PngObjectHandler { } }; -void user_read_data(png_structp png_ptr, png_bytep data, png_size_t length) { +void user_read_data(png_structp png_ptr, png_bytep data, size_t length) { BufState* buf_state = static_cast(png_get_io_ptr(png_ptr)); if (length > buf_state->bytes_left) { png_error(png_ptr, "read error"); @@ -77,6 +76,22 @@ void user_read_data(png_structp png_ptr, png_bytep data, png_size_t length) { buf_state->data += length; } +void* limited_malloc(png_structp, png_alloc_size_t size) { + // libpng may allocate large amounts of memory that the fuzzer reports as + // an error. In order to silence these errors, make libpng fail when trying + // to allocate a large amount. This allocator used to be in the Chromium + // version of this fuzzer. + // This number is chosen to match the default png_user_chunk_malloc_max. + if (size > 8000000) + return nullptr; + + return malloc(size); +} + +void default_free(png_structp, png_voidp ptr) { + return free(ptr); +} + static const int kPngHeaderSize = 8; // Entry point for LibFuzzer. @@ -117,6 +132,9 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { return 0; } + // Use a custom allocator that fails for large allocations to avoid OOM. + png_set_mem_fn(png_handler.png_ptr, nullptr, limited_malloc, default_free); + png_set_crc_action(png_handler.png_ptr, PNG_CRC_QUIET_USE, PNG_CRC_QUIET_USE); #ifdef PNG_IGNORE_ADLER32 png_set_option(png_handler.png_ptr, PNG_IGNORE_ADLER32, PNG_OPTION_ON); @@ -136,9 +154,6 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { // Reading. png_read_info(png_handler.png_ptr, png_handler.info_ptr); - png_handler.row_ptr = png_malloc( - png_handler.png_ptr, png_get_rowbytes(png_handler.png_ptr, - png_handler.info_ptr)); // reset error handler to put png_deleter into scope. if (setjmp(png_jmpbuf(png_handler.png_ptr))) { @@ -163,8 +178,20 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { return 0; } + // Set several transforms that browsers typically use: + png_set_gray_to_rgb(png_handler.png_ptr); + png_set_expand(png_handler.png_ptr); + png_set_packing(png_handler.png_ptr); + png_set_scale_16(png_handler.png_ptr); + png_set_tRNS_to_alpha(png_handler.png_ptr); + int passes = png_set_interlace_handling(png_handler.png_ptr); - png_start_read_image(png_handler.png_ptr); + + png_read_update_info(png_handler.png_ptr, png_handler.info_ptr); + + png_handler.row_ptr = png_malloc( + png_handler.png_ptr, png_get_rowbytes(png_handler.png_ptr, + png_handler.info_ptr)); for (int pass = 0; pass < passes; ++pass) { for (png_uint_32 y = 0; y < height; ++y) { @@ -176,5 +203,21 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { png_read_end(png_handler.png_ptr, png_handler.end_info_ptr); PNG_CLEANUP + +#ifdef PNG_SIMPLIFIED_READ_SUPPORTED + // Simplified READ API + png_image image; + memset(&image, 0, (sizeof image)); + image.version = PNG_IMAGE_VERSION; + + if (!png_image_begin_read_from_memory(&image, data, size)) { + return 0; + } + + image.format = PNG_FORMAT_RGBA; + std::vector buffer(PNG_IMAGE_SIZE(image)); + png_image_finish_read(&image, NULL, buffer.data(), 0, NULL); +#endif + return 0; } diff --git a/vs/libpng/contrib/pngexif/.editorconfig b/vs/libpng/contrib/pngexif/.editorconfig new file mode 100644 index 00000000000..e00082696dd --- /dev/null +++ b/vs/libpng/contrib/pngexif/.editorconfig @@ -0,0 +1,12 @@ +# https://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_size = 4 +indent_style = space +insert_final_newline = true +max_doc_length = 79 +max_line_length = 79 +trim_trailing_whitespace = true diff --git a/vs/libpng/contrib/pngexif/.gitignore b/vs/libpng/contrib/pngexif/.gitignore new file mode 100644 index 00000000000..016f70a8030 --- /dev/null +++ b/vs/libpng/contrib/pngexif/.gitignore @@ -0,0 +1,3 @@ +__pycache__ +*.py[co] +*$py.class diff --git a/vs/libpng/contrib/pngexif/.pylintrc b/vs/libpng/contrib/pngexif/.pylintrc new file mode 100644 index 00000000000..50cf1152dab --- /dev/null +++ b/vs/libpng/contrib/pngexif/.pylintrc @@ -0,0 +1,8 @@ +[COMPATIBILITY] +disable=consider-using-f-string + +[COMPLEXITY] +disable=too-many-branches,too-many-instance-attributes + +[STYLE] +disable=consider-using-in diff --git a/vs/libpng/contrib/pngexif/LICENSE_MIT.txt b/vs/libpng/contrib/pngexif/LICENSE_MIT.txt new file mode 100644 index 00000000000..9cf106272ac --- /dev/null +++ b/vs/libpng/contrib/pngexif/LICENSE_MIT.txt @@ -0,0 +1,19 @@ +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vs/libpng/contrib/pngexif/README.md b/vs/libpng/contrib/pngexif/README.md new file mode 100644 index 00000000000..c9ff88b647a --- /dev/null +++ b/vs/libpng/contrib/pngexif/README.md @@ -0,0 +1,20 @@ +pngexifinfo +=========== + +Show the EXIF information embedded in a PNG file. + + +Sample usage +------------ + +Show the EXIF info inside a PNG file: + + pngexifinfo /path/to/file.png + +Show the EXIF info inside a raw `.exif` file, using base 16 for the EXIF tags: + + pngexifinfo --hex /path/to/file.exif + +Show the help text: + + pngexifinfo --help diff --git a/vs/libpng/contrib/pngexif/bytepack.py b/vs/libpng/contrib/pngexif/bytepack.py new file mode 100644 index 00000000000..93af21994a9 --- /dev/null +++ b/vs/libpng/contrib/pngexif/bytepack.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python + +""" +Byte packing and unpacking utilities. + +Copyright (C) 2017-2020 Cosmin Truta. + +Use, modification and distribution are subject to the MIT License. +Please see the accompanying file LICENSE_MIT.txt +""" + +from __future__ import absolute_import, division, print_function + +import struct + + +def unpack_uint32be(buffer, offset=0): + """Unpack an unsigned int from its 32-bit big-endian representation.""" + return struct.unpack(">I", buffer[offset:offset + 4])[0] + + +def unpack_uint32le(buffer, offset=0): + """Unpack an unsigned int from its 32-bit little-endian representation.""" + return struct.unpack("H", buffer[offset:offset + 2])[0] + + +def unpack_uint16le(buffer, offset=0): + """Unpack an unsigned int from its 16-bit little-endian representation.""" + return struct.unpack(" "ascii" + value_or_offset >>= 24 + elif tag_type == 3: + # 3 --> "short" + value_or_offset >>= 16 + else: + # ... FIXME + pass + if count == 0: + raise RuntimeError("unsupported count=0 in tag 0x%x" % tag_id) + if tag_id == _TIFF_EXIF_IFD: + if tag_type != 4: + raise RuntimeError("incorrect tag type for EXIF IFD") + self._exif_ifd_offset = value_or_offset + elif tag_id == _GPS_IFD: + if tag_type != 4: + raise RuntimeError("incorrect tag type for GPS IFD") + self._gps_ifd_offset = value_or_offset + elif tag_id == _INTEROPERABILITY_IFD: + if tag_type != 4: + raise RuntimeError("incorrect tag type for Interop IFD") + self._interoperability_ifd_offset = value_or_offset + yield (tag_id, tag_type, count, value_or_offset) + + def tags(self): + """Yield all TIFF/EXIF tags.""" + if self._verbose: + print("TIFF IFD : 0x%08x" % self._global_ifd_offset) + for tag in self._tags_for_ifd(self._global_ifd_offset): + yield tag + if self._exif_ifd_offset > 0: + if self._verbose: + print("EXIF IFD : 0x%08x" % self._exif_ifd_offset) + for tag in self._tags_for_ifd(self._exif_ifd_offset): + yield tag + if self._gps_ifd_offset > 0: + if self._verbose: + print("GPS IFD : 0x%08x" % self._gps_ifd_offset) + for tag in self._tags_for_ifd(self._gps_ifd_offset): + yield tag + if self._interoperability_ifd_offset > 0: + if self._verbose: + print("Interoperability IFD : 0x%08x" % + self._interoperability_ifd_offset) + for tag in self._tags_for_ifd(self._interoperability_ifd_offset): + yield tag + + def tagid2str(self, tag_id): + """Return an informative string representation of a TIFF tag id.""" + idstr = _TIFF_TAGS.get(tag_id, "[Unknown]") + if self._hex: + idnum = "0x%04x" % tag_id + else: + idnum = "%d" % tag_id + return "%s (%s)" % (idstr, idnum) + + @staticmethod + def tagtype2str(tag_type): + """Return an informative string representation of a TIFF tag type.""" + typestr = _TIFF_TAG_TYPES.get(tag_type, "[unknown]") + return "%d:%s" % (tag_type, typestr) + + def tag2str(self, tag_id, tag_type, count, value_or_offset): + """Return an informative string representation of a TIFF tag tuple.""" + return "%s (type=%s) (count=%d) : 0x%08x" \ + % (self.tagid2str(tag_id), self.tagtype2str(tag_type), count, + value_or_offset) + + def _ui32(self): + """Decode a 32-bit unsigned int found at the current offset; + advance the offset by 4. + """ + if self._offset + 4 > len(self._buffer): + raise RuntimeError("out-of-bounds uint32 access in EXIF") + if self._endian == "MM": + result = unpack_uint32be(self._buffer, self._offset) + else: + result = unpack_uint32le(self._buffer, self._offset) + self._offset += 4 + return result + + def _ui16(self): + """Decode a 16-bit unsigned int found at the current offset; + advance the offset by 2. + """ + if self._offset + 2 > len(self._buffer): + raise RuntimeError("out-of-bounds uint16 access in EXIF") + if self._endian == "MM": + result = unpack_uint16be(self._buffer, self._offset) + else: + result = unpack_uint16le(self._buffer, self._offset) + self._offset += 2 + return result + + def _ui8(self): + """Decode an 8-bit unsigned int found at the current offset; + advance the offset by 1. + """ + if self._offset + 1 > len(self._buffer): + raise RuntimeError("out-of-bounds uint8 access in EXIF") + result = unpack_uint8(self._buffer, self._offset) + self._offset += 1 + return result + + +def print_raw_exif_info(buffer, **kwargs): + """Print the EXIF information found in a raw byte stream.""" + lister = ExifInfo(buffer, **kwargs) + print("EXIF (endian=%s)" % lister.endian()) + for (tag_id, tag_type, count, value_or_offset) in lister.tags(): + print(lister.tag2str(tag_id=tag_id, + tag_type=tag_type, + count=count, + value_or_offset=value_or_offset)) + + +if __name__ == "__main__": + # For testing only. + for arg in sys.argv[1:]: + with open(arg, "rb") as test_stream: + test_buffer = test_stream.read(_READ_DATA_SIZE_MAX) + print_raw_exif_info(test_buffer, hex=True, verbose=True) diff --git a/vs/libpng/contrib/pngexif/pngexifinfo b/vs/libpng/contrib/pngexif/pngexifinfo new file mode 100644 index 00000000000..16f8eaab142 --- /dev/null +++ b/vs/libpng/contrib/pngexif/pngexifinfo @@ -0,0 +1,10 @@ +#!/bin/sh +set -eu + +my_python="$(command -v python3 || command -v python)" || { + echo >&2 "error: program not found: Python interpreter" + exit 127 +} +my_python_flags="-BES" + +exec "$my_python" "$my_python_flags" "$(dirname "$0")/pngexifinfo.py" "$@" diff --git a/vs/libpng/contrib/pngexif/pngexifinfo.bat b/vs/libpng/contrib/pngexif/pngexifinfo.bat new file mode 100644 index 00000000000..ab8bd358cc7 --- /dev/null +++ b/vs/libpng/contrib/pngexif/pngexifinfo.bat @@ -0,0 +1,4 @@ +@echo off +@setlocal enableextensions + +python.exe -BES %~dp0.\pngexifinfo.py %* diff --git a/vs/libpng/contrib/pngexif/pngexifinfo.py b/vs/libpng/contrib/pngexif/pngexifinfo.py new file mode 100644 index 00000000000..37d4c4bcd8a --- /dev/null +++ b/vs/libpng/contrib/pngexif/pngexifinfo.py @@ -0,0 +1,178 @@ +#!/usr/bin/env python + +""" +Show the PNG EXIF information. + +Copyright (C) 2017-2020 Cosmin Truta. + +Use, modification and distribution are subject to the MIT License. +Please see the accompanying file LICENSE_MIT.txt +""" + +from __future__ import absolute_import, division, print_function + +import argparse +import io +import re +import sys +import zlib + +from bytepack import unpack_uint32be, unpack_uint8 +from exifinfo import print_raw_exif_info + +_PNG_SIGNATURE = b"\x89PNG\x0d\x0a\x1a\x0a" +_PNG_CHUNK_SIZE_MAX = 0x7fffffff +_READ_DATA_SIZE_MAX = 0x3ffff + + +def print_error(msg): + """Print an error message to stderr.""" + sys.stderr.write("%s: error: %s\n" % (sys.argv[0], msg)) + + +def print_debug(msg): + """Print a debug message to stderr.""" + sys.stderr.write("%s: debug: %s\n" % (sys.argv[0], msg)) + + +def _check_png(condition, chunk_sig=None): + """Check a PNG-specific assertion.""" + if condition: + return + if chunk_sig is None: + raise RuntimeError("bad PNG data") + raise RuntimeError("bad PNG data in '%s'" % chunk_sig) + + +def _check_png_crc(data, checksum, chunk_sig): + """Check a CRC32 value inside a PNG stream.""" + if unpack_uint32be(data) == (checksum & 0xffffffff): + return + raise RuntimeError("bad PNG checksum in '%s'" % chunk_sig) + + +def _extract_png_exif(data, **kwargs): + """Extract the EXIF header and data from a PNG chunk.""" + debug = kwargs.get("debug", False) + if unpack_uint8(data, 0) == 0: + if debug: + print_debug("found compressed EXIF, compression method 0") + if (unpack_uint8(data, 1) & 0x0f) == 0x08: + data = zlib.decompress(data[1:]) + elif unpack_uint8(data, 1) == 0 \ + and (unpack_uint8(data, 5) & 0x0f) == 0x08: + if debug: + print_debug("found uncompressed-length EXIF field") + data_len = unpack_uint32be(data, 1) + data = zlib.decompress(data[5:]) + if data_len != len(data): + raise RuntimeError( + "incorrect uncompressed-length field in PNG EXIF") + else: + raise RuntimeError("invalid compression method in PNG EXIF") + if data.startswith(b"MM\x00\x2a") or data.startswith(b"II\x2a\x00"): + return data + raise RuntimeError("invalid TIFF/EXIF header in PNG EXIF") + + +def print_png_exif_info(instream, **kwargs): + """Print the EXIF information found in the given PNG datastream.""" + debug = kwargs.get("debug", False) + has_exif = False + while True: + chunk_hdr = instream.read(8) + _check_png(len(chunk_hdr) == 8) + chunk_len = unpack_uint32be(chunk_hdr, offset=0) + chunk_sig = chunk_hdr[4:8].decode("latin_1", errors="ignore") + _check_png(re.search(r"^[A-Za-z]{4}$", chunk_sig), chunk_sig=chunk_sig) + _check_png(chunk_len < _PNG_CHUNK_SIZE_MAX, chunk_sig=chunk_sig) + if debug: + print_debug("processing chunk: %s" % chunk_sig) + if chunk_len <= _READ_DATA_SIZE_MAX: + # The chunk size does not exceed an arbitrary, reasonable limit. + chunk_data = instream.read(chunk_len) + chunk_crc = instream.read(4) + _check_png(len(chunk_data) == chunk_len and len(chunk_crc) == 4, + chunk_sig=chunk_sig) + checksum = zlib.crc32(chunk_hdr[4:8]) + checksum = zlib.crc32(chunk_data, checksum) + _check_png_crc(chunk_crc, checksum, chunk_sig=chunk_sig) + else: + # The chunk is too big. Skip it. + instream.seek(chunk_len + 4, io.SEEK_CUR) + continue + if chunk_sig == "IEND": + _check_png(chunk_len == 0, chunk_sig=chunk_sig) + break + if chunk_sig.lower() in ["exif", "zxif"] and chunk_len > 8: + has_exif = True + exif_data = _extract_png_exif(chunk_data, **kwargs) + print_raw_exif_info(exif_data, **kwargs) + if not has_exif: + raise RuntimeError("no EXIF data in PNG stream") + + +def print_exif_info(file, **kwargs): + """Print the EXIF information found in the given file.""" + with open(file, "rb") as stream: + header = stream.read(4) + if header == _PNG_SIGNATURE[0:4]: + if stream.read(4) != _PNG_SIGNATURE[4:8]: + raise RuntimeError("corrupted PNG file") + print_png_exif_info(instream=stream, **kwargs) + elif header == b"II\x2a\x00" or header == b"MM\x00\x2a": + data = header + stream.read(_READ_DATA_SIZE_MAX) + print_raw_exif_info(data, **kwargs) + else: + raise RuntimeError("not a PNG file") + + +def main(): + """The main function.""" + parser = argparse.ArgumentParser( + prog="pngexifinfo", + usage="%(prog)s [options] [--] files...", + description="Show the PNG EXIF information.") + parser.add_argument("files", + metavar="file", + nargs="*", + help="a PNG file or a raw EXIF blob") + parser.add_argument("-x", + "--hex", + dest="hex", + action="store_true", + help="show EXIF tags in base 16") + parser.add_argument("-v", + "--verbose", + dest="verbose", + action="store_true", + help="run in verbose mode") + parser.add_argument("--debug", + dest="debug", + action="store_true", + help="run in debug mode") + args = parser.parse_args() + if not args.files: + parser.error("missing file operand") + result = 0 + for file in args.files: + try: + print_exif_info(file, + hex=args.hex, + debug=args.debug, + verbose=args.verbose) + except (IOError, OSError) as err: + print_error(str(err)) + result = 66 # os.EX_NOINPUT + except RuntimeError as err: + print_error("%s: %s" % (file, str(err))) + result = 69 # os.EX_UNAVAILABLE + parser.exit(result) + + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + sys.stderr.write("INTERRUPTED\n") + sys.exit(130) # SIGINT diff --git a/vs/libpng/contrib/pngminim/README b/vs/libpng/contrib/pngminim/README index e17fe35b6a8..51d5a3c2305 100644 --- a/vs/libpng/contrib/pngminim/README +++ b/vs/libpng/contrib/pngminim/README @@ -1,4 +1,3 @@ - This demonstrates the use of PNG_USER_CONFIG, pngusr.h and pngusr.dfa to build minimal decoder, encoder, and progressive reader applications. diff --git a/vs/libpng/contrib/pngminim/decoder/makefile b/vs/libpng/contrib/pngminim/decoder/makefile index 4acf3c1779b..bbacea4bb82 100644 --- a/vs/libpng/contrib/pngminim/decoder/makefile +++ b/vs/libpng/contrib/pngminim/decoder/makefile @@ -54,7 +54,7 @@ ZOBJS = adler32$(O) crc32$(O) \ PNGSRCS=png$(C) pngerror$(C) pngget$(C) pngmem$(C) \ pngread$(C) pngrio$(C) pngrtran$(C) pngrutil$(C) \ pngset$(C) pngtrans$(C) - + # Standard headers PNGH =png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h diff --git a/vs/libpng/contrib/pngminus/.editorconfig b/vs/libpng/contrib/pngminus/.editorconfig new file mode 100644 index 00000000000..8504b495ea2 --- /dev/null +++ b/vs/libpng/contrib/pngminus/.editorconfig @@ -0,0 +1,29 @@ +# https://editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = unset +indent_size = unset +indent_style = space +insert_final_newline = true +max_doc_length = 79 +max_line_length = 79 +trim_trailing_whitespace = true + +[*.[ch]] +indent_size = 2 +indent_style = space + +[CMakeLists.txt] +indent_size = 4 +indent_style = space +max_doc_length = 79 +max_line_length = 99 + +[{Makefile,makevms.com}] +indent_size = unset +indent_style = unset +max_doc_length = 79 +max_line_length = 99 diff --git a/vs/libpng/contrib/pngminus/.gitignore b/vs/libpng/contrib/pngminus/.gitignore new file mode 100644 index 00000000000..5114c75cdf2 --- /dev/null +++ b/vs/libpng/contrib/pngminus/.gitignore @@ -0,0 +1,11 @@ +# Compiled executables +png2pnm +png2pnm.exe +png2pnm-static* +pnm2png +pnm2png.exe +pnm2png-static* + +# Test artifacts +*.png +*.p[abgnp]m diff --git a/vs/libpng/contrib/pngminus/CHANGES.txt b/vs/libpng/contrib/pngminus/CHANGES.txt new file mode 100644 index 00000000000..b4b1a9a8b3e --- /dev/null +++ b/vs/libpng/contrib/pngminus/CHANGES.txt @@ -0,0 +1,14 @@ +pnm2png / png2pnm --- conversion from PBM/PGM/PPM-file to PNG-file +copyright (C) 1999-2019 by Willem van Schaik + +version 1.0 - 1999.10.15 - First version. + 1.1 - 2015.07.29 - Fix memory leaks (Glenn Randers-Pehrson) + 1.2 - 2017.04.22 - Add buffer-size check + 1.3 - 2017.08.24 - Fix potential overflow in buffer-size check + (Glenn Randers-Pehrson) + 1.4 - 2017.08.28 - Add PNGMINUS_UNUSED (Christian Hesse) + 1.5 - 2018.08.05 - Fix buffer overflow in tokenizer (Cosmin Truta) + 1.6 - 2018.08.05 - Improve portability and fix style (Cosmin Truta) + 1.7 - 2019.01.22 - Change license to MIT (Willem van Schaik) + 1.8 - 2024.01.09 - Fix, improve, modernize (Cosmin Truta) + 1.9 - 2025.01.10 - Delete conditionally-compiled code (Cosmin Truta) diff --git a/vs/libpng/contrib/pngminus/CMakeLists.txt b/vs/libpng/contrib/pngminus/CMakeLists.txt new file mode 100644 index 00000000000..8d69b5e7a6d --- /dev/null +++ b/vs/libpng/contrib/pngminus/CMakeLists.txt @@ -0,0 +1,41 @@ +# Copyright (c) 2018-2025 Cosmin Truta +# +# This software is released under the MIT license. For conditions of +# distribution and use, see the LICENSE file part of this package. + +cmake_minimum_required(VERSION 3.14) + +project(PNGMINUS C) + +option(PNGMINUS_USE_SYSTEM_PNG + "Use the libpng build found in the system" OFF) + +add_executable(png2pnm png2pnm.c) +add_executable(pnm2png pnm2png.c) + +if(PNGMINUS_USE_SYSTEM_PNG) + # Use the system libpng. + find_package(PNG REQUIRED) + target_link_libraries(png2pnm PRIVATE PNG::PNG) + target_link_libraries(pnm2png PRIVATE PNG::PNG) +else() + # Build and use the internal libpng. + # Configure libpng for static linking, to produce single-file executables. + set(PNG_STATIC ON + CACHE STRING "Build the internal libpng as a static library" FORCE) + set(PNG_SHARED OFF + CACHE STRING "Build the internal libpng as a shared library" FORCE) + set(PNG_FRAMEWORK OFF + CACHE STRING "Build the internal libpng as a framework bundle" FORCE) + add_subdirectory(../.. libpng) + target_include_directories(png2pnm PRIVATE + "$" + "$" + ) + target_include_directories(pnm2png PRIVATE + "$" + "$" + ) + target_link_libraries(png2pnm PRIVATE png_static) + target_link_libraries(pnm2png PRIVATE png_static) +endif() diff --git a/vs/libpng/contrib/pngminus/LICENSE.txt b/vs/libpng/contrib/pngminus/LICENSE.txt new file mode 100644 index 00000000000..6bdb4f87983 --- /dev/null +++ b/vs/libpng/contrib/pngminus/LICENSE.txt @@ -0,0 +1,21 @@ +pnm2png / png2pnm --- conversion from PBM/PGM/PPM-file to PNG-file + +copyright (C) 1999-2019 by Willem van Schaik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +The software is provided "as is", without warranty of any kind, express or +implied, including but not limited to the warranties of merchantability, +fitness for a particular purpose and noninfringement. In no event shall the +authors or copyright holders be liable for any claim, damages or other +liability, whether in an action of contract, tort or otherwise, arising from, +out of or in connection with the software or the use or other dealings in the +software. diff --git a/vs/libpng/contrib/pngminus/README.txt b/vs/libpng/contrib/pngminus/README.txt new file mode 100644 index 00000000000..f7f6ecb3a5a --- /dev/null +++ b/vs/libpng/contrib/pngminus/README.txt @@ -0,0 +1,120 @@ +PngMinus +-------- +(copyright Willem van Schaik, 1999-2019) + + + +Some history +------------ +Soon after the creation of PNG in 1995, the need was felt for a set of +pnmtopng / pngtopnm utilities. Independently Alexander Lehmann and I +(Willem van Schaik) started such a project. Luckily we discovered this +and merged the two, which later became part of NetPBM, available from +SourceForge. + +These two utilities have many, many options and make use of most of the +features of PNG, like gamma, alpha, sbit, text-chunks, etc. This makes +the utilities quite complex and by now not anymore very maintainable. +When we wrote these programs, libpng was still in an early stage. +Therefore, lots of the functionality that we put in our software can now +be done using transform-functions in libpng. + +Finally, to compile these programs, you need to have installed and +compiled three libraries: libpng, zlib and netpbm. Especially the latter +makes the whole setup a bit bulky. But that's unavoidable given the many +features of pnmtopng. + + +What now (1999) +--------------- +At this moment libpng is in a very stable state and can do much of the +work done in pnmtopng. Also, pnmtopng needs to be upgraded to the new +interface of libpng. Hence, it is time for a rewrite from the ground up +of pnmtopng and pngtopnm. This will happen in the near future (stay +tuned). The new package will get a different name to distinguish it from +the old one: PngPlus. + +To experiment a bit with the new interface of libpng, I started off with +a small prototype that contains only the basic functionality. It doesn't +have any of the options to read or write special chunks and it will do +no gamma correction. But this makes it also a simple program that is +quite easy to understand and can serve well as a template for other +software developments. By now there are of course a couple of programs, +like Greg Roelofs' rpng/wpng, that can be used just as good. + + +Can and can not +--------------- +As this is the small brother of the future PngPlus, I called this fellow +PngMinus. Because I started this development in good-old Turbo-C, I +avoided the use the netpbm library, which requires DOS extenders. Again, +another reason to call it PngMinus (minus netpbm :-). So, part of the +program are some elementary routines to read / write pgm- and ppm-files. +It does not handle B&W pbm-files, but instead you could do pgm with bit- +depth 1. + +The downside of this approach is that you can not use them on images +that require blocks of memory bigger than 64k (the DOS version). For +larger images you will get an out-of-memory error. + +As said before, PngMinus doesn't correct for gamma. When reading +png-files you can do this just as well by piping the output of png2pnm +to pnmgamma, one of the standard PbmPlus tools. This same scenario will +most probably also be followed in the full-blown future PngPlus, with +the addition of course of the possibility to create gamma-chunks when +writing png-files. + +On the other hand it supports alpha-channels. When reading a png-image +you can write the alpha-channel into a pgm-file. And when creating an +RGB+A png-image, you just combine a ppm-file with a corresponding +pgm-file containing the alpha-channel. When reading, transparency chunks +are converted into an alpha-channel and from there on treated the same +way. + +Finally you can opt for writing ascii or binary pgm- and ppm-files. When +the bit-depth is 16, the format will always be ascii. + + +Using it +-------- +To distinguish them from pnmtopng and PngPlus, the utilities are named +png2pnm and pnm2png (2 instead of to). The input- and output-files can +be given as parameters or through redirection. Therefore the programs +can be part of a pipe. + +To list the options type "png2pnm -h" or "pnm2png -h". + + +Just like Scandinavian furniture +-------------------------------- +You have to put it together yourself. I developed the software on MS-DOS +with Turbo-C 3.0 and RedHat Linux 4.2 with gcc. In both cases I used +libpng-1.0.4 and zlib-1.1.3. By now (2019) it is twenty years later and +more current versions are OK. + +The makefile assumes that the libpng libraries can be found in ../.. and +libz in ../../../zlib. But you can change this to for example ../libpng +and ../zlib. The makefile creates two versions of each program, one with +static library support and the other using shared libraries. + +If you create a ../pngsuite directory and then store the basn####.png +files from PngSuite (http://www.schaik.com/pngsuite/) in there, you can +test the proper functioning of PngMinus by running pngminus.sh. + + +Warranty +------- +Please, remember that this was just a small experiment to learn a few +things. It will have many unforeseen features ... who said bugs? Use +it when you are in need for something simple or when you want a starting +point for developing your own stuff. + + +The end +------- +Willem van Schaik +mailto:willem at schaik dot com +http://www.schaik.com/png/ + +Oct 1999, Jan 2019 + diff --git a/vs/libpng/contrib/pngminus/png2pnm.c b/vs/libpng/contrib/pngminus/png2pnm.c index 1420a783b03..3c47b91df55 100644 --- a/vs/libpng/contrib/pngminus/png2pnm.c +++ b/vs/libpng/contrib/pngminus/png2pnm.c @@ -1,85 +1,52 @@ /* * png2pnm.c --- conversion from PNG-file to PGM/PPM-file - * copyright (C) 1999,2017 by Willem van Schaik + * copyright (C) 1999-2019 by Willem van Schaik * - * version 1.0 - 1999.10.15 - First version. - * 1.1 - 2017.04.22 - Add buffer-size check (Glenn Randers-Pehrson) - * 1.2 - 2017.08.24 - Fix potential overflow in buffer-size check - * (Glenn Randers-Pehrson) - * 1.3 - 2017.08.28 - Add PNGMINUS_UNUSED (Christian Hesse) - * - * Permission to use, copy, modify, and distribute this software and - * its documentation for any purpose and without fee is hereby granted, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear in - * supporting documentation. This software is provided "as is" without - * express or implied warranty. + * This software is released under the MIT license. For conditions of + * distribution and use, see the LICENSE file part of this package. */ #include #include -#ifdef __TURBOC__ -#include #include -#endif -#include #ifndef BOOL #define BOOL unsigned char #endif #ifndef TRUE -#define TRUE (BOOL) 1 +#define TRUE ((BOOL) 1) #endif #ifndef FALSE -#define FALSE (BOOL) 0 -#endif - -#ifdef __TURBOC__ -#define STDIN 0 -#define STDOUT 1 -#define STDERR 2 +#define FALSE ((BOOL) 0) #endif -/* to make png2pnm verbose so we can find problems (needs to be before png.h) */ -#ifndef PNG_DEBUG -#define PNG_DEBUG 0 -#endif - - #include "png.h" -/* Define png_jmpbuf() in case we are using a pre-1.0.6 version of libpng */ -#ifndef png_jmpbuf -# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) -#endif - -#ifndef PNGMINUS_UNUSED -/* Unused formal parameter warnings are silenced using the following macro - * which is expected to have no bad effects on performance (optimizing - * compilers will probably remove it entirely). - */ -# define PNGMINUS_UNUSED(param) (void)param -#endif - /* function prototypes */ -int main (int argc, char *argv[]); +int main (int argc, char *argv[]); void usage (); -BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, - BOOL alpha); +BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, + BOOL raw, BOOL alpha); +BOOL do_png2pnm (png_struct *png_ptr, png_info *info_ptr, + FILE *pnm_file, FILE *alpha_file, + BOOL raw, BOOL alpha); /* * main */ -int main(int argc, char *argv[]) +int main (int argc, char *argv[]) { FILE *fp_rd = stdin; FILE *fp_wr = stdout; FILE *fp_al = NULL; + const char *fname_wr = NULL; + const char *fname_al = NULL; BOOL raw = TRUE; BOOL alpha = FALSE; int argi; + int ret; for (argi = 1; argi < argc; argi++) { @@ -98,22 +65,23 @@ int main(int argc, char *argv[]) argi++; if ((fp_al = fopen (argv[argi], "wb")) == NULL) { - fprintf (stderr, "PNM2PNG\n"); - fprintf (stderr, "Error: can not create alpha-channel file %s\n", - argv[argi]); + fname_al = argv[argi]; + fprintf (stderr, "PNG2PNM\n"); + fprintf (stderr, "Error: cannot create alpha-channel file %s\n", + argv[argi]); exit (1); } break; case 'h': case '?': - usage(); - exit(0); + usage (); + exit (0); break; default: fprintf (stderr, "PNG2PNM\n"); fprintf (stderr, "Error: unknown option %s\n", argv[argi]); - usage(); - exit(1); + usage (); + exit (1); break; } /* end switch */ } @@ -121,17 +89,18 @@ int main(int argc, char *argv[]) { if ((fp_rd = fopen (argv[argi], "rb")) == NULL) { - fprintf (stderr, "PNG2PNM\n"); - fprintf (stderr, "Error: file %s does not exist\n", argv[argi]); - exit (1); + fprintf (stderr, "PNG2PNM\n"); + fprintf (stderr, "Error: file %s does not exist\n", argv[argi]); + exit (1); } } else if (fp_wr == stdout) { + fname_wr = argv[argi]; if ((fp_wr = fopen (argv[argi], "wb")) == NULL) { fprintf (stderr, "PNG2PNM\n"); - fprintf (stderr, "Error: can not create file %s\n", argv[argi]); + fprintf (stderr, "Error: cannot create file %s\n", argv[argi]); exit (1); } } @@ -139,30 +108,21 @@ int main(int argc, char *argv[]) { fprintf (stderr, "PNG2PNM\n"); fprintf (stderr, "Error: too many parameters\n"); - usage(); - exit(1); + usage (); + exit (1); } } /* end for */ -#ifdef __TURBOC__ +#if defined(O_BINARY) && (O_BINARY != 0) /* set stdin/stdout if required to binary */ if (fp_rd == stdin) - { - setmode (STDIN, O_BINARY); - } + setmode (fileno (stdin), O_BINARY); if ((raw) && (fp_wr == stdout)) - { - setmode (STDOUT, O_BINARY); - } + setmode (fileno (stdout), O_BINARY); #endif /* call the conversion program itself */ - if (png2pnm (fp_rd, fp_wr, fp_al, raw, alpha) == FALSE) - { - fprintf (stderr, "PNG2PNM\n"); - fprintf (stderr, "Error: unsuccessful conversion of PNG-image\n"); - exit(1); - } + ret = png2pnm (fp_rd, fp_wr, fp_al, raw, alpha); /* close input file */ fclose (fp_rd); @@ -172,6 +132,17 @@ int main(int argc, char *argv[]) if (alpha) fclose (fp_al); + if (!ret) + { + fprintf (stderr, "PNG2PNM\n"); + fprintf (stderr, "Error: unsuccessful conversion of PNG-image\n"); + if (fname_wr) + remove (fname_wr); /* no broken output file shall remain behind */ + if (fname_al) + remove (fname_al); /* ditto */ + exit (1); + } + return 0; } @@ -179,23 +150,18 @@ int main(int argc, char *argv[]) * usage */ -void usage() +void usage () { fprintf (stderr, "PNG2PNM\n"); fprintf (stderr, " by Willem van Schaik, 1999\n"); -#ifdef __TURBOC__ - fprintf (stderr, " for Turbo-C and Borland-C compilers\n"); -#else - fprintf (stderr, " for Linux (and Unix) compilers\n"); -#endif fprintf (stderr, "Usage: png2pnm [options] .png [.pnm]\n"); fprintf (stderr, " or: ... | png2pnm [options]\n"); fprintf (stderr, "Options:\n"); fprintf (stderr, - " -r[aw] write pnm-file in binary format (P4/P5/P6) (default)\n"); + " -r[aw] write pnm-file in binary format (P4/P5/P6) (default)\n"); fprintf (stderr, " -n[oraw] write pnm-file in ascii format (P1/P2/P3)\n"); fprintf (stderr, - " -a[lpha] .pgm write PNG alpha channel as pgm-file\n"); + " -a[lpha] .pgm write PNG alpha channel as pgm-file\n"); fprintf (stderr, " -h | -? print this help-information\n"); } @@ -204,112 +170,79 @@ void usage() */ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, - volatile BOOL raw, BOOL alpha) + BOOL raw, BOOL alpha) { - png_struct *png_ptr = NULL; - png_info *info_ptr = NULL; - png_byte buf[8]; - png_byte *png_pixels = NULL; - png_byte **row_pointers = NULL; - png_byte *pix_ptr = NULL; - png_uint_32 row_bytes; - - png_uint_32 width; - png_uint_32 height; - int bit_depth; - int channels; - int color_type; - int alpha_present; - int row, col; - int ret; - int i; - long dep_16; - - /* read and check signature in PNG file */ - ret = fread (buf, 1, 8, png_file); - if (ret != 8) - return FALSE; - - ret = png_sig_cmp (buf, 0, 8); - if (ret) - return FALSE; + png_struct *png_ptr; + png_info *info_ptr; + BOOL ret; - /* create png and info structures */ + /* initialize the libpng context for reading from png_file */ png_ptr = png_create_read_struct (png_get_libpng_ver(NULL), - NULL, NULL, NULL); + NULL, NULL, NULL); if (!png_ptr) - return FALSE; /* out of memory */ + return FALSE; /* out of memory */ info_ptr = png_create_info_struct (png_ptr); if (!info_ptr) { png_destroy_read_struct (&png_ptr, NULL, NULL); - return FALSE; /* out of memory */ + return FALSE; /* out of memory */ } - if (setjmp (png_jmpbuf(png_ptr))) + if (setjmp (png_jmpbuf (png_ptr))) { png_destroy_read_struct (&png_ptr, &info_ptr, NULL); - return FALSE; + return FALSE; /* generic libpng error */ } - /* set up the input control for C streams */ png_init_io (png_ptr, png_file); - png_set_sig_bytes (png_ptr, 8); /* we already read the 8 signature bytes */ - - /* read the file information */ - png_read_info (png_ptr, info_ptr); - - /* get size and bit-depth of the PNG-image */ - png_get_IHDR (png_ptr, info_ptr, - &width, &height, &bit_depth, &color_type, - NULL, NULL, NULL); - - /* set-up the transformations */ - - /* transform paletted images into full-color rgb */ - if (color_type == PNG_COLOR_TYPE_PALETTE) - png_set_expand (png_ptr); - /* expand images to bit-depth 8 (only applicable for grayscale images) */ - if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) - png_set_expand (png_ptr); - /* transform transparency maps into full alpha-channel */ - if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) - png_set_expand (png_ptr); - -#ifdef NJET - /* downgrade 16-bit images to 8-bit */ - if (bit_depth == 16) - png_set_strip_16 (png_ptr); - /* transform grayscale images into full-color */ - if (color_type == PNG_COLOR_TYPE_GRAY || - color_type == PNG_COLOR_TYPE_GRAY_ALPHA) - png_set_gray_to_rgb (png_ptr); - /* only if file has a file gamma, we do a correction */ - if (png_get_gAMA (png_ptr, info_ptr, &file_gamma)) - png_set_gamma (png_ptr, (double) 2.2, file_gamma); -#endif - /* all transformations have been registered; now update info_ptr data, - * get rowbytes and channels, and allocate image memory */ + /* do the actual conversion */ + ret = do_png2pnm (png_ptr, info_ptr, pnm_file, alpha_file, raw, alpha); - png_read_update_info (png_ptr, info_ptr); + /* clean up the libpng structures and their internally-managed data */ + png_destroy_read_struct (&png_ptr, &info_ptr, NULL); - /* get the new color-type and bit-depth (after expansion/stripping) */ - png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, - NULL, NULL, NULL); + return ret; +} - /* check for 16-bit files */ - if (bit_depth == 16) - { - raw = FALSE; -#ifdef __TURBOC__ - pnm_file->flags &= ~((unsigned) _F_BIN); -#endif - } +/* + * do_png2pnm - does the conversion in a fully-initialized libpng context + */ - /* calculate new number of channels and store alpha-presence */ +BOOL do_png2pnm (png_struct *png_ptr, png_info *info_ptr, + FILE *pnm_file, FILE *alpha_file, + BOOL raw, BOOL alpha) +{ + png_byte **row_pointers; + png_byte *pix_ptr; + png_uint_32 width; + png_uint_32 height; + int bit_depth; + int channels; + int color_type; + int alpha_present; + png_uint_32 row, col, i; + long dep_16; + + /* set up the image transformations that are necessary for the PNM format */ + + /* set up (if applicable) the expansion of paletted images to full-color rgb, + * and the expansion of transparency maps to full alpha-channel */ + png_set_expand (png_ptr); + + /* set up (if applicable) the expansion of grayscale images to bit-depth 8 */ + png_set_expand_gray_1_2_4_to_8 (png_ptr); + + /* read the image file, with all of the above image transforms applied */ + png_read_png (png_ptr, info_ptr, 0, NULL); + + /* get the image size, bit-depth and color-type */ + png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, + NULL, NULL, NULL); + + /* calculate the number of channels and store alpha-presence */ if (color_type == PNG_COLOR_TYPE_GRAY) channels = 1; else if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA) @@ -326,47 +259,12 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, if (alpha && !alpha_present) { fprintf (stderr, "PNG2PNM\n"); - fprintf (stderr, "Error: PNG-file doesn't contain alpha channel\n"); - exit (1); - } - - /* row_bytes is the width x number of channels x (bit-depth / 8) */ - row_bytes = png_get_rowbytes (png_ptr, info_ptr); - - if ((row_bytes == 0 || (size_t)height > ((size_t)(-1))/(size_t)row_bytes)) - { - /* too big */ - png_destroy_read_struct (&png_ptr, &info_ptr, NULL); - return FALSE; - } - if ((png_pixels = (png_byte *) - malloc ((size_t)row_bytes * (size_t)height * sizeof (png_byte))) == NULL) - { - png_destroy_read_struct (&png_ptr, &info_ptr, NULL); - return FALSE; - } - - if ((row_pointers = (png_byte **) - malloc ((size_t)height * sizeof (png_bytep))) == NULL) - { - png_destroy_read_struct (&png_ptr, &info_ptr, NULL); - free (png_pixels); - png_pixels = NULL; + fprintf (stderr, "Warning: no alpha channel in PNG file\n"); return FALSE; } - /* set the individual row_pointers to point at the correct offsets */ - for (i = 0; i < ((int) height); i++) - row_pointers[i] = png_pixels + i * row_bytes; - - /* now we can go ahead and just read the whole image */ - png_read_image (png_ptr, row_pointers); - - /* read rest of file, and get additional chunks in info_ptr - REQUIRED */ - png_read_end (png_ptr, info_ptr); - - /* clean up after the read, and free any memory allocated - REQUIRED */ - png_destroy_read_struct (&png_ptr, &info_ptr, (png_infopp) NULL); + /* get address of internally-allocated image data */ + row_pointers = png_get_rows (png_ptr, info_ptr); /* write header of PNM file */ @@ -397,46 +295,67 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, } /* write data to PNM file */ - pix_ptr = png_pixels; - for (row = 0; row < (int) height; row++) + for (row = 0; row < height; row++) { - for (col = 0; col < (int) width; col++) + pix_ptr = row_pointers[row]; + for (col = 0; col < width; col++) { - for (i = 0; i < (channels - alpha_present); i++) + for (i = 0; i < (png_uint_32) (channels - alpha_present); i++) { if (raw) - fputc ((int) *pix_ptr++ , pnm_file); + { + fputc ((int) *pix_ptr++, pnm_file); + if (bit_depth == 16) + fputc ((int) *pix_ptr++, pnm_file); + } else - if (bit_depth == 16){ - dep_16 = (long) *pix_ptr++; - fprintf (pnm_file, "%ld ", (dep_16 << 8) + ((long) *pix_ptr++)); + { + if (bit_depth == 16) + { + dep_16 = ((long) *pix_ptr++) << 8; + dep_16 += ((long) *pix_ptr++); + fprintf (pnm_file, "%ld ", dep_16); } else + { fprintf (pnm_file, "%ld ", (long) *pix_ptr++); + } + } } if (alpha_present) { if (!alpha) { - pix_ptr++; /* alpha */ + /* skip the alpha-channel */ + pix_ptr++; if (bit_depth == 16) pix_ptr++; } - else /* output alpha-channel as pgm file */ + else { + /* output the alpha-channel as pgm file */ if (raw) - fputc ((int) *pix_ptr++ , alpha_file); + { + fputc ((int) *pix_ptr++, alpha_file); + if (bit_depth == 16) + fputc ((int) *pix_ptr++, alpha_file); + } else + { if (bit_depth == 16) { - dep_16 = (long) *pix_ptr++; - fprintf (alpha_file, "%ld ", (dep_16 << 8) + (long) *pix_ptr++); + dep_16 = ((long) *pix_ptr++) << 8; + dep_16 += ((long) *pix_ptr++); + fprintf (alpha_file, "%ld ", dep_16); } else + { fprintf (alpha_file, "%ld ", (long) *pix_ptr++); + } + } } - } /* if alpha_present */ + } /* end if alpha_present */ if (!raw) if (col % 4 == 3) @@ -448,13 +367,5 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, fprintf (pnm_file, "\n"); } /* end for row */ - if (row_pointers != (unsigned char**) NULL) - free (row_pointers); - if (png_pixels != (unsigned char*) NULL) - free (png_pixels); - - PNGMINUS_UNUSED(raw); /* to quiet a Coverity defect */ return TRUE; - } /* end of source */ - diff --git a/vs/libpng/contrib/pngminus/pnm2png.c b/vs/libpng/contrib/pngminus/pnm2png.c index 0d2caef960b..052fd3272c8 100644 --- a/vs/libpng/contrib/pngminus/pnm2png.c +++ b/vs/libpng/contrib/pngminus/pnm2png.c @@ -1,87 +1,57 @@ /* * pnm2png.c --- conversion from PBM/PGM/PPM-file to PNG-file - * copyright (C) 1999,2015,2017 by Willem van Schaik + * copyright (C) 1999-2019 by Willem van Schaik * - * version 1.0 - 1999.10.15 - First version. - * version 1.1 - 2015.07.29 - Fixed leaks (Glenn Randers-Pehrson) - * version 1.2 - 2017.04.22 - Add buffer-size check - * 1.3 - 2017.08.24 - Fix potential overflow in buffer-size check - * (Glenn Randers-Pehrson) - * 1.4 - 2017.08.28 - Add PNGMINUS_UNUSED (Christian Hesse) - * - * Permission to use, copy, modify, and distribute this software and - * its documentation for any purpose and without fee is hereby granted, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear in - * supporting documentation. This software is provided "as is" without - * express or implied warranty. + * This software is released under the MIT license. For conditions of + * distribution and use, see the LICENSE file part of this package. */ +#include #include #include -#ifdef __TURBOC__ -#include #include -#endif -#include #ifndef BOOL #define BOOL unsigned char #endif #ifndef TRUE -#define TRUE (BOOL) 1 +#define TRUE ((BOOL) 1) #endif #ifndef FALSE -#define FALSE (BOOL) 0 -#endif - -#define STDIN 0 -#define STDOUT 1 -#define STDERR 2 - -/* to make pnm2png verbose so we can find problems (needs to be before png.h) */ -#ifndef PNG_DEBUG -#define PNG_DEBUG 0 +#define FALSE ((BOOL) 0) #endif #include "png.h" -/* Define png_jmpbuf() in case we are using a pre-1.0.6 version of libpng */ -#ifndef png_jmpbuf -# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) -#endif - -#ifndef PNGMINUS_UNUSED -/* Unused formal parameter warnings are silenced using the following macro - * which is expected to have no bad effects on performance (optimizing - * compilers will probably remove it entirely). - */ -# define PNGMINUS_UNUSED(param) (void)param -#endif - - /* function prototypes */ -int main (int argc, char *argv[]); +int main (int argc, char *argv[]); void usage (); -BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, - BOOL alpha); -void get_token(FILE *pnm_file, char *token); -png_uint_32 get_data (FILE *pnm_file, int depth); -png_uint_32 get_value (FILE *pnm_file, int depth); +BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, + BOOL interlace, BOOL alpha); +BOOL do_pnm2png (png_struct *png_ptr, png_info *info_ptr, + FILE *pnm_file, FILE *alpha_file, + BOOL interlace, BOOL alpha); +int fscan_pnm_magic (FILE *pnm_file, char *magic_buf, size_t magic_buf_size); +int fscan_pnm_token (FILE *pnm_file, char *token_buf, size_t token_buf_size); +int fscan_pnm_uint_32 (FILE *pnm_file, png_uint_32 *num_ptr); +png_uint_32 get_pnm_data (FILE *pnm_file, int depth); +png_uint_32 get_pnm_value (FILE *pnm_file, int depth); /* * main */ -int main(int argc, char *argv[]) +int main (int argc, char *argv[]) { FILE *fp_rd = stdin; FILE *fp_al = NULL; FILE *fp_wr = stdout; + const char *fname_wr = NULL; BOOL interlace = FALSE; BOOL alpha = FALSE; int argi; + int ret; for (argi = 1; argi < argc; argi++) { @@ -99,20 +69,20 @@ int main(int argc, char *argv[]) { fprintf (stderr, "PNM2PNG\n"); fprintf (stderr, "Error: alpha-channel file %s does not exist\n", - argv[argi]); + argv[argi]); exit (1); } break; case 'h': case '?': - usage(); - exit(0); + usage (); + exit (0); break; default: fprintf (stderr, "PNM2PNG\n"); fprintf (stderr, "Error: unknown option %s\n", argv[argi]); - usage(); - exit(1); + usage (); + exit (1); break; } /* end switch */ } @@ -127,10 +97,11 @@ int main(int argc, char *argv[]) } else if (fp_wr == stdout) { + fname_wr = argv[argi]; if ((fp_wr = fopen (argv[argi], "wb")) == NULL) { fprintf (stderr, "PNM2PNG\n"); - fprintf (stderr, "Error: can not create PNG-file %s\n", argv[argi]); + fprintf (stderr, "Error: cannot create PNG-file %s\n", argv[argi]); exit (1); } } @@ -138,30 +109,23 @@ int main(int argc, char *argv[]) { fprintf (stderr, "PNM2PNG\n"); fprintf (stderr, "Error: too many parameters\n"); - usage(); + usage (); exit (1); } } /* end for */ -#ifdef __TURBOC__ - /* set stdin/stdout to binary, we're reading the PNM always! in binary format */ +#if defined(O_BINARY) && (O_BINARY != 0) + /* set stdin/stdout to binary, + * we're reading the PNM always! in binary format + */ if (fp_rd == stdin) - { - setmode (STDIN, O_BINARY); - } + setmode (fileno (stdin), O_BINARY); if (fp_wr == stdout) - { - setmode (STDOUT, O_BINARY); - } + setmode (fileno (stdout), O_BINARY); #endif /* call the conversion program itself */ - if (pnm2png (fp_rd, fp_wr, fp_al, interlace, alpha) == FALSE) - { - fprintf (stderr, "PNM2PNG\n"); - fprintf (stderr, "Error: unsuccessful converting to PNG-image\n"); - exit (1); - } + ret = pnm2png (fp_rd, fp_wr, fp_al, interlace, alpha); /* close input file */ fclose (fp_rd); @@ -171,6 +135,15 @@ int main(int argc, char *argv[]) if (alpha) fclose (fp_al); + if (!ret) + { + fprintf (stderr, "PNM2PNG\n"); + fprintf (stderr, "Error: unsuccessful converting to PNG-image\n"); + if (fname_wr) + remove (fname_wr); /* no broken output file shall remain behind */ + exit (1); + } + return 0; } @@ -178,15 +151,10 @@ int main(int argc, char *argv[]) * usage */ -void usage() +void usage () { fprintf (stderr, "PNM2PNG\n"); fprintf (stderr, " by Willem van Schaik, 1999\n"); -#ifdef __TURBOC__ - fprintf (stderr, " for Turbo-C and Borland-C compilers\n"); -#else - fprintf (stderr, " for Linux (and Unix) compilers\n"); -#endif fprintf (stderr, "Usage: pnm2png [options] . [.png]\n"); fprintf (stderr, " or: ... | pnm2png [options]\n"); fprintf (stderr, "Options:\n"); @@ -200,79 +168,101 @@ void usage() * pnm2png */ -BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, - BOOL alpha) +BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, + BOOL interlace, BOOL alpha) +{ + png_struct *png_ptr; + png_info *info_ptr; + BOOL ret; + + /* initialize the libpng context for writing to png_file */ + + png_ptr = png_create_write_struct (png_get_libpng_ver(NULL), + NULL, NULL, NULL); + if (!png_ptr) + return FALSE; /* out of memory */ + + info_ptr = png_create_info_struct (png_ptr); + if (!info_ptr) + { + png_destroy_write_struct (&png_ptr, NULL); + return FALSE; /* out of memory */ + } + + if (setjmp (png_jmpbuf (png_ptr))) + { + png_destroy_write_struct (&png_ptr, &info_ptr); + return FALSE; /* generic libpng error */ + } + + png_init_io (png_ptr, png_file); + + /* do the actual conversion */ + ret = do_pnm2png (png_ptr, info_ptr, pnm_file, alpha_file, interlace, alpha); + + /* clean up the libpng structures and their internally-managed data */ + png_destroy_write_struct (&png_ptr, &info_ptr); + + return ret; +} + +/* + * do_pnm2png - does the conversion in a fully-initialized libpng context + */ + +BOOL do_pnm2png (png_struct *png_ptr, png_info *info_ptr, + FILE *pnm_file, FILE *alpha_file, + BOOL interlace, BOOL alpha) { - png_struct *png_ptr = NULL; - png_info *info_ptr = NULL; - png_byte *png_pixels = NULL; - png_byte **row_pointers = NULL; - png_byte *pix_ptr = NULL; - volatile png_uint_32 row_bytes; - - char type_token[16]; - char width_token[16]; - char height_token[16]; - char maxval_token[16]; - volatile int color_type=1; - unsigned long ul_width=0, ul_alpha_width=0; - unsigned long ul_height=0, ul_alpha_height=0; - unsigned long ul_maxval=0; - volatile png_uint_32 width=0, height=0; - volatile png_uint_32 alpha_width=0, alpha_height=0; - png_uint_32 maxval; - volatile int bit_depth = 0; - int channels=0; - int alpha_depth = 0; - int alpha_present=0; - int row, col; - BOOL raw, alpha_raw = FALSE; -#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) + png_byte **row_pointers; + png_byte *pix_ptr; + int bit_depth; + int color_type; + int channels; + char magic_token[4]; + BOOL raw; + png_uint_32 width, height, maxval; + png_uint_32 row_bytes; + png_uint_32 row, col; + png_uint_32 val16, i; + png_uint_32 alpha_width = 0, alpha_height = 0; + int alpha_depth = 0, alpha_present = 0; + BOOL alpha_raw = FALSE; BOOL packed_bitmap = FALSE; -#endif - png_uint_32 tmp16; - int i; /* read header of PNM file */ - get_token(pnm_file, type_token); - if (type_token[0] != 'P') + if (fscan_pnm_magic (pnm_file, magic_token, sizeof (magic_token)) != 1) + return FALSE; /* not a PNM file */ + + if ((magic_token[1] == '1') || (magic_token[1] == '4')) { - return FALSE; + if ((fscan_pnm_uint_32 (pnm_file, &width) != 1) || + (fscan_pnm_uint_32 (pnm_file, &height) != 1)) + return FALSE; /* bad PBM file header */ + } else if ((magic_token[1] == '2') || (magic_token[1] == '5') || + (magic_token[1] == '3') || (magic_token[1] == '6')) + { + if ((fscan_pnm_uint_32 (pnm_file, &width) != 1) || + (fscan_pnm_uint_32 (pnm_file, &height) != 1) || + (fscan_pnm_uint_32 (pnm_file, &maxval) != 1)) + return FALSE; /* bad PGM/PPM file header */ } - else if ((type_token[1] == '1') || (type_token[1] == '4')) + + if ((magic_token[1] == '1') || (magic_token[1] == '4')) { -#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) - raw = (type_token[1] == '4'); - color_type = PNG_COLOR_TYPE_GRAY; - get_token(pnm_file, width_token); - sscanf (width_token, "%lu", &ul_width); - width = (png_uint_32) ul_width; - get_token(pnm_file, height_token); - sscanf (height_token, "%lu", &ul_height); - height = (png_uint_32) ul_height; + raw = (magic_token[1] == '4'); bit_depth = 1; + color_type = PNG_COLOR_TYPE_GRAY; packed_bitmap = TRUE; -#else - fprintf (stderr, "PNM2PNG built without PNG_WRITE_INVERT_SUPPORTED and \n"); - fprintf (stderr, "PNG_WRITE_PACK_SUPPORTED can't read PBM (P1,P4) files\n"); -#endif } - else if ((type_token[1] == '2') || (type_token[1] == '5')) + else if ((magic_token[1] == '2') || (magic_token[1] == '5')) { - raw = (type_token[1] == '5'); + raw = (magic_token[1] == '5'); color_type = PNG_COLOR_TYPE_GRAY; - get_token(pnm_file, width_token); - sscanf (width_token, "%lu", &ul_width); - width = (png_uint_32) ul_width; - get_token(pnm_file, height_token); - sscanf (height_token, "%lu", &ul_height); - height = (png_uint_32) ul_height; - get_token(pnm_file, maxval_token); - sscanf (maxval_token, "%lu", &ul_maxval); - maxval = (png_uint_32) ul_maxval; - - if (maxval <= 1) + if (maxval == 0) + return FALSE; + else if (maxval == 1) bit_depth = 1; else if (maxval <= 3) bit_depth = 2; @@ -280,23 +270,18 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, bit_depth = 4; else if (maxval <= 255) bit_depth = 8; - else /* if (maxval <= 65535) */ + else if (maxval <= 65535U) bit_depth = 16; + else /* maxval > 65535U */ + return FALSE; } - else if ((type_token[1] == '3') || (type_token[1] == '6')) + else if ((magic_token[1] == '3') || (magic_token[1] == '6')) { - raw = (type_token[1] == '6'); + raw = (magic_token[1] == '6'); color_type = PNG_COLOR_TYPE_RGB; - get_token(pnm_file, width_token); - sscanf (width_token, "%lu", &ul_width); - width = (png_uint_32) ul_width; - get_token(pnm_file, height_token); - sscanf (height_token, "%lu", &ul_height); - height = (png_uint_32) ul_height; - get_token(pnm_file, maxval_token); - sscanf (maxval_token, "%lu", &ul_maxval); - maxval = (png_uint_32) ul_maxval; - if (maxval <= 1) + if (maxval == 0) + return FALSE; + else if (maxval == 1) bit_depth = 1; else if (maxval <= 3) bit_depth = 2; @@ -304,8 +289,15 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, bit_depth = 4; else if (maxval <= 255) bit_depth = 8; - else /* if (maxval <= 65535) */ + else if (maxval <= 65535U) bit_depth = 16; + else /* maxval > 65535U */ + return FALSE; + } + else if (magic_token[1] == '7') + { + fprintf (stderr, "PNM2PNG can't read PAM (P7) files\n"); + return FALSE; } else { @@ -316,49 +308,36 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, if (alpha) { - if (color_type == PNG_COLOR_TYPE_GRAY) - color_type = PNG_COLOR_TYPE_GRAY_ALPHA; - if (color_type == PNG_COLOR_TYPE_RGB) - color_type = PNG_COLOR_TYPE_RGB_ALPHA; + if ((fscan_pnm_magic (alpha_file, magic_token, sizeof (magic_token)) != 1) + || ((magic_token[1] != '2') && (magic_token[1] != '5'))) + return FALSE; /* not a PGM file */ - get_token(alpha_file, type_token); - if (type_token[0] != 'P') - { + if ((fscan_pnm_uint_32 (alpha_file, &alpha_width) != 1) || + (fscan_pnm_uint_32 (alpha_file, &alpha_height) != 1) || + (fscan_pnm_uint_32 (alpha_file, &maxval) != 1)) + return FALSE; /* bad PGM file header */ + + if ((alpha_width != width) || (alpha_height != height)) + return FALSE; /* mismatched PGM dimensions */ + + alpha_raw = (magic_token[1] == '5'); + color_type |= PNG_COLOR_MASK_ALPHA; + if (maxval == 0) return FALSE; - } - else if ((type_token[1] == '2') || (type_token[1] == '5')) - { - alpha_raw = (type_token[1] == '5'); - get_token(alpha_file, width_token); - sscanf (width_token, "%lu", &ul_alpha_width); - alpha_width=(png_uint_32) ul_alpha_width; - if (alpha_width != width) - return FALSE; - get_token(alpha_file, height_token); - sscanf (height_token, "%lu", &ul_alpha_height); - alpha_height = (png_uint_32) ul_alpha_height; - if (alpha_height != height) - return FALSE; - get_token(alpha_file, maxval_token); - sscanf (maxval_token, "%lu", &ul_maxval); - maxval = (png_uint_32) ul_maxval; - if (maxval <= 1) - alpha_depth = 1; - else if (maxval <= 3) - alpha_depth = 2; - else if (maxval <= 15) - alpha_depth = 4; - else if (maxval <= 255) - alpha_depth = 8; - else /* if (maxval <= 65535) */ - alpha_depth = 16; - if (alpha_depth != bit_depth) - return FALSE; - } - else - { + else if (maxval == 1) + alpha_depth = 1; + else if (maxval <= 3) + alpha_depth = 2; + else if (maxval <= 15) + alpha_depth = 4; + else if (maxval <= 255) + alpha_depth = 8; + else if (maxval <= 65535U) + alpha_depth = 16; + else /* maxval > 65535U */ + return FALSE; + if (alpha_depth != bit_depth) return FALSE; - } } /* end if alpha */ /* calculate the number of channels and store alpha-presence */ @@ -370,219 +349,259 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, channels = 3; else if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) channels = 4; -#if 0 else - channels = 0; /* cannot happen */ -#endif + return FALSE; /* NOTREACHED */ alpha_present = (channels - 1) % 2; -#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) if (packed_bitmap) + { /* row data is as many bytes as can fit width x channels x bit_depth */ row_bytes = (width * channels * bit_depth + 7) / 8; + } else -#endif - /* row_bytes is the width x number of channels x (bit-depth / 8) */ + { + /* row_bytes is the width x number of channels x (bit-depth / 8) */ row_bytes = width * channels * ((bit_depth <= 8) ? 1 : 2); + } - if ((row_bytes == 0 || (size_t)height > ((size_t)(-1))/(size_t)row_bytes)) + if ((row_bytes == 0) || + ((size_t) height > (size_t) (-1) / (size_t) row_bytes)) { - /* too big */ + /* too big */ return FALSE; } - if ((png_pixels = (png_byte *) - malloc ((size_t)row_bytes * (size_t)height * sizeof (png_byte))) == NULL) - return FALSE; - /* read data from PNM file */ - pix_ptr = png_pixels; + /* allocate the rows using the same memory layout as libpng, and transfer + * their ownership to libpng, with the responsibility to clean everything up; + * please note the use of png_calloc instead of png_malloc */ + row_pointers = (png_byte **) + png_calloc (png_ptr, height * sizeof (png_byte *)); + png_set_rows (png_ptr, info_ptr, row_pointers); + png_data_freer (png_ptr, info_ptr, PNG_DESTROY_WILL_FREE_DATA, PNG_FREE_ALL); + for (row = 0; row < height; row++) + { + /* the individual rows should only be allocated after all the previous + * steps completed successfully, because libpng must handle correctly + * any image allocation left incomplete after an out-of-memory error */ + row_pointers[row] = (png_byte *) png_malloc (png_ptr, row_bytes); + } + + /* read the data from PNM file */ - for (row = 0; row < (int) height; row++) + for (row = 0; row < height; row++) { -#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) + pix_ptr = row_pointers[row]; if (packed_bitmap) { - for (i = 0; i < (int) row_bytes; i++) + for (i = 0; i < row_bytes; i++) + { /* png supports this format natively so no conversion is needed */ - *pix_ptr++ = get_data (pnm_file, 8); - } else -#endif + *pix_ptr++ = get_pnm_data (pnm_file, 8); + } + } + else { - for (col = 0; col < (int) width; col++) + for (col = 0; col < width; col++) { - for (i = 0; i < (channels - alpha_present); i++) + for (i = 0; i < (png_uint_32) (channels - alpha_present); i++) { if (raw) - *pix_ptr++ = get_data (pnm_file, bit_depth); + { + *pix_ptr++ = get_pnm_data (pnm_file, bit_depth); + if (bit_depth == 16) + *pix_ptr++ = get_pnm_data (pnm_file, bit_depth); + } else + { if (bit_depth <= 8) - *pix_ptr++ = get_value (pnm_file, bit_depth); + { + *pix_ptr++ = get_pnm_value (pnm_file, bit_depth); + } else { - tmp16 = get_value (pnm_file, bit_depth); - *pix_ptr = (png_byte) ((tmp16 >> 8) & 0xFF); + val16 = get_pnm_value (pnm_file, bit_depth); + *pix_ptr = (png_byte) ((val16 >> 8) & 0xFF); pix_ptr++; - *pix_ptr = (png_byte) (tmp16 & 0xFF); + *pix_ptr = (png_byte) (val16 & 0xFF); pix_ptr++; } + } } if (alpha) /* read alpha-channel from pgm file */ { if (alpha_raw) - *pix_ptr++ = get_data (alpha_file, alpha_depth); + { + *pix_ptr++ = get_pnm_data (alpha_file, alpha_depth); + if (alpha_depth == 16) + *pix_ptr++ = get_pnm_data (alpha_file, alpha_depth); + } else + { if (alpha_depth <= 8) - *pix_ptr++ = get_value (alpha_file, bit_depth); + { + *pix_ptr++ = get_pnm_value (alpha_file, bit_depth); + } else { - tmp16 = get_value (alpha_file, bit_depth); - *pix_ptr++ = (png_byte) ((tmp16 >> 8) & 0xFF); - *pix_ptr++ = (png_byte) (tmp16 & 0xFF); + val16 = get_pnm_value (alpha_file, bit_depth); + *pix_ptr++ = (png_byte) ((val16 >> 8) & 0xFF); + *pix_ptr++ = (png_byte) (val16 & 0xFF); } - } /* if alpha */ - } /* if packed_bitmap */ + } + } /* end if alpha */ + } /* end if packed_bitmap */ } /* end for col */ } /* end for row */ - /* prepare the standard PNG structures */ - png_ptr = png_create_write_struct (png_get_libpng_ver(NULL), NULL, NULL, - NULL); - if (!png_ptr) - { - free (png_pixels); - png_pixels = NULL; - return FALSE; - } - info_ptr = png_create_info_struct (png_ptr); - if (!info_ptr) - { - png_destroy_write_struct (&png_ptr, (png_infopp) NULL); - free (png_pixels); - png_pixels = NULL; - return FALSE; - } + /* we're going to write more or less the same PNG as the input file */ + png_set_IHDR (png_ptr, info_ptr, width, height, bit_depth, color_type, + (!interlace) ? PNG_INTERLACE_NONE : PNG_INTERLACE_ADAM7, + PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); -#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) if (packed_bitmap == TRUE) { png_set_packing (png_ptr); png_set_invert_mono (png_ptr); } -#endif - - /* setjmp() must be called in every function that calls a PNG-reading libpng function */ - if (setjmp (png_jmpbuf(png_ptr))) - { - png_destroy_write_struct (&png_ptr, &info_ptr); - free (png_pixels); - png_pixels = NULL; - return FALSE; - } - - /* initialize the png structure */ - png_init_io (png_ptr, png_file); - - /* we're going to write more or less the same PNG as the input file */ - png_set_IHDR (png_ptr, info_ptr, width, height, bit_depth, color_type, - (!interlace) ? PNG_INTERLACE_NONE : PNG_INTERLACE_ADAM7, - PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); /* write the file header information */ png_write_info (png_ptr, info_ptr); - /* if needed we will allocate memory for an new array of row-pointers */ - if (row_pointers == (unsigned char**) NULL) - { - if ((row_pointers = (png_byte **) - malloc (height * sizeof (png_bytep))) == NULL) - { - png_destroy_write_struct (&png_ptr, &info_ptr); - free (png_pixels); - png_pixels = NULL; - return FALSE; - } - } - - /* set the individual row_pointers to point at the correct offsets */ - for (i = 0; i < (int) height; i++) - row_pointers[i] = png_pixels + i * row_bytes; - /* write out the entire image data in one call */ png_write_image (png_ptr, row_pointers); /* write the additional chunks to the PNG file (not really needed) */ png_write_end (png_ptr, info_ptr); - /* clean up after the write, and free any memory allocated */ - png_destroy_write_struct (&png_ptr, &info_ptr); + return TRUE; +} /* end of pnm2png */ - if (row_pointers != (unsigned char**) NULL) - free (row_pointers); - if (png_pixels != (unsigned char*) NULL) - free (png_pixels); +/* + * fscan_pnm_magic - like fscan_pnm_token below, but expects the magic string + * to start immediately, without any comment or whitespace, + * and to match the regex /^P[1-9]$/ + */ - PNGMINUS_UNUSED(raw); /* Quiet a Coverity defect */ +int fscan_pnm_magic (FILE *pnm_file, char *magic_buf, size_t magic_buf_size) +{ + int ret; - return TRUE; -} /* end of pnm2png */ + ret = fgetc (pnm_file); + if (ret == EOF) return 0; + ungetc (ret, pnm_file); + if (ret != 'P') return 0; + + /* the string buffer must be at least four bytes long, i.e., the capacity + * required for strings of at least three characters long, i.e., the minimum + * required for ensuring that our magic string is exactly two characters long + */ + if (magic_buf_size < 4) return -1; + + ret = fscan_pnm_token (pnm_file, magic_buf, magic_buf_size); + if (ret < 1) return ret; + + if ((magic_buf[1] < '1') || (magic_buf[1] > '9')) return 0; + if (magic_buf[2] != '\0') return 0; + + return 1; +} /* - * get_token() - gets the first string after whitespace + * fscan_pnm_token - extracts the first string token after whitespace, + * and (like fscanf) returns the number of successful + * extractions, which can be either 0 or 1 */ -void get_token(FILE *pnm_file, char *token) +int fscan_pnm_token (FILE *pnm_file, char *token_buf, size_t token_buf_size) { - int i = 0; + size_t i = 0; int ret; /* remove white-space and comment lines */ do { - ret = fgetc(pnm_file); + ret = fgetc (pnm_file); if (ret == '#') { /* the rest of this line is a comment */ do { - ret = fgetc(pnm_file); + ret = fgetc (pnm_file); } while ((ret != '\n') && (ret != '\r') && (ret != EOF)); } if (ret == EOF) break; - token[i] = (unsigned char) ret; + token_buf[i] = (char) ret; } - while ((token[i] == '\n') || (token[i] == '\r') || (token[i] == ' ')); + while ((ret == '\n') || (ret == '\r') || (ret == ' ')); /* read string */ do { - ret = fgetc(pnm_file); + ret = fgetc (pnm_file); if (ret == EOF) break; - i++; - token[i] = (unsigned char) ret; + if (ret == '0') + { + /* avoid storing more than one leading '0' in the token buffer, + * to ensure that all valid (in-range) numeric inputs can fit in. */ + if ((i == 0) && (token_buf[i] == '0')) continue; + } + if (++i == token_buf_size - 1) break; + token_buf[i] = (char) ret; } - while ((token[i] != '\n') && (token[i] != '\r') && (token[i] != ' ')); + while ((ret != '\n') && (ret != '\r') && (ret != ' ')); + + token_buf[i] = '\0'; + return (i > 0) ? 1 : 0; +} + +/* + * fscan_pnm_uint_32 - like fscan_token above, but expects the extracted token + * to be numeric, and converts it to an unsigned 32-bit int + */ + +int fscan_pnm_uint_32 (FILE *pnm_file, png_uint_32 *num_ptr) +{ + char token[16]; + unsigned long token_value; + int ret; + + ret = fscan_pnm_token (pnm_file, token, sizeof (token)); + if (ret < 1) return ret; - token[i] = '\0'; + if ((token[0] < '0') && (token[0] > '9')) + return 0; /* the token starts with junk, or a +/- sign, which is invalid */ - return; + ret = sscanf (token, "%lu%*c", &token_value); + if (ret != 1) + return 0; /* the token ends with junk */ + + *num_ptr = (png_uint_32) token_value; + +#if ULONG_MAX > 0xFFFFFFFFUL + /* saturate the converted number, following the fscanf convention */ + if (token_value > 0xFFFFFFFFUL) + *num_ptr = 0xFFFFFFFFUL; +#endif + + return 1; } /* - * get_data() - takes first byte and converts into next pixel value, - * taking as much bits as defined by bit-depth and - * using the bit-depth to fill up a byte (0Ah -> AAh) + * get_pnm_data - takes first byte and converts into next pixel value, + * taking as many bits as defined by bit-depth and + * using the bit-depth to fill up a byte (0x0A -> 0xAA) */ -png_uint_32 get_data (FILE *pnm_file, int depth) +png_uint_32 get_pnm_data (FILE *pnm_file, int depth) { static int bits_left = 0; static int old_value = 0; static int mask = 0; - int i; png_uint_32 ret_value; + int i; if (mask == 0) for (i = 0; i < depth; i++) @@ -590,7 +609,11 @@ png_uint_32 get_data (FILE *pnm_file, int depth) if (bits_left <= 0) { + /* FIXME: + * signal the premature end of file, instead of pretending to read zeroes + */ old_value = fgetc (pnm_file); + if (old_value == EOF) return 0; bits_left = 8; } @@ -605,25 +628,28 @@ png_uint_32 get_data (FILE *pnm_file, int depth) } /* - * get_value() - takes first (numeric) string and converts into number, - * using the bit-depth to fill up a byte (0Ah -> AAh) + * get_pnm_value - takes first (numeric) string and converts into number, + * using the bit-depth to fill up a byte (0x0A -> 0xAA) */ -png_uint_32 get_value (FILE *pnm_file, int depth) +png_uint_32 get_pnm_value (FILE *pnm_file, int depth) { static png_uint_32 mask = 0; - png_byte token[16]; - unsigned long ul_ret_value; png_uint_32 ret_value; - int i = 0; + int i; if (mask == 0) for (i = 0; i < depth; i++) mask = (mask << 1) | 0x01; - get_token (pnm_file, (char *) token); - sscanf ((const char *) token, "%lu", &ul_ret_value); - ret_value = (png_uint_32) ul_ret_value; + if (fscan_pnm_uint_32 (pnm_file, &ret_value) != 1) + { + /* FIXME: + * signal the invalid numeric tokens or the premature end of file, + * instead of pretending to read zeroes + */ + return 0; + } ret_value &= mask; @@ -635,4 +661,3 @@ png_uint_32 get_value (FILE *pnm_file, int depth) } /* end of source */ - diff --git a/vs/libpng/contrib/pngminus/test_png2pnm.bat b/vs/libpng/contrib/pngminus/test_png2pnm.bat new file mode 100644 index 00000000000..a2798c34032 --- /dev/null +++ b/vs/libpng/contrib/pngminus/test_png2pnm.bat @@ -0,0 +1,41 @@ +REM -- grayscale +png2pnm.exe -noraw ..\pngsuite\basn0g01.png basn0g01.pgm +png2pnm.exe -noraw ..\pngsuite\basn0g02.png basn0g02.pgm +png2pnm.exe -noraw ..\pngsuite\basn0g04.png basn0g04.pgm +png2pnm.exe -noraw ..\pngsuite\basn0g08.png basn0g08.pgm +png2pnm.exe -noraw ..\pngsuite\basn0g16.png basn0g16.pgm +REM -- full-color +png2pnm.exe -noraw ..\pngsuite\basn2c08.png basn2c08.ppm +png2pnm.exe -noraw ..\pngsuite\basn2c16.png basn2c16.ppm +REM -- paletted +png2pnm.exe -noraw ..\pngsuite\basn3p01.png basn3p01.ppm +png2pnm.exe -noraw ..\pngsuite\basn3p02.png basn3p02.ppm +png2pnm.exe -noraw ..\pngsuite\basn3p04.png basn3p04.ppm +png2pnm.exe -noraw ..\pngsuite\basn3p08.png basn3p08.ppm +REM -- gray with alpha-channel +png2pnm.exe -noraw ..\pngsuite\basn4a08.png basn4a08.pgm +png2pnm.exe -noraw ..\pngsuite\basn4a16.png basn4a16.pgm +REM -- color with alpha-channel +png2pnm.exe -noraw -alpha basn6a08.pgm ..\pngsuite\basn6a08.png basn6a08.ppm +png2pnm.exe -noraw -alpha basn6a16.pgm ..\pngsuite\basn6a16.png basn6a16.ppm +REM -- grayscale +png2pnm.exe -raw ..\pngsuite\basn0g01.png rawn0g01.pgm +png2pnm.exe -raw ..\pngsuite\basn0g02.png rawn0g02.pgm +png2pnm.exe -raw ..\pngsuite\basn0g04.png rawn0g04.pgm +png2pnm.exe -raw ..\pngsuite\basn0g08.png rawn0g08.pgm +png2pnm.exe -raw ..\pngsuite\basn0g16.png rawn0g16.pgm +REM -- full-color +png2pnm.exe -raw ..\pngsuite\basn2c08.png rawn2c08.ppm +png2pnm.exe -raw ..\pngsuite\basn2c16.png rawn2c16.ppm +REM -- paletted +png2pnm.exe -raw ..\pngsuite\basn3p01.png rawn3p01.ppm +png2pnm.exe -raw ..\pngsuite\basn3p02.png rawn3p02.ppm +png2pnm.exe -raw ..\pngsuite\basn3p04.png rawn3p04.ppm +png2pnm.exe -raw ..\pngsuite\basn3p08.png rawn3p08.ppm +REM -- gray with alpha-channel +png2pnm.exe -raw ..\pngsuite\basn4a08.png rawn4a08.pgm +png2pnm.exe -raw ..\pngsuite\basn4a16.png rawn4a16.pgm +REM -- color with alpha-channel +png2pnm.exe -noraw -alpha rawn6a08.pgm ..\pngsuite\basn6a08.png rawn6a08.ppm +png2pnm.exe -noraw -alpha rawn6a16.pgm ..\pngsuite\basn6a16.png rawn6a16.ppm + diff --git a/vs/libpng/contrib/pngminus/test_png2pnm.sh b/vs/libpng/contrib/pngminus/test_png2pnm.sh new file mode 100644 index 00000000000..756126a53c2 --- /dev/null +++ b/vs/libpng/contrib/pngminus/test_png2pnm.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# -- grayscale +./png2pnm -noraw ../pngsuite/basn0g01.png basn0g01.pgm +./png2pnm -noraw ../pngsuite/basn0g02.png basn0g02.pgm +./png2pnm -noraw ../pngsuite/basn0g04.png basn0g04.pgm +./png2pnm -noraw ../pngsuite/basn0g08.png basn0g08.pgm +./png2pnm -noraw ../pngsuite/basn0g16.png basn0g16.pgm +# -- full-color +./png2pnm -noraw ../pngsuite/basn2c08.png basn2c08.ppm +./png2pnm -noraw ../pngsuite/basn2c16.png basn2c16.ppm +# -- paletted +./png2pnm -noraw ../pngsuite/basn3p01.png basn3p01.ppm +./png2pnm -noraw ../pngsuite/basn3p02.png basn3p02.ppm +./png2pnm -noraw ../pngsuite/basn3p04.png basn3p04.ppm +./png2pnm -noraw ../pngsuite/basn3p08.png basn3p08.ppm +# -- gray with alpha-channel +./png2pnm -noraw ../pngsuite/basn4a08.png basn4a08.pgm +./png2pnm -noraw ../pngsuite/basn4a16.png basn4a16.pgm +# -- color with alpha-channel +./png2pnm -noraw -alpha basn6a08.pgm ../pngsuite/basn6a08.png basn6a08.ppm +./png2pnm -noraw -alpha basn6a16.pgm ../pngsuite/basn6a16.png basn6a16.ppm +# -- grayscale +./png2pnm -raw ../pngsuite/basn0g01.png rawn0g01.pgm +./png2pnm -raw ../pngsuite/basn0g02.png rawn0g02.pgm +./png2pnm -raw ../pngsuite/basn0g04.png rawn0g04.pgm +./png2pnm -raw ../pngsuite/basn0g08.png rawn0g08.pgm +./png2pnm -raw ../pngsuite/basn0g16.png rawn0g16.pgm +# -- full-color +./png2pnm -raw ../pngsuite/basn2c08.png rawn2c08.ppm +./png2pnm -raw ../pngsuite/basn2c16.png rawn2c16.ppm +# -- paletted +./png2pnm -raw ../pngsuite/basn3p01.png rawn3p01.ppm +./png2pnm -raw ../pngsuite/basn3p02.png rawn3p02.ppm +./png2pnm -raw ../pngsuite/basn3p04.png rawn3p04.ppm +./png2pnm -raw ../pngsuite/basn3p08.png rawn3p08.ppm +# -- gray with alpha-channel +./png2pnm -raw ../pngsuite/basn4a08.png rawn4a08.pgm +./png2pnm -raw ../pngsuite/basn4a16.png rawn4a16.pgm +# -- color with alpha-channel +./png2pnm -noraw -alpha rawn6a08.pgm ../pngsuite/basn6a08.png rawn6a08.ppm +./png2pnm -noraw -alpha rawn6a16.pgm ../pngsuite/basn6a16.png rawn6a16.ppm + diff --git a/vs/libpng/contrib/pngminus/test_pngminus.bat b/vs/libpng/contrib/pngminus/test_pngminus.bat new file mode 100644 index 00000000000..fa60e7de07f --- /dev/null +++ b/vs/libpng/contrib/pngminus/test_pngminus.bat @@ -0,0 +1,4 @@ +make +call png2pnm.bat +call pnm2png.bat + diff --git a/vs/libpng/contrib/pngminus/test_pngminus.sh b/vs/libpng/contrib/pngminus/test_pngminus.sh new file mode 100644 index 00000000000..cc9b4a56e37 --- /dev/null +++ b/vs/libpng/contrib/pngminus/test_pngminus.sh @@ -0,0 +1,5 @@ +#!/bin/sh +make +sh png2pnm.sh +sh pnm2png.sh + diff --git a/vs/libpng/contrib/pngminus/test_pnm2png.bat b/vs/libpng/contrib/pngminus/test_pnm2png.bat new file mode 100644 index 00000000000..c02b80beccd --- /dev/null +++ b/vs/libpng/contrib/pngminus/test_pnm2png.bat @@ -0,0 +1,41 @@ +REM -- grayscale +pnm2png.exe basn0g01.pgm basn0g01.png +pnm2png.exe basn0g02.pgm basn0g02.png +pnm2png.exe basn0g04.pgm basn0g04.png +pnm2png.exe basn0g08.pgm basn0g08.png +pnm2png.exe basn0g16.pgm basn0g16.png +REM -- full-color +pnm2png.exe basn2c08.ppm basn2c08.png +pnm2png.exe basn2c16.ppm basn2c16.png +REM -- paletted +pnm2png.exe basn3p01.ppm basn3p01.png +pnm2png.exe basn3p02.ppm basn3p02.png +pnm2png.exe basn3p04.ppm basn3p04.png +pnm2png.exe basn3p08.ppm basn3p08.png +REM -- gray with alpha-channel +pnm2png.exe -alpha basn6a08.pgm basn4a08.pgm basn4a08.png +pnm2png.exe -alpha basn6a16.pgm basn4a16.pgm basn4a16.png +REM -- color with alpha-channel +pnm2png.exe -alpha basn6a08.pgm basn6a08.ppm basn6a08.png +pnm2png.exe -alpha basn6a16.pgm basn6a16.ppm basn6a16.png +REM -- grayscale +pnm2png.exe rawn0g01.pgm rawn0g01.png +pnm2png.exe rawn0g02.pgm rawn0g02.png +pnm2png.exe rawn0g04.pgm rawn0g04.png +pnm2png.exe rawn0g08.pgm rawn0g08.png +pnm2png.exe rawn0g16.pgm rawn0g16.png +REM -- full-color +pnm2png.exe rawn2c08.ppm rawn2c08.png +pnm2png.exe rawn2c16.ppm rawn2c16.png +REM -- paletted +pnm2png.exe rawn3p01.ppm rawn3p01.png +pnm2png.exe rawn3p02.ppm rawn3p02.png +pnm2png.exe rawn3p04.ppm rawn3p04.png +pnm2png.exe rawn3p08.ppm rawn3p08.png +REM -- gray with alpha-channel +pnm2png.exe -alpha rawn6a08.pgm rawn4a08.pgm rawn4a08.png +pnm2png.exe -alpha rawn6a16.pgm rawn4a16.pgm rawn4a16.png +REM -- color with alpha-channel +pnm2png.exe -alpha rawn6a08.pgm rawn6a08.ppm rawn6a08.png +pnm2png.exe -alpha rawn6a16.pgm rawn6a16.ppm rawn6a16.png + diff --git a/vs/libpng/contrib/pngminus/test_pnm2png.sh b/vs/libpng/contrib/pngminus/test_pnm2png.sh new file mode 100644 index 00000000000..2ad17a608c9 --- /dev/null +++ b/vs/libpng/contrib/pngminus/test_pnm2png.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# -- grayscale +./pnm2png basn0g01.pgm basn0g01.png +./pnm2png basn0g02.pgm basn0g02.png +./pnm2png basn0g04.pgm basn0g04.png +./pnm2png basn0g08.pgm basn0g08.png +./pnm2png basn0g16.pgm basn0g16.png +# -- full-color +./pnm2png basn2c08.ppm basn2c08.png +./pnm2png basn2c16.ppm basn2c16.png +# -- paletted +./pnm2png basn3p01.ppm basn3p01.png +./pnm2png basn3p02.ppm basn3p02.png +./pnm2png basn3p04.ppm basn3p04.png +./pnm2png basn3p08.ppm basn3p08.png +# -- gray with alpha-channel +./pnm2png -alpha basn6a08.pgm basn4a08.pgm basn4a08.png +./pnm2png -alpha basn6a16.pgm basn4a16.pgm basn4a16.png +# -- color with alpha-channel +./pnm2png -alpha basn6a08.pgm basn6a08.ppm basn6a08.png +./pnm2png -alpha basn6a16.pgm basn6a16.ppm basn6a16.png +# -- grayscale +./pnm2png rawn0g01.pgm rawn0g01.png +./pnm2png rawn0g02.pgm rawn0g02.png +./pnm2png rawn0g04.pgm rawn0g04.png +./pnm2png rawn0g08.pgm rawn0g08.png +./pnm2png rawn0g16.pgm rawn0g16.png +# -- full-color +./pnm2png rawn2c08.ppm rawn2c08.png +./pnm2png rawn2c16.ppm rawn2c16.png +# -- paletted +./pnm2png rawn3p01.ppm rawn3p01.png +./pnm2png rawn3p02.ppm rawn3p02.png +./pnm2png rawn3p04.ppm rawn3p04.png +./pnm2png rawn3p08.ppm rawn3p08.png +# -- gray with alpha-channel +./pnm2png -alpha rawn6a08.pgm rawn4a08.pgm rawn4a08.png +./pnm2png -alpha rawn6a16.pgm rawn4a16.pgm rawn4a16.png +# -- color with alpha-channel +./pnm2png -alpha rawn6a08.pgm rawn6a08.ppm rawn6a08.png +./pnm2png -alpha rawn6a16.pgm rawn6a16.ppm rawn6a16.png + diff --git a/vs/libpng/contrib/pngsuite/README b/vs/libpng/contrib/pngsuite/README index 53ba5c8f7ed..25f0f54fdae 100644 --- a/vs/libpng/contrib/pngsuite/README +++ b/vs/libpng/contrib/pngsuite/README @@ -1,4 +1,3 @@ - pngsuite -------- Copyright (c) Willem van Schaik, 1999, 2011, 2012 @@ -16,6 +15,8 @@ chunks, etc. The "ft*.png" images are "free/libre" replacements for the transparent corresponding t*.png images in the PngSuite. +The "i*.png" images are the same images, but interlaced. + The images in this directory represent the basic PNG color-types: grayscale (1-16 bit deep), full color (8 or 16 bit), paletted (1-8 bit) and grayscale or color images with alpha channel. You diff --git a/vs/libpng/contrib/pngsuite/bad_interlace_conversions.txt b/vs/libpng/contrib/pngsuite/bad_interlace_conversions.txt new file mode 100644 index 00000000000..8afbde79018 --- /dev/null +++ b/vs/libpng/contrib/pngsuite/bad_interlace_conversions.txt @@ -0,0 +1,9 @@ +basn0g01.png +basn0g02.png +basn0g04.png +basn3p01.png +basn3p02.png +basn3p04.png +ftbbn0g01.png +ftbbn0g02.png +ftbbn0g04.png diff --git a/vs/libpng/contrib/pngsuite/ibasn0g08.png b/vs/libpng/contrib/pngsuite/ibasn0g08.png new file mode 100644 index 00000000000..90b5305e651 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/ibasn0g08.png differ diff --git a/vs/libpng/contrib/pngsuite/ibasn0g16.png b/vs/libpng/contrib/pngsuite/ibasn0g16.png new file mode 100644 index 00000000000..c82f230eef5 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/ibasn0g16.png differ diff --git a/vs/libpng/contrib/pngsuite/ibasn2c08.png b/vs/libpng/contrib/pngsuite/ibasn2c08.png new file mode 100644 index 00000000000..05d4688853e Binary files /dev/null and b/vs/libpng/contrib/pngsuite/ibasn2c08.png differ diff --git a/vs/libpng/contrib/pngsuite/ibasn2c16.png b/vs/libpng/contrib/pngsuite/ibasn2c16.png new file mode 100644 index 00000000000..399f1be5edd Binary files /dev/null and b/vs/libpng/contrib/pngsuite/ibasn2c16.png differ diff --git a/vs/libpng/contrib/pngsuite/ibasn3p08.png b/vs/libpng/contrib/pngsuite/ibasn3p08.png new file mode 100644 index 00000000000..6df8370aaf8 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/ibasn3p08.png differ diff --git a/vs/libpng/contrib/pngsuite/ibasn4a08.png b/vs/libpng/contrib/pngsuite/ibasn4a08.png new file mode 100644 index 00000000000..bda8e3c6517 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/ibasn4a08.png differ diff --git a/vs/libpng/contrib/pngsuite/ibasn4a16.png b/vs/libpng/contrib/pngsuite/ibasn4a16.png new file mode 100644 index 00000000000..500f9128e6e Binary files /dev/null and b/vs/libpng/contrib/pngsuite/ibasn4a16.png differ diff --git a/vs/libpng/contrib/pngsuite/ibasn6a08.png b/vs/libpng/contrib/pngsuite/ibasn6a08.png new file mode 100644 index 00000000000..258f94050cc Binary files /dev/null and b/vs/libpng/contrib/pngsuite/ibasn6a08.png differ diff --git a/vs/libpng/contrib/pngsuite/ibasn6a16.png b/vs/libpng/contrib/pngsuite/ibasn6a16.png new file mode 100644 index 00000000000..e4de69fef1d Binary files /dev/null and b/vs/libpng/contrib/pngsuite/ibasn6a16.png differ diff --git a/vs/libpng/contrib/pngsuite/iftbbn2c16.png b/vs/libpng/contrib/pngsuite/iftbbn2c16.png new file mode 100644 index 00000000000..64a9cdf2f7f Binary files /dev/null and b/vs/libpng/contrib/pngsuite/iftbbn2c16.png differ diff --git a/vs/libpng/contrib/pngsuite/iftbbn3p08.png b/vs/libpng/contrib/pngsuite/iftbbn3p08.png new file mode 100644 index 00000000000..47d6eeb3c0f Binary files /dev/null and b/vs/libpng/contrib/pngsuite/iftbbn3p08.png differ diff --git a/vs/libpng/contrib/pngsuite/iftbgn2c16.png b/vs/libpng/contrib/pngsuite/iftbgn2c16.png new file mode 100644 index 00000000000..64a9cdf2f7f Binary files /dev/null and b/vs/libpng/contrib/pngsuite/iftbgn2c16.png differ diff --git a/vs/libpng/contrib/pngsuite/iftbgn3p08.png b/vs/libpng/contrib/pngsuite/iftbgn3p08.png new file mode 100644 index 00000000000..47d6eeb3c0f Binary files /dev/null and b/vs/libpng/contrib/pngsuite/iftbgn3p08.png differ diff --git a/vs/libpng/contrib/pngsuite/iftbrn2c08.png b/vs/libpng/contrib/pngsuite/iftbrn2c08.png new file mode 100644 index 00000000000..08ebbae2c8c Binary files /dev/null and b/vs/libpng/contrib/pngsuite/iftbrn2c08.png differ diff --git a/vs/libpng/contrib/pngsuite/iftbwn0g16.png b/vs/libpng/contrib/pngsuite/iftbwn0g16.png new file mode 100644 index 00000000000..4b7537e3050 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/iftbwn0g16.png differ diff --git a/vs/libpng/contrib/pngsuite/iftbwn3p08.png b/vs/libpng/contrib/pngsuite/iftbwn3p08.png new file mode 100644 index 00000000000..47d6eeb3c0f Binary files /dev/null and b/vs/libpng/contrib/pngsuite/iftbwn3p08.png differ diff --git a/vs/libpng/contrib/pngsuite/iftbyn3p08.png b/vs/libpng/contrib/pngsuite/iftbyn3p08.png new file mode 100644 index 00000000000..47d6eeb3c0f Binary files /dev/null and b/vs/libpng/contrib/pngsuite/iftbyn3p08.png differ diff --git a/vs/libpng/contrib/pngsuite/iftp0n0g08.png b/vs/libpng/contrib/pngsuite/iftp0n0g08.png new file mode 100644 index 00000000000..aa826b86308 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/iftp0n0g08.png differ diff --git a/vs/libpng/contrib/pngsuite/iftp0n2c08.png b/vs/libpng/contrib/pngsuite/iftp0n2c08.png new file mode 100644 index 00000000000..b12bd0a7fa9 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/iftp0n2c08.png differ diff --git a/vs/libpng/contrib/pngsuite/iftp0n3p08.png b/vs/libpng/contrib/pngsuite/iftp0n3p08.png new file mode 100644 index 00000000000..37aa0cb0d92 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/iftp0n3p08.png differ diff --git a/vs/libpng/contrib/pngsuite/iftp1n3p08.png b/vs/libpng/contrib/pngsuite/iftp1n3p08.png new file mode 100644 index 00000000000..47d6eeb3c0f Binary files /dev/null and b/vs/libpng/contrib/pngsuite/iftp1n3p08.png differ diff --git a/vs/libpng/contrib/pngsuite/interlaced/README b/vs/libpng/contrib/pngsuite/interlaced/README new file mode 100644 index 00000000000..296fffba6f2 --- /dev/null +++ b/vs/libpng/contrib/pngsuite/interlaced/README @@ -0,0 +1 @@ +These images fail the "pngimage-quick" and "pngimage-full" tests. diff --git a/vs/libpng/contrib/pngsuite/interlaced/ibasn0g01.png b/vs/libpng/contrib/pngsuite/interlaced/ibasn0g01.png new file mode 100644 index 00000000000..828fa760369 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/interlaced/ibasn0g01.png differ diff --git a/vs/libpng/contrib/pngsuite/interlaced/ibasn0g02.png b/vs/libpng/contrib/pngsuite/interlaced/ibasn0g02.png new file mode 100644 index 00000000000..7fc17e3a1ee Binary files /dev/null and b/vs/libpng/contrib/pngsuite/interlaced/ibasn0g02.png differ diff --git a/vs/libpng/contrib/pngsuite/interlaced/ibasn0g04.png b/vs/libpng/contrib/pngsuite/interlaced/ibasn0g04.png new file mode 100644 index 00000000000..1beade28f57 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/interlaced/ibasn0g04.png differ diff --git a/vs/libpng/contrib/pngsuite/interlaced/ibasn3p01.png b/vs/libpng/contrib/pngsuite/interlaced/ibasn3p01.png new file mode 100644 index 00000000000..f91e7233e70 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/interlaced/ibasn3p01.png differ diff --git a/vs/libpng/contrib/pngsuite/interlaced/ibasn3p02.png b/vs/libpng/contrib/pngsuite/interlaced/ibasn3p02.png new file mode 100644 index 00000000000..0f9ce76e6b3 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/interlaced/ibasn3p02.png differ diff --git a/vs/libpng/contrib/pngsuite/interlaced/ibasn3p04.png b/vs/libpng/contrib/pngsuite/interlaced/ibasn3p04.png new file mode 100644 index 00000000000..b2ca720747a Binary files /dev/null and b/vs/libpng/contrib/pngsuite/interlaced/ibasn3p04.png differ diff --git a/vs/libpng/contrib/pngsuite/interlaced/iftbbn0g01.png b/vs/libpng/contrib/pngsuite/interlaced/iftbbn0g01.png new file mode 100644 index 00000000000..6eb27d10e8d Binary files /dev/null and b/vs/libpng/contrib/pngsuite/interlaced/iftbbn0g01.png differ diff --git a/vs/libpng/contrib/pngsuite/interlaced/iftbbn0g02.png b/vs/libpng/contrib/pngsuite/interlaced/iftbbn0g02.png new file mode 100644 index 00000000000..46ba4977792 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/interlaced/iftbbn0g02.png differ diff --git a/vs/libpng/contrib/pngsuite/interlaced/iftbbn0g04.png b/vs/libpng/contrib/pngsuite/interlaced/iftbbn0g04.png new file mode 100644 index 00000000000..e9db0ad50d0 Binary files /dev/null and b/vs/libpng/contrib/pngsuite/interlaced/iftbbn0g04.png differ diff --git a/vs/libpng/contrib/powerpc-vsx/README b/vs/libpng/contrib/powerpc-vsx/README index e566147ea05..4970a52c692 100644 --- a/vs/libpng/contrib/powerpc-vsx/README +++ b/vs/libpng/contrib/powerpc-vsx/README @@ -46,7 +46,7 @@ everything should be static. It must define the function: static int png_have_vsx(png_structp png_ptr); -That function must return 1 if ARM NEON instructions are supported, 0 if not. +That function must return 1 if POWERPC_VSX instructions are supported, 0 if not. It must not execute png_error unless it detects a bug. A png_error will prevent the reading of the PNG and in the future, writing too. diff --git a/vs/libpng/contrib/powerpc-vsx/linux.c b/vs/libpng/contrib/powerpc-vsx/linux.c index 32ed9d7491d..d861b282656 100644 --- a/vs/libpng/contrib/powerpc-vsx/linux.c +++ b/vs/libpng/contrib/powerpc-vsx/linux.c @@ -2,7 +2,6 @@ * * Copyright (c) 2017 Glenn Randers-Pehrson * Written by Vadim Barkov, 2017. - * Last changed in libpng 1.6.29 [March 16, 2017] * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer @@ -12,7 +11,7 @@ * BUG REPORTS: png-mng-implement@sourceforge.net * * png_have_vsx implemented for Linux by reading the widely available - * pseudo-file /proc/cpuinfo. + * pseudo-file /proc/cpuinfo. * * This code is strict ANSI-C and is probably moderately portable; it does * however use and it assumes that /proc/cpuinfo is never localized. diff --git a/vs/libpng/contrib/powerpc-vsx/linux_aux.c b/vs/libpng/contrib/powerpc-vsx/linux_aux.c index 796922d77c1..6ec048e80a2 100644 --- a/vs/libpng/contrib/powerpc-vsx/linux_aux.c +++ b/vs/libpng/contrib/powerpc-vsx/linux_aux.c @@ -2,7 +2,6 @@ * * Copyright (c) 2017 Glenn Randers-Pehrson * Written by Vadim Barkov, 2017. - * Last changed in libpng 1.6.29 [March 16, 2017] * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer @@ -23,14 +22,12 @@ static int png_have_vsx(png_structp png_ptr) { - - const unsigned long auxv = getauxval( AT_HWCAP ); + unsigned long auxv = getauxval(AT_HWCAP); PNG_UNUSED(png_ptr) - if(auxv & (PPC_FEATURE_HAS_ALTIVEC|PPC_FEATURE_HAS_VSX )) + if(auxv & (PPC_FEATURE_HAS_ALTIVEC|PPC_FEATURE_HAS_VSX)) return 1; else return 0; } - diff --git a/vs/libpng/contrib/testpngs/badpal/regression-palette-8.png b/vs/libpng/contrib/testpngs/badpal/regression-palette-8.png new file mode 100644 index 00000000000..dcb88b6ec41 Binary files /dev/null and b/vs/libpng/contrib/testpngs/badpal/regression-palette-8.png differ diff --git a/vs/libpng/contrib/testpngs/badpal/small-palette-1.png b/vs/libpng/contrib/testpngs/badpal/small-palette-1.png new file mode 100644 index 00000000000..7e9dbfd095b Binary files /dev/null and b/vs/libpng/contrib/testpngs/badpal/small-palette-1.png differ diff --git a/vs/libpng/contrib/testpngs/badpal/small-palette-2.png b/vs/libpng/contrib/testpngs/badpal/small-palette-2.png new file mode 100644 index 00000000000..6629164d709 Binary files /dev/null and b/vs/libpng/contrib/testpngs/badpal/small-palette-2.png differ diff --git a/vs/libpng/contrib/testpngs/badpal/small-palette-4.png b/vs/libpng/contrib/testpngs/badpal/small-palette-4.png new file mode 100644 index 00000000000..7401dc70b1f Binary files /dev/null and b/vs/libpng/contrib/testpngs/badpal/small-palette-4.png differ diff --git a/vs/libpng/contrib/testpngs/badpal/small-palette-8.png b/vs/libpng/contrib/testpngs/badpal/small-palette-8.png new file mode 100644 index 00000000000..a4533871314 Binary files /dev/null and b/vs/libpng/contrib/testpngs/badpal/small-palette-8.png differ diff --git a/vs/libpng/contrib/testpngs/badpal/test-palette-1.png b/vs/libpng/contrib/testpngs/badpal/test-palette-1.png new file mode 100644 index 00000000000..614fd97bba7 Binary files /dev/null and b/vs/libpng/contrib/testpngs/badpal/test-palette-1.png differ diff --git a/vs/libpng/contrib/testpngs/badpal/test-palette-2.png b/vs/libpng/contrib/testpngs/badpal/test-palette-2.png new file mode 100644 index 00000000000..a7e996464bf Binary files /dev/null and b/vs/libpng/contrib/testpngs/badpal/test-palette-2.png differ diff --git a/vs/libpng/contrib/testpngs/badpal/test-palette-4.png b/vs/libpng/contrib/testpngs/badpal/test-palette-4.png new file mode 100644 index 00000000000..39853bfce9a Binary files /dev/null and b/vs/libpng/contrib/testpngs/badpal/test-palette-4.png differ diff --git a/vs/libpng/contrib/testpngs/badpal/test-palette-8.png b/vs/libpng/contrib/testpngs/badpal/test-palette-8.png new file mode 100644 index 00000000000..46d0993544e Binary files /dev/null and b/vs/libpng/contrib/testpngs/badpal/test-palette-8.png differ diff --git a/vs/libpng/contrib/testpngs/makepngs.sh b/vs/libpng/contrib/testpngs/makepngs.sh index 059503e2368..270f0630aaf 100755 --- a/vs/libpng/contrib/testpngs/makepngs.sh +++ b/vs/libpng/contrib/testpngs/makepngs.sh @@ -1,12 +1,10 @@ #!/bin/sh -# + # Make a set of test PNG files, MAKEPNG is the name of the makepng executable # built from contrib/libtests/makepng.c # Copyright (c) 2015 John Cunningham Bowler -# Last changed in libpng 1.6.20 [December 3, 2015] - # This code is released under the libpng license. # For conditions of distribution and use, see the disclaimer # and license in png.h @@ -74,7 +72,7 @@ case "$1" in --coverage) # Comments below indicate cases known to be required and not duplicated # in other (required) cases; the aim is to get a minimal set that gives - # the maxium code coverage. + # the maximum code coverage. mpg none gray-alpha 8 # required: code coverage, sRGB opaque component mpg none palette 8 # required: basic palette read mpg 1.8 gray 2 # required: tests gamma threshold code diff --git a/vs/libpng/contrib/testpngs/png-3/cicp-display-p3_reencoded.png b/vs/libpng/contrib/testpngs/png-3/cicp-display-p3_reencoded.png new file mode 100644 index 00000000000..91d8e6bc481 Binary files /dev/null and b/vs/libpng/contrib/testpngs/png-3/cicp-display-p3_reencoded.png differ diff --git a/vs/libpng/contrib/tools/checksum-icc.c b/vs/libpng/contrib/tools/checksum-icc.c index 581e7088a62..83e1f9a4302 100644 --- a/vs/libpng/contrib/tools/checksum-icc.c +++ b/vs/libpng/contrib/tools/checksum-icc.c @@ -2,8 +2,6 @@ * * Copyright (c) 2013 John Cunningham Bowler * - * Last changed in libpng 1.6.0 [February 14, 2013] - * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer * and license in png.h @@ -11,8 +9,8 @@ * Generate crc32 and adler32 checksums of the given input files, used to * generate check-codes for use when matching ICC profiles within libpng. */ -#include +#include #include static int diff --git a/vs/libpng/contrib/tools/cvtcolor.c b/vs/libpng/contrib/tools/cvtcolor.c index e6793c7d596..111dfcee74c 100644 --- a/vs/libpng/contrib/tools/cvtcolor.c +++ b/vs/libpng/contrib/tools/cvtcolor.c @@ -1,7 +1,4 @@ -/*- - * convert.c - * - * Last changed in libpng 1.6.0 [February 14, 2013] +/* convert.c * * COPYRIGHT: Written by John Cunningham Bowler, 2013. * To the extent possible under law, the author has waived all copyright and @@ -10,6 +7,7 @@ * * Convert 8-bit sRGB or 16-bit linear values to another format. */ + #define _ISOC99_SOURCE 1 #include diff --git a/vs/libpng/contrib/tools/genpng.c b/vs/libpng/contrib/tools/genpng.c index 0b3f9819645..c43bea90652 100644 --- a/vs/libpng/contrib/tools/genpng.c +++ b/vs/libpng/contrib/tools/genpng.c @@ -1,4 +1,4 @@ -/*- genpng +/* genpng * * COPYRIGHT: Written by John Cunningham Bowler, 2015. * Revised by Glenn Randers-Pehrson, 2017, to add buffer-size check. @@ -69,6 +69,7 @@ * joins are mitres; the outside of the lines are continued to the point of * intersection. */ + #include #include #include @@ -453,7 +454,7 @@ check_square(const struct arg *arg, double x, double y) * { inside_circle_filled, check_circle_filled }, * { inside_circle, check_circle } * - * The functions here are analoguous to the square ones; however, they check + * The functions here are analogous to the square ones; however, they check * the corresponding ellipse as opposed to the rectangle. */ static int diff --git a/vs/libpng/contrib/tools/intgamma.sh b/vs/libpng/contrib/tools/intgamma.sh index 41c5d6dd278..aaed68a09ee 100755 --- a/vs/libpng/contrib/tools/intgamma.sh +++ b/vs/libpng/contrib/tools/intgamma.sh @@ -1,13 +1,11 @@ #!/bin/sh -# + # intgamma.sh # -# Last changed in libpng 1.6.0 [February 14, 2013] -# # COPYRIGHT: Written by John Cunningham Bowler, 2013. # To the extent possible under law, the author has waived all copyright and -# related or neighboring rights to this work. This work is published from: -# United States. +# related or neighboring rights to this work. The author published this work +# from the United States. # # Shell script to generate png.c 8-bit and 16-bit log tables (see the code in # png.c for details). @@ -17,11 +15,11 @@ # (0..255) value and a similar table for the exponent calculation. # # "bc" must be on the path when the script is executed, and the math library -# (-lm) must be available -# -# function to print out a list of numbers as integers; the function truncates -# the integers which must be one-per-line -function print(){ +# (-lm) must be available. + +# Function to print out a list of numbers as integers; the function truncates +# the integers which must be one-per-line. +print(){ awk 'BEGIN{ str = "" } diff --git a/vs/libpng/contrib/tools/makesRGB.c b/vs/libpng/contrib/tools/makesRGB.c index e66c9f1576b..5ef3ddf99d6 100644 --- a/vs/libpng/contrib/tools/makesRGB.c +++ b/vs/libpng/contrib/tools/makesRGB.c @@ -1,6 +1,4 @@ /* makesRGB.c -- build sRGB-to-linear and linear-to-sRGB conversion tables - * - * Last changed in libpng 1.6.0 [February 14, 2013] * * COPYRIGHT: Written by John Cunningham Bowler, 2013. * To the extent possible under law, the author has waived all copyright and @@ -14,6 +12,7 @@ * approximation to the 8-bit sRGB encoded value. Calculate the error in these * tables and display it. */ + #define _C99_SOURCE 1 #include #include @@ -388,7 +387,7 @@ main(int argc, char **argv) if (!test_only) { - printf("PNG_CONST png_uint_16 png_sRGB_table[256] =\n{\n "); + printf("const png_uint_16 png_sRGB_table[256] =\n{\n "); for (i=0; i<255; ) { do @@ -401,7 +400,7 @@ main(int argc, char **argv) printf("%d\n};\n\n", png_sRGB_table[i]); - printf("PNG_CONST png_uint_16 png_sRGB_base[512] =\n{\n "); + printf("const png_uint_16 png_sRGB_base[512] =\n{\n "); for (i=0; i<511; ) { do @@ -413,7 +412,7 @@ main(int argc, char **argv) } printf("%d\n};\n\n", png_sRGB_base[i]); - printf("PNG_CONST png_byte png_sRGB_delta[512] =\n{\n "); + printf("const png_byte png_sRGB_delta[512] =\n{\n "); for (i=0; i<511; ) { do diff --git a/vs/libpng/contrib/tools/png-fix-itxt.c b/vs/libpng/contrib/tools/png-fix-itxt.c index c7654c11363..b8286b9e5cc 100644 --- a/vs/libpng/contrib/tools/png-fix-itxt.c +++ b/vs/libpng/contrib/tools/png-fix-itxt.c @@ -1,8 +1,6 @@ - -/* png-fix-itxt version 1.0.0 +/* png-fix-itxt * * Copyright 2015 Glenn Randers-Pehrson - * Last changed in libpng 1.6.18 [July 23, 2015] * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer @@ -10,7 +8,7 @@ * * Usage: * - * png-fix-itxt.exe < bad.png > good.png + * png-fix-itxt < bad.png > good.png * * Fixes a PNG file written with libpng-1.6.0 or 1.6.1 that has one or more * uncompressed iTXt chunks. Assumes that the actual length is greater diff --git a/vs/libpng/contrib/tools/pngcp.c b/vs/libpng/contrib/tools/pngcp.c index e82dddccc78..cf621fa5bf5 100644 --- a/vs/libpng/contrib/tools/pngcp.c +++ b/vs/libpng/contrib/tools/pngcp.c @@ -1,8 +1,6 @@ /* pngcp.c * - * Copyright (c) 2016 John Cunningham Bowler - * - * Last changed in libpng 1.6.24 [August 4, 2016] + * Copyright (c) 2016,2022,2024 John Cunningham Bowler * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer @@ -14,7 +12,12 @@ * * For a more extensive example that uses the transforms see * contrib/libtests/pngimage.c in the libpng distribution. + * + * This code is not intended for installation in a release system; the command + * line options are not documented and most of the behavior is intended for + * testing libpng performance, both speed and compression. */ + #include "pnglibconf.h" /* To find how libpng was configured. */ #ifdef PNG_PNGCP_TIMING_SUPPORTED @@ -85,16 +88,6 @@ # define voidcast(type, value) (value) #endif /* __cplusplus */ -#ifdef __GNUC__ - /* Many versions of GCC erroneously report that local variables unmodified - * within the scope of a setjmp may be clobbered. This hacks round the - * problem (sometimes) without harming other compilers. - */ -# define gv volatile -#else -# define gv -#endif - /* 'CLOCK_PROCESS_CPUTIME_ID' is one of the clock timers for clock_gettime. It * need not be supported even when clock_gettime is available. It returns the * 'CPU' time the process has consumed. 'CPU' time is assumed to include time @@ -191,7 +184,7 @@ vl_strategy[] = /* This controls the order of search. */ { "huffman", Z_HUFFMAN_ONLY }, { "RLE", Z_RLE }, - { "fixed", Z_FIXED }, /* the remainder do window searchs */ + { "fixed", Z_FIXED }, /* the remainder do window searches */ { "filtered", Z_FILTERED }, { "default", Z_DEFAULT_STRATEGY }, { all, 0 } @@ -336,7 +329,7 @@ static const option options[] = # define VLC(name) VLCIDAT(name) VLCiCCP(name) VLCzTXt(name) # ifdef PNG_SW_COMPRESS_png_level - /* The libpng compression level isn't searched beause it justs sets the + /* The libpng compression level isn't searched because it just sets the * other things that are searched! */ VLO("compression", compression, 0) @@ -392,6 +385,7 @@ struct display { jmp_buf error_return; /* Where to go to on error */ unsigned int errset; /* error_return is set */ + int errlevel; /* error level from longjmp */ const char *operation; /* What is happening */ const char *filename; /* The name of the original file */ @@ -503,10 +497,10 @@ display_init(struct display *dp) } static void -display_clean_read(struct display *dp) +display_clean_read(struct display *dp, int freeinfo) { if (dp->read_pp != NULL) - png_destroy_read_struct(&dp->read_pp, NULL, NULL); + png_destroy_read_struct(&dp->read_pp, freeinfo ? &dp->ip : NULL, NULL); if (dp->fp != NULL) { @@ -517,7 +511,7 @@ display_clean_read(struct display *dp) } static void -display_clean_write(struct display *dp) +display_clean_write(struct display *dp, int freeinfo) { if (dp->fp != NULL) { @@ -527,14 +521,14 @@ display_clean_write(struct display *dp) } if (dp->write_pp != NULL) - png_destroy_write_struct(&dp->write_pp, dp->tsp > 0 ? NULL : &dp->ip); + png_destroy_write_struct(&dp->write_pp, freeinfo ? &dp->ip : NULL); } static void display_clean(struct display *dp) { - display_clean_read(dp); - display_clean_write(dp); + display_clean_read(dp, 1/*freeinfo*/); + display_clean_write(dp, 1/*freeinfo*/); dp->output_file = NULL; # if PNG_LIBPNG_VER < 10700 && defined PNG_TEXT_SUPPORTED @@ -631,7 +625,10 @@ display_log(struct display *dp, error_level level, const char *fmt, ...) if (level > APP_FAIL || (level > ERRORS && !(dp->options & CONTINUE))) { if (dp->errset) + { + dp->errlevel = level; longjmp(dp->error_return, level); + } else exit(99); @@ -735,7 +732,7 @@ option_index(struct display *dp, const char *opt, size_t len) static int get_option(struct display *dp, const char *opt, int *value) { - const png_byte i = option_index(dp, opt, strlen(opt)); + png_byte i = option_index(dp, opt, strlen(opt)); if (dp->entry[i]) /* option was set on command line */ { @@ -778,7 +775,7 @@ static void set_opt_string(struct display *dp, unsigned int sp) /* Add the appropriate option string to dp->curr. */ { - dp->stack[sp].opt_string_end = set_opt_string_(dp, sp, dp->stack[sp].opt, + dp->stack[sp].opt_string_end = set_opt_string_(dp, sp, dp->stack[sp].opt, options[dp->stack[sp].opt].values[dp->stack[sp].entry].name); } @@ -789,7 +786,7 @@ record_opt(struct display *dp, png_byte opt, const char *entry_name) * numerical value. */ { - const unsigned int sp = dp->csp; /* stack entry of next searched option */ + unsigned int sp = dp->csp; /* stack entry of next searched option */ if (sp >= dp->tsp) { @@ -797,7 +794,7 @@ record_opt(struct display *dp, png_byte opt, const char *entry_name) * searched entry or the start of the dp->curr buffer if there is nothing * on the stack yet (sp == 0). */ - const int offset = set_opt_string_(dp, sp, opt, entry_name); + int offset = set_opt_string_(dp, sp, opt, entry_name); if (sp > 0) dp->stack[sp-1].opt_string_end = offset; @@ -1222,7 +1219,7 @@ advance_opt(struct display *dp, png_byte opt, int search) } static int -getallopts_(struct display *dp, const png_byte opt, int *value, int record) +getallopts_(struct display *dp, png_byte opt, int *value, int record) /* Like getop but iterate over all the values if the option was set to "all". */ { @@ -1259,7 +1256,7 @@ getsearchopts(struct display *dp, const char *opt_str, int *value) /* As above except that if the option was not set try a search */ { png_byte istrat; - const png_byte opt = option_index(dp, opt_str, strlen(opt_str)); + png_byte opt = option_index(dp, opt_str, strlen(opt_str)); int record = options[opt].search; const char *entry_name; @@ -1725,7 +1722,7 @@ display_start_read(struct display *dp, const char *filename) } static void PNGCBAPI -read_function(png_structp pp, png_bytep data, png_size_t size) +read_function(png_structp pp, png_bytep data, size_t size) { struct display *dp = get_dp(pp); @@ -1745,7 +1742,17 @@ read_function(png_structp pp, png_bytep data, png_size_t size) static void read_png(struct display *dp, const char *filename) { - display_clean_read(dp); /* safety */ + /* This is an assumption of the code; it may happen if a previous write fails + * and there is a bug in the cleanup handling below (look for setjmp). + * Passing freeinfo==1 to display_clean_read below avoids a second error + * on dp->ip != NULL below. + */ + if (dp->read_pp != NULL) + { + display_log(dp, APP_FAIL, "unexpected png_read_struct"); + display_clean_read(dp, 1/*freeinfo*/); /* recovery */ + } + display_start_read(dp, filename); dp->read_pp = png_create_read_struct(PNG_LIBPNG_VER_STRING, dp, @@ -1769,6 +1776,13 @@ read_png(struct display *dp, const char *filename) png_set_check_for_invalid_index(dp->read_pp, -1/*off completely*/); # endif /* IGNORE_INDEX */ + if (dp->ip != NULL) + { + /* UNEXPECTED: some problem in the display_clean function calls! */ + display_log(dp, APP_FAIL, "read_png: freeing old info struct"); + png_destroy_info_struct(dp->read_pp, &dp->ip); + } + /* The png_read_png API requires us to make the info struct, but it does the * call to png_read_info. */ @@ -1848,7 +1862,14 @@ read_png(struct display *dp, const char *filename) } #endif /* FIX_INDEX */ - display_clean_read(dp); + /* NOTE: dp->ip is where all the information about the PNG that was just read + * is stored. It can be used to write and write again a single PNG file, + * however be aware that prior to libpng 1.7 text chunks could only be + * written once; this is a bug which would require a significant code rewrite + * to fix, it has been there in several versions of libpng (it was introduced + * to fix another bug involving duplicate writes of the text chunks.) + */ + display_clean_read(dp, 0/*freeiinfo*/); dp->operation = "none"; } @@ -1881,7 +1902,7 @@ display_start_write(struct display *dp, const char *filename) } static void PNGCBAPI -write_function(png_structp pp, png_bytep data, png_size_t size) +write_function(png_structp pp, png_bytep data, size_t size) { struct display *dp = get_dp(pp); @@ -1975,7 +1996,21 @@ set_text_compression(struct display *dp) static void write_png(struct display *dp, const char *destname) { - display_clean_write(dp); /* safety */ + /* If this test fails png_write_png would fail *silently* below; this + * is not helpful, so catch the problem now and give up: + */ + if (dp->ip == NULL) + display_log(dp, INTERNAL_ERROR, "missing png_info"); + + /* This is an assumption of the code; it may happen if a previous + * write fails and there is a bug in the cleanup handling below. + */ + if (dp->write_pp != NULL) + { + display_log(dp, APP_FAIL, "unexpected png_write_struct"); + display_clean_write(dp, 0/*!freeinfo*/); + } + display_start_write(dp, destname); dp->write_pp = png_create_write_struct(PNG_LIBPNG_VER_STRING, dp, @@ -2073,10 +2108,6 @@ write_png(struct display *dp, const char *destname) destname == NULL ? "stdout" : destname, strerror(errno)); } - /* Clean it on the way out - if control returns to the caller then the - * written_file contains the required data. - */ - display_clean_write(dp); dp->operation = "none"; } @@ -2117,7 +2148,7 @@ better_options(const struct display *dp) * * This function looks through the stack from the bottom up looking for an * option that does not match the current best value. When it finds one it - * checks to see if it is more or less desireable and returns true or false + * checks to see if it is more or less desirable and returns true or false * as appropriate. * * Notice that this means that the order options are pushed onto the stack @@ -2220,7 +2251,7 @@ cp_one_file(struct display *dp, const char *filename, const char *destname) strcpy(dp->best, dp->curr); dp->best_size = dp->write_size; - if (dp->nsp > 0) /* interating over lists */ + if (dp->nsp > 0) /* iterating over lists */ { char *tmpname, tmpbuf[(sizeof dp->namebuf) + 4]; assert(dp->curr[0] == ' ' && dp->tsp > 0); @@ -2243,6 +2274,10 @@ cp_one_file(struct display *dp, const char *filename, const char *destname) /* Loop to find the best option. */ do { + /* Clean before each write_png; this just removes *dp->write_pp which + * cannot be reused. + */ + display_clean_write(dp, 0/*!freeinfo*/); write_png(dp, tmpname); /* And compare the sizes (the write function makes sure write_size @@ -2272,17 +2307,14 @@ cp_one_file(struct display *dp, const char *filename, const char *destname) /* Do this for the 'sizes' option so that it reports the correct size. */ dp->write_size = dp->best_size; } + + display_clean_write(dp, 1/*freeinfo*/); } static int -cppng(struct display *dp, const char *file, const char *gv dest) - /* Exists solely to isolate the setjmp clobbers which some versions of GCC - * erroneously generate. - */ +cppng(struct display *dp, const char *file, const char *dest) { - int ret = setjmp(dp->error_return); - - if (ret == 0) + if (setjmp(dp->error_return) == 0) { dp->errset = 1; cp_one_file(dp, file, dest); @@ -2294,15 +2326,16 @@ cppng(struct display *dp, const char *file, const char *gv dest) { dp->errset = 0; - if (ret < ERRORS) /* shouldn't longjmp on warnings */ - display_log(dp, INTERNAL_ERROR, "unexpected return code %d", ret); + if (dp->errlevel < ERRORS) /* shouldn't longjmp on warnings */ + display_log(dp, INTERNAL_ERROR, "unexpected return code %d", + dp->errlevel); - return ret; + return dp->errlevel; } } int -main(const int argc, const char * const * const argv) +main(int argc, char **argv) { /* For each file on the command line test it with a range of transforms */ int option_end; @@ -2379,7 +2412,7 @@ main(const int argc, const char * const * const argv) /* Here on any return, including failures, except user/internal issues */ { - const int pass = (d.options & STRICT) ? + int pass = (d.options & STRICT) ? RESULT_STRICT(d.results) : RESULT_RELAXED(d.results); if (!pass) diff --git a/vs/libpng/contrib/tools/pngfix.c b/vs/libpng/contrib/tools/pngfix.c index 69ffc170e45..8d5dc46c22e 100644 --- a/vs/libpng/contrib/tools/pngfix.c +++ b/vs/libpng/contrib/tools/pngfix.c @@ -1,7 +1,6 @@ /* pngfix.c * - * Last changed in libpng 1.6.31 [July 27, 2017] - * Copyright (c) 2014-2017 John Cunningham Bowler + * Copyright (c) 2014-2017,2024 John Cunningham Bowler * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer @@ -10,6 +9,7 @@ * Tool to check and fix the zlib inflate 'too far back' problem. * See the usage message for more information. */ + #include #include #include @@ -20,19 +20,6 @@ #define implies(x,y) assert(!(x) || (y)) -#ifdef __GNUC__ - /* This is used to fix the error: - * - * pngfix.c: - * In function 'zlib_advance': - * pngfix.c:181:13: error: assuming signed overflow does not - * occur when simplifying conditional to constant [-Werror=strict-overflow] - */ -# define FIX_GCC volatile -#else -# define FIX_GCC -#endif - #define PROGRAM_NAME "pngfix" /* Define the following to use this program against your installed libpng, @@ -146,11 +133,6 @@ /* Is it safe to copy? */ #define SAFE_TO_COPY(chunk) (((chunk) & PNG_U32(0,0,0,32)) != 0) -/* Fix ups for builds with limited read support */ -#ifndef PNG_ERROR_TEXT_SUPPORTED -# define png_error(a,b) png_err(a) -#endif - /********************************* UTILITIES **********************************/ /* UNREACHED is a value to cause an assert to fail. Because of the way the * assert macro is written the string "UNREACHED" is produced in the error @@ -218,7 +200,7 @@ uarb_inc(uarb num, int in_digits, png_int_32 add) * in_digits+1 if add is known to be in the range -65535..65535. */ { - FIX_GCC int out_digits = 0; + int out_digits = 0; while (out_digits < in_digits) { @@ -263,7 +245,7 @@ uarb_add32(uarb num, int in_digits, png_uint_32 add) } static int -uarb_mult_digit(uarb acc, int a_digits, uarb num, FIX_GCC int n_digits, +uarb_mult_digit(uarb acc, int a_digits, uarb num, int n_digits, png_uint_16 val) /* Primitive one-digit multiply - 'val' must be 0..65535. Note that this * primitive is a multiply and accumulate - the result of *num * val is added @@ -336,7 +318,7 @@ uarb_shift(uarb inout, int ndigits, unsigned int right_shift) * 1..15 */ { - FIX_GCC int i = ndigits; + int i = ndigits; png_uint_16 carry = 0; assert(right_shift >= 1 && right_shift <= 15); @@ -351,7 +333,7 @@ uarb_shift(uarb inout, int ndigits, unsigned int right_shift) inout[i] = temp; /* The shift may reduce ndigits */ - if (i == ndigits-1 && temp == 0) + if (i+1 == ndigits && temp == 0) ndigits = i; } @@ -772,7 +754,7 @@ skip_chunk_type(const struct global *global, png_uint_32 type) return 0; /* Chunks that specify gamma encoding which should therefore only be - * removed the the user insists: + * removed if the user insists: */ case png_gAMA: case png_sRGB: if (global->skip >= SKIP_ALL) @@ -867,7 +849,7 @@ struct file * signature (in length,type). * * When a chunk control structure is instantiated these values are copied - * into the structure and can then be overritten with the data for the next + * into the structure and can then be overwritten with the data for the next * chunk. */ fpos_t data_pos; /* Position of first byte of chunk data */ @@ -1005,10 +987,18 @@ file_end(struct file *file) if (file->out != NULL) { - /* NOTE: this is bitwise |, all the following functions must execute and - * must succeed. + /* On some systems 'fclose' deletes the FILE struct (making it + * inaccessbile). There is no guarantee that fclose returns an error + * code from fflush or, indeed, from the FILE error indicator. There is + * also no explicit (or clear) guarantee in the standard that anything + * other than a read or write operation sets the error indicator; fflush + * is not a read or write operation, so both conditions must be checked + * to ensure the close succeeded and in ANSI-C conformant code they must + * be checked before the fclose call. */ - if (ferror(file->out) | fflush(file->out) | fclose(file->out)) + const int err = fflush(file->out) || ferror(file->out); + + if (fclose(file->out) || err) { perror(file->out_name); emit_error(file, READ_ERROR_CODE, "output write error"); @@ -1598,7 +1588,7 @@ chunk_init(struct chunk * const chunk, struct file * const file) chunk->chunk_length = file->length; chunk->chunk_type = file->type; - /* Compresssed/uncompressed size information (from the zlib control structure + /* Compressed/uncompressed size information (from the zlib control structure * that is used to check the compressed data in a chunk.) */ chunk->uncompressed_digits = 0; @@ -2363,7 +2353,7 @@ zlib_advance(struct zlib *zlib, png_uint_32 nbytes) flush = Z_NO_FLUSH; out_bytes = 0; - /* NOTE: expression 3 is only evaluted on 'continue', because of the + /* NOTE: expression 3 is only evaluated on 'continue', because of the * 'break' at the end of this loop below. */ for (;endrc == ZLIB_OK; @@ -2514,7 +2504,7 @@ zlib_run(struct zlib *zlib) */ for (;;) { - const unsigned int count = list->count; + unsigned int count = list->count; unsigned int i; for (i = 0; itype; + png_uint_32 type = file->type; if (file->global->verbose > 1) { @@ -2929,7 +2919,7 @@ process_chunk(struct file *file, png_uint_32 file_crc, png_uint_32 next_length, } /* Control reaches this point if the chunk must be skipped. For chunks other - * than IDAT this means that the zlib compressed data is fatally damanged and + * than IDAT this means that the zlib compressed data is fatally damaged and * the chunk will not be passed to libpng. For IDAT it means that the end of * the IDAT stream has not yet been reached and we must handle the next * (IDAT) chunk. If the LZ data in an IDAT stream cannot be read 'stop' must @@ -3152,7 +3142,7 @@ read_chunk(struct file *file) } } - /* Control gets to here if the the stream seems invalid or damaged in some + /* Control gets to here if the stream seems invalid or damaged in some * way. Either there was a problem reading all the expected data (this * chunk's data, its CRC and the length and type of the next chunk) or the * next chunk length/type are invalid. Notice that the cases that end up @@ -3678,7 +3668,7 @@ usage(const char *prog) size_t i; static const char *usage_string[] = { " Tests, optimizes and optionally fixes the zlib header in PNG files.", -" Optionally, when fixing, strips ancilliary chunks from the file.", +" Optionally, when fixing, strips ancillary chunks from the file.", 0, "OPTIONS", " OPERATION", @@ -3710,7 +3700,7 @@ usage(const char *prog) " practice most programs will ignore it.", " bKGD [transform]: This is used by libpng transforms." " --max=:", -" Use IDAT chunks sized . If no number is given the the IDAT", +" Use IDAT chunks sized . If no number is given the IDAT", " chunks will be the maximum size permitted; 2^31-1 bytes. If the option", " is omitted the original chunk sizes will not be changed. When the", " option is given --strip=unsafe is set automatically. This may be", @@ -3961,6 +3951,14 @@ main(int argc, const char **argv) { size_t outlen = strlen(*argv); + if (outlen > FILENAME_MAX) + { + fprintf(stderr, "%s: output file name too long: %s%s%s\n", + prog, prefix, *argv, suffix ? suffix : ""); + global.status_code |= WRITE_ERROR; + continue; + } + if (outfile == NULL) /* else this takes precedence */ { /* Consider the prefix/suffix options */ @@ -4046,4 +4044,4 @@ main(void) return 77; } #endif /* PNG_SETJMP_SUPPORTED */ - +/* vi: set textwidth=80 shiftwidth=3 softtabstop=-1 expandtab: */ diff --git a/vs/libpng/contrib/tools/sRGB.h b/vs/libpng/contrib/tools/sRGB.h index d1ece51291d..7f6bdfc288e 100644 --- a/vs/libpng/contrib/tools/sRGB.h +++ b/vs/libpng/contrib/tools/sRGB.h @@ -1,7 +1,4 @@ -/*- - * sRGB.h - * - * Last changed in libpng 1.6.0 [February 14, 2013] +/* sRGB.h * * COPYRIGHT: Written by John Cunningham Bowler, 2013. * To the extent possible under law, the author has waived all copyright and @@ -16,6 +13,7 @@ * (in fact the source of the numbers is the wikipedia article at * https://en.wikipedia.org/wiki/SRGB). */ + static double sRGB_from_linear(double l) { diff --git a/vs/libpng/contrib/visupng/.editorconfig b/vs/libpng/contrib/visupng/.editorconfig new file mode 100644 index 00000000000..d5bcb531214 --- /dev/null +++ b/vs/libpng/contrib/visupng/.editorconfig @@ -0,0 +1,23 @@ +# https://editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = unset +indent_size = 4 +indent_style = space +insert_final_newline = true +max_doc_length = 80 +max_line_length = 100 +trim_trailing_whitespace = true + +[*.rc] +end_of_line = crlf +trim_trailing_whitespace = unset + +[*.ds[pw]] +end_of_line = crlf +max_doc_length = unset +max_line_length = unset +trim_trailing_whitespace = unset diff --git a/vs/libpng/contrib/visupng/PngFile.c b/vs/libpng/contrib/visupng/PngFile.c index d46318f4474..cf943f32a6c 100644 --- a/vs/libpng/contrib/visupng/PngFile.c +++ b/vs/libpng/contrib/visupng/PngFile.c @@ -410,15 +410,14 @@ BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData, #ifndef PNG_STDIO_SUPPORTED static void -png_read_data(png_structp png_ptr, png_bytep data, png_size_t length) +png_read_data(png_structp png_ptr, png_bytep data, size_t length) { - png_size_t check; + size_t check; - /* fread() returns 0 on error, so it is OK to store this in a png_size_t + /* fread() returns 0 on error, so it is OK to store this in a size_t * instead of an int, which is what fread() actually returns. */ - check = (png_size_t)fread(data, (png_size_t)1, length, - (FILE *)png_ptr->io_ptr); + check = fread(data, 1, length, (FILE *)png_ptr->io_ptr); if (check != length) { @@ -427,7 +426,7 @@ png_read_data(png_structp png_ptr, png_bytep data, png_size_t length) } static void -png_write_data(png_structp png_ptr, png_bytep data, png_size_t length) +png_write_data(png_structp png_ptr, png_bytep data, size_t length) { png_uint_32 check; diff --git a/vs/libpng/contrib/visupng/PngFile.h b/vs/libpng/contrib/visupng/PngFile.h index 474426c22ea..1b7b9be3c34 100644 --- a/vs/libpng/contrib/visupng/PngFile.h +++ b/vs/libpng/contrib/visupng/PngFile.h @@ -23,8 +23,8 @@ BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData, int iWidth, int iHeight, png_color BkgColor); #ifndef PNG_STDIO_SUPPORTED -static void png_read_data(png_structp png_ptr, png_bytep data, png_size_t length); -static void png_write_data(png_structp png_ptr, png_bytep data, png_size_t length); +static void png_read_data(png_structp png_ptr, png_bytep data, size_t length); +static void png_write_data(png_structp png_ptr, png_bytep data, size_t length); static void png_flush(png_structp png_ptr); #endif diff --git a/vs/libpng/contrib/visupng/VisualPng.c b/vs/libpng/contrib/visupng/VisualPng.c index 20e1625fa7d..6f7b1dfe58f 100644 --- a/vs/libpng/contrib/visupng/VisualPng.c +++ b/vs/libpng/contrib/visupng/VisualPng.c @@ -103,7 +103,7 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, return 0; } - /* if filename given on commandline, store it */ + /* if filename given on command line, store it */ if ((szCmdLine != NULL) && (*szCmdLine != '\0')) if (szCmdLine[0] == '"') strncpy (szCmdFileName, szCmdLine + 1, strlen(szCmdLine) - 2); @@ -716,7 +716,7 @@ BOOL DisplayImage (HWND hwnd, BYTE **ppDib, png_color bkgGray = {127, 127, 127}; png_color bkgWhite = {255, 255, 255}; - /* allocate memory for the Device Independant bitmap */ + /* allocate memory for the Device Independent bitmap */ wDIRowBytes = (WORD) ((3 * cxWinSize + 3L) >> 2) << 2; diff --git a/vs/libpng/depcomp b/vs/libpng/depcomp index fc98710e2a1..1f0aa972c93 100755 --- a/vs/libpng/depcomp +++ b/vs/libpng/depcomp @@ -1,9 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2013-05-30.07; # UTC +scriptversion=2024-06-19.01; # UTC -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2024 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ scriptversion=2013-05-30.07; # UTC # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -47,11 +47,13 @@ Environment variables: libtool Whether libtool is used (yes/no). Report bugs to . +GNU Automake home page: . +General help using GNU software: . EOF exit $? ;; -v | --v*) - echo "depcomp $scriptversion" + echo "depcomp (GNU Automake) $scriptversion" exit $? ;; esac @@ -113,7 +115,6 @@ nl=' # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz -digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then @@ -128,7 +129,7 @@ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" -# Avoid interferences from the environment. +# Avoid interference from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We @@ -198,8 +199,8 @@ gcc3) ;; gcc) -## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. -## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## Note that this doesn't just cater to obsolete pre-3.x GCC compilers. +## but also to in-use compilers like IBM xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: @@ -783,9 +784,9 @@ exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff --git a/vs/libpng/example.c b/vs/libpng/example.c index 99d2f054aa7..dd53d8a8718 100644 --- a/vs/libpng/example.c +++ b/vs/libpng/example.c @@ -1,19 +1,20 @@ - #if 0 /* in case someone actually tries to compile this */ /* example.c - an example of using libpng - * Last changed in libpng 1.6.24 [August 4, 2016] + * + * Maintained 2018-2024 Cosmin Truta * Maintained 1998-2016 Glenn Randers-Pehrson - * Maintained 1996, 1997 Andreas Dilger) - * Written 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * Maintained 1996-1997 Andreas Dilger + * Written 1995-1996 Guy Eric Schalnat, Group 42, Inc. + * * To the extent possible under law, the authors have waived * all copyright and related or neighboring rights to this file. - * This work is published from: United States. + * This work is published from: United States, Canada. */ /* This is an example of how to use libpng to read and write PNG files. - * The file libpng-manual.txt is much more verbose then this. If you have not - * read it, do so first. This was designed to be a starting point of an + * The file libpng-manual.txt is much more verbose then this. If you have + * not read it, do so first. This was designed to be a starting point of an * implementation. This is not officially part of libpng, is hereby placed * in the public domain, and therefore does not require a copyright notice. * @@ -24,16 +25,17 @@ * see also the programs in the contrib directory. */ -/* The simple, but restricted, approach to reading a PNG file or data stream - * just requires two function calls, as in the following complete program. - * Writing a file just needs one function call, so long as the data has an +/* The simple, but restricted approach to reading a PNG file or data stream + * requires just two function calls, as in the following complete program. + * Writing a file needs just one function call, so long as the data has an * appropriate layout. * * The following code reads PNG image data from a file and writes it, in a - * potentially new format, to a new file. While this code will compile there is - * minimal (insufficient) error checking; for a more realistic version look at - * contrib/examples/pngtopng.c + * potentially new format, to a new file. While this code will compile, there + * is minimal (insufficient) error checking. For a more realistic version, + * see contrib/examples/pngtopng.c */ + #include #include #include @@ -68,28 +70,28 @@ int main(int argc, const char **argv) */ buffer = malloc(PNG_IMAGE_SIZE(image)); - /* If enough memory was available read the image in the desired format - * then write the result out to the new file. 'background' is not - * necessary when reading the image because the alpha channel is + /* If enough memory was available, read the image in the desired + * format, then write the result out to the new file. 'background' is + * not necessary when reading the image, because the alpha channel is * preserved; if it were to be removed, for example if we requested * PNG_FORMAT_RGB, then either a solid background color would have to - * be supplied or the output buffer would have to be initialized to the - * actual background of the image. + * be supplied, or the output buffer would have to be initialized to + * the actual background of the image. * * The fourth argument to png_image_finish_read is the 'row_stride' - * this is the number of components allocated for the image in each * row. It has to be at least as big as the value returned by * PNG_IMAGE_ROW_STRIDE, but if you just allocate space for the - * default, minimum, size using PNG_IMAGE_SIZE as above you can pass + * default, minimum size, using PNG_IMAGE_SIZE as above, you can pass * zero. * * The final argument is a pointer to a buffer for the colormap; - * colormaps have exactly the same format as a row of image pixels (so - * you choose what format to make the colormap by setting + * colormaps have exactly the same format as a row of image pixels + * (so you choose what format to make the colormap by setting * image.format). A colormap is only returned if * PNG_FORMAT_FLAG_COLORMAP is also set in image.format, so in this * case NULL is passed as the final argument. If you do want to force - * all images into an index/color-mapped format then you can use: + * all images into an index/color-mapped format, then you can use: * * PNG_IMAGE_COLORMAP_SIZE(image) * @@ -111,84 +113,85 @@ int main(int argc, const char **argv) exit(0); } } - else { /* Calling png_image_free is optional unless the simplified API was - * not run to completion. In this case if there wasn't enough - * memory for 'buffer' we didn't complete the read, so we must free - * the image: + * not run to completion. In this case, if there wasn't enough + * memory for 'buffer', we didn't complete the read, so we must + * free the image: */ if (buffer == NULL) png_image_free(&image); - else free(buffer); + } } /* Something went wrong reading or writing the image. libpng stores a * textual message in the 'png_image' structure: */ fprintf(stderr, "pngtopng: error: %s\n", image.message); - exit (1); + exit(1); } fprintf(stderr, "pngtopng: usage: pngtopng input-file output-file\n"); - exit(1); + exit(2); } /* That's it ;-) Of course you probably want to do more with PNG files than * just converting them all to 32-bit RGBA PNG files; you can do that between * the call to png_image_finish_read and png_image_write_to_file. You can also - * ask for the image data to be presented in a number of different formats. You - * do this by simply changing the 'format' parameter set before allocating the - * buffer. + * ask for the image data to be presented in a number of different formats. + * You do this by simply changing the 'format' parameter set before allocating + * the buffer. * * The format parameter consists of five flags that define various aspects of - * the image, you can simply add these together to get the format or you can use - * one of the predefined macros from png.h (as above): + * the image. You can simply add these together to get the format, or you can + * use one of the predefined macros from png.h (as above): * - * PNG_FORMAT_FLAG_COLOR: if set the image will have three color components per - * pixel (red, green and blue), if not set the image will just have one + * PNG_FORMAT_FLAG_COLOR: if set, the image will have three color components + * per pixel (red, green and blue); if not set, the image will just have one * luminance (grayscale) component. * - * PNG_FORMAT_FLAG_ALPHA: if set each pixel in the image will have an additional - * alpha value; a linear value that describes the degree the image pixel - * covers (overwrites) the contents of the existing pixel on the display. + * PNG_FORMAT_FLAG_ALPHA: if set, each pixel in the image will have an + * additional alpha value; a linear value that describes the degree the + * image pixel covers (overwrites) the contents of the existing pixel on the + * display. * - * PNG_FORMAT_FLAG_LINEAR: if set the components of each pixel will be returned - * as a series of 16-bit linear values, if not set the components will be - * returned as a series of 8-bit values encoded according to the 'sRGB' - * standard. The 8-bit format is the normal format for images intended for - * direct display, because almost all display devices do the inverse of the - * sRGB transformation to the data they receive. The 16-bit format is more - * common for scientific data and image data that must be further processed; - * because it is linear simple math can be done on the component values. - * Regardless of the setting of this flag the alpha channel is always linear, - * although it will be 8 bits or 16 bits wide as specified by the flag. + * PNG_FORMAT_FLAG_LINEAR: if set, the components of each pixel will be + * returned as a series of 16-bit linear values; if not set, the components + * will be returned as a series of 8-bit values encoded according to the + * sRGB standard. The 8-bit format is the normal format for images intended + * for direct display, because almost all display devices do the inverse of + * the sRGB transformation to the data they receive. The 16-bit format is + * more common for scientific data and image data that must be further + * processed; because it is linear, simple math can be done on the component + * values. Regardless of the setting of this flag, the alpha channel is + * always linear, although it will be 8 bits or 16 bits wide as specified by + * the flag. * - * PNG_FORMAT_FLAG_BGR: if set the components of a color pixel will be returned - * in the order blue, then green, then red. If not set the pixel components - * are in the order red, then green, then blue. + * PNG_FORMAT_FLAG_BGR: if set, the components of a color pixel will be + * returned in the order blue, then green, then red. If not set, the pixel + * components are in the order red, then green, then blue. * - * PNG_FORMAT_FLAG_AFIRST: if set the alpha channel (if present) precedes the - * color or grayscale components. If not set the alpha channel follows the + * PNG_FORMAT_FLAG_AFIRST: if set, the alpha channel (if present) precedes the + * color or grayscale components. If not set, the alpha channel follows the * components. * * You do not have to read directly from a file. You can read from memory or, * on systems that support it, from a FILE*. This is controlled by - * the particular png_image_read_from_ function you call at the start. Likewise - * on write you can write to a FILE* if your system supports it. Check the - * macro PNG_STDIO_SUPPORTED to see if stdio support has been included in your - * libpng build. + * the particular png_image_read_from_ function you call at the start. + * Likewise, on write, you can write to a FILE* if your system supports it. + * Check the macro PNG_STDIO_SUPPORTED to see if stdio support has been + * included in your libpng build. * - * If you read 16-bit (PNG_FORMAT_FLAG_LINEAR) data you may need to write it in - * the 8-bit format for display. You do this by setting the convert_to_8bit + * If you read 16-bit (PNG_FORMAT_FLAG_LINEAR) data, you may need to write it + * in the 8-bit format for display. You do this by setting the convert_to_8bit * flag to 'true'. * * Don't repeatedly convert between the 8-bit and 16-bit forms. There is - * significant data loss when 16-bit data is converted to the 8-bit encoding and - * the current libpng implementation of conversion to 16-bit is also + * significant data loss when 16-bit data is converted to the 8-bit encoding, + * and the current libpng implementation of conversion to 16-bit is also * significantly lossy. The latter will be fixed in the future, but the former * is unavoidable - the 8-bit format just doesn't have enough resolution. */ @@ -199,10 +202,10 @@ int main(int argc, const char **argv) * interfaces. * * All these interfaces require that you do your own error handling - your - * program must be able to arrange for control to return to your own code any - * time libpng encounters a problem. There are several ways to do this, but the - * standard way is to use the ANSI-C (C90) interface to establish a - * return point within your own code. You must do this if you do not use the + * program must be able to arrange for control to return to your own code, any + * time libpng encounters a problem. There are several ways to do this, but + * the standard way is to use the interface to establish a return + * point within your own code. You must do this if you do not use the * simplified interface (above). * * The first step is to include the header files you need, including the libpng @@ -214,7 +217,7 @@ int main(int argc, const char **argv) /* The png_jmpbuf() macro, used in error handling, became available in * libpng version 1.0.6. If you want to be able to run your code with older * versions of libpng, you must define the macro yourself (but only if it - * is not already defined by libpng!). + * is not already defined by libpng!) */ #ifndef png_jmpbuf @@ -222,10 +225,10 @@ int main(int argc, const char **argv) #endif /* Check to see if a file is a PNG file using png_sig_cmp(). png_sig_cmp() - * returns zero if the image is a PNG and nonzero if it isn't a PNG. + * returns zero if the image is a PNG, and nonzero otherwise. * * The function check_if_png() shown here, but not used, returns nonzero (true) - * if the file can be opened and is a PNG, 0 (false) otherwise. + * if the file can be opened and is a PNG, and 0 (false) otherwise. * * If this call is successful, and you are going to keep the file open, * you should call png_set_sig_bytes(png_ptr, PNG_BYTES_TO_CHECK); once @@ -238,7 +241,7 @@ int main(int argc, const char **argv) * * Many applications already read the first 2 or 4 bytes from the start * of the image to determine the file type, so it would be easiest just - * to pass the bytes to png_sig_cmp() or even skip that if you know + * to pass the bytes to png_sig_cmp(), or even skip that if you know * you have a PNG file, and call png_set_sig_bytes(). */ #define PNG_BYTES_TO_CHECK 4 @@ -250,14 +253,14 @@ int check_if_png(char *file_name, FILE **fp) if ((*fp = fopen(file_name, "rb")) == NULL) return 0; - /* Read in some of the signature bytes */ + /* Read in some of the signature bytes. */ if (fread(buf, 1, PNG_BYTES_TO_CHECK, *fp) != PNG_BYTES_TO_CHECK) return 0; /* Compare the first PNG_BYTES_TO_CHECK bytes of the signature. - Return nonzero (true) if they match */ - - return(!png_sig_cmp(buf, (png_size_t)0, PNG_BYTES_TO_CHECK)); + * Return true if they match. + */ + return png_sig_cmp(buf, 0, PNG_BYTES_TO_CHECK) == 0; } /* Read a PNG file. You may want to return an error code if the read @@ -267,7 +270,7 @@ int check_if_png(char *file_name, FILE **fp) * some or all of the magic bytes read - see comments above). */ #ifdef open_file /* prototype 1 */ -void read_png(char *file_name) /* We need to open the file */ +void read_png(char *file_name) /* We need to open the file */ { png_structp png_ptr; png_infop info_ptr; @@ -277,10 +280,10 @@ void read_png(char *file_name) /* We need to open the file */ FILE *fp; if ((fp = fopen(file_name, "rb")) == NULL) - return (ERROR); + return ERROR; #else no_open_file /* prototype 2 */ -void read_png(FILE *fp, int sig_read) /* File is already open */ +void read_png(FILE *fp, int sig_read) /* File is already open */ { png_structp png_ptr; png_infop info_ptr; @@ -292,7 +295,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */ * functions. If you want to use the default stderr and longjump method, * you can supply NULL for the last three parameters. We also supply the * the compiler header file version, so that we know if the application - * was compiled with a compatible version of the library. REQUIRED + * was compiled with a compatible version of the library. REQUIRED. */ png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, png_voidp user_error_ptr, user_error_fn, user_warning_fn); @@ -300,7 +303,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */ if (png_ptr == NULL) { fclose(fp); - return (ERROR); + return ERROR; } /* Allocate/initialize the memory for image information. REQUIRED. */ @@ -309,42 +312,40 @@ void read_png(FILE *fp, int sig_read) /* File is already open */ { fclose(fp); png_destroy_read_struct(&png_ptr, NULL, NULL); - return (ERROR); + return ERROR; } /* Set error handling if you are using the setjmp/longjmp method (this is * the normal method of doing things with libpng). REQUIRED unless you * set up your own error handlers in the png_create_read_struct() earlier. */ - if (setjmp(png_jmpbuf(png_ptr))) { - /* Free all of the memory associated with the png_ptr and info_ptr */ + /* Free all of the memory associated with the png_ptr and info_ptr. */ png_destroy_read_struct(&png_ptr, &info_ptr, NULL); fclose(fp); - /* If we get here, we had a problem reading the file */ - return (ERROR); + /* If we get here, we had a problem reading the file. */ + return ERROR; } - /* One of the following I/O initialization methods is REQUIRED */ + /* One of the following I/O initialization methods is REQUIRED. */ #ifdef streams /* PNG file I/O method 1 */ - /* Set up the input control if you are using standard C streams */ + /* Set up the input control if you are using standard C streams. */ png_init_io(png_ptr, fp); #else no_streams /* PNG file I/O method 2 */ /* If you are using replacement read functions, instead of calling - * png_init_io() here you would call: + * png_init_io(), you would call: */ png_set_read_fn(png_ptr, (void *)user_io_ptr, user_read_fn); - /* where user_io_ptr is a structure you want available to the callbacks */ + /* where user_io_ptr is a structure you want available to the callbacks. */ #endif no_streams /* Use only one I/O method! */ /* If we have already read some of the signature */ png_set_sig_bytes(png_ptr, sig_read); #ifdef hilevel - /* - * If you have enough memory to read in the entire image at once, + /* If you have enough memory to read in the entire image at once, * and you need to specify only transforms that can be controlled * with one of the PNG_TRANSFORM_* bits (this presently excludes * quantizing, filling, setting background, and doing gamma @@ -354,10 +355,10 @@ void read_png(FILE *fp, int sig_read) /* File is already open */ png_read_png(png_ptr, info_ptr, png_transforms, NULL); #else - /* OK, you're doing it the hard way, with the lower-level functions */ + /* OK, you're doing it the hard way, with the lower-level functions. */ /* The call to png_read_info() gives us all of the information from the - * PNG file before the first IDAT (image data chunk). REQUIRED + * PNG file before the first IDAT (image data chunk). REQUIRED. */ png_read_info(png_ptr, info_ptr); @@ -385,20 +386,21 @@ void read_png(FILE *fp, int sig_read) /* File is already open */ */ png_set_strip_alpha(png_ptr); - /* Extract multiple pixels with bit depths of 1, 2, and 4 from a single + /* Extract multiple pixels with bit depths of 1, 2 or 4 from a single * byte into separate bytes (useful for paletted and grayscale images). */ png_set_packing(png_ptr); /* Change the order of packed pixels to least significant bit first - * (not useful if you are using png_set_packing). */ + * (not useful if you are using png_set_packing). + */ png_set_packswap(png_ptr); - /* Expand paletted colors into true RGB triplets */ + /* Expand paletted colors into true RGB triplets. */ if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png_ptr); - /* Expand grayscale images to the full 8 bits from 1, 2, or 4 bits/pixel */ + /* Expand grayscale images to the full 8 bits from 1, 2 or 4 bits/pixel. */ if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png_ptr); @@ -409,12 +411,11 @@ void read_png(FILE *fp, int sig_read) /* File is already open */ png_set_tRNS_to_alpha(png_ptr); /* Set the background color to draw transparent and alpha images over. - * It is possible to set the red, green, and blue components directly - * for paletted images instead of supplying a palette index. Note that + * It is possible to set the red, green and blue components directly + * for paletted images, instead of supplying a palette index. Note that, * even if the PNG file supplies a background, you are not required to * use it - you should use the (solid) application background if it has one. */ - png_color_16 my_background, *image_background; if (png_get_bKGD(png_ptr, info_ptr, &image_background) != 0) @@ -424,32 +425,29 @@ void read_png(FILE *fp, int sig_read) /* File is already open */ png_set_background(png_ptr, &my_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); - /* Some suggestions as to how to get a screen gamma value + /* Some suggestions as to how to get a screen gamma value. * * Note that screen gamma is the display_exponent, which includes - * the CRT_exponent and any correction for viewing conditions + * the CRT_exponent and any correction for viewing conditions. */ if (/* We have a user-defined screen gamma value */) - { screen_gamma = user-defined screen_gamma; - } - /* This is one way that applications share the same screen gamma value */ + /* This is one way that applications share the same screen gamma value. */ else if ((gamma_str = getenv("SCREEN_GAMMA")) != NULL) - { screen_gamma = atof(gamma_str); - } /* If we don't have another value */ else { - screen_gamma = PNG_DEFAULT_sRGB; /* A good guess for a PC monitor - in a dimly lit room */ - screen_gamma = PNG_GAMMA_MAC_18 or 1.0; /* Good guesses for Mac systems */ + screen_gamma = PNG_DEFAULT_sRGB; /* A good guess for a PC monitor + in a dimly lit room */ + screen_gamma = PNG_GAMMA_MAC_18 or 1.0; /* Good guesses for Mac + systems */ } /* Tell libpng to handle the gamma conversion for you. The final call * is a good guess for PC generated images, but it should be configurable - * by the user at run time by the user. It is strongly suggested that - * your application support gamma correction. + * by the user at run time. Gamma correction support in your application + * is strongly recommended. */ int intent; @@ -466,7 +464,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */ } #ifdef PNG_READ_QUANTIZE_SUPPORTED - /* Quantize RGB files down to 8-bit palette or reduce palettes + /* Quantize RGB files down to 8-bit palette, or reduce palettes * to the number of colors available on your screen. */ if ((color_type & PNG_COLOR_MASK_COLOR) != 0) @@ -474,29 +472,26 @@ void read_png(FILE *fp, int sig_read) /* File is already open */ int num_palette; png_colorp palette; - /* This reduces the image to the application supplied palette */ + /* This reduces the image to the application-supplied palette. */ if (/* We have our own palette */) { - /* An array of colors to which the image should be quantized */ + /* An array of colors to which the image should be quantized. */ png_color std_color_cube[MAX_SCREEN_COLORS]; - png_set_quantize(png_ptr, std_color_cube, MAX_SCREEN_COLORS, MAX_SCREEN_COLORS, NULL, 0); } - /* This reduces the image to the palette supplied in the file */ + /* This reduces the image to the palette supplied in the file. */ else if (png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette) != 0) { png_uint_16p histogram = NULL; - png_get_hIST(png_ptr, info_ptr, &histogram); - png_set_quantize(png_ptr, palette, num_palette, max_screen_colors, histogram, 0); } } #endif /* READ_QUANTIZE */ - /* Invert monochrome files to have 0 as white and 1 as black */ + /* Invert monochrome files to have 0 as white and 1 as black. */ png_set_invert_mono(png_ptr); /* If you want to shift the pixel values from the range [0,255] or @@ -506,22 +501,21 @@ void read_png(FILE *fp, int sig_read) /* File is already open */ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT) != 0) { png_color_8p sig_bit_p; - png_get_sBIT(png_ptr, info_ptr, &sig_bit_p); png_set_shift(png_ptr, sig_bit_p); } - /* Flip the RGB pixels to BGR (or RGBA to BGRA) */ + /* Flip the RGB pixels to BGR (or RGBA to BGRA). */ if ((color_type & PNG_COLOR_MASK_COLOR) != 0) png_set_bgr(png_ptr); - /* Swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR) */ + /* Swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR). */ png_set_swap_alpha(png_ptr); - /* Swap bytes of 16-bit files to least significant byte first */ + /* Swap bytes of 16-bit files to least significant byte first. */ png_set_swap(png_ptr); - /* Add filler (or alpha) byte (before/after each RGB triplet) */ + /* Add filler (or alpha) byte (before/after each RGB triplet). */ png_set_filler(png_ptr, 0xffff, PNG_FILLER_AFTER); #ifdef PNG_READ_INTERLACING_SUPPORTED @@ -534,40 +528,31 @@ void read_png(FILE *fp, int sig_read) /* File is already open */ number_passes = 1; #endif /* READ_INTERLACING */ - /* Optional call to gamma correct and add the background to the palette * and update info structure. REQUIRED if you are expecting libpng to - * update the palette for you (ie you selected such a transform above). + * update the palette for you (i.e. you selected such a transform above). */ png_read_update_info(png_ptr, info_ptr); /* Allocate the memory to hold the image using the fields of info_ptr. */ - - /* The easiest way to read the image: */ png_bytep row_pointers[height]; - - /* Clear the pointer array */ for (row = 0; row < height; row++) - row_pointers[row] = NULL; - + row_pointers[row] = NULL; /* Clear the pointer array */ for (row = 0; row < height; row++) row_pointers[row] = png_malloc(png_ptr, png_get_rowbytes(png_ptr, info_ptr)); - /* Now it's time to read the image. One of these methods is REQUIRED */ + /* Now it's time to read the image. One of these methods is REQUIRED. */ #ifdef entire /* Read the entire image in one go */ png_read_image(png_ptr, row_pointers); #else no_entire /* Read the image one or more scanlines at a time */ /* The other way to read images - deal with interlacing: */ - for (pass = 0; pass < number_passes; pass++) { #ifdef single /* Read the image a single row at a time */ for (y = 0; y < height; y++) - { png_read_rows(png_ptr, &row_pointers[y], NULL, 1); - } #else no_single /* Read the image several rows at a time */ for (y = 0; y < height; y += number_of_rows) @@ -581,25 +566,25 @@ void read_png(FILE *fp, int sig_read) /* File is already open */ #endif no_sparkle /* Use only one of these two methods */ } - /* If you want to display the image after every pass, do so here */ + /* If you want to display the image after every pass, do so here. */ #endif no_single /* Use only one of these two methods */ } #endif no_entire /* Use only one of these two methods */ - /* Read rest of file, and get additional chunks in info_ptr - REQUIRED */ + /* Read rest of file, and get additional chunks in info_ptr. REQUIRED. */ png_read_end(png_ptr, info_ptr); #endif hilevel - /* At this point you have read the entire image */ + /* At this point you have read the entire image. */ - /* Clean up after the read, and free any memory allocated - REQUIRED */ + /* Clean up after the read, and free any memory allocated. REQUIRED. */ png_destroy_read_struct(&png_ptr, &info_ptr, NULL); - /* Close the file */ + /* Close the file. */ fclose(fp); - /* That's it */ - return (OK); + /* That's it! */ + return OK; } /* Progressively read a file */ @@ -610,34 +595,30 @@ initialize_png_reader(png_structp *png_ptr, png_infop *info_ptr) /* Create and initialize the png_struct with the desired error handler * functions. If you want to use the default stderr and longjump method, * you can supply NULL for the last three parameters. We also check that - * the library version is compatible in case we are using dynamically + * the library version is compatible, in case we are using dynamically * linked libraries. */ *png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, png_voidp user_error_ptr, user_error_fn, user_warning_fn); - if (*png_ptr == NULL) { *info_ptr = NULL; - return (ERROR); + return ERROR; } - *info_ptr = png_create_info_struct(png_ptr); - if (*info_ptr == NULL) { png_destroy_read_struct(png_ptr, info_ptr, NULL); - return (ERROR); + return ERROR; } - if (setjmp(png_jmpbuf((*png_ptr)))) { png_destroy_read_struct(png_ptr, info_ptr, NULL); - return (ERROR); + return ERROR; } - /* This one's new. You will need to provide all three - * function callbacks, even if you aren't using them all. + /* You will need to provide all three function callbacks, + * even if you aren't using all of them. * If you aren't using all functions, you can specify NULL * parameters. Even when all three functions are NULL, * you need to call png_set_progressive_read_fn(). @@ -650,8 +631,7 @@ initialize_png_reader(png_structp *png_ptr, png_infop *info_ptr) */ png_set_progressive_read_fn(*png_ptr, (void *)stream_data, info_callback, row_callback, end_callback); - - return (OK); + return OK; } int @@ -660,23 +640,23 @@ process_data(png_structp *png_ptr, png_infop *info_ptr, { if (setjmp(png_jmpbuf((*png_ptr)))) { - /* Free the png_ptr and info_ptr memory on error */ + /* Free the png_ptr and info_ptr memory on error. */ png_destroy_read_struct(png_ptr, info_ptr, NULL); - return (ERROR); + return ERROR; } - /* This one's new also. Simply give it chunks of data as - * they arrive from the data stream (in order, of course). + /* Give chunks of data as they arrive from the data stream + * (in order, of course). * On segmented machines, don't give it any more than 64K. * The library seems to run fine with sizes of 4K, although - * you can give it much less if necessary (I assume you can + * you can give it much less if necessary. (I assume you can * give it chunks of 1 byte, but I haven't tried with less - * than 256 bytes yet). When this function returns, you may + * than 256 bytes yet.) When this function returns, you may * want to display any rows that were generated in the row * callback, if you aren't already displaying them there. */ png_process_data(*png_ptr, *info_ptr, buffer, length); - return (OK); + return OK; } info_callback(png_structp png_ptr, png_infop info) @@ -693,8 +673,7 @@ info_callback(png_structp png_ptr, png_infop info) row_callback(png_structp png_ptr, png_bytep new_row, png_uint_32 row_num, int pass) { - /* - * This function is called for every row in the image. If the + /* This function is called for every row in the image. If the * image is interlaced, and you turned on the interlace handler, * this function will be called for every row in every pass. * @@ -705,25 +684,22 @@ row_callback(png_structp png_ptr, png_bytep new_row, * The new row data pointer "new_row" may be NULL, indicating there is * no new data to be replaced (in cases of interlace loading). * - * If new_row is not NULL then you need to call - * png_progressive_combine_row() to replace the corresponding row as + * If new_row is not NULL, then you need to call + * png_progressive_combine_row(), to replace the corresponding row as * shown below: */ - /* Get pointer to corresponding row in our - * PNG read buffer. - */ + /* Get pointer to corresponding row in our PNG read buffer. */ png_bytep old_row = ((png_bytep *)our_data)[row_num]; #ifdef PNG_READ_INTERLACING_SUPPORTED - /* If both rows are allocated then copy the new row + /* If both rows are allocated, then copy the new row * data to the corresponding row data. */ - if ((old_row != NULL) && (new_row != NULL)) - png_progressive_combine_row(png_ptr, old_row, new_row); + if (old_row != NULL && new_row != NULL) + png_progressive_combine_row(png_ptr, old_row, new_row); - /* - * The rows and passes are called in order, so you don't really + /* The rows and passes are called in order, so you don't really * need the row_num and pass, but I'm supplying them because it * may make your life easier. * @@ -734,7 +710,6 @@ row_callback(png_structp png_ptr, png_bytep new_row, * (it just does the memcpy for you) if it will make the code * easier. Thus, you can just do this for all cases: */ - png_progressive_combine_row(png_ptr, old_row, new_row); /* where old_row is what was displayed for previous rows. Note @@ -771,7 +746,7 @@ void write_png(char *file_name /* , ... other image information ... */) /* Open the file */ fp = fopen(file_name, "wb"); if (fp == NULL) - return (ERROR); + return ERROR; /* Create and initialize the png_struct with the desired error handler * functions. If you want to use the default stderr and longjump method, @@ -781,46 +756,45 @@ void write_png(char *file_name /* , ... other image information ... */) */ png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, png_voidp user_error_ptr, user_error_fn, user_warning_fn); - if (png_ptr == NULL) { fclose(fp); - return (ERROR); + return ERROR; } - /* Allocate/initialize the image information data. REQUIRED */ + /* Allocate/initialize the image information data. REQUIRED. */ info_ptr = png_create_info_struct(png_ptr); if (info_ptr == NULL) { fclose(fp); png_destroy_write_struct(&png_ptr, NULL); - return (ERROR); + return ERROR; } - /* Set error handling. REQUIRED if you aren't supplying your own + /* Set up error handling. REQUIRED if you aren't supplying your own * error handling functions in the png_create_write_struct() call. */ if (setjmp(png_jmpbuf(png_ptr))) { - /* If we get here, we had a problem writing the file */ + /* If we get here, we had a problem writing the file. */ fclose(fp); png_destroy_write_struct(&png_ptr, &info_ptr); - return (ERROR); + return ERROR; } - /* One of the following I/O initialization functions is REQUIRED */ + /* One of the following I/O initialization functions is REQUIRED. */ #ifdef streams /* I/O initialization method 1 */ - /* Set up the output control if you are using standard C streams */ + /* Set up the output control if you are using standard C streams. */ png_init_io(png_ptr, fp); #else no_streams /* I/O initialization method 2 */ /* If you are using replacement write functions, instead of calling - * png_init_io() here you would call + * png_init_io(), you would call: */ png_set_write_fn(png_ptr, (void *)user_io_ptr, user_write_fn, user_IO_flush_function); - /* where user_io_ptr is a structure you want available to the callbacks */ + /* where user_io_ptr is a structure you want available to the callbacks. */ #endif no_streams /* Only use one initialization method */ #ifdef hilevel @@ -831,30 +805,32 @@ void write_png(char *file_name /* , ... other image information ... */) png_write_png(png_ptr, info_ptr, png_transforms, NULL); #else - /* This is the hard way */ + /* This is the hard way. */ /* Set the image information here. Width and height are up to 2^31, - * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on - * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY, + * bit_depth is one of 1, 2, 4, 8 or 16, but valid values also depend on + * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY, * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB, * or PNG_COLOR_TYPE_RGB_ALPHA. interlace is either PNG_INTERLACE_NONE or * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST - * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. REQUIRED + * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. + * REQUIRED. */ - png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, PNG_COLOR_TYPE_???, - PNG_INTERLACE_????, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, + PNG_COLOR_TYPE_???, PNG_INTERLACE_????, + PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); - /* Set the palette if there is one. REQUIRED for indexed-color images */ - palette = (png_colorp)png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH - * (sizeof (png_color))); + /* Set the palette if there is one. REQUIRED for indexed-color images. */ + palette = (png_colorp)png_malloc(png_ptr, + PNG_MAX_PALETTE_LENGTH * (sizeof (png_color))); /* ... Set palette colors ... */ png_set_PLTE(png_ptr, info_ptr, palette, PNG_MAX_PALETTE_LENGTH); - /* You must not free palette here, because png_set_PLTE only makes a link to - * the palette that you malloced. Wait until you are about to destroy + /* You must not free palette here, because png_set_PLTE only makes a link + * to the palette that you allocated. Wait until you are about to destroy * the png structure. */ - /* Optional significant bit (sBIT) chunk */ + /* Optional significant bit (sBIT) chunk. */ png_color_8 sig_bit; /* If we are dealing with a grayscale image then */ @@ -870,18 +846,17 @@ void write_png(char *file_name /* , ... other image information ... */) png_set_sBIT(png_ptr, info_ptr, &sig_bit); - /* Optional gamma chunk is strongly suggested if you have any guess * as to the correct gamma of the image. */ png_set_gAMA(png_ptr, info_ptr, gamma); - /* Optionally write comments into the image */ + /* Optionally write comments into the image. */ { png_text text_ptr[3]; - char key0[]="Title"; - char text0[]="Mona Lisa"; + char key0[] = "Title"; + char text0[] = "Mona Lisa"; text_ptr[0].key = key0; text_ptr[0].text = text0; text_ptr[0].compression = PNG_TEXT_COMPRESSION_NONE; @@ -889,8 +864,8 @@ void write_png(char *file_name /* , ... other image information ... */) text_ptr[0].lang = NULL; text_ptr[0].lang_key = NULL; - char key1[]="Author"; - char text1[]="Leonardo DaVinci"; + char key1[] = "Author"; + char text1[] = "Leonardo DaVinci"; text_ptr[1].key = key1; text_ptr[1].text = text1; text_ptr[1].compression = PNG_TEXT_COMPRESSION_NONE; @@ -898,8 +873,8 @@ void write_png(char *file_name /* , ... other image information ... */) text_ptr[1].lang = NULL; text_ptr[1].lang_key = NULL; - char key2[]="Description"; - char text2[]=""; + char key2[] = "Description"; + char text2[] = ""; text_ptr[2].key = key2; text_ptr[2].text = text2; text_ptr[2].compression = PNG_TEXT_COMPRESSION_zTXt; @@ -910,14 +885,14 @@ void write_png(char *file_name /* , ... other image information ... */) png_set_text(write_ptr, write_info_ptr, text_ptr, 3); } - /* Other optional chunks like cHRM, bKGD, tRNS, tIME, oFFs, pHYs */ + /* Other optional chunks like cHRM, bKGD, tRNS, tIME, oFFs, pHYs. */ - /* Note that if sRGB is present the gAMA and cHRM chunks must be ignored + /* Note that if sRGB is present, the gAMA and cHRM chunks must be ignored * on read and, if your application chooses to write them, they must - * be written in accordance with the sRGB profile + * be written in accordance with the sRGB profile. */ - /* Write the file header information. REQUIRED */ + /* Write the file header information. REQUIRED. */ png_write_info(png_ptr, info_ptr); /* If you want, you can write the info in two steps, in case you need to @@ -941,7 +916,7 @@ void write_png(char *file_name /* , ... other image information ... */) * all optional. Only call them if you want them. */ - /* Invert monochrome pixels */ + /* Invert monochrome pixels. */ png_set_invert_mono(png_ptr); /* Shift the pixels up to a legal bit depth and fill in @@ -949,30 +924,29 @@ void write_png(char *file_name /* , ... other image information ... */) */ png_set_shift(png_ptr, &sig_bit); - /* Pack pixels into bytes */ + /* Pack pixels into bytes. */ png_set_packing(png_ptr); - /* Swap location of alpha bytes from ARGB to RGBA */ + /* Swap location of alpha bytes from ARGB to RGBA. */ png_set_swap_alpha(png_ptr); /* Get rid of filler (OR ALPHA) bytes, pack XRGB/RGBX/ARGB/RGBA into - * RGB (4 channels -> 3 channels). The second parameter is not used. + * RGB (4 channels -> 3 channels). The second parameter is not used. */ png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE); - /* Flip BGR pixels to RGB */ + /* Flip BGR pixels to RGB. */ png_set_bgr(png_ptr); - /* Swap bytes of 16-bit files to most significant byte first */ + /* Swap bytes of 16-bit files to most significant byte first. */ png_set_swap(png_ptr); - /* Swap bits of 1-bit, 2-bit, 4-bit packed pixel formats */ + /* Swap bits of 1-bit, 2-bit, 4-bit packed pixel formats. */ png_set_packswap(png_ptr); - /* Turn on interlace handling if you are not using png_write_image() */ + /* Turn on interlace handling if you are not using png_write_image(). */ if (interlacing != 0) number_passes = png_set_interlace_handling(png_ptr); - else number_passes = 1; @@ -982,29 +956,28 @@ void write_png(char *file_name /* , ... other image information ... */) */ png_uint_32 k, height, width; - /* In this example, "image" is a one-dimensional array of bytes */ + /* In this example, "image" is a one-dimensional array of bytes. */ - /* Guard against integer overflow */ - if (height > PNG_SIZE_MAX/(width*bytes_per_pixel)) { - png_error(png_ptr, "Image_data buffer would be too large"); - } - png_byte image[height*width*bytes_per_pixel]; + /* Guard against integer overflow. */ + if (height > PNG_SIZE_MAX / (width * bytes_per_pixel)) + png_error(png_ptr, "Image data buffer would be too large"); + png_byte image[height * width * bytes_per_pixel]; png_bytep row_pointers[height]; - if (height > PNG_UINT_32_MAX/(sizeof (png_bytep))) - png_error (png_ptr, "Image is too tall to process in memory"); + if (height > PNG_UINT_32_MAX / (sizeof (png_bytep))) + png_error(png_ptr, "Image is too tall to process in memory"); - /* Set up pointers into your "image" byte array */ + /* Set up pointers into your "image" byte array. */ for (k = 0; k < height; k++) - row_pointers[k] = image + k*width*bytes_per_pixel; + row_pointers[k] = image + k * width * bytes_per_pixel; - /* One of the following output methods is REQUIRED */ + /* One of the following output methods is REQUIRED. */ #ifdef entire /* Write out the entire image data in one call */ png_write_image(png_ptr, row_pointers); - /* The other way to write the image - deal with interlacing */ + /* The other way to write the image - deal with interlacing. */ #else no_entire /* Write out the image data by one or more scanlines */ @@ -1016,27 +989,27 @@ void write_png(char *file_name /* , ... other image information ... */) /* Write a few rows at a time. */ png_write_rows(png_ptr, &row_pointers[first_row], number_of_rows); - /* If you are only writing one row at a time, this works */ + /* If you are only writing one row at a time, this works. */ for (y = 0; y < height; y++) png_write_rows(png_ptr, &row_pointers[y], 1); } #endif no_entire /* Use only one output method */ /* You can write optional chunks like tEXt, zTXt, and tIME at the end - * as well. Shouldn't be necessary in 1.2.0 and up as all the public - * chunks are supported and you can use png_set_unknown_chunks() to + * as well. Shouldn't be necessary in 1.2.0 and up, as all the public + * chunks are supported, and you can use png_set_unknown_chunks() to * register unknown chunks into the info structure to be written out. */ - /* It is REQUIRED to call this to finish writing the rest of the file */ + /* It is REQUIRED to call this to finish writing the rest of the file. */ png_write_end(png_ptr, info_ptr); #endif hilevel - /* If you png_malloced a palette, free it here (don't free info_ptr->palette, - * as recommended in versions 1.0.5m and earlier of this example; if - * libpng mallocs info_ptr->palette, libpng will free it). If you - * allocated it with malloc() instead of png_malloc(), use free() instead - * of png_free(). + /* If you png_malloced a palette, free it here. + * (Don't free info_ptr->palette, as shown in versions 1.0.5m and earlier of + * this example; if libpng mallocs info_ptr->palette, libpng will free it). + * If you allocated it with malloc() instead of png_malloc(), use free() + * instead of png_free(). */ png_free(png_ptr, palette); palette = NULL; @@ -1047,20 +1020,21 @@ void write_png(char *file_name /* , ... other image information ... */) */ png_free(png_ptr, trans); trans = NULL; - /* Whenever you use png_free() it is a good idea to set the pointer to + + /* Whenever you use png_free(), it is a good idea to set the pointer to * NULL in case your application inadvertently tries to png_free() it - * again. When png_free() sees a NULL it returns without action, thus - * avoiding the double-free security problem. + * again. When png_free() sees a NULL it returns without action, avoiding + * the double-free problem. */ - /* Clean up after the write, and free any memory allocated */ + /* Clean up after the write, and free any allocated memory. */ png_destroy_write_struct(&png_ptr, &info_ptr); - /* Close the file */ + /* Close the file. */ fclose(fp); - /* That's it */ - return (OK); + /* That's it! */ + return OK; } #endif /* if 0 */ diff --git a/vs/libpng/install-sh b/vs/libpng/install-sh index 0b0fdcbba69..b1d7a6f67f6 100755 --- a/vs/libpng/install-sh +++ b/vs/libpng/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2013-12-25.23; # UTC +scriptversion=2024-06-19.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -69,6 +69,11 @@ posix_mkdir= # Desired mode of installed file. mode=0755 +# Create dirs (including intermediate dirs) using mode 755. +# This is like GNU 'install' as of coreutils 8.32 (2020). +mkdir_umask=22 + +backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= @@ -99,19 +104,29 @@ Options: --version display version info and exit. -c (ignored) - -C install only if different (preserve the last data modification time) + -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. + -p pass -p to $cpprog. -s $stripprog installed files. + -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG -" + +By default, rm is invoked with -f; when overridden with RMPROG, +it's up to you to specify -f if you want it. + +If -S is not specified, no backups are attempted. + +Report bugs to . +GNU Automake home page: . +General help using GNU software: ." while test $# -ne 0; do case $1 in @@ -137,8 +152,13 @@ while test $# -ne 0; do -o) chowncmd="$chownprog $2" shift;; + -p) cpprog="$cpprog -p";; + -s) stripcmd=$stripprog;; + -S) backupsuffix="$2" + shift;; + -t) is_target_a_directory=always dst_arg=$2 @@ -150,7 +170,7 @@ while test $# -ne 0; do -T) is_target_a_directory=never;; - --version) echo "$0 $scriptversion"; exit $?;; + --version) echo "$0 (GNU Automake) $scriptversion"; exit $?;; --) shift break;; @@ -255,6 +275,10 @@ do dstdir=$dst test -d "$dstdir" dstdir_status=$? + # Don't chown directories that already exist. + if test $dstdir_status = 0; then + chowncmd="" + fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command @@ -271,15 +295,18 @@ do fi dst=$dst_arg - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. + # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst - dst=$dstdir/`basename "$src"` + dstbase=`basename "$src"` + case $dst in + */) dst=$dst$dstbase;; + *) dst=$dst/$dstbase;; + esac dstdir_status=0 else dstdir=`dirname "$dst"` @@ -288,27 +315,16 @@ do fi fi + case $dstdir in + */) dstdirslash=$dstdir;; + *) dstdirslash=$dstdir/;; + esac + obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then @@ -318,43 +334,49 @@ do fi posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; + # The $RANDOM variable is not portable (e.g., dash). Use it + # here however when possible just to lower collision chance. + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + + trap ' + ret=$? + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null + exit $ret + ' 0 + + # Because "mkdir -p" follows existing symlinks and we likely work + # directly in world-writable /tmp, make sure that the '$tmpdir' + # directory is successfully created first before we actually test + # 'mkdir -p'. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibility with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; esac if @@ -365,7 +387,7 @@ do then : else - # The umask is ridiculous, or mkdir does not conform to POSIX, + # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. @@ -394,7 +416,7 @@ do prefixes= else if $posix_mkdir; then - (umask=$mkdir_umask && + (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 @@ -427,14 +449,25 @@ do else # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ + dsttmp=${dstdirslash}_inst.$$_ + rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + (umask $cp_umask && + { test -z "$stripcmd" || { + # Create $dsttmp read-write so that cp doesn't create it read-only, + # which would cause strip to fail. + if test -z "$doit"; then + : >"$dsttmp" # No need to fork-exec 'touch'. + else + $doit touch "$dsttmp" + fi + } + } && + $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # @@ -460,6 +493,13 @@ do then rm -f "$dsttmp" else + # If $backupsuffix is set, and the file being installed + # already exists, attempt a backup. Don't worry if it fails, + # e.g., if mv doesn't support -f. + if test -n "$backupsuffix" && test -f "$dst"; then + $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null + fi + # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || @@ -474,9 +514,9 @@ do # file should still install successfully. { test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || + $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 @@ -493,9 +533,9 @@ do done # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff --git a/vs/libpng/intel/filter_sse2_intrinsics.c b/vs/libpng/intel/filter_sse2_intrinsics.c index 5e8553fbb94..2993f650b79 100644 --- a/vs/libpng/intel/filter_sse2_intrinsics.c +++ b/vs/libpng/intel/filter_sse2_intrinsics.c @@ -1,12 +1,10 @@ - /* filter_sse2_intrinsics.c - SSE2 optimized filter functions * + * Copyright (c) 2018 Cosmin Truta * Copyright (c) 2016-2017 Glenn Randers-Pehrson * Written by Mike Klein and Matt Sarett * Derived from arm/filter_neon_intrinsics.c * - * Last changed in libpng 1.6.31 [July 27, 2017] - * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer * and license in png.h @@ -29,39 +27,25 @@ */ static __m128i load4(const void* p) { - return _mm_cvtsi32_si128(*(const int*)p); + int tmp; + memcpy(&tmp, p, sizeof(tmp)); + return _mm_cvtsi32_si128(tmp); } static void store4(void* p, __m128i v) { - *(int*)p = _mm_cvtsi128_si32(v); + int tmp = _mm_cvtsi128_si32(v); + memcpy(p, &tmp, sizeof(int)); } static __m128i load3(const void* p) { - /* We'll load 2 bytes, then 1 byte, - * then mask them together, and finally load into SSE. - */ - const png_uint_16* p01 = (png_const_uint_16p)p; - const png_byte* p2 = (const png_byte*)(p01+1); - - png_uint_32 v012 = (png_uint_32)(*p01) - | (png_uint_32)(*p2) << 16; - return load4(&v012); + png_uint_32 tmp = 0; + memcpy(&tmp, p, 3); + return _mm_cvtsi32_si128(tmp); } static void store3(void* p, __m128i v) { - /* We'll pull from SSE as a 32-bit int, then write - * its bottom two bytes, then its third byte. - */ - png_uint_32 v012; - png_uint_16* p01; - png_byte* p2; - - store4(&v012, v); - - p01 = (png_uint_16p)p; - p2 = (png_byte*)(p01+1); - *p01 = (png_uint_16)v012; - *p2 = (png_byte)(v012 >> 16); + int tmp = _mm_cvtsi128_si32(v); + memcpy(p, &tmp, 3); } void png_read_filter_row_sub3_sse2(png_row_infop row_info, png_bytep row, @@ -71,7 +55,7 @@ void png_read_filter_row_sub3_sse2(png_row_infop row_info, png_bytep row, * There is no pixel to the left of the first pixel. It's encoded directly. * That works with our main loop if we just say that left pixel was zero. */ - png_size_t rb; + size_t rb; __m128i a, d = _mm_setzero_si128(); @@ -104,7 +88,7 @@ void png_read_filter_row_sub4_sse2(png_row_infop row_info, png_bytep row, * There is no pixel to the left of the first pixel. It's encoded directly. * That works with our main loop if we just say that left pixel was zero. */ - png_size_t rb; + size_t rb; __m128i a, d = _mm_setzero_si128(); @@ -131,7 +115,7 @@ void png_read_filter_row_avg3_sse2(png_row_infop row_info, png_bytep row, * perfectly with our loop if we make sure a starts at zero. */ - png_size_t rb; + size_t rb; const __m128i zero = _mm_setzero_si128(); @@ -185,7 +169,7 @@ void png_read_filter_row_avg4_sse2(png_row_infop row_info, png_bytep row, * predicted to be half of the pixel above it. So again, this works * perfectly with our loop if we make sure a starts at zero. */ - png_size_t rb; + size_t rb; const __m128i zero = _mm_setzero_si128(); __m128i b; __m128i a, d = zero; @@ -257,7 +241,7 @@ void png_read_filter_row_paeth3_sse2(png_row_infop row_info, png_bytep row, * Here we zero b and d, which become c and a respectively at the start of * the loop. */ - png_size_t rb; + size_t rb; const __m128i zero = _mm_setzero_si128(); __m128i c, b = zero, a, d = zero; @@ -274,7 +258,7 @@ void png_read_filter_row_paeth3_sse2(png_row_infop row_info, png_bytep row, a = d; d = _mm_unpacklo_epi8(load4(row ), zero); /* (p-a) == (a+b-c - a) == (b-c) */ - + pa = _mm_sub_epi16(b,c); /* (p-b) == (a+b-c - b) == (a-c) */ @@ -356,7 +340,7 @@ void png_read_filter_row_paeth4_sse2(png_row_infop row_info, png_bytep row, * Here we zero b and d, which become c and a respectively at the start of * the loop. */ - png_size_t rb; + size_t rb; const __m128i zero = _mm_setzero_si128(); __m128i pa,pb,pc,smallest,nearest; __m128i c, b = zero, diff --git a/vs/libpng/intel/intel_init.c b/vs/libpng/intel/intel_init.c index 8f08baf8c51..9e4610d25b4 100644 --- a/vs/libpng/intel/intel_init.c +++ b/vs/libpng/intel/intel_init.c @@ -1,12 +1,10 @@ - /* intel_init.c - SSE2 optimized filter functions * + * Copyright (c) 2018 Cosmin Truta * Copyright (c) 2016-2017 Glenn Randers-Pehrson * Written by Mike Klein and Matt Sarett, Google, Inc. * Derived from arm/arm_init.c * - * Last changed in libpng 1.6.29 [March 16, 2017] - * * This code is released under the libpng license. * For conditions of distribution and use, see the disclaimer * and license in png.h diff --git a/vs/libpng/libpng-manual.txt b/vs/libpng/libpng-manual.txt index d4407ef2ea0..862fe2c5d0f 100644 --- a/vs/libpng/libpng-manual.txt +++ b/vs/libpng/libpng-manual.txt @@ -1,9 +1,7 @@ libpng-manual.txt - A description on how to use and modify libpng - libpng version 1.6.34 - September 29, 2017 - Updated and distributed by Glenn Randers-Pehrson - - Copyright (c) 1998-2017 Glenn Randers-Pehrson + Copyright (c) 2018-2025 Cosmin Truta + Copyright (c) 1998-2018 Glenn Randers-Pehrson This document is released under the libpng license. For conditions of distribution and use, see the disclaimer @@ -11,9 +9,13 @@ libpng-manual.txt - A description on how to use and modify libpng Based on: - libpng versions 0.97, January 1998, through 1.6.34 - September 29, 2017 + libpng version 1.6.36, December 2018, through 1.6.47 - February 2025 + Updated and distributed by Cosmin Truta + Copyright (c) 2018-2025 Cosmin Truta + + libpng versions 0.97, January 1998, through 1.6.35 - July 2018 Updated and distributed by Glenn Randers-Pehrson - Copyright (c) 1998-2017 Glenn Randers-Pehrson + Copyright (c) 1998-2018 Glenn Randers-Pehrson libpng 1.0 beta 6 - version 0.96 - May 28, 1997 Updated and distributed by Andreas Dilger @@ -45,7 +47,6 @@ libpng-manual.txt - A description on how to use and modify libpng XIII. Detecting libpng XIV. Source code repository XV. Coding style - XVI. Y2K Compliance in libpng I. Introduction @@ -66,7 +67,7 @@ file format in application programs. The PNG specification (second edition), November 2003, is available as a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2004 (E)) at -. The W3C and ISO documents have identical technical content. The PNG-1.2 specification is available at @@ -74,9 +75,9 @@ The PNG-1.2 specification is available at It is technically equivalent to the PNG specification (second edition) but has some additional material. -The PNG-1.0 specification is available as RFC 2083 +The PNG-1.0 specification is available as RFC 2083 at and as a -W3C Recommendation . +W3C Recommendation at . Some additional chunks are described in the special-purpose public chunks documents at @@ -348,18 +349,18 @@ Customizing libpng. FILE *fp = fopen(file_name, "rb"); if (!fp) { - return (ERROR); + return ERROR; } if (fread(header, 1, number, fp) != number) { - return (ERROR); + return ERROR; } - is_png = !png_sig_cmp(header, 0, number); + is_png = (png_sig_cmp(header, 0, number) == 0); if (!is_png) { - return (NOT_PNG); + return NOT_PNG; } Next, png_struct and png_info need to be allocated and initialized. In @@ -378,15 +379,14 @@ create the structure, so your application should check for that. user_error_fn, user_warning_fn); if (!png_ptr) - return (ERROR); + return ERROR; png_infop info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { - png_destroy_read_struct(&png_ptr, - (png_infopp)NULL, (png_infopp)NULL); - return (ERROR); + png_destroy_read_struct(&png_ptr, NULL, NULL); + return ERROR; } If you want to use your own memory allocation routines, @@ -418,14 +418,13 @@ free any memory. if (setjmp(png_jmpbuf(png_ptr))) { - png_destroy_read_struct(&png_ptr, &info_ptr, - &end_info); + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); fclose(fp); - return (ERROR); + return ERROR; } -Pass (png_infopp)NULL instead of &end_info if you didn't create -an end_info structure. +Pass NULL instead of &end_info if you didn't create an end_info +structure. If you would rather avoid the complexity of setjmp/longjmp issues, you can compile libpng with PNG_NO_SETJMP, in which case @@ -495,7 +494,7 @@ You can set up a callback function to handle any unknown chunks in the input stream. You must supply the function read_chunk_callback(png_structp png_ptr, - png_unknown_chunkp chunk); + png_unknown_chunkp chunk) { /* The unknown chunk structure contains your chunk data, along with similar data for any other @@ -503,7 +502,7 @@ input stream. You must supply the function png_byte name[5]; png_byte *data; - png_size_t size; + size_t size; /* Note that libpng has already taken care of the CRC handling */ @@ -512,9 +511,9 @@ input stream. You must supply the function unknown chunk structure, process it, and return one of the following: */ - return (-n); /* chunk had an error */ - return (0); /* did not recognize */ - return (n); /* success */ + return -n; /* chunk had an error */ + return 0; /* did not recognize */ + return n; /* success */ } (You can give your function another name that you like instead of @@ -546,9 +545,9 @@ a progress meter or the like. It's demonstrated in pngtest.c. You must supply a function void read_row_callback(png_structp png_ptr, - png_uint_32 row, int pass); + png_uint_32 row, int pass) { - /* put your code here */ + /* put your code here */ } (You can give it another name that you like instead of "read_row_callback") @@ -876,7 +875,7 @@ described below (the latter being the two common names for associated alpha color channels). Note that PNG files always contain non-associated color channels; png_set_alpha_mode() with one of the modes causes the decoder to convert the pixels to an associated form before returning them to your -application. +application. Since it is not necessary to perform arithmetic on opaque color values so long as they are not to be resampled and are in the final color space it is @@ -1003,7 +1002,7 @@ chunks to be assumed to be encoded using sRGB. png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); In this case the output is assumed to be something like an sRGB conformant -display preceeded by a power-law lookup table of power 1.45. This is how +display preceded by a power-law lookup table of power 1.45. This is how early Mac systems behaved. png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR); @@ -1055,7 +1054,7 @@ faster.) When the default gamma of PNG files doesn't match the output gamma. If you have PNG files with no gamma information png_set_alpha_mode allows -you to provide a default gamma, but it also sets the ouput gamma to the +you to provide a default gamma, but it also sets the output gamma to the matching value. If you know your PNG files have a gamma that doesn't match the output you can take advantage of the fact that png_set_alpha_mode always sets the output gamma but only sets the PNG @@ -1179,22 +1178,22 @@ where row_pointers is an array of pointers to the pixel data for each row: If you know your image size and pixel size ahead of time, you can allocate row_pointers prior to calling png_read_png() with - if (height > PNG_UINT_32_MAX/(sizeof (png_byte))) - png_error (png_ptr, + if (height > PNG_UINT_32_MAX / (sizeof (png_bytep))) + png_error(png_ptr, "Image is too tall to process in memory"); - if (width > PNG_UINT_32_MAX/pixel_size) - png_error (png_ptr, + if (width > PNG_UINT_32_MAX / pixel_size) + png_error(png_ptr, "Image is too wide to process in memory"); row_pointers = png_malloc(png_ptr, height*(sizeof (png_bytep))); - for (int i=0; i PNG_SIZE_MAX/(width*pixel_size)) { - png_error(png_ptr,"image_data buffer would be too large"); - } + if (height > PNG_SIZE_MAX/(width*pixel_size)) + png_error(png_ptr, "image_data buffer would be too large"); - png_bytep buffer=png_malloc(png_ptr,height*width*pixel_size); + png_bytep buffer = png_malloc(png_ptr, + height*width*pixel_size); - for (int i=0; i= 10504 png_set_scale_16(png_ptr); #else png_set_strip_16(png_ptr); #endif + } (The more accurate "png_set_scale_16()" API became available in libpng version 1.5.4). @@ -1791,7 +1791,7 @@ the information. If, instead, you want to convert the image to an opaque version with no alpha channel use png_set_background; see below. As of libpng version 1.5.2, almost all useful expansions are supported, the -major ommissions are conversion of grayscale to indexed images (which can be +major omissions are conversion of grayscale to indexed images (which can be done trivially in the application) and conversion of indexed to grayscale (which can be done by a trivial manipulation of the palette.) @@ -1900,7 +1900,7 @@ Note that png_set_filler() does not change the color type. If you want to do that, you can add a true alpha channel with if (color_type == PNG_COLOR_TYPE_RGB || - color_type == PNG_COLOR_TYPE_GRAY) + color_type == PNG_COLOR_TYPE_GRAY) png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER); where "filler" contains the alpha value to assign to each pixel. @@ -1925,7 +1925,7 @@ with alpha. if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) png_set_rgb_to_gray(png_ptr, error_action, - double red_weight, double green_weight); + (double)red_weight, (double)green_weight); error_action = 1: silently do the conversion @@ -1948,8 +1948,8 @@ In the corresponding fixed point API the red_weight and green_weight values are simply scaled by 100,000: png_set_rgb_to_gray(png_ptr, error_action, - png_fixed_point red_weight, - png_fixed_point green_weight); + (png_fixed_point)red_weight, + (png_fixed_point)green_weight); If you have set error_action = 1 or 2, you can later check whether the image really was gray, after processing @@ -2185,9 +2185,8 @@ do your own check for number_of_rows*width*pixel_size if you are using a multiple-row buffer: /* Guard against integer overflow */ - if (number_of_rows > PNG_SIZE_MAX/(width*pixel_size)) { - png_error(png_ptr,"image_data buffer would be too large"); - } + if (number_of_rows > PNG_SIZE_MAX/(width*pixel_size)) + png_error(png_ptr, "image_data buffer would be too large"); Remember: Before you call png_read_update_info(), the png_get_*() functions return the values corresponding to the original PNG image. @@ -2407,12 +2406,11 @@ separate. if (!end_info) { - png_destroy_read_struct(&png_ptr, &info_ptr, - (png_infopp)NULL); - return (ERROR); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + return ERROR; } - png_read_end(png_ptr, end_info); + png_read_end(png_ptr, end_info); If you are not interested, you should still call png_read_end() but you can pass NULL, avoiding the need to create an end_info structure. @@ -2420,7 +2418,7 @@ If you do this, libpng will not process any chunks after IDAT other than skipping over them and perhaps (depending on whether you have called png_set_crc_action) checking their CRCs while looking for the IEND chunk. - png_read_end(png_ptr, (png_infop)NULL); + png_read_end(png_ptr, NULL); If you don't call png_read_end(), then your file pointer will be left pointing to the first chunk after the last IDAT, which is probably @@ -2429,13 +2427,11 @@ the PNG datastream. When you are done, you can free all memory allocated by libpng like this: - png_destroy_read_struct(&png_ptr, &info_ptr, - &end_info); + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); or, if you didn't create an end_info structure, - png_destroy_read_struct(&png_ptr, &info_ptr, - (png_infopp)NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); It is also possible to individually free the info_ptr members that point to libpng-allocated storage with the following function: @@ -2549,22 +2545,20 @@ png_infop info_ptr; user_error_fn, user_warning_fn); if (!png_ptr) - return (ERROR); + return ERROR; info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { - png_destroy_read_struct(&png_ptr, - (png_infopp)NULL, (png_infopp)NULL); - return (ERROR); + png_destroy_read_struct(&png_ptr, NULL, NULL); + return ERROR; } if (setjmp(png_jmpbuf(png_ptr))) { - png_destroy_read_struct(&png_ptr, &info_ptr, - (png_infopp)NULL); - return (ERROR); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + return ERROR; } /* This one's new. You can provide functions @@ -2596,9 +2590,8 @@ png_infop info_ptr; { if (setjmp(png_jmpbuf(png_ptr))) { - png_destroy_read_struct(&png_ptr, &info_ptr, - (png_infopp)NULL); - return (ERROR); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + return ERROR; } /* This one's new also. Simply give it a chunk @@ -2742,7 +2735,7 @@ custom writing functions. See the discussion under Customizing libpng. FILE *fp = fopen(file_name, "wb"); if (!fp) - return (ERROR); + return ERROR; Next, png_struct and png_info need to be allocated and initialized. As these can be both relatively large, you may not want to store these @@ -2757,14 +2750,13 @@ both "png_ptr"; you can call them anything you like, such as user_error_fn, user_warning_fn); if (!png_ptr) - return (ERROR); + return ERROR; png_infop info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { - png_destroy_write_struct(&png_ptr, - (png_infopp)NULL); - return (ERROR); + png_destroy_write_struct(&png_ptr, NULL); + return ERROR; } If you want to use your own memory allocation routines, @@ -2789,9 +2781,9 @@ section below for more information on the libpng error handling. if (setjmp(png_jmpbuf(png_ptr))) { - png_destroy_write_struct(&png_ptr, &info_ptr); + png_destroy_write_struct(&png_ptr, &info_ptr); fclose(fp); - return (ERROR); + return ERROR; } ... return; @@ -2843,9 +2835,9 @@ a progress meter or the like. It's demonstrated in pngtest.c. You must supply a function void write_row_callback(png_structp png_ptr, png_uint_32 row, - int pass); + int pass) { - /* put your code here */ + /* put your code here */ } (You can give it another name that you like instead of "write_row_callback") @@ -3115,8 +3107,8 @@ width, height, bit_depth, and color_type must be the same in each call. png_set_eXIf_1(png_ptr, info_ptr, num_exif, exif); - exif - Exif profile (array of - png_byte) (PNG_INFO_eXIf) + exif - Exif profile (array of png_byte) + (PNG_INFO_eXIf) png_set_hIST(png_ptr, info_ptr, hist); @@ -3126,12 +3118,12 @@ width, height, bit_depth, and color_type must be the same in each call. png_set_tIME(png_ptr, info_ptr, mod_time); mod_time - time image was last modified - (PNG_VALID_tIME) + (PNG_INFO_tIME) png_set_bKGD(png_ptr, info_ptr, background); background - background color (of type - png_color_16p) (PNG_VALID_bKGD) + png_color_16p) (PNG_INFO_bKGD) png_set_text(png_ptr, info_ptr, text_ptr, num_text); @@ -3779,7 +3771,7 @@ in-memory bitmap formats or to be written from the same formats. If these formats do not accommodate your needs then you can, and should, use the more sophisticated APIs above - these support a wide variety of in-memory formats and a wide variety of sophisticated transformations to those formats as well -as a wide variety of APIs to manipulate ancilliary information. +as a wide variety of APIs to manipulate ancillary information. To read a PNG file using the simplified API: @@ -4055,7 +4047,7 @@ Flags containing additional information about the image are held in the 'flags' field of png_image. PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB == 0x01 - This indicates the the RGB values of the in-memory bitmap do not + This indicates that the RGB values of the in-memory bitmap do not correspond to the red, green and blue end-points defined by sRGB. PNG_IMAGE_FLAG_FAST == 0x02 @@ -4102,7 +4094,7 @@ READ APIs The PNG header is read from the stdio FILE object. int png_image_begin_read_from_memory(png_imagep image, - png_const_voidp memory, png_size_t size) + png_const_voidp memory, size_t size) The PNG header is read from the given memory buffer. @@ -4217,7 +4209,7 @@ png_create_read_struct_2() or png_create_write_struct_2() to register your own functions as described above. These functions also provide a void pointer that can be retrieved via - mem_ptr=png_get_mem_ptr(png_ptr); + mem_ptr = png_get_mem_ptr(png_ptr); Your replacement memory functions must have prototypes as follows: @@ -4255,10 +4247,10 @@ png_get_io_ptr(). For example: The replacement I/O functions must have prototypes as follows: void user_read_data(png_structp png_ptr, - png_bytep data, png_size_t length); + png_bytep data, size_t length); void user_write_data(png_structp png_ptr, - png_bytep data, png_size_t length); + png_bytep data, size_t length); void user_flush_data(png_structp png_ptr); @@ -4514,14 +4506,14 @@ When PNG_DEBUG is defined but is zero, the macros aren't defined, but you can still use PNG_DEBUG to control your own debugging: #ifdef PNG_DEBUG - fprintf(stderr, ... + fprintf(stderr, ...); #endif When PNG_DEBUG = 1, the macros are defined, but only png_debug statements having level = 0 will be printed. There aren't any such statements in this version of libpng, but if you insert some they will be printed. -VII. MNG support +VII. MNG support The MNG specification (available at http://www.libpng.org/pub/mng) allows certain extensions to PNG for PNG images that are embedded in MNG datastreams. @@ -4548,7 +4540,7 @@ or any other MNG chunks; your application must provide its own support for them. You may wish to consider using libmng (available at https://www.libmng.com/) instead. -VIII. Changes to Libpng from version 0.88 +VIII. Changes to Libpng from version 0.88 It should be noted that versions of libpng later than 0.96 are not distributed by the original libpng author, Guy Schalnat, nor by @@ -4603,7 +4595,7 @@ application: png_uint_32 application_vn = PNG_LIBPNG_VER; -IX. Changes to Libpng from version 1.0.x to 1.2.x +IX. Changes to Libpng from version 1.0.x to 1.2.x Support for user memory management was enabled by default. To accomplish this, the functions png_create_read_struct_2(), @@ -4691,7 +4683,7 @@ deprecated since libpng-1.0.16 and libpng-1.2.6. The function png_check_sig(sig, num) was replaced with - !png_sig_cmp(sig, 0, num) + png_sig_cmp(sig, 0, num) == 0 It has been deprecated since libpng-0.90. The function @@ -4700,7 +4692,7 @@ which also expands tRNS to alpha was replaced with png_set_expand_gray_1_2_4_to_8() which does not. It has been deprecated since libpng-1.0.18 and 1.2.9. -X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x +X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x Private libpng prototypes and macro definitions were moved from png.h and pngconf.h into a new pngpriv.h header file. @@ -4755,8 +4747,8 @@ png_get_mmx_bitdepth_threshold(), png_get_mmx_rowbytes_threshold(), png_set_asm_flags(), and png_mmx_supported() We removed the obsolete png_check_sig(), png_memcpy_check(), and -png_memset_check() functions. Instead use !png_sig_cmp(), memcpy(), -and memset(), respectively. +png_memset_check() functions. Instead use png_sig_cmp() == 0, +memcpy(), and memset(), respectively. The function png_set_gray_1_2_4_to_8() was removed. It has been deprecated since libpng-1.0.18 and 1.2.9, when it was replaced with @@ -4784,7 +4776,7 @@ behavior in case the application runs out of memory part-way through the process. We changed the prototypes of png_get_compression_buffer_size() and -png_set_compression_buffer_size() to work with png_size_t instead of +png_set_compression_buffer_size() to work with size_t instead of png_uint_32. Support for numbered error messages was removed by default, since we @@ -4810,7 +4802,7 @@ was renamed to PNG_READ_QUANTIZE_SUPPORTED. We removed the trailing '.' from the warning and error messages. -XI. Changes to Libpng from version 1.4.x to 1.5.x +XI. Changes to Libpng from version 1.4.x to 1.5.x From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the function) incorrectly returned a value of type png_uint_32. @@ -4873,7 +4865,7 @@ to png_bytepp, and in png_set_iCCP, from png_charp to png_const_bytep. There are changes of form in png.h, including new and changed macros to declare parts of the API. Some API functions with arguments that are pointers to data not modified within the function have been corrected to -declare these arguments with PNG_CONST. +declare these arguments with const. Much of the internal use of C macros to control the library build has also changed and some of this is visible in the exported header files, in @@ -5068,7 +5060,7 @@ even though the default is to use the macros - this allows applications to choose at app buildtime whether or not to use macros (previously impossible because the functions weren't in the default build.) -XII. Changes to Libpng from version 1.5.x to 1.6.x +XII. Changes to Libpng from version 1.5.x to 1.6.x A "simplified API" has been added (see documentation in png.h and a simple example in contrib/examples/pngtopng.c). The new publicly visible API @@ -5181,7 +5173,7 @@ a pre-existing bug where the per-chunk 'keep' setting is ignored, and makes it possible to skip IDAT chunks in the sequential reader. The machine-generated configure files are no longer included in branches -libpng16 and later of the GIT repository. They continue to be included +libpng17 and later of the GIT repository. They continue to be included in the tarball releases, however. Libpng-1.6.0 through 1.6.2 used the CMF bytes at the beginning of the IDAT @@ -5231,14 +5223,14 @@ attempt to decode the Exif profile; it simply returns a byte array containing the profile to the calling application which must do its own decoding. -XIII. Detecting libpng +XIII. Detecting libpng The png_get_io_ptr() function has been present since libpng-0.88, has never changed, and is unaffected by conditional compilation macros. It is the best choice for use in configure scripts for detecting the presence of any libpng version since 0.88. In an autoconf "configure.in" you could use - AC_CHECK_LIB(png, png_get_io_ptr, ... + AC_CHECK_LIB(png, png_get_io_ptr, ...) XV. Source code repository @@ -5247,28 +5239,27 @@ control. The git repository was built from old libpng-x.y.z.tar.gz files going back to version 0.70. You can access the git repository (read only) at - https://github.com/glennrp/libpng or + https://github.com/pnggroup/libpng or https://git.code.sf.net/p/libpng/code.git or you can browse it with a web browser at - https://github.com/glennrp/libpng or + https://github.com/pnggroup/libpng or https://sourceforge.net/p/libpng/code/ci/libpng16/tree/ -Patches can be sent to glennrp at users.sourceforge.net or to -png-mng-implement at lists.sourceforge.net or you can upload them to -the libpng bug tracker at +Patches can be sent to png-mng-implement at lists.sourceforge.net or +uploaded to the libpng bug tracker at https://libpng.sourceforge.io/ or as a "pull request" to - https://github.com/glennrp/libpng/pulls + https://github.com/pnggroup/libpng/pulls We also accept patches built from the tar or zip distributions, and -simple verbal discriptions of bug fixes, reported either to the +simple verbal descriptions of bug fixes, reported either to the SourceForge bug tracker, to the png-mng-implement at lists.sf.net -mailing list, as github issues, or directly to glennrp. +mailing list, as github issues. XV. Coding style @@ -5289,7 +5280,7 @@ braces on separate lines: The braces can be omitted from simple one-line actions: if (condition) - return (0); + return 0; We use 3-space indentation, except for continued statements which are usually indented the same as the first line of the statement @@ -5407,58 +5398,3 @@ We do not use the TAB character for indentation in the C sources. Lines do not exceed 80 characters. Other rules can be inferred by inspecting the libpng source. - -XVI. Y2K Compliance in libpng - -Since the PNG Development group is an ad-hoc body, we can't make -an official declaration. - -This is your unofficial assurance that libpng from version 0.71 and -upward through 1.6.34 are Y2K compliant. It is my belief that earlier -versions were also Y2K compliant. - -Libpng only has two year fields. One is a 2-byte unsigned integer -that will hold years up to 65535. The other, which is deprecated, -holds the date in text format, and will hold years up to 9999. - -The integer is - "png_uint_16 year" in png_time_struct. - -The string is - "char time_buffer[29]" in png_struct. This is no longer used -in libpng-1.6.x and will be removed from libpng-1.7.0. - -There are seven time-related functions: - - png_convert_to_rfc_1123_buffer() in png.c - (formerly png_convert_to_rfc_1152() in error, and - also formerly png_convert_to_rfc_1123()) - png_convert_from_struct_tm() in pngwrite.c, called - in pngwrite.c - png_convert_from_time_t() in pngwrite.c - png_get_tIME() in pngget.c - png_handle_tIME() in pngrutil.c, called in pngread.c - png_set_tIME() in pngset.c - png_write_tIME() in pngwutil.c, called in pngwrite.c - -All appear to handle dates properly in a Y2K environment. The -png_convert_from_time_t() function calls gmtime() to convert from system -clock time, which returns (year - 1900), which we properly convert to -the full 4-digit year. There is a possibility that applications using -libpng are not passing 4-digit years into the png_convert_to_rfc_1123() -function, or that they are incorrectly passing only a 2-digit year -instead of "year - 1900" into the png_convert_from_struct_tm() function, -but this is not under our control. The libpng documentation has always -stated that it works with 4-digit years, and the APIs have been -documented as such. - -The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned -integer to hold the year, and can hold years as large as 65535. - -zlib, upon which libpng depends, is also Y2K compliant. It contains -no date-related code. - - - Glenn Randers-Pehrson - libpng maintainer - PNG Development Group diff --git a/vs/libpng/libpng.3 b/vs/libpng/libpng.3 index 3c8d62ab29d..923b6772eb3 100644 --- a/vs/libpng/libpng.3 +++ b/vs/libpng/libpng.3 @@ -1,11 +1,11 @@ -.TH LIBPNG 3 "September 29, 2017" +.TH LIBPNG 3 "February 18, 2025" .SH NAME -libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34 +libpng \- Portable Network Graphics (PNG) Reference Library 1.6.47 + .SH SYNOPSIS -\fB -#include \fP +\fB#include \fP -\fBpng_uint_32 png_access_version_number \fI(void\fP\fB);\fP +\fBpng_uint_32 png_access_version_number (void);\fP \fBvoid png_benign_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP @@ -35,7 +35,7 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34 \fBpng_structp png_create_write_struct_2 (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fP\fIwarn_fn\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP -\fBvoid png_data_freer (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIfreer\fP\fB, png_uint_32 \fImask)\fP\fB);\fP +\fBvoid png_data_freer (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIfreer\fP\fB, png_uint_32 \fImask\fP\fB);\fP \fBvoid png_destroy_info_struct (png_structp \fP\fIpng_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP @@ -225,7 +225,7 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34 \fBint png_image_begin_read_from_stdio (png_imagep \fP\fIimage\fP\fB, FILE* \fIfile\fP\fB);\fP -\fBint, png_image_begin_read_from_memory (png_imagep \fP\fIimage\fP\fB, png_const_voidp \fP\fImemory\fP\fB, png_size_t \fIsize\fP\fB);\fP +\fBint, png_image_begin_read_from_memory (png_imagep \fP\fIimage\fP\fB, png_const_voidp \fP\fImemory\fP\fB, size_t \fIsize\fP\fB);\fP \fBint png_image_finish_read (png_imagep \fP\fIimage\fP\fB, png_colorp \fP\fIbackground\fP\fB, void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, void \fI*colormap\fP\fB);\fP @@ -233,11 +233,11 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34 \fBint png_image_write_to_file (png_imagep \fP\fIimage\fP\fB, const char \fP\fI*file\fP\fB, int \fP\fIconvert_to_8bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, void \fI*colormap\fP\fB);\fP -\fBint png_image_write_to_memory (png_imagep \fP\fIimage\fP\fB, void \fP\fI*memory\fP\fB, png_alloc_size_t * PNG_RESTRICT \fP\fImemory_bytes\fP\fB, int \fP\fIconvert_to_8_bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, const void \fI*colormap)\fP\fB);\fP +\fBint png_image_write_to_memory (png_imagep \fP\fIimage\fP\fB, void \fP\fI*memory\fP\fB, png_alloc_size_t * PNG_RESTRICT \fP\fImemory_bytes\fP\fB, int \fP\fIconvert_to_8_bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, const void \fI*colormap\fP\fB);\fP -\fBint png_image_write_to_stdio (png_imagep \fP\fIimage\fP\fB, FILE \fP\fI*file\fP\fB, int \fP\fIconvert_to_8_bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, void \fI*colormap)\fP\fB);\fP +\fBint png_image_write_to_stdio (png_imagep \fP\fIimage\fP\fB, FILE \fP\fI*file\fP\fB, int \fP\fIconvert_to_8_bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, void \fI*colormap\fP\fB);\fP -\fBvoid png_info_init_3 (png_infopp \fP\fIinfo_ptr\fP\fB, png_size_t \fIpng_info_struct_size\fP\fB);\fP +\fBvoid png_info_init_3 (png_infopp \fP\fIinfo_ptr\fP\fB, size_t \fIpng_info_struct_size\fP\fB);\fP \fBvoid png_init_io (png_structp \fP\fIpng_ptr\fP\fB, FILE \fI*fp\fP\fB);\fP @@ -251,11 +251,11 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34 \fBpng_uint_32 png_permit_mng_features (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fImng_features_permitted\fP\fB);\fP -\fBvoid png_process_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, png_size_t \fIbuffer_size\fP\fB);\fP +\fBvoid png_process_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, size_t \fIbuffer_size\fP\fB);\fP -\fBpng_size_t png_process_data_pause \fP\fI(png_structp\fP\fB, int \fIsave\fP\fB);\fP +\fBsize_t png_process_data_pause (png_structp \fP\fIpng_ptr\fP\fB, int \fIsave\fP\fB);\fP -\fBpng_uint_32 png_process_data_skip \fI(png_structp\fP\fB);\fP +\fBpng_uint_32 png_process_data_skip (png_structp \fP\fIpng_ptr\fP\fB);\fP \fBvoid png_progressive_combine_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIold_row\fP\fB, png_bytep \fInew_row\fP\fB);\fP @@ -297,7 +297,7 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34 \fBvoid png_set_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_16p \fIbackground\fP\fB);\fP -\fBvoid png_set_check_for_invalid_index(png_structrp \fP\fIpng_ptr\fP\fB, int \fIallowed\fP\fB);\fP +\fBvoid png_set_check_for_invalid_index (png_structrp \fP\fIpng_ptr\fP\fB, int \fIallowed\fP\fB);\fP \fBvoid png_set_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fP\fIwhite_x\fP\fB, double \fP\fIwhite_y\fP\fB, double \fP\fIred_x\fP\fB, double \fP\fIred_y\fP\fB, double \fP\fIgreen_x\fP\fB, double \fP\fIgreen_y\fP\fB, double \fP\fIblue_x\fP\fB, double \fIblue_y\fP\fB);\fP @@ -353,7 +353,7 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34 \fBvoid png_set_eXIf (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fIexif\fP\fB);\fP -\fBvoid png_set_eXIf_1 (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, const png_uint_32 \fP\fInum_exif\fP\fB, png_bytep \fIexif\fP\fB);\fP +\fBvoid png_set_eXIf_1 (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fInum_exif\fP\fB, png_bytep \fIexif\fP\fB);\fP \fBvoid png_set_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_16p \fIhist\fP\fB);\fP @@ -453,7 +453,7 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34 \fBvoid png_set_text_compression_window_bits (png_structp \fP\fIpng_ptr\fP\fB, int \fIwindow_bits\fP\fB);\fP -\fBvoid \fP\fIpng_set_text_compression_method\fP\fB, (png_structp \fP\fIpng_ptr\fP\fB, int \fImethod)\fP\fB);\fP +\fBvoid png_set_text_compression_method (png_structp \fP\fIpng_ptr\fP\fB, int \fImethod\fP\fB);\fP \fBvoid png_set_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_timep \fImod_time\fP\fB);\fP @@ -475,15 +475,15 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34 \fBvoid png_set_write_user_transform_fn (png_structp \fP\fIpng_ptr\fP\fB, png_user_transform_ptr \fIwrite_user_transform_fn\fP\fB);\fP -\fBint png_sig_cmp (png_bytep \fP\fIsig\fP\fB, png_size_t \fP\fIstart\fP\fB, png_size_t \fInum_to_check\fP\fB);\fP +\fBint png_sig_cmp (png_bytep \fP\fIsig\fP\fB, size_t \fP\fIstart\fP\fB, size_t \fInum_to_check\fP\fB);\fP \fBvoid png_start_read_image (png_structp \fIpng_ptr\fP\fB);\fP \fBvoid png_warning (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fImessage\fP\fB);\fP -\fBvoid png_write_chunk (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP +\fBvoid png_write_chunk (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_bytep \fP\fIdata\fP\fB, size_t \fIlength\fP\fB);\fP -\fBvoid png_write_chunk_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP +\fBvoid png_write_chunk_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, size_t \fIlength\fP\fB);\fP \fBvoid png_write_chunk_end (png_structp \fIpng_ptr\fP\fB);\fP @@ -515,13 +515,12 @@ the Portable Network Graphics (PNG) format image files. It uses the .IR zlib(3) compression library. Following is a copy of the libpng-manual.txt file that accompanies libpng. + .SH LIBPNG.TXT libpng-manual.txt - A description on how to use and modify libpng - libpng version 1.6.34 - September 29, 2017 - Updated and distributed by Glenn Randers-Pehrson - - Copyright (c) 1998-2017 Glenn Randers-Pehrson + Copyright (c) 2018-2025 Cosmin Truta + Copyright (c) 1998-2018 Glenn Randers-Pehrson This document is released under the libpng license. For conditions of distribution and use, see the disclaimer @@ -529,9 +528,13 @@ libpng-manual.txt - A description on how to use and modify libpng Based on: - libpng versions 0.97, January 1998, through 1.6.34 - September 29, 2017 + libpng version 1.6.36, December 2018, through 1.6.47 - February 2025 + Updated and distributed by Cosmin Truta + Copyright (c) 2018-2025 Cosmin Truta + + libpng versions 0.97, January 1998, through 1.6.35 - July 2018 Updated and distributed by Glenn Randers-Pehrson - Copyright (c) 1998-2017 Glenn Randers-Pehrson + Copyright (c) 1998-2018 Glenn Randers-Pehrson libpng 1.0 beta 6 - version 0.96 - May 28, 1997 Updated and distributed by Andreas Dilger @@ -563,7 +566,6 @@ libpng-manual.txt - A description on how to use and modify libpng XIII. Detecting libpng XIV. Source code repository XV. Coding style - XVI. Y2K Compliance in libpng .SH I. Introduction @@ -584,7 +586,7 @@ file format in application programs. The PNG specification (second edition), November 2003, is available as a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2004 (E)) at -. The W3C and ISO documents have identical technical content. The PNG-1.2 specification is available at @@ -592,9 +594,9 @@ The PNG-1.2 specification is available at It is technically equivalent to the PNG specification (second edition) but has some additional material. -The PNG-1.0 specification is available as RFC 2083 +The PNG-1.0 specification is available as RFC 2083 at and as a -W3C Recommendation . +W3C Recommendation at . Some additional chunks are described in the special-purpose public chunks documents at @@ -866,18 +868,18 @@ Customizing libpng. FILE *fp = fopen(file_name, "rb"); if (!fp) { - return (ERROR); + return ERROR; } if (fread(header, 1, number, fp) != number) { - return (ERROR); + return ERROR; } - is_png = !png_sig_cmp(header, 0, number); + is_png = (png_sig_cmp(header, 0, number) == 0); if (!is_png) { - return (NOT_PNG); + return NOT_PNG; } Next, png_struct and png_info need to be allocated and initialized. In @@ -896,15 +898,14 @@ create the structure, so your application should check for that. user_error_fn, user_warning_fn); if (!png_ptr) - return (ERROR); + return ERROR; png_infop info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { - png_destroy_read_struct(&png_ptr, - (png_infopp)NULL, (png_infopp)NULL); - return (ERROR); + png_destroy_read_struct(&png_ptr, NULL, NULL); + return ERROR; } If you want to use your own memory allocation routines, @@ -936,14 +937,13 @@ free any memory. if (setjmp(png_jmpbuf(png_ptr))) { - png_destroy_read_struct(&png_ptr, &info_ptr, - &end_info); + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); fclose(fp); - return (ERROR); + return ERROR; } -Pass (png_infopp)NULL instead of &end_info if you didn't create -an end_info structure. +Pass NULL instead of &end_info if you didn't create an end_info +structure. If you would rather avoid the complexity of setjmp/longjmp issues, you can compile libpng with PNG_NO_SETJMP, in which case @@ -1013,7 +1013,7 @@ You can set up a callback function to handle any unknown chunks in the input stream. You must supply the function read_chunk_callback(png_structp png_ptr, - png_unknown_chunkp chunk); + png_unknown_chunkp chunk) { /* The unknown chunk structure contains your chunk data, along with similar data for any other @@ -1021,7 +1021,7 @@ input stream. You must supply the function png_byte name[5]; png_byte *data; - png_size_t size; + size_t size; /* Note that libpng has already taken care of the CRC handling */ @@ -1030,9 +1030,9 @@ input stream. You must supply the function unknown chunk structure, process it, and return one of the following: */ - return (\-n); /* chunk had an error */ - return (0); /* did not recognize */ - return (n); /* success */ + return \-n; /* chunk had an error */ + return 0; /* did not recognize */ + return n; /* success */ } (You can give your function another name that you like instead of @@ -1064,9 +1064,9 @@ a progress meter or the like. It's demonstrated in pngtest.c. You must supply a function void read_row_callback(png_structp png_ptr, - png_uint_32 row, int pass); + png_uint_32 row, int pass) { - /* put your code here */ + /* put your code here */ } (You can give it another name that you like instead of "read_row_callback") @@ -1394,7 +1394,7 @@ described below (the latter being the two common names for associated alpha color channels). Note that PNG files always contain non-associated color channels; png_set_alpha_mode() with one of the modes causes the decoder to convert the pixels to an associated form before returning them to your -application. +application. Since it is not necessary to perform arithmetic on opaque color values so long as they are not to be resampled and are in the final color space it is @@ -1521,7 +1521,7 @@ chunks to be assumed to be encoded using sRGB. png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); In this case the output is assumed to be something like an sRGB conformant -display preceeded by a power-law lookup table of power 1.45. This is how +display preceded by a power-law lookup table of power 1.45. This is how early Mac systems behaved. png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR); @@ -1573,7 +1573,7 @@ faster.) When the default gamma of PNG files doesn't match the output gamma. If you have PNG files with no gamma information png_set_alpha_mode allows -you to provide a default gamma, but it also sets the ouput gamma to the +you to provide a default gamma, but it also sets the output gamma to the matching value. If you know your PNG files have a gamma that doesn't match the output you can take advantage of the fact that png_set_alpha_mode always sets the output gamma but only sets the PNG @@ -1697,22 +1697,22 @@ where row_pointers is an array of pointers to the pixel data for each row: If you know your image size and pixel size ahead of time, you can allocate row_pointers prior to calling png_read_png() with - if (height > PNG_UINT_32_MAX/(sizeof (png_byte))) - png_error (png_ptr, + if (height > PNG_UINT_32_MAX / (sizeof (png_bytep))) + png_error(png_ptr, "Image is too tall to process in memory"); - if (width > PNG_UINT_32_MAX/pixel_size) - png_error (png_ptr, + if (width > PNG_UINT_32_MAX / pixel_size) + png_error(png_ptr, "Image is too wide to process in memory"); row_pointers = png_malloc(png_ptr, height*(sizeof (png_bytep))); - for (int i=0; i PNG_SIZE_MAX/(width*pixel_size)) { - png_error(png_ptr,"image_data buffer would be too large"); - } + if (height > PNG_SIZE_MAX/(width*pixel_size)) + png_error(png_ptr, "image_data buffer would be too large"); - png_bytep buffer=png_malloc(png_ptr,height*width*pixel_size); + png_bytep buffer = png_malloc(png_ptr, + height*width*pixel_size); - for (int i=0; i= 10504 png_set_scale_16(png_ptr); #else png_set_strip_16(png_ptr); #endif + } (The more accurate "png_set_scale_16()" API became available in libpng version 1.5.4). @@ -2309,7 +2310,7 @@ the information. If, instead, you want to convert the image to an opaque version with no alpha channel use png_set_background; see below. As of libpng version 1.5.2, almost all useful expansions are supported, the -major ommissions are conversion of grayscale to indexed images (which can be +major omissions are conversion of grayscale to indexed images (which can be done trivially in the application) and conversion of indexed to grayscale (which can be done by a trivial manipulation of the palette.) @@ -2418,7 +2419,7 @@ Note that png_set_filler() does not change the color type. If you want to do that, you can add a true alpha channel with if (color_type == PNG_COLOR_TYPE_RGB || - color_type == PNG_COLOR_TYPE_GRAY) + color_type == PNG_COLOR_TYPE_GRAY) png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER); where "filler" contains the alpha value to assign to each pixel. @@ -2443,7 +2444,7 @@ with alpha. if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) png_set_rgb_to_gray(png_ptr, error_action, - double red_weight, double green_weight); + (double)red_weight, (double)green_weight); error_action = 1: silently do the conversion @@ -2466,8 +2467,8 @@ In the corresponding fixed point API the red_weight and green_weight values are simply scaled by 100,000: png_set_rgb_to_gray(png_ptr, error_action, - png_fixed_point red_weight, - png_fixed_point green_weight); + (png_fixed_point)red_weight, + (png_fixed_point)green_weight); If you have set error_action = 1 or 2, you can later check whether the image really was gray, after processing @@ -2703,9 +2704,8 @@ do your own check for number_of_rows*width*pixel_size if you are using a multiple-row buffer: /* Guard against integer overflow */ - if (number_of_rows > PNG_SIZE_MAX/(width*pixel_size)) { - png_error(png_ptr,"image_data buffer would be too large"); - } + if (number_of_rows > PNG_SIZE_MAX/(width*pixel_size)) + png_error(png_ptr, "image_data buffer would be too large"); Remember: Before you call png_read_update_info(), the png_get_*() functions return the values corresponding to the original PNG image. @@ -2925,12 +2925,11 @@ separate. if (!end_info) { - png_destroy_read_struct(&png_ptr, &info_ptr, - (png_infopp)NULL); - return (ERROR); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + return ERROR; } - png_read_end(png_ptr, end_info); + png_read_end(png_ptr, end_info); If you are not interested, you should still call png_read_end() but you can pass NULL, avoiding the need to create an end_info structure. @@ -2938,7 +2937,7 @@ If you do this, libpng will not process any chunks after IDAT other than skipping over them and perhaps (depending on whether you have called png_set_crc_action) checking their CRCs while looking for the IEND chunk. - png_read_end(png_ptr, (png_infop)NULL); + png_read_end(png_ptr, NULL); If you don't call png_read_end(), then your file pointer will be left pointing to the first chunk after the last IDAT, which is probably @@ -2947,13 +2946,11 @@ the PNG datastream. When you are done, you can free all memory allocated by libpng like this: - png_destroy_read_struct(&png_ptr, &info_ptr, - &end_info); + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); or, if you didn't create an end_info structure, - png_destroy_read_struct(&png_ptr, &info_ptr, - (png_infopp)NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); It is also possible to individually free the info_ptr members that point to libpng-allocated storage with the following function: @@ -3067,22 +3064,20 @@ png_infop info_ptr; user_error_fn, user_warning_fn); if (!png_ptr) - return (ERROR); + return ERROR; info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { - png_destroy_read_struct(&png_ptr, - (png_infopp)NULL, (png_infopp)NULL); - return (ERROR); + png_destroy_read_struct(&png_ptr, NULL, NULL); + return ERROR; } if (setjmp(png_jmpbuf(png_ptr))) { - png_destroy_read_struct(&png_ptr, &info_ptr, - (png_infopp)NULL); - return (ERROR); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + return ERROR; } /* This one's new. You can provide functions @@ -3114,9 +3109,8 @@ png_infop info_ptr; { if (setjmp(png_jmpbuf(png_ptr))) { - png_destroy_read_struct(&png_ptr, &info_ptr, - (png_infopp)NULL); - return (ERROR); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + return ERROR; } /* This one's new also. Simply give it a chunk @@ -3260,7 +3254,7 @@ custom writing functions. See the discussion under Customizing libpng. FILE *fp = fopen(file_name, "wb"); if (!fp) - return (ERROR); + return ERROR; Next, png_struct and png_info need to be allocated and initialized. As these can be both relatively large, you may not want to store these @@ -3275,14 +3269,13 @@ both "png_ptr"; you can call them anything you like, such as user_error_fn, user_warning_fn); if (!png_ptr) - return (ERROR); + return ERROR; png_infop info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { - png_destroy_write_struct(&png_ptr, - (png_infopp)NULL); - return (ERROR); + png_destroy_write_struct(&png_ptr, NULL); + return ERROR; } If you want to use your own memory allocation routines, @@ -3307,9 +3300,9 @@ section below for more information on the libpng error handling. if (setjmp(png_jmpbuf(png_ptr))) { - png_destroy_write_struct(&png_ptr, &info_ptr); + png_destroy_write_struct(&png_ptr, &info_ptr); fclose(fp); - return (ERROR); + return ERROR; } ... return; @@ -3361,9 +3354,9 @@ a progress meter or the like. It's demonstrated in pngtest.c. You must supply a function void write_row_callback(png_structp png_ptr, png_uint_32 row, - int pass); + int pass) { - /* put your code here */ + /* put your code here */ } (You can give it another name that you like instead of "write_row_callback") @@ -3633,8 +3626,8 @@ width, height, bit_depth, and color_type must be the same in each call. png_set_eXIf_1(png_ptr, info_ptr, num_exif, exif); - exif - Exif profile (array of - png_byte) (PNG_INFO_eXIf) + exif - Exif profile (array of png_byte) + (PNG_INFO_eXIf) png_set_hIST(png_ptr, info_ptr, hist); @@ -3644,12 +3637,12 @@ width, height, bit_depth, and color_type must be the same in each call. png_set_tIME(png_ptr, info_ptr, mod_time); mod_time - time image was last modified - (PNG_VALID_tIME) + (PNG_INFO_tIME) png_set_bKGD(png_ptr, info_ptr, background); background - background color (of type - png_color_16p) (PNG_VALID_bKGD) + png_color_16p) (PNG_INFO_bKGD) png_set_text(png_ptr, info_ptr, text_ptr, num_text); @@ -4297,7 +4290,7 @@ in-memory bitmap formats or to be written from the same formats. If these formats do not accommodate your needs then you can, and should, use the more sophisticated APIs above - these support a wide variety of in-memory formats and a wide variety of sophisticated transformations to those formats as well -as a wide variety of APIs to manipulate ancilliary information. +as a wide variety of APIs to manipulate ancillary information. To read a PNG file using the simplified API: @@ -4573,7 +4566,7 @@ Flags containing additional information about the image are held in the 'flags' field of png_image. PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB == 0x01 - This indicates the the RGB values of the in-memory bitmap do not + This indicates that the RGB values of the in-memory bitmap do not correspond to the red, green and blue end-points defined by sRGB. PNG_IMAGE_FLAG_FAST == 0x02 @@ -4620,7 +4613,7 @@ READ APIs The PNG header is read from the stdio FILE object. int png_image_begin_read_from_memory(png_imagep image, - png_const_voidp memory, png_size_t size) + png_const_voidp memory, size_t size) The PNG header is read from the given memory buffer. @@ -4735,7 +4728,7 @@ png_create_read_struct_2() or png_create_write_struct_2() to register your own functions as described above. These functions also provide a void pointer that can be retrieved via - mem_ptr=png_get_mem_ptr(png_ptr); + mem_ptr = png_get_mem_ptr(png_ptr); Your replacement memory functions must have prototypes as follows: @@ -4773,10 +4766,10 @@ png_get_io_ptr(). For example: The replacement I/O functions must have prototypes as follows: void user_read_data(png_structp png_ptr, - png_bytep data, png_size_t length); + png_bytep data, size_t length); void user_write_data(png_structp png_ptr, - png_bytep data, png_size_t length); + png_bytep data, size_t length); void user_flush_data(png_structp png_ptr); @@ -5032,14 +5025,14 @@ When PNG_DEBUG is defined but is zero, the macros aren't defined, but you can still use PNG_DEBUG to control your own debugging: #ifdef PNG_DEBUG - fprintf(stderr, ... + fprintf(stderr, ...); #endif When PNG_DEBUG = 1, the macros are defined, but only png_debug statements having level = 0 will be printed. There aren't any such statements in this version of libpng, but if you insert some they will be printed. -.SH VII. MNG support +.SH VII. MNG support The MNG specification (available at http://www.libpng.org/pub/mng) allows certain extensions to PNG for PNG images that are embedded in MNG datastreams. @@ -5066,7 +5059,7 @@ or any other MNG chunks; your application must provide its own support for them. You may wish to consider using libmng (available at https://www.libmng.com/) instead. -.SH VIII. Changes to Libpng from version 0.88 +.SH VIII. Changes to Libpng from version 0.88 It should be noted that versions of libpng later than 0.96 are not distributed by the original libpng author, Guy Schalnat, nor by @@ -5121,7 +5114,7 @@ application: png_uint_32 application_vn = PNG_LIBPNG_VER; -.SH IX. Changes to Libpng from version 1.0.x to 1.2.x +.SH IX. Changes to Libpng from version 1.0.x to 1.2.x Support for user memory management was enabled by default. To accomplish this, the functions png_create_read_struct_2(), @@ -5209,7 +5202,7 @@ deprecated since libpng-1.0.16 and libpng-1.2.6. The function png_check_sig(sig, num) was replaced with - !png_sig_cmp(sig, 0, num) + png_sig_cmp(sig, 0, num) == 0 It has been deprecated since libpng-0.90. The function @@ -5218,7 +5211,7 @@ which also expands tRNS to alpha was replaced with png_set_expand_gray_1_2_4_to_8() which does not. It has been deprecated since libpng-1.0.18 and 1.2.9. -.SH X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x +.SH X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x Private libpng prototypes and macro definitions were moved from png.h and pngconf.h into a new pngpriv.h header file. @@ -5273,8 +5266,8 @@ png_get_mmx_bitdepth_threshold(), png_get_mmx_rowbytes_threshold(), png_set_asm_flags(), and png_mmx_supported() We removed the obsolete png_check_sig(), png_memcpy_check(), and -png_memset_check() functions. Instead use !png_sig_cmp(), memcpy(), -and memset(), respectively. +png_memset_check() functions. Instead use png_sig_cmp() == 0, +memcpy(), and memset(), respectively. The function png_set_gray_1_2_4_to_8() was removed. It has been deprecated since libpng-1.0.18 and 1.2.9, when it was replaced with @@ -5302,7 +5295,7 @@ behavior in case the application runs out of memory part-way through the process. We changed the prototypes of png_get_compression_buffer_size() and -png_set_compression_buffer_size() to work with png_size_t instead of +png_set_compression_buffer_size() to work with size_t instead of png_uint_32. Support for numbered error messages was removed by default, since we @@ -5328,7 +5321,7 @@ was renamed to PNG_READ_QUANTIZE_SUPPORTED. We removed the trailing '.' from the warning and error messages. -.SH XI. Changes to Libpng from version 1.4.x to 1.5.x +.SH XI. Changes to Libpng from version 1.4.x to 1.5.x From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the function) incorrectly returned a value of type png_uint_32. @@ -5391,7 +5384,7 @@ to png_bytepp, and in png_set_iCCP, from png_charp to png_const_bytep. There are changes of form in png.h, including new and changed macros to declare parts of the API. Some API functions with arguments that are pointers to data not modified within the function have been corrected to -declare these arguments with PNG_CONST. +declare these arguments with const. Much of the internal use of C macros to control the library build has also changed and some of this is visible in the exported header files, in @@ -5586,7 +5579,7 @@ even though the default is to use the macros - this allows applications to choose at app buildtime whether or not to use macros (previously impossible because the functions weren't in the default build.) -.SH XII. Changes to Libpng from version 1.5.x to 1.6.x +.SH XII. Changes to Libpng from version 1.5.x to 1.6.x A "simplified API" has been added (see documentation in png.h and a simple example in contrib/examples/pngtopng.c). The new publicly visible API @@ -5699,7 +5692,7 @@ a pre-existing bug where the per-chunk 'keep' setting is ignored, and makes it possible to skip IDAT chunks in the sequential reader. The machine-generated configure files are no longer included in branches -libpng16 and later of the GIT repository. They continue to be included +libpng17 and later of the GIT repository. They continue to be included in the tarball releases, however. Libpng-1.6.0 through 1.6.2 used the CMF bytes at the beginning of the IDAT @@ -5749,14 +5742,14 @@ attempt to decode the Exif profile; it simply returns a byte array containing the profile to the calling application which must do its own decoding. -.SH XIII. Detecting libpng +.SH XIII. Detecting libpng The png_get_io_ptr() function has been present since libpng-0.88, has never changed, and is unaffected by conditional compilation macros. It is the best choice for use in configure scripts for detecting the presence of any libpng version since 0.88. In an autoconf "configure.in" you could use - AC_CHECK_LIB(png, png_get_io_ptr, ... + AC_CHECK_LIB(png, png_get_io_ptr, ...) .SH XV. Source code repository @@ -5765,28 +5758,27 @@ control. The git repository was built from old libpng-x.y.z.tar.gz files going back to version 0.70. You can access the git repository (read only) at - https://github.com/glennrp/libpng or + https://github.com/pnggroup/libpng or https://git.code.sf.net/p/libpng/code.git or you can browse it with a web browser at - https://github.com/glennrp/libpng or + https://github.com/pnggroup/libpng or https://sourceforge.net/p/libpng/code/ci/libpng16/tree/ -Patches can be sent to glennrp at users.sourceforge.net or to -png-mng-implement at lists.sourceforge.net or you can upload them to -the libpng bug tracker at +Patches can be sent to png-mng-implement at lists.sourceforge.net or +uploaded to the libpng bug tracker at https://libpng.sourceforge.io/ or as a "pull request" to - https://github.com/glennrp/libpng/pulls + https://github.com/pnggroup/libpng/pulls We also accept patches built from the tar or zip distributions, and -simple verbal discriptions of bug fixes, reported either to the +simple verbal descriptions of bug fixes, reported either to the SourceForge bug tracker, to the png-mng-implement at lists.sf.net -mailing list, as github issues, or directly to glennrp. +mailing list, as github issues. .SH XV. Coding style @@ -5807,7 +5799,7 @@ braces on separate lines: The braces can be omitted from simple one-line actions: if (condition) - return (0); + return 0; We use 3-space indentation, except for continued statements which are usually indented the same as the first line of the statement @@ -5926,61 +5918,6 @@ Lines do not exceed 80 characters. Other rules can be inferred by inspecting the libpng source. -.SH XVI. Y2K Compliance in libpng - -Since the PNG Development group is an ad-hoc body, we can't make -an official declaration. - -This is your unofficial assurance that libpng from version 0.71 and -upward through 1.6.34 are Y2K compliant. It is my belief that earlier -versions were also Y2K compliant. - -Libpng only has two year fields. One is a 2-byte unsigned integer -that will hold years up to 65535. The other, which is deprecated, -holds the date in text format, and will hold years up to 9999. - -The integer is - "png_uint_16 year" in png_time_struct. - -The string is - "char time_buffer[29]" in png_struct. This is no longer used -in libpng-1.6.x and will be removed from libpng-1.7.0. - -There are seven time-related functions: - - png_convert_to_rfc_1123_buffer() in png.c - (formerly png_convert_to_rfc_1152() in error, and - also formerly png_convert_to_rfc_1123()) - png_convert_from_struct_tm() in pngwrite.c, called - in pngwrite.c - png_convert_from_time_t() in pngwrite.c - png_get_tIME() in pngget.c - png_handle_tIME() in pngrutil.c, called in pngread.c - png_set_tIME() in pngset.c - png_write_tIME() in pngwutil.c, called in pngwrite.c - -All appear to handle dates properly in a Y2K environment. The -png_convert_from_time_t() function calls gmtime() to convert from system -clock time, which returns (year - 1900), which we properly convert to -the full 4-digit year. There is a possibility that applications using -libpng are not passing 4-digit years into the png_convert_to_rfc_1123() -function, or that they are incorrectly passing only a 2-digit year -instead of "year - 1900" into the png_convert_from_struct_tm() function, -but this is not under our control. The libpng documentation has always -stated that it works with 4-digit years, and the APIs have been -documented as such. - -The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned -integer to hold the year, and can hold years as large as 65535. - -zlib, upon which libpng depends, is also Y2K compliant. It contains -no date-related code. - - - Glenn Randers-Pehrson - libpng maintainer - PNG Development Group - .SH NOTE Note about libpng version numbers: @@ -5991,9 +5928,9 @@ on the library has not always been consistent and straightforward. The following table summarizes matters since version 0.89c, which was the first widely used release: - source png.h png.h shared-lib - version string int version - ------- ------ ----- ---------- + source png.h png.h shared-lib + version string int version + ------- ------ ----- ---------- 0.89c "1.0 beta 3" 0.89 89 1.0.89 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] @@ -6028,61 +5965,54 @@ the first widely used release: 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) 1.0.7 1 10007 (still compatible) ... - 1.0.19 10 10019 10.so.0.19[.0] + 1.0.69 10 10069 10.so.0.69[.0] ... 1.2.59 13 10259 12.so.0.59[.0] ... + 1.4.20 14 10420 14.so.0.20[.0] + ... 1.5.30 15 10530 15.so.15.30[.0] ... - 1.6.34 16 10634 16.so.16.34[.0] - -Henceforth the source version will match the shared-library minor -and patch numbers; the shared-library major version number will be -used for changes in backward compatibility, as it is intended. The -PNG_PNGLIB_VER macro, which is not used within libpng but is available -for applications, is an unsigned integer of the form xyyzz corresponding -to the source version x.y.z (leading zeros in y and z). Beta versions -were given the previous public release number plus a letter, until -version 1.0.6j; from then on they were given the upcoming public -release number plus "betaNN" or "rcNN". + 1.6.35 16 10635 16.so.16.35[.0] + +Henceforth the source version will match the shared-library minor and +patch numbers; the shared-library major version number will be used for +changes in backward compatibility, as it is intended. +The PNG_PNGLIB_VER macro, which is not used within libpng but is +available for applications, is an unsigned integer of the form XYYZZ +corresponding to the source version X.Y.Z (leading zeros in Y and Z). +Beta versions were given the previous public release number plus a +letter, until version 1.0.6j; from then on they were given the upcoming +public release number plus "betaNN" or "rcNN". .SH "SEE ALSO" -.IR libpngpf(3) ", " png(5) -.LP -.IR libpng : +.BR "png"(5) .IP -https://libpng.sourceforge.io/ (follow the [DOWNLOAD] link) -http://www.libpng.org/pub/png - +The PNG (Portable Network Graphics) format specification. .LP -.IR zlib : +.B libpng .IP -(generally) at the same location as -.I libpng -or at +http://www.libpng.org/pub/png/libpng.html (canonical home page) .br -https://zlib.net/ - +https://github.com/pnggroup/libpng (canonical Git repository) +.br +https://libpng.sourceforge.io (downloadable archives) .LP -.IR PNG specification: RFC 2083 +.B zlib .IP -(generally) at the same location as -.I libpng -or at -.br -https://www.ietf.org/rfc/rfc2083.txt +https://zlib.net (canonical home page) .br -or (as a W3C Recommendation) at +https://github.com/madler/zlib (canonical Git repository) .br -https://www.w3.org/TR/REC-png.html - +A copy of zlib may also be found at the same location as libpng. .LP In the case of any inconsistency between the PNG specification and this library, the specification takes precedence. .SH AUTHORS -This man page: Glenn Randers-Pehrson - +This man page: +Initially created by Glenn Randers-Pehrson. +Maintained by Cosmin Truta. The contributing authors would like to thank all those who helped with testing, bug fixes, and patience. This wouldn't have been @@ -6090,160 +6020,14 @@ possible without all of you. Thanks to Frank J. T. Wojcik for helping with the documentation. -Libpng version 1.6.34 - September 29, 2017: +Libpng: Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc. -Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net). +Maintained by Cosmin Truta. -Supported by the PNG development group +Supported by the PNG development group. .br -png-mng-implement at lists.sf.net -(subscription required; visit -png-mng-implement at lists.sourceforge.net (subscription required; visit -https://lists.sourceforge.net/lists/listinfo/png-mng-implement -to subscribe). - -.SH NOTICES: - -This copy of the libpng notices is provided for your convenience. In case of -any discrepancy between this copy and the notices in the file png.h that is -included in the libpng distribution, the latter shall prevail. - -COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: - -If you modify libpng you may insert additional notices immediately following -this sentence. - -This code is released under the libpng license. - -libpng versions 1.0.7, July 1, 2000 through 1.6.34, September 29, 2017 are -Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are -derived from libpng-1.0.6, and are distributed according to the same -disclaimer and license as libpng-1.0.6 with the following individuals -added to the list of Contributing Authors: - - Simon-Pierre Cadieux - Eric S. Raymond - Mans Rullgard - Cosmin Truta - Gilles Vollant - James Yu - Mandar Sahastrabuddhe - Google Inc. - Vadim Barkov - -and with the following additions to the disclaimer: - - There is no warranty against interference with your enjoyment of the - library or against infringement. There is no warranty that our - efforts or the library will fulfill any of your particular purposes - or needs. This library is provided with all faults, and the entire - risk of satisfactory quality, performance, accuracy, and effort is with - the user. - -Some files in the "contrib" directory and some configure-generated -files that are distributed with libpng have other copyright owners and -are released under other open source licenses. - -libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are -Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from -libpng-0.96, and are distributed according to the same disclaimer and -license as libpng-0.96, with the following individuals added to the list -of Contributing Authors: - - Tom Lane - Glenn Randers-Pehrson - Willem van Schaik - -libpng versions 0.89, June 1996, through 0.96, May 1997, are -Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88, -and are distributed according to the same disclaimer and license as -libpng-0.88, with the following individuals added to the list of -Contributing Authors: - - John Bowler - Kevin Bracey - Sam Bushell - Magnus Holmgren - Greg Roelofs - Tom Tanner - -Some files in the "scripts" directory have other copyright owners -but are released under this license. - -libpng versions 0.5, May 1995, through 0.88, January 1996, are -Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. - -For the purposes of this copyright and license, "Contributing Authors" -is defined as the following set of individuals: - - Andreas Dilger - Dave Martindale - Guy Eric Schalnat - Paul Schmidt - Tim Wegner - -The PNG Reference Library is supplied "AS IS". The Contributing Authors -and Group 42, Inc. disclaim all warranties, expressed or implied, -including, without limitation, the warranties of merchantability and of -fitness for any purpose. The Contributing Authors and Group 42, Inc. -assume no liability for direct, indirect, incidental, special, exemplary, -or consequential damages, which may result from the use of the PNG -Reference Library, even if advised of the possibility of such damage. - -Permission is hereby granted to use, copy, modify, and distribute this -source code, or portions hereof, for any purpose, without fee, subject -to the following restrictions: - - 1. The origin of this source code must not be misrepresented. - - 2. Altered versions must be plainly marked as such and must not - be misrepresented as being the original source. - - 3. This Copyright notice may not be removed or altered from any - source or altered source distribution. - -The Contributing Authors and Group 42, Inc. specifically permit, without -fee, and encourage the use of this source code as a component to -supporting the PNG file format in commercial products. If you use this -source code in a product, acknowledgment is not required but would be -appreciated. - -END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE. - -TRADEMARK: - -The name "libpng" has not been registered by the Copyright owner -as a trademark in any jurisdiction. However, because libpng has -been distributed and maintained world-wide, continually since 1995, -the Copyright owner claims "common-law trademark protection" in any -jurisdiction where common-law trademark is recognized. - -OSI CERTIFICATION: - -Libpng is OSI Certified Open Source Software. OSI Certified Open Source is -a certification mark of the Open Source Initiative. OSI has not addressed -the additional disclaimers inserted at version 1.0.7. - -EXPORT CONTROL: - -The Copyright owner believes that the Export Control Classification -Number (ECCN) for libpng is EAR99, which means not subject to export -controls or International Traffic in Arms Regulations (ITAR) because -it is open source, publicly available software, that does not contain -any encryption software. See the EAR, paragraphs 734.3(b)(3) and -734.7(b). - -A "png_get_copyright" function is available, for convenient use in "about" -boxes and the like: - - printf("%s", png_get_copyright(NULL)); - -Also, the PNG logo (in PNG format, of course) is supplied in the -files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). - -Glenn Randers-Pehrson -glennrp at users.sourceforge.net -September 29, 2017 +png-mng-implement at lists.sourceforge.net. (Subscription is required; +visit https://lists.sourceforge.net/lists/listinfo/png-mng-implement +to subscribe.) .\" end of man page - diff --git a/vs/libpng/libpng.pc.in b/vs/libpng/libpng.pc.in index 9708e9af2be..de127d4f8ef 100644 --- a/vs/libpng/libpng.pc.in +++ b/vs/libpng/libpng.pc.in @@ -6,7 +6,7 @@ includedir=@includedir@/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@ Name: libpng Description: Loads and saves PNG files Version: @PNGLIB_VERSION@ -Requires: zlib +Requires.private: zlib Libs: -L${libdir} -lpng@PNGLIB_MAJOR@@PNGLIB_MINOR@ Libs.private: @LIBS@ Cflags: -I${includedir} diff --git a/vs/libpng/libpngpf.3 b/vs/libpng/libpngpf.3 index 8cea87a7173..9c4dda2a64d 100644 --- a/vs/libpng/libpngpf.3 +++ b/vs/libpng/libpngpf.3 @@ -1,18 +1,24 @@ -.TH LIBPNGPF 3 "April 1, 2017" +.TH LIBPNGPF 3 "February 18, 2025" .SH NAME -libpng \- Portable Network Graphics (PNG) Reference Library 1.6.34 +libpng \- Portable Network Graphics (PNG) Reference Library 1.6.47 (private functions) + .SH SYNOPSIS -\fB\fB#include \fI\fI"pngpriv.h" +\fB#include \fI"pngpriv.h" -\fB\fBAs of libpng version \fP\fI\fP\fI1.5.1\fP\fB\fP\fB, this section is no longer \fP\fI\fP\fImaintained\fP\fB\fP\fB, now that the private function prototypes are hidden in pngpriv.h and not accessible to applications. Look in pngpriv.h for the prototypes and a short description of each \fI\fIfunction. +\fBAs of libpng version \fP\fI1.5.1\fP\fB, this section is no longer +\fP\fImaintained\fP\fB, now that the private function prototypes are hidden in +\fP\fIpngpriv.h\fP\fB and not accessible to applications. Look in +\fP\fIpngpriv.h\fP\fB for the prototypes and a short description of each +function. .SH DESCRIPTION The functions previously listed here are used privately by libpng and are not available for use by applications. They are not "exported" to applications using shared libraries. -.SH SEE ALSO +.SH "SEE ALSO" .BR "png"(5), " libpng"(3), " zlib"(3), " deflate"(5), " " and " zlib"(5) -.SH AUTHOR -Glenn Randers-Pehrson + +.SH AUTHORS +Cosmin Truta, Glenn Randers-Pehrson diff --git a/vs/libpng/loongarch/.editorconfig b/vs/libpng/loongarch/.editorconfig new file mode 100644 index 00000000000..de2e98ab42c --- /dev/null +++ b/vs/libpng/loongarch/.editorconfig @@ -0,0 +1,8 @@ +# https://editorconfig.org + +root = false + +# FIXME +[*.[ch]] +max_doc_length = unset +max_line_length = unset diff --git a/vs/libpng/loongarch/filter_lsx_intrinsics.c b/vs/libpng/loongarch/filter_lsx_intrinsics.c new file mode 100644 index 00000000000..af6cc763a07 --- /dev/null +++ b/vs/libpng/loongarch/filter_lsx_intrinsics.c @@ -0,0 +1,412 @@ +/* filter_lsx_intrinsics.c - LSX optimized filter functions + * + * Copyright (c) 2021 Loongson Technology Corporation Limited + * All rights reserved. + * Copyright (c) 2018 Cosmin Truta + * Copyright (c) 2016 Glenn Randers-Pehrson + * Contributed by Jin Bo (jinbo@loongson.cn) + * + * This code is released under the libpng license. + * For conditions of distribution and use, see the disclaimer + * and license in png.h + */ + +#include "../pngpriv.h" + +#ifdef PNG_READ_SUPPORTED + +#if PNG_LOONGARCH_LSX_IMPLEMENTATION == 1 /* intrinsics code from pngpriv.h */ + +#include + +#define LSX_LD(psrc) __lsx_vld((psrc), 0) + +#define LSX_LD_2(psrc, stride, out0, out1) \ +{ \ + out0 = LSX_LD(psrc); \ + out1 = LSX_LD(psrc + stride); \ +} + +#define LSX_LD_4(psrc, stride, out0, out1, out2, out3) \ +{ \ + LSX_LD_2(psrc, stride, out0, out1); \ + LSX_LD_2(psrc + stride * 2, stride, out2, out3); \ +} + +#define LSX_ST(in, pdst) __lsx_vst(in, (pdst), 0) + +#define LSX_ST_2(in0, in1, pdst, stride) \ +{ \ + LSX_ST(in0, pdst); \ + LSX_ST(in1, pdst + stride); \ +} + +#define LSX_ST_4(in0, in1, in2, in3, pdst, stride) \ +{ \ + LSX_ST_2(in0, in1, pdst, stride); \ + LSX_ST_2(in2, in3, pdst + stride * 2, stride); \ +} + +#define LSX_ADD_B(in0, in1, out0) \ +{ \ + out0 = __lsx_vadd_b(in0, in1); \ +} + +#define LSX_ADD_B_2(in0, in1, in2, in3, out0, out1) \ +{ \ + LSX_ADD_B(in0, in1, out0); \ + LSX_ADD_B(in2, in3, out1); \ +} + +#define LSX_ADD_B_4(in0, in1, in2, in3, in4, in5, \ + in6, in7, out0, out1, out2, out3) \ +{ \ + LSX_ADD_B_2(in0, in1, in2, in3, out0, out1); \ + LSX_ADD_B_2(in4, in5, in6, in7, out2, out3); \ +} + +#define LSX_ABS_B_3(in0, in1, in2, out0, out1, out2) \ +{ \ + out0 = __lsx_vadda_h(in0, zero); \ + out1 = __lsx_vadda_h(in1, zero); \ + out2 = __lsx_vadda_h(in2, zero); \ +} + +#define LSX_ILVL_B(in_h, in_l, out0) \ +{ \ + out0 = __lsx_vilvl_b(in_h, in_l); \ +} + +#define LSX_ILVL_B_2(in0_h, in0_l, in1_h, in1_l, out0, out1) \ +{ \ + LSX_ILVL_B(in0_h, in0_l, out0); \ + LSX_ILVL_B(in1_h, in1_l, out1); \ +} + +#define LSX_HSUB_HU_BU_2(in0, in1, out0, out1) \ +{ \ + out0 = __lsx_vhsubw_hu_bu(in0, in0); \ + out1 = __lsx_vhsubw_hu_bu(in1, in1); \ +} + +#define LSX_CMP_PICK_SMALLER(in0, in1, in2, in3, in4, in5, out0) \ +{ \ + __m128i _cmph, _cmpb, _in0, _in3; \ + _cmph = __lsx_vslt_h(in1, in0); \ + _cmpb = __lsx_vpickev_b(_cmph, _cmph); \ + _in0 = __lsx_vmin_bu(in0,in1); \ + _in3 = __lsx_vbitsel_v(in3, in4, _cmpb); \ + _cmph = __lsx_vslt_h(in2, _in0); \ + _cmpb = __lsx_vpickev_b(_cmph, _cmph); \ + _in3 = __lsx_vbitsel_v(_in3, in5, _cmpb); \ + out0 = __lsx_vadd_b(out0, _in3); \ +} + +void png_read_filter_row_up_lsx(png_row_infop row_info, png_bytep row, + png_const_bytep prev_row) +{ + size_t n = row_info->rowbytes; + png_bytep rp = row; + png_const_bytep pp = prev_row; + __m128i vec_0, vec_1, vec_2, vec_3; + __m128i vec_4, vec_5, vec_6, vec_7; + + while (n >= 64) + { + LSX_LD_4(rp, 16, vec_0, vec_1, vec_2, vec_3); + LSX_LD_4(pp, 16, vec_4, vec_5, vec_6, vec_7); + pp += 64; + LSX_ADD_B_4(vec_0 ,vec_4, vec_1, vec_5, vec_2, vec_6, + vec_3, vec_7, vec_0, vec_1, vec_2, vec_3); + LSX_ST_4(vec_0, vec_1, vec_2, vec_3, rp, 16); + rp += 64; + n -= 64; + } + if (n & 63) + { + if (n >= 32) + { + LSX_LD_2(rp, 16, vec_0, vec_1); + LSX_LD_2(pp, 16, vec_2, vec_3); + pp += 32; + LSX_ADD_B_2(vec_0, vec_2, vec_1, vec_3, vec_0, vec_1); + LSX_ST_2(vec_0, vec_1, rp, 16); + rp += 32; + n -= 32; + } + if (n & 31) + { + if (n >= 16) + { + vec_0 = LSX_LD(rp); + vec_1 = LSX_LD(pp); + pp += 16; + LSX_ADD_B(vec_0, vec_1, vec_0); + LSX_ST(vec_0, rp); + rp += 16; + n -= 16; + } + if (n >= 8) + { + vec_0 = __lsx_vldrepl_d(rp, 0); + vec_1 = __lsx_vldrepl_d(pp, 0); + vec_0 = __lsx_vadd_b(vec_0, vec_1); + __lsx_vstelm_d(vec_0, rp, 0, 0); + rp += 8; + pp += 8; + n -= 8; + } + while (n--) + { + *rp = *rp + *pp++; + rp++; + } + } + } +} + +void png_read_filter_row_sub3_lsx(png_row_infop row_info, png_bytep row, + png_const_bytep prev_row) +{ + size_t n = row_info->rowbytes; + png_uint_32 tmp; + png_bytep nxt = row; + __m128i vec_0, vec_1; + + PNG_UNUSED(prev_row); + + vec_0 = __lsx_vldrepl_w(nxt, 0); + nxt += 3; + n -= 3; + + while (n >= 3) + { + vec_1 = __lsx_vldrepl_w(nxt, 0); + vec_1 = __lsx_vadd_b(vec_1, vec_0); + __lsx_vstelm_h(vec_1, nxt, 0, 0); + vec_0 = vec_1; + nxt += 2; + __lsx_vstelm_b(vec_1, nxt, 0, 2); + nxt += 1; + n -= 3; + } + + row = nxt - 3; + while (n--) + { + *nxt = *nxt + *row++; + nxt++; + } +} + +void png_read_filter_row_sub4_lsx(png_row_infop row_info, png_bytep row, + png_const_bytep prev_row) +{ + size_t n = row_info->rowbytes; + __m128i vec_0, vec_1; + + PNG_UNUSED(prev_row); + + vec_0 = __lsx_vldrepl_w(row, 0); + row += 4; + n -= 4; + + while (n >= 4) + { + vec_1 = __lsx_vldrepl_w(row, 0); + vec_1 = __lsx_vadd_b(vec_1, vec_0); + __lsx_vstelm_w(vec_1, row, 0, 0); + vec_0 = vec_1; + row += 4; + n -= 4; + } +} + +void png_read_filter_row_avg3_lsx(png_row_infop row_info, png_bytep row, + png_const_bytep prev_row) +{ + size_t n = row_info->rowbytes; + png_bytep nxt = row; + png_const_bytep prev_nxt = prev_row; + __m128i vec_0, vec_1, vec_2; + + vec_0 = __lsx_vldrepl_w(nxt, 0); + vec_1 = __lsx_vldrepl_w(prev_nxt, 0); + prev_nxt += 3; + vec_1 = __lsx_vsrli_b(vec_1, 1); + vec_1 = __lsx_vadd_b(vec_1, vec_0); + __lsx_vstelm_h(vec_1, nxt, 0, 0); + nxt += 2; + __lsx_vstelm_b(vec_1, nxt, 0, 2); + nxt += 1; + n -= 3; + + while (n >= 3) + { + vec_2 = vec_1; + vec_0 = __lsx_vldrepl_w(nxt, 0); + vec_1 = __lsx_vldrepl_w(prev_nxt, 0); + prev_nxt += 3; + + vec_1 = __lsx_vavg_bu(vec_1, vec_2); + vec_1 = __lsx_vadd_b(vec_1, vec_0); + + __lsx_vstelm_h(vec_1, nxt, 0, 0); + nxt += 2; + __lsx_vstelm_b(vec_1, nxt, 0, 2); + nxt += 1; + n -= 3; + } + + row = nxt - 3; + while (n--) + { + vec_2 = __lsx_vldrepl_b(row, 0); + row++; + vec_0 = __lsx_vldrepl_b(nxt, 0); + vec_1 = __lsx_vldrepl_b(prev_nxt, 0); + prev_nxt++; + + vec_1 = __lsx_vavg_bu(vec_1, vec_2); + vec_1 = __lsx_vadd_b(vec_1, vec_0); + + __lsx_vstelm_b(vec_1, nxt, 0, 0); + nxt++; + } +} + +void png_read_filter_row_avg4_lsx(png_row_infop row_info, png_bytep row, + png_const_bytep prev_row) +{ + size_t n = row_info->rowbytes; + __m128i vec_0, vec_1, vec_2; + + vec_0 = __lsx_vldrepl_w(row, 0); + vec_1 = __lsx_vldrepl_w(prev_row, 0); + prev_row += 4; + vec_1 = __lsx_vsrli_b(vec_1, 1); + vec_1 = __lsx_vadd_b(vec_1, vec_0); + __lsx_vstelm_w(vec_1, row, 0, 0); + row += 4; + n -= 4; + + while (n >= 4) + { + vec_2 = vec_1; + vec_0 = __lsx_vldrepl_w(row, 0); + vec_1 = __lsx_vldrepl_w(prev_row, 0); + prev_row += 4; + + vec_1 = __lsx_vavg_bu(vec_1, vec_2); + vec_1 = __lsx_vadd_b(vec_1, vec_0); + + __lsx_vstelm_w(vec_1, row, 0, 0); + row += 4; + n -= 4; + } +} + +void png_read_filter_row_paeth3_lsx(png_row_infop row_info, + png_bytep row, + png_const_bytep prev_row) +{ + size_t n = row_info->rowbytes; + png_bytep nxt = row; + png_const_bytep prev_nxt = prev_row; + __m128i vec_a, vec_b, vec_c, vec_d; + __m128i vec_pa, vec_pb, vec_pc; + __m128i zero = {0}; + + vec_a = __lsx_vldrepl_w(nxt, 0); + vec_b = __lsx_vldrepl_w(prev_nxt, 0); + prev_nxt += 3; + vec_d = __lsx_vadd_b(vec_a, vec_b); + __lsx_vstelm_h(vec_d, nxt, 0, 0); + nxt += 2; + __lsx_vstelm_b(vec_d, nxt, 0, 2); + nxt += 1; + n -= 3; + + while (n >= 3) + { + vec_a = vec_d; + vec_c = vec_b; + vec_b = __lsx_vldrepl_w(prev_nxt, 0); + prev_nxt += 3; + vec_d = __lsx_vldrepl_w(nxt, 0); + + LSX_ILVL_B_2(vec_b, vec_c, vec_a, vec_c, vec_pa, vec_pb); + LSX_HSUB_HU_BU_2(vec_pa, vec_pb, vec_pa, vec_pb); + vec_pc = __lsx_vadd_h(vec_pa, vec_pb); + LSX_ABS_B_3(vec_pa, vec_pb, vec_pc, vec_pa, vec_pb, vec_pc); + LSX_CMP_PICK_SMALLER(vec_pa, vec_pb, vec_pc, vec_a, vec_b, vec_c, vec_d); + + __lsx_vstelm_h(vec_d, nxt, 0, 0); + nxt += 2; + __lsx_vstelm_b(vec_d, nxt, 0, 2); + nxt += 1; + n -= 3; + } + + prev_row = prev_nxt - 3; + row = nxt - 3; + while (n--) + { + vec_a = __lsx_vldrepl_b(row, 0); + row++; + vec_b = __lsx_vldrepl_b(prev_nxt, 0); + prev_nxt++; + vec_c = __lsx_vldrepl_b(prev_row, 0); + prev_row++; + vec_d = __lsx_vldrepl_b(nxt, 0); + + LSX_ILVL_B_2(vec_b, vec_c, vec_a, vec_c, vec_pa, vec_pb); + LSX_HSUB_HU_BU_2(vec_pa, vec_pb, vec_pa, vec_pb); + vec_pc = __lsx_vadd_h(vec_pa, vec_pb); + LSX_ABS_B_3(vec_pa, vec_pb, vec_pc, vec_pa, vec_pb, vec_pc); + LSX_CMP_PICK_SMALLER(vec_pa, vec_pb, vec_pc, vec_a, vec_b, vec_c, vec_d); + + __lsx_vstelm_b(vec_d, nxt, 0, 0); + nxt++; + } +} + +void png_read_filter_row_paeth4_lsx(png_row_infop row_info, + png_bytep row, + png_const_bytep prev_row) +{ + size_t n = row_info->rowbytes; + __m128i vec_a, vec_b, vec_c, vec_d; + __m128i vec_pa, vec_pb, vec_pc; + __m128i zero = {0}; + + vec_a = __lsx_vldrepl_w(row, 0); + vec_b = __lsx_vldrepl_w(prev_row, 0); + prev_row += 4; + vec_d = __lsx_vadd_b(vec_a, vec_b); + __lsx_vstelm_w(vec_d, row, 0, 0); + row += 4; + n -= 4; + + while (n >= 4) + { + vec_a = vec_d; + vec_c = vec_b; + vec_b = __lsx_vldrepl_w(prev_row, 0); + prev_row += 4; + vec_d = __lsx_vldrepl_w(row, 0); + + LSX_ILVL_B_2(vec_b, vec_c, vec_a, vec_c, vec_pa, vec_pb); + LSX_HSUB_HU_BU_2(vec_pa, vec_pb, vec_pa, vec_pb); + vec_pc = __lsx_vadd_h(vec_pa, vec_pb); + LSX_ABS_B_3(vec_pa, vec_pb, vec_pc, vec_pa, vec_pb, vec_pc); + LSX_CMP_PICK_SMALLER(vec_pa, vec_pb, vec_pc, vec_a, vec_b, vec_c, vec_d); + + __lsx_vstelm_w(vec_d, row, 0, 0); + row += 4; + n -= 4; + } +} + +#endif /* PNG_LOONGARCH_LSX_IMPLEMENTATION == 1 (intrinsics) */ +#endif /* PNG_READ_SUPPORTED */ diff --git a/vs/libpng/loongarch/loongarch_lsx_init.c b/vs/libpng/loongarch/loongarch_lsx_init.c new file mode 100644 index 00000000000..2c80fe81b68 --- /dev/null +++ b/vs/libpng/loongarch/loongarch_lsx_init.c @@ -0,0 +1,65 @@ +/* loongarch_lsx_init.c - LSX optimized filter functions + * + * Copyright (c) 2021 Loongson Technology Corporation Limited + * All rights reserved. + * Contributed by Jin Bo + * + * This code is released under the libpng license. + * For conditions of distribution and use, see the disclaimer + * and license in png.h + */ + +#include "../pngpriv.h" + +#ifdef PNG_READ_SUPPORTED +#if PNG_LOONGARCH_LSX_IMPLEMENTATION == 1 + +#include + +#define LA_HWCAP_LSX (1<<4) +static int png_has_lsx(void) +{ + int flags = 0; + int flag = (int)getauxval(AT_HWCAP); + + if (flag & LA_HWCAP_LSX) + return 1; + + return 0; +} + +void +png_init_filter_functions_lsx(png_structp pp, unsigned int bpp) +{ + /* IMPORTANT: any new external functions used here must be declared using + * PNG_INTERNAL_FUNCTION in ../pngpriv.h. This is required so that the + * 'prefix' option to configure works: + * + * ./configure --with-libpng-prefix=foobar_ + * + * Verify you have got this right by running the above command, doing a build + * and examining pngprefix.h; it must contain a #define for every external + * function you add. (Notice that this happens automatically for the + * initialization function.) + */ + + if (png_has_lsx()) + { + pp->read_filter[PNG_FILTER_VALUE_UP-1] = png_read_filter_row_up_lsx; + if (bpp == 3) + { + pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_lsx; + pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_lsx; + pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth3_lsx; + } + else if (bpp == 4) + { + pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_lsx; + pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_lsx; + pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth4_lsx; + } + } +} + +#endif /* PNG_LOONGARCH_LSX_IMPLEMENTATION == 1 */ +#endif /* PNG_READ_SUPPORTED */ diff --git a/vs/libpng/ltmain.sh b/vs/libpng/ltmain.sh index 0f0a2da3f9d..3e6a3db3a5a 100755 --- a/vs/libpng/ltmain.sh +++ b/vs/libpng/ltmain.sh @@ -1,12 +1,12 @@ -#! /bin/sh +#! /usr/bin/env sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in -## by inline-source v2014-01-03.01 +## by inline-source v2019-02-19.15 -# libtool (GNU libtool) 2.4.6 +# libtool (GNU libtool) 2.5.4 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 -# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# Copyright (C) 1996-2019, 2021-2024 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -31,8 +31,8 @@ PROGRAM=libtool PACKAGE=libtool -VERSION=2.4.6 -package_revision=2.4.6 +VERSION=2.5.4 +package_revision=2.5.4 ## ------ ## @@ -64,34 +64,25 @@ package_revision=2.4.6 # libraries, which are installed to $pkgauxdir. # Set a version string for this script. -scriptversion=2015-01-20.17; # UTC +scriptversion=2019-02-19.15; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 -# Copyright (C) 2004-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. - -# As a special exception to the GNU General Public License, if you distribute -# this file as part of a program or library that is built using GNU Libtool, -# you may include this file under the same distribution terms that you use -# for the rest of that program. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# This is free software. There is NO warranty; not even for +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Copyright (C) 2004-2019, 2021, 2023-2024 Bootstrap Authors +# +# This file is dual licensed under the terms of the MIT license +# , and GPL version 2 or later +# . You must apply one of +# these licenses when using or redistributing this software or any of +# the files within it. See the URLs above, or the file `LICENSE` +# included in the Bootstrap distribution for the full license texts. -# Please report bugs or propose patches to gary@gnu.org. +# Please report bugs or propose patches to: +# ## ------ ## @@ -139,9 +130,12 @@ do _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH +# These NLS vars are set unconditionally (bootstrap issue #24). Unset those +# in case the environment reset is needed later and the $save_* variant is not +# defined (see the code above). +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL # Make sure IFS has a sensible default sp=' ' @@ -149,7 +143,7 @@ nl=' ' IFS="$sp $nl" -# There are apparently some retarded systems that use ';' as a PATH separator! +# There are apparently some systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { @@ -159,6 +153,26 @@ if test "${PATH_SEPARATOR+set}" != set; then fi +# func_unset VAR +# -------------- +# Portably unset VAR. +# In some shells, an 'unset VAR' statement leaves a non-zero return +# status if VAR is already unset, which might be problematic if the +# statement is used at the end of a function (thus poisoning its return +# value) or when 'set -e' is active (causing even a spurious abort of +# the script in this case). +func_unset () +{ + { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } +} + + +# Make sure CDPATH doesn't cause `cd` commands to output the target dir. +func_unset CDPATH + +# Make sure ${,E,F}GREP behave sanely. +func_unset GREP_OPTIONS + ## ------------------------- ## ## Locate command utilities. ## @@ -259,7 +273,7 @@ test -z "$SED" && { rm -f conftest.in conftest.tmp conftest.nl conftest.out } - func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" rm -f conftest.sed SED=$func_path_progs_result } @@ -295,7 +309,7 @@ test -z "$GREP" && { rm -f conftest.in conftest.tmp conftest.nl conftest.out } - func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" GREP=$func_path_progs_result } @@ -360,6 +374,35 @@ sed_double_backslash="\ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" +# require_check_ifs_backslash +# --------------------------- +# Check if we can use backslash as IFS='\' separator, and set +# $check_ifs_backshlash_broken to ':' or 'false'. +require_check_ifs_backslash=func_require_check_ifs_backslash +func_require_check_ifs_backslash () +{ + _G_save_IFS=$IFS + IFS='\' + _G_check_ifs_backshlash='a\\b' + for _G_i in $_G_check_ifs_backshlash + do + case $_G_i in + a) + check_ifs_backshlash_broken=false + ;; + '') + break + ;; + *) + check_ifs_backshlash_broken=: + break + ;; + esac + done + IFS=$_G_save_IFS + require_check_ifs_backslash=: +} + ## ----------------- ## ## Global variables. ## @@ -546,7 +589,7 @@ func_require_term_colors () # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is - # useable or anything else if it does not work. + # usable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes @@ -580,16 +623,16 @@ if test yes = "$_G_HAVE_PLUSEQ_OP"; then { $debug_cmd - func_quote_for_eval "$2" - eval "$1+=\\ \$func_quote_for_eval_result" + func_quote_arg pretty "$2" + eval "$1+=\\ \$func_quote_arg_result" }' else func_append_quoted () { $debug_cmd - func_quote_for_eval "$2" - eval "$1=\$$1\\ \$func_quote_for_eval_result" + func_quote_arg pretty "$2" + eval "$1=\$$1\\ \$func_quote_arg_result" } fi @@ -696,7 +739,7 @@ eval 'func_dirname () # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. -# value retuned in "$func_basename_result" +# value returned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () @@ -854,7 +897,7 @@ func_mkdir_p () # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. + # list in case some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done @@ -1091,85 +1134,203 @@ func_relative_path () } -# func_quote_for_eval ARG... -# -------------------------- -# Aesthetically quote ARGs to be evaled later. -# This function returns two values: -# i) func_quote_for_eval_result -# double-quoted, suitable for a subsequent eval -# ii) func_quote_for_eval_unquoted_result -# has all characters that are still active within double -# quotes backslashified. -func_quote_for_eval () +# func_quote_portable EVAL ARG +# ---------------------------- +# Internal function to portably implement func_quote_arg. Note that we still +# keep attention to performance here so we as much as possible try to avoid +# calling sed binary (so far O(N) complexity as long as func_append is O(1)). +func_quote_portable () { $debug_cmd - func_quote_for_eval_unquoted_result= - func_quote_for_eval_result= - while test 0 -lt $#; do - case $1 in - *[\\\`\"\$]*) - _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; - *) - _G_unquoted_arg=$1 ;; - esac - if test -n "$func_quote_for_eval_unquoted_result"; then - func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" - else - func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + $require_check_ifs_backslash + + func_quote_portable_result=$2 + + # one-time-loop (easy break) + while true + do + if $1; then + func_quote_portable_result=`$ECHO "$2" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` + break fi - case $_G_unquoted_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and variable expansion - # for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_quoted_arg=\"$_G_unquoted_arg\" + # Quote for eval. + case $func_quote_portable_result in + *[\\\`\"\$]*) + # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string + # contains the shell wildcard characters. + case $check_ifs_backshlash_broken$func_quote_portable_result in + :*|*[\[\*\?]*) + func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ + | $SED "$sed_quote_subst"` + break + ;; + esac + + func_quote_portable_old_IFS=$IFS + for _G_char in '\' '`' '"' '$' + do + # STATE($1) PREV($2) SEPARATOR($3) + set start "" "" + func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy + IFS=$_G_char + for _G_part in $func_quote_portable_result + do + case $1 in + quote) + func_append func_quote_portable_result "$3$2" + set quote "$_G_part" "\\$_G_char" + ;; + start) + set first "" "" + func_quote_portable_result= + ;; + first) + set quote "$_G_part" "" + ;; + esac + done + done + IFS=$func_quote_portable_old_IFS ;; - *) - _G_quoted_arg=$_G_unquoted_arg - ;; + *) ;; esac - - if test -n "$func_quote_for_eval_result"; then - func_append func_quote_for_eval_result " $_G_quoted_arg" - else - func_append func_quote_for_eval_result "$_G_quoted_arg" - fi - shift + break done + + func_quote_portable_unquoted_result=$func_quote_portable_result + case $func_quote_portable_result in + # double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # many bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_portable_result=\"$func_quote_portable_result\" + ;; + esac } -# func_quote_for_expand ARG -# ------------------------- -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - $debug_cmd +# func_quotefast_eval ARG +# ----------------------- +# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', +# but optimized for speed. Result is stored in $func_quotefast_eval. +if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then + printf -v _GL_test_printf_tilde %q '~' + if test '\~' = "$_GL_test_printf_tilde"; then + func_quotefast_eval () + { + printf -v func_quotefast_eval_result %q "$1" + } + else + # Broken older Bash implementations. Make those faster too if possible. + func_quotefast_eval () + { + case $1 in + '~'*) + func_quote_portable false "$1" + func_quotefast_eval_result=$func_quote_portable_result + ;; + *) + printf -v func_quotefast_eval_result %q "$1" + ;; + esac + } + fi +else + func_quotefast_eval () + { + func_quote_portable false "$1" + func_quotefast_eval_result=$func_quote_portable_result + } +fi - case $1 in - *[\\\`\"]*) - _G_arg=`$ECHO "$1" | $SED \ - -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; - *) - _G_arg=$1 ;; + +# func_quote_arg MODEs ARG +# ------------------------ +# Quote one ARG to be evaled later. MODEs argument may contain zero or more +# specifiers listed below separated by ',' character. This function returns two +# values: +# i) func_quote_arg_result +# double-quoted (when needed), suitable for a subsequent eval +# ii) func_quote_arg_unquoted_result +# has all characters that are still active within double +# quotes backslashified. Available only if 'unquoted' is specified. +# +# Available modes: +# ---------------- +# 'eval' (default) +# - escape shell special characters +# 'expand' +# - the same as 'eval'; but do not quote variable references +# 'pretty' +# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might +# be used later in func_quote to get output like: 'echo "a b"' instead +# of 'echo a\ b'. This is slower than default on some shells. +# 'unquoted' +# - produce also $func_quote_arg_unquoted_result which does not contain +# wrapping double-quotes. +# +# Examples for 'func_quote_arg pretty,unquoted string': +# +# string | *_result | *_unquoted_result +# ------------+-----------------------+------------------- +# " | \" | \" +# a b | "a b" | a b +# "a b" | "\"a b\"" | \"a b\" +# * | "*" | * +# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" +# +# Examples for 'func_quote_arg pretty,unquoted,expand string': +# +# string | *_result | *_unquoted_result +# --------------+---------------------+-------------------- +# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" +func_quote_arg () +{ + _G_quote_expand=false + case ,$1, in + *,expand,*) + _G_quote_expand=: + ;; esac - case $_G_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_arg=\"$_G_arg\" + case ,$1, in + *,pretty,*|*,expand,*|*,unquoted,*) + func_quote_portable $_G_quote_expand "$2" + func_quote_arg_result=$func_quote_portable_result + func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result + ;; + *) + # Faster quote-for-eval for some shells. + func_quotefast_eval "$2" + func_quote_arg_result=$func_quotefast_eval_result ;; esac +} - func_quote_for_expand_result=$_G_arg + +# func_quote MODEs ARGs... +# ------------------------ +# Quote all ARGs to be evaled later and join them into single command. See +# func_quote_arg's description for more info. +func_quote () +{ + $debug_cmd + _G_func_quote_mode=$1 ; shift + func_quote_result= + while test 0 -lt $#; do + func_quote_arg "$_G_func_quote_mode" "$1" + if test -n "$func_quote_result"; then + func_append func_quote_result " $func_quote_arg_result" + else + func_append func_quote_result "$func_quote_arg_result" + fi + shift + done } @@ -1215,8 +1376,8 @@ func_show_eval () _G_cmd=$1 _G_fail_exp=${2-':'} - func_quote_for_expand "$_G_cmd" - eval "func_notquiet $func_quote_for_expand_result" + func_quote_arg pretty,expand "$_G_cmd" + eval "func_notquiet $func_quote_arg_result" $opt_dry_run || { eval "$_G_cmd" @@ -1241,8 +1402,8 @@ func_show_eval_locale () _G_fail_exp=${2-':'} $opt_quiet || { - func_quote_for_expand "$_G_cmd" - eval "func_echo $func_quote_for_expand_result" + func_quote_arg expand,pretty "$_G_cmd" + eval "func_echo $func_quote_arg_result" } $opt_dry_run || { @@ -1369,30 +1530,26 @@ func_lt_ver () # End: #! /bin/sh -# Set a version string for this script. -scriptversion=2014-01-07.03; # UTC - # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 -# Copyright (C) 2010-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# This is free software. There is NO warranty; not even for +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Copyright (C) 2010-2019, 2021, 2023-2024 Bootstrap Authors +# +# This file is dual licensed under the terms of the MIT license +# , and GPL version 2 or later +# . You must apply one of +# these licenses when using or redistributing this software or any of +# the files within it. See the URLs above, or the file `LICENSE` +# included in the Bootstrap distribution for the full license texts. -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Please report bugs or propose patches to: +# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Please report bugs or propose patches to gary@gnu.org. +# Set a version string for this script. +scriptversion=2019-02-19.15; # UTC ## ------ ## @@ -1415,7 +1572,7 @@ scriptversion=2014-01-07.03; # UTC # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file -# starting with '# Written by ' and ending with '# warranty; '. +# starting with '# Written by ' and ending with '# Copyright'. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the @@ -1427,7 +1584,7 @@ scriptversion=2014-01-07.03; # UTC # to display verbose messages only when your user has specified # '--verbose'. # -# After sourcing this file, you can plug processing for additional +# After sourcing this file, you can plug in processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. @@ -1476,8 +1633,8 @@ fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## # This section contains functions for adding, removing, and running hooks -# to the main code. A hook is just a named list of of function, that can -# be run in order later on. +# in the main code. A hook is just a list of function names that can be +# run in order later on. # func_hookable FUNC_NAME # ----------------------- @@ -1510,7 +1667,8 @@ func_add_hook () # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ -# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +# Remove HOOK_FUNC from the list of hook functions to be called by +# FUNC_NAME. func_remove_hook () { $debug_cmd @@ -1519,10 +1677,28 @@ func_remove_hook () } +# func_propagate_result FUNC_NAME_A FUNC_NAME_B +# --------------------------------------------- +# If the *_result variable of FUNC_NAME_A _is set_, assign its value to +# *_result variable of FUNC_NAME_B. +func_propagate_result () +{ + $debug_cmd + + func_propagate_result_result=: + if eval "test \"\${${1}_result+set}\" = set" + then + eval "${2}_result=\$${1}_result" + else + func_propagate_result_result=false + fi +} + + # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. -# It is assumed that the list of hook functions contains nothing more +# It's assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. @@ -1532,22 +1708,19 @@ func_run_hooks () case " $hookable_fns " in *" $1 "*) ;; - *) func_fatal_error "'$1' does not support hook funcions.n" ;; + *) func_fatal_error "'$1' does not support hook functions." ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do - eval $_G_hook '"$@"' - - # store returned options list back into positional - # parameters for next 'cmd' execution. - eval _G_hook_result=\$${_G_hook}_result - eval set dummy "$_G_hook_result"; shift + func_unset "${_G_hook}_result" + eval $_G_hook '${1+"$@"}' + func_propagate_result $_G_hook func_run_hooks + if $func_propagate_result_result; then + eval set dummy "$func_run_hooks_result"; shift + fi done - - func_quote_for_eval ${1+"$@"} - func_run_hooks_result=$func_quote_for_eval_result } @@ -1557,10 +1730,18 @@ func_run_hooks () ## --------------- ## # In order to add your own option parsing hooks, you must accept the -# full positional parameter list in your hook function, remove any -# options that you action, and then pass back the remaining unprocessed -# options in '_result', escaped suitably for -# 'eval'. Like this: +# full positional parameter list from your hook function. You may remove +# or edit any options that you action, and then pass back the remaining +# unprocessed options in '_result', escaped +# suitably for 'eval'. +# +# The '_result' variable is automatically unset +# before your hook gets called; for best performance, only set the +# *_result variable when necessary (i.e. don't call the 'func_quote' +# function unnecessarily because it can be an expensive operation on some +# machines). +# +# Like this: # # my_options_prep () # { @@ -1570,9 +1751,8 @@ func_run_hooks () # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' -# -# func_quote_for_eval ${1+"$@"} -# my_options_prep_result=$func_quote_for_eval_result +# # No change in '$@' (ignored completely by this hook). Leave +# # my_options_prep_result variable intact. # } # func_add_hook func_options_prep my_options_prep # @@ -1581,25 +1761,36 @@ func_run_hooks () # { # $debug_cmd # -# # Note that for efficiency, we parse as many options as we can +# args_changed=false +# +# # Note that, for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in -# --silent|-s) opt_silent=: ;; +# --silent|-s) opt_silent=: +# args_changed=: +# ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift +# args_changed=: # ;; -# *) set dummy "$_G_opt" "$*"; shift; break ;; +# *) # Make sure the first unrecognised option "$_G_opt" +# # is added back to "$@" in case we need it later, +# # if $args_changed was set to 'true'. +# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; # esac # done # -# func_quote_for_eval ${1+"$@"} -# my_silent_option_result=$func_quote_for_eval_result +# # Only call 'func_quote' here if we processed at least one argument. +# if $args_changed; then +# func_quote eval ${1+"$@"} +# my_silent_option_result=$func_quote_result +# fi # } # func_add_hook func_parse_options my_silent_option # @@ -1610,17 +1801,26 @@ func_run_hooks () # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." -# -# func_quote_for_eval ${1+"$@"} -# my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # -# You'll alse need to manually amend $usage_message to reflect the extra +# You'll also need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. +# func_options_finish [ARG]... +# ---------------------------- +# Finishing the option parse loop (call 'func_options' hooks ATM). +func_options_finish () +{ + $debug_cmd + + func_run_hooks func_options ${1+"$@"} + func_propagate_result func_run_hooks func_options_finish +} + + # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the @@ -1630,17 +1830,27 @@ func_options () { $debug_cmd - func_options_prep ${1+"$@"} - eval func_parse_options \ - ${func_options_prep_result+"$func_options_prep_result"} - eval func_validate_options \ - ${func_parse_options_result+"$func_parse_options_result"} + _G_options_quoted=false - eval func_run_hooks func_options \ - ${func_validate_options_result+"$func_validate_options_result"} + for my_func in options_prep parse_options validate_options options_finish + do + func_unset func_${my_func}_result + func_unset func_run_hooks_result + eval func_$my_func '${1+"$@"}' + func_propagate_result func_$my_func func_options + if $func_propagate_result_result; then + eval set dummy "$func_options_result"; shift + _G_options_quoted=: + fi + done - # save modified positional parameters for caller - func_options_result=$func_run_hooks_result + $_G_options_quoted || { + # As we (func_options) are top-level options-parser function and + # nobody quoted "$@" for us yet, we need to do it explicitly for + # caller. + func_quote eval ${1+"$@"} + func_options_result=$func_quote_result + } } @@ -1649,9 +1859,8 @@ func_options () # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and -# needs to propogate that back to rest of this script, then the complete -# modified list must be put in 'func_run_hooks_result' before -# returning. +# needs to propagate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before returning. func_hookable func_options_prep func_options_prep () { @@ -1662,9 +1871,7 @@ func_options_prep () opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} - - # save modified positional parameters for caller - func_options_prep_result=$func_run_hooks_result + func_propagate_result func_run_hooks func_options_prep } @@ -1676,25 +1883,32 @@ func_parse_options () { $debug_cmd - func_parse_options_result= - + _G_parse_options_requote=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} - - # Adjust func_parse_options positional parameters to match - eval set dummy "$func_run_hooks_result"; shift + func_propagate_result func_run_hooks func_parse_options + if $func_propagate_result_result; then + eval set dummy "$func_parse_options_result"; shift + # Even though we may have changed "$@", we passed the "$@" array + # down into the hook and it quoted it for us (because we are in + # this if-branch). No need to quote it again. + _G_parse_options_requote=false + fi # Break out of the loop if we already parsed every option. test $# -gt 0 || break + # We expect that one of the options parsed in this function matches + # and thus we remove _G_opt from "$@" and need to re-quote. + _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' - func_echo "enabling shell trace mode" + func_echo "enabling shell trace mode" >&2 $debug_cmd ;; @@ -1704,7 +1918,10 @@ func_parse_options () ;; --warnings|--warning|-W) - test $# = 0 && func_missing_arg $_G_opt && break + if test $# = 0 && func_missing_arg $_G_opt; then + _G_parse_options_requote=: + break + fi case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above @@ -1757,15 +1974,24 @@ func_parse_options () shift ;; - --) break ;; + --) _G_parse_options_requote=: ; break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift + _G_match_parse_options=false + break + ;; esac + + if $_G_match_parse_options; then + _G_parse_options_requote=: + fi done - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - func_parse_options_result=$func_quote_for_eval_result + if $_G_parse_options_requote; then + # save modified positional parameters for caller + func_quote eval ${1+"$@"} + func_parse_options_result=$func_quote_result + fi } @@ -1782,12 +2008,10 @@ func_validate_options () test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} + func_propagate_result func_run_hooks func_validate_options # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE - - # save modified positional parameters for caller - func_validate_options_result=$func_run_hooks_result } @@ -1843,8 +2067,8 @@ func_missing_arg () # func_split_equals STRING # ------------------------ -# Set func_split_equals_lhs and func_split_equals_rhs shell variables after -# splitting STRING at the '=' sign. +# Set func_split_equals_lhs and func_split_equals_rhs shell variables +# after splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ @@ -1859,8 +2083,9 @@ then func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} - test "x$func_split_equals_lhs" = "x$1" \ - && func_split_equals_rhs= + if test "x$func_split_equals_lhs" = "x$1"; then + func_split_equals_rhs= + fi }' else # ...otherwise fall back to using expr, which is often a shell builtin. @@ -1870,7 +2095,7 @@ else func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= - test "x$func_split_equals_lhs" = "x$1" \ + test "x$func_split_equals_lhs=" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals @@ -1896,7 +2121,7 @@ else { $debug_cmd - func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt @@ -1938,31 +2163,44 @@ func_usage_message () # func_version # ------------ # Echo version message to standard output and exit. +# The version message is extracted from the calling file's header +# comments, with leading '# ' stripped: +# 1. First display the progname and version +# 2. Followed by the header comment line matching /^# Written by / +# 3. Then a blank line followed by the first following line matching +# /^# Copyright / +# 4. Immediately followed by any lines between the previous matches, +# except lines preceding the intervening completely blank line. +# For example, see the header comments of this file. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' - /(C)/!b go - :more - /\./!{ - N - s|\n# | | - b more - } - :go - /^# Written by /,/# warranty; / { - s|^# || - s|^# *$|| - s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| - p + /^# Written by /!b + s|^# ||; p; n + + :fwd2blnk + /./ { + n + b fwd2blnk } - /^# Written by / { - s|^# || - p + p; n + + :holdwrnt + s|^# || + s|^# *$|| + /^Copyright /!{ + /./H + n + b holdwrnt } - /^warranty; /q' < "$progpath" + + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + G + s|\(\n\)\n*|\1|g + p; q' < "$progpath" exit $? } @@ -1972,12 +2210,35 @@ func_version () # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. -scriptversion='(GNU libtool) 2.4.6' +scriptversion='(GNU libtool) 2.5.4' + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + year=`date +%Y` + + cat < +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. + +Originally written by Gordon Matzigkeit, 1996 +(See AUTHORS for complete contributor listing) +EOF + + exit $? +} # func_echo ARG... @@ -2000,18 +2261,6 @@ func_echo () } -# func_warning ARG... -# ------------------- -# Libtool warnings are not categorized, so override funclib.sh -# func_warning with this simpler definition. -func_warning () -{ - $debug_cmd - - $warning_func ${1+"$@"} -} - - ## ---------------- ## ## Options parsing. ## ## ---------------- ## @@ -2023,19 +2272,23 @@ usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: - --config show all configuration variables - --debug enable verbose shell tracing - -n, --dry-run display commands without modifying any files - --features display basic configuration information and exit - --mode=MODE use operation mode MODE - --no-warnings equivalent to '-Wnone' - --preserve-dup-deps don't remove duplicate dependency libraries - --quiet, --silent don't print informational messages - --tag=TAG use configuration variables from tag TAG - -v, --verbose print more informational messages than default - --version print version information - -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] - -h, --help, --help-all print short, long, or detailed help message + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information + --finish use operation '--mode=finish' + --mode=MODE use operation mode MODE + --no-finish don't update shared library cache + --no-quiet, --no-silent print default informational messages + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --reorder-cache=DIRS reorder shared library cache for preferred DIRS + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. @@ -2068,13 +2321,13 @@ include the following information: compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname (GNU libtool) 2.4.6 + version: $progname $scriptversion automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . -GNU libtool home page: . -General help using GNU software: ." +GNU libtool home page: . +General help using GNU software: ." exit 0 } @@ -2124,7 +2377,7 @@ fi # a configuration failure hint, and exit. func_fatal_configuration () { - func__fatal_error ${1+"$@"} \ + func_fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } @@ -2264,12 +2517,17 @@ libtool_options_prep () opt_dry_run=false opt_help=false opt_mode= + opt_reorder_cache=false opt_preserve_dup_deps=false opt_quiet=false + opt_finishing=true + opt_warning= nonopt= preserve_args= + _G_rc_lt_options_prep=: + # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) @@ -2293,11 +2551,16 @@ libtool_options_prep () uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; + *) + _G_rc_lt_options_prep=false + ;; esac - # Pass back the list of options. - func_quote_for_eval ${1+"$@"} - libtool_options_prep_result=$func_quote_for_eval_result + if $_G_rc_lt_options_prep; then + # Pass back the list of options. + func_quote eval ${1+"$@"} + libtool_options_prep_result=$func_quote_result + fi } func_add_hook func_options_prep libtool_options_prep @@ -2309,9 +2572,12 @@ libtool_parse_options () { $debug_cmd + _G_rc_lt_parse_options=false + # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do + _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in @@ -2345,14 +2611,18 @@ libtool_parse_options () clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error - *) func_error "invalid argument for $_G_opt" + *) func_error "invalid argument '$1' for $_G_opt" exit_cmd=exit - break ;; esac shift ;; + --no-finish) + opt_finishing=false + func_append preserve_args " $_G_opt" + ;; + --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" @@ -2368,6 +2638,24 @@ libtool_parse_options () func_append preserve_args " $_G_opt" ;; + --reorder-cache) + opt_reorder_cache=true + shared_lib_dirs=$1 + if test -n "$shared_lib_dirs"; then + case $1 in + # Must begin with /: + /*) ;; + + # Catch anything else as an error (relative paths) + *) func_error "invalid argument '$1' for $_G_opt" + func_error "absolute paths are required for $_G_opt" + exit_cmd=exit + ;; + esac + fi + shift + ;; + --silent|--quiet) opt_quiet=: opt_verbose=false @@ -2386,19 +2674,36 @@ libtool_parse_options () func_append preserve_args " $_G_opt" ;; - # An option not handled by this hook function: - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"} ; shift + _G_match_lt_parse_options=false + break + ;; esac + $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done - - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - libtool_parse_options_result=$func_quote_for_eval_result + if $_G_rc_lt_parse_options; then + # save modified positional parameters for caller + func_quote eval ${1+"$@"} + libtool_parse_options_result=$func_quote_result + fi } func_add_hook func_parse_options libtool_parse_options +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + if $opt_warning; then + $debug_cmd + $warning_func ${1+"$@"} + fi +} + # libtool_validate_options [ARG]... # --------------------------------- @@ -2415,10 +2720,10 @@ libtool_validate_options () # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" - case $host in + case $host_os in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 - *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + cygwin* | mingw* | windows* | pw32* | cegcc* | solaris2* | os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; @@ -2451,8 +2756,8 @@ libtool_validate_options () } # Pass back the unparsed argument list - func_quote_for_eval ${1+"$@"} - libtool_validate_options_result=$func_quote_for_eval_result + func_quote eval ${1+"$@"} + libtool_validate_options_result=$func_quote_result } func_add_hook func_validate_options libtool_validate_options @@ -2750,7 +3055,7 @@ EOF # func_convert_core_file_wine_to_w32 ARG # Helper function used by file name conversion functions when $build is *nix, -# and $host is mingw, cygwin, or some other w32 environment. Relies on a +# and $host is mingw, windows, cygwin, or some other w32 environment. Relies on a # correctly configured wine environment available, with the winepath program # in $build's $PATH. # @@ -2782,9 +3087,10 @@ func_convert_core_file_wine_to_w32 () # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. +# $host is mingw, windows, cygwin, or some other w32 environment. Relies on a +# correctly configured wine environment available, with the winepath program +# in $build's $PATH. Assumes ARG has no leading or trailing path separator +# characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. @@ -2927,6 +3233,15 @@ func_convert_path_front_back_pathsep () # end func_convert_path_front_back_pathsep +# func_convert_delimited_path PATH ORIG_DELIMITER NEW_DELIMITER +# Replaces a delimiter for a given path. +func_convert_delimited_path () +{ + converted_path=`$ECHO "$1" | $SED "s#$2#$3#g"` +} +# end func_convert_delimited_path + + ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## @@ -3261,6 +3576,65 @@ func_dll_def_p () } +# func_reorder_shared_lib_cache DIRS +# Reorder the shared library cache by unconfiguring previous shared library cache +# and configuring preferred search directories before previous search directories. +# Previous shared library cache: /usr/lib /usr/local/lib +# Preferred search directories: /tmp/testing +# Reordered shared library cache: /tmp/testing /usr/lib /usr/local/lib +func_reorder_shared_lib_cache () +{ + $debug_cmd + + case $host_os in + openbsd*) + get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"` + func_convert_delimited_path "$get_search_directories" ':' '\ ' + save_search_directories=$converted_path + func_convert_delimited_path "$1" ':' '\ ' + + # Ensure directories exist + for dir in $converted_path; do + # Ensure each directory is an absolute path + case $dir in + /*) ;; + *) func_error "Directory '$dir' is not an absolute path" + exit $EXIT_FAILURE ;; + esac + # Ensure no trailing slashes + func_stripname '' '/' "$dir" + dir=$func_stripname_result + if test -d "$dir"; then + if test -n "$preferred_search_directories"; then + preferred_search_directories="$preferred_search_directories $dir" + else + preferred_search_directories=$dir + fi + else + func_error "Directory '$dir' does not exist" + exit $EXIT_FAILURE + fi + done + + PATH="$PATH:/sbin" ldconfig -U $save_search_directories + PATH="$PATH:/sbin" ldconfig -m $preferred_search_directories $save_search_directories + get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"` + func_convert_delimited_path "$get_search_directories" ':' '\ ' + reordered_search_directories=$converted_path + + $ECHO "Original: $save_search_directories" + $ECHO "Reordered: $reordered_search_directories" + exit $EXIT_SUCCESS + ;; + *) + func_error "--reorder-cache is not supported for host_os=$host_os." + exit $EXIT_FAILURE + ;; + esac +} +# end func_reorder_shared_lib_cache + + # func_mode_compile arg... func_mode_compile () { @@ -3418,8 +3792,8 @@ func_mode_compile () esac done - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ + func_quote_arg pretty "$libobj" + test "X$libobj" != "X$func_quote_arg_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" @@ -3439,7 +3813,7 @@ func_mode_compile () # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) + cygwin* | mingw* | windows* | pw32* | os2* | cegcc*) pic_mode=default ;; esac @@ -3492,8 +3866,8 @@ compiler." func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result + func_quote_arg pretty "$srcfile" + qsrcfile=$func_quote_arg_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then @@ -3648,7 +4022,8 @@ This mode accepts the following additional options: -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler + -Wc,FLAG + -Xcompiler FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. @@ -3754,6 +4129,8 @@ The following components of LINK-COMMAND are treated specially: -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wa,FLAG + -Xassembler FLAG pass linker-specific FLAG directly to the assembler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) @@ -3830,6 +4207,12 @@ if $opt_help; then fi +# If option '--reorder-cache', reorder the shared library cache and exit. +if $opt_reorder_cache; then + func_reorder_shared_lib_cache $shared_lib_dirs +fi + + # func_mode_execute arg... func_mode_execute () { @@ -4014,7 +4397,7 @@ func_mode_finish () fi fi - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs" && $opt_finishing; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. @@ -4039,6 +4422,12 @@ func_mode_finish () for libdir in $libdirs; do $ECHO " $libdir" done + if test "false" = "$opt_finishing"; then + echo + echo "NOTE: finish_cmds were not executed during testing, so you must" + echo "manually run ldconfig to add a given test directory, LIBDIR, to" + echo "the search path for generated executables." + fi echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" @@ -4096,8 +4485,8 @@ func_mode_install () case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " + func_quote_arg pretty "$nonopt" + install_prog="$func_quote_arg_result " arg=$1 shift else @@ -4107,8 +4496,8 @@ func_mode_install () # The real first argument should be the name of the installation program. # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" + func_quote_arg pretty "$arg" + func_append install_prog "$func_quote_arg_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; @@ -4165,12 +4554,12 @@ func_mode_install () esac # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" + func_quote_arg pretty "$arg" + func_append install_prog " $func_quote_arg_result" if test -n "$arg2"; then - func_quote_for_eval "$arg2" + func_quote_arg pretty "$arg2" fi - func_append install_shared_prog " $func_quote_for_eval_result" + func_append install_shared_prog " $func_quote_arg_result" done test -z "$install_prog" && \ @@ -4181,8 +4570,8 @@ func_mode_install () if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" + func_quote_arg pretty "$install_override_mode" + func_append install_shared_prog " -m $func_quote_arg_result" fi fi @@ -4275,8 +4664,15 @@ func_mode_install () func_append dir "$objdir" if test -n "$relink_command"; then + # Strip any trailing slash from the destination. + func_stripname '' '/' "$libdir" + destlibdir=$func_stripname_result + + func_stripname '' '/' "$destdir" + s_destdir=$func_stripname_result + # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that @@ -4313,7 +4709,7 @@ func_mode_install () 'exit $?' tstripme=$stripme case $host_os in - cygwin* | mingw* | pw32* | cegcc*) + cygwin* | mingw* | windows* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= @@ -4426,7 +4822,7 @@ func_mode_install () # Do a test to see if this is really a libtool program. case $host in - *cygwin* | *mingw*) + *cygwin* | *mingw* | *windows*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result @@ -4478,8 +4874,8 @@ func_mode_install () relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" + func_quote_arg expand,pretty "$relink_command" + eval "func_echo $func_quote_arg_result" } if eval "$relink_command"; then : else @@ -4654,7 +5050,7 @@ extern \"C\" { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in - *cygwin* | *mingw* | *cegcc* ) + *cygwin* | *mingw* | *windows* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; @@ -4666,7 +5062,7 @@ extern \"C\" { eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in - *cygwin* | *mingw* | *cegcc* ) + *cygwin* | *mingw* | *windows* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; @@ -4680,7 +5076,7 @@ extern \"C\" { func_basename "$dlprefile" name=$func_basename_result case $host in - *cygwin* | *mingw* | *cegcc* ) + *cygwin* | *mingw* | *windows* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" @@ -4706,8 +5102,16 @@ extern \"C\" { eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + case $host in + i[3456]86-*-mingw32*) + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + ;; + *) + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/__nm_//' >> '$nlist'" + ;; + esac } else # not an import lib $opt_dry_run || { @@ -4855,7 +5259,7 @@ static const void *lt_preloaded_setup() { # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in - *cygwin* | *mingw* | *cegcc* ) + *cygwin* | *mingw* | *windows* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` @@ -4931,7 +5335,7 @@ func_win32_libid () *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || @@ -5198,7 +5602,7 @@ func_extract_archives () # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw +# incorporate the script contents within a cygwin/mingw/windows # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. @@ -5206,7 +5610,7 @@ func_extract_archives () # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is -# the $objdir directory. This is a cygwin/mingw-specific +# the $objdir directory. This is a cygwin/mingw/windows-specific # behavior. func_emit_wrapper () { @@ -5258,7 +5662,8 @@ else if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + func_quote_arg pretty "$ECHO" + qECHO=$func_quote_arg_result $ECHO "\ # A function that is used when there is no print builtin or printf. @@ -5268,7 +5673,7 @@ func_fallback_echo () \$1 _LTECHO_EOF' } - ECHO=\"$qECHO\" + ECHO=$qECHO fi # Very basic option parsing. These options are (a) specific to @@ -5330,7 +5735,7 @@ func_exec_program_core () " case $host in # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) + *-*-mingw* | *-*-windows* | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 @@ -5398,7 +5803,7 @@ func_exec_program () file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done - # Usually 'no', except on cygwin/mingw when embedded into + # Usually 'no', except on cygwin/mingw/windows when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then @@ -5530,7 +5935,7 @@ EOF #endif #include #include -#ifdef _MSC_VER +#if defined _WIN32 && !defined __GNUC__ # include # include # include @@ -5555,7 +5960,7 @@ EOF /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ -int _putenv (const char *); +_CRTIMP int __cdecl _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ @@ -5753,7 +6158,7 @@ main (int argc, char *argv[]) { EOF case $host in - *mingw* | *cygwin* ) + *mingw* | *windows* | *cygwin* ) # make stdout use "unix" line endings echo " setmode(1,_O_BINARY);" ;; @@ -5772,7 +6177,7 @@ EOF { /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX namespace, but it is not one of the ones we know about and - have already dealt with, above (inluding dump-script), then + have already dealt with, above (including dump-script), then report an error. Otherwise, targets might begin to believe they are allowed to use options in the LTWRAPPER_OPTION_PREFIX namespace. The first time any user complains about this, we'll @@ -5856,7 +6261,7 @@ EOF EOF case $host_os in - mingw*) + mingw* | windows*) cat <<"EOF" { char* p; @@ -5898,7 +6303,7 @@ EOF EOF case $host_os in - mingw*) + mingw* | windows*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ newargz = prepare_spawn (newargz); @@ -6317,7 +6722,7 @@ lt_update_lib_path (const char *name, const char *value) EOF case $host_os in - mingw*) + mingw* | windows*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). @@ -6492,7 +6897,7 @@ func_mode_link () $debug_cmd case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra @@ -6516,6 +6921,7 @@ func_mode_link () finalize_command=$nonopt compile_rpath= + compile_rpath_tail= finalize_rpath= compile_shlibpath= finalize_shlibpath= @@ -6556,10 +6962,12 @@ func_mode_link () xrpath= perm_rpath= temp_rpath= + temp_rpath_tail= thread_safe=no vinfo= vinfo_number=no weak_libs= + rpath_arg= single_module=$wl-single_module func_infer_tag $base_compile @@ -6611,9 +7019,9 @@ func_mode_link () while test "$#" -gt 0; do arg=$1 shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" + func_quote_arg pretty,unquoted "$arg" + qarg=$func_quote_arg_unquoted_result + func_append libtool_args " $func_quote_arg_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then @@ -6822,7 +7230,7 @@ func_mode_link () case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) - func_fatal_error "only absolute run-paths are allowed" + func_fatal_error "argument to -rpath is not absolute: $arg" ;; esac if test rpath = "$prev"; then @@ -6849,6 +7257,13 @@ func_mode_link () prev= continue ;; + xassembler) + func_append compiler_flags " -Xassembler $qarg" + prev= + func_append compile_command " -Xassembler $qarg" + func_append finalize_command " -Xassembler $qarg" + continue + ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" @@ -6991,7 +7406,7 @@ func_mode_link () ;; esac case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; @@ -7011,7 +7426,7 @@ func_mode_link () -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; @@ -7019,7 +7434,7 @@ func_mode_link () # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; @@ -7039,7 +7454,7 @@ func_mode_link () esac elif test X-lc_r = "X$arg"; then case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc_r directly, use -pthread flag. continue ;; @@ -7062,16 +7477,29 @@ func_mode_link () # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot|--sysroot) + # -q + + + + + + + + stdlib + @@ -1186,9 +1195,6 @@ video\dummy - - video\yuv2rgb - video\windows @@ -1361,9 +1367,14 @@ render\direct3d12 - + + + + + stdlib + - + \ No newline at end of file diff --git a/vs/sdl2/Xcode-iOS/Demos/src/fireworks.c b/vs/sdl2/Xcode-iOS/Demos/src/fireworks.c index a9af3fb583a..9f444b4b2bb 100644 --- a/vs/sdl2/Xcode-iOS/Demos/src/fireworks.c +++ b/vs/sdl2/Xcode-iOS/Demos/src/fireworks.c @@ -52,9 +52,9 @@ void spawnTrailFromEmitter(struct particle *emitter); void spawnEmitterParticle(GLfloat x, GLfloat y); void explodeEmitter(struct particle *emitter); void initializeParticles(void); -void initializeTexture(); +void initializeTexture(void); int nextPowerOfTwo(int x); -void drawParticles(); +void drawParticles(void); void stepParticles(double deltaTime); /* helper function (used in texture loading) @@ -159,7 +159,7 @@ stepParticles(double deltaTime) This draws all the particles shown on screen */ void -drawParticles() +drawParticles(void) { /* draw the background */ @@ -324,7 +324,7 @@ initializeParticles(void) loads the particle texture */ void -initializeTexture() +initializeTexture(void) { int bpp; /* texture bits per pixel */ @@ -456,7 +456,10 @@ main(int argc, char *argv[]) while (!done) { SDL_Event event; double deltaTime = updateDeltaTime(); + SDL_bool hasEvents = SDL_FALSE; + while (SDL_PollEvent(&event)) { + hasEvents = SDL_TRUE; if (event.type == SDL_QUIT) { done = 1; } @@ -466,10 +469,17 @@ main(int argc, char *argv[]) spawnEmitterParticle(x, y); } } - stepParticles(deltaTime); - drawParticles(); - SDL_GL_SwapWindow(window); - SDL_Delay(1); + + /* Only update and render if we have active particles or just received events */ + if (num_active_particles > 0 || hasEvents) { + stepParticles(deltaTime); + drawParticles(); + SDL_GL_SwapWindow(window); + SDL_Delay(16); // Target 60 FPS when active + } else { + /* Idle state - wait for events with longer delay to save CPU */ + SDL_Delay(100); // Much longer delay when idle + } } /* delete textures */ diff --git a/vs/sdl2/Xcode-iOS/Demos/src/keyboard.c b/vs/sdl2/Xcode-iOS/Demos/src/keyboard.c index 4d630bae5f5..3e1bedf5b85 100644 --- a/vs/sdl2/Xcode-iOS/Demos/src/keyboard.c +++ b/vs/sdl2/Xcode-iOS/Demos/src/keyboard.c @@ -196,7 +196,7 @@ loadFont(void) } void -draw() +draw(void) { SDL_SetRenderDrawColor(renderer, bg_color.r, bg_color.g, bg_color.b, bg_color.a); SDL_RenderClear(renderer); diff --git a/vs/sdl2/Xcode/SDL/Info-Framework.plist b/vs/sdl2/Xcode/SDL/Info-Framework.plist index fc1167f1a34..ac069e127b0 100644 --- a/vs/sdl2/Xcode/SDL/Info-Framework.plist +++ b/vs/sdl2/Xcode/SDL/Info-Framework.plist @@ -19,10 +19,10 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.30.4 + 2.32.10 CFBundleSignature SDLX CFBundleVersion - 2.30.4 + 2.32.10 diff --git a/vs/sdl2/Xcode/SDL/SDL.xcodeproj/project.pbxproj b/vs/sdl2/Xcode/SDL/SDL.xcodeproj/project.pbxproj index d2603315090..57ae6193834 100644 --- a/vs/sdl2/Xcode/SDL/SDL.xcodeproj/project.pbxproj +++ b/vs/sdl2/Xcode/SDL/SDL.xcodeproj/project.pbxproj @@ -9728,8 +9728,8 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEPLOYMENT_POSTPROCESSING = YES; - DYLIB_COMPATIBILITY_VERSION = 3001.0.0; - DYLIB_CURRENT_VERSION = 3001.4.0; + DYLIB_COMPATIBILITY_VERSION = 3201.0.0; + DYLIB_CURRENT_VERSION = 3201.10.0; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_ALTIVEC_EXTENSIONS = YES; @@ -9770,7 +9770,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_LINK_OBJC_RUNTIME = NO; - MARKETING_VERSION = 2.30.4; + MARKETING_VERSION = 2.32.10; OTHER_LDFLAGS = "-liconv"; }; name = Release; @@ -9813,8 +9813,8 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; DEBUG_INFORMATION_FORMAT = dwarf; - DYLIB_COMPATIBILITY_VERSION = 3001.0.0; - DYLIB_CURRENT_VERSION = 3001.4.0; + DYLIB_COMPATIBILITY_VERSION = 3201.0.0; + DYLIB_CURRENT_VERSION = 3201.10.0; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -9856,7 +9856,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_LINK_OBJC_RUNTIME = NO; - MARKETING_VERSION = 2.30.4; + MARKETING_VERSION = 2.32.10; OTHER_LDFLAGS = "-liconv"; }; name = Debug; @@ -10062,8 +10062,8 @@ CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 3001.0.0; - DYLIB_CURRENT_VERSION = 3001.4.0; + DYLIB_COMPATIBILITY_VERSION = 3201.0.0; + DYLIB_CURRENT_VERSION = 3201.10.0; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; @@ -10114,8 +10114,8 @@ CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; - DYLIB_COMPATIBILITY_VERSION = 3001.0.0; - DYLIB_CURRENT_VERSION = 3001.4.0; + DYLIB_COMPATIBILITY_VERSION = 3201.0.0; + DYLIB_CURRENT_VERSION = 3201.10.0; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu11; diff --git a/vs/sdl2/Xcode/SDL/pkg-support/SDL.info b/vs/sdl2/Xcode/SDL/pkg-support/SDL.info index 87eff0c52bf..0bec3ced51b 100644 --- a/vs/sdl2/Xcode/SDL/pkg-support/SDL.info +++ b/vs/sdl2/Xcode/SDL/pkg-support/SDL.info @@ -1,4 +1,4 @@ -Title SDL 2.30.4 +Title SDL 2.32.10 Version 1 Description SDL Library for Mac OS X (http://www.libsdl.org) DefaultLocation /Library/Frameworks diff --git a/vs/sdl2/Xcode/SDL/pkg-support/resources/License.txt b/vs/sdl2/Xcode/SDL/pkg-support/resources/License.txt index 42f37361d44..144831ccfcc 100644 --- a/vs/sdl2/Xcode/SDL/pkg-support/resources/License.txt +++ b/vs/sdl2/Xcode/SDL/pkg-support/resources/License.txt @@ -1,6 +1,6 @@ Simple DirectMedia Layer -Copyright (C) 1997-2024 Sam Lantinga +Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/acinclude/libtool.m4 b/vs/sdl2/acinclude/libtool.m4 index 5afe55ea097..dd8e3962ee3 100644 --- a/vs/sdl2/acinclude/libtool.m4 +++ b/vs/sdl2/acinclude/libtool.m4 @@ -1023,6 +1023,21 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ rm -f conftest.* fi]) + # Feature test to disable chained fixups since it is not + # compatible with '-undefined dynamic_lookup' + AC_CACHE_CHECK([for -no_fixup_chains linker flag], + [lt_cv_support_no_fixup_chains], + [ save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-no_fixup_chains" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([],[])], + lt_cv_support_no_fixup_chains=yes, + lt_cv_support_no_fixup_chains=no + ) + LDFLAGS=$save_LDFLAGS + ] + ) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no @@ -1047,7 +1062,7 @@ _LT_EOF echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF -int main() { return 0;} +int main(void) { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err @@ -1072,7 +1087,12 @@ _LT_EOF 10.[[012]],*|,*powerpc*-darwin[[5-8]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + if test yes = "$lt_cv_support_no_fixup_chains"; then + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup $wl-no_fixup_chains' + else + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' + fi + ;; esac ;; esac @@ -1862,11 +1882,11 @@ else /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); +int fnord (void) __attribute__((visibility("default"))); #endif -int fnord () { return 42; } -int main () +int fnord (void) { return 42; } +int main (void) { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; @@ -2547,14 +2567,14 @@ cygwin* | mingw* | windows* | pw32* | cegcc*) cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' #soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' - soname_spec='`echo $libname | sed -e 's/^lib//'`$shared_ext' # SDL customization + soname_spec='`echo $libname | sed -e 's/^lib//'`$shared_ext' # SDL customization. m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | windows* | cegcc*) # MinGW DLLs use traditional 'lib' prefix #soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' - soname_spec='`echo $libname | $SED -e 's/^lib//'`$shared_ext' # SDL customization + soname_spec='`echo $libname | $SED -e 's/^lib//'`$shared_ext' # SDL customization. ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' @@ -3466,7 +3486,7 @@ cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' - lt_cv_deplibs_check_method=pass_all # SDL customization + lt_cv_deplibs_check_method=pass_all # SDL customization. ;; mingw* | windows* | pw32*) @@ -3478,10 +3498,10 @@ mingw* | windows* | pw32*) lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi - lt_cv_deplibs_check_method=pass_all # SDL customization + lt_cv_deplibs_check_method=pass_all # SDL customization. ;; cegcc*) @@ -4052,7 +4072,7 @@ void nm_test_func(void){} #ifdef __cplusplus } #endif -int main(){nm_test_var='a';nm_test_func();return(0);} +int main(void){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then @@ -6218,7 +6238,7 @@ _LT_TAGVAR(objext, $1)=$objext lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' +lt_simple_link_test_code='int main(void){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other diff --git a/vs/sdl2/android-project-ant/AndroidManifest.xml b/vs/sdl2/android-project-ant/AndroidManifest.xml new file mode 100644 index 00000000000..94bcaefd00a --- /dev/null +++ b/vs/sdl2/android-project-ant/AndroidManifest.xml @@ -0,0 +1 @@ +../android-project/app/src/main/AndroidManifest.xml \ No newline at end of file diff --git a/vs/sdl2/android-project-ant/ant.properties b/vs/sdl2/android-project-ant/ant.properties new file mode 100644 index 00000000000..b0971e891ef --- /dev/null +++ b/vs/sdl2/android-project-ant/ant.properties @@ -0,0 +1,17 @@ +# This file is used to override default values used by the Ant build system. +# +# This file must be checked into Version Control Systems, as it is +# integral to the build system of your project. + +# This file is only used by the Ant script. + +# You can use this to override default values such as +# 'source.dir' for the location of your java source folder and +# 'out.dir' for the location of your output folder. + +# You can also use it define how the release builds are signed by declaring +# the following properties: +# 'key.store' for the location of your keystore and +# 'key.alias' for the name of the key to use. +# The password will be asked during the build when you use the 'release' target. + diff --git a/vs/sdl2/android-project-ant/build.properties b/vs/sdl2/android-project-ant/build.properties new file mode 100644 index 00000000000..edc7f23050b --- /dev/null +++ b/vs/sdl2/android-project-ant/build.properties @@ -0,0 +1,17 @@ +# This file is used to override default values used by the Ant build system. +# +# This file must be checked in Version Control Systems, as it is +# integral to the build system of your project. + +# This file is only used by the Ant script. + +# You can use this to override default values such as +# 'source.dir' for the location of your java source folder and +# 'out.dir' for the location of your output folder. + +# You can also use it define how the release builds are signed by declaring +# the following properties: +# 'key.store' for the location of your keystore and +# 'key.alias' for the name of the key to use. +# The password will be asked during the build when you use the 'release' target. + diff --git a/vs/sdl2/android-project-ant/build.xml b/vs/sdl2/android-project-ant/build.xml new file mode 100644 index 00000000000..9f19a077b1b --- /dev/null +++ b/vs/sdl2/android-project-ant/build.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vs/sdl2/android-project-ant/default.properties b/vs/sdl2/android-project-ant/default.properties new file mode 100644 index 00000000000..0a69b7743cc --- /dev/null +++ b/vs/sdl2/android-project-ant/default.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "build.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-16 diff --git a/vs/sdl2/android-project-ant/jni/Android.mk b/vs/sdl2/android-project-ant/jni/Android.mk new file mode 100644 index 00000000000..5053e7d6438 --- /dev/null +++ b/vs/sdl2/android-project-ant/jni/Android.mk @@ -0,0 +1 @@ +include $(call all-subdir-makefiles) diff --git a/vs/sdl2/android-project-ant/jni/Application.mk b/vs/sdl2/android-project-ant/jni/Application.mk new file mode 100644 index 00000000000..5ea0fb4cecf --- /dev/null +++ b/vs/sdl2/android-project-ant/jni/Application.mk @@ -0,0 +1,10 @@ + +# Uncomment this if you're using STL in your project +# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more information +# APP_STL := stlport_static + +APP_ABI := armeabi armeabi-v7a x86 + +# Min SDK level +APP_PLATFORM=android-10 + diff --git a/vs/sdl2/android-project-ant/jni/src/Android.mk b/vs/sdl2/android-project-ant/jni/src/Android.mk new file mode 100644 index 00000000000..1adcb6e9aa5 --- /dev/null +++ b/vs/sdl2/android-project-ant/jni/src/Android.mk @@ -0,0 +1,18 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := main + +SDL_PATH := ../SDL + +LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include + +# Add your application source files here... +LOCAL_SRC_FILES := YourSourceHere.c + +LOCAL_SHARED_LIBRARIES := SDL2 + +LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog + +include $(BUILD_SHARED_LIBRARY) diff --git a/vs/sdl2/android-project-ant/jni/src/Android_static.mk b/vs/sdl2/android-project-ant/jni/src/Android_static.mk new file mode 100644 index 00000000000..faed669c0ec --- /dev/null +++ b/vs/sdl2/android-project-ant/jni/src/Android_static.mk @@ -0,0 +1,12 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := main + +LOCAL_SRC_FILES := YourSourceHere.c + +LOCAL_STATIC_LIBRARIES := SDL2_static + +include $(BUILD_SHARED_LIBRARY) +$(call import-module,SDL)LOCAL_PATH := $(call my-dir) diff --git a/vs/sdl2/android-project-ant/proguard-project.txt b/vs/sdl2/android-project-ant/proguard-project.txt new file mode 100644 index 00000000000..f2fe1559a21 --- /dev/null +++ b/vs/sdl2/android-project-ant/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/vs/sdl2/android-project-ant/project.properties b/vs/sdl2/android-project-ant/project.properties new file mode 100644 index 00000000000..9b84a6b4bf9 --- /dev/null +++ b/vs/sdl2/android-project-ant/project.properties @@ -0,0 +1,14 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-16 diff --git a/vs/sdl2/android-project-ant/res/drawable-hdpi/ic_launcher.png b/vs/sdl2/android-project-ant/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 00000000000..d50bdaae06e Binary files /dev/null and b/vs/sdl2/android-project-ant/res/drawable-hdpi/ic_launcher.png differ diff --git a/vs/sdl2/android-project-ant/res/drawable-mdpi/ic_launcher.png b/vs/sdl2/android-project-ant/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 00000000000..0a299eb3cc0 Binary files /dev/null and b/vs/sdl2/android-project-ant/res/drawable-mdpi/ic_launcher.png differ diff --git a/vs/sdl2/android-project-ant/res/drawable-xhdpi/ic_launcher.png b/vs/sdl2/android-project-ant/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 00000000000..a336ad5c2ba Binary files /dev/null and b/vs/sdl2/android-project-ant/res/drawable-xhdpi/ic_launcher.png differ diff --git a/vs/sdl2/android-project-ant/res/drawable-xxhdpi/ic_launcher.png b/vs/sdl2/android-project-ant/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 00000000000..d423dac2624 Binary files /dev/null and b/vs/sdl2/android-project-ant/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/vs/sdl2/android-project-ant/res/layout/main.xml b/vs/sdl2/android-project-ant/res/layout/main.xml new file mode 100644 index 00000000000..123c4b6eac5 --- /dev/null +++ b/vs/sdl2/android-project-ant/res/layout/main.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/vs/sdl2/android-project-ant/res/values/strings.xml b/vs/sdl2/android-project-ant/res/values/strings.xml new file mode 100644 index 00000000000..9bce51cb36b --- /dev/null +++ b/vs/sdl2/android-project-ant/res/values/strings.xml @@ -0,0 +1,4 @@ + + + SDL App + diff --git a/vs/sdl2/android-project-ant/src b/vs/sdl2/android-project-ant/src new file mode 100644 index 00000000000..d5b63ee14d3 --- /dev/null +++ b/vs/sdl2/android-project-ant/src @@ -0,0 +1 @@ +../android-project/app/src/main/java \ No newline at end of file diff --git a/vs/sdl2/android-project/app/proguard-rules.pro b/vs/sdl2/android-project/app/proguard-rules.pro index eaf0e916cdf..a4c988665bf 100644 --- a/vs/sdl2/android-project/app/proguard-rules.pro +++ b/vs/sdl2/android-project/app/proguard-rules.pro @@ -15,3 +15,84 @@ #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} + +-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLInputConnection { + void nativeCommitText(java.lang.String, int); + void nativeGenerateScancodeForUnichar(char); +} + +-keep,includedescriptorclasses class org.libsdl.app.SDLActivity { + # for some reason these aren't compatible with allowoptimization modifier + boolean supportsRelativeMouse(); + void setWindowStyle(boolean); +} + +-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLActivity { + java.lang.String nativeGetHint(java.lang.String); # Java-side doesn't use this, so it gets minified, but C-side still tries to register it + boolean onNativeSoftReturnKey(); + void onNativeKeyboardFocusLost(); + boolean isScreenKeyboardShown(); + android.util.DisplayMetrics getDisplayDPI(); + java.lang.String clipboardGetText(); + boolean clipboardHasText(); + void clipboardSetText(java.lang.String); + int createCustomCursor(int[], int, int, int, int); + void destroyCustomCursor(int); + android.content.Context getContext(); + boolean getManifestEnvironmentVariables(); + android.view.Surface getNativeSurface(); + void initTouch(); + boolean isAndroidTV(); + boolean isChromebook(); + boolean isDeXMode(); + boolean isTablet(); + void manualBackButton(); + int messageboxShowMessageBox(int, java.lang.String, java.lang.String, int[], int[], java.lang.String[], int[]); + void minimizeWindow(); + int openURL(java.lang.String); + void requestPermission(java.lang.String, int); + int showToast(java.lang.String, int, int, int, int); + boolean sendMessage(int, int); + boolean setActivityTitle(java.lang.String); + boolean setCustomCursor(int); + void setOrientation(int, int, boolean, java.lang.String); + boolean setRelativeMouseEnabled(boolean); + boolean setSystemCursor(int); + boolean shouldMinimizeOnFocusLoss(); + boolean showTextInput(int, int, int, int); +} + +-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.HIDDeviceManager { + boolean initialize(boolean, boolean); + boolean openDevice(int); + int sendOutputReport(int, byte[]); + int sendFeatureReport(int, byte[]); + boolean getFeatureReport(int, byte[]); + void closeDevice(int); +} + +-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLAudioManager { + int[] getAudioOutputDevices(); + int[] getAudioInputDevices(); + int[] audioOpen(int, int, int, int, int); + void audioWriteFloatBuffer(float[]); + void audioWriteShortBuffer(short[]); + void audioWriteByteBuffer(byte[]); + void audioClose(); + int[] captureOpen(int, int, int, int, int); + int captureReadFloatBuffer(float[], boolean); + int captureReadShortBuffer(short[], boolean); + int captureReadByteBuffer(byte[], boolean); + void captureClose(); + void audioSetThreadPriority(boolean, int); + native int nativeSetupJNI(); + native void removeAudioDevice(boolean, int); + native void addAudioDevice(boolean, int); +} + +-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLControllerManager { + void pollInputDevices(); + void pollHapticDevices(); + void hapticRun(int, float, int); + void hapticStop(int); +} diff --git a/vs/sdl2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java b/vs/sdl2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java index e7281fdf26a..21a1c1d18ee 100644 --- a/vs/sdl2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java +++ b/vs/sdl2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java @@ -277,6 +277,7 @@ private boolean isXboxOneController(UsbDevice usbDevice, UsbInterface usbInterfa 0x044f, // Thrustmaster 0x045e, // Microsoft 0x0738, // Mad Catz + 0x0b05, // ASUS 0x0e6f, // PDP 0x0f0d, // Hori 0x10f5, // Turtle Beach @@ -590,7 +591,13 @@ public boolean openDevice(int deviceID) { } else { flags = 0; } - mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), flags)); + if (Build.VERSION.SDK_INT >= 33 /* Android 14.0 (U) */) { + Intent intent = new Intent(HIDDeviceManager.ACTION_USB_PERMISSION); + intent.setPackage(mContext.getPackageName()); + mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, intent, flags)); + } else { + mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), flags)); + } } catch (Exception e) { Log.v(TAG, "Couldn't request permission for USB device " + usbDevice); HIDDeviceOpenResult(deviceID, false); diff --git a/vs/sdl2/android-project/app/src/main/java/org/libsdl/app/SDL.java b/vs/sdl2/android-project/app/src/main/java/org/libsdl/app/SDL.java index 44c21c1c75c..139be9d151c 100644 --- a/vs/sdl2/android-project/app/src/main/java/org/libsdl/app/SDL.java +++ b/vs/sdl2/android-project/app/src/main/java/org/libsdl/app/SDL.java @@ -38,6 +38,10 @@ public static Context getContext() { } public static void loadLibrary(String libraryName) throws UnsatisfiedLinkError, SecurityException, NullPointerException { + loadLibrary(libraryName, mContext); + } + + public static void loadLibrary(String libraryName, Context context) throws UnsatisfiedLinkError, SecurityException, NullPointerException { if (libraryName == null) { throw new NullPointerException("No library name provided."); @@ -53,10 +57,10 @@ public static void loadLibrary(String libraryName) throws UnsatisfiedLinkError, // To use ReLinker, just add it as a dependency. For more information, see // https://github.com/KeepSafe/ReLinker for ReLinker's repository. // - Class relinkClass = mContext.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker"); - Class relinkListenerClass = mContext.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker$LoadListener"); - Class contextClass = mContext.getClassLoader().loadClass("android.content.Context"); - Class stringClass = mContext.getClassLoader().loadClass("java.lang.String"); + Class relinkClass = context.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker"); + Class relinkListenerClass = context.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker$LoadListener"); + Class contextClass = context.getClassLoader().loadClass("android.content.Context"); + Class stringClass = context.getClassLoader().loadClass("java.lang.String"); // Get a 'force' instance of the ReLinker, so we can ensure libraries are reinstalled if // they've changed during updates. @@ -66,7 +70,7 @@ public static void loadLibrary(String libraryName) throws UnsatisfiedLinkError, // Actually load the library! Method loadMethod = relinkInstanceClass.getDeclaredMethod("loadLibrary", contextClass, stringClass, stringClass, relinkListenerClass); - loadMethod.invoke(relinkInstance, mContext, libraryName, null, null); + loadMethod.invoke(relinkInstance, context, libraryName, null, null); } catch (final Throwable e) { // Fall back diff --git a/vs/sdl2/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/vs/sdl2/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java index a88c4611946..974044f3ec7 100644 --- a/vs/sdl2/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java +++ b/vs/sdl2/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -60,8 +60,8 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityChangeListener { private static final String TAG = "SDL"; private static final int SDL_MAJOR_VERSION = 2; - private static final int SDL_MINOR_VERSION = 30; - private static final int SDL_MICRO_VERSION = 4; + private static final int SDL_MINOR_VERSION = 32; + private static final int SDL_MICRO_VERSION = 10; /* // Display InputType.SOURCE/CLASS of events and devices // @@ -89,7 +89,7 @@ public static void debugSource(int sources, String prefix) { | InputDevice.SOURCE_CLASS_POSITION | InputDevice.SOURCE_CLASS_TRACKBALL); - if (s2 != 0) cls += "Some_Unkown"; + if (s2 != 0) cls += "Some_Unknown"; s2 = s_copy & InputDevice.SOURCE_ANY; // keep source only, no class; @@ -163,7 +163,7 @@ public static void debugSource(int sources, String prefix) { if (s == FLAG_TAINTED) src += " FLAG_TAINTED"; s2 &= ~FLAG_TAINTED; - if (s2 != 0) src += " Some_Unkown"; + if (s2 != 0) src += " Some_Unknown"; Log.v(TAG, prefix + "int=" + s_copy + " CLASS={" + cls + " } source(s):" + src); } @@ -281,7 +281,7 @@ protected String[] getLibraries() { // Load the .so public void loadLibraries() { for (String lib : getLibraries()) { - SDL.loadLibrary(lib); + SDL.loadLibrary(lib, this); } } @@ -790,6 +790,9 @@ public void handleMessage(Message msg) { window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); SDLActivity.mFullscreenModeActive = false; } + if (Build.VERSION.SDK_INT >= 28 /* Android 9 (Pie) */) { + window.getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + } } } else { Log.e(TAG, "error handling message, getContext() returned no Activity"); diff --git a/vs/sdl2/build-dosbox.sh b/vs/sdl2/build-dosbox.sh index 4f546b4820d..1d6176a4d36 100755 --- a/vs/sdl2/build-dosbox.sh +++ b/vs/sdl2/build-dosbox.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh MAKE="" find_make() @@ -33,13 +33,13 @@ opts= sys=`uname -s` -if [ "$sys" == "Darwin" ]; then +if [ "$sys" = "Darwin" ]; then opts="--disable-video-x11" elif [ "$sys" != "Linux" ]; then # These are supported on BSDs but the SDL2 code assumes Linux opts="--disable-video-wayland --disable-libudev" fi -if [ "$1" == "hx-dos" ]; then +if [ "$1" = "hx-dos" ]; then opts="--disable-video-opengl" fi @@ -53,7 +53,7 @@ cat >>include/SDL_config.h <<_EOF #endif _EOF -if [ "$1" == "hx-dos" ]; then +if [ "$1" = "hx-dos" ]; then cat >>include/SDL_config.h <<_EOF /* For HX-DOS, no parent window */ #ifndef SDL_WIN32_NO_PARENT_WINDOW diff --git a/vs/sdl2/build-scripts/android-prefab.sh b/vs/sdl2/build-scripts/android-prefab.sh index aef588eeb1f..d7bcd33d86a 100644 --- a/vs/sdl2/build-scripts/android-prefab.sh +++ b/vs/sdl2/build-scripts/android-prefab.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh set -e diff --git a/vs/sdl2/build-scripts/androidbuild.sh b/vs/sdl2/build-scripts/androidbuild.sh index 81457818243..8de580f0a3c 100755 --- a/vs/sdl2/build-scripts/androidbuild.sh +++ b/vs/sdl2/build-scripts/androidbuild.sh @@ -1,21 +1,24 @@ -#!/bin/bash +#!/bin/sh -SOURCES=() +SOURCES= MKSOURCES="" -CURDIR=`pwd -P` +CURDIR=$(pwd -P) # Fetch sources -if [[ $# -ge 2 ]]; then - for src in ${@:2} +if [ $# -ge 2 ]; then + shift + for src do - SOURCES+=($src) + SOURCES=$SOURCES" +$src" MKSOURCES="$MKSOURCES $(basename $src)" done else if [ -n "$1" ]; then while read src do - SOURCES+=($src) + SOURCES=$SOURCES" +$src" MKSOURCES="$MKSOURCES $(basename $src)" done fi @@ -41,7 +44,7 @@ if [ ! -d "$ANDROID_HOME/ndk-bundle" -a -z "$ANDROID_NDK_HOME" ]; then fi APP="$1" -APPARR=(${APP//./ }) +APPARR=$(printf '%s\n' "$APP" | tr '.' ' ') BUILDPATH="$SDLPATH/build/$APP" # Start Building @@ -62,26 +65,36 @@ else fi cp -r $SDLPATH/Android.mk $BUILDPATH/app/jni/SDL -sed -i -e "s|YourSourceHere.c|$MKSOURCES|g" $BUILDPATH/app/jni/src/Android.mk -sed -i -e "s|org\.libsdl\.app|$APP|g" $BUILDPATH/app/build.gradle -sed -i -e "s|org\.libsdl\.app|$APP|g" $BUILDPATH/app/src/main/AndroidManifest.xml +sed "s|YourSourceHere.c|$MKSOURCES|g" "$BUILDPATH/app/jni/src/Android.mk" >"$BUILDPATH/app/jni/src/Android.mk.tmp" && + mv "$BUILDPATH/app/jni/src/Android.mk.tmp" "$BUILDPATH/app/jni/src/Android.mk" + +sed "s|org\.libsdl\.app|$APP|g" "$BUILDPATH/app/build.gradle" >"$BUILDPATH/app/build.gradle.tmp" && + mv "$BUILDPATH/app/build.gradle.tmp" "$BUILDPATH/app/build.gradle" + +sed "s|org\.libsdl\.app|$APP|g" "$BUILDPATH/app/src/main/AndroidManifest.xml" >"$BUILDPATH/app/src/main/AndroidManifest.xml.tmp" && + mv "$BUILDPATH/app/src/main/AndroidManifest.xml.tmp" "$BUILDPATH/app/src/main/AndroidManifest.xml" # Copy user sources -for src in "${SOURCES[@]}" +printf '%s\n' "$SOURCES" | while IFS= read -r src do cp $src $BUILDPATH/app/jni/src done # Create an inherited Activity cd $BUILDPATH/app/src/main/java -for folder in "${APPARR[@]}" +set -- $APPARR + +for folder do mkdir -p $folder cd $folder done -ACTIVITY="${folder}Activity" -sed -i -e "s|\"SDLActivity\"|\"$ACTIVITY\"|g" $BUILDPATH/app/src/main/AndroidManifest.xml +# Uppercase the first char in the activity class name because it's Java +ACTIVITY="$(echo $folder | awk '{$1=toupper(substr($1,0,1))substr($1,2)}1')Activity" + +sed -e "s|org\.libsdl\.app|$APP|g" -e "s|\"SDLActivity\"|\"$ACTIVITY\"|g" "$BUILDPATH/app/src/main/AndroidManifest.xml" >"$BUILDPATH/app/src/main/AndroidManifest.xml.tmp" && + mv "$BUILDPATH/app/src/main/AndroidManifest.xml.tmp" "$BUILDPATH/app/src/main/AndroidManifest.xml" # Fill in a default Activity cat >"$ACTIVITY.java" <<__EOF__ diff --git a/vs/sdl2/build-scripts/androidbuildlibs.sh b/vs/sdl2/build-scripts/androidbuildlibs.sh index 0ee583ab77d..dc72172936f 100755 --- a/vs/sdl2/build-scripts/androidbuildlibs.sh +++ b/vs/sdl2/build-scripts/androidbuildlibs.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # Build the Android libraries without needing a project # (AndroidManifest.xml, jni/{Application,Android}.mk, etc.) diff --git a/vs/sdl2/build-scripts/build-release.py b/vs/sdl2/build-scripts/build-release.py new file mode 100644 index 00000000000..d3f44a3b6f3 --- /dev/null +++ b/vs/sdl2/build-scripts/build-release.py @@ -0,0 +1,1470 @@ +#!/usr/bin/env python3 + +""" +This script is shared between SDL2, SDL3, and all satellite libraries. +Don't specialize this script for doing project-specific modifications. +Rather, modify release-info.json. +""" + +import argparse +import collections +import dataclasses +from collections.abc import Callable +import contextlib +import datetime +import fnmatch +import glob +import io +import json +import logging +import multiprocessing +import os +from pathlib import Path +import platform +import re +import shlex +import shutil +import subprocess +import sys +import tarfile +import tempfile +import textwrap +import typing +import zipfile + + +logger = logging.getLogger(__name__) +GIT_HASH_FILENAME = ".git-hash" +REVISION_TXT = "REVISION.txt" + + +def safe_isotime_to_datetime(str_isotime: str) -> datetime.datetime: + try: + return datetime.datetime.fromisoformat(str_isotime) + except ValueError: + pass + logger.warning("Invalid iso time: %s", str_isotime) + if str_isotime[-6:-5] in ("+", "-"): + # Commits can have isotime with invalid timezone offset (e.g. "2021-07-04T20:01:40+32:00") + modified_str_isotime = str_isotime[:-6] + "+00:00" + try: + return datetime.datetime.fromisoformat(modified_str_isotime) + except ValueError: + pass + raise ValueError(f"Invalid isotime: {str_isotime}") + + +def arc_join(*parts: list[str]) -> str: + assert all(p[:1] != "/" and p[-1:] != "/" for p in parts), f"None of {parts} may start or end with '/'" + return "/".join(p for p in parts if p) + + +@dataclasses.dataclass(frozen=True) +class VsArchPlatformConfig: + arch: str + configuration: str + platform: str + + def extra_context(self): + return { + "ARCH": self.arch, + "CONFIGURATION": self.configuration, + "PLATFORM": self.platform, + } + + +@contextlib.contextmanager +def chdir(path): + original_cwd = os.getcwd() + try: + os.chdir(path) + yield + finally: + os.chdir(original_cwd) + + +class Executer: + def __init__(self, root: Path, dry: bool=False): + self.root = root + self.dry = dry + + def run(self, cmd, cwd=None, env=None): + logger.info("Executing args=%r", cmd) + sys.stdout.flush() + if not self.dry: + subprocess.check_call(cmd, cwd=cwd or self.root, env=env, text=True) + + def check_output(self, cmd, cwd=None, dry_out=None, env=None, text=True): + logger.info("Executing args=%r", cmd) + sys.stdout.flush() + if self.dry: + return dry_out + return subprocess.check_output(cmd, cwd=cwd or self.root, env=env, text=text) + + +class SectionPrinter: + @contextlib.contextmanager + def group(self, title: str): + print(f"{title}:") + yield + + +class GitHubSectionPrinter(SectionPrinter): + def __init__(self): + super().__init__() + self.in_group = False + + @contextlib.contextmanager + def group(self, title: str): + print(f"::group::{title}") + assert not self.in_group, "Can enter a group only once" + self.in_group = True + yield + self.in_group = False + print("::endgroup::") + + +class VisualStudio: + def __init__(self, executer: Executer, year: typing.Optional[str]=None): + self.executer = executer + self.vsdevcmd = self.find_vsdevcmd(year) + self.msbuild = self.find_msbuild() + + @property + def dry(self) -> bool: + return self.executer.dry + + VS_YEAR_TO_VERSION = { + "2022": 17, + "2019": 16, + "2017": 15, + "2015": 14, + "2013": 12, + } + + def find_vsdevcmd(self, year: typing.Optional[str]=None) -> typing.Optional[Path]: + vswhere_spec = ["-latest"] + if year is not None: + try: + version = self.VS_YEAR_TO_VERSION[year] + except KeyError: + logger.error("Invalid Visual Studio year") + return None + vswhere_spec.extend(["-version", f"[{version},{version+1})"]) + vswhere_cmd = ["vswhere"] + vswhere_spec + ["-property", "installationPath"] + vs_install_path = Path(self.executer.check_output(vswhere_cmd, dry_out="/tmp").strip()) + logger.info("VS install_path = %s", vs_install_path) + assert vs_install_path.is_dir(), "VS installation path does not exist" + vsdevcmd_path = vs_install_path / "Common7/Tools/vsdevcmd.bat" + logger.info("vsdevcmd path = %s", vsdevcmd_path) + if self.dry: + vsdevcmd_path.parent.mkdir(parents=True, exist_ok=True) + vsdevcmd_path.touch(exist_ok=True) + assert vsdevcmd_path.is_file(), "vsdevcmd.bat batch file does not exist" + return vsdevcmd_path + + def find_msbuild(self) -> typing.Optional[Path]: + vswhere_cmd = ["vswhere", "-latest", "-requires", "Microsoft.Component.MSBuild", "-find", r"MSBuild\**\Bin\MSBuild.exe"] + msbuild_path = Path(self.executer.check_output(vswhere_cmd, dry_out="/tmp/MSBuild.exe").strip()) + logger.info("MSBuild path = %s", msbuild_path) + if self.dry: + msbuild_path.parent.mkdir(parents=True, exist_ok=True) + msbuild_path.touch(exist_ok=True) + assert msbuild_path.is_file(), "MSBuild.exe does not exist" + return msbuild_path + + def build(self, arch_platform: VsArchPlatformConfig, projects: list[Path]): + assert projects, "Need at least one project to build" + + vsdev_cmd_str = f"\"{self.vsdevcmd}\" -arch={arch_platform.arch}" + msbuild_cmd_str = " && ".join([f"\"{self.msbuild}\" \"{project}\" /m /p:BuildInParallel=true /p:Platform={arch_platform.platform} /p:Configuration={arch_platform.configuration}" for project in projects]) + bat_contents = f"{vsdev_cmd_str} && {msbuild_cmd_str}\n" + bat_path = Path(tempfile.gettempdir()) / "cmd.bat" + with bat_path.open("w") as f: + f.write(bat_contents) + + logger.info("Running cmd.exe script (%s): %s", bat_path, bat_contents) + cmd = ["cmd.exe", "/D", "/E:ON", "/V:OFF", "/S", "/C", f"CALL {str(bat_path)}"] + self.executer.run(cmd) + + +class Archiver: + def __init__(self, zip_path: typing.Optional[Path]=None, tgz_path: typing.Optional[Path]=None, txz_path: typing.Optional[Path]=None): + self._zip_files = [] + self._tar_files = [] + self._added_files = set() + if zip_path: + self._zip_files.append(zipfile.ZipFile(zip_path, "w", compression=zipfile.ZIP_DEFLATED)) + if tgz_path: + self._tar_files.append(tarfile.open(tgz_path, "w:gz")) + if txz_path: + self._tar_files.append(tarfile.open(txz_path, "w:xz")) + + @property + def added_files(self) -> set[str]: + return self._added_files + + def add_file_data(self, arcpath: str, data: bytes, mode: int, time: datetime.datetime): + for zf in self._zip_files: + file_data_time = (time.year, time.month, time.day, time.hour, time.minute, time.second) + zip_info = zipfile.ZipInfo(filename=arcpath, date_time=file_data_time) + zip_info.external_attr = mode << 16 + zip_info.compress_type = zipfile.ZIP_DEFLATED + zf.writestr(zip_info, data=data) + for tf in self._tar_files: + tar_info = tarfile.TarInfo(arcpath) + tar_info.type = tarfile.REGTYPE + tar_info.mode = mode + tar_info.size = len(data) + tar_info.mtime = int(time.timestamp()) + tf.addfile(tar_info, fileobj=io.BytesIO(data)) + + self._added_files.add(arcpath) + + def add_symlink(self, arcpath: str, target: str, time: datetime.datetime, files_for_zip): + logger.debug("Adding symlink (target=%r) -> %s", target, arcpath) + for zf in self._zip_files: + file_data_time = (time.year, time.month, time.day, time.hour, time.minute, time.second) + for f in files_for_zip: + zip_info = zipfile.ZipInfo(filename=f["arcpath"], date_time=file_data_time) + zip_info.external_attr = f["mode"] << 16 + zip_info.compress_type = zipfile.ZIP_DEFLATED + zf.writestr(zip_info, data=f["data"]) + for tf in self._tar_files: + tar_info = tarfile.TarInfo(arcpath) + tar_info.type = tarfile.SYMTYPE + tar_info.mode = 0o777 + tar_info.mtime = int(time.timestamp()) + tar_info.linkname = target + tf.addfile(tar_info) + + self._added_files.update(f["arcpath"] for f in files_for_zip) + + def add_git_hash(self, arcdir: str, commit: str, time: datetime.datetime): + arcpath = arc_join(arcdir, GIT_HASH_FILENAME) + data = f"{commit}\n".encode() + self.add_file_data(arcpath=arcpath, data=data, mode=0o100644, time=time) + + def add_file_path(self, arcpath: str, path: Path): + assert path.is_file(), f"{path} should be a file" + logger.debug("Adding %s -> %s", path, arcpath) + for zf in self._zip_files: + zf.write(path, arcname=arcpath) + for tf in self._tar_files: + tf.add(path, arcname=arcpath) + + def add_file_directory(self, arcdirpath: str, dirpath: Path): + assert dirpath.is_dir() + if arcdirpath and arcdirpath[-1:] != "/": + arcdirpath += "/" + for f in dirpath.iterdir(): + if f.is_file(): + arcpath = f"{arcdirpath}{f.name}" + logger.debug("Adding %s to %s", f, arcpath) + self.add_file_path(arcpath=arcpath, path=f) + + def close(self): + # Archiver is intentionally made invalid after this function + del self._zip_files + self._zip_files = None + del self._tar_files + self._tar_files = None + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + self.close() + + +class NodeInArchive: + def __init__(self, arcpath: str, path: typing.Optional[Path]=None, data: typing.Optional[bytes]=None, mode: typing.Optional[int]=None, symtarget: typing.Optional[str]=None, time: typing.Optional[datetime.datetime]=None, directory: bool=False): + self.arcpath = arcpath + self.path = path + self.data = data + self.mode = mode + self.symtarget = symtarget + self.time = time + self.directory = directory + + @classmethod + def from_fs(cls, arcpath: str, path: Path, mode: int=0o100644, time: typing.Optional[datetime.datetime]=None) -> "NodeInArchive": + if time is None: + time = datetime.datetime.fromtimestamp(os.stat(path).st_mtime) + return cls(arcpath=arcpath, path=path, mode=mode) + + @classmethod + def from_data(cls, arcpath: str, data: bytes, time: datetime.datetime) -> "NodeInArchive": + return cls(arcpath=arcpath, data=data, time=time, mode=0o100644) + + @classmethod + def from_text(cls, arcpath: str, text: str, time: datetime.datetime) -> "NodeInArchive": + return cls.from_data(arcpath=arcpath, data=text.encode(), time=time) + + @classmethod + def from_symlink(cls, arcpath: str, symtarget: str) -> "NodeInArchive": + return cls(arcpath=arcpath, symtarget=symtarget) + + @classmethod + def from_directory(cls, arcpath: str) -> "NodeInArchive": + return cls(arcpath=arcpath, directory=True) + + def __repr__(self) -> str: + return f"<{type(self).__name__}:arcpath={self.arcpath},path='{str(self.path)}',len(data)={len(self.data) if self.data else 'n/a'},directory={self.directory},symtarget={self.symtarget}>" + + +def configure_file(path: Path, context: dict[str, str]) -> bytes: + text = path.read_text() + return configure_text(text, context=context).encode() + + +def configure_text(text: str, context: dict[str, str]) -> str: + original_text = text + for txt, repl in context.items(): + text = text.replace(f"@<@{txt}@>@", repl) + success = all(thing not in text for thing in ("@<@", "@>@")) + if not success: + raise ValueError(f"Failed to configure {repr(original_text)}") + return text + + +def configure_text_list(text_list: list[str], context: dict[str, str]) -> list[str]: + return [configure_text(text=e, context=context) for e in text_list] + + +class ArchiveFileTree: + def __init__(self): + self._tree: dict[str, NodeInArchive] = {} + + def add_file(self, file: NodeInArchive): + self._tree[file.arcpath] = file + + def get_latest_mod_time(self) -> datetime.datetime: + return max(item.time for item in self._tree.values() if item.time) + + def add_to_archiver(self, archive_base: str, archiver: Archiver): + remaining_symlinks = set() + added_files = dict() + + def calculate_symlink_target(s: NodeInArchive) -> str: + dest_dir = os.path.dirname(s.arcpath) + if dest_dir: + dest_dir += "/" + target = dest_dir + s.symtarget + while True: + new_target, n = re.subn(r"([^/]+/+[.]{2}/)", "", target) + target = new_target + if not n: + break + return target + + # Add files in first pass + for arcpath, node in self._tree.items(): + assert node is not None, f"{arcpath} -> node" + if node.data is not None: + archiver.add_file_data(arcpath=arc_join(archive_base, arcpath), data=node.data, time=node.time, mode=node.mode) + assert node.arcpath is not None, f"{node=}" + added_files[node.arcpath] = node + elif node.path is not None: + archiver.add_file_path(arcpath=arc_join(archive_base, arcpath), path=node.path) + assert node.arcpath is not None, f"{node=}" + added_files[node.arcpath] = node + elif node.symtarget is not None: + remaining_symlinks.add(node) + elif node.directory: + pass + else: + raise ValueError(f"Invalid Archive Node: {repr(node)}") + + assert None not in added_files + + # Resolve symlinks in second pass: zipfile does not support symlinks, so add files to zip archive + while True: + if not remaining_symlinks: + break + symlinks_this_time = set() + extra_added_files = {} + for symlink in remaining_symlinks: + symlink_files_for_zip = {} + symlink_target_path = calculate_symlink_target(symlink) + if symlink_target_path in added_files: + symlink_files_for_zip[symlink.arcpath] = added_files[symlink_target_path] + else: + symlink_target_path_slash = symlink_target_path + "/" + for added_file in added_files: + if added_file.startswith(symlink_target_path_slash): + path_in_symlink = symlink.arcpath + "/" + added_file.removeprefix(symlink_target_path_slash) + symlink_files_for_zip[path_in_symlink] = added_files[added_file] + if symlink_files_for_zip: + symlinks_this_time.add(symlink) + extra_added_files.update(symlink_files_for_zip) + files_for_zip = [{"arcpath": f"{archive_base}/{sym_path}", "data": sym_info.data, "mode": sym_info.mode} for sym_path, sym_info in symlink_files_for_zip.items()] + archiver.add_symlink(arcpath=f"{archive_base}/{symlink.arcpath}", target=symlink.symtarget, time=symlink.time, files_for_zip=files_for_zip) + # if not symlinks_this_time: + # logger.info("files added: %r", set(path for path in added_files.keys())) + assert symlinks_this_time, f"No targets found for symlinks: {remaining_symlinks}" + remaining_symlinks.difference_update(symlinks_this_time) + added_files.update(extra_added_files) + + def add_directory_tree(self, arc_dir: str, path: Path, time: datetime.datetime): + assert path.is_dir() + for files_dir, _, filenames in os.walk(path): + files_dir_path = Path(files_dir) + rel_files_path = files_dir_path.relative_to(path) + for filename in filenames: + self.add_file(NodeInArchive.from_fs(arcpath=arc_join(arc_dir, str(rel_files_path), filename), path=files_dir_path / filename, time=time)) + + def _add_files_recursively(self, arc_dir: str, paths: list[Path], time: datetime.datetime): + logger.debug(f"_add_files_recursively({arc_dir=} {paths=})") + for path in paths: + arcpath = arc_join(arc_dir, path.name) + if path.is_file(): + logger.debug("Adding %s as %s", path, arcpath) + self.add_file(NodeInArchive.from_fs(arcpath=arcpath, path=path, time=time)) + elif path.is_dir(): + self._add_files_recursively(arc_dir=arc_join(arc_dir, path.name), paths=list(path.iterdir()), time=time) + else: + raise ValueError(f"Unsupported file type to add recursively: {path}") + + def add_file_mapping(self, arc_dir: str, file_mapping: dict[str, list[str]], file_mapping_root: Path, context: dict[str, str], time: datetime.datetime): + for meta_rel_destdir, meta_file_globs in file_mapping.items(): + rel_destdir = configure_text(meta_rel_destdir, context=context) + assert "@" not in rel_destdir, f"archive destination should not contain an @ after configuration ({repr(meta_rel_destdir)}->{repr(rel_destdir)})" + for meta_file_glob in meta_file_globs: + file_glob = configure_text(meta_file_glob, context=context) + assert "@" not in rel_destdir, f"archive glob should not contain an @ after configuration ({repr(meta_file_glob)}->{repr(file_glob)})" + if ":" in file_glob: + original_path, new_filename = file_glob.rsplit(":", 1) + assert ":" not in original_path, f"Too many ':' in {repr(file_glob)}" + assert "/" not in new_filename, f"New filename cannot contain a '/' in {repr(file_glob)}" + path = file_mapping_root / original_path + arcpath = arc_join(arc_dir, rel_destdir, new_filename) + if path.suffix == ".in": + data = configure_file(path, context=context) + logger.debug("Adding processed %s -> %s", path, arcpath) + self.add_file(NodeInArchive.from_data(arcpath=arcpath, data=data, time=time)) + else: + logger.debug("Adding %s -> %s", path, arcpath) + self.add_file(NodeInArchive.from_fs(arcpath=arcpath, path=path, time=time)) + else: + relative_file_paths = glob.glob(file_glob, root_dir=file_mapping_root) + assert relative_file_paths, f"Glob '{file_glob}' does not match any file" + self._add_files_recursively(arc_dir=arc_join(arc_dir, rel_destdir), paths=[file_mapping_root / p for p in relative_file_paths], time=time) + + +class SourceCollector: + # TreeItem = collections.namedtuple("TreeItem", ("path", "mode", "data", "symtarget", "directory", "time")) + def __init__(self, root: Path, commit: str, filter: typing.Optional[Callable[[str], bool]], executer: Executer): + self.root = root + self.commit = commit + self.filter = filter + self.executer = executer + + def get_archive_file_tree(self) -> ArchiveFileTree: + git_archive_args = ["git", "archive", "--format=tar.gz", self.commit, "-o", "/dev/stdout"] + logger.info("Executing args=%r", git_archive_args) + contents_tgz = subprocess.check_output(git_archive_args, cwd=self.root, text=False) + tar_archive = tarfile.open(fileobj=io.BytesIO(contents_tgz), mode="r:gz") + filenames = tuple(m.name for m in tar_archive if (m.isfile() or m.issym())) + + file_times = self._get_file_times(paths=filenames) + git_contents = ArchiveFileTree() + for ti in tar_archive: + if self.filter and not self.filter(ti.name): + continue + data = None + symtarget = None + directory = False + file_time = None + if ti.isfile(): + contents_file = tar_archive.extractfile(ti.name) + data = contents_file.read() + file_time = file_times[ti.name] + elif ti.issym(): + symtarget = ti.linkname + file_time = file_times[ti.name] + elif ti.isdir(): + directory = True + else: + raise ValueError(f"{ti.name}: unknown type") + node = NodeInArchive(arcpath=ti.name, data=data, mode=ti.mode, symtarget=symtarget, time=file_time, directory=directory) + git_contents.add_file(node) + return git_contents + + def _get_file_times(self, paths: tuple[str, ...]) -> dict[str, datetime.datetime]: + dry_out = textwrap.dedent("""\ + time=2024-03-14T15:40:25-07:00 + + M\tCMakeLists.txt + """) + git_log_out = self.executer.check_output(["git", "log", "--name-status", '--pretty=time=%cI', self.commit], dry_out=dry_out, cwd=self.root).splitlines(keepends=False) + current_time = None + set_paths = set(paths) + path_times: dict[str, datetime.datetime] = {} + for line in git_log_out: + if not line: + continue + if line.startswith("time="): + current_time = safe_isotime_to_datetime(line.removeprefix("time=")) + continue + mod_type, file_paths = line.split(maxsplit=1) + assert current_time is not None + for file_path in file_paths.split("\t"): + if file_path in set_paths and file_path not in path_times: + path_times[file_path] = current_time + + # FIXME: find out why some files are not shown in "git log" + # assert set(path_times.keys()) == set_paths + if set(path_times.keys()) != set_paths: + found_times = set(path_times.keys()) + paths_without_times = set_paths.difference(found_times) + logger.warning("No times found for these paths: %s", paths_without_times) + max_time = max(time for time in path_times.values()) + for path in paths_without_times: + path_times[path] = max_time + + return path_times + + +class Releaser: + def __init__(self, release_info: dict, commit: str, revision: str, root: Path, dist_path: Path, section_printer: SectionPrinter, executer: Executer, cmake_generator: str, deps_path: Path, overwrite: bool, github: bool, fast: bool): + self.release_info = release_info + self.project = release_info["name"] + self.version = self.extract_sdl_version(root=root, release_info=release_info) + self.root = root + self.commit = commit + self.revision = revision + self.dist_path = dist_path + self.section_printer = section_printer + self.executer = executer + self.cmake_generator = cmake_generator + self.cpu_count = multiprocessing.cpu_count() + self.deps_path = deps_path + self.overwrite = overwrite + self.github = github + self.fast = fast + self.arc_time = datetime.datetime.now() + + self.artifacts: dict[str, Path] = {} + + def get_context(self, extra_context: typing.Optional[dict[str, str]]=None) -> dict[str, str]: + ctx = { + "PROJECT_NAME": self.project, + "PROJECT_VERSION": self.version, + "PROJECT_COMMIT": self.commit, + "PROJECT_REVISION": self.revision, + "PROJECT_ROOT": str(self.root), + } + if extra_context: + ctx.update(extra_context) + return ctx + + @property + def dry(self) -> bool: + return self.executer.dry + + def prepare(self): + logger.debug("Creating dist folder") + self.dist_path.mkdir(parents=True, exist_ok=True) + + @classmethod + def _path_filter(cls, path: str) -> bool: + if ".gitmodules" in path: + return True + if path.startswith(".git"): + return False + return True + + @classmethod + def _external_repo_path_filter(cls, path: str) -> bool: + if not cls._path_filter(path): + return False + if path.startswith("test/") or path.startswith("tests/"): + return False + return True + + def create_source_archives(self) -> None: + source_collector = SourceCollector(root=self.root, commit=self.commit, executer=self.executer, filter=self._path_filter) + print(f"Collecting sources of {self.project}...") + archive_tree = source_collector.get_archive_file_tree() + latest_mod_time = archive_tree.get_latest_mod_time() + archive_tree.add_file(NodeInArchive.from_text(arcpath=REVISION_TXT, text=f"{self.revision}\n", time=latest_mod_time)) + archive_tree.add_file(NodeInArchive.from_text(arcpath=f"{GIT_HASH_FILENAME}", text=f"{self.commit}\n", time=latest_mod_time)) + archive_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["source"].get("files", {}), file_mapping_root=self.root, context=self.get_context(), time=latest_mod_time) + + archive_base = f"{self.project}-{self.version}" + zip_path = self.dist_path / f"{archive_base}.zip" + tgz_path = self.dist_path / f"{archive_base}.tar.gz" + txz_path = self.dist_path / f"{archive_base}.tar.xz" + + logger.info("Creating zip/tgz/txz source archives ...") + if self.dry: + zip_path.touch() + tgz_path.touch() + txz_path.touch() + else: + with Archiver(zip_path=zip_path, tgz_path=tgz_path, txz_path=txz_path) as archiver: + print(f"Adding source files of {self.project}...") + archive_tree.add_to_archiver(archive_base=archive_base, archiver=archiver) + + for extra_repo in self.release_info["source"].get("extra-repos", []): + extra_repo_root = self.root / extra_repo + assert (extra_repo_root / ".git").exists(), f"{extra_repo_root} must be a git repo" + extra_repo_commit = self.executer.check_output(["git", "rev-parse", "HEAD"], dry_out=f"gitsha-extra-repo-{extra_repo}", cwd=extra_repo_root).strip() + extra_repo_source_collector = SourceCollector(root=extra_repo_root, commit=extra_repo_commit, executer=self.executer, filter=self._external_repo_path_filter) + print(f"Collecting sources of {extra_repo} ...") + extra_repo_archive_tree = extra_repo_source_collector.get_archive_file_tree() + print(f"Adding source files of {extra_repo} ...") + extra_repo_archive_tree.add_to_archiver(archive_base=f"{archive_base}/{extra_repo}", archiver=archiver) + + for file in self.release_info["source"]["checks"]: + assert f"{archive_base}/{file}" in archiver.added_files, f"'{archive_base}/{file}' must exist" + + logger.info("... done") + + self.artifacts["src-zip"] = zip_path + self.artifacts["src-tar-gz"] = tgz_path + self.artifacts["src-tar-xz"] = txz_path + + if not self.dry: + with tgz_path.open("r+b") as f: + # Zero the embedded timestamp in the gzip'ed tarball + f.seek(4, 0) + f.write(b"\x00\x00\x00\x00") + + def create_dmg(self, configuration: str="Release") -> None: + dmg_in = self.root / self.release_info["dmg"]["path"] + xcode_project = self.root / self.release_info["dmg"]["project"] + assert xcode_project.is_dir(), f"{xcode_project} must be a directory" + assert (xcode_project / "project.pbxproj").is_file, f"{xcode_project} must contain project.pbxproj" + if not self.fast: + dmg_in.unlink(missing_ok=True) + build_xcconfig = self.release_info["dmg"].get("build-xcconfig") + if build_xcconfig: + shutil.copy(self.root / build_xcconfig, xcode_project.parent / "build.xcconfig") + + xcode_scheme = self.release_info["dmg"].get("scheme") + xcode_target = self.release_info["dmg"].get("target") + assert xcode_scheme or xcode_target, "dmg needs scheme or target" + assert not (xcode_scheme and xcode_target), "dmg cannot have both scheme and target set" + if xcode_scheme: + scheme_or_target = "-scheme" + target_like = xcode_scheme + else: + scheme_or_target = "-target" + target_like = xcode_target + self.executer.run(["xcodebuild", "ONLY_ACTIVE_ARCH=NO", "-project", xcode_project, scheme_or_target, target_like, "-configuration", configuration]) + if self.dry: + dmg_in.parent.mkdir(parents=True, exist_ok=True) + dmg_in.touch() + + assert dmg_in.is_file(), f"{self.project}.dmg was not created by xcodebuild" + + dmg_out = self.dist_path / f"{self.project}-{self.version}.dmg" + shutil.copy(dmg_in, dmg_out) + self.artifacts["dmg"] = dmg_out + + @property + def git_hash_data(self) -> bytes: + return f"{self.commit}\n".encode() + + def create_mingw_archives(self) -> None: + build_type = "Release" + build_parent_dir = self.root / "build-mingw" + ARCH_TO_GNU_ARCH = { + # "arm64": "aarch64", + "x86": "i686", + "x64": "x86_64", + } + ARCH_TO_TRIPLET = { + # "arm64": "aarch64-w64-mingw32", + "x86": "i686-w64-mingw32", + "x64": "x86_64-w64-mingw32", + } + + new_env = dict(os.environ) + + cmake_prefix_paths = [] + mingw_deps_path = self.deps_path / "mingw-deps" + + if "dependencies" in self.release_info["mingw"]: + shutil.rmtree(mingw_deps_path, ignore_errors=True) + mingw_deps_path.mkdir() + + for triplet in ARCH_TO_TRIPLET.values(): + (mingw_deps_path / triplet).mkdir() + + def extract_filter(member: tarfile.TarInfo, path: str, /): + if member.name.startswith("SDL"): + member.name = "/".join(Path(member.name).parts[1:]) + return member + for dep in self.release_info.get("dependencies", {}): + extract_path = mingw_deps_path / f"extract-{dep}" + extract_path.mkdir() + with chdir(extract_path): + tar_path = self.deps_path / glob.glob(self.release_info["mingw"]["dependencies"][dep]["artifact"], root_dir=self.deps_path)[0] + logger.info("Extracting %s to %s", tar_path, mingw_deps_path) + assert tar_path.suffix in (".gz", ".xz") + with tarfile.open(tar_path, mode=f"r:{tar_path.suffix.strip('.')}") as tarf: + tarf.extractall(filter=extract_filter) + for arch, triplet in ARCH_TO_TRIPLET.items(): + install_cmd = self.release_info["mingw"]["dependencies"][dep]["install-command"] + extra_configure_data = { + "ARCH": ARCH_TO_GNU_ARCH[arch], + "TRIPLET": triplet, + "PREFIX": str(mingw_deps_path / triplet), + } + install_cmd = configure_text(install_cmd, context=self.get_context(extra_configure_data)) + self.executer.run(shlex.split(install_cmd), cwd=str(extract_path)) + + dep_binpath = mingw_deps_path / triplet / "bin" + assert dep_binpath.is_dir(), f"{dep_binpath} for PATH should exist" + dep_pkgconfig = mingw_deps_path / triplet / "lib/pkgconfig" + assert dep_pkgconfig.is_dir(), f"{dep_pkgconfig} for PKG_CONFIG_PATH should exist" + + new_env["PATH"] = os.pathsep.join([str(dep_binpath), new_env["PATH"]]) + new_env["PKG_CONFIG_PATH"] = str(dep_pkgconfig) + cmake_prefix_paths.append(mingw_deps_path) + + new_env["CFLAGS"] = f"-O2 -ffile-prefix-map={self.root}=/src/{self.project}" + new_env["CXXFLAGS"] = f"-O2 -ffile-prefix-map={self.root}=/src/{self.project}" + + assert any(system in self.release_info["mingw"] for system in ("autotools", "cmake")) + assert not all(system in self.release_info["mingw"] for system in ("autotools", "cmake")) + + mingw_archs = set() + arc_root = f"{self.project}-{self.version}" + archive_file_tree = ArchiveFileTree() + + if "autotools" in self.release_info["mingw"]: + for arch in self.release_info["mingw"]["autotools"]["archs"]: + triplet = ARCH_TO_TRIPLET[arch] + new_env["CC"] = f"{triplet}-gcc" + new_env["CXX"] = f"{triplet}-g++" + new_env["RC"] = f"{triplet}-windres" + + assert arch not in mingw_archs + mingw_archs.add(arch) + + build_path = build_parent_dir / f"build-{triplet}" + install_path = build_parent_dir / f"install-{triplet}" + shutil.rmtree(install_path, ignore_errors=True) + build_path.mkdir(parents=True, exist_ok=True) + context = self.get_context({ + "ARCH": arch, + "DEP_PREFIX": str(mingw_deps_path / triplet), + }) + extra_args = configure_text_list(text_list=self.release_info["mingw"]["autotools"]["args"], context=context) + + with self.section_printer.group(f"Configuring MinGW {triplet} (autotools)"): + assert "@" not in " ".join(extra_args), f"@ should not be present in extra arguments ({extra_args})" + self.executer.run([ + self.root / "configure", + f"--prefix={install_path}", + f"--includedir=${{prefix}}/include", + f"--libdir=${{prefix}}/lib", + f"--bindir=${{prefix}}/bin", + f"--exec-prefix=${{prefix}}/bin", + f"--host={triplet}", + f"--build=x86_64-none-linux-gnu", + "CFLAGS=-O2", + "CXXFLAGS=-O2", + "LDFLAGS=-Wl,-s", + ] + extra_args, cwd=build_path, env=new_env) + with self.section_printer.group(f"Build MinGW {triplet} (autotools)"): + self.executer.run(["make", "V=1", f"-j{self.cpu_count}"], cwd=build_path, env=new_env) + with self.section_printer.group(f"Install MinGW {triplet} (autotools)"): + self.executer.run(["make", "install"], cwd=build_path, env=new_env) + archive_file_tree.add_directory_tree(arc_dir=arc_join(arc_root, triplet), path=install_path, time=self.arc_time) + + print("Recording arch-dependent extra files for MinGW development archive ...") + extra_context = { + "TRIPLET": ARCH_TO_TRIPLET[arch], + } + archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["mingw"]["autotools"].get("files", {}), file_mapping_root=self.root, context=self.get_context(extra_context=extra_context), time=self.arc_time) + + if "cmake" in self.release_info["mingw"]: + assert self.release_info["mingw"]["cmake"]["shared-static"] in ("args", "both") + for arch in self.release_info["mingw"]["cmake"]["archs"]: + triplet = ARCH_TO_TRIPLET[arch] + new_env["CC"] = f"{triplet}-gcc" + new_env["CXX"] = f"{triplet}-g++" + new_env["RC"] = f"{triplet}-windres" + + assert arch not in mingw_archs + mingw_archs.add(arch) + + context = self.get_context({ + "ARCH": arch, + "DEP_PREFIX": str(mingw_deps_path / triplet), + }) + extra_args = configure_text_list(text_list=self.release_info["mingw"]["cmake"]["args"], context=context) + + build_path = build_parent_dir / f"build-{triplet}" + install_path = build_parent_dir / f"install-{triplet}" + shutil.rmtree(install_path, ignore_errors=True) + build_path.mkdir(parents=True, exist_ok=True) + if self.release_info["mingw"]["cmake"]["shared-static"] == "args": + args_for_shared_static = ([], ) + elif self.release_info["mingw"]["cmake"]["shared-static"] == "both": + args_for_shared_static = (["-DBUILD_SHARED_LIBS=ON"], ["-DBUILD_SHARED_LIBS=OFF"]) + for arg_for_shared_static in args_for_shared_static: + with self.section_printer.group(f"Configuring MinGW {triplet} (CMake)"): + assert "@" not in " ".join(extra_args), f"@ should not be present in extra arguments ({extra_args})" + self.executer.run([ + f"cmake", + f"-S", str(self.root), "-B", str(build_path), + f"-DCMAKE_BUILD_TYPE={build_type}", + f'''-DCMAKE_C_FLAGS="-ffile-prefix-map={self.root}=/src/{self.project}"''', + f'''-DCMAKE_CXX_FLAGS="-ffile-prefix-map={self.root}=/src/{self.project}"''', + f"-DCMAKE_PREFIX_PATH={mingw_deps_path / triplet}", + f"-DCMAKE_INSTALL_PREFIX={install_path}", + f"-DCMAKE_INSTALL_INCLUDEDIR=include", + f"-DCMAKE_INSTALL_LIBDIR=lib", + f"-DCMAKE_INSTALL_BINDIR=bin", + f"-DCMAKE_INSTALL_DATAROOTDIR=share", + f"-DCMAKE_TOOLCHAIN_FILE={self.root}/build-scripts/cmake-toolchain-mingw64-{ARCH_TO_GNU_ARCH[arch]}.cmake", + f"-G{self.cmake_generator}", + ] + extra_args + ([] if self.fast else ["--fresh"]) + arg_for_shared_static, cwd=build_path, env=new_env) + with self.section_printer.group(f"Build MinGW {triplet} (CMake)"): + self.executer.run(["cmake", "--build", str(build_path), "--verbose", "--config", build_type], cwd=build_path, env=new_env) + with self.section_printer.group(f"Install MinGW {triplet} (CMake)"): + self.executer.run(["cmake", "--install", str(build_path)], cwd=build_path, env=new_env) + archive_file_tree.add_directory_tree(arc_dir=arc_join(arc_root, triplet), path=install_path, time=self.arc_time) + + print("Recording arch-dependent extra files for MinGW development archive ...") + extra_context = { + "TRIPLET": ARCH_TO_TRIPLET[arch], + } + archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["mingw"]["cmake"].get("files", {}), file_mapping_root=self.root, context=self.get_context(extra_context=extra_context), time=self.arc_time) + print("... done") + + print("Recording extra files for MinGW development archive ...") + archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["mingw"].get("files", {}), file_mapping_root=self.root, context=self.get_context(), time=self.arc_time) + print("... done") + + print("Creating zip/tgz/txz development archives ...") + zip_path = self.dist_path / f"{self.project}-devel-{self.version}-mingw.zip" + tgz_path = self.dist_path / f"{self.project}-devel-{self.version}-mingw.tar.gz" + txz_path = self.dist_path / f"{self.project}-devel-{self.version}-mingw.tar.xz" + + with Archiver(zip_path=zip_path, tgz_path=tgz_path, txz_path=txz_path) as archiver: + archive_file_tree.add_to_archiver(archive_base="", archiver=archiver) + archiver.add_git_hash(arcdir=arc_root, commit=self.commit, time=self.arc_time) + print("... done") + + self.artifacts["mingw-devel-zip"] = zip_path + self.artifacts["mingw-devel-tar-gz"] = tgz_path + self.artifacts["mingw-devel-tar-xz"] = txz_path + + def _detect_android_api(self, android_home: str) -> typing.Optional[int]: + platform_dirs = list(Path(p) for p in glob.glob(f"{android_home}/platforms/android-*")) + re_platform = re.compile("android-([0-9]+)") + platform_versions = [] + for platform_dir in platform_dirs: + logger.debug("Found Android Platform SDK: %s", platform_dir) + if m:= re_platform.match(platform_dir.name): + platform_versions.append(int(m.group(1))) + platform_versions.sort() + logger.info("Available platform versions: %s", platform_versions) + platform_versions = list(filter(lambda v: v >= self._android_api_minimum, platform_versions)) + logger.info("Valid platform versions (>=%d): %s", self._android_api_minimum, platform_versions) + if not platform_versions: + return None + android_api = platform_versions[0] + logger.info("Selected API version %d", android_api) + return android_api + + def _get_prefab_json_text(self) -> str: + return textwrap.dedent(f"""\ + {{ + "schema_version": 2, + "name": "{self.project}", + "version": "{self.version}", + "dependencies": [] + }} + """) + + def _get_prefab_module_json_text(self, library_name: typing.Optional[str], export_libraries: list[str]) -> str: + for lib in export_libraries: + assert isinstance(lib, str), f"{lib} must be a string" + module_json_dict = { + "export_libraries": export_libraries, + } + if library_name: + module_json_dict["library_name"] = f"lib{library_name}" + return json.dumps(module_json_dict, indent=4) + + @property + def _android_api_minimum(self): + return self.release_info["android"]["api-minimum"] + + @property + def _android_api_target(self): + return self.release_info["android"]["api-target"] + + @property + def _android_ndk_minimum(self): + return self.release_info["android"]["ndk-minimum"] + + def _get_prefab_abi_json_text(self, abi: str, cpp: bool, shared: bool) -> str: + abi_json_dict = { + "abi": abi, + "api": self._android_api_minimum, + "ndk": self._android_ndk_minimum, + "stl": "c++_shared" if cpp else "none", + "static": not shared, + } + return json.dumps(abi_json_dict, indent=4) + + def _get_android_manifest_text(self) -> str: + return textwrap.dedent(f"""\ + + + + """) + + def create_android_archives(self, android_api: int, android_home: Path, android_ndk_home: Path) -> None: + cmake_toolchain_file = Path(android_ndk_home) / "build/cmake/android.toolchain.cmake" + if not cmake_toolchain_file.exists(): + logger.error("CMake toolchain file does not exist (%s)", cmake_toolchain_file) + raise SystemExit(1) + aar_path = self.dist_path / f"{self.project}-{self.version}.aar" + android_abis = self.release_info["android"]["abis"] + java_jars_added = False + module_data_added = False + android_deps_path = self.deps_path / "android-deps" + shutil.rmtree(android_deps_path, ignore_errors=True) + + for dep, depinfo in self.release_info["android"].get("dependencies", {}).items(): + android_aar = self.deps_path / glob.glob(depinfo["artifact"], root_dir=self.deps_path)[0] + with self.section_printer.group(f"Extracting Android dependency {dep} ({android_aar.name})"): + self.executer.run([sys.executable, str(android_aar), "-o", str(android_deps_path)]) + + for module_name, module_info in self.release_info["android"]["modules"].items(): + assert "type" in module_info and module_info["type"] in ("interface", "library"), f"module {module_name} must have a valid type" + + archive_file_tree = ArchiveFileTree() + + for android_abi in android_abis: + with self.section_printer.group(f"Building for Android {android_api} {android_abi}"): + build_dir = self.root / "build-android" / f"{android_abi}-build" + install_dir = self.root / "install-android" / f"{android_abi}-install" + shutil.rmtree(install_dir, ignore_errors=True) + assert not install_dir.is_dir(), f"{install_dir} should not exist prior to build" + build_type = "Release" + cmake_args = [ + "cmake", + "-S", str(self.root), + "-B", str(build_dir), + f'''-DCMAKE_C_FLAGS="-ffile-prefix-map={self.root}=/src/{self.project}"''', + f'''-DCMAKE_CXX_FLAGS="-ffile-prefix-map={self.root}=/src/{self.project}"''', + f"-DCMAKE_TOOLCHAIN_FILE={cmake_toolchain_file}", + f"-DCMAKE_PREFIX_PATH={str(android_deps_path)}", + f"-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH", + f"-DANDROID_HOME={android_home}", + f"-DANDROID_PLATFORM={android_api}", + f"-DANDROID_ABI={android_abi}", + "-DCMAKE_POSITION_INDEPENDENT_CODE=ON", + f"-DCMAKE_INSTALL_PREFIX={install_dir}", + "-DCMAKE_INSTALL_INCLUDEDIR=include ", + "-DCMAKE_INSTALL_LIBDIR=lib", + "-DCMAKE_INSTALL_DATAROOTDIR=share", + f"-DCMAKE_BUILD_TYPE={build_type}", + f"-G{self.cmake_generator}", + ] + self.release_info["android"]["cmake"]["args"] + ([] if self.fast else ["--fresh"]) + build_args = [ + "cmake", + "--build", str(build_dir), + "--verbose", + "--config", build_type, + ] + install_args = [ + "cmake", + "--install", str(build_dir), + "--config", build_type, + ] + self.executer.run(cmake_args) + self.executer.run(build_args) + self.executer.run(install_args) + + for module_name, module_info in self.release_info["android"]["modules"].items(): + arcdir_prefab_module = f"prefab/modules/{module_name}" + if module_info["type"] == "library": + library = install_dir / module_info["library"] + assert library.suffix in (".so", ".a") + assert library.is_file(), f"CMake should have built library '{library}' for module {module_name}" + arcdir_prefab_libs = f"{arcdir_prefab_module}/libs/android.{android_abi}" + archive_file_tree.add_file(NodeInArchive.from_fs(arcpath=f"{arcdir_prefab_libs}/{library.name}", path=library, time=self.arc_time)) + archive_file_tree.add_file(NodeInArchive.from_text(arcpath=f"{arcdir_prefab_libs}/abi.json", text=self._get_prefab_abi_json_text(abi=android_abi, cpp=False, shared=library.suffix == ".so"), time=self.arc_time)) + + if not module_data_added: + library_name = None + if module_info["type"] == "library": + library_name = Path(module_info["library"]).stem.removeprefix("lib") + export_libraries = module_info.get("export-libraries", []) + archive_file_tree.add_file(NodeInArchive.from_text(arcpath=arc_join(arcdir_prefab_module, "module.json"), text=self._get_prefab_module_json_text(library_name=library_name, export_libraries=export_libraries), time=self.arc_time)) + arcdir_prefab_include = f"prefab/modules/{module_name}/include" + if "includes" in module_info: + archive_file_tree.add_file_mapping(arc_dir=arcdir_prefab_include, file_mapping=module_info["includes"], file_mapping_root=install_dir, context=self.get_context(), time=self.arc_time) + else: + archive_file_tree.add_file(NodeInArchive.from_text(arcpath=arc_join(arcdir_prefab_include, ".keep"), text="\n", time=self.arc_time)) + module_data_added = True + + if not java_jars_added: + java_jars_added = True + if "jars" in self.release_info["android"]: + classes_jar_path = install_dir / configure_text(text=self.release_info["android"]["jars"]["classes"], context=self.get_context()) + sources_jar_path = install_dir / configure_text(text=self.release_info["android"]["jars"]["sources"], context=self.get_context()) + doc_jar_path = install_dir / configure_text(text=self.release_info["android"]["jars"]["doc"], context=self.get_context()) + assert classes_jar_path.is_file(), f"CMake should have compiled the java sources and archived them into a JAR ({classes_jar_path})" + assert sources_jar_path.is_file(), f"CMake should have archived the java sources into a JAR ({sources_jar_path})" + assert doc_jar_path.is_file(), f"CMake should have archived javadoc into a JAR ({doc_jar_path})" + + archive_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes.jar", path=classes_jar_path, time=self.arc_time)) + archive_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes-sources.jar", path=sources_jar_path, time=self.arc_time)) + archive_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes-doc.jar", path=doc_jar_path, time=self.arc_time)) + + assert ("jars" in self.release_info["android"] and java_jars_added) or "jars" not in self.release_info["android"], "Must have archived java JAR archives" + + archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["android"].get("files", {}), file_mapping_root=self.root, context=self.get_context(), time=self.arc_time) + + archive_file_tree.add_file(NodeInArchive.from_text(arcpath="prefab/prefab.json", text=self._get_prefab_json_text(), time=self.arc_time)) + archive_file_tree.add_file(NodeInArchive.from_text(arcpath="AndroidManifest.xml", text=self._get_android_manifest_text(), time=self.arc_time)) + + with Archiver(zip_path=aar_path) as archiver: + archive_file_tree.add_to_archiver(archive_base="", archiver=archiver) + archiver.add_git_hash(arcdir="", commit=self.commit, time=self.arc_time) + self.artifacts[f"android-aar"] = aar_path + + def download_dependencies(self): + shutil.rmtree(self.deps_path, ignore_errors=True) + self.deps_path.mkdir(parents=True) + + if self.github: + with open(os.environ["GITHUB_OUTPUT"], "a") as f: + f.write(f"dep-path={self.deps_path.absolute()}\n") + + for dep, depinfo in self.release_info.get("dependencies", {}).items(): + startswith = depinfo["startswith"] + dep_repo = depinfo["repo"] + # FIXME: dropped "--exclude-pre-releases" + dep_string_data = self.executer.check_output(["gh", "-R", dep_repo, "release", "list", "--exclude-drafts", "--json", "name,createdAt,tagName", "--jq", f'[.[]|select(.name|startswith("{startswith}"))]|max_by(.createdAt)']).strip() + dep_data = json.loads(dep_string_data) + dep_tag = dep_data["tagName"] + dep_version = dep_data["name"] + logger.info("Download dependency %s version %s (tag=%s) ", dep, dep_version, dep_tag) + self.executer.run(["gh", "-R", dep_repo, "release", "download", dep_tag], cwd=self.deps_path) + if self.github: + with open(os.environ["GITHUB_OUTPUT"], "a") as f: + f.write(f"dep-{dep.lower()}-version={dep_version}\n") + + def verify_dependencies(self): + for dep, depinfo in self.release_info.get("dependencies", {}).items(): + if "mingw" in self.release_info: + mingw_matches = glob.glob(self.release_info["mingw"]["dependencies"][dep]["artifact"], root_dir=self.deps_path) + assert len(mingw_matches) == 1, f"Exactly one archive matches mingw {dep} dependency: {mingw_matches}" + if "dmg" in self.release_info: + dmg_matches = glob.glob(self.release_info["dmg"]["dependencies"][dep]["artifact"], root_dir=self.deps_path) + assert len(dmg_matches) == 1, f"Exactly one archive matches dmg {dep} dependency: {dmg_matches}" + if "msvc" in self.release_info: + msvc_matches = glob.glob(self.release_info["msvc"]["dependencies"][dep]["artifact"], root_dir=self.deps_path) + assert len(msvc_matches) == 1, f"Exactly one archive matches msvc {dep} dependency: {msvc_matches}" + if "android" in self.release_info: + android_matches = glob.glob(self.release_info["android"]["dependencies"][dep]["artifact"], root_dir=self.deps_path) + assert len(android_matches) == 1, f"Exactly one archive matches msvc {dep} dependency: {msvc_matches}" + + @staticmethod + def _arch_to_vs_platform(arch: str, configuration: str="Release") -> VsArchPlatformConfig: + ARCH_TO_VS_PLATFORM = { + "x86": VsArchPlatformConfig(arch="x86", platform="Win32", configuration=configuration), + "x64": VsArchPlatformConfig(arch="x64", platform="x64", configuration=configuration), + "arm64": VsArchPlatformConfig(arch="arm64", platform="ARM64", configuration=configuration), + } + return ARCH_TO_VS_PLATFORM[arch] + + def build_msvc(self): + with self.section_printer.group("Find Visual Studio"): + vs = VisualStudio(executer=self.executer) + for arch in self.release_info["msvc"].get("msbuild", {}).get("archs", []): + self._build_msvc_msbuild(arch_platform=self._arch_to_vs_platform(arch=arch), vs=vs) + if "cmake" in self.release_info["msvc"]: + deps_path = self.root / "msvc-deps" + shutil.rmtree(deps_path, ignore_errors=True) + dep_roots = [] + for dep, depinfo in self.release_info["msvc"].get("dependencies", {}).items(): + dep_extract_path = deps_path / f"extract-{dep}" + msvc_zip = self.deps_path / glob.glob(depinfo["artifact"], root_dir=self.deps_path)[0] + with zipfile.ZipFile(msvc_zip, "r") as zf: + zf.extractall(dep_extract_path) + contents_msvc_zip = glob.glob(str(dep_extract_path / "*")) + assert len(contents_msvc_zip) == 1, f"There must be exactly one root item in the root directory of {dep}" + dep_roots.append(contents_msvc_zip[0]) + + for arch in self.release_info["msvc"].get("cmake", {}).get("archs", []): + self._build_msvc_cmake(arch_platform=self._arch_to_vs_platform(arch=arch), dep_roots=dep_roots) + with self.section_printer.group("Create SDL VC development zip"): + self._build_msvc_devel() + + def _build_msvc_msbuild(self, arch_platform: VsArchPlatformConfig, vs: VisualStudio): + platform_context = self.get_context(arch_platform.extra_context()) + for dep, depinfo in self.release_info["msvc"].get("dependencies", {}).items(): + msvc_zip = self.deps_path / glob.glob(depinfo["artifact"], root_dir=self.deps_path)[0] + + src_globs = [configure_text(instr["src"], context=platform_context) for instr in depinfo["copy"]] + with zipfile.ZipFile(msvc_zip, "r") as zf: + for member in zf.namelist(): + member_path = "/".join(Path(member).parts[1:]) + for src_i, src_glob in enumerate(src_globs): + if fnmatch.fnmatch(member_path, src_glob): + dst = (self.root / configure_text(depinfo["copy"][src_i]["dst"], context=platform_context)).resolve() / Path(member_path).name + zip_data = zf.read(member) + if dst.exists(): + identical = False + if dst.is_file(): + orig_bytes = dst.read_bytes() + if orig_bytes == zip_data: + identical = True + if not identical: + logger.warning("Extracting dependency %s, will cause %s to be overwritten", dep, dst) + if not self.overwrite: + raise RuntimeError("Run with --overwrite to allow overwriting") + logger.debug("Extracting %s -> %s", member, dst) + + dst.parent.mkdir(exist_ok=True, parents=True) + dst.write_bytes(zip_data) + + prebuilt_paths = set(self.root / full_prebuilt_path for prebuilt_path in self.release_info["msvc"]["msbuild"].get("prebuilt", []) for full_prebuilt_path in glob.glob(configure_text(prebuilt_path, context=platform_context), root_dir=self.root)) + msbuild_paths = set(self.root / configure_text(f, context=platform_context) for file_mapping in (self.release_info["msvc"]["msbuild"]["files-lib"], self.release_info["msvc"]["msbuild"]["files-devel"]) for files_list in file_mapping.values() for f in files_list) + assert prebuilt_paths.issubset(msbuild_paths), f"msvc.msbuild.prebuilt must be a subset of (msvc.msbuild.files-lib, msvc.msbuild.files-devel)" + built_paths = msbuild_paths.difference(prebuilt_paths) + logger.info("MSbuild builds these files, to be included in the package: %s", built_paths) + if not self.fast: + for b in built_paths: + b.unlink(missing_ok=True) + + rel_projects: list[str] = self.release_info["msvc"]["msbuild"]["projects"] + projects = list(self.root / p for p in rel_projects) + + directory_build_props_src_relpath = self.release_info["msvc"]["msbuild"].get("directory-build-props") + for project in projects: + dir_b_props = project.parent / "Directory.Build.props" + dir_b_props.unlink(missing_ok = True) + if directory_build_props_src_relpath: + src = self.root / directory_build_props_src_relpath + logger.debug("Copying %s -> %s", src, dir_b_props) + shutil.copy(src=src, dst=dir_b_props) + + with self.section_printer.group(f"Build {arch_platform.arch} VS binary"): + vs.build(arch_platform=arch_platform, projects=projects) + + if self.dry: + for b in built_paths: + b.parent.mkdir(parents=True, exist_ok=True) + b.touch() + + for b in built_paths: + assert b.is_file(), f"{b} has not been created" + b.parent.mkdir(parents=True, exist_ok=True) + b.touch() + + zip_path = self.dist_path / f"{self.project}-{self.version}-win32-{arch_platform.arch}.zip" + zip_path.unlink(missing_ok=True) + + logger.info("Collecting files...") + archive_file_tree = ArchiveFileTree() + archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["msvc"]["msbuild"]["files-lib"], file_mapping_root=self.root, context=platform_context, time=self.arc_time) + archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["msvc"]["files-lib"], file_mapping_root=self.root, context=platform_context, time=self.arc_time) + + logger.info("Writing to %s", zip_path) + with Archiver(zip_path=zip_path) as archiver: + arc_root = f"" + archive_file_tree.add_to_archiver(archive_base=arc_root, archiver=archiver) + archiver.add_git_hash(arcdir=arc_root, commit=self.commit, time=self.arc_time) + self.artifacts[f"VC-{arch_platform.arch}"] = zip_path + + for p in built_paths: + assert p.is_file(), f"{p} should exist" + + def _arch_platform_to_build_path(self, arch_platform: VsArchPlatformConfig) -> Path: + return self.root / f"build-vs-{arch_platform.arch}" + + def _arch_platform_to_install_path(self, arch_platform: VsArchPlatformConfig) -> Path: + return self._arch_platform_to_build_path(arch_platform) / "prefix" + + def _build_msvc_cmake(self, arch_platform: VsArchPlatformConfig, dep_roots: list[Path]): + build_path = self._arch_platform_to_build_path(arch_platform) + install_path = self._arch_platform_to_install_path(arch_platform) + platform_context = self.get_context(extra_context=arch_platform.extra_context()) + + build_type = "Release" + + built_paths = set(install_path / configure_text(f, context=platform_context) for file_mapping in (self.release_info["msvc"]["cmake"]["files-lib"], self.release_info["msvc"]["cmake"]["files-devel"]) for files_list in file_mapping.values() for f in files_list) + logger.info("CMake builds these files, to be included in the package: %s", built_paths) + if not self.fast: + for b in built_paths: + b.unlink(missing_ok=True) + + shutil.rmtree(install_path, ignore_errors=True) + build_path.mkdir(parents=True, exist_ok=True) + with self.section_printer.group(f"Configure VC CMake project for {arch_platform.arch}"): + self.executer.run([ + "cmake", "-S", str(self.root), "-B", str(build_path), + "-A", arch_platform.platform, + "-DCMAKE_INSTALL_BINDIR=bin", + "-DCMAKE_INSTALL_DATAROOTDIR=share", + "-DCMAKE_INSTALL_INCLUDEDIR=include", + "-DCMAKE_INSTALL_LIBDIR=lib", + f"-DCMAKE_BUILD_TYPE={build_type}", + f"-DCMAKE_INSTALL_PREFIX={install_path}", + # MSVC debug information format flags are selected by an abstraction + "-DCMAKE_POLICY_DEFAULT_CMP0141=NEW", + # MSVC debug information format + "-DCMAKE_MSVC_DEBUG_INFORMATION_FORMAT=ProgramDatabase", + # Linker flags for executables + "-DCMAKE_EXE_LINKER_FLAGS=-INCREMENTAL:NO -DEBUG -OPT:REF -OPT:ICF", + # Linker flag for shared libraries + "-DCMAKE_SHARED_LINKER_FLAGS=-INCREMENTAL:NO -DEBUG -OPT:REF -OPT:ICF", + # MSVC runtime library flags are selected by an abstraction + "-DCMAKE_POLICY_DEFAULT_CMP0091=NEW", + # Use statically linked runtime (-MT) (ideally, should be "MultiThreaded$<$:Debug>") + "-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded", + f"-DCMAKE_PREFIX_PATH={';'.join(str(s) for s in dep_roots)}", + ] + self.release_info["msvc"]["cmake"]["args"] + ([] if self.fast else ["--fresh"])) + + with self.section_printer.group(f"Build VC CMake project for {arch_platform.arch}"): + self.executer.run(["cmake", "--build", str(build_path), "--verbose", "--config", build_type]) + with self.section_printer.group(f"Install VC CMake project for {arch_platform.arch}"): + self.executer.run(["cmake", "--install", str(build_path), "--config", build_type]) + + if self.dry: + for b in built_paths: + b.parent.mkdir(parents=True, exist_ok=True) + b.touch() + + zip_path = self.dist_path / f"{self.project}-{self.version}-win32-{arch_platform.arch}.zip" + zip_path.unlink(missing_ok=True) + + logger.info("Collecting files...") + archive_file_tree = ArchiveFileTree() + archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["msvc"]["cmake"]["files-lib"], file_mapping_root=install_path, context=platform_context, time=self.arc_time) + archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["msvc"]["files-lib"], file_mapping_root=self.root, context=self.get_context(), time=self.arc_time) + + logger.info("Creating %s", zip_path) + with Archiver(zip_path=zip_path) as archiver: + arc_root = f"" + archive_file_tree.add_to_archiver(archive_base=arc_root, archiver=archiver) + archiver.add_git_hash(arcdir=arc_root, commit=self.commit, time=self.arc_time) + + for p in built_paths: + assert p.is_file(), f"{p} should exist" + + def _build_msvc_devel(self) -> None: + zip_path = self.dist_path / f"{self.project}-devel-{self.version}-VC.zip" + arc_root = f"{self.project}-{self.version}" + + def copy_files_devel(ctx): + archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["files-devel"], file_mapping_root=self.root, context=ctx, time=self.arc_time) + + + logger.info("Collecting files...") + archive_file_tree = ArchiveFileTree() + if "msbuild" in self.release_info["msvc"]: + for arch in self.release_info["msvc"]["msbuild"]["archs"]: + arch_platform = self._arch_to_vs_platform(arch=arch) + platform_context = self.get_context(arch_platform.extra_context()) + archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["msbuild"]["files-devel"], file_mapping_root=self.root, context=platform_context, time=self.arc_time) + copy_files_devel(ctx=platform_context) + if "cmake" in self.release_info["msvc"]: + for arch in self.release_info["msvc"]["cmake"]["archs"]: + arch_platform = self._arch_to_vs_platform(arch=arch) + platform_context = self.get_context(arch_platform.extra_context()) + archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["cmake"]["files-devel"], file_mapping_root=self._arch_platform_to_install_path(arch_platform), context=platform_context, time=self.arc_time) + copy_files_devel(ctx=platform_context) + + with Archiver(zip_path=zip_path) as archiver: + archive_file_tree.add_to_archiver(archive_base="", archiver=archiver) + archiver.add_git_hash(arcdir=arc_root, commit=self.commit, time=self.arc_time) + self.artifacts["VC-devel"] = zip_path + + @classmethod + def extract_sdl_version(cls, root: Path, release_info: dict) -> str: + with open(root / release_info["version"]["file"], "r") as f: + text = f.read() + major = next(re.finditer(release_info["version"]["re_major"], text, flags=re.M)).group(1) + minor = next(re.finditer(release_info["version"]["re_minor"], text, flags=re.M)).group(1) + micro = next(re.finditer(release_info["version"]["re_micro"], text, flags=re.M)).group(1) + return f"{major}.{minor}.{micro}" + + +def main(argv=None) -> int: + if sys.version_info < (3, 11): + logger.error("This script needs at least python 3.11") + return 1 + + parser = argparse.ArgumentParser(allow_abbrev=False, description="Create SDL release artifacts") + parser.add_argument("--root", metavar="DIR", type=Path, default=Path(__file__).absolute().parents[1], help="Root of project") + parser.add_argument("--release-info", metavar="JSON", dest="path_release_info", type=Path, default=Path(__file__).absolute().parent / "release-info.json", help="Path of release-info.json") + parser.add_argument("--dependency-folder", metavar="FOLDER", dest="deps_path", type=Path, default="deps", help="Directory containing pre-built archives of dependencies (will be removed when downloading archives)") + parser.add_argument("--out", "-o", metavar="DIR", dest="dist_path", type=Path, default="dist", help="Output directory") + parser.add_argument("--github", action="store_true", help="Script is running on a GitHub runner") + parser.add_argument("--commit", default="HEAD", help="Git commit/tag of which a release should be created") + parser.add_argument("--actions", choices=["download", "source", "android", "mingw", "msvc", "dmg"], required=True, nargs="+", dest="actions", help="What to do?") + parser.set_defaults(loglevel=logging.INFO) + parser.add_argument('--vs-year', dest="vs_year", help="Visual Studio year") + parser.add_argument('--android-api', type=int, dest="android_api", help="Android API version") + parser.add_argument('--android-home', dest="android_home", default=os.environ.get("ANDROID_HOME"), help="Android Home folder") + parser.add_argument('--android-ndk-home', dest="android_ndk_home", default=os.environ.get("ANDROID_NDK_HOME"), help="Android NDK Home folder") + parser.add_argument('--cmake-generator', dest="cmake_generator", default="Ninja", help="CMake Generator") + parser.add_argument('--debug', action='store_const', const=logging.DEBUG, dest="loglevel", help="Print script debug information") + parser.add_argument('--dry-run', action='store_true', dest="dry", help="Don't execute anything") + parser.add_argument('--force', action='store_true', dest="force", help="Ignore a non-clean git tree") + parser.add_argument('--overwrite', action='store_true', dest="overwrite", help="Allow potentially overwriting other projects") + parser.add_argument('--fast', action='store_true', dest="fast", help="Don't do a rebuild") + + args = parser.parse_args(argv) + logging.basicConfig(level=args.loglevel, format='[%(levelname)s] %(message)s') + args.deps_path = args.deps_path.absolute() + args.dist_path = args.dist_path.absolute() + args.root = args.root.absolute() + args.dist_path = args.dist_path.absolute() + if args.dry: + args.dist_path = args.dist_path / "dry" + + if args.github: + section_printer: SectionPrinter = GitHubSectionPrinter() + else: + section_printer = SectionPrinter() + + if args.github and "GITHUB_OUTPUT" not in os.environ: + os.environ["GITHUB_OUTPUT"] = "/tmp/github_output.txt" + + executer = Executer(root=args.root, dry=args.dry) + + root_git_hash_path = args.root / GIT_HASH_FILENAME + root_is_maybe_archive = root_git_hash_path.is_file() + if root_is_maybe_archive: + logger.warning("%s detected: Building from archive", GIT_HASH_FILENAME) + archive_commit = root_git_hash_path.read_text().strip() + if args.commit != archive_commit: + logger.warning("Commit argument is %s, but archive commit is %s. Using %s.", args.commit, archive_commit, archive_commit) + args.commit = archive_commit + revision = (args.root / REVISION_TXT).read_text().strip() + else: + args.commit = executer.check_output(["git", "rev-parse", args.commit], dry_out="e5812a9fd2cda317b503325a702ba3c1c37861d9").strip() + revision = executer.check_output(["git", "describe", "--always", "--tags", "--long", args.commit], dry_out="preview-3.1.3-96-g9512f2144").strip() + logger.info("Using commit %s", args.commit) + + try: + with args.path_release_info.open() as f: + release_info = json.load(f) + except FileNotFoundError: + logger.error(f"Could not find {args.path_release_info}") + + releaser = Releaser( + release_info=release_info, + commit=args.commit, + revision=revision, + root=args.root, + dist_path=args.dist_path, + executer=executer, + section_printer=section_printer, + cmake_generator=args.cmake_generator, + deps_path=args.deps_path, + overwrite=args.overwrite, + github=args.github, + fast=args.fast, + ) + + if root_is_maybe_archive: + logger.warning("Building from archive. Skipping clean git tree check.") + else: + porcelain_status = executer.check_output(["git", "status", "--ignored", "--porcelain"], dry_out="\n").strip() + if porcelain_status: + print(porcelain_status) + logger.warning("The tree is dirty! Do not publish any generated artifacts!") + if not args.force: + raise Exception("The git repo contains modified and/or non-committed files. Run with --force to ignore.") + + if args.fast: + logger.warning("Doing fast build! Do not publish generated artifacts!") + + with section_printer.group("Arguments"): + print(f"project = {releaser.project}") + print(f"version = {releaser.version}") + print(f"revision = {revision}") + print(f"commit = {args.commit}") + print(f"out = {args.dist_path}") + print(f"actions = {args.actions}") + print(f"dry = {args.dry}") + print(f"force = {args.force}") + print(f"overwrite = {args.overwrite}") + print(f"cmake_generator = {args.cmake_generator}") + + releaser.prepare() + + if "download" in args.actions: + releaser.download_dependencies() + + if set(args.actions).intersection({"msvc", "mingw", "android"}): + print("Verifying presence of dependencies (run 'download' action to download) ...") + releaser.verify_dependencies() + print("... done") + + if "source" in args.actions: + if root_is_maybe_archive: + raise Exception("Cannot build source archive from source archive") + with section_printer.group("Create source archives"): + releaser.create_source_archives() + + if "dmg" in args.actions: + if platform.system() != "Darwin" and not args.dry: + parser.error("framework artifact(s) can only be built on Darwin") + + releaser.create_dmg() + + if "msvc" in args.actions: + if platform.system() != "Windows" and not args.dry: + parser.error("msvc artifact(s) can only be built on Windows") + releaser.build_msvc() + + if "mingw" in args.actions: + releaser.create_mingw_archives() + + if "android" in args.actions: + if args.android_home is None or not Path(args.android_home).is_dir(): + parser.error("Invalid $ANDROID_HOME or --android-home: must be a directory containing the Android SDK") + if args.android_ndk_home is None or not Path(args.android_ndk_home).is_dir(): + parser.error("Invalid $ANDROID_NDK_HOME or --android_ndk_home: must be a directory containing the Android NDK") + if args.android_api is None: + with section_printer.group("Detect Android APIS"): + args.android_api = releaser._detect_android_api(android_home=args.android_home) + if args.android_api is None or not (Path(args.android_home) / f"platforms/android-{args.android_api}").is_dir(): + parser.error("Invalid --android-api, and/or could not be detected") + with section_printer.group("Android arguments"): + print(f"android_home = {args.android_home}") + print(f"android_ndk_home = {args.android_ndk_home}") + print(f"android_api = {args.android_api}") + releaser.create_android_archives( + android_api=args.android_api, + android_home=args.android_home, + android_ndk_home=args.android_ndk_home, + ) + with section_printer.group("Summary"): + print(f"artifacts = {releaser.artifacts}") + + if args.github: + with open(os.environ["GITHUB_OUTPUT"], "a") as f: + f.write(f"project={releaser.project}\n") + f.write(f"version={releaser.version}\n") + for k, v in releaser.artifacts.items(): + f.write(f"{k}={v.name}\n") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/vs/sdl2/build-scripts/checker-buildbot.sh b/vs/sdl2/build-scripts/checker-buildbot.sh index be89fd7ec4d..e24450506df 100755 --- a/vs/sdl2/build-scripts/checker-buildbot.sh +++ b/vs/sdl2/build-scripts/checker-buildbot.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # This is a script used by some Buildbot buildslaves to push the project # through Clang's static analyzer and prepare the output to be uploaded diff --git a/vs/sdl2/build-scripts/cmake-toolchain-mingw64-i686.cmake b/vs/sdl2/build-scripts/cmake-toolchain-mingw64-i686.cmake new file mode 100644 index 00000000000..8be7b3a80fe --- /dev/null +++ b/vs/sdl2/build-scripts/cmake-toolchain-mingw64-i686.cmake @@ -0,0 +1,18 @@ +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_PROCESSOR x86) + +find_program(CMAKE_C_COMPILER NAMES i686-w64-mingw32-gcc) +find_program(CMAKE_CXX_COMPILER NAMES i686-w64-mingw32-g++) +find_program(CMAKE_RC_COMPILER NAMES i686-w64-mingw32-windres windres) + +if(NOT CMAKE_C_COMPILER) + message(FATAL_ERROR "Failed to find CMAKE_C_COMPILER.") +endif() + +if(NOT CMAKE_CXX_COMPILER) + message(FATAL_ERROR "Failed to find CMAKE_CXX_COMPILER.") +endif() + +if(NOT CMAKE_RC_COMPILER) + message(FATAL_ERROR "Failed to find CMAKE_RC_COMPILER.") +endif() diff --git a/vs/sdl2/build-scripts/cmake-toolchain-mingw64-x86_64.cmake b/vs/sdl2/build-scripts/cmake-toolchain-mingw64-x86_64.cmake new file mode 100644 index 00000000000..8bf436695e1 --- /dev/null +++ b/vs/sdl2/build-scripts/cmake-toolchain-mingw64-x86_64.cmake @@ -0,0 +1,18 @@ +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_PROCESSOR x86_64) + +find_program(CMAKE_C_COMPILER NAMES x86_64-w64-mingw32-gcc) +find_program(CMAKE_CXX_COMPILER NAMES x86_64-w64-mingw32-g++) +find_program(CMAKE_RC_COMPILER NAMES x86_64-w64-mingw32-windres windres) + +if(NOT CMAKE_C_COMPILER) + message(FATAL_ERROR "Failed to find CMAKE_C_COMPILER.") +endif() + +if(NOT CMAKE_CXX_COMPILER) + message(FATAL_ERROR "Failed to find CMAKE_CXX_COMPILER.") +endif() + +if(NOT CMAKE_RC_COMPILER) + message(FATAL_ERROR "Failed to find CMAKE_RC_COMPILER.") +endif() diff --git a/vs/sdl2/build-scripts/codechecker-buildbot.sh b/vs/sdl2/build-scripts/codechecker-buildbot.sh index 76b7853b3a4..b24e74721d2 100644 --- a/vs/sdl2/build-scripts/codechecker-buildbot.sh +++ b/vs/sdl2/build-scripts/codechecker-buildbot.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # This is a script used by some Buildbot build workers to push the project # through Clang's static analyzer and prepare the output to be uploaded diff --git a/vs/sdl2/build-scripts/config.guess b/vs/sdl2/build-scripts/config.guess index f6d217a49f8..a9d01fde461 100755 --- a/vs/sdl2/build-scripts/config.guess +++ b/vs/sdl2/build-scripts/config.guess @@ -1,10 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2024 Free Software Foundation, Inc. +# Copyright 1992-2025 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale -timestamp='2024-01-01' +timestamp='2025-07-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -60,7 +60,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2024 Free Software Foundation, Inc. +Copyright 1992-2025 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -123,7 +123,7 @@ set_cc_for_build() { dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" - for driver in cc gcc c89 c99 ; do + for driver in cc gcc c17 c99 c89 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break @@ -634,7 +634,8 @@ EOF sed 's/^ //' << EOF > "$dummy.c" #include - main() + int + main () { if (!__power_pc()) exit(1); @@ -718,7 +719,8 @@ EOF #include #include - int main () + int + main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); @@ -1595,8 +1597,11 @@ EOF *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; - *:Ironclad:*:*) - GUESS=$UNAME_MACHINE-unknown-ironclad + x86_64:[Ii]ronclad:*:*|i?86:[Ii]ronclad:*:*) + GUESS=$UNAME_MACHINE-pc-ironclad-mlibc + ;; + *:[Ii]ronclad:*:*) + GUESS=$UNAME_MACHINE-unknown-ironclad-mlibc ;; esac @@ -1621,6 +1626,7 @@ cat > "$dummy.c" <." version="\ GNU config.sub ($timestamp) -Copyright 1992-2024 Free Software Foundation, Inc. +Copyright 1992-2025 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -120,7 +120,6 @@ case $# in esac # Split fields of configuration type -# shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; - kfreebsd*-gnu*- | kopensolaris*-gnu*-) + kfreebsd*-gnu*- | knetbsd*-gnu*- | netbsd*-gnu*- | kopensolaris*-gnu*-) ;; vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) ;; @@ -1864,8 +2253,12 @@ case $kernel-$os-$obj in ;; os2-emx-) ;; + rtmk-nova-) + ;; *-eabi*- | *-gnueabi*-) ;; + ios*-simulator- | tvos*-simulator- | watchos*-simulator- ) + ;; none--*) # None (no kernel, i.e. freestanding / bare metal), # can be paired with an machine code file format @@ -1890,7 +2283,7 @@ case $vendor in *-riscix*) vendor=acorn ;; - *-sunos*) + *-sunos* | *-solaris*) vendor=sun ;; *-cnk* | *-aix*) @@ -1964,8 +2357,8 @@ echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" exit # Local variables: -# eval: (add-hook 'before-save-hook 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-format: "%Y-%02m-%02d" # time-stamp-end: "'" # End: diff --git a/vs/sdl2/build-scripts/create-release.py b/vs/sdl2/build-scripts/create-release.py new file mode 100644 index 00000000000..221444993a9 --- /dev/null +++ b/vs/sdl2/build-scripts/create-release.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +import argparse +from pathlib import Path +import json +import logging +import re +import subprocess + +ROOT = Path(__file__).resolve().parents[1] + + +def determine_remote() -> str: + text = (ROOT / "build-scripts/release-info.json").read_text() + release_info = json.loads(text) + if "remote" in release_info: + return release_info["remote"] + project_with_version = release_info["name"] + project, _ = re.subn("([^a-zA-Z_])", "", project_with_version) + return f"libsdl-org/{project}" + + +def main(): + default_remote = determine_remote() + + current_commit = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip() + + parser = argparse.ArgumentParser(allow_abbrev=False) + parser.add_argument("--ref", required=True, help=f"Name of branch or tag containing release.yml") + parser.add_argument("--remote", "-R", default=default_remote, help=f"Remote repo (default={default_remote})") + parser.add_argument("--commit", default=current_commit, help=f"Commit (default={current_commit})") + args = parser.parse_args() + + + print(f"Running release.yml workflow:") + print(f" commit = {args.commit}") + print(f" remote = {args.remote}") + + subprocess.check_call(["gh", "-R", args.remote, "workflow", "run", "release.yml", "--ref", args.ref, "-f", f"commit={args.commit}"], cwd=ROOT) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/vs/sdl2/build-scripts/emscripten-buildbot.sh b/vs/sdl2/build-scripts/emscripten-buildbot.sh index 8538c45aeca..3815d587ab6 100755 --- a/vs/sdl2/build-scripts/emscripten-buildbot.sh +++ b/vs/sdl2/build-scripts/emscripten-buildbot.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh if [ -z "$SDKDIR" ]; then SDKDIR="/emsdk" diff --git a/vs/sdl2/build-scripts/gen_audio_channel_conversion.c b/vs/sdl2/build-scripts/gen_audio_channel_conversion.c index 5d5841d9ef7..38c3548d8ca 100644 --- a/vs/sdl2/build-scripts/gen_audio_channel_conversion.c +++ b/vs/sdl2/build-scripts/gen_audio_channel_conversion.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -395,7 +395,7 @@ int main(void) printf( "/*\n" " Simple DirectMedia Layer\n" - " Copyright (C) 1997-2024 Sam Lantinga \n" + " Copyright (C) 1997-2025 Sam Lantinga \n" "\n" " This software is provided 'as-is', without any express or implied\n" " warranty. In no event will the authors be held liable for any damages\n" diff --git a/vs/sdl2/build-scripts/gen_audio_resampler_filter.c b/vs/sdl2/build-scripts/gen_audio_resampler_filter.c index 22b743740ad..df0acca3ac9 100644 --- a/vs/sdl2/build-scripts/gen_audio_resampler_filter.c +++ b/vs/sdl2/build-scripts/gen_audio_resampler_filter.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -113,7 +113,7 @@ int main(void) printf( "/*\n" " Simple DirectMedia Layer\n" - " Copyright (C) 1997-2024 Sam Lantinga \n" + " Copyright (C) 1997-2025 Sam Lantinga \n" "\n" " This software is provided 'as-is', without any express or implied\n" " warranty. In no event will the authors be held liable for any damages\n" diff --git a/vs/sdl2/build-scripts/ltmain.sh b/vs/sdl2/build-scripts/ltmain.sh index 7be7193b4b9..42a03c3cda3 100755 --- a/vs/sdl2/build-scripts/ltmain.sh +++ b/vs/sdl2/build-scripts/ltmain.sh @@ -2415,10 +2415,10 @@ libtool_validate_options () # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" - case $host in + case $host_os in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 - *cygwin* | *mingw* | *windows* | *pw32* | *cegcc* | *solaris2* | *os2*) + cygwin* | mingw* | windows* | pw32* | cegcc* | solaris2* | os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; @@ -4935,7 +4935,7 @@ func_win32_libid () *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || @@ -5534,7 +5534,7 @@ EOF #endif #include #include -#ifdef _MSC_VER +#if defined _WIN32 && !defined __GNUC__ # include # include # include @@ -6501,7 +6501,7 @@ func_mode_link () # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. - # SDL customization: SDL code doesn't have any undefined symbols + # SDL customization: SDL code doesn't have any undefined symbols. allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying @@ -6509,7 +6509,7 @@ func_mode_link () # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. - # SDL customization: SDL code doesn't have any undefined symbols + # SDL customization: SDL code doesn't have any undefined symbols. # allow_undefined=yes ;; *) @@ -7096,7 +7096,7 @@ func_mode_link () continue ;; -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" @@ -7310,7 +7310,10 @@ func_mode_link () # -fno-sanitize* Clang/GCC memory and address sanitizer # -shared-libsan Link with shared sanitizer runtimes (Clang) # -static-libsan Link with static sanitizer runtimes (Clang) + # -no-canonical-prefixes Do not expand any symbolic links # -fuse-ld=* Linker select flags for GCC + # -static-* direct GCC to link specific libraries statically + # -fcilkplus Cilk Plus language extension features for C/C++ # -rtlib=* select c runtime lib with clang # --unwindlib=* select unwinder library with clang # -f{file|debug|macro|profile}-prefix-map=* needed for lto linking @@ -7318,12 +7321,12 @@ func_mode_link () # -Werror, -Werror=* Report (specified) warnings as errors -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-no-canonical-prefixes| \ -stdlib=*|-rtlib=*|--unwindlib=*| \ -specs=*|-fsanitize=*|-fno-sanitize*|-shared-libsan|-static-libsan| \ -ffile-prefix-map=*|-fdebug-prefix-map=*|-fmacro-prefix-map=*|-fprofile-prefix-map=*| \ -fdiagnostics-color*|-frecord-gcc-switches| \ - -fuse-ld=*|-Wa,*|-Werror|-Werror=*) + -fuse-ld=*|-static-*|-fcilkplus|-Wa,*|-Werror|-Werror=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" @@ -7653,7 +7656,7 @@ func_mode_link () found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" @@ -8179,8 +8182,8 @@ func_mode_link () fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *windows* | *cegcc* | *os2*) + case $host_os in + cygwin* | mingw* | windows* | cegcc* | os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no @@ -8249,8 +8252,8 @@ func_mode_link () soname=$dlname elif test -n "$soname_spec"; then # bleh windows - case $host in - *cygwin* | mingw* | *windows* | *cegcc*) # | *os2* # SDL customization: removed OS/2 versioning support. + case $host_os in + cygwin* | mingw* | windows* | cegcc*) # | os2* # SDL customization: removed OS/2 versioning support. func_arith $current - $age major=$func_arith_result versuffix=-$major @@ -8392,7 +8395,7 @@ func_mode_link () test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then - add_dir=-L$libdir + add_dir=-L$lt_sysroot$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in @@ -8409,7 +8412,7 @@ func_mode_link () fi else # We cannot seem to hardcode it, guess we'll fake it. - add_dir=-L$libdir + add_dir=-L$lt_sysroot$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in @@ -8680,7 +8683,7 @@ func_mode_link () test CXX = "$tagname" && { case $host_os in linux*) - case `$CC -V 2>&1 | sed 5q` in + case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi @@ -8853,13 +8856,13 @@ func_mode_link () # case $version_type in # correct linux to gnu/linux during the next big refactor - darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) + darwin|freebsd-elf|linux|midnightbsd-elf|osf|qnx|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; - freebsd-aout|qnx|sco|sunos) + freebsd-aout|sco|sunos) current=$number_major revision=$number_minor age=0 @@ -9006,8 +9009,9 @@ func_mode_link () ;; qnx) - major=.$current - versuffix=.$current + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision ;; sco) diff --git a/vs/sdl2/build-scripts/nacl-buildbot.sh b/vs/sdl2/build-scripts/nacl-buildbot.sh index 73aae9eaf40..313561a54ba 100755 --- a/vs/sdl2/build-scripts/nacl-buildbot.sh +++ b/vs/sdl2/build-scripts/nacl-buildbot.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # This is the script buildbot.libsdl.org uses to cross-compile SDL2 from # amd64 Linux to NaCl. diff --git a/vs/sdl2/build-scripts/naclbuild.sh b/vs/sdl2/build-scripts/naclbuild.sh index db745f9e31d..998e35c1e8c 100755 --- a/vs/sdl2/build-scripts/naclbuild.sh +++ b/vs/sdl2/build-scripts/naclbuild.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh if [ -z "$1" ] && [ -z "$NACL_SDK_ROOT" ]; then echo "Usage: ./naclbuild ~/nacl/pepper_35" echo "This will build SDL for Native Client, and testgles2.c as a demo" @@ -26,11 +26,11 @@ NCPUS="1" case "$OSTYPE" in darwin*) NCPU=`sysctl -n hw.ncpu` - ;; + ;; linux*) if [ -n `which nproc` ]; then NCPUS=`nproc` - fi + fi ;; *);; esac diff --git a/vs/sdl2/build-scripts/raspberrypi-buildbot.sh b/vs/sdl2/build-scripts/raspberrypi-buildbot.sh index 94861989266..5b197769789 100755 --- a/vs/sdl2/build-scripts/raspberrypi-buildbot.sh +++ b/vs/sdl2/build-scripts/raspberrypi-buildbot.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # This is the script buildbot.libsdl.org uses to cross-compile SDL2 from # x86 Linux to Raspberry Pi. diff --git a/vs/sdl2/build-scripts/release-info.json b/vs/sdl2/build-scripts/release-info.json new file mode 100644 index 00000000000..02a294e59ba --- /dev/null +++ b/vs/sdl2/build-scripts/release-info.json @@ -0,0 +1,108 @@ +{ + "name": "SDL2", + "remote": "libsdl-org/SDL", + "version": { + "file": "include/SDL_version.h", + "re_major": "^#define SDL_MAJOR_VERSION\\s+([0-9]+)$", + "re_minor": "^#define SDL_MINOR_VERSION\\s+([0-9]+)$", + "re_micro": "^#define SDL_PATCHLEVEL\\s+([0-9]+)$" + }, + "source": { + "checks": [ + "src/SDL.c", + "include/SDL.h", + "test/testsprite2.c", + "android-project/app/src/main/java/org/libsdl/app/SDLActivity.java" + ] + }, + "dmg": { + "project": "Xcode/SDL/SDL.xcodeproj", + "path": "Xcode/SDL/build/SDL2.dmg", + "target": "Standard DMG" + }, + "mingw": { + "autotools": { + "archs": ["x86", "x64"], + "args": [ + ], + "files": { + "@<@TRIPLET@>@/include/SDL2": [ + "include/SDL_config*.h" + ] + } + }, + "files": { + "": [ + "mingw/pkg-support/INSTALL.txt", + "mingw/pkg-support/Makefile", + "BUGS.txt", + "CREDITS.txt", + "README-SDL.txt", + "WhatsNew.txt", + "LICENSE.txt", + "README.md" + ], + "cmake": [ + "mingw/pkg-support/cmake/sdl2-config.cmake", + "mingw/pkg-support/cmake/sdl2-config-version.cmake" + ], + "docs": [ + "docs/*" + ], + "test": [ + "test/*" + ] + } + }, + "msvc": { + "msbuild": { + "archs": [ + "x86", + "x64" + ], + "projects": [ + "VisualC/SDL/SDL.vcxproj", + "VisualC/SDLmain/SDLmain.vcxproj", + "VisualC/SDLtest/SDLtest.vcxproj" + ], + "files-lib": { + "": [ + "VisualC/SDL/@<@PLATFORM@>@/@<@CONFIGURATION@>@/SDL2.dll" + ] + }, + "files-devel": { + "lib/@<@ARCH@>@": [ + "VisualC/SDL/@<@PLATFORM@>@/@<@CONFIGURATION@>@/SDL2.dll", + "VisualC/SDL/@<@PLATFORM@>@/@<@CONFIGURATION@>@/SDL2.lib", + "VisualC/SDL/@<@PLATFORM@>@/@<@CONFIGURATION@>@/SDL2.pdb", + "VisualC/SDLmain/@<@PLATFORM@>@/@<@CONFIGURATION@>@/SDL2main.lib", + "VisualC/SDLtest/@<@PLATFORM@>@/@<@CONFIGURATION@>@/SDL2test.lib" + ] + } + }, + "files-lib": { + "": [ + "README-SDL.txt" + ] + }, + "files-devel": { + "": [ + "README-SDL.txt", + "BUGS.txt", + "LICENSE.txt", + "README.md", + "WhatsNew.txt" + ], + "cmake": [ + "VisualC/pkg-support/cmake/sdl2-config.cmake", + "VisualC/pkg-support/cmake/sdl2-config-version.cmake" + ], + "docs": [ + "docs/*" + ], + "include": [ + "include/*.h" + ] + } + } +} diff --git a/vs/sdl2/build-scripts/setup-gdk-desktop.py b/vs/sdl2/build-scripts/setup-gdk-desktop.py new file mode 100644 index 00000000000..d2309a0e311 --- /dev/null +++ b/vs/sdl2/build-scripts/setup-gdk-desktop.py @@ -0,0 +1,303 @@ +#!/usr/bin/env python + +import argparse +import functools +import logging +import os +from pathlib import Path +import re +import shutil +import subprocess +import tempfile +import textwrap +import urllib.request +import zipfile + +# Update both variables when updating the GDK +GIT_REF = "June_2024_Update_1" +GDK_EDITION = "240601" # YYMMUU + +logger = logging.getLogger(__name__) + +class GdDesktopConfigurator: + def __init__(self, gdk_path, arch, vs_folder, vs_version=None, vs_toolset=None, temp_folder=None, git_ref=None, gdk_edition=None): + self.git_ref = git_ref or GIT_REF + self.gdk_edition = gdk_edition or GDK_EDITION + self.gdk_path = gdk_path + self.temp_folder = temp_folder or Path(tempfile.gettempdir()) + self.dl_archive_path = Path(self.temp_folder) / f"{ self.git_ref }.zip" + self.gdk_extract_path = Path(self.temp_folder) / f"GDK-{ self.git_ref }" + self.arch = arch + self.vs_folder = vs_folder + self._vs_version = vs_version + self._vs_toolset = vs_toolset + + def download_archive(self) -> None: + gdk_url = f"https://github.com/microsoft/GDK/archive/refs/tags/{ GIT_REF }.zip" + logger.info("Downloading %s to %s", gdk_url, self.dl_archive_path) + urllib.request.urlretrieve(gdk_url, self.dl_archive_path) + assert self.dl_archive_path.is_file() + + def extract_zip_archive(self) -> None: + extract_path = self.gdk_extract_path.parent + assert self.dl_archive_path.is_file() + logger.info("Extracting %s to %s", self.dl_archive_path, extract_path) + with zipfile.ZipFile(self.dl_archive_path) as zf: + zf.extractall(extract_path) + assert self.gdk_extract_path.is_dir(), f"{self.gdk_extract_path} must exist" + + def extract_development_kit(self) -> None: + extract_dks_cmd = self.gdk_extract_path / "SetupScripts/ExtractXboxOneDKs.cmd" + assert extract_dks_cmd.is_file() + logger.info("Extracting GDK Development Kit: running %s", extract_dks_cmd) + cmd = ["cmd.exe", "/C", str(extract_dks_cmd), str(self.gdk_extract_path), str(self.gdk_path)] + logger.debug("Running %r", cmd) + subprocess.check_call(cmd) + + def detect_vs_version(self) -> str: + vs_regex = re.compile("VS([0-9]{4})") + supported_vs_versions = [] + for p in self.gaming_grdk_build_path.iterdir(): + if not p.is_dir(): + continue + if m := vs_regex.match(p.name): + supported_vs_versions.append(m.group(1)) + logger.info(f"Supported Visual Studio versions: {supported_vs_versions}") + vs_versions = set(self.vs_folder.parts).intersection(set(supported_vs_versions)) + if not vs_versions: + raise RuntimeError("Visual Studio version is incompatible") + if len(vs_versions) > 1: + raise RuntimeError(f"Too many compatible VS versions found ({vs_versions})") + vs_version = vs_versions.pop() + logger.info(f"Used Visual Studio version: {vs_version}") + return vs_version + + def detect_vs_toolset(self) -> str: + toolset_paths = [] + for ts_path in self.gdk_toolset_parent_path.iterdir(): + if not ts_path.is_dir(): + continue + ms_props = ts_path / "Microsoft.Cpp.props" + if not ms_props.is_file(): + continue + toolset_paths.append(ts_path.name) + logger.info("Detected Visual Studio toolsets: %s", toolset_paths) + assert toolset_paths, "Have we detected at least one toolset?" + + def toolset_number(toolset: str) -> int: + if m:= re.match("[^0-9]*([0-9]+).*", toolset): + return int(m.group(1)) + return -9 + + return max(toolset_paths, key=toolset_number) + + @property + def vs_version(self) -> str: + if self._vs_version is None: + self._vs_version = self.detect_vs_version() + return self._vs_version + + @property + def vs_toolset(self) -> str: + if self._vs_toolset is None: + self._vs_toolset = self.detect_vs_toolset() + return self._vs_toolset + + @staticmethod + def copy_files_and_merge_into(srcdir: Path, dstdir: Path) -> None: + logger.info(f"Copy {srcdir} to {dstdir}") + for root, _, files in os.walk(srcdir): + dest_root = dstdir / Path(root).relative_to(srcdir) + if not dest_root.is_dir(): + dest_root.mkdir() + for file in files: + srcfile = Path(root) / file + dstfile = dest_root / file + shutil.copy(srcfile, dstfile) + + def copy_msbuild(self) -> None: + vc_toolset_parent_path = self.vs_folder / "MSBuild/Microsoft/VC" + if 1: + logger.info(f"Detected compatible Visual Studio version: {self.vs_version}") + srcdir = vc_toolset_parent_path + dstdir = self.gdk_toolset_parent_path + assert srcdir.is_dir(), "Source directory must exist" + assert dstdir.is_dir(), "Destination directory must exist" + + self.copy_files_and_merge_into(srcdir=srcdir, dstdir=dstdir) + + @property + def game_dk_path(self) -> Path: + return self.gdk_path / "Microsoft GDK" + + @property + def game_dk_latest_path(self) -> Path: + return self.game_dk_path / self.gdk_edition + + @property + def windows_sdk_path(self) -> Path: + return self.gdk_path / "Windows Kits/10" + + @property + def gaming_grdk_build_path(self) -> Path: + return self.game_dk_latest_path / "GRDK" + + @property + def gdk_toolset_parent_path(self) -> Path: + return self.gaming_grdk_build_path / f"VS{self.vs_version}/flatDeployment/MSBuild/Microsoft/VC" + + @property + def env(self) -> dict[str, str]: + game_dk = self.game_dk_path + game_dk_latest = self.game_dk_latest_path + windows_sdk_dir = self.windows_sdk_path + gaming_grdk_build = self.gaming_grdk_build_path + + return { + "GRDKEDITION": f"{self.gdk_edition}", + "GameDK": f"{game_dk}\\", + "GameDKLatest": f"{ game_dk_latest }\\", + "WindowsSdkDir": f"{ windows_sdk_dir }\\", + "GamingGRDKBuild": f"{ gaming_grdk_build }\\", + "VSInstallDir": f"{ self.vs_folder }\\", + } + + def create_user_props(self, path: Path) -> None: + vc_targets_path = self.gaming_grdk_build_path / f"VS{ self.vs_version }/flatDeployment/MSBuild/Microsoft/VC/{ self.vs_toolset }" + vc_targets_path16 = self.gaming_grdk_build_path / f"VS2019/flatDeployment/MSBuild/Microsoft/VC/{ self.vs_toolset }" + vc_targets_path17 = self.gaming_grdk_build_path / f"VS2022/flatDeployment/MSBuild/Microsoft/VC/{ self.vs_toolset }" + additional_include_directories = ";".join(str(p) for p in self.gdk_include_paths) + additional_library_directories = ";".join(str(p) for p in self.gdk_library_paths) + durango_xdk_install_path = self.gdk_path / "Microsoft GDK" + with path.open("w") as f: + f.write(textwrap.dedent(f"""\ + + + + { vc_targets_path }\\ + { vc_targets_path16 }\\ + { vc_targets_path17 }\\ + { self.gaming_grdk_build_path }\\ + Gaming.Desktop.x64 + Debug + { self.gdk_edition } + { durango_xdk_install_path } + + $(DurangoXdkInstallPath)\\{self.gdk_edition}\\GRDK\\VS2019\\flatDeployment\\MSBuild\\Microsoft\\VC\\{self.vs_toolset}\\Platforms\\$(Platform)\\ + $(DurangoXdkInstallPath)\\{self.gdk_edition}\\GRDK\\VS2019\\flatDeployment\\MSBuild\\Microsoft\\VC\\{self.vs_toolset}\\Platforms\\$(Platform)\\ + $(DurangoXdkInstallPath)\\{self.gdk_edition}\\GRDK\\VS2022\\flatDeployment\\MSBuild\\Microsoft\\VC\\{self.vs_toolset}\\Platforms\\$(Platform)\\ + $(DurangoXdkInstallPath)\\{self.gdk_edition}\\GRDK\\VS2022\\flatDeployment\\MSBuild\\Microsoft\\VC\\{self.vs_toolset}\\Platforms\\$(Platform)\\ + + true + true + true + + + + { additional_include_directories };%(AdditionalIncludeDirectories) + + + { additional_library_directories };%(AdditionalLibraryDirectories) + + + + """)) + + @property + def gdk_include_paths(self) -> list[Path]: + return [ + self.gaming_grdk_build_path / "gamekit/include", + ] + + @property + def gdk_library_paths(self) -> list[Path]: + return [ + self.gaming_grdk_build_path / f"gamekit/lib/{self.arch}", + ] + + @property + def gdk_binary_path(self) -> list[Path]: + return [ + self.gaming_grdk_build_path / "bin", + self.game_dk_path / "bin", + ] + + @property + def build_env(self) -> dict[str, str]: + gdk_include = ";".join(str(p) for p in self.gdk_include_paths) + gdk_lib = ";".join(str(p) for p in self.gdk_library_paths) + gdk_path = ";".join(str(p) for p in self.gdk_binary_path) + return { + "GDK_INCLUDE": gdk_include, + "GDK_LIB": gdk_lib, + "GDK_PATH": gdk_path, + } + + def print_env(self) -> None: + for k, v in self.env.items(): + print(f"set \"{k}={v}\"") + print() + for k, v in self.build_env.items(): + print(f"set \"{k}={v}\"") + print() + print(f"set \"PATH=%GDK_PATH%;%PATH%\"") + print(f"set \"LIB=%GDK_LIB%;%LIB%\"") + print(f"set \"INCLUDE=%GDK_INCLUDE%;%INCLUDE%\"") + + +def main(): + logging.basicConfig(level=logging.INFO) + parser = argparse.ArgumentParser(allow_abbrev=False) + parser.add_argument("--arch", choices=["amd64"], default="amd64", help="Architecture") + parser.add_argument("--download", action="store_true", help="Download GDK") + parser.add_argument("--extract", action="store_true", help="Extract downloaded GDK") + parser.add_argument("--copy-msbuild", action="store_true", help="Copy MSBuild files") + parser.add_argument("--temp-folder", help="Temporary folder where to download and extract GDK") + parser.add_argument("--gdk-path", required=True, type=Path, help="Folder where to store the GDK") + parser.add_argument("--ref-edition", type=str, help="Git ref and GDK edition separated by comma") + parser.add_argument("--vs-folder", required=True, type=Path, help="Installation folder of Visual Studio") + parser.add_argument("--vs-version", required=False, type=int, help="Visual Studio version") + parser.add_argument("--vs-toolset", required=False, help="Visual Studio toolset (e.g. v150)") + parser.add_argument("--props-folder", required=False, type=Path, default=Path(), help="Visual Studio toolset (e.g. v150)") + parser.add_argument("--no-user-props", required=False, dest="user_props", action="store_false", help="Don't ") + args = parser.parse_args() + + logging.basicConfig(level=logging.INFO) + + git_ref = None + gdk_edition = None + if args.ref_edition is not None: + git_ref, gdk_edition = args.ref_edition.split(",", 1) + try: + int(gdk_edition) + except ValueError: + parser.error("Edition should be an integer (YYMMUU) (Y=year M=month U=update)") + + configurator = GdDesktopConfigurator( + arch=args.arch, + git_ref=git_ref, + gdk_edition=gdk_edition, + vs_folder=args.vs_folder, + vs_version=args.vs_version, + vs_toolset=args.vs_toolset, + gdk_path=args.gdk_path, + temp_folder=args.temp_folder, + ) + + if args.download: + configurator.download_archive() + + if args.extract: + configurator.extract_zip_archive() + + configurator.extract_development_kit() + + if args.copy_msbuild: + configurator.copy_msbuild() + + if args.user_props: + configurator.print_env() + configurator.create_user_props(args.props_folder / "Directory.Build.props") + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/vs/sdl2/build-scripts/showrev.sh b/vs/sdl2/build-scripts/showrev.sh index a061df42358..7f33a6211c5 100755 --- a/vs/sdl2/build-scripts/showrev.sh +++ b/vs/sdl2/build-scripts/showrev.sh @@ -5,8 +5,8 @@ SDL_ROOT=$(dirname $0)/.. cd $SDL_ROOT -if [ -e ./VERSION.txt ]; then - cat ./VERSION.txt +if [ -e ./REVISION.txt ]; then + cat ./REVISION.txt exit 0 fi diff --git a/vs/sdl2/build-scripts/updaterev.sh b/vs/sdl2/build-scripts/updaterev.sh index cc8638210a1..d6bcae35e1d 100755 --- a/vs/sdl2/build-scripts/updaterev.sh +++ b/vs/sdl2/build-scripts/updaterev.sh @@ -29,7 +29,7 @@ done rev=`sh showrev.sh 2>/dev/null` if [ "$rev" != "" ]; then if [ -n "$dist" ]; then - echo "$rev" > "$outdir/VERSION.txt" + echo "$rev" > "$outdir/REVISION.txt" fi echo "/* Generated by updaterev.sh, do not edit */" >"$header.new" if [ -n "$vendor" ]; then diff --git a/vs/sdl2/build-scripts/wikiheaders.pl b/vs/sdl2/build-scripts/wikiheaders.pl index bf26d64332a..42e8fa61fac 100644 --- a/vs/sdl2/build-scripts/wikiheaders.pl +++ b/vs/sdl2/build-scripts/wikiheaders.pl @@ -2,6 +2,7 @@ use warnings; use strict; +use File::Path; use Text::Wrap; $Text::Wrap::huge = 'overflow'; @@ -15,7 +16,7 @@ my $versionfname = 'include/SDL_version.h'; my $versionmajorregex = '\A\#define\s+SDL_MAJOR_VERSION\s+(\d+)\Z'; my $versionminorregex = '\A\#define\s+SDL_MINOR_VERSION\s+(\d+)\Z'; -my $versionpatchregex = '\A\#define\s+SDL_PATCHLEVEL\s+(\d+)\Z'; +my $versionmicroregex = '\A\#define\s+SDL_MICRO_VERSION\s+(\d+)\Z'; my $mainincludefname = 'SDL.h'; my $selectheaderregex = '\ASDL.*?\.h\Z'; my $projecturl = 'https://libsdl.org/'; @@ -28,7 +29,12 @@ my $copy_direction = 0; my $optionsfname = undef; my $wikipreamble = undef; +my $wikiheaderfiletext = 'Defined in %fname%'; +my $manpageheaderfiletext = 'Defined in %fname%'; +my $headercategoryeval = undef; my $changeformat = undef; +my $manpath = undef; +my $gitrev = undef; foreach (@ARGV) { $warn_about_missing = 1, next if $_ eq '--warn-about-missing'; @@ -36,12 +42,20 @@ $copy_direction = 1, next if $_ eq '--copy-to-header'; $copy_direction = -1, next if $_ eq '--copy-to-wiki'; $copy_direction = -2, next if $_ eq '--copy-to-manpages'; + $copy_direction = -3, next if $_ eq '--report-coverage-gaps'; + $copy_direction = -4, next if $_ eq '--copy-to-latex'; if (/\A--options=(.*)\Z/) { $optionsfname = $1; next; } elsif (/\A--changeformat=(.*)\Z/) { $changeformat = $1; next; + } elsif (/\A--manpath=(.*)\Z/) { + $manpath = $1; + next; + } elsif (/\A--rev=(.*)\Z/) { + $gitrev = $1; + next; } $srcpath = $_, next if not defined $srcpath; $wikipath = $_, next if not defined $wikipath; @@ -57,6 +71,8 @@ if (defined $optionsfname) { open OPTIONS, '<', $optionsfname or die("Failed to open options file '$optionsfname': $!\n"); while () { + next if /\A\s*\#/; # Skip lines that start with (optional whitespace, then) '#' as comments. + chomp; if (/\A(.*?)\=(.*)\Z/) { my $key = $1; @@ -76,7 +92,7 @@ $readmesubdir = $val, next if $key eq 'readmesubdir'; $versionmajorregex = $val, next if $key eq 'versionmajorregex'; $versionminorregex = $val, next if $key eq 'versionminorregex'; - $versionpatchregex = $val, next if $key eq 'versionpatchregex'; + $versionmicroregex = $val, next if $key eq 'versionmicroregex'; $versionfname = $val, next if $key eq 'versionfname'; $mainincludefname = $val, next if $key eq 'mainincludefname'; $selectheaderregex = $val, next if $key eq 'selectheaderregex'; @@ -84,11 +100,20 @@ $wikiurl = $val, next if $key eq 'wikiurl'; $bugreporturl = $val, next if $key eq 'bugreporturl'; $wikipreamble = $val, next if $key eq 'wikipreamble'; + $wikiheaderfiletext = $val, next if $key eq 'wikiheaderfiletext'; + $manpageheaderfiletext = $val, next if $key eq 'manpageheaderfiletext'; + $headercategoryeval = $val, next if $key eq 'headercategoryeval'; } } close(OPTIONS); } +sub escLaTeX { + my $str = shift; + $str =~ s/([_\#\&\^])/\\$1/g; + return $str; +} + my $wordwrap_mode = 'mediawiki'; sub wordwrap_atom { # don't call this directly. my $str = shift; @@ -165,6 +190,8 @@ sub wordwrap_one_paragraph { # don't call this directly. if ($item ne '') { $retval .= wordwrap_with_bullet_indent($bullet, $item); } + } elsif ($p =~ /\A\s*\|.*\|\s*\n/) { # Markdown table + $retval = "$p\n"; # don't wrap it (!!! FIXME: but maybe parse by lines until we run out of table...) } else { $retval = wordwrap_atom($p) . "\n"; } @@ -288,7 +315,7 @@ sub wikify_chunk { $str = $codedstr . $str; if (defined $code) { - $str .= "```$codelang$code```"; + $str .= "```$codelang\n$code\n```\n"; } } @@ -304,7 +331,7 @@ sub wikify { #print("WIKIFY WHOLE:\n\n$str\n\n\n"); - while ($str =~ s/\A(.*?)\`\`\`(c\+\+|c)(.*?)\`\`\`//ms) { + while ($str =~ s/\A(.*?)\`\`\`(.*?)\n(.*?)\n\`\`\`(\n|\Z)//ms) { $retval .= wikify_chunk($wikitype, $1, $2, $3); } $retval .= wikify_chunk($wikitype, $str, undef, undef); @@ -361,7 +388,7 @@ sub dewikify_chunk { } if (defined $code) { - $str .= "```$codelang$code```"; + $str .= "\n```$codelang\n$code\n```\n"; } } elsif ($dewikify_mode eq 'manpage') { $str =~ s/\./\\[char46]/gms; # make sure these can't become control codes. @@ -377,8 +404,8 @@ sub dewikify_chunk { # is also popular. :/ $str =~ s/\s*\(.*?)<\/code>\s*/\n.BR $1\n/gms; - # bold+italic - $str =~ s/\s*'''''(.*?)'''''\s*/\n.BI $1\n/gms; + # bold+italic (this looks bad, just make it bold). + $str =~ s/\s*'''''(.*?)'''''\s*/\n.B $1\n/gms; # bold $str =~ s/\s*'''(.*?)'''\s*/\n.B $1\n/gms; @@ -400,8 +427,8 @@ sub dewikify_chunk { # is also popular. :/ $str =~ s/\s*\`(.*?)\`\s*/\n.BR $1\n/gms; - # bold+italic - $str =~ s/\s*\*\*\*(.*?)\*\*\*\s*/\n.BI $1\n/gms; + # bold+italic (this looks bad, just make it bold). + $str =~ s/\s*\*\*\*(.*?)\*\*\*\s*/\n.B $1\n/gms; # bold $str =~ s/\s*\*\*(.*?)\*\*\s*/\n.B $1\n/gms; @@ -411,9 +438,6 @@ sub dewikify_chunk { # bullets $str =~ s/^\- /\n\\\(bu /gm; - - } else { - die("Unexpected wikitype when converting to manpages\n"); # !!! FIXME: need to handle Markdown wiki pages. } if (defined $code) { @@ -426,8 +450,80 @@ sub dewikify_chunk { } $str .= ".EX\n$code\n.EE\n.PP\n"; } + } elsif ($dewikify_mode eq 'LaTeX') { + if ($wikitype eq 'mediawiki') { + # Dump obvious wikilinks. + if (defined $apiprefixregex) { + $str =~ s/\s*\[\[($apiprefixregex[a-zA-Z0-9_]+)\]\]/$1/gms; + } + + # links + $str =~ s/\[(https?\:\/\/.*?)\s+(.*?)\]/\\href{$1}{$2}/g; + + # is also popular. :/ + $str =~ s/\s*\(.*?)<\/code>/ \\texttt{$1}/gms; + + # bold+italic + $str =~ s/\s*'''''(.*?)'''''/ \\textbf{\\textit{$1}}/gms; + + # bold + $str =~ s/\s*'''(.*?)'''/ \\textbf{$1}/gms; + + # italic + $str =~ s/\s*''(.*?)''/ \\textit{$1}/gms; + + # bullets + $str =~ s/^\*\s+/ \\item /gm; + } elsif ($wikitype eq 'md') { + # Dump obvious wikilinks. + if (defined $apiprefixregex) { + $str =~ s/\[(\`?$apiprefixregex[a-zA-Z0-9_]+\`?)\]\($apiprefixregex[a-zA-Z0-9_]+\)/$1/gms; + } + + # links + $str =~ s/\[(.*?)]\((https?\:\/\/.*?)\)/\\href{$2}{$1}/g; + + # is also popular. :/ + $str =~ s/\s*\`(.*?)\`/ \\texttt{$1}/gms; + + # bold+italic + $str =~ s/\s*\*\*\*(.*?)\*\*\*/ \\textbf{\\textit{$1}}/gms; + + # bold + $str =~ s/\s*\*\*(.*?)\*\*/ \\textbf{$1}/gms; + + # italic + $str =~ s/\s*\*(.*?)\*/ \\textit{$1}/gms; + + # bullets + $str =~ s/^\-\s+/ \\item /gm; + } + + # Wrap bullet lists in itemize blocks... + $str =~ s/^(\s*\\item .*?)(\n\n|\Z)/\n\\begin{itemize}\n$1$2\n\\end{itemize}\n\n/gms; + + $str = escLaTeX($str); + + if (defined $code) { + $code =~ s/\A\n+//gms; + $code =~ s/\n+\Z//gms; + + if (($codelang eq '') || ($codelang eq 'output')) { + $str .= "\\begin{verbatim}\n$code\n\\end{verbatim}\n"; + } else { + if ($codelang eq 'c') { + $codelang = 'C'; + } elsif ($codelang eq 'c++') { + $codelang = 'C++'; + } else { + die("Unexpected codelang '$codelang'"); + } + $str .= "\n\\lstset{language=$codelang}\n"; + $str .= "\\begin{lstlisting}\n$code\n\\end{lstlisting}\n"; + } + } } else { - die("Unexpected dewikify_mode\n"); + die("Unexpected dewikify_mode"); } #print("\n\nDEWIKIFY CHUNK DONE:\n\n$str\n\n\n"); @@ -446,8 +542,14 @@ sub dewikify { $str =~ s/\A[\s\n]*\=\= .*? \=\=\s*?\n+//ms; my $retval = ''; - while ($str =~ s/\A(.*?)(.*?)<\/syntaxhighlight\>//ms) { - $retval .= dewikify_chunk($wikitype, $1, $2, $3); + if ($wikitype eq 'mediawiki') { + while ($str =~ s/\A(.*?)(.*?)<\/syntaxhighlight\>//ms) { + $retval .= dewikify_chunk($wikitype, $1, $2, $3); + } + } elsif ($wikitype eq 'md') { + while ($str =~ s/\A(.*?)\n```(.*?)\n(.*?)\n```\n//ms) { + $retval .= dewikify_chunk($wikitype, $1, $2, $3); + } } $retval .= dewikify_chunk($wikitype, $str, undef, undef); @@ -474,41 +576,130 @@ sub filecopy { } sub usage { - die("USAGE: $0 [--copy-to-headers|--copy-to-wiki|--copy-to-manpages] [--warn-about-missing]\n\n"); + die("USAGE: $0 [--copy-to-headers|--copy-to-wiki|--copy-to-manpages] [--warn-about-missing] [--manpath=]\n\n"); } usage() if not defined $srcpath; usage() if not defined $wikipath; #usage() if $copy_direction == 0; +if (not defined $manpath) { + $manpath = "$srcpath/man"; +} + my @standard_wiki_sections = ( 'Draft', '[Brief]', 'Deprecated', + 'Header File', 'Syntax', 'Function Parameters', + 'Macro Parameters', + 'Fields', + 'Values', 'Return Value', 'Remarks', 'Thread Safety', 'Version', 'Code Examples', - 'Related Functions' + 'See Also' ); # Sections that only ever exist in the wiki and shouldn't be deleted when # not found in the headers. my %only_wiki_sections = ( # The ones don't mean anything, I just need to check for key existence. 'Draft', 1, - 'Code Examples', 1 + 'Code Examples', 1, + 'Header File', 1 ); my %headers = (); # $headers{"SDL_audio.h"} -> reference to an array of all lines of text in SDL_audio.h. -my %headerfuncs = (); # $headerfuncs{"SDL_OpenAudio"} -> string of header documentation for SDL_OpenAudio, with comment '*' bits stripped from the start. Newlines embedded! +my %headersyms = (); # $headersyms{"SDL_OpenAudio"} -> string of header documentation for SDL_OpenAudio, with comment '*' bits stripped from the start. Newlines embedded! my %headerdecls = (); -my %headerfuncslocation = (); # $headerfuncslocation{"SDL_OpenAudio"} -> name of header holding SDL_OpenAudio define ("SDL_audio.h" in this case). -my %headerfuncschunk = (); # $headerfuncschunk{"SDL_OpenAudio"} -> offset in array in %headers that should be replaced for this function. -my %headerfuncshasdoxygen = (); # $headerfuncschunk{"SDL_OpenAudio"} -> 1 if there was no existing doxygen for this function. +my %headersymslocation = (); # $headersymslocation{"SDL_OpenAudio"} -> name of header holding SDL_OpenAudio define ("SDL_audio.h" in this case). +my %headersymschunk = (); # $headersymschunk{"SDL_OpenAudio"} -> offset in array in %headers that should be replaced for this symbol. +my %headersymshasdoxygen = (); # $headersymshasdoxygen{"SDL_OpenAudio"} -> 1 if there was no existing doxygen for this function. +my %headersymstype = (); # $headersymstype{"SDL_OpenAudio"} -> 1 (function), 2 (macro), 3 (struct), 4 (enum), 5 (other typedef) +my %headersymscategory = (); # $headersymscategory{"SDL_OpenAudio"} -> 'Audio' ... this is set with a `/* WIKI CATEGEORY: Audio */` comment in the headers that sets it on all symbols until a new comment changes it. So usually, once at the top of the header file. +my %headercategorydocs = (); # $headercategorydocs{"Audio"} -> (fake) symbol for this category's documentation. Undefined if not documented. +my %headersymsparaminfo = (); # $headersymsparaminfo{"SDL_OpenAudio"} -> reference to array of parameters, pushed by name, then C type string, repeating. Undef'd if void params, or not a function. +my %headersymsrettype = (); # $headersymsrettype{"SDL_OpenAudio"} -> string of C datatype of return value. Undef'd if not a function. +my %wikitypes = (); # contains string of wiki page extension, like $wikitypes{"SDL_OpenAudio"} == 'mediawiki' +my %wikisyms = (); # contains references to hash of strings, each string being the full contents of a section of a wiki page, like $wikisyms{"SDL_OpenAudio"}{"Remarks"}. +my %wikisectionorder = (); # contains references to array, each array item being a key to a wikipage section in the correct order, like $wikisectionorder{"SDL_OpenAudio"}[2] == 'Remarks' + +my %referenceonly = (); # $referenceonly{"Y"} -> symbol name that this symbol is bound to. This makes wiki pages that say "See X" where "X" is a typedef and "Y" is a define attached to it. These pages are generated in the wiki only and do not bridge to the headers or manpages. + +my @coverage_gap = (); # array of strings that weren't part of documentation, or blank, or basic preprocessor logic. Lets you see what this script is missing! + +sub add_coverage_gap { + if ($copy_direction == -3) { # --report-coverage-gaps + my $text = shift; + my $dent = shift; + my $lineno = shift; + return if $text =~ /\A\s*\Z/; # skip blank lines + return if $text =~ /\A\s*\#\s*(if|el|endif|include)/; # skip preprocessor floof. + push @coverage_gap, "$dent:$lineno: $text"; + } +} + +sub print_undocumented_section { + my $fh = shift; + my $typestr = shift; + my $typeval = shift; + + print $fh "## $typestr defined in the headers, but not in the wiki\n\n"; + my $header_only_sym = 0; + foreach (sort keys %headersyms) { + my $sym = $_; + if ((not defined $wikisyms{$sym}) && ($headersymstype{$sym} == $typeval)) { + print $fh "- [$sym]($sym)\n"; + $header_only_sym = 1; + } + } + if (!$header_only_sym) { + print $fh "(none)\n"; + } + print $fh "\n"; + + if (0) { # !!! FIXME: this lists things that _shouldn't_ be in the headers, like MigrationGuide, etc, but also we don't know if they're functions, macros, etc at this point (can we parse that from the wiki page, though?) + print $fh "## $typestr defined in the wiki, but not in the headers\n\n"; + + my $wiki_only_sym = 0; + foreach (sort keys %wikisyms) { + my $sym = $_; + if ((not defined $headersyms{$sym}) && ($headersymstype{$sym} == $typeval)) { + print $fh "- [$sym]($sym)\n"; + $wiki_only_sym = 1; + } + } + if (!$wiki_only_sym) { + print $fh "(none)\n"; + } + print $fh "\n"; + } +} + +sub strip_fn_declaration_metadata { + my $decl = shift; + $decl =~ s/SDL_(PRINTF|SCANF)_FORMAT_STRING\s*//; # don't want this metadata as part of the documentation. + $decl =~ s/SDL_ALLOC_SIZE2?\(.*?\)\s*//; # don't want this metadata as part of the documentation. + $decl =~ s/SDL_MALLOC\s*//; # don't want this metadata as part of the documentation. + $decl =~ s/SDL_(IN|OUT|INOUT)_.*?CAP\s*\(.*?\)\s*//g; # don't want this metadata as part of the documentation. + $decl =~ s/\)(\s*SDL_[a-zA-Z_]+(\(.*?\)|))*;/);/; # don't want this metadata as part of the documentation. + return $decl; +} + +sub sanitize_c_typename { + my $str = shift; + $str =~ s/\A\s+//; + $str =~ s/\s+\Z//; + $str =~ s/const\s*(\*+)/const $1/g; # one space between `const` and pointer stars: `char const* const *` becomes `char const * const *`. + $str =~ s/\*\s+\*/**/g; # drop spaces between pointers: `void * *` becomes `void **`. + $str =~ s/\s*(\*+)\Z/ $1/; # one space between pointer stars and what it points to: `void**` becomes `void **`. + return $str; +} my $incpath = "$srcpath"; $incpath .= "/$incsubdir" if $incsubdir ne ''; @@ -525,32 +716,88 @@ sub usage { next if not $dent =~ /$selectheaderregex/; # just selected headers. open(FH, '<', "$incpath/$dent") or die("Can't open '$incpath/$dent': $!\n"); - my @contents = (); + # You can optionally set a wiki category with Perl code in .wikiheaders-options that gets eval()'d per-header, + # and also if you put `/* WIKI CATEGORY: blah */` on a line by itself, it'll change the category for any symbols + # below it in the same file. If no category is set, one won't be added for the symbol (beyond the standard CategoryFunction, etc) + my $current_wiki_category = undef; + if (defined $headercategoryeval) { + $_ = $dent; + $current_wiki_category = eval($headercategoryeval); + if (($current_wiki_category eq '') || ($current_wiki_category eq '-')) { + $current_wiki_category = undef; + } + #print("CATEGORY FOR '$dent' IS " . (defined($current_wiki_category) ? "'$current_wiki_category'" : '(undef)') . "\n"); + } + my @contents = (); + my $ignoring_lines = 0; + my $header_comment = -1; + my $saw_category_doxygen = -1; + my $lineno = 0; while () { chomp; + $lineno++; + my $symtype = 0; # nothing, yet. my $decl; my @templines; my $str; my $has_doxygen = 1; - if (/\A\s*extern\s+(SDL_DEPRECATED\s+|)DECLSPEC/) { # a function declaration without a doxygen comment? + + # Since a lot of macros are just preprocessor logic spam and not all macros are worth documenting anyhow, we only pay attention to them when they have a Doxygen comment attached. + # Functions and other things are a different story, though! + + if ($header_comment == -1) { + $header_comment = /\A\/\*\s*\Z/ ? 1 : 0; + } elsif (($header_comment == 1) && (/\A\*\/\s*\Z/)) { + $header_comment = 0; + } + + if ($ignoring_lines && /\A\s*\#\s*endif\s*\Z/) { + $ignoring_lines = 0; + push @contents, $_; + next; + } elsif ($ignoring_lines) { + push @contents, $_; + next; + } elsif (/\A\s*\#\s*ifndef\s+SDL_WIKI_DOCUMENTATION_SECTION\s*\Z/) { + $ignoring_lines = 1; + push @contents, $_; + next; + } elsif (/\A\s*\/\*\s*WIKI CATEGORY:\s*(.*?)\s*\*\/\s*\Z/) { + $current_wiki_category = (($1 eq '') || ($1 eq '-')) ? undef : $1; + #print("CATEGORY FOR '$dent' CHANGED TO " . (defined($current_wiki_category) ? "'$current_wiki_category'" : '(undef)') . "\n"); + push @contents, $_; + next; + } elsif (/\A\s*extern\s+(SDL_DEPRECATED\s+|)(SDLMAIN_|SDL_)?DECLSPEC/) { # a function declaration without a doxygen comment? + $symtype = 1; # function declaration + @templines = (); + $decl = $_; + $str = ''; + $has_doxygen = 0; + } elsif (/\A\s*SDL_FORCE_INLINE/) { # a (forced-inline) function declaration without a doxygen comment? + $symtype = 1; # function declaration @templines = (); $decl = $_; $str = ''; $has_doxygen = 0; } elsif (not /\A\/\*\*\s*\Z/) { # not doxygen comment start? push @contents, $_; + add_coverage_gap($_, $dent, $lineno) if ($header_comment == 0); next; } else { # Start of a doxygen comment, parse it out. + my $is_category_doxygen = 0; + @templines = ( $_ ); while () { chomp; + $lineno++; push @templines, $_; last if /\A\s*\*\/\Z/; if (s/\A\s*\*\s*\`\`\`/```/) { # this is a hack, but a lot of other code relies on the whitespace being trimmed, but we can't trim it in code blocks... $str .= "$_\n"; while () { chomp; + $lineno++; push @templines, $_; s/\A\s*\*\s?//; if (s/\A\s*\`\`\`/```/) { @@ -561,97 +808,455 @@ sub usage { } } } else { - s/\A\s*\*\s*//; + s/\A\s*\*\s*//; # Strip off the " * " at the start of the comment line. + + # To add documentation to Category Pages, the rule is it has to + # be the first Doxygen comment in the header, and it must start with `# CategoryX` + # (otherwise we'll treat it as documentation for whatever's below it). `X` is + # the category name, which doesn't _necessarily_ have to match + # $current_wiki_category, but it probably should. + # + # For compatibility with Doxygen, if there's a `\file` here instead of + # `# CategoryName`, we'll accept it and use the $current_wiki_category if set. + if ($saw_category_doxygen == -1) { + $saw_category_doxygen = defined($current_wiki_category) && /\A\\file\s+/; + if ($saw_category_doxygen) { + $_ = "# Category$current_wiki_category"; + } else { + $saw_category_doxygen = /\A\# Category/; + } + $is_category_doxygen = $saw_category_doxygen; + } + $str .= "$_\n"; } } - $decl = ; - $decl = '' if not defined $decl; - chomp($decl); - if (not $decl =~ /\A\s*extern\s+(SDL_DEPRECATED\s+|)DECLSPEC/) { + if ($is_category_doxygen) { + $str =~ s/\s*\Z//; + $decl = ''; + $symtype = -1; # not a symbol at all. + } else { + $decl = ; + $lineno++ if defined $decl; + $decl = '' if not defined $decl; + chomp($decl); + if ($decl =~ /\A\s*extern\s+(SDL_DEPRECATED\s+|)(SDLMAIN_|SDL_)?DECLSPEC/) { + $symtype = 1; # function declaration + } elsif ($decl =~ /\A\s*SDL_FORCE_INLINE/) { + $symtype = 1; # (forced-inline) function declaration + } elsif ($decl =~ /\A\s*\#\s*define\s+/) { + $symtype = 2; # macro + } elsif ($decl =~ /\A\s*(typedef\s+|)(struct|union)/) { + $symtype = 3; # struct or union + } elsif ($decl =~ /\A\s*(typedef\s+|)enum/) { + $symtype = 4; # enum + } elsif ($decl =~ /\A\s*typedef\s+.*\Z/) { + $symtype = 5; # other typedef + } else { + #print "Found doxygen but no function sig:\n$str\n\n"; + foreach (@templines) { + push @contents, $_; + add_coverage_gap($_, $dent, $lineno); + } + push @contents, $decl; + add_coverage_gap($decl, $dent, $lineno); + next; + } + } + } + + my @paraminfo = (); + my $rettype = undef; + my @decllines = ( $decl ); + my $sym = ''; + + if ($symtype == -1) { # category documentation with no symbol attached. + @decllines = (); + if ($str =~ /^#\s*Category(.*?)\s*$/m) { + $sym = "[category documentation] $1"; # make a fake, unique symbol that's not valid C. + } else { + die("Unexpected category documentation line '$str' in '$incpath/$dent' ...?"); + } + $headercategorydocs{$current_wiki_category} = $sym; + } elsif ($symtype == 1) { # a function + my $is_forced_inline = ($decl =~ /\A\s*SDL_FORCE_INLINE/); + + if ($is_forced_inline) { + if (not $decl =~ /\)\s*(\{.*|)\s*\Z/) { + while () { + chomp; + $lineno++; + push @decllines, $_; + s/\A\s+//; + s/\s+\Z//; + $decl .= " $_"; + last if /\)\s*(\{.*|)\s*\Z/; + } + } + $decl =~ s/\s*\)\s*(\{.*|)\s*\Z/);/; + } else { + if (not $decl =~ /;/) { + while () { + chomp; + $lineno++; + push @decllines, $_; + s/\A\s+//; + s/\s+\Z//; + $decl .= " $_"; + last if /;/; + } + } + $decl =~ s/\s+\);\Z/);/; + $decl =~ s/\s+;\Z/;/; + } + + $decl =~ s/\s+\Z//; + + $decl = strip_fn_declaration_metadata($decl); + + my $paramsstr = undef; + + if (!$is_forced_inline && $decl =~ /\A\s*extern\s+(SDL_DEPRECATED\s+|)(SDLMAIN_|SDL_)?DECLSPEC\s+(const\s+|)(unsigned\s+|)(.*?)([\*\s]+)(\*?)\s*SDLCALL\s+(.*?)\s*\((.*?)\);/) { + $sym = $8; + $rettype = "$3$4$5$6"; + $paramsstr = $9; + } elsif ($is_forced_inline && $decl =~ /\A\s*SDL_FORCE_INLINE\s+(SDL_DEPRECATED\s+|)(const\s+|)(unsigned\s+|)(.*?)([\*\s]+)(.*?)\s*\((.*?)\);/) { + $sym = $6; + $rettype = "$2$3$4$5"; + $paramsstr = $7; + } else { #print "Found doxygen but no function sig:\n$str\n\n"; foreach (@templines) { push @contents, $_; } - push @contents, $decl; + foreach (@decllines) { + push @contents, $_; + } next; } - } - my @decllines = ( $decl ); + $rettype = sanitize_c_typename($rettype); + + if ($paramsstr =~ /\(/) { + die("\n\n$0 FAILURE!\n" . + "There's a '(' in the parameters for function '$sym' '$incpath/$dent'.\n" . + "This usually means there's a parameter that's a function pointer type.\n" . + "This causes problems for wikiheaders.pl and is less readable, too.\n" . + "Please put that function pointer into a typedef,\n" . + "and use the new type in this function's signature instead!\n\n"); + } - if (not $decl =~ /\)\s*;/) { + my @params = split(/,/, $paramsstr); + my $dotdotdot = 0; + foreach (@params) { + my $p = $_; + $p =~ s/\A\s+//; + $p =~ s/\s+\Z//; + if (($p eq 'void') || ($p eq '')) { + die("Void parameter in a function with multiple params?! ('$sym' in '$incpath/$dent')") if (scalar(@params) != 1); + } elsif ($p eq '...') { + die("Mutiple '...' params?! ('$sym' in '$incpath/$dent')") if ($dotdotdot); + $dotdotdot = 1; + push @paraminfo, '...'; + push @paraminfo, '...'; + } elsif ($p =~ /\A(.*)\s+([a-zA-Z0-9_\*\[\]]+)\Z/) { + die("Parameter after '...' param?! ('$sym' in '$incpath/$dent')") if ($dotdotdot); + my $t = $1; + my $n = $2; + if ($n =~ s/\A(\*+)//) { + $t .= $1; # move any `*` that stuck to the name over. + } + if ($n =~ s/\[\]\Z//) { + $t = "$t*"; # move any `[]` that stuck to the name over, as a pointer. + } + $t = sanitize_c_typename($t); + #print("$t\n"); + #print("$n\n"); + push @paraminfo, $n; + push @paraminfo, $t; + } else { + die("Unexpected parameter '$p' in function '$sym' in '$incpath/$dent'!"); + } + } + + if (!$is_forced_inline) { # don't do with forced-inline because we don't want the implementation inserted in the wiki. + $decl = ''; # rebuild this with the line breaks, since it looks better for syntax highlighting. + foreach (@decllines) { + if ($decl eq '') { + $decl = $_; + $decl =~ s/\Aextern\s+(SDL_DEPRECATED\s+|)(SDLMAIN_|SDL_)?DECLSPEC\s+(.*?)\s+(\*?)SDLCALL\s+/$3$4 /; + } else { + my $trimmed = $_; + # !!! FIXME: trim space for SDL_DEPRECATED if it was used, too. + $trimmed =~ s/\A\s{28}//; # 28 for shrinking to match the removed "extern SDL_DECLSPEC SDLCALL " + $decl .= $trimmed; + } + $decl .= "\n"; + } + } + + $decl = strip_fn_declaration_metadata($decl); + + # !!! FIXME: code duplication with typedef processing, below. + # We assume any `#define`s directly after the function are related to it: probably bitflags for an integer typedef. + # We'll also allow some other basic preprocessor lines. + # Blank lines are allowed, anything else, even comments, are not. + my $blank_lines = 0; + my $lastpos = tell(FH); + my $lastlineno = $lineno; + my $additional_decl = ''; + my $saw_define = 0; while () { chomp; - push @decllines, $_; - s/\A\s+//; - s/\s+\Z//; - $decl .= " $_"; - last if /\)\s*;/; + + $lineno++; + + if (/\A\s*\Z/) { + $blank_lines++; + } elsif (/\A\s*\#\s*(define|if|else|elif|endif)(\s+|\Z)/) { + if (/\A\s*\#\s*define\s+([a-zA-Z0-9_]*)/) { + $referenceonly{$1} = $sym; + $saw_define = 1; + } elsif (!$saw_define) { + # if the first non-blank thing isn't a #define, assume we're done. + seek(FH, $lastpos, 0); # re-read eaten lines again next time. + $lineno = $lastlineno; + last; + } + + # update strings now that we know everything pending is to be applied to this declaration. Add pending blank lines and the new text. + + # At Sam's request, don't list property defines with functions. (See #9440) + my $is_property = /\A\s*\#\s*define\s+SDL_PROP_/; + if (!$is_property) { + if ($blank_lines > 0) { + while ($blank_lines > 0) { + $additional_decl .= "\n"; + push @decllines, ''; + $blank_lines--; + } + } + $additional_decl .= "\n$_"; + push @decllines, $_; + $lastpos = tell(FH); + } + } else { + seek(FH, $lastpos, 0); # re-read eaten lines again next time. + $lineno = $lastlineno; + last; + } } - } + $decl .= $additional_decl; - $decl =~ s/\s+\);\Z/);/; - $decl =~ s/\s+\Z//; - #print("DECL: [$decl]\n"); + } elsif ($symtype == 2) { # a macro + if ($decl =~ /\A\s*\#\s*define\s+(.*?)(\(.*?\)|)\s+/) { + $sym = $1; + } else { + #print "Found doxygen but no macro:\n$str\n\n"; + foreach (@templines) { + push @contents, $_; + } + foreach (@decllines) { + push @contents, $_; + } + next; + } - my $fn = ''; - if ($decl =~ /\A\s*extern\s+(SDL_DEPRECATED\s+|)DECLSPEC\s+(const\s+|)(unsigned\s+|)(.*?)\s*(\*?)\s*SDLCALL\s+(.*?)\s*\((.*?)\);/) { - $fn = $6; - #$decl =~ s/\A\s*extern\s+DECLSPEC\s+(.*?)\s+SDLCALL/$1/; - } else { - #print "Found doxygen but no function sig:\n$str\n\n"; - foreach (@templines) { - push @contents, $_; + while ($decl =~ /\\\Z/) { + my $l = ; + last if not $l; + $lineno++; + chomp($l); + push @decllines, $l; + #$l =~ s/\A\s+//; + $l =~ s/\s+\Z//; + $decl .= "\n$l"; } - foreach (@decllines) { - push @contents, $_; + } elsif (($symtype == 3) || ($symtype == 4)) { # struct or union or enum + my $has_definition = 0; + if ($decl =~ /\A\s*(typedef\s+|)(struct|union|enum)\s*(.*?)\s*(\n|\{|\;|\Z)/) { + my $ctype = $2; + my $origsym = $3; + my $ending = $4; + $sym = $origsym; + if ($sym =~ s/\A(.*?)(\s+)(.*?)\Z/$1/) { + die("Failed to parse '$origsym' correctly!") if ($sym ne $1); # Thought this was "typedef struct MySym MySym;" ... it was not. :( This is a hack! + } + if ($sym eq '') { + die("\n\n$0 FAILURE!\n" . + "There's a 'typedef $ctype' in $incpath/$dent without a name at the top.\n" . + "Instead of `typedef $ctype {} x;`, this should be `typedef $ctype x {} x;`.\n" . + "This causes problems for wikiheaders.pl and scripting language bindings.\n" . + "Please fix it!\n\n"); + } + $has_definition = ($ending ne ';'); + } else { + #print "Found doxygen but no datatype:\n$str\n\n"; + foreach (@templines) { + push @contents, $_; + } + foreach (@decllines) { + push @contents, $_; + } + next; } - next; - } - $decl = ''; # build this with the line breaks, since it looks better for syntax highlighting. - foreach (@decllines) { - if ($decl eq '') { - $decl = $_; - $decl =~ s/\Aextern\s+(SDL_DEPRECATED\s+|)DECLSPEC\s+(.*?)\s+(\*?)SDLCALL\s+/$2$3 /; + # This block attempts to find the whole struct/union/enum definition by counting matching brackets. Kind of yucky. + if ($has_definition) { + my $started = 0; + my $brackets = 0; + my $pending = $decl; + + $decl = ''; + while (!$started || ($brackets != 0)) { + foreach my $seg (split(/([{}])/, $pending)) { + $decl .= $seg; + if ($seg eq '{') { + $started = 1; + $brackets++; + } elsif ($seg eq '}') { + die("Something is wrong with header $incpath/$dent while parsing $sym; is a bracket missing?\n") if ($brackets <= 0); + $brackets--; + } + } + + if (!$started || ($brackets != 0)) { + $pending = ; + die("EOF/error reading $incpath/$dent while parsing $sym\n") if not $pending; + $lineno++; + chomp($pending); + push @decllines, $pending; + $decl .= "\n"; + } + } + # this currently assumes the struct/union/enum ends on the line with the final bracket. I'm not writing a C parser here, fix the header! + } + } elsif ($symtype == 5) { # other typedef + if ($decl =~ /\A\s*typedef\s+(.*)\Z/) { + my $tdstr = $1; + + if (not $decl =~ /;/) { + while () { + chomp; + $lineno++; + push @decllines, $_; + s/\A\s+//; + s/\s+\Z//; + $decl .= " $_"; + last if /;/; + } + } + $decl =~ s/\s+(\))?;\Z/$1;/; + + $tdstr =~ s/;\s*\Z//; + + #my $datatype; + if ($tdstr =~ /\A(.*?)\s*\((.*?)\s*\*\s*(.*?)\)\s*\((.*?)(\))?/) { # a function pointer type + $sym = $3; + #$datatype = "$1 ($2 *$sym)($4)"; + } elsif ($tdstr =~ /\A(.*[\s\*]+)(.*?)\s*\Z/) { + $sym = $2; + #$datatype = $1; + } else { + die("Failed to parse typedef '$tdstr' in $incpath/$dent!\n"); # I'm hitting a C grammar nail with a regexp hammer here, y'all. + } + + $sym =~ s/\A\s+//; + $sym =~ s/\s+\Z//; + #$datatype =~ s/\A\s+//; + #$datatype =~ s/\s+\Z//; } else { - my $trimmed = $_; - # !!! FIXME: trim space for SDL_DEPRECATED if it was used, too. - $trimmed =~ s/\A\s{24}//; # 24 for shrinking to match the removed "extern DECLSPEC SDLCALL " - $decl .= $trimmed; + #print "Found doxygen but no datatype:\n$str\n\n"; + foreach (@templines) { + push @contents, $_; + } + foreach (@decllines) { + push @contents, $_; + } + next; + } + + # We assume any `#define`s directly after the typedef are related to it: probably bitflags for an integer typedef. + # We'll also allow some other basic preprocessor lines. + # Blank lines are allowed, anything else, even comments, are not. + my $blank_lines = 0; + my $lastpos = tell(FH); + my $lastlineno = $lineno; + my $additional_decl = ''; + my $saw_define = 0; + while () { + chomp; + + $lineno++; + + if (/\A\s*\Z/) { + $blank_lines++; + } elsif (/\A\s*\#\s*(define|if|else|elif|endif)(\s+|\Z)/) { + if (/\A\s*\#\s*define\s+([a-zA-Z0-9_]*)/) { + $referenceonly{$1} = $sym; + $saw_define = 1; + } elsif (!$saw_define) { + # if the first non-blank thing isn't a #define, assume we're done. + seek(FH, $lastpos, 0); # re-read eaten lines again next time. + $lineno = $lastlineno; + last; + } + # update strings now that we know everything pending is to be applied to this declaration. Add pending blank lines and the new text. + if ($blank_lines > 0) { + while ($blank_lines > 0) { + $additional_decl .= "\n"; + push @decllines, ''; + $blank_lines--; + } + } + $additional_decl .= "\n$_"; + push @decllines, $_; + $lastpos = tell(FH); + } else { + seek(FH, $lastpos, 0); # re-read eaten lines again next time. + $lineno = $lastlineno; + last; + } } - $decl .= "\n"; + $decl .= $additional_decl; + } else { + die("Unexpected symtype $symtype"); } - #print("$fn:\n$str\n\n"); + #print("DECL: [$decl]\n"); + + #print("$sym:\n$str\n\n"); # There might be multiple declarations of a function due to #ifdefs, # and only one of them will have documentation. If we hit an # undocumented one before, delete the placeholder line we left for # it so it doesn't accumulate a new blank line on each run. - my $skipfn = 0; - if (defined $headerfuncshasdoxygen{$fn}) { - if ($headerfuncshasdoxygen{$fn} == 0) { # An undocumented declaration already exists, nuke its placeholder line. - delete $contents[$headerfuncschunk{$fn}]; # delete DOES NOT RENUMBER existing elements! + my $skipsym = 0; + if (defined $headersymshasdoxygen{$sym}) { + if ($headersymshasdoxygen{$sym} == 0) { # An undocumented declaration already exists, nuke its placeholder line. + delete $contents[$headersymschunk{$sym}]; # delete DOES NOT RENUMBER existing elements! } else { # documented function already existed? - $skipfn = 1; # don't add this copy to the list of functions. + $skipsym = 1; # don't add this copy to the list of functions. if ($has_doxygen) { - print STDERR "WARNING: Function '$fn' appears to be documented in multiple locations. Only keeping the first one we saw!\n"; + print STDERR "WARNING: Symbol '$sym' appears to be documented in multiple locations. Only keeping the first one we saw!\n"; } - push @contents, join("\n", @decllines); # just put the existing declation in as-is. + push @contents, join("\n", @decllines) if (scalar(@decllines) > 0); # just put the existing declation in as-is. } } - if (!$skipfn) { - $headerfuncs{$fn} = $str; - $headerdecls{$fn} = $decl; - $headerfuncslocation{$fn} = $dent; - $headerfuncschunk{$fn} = scalar(@contents); - $headerfuncshasdoxygen{$fn} = $has_doxygen; + if (!$skipsym) { + $headersymscategory{$sym} = $current_wiki_category if defined $current_wiki_category; + $headersyms{$sym} = $str; + $headerdecls{$sym} = $decl; + $headersymslocation{$sym} = $dent; + $headersymschunk{$sym} = scalar(@contents); + $headersymshasdoxygen{$sym} = $has_doxygen; + $headersymstype{$sym} = $symtype; + $headersymsparaminfo{$sym} = \@paraminfo if (scalar(@paraminfo) > 0); + $headersymsrettype{$sym} = $rettype if (defined($rettype)); push @contents, join("\n", @templines); - push @contents, join("\n", @decllines); + push @contents, join("\n", @decllines) if (scalar(@decllines) > 0); } } @@ -662,12 +1267,6 @@ sub usage { closedir(DH); -# !!! FIXME: we need to parse enums and typedefs and structs and defines and and and and and... -# !!! FIXME: (but functions are good enough for now.) - -my %wikitypes = (); # contains string of wiki page extension, like $wikitypes{"SDL_OpenAudio"} == 'mediawiki' -my %wikifuncs = (); # contains references to hash of strings, each string being the full contents of a section of a wiki page, like $wikifuncs{"SDL_OpenAudio"}{"Remarks"}. -my %wikisectionorder = (); # contains references to array, each array item being a key to a wikipage section in the correct order, like $wikisectionorder{"SDL_OpenAudio"}[2] == 'Remarks' opendir(DH, $wikipath) or die("Can't opendir '$wikipath': $!\n"); while (my $d = readdir(DH)) { my $dent = $d; @@ -678,17 +1277,48 @@ sub usage { next; # only dealing with wiki pages. } - my $fn = $dent; - $fn =~ s/\..*\Z//; + my $sym = $dent; + $sym =~ s/\..*\Z//; + # (There are other pages to ignore, but these are known ones to not bother parsing.) # Ignore FrontPage. - next if $fn eq 'FrontPage'; - - # Ignore "Category*" pages. - next if ($fn =~ /\ACategory/); + next if $sym eq 'FrontPage'; open(FH, '<', "$wikipath/$dent") or die("Can't open '$wikipath/$dent': $!\n"); + if ($sym =~ /\ACategory(.*?)\Z/) { # Special case for Category pages. + # Find the end of the category documentation in the existing file and append everything else to the new file. + my $cat = $1; + my $docstr = ''; + my $notdocstr = ''; + my $docs = 1; + while () { + chomp; + if ($docs) { + $docs = 0 if /\A\-\-\-\-\Z/; # Hit a footer? We're done. + $docs = 0 if /\A', $path) or die("Can't open '$path': $!\n"); + + print $fh "# Undocumented\n\n"; + print_undocumented_section($fh, 'Functions', 1); + #print_undocumented_section($fh, 'Macros', 2); + + close($fh); +} if ($warn_about_missing) { - foreach (keys %wikifuncs) { - my $fn = $_; - if (not defined $headerfuncs{$fn}) { - print("WARNING: $fn defined in the wiki but not the headers!\n"); + foreach (keys %wikisyms) { + my $sym = $_; + if (not defined $headersyms{$sym}) { + print STDERR "WARNING: $sym defined in the wiki but not the headers!\n"; } } - foreach (keys %headerfuncs) { - my $fn = $_; - if (not defined $wikifuncs{$fn}) { - print("WARNING: $fn defined in the headers but not the wiki!\n"); + foreach (keys %headersyms) { + my $sym = $_; + if (not defined $wikisyms{$sym}) { + print STDERR "WARNING: $sym defined in the headers but not the wiki!\n"; } } } @@ -802,23 +1452,44 @@ sub usage { $dewikify_mode = 'md'; $wordwrap_mode = 'md'; # the headers use Markdown format. - foreach (keys %headerfuncs) { - my $fn = $_; - next if not defined $wikifuncs{$fn}; # don't have a page for that function, skip it. - my $wikitype = $wikitypes{$fn}; - my $sectionsref = $wikifuncs{$fn}; + foreach (keys %headersyms) { + my $sym = $_; + next if not defined $wikisyms{$sym}; # don't have a page for that function, skip it. + my $symtype = $headersymstype{$sym}; + my $wikitype = $wikitypes{$sym}; + my $sectionsref = $wikisyms{$sym}; my $remarks = $sectionsref->{'Remarks'}; - my $params = $sectionsref->{'Function Parameters'}; my $returns = $sectionsref->{'Return Value'}; my $threadsafety = $sectionsref->{'Thread Safety'}; my $version = $sectionsref->{'Version'}; - my $related = $sectionsref->{'Related Functions'}; + my $related = $sectionsref->{'See Also'}; my $deprecated = $sectionsref->{'Deprecated'}; my $brief = $sectionsref->{'[Brief]'}; my $addblank = 0; my $str = ''; - $headerfuncshasdoxygen{$fn} = 1; # Added/changed doxygen for this header. + my $params = undef; + my $paramstr = undef; + + if ($symtype == -1) { # category documentation block. + # nothing to be done here. + } elsif (($symtype == 1) || (($symtype == 5))) { # we'll assume a typedef (5) with a \param is a function pointer typedef. + $params = $sectionsref->{'Function Parameters'}; + $paramstr = '\param'; + } elsif ($symtype == 2) { + $params = $sectionsref->{'Macro Parameters'}; + $paramstr = '\param'; + } elsif ($symtype == 3) { + $params = $sectionsref->{'Fields'}; + $paramstr = '\field'; + } elsif ($symtype == 4) { + $params = $sectionsref->{'Values'}; + $paramstr = '\value'; + } else { + die("Unexpected symtype $symtype"); + } + + $headersymshasdoxygen{$sym} = 1; # Added/changed doxygen for this header. $brief = dewikify($wikitype, $brief); $brief =~ s/\A(.*?\.) /$1\n/; # \brief should only be one sentence, delimited by a period+space. Split if necessary. @@ -860,21 +1531,32 @@ sub usage { if ($wikitype eq 'mediawiki') { die("Unexpected data parsing MediaWiki table") if (shift @lines ne '{|'); # Dump the '{|' start while (scalar(@lines) >= 3) { + my $c_datatype = shift @lines; my $name = shift @lines; my $desc = shift @lines; - my $terminator = shift @lines; # the '|-' or '|}' line. + my $terminator; # the '|-' or '|}' line. + + if (($desc eq '|-') or ($desc eq '|}') or (not $desc =~ /\A\|/)) { # we seem to be out of cells, which means there was no datatype column on this one. + $terminator = $desc; + $desc = $name; + $name = $c_datatype; + $c_datatype = ''; + } else { + $terminator = shift @lines; + } + last if ($terminator ne '|-') and ($terminator ne '|}'); # we seem to have run out of table. $name =~ s/\A\|\s*//; $name =~ s/\A\*\*(.*?)\*\*/$1/; $name =~ s/\A\'\'\'(.*?)\'\'\'/$1/; $desc =~ s/\A\|\s*//; - #print STDERR "FN: $fn NAME: $name DESC: $desc TERM: $terminator\n"; + #print STDERR "SYM: $sym CDATATYPE: $c_datatype NAME: $name DESC: $desc TERM: $terminator\n"; my $whitespacelen = length($name) + 8; my $whitespace = ' ' x $whitespacelen; $desc = wordwrap($desc, -$whitespacelen); my @desclines = split /\n/, $desc; my $firstline = shift @desclines; - $str .= "\\param $name $firstline\n"; + $str .= "$paramstr $name $firstline\n"; foreach (@desclines) { $str .= "${whitespace}$_\n"; } @@ -882,30 +1564,37 @@ sub usage { } elsif ($wikitype eq 'md') { my $l; $l = shift @lines; - die("Unexpected data parsing Markdown table") if (not $l =~ /\A\s*\|\s*\|\s*\|\s*\Z/); + die("Unexpected data parsing Markdown table") if (not $l =~ /\A(\s*\|)?\s*\|\s*\|\s*\|\s*\Z/); $l = shift @lines; - die("Unexpected data parsing Markdown table") if (not $l =~ /\A\s*\|\s*\-*\s*\|\s*\-*\s*\|\s*\Z/); + die("Unexpected data parsing Markdown table") if (not $l =~ /\A\s*(\|\s*\-*\s*)?\|\s*\-*\s*\|\s*\-*\s*\|\s*\Z/); while (scalar(@lines) >= 1) { $l = shift @lines; - if ($l =~ /\A\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|\s*\Z/) { - my $name = $1; - my $desc = $2; - $name =~ s/\A\*\*(.*?)\*\*/$1/; - $name =~ s/\A\'\'\'(.*?)\'\'\'/$1/; - #print STDERR "FN: $fn NAME: $name DESC: $desc\n"; - my $whitespacelen = length($name) + 8; - my $whitespace = ' ' x $whitespacelen; - $desc = wordwrap($desc, -$whitespacelen); - my @desclines = split /\n/, $desc; - my $firstline = shift @desclines; - $str .= "\\param $name $firstline\n"; - foreach (@desclines) { - $str .= "${whitespace}$_\n"; - } + my $name; + my $desc; + if ($l =~ /\A\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|\s*\Z/) { + # c datatype is $1, but we don't care about it here. + $name = $2; + $desc = $3; + } elsif ($l =~ /\A\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|\s*\Z/) { + $name = $1; + $desc = $2; } else { last; # we seem to have run out of table. } - } + + $name =~ s/\A\*\*(.*?)\*\*/$1/; + $name =~ s/\A\'\'\'(.*?)\'\'\'/$1/; + #print STDERR "SYM: $sym NAME: $name DESC: $desc\n"; + my $whitespacelen = length($name) + 8; + my $whitespace = ' ' x $whitespacelen; + $desc = wordwrap($desc, -$whitespacelen); + my @desclines = split /\n/, $desc; + my $firstline = shift @desclines; + $str .= "$paramstr $name $firstline\n"; + foreach (@desclines) { + $str .= "${whitespace}$_\n"; + } + } } else { die("write me"); } @@ -914,8 +1603,9 @@ sub usage { if (defined $returns) { $str .= "\n" if $addblank; $addblank = 1; my $r = dewikify($wikitype, $returns); + $r =~ s/\A\(.*?\)\s*//; # Chop datatype in parentheses off the front. my $retstr = "\\returns"; - if ($r =~ s/\AReturn(s?) //) { + if ($r =~ s/\AReturn(s?)\s+//) { $retstr = "\\return$1"; } @@ -966,18 +1656,20 @@ sub usage { my $v = dewikify($wikitype, $related); my @desclines = split /\n/, $v; foreach (@desclines) { - s/\A(\:|\* )//; s/\(\)\Z//; # Convert "SDL_Func()" to "SDL_Func" s/\[\[(.*?)\]\]/$1/; # in case some wikilinks remain. s/\[(.*?)\]\(.*?\)/$1/; # in case some wikilinks remain. s/\A\/*//; + s/\A\s*[\:\*\-]\s*//; + s/\A\s+//; + s/\s+\Z//; $str .= "\\sa $_\n"; } } - my $header = $headerfuncslocation{$fn}; + my $header = $headersymslocation{$sym}; my $contentsref = $headers{$header}; - my $chunk = $headerfuncschunk{$fn}; + my $chunk = $headersymschunk{$sym}; my @lines = split /\n/, $str; @@ -995,10 +1687,10 @@ sub usage { } $output .= " */"; - #print("$fn:\n$output\n\n"); + #print("$sym:\n[$output]\n\n"); $$contentsref[$chunk] = $output; - #$$contentsref[$chunk+1] = $headerdecls{$fn}; + #$$contentsref[$chunk+1] = $headerdecls{$sym}; $changed_headers{$header} = 1; } @@ -1008,12 +1700,12 @@ sub usage { # this is kinda inefficient, but oh well. my @removelines = (); - foreach (keys %headerfuncslocation) { - my $fn = $_; - next if $headerfuncshasdoxygen{$fn}; - next if $headerfuncslocation{$fn} ne $header; + foreach (keys %headersymslocation) { + my $sym = $_; + next if $headersymshasdoxygen{$sym}; + next if $headersymslocation{$sym} ne $header; # the index of the blank line we put before the function declaration in case we needed to replace it with new content from the wiki. - push @removelines, $headerfuncschunk{$fn}; + push @removelines, $headersymschunk{$sym}; } my $contentsref = $headers{$header}; @@ -1038,12 +1730,13 @@ sub usage { my $dent = $_; if ($dent =~ /\A(.*?)\.md\Z/) { # we only bridge Markdown files here. next if $1 eq 'FrontPage'; - filecopy("$wikireadmepath/$dent", "$readmepath/README-$dent", "\r\n"); + filecopy("$wikireadmepath/$dent", "$readmepath/README-$dent", "\n"); } } closedir(DH); } } + } elsif ($copy_direction == -1) { # --copy-to-wiki if (defined $changeformat) { @@ -1051,18 +1744,20 @@ sub usage { $wordwrap_mode = $changeformat; } - foreach (keys %headerfuncs) { - my $fn = $_; - next if not $headerfuncshasdoxygen{$fn}; - my $origwikitype = defined $wikitypes{$fn} ? $wikitypes{$fn} : 'md'; # default to MarkDown for new stuff. + foreach (keys %headersyms) { + my $sym = $_; + next if not $headersymshasdoxygen{$sym}; + next if $sym =~ /\A\[category documentation\]/; # not real symbols, we handle this elsewhere. + my $symtype = $headersymstype{$sym}; + my $origwikitype = defined $wikitypes{$sym} ? $wikitypes{$sym} : 'md'; # default to MarkDown for new stuff. my $wikitype = (defined $changeformat) ? $changeformat : $origwikitype; - die("Unexpected wikitype '$wikitype'\n") if (($wikitype ne 'mediawiki') and ($wikitype ne 'md') and ($wikitype ne 'manpage')); + die("Unexpected wikitype '$wikitype'") if (($wikitype ne 'mediawiki') and ($wikitype ne 'md') and ($wikitype ne 'manpage')); - #print("$fn\n"); next; + #print("$sym\n"); next; $wordwrap_mode = $wikitype; - my $raw = $headerfuncs{$fn}; # raw doxygen text with comment characters stripped from start/end and start of each line. + my $raw = $headersyms{$sym}; # raw doxygen text with comment characters stripped from start/end and start of each line. next if not defined $raw; $raw =~ s/\A\s*\\brief\s+//; # Technically we don't need \brief (please turn on JAVADOC_AUTOBRIEF if you use Doxygen), so just in case one is present, strip it. @@ -1078,27 +1773,20 @@ sub usage { $brief .= "$l "; } + $brief =~ s/\s+\Z//; $brief =~ s/\A(.*?\.) /$1\n\n/; # \brief should only be one sentence, delimited by a period+space. Split if necessary. my @briefsplit = split /\n/, $brief; + + next if not defined $briefsplit[0]; # No brief text? Probably a bogus Doxygen comment, skip it. + $brief = wikify($wikitype, shift @briefsplit) . "\n"; @doxygenlines = (@briefsplit, @doxygenlines); my $remarks = ''; - # !!! FIXME: wordwrap and wikify might handle this, now. while (@doxygenlines) { last if $doxygenlines[0] =~ /\A\\/; # some sort of doxygen command, assume we're past the general remarks. my $l = shift @doxygenlines; - if ($l =~ /\A\`\`\`/) { # syntax highlighting, don't reformat. - $remarks .= "$l\n"; - while ((@doxygenlines) && (not $l =~ /\`\`\`\Z/)) { - $l = shift @doxygenlines; - $remarks .= "$l\n"; - } - } else { - $l =~ s/\A\s*//; - $l =~ s/\s*\Z//; - $remarks .= "$l\n"; - } + $remarks .= "$l\n"; } #print("REMARKS:\n\n $remarks\n\n"); @@ -1107,29 +1795,31 @@ sub usage { $remarks =~ s/\A\s*//; $remarks =~ s/\s*\Z//; - my $decl = $headerdecls{$fn}; - #$decl =~ s/\*\s+SDLCALL/ *SDLCALL/; # Try to make "void * Function" become "void *Function" - #$decl =~ s/\A\s*extern\s+(SDL_DEPRECATED\s+|)DECLSPEC\s+(.*?)\s+(\*?)SDLCALL/$2$3/; + my $decl = $headerdecls{$sym}; my $syntax = ''; if ($wikitype eq 'mediawiki') { $syntax = "\n$decl\n"; } elsif ($wikitype eq 'md') { + $decl =~ s/\n+\Z//; $syntax = "```c\n$decl\n```\n"; - } else { die("Expected wikitype '$wikitype'\n"); } + } else { die("Expected wikitype '$wikitype'"); } my %sections = (); $sections{'[Brief]'} = $brief; # include this section even if blank so we get a title line. $sections{'Remarks'} = "$remarks\n" if $remarks ne ''; $sections{'Syntax'} = $syntax; - my @params = (); # have to parse these and build up the wiki tables after, since Markdown needs to know the length of the largest string. :/ + my %params = (); # have to parse these and build up the wiki tables after, since Markdown needs to know the length of the largest string. :/ + my @paramsorder = (); + my $fnsigparams = $headersymsparaminfo{$sym}; while (@doxygenlines) { my $l = shift @doxygenlines; - if ($l =~ /\A\\param\s+(.*?)\s+(.*)\Z/) { - my $arg = $1; - my $desc = $2; + # We allow param/field/value interchangeably, even if it doesn't make sense. The next --copy-to-headers will correct it anyhow. + if ($l =~ /\A\\(param|field|value)\s+(.*?)\s+(.*)\Z/) { + my $arg = $2; + my $desc = $3; while (@doxygenlines) { my $subline = $doxygenlines[0]; $subline =~ s/\A\s*//; @@ -1144,10 +1834,24 @@ sub usage { $desc =~ s/[\s\n]+\Z//ms; + # Validate this param. + if (defined($params{$arg})) { + print STDERR "WARNING: Symbol '$sym' has multiple '\\param $arg' declarations! Only keeping the first one!\n"; + } elsif (defined $fnsigparams) { + my $found = 0; + for (my $i = 0; $i < scalar(@$fnsigparams); $i += 2) { + $found = 1, last if (@$fnsigparams[$i] eq $arg); + } + if (!$found) { + print STDERR "WARNING: Symbol '$sym' has a '\\param $arg' for a param that doesn't exist. It will be removed!\n"; + } + } + # We need to know the length of the longest string to make Markdown tables, so we just store these off until everything is parsed. - push @params, $arg; - push @params, $desc; + $params{$arg} = $desc; + push @paramsorder, $arg; } elsif ($l =~ /\A\\r(eturns?)\s+(.*)\Z/) { + # !!! FIXME: complain if this isn't a function or macro. my $retstr = "R$1"; # "Return" or "Returns" my $desc = $2; while (@doxygenlines) { @@ -1162,7 +1866,20 @@ sub usage { } } $desc =~ s/[\s\n]+\Z//ms; - $sections{'Return Value'} = wordwrap("$retstr " . wikify($wikitype, $desc)) . "\n"; + + # Make sure the \returns info is valid. + my $rettype = $headersymsrettype{$sym}; + die("Don't have a rettype for '$sym' for some reason!") if (($symtype == 1) && (not defined($rettype))); + if (defined($sections{'Return Value'})) { + print STDERR "WARNING: Symbol '$sym' has multiple '\\return' declarations! Only keeping the first one!\n"; + } elsif (($symtype != 1) && ($symtype != 2) && ($symtype != 5)) { # !!! FIXME: if 5, make sure it's a function pointer typedef! + print STDERR "WARNING: Symbol '$sym' has a '\\return' declaration but isn't a function or macro! Removing it!\n"; + } elsif (($symtype == 1) && ($headersymsrettype{$sym} eq 'void')) { + print STDERR "WARNING: Function '$sym' has a '\\returns' declaration but function returns void! Removing it!\n"; + } else { + my $rettypestr = defined($rettype) ? ('(' . wikify($wikitype, $rettype) . ') ') : ''; + $sections{'Return Value'} = wordwrap("$rettypestr$retstr ". wikify($wikitype, $desc)) . "\n"; + } } elsif ($l =~ /\A\\deprecated\s+(.*)\Z/) { my $desc = $1; while (@doxygenlines) { @@ -1211,39 +1928,104 @@ sub usage { } elsif ($l =~ /\A\\sa\s+(.*)\Z/) { my $sa = $1; $sa =~ s/\(\)\Z//; # Convert "SDL_Func()" to "SDL_Func" - $sections{'Related Functions'} = '' if not defined $sections{'Related Functions'}; + $sections{'See Also'} = '' if not defined $sections{'See Also'}; if ($wikitype eq 'mediawiki') { - $sections{'Related Functions'} .= ":[[$sa]]\n"; + $sections{'See Also'} .= ":[[$sa]]\n"; } elsif ($wikitype eq 'md') { - $sections{'Related Functions'} .= "* [$sa]($sa)\n"; - } else { die("Expected wikitype '$wikitype'\n"); } + $sections{'See Also'} .= "- [$sa]($sa)\n"; + } else { die("Expected wikitype '$wikitype'"); } } } + # Make sure %params is in the same order as the actual function signature and add C datatypes... + my $params_has_c_datatype = 0; + my @final_params = (); + if (($symtype == 1) && (defined($headersymsparaminfo{$sym}))) { # is a function and we have param info for it... + my $fnsigparams = $headersymsparaminfo{$sym}; + for (my $i = 0; $i < scalar(@$fnsigparams); $i += 2) { + my $paramname = @$fnsigparams[$i]; + my $paramdesc = $params{$paramname}; + if (defined($paramdesc)) { + push @final_params, $paramname; # name + push @final_params, @$fnsigparams[$i+1]; # C datatype + push @final_params, $paramdesc; # description + $params_has_c_datatype = 1 if (defined(@$fnsigparams[$i+1])); + } else { + print STDERR "WARNING: Symbol '$sym' is missing a '\\param $paramname' declaration!\n"; + } + } + } else { + foreach (@paramsorder) { + my $paramname = $_; + my $paramdesc = $params{$paramname}; + if (defined($paramdesc)) { + push @final_params, $_; + push @final_params, undef; + push @final_params, $paramdesc; + } + } + } + + my $hfiletext = $wikiheaderfiletext; + $hfiletext =~ s/\%fname\%/$headersymslocation{$sym}/g; + $sections{'Header File'} = "$hfiletext\n"; + # Make sure this ends with a double-newline. - $sections{'Related Functions'} .= "\n" if defined $sections{'Related Functions'}; + $sections{'See Also'} .= "\n" if defined $sections{'See Also'}; + + if (0) { # !!! FIXME: this was a useful hack, but this needs to be generalized if we're going to do this always. + # Plug in a \since section if one wasn't listed. + if (not defined $sections{'Version'}) { + my $symtypename; + if ($symtype == 1) { + $symtypename = 'function'; + } elsif ($symtype == 2) { + $symtypename = 'macro'; + } elsif ($symtype == 3) { + $symtypename = 'struct'; + } elsif ($symtype == 4) { + $symtypename = 'enum'; + } elsif ($symtype == 5) { + $symtypename = 'datatype'; + } else { + die("Unexpected symbol type $symtype!"); + } + my $str = "This $symtypename is available since SDL 3.0.0."; + $sections{'Version'} = wordwrap(wikify($wikitype, $str)) . "\n"; + } + } # We can build the wiki table now that we have all the data. - if (scalar(@params) > 0) { + if (scalar(@final_params) > 0) { my $str = ''; if ($wikitype eq 'mediawiki') { - while (scalar(@params) > 0) { - my $arg = shift @params; - my $desc = wikify($wikitype, shift @params); + while (scalar(@final_params) > 0) { + my $arg = shift @final_params; + my $c_datatype = shift @final_params; + my $desc = wikify($wikitype, shift @final_params); + $c_datatype = '' if not defined $c_datatype; $str .= ($str eq '') ? "{|\n" : "|-\n"; + $str .= "|$c_datatype\n" if $params_has_c_datatype; $str .= "|'''$arg'''\n"; $str .= "|$desc\n"; } $str .= "|}\n"; } elsif ($wikitype eq 'md') { my $longest_arg = 0; + my $longest_c_datatype = 0; my $longest_desc = 0; my $which = 0; - foreach (@params) { + foreach (@final_params) { if ($which == 0) { - my $len = length($_) + 4; + my $len = length($_); $longest_arg = $len if ($len > $longest_arg); $which = 1; + } elsif ($which == 1) { + if (defined($_)) { + my $len = length(wikify($wikitype, $_)); + $longest_c_datatype = $len if ($len > $longest_c_datatype); + } + $which = 2; } else { my $len = length(wikify($wikitype, $_)); $longest_desc = $len if ($len > $longest_desc); @@ -1252,24 +2034,33 @@ sub usage { } # Markdown tables are sort of obnoxious. - $str .= '| ' . (' ' x ($longest_arg+4)) . ' | ' . (' ' x $longest_desc) . " |\n"; - $str .= '| ' . ('-' x ($longest_arg+4)) . ' | ' . ('-' x $longest_desc) . " |\n"; - - while (@params) { - my $arg = shift @params; - my $desc = wikify($wikitype, shift @params); - $str .= "| **$arg** " . (' ' x ($longest_arg - length($arg))) . "| $desc" . (' ' x ($longest_desc - length($desc))) . " |\n"; + my $c_datatype_cell; + $c_datatype_cell = ($longest_c_datatype > 0) ? ('| ' . (' ' x ($longest_c_datatype)) . ' ') : ''; + $str .= $c_datatype_cell . '| ' . (' ' x ($longest_arg+4)) . ' | ' . (' ' x $longest_desc) . " |\n"; + $c_datatype_cell = ($longest_c_datatype > 0) ? ('| ' . ('-' x ($longest_c_datatype)) . ' ') : ''; + $str .= $c_datatype_cell . '| ' . ('-' x ($longest_arg+4)) . ' | ' . ('-' x $longest_desc) . " |\n"; + + while (@final_params) { + my $arg = shift @final_params; + my $c_datatype = shift @final_params; + $c_datatype_cell = ''; + if ($params_has_c_datatype) { + $c_datatype = defined($c_datatype) ? wikify($wikitype, $c_datatype) : ''; + $c_datatype_cell = ($longest_c_datatype > 0) ? ("| $c_datatype " . (' ' x ($longest_c_datatype - length($c_datatype)))) : ''; + } + my $desc = wikify($wikitype, shift @final_params); + $str .= $c_datatype_cell . "| **$arg** " . (' ' x ($longest_arg - length($arg))) . "| $desc" . (' ' x ($longest_desc - length($desc))) . " |\n"; } } else { - die("Unexpected wikitype!\n"); # should have checked this elsewhere. + die("Unexpected wikitype!"); # should have checked this elsewhere. } $sections{'Function Parameters'} = $str; } - my $path = "$wikipath/$_.${wikitype}.tmp"; + my $path = "$wikipath/$sym.${wikitype}.tmp"; open(FH, '>', $path) or die("Can't open '$path': $!\n"); - my $sectionsref = $wikifuncs{$fn}; + my $sectionsref = $wikisyms{$sym}; foreach (@standard_wiki_sections) { # drop sections we either replaced or removed from the original wiki's contents. @@ -1278,7 +2069,7 @@ sub usage { } } - my $wikisectionorderref = $wikisectionorder{$fn}; + my $wikisectionorderref = $wikisectionorder{$sym}; # Make sure there's a footer in the wiki that puts this function in CategoryAPI... if (not $$sectionsref{'[footer]'}) { @@ -1302,25 +2093,46 @@ sub usage { } } - # !!! FIXME: This won't be CategoryAPI if we eventually handle things other than functions. - my $footer = $$sectionsref{'[footer]'}; - - if ($wikitype eq 'mediawiki') { - $footer =~ s/\[\[CategoryAPI\]\],?\s*//g; - $footer = '[[CategoryAPI]]' . (($footer eq '') ? "\n" : ", $footer"); - } elsif ($wikitype eq 'md') { - $footer =~ s/\[CategoryAPI\]\(CategoryAPI\),?\s*//g; - $footer = '[CategoryAPI](CategoryAPI)' . (($footer eq '') ? '' : ', ') . $footer; - } else { die("Unexpected wikitype '$wikitype'\n"); } - $$sectionsref{'[footer]'} = $footer; + if ($symtype != -1) { # Don't do these in category documentation block + my $footer = $$sectionsref{'[footer]'}; + + my $symtypename; + if ($symtype == 1) { + $symtypename = 'Function'; + } elsif ($symtype == 2) { + $symtypename = 'Macro'; + } elsif ($symtype == 3) { + $symtypename = 'Struct'; + } elsif ($symtype == 4) { + $symtypename = 'Enum'; + } elsif ($symtype == 5) { + $symtypename = 'Datatype'; + } else { + die("Unexpected symbol type $symtype!"); + } - if (defined $wikipreamble) { - my $wikified_preamble = wikify($wikitype, $wikipreamble); + my $symcategory = $headersymscategory{$sym}; if ($wikitype eq 'mediawiki') { - print FH "====== $wikified_preamble ======\n"; + $footer =~ s/\[\[CategoryAPI\]\],?\s*//g; + $footer =~ s/\[\[CategoryAPI${symtypename}\]\],?\s*//g; + $footer =~ s/\[\[Category${symcategory}\]\],?\s*//g if defined $symcategory; + $footer = "[[CategoryAPI]], [[CategoryAPI$symtypename]]" . (defined $symcategory ? ", [[Category$symcategory]]" : '') . (($footer eq '') ? "\n" : ", $footer"); } elsif ($wikitype eq 'md') { - print FH "###### $wikified_preamble\n"; - } else { die("Unexpected wikitype '$wikitype'\n"); } + $footer =~ s/\[CategoryAPI\]\(CategoryAPI\),?\s*//g; + $footer =~ s/\[CategoryAPI${symtypename}\]\(CategoryAPI${symtypename}\),?\s*//g; + $footer =~ s/\[Category${symcategory}\]\(Category${symcategory}\),?\s*//g if defined $symcategory; + $footer = "[CategoryAPI](CategoryAPI), [CategoryAPI$symtypename](CategoryAPI$symtypename)" . (defined $symcategory ? ", [Category$symcategory](Category$symcategory)" : '') . (($footer eq '') ? '' : ', ') . $footer; + } else { die("Unexpected wikitype '$wikitype'"); } + $$sectionsref{'[footer]'} = $footer; + + if (defined $wikipreamble) { + my $wikified_preamble = wikify($wikitype, $wikipreamble); + if ($wikitype eq 'mediawiki') { + print FH "====== $wikified_preamble ======\n"; + } elsif ($wikitype eq 'md') { + print FH "###### $wikified_preamble\n"; + } else { die("Unexpected wikitype '$wikitype'"); } + } } my $prevsectstr = ''; @@ -1330,6 +2142,7 @@ sub usage { next if $sect eq '[start]'; next if (not defined $sections{$sect} and not defined $$sectionsref{$sect}); my $section = defined $sections{$sect} ? $sections{$sect} : $$sectionsref{$sect}; + if ($sect eq '[footer]') { # Make sure previous section ends with two newlines. if (substr($prevsectstr, -1) ne "\n") { @@ -1340,16 +2153,32 @@ sub usage { print FH "----\n"; # It's the same in Markdown and MediaWiki. } elsif ($sect eq '[Brief]') { if ($wikitype eq 'mediawiki') { - print FH "= $fn =\n\n"; + print FH "= $sym =\n\n"; } elsif ($wikitype eq 'md') { - print FH "# $fn\n\n"; - } else { die("Unexpected wikitype '$wikitype'\n"); } + print FH "# $sym\n\n"; + } else { die("Unexpected wikitype '$wikitype'"); } } else { - if ($wikitype eq 'mediawiki') { - print FH "\n== $sect ==\n\n"; - } elsif ($wikitype eq 'md') { - print FH "\n## $sect\n\n"; - } else { die("Unexpected wikitype '$wikitype'\n"); } + my $sectname = $sect; + if ($sectname eq 'Function Parameters') { # We use this same table for different things depending on what we're documenting, so rename it now. + if (($symtype == 1) || ($symtype == 5)) { # function (or typedef, in case it's a function pointer type). + } elsif ($symtype == 2) { # macro + $sectname = 'Macro Parameters'; + } elsif ($symtype == 3) { # struct/union + $sectname = 'Fields'; + } elsif ($symtype == 4) { # enum + $sectname = 'Values'; + } else { + die("Unexpected symtype $symtype"); + } + } + + if ($symtype != -1) { # Not for category documentation block + if ($wikitype eq 'mediawiki') { + print FH "\n== $sectname ==\n\n"; + } elsif ($wikitype eq 'md') { + print FH "\n## $sectname\n\n"; + } else { die("Unexpected wikitype '$wikitype'"); } + } } my $sectstr = defined $sections{$sect} ? $sections{$sect} : $$sectionsref{$sect}; @@ -1373,6 +2202,94 @@ sub usage { rename($path, "$wikipath/$_.${wikitype}") or die("Can't rename '$path' to '$wikipath/$_.${wikitype}': $!\n"); } + # Write out simple redirector pages if they don't already exist. + foreach (keys %referenceonly) { + my $sym = $_; + my $refersto = $referenceonly{$sym}; + my $path = "$wikipath/$sym.md"; # we only do Markdown for these. + next if (-f $path); # don't overwrite if it already exists. Delete the file if you need a rebuild! + open(FH, '>', $path) or die("Can't open '$path': $!\n"); + + if (defined $wikipreamble) { + my $wikified_preamble = wikify('md', $wikipreamble); + print FH "###### $wikified_preamble\n"; + } + + print FH "# $sym\n\nPlease refer to [$refersto]($refersto) for details.\n\n"; + print FH "----\n"; + print FH "[CategoryAPI](CategoryAPI), [CategoryAPIMacro](CategoryAPIMacro)\n\n"; + + close(FH); + } + + # Write out Category pages... + foreach (keys %headercategorydocs) { + my $cat = $_; + my $sym = $headercategorydocs{$cat}; # fake symbol + my $raw = $headersyms{$sym}; # raw doxygen text with comment characters stripped from start/end and start of each line. + my $wikitype = defined($wikitypes{$sym}) ? $wikitypes{$sym} : 'md'; + my $path = "$wikipath/Category$cat.$wikitype"; + + $raw = wordwrap(wikify($wikitype, $raw)); + + my $tmppath = "$path.tmp"; + open(FH, '>', $tmppath) or die("Can't open '$tmppath': $!\n"); + print FH "$raw\n\n"; + + if (! -f $path) { # Doesn't exist at all? Write out a template file. + # If writing from scratch, it's always a Markdown file. + die("Unexpected wikitype '$wikitype'!") if $wikitype ne 'md'; + print FH <<__EOF__ + + + +## Functions + + + + + +## Datatypes + + + + + +## Structs + + + + + +## Enums + + + + + +## Macros + + + + + +---- +[CategoryAPICategory](CategoryAPICategory) + +__EOF__ +; + } else { + my $endstr = $wikisyms{$sym}->{'[footer]'}; + if (defined($endstr)) { + print FH $endstr; + } + } + + close(FH); + rename($tmppath, $path) or die("Can't rename '$tmppath' to '$path': $!\n"); + } + + # Write out READMEs... if (defined $readmepath) { if ( -d $readmepath ) { mkdir($wikireadmepath); # just in case @@ -1412,10 +2329,7 @@ sub usage { } elsif ($copy_direction == -2) { # --copy-to-manpages # This only takes from the wiki data, since it has sections we omit from the headers, like code examples. - my $manpath = "$srcpath/man"; - mkdir($manpath); - $manpath .= "/man3"; - mkdir($manpath); + File::Path::make_path("$manpath/man3"); $dewikify_mode = 'manpage'; $wordwrap_mode = 'manpage'; @@ -1430,42 +2344,62 @@ sub usage { close(FH); } - my $gitrev = `cd "$srcpath" ; git rev-list HEAD~..`; - chomp($gitrev); + if (!$gitrev) { + $gitrev = `cd "$srcpath" ; git rev-list HEAD~..`; + chomp($gitrev); + } # !!! FIXME open(FH, '<', "$srcpath/$versionfname") or die("Can't open '$srcpath/$versionfname': $!\n"); my $majorver = 0; my $minorver = 0; - my $patchver = 0; + my $microver = 0; while () { chomp; if (/$versionmajorregex/) { $majorver = int($1); } elsif (/$versionminorregex/) { $minorver = int($1); - } elsif (/$versionpatchregex/) { - $patchver = int($1); + } elsif (/$versionmicroregex/) { + $microver = int($1); } } close(FH); - my $fullversion = "$majorver.$minorver.$patchver"; - - foreach (keys %headerfuncs) { - my $fn = $_; - next if not defined $wikifuncs{$fn}; # don't have a page for that function, skip it. - my $wikitype = $wikitypes{$fn}; - my $sectionsref = $wikifuncs{$fn}; + my $fullversion = "$majorver.$minorver.$microver"; + + foreach (keys %headersyms) { + my $sym = $_; + next if not defined $wikisyms{$sym}; # don't have a page for that function, skip it. + next if $sym =~ /\A\[category documentation\]/; # not real symbols + my $symtype = $headersymstype{$sym}; + my $wikitype = $wikitypes{$sym}; + my $sectionsref = $wikisyms{$sym}; my $remarks = $sectionsref->{'Remarks'}; my $params = $sectionsref->{'Function Parameters'}; my $returns = $sectionsref->{'Return Value'}; my $version = $sectionsref->{'Version'}; my $threadsafety = $sectionsref->{'Thread Safety'}; - my $related = $sectionsref->{'Related Functions'}; + my $related = $sectionsref->{'See Also'}; my $examples = $sectionsref->{'Code Examples'}; my $deprecated = $sectionsref->{'Deprecated'}; + my $headerfile = $manpageheaderfiletext; + $headerfile =~ s/\%fname\%/$headersymslocation{$sym}/g; + $headerfile .= "\n"; + + my $mansection; + my $mansectionname; + if (($symtype == 1) || ($symtype == 2)) { # functions or macros + $mansection = '3'; + $mansectionname = 'FUNCTIONS'; + } elsif (($symtype >= 3) && ($symtype <= 5)) { # struct/union/enum/typedef + $mansection = '3type'; + $mansectionname = 'DATATYPES'; + } else { + die("Unexpected symtype $symtype"); + } + my $brief = $sectionsref->{'[Brief]'}; - my $decl = $headerdecls{$fn}; + my $decl = $headerdecls{$sym}; my $str = ''; $brief = "$brief"; @@ -1485,14 +2419,14 @@ sub usage { $str .= ".\\\" This manpage content is licensed under Creative Commons\n"; $str .= ".\\\" Attribution 4.0 International (CC BY 4.0)\n"; $str .= ".\\\" https://creativecommons.org/licenses/by/4.0/\n"; - $str .= ".\\\" This manpage was generated from ${projectshortname}'s wiki page for $fn:\n"; - $str .= ".\\\" $wikiurl/$fn\n"; + $str .= ".\\\" This manpage was generated from ${projectshortname}'s wiki page for $sym:\n"; + $str .= ".\\\" $wikiurl/$sym\n"; $str .= ".\\\" Generated with SDL/build-scripts/wikiheaders.pl\n"; $str .= ".\\\" revision $gitrev\n" if $gitrev ne ''; $str .= ".\\\" Please report issues in this manpage's content at:\n"; $str .= ".\\\" $bugreporturl\n"; $str .= ".\\\" Please report issues in the generation of this manpage from the wiki at:\n"; - $str .= ".\\\" https://github.com/libsdl-org/SDL/issues/new?title=Misgenerated%20manpage%20for%20$fn\n"; + $str .= ".\\\" https://github.com/libsdl-org/SDL/issues/new?title=Misgenerated%20manpage%20for%20$sym\n"; $str .= ".\\\" $projectshortname can be found at $projecturl\n"; # Define a .URL macro. The "www.tmac" thing decides if we're using GNU roff (which has a .URL macro already), and if so, overrides the macro we just created. @@ -1502,13 +2436,23 @@ sub usage { $str .= "..\n"; $str .= '.if \n[.g] .mso www.tmac' . "\n"; - $str .= ".TH $fn 3 \"$projectshortname $fullversion\" \"$projectfullname\" \"$projectshortname$majorver FUNCTIONS\"\n"; + $str .= ".TH $sym $mansection \"$projectshortname $fullversion\" \"$projectfullname\" \"$projectshortname$majorver $mansectionname\"\n"; $str .= ".SH NAME\n"; - $str .= "$fn"; + $str .= "$sym"; $str .= " \\- $brief" if (defined $brief); $str .= "\n"; + if (defined $deprecated) { + $str .= ".SH DEPRECATED\n"; + $str .= dewikify($wikitype, $deprecated) . "\n"; + } + + if (defined $headerfile) { + $str .= ".SH HEADER FILE\n"; + $str .= dewikify($wikitype, $headerfile) . "\n"; + } + $str .= ".SH SYNOPSIS\n"; $str .= ".nf\n"; $str .= ".B #include \\(dq$mainincludefname\\(dq\n"; @@ -1525,27 +2469,44 @@ sub usage { $str .= $remarks . "\n"; } - if (defined $deprecated) { - $str .= ".SH DEPRECATED\n"; - $str .= dewikify($wikitype, $deprecated) . "\n"; - } - if (defined $params) { - $str .= ".SH FUNCTION PARAMETERS\n"; + if (($symtype == 1) || ($symtype == 5)) { + $str .= ".SH FUNCTION PARAMETERS\n"; + } elsif ($symtype == 2) { # macro + $str .= ".SH MACRO PARAMETERS\n"; + } elsif ($symtype == 3) { # struct/union + $str .= ".SH FIELDS\n"; + } elsif ($symtype == 4) { # enum + $str .= ".SH VALUES\n"; + } else { + die("Unexpected symtype $symtype"); + } + my @lines = split /\n/, $params; if ($wikitype eq 'mediawiki') { die("Unexpected data parsing MediaWiki table") if (shift @lines ne '{|'); # Dump the '{|' start while (scalar(@lines) >= 3) { + my $c_datatype = shift @lines; my $name = shift @lines; my $desc = shift @lines; - my $terminator = shift @lines; # the '|-' or '|}' line. + my $terminator; # the '|-' or '|}' line. + + if (($desc eq '|-') or ($desc eq '|}') or (not $desc =~ /\A\|/)) { # we seem to be out of cells, which means there was no datatype column on this one. + $terminator = $desc; + $desc = $name; + $name = $c_datatype; + $c_datatype = ''; + } else { + $terminator = shift @lines; + } + last if ($terminator ne '|-') and ($terminator ne '|}'); # we seem to have run out of table. $name =~ s/\A\|\s*//; $name =~ s/\A\*\*(.*?)\*\*/$1/; $name =~ s/\A\'\'\'(.*?)\'\'\'/$1/; $desc =~ s/\A\|\s*//; $desc = dewikify($wikitype, $desc); - #print STDERR "FN: $fn NAME: $name DESC: $desc TERM: $terminator\n"; + #print STDERR "SYM: $sym CDATATYPE: $c_datatype NAME: $name DESC: $desc TERM: $terminator\n"; $str .= ".TP\n"; $str .= ".I $name\n"; @@ -1554,24 +2515,31 @@ sub usage { } elsif ($wikitype eq 'md') { my $l; $l = shift @lines; - die("Unexpected data parsing Markdown table") if (not $l =~ /\A\s*\|\s*\|\s*\|\s*\Z/); + die("Unexpected data parsing Markdown table") if (not $l =~ /\A(\s*\|)?\s*\|\s*\|\s*\|\s*\Z/); $l = shift @lines; - die("Unexpected data parsing Markdown table") if (not $l =~ /\A\s*\|\s*\-*\s*\|\s*\-*\s*\|\s*\Z/); + die("Unexpected data parsing Markdown table") if (not $l =~ /\A\s*(\|\s*\-*\s*)?\|\s*\-*\s*\|\s*\-*\s*\|\s*\Z/); while (scalar(@lines) >= 1) { $l = shift @lines; - if ($l =~ /\A\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|\s*\Z/) { - my $name = $1; - my $desc = $2; - $name =~ s/\A\*\*(.*?)\*\*/$1/; - $name =~ s/\A\'\'\'(.*?)\'\'\'/$1/; - $desc = dewikify($wikitype, $desc); - - $str .= ".TP\n"; - $str .= ".I $name\n"; - $str .= "$desc\n"; + my $name; + my $desc; + if ($l =~ /\A\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|\s*\Z/) { + # c datatype is $1, but we don't care about it here. + $name = $2; + $desc = $3; + } elsif ($l =~ /\A\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|\s*\Z/) { + $name = $1; + $desc = $2; } else { last; # we seem to have run out of table. } + + $name =~ s/\A\*\*(.*?)\*\*/$1/; + $name =~ s/\A\'\'\'(.*?)\'\'\'/$1/; + $desc = dewikify($wikitype, $desc); + + $str .= ".TP\n"; + $str .= ".I $name\n"; + $str .= "$desc\n"; } } else { die("write me"); @@ -1579,8 +2547,10 @@ sub usage { } if (defined $returns) { + $returns = dewikify($wikitype, $returns); + $returns =~ s/\A\(.*?\)\s*//; # Chop datatype in parentheses off the front. $str .= ".SH RETURN VALUE\n"; - $str .= dewikify($wikitype, $returns) . "\n"; + $str .= "$returns\n"; } if (defined $examples) { @@ -1607,7 +2577,6 @@ sub usage { my @desclines = split /\n/, $v; my $nextstr = ''; foreach (@desclines) { - s/\A(\:|\* )//; s/\(\)\Z//; # Convert "SDL_Func()" to "SDL_Func" s/\[\[(.*?)\]\]/$1/; # in case some wikilinks remain. s/\[(.*?)\]\(.*?\)/$1/; # in case some wikilinks remain. @@ -1615,10 +2584,16 @@ sub usage { s/\A\/*//; s/\A\.BR\s+//; # dewikify added this, but we want to handle it. s/\A\.I\s+//; # dewikify added this, but we want to handle it. + s/\A\s*[\:\*\-]\s*//; s/\A\s+//; s/\s+\Z//; next if $_ eq ''; - $str .= "$nextstr.BR $_ (3)"; + my $seealso_symtype = $headersymstype{$_}; + my $seealso_mansection = '3'; + if (defined($seealso_symtype) && ($seealso_symtype >= 3) && ($seealso_symtype <= 5)) { # struct/union/enum/typedef + $seealso_mansection = '3type'; + } + $str .= "$nextstr.BR $_ ($seealso_mansection)"; $nextstr = ",\n"; } $str .= "\n"; @@ -1632,7 +2607,7 @@ sub usage { $str .= ".UE\n"; $str .= ".PP\n"; $str .= "This manpage was generated from\n"; - $str .= ".UR $wikiurl/$fn\n"; + $str .= ".UR $wikiurl/$sym\n"; $str .= "${projectshortname}'s wiki\n"; $str .= ".UE\n"; $str .= "using SDL/build-scripts/wikiheaders.pl"; @@ -1644,11 +2619,349 @@ sub usage { $str .= ".UE\n"; } - my $path = "$manpath/$_.3.tmp"; - open(FH, '>', $path) or die("Can't open '$path': $!\n"); + my $path = "$manpath/man3/$_.$mansection"; + my $tmppath = "$path.tmp"; + open(FH, '>', $tmppath) or die("Can't open '$tmppath': $!\n"); print FH $str; close(FH); - rename($path, "$manpath/$_.3") or die("Can't rename '$path' to '$manpath/$_.3': $!\n"); + rename($tmppath, $path) or die("Can't rename '$tmppath' to '$path': $!\n"); + } + +} elsif ($copy_direction == -4) { # --copy-to-latex + # This only takes from the wiki data, since it has sections we omit from the headers, like code examples. + + print STDERR "\n(The --copy-to-latex code is known to not be ready for serious use; send patches, not bug reports, please.)\n\n"; + + $dewikify_mode = 'LaTeX'; + $wordwrap_mode = 'LaTeX'; + + # !!! FIXME: code duplication with --copy-to-manpages section. + + my $introtxt = ''; + if (0) { + open(FH, '<', "$srcpath/LICENSE.txt") or die("Can't open '$srcpath/LICENSE.txt': $!\n"); + while () { + chomp; + $introtxt .= ".\\\" $_\n"; + } + close(FH); + } + + if (!$gitrev) { + $gitrev = `cd "$srcpath" ; git rev-list HEAD~..`; + chomp($gitrev); + } + + # !!! FIXME + open(FH, '<', "$srcpath/$versionfname") or die("Can't open '$srcpath/$versionfname': $!\n"); + my $majorver = 0; + my $minorver = 0; + my $microver = 0; + while () { + chomp; + if (/$versionmajorregex/) { + $majorver = int($1); + } elsif (/$versionminorregex/) { + $minorver = int($1); + } elsif (/$versionmicroregex/) { + $microver = int($1); + } + } + close(FH); + my $fullversion = "$majorver.$minorver.$microver"; + + my $latex_fname = "$srcpath/$projectshortname.tex"; + my $latex_tmpfname = "$latex_fname.tmp"; + open(TEXFH, '>', "$latex_tmpfname") or die("Can't open '$latex_tmpfname' for writing: $!\n"); + + print TEXFH <<__EOF__ +\\documentclass{book} + +\\usepackage{listings} +\\usepackage{color} +\\usepackage{hyperref} + +\\definecolor{dkgreen}{rgb}{0,0.6,0} +\\definecolor{gray}{rgb}{0.5,0.5,0.5} +\\definecolor{mauve}{rgb}{0.58,0,0.82} + +\\setcounter{secnumdepth}{0} + +\\lstset{frame=tb, + language=C, + aboveskip=3mm, + belowskip=3mm, + showstringspaces=false, + columns=flexible, + basicstyle={\\small\\ttfamily}, + numbers=none, + numberstyle=\\tiny\\color{gray}, + keywordstyle=\\color{blue}, + commentstyle=\\color{dkgreen}, + stringstyle=\\color{mauve}, + breaklines=true, + breakatwhitespace=true, + tabsize=3 +} + +\\begin{document} +\\frontmatter + +\\title{$projectfullname $majorver.$minorver.$microver Reference Manual} +\\author{The $projectshortname Developers} +\\maketitle + +\\mainmatter + +__EOF__ +; + + # !!! FIXME: Maybe put this in the book intro? print TEXFH $introtxt; + + # Sort symbols by symbol type, then alphabetically. + my @headersymskeys = sort { + my $symtypea = $headersymstype{$a}; + my $symtypeb = $headersymstype{$b}; + $symtypea = 3 if ($symtypea > 3); + $symtypeb = 3 if ($symtypeb > 3); + my $rc = $symtypea <=> $symtypeb; + if ($rc == 0) { + $rc = lc($a) cmp lc($b); + } + return $rc; + } keys %headersyms; + + my $current_symtype = 0; + my $current_chapter = ''; + + foreach (@headersymskeys) { + my $sym = $_; + next if not defined $wikisyms{$sym}; # don't have a page for that function, skip it. + next if $sym =~ /\A\[category documentation\]/; # not real symbols. + my $symtype = $headersymstype{$sym}; + my $wikitype = $wikitypes{$sym}; + my $sectionsref = $wikisyms{$sym}; + my $remarks = $sectionsref->{'Remarks'}; + my $params = $sectionsref->{'Function Parameters'}; + my $returns = $sectionsref->{'Return Value'}; + my $version = $sectionsref->{'Version'}; + my $threadsafety = $sectionsref->{'Thread Safety'}; + my $related = $sectionsref->{'See Also'}; + my $examples = $sectionsref->{'Code Examples'}; + my $deprecated = $sectionsref->{'Deprecated'}; + my $headerfile = $manpageheaderfiletext; + $headerfile =~ s/\%fname\%/$headersymslocation{$sym}/g; + $headerfile .= "\n"; + + my $brief = $sectionsref->{'[Brief]'}; + my $decl = $headerdecls{$sym}; + my $str = ''; + + if ($current_symtype != $symtype) { + my $newchapter = ''; + if ($symtype == 1) { + $newchapter = 'Functions'; + } elsif ($symtype == 2) { + $newchapter = 'Macros'; + } else { + $newchapter = 'Datatypes'; + } + + if ($current_chapter ne $newchapter) { + $str .= "\n\n\\chapter{$projectshortname $newchapter}\n\n\\clearpage\n\n"; + $current_chapter = $newchapter; + } + $current_symtype = $symtype; + } + + $brief = "$brief"; + $brief =~ s/\A[\s\n]*\= .*? \=\s*?\n+//ms; + $brief =~ s/\A[\s\n]*\=\= .*? \=\=\s*?\n+//ms; + $brief =~ s/\A(.*?\.) /$1\n/; # \brief should only be one sentence, delimited by a period+space. Split if necessary. + my @briefsplit = split /\n/, $brief; + $brief = shift @briefsplit; + $brief = dewikify($wikitype, $brief); + + if (defined $remarks) { + $remarks = dewikify($wikitype, join("\n", @briefsplit) . $remarks); + } + + my $escapedsym = escLaTeX($sym); + $str .= "\\hypertarget{$sym}{%\n\\section{$escapedsym}\\label{$sym}}\n\n"; + $str .= $brief if (defined $brief); + $str .= "\n\n"; + + if (defined $deprecated) { + $str .= "\\subsection{Deprecated}\n\n"; + $str .= dewikify($wikitype, $deprecated) . "\n"; + } + + if (defined $headerfile) { + $str .= "\\subsection{Header File}\n\n"; + $str .= dewikify($wikitype, $headerfile) . "\n"; + } + + $str .= "\\subsection{Syntax}\n\n"; + $str .= "\\begin{lstlisting}\n$decl\n\\end{lstlisting}\n"; + + if (defined $params) { + if (($symtype == 1) || ($symtype == 5)) { + $str .= "\\subsection{Function Parameters}\n\n"; + } elsif ($symtype == 2) { # macro + $str .= "\\subsection{Macro Parameters}\n\n"; + } elsif ($symtype == 3) { # struct/union + $str .= "\\subsection{Fields}\n\n"; + } elsif ($symtype == 4) { # enum + $str .= "\\subsection{Values}\n\n"; + } else { + die("Unexpected symtype $symtype"); + } + + $str .= "\\begin{center}\n"; + $str .= " \\begin{tabular}{ | l | p{0.75\\textwidth} |}\n"; + $str .= " \\hline\n"; + + # !!! FIXME: this table parsing has gotten complicated and is pasted three times in this file; move it to a subroutine! + my @lines = split /\n/, $params; + if ($wikitype eq 'mediawiki') { + die("Unexpected data parsing MediaWiki table") if (shift @lines ne '{|'); # Dump the '{|' start + while (scalar(@lines) >= 3) { + my $name = shift @lines; + my $desc = shift @lines; + my $terminator = shift @lines; # the '|-' or '|}' line. + last if ($terminator ne '|-') and ($terminator ne '|}'); # we seem to have run out of table. + $name =~ s/\A\|\s*//; + $name =~ s/\A\*\*(.*?)\*\*/$1/; + $name =~ s/\A\'\'\'(.*?)\'\'\'/$1/; + $name = escLaTeX($name); + $desc =~ s/\A\|\s*//; + $desc = dewikify($wikitype, $desc); + #print STDERR "FN: $sym NAME: $name DESC: $desc TERM: $terminator\n"; + $str .= " \\textbf{$name} & $desc \\\\ \\hline\n"; + } + } elsif ($wikitype eq 'md') { + my $l; + $l = shift @lines; + die("Unexpected data parsing Markdown table") if (not $l =~ /\A(\s*\|)?\s*\|\s*\|\s*\|\s*\Z/); + $l = shift @lines; + die("Unexpected data parsing Markdown table") if (not $l =~ /\A\s*(\|\s*\-*\s*)?\|\s*\-*\s*\|\s*\-*\s*\|\s*\Z/); + while (scalar(@lines) >= 1) { + $l = shift @lines; + my $name; + my $desc; + if ($l =~ /\A\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|\s*\Z/) { + # c datatype is $1, but we don't care about it here. + $name = $2; + $desc = $3; + } elsif ($l =~ /\A\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|\s*\Z/) { + $name = $1; + $desc = $2; + } else { + last; # we seem to have run out of table. + } + + $name =~ s/\A\*\*(.*?)\*\*/$1/; + $name =~ s/\A\'\'\'(.*?)\'\'\'/$1/; + $name = escLaTeX($name); + $desc = dewikify($wikitype, $desc); + $str .= " \\textbf{$name} & $desc \\\\ \\hline\n"; + } + } else { + die("write me"); + } + + $str .= " \\end{tabular}\n"; + $str .= "\\end{center}\n"; + } + + if (defined $returns) { + $returns = dewikify($wikitype, $returns); + $returns =~ s/\A\(.*?\)\s*//; # Chop datatype in parentheses off the front. + $str .= "\\subsection{Return Value}\n\n"; + $str .= "$returns\n"; + } + + if (defined $remarks) { + $str .= "\\subsection{Remarks}\n\n"; + $str .= $remarks . "\n"; + } + + if (defined $examples) { + $str .= "\\subsection{Code Examples}\n\n"; + $dewikify_manpage_code_indent = 0; + $str .= dewikify($wikitype, $examples) . "\n"; + $dewikify_manpage_code_indent = 1; + } + + if (defined $threadsafety) { + $str .= "\\subsection{Thread Safety}\n\n"; + $str .= dewikify($wikitype, $threadsafety) . "\n"; + } + + if (defined $version) { + $str .= "\\subsection{Version}\n\n"; + $str .= dewikify($wikitype, $version) . "\n"; + } + + if (defined $related) { + $str .= "\\subsection{See Also}\n\n"; + $str .= "\\begin{itemize}\n"; + # !!! FIXME: lots of code duplication in all of these. + my $v = dewikify($wikitype, $related); + my @desclines = split /\n/, $v; + my $nextstr = ''; + foreach (@desclines) { + s/\(\)\Z//; # Convert "SDL_Func()" to "SDL_Func" + s/\[\[(.*?)\]\]/$1/; # in case some wikilinks remain. + s/\[(.*?)\]\(.*?\)/$1/; # in case some wikilinks remain. + s/\A\*\s*\Z//; + s/\A\s*\\item\s*//; + s/\A\/*//; + s/\A\s*[\:\*\-]\s*//; + s/\A\s+//; + s/\s+\Z//; + next if $_ eq ''; + next if $_ eq '\begin{itemize}'; + next if $_ eq '\end{itemize}'; + $str .= " \\item $_\n"; + } + $str .= "\\end{itemize}\n"; + $str .= "\n"; + } + + # !!! FIXME: Maybe put copyright in the book intro? + if (0) { + $str .= ".SH COPYRIGHT\n"; + $str .= "This manpage is licensed under\n"; + $str .= ".UR https://creativecommons.org/licenses/by/4.0/\n"; + $str .= "Creative Commons Attribution 4.0 International (CC BY 4.0)\n"; + $str .= ".UE\n"; + $str .= ".PP\n"; + $str .= "This manpage was generated from\n"; + $str .= ".UR $wikiurl/$sym\n"; + $str .= "${projectshortname}'s wiki\n"; + $str .= ".UE\n"; + $str .= "using SDL/build-scripts/wikiheaders.pl"; + $str .= " revision $gitrev" if $gitrev ne ''; + $str .= ".\n"; + $str .= "Please report issues in this manpage at\n"; + $str .= ".UR $bugreporturl\n"; + $str .= "our bugtracker!\n"; + $str .= ".UE\n"; + } + + $str .= "\\clearpage\n\n"; + + print TEXFH $str; + } + + print TEXFH "\\end{document}\n\n"; + close(TEXFH); + rename($latex_tmpfname, $latex_fname) or die("Can't rename '$latex_tmpfname' to '$latex_fname': $!\n"); + +} elsif ($copy_direction == -3) { # --report-coverage-gaps + foreach (@coverage_gap) { + print("$_\n"); } } diff --git a/vs/sdl2/cmake/CheckCPUArchitecture.cmake b/vs/sdl2/cmake/CheckCPUArchitecture.cmake index 7e3e4594700..f2e4b8329d9 100644 --- a/vs/sdl2/cmake/CheckCPUArchitecture.cmake +++ b/vs/sdl2/cmake/CheckCPUArchitecture.cmake @@ -27,11 +27,13 @@ function(check_cpu_architecture ARCH VARIABLE) if(ARCH STREQUAL "x86") _internal_check_cpu_architecture("defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) ||defined( __i386) || defined(_M_IX86)" x86 ${VARIABLE}) elseif(ARCH STREQUAL "x64") - _internal_check_cpu_architecture("defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)" x64 ${VARIABLE}) + _internal_check_cpu_architecture("(defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)) && !defined(_M_ARM64EC)" x64 ${VARIABLE}) elseif(ARCH STREQUAL "arm32") _internal_check_cpu_architecture("defined(__arm__) || defined(_M_ARM)" arm32 ${VARIABLE}) elseif(ARCH STREQUAL "arm64") _internal_check_cpu_architecture("defined(__aarch64__) || defined(_M_ARM64)" arm64 ${VARIABLE}) + elseif(ARCH STREQUAL "arm64ec") + _internal_check_cpu_architecture("defined(_M_ARM64EC)" arm64ec ${VARIABLE}) elseif(ARCH STREQUAL "loongarch64") _internal_check_cpu_architecture("defined(__loongarch64)" loongarch64 ${VARIABLE}) else() diff --git a/vs/sdl2/cmake/sdlchecks.cmake b/vs/sdl2/cmake/sdlchecks.cmake index 81566536478..ea4c0ff4300 100644 --- a/vs/sdl2/cmake/sdlchecks.cmake +++ b/vs/sdl2/cmake/sdlchecks.cmake @@ -119,7 +119,7 @@ macro(CheckALSA) endif() endif() if(NOT HAVE_ALSA_SHARED) - list(APPEND CMAKE_DEPENDS ALSA::ALSA) + list(APPEND CMAKE_LIBS ALSA::ALSA) list(APPEND PKGCONFIG_DEPENDS alsa) endif() set(HAVE_SDL_AUDIO TRUE) @@ -947,7 +947,7 @@ macro(CheckPTHREAD) elseif(BSDI) set(PTHREAD_CFLAGS "-D_REENTRANT -D_THREAD_SAFE") set(PTHREAD_LDFLAGS "") - elseif(DARWIN) + elseif(MACOS) set(PTHREAD_CFLAGS "-D_THREAD_SAFE") # causes Carbon.p complaints? # set(PTHREAD_CFLAGS "-D_REENTRANT -D_THREAD_SAFE") @@ -963,7 +963,11 @@ macro(CheckPTHREAD) set(PTHREAD_LDFLAGS "-lpthread") elseif(SOLARIS) set(PTHREAD_CFLAGS "-D_REENTRANT") - set(PTHREAD_LDFLAGS "-pthread -lposix4") + if(CMAKE_C_COMPILER_ID MATCHES "SunPro") + set(PTHREAD_LDFLAGS "-mt -lpthread") + else() + set(PTHREAD_LDFLAGS "-pthread") + endif() elseif(SYSV5) set(PTHREAD_CFLAGS "-D_REENTRANT -Kthread") set(PTHREAD_LDFLAGS "") @@ -1249,6 +1253,7 @@ macro(CheckHIDAPI) if(HAVE_HIDAPI) if(ANDROID) + enable_language(CXX) list(APPEND SOURCE_FILES ${SDL2_SOURCE_DIR}/src/hidapi/android/hid.cpp) endif() if(IOS OR TVOS) @@ -1276,13 +1281,18 @@ endmacro() # - n/a macro(CheckRPI) if(SDL_RPI) - pkg_check_modules(VIDEO_RPI bcm_host brcmegl) + pkg_check_modules(VIDEO_RPI bcm_host) if (NOT VIDEO_RPI_FOUND) set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) set(VIDEO_RPI_LIBRARIES bcm_host ) - set(VIDEO_RPI_LDFLAGS "-Wl,-rpath,/opt/vc/lib") endif() + + pkg_check_modules(VIDEO_RPI_EGL brcmegl) + if (NOT VIDEO_RPI_EGL_FOUND) + set(VIDEO_RPI_EGL_LDFLAGS "-Wl,-rpath,/opt/vc/lib") + endif() + listtostr(VIDEO_RPI_INCLUDE_DIRS VIDEO_RPI_INCLUDE_FLAGS "-I") listtostr(VIDEO_RPI_LIBRARY_DIRS VIDEO_RPI_LIBRARY_FLAGS "-L") @@ -1291,9 +1301,7 @@ macro(CheckRPI) set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBRARIES}") check_c_source_compiles(" #include - #include int main(int argc, char **argv) { - EGL_DISPMANX_WINDOW_T window; bcm_host_init(); }" HAVE_RPI) set(CMAKE_REQUIRED_FLAGS "${ORIG_CMAKE_REQUIRED_FLAGS}") @@ -1307,7 +1315,7 @@ macro(CheckRPI) list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBRARIES}) # !!! FIXME: shouldn't be using CMAKE_C_FLAGS, right? set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") - list(APPEND EXTRA_LDFLAGS ${VIDEO_RPI_LDFLAGS}) + list(APPEND EXTRA_LDFLAGS ${VIDEO_RPI_LDFLAGS} ${VIDEO_RPI_EGL_LDFLAGS}) endif() endif() endmacro() @@ -1352,12 +1360,13 @@ endmacro() macro(CheckLibUDev) if(SDL_LIBUDEV) - check_include_file("libudev.h" have_libudev_header) - if(have_libudev_header) + check_include_file("libudev.h" HAVE_LIBUDEV_HEADER) + if(HAVE_LIBUDEV_HEADER) set(HAVE_LIBUDEV_H TRUE) FindLibraryAndSONAME(udev) if(UDEV_LIB_SONAME) set(SDL_UDEV_DYNAMIC "\"${UDEV_LIB_SONAME}\"") + set(HAVE_LIBUDEV TRUE) endif() endif() endif() diff --git a/vs/sdl2/cmake/sdlplatform.cmake b/vs/sdl2/cmake/sdlplatform.cmake index 6d8ece6ac52..d0d57671ed6 100644 --- a/vs/sdl2/cmake/sdlplatform.cmake +++ b/vs/sdl2/cmake/sdlplatform.cmake @@ -32,10 +32,8 @@ macro(SDL_DetectCMakePlatform) set(SDL_CMAKE_PLATFORM QNX) endif() elseif(APPLE) - if(CMAKE_SYSTEM_NAME MATCHES ".*Darwin.*") - set(SDL_CMAKE_PLATFORM DARWIN) - elseif(CMAKE_SYSTEM_NAME MATCHES ".*MacOS.*") - set(SDL_CMAKE_PLATFORM MACOSX) + if(CMAKE_SYSTEM_NAME MATCHES ".*(Darwin|MacOS).*") + set(SDL_CMAKE_PLATFORM MACOS) elseif(CMAKE_SYSTEM_NAME MATCHES ".*tvOS.*") set(SDL_CMAKE_PLATFORM TVOS) elseif(CMAKE_SYSTEM_NAME MATCHES ".*iOS.*") @@ -43,6 +41,10 @@ macro(SDL_DetectCMakePlatform) if(CMAKE_VERSION VERSION_LESS 3.14) set(SDL_CMAKE_PLATFORM IOS) endif() + elseif(CMAKE_SYSTEM_NAME MATCHES ".*watchOS.*") + set(SDL_CMAKE_PLATFORM WATCHOS) + elseif (CMAKE_SYSTEM_NAME MATCHES "visionOS") + set(SDL_CMAKE_PLATFORM VISIONOS) endif() elseif(CMAKE_SYSTEM_NAME MATCHES "BeOS.*") message_error("BeOS support has been removed as of SDL 2.0.2.") diff --git a/vs/sdl2/cmake/test/CMakeLists.txt b/vs/sdl2/cmake/test/CMakeLists.txt index 388e86c54ce..01fc1efcebd 100644 --- a/vs/sdl2/cmake/test/CMakeLists.txt +++ b/vs/sdl2/cmake/test/CMakeLists.txt @@ -3,6 +3,8 @@ cmake_minimum_required(VERSION 3.12) project(sdl_test LANGUAGES C) +include(CheckLanguage) +include(FeatureSummary) include(GenerateExportHeader) if(ANDROID) @@ -19,14 +21,31 @@ cmake_policy(SET CMP0074 NEW) # Override CMAKE_FIND_ROOT_PATH_MODE to allow search for SDL2 outside of sysroot set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER) -include(FeatureSummary) - option(TEST_SHARED "Test linking to shared SDL2 library" ON) add_feature_info("TEST_SHARED" TEST_SHARED "Test linking with shared library") option(TEST_STATIC "Test linking to static SDL2 library" ON) add_feature_info("TEST_STATIC" TEST_STATIC "Test linking with static library") +option(TEST_TEST "Test linking to SDL3_test library" ON) +add_feature_info("TEST_TEST" TEST_STATIC "Test linking to SDL test library") + +option(TEST_FULL "Run complete SDL test suite" OFF) +add_feature_info("TEST_FULL" TEST_FULL "Build full SDL testsuite") + +# FIXME: how to target ios/tvos with Swift? +# https://gitlab.kitware.com/cmake/cmake/-/issues/20104 +if(APPLE AND CMAKE_SYSTEM_NAME MATCHES ".*(Darwin|MacOS).*") + # multiple values for CMAKE_OSX_ARCHITECTURES not supported with Swift + list(LENGTH CMAKE_OSX_ARCHITECTURES count_osx_archs) + if(count_osx_archs LESS_EQUAL 1) + check_language(Swift) + if(CMAKE_Swift_COMPILER) + enable_language(Swift) + endif() + endif() +endif() + if(TEST_SHARED) find_package(SDL2 REQUIRED CONFIG COMPONENTS SDL2) if(EMSCRIPTEN OR (WIN32 AND NOT WINDOWS_STORE)) @@ -75,6 +94,17 @@ if(TEST_SHARED) generate_export_header(sharedlib-shared-vars EXPORT_MACRO_NAME MYLIBRARY_EXPORT) target_compile_definitions(sharedlib-shared-vars PRIVATE "EXPORT_HEADER=\"${CMAKE_CURRENT_BINARY_DIR}/sharedlib-shared-vars_export.h\"") set_target_properties(sharedlib-shared-vars PROPERTIES C_VISIBILITY_PRESET "hidden") + + if(TEST_TEST) + add_executable(sdltest-shared sdltest.c) + target_link_libraries(sdltest-shared PRIVATE SDL2::SDL2main SDL2::SDL2test SDL2::SDL2) + endif() + + if(CMAKE_Swift_COMPILER) + add_executable(swift-shared main.swift) + target_include_directories(swift-shared PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/swift") + target_link_libraries(swift-shared PRIVATE SDL2::SDL2) + endif() endif() if(TEST_STATIC) @@ -111,6 +141,26 @@ if(TEST_STATIC) target_link_libraries(cli-static-vars PRIVATE ${SDL2_STATIC_LIBRARIES}) target_include_directories(cli-static-vars PRIVATE ${SDL2_INCLUDE_DIRS}) endif() + + if(TEST_TEST) + add_executable(sdltest-static sdltest.c) + target_link_libraries(sdltest-static PRIVATE SDL2::SDL2main SDL2::SDL2test SDL2::SDL2-static) + endif() + + if(CMAKE_Swift_COMPILER) + add_executable(swift-static main.swift) + target_include_directories(swift-static PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/swift") + target_link_libraries(swift-static PRIVATE SDL2::SDL2-static) + endif() +endif() + +if(TEST_FULL) + enable_testing() + set(SDL_TESTS_TIMEOUT_MULTIPLIER "1" CACHE STRING "Test timeout multiplier") + set(SDL_TESTS_LINK_SHARED ${TEST_SHARED}) + + add_definitions(-DNO_BUILD_CONFIG) + add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/../../test" SDL_test) endif() message(STATUS "SDL2_PREFIX: ${SDL2_PREFIX}") diff --git a/vs/sdl2/cmake/test/main.swift b/vs/sdl2/cmake/test/main.swift new file mode 100644 index 00000000000..67789fdfe1b --- /dev/null +++ b/vs/sdl2/cmake/test/main.swift @@ -0,0 +1,12 @@ +/* Contributed by Piotr Usewicz (https://github.com/pusewicz) */ + +import SDL2 + +guard SDL_Init(Uint32(SDL_INIT_VIDEO)) == 0 else { + fatalError("SDL_Init error: \(String(cString: SDL_GetError()))") +} + +var sdlVersion = SDL_version() +SDL_GetVersion(&sdlVersion) + +print("SDL version: \(sdlVersion.major).\(sdlVersion.minor).\(sdlVersion.patch)") diff --git a/vs/sdl2/cmake/test/sdltest.c b/vs/sdl2/cmake/test/sdltest.c new file mode 100644 index 00000000000..5c6d6972f00 --- /dev/null +++ b/vs/sdl2/cmake/test/sdltest.c @@ -0,0 +1,9 @@ +#include "SDL.h" +#include "SDL_test.h" + + +int main(int argc, char *argv[]) { + SDLTest_CommonState state; + SDLTest_CommonDefaultArgs(&state, argc, argv); + return 0; +} diff --git a/vs/sdl2/cmake/test/swift/module.modulemap b/vs/sdl2/cmake/test/swift/module.modulemap new file mode 100644 index 00000000000..a3a627422ae --- /dev/null +++ b/vs/sdl2/cmake/test/swift/module.modulemap @@ -0,0 +1,4 @@ +module SDL2 [extern_c] { + header "shim.h" + export * +} diff --git a/vs/sdl2/cmake/test/swift/shim.h b/vs/sdl2/cmake/test/swift/shim.h new file mode 100644 index 00000000000..ed54a9bb1d1 --- /dev/null +++ b/vs/sdl2/cmake/test/swift/shim.h @@ -0,0 +1,3 @@ +/* Contributed by Piotr Usewicz (https://github.com/pusewicz) */ + +#include "SDL.h" diff --git a/vs/sdl2/configure b/vs/sdl2/configure index 4c2bb0444a7..c6c94e1c065 100755 --- a/vs/sdl2/configure +++ b/vs/sdl2/configure @@ -703,6 +703,8 @@ X_LIBS X_PRE_LIBS X_CFLAGS XMKMF +RPI_EGL_LIBS +RPI_EGL_CFLAGS RPI_LIBS RPI_CFLAGS DECOR_LIBS @@ -991,6 +993,8 @@ DECOR_CFLAGS DECOR_LIBS RPI_CFLAGS RPI_LIBS +RPI_EGL_CFLAGS +RPI_EGL_LIBS XMKMF DIRECTFB_CFLAGS DIRECTFB_LIBS @@ -1668,7 +1672,7 @@ Optional Features: --enable-ssemath Allow GCC to use SSE floating point math [default=maybe] --enable-mmx use MMX assembly routines [default=yes] - --enable-3dnow use 3DNow! assembly routines [default=yes] + --enable-3dnow use 3DNow! assembly routines [default=no] --enable-sse use SSE assembly routines [default=yes] --enable-sse2 use SSE2 assembly routines [default=maybe] --enable-sse3 use SSE3 assembly routines [default=maybe] @@ -1718,7 +1722,7 @@ Optional Features: [default=yes] --enable-libdecor-shared dynamically load libdecor [default=yes] - --enable-video-rpi use Raspberry Pi 2/3 video driver [default=yes] + --enable-video-rpi use Raspberry Pi 0-3 video driver [default=yes] --enable-video-x11 use X11 video driver [default=maybe] --enable-x11-shared dynamically load X11 support [default=maybe] --enable-video-x11-xcursor @@ -1848,6 +1852,10 @@ Some influential environment variables: DECOR_LIBS linker flags for DECOR, overriding pkg-config RPI_CFLAGS C compiler flags for RPI, overriding pkg-config RPI_LIBS linker flags for RPI, overriding pkg-config + RPI_EGL_CFLAGS + C compiler flags for RPI_EGL, overriding pkg-config + RPI_EGL_LIBS + linker flags for RPI_EGL, overriding pkg-config XMKMF Path to xmkmf, Makefile generator for X Window System DIRECTFB_CFLAGS C compiler flags for DIRECTFB, overriding pkg-config @@ -3507,8 +3515,8 @@ orig_CFLAGS="$CFLAGS" # See docs/release_checklist.md SDL_MAJOR_VERSION=2 -SDL_MINOR_VERSION=30 -SDL_MICRO_VERSION=4 +SDL_MINOR_VERSION=32 +SDL_MICRO_VERSION=10 SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION SDL_BINARY_AGE=`expr $SDL_MINOR_VERSION \* 100 + $SDL_MICRO_VERSION` @@ -5807,7 +5815,7 @@ cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' - lt_cv_deplibs_check_method=pass_all # SDL customization + lt_cv_deplibs_check_method=pass_all # SDL customization. ;; mingw* | windows* | pw32*) @@ -5819,10 +5827,10 @@ mingw* | windows* | pw32*) lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi - lt_cv_deplibs_check_method=pass_all # SDL customization + lt_cv_deplibs_check_method=pass_all # SDL customization. ;; cegcc*) @@ -6828,7 +6836,7 @@ void nm_test_func(void){} #ifdef __cplusplus } #endif -int main(){nm_test_var='a';nm_test_func();return(0);} +int main(void){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 @@ -8090,6 +8098,43 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } + # Feature test to disable chained fixups since it is not + # compatible with '-undefined dynamic_lookup' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -no_fixup_chains linker flag" >&5 +printf %s "checking for -no_fixup_chains linker flag... " >&6; } +if test ${lt_cv_support_no_fixup_chains+y} +then : + printf %s "(cached) " >&6 +else $as_nop + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-no_fixup_chains" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_cv_support_no_fixup_chains=yes +else $as_nop + lt_cv_support_no_fixup_chains=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_support_no_fixup_chains" >&5 +printf "%s\n" "$lt_cv_support_no_fixup_chains" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} @@ -8142,7 +8187,7 @@ _LT_EOF echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF -int main() { return 0;} +int main(void) { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err @@ -8170,7 +8215,12 @@ printf "%s\n" "$lt_cv_ld_force_load" >&6; } 10.[012],*|,*powerpc*-darwin[5-8]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + if test yes = "$lt_cv_support_no_fixup_chains"; then + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup $wl-no_fixup_chains' + else + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' + fi + ;; esac ;; esac @@ -9070,7 +9120,7 @@ objext=$objext lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' +lt_simple_link_test_code='int main(void){return(0);}' @@ -11550,14 +11600,14 @@ cygwin* | mingw* | windows* | pw32* | cegcc*) cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' #soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' - soname_spec='`echo $libname | sed -e 's/^lib//'`$shared_ext' # SDL customization + soname_spec='`echo $libname | sed -e 's/^lib//'`$shared_ext' # SDL customization. sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | windows* | cegcc*) # MinGW DLLs use traditional 'lib' prefix #soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' - soname_spec='`echo $libname | $SED -e 's/^lib//'`$shared_ext' # SDL customization + soname_spec='`echo $libname | $SED -e 's/^lib//'`$shared_ext' # SDL customization. ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' @@ -12621,11 +12671,11 @@ else /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); +int fnord (void) __attribute__((visibility("default"))); #endif -int fnord () { return 42; } -int main () +int fnord (void) { return 42; } +int main (void) { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; @@ -12728,11 +12778,11 @@ else /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); +int fnord (void) __attribute__((visibility("default"))); #endif -int fnord () { return 42; } -int main () +int fnord (void) { return 42; } +int main (void) { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; @@ -16934,13 +16984,13 @@ cygwin* | mingw* | windows* | pw32* | cegcc*) cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' #soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' - soname_spec='`echo $libname | sed -e 's/^lib//'`$shared_ext' # SDL customization + soname_spec='`echo $libname | sed -e 's/^lib//'`$shared_ext' # SDL customization. ;; mingw* | windows* | cegcc*) # MinGW DLLs use traditional 'lib' prefix #soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' - soname_spec='`echo $libname | $SED -e 's/^lib//'`$shared_ext' # SDL customization + soname_spec='`echo $libname | $SED -e 's/^lib//'`$shared_ext' # SDL customization. ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' @@ -19705,6 +19755,12 @@ if test "x$ac_cv_func_sigaction" = xyes then : printf "%s\n" "#define HAVE_SIGACTION 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "sigtimedwait" "ac_cv_func_sigtimedwait" +if test "x$ac_cv_func_sigtimedwait" = xyes +then : + printf "%s\n" "#define HAVE_SIGTIMEDWAIT 1" >>confdefs.h + fi ac_fn_c_check_func "$LINENO" "setjmp" "ac_cv_func_setjmp" if test "x$ac_cv_func_setjmp" = xyes @@ -20647,7 +20703,7 @@ if test ${enable_3dnow+y} then : enableval=$enable_3dnow; else $as_nop - enable_3dnow=yes + enable_3dnow=no fi if test x$enable_3dnow = xyes; then @@ -21036,7 +21092,7 @@ printf "%s\n" "#define HAVE_ALTIVEC_H 1" >>confdefs.h fi fi - # Check whether --enable-lsx was given. +# Check whether --enable-lsx was given. if test ${enable_lsx+y} then : enableval=$enable_lsx; @@ -21044,20 +21100,20 @@ else $as_nop enable_lsx=yes fi - if test x$enable_lsx = xyes; then - save_CFLAGS="$CFLAGS" - have_gcc_lsx=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GCC -mlsx option" >&5 +if test x$enable_lsx = xyes; then + save_CFLAGS="$CFLAGS" + have_gcc_lsx=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GCC -mlsx option" >&5 printf %s "checking for GCC -mlsx option... " >&6; } - lsx_CFLAGS="-mlsx" - CFLAGS="$save_CFLAGS $lsx_CFLAGS" + lsx_CFLAGS="-mlsx" + CFLAGS="$save_CFLAGS $lsx_CFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #ifndef __loongarch_sx - #error Assembler CPP flag not enabled - #endif + #ifndef __loongarch_sx + #error Assembler CPP flag not enabled + #endif int main (void) @@ -21072,19 +21128,19 @@ then : have_gcc_lsx=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gcc_lsx" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gcc_lsx" >&5 printf "%s\n" "$have_gcc_lsx" >&6; } - CFLAGS="$save_CFLAGS" + CFLAGS="$save_CFLAGS" - if test x$have_gcc_lsx = xyes; then - EXTRA_CFLAGS="$EXTRA_CFLAGS $lsx_CFLAGS" - SUMMARY_math="${SUMMARY_math} lsx" - fi + if test x$have_gcc_lsx = xyes; then + EXTRA_CFLAGS="$EXTRA_CFLAGS $lsx_CFLAGS" + SUMMARY_math="${SUMMARY_math} lsx" fi +fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lsxintrin.h" >&5 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lsxintrin.h" >&5 printf %s "checking for lsxintrin.h... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -21102,13 +21158,13 @@ else $as_nop have_lsxintrin_h_hdr=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_lsxintrin_h_hdr" >&5 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_lsxintrin_h_hdr" >&5 printf "%s\n" "$have_lsxintrin_h_hdr" >&6; } - if test x$have_lsxintrin_h_hdr = xyes; then +if test x$have_lsxintrin_h_hdr = xyes; then printf "%s\n" "#define HAVE_LSXINTRIN_H 1" >>confdefs.h - fi +fi CheckOSS() { @@ -22372,7 +22428,6 @@ printf %s "checking for NAS audio support... " >&6; } have_nas=yes NAS_CFLAGS="-I/usr/X11R6/include/" NAS_LIBS="-L/usr/X11R6/lib -laudio -lXt" - fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_nas" >&5 @@ -23620,19 +23675,19 @@ fi if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then pkg_failed=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bcm_host brcmegl" >&5 -printf %s "checking for bcm_host brcmegl... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bcm_host" >&5 +printf %s "checking for bcm_host... " >&6; } if test -n "$RPI_CFLAGS"; then pkg_cv_RPI_CFLAGS="$RPI_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bcm_host brcmegl\""; } >&5 - ($PKG_CONFIG --exists --print-errors "bcm_host brcmegl") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bcm_host\""; } >&5 + ($PKG_CONFIG --exists --print-errors "bcm_host") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_RPI_CFLAGS=`$PKG_CONFIG --cflags "bcm_host brcmegl" 2>/dev/null` + pkg_cv_RPI_CFLAGS=`$PKG_CONFIG --cflags "bcm_host" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -23644,12 +23699,12 @@ if test -n "$RPI_LIBS"; then pkg_cv_RPI_LIBS="$RPI_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bcm_host brcmegl\""; } >&5 - ($PKG_CONFIG --exists --print-errors "bcm_host brcmegl") 2>&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bcm_host\""; } >&5 + ($PKG_CONFIG --exists --print-errors "bcm_host") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_RPI_LIBS=`$PKG_CONFIG --libs "bcm_host brcmegl" 2>/dev/null` + pkg_cv_RPI_LIBS=`$PKG_CONFIG --libs "bcm_host" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -23670,9 +23725,9 @@ else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - RPI_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "bcm_host brcmegl" 2>&1` + RPI_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "bcm_host" 2>&1` else - RPI_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "bcm_host brcmegl" 2>&1` + RPI_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "bcm_host" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$RPI_PKG_ERRORS" >&5 @@ -23690,13 +23745,92 @@ printf "%s\n" "yes" >&6; } video_rpi=yes fi +pkg_failed=no +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for brcmegl" >&5 +printf %s "checking for brcmegl... " >&6; } + +if test -n "$RPI_EGL_CFLAGS"; then + pkg_cv_RPI_EGL_CFLAGS="$RPI_EGL_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"brcmegl\""; } >&5 + ($PKG_CONFIG --exists --print-errors "brcmegl") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_RPI_EGL_CFLAGS=`$PKG_CONFIG --cflags "brcmegl" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$RPI_EGL_LIBS"; then + pkg_cv_RPI_EGL_LIBS="$RPI_EGL_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"brcmegl\""; } >&5 + ($PKG_CONFIG --exists --print-errors "brcmegl") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_RPI_EGL_LIBS=`$PKG_CONFIG --libs "brcmegl" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + RPI_EGL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "brcmegl" 2>&1` + else + RPI_EGL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "brcmegl" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$RPI_EGL_PKG_ERRORS" >&5 + + video_rpi_egl=no +elif test $pkg_failed = untried; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + video_rpi_egl=no +else + RPI_EGL_CFLAGS=$pkg_cv_RPI_EGL_CFLAGS + RPI_EGL_LIBS=$pkg_cv_RPI_EGL_LIBS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + video_rpi_egl=yes +fi + if test x$video_rpi = xno; then if test x$ARCH = xnetbsd; then RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" - RPI_LIBS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + RPI_LIBS="-L/usr/pkg/lib -lbcm_host" else RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" - RPI_LIBS="-Wl,-rpath,/opt/vc/lib -L/opt/vc/lib -lbcm_host" + RPI_LIBS="-L/opt/vc/lib -lbcm_host" + fi + fi + + if test x$video_rpi_egl = xno; then + if test x$ARCH = xnetbsd; then + RPI_EGL_LIBS="-Wl,-R/usr/pkg/lib" + else + RPI_EGL_LIBS="-Wl,-rpath,/opt/vc/lib" fi fi @@ -23704,22 +23838,20 @@ fi ac_save_cflags="$CFLAGS"; ac_save_libs="$LIBS" # Add the Raspberry Pi compiler flags and libraries - CFLAGS="$CFLAGS $RPI_CFLAGS"; LIBS="$LIBS $RPI_LIBS" + CFLAGS="$CFLAGS $RPI_CFLAGS"; LIBS="$LIBS $RPI_EGL_LIBS $RPI_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Raspberry Pi 2/3" >&5 -printf %s "checking for Raspberry Pi 2/3... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Raspberry Pi 0-3" >&5 +printf %s "checking for Raspberry Pi 0-3... " >&6; } have_video_rpi=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include - #include int main (void) { - EGL_DISPMANX_WINDOW_T window; bcm_host_init(); ; @@ -23742,7 +23874,7 @@ printf "%s\n" "$have_video_rpi" >&6; } CFLAGS="$CFLAGS $RPI_CFLAGS" SDL_CFLAGS="$SDL_CFLAGS $RPI_CFLAGS" EXTRA_CFLAGS="$EXTRA_CFLAGS $RPI_CFLAGS" - EXTRA_LDFLAGS="$EXTRA_LDFLAGS $RPI_LIBS" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS $RPI_EGL_LIBS $RPI_LIBS" SOURCES="$SOURCES $srcdir/src/video/raspberry/*.c" printf "%s\n" "#define SDL_VIDEO_DRIVER_RPI 1" >>confdefs.h @@ -26326,6 +26458,9 @@ else $as_nop fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; + *-*-solaris*) + enable_video_vulkan=no + ;; *-*-darwin*) save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -x objective-c" @@ -28264,7 +28399,8 @@ fi if test x$hidapi_support = xyes; then if test x$have_libusb_h = xyes; then - printf "%s\n" "#define HAVE_LIBUSB 1" >>confdefs.h + +printf "%s\n" "#define HAVE_LIBUSB 1" >>confdefs.h EXTRA_CFLAGS="$EXTRA_CFLAGS $LIBUSB_CFLAGS" if test x$require_hidapi_libusb = xyes; then @@ -28611,12 +28747,23 @@ printf "%s\n" "#define SDL_VIDEO_DRIVER_ANDROID 1" >>confdefs.h if test x$enable_audio = xyes; then case $ARCH in sysv5|solaris|hpux) + # Newer Solaris-based systems, like OpenIndiana, don't have this interface anymore. Check for the header first. + ac_fn_c_check_header_compile "$LINENO" "sys/audioio.h" "ac_cv_header_sys_audioio_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_audioio_h" = xyes +then : + have_sys_audioio_h=yes +else $as_nop + have_sys_audioio_h=no +fi + + if test x$have_sys_audioio_h = xyes; then printf "%s\n" "#define SDL_AUDIO_DRIVER_SUNAUDIO 1" >>confdefs.h - SOURCES="$SOURCES $srcdir/src/audio/sun/*.c" - SUMMARY_audio="${SUMMARY_audio} sun" - have_audio=yes + SOURCES="$SOURCES $srcdir/src/audio/sun/*.c" + SUMMARY_audio="${SUMMARY_audio} sun" + have_audio=yes + fi ;; netbsd) # Don't use this on OpenBSD, it's busted. diff --git a/vs/sdl2/configure.ac b/vs/sdl2/configure.ac index 6fc39c351f9..97299b36117 100644 --- a/vs/sdl2/configure.ac +++ b/vs/sdl2/configure.ac @@ -12,8 +12,8 @@ orig_CFLAGS="$CFLAGS" dnl Set various version strings - taken gratefully from the GTk sources # See docs/release_checklist.md SDL_MAJOR_VERSION=2 -SDL_MINOR_VERSION=30 -SDL_MICRO_VERSION=4 +SDL_MINOR_VERSION=32 +SDL_MICRO_VERSION=10 SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION SDL_BINARY_AGE=`expr $SDL_MINOR_VERSION \* 100 + $SDL_MICRO_VERSION` @@ -359,7 +359,7 @@ dnl Checks for library functions. AC_DEFINE(HAVE_MPROTECT, 1, [ ]) ],[]), ) - AC_CHECK_FUNCS(malloc calloc realloc free getenv setenv putenv unsetenv bsearch qsort abs bcopy memset memcmp memcpy memmove wcslen wcslcpy wcslcat _wcsdup wcsdup wcsstr wcscmp wcsncmp wcscasecmp _wcsicmp wcsncasecmp _wcsnicmp strlen strlcpy strlcat _strrev _strupr _strlwr index rindex strchr strrchr strstr strtok_r itoa _ltoa _uitoa _ultoa strtod strtol strtoul _i64toa _ui64toa strtoll strtoull atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp strcasestr vsscanf vsnprintf fopen64 fseeko fseeko64 sigaction setjmp nanosleep sysconf sysctlbyname getauxval elf_aux_info poll memfd_create posix_fallocate _Exit) + AC_CHECK_FUNCS(malloc calloc realloc free getenv setenv putenv unsetenv bsearch qsort abs bcopy memset memcmp memcpy memmove wcslen wcslcpy wcslcat _wcsdup wcsdup wcsstr wcscmp wcsncmp wcscasecmp _wcsicmp wcsncasecmp _wcsnicmp strlen strlcpy strlcat _strrev _strupr _strlwr index rindex strchr strrchr strstr strtok_r itoa _ltoa _uitoa _ultoa strtod strtol strtoul _i64toa _ui64toa strtoll strtoull atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp strcasestr vsscanf vsnprintf fopen64 fseeko fseeko64 sigaction sigtimedwait setjmp nanosleep sysconf sysctlbyname getauxval elf_aux_info poll memfd_create posix_fallocate _Exit) AC_CHECK_LIB(m, pow, [LIBS="$LIBS -lm"; EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lm"]) AC_CHECK_FUNCS(acos acosf asin asinf atan atanf atan2 atan2f ceil ceilf copysign copysignf cos cosf exp expf fabs fabsf floor floorf trunc truncf fmod fmodf log logf log10 log10f lround lroundf pow powf round roundf scalbn scalbnf sin sinf sqrt sqrtf tan tanf) @@ -698,8 +698,8 @@ dnl Check for various instruction support fi AC_ARG_ENABLE(3dnow, -[AS_HELP_STRING([--enable-3dnow], [use 3DNow! assembly routines [default=yes]])], - , enable_3dnow=yes) +[AS_HELP_STRING([--enable-3dnow], [use 3DNow! assembly routines [default=no]])], + , enable_3dnow=no) if test x$enable_3dnow = xyes; then save_CFLAGS="$CFLAGS" have_gcc_3dnow=no @@ -906,37 +906,37 @@ dnl Check for various instruction support fi fi - AC_ARG_ENABLE(lsx, +AC_ARG_ENABLE(lsx, [AS_HELP_STRING([--enable-lsx], [use LSX assembly routines [default=yes]])], , enable_lsx=yes) - if test x$enable_lsx = xyes; then - save_CFLAGS="$CFLAGS" - have_gcc_lsx=no - AC_MSG_CHECKING(for GCC -mlsx option) - lsx_CFLAGS="-mlsx" - CFLAGS="$save_CFLAGS $lsx_CFLAGS" +if test x$enable_lsx = xyes; then + save_CFLAGS="$CFLAGS" + have_gcc_lsx=no + AC_MSG_CHECKING(for GCC -mlsx option) + lsx_CFLAGS="-mlsx" + CFLAGS="$save_CFLAGS $lsx_CFLAGS" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #ifndef __loongarch_sx - #error Assembler CPP flag not enabled - #endif - ]], [])], [have_gcc_lsx=yes], []) - AC_MSG_RESULT($have_gcc_lsx) - CFLAGS="$save_CFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #ifndef __loongarch_sx + #error Assembler CPP flag not enabled + #endif + ]], [])], [have_gcc_lsx=yes], []) + AC_MSG_RESULT($have_gcc_lsx) + CFLAGS="$save_CFLAGS" - if test x$have_gcc_lsx = xyes; then - EXTRA_CFLAGS="$EXTRA_CFLAGS $lsx_CFLAGS" - SUMMARY_math="${SUMMARY_math} lsx" - fi + if test x$have_gcc_lsx = xyes; then + EXTRA_CFLAGS="$EXTRA_CFLAGS $lsx_CFLAGS" + SUMMARY_math="${SUMMARY_math} lsx" fi +fi - AC_MSG_CHECKING(for lsxintrin.h) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]])], - [have_lsxintrin_h_hdr=yes],[have_lsxintrin_h_hdr=no]) - AC_MSG_RESULT($have_lsxintrin_h_hdr) - if test x$have_lsxintrin_h_hdr = xyes; then - AC_DEFINE(HAVE_LSXINTRIN_H, 1, [ ]) - fi +AC_MSG_CHECKING(for lsxintrin.h) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]])], + [have_lsxintrin_h_hdr=yes],[have_lsxintrin_h_hdr=no]) +AC_MSG_RESULT($have_lsxintrin_h_hdr) +if test x$have_lsxintrin_h_hdr = xyes; then + AC_DEFINE(HAVE_LSXINTRIN_H, 1, [ ]) +fi dnl See if the OSS audio interface is supported CheckOSS() @@ -1247,7 +1247,6 @@ CheckNAS() have_nas=yes NAS_CFLAGS="-I/usr/X11R6/include/" NAS_LIBS="-L/usr/X11R6/lib -laudio -lXt" - fi AC_MSG_RESULT($have_nas) @@ -1628,8 +1627,8 @@ dnl the *.m files have variable declarations after statements. At no point is dnl this code going to compile itself like it's 1993. Come on guys. --J.C. CheckDeclarationAfterStatement() { -dnl We don't care about C89 compilers. - true + dnl We don't care about C89 compilers. + true } dnl See if GCC's -Wall is supported. @@ -1842,18 +1841,27 @@ CheckNativeClient() CheckRPI() { AC_ARG_ENABLE(video-rpi, -[AS_HELP_STRING([--enable-video-rpi], [use Raspberry Pi 2/3 video driver [default=yes]])], +[AS_HELP_STRING([--enable-video-rpi], [use Raspberry Pi 0-3 video driver [default=yes]])], , enable_video_rpi=yes) if test x$enable_video = xyes -a x$enable_video_rpi = xyes; then - PKG_CHECK_MODULES([RPI], [bcm_host brcmegl], video_rpi=yes, video_rpi=no) + PKG_CHECK_MODULES([RPI], [bcm_host], video_rpi=yes, video_rpi=no) + PKG_CHECK_MODULES([RPI_EGL], [brcmegl], video_rpi_egl=yes, video_rpi_egl=no) if test x$video_rpi = xno; then if test x$ARCH = xnetbsd; then RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" - RPI_LIBS="-Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host" + RPI_LIBS="-L/usr/pkg/lib -lbcm_host" else RPI_CFLAGS="-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux" - RPI_LIBS="-Wl,-rpath,/opt/vc/lib -L/opt/vc/lib -lbcm_host" + RPI_LIBS="-L/opt/vc/lib -lbcm_host" + fi + fi + + if test x$video_rpi_egl = xno; then + if test x$ARCH = xnetbsd; then + RPI_EGL_LIBS="-Wl,-R/usr/pkg/lib" + else + RPI_EGL_LIBS="-Wl,-rpath,/opt/vc/lib" fi fi @@ -1861,15 +1869,13 @@ CheckRPI() ac_save_cflags="$CFLAGS"; ac_save_libs="$LIBS" # Add the Raspberry Pi compiler flags and libraries - CFLAGS="$CFLAGS $RPI_CFLAGS"; LIBS="$LIBS $RPI_LIBS" + CFLAGS="$CFLAGS $RPI_CFLAGS"; LIBS="$LIBS $RPI_EGL_LIBS $RPI_LIBS" - AC_MSG_CHECKING(for Raspberry Pi 2/3) + AC_MSG_CHECKING(for Raspberry Pi 0-3) have_video_rpi=no AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include - #include ]], [[ - EGL_DISPMANX_WINDOW_T window; bcm_host_init(); ]])], [have_video_rpi=yes],[]) AC_MSG_RESULT($have_video_rpi) @@ -1881,7 +1887,7 @@ CheckRPI() CFLAGS="$CFLAGS $RPI_CFLAGS" SDL_CFLAGS="$SDL_CFLAGS $RPI_CFLAGS" EXTRA_CFLAGS="$EXTRA_CFLAGS $RPI_CFLAGS" - EXTRA_LDFLAGS="$EXTRA_LDFLAGS $RPI_LIBS" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS $RPI_EGL_LIBS $RPI_LIBS" SOURCES="$SOURCES $srcdir/src/video/raspberry/*.c" AC_DEFINE(SDL_VIDEO_DRIVER_RPI, 1, [ ]) SUMMARY_video="${SUMMARY_video} rpi" @@ -2730,6 +2736,10 @@ CheckVulkan() #endif ]],[])], [],[enable_video_vulkan=no]) ;; + *-*-solaris*) +dnl Strictly speaking, what's missing here is libxcb. Even without Vulkan support at the OS level, it should still compile if we had that. + enable_video_vulkan=no + ;; *-*-darwin*) save_CFLAGS="$CFLAGS" dnl Work around that we don't have Objective-C support in autoconf @@ -3619,7 +3629,7 @@ CheckHIDAPI() if test x$hidapi_support = xyes; then if test x$have_libusb_h = xyes; then - AC_DEFINE(HAVE_LIBUSB) + AC_DEFINE(HAVE_LIBUSB, 1, [ ]) EXTRA_CFLAGS="$EXTRA_CFLAGS $LIBUSB_CFLAGS" if test x$require_hidapi_libusb = xyes; then EXTRA_LDFLAGS="$EXTRA_LDFLAGS $LIBUSB_LIBS" @@ -3852,10 +3862,14 @@ case "$host" in if test x$enable_audio = xyes; then case $ARCH in sysv5|solaris|hpux) - AC_DEFINE(SDL_AUDIO_DRIVER_SUNAUDIO, 1, [ ]) - SOURCES="$SOURCES $srcdir/src/audio/sun/*.c" - SUMMARY_audio="${SUMMARY_audio} sun" - have_audio=yes + # Newer Solaris-based systems, like OpenIndiana, don't have this interface anymore. Check for the header first. + AC_CHECK_HEADER(sys/audioio.h, have_sys_audioio_h=yes, have_sys_audioio_h=no) + if test x$have_sys_audioio_h = xyes; then + AC_DEFINE(SDL_AUDIO_DRIVER_SUNAUDIO, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/audio/sun/*.c" + SUMMARY_audio="${SUMMARY_audio} sun" + have_audio=yes + fi ;; netbsd) # Don't use this on OpenBSD, it's busted. AC_DEFINE(SDL_AUDIO_DRIVER_NETBSD, 1, [ ]) diff --git a/vs/sdl2/docs/README-android.md b/vs/sdl2/docs/README-android.md index b886f06db5d..6b430783910 100644 --- a/vs/sdl2/docs/README-android.md +++ b/vs/sdl2/docs/README-android.md @@ -1,483 +1,483 @@ -Android -================================================================================ - -Matt Styles wrote a tutorial on building SDL for Android with Visual Studio: -http://trederia.blogspot.de/2017/03/building-sdl2-for-android-with-visual.html - -The rest of this README covers the Android gradle style build process. - -If you are using the older ant build process, it is no longer officially -supported, but you can use the "android-project-ant" directory as a template. - - -Requirements -================================================================================ - -Android SDK (version 34 or later) -https://developer.android.com/sdk/index.html - -Android NDK r15c or later -https://developer.android.com/tools/sdk/ndk/index.html - -Minimum API level supported by SDL: 19 (Android 4.4) - - -How the port works -================================================================================ - -- Android applications are Java-based, optionally with parts written in C -- As SDL apps are C-based, we use a small Java shim that uses JNI to talk to - the SDL library -- This means that your application C code must be placed inside an Android - Java project, along with some C support code that communicates with Java -- This eventually produces a standard Android .apk package - -The Android Java code implements an "Activity" and can be found in: -android-project/app/src/main/java/org/libsdl/app/SDLActivity.java - -The Java code loads your game code, the SDL shared library, and -dispatches to native functions implemented in the SDL library: -src/core/android/SDL_android.c - - -Building an app -================================================================================ - -For simple projects you can use the script located at build-scripts/androidbuild.sh - -There's two ways of using it: - - androidbuild.sh com.yourcompany.yourapp < sources.list - androidbuild.sh com.yourcompany.yourapp source1.c source2.c ...sourceN.c - -sources.list should be a text file with a source file name in each line -Filenames should be specified relative to the current directory, for example if -you are in the build-scripts directory and want to create the testgles.c test, you'll -run: - - ./androidbuild.sh org.libsdl.testgles ../test/testgles.c - -One limitation of this script is that all sources provided will be aggregated into -a single directory, thus all your source files should have a unique name. - -Once the project is complete the script will tell you where the debug APK is located. -If you want to create a signed release APK, you can use the project created by this -utility to generate it. - -Finally, a word of caution: re running androidbuild.sh wipes any changes you may have -done in the build directory for the app! - - - -For more complex projects, follow these instructions: - -1. Get the source code for SDL and copy the 'android-project' directory located at SDL/android-project to a suitable location. Also make sure to rename it to your project name (In these examples: YOURPROJECT). - - (The 'android-project' directory can basically be seen as a sort of starting point for the android-port of your project. It contains the glue code between the Android Java 'frontend' and the SDL code 'backend'. It also contains some standard behaviour, like how events should be handled, which you will be able to change.) - -2. Move or [symlink](https://en.wikipedia.org/wiki/Symbolic_link) the SDL directory into the "YOURPROJECT/app/jni" directory - -(This is needed as the source of SDL has to be compiled by the Android compiler) - -3. Edit "YOURPROJECT/app/jni/src/Android.mk" to include your source files. - -(They should be separated by spaces after the "LOCAL_SRC_FILES := " declaration) - -4a. If you want to use Android Studio, simply open your 'YOURPROJECT' directory and start building. - -4b. If you want to build manually, run './gradlew installDebug' in the project directory. This compiles the .java, creates an .apk with the native code embedded, and installs it on any connected Android device - - -If you already have a project that uses CMake, the instructions change somewhat: - -1. Do points 1 and 2 from the instruction above. -2. Edit "YOURPROJECT/app/build.gradle" to comment out or remove sections containing ndk-build - and uncomment the cmake sections. Add arguments to the CMake invocation as needed. -3. Edit "YOURPROJECT/app/jni/CMakeLists.txt" to include your project (it defaults to - adding the "src" subdirectory). Note that you'll have SDL2, SDL2main and SDL2-static - as targets in your project, so you should have "target_link_libraries(yourgame SDL2 SDL2main)" - in your CMakeLists.txt file. Also be aware that you should use add_library() instead of - add_executable() for the target containing your "main" function. - -If you wish to use Android Studio, you can skip the last step. - -4. Run './gradlew installDebug' or './gradlew installRelease' in the project directory. It will build and install your .apk on any - connected Android device - -Here's an explanation of the files in the Android project, so you can customize them: - - android-project/app - build.gradle - build info including the application version and SDK - src/main/AndroidManifest.xml - package manifest. Among others, it contains the class name of the main Activity and the package name of the application. - jni/ - directory holding native code - jni/Application.mk - Application JNI settings, including target platform and STL library - jni/Android.mk - Android makefile that can call recursively the Android.mk files in all subdirectories - jni/CMakeLists.txt - Top-level CMake project that adds SDL as a subproject - jni/SDL/ - (symlink to) directory holding the SDL library files - jni/SDL/Android.mk - Android makefile for creating the SDL shared library - jni/src/ - directory holding your C/C++ source - jni/src/Android.mk - Android makefile that you should customize to include your source code and any library references - jni/src/CMakeLists.txt - CMake file that you may customize to include your source code and any library references - src/main/assets/ - directory holding asset files for your application - src/main/res/ - directory holding resources for your application - src/main/res/mipmap-* - directories holding icons for different phone hardware - src/main/res/values/strings.xml - strings used in your application, including the application name - src/main/java/org/libsdl/app/SDLActivity.java - the Java class handling the initialization and binding to SDL. Be very careful changing this, as the SDL library relies on this implementation. You should instead subclass this for your application. - - -Customizing your application name -================================================================================ - -To customize your application name, edit AndroidManifest.xml and replace -"org.libsdl.app" with an identifier for your product package. - -Then create a Java class extending SDLActivity and place it in a directory -under src matching your package, e.g. - - src/com/gamemaker/game/MyGame.java - -Here's an example of a minimal class file: - - --- MyGame.java -------------------------- - package com.gamemaker.game; - - import org.libsdl.app.SDLActivity; - - /** - * A sample wrapper class that just calls SDLActivity - */ - - public class MyGame extends SDLActivity { } - - ------------------------------------------ - -Then replace "SDLActivity" in AndroidManifest.xml with the name of your -class, .e.g. "MyGame" - - -Customizing your application icon -================================================================================ - -Conceptually changing your icon is just replacing the "ic_launcher.png" files in -the drawable directories under the res directory. There are several directories -for different screen sizes. - - -Loading assets -================================================================================ - -Any files you put in the "app/src/main/assets" directory of your project -directory will get bundled into the application package and you can load -them using the standard functions in SDL_rwops.h. - -There are also a few Android specific functions that allow you to get other -useful paths for saving and loading data: -* SDL_AndroidGetInternalStoragePath() -* SDL_AndroidGetExternalStorageState() -* SDL_AndroidGetExternalStoragePath() - -See SDL_system.h for more details on these functions. - -The asset packaging system will, by default, compress certain file extensions. -SDL includes two asset file access mechanisms, the preferred one is the so -called "File Descriptor" method, which is faster and doesn't involve the Dalvik -GC, but given this method does not work on compressed assets, there is also the -"Input Stream" method, which is automatically used as a fall back by SDL. You -may want to keep this fact in mind when building your APK, specially when large -files are involved. -For more information on which extensions get compressed by default and how to -disable this behaviour, see for example: - -http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/ - - -Pause / Resume behaviour -================================================================================ - -If SDL_HINT_ANDROID_BLOCK_ON_PAUSE hint is set (the default), -the event loop will block itself when the app is paused (ie, when the user -returns to the main Android dashboard). Blocking is better in terms of battery -use, and it allows your app to spring back to life instantaneously after resume -(versus polling for a resume message). - -Upon resume, SDL will attempt to restore the GL context automatically. -In modern devices (Android 3.0 and up) this will most likely succeed and your -app can continue to operate as it was. - -However, there's a chance (on older hardware, or on systems under heavy load), -where the GL context can not be restored. In that case you have to listen for -a specific message (SDL_RENDER_DEVICE_RESET) and restore your textures -manually or quit the app. - -You should not use the SDL renderer API while the app going in background: -- SDL_APP_WILLENTERBACKGROUND: - after you read this message, GL context gets backed-up and you should not - use the SDL renderer API. - - When this event is received, you have to set the render target to NULL, if you're using it. - (eg call SDL_SetRenderTarget(renderer, NULL)) - -- SDL_APP_DIDENTERFOREGROUND: - GL context is restored, and the SDL renderer API is available (unless you - receive SDL_RENDER_DEVICE_RESET). - -Mouse / Touch events -================================================================================ - -In some case, SDL generates synthetic mouse (resp. touch) events for touch -(resp. mouse) devices. -To enable/disable this behavior, see SDL_hints.h: -- SDL_HINT_TOUCH_MOUSE_EVENTS -- SDL_HINT_MOUSE_TOUCH_EVENTS - -Misc -================================================================================ - -For some device, it appears to works better setting explicitly GL attributes -before creating a window: - SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); - SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6); - SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); - -Threads and the Java VM -================================================================================ - -For a quick tour on how Linux native threads interoperate with the Java VM, take -a look here: https://developer.android.com/guide/practices/jni.html - -If you want to use threads in your SDL app, it's strongly recommended that you -do so by creating them using SDL functions. This way, the required attach/detach -handling is managed by SDL automagically. If you have threads created by other -means and they make calls to SDL functions, make sure that you call -Android_JNI_SetupThread() before doing anything else otherwise SDL will attach -your thread automatically anyway (when you make an SDL call), but it'll never -detach it. - - -If you ever want to use JNI in a native thread (created by "SDL_CreateThread()"), -it won't be able to find your java class and method because of the java class loader -which is different for native threads, than for java threads (eg your "main()"). - -the work-around is to find class/method, in you "main()" thread, and to use them -in your native thread. - -see: -https://developer.android.com/training/articles/perf-jni#faq:-why-didnt-findclass-find-my-class - -Using STL -================================================================================ - -You can use STL in your project by creating an Application.mk file in the jni -folder and adding the following line: - - APP_STL := c++_shared - -For more information go here: - https://developer.android.com/ndk/guides/cpp-support - - -Using the emulator -================================================================================ - -There are some good tips and tricks for getting the most out of the -emulator here: https://developer.android.com/tools/devices/emulator.html - -Especially useful is the info on setting up OpenGL ES 2.0 emulation. - -Notice that this software emulator is incredibly slow and needs a lot of disk space. -Using a real device works better. - - -Troubleshooting -================================================================================ - -You can see if adb can see any devices with the following command: - - adb devices - -You can see the output of log messages on the default device with: - - adb logcat - -You can push files to the device with: - - adb push local_file remote_path_and_file - -You can push files to the SD Card at /sdcard, for example: - - adb push moose.dat /sdcard/moose.dat - -You can see the files on the SD card with a shell command: - - adb shell ls /sdcard/ - -You can start a command shell on the default device with: - - adb shell - -You can remove the library files of your project (and not the SDL lib files) with: - - ndk-build clean - -You can do a build with the following command: - - ndk-build - -You can see the complete command line that ndk-build is using by passing V=1 on the command line: - - ndk-build V=1 - -If your application crashes in native code, you can use ndk-stack to get a symbolic stack trace: - https://developer.android.com/ndk/guides/ndk-stack - -If you want to go through the process manually, you can use addr2line to convert the -addresses in the stack trace to lines in your code. - -For example, if your crash looks like this: - - I/DEBUG ( 31): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 400085d0 - I/DEBUG ( 31): r0 00000000 r1 00001000 r2 00000003 r3 400085d4 - I/DEBUG ( 31): r4 400085d0 r5 40008000 r6 afd41504 r7 436c6a7c - I/DEBUG ( 31): r8 436c6b30 r9 435c6fb0 10 435c6f9c fp 4168d82c - I/DEBUG ( 31): ip 8346aff0 sp 436c6a60 lr afd1c8ff pc afd1c902 cpsr 60000030 - I/DEBUG ( 31): #00 pc 0001c902 /system/lib/libc.so - I/DEBUG ( 31): #01 pc 0001ccf6 /system/lib/libc.so - I/DEBUG ( 31): #02 pc 000014bc /data/data/org.libsdl.app/lib/libmain.so - I/DEBUG ( 31): #03 pc 00001506 /data/data/org.libsdl.app/lib/libmain.so - -You can see that there's a crash in the C library being called from the main code. -I run addr2line with the debug version of my code: - - arm-eabi-addr2line -C -f -e obj/local/armeabi/libmain.so - -and then paste in the number after "pc" in the call stack, from the line that I care about: -000014bc - -I get output from addr2line showing that it's in the quit function, in testspriteminimal.c, on line 23. - -You can add logging to your code to help show what's happening: - - #include - - __android_log_print(ANDROID_LOG_INFO, "foo", "Something happened! x = %d", x); - -If you need to build without optimization turned on, you can create a file called -"Application.mk" in the jni directory, with the following line in it: - - APP_OPTIM := debug - - -Memory debugging -================================================================================ - -The best (and slowest) way to debug memory issues on Android is valgrind. -Valgrind has support for Android out of the box, just grab code using: - - svn co svn://svn.valgrind.org/valgrind/trunk valgrind - -... and follow the instructions in the file README.android to build it. - -One thing I needed to do on Mac OS X was change the path to the toolchain, -and add ranlib to the environment variables: -export RANLIB=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-ranlib - -Once valgrind is built, you can create a wrapper script to launch your -application with it, changing org.libsdl.app to your package identifier: - - --- start_valgrind_app ------------------- - #!/system/bin/sh - export TMPDIR=/data/data/org.libsdl.app - exec /data/local/Inst/bin/valgrind --log-file=/sdcard/valgrind.log --error-limit=no $* - ------------------------------------------ - -Then push it to the device: - - adb push start_valgrind_app /data/local - -and make it executable: - - adb shell chmod 755 /data/local/start_valgrind_app - -and tell Android to use the script to launch your application: - - adb shell setprop wrap.org.libsdl.app "logwrapper /data/local/start_valgrind_app" - -If the setprop command says "could not set property", it's likely that -your package name is too long and you should make it shorter by changing -AndroidManifest.xml and the path to your class file in android-project/src - -You can then launch your application normally and waaaaaaaiiittt for it. -You can monitor the startup process with the logcat command above, and -when it's done (or even while it's running) you can grab the valgrind -output file: - - adb pull /sdcard/valgrind.log - -When you're done instrumenting with valgrind, you can disable the wrapper: - - adb shell setprop wrap.org.libsdl.app "" - - -Graphics debugging -================================================================================ - -If you are developing on a compatible Tegra-based tablet, NVidia provides -Tegra Graphics Debugger at their website. Because SDL2 dynamically loads EGL -and GLES libraries, you must follow their instructions for installing the -interposer library on a rooted device. The non-rooted instructions are not -compatible with applications that use SDL2 for video. - -The Tegra Graphics Debugger is available from NVidia here: -https://developer.nvidia.com/tegra-graphics-debugger - - -Why is API level 19 the minimum required? -================================================================================ - -The latest NDK toolchain doesn't support targeting earlier than API level 19. -As of this writing, according to https://www.composables.com/tools/distribution-chart -about 99.7% of the Android devices accessing Google Play support API level 19 or -higher (August 2023). - - -A note regarding the use of the "dirty rectangles" rendering technique -================================================================================ - -If your app uses a variation of the "dirty rectangles" rendering technique, -where you only update a portion of the screen on each frame, you may notice a -variety of visual glitches on Android, that are not present on other platforms. -This is caused by SDL's use of EGL as the support system to handle OpenGL ES/ES2 -contexts, in particular the use of the eglSwapBuffers function. As stated in the -documentation for the function "The contents of ancillary buffers are always -undefined after calling eglSwapBuffers". -Setting the EGL_SWAP_BEHAVIOR attribute of the surface to EGL_BUFFER_PRESERVED -is not possible for SDL as it requires EGL 1.4, available only on the API level -17+, so the only workaround available on this platform is to redraw the entire -screen each frame. - -Reference: http://www.khronos.org/registry/egl/specs/EGLTechNote0001.html - - -Ending your application -================================================================================ - -Two legitimate ways: - -- return from your main() function. Java side will automatically terminate the -Activity by calling Activity.finish(). - -- Android OS can decide to terminate your application by calling onDestroy() -(see Activity life cycle). Your application will receive a SDL_QUIT event you -can handle to save things and quit. - -Don't call exit() as it stops the activity badly. - -NB: "Back button" can be handled as a SDL_KEYDOWN/UP events, with Keycode -SDLK_AC_BACK, for any purpose. - -Known issues -================================================================================ - -- The number of buttons reported for each joystick is hardcoded to be 36, which -is the current maximum number of buttons Android can report. - +Android +================================================================================ + +Matt Styles wrote a tutorial on building SDL for Android with Visual Studio: +http://trederia.blogspot.de/2017/03/building-sdl2-for-android-with-visual.html + +The rest of this README covers the Android gradle style build process. + +If you are using the older ant build process, it is no longer officially +supported, but you can use the "android-project-ant" directory as a template. + + +Requirements +================================================================================ + +Android SDK (version 34 or later) +https://developer.android.com/sdk/index.html + +Android NDK r15c or later +https://developer.android.com/tools/sdk/ndk/index.html + +Minimum API level supported by SDL: 19 (Android 4.4) + + +How the port works +================================================================================ + +- Android applications are Java-based, optionally with parts written in C +- As SDL apps are C-based, we use a small Java shim that uses JNI to talk to + the SDL library +- This means that your application C code must be placed inside an Android + Java project, along with some C support code that communicates with Java +- This eventually produces a standard Android .apk package + +The Android Java code implements an "Activity" and can be found in: +android-project/app/src/main/java/org/libsdl/app/SDLActivity.java + +The Java code loads your game code, the SDL shared library, and +dispatches to native functions implemented in the SDL library: +src/core/android/SDL_android.c + + +Building an app +================================================================================ + +For simple projects you can use the script located at build-scripts/androidbuild.sh + +There's two ways of using it: + + androidbuild.sh com.yourcompany.yourapp < sources.list + androidbuild.sh com.yourcompany.yourapp source1.c source2.c ...sourceN.c + +sources.list should be a text file with a source file name in each line +Filenames should be specified relative to the current directory, for example if +you are in the build-scripts directory and want to create the testgles.c test, you'll +run: + + ./androidbuild.sh org.libsdl.testgles ../test/testgles.c + +One limitation of this script is that all sources provided will be aggregated into +a single directory, thus all your source files should have a unique name. + +Once the project is complete the script will tell you where the debug APK is located. +If you want to create a signed release APK, you can use the project created by this +utility to generate it. + +Finally, a word of caution: re running androidbuild.sh wipes any changes you may have +done in the build directory for the app! + + + +For more complex projects, follow these instructions: + +1. Get the source code for SDL and copy the 'android-project' directory located at SDL/android-project to a suitable location. Also make sure to rename it to your project name (In these examples: YOURPROJECT). + + (The 'android-project' directory can basically be seen as a sort of starting point for the android-port of your project. It contains the glue code between the Android Java 'frontend' and the SDL code 'backend'. It also contains some standard behaviour, like how events should be handled, which you will be able to change.) + +2. Move or [symlink](https://en.wikipedia.org/wiki/Symbolic_link) the SDL directory into the "YOURPROJECT/app/jni" directory + +(This is needed as the source of SDL has to be compiled by the Android compiler) + +3. Edit "YOURPROJECT/app/jni/src/Android.mk" to include your source files. + +(They should be separated by spaces after the "LOCAL_SRC_FILES := " declaration) + +4a. If you want to use Android Studio, simply open your 'YOURPROJECT' directory and start building. + +4b. If you want to build manually, run './gradlew installDebug' in the project directory. This compiles the .java, creates an .apk with the native code embedded, and installs it on any connected Android device + + +If you already have a project that uses CMake, the instructions change somewhat: + +1. Do points 1 and 2 from the instruction above. +2. Edit "YOURPROJECT/app/build.gradle" to comment out or remove sections containing ndk-build + and uncomment the cmake sections. Add arguments to the CMake invocation as needed. +3. Edit "YOURPROJECT/app/jni/CMakeLists.txt" to include your project (it defaults to + adding the "src" subdirectory). Note that you'll have SDL2, SDL2main and SDL2-static + as targets in your project, so you should have "target_link_libraries(yourgame SDL2 SDL2main)" + in your CMakeLists.txt file. Also be aware that you should use add_library() instead of + add_executable() for the target containing your "main" function. + +If you wish to use Android Studio, you can skip the last step. + +4. Run './gradlew installDebug' or './gradlew installRelease' in the project directory. It will build and install your .apk on any + connected Android device + +Here's an explanation of the files in the Android project, so you can customize them: + + android-project/app + build.gradle - build info including the application version and SDK + src/main/AndroidManifest.xml - package manifest. Among others, it contains the class name of the main Activity and the package name of the application. + jni/ - directory holding native code + jni/Application.mk - Application JNI settings, including target platform and STL library + jni/Android.mk - Android makefile that can call recursively the Android.mk files in all subdirectories + jni/CMakeLists.txt - Top-level CMake project that adds SDL as a subproject + jni/SDL/ - (symlink to) directory holding the SDL library files + jni/SDL/Android.mk - Android makefile for creating the SDL shared library + jni/src/ - directory holding your C/C++ source + jni/src/Android.mk - Android makefile that you should customize to include your source code and any library references + jni/src/CMakeLists.txt - CMake file that you may customize to include your source code and any library references + src/main/assets/ - directory holding asset files for your application + src/main/res/ - directory holding resources for your application + src/main/res/mipmap-* - directories holding icons for different phone hardware + src/main/res/values/strings.xml - strings used in your application, including the application name + src/main/java/org/libsdl/app/SDLActivity.java - the Java class handling the initialization and binding to SDL. Be very careful changing this, as the SDL library relies on this implementation. You should instead subclass this for your application. + + +Customizing your application name +================================================================================ + +To customize your application name, edit AndroidManifest.xml and replace +"org.libsdl.app" with an identifier for your product package. + +Then create a Java class extending SDLActivity and place it in a directory +under src matching your package, e.g. + + src/com/gamemaker/game/MyGame.java + +Here's an example of a minimal class file: + + --- MyGame.java -------------------------- + package com.gamemaker.game; + + import org.libsdl.app.SDLActivity; + + /** + * A sample wrapper class that just calls SDLActivity + */ + + public class MyGame extends SDLActivity { } + + ------------------------------------------ + +Then replace "SDLActivity" in AndroidManifest.xml with the name of your +class, .e.g. "MyGame" + + +Customizing your application icon +================================================================================ + +Conceptually changing your icon is just replacing the "ic_launcher.png" files in +the drawable directories under the res directory. There are several directories +for different screen sizes. + + +Loading assets +================================================================================ + +Any files you put in the "app/src/main/assets" directory of your project +directory will get bundled into the application package and you can load +them using the standard functions in SDL_rwops.h. + +There are also a few Android specific functions that allow you to get other +useful paths for saving and loading data: +* SDL_AndroidGetInternalStoragePath() +* SDL_AndroidGetExternalStorageState() +* SDL_AndroidGetExternalStoragePath() + +See SDL_system.h for more details on these functions. + +The asset packaging system will, by default, compress certain file extensions. +SDL includes two asset file access mechanisms, the preferred one is the so +called "File Descriptor" method, which is faster and doesn't involve the Dalvik +GC, but given this method does not work on compressed assets, there is also the +"Input Stream" method, which is automatically used as a fall back by SDL. You +may want to keep this fact in mind when building your APK, specially when large +files are involved. +For more information on which extensions get compressed by default and how to +disable this behaviour, see for example: + +http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/ + + +Pause / Resume behaviour +================================================================================ + +If SDL_HINT_ANDROID_BLOCK_ON_PAUSE hint is set (the default), +the event loop will block itself when the app is paused (ie, when the user +returns to the main Android dashboard). Blocking is better in terms of battery +use, and it allows your app to spring back to life instantaneously after resume +(versus polling for a resume message). + +Upon resume, SDL will attempt to restore the GL context automatically. +In modern devices (Android 3.0 and up) this will most likely succeed and your +app can continue to operate as it was. + +However, there's a chance (on older hardware, or on systems under heavy load), +where the GL context can not be restored. In that case you have to listen for +a specific message (SDL_RENDER_DEVICE_RESET) and restore your textures +manually or quit the app. + +You should not use the SDL renderer API while the app going in background: +- SDL_APP_WILLENTERBACKGROUND: + after you read this message, GL context gets backed-up and you should not + use the SDL renderer API. + + When this event is received, you have to set the render target to NULL, if you're using it. + (eg call SDL_SetRenderTarget(renderer, NULL)) + +- SDL_APP_DIDENTERFOREGROUND: + GL context is restored, and the SDL renderer API is available (unless you + receive SDL_RENDER_DEVICE_RESET). + +Mouse / Touch events +================================================================================ + +In some case, SDL generates synthetic mouse (resp. touch) events for touch +(resp. mouse) devices. +To enable/disable this behavior, see SDL_hints.h: +- SDL_HINT_TOUCH_MOUSE_EVENTS +- SDL_HINT_MOUSE_TOUCH_EVENTS + +Misc +================================================================================ + +For some device, it appears to works better setting explicitly GL attributes +before creating a window: + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); + +Threads and the Java VM +================================================================================ + +For a quick tour on how Linux native threads interoperate with the Java VM, take +a look here: https://developer.android.com/guide/practices/jni.html + +If you want to use threads in your SDL app, it's strongly recommended that you +do so by creating them using SDL functions. This way, the required attach/detach +handling is managed by SDL automagically. If you have threads created by other +means and they make calls to SDL functions, make sure that you call +Android_JNI_SetupThread() before doing anything else otherwise SDL will attach +your thread automatically anyway (when you make an SDL call), but it'll never +detach it. + + +If you ever want to use JNI in a native thread (created by "SDL_CreateThread()"), +it won't be able to find your java class and method because of the java class loader +which is different for native threads, than for java threads (eg your "main()"). + +the work-around is to find class/method, in you "main()" thread, and to use them +in your native thread. + +see: +https://developer.android.com/training/articles/perf-jni#faq:-why-didnt-findclass-find-my-class + +Using STL +================================================================================ + +You can use STL in your project by creating an Application.mk file in the jni +folder and adding the following line: + + APP_STL := c++_shared + +For more information go here: + https://developer.android.com/ndk/guides/cpp-support + + +Using the emulator +================================================================================ + +There are some good tips and tricks for getting the most out of the +emulator here: https://developer.android.com/tools/devices/emulator.html + +Especially useful is the info on setting up OpenGL ES 2.0 emulation. + +Notice that this software emulator is incredibly slow and needs a lot of disk space. +Using a real device works better. + + +Troubleshooting +================================================================================ + +You can see if adb can see any devices with the following command: + + adb devices + +You can see the output of log messages on the default device with: + + adb logcat + +You can push files to the device with: + + adb push local_file remote_path_and_file + +You can push files to the SD Card at /sdcard, for example: + + adb push moose.dat /sdcard/moose.dat + +You can see the files on the SD card with a shell command: + + adb shell ls /sdcard/ + +You can start a command shell on the default device with: + + adb shell + +You can remove the library files of your project (and not the SDL lib files) with: + + ndk-build clean + +You can do a build with the following command: + + ndk-build + +You can see the complete command line that ndk-build is using by passing V=1 on the command line: + + ndk-build V=1 + +If your application crashes in native code, you can use ndk-stack to get a symbolic stack trace: + https://developer.android.com/ndk/guides/ndk-stack + +If you want to go through the process manually, you can use addr2line to convert the +addresses in the stack trace to lines in your code. + +For example, if your crash looks like this: + + I/DEBUG ( 31): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 400085d0 + I/DEBUG ( 31): r0 00000000 r1 00001000 r2 00000003 r3 400085d4 + I/DEBUG ( 31): r4 400085d0 r5 40008000 r6 afd41504 r7 436c6a7c + I/DEBUG ( 31): r8 436c6b30 r9 435c6fb0 10 435c6f9c fp 4168d82c + I/DEBUG ( 31): ip 8346aff0 sp 436c6a60 lr afd1c8ff pc afd1c902 cpsr 60000030 + I/DEBUG ( 31): #00 pc 0001c902 /system/lib/libc.so + I/DEBUG ( 31): #01 pc 0001ccf6 /system/lib/libc.so + I/DEBUG ( 31): #02 pc 000014bc /data/data/org.libsdl.app/lib/libmain.so + I/DEBUG ( 31): #03 pc 00001506 /data/data/org.libsdl.app/lib/libmain.so + +You can see that there's a crash in the C library being called from the main code. +I run addr2line with the debug version of my code: + + arm-eabi-addr2line -C -f -e obj/local/armeabi/libmain.so + +and then paste in the number after "pc" in the call stack, from the line that I care about: +000014bc + +I get output from addr2line showing that it's in the quit function, in testspriteminimal.c, on line 23. + +You can add logging to your code to help show what's happening: + + #include + + __android_log_print(ANDROID_LOG_INFO, "foo", "Something happened! x = %d", x); + +If you need to build without optimization turned on, you can create a file called +"Application.mk" in the jni directory, with the following line in it: + + APP_OPTIM := debug + + +Memory debugging +================================================================================ + +The best (and slowest) way to debug memory issues on Android is valgrind. +Valgrind has support for Android out of the box, just grab code using: + + svn co svn://svn.valgrind.org/valgrind/trunk valgrind + +... and follow the instructions in the file README.android to build it. + +One thing I needed to do on Mac OS X was change the path to the toolchain, +and add ranlib to the environment variables: +export RANLIB=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-ranlib + +Once valgrind is built, you can create a wrapper script to launch your +application with it, changing org.libsdl.app to your package identifier: + + --- start_valgrind_app ------------------- + #!/system/bin/sh + export TMPDIR=/data/data/org.libsdl.app + exec /data/local/Inst/bin/valgrind --log-file=/sdcard/valgrind.log --error-limit=no $* + ------------------------------------------ + +Then push it to the device: + + adb push start_valgrind_app /data/local + +and make it executable: + + adb shell chmod 755 /data/local/start_valgrind_app + +and tell Android to use the script to launch your application: + + adb shell setprop wrap.org.libsdl.app "logwrapper /data/local/start_valgrind_app" + +If the setprop command says "could not set property", it's likely that +your package name is too long and you should make it shorter by changing +AndroidManifest.xml and the path to your class file in android-project/src + +You can then launch your application normally and waaaaaaaiiittt for it. +You can monitor the startup process with the logcat command above, and +when it's done (or even while it's running) you can grab the valgrind +output file: + + adb pull /sdcard/valgrind.log + +When you're done instrumenting with valgrind, you can disable the wrapper: + + adb shell setprop wrap.org.libsdl.app "" + + +Graphics debugging +================================================================================ + +If you are developing on a compatible Tegra-based tablet, NVidia provides +Tegra Graphics Debugger at their website. Because SDL2 dynamically loads EGL +and GLES libraries, you must follow their instructions for installing the +interposer library on a rooted device. The non-rooted instructions are not +compatible with applications that use SDL2 for video. + +The Tegra Graphics Debugger is available from NVidia here: +https://developer.nvidia.com/tegra-graphics-debugger + + +Why is API level 19 the minimum required? +================================================================================ + +The latest NDK toolchain doesn't support targeting earlier than API level 19. +As of this writing, according to https://www.composables.com/tools/distribution-chart +about 99.7% of the Android devices accessing Google Play support API level 19 or +higher (August 2023). + + +A note regarding the use of the "dirty rectangles" rendering technique +================================================================================ + +If your app uses a variation of the "dirty rectangles" rendering technique, +where you only update a portion of the screen on each frame, you may notice a +variety of visual glitches on Android, that are not present on other platforms. +This is caused by SDL's use of EGL as the support system to handle OpenGL ES/ES2 +contexts, in particular the use of the eglSwapBuffers function. As stated in the +documentation for the function "The contents of ancillary buffers are always +undefined after calling eglSwapBuffers". +Setting the EGL_SWAP_BEHAVIOR attribute of the surface to EGL_BUFFER_PRESERVED +is not possible for SDL as it requires EGL 1.4, available only on the API level +17+, so the only workaround available on this platform is to redraw the entire +screen each frame. + +Reference: http://www.khronos.org/registry/egl/specs/EGLTechNote0001.html + + +Ending your application +================================================================================ + +Two legitimate ways: + +- return from your main() function. Java side will automatically terminate the +Activity by calling Activity.finish(). + +- Android OS can decide to terminate your application by calling onDestroy() +(see Activity life cycle). Your application will receive a SDL_QUIT event you +can handle to save things and quit. + +Don't call exit() as it stops the activity badly. + +NB: "Back button" can be handled as a SDL_KEYDOWN/UP events, with Keycode +SDLK_AC_BACK, for any purpose. + +Known issues +================================================================================ + +- The number of buttons reported for each joystick is hardcoded to be 36, which +is the current maximum number of buttons Android can report. + diff --git a/vs/sdl2/docs/README-cmake.md b/vs/sdl2/docs/README-cmake.md index cfd40664c5c..205ddbdea54 100644 --- a/vs/sdl2/docs/README-cmake.md +++ b/vs/sdl2/docs/README-cmake.md @@ -1,163 +1,163 @@ -# CMake - -(www.cmake.org) - -SDL's build system was traditionally based on autotools. Over time, this -approach has suffered from several issues across the different supported -platforms. -To solve these problems, a new build system based on CMake was introduced. -It is developed in parallel to the legacy autotools build system, so users -can experiment with it without complication. - -The CMake build system is supported on the following platforms: - -* FreeBSD -* Linux -* Microsoft Visual C -* MinGW and Msys -* macOS, iOS, and tvOS, with support for XCode -* Android -* Emscripten -* RiscOS -* Playstation Vita - -## Building SDL - -Assuming the source for SDL is located at `~/sdl` -```sh -cd ~ -mkdir build -cd build -cmake ~/sdl -cmake --build . -``` - -This will build the static and dynamic versions of SDL in the `~/build` directory. -Installation can be done using: - -```sh -cmake --install . # '--install' requires CMake 3.15, or newer -``` - -## Including SDL in your project - -SDL can be included in your project in 2 major ways: -- using a system SDL library, provided by your (*nix) distribution or a package manager -- using a vendored SDL library: this is SDL copied or symlinked in a subfolder. - -The following CMake script supports both, depending on the value of `MYGAME_VENDORED`. - -```cmake -cmake_minimum_required(VERSION 3.5) -project(mygame) - -# Create an option to switch between a system sdl library and a vendored sdl library -option(MYGAME_VENDORED "Use vendored libraries" OFF) - -if(MYGAME_VENDORED) - add_subdirectory(vendored/sdl EXCLUDE_FROM_ALL) -else() - # 1. Look for a SDL2 package, 2. look for the SDL2 component and 3. fail if none can be found - find_package(SDL2 REQUIRED CONFIG REQUIRED COMPONENTS SDL2) - - # 1. Look for a SDL2 package, 2. Look for the SDL2maincomponent and 3. DO NOT fail when SDL2main is not available - find_package(SDL2 REQUIRED CONFIG COMPONENTS SDL2main) -endif() - -# Create your game executable target as usual -add_executable(mygame WIN32 mygame.c) - -# SDL2::SDL2main may or may not be available. It is e.g. required by Windows GUI applications -if(TARGET SDL2::SDL2main) - # It has an implicit dependency on SDL2 functions, so it MUST be added before SDL2::SDL2 (or SDL2::SDL2-static) - target_link_libraries(mygame PRIVATE SDL2::SDL2main) -endif() - -# Link to the actual SDL2 library. SDL2::SDL2 is the shared SDL library, SDL2::SDL2-static is the static SDL libarary. -target_link_libraries(mygame PRIVATE SDL2::SDL2) -``` - -### A system SDL library - -For CMake to find SDL, it must be installed in [a default location CMake is looking for](https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search-procedure). - -The following components are available, to be used as an argument of `find_package`. - -| Component name | Description | -|----------------|--------------------------------------------------------------------------------------------| -| SDL2 | The SDL2 shared library, available through the `SDL2::SDL2` target [^SDL_TARGET_EXCEPTION] | -| SDL2-static | The SDL2 static library, available through the `SDL2::SDL2-static` target | -| SDL2main | The SDL2main static library, available through the `SDL2::SDL2main` target | -| SDL2test | The SDL2test static library, available through the `SDL2::SDL2test` target | - -### Using a vendored SDL - -This only requires a copy of SDL in a subdirectory. - -## CMake configuration options for platforms - -### iOS/tvOS - -CMake 3.14+ natively includes support for iOS and tvOS. SDL binaries may be built -using Xcode or Make, possibly among other build-systems. - -When using a recent version of CMake (3.14+), it should be possible to: - -- build SDL for iOS, both static and dynamic -- build SDL test apps (as iOS/tvOS .app bundles) -- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis) - -To use, set the following CMake variables when running CMake's configuration stage: - -- `CMAKE_SYSTEM_NAME=` (either `iOS` or `tvOS`) -- `CMAKE_OSX_SYSROOT=` (examples: `iphoneos`, `iphonesimulator`, `iphoneos12.4`, `/full/path/to/iPhoneOS.sdk`, - `appletvos`, `appletvsimulator`, `appletvos12.4`, `/full/path/to/AppleTVOS.sdk`, etc.) -- `CMAKE_OSX_ARCHITECTURES=` (example: "arm64;armv7s;x86_64") - - -#### Examples - -- for iOS-Simulator, using the latest, installed SDK: - - ```bash - cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64 - ``` - -- for iOS-Device, using the latest, installed SDK, 64-bit only - - ```bash - cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64 - ``` - -- for iOS-Device, using the latest, installed SDK, mixed 32/64 bit - - ```cmake - cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s" - ``` - -- for iOS-Device, using a specific SDK revision (iOS 12.4, in this example): - - ```cmake - cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64 - ``` - -- for iOS-Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles): - - ```cmake - cmake ~/sdl -DSDL_TESTS=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64 - ``` - -- for tvOS-Simulator, using the latest, installed SDK: - - ```cmake - cmake ~/sdl -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvsimulator -DCMAKE_OSX_ARCHITECTURES=x86_64 - ``` - -- for tvOS-Device, using the latest, installed SDK: - - ```cmake - cmake ~/sdl -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_ARCHITECTURES=arm64` - ``` - - -[^SDL_TARGET_EXCEPTION]: `SDL2::SDL2` can be an ALIAS to a static `SDL2::SDL2-static` target for multiple reasons. +# CMake + +(www.cmake.org) + +SDL's build system was traditionally based on autotools. Over time, this +approach has suffered from several issues across the different supported +platforms. +To solve these problems, a new build system based on CMake was introduced. +It is developed in parallel to the legacy autotools build system, so users +can experiment with it without complication. + +The CMake build system is supported on the following platforms: + +* FreeBSD +* Linux +* Microsoft Visual C +* MinGW and Msys +* macOS, iOS, and tvOS, with support for XCode +* Android +* Emscripten +* RiscOS +* Playstation Vita + +## Building SDL + +Assuming the source for SDL is located at `~/sdl` +```sh +cd ~ +mkdir build +cd build +cmake ~/sdl +cmake --build . +``` + +This will build the static and dynamic versions of SDL in the `~/build` directory. +Installation can be done using: + +```sh +cmake --install . # '--install' requires CMake 3.15, or newer +``` + +## Including SDL in your project + +SDL can be included in your project in 2 major ways: +- using a system SDL library, provided by your (*nix) distribution or a package manager +- using a vendored SDL library: this is SDL copied or symlinked in a subfolder. + +The following CMake script supports both, depending on the value of `MYGAME_VENDORED`. + +```cmake +cmake_minimum_required(VERSION 3.5) +project(mygame) + +# Create an option to switch between a system sdl library and a vendored sdl library +option(MYGAME_VENDORED "Use vendored libraries" OFF) + +if(MYGAME_VENDORED) + add_subdirectory(vendored/sdl EXCLUDE_FROM_ALL) +else() + # 1. Look for a SDL2 package, 2. look for the SDL2 component and 3. fail if none can be found + find_package(SDL2 REQUIRED CONFIG REQUIRED COMPONENTS SDL2) + + # 1. Look for a SDL2 package, 2. Look for the SDL2maincomponent and 3. DO NOT fail when SDL2main is not available + find_package(SDL2 REQUIRED CONFIG COMPONENTS SDL2main) +endif() + +# Create your game executable target as usual +add_executable(mygame WIN32 mygame.c) + +# SDL2::SDL2main may or may not be available. It is e.g. required by Windows GUI applications +if(TARGET SDL2::SDL2main) + # It has an implicit dependency on SDL2 functions, so it MUST be added before SDL2::SDL2 (or SDL2::SDL2-static) + target_link_libraries(mygame PRIVATE SDL2::SDL2main) +endif() + +# Link to the actual SDL2 library. SDL2::SDL2 is the shared SDL library, SDL2::SDL2-static is the static SDL libarary. +target_link_libraries(mygame PRIVATE SDL2::SDL2) +``` + +### A system SDL library + +For CMake to find SDL, it must be installed in [a default location CMake is looking for](https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search-procedure). + +The following components are available, to be used as an argument of `find_package`. + +| Component name | Description | +|----------------|--------------------------------------------------------------------------------------------| +| SDL2 | The SDL2 shared library, available through the `SDL2::SDL2` target [^SDL_TARGET_EXCEPTION] | +| SDL2-static | The SDL2 static library, available through the `SDL2::SDL2-static` target | +| SDL2main | The SDL2main static library, available through the `SDL2::SDL2main` target | +| SDL2test | The SDL2test static library, available through the `SDL2::SDL2test` target | + +### Using a vendored SDL + +This only requires a copy of SDL in a subdirectory. + +## CMake configuration options for platforms + +### iOS/tvOS + +CMake 3.14+ natively includes support for iOS and tvOS. SDL binaries may be built +using Xcode or Make, possibly among other build-systems. + +When using a recent version of CMake (3.14+), it should be possible to: + +- build SDL for iOS, both static and dynamic +- build SDL test apps (as iOS/tvOS .app bundles) +- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis) + +To use, set the following CMake variables when running CMake's configuration stage: + +- `CMAKE_SYSTEM_NAME=` (either `iOS` or `tvOS`) +- `CMAKE_OSX_SYSROOT=` (examples: `iphoneos`, `iphonesimulator`, `iphoneos12.4`, `/full/path/to/iPhoneOS.sdk`, + `appletvos`, `appletvsimulator`, `appletvos12.4`, `/full/path/to/AppleTVOS.sdk`, etc.) +- `CMAKE_OSX_ARCHITECTURES=` (example: "arm64;armv7s;x86_64") + + +#### Examples + +- for iOS-Simulator, using the latest, installed SDK: + + ```bash + cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64 + ``` + +- for iOS-Device, using the latest, installed SDK, 64-bit only + + ```bash + cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64 + ``` + +- for iOS-Device, using the latest, installed SDK, mixed 32/64 bit + + ```cmake + cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s" + ``` + +- for iOS-Device, using a specific SDK revision (iOS 12.4, in this example): + + ```cmake + cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64 + ``` + +- for iOS-Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles): + + ```cmake + cmake ~/sdl -DSDL_TESTS=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64 + ``` + +- for tvOS-Simulator, using the latest, installed SDK: + + ```cmake + cmake ~/sdl -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvsimulator -DCMAKE_OSX_ARCHITECTURES=x86_64 + ``` + +- for tvOS-Device, using the latest, installed SDK: + + ```cmake + cmake ~/sdl -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_ARCHITECTURES=arm64` + ``` + + +[^SDL_TARGET_EXCEPTION]: `SDL2::SDL2` can be an ALIAS to a static `SDL2::SDL2-static` target for multiple reasons. diff --git a/vs/sdl2/docs/README-directfb.md b/vs/sdl2/docs/README-directfb.md index bbc6e993ba7..c41cab2705e 100644 --- a/vs/sdl2/docs/README-directfb.md +++ b/vs/sdl2/docs/README-directfb.md @@ -1,123 +1,123 @@ -DirectFB -======== - -Supports: - -- Hardware YUV overlays -- OpenGL - software only -- 2D/3D accelerations (depends on directfb driver) -- multiple displays -- windows - -What you need: - -* DirectFB 1.0.1, 1.2.x, 1.3.0 -* Kernel-Framebuffer support: required: vesafb, radeonfb .... -* Mesa 7.0.x - optional for OpenGL - -The `/etc/directfbrc` file should contain the following lines to make -your joystick work and avoid crashes: - -``` -disable-module=joystick -disable-module=cle266 -disable-module=cyber5k -no-linux-input-grab -``` - -To disable to use x11 backend when DISPLAY variable is found use - -``` -export SDL_DIRECTFB_X11_CHECK=0 -``` - -To disable the use of linux input devices, i.e. multimice/multikeyboard support, -use - -``` -export SDL_DIRECTFB_LINUX_INPUT=0 -``` - -To use hardware accelerated YUV-overlays for YUV-textures, use: - -``` -export SDL_DIRECTFB_YUV_DIRECT=1 -``` - -This is disabled by default. It will only support one -YUV texture, namely the first. Every other YUV texture will be -rendered in software. - -In addition, you may use (directfb-1.2.x) - -``` -export SDL_DIRECTFB_YUV_UNDERLAY=1 -``` - -to make the YUV texture an underlay. This will make the cursor to -be shown. - -Simple Window Manager -===================== - -The driver has support for a very, very basic window manager you may -want to use when running with `wm=default`. Use - -``` -export SDL_DIRECTFB_WM=1 -``` - -to enable basic window borders. In order to have the window title rendered, -you need to have the following font installed: - -``` -/usr/share/fonts/truetype/freefont/FreeSans.ttf -``` - -OpenGL Support -============== - -The following instructions will give you *software* OpenGL. However this -works at least on all directfb supported platforms. - -As of this writing 20100802 you need to pull Mesa from git and do the following: - -``` -git clone git://anongit.freedesktop.org/git/mesa/mesa -cd mesa -git checkout 2c9fdaf7292423c157fc79b5ce43f0f199dd753a -``` - -Edit `configs/linux-directfb` so that the Directories-section looks like this: - -``` -# Directories -SRC_DIRS = mesa glu -GLU_DIRS = sgi -DRIVER_DIRS = directfb -PROGRAM_DIRS = -``` - -Then do the following: - -``` -make linux-directfb -make - -echo Installing - please enter sudo pw. - -sudo make install INSTALL_DIR=/usr/local/dfb_GL -cd src/mesa/drivers/directfb -make -sudo make install INSTALL_DIR=/usr/local/dfb_GL -``` - -To run the SDL - testprograms: - -``` -export SDL_VIDEODRIVER=directfb -export LD_LIBRARY_PATH=/usr/local/dfb_GL/lib -export LD_PRELOAD=/usr/local/dfb_GL/libGL.so.7 - -./testgl -``` +DirectFB +======== + +Supports: + +- Hardware YUV overlays +- OpenGL - software only +- 2D/3D accelerations (depends on directfb driver) +- multiple displays +- windows + +What you need: + +* DirectFB 1.0.1, 1.2.x, 1.3.0 +* Kernel-Framebuffer support: required: vesafb, radeonfb .... +* Mesa 7.0.x - optional for OpenGL + +The `/etc/directfbrc` file should contain the following lines to make +your joystick work and avoid crashes: + +``` +disable-module=joystick +disable-module=cle266 +disable-module=cyber5k +no-linux-input-grab +``` + +To disable to use x11 backend when DISPLAY variable is found use + +``` +export SDL_DIRECTFB_X11_CHECK=0 +``` + +To disable the use of linux input devices, i.e. multimice/multikeyboard support, +use + +``` +export SDL_DIRECTFB_LINUX_INPUT=0 +``` + +To use hardware accelerated YUV-overlays for YUV-textures, use: + +``` +export SDL_DIRECTFB_YUV_DIRECT=1 +``` + +This is disabled by default. It will only support one +YUV texture, namely the first. Every other YUV texture will be +rendered in software. + +In addition, you may use (directfb-1.2.x) + +``` +export SDL_DIRECTFB_YUV_UNDERLAY=1 +``` + +to make the YUV texture an underlay. This will make the cursor to +be shown. + +Simple Window Manager +===================== + +The driver has support for a very, very basic window manager you may +want to use when running with `wm=default`. Use + +``` +export SDL_DIRECTFB_WM=1 +``` + +to enable basic window borders. In order to have the window title rendered, +you need to have the following font installed: + +``` +/usr/share/fonts/truetype/freefont/FreeSans.ttf +``` + +OpenGL Support +============== + +The following instructions will give you *software* OpenGL. However this +works at least on all directfb supported platforms. + +As of this writing 20100802 you need to pull Mesa from git and do the following: + +``` +git clone git://anongit.freedesktop.org/git/mesa/mesa +cd mesa +git checkout 2c9fdaf7292423c157fc79b5ce43f0f199dd753a +``` + +Edit `configs/linux-directfb` so that the Directories-section looks like this: + +``` +# Directories +SRC_DIRS = mesa glu +GLU_DIRS = sgi +DRIVER_DIRS = directfb +PROGRAM_DIRS = +``` + +Then do the following: + +``` +make linux-directfb +make + +echo Installing - please enter sudo pw. + +sudo make install INSTALL_DIR=/usr/local/dfb_GL +cd src/mesa/drivers/directfb +make +sudo make install INSTALL_DIR=/usr/local/dfb_GL +``` + +To run the SDL - testprograms: + +``` +export SDL_VIDEODRIVER=directfb +export LD_LIBRARY_PATH=/usr/local/dfb_GL/lib +export LD_PRELOAD=/usr/local/dfb_GL/libGL.so.7 + +./testgl +``` diff --git a/vs/sdl2/docs/README-dynapi.md b/vs/sdl2/docs/README-dynapi.md index 76b868ce644..6d447eab690 100644 --- a/vs/sdl2/docs/README-dynapi.md +++ b/vs/sdl2/docs/README-dynapi.md @@ -1,138 +1,138 @@ -# Dynamic API - -Originally posted on Ryan's Google+ account. - -Background: - -- The Steam Runtime has (at least in theory) a really kick-ass build of SDL2, - but developers are shipping their own SDL2 with individual Steam games. - These games might stop getting updates, but a newer SDL2 might be needed later. - Certainly we'll always be fixing bugs in SDL, even if a new video target isn't - ever needed, and these fixes won't make it to a game shipping its own SDL. -- Even if we replace the SDL2 in those games with a compatible one, that is to - say, edit a developer's Steam depot (yuck!), there are developers that are - statically linking SDL2 that we can't do this for. We can't even force the - dynamic loader to ignore their SDL2 in this case, of course. -- If you don't ship an SDL2 with the game in some form, people that disabled the - Steam Runtime, or just tried to run the game from the command line instead of - Steam might find themselves unable to run the game, due to a missing dependency. -- If you want to ship on non-Steam platforms like GOG or Humble Bundle, or target - generic Linux boxes that may or may not have SDL2 installed, you have to ship - the library or risk a total failure to launch. So now, you might have to have - a non-Steam build plus a Steam build (that is, one with and one without SDL2 - included), which is inconvenient if you could have had one universal build - that works everywhere. -- We like the zlib license, but the biggest complaint from the open source - community about the license change is the static linking. The LGPL forced this - as a legal, not technical issue, but zlib doesn't care. Even those that aren't - concerned about the GNU freedoms found themselves solving the same problems: - swapping in a newer SDL to an older game often times can save the day. - Static linking stops this dead. - -So here's what we did: - -SDL now has, internally, a table of function pointers. So, this is what SDL_Init -now looks like: - -```c -Uint32 SDL_Init(Uint32 flags) -{ - return jump_table.SDL_Init(flags); -} -``` - -Except that is all done with a bunch of macro magic so we don't have to maintain -every one of these. - -What is jump_table.SDL_init()? Eventually, that's a function pointer of the real -SDL_Init() that you've been calling all this time. But at startup, it looks more -like this: - -```c -Uint32 SDL_Init_DEFAULT(Uint32 flags) -{ - SDL_InitDynamicAPI(); - return jump_table.SDL_Init(flags); -} -``` - -SDL_InitDynamicAPI() fills in jump_table with all the actual SDL function -pointers, which means that this `_DEFAULT` function never gets called again. -First call to any SDL function sets the whole thing up. - -So you might be asking, what was the value in that? Isn't this what the operating -system's dynamic loader was supposed to do for us? Yes, but now we've got this -level of indirection, we can do things like this: - -```bash -export SDL_DYNAMIC_API=/my/actual/libSDL-2.0.so.0 -./MyGameThatIsStaticallyLinkedToSDL2 -``` - -And now, this game that is statically linked to SDL, can still be overridden -with a newer, or better, SDL. The statically linked one will only be used as -far as calling into the jump table in this case. But in cases where no override -is desired, the statically linked version will provide its own jump table, -and everyone is happy. - -So now: -- Developers can statically link SDL, and users can still replace it. - (We'd still rather you ship a shared library, though!) -- Developers can ship an SDL with their game, Valve can override it for, say, - new features on SteamOS, or distros can override it for their own needs, - but it'll also just work in the default case. -- Developers can ship the same package to everyone (Humble Bundle, GOG, etc), - and it'll do the right thing. -- End users (and Valve) can update a game's SDL in almost any case, - to keep abandoned games running on newer platforms. -- Everyone develops with SDL exactly as they have been doing all along. - Same headers, same ABI. Just get the latest version to enable this magic. - - -A little more about SDL_InitDynamicAPI(): - -Internally, InitAPI does some locking to make sure everything waits until a -single thread initializes everything (although even SDL_CreateThread() goes -through here before spinning a thread, too), and then decides if it should use -an external SDL library. If not, it sets up the jump table using the current -SDL's function pointers (which might be statically linked into a program, or in -a shared library of its own). If so, it loads that library and looks for and -calls a single function: - -```c -Sint32 SDL_DYNAPI_entry(Uint32 version, void *table, Uint32 tablesize); -``` - -That function takes a version number (more on that in a moment), the address of -the jump table, and the size, in bytes, of the table. -Now, we've got policy here: this table's layout never changes; new stuff gets -added to the end. Therefore SDL_DYNAPI_entry() knows that it can provide all -the needed functions if tablesize <= sizeof its own jump table. If tablesize is -bigger (say, SDL 2.0.4 is trying to load SDL 2.0.3), then we know to abort, but -if it's smaller, we know we can provide the entire API that the caller needs. - -The version variable is a failsafe switch. -Right now it's always 1. This number changes when there are major API changes -(so we know if the tablesize might be smaller, or entries in it have changed). -Right now SDL_DYNAPI_entry gives up if the version doesn't match, but it's not -inconceivable to have a small dispatch library that only supplies this one -function and loads different, otherwise-incompatible SDL libraries and has the -right one initialize the jump table based on the version. For something that -must generically catch lots of different versions of SDL over time, like the -Steam Client, this isn't a bad option. - -Finally, I'm sure some people are reading this and thinking, -"I don't want that overhead in my project!" - -To which I would point out that the extra function call through the jump table -probably wouldn't even show up in a profile, but lucky you: this can all be -disabled. You can build SDL without this if you absolutely must, but we would -encourage you not to do that. However, on heavily locked down platforms like -iOS, or maybe when debugging, it makes sense to disable it. The way this is -designed in SDL, you just have to change one #define, and the entire system -vaporizes out, and SDL functions exactly like it always did. Most of it is -macro magic, so the system is contained to one C file and a few headers. -However, this is on by default and you have to edit a header file to turn it -off. Our hopes is that if we make it easy to disable, but not too easy, -everyone will ultimately be able to get what they want, but we've gently -nudged everyone towards what we think is the best solution. +# Dynamic API + +Originally posted on Ryan's Google+ account. + +Background: + +- The Steam Runtime has (at least in theory) a really kick-ass build of SDL2, + but developers are shipping their own SDL2 with individual Steam games. + These games might stop getting updates, but a newer SDL2 might be needed later. + Certainly we'll always be fixing bugs in SDL, even if a new video target isn't + ever needed, and these fixes won't make it to a game shipping its own SDL. +- Even if we replace the SDL2 in those games with a compatible one, that is to + say, edit a developer's Steam depot (yuck!), there are developers that are + statically linking SDL2 that we can't do this for. We can't even force the + dynamic loader to ignore their SDL2 in this case, of course. +- If you don't ship an SDL2 with the game in some form, people that disabled the + Steam Runtime, or just tried to run the game from the command line instead of + Steam might find themselves unable to run the game, due to a missing dependency. +- If you want to ship on non-Steam platforms like GOG or Humble Bundle, or target + generic Linux boxes that may or may not have SDL2 installed, you have to ship + the library or risk a total failure to launch. So now, you might have to have + a non-Steam build plus a Steam build (that is, one with and one without SDL2 + included), which is inconvenient if you could have had one universal build + that works everywhere. +- We like the zlib license, but the biggest complaint from the open source + community about the license change is the static linking. The LGPL forced this + as a legal, not technical issue, but zlib doesn't care. Even those that aren't + concerned about the GNU freedoms found themselves solving the same problems: + swapping in a newer SDL to an older game often times can save the day. + Static linking stops this dead. + +So here's what we did: + +SDL now has, internally, a table of function pointers. So, this is what SDL_Init +now looks like: + +```c +Uint32 SDL_Init(Uint32 flags) +{ + return jump_table.SDL_Init(flags); +} +``` + +Except that is all done with a bunch of macro magic so we don't have to maintain +every one of these. + +What is jump_table.SDL_init()? Eventually, that's a function pointer of the real +SDL_Init() that you've been calling all this time. But at startup, it looks more +like this: + +```c +Uint32 SDL_Init_DEFAULT(Uint32 flags) +{ + SDL_InitDynamicAPI(); + return jump_table.SDL_Init(flags); +} +``` + +SDL_InitDynamicAPI() fills in jump_table with all the actual SDL function +pointers, which means that this `_DEFAULT` function never gets called again. +First call to any SDL function sets the whole thing up. + +So you might be asking, what was the value in that? Isn't this what the operating +system's dynamic loader was supposed to do for us? Yes, but now we've got this +level of indirection, we can do things like this: + +```bash +export SDL_DYNAMIC_API=/my/actual/libSDL-2.0.so.0 +./MyGameThatIsStaticallyLinkedToSDL2 +``` + +And now, this game that is statically linked to SDL, can still be overridden +with a newer, or better, SDL. The statically linked one will only be used as +far as calling into the jump table in this case. But in cases where no override +is desired, the statically linked version will provide its own jump table, +and everyone is happy. + +So now: +- Developers can statically link SDL, and users can still replace it. + (We'd still rather you ship a shared library, though!) +- Developers can ship an SDL with their game, Valve can override it for, say, + new features on SteamOS, or distros can override it for their own needs, + but it'll also just work in the default case. +- Developers can ship the same package to everyone (Humble Bundle, GOG, etc), + and it'll do the right thing. +- End users (and Valve) can update a game's SDL in almost any case, + to keep abandoned games running on newer platforms. +- Everyone develops with SDL exactly as they have been doing all along. + Same headers, same ABI. Just get the latest version to enable this magic. + + +A little more about SDL_InitDynamicAPI(): + +Internally, InitAPI does some locking to make sure everything waits until a +single thread initializes everything (although even SDL_CreateThread() goes +through here before spinning a thread, too), and then decides if it should use +an external SDL library. If not, it sets up the jump table using the current +SDL's function pointers (which might be statically linked into a program, or in +a shared library of its own). If so, it loads that library and looks for and +calls a single function: + +```c +Sint32 SDL_DYNAPI_entry(Uint32 version, void *table, Uint32 tablesize); +``` + +That function takes a version number (more on that in a moment), the address of +the jump table, and the size, in bytes, of the table. +Now, we've got policy here: this table's layout never changes; new stuff gets +added to the end. Therefore SDL_DYNAPI_entry() knows that it can provide all +the needed functions if tablesize <= sizeof its own jump table. If tablesize is +bigger (say, SDL 2.0.4 is trying to load SDL 2.0.3), then we know to abort, but +if it's smaller, we know we can provide the entire API that the caller needs. + +The version variable is a failsafe switch. +Right now it's always 1. This number changes when there are major API changes +(so we know if the tablesize might be smaller, or entries in it have changed). +Right now SDL_DYNAPI_entry gives up if the version doesn't match, but it's not +inconceivable to have a small dispatch library that only supplies this one +function and loads different, otherwise-incompatible SDL libraries and has the +right one initialize the jump table based on the version. For something that +must generically catch lots of different versions of SDL over time, like the +Steam Client, this isn't a bad option. + +Finally, I'm sure some people are reading this and thinking, +"I don't want that overhead in my project!" + +To which I would point out that the extra function call through the jump table +probably wouldn't even show up in a profile, but lucky you: this can all be +disabled. You can build SDL without this if you absolutely must, but we would +encourage you not to do that. However, on heavily locked down platforms like +iOS, or maybe when debugging, it makes sense to disable it. The way this is +designed in SDL, you just have to change one #define, and the entire system +vaporizes out, and SDL functions exactly like it always did. Most of it is +macro magic, so the system is contained to one C file and a few headers. +However, this is on by default and you have to edit a header file to turn it +off. Our hopes is that if we make it easy to disable, but not too easy, +everyone will ultimately be able to get what they want, but we've gently +nudged everyone towards what we think is the best solution. diff --git a/vs/sdl2/docs/README-emscripten.md b/vs/sdl2/docs/README-emscripten.md index 1a13eb1c337..cefad99c4ee 100644 --- a/vs/sdl2/docs/README-emscripten.md +++ b/vs/sdl2/docs/README-emscripten.md @@ -1,374 +1,374 @@ -# Emscripten - -## The state of things - -(As of September 2023, but things move quickly and we don't update this -document often.) - -In modern times, all the browsers you probably care about (Chrome, Firefox, -Edge, and Safari, on Windows, macOS, Linux, iOS and Android), support some -reasonable base configurations: - -- WebAssembly (don't bother with asm.js any more) -- WebGL (which will look like OpenGL ES 2 or 3 to your app). -- Threads (see caveats, though!) -- Game controllers -- Autoupdating (so you can assume they have a recent version of the browser) - -All this to say we're at the point where you don't have to make a lot of -concessions to get even a fairly complex SDL-based game up and running. - - -## RTFM - -This document is a quick rundown of some high-level details. The -documentation at [emscripten.org](https://emscripten.org/) is vast -and extremely detailed for a wide variety of topics, and you should at -least skim through it at some point. - - -## Porting your app to Emscripten - -Many many things just need some simple adjustments and they'll compile -like any other C/C++ code, as long as SDL was handling the platform-specific -work for your program. - -First, you probably need this in at least one of your source files: - -```c -#ifdef __EMSCRIPTEN__ -#include -#endif -``` - -Second: assembly language code has to go. Replace it with C. You can even use -[x86 SIMD intrinsic functions in Emscripten](https://emscripten.org/docs/porting/simd.html)! - -Third: Middleware has to go. If you have a third-party library you link -against, you either need an Emscripten port of it, or the source code to it -to compile yourself, or you need to remove it. - -Fourth: You still start in a function called main(), but you need to get out of -it and into a function that gets called repeatedly, and returns quickly, -called a mainloop. - -Somewhere in your program, you probably have something that looks like a more -complicated version of this: - -```c -void main(void) -{ - initialize_the_game(); - while (game_is_still_running) { - check_for_new_input(); - think_about_stuff(); - draw_the_next_frame(); - } - deinitialize_the_game(); -} -``` - -This will not work on Emscripten, because the main thread needs to be free -to do stuff and can't sit in this loop forever. So Emscripten lets you set up -a [mainloop](https://emscripten.org/docs/porting/emscripten-runtime-environment.html#browser-main-loop). - -```c -static void mainloop(void) /* this will run often, possibly at the monitor's refresh rate */ -{ - if (!game_is_still_running) { - deinitialize_the_game(); - #ifdef __EMSCRIPTEN__ - emscripten_cancel_main_loop(); /* this should "kill" the app. */ - #else - exit(0); - #endif - } - - check_for_new_input(); - think_about_stuff(); - draw_the_next_frame(); -} - -void main(void) -{ - initialize_the_game(); - #ifdef __EMSCRIPTEN__ - emscripten_set_main_loop(mainloop, 0, 1); - #else - while (1) { mainloop(); } - #endif -} -``` - -Basically, `emscripten_set_main_loop(mainloop, 0, 1);` says "run -`mainloop` over and over until I end the program." The function will -run, and return, freeing the main thread for other tasks, and then -run again when it's time. The `1` parameter does some magic to make -your main() function end immediately; this is useful because you -don't want any shutdown code that might be sitting below this code -to actually run if main() were to continue on, since we're just -getting started. - -There's a lot of little details that are beyond the scope of this -document, but that's the biggest intial set of hurdles to porting -your app to the web. - - -## Do you need threads? - -If you plan to use threads, they work on all major browsers now. HOWEVER, -they bring with them a lot of careful considerations. Rendering _must_ -be done on the main thread. This is a general guideline for many -platforms, but a hard requirement on the web. - -Many other things also must happen on the main thread; often times SDL -and Emscripten make efforts to "proxy" work to the main thread that -must be there, but you have to be careful (and read more detailed -documentation than this for the finer points). - -Even when using threads, your main thread needs to set an Emscripten -mainloop that runs quickly and returns, or things will fail to work -correctly. - -You should definitely read [Emscripten's pthreads docs](https://emscripten.org/docs/porting/pthreads.html) -for all the finer points. Mostly SDL's thread API will work as expected, -but is built on pthreads, so it shares the same little incompatibilities -that are documented there, such as where you can use a mutex, and when -a thread will start running, etc. - - -IMPORTANT: You have to decide to either build something that uses -threads or something that doesn't; you can't have one build -that works everywhere. This is an Emscripten (or maybe WebAssembly? -Or just web browsers in general?) limitation. If you aren't using -threads, it's easier to not enable them at all, at build time. - -If you use threads, you _have to_ run from a web server that has -[COOP/COEP headers set correctly](https://web.dev/why-coop-coep/) -or your program will fail to start at all. - -If building with threads, `__EMSCRIPTEN_PTHREADS__` will be defined -for checking with the C preprocessor, so you can build something -different depending on what sort of build you're compiling. - - -## Audio - -Audio works as expected at the API level, but not exactly like other -platforms. - -You'll only see a single default audio device. Audio capture also works; -if the browser pops up a prompt to ask for permission to access the -microphone, the SDL_OpenAudioDevice call will succeed and start producing -silence at a regular interval. Once the user approves the request, real -audio data will flow. If the user denies it, the app is not informed and -will just continue to receive silence. - -Modern web browsers will not permit web pages to produce sound before the -user has interacted with them (clicked or tapped on them, usually); this is -for several reasons, not the least of which being that no one likes when a -random browser tab suddenly starts making noise and the user has to scramble -to figure out which and silence it. - -SDL will allow you to open the audio device for playback in this -circumstance, and your audio callback will fire, but SDL will throw the audio -data away until the user interacts with the page. This helps apps that depend -on the audio callback to make progress, and also keeps audio playback in sync -once the app is finally allowed to make noise. - -There are two reasonable ways to deal with the silence at the app level: -if you are writing some sort of media player thing, where the user expects -there to be a volume control when you mouseover the canvas, just default -that control to a muted state; if the user clicks on the control to unmute -it, on this first click, open the audio device. This allows the media to -play at start, and the user can reasonably opt-in to listening. - -Many games do not have this sort of UI, and are more rigid about starting -audio along with everything else at the start of the process. For these, your -best bet is to write a little Javascript that puts up a "Click here to play!" -UI, and upon the user clicking, remove that UI and then call the Emscripten -app's main() function. As far as the application knows, the audio device was -available to be opened as soon as the program started, and since this magic -happens in a little Javascript, you don't have to change your C/C++ code at -all to make it happen. - -Please see the discussion at https://github.com/libsdl-org/SDL/issues/6385 -for some Javascript code to steal for this approach. - - -## Rendering - -If you use SDL's 2D render API, it will use GLES2 internally, which -Emscripten will turn into WebGL calls. You can also use OpenGL ES 2 -directly by creating a GL context and drawing into it. - -Calling SDL_RenderPresent (or SDL_GL_SwapWindow) will not actually -present anything on the screen until your return from your mainloop -function. - - -## Building SDL/emscripten - -First: do you _really_ need to build SDL from source? - -If you aren't developing SDL itself, have a desire to mess with its source -code, or need something on the bleeding edge, don't build SDL. Just use -Emscripten's packaged version! - -Compile and link your app with `-sUSE_SDL=2` and it'll use a build of -SDL packaged with Emscripten. This comes from the same source code and -fixes the Emscripten project makes to SDL are generally merged into SDL's -revision control, so often this is much easier for app developers. - -`-sUSE_SDL=1` will select Emscripten's JavaScript reimplementation of SDL -1.2 instead; if you need SDL 1.2, this might be fine, but we generally -recommend you don't use SDL 1.2 in modern times. - - -If you want to build SDL, though... - -SDL currently requires at least Emscripten 3.1.35 to build. Newer versions -are likely to work, as well. - - -Build: - -This works on Linux/Unix and macOS. Please send comments about Windows. - -Make sure you've [installed emsdk](https://emscripten.org/docs/getting_started/downloads.html) -first, and run `source emsdk_env.sh` at the command line so it finds the -tools. - -(These configure options might be overkill, but this has worked for me.) - -```bash -cd SDL -mkdir build -cd build -emconfigure ../configure --host=wasm32-unknown-emscripten --disable-pthreads --disable-assembly --disable-cpuinfo CFLAGS="-sUSE_SDL=0 -O3" -emmake make -j4 -``` - -If you want to build with thread support, something like this works: - -```bash -emconfigure ../configure --host=wasm32-unknown-emscripten --enable-pthreads --disable-assembly --disable-cpuinfo CFLAGS="-sUSE_SDL=0 -O3 -pthread" LDFLAGS="-pthread" -``` - -Or with cmake: - -```bash -mkdir build -cd build -emcmake cmake .. -emmake make -j4 -``` - -To build one of the tests: - -```bash -cd test/ -emcc -O2 --js-opts 0 -g4 testdraw2.c -I../include ../build/.libs/libSDL2.a ../build/libSDL2_test.a -o a.html -``` - -## Building your app - -You need to compile with `emcc` instead of `gcc` or `clang` or whatever, but -mostly it uses the same command line arguments as Clang. - -Link against the SDL/build/.libs/libSDL2.a file you generated by building SDL, -link with `-sUSE_SDL=2` to use Emscripten's prepackaged SDL2 build. - -Usually you would produce a binary like this: - -```bash -gcc -o mygame mygame.c # or whatever -``` - -But for Emscripten, you want to output something else: - -```bash -emcc -o index.html mygame.c -``` - -This will produce several files...support Javascript and WebAssembly (.wasm) -files. The `-o index.html` will produce a simple HTML page that loads and -runs your app. You will (probably) eventually want to replace or customize -that file and do `-o index.js` instead to just build the code pieces. - -If you're working on a program of any serious size, you'll likely need to -link with `-sALLOW_MEMORY_GROWTH=1 -sMAXIMUM_MEMORY=1gb` to get access -to more memory. If using pthreads, you'll need the `-sMAXIMUM_MEMORY=1gb` -or the app will fail to start on iOS browsers, but this might be a bug that -goes away in the future. - - -## Data files - -Your game probably has data files. Here's how to access them. - -Filesystem access works like a Unix filesystem; you have a single directory -tree, possibly interpolated from several mounted locations, no drive letters, -'/' for a path separator. You can access them with standard file APIs like -open() or fopen() or SDL_RWops. You can read or write from the filesystem. - -By default, you probably have a "MEMFS" filesystem (all files are stored in -memory, but access to them is immediate and doesn't need to block). There are -other options, like "IDBFS" (files are stored in a local database, so they -don't need to be in RAM all the time and they can persist between runs of the -program, but access is not synchronous). You can mix and match these file -systems, mounting a MEMFS filesystem at one place and idbfs elsewhere, etc, -but that's beyond the scope of this document. Please refer to Emscripten's -[page on the topic](https://emscripten.org/docs/porting/files/file_systems_overview.html) -for more info. - -The _easiest_ (but not the best) way to get at your data files is to embed -them in the app itself. Emscripten's linker has support for automating this. - -```bash -emcc -o index.html loopwave.c --embed-file=../test/sample.wav@/sounds/sample.wav -``` - -This will pack ../test/sample.wav in your app, and make it available at -"/sounds/sample.wav" at runtime. Emscripten makes sure this data is available -before your main() function runs, and since it's in MEMFS, you can just -read it like you do on other platforms. `--embed-file` can also accept a -directory to pack an entire tree, and you can specify the argument multiple -times to pack unrelated things into the final installation. - -Note that this is absolutely the best approach if you have a few small -files to include and shouldn't worry about the issue further. However, if you -have hundreds of megabytes and/or thousands of files, this is not so great, -since the user will download it all every time they load your page, and it -all has to live in memory at runtime. - -[Emscripten's documentation on the matter](https://emscripten.org/docs/porting/files/packaging_files.html) -gives other options and details, and is worth a read. - - -## Debugging - -Debugging web apps is a mixed bag. You should compile and link with -`-gsource-map`, which embeds a ton of source-level debugging information into -the build, and make sure _the app source code is available on the web server_, -which is often a scary proposition for various reasons. - -When you debug from the browser's tools and hit a breakpoint, you can step -through the actual C/C++ source code, though, which can be nice. - -If you try debugging in Firefox and it doesn't work well for no apparent -reason, try Chrome, and vice-versa. These tools are still relatively new, -and improving all the time. - -SDL_Log() (or even plain old printf) will write to the Javascript console, -and honestly I find printf-style debugging to be easier than setting up a build -for proper debugging, so use whatever tools work best for you. - - -## Questions? - -Please give us feedback on this document at [the SDL bug tracker](https://github.com/libsdl-org/SDL/issues). -If something is wrong or unclear, we want to know! - - - +# Emscripten + +## The state of things + +(As of September 2023, but things move quickly and we don't update this +document often.) + +In modern times, all the browsers you probably care about (Chrome, Firefox, +Edge, and Safari, on Windows, macOS, Linux, iOS and Android), support some +reasonable base configurations: + +- WebAssembly (don't bother with asm.js any more) +- WebGL (which will look like OpenGL ES 2 or 3 to your app). +- Threads (see caveats, though!) +- Game controllers +- Autoupdating (so you can assume they have a recent version of the browser) + +All this to say we're at the point where you don't have to make a lot of +concessions to get even a fairly complex SDL-based game up and running. + + +## RTFM + +This document is a quick rundown of some high-level details. The +documentation at [emscripten.org](https://emscripten.org/) is vast +and extremely detailed for a wide variety of topics, and you should at +least skim through it at some point. + + +## Porting your app to Emscripten + +Many many things just need some simple adjustments and they'll compile +like any other C/C++ code, as long as SDL was handling the platform-specific +work for your program. + +First, you probably need this in at least one of your source files: + +```c +#ifdef __EMSCRIPTEN__ +#include +#endif +``` + +Second: assembly language code has to go. Replace it with C. You can even use +[x86 SIMD intrinsic functions in Emscripten](https://emscripten.org/docs/porting/simd.html)! + +Third: Middleware has to go. If you have a third-party library you link +against, you either need an Emscripten port of it, or the source code to it +to compile yourself, or you need to remove it. + +Fourth: You still start in a function called main(), but you need to get out of +it and into a function that gets called repeatedly, and returns quickly, +called a mainloop. + +Somewhere in your program, you probably have something that looks like a more +complicated version of this: + +```c +void main(void) +{ + initialize_the_game(); + while (game_is_still_running) { + check_for_new_input(); + think_about_stuff(); + draw_the_next_frame(); + } + deinitialize_the_game(); +} +``` + +This will not work on Emscripten, because the main thread needs to be free +to do stuff and can't sit in this loop forever. So Emscripten lets you set up +a [mainloop](https://emscripten.org/docs/porting/emscripten-runtime-environment.html#browser-main-loop). + +```c +static void mainloop(void) /* this will run often, possibly at the monitor's refresh rate */ +{ + if (!game_is_still_running) { + deinitialize_the_game(); + #ifdef __EMSCRIPTEN__ + emscripten_cancel_main_loop(); /* this should "kill" the app. */ + #else + exit(0); + #endif + } + + check_for_new_input(); + think_about_stuff(); + draw_the_next_frame(); +} + +void main(void) +{ + initialize_the_game(); + #ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(mainloop, 0, 1); + #else + while (1) { mainloop(); } + #endif +} +``` + +Basically, `emscripten_set_main_loop(mainloop, 0, 1);` says "run +`mainloop` over and over until I end the program." The function will +run, and return, freeing the main thread for other tasks, and then +run again when it's time. The `1` parameter does some magic to make +your main() function end immediately; this is useful because you +don't want any shutdown code that might be sitting below this code +to actually run if main() were to continue on, since we're just +getting started. + +There's a lot of little details that are beyond the scope of this +document, but that's the biggest intial set of hurdles to porting +your app to the web. + + +## Do you need threads? + +If you plan to use threads, they work on all major browsers now. HOWEVER, +they bring with them a lot of careful considerations. Rendering _must_ +be done on the main thread. This is a general guideline for many +platforms, but a hard requirement on the web. + +Many other things also must happen on the main thread; often times SDL +and Emscripten make efforts to "proxy" work to the main thread that +must be there, but you have to be careful (and read more detailed +documentation than this for the finer points). + +Even when using threads, your main thread needs to set an Emscripten +mainloop that runs quickly and returns, or things will fail to work +correctly. + +You should definitely read [Emscripten's pthreads docs](https://emscripten.org/docs/porting/pthreads.html) +for all the finer points. Mostly SDL's thread API will work as expected, +but is built on pthreads, so it shares the same little incompatibilities +that are documented there, such as where you can use a mutex, and when +a thread will start running, etc. + + +IMPORTANT: You have to decide to either build something that uses +threads or something that doesn't; you can't have one build +that works everywhere. This is an Emscripten (or maybe WebAssembly? +Or just web browsers in general?) limitation. If you aren't using +threads, it's easier to not enable them at all, at build time. + +If you use threads, you _have to_ run from a web server that has +[COOP/COEP headers set correctly](https://web.dev/why-coop-coep/) +or your program will fail to start at all. + +If building with threads, `__EMSCRIPTEN_PTHREADS__` will be defined +for checking with the C preprocessor, so you can build something +different depending on what sort of build you're compiling. + + +## Audio + +Audio works as expected at the API level, but not exactly like other +platforms. + +You'll only see a single default audio device. Audio capture also works; +if the browser pops up a prompt to ask for permission to access the +microphone, the SDL_OpenAudioDevice call will succeed and start producing +silence at a regular interval. Once the user approves the request, real +audio data will flow. If the user denies it, the app is not informed and +will just continue to receive silence. + +Modern web browsers will not permit web pages to produce sound before the +user has interacted with them (clicked or tapped on them, usually); this is +for several reasons, not the least of which being that no one likes when a +random browser tab suddenly starts making noise and the user has to scramble +to figure out which and silence it. + +SDL will allow you to open the audio device for playback in this +circumstance, and your audio callback will fire, but SDL will throw the audio +data away until the user interacts with the page. This helps apps that depend +on the audio callback to make progress, and also keeps audio playback in sync +once the app is finally allowed to make noise. + +There are two reasonable ways to deal with the silence at the app level: +if you are writing some sort of media player thing, where the user expects +there to be a volume control when you mouseover the canvas, just default +that control to a muted state; if the user clicks on the control to unmute +it, on this first click, open the audio device. This allows the media to +play at start, and the user can reasonably opt-in to listening. + +Many games do not have this sort of UI, and are more rigid about starting +audio along with everything else at the start of the process. For these, your +best bet is to write a little Javascript that puts up a "Click here to play!" +UI, and upon the user clicking, remove that UI and then call the Emscripten +app's main() function. As far as the application knows, the audio device was +available to be opened as soon as the program started, and since this magic +happens in a little Javascript, you don't have to change your C/C++ code at +all to make it happen. + +Please see the discussion at https://github.com/libsdl-org/SDL/issues/6385 +for some Javascript code to steal for this approach. + + +## Rendering + +If you use SDL's 2D render API, it will use GLES2 internally, which +Emscripten will turn into WebGL calls. You can also use OpenGL ES 2 +directly by creating a GL context and drawing into it. + +Calling SDL_RenderPresent (or SDL_GL_SwapWindow) will not actually +present anything on the screen until your return from your mainloop +function. + + +## Building SDL/emscripten + +First: do you _really_ need to build SDL from source? + +If you aren't developing SDL itself, have a desire to mess with its source +code, or need something on the bleeding edge, don't build SDL. Just use +Emscripten's packaged version! + +Compile and link your app with `-sUSE_SDL=2` and it'll use a build of +SDL packaged with Emscripten. This comes from the same source code and +fixes the Emscripten project makes to SDL are generally merged into SDL's +revision control, so often this is much easier for app developers. + +`-sUSE_SDL=1` will select Emscripten's JavaScript reimplementation of SDL +1.2 instead; if you need SDL 1.2, this might be fine, but we generally +recommend you don't use SDL 1.2 in modern times. + + +If you want to build SDL, though... + +SDL currently requires at least Emscripten 3.1.35 to build. Newer versions +are likely to work, as well. + + +Build: + +This works on Linux/Unix and macOS. Please send comments about Windows. + +Make sure you've [installed emsdk](https://emscripten.org/docs/getting_started/downloads.html) +first, and run `source emsdk_env.sh` at the command line so it finds the +tools. + +(These configure options might be overkill, but this has worked for me.) + +```bash +cd SDL +mkdir build +cd build +emconfigure ../configure --host=wasm32-unknown-emscripten --disable-pthreads --disable-assembly --disable-cpuinfo CFLAGS="-sUSE_SDL=0 -O3" +emmake make -j4 +``` + +If you want to build with thread support, something like this works: + +```bash +emconfigure ../configure --host=wasm32-unknown-emscripten --enable-pthreads --disable-assembly --disable-cpuinfo CFLAGS="-sUSE_SDL=0 -O3 -pthread" LDFLAGS="-pthread" +``` + +Or with cmake: + +```bash +mkdir build +cd build +emcmake cmake .. +emmake make -j4 +``` + +To build one of the tests: + +```bash +cd test/ +emcc -O2 --js-opts 0 -g4 testdraw2.c -I../include ../build/.libs/libSDL2.a ../build/libSDL2_test.a -o a.html +``` + +## Building your app + +You need to compile with `emcc` instead of `gcc` or `clang` or whatever, but +mostly it uses the same command line arguments as Clang. + +Link against the SDL/build/.libs/libSDL2.a file you generated by building SDL, +link with `-sUSE_SDL=2` to use Emscripten's prepackaged SDL2 build. + +Usually you would produce a binary like this: + +```bash +gcc -o mygame mygame.c # or whatever +``` + +But for Emscripten, you want to output something else: + +```bash +emcc -o index.html mygame.c +``` + +This will produce several files...support Javascript and WebAssembly (.wasm) +files. The `-o index.html` will produce a simple HTML page that loads and +runs your app. You will (probably) eventually want to replace or customize +that file and do `-o index.js` instead to just build the code pieces. + +If you're working on a program of any serious size, you'll likely need to +link with `-sALLOW_MEMORY_GROWTH=1 -sMAXIMUM_MEMORY=1gb` to get access +to more memory. If using pthreads, you'll need the `-sMAXIMUM_MEMORY=1gb` +or the app will fail to start on iOS browsers, but this might be a bug that +goes away in the future. + + +## Data files + +Your game probably has data files. Here's how to access them. + +Filesystem access works like a Unix filesystem; you have a single directory +tree, possibly interpolated from several mounted locations, no drive letters, +'/' for a path separator. You can access them with standard file APIs like +open() or fopen() or SDL_RWops. You can read or write from the filesystem. + +By default, you probably have a "MEMFS" filesystem (all files are stored in +memory, but access to them is immediate and doesn't need to block). There are +other options, like "IDBFS" (files are stored in a local database, so they +don't need to be in RAM all the time and they can persist between runs of the +program, but access is not synchronous). You can mix and match these file +systems, mounting a MEMFS filesystem at one place and idbfs elsewhere, etc, +but that's beyond the scope of this document. Please refer to Emscripten's +[page on the topic](https://emscripten.org/docs/porting/files/file_systems_overview.html) +for more info. + +The _easiest_ (but not the best) way to get at your data files is to embed +them in the app itself. Emscripten's linker has support for automating this. + +```bash +emcc -o index.html loopwave.c --embed-file=../test/sample.wav@/sounds/sample.wav +``` + +This will pack ../test/sample.wav in your app, and make it available at +"/sounds/sample.wav" at runtime. Emscripten makes sure this data is available +before your main() function runs, and since it's in MEMFS, you can just +read it like you do on other platforms. `--embed-file` can also accept a +directory to pack an entire tree, and you can specify the argument multiple +times to pack unrelated things into the final installation. + +Note that this is absolutely the best approach if you have a few small +files to include and shouldn't worry about the issue further. However, if you +have hundreds of megabytes and/or thousands of files, this is not so great, +since the user will download it all every time they load your page, and it +all has to live in memory at runtime. + +[Emscripten's documentation on the matter](https://emscripten.org/docs/porting/files/packaging_files.html) +gives other options and details, and is worth a read. + + +## Debugging + +Debugging web apps is a mixed bag. You should compile and link with +`-gsource-map`, which embeds a ton of source-level debugging information into +the build, and make sure _the app source code is available on the web server_, +which is often a scary proposition for various reasons. + +When you debug from the browser's tools and hit a breakpoint, you can step +through the actual C/C++ source code, though, which can be nice. + +If you try debugging in Firefox and it doesn't work well for no apparent +reason, try Chrome, and vice-versa. These tools are still relatively new, +and improving all the time. + +SDL_Log() (or even plain old printf) will write to the Javascript console, +and honestly I find printf-style debugging to be easier than setting up a build +for proper debugging, so use whatever tools work best for you. + + +## Questions? + +Please give us feedback on this document at [the SDL bug tracker](https://github.com/libsdl-org/SDL/issues). +If something is wrong or unclear, we want to know! + + + diff --git a/vs/sdl2/docs/README-gdk.md b/vs/sdl2/docs/README-gdk.md index 6718a617729..7997c065ba4 100644 --- a/vs/sdl2/docs/README-gdk.md +++ b/vs/sdl2/docs/README-gdk.md @@ -1,176 +1,176 @@ -GDK -===== - -This port allows SDL applications to run via Microsoft's Game Development Kit (GDK). - -Windows (GDK) and Xbox One/Xbox Series (GDKX) are both supported and all the required code is included in this public SDL release. However, only licensed Xbox developers have access to the GDKX libraries which will allow you to build the Xbox targets. - - -Requirements ------------- - -* Microsoft Visual Studio 2022 (in theory, it should also work in 2017 or 2019, but this has not been tested) -* Microsoft GDK June 2022 or newer (public release [here](https://github.com/microsoft/GDK/releases/tag/June_2022)) -* For Xbox, you will need the corresponding GDKX version (licensed developers only) -* To publish a package or successfully authenticate a user, you will need to create an app id/configure services in Partner Center. However, for local testing purposes (without authenticating on Xbox Live), the identifiers used by the GDK test programs in the included solution will work. - - -Windows GDK Status ------- - -The Windows GDK port supports the full set of Win32 APIs, renderers, controllers, input devices, etc., as the normal Windows x64 build of SDL. - -* Additionally, the GDK port adds the following: - * Compile-time platform detection for SDL programs. The `__GDK__` is `#define`d on every GDK platform, and the `__WINGDK__` is `#define`d on Windows GDK, specifically. (This distinction exists because other GDK platforms support a smaller subset of functionality. This allows you to mark code for "any" GDK separate from Windows GDK.) - * GDK-specific setup: - * Initializing/uninitializing the game runtime, and initializing Xbox Live services - * Creating a global task queue and setting it as the default for the process. When running any async operations, passing in `NULL` as the task queue will make the task get added to the global task queue. - - * An implementation on `WinMain` that performs the above GDK setup (you should link against SDL2main.lib, as in Windows x64). If you are unable to do this, you can instead manually call `SDL_GDKRunApp` from your entry point, passing in your `SDL_main` function and `NULL` as the parameters. - * Global task queue callbacks are dispatched during `SDL_PumpEvents` (which is also called internally if using `SDL_PollEvent`). - * You can get the handle of the global task queue through `SDL_GDKGetTaskQueue`, if needed. When done with the queue, be sure to use `XTaskQueueCloseHandle` to decrement the reference count (otherwise it will cause a resource leak). - -* Single-player games have some additional features available: - * Call `SDL_GDKGetDefaultUser` to get the default XUserHandle pointer. - * `SDL_GetPrefPath` still works, but only for single-player titles. - - These functions mostly wrap around async APIs, and thus should be treated as synchronous alternatives. Also note that the single-player functions return on any OS errors, so be sure to validate the return values! - -* What doesn't work: - * Compilation with anything other than through the included Visual C++ solution file - -## VisualC-GDK Solution - -The included `VisualC-GDK/SDL.sln` solution includes the following targets for the Gaming.Desktop.x64 configuration: - -* SDL2 (DLL) - This is the typical SDL2.dll, but for Gaming.Desktop.x64. -* SDL2main (lib) - This contains a drop-in implementation of `WinMain` that is used as the entry point for GDK programs. -* tests/testgamecontroller - Standard SDL test program demonstrating controller functionality. -* tests/testgdk - GDK-specific test program that demonstrates using the global task queue to login a user into Xbox Live. - *NOTE*: As of the June 2022 GDK, you cannot test user logins without a valid Title ID and MSAAppId. You will need to manually change the identifiers in the `MicrosoftGame.config` to your valid IDs from Partner Center if you wish to test this. -* tests/testsprite2 - Standard SDL test program demonstrating sprite drawing functionality. - -If you set one of the test programs as a startup project, you can run it directly from Visual Studio. - -Windows GDK Setup, Detailed Steps ---------------------- - -These steps assume you already have a game using SDL that runs on Windows x64 along with a corresponding Visual Studio solution file for the x64 version. If you don't have this, it's easiest to use one of the test program vcxproj files in the `VisualC-GDK` directory as a starting point, though you will still need to do most of the steps below. - -### 1. Add a Gaming.Desktop.x64 Configuration ### - -In your game's existing Visual Studio Solution, go to Build > Configuration Manager. From the "Active solution platform" drop-down select "New...". From the drop-down list, select Gaming.Desktop.x64 and copy the settings from the x64 configuration. - -### 2. Build SDL2 and SDL2main for GDK ### - -Open `VisualC-GDK/SDL.sln` in Visual Studio, you need to build the SDL2 and SDL2main targets for the Gaming.Desktop.x64 platform (Release is recommended). You will need to copy/keep track of the `SDL2.dll`, `XCurl.dll` (which is output by Gaming.Desktop.x64), `SDL2.lib`, and `SDL2main.lib` output files for your game project. - -*Alternatively*, you could setup your solution file to instead reference the SDL2/SDL2main project file targets from the SDL source, and add those projects as a dependency. This would mean that SDL2 and SDL2main would both be built when your game is built. - -### 3. Configuring Project Settings ### - -While the Gaming.Desktop.x64 configuration sets most of the required settings, there are some additional items to configure for your game project under the Gaming.Desktop.x64 Configuration: - -* Under C/C++ > General > Additional Include Directories, make sure the `SDL/include` path is referenced -* Under Linker > General > Additional Library Directories, make sure to reference the path where the newly-built SDL2.lib and SDL2main.lib are -* Under Linker > Input > Additional Dependencies, you need the following: - * `SDL2.lib` - * `SDL2main.lib` (unless not using) - * `xgameruntime.lib` - * `../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib` -* Note that in general, the GDK libraries depend on the MSVC C/C++ runtime, so there is no way to remove this dependency from a GDK program that links against GDK. - -### 4. Setting up SDL_main ### - -Rather than using your own implementation of `WinMain`, it's recommended that you instead `#include "SDL_main.h"` and declare a standard main function. If you are unable to do this, you can instead manually call `SDL_GDKRunApp` from your entry point, passing in your `SDL_main` function and `NULL` as the parameters. - -### 5. Required DLLs ### - -The game will not launch in the debugger unless required DLLs are included in the directory that contains the game's .exe file. You need to make sure that the following files are copied into the directory: - -* Your SDL2.dll -* "$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.141.GDK.C.Thunks.dll" -* XCurl.dll - -You can either copy these in a post-build step, or you can add the dlls into the project and set its Configuration Properties > General > Item type to "Copy file," which will also copy them into the output directory. - -### 6. Setting up MicrosoftGame.config ### - -You can copy `VisualC-GDK/tests/testgdk/MicrosoftGame.config` and use that as a starting point in your project. Minimally, you will want to change the Executable Name attribute, the DefaultDisplayName, and the Description. - -This file must be copied into the same directory as the game's .exe file. As with the DLLs, you can either use a post-build step or the "Copy file" item type. - -For basic testing, you do not need to change anything else in `MicrosoftGame.config`. However, if you want to test any Xbox Live services (such as logging in users) _or_ publish a package, you will need to setup a Game app on Partner Center. - -Then, you need to set the following values to the values from Partner Center: - -* Identity tag - Name and Publisher attributes -* TitleId -* MSAAppId - -### 7. Adding Required Logos - -Several logo PNG files are required to be able to launch the game, even from the debugger. You can use the sample logos provided in `VisualC-GDK/logos`. As with the other files, they must be copied into the same directory as the game's .exe file. - - -### 8. Copying any Data Files ### - -When debugging GDK games, there is no way to specify a working directory. Therefore, any required game data must also be copied into the output directory, likely in a post-build step. - - -### 9. Build and Run from Visual Studio ### - -At this point, you should be able to build and run your game from the Visual Studio Debugger. If you get any linker errors, make sure you double-check that you referenced all the required libs. - -If you are testing Xbox Live functionality, it's likely you will need to change to the Sandbox for your title. To do this: - -1. Run "Desktop VS 2022 Gaming Command Prompt" from the Start Menu -2. Switch the sandbox name with: - `XblPCSandbox SANDBOX.#` -3. (To switch back to the retail sandbox): - `XblPCSandbox RETAIL` - -### 10. Packaging and Installing Locally - -You can use one of the test program's `PackageLayout.xml` as a starting point. Minimally, you will need to change the exe to the correct name and also reference any required game data. As with the other data files, it's easiest if you have this copy to the output directory, although it's not a requirement as you can specify relative paths to files. - -To create the package: - -1. Run "Desktop VS 2022 Gaming Command Prompt" from the Start Menu -2. `cd` to the directory containing the `PackageLayout.xml` with the correct paths (if you use the local path as in the sample package layout, this would be from your .exe output directory) -3. `mkdir Package` to create an output directory -4. To package the file into the `Package` directory, use: - `makepkg pack /f PackageLayout.xml /lt /d . /nogameos /pc /pd Package` -5. To install the package, use: - `wdapp install PACKAGENAME.msixvc` -6. Once the package is installed, you can run it from the start menu. -7. As with when running from Visual Studio, if you need to test any Xbox Live functionality you must switch to the correct sandbox. - -Xbox GDKX Setup ---------------------- -In general, the same process in the Windows GDK instructions work. There are just a few additional notes: -* For Xbox One consoles, use the Gaming.Xbox.XboxOne.x64 target -* For Xbox Series consoles, use the Gaming.Xbox.Scarlett.x64 target -* The Xbox One target sets the `__XBOXONE__` define and the Xbox Series target sets the `__XBOXSERIES__` define -* You don't need to link against the Xbox.Services Thunks lib nor include that dll in your package (it doesn't exist for Xbox) -* The shader blobs for Xbox are created in a pre-build step for the Xbox targets, rather than included in the source (due to NDA and version compatability reasons) -* To create a package, use: - `makepkg pack /f PackageLayout.xml /lt /d . /pd Package` -* To install the package, use: - `xbapp install [PACKAGE].xvc` -* For some reason, if you make changes that require SDL2.dll to build, and you are running through the debugger (instead of a package), you have to rebuild your .exe target for the debugger to recognize the dll has changed and needs to be transferred to the console again -* While there are successful releases of Xbox titles using this port, it is not as extensively tested as other targets - -Troubleshooting ---------------- - -#### Xbox Live Login does not work - -As of June 2022 GDK, you must have a valid Title Id and MSAAppId in order to test Xbox Live functionality such as user login. Make sure these are set correctly in the `MicrosoftGame.config`. This means that even testgdk will not let you login without setting these properties to valid values. - -Furthermore, confirm that your PC is set to the correct sandbox. - - -#### "The current user has already installed an unpackaged version of this app. A packaged version cannot replace this." error when installing - -Prior to June 2022 GDK, running from the Visual Studio debugger would still locally register the app (and it would appear on the start menu). To fix this, you have to uninstall it (it's simplest to right click on it from the start menu to uninstall it). +GDK +===== + +This port allows SDL applications to run via Microsoft's Game Development Kit (GDK). + +Windows (GDK) and Xbox One/Xbox Series (GDKX) are both supported and all the required code is included in this public SDL release. However, only licensed Xbox developers have access to the GDKX libraries which will allow you to build the Xbox targets. + + +Requirements +------------ + +* Microsoft Visual Studio 2022 (in theory, it should also work in 2017 or 2019, but this has not been tested) +* Microsoft GDK June 2022 or newer (public release [here](https://github.com/microsoft/GDK/releases/tag/June_2022)) +* For Xbox, you will need the corresponding GDKX version (licensed developers only) +* To publish a package or successfully authenticate a user, you will need to create an app id/configure services in Partner Center. However, for local testing purposes (without authenticating on Xbox Live), the identifiers used by the GDK test programs in the included solution will work. + + +Windows GDK Status +------ + +The Windows GDK port supports the full set of Win32 APIs, renderers, controllers, input devices, etc., as the normal Windows x64 build of SDL. + +* Additionally, the GDK port adds the following: + * Compile-time platform detection for SDL programs. The `__GDK__` is `#define`d on every GDK platform, and the `__WINGDK__` is `#define`d on Windows GDK, specifically. (This distinction exists because other GDK platforms support a smaller subset of functionality. This allows you to mark code for "any" GDK separate from Windows GDK.) + * GDK-specific setup: + * Initializing/uninitializing the game runtime, and initializing Xbox Live services + * Creating a global task queue and setting it as the default for the process. When running any async operations, passing in `NULL` as the task queue will make the task get added to the global task queue. + + * An implementation on `WinMain` that performs the above GDK setup (you should link against SDL2main.lib, as in Windows x64). If you are unable to do this, you can instead manually call `SDL_GDKRunApp` from your entry point, passing in your `SDL_main` function and `NULL` as the parameters. + * Global task queue callbacks are dispatched during `SDL_PumpEvents` (which is also called internally if using `SDL_PollEvent`). + * You can get the handle of the global task queue through `SDL_GDKGetTaskQueue`, if needed. When done with the queue, be sure to use `XTaskQueueCloseHandle` to decrement the reference count (otherwise it will cause a resource leak). + +* Single-player games have some additional features available: + * Call `SDL_GDKGetDefaultUser` to get the default XUserHandle pointer. + * `SDL_GetPrefPath` still works, but only for single-player titles. + + These functions mostly wrap around async APIs, and thus should be treated as synchronous alternatives. Also note that the single-player functions return on any OS errors, so be sure to validate the return values! + +* What doesn't work: + * Compilation with anything other than through the included Visual C++ solution file + +## VisualC-GDK Solution + +The included `VisualC-GDK/SDL.sln` solution includes the following targets for the Gaming.Desktop.x64 configuration: + +* SDL2 (DLL) - This is the typical SDL2.dll, but for Gaming.Desktop.x64. +* SDL2main (lib) - This contains a drop-in implementation of `WinMain` that is used as the entry point for GDK programs. +* tests/testgamecontroller - Standard SDL test program demonstrating controller functionality. +* tests/testgdk - GDK-specific test program that demonstrates using the global task queue to login a user into Xbox Live. + *NOTE*: As of the June 2022 GDK, you cannot test user logins without a valid Title ID and MSAAppId. You will need to manually change the identifiers in the `MicrosoftGame.config` to your valid IDs from Partner Center if you wish to test this. +* tests/testsprite2 - Standard SDL test program demonstrating sprite drawing functionality. + +If you set one of the test programs as a startup project, you can run it directly from Visual Studio. + +Windows GDK Setup, Detailed Steps +--------------------- + +These steps assume you already have a game using SDL that runs on Windows x64 along with a corresponding Visual Studio solution file for the x64 version. If you don't have this, it's easiest to use one of the test program vcxproj files in the `VisualC-GDK` directory as a starting point, though you will still need to do most of the steps below. + +### 1. Add a Gaming.Desktop.x64 Configuration ### + +In your game's existing Visual Studio Solution, go to Build > Configuration Manager. From the "Active solution platform" drop-down select "New...". From the drop-down list, select Gaming.Desktop.x64 and copy the settings from the x64 configuration. + +### 2. Build SDL2 and SDL2main for GDK ### + +Open `VisualC-GDK/SDL.sln` in Visual Studio, you need to build the SDL2 and SDL2main targets for the Gaming.Desktop.x64 platform (Release is recommended). You will need to copy/keep track of the `SDL2.dll`, `XCurl.dll` (which is output by Gaming.Desktop.x64), `SDL2.lib`, and `SDL2main.lib` output files for your game project. + +*Alternatively*, you could setup your solution file to instead reference the SDL2/SDL2main project file targets from the SDL source, and add those projects as a dependency. This would mean that SDL2 and SDL2main would both be built when your game is built. + +### 3. Configuring Project Settings ### + +While the Gaming.Desktop.x64 configuration sets most of the required settings, there are some additional items to configure for your game project under the Gaming.Desktop.x64 Configuration: + +* Under C/C++ > General > Additional Include Directories, make sure the `SDL/include` path is referenced +* Under Linker > General > Additional Library Directories, make sure to reference the path where the newly-built SDL2.lib and SDL2main.lib are +* Under Linker > Input > Additional Dependencies, you need the following: + * `SDL2.lib` + * `SDL2main.lib` (unless not using) + * `xgameruntime.lib` + * `../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib` +* Note that in general, the GDK libraries depend on the MSVC C/C++ runtime, so there is no way to remove this dependency from a GDK program that links against GDK. + +### 4. Setting up SDL_main ### + +Rather than using your own implementation of `WinMain`, it's recommended that you instead `#include "SDL_main.h"` and declare a standard main function. If you are unable to do this, you can instead manually call `SDL_GDKRunApp` from your entry point, passing in your `SDL_main` function and `NULL` as the parameters. + +### 5. Required DLLs ### + +The game will not launch in the debugger unless required DLLs are included in the directory that contains the game's .exe file. You need to make sure that the following files are copied into the directory: + +* Your SDL2.dll +* "$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.141.GDK.C.Thunks.dll" +* XCurl.dll + +You can either copy these in a post-build step, or you can add the dlls into the project and set its Configuration Properties > General > Item type to "Copy file," which will also copy them into the output directory. + +### 6. Setting up MicrosoftGame.config ### + +You can copy `VisualC-GDK/tests/testgdk/MicrosoftGame.config` and use that as a starting point in your project. Minimally, you will want to change the Executable Name attribute, the DefaultDisplayName, and the Description. + +This file must be copied into the same directory as the game's .exe file. As with the DLLs, you can either use a post-build step or the "Copy file" item type. + +For basic testing, you do not need to change anything else in `MicrosoftGame.config`. However, if you want to test any Xbox Live services (such as logging in users) _or_ publish a package, you will need to setup a Game app on Partner Center. + +Then, you need to set the following values to the values from Partner Center: + +* Identity tag - Name and Publisher attributes +* TitleId +* MSAAppId + +### 7. Adding Required Logos + +Several logo PNG files are required to be able to launch the game, even from the debugger. You can use the sample logos provided in `VisualC-GDK/logos`. As with the other files, they must be copied into the same directory as the game's .exe file. + + +### 8. Copying any Data Files ### + +When debugging GDK games, there is no way to specify a working directory. Therefore, any required game data must also be copied into the output directory, likely in a post-build step. + + +### 9. Build and Run from Visual Studio ### + +At this point, you should be able to build and run your game from the Visual Studio Debugger. If you get any linker errors, make sure you double-check that you referenced all the required libs. + +If you are testing Xbox Live functionality, it's likely you will need to change to the Sandbox for your title. To do this: + +1. Run "Desktop VS 2022 Gaming Command Prompt" from the Start Menu +2. Switch the sandbox name with: + `XblPCSandbox SANDBOX.#` +3. (To switch back to the retail sandbox): + `XblPCSandbox RETAIL` + +### 10. Packaging and Installing Locally + +You can use one of the test program's `PackageLayout.xml` as a starting point. Minimally, you will need to change the exe to the correct name and also reference any required game data. As with the other data files, it's easiest if you have this copy to the output directory, although it's not a requirement as you can specify relative paths to files. + +To create the package: + +1. Run "Desktop VS 2022 Gaming Command Prompt" from the Start Menu +2. `cd` to the directory containing the `PackageLayout.xml` with the correct paths (if you use the local path as in the sample package layout, this would be from your .exe output directory) +3. `mkdir Package` to create an output directory +4. To package the file into the `Package` directory, use: + `makepkg pack /f PackageLayout.xml /lt /d . /nogameos /pc /pd Package` +5. To install the package, use: + `wdapp install PACKAGENAME.msixvc` +6. Once the package is installed, you can run it from the start menu. +7. As with when running from Visual Studio, if you need to test any Xbox Live functionality you must switch to the correct sandbox. + +Xbox GDKX Setup +--------------------- +In general, the same process in the Windows GDK instructions work. There are just a few additional notes: +* For Xbox One consoles, use the Gaming.Xbox.XboxOne.x64 target +* For Xbox Series consoles, use the Gaming.Xbox.Scarlett.x64 target +* The Xbox One target sets the `__XBOXONE__` define and the Xbox Series target sets the `__XBOXSERIES__` define +* You don't need to link against the Xbox.Services Thunks lib nor include that dll in your package (it doesn't exist for Xbox) +* The shader blobs for Xbox are created in a pre-build step for the Xbox targets, rather than included in the source (due to NDA and version compatability reasons) +* To create a package, use: + `makepkg pack /f PackageLayout.xml /lt /d . /pd Package` +* To install the package, use: + `xbapp install [PACKAGE].xvc` +* For some reason, if you make changes that require SDL2.dll to build, and you are running through the debugger (instead of a package), you have to rebuild your .exe target for the debugger to recognize the dll has changed and needs to be transferred to the console again +* While there are successful releases of Xbox titles using this port, it is not as extensively tested as other targets + +Troubleshooting +--------------- + +#### Xbox Live Login does not work + +As of June 2022 GDK, you must have a valid Title Id and MSAAppId in order to test Xbox Live functionality such as user login. Make sure these are set correctly in the `MicrosoftGame.config`. This means that even testgdk will not let you login without setting these properties to valid values. + +Furthermore, confirm that your PC is set to the correct sandbox. + + +#### "The current user has already installed an unpackaged version of this app. A packaged version cannot replace this." error when installing + +Prior to June 2022 GDK, running from the Visual Studio debugger would still locally register the app (and it would appear on the start menu). To fix this, you have to uninstall it (it's simplest to right click on it from the start menu to uninstall it). diff --git a/vs/sdl2/docs/README-gesture.md b/vs/sdl2/docs/README-gesture.md index 69a66ad9f89..ee6a0c541a4 100644 --- a/vs/sdl2/docs/README-gesture.md +++ b/vs/sdl2/docs/README-gesture.md @@ -1,71 +1,71 @@ -Dollar Gestures -=========================================================================== -SDL provides an implementation of the $1 gesture recognition system. This allows for recording, saving, loading, and performing single stroke gestures. - -Gestures can be performed with any number of fingers (the centroid of the fingers must follow the path of the gesture), but the number of fingers must be constant (a finger cannot go down in the middle of a gesture). The path of a gesture is considered the path from the time when the final finger went down, to the first time any finger comes up. - -Dollar gestures are assigned an Id based on a hash function. This is guaranteed to remain constant for a given gesture. There is a (small) chance that two different gestures will be assigned the same ID. In this case, simply re-recording one of the gestures should result in a different ID. - -Recording: ----------- -To begin recording on a touch device call: -SDL_RecordGesture(SDL_TouchID touchId), where touchId is the id of the touch device you wish to record on, or -1 to record on all connected devices. - -Recording terminates as soon as a finger comes up. Recording is acknowledged by an SDL_DOLLARRECORD event. -A SDL_DOLLARRECORD event is a dgesture with the following fields: - -* event.dgesture.touchId - the Id of the touch used to record the gesture. -* event.dgesture.gestureId - the unique id of the recorded gesture. - - -Performing: ------------ -As long as there is a dollar gesture assigned to a touch, every finger-up event will also cause an SDL_DOLLARGESTURE event with the following fields: - -* event.dgesture.touchId - the Id of the touch which performed the gesture. -* event.dgesture.gestureId - the unique id of the closest gesture to the performed stroke. -* event.dgesture.error - the difference between the gesture template and the actual performed gesture. Lower error is a better match. -* event.dgesture.numFingers - the number of fingers used to draw the stroke. - -Most programs will want to define an appropriate error threshold and check to be sure that the error of a gesture is not abnormally high (an indicator that no gesture was performed). - - - -Saving: -------- -To save a template, call SDL_SaveDollarTemplate(gestureId, dst) where gestureId is the id of the gesture you want to save, and dst is an SDL_RWops pointer to the file where the gesture will be stored. - -To save all currently loaded templates, call SDL_SaveAllDollarTemplates(dst) where dst is an SDL_RWops pointer to the file where the gesture will be stored. - -Both functions return the number of gestures successfully saved. - - -Loading: --------- -To load templates from a file, call SDL_LoadDollarTemplates(touchId,src) where touchId is the id of the touch to load to (or -1 to load to all touch devices), and src is an SDL_RWops pointer to a gesture save file. - -SDL_LoadDollarTemplates returns the number of templates successfully loaded. - - - -=========================================================================== -Multi Gestures -=========================================================================== -SDL provides simple support for pinch/rotate/swipe gestures. -Every time a finger is moved an SDL_MULTIGESTURE event is sent with the following fields: - -* event.mgesture.touchId - the Id of the touch on which the gesture was performed. -* event.mgesture.x - the normalized x coordinate of the gesture. (0..1) -* event.mgesture.y - the normalized y coordinate of the gesture. (0..1) -* event.mgesture.dTheta - the amount that the fingers rotated during this motion. -* event.mgesture.dDist - the amount that the fingers pinched during this motion. -* event.mgesture.numFingers - the number of fingers used in the gesture. - - -=========================================================================== -Notes -=========================================================================== -For a complete example see test/testgesture.c - -Please direct questions/comments to: - jim.tla+sdl_touch@gmail.com +Dollar Gestures +=========================================================================== +SDL provides an implementation of the $1 gesture recognition system. This allows for recording, saving, loading, and performing single stroke gestures. + +Gestures can be performed with any number of fingers (the centroid of the fingers must follow the path of the gesture), but the number of fingers must be constant (a finger cannot go down in the middle of a gesture). The path of a gesture is considered the path from the time when the final finger went down, to the first time any finger comes up. + +Dollar gestures are assigned an Id based on a hash function. This is guaranteed to remain constant for a given gesture. There is a (small) chance that two different gestures will be assigned the same ID. In this case, simply re-recording one of the gestures should result in a different ID. + +Recording: +---------- +To begin recording on a touch device call: +SDL_RecordGesture(SDL_TouchID touchId), where touchId is the id of the touch device you wish to record on, or -1 to record on all connected devices. + +Recording terminates as soon as a finger comes up. Recording is acknowledged by an SDL_DOLLARRECORD event. +A SDL_DOLLARRECORD event is a dgesture with the following fields: + +* event.dgesture.touchId - the Id of the touch used to record the gesture. +* event.dgesture.gestureId - the unique id of the recorded gesture. + + +Performing: +----------- +As long as there is a dollar gesture assigned to a touch, every finger-up event will also cause an SDL_DOLLARGESTURE event with the following fields: + +* event.dgesture.touchId - the Id of the touch which performed the gesture. +* event.dgesture.gestureId - the unique id of the closest gesture to the performed stroke. +* event.dgesture.error - the difference between the gesture template and the actual performed gesture. Lower error is a better match. +* event.dgesture.numFingers - the number of fingers used to draw the stroke. + +Most programs will want to define an appropriate error threshold and check to be sure that the error of a gesture is not abnormally high (an indicator that no gesture was performed). + + + +Saving: +------- +To save a template, call SDL_SaveDollarTemplate(gestureId, dst) where gestureId is the id of the gesture you want to save, and dst is an SDL_RWops pointer to the file where the gesture will be stored. + +To save all currently loaded templates, call SDL_SaveAllDollarTemplates(dst) where dst is an SDL_RWops pointer to the file where the gesture will be stored. + +Both functions return the number of gestures successfully saved. + + +Loading: +-------- +To load templates from a file, call SDL_LoadDollarTemplates(touchId,src) where touchId is the id of the touch to load to (or -1 to load to all touch devices), and src is an SDL_RWops pointer to a gesture save file. + +SDL_LoadDollarTemplates returns the number of templates successfully loaded. + + + +=========================================================================== +Multi Gestures +=========================================================================== +SDL provides simple support for pinch/rotate/swipe gestures. +Every time a finger is moved an SDL_MULTIGESTURE event is sent with the following fields: + +* event.mgesture.touchId - the Id of the touch on which the gesture was performed. +* event.mgesture.x - the normalized x coordinate of the gesture. (0..1) +* event.mgesture.y - the normalized y coordinate of the gesture. (0..1) +* event.mgesture.dTheta - the amount that the fingers rotated during this motion. +* event.mgesture.dDist - the amount that the fingers pinched during this motion. +* event.mgesture.numFingers - the number of fingers used in the gesture. + + +=========================================================================== +Notes +=========================================================================== +For a complete example see test/testgesture.c + +Please direct questions/comments to: + jim.tla+sdl_touch@gmail.com diff --git a/vs/sdl2/docs/README-git.md b/vs/sdl2/docs/README-git.md index fd12fd9f654..3f03488ae82 100644 --- a/vs/sdl2/docs/README-git.md +++ b/vs/sdl2/docs/README-git.md @@ -1,19 +1,19 @@ -git -========= - -The latest development version of SDL is available via git. -Git allows you to get up-to-the-minute fixes and enhancements; -as a developer works on a source tree, you can use "git" to mirror that -source tree instead of waiting for an official release. Please look -at the Git website ( https://git-scm.com/ ) for more -information on using git, where you can also download software for -macOS, Windows, and Unix systems. - - git clone https://github.com/libsdl-org/SDL - -If you are building SDL via configure, you will need to run autogen.sh -before running configure. - -There is a web interface to the Git repository at: - http://github.com/libsdl-org/SDL/ - +git +========= + +The latest development version of SDL is available via git. +Git allows you to get up-to-the-minute fixes and enhancements; +as a developer works on a source tree, you can use "git" to mirror that +source tree instead of waiting for an official release. Please look +at the Git website ( https://git-scm.com/ ) for more +information on using git, where you can also download software for +macOS, Windows, and Unix systems. + + git clone https://github.com/libsdl-org/SDL + +If you are building SDL via configure, you will need to run autogen.sh +before running configure. + +There is a web interface to the Git repository at: + http://github.com/libsdl-org/SDL/ + diff --git a/vs/sdl2/docs/README-hg.md b/vs/sdl2/docs/README-hg.md index 1b39017855d..4e35683bd6f 100644 --- a/vs/sdl2/docs/README-hg.md +++ b/vs/sdl2/docs/README-hg.md @@ -1,4 +1,4 @@ -We are no longer hosted in Mercurial. Please see README-git.md for details. - -Thanks! - +We are no longer hosted in Mercurial. Please see README-git.md for details. + +Thanks! + diff --git a/vs/sdl2/docs/README-ios.md b/vs/sdl2/docs/README-ios.md index 94c24b50337..01e595b654c 100644 --- a/vs/sdl2/docs/README-ios.md +++ b/vs/sdl2/docs/README-ios.md @@ -1,307 +1,307 @@ -iOS -====== - -Building the Simple DirectMedia Layer for iOS 9.0+ -============================================================================== - -Requirements: Mac OS X 10.9 or later and the iOS 9.0 or newer SDK. - -Instructions: - -1. Open SDL.xcodeproj (located in Xcode/SDL) in Xcode. -2. Select your desired target, and hit build. - - -Using the Simple DirectMedia Layer for iOS -============================================================================== - -1. Run Xcode and create a new project using the iOS Game template, selecting the Objective C language and Metal game technology. -2. In the main view, delete all files except for Assets and LaunchScreen -3. Right click the project in the main view, select "Add Files...", and add the SDL project, Xcode/SDL/SDL.xcodeproj -4. Select the project in the main view, go to the "Info" tab and under "Custom iOS Target Properties" remove the line "Main storyboard file base name" -5. Select the project in the main view, go to the "Build Settings" tab, select "All", and edit "Header Search Path" and drag over the SDL "Public Headers" folder from the left -6. Select the project in the main view, go to the "Build Phases" tab, select "Link Binary With Libraries", and add SDL2.framework from "Framework-iOS" -7. Select the project in the main view, go to the "General" tab, scroll down to "Frameworks, Libraries, and Embedded Content", and select "Embed & Sign" for the SDL library. -8. In the main view, expand SDL -> Library Source -> main -> uikit and drag SDL_uikit_main.c into your game files -9. Add the source files that you would normally have for an SDL program, making sure to have #include "SDL.h" at the top of the file containing your main() function. -10. Add any assets that your application needs. -11. Enjoy! - - -TODO: Add information regarding App Store requirements such as icons, etc. - - -Notes -- Retina / High-DPI and window sizes -============================================================================== - -Window and display mode sizes in SDL are in "screen coordinates" (or "points", -in Apple's terminology) rather than in pixels. On iOS this means that a window -created on an iPhone 6 will have a size in screen coordinates of 375 x 667, -rather than a size in pixels of 750 x 1334. All iOS apps are expected to -size their content based on screen coordinates / points rather than pixels, -as this allows different iOS devices to have different pixel densities -(Retina versus non-Retina screens, etc.) without apps caring too much. - -By default SDL will not use the full pixel density of the screen on -Retina/high-dpi capable devices. Use the SDL_WINDOW_ALLOW_HIGHDPI flag when -creating your window to enable high-dpi support. - -When high-dpi support is enabled, SDL_GetWindowSize() and display mode sizes -will still be in "screen coordinates" rather than pixels, but the window will -have a much greater pixel density when the device supports it, and the -SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() functions (depending on -whether raw OpenGL or the SDL_Render API is used) can be queried to determine -the size in pixels of the drawable screen framebuffer. - -Some OpenGL ES functions such as glViewport expect sizes in pixels rather than -sizes in screen coordinates. When doing 2D rendering with OpenGL ES, an -orthographic projection matrix using the size in screen coordinates -(SDL_GetWindowSize()) can be used in order to display content at the same scale -no matter whether a Retina device is used or not. - - -Notes -- Application events -============================================================================== - -On iOS the application goes through a fixed life cycle and you will get -notifications of state changes via application events. When these events -are delivered you must handle them in an event callback because the OS may -not give you any processing time after the events are delivered. - -e.g. - - int HandleAppEvents(void *userdata, SDL_Event *event) - { - switch (event->type) - { - case SDL_APP_TERMINATING: - /* Terminate the app. - Shut everything down before returning from this function. - */ - return 0; - case SDL_APP_LOWMEMORY: - /* You will get this when your app is paused and iOS wants more memory. - Release as much memory as possible. - */ - return 0; - case SDL_APP_WILLENTERBACKGROUND: - /* Prepare your app to go into the background. Stop loops, etc. - This gets called when the user hits the home button, or gets a call. - */ - return 0; - case SDL_APP_DIDENTERBACKGROUND: - /* This will get called if the user accepted whatever sent your app to the background. - If the user got a phone call and canceled it, you'll instead get an SDL_APP_DIDENTERFOREGROUND event and restart your loops. - When you get this, you have 5 seconds to save all your state or the app will be terminated. - Your app is NOT active at this point. - */ - return 0; - case SDL_APP_WILLENTERFOREGROUND: - /* This call happens when your app is coming back to the foreground. - Restore all your state here. - */ - return 0; - case SDL_APP_DIDENTERFOREGROUND: - /* Restart your loops here. - Your app is interactive and getting CPU again. - */ - return 0; - default: - /* No special processing, add it to the event queue */ - return 1; - } - } - - int main(int argc, char *argv[]) - { - SDL_SetEventFilter(HandleAppEvents, NULL); - - ... run your main loop - - return 0; - } - - -Notes -- Accelerometer as Joystick -============================================================================== - -SDL for iPhone supports polling the built in accelerometer as a joystick device. For an example on how to do this, see the accelerometer.c in the demos directory. - -The main thing to note when using the accelerometer with SDL is that while the iPhone natively reports accelerometer as floating point values in units of g-force, SDL_JoystickGetAxis() reports joystick values as signed integers. Hence, in order to convert between the two, some clamping and scaling is necessary on the part of the iPhone SDL joystick driver. To convert SDL_JoystickGetAxis() reported values BACK to units of g-force, simply multiply the values by SDL_IPHONE_MAX_GFORCE / 0x7FFF. - - -Notes -- OpenGL ES -============================================================================== - -Your SDL application for iOS uses OpenGL ES for video by default. - -OpenGL ES for iOS supports several display pixel formats, such as RGBA8 and RGB565, which provide a 32 bit and 16 bit color buffer respectively. By default, the implementation uses RGB565, but you may use RGBA8 by setting each color component to 8 bits in SDL_GL_SetAttribute(). - -If your application doesn't use OpenGL's depth buffer, you may find significant performance improvement by setting SDL_GL_DEPTH_SIZE to 0. - -Finally, if your application completely redraws the screen each frame, you may find significant performance improvement by setting the attribute SDL_GL_RETAINED_BACKING to 0. - -OpenGL ES on iOS doesn't use the traditional system-framebuffer setup provided in other operating systems. Special care must be taken because of this: - -- The drawable Renderbuffer must be bound to the GL_RENDERBUFFER binding point when SDL_GL_SwapWindow() is called. -- The drawable Framebuffer Object must be bound while rendering to the screen and when SDL_GL_SwapWindow() is called. -- If multisample antialiasing (MSAA) is used and glReadPixels is used on the screen, the drawable framebuffer must be resolved to the MSAA resolve framebuffer (via glBlitFramebuffer or glResolveMultisampleFramebufferAPPLE), and the MSAA resolve framebuffer must be bound to the GL_READ_FRAMEBUFFER binding point, before glReadPixels is called. - -The above objects can be obtained via SDL_GetWindowWMInfo() (in SDL_syswm.h). - - -Notes -- Keyboard -============================================================================== - -The SDL keyboard API has been extended to support on-screen keyboards: - -void SDL_StartTextInput() - -- enables text events and reveals the onscreen keyboard. - -void SDL_StopTextInput() - -- disables text events and hides the onscreen keyboard. - -SDL_bool SDL_IsTextInputActive() - -- returns whether or not text events are enabled (and the onscreen keyboard is visible) - - -Notes -- Mouse -============================================================================== - -iOS now supports Bluetooth mice on iPad, but by default will provide the mouse input as touch. In order for SDL to see the real mouse events, you should set the key UIApplicationSupportsIndirectInputEvents to true in your Info.plist - - -Notes -- Reading and Writing files -============================================================================== - -Each application installed on iPhone resides in a sandbox which includes its own Application Home directory. Your application may not access files outside this directory. - -Once your application is installed its directory tree looks like: - - MySDLApp Home/ - MySDLApp.app - Documents/ - Library/ - Preferences/ - tmp/ - -When your SDL based iPhone application starts up, it sets the working directory to the main bundle (MySDLApp Home/MySDLApp.app), where your application resources are stored. You cannot write to this directory. Instead, I advise you to write document files to "../Documents/" and preferences to "../Library/Preferences". - -More information on this subject is available here: -http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html - - -Notes -- xcFramework -============================================================================== - -The SDL.xcodeproj file now includes a target to build SDL2.xcframework. An xcframework is a new (Xcode 11) uber-framework which can handle any combination of processor type and target OS platform. - -In the past, iOS devices were always an ARM variant processor, and the simulator was always i386 or x86_64, and thus libraries could be combined into a single framework for both simulator and device. With the introduction of the Apple Silicon ARM-based machines, regular frameworks would collide as CPU type was no longer sufficient to differentiate the platform. So Apple created the new xcframework library package. - -The xcframework target builds into a Products directory alongside the SDL.xcodeproj file, as SDL2.xcframework. This can be brought in to any iOS project and will function properly for both simulator and device, no matter their CPUs. Note that Intel Macs cannot cross-compile for Apple Silicon Macs. If you need AS compatibility, perform this build on an Apple Silicon Mac. - -This target requires Xcode 11 or later. The target will simply fail to build if attempted on older Xcodes. - -In addition, on Apple platforms, main() cannot be in a dynamically loaded library. This means that iOS apps which used the statically-linked libSDL2.lib and now link with the xcframwork will need to define their own main() to call SDL_UIKitRunApp(), like this: - -#ifndef SDL_MAIN_HANDLED -#ifdef main -#undef main -#endif - -int -main(int argc, char *argv[]) -{ - return SDL_UIKitRunApp(argc, argv, SDL_main); -} -#endif /* !SDL_MAIN_HANDLED */ - -Using an xcFramework is similar to using a regular framework. However, issues have been seen with the build system not seeing the headers in the xcFramework. To remedy this, add the path to the xcFramework in your app's target ==> Build Settings ==> Framework Search Paths and mark it recursive (this is critical). Also critical is to remove "*.framework" from Build Settings ==> Sub-Directories to Exclude in Recursive Searches. Clean the build folder, and on your next build the build system should be able to see any of these in your code, as expected: - -#include "SDL_main.h" -#include -#include - - -Notes -- iPhone SDL limitations -============================================================================== - -Windows: - Full-size, single window applications only. You cannot create multi-window SDL applications for iPhone OS. The application window will fill the display, though you have the option of turning on or off the menu-bar (pass SDL_CreateWindow() the flag SDL_WINDOW_BORDERLESS). - -Textures: - The optimal texture formats on iOS are SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, and SDL_PIXELFORMAT_RGB24 pixel formats. - -Loading Shared Objects: - This is disabled by default since it seems to break the terms of the iOS SDK agreement for iOS versions prior to iOS 8. It can be re-enabled in SDL_config_iphoneos.h. - - -Notes -- CoreBluetooth.framework -============================================================================== - -SDL_JOYSTICK_HIDAPI is disabled by default. It can give you access to a lot -more game controller devices, but it requires permission from the user before -your app will be able to talk to the Bluetooth hardware. "Made For iOS" -branded controllers do not need this as we don't have to speak to them -directly with raw bluetooth, so many apps can live without this. - -You'll need to link with CoreBluetooth.framework and add something like this -to your Info.plist: - -NSBluetoothPeripheralUsageDescription -MyApp would like to remain connected to nearby bluetooth Game Controllers and Game Pads even when you're not using the app. - - -Game Center -============================================================================== - -Game Center integration might require that you break up your main loop in order to yield control back to the system. In other words, instead of running an endless main loop, you run each frame in a callback function, using: - - int SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); - -This will set up the given function to be called back on the animation callback, and then you have to return from main() to let the Cocoa event loop run. - -e.g. - - extern "C" - void ShowFrame(void*) - { - ... do event handling, frame logic and rendering ... - } - - int main(int argc, char *argv[]) - { - ... initialize game ... - - #ifdef __IPHONEOS__ - // Initialize the Game Center for scoring and matchmaking - InitGameCenter(); - - // Set up the game to run in the window animation callback on iOS - // so that Game Center and so forth works correctly. - SDL_iPhoneSetAnimationCallback(window, 1, ShowFrame, NULL); - #else - while ( running ) { - ShowFrame(0); - DelayFrame(); - } - #endif - return 0; - } - - -Deploying to older versions of iOS -============================================================================== - -SDL supports deploying to older versions of iOS than are supported by the latest version of Xcode, all the way back to iOS 8.0 - -In order to do that you need to download an older version of Xcode: -https://developer.apple.com/download/more/?name=Xcode - -Open the package contents of the older Xcode and your newer version of Xcode and copy over the folders in Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport - -Then open the file Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/SDKSettings.plist and add the versions of iOS you want to deploy to the key Root/DefaultProperties/DEPLOYMENT_TARGET_SUGGESTED_VALUES - -Open your project and set your deployment target to the desired version of iOS - -Finally, remove GameController from the list of frameworks linked by your application and edit the build settings for "Other Linker Flags" and add -weak_framework GameController +iOS +====== + +Building the Simple DirectMedia Layer for iOS 9.0+ +============================================================================== + +Requirements: Mac OS X 10.9 or later and the iOS 9.0 or newer SDK. + +Instructions: + +1. Open SDL.xcodeproj (located in Xcode/SDL) in Xcode. +2. Select your desired target, and hit build. + + +Using the Simple DirectMedia Layer for iOS +============================================================================== + +1. Run Xcode and create a new project using the iOS Game template, selecting the Objective C language and Metal game technology. +2. In the main view, delete all files except for Assets and LaunchScreen +3. Right click the project in the main view, select "Add Files...", and add the SDL project, Xcode/SDL/SDL.xcodeproj +4. Select the project in the main view, go to the "Info" tab and under "Custom iOS Target Properties" remove the line "Main storyboard file base name" +5. Select the project in the main view, go to the "Build Settings" tab, select "All", and edit "Header Search Path" and drag over the SDL "Public Headers" folder from the left +6. Select the project in the main view, go to the "Build Phases" tab, select "Link Binary With Libraries", and add SDL2.framework from "Framework-iOS" +7. Select the project in the main view, go to the "General" tab, scroll down to "Frameworks, Libraries, and Embedded Content", and select "Embed & Sign" for the SDL library. +8. In the main view, expand SDL -> Library Source -> main -> uikit and drag SDL_uikit_main.c into your game files +9. Add the source files that you would normally have for an SDL program, making sure to have #include "SDL.h" at the top of the file containing your main() function. +10. Add any assets that your application needs. +11. Enjoy! + + +TODO: Add information regarding App Store requirements such as icons, etc. + + +Notes -- Retina / High-DPI and window sizes +============================================================================== + +Window and display mode sizes in SDL are in "screen coordinates" (or "points", +in Apple's terminology) rather than in pixels. On iOS this means that a window +created on an iPhone 6 will have a size in screen coordinates of 375 x 667, +rather than a size in pixels of 750 x 1334. All iOS apps are expected to +size their content based on screen coordinates / points rather than pixels, +as this allows different iOS devices to have different pixel densities +(Retina versus non-Retina screens, etc.) without apps caring too much. + +By default SDL will not use the full pixel density of the screen on +Retina/high-dpi capable devices. Use the SDL_WINDOW_ALLOW_HIGHDPI flag when +creating your window to enable high-dpi support. + +When high-dpi support is enabled, SDL_GetWindowSize() and display mode sizes +will still be in "screen coordinates" rather than pixels, but the window will +have a much greater pixel density when the device supports it, and the +SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() functions (depending on +whether raw OpenGL or the SDL_Render API is used) can be queried to determine +the size in pixels of the drawable screen framebuffer. + +Some OpenGL ES functions such as glViewport expect sizes in pixels rather than +sizes in screen coordinates. When doing 2D rendering with OpenGL ES, an +orthographic projection matrix using the size in screen coordinates +(SDL_GetWindowSize()) can be used in order to display content at the same scale +no matter whether a Retina device is used or not. + + +Notes -- Application events +============================================================================== + +On iOS the application goes through a fixed life cycle and you will get +notifications of state changes via application events. When these events +are delivered you must handle them in an event callback because the OS may +not give you any processing time after the events are delivered. + +e.g. + + int HandleAppEvents(void *userdata, SDL_Event *event) + { + switch (event->type) + { + case SDL_APP_TERMINATING: + /* Terminate the app. + Shut everything down before returning from this function. + */ + return 0; + case SDL_APP_LOWMEMORY: + /* You will get this when your app is paused and iOS wants more memory. + Release as much memory as possible. + */ + return 0; + case SDL_APP_WILLENTERBACKGROUND: + /* Prepare your app to go into the background. Stop loops, etc. + This gets called when the user hits the home button, or gets a call. + */ + return 0; + case SDL_APP_DIDENTERBACKGROUND: + /* This will get called if the user accepted whatever sent your app to the background. + If the user got a phone call and canceled it, you'll instead get an SDL_APP_DIDENTERFOREGROUND event and restart your loops. + When you get this, you have 5 seconds to save all your state or the app will be terminated. + Your app is NOT active at this point. + */ + return 0; + case SDL_APP_WILLENTERFOREGROUND: + /* This call happens when your app is coming back to the foreground. + Restore all your state here. + */ + return 0; + case SDL_APP_DIDENTERFOREGROUND: + /* Restart your loops here. + Your app is interactive and getting CPU again. + */ + return 0; + default: + /* No special processing, add it to the event queue */ + return 1; + } + } + + int main(int argc, char *argv[]) + { + SDL_SetEventFilter(HandleAppEvents, NULL); + + ... run your main loop + + return 0; + } + + +Notes -- Accelerometer as Joystick +============================================================================== + +SDL for iPhone supports polling the built in accelerometer as a joystick device. For an example on how to do this, see the accelerometer.c in the demos directory. + +The main thing to note when using the accelerometer with SDL is that while the iPhone natively reports accelerometer as floating point values in units of g-force, SDL_JoystickGetAxis() reports joystick values as signed integers. Hence, in order to convert between the two, some clamping and scaling is necessary on the part of the iPhone SDL joystick driver. To convert SDL_JoystickGetAxis() reported values BACK to units of g-force, simply multiply the values by SDL_IPHONE_MAX_GFORCE / 0x7FFF. + + +Notes -- OpenGL ES +============================================================================== + +Your SDL application for iOS uses OpenGL ES for video by default. + +OpenGL ES for iOS supports several display pixel formats, such as RGBA8 and RGB565, which provide a 32 bit and 16 bit color buffer respectively. By default, the implementation uses RGB565, but you may use RGBA8 by setting each color component to 8 bits in SDL_GL_SetAttribute(). + +If your application doesn't use OpenGL's depth buffer, you may find significant performance improvement by setting SDL_GL_DEPTH_SIZE to 0. + +Finally, if your application completely redraws the screen each frame, you may find significant performance improvement by setting the attribute SDL_GL_RETAINED_BACKING to 0. + +OpenGL ES on iOS doesn't use the traditional system-framebuffer setup provided in other operating systems. Special care must be taken because of this: + +- The drawable Renderbuffer must be bound to the GL_RENDERBUFFER binding point when SDL_GL_SwapWindow() is called. +- The drawable Framebuffer Object must be bound while rendering to the screen and when SDL_GL_SwapWindow() is called. +- If multisample antialiasing (MSAA) is used and glReadPixels is used on the screen, the drawable framebuffer must be resolved to the MSAA resolve framebuffer (via glBlitFramebuffer or glResolveMultisampleFramebufferAPPLE), and the MSAA resolve framebuffer must be bound to the GL_READ_FRAMEBUFFER binding point, before glReadPixels is called. + +The above objects can be obtained via SDL_GetWindowWMInfo() (in SDL_syswm.h). + + +Notes -- Keyboard +============================================================================== + +The SDL keyboard API has been extended to support on-screen keyboards: + +void SDL_StartTextInput() + -- enables text events and reveals the onscreen keyboard. + +void SDL_StopTextInput() + -- disables text events and hides the onscreen keyboard. + +SDL_bool SDL_IsTextInputActive() + -- returns whether or not text events are enabled (and the onscreen keyboard is visible) + + +Notes -- Mouse +============================================================================== + +iOS now supports Bluetooth mice on iPad, but by default will provide the mouse input as touch. In order for SDL to see the real mouse events, you should set the key UIApplicationSupportsIndirectInputEvents to true in your Info.plist + + +Notes -- Reading and Writing files +============================================================================== + +Each application installed on iPhone resides in a sandbox which includes its own Application Home directory. Your application may not access files outside this directory. + +Once your application is installed its directory tree looks like: + + MySDLApp Home/ + MySDLApp.app + Documents/ + Library/ + Preferences/ + tmp/ + +When your SDL based iPhone application starts up, it sets the working directory to the main bundle (MySDLApp Home/MySDLApp.app), where your application resources are stored. You cannot write to this directory. Instead, I advise you to write document files to "../Documents/" and preferences to "../Library/Preferences". + +More information on this subject is available here: +http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html + + +Notes -- xcFramework +============================================================================== + +The SDL.xcodeproj file now includes a target to build SDL2.xcframework. An xcframework is a new (Xcode 11) uber-framework which can handle any combination of processor type and target OS platform. + +In the past, iOS devices were always an ARM variant processor, and the simulator was always i386 or x86_64, and thus libraries could be combined into a single framework for both simulator and device. With the introduction of the Apple Silicon ARM-based machines, regular frameworks would collide as CPU type was no longer sufficient to differentiate the platform. So Apple created the new xcframework library package. + +The xcframework target builds into a Products directory alongside the SDL.xcodeproj file, as SDL2.xcframework. This can be brought in to any iOS project and will function properly for both simulator and device, no matter their CPUs. Note that Intel Macs cannot cross-compile for Apple Silicon Macs. If you need AS compatibility, perform this build on an Apple Silicon Mac. + +This target requires Xcode 11 or later. The target will simply fail to build if attempted on older Xcodes. + +In addition, on Apple platforms, main() cannot be in a dynamically loaded library. This means that iOS apps which used the statically-linked libSDL2.lib and now link with the xcframwork will need to define their own main() to call SDL_UIKitRunApp(), like this: + +#ifndef SDL_MAIN_HANDLED +#ifdef main +#undef main +#endif + +int +main(int argc, char *argv[]) +{ + return SDL_UIKitRunApp(argc, argv, SDL_main); +} +#endif /* !SDL_MAIN_HANDLED */ + +Using an xcFramework is similar to using a regular framework. However, issues have been seen with the build system not seeing the headers in the xcFramework. To remedy this, add the path to the xcFramework in your app's target ==> Build Settings ==> Framework Search Paths and mark it recursive (this is critical). Also critical is to remove "*.framework" from Build Settings ==> Sub-Directories to Exclude in Recursive Searches. Clean the build folder, and on your next build the build system should be able to see any of these in your code, as expected: + +#include "SDL_main.h" +#include +#include + + +Notes -- iPhone SDL limitations +============================================================================== + +Windows: + Full-size, single window applications only. You cannot create multi-window SDL applications for iPhone OS. The application window will fill the display, though you have the option of turning on or off the menu-bar (pass SDL_CreateWindow() the flag SDL_WINDOW_BORDERLESS). + +Textures: + The optimal texture formats on iOS are SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, and SDL_PIXELFORMAT_RGB24 pixel formats. + +Loading Shared Objects: + This is disabled by default since it seems to break the terms of the iOS SDK agreement for iOS versions prior to iOS 8. It can be re-enabled in SDL_config_iphoneos.h. + + +Notes -- CoreBluetooth.framework +============================================================================== + +SDL_JOYSTICK_HIDAPI is disabled by default. It can give you access to a lot +more game controller devices, but it requires permission from the user before +your app will be able to talk to the Bluetooth hardware. "Made For iOS" +branded controllers do not need this as we don't have to speak to them +directly with raw bluetooth, so many apps can live without this. + +You'll need to link with CoreBluetooth.framework and add something like this +to your Info.plist: + +NSBluetoothPeripheralUsageDescription +MyApp would like to remain connected to nearby bluetooth Game Controllers and Game Pads even when you're not using the app. + + +Game Center +============================================================================== + +Game Center integration might require that you break up your main loop in order to yield control back to the system. In other words, instead of running an endless main loop, you run each frame in a callback function, using: + + int SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, SDL_iOSAnimationCallback callback, void *callbackParam); + +This will set up the given function to be called back on the animation callback, and then you have to return from main() to let the Cocoa event loop run. + +e.g. + + extern "C" + void ShowFrame(void*) + { + ... do event handling, frame logic and rendering ... + } + + int main(int argc, char *argv[]) + { + ... initialize game ... + + #ifdef __IPHONEOS__ + // Initialize the Game Center for scoring and matchmaking + InitGameCenter(); + + // Set up the game to run in the window animation callback on iOS + // so that Game Center and so forth works correctly. + SDL_iPhoneSetAnimationCallback(window, 1, ShowFrame, NULL); + #else + while ( running ) { + ShowFrame(0); + DelayFrame(); + } + #endif + return 0; + } + + +Deploying to older versions of iOS +============================================================================== + +SDL supports deploying to older versions of iOS than are supported by the latest version of Xcode, all the way back to iOS 8.0 + +In order to do that you need to download an older version of Xcode: +https://developer.apple.com/download/more/?name=Xcode + +Open the package contents of the older Xcode and your newer version of Xcode and copy over the folders in Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport + +Then open the file Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/SDKSettings.plist and add the versions of iOS you want to deploy to the key Root/DefaultProperties/DEPLOYMENT_TARGET_SUGGESTED_VALUES + +Open your project and set your deployment target to the desired version of iOS + +Finally, remove GameController from the list of frameworks linked by your application and edit the build settings for "Other Linker Flags" and add -weak_framework GameController diff --git a/vs/sdl2/docs/README-kmsbsd.md b/vs/sdl2/docs/README-kmsbsd.md index 1aad3809215..01db5e8aafd 100644 --- a/vs/sdl2/docs/README-kmsbsd.md +++ b/vs/sdl2/docs/README-kmsbsd.md @@ -1,27 +1,27 @@ -KMSDRM on *BSD -================================================== - -KMSDRM is supported on FreeBSD and OpenBSD. DragonFlyBSD works but requires being a root user. NetBSD isn't supported yet because the application will crash when creating the KMSDRM screen. - -WSCONS support has been brought back, but only as an input backend. It will not be brought back as a video backend to ease maintenance. - -OpenBSD note: Note that the video backend assumes that the user has read/write permissions to the /dev/drm* devices. - - -SDL2 WSCONS input backend features -=================================================== -1. It is keymap-aware; it will work properly with different keymaps. -2. It has mouse support. -3. Accent input is supported. -4. Compose keys are supported. -5. AltGr and Meta Shift keys work as intended. - -Partially working or no input on OpenBSD/NetBSD. -================================================== - -The WSCONS input backend needs read/write access to the /dev/wskbd* devices, without which it will not work properly. /dev/wsmouse must also be read/write accessible, otherwise mouse input will not work. - -Partially working or no input on FreeBSD. -================================================== - -The evdev devices are only accessible to the root user by default. Edit devfs rules to allow access to such devices. The /dev/kbd* devices are also only accessible to the root user by default. Edit devfs rules to allow access to such devices. +KMSDRM on *BSD +================================================== + +KMSDRM is supported on FreeBSD and OpenBSD. DragonFlyBSD works but requires being a root user. NetBSD isn't supported yet because the application will crash when creating the KMSDRM screen. + +WSCONS support has been brought back, but only as an input backend. It will not be brought back as a video backend to ease maintenance. + +OpenBSD note: Note that the video backend assumes that the user has read/write permissions to the /dev/drm* devices. + + +SDL2 WSCONS input backend features +=================================================== +1. It is keymap-aware; it will work properly with different keymaps. +2. It has mouse support. +3. Accent input is supported. +4. Compose keys are supported. +5. AltGr and Meta Shift keys work as intended. + +Partially working or no input on OpenBSD/NetBSD. +================================================== + +The WSCONS input backend needs read/write access to the /dev/wskbd* devices, without which it will not work properly. /dev/wsmouse must also be read/write accessible, otherwise mouse input will not work. + +Partially working or no input on FreeBSD. +================================================== + +The evdev devices are only accessible to the root user by default. Edit devfs rules to allow access to such devices. The /dev/kbd* devices are also only accessible to the root user by default. Edit devfs rules to allow access to such devices. diff --git a/vs/sdl2/docs/README-linux.md b/vs/sdl2/docs/README-linux.md index 83339bcccfc..b28690b2d93 100644 --- a/vs/sdl2/docs/README-linux.md +++ b/vs/sdl2/docs/README-linux.md @@ -1,96 +1,96 @@ -Linux -================================================================================ - -By default SDL will only link against glibc, the rest of the features will be -enabled dynamically at runtime depending on the available features on the target -system. So, for example if you built SDL with XRandR support and the target -system does not have the XRandR libraries installed, it will be disabled -at runtime, and you won't get a missing library error, at least with the -default configuration parameters. - - -Build Dependencies --------------------------------------------------------------------------------- - -Ubuntu 18.04, all available features enabled: - - sudo apt-get install build-essential git make autoconf automake libtool \ - pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ - libaudio-dev libjack-dev libsndio-dev libsamplerate0-dev libx11-dev libxext-dev \ - libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev \ - libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ - libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev - -Ubuntu 22.04+ can also add `libpipewire-0.3-dev libdecor-0-dev` to that command line. - -Fedora 35, all available features enabled: - - sudo yum install gcc git-core make cmake autoconf automake libtool \ - alsa-lib-devel pulseaudio-libs-devel nas-devel pipewire-devel \ - libX11-devel libXext-devel libXrandr-devel libXcursor-devel libXfixes-devel \ - libXi-devel libXScrnSaver-devel dbus-devel ibus-devel fcitx-devel \ - systemd-devel mesa-libGL-devel libxkbcommon-devel mesa-libGLES-devel \ - mesa-libEGL-devel vulkan-devel wayland-devel wayland-protocols-devel \ - libdrm-devel mesa-libgbm-devel libusb-devel libdecor-devel \ - libsamplerate-devel pipewire-jack-audio-connection-kit-devel \ - -NOTES: -- This includes all the audio targets except arts and esd, because Ubuntu - (and/or Debian) pulled their packages, but in theory SDL still supports them. - The sndio audio target is also unavailable on Fedora. -- libsamplerate0-dev lets SDL optionally link to libresamplerate at runtime - for higher-quality audio resampling. SDL will work without it if the library - is missing, so it's safe to build in support even if the end user doesn't - have this library installed. -- DirectFB isn't included because the configure script (currently) fails to find - it at all. You can do "sudo apt-get install libdirectfb-dev" and fix the - configure script to include DirectFB support. Send patches. :) - - -Joystick does not work --------------------------------------------------------------------------------- - -If you compiled or are using a version of SDL with udev support (and you should!) -there's a few issues that may cause SDL to fail to detect your joystick. To -debug this, start by installing the evtest utility. On Ubuntu/Debian: - - sudo apt-get install evtest - -Then run: - - sudo evtest - -You'll hopefully see your joystick listed along with a name like "/dev/input/eventXX" -Now run: - - cat /dev/input/event/XX - -If you get a permission error, you need to set a udev rule to change the mode of -your device (see below) - -Also, try: - - sudo udevadm info --query=all --name=input/eventXX - -If you see a line stating ID_INPUT_JOYSTICK=1, great, if you don't see it, -you need to set up an udev rule to force this variable. - -A combined rule for the Saitek Pro Flight Rudder Pedals to fix both issues looks -like: - - SUBSYSTEM=="input", ATTRS{idProduct}=="0763", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1" - SUBSYSTEM=="input", ATTRS{idProduct}=="0764", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1" - -You can set up similar rules for your device by changing the values listed in -idProduct and idVendor. To obtain these values, try: - - sudo udevadm info -a --name=input/eventXX | grep idVendor - sudo udevadm info -a --name=input/eventXX | grep idProduct - -If multiple values come up for each of these, the one you want is the first one of each. - -On other systems which ship with an older udev (such as CentOS), you may need -to set up a rule such as: - - SUBSYSTEM=="input", ENV{ID_CLASS}=="joystick", ENV{ID_INPUT_JOYSTICK}="1" - +Linux +================================================================================ + +By default SDL will only link against glibc, the rest of the features will be +enabled dynamically at runtime depending on the available features on the target +system. So, for example if you built SDL with XRandR support and the target +system does not have the XRandR libraries installed, it will be disabled +at runtime, and you won't get a missing library error, at least with the +default configuration parameters. + + +Build Dependencies +-------------------------------------------------------------------------------- + +Ubuntu 18.04, all available features enabled: + + sudo apt-get install build-essential git make autoconf automake libtool \ + pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \ + libaudio-dev libjack-dev libsndio-dev libsamplerate0-dev libx11-dev libxext-dev \ + libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev \ + libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \ + libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev + +Ubuntu 22.04+ can also add `libpipewire-0.3-dev libdecor-0-dev` to that command line. + +Fedora 35, all available features enabled: + + sudo yum install gcc git-core make cmake autoconf automake libtool \ + alsa-lib-devel pulseaudio-libs-devel nas-devel pipewire-devel \ + libX11-devel libXext-devel libXrandr-devel libXcursor-devel libXfixes-devel \ + libXi-devel libXScrnSaver-devel dbus-devel ibus-devel fcitx-devel \ + systemd-devel mesa-libGL-devel libxkbcommon-devel mesa-libGLES-devel \ + mesa-libEGL-devel vulkan-devel wayland-devel wayland-protocols-devel \ + libdrm-devel mesa-libgbm-devel libusb-devel libdecor-devel \ + libsamplerate-devel pipewire-jack-audio-connection-kit-devel \ + +NOTES: +- This includes all the audio targets except arts and esd, because Ubuntu + (and/or Debian) pulled their packages, but in theory SDL still supports them. + The sndio audio target is also unavailable on Fedora. +- libsamplerate0-dev lets SDL optionally link to libresamplerate at runtime + for higher-quality audio resampling. SDL will work without it if the library + is missing, so it's safe to build in support even if the end user doesn't + have this library installed. +- DirectFB isn't included because the configure script (currently) fails to find + it at all. You can do "sudo apt-get install libdirectfb-dev" and fix the + configure script to include DirectFB support. Send patches. :) + + +Joystick does not work +-------------------------------------------------------------------------------- + +If you compiled or are using a version of SDL with udev support (and you should!) +there's a few issues that may cause SDL to fail to detect your joystick. To +debug this, start by installing the evtest utility. On Ubuntu/Debian: + + sudo apt-get install evtest + +Then run: + + sudo evtest + +You'll hopefully see your joystick listed along with a name like "/dev/input/eventXX" +Now run: + + cat /dev/input/event/XX + +If you get a permission error, you need to set a udev rule to change the mode of +your device (see below) + +Also, try: + + sudo udevadm info --query=all --name=input/eventXX + +If you see a line stating ID_INPUT_JOYSTICK=1, great, if you don't see it, +you need to set up an udev rule to force this variable. + +A combined rule for the Saitek Pro Flight Rudder Pedals to fix both issues looks +like: + + SUBSYSTEM=="input", ATTRS{idProduct}=="0763", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1" + SUBSYSTEM=="input", ATTRS{idProduct}=="0764", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1" + +You can set up similar rules for your device by changing the values listed in +idProduct and idVendor. To obtain these values, try: + + sudo udevadm info -a --name=input/eventXX | grep idVendor + sudo udevadm info -a --name=input/eventXX | grep idProduct + +If multiple values come up for each of these, the one you want is the first one of each. + +On other systems which ship with an older udev (such as CentOS), you may need +to set up a rule such as: + + SUBSYSTEM=="input", ENV{ID_CLASS}=="joystick", ENV{ID_INPUT_JOYSTICK}="1" + diff --git a/vs/sdl2/docs/README-macos.md b/vs/sdl2/docs/README-macos.md index 634d456bf86..8e0a4a998fa 100644 --- a/vs/sdl2/docs/README-macos.md +++ b/vs/sdl2/docs/README-macos.md @@ -1,285 +1,285 @@ -# Mac OS X (aka macOS). - -These instructions are for people using Apple's Mac OS X (pronounced -"ten"), which in newer versions is just referred to as "macOS". - -From the developer's point of view, macOS is a sort of hybrid Mac and -Unix system, and you have the option of using either traditional -command line tools or Apple's IDE Xcode. - -# Command Line Build - -To build SDL using the command line, use the standard configure and make -process: - -```bash -mkdir build -cd build -../configure -make -sudo make install -``` - -CMake is also known to work, although it continues to be a work in progress: - -```bash -mkdir build -cd build -cmake -DCMAKE_BUILD_TYPE=Release .. -make -sudo make install -``` - - -You can also build SDL as a Universal library (a single binary for both -64-bit Intel and ARM architectures), by using the build-scripts/clang-fat.sh -script. - -```bash -mkdir build -cd build -CC=$PWD/../build-scripts/clang-fat.sh ../configure -make -sudo make install -``` - -This script builds SDL with 10.9 ABI compatibility on 64-bit Intel and 11.0 -ABI compatibility on ARM64 architectures. For best compatibility you -should compile your application the same way. - -Please note that building SDL requires at least Xcode 6 and the 10.9 SDK. -PowerPC support for macOS has been officially dropped as of SDL 2.0.2. -32-bit Intel and macOS 10.8 runtime support has been officially dropped as -of SDL 2.24.0. - -To use the library once it's built, you essential have two possibilities: -use the traditional autoconf/automake/make method, or use Xcode. - - -# Caveats for using SDL with Mac OS X - -If you register your own NSApplicationDelegate (using [NSApp setDelegate:]), -SDL will not register its own. This means that SDL will not terminate using -SDL_Quit if it receives a termination request, it will terminate like a -normal app, and it will not send a SDL_DROPFILE when you request to open a -file with the app. To solve these issues, put the following code in your -NSApplicationDelegate implementation: - - -```objc -- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender -{ - if (SDL_GetEventState(SDL_QUIT) == SDL_ENABLE) { - SDL_Event event; - event.type = SDL_QUIT; - SDL_PushEvent(&event); - } - - return NSTerminateCancel; -} - -- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename -{ - if (SDL_GetEventState(SDL_DROPFILE) == SDL_ENABLE) { - SDL_Event event; - event.type = SDL_DROPFILE; - event.drop.file = SDL_strdup([filename UTF8String]); - return (SDL_PushEvent(&event) > 0); - } - - return NO; -} -``` - -# Using the Simple DirectMedia Layer with a traditional Makefile - -An existing autoconf/automake build system for your SDL app has good chances -to work almost unchanged on macOS. However, to produce a "real" Mac binary -that you can distribute to users, you need to put the generated binary into a -so called "bundle", which is basically a fancy folder with a name like -"MyCoolGame.app". - -To get this build automatically, add something like the following rule to -your Makefile.am: - -```make -bundle_contents = APP_NAME.app/Contents -APP_NAME_bundle: EXE_NAME - mkdir -p $(bundle_contents)/MacOS - mkdir -p $(bundle_contents)/Resources - echo "APPL????" > $(bundle_contents)/PkgInfo - $(INSTALL_PROGRAM) $< $(bundle_contents)/MacOS/ -``` - -You should replace `EXE_NAME` with the name of the executable. `APP_NAME` is -what will be visible to the user in the Finder. Usually it will be the same -as `EXE_NAME` but capitalized. E.g. if `EXE_NAME` is "testgame" then `APP_NAME` -usually is "TestGame". You might also want to use `@PACKAGE@` to use the -package name as specified in your configure.ac file. - -If your project builds more than one application, you will have to do a bit -more. For each of your target applications, you need a separate rule. - -If you want the created bundles to be installed, you may want to add this -rule to your Makefile.am: - -```make -install-exec-hook: APP_NAME_bundle - rm -rf $(DESTDIR)$(prefix)/Applications/APP_NAME.app - mkdir -p $(DESTDIR)$(prefix)/Applications/ - cp -r $< /$(DESTDIR)$(prefix)Applications/ -``` - -This rule takes the Bundle created by the rule from step 3 and installs them -into "$(DESTDIR)$(prefix)/Applications/". - -Again, if you want to install multiple applications, you will have to augment -the make rule accordingly. - -But beware! That is only part of the story! With the above, you end up with -a barebones .app bundle, which is double-clickable from the Finder. But -there are some more things you should do before shipping your product... - -1. The bundle right now probably is dynamically linked against SDL. That - means that when you copy it to another computer, *it will not run*, - unless you also install SDL on that other computer. A good solution - for this dilemma is to static link against SDL. On OS X, you can - achieve that by linking against the libraries listed by - - ```bash - sdl-config --static-libs - ``` - - instead of those listed by - - ```bash - sdl-config --libs - ``` - - Depending on how exactly SDL is integrated into your build systems, the - way to achieve that varies, so I won't describe it here in detail - -2. Add an 'Info.plist' to your application. That is a special XML file which - contains some meta-information about your application (like some copyright - information, the version of your app, the name of an optional icon file, - and other things). Part of that information is displayed by the Finder - when you click on the .app, or if you look at the "Get Info" window. - More information about Info.plist files can be found on Apple's homepage. - - -As a final remark, let me add that I use some of the techniques (and some -variations of them) in [Exult](https://github.com/exult/exult) and -[ScummVM](https://github.com/scummvm/scummvm); both are available in source on -the net, so feel free to take a peek at them for inspiration! - - -# Using the Simple DirectMedia Layer with Xcode - -These instructions are for using Apple's Xcode IDE to build SDL applications. - -## First steps - -The first thing to do is to unpack the Xcode.tar.gz archive in the -top level SDL directory (where the Xcode.tar.gz archive resides). -Because Stuffit Expander will unpack the archive into a subdirectory, -you should unpack the archive manually from the command line: - -```bash -cd [path_to_SDL_source] -tar zxf Xcode.tar.gz -``` - -This will create a new folder called Xcode, which you can browse -normally from the Finder. - -## Building the Framework - -The SDL Library is packaged as a framework bundle, an organized -relocatable folder hierarchy of executable code, interface headers, -and additional resources. For practical purposes, you can think of a -framework as a more user and system-friendly shared library, whose library -file behaves more or less like a standard UNIX shared library. - -To build the framework, simply open the framework project and build it. -By default, the framework bundle "SDL.framework" is installed in -/Library/Frameworks. Therefore, the testers and project stationary expect -it to be located there. However, it will function the same in any of the -following locations: - -* ~/Library/Frameworks -* /Local/Library/Frameworks -* /System/Library/Frameworks - -## Build Options - -There are two "Build Styles" (See the "Targets" tab) for SDL. -"Deployment" should be used if you aren't tweaking the SDL library. -"Development" should be used to debug SDL apps or the library itself. - -## Building the Testers - -Open the SDLTest project and build away! - -## Using the Project Stationary - -Copy the stationary to the indicated folders to access it from -the "New Project" and "Add target" menus. What could be easier? - -## Setting up a new project by hand - -Some of you won't want to use the Stationary so I'll give some tips: - -(this is accurate as of Xcode 12.5.) - -* Click "File" -> "New" -> "Project... -* Choose "macOS" and then "App" from the "Application" section. -* Fill out the options in the next window. User interface is "XIB" and - Language is "Objective-C". -* Remove "main.m" from your project -* Remove "MainMenu.xib" from your project -* Remove "AppDelegates.*" from your project -* Add "\$(HOME)/Library/Frameworks/SDL.framework/Headers" to include path -* Add "\$(HOME)/Library/Frameworks" to the frameworks search path -* Add "-framework SDL -framework Foundation -framework AppKit" to "OTHER_LDFLAGS" -* Add your files -* Clean and build - -## Building from command line - -Use `xcode-build` in the same directory as your .pbxproj file - -## Running your app - -You can send command line args to your app by either invoking it from -the command line (in *.app/Contents/MacOS) or by entering them in the -Executables" panel of the target settings. - -# Implementation Notes - -Some things that may be of interest about how it all works... - -## Working directory - -In SDL 1.2, the working directory of your SDL app is by default set to its -parent, but this is no longer the case in SDL 2.0. SDL2 does change the -working directory, which means it'll be whatever the command line prompt -that launched the program was using, or if launched by double-clicking in -the finger, it will be "/", the _root of the filesystem_. Plan accordingly! -You can use SDL_GetBasePath() to find where the program is running from and -chdir() there directly. - - -## You have a Cocoa App! - -Your SDL app is essentially a Cocoa application. When your app -starts up and the libraries finish loading, a Cocoa procedure is called, -which sets up the working directory and calls your main() method. -You are free to modify your Cocoa app with generally no consequence -to SDL. You cannot, however, easily change the SDL window itself. -Functionality may be added in the future to help this. - -# Bug reports - -Bugs are tracked at [the GitHub issue tracker](https://github.com/libsdl-org/SDL/issues/). -Please feel free to report bugs there! - +# Mac OS X (aka macOS). + +These instructions are for people using Apple's Mac OS X (pronounced +"ten"), which in newer versions is just referred to as "macOS". + +From the developer's point of view, macOS is a sort of hybrid Mac and +Unix system, and you have the option of using either traditional +command line tools or Apple's IDE Xcode. + +# Command Line Build + +To build SDL using the command line, use the standard configure and make +process: + +```bash +mkdir build +cd build +../configure +make +sudo make install +``` + +CMake is also known to work, although it continues to be a work in progress: + +```bash +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=Release .. +make +sudo make install +``` + + +You can also build SDL as a Universal library (a single binary for both +64-bit Intel and ARM architectures), by using the build-scripts/clang-fat.sh +script. + +```bash +mkdir build +cd build +CC=$PWD/../build-scripts/clang-fat.sh ../configure +make +sudo make install +``` + +This script builds SDL with 10.9 ABI compatibility on 64-bit Intel and 11.0 +ABI compatibility on ARM64 architectures. For best compatibility you +should compile your application the same way. + +Please note that building SDL requires at least Xcode 6 and the 10.9 SDK. +PowerPC support for macOS has been officially dropped as of SDL 2.0.2. +32-bit Intel and macOS 10.8 runtime support has been officially dropped as +of SDL 2.24.0. + +To use the library once it's built, you essential have two possibilities: +use the traditional autoconf/automake/make method, or use Xcode. + + +# Caveats for using SDL with Mac OS X + +If you register your own NSApplicationDelegate (using [NSApp setDelegate:]), +SDL will not register its own. This means that SDL will not terminate using +SDL_Quit if it receives a termination request, it will terminate like a +normal app, and it will not send a SDL_DROPFILE when you request to open a +file with the app. To solve these issues, put the following code in your +NSApplicationDelegate implementation: + + +```objc +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender +{ + if (SDL_GetEventState(SDL_QUIT) == SDL_ENABLE) { + SDL_Event event; + event.type = SDL_QUIT; + SDL_PushEvent(&event); + } + + return NSTerminateCancel; +} + +- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename +{ + if (SDL_GetEventState(SDL_DROPFILE) == SDL_ENABLE) { + SDL_Event event; + event.type = SDL_DROPFILE; + event.drop.file = SDL_strdup([filename UTF8String]); + return (SDL_PushEvent(&event) > 0); + } + + return NO; +} +``` + +# Using the Simple DirectMedia Layer with a traditional Makefile + +An existing autoconf/automake build system for your SDL app has good chances +to work almost unchanged on macOS. However, to produce a "real" Mac binary +that you can distribute to users, you need to put the generated binary into a +so called "bundle", which is basically a fancy folder with a name like +"MyCoolGame.app". + +To get this build automatically, add something like the following rule to +your Makefile.am: + +```make +bundle_contents = APP_NAME.app/Contents +APP_NAME_bundle: EXE_NAME + mkdir -p $(bundle_contents)/MacOS + mkdir -p $(bundle_contents)/Resources + echo "APPL????" > $(bundle_contents)/PkgInfo + $(INSTALL_PROGRAM) $< $(bundle_contents)/MacOS/ +``` + +You should replace `EXE_NAME` with the name of the executable. `APP_NAME` is +what will be visible to the user in the Finder. Usually it will be the same +as `EXE_NAME` but capitalized. E.g. if `EXE_NAME` is "testgame" then `APP_NAME` +usually is "TestGame". You might also want to use `@PACKAGE@` to use the +package name as specified in your configure.ac file. + +If your project builds more than one application, you will have to do a bit +more. For each of your target applications, you need a separate rule. + +If you want the created bundles to be installed, you may want to add this +rule to your Makefile.am: + +```make +install-exec-hook: APP_NAME_bundle + rm -rf $(DESTDIR)$(prefix)/Applications/APP_NAME.app + mkdir -p $(DESTDIR)$(prefix)/Applications/ + cp -r $< /$(DESTDIR)$(prefix)Applications/ +``` + +This rule takes the Bundle created by the rule from step 3 and installs them +into "$(DESTDIR)$(prefix)/Applications/". + +Again, if you want to install multiple applications, you will have to augment +the make rule accordingly. + +But beware! That is only part of the story! With the above, you end up with +a barebones .app bundle, which is double-clickable from the Finder. But +there are some more things you should do before shipping your product... + +1. The bundle right now probably is dynamically linked against SDL. That + means that when you copy it to another computer, *it will not run*, + unless you also install SDL on that other computer. A good solution + for this dilemma is to static link against SDL. On OS X, you can + achieve that by linking against the libraries listed by + + ```bash + sdl-config --static-libs + ``` + + instead of those listed by + + ```bash + sdl-config --libs + ``` + + Depending on how exactly SDL is integrated into your build systems, the + way to achieve that varies, so I won't describe it here in detail + +2. Add an 'Info.plist' to your application. That is a special XML file which + contains some meta-information about your application (like some copyright + information, the version of your app, the name of an optional icon file, + and other things). Part of that information is displayed by the Finder + when you click on the .app, or if you look at the "Get Info" window. + More information about Info.plist files can be found on Apple's homepage. + + +As a final remark, let me add that I use some of the techniques (and some +variations of them) in [Exult](https://github.com/exult/exult) and +[ScummVM](https://github.com/scummvm/scummvm); both are available in source on +the net, so feel free to take a peek at them for inspiration! + + +# Using the Simple DirectMedia Layer with Xcode + +These instructions are for using Apple's Xcode IDE to build SDL applications. + +## First steps + +The first thing to do is to unpack the Xcode.tar.gz archive in the +top level SDL directory (where the Xcode.tar.gz archive resides). +Because Stuffit Expander will unpack the archive into a subdirectory, +you should unpack the archive manually from the command line: + +```bash +cd [path_to_SDL_source] +tar zxf Xcode.tar.gz +``` + +This will create a new folder called Xcode, which you can browse +normally from the Finder. + +## Building the Framework + +The SDL Library is packaged as a framework bundle, an organized +relocatable folder hierarchy of executable code, interface headers, +and additional resources. For practical purposes, you can think of a +framework as a more user and system-friendly shared library, whose library +file behaves more or less like a standard UNIX shared library. + +To build the framework, simply open the framework project and build it. +By default, the framework bundle "SDL.framework" is installed in +/Library/Frameworks. Therefore, the testers and project stationary expect +it to be located there. However, it will function the same in any of the +following locations: + +* ~/Library/Frameworks +* /Local/Library/Frameworks +* /System/Library/Frameworks + +## Build Options + +There are two "Build Styles" (See the "Targets" tab) for SDL. +"Deployment" should be used if you aren't tweaking the SDL library. +"Development" should be used to debug SDL apps or the library itself. + +## Building the Testers + +Open the SDLTest project and build away! + +## Using the Project Stationary + +Copy the stationary to the indicated folders to access it from +the "New Project" and "Add target" menus. What could be easier? + +## Setting up a new project by hand + +Some of you won't want to use the Stationary so I'll give some tips: + +(this is accurate as of Xcode 12.5.) + +* Click "File" -> "New" -> "Project... +* Choose "macOS" and then "App" from the "Application" section. +* Fill out the options in the next window. User interface is "XIB" and + Language is "Objective-C". +* Remove "main.m" from your project +* Remove "MainMenu.xib" from your project +* Remove "AppDelegates.*" from your project +* Add "\$(HOME)/Library/Frameworks/SDL.framework/Headers" to include path +* Add "\$(HOME)/Library/Frameworks" to the frameworks search path +* Add "-framework SDL -framework Foundation -framework AppKit" to "OTHER_LDFLAGS" +* Add your files +* Clean and build + +## Building from command line + +Use `xcode-build` in the same directory as your .pbxproj file + +## Running your app + +You can send command line args to your app by either invoking it from +the command line (in *.app/Contents/MacOS) or by entering them in the +Executables" panel of the target settings. + +# Implementation Notes + +Some things that may be of interest about how it all works... + +## Working directory + +In SDL 1.2, the working directory of your SDL app is by default set to its +parent, but this is no longer the case in SDL 2.0 and later. SDL2 does not +change the working directory, which means it'll be whatever the command line +prompt that launched the program was using, or if launched by double-clicking +in the Finder, it will be "/", the _root of the filesystem_. Plan accordingly! +You can use SDL_GetBasePath() to find where the program is running from and +chdir() there directly. + + +## You have a Cocoa App! + +Your SDL app is essentially a Cocoa application. When your app +starts up and the libraries finish loading, a Cocoa procedure is called, +which sets up the working directory and calls your main() method. +You are free to modify your Cocoa app with generally no consequence +to SDL. You cannot, however, easily change the SDL window itself. +Functionality may be added in the future to help this. + +# Bug reports + +Bugs are tracked at [the GitHub issue tracker](https://github.com/libsdl-org/SDL/issues/). +Please feel free to report bugs there! + diff --git a/vs/sdl2/docs/README-n3ds.md b/vs/sdl2/docs/README-n3ds.md index e9e7c7d01d6..ff528eba542 100644 --- a/vs/sdl2/docs/README-n3ds.md +++ b/vs/sdl2/docs/README-n3ds.md @@ -1,28 +1,28 @@ -# Nintendo 3DS - -SDL port for the Nintendo 3DS [Homebrew toolchain](https://devkitpro.org/) contributed by: - -- [Pierre Wendling](https://github.com/FtZPetruska) - -Credits to: - -- The awesome people who ported SDL to other homebrew platforms. -- The Devkitpro team for making all the tools necessary to achieve this. - -## Building - -To build for the Nintendo 3DS, make sure you have devkitARM and cmake installed and run: - -```bash -cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE="$DEVKITPRO/cmake/3DS.cmake" -DCMAKE_BUILD_TYPE=Release -cmake --build build -cmake --install build -``` - -## Notes - -- Currently only software rendering is supported. -- SDL2main should be used to ensure ROMFS is enabled. -- By default, the extra L2 cache and higher clock speeds of the New 2/3DS lineup are enabled. If you wish to turn it off, use `osSetSpeedupEnable(false)` in your main function. -- `SDL_GetBasePath` returns the romfs root instead of the executable's directory. -- The Nintendo 3DS uses a cooperative threading model on a single core, meaning a thread will never yield unless done manually through the `SDL_Delay` functions, or blocking waits (`SDL_LockMutex`, `SDL_SemWait`, `SDL_CondWait`, `SDL_WaitThread`). To avoid starving other threads, `SDL_SemTryWait` and `SDL_SemWaitTimeout` will yield if they fail to acquire the semaphore, see https://github.com/libsdl-org/SDL/pull/6776 for more information. +# Nintendo 3DS + +SDL port for the Nintendo 3DS [Homebrew toolchain](https://devkitpro.org/) contributed by: + +- [Pierre Wendling](https://github.com/FtZPetruska) + +Credits to: + +- The awesome people who ported SDL to other homebrew platforms. +- The Devkitpro team for making all the tools necessary to achieve this. + +## Building + +To build for the Nintendo 3DS, make sure you have devkitARM and cmake installed and run: + +```bash +cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE="$DEVKITPRO/cmake/3DS.cmake" -DCMAKE_BUILD_TYPE=Release +cmake --build build +cmake --install build +``` + +## Notes + +- Currently only software rendering is supported. +- SDL2main should be used to ensure ROMFS is enabled. +- By default, the extra L2 cache and higher clock speeds of the New 2/3DS lineup are enabled. If you wish to turn it off, use `osSetSpeedupEnable(false)` in your main function. +- `SDL_GetBasePath` returns the romfs root instead of the executable's directory. +- The Nintendo 3DS uses a cooperative threading model on a single core, meaning a thread will never yield unless done manually through the `SDL_Delay` functions, or blocking waits (`SDL_LockMutex`, `SDL_SemWait`, `SDL_CondWait`, `SDL_WaitThread`). To avoid starving other threads, `SDL_SemTryWait` and `SDL_SemWaitTimeout` will yield if they fail to acquire the semaphore, see https://github.com/libsdl-org/SDL/pull/6776 for more information. diff --git a/vs/sdl2/docs/README-nacl.md b/vs/sdl2/docs/README-nacl.md index 5b05f39f6c3..2906825d407 100644 --- a/vs/sdl2/docs/README-nacl.md +++ b/vs/sdl2/docs/README-nacl.md @@ -1,103 +1,103 @@ -Native Client -================================================================================ - -Requirements: - -* Native Client SDK (https://developer.chrome.com/native-client), - (tested with Pepper version 33 or higher). - -The SDL backend for Chrome's Native Client has been tested only with the PNaCl -toolchain, which generates binaries designed to run on ARM and x86_32/64 -platforms. This does not mean it won't work with the other toolchains! - -================================================================================ -Building SDL for NaCl -================================================================================ - -Set up the right environment variables (see naclbuild.sh), then configure SDL with: - - configure --host=pnacl --prefix some/install/destination - -Then "make". - -As an example of how to create a deployable app a Makefile project is provided -in test/nacl/Makefile, which includes some monkey patching of the common.mk file -provided by NaCl, without which linking properly to SDL won't work (the search -path can't be modified externally, so the linker won't find SDL's binaries unless -you dump them into the SDK path, which is inconvenient). -Also provided in test/nacl is the required support file, such as index.html, -manifest.json, etc. -SDL apps for NaCl run on a worker thread using the ppapi_simple infrastructure. -This allows for blocking calls on all the relevant systems (OpenGL ES, filesystem), -hiding the asynchronous nature of the browser behind the scenes...which is not the -same as making it disappear! - - -================================================================================ -Running tests -================================================================================ - -Due to the nature of NaCl programs, building and running SDL tests is not as -straightforward as one would hope. The script naclbuild.sh in build-scripts -automates the process and should serve as a guide for users of SDL trying to build -their own applications. - -Basic usage: - - ./naclbuild.sh path/to/pepper/toolchain (i.e. ~/naclsdk/pepper_35) - -This will build testgles2.c by default. - -If you want to build a different test, for example testrendercopyex.c: - - SOURCES=~/sdl/SDL/test/testrendercopyex.c ./naclbuild.sh ~/naclsdk/pepper_35 - -Once the build finishes, you have to serve the contents with a web server (the -script will give you instructions on how to do that with Python). - -================================================================================ -RWops and nacl_io -================================================================================ - -SDL_RWops work transparently with nacl_io. Two functions control the mount points: - - int mount(const char* source, const char* target, - const char* filesystemtype, - unsigned long mountflags, const void *data); - int umount(const char *target); - - For convenience, SDL will by default mount an httpfs tree at / before calling -the app's main function. Such setting can be overridden by calling: - - umount("/"); - -And then mounting a different filesystem at / - -It's important to consider that the asynchronous nature of file operations on a -browser is hidden from the application, effectively providing the developer with -a set of blocking file operations just like you get in a regular desktop -environment, which eases the job of porting to Native Client, but also introduces -a set of challenges of its own, in particular when big file sizes and slow -connections are involved. - -For more information on how nacl_io and mount points work, see: - - https://developer.chrome.com/native-client/devguide/coding/nacl_io - https://src.chromium.org/chrome/trunk/src/native_client_sdk/src/libraries/nacl_io/nacl_io.h - -To be able to save into the directory "/save/" (like backup of game) : - - mount("", "/save", "html5fs", 0, "type=PERSISTENT"); - -And add to manifest.json : - - "permissions": [ - "unlimitedStorage" - ] - -================================================================================ -TODO - Known Issues -================================================================================ -* Testing of all systems with a real application (something other than SDL's tests) -* Key events don't seem to work properly - +Native Client +================================================================================ + +Requirements: + +* Native Client SDK (https://developer.chrome.com/native-client), + (tested with Pepper version 33 or higher). + +The SDL backend for Chrome's Native Client has been tested only with the PNaCl +toolchain, which generates binaries designed to run on ARM and x86_32/64 +platforms. This does not mean it won't work with the other toolchains! + +================================================================================ +Building SDL for NaCl +================================================================================ + +Set up the right environment variables (see naclbuild.sh), then configure SDL with: + + configure --host=pnacl --prefix some/install/destination + +Then "make". + +As an example of how to create a deployable app a Makefile project is provided +in test/nacl/Makefile, which includes some monkey patching of the common.mk file +provided by NaCl, without which linking properly to SDL won't work (the search +path can't be modified externally, so the linker won't find SDL's binaries unless +you dump them into the SDK path, which is inconvenient). +Also provided in test/nacl is the required support file, such as index.html, +manifest.json, etc. +SDL apps for NaCl run on a worker thread using the ppapi_simple infrastructure. +This allows for blocking calls on all the relevant systems (OpenGL ES, filesystem), +hiding the asynchronous nature of the browser behind the scenes...which is not the +same as making it disappear! + + +================================================================================ +Running tests +================================================================================ + +Due to the nature of NaCl programs, building and running SDL tests is not as +straightforward as one would hope. The script naclbuild.sh in build-scripts +automates the process and should serve as a guide for users of SDL trying to build +their own applications. + +Basic usage: + + ./naclbuild.sh path/to/pepper/toolchain (i.e. ~/naclsdk/pepper_35) + +This will build testgles2.c by default. + +If you want to build a different test, for example testrendercopyex.c: + + SOURCES=~/sdl/SDL/test/testrendercopyex.c ./naclbuild.sh ~/naclsdk/pepper_35 + +Once the build finishes, you have to serve the contents with a web server (the +script will give you instructions on how to do that with Python). + +================================================================================ +RWops and nacl_io +================================================================================ + +SDL_RWops work transparently with nacl_io. Two functions control the mount points: + + int mount(const char* source, const char* target, + const char* filesystemtype, + unsigned long mountflags, const void *data); + int umount(const char *target); + + For convenience, SDL will by default mount an httpfs tree at / before calling +the app's main function. Such setting can be overridden by calling: + + umount("/"); + +And then mounting a different filesystem at / + +It's important to consider that the asynchronous nature of file operations on a +browser is hidden from the application, effectively providing the developer with +a set of blocking file operations just like you get in a regular desktop +environment, which eases the job of porting to Native Client, but also introduces +a set of challenges of its own, in particular when big file sizes and slow +connections are involved. + +For more information on how nacl_io and mount points work, see: + + https://developer.chrome.com/native-client/devguide/coding/nacl_io + https://src.chromium.org/chrome/trunk/src/native_client_sdk/src/libraries/nacl_io/nacl_io.h + +To be able to save into the directory "/save/" (like backup of game) : + + mount("", "/save", "html5fs", 0, "type=PERSISTENT"); + +And add to manifest.json : + + "permissions": [ + "unlimitedStorage" + ] + +================================================================================ +TODO - Known Issues +================================================================================ +* Testing of all systems with a real application (something other than SDL's tests) +* Key events don't seem to work properly + diff --git a/vs/sdl2/docs/README-ngage.md b/vs/sdl2/docs/README-ngage.md index e4809652185..83c2e3384c4 100644 --- a/vs/sdl2/docs/README-ngage.md +++ b/vs/sdl2/docs/README-ngage.md @@ -1,44 +1,44 @@ -Nokia N-Gage -============ - -SDL2 port for Symbian S60v1 and v2 with a main focus on the Nokia N-Gage -(Classic and QD) by [Michael Fitzmayer](https://github.com/mupfdev). - -Compiling ---------- - -SDL is part of the [N-Gage SDK.](https://github.com/ngagesdk) project. -The library is included in the -[toolchain](https://github.com/ngagesdk/ngage-toolchain) as a -sub-module. - -A complete example project based on SDL2 can be found in the GitHub -account of the SDK: [Wordle](https://github.com/ngagesdk/wordle). - -Current level of implementation -------------------------------- - -The video driver currently provides full screen video support with -keyboard input. - -At the moment only the software renderer works. - -Audio is not yet implemented. - -Acknowledgements ----------------- - -Thanks to Hannu Viitala, Kimmo Kinnunen and Markus Mertama for the -valuable insight into Symbian programming. Without the SDL 1.2 port -which was specially developed for CDoom (Doom for the Nokia 9210), this -adaptation would not have been possible. - -I would like to thank my friends -[Razvan](https://twitter.com/bewarerazvan) and [Dan -Whelan](https://danwhelan.ie/), for their continuous support. Without -you and the [N-Gage community](https://discord.gg/dbUzqJ26vs), I would -have lost my patience long ago. - -Last but not least, I would like to thank the development team of -[EKA2L1](https://12z1.com/) (an experimental Symbian OS emulator). Your -patience and support in troubleshooting helped me a lot. +Nokia N-Gage +============ + +SDL2 port for Symbian S60v1 and v2 with a main focus on the Nokia N-Gage +(Classic and QD) by [Michael Fitzmayer](https://github.com/mupfdev). + +Compiling +--------- + +SDL is part of the [N-Gage SDK.](https://github.com/ngagesdk) project. +The library is included in the +[toolchain](https://github.com/ngagesdk/ngage-toolchain) as a +sub-module. + +A complete example project based on SDL2 can be found in the GitHub +account of the SDK: [Wordle](https://github.com/ngagesdk/wordle). + +Current level of implementation +------------------------------- + +The video driver currently provides full screen video support with +keyboard input. + +At the moment only the software renderer works. + +Audio is not yet implemented. + +Acknowledgements +---------------- + +Thanks to Hannu Viitala, Kimmo Kinnunen and Markus Mertama for the +valuable insight into Symbian programming. Without the SDL 1.2 port +which was specially developed for CDoom (Doom for the Nokia 9210), this +adaptation would not have been possible. + +I would like to thank my friends +[Razvan](https://twitter.com/bewarerazvan) and [Dan +Whelan](https://danwhelan.ie/), for their continuous support. Without +you and the [N-Gage community](https://discord.gg/dbUzqJ26vs), I would +have lost my patience long ago. + +Last but not least, I would like to thank the development team of +[EKA2L1](https://12z1.com/) (an experimental Symbian OS emulator). Your +patience and support in troubleshooting helped me a lot. diff --git a/vs/sdl2/docs/README-os2.md b/vs/sdl2/docs/README-os2.md index 6870ee3eccd..148eb33a60b 100644 --- a/vs/sdl2/docs/README-os2.md +++ b/vs/sdl2/docs/README-os2.md @@ -1,92 +1,92 @@ -Simple DirectMedia Layer 2 for OS/2 & eComStation -================================================================================ -SDL port for OS/2, authored by Andrey Vasilkin , 2016 - - -OpenGL not supported by this port. - -Additional optional environment variables: - -SDL_AUDIO_SHARE - Values: 0 or 1, default is 0 - Initializes the device as shareable or exclusively acquired. - -SDL_VIDEODRIVER - Values: DIVE or VMAN, default is DIVE - Use video subsystem: Direct interface video extensions (DIVE) or - Video Manager (VMAN). - -You may significantly increase video output speed with OS4 kernel and patched -files vman.dll and dive.dll or with latest versions of ACPI support and video -driver Panorama. - -Latest versions of OS/4 kernel: - http://gus.biysk.ru/os4/ - (Info: https://www.os2world.com/wiki/index.php/Phoenix_OS/4) - -Patched files vman.dll and dive.dll: - http://gus.biysk.ru/os4/test/pached_dll/PATCHED_DLL.RAR - - -Compiling: ----------- - -Open Watcom 1.9 or newer is tested. For the new Open Watcom V2 fork, see: -https://github.com/open-watcom/ and https://open-watcom.github.io -WATCOM environment variable must to be set to the Open Watcom install -directory. To compile, run: wmake -f Makefile.os2 - - -Installing: ------------ - -- eComStation: - - If you have previously installed SDL2, make a Backup copy of SDL2.dll - located in D:\ecs\dll (where D: is disk on which installed eComStation). - Stop all programs running with SDL2. Copy SDL2.dll to D:\ecs\dll - -- OS/2: - - Copy SDL2.dll to any directory on your LIBPATH. If you have a previous - version installed, close all SDL2 applications before replacing the old - copy. Also make sure that any other older versions of DLLs are removed - from your system. - - -Joysticks in SDL2: ------------------- - -The joystick code in SDL2 is a direct forward-port from the SDL-1.2 version. -Here is the original documentation from SDL-1.2: - -The Joystick detection only works for standard joysticks (2 buttons, 2 axes -and the like). Therefore, if you use a non-standard joystick, you should -specify its features in the SDL_OS2_JOYSTICK environment variable in a batch -file or CONFIG.SYS, so SDL applications can provide full capability to your -device. The syntax is: - -SET SDL_OS2_JOYSTICK=[JOYSTICK_NAME] [AXES] [BUTTONS] [HATS] [BALLS] - -So, it you have a Gravis GamePad with 4 axes, 2 buttons, 2 hats and 0 balls, -the line should be: - -SET SDL_OS2_JOYSTICK=Gravis_GamePad 4 2 2 0 - -If you want to add spaces in your joystick name, just surround it with -quotes or double-quotes: - -SET SDL_OS2_JOYSTICK='Gravis GamePad' 4 2 2 0 - -or - -SET SDL_OS2_JOYSTICK="Gravis GamePad" 4 2 2 0 - - Note however that Balls and Hats are not supported under OS/2, and the -value will be ignored... but it is wise to define these correctly because -in the future those can be supported. - - Also the number of buttons is limited to 2 when using two joysticks, -4 when using one joystick with 4 axes, 6 when using a joystick with 3 axes -and 8 when using a joystick with 2 axes. Notice however these are limitations -of the Joystick Port hardware, not OS/2. +Simple DirectMedia Layer 2 for OS/2 & eComStation +================================================================================ +SDL port for OS/2, authored by Andrey Vasilkin , 2016 + + +OpenGL not supported by this port. + +Additional optional environment variables: + +SDL_AUDIO_SHARE + Values: 0 or 1, default is 0 + Initializes the device as shareable or exclusively acquired. + +SDL_VIDEODRIVER + Values: DIVE or VMAN, default is DIVE + Use video subsystem: Direct interface video extensions (DIVE) or + Video Manager (VMAN). + +You may significantly increase video output speed with OS4 kernel and patched +files vman.dll and dive.dll or with latest versions of ACPI support and video +driver Panorama. + +Latest versions of OS/4 kernel: + http://gus.biysk.ru/os4/ + (Info: https://www.os2world.com/wiki/index.php/Phoenix_OS/4) + +Patched files vman.dll and dive.dll: + http://gus.biysk.ru/os4/test/pached_dll/PATCHED_DLL.RAR + + +Compiling: +---------- + +Open Watcom 1.9 or newer is tested. For the new Open Watcom V2 fork, see: +https://github.com/open-watcom/ and https://open-watcom.github.io +WATCOM environment variable must to be set to the Open Watcom install +directory. To compile, run: wmake -f Makefile.os2 + + +Installing: +----------- + +- eComStation: + + If you have previously installed SDL2, make a Backup copy of SDL2.dll + located in D:\ecs\dll (where D: is disk on which installed eComStation). + Stop all programs running with SDL2. Copy SDL2.dll to D:\ecs\dll + +- OS/2: + + Copy SDL2.dll to any directory on your LIBPATH. If you have a previous + version installed, close all SDL2 applications before replacing the old + copy. Also make sure that any other older versions of DLLs are removed + from your system. + + +Joysticks in SDL2: +------------------ + +The joystick code in SDL2 is a direct forward-port from the SDL-1.2 version. +Here is the original documentation from SDL-1.2: + +The Joystick detection only works for standard joysticks (2 buttons, 2 axes +and the like). Therefore, if you use a non-standard joystick, you should +specify its features in the SDL_OS2_JOYSTICK environment variable in a batch +file or CONFIG.SYS, so SDL applications can provide full capability to your +device. The syntax is: + +SET SDL_OS2_JOYSTICK=[JOYSTICK_NAME] [AXES] [BUTTONS] [HATS] [BALLS] + +So, it you have a Gravis GamePad with 4 axes, 2 buttons, 2 hats and 0 balls, +the line should be: + +SET SDL_OS2_JOYSTICK=Gravis_GamePad 4 2 2 0 + +If you want to add spaces in your joystick name, just surround it with +quotes or double-quotes: + +SET SDL_OS2_JOYSTICK='Gravis GamePad' 4 2 2 0 + +or + +SET SDL_OS2_JOYSTICK="Gravis GamePad" 4 2 2 0 + + Note however that Balls and Hats are not supported under OS/2, and the +value will be ignored... but it is wise to define these correctly because +in the future those can be supported. + + Also the number of buttons is limited to 2 when using two joysticks, +4 when using one joystick with 4 axes, 6 when using a joystick with 3 axes +and 8 when using a joystick with 2 axes. Notice however these are limitations +of the Joystick Port hardware, not OS/2. diff --git a/vs/sdl2/docs/README-pandora.md b/vs/sdl2/docs/README-pandora.md index 68ea774e56d..b89d52602ed 100644 --- a/vs/sdl2/docs/README-pandora.md +++ b/vs/sdl2/docs/README-pandora.md @@ -1,17 +1,17 @@ -Pandora -===================================================================== - -( http://openpandora.org/ ) -- A pandora specific video driver was written to allow SDL 2.0 with OpenGL ES -support to work on the pandora under the framebuffer. This driver do not have -input support for now, so if you use it you will have to add your own control code. -The video driver name is "pandora" so if you have problem running it from -the framebuffer, try to set the following variable before starting your application : -"export SDL_VIDEODRIVER=pandora" - -- OpenGL ES support was added to the x11 driver, so it's working like the normal -x11 driver one with OpenGLX support, with SDL input event's etc.. - - -David Carré (Cpasjuste) -cpasjuste@gmail.com +Pandora +===================================================================== + +( http://openpandora.org/ ) +- A pandora specific video driver was written to allow SDL 2.0 with OpenGL ES +support to work on the pandora under the framebuffer. This driver do not have +input support for now, so if you use it you will have to add your own control code. +The video driver name is "pandora" so if you have problem running it from +the framebuffer, try to set the following variable before starting your application : +"export SDL_VIDEODRIVER=pandora" + +- OpenGL ES support was added to the x11 driver, so it's working like the normal +x11 driver one with OpenGLX support, with SDL input event's etc.. + + +David Carré (Cpasjuste) +cpasjuste@gmail.com diff --git a/vs/sdl2/docs/README-platforms.md b/vs/sdl2/docs/README-platforms.md index 711557dc046..14454ec5d5c 100644 --- a/vs/sdl2/docs/README-platforms.md +++ b/vs/sdl2/docs/README-platforms.md @@ -1,8 +1,8 @@ -Platforms -========= - -We maintain the list of supported platforms on our wiki now, and how to -build and install SDL for those platforms: - - https://wiki.libsdl.org/Installation - +Platforms +========= + +We maintain the list of supported platforms on our wiki now, and how to +build and install SDL for those platforms: + + https://wiki.libsdl.org/Installation + diff --git a/vs/sdl2/docs/README-porting.md b/vs/sdl2/docs/README-porting.md index de305922683..82f35c6283d 100644 --- a/vs/sdl2/docs/README-porting.md +++ b/vs/sdl2/docs/README-porting.md @@ -1,68 +1,68 @@ -Porting -======= - -* Porting To A New Platform - - The first thing you have to do when porting to a new platform, is look at -include/SDL_platform.h and create an entry there for your operating system. -The standard format is "__PLATFORM__", where PLATFORM is the name of the OS. -Ideally SDL_platform.h will be able to auto-detect the system it's building -on based on C preprocessor symbols. - -There are two basic ways of building SDL at the moment: - -1. The "UNIX" way: ./configure; make; make install - - If you have a GNUish system, then you might try this. Edit configure.ac, - take a look at the large section labelled: - - "Set up the configuration based on the host platform!" - - Add a section for your platform, and then re-run autogen.sh and build! - -2. Using an IDE: - - If you're using an IDE or other non-configure build system, you'll probably - want to create a custom SDL_config.h for your platform. Edit SDL_config.h, - add a section for your platform, and create a custom SDL_config_{platform}.h, - based on SDL_config_minimal.h and SDL_config.h.in - - Add the top level include directory to the header search path, and then add - the following sources to the project: - - src/*.c - src/atomic/*.c - src/audio/*.c - src/cpuinfo/*.c - src/events/*.c - src/file/*.c - src/haptic/*.c - src/joystick/*.c - src/power/*.c - src/render/*.c - src/render/software/*.c - src/stdlib/*.c - src/thread/*.c - src/timer/*.c - src/video/*.c - src/audio/disk/*.c - src/audio/dummy/*.c - src/filesystem/dummy/*.c - src/video/dummy/*.c - src/haptic/dummy/*.c - src/joystick/dummy/*.c - src/main/dummy/*.c - src/thread/generic/*.c - src/timer/dummy/*.c - src/loadso/dummy/*.c - - -Once you have a working library without any drivers, you can go back to each -of the major subsystems and start implementing drivers for your platform. - -If you have any questions, don't hesitate to ask on the SDL mailing list: - http://www.libsdl.org/mailing-list.php - -Enjoy! - Sam Lantinga (slouken@libsdl.org) - +Porting +======= + +* Porting To A New Platform + + The first thing you have to do when porting to a new platform, is look at +include/SDL_platform.h and create an entry there for your operating system. +The standard format is "__PLATFORM__", where PLATFORM is the name of the OS. +Ideally SDL_platform.h will be able to auto-detect the system it's building +on based on C preprocessor symbols. + +There are two basic ways of building SDL at the moment: + +1. The "UNIX" way: ./configure; make; make install + + If you have a GNUish system, then you might try this. Edit configure.ac, + take a look at the large section labelled: + + "Set up the configuration based on the host platform!" + + Add a section for your platform, and then re-run autogen.sh and build! + +2. Using an IDE: + + If you're using an IDE or other non-configure build system, you'll probably + want to create a custom SDL_config.h for your platform. Edit SDL_config.h, + add a section for your platform, and create a custom SDL_config_{platform}.h, + based on SDL_config_minimal.h and SDL_config.h.in + + Add the top level include directory to the header search path, and then add + the following sources to the project: + + src/*.c + src/atomic/*.c + src/audio/*.c + src/cpuinfo/*.c + src/events/*.c + src/file/*.c + src/haptic/*.c + src/joystick/*.c + src/power/*.c + src/render/*.c + src/render/software/*.c + src/stdlib/*.c + src/thread/*.c + src/timer/*.c + src/video/*.c + src/audio/disk/*.c + src/audio/dummy/*.c + src/filesystem/dummy/*.c + src/video/dummy/*.c + src/haptic/dummy/*.c + src/joystick/dummy/*.c + src/main/dummy/*.c + src/thread/generic/*.c + src/timer/dummy/*.c + src/loadso/dummy/*.c + + +Once you have a working library without any drivers, you can go back to each +of the major subsystems and start implementing drivers for your platform. + +If you have any questions, don't hesitate to ask on the SDL mailing list: + http://www.libsdl.org/mailing-list.php + +Enjoy! + Sam Lantinga (slouken@libsdl.org) + diff --git a/vs/sdl2/docs/README-ps2.md b/vs/sdl2/docs/README-ps2.md index f422da9edb5..3f07580d142 100644 --- a/vs/sdl2/docs/README-ps2.md +++ b/vs/sdl2/docs/README-ps2.md @@ -1,51 +1,51 @@ -PS2 -====== -SDL2 port for the Sony Playstation 2 contributed by: -- Francisco Javier Trujillo Mata - - -Credit to - - The guys that ported SDL to PSP & Vita because I'm taking them as reference. - - David G. F. for helping me with several issues and tests. - -## Building -To build SDL2 library for the PS2, make sure you have the latest PS2Dev status and run: -```bash -cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$PS2DEV/ps2sdk/ps2dev.cmake -cmake --build build -cmake --install build -``` - -## Hints -The PS2 port has a special Hint for having a dynamic VSYNC. The Hint is `SDL_HINT_PS2_DYNAMIC_VSYNC`. -If you enabled the dynamic vsync having as well `SDL_RENDERER_PRESENTVSYNC` enabled, then if the app is not able to run at 60 FPS, automatically the `vsync` will be disabled having a better performance, instead of droping FPS to 30. - -## Notes -If you trying to debug a SDL app through [ps2client](https://github.com/ps2dev/ps2client) you need to avoid the IOP reset, otherwise you will lose the conection with your computer. -So to avoid the reset of the IOP CPU, you need to call to the macro `SDL_PS2_SKIP_IOP_RESET();`. -It could be something similar as: -```c -..... - -SDL_PS2_SKIP_IOP_RESET(); - -int main(int argc, char *argv[]) -{ -..... -``` -For a release binary is recommendable to reset the IOP always. - -Remember to do a clean compilation everytime you enable or disable the `SDL_PS2_SKIP_IOP_RESET` otherwise the change won't be reflected. - -## Getting PS2 Dev -[Installing PS2 Dev](https://github.com/ps2dev/ps2dev) - -## Running on PCSX2 Emulator -[PCSX2](https://github.com/PCSX2/pcsx2) - -[More PCSX2 information](https://pcsx2.net/) - -## To Do -- PS2 Screen Keyboard -- Dialogs -- Others +PS2 +====== +SDL2 port for the Sony Playstation 2 contributed by: +- Francisco Javier Trujillo Mata + + +Credit to + - The guys that ported SDL to PSP & Vita because I'm taking them as reference. + - David G. F. for helping me with several issues and tests. + +## Building +To build SDL2 library for the PS2, make sure you have the latest PS2Dev status and run: +```bash +cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$PS2DEV/ps2sdk/ps2dev.cmake +cmake --build build +cmake --install build +``` + +## Hints +The PS2 port has a special Hint for having a dynamic VSYNC. The Hint is `SDL_HINT_PS2_DYNAMIC_VSYNC`. +If you enabled the dynamic vsync having as well `SDL_RENDERER_PRESENTVSYNC` enabled, then if the app is not able to run at 60 FPS, automatically the `vsync` will be disabled having a better performance, instead of droping FPS to 30. + +## Notes +If you trying to debug a SDL app through [ps2client](https://github.com/ps2dev/ps2client) you need to avoid the IOP reset, otherwise you will lose the conection with your computer. +So to avoid the reset of the IOP CPU, you need to call to the macro `SDL_PS2_SKIP_IOP_RESET();`. +It could be something similar as: +```c +..... + +SDL_PS2_SKIP_IOP_RESET(); + +int main(int argc, char *argv[]) +{ +..... +``` +For a release binary is recommendable to reset the IOP always. + +Remember to do a clean compilation everytime you enable or disable the `SDL_PS2_SKIP_IOP_RESET` otherwise the change won't be reflected. + +## Getting PS2 Dev +[Installing PS2 Dev](https://github.com/ps2dev/ps2dev) + +## Running on PCSX2 Emulator +[PCSX2](https://github.com/PCSX2/pcsx2) + +[More PCSX2 information](https://pcsx2.net/) + +## To Do +- PS2 Screen Keyboard +- Dialogs +- Others diff --git a/vs/sdl2/docs/README-psp.md b/vs/sdl2/docs/README-psp.md index 96ecd762d9f..0c5380feaa1 100644 --- a/vs/sdl2/docs/README-psp.md +++ b/vs/sdl2/docs/README-psp.md @@ -1,36 +1,36 @@ -PSP -====== -SDL2 port for the Sony PSP contributed by: -- Captian Lex -- Francisco Javier Trujillo Mata -- Wouter Wijsman - - -Credit to - Marcus R.Brown,Jim Paris,Matthew H for the original SDL 1.2 for PSP - Geecko for his PSP GU lib "Glib2d" - -## Building -To build SDL2 library for the PSP, make sure you have the latest PSPDev status and run: -```bash -cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$PSPDEV/psp/share/pspdev.cmake -cmake --build build -cmake --install build -``` - - -## Getting PSP Dev -[Installing PSP Dev](https://github.com/pspdev/pspdev) - -## Running on PPSSPP Emulator -[PPSSPP](https://github.com/hrydgard/ppsspp) - -[Build Instructions](https://github.com/hrydgard/ppsspp/wiki/Build-instructions) - - -## Compiling a HelloWorld -[PSP Hello World](https://psp-dev.org/doku.php?id=tutorial:hello_world) - -## To Do -- PSP Screen Keyboard -- Dialogs +PSP +====== +SDL2 port for the Sony PSP contributed by: +- Captian Lex +- Francisco Javier Trujillo Mata +- Wouter Wijsman + + +Credit to + Marcus R.Brown,Jim Paris,Matthew H for the original SDL 1.2 for PSP + Geecko for his PSP GU lib "Glib2d" + +## Building +To build SDL2 library for the PSP, make sure you have the latest PSPDev status and run: +```bash +cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$PSPDEV/psp/share/pspdev.cmake +cmake --build build +cmake --install build +``` + + +## Getting PSP Dev +[Installing PSP Dev](https://github.com/pspdev/pspdev) + +## Running on PPSSPP Emulator +[PPSSPP](https://github.com/hrydgard/ppsspp) + +[Build Instructions](https://github.com/hrydgard/ppsspp/wiki/Build-instructions) + + +## Compiling a HelloWorld +[PSP Hello World](https://psp-dev.org/doku.php?id=tutorial:hello_world) + +## To Do +- PSP Screen Keyboard +- Dialogs diff --git a/vs/sdl2/docs/README-raspberrypi.md b/vs/sdl2/docs/README-raspberrypi.md index 7f9bfb19af9..f2f24c74e9c 100644 --- a/vs/sdl2/docs/README-raspberrypi.md +++ b/vs/sdl2/docs/README-raspberrypi.md @@ -1,180 +1,180 @@ -Raspberry Pi -============ - -Requirements: - -Raspbian (other Linux distros may work as well). - -Features --------- - -* Works without X11 -* Hardware accelerated OpenGL ES 2.x -* Sound via ALSA -* Input (mouse/keyboard/joystick) via EVDEV -* Hotplugging of input devices via UDEV - - -Raspbian Build Dependencies ---------------------------- - -sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev - -You also need the VideoCore binary stuff that ships in /opt/vc for EGL and -OpenGL ES 2.x, it usually comes pre-installed, but in any case: - -sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev - - -NEON ----- - -If your Pi has NEON support, make sure you add -mfpu=neon to your CFLAGS so -that SDL will select some otherwise-disabled highly-optimized code. The -original Pi units don't have NEON, the Pi2 probably does, and the Pi3 -definitely does. - - -Cross compiling from x86 Linux ------------------------------- - -To cross compile SDL for Raspbian from your desktop machine, you'll need a -Raspbian system root and the cross compilation tools. We'll assume these tools -will be placed in /opt/rpi-tools - - sudo git clone --depth 1 https://github.com/raspberrypi/tools /opt/rpi-tools - -You'll also need a Raspbian binary image. -Get it from: http://downloads.raspberrypi.org/raspbian_latest -After unzipping, you'll get file with a name like: "-wheezy-raspbian.img" -Let's assume the sysroot will be built in /opt/rpi-sysroot. - - export SYSROOT=/opt/rpi-sysroot - sudo kpartx -a -v .img - sudo mount -o loop /dev/mapper/loop0p2 /mnt - sudo cp -r /mnt $SYSROOT - sudo apt-get install qemu binfmt-support qemu-user-static - sudo cp /usr/bin/qemu-arm-static $SYSROOT/usr/bin - sudo mount --bind /dev $SYSROOT/dev - sudo mount --bind /proc $SYSROOT/proc - sudo mount --bind /sys $SYSROOT/sys - -Now, before chrooting into the ARM sysroot, you'll need to apply a workaround, -edit $SYSROOT/etc/ld.so.preload and comment out all lines in it. - - sudo chroot $SYSROOT - apt-get install libudev-dev libasound2-dev libdbus-1-dev libraspberrypi0 libraspberrypi-bin libraspberrypi-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev - exit - sudo umount $SYSROOT/dev - sudo umount $SYSROOT/proc - sudo umount $SYSROOT/sys - sudo umount /mnt - -There's one more fix required, as the libdl.so symlink uses an absolute path -which doesn't quite work in our setup. - - sudo rm -rf $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so - sudo ln -s ../../../lib/arm-linux-gnueabihf/libdl.so.2 $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so - -The final step is compiling SDL itself. - - export CC="/opt/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --sysroot=$SYSROOT -I$SYSROOT/opt/vc/include -I$SYSROOT/usr/include -I$SYSROOT/opt/vc/include/interface/vcos/pthreads -I$SYSROOT/opt/vc/include/interface/vmcs_host/linux" - cd - mkdir -p build;cd build - LDFLAGS="-L$SYSROOT/opt/vc/lib" ../configure --with-sysroot=$SYSROOT --host=arm-raspberry-linux-gnueabihf --prefix=$PWD/rpi-sdl2-installed --disable-pulseaudio --disable-esd - make - make install - -To be able to deploy this to /usr/local in the Raspbian system you need to fix up a few paths: - - perl -w -pi -e "s#$PWD/rpi-sdl2-installed#/usr/local#g;" ./rpi-sdl2-installed/lib/libSDL2.la ./rpi-sdl2-installed/lib/pkgconfig/sdl2.pc ./rpi-sdl2-installed/bin/sdl2-config - -Apps don't work or poor video/audio performance ------------------------------------------------ - -If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to -update the RPi's firmware. Note that doing so will fix these problems, but it -will also render the CMA - Dynamic Memory Split functionality useless. - -Also, by default the Raspbian distro configures the GPU RAM at 64MB, this is too -low in general, specially if a 1080p TV is hooked up. - -See here how to configure this setting: http://elinux.org/RPiconfig - -Using a fixed gpu_mem=128 is the best option (specially if you updated the -firmware, using CMA probably won't work, at least it's the current case). - -No input --------- - -Make sure you belong to the "input" group. - - sudo usermod -aG input `whoami` - -No HDMI Audio -------------- - -If you notice that ALSA works but there's no audio over HDMI, try adding: - - hdmi_drive=2 - -to your config.txt file and reboot. - -Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062 - -Text Input API support ----------------------- - -The Text Input API is supported, with translation of scan codes done via the -kernel symbol tables. For this to work, SDL needs access to a valid console. -If you notice there's no SDL_TEXTINPUT message being emitted, double check that -your app has read access to one of the following: - -* /proc/self/fd/0 -* /dev/tty -* /dev/tty[0...6] -* /dev/vc/0 -* /dev/console - -This is usually not a problem if you run from the physical terminal (as opposed -to running from a pseudo terminal, such as via SSH). If running from a PTS, a -quick workaround is to run your app as root or add yourself to the tty group, -then re-login to the system. - - sudo usermod -aG tty `whoami` - -The keyboard layout used by SDL is the same as the one the kernel uses. -To configure the layout on Raspbian: - - sudo dpkg-reconfigure keyboard-configuration - -To configure the locale, which controls which keys are interpreted as letters, -this determining the CAPS LOCK behavior: - - sudo dpkg-reconfigure locales - - -OpenGL problems ---------------- - -If you have desktop OpenGL headers installed at build time in your RPi or cross -compilation environment, support for it will be built in. However, the chipset -does not actually have support for it, which causes issues in certain SDL apps -since the presence of OpenGL support supersedes the ES/ES2 variants. -The workaround is to disable OpenGL at configuration time: - - ./configure --disable-video-opengl - -Or if the application uses the Render functions, you can use the SDL_RENDER_DRIVER -environment variable: - - export SDL_RENDER_DRIVER=opengles2 - -Notes ------ - -* When launching apps remotely (via SSH), SDL can prevent local keystrokes from - leaking into the console only if it has root privileges. Launching apps locally - does not suffer from this issue. - - +Raspberry Pi +============ + +Requirements: + +Raspbian (other Linux distros may work as well). + +Features +-------- + +* Works without X11 +* Hardware accelerated OpenGL ES 2.x +* Sound via ALSA +* Input (mouse/keyboard/joystick) via EVDEV +* Hotplugging of input devices via UDEV + + +Raspbian Build Dependencies +--------------------------- + +sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev + +You also need the VideoCore binary stuff that ships in /opt/vc for EGL and +OpenGL ES 2.x, it usually comes pre-installed, but in any case: + +sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev + + +NEON +---- + +If your Pi has NEON support, make sure you add -mfpu=neon to your CFLAGS so +that SDL will select some otherwise-disabled highly-optimized code. The +original Pi units don't have NEON, the Pi2 probably does, and the Pi3 +definitely does. + + +Cross compiling from x86 Linux +------------------------------ + +To cross compile SDL for Raspbian from your desktop machine, you'll need a +Raspbian system root and the cross compilation tools. We'll assume these tools +will be placed in /opt/rpi-tools + + sudo git clone --depth 1 https://github.com/raspberrypi/tools /opt/rpi-tools + +You'll also need a Raspbian binary image. +Get it from: http://downloads.raspberrypi.org/raspbian_latest +After unzipping, you'll get file with a name like: "-wheezy-raspbian.img" +Let's assume the sysroot will be built in /opt/rpi-sysroot. + + export SYSROOT=/opt/rpi-sysroot + sudo kpartx -a -v .img + sudo mount -o loop /dev/mapper/loop0p2 /mnt + sudo cp -r /mnt $SYSROOT + sudo apt-get install qemu binfmt-support qemu-user-static + sudo cp /usr/bin/qemu-arm-static $SYSROOT/usr/bin + sudo mount --bind /dev $SYSROOT/dev + sudo mount --bind /proc $SYSROOT/proc + sudo mount --bind /sys $SYSROOT/sys + +Now, before chrooting into the ARM sysroot, you'll need to apply a workaround, +edit $SYSROOT/etc/ld.so.preload and comment out all lines in it. + + sudo chroot $SYSROOT + apt-get install libudev-dev libasound2-dev libdbus-1-dev libraspberrypi0 libraspberrypi-bin libraspberrypi-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev + exit + sudo umount $SYSROOT/dev + sudo umount $SYSROOT/proc + sudo umount $SYSROOT/sys + sudo umount /mnt + +There's one more fix required, as the libdl.so symlink uses an absolute path +which doesn't quite work in our setup. + + sudo rm -rf $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so + sudo ln -s ../../../lib/arm-linux-gnueabihf/libdl.so.2 $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so + +The final step is compiling SDL itself. + + export CC="/opt/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --sysroot=$SYSROOT -I$SYSROOT/opt/vc/include -I$SYSROOT/usr/include -I$SYSROOT/opt/vc/include/interface/vcos/pthreads -I$SYSROOT/opt/vc/include/interface/vmcs_host/linux" + cd + mkdir -p build;cd build + LDFLAGS="-L$SYSROOT/opt/vc/lib" ../configure --with-sysroot=$SYSROOT --host=arm-raspberry-linux-gnueabihf --prefix=$PWD/rpi-sdl2-installed --disable-pulseaudio --disable-esd + make + make install + +To be able to deploy this to /usr/local in the Raspbian system you need to fix up a few paths: + + perl -w -pi -e "s#$PWD/rpi-sdl2-installed#/usr/local#g;" ./rpi-sdl2-installed/lib/libSDL2.la ./rpi-sdl2-installed/lib/pkgconfig/sdl2.pc ./rpi-sdl2-installed/bin/sdl2-config + +Apps don't work or poor video/audio performance +----------------------------------------------- + +If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to +update the RPi's firmware. Note that doing so will fix these problems, but it +will also render the CMA - Dynamic Memory Split functionality useless. + +Also, by default the Raspbian distro configures the GPU RAM at 64MB, this is too +low in general, specially if a 1080p TV is hooked up. + +See here how to configure this setting: http://elinux.org/RPiconfig + +Using a fixed gpu_mem=128 is the best option (specially if you updated the +firmware, using CMA probably won't work, at least it's the current case). + +No input +-------- + +Make sure you belong to the "input" group. + + sudo usermod -aG input `whoami` + +No HDMI Audio +------------- + +If you notice that ALSA works but there's no audio over HDMI, try adding: + + hdmi_drive=2 + +to your config.txt file and reboot. + +Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062 + +Text Input API support +---------------------- + +The Text Input API is supported, with translation of scan codes done via the +kernel symbol tables. For this to work, SDL needs access to a valid console. +If you notice there's no SDL_TEXTINPUT message being emitted, double check that +your app has read access to one of the following: + +* /proc/self/fd/0 +* /dev/tty +* /dev/tty[0...6] +* /dev/vc/0 +* /dev/console + +This is usually not a problem if you run from the physical terminal (as opposed +to running from a pseudo terminal, such as via SSH). If running from a PTS, a +quick workaround is to run your app as root or add yourself to the tty group, +then re-login to the system. + + sudo usermod -aG tty `whoami` + +The keyboard layout used by SDL is the same as the one the kernel uses. +To configure the layout on Raspbian: + + sudo dpkg-reconfigure keyboard-configuration + +To configure the locale, which controls which keys are interpreted as letters, +this determining the CAPS LOCK behavior: + + sudo dpkg-reconfigure locales + + +OpenGL problems +--------------- + +If you have desktop OpenGL headers installed at build time in your RPi or cross +compilation environment, support for it will be built in. However, the chipset +does not actually have support for it, which causes issues in certain SDL apps +since the presence of OpenGL support supersedes the ES/ES2 variants. +The workaround is to disable OpenGL at configuration time: + + ./configure --disable-video-opengl + +Or if the application uses the Render functions, you can use the SDL_RENDER_DRIVER +environment variable: + + export SDL_RENDER_DRIVER=opengles2 + +Notes +----- + +* When launching apps remotely (via SSH), SDL can prevent local keystrokes from + leaking into the console only if it has root privileges. Launching apps locally + does not suffer from this issue. + + diff --git a/vs/sdl2/docs/README-riscos.md b/vs/sdl2/docs/README-riscos.md index e4e056b3b52..76b27e0aa3c 100644 --- a/vs/sdl2/docs/README-riscos.md +++ b/vs/sdl2/docs/README-riscos.md @@ -1,41 +1,41 @@ -RISC OS -======= - -Requirements: - -* RISC OS 3.5 or later. -* [SharedUnixLibrary](http://www.riscos.info/packages/LibraryDetails.html#SharedUnixLibraryarm). -* [DigitalRenderer](http://www.riscos.info/packages/LibraryDetails.html#DRendererarm), for audio support. -* [Iconv](http://www.netsurf-browser.org/projects/iconv/), for `SDL_iconv` and related functions. - - -Compiling: ----------- - -Currently, SDL2 for RISC OS only supports compiling with GCCSDK under Linux. Both the autoconf and CMake build systems are supported. - -The following commands can be used to build SDL2 for RISC OS using autoconf: - - ./configure --host=arm-unknown-riscos --prefix=$GCCSDK_INSTALL_ENV --disable-gcc-atomics - make - make install - -The following commands can be used to build SDL2 for RISC OS using CMake: - - cmake -Bbuild-riscos -DCMAKE_TOOLCHAIN_FILE=$GCCSDK_INSTALL_ENV/toolchain-riscos.cmake -DRISCOS=ON -DCMAKE_INSTALL_PREFIX=$GCCSDK_INSTALL_ENV -DCMAKE_BUILD_TYPE=Release -DSDL_GCC_ATOMICS=OFF - cmake --build build-riscos - cmake --build build-riscos --target install - - -Current level of implementation -------------------------------- - -The video driver currently provides full screen video support with keyboard and mouse input. Windowed mode is not yet supported, but is planned in the future. Only software rendering is supported. - -The filesystem APIs return either Unix-style paths or RISC OS-style paths based on the value of the `__riscosify_control` symbol, as is standard for UnixLib functions. - -The audio, loadso, thread and timer APIs are currently provided by UnixLib. - -GCC atomics are currently broken on some platforms, meaning it's currently necessary to compile with `--disable-gcc-atomics` using autotools or `-DSDL_GCC_ATOMICS=OFF` using CMake. - -The joystick, locale and power APIs are not yet implemented. +RISC OS +======= + +Requirements: + +* RISC OS 3.5 or later. +* [SharedUnixLibrary](http://www.riscos.info/packages/LibraryDetails.html#SharedUnixLibraryarm). +* [DigitalRenderer](http://www.riscos.info/packages/LibraryDetails.html#DRendererarm), for audio support. +* [Iconv](http://www.netsurf-browser.org/projects/iconv/), for `SDL_iconv` and related functions. + + +Compiling: +---------- + +Currently, SDL2 for RISC OS only supports compiling with GCCSDK under Linux. Both the autoconf and CMake build systems are supported. + +The following commands can be used to build SDL2 for RISC OS using autoconf: + + ./configure --host=arm-unknown-riscos --prefix=$GCCSDK_INSTALL_ENV --disable-gcc-atomics + make + make install + +The following commands can be used to build SDL2 for RISC OS using CMake: + + cmake -Bbuild-riscos -DCMAKE_TOOLCHAIN_FILE=$GCCSDK_INSTALL_ENV/toolchain-riscos.cmake -DRISCOS=ON -DCMAKE_INSTALL_PREFIX=$GCCSDK_INSTALL_ENV -DCMAKE_BUILD_TYPE=Release -DSDL_GCC_ATOMICS=OFF + cmake --build build-riscos + cmake --build build-riscos --target install + + +Current level of implementation +------------------------------- + +The video driver currently provides full screen video support with keyboard and mouse input. Windowed mode is not yet supported, but is planned in the future. Only software rendering is supported. + +The filesystem APIs return either Unix-style paths or RISC OS-style paths based on the value of the `__riscosify_control` symbol, as is standard for UnixLib functions. + +The audio, loadso, thread and timer APIs are currently provided by UnixLib. + +GCC atomics are currently broken on some platforms, meaning it's currently necessary to compile with `--disable-gcc-atomics` using autotools or `-DSDL_GCC_ATOMICS=OFF` using CMake. + +The joystick, locale and power APIs are not yet implemented. diff --git a/vs/sdl2/docs/README-touch.md b/vs/sdl2/docs/README-touch.md index 66c1b2b32f6..1a23f351a52 100644 --- a/vs/sdl2/docs/README-touch.md +++ b/vs/sdl2/docs/README-touch.md @@ -1,86 +1,86 @@ -Touch -=========================================================================== -System Specific Notes -=========================================================================== -Linux: -The linux touch system is currently based off event streams, and proc/bus/devices. The active user must be given permissions to read /dev/input/TOUCHDEVICE, where TOUCHDEVICE is the event stream for your device. Currently only Wacom tablets are supported. If you have an unsupported tablet contact me at jim.tla+sdl_touch@gmail.com and I will help you get support for it. - -Mac: -The Mac and iPhone APIs are pretty. If your touch device supports them then you'll be fine. If it doesn't, then there isn't much we can do. - -iPhone: -Works out of box. - -Windows: -Unfortunately there is no windows support as of yet. Support for Windows 7 is planned, but we currently have no way to test. If you have a Windows 7 WM_TOUCH supported device, and are willing to help test please contact me at jim.tla+sdl_touch@gmail.com - -=========================================================================== -Events -=========================================================================== -SDL_FINGERDOWN: -Sent when a finger (or stylus) is placed on a touch device. -Fields: -* event.tfinger.touchId - the Id of the touch device. -* event.tfinger.fingerId - the Id of the finger which just went down. -* event.tfinger.x - the x coordinate of the touch (0..1) -* event.tfinger.y - the y coordinate of the touch (0..1) -* event.tfinger.pressure - the pressure of the touch (0..1) - -SDL_FINGERMOTION: -Sent when a finger (or stylus) is moved on the touch device. -Fields: -Same as SDL_FINGERDOWN but with additional: -* event.tfinger.dx - change in x coordinate during this motion event. -* event.tfinger.dy - change in y coordinate during this motion event. - -SDL_FINGERUP: -Sent when a finger (or stylus) is lifted from the touch device. -Fields: -Same as SDL_FINGERDOWN. - - -=========================================================================== -Functions -=========================================================================== -SDL provides the ability to access the underlying SDL_Finger structures. -These structures should _never_ be modified. - -The following functions are included from SDL_touch.h - -To get a SDL_TouchID call SDL_GetTouchDevice(int index). -This returns a SDL_TouchID. -IMPORTANT: If the touch has been removed, or there is no touch with the given index, SDL_GetTouchDevice() will return 0. Be sure to check for this! - -The number of touch devices can be queried with SDL_GetNumTouchDevices(). - -A SDL_TouchID may be used to get pointers to SDL_Finger. - -SDL_GetNumTouchFingers(touchID) may be used to get the number of fingers currently down on the device. - -The most common reason to access SDL_Finger is to query the fingers outside the event. In most cases accessing the fingers is using the event. This would be accomplished by code like the following: - - float x = event.tfinger.x; - float y = event.tfinger.y; - - - -To get a SDL_Finger, call SDL_GetTouchFinger(SDL_TouchID touchID, int index), where touchID is a SDL_TouchID, and index is the requested finger. -This returns a SDL_Finger *, or NULL if the finger does not exist, or has been removed. -A SDL_Finger is guaranteed to be persistent for the duration of a touch, but it will be de-allocated as soon as the finger is removed. This occurs when the SDL_FINGERUP event is _added_ to the event queue, and thus _before_ the SDL_FINGERUP event is polled. -As a result, be very careful to check for NULL return values. - -A SDL_Finger has the following fields: -* x, y: - The current coordinates of the touch. -* pressure: - The pressure of the touch. - - -=========================================================================== -Notes -=========================================================================== -For a complete example see test/testgesture.c - -Please direct questions/comments to: - jim.tla+sdl_touch@gmail.com - (original author, API was changed since) +Touch +=========================================================================== +System Specific Notes +=========================================================================== +Linux: +The linux touch system is currently based off event streams, and proc/bus/devices. The active user must be given permissions to read /dev/input/TOUCHDEVICE, where TOUCHDEVICE is the event stream for your device. Currently only Wacom tablets are supported. If you have an unsupported tablet contact me at jim.tla+sdl_touch@gmail.com and I will help you get support for it. + +Mac: +The Mac and iPhone APIs are pretty. If your touch device supports them then you'll be fine. If it doesn't, then there isn't much we can do. + +iPhone: +Works out of box. + +Windows: +Unfortunately there is no windows support as of yet. Support for Windows 7 is planned, but we currently have no way to test. If you have a Windows 7 WM_TOUCH supported device, and are willing to help test please contact me at jim.tla+sdl_touch@gmail.com + +=========================================================================== +Events +=========================================================================== +SDL_FINGERDOWN: +Sent when a finger (or stylus) is placed on a touch device. +Fields: +* event.tfinger.touchId - the Id of the touch device. +* event.tfinger.fingerId - the Id of the finger which just went down. +* event.tfinger.x - the x coordinate of the touch (0..1) +* event.tfinger.y - the y coordinate of the touch (0..1) +* event.tfinger.pressure - the pressure of the touch (0..1) + +SDL_FINGERMOTION: +Sent when a finger (or stylus) is moved on the touch device. +Fields: +Same as SDL_FINGERDOWN but with additional: +* event.tfinger.dx - change in x coordinate during this motion event. +* event.tfinger.dy - change in y coordinate during this motion event. + +SDL_FINGERUP: +Sent when a finger (or stylus) is lifted from the touch device. +Fields: +Same as SDL_FINGERDOWN. + + +=========================================================================== +Functions +=========================================================================== +SDL provides the ability to access the underlying SDL_Finger structures. +These structures should _never_ be modified. + +The following functions are included from SDL_touch.h + +To get a SDL_TouchID call SDL_GetTouchDevice(int index). +This returns a SDL_TouchID. +IMPORTANT: If the touch has been removed, or there is no touch with the given index, SDL_GetTouchDevice() will return 0. Be sure to check for this! + +The number of touch devices can be queried with SDL_GetNumTouchDevices(). + +A SDL_TouchID may be used to get pointers to SDL_Finger. + +SDL_GetNumTouchFingers(touchID) may be used to get the number of fingers currently down on the device. + +The most common reason to access SDL_Finger is to query the fingers outside the event. In most cases accessing the fingers is using the event. This would be accomplished by code like the following: + + float x = event.tfinger.x; + float y = event.tfinger.y; + + + +To get a SDL_Finger, call SDL_GetTouchFinger(SDL_TouchID touchID, int index), where touchID is a SDL_TouchID, and index is the requested finger. +This returns a SDL_Finger *, or NULL if the finger does not exist, or has been removed. +A SDL_Finger is guaranteed to be persistent for the duration of a touch, but it will be de-allocated as soon as the finger is removed. This occurs when the SDL_FINGERUP event is _added_ to the event queue, and thus _before_ the SDL_FINGERUP event is polled. +As a result, be very careful to check for NULL return values. + +A SDL_Finger has the following fields: +* x, y: + The current coordinates of the touch. +* pressure: + The pressure of the touch. + + +=========================================================================== +Notes +=========================================================================== +For a complete example see test/testgesture.c + +Please direct questions/comments to: + jim.tla+sdl_touch@gmail.com + (original author, API was changed since) diff --git a/vs/sdl2/docs/README-versions.md b/vs/sdl2/docs/README-versions.md index d54bf40c1ce..097dba1c7b7 100644 --- a/vs/sdl2/docs/README-versions.md +++ b/vs/sdl2/docs/README-versions.md @@ -1,60 +1,60 @@ -# Versioning - -## Since 2.23.0 - -SDL follows an "odd/even" versioning policy, similar to GLib, GTK, Flatpak -and older versions of the Linux kernel: - -* The major version (first part) increases when backwards compatibility - is broken, which will happen infrequently. - -* If the minor version (second part) is divisible by 2 - (for example 2.24.x, 2.26.x), this indicates a version of SDL that - is believed to be stable and suitable for production use. - - * In stable releases, the patchlevel or micro version (third part) - indicates bugfix releases. Bugfix releases should not add or - remove ABI, so the ".0" release (for example 2.24.0) should be - forwards-compatible with all the bugfix releases from the - same cycle (for example 2.24.1). - - * The minor version increases when new API or ABI is added, or when - other significant changes are made. Newer minor versions are - backwards-compatible, but not fully forwards-compatible. - For example, programs built against SDL 2.24.x should work fine - with SDL 2.26.x, but programs built against SDL 2.26.x will not - necessarily work with 2.24.x. - -* If the minor version (second part) is not divisible by 2 - (for example 2.23.x, 2.25.x), this indicates a development prerelease - of SDL that is not suitable for stable software distributions. - Use with caution. - - * The patchlevel or micro version (third part) increases with - each prerelease. - - * Each prerelease might add new API and/or ABI. - - * Prereleases are backwards-compatible with older stable branches. - For example, 2.25.x will be backwards-compatible with 2.24.x. - - * Prereleases are not guaranteed to be backwards-compatible with - each other. For example, new API or ABI added in 2.25.1 - might be removed or changed in 2.25.2. - If this would be a problem for you, please do not use prereleases. - - * Only upgrade to a prerelease if you can guarantee that you will - promptly upgrade to the stable release that follows it. - For example, do not upgrade to 2.23.x unless you will be able to - upgrade to 2.24.0 when it becomes available. - - * Software distributions that have a freeze policy (in particular Linux - distributions with a release cycle, such as Debian and Fedora) - should usually only package stable releases, and not prereleases. - -## Before 2.23.0 - -Older versions of SDL followed a similar policy, but instead of the -odd/even rule applying to the minor version, it applied to the patchlevel -(micro version, third part). For example, 2.0.22 was a stable release -and 2.0.21 was a prerelease. +# Versioning + +## Since 2.23.0 + +SDL follows an "odd/even" versioning policy, similar to GLib, GTK, Flatpak +and older versions of the Linux kernel: + +* The major version (first part) increases when backwards compatibility + is broken, which will happen infrequently. + +* If the minor version (second part) is divisible by 2 + (for example 2.24.x, 2.26.x), this indicates a version of SDL that + is believed to be stable and suitable for production use. + + * In stable releases, the patchlevel or micro version (third part) + indicates bugfix releases. Bugfix releases should not add or + remove ABI, so the ".0" release (for example 2.24.0) should be + forwards-compatible with all the bugfix releases from the + same cycle (for example 2.24.1). + + * The minor version increases when new API or ABI is added, or when + other significant changes are made. Newer minor versions are + backwards-compatible, but not fully forwards-compatible. + For example, programs built against SDL 2.24.x should work fine + with SDL 2.26.x, but programs built against SDL 2.26.x will not + necessarily work with 2.24.x. + +* If the minor version (second part) is not divisible by 2 + (for example 2.23.x, 2.25.x), this indicates a development prerelease + of SDL that is not suitable for stable software distributions. + Use with caution. + + * The patchlevel or micro version (third part) increases with + each prerelease. + + * Each prerelease might add new API and/or ABI. + + * Prereleases are backwards-compatible with older stable branches. + For example, 2.25.x will be backwards-compatible with 2.24.x. + + * Prereleases are not guaranteed to be backwards-compatible with + each other. For example, new API or ABI added in 2.25.1 + might be removed or changed in 2.25.2. + If this would be a problem for you, please do not use prereleases. + + * Only upgrade to a prerelease if you can guarantee that you will + promptly upgrade to the stable release that follows it. + For example, do not upgrade to 2.23.x unless you will be able to + upgrade to 2.24.0 when it becomes available. + + * Software distributions that have a freeze policy (in particular Linux + distributions with a release cycle, such as Debian and Fedora) + should usually only package stable releases, and not prereleases. + +## Before 2.23.0 + +Older versions of SDL followed a similar policy, but instead of the +odd/even rule applying to the minor version, it applied to the patchlevel +(micro version, third part). For example, 2.0.22 was a stable release +and 2.0.21 was a prerelease. diff --git a/vs/sdl2/docs/README-visualc.md b/vs/sdl2/docs/README-visualc.md index fd34b35e1da..fb0edb9ef30 100644 --- a/vs/sdl2/docs/README-visualc.md +++ b/vs/sdl2/docs/README-visualc.md @@ -1,114 +1,114 @@ -Using SDL with Microsoft Visual C++ -=================================== - -### by Lion Kimbro with additions by James Turk - -You can either use the precompiled libraries from the [SDL](https://www.libsdl.org/download.php) web site, or you can build SDL -yourself. - -### Building SDL - -0. To build SDL, your machine must, at a minimum, have the DirectX9.0c SDK installed. It may or may not be retrievable from -the [Microsoft](https://www.microsoft.com) website, so you might need to locate it [online](https://duckduckgo.com/?q=directx9.0c+sdk+download&t=h_&ia=web). -_Editor's note: I've been able to successfully build SDL using Visual Studio 2019 **without** the DX9.0c SDK_ - -1. Open the Visual Studio solution file at `./VisualC/SDL.sln`. - -2. Your IDE will likely prompt you to upgrade this solution file to whatever later version of the IDE you're using. In the `Retarget Projects` dialog, -all of the affected project files should be checked allowing you to use the latest `Windows SDK Version` you have installed, along with -the `Platform Toolset`. - -If you choose *NOT* to upgrade to use the latest `Windows SDK Version` or `Platform Toolset`, then you'll need the `Visual Studio 2010 Platform Toolset`. - -3. Build the `.dll` and `.lib` files by right clicking on each project in turn (Projects are listed in the _Workspace_ -panel in the _FileView_ tab), and selecting `Build`. - -You may get a few warnings, but you should not get any errors. - -Later, we will refer to the following `.lib` and `.dll` files that have just been generated: - -- `./VisualC/Win32/Debug/SDL2.dll` or `./VisualC/Win32/Release/SDL2.dll` -- `./VisualC/Win32/Debug/SDL2.lib` or `./VisualC/Win32/Release/SDL2.lib` -- `./VisualC/Win32/Debug/SDL2main.lib` or `./VisualC/Win32/Release/SDL2main.lib` - -_Note for the `x64` versions, just replace `Win32` in the path with `x64`_ - -### Creating a Project with SDL - -- Create a project as a `Win32 Application`. - -- Create a C++ file for your project. - -- Set the C runtime to `Multi-threaded DLL` in the menu: -`Project|Settings|C/C++ tab|Code Generation|Runtime Library `. - -- Add the SDL `include` directory to your list of includes in the menu: -`Project|Settings|C/C++ tab|Preprocessor|Additional include directories ` - -*VC7 Specific: Instead of doing this, I find it easier to add the -include and library directories to the list that VC7 keeps. Do this by -selecting Tools|Options|Projects|VC++ Directories and under the "Show -Directories For:" dropbox select "Include Files", and click the "New -Directory Icon" and add the [SDLROOT]\\include directory (e.g. If you -installed to c:\\SDL\\ add c:\\SDL\\include). Proceed to change the -dropbox selection to "Library Files" and add [SDLROOT]\\lib.* - -The "include directory" I am referring to is the `./include` folder. - -Now we're going to use the files that we had created earlier in the *Build SDL* step. - -Copy the following file into your Project directory: - -- `SDL2.dll` - -Add the following files to your project (It is not necessary to copy them to your project directory): - -- `SDL2.lib` -- `SDL2main.lib` - -To add them to your project, right click on your project, and select -`Add files to project`. - -**Instead of adding the files to your project, it is more desirable to add them to the linker options: Project|Properties|Linker|Command Line -and type the names of the libraries to link with in the "Additional Options:" box. Note: This must be done for each build configuration -(e.g. Release,Debug).** - -### Hello SDL2 - -Here's a sample SDL snippet to verify everything is setup in your IDE: - -``` - #include "SDL.h" - - int main( int argc, char* argv[] ) - { - const int WIDTH = 640; - const int HEIGHT = 480; - SDL_Window* window = NULL; - SDL_Renderer* renderer = NULL; - - SDL_Init(SDL_INIT_VIDEO); - window = SDL_CreateWindow("SDL2 Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_SHOWN); - renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); - - SDL_DestroyRenderer(renderer); - SDL_DestroyWindow(window); - SDL_Quit(); - return 0; - } - ``` - -### That's it! - -I hope that this document has helped you get through the most difficult part of using the SDL: installing it. -Suggestions for improvements should be posted to the [Github Issues](https://github.com/libsdl-org/SDL/issues). - -### Credits - -Thanks to [Paulus Esterhazy](mailto:pesterhazy@gmx.net), for the work on VC++ port. - -This document was originally called "VisualC.txt", and was written by [Sam Lantinga](mailto:slouken@libsdl.org). - -Later, it was converted to HTML and expanded into the document that you see today by [Lion Kimbro](mailto:snowlion@sprynet.com). - -Minor Fixes and Visual C++ 7 Information (In Green) was added by [James Turk](mailto:james@conceptofzero.net) +Using SDL with Microsoft Visual C++ +=================================== + +### by Lion Kimbro with additions by James Turk + +You can either use the precompiled libraries from the [SDL](https://www.libsdl.org/download.php) web site, or you can build SDL +yourself. + +### Building SDL + +0. To build SDL, your machine must, at a minimum, have the DirectX9.0c SDK installed. It may or may not be retrievable from +the [Microsoft](https://www.microsoft.com) website, so you might need to locate it [online](https://duckduckgo.com/?q=directx9.0c+sdk+download&t=h_&ia=web). +_Editor's note: I've been able to successfully build SDL using Visual Studio 2019 **without** the DX9.0c SDK_ + +1. Open the Visual Studio solution file at `./VisualC/SDL.sln`. + +2. Your IDE will likely prompt you to upgrade this solution file to whatever later version of the IDE you're using. In the `Retarget Projects` dialog, +all of the affected project files should be checked allowing you to use the latest `Windows SDK Version` you have installed, along with +the `Platform Toolset`. + +If you choose *NOT* to upgrade to use the latest `Windows SDK Version` or `Platform Toolset`, then you'll need the `Visual Studio 2010 Platform Toolset`. + +3. Build the `.dll` and `.lib` files by right clicking on each project in turn (Projects are listed in the _Workspace_ +panel in the _FileView_ tab), and selecting `Build`. + +You may get a few warnings, but you should not get any errors. + +Later, we will refer to the following `.lib` and `.dll` files that have just been generated: + +- `./VisualC/Win32/Debug/SDL2.dll` or `./VisualC/Win32/Release/SDL2.dll` +- `./VisualC/Win32/Debug/SDL2.lib` or `./VisualC/Win32/Release/SDL2.lib` +- `./VisualC/Win32/Debug/SDL2main.lib` or `./VisualC/Win32/Release/SDL2main.lib` + +_Note for the `x64` versions, just replace `Win32` in the path with `x64`_ + +### Creating a Project with SDL + +- Create a project as a `Win32 Application`. + +- Create a C++ file for your project. + +- Set the C runtime to `Multi-threaded DLL` in the menu: +`Project|Settings|C/C++ tab|Code Generation|Runtime Library `. + +- Add the SDL `include` directory to your list of includes in the menu: +`Project|Settings|C/C++ tab|Preprocessor|Additional include directories ` + +*VC7 Specific: Instead of doing this, I find it easier to add the +include and library directories to the list that VC7 keeps. Do this by +selecting Tools|Options|Projects|VC++ Directories and under the "Show +Directories For:" dropbox select "Include Files", and click the "New +Directory Icon" and add the [SDLROOT]\\include directory (e.g. If you +installed to c:\\SDL\\ add c:\\SDL\\include). Proceed to change the +dropbox selection to "Library Files" and add [SDLROOT]\\lib.* + +The "include directory" I am referring to is the `./include` folder. + +Now we're going to use the files that we had created earlier in the *Build SDL* step. + +Copy the following file into your Project directory: + +- `SDL2.dll` + +Add the following files to your project (It is not necessary to copy them to your project directory): + +- `SDL2.lib` +- `SDL2main.lib` + +To add them to your project, right click on your project, and select +`Add files to project`. + +**Instead of adding the files to your project, it is more desirable to add them to the linker options: Project|Properties|Linker|Command Line +and type the names of the libraries to link with in the "Additional Options:" box. Note: This must be done for each build configuration +(e.g. Release,Debug).** + +### Hello SDL2 + +Here's a sample SDL snippet to verify everything is setup in your IDE: + +``` + #include "SDL.h" + + int main( int argc, char* argv[] ) + { + const int WIDTH = 640; + const int HEIGHT = 480; + SDL_Window* window = NULL; + SDL_Renderer* renderer = NULL; + + SDL_Init(SDL_INIT_VIDEO); + window = SDL_CreateWindow("SDL2 Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_SHOWN); + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); + return 0; + } + ``` + +### That's it! + +I hope that this document has helped you get through the most difficult part of using the SDL: installing it. +Suggestions for improvements should be posted to the [Github Issues](https://github.com/libsdl-org/SDL/issues). + +### Credits + +Thanks to [Paulus Esterhazy](mailto:pesterhazy@gmx.net), for the work on VC++ port. + +This document was originally called "VisualC.txt", and was written by [Sam Lantinga](mailto:slouken@libsdl.org). + +Later, it was converted to HTML and expanded into the document that you see today by [Lion Kimbro](mailto:snowlion@sprynet.com). + +Minor Fixes and Visual C++ 7 Information (In Green) was added by [James Turk](mailto:james@conceptofzero.net) diff --git a/vs/sdl2/docs/README-vita.md b/vs/sdl2/docs/README-vita.md index 3dbaf1cd405..0a11cf806ba 100644 --- a/vs/sdl2/docs/README-vita.md +++ b/vs/sdl2/docs/README-vita.md @@ -1,33 +1,33 @@ -PS Vita -======= -SDL port for the Sony Playstation Vita and Sony Playstation TV - -Credit to -* xerpi, cpasjuste and rsn8887 for initial (vita2d) port -* vitasdk/dolcesdk devs -* CBPS discord (Namely Graphene and SonicMastr) - -Building --------- -To build for the PSVita, make sure you have vitasdk and cmake installed and run: -``` - cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=${VITASDK}/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release - cmake --build build - cmake --install build -``` - - -Notes ------ -* gles1/gles2 support and renderers are disabled by default and can be enabled by configuring with `-DVIDEO_VITA_PVR=ON` - These renderers support 720p and 1080i resolutions. These can be specified with: - `SDL_setenv("VITA_RESOLUTION", "720", 1);` and `SDL_setenv("VITA_RESOLUTION", "1080", 1);` -* Desktop GL 1.X and 2.X support and renderers are also disabled by default and also can be enabled with `-DVIDEO_VITA_PVR=ON` as long as gl4es4vita is present in your SDK. - They support the same resolutions as the gles1/gles2 backends and require specifying `SDL_setenv("VITA_PVR_OGL", "1", 1);` - anytime before video subsystem initialization. -* gles2 support via PIB is disabled by default and can be enabled by configuring with `-DVIDEO_VITA_PIB=ON` -* By default SDL emits mouse events for touch events on every touchscreen. - Vita has two touchscreens, so it's recommended to use `SDL_SetHint(SDL_HINT_TOUCH_MOUSE_EVENTS, "0");` and handle touch events instead. - Individual touchscreens can be disabled with: - `SDL_setenv("VITA_DISABLE_TOUCH_FRONT", "1", 1);` and `SDL_setenv("VITA_DISABLE_TOUCH_BACK", "1", 1);` -* Support for L2/R2/R3/R3 buttons, haptic feedback and gamepad led only available on PSTV, or when using external ds4 gamepad on vita. +PS Vita +======= +SDL port for the Sony Playstation Vita and Sony Playstation TV + +Credit to +* xerpi, cpasjuste and rsn8887 for initial (vita2d) port +* vitasdk/dolcesdk devs +* CBPS discord (Namely Graphene and SonicMastr) + +Building +-------- +To build for the PSVita, make sure you have vitasdk and cmake installed and run: +``` + cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=${VITASDK}/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release + cmake --build build + cmake --install build +``` + + +Notes +----- +* gles1/gles2 support and renderers are disabled by default and can be enabled by configuring with `-DVIDEO_VITA_PVR=ON` + These renderers support 720p and 1080i resolutions. These can be specified with: + `SDL_setenv("VITA_RESOLUTION", "720", 1);` and `SDL_setenv("VITA_RESOLUTION", "1080", 1);` +* Desktop GL 1.X and 2.X support and renderers are also disabled by default and also can be enabled with `-DVIDEO_VITA_PVR=ON` as long as gl4es4vita is present in your SDK. + They support the same resolutions as the gles1/gles2 backends and require specifying `SDL_setenv("VITA_PVR_OGL", "1", 1);` + anytime before video subsystem initialization. +* gles2 support via PIB is disabled by default and can be enabled by configuring with `-DVIDEO_VITA_PIB=ON` +* By default SDL emits mouse events for touch events on every touchscreen. + Vita has two touchscreens, so it's recommended to use `SDL_SetHint(SDL_HINT_TOUCH_MOUSE_EVENTS, "0");` and handle touch events instead. + Individual touchscreens can be disabled with: + `SDL_setenv("VITA_DISABLE_TOUCH_FRONT", "1", 1);` and `SDL_setenv("VITA_DISABLE_TOUCH_BACK", "1", 1);` +* Support for L2/R2/R3/R3 buttons, haptic feedback and gamepad led only available on PSTV, or when using external ds4 gamepad on vita. diff --git a/vs/sdl2/docs/README-wince.md b/vs/sdl2/docs/README-wince.md index d5fb64fcb39..9fc6454d178 100644 --- a/vs/sdl2/docs/README-wince.md +++ b/vs/sdl2/docs/README-wince.md @@ -1,10 +1,10 @@ -WinCE -===== - -Windows CE is no longer supported by SDL. - -We have left the CE support in SDL 1.2 for those that must have it, and we -have support for Windows Phone 8 and WinRT in SDL2, as of SDL 2.0.3. - ---ryan. - +WinCE +===== + +Windows CE is no longer supported by SDL. + +We have left the CE support in SDL 1.2 for those that must have it, and we +have support for Windows Phone 8 and WinRT in SDL2, as of SDL 2.0.3. + +--ryan. + diff --git a/vs/sdl2/docs/README-windows.md b/vs/sdl2/docs/README-windows.md index cd29c1f9207..66b5fb0638a 100644 --- a/vs/sdl2/docs/README-windows.md +++ b/vs/sdl2/docs/README-windows.md @@ -1,58 +1,58 @@ -# Windows - -## LLVM and Intel C++ compiler support - -SDL will build with the Visual Studio project files with LLVM-based compilers, such as the Intel oneAPI C++ -compiler, but you'll have to manually add the "-msse3" command line option -to at least the SDL_audiocvt.c source file, and possibly others. This may -not be necessary if you build SDL with CMake instead of the included Visual -Studio solution. - -Details are here: https://github.com/libsdl-org/SDL/issues/5186 - - -## OpenGL ES 2.x support - -SDL has support for OpenGL ES 2.x under Windows via two alternative -implementations. - -The most straightforward method consists in running your app in a system with -a graphic card paired with a relatively recent (as of November of 2013) driver -which supports the WGL_EXT_create_context_es2_profile extension. Vendors known -to ship said extension on Windows currently include nVidia and Intel. - -The other method involves using the -[ANGLE library](https://code.google.com/p/angleproject/). If an OpenGL ES 2.x -context is requested and no WGL_EXT_create_context_es2_profile extension is -found, SDL will try to load the libEGL.dll library provided by ANGLE. - -To obtain the ANGLE binaries, you can either compile from source from -https://chromium.googlesource.com/angle/angle or copy the relevant binaries -from a recent Chrome/Chromium install for Windows. The files you need are: - -- libEGL.dll -- libGLESv2.dll -- d3dcompiler_46.dll (supports Windows Vista or later, better shader - compiler) *or* d3dcompiler_43.dll (supports Windows XP or later) - -If you compile ANGLE from source, you can configure it so it does not need the -d3dcompiler_* DLL at all (for details on this, see their documentation). -However, by default SDL will try to preload the d3dcompiler_46.dll to -comply with ANGLE's requirements. If you wish SDL to preload -d3dcompiler_43.dll (to support Windows XP) or to skip this step at all, you -can use the SDL_HINT_VIDEO_WIN_D3DCOMPILER hint (see SDL_hints.h for more -details). - -Known Bugs: - -- SDL_GL_SetSwapInterval is currently a no op when using ANGLE. It appears - that there's a bug in the library which prevents the window contents from - refreshing if this is set to anything other than the default value. - -## Vulkan Surface Support - -Support for creating Vulkan surfaces is configured on by default. To disable -it change the value of `SDL_VIDEO_VULKAN` to 0 in `SDL_config_windows.h`. You -must install the [Vulkan SDK](https://www.lunarg.com/vulkan-sdk/) in order to -use Vulkan graphics in your application. - +# Windows + +## LLVM and Intel C++ compiler support + +SDL will build with the Visual Studio project files with LLVM-based compilers, such as the Intel oneAPI C++ +compiler, but you'll have to manually add the "-msse3" command line option +to at least the SDL_audiocvt.c source file, and possibly others. This may +not be necessary if you build SDL with CMake instead of the included Visual +Studio solution. + +Details are here: https://github.com/libsdl-org/SDL/issues/5186 + + +## OpenGL ES 2.x support + +SDL has support for OpenGL ES 2.x under Windows via two alternative +implementations. + +The most straightforward method consists in running your app in a system with +a graphic card paired with a relatively recent (as of November of 2013) driver +which supports the WGL_EXT_create_context_es2_profile extension. Vendors known +to ship said extension on Windows currently include nVidia and Intel. + +The other method involves using the +[ANGLE library](https://code.google.com/p/angleproject/). If an OpenGL ES 2.x +context is requested and no WGL_EXT_create_context_es2_profile extension is +found, SDL will try to load the libEGL.dll library provided by ANGLE. + +To obtain the ANGLE binaries, you can either compile from source from +https://chromium.googlesource.com/angle/angle or copy the relevant binaries +from a recent Chrome/Chromium install for Windows. The files you need are: + +- libEGL.dll +- libGLESv2.dll +- d3dcompiler_46.dll (supports Windows Vista or later, better shader + compiler) *or* d3dcompiler_43.dll (supports Windows XP or later) + +If you compile ANGLE from source, you can configure it so it does not need the +d3dcompiler_* DLL at all (for details on this, see their documentation). +However, by default SDL will try to preload the d3dcompiler_46.dll to +comply with ANGLE's requirements. If you wish SDL to preload +d3dcompiler_43.dll (to support Windows XP) or to skip this step at all, you +can use the SDL_HINT_VIDEO_WIN_D3DCOMPILER hint (see SDL_hints.h for more +details). + +Known Bugs: + +- SDL_GL_SetSwapInterval is currently a no op when using ANGLE. It appears + that there's a bug in the library which prevents the window contents from + refreshing if this is set to anything other than the default value. + +## Vulkan Surface Support + +Support for creating Vulkan surfaces is configured on by default. To disable +it change the value of `SDL_VIDEO_VULKAN` to 0 in `SDL_config_windows.h`. You +must install the [Vulkan SDK](https://www.lunarg.com/vulkan-sdk/) in order to +use Vulkan graphics in your application. + diff --git a/vs/sdl2/docs/README-winrt.md b/vs/sdl2/docs/README-winrt.md index f4a91172f1a..d87ec0443c4 100644 --- a/vs/sdl2/docs/README-winrt.md +++ b/vs/sdl2/docs/README-winrt.md @@ -1,519 +1,519 @@ -WinRT -===== - -This port allows SDL applications to run on Microsoft's platforms that require -use of "Windows Runtime", aka. "WinRT", APIs. Microsoft may, in some cases, -refer to them as either "Windows Store", or for Windows 10, "UWP" apps. - -In the past, SDL has supported Windows RT 8.x, Windows Phone, etc, but in -modern times this port is focused on UWP apps, which run on Windows 10, -and modern Xbox consoles. - - -Requirements ------------- - -* Microsoft Visual C++ (aka Visual Studio) 2019. - - Free, "Community" or "Express" editions may be used, so long as they - include support for either "Windows Store" or "Windows Phone" apps. - "Express" versions marked as supporting "Windows Desktop" development - typically do not include support for creating WinRT apps, to note. - (The "Community" editions of Visual C++ do, however, support both - desktop/Win32 and WinRT development). -* A valid Microsoft account - This requirement is not imposed by SDL, but - rather by Microsoft's Visual C++ toolchain. This is required to launch or - debug apps. - - -Status ------- - -Here is a rough list of what works, and what doesn't: - -* What works: - * compilation via Visual C++ 2019. - * compile-time platform detection for SDL programs. The C/C++ #define, - `__WINRT__`, will be set to 1 (by SDL) when compiling for WinRT. - * GPU-accelerated 2D rendering, via SDL_Renderer. - * OpenGL ES 2, via the ANGLE library (included separately from SDL) - * software rendering, via either SDL_Surface (optionally in conjunction with - SDL_GetWindowSurface() and SDL_UpdateWindowSurface()) or via the - SDL_Renderer APIs - * threads - * timers (via SDL_GetTicks(), SDL_AddTimer(), SDL_GetPerformanceCounter(), - SDL_GetPerformanceFrequency(), etc.) - * file I/O via SDL_RWops - * mouse input (unsupported on Windows Phone) - * audio, via SDL's WASAPI backend (if you want to record, your app must - have "Microphone" capabilities enabled in its manifest, and the user must - not have blocked access. Otherwise, capture devices will fail to work, - presenting as a device disconnect shortly after opening it.) - * .DLL file loading. Libraries *MUST* be packaged inside applications. Loading - anything outside of the app is not supported. - * system path retrieval via SDL's filesystem APIs - * game controllers. Support is provided via the SDL_Joystick and - SDL_GameController APIs, and is backed by Microsoft's XInput API. Please - note, however, that Windows limits game-controller support in UWP apps to, - "Xbox compatible controllers" (many controllers that work in Win32 apps, - do not work in UWP, due to restrictions in UWP itself.) - * multi-touch input - * app events. SDL_APP_WILLENTER* and SDL_APP_DIDENTER* events get sent out as - appropriate. - * window events - * using Direct3D 11.x APIs outside of SDL. Non-XAML / Direct3D-only apps can - choose to render content directly via Direct3D, using SDL to manage the - internal WinRT window, as well as input and audio. (Use - SDL_GetWindowWMInfo() to get the WinRT 'CoreWindow', and pass it into - IDXGIFactory2::CreateSwapChainForCoreWindow() as appropriate.) - -* What partially works: - * keyboard input. Most of WinRT's documented virtual keys are supported, as - well as many keys with documented hardware scancodes. Converting - SDL_Scancodes to or from SDL_Keycodes may not work, due to missing APIs - (MapVirtualKey()) in Microsoft's Windows Store / UWP APIs. - * SDLmain. WinRT uses a different signature for each app's main() function. - SDL-based apps that use this port must compile in SDL_winrt_main_NonXAML.cpp - (in `SDL\src\main\winrt\`) directly in order for their C-style main() - functions to be called. - -* What doesn't work: - * compilation with anything other than Visual C++ - * programmatically-created custom cursors. These don't appear to be supported - by WinRT. Different OS-provided cursors can, however, be created via - SDL_CreateSystemCursor() (unsupported on Windows Phone) - * SDL_WarpMouseInWindow() or SDL_WarpMouseGlobal(). This are not currently - supported by WinRT itself. - * joysticks and game controllers that either are not supported by - Microsoft's XInput API, or are not supported within UWP apps (many - controllers that work in Win32, do not work in UWP, due to restrictions in - UWP itself). - * turning off VSync when rendering on Windows Phone. Attempts to turn VSync - off on Windows Phone result either in Direct3D not drawing anything, or it - forcing VSync back on. As such, SDL_RENDERER_PRESENTVSYNC will always get - turned-on on Windows Phone. This limitation is not present in non-Phone - WinRT (such as Windows 8.x), where turning off VSync appears to work. - * probably anything else that's not listed as supported - - - -Upgrade Notes -------------- - -#### SDL_GetPrefPath() usage when upgrading WinRT apps from SDL 2.0.3 - -SDL 2.0.4 fixes two bugs found in the WinRT version of SDL_GetPrefPath(). -The fixes may affect older, SDL 2.0.3-based apps' save data. Please note -that these changes only apply to SDL-based WinRT apps, and not to apps for -any other platform. - -1. SDL_GetPrefPath() would return an invalid path, one in which the path's - directory had not been created. Attempts to create files there - (via fopen(), for example), would fail, unless that directory was - explicitly created beforehand. - -2. SDL_GetPrefPath(), for non-WinPhone-based apps, would return a path inside - a WinRT 'Roaming' folder, the contents of which get automatically - synchronized across multiple devices. This process can occur while an - application runs, and can cause existing save-data to be overwritten - at unexpected times, with data from other devices. (Windows Phone apps - written with SDL 2.0.3 did not utilize a Roaming folder, due to API - restrictions in Windows Phone 8.0). - - -SDL_GetPrefPath(), starting with SDL 2.0.4, addresses these by: - -1. making sure that SDL_GetPrefPath() returns a directory in which data - can be written to immediately, without first needing to create directories. - -2. basing SDL_GetPrefPath() off of a different, non-Roaming folder, the - contents of which do not automatically get synchronized across devices - (and which require less work to use safely, in terms of data integrity). - -Apps that wish to get their Roaming folder's path can do so either by using -SDL_WinRTGetFSPathUTF8(), SDL_WinRTGetFSPathUNICODE() (which returns a -UCS-2/wide-char string), or directly through the WinRT class, -Windows.Storage.ApplicationData. - - - -Setup, High-Level Steps ------------------------ - -The steps for setting up a project for an SDL/WinRT app looks like the -following, at a high-level: - -1. create a new Visual C++ project using Microsoft's template for a, - "Direct3D App". -2. remove most of the files from the project. -3. make your app's project directly reference SDL/WinRT's own Visual C++ - project file, via use of Visual C++'s "References" dialog. This will setup - the linker, and will copy SDL's .dll files to your app's final output. -4. adjust your app's build settings, at minimum, telling it where to find SDL's - header files. -5. add files that contains a WinRT-appropriate main function, along with some - data to make sure mouse-cursor-hiding (via SDL_ShowCursor(SDL_DISABLE) calls) - work properly. -6. add SDL-specific app code. -7. build and run your app. - - -Setup, Detailed Steps ---------------------- - -### 1. Create a new project ### - -Create a new project using one of Visual C++'s templates for a plain, non-XAML, -"Direct3D App" (XAML support for SDL/WinRT is not yet ready for use). If you -don't see one of these templates, in Visual C++'s 'New Project' dialog, try -using the textbox titled, 'Search Installed Templates' to look for one. - - -### 2. Remove unneeded files from the project ### - -In the new project, delete any file that has one of the following extensions: - -- .cpp -- .h -- .hlsl - -When you are done, you should be left with a few files, each of which will be a -necessary part of your app's project. These files will consist of: - -- an .appxmanifest file, which contains metadata on your WinRT app. This is - similar to an Info.plist file on iOS, or an AndroidManifest.xml on Android. -- a few .png files, one of which is a splash screen (displayed when your app - launches), others are app icons. -- a .pfx file, used for code signing purposes. - - -### 3. Add references to SDL's project files ### - -SDL/WinRT can be built in multiple variations, spanning across three different -CPU architectures (x86, x64, and ARM) and two different configurations -(Debug and Release). WinRT and Visual C++ do not currently provide a means -for combining multiple variations of one library into a single file. -Furthermore, it does not provide an easy means for copying pre-built .dll files -into your app's final output (via Post-Build steps, for example). It does, -however, provide a system whereby an app can reference the MSVC projects of -libraries such that, when the app is built: - -1. each library gets built for the appropriate CPU architecture(s) and WinRT - platform(s). -2. each library's output, such as .dll files, get copied to the app's build - output. - -To set this up for SDL/WinRT, you'll need to run through the following steps: - -1. open up the Solution Explorer inside Visual C++ (under the "View" menu, then - "Solution Explorer") -2. right click on your app's solution. -3. navigate to "Add", then to "Existing Project..." -4. find SDL/WinRT's Visual C++ project file and open it, in the `VisualC-WinRT` - directory. -5. once the project has been added, right-click on your app's project and - select, "References..." -6. click on the button titled, "Add New Reference..." -7. check the box next to SDL -8. click OK to close the dialog -9. SDL will now show up in the list of references. Click OK to close that - dialog. - -Your project is now linked to SDL's project, insofar that when the app is -built, SDL will be built as well, with its build output getting included with -your app. - - -### 4. Adjust Your App's Build Settings ### - -Some build settings need to be changed in your app's project. This guide will -outline the following: - -- making sure that the compiler knows where to find SDL's header files -- **Optional for C++, but NECESSARY for compiling C code:** telling the - compiler not to use Microsoft's C++ extensions for WinRT development. -- **Optional:** telling the compiler not generate errors due to missing - precompiled header files. - -To change these settings: - -1. right-click on the project -2. choose "Properties" -3. in the drop-down box next to "Configuration", choose, "All Configurations" -4. in the drop-down box next to "Platform", choose, "All Platforms" -5. in the left-hand list, expand the "C/C++" section -6. select "General" -7. edit the "Additional Include Directories" setting, and add a path to SDL's - "include" directory -8. **Optional: to enable compilation of C code:** change the setting for - "Consume Windows Runtime Extension" from "Yes (/ZW)" to "No". If you're - working with a completely C++ based project, this step can usually be - omitted. -9. **Optional: to disable precompiled headers (which can produce - 'stdafx.h'-related build errors, if setup incorrectly:** in the left-hand - list, select "Precompiled Headers", then change the setting for "Precompiled - Header" from "Use (/Yu)" to "Not Using Precompiled Headers". -10. close the dialog, saving settings, by clicking the "OK" button - - -### 5. Add a WinRT-appropriate main function, and a blank-cursor image, to the app. ### - -A few files should be included directly in your app's MSVC project, specifically: -1. a WinRT-appropriate main function (which is different than main() functions on - other platforms) -2. a Win32-style cursor resource, used by SDL_ShowCursor() to hide the mouse cursor - (if and when the app needs to do so). *If this cursor resource is not - included, mouse-position reporting may fail if and when the cursor is - hidden, due to possible bugs/design-oddities in Windows itself.* - -To include these files for C/C++ projects: - -1. right-click on your project (again, in Visual C++'s Solution Explorer), - navigate to "Add", then choose "Existing Item...". -2. navigate to the directory containing SDL's source code, then into its - subdirectory, 'src/main/winrt/'. Select, then add, the following files: - - `SDL_winrt_main_NonXAML.cpp` - - `SDL2-WinRTResources.rc` - - `SDL2-WinRTResource_BlankCursor.cur` -3. right-click on the file `SDL_winrt_main_NonXAML.cpp` (as listed in your - project), then click on "Properties...". -4. in the drop-down box next to "Configuration", choose, "All Configurations" -5. in the drop-down box next to "Platform", choose, "All Platforms" -6. in the left-hand list, click on "C/C++" -7. change the setting for "Consume Windows Runtime Extension" to "Yes (/ZW)". -8. click the OK button. This will close the dialog. - -**NOTE: C++/CX compilation is currently required in at least one file of your -app's project. This is to make sure that Visual C++'s linker builds a 'Windows -Metadata' file (.winmd) for your app. Not doing so can lead to build errors.** - -For non-C++ projects, you will need to call SDL_WinRTRunApp from your language's -main function, and generate SDL2-WinRTResources.res manually by using `rc` via -the Developer Command Prompt and including it as a within the -first block in your Visual Studio project file. - -### 6. Add app code and assets ### - -At this point, you can add in SDL-specific source code. Be sure to include a -C-style main function (ie: `int main(int argc, char *argv[])`). From there you -should be able to create a single `SDL_Window` (WinRT apps can only have one -window, at present), as well as an `SDL_Renderer`. Direct3D will be used to -draw content. Events are received via SDL's usual event functions -(`SDL_PollEvent`, etc.) If you have a set of existing source files and assets, -you can start adding them to the project now. If not, or if you would like to -make sure that you're setup correctly, some short and simple sample code is -provided below. - - -#### 6.A. ... when creating a new app #### - -If you are creating a new app (rather than porting an existing SDL-based app), -or if you would just like a simple app to test SDL/WinRT with before trying to -get existing code working, some working SDL/WinRT code is provided below. To -set this up: - -1. right click on your app's project -2. select Add, then New Item. An "Add New Item" dialog will show up. -3. from the left-hand list, choose "Visual C++" -4. from the middle/main list, choose "C++ File (.cpp)" -5. near the bottom of the dialog, next to "Name:", type in a name for your -source file, such as, "main.cpp". -6. click on the Add button. This will close the dialog, add the new file to -your project, and open the file in Visual C++'s text editor. -7. Copy and paste the following code into the new file, then save it. - -```c -#include - -int main(int argc, char **argv) -{ - SDL_DisplayMode mode; - SDL_Window * window = NULL; - SDL_Renderer * renderer = NULL; - SDL_Event evt; - SDL_bool keep_going = SDL_TRUE; - - if (SDL_Init(SDL_INIT_VIDEO) != 0) { - return 1; - } else if (SDL_GetCurrentDisplayMode(0, &mode) != 0) { - return 1; - } else if (SDL_CreateWindowAndRenderer(mode.w, mode.h, SDL_WINDOW_FULLSCREEN, &window, &renderer) != 0) { - return 1; - } - - while (keep_going) { - while (SDL_PollEvent(&evt)) { - if ((evt.type == SDL_KEYDOWN) && (evt.key.keysym.sym == SDLK_ESCAPE)) { - keep_going = SDL_FALSE; - } - } - - SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255); - SDL_RenderClear(renderer); - SDL_RenderPresent(renderer); - } - - SDL_Quit(); - return 0; -} -``` - -#### 6.B. Adding code and assets #### - -If you have existing code and assets that you'd like to add, you should be able -to add them now. The process for adding a set of files is as such. - -1. right click on the app's project -2. select Add, then click on "New Item..." -3. open any source, header, or asset files as appropriate. Support for C and -C++ is available. - -Do note that WinRT only supports a subset of the APIs that are available to -Win32-based apps. Many portions of the Win32 API and the C runtime are not -available. - -A list of unsupported C APIs can be found at - - -General information on using the C runtime in WinRT can be found at - - -A list of supported Win32 APIs for WinRT apps can be found at -. To note, -the list of supported Win32 APIs for Windows Phone 8.0 is different. -That list can be found at - - - -### 7. Build and run your app ### - -Your app project should now be setup, and you should be ready to build your app. -To run it on the local machine, open the Debug menu and choose "Start -Debugging". This will build your app, then run your app full-screen. To switch -out of your app, press the Windows key. Alternatively, you can choose to run -your app in a window. To do this, before building and running your app, find -the drop-down menu in Visual C++'s toolbar that says, "Local Machine". Expand -this by clicking on the arrow on the right side of the list, then click on -Simulator. Once you do that, any time you build and run the app, the app will -launch in window, rather than full-screen. - - -#### 7.A. Running apps on older, ARM-based, "Windows RT" devices #### - -**These instructions do not include Windows Phone, despite Windows Phone -typically running on ARM processors.** They are specifically for devices -that use the "Windows RT" operating system, which was a modified version of -Windows 8.x that ran primarily on ARM-based tablet computers. - -To build and run the app on ARM-based, "Windows RT" devices, you'll need to: - -- install Microsoft's "Remote Debugger" on the device. Visual C++ installs and - debugs ARM-based apps via IP networks. -- change a few options on the development machine, both to make sure it builds - for ARM (rather than x86 or x64), and to make sure it knows how to find the - Windows RT device (on the network). - -Microsoft's Remote Debugger can be found at -. Please note -that separate versions of this debugger exist for different versions of Visual -C++, one each for MSVC 2015, 2013, and 2012. - -To setup Visual C++ to launch your app on an ARM device: - -1. make sure the Remote Debugger is running on your ARM device, and that it's on - the same IP network as your development machine. -2. from Visual C++'s toolbar, find a drop-down menu that says, "Win32". Click - it, then change the value to "ARM". -3. make sure Visual C++ knows the hostname or IP address of the ARM device. To - do this: - 1. open the app project's properties - 2. select "Debugging" - 3. next to "Machine Name", enter the hostname or IP address of the ARM - device - 4. if, and only if, you've turned off authentication in the Remote Debugger, - then change the setting for "Require Authentication" to No - 5. click "OK" -4. build and run the app (from Visual C++). The first time you do this, a - prompt will show up on the ARM device, asking for a Microsoft Account. You - do, unfortunately, need to log in here, and will need to follow the - subsequent registration steps in order to launch the app. After you do so, - if the app didn't already launch, try relaunching it again from within Visual - C++. - - -Troubleshooting ---------------- - -#### Build fails with message, "error LNK2038: mismatch detected for 'vccorlib_lib_should_be_specified_before_msvcrt_lib_to_linker'" - -Try adding the following to your linker flags. In MSVC, this can be done by -right-clicking on the app project, navigating to Configuration Properties -> -Linker -> Command Line, then adding them to the Additional Options -section. - -* For Release builds / MSVC-Configurations, add: - - /nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib - -* For Debug builds / MSVC-Configurations, add: - - /nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib - - -#### Mouse-motion events fail to get sent, or SDL_GetMouseState() fails to return updated values - -This may be caused by a bug in Windows itself, whereby hiding the mouse -cursor can cause mouse-position reporting to fail. - -SDL provides a workaround for this, but it requires that an app links to a -set of Win32-style cursor image-resource files. A copy of suitable resource -files can be found in `src/main/winrt/`. Adding them to an app's Visual C++ -project file should be sufficient to get the app to use them. - - -#### SDL's Visual Studio project file fails to open, with message, "The system can't find the file specified." - -This can be caused for any one of a few reasons, which Visual Studio can -report, but won't always do so in an up-front manner. - -To help determine why this error comes up: - -1. open a copy of Visual Studio without opening a project file. This can be - accomplished via Windows' Start Menu, among other means. -2. show Visual Studio's Output window. This can be done by going to VS' - menu bar, then to View, and then to Output. -3. try opening the SDL project file directly by going to VS' menu bar, then - to File, then to Open, then to Project/Solution. When a File-Open dialog - appears, open the SDL project (such as the one in SDL's source code, in its - directory, VisualC-WinRT/UWP_VS2015/). -4. after attempting to open SDL's Visual Studio project file, additional error - information will be output to the Output window. - -If Visual Studio reports (via its Output window) that the project: - -"could not be loaded because it's missing install components. To fix this launch Visual Studio setup with the following selections: -Microsoft.VisualStudio.ComponentGroup.UWP.VC" - -... then you will need to re-launch Visual Studio's installer, and make sure that -the workflow for "Universal Windows Platform development" is checked, and that its -optional component, "C++ Universal Windows Platform tools" is also checked. While -you are there, if you are planning on targeting UWP / Windows 10, also make sure -that you check the optional component, "Windows 10 SDK (10.0.10240.0)". After -making sure these items are checked as-appropriate, install them. - -Once you install these components, try re-launching Visual Studio, and re-opening -the SDL project file. If you still get the error dialog, try using the Output -window, again, seeing what Visual Studio says about it. - - -#### Game controllers / joysticks aren't working! - -Windows only permits certain game controllers and joysticks to work within -WinRT / UWP apps. Even if a game controller or joystick works in a Win32 -app, that device is not guaranteed to work inside a WinRT / UWP app. - -According to Microsoft, "Xbox compatible controllers" should work inside -UWP apps, potentially with more working in the future. This includes, but -may not be limited to, Microsoft-made Xbox controllers and USB adapters. -(Source: https://social.msdn.microsoft.com/Forums/en-US/9064838b-e8c3-4c18-8a83-19bf0dfe150d/xinput-fails-to-detect-game-controllers?forum=wpdevelop) - - +WinRT +===== + +This port allows SDL applications to run on Microsoft's platforms that require +use of "Windows Runtime", aka. "WinRT", APIs. Microsoft may, in some cases, +refer to them as either "Windows Store", or for Windows 10, "UWP" apps. + +In the past, SDL has supported Windows RT 8.x, Windows Phone, etc, but in +modern times this port is focused on UWP apps, which run on Windows 10, +and modern Xbox consoles. + + +Requirements +------------ + +* Microsoft Visual C++ (aka Visual Studio) 2019. + - Free, "Community" or "Express" editions may be used, so long as they + include support for either "Windows Store" or "Windows Phone" apps. + "Express" versions marked as supporting "Windows Desktop" development + typically do not include support for creating WinRT apps, to note. + (The "Community" editions of Visual C++ do, however, support both + desktop/Win32 and WinRT development). +* A valid Microsoft account - This requirement is not imposed by SDL, but + rather by Microsoft's Visual C++ toolchain. This is required to launch or + debug apps. + + +Status +------ + +Here is a rough list of what works, and what doesn't: + +* What works: + * compilation via Visual C++ 2019. + * compile-time platform detection for SDL programs. The C/C++ #define, + `__WINRT__`, will be set to 1 (by SDL) when compiling for WinRT. + * GPU-accelerated 2D rendering, via SDL_Renderer. + * OpenGL ES 2, via the ANGLE library (included separately from SDL) + * software rendering, via either SDL_Surface (optionally in conjunction with + SDL_GetWindowSurface() and SDL_UpdateWindowSurface()) or via the + SDL_Renderer APIs + * threads + * timers (via SDL_GetTicks(), SDL_AddTimer(), SDL_GetPerformanceCounter(), + SDL_GetPerformanceFrequency(), etc.) + * file I/O via SDL_RWops + * mouse input (unsupported on Windows Phone) + * audio, via SDL's WASAPI backend (if you want to record, your app must + have "Microphone" capabilities enabled in its manifest, and the user must + not have blocked access. Otherwise, capture devices will fail to work, + presenting as a device disconnect shortly after opening it.) + * .DLL file loading. Libraries *MUST* be packaged inside applications. Loading + anything outside of the app is not supported. + * system path retrieval via SDL's filesystem APIs + * game controllers. Support is provided via the SDL_Joystick and + SDL_GameController APIs, and is backed by Microsoft's XInput API. Please + note, however, that Windows limits game-controller support in UWP apps to, + "Xbox compatible controllers" (many controllers that work in Win32 apps, + do not work in UWP, due to restrictions in UWP itself.) + * multi-touch input + * app events. SDL_APP_WILLENTER* and SDL_APP_DIDENTER* events get sent out as + appropriate. + * window events + * using Direct3D 11.x APIs outside of SDL. Non-XAML / Direct3D-only apps can + choose to render content directly via Direct3D, using SDL to manage the + internal WinRT window, as well as input and audio. (Use + SDL_GetWindowWMInfo() to get the WinRT 'CoreWindow', and pass it into + IDXGIFactory2::CreateSwapChainForCoreWindow() as appropriate.) + +* What partially works: + * keyboard input. Most of WinRT's documented virtual keys are supported, as + well as many keys with documented hardware scancodes. Converting + SDL_Scancodes to or from SDL_Keycodes may not work, due to missing APIs + (MapVirtualKey()) in Microsoft's Windows Store / UWP APIs. + * SDLmain. WinRT uses a different signature for each app's main() function. + SDL-based apps that use this port must compile in SDL_winrt_main_NonXAML.cpp + (in `SDL\src\main\winrt\`) directly in order for their C-style main() + functions to be called. + +* What doesn't work: + * compilation with anything other than Visual C++ + * programmatically-created custom cursors. These don't appear to be supported + by WinRT. Different OS-provided cursors can, however, be created via + SDL_CreateSystemCursor() (unsupported on Windows Phone) + * SDL_WarpMouseInWindow() or SDL_WarpMouseGlobal(). This are not currently + supported by WinRT itself. + * joysticks and game controllers that either are not supported by + Microsoft's XInput API, or are not supported within UWP apps (many + controllers that work in Win32, do not work in UWP, due to restrictions in + UWP itself). + * turning off VSync when rendering on Windows Phone. Attempts to turn VSync + off on Windows Phone result either in Direct3D not drawing anything, or it + forcing VSync back on. As such, SDL_RENDERER_PRESENTVSYNC will always get + turned-on on Windows Phone. This limitation is not present in non-Phone + WinRT (such as Windows 8.x), where turning off VSync appears to work. + * probably anything else that's not listed as supported + + + +Upgrade Notes +------------- + +#### SDL_GetPrefPath() usage when upgrading WinRT apps from SDL 2.0.3 + +SDL 2.0.4 fixes two bugs found in the WinRT version of SDL_GetPrefPath(). +The fixes may affect older, SDL 2.0.3-based apps' save data. Please note +that these changes only apply to SDL-based WinRT apps, and not to apps for +any other platform. + +1. SDL_GetPrefPath() would return an invalid path, one in which the path's + directory had not been created. Attempts to create files there + (via fopen(), for example), would fail, unless that directory was + explicitly created beforehand. + +2. SDL_GetPrefPath(), for non-WinPhone-based apps, would return a path inside + a WinRT 'Roaming' folder, the contents of which get automatically + synchronized across multiple devices. This process can occur while an + application runs, and can cause existing save-data to be overwritten + at unexpected times, with data from other devices. (Windows Phone apps + written with SDL 2.0.3 did not utilize a Roaming folder, due to API + restrictions in Windows Phone 8.0). + + +SDL_GetPrefPath(), starting with SDL 2.0.4, addresses these by: + +1. making sure that SDL_GetPrefPath() returns a directory in which data + can be written to immediately, without first needing to create directories. + +2. basing SDL_GetPrefPath() off of a different, non-Roaming folder, the + contents of which do not automatically get synchronized across devices + (and which require less work to use safely, in terms of data integrity). + +Apps that wish to get their Roaming folder's path can do so either by using +SDL_WinRTGetFSPathUTF8(), SDL_WinRTGetFSPathUNICODE() (which returns a +UCS-2/wide-char string), or directly through the WinRT class, +Windows.Storage.ApplicationData. + + + +Setup, High-Level Steps +----------------------- + +The steps for setting up a project for an SDL/WinRT app looks like the +following, at a high-level: + +1. create a new Visual C++ project using Microsoft's template for a, + "Direct3D App". +2. remove most of the files from the project. +3. make your app's project directly reference SDL/WinRT's own Visual C++ + project file, via use of Visual C++'s "References" dialog. This will setup + the linker, and will copy SDL's .dll files to your app's final output. +4. adjust your app's build settings, at minimum, telling it where to find SDL's + header files. +5. add files that contains a WinRT-appropriate main function, along with some + data to make sure mouse-cursor-hiding (via SDL_ShowCursor(SDL_DISABLE) calls) + work properly. +6. add SDL-specific app code. +7. build and run your app. + + +Setup, Detailed Steps +--------------------- + +### 1. Create a new project ### + +Create a new project using one of Visual C++'s templates for a plain, non-XAML, +"Direct3D App" (XAML support for SDL/WinRT is not yet ready for use). If you +don't see one of these templates, in Visual C++'s 'New Project' dialog, try +using the textbox titled, 'Search Installed Templates' to look for one. + + +### 2. Remove unneeded files from the project ### + +In the new project, delete any file that has one of the following extensions: + +- .cpp +- .h +- .hlsl + +When you are done, you should be left with a few files, each of which will be a +necessary part of your app's project. These files will consist of: + +- an .appxmanifest file, which contains metadata on your WinRT app. This is + similar to an Info.plist file on iOS, or an AndroidManifest.xml on Android. +- a few .png files, one of which is a splash screen (displayed when your app + launches), others are app icons. +- a .pfx file, used for code signing purposes. + + +### 3. Add references to SDL's project files ### + +SDL/WinRT can be built in multiple variations, spanning across three different +CPU architectures (x86, x64, and ARM) and two different configurations +(Debug and Release). WinRT and Visual C++ do not currently provide a means +for combining multiple variations of one library into a single file. +Furthermore, it does not provide an easy means for copying pre-built .dll files +into your app's final output (via Post-Build steps, for example). It does, +however, provide a system whereby an app can reference the MSVC projects of +libraries such that, when the app is built: + +1. each library gets built for the appropriate CPU architecture(s) and WinRT + platform(s). +2. each library's output, such as .dll files, get copied to the app's build + output. + +To set this up for SDL/WinRT, you'll need to run through the following steps: + +1. open up the Solution Explorer inside Visual C++ (under the "View" menu, then + "Solution Explorer") +2. right click on your app's solution. +3. navigate to "Add", then to "Existing Project..." +4. find SDL/WinRT's Visual C++ project file and open it, in the `VisualC-WinRT` + directory. +5. once the project has been added, right-click on your app's project and + select, "References..." +6. click on the button titled, "Add New Reference..." +7. check the box next to SDL +8. click OK to close the dialog +9. SDL will now show up in the list of references. Click OK to close that + dialog. + +Your project is now linked to SDL's project, insofar that when the app is +built, SDL will be built as well, with its build output getting included with +your app. + + +### 4. Adjust Your App's Build Settings ### + +Some build settings need to be changed in your app's project. This guide will +outline the following: + +- making sure that the compiler knows where to find SDL's header files +- **Optional for C++, but NECESSARY for compiling C code:** telling the + compiler not to use Microsoft's C++ extensions for WinRT development. +- **Optional:** telling the compiler not generate errors due to missing + precompiled header files. + +To change these settings: + +1. right-click on the project +2. choose "Properties" +3. in the drop-down box next to "Configuration", choose, "All Configurations" +4. in the drop-down box next to "Platform", choose, "All Platforms" +5. in the left-hand list, expand the "C/C++" section +6. select "General" +7. edit the "Additional Include Directories" setting, and add a path to SDL's + "include" directory +8. **Optional: to enable compilation of C code:** change the setting for + "Consume Windows Runtime Extension" from "Yes (/ZW)" to "No". If you're + working with a completely C++ based project, this step can usually be + omitted. +9. **Optional: to disable precompiled headers (which can produce + 'stdafx.h'-related build errors, if setup incorrectly:** in the left-hand + list, select "Precompiled Headers", then change the setting for "Precompiled + Header" from "Use (/Yu)" to "Not Using Precompiled Headers". +10. close the dialog, saving settings, by clicking the "OK" button + + +### 5. Add a WinRT-appropriate main function, and a blank-cursor image, to the app. ### + +A few files should be included directly in your app's MSVC project, specifically: +1. a WinRT-appropriate main function (which is different than main() functions on + other platforms) +2. a Win32-style cursor resource, used by SDL_ShowCursor() to hide the mouse cursor + (if and when the app needs to do so). *If this cursor resource is not + included, mouse-position reporting may fail if and when the cursor is + hidden, due to possible bugs/design-oddities in Windows itself.* + +To include these files for C/C++ projects: + +1. right-click on your project (again, in Visual C++'s Solution Explorer), + navigate to "Add", then choose "Existing Item...". +2. navigate to the directory containing SDL's source code, then into its + subdirectory, 'src/main/winrt/'. Select, then add, the following files: + - `SDL_winrt_main_NonXAML.cpp` + - `SDL2-WinRTResources.rc` + - `SDL2-WinRTResource_BlankCursor.cur` +3. right-click on the file `SDL_winrt_main_NonXAML.cpp` (as listed in your + project), then click on "Properties...". +4. in the drop-down box next to "Configuration", choose, "All Configurations" +5. in the drop-down box next to "Platform", choose, "All Platforms" +6. in the left-hand list, click on "C/C++" +7. change the setting for "Consume Windows Runtime Extension" to "Yes (/ZW)". +8. click the OK button. This will close the dialog. + +**NOTE: C++/CX compilation is currently required in at least one file of your +app's project. This is to make sure that Visual C++'s linker builds a 'Windows +Metadata' file (.winmd) for your app. Not doing so can lead to build errors.** + +For non-C++ projects, you will need to call SDL_WinRTRunApp from your language's +main function, and generate SDL2-WinRTResources.res manually by using `rc` via +the Developer Command Prompt and including it as a within the +first block in your Visual Studio project file. + +### 6. Add app code and assets ### + +At this point, you can add in SDL-specific source code. Be sure to include a +C-style main function (ie: `int main(int argc, char *argv[])`). From there you +should be able to create a single `SDL_Window` (WinRT apps can only have one +window, at present), as well as an `SDL_Renderer`. Direct3D will be used to +draw content. Events are received via SDL's usual event functions +(`SDL_PollEvent`, etc.) If you have a set of existing source files and assets, +you can start adding them to the project now. If not, or if you would like to +make sure that you're setup correctly, some short and simple sample code is +provided below. + + +#### 6.A. ... when creating a new app #### + +If you are creating a new app (rather than porting an existing SDL-based app), +or if you would just like a simple app to test SDL/WinRT with before trying to +get existing code working, some working SDL/WinRT code is provided below. To +set this up: + +1. right click on your app's project +2. select Add, then New Item. An "Add New Item" dialog will show up. +3. from the left-hand list, choose "Visual C++" +4. from the middle/main list, choose "C++ File (.cpp)" +5. near the bottom of the dialog, next to "Name:", type in a name for your +source file, such as, "main.cpp". +6. click on the Add button. This will close the dialog, add the new file to +your project, and open the file in Visual C++'s text editor. +7. Copy and paste the following code into the new file, then save it. + +```c +#include + +int main(int argc, char **argv) +{ + SDL_DisplayMode mode; + SDL_Window * window = NULL; + SDL_Renderer * renderer = NULL; + SDL_Event evt; + SDL_bool keep_going = SDL_TRUE; + + if (SDL_Init(SDL_INIT_VIDEO) != 0) { + return 1; + } else if (SDL_GetCurrentDisplayMode(0, &mode) != 0) { + return 1; + } else if (SDL_CreateWindowAndRenderer(mode.w, mode.h, SDL_WINDOW_FULLSCREEN, &window, &renderer) != 0) { + return 1; + } + + while (keep_going) { + while (SDL_PollEvent(&evt)) { + if ((evt.type == SDL_KEYDOWN) && (evt.key.keysym.sym == SDLK_ESCAPE)) { + keep_going = SDL_FALSE; + } + } + + SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255); + SDL_RenderClear(renderer); + SDL_RenderPresent(renderer); + } + + SDL_Quit(); + return 0; +} +``` + +#### 6.B. Adding code and assets #### + +If you have existing code and assets that you'd like to add, you should be able +to add them now. The process for adding a set of files is as such. + +1. right click on the app's project +2. select Add, then click on "New Item..." +3. open any source, header, or asset files as appropriate. Support for C and +C++ is available. + +Do note that WinRT only supports a subset of the APIs that are available to +Win32-based apps. Many portions of the Win32 API and the C runtime are not +available. + +A list of unsupported C APIs can be found at + + +General information on using the C runtime in WinRT can be found at + + +A list of supported Win32 APIs for WinRT apps can be found at +. To note, +the list of supported Win32 APIs for Windows Phone 8.0 is different. +That list can be found at + + + +### 7. Build and run your app ### + +Your app project should now be setup, and you should be ready to build your app. +To run it on the local machine, open the Debug menu and choose "Start +Debugging". This will build your app, then run your app full-screen. To switch +out of your app, press the Windows key. Alternatively, you can choose to run +your app in a window. To do this, before building and running your app, find +the drop-down menu in Visual C++'s toolbar that says, "Local Machine". Expand +this by clicking on the arrow on the right side of the list, then click on +Simulator. Once you do that, any time you build and run the app, the app will +launch in window, rather than full-screen. + + +#### 7.A. Running apps on older, ARM-based, "Windows RT" devices #### + +**These instructions do not include Windows Phone, despite Windows Phone +typically running on ARM processors.** They are specifically for devices +that use the "Windows RT" operating system, which was a modified version of +Windows 8.x that ran primarily on ARM-based tablet computers. + +To build and run the app on ARM-based, "Windows RT" devices, you'll need to: + +- install Microsoft's "Remote Debugger" on the device. Visual C++ installs and + debugs ARM-based apps via IP networks. +- change a few options on the development machine, both to make sure it builds + for ARM (rather than x86 or x64), and to make sure it knows how to find the + Windows RT device (on the network). + +Microsoft's Remote Debugger can be found at +. Please note +that separate versions of this debugger exist for different versions of Visual +C++, one each for MSVC 2015, 2013, and 2012. + +To setup Visual C++ to launch your app on an ARM device: + +1. make sure the Remote Debugger is running on your ARM device, and that it's on + the same IP network as your development machine. +2. from Visual C++'s toolbar, find a drop-down menu that says, "Win32". Click + it, then change the value to "ARM". +3. make sure Visual C++ knows the hostname or IP address of the ARM device. To + do this: + 1. open the app project's properties + 2. select "Debugging" + 3. next to "Machine Name", enter the hostname or IP address of the ARM + device + 4. if, and only if, you've turned off authentication in the Remote Debugger, + then change the setting for "Require Authentication" to No + 5. click "OK" +4. build and run the app (from Visual C++). The first time you do this, a + prompt will show up on the ARM device, asking for a Microsoft Account. You + do, unfortunately, need to log in here, and will need to follow the + subsequent registration steps in order to launch the app. After you do so, + if the app didn't already launch, try relaunching it again from within Visual + C++. + + +Troubleshooting +--------------- + +#### Build fails with message, "error LNK2038: mismatch detected for 'vccorlib_lib_should_be_specified_before_msvcrt_lib_to_linker'" + +Try adding the following to your linker flags. In MSVC, this can be done by +right-clicking on the app project, navigating to Configuration Properties -> +Linker -> Command Line, then adding them to the Additional Options +section. + +* For Release builds / MSVC-Configurations, add: + + /nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib + +* For Debug builds / MSVC-Configurations, add: + + /nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib + + +#### Mouse-motion events fail to get sent, or SDL_GetMouseState() fails to return updated values + +This may be caused by a bug in Windows itself, whereby hiding the mouse +cursor can cause mouse-position reporting to fail. + +SDL provides a workaround for this, but it requires that an app links to a +set of Win32-style cursor image-resource files. A copy of suitable resource +files can be found in `src/main/winrt/`. Adding them to an app's Visual C++ +project file should be sufficient to get the app to use them. + + +#### SDL's Visual Studio project file fails to open, with message, "The system can't find the file specified." + +This can be caused for any one of a few reasons, which Visual Studio can +report, but won't always do so in an up-front manner. + +To help determine why this error comes up: + +1. open a copy of Visual Studio without opening a project file. This can be + accomplished via Windows' Start Menu, among other means. +2. show Visual Studio's Output window. This can be done by going to VS' + menu bar, then to View, and then to Output. +3. try opening the SDL project file directly by going to VS' menu bar, then + to File, then to Open, then to Project/Solution. When a File-Open dialog + appears, open the SDL project (such as the one in SDL's source code, in its + directory, VisualC-WinRT/UWP_VS2015/). +4. after attempting to open SDL's Visual Studio project file, additional error + information will be output to the Output window. + +If Visual Studio reports (via its Output window) that the project: + +"could not be loaded because it's missing install components. To fix this launch Visual Studio setup with the following selections: +Microsoft.VisualStudio.ComponentGroup.UWP.VC" + +... then you will need to re-launch Visual Studio's installer, and make sure that +the workflow for "Universal Windows Platform development" is checked, and that its +optional component, "C++ Universal Windows Platform tools" is also checked. While +you are there, if you are planning on targeting UWP / Windows 10, also make sure +that you check the optional component, "Windows 10 SDK (10.0.10240.0)". After +making sure these items are checked as-appropriate, install them. + +Once you install these components, try re-launching Visual Studio, and re-opening +the SDL project file. If you still get the error dialog, try using the Output +window, again, seeing what Visual Studio says about it. + + +#### Game controllers / joysticks aren't working! + +Windows only permits certain game controllers and joysticks to work within +WinRT / UWP apps. Even if a game controller or joystick works in a Win32 +app, that device is not guaranteed to work inside a WinRT / UWP app. + +According to Microsoft, "Xbox compatible controllers" should work inside +UWP apps, potentially with more working in the future. This includes, but +may not be limited to, Microsoft-made Xbox controllers and USB adapters. +(Source: https://social.msdn.microsoft.com/Forums/en-US/9064838b-e8c3-4c18-8a83-19bf0dfe150d/xinput-fails-to-detect-game-controllers?forum=wpdevelop) + + diff --git a/vs/sdl2/include/SDL.h b/vs/sdl2/include/SDL.h index 20c903b2fe4..0fe0713391a 100644 --- a/vs/sdl2/include/SDL.h +++ b/vs/sdl2/include/SDL.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,7 +25,6 @@ * Main include header for the SDL library */ - #ifndef SDL_h_ #define SDL_h_ @@ -70,6 +69,8 @@ extern "C" { #endif +/* WIKI CATEGORY: Init */ + /* As of version 0.5, SDL is loaded dynamically into the application */ /** @@ -130,7 +131,7 @@ extern "C" { * call SDL_Quit() to force shutdown). If a subsystem is already loaded then * this call will increase the ref-count and return. * - * \param flags subsystem initialization flags + * \param flags subsystem initialization flags. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * diff --git a/vs/sdl2/include/SDL_assert.h b/vs/sdl2/include/SDL_assert.h index a396d4e02ed..5d7e19ae7cd 100644 --- a/vs/sdl2/include/SDL_assert.h +++ b/vs/sdl2/include/SDL_assert.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -61,6 +61,8 @@ assert can have unique static variables associated with it. #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #22\n\t" ) #elif defined(__APPLE__) && defined(__arm__) #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "bkpt #22\n\t" ) +#elif defined(_WIN32) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__arm64__) || defined(__aarch64__)) ) + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #0xF000\n\t" ) #elif defined(__386__) && defined(__WATCOMC__) #define SDL_TriggerBreakpoint() { _asm { int 0x03 } } #elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__) @@ -151,7 +153,7 @@ extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *, #define SDL_enabled_assert(condition) \ do { \ while ( !(condition) ) { \ - static struct SDL_AssertData sdl_assert_data = { 0, 0, #condition, 0, 0, 0, 0 }; \ + static struct SDL_AssertData sdl_assert_data = { 0, 0, #condition, NULL, 0, NULL, NULL }; \ const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \ if (sdl_assert_state == SDL_ASSERTION_RETRY) { \ continue; /* go again. */ \ @@ -191,8 +193,8 @@ extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *, * A callback that fires when an SDL assertion fails. * * \param data a pointer to the SDL_AssertData structure corresponding to the - * current assertion - * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler() + * current assertion. + * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler(). * \returns an SDL_AssertState value indicating how to handle the failure. */ typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)( @@ -212,8 +214,8 @@ typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)( * This callback is NOT reset to SDL's internal handler upon SDL_Quit()! * * \param handler the SDL_AssertionHandler function to call when an assertion - * fails or NULL for the default handler - * \param userdata a pointer that is passed to `handler` + * fails or NULL for the default handler. + * \param userdata a pointer that is passed to `handler`. * * \since This function is available since SDL 2.0.0. * @@ -254,7 +256,7 @@ extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetDefaultAssertionHandler(void * data, it is safe to pass a NULL pointer to this function to ignore it. * * \param puserdata pointer which is filled with the "userdata" pointer that - * was passed to SDL_SetAssertionHandler() + * was passed to SDL_SetAssertionHandler(). * \returns the SDL_AssertionHandler that is called when an assert triggers. * * \since This function is available since SDL 2.0.2. diff --git a/vs/sdl2/include/SDL_atomic.h b/vs/sdl2/include/SDL_atomic.h index 1fa18f49fe0..226ec7c67f6 100644 --- a/vs/sdl2/include/SDL_atomic.h +++ b/vs/sdl2/include/SDL_atomic.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,38 +20,29 @@ */ /** - * \file SDL_atomic.h + * # CategoryAtomic * * Atomic operations. * - * IMPORTANT: - * If you are not an expert in concurrent lockless programming, you should - * only be using the atomic lock and reference counting functions in this - * file. In all other cases you should be protecting your data structures - * with full mutexes. + * IMPORTANT: If you are not an expert in concurrent lockless programming, you + * should not be using any functions in this file. You should be protecting + * your data structures with full mutexes instead. * - * The list of "safe" functions to use are: - * SDL_AtomicLock() - * SDL_AtomicUnlock() - * SDL_AtomicIncRef() - * SDL_AtomicDecRef() + * ***Seriously, here be dragons!*** * - * Seriously, here be dragons! - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * - * You can find out a little more about lockless programming and the - * subtle issues that can arise here: - * http://msdn.microsoft.com/en-us/library/ee418650%28v=vs.85%29.aspx + * You can find out a little more about lockless programming and the subtle + * issues that can arise here: + * https://learn.microsoft.com/en-us/windows/win32/dxtecharts/lockless-programming * * There's also lots of good information here: - * http://www.1024cores.net/home/lock-free-algorithms - * http://preshing.com/ * - * These operations may or may not actually be implemented using - * processor specific atomic operations. When possible they are - * implemented as true processor specific atomic operations. When that - * is not possible the are implemented using locks that *do* use the - * available atomic operations. + * - https://www.1024cores.net/home/lock-free-algorithms + * - https://preshing.com/ + * + * These operations may or may not actually be implemented using processor + * specific atomic operations. When possible they are implemented as true + * processor specific atomic operations. When that is not possible the are + * implemented using locks that *do* use the available atomic operations. * * All of the atomic operations that modify memory are full memory barriers. */ @@ -94,7 +85,7 @@ typedef int SDL_SpinLock; * ***Please note that spinlocks are dangerous if you don't know what you're * doing. Please be careful using any sort of spinlock!*** * - * \param lock a pointer to a lock variable + * \param lock a pointer to a lock variable. * \returns SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already * held. * @@ -111,7 +102,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_AtomicTryLock(SDL_SpinLock *lock); * ***Please note that spinlocks are dangerous if you don't know what you're * doing. Please be careful using any sort of spinlock!*** * - * \param lock a pointer to a lock variable + * \param lock a pointer to a lock variable. * * \since This function is available since SDL 2.0.0. * @@ -128,7 +119,7 @@ extern DECLSPEC void SDLCALL SDL_AtomicLock(SDL_SpinLock *lock); * ***Please note that spinlocks are dangerous if you don't know what you're * doing. Please be careful using any sort of spinlock!*** * - * \param lock a pointer to a lock variable + * \param lock a pointer to a lock variable. * * \since This function is available since SDL 2.0.0. * @@ -257,10 +248,13 @@ typedef void (*SDL_KernelMemoryBarrierFunc)(); /** - * \brief A type representing an atomic integer value. It is a struct - * so people don't accidentally use numeric operations on it. + * A type representing an atomic integer value. + * + * It is a struct so people don't accidentally use numeric operations on it. */ -typedef struct { int value; } SDL_atomic_t; +typedef struct SDL_atomic_t { + int value; +} SDL_atomic_t; /** * Set an atomic variable to a new value if it is currently an old value. @@ -268,9 +262,9 @@ typedef struct { int value; } SDL_atomic_t; * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * - * \param a a pointer to an SDL_atomic_t variable to be modified - * \param oldval the old value - * \param newval the new value + * \param a a pointer to an SDL_atomic_t variable to be modified. + * \param oldval the old value. + * \param newval the new value. * \returns SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. @@ -289,8 +283,8 @@ extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * - * \param a a pointer to an SDL_atomic_t variable to be modified - * \param v the desired value + * \param a a pointer to an SDL_atomic_t variable to be modified. + * \param v the desired value. * \returns the previous value of the atomic variable. * * \since This function is available since SDL 2.0.2. @@ -305,7 +299,7 @@ extern DECLSPEC int SDLCALL SDL_AtomicSet(SDL_atomic_t *a, int v); * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * - * \param a a pointer to an SDL_atomic_t variable + * \param a a pointer to an SDL_atomic_t variable. * \returns the current value of an atomic variable. * * \since This function is available since SDL 2.0.2. @@ -322,8 +316,8 @@ extern DECLSPEC int SDLCALL SDL_AtomicGet(SDL_atomic_t *a); * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * - * \param a a pointer to an SDL_atomic_t variable to be modified - * \param v the desired value to add + * \param a a pointer to an SDL_atomic_t variable to be modified. + * \param v the desired value to add. * \returns the previous value of the atomic variable. * * \since This function is available since SDL 2.0.2. @@ -356,9 +350,9 @@ extern DECLSPEC int SDLCALL SDL_AtomicAdd(SDL_atomic_t *a, int v); * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * - * \param a a pointer to a pointer - * \param oldval the old pointer value - * \param newval the new pointer value + * \param a a pointer to a pointer. + * \param oldval the old pointer value. + * \param newval the new pointer value. * \returns SDL_TRUE if the pointer was set, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. @@ -375,8 +369,8 @@ extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCASPtr(void **a, void *oldval, void * * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * - * \param a a pointer to a pointer - * \param v the desired pointer value + * \param a a pointer to a pointer. + * \param v the desired pointer value. * \returns the previous value of the pointer. * * \since This function is available since SDL 2.0.2. @@ -392,7 +386,7 @@ extern DECLSPEC void* SDLCALL SDL_AtomicSetPtr(void **a, void* v); * ***Note: If you don't know what this function is for, you shouldn't use * it!*** * - * \param a a pointer to a pointer + * \param a a pointer to a pointer. * \returns the current value of a pointer. * * \since This function is available since SDL 2.0.2. diff --git a/vs/sdl2/include/SDL_audio.h b/vs/sdl2/include/SDL_audio.h index bd8e7ab6fa6..cb76e93e43a 100644 --- a/vs/sdl2/include/SDL_audio.h +++ b/vs/sdl2/include/SDL_audio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -22,9 +22,9 @@ /* !!! FIXME: several functions in here need Doxygen comments. */ /** - * \file SDL_audio.h + * # CategoryAudio * - * Access to the raw audio mixing buffer for the SDL library. + * Access to the raw audio mixing buffer for the SDL library. */ #ifndef SDL_audio_h_ @@ -44,24 +44,24 @@ extern "C" { #endif /** - * \brief Audio format flags. - * - * These are what the 16 bits in SDL_AudioFormat currently mean... - * (Unspecified bits are always zero). - * - * \verbatim - ++-----------------------sample is signed if set - || - || ++-----------sample is bigendian if set - || || - || || ++---sample is float if set - || || || - || || || +---sample bit size---+ - || || || | | - 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 - \endverbatim - * - * There are macros in SDL 2.0 and later to query these bits. + * Audio format flags. + * + * These are what the 16 bits in SDL_AudioFormat currently mean... + * (Unspecified bits are always zero). + * + * ``` + * ++-----------------------sample is signed if set + * || + * || ++-----------sample is bigendian if set + * || || + * || || ++---sample is float if set + * || || || + * || || || +---sample bit size---+ + * || || || | | + * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 + * ``` + * + * There are macros in SDL 2.0 and later to query these bits. */ typedef Uint16 SDL_AudioFormat; @@ -149,33 +149,30 @@ typedef Uint16 SDL_AudioFormat; /* @} *//* Audio flags */ /** - * This function is called when the audio device needs more data. - * - * \param userdata An application-specific parameter saved in - * the SDL_AudioSpec structure - * \param stream A pointer to the audio data buffer. - * \param len The length of that buffer in bytes. - * - * Once the callback returns, the buffer will no longer be valid. - * Stereo samples are stored in a LRLRLR ordering. + * This function is called when the audio device needs more data. * - * You can choose to avoid callbacks and use SDL_QueueAudio() instead, if - * you like. Just open your audio device with a NULL callback. + * \param userdata An application-specific parameter saved in the + * SDL_AudioSpec structure. + * \param stream A pointer to the audio data buffer. + * \param len Length of **stream** in bytes. */ typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream, int len); /** - * The calculated values in this structure are calculated by SDL_OpenAudio(). - * - * For multi-channel audio, the default SDL channel mapping is: - * 2: FL FR (stereo) - * 3: FL FR LFE (2.1 surround) - * 4: FL FR BL BR (quad) - * 5: FL FR LFE BL BR (4.1 surround) - * 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR) - * 7: FL FR FC LFE BC SL SR (6.1 surround) - * 8: FL FR FC LFE BL BR SL SR (7.1 surround) + * The calculated values in this structure are calculated by SDL_OpenAudio(). + * + * For multi-channel audio, the default SDL channel mapping is: + * + * ``` + * 2: FL FR (stereo) + * 3: FL FR LFE (2.1 surround) + * 4: FL FR BL BR (quad) + * 5: FL FR LFE BL BR (4.1 surround) + * 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR) + * 7: FL FR FC LFE BC SL SR (6.1 surround) + * 8: FL FR FC LFE BL BR SL SR (7.1 surround) + * ``` */ typedef struct SDL_AudioSpec { @@ -196,11 +193,11 @@ typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, SDL_AudioFormat format); /** - * \brief Upper limit of filters in SDL_AudioCVT + * Upper limit of filters in SDL_AudioCVT * - * The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is - * currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers, - * one of which is the terminating NULL pointer. + * The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is + * currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers, one + * of which is the terminating NULL pointer. */ #define SDL_AUDIOCVT_MAX_FILTERS 9 @@ -287,7 +284,7 @@ extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void); * meant to be proper names. * * \param index the index of the audio driver; the value ranges from 0 to - * SDL_GetNumAudioDrivers() - 1 + * SDL_GetNumAudioDrivers() - 1. * \returns the name of the audio driver at the requested index, or NULL if an * invalid index was specified. * @@ -314,7 +311,7 @@ extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index); * specific need to designate the audio driver you want to use. You should * normally use SDL_Init() or SDL_InitSubSystem(). * - * \param driver_name the name of the desired audio driver + * \param driver_name the name of the desired audio driver. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -408,13 +405,13 @@ extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained); /** - * SDL Audio Device IDs. + * SDL Audio Device IDs. * - * A successful call to SDL_OpenAudio() is always device id 1, and legacy - * SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls - * always returns devices >= 2 on success. The legacy calls are good both - * for backwards compatibility and when you don't care about multiple, - * specific, or capture devices. + * A successful call to SDL_OpenAudio() is always device id 1, and legacy SDL + * audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls + * always returns devices >= 2 on success. The legacy calls are good both for + * backwards compatibility and when you don't care about multiple, specific, + * or capture devices. */ typedef Uint32 SDL_AudioDeviceID; @@ -452,7 +449,7 @@ typedef Uint32 SDL_AudioDeviceID; * ``` * * \param iscapture zero to request playback devices, non-zero to request - * recording devices + * recording devices. * \returns the number of available devices exposed by the current driver or * -1 if an explicit list of devices can't be determined. A return * value of -1 does not necessarily mean an error condition. @@ -478,7 +475,7 @@ extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture); * invalid next time any of several other SDL functions are called. * * \param index the index of the audio device; valid values range from 0 to - * SDL_GetNumAudioDevices() - 1 + * SDL_GetNumAudioDevices() - 1. * \param iscapture non-zero to query the list of recording devices, zero to * query the list of output devices. * \returns the name of the audio device at the requested index, or NULL on @@ -504,11 +501,11 @@ extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, * count. * * \param index the index of the audio device; valid values range from 0 to - * SDL_GetNumAudioDevices() - 1 + * SDL_GetNumAudioDevices() - 1. * \param iscapture non-zero to query the list of recording devices, zero to * query the list of output devices. * \param spec The SDL_AudioSpec to be initialized by this function. - * \returns 0 on success, nonzero on error + * \returns 0 on success, nonzero on error. * * \since This function is available since SDL 2.0.16. * @@ -542,7 +539,7 @@ extern DECLSPEC int SDLCALL SDL_GetAudioDeviceSpec(int index, * \param spec The SDL_AudioSpec to be initialized by this function. * \param iscapture non-zero to query the default recording device, zero to * query the default output device. - * \returns 0 on success, nonzero on error + * \returns 0 on success, nonzero on error. * * \since This function is available since SDL 2.24.0. * @@ -594,7 +591,7 @@ extern DECLSPEC int SDLCALL SDL_GetDefaultAudioInfo(char **name, * frames_ (with stereo output, two samples--left and right--would make a * single sample frame). This number should be a power of two, and may be * adjusted by the audio driver to a value more suitable for the hardware. - * Good values seem to range between 512 and 8096 inclusive, depending on + * Good values seem to range between 512 and 4096 inclusive, depending on * the application and CPU speed. Smaller values reduce latency, but can * lead to underflow if the application is doing heavy processing and cannot * fill the audio buffer in time. Note that the number of sample frames is @@ -645,12 +642,12 @@ extern DECLSPEC int SDLCALL SDL_GetDefaultAudioInfo(char **name, * driver-specific name as appropriate. NULL requests the most * reasonable default device. * \param iscapture non-zero to specify a device should be opened for - * recording, not playback + * recording, not playback. * \param desired an SDL_AudioSpec structure representing the desired output - * format; see SDL_OpenAudio() for more information + * format; see SDL_OpenAudio() for more information. * \param obtained an SDL_AudioSpec structure filled in with the actual output - * format; see SDL_OpenAudio() for more information - * \param allowed_changes 0, or one or more flags OR'd together + * format; see SDL_OpenAudio() for more information. + * \param allowed_changes 0, or one or more flags OR'd together. * \returns a valid device ID that is > 0 on success or 0 on failure; call * SDL_GetError() for more information. * @@ -712,7 +709,7 @@ extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioStatus(void); * Use this function to get the current audio state of an audio device. * * \param dev the ID of an audio device previously opened with - * SDL_OpenAudioDevice() + * SDL_OpenAudioDevice(). * \returns the SDL_AudioStatus of the specified audio device. * * \since This function is available since SDL 2.0.0. @@ -745,7 +742,7 @@ extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioDeviceStatus(SDL_AudioDevice * * ...and is only useful if you used the legacy SDL_OpenAudio() function. * - * \param pause_on non-zero to pause, 0 to unpause + * \param pause_on non-zero to pause, 0 to unpause. * * \since This function is available since SDL 2.0.0. * @@ -775,8 +772,8 @@ extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); * callback, you shouldn't pause the audio device, as it will lead to dropouts * in the audio playback. Instead, you should use SDL_LockAudioDevice(). * - * \param dev a device opened by SDL_OpenAudioDevice() - * \param pause_on non-zero to pause, 0 to unpause + * \param dev a device opened by SDL_OpenAudioDevice(). + * \param pause_on non-zero to pause, 0 to unpause. * * \since This function is available since SDL 2.0.0. * @@ -841,14 +838,14 @@ extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev, * SDL_LoadWAV("sample.wav", &spec, &buf, &len); * ``` * - * \param src The data source for the WAVE data - * \param freesrc If non-zero, SDL will _always_ free the data source + * \param src The data source for the WAVE data. + * \param freesrc If non-zero, SDL will _always_ free the data source. * \param spec An SDL_AudioSpec that will be filled in with the wave file's - * format details + * format details. * \param audio_buf A pointer filled with the audio data, allocated by the * function. * \param audio_len A pointer filled with the length of the audio data buffer - * in bytes + * in bytes. * \returns This function, if successfully called, returns `spec`, which will * be filled with the audio data format of the wave source data. * `audio_buf` will be filled with a pointer to an allocated buffer @@ -874,8 +871,9 @@ extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, Uint32 * audio_len); /** - * Loads a WAV from a file. - * Compatibility convenience function. + * Loads a WAV from a file. + * + * Compatibility convenience function. */ #define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) @@ -888,7 +886,7 @@ extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, * this function with a NULL pointer. * * \param audio_buf a pointer to the buffer created by SDL_LoadWAV() or - * SDL_LoadWAV_RW() + * SDL_LoadWAV_RW(). * * \since This function is available since SDL 2.0.0. * @@ -912,15 +910,16 @@ extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf); * and then can call SDL_ConvertAudio() to complete the conversion. * * \param cvt an SDL_AudioCVT structure filled in with audio conversion - * information + * information. * \param src_format the source format of the audio data; for more info see - * SDL_AudioFormat - * \param src_channels the number of channels in the source - * \param src_rate the frequency (sample-frames-per-second) of the source + * SDL_AudioFormat. + * \param src_channels the number of channels in the source. + * \param src_rate the frequency (sample-frames-per-second) of the source. * \param dst_format the destination format of the audio data; for more info - * see SDL_AudioFormat - * \param dst_channels the number of channels in the destination - * \param dst_rate the frequency (sample-frames-per-second) of the destination + * see SDL_AudioFormat. + * \param dst_channels the number of channels in the destination. + * \param dst_rate the frequency (sample-frames-per-second) of the + * destination. * \returns 1 if the audio filter is prepared, 0 if no conversion is needed, * or a negative error code on failure; call SDL_GetError() for more * information. @@ -991,12 +990,12 @@ typedef struct _SDL_AudioStream SDL_AudioStream; /** * Create a new audio stream. * - * \param src_format The format of the source audio - * \param src_channels The number of channels of the source audio - * \param src_rate The sampling rate of the source audio - * \param dst_format The format of the desired audio output - * \param dst_channels The number of channels of the desired audio output - * \param dst_rate The sampling rate of the desired audio output + * \param src_format The format of the source audio. + * \param src_channels The number of channels of the source audio. + * \param src_rate The sampling rate of the source audio. + * \param dst_format The format of the desired audio output. + * \param dst_channels The number of channels of the desired audio output. + * \param dst_rate The sampling rate of the desired audio output. * \returns 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.7. @@ -1018,9 +1017,9 @@ extern DECLSPEC SDL_AudioStream * SDLCALL SDL_NewAudioStream(const SDL_AudioForm /** * Add data to be converted/resampled to the stream. * - * \param stream The stream the audio data is being added to - * \param buf A pointer to the audio data to add - * \param len The number of bytes to write to the stream + * \param stream The stream the audio data is being added to. + * \param buf A pointer to the audio data to add. + * \param len The number of bytes to write to the stream. * \returns 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.7. @@ -1037,10 +1036,10 @@ extern DECLSPEC int SDLCALL SDL_AudioStreamPut(SDL_AudioStream *stream, const vo /** * Get converted/resampled data from the stream * - * \param stream The stream the audio is being requested from - * \param buf A buffer to fill with audio data - * \param len The maximum number of bytes to fill - * \returns the number of bytes read from the stream, or -1 on error + * \param stream The stream the audio is being requested from. + * \param buf A buffer to fill with audio data. + * \param len The maximum number of bytes to fill. + * \returns the number of bytes read from the stream, or -1 on error. * * \since This function is available since SDL 2.0.7. * @@ -1118,6 +1117,9 @@ extern DECLSPEC void SDLCALL SDL_AudioStreamClear(SDL_AudioStream *stream); */ extern DECLSPEC void SDLCALL SDL_FreeAudioStream(SDL_AudioStream *stream); +/** + * Maximum volume allowed in calls to SDL_MixAudio and SDL_MixAudioFormat. + */ #define SDL_MIX_MAXVOLUME 128 /** @@ -1132,11 +1134,11 @@ extern DECLSPEC void SDLCALL SDL_FreeAudioStream(SDL_AudioStream *stream); * ...where `format` is the obtained format of the audio device from the * legacy SDL_OpenAudio() function. * - * \param dst the destination for the mixed audio - * \param src the source audio buffer to be mixed - * \param len the length of the audio buffer in bytes + * \param dst the destination for the mixed audio. + * \param src the source audio buffer to be mixed. + * \param len the length of the audio buffer in bytes. * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME - * for full audio volume + * for full audio volume. * * \since This function is available since SDL 2.0.0. * @@ -1165,13 +1167,13 @@ extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, * SDL_MixAudioFormat() is really only needed when you're mixing a single * audio stream with a volume adjustment. * - * \param dst the destination for the mixed audio - * \param src the source audio buffer to be mixed + * \param dst the destination for the mixed audio. + * \param src the source audio buffer to be mixed. * \param format the SDL_AudioFormat structure representing the desired audio - * format - * \param len the length of the audio buffer in bytes + * format. + * \param len the length of the audio buffer in bytes. * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME - * for full audio volume + * for full audio volume. * * \since This function is available since SDL 2.0.0. */ @@ -1215,9 +1217,9 @@ extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, * from planar audio formats into a non-planar one (see SDL_AudioFormat) * before queuing audio. * - * \param dev the device ID to which we will queue audio - * \param data the data to queue to the device for later playback - * \param len the number of bytes (not samples!) to which `data` points + * \param dev the device ID to which we will queue audio. + * \param data the data to queue to the device for later playback. + * \param len the number of bytes (not samples!) to which `data` points. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1263,9 +1265,9 @@ extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *da * You should not call SDL_LockAudio() on the device before dequeueing; SDL * handles locking internally for this function. * - * \param dev the device ID from which we will dequeue audio - * \param data a pointer into where audio data should be copied - * \param len the number of bytes (not samples!) to which (data) points + * \param dev the device ID from which we will dequeue audio. + * \param data a pointer into where audio data should be copied. + * \param len the number of bytes (not samples!) to which (data) points. * \returns the number of bytes dequeued, which could be less than requested; * call SDL_GetError() for more information. * @@ -1299,7 +1301,7 @@ extern DECLSPEC Uint32 SDLCALL SDL_DequeueAudio(SDL_AudioDeviceID dev, void *dat * You should not call SDL_LockAudio() on the device before querying; SDL * handles locking internally for this function. * - * \param dev the device ID of which we will query queued audio size + * \param dev the device ID of which we will query queued audio size. * \returns the number of bytes (not samples!) of queued audio. * * \since This function is available since SDL 2.0.4. @@ -1334,7 +1336,7 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev); * * This function always succeeds and thus returns void. * - * \param dev the device ID of which to clear the audio queue + * \param dev the device ID of which to clear the audio queue. * * \since This function is available since SDL 2.0.4. * @@ -1406,7 +1408,7 @@ extern DECLSPEC void SDLCALL SDL_LockAudio(void); * at once, not only will you block the audio callback, you'll block the other * thread. * - * \param dev the ID of the device to be locked + * \param dev the ID of the device to be locked. * * \since This function is available since SDL 2.0.0. * @@ -1439,7 +1441,7 @@ extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); * * This function should be paired with a previous SDL_LockAudioDevice() call. * - * \param dev the ID of the device to be unlocked + * \param dev the ID of the device to be unlocked. * * \since This function is available since SDL 2.0.0. * @@ -1481,7 +1483,7 @@ extern DECLSPEC void SDLCALL SDL_CloseAudio(void); * The device ID is invalid as soon as the device is closed, and is eligible * for reuse in a new SDL_OpenAudioDevice() call immediately. * - * \param dev an audio device previously opened with SDL_OpenAudioDevice() + * \param dev an audio device previously opened with SDL_OpenAudioDevice(). * * \since This function is available since SDL 2.0.0. * diff --git a/vs/sdl2/include/SDL_bits.h b/vs/sdl2/include/SDL_bits.h index 83e8a78c783..747f5565113 100644 --- a/vs/sdl2/include/SDL_bits.h +++ b/vs/sdl2/include/SDL_bits.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_bits.h + * # CategoryBits * - * Functions for fiddling with bits and bitmasks. + * Functions for fiddling with bits and bitmasks. */ #ifndef SDL_bits_h_ @@ -56,6 +56,12 @@ extern __inline int _SDL_bsr_watcom(Uint32); modify exact [eax] nomemory; #endif +/** + * Use this function to get the index of the most significant (set) bit in a + * + * \param x the number to find the MSB of. + * \returns the index of the most significant bit of x, or -1 if x is 0. + */ SDL_FORCE_INLINE int SDL_MostSignificantBitIndex32(Uint32 x) { diff --git a/vs/sdl2/include/SDL_blendmode.h b/vs/sdl2/include/SDL_blendmode.h index 09d01477d8d..c0c68113315 100644 --- a/vs/sdl2/include/SDL_blendmode.h +++ b/vs/sdl2/include/SDL_blendmode.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_blendmode.h + * # CategoryBlendmode * - * Header file declaring the SDL_BlendMode enumeration + * Header file declaring the SDL_BlendMode enumeration */ #ifndef SDL_blendmode_h_ @@ -35,9 +35,9 @@ extern "C" { #endif /** - * \brief The blend mode used in SDL_RenderCopy() and drawing operations. + * The blend mode used in SDL_RenderCopy() and drawing operations. */ -typedef enum +typedef enum SDL_BlendMode { SDL_BLENDMODE_NONE = 0x00000000, /**< no blending dstRGBA = srcRGBA */ @@ -60,9 +60,10 @@ typedef enum } SDL_BlendMode; /** - * \brief The blend operation used when combining source and destination pixel components + * The blend operation used when combining source and destination pixel + * components */ -typedef enum +typedef enum SDL_BlendOperation { SDL_BLENDOPERATION_ADD = 0x1, /**< dst + src: supported by all renderers */ SDL_BLENDOPERATION_SUBTRACT = 0x2, /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */ @@ -72,9 +73,9 @@ typedef enum } SDL_BlendOperation; /** - * \brief The normalized factor used to multiply pixel components + * The normalized factor used to multiply pixel components */ -typedef enum +typedef enum SDL_BlendFactor { SDL_BLENDFACTOR_ZERO = 0x1, /**< 0, 0, 0, 0 */ SDL_BLENDFACTOR_ONE = 0x2, /**< 1, 1, 1, 1 */ @@ -158,18 +159,18 @@ typedef enum * case. * * \param srcColorFactor the SDL_BlendFactor applied to the red, green, and - * blue components of the source pixels + * blue components of the source pixels. * \param dstColorFactor the SDL_BlendFactor applied to the red, green, and - * blue components of the destination pixels + * blue components of the destination pixels. * \param colorOperation the SDL_BlendOperation used to combine the red, * green, and blue components of the source and - * destination pixels + * destination pixels. * \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of - * the source pixels + * the source pixels. * \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of - * the destination pixels + * the destination pixels. * \param alphaOperation the SDL_BlendOperation used to combine the alpha - * component of the source and destination pixels + * component of the source and destination pixels. * \returns an SDL_BlendMode that represents the chosen factors and * operations. * diff --git a/vs/sdl2/include/SDL_clipboard.h b/vs/sdl2/include/SDL_clipboard.h index bd4b044c6dd..2ae16a1d05e 100644 --- a/vs/sdl2/include/SDL_clipboard.h +++ b/vs/sdl2/include/SDL_clipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,7 +20,7 @@ */ /** - * \file SDL_clipboard.h + * # CategoryClipboard * * Include file for SDL clipboard handling */ @@ -41,7 +41,7 @@ extern "C" { /** * Put UTF-8 text into the clipboard. * - * \param text the text to store in the clipboard + * \param text the text to store in the clipboard. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -85,7 +85,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void); /** * Put UTF-8 text into the primary selection. * - * \param text the text to store in the primary selection + * \param text the text to store in the primary selection. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * diff --git a/vs/sdl2/include/SDL_config.h b/vs/sdl2/include/SDL_config.h index 49605b1e8a8..eabd78b52a1 100644 --- a/vs/sdl2/include/SDL_config.h +++ b/vs/sdl2/include/SDL_config.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,9 +24,7 @@ #include "SDL_platform.h" -/** - * \file SDL_config.h - */ +/* WIKI CATEGORY: - */ /* Add any platform that doesn't build using the configure system. */ #if defined(__WIN32__) diff --git a/vs/sdl2/include/SDL_config.h.cmake b/vs/sdl2/include/SDL_config.h.cmake index ffcafd895ce..64b8413c8cd 100644 --- a/vs/sdl2/include/SDL_config.h.cmake +++ b/vs/sdl2/include/SDL_config.h.cmake @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -193,6 +193,7 @@ #cmakedefine HAVE_MEMFD_CREATE 1 #cmakedefine HAVE_POSIX_FALLOCATE 1 #cmakedefine HAVE_SIGACTION 1 +#cmakedefine HAVE_SIGTIMEDWAIT 1 #cmakedefine HAVE_SA_SIGACTION 1 #cmakedefine HAVE_SETJMP 1 #cmakedefine HAVE_NANOSLEEP 1 diff --git a/vs/sdl2/include/SDL_config.h.in b/vs/sdl2/include/SDL_config.h.in index f5dd166ff58..35281d158d8 100644 --- a/vs/sdl2/include/SDL_config.h.in +++ b/vs/sdl2/include/SDL_config.h.in @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -195,6 +195,7 @@ #undef HAVE_FSEEKO #undef HAVE_FSEEKO64 #undef HAVE_SIGACTION +#undef HAVE_SIGTIMEDWAIT #undef HAVE_SA_SIGACTION #undef HAVE_SETJMP #undef HAVE_NANOSLEEP @@ -216,6 +217,7 @@ #undef HAVE__EXIT #else + #define HAVE_STDARG_H 1 #define HAVE_STDDEF_H 1 #define HAVE_STDINT_H 1 diff --git a/vs/sdl2/include/SDL_config_android.h b/vs/sdl2/include/SDL_config_android.h index 00ffef85271..0609995e97d 100644 --- a/vs/sdl2/include/SDL_config_android.h +++ b/vs/sdl2/include/SDL_config_android.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_config_emscripten.h b/vs/sdl2/include/SDL_config_emscripten.h index 637cdae5033..3f064905746 100644 --- a/vs/sdl2/include/SDL_config_emscripten.h +++ b/vs/sdl2/include/SDL_config_emscripten.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_config_iphoneos.h b/vs/sdl2/include/SDL_config_iphoneos.h index 2743901fe51..fed314e8bd6 100644 --- a/vs/sdl2/include/SDL_config_iphoneos.h +++ b/vs/sdl2/include/SDL_config_iphoneos.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_config_macosx.h b/vs/sdl2/include/SDL_config_macosx.h index 2db760a9fd4..e9e6b6d328d 100644 --- a/vs/sdl2/include/SDL_config_macosx.h +++ b/vs/sdl2/include/SDL_config_macosx.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_config_minimal.h b/vs/sdl2/include/SDL_config_minimal.h index ceedda2d649..5695871787f 100644 --- a/vs/sdl2/include/SDL_config_minimal.h +++ b/vs/sdl2/include/SDL_config_minimal.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_config_ngage.h b/vs/sdl2/include/SDL_config_ngage.h index 61c26c2cf76..b6042cd19e9 100644 --- a/vs/sdl2/include/SDL_config_ngage.h +++ b/vs/sdl2/include/SDL_config_ngage.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_config_os2.h b/vs/sdl2/include/SDL_config_os2.h index b2b061d716b..22fafb1f0e7 100644 --- a/vs/sdl2/include/SDL_config_os2.h +++ b/vs/sdl2/include/SDL_config_os2.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_config_pandora.h b/vs/sdl2/include/SDL_config_pandora.h index 27b858df1da..96375c1e059 100644 --- a/vs/sdl2/include/SDL_config_pandora.h +++ b/vs/sdl2/include/SDL_config_pandora.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_config_windows.h b/vs/sdl2/include/SDL_config_windows.h index cd04819d90a..bf231c9ec50 100644 --- a/vs/sdl2/include/SDL_config_windows.h +++ b/vs/sdl2/include/SDL_config_windows.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_config_wingdk.h b/vs/sdl2/include/SDL_config_wingdk.h index c2a63b5ba80..2e329279db6 100644 --- a/vs/sdl2/include/SDL_config_wingdk.h +++ b/vs/sdl2/include/SDL_config_wingdk.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_config_winrt.h b/vs/sdl2/include/SDL_config_winrt.h index 3a11456431b..8fe0b66dbfe 100644 --- a/vs/sdl2/include/SDL_config_winrt.h +++ b/vs/sdl2/include/SDL_config_winrt.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_config_xbox.h b/vs/sdl2/include/SDL_config_xbox.h index a2ea8cbac97..a06f52e544e 100644 --- a/vs/sdl2/include/SDL_config_xbox.h +++ b/vs/sdl2/include/SDL_config_xbox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_copying.h b/vs/sdl2/include/SDL_copying.h index da9089312c1..bde7431896c 100644 --- a/vs/sdl2/include/SDL_copying.h +++ b/vs/sdl2/include/SDL_copying.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_cpuinfo.h b/vs/sdl2/include/SDL_cpuinfo.h index d9c91519bfc..3e2d0eeb330 100644 --- a/vs/sdl2/include/SDL_cpuinfo.h +++ b/vs/sdl2/include/SDL_cpuinfo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,10 +19,16 @@ 3. This notice may not be removed or altered from any source distribution. */ +/* WIKI CATEGORY: CPUInfo */ + /** - * \file SDL_cpuinfo.h + * # CategoryCPUInfo + * + * CPU feature detection for SDL. * - * CPU feature detection for SDL. + * These functions are largely concerned with reporting if the system has + * access to various SIMD instruction sets, but also has other important info + * to share, such as number of logical CPU cores. */ #ifndef SDL_cpuinfo_h_ @@ -53,9 +59,11 @@ _m_prefetch(void *__P) // #ifndef __MMX__ // #define __MMX__ #endif +/* #ifndef __3dNOW__ #define __3dNOW__ #endif +*/ #endif #ifndef __SSE__ #define __SSE__ @@ -107,7 +115,8 @@ _m_prefetch(void *__P) #include #define __LASX__ #endif -#if defined(HAVE_IMMINTRIN_H) && !defined(SDL_DISABLE_IMMINTRIN_H) +#if defined(HAVE_IMMINTRIN_H) && !defined(SDL_DISABLE_IMMINTRIN_H) && \ + (defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)) #include #else #if defined(__MMX__) && !defined(SDL_DISABLE_MMINTRIN_H) diff --git a/vs/sdl2/include/SDL_egl.h b/vs/sdl2/include/SDL_egl.h index a4276e6810b..31290ec25a0 100644 --- a/vs/sdl2/include/SDL_egl.h +++ b/vs/sdl2/include/SDL_egl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,11 +19,10 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** - * \file SDL_egl.h - * - * This is a simple file to encapsulate the EGL API headers. +/* + * This is a simple file to encapsulate the EGL API headers. */ + #if !defined(_MSC_VER) && !defined(__ANDROID__) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS) #if defined(__vita__) || defined(__psp2__) diff --git a/vs/sdl2/include/SDL_endian.h b/vs/sdl2/include/SDL_endian.h index 591ccac4256..5be66eafb9f 100644 --- a/vs/sdl2/include/SDL_endian.h +++ b/vs/sdl2/include/SDL_endian.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_endian.h + * # CategoryEndian * - * Functions for reading and writing endian-specific values + * Functions for reading and writing endian-specific values */ #ifndef SDL_endian_h_ @@ -59,6 +59,15 @@ _m_prefetch(void *__P) #ifdef __linux__ #include #define SDL_BYTEORDER __BYTE_ORDER +#elif defined(__sun) && defined(__SVR4) /* Solaris */ +#include +#if defined(_LITTLE_ENDIAN) +#define SDL_BYTEORDER SDL_LIL_ENDIAN +#elif defined(_BIG_ENDIAN) +#define SDL_BYTEORDER SDL_BIG_ENDIAN +#else +#error Unsupported endianness +#endif #elif defined(__OpenBSD__) || defined(__DragonFly__) #include #define SDL_BYTEORDER BYTE_ORDER @@ -79,7 +88,7 @@ _m_prefetch(void *__P) defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ (defined(__MIPS__) && defined(__MIPSEB__)) || \ defined(__ppc__) || defined(__POWERPC__) || defined(__powerpc__) || defined(__PPC__) || \ - defined(__sparc__) + defined(__sparc__) || defined(__sparc) #define SDL_BYTEORDER SDL_BIG_ENDIAN #else #define SDL_BYTEORDER SDL_LIL_ENDIAN @@ -180,6 +189,16 @@ extern __inline Uint16 SDL_Swap16(Uint16); parm [ax] \ modify [ax]; #else + +/** + * Use this function to swap the byte order of a 16-bit value. + * + * \param x the value to be swapped. + * \returns the swapped value. + * + * \sa SDL_SwapBE16 + * \sa SDL_SwapLE16 + */ SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) { @@ -231,6 +250,16 @@ extern __inline Uint32 SDL_Swap32(Uint32); parm [eax] \ modify [eax]; #else + +/** + * Use this function to swap the byte order of a 32-bit value. + * + * \param x the value to be swapped. + * \returns the swapped value. + * + * \sa SDL_SwapBE32 + * \sa SDL_SwapLE32 + */ SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x) { @@ -276,6 +305,16 @@ extern __inline Uint64 SDL_Swap64(Uint64); parm [eax edx] \ modify [eax edx]; #else + +/** + * Use this function to swap the byte order of a 64-bit value. + * + * \param x the value to be swapped. + * \returns the swapped value. + * + * \sa SDL_SwapBE64 + * \sa SDL_SwapLE64 + */ SDL_FORCE_INLINE Uint64 SDL_Swap64(Uint64 x) { @@ -293,6 +332,15 @@ SDL_Swap64(Uint64 x) #endif +/** + * Use this function to swap the byte order of a floating point value. + * + * \param x the value to be swapped. + * \returns the swapped value. + * + * \sa SDL_SwapFloatBE + * \sa SDL_SwapFloatLE + */ SDL_FORCE_INLINE float SDL_SwapFloat(float x) { diff --git a/vs/sdl2/include/SDL_error.h b/vs/sdl2/include/SDL_error.h index 2df6463ad92..8d9cde0e775 100644 --- a/vs/sdl2/include/SDL_error.h +++ b/vs/sdl2/include/SDL_error.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_error.h + * # CategoryError * - * Simple error message routines for SDL. + * Simple error message routines for SDL. */ #ifndef SDL_error_h_ @@ -53,9 +53,9 @@ extern "C" { * } * ``` * - * \param fmt a printf()-style message format string + * \param fmt a printf()-style message format string. * \param ... additional parameters matching % tokens in the `fmt` string, if - * any + * any. * \returns always -1. * * \since This function is available since SDL 2.0.0. @@ -109,8 +109,8 @@ extern DECLSPEC const char *SDLCALL SDL_GetError(void); * otherwise operates exactly the same as SDL_GetError(). * * \param errstr A buffer to fill with the last error message that was set for - * the current thread - * \param maxlen The size of the buffer pointed to by the errstr parameter + * the current thread. + * \param maxlen The size of the buffer pointed to by the errstr parameter. * \returns the pointer passed in as the `errstr` parameter. * * \since This function is available since SDL 2.0.14. diff --git a/vs/sdl2/include/SDL_events.h b/vs/sdl2/include/SDL_events.h index eccbba2553b..b9596c0ef5e 100644 --- a/vs/sdl2/include/SDL_events.h +++ b/vs/sdl2/include/SDL_events.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_events.h + * # CategoryEvents * - * Include file for SDL event handling. + * Include file for SDL event handling. */ #ifndef SDL_events_h_ @@ -52,7 +52,7 @@ extern "C" { /** * The types of events that can be delivered. */ -typedef enum +typedef enum SDL_EventType { SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */ @@ -167,7 +167,7 @@ typedef enum /* Internal events */ SDL_POLLSENTINEL = 0x7F00, /**< Signals the end of an event poll cycle */ - /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use, + /** Events SDL_USEREVENT through SDL_LASTEVENT are for your use, * and should be allocated with SDL_RegisterEvents() */ SDL_USEREVENT = 0x8000, @@ -179,7 +179,7 @@ typedef enum } SDL_EventType; /** - * \brief Fields shared by every event + * Fields shared by every event */ typedef struct SDL_CommonEvent { @@ -188,14 +188,14 @@ typedef struct SDL_CommonEvent } SDL_CommonEvent; /** - * \brief Display state change event data (event.display.*) + * Display state change event data (event.display.*) */ typedef struct SDL_DisplayEvent { - Uint32 type; /**< ::SDL_DISPLAYEVENT */ + Uint32 type; /**< SDL_DISPLAYEVENT */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 display; /**< The associated display index */ - Uint8 event; /**< ::SDL_DisplayEventID */ + Uint8 event; /**< SDL_DisplayEventID */ Uint8 padding1; Uint8 padding2; Uint8 padding3; @@ -203,14 +203,14 @@ typedef struct SDL_DisplayEvent } SDL_DisplayEvent; /** - * \brief Window state change event data (event.window.*) + * Window state change event data (event.window.*) */ typedef struct SDL_WindowEvent { - Uint32 type; /**< ::SDL_WINDOWEVENT */ + Uint32 type; /**< SDL_WINDOWEVENT */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The associated window */ - Uint8 event; /**< ::SDL_WindowEventID */ + Uint8 event; /**< SDL_WindowEventID */ Uint8 padding1; Uint8 padding2; Uint8 padding3; @@ -219,14 +219,14 @@ typedef struct SDL_WindowEvent } SDL_WindowEvent; /** - * \brief Keyboard button event structure (event.key.*) + * Keyboard button event structure (event.key.*) */ typedef struct SDL_KeyboardEvent { - Uint32 type; /**< ::SDL_KEYDOWN or ::SDL_KEYUP */ + Uint32 type; /**< SDL_KEYDOWN or SDL_KEYUP */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with keyboard focus, if any */ - Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ Uint8 repeat; /**< Non-zero if this is a key repeat */ Uint8 padding2; Uint8 padding3; @@ -234,12 +234,13 @@ typedef struct SDL_KeyboardEvent } SDL_KeyboardEvent; #define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32) + /** - * \brief Keyboard text editing event structure (event.edit.*) + * Keyboard text editing event structure (event.edit.*) */ typedef struct SDL_TextEditingEvent { - Uint32 type; /**< ::SDL_TEXTEDITING */ + Uint32 type; /**< SDL_TEXTEDITING */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with keyboard focus, if any */ char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */ @@ -248,12 +249,12 @@ typedef struct SDL_TextEditingEvent } SDL_TextEditingEvent; /** - * \brief Extended keyboard text editing event structure (event.editExt.*) when text would be - * truncated if stored in the text buffer SDL_TextEditingEvent + * Extended keyboard text editing event structure (event.editExt.*) when text + * would be truncated if stored in the text buffer SDL_TextEditingEvent */ typedef struct SDL_TextEditingExtEvent { - Uint32 type; /**< ::SDL_TEXTEDITING_EXT */ + Uint32 type; /**< SDL_TEXTEDITING_EXT */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with keyboard focus, if any */ char* text; /**< The editing text, which should be freed with SDL_free(), and will not be NULL */ @@ -261,24 +262,43 @@ typedef struct SDL_TextEditingExtEvent Sint32 length; /**< The length of selected editing text */ } SDL_TextEditingExtEvent; +/** + * The maximum bytes of text that can be supplied in an SDL_TextInputEvent. + */ #define SDL_TEXTINPUTEVENT_TEXT_SIZE (32) + /** - * \brief Keyboard text input event structure (event.text.*) + * Keyboard text input event structure (event.text.*) + * + * `text` is limited to SDL_TEXTINPUTEVENT_TEXT_SIZE bytes. If the incoming + * string is larger than this, SDL will split it and send it in pieces, across + * multiple events. The string is in UTF-8 format, and if split, SDL + * guarantees that it will not split in the middle of a UTF-8 sequence, so any + * event will only contain complete codepoints. However, if there are several + * codepoints that go together into a single glyph (like an emoji "thumbs up" + * followed by a skin color), they may be split between events. + * + * This event will never be delivered unless text input is enabled by calling + * SDL_StartTextInput(). Text input is enabled by default on desktop + * platforms, and disabled by default on mobile platforms! + * + * \sa SDL_StartTextInput + * \sa SDL_StopTextInput */ typedef struct SDL_TextInputEvent { - Uint32 type; /**< ::SDL_TEXTINPUT */ + Uint32 type; /**< SDL_TEXTINPUT */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with keyboard focus, if any */ - char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */ + char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text; UTF-8 encoded. */ } SDL_TextInputEvent; /** - * \brief Mouse motion event structure (event.motion.*) + * Mouse motion event structure (event.motion.*) */ typedef struct SDL_MouseMotionEvent { - Uint32 type; /**< ::SDL_MOUSEMOTION */ + Uint32 type; /**< SDL_MOUSEMOTION */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with mouse focus, if any */ Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ @@ -290,16 +310,16 @@ typedef struct SDL_MouseMotionEvent } SDL_MouseMotionEvent; /** - * \brief Mouse button event structure (event.button.*) + * Mouse button event structure (event.button.*) */ typedef struct SDL_MouseButtonEvent { - Uint32 type; /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */ + Uint32 type; /**< SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with mouse focus, if any */ Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ Uint8 button; /**< The mouse button index */ - Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ Uint8 clicks; /**< 1 for single-click, 2 for double-click, etc. */ Uint8 padding1; Sint32 x; /**< X coordinate, relative to window */ @@ -307,11 +327,11 @@ typedef struct SDL_MouseButtonEvent } SDL_MouseButtonEvent; /** - * \brief Mouse wheel event structure (event.wheel.*) + * Mouse wheel event structure (event.wheel.*) */ typedef struct SDL_MouseWheelEvent { - Uint32 type; /**< ::SDL_MOUSEWHEEL */ + Uint32 type; /**< SDL_MOUSEWHEEL */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The window with mouse focus, if any */ Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ @@ -325,11 +345,11 @@ typedef struct SDL_MouseWheelEvent } SDL_MouseWheelEvent; /** - * \brief Joystick axis motion event structure (event.jaxis.*) + * Joystick axis motion event structure (event.jaxis.*) */ typedef struct SDL_JoyAxisEvent { - Uint32 type; /**< ::SDL_JOYAXISMOTION */ + Uint32 type; /**< SDL_JOYAXISMOTION */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Uint8 axis; /**< The joystick axis index */ @@ -341,11 +361,11 @@ typedef struct SDL_JoyAxisEvent } SDL_JoyAxisEvent; /** - * \brief Joystick trackball motion event structure (event.jball.*) + * Joystick trackball motion event structure (event.jball.*) */ typedef struct SDL_JoyBallEvent { - Uint32 type; /**< ::SDL_JOYBALLMOTION */ + Uint32 type; /**< SDL_JOYBALLMOTION */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Uint8 ball; /**< The joystick trackball index */ @@ -357,18 +377,18 @@ typedef struct SDL_JoyBallEvent } SDL_JoyBallEvent; /** - * \brief Joystick hat position change event structure (event.jhat.*) + * Joystick hat position change event structure (event.jhat.*) */ typedef struct SDL_JoyHatEvent { - Uint32 type; /**< ::SDL_JOYHATMOTION */ + Uint32 type; /**< SDL_JOYHATMOTION */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Uint8 hat; /**< The joystick hat index */ Uint8 value; /**< The hat position value. - * \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP - * \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT - * \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN + * \sa SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP + * \sa SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT + * \sa SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN * * Note that zero means the POV is centered. */ @@ -377,46 +397,51 @@ typedef struct SDL_JoyHatEvent } SDL_JoyHatEvent; /** - * \brief Joystick button event structure (event.jbutton.*) + * Joystick button event structure (event.jbutton.*) */ typedef struct SDL_JoyButtonEvent { - Uint32 type; /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */ + Uint32 type; /**< SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Uint8 button; /**< The joystick button index */ - Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ Uint8 padding1; Uint8 padding2; } SDL_JoyButtonEvent; /** - * \brief Joystick device event structure (event.jdevice.*) + * Joystick device event structure (event.jdevice.*) + * + * SDL will send JOYSTICK_ADDED events for devices that are already plugged in + * during SDL_Init. + * + * \sa SDL_ControllerDeviceEvent */ typedef struct SDL_JoyDeviceEvent { - Uint32 type; /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */ + Uint32 type; /**< SDL_JOYDEVICEADDED or SDL_JOYDEVICEREMOVED */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED event */ } SDL_JoyDeviceEvent; /** - * \brief Joysick battery level change event structure (event.jbattery.*) + * Joysick battery level change event structure (event.jbattery.*) */ typedef struct SDL_JoyBatteryEvent { - Uint32 type; /**< ::SDL_JOYBATTERYUPDATED */ + Uint32 type; /**< SDL_JOYBATTERYUPDATED */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ SDL_JoystickPowerLevel level; /**< The joystick battery level */ } SDL_JoyBatteryEvent; /** - * \brief Game controller axis motion event structure (event.caxis.*) + * Game controller axis motion event structure (event.caxis.*) */ typedef struct SDL_ControllerAxisEvent { - Uint32 type; /**< ::SDL_CONTROLLERAXISMOTION */ + Uint32 type; /**< SDL_CONTROLLERAXISMOTION */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Uint8 axis; /**< The controller axis (SDL_GameControllerAxis) */ @@ -429,36 +454,42 @@ typedef struct SDL_ControllerAxisEvent /** - * \brief Game controller button event structure (event.cbutton.*) + * Game controller button event structure (event.cbutton.*) */ typedef struct SDL_ControllerButtonEvent { - Uint32 type; /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */ + Uint32 type; /**< SDL_CONTROLLERBUTTONDOWN or SDL_CONTROLLERBUTTONUP */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Uint8 button; /**< The controller button (SDL_GameControllerButton) */ - Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ Uint8 padding1; Uint8 padding2; } SDL_ControllerButtonEvent; /** - * \brief Controller device event structure (event.cdevice.*) + * Controller device event structure (event.cdevice.*) + * + * Joysticks that are supported game controllers receive both an + * SDL_JoyDeviceEvent and an SDL_ControllerDeviceEvent. + * + * SDL will send CONTROLLERDEVICEADDED events for joysticks that are already + * plugged in during SDL_Init() and are recognized as game controllers. */ typedef struct SDL_ControllerDeviceEvent { - Uint32 type; /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, ::SDL_CONTROLLERDEVICEREMAPPED, or ::SDL_CONTROLLERSTEAMHANDLEUPDATED */ + Uint32 type; /**< SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMOVED, SDL_CONTROLLERDEVICEREMAPPED, or SDL_CONTROLLERSTEAMHANDLEUPDATED */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ } SDL_ControllerDeviceEvent; /** - * \brief Game controller touchpad event structure (event.ctouchpad.*) + * Game controller touchpad event structure (event.ctouchpad.*) */ typedef struct SDL_ControllerTouchpadEvent { - Uint32 type; /**< ::SDL_CONTROLLERTOUCHPADDOWN or ::SDL_CONTROLLERTOUCHPADMOTION or ::SDL_CONTROLLERTOUCHPADUP */ + Uint32 type; /**< SDL_CONTROLLERTOUCHPADDOWN or SDL_CONTROLLERTOUCHPADMOTION or SDL_CONTROLLERTOUCHPADUP */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ Sint32 touchpad; /**< The index of the touchpad */ @@ -469,24 +500,24 @@ typedef struct SDL_ControllerTouchpadEvent } SDL_ControllerTouchpadEvent; /** - * \brief Game controller sensor event structure (event.csensor.*) + * Game controller sensor event structure (event.csensor.*) */ typedef struct SDL_ControllerSensorEvent { - Uint32 type; /**< ::SDL_CONTROLLERSENSORUPDATE */ + Uint32 type; /**< SDL_CONTROLLERSENSORUPDATE */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_JoystickID which; /**< The joystick instance id */ - Sint32 sensor; /**< The type of the sensor, one of the values of ::SDL_SensorType */ + Sint32 sensor; /**< The type of the sensor, one of the values of SDL_SensorType */ float data[3]; /**< Up to 3 values from the sensor, as defined in SDL_sensor.h */ Uint64 timestamp_us; /**< The timestamp of the sensor reading in microseconds, if the hardware provides this information. */ } SDL_ControllerSensorEvent; /** - * \brief Audio device event structure (event.adevice.*) + * Audio device event structure (event.adevice.*) */ typedef struct SDL_AudioDeviceEvent { - Uint32 type; /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */ + Uint32 type; /**< SDL_AUDIODEVICEADDED, or SDL_AUDIODEVICEREMOVED */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 which; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */ Uint8 iscapture; /**< zero if an output device, non-zero if a capture device. */ @@ -497,11 +528,11 @@ typedef struct SDL_AudioDeviceEvent /** - * \brief Touch finger event structure (event.tfinger.*) + * Touch finger event structure (event.tfinger.*) */ typedef struct SDL_TouchFingerEvent { - Uint32 type; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */ + Uint32 type; /**< SDL_FINGERMOTION or SDL_FINGERDOWN or SDL_FINGERUP */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_TouchID touchId; /**< The touch device id */ SDL_FingerID fingerId; @@ -515,11 +546,11 @@ typedef struct SDL_TouchFingerEvent /** - * \brief Multiple Finger Gesture Event (event.mgesture.*) + * Multiple Finger Gesture Event (event.mgesture.*) */ typedef struct SDL_MultiGestureEvent { - Uint32 type; /**< ::SDL_MULTIGESTURE */ + Uint32 type; /**< SDL_MULTIGESTURE */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_TouchID touchId; /**< The touch device id */ float dTheta; @@ -532,11 +563,11 @@ typedef struct SDL_MultiGestureEvent /** - * \brief Dollar Gesture Event (event.dgesture.*) + * Dollar Gesture Event (event.dgesture.*) */ typedef struct SDL_DollarGestureEvent { - Uint32 type; /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */ + Uint32 type; /**< SDL_DOLLARGESTURE or SDL_DOLLARRECORD */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_TouchID touchId; /**< The touch device id */ SDL_GestureID gestureId; @@ -548,13 +579,15 @@ typedef struct SDL_DollarGestureEvent /** - * \brief An event used to request a file open by the system (event.drop.*) - * This event is enabled by default, you can disable it with SDL_EventState(). - * \note If this event is enabled, you must free the filename in the event. + * An event used to request a file open by the system (event.drop.*) + * + * This event is enabled by default, you can disable it with SDL_EventState(). + * + * If this event is enabled, you must free the filename in the event. */ typedef struct SDL_DropEvent { - Uint32 type; /**< ::SDL_DROPBEGIN or ::SDL_DROPFILE or ::SDL_DROPTEXT or ::SDL_DROPCOMPLETE */ + Uint32 type; /**< SDL_DROPBEGIN or SDL_DROPFILE or SDL_DROPTEXT or SDL_DROPCOMPLETE */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ char *file; /**< The file name, which should be freed with SDL_free(), is NULL on begin/complete */ Uint32 windowID; /**< The window that was dropped on, if any */ @@ -562,11 +595,11 @@ typedef struct SDL_DropEvent /** - * \brief Sensor event structure (event.sensor.*) + * Sensor event structure (event.sensor.*) */ typedef struct SDL_SensorEvent { - Uint32 type; /**< ::SDL_SENSORUPDATE */ + Uint32 type; /**< SDL_SENSORUPDATE */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Sint32 which; /**< The instance ID of the sensor */ float data[6]; /**< Up to 6 values from the sensor - additional values can be queried using SDL_SensorGetData() */ @@ -574,20 +607,20 @@ typedef struct SDL_SensorEvent } SDL_SensorEvent; /** - * \brief The "quit requested" event + * The "quit requested" event */ typedef struct SDL_QuitEvent { - Uint32 type; /**< ::SDL_QUIT */ + Uint32 type; /**< SDL_QUIT */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ } SDL_QuitEvent; /** - * \brief A user-defined event type (event.user.*) + * A user-defined event type (event.user.*) */ typedef struct SDL_UserEvent { - Uint32 type; /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */ + Uint32 type; /**< SDL_USEREVENT through SDL_LASTEVENT-1 */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ Uint32 windowID; /**< The associated window if any */ Sint32 code; /**< User defined event code */ @@ -600,20 +633,24 @@ struct SDL_SysWMmsg; typedef struct SDL_SysWMmsg SDL_SysWMmsg; /** - * \brief A video driver dependent system event (event.syswm.*) - * This event is disabled by default, you can enable it with SDL_EventState() + * A video driver dependent system event (event.syswm.*) + * + * This event is disabled by default, you can enable it with SDL_EventState() * - * \note If you want to use this event, you should include SDL_syswm.h. + * If you want to use this event, you should include SDL_syswm.h. */ typedef struct SDL_SysWMEvent { - Uint32 type; /**< ::SDL_SYSWMEVENT */ + Uint32 type; /**< SDL_SYSWMEVENT */ Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */ } SDL_SysWMEvent; /** - * \brief General event structure + * General event structure + * + * The SDL_Event structure is the core of all event handling in SDL. SDL_Event + * is a union of all event structures used in SDL. */ typedef union SDL_Event { @@ -696,7 +733,7 @@ SDL_COMPILE_TIME_ASSERT(SDL_Event, sizeof(SDL_Event) == sizeof(((SDL_Event *)NUL extern DECLSPEC void SDLCALL SDL_PumpEvents(void); /* @{ */ -typedef enum +typedef enum SDL_eventaction { SDL_ADDEVENT, SDL_PEEKEVENT, @@ -723,15 +760,15 @@ typedef enum * * This function is thread-safe. * - * \param events destination buffer for the retrieved events + * \param events destination buffer for the retrieved events. * \param numevents if action is SDL_ADDEVENT, the number of events to add * back to the event queue; if action is SDL_PEEKEVENT or - * SDL_GETEVENT, the maximum number of events to retrieve - * \param action action to take; see [[#action|Remarks]] for details + * SDL_GETEVENT, the maximum number of events to retrieve. + * \param action action to take; see [[#action|Remarks]] for details. * \param minType minimum value of the event type to be considered; - * SDL_FIRSTEVENT is a safe choice + * SDL_FIRSTEVENT is a safe choice. * \param maxType maximum value of the event type to be considered; - * SDL_LASTEVENT is a safe choice + * SDL_LASTEVENT is a safe choice. * \returns the number of events actually stored or a negative error code on * failure; call SDL_GetError() for more information. * @@ -752,7 +789,7 @@ extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents, * If you need to check for a range of event types, use SDL_HasEvents() * instead. * - * \param type the type of event to be queried; see SDL_EventType for details + * \param type the type of event to be queried; see SDL_EventType for details. * \returns SDL_TRUE if events matching `type` are present, or SDL_FALSE if * events matching `type` are not present. * @@ -769,9 +806,9 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 type); * If you need to check for a single event type, use SDL_HasEvent() instead. * * \param minType the low end of event type to be queried, inclusive; see - * SDL_EventType for details + * SDL_EventType for details. * \param maxType the high end of event type to be queried, inclusive; see - * SDL_EventType for details + * SDL_EventType for details. * \returns SDL_TRUE if events with type >= `minType` and <= `maxType` are * present, or SDL_FALSE if not. * @@ -795,7 +832,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType); * sure that all pending OS events are flushed, you can call SDL_PumpEvents() * on the main thread immediately before the flush call. * - * \param type the type of event to be cleared; see SDL_EventType for details + * \param type the type of event to be cleared; see SDL_EventType for details. * * \since This function is available since SDL 2.0.0. * @@ -818,9 +855,9 @@ extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type); * on the main thread immediately before the flush call. * * \param minType the low end of event type to be cleared, inclusive; see - * SDL_EventType for details + * SDL_EventType for details. * \param maxType the high end of event type to be cleared, inclusive; see - * SDL_EventType for details + * SDL_EventType for details. * * \since This function is available since SDL 2.0.0. * @@ -861,7 +898,7 @@ extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType); * ``` * * \param event the SDL_Event structure to be filled with the next event from - * the queue, or NULL + * the queue, or NULL. * \returns 1 if there is a pending event or 0 if there are none available. * * \since This function is available since SDL 2.0.0. @@ -885,7 +922,7 @@ extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event); * this function in the thread that initialized the video subsystem. * * \param event the SDL_Event structure to be filled in with the next event - * from the queue, or NULL + * from the queue, or NULL. * \returns 1 on success or 0 if there was an error while waiting for events; * call SDL_GetError() for more information. * @@ -908,9 +945,9 @@ extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event); * this function in the thread that initialized the video subsystem. * * \param event the SDL_Event structure to be filled in with the next event - * from the queue, or NULL + * from the queue, or NULL. * \param timeout the maximum number of milliseconds to wait for the next - * available event + * available event. * \returns 1 on success or 0 if there was an error while waiting for events; * call SDL_GetError() for more information. This also returns 0 if * the timeout elapsed without an event arriving. @@ -945,7 +982,7 @@ extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event * event, * get an event type that does not conflict with other code that also wants * its own custom event types. * - * \param event the SDL_Event to be added to the queue + * \param event the SDL_Event to be added to the queue. * \returns 1 on success, 0 if the event was filtered, or a negative error * code on failure; call SDL_GetError() for more information. A * common reason for error is the event queue being full. @@ -961,11 +998,11 @@ extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event); /** * A function pointer used for callbacks that watch the event queue. * - * \param userdata what was passed as `userdata` to SDL_SetEventFilter() - * or SDL_AddEventWatch, etc - * \param event the event that triggered the callback - * \returns 1 to permit event to be added to the queue, and 0 to disallow - * it. When used with SDL_AddEventWatch, the return value is ignored. + * \param userdata what was passed as `userdata` to SDL_SetEventFilter() or + * SDL_AddEventWatch, etc. + * \param event the event that triggered the callback. + * \returns 1 to permit event to be added to the queue, and 0 to disallow it. + * When used with SDL_AddEventWatch, the return value is ignored. * * \sa SDL_SetEventFilter * \sa SDL_AddEventWatch @@ -988,7 +1025,7 @@ typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event); * interrupt signal (e.g. pressing Ctrl-C), it will be delivered to the * application at the next event poll. * - * There is one caveat when dealing with the ::SDL_QuitEvent event type. The + * There is one caveat when dealing with the SDL_QuitEvent event type. The * event filter is only called when the window manager desires to close the * application window. If the event filter returns 1, then the window will be * closed, otherwise the window will remain open if possible. @@ -1003,8 +1040,8 @@ typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event); * the event filter, but events pushed onto the queue with SDL_PeepEvents() do * not. * - * \param filter An SDL_EventFilter function to call when an event happens - * \param userdata a pointer that is passed to `filter` + * \param filter An SDL_EventFilter function to call when an event happens. + * \param userdata a pointer that is passed to `filter`. * * \since This function is available since SDL 2.0.0. * @@ -1023,9 +1060,9 @@ extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter, * This function can be used to "chain" filters, by saving the existing filter * before replacing it with a function that will call that saved filter. * - * \param filter the current callback function will be stored here + * \param filter the current callback function will be stored here. * \param userdata the pointer that is passed to the current event filter will - * be stored here + * be stored here. * \returns SDL_TRUE on success or SDL_FALSE if there is no event filter set. * * \since This function is available since SDL 2.0.0. @@ -1054,7 +1091,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter, * through SDL_PeepEvents(). * * \param filter an SDL_EventFilter function to call when an event happens. - * \param userdata a pointer that is passed to `filter` + * \param userdata a pointer that is passed to `filter`. * * \since This function is available since SDL 2.0.0. * @@ -1070,8 +1107,8 @@ extern DECLSPEC void SDLCALL SDL_AddEventWatch(SDL_EventFilter filter, * This function takes the same input as SDL_AddEventWatch() to identify and * delete the corresponding callback. * - * \param filter the function originally passed to SDL_AddEventWatch() - * \param userdata the pointer originally passed to SDL_AddEventWatch() + * \param filter the function originally passed to SDL_AddEventWatch(). + * \param userdata the pointer originally passed to SDL_AddEventWatch(). * * \since This function is available since SDL 2.0.0. * @@ -1088,8 +1125,8 @@ extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter, * this function does not change the filter permanently, it only uses the * supplied filter until this function returns. * - * \param filter the SDL_EventFilter function to call when an event happens - * \param userdata a pointer that is passed to `filter` + * \param filter the SDL_EventFilter function to call when an event happens. + * \param userdata a pointer that is passed to `filter`. * * \since This function is available since SDL 2.0.0. * @@ -1115,8 +1152,8 @@ extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, * from the event queue and will not be filtered * - `SDL_ENABLE`: the event will be processed normally * - * \param type the type of event; see SDL_EventType for details - * \param state how to process the event + * \param type the type of event; see SDL_EventType for details. + * \param state how to process the event. * \returns `SDL_DISABLE` or `SDL_ENABLE`, representing the processing state * of the event before this function makes any changes to it. * @@ -1138,7 +1175,7 @@ extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint32 type, int state); * Note, (Uint32)-1 means the maximum unsigned 32-bit integer value (or * 0xFFFFFFFF), but is clearer to write. * - * \param numevents the number of events to be allocated + * \param numevents the number of events to be allocated. * \returns the beginning event number, or (Uint32)-1 if there are not enough * user-defined events left. * diff --git a/vs/sdl2/include/SDL_filesystem.h b/vs/sdl2/include/SDL_filesystem.h index 07498898d32..c72a6165fe5 100644 --- a/vs/sdl2/include/SDL_filesystem.h +++ b/vs/sdl2/include/SDL_filesystem.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_filesystem.h + * # CategoryFilesystem * - * \brief Include file for filesystem SDL API functions + * Include file for filesystem SDL API functions */ #ifndef SDL_filesystem_h_ @@ -126,8 +126,8 @@ extern DECLSPEC char *SDLCALL SDL_GetBasePath(void); * The pointer returned is owned by the caller. Please call SDL_free() on the * pointer when done with it. * - * \param org the name of your organization - * \param app the name of your application + * \param org the name of your organization. + * \param app the name of your application. * \returns a UTF-8 string of the user directory in platform-dependent * notation. NULL if there's a problem (creating directory failed, * etc.). diff --git a/vs/sdl2/include/SDL_gamecontroller.h b/vs/sdl2/include/SDL_gamecontroller.h index 281fa356c63..4d8bcce22bd 100644 --- a/vs/sdl2/include/SDL_gamecontroller.h +++ b/vs/sdl2/include/SDL_gamecontroller.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,10 +19,12 @@ 3. This notice may not be removed or altered from any source distribution. */ +/* WIKI CATEGORY: GameController */ + /** - * \file SDL_gamecontroller.h + * # CategoryGameController * - * Include file for SDL game controller event handling + * Include file for SDL game controller event handling */ #ifndef SDL_gamecontroller_h_ @@ -44,7 +46,7 @@ extern "C" { * \file SDL_gamecontroller.h * * In order to use these functions, SDL_Init() must have been called - * with the ::SDL_INIT_GAMECONTROLLER flag. This causes SDL to scan the system + * with the SDL_INIT_GAMECONTROLLER flag. This causes SDL to scan the system * for game controllers, and load appropriate drivers. * * If you would like to receive controller updates while the application @@ -58,7 +60,7 @@ extern "C" { struct _SDL_GameController; typedef struct _SDL_GameController SDL_GameController; -typedef enum +typedef enum SDL_GameControllerType { SDL_CONTROLLER_TYPE_UNKNOWN = 0, SDL_CONTROLLER_TYPE_XBOX360, @@ -77,7 +79,7 @@ typedef enum SDL_CONTROLLER_TYPE_MAX } SDL_GameControllerType; -typedef enum +typedef enum SDL_GameControllerBindType { SDL_CONTROLLER_BINDTYPE_NONE = 0, SDL_CONTROLLER_BINDTYPE_BUTTON, @@ -86,7 +88,7 @@ typedef enum } SDL_GameControllerBindType; /** - * Get the SDL joystick layer binding for this controller button/axis mapping + * Get the SDL joystick layer binding for this controller button/axis mapping */ typedef struct SDL_GameControllerButtonBind { @@ -144,6 +146,10 @@ typedef struct SDL_GameControllerButtonBind * If a new mapping is loaded for an already known controller GUID, the later * version will overwrite the one currently loaded. * + * If this function is called before SDL_Init, SDL will generate an + * SDL_CONTROLLERDEVICEADDED event for matching controllers that are plugged + * in at the time that SDL_Init is called. + * * Mappings not belonging to the current platform or with no platform field * specified will be ignored (i.e. mappings for Linux will be ignored in * Windows, etc). @@ -152,8 +158,8 @@ typedef struct SDL_GameControllerButtonBind * processing it, so take this into consideration if you are in a memory * constrained environment. * - * \param rw the data stream for the mappings to be added - * \param freerw non-zero to close the stream after being read + * \param rw the data stream for the mappings to be added. + * \param freerw non-zero to close the stream after being read. * \returns the number of mappings added or -1 on error; call SDL_GetError() * for more information. * @@ -162,13 +168,15 @@ typedef struct SDL_GameControllerButtonBind * \sa SDL_GameControllerAddMapping * \sa SDL_GameControllerAddMappingsFromFile * \sa SDL_GameControllerMappingForGUID + * \sa SDL_CONTROLLERDEVICEADDED */ extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, int freerw); /** - * Load a set of mappings from a file, filtered by the current SDL_GetPlatform() + * Load a set of mappings from a file, filtered by the current + * SDL_GetPlatform() * - * Convenience macro. + * Convenience macro. */ #define SDL_GameControllerAddMappingsFromFile(file) SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file, "rb"), 1) @@ -190,7 +198,11 @@ extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, * "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7" * ``` * - * \param mappingString the mapping string + * If this function is called before SDL_Init, SDL will generate an + * SDL_CONTROLLERDEVICEADDED event for matching controllers that are plugged + * in at the time that SDL_Init is called. + * + * \param mappingString the mapping string. * \returns 1 if a new mapping is added, 0 if an existing mapping is updated, * -1 on error; call SDL_GetError() for more information. * @@ -198,6 +210,7 @@ extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, * * \sa SDL_GameControllerMapping * \sa SDL_GameControllerMappingForGUID + * \sa SDL_CONTROLLERDEVICEADDED */ extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping(const char* mappingString); @@ -225,7 +238,7 @@ extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForIndex(int mapping_ind * * The returned string must be freed with SDL_free(). * - * \param guid a structure containing the GUID for which a mapping is desired + * \param guid a structure containing the GUID for which a mapping is desired. * \returns a mapping string or NULL on error; call SDL_GetError() for more * information. * @@ -244,7 +257,7 @@ extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForGUID(SDL_JoystickGUID * Details about mappings are discussed with SDL_GameControllerAddMapping(). * * \param gamecontroller the game controller you want to get the current - * mapping for + * mapping for. * \returns a string that has the controller's mapping or NULL if no mapping * is available; call SDL_GetError() for more information. * @@ -262,7 +275,7 @@ extern DECLSPEC char * SDLCALL SDL_GameControllerMapping(SDL_GameController *gam * SDL_JoystickOpen(). * * \param joystick_index the device_index of a device, up to - * SDL_NumJoysticks() + * SDL_NumJoysticks(). * \returns SDL_TRUE if the given joystick is supported by the game controller * interface, SDL_FALSE if it isn't or it's an invalid index. * @@ -282,7 +295,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index); * SDL_JoystickOpen(). * * \param joystick_index the device_index of a device, from zero to - * SDL_NumJoysticks()-1 + * SDL_NumJoysticks()-1. * \returns the implementation-dependent name for the game controller, or NULL * if there is no name or the index is invalid. * @@ -303,7 +316,7 @@ extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_ * SDL_JoystickOpen(). * * \param joystick_index the device_index of a device, from zero to - * SDL_NumJoysticks()-1 + * SDL_NumJoysticks()-1. * \returns the implementation-dependent path for the game controller, or NULL * if there is no path or the index is invalid. * @@ -319,7 +332,7 @@ extern DECLSPEC const char *SDLCALL SDL_GameControllerPathForIndex(int joystick_ * This can be called before any controllers are opened. * * \param joystick_index the device_index of a device, from zero to - * SDL_NumJoysticks()-1 + * SDL_NumJoysticks()-1. * \returns the controller type. * * \since This function is available since SDL 2.0.12. @@ -332,7 +345,7 @@ extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerTypeForIndex(in * This can be called before any controllers are opened. * * \param joystick_index the device_index of a device, from zero to - * SDL_NumJoysticks()-1 + * SDL_NumJoysticks()-1. * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if * no mapping is available. * @@ -352,7 +365,7 @@ extern DECLSPEC char *SDLCALL SDL_GameControllerMappingForDeviceIndex(int joysti * be used there instead. * * \param joystick_index the device_index of a device, up to - * SDL_NumJoysticks() + * SDL_NumJoysticks(). * \returns a gamecontroller identifier or NULL if an error occurred; call * SDL_GetError() for more information. * @@ -367,7 +380,7 @@ extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerOpen(int joystick_ /** * Get the SDL_GameController associated with an instance id. * - * \param joyid the instance id to get the SDL_GameController for + * \param joyid the instance id to get the SDL_GameController for. * \returns an SDL_GameController on success or NULL on failure; call * SDL_GetError() for more information. * @@ -399,7 +412,7 @@ extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromPlayerIndex(in * it takes a controller identifier instead of the (unstable) device index. * * \param gamecontroller a game controller identifier previously returned by - * SDL_GameControllerOpen() + * SDL_GameControllerOpen(). * \returns the implementation dependent name for the game controller, or NULL * if there is no name or the identifier passed is invalid. * @@ -417,7 +430,7 @@ extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *g * it takes a controller identifier instead of the (unstable) device index. * * \param gamecontroller a game controller identifier previously returned by - * SDL_GameControllerOpen() + * SDL_GameControllerOpen(). * \returns the implementation dependent path for the game controller, or NULL * if there is no path or the identifier passed is invalid. * @@ -527,8 +540,8 @@ extern DECLSPEC const char * SDLCALL SDL_GameControllerGetSerial(SDL_GameControl /** * Get the Steam Input handle of an opened controller, if available. * - * Returns an InputHandle_t for the controller that can be used with Steam Input API: - * https://partner.steamgames.com/doc/api/ISteamInput + * Returns an InputHandle_t for the controller that can be used with Steam + * Input API: https://partner.steamgames.com/doc/api/ISteamInput * * \param gamecontroller the game controller object to query. * \returns the gamepad handle, or 0 if unavailable. @@ -542,7 +555,7 @@ extern DECLSPEC Uint64 SDLCALL SDL_GameControllerGetSteamHandle(SDL_GameControll * Check if a controller has been opened and is currently connected. * * \param gamecontroller a game controller identifier previously returned by - * SDL_GameControllerOpen() + * SDL_GameControllerOpen(). * \returns SDL_TRUE if the controller has been opened and is currently * connected, or SDL_FALSE if not. * @@ -567,7 +580,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerGetAttached(SDL_GameControlle * cause SDL to crash. * * \param gamecontroller the game controller object that you want to get a - * joystick from + * joystick from. * \returns a SDL_Joystick object; call SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. @@ -584,7 +597,7 @@ extern DECLSPEC SDL_Joystick *SDLCALL SDL_GameControllerGetJoystick(SDL_GameCont * Any number can be passed to SDL_GameControllerEventState(), but only -1, 0, * and 1 will have any effect. Other numbers will just be returned. * - * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` + * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE`. * \returns the same value passed to the function, with exception to -1 * (SDL_QUERY), which will return the current state. * @@ -607,17 +620,19 @@ extern DECLSPEC void SDLCALL SDL_GameControllerUpdate(void); /** - * The list of axes available from a controller + * The list of axes available from a controller * - * Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to SDL_JOYSTICK_AXIS_MAX, - * and are centered within ~8000 of zero, though advanced UI will allow users to set - * or autodetect the dead zone, which varies between controllers. + * Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to + * SDL_JOYSTICK_AXIS_MAX, and are centered within ~8000 of zero, though + * advanced UI will allow users to set or autodetect the dead zone, which + * varies between controllers. * - * Trigger axis values range from 0 (released) to SDL_JOYSTICK_AXIS_MAX - * (fully pressed) when reported by SDL_GameControllerGetAxis(). Note that this is not the - * same range that will be reported by the lower-level SDL_GetJoystickAxis(). + * Trigger axis values range from 0 (released) to SDL_JOYSTICK_AXIS_MAX (fully + * pressed) when reported by SDL_GameControllerGetAxis(). Note that this is + * not the same range that will be reported by the lower-level + * SDL_GetJoystickAxis(). */ -typedef enum +typedef enum SDL_GameControllerAxis { SDL_CONTROLLER_AXIS_INVALID = -1, SDL_CONTROLLER_AXIS_LEFTX, @@ -641,7 +656,7 @@ typedef enum * `SDL_CONTROLLER_AXIS_TRIGGERRIGHT` and `SDL_CONTROLLER_AXIS_TRIGGERLEFT`, * respectively. * - * \param str string representing a SDL_GameController axis + * \param str string representing a SDL_GameController axis. * \returns the SDL_GameControllerAxis enum corresponding to the input string, * or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. * @@ -656,7 +671,7 @@ extern DECLSPEC SDL_GameControllerAxis SDLCALL SDL_GameControllerGetAxisFromStri * * The caller should not SDL_free() the returned string. * - * \param axis an enum value for a given SDL_GameControllerAxis + * \param axis an enum value for a given SDL_GameControllerAxis. * \returns a string for the given axis, or NULL if an invalid axis is * specified. The string returned is of the format used by * SDL_GameController mapping strings. @@ -670,8 +685,8 @@ extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForAxis(SDL_GameC /** * Get the SDL joystick layer binding for a controller axis mapping. * - * \param gamecontroller a game controller - * \param axis an axis enum value (one of the SDL_GameControllerAxis values) + * \param gamecontroller a game controller. + * \param axis an axis enum value (one of the SDL_GameControllerAxis values). * \returns a SDL_GameControllerButtonBind describing the bind. On failure * (like the given Controller axis doesn't exist on the device), its * `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. @@ -690,8 +705,8 @@ SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, * This merely reports whether the controller's mapping defined this axis, as * that is all the information SDL has about the physical device. * - * \param gamecontroller a game controller - * \param axis an axis enum value (an SDL_GameControllerAxis value) + * \param gamecontroller a game controller. + * \param axis an axis enum value (an SDL_GameControllerAxis value). * \returns SDL_TRUE if the controller has this axis, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. @@ -704,16 +719,15 @@ SDL_GameControllerHasAxis(SDL_GameController *gamecontroller, SDL_GameController * * The axis indices start at index 0. * - * For thumbsticks, the state is a value ranging from -32768 (up/left) - * to 32767 (down/right). + * For thumbsticks, the state is a value ranging from -32768 (up/left) to + * 32767 (down/right). * - * Triggers range from 0 when released to 32767 when fully pressed, and - * never return a negative value. Note that this differs from the value - * reported by the lower-level SDL_GetJoystickAxis(), which normally uses - * the full range. + * Triggers range from 0 when released to 32767 when fully pressed, and never + * return a negative value. Note that this differs from the value reported by + * the lower-level SDL_JoystickGetAxis(), which normally uses the full range. * - * \param gamecontroller a game controller - * \param axis an axis index (one of the SDL_GameControllerAxis values) + * \param gamecontroller a game controller. + * \param axis an axis index (one of the SDL_GameControllerAxis values). * \returns axis state (including 0) on success or 0 (also) on failure; call * SDL_GetError() for more information. * @@ -725,9 +739,9 @@ extern DECLSPEC Sint16 SDLCALL SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); /** - * The list of buttons available from a controller + * The list of buttons available from a controller */ -typedef enum +typedef enum SDL_GameControllerButton { SDL_CONTROLLER_BUTTON_INVALID = -1, SDL_CONTROLLER_BUTTON_A, @@ -762,7 +776,7 @@ typedef enum * SDL_GameController mapping. You do not normally need to call this function * unless you are parsing SDL_GameController mappings in your own code. * - * \param str string representing a SDL_GameController axis + * \param str string representing a SDL_GameController axis. * \returns the SDL_GameControllerButton enum corresponding to the input * string, or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. * @@ -775,7 +789,7 @@ extern DECLSPEC SDL_GameControllerButton SDLCALL SDL_GameControllerGetButtonFrom * * The caller should not SDL_free() the returned string. * - * \param button an enum value for a given SDL_GameControllerButton + * \param button an enum value for a given SDL_GameControllerButton. * \returns a string for the given button, or NULL if an invalid button is * specified. The string returned is of the format used by * SDL_GameController mapping strings. @@ -789,8 +803,8 @@ extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForButton(SDL_Gam /** * Get the SDL joystick layer binding for a controller button mapping. * - * \param gamecontroller a game controller - * \param button an button enum value (an SDL_GameControllerButton value) + * \param gamecontroller a game controller. + * \param button an button enum value (an SDL_GameControllerButton value). * \returns a SDL_GameControllerButtonBind describing the bind. On failure * (like the given Controller button doesn't exist on the device), * its `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. @@ -809,8 +823,8 @@ SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller, * This merely reports whether the controller's mapping defined this button, * as that is all the information SDL has about the physical device. * - * \param gamecontroller a game controller - * \param button a button enum value (an SDL_GameControllerButton value) + * \param gamecontroller a game controller. + * \param button a button enum value (an SDL_GameControllerButton value). * \returns SDL_TRUE if the controller has this button, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. @@ -821,8 +835,8 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasButton(SDL_GameController /** * Get the current state of a button on a game controller. * - * \param gamecontroller a game controller - * \param button a button index (one of the SDL_GameControllerButton values) + * \param gamecontroller a game controller. + * \param button a button index (one of the SDL_GameControllerButton values). * \returns 1 for pressed state or 0 for not pressed state or error; call * SDL_GetError() for more information. * @@ -858,8 +872,8 @@ extern DECLSPEC int SDLCALL SDL_GameControllerGetTouchpadFinger(SDL_GameControll /** * Return whether a game controller has a particular sensor. * - * \param gamecontroller The controller to query - * \param type The type of sensor to query + * \param gamecontroller The controller to query. + * \param type The type of sensor to query. * \returns SDL_TRUE if the sensor exists, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. @@ -869,9 +883,9 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasSensor(SDL_GameController /** * Set whether data reporting for a game controller sensor is enabled. * - * \param gamecontroller The controller to update - * \param type The type of sensor to enable/disable - * \param enabled Whether data reporting should be enabled + * \param gamecontroller The controller to update. + * \param type The type of sensor to enable/disable. + * \param enabled Whether data reporting should be enabled. * \returns 0 or -1 if an error occurred. * * \since This function is available since SDL 2.0.14. @@ -881,8 +895,8 @@ extern DECLSPEC int SDLCALL SDL_GameControllerSetSensorEnabled(SDL_GameControlle /** * Query whether sensor data reporting is enabled for a game controller. * - * \param gamecontroller The controller to query - * \param type The type of sensor to query + * \param gamecontroller The controller to query. + * \param type The type of sensor to query. * \returns SDL_TRUE if the sensor is enabled, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. @@ -893,8 +907,8 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerIsSensorEnabled(SDL_GameContr * Get the data rate (number of events per second) of a game controller * sensor. * - * \param gamecontroller The controller to query - * \param type The type of sensor to query + * \param gamecontroller The controller to query. + * \param type The type of sensor to query. * \return the data rate, or 0.0f if the data rate is not available. * * \since This function is available since SDL 2.0.16. @@ -907,10 +921,10 @@ extern DECLSPEC float SDLCALL SDL_GameControllerGetSensorDataRate(SDL_GameContro * The number of values and interpretation of the data is sensor dependent. * See SDL_sensor.h for the details for each type of sensor. * - * \param gamecontroller The controller to query - * \param type The type of sensor to query - * \param data A pointer filled with the current sensor state - * \param num_values The number of values to write to data + * \param gamecontroller The controller to query. + * \param type The type of sensor to query. + * \param data A pointer filled with the current sensor state. + * \param num_values The number of values to write to data. * \return 0 or -1 if an error occurred. * * \since This function is available since SDL 2.0.14. @@ -924,12 +938,12 @@ extern DECLSPEC int SDLCALL SDL_GameControllerGetSensorData(SDL_GameController * * The number of values and interpretation of the data is sensor dependent. * See SDL_sensor.h for the details for each type of sensor. * - * \param gamecontroller The controller to query - * \param type The type of sensor to query + * \param gamecontroller The controller to query. + * \param type The type of sensor to query. * \param timestamp A pointer filled with the timestamp in microseconds of the - * current sensor reading if available, or 0 if not - * \param data A pointer filled with the current sensor state - * \param num_values The number of values to write to data + * current sensor reading if available, or 0 if not. + * \param data A pointer filled with the current sensor state. + * \param num_values The number of values to write to data. * \return 0 or -1 if an error occurred. * * \since This function is available since SDL 2.26.0. @@ -942,13 +956,13 @@ extern DECLSPEC int SDLCALL SDL_GameControllerGetSensorDataWithTimestamp(SDL_Gam * Each call to this function cancels any previous rumble effect, and calling * it with 0 intensity stops any rumbling. * - * \param gamecontroller The controller to vibrate + * \param gamecontroller The controller to vibrate. * \param low_frequency_rumble The intensity of the low frequency (left) - * rumble motor, from 0 to 0xFFFF + * rumble motor, from 0 to 0xFFFF. * \param high_frequency_rumble The intensity of the high frequency (right) - * rumble motor, from 0 to 0xFFFF - * \param duration_ms The duration of the rumble effect, in milliseconds - * \returns 0, or -1 if rumble isn't supported on this controller + * rumble motor, from 0 to 0xFFFF. + * \param duration_ms The duration of the rumble effect, in milliseconds. + * \returns 0, or -1 if rumble isn't supported on this controller. * * \since This function is available since SDL 2.0.9. * @@ -967,13 +981,13 @@ extern DECLSPEC int SDLCALL SDL_GameControllerRumble(SDL_GameController *gamecon * want the (more common) whole-controller rumble, use * SDL_GameControllerRumble() instead. * - * \param gamecontroller The controller to vibrate + * \param gamecontroller The controller to vibrate. * \param left_rumble The intensity of the left trigger rumble motor, from 0 - * to 0xFFFF + * to 0xFFFF. * \param right_rumble The intensity of the right trigger rumble motor, from 0 - * to 0xFFFF - * \param duration_ms The duration of the rumble effect, in milliseconds - * \returns 0, or -1 if trigger rumble isn't supported on this controller + * to 0xFFFF. + * \param duration_ms The duration of the rumble effect, in milliseconds. + * \returns 0, or -1 if trigger rumble isn't supported on this controller. * * \since This function is available since SDL 2.0.14. * @@ -984,9 +998,9 @@ extern DECLSPEC int SDLCALL SDL_GameControllerRumbleTriggers(SDL_GameController /** * Query whether a game controller has an LED. * - * \param gamecontroller The controller to query + * \param gamecontroller The controller to query. * \returns SDL_TRUE, or SDL_FALSE if this controller does not have a - * modifiable LED + * modifiable LED. * * \since This function is available since SDL 2.0.14. */ @@ -995,9 +1009,9 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasLED(SDL_GameController *ga /** * Query whether a game controller has rumble support. * - * \param gamecontroller The controller to query + * \param gamecontroller The controller to query. * \returns SDL_TRUE, or SDL_FALSE if this controller does not have rumble - * support + * support. * * \since This function is available since SDL 2.0.18. * @@ -1008,9 +1022,9 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumble(SDL_GameController /** * Query whether a game controller has rumble support on triggers. * - * \param gamecontroller The controller to query + * \param gamecontroller The controller to query. * \returns SDL_TRUE, or SDL_FALSE if this controller does not have trigger - * rumble support + * rumble support. * * \since This function is available since SDL 2.0.18. * @@ -1021,11 +1035,11 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumbleTriggers(SDL_GameCon /** * Update a game controller's LED color. * - * \param gamecontroller The controller to update - * \param red The intensity of the red LED - * \param green The intensity of the green LED - * \param blue The intensity of the blue LED - * \returns 0, or -1 if this controller does not have a modifiable LED + * \param gamecontroller The controller to update. + * \param red The intensity of the red LED. + * \param green The intensity of the green LED. + * \param blue The intensity of the blue LED. + * \returns 0, or -1 if this controller does not have a modifiable LED. * * \since This function is available since SDL 2.0.14. */ @@ -1034,11 +1048,11 @@ extern DECLSPEC int SDLCALL SDL_GameControllerSetLED(SDL_GameController *gamecon /** * Send a controller specific effect packet * - * \param gamecontroller The controller to affect - * \param data The data to send to the controller - * \param size The size of the data to send to the controller + * \param gamecontroller The controller to affect. + * \param data The data to send to the controller. + * \param size The size of the data to send to the controller. * \returns 0, or -1 if this controller or driver doesn't support effect - * packets + * packets. * * \since This function is available since SDL 2.0.16. */ @@ -1048,7 +1062,7 @@ extern DECLSPEC int SDLCALL SDL_GameControllerSendEffect(SDL_GameController *gam * Close a game controller previously opened with SDL_GameControllerOpen(). * * \param gamecontroller a game controller identifier previously returned by - * SDL_GameControllerOpen() + * SDL_GameControllerOpen(). * * \since This function is available since SDL 2.0.0. * @@ -1060,9 +1074,9 @@ extern DECLSPEC void SDLCALL SDL_GameControllerClose(SDL_GameController *gamecon * Return the sfSymbolsName for a given button on a game controller on Apple * platforms. * - * \param gamecontroller the controller to query - * \param button a button on the game controller - * \returns the sfSymbolsName or NULL if the name can't be found + * \param gamecontroller the controller to query. + * \param button a button on the game controller. + * \returns the sfSymbolsName or NULL if the name can't be found. * * \since This function is available since SDL 2.0.18. * @@ -1074,9 +1088,9 @@ extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForBu * Return the sfSymbolsName for a given axis on a game controller on Apple * platforms. * - * \param gamecontroller the controller to query - * \param axis an axis on the game controller - * \returns the sfSymbolsName or NULL if the name can't be found + * \param gamecontroller the controller to query. + * \param axis an axis on the game controller. + * \returns the sfSymbolsName or NULL if the name can't be found. * * \since This function is available since SDL 2.0.18. * diff --git a/vs/sdl2/include/SDL_gesture.h b/vs/sdl2/include/SDL_gesture.h index 4fffa5f3e87..acfa56f31f5 100644 --- a/vs/sdl2/include/SDL_gesture.h +++ b/vs/sdl2/include/SDL_gesture.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_gesture.h + * # CategoryGesture * - * Include file for SDL gesture event handling. + * Include file for SDL gesture event handling. */ #ifndef SDL_gesture_h_ @@ -51,7 +51,7 @@ typedef Sint64 SDL_GestureID; * If the parameter `touchId` is -1 (i.e., all devices), this function will * always return 1, regardless of whether there actually are any devices. * - * \param touchId the touch device id, or -1 for all touch devices + * \param touchId the touch device id, or -1 for all touch devices. * \returns 1 on success or 0 if the specified device could not be found. * * \since This function is available since SDL 2.0.0. @@ -64,7 +64,7 @@ extern DECLSPEC int SDLCALL SDL_RecordGesture(SDL_TouchID touchId); /** * Save all currently loaded Dollar Gesture templates. * - * \param dst a SDL_RWops to save to + * \param dst a SDL_RWops to save to. * \returns the number of saved templates on success or 0 on failure; call * SDL_GetError() for more information. * @@ -78,8 +78,8 @@ extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(SDL_RWops *dst); /** * Save a currently loaded Dollar Gesture template. * - * \param gestureId a gesture id - * \param dst a SDL_RWops to save to + * \param gestureId a gesture id. + * \param dst a SDL_RWops to save to. * \returns 1 on success or 0 on failure; call SDL_GetError() for more * information. * @@ -94,8 +94,8 @@ extern DECLSPEC int SDLCALL SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_R /** * Load Dollar Gesture templates from a file. * - * \param touchId a touch id - * \param src a SDL_RWops to load from + * \param touchId a touch id. + * \param src a SDL_RWops to load from. * \returns the number of loaded templates on success or a negative error code * (or 0) on failure; call SDL_GetError() for more information. * diff --git a/vs/sdl2/include/SDL_guid.h b/vs/sdl2/include/SDL_guid.h index 7daa5f1f585..fd9a50e3229 100644 --- a/vs/sdl2/include/SDL_guid.h +++ b/vs/sdl2/include/SDL_guid.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,10 +19,13 @@ 3. This notice may not be removed or altered from any source distribution. */ +/* WIKI CATEGORY: GUID */ + /** - * \file SDL_guid.h + * # CategoryGUID * - * Include file for handling ::SDL_GUID values. + * A GUID is a 128-bit value that represents something that is uniquely + * identifiable by this value: "globally unique." */ #ifndef SDL_guid_h_ @@ -38,34 +41,38 @@ extern "C" { #endif /** - * An SDL_GUID is a 128-bit identifier for an input device that - * identifies that device across runs of SDL programs on the same - * platform. If the device is detached and then re-attached to a - * different port, or if the base system is rebooted, the device - * should still report the same GUID. + * An SDL_GUID is a 128-bit identifier. + * + * This is an acronym for "Globally Unique ID." + * + * While a GUID can be used to assign a unique value to almost anything, in + * SDL these are largely used to identify input devices across runs of SDL + * programs on the same platform.If the device is detached and then + * re-attached to a different port, or if the base system is rebooted, the + * device should still report the same GUID. * - * GUIDs are as precise as possible but are not guaranteed to - * distinguish physically distinct but equivalent devices. For - * example, two game controllers from the same vendor with the same - * product ID and revision may have the same GUID. + * GUIDs are as precise as possible but are not guaranteed to distinguish + * physically distinct but equivalent devices. For example, two game + * controllers from the same vendor with the same product ID and revision may + * have the same GUID. * - * GUIDs may be platform-dependent (i.e., the same device may report - * different GUIDs on different operating systems). + * GUIDs may be platform-dependent (i.e., the same device may report different + * GUIDs on different operating systems). */ -typedef struct { +typedef struct SDL_GUID { Uint8 data[16]; } SDL_GUID; /* Function prototypes */ /** - * Get an ASCII string representation for a given ::SDL_GUID. + * Get an ASCII string representation for a given SDL_GUID. * * You should supply at least 33 bytes for pszGUID. * - * \param guid the ::SDL_GUID you wish to convert to string - * \param pszGUID buffer in which to write the ASCII string - * \param cbGUID the size of pszGUID + * \param guid the SDL_GUID you wish to convert to string. + * \param pszGUID buffer in which to write the ASCII string. + * \param cbGUID the size of pszGUID. * * \since This function is available since SDL 2.24.0. * @@ -74,14 +81,14 @@ typedef struct { extern DECLSPEC void SDLCALL SDL_GUIDToString(SDL_GUID guid, char *pszGUID, int cbGUID); /** - * Convert a GUID string into a ::SDL_GUID structure. + * Convert a GUID string into a SDL_GUID structure. * * Performs no error checking. If this function is given a string containing * an invalid GUID, the function will silently succeed, but the GUID generated * will not be useful. * - * \param pchGUID string containing an ASCII representation of a GUID - * \returns a ::SDL_GUID structure. + * \param pchGUID string containing an ASCII representation of a GUID. + * \returns a SDL_GUID structure. * * \since This function is available since SDL 2.24.0. * diff --git a/vs/sdl2/include/SDL_haptic.h b/vs/sdl2/include/SDL_haptic.h index c9ed847df02..f679c5734ec 100644 --- a/vs/sdl2/include/SDL_haptic.h +++ b/vs/sdl2/include/SDL_haptic.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,24 +20,25 @@ */ /** - * \file SDL_haptic.h + * # CategoryHaptic * - * \brief The SDL haptic subsystem allows you to control haptic (force feedback) - * devices. + * SDL haptic subsystem allows you to control haptic (force feedback) devices. * - * The basic usage is as follows: - * - Initialize the subsystem (::SDL_INIT_HAPTIC). - * - Open a haptic device. - * - SDL_HapticOpen() to open from index. - * - SDL_HapticOpenFromJoystick() to open from an existing joystick. - * - Create an effect (::SDL_HapticEffect). - * - Upload the effect with SDL_HapticNewEffect(). - * - Run the effect with SDL_HapticRunEffect(). - * - (optional) Free the effect with SDL_HapticDestroyEffect(). - * - Close the haptic device with SDL_HapticClose(). + * The basic usage is as follows: * - * \par Simple rumble example: - * \code + * - Initialize the subsystem (SDL_INIT_HAPTIC). + * - Open a haptic device. + * - SDL_HapticOpen() to open from index. + * - SDL_HapticOpenFromJoystick() to open from an existing joystick. + * - Create an effect (SDL_HapticEffect). + * - Upload the effect with SDL_HapticNewEffect(). + * - Run the effect with SDL_HapticRunEffect(). + * - (optional) Free the effect with SDL_HapticDestroyEffect(). + * - Close the haptic device with SDL_HapticClose(). + * + * Simple rumble example: + * + * ```c * SDL_Haptic *haptic; * * // Open the device @@ -56,10 +57,11 @@ * * // Clean up * SDL_HapticClose( haptic ); - * \endcode + * ``` * - * \par Complete example: - * \code + * Complete example: + * + * ```c * int test_haptic( SDL_Joystick * joystick ) { * SDL_Haptic *haptic; * SDL_HapticEffect effect; @@ -101,7 +103,7 @@ * * return 0; // Success * } - * \endcode + * ``` */ #ifndef SDL_haptic_h_ @@ -154,31 +156,29 @@ typedef struct _SDL_Haptic SDL_Haptic; /* @{ */ /** - * \brief Constant effect supported. + * Constant effect supported. * - * Constant haptic effect. + * Constant haptic effect. * - * \sa SDL_HapticCondition + * \sa SDL_HapticCondition */ #define SDL_HAPTIC_CONSTANT (1u<<0) /** - * \brief Sine wave effect supported. + * Sine wave effect supported. * - * Periodic haptic effect that simulates sine waves. + * Periodic haptic effect that simulates sine waves. * - * \sa SDL_HapticPeriodic + * \sa SDL_HapticPeriodic */ #define SDL_HAPTIC_SINE (1u<<1) /** - * \brief Left/Right effect supported. + * Left/Right effect supported. * - * Haptic effect for direct control over high/low frequency motors. + * Haptic effect for direct control over high/low frequency motors. * - * \sa SDL_HapticLeftRight - * \warning this value was SDL_HAPTIC_SQUARE right before 2.0.0 shipped. Sorry, - * we ran out of bits, and this is important for XInput devices. + * \sa SDL_HapticLeftRight */ #define SDL_HAPTIC_LEFTRIGHT (1u<<2) @@ -186,85 +186,85 @@ typedef struct _SDL_Haptic SDL_Haptic; /* #define SDL_HAPTIC_SQUARE (1<<2) */ /** - * \brief Triangle wave effect supported. + * Triangle wave effect supported. * - * Periodic haptic effect that simulates triangular waves. + * Periodic haptic effect that simulates triangular waves. * - * \sa SDL_HapticPeriodic + * \sa SDL_HapticPeriodic */ #define SDL_HAPTIC_TRIANGLE (1u<<3) /** - * \brief Sawtoothup wave effect supported. + * Sawtoothup wave effect supported. * - * Periodic haptic effect that simulates saw tooth up waves. + * Periodic haptic effect that simulates saw tooth up waves. * - * \sa SDL_HapticPeriodic + * \sa SDL_HapticPeriodic */ #define SDL_HAPTIC_SAWTOOTHUP (1u<<4) /** - * \brief Sawtoothdown wave effect supported. + * Sawtoothdown wave effect supported. * - * Periodic haptic effect that simulates saw tooth down waves. + * Periodic haptic effect that simulates saw tooth down waves. * - * \sa SDL_HapticPeriodic + * \sa SDL_HapticPeriodic */ #define SDL_HAPTIC_SAWTOOTHDOWN (1u<<5) /** - * \brief Ramp effect supported. + * Ramp effect supported. * - * Ramp haptic effect. + * Ramp haptic effect. * - * \sa SDL_HapticRamp + * \sa SDL_HapticRamp */ #define SDL_HAPTIC_RAMP (1u<<6) /** - * \brief Spring effect supported - uses axes position. + * Spring effect supported - uses axes position. * - * Condition haptic effect that simulates a spring. Effect is based on the - * axes position. + * Condition haptic effect that simulates a spring. Effect is based on the + * axes position. * - * \sa SDL_HapticCondition + * \sa SDL_HapticCondition */ #define SDL_HAPTIC_SPRING (1u<<7) /** - * \brief Damper effect supported - uses axes velocity. + * Damper effect supported - uses axes velocity. * - * Condition haptic effect that simulates dampening. Effect is based on the - * axes velocity. + * Condition haptic effect that simulates dampening. Effect is based on the + * axes velocity. * - * \sa SDL_HapticCondition + * \sa SDL_HapticCondition */ #define SDL_HAPTIC_DAMPER (1u<<8) /** - * \brief Inertia effect supported - uses axes acceleration. + * Inertia effect supported - uses axes acceleration. * - * Condition haptic effect that simulates inertia. Effect is based on the axes - * acceleration. + * Condition haptic effect that simulates inertia. Effect is based on the axes + * acceleration. * - * \sa SDL_HapticCondition + * \sa SDL_HapticCondition */ #define SDL_HAPTIC_INERTIA (1u<<9) /** - * \brief Friction effect supported - uses axes movement. + * Friction effect supported - uses axes movement. * - * Condition haptic effect that simulates friction. Effect is based on the - * axes movement. + * Condition haptic effect that simulates friction. Effect is based on the + * axes movement. * - * \sa SDL_HapticCondition + * \sa SDL_HapticCondition */ #define SDL_HAPTIC_FRICTION (1u<<10) /** - * \brief Custom effect is supported. + * Custom effect is supported. * - * User defined custom haptic effect. + * User defined custom haptic effect. */ #define SDL_HAPTIC_CUSTOM (1u<<11) @@ -273,39 +273,39 @@ typedef struct _SDL_Haptic SDL_Haptic; /* These last few are features the device has, not effects */ /** - * \brief Device can set global gain. + * Device can set global gain. * - * Device supports setting the global gain. + * Device supports setting the global gain. * - * \sa SDL_HapticSetGain + * \sa SDL_HapticSetGain */ #define SDL_HAPTIC_GAIN (1u<<12) /** - * \brief Device can set autocenter. + * Device can set autocenter. * - * Device supports setting autocenter. + * Device supports setting autocenter. * - * \sa SDL_HapticSetAutocenter + * \sa SDL_HapticSetAutocenter */ #define SDL_HAPTIC_AUTOCENTER (1u<<13) /** - * \brief Device can be queried for effect status. + * Device can be queried for effect status. * - * Device supports querying effect status. + * Device supports querying effect status. * - * \sa SDL_HapticGetEffectStatus + * \sa SDL_HapticGetEffectStatus */ #define SDL_HAPTIC_STATUS (1u<<14) /** - * \brief Device can be paused. + * Device can be paused. * - * Devices supports being paused. + * Devices supports being paused. * - * \sa SDL_HapticPause - * \sa SDL_HapticUnpause + * \sa SDL_HapticPause + * \sa SDL_HapticUnpause */ #define SDL_HAPTIC_PAUSE (1u<<15) @@ -316,31 +316,33 @@ typedef struct _SDL_Haptic SDL_Haptic; /* @{ */ /** - * \brief Uses polar coordinates for the direction. + * Uses polar coordinates for the direction. * - * \sa SDL_HapticDirection + * \sa SDL_HapticDirection */ #define SDL_HAPTIC_POLAR 0 /** - * \brief Uses cartesian coordinates for the direction. + * Uses cartesian coordinates for the direction. * - * \sa SDL_HapticDirection + * \sa SDL_HapticDirection */ #define SDL_HAPTIC_CARTESIAN 1 /** - * \brief Uses spherical coordinates for the direction. + * Uses spherical coordinates for the direction. * - * \sa SDL_HapticDirection + * \sa SDL_HapticDirection */ #define SDL_HAPTIC_SPHERICAL 2 /** - * \brief Use this value to play an effect on the steering wheel axis. This - * provides better compatibility across platforms and devices as SDL will guess - * the correct axis. - * \sa SDL_HapticDirection + * Use this value to play an effect on the steering wheel axis. + * + * This provides better compatibility across platforms and devices as SDL will + * guess the correct axis. + * + * \sa SDL_HapticDirection */ #define SDL_HAPTIC_STEERING_AXIS 3 @@ -353,7 +355,7 @@ typedef struct _SDL_Haptic SDL_Haptic; */ /** - * \brief Used to play a device an infinite number of times. + * Used to play a device an infinite number of times. * * \sa SDL_HapticRunEffect */ @@ -361,77 +363,82 @@ typedef struct _SDL_Haptic SDL_Haptic; /** - * \brief Structure that represents a haptic direction. - * - * This is the direction where the force comes from, - * instead of the direction in which the force is exerted. - * - * Directions can be specified by: - * - ::SDL_HAPTIC_POLAR : Specified by polar coordinates. - * - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. - * - ::SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates. - * - * Cardinal directions of the haptic device are relative to the positioning - * of the device. North is considered to be away from the user. - * - * The following diagram represents the cardinal directions: - * \verbatim - .--. - |__| .-------. - |=.| |.-----.| - |--| || || - | | |'-----'| - |__|~')_____(' - [ COMPUTER ] - - - North (0,-1) - ^ - | - | - (-1,0) West <----[ HAPTIC ]----> East (1,0) - | - | - v - South (0,1) - - - [ USER ] - \|||/ - (o o) - ---ooO-(_)-Ooo--- - \endverbatim - * - * If type is ::SDL_HAPTIC_POLAR, direction is encoded by hundredths of a - * degree starting north and turning clockwise. ::SDL_HAPTIC_POLAR only uses - * the first \c dir parameter. The cardinal directions would be: - * - North: 0 (0 degrees) - * - East: 9000 (90 degrees) - * - South: 18000 (180 degrees) - * - West: 27000 (270 degrees) - * - * If type is ::SDL_HAPTIC_CARTESIAN, direction is encoded by three positions - * (X axis, Y axis and Z axis (with 3 axes)). ::SDL_HAPTIC_CARTESIAN uses - * the first three \c dir parameters. The cardinal directions would be: - * - North: 0,-1, 0 - * - East: 1, 0, 0 - * - South: 0, 1, 0 - * - West: -1, 0, 0 - * - * The Z axis represents the height of the effect if supported, otherwise - * it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you - * can use any multiple you want, only the direction matters. - * - * If type is ::SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. - * The first two \c dir parameters are used. The \c dir parameters are as - * follows (all values are in hundredths of degrees): - * - Degrees from (1, 0) rotated towards (0, 1). - * - Degrees towards (0, 0, 1) (device needs at least 3 axes). - * - * - * Example of force coming from the south with all encodings (force coming - * from the south means the user will have to pull the stick to counteract): - * \code + * Structure that represents a haptic direction. + * + * This is the direction where the force comes from, instead of the direction + * in which the force is exerted. + * + * Directions can be specified by: + * + * - SDL_HAPTIC_POLAR : Specified by polar coordinates. + * - SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. + * - SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates. + * + * Cardinal directions of the haptic device are relative to the positioning of + * the device. North is considered to be away from the user. + * + * The following diagram represents the cardinal directions: + * + * ``` + * .--. + * |__| .-------. + * |=.| |.-----.| + * |--| || || + * | | |'-----'| + * |__|~')_____(' + * [ COMPUTER ] + * + * + * North (0,-1) + * ^ + * | + * | + * (-1,0) West <----[ HAPTIC ]----> East (1,0) + * | + * | + * v + * South (0,1) + * + * + * [ USER ] + * \|||/ + * (o o) + * ---ooO-(_)-Ooo--- + * ``` + * + * If type is SDL_HAPTIC_POLAR, direction is encoded by hundredths of a degree + * starting north and turning clockwise. SDL_HAPTIC_POLAR only uses the first + * `dir` parameter. The cardinal directions would be: + * + * - North: 0 (0 degrees) + * - East: 9000 (90 degrees) + * - South: 18000 (180 degrees) + * - West: 27000 (270 degrees) + * + * If type is SDL_HAPTIC_CARTESIAN, direction is encoded by three positions (X + * axis, Y axis and Z axis (with 3 axes)). SDL_HAPTIC_CARTESIAN uses the first + * three `dir` parameters. The cardinal directions would be: + * + * - North: 0,-1, 0 + * - East: 1, 0, 0 + * - South: 0, 1, 0 + * - West: -1, 0, 0 + * + * The Z axis represents the height of the effect if supported, otherwise it's + * unused. In cartesian encoding (1, 2) would be the same as (2, 4), you can + * use any multiple you want, only the direction matters. + * + * If type is SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. The + * first two `dir` parameters are used. The `dir` parameters are as follows + * (all values are in hundredths of degrees): + * + * - Degrees from (1, 0) rotated towards (0, 1). + * - Degrees towards (0, 0, 1) (device needs at least 3 axes). + * + * Example of force coming from the south with all encodings (force coming + * from the south means the user will have to pull the stick to counteract): + * + * ```c * SDL_HapticDirection direction; * * // Cartesian directions @@ -447,14 +454,14 @@ typedef struct _SDL_Haptic SDL_Haptic; * // Spherical coordinates * direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding * direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters. - * \endcode + * ``` * - * \sa SDL_HAPTIC_POLAR - * \sa SDL_HAPTIC_CARTESIAN - * \sa SDL_HAPTIC_SPHERICAL - * \sa SDL_HAPTIC_STEERING_AXIS - * \sa SDL_HapticEffect - * \sa SDL_HapticNumAxes + * \sa SDL_HAPTIC_POLAR + * \sa SDL_HAPTIC_CARTESIAN + * \sa SDL_HAPTIC_SPHERICAL + * \sa SDL_HAPTIC_STEERING_AXIS + * \sa SDL_HapticEffect + * \sa SDL_HapticNumAxes */ typedef struct SDL_HapticDirection { @@ -464,20 +471,20 @@ typedef struct SDL_HapticDirection /** - * \brief A structure containing a template for a Constant effect. + * A structure containing a template for a Constant effect. * - * This struct is exclusively for the ::SDL_HAPTIC_CONSTANT effect. + * This struct is exclusively for the SDL_HAPTIC_CONSTANT effect. * - * A constant effect applies a constant force in the specified direction - * to the joystick. + * A constant effect applies a constant force in the specified direction to + * the joystick. * - * \sa SDL_HAPTIC_CONSTANT - * \sa SDL_HapticEffect + * \sa SDL_HAPTIC_CONSTANT + * \sa SDL_HapticEffect */ typedef struct SDL_HapticConstant { /* Header */ - Uint16 type; /**< ::SDL_HAPTIC_CONSTANT */ + Uint16 type; /**< SDL_HAPTIC_CONSTANT */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ @@ -499,68 +506,71 @@ typedef struct SDL_HapticConstant } SDL_HapticConstant; /** - * \brief A structure containing a template for a Periodic effect. - * - * The struct handles the following effects: - * - ::SDL_HAPTIC_SINE - * - ::SDL_HAPTIC_LEFTRIGHT - * - ::SDL_HAPTIC_TRIANGLE - * - ::SDL_HAPTIC_SAWTOOTHUP - * - ::SDL_HAPTIC_SAWTOOTHDOWN - * - * A periodic effect consists in a wave-shaped effect that repeats itself - * over time. The type determines the shape of the wave and the parameters - * determine the dimensions of the wave. - * - * Phase is given by hundredth of a degree meaning that giving the phase a value - * of 9000 will displace it 25% of its period. Here are sample values: - * - 0: No phase displacement. - * - 9000: Displaced 25% of its period. - * - 18000: Displaced 50% of its period. - * - 27000: Displaced 75% of its period. - * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred. - * - * Examples: - * \verbatim - SDL_HAPTIC_SINE - __ __ __ __ - / \ / \ / \ / - / \__/ \__/ \__/ - - SDL_HAPTIC_SQUARE - __ __ __ __ __ - | | | | | | | | | | - | |__| |__| |__| |__| | - - SDL_HAPTIC_TRIANGLE - /\ /\ /\ /\ /\ - / \ / \ / \ / \ / - / \/ \/ \/ \/ - - SDL_HAPTIC_SAWTOOTHUP - /| /| /| /| /| /| /| - / | / | / | / | / | / | / | - / |/ |/ |/ |/ |/ |/ | - - SDL_HAPTIC_SAWTOOTHDOWN - \ |\ |\ |\ |\ |\ |\ | - \ | \ | \ | \ | \ | \ | \ | - \| \| \| \| \| \| \| - \endverbatim - * - * \sa SDL_HAPTIC_SINE - * \sa SDL_HAPTIC_LEFTRIGHT - * \sa SDL_HAPTIC_TRIANGLE - * \sa SDL_HAPTIC_SAWTOOTHUP - * \sa SDL_HAPTIC_SAWTOOTHDOWN - * \sa SDL_HapticEffect + * A structure containing a template for a Periodic effect. + * + * The struct handles the following effects: + * + * - SDL_HAPTIC_SINE + * - SDL_HAPTIC_SQUARE + * - SDL_HAPTIC_TRIANGLE + * - SDL_HAPTIC_SAWTOOTHUP + * - SDL_HAPTIC_SAWTOOTHDOWN + * + * A periodic effect consists in a wave-shaped effect that repeats itself over + * time. The type determines the shape of the wave and the parameters + * determine the dimensions of the wave. + * + * Phase is given by hundredth of a degree meaning that giving the phase a + * value of 9000 will displace it 25% of its period. Here are sample values: + * + * - 0: No phase displacement. + * - 9000: Displaced 25% of its period. + * - 18000: Displaced 50% of its period. + * - 27000: Displaced 75% of its period. + * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred. + * + * Examples: + * + * ``` + * SDL_HAPTIC_SINE + * __ __ __ __ + * / \ / \ / \ / + * / \__/ \__/ \__/ + * + * SDL_HAPTIC_SQUARE + * __ __ __ __ __ + * | | | | | | | | | | + * | |__| |__| |__| |__| | + * + * SDL_HAPTIC_TRIANGLE + * /\ /\ /\ /\ /\ + * / \ / \ / \ / \ / + * / \/ \/ \/ \/ + * + * SDL_HAPTIC_SAWTOOTHUP + * /| /| /| /| /| /| /| + * / | / | / | / | / | / | / | + * / |/ |/ |/ |/ |/ |/ | + * + * SDL_HAPTIC_SAWTOOTHDOWN + * \ |\ |\ |\ |\ |\ |\ | + * \ | \ | \ | \ | \ | \ | \ | + * \| \| \| \| \| \| \| + * ``` + * + * \sa SDL_HAPTIC_SINE + * \sa SDL_HAPTIC_LEFTRIGHT + * \sa SDL_HAPTIC_TRIANGLE + * \sa SDL_HAPTIC_SAWTOOTHUP + * \sa SDL_HAPTIC_SAWTOOTHDOWN + * \sa SDL_HapticEffect */ typedef struct SDL_HapticPeriodic { /* Header */ - Uint16 type; /**< ::SDL_HAPTIC_SINE, ::SDL_HAPTIC_LEFTRIGHT, - ::SDL_HAPTIC_TRIANGLE, ::SDL_HAPTIC_SAWTOOTHUP or - ::SDL_HAPTIC_SAWTOOTHDOWN */ + Uint16 type; /**< SDL_HAPTIC_SINE, SDL_HAPTIC_LEFTRIGHT, + SDL_HAPTIC_TRIANGLE, SDL_HAPTIC_SAWTOOTHUP or + SDL_HAPTIC_SAWTOOTHDOWN */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ @@ -585,35 +595,36 @@ typedef struct SDL_HapticPeriodic } SDL_HapticPeriodic; /** - * \brief A structure containing a template for a Condition effect. + * A structure containing a template for a Condition effect. * - * The struct handles the following effects: - * - ::SDL_HAPTIC_SPRING: Effect based on axes position. - * - ::SDL_HAPTIC_DAMPER: Effect based on axes velocity. - * - ::SDL_HAPTIC_INERTIA: Effect based on axes acceleration. - * - ::SDL_HAPTIC_FRICTION: Effect based on axes movement. + * The struct handles the following effects: * - * Direction is handled by condition internals instead of a direction member. - * The condition effect specific members have three parameters. The first - * refers to the X axis, the second refers to the Y axis and the third - * refers to the Z axis. The right terms refer to the positive side of the - * axis and the left terms refer to the negative side of the axis. Please - * refer to the ::SDL_HapticDirection diagram for which side is positive and - * which is negative. + * - SDL_HAPTIC_SPRING: Effect based on axes position. + * - SDL_HAPTIC_DAMPER: Effect based on axes velocity. + * - SDL_HAPTIC_INERTIA: Effect based on axes acceleration. + * - SDL_HAPTIC_FRICTION: Effect based on axes movement. * - * \sa SDL_HapticDirection - * \sa SDL_HAPTIC_SPRING - * \sa SDL_HAPTIC_DAMPER - * \sa SDL_HAPTIC_INERTIA - * \sa SDL_HAPTIC_FRICTION - * \sa SDL_HapticEffect + * Direction is handled by condition internals instead of a direction member. + * The condition effect specific members have three parameters. The first + * refers to the X axis, the second refers to the Y axis and the third refers + * to the Z axis. The right terms refer to the positive side of the axis and + * the left terms refer to the negative side of the axis. Please refer to the + * SDL_HapticDirection diagram for which side is positive and which is + * negative. + * + * \sa SDL_HapticDirection + * \sa SDL_HAPTIC_SPRING + * \sa SDL_HAPTIC_DAMPER + * \sa SDL_HAPTIC_INERTIA + * \sa SDL_HAPTIC_FRICTION + * \sa SDL_HapticEffect */ typedef struct SDL_HapticCondition { /* Header */ - Uint16 type; /**< ::SDL_HAPTIC_SPRING, ::SDL_HAPTIC_DAMPER, - ::SDL_HAPTIC_INERTIA or ::SDL_HAPTIC_FRICTION */ - SDL_HapticDirection direction; /**< Direction of the effect - Not used ATM. */ + Uint16 type; /**< SDL_HAPTIC_SPRING, SDL_HAPTIC_DAMPER, + SDL_HAPTIC_INERTIA or SDL_HAPTIC_FRICTION */ + SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ Uint32 length; /**< Duration of the effect. */ @@ -633,22 +644,22 @@ typedef struct SDL_HapticCondition } SDL_HapticCondition; /** - * \brief A structure containing a template for a Ramp effect. + * A structure containing a template for a Ramp effect. * - * This struct is exclusively for the ::SDL_HAPTIC_RAMP effect. + * This struct is exclusively for the SDL_HAPTIC_RAMP effect. * - * The ramp effect starts at start strength and ends at end strength. - * It augments in linear fashion. If you use attack and fade with a ramp - * the effects get added to the ramp effect making the effect become - * quadratic instead of linear. + * The ramp effect starts at start strength and ends at end strength. It + * augments in linear fashion. If you use attack and fade with a ramp the + * effects get added to the ramp effect making the effect become quadratic + * instead of linear. * - * \sa SDL_HAPTIC_RAMP - * \sa SDL_HapticEffect + * \sa SDL_HAPTIC_RAMP + * \sa SDL_HapticEffect */ typedef struct SDL_HapticRamp { /* Header */ - Uint16 type; /**< ::SDL_HAPTIC_RAMP */ + Uint16 type; /**< SDL_HAPTIC_RAMP */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ @@ -671,9 +682,9 @@ typedef struct SDL_HapticRamp } SDL_HapticRamp; /** - * \brief A structure containing a template for a Left/Right effect. + * A structure containing a template for a Left/Right effect. * - * This struct is exclusively for the ::SDL_HAPTIC_LEFTRIGHT effect. + * This struct is exclusively for the SDL_HAPTIC_LEFTRIGHT effect. * * The Left/Right effect is used to explicitly control the large and small * motors, commonly found in modern game controllers. The small (right) motor @@ -685,7 +696,7 @@ typedef struct SDL_HapticRamp typedef struct SDL_HapticLeftRight { /* Header */ - Uint16 type; /**< ::SDL_HAPTIC_LEFTRIGHT */ + Uint16 type; /**< SDL_HAPTIC_LEFTRIGHT */ /* Replay */ Uint32 length; /**< Duration of the effect in milliseconds. */ @@ -696,24 +707,24 @@ typedef struct SDL_HapticLeftRight } SDL_HapticLeftRight; /** - * \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect. + * A structure containing a template for the SDL_HAPTIC_CUSTOM effect. * - * This struct is exclusively for the ::SDL_HAPTIC_CUSTOM effect. + * This struct is exclusively for the SDL_HAPTIC_CUSTOM effect. * - * A custom force feedback effect is much like a periodic effect, where the - * application can define its exact shape. You will have to allocate the - * data yourself. Data should consist of channels * samples Uint16 samples. + * A custom force feedback effect is much like a periodic effect, where the + * application can define its exact shape. You will have to allocate the data + * yourself. Data should consist of channels * samples Uint16 samples. * - * If channels is one, the effect is rotated using the defined direction. - * Otherwise it uses the samples in data for the different axes. + * If channels is one, the effect is rotated using the defined direction. + * Otherwise it uses the samples in data for the different axes. * - * \sa SDL_HAPTIC_CUSTOM - * \sa SDL_HapticEffect + * \sa SDL_HAPTIC_CUSTOM + * \sa SDL_HapticEffect */ typedef struct SDL_HapticCustom { /* Header */ - Uint16 type; /**< ::SDL_HAPTIC_CUSTOM */ + Uint16 type; /**< SDL_HAPTIC_CUSTOM */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ @@ -738,27 +749,28 @@ typedef struct SDL_HapticCustom } SDL_HapticCustom; /** - * \brief The generic template for any haptic effect. + * The generic template for any haptic effect. + * + * All values max at 32767 (0x7FFF). Signed values also can be negative. Time + * values unless specified otherwise are in milliseconds. * - * All values max at 32767 (0x7FFF). Signed values also can be negative. - * Time values unless specified otherwise are in milliseconds. + * You can also pass SDL_HAPTIC_INFINITY to length instead of a 0-32767 value. + * Neither delay, interval, attack_length nor fade_length support + * SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends. * - * You can also pass ::SDL_HAPTIC_INFINITY to length instead of a 0-32767 - * value. Neither delay, interval, attack_length nor fade_length support - * ::SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends. + * Additionally, the SDL_HAPTIC_RAMP effect does not support a duration of + * SDL_HAPTIC_INFINITY. * - * Additionally, the ::SDL_HAPTIC_RAMP effect does not support a duration of - * ::SDL_HAPTIC_INFINITY. + * Button triggers may not be supported on all devices, it is advised to not + * use them if possible. Buttons start at index 1 instead of index 0 like the + * joystick. * - * Button triggers may not be supported on all devices, it is advised to not - * use them if possible. Buttons start at index 1 instead of index 0 like - * the joystick. + * If both attack_length and fade_level are 0, the envelope is not used, + * otherwise both values are used. * - * If both attack_length and fade_level are 0, the envelope is not used, - * otherwise both values are used. + * Common parts: * - * Common parts: - * \code + * ```c * // Replay - All effects have this * Uint32 length; // Duration of effect (ms). * Uint16 delay; // Delay before starting effect. @@ -772,39 +784,39 @@ typedef struct SDL_HapticCustom * Uint16 attack_level; // Level at the start of the attack. * Uint16 fade_length; // Duration of the fade out (ms). * Uint16 fade_level; // Level at the end of the fade. - * \endcode - * - * - * Here we have an example of a constant effect evolution in time: - * \verbatim - Strength - ^ - | - | effect level --> _________________ - | / \ - | / \ - | / \ - | / \ - | attack_level --> | \ - | | | <--- fade_level - | - +--------------------------------------------------> Time - [--] [---] - attack_length fade_length - - [------------------][-----------------------] - delay length - \endverbatim - * - * Note either the attack_level or the fade_level may be above the actual - * effect level. - * - * \sa SDL_HapticConstant - * \sa SDL_HapticPeriodic - * \sa SDL_HapticCondition - * \sa SDL_HapticRamp - * \sa SDL_HapticLeftRight - * \sa SDL_HapticCustom + * ``` + * + * Here we have an example of a constant effect evolution in time: + * + * ``` + * Strength + * ^ + * | + * | effect level --> _________________ + * | / \ + * | / \ + * | / \ + * | / \ + * | attack_level --> | \ + * | | | <--- fade_level + * | + * +--------------------------------------------------> Time + * [--] [---] + * attack_length fade_length + * + * [------------------][-----------------------] + * delay length + * ``` + * + * Note either the attack_level or the fade_level may be above the actual + * effect level. + * + * \sa SDL_HapticConstant + * \sa SDL_HapticPeriodic + * \sa SDL_HapticCondition + * \sa SDL_HapticRamp + * \sa SDL_HapticLeftRight + * \sa SDL_HapticCustom */ typedef union SDL_HapticEffect { @@ -859,7 +871,7 @@ extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index); * autocenter will be disabled. To modify these values use SDL_HapticSetGain() * and SDL_HapticSetAutocenter(). * - * \param device_index index of the device to open + * \param device_index index of the device to open. * \returns the device identifier or NULL on failure; call SDL_GetError() for * more information. * @@ -879,7 +891,7 @@ extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpen(int device_index); /** * Check if the haptic device at the designated index has been opened. * - * \param device_index the index of the device to query + * \param device_index the index of the device to query. * \returns 1 if it has been opened, 0 if it hasn't or on failure; call * SDL_GetError() for more information. * @@ -893,7 +905,7 @@ extern DECLSPEC int SDLCALL SDL_HapticOpened(int device_index); /** * Get the index of a haptic device. * - * \param haptic the SDL_Haptic device to query + * \param haptic the SDL_Haptic device to query. * \returns the index of the specified haptic device or a negative error code * on failure; call SDL_GetError() for more information. * @@ -931,7 +943,7 @@ extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromMouse(void); /** * Query if a joystick has haptic features. * - * \param joystick the SDL_Joystick to test for haptic capabilities + * \param joystick the SDL_Joystick to test for haptic capabilities. * \returns SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't, or a * negative error code on failure; call SDL_GetError() for more * information. @@ -953,7 +965,7 @@ extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); * device will also get unallocated and you'll be unable to use force feedback * on that device. * - * \param joystick the SDL_Joystick to create a haptic device from + * \param joystick the SDL_Joystick to create a haptic device from. * \returns a valid haptic device identifier on success or NULL on failure; * call SDL_GetError() for more information. * @@ -969,7 +981,7 @@ extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromJoystick(SDL_Joystick * /** * Close a haptic device previously opened with SDL_HapticOpen(). * - * \param haptic the SDL_Haptic device to close + * \param haptic the SDL_Haptic device to close. * * \since This function is available since SDL 2.0.0. * @@ -984,7 +996,7 @@ extern DECLSPEC void SDLCALL SDL_HapticClose(SDL_Haptic * haptic); * approximation. Always check to see if your created effect was actually * created and do not rely solely on SDL_HapticNumEffects(). * - * \param haptic the SDL_Haptic device to query + * \param haptic the SDL_Haptic device to query. * \returns the number of effects the haptic device can store or a negative * error code on failure; call SDL_GetError() for more information. * @@ -1000,7 +1012,7 @@ extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic); * * This is not supported on all platforms, but will always return a value. * - * \param haptic the SDL_Haptic device to query maximum playing effects + * \param haptic the SDL_Haptic device to query maximum playing effects. * \returns the number of effects the haptic device can play at the same time * or a negative error code on failure; call SDL_GetError() for more * information. @@ -1015,7 +1027,7 @@ extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); /** * Get the haptic device's supported features in bitwise manner. * - * \param haptic the SDL_Haptic device to query + * \param haptic the SDL_Haptic device to query. * \returns a list of supported haptic features in bitwise manner (OR'd), or 0 * on failure; call SDL_GetError() for more information. * @@ -1033,7 +1045,7 @@ extern DECLSPEC unsigned int SDLCALL SDL_HapticQuery(SDL_Haptic * haptic); * The number of haptic axes might be useful if working with the * SDL_HapticDirection effect. * - * \param haptic the SDL_Haptic device to query + * \param haptic the SDL_Haptic device to query. * \returns the number of axes on success or a negative error code on failure; * call SDL_GetError() for more information. * @@ -1044,8 +1056,8 @@ extern DECLSPEC int SDLCALL SDL_HapticNumAxes(SDL_Haptic * haptic); /** * Check to see if an effect is supported by a haptic device. * - * \param haptic the SDL_Haptic device to query - * \param effect the desired effect to query + * \param haptic the SDL_Haptic device to query. + * \param effect the desired effect to query. * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a * negative error code on failure; call SDL_GetError() for more * information. @@ -1062,9 +1074,9 @@ extern DECLSPEC int SDLCALL SDL_HapticEffectSupported(SDL_Haptic * haptic, /** * Create a new haptic effect on a specified device. * - * \param haptic an SDL_Haptic device to create the effect on + * \param haptic an SDL_Haptic device to create the effect on. * \param effect an SDL_HapticEffect structure containing the properties of - * the effect to create + * the effect to create. * \returns the ID of the effect on success or a negative error code on * failure; call SDL_GetError() for more information. * @@ -1085,10 +1097,10 @@ extern DECLSPEC int SDLCALL SDL_HapticNewEffect(SDL_Haptic * haptic, * start playing from the start. You also cannot change the type either when * running SDL_HapticUpdateEffect(). * - * \param haptic the SDL_Haptic device that has the effect - * \param effect the identifier of the effect to update + * \param haptic the SDL_Haptic device that has the effect. + * \param effect the identifier of the effect to update. * \param data an SDL_HapticEffect structure containing the new effect - * properties to use + * properties to use. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1111,10 +1123,10 @@ extern DECLSPEC int SDLCALL SDL_HapticUpdateEffect(SDL_Haptic * haptic, * set the effect's `length` in its structure/union to `SDL_HAPTIC_INFINITY` * instead. * - * \param haptic the SDL_Haptic device to run the effect on - * \param effect the ID of the haptic effect to run + * \param haptic the SDL_Haptic device to run the effect on. + * \param effect the ID of the haptic effect to run. * \param iterations the number of iterations to run the effect; use - * `SDL_HAPTIC_INFINITY` to repeat forever + * `SDL_HAPTIC_INFINITY` to repeat forever. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1133,8 +1145,8 @@ extern DECLSPEC int SDLCALL SDL_HapticRunEffect(SDL_Haptic * haptic, * * * * - * \param haptic the SDL_Haptic device to stop the effect on - * \param effect the ID of the haptic effect to stop + * \param haptic the SDL_Haptic device to stop the effect on. + * \param effect the ID of the haptic effect to stop. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1152,8 +1164,8 @@ extern DECLSPEC int SDLCALL SDL_HapticStopEffect(SDL_Haptic * haptic, * This will stop the effect if it's running. Effects are automatically * destroyed when the device is closed. * - * \param haptic the SDL_Haptic device to destroy the effect on - * \param effect the ID of the haptic effect to destroy + * \param haptic the SDL_Haptic device to destroy the effect on. + * \param effect the ID of the haptic effect to destroy. * * \since This function is available since SDL 2.0.0. * @@ -1167,8 +1179,8 @@ extern DECLSPEC void SDLCALL SDL_HapticDestroyEffect(SDL_Haptic * haptic, * * Device must support the SDL_HAPTIC_STATUS feature. * - * \param haptic the SDL_Haptic device to query for the effect status on - * \param effect the ID of the haptic effect to query its status + * \param haptic the SDL_Haptic device to query for the effect status on. + * \param effect the ID of the haptic effect to query its status. * \returns 0 if it isn't playing, 1 if it is playing, or a negative error * code on failure; call SDL_GetError() for more information. * @@ -1190,8 +1202,9 @@ extern DECLSPEC int SDLCALL SDL_HapticGetEffectStatus(SDL_Haptic * haptic, * SDL_HapticSetGain() will scale linearly using `SDL_HAPTIC_GAIN_MAX` as the * maximum. * - * \param haptic the SDL_Haptic device to set the gain on - * \param gain value to set the gain to, should be between 0 and 100 (0 - 100) + * \param haptic the SDL_Haptic device to set the gain on. + * \param gain value to set the gain to, should be between 0 and 100 (0 - + * 100). * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1209,8 +1222,8 @@ extern DECLSPEC int SDLCALL SDL_HapticSetGain(SDL_Haptic * haptic, int gain); * * Device must support the SDL_HAPTIC_AUTOCENTER feature. * - * \param haptic the SDL_Haptic device to set autocentering on - * \param autocenter value to set autocenter to (0-100) + * \param haptic the SDL_Haptic device to set autocentering on. + * \param autocenter value to set autocenter to (0-100). * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1230,7 +1243,7 @@ extern DECLSPEC int SDLCALL SDL_HapticSetAutocenter(SDL_Haptic * haptic, * Do not modify the effects nor add new ones while the device is paused. That * can cause all sorts of weird errors. * - * \param haptic the SDL_Haptic device to pause + * \param haptic the SDL_Haptic device to pause. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1245,7 +1258,7 @@ extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic); * * Call to unpause after SDL_HapticPause(). * - * \param haptic the SDL_Haptic device to unpause + * \param haptic the SDL_Haptic device to unpause. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1258,7 +1271,7 @@ extern DECLSPEC int SDLCALL SDL_HapticUnpause(SDL_Haptic * haptic); /** * Stop all the currently playing effects on a haptic device. * - * \param haptic the SDL_Haptic device to stop + * \param haptic the SDL_Haptic device to stop. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1269,7 +1282,7 @@ extern DECLSPEC int SDLCALL SDL_HapticStopAll(SDL_Haptic * haptic); /** * Check whether rumble is supported on a haptic device. * - * \param haptic haptic device to check for rumble support + * \param haptic haptic device to check for rumble support. * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a * negative error code on failure; call SDL_GetError() for more * information. @@ -1285,7 +1298,7 @@ extern DECLSPEC int SDLCALL SDL_HapticRumbleSupported(SDL_Haptic * haptic); /** * Initialize a haptic device for simple rumble playback. * - * \param haptic the haptic device to initialize for simple rumble playback + * \param haptic the haptic device to initialize for simple rumble playback. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1301,9 +1314,9 @@ extern DECLSPEC int SDLCALL SDL_HapticRumbleInit(SDL_Haptic * haptic); /** * Run a simple rumble effect on a haptic device. * - * \param haptic the haptic device to play the rumble effect on - * \param strength strength of the rumble to play as a 0-1 float value - * \param length length of the rumble to play in milliseconds + * \param haptic the haptic device to play the rumble effect on. + * \param strength strength of the rumble to play as a 0-1 float value. + * \param length length of the rumble to play in milliseconds. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1318,7 +1331,7 @@ extern DECLSPEC int SDLCALL SDL_HapticRumblePlay(SDL_Haptic * haptic, float stre /** * Stop the simple rumble on a haptic device. * - * \param haptic the haptic device to stop the rumble effect on + * \param haptic the haptic device to stop the rumble effect on. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * diff --git a/vs/sdl2/include/SDL_hidapi.h b/vs/sdl2/include/SDL_hidapi.h index b9d8ffac388..b14442a6c2b 100644 --- a/vs/sdl2/include/SDL_hidapi.h +++ b/vs/sdl2/include/SDL_hidapi.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,44 +19,35 @@ 3. This notice may not be removed or altered from any source distribution. */ +/* WIKI CATEGORY: HIDAPI */ + /** - * \file SDL_hidapi.h - * - * Header file for SDL HIDAPI functions. - * - * This is an adaptation of the original HIDAPI interface by Alan Ott, - * and includes source code licensed under the following BSD license: - * - Copyright (c) 2010, Alan Ott, Signal 11 Software - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Signal 11 Software nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. + * # CategoryHIDAPI + * + * Header file for SDL HIDAPI functions. + * + * This is an adaptation of the original HIDAPI interface by Alan Ott, and + * includes source code licensed under the following license: + * + * ``` + * HIDAPI - Multi-Platform library for + * communication with HID devices. + * + * Copyright 2009, Alan Ott, Signal 11 Software. + * All Rights Reserved. + * + * This software may be used by anyone for any reason so + * long as the copyright notice in the source files + * remains intact. + * ``` + * + * (Note that this license is the same as item three of SDL's zlib license, so + * it adds no new requirements on the user.) * * If you would like a version of SDL without this code, you can build SDL - * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for example - * on iOS or tvOS to avoid a dependency on the CoreBluetooth framework. + * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for + * example on iOS or tvOS to avoid a dependency on the CoreBluetooth + * framework. */ #ifndef SDL_hidapi_h_ @@ -71,14 +62,15 @@ extern "C" { #endif /** - * \brief A handle representing an open HID device + * A handle representing an open HID device */ struct SDL_hid_device_; typedef struct SDL_hid_device_ SDL_hid_device; /**< opaque hidapi structure */ /** hidapi info structure */ + /** - * \brief Information about a connected HID device + * Information about a connected HID device */ typedef struct SDL_hid_device_info { @@ -234,13 +226,13 @@ extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open(unsigned short vendor_id, * The path name be determined by calling SDL_hid_enumerate(), or a * platform-specific path name can be used (eg: /dev/hidraw0 on Linux). * - * \param path The path name of the device to open + * \param path The path name of the device to open. * \returns a pointer to a SDL_hid_device object on success or NULL on * failure. * * \since This function is available since SDL 2.0.18. */ -extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive /* = false */); +extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive); /** * Write an Output report to a HID device. @@ -434,7 +426,7 @@ extern DECLSPEC int SDLCALL SDL_hid_get_indexed_string(SDL_hid_device *dev, int /** * Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers * - * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan + * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan. * * \since This function is available since SDL 2.0.18. */ diff --git a/vs/sdl2/include/SDL_hints.h b/vs/sdl2/include/SDL_hints.h index e775a6509bc..6713d01fea2 100644 --- a/vs/sdl2/include/SDL_hints.h +++ b/vs/sdl2/include/SDL_hints.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,20 +20,20 @@ */ /** - * \file SDL_hints.h + * # CategoryHints * - * Official documentation for SDL configuration variables + * Official documentation for SDL configuration variables * - * This file contains functions to set and get configuration hints, - * as well as listing each of them alphabetically. + * This file contains functions to set and get configuration hints, as well as + * listing each of them alphabetically. * - * The convention for naming hints is SDL_HINT_X, where "SDL_X" is - * the environment variable that can be used to override the default. + * The convention for naming hints is SDL_HINT_X, where "SDL_X" is the + * environment variable that can be used to override the default. * - * In general these hints are just that - they may or may not be - * supported or applicable on any given platform, but they provide - * a way for an application or user to give the library a hint as - * to how they would like the library to work. + * In general these hints are just that - they may or may not be supported or + * applicable on any given platform, but they provide a way for an application + * or user to give the library a hint as to how they would like the library to + * work. */ #ifndef SDL_hints_h_ @@ -48,110 +48,132 @@ extern "C" { #endif /** - * \brief A variable controlling whether the Android / iOS built-in - * accelerometer should be listed as a joystick device. + * A variable controlling whether the Android / iOS built-in accelerometer + * should be listed as a joystick device. * - * This variable can be set to the following values: - * "0" - The accelerometer is not listed as a joystick - * "1" - The accelerometer is available as a 3 axis joystick (the default). + * This variable can be set to the following values: + * + * - "0": The accelerometer is not listed as a joystick + * - "1": The accelerometer is available as a 3 axis joystick (the default). */ #define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK" /** - * \brief Specify the behavior of Alt+Tab while the keyboard is grabbed. + * Specify the behavior of Alt+Tab while the keyboard is grabbed. * - * By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed - * and your window is full-screen. This prevents the user from getting stuck in - * your application if you've enabled keyboard grab. + * By default, SDL emulates Alt+Tab functionality while the keyboard is + * grabbed and your window is full-screen. This prevents the user from getting + * stuck in your application if you've enabled keyboard grab. * * The variable can be set to the following values: - * "0" - SDL will not handle Alt+Tab. Your application is responsible - for handling Alt+Tab while the keyboard is grabbed. - * "1" - SDL will minimize your window when Alt+Tab is pressed (default) -*/ + * + * - "0": SDL will not handle Alt+Tab. Your application is responsible for + * handling Alt+Tab while the keyboard is grabbed. + * - "1": SDL will minimize your window when Alt+Tab is pressed (default) + */ #define SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED "SDL_ALLOW_ALT_TAB_WHILE_GRABBED" /** - * \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it. - * This is a debugging aid for developers and not expected to be used by end users. The default is "1" + * If set to "0" then never set the top most bit on a SDL Window, even if the + * video mode expects it. + * + * This is a debugging aid for developers and not expected to be used by end + * users. The default is "1" * - * This variable can be set to the following values: - * "0" - don't allow topmost - * "1" - allow topmost + * This variable can be set to the following values: + * + * - "0": don't allow topmost + * - "1": allow topmost */ #define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST" /** - * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc. + * Android APK expansion main file version. + * + * Should be a string number like "1", "2" etc. * - * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION. + * Must be set together with + * SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION. * * If both hints were set then SDL_RWFromFile() will look into expansion files - * after a given relative path was not found in the internal storage and assets. + * after a given relative path was not found in the internal storage and + * assets. * - * By default this hint is not set and the APK expansion files are not searched. + * By default this hint is not set and the APK expansion files are not + * searched. */ #define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION" /** - * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc. + * Android APK expansion patch file version. + * + * Should be a string number like "1", "2" etc. * * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION. * * If both hints were set then SDL_RWFromFile() will look into expansion files - * after a given relative path was not found in the internal storage and assets. + * after a given relative path was not found in the internal storage and + * assets. * - * By default this hint is not set and the APK expansion files are not searched. + * By default this hint is not set and the APK expansion files are not + * searched. */ #define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION" /** - * \brief A variable to control whether the event loop will block itself when the app is paused. + * A variable to control whether the event loop will block itself when the app + * is paused. * * The variable can be set to the following values: - * "0" - Non blocking. - * "1" - Blocking. (default) + * + * - "0": Non blocking. + * - "1": Blocking. (default) * * The value should be set before SDL is initialized. */ #define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE" /** - * \brief A variable to control whether SDL will pause audio in background - * (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking") + * A variable to control whether SDL will pause audio in background (Requires + * SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking") * * The variable can be set to the following values: - * "0" - Non paused. - * "1" - Paused. (default) + * + * - "0": Non paused. + * - "1": Paused. (default) * * The value should be set before SDL is initialized. */ #define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO" /** - * \brief A variable to control whether we trap the Android back button to handle it manually. - * This is necessary for the right mouse button to work on some Android devices, or - * to be able to trap the back button for use in your code reliably. If set to true, - * the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair with a keycode of - * SDL_SCANCODE_AC_BACK. + * A variable to control whether we trap the Android back button to handle it + * manually. + * + * This is necessary for the right mouse button to work on some Android + * devices, or to be able to trap the back button for use in your code + * reliably. If set to true, the back button will show up as an SDL_KEYDOWN / + * SDL_KEYUP pair with a keycode of SDL_SCANCODE_AC_BACK. * * The variable can be set to the following values: - * "0" - Back button will be handled as usual for system. (default) - * "1" - Back button will be trapped, allowing you to handle the key press - * manually. (This will also let right mouse click work on systems - * where the right mouse button functions as back.) * - * The value of this hint is used at runtime, so it can be changed at any time. + * - "0": Back button will be handled as usual for system. (default) + * - "1": Back button will be trapped, allowing you to handle the key press + * manually. (This will also let right mouse click work on systems where the + * right mouse button functions as back.) + * + * The value of this hint is used at runtime, so it can be changed at any + * time. */ #define SDL_HINT_ANDROID_TRAP_BACK_BUTTON "SDL_ANDROID_TRAP_BACK_BUTTON" /** - * \brief Specify an application name. + * Specify an application name. * * This hint lets you specify the application name sent to the OS when * required. For example, this will often appear in volume control applets for * audio streams, and in lists of applications which are inhibiting the - * screensaver. You should use a string that describes your program ("My Game + * screensaver. You should use a string that describes your program ("My Game * 2: The Revenge") * * Setting this to "" or leaving it unset will have SDL use a reasonable @@ -166,48 +188,51 @@ extern "C" { #define SDL_HINT_APP_NAME "SDL_APP_NAME" /** - * \brief A variable controlling whether controllers used with the Apple TV - * generate UI events. + * A variable controlling whether controllers used with the Apple TV generate + * UI events. * * When UI events are generated by controller input, the app will be - * backgrounded when the Apple TV remote's menu button is pressed, and when the - * pause or B buttons on gamepads are pressed. + * backgrounded when the Apple TV remote's menu button is pressed, and when + * the pause or B buttons on gamepads are pressed. * * More information about properly making use of controllers for the Apple TV * can be found here: * https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/ * - * This variable can be set to the following values: - * "0" - Controller input does not generate UI events (the default). - * "1" - Controller input generates UI events. + * This variable can be set to the following values: + * + * - "0": Controller input does not generate UI events (the default). + * - "1": Controller input generates UI events. */ #define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS" /** - * \brief A variable controlling whether the Apple TV remote's joystick axes - * will automatically match the rotation of the remote. + * A variable controlling whether the Apple TV remote's joystick axes will + * automatically match the rotation of the remote. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Remote orientation does not affect joystick axes (the default). - * "1" - Joystick axes are based on the orientation of the remote. + * - "0": Remote orientation does not affect joystick axes (the default). + * - "1": Joystick axes are based on the orientation of the remote. */ #define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION" /** - * \brief A variable controlling the audio category on iOS and Mac OS X + * A variable controlling the audio category on iOS and Mac OS X * - * This variable can be set to the following values: + * This variable can be set to the following values: * - * "ambient" - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default) - * "playback" - Use the AVAudioSessionCategoryPlayback category + * - "ambient": Use the AVAudioSessionCategoryAmbient audio category, will be + * muted by the phone mute switch (default) + * - "playback": Use the AVAudioSessionCategoryPlayback category * - * For more information, see Apple's documentation: - * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html + * For more information, see Apple's documentation: + * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html */ #define SDL_HINT_AUDIO_CATEGORY "SDL_AUDIO_CATEGORY" /** - * \brief Specify an application name for an audio device. + * Specify an application name for an audio device. * * Some audio backends (such as PulseAudio) allow you to describe your audio * stream. Among other things, this description might show up in a system @@ -228,7 +253,7 @@ extern "C" { #define SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME" /** - * \brief Specify an application name for an audio device. + * Specify an application name for an audio device. * * Some audio backends (such as PulseAudio) allow you to describe your audio * stream. Among other things, this description might show up in a system @@ -249,11 +274,11 @@ extern "C" { #define SDL_HINT_AUDIO_DEVICE_STREAM_NAME "SDL_AUDIO_DEVICE_STREAM_NAME" /** - * \brief Specify an application role for an audio device. + * Specify an application role for an audio device. * * Some audio backends (such as Pipewire) allow you to describe the role of - * your audio stream. Among other things, this description might show up in - * a system control panel or software for displaying and manipulating media + * your audio stream. Among other things, this description might show up in a + * system control panel or software for displaying and manipulating media * playback/capture graphs. * * This hints lets you transmit that information to the OS. The contents of @@ -269,1487 +294,1767 @@ extern "C" { #define SDL_HINT_AUDIO_DEVICE_STREAM_ROLE "SDL_AUDIO_DEVICE_STREAM_ROLE" /** - * \brief A variable controlling speed/quality tradeoff of audio resampling. + * A variable controlling speed/quality tradeoff of audio resampling. * - * If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ ) - * to handle audio resampling. There are different resampling modes available - * that produce different levels of quality, using more CPU. + * If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ ) + * to handle audio resampling. There are different resampling modes available + * that produce different levels of quality, using more CPU. * - * If this hint isn't specified to a valid setting, or libsamplerate isn't - * available, SDL will use the default, internal resampling algorithm. + * If this hint isn't specified to a valid setting, or libsamplerate isn't + * available, SDL will use the default, internal resampling algorithm. * - * As of SDL 2.26, SDL_ConvertAudio() respects this hint when libsamplerate is available. + * As of SDL 2.26, SDL_ConvertAudio() respects this hint when libsamplerate is + * available. * - * This hint is currently only checked at audio subsystem initialization. + * This hint is currently only checked at audio subsystem initialization. * - * This variable can be set to the following values: + * This variable can be set to the following values: * - * "0" or "default" - Use SDL's internal resampling (Default when not set - low quality, fast) - * "1" or "fast" - Use fast, slightly higher quality resampling, if available - * "2" or "medium" - Use medium quality resampling, if available - * "3" or "best" - Use high quality resampling, if available + * - "0" or "default": Use SDL's internal resampling (Default when not set - + * low quality, fast) + * - "1" or "fast": Use fast, slightly higher quality resampling, if available + * - "2" or "medium": Use medium quality resampling, if available + * - "3" or "best": Use high quality resampling, if available */ #define SDL_HINT_AUDIO_RESAMPLING_MODE "SDL_AUDIO_RESAMPLING_MODE" /** - * \brief A variable controlling whether SDL updates joystick state when getting input events + * A variable controlling whether SDL updates joystick state when getting + * input events * - * This variable can be set to the following values: + * This variable can be set to the following values: * - * "0" - You'll call SDL_JoystickUpdate() manually - * "1" - SDL will automatically call SDL_JoystickUpdate() (default) + * - "0": You'll call SDL_JoystickUpdate() manually + * - "1": SDL will automatically call SDL_JoystickUpdate() (default) * - * This hint can be toggled on and off at runtime. + * This hint can be toggled on and off at runtime. */ #define SDL_HINT_AUTO_UPDATE_JOYSTICKS "SDL_AUTO_UPDATE_JOYSTICKS" /** - * \brief A variable controlling whether SDL updates sensor state when getting input events + * A variable controlling whether SDL updates sensor state when getting input + * events * - * This variable can be set to the following values: + * This variable can be set to the following values: * - * "0" - You'll call SDL_SensorUpdate() manually - * "1" - SDL will automatically call SDL_SensorUpdate() (default) + * - "0": You'll call SDL_SensorUpdate() manually + * - "1": SDL will automatically call SDL_SensorUpdate() (default) * - * This hint can be toggled on and off at runtime. + * This hint can be toggled on and off at runtime. */ #define SDL_HINT_AUTO_UPDATE_SENSORS "SDL_AUTO_UPDATE_SENSORS" /** - * \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs. + * Prevent SDL from using version 4 of the bitmap header when saving BMPs. * - * The bitmap header version 4 is required for proper alpha channel support and - * SDL will use it when required. Should this not be desired, this hint can - * force the use of the 40 byte header version which is supported everywhere. + * The bitmap header version 4 is required for proper alpha channel support + * and SDL will use it when required. Should this not be desired, this hint + * can force the use of the 40 byte header version which is supported + * everywhere. * * The variable can be set to the following values: - * "0" - Surfaces with a colorkey or an alpha channel are saved to a - * 32-bit BMP file with an alpha mask. SDL will use the bitmap - * header version 4 and set the alpha mask accordingly. - * "1" - Surfaces with a colorkey or an alpha channel are saved to a - * 32-bit BMP file without an alpha mask. The alpha channel data - * will be in the file, but applications are going to ignore it. + * + * - "0": Surfaces with a colorkey or an alpha channel are saved to a 32-bit + * BMP file with an alpha mask. SDL will use the bitmap header version 4 and + * set the alpha mask accordingly. + * - "1": Surfaces with a colorkey or an alpha channel are saved to a 32-bit + * BMP file without an alpha mask. The alpha channel data will be in the + * file, but applications are going to ignore it. * * The default value is "0". */ #define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT" /** - * \brief Override for SDL_GetDisplayUsableBounds() + * Override for SDL_GetDisplayUsableBounds() * - * If set, this hint will override the expected results for - * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want - * to do this, but this allows an embedded system to request that some of the - * screen be reserved for other uses when paired with a well-behaved - * application. + * If set, this hint will override the expected results for + * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want + * to do this, but this allows an embedded system to request that some of the + * screen be reserved for other uses when paired with a well-behaved + * application. * - * The contents of this hint must be 4 comma-separated integers, the first - * is the bounds x, then y, width and height, in that order. + * The contents of this hint must be 4 comma-separated integers, the first is + * the bounds x, then y, width and height, in that order. */ #define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS" /** - * \brief Disable giving back control to the browser automatically - * when running with asyncify + * Disable giving back control to the browser automatically when running with + * asyncify * - * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations - * such as refreshing the screen or polling events. + * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations such as + * refreshing the screen or polling events. * * This hint only applies to the emscripten platform * * The variable can be set to the following values: - * "0" - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes) - * "1" - Enable emscripten_sleep calls (the default) + * + * - "0": Disable emscripten_sleep calls (if you give back browser control + * manually or use asyncify for other purposes) + * - "1": Enable emscripten_sleep calls (the default) */ #define SDL_HINT_EMSCRIPTEN_ASYNCIFY "SDL_EMSCRIPTEN_ASYNCIFY" /** - * \brief override the binding element for keyboard inputs for Emscripten builds + * override the binding element for keyboard inputs for Emscripten builds * - * This hint only applies to the emscripten platform + * This hint only applies to the emscripten platform. * - * The variable can be one of - * "#window" - The javascript window object (this is the default) - * "#document" - The javascript document object - * "#screen" - the javascript window.screen object - * "#canvas" - the WebGL canvas element - * any other string without a leading # sign applies to the element on the page with that ID. - */ -#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT" - -/** - * \brief A variable that controls whether the on-screen keyboard should be shown when text input is active + * The variable can be one of: * - * The variable can be set to the following values: - * "0" - Do not show the on-screen keyboard - * "1" - Show the on-screen keyboard + * - "#window": the javascript window object (this is the default) + * - "#document": the javascript document object + * - "#screen": the javascript window.screen object + * - "#canvas": the WebGL canvas element * - * The default value is "1". This hint must be set before text input is activated. + * Any other string without a leading # sign applies to the element on the + * page with that ID. */ -#define SDL_HINT_ENABLE_SCREEN_KEYBOARD "SDL_ENABLE_SCREEN_KEYBOARD" +#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT" /** - * \brief A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs + * A variable that controls whether the on-screen keyboard should be shown + * when text input is active * - * The variable can be set to the following values: - * "0" - Do not scan for Steam Controllers - * "1" - Scan for Steam Controllers (the default) + * The variable can be set to the following values: * - * The default value is "1". This hint must be set before initializing the joystick subsystem. + * - "0": Do not show the on-screen keyboard + * - "1": Show the on-screen keyboard + * + * The default value is "1". This hint must be set before text input is + * activated. */ -#define SDL_HINT_ENABLE_STEAM_CONTROLLERS "SDL_ENABLE_STEAM_CONTROLLERS" +#define SDL_HINT_ENABLE_SCREEN_KEYBOARD "SDL_ENABLE_SCREEN_KEYBOARD" /** - * \brief A variable controlling verbosity of the logging of SDL events pushed onto the internal queue. + * A variable controlling verbosity of the logging of SDL events pushed onto + * the internal queue. * - * This variable can be set to the following values, from least to most verbose: + * This variable can be set to the following values, from least to most + * verbose: * - * "0" - Don't log any events (default) - * "1" - Log most events (other than the really spammy ones). - * "2" - Include mouse and finger motion events. - * "3" - Include SDL_SysWMEvent events. + * - "0": Don't log any events (default) + * - "1": Log most events (other than the really spammy ones). + * - "2": Include mouse and finger motion events. + * - "3": Include SDL_SysWMEvent events. * - * This is generally meant to be used to debug SDL itself, but can be useful - * for application developers that need better visibility into what is going - * on in the event queue. Logged events are sent through SDL_Log(), which - * means by default they appear on stdout on most platforms or maybe - * OutputDebugString() on Windows, and can be funneled by the app with - * SDL_LogSetOutputFunction(), etc. + * This is generally meant to be used to debug SDL itself, but can be useful + * for application developers that need better visibility into what is going + * on in the event queue. Logged events are sent through SDL_Log(), which + * means by default they appear on stdout on most platforms or maybe + * OutputDebugString() on Windows, and can be funneled by the app with + * SDL_LogSetOutputFunction(), etc. * - * This hint can be toggled on and off at runtime, if you only need to log - * events for a small subset of program execution. + * This hint can be toggled on and off at runtime, if you only need to log + * events for a small subset of program execution. */ #define SDL_HINT_EVENT_LOGGING "SDL_EVENT_LOGGING" /** - * \brief A variable controlling whether raising the window should be done more forcefully + * A variable controlling whether raising the window should be done more + * forcefully * - * This variable can be set to the following values: - * "0" - No forcing (the default) - * "1" - Extra level of forcing + * This variable can be set to the following values: + * + * - "0": No forcing (the default) + * - "1": Extra level of forcing * - * At present, this is only an issue under MS Windows, which makes it nearly impossible to - * programmatically move a window to the foreground, for "security" reasons. See - * http://stackoverflow.com/a/34414846 for a discussion. + * At present, this is only an issue under MS Windows, which makes it nearly + * impossible to programmatically move a window to the foreground, for + * "security" reasons. See http://stackoverflow.com/a/34414846 for a + * discussion. */ #define SDL_HINT_FORCE_RAISEWINDOW "SDL_HINT_FORCE_RAISEWINDOW" /** - * \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface. + * A variable controlling how 3D acceleration is used to accelerate the SDL + * screen surface. + * + * SDL can try to accelerate the SDL screen surface by using streaming + * textures with a 3D rendering engine. This variable controls whether and how + * this is done. * - * SDL can try to accelerate the SDL screen surface by using streaming - * textures with a 3D rendering engine. This variable controls whether and - * how this is done. + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Disable 3D acceleration - * "1" - Enable 3D acceleration, using the default renderer. - * "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.) + * - "0": Disable 3D acceleration + * - "1": Enable 3D acceleration, using the default renderer. + * - "X": Enable 3D acceleration, using X where X is one of the valid + * rendering drivers. (e.g. "direct3d", "opengl", etc.) * - * By default SDL tries to make a best guess for each platform whether - * to use acceleration or not. + * By default SDL tries to make a best guess for each platform whether to use + * acceleration or not. */ #define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION" /** - * \brief A variable that lets you manually hint extra gamecontroller db entries. + * A variable that lets you manually hint extra gamecontroller db entries. * - * The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h + * The variable should be newline delimited rows of gamecontroller config + * data, see SDL_gamecontroller.h * - * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) - * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) You + * can update mappings after the system is initialized with + * SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() */ #define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG" /** - * \brief A variable that lets you provide a file with extra gamecontroller db entries. + * A variable that lets you provide a file with extra gamecontroller db + * entries. * - * The file should contain lines of gamecontroller config data, see SDL_gamecontroller.h + * The file should contain lines of gamecontroller config data, see + * SDL_gamecontroller.h * - * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) - * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) You + * can update mappings after the system is initialized with + * SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() */ #define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE" /** - * \brief A variable that overrides the automatic controller type detection + * A variable that overrides the automatic controller type detection * - * The variable should be comma separated entries, in the form: VID/PID=type + * The variable should be comma separated entries, in the form: VID/PID=type * - * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd + * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd * - * The type should be one of: - * Xbox360 - * XboxOne - * PS3 - * PS4 - * PS5 - * SwitchPro + * The type should be one of: Xbox360 XboxOne PS3 PS4 PS5 SwitchPro * - * This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + * This hint affects what driver is used, and must be set before calling + * SDL_Init(SDL_INIT_GAMECONTROLLER) */ #define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE" /** - * \brief A variable containing a list of devices to skip when scanning for game controllers. + * A variable containing a list of devices to skip when scanning for game + * controllers. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES" /** - * \brief If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable. + * If set, all devices will be skipped when scanning for game controllers + * except for the ones listed in this variable. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT" /** - * \brief If set, game controller face buttons report their values according to their labels instead of their positional layout. + * If set, game controller face buttons report their values according to their + * labels instead of their positional layout. * - * For example, on Nintendo Switch controllers, normally you'd get: + * For example, on Nintendo Switch controllers, normally you'd get: * + * ``` * (Y) * (X) (B) * (A) + * ``` * - * but if this hint is set, you'll get: + * but if this hint is set, you'll get: * + * ``` * (X) * (Y) (A) * (B) + * ``` + * + * The variable can be set to the following values: * - * The variable can be set to the following values: - * "0" - Report the face buttons by position, as though they were on an Xbox controller. - * "1" - Report the face buttons by label instead of position + * - "0": Report the face buttons by position, as though they were on an Xbox + * controller. + * - "1": Report the face buttons by label instead of position * - * The default value is "1". This hint may be set at any time. + * The default value is "1". This hint may be set at any time. */ #define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS" /** - * \brief A variable controlling whether grabbing input grabs the keyboard + * A variable controlling whether grabbing input grabs the keyboard * - * This variable can be set to the following values: - * "0" - Grab will affect only the mouse - * "1" - Grab will affect mouse and keyboard + * This variable can be set to the following values: + * + * - "0": Grab will affect only the mouse + * - "1": Grab will affect mouse and keyboard * - * By default SDL will not grab the keyboard so system shortcuts still work. + * By default SDL will not grab the keyboard so system shortcuts still work. */ #define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD" /** - * \brief A variable containing a list of devices to ignore in SDL_hid_enumerate() + * A variable containing a list of devices to ignore in SDL_hid_enumerate() * - * For example, to ignore the Shanwan DS3 controller and any Valve controller, you might - * have the string "0x2563/0x0523,0x28de/0x0000" + * For example, to ignore the Shanwan DS3 controller and any Valve controller, + * you might have the string "0x2563/0x0523,0x28de/0x0000" */ #define SDL_HINT_HIDAPI_IGNORE_DEVICES "SDL_HIDAPI_IGNORE_DEVICES" /** - * \brief A variable controlling whether the idle timer is disabled on iOS. + * A variable controlling whether the idle timer is disabled on iOS. * - * When an iOS app does not receive touches for some time, the screen is - * dimmed automatically. For games where the accelerometer is the only input - * this is problematic. This functionality can be disabled by setting this - * hint. + * When an iOS app does not receive touches for some time, the screen is + * dimmed automatically. For games where the accelerometer is the only input + * this is problematic. This functionality can be disabled by setting this + * hint. * - * As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver() - * accomplish the same thing on iOS. They should be preferred over this hint. + * As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver() + * accomplish the same thing on iOS. They should be preferred over this hint. * - * This variable can be set to the following values: - * "0" - Enable idle timer - * "1" - Disable idle timer + * This variable can be set to the following values: + * + * - "0": Enable idle timer + * - "1": Disable idle timer */ #define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED" /** - * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events. + * A variable to control whether certain IMEs should handle text editing + * internally instead of sending SDL_TEXTEDITING events. * * The variable can be set to the following values: - * "0" - SDL_TEXTEDITING events are sent, and it is the application's - * responsibility to render the text from these events and - * differentiate it somehow from committed text. (default) - * "1" - If supported by the IME then SDL_TEXTEDITING events are not sent, - * and text that is being composed will be rendered in its own UI. + * + * - "0": SDL_TEXTEDITING events are sent, and it is the application's + * responsibility to render the text from these events and differentiate it + * somehow from committed text. (default) + * - "1": If supported by the IME then SDL_TEXTEDITING events are not sent, + * and text that is being composed will be rendered in its own UI. */ #define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING" /** - * \brief A variable to control whether certain IMEs should show native UI components (such as the Candidate List) instead of suppressing them. + * A variable to control whether certain IMEs should show native UI components + * (such as the Candidate List) instead of suppressing them. * * The variable can be set to the following values: - * "0" - Native UI components are not display. (default) - * "1" - Native UI components are displayed. + * + * - "0": Native UI components are not display. (default) + * - "1": Native UI components are displayed. */ #define SDL_HINT_IME_SHOW_UI "SDL_IME_SHOW_UI" /** - * \brief A variable to control if extended IME text support is enabled. - * If enabled then SDL_TextEditingExtEvent will be issued if the text would be truncated otherwise. - * Additionally SDL_TextInputEvent will be dispatched multiple times so that it is not truncated. + * A variable to control if extended IME text support is enabled. + * + * If enabled then SDL_TextEditingExtEvent will be issued if the text would be + * truncated otherwise. Additionally SDL_TextInputEvent will be dispatched + * multiple times so that it is not truncated. * * The variable can be set to the following values: - * "0" - Legacy behavior. Text can be truncated, no heap allocations. (default) - * "1" - Modern behavior. + * + * - "0": Legacy behavior. Text can be truncated, no heap allocations. + * (default) + * - "1": Modern behavior. */ #define SDL_HINT_IME_SUPPORT_EXTENDED_TEXT "SDL_IME_SUPPORT_EXTENDED_TEXT" /** - * \brief A variable controlling whether the home indicator bar on iPhone X - * should be hidden. + * A variable controlling whether the home indicator bar on iPhone X should be + * hidden. * - * This variable can be set to the following values: - * "0" - The indicator bar is not hidden (default for windowed applications) - * "1" - The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications) - * "2" - The indicator bar is dim and the first swipe makes it visible and the second swipe performs the "home" action (default for fullscreen applications) + * This variable can be set to the following values: + * + * - "0": The indicator bar is not hidden (default for windowed applications) + * - "1": The indicator bar is hidden and is shown when the screen is touched + * (useful for movie playback applications) + * - "2": The indicator bar is dim and the first swipe makes it visible and + * the second swipe performs the "home" action (default for fullscreen + * applications) */ #define SDL_HINT_IOS_HIDE_HOME_INDICATOR "SDL_IOS_HIDE_HOME_INDICATOR" /** - * \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background. + * A variable that lets you enable joystick (and gamecontroller) events even + * when your app is in the background. * - * The variable can be set to the following values: - * "0" - Disable joystick & gamecontroller input events when the - * application is in the background. - * "1" - Enable joystick & gamecontroller input events when the - * application is in the background. + * The variable can be set to the following values: * - * The default value is "0". This hint may be set at any time. + * - "0": Disable joystick & gamecontroller input events when the application + * is in the background. + * - "1": Enable joystick & gamecontroller input events when the application + * is in the background. + * + * The default value is "0". This hint may be set at any time. */ #define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS" /** - * A variable containing a list of arcade stick style controllers. + * A variable containing a list of arcade stick style controllers. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES "SDL_JOYSTICK_ARCADESTICK_DEVICES" /** - * A variable containing a list of devices that are not arcade stick style controllers. This will override SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES and the built in device list. + * A variable containing a list of devices that are not arcade stick style + * controllers. + * + * This will override SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES and the built in + * device list. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES_EXCLUDED "SDL_JOYSTICK_ARCADESTICK_DEVICES_EXCLUDED" /** - * A variable containing a list of devices that should not be considerd joysticks. + * A variable containing a list of devices that should not be considerd + * joysticks. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_BLACKLIST_DEVICES "SDL_JOYSTICK_BLACKLIST_DEVICES" /** - * A variable containing a list of devices that should be considered joysticks. This will override SDL_HINT_JOYSTICK_BLACKLIST_DEVICES and the built in device list. + * A variable containing a list of devices that should be considered + * joysticks. + * + * This will override SDL_HINT_JOYSTICK_BLACKLIST_DEVICES and the built in + * device list. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_BLACKLIST_DEVICES_EXCLUDED "SDL_JOYSTICK_BLACKLIST_DEVICES_EXCLUDED" /** - * A variable containing a list of flightstick style controllers. + * A variable containing a list of flightstick style controllers. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES "SDL_JOYSTICK_FLIGHTSTICK_DEVICES" /** - * A variable containing a list of devices that are not flightstick style controllers. This will override SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES and the built in device list. + * A variable containing a list of devices that are not flightstick style + * controllers. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * This will override SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES and the built in + * device list. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES_EXCLUDED "SDL_JOYSTICK_FLIGHTSTICK_DEVICES_EXCLUDED" /** - * A variable containing a list of devices known to have a GameCube form factor. + * A variable containing a list of devices known to have a GameCube form + * factor. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_GAMECUBE_DEVICES "SDL_JOYSTICK_GAMECUBE_DEVICES" /** - * A variable containing a list of devices known not to have a GameCube form factor. This will override SDL_HINT_JOYSTICK_GAMECUBE_DEVICES and the built in device list. + * A variable containing a list of devices known not to have a GameCube form + * factor. + * + * This will override SDL_HINT_JOYSTICK_GAMECUBE_DEVICES and the built in + * device list. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_GAMECUBE_DEVICES_EXCLUDED "SDL_JOYSTICK_GAMECUBE_DEVICES_EXCLUDED" /** - * \brief A variable controlling whether the HIDAPI joystick drivers should be used. + * A variable controlling whether the HIDAPI joystick drivers should be used. * - * This variable can be set to the following values: - * "0" - HIDAPI drivers are not used - * "1" - HIDAPI drivers are used (the default) + * This variable can be set to the following values: + * + * - "0": HIDAPI drivers are not used + * - "1": HIDAPI drivers are used (the default) * - * This variable is the default for all drivers, but can be overridden by the hints for specific drivers below. + * This variable is the default for all drivers, but can be overridden by the + * hints for specific drivers below. */ #define SDL_HINT_JOYSTICK_HIDAPI "SDL_JOYSTICK_HIDAPI" /** - * \brief A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used. + * A variable controlling whether the HIDAPI driver for Nintendo GameCube + * controllers should be used. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE" /** - * \brief A variable controlling whether "low_frequency_rumble" and "high_frequency_rumble" is used to implement - * the GameCube controller's 3 rumble modes, Stop(0), Rumble(1), and StopHard(2) - * this is useful for applications that need full compatibility for things like ADSR envelopes. - * Stop is implemented by setting "low_frequency_rumble" to "0" and "high_frequency_rumble" ">0" - * Rumble is both at any arbitrary value, - * StopHard is implemented by setting both "low_frequency_rumble" and "high_frequency_rumble" to "0" + * A variable controlling whether "low_frequency_rumble" and + * "high_frequency_rumble" is used to implement the GameCube controller's 3 + * rumble modes, Stop(0), Rumble(1), and StopHard(2) this is useful for + * applications that need full compatibility for things like ADSR envelopes. + * + * Stop is implemented by setting "low_frequency_rumble" to "0" and + * "high_frequency_rumble" ">0" Rumble is both at any arbitrary value, + * StopHard is implemented by setting both "low_frequency_rumble" and + * "high_frequency_rumble" to "0" * - * This variable can be set to the following values: - * "0" - Normal rumble behavior is behavior is used (default) - * "1" - Proper GameCube controller rumble behavior is used + * This variable can be set to the following values: * + * - "0": Normal rumble behavior is behavior is used (default) + * - "1": Proper GameCube controller rumble behavior is used */ #define SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE "SDL_JOYSTICK_GAMECUBE_RUMBLE_BRAKE" /** - * \brief A variable controlling whether the HIDAPI driver for Nintendo Switch Joy-Cons should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used - * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI - */ + * A variable controlling whether the HIDAPI driver for Nintendo Switch + * Joy-Cons should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ #define SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS "SDL_JOYSTICK_HIDAPI_JOY_CONS" /** - * \brief A variable controlling whether Nintendo Switch Joy-Con controllers will be combined into a single Pro-like controller when using the HIDAPI driver - * - * This variable can be set to the following values: - * "0" - Left and right Joy-Con controllers will not be combined and each will be a mini-gamepad - * "1" - Left and right Joy-Con controllers will be combined into a single controller (the default) - */ + * A variable controlling whether Nintendo Switch Joy-Con controllers will be + * combined into a single Pro-like controller when using the HIDAPI driver + * + * This variable can be set to the following values: + * + * - "0": Left and right Joy-Con controllers will not be combined and each + * will be a mini-gamepad + * - "1": Left and right Joy-Con controllers will be combined into a single + * controller (the default) + */ #define SDL_HINT_JOYSTICK_HIDAPI_COMBINE_JOY_CONS "SDL_JOYSTICK_HIDAPI_COMBINE_JOY_CONS" /** - * \brief A variable controlling whether Nintendo Switch Joy-Con controllers will be in vertical mode when using the HIDAPI driver - * - * This variable can be set to the following values: - * "0" - Left and right Joy-Con controllers will not be in vertical mode (the default) - * "1" - Left and right Joy-Con controllers will be in vertical mode - * - * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) - */ + * A variable controlling whether Nintendo Switch Joy-Con controllers will be + * in vertical mode when using the HIDAPI driver + * + * This variable can be set to the following values: + * + * - "0": Left and right Joy-Con controllers will not be in vertical mode (the + * default) + * - "1": Left and right Joy-Con controllers will be in vertical mode + * + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + */ #define SDL_HINT_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS "SDL_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS" /** - * \brief A variable controlling whether the HIDAPI driver for Amazon Luna controllers connected via Bluetooth should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used - * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI - */ + * A variable controlling whether the HIDAPI driver for Amazon Luna + * controllers connected via Bluetooth should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ #define SDL_HINT_JOYSTICK_HIDAPI_LUNA "SDL_JOYSTICK_HIDAPI_LUNA" /** - * \brief A variable controlling whether the HIDAPI driver for Nintendo Online classic controllers should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used - * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI - */ + * A variable controlling whether the HIDAPI driver for Nintendo Online + * classic controllers should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ #define SDL_HINT_JOYSTICK_HIDAPI_NINTENDO_CLASSIC "SDL_JOYSTICK_HIDAPI_NINTENDO_CLASSIC" /** - * \brief A variable controlling whether the HIDAPI driver for NVIDIA SHIELD controllers should be used. - * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used - * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI - */ + * A variable controlling whether the HIDAPI driver for NVIDIA SHIELD + * controllers should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ #define SDL_HINT_JOYSTICK_HIDAPI_SHIELD "SDL_JOYSTICK_HIDAPI_SHIELD" /** - * \brief A variable controlling whether the HIDAPI driver for PS3 controllers should be used. + * A variable controlling whether the HIDAPI driver for PS3 controllers should + * be used. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI on macOS, and "0" on other platforms. + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI on macOS, and "0" on + * other platforms. * - * It is not possible to use this driver on Windows, due to limitations in the default drivers - * installed. See https://github.com/ViGEm/DsHidMini for an alternative driver on Windows. + * It is not possible to use this driver on Windows, due to limitations in the + * default drivers installed. See https://github.com/ViGEm/DsHidMini for an + * alternative driver on Windows. */ #define SDL_HINT_JOYSTICK_HIDAPI_PS3 "SDL_JOYSTICK_HIDAPI_PS3" /** - * \brief A variable controlling whether the HIDAPI driver for PS4 controllers should be used. + * A variable controlling whether the HIDAPI driver for PS4 controllers should + * be used. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4" /** - * \brief A variable controlling whether extended input reports should be used for PS4 controllers when using the HIDAPI driver. + * A variable controlling whether extended input reports should be used for + * PS4 controllers when using the HIDAPI driver. * - * This variable can be set to the following values: - * "0" - extended reports are not enabled (the default) - * "1" - extended reports + * This variable can be set to the following values: + * + * - "0": extended reports are not enabled (the default) + * - "1": extended reports * - * Extended input reports allow rumble on Bluetooth PS4 controllers, but - * break DirectInput handling for applications that don't use SDL. + * Extended input reports allow rumble on Bluetooth PS4 controllers, but break + * DirectInput handling for applications that don't use SDL. * - * Once extended reports are enabled, they can not be disabled without - * power cycling the controller. + * Once extended reports are enabled, they can not be disabled without power + * cycling the controller. * - * For compatibility with applications written for versions of SDL prior - * to the introduction of PS5 controller support, this value will also - * control the state of extended reports on PS5 controllers when the - * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set. + * For compatibility with applications written for versions of SDL prior to + * the introduction of PS5 controller support, this value will also control + * the state of extended reports on PS5 controllers when the + * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set. */ #define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE" /** - * \brief A variable controlling whether the HIDAPI driver for PS5 controllers should be used. + * A variable controlling whether the HIDAPI driver for PS5 controllers should + * be used. * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used + * This variable can be set to the following values: * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_PS5 "SDL_JOYSTICK_HIDAPI_PS5" /** - * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a PS5 controller. + * A variable controlling whether the player LEDs should be lit to indicate + * which player is associated with a PS5 controller. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - player LEDs are not enabled - * "1" - player LEDs are enabled (the default) + * - "0": player LEDs are not enabled + * - "1": player LEDs are enabled (the default) */ #define SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED "SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED" /** - * \brief A variable controlling whether extended input reports should be used for PS5 controllers when using the HIDAPI driver. + * A variable controlling whether extended input reports should be used for + * PS5 controllers when using the HIDAPI driver. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - extended reports are not enabled (the default) - * "1" - extended reports + * - "0": extended reports are not enabled (the default) + * - "1": extended reports * - * Extended input reports allow rumble on Bluetooth PS5 controllers, but - * break DirectInput handling for applications that don't use SDL. + * Extended input reports allow rumble on Bluetooth PS5 controllers, but break + * DirectInput handling for applications that don't use SDL. * - * Once extended reports are enabled, they can not be disabled without - * power cycling the controller. + * Once extended reports are enabled, they can not be disabled without power + * cycling the controller. * - * For compatibility with applications written for versions of SDL prior - * to the introduction of PS5 controller support, this value defaults to - * the value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE. + * For compatibility with applications written for versions of SDL prior to + * the introduction of PS5 controller support, this value defaults to the + * value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE. */ #define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE "SDL_JOYSTICK_HIDAPI_PS5_RUMBLE" /** - * \brief A variable controlling whether the HIDAPI driver for Google Stadia controllers should be used. + * A variable controlling whether the HIDAPI driver for Google Stadia + * controllers should be used. * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_STADIA "SDL_JOYSTICK_HIDAPI_STADIA" /** - * \brief A variable controlling whether the HIDAPI driver for Bluetooth Steam Controllers should be used. + * A variable controlling whether the HIDAPI driver for Bluetooth Steam + * Controllers should be used. * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used for Steam Controllers, which requires Bluetooth access - * and may prompt the user for permission on iOS and Android. + * This variable can be set to the following values: * - * The default is "0" + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used for Steam Controllers, which requires + * Bluetooth access and may prompt the user for permission on iOS and + * Android. + * + * The default is "0" */ #define SDL_HINT_JOYSTICK_HIDAPI_STEAM "SDL_JOYSTICK_HIDAPI_STEAM" /** - * \brief A variable controlling whether the HIDAPI driver for the Steam Deck builtin controller should be used. + * A variable controlling whether the HIDAPI driver for the Steam Deck builtin + * controller should be used. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_STEAMDECK "SDL_JOYSTICK_HIDAPI_STEAMDECK" /** - * \brief A variable controlling whether the HIDAPI driver for Nintendo Switch controllers should be used. + * A variable controlling whether the HIDAPI driver for Nintendo Switch + * controllers should be used. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH" /** - * \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Pro controller is opened + * A variable controlling whether the Home button LED should be turned on when + * a Nintendo Switch Pro controller is opened * - * This variable can be set to the following values: - * "0" - home button LED is turned off - * "1" - home button LED is turned on + * This variable can be set to the following values: + * + * - "0": home button LED is turned off + * - "1": home button LED is turned on * - * By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED. + * By default the Home button LED state is not changed. This hint can also be + * set to a floating point value between 0.0 and 1.0 which controls the + * brightness of the Home button LED. */ #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED" /** - * \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Joy-Con controller is opened + * A variable controlling whether the Home button LED should be turned on when + * a Nintendo Switch Joy-Con controller is opened + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - home button LED is turned off - * "1" - home button LED is turned on + * - "0": home button LED is turned off + * - "1": home button LED is turned on * - * By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED. + * By default the Home button LED state is not changed. This hint can also be + * set to a floating point value between 0.0 and 1.0 which controls the + * brightness of the Home button LED. */ #define SDL_HINT_JOYSTICK_HIDAPI_JOYCON_HOME_LED "SDL_JOYSTICK_HIDAPI_JOYCON_HOME_LED" /** - * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Nintendo Switch controller. + * A variable controlling whether the player LEDs should be lit to indicate + * which player is associated with a Nintendo Switch controller. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - player LEDs are not enabled - * "1" - player LEDs are enabled (the default) + * - "0": player LEDs are not enabled + * - "1": player LEDs are enabled (the default) */ #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED "SDL_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED" /** - * \brief A variable controlling whether the HIDAPI driver for Nintendo Wii and Wii U controllers should be used. + * A variable controlling whether the HIDAPI driver for Nintendo Wii and Wii U + * controllers should be used. * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used * - * This driver doesn't work with the dolphinbar, so the default is SDL_FALSE for now. + * This driver doesn't work with the dolphinbar, so the default is SDL_FALSE + * for now. */ #define SDL_HINT_JOYSTICK_HIDAPI_WII "SDL_JOYSTICK_HIDAPI_WII" /** - * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Wii controller. + * A variable controlling whether the player LEDs should be lit to indicate + * which player is associated with a Wii controller. * - * This variable can be set to the following values: - * "0" - player LEDs are not enabled - * "1" - player LEDs are enabled (the default) + * This variable can be set to the following values: + * + * - "0": player LEDs are not enabled + * - "1": player LEDs are enabled (the default) */ #define SDL_HINT_JOYSTICK_HIDAPI_WII_PLAYER_LED "SDL_JOYSTICK_HIDAPI_WII_PLAYER_LED" /** - * \brief A variable controlling whether the HIDAPI driver for XBox controllers should be used. + * A variable controlling whether the HIDAPI driver for XBox controllers + * should be used. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used * - * The default is "0" on Windows, otherwise the value of SDL_HINT_JOYSTICK_HIDAPI + * The default is "0" on Windows, otherwise the value of + * SDL_HINT_JOYSTICK_HIDAPI */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX "SDL_JOYSTICK_HIDAPI_XBOX" /** - * \brief A variable controlling whether the HIDAPI driver for XBox 360 controllers should be used. + * A variable controlling whether the HIDAPI driver for XBox 360 controllers + * should be used. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360 "SDL_JOYSTICK_HIDAPI_XBOX_360" /** - * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with an Xbox 360 controller. + * A variable controlling whether the player LEDs should be lit to indicate + * which player is associated with an Xbox 360 controller. * - * This variable can be set to the following values: - * "0" - player LEDs are not enabled - * "1" - player LEDs are enabled (the default) + * This variable can be set to the following values: + * + * - "0": player LEDs are not enabled + * - "1": player LEDs are enabled (the default) */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED "SDL_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED" /** - * \brief A variable controlling whether the HIDAPI driver for XBox 360 wireless controllers should be used. + * A variable controlling whether the HIDAPI driver for XBox 360 wireless + * controllers should be used. * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used + * This variable can be set to the following values: * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX_360 + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX_360 */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_WIRELESS "SDL_JOYSTICK_HIDAPI_XBOX_360_WIRELESS" /** - * \brief A variable controlling whether the HIDAPI driver for XBox One controllers should be used. + * A variable controlling whether the HIDAPI driver for XBox One controllers + * should be used. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - HIDAPI driver is not used - * "1" - HIDAPI driver is used + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used * - * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE "SDL_JOYSTICK_HIDAPI_XBOX_ONE" /** - * \brief A variable controlling whether the Home button LED should be turned on when an Xbox One controller is opened + * A variable controlling whether the Home button LED should be turned on when + * an Xbox One controller is opened + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - home button LED is turned off - * "1" - home button LED is turned on + * - "0": home button LED is turned off + * - "1": home button LED is turned on * - * By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED. The default brightness is 0.4. + * By default the Home button LED state is not changed. This hint can also be + * set to a floating point value between 0.0 and 1.0 which controls the + * brightness of the Home button LED. The default brightness is 0.4. */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED "SDL_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED" /** - * A variable controlling whether IOKit should be used for controller handling. - * - * This variable can be set to the following values: - * "0" - IOKit is not used - * "1" - IOKit is used (the default) - */ + * A variable controlling whether IOKit should be used for controller + * handling. + * + * This variable can be set to the following values: + * + * - "0": IOKit is not used + * - "1": IOKit is used (the default) + */ #define SDL_HINT_JOYSTICK_IOKIT "SDL_JOYSTICK_IOKIT" /** - * A variable controlling whether GCController should be used for controller handling. - * - * This variable can be set to the following values: - * "0" - GCController is not used - * "1" - GCController is used (the default) - */ + * A variable controlling whether GCController should be used for controller + * handling. + * + * This variable can be set to the following values: + * + * - "0": GCController is not used + * - "1": GCController is used (the default) + */ #define SDL_HINT_JOYSTICK_MFI "SDL_JOYSTICK_MFI" /** - * \brief A variable controlling whether the RAWINPUT joystick drivers should be used for better handling XInput-capable devices. - * - * This variable can be set to the following values: - * "0" - RAWINPUT drivers are not used - * "1" - RAWINPUT drivers are used (the default) - */ + * A variable controlling whether the RAWINPUT joystick drivers should be used + * for better handling XInput-capable devices. + * + * This variable can be set to the following values: + * + * - "0": RAWINPUT drivers are not used + * - "1": RAWINPUT drivers are used (the default) + */ #define SDL_HINT_JOYSTICK_RAWINPUT "SDL_JOYSTICK_RAWINPUT" /** - * \brief A variable controlling whether the RAWINPUT driver should pull correlated data from XInput. - * - * This variable can be set to the following values: - * "0" - RAWINPUT driver will only use data from raw input APIs - * "1" - RAWINPUT driver will also pull data from XInput, providing - * better trigger axes, guide button presses, and rumble support - * for Xbox controllers - * - * The default is "1". This hint applies to any joysticks opened after setting the hint. - */ + * A variable controlling whether the RAWINPUT driver should pull correlated + * data from XInput. + * + * This variable can be set to the following values: + * + * - "0": RAWINPUT driver will only use data from raw input APIs + * - "1": RAWINPUT driver will also pull data from XInput, providing better + * trigger axes, guide button presses, and rumble support for Xbox + * controllers + * + * The default is "1". This hint applies to any joysticks opened after setting + * the hint. + */ #define SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT "SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT" /** - * \brief A variable controlling whether the ROG Chakram mice should show up as joysticks - * - * This variable can be set to the following values: - * "0" - ROG Chakram mice do not show up as joysticks (the default) - * "1" - ROG Chakram mice show up as joysticks - */ + * A variable controlling whether the ROG Chakram mice should show up as + * joysticks + * + * This variable can be set to the following values: + * + * - "0": ROG Chakram mice do not show up as joysticks (the default) + * - "1": ROG Chakram mice show up as joysticks + */ #define SDL_HINT_JOYSTICK_ROG_CHAKRAM "SDL_JOYSTICK_ROG_CHAKRAM" /** - * \brief A variable controlling whether a separate thread should be used - * for handling joystick detection and raw input messages on Windows - * - * This variable can be set to the following values: - * "0" - A separate thread is not used (the default) - * "1" - A separate thread is used for handling raw input messages - * - */ + * A variable controlling whether a separate thread should be used for + * handling joystick detection and raw input messages on Windows + * + * This variable can be set to the following values: + * + * - "0": A separate thread is not used (the default) + * - "1": A separate thread is used for handling raw input messages + */ #define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD" /** - * A variable containing a list of throttle style controllers. + * A variable containing a list of throttle style controllers. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_THROTTLE_DEVICES "SDL_JOYSTICK_THROTTLE_DEVICES" /** - * A variable containing a list of devices that are not throttle style controllers. This will override SDL_HINT_JOYSTICK_THROTTLE_DEVICES and the built in device list. + * A variable containing a list of devices that are not throttle style + * controllers. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * This will override SDL_HINT_JOYSTICK_THROTTLE_DEVICES and the built in + * device list. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_THROTTLE_DEVICES_EXCLUDED "SDL_JOYSTICK_THROTTLE_DEVICES_EXCLUDED" /** - * \brief A variable controlling whether Windows.Gaming.Input should be used for controller handling. - * - * This variable can be set to the following values: - * "0" - WGI is not used - * "1" - WGI is used (the default) - */ + * A variable controlling whether Windows.Gaming.Input should be used for + * controller handling. + * + * This variable can be set to the following values: + * + * - "0": WGI is not used + * - "1": WGI is used (the default) + */ #define SDL_HINT_JOYSTICK_WGI "SDL_JOYSTICK_WGI" /** - * A variable containing a list of wheel style controllers. + * A variable containing a list of wheel style controllers. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_WHEEL_DEVICES "SDL_JOYSTICK_WHEEL_DEVICES" /** - * A variable containing a list of devices that are not wheel style controllers. This will override SDL_HINT_JOYSTICK_WHEEL_DEVICES and the built in device list. + * A variable containing a list of devices that are not wheel style + * controllers. + * + * This will override SDL_HINT_JOYSTICK_WHEEL_DEVICES and the built in device + * list. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_WHEEL_DEVICES_EXCLUDED "SDL_JOYSTICK_WHEEL_DEVICES_EXCLUDED" /** - * A variable containing a list of devices known to have all axes centered at zero. + * A variable containing a list of devices known to have all axes centered at + * zero. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_JOYSTICK_ZERO_CENTERED_DEVICES "SDL_JOYSTICK_ZERO_CENTERED_DEVICES" /** - * \brief Determines whether SDL enforces that DRM master is required in order - * to initialize the KMSDRM video backend. + * Determines whether SDL enforces that DRM master is required in order to + * initialize the KMSDRM video backend. * - * The DRM subsystem has a concept of a "DRM master" which is a DRM client that - * has the ability to set planes, set cursor, etc. When SDL is DRM master, it - * can draw to the screen using the SDL rendering APIs. Without DRM master, SDL - * is still able to process input and query attributes of attached displays, - * but it cannot change display state or draw to the screen directly. + * The DRM subsystem has a concept of a "DRM master" which is a DRM client + * that has the ability to set planes, set cursor, etc. When SDL is DRM + * master, it can draw to the screen using the SDL rendering APIs. Without DRM + * master, SDL is still able to process input and query attributes of attached + * displays, but it cannot change display state or draw to the screen + * directly. * - * In some cases, it can be useful to have the KMSDRM backend even if it cannot - * be used for rendering. An app may want to use SDL for input processing while - * using another rendering API (such as an MMAL overlay on Raspberry Pi) or - * using its own code to render to DRM overlays that SDL doesn't support. + * In some cases, it can be useful to have the KMSDRM backend even if it + * cannot be used for rendering. An app may want to use SDL for input + * processing while using another rendering API (such as an MMAL overlay on + * Raspberry Pi) or using its own code to render to DRM overlays that SDL + * doesn't support. * * This hint must be set before initializing the video subsystem. * * This variable can be set to the following values: - * "0" - SDL will allow usage of the KMSDRM backend without DRM master - * "1" - SDL Will require DRM master to use the KMSDRM backend (default) + * + * - "0": SDL will allow usage of the KMSDRM backend without DRM master + * - "1": SDL Will require DRM master to use the KMSDRM backend (default) */ #define SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER "SDL_KMSDRM_REQUIRE_DRM_MASTER" /** - * \brief A comma separated list of devices to open as joysticks - * - * This variable is currently only used by the Linux joystick driver. - */ + * A comma separated list of devices to open as joysticks + * + * This variable is currently only used by the Linux joystick driver. + */ #define SDL_HINT_JOYSTICK_DEVICE "SDL_JOYSTICK_DEVICE" + /** - * \brief A variable controlling whether joysticks on Linux will always treat 'hat' axis inputs (ABS_HAT0X - ABS_HAT3Y) as 8-way digital hats without checking whether they may be analog. - * - * This variable can be set to the following values: - * "0" - Only map hat axis inputs to digital hat outputs if the input axes appear to actually be digital (the default) - * "1" - Always handle the input axes numbered ABS_HAT0X to ABS_HAT3Y as digital hats - */ + * A variable containing a list of devices and their desired number of haptic + * (force feedback) enabled axis. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form plus the number of desired axes, e.g. + * + * `0xAAAA/0xBBBB/1,0xCCCC/0xDDDD/3` + * + * This hint supports a "wildcard" device that will set the number of haptic + * axes on all initialized haptic devices which were not defined explicitly in + * this hint. + * + * `0xFFFF/0xFFFF/1` + * + * This hint should be set before a controller is opened. The number of haptic + * axes won't exceed the number of real axes found on the device. + */ +#define SDL_HINT_JOYSTICK_HAPTIC_AXES "SDL_JOYSTICK_HAPTIC_AXES" + +/** + * A variable controlling whether joysticks on Linux will always treat 'hat' + * axis inputs (ABS_HAT0X - ABS_HAT3Y) as 8-way digital hats without checking + * whether they may be analog. + * + * This variable can be set to the following values: + * + * - "0": Only map hat axis inputs to digital hat outputs if the input axes + * appear to actually be digital (the default) + * - "1": Always handle the input axes numbered ABS_HAT0X to ABS_HAT3Y as + * digital hats + */ #define SDL_HINT_LINUX_DIGITAL_HATS "SDL_LINUX_DIGITAL_HATS" /** - * \brief A variable controlling whether digital hats on Linux will apply deadzones to their underlying input axes or use unfiltered values. - * - * This variable can be set to the following values: - * "0" - Return digital hat values based on unfiltered input axis values - * "1" - Return digital hat values with deadzones on the input axes taken into account (the default) - */ + * A variable controlling whether digital hats on Linux will apply deadzones + * to their underlying input axes or use unfiltered values. + * + * This variable can be set to the following values: + * + * - "0": Return digital hat values based on unfiltered input axis values + * - "1": Return digital hat values with deadzones on the input axes taken + * into account (the default) + */ #define SDL_HINT_LINUX_HAT_DEADZONES "SDL_LINUX_HAT_DEADZONES" /** - * \brief A variable controlling whether to use the classic /dev/input/js* joystick interface or the newer /dev/input/event* joystick interface on Linux - * - * This variable can be set to the following values: - * "0" - Use /dev/input/event* - * "1" - Use /dev/input/js* - * - * By default the /dev/input/event* interfaces are used - */ + * A variable controlling whether to use the classic /dev/input/js* joystick + * interface or the newer /dev/input/event* joystick interface on Linux + * + * This variable can be set to the following values: + * + * - "0": Use /dev/input/event* + * - "1": Use /dev/input/js* + * + * By default the /dev/input/event* interfaces are used + */ #define SDL_HINT_LINUX_JOYSTICK_CLASSIC "SDL_LINUX_JOYSTICK_CLASSIC" /** - * \brief A variable controlling whether joysticks on Linux adhere to their HID-defined deadzones or return unfiltered values. - * - * This variable can be set to the following values: - * "0" - Return unfiltered joystick axis values (the default) - * "1" - Return axis values with deadzones taken into account - */ + * A variable controlling whether joysticks on Linux adhere to their + * HID-defined deadzones or return unfiltered values. + * + * This variable can be set to the following values: + * + * - "0": Return unfiltered joystick axis values (the default) + * - "1": Return axis values with deadzones taken into account + */ #define SDL_HINT_LINUX_JOYSTICK_DEADZONES "SDL_LINUX_JOYSTICK_DEADZONES" /** - * \brief A variable controlling the default SDL log levels. + * A variable controlling the default SDL log levels. * - * This variable is a comma separated set of category=level tokens that define the default logging levels for SDL applications. + * This variable is a comma separated set of category=level tokens that define + * the default logging levels for SDL applications. * - * The category can be a numeric category, one of "app", "error", "assert", "system", "audio", "video", "render", "input", "test", or `*` for any unspecified category. + * The category can be a numeric category, one of "app", "error", "assert", + * "system", "audio", "video", "render", "input", "test", or `*` for any + * unspecified category. * - * The level can be a numeric level, one of "verbose", "debug", "info", "warn", "error", "critical", or "quiet" to disable that category. + * The level can be a numeric level, one of "verbose", "debug", "info", + * "warn", "error", "critical", or "quiet" to disable that category. * - * You can omit the category if you want to set the logging level for all categories. + * You can omit the category if you want to set the logging level for all + * categories. * - * If this hint isn't set, the default log levels are equivalent to: - * "app=info,assert=warn,test=verbose,*=error" + * If this hint isn't set, the default log levels are equivalent to: + * "app=info,assert=warn,test=verbose,*=error" */ #define SDL_HINT_LOGGING "SDL_LOGGING" /** -* \brief When set don't force the SDL app to become a foreground process -* -* This hint only applies to Mac OS X. -* -*/ + * When set don't force the SDL app to become a foreground process + * + * This hint only applies to Mac OS X. + */ #define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP" /** - * \brief A variable that determines whether ctrl+click should generate a right-click event on Mac + * A variable that determines whether ctrl+click should generate a right-click + * event on Mac * - * If present, holding ctrl while left clicking will generate a right click - * event when on Mac. + * If present, holding ctrl while left clicking will generate a right click + * event when on Mac. */ #define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK" /** - * \brief A variable controlling whether dispatching OpenGL context updates should block the dispatching thread until the main thread finishes processing + * A variable controlling whether dispatching OpenGL context updates should + * block the dispatching thread until the main thread finishes processing * - * This variable can be set to the following values: - * "0" - Dispatching OpenGL context updates will block the dispatching thread until the main thread finishes processing (default). - * "1" - Dispatching OpenGL context updates will allow the dispatching thread to continue execution. + * This variable can be set to the following values: * - * Generally you want the default, but if you have OpenGL code in a background thread on a Mac, and the main thread - * hangs because it's waiting for that background thread, but that background thread is also hanging because it's - * waiting for the main thread to do an update, this might fix your issue. + * - "0": Dispatching OpenGL context updates will block the dispatching thread + * until the main thread finishes processing (default). + * - "1": Dispatching OpenGL context updates will allow the dispatching thread + * to continue execution. * - * This hint only applies to macOS. + * Generally you want the default, but if you have OpenGL code in a background + * thread on a Mac, and the main thread hangs because it's waiting for that + * background thread, but that background thread is also hanging because it's + * waiting for the main thread to do an update, this might fix your issue. * - * This hint is available since SDL 2.24.0. + * This hint only applies to macOS. * + * This hint is available since SDL 2.24.0. */ #define SDL_HINT_MAC_OPENGL_ASYNC_DISPATCH "SDL_MAC_OPENGL_ASYNC_DISPATCH" /** - * \brief A variable setting the double click radius, in pixels. + * A variable setting the double click radius, in pixels. */ #define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS "SDL_MOUSE_DOUBLE_CLICK_RADIUS" /** - * \brief A variable setting the double click time, in milliseconds. + * A variable setting the double click time, in milliseconds. */ #define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME "SDL_MOUSE_DOUBLE_CLICK_TIME" /** - * \brief Allow mouse click events when clicking to focus an SDL window + * Allow mouse click events when clicking to focus an SDL window + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Ignore mouse clicks that activate a window - * "1" - Generate events for mouse clicks that activate a window + * - "0": Ignore mouse clicks that activate a window + * - "1": Generate events for mouse clicks that activate a window * - * By default SDL will ignore mouse clicks that activate a window + * By default SDL will ignore mouse clicks that activate a window */ #define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH" /** - * \brief A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode + * A variable setting the speed scale for mouse motion, in floating point, + * when the mouse is not in relative mode */ #define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE "SDL_MOUSE_NORMAL_SPEED_SCALE" /** - * \brief A variable controlling whether relative mouse mode constrains the mouse to the center of the window + * A variable controlling whether relative mouse mode constrains the mouse to + * the center of the window * - * This variable can be set to the following values: - * "0" - Relative mouse mode constrains the mouse to the window - * "1" - Relative mouse mode constrains the mouse to the center of the window + * This variable can be set to the following values: + * + * - "0": Relative mouse mode constrains the mouse to the window + * - "1": Relative mouse mode constrains the mouse to the center of the window * - * Constraining to the center of the window works better for FPS games and when the - * application is running over RDP. Constraining to the whole window works better - * for 2D games and increases the chance that the mouse will be in the correct - * position when using high DPI mice. + * Constraining to the center of the window works better for FPS games and + * when the application is running over RDP. Constraining to the whole window + * works better for 2D games and increases the chance that the mouse will be + * in the correct position when using high DPI mice. * - * By default SDL will constrain the mouse to the center of the window + * By default SDL will constrain the mouse to the center of the window */ #define SDL_HINT_MOUSE_RELATIVE_MODE_CENTER "SDL_MOUSE_RELATIVE_MODE_CENTER" /** - * \brief A variable controlling whether relative mouse mode is implemented using mouse warping + * A variable controlling whether relative mouse mode is implemented using + * mouse warping + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Relative mouse mode uses raw input - * "1" - Relative mouse mode uses mouse warping + * - "0": Relative mouse mode uses raw input + * - "1": Relative mouse mode uses mouse warping * - * By default SDL will use raw input for relative mouse mode + * By default SDL will use raw input for relative mouse mode */ #define SDL_HINT_MOUSE_RELATIVE_MODE_WARP "SDL_MOUSE_RELATIVE_MODE_WARP" /** - * \brief A variable controlling whether relative mouse motion is affected by renderer scaling + * A variable controlling whether relative mouse motion is affected by + * renderer scaling + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Relative motion is unaffected by DPI or renderer's logical size - * "1" - Relative motion is scaled according to DPI scaling and logical size + * - "0": Relative motion is unaffected by DPI or renderer's logical size + * - "1": Relative motion is scaled according to DPI scaling and logical size * - * By default relative mouse deltas are affected by DPI and renderer scaling + * By default relative mouse deltas are affected by DPI and renderer scaling */ #define SDL_HINT_MOUSE_RELATIVE_SCALING "SDL_MOUSE_RELATIVE_SCALING" /** - * \brief A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode + * A variable setting the scale for mouse motion, in floating point, when the + * mouse is in relative mode */ #define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE "SDL_MOUSE_RELATIVE_SPEED_SCALE" /** - * \brief A variable controlling whether the system mouse acceleration curve is used for relative mouse motion. + * A variable controlling whether the system mouse acceleration curve is used + * for relative mouse motion. * - * This variable can be set to the following values: - * "0" - Relative mouse motion will be unscaled (the default) - * "1" - Relative mouse motion will be scaled using the system mouse acceleration curve. + * This variable can be set to the following values: + * + * - "0": Relative mouse motion will be unscaled (the default) + * - "1": Relative mouse motion will be scaled using the system mouse + * acceleration curve. * - * If SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE is set, that will override the system speed scale. + * If SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE is set, that will override the + * system speed scale. */ #define SDL_HINT_MOUSE_RELATIVE_SYSTEM_SCALE "SDL_MOUSE_RELATIVE_SYSTEM_SCALE" /** - * \brief A variable controlling whether a motion event should be generated for mouse warping in relative mode. + * A variable controlling whether a motion event should be generated for mouse + * warping in relative mode. * - * This variable can be set to the following values: - * "0" - Warping the mouse will not generate a motion event in relative mode - * "1" - Warping the mouse will generate a motion event in relative mode + * This variable can be set to the following values: * - * By default warping the mouse will not generate motion events in relative mode. This avoids the application having to filter out large relative motion due to warping. + * - "0": Warping the mouse will not generate a motion event in relative mode + * - "1": Warping the mouse will generate a motion event in relative mode + * + * By default warping the mouse will not generate motion events in relative + * mode. This avoids the application having to filter out large relative + * motion due to warping. */ #define SDL_HINT_MOUSE_RELATIVE_WARP_MOTION "SDL_MOUSE_RELATIVE_WARP_MOTION" /** - * \brief A variable controlling whether mouse events should generate synthetic touch events + * A variable controlling whether the hardware cursor stays visible when + * relative mode is active. + * + * This variable can be set to the following values: "0" - The cursor will be + * hidden while relative mode is active (default) "1" - The cursor will remain + * visible while relative mode is active + * + * Note that for systems without raw hardware inputs, relative mode is + * implemented using warping, so the hardware cursor will visibly warp between + * frames if this is enabled on those systems. + */ +#define SDL_HINT_MOUSE_RELATIVE_CURSOR_VISIBLE "SDL_MOUSE_RELATIVE_CURSOR_VISIBLE" + +/** + * A variable controlling whether mouse events should generate synthetic touch + * events + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Mouse events will not generate touch events (default for desktop platforms) - * "1" - Mouse events will generate touch events (default for mobile platforms, such as Android and iOS) + * - "0": Mouse events will not generate touch events (default for desktop + * platforms) + * - "1": Mouse events will generate touch events (default for mobile + * platforms, such as Android and iOS) */ #define SDL_HINT_MOUSE_TOUCH_EVENTS "SDL_MOUSE_TOUCH_EVENTS" /** - * \brief A variable controlling whether the mouse is captured while mouse buttons are pressed + * A variable controlling whether the mouse is captured while mouse buttons + * are pressed * - * This variable can be set to the following values: - * "0" - The mouse is not captured while mouse buttons are pressed - * "1" - The mouse is captured while mouse buttons are pressed + * This variable can be set to the following values: + * + * - "0": The mouse is not captured while mouse buttons are pressed + * - "1": The mouse is captured while mouse buttons are pressed * - * By default the mouse is captured while mouse buttons are pressed so if the mouse is dragged - * outside the window, the application continues to receive mouse events until the button is - * released. + * By default the mouse is captured while mouse buttons are pressed so if the + * mouse is dragged outside the window, the application continues to receive + * mouse events until the button is released. */ #define SDL_HINT_MOUSE_AUTO_CAPTURE "SDL_MOUSE_AUTO_CAPTURE" /** - * \brief Tell SDL not to catch the SIGINT or SIGTERM signals. + * Tell SDL not to catch the SIGINT or SIGTERM signals. * - * This hint only applies to Unix-like platforms, and should set before - * any calls to SDL_Init() + * This hint only applies to Unix-like platforms, and should set before any + * calls to SDL_Init() * * The variable can be set to the following values: - * "0" - SDL will install a SIGINT and SIGTERM handler, and when it - * catches a signal, convert it into an SDL_QUIT event. - * "1" - SDL will not install a signal handler at all. + * + * - "0": SDL will install a SIGINT and SIGTERM handler, and when it catches a + * signal, convert it into an SDL_QUIT event. + * - "1": SDL will not install a signal handler at all. */ #define SDL_HINT_NO_SIGNAL_HANDLERS "SDL_NO_SIGNAL_HANDLERS" /** - * \brief A variable controlling what driver to use for OpenGL ES contexts. + * A variable controlling what driver to use for OpenGL ES contexts. * - * On some platforms, currently Windows and X11, OpenGL drivers may support - * creating contexts with an OpenGL ES profile. By default SDL uses these - * profiles, when available, otherwise it attempts to load an OpenGL ES - * library, e.g. that provided by the ANGLE project. This variable controls - * whether SDL follows this default behaviour or will always load an - * OpenGL ES library. + * On some platforms, currently Windows and X11, OpenGL drivers may support + * creating contexts with an OpenGL ES profile. By default SDL uses these + * profiles, when available, otherwise it attempts to load an OpenGL ES + * library, e.g. that provided by the ANGLE project. This variable controls + * whether SDL follows this default behaviour or will always load an OpenGL ES + * library. * - * Circumstances where this is useful include - * - Testing an app with a particular OpenGL ES implementation, e.g ANGLE, - * or emulator, e.g. those from ARM, Imagination or Qualcomm. - * - Resolving OpenGL ES function addresses at link time by linking with - * the OpenGL ES library instead of querying them at run time with - * SDL_GL_GetProcAddress(). + * Circumstances where this is useful include - Testing an app with a + * particular OpenGL ES implementation, e.g ANGLE, or emulator, e.g. those + * from ARM, Imagination or Qualcomm. - Resolving OpenGL ES function addresses + * at link time by linking with the OpenGL ES library instead of querying them + * at run time with SDL_GL_GetProcAddress(). * - * Caution: for an application to work with the default behaviour across - * different OpenGL drivers it must query the OpenGL ES function - * addresses at run time using SDL_GL_GetProcAddress(). + * Caution: for an application to work with the default behaviour across + * different OpenGL drivers it must query the OpenGL ES function addresses at + * run time using SDL_GL_GetProcAddress(). * - * This variable is ignored on most platforms because OpenGL ES is native - * or not supported. + * This variable is ignored on most platforms because OpenGL ES is native or + * not supported. * - * This variable can be set to the following values: - * "0" - Use ES profile of OpenGL, if available. (Default when not set.) - * "1" - Load OpenGL ES library using the default library names. + * This variable can be set to the following values: * + * - "0": Use ES profile of OpenGL, if available. (Default when not set.) + * - "1": Load OpenGL ES library using the default library names. */ #define SDL_HINT_OPENGL_ES_DRIVER "SDL_OPENGL_ES_DRIVER" /** - * \brief A variable controlling which orientations are allowed on iOS/Android. + * A variable controlling which orientations are allowed on iOS/Android. + * + * In some circumstances it is necessary to be able to explicitly control + * which UI orientations are allowed. * - * In some circumstances it is necessary to be able to explicitly control - * which UI orientations are allowed. + * This variable is a space delimited list of the following values: * - * This variable is a space delimited list of the following values: - * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown" + * - "LandscapeLeft" + * - "LandscapeRight" + * - "Portrait" + * - "PortraitUpsideDown" */ #define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" /** - * \brief A variable controlling the use of a sentinel event when polling the event queue + * A variable controlling the use of a sentinel event when polling the event + * queue * - * This variable can be set to the following values: - * "0" - Disable poll sentinels - * "1" - Enable poll sentinels + * This variable can be set to the following values: + * + * - "0": Disable poll sentinels + * - "1": Enable poll sentinels * - * When polling for events, SDL_PumpEvents is used to gather new events from devices. - * If a device keeps producing new events between calls to SDL_PumpEvents, a poll loop will - * become stuck until the new events stop. - * This is most noticeable when moving a high frequency mouse. + * When polling for events, SDL_PumpEvents is used to gather new events from + * devices. If a device keeps producing new events between calls to + * SDL_PumpEvents, a poll loop will become stuck until the new events stop. + * This is most noticeable when moving a high frequency mouse. * - * By default, poll sentinels are enabled. + * By default, poll sentinels are enabled. */ #define SDL_HINT_POLL_SENTINEL "SDL_POLL_SENTINEL" /** - * \brief Override for SDL_GetPreferredLocales() + * Override for SDL_GetPreferredLocales() * - * If set, this will be favored over anything the OS might report for the - * user's preferred locales. Changing this hint at runtime will not generate - * a SDL_LOCALECHANGED event (but if you can change the hint, you can push - * your own event, if you want). + * If set, this will be favored over anything the OS might report for the + * user's preferred locales. Changing this hint at runtime will not generate a + * SDL_LOCALECHANGED event (but if you can change the hint, you can push your + * own event, if you want). * - * The format of this hint is a comma-separated list of language and locale, - * combined with an underscore, as is a common format: "en_GB". Locale is - * optional: "en". So you might have a list like this: "en_GB,jp,es_PT" + * The format of this hint is a comma-separated list of language and locale, + * combined with an underscore, as is a common format: "en_GB". Locale is + * optional: "en". So you might have a list like this: "en_GB,jp,es_PT" */ #define SDL_HINT_PREFERRED_LOCALES "SDL_PREFERRED_LOCALES" /** - * \brief A variable describing the content orientation on QtWayland-based platforms. + * A variable describing the content orientation on QtWayland-based platforms. + * + * On QtWayland platforms, windows are rotated client-side to allow for custom + * transitions. In order to correctly position overlays (e.g. volume bar) and + * gestures (e.g. events view, close/minimize gestures), the system needs to + * know in which orientation the application is currently drawing its + * contents. * - * On QtWayland platforms, windows are rotated client-side to allow for custom - * transitions. In order to correctly position overlays (e.g. volume bar) and - * gestures (e.g. events view, close/minimize gestures), the system needs to - * know in which orientation the application is currently drawing its contents. + * This does not cause the window to be rotated or resized, the application + * needs to take care of drawing the content in the right orientation (the + * framebuffer is always in portrait mode). * - * This does not cause the window to be rotated or resized, the application - * needs to take care of drawing the content in the right orientation (the - * framebuffer is always in portrait mode). + * This variable can be one of the following values: * - * This variable can be one of the following values: - * "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape" + * - "primary" (default) + * - "portrait" + * - "landscape" + * - "inverted-portrait" + * - "inverted-landscape" * - * Since SDL 2.0.22 this variable accepts a comma-separated list of values above. + * Since SDL 2.0.22 this variable accepts a comma-separated list of values + * above. */ #define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION" /** - * \brief Flags to set on QtWayland windows to integrate with the native window manager. + * Flags to set on QtWayland windows to integrate with the native window + * manager. * - * On QtWayland platforms, this hint controls the flags to set on the windows. - * For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures. + * On QtWayland platforms, this hint controls the flags to set on the windows. + * For example, on Sailfish OS "OverridesSystemGestures" disables swipe + * gestures. * - * This variable is a space-separated list of the following values (empty = no flags): - * "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager" + * This variable is a space-separated list of the following values (empty = no + * flags): + * + * - "OverridesSystemGestures" + * - "StaysOnTop" + * - "BypassWindowManager" */ #define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS" /** - * \brief A variable controlling whether the 2D render API is compatible or efficient. - * - * This variable can be set to the following values: + * A variable controlling whether the 2D render API is compatible or + * efficient. * - * "0" - Don't use batching to make rendering more efficient. - * "1" - Use batching, but might cause problems if app makes its own direct OpenGL calls. + * This variable can be set to the following values: * - * Up to SDL 2.0.9, the render API would draw immediately when requested. Now - * it batches up draw requests and sends them all to the GPU only when forced - * to (during SDL_RenderPresent, when changing render targets, by updating a - * texture that the batch needs, etc). This is significantly more efficient, - * but it can cause problems for apps that expect to render on top of the - * render API's output. As such, SDL will disable batching if a specific - * render backend is requested (since this might indicate that the app is - * planning to use the underlying graphics API directly). This hint can - * be used to explicitly request batching in this instance. It is a contract - * that you will either never use the underlying graphics API directly, or - * if you do, you will call SDL_RenderFlush() before you do so any current - * batch goes to the GPU before your work begins. Not following this contract - * will result in undefined behavior. + * - "0": Don't use batching to make rendering more efficient. + * - "1": Use batching, but might cause problems if app makes its own direct + * OpenGL calls. + * + * Up to SDL 2.0.9, the render API would draw immediately when requested. Now + * it batches up draw requests and sends them all to the GPU only when forced + * to (during SDL_RenderPresent, when changing render targets, by updating a + * texture that the batch needs, etc). This is significantly more efficient, + * but it can cause problems for apps that expect to render on top of the + * render API's output. As such, SDL will disable batching if a specific + * render backend is requested (since this might indicate that the app is + * planning to use the underlying graphics API directly). This hint can be + * used to explicitly request batching in this instance. It is a contract that + * you will either never use the underlying graphics API directly, or if you + * do, you will call SDL_RenderFlush() before you do so any current batch goes + * to the GPU before your work begins. Not following this contract will result + * in undefined behavior. */ #define SDL_HINT_RENDER_BATCHING "SDL_RENDER_BATCHING" /** - * \brief A variable controlling how the 2D render API renders lines + * A variable controlling how the 2D render API renders lines * - * This variable can be set to the following values: - * "0" - Use the default line drawing method (Bresenham's line algorithm as of SDL 2.0.20) - * "1" - Use the driver point API using Bresenham's line algorithm (correct, draws many points) - * "2" - Use the driver line API (occasionally misses line endpoints based on hardware driver quirks, was the default before 2.0.20) - * "3" - Use the driver geometry API (correct, draws thicker diagonal lines) + * This variable can be set to the following values: + * + * - "0": Use the default line drawing method (Bresenham's line algorithm as + * of SDL 2.0.20) + * - "1": Use the driver point API using Bresenham's line algorithm (correct, + * draws many points) + * - "2": Use the driver line API (occasionally misses line endpoints based on + * hardware driver quirks, was the default before 2.0.20) + * - "3": Use the driver geometry API (correct, draws thicker diagonal lines) * - * This variable should be set when the renderer is created. + * This variable should be set when the renderer is created. */ #define SDL_HINT_RENDER_LINE_METHOD "SDL_RENDER_LINE_METHOD" /** - * \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer. + * A variable controlling whether to enable Direct3D 11+'s Debug Layer. * - * This variable does not have any effect on the Direct3D 9 based renderer. + * This variable does not have any effect on the Direct3D 9 based renderer. * - * This variable can be set to the following values: - * "0" - Disable Debug Layer use - * "1" - Enable Debug Layer use + * This variable can be set to the following values: * - * By default, SDL does not use Direct3D Debug Layer. + * - "0": Disable Debug Layer use + * - "1": Enable Debug Layer use + * + * By default, SDL does not use Direct3D Debug Layer. */ #define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG" /** - * \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations. + * A variable controlling whether the Direct3D device is initialized for + * thread-safe operations. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Thread-safety is not enabled (faster) - * "1" - Thread-safety is enabled + * - "0": Thread-safety is not enabled (faster) + * - "1": Thread-safety is enabled * - * By default the Direct3D device is created with thread-safety disabled. + * By default the Direct3D device is created with thread-safety disabled. */ #define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE" /** - * \brief A variable specifying which render driver to use. + * A variable specifying which render driver to use. + * + * If the application doesn't pick a specific renderer to use, this variable + * specifies the name of the preferred renderer. If the preferred renderer + * can't be initialized, the normal default renderer is used. * - * If the application doesn't pick a specific renderer to use, this variable - * specifies the name of the preferred renderer. If the preferred renderer - * can't be initialized, the normal default renderer is used. + * This variable is case insensitive and can be set to the following values: * - * This variable is case insensitive and can be set to the following values: - * "direct3d" - * "direct3d11" - * "direct3d12" - * "opengl" - * "opengles2" - * "opengles" - * "metal" - * "software" + * - "direct3d" + * - "direct3d11" + * - "direct3d12" + * - "opengl" + * - "opengles2" + * - "opengles" + * - "metal" + * - "software" * - * The default varies by platform, but it's the first one in the list that - * is available on the current platform. + * The default varies by platform, but it's the first one in the list that is + * available on the current platform. */ #define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER" /** - * \brief A variable controlling the scaling policy for SDL_RenderSetLogicalSize. + * A variable controlling the scaling policy for SDL_RenderSetLogicalSize. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen - * "1" or "overscan" - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen + * "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on + * screen "1" or "overscan" - Will zoom the rendering so it fills the entire + * screen, allowing edges to be drawn offscreen * - * By default letterbox is used + * By default letterbox is used */ #define SDL_HINT_RENDER_LOGICAL_SIZE_MODE "SDL_RENDER_LOGICAL_SIZE_MODE" /** - * \brief A variable controlling whether the OpenGL render driver uses shaders if they are available. + * A variable controlling whether the OpenGL render driver uses shaders if + * they are available. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Disable shaders - * "1" - Enable shaders + * - "0": Disable shaders + * - "1": Enable shaders * - * By default shaders are used if OpenGL supports them. + * By default shaders are used if OpenGL supports them. */ #define SDL_HINT_RENDER_OPENGL_SHADERS "SDL_RENDER_OPENGL_SHADERS" /** - * \brief A variable controlling the scaling quality + * A variable controlling the scaling quality * - * This variable can be set to the following values: - * "0" or "nearest" - Nearest pixel sampling - * "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D) - * "2" or "best" - Currently this is the same as "linear" + * This variable can be set to the following values: + * + * - "0" or "nearest": Nearest pixel sampling + * - "1" or "linear": Linear filtering (supported by OpenGL and Direct3D) + * - "2" or "best": Currently this is the same as "linear" * - * By default nearest pixel sampling is used + * By default nearest pixel sampling is used */ #define SDL_HINT_RENDER_SCALE_QUALITY "SDL_RENDER_SCALE_QUALITY" /** - * \brief A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing. + * A variable controlling whether updates to the SDL screen surface should be + * synchronized with the vertical refresh, to avoid tearing. * - * This variable can be set to the following values: - * "0" - Disable vsync - * "1" - Enable vsync + * This variable can be set to the following values: * - * By default SDL does not sync screen surface updates with vertical refresh. + * - "0": Disable vsync + * - "1": Enable vsync + * + * By default SDL does not sync screen surface updates with vertical refresh. */ #define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC" /** - * \brief A variable controlling whether the Metal render driver select low power device over default one + * A variable controlling whether the Metal render driver select low power + * device over default one + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Use the prefered OS device - * "1" - Select a low power one + * - "0": Use the prefered OS device + * - "1": Select a low power one * - * By default the prefered OS device is used. + * By default the prefered OS device is used. */ #define SDL_HINT_RENDER_METAL_PREFER_LOW_POWER_DEVICE "SDL_RENDER_METAL_PREFER_LOW_POWER_DEVICE" /** - * A variable containing a list of ROG gamepad capable mice. + * A variable containing a list of ROG gamepad capable mice. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_ROG_GAMEPAD_MICE "SDL_ROG_GAMEPAD_MICE" /** - * A variable containing a list of devices that are not ROG gamepad capable mice. This will override SDL_HINT_ROG_GAMEPAD_MICE and the built in device list. + * A variable containing a list of devices that are not ROG gamepad capable + * mice. + * + * This will override SDL_HINT_ROG_GAMEPAD_MICE and the built in device list. * - * The format of the string is a comma separated list of USB VID/PID pairs - * in hexadecimal form, e.g. + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. * - * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD * - * The variable can also take the form of @file, in which case the named - * file will be loaded and interpreted as the value of the variable. + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. */ #define SDL_HINT_ROG_GAMEPAD_MICE_EXCLUDED "SDL_ROG_GAMEPAD_MICE_EXCLUDED" /** - * \brief A variable controlling if VSYNC is automatically disable if doesn't reach the enough FPS + * A variable controlling if VSYNC is automatically disable if doesn't reach + * the enough FPS + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - It will be using VSYNC as defined in the main flag. Default - * "1" - If VSYNC was previously enabled, then it will disable VSYNC if doesn't reach enough speed + * - "0": It will be using VSYNC as defined in the main flag. Default + * - "1": If VSYNC was previously enabled, then it will disable VSYNC if + * doesn't reach enough speed * - * By default SDL does not enable the automatic VSYNC + * By default SDL does not enable the automatic VSYNC */ #define SDL_HINT_PS2_DYNAMIC_VSYNC "SDL_PS2_DYNAMIC_VSYNC" /** - * \brief A variable to control whether the return key on the soft keyboard - * should hide the soft keyboard on Android and iOS. + * A variable to control whether the return key on the soft keyboard should + * hide the soft keyboard on Android and iOS. * * The variable can be set to the following values: - * "0" - The return key will be handled as a key event. This is the behaviour of SDL <= 2.0.3. (default) - * "1" - The return key will hide the keyboard. * - * The value of this hint is used at runtime, so it can be changed at any time. + * - "0": The return key will be handled as a key event. This is the behaviour + * of SDL <= 2.0.3. (default) + * - "1": The return key will hide the keyboard. + * + * The value of this hint is used at runtime, so it can be changed at any + * time. */ #define SDL_HINT_RETURN_KEY_HIDES_IME "SDL_RETURN_KEY_HIDES_IME" /** - * \brief Tell SDL which Dispmanx layer to use on a Raspberry PI + * Tell SDL which Dispmanx layer to use on a Raspberry PI * * Also known as Z-order. The variable can take a negative or positive value. * The default is 10000. @@ -1757,7 +2062,7 @@ extern "C" { #define SDL_HINT_RPI_VIDEO_LAYER "SDL_RPI_VIDEO_LAYER" /** - * \brief Specify an "activity name" for screensaver inhibition. + * Specify an "activity name" for screensaver inhibition. * * Some platforms, notably Linux desktops, list the applications which are * inhibiting the screensaver or other power-saving features. @@ -1766,7 +2071,7 @@ extern "C" { * SDL_DisableScreenSaver() is used (or the screensaver is automatically * disabled). The contents of this hint are used when the screensaver is * disabled. You should use a string that describes what your program is doing - * (and, therefore, why the screensaver is disabled). For example, "Playing a + * (and, therefore, why the screensaver is disabled). For example, "Playing a * game" or "Watching a video". * * Setting this to "" or leaving it unset will have SDL use a reasonable @@ -1777,628 +2082,715 @@ extern "C" { #define SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME "SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME" /** - * \brief Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as realtime. + * Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as + * realtime. + * + * On some platforms, like Linux, a realtime priority thread may be subject to + * restrictions that require special handling by the application. This hint + * exists to let SDL know that the app is prepared to handle said + * restrictions. * - * On some platforms, like Linux, a realtime priority thread may be subject to restrictions - * that require special handling by the application. This hint exists to let SDL know that - * the app is prepared to handle said restrictions. + * On Linux, SDL will apply the following configuration to any thread that + * becomes realtime: * - * On Linux, SDL will apply the following configuration to any thread that becomes realtime: - * * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy, - * * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit. - * * Exceeding this limit will result in the kernel sending SIGKILL to the app, - * * Refer to the man pages for more information. + * - The SCHED_RESET_ON_FORK bit will be set on the scheduling policy. + * - An RLIMIT_RTTIME budget will be configured to the rtkit specified limit. + * - Exceeding this limit will result in the kernel sending SIGKILL to the + * app. * - * This variable can be set to the following values: - * "0" - default platform specific behaviour - * "1" - Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy + * Refer to the man pages for more information. + * + * This variable can be set to the following values: + * + * - "0": default platform specific behaviour + * - "1": Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling + * policy */ #define SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL "SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL" /** -* \brief A string specifying additional information to use with SDL_SetThreadPriority. -* -* By default SDL_SetThreadPriority will make appropriate system changes in order to -* apply a thread priority. For example on systems using pthreads the scheduler policy -* is changed automatically to a policy that works well with a given priority. -* Code which has specific requirements can override SDL's default behavior with this hint. -* -* pthread hint values are "current", "other", "fifo" and "rr". -* Currently no other platform hint values are defined but may be in the future. -* -* \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro -* configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME -* after calling SDL_SetThreadPriority(). -*/ + * A string specifying additional information to use with + * SDL_SetThreadPriority. + * + * By default SDL_SetThreadPriority will make appropriate system changes in + * order to apply a thread priority. For example on systems using pthreads the + * scheduler policy is changed automatically to a policy that works well with + * a given priority. Code which has specific requirements can override SDL's + * default behavior with this hint. + * + * pthread hint values are "current", "other", "fifo" and "rr". Currently no + * other platform hint values are defined but may be in the future. + */ #define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY" /** -* \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size -* -* Use this hint in case you need to set SDL's threads stack size to other than the default. -* This is specially useful if you build SDL against a non glibc libc library (such as musl) which -* provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses). -* Support for this hint is currently available only in the pthread, Windows, and PSP backend. -* -* Instead of this hint, in 2.0.9 and later, you can use -* SDL_CreateThreadWithStackSize(). This hint only works with the classic -* SDL_CreateThread(). -*/ + * A string specifying SDL's threads stack size in bytes or "0" for the + * backend's default size + * + * Use this hint in case you need to set SDL's threads stack size to other + * than the default. This is specially useful if you build SDL against a non + * glibc libc library (such as musl) which provides a relatively small default + * thread stack size (a few kilobytes versus the default 8MB glibc uses). + * Support for this hint is currently available only in the pthread, Windows, + * and PSP backend. + * + * Instead of this hint, in 2.0.9 and later, you can use + * SDL_CreateThreadWithStackSize(). This hint only works with the classic + * SDL_CreateThread(). + */ #define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE" /** - * \brief A variable that controls the timer resolution, in milliseconds. + * A variable that controls the timer resolution, in milliseconds. * - * The higher resolution the timer, the more frequently the CPU services - * timer interrupts, and the more precise delays are, but this takes up - * power and CPU time. This hint is only used on Windows. + * The higher resolution the timer, the more frequently the CPU services timer + * interrupts, and the more precise delays are, but this takes up power and + * CPU time. This hint is only used on Windows. * - * See this blog post for more information: - * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/ + * See this blog post for more information: + * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/ * - * If this variable is set to "0", the system timer resolution is not set. + * If this variable is set to "0", the system timer resolution is not set. * - * The default value is "1". This hint may be set at any time. + * The default value is "1". This hint may be set at any time. */ #define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION" /** - * \brief A variable controlling whether touch events should generate synthetic mouse events + * A variable controlling whether touch events should generate synthetic mouse + * events * - * This variable can be set to the following values: - * "0" - Touch events will not generate mouse events - * "1" - Touch events will generate mouse events + * This variable can be set to the following values: + * + * - "0": Touch events will not generate mouse events + * - "1": Touch events will generate mouse events * - * By default SDL will generate mouse events for touch events + * By default SDL will generate mouse events for touch events */ #define SDL_HINT_TOUCH_MOUSE_EVENTS "SDL_TOUCH_MOUSE_EVENTS" /** - * \brief A variable controlling which touchpad should generate synthetic mouse events + * A variable controlling which touchpad should generate synthetic mouse + * events * - * This variable can be set to the following values: - * "0" - Only front touchpad should generate mouse events. Default - * "1" - Only back touchpad should generate mouse events. - * "2" - Both touchpads should generate mouse events. + * This variable can be set to the following values: * - * By default SDL will generate mouse events for all touch devices + * - "0": Only front touchpad should generate mouse events. Default + * - "1": Only back touchpad should generate mouse events. + * - "2": Both touchpads should generate mouse events. + * + * By default SDL will generate mouse events for all touch devices */ #define SDL_HINT_VITA_TOUCH_MOUSE_DEVICE "SDL_HINT_VITA_TOUCH_MOUSE_DEVICE" /** - * \brief A variable controlling whether the Android / tvOS remotes - * should be listed as joystick devices, instead of sending keyboard events. + * A variable controlling whether the Android / tvOS remotes should be listed + * as joystick devices, instead of sending keyboard events. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Remotes send enter/escape/arrow key events - * "1" - Remotes are available as 2 axis, 2 button joysticks (the default). + * - "0": Remotes send enter/escape/arrow key events + * - "1": Remotes are available as 2 axis, 2 button joysticks (the default). */ #define SDL_HINT_TV_REMOTE_AS_JOYSTICK "SDL_TV_REMOTE_AS_JOYSTICK" /** - * \brief A variable controlling whether the screensaver is enabled. + * A variable controlling whether the screensaver is enabled. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Disable screensaver - * "1" - Enable screensaver + * - "0": Disable screensaver + * - "1": Enable screensaver * - * By default SDL will disable the screensaver. + * By default SDL will disable the screensaver. */ #define SDL_HINT_VIDEO_ALLOW_SCREENSAVER "SDL_VIDEO_ALLOW_SCREENSAVER" /** - * \brief Tell the video driver that we only want a double buffer. + * Tell the video driver that we only want a double buffer. * * By default, most lowlevel 2D APIs will use a triple buffer scheme that * wastes no CPU time on waiting for vsync after issuing a flip, but * introduces a frame of latency. On the other hand, using a double buffer * scheme instead is recommended for cases where low latency is an important - * factor because we save a whole frame of latency. - * We do so by waiting for vsync immediately after issuing a flip, usually just - * after eglSwapBuffers call in the backend's *_SwapWindow function. + * factor because we save a whole frame of latency. We do so by waiting for + * vsync immediately after issuing a flip, usually just after eglSwapBuffers + * call in the backend's *_SwapWindow function. * * Since it's driver-specific, it's only supported where possible and * implemented. Currently supported the following drivers: * + * - Wayland (wayland) * - KMSDRM (kmsdrm) * - Raspberry Pi (raspberrypi) */ #define SDL_HINT_VIDEO_DOUBLE_BUFFER "SDL_VIDEO_DOUBLE_BUFFER" /** - * \brief A variable controlling whether the EGL window is allowed to be - * composited as transparent, rather than opaque. + * A variable controlling whether the EGL window is allowed to be composited + * as transparent, rather than opaque. * * Most window systems will always render windows opaque, even if the surface - * format has an alpha channel. This is not always true, however, so by default - * SDL will try to enforce opaque composition. To override this behavior, you - * can set this hint to "1". + * format has an alpha channel. This is not always true, however, so by + * default SDL will try to enforce opaque composition. To override this + * behavior, you can set this hint to "1". */ #define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY" /** - * \brief A variable controlling whether the graphics context is externally managed. + * A variable controlling whether the graphics context is externally managed. * * This variable can be set to the following values: - * "0" - SDL will manage graphics contexts that are attached to windows. - * "1" - Disable graphics context management on windows. * - * By default SDL will manage OpenGL contexts in certain situations. For example, on Android the - * context will be automatically saved and restored when pausing the application. Additionally, some - * platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this - * behavior, which is desireable when the application manages the graphics context, such as - * an externally managed OpenGL context or attaching a Vulkan surface to the window. + * - "0": SDL will manage graphics contexts that are attached to windows. + * - "1": Disable graphics context management on windows. + * + * By default SDL will manage OpenGL contexts in certain situations. For + * example, on Android the context will be automatically saved and restored + * when pausing the application. Additionally, some platforms will assume + * usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this + * behavior, which is desireable when the application manages the graphics + * context, such as an externally managed OpenGL context or attaching a Vulkan + * surface to the window. */ #define SDL_HINT_VIDEO_EXTERNAL_CONTEXT "SDL_VIDEO_EXTERNAL_CONTEXT" /** - * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS) + * If set to 1, then do not allow high-DPI windows. + * + * ("Retina" on Mac and iOS) */ #define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED" /** - * \brief A variable that dictates policy for fullscreen Spaces on Mac OS X. + * A variable that dictates policy for fullscreen Spaces on Mac OS X. * - * This hint only applies to Mac OS X. + * This hint only applies to Mac OS X. * - * The variable can be set to the following values: - * "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and - * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" - * button on their titlebars). - * "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and - * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" - * button on their titlebars). + * The variable can be set to the following values: * - * The default value is "1". This hint must be set before any windows are created. + * - "0": Disable Spaces support (FULLSCREEN_DESKTOP won't use them and + * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" button on their + * titlebars). + * - "1": Enable Spaces support (FULLSCREEN_DESKTOP will use them and + * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" button on their + * titlebars). + * + * The default value is "1". This hint must be set before any windows are + * created. */ #define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES "SDL_VIDEO_MAC_FULLSCREEN_SPACES" /** - * \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to false. - * \warning Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're - * seeing if "true" causes more problems than it solves in modern times. + * Minimize your SDL_Window if it loses key focus when in fullscreen mode. * + * Defaults to false. */ #define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS" /** - * \brief A variable controlling whether the libdecor Wayland backend is allowed to be used. + * A variable controlling whether the libdecor Wayland backend is allowed to + * be used. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - libdecor use is disabled. - * "1" - libdecor use is enabled (default). + * - "0": libdecor use is disabled. + * - "1": libdecor use is enabled (default). * - * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. + * libdecor is used over xdg-shell when xdg-decoration protocol is + * unavailable. */ #define SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR "SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR" /** - * \brief A variable controlling whether the libdecor Wayland backend is preferred over native decrations. + * A variable controlling whether the libdecor Wayland backend is preferred + * over native decorations. * - * When this hint is set, libdecor will be used to provide window decorations, even if xdg-decoration is - * available. (Note that, by default, libdecor will use xdg-decoration itself if available). + * When this hint is set, libdecor will be used to provide window decorations, + * even if xdg-decoration is available. (Note that, by default, libdecor will + * use xdg-decoration itself if available). + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - libdecor is enabled only if server-side decorations are unavailable. - * "1" - libdecor is always enabled if available. + * - "0": libdecor is enabled only if server-side decorations are unavailable. + * - "1": libdecor is always enabled if available. * - * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. + * libdecor is used over xdg-shell when xdg-decoration protocol is + * unavailable. */ #define SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR "SDL_VIDEO_WAYLAND_PREFER_LIBDECOR" /** - * \brief A variable controlling whether video mode emulation is enabled under Wayland. + * A variable controlling whether video mode emulation is enabled under + * Wayland. * - * When this hint is set, a standard set of emulated CVT video modes will be exposed for use by the application. - * If it is disabled, the only modes exposed will be the logical desktop size and, in the case of a scaled - * desktop, the native display resolution. + * When this hint is set, a standard set of emulated CVT video modes will be + * exposed for use by the application. If it is disabled, the only modes + * exposed will be the logical desktop size and, in the case of a scaled + * desktop, the native display resolution. * - * This variable can be set to the following values: - * "0" - Video mode emulation is disabled. - * "1" - Video mode emulation is enabled. + * This variable can be set to the following values: + * + * - "0": Video mode emulation is disabled. + * - "1": Video mode emulation is enabled. * - * By default video mode emulation is enabled. + * By default video mode emulation is enabled. */ #define SDL_HINT_VIDEO_WAYLAND_MODE_EMULATION "SDL_VIDEO_WAYLAND_MODE_EMULATION" /** - * \brief Enable or disable mouse pointer warp emulation, needed by some older games. + * Enable or disable mouse pointer warp emulation, needed by some older games. + * + * When this hint is set, any SDL will emulate mouse warps using relative + * mouse mode. This is required for some older games (such as Source engine + * games), which warp the mouse to the centre of the screen rather than using + * relative mouse motion. Note that relative mouse mode may have different + * mouse acceleration behaviour than pointer warps. * - * When this hint is set, any SDL will emulate mouse warps using relative mouse mode. - * This is required for some older games (such as Source engine games), which warp the - * mouse to the centre of the screen rather than using relative mouse motion. Note that - * relative mouse mode may have different mouse acceleration behaviour than pointer warps. + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - All mouse warps fail, as mouse warping is not available under wayland. - * "1" - Some mouse warps will be emulated by forcing relative mouse mode. + * - "0": All mouse warps fail, as mouse warping is not available under + * wayland. + * - "1": Some mouse warps will be emulated by forcing relative mouse mode. * - * If not set, this is automatically enabled unless an application uses relative mouse - * mode directly. + * If not set, this is automatically enabled unless an application uses + * relative mouse mode directly. */ #define SDL_HINT_VIDEO_WAYLAND_EMULATE_MOUSE_WARP "SDL_VIDEO_WAYLAND_EMULATE_MOUSE_WARP" /** -* \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p"). -* -* If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has -* SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly -* created SDL_Window: -* -* 1. Its pixel format will be set to the same pixel format as this SDL_Window. This is -* needed for example when sharing an OpenGL context across multiple windows. -* -* 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for -* OpenGL rendering. -* -* This variable can be set to the following values: -* The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should -* share a pixel format with. -*/ + * A variable that is the address of another SDL_Window* (as a hex string + * formatted with "%p"). + * + * If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is + * set to has SDL_WINDOW_OPENGL set (and running on WGL only, currently), then + * two things will occur on the newly created SDL_Window: + * + * 1. Its pixel format will be set to the same pixel format as this + * SDL_Window. This is needed for example when sharing an OpenGL context + * across multiple windows. + * + * 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be + * used for OpenGL rendering. + * + * This variable can be set to the following values: The address (as a string + * "%p") of the SDL_Window* that new windows created with + * SDL_CreateWindowFrom() should share a pixel format with. + */ #define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT" /** - * \brief When calling SDL_CreateWindowFrom(), make the window compatible with OpenGL. + * When calling SDL_CreateWindowFrom(), make the window compatible with + * OpenGL. * * This variable can be set to the following values: - * "0" - Don't add any graphics flags to the SDL_WindowFlags - * "1" - Add SDL_WINDOW_OPENGL to the SDL_WindowFlags + * + * - "0": Don't add any graphics flags to the SDL_WindowFlags + * - "1": Add SDL_WINDOW_OPENGL to the SDL_WindowFlags * * By default SDL will not make the foreign window compatible with OpenGL. */ #define SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL "SDL_VIDEO_FOREIGN_WINDOW_OPENGL" /** - * \brief When calling SDL_CreateWindowFrom(), make the window compatible with Vulkan. + * When calling SDL_CreateWindowFrom(), make the window compatible with + * Vulkan. * * This variable can be set to the following values: - * "0" - Don't add any graphics flags to the SDL_WindowFlags - * "1" - Add SDL_WINDOW_VULKAN to the SDL_WindowFlags + * + * - "0": Don't add any graphics flags to the SDL_WindowFlags + * - "1": Add SDL_WINDOW_VULKAN to the SDL_WindowFlags * * By default SDL will not make the foreign window compatible with Vulkan. */ #define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN "SDL_VIDEO_FOREIGN_WINDOW_VULKAN" /** -* \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries -* -* SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It -* can use two different sets of binaries, those compiled by the user from source -* or those provided by the Chrome browser. In the later case, these binaries require -* that SDL loads a DLL providing the shader compiler. -* -* This variable can be set to the following values: -* "d3dcompiler_46.dll" - default, best for Vista or later. -* "d3dcompiler_43.dll" - for XP support. -* "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries. -* -*/ + * A variable specifying which shader compiler to preload when using the + * Chrome ANGLE binaries + * + * SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It can + * use two different sets of binaries, those compiled by the user from source + * or those provided by the Chrome browser. In the later case, these binaries + * require that SDL loads a DLL providing the shader compiler. + * + * This variable can be set to the following values: + * + * - "d3dcompiler_46.dll: default, best for Vista or later. + * - "d3dcompiler_43.dll: for XP support. + * - "none": do not load any library, useful if you compiled ANGLE from source + * and included the compiler in your binaries. + */ #define SDL_HINT_VIDEO_WIN_D3DCOMPILER "SDL_VIDEO_WIN_D3DCOMPILER" /** - * \brief A variable controlling whether X11 should use GLX or EGL by default + * A variable controlling whether X11 should use GLX or EGL by default * * This variable can be set to the following values: - * "0" - Use GLX - * "1" - Use EGL + * + * - "0": Use GLX + * - "1": Use EGL * * By default SDL will use GLX when both are present. */ #define SDL_HINT_VIDEO_X11_FORCE_EGL "SDL_VIDEO_X11_FORCE_EGL" /** - * \brief A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be used. + * A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint + * should be used. * * This variable can be set to the following values: - * "0" - Disable _NET_WM_BYPASS_COMPOSITOR - * "1" - Enable _NET_WM_BYPASS_COMPOSITOR * - * By default SDL will use _NET_WM_BYPASS_COMPOSITOR + * - "0": Disable _NET_WM_BYPASS_COMPOSITOR + * - "1": Enable _NET_WM_BYPASS_COMPOSITOR * + * By default SDL will use _NET_WM_BYPASS_COMPOSITOR */ #define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR" /** - * \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported. + * A variable controlling whether the X11 _NET_WM_PING protocol should be + * supported. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Disable _NET_WM_PING - * "1" - Enable _NET_WM_PING + * - "0": Disable _NET_WM_PING + * - "1": Enable _NET_WM_PING * - * By default SDL will use _NET_WM_PING, but for applications that know they - * will not always be able to respond to ping requests in a timely manner they can - * turn it off to avoid the window manager thinking the app is hung. - * The hint is checked in CreateWindow. + * By default SDL will use _NET_WM_PING, but for applications that know they + * will not always be able to respond to ping requests in a timely manner they + * can turn it off to avoid the window manager thinking the app is hung. The + * hint is checked in CreateWindow. */ #define SDL_HINT_VIDEO_X11_NET_WM_PING "SDL_VIDEO_X11_NET_WM_PING" /** - * \brief A variable forcing the visual ID chosen for new X11 windows - * + * A variable forcing the visual ID chosen for new X11 windows */ #define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID" /** - * \brief A no-longer-used variable controlling whether the X11 Xinerama extension should be used. + * A no-longer-used variable controlling whether the X11 Xinerama extension + * should be used. * - * Before SDL 2.0.24, this would let apps and users disable Xinerama support on X11. - * Now SDL never uses Xinerama, and does not check for this hint at all. - * The preprocessor define is left here for source compatibility. + * Before SDL 2.0.24, this would let apps and users disable Xinerama support + * on X11. Now SDL never uses Xinerama, and does not check for this hint at + * all. The preprocessor define is left here for source compatibility. */ #define SDL_HINT_VIDEO_X11_XINERAMA "SDL_VIDEO_X11_XINERAMA" /** - * \brief A variable controlling whether the X11 XRandR extension should be used. + * A variable controlling whether the X11 XRandR extension should be used. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Disable XRandR - * "1" - Enable XRandR + * - "0": Disable XRandR + * - "1": Enable XRandR * - * By default SDL will use XRandR. + * By default SDL will use XRandR. */ #define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR" /** - * \brief A no-longer-used variable controlling whether the X11 VidMode extension should be used. + * A no-longer-used variable controlling whether the X11 VidMode extension + * should be used. * - * Before SDL 2.0.24, this would let apps and users disable XVidMode support on X11. - * Now SDL never uses XVidMode, and does not check for this hint at all. - * The preprocessor define is left here for source compatibility. + * Before SDL 2.0.24, this would let apps and users disable XVidMode support + * on X11. Now SDL never uses XVidMode, and does not check for this hint at + * all. The preprocessor define is left here for source compatibility. */ #define SDL_HINT_VIDEO_X11_XVIDMODE "SDL_VIDEO_X11_XVIDMODE" /** - * \brief Controls how the fact chunk affects the loading of a WAVE file. + * Controls how the fact chunk affects the loading of a WAVE file. * - * The fact chunk stores information about the number of samples of a WAVE - * file. The Standards Update from Microsoft notes that this value can be used - * to 'determine the length of the data in seconds'. This is especially useful - * for compressed formats (for which this is a mandatory chunk) if they produce - * multiple sample frames per block and truncating the block is not allowed. - * The fact chunk can exactly specify how many sample frames there should be - * in this case. + * The fact chunk stores information about the number of samples of a WAVE + * file. The Standards Update from Microsoft notes that this value can be used + * to 'determine the length of the data in seconds'. This is especially useful + * for compressed formats (for which this is a mandatory chunk) if they + * produce multiple sample frames per block and truncating the block is not + * allowed. The fact chunk can exactly specify how many sample frames there + * should be in this case. * - * Unfortunately, most application seem to ignore the fact chunk and so SDL - * ignores it by default as well. + * Unfortunately, most application seem to ignore the fact chunk and so SDL + * ignores it by default as well. * - * This variable can be set to the following values: + * This variable can be set to the following values: * - * "truncate" - Use the number of samples to truncate the wave data if - * the fact chunk is present and valid - * "strict" - Like "truncate", but raise an error if the fact chunk - * is invalid, not present for non-PCM formats, or if the - * data chunk doesn't have that many samples - * "ignorezero" - Like "truncate", but ignore fact chunk if the number of - * samples is zero - * "ignore" - Ignore fact chunk entirely (default) + * - "truncate": Use the number of samples to truncate the wave data if the + * fact chunk is present and valid + * - "strict": Like "truncate", but raise an error if the fact chunk is + * invalid, not present for non-PCM formats, or if the data chunk doesn't + * have that many samples + * - "ignorezero": Like "truncate", but ignore fact chunk if the number of + * samples is zero + * - "ignore": Ignore fact chunk entirely (default) */ #define SDL_HINT_WAVE_FACT_CHUNK "SDL_WAVE_FACT_CHUNK" /** - * \brief Controls how the size of the RIFF chunk affects the loading of a WAVE file. + * Controls how the size of the RIFF chunk affects the loading of a WAVE file. * - * The size of the RIFF chunk (which includes all the sub-chunks of the WAVE - * file) is not always reliable. In case the size is wrong, it's possible to - * just ignore it and step through the chunks until a fixed limit is reached. + * The size of the RIFF chunk (which includes all the sub-chunks of the WAVE + * file) is not always reliable. In case the size is wrong, it's possible to + * just ignore it and step through the chunks until a fixed limit is reached. * - * Note that files that have trailing data unrelated to the WAVE file or - * corrupt files may slow down the loading process without a reliable boundary. - * By default, SDL stops after 10000 chunks to prevent wasting time. Use the - * environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value. + * Note that files that have trailing data unrelated to the WAVE file or + * corrupt files may slow down the loading process without a reliable + * boundary. By default, SDL stops after 10000 chunks to prevent wasting time. + * Use the environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value. * - * This variable can be set to the following values: + * This variable can be set to the following values: * - * "force" - Always use the RIFF chunk size as a boundary for the chunk search - * "ignorezero" - Like "force", but a zero size searches up to 4 GiB (default) - * "ignore" - Ignore the RIFF chunk size and always search up to 4 GiB - * "maximum" - Search for chunks until the end of file (not recommended) + * - "force": Always use the RIFF chunk size as a boundary for the chunk + * search + * - "ignorezero": Like "force", but a zero size searches up to 4 GiB + * (default) + * - "ignore": Ignore the RIFF chunk size and always search up to 4 GiB + * - "maximum": Search for chunks until the end of file (not recommended) */ #define SDL_HINT_WAVE_RIFF_CHUNK_SIZE "SDL_WAVE_RIFF_CHUNK_SIZE" /** - * \brief Controls how a truncated WAVE file is handled. + * Controls how a truncated WAVE file is handled. * - * A WAVE file is considered truncated if any of the chunks are incomplete or - * the data chunk size is not a multiple of the block size. By default, SDL - * decodes until the first incomplete block, as most applications seem to do. + * A WAVE file is considered truncated if any of the chunks are incomplete or + * the data chunk size is not a multiple of the block size. By default, SDL + * decodes until the first incomplete block, as most applications seem to do. * - * This variable can be set to the following values: + * This variable can be set to the following values: * - * "verystrict" - Raise an error if the file is truncated - * "strict" - Like "verystrict", but the size of the RIFF chunk is ignored - * "dropframe" - Decode until the first incomplete sample frame - * "dropblock" - Decode until the first incomplete block (default) + * - "verystrict": Raise an error if the file is truncated + * - "strict": Like "verystrict", but the size of the RIFF chunk is ignored + * - "dropframe": Decode until the first incomplete sample frame + * - "dropblock": Decode until the first incomplete block (default) */ #define SDL_HINT_WAVE_TRUNCATION "SDL_WAVE_TRUNCATION" /** - * \brief Tell SDL not to name threads on Windows with the 0x406D1388 Exception. - * The 0x406D1388 Exception is a trick used to inform Visual Studio of a - * thread's name, but it tends to cause problems with other debuggers, - * and the .NET runtime. Note that SDL 2.0.6 and later will still use - * the (safer) SetThreadDescription API, introduced in the Windows 10 - * Creators Update, if available. + * Tell SDL not to name threads on Windows with the 0x406D1388 Exception. + * + * The 0x406D1388 Exception is a trick used to inform Visual Studio of a + * thread's name, but it tends to cause problems with other debuggers, and the + * .NET runtime. Note that SDL 2.0.6 and later will still use the (safer) + * SetThreadDescription API, introduced in the Windows 10 Creators Update, if + * available. * * The variable can be set to the following values: - * "0" - SDL will raise the 0x406D1388 Exception to name threads. - * This is the default behavior of SDL <= 2.0.4. - * "1" - SDL will not raise this exception, and threads will be unnamed. (default) - * This is necessary with .NET languages or debuggers that aren't Visual Studio. + * + * - "0": SDL will raise the 0x406D1388 Exception to name threads. This is the + * default behavior of SDL <= 2.0.4. + * - "1": SDL will not raise this exception, and threads will be unnamed. + * (default) This is necessary with .NET languages or debuggers that aren't + * Visual Studio. */ #define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING" /** - * \brief Controls whether menus can be opened with their keyboard shortcut (Alt+mnemonic). + * Controls whether menus can be opened with their keyboard shortcut + * (Alt+mnemonic). * - * If the mnemonics are enabled, then menus can be opened by pressing the Alt - * key and the corresponding mnemonic (for example, Alt+F opens the File menu). - * However, in case an invalid mnemonic is pressed, Windows makes an audible - * beep to convey that nothing happened. This is true even if the window has - * no menu at all! + * If the mnemonics are enabled, then menus can be opened by pressing the Alt + * key and the corresponding mnemonic (for example, Alt+F opens the File + * menu). However, in case an invalid mnemonic is pressed, Windows makes an + * audible beep to convey that nothing happened. This is true even if the + * window has no menu at all! * - * Because most SDL applications don't have menus, and some want to use the Alt - * key for other purposes, SDL disables mnemonics (and the beeping) by default. + * Because most SDL applications don't have menus, and some want to use the + * Alt key for other purposes, SDL disables mnemonics (and the beeping) by + * default. * - * Note: This also affects keyboard events: with mnemonics enabled, when a - * menu is opened from the keyboard, you will not receive a KEYUP event for - * the mnemonic key, and *might* not receive one for Alt. + * Note: This also affects keyboard events: with mnemonics enabled, when a + * menu is opened from the keyboard, you will not receive a KEYUP event for + * the mnemonic key, and *might* not receive one for Alt. + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - Alt+mnemonic does nothing, no beeping. (default) - * "1" - Alt+mnemonic opens menus, invalid mnemonics produce a beep. + * - "0": Alt+mnemonic does nothing, no beeping. (default) + * - "1": Alt+mnemonic opens menus, invalid mnemonics produce a beep. */ #define SDL_HINT_WINDOWS_ENABLE_MENU_MNEMONICS "SDL_WINDOWS_ENABLE_MENU_MNEMONICS" /** - * \brief A variable controlling whether the windows message loop is processed by SDL + * A variable controlling whether the windows message loop is processed by SDL * - * This variable can be set to the following values: - * "0" - The window message loop is not run - * "1" - The window message loop is processed in SDL_PumpEvents() + * This variable can be set to the following values: + * + * - "0": The window message loop is not run + * - "1": The window message loop is processed in SDL_PumpEvents() * - * By default SDL will process the windows message loop + * By default SDL will process the windows message loop */ #define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP" /** - * \brief Force SDL to use Critical Sections for mutexes on Windows. - * On Windows 7 and newer, Slim Reader/Writer Locks are available. - * They offer better performance, allocate no kernel ressources and - * use less memory. SDL will fall back to Critical Sections on older - * OS versions or if forced to by this hint. + * Force SDL to use Critical Sections for mutexes on Windows. + * + * On Windows 7 and newer, Slim Reader/Writer Locks are available. They offer + * better performance, allocate no kernel resources and use less memory. SDL + * will fall back to Critical Sections on older OS versions or if forced to by + * this hint. * - * This variable can be set to the following values: - * "0" - Use SRW Locks when available. If not, fall back to Critical Sections. (default) - * "1" - Force the use of Critical Sections in all cases. + * This variable can be set to the following values: * + * - "0": Use SRW Locks when available. If not, fall back to Critical + * Sections. (default) + * - "1": Force the use of Critical Sections in all cases. */ #define SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS "SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS" /** - * \brief Force SDL to use Kernel Semaphores on Windows. - * Kernel Semaphores are inter-process and require a context - * switch on every interaction. On Windows 8 and newer, the - * WaitOnAddress API is available. Using that and atomics to - * implement semaphores increases performance. - * SDL will fall back to Kernel Objects on older OS versions - * or if forced to by this hint. + * Force SDL to use Kernel Semaphores on Windows. + * + * Kernel Semaphores are inter-process and require a context switch on every + * interaction. On Windows 8 and newer, the WaitOnAddress API is available. + * Using that and atomics to implement semaphores increases performance. SDL + * will fall back to Kernel Objects on older OS versions or if forced to by + * this hint. * - * This variable can be set to the following values: - * "0" - Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel Objects. (default) - * "1" - Force the use of Kernel Objects in all cases. + * This variable can be set to the following values: * + * - "0": Use Atomics and WaitOnAddress API when available. If not, fall back + * to Kernel Objects. (default) + * - "1": Force the use of Kernel Objects in all cases. */ #define SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL "SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL" /** - * \brief A variable to specify custom icon resource id from RC file on Windows platform + * A variable to specify custom icon resource id from RC file on Windows + * platform */ #define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON" + +/** + * A variable to specify custom icon resource id from RC file on Windows + * platform + */ #define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL" /** - * \brief Tell SDL not to generate window-close events for Alt+F4 on Windows. + * Tell SDL not to generate window-close events for Alt+F4 on Windows. * * The variable can be set to the following values: - * "0" - SDL will generate a window-close event when it sees Alt+F4. - * "1" - SDL will only do normal key handling for Alt+F4. + * + * - "0": SDL will generate a window-close event when it sees Alt+F4. + * - "1": SDL will only do normal key handling for Alt+F4. */ #define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4" /** - * \brief Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9. - * Direct3D 9Ex contains changes to state management that can eliminate device - * loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require - * some changes to your application to cope with the new behavior, so this - * is disabled by default. + * Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9. + * + * Direct3D 9Ex contains changes to state management that can eliminate device + * loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may + * require some changes to your application to cope with the new behavior, so + * this is disabled by default. * - * This hint must be set before initializing the video subsystem. + * This hint must be set before initializing the video subsystem. * - * For more information on Direct3D 9Ex, see: - * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex - * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements + * For more information on Direct3D 9Ex, see: - + * https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex + * - + * https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements * - * This variable can be set to the following values: - * "0" - Use the original Direct3D 9 API (default) - * "1" - Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is unavailable) + * This variable can be set to the following values: * + * - "0": Use the original Direct3D 9 API (default) + * - "1": Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex + * is unavailable) */ #define SDL_HINT_WINDOWS_USE_D3D9EX "SDL_WINDOWS_USE_D3D9EX" /** - * \brief Controls whether SDL will declare the process to be DPI aware. + * Controls whether SDL will declare the process to be DPI aware. + * + * This hint must be set before initializing the video subsystem. * - * This hint must be set before initializing the video subsystem. + * The main purpose of declaring DPI awareness is to disable OS bitmap scaling + * of SDL windows on monitors with a DPI scale factor. * - * The main purpose of declaring DPI awareness is to disable OS bitmap scaling of SDL windows on monitors with - * a DPI scale factor. + * This hint is equivalent to requesting DPI awareness via external means + * (e.g. calling SetProcessDpiAwarenessContext) and does not cause SDL to use + * a virtualized coordinate system, so it will generally give you 1 SDL + * coordinate = 1 pixel even on high-DPI displays. * - * This hint is equivalent to requesting DPI awareness via external means (e.g. calling SetProcessDpiAwarenessContext) - * and does not cause SDL to use a virtualized coordinate system, so it will generally give you 1 SDL coordinate = 1 pixel - * even on high-DPI displays. + * For more information, see: + * https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows * - * For more information, see: - * https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "" - Do not change the DPI awareness (default). - * "unaware" - Declare the process as DPI unaware. (Windows 8.1 and later). - * "system" - Request system DPI awareness. (Vista and later). - * "permonitor" - Request per-monitor DPI awareness. (Windows 8.1 and later). - * "permonitorv2" - Request per-monitor V2 DPI awareness. (Windows 10, version 1607 and later). - * The most visible difference from "permonitor" is that window title bar will be scaled - * to the visually correct size when dragging between monitors with different scale factors. - * This is the preferred DPI awareness level. + * - "": Do not change the DPI awareness (default). + * - "unaware": Declare the process as DPI unaware. (Windows 8.1 and later). + * - "system": Request system DPI awareness. (Vista and later). + * - "permonitor": Request per-monitor DPI awareness. (Windows 8.1 and later). + * - "permonitorv2": Request per-monitor V2 DPI awareness. (Windows 10, + * version 1607 and later). The most visible difference from "permonitor" is + * that window title bar will be scaled to the visually correct size when + * dragging between monitors with different scale factors. This is the + * preferred DPI awareness level. * - * If the requested DPI awareness is not available on the currently running OS, SDL will try to request the best - * available match. + * If the requested DPI awareness is not available on the currently running + * OS, SDL will try to request the best available match. */ #define SDL_HINT_WINDOWS_DPI_AWARENESS "SDL_WINDOWS_DPI_AWARENESS" /** - * \brief Uses DPI-scaled points as the SDL coordinate system on Windows. + * Uses DPI-scaled points as the SDL coordinate system on Windows. * - * This changes the SDL coordinate system units to be DPI-scaled points, rather than pixels everywhere. - * This means windows will be appropriately sized, even when created on high-DPI displays with scaling. + * This changes the SDL coordinate system units to be DPI-scaled points, + * rather than pixels everywhere. This means windows will be appropriately + * sized, even when created on high-DPI displays with scaling. * - * e.g. requesting a 640x480 window from SDL, on a display with 125% scaling in Windows display settings, - * will create a window with an 800x600 client area (in pixels). + * e.g. requesting a 640x480 window from SDL, on a display with 125% scaling + * in Windows display settings, will create a window with an 800x600 client + * area (in pixels). * - * Setting this to "1" implicitly requests process DPI awareness (setting SDL_WINDOWS_DPI_AWARENESS is unnecessary), - * and forces SDL_WINDOW_ALLOW_HIGHDPI on all windows. + * Setting this to "1" implicitly requests process DPI awareness (setting + * SDL_WINDOWS_DPI_AWARENESS is unnecessary), and forces + * SDL_WINDOW_ALLOW_HIGHDPI on all windows. * - * This variable can be set to the following values: - * "0" - SDL coordinates equal Windows coordinates. No automatic window resizing when dragging - * between monitors with different scale factors (unless this is performed by - * Windows itself, which is the case when the process is DPI unaware). - * "1" - SDL coordinates are in DPI-scaled points. Automatically resize windows as needed on - * displays with non-100% scale factors. + * This variable can be set to the following values: + * + * - "0": SDL coordinates equal Windows coordinates. No automatic window + * resizing when dragging between monitors with different scale factors + * (unless this is performed by Windows itself, which is the case when the + * process is DPI unaware). + * - "1": SDL coordinates are in DPI-scaled points. Automatically resize + * windows as needed on displays with non-100% scale factors. */ #define SDL_HINT_WINDOWS_DPI_SCALING "SDL_WINDOWS_DPI_SCALING" /** - * \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden + * A variable controlling whether the window frame and title bar are + * interactive when the cursor is hidden + * + * This variable can be set to the following values: * - * This variable can be set to the following values: - * "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc) - * "1" - The window frame is interactive when the cursor is hidden + * - "0": The window frame is not interactive when the cursor is hidden (no + * move, resize, etc) + * - "1": The window frame is interactive when the cursor is hidden * - * By default SDL will allow interaction with the window frame when the cursor is hidden + * By default SDL will allow interaction with the window frame when the cursor + * is hidden */ #define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN" /** -* \brief A variable controlling whether the window is activated when the SDL_ShowWindow function is called -* -* This variable can be set to the following values: -* "0" - The window is activated when the SDL_ShowWindow function is called -* "1" - The window is not activated when the SDL_ShowWindow function is called -* -* By default SDL will activate the window when the SDL_ShowWindow function is called -*/ + * A variable controlling whether the window is activated when the + * SDL_ShowWindow function is called + * + * This variable can be set to the following values: + * + * - "0": The window is activated when the SDL_ShowWindow function is called + * - "1": The window is not activated when the SDL_ShowWindow function is + * called + * + * By default SDL will activate the window when the SDL_ShowWindow function is + * called + */ #define SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN "SDL_WINDOW_NO_ACTIVATION_WHEN_SHOWN" -/** \brief Allows back-button-press events on Windows Phone to be marked as handled +/** Allows back-button-press events on Windows Phone to be marked as handled * * Windows Phone devices typically feature a Back button. When pressed, * the OS will emit back-button-press events, which apps are expected to @@ -2446,11 +2838,12 @@ extern "C" { * * More details on back button behavior in Windows Phone apps can be found * at the following page, on Microsoft's developer site: + * * http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx */ #define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON" -/** \brief Label text for a WinRT app's privacy policy link +/** Label text for a WinRT app's privacy policy link * * Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT, * Microsoft mandates that this policy be available via the Windows Settings charm. @@ -2472,213 +2865,221 @@ extern "C" { #define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL" /** - * \brief A URL to a WinRT app's privacy policy + * A URL to a WinRT app's privacy policy * - * All network-enabled WinRT apps must make a privacy policy available to its - * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be - * be available in the Windows Settings charm, as accessed from within the app. - * SDL provides code to add a URL-based link there, which can point to the app's - * privacy policy. + * All network-enabled WinRT apps must make a privacy policy available to its + * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be be + * available in the Windows Settings charm, as accessed from within the app. + * SDL provides code to add a URL-based link there, which can point to the + * app's privacy policy. * - * To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL - * before calling any SDL_Init() functions. The contents of the hint should - * be a valid URL. For example, "http://www.example.com". + * To setup a URL to an app's privacy policy, set + * SDL_HINT_WINRT_PRIVACY_POLICY_URL before calling any SDL_Init() functions. + * The contents of the hint should be a valid URL. For example, + * "http://www.example.com". * - * The default value is "", which will prevent SDL from adding a privacy policy - * link to the Settings charm. This hint should only be set during app init. + * The default value is "", which will prevent SDL from adding a privacy + * policy link to the Settings charm. This hint should only be set during app + * init. * - * The label text of an app's "Privacy Policy" link may be customized via another - * hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. + * The label text of an app's "Privacy Policy" link may be customized via + * another hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. * - * Please note that on Windows Phone, Microsoft does not provide standard UI - * for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL - * will not get used on that platform. Network-enabled phone apps should display - * their privacy policy through some other, in-app means. + * Please note that on Windows Phone, Microsoft does not provide standard UI + * for displaying a privacy policy link, and as such, + * SDL_HINT_WINRT_PRIVACY_POLICY_URL will not get used on that platform. + * Network-enabled phone apps should display their privacy policy through some + * other, in-app means. */ #define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL" /** - * \brief Mark X11 windows as override-redirect. + * Mark X11 windows as override-redirect. * - * If set, this _might_ increase framerate at the expense of the desktop - * not working as expected. Override-redirect windows aren't noticed by the - * window manager at all. + * If set, this _might_ increase framerate at the expense of the desktop not + * working as expected. Override-redirect windows aren't noticed by the window + * manager at all. * - * You should probably only use this for fullscreen windows, and you probably - * shouldn't even use it for that. But it's here if you want to try! + * You should probably only use this for fullscreen windows, and you probably + * shouldn't even use it for that. But it's here if you want to try! */ #define SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT "SDL_X11_FORCE_OVERRIDE_REDIRECT" /** - * \brief A variable that lets you disable the detection and use of Xinput gamepad devices + * A variable that lets you disable the detection and use of Xinput gamepad + * devices * - * The variable can be set to the following values: - * "0" - Disable XInput detection (only uses direct input) - * "1" - Enable XInput detection (the default) + * The variable can be set to the following values: + * + * - "0": Disable XInput detection (only uses direct input) + * - "1": Enable XInput detection (the default) */ #define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" - /** - * \brief A variable that lets you disable the detection and use of DirectInput gamepad devices - * - * The variable can be set to the following values: - * "0" - Disable DirectInput detection (only uses XInput) - * "1" - Enable DirectInput detection (the default) - */ +/** + * A variable that lets you disable the detection and use of DirectInput + * gamepad devices + * + * The variable can be set to the following values: + * + * - "0": Disable DirectInput detection (only uses XInput) + * - "1": Enable DirectInput detection (the default) + */ #define SDL_HINT_DIRECTINPUT_ENABLED "SDL_DIRECTINPUT_ENABLED" /** - * \brief A variable that causes SDL to use the old axis and button mapping for XInput devices. + * A variable that causes SDL to use the old axis and button mapping for + * XInput devices. * - * This hint is for backwards compatibility only and will be removed in SDL 2.1 + * This hint is for backwards compatibility only and will be removed in SDL + * 2.1 * - * The default value is "0". This hint must be set before SDL_Init() + * The default value is "0". This hint must be set before SDL_Init() */ #define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING" /** - * \brief A variable that causes SDL to not ignore audio "monitors" + * A variable that causes SDL to not ignore audio "monitors" * - * This is currently only used for PulseAudio and ignored elsewhere. + * This is currently only used for PulseAudio and ignored elsewhere. * - * By default, SDL ignores audio devices that aren't associated with physical - * hardware. Changing this hint to "1" will expose anything SDL sees that - * appears to be an audio source or sink. This will add "devices" to the list - * that the user probably doesn't want or need, but it can be useful in - * scenarios where you want to hook up SDL to some sort of virtual device, - * etc. + * By default, SDL ignores audio devices that aren't associated with physical + * hardware. Changing this hint to "1" will expose anything SDL sees that + * appears to be an audio source or sink. This will add "devices" to the list + * that the user probably doesn't want or need, but it can be useful in + * scenarios where you want to hook up SDL to some sort of virtual device, + * etc. * - * The default value is "0". This hint must be set before SDL_Init(). + * The default value is "0". This hint must be set before SDL_Init(). * - * This hint is available since SDL 2.0.16. Before then, virtual devices are - * always ignored. + * This hint is available since SDL 2.0.16. Before then, virtual devices are + * always ignored. */ #define SDL_HINT_AUDIO_INCLUDE_MONITORS "SDL_AUDIO_INCLUDE_MONITORS" /** - * \brief A variable that forces X11 windows to create as a custom type. + * A variable that forces X11 windows to create as a custom type. * - * This is currently only used for X11 and ignored elsewhere. + * This is currently only used for X11 and ignored elsewhere. * - * During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property - * to report to the window manager the type of window it wants to create. - * This might be set to various things if SDL_WINDOW_TOOLTIP or - * SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that - * haven't set a specific type, this hint can be used to specify a custom - * type. For example, a dock window might set this to - * "_NET_WM_WINDOW_TYPE_DOCK". + * During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property to + * report to the window manager the type of window it wants to create. This + * might be set to various things if SDL_WINDOW_TOOLTIP or + * SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that + * haven't set a specific type, this hint can be used to specify a custom + * type. For example, a dock window might set this to + * "_NET_WM_WINDOW_TYPE_DOCK". * - * If not set or set to "", this hint is ignored. This hint must be set - * before the SDL_CreateWindow() call that it is intended to affect. + * If not set or set to "", this hint is ignored. This hint must be set before + * the SDL_CreateWindow() call that it is intended to affect. * - * This hint is available since SDL 2.0.22. + * This hint is available since SDL 2.0.22. */ #define SDL_HINT_X11_WINDOW_TYPE "SDL_X11_WINDOW_TYPE" /** - * \brief A variable that decides whether to send SDL_QUIT when closing the final window. + * A variable that decides whether to send SDL_QUIT when closing the final + * window. * - * By default, SDL sends an SDL_QUIT event when there is only one window - * and it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most - * apps would also take the loss of this window as a signal to terminate the - * program. + * By default, SDL sends an SDL_QUIT event when there is only one window and + * it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most apps + * would also take the loss of this window as a signal to terminate the + * program. * - * However, it's not unreasonable in some cases to have the program continue - * to live on, perhaps to create new windows later. + * However, it's not unreasonable in some cases to have the program continue + * to live on, perhaps to create new windows later. * - * Changing this hint to "0" will cause SDL to not send an SDL_QUIT event - * when the final window is requesting to close. Note that in this case, - * there are still other legitimate reasons one might get an SDL_QUIT - * event: choosing "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c) - * on Unix, etc. + * Changing this hint to "0" will cause SDL to not send an SDL_QUIT event when + * the final window is requesting to close. Note that in this case, there are + * still other legitimate reasons one might get an SDL_QUIT event: choosing + * "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c) on Unix, etc. * - * The default value is "1". This hint can be changed at any time. + * The default value is "1". This hint can be changed at any time. * - * This hint is available since SDL 2.0.22. Before then, you always get - * an SDL_QUIT event when closing the final window. + * This hint is available since SDL 2.0.22. Before then, you always get an + * SDL_QUIT event when closing the final window. */ #define SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE "SDL_QUIT_ON_LAST_WINDOW_CLOSE" /** - * \brief A variable that decides what video backend to use. + * A variable that decides what video backend to use. * - * By default, SDL will try all available video backends in a reasonable - * order until it finds one that can work, but this hint allows the app - * or user to force a specific target, such as "x11" if, say, you are - * on Wayland but want to try talking to the X server instead. + * By default, SDL will try all available video backends in a reasonable order + * until it finds one that can work, but this hint allows the app or user to + * force a specific target, such as "x11" if, say, you are on Wayland but want + * to try talking to the X server instead. * - * This functionality has existed since SDL 2.0.0 (indeed, before that) - * but before 2.0.22 this was an environment variable only. In 2.0.22, - * it was upgraded to a full SDL hint, so you can set the environment - * variable as usual or programatically set the hint with SDL_SetHint, - * which won't propagate to child processes. + * This functionality has existed since SDL 2.0.0 (indeed, before that) but + * before 2.0.22 this was an environment variable only. In 2.0.22, it was + * upgraded to a full SDL hint, so you can set the environment variable as + * usual or programatically set the hint with SDL_SetHint, which won't + * propagate to child processes. * - * The default value is unset, in which case SDL will try to figure out - * the best video backend on your behalf. This hint needs to be set - * before SDL_Init() is called to be useful. + * The default value is unset, in which case SDL will try to figure out the + * best video backend on your behalf. This hint needs to be set before + * SDL_Init() is called to be useful. * - * This hint is available since SDL 2.0.22. Before then, you could set - * the environment variable to get the same effect. + * This hint is available since SDL 2.0.22. Before then, you could set the + * environment variable to get the same effect. */ #define SDL_HINT_VIDEODRIVER "SDL_VIDEODRIVER" /** - * \brief A variable that decides what audio backend to use. + * A variable that decides what audio backend to use. * - * By default, SDL will try all available audio backends in a reasonable - * order until it finds one that can work, but this hint allows the app - * or user to force a specific target, such as "alsa" if, say, you are - * on PulseAudio but want to try talking to the lower level instead. + * By default, SDL will try all available audio backends in a reasonable order + * until it finds one that can work, but this hint allows the app or user to + * force a specific target, such as "alsa" if, say, you are on PulseAudio but + * want to try talking to the lower level instead. * - * This functionality has existed since SDL 2.0.0 (indeed, before that) - * but before 2.0.22 this was an environment variable only. In 2.0.22, - * it was upgraded to a full SDL hint, so you can set the environment - * variable as usual or programatically set the hint with SDL_SetHint, - * which won't propagate to child processes. + * This functionality has existed since SDL 2.0.0 (indeed, before that) but + * before 2.0.22 this was an environment variable only. In 2.0.22, it was + * upgraded to a full SDL hint, so you can set the environment variable as + * usual or programatically set the hint with SDL_SetHint, which won't + * propagate to child processes. * - * The default value is unset, in which case SDL will try to figure out - * the best audio backend on your behalf. This hint needs to be set - * before SDL_Init() is called to be useful. + * The default value is unset, in which case SDL will try to figure out the + * best audio backend on your behalf. This hint needs to be set before + * SDL_Init() is called to be useful. * - * This hint is available since SDL 2.0.22. Before then, you could set - * the environment variable to get the same effect. + * This hint is available since SDL 2.0.22. Before then, you could set the + * environment variable to get the same effect. */ #define SDL_HINT_AUDIODRIVER "SDL_AUDIODRIVER" /** - * \brief A variable that decides what KMSDRM device to use. + * A variable that decides what KMSDRM device to use. * - * Internally, SDL might open something like "/dev/dri/cardNN" to - * access KMSDRM functionality, where "NN" is a device index number. + * Internally, SDL might open something like "/dev/dri/cardNN" to access + * KMSDRM functionality, where "NN" is a device index number. * - * SDL makes a guess at the best index to use (usually zero), but the - * app or user can set this hint to a number between 0 and 99 to - * force selection. + * SDL makes a guess at the best index to use (usually zero), but the app or + * user can set this hint to a number between 0 and 99 to force selection. * - * This hint is available since SDL 2.24.0. + * This hint is available since SDL 2.24.0. */ #define SDL_HINT_KMSDRM_DEVICE_INDEX "SDL_KMSDRM_DEVICE_INDEX" /** - * \brief A variable that treats trackpads as touch devices. + * A variable that treats trackpads as touch devices. * - * On macOS (and possibly other platforms in the future), SDL will report - * touches on a trackpad as mouse input, which is generally what users - * expect from this device; however, these are often actually full - * multitouch-capable touch devices, so it might be preferable to some apps - * to treat them as such. + * On macOS (and possibly other platforms in the future), SDL will report + * touches on a trackpad as mouse input, which is generally what users expect + * from this device; however, these are often actually full multitouch-capable + * touch devices, so it might be preferable to some apps to treat them as + * such. * - * Setting this hint to true will make the trackpad input report as a - * multitouch device instead of a mouse. The default is false. + * Setting this hint to true will make the trackpad input report as a + * multitouch device instead of a mouse. The default is false. * - * Note that most platforms don't support this hint. As of 2.24.0, it - * only supports MacBooks' trackpads on macOS. Others may follow later. + * Note that most platforms don't support this hint. As of 2.24.0, it only + * supports MacBooks' trackpads on macOS. Others may follow later. * - * This hint is checked during SDL_Init and can not be changed after. + * This hint is checked during SDL_Init and can not be changed after. * - * This hint is available since SDL 2.24.0. + * This hint is available since SDL 2.24.0. */ #define SDL_HINT_TRACKPAD_IS_TOUCH_ONLY "SDL_TRACKPAD_IS_TOUCH_ONLY" @@ -2686,23 +3087,45 @@ extern "C" { * Cause SDL to call dbus_shutdown() on quit. * * This is useful as a debug tool to validate memory leaks, but shouldn't ever - * be set in production applications, as other libraries used by the application - * might use dbus under the hood and this cause cause crashes if they continue - * after SDL_Quit(). + * be set in production applications, as other libraries used by the + * application might use dbus under the hood and this cause cause crashes if + * they continue after SDL_Quit(). * * This variable can be set to the following values: - * "0" - SDL will not call dbus_shutdown() on quit (default) - * "1" - SDL will call dbus_shutdown() on quit + * + * - "0": SDL will not call dbus_shutdown() on quit (default) + * - "1": SDL will call dbus_shutdown() on quit * * This hint is available since SDL 2.30.0. */ #define SDL_HINT_SHUTDOWN_DBUS_ON_QUIT "SDL_SHUTDOWN_DBUS_ON_QUIT" +/** + * Specify if SDL_RWFromFile should use the resource dir on Apple platforms. + * + * SDL2 has always done this on Apple platforms, but it can be surprising to + * try opening a path to discover that SDL adjusts the path to elsewhere, so + * this hint allows that behavior to be disabled. + * + * If running from a App Bundle, this will be MyApp.app/Contents/Resources. If + * running as a normal Unix-like process, this will be the directory where the + * running binary lives. Setting this hint to 0 avoids this and just uses the + * requested path as-is. + * + * This variable can be set to the following values: + * + * - "0": SDL will not use the app resource directory. + * - "1": SDL will use the app's resource directory (default). + * + * This hint is available since SDL 2.32.0. + */ +#define SDL_HINT_APPLE_RWFROMFILE_USE_RESOURCES "SDL_APPLE_RWFROMFILE_USE_RESOURCES" + /** - * \brief An enumeration of hint priorities + * An enumeration of hint priorities */ -typedef enum +typedef enum SDL_HintPriority { SDL_HINT_DEFAULT, SDL_HINT_NORMAL, @@ -2717,9 +3140,9 @@ typedef enum * value. Hints will replace existing hints of their priority and lower. * Environment variables are considered to have override priority. * - * \param name the hint to set - * \param value the value of the hint variable - * \param priority the SDL_HintPriority level for the hint + * \param name the hint to set. + * \param value the value of the hint variable. + * \param priority the SDL_HintPriority level for the hint. * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. @@ -2738,8 +3161,8 @@ extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name, * variable that takes precedence. You can use SDL_SetHintWithPriority() to * set the hint with override priority instead. * - * \param name the hint to set - * \param value the value of the hint variable + * \param name the hint to set. + * \param value the value of the hint variable. * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. @@ -2757,7 +3180,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name, * the environment isn't set. Callbacks will be called normally with this * change. * - * \param name the hint to set + * \param name the hint to set. * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. * * \since This function is available since SDL 2.24.0. @@ -2785,7 +3208,7 @@ extern DECLSPEC void SDLCALL SDL_ResetHints(void); /** * Get the value of a hint. * - * \param name the hint to query + * \param name the hint to query. * \returns the string value of a hint or NULL if the hint isn't set. * * \since This function is available since SDL 2.0.0. @@ -2798,8 +3221,8 @@ extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name); /** * Get the boolean value of a hint variable. * - * \param name the name of the hint to get the boolean value from - * \param default_value the value to return if the hint does not exist + * \param name the name of the hint to get the boolean value from. + * \param default_value the value to return if the hint does not exist. * \returns the boolean value of a hint or the provided default value if the * hint does not exist. * @@ -2813,20 +3236,20 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GetHintBoolean(const char *name, SDL_bool d /** * Type definition of the hint callback function. * - * \param userdata what was passed as `userdata` to SDL_AddHintCallback() - * \param name what was passed as `name` to SDL_AddHintCallback() - * \param oldValue the previous hint value - * \param newValue the new value hint is to be set to + * \param userdata what was passed as `userdata` to SDL_AddHintCallback(). + * \param name what was passed as `name` to SDL_AddHintCallback(). + * \param oldValue the previous hint value. + * \param newValue the new value hint is to be set to. */ typedef void (SDLCALL *SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue); /** * Add a function to watch a particular hint. * - * \param name the hint to watch + * \param name the hint to watch. * \param callback An SDL_HintCallback function that will be called when the - * hint value changes - * \param userdata a pointer to pass to the callback function + * hint value changes. + * \param userdata a pointer to pass to the callback function. * * \since This function is available since SDL 2.0.0. * @@ -2839,10 +3262,10 @@ extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name, /** * Remove a function watching a particular hint. * - * \param name the hint being watched + * \param name the hint being watched. * \param callback An SDL_HintCallback function that will be called when the - * hint value changes - * \param userdata a pointer being passed to the callback function + * hint value changes. + * \param userdata a pointer being passed to the callback function. * * \since This function is available since SDL 2.0.0. * diff --git a/vs/sdl2/include/SDL_joystick.h b/vs/sdl2/include/SDL_joystick.h index 561e01099ce..668db5e30f6 100644 --- a/vs/sdl2/include/SDL_joystick.h +++ b/vs/sdl2/include/SDL_joystick.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,22 +20,26 @@ */ /** - * \file SDL_joystick.h + * # CategoryJoystick * - * Include file for SDL joystick event handling + * Include file for SDL joystick event handling * - * The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks(), with the exact joystick - * behind a device_index changing as joysticks are plugged and unplugged. + * The term "device_index" identifies currently plugged in joystick devices + * between 0 and SDL_NumJoysticks(), with the exact joystick behind a + * device_index changing as joysticks are plugged and unplugged. * - * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted - * then it will get a new instance_id, instance_id's are monotonically increasing identifiers of a joystick plugged in. + * The term "instance_id" is the current instantiation of a joystick device in + * the system, if the joystick is removed and then re-inserted then it will + * get a new instance_id, instance_id's are monotonically increasing + * identifiers of a joystick plugged in. * * The term "player_index" is the number assigned to a player on a specific - * controller. For XInput controllers this returns the XInput user index. - * Many joysticks will not be able to supply this information. + * controller. For XInput controllers this returns the XInput user index. Many + * joysticks will not be able to supply this information. * - * The term JoystickGUID is a stable 128-bit identifier for a joystick device that does not change over time, it identifies class of - * the device (a X360 wired controller for example). This identifier is platform dependent. + * The term JoystickGUID is a stable 128-bit identifier for a joystick device + * that does not change over time, it identifies class of the device (a X360 + * wired controller for example). This identifier is platform dependent. */ #ifndef SDL_joystick_h_ @@ -56,7 +60,7 @@ extern "C" { * \file SDL_joystick.h * * In order to use these functions, SDL_Init() must have been called - * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system + * with the SDL_INIT_JOYSTICK flag. This causes SDL to scan the system * for joysticks, and load appropriate drivers. * * If you would like to receive joystick updates while the application @@ -73,15 +77,21 @@ extern SDL_mutex *SDL_joystick_lock; struct _SDL_Joystick; typedef struct _SDL_Joystick SDL_Joystick; -/* A structure that encodes the stable unique id for a joystick device */ +/** + * A structure that encodes the stable unique id for a joystick device. + * + * This is just a standard SDL_GUID by a different name. + */ typedef SDL_GUID SDL_JoystickGUID; /** - * This is a unique ID for a joystick for the time it is connected to the system, - * and is never reused for the lifetime of the application. If the joystick is - * disconnected and reconnected, it will get a new ID. + * This is a unique ID for a joystick for the time it is connected to the + * system, and is never reused for the lifetime of the application. * - * The ID value starts at 0 and increments from there. The value -1 is an invalid ID. + * If the joystick is disconnected and reconnected, it will get a new ID. + * + * The ID value starts at 0 and increments from there. The value -1 is an + * invalid ID. */ typedef Sint32 SDL_JoystickID; @@ -172,7 +182,7 @@ extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); * This can be called before any joysticks are opened. * * \param device_index the index of the joystick to query (the N'th joystick - * on the system) + * on the system). * \returns the name of the selected joystick. If no name can be found, this * function returns NULL; call SDL_GetError() for more information. * @@ -189,7 +199,7 @@ extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); * This can be called before any joysticks are opened. * * \param device_index the index of the joystick to query (the N'th joystick - * on the system) + * on the system). * \returns the path of the selected joystick. If no path can be found, this * function returns NULL; call SDL_GetError() for more information. * @@ -215,9 +225,9 @@ extern DECLSPEC int SDLCALL SDL_JoystickGetDevicePlayerIndex(int device_index); * This function can be called before any joysticks are opened. * * \param device_index the index of the joystick to query (the N'th joystick - * on the system + * on the system. * \returns the GUID of the selected joystick. If called on an invalid index, - * this function returns a zero GUID + * this function returns a zero GUID. * * \since This function is available since SDL 2.0.0. * @@ -233,9 +243,9 @@ extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetDeviceGUID(int device_in * available this function returns 0. * * \param device_index the index of the joystick to query (the N'th joystick - * on the system + * on the system. * \returns the USB vendor ID of the selected joystick. If called on an - * invalid index, this function returns zero + * invalid index, this function returns zero. * * \since This function is available since SDL 2.0.6. */ @@ -248,9 +258,9 @@ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceVendor(int device_index); * available this function returns 0. * * \param device_index the index of the joystick to query (the N'th joystick - * on the system + * on the system. * \returns the USB product ID of the selected joystick. If called on an - * invalid index, this function returns zero + * invalid index, this function returns zero. * * \since This function is available since SDL 2.0.6. */ @@ -263,9 +273,9 @@ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProduct(int device_index); * isn't available this function returns 0. * * \param device_index the index of the joystick to query (the N'th joystick - * on the system + * on the system. * \returns the product version of the selected joystick. If called on an - * invalid index, this function returns zero + * invalid index, this function returns zero. * * \since This function is available since SDL 2.0.6. */ @@ -277,9 +287,9 @@ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProductVersion(int device_in * This can be called before any joysticks are opened. * * \param device_index the index of the joystick to query (the N'th joystick - * on the system + * on the system. * \returns the SDL_JoystickType of the selected joystick. If called on an - * invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN` + * invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN`. * * \since This function is available since SDL 2.0.6. */ @@ -291,7 +301,7 @@ extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetDeviceType(int device_in * This can be called before any joysticks are opened. * * \param device_index the index of the joystick to query (the N'th joystick - * on the system + * on the system. * \returns the instance id of the selected joystick. If called on an invalid * index, this function returns -1. * @@ -310,7 +320,7 @@ extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickGetDeviceInstanceID(int devic * The joystick subsystem must be initialized before a joystick can be opened * for use. * - * \param device_index the index of the joystick to query + * \param device_index the index of the joystick to query. * \returns a joystick identifier or NULL if an error occurred; call * SDL_GetError() for more information. * @@ -324,7 +334,7 @@ extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); /** * Get the SDL_Joystick associated with an instance id. * - * \param instance_id the instance id to get the SDL_Joystick for + * \param instance_id the instance id to get the SDL_Joystick for. * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() * for more information. * @@ -335,7 +345,7 @@ extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID /** * Get the SDL_Joystick associated with a player index. * - * \param player_index the player index to get the SDL_Joystick for + * \param player_index the player index to get the SDL_Joystick for. * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() * for more information. * @@ -358,8 +368,10 @@ extern DECLSPEC int SDLCALL SDL_JoystickAttachVirtual(SDL_JoystickType type, /** * The structure that defines an extended virtual joystick description * - * The caller must zero the structure and then initialize the version with `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` before passing it to SDL_JoystickAttachVirtualEx() - * All other elements of this structure are optional and can be left 0. + * The caller must zero the structure and then initialize the version with + * `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` before passing it to + * SDL_JoystickAttachVirtualEx() All other elements of this structure are + * optional and can be left 0. * * \sa SDL_JoystickAttachVirtualEx */ @@ -390,7 +402,7 @@ typedef struct SDL_VirtualJoystickDesc } SDL_VirtualJoystickDesc; /** - * \brief The current version of the SDL_VirtualJoystickDesc structure + * The current version of the SDL_VirtualJoystickDesc structure */ #define SDL_VIRTUAL_JOYSTICK_DESC_VERSION 1 @@ -407,7 +419,7 @@ extern DECLSPEC int SDLCALL SDL_JoystickAttachVirtualEx(const SDL_VirtualJoystic * Detach a virtual joystick. * * \param device_index a value previously returned from - * SDL_JoystickAttachVirtual() + * SDL_JoystickAttachVirtual(). * \returns 0 on success, or -1 if an error occurred. * * \since This function is available since SDL 2.0.14. @@ -485,7 +497,7 @@ extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualHat(SDL_Joystick *joystick, in /** * Get the implementation dependent name of a joystick. * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). * \returns the name of the selected joystick. If no name can be found, this * function returns NULL; call SDL_GetError() for more information. * @@ -499,7 +511,7 @@ extern DECLSPEC const char *SDLCALL SDL_JoystickName(SDL_Joystick *joystick); /** * Get the implementation dependent path of a joystick. * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). * \returns the path of the selected joystick. If no path can be found, this * function returns NULL; call SDL_GetError() for more information. * @@ -515,7 +527,7 @@ extern DECLSPEC const char *SDLCALL SDL_JoystickPath(SDL_Joystick *joystick); * For XInput controllers this returns the XInput user index. Many joysticks * will not be able to supply this information. * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). * \returns the player index, or -1 if it's not available. * * \since This function is available since SDL 2.0.9. @@ -525,7 +537,7 @@ extern DECLSPEC int SDLCALL SDL_JoystickGetPlayerIndex(SDL_Joystick *joystick); /** * Set the player index of an opened joystick. * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). * \param player_index Player index to assign to this joystick, or -1 to clear * the player index and turn off player LEDs. * @@ -538,7 +550,7 @@ extern DECLSPEC void SDLCALL SDL_JoystickSetPlayerIndex(SDL_Joystick *joystick, * * This function requires an open joystick. * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). * \returns the GUID of the given joystick. If called on an invalid index, * this function returns a zero GUID; call SDL_GetError() for more * information. @@ -555,7 +567,7 @@ extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick *joyst * * If the vendor ID isn't available this function returns 0. * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). * \returns the USB vendor ID of the selected joystick, or 0 if unavailable. * * \since This function is available since SDL 2.0.6. @@ -567,7 +579,7 @@ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetVendor(SDL_Joystick *joystick); * * If the product ID isn't available this function returns 0. * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). * \returns the USB product ID of the selected joystick, or 0 if unavailable. * * \since This function is available since SDL 2.0.6. @@ -579,7 +591,7 @@ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProduct(SDL_Joystick *joystick); * * If the product version isn't available this function returns 0. * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). * \returns the product version of the selected joystick, or 0 if unavailable. * * \since This function is available since SDL 2.0.6. @@ -591,7 +603,7 @@ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProductVersion(SDL_Joystick *joyst * * If the firmware version isn't available this function returns 0. * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). * \returns the firmware version of the selected joystick, or 0 if * unavailable. * @@ -604,7 +616,7 @@ extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetFirmwareVersion(SDL_Joystick *joys * * Returns the serial number of the joystick, or NULL if it is not available. * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). * \returns the serial number of the selected joystick, or NULL if * unavailable. * @@ -615,7 +627,7 @@ extern DECLSPEC const char * SDLCALL SDL_JoystickGetSerial(SDL_Joystick *joystic /** * Get the type of an opened joystick. * - * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). * \returns the SDL_JoystickType of the selected joystick. * * \since This function is available since SDL 2.0.6. @@ -627,9 +639,9 @@ extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetType(SDL_Joystick *joyst * * You should supply at least 33 bytes for pszGUID. * - * \param guid the SDL_JoystickGUID you wish to convert to string - * \param pszGUID buffer in which to write the ASCII string - * \param cbGUID the size of pszGUID + * \param guid the SDL_JoystickGUID you wish to convert to string. + * \param pszGUID buffer in which to write the ASCII string. + * \param cbGUID the size of pszGUID. * * \since This function is available since SDL 2.0.0. * @@ -646,7 +658,7 @@ extern DECLSPEC void SDLCALL SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, ch * an invalid GUID, the function will silently succeed, but the GUID generated * will not be useful. * - * \param pchGUID string containing an ASCII representation of a GUID + * \param pchGUID string containing an ASCII representation of a GUID. * \returns a SDL_JoystickGUID structure. * * \since This function is available since SDL 2.0.0. @@ -658,15 +670,15 @@ extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUIDFromString(const cha /** * Get the device information encoded in a SDL_JoystickGUID structure * - * \param guid the SDL_JoystickGUID you wish to get info about + * \param guid the SDL_JoystickGUID you wish to get info about. * \param vendor A pointer filled in with the device VID, or 0 if not - * available + * available. * \param product A pointer filled in with the device PID, or 0 if not - * available + * available. * \param version A pointer filled in with the device version, or 0 if not - * available + * available. * \param crc16 A pointer filled in with a CRC used to distinguish different - * products with the same VID/PID, or 0 if not available + * products with the same VID/PID, or 0 if not available. * * \since This function is available since SDL 2.26.0. * @@ -677,7 +689,7 @@ extern DECLSPEC void SDLCALL SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint /** * Get the status of a specified joystick. * - * \param joystick the joystick to query + * \param joystick the joystick to query. * \returns SDL_TRUE if the joystick has been opened, SDL_FALSE if it has not; * call SDL_GetError() for more information. * @@ -691,7 +703,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAttached(SDL_Joystick *joystick) /** * Get the instance ID of an opened joystick. * - * \param joystick an SDL_Joystick structure containing joystick information + * \param joystick an SDL_Joystick structure containing joystick information. * \returns the instance ID of the specified joystick on success or a negative * error code on failure; call SDL_GetError() for more information. * @@ -708,7 +720,7 @@ extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickInstanceID(SDL_Joystick *joys * separate buttons or a POV hat, and not axes, but all of this is up to the * device and platform. * - * \param joystick an SDL_Joystick structure containing joystick information + * \param joystick an SDL_Joystick structure containing joystick information. * \returns the number of axis controls/number of axes on success or a * negative error code on failure; call SDL_GetError() for more * information. @@ -728,7 +740,7 @@ extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick *joystick); * * Most joysticks do not have trackballs. * - * \param joystick an SDL_Joystick structure containing joystick information + * \param joystick an SDL_Joystick structure containing joystick information. * \returns the number of trackballs on success or a negative error code on * failure; call SDL_GetError() for more information. * @@ -741,7 +753,7 @@ extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick *joystick); /** * Get the number of POV hats on a joystick. * - * \param joystick an SDL_Joystick structure containing joystick information + * \param joystick an SDL_Joystick structure containing joystick information. * \returns the number of POV hats on success or a negative error code on * failure; call SDL_GetError() for more information. * @@ -755,7 +767,7 @@ extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick *joystick); /** * Get the number of buttons on a joystick. * - * \param joystick an SDL_Joystick structure containing joystick information + * \param joystick an SDL_Joystick structure containing joystick information. * \returns the number of buttons on success or a negative error code on * failure; call SDL_GetError() for more information. * @@ -790,12 +802,17 @@ extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); * **WARNING**: Calling this function may delete all events currently in SDL's * event queue. * - * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` - * \returns 1 if enabled, 0 if disabled, or a negative error code on failure; - * call SDL_GetError() for more information. + * While `param` is meant to be one of `SDL_QUERY`, `SDL_IGNORE`, or + * `SDL_ENABLE`, this function accepts any value, with any non-zero value that + * isn't `SDL_QUERY` being treated as `SDL_ENABLE`. + * + * If SDL was built with events disabled (extremely uncommon!), this will do + * nothing and always return `SDL_IGNORE`. * - * If `state` is `SDL_QUERY` then the current state is returned, - * otherwise the new processing state is returned. + * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE`. + * \returns If `state` is `SDL_QUERY` then the current state is returned, + * otherwise `state` is returned (even if it was not one of the + * allowed values). * * \since This function is available since SDL 2.0.0. * @@ -803,6 +820,7 @@ extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); */ extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); +/* Limits for joystick axes... */ #define SDL_JOYSTICK_AXIS_MAX 32767 #define SDL_JOYSTICK_AXIS_MIN -32768 @@ -819,8 +837,8 @@ extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); * 32767) representing the current position of the axis. It may be necessary * to impose certain tolerances on these values to account for jitter. * - * \param joystick an SDL_Joystick structure containing joystick information - * \param axis the axis to query; the axis indices start at index 0 + * \param joystick an SDL_Joystick structure containing joystick information. + * \param axis the axis to query; the axis indices start at index 0. * \returns a 16-bit signed integer representing the current position of the * axis or 0 on failure; call SDL_GetError() for more information. * @@ -838,8 +856,8 @@ extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick *joystick, * * The axis indices start at index 0. * - * \param joystick an SDL_Joystick structure containing joystick information - * \param axis the axis to query; the axis indices start at index 0 + * \param joystick an SDL_Joystick structure containing joystick information. + * \param axis the axis to query; the axis indices start at index 0. * \param state Upon return, the initial value is supplied here. * \return SDL_TRUE if this axis has any initial value, or SDL_FALSE if not. * @@ -878,8 +896,8 @@ extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAxisInitialState(SDL_Joystick *j * - `SDL_HAT_LEFTUP` * - `SDL_HAT_LEFTDOWN` * - * \param joystick an SDL_Joystick structure containing joystick information - * \param hat the hat index to get the state from; indices start at index 0 + * \param joystick an SDL_Joystick structure containing joystick information. + * \param hat the hat index to get the state from; indices start at index 0. * \returns the current hat position. * * \since This function is available since SDL 2.0.0. @@ -897,10 +915,10 @@ extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick *joystick, * * Most joysticks do not have trackballs. * - * \param joystick the SDL_Joystick to query - * \param ball the ball index to query; ball indices start at index 0 - * \param dx stores the difference in the x axis position since the last poll - * \param dy stores the difference in the y axis position since the last poll + * \param joystick the SDL_Joystick to query. + * \param ball the ball index to query; ball indices start at index 0. + * \param dx stores the difference in the x axis position since the last poll. + * \param dy stores the difference in the y axis position since the last poll. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -914,9 +932,9 @@ extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick *joystick, /** * Get the current state of a button on a joystick. * - * \param joystick an SDL_Joystick structure containing joystick information + * \param joystick an SDL_Joystick structure containing joystick information. * \param button the button index to get the state from; indices start at - * index 0 + * index 0. * \returns 1 if the specified button is pressed, 0 otherwise. * * \since This function is available since SDL 2.0.0. @@ -932,13 +950,13 @@ extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick *joystick, * Each call to this function cancels any previous rumble effect, and calling * it with 0 intensity stops any rumbling. * - * \param joystick The joystick to vibrate + * \param joystick The joystick to vibrate. * \param low_frequency_rumble The intensity of the low frequency (left) - * rumble motor, from 0 to 0xFFFF + * rumble motor, from 0 to 0xFFFF. * \param high_frequency_rumble The intensity of the high frequency (right) - * rumble motor, from 0 to 0xFFFF - * \param duration_ms The duration of the rumble effect, in milliseconds - * \returns 0, or -1 if rumble isn't supported on this joystick + * rumble motor, from 0 to 0xFFFF. + * \param duration_ms The duration of the rumble effect, in milliseconds. + * \returns 0, or -1 if rumble isn't supported on this joystick. * * \since This function is available since SDL 2.0.9. * @@ -957,13 +975,13 @@ extern DECLSPEC int SDLCALL SDL_JoystickRumble(SDL_Joystick *joystick, Uint16 lo * want the (more common) whole-controller rumble, use SDL_JoystickRumble() * instead. * - * \param joystick The joystick to vibrate + * \param joystick The joystick to vibrate. * \param left_rumble The intensity of the left trigger rumble motor, from 0 - * to 0xFFFF + * to 0xFFFF. * \param right_rumble The intensity of the right trigger rumble motor, from 0 - * to 0xFFFF - * \param duration_ms The duration of the rumble effect, in milliseconds - * \returns 0, or -1 if trigger rumble isn't supported on this joystick + * to 0xFFFF. + * \param duration_ms The duration of the rumble effect, in milliseconds. + * \returns 0, or -1 if trigger rumble isn't supported on this joystick. * * \since This function is available since SDL 2.0.14. * @@ -977,7 +995,7 @@ extern DECLSPEC int SDLCALL SDL_JoystickRumbleTriggers(SDL_Joystick *joystick, U * An example of a joystick LED is the light on the back of a PlayStation 4's * DualShock 4 controller. * - * \param joystick The joystick to query + * \param joystick The joystick to query. * \return SDL_TRUE if the joystick has a modifiable LED, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. @@ -987,7 +1005,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasLED(SDL_Joystick *joystick); /** * Query whether a joystick has rumble support. * - * \param joystick The joystick to query + * \param joystick The joystick to query. * \return SDL_TRUE if the joystick has rumble, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.18. @@ -999,7 +1017,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumble(SDL_Joystick *joystick); /** * Query whether a joystick has rumble support on triggers. * - * \param joystick The joystick to query + * \param joystick The joystick to query. * \return SDL_TRUE if the joystick has trigger rumble, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.18. @@ -1014,11 +1032,11 @@ extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumbleTriggers(SDL_Joystick *joy * An example of a joystick LED is the light on the back of a PlayStation 4's * DualShock 4 controller. * - * \param joystick The joystick to update - * \param red The intensity of the red LED - * \param green The intensity of the green LED - * \param blue The intensity of the blue LED - * \returns 0 on success, -1 if this joystick does not have a modifiable LED + * \param joystick The joystick to update. + * \param red The intensity of the red LED. + * \param green The intensity of the green LED. + * \param blue The intensity of the blue LED. + * \returns 0 on success, -1 if this joystick does not have a modifiable LED. * * \since This function is available since SDL 2.0.14. */ @@ -1027,10 +1045,11 @@ extern DECLSPEC int SDLCALL SDL_JoystickSetLED(SDL_Joystick *joystick, Uint8 red /** * Send a joystick specific effect packet * - * \param joystick The joystick to affect - * \param data The data to send to the joystick - * \param size The size of the data to send to the joystick - * \returns 0, or -1 if this joystick or driver doesn't support effect packets + * \param joystick The joystick to affect. + * \param data The data to send to the joystick. + * \param size The size of the data to send to the joystick. + * \returns 0, or -1 if this joystick or driver doesn't support effect + * packets. * * \since This function is available since SDL 2.0.16. */ @@ -1039,7 +1058,7 @@ extern DECLSPEC int SDLCALL SDL_JoystickSendEffect(SDL_Joystick *joystick, const /** * Close a joystick previously opened with SDL_JoystickOpen(). * - * \param joystick The joystick device to close + * \param joystick The joystick device to close. * * \since This function is available since SDL 2.0.0. * @@ -1050,9 +1069,9 @@ extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick *joystick); /** * Get the battery level of a joystick as SDL_JoystickPowerLevel. * - * \param joystick the SDL_Joystick to query + * \param joystick the SDL_Joystick to query. * \returns the current battery level as SDL_JoystickPowerLevel on success or - * `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown + * `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown. * * \since This function is available since SDL 2.0.4. */ diff --git a/vs/sdl2/include/SDL_keyboard.h b/vs/sdl2/include/SDL_keyboard.h index 9158d09ad28..e3b7916846a 100644 --- a/vs/sdl2/include/SDL_keyboard.h +++ b/vs/sdl2/include/SDL_keyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_keyboard.h + * # CategoryKeyboard * - * Include file for SDL keyboard event handling + * Include file for SDL keyboard event handling */ #ifndef SDL_keyboard_h_ @@ -40,15 +40,16 @@ extern "C" { #endif /** - * \brief The SDL keysym structure, used in key events. + * The SDL keysym structure, used in key events. * - * \note If you are looking for translated character input, see the ::SDL_TEXTINPUT event. + * If you are looking for translated character input, see the SDL_TEXTINPUT + * event. */ typedef struct SDL_Keysym { - SDL_Scancode scancode; /**< SDL physical key code - see ::SDL_Scancode for details */ - SDL_Keycode sym; /**< SDL virtual key code - see ::SDL_Keycode for details */ - Uint16 mod; /**< current key modifiers */ + SDL_Scancode scancode; /**< SDL physical key code - see SDL_Scancode for details */ + SDL_Keycode sym; /**< SDL virtual key code - see SDL_Keycode for details */ + Uint16 mod; /**< current key modifiers - see SDL_Keymod for details */ Uint32 unused; } SDL_Keysym; @@ -84,7 +85,7 @@ extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void); * Note: This function doesn't take into account whether shift has been * pressed or not. * - * \param numkeys if non-NULL, receives the length of the returned array + * \param numkeys if non-NULL, receives the length of the returned array. * \returns a pointer to an array of key states. * * \since This function is available since SDL 2.0.0. @@ -129,7 +130,7 @@ extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void); * This does not change the keyboard state, only the key modifier flags that * SDL reports. * - * \param modstate the desired SDL_Keymod for the keyboard + * \param modstate the desired SDL_Keymod for the keyboard. * * \since This function is available since SDL 2.0.0. * @@ -143,7 +144,7 @@ extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate); * * See SDL_Keycode for details. * - * \param scancode the desired SDL_Scancode to query + * \param scancode the desired SDL_Scancode to query. * \returns the SDL_Keycode that corresponds to the given SDL_Scancode. * * \since This function is available since SDL 2.0.0. @@ -159,7 +160,7 @@ extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode * * See SDL_Scancode for details. * - * \param key the desired SDL_Keycode to query + * \param key the desired SDL_Keycode to query. * \returns the SDL_Scancode that corresponds to the given SDL_Keycode. * * \since This function is available since SDL 2.0.0. @@ -183,7 +184,7 @@ extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key); * unsuitable for creating a stable cross-platform two-way mapping between * strings and scancodes. * - * \param scancode the desired SDL_Scancode to query + * \param scancode the desired SDL_Scancode to query. * \returns a pointer to the name for the scancode. If the scancode doesn't * have a name this function returns an empty string (""). * @@ -197,7 +198,7 @@ extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode); /** * Get a scancode from a human-readable name. * - * \param name the human-readable scancode name + * \param name the human-readable scancode name. * \returns the SDL_Scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't * recognized; call SDL_GetError() for more information. * @@ -209,13 +210,12 @@ extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode); */ extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name); extern DECLSPEC SDL_bool SDLCALL SDL_IM_Composition(int more); // Added for DOSBox-X - /** * Get a human-readable name for a key. * * See SDL_Scancode and SDL_Keycode for details. * - * \param key the desired SDL_Keycode to query + * \param key the desired SDL_Keycode to query. * \returns a pointer to a UTF-8 string that stays valid at least until the * next call to this function. If you need it around any longer, you * must copy it. If the key doesn't have a name, this function @@ -232,7 +232,7 @@ extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key); /** * Get a key code from a human-readable name. * - * \param name the human-readable key name + * \param name the human-readable key name. * \returns key code, or `SDLK_UNKNOWN` if the name wasn't recognized; call * SDL_GetError() for more information. * @@ -254,6 +254,10 @@ extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name); * * On some platforms using this function activates the screen keyboard. * + * On desktop platforms, SDL_StartTextInput() is implicitly called on SDL + * video subsystem initialization which will cause SDL_TextInputEvent and + * SDL_TextEditingEvent to begin emitting. + * * \since This function is available since SDL 2.0.0. * * \sa SDL_SetTextInputRect @@ -299,10 +303,11 @@ extern DECLSPEC void SDLCALL SDL_ClearComposition(void); extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputShown(void); /** - * Set the rectangle used to type Unicode text inputs. Native input methods - * will place a window with word suggestions near it, without covering the - * text being inputted. - * + * Set the rectangle used to type Unicode text inputs. + * + * Native input methods will place a window with word suggestions near it, + * without covering the text being inputted. + * * To start text input in a given location, this function is intended to be * called before SDL_StartTextInput, although some platforms support moving * the rectangle even while text input (and a composition) is active. @@ -312,7 +317,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputShown(void); * any feedback. * * \param rect the SDL_Rect structure representing the rectangle to receive - * text (ignored if NULL) + * text (ignored if NULL). * * \since This function is available since SDL 2.0.0. * @@ -336,7 +341,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void); /** * Check whether the screen keyboard is shown for given window. * - * \param window the window for which screen keyboard should be queried + * \param window the window for which screen keyboard should be queried. * \returns SDL_TRUE if screen keyboard is shown or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. diff --git a/vs/sdl2/include/SDL_keycode.h b/vs/sdl2/include/SDL_keycode.h index 57a71bd7969..eb1678e3861 100644 --- a/vs/sdl2/include/SDL_keycode.h +++ b/vs/sdl2/include/SDL_keycode.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_keycode.h + * # CategoryKeycode * - * Defines constants which identify keyboard keys and modifiers. + * Defines constants which identify keyboard keys and modifiers. */ #ifndef SDL_keycode_h_ @@ -32,22 +32,22 @@ #include "SDL_scancode.h" /** - * \brief The SDL virtual key representation. + * The SDL virtual key representation. * - * Values of this type are used to represent keyboard keys using the current - * layout of the keyboard. These values include Unicode values representing - * the unmodified character that would be generated by pressing the key, or - * an SDLK_* constant for those keys that do not generate characters. + * Values of this type are used to represent keyboard keys using the current + * layout of the keyboard. These values include Unicode values representing + * the unmodified character that would be generated by pressing the key, or an + * SDLK_* constant for those keys that do not generate characters. * - * A special exception is the number keys at the top of the keyboard which - * map to SDLK_0...SDLK_9 on AZERTY layouts. + * A special exception is the number keys at the top of the keyboard which map + * to SDLK_0...SDLK_9 on AZERTY layouts. */ typedef Sint32 SDL_Keycode; #define SDLK_SCANCODE_MASK (1<<30) #define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK) -typedef enum +typedef enum SDL_KeyCode { SDLK_UNKNOWN = 0, @@ -327,9 +327,9 @@ typedef enum } SDL_KeyCode; /** - * \brief Enumeration of valid key mods (possibly OR'd together). + * Enumeration of valid key mods (possibly OR'd together). */ -typedef enum +typedef enum SDL_Keymod { KMOD_NONE = 0x0000, KMOD_LSHIFT = 0x0001, diff --git a/vs/sdl2/include/SDL_loadso.h b/vs/sdl2/include/SDL_loadso.h index 4edc22e9e75..1763b528012 100644 --- a/vs/sdl2/include/SDL_loadso.h +++ b/vs/sdl2/include/SDL_loadso.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,23 +19,25 @@ 3. This notice may not be removed or altered from any source distribution. */ +/* WIKI CATEGORY: LoadSO */ + /** - * \file SDL_loadso.h - * - * System dependent library loading routines - * - * Some things to keep in mind: - * \li These functions only work on C function names. Other languages may - * have name mangling and intrinsic language support that varies from - * compiler to compiler. - * \li Make sure you declare your function pointers with the same calling - * convention as the actual library function. Your code will crash - * mysteriously if you do not do this. - * \li Avoid namespace collisions. If you load a symbol from the library, - * it is not defined whether or not it goes into the global symbol - * namespace for the application. If it does and it conflicts with - * symbols in your code or other shared libraries, you will not get - * the results you expect. :) + * # CategoryLoadSO + * + * System-dependent library loading routines. + * + * Some things to keep in mind: + * + * - These functions only work on C function names. Other languages may have + * name mangling and intrinsic language support that varies from compiler to + * compiler. + * - Make sure you declare your function pointers with the same calling + * convention as the actual library function. Your code will crash + * mysteriously if you do not do this. + * - Avoid namespace collisions. If you load a symbol from the library, it is + * not defined whether or not it goes into the global symbol namespace for + * the application. If it does and it conflicts with symbols in your code or + * other shared libraries, you will not get the results you expect. :) */ #ifndef SDL_loadso_h_ @@ -53,7 +55,7 @@ extern "C" { /** * Dynamically load a shared object. * - * \param sofile a system-dependent name of the object file + * \param sofile a system-dependent name of the object file. * \returns an opaque pointer to the object handle or NULL if there was an * error; call SDL_GetError() for more information. * @@ -79,8 +81,8 @@ extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile); * * If the requested function doesn't exist, NULL is returned. * - * \param handle a valid shared object handle returned by SDL_LoadObject() - * \param name the name of the function to look up + * \param handle a valid shared object handle returned by SDL_LoadObject(). + * \param name the name of the function to look up. * \returns a pointer to the function or NULL if there was an error; call * SDL_GetError() for more information. * @@ -95,7 +97,7 @@ extern DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, /** * Unload a shared object from memory. * - * \param handle a valid shared object handle returned by SDL_LoadObject() + * \param handle a valid shared object handle returned by SDL_LoadObject(). * * \since This function is available since SDL 2.0.0. * diff --git a/vs/sdl2/include/SDL_locale.h b/vs/sdl2/include/SDL_locale.h index 0b6118f0ef8..8126efc79a5 100644 --- a/vs/sdl2/include/SDL_locale.h +++ b/vs/sdl2/include/SDL_locale.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_locale.h + * # CategoryLocale * - * Include file for SDL locale services + * Include file for SDL locale services */ #ifndef _SDL_locale_h diff --git a/vs/sdl2/include/SDL_log.h b/vs/sdl2/include/SDL_log.h index bd030c6d2d5..75833ba3c37 100644 --- a/vs/sdl2/include/SDL_log.h +++ b/vs/sdl2/include/SDL_log.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,18 +20,19 @@ */ /** - * \file SDL_log.h + * # CategoryLog * - * Simple log messages with categories and priorities. + * Simple log messages with categories and priorities. * - * By default logs are quiet, but if you're debugging SDL you might want: + * By default logs are quiet, but if you're debugging SDL you might want: * - * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); + * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); * - * Here's where the messages go on different platforms: - * Windows: debug output stream - * Android: log output - * Others: standard error output (stderr) + * Here's where the messages go on different platforms: + * + * - Windows: debug output stream + * - Android: log output + * - Others: standard error output (stderr) */ #ifndef SDL_log_h_ @@ -47,21 +48,20 @@ extern "C" { /** - * \brief The maximum size of a log message prior to SDL 2.0.24 + * The maximum size of a log message prior to SDL 2.0.24 * - * As of 2.0.24 there is no limit to the length of SDL log messages. + * As of 2.0.24 there is no limit to the length of SDL log messages. */ #define SDL_MAX_LOG_MESSAGE 4096 /** - * \brief The predefined log categories + * The predefined log categories * - * By default the application category is enabled at the INFO level, - * the assert category is enabled at the WARN level, test is enabled - * at the VERBOSE level and all other categories are enabled at the - * ERROR level. + * By default the application category is enabled at the INFO level, the + * assert category is enabled at the WARN level, test is enabled at the + * VERBOSE level and all other categories are enabled at the ERROR level. */ -typedef enum +typedef enum SDL_LogCategory { SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_CATEGORY_ERROR, @@ -97,9 +97,9 @@ typedef enum } SDL_LogCategory; /** - * \brief The predefined log priorities + * The predefined log priorities */ -typedef enum +typedef enum SDL_LogPriority { SDL_LOG_PRIORITY_VERBOSE = 1, SDL_LOG_PRIORITY_DEBUG, @@ -114,7 +114,7 @@ typedef enum /** * Set the priority of all log categories. * - * \param priority the SDL_LogPriority to assign + * \param priority the SDL_LogPriority to assign. * * \since This function is available since SDL 2.0.0. * @@ -125,8 +125,8 @@ extern DECLSPEC void SDLCALL SDL_LogSetAllPriority(SDL_LogPriority priority); /** * Set the priority of a particular log category. * - * \param category the category to assign a priority to - * \param priority the SDL_LogPriority to assign + * \param category the category to assign a priority to. + * \param priority the SDL_LogPriority to assign. * * \since This function is available since SDL 2.0.0. * @@ -139,8 +139,8 @@ extern DECLSPEC void SDLCALL SDL_LogSetPriority(int category, /** * Get the priority of a particular log category. * - * \param category the category to query - * \returns the SDL_LogPriority for the requested category + * \param category the category to query. + * \returns the SDL_LogPriority for the requested category. * * \since This function is available since SDL 2.0.0. * @@ -166,7 +166,7 @@ extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void); * = * \param fmt a printf() style message format string * * \param ... additional parameters matching % tokens in the `fmt` string, if - * any + * any. * * \since This function is available since SDL 2.0.0. * @@ -184,10 +184,10 @@ extern DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, . /** * Log a message with SDL_LOG_PRIORITY_VERBOSE. * - * \param category the category of the message - * \param fmt a printf() style message format string + * \param category the category of the message. + * \param fmt a printf() style message format string. * \param ... additional parameters matching % tokens in the **fmt** string, - * if any + * if any. * * \since This function is available since SDL 2.0.0. * @@ -205,10 +205,10 @@ extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRI /** * Log a message with SDL_LOG_PRIORITY_DEBUG. * - * \param category the category of the message - * \param fmt a printf() style message format string + * \param category the category of the message. + * \param fmt a printf() style message format string. * \param ... additional parameters matching % tokens in the **fmt** string, - * if any + * if any. * * \since This function is available since SDL 2.0.0. * @@ -226,10 +226,10 @@ extern DECLSPEC void SDLCALL SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING /** * Log a message with SDL_LOG_PRIORITY_INFO. * - * \param category the category of the message - * \param fmt a printf() style message format string + * \param category the category of the message. + * \param fmt a printf() style message format string. * \param ... additional parameters matching % tokens in the **fmt** string, - * if any + * if any. * * \since This function is available since SDL 2.0.0. * @@ -247,10 +247,10 @@ extern DECLSPEC void SDLCALL SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING /** * Log a message with SDL_LOG_PRIORITY_WARN. * - * \param category the category of the message - * \param fmt a printf() style message format string + * \param category the category of the message. + * \param fmt a printf() style message format string. * \param ... additional parameters matching % tokens in the **fmt** string, - * if any + * if any. * * \since This function is available since SDL 2.0.0. * @@ -268,10 +268,10 @@ extern DECLSPEC void SDLCALL SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING /** * Log a message with SDL_LOG_PRIORITY_ERROR. * - * \param category the category of the message - * \param fmt a printf() style message format string + * \param category the category of the message. + * \param fmt a printf() style message format string. * \param ... additional parameters matching % tokens in the **fmt** string, - * if any + * if any. * * \since This function is available since SDL 2.0.0. * @@ -289,10 +289,10 @@ extern DECLSPEC void SDLCALL SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING /** * Log a message with SDL_LOG_PRIORITY_CRITICAL. * - * \param category the category of the message - * \param fmt a printf() style message format string + * \param category the category of the message. + * \param fmt a printf() style message format string. * \param ... additional parameters matching % tokens in the **fmt** string, - * if any + * if any. * * \since This function is available since SDL 2.0.0. * @@ -310,11 +310,11 @@ extern DECLSPEC void SDLCALL SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STR /** * Log a message with the specified category and priority. * - * \param category the category of the message - * \param priority the priority of the message - * \param fmt a printf() style message format string + * \param category the category of the message. + * \param priority the priority of the message. + * \param fmt a printf() style message format string. * \param ... additional parameters matching % tokens in the **fmt** string, - * if any + * if any. * * \since This function is available since SDL 2.0.0. * @@ -334,10 +334,10 @@ extern DECLSPEC void SDLCALL SDL_LogMessage(int category, /** * Log a message with the specified category and priority. * - * \param category the category of the message - * \param priority the priority of the message - * \param fmt a printf() style message format string - * \param ap a variable argument list + * \param category the category of the message. + * \param priority the priority of the message. + * \param fmt a printf() style message format string. + * \param ap a variable argument list. * * \since This function is available since SDL 2.0.0. * @@ -359,10 +359,11 @@ extern DECLSPEC void SDLCALL SDL_LogMessageV(int category, * * This function is called by SDL when there is new text to be logged. * - * \param userdata what was passed as `userdata` to SDL_LogSetOutputFunction() - * \param category the category of the message - * \param priority the priority of the message - * \param message the message being output + * \param userdata what was passed as `userdata` to + * SDL_LogSetOutputFunction(). + * \param category the category of the message. + * \param priority the priority of the message. + * \param message the message being output. */ typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message); @@ -370,9 +371,9 @@ typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_ * Get the current log output function. * * \param callback an SDL_LogOutputFunction filled in with the current log - * callback + * callback. * \param userdata a pointer filled in with the pointer that is passed to - * `callback` + * `callback`. * * \since This function is available since SDL 2.0.0. * @@ -383,8 +384,8 @@ extern DECLSPEC void SDLCALL SDL_LogGetOutputFunction(SDL_LogOutputFunction *cal /** * Replace the default log output function with one of your own. * - * \param callback an SDL_LogOutputFunction to call instead of the default - * \param userdata a pointer that is passed to `callback` + * \param callback an SDL_LogOutputFunction to call instead of the default. + * \param userdata a pointer that is passed to `callback`. * * \since This function is available since SDL 2.0.0. * diff --git a/vs/sdl2/include/SDL_main.h b/vs/sdl2/include/SDL_main.h index 784e77f42a1..62767f43832 100644 --- a/vs/sdl2/include/SDL_main.h +++ b/vs/sdl2/include/SDL_main.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,9 +25,9 @@ #include "SDL_stdinc.h" /** - * \file SDL_main.h + * # CategoryMain * - * Redefine main() on some platforms so that it is called by SDL. + * Redefine main() on some platforms so that it is called by SDL. */ #ifndef SDL_MAIN_HANDLED @@ -129,14 +129,14 @@ * * The application's main() function must be called with C linkage, * and should be declared like this: - * \code + * ```c * #ifdef __cplusplus * extern "C" * #endif * int main(int argc, char *argv[]) * { * } - * \endcode + * ``` */ #if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) @@ -155,11 +155,11 @@ extern "C" { #endif /** - * The prototype for the application's main() function + * The prototype for the application's main() function */ typedef int (*SDL_main_func)(int argc, char *argv[]); //extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]); -extern SDLMAIN_DECLSPEC int SDL_main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT; // Changed for DOSBox-X +extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]) SDL_MAIN_NOEXCEPT; // Changed for DOSBox-X /** * Circumvent failure of SDL_Init() when not using SDL_main() as an entry @@ -228,8 +228,8 @@ extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); /** * Initialize and launch an SDL/WinRT application. * - * \param mainFunction the SDL app's C-style main(), an SDL_main_func - * \param reserved reserved for future use; should be NULL + * \param mainFunction the SDL app's C-style main(), an SDL_main_func. + * \param reserved reserved for future use; should be NULL. * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve * more information on the failure. * @@ -244,10 +244,10 @@ extern DECLSPEC int SDLCALL SDL_WinRTRunApp(SDL_main_func mainFunction, void * r /** * Initializes and launches an SDL application. * - * \param argc The argc parameter from the application's main() function - * \param argv The argv parameter from the application's main() function - * \param mainFunction The SDL app's C-style main(), an SDL_main_func - * \return the return value from mainFunction + * \param argc The argc parameter from the application's main() function. + * \param argv The argv parameter from the application's main() function. + * \param mainFunction The SDL app's C-style main(), an SDL_main_func. + * \return the return value from mainFunction. * * \since This function is available since SDL 2.0.10. */ @@ -260,8 +260,8 @@ extern DECLSPEC int SDLCALL SDL_UIKitRunApp(int argc, char *argv[], SDL_main_fun /** * Initialize and launch an SDL GDK application. * - * \param mainFunction the SDL app's C-style main(), an SDL_main_func - * \param reserved reserved for future use; should be NULL + * \param mainFunction the SDL app's C-style main(), an SDL_main_func. + * \param reserved reserved for future use; should be NULL. * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve * more information on the failure. * diff --git a/vs/sdl2/include/SDL_messagebox.h b/vs/sdl2/include/SDL_messagebox.h index 5ace6f2ddee..725d4124adc 100644 --- a/vs/sdl2/include/SDL_messagebox.h +++ b/vs/sdl2/include/SDL_messagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -32,9 +32,11 @@ extern "C" { #endif /** - * SDL_MessageBox flags. If supported will display warning icon, etc. + * SDL_MessageBox flags. + * + * If supported will display warning icon, etc. */ -typedef enum +typedef enum SDL_MessageBoxFlags { SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */ SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */ @@ -46,7 +48,7 @@ typedef enum /** * Flags for SDL_MessageBoxButtonData. */ -typedef enum +typedef enum SDL_MessageBoxButtonFlags { SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001, /**< Marks the default button when return is hit */ SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002 /**< Marks the default button when escape is hit */ @@ -55,9 +57,9 @@ typedef enum /** * Individual button data. */ -typedef struct +typedef struct SDL_MessageBoxButtonData { - Uint32 flags; /**< ::SDL_MessageBoxButtonFlags */ + Uint32 flags; /**< SDL_MessageBoxButtonFlags */ int buttonid; /**< User defined button id (value returned via SDL_ShowMessageBox) */ const char * text; /**< The UTF-8 button text */ } SDL_MessageBoxButtonData; @@ -65,12 +67,12 @@ typedef struct /** * RGB value used in a message box color scheme */ -typedef struct +typedef struct SDL_MessageBoxColor { Uint8 r, g, b; } SDL_MessageBoxColor; -typedef enum +typedef enum SDL_MessageBoxColorType { SDL_MESSAGEBOX_COLOR_BACKGROUND, SDL_MESSAGEBOX_COLOR_TEXT, @@ -83,7 +85,7 @@ typedef enum /** * A set of colors to use for message box dialogs */ -typedef struct +typedef struct SDL_MessageBoxColorScheme { SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX]; } SDL_MessageBoxColorScheme; @@ -91,9 +93,9 @@ typedef struct /** * MessageBox structure containing title, text, window, etc. */ -typedef struct +typedef struct SDL_MessageBoxData { - Uint32 flags; /**< ::SDL_MessageBoxFlags */ + Uint32 flags; /**< SDL_MessageBoxFlags */ SDL_Window *window; /**< Parent window, can be NULL */ const char *title; /**< UTF-8 title */ const char *message; /**< UTF-8 message text */ @@ -101,7 +103,7 @@ typedef struct int numbuttons; const SDL_MessageBoxButtonData *buttons; - const SDL_MessageBoxColorScheme *colorScheme; /**< ::SDL_MessageBoxColorScheme, can be NULL to use system settings */ + const SDL_MessageBoxColorScheme *colorScheme; /**< SDL_MessageBoxColorScheme, can be NULL to use system settings */ } SDL_MessageBoxData; /** @@ -128,8 +130,9 @@ typedef struct * to stderr if you can. * * \param messageboxdata the SDL_MessageBoxData structure with title, text and - * other options - * \param buttonid the pointer to which user id of hit button should be copied + * other options. + * \param buttonid the pointer to which user id of hit button should be + * copied. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -168,10 +171,10 @@ extern DECLSPEC int SDLCALL SDL_ShowMessageBox(const SDL_MessageBoxData *message * concern, check the return value from this function and fall back to writing * to stderr if you can. * - * \param flags an SDL_MessageBoxFlags value - * \param title UTF-8 title text - * \param message UTF-8 message text - * \param window the parent window, or NULL for no parent + * \param flags an SDL_MessageBoxFlags value. + * \param title UTF-8 title text. + * \param message UTF-8 message text. + * \param window the parent window, or NULL for no parent. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * diff --git a/vs/sdl2/include/SDL_metal.h b/vs/sdl2/include/SDL_metal.h index 50f7b2aeb45..d3f21d5ecff 100644 --- a/vs/sdl2/include/SDL_metal.h +++ b/vs/sdl2/include/SDL_metal.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,10 @@ */ /** - * \file SDL_metal.h + * # CategoryMetal * - * Header file for functions to creating Metal layers and views on SDL windows. + * Header file for functions to creating Metal layers and views on SDL + * windows. */ #ifndef SDL_metal_h_ @@ -37,9 +38,9 @@ extern "C" { #endif /** - * \brief A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS). + * A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS). * - * \note This can be cast directly to an NSView or UIView. + * This can be cast directly to an NSView or UIView. */ typedef void *SDL_MetalView; @@ -90,9 +91,9 @@ extern DECLSPEC void *SDLCALL SDL_Metal_GetLayer(SDL_MetalView view); * Get the size of a window's underlying drawable in pixels (for use with * setting viewport, scissor & etc). * - * \param window SDL_Window from which the drawable size should be queried - * \param w Pointer to variable for storing the width in pixels, may be NULL - * \param h Pointer to variable for storing the height in pixels, may be NULL + * \param window SDL_Window from which the drawable size should be queried. + * \param w Pointer to variable for storing the width in pixels, may be NULL. + * \param h Pointer to variable for storing the height in pixels, may be NULL. * * \since This function is available since SDL 2.0.14. * diff --git a/vs/sdl2/include/SDL_misc.h b/vs/sdl2/include/SDL_misc.h index 113ba7a1569..86a82bc5d6a 100644 --- a/vs/sdl2/include/SDL_misc.h +++ b/vs/sdl2/include/SDL_misc.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_misc.h + * # CategoryMisc * - * \brief Include file for SDL API functions that don't fit elsewhere. + * Include file for SDL API functions that don't fit elsewhere. */ #ifndef SDL_misc_h_ diff --git a/vs/sdl2/include/SDL_mouse.h b/vs/sdl2/include/SDL_mouse.h index 687ff122d2c..628b7a2f835 100644 --- a/vs/sdl2/include/SDL_mouse.h +++ b/vs/sdl2/include/SDL_mouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_mouse.h + * # CategoryMouse * - * Include file for SDL mouse event handling. + * Include file for SDL mouse event handling. */ #ifndef SDL_mouse_h_ @@ -41,9 +41,9 @@ extern "C" { typedef struct SDL_Cursor SDL_Cursor; /**< Implementation dependent */ /** - * \brief Cursor types for SDL_CreateSystemCursor(). + * Cursor types for SDL_CreateSystemCursor(). */ -typedef enum +typedef enum SDL_SystemCursor { SDL_SYSTEM_CURSOR_ARROW, /**< Arrow */ SDL_SYSTEM_CURSOR_IBEAM, /**< I-beam */ @@ -61,9 +61,9 @@ typedef enum } SDL_SystemCursor; /** - * \brief Scroll direction types for the Scroll event + * Scroll direction types for the Scroll event */ -typedef enum +typedef enum SDL_MouseWheelDirection { SDL_MOUSEWHEEL_NORMAL, /**< The scroll direction is normal */ SDL_MOUSEWHEEL_FLIPPED /**< The scroll direction is flipped / natural */ @@ -90,9 +90,9 @@ extern DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void); * either `x` or `y`. * * \param x the x coordinate of the mouse cursor position relative to the - * focus window + * focus window. * \param y the y coordinate of the mouse cursor position relative to the - * focus window + * focus window. * \returns a 32-bit button bitmask of the current button state. * * \since This function is available since SDL 2.0.0. @@ -120,9 +120,9 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetMouseState(int *x, int *y); * reason to use this function, you probably want SDL_GetMouseState() instead. * * \param x filled in with the current X coord relative to the desktop; can be - * NULL + * NULL. * \param y filled in with the current Y coord relative to the desktop; can be - * NULL + * NULL. * \returns the current button state as a bitmask which can be tested using * the SDL_BUTTON(X) macros. * @@ -141,8 +141,8 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetGlobalMouseState(int *x, int *y); * mouse deltas since the last call to SDL_GetRelativeMouseState() or since * event initialization. You can pass NULL for either `x` or `y`. * - * \param x a pointer filled with the last recorded x coordinate of the mouse - * \param y a pointer filled with the last recorded y coordinate of the mouse + * \param x a pointer filled with the last recorded x coordinate of the mouse. + * \param y a pointer filled with the last recorded y coordinate of the mouse. * \returns a 32-bit button bitmask of the relative button state. * * \since This function is available since SDL 2.0.0. @@ -162,9 +162,9 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); * mouse when used over Microsoft Remote Desktop. * * \param window the window to move the mouse into, or NULL for the current - * mouse focus - * \param x the x coordinate within the window - * \param y the y coordinate within the window + * mouse focus. + * \param x the x coordinate within the window. + * \param y the y coordinate within the window. * * \since This function is available since SDL 2.0.0. * @@ -184,8 +184,8 @@ extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, * Note that this function will appear to succeed, but not actually move the * mouse when used over Microsoft Remote Desktop. * - * \param x the x coordinate - * \param y the y coordinate + * \param x the x coordinate. + * \param y the y coordinate. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -297,14 +297,14 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GetRelativeMouseMode(void); * Also, since SDL 2.0.0, SDL_CreateSystemCursor() is available, which * provides twelve readily available system cursors to pick from. * - * \param data the color value for each pixel of the cursor - * \param mask the mask value for each pixel of the cursor - * \param w the width of the cursor - * \param h the height of the cursor + * \param data the color value for each pixel of the cursor. + * \param mask the mask value for each pixel of the cursor. + * \param w the width of the cursor. + * \param h the height of the cursor. * \param hot_x the X-axis location of the upper left corner of the cursor - * relative to the actual mouse position + * relative to the actual mouse position. * \param hot_y the Y-axis location of the upper left corner of the cursor - * relative to the actual mouse position + * relative to the actual mouse position. * \returns a new cursor with the specified parameters on success or NULL on * failure; call SDL_GetError() for more information. * @@ -322,9 +322,9 @@ extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateCursor(const Uint8 * data, /** * Create a color cursor. * - * \param surface an SDL_Surface structure representing the cursor image - * \param hot_x the x position of the cursor hot spot - * \param hot_y the y position of the cursor hot spot + * \param surface an SDL_Surface structure representing the cursor image. + * \param hot_x the x position of the cursor hot spot. + * \param hot_y the y position of the cursor hot spot. * \returns the new cursor on success or NULL on failure; call SDL_GetError() * for more information. * @@ -340,7 +340,7 @@ extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateColorCursor(SDL_Surface *surface, /** * Create a system cursor. * - * \param id an SDL_SystemCursor enum value + * \param id an SDL_SystemCursor enum value. * \returns a cursor on success or NULL on failure; call SDL_GetError() for * more information. * @@ -358,7 +358,7 @@ extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateSystemCursor(SDL_SystemCursor id); * the display. SDL_SetCursor(NULL) can be used to force cursor redraw, if * this is desired for any reason. * - * \param cursor a cursor to make active + * \param cursor a cursor to make active. * * \since This function is available since SDL 2.0.0. * @@ -402,7 +402,7 @@ extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetDefaultCursor(void); * Use this function to free cursor resources created with SDL_CreateCursor(), * SDL_CreateColorCursor() or SDL_CreateSystemCursor(). * - * \param cursor the cursor to free + * \param cursor the cursor to free. * * \since This function is available since SDL 2.0.0. * @@ -437,9 +437,9 @@ extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); /** * Used as a mask when testing buttons in buttonstate. * - * - Button 1: Left mouse button - * - Button 2: Middle mouse button - * - Button 3: Right mouse button + * - Button 1: Left mouse button + * - Button 2: Middle mouse button + * - Button 3: Right mouse button */ #define SDL_BUTTON(X) (1 << ((X)-1)) #define SDL_BUTTON_LEFT 1 diff --git a/vs/sdl2/include/SDL_mutex.h b/vs/sdl2/include/SDL_mutex.h index eaa21f293f5..0fe3eb5a5f8 100644 --- a/vs/sdl2/include/SDL_mutex.h +++ b/vs/sdl2/include/SDL_mutex.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,9 +23,9 @@ #define SDL_mutex_h_ /** - * \file SDL_mutex.h + * # CategoryMutex * - * Functions to provide thread synchronization primitives. + * Functions to provide thread synchronization primitives. */ #include "SDL_stdinc.h" @@ -112,13 +112,13 @@ extern "C" { #endif /** - * Synchronization functions which can time out return this value - * if they time out. + * Synchronization functions which can time out return this value if they time + * out. */ #define SDL_MUTEX_TIMEDOUT 1 /** - * This is the timeout value which corresponds to never time out. + * This is the timeout value which corresponds to never time out. */ #define SDL_MUTEX_MAXWAIT (~(Uint32)0) @@ -165,7 +165,7 @@ extern DECLSPEC SDL_mutex *SDLCALL SDL_CreateMutex(void); * unlock it the same number of times before it is actually made available for * other threads in the system (this is known as a "recursive mutex"). * - * \param mutex the mutex to lock + * \param mutex the mutex to lock. * \return 0, or -1 on error. * * \since This function is available since SDL 2.0.0. @@ -182,7 +182,7 @@ extern DECLSPEC int SDLCALL SDL_LockMutex(SDL_mutex * mutex) SDL_ACQUIRE(mutex); * This technique is useful if you need exclusive access to a resource but * don't want to wait for it, and will return to it to try again later. * - * \param mutex the mutex to try to lock + * \param mutex the mutex to try to lock. * \returns 0, `SDL_MUTEX_TIMEDOUT`, or -1 on error; call SDL_GetError() for * more information. * @@ -224,7 +224,7 @@ extern DECLSPEC int SDLCALL SDL_UnlockMutex(SDL_mutex * mutex) SDL_RELEASE(mutex * to destroy a locked mutex, and may result in undefined behavior depending * on the platform. * - * \param mutex the mutex to destroy + * \param mutex the mutex to destroy. * * \since This function is available since SDL 2.0.0. * @@ -256,7 +256,7 @@ typedef struct SDL_semaphore SDL_sem; * is 0. Each post operation will atomically increment the semaphore value and * wake waiting threads and allow them to retry the wait operation. * - * \param initial_value the starting value of the semaphore + * \param initial_value the starting value of the semaphore. * \returns a new semaphore or NULL on failure; call SDL_GetError() for more * information. * @@ -277,7 +277,7 @@ extern DECLSPEC SDL_sem *SDLCALL SDL_CreateSemaphore(Uint32 initial_value); * It is not safe to destroy a semaphore if there are threads currently * waiting on it. * - * \param sem the semaphore to destroy + * \param sem the semaphore to destroy. * * \since This function is available since SDL 2.0.0. * @@ -301,7 +301,7 @@ extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem * sem); * This function is the equivalent of calling SDL_SemWaitTimeout() with a time * length of `SDL_MUTEX_MAXWAIT`. * - * \param sem the semaphore wait on + * \param sem the semaphore wait on. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -325,7 +325,7 @@ extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem * sem); * the semaphore doesn't have a positive value, the function immediately * returns SDL_MUTEX_TIMEDOUT. * - * \param sem the semaphore to wait on + * \param sem the semaphore to wait on. * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait would * block, or a negative error code on failure; call SDL_GetError() * for more information. @@ -349,8 +349,8 @@ extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem * sem); * signal or error, or the specified time has elapsed. If the call is * successful it will atomically decrement the semaphore value. * - * \param sem the semaphore to wait on - * \param timeout the length of the timeout, in milliseconds + * \param sem the semaphore to wait on. + * \param timeout the length of the timeout, in milliseconds. * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait does not * succeed in the allotted time, or a negative error code on failure; * call SDL_GetError() for more information. @@ -369,7 +369,7 @@ extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem *sem, Uint32 timeout); /** * Atomically increment a semaphore's value and wake waiting threads. * - * \param sem the semaphore to increment + * \param sem the semaphore to increment. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -387,7 +387,7 @@ extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem * sem); /** * Get the current value of a semaphore. * - * \param sem the semaphore to query + * \param sem the semaphore to query. * \returns the current value of the semaphore. * * \since This function is available since SDL 2.0.0. @@ -427,7 +427,7 @@ extern DECLSPEC SDL_cond *SDLCALL SDL_CreateCond(void); /** * Destroy a condition variable. * - * \param cond the condition variable to destroy + * \param cond the condition variable to destroy. * * \since This function is available since SDL 2.0.0. * @@ -442,7 +442,7 @@ extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond * cond); /** * Restart one of the threads that are waiting on the condition variable. * - * \param cond the condition variable to signal + * \param cond the condition variable to signal. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -459,7 +459,7 @@ extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond * cond); /** * Restart all threads that are waiting on the condition variable. * - * \param cond the condition variable to signal + * \param cond the condition variable to signal. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -486,8 +486,8 @@ extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond * cond); * This function is the equivalent of calling SDL_CondWaitTimeout() with a * time length of `SDL_MUTEX_MAXWAIT`. * - * \param cond the condition variable to wait on - * \param mutex the mutex used to coordinate thread access + * \param cond the condition variable to wait on. + * \param mutex the mutex used to coordinate thread access. * \returns 0 when it is signaled or a negative error code on failure; call * SDL_GetError() for more information. * @@ -512,10 +512,10 @@ extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex); * * The mutex must be locked before calling this function. * - * \param cond the condition variable to wait on - * \param mutex the mutex used to coordinate thread access + * \param cond the condition variable to wait on. + * \param mutex the mutex used to coordinate thread access. * \param ms the maximum time to wait, in milliseconds, or `SDL_MUTEX_MAXWAIT` - * to wait indefinitely + * to wait indefinitely. * \returns 0 if the condition variable is signaled, `SDL_MUTEX_TIMEDOUT` if * the condition is not signaled in the allotted time, or a negative * error code on failure; call SDL_GetError() for more information. diff --git a/vs/sdl2/include/SDL_name.h b/vs/sdl2/include/SDL_name.h index 71e9354550f..0c48bcf315a 100644 --- a/vs/sdl2/include/SDL_name.h +++ b/vs/sdl2/include/SDL_name.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/include/SDL_opengl.h b/vs/sdl2/include/SDL_opengl.h index 2bb38c5c0e9..c6250d131b7 100644 --- a/vs/sdl2/include/SDL_opengl.h +++ b/vs/sdl2/include/SDL_opengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,17 +19,11 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** - * \file SDL_opengl.h - * - * This is a simple file to encapsulate the OpenGL API headers. - */ - -/** - * \def NO_SDL_GLEXT +/* + * This is a simple file to encapsulate the OpenGL API headers. * - * Define this if you have your own version of glext.h and want to disable the - * version included in SDL_opengl.h. + * Define NO_SDL_GLEXT if you have your own version of glext.h and want + * to disable the version included in SDL_opengl.h. */ #ifndef SDL_opengl_h_ diff --git a/vs/sdl2/include/SDL_opengles.h b/vs/sdl2/include/SDL_opengles.h index 7e9a1ab8d4d..adf6ef782f7 100644 --- a/vs/sdl2/include/SDL_opengles.h +++ b/vs/sdl2/include/SDL_opengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,11 +19,10 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** - * \file SDL_opengles.h - * - * This is a simple file to encapsulate the OpenGL ES 1.X API headers. +/* + * This is a simple file to encapsulate the OpenGL ES 1.X API headers. */ + #include "SDL_config.h" #ifdef __IPHONEOS__ diff --git a/vs/sdl2/include/SDL_opengles2.h b/vs/sdl2/include/SDL_opengles2.h index 96971344d1b..5514197124a 100644 --- a/vs/sdl2/include/SDL_opengles2.h +++ b/vs/sdl2/include/SDL_opengles2.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,11 +19,10 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** - * \file SDL_opengles2.h - * - * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. +/* + * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. */ + #include "SDL_config.h" #if !defined(_MSC_VER) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS) diff --git a/vs/sdl2/include/SDL_pixels.h b/vs/sdl2/include/SDL_pixels.h index 44757cdcf4b..6f29811d337 100644 --- a/vs/sdl2/include/SDL_pixels.h +++ b/vs/sdl2/include/SDL_pixels.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_pixels.h + * # CategoryPixels * - * Header for the enumerated pixel format definitions. + * Header for the enumerated pixel format definitions. */ #ifndef SDL_pixels_h_ @@ -320,9 +320,10 @@ typedef enum } SDL_PixelFormatEnum; /** - * The bits of this structure can be directly reinterpreted as an integer-packed - * color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 - * on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems). + * The bits of this structure can be directly reinterpreted as an + * integer-packed color which uses the SDL_PIXELFORMAT_RGBA32 format + * (SDL_PIXELFORMAT_ABGR8888 on little-endian systems and + * SDL_PIXELFORMAT_RGBA8888 on big-endian systems). */ typedef struct SDL_Color { @@ -342,7 +343,30 @@ typedef struct SDL_Palette } SDL_Palette; /** - * \note Everything in the pixel format structure is read-only. + * A structure that contains pixel format information. + * + * Everything in the pixel format structure is read-only. + * + * A pixel format has either a palette or masks. If a palette is used `Rmask`, + * `Gmask`, `Bmask`, and `Amask` will be 0. + * + * An SDL_PixelFormat describes the format of the pixel data stored at the + * `pixels` field of an SDL_Surface. Every surface stores an SDL_PixelFormat + * in the `format` field. + * + * If you wish to do pixel level modifications on a surface, then + * understanding how SDL stores its color information is essential. + * + * For information on modern pixel color spaces, see the following Wikipedia + * article: http://en.wikipedia.org/wiki/RGBA_color_space + * + * \sa SDL_ConvertSurface + * \sa SDL_GetRGB + * \sa SDL_GetRGBA + * \sa SDL_MapRGB + * \sa SDL_MapRGBA + * \sa SDL_AllocFormat + * \sa SDL_FreeFormat */ typedef struct SDL_PixelFormat { @@ -370,7 +394,7 @@ typedef struct SDL_PixelFormat /** * Get the human readable name of a pixel format. * - * \param format the pixel format to query + * \param format the pixel format to query. * \returns the human readable name of the specified pixel format or * `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. * @@ -381,12 +405,12 @@ extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format); /** * Convert one of the enumerated pixel formats to a bpp value and RGBA masks. * - * \param format one of the SDL_PixelFormatEnum values - * \param bpp a bits per pixel value; usually 15, 16, or 32 - * \param Rmask a pointer filled in with the red mask for the format - * \param Gmask a pointer filled in with the green mask for the format - * \param Bmask a pointer filled in with the blue mask for the format - * \param Amask a pointer filled in with the alpha mask for the format + * \param format one of the SDL_PixelFormatEnum values. + * \param bpp a bits per pixel value; usually 15, 16, or 32. + * \param Rmask a pointer filled in with the red mask for the format. + * \param Gmask a pointer filled in with the green mask for the format. + * \param Bmask a pointer filled in with the blue mask for the format. + * \param Amask a pointer filled in with the alpha mask for the format. * \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't * possible; call SDL_GetError() for more information. * @@ -407,12 +431,12 @@ extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format, * This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't * possible. * - * \param bpp a bits per pixel value; usually 15, 16, or 32 - * \param Rmask the red mask for the format - * \param Gmask the green mask for the format - * \param Bmask the blue mask for the format - * \param Amask the alpha mask for the format - * \returns one of the SDL_PixelFormatEnum values + * \param bpp a bits per pixel value; usually 15, 16, or 32. + * \param Rmask the red mask for the format. + * \param Gmask the green mask for the format. + * \param Bmask the blue mask for the format. + * \param Amask the alpha mask for the format. + * \returns one of the SDL_PixelFormatEnum values. * * \since This function is available since SDL 2.0.0. * @@ -431,7 +455,7 @@ extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp, * allocated), and hence should not be modified, especially the palette. Weird * errors such as `Blit combination not supported` may occur. * - * \param pixel_format one of the SDL_PixelFormatEnum values + * \param pixel_format one of the SDL_PixelFormatEnum values. * \returns the new SDL_PixelFormat structure or NULL on failure; call * SDL_GetError() for more information. * @@ -444,7 +468,7 @@ extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format); /** * Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). * - * \param format the SDL_PixelFormat structure to free + * \param format the SDL_PixelFormat structure to free. * * \since This function is available since SDL 2.0.0. * @@ -457,7 +481,7 @@ extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format); * * The palette entries are initialized to white. * - * \param ncolors represents the number of color entries in the color palette + * \param ncolors represents the number of color entries in the color palette. * \returns a new SDL_Palette structure on success or NULL on failure (e.g. if * there wasn't enough memory); call SDL_GetError() for more * information. @@ -471,8 +495,8 @@ extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors); /** * Set the palette for a pixel format structure. * - * \param format the SDL_PixelFormat structure that will use the palette - * \param palette the SDL_Palette structure that will be used + * \param format the SDL_PixelFormat structure that will use the palette. + * \param palette the SDL_Palette structure that will be used. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -487,10 +511,10 @@ extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format, /** * Set a range of colors in a palette. * - * \param palette the SDL_Palette structure to modify - * \param colors an array of SDL_Color structures to copy into the palette - * \param firstcolor the index of the first palette entry to modify - * \param ncolors the number of entries to modify + * \param palette the SDL_Palette structure to modify. + * \param colors an array of SDL_Color structures to copy into the palette. + * \param firstcolor the index of the first palette entry to modify. + * \param ncolors the number of entries to modify. * \returns 0 on success or a negative error code if not all of the colors * could be set; call SDL_GetError() for more information. * @@ -506,7 +530,7 @@ extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette, /** * Free a palette created with SDL_AllocPalette(). * - * \param palette the SDL_Palette structure to be freed + * \param palette the SDL_Palette structure to be freed. * * \since This function is available since SDL 2.0.0. * @@ -532,11 +556,11 @@ extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette); * format the return value can be assigned to a Uint16, and similarly a Uint8 * for an 8-bpp format). * - * \param format an SDL_PixelFormat structure describing the pixel format - * \param r the red component of the pixel in the range 0-255 - * \param g the green component of the pixel in the range 0-255 - * \param b the blue component of the pixel in the range 0-255 - * \returns a pixel value + * \param format an SDL_PixelFormat structure describing the pixel format. + * \param r the red component of the pixel in the range 0-255. + * \param g the green component of the pixel in the range 0-255. + * \param b the blue component of the pixel in the range 0-255. + * \returns a pixel value. * * \since This function is available since SDL 2.0.0. * @@ -566,12 +590,12 @@ extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format, * for an 8-bpp format). * * \param format an SDL_PixelFormat structure describing the format of the - * pixel - * \param r the red component of the pixel in the range 0-255 - * \param g the green component of the pixel in the range 0-255 - * \param b the blue component of the pixel in the range 0-255 - * \param a the alpha component of the pixel in the range 0-255 - * \returns a pixel value + * pixel. + * \param r the red component of the pixel in the range 0-255. + * \param g the green component of the pixel in the range 0-255. + * \param b the blue component of the pixel in the range 0-255. + * \param a the alpha component of the pixel in the range 0-255. + * \returns a pixel value. * * \since This function is available since SDL 2.0.0. * @@ -591,12 +615,12 @@ extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format, * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). * - * \param pixel a pixel value + * \param pixel a pixel value. * \param format an SDL_PixelFormat structure describing the format of the - * pixel - * \param r a pointer filled in with the red component - * \param g a pointer filled in with the green component - * \param b a pointer filled in with the blue component + * pixel. + * \param r a pointer filled in with the red component. + * \param g a pointer filled in with the green component. + * \param b a pointer filled in with the blue component. * * \since This function is available since SDL 2.0.0. * @@ -619,13 +643,13 @@ extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, * If the surface has no alpha component, the alpha will be returned as 0xff * (100% opaque). * - * \param pixel a pixel value + * \param pixel a pixel value. * \param format an SDL_PixelFormat structure describing the format of the - * pixel - * \param r a pointer filled in with the red component - * \param g a pointer filled in with the green component - * \param b a pointer filled in with the blue component - * \param a a pointer filled in with the alpha component + * pixel. + * \param r a pointer filled in with the red component. + * \param g a pointer filled in with the green component. + * \param b a pointer filled in with the blue component. + * \param a a pointer filled in with the alpha component. * * \since This function is available since SDL 2.0.0. * @@ -641,8 +665,8 @@ extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, /** * Calculate a 256 entry gamma ramp for a gamma value. * - * \param gamma a gamma value where 0.0 is black and 1.0 is identity - * \param ramp an array of 256 values filled in with the gamma ramp + * \param gamma a gamma value where 0.0 is black and 1.0 is identity. + * \param ramp an array of 256 values filled in with the gamma ramp. * * \since This function is available since SDL 2.0.0. * diff --git a/vs/sdl2/include/SDL_platform.h b/vs/sdl2/include/SDL_platform.h index 2b11bf20168..64ece4fe70a 100644 --- a/vs/sdl2/include/SDL_platform.h +++ b/vs/sdl2/include/SDL_platform.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_platform.h + * # CategoryPlatform * - * Try to get a standard set of platform defines. + * Try to get a standard set of platform defines. */ #ifndef SDL_platform_h_ diff --git a/vs/sdl2/include/SDL_power.h b/vs/sdl2/include/SDL_power.h index 0520065cebb..755c5d42a39 100644 --- a/vs/sdl2/include/SDL_power.h +++ b/vs/sdl2/include/SDL_power.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,9 +23,9 @@ #define SDL_power_h_ /** - * \file SDL_power.h + * # CategoryPower * - * Header for the SDL power management routines. + * Header for the SDL power management routines. */ #include "SDL_stdinc.h" @@ -37,9 +37,9 @@ extern "C" { #endif /** - * The basic state for the system's power supply. + * The basic state for the system's power supply. */ -typedef enum +typedef enum SDL_PowerState { SDL_POWERSTATE_UNKNOWN, /**< cannot determine power status */ SDL_POWERSTATE_ON_BATTERY, /**< Not plugged in, running on the battery */ @@ -66,10 +66,10 @@ typedef enum * * \param seconds seconds of battery life left, you can pass a NULL here if * you don't care, will return -1 if we can't determine a - * value, or we're not running on a battery + * value, or we're not running on a battery. * \param percent percentage of battery life left, between 0 and 100, you can * pass a NULL here if you don't care, will return -1 if we - * can't determine a value, or we're not running on a battery + * can't determine a value, or we're not running on a battery. * \returns an SDL_PowerState enum representing the current battery state. * * \since This function is available since SDL 2.0.0. diff --git a/vs/sdl2/include/SDL_quit.h b/vs/sdl2/include/SDL_quit.h index 3f69dc9f260..03630e232b4 100644 --- a/vs/sdl2/include/SDL_quit.h +++ b/vs/sdl2/include/SDL_quit.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,20 @@ */ /** - * \file SDL_quit.h + * # CategoryQuit * - * Include file for SDL quit event handling. + * An SDL_QUIT event is generated when the user tries to close the application + * window. If it is ignored or filtered out, the window will remain open. If + * it is not ignored or filtered, it is queued normally and the window is + * allowed to close. When the window is closed, screen updates will complete, + * but have no effect. + * + * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) and + * SIGTERM (system termination request), if handlers do not already exist, + * that generate SDL_QUIT events as well. There is no way to determine the + * cause of an SDL_QUIT event, but setting a signal handler in your + * application will override the default generation of quit events for that + * signal. */ #ifndef SDL_quit_h_ @@ -31,25 +42,6 @@ #include "SDL_stdinc.h" #include "SDL_error.h" -/** - * \file SDL_quit.h - * - * An ::SDL_QUIT event is generated when the user tries to close the application - * window. If it is ignored or filtered out, the window will remain open. - * If it is not ignored or filtered, it is queued normally and the window - * is allowed to close. When the window is closed, screen updates will - * complete, but have no effect. - * - * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) - * and SIGTERM (system termination request), if handlers do not already - * exist, that generate ::SDL_QUIT events as well. There is no way - * to determine the cause of an ::SDL_QUIT event, but setting a signal - * handler in your application will override the default generation of - * quit events for that signal. - * - * \sa SDL_Quit() - */ - /* There are no functions directly affecting the quit event */ #define SDL_QuitRequested() \ diff --git a/vs/sdl2/include/SDL_rect.h b/vs/sdl2/include/SDL_rect.h index 5ce1f0b4517..b7e609d941e 100644 --- a/vs/sdl2/include/SDL_rect.h +++ b/vs/sdl2/include/SDL_rect.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_rect.h + * # CategoryRect * - * Header file for SDL_rect definition and management functions. + * Header file for SDL_rect definition and management functions. */ #ifndef SDL_rect_h_ @@ -135,8 +135,8 @@ SDL_FORCE_INLINE SDL_bool SDL_RectEquals(const SDL_Rect *a, const SDL_Rect *b) * * If either pointer is NULL the function will return SDL_FALSE. * - * \param A an SDL_Rect structure representing the first rectangle - * \param B an SDL_Rect structure representing the second rectangle + * \param A an SDL_Rect structure representing the first rectangle. + * \param B an SDL_Rect structure representing the second rectangle. * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. @@ -151,10 +151,10 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersection(const SDL_Rect * A, * * If `result` is NULL then this function will return SDL_FALSE. * - * \param A an SDL_Rect structure representing the first rectangle - * \param B an SDL_Rect structure representing the second rectangle + * \param A an SDL_Rect structure representing the first rectangle. + * \param B an SDL_Rect structure representing the second rectangle. * \param result an SDL_Rect structure filled in with the intersection of - * rectangles `A` and `B` + * rectangles `A` and `B`. * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. @@ -168,10 +168,10 @@ extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRect(const SDL_Rect * A, /** * Calculate the union of two rectangles. * - * \param A an SDL_Rect structure representing the first rectangle - * \param B an SDL_Rect structure representing the second rectangle + * \param A an SDL_Rect structure representing the first rectangle. + * \param B an SDL_Rect structure representing the second rectangle. * \param result an SDL_Rect structure filled in with the union of rectangles - * `A` and `B` + * `A` and `B`. * * \since This function is available since SDL 2.0.0. */ @@ -186,11 +186,11 @@ extern DECLSPEC void SDLCALL SDL_UnionRect(const SDL_Rect * A, * considered. * * \param points an array of SDL_Point structures representing points to be - * enclosed - * \param count the number of structures in the `points` array - * \param clip an SDL_Rect used for clipping or NULL to enclose all points + * enclosed. + * \param count the number of structures in the `points` array. + * \param clip an SDL_Rect used for clipping or NULL to enclose all points. * \param result an SDL_Rect structure filled in with the minimal enclosing - * rectangle + * rectangle. * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the * points were outside of the clipping rectangle. * @@ -210,11 +210,11 @@ extern DECLSPEC SDL_bool SDLCALL SDL_EnclosePoints(const SDL_Point * points, * both ends will be clipped to the boundary of the rectangle and the new * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. * - * \param rect an SDL_Rect structure representing the rectangle to intersect - * \param X1 a pointer to the starting X-coordinate of the line - * \param Y1 a pointer to the starting Y-coordinate of the line - * \param X2 a pointer to the ending X-coordinate of the line - * \param Y2 a pointer to the ending Y-coordinate of the line + * \param rect an SDL_Rect structure representing the rectangle to intersect. + * \param X1 a pointer to the starting X-coordinate of the line. + * \param Y1 a pointer to the starting Y-coordinate of the line. + * \param X2 a pointer to the ending X-coordinate of the line. + * \param Y2 a pointer to the ending Y-coordinate of the line. * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. @@ -274,8 +274,8 @@ SDL_FORCE_INLINE SDL_bool SDL_FRectEquals(const SDL_FRect *a, const SDL_FRect *b * * If either pointer is NULL the function will return SDL_FALSE. * - * \param A an SDL_FRect structure representing the first rectangle - * \param B an SDL_FRect structure representing the second rectangle + * \param A an SDL_FRect structure representing the first rectangle. + * \param B an SDL_FRect structure representing the second rectangle. * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.22. @@ -290,10 +290,10 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersectionF(const SDL_FRect * A, * * If `result` is NULL then this function will return SDL_FALSE. * - * \param A an SDL_FRect structure representing the first rectangle - * \param B an SDL_FRect structure representing the second rectangle + * \param A an SDL_FRect structure representing the first rectangle. + * \param B an SDL_FRect structure representing the second rectangle. * \param result an SDL_FRect structure filled in with the intersection of - * rectangles `A` and `B` + * rectangles `A` and `B`. * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.22. @@ -307,10 +307,10 @@ extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRect(const SDL_FRect * A, /** * Calculate the union of two rectangles with float precision. * - * \param A an SDL_FRect structure representing the first rectangle - * \param B an SDL_FRect structure representing the second rectangle + * \param A an SDL_FRect structure representing the first rectangle. + * \param B an SDL_FRect structure representing the second rectangle. * \param result an SDL_FRect structure filled in with the union of rectangles - * `A` and `B` + * `A` and `B`. * * \since This function is available since SDL 2.0.22. */ @@ -326,11 +326,11 @@ extern DECLSPEC void SDLCALL SDL_UnionFRect(const SDL_FRect * A, * considered. * * \param points an array of SDL_FPoint structures representing points to be - * enclosed - * \param count the number of structures in the `points` array - * \param clip an SDL_FRect used for clipping or NULL to enclose all points + * enclosed. + * \param count the number of structures in the `points` array. + * \param clip an SDL_FRect used for clipping or NULL to enclose all points. * \param result an SDL_FRect structure filled in with the minimal enclosing - * rectangle + * rectangle. * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the * points were outside of the clipping rectangle. * @@ -351,11 +351,11 @@ extern DECLSPEC SDL_bool SDLCALL SDL_EncloseFPoints(const SDL_FPoint * points, * both ends will be clipped to the boundary of the rectangle and the new * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. * - * \param rect an SDL_FRect structure representing the rectangle to intersect - * \param X1 a pointer to the starting X-coordinate of the line - * \param Y1 a pointer to the starting Y-coordinate of the line - * \param X2 a pointer to the ending X-coordinate of the line - * \param Y2 a pointer to the ending Y-coordinate of the line + * \param rect an SDL_FRect structure representing the rectangle to intersect. + * \param X1 a pointer to the starting X-coordinate of the line. + * \param Y1 a pointer to the starting Y-coordinate of the line. + * \param X2 a pointer to the ending X-coordinate of the line. + * \param Y2 a pointer to the ending Y-coordinate of the line. * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.22. diff --git a/vs/sdl2/include/SDL_render.h b/vs/sdl2/include/SDL_render.h index b7135bb9dd4..5274172179d 100644 --- a/vs/sdl2/include/SDL_render.h +++ b/vs/sdl2/include/SDL_render.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,29 +20,30 @@ */ /** - * \file SDL_render.h + * # CategoryRender * - * Header file for SDL 2D rendering functions. + * Header file for SDL 2D rendering functions. * - * This API supports the following features: - * * single pixel points - * * single pixel lines - * * filled rectangles - * * texture images + * This API supports the following features: * - * The primitives may be drawn in opaque, blended, or additive modes. + * - single pixel points + * - single pixel lines + * - filled rectangles + * - texture images * - * The texture images may be drawn in opaque, blended, or additive modes. - * They can have an additional color tint or alpha modulation applied to - * them, and may also be stretched with linear interpolation. + * The primitives may be drawn in opaque, blended, or additive modes. * - * This API is designed to accelerate simple 2D operations. You may - * want more functionality such as polygons and particle effects and - * in that case you should use SDL's OpenGL/Direct3D support or one - * of the many good 3D engines. + * The texture images may be drawn in opaque, blended, or additive modes. They + * can have an additional color tint or alpha modulation applied to them, and + * may also be stretched with linear interpolation. * - * These functions must be called from the main thread. - * See this bug for details: https://github.com/libsdl-org/SDL/issues/986 + * This API is designed to accelerate simple 2D operations. You may want more + * functionality such as polygons and particle effects and in that case you + * should use SDL's OpenGL/Direct3D support or one of the many good 3D + * engines. + * + * These functions must be called from the main thread. See this bug for + * details: https://github.com/libsdl-org/SDL/issues/986 */ #ifndef SDL_render_h_ @@ -61,7 +62,7 @@ extern "C" { /** * Flags used when creating a rendering context */ -typedef enum +typedef enum SDL_RendererFlags { SDL_RENDERER_SOFTWARE = 0x00000001, /**< The renderer is a software fallback */ SDL_RENDERER_ACCELERATED = 0x00000002, /**< The renderer uses hardware @@ -78,7 +79,7 @@ typedef enum typedef struct SDL_RendererInfo { const char *name; /**< The name of the renderer */ - Uint32 flags; /**< Supported ::SDL_RendererFlags */ + Uint32 flags; /**< Supported SDL_RendererFlags */ Uint32 num_texture_formats; /**< The number of available texture formats */ Uint32 texture_formats[16]; /**< The available texture formats */ int max_texture_width; /**< The maximum texture width */ @@ -86,7 +87,7 @@ typedef struct SDL_RendererInfo } SDL_RendererInfo; /** - * Vertex structure + * Vertex structure */ typedef struct SDL_Vertex { @@ -98,7 +99,7 @@ typedef struct SDL_Vertex /** * The scaling mode for a texture. */ -typedef enum +typedef enum SDL_ScaleMode { SDL_ScaleModeNearest, /**< nearest pixel sampling */ SDL_ScaleModeLinear, /**< linear filtering */ @@ -108,7 +109,7 @@ typedef enum /** * The access pattern allowed for a texture. */ -typedef enum +typedef enum SDL_TextureAccess { SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */ SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */ @@ -118,7 +119,7 @@ typedef enum /** * The texture channel modulation used in SDL_RenderCopy(). */ -typedef enum +typedef enum SDL_TextureModulate { SDL_TEXTUREMODULATE_NONE = 0x00000000, /**< No modulation */ SDL_TEXTUREMODULATE_COLOR = 0x00000001, /**< srcC = srcC * color */ @@ -128,7 +129,7 @@ typedef enum /** * Flip constants for SDL_RenderCopyEx */ -typedef enum +typedef enum SDL_RendererFlip { SDL_FLIP_NONE = 0x00000000, /**< Do not flip */ SDL_FLIP_HORIZONTAL = 0x00000001, /**< flip horizontally */ @@ -171,9 +172,9 @@ extern DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void); /** * Get info about a specific 2D rendering driver for the current display. * - * \param index the index of the driver to query information about + * \param index the index of the driver to query information about. * \param info an SDL_RendererInfo structure to be filled with information on - * the rendering driver + * the rendering driver. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -188,12 +189,12 @@ extern DECLSPEC int SDLCALL SDL_GetRenderDriverInfo(int index, /** * Create a window and default renderer. * - * \param width the width of the window - * \param height the height of the window + * \param width the width of the window. + * \param height the height of the window. * \param window_flags the flags used to create the window (see - * SDL_CreateWindow()) - * \param window a pointer filled with the window, or NULL on error - * \param renderer a pointer filled with the renderer, or NULL on error + * SDL_CreateWindow()). + * \param window a pointer filled with the window, or NULL on error. + * \param renderer a pointer filled with the renderer, or NULL on error. * \returns 0 on success, or -1 on error; call SDL_GetError() for more * information. * @@ -210,10 +211,10 @@ extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer( /** * Create a 2D rendering context for a window. * - * \param window the window where rendering is displayed + * \param window the window where rendering is displayed. * \param index the index of the rendering driver to initialize, or -1 to - * initialize the first one supporting the requested flags - * \param flags 0, or one or more SDL_RendererFlags OR'd together + * initialize the first one supporting the requested flags. + * \param flags 0, or one or more SDL_RendererFlags OR'd together. * \returns a valid rendering context or NULL if there was an error; call * SDL_GetError() for more information. * @@ -236,14 +237,14 @@ extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window, * SDL_Window as the final destination and not an SDL_Surface. * * \param surface the SDL_Surface structure representing the surface where - * rendering is done + * rendering is done. * \returns a valid rendering context or NULL if there was an error; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. * * \sa SDL_CreateRenderer - * \sa SDL_CreateWindowRenderer + * \sa SDL_CreateWindowAndRenderer * \sa SDL_DestroyRenderer */ extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface); @@ -251,7 +252,7 @@ extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * /** * Get the renderer associated with a window. * - * \param window the window to query + * \param window the window to query. * \returns the rendering context on success or NULL on failure; call * SDL_GetError() for more information. * @@ -264,7 +265,7 @@ extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window * window); /** * Get the window associated with a renderer. * - * \param renderer the renderer to query + * \param renderer the renderer to query. * \returns the window on success or NULL on failure; call SDL_GetError() for * more information. * @@ -275,9 +276,9 @@ extern DECLSPEC SDL_Window * SDLCALL SDL_RenderGetWindow(SDL_Renderer *renderer) /** * Get information about a rendering context. * - * \param renderer the rendering context + * \param renderer the rendering context. * \param info an SDL_RendererInfo structure filled with information about the - * current renderer + * current renderer. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -295,9 +296,9 @@ extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer * renderer, * has more pixels than the window that contains it, so use this instead of * SDL_GetWindowSize() to decide how much drawing area you have. * - * \param renderer the rendering context - * \param w an int filled with the width - * \param h an int filled with the height + * \param renderer the rendering context. + * \param w an int filled with the width. + * \param h an int filled with the height. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -314,11 +315,11 @@ extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, * You can set the texture scaling method by setting * `SDL_HINT_RENDER_SCALE_QUALITY` before creating the texture. * - * \param renderer the rendering context - * \param format one of the enumerated values in SDL_PixelFormatEnum - * \param access one of the enumerated values in SDL_TextureAccess - * \param w the width of the texture in pixels - * \param h the height of the texture in pixels + * \param renderer the rendering context. + * \param format one of the enumerated values in SDL_PixelFormatEnum. + * \param access one of the enumerated values in SDL_TextureAccess. + * \param w the width of the texture in pixels. + * \param h the height of the texture in pixels. * \returns a pointer to the created texture or NULL if no rendering context * was active, the format was unsupported, or the width or height * were out of range; call SDL_GetError() for more information. @@ -347,9 +348,9 @@ extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, * format of the surface. Use SDL_QueryTexture() to query the pixel format of * the texture. * - * \param renderer the rendering context + * \param renderer the rendering context. * \param surface the SDL_Surface structure containing pixel data used to fill - * the texture + * the texture. * \returns the created texture or NULL on failure; call SDL_GetError() for * more information. * @@ -364,7 +365,7 @@ extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Renderer /** * Query the attributes of a texture. * - * \param texture the texture to query + * \param texture the texture to query. * \param format a pointer filled in with the raw format of the texture; the * actual format may differ, but pixel transfers will use this * format (one of the SDL_PixelFormatEnum values). This argument @@ -399,10 +400,10 @@ extern DECLSPEC int SDLCALL SDL_QueryTexture(SDL_Texture * texture, * Color modulation is not always supported by the renderer; it will return -1 * if color modulation is not supported. * - * \param texture the texture to update - * \param r the red color value multiplied into copy operations - * \param g the green color value multiplied into copy operations - * \param b the blue color value multiplied into copy operations + * \param texture the texture to update. + * \param r the red color value multiplied into copy operations. + * \param g the green color value multiplied into copy operations. + * \param b the blue color value multiplied into copy operations. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -418,10 +419,10 @@ extern DECLSPEC int SDLCALL SDL_SetTextureColorMod(SDL_Texture * texture, /** * Get the additional color value multiplied into render copy operations. * - * \param texture the texture to query - * \param r a pointer filled in with the current red color value - * \param g a pointer filled in with the current green color value - * \param b a pointer filled in with the current blue color value + * \param texture the texture to query. + * \param r a pointer filled in with the current red color value. + * \param g a pointer filled in with the current green color value. + * \param b a pointer filled in with the current blue color value. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -445,8 +446,8 @@ extern DECLSPEC int SDLCALL SDL_GetTextureColorMod(SDL_Texture * texture, * Alpha modulation is not always supported by the renderer; it will return -1 * if alpha modulation is not supported. * - * \param texture the texture to update - * \param alpha the source alpha value multiplied into copy operations + * \param texture the texture to update. + * \param alpha the source alpha value multiplied into copy operations. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -461,8 +462,8 @@ extern DECLSPEC int SDLCALL SDL_SetTextureAlphaMod(SDL_Texture * texture, /** * Get the additional alpha value multiplied into render copy operations. * - * \param texture the texture to query - * \param alpha a pointer filled in with the current alpha value + * \param texture the texture to query. + * \param alpha a pointer filled in with the current alpha value. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -480,8 +481,8 @@ extern DECLSPEC int SDLCALL SDL_GetTextureAlphaMod(SDL_Texture * texture, * If the blend mode is not supported, the closest supported mode is chosen * and this function returns -1. * - * \param texture the texture to update - * \param blendMode the SDL_BlendMode to use for texture blending + * \param texture the texture to update. + * \param blendMode the SDL_BlendMode to use for texture blending. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -496,8 +497,8 @@ extern DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_Texture * texture, /** * Get the blend mode used for texture copy operations. * - * \param texture the texture to query - * \param blendMode a pointer filled in with the current SDL_BlendMode + * \param texture the texture to query. + * \param blendMode a pointer filled in with the current SDL_BlendMode. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -579,12 +580,12 @@ extern DECLSPEC void * SDLCALL SDL_GetTextureUserData(SDL_Texture * texture); * While this function will work with streaming textures, for optimization * reasons you may not get the pixels back if you lock the texture afterward. * - * \param texture the texture to update + * \param texture the texture to update. * \param rect an SDL_Rect structure representing the area to update, or NULL - * to update the entire texture - * \param pixels the raw pixel data in the format of the texture + * to update the entire texture. + * \param pixels the raw pixel data in the format of the texture. * \param pitch the number of bytes in a row of pixel data, including padding - * between lines + * between lines. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -606,18 +607,18 @@ extern DECLSPEC int SDLCALL SDL_UpdateTexture(SDL_Texture * texture, * block of Y and U/V planes in the proper order, but this function is * available if your pixel data is not contiguous. * - * \param texture the texture to update + * \param texture the texture to update. * \param rect a pointer to the rectangle of pixels to update, or NULL to - * update the entire texture - * \param Yplane the raw pixel data for the Y plane + * update the entire texture. + * \param Yplane the raw pixel data for the Y plane. * \param Ypitch the number of bytes between rows of pixel data for the Y - * plane - * \param Uplane the raw pixel data for the U plane + * plane. + * \param Uplane the raw pixel data for the U plane. * \param Upitch the number of bytes between rows of pixel data for the U - * plane - * \param Vplane the raw pixel data for the V plane + * plane. + * \param Vplane the raw pixel data for the V plane. * \param Vpitch the number of bytes between rows of pixel data for the V - * plane + * plane. * \returns 0 on success or -1 if the texture is not valid; call * SDL_GetError() for more information. * @@ -638,7 +639,7 @@ extern DECLSPEC int SDLCALL SDL_UpdateYUVTexture(SDL_Texture * texture, * block of NV12/21 planes in the proper order, but this function is available * if your pixel data is not contiguous. * - * \param texture the texture to update + * \param texture the texture to update. * \param rect a pointer to the rectangle of pixels to update, or NULL to * update the entire texture. * \param Yplane the raw pixel data for the Y plane. @@ -668,13 +669,13 @@ extern DECLSPEC int SDLCALL SDL_UpdateNVTexture(SDL_Texture * texture, * changes. * * \param texture the texture to lock for access, which was created with - * `SDL_TEXTUREACCESS_STREAMING` + * `SDL_TEXTUREACCESS_STREAMING`. * \param rect an SDL_Rect structure representing the area to lock for access; - * NULL to lock the entire texture + * NULL to lock the entire texture. * \param pixels this is filled in with a pointer to the locked pixels, - * appropriately offset by the locked area + * appropriately offset by the locked area. * \param pitch this is filled in with the pitch of the locked pixels; the - * pitch is the length of one row in bytes + * pitch is the length of one row in bytes. * \returns 0 on success or a negative error code if the texture is not valid * or was not created with `SDL_TEXTUREACCESS_STREAMING`; call * SDL_GetError() for more information. @@ -706,13 +707,13 @@ extern DECLSPEC int SDLCALL SDL_LockTexture(SDL_Texture * texture, * or SDL_DestroyTexture(). The caller should not free it. * * \param texture the texture to lock for access, which was created with - * `SDL_TEXTUREACCESS_STREAMING` + * `SDL_TEXTUREACCESS_STREAMING`. * \param rect a pointer to the rectangle to lock for access. If the rect is - * NULL, the entire texture will be locked + * NULL, the entire texture will be locked. * \param surface this is filled in with an SDL surface representing the - * locked area + * locked area. * \returns 0 on success, or -1 if the texture is not valid or was not created - * with `SDL_TEXTUREACCESS_STREAMING` + * with `SDL_TEXTUREACCESS_STREAMING`. * * \since This function is available since SDL 2.0.12. * @@ -734,7 +735,7 @@ extern DECLSPEC int SDLCALL SDL_LockTextureToSurface(SDL_Texture *texture, * Which is to say: locking and immediately unlocking a texture can result in * corrupted textures, depending on the renderer in use. * - * \param texture a texture locked by SDL_LockTexture() + * \param texture a texture locked by SDL_LockTexture(). * * \since This function is available since SDL 2.0.0. * @@ -745,7 +746,7 @@ extern DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture * texture); /** * Determine whether a renderer supports the use of render targets. * - * \param renderer the renderer that will be checked + * \param renderer the renderer that will be checked. * \returns SDL_TRUE if supported or SDL_FALSE if not. * * \since This function is available since SDL 2.0.0. @@ -763,9 +764,12 @@ extern DECLSPEC SDL_bool SDLCALL SDL_RenderTargetSupported(SDL_Renderer *rendere * * The default render target is the window for which the renderer was created. * To stop rendering to a texture and render to the window again, call this - * function with a NULL `texture`. + * function with a NULL `texture`. This will reset the renderer's viewport, + * clipping rectangle, and scaling settings to the state they were in before + * setting a non-NULL `texture` target, losing any changes made in the + * meantime. * - * \param renderer the rendering context + * \param renderer the rendering context. * \param texture the targeted texture, which must be created with the * `SDL_TEXTUREACCESS_TARGET` flag, or NULL to render to the * window instead of a texture. @@ -783,9 +787,9 @@ extern DECLSPEC int SDLCALL SDL_SetRenderTarget(SDL_Renderer *renderer, * Get the current render target. * * The default render target is the window for which the renderer was created, - * and is reported a NULL here. + * and is reported as NULL here. * - * \param renderer the rendering context + * \param renderer the rendering context. * \returns the current render target or NULL for the default render target. * * \since This function is available since SDL 2.0.0. @@ -810,9 +814,9 @@ extern DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *renderer * If this function results in scaling or subpixel drawing by the rendering * backend, it will be handled using the appropriate quality hints. * - * \param renderer the renderer for which resolution should be set - * \param w the width of the logical resolution - * \param h the height of the logical resolution + * \param renderer the renderer for which resolution should be set. + * \param w the width of the logical resolution. + * \param h the height of the logical resolution. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -833,9 +837,9 @@ extern DECLSPEC int SDLCALL SDL_RenderSetLogicalSize(SDL_Renderer * renderer, in * When using a target texture: Never return 0 for `w` and `h` at first. Then * it returns the logical width and height that are set. * - * \param renderer a rendering context - * \param w an int to be filled with the width - * \param h an int to be filled with the height + * \param renderer a rendering context. + * \param w an int to be filled with the width. + * \param h an int to be filled with the height. * * \since This function is available since SDL 2.0.0. * @@ -850,8 +854,8 @@ extern DECLSPEC void SDLCALL SDL_RenderGetLogicalSize(SDL_Renderer * renderer, i * when a resolution is between two multiples of a logical size, the viewport * size is rounded down to the lower multiple. * - * \param renderer the renderer for which integer scaling should be set - * \param enable enable or disable the integer scaling for rendering + * \param renderer the renderer for which integer scaling should be set. + * \param enable enable or disable the integer scaling for rendering. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -866,7 +870,7 @@ extern DECLSPEC int SDLCALL SDL_RenderSetIntegerScale(SDL_Renderer * renderer, /** * Get whether integer scales are forced for resolution-independent rendering. * - * \param renderer the renderer from which integer scaling should be queried + * \param renderer the renderer from which integer scaling should be queried. * \returns SDL_TRUE if integer scales are forced or SDL_FALSE if not and on * failure; call SDL_GetError() for more information. * @@ -882,9 +886,9 @@ extern DECLSPEC SDL_bool SDLCALL SDL_RenderGetIntegerScale(SDL_Renderer * render * When the window is resized, the viewport is reset to fill the entire new * window size. * - * \param renderer the rendering context + * \param renderer the rendering context. * \param rect the SDL_Rect structure representing the drawing area, or NULL - * to set the viewport to the entire target + * to set the viewport to the entire target. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -898,8 +902,8 @@ extern DECLSPEC int SDLCALL SDL_RenderSetViewport(SDL_Renderer * renderer, /** * Get the drawing area for the current target. * - * \param renderer the rendering context - * \param rect an SDL_Rect structure filled in with the current drawing area + * \param renderer the rendering context. + * \param rect an SDL_Rect structure filled in with the current drawing area. * * \since This function is available since SDL 2.0.0. * @@ -912,9 +916,9 @@ extern DECLSPEC void SDLCALL SDL_RenderGetViewport(SDL_Renderer * renderer, * Set the clip rectangle for rendering on the specified target. * * \param renderer the rendering context for which clip rectangle should be - * set + * set. * \param rect an SDL_Rect structure representing the clip area, relative to - * the viewport, or NULL to disable clipping + * the viewport, or NULL to disable clipping. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -930,9 +934,9 @@ extern DECLSPEC int SDLCALL SDL_RenderSetClipRect(SDL_Renderer * renderer, * Get the clip rectangle for the current target. * * \param renderer the rendering context from which clip rectangle should be - * queried + * queried. * \param rect an SDL_Rect structure filled in with the current clipping area - * or an empty rectangle if clipping is disabled + * or an empty rectangle if clipping is disabled. * * \since This function is available since SDL 2.0.0. * @@ -945,7 +949,7 @@ extern DECLSPEC void SDLCALL SDL_RenderGetClipRect(SDL_Renderer * renderer, /** * Get whether clipping is enabled on the given renderer. * - * \param renderer the renderer from which clip state should be queried + * \param renderer the renderer from which clip state should be queried. * \returns SDL_TRUE if clipping is enabled or SDL_FALSE if not; call * SDL_GetError() for more information. * @@ -968,9 +972,9 @@ extern DECLSPEC SDL_bool SDLCALL SDL_RenderIsClipEnabled(SDL_Renderer * renderer * will be handled using the appropriate quality hints. For best results use * integer scaling factors. * - * \param renderer a rendering context - * \param scaleX the horizontal scaling factor - * \param scaleY the vertical scaling factor + * \param renderer a rendering context. + * \param scaleX the horizontal scaling factor. + * \param scaleY the vertical scaling factor. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -985,9 +989,9 @@ extern DECLSPEC int SDLCALL SDL_RenderSetScale(SDL_Renderer * renderer, /** * Get the drawing scale for the current target. * - * \param renderer the renderer from which drawing scale should be queried - * \param scaleX a pointer filled in with the horizontal scaling factor - * \param scaleY a pointer filled in with the vertical scaling factor + * \param renderer the renderer from which drawing scale should be queried. + * \param scaleX a pointer filled in with the horizontal scaling factor. + * \param scaleY a pointer filled in with the vertical scaling factor. * * \since This function is available since SDL 2.0.0. * @@ -1004,11 +1008,11 @@ extern DECLSPEC void SDLCALL SDL_RenderGetScale(SDL_Renderer * renderer, * and logical renderer size set * * \param renderer the renderer from which the logical coordinates should be - * calculated - * \param windowX the real X coordinate in the window - * \param windowY the real Y coordinate in the window - * \param logicalX the pointer filled with the logical x coordinate - * \param logicalY the pointer filled with the logical y coordinate + * calculated. + * \param windowX the real X coordinate in the window. + * \param windowY the real Y coordinate in the window. + * \param logicalX the pointer filled with the logical x coordinate. + * \param logicalY the pointer filled with the logical y coordinate. * * \since This function is available since SDL 2.0.18. * @@ -1030,11 +1034,11 @@ extern DECLSPEC void SDLCALL SDL_RenderWindowToLogical(SDL_Renderer * renderer, * and logical renderer size set * * \param renderer the renderer from which the window coordinates should be - * calculated - * \param logicalX the logical x coordinate - * \param logicalY the logical y coordinate - * \param windowX the pointer filled with the real X coordinate in the window - * \param windowY the pointer filled with the real Y coordinate in the window + * calculated. + * \param logicalX the logical x coordinate. + * \param logicalY the logical y coordinate. + * \param windowX the pointer filled with the real X coordinate in the window. + * \param windowY the pointer filled with the real Y coordinate in the window. * * \since This function is available since SDL 2.0.18. * @@ -1053,13 +1057,13 @@ extern DECLSPEC void SDLCALL SDL_RenderLogicalToWindow(SDL_Renderer * renderer, * Set the color for drawing or filling rectangles, lines, and points, and for * SDL_RenderClear(). * - * \param renderer the rendering context - * \param r the red value used to draw on the rendering target - * \param g the green value used to draw on the rendering target - * \param b the blue value used to draw on the rendering target + * \param renderer the rendering context. + * \param r the red value used to draw on the rendering target. + * \param g the green value used to draw on the rendering target. + * \param b the blue value used to draw on the rendering target. * \param a the alpha value used to draw on the rendering target; usually * `SDL_ALPHA_OPAQUE` (255). Use SDL_SetRenderDrawBlendMode to - * specify how the alpha channel is used + * specify how the alpha channel is used. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1083,15 +1087,15 @@ extern DECLSPEC int SDLCALL SDL_SetRenderDrawColor(SDL_Renderer * renderer, /** * Get the color used for drawing operations (Rect, Line and Clear). * - * \param renderer the rendering context + * \param renderer the rendering context. * \param r a pointer filled in with the red value used to draw on the - * rendering target + * rendering target. * \param g a pointer filled in with the green value used to draw on the - * rendering target + * rendering target. * \param b a pointer filled in with the blue value used to draw on the - * rendering target + * rendering target. * \param a a pointer filled in with the alpha value used to draw on the - * rendering target; usually `SDL_ALPHA_OPAQUE` (255) + * rendering target; usually `SDL_ALPHA_OPAQUE` (255). * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1108,8 +1112,8 @@ extern DECLSPEC int SDLCALL SDL_GetRenderDrawColor(SDL_Renderer * renderer, * * If the blend mode is not supported, the closest supported mode is chosen. * - * \param renderer the rendering context - * \param blendMode the SDL_BlendMode to use for blending + * \param renderer the rendering context. + * \param blendMode the SDL_BlendMode to use for blending. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1131,8 +1135,8 @@ extern DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer * renderer, /** * Get the blend mode used for drawing operations. * - * \param renderer the rendering context - * \param blendMode a pointer filled in with the current SDL_BlendMode + * \param renderer the rendering context. + * \param blendMode a pointer filled in with the current SDL_BlendMode. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1149,7 +1153,7 @@ extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer * renderer, * This function clears the entire rendering target, ignoring the viewport and * the clip rectangle. * - * \param renderer the rendering context + * \param renderer the rendering context. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1165,9 +1169,9 @@ extern DECLSPEC int SDLCALL SDL_RenderClear(SDL_Renderer * renderer); * SDL_RenderDrawPoint() draws a single point. If you want to draw multiple, * use SDL_RenderDrawPoints() instead. * - * \param renderer the rendering context - * \param x the x coordinate of the point - * \param y the y coordinate of the point + * \param renderer the rendering context. + * \param x the x coordinate of the point. + * \param y the y coordinate of the point. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1190,10 +1194,10 @@ extern DECLSPEC int SDLCALL SDL_RenderDrawPoint(SDL_Renderer * renderer, /** * Draw multiple points on the current rendering target. * - * \param renderer the rendering context + * \param renderer the rendering context. * \param points an array of SDL_Point structures that represent the points to - * draw - * \param count the number of points to draw + * draw. + * \param count the number of points to draw. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1220,11 +1224,11 @@ extern DECLSPEC int SDLCALL SDL_RenderDrawPoints(SDL_Renderer * renderer, * SDL_RenderDrawLine() draws the line to include both end points. If you want * to draw multiple, connecting lines use SDL_RenderDrawLines() instead. * - * \param renderer the rendering context - * \param x1 the x coordinate of the start point - * \param y1 the y coordinate of the start point - * \param x2 the x coordinate of the end point - * \param y2 the y coordinate of the end point + * \param renderer the rendering context. + * \param x1 the x coordinate of the start point. + * \param y1 the y coordinate of the start point. + * \param x2 the x coordinate of the end point. + * \param y2 the y coordinate of the end point. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1247,10 +1251,10 @@ extern DECLSPEC int SDLCALL SDL_RenderDrawLine(SDL_Renderer * renderer, /** * Draw a series of connected lines on the current rendering target. * - * \param renderer the rendering context + * \param renderer the rendering context. * \param points an array of SDL_Point structures representing points along - * the lines - * \param count the number of points, drawing count-1 lines + * the lines. + * \param count the number of points, drawing count-1 lines. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1274,9 +1278,9 @@ extern DECLSPEC int SDLCALL SDL_RenderDrawLines(SDL_Renderer * renderer, /** * Draw a rectangle on the current rendering target. * - * \param renderer the rendering context + * \param renderer the rendering context. * \param rect an SDL_Rect structure representing the rectangle to draw, or - * NULL to outline the entire rendering target + * NULL to outline the entire rendering target. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1299,10 +1303,10 @@ extern DECLSPEC int SDLCALL SDL_RenderDrawRect(SDL_Renderer * renderer, /** * Draw some number of rectangles on the current rendering target. * - * \param renderer the rendering context + * \param renderer the rendering context. * \param rects an array of SDL_Rect structures representing the rectangles to - * be drawn - * \param count the number of rectangles + * be drawn. + * \param count the number of rectangles. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1330,9 +1334,9 @@ extern DECLSPEC int SDLCALL SDL_RenderDrawRects(SDL_Renderer * renderer, * color's alpha value is ignored unless blending is enabled with the * appropriate call to SDL_SetRenderDrawBlendMode(). * - * \param renderer the rendering context + * \param renderer the rendering context. * \param rect the SDL_Rect structure representing the rectangle to fill, or - * NULL for the entire rendering target + * NULL for the entire rendering target. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1356,10 +1360,10 @@ extern DECLSPEC int SDLCALL SDL_RenderFillRect(SDL_Renderer * renderer, * Fill some number of rectangles on the current rendering target with the * drawing color. * - * \param renderer the rendering context + * \param renderer the rendering context. * \param rects an array of SDL_Rect structures representing the rectangles to - * be filled - * \param count the number of rectangles + * be filled. + * \param count the number of rectangles. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1390,12 +1394,13 @@ extern DECLSPEC int SDLCALL SDL_RenderFillRects(SDL_Renderer * renderer, * The texture alpha is affected based on its alpha modulation set by * SDL_SetTextureAlphaMod(). * - * \param renderer the rendering context - * \param texture the source texture - * \param srcrect the source SDL_Rect structure or NULL for the entire texture + * \param renderer the rendering context. + * \param texture the source texture. + * \param srcrect the source SDL_Rect structure or NULL for the entire + * texture. * \param dstrect the destination SDL_Rect structure or NULL for the entire * rendering target; the texture will be stretched to fill the - * given rectangle + * given rectangle. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1428,18 +1433,19 @@ extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, * The texture alpha is affected based on its alpha modulation set by * SDL_SetTextureAlphaMod(). * - * \param renderer the rendering context - * \param texture the source texture - * \param srcrect the source SDL_Rect structure or NULL for the entire texture + * \param renderer the rendering context. + * \param texture the source texture. + * \param srcrect the source SDL_Rect structure or NULL for the entire + * texture. * \param dstrect the destination SDL_Rect structure or NULL for the entire - * rendering target + * rendering target. * \param angle an angle in degrees that indicates the rotation that will be - * applied to dstrect, rotating it in a clockwise direction + * applied to dstrect, rotating it in a clockwise direction. * \param center a pointer to a point indicating the point around which * dstrect will be rotated (if NULL, rotation will be done - * around `dstrect.w / 2`, `dstrect.h / 2`) + * around `dstrect.w / 2`, `dstrect.h / 2`). * \param flip a SDL_RendererFlip value stating which flipping actions should - * be performed on the texture + * be performed on the texture. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1465,7 +1471,7 @@ extern DECLSPEC int SDLCALL SDL_RenderCopyEx(SDL_Renderer * renderer, * \param renderer The renderer which should draw a point. * \param x The x coordinate of the point. * \param y The y coordinate of the point. - * \return 0 on success, or -1 on error + * \return 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.10. */ @@ -1476,9 +1482,9 @@ extern DECLSPEC int SDLCALL SDL_RenderDrawPointF(SDL_Renderer * renderer, * Draw multiple points on the current rendering target at subpixel precision. * * \param renderer The renderer which should draw multiple points. - * \param points The points to draw - * \param count The number of points to draw - * \return 0 on success, or -1 on error + * \param points The points to draw. + * \param count The number of points to draw. + * \return 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.10. */ @@ -1494,7 +1500,7 @@ extern DECLSPEC int SDLCALL SDL_RenderDrawPointsF(SDL_Renderer * renderer, * \param y1 The y coordinate of the start point. * \param x2 The x coordinate of the end point. * \param y2 The y coordinate of the end point. - * \return 0 on success, or -1 on error + * \return 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.10. */ @@ -1506,9 +1512,9 @@ extern DECLSPEC int SDLCALL SDL_RenderDrawLineF(SDL_Renderer * renderer, * subpixel precision. * * \param renderer The renderer which should draw multiple lines. - * \param points The points along the lines - * \param count The number of points, drawing count-1 lines - * \return 0 on success, or -1 on error + * \param points The points along the lines. + * \param count The number of points, drawing count-1 lines. + * \return 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.10. */ @@ -1522,7 +1528,7 @@ extern DECLSPEC int SDLCALL SDL_RenderDrawLinesF(SDL_Renderer * renderer, * \param renderer The renderer which should draw a rectangle. * \param rect A pointer to the destination rectangle, or NULL to outline the * entire rendering target. - * \return 0 on success, or -1 on error + * \return 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.10. */ @@ -1536,7 +1542,7 @@ extern DECLSPEC int SDLCALL SDL_RenderDrawRectF(SDL_Renderer * renderer, * \param renderer The renderer which should draw multiple rectangles. * \param rects A pointer to an array of destination rectangles. * \param count The number of rectangles. - * \return 0 on success, or -1 on error + * \return 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.10. */ @@ -1551,7 +1557,7 @@ extern DECLSPEC int SDLCALL SDL_RenderDrawRectsF(SDL_Renderer * renderer, * \param renderer The renderer which should fill a rectangle. * \param rect A pointer to the destination rectangle, or NULL for the entire * rendering target. - * \return 0 on success, or -1 on error + * \return 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.10. */ @@ -1565,7 +1571,7 @@ extern DECLSPEC int SDLCALL SDL_RenderFillRectF(SDL_Renderer * renderer, * \param renderer The renderer which should fill multiple rectangles. * \param rects A pointer to an array of destination rectangles. * \param count The number of rectangles. - * \return 0 on success, or -1 on error + * \return 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.10. */ @@ -1583,7 +1589,7 @@ extern DECLSPEC int SDLCALL SDL_RenderFillRectsF(SDL_Renderer * renderer, * texture. * \param dstrect A pointer to the destination rectangle, or NULL for the * entire rendering target. - * \return 0 on success, or -1 on error + * \return 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.10. */ @@ -1603,13 +1609,13 @@ extern DECLSPEC int SDLCALL SDL_RenderCopyF(SDL_Renderer * renderer, * \param dstrect A pointer to the destination rectangle, or NULL for the * entire rendering target. * \param angle An angle in degrees that indicates the rotation that will be - * applied to dstrect, rotating it in a clockwise direction + * applied to dstrect, rotating it in a clockwise direction. * \param center A pointer to a point indicating the point around which * dstrect will be rotated (if NULL, rotation will be done * around dstrect.w/2, dstrect.h/2). * \param flip An SDL_RendererFlip value stating which flipping actions should - * be performed on the texture - * \return 0 on success, or -1 on error + * be performed on the texture. + * \return 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.10. */ @@ -1634,7 +1640,7 @@ extern DECLSPEC int SDLCALL SDL_RenderCopyExF(SDL_Renderer * renderer, * array, if NULL all vertices will be rendered in sequential * order. * \param num_indices Number of indices. - * \return 0 on success, or -1 if the operation is not supported + * \return 0 on success, or -1 if the operation is not supported. * * \since This function is available since SDL 2.0.18. * @@ -1653,18 +1659,18 @@ extern DECLSPEC int SDLCALL SDL_RenderGeometry(SDL_Renderer *renderer, * * \param renderer The rendering context. * \param texture (optional) The SDL texture to use. - * \param xy Vertex positions - * \param xy_stride Byte size to move from one element to the next element - * \param color Vertex colors (as SDL_Color) - * \param color_stride Byte size to move from one element to the next element - * \param uv Vertex normalized texture coordinates - * \param uv_stride Byte size to move from one element to the next element + * \param xy Vertex positions. + * \param xy_stride Byte size to move from one element to the next element. + * \param color Vertex colors (as SDL_Color). + * \param color_stride Byte size to move from one element to the next element. + * \param uv Vertex normalized texture coordinates. + * \param uv_stride Byte size to move from one element to the next element. * \param num_vertices Number of vertices. * \param indices (optional) An array of indices into the 'vertices' arrays, * if NULL all vertices will be rendered in sequential order. * \param num_indices Number of indices. - * \param size_indices Index size: 1 (byte), 2 (short), 4 (int) - * \return 0 on success, or -1 if the operation is not supported + * \param size_indices Index size: 1 (byte), 2 (short), 4 (int). + * \return 0 on success, or -1 if the operation is not supported. * * \since This function is available since SDL 2.0.18. * @@ -1693,13 +1699,13 @@ extern DECLSPEC int SDLCALL SDL_RenderGeometryRaw(SDL_Renderer *renderer, * but it might contain additional padding (for example, 24bit RGB Windows * Bitmap data pads all rows to multiples of 4 bytes). * - * \param renderer the rendering context + * \param renderer the rendering context. * \param rect an SDL_Rect structure representing the area to read, or NULL - * for the entire render target + * for the entire render target. * \param format an SDL_PixelFormatEnum value of the desired format of the - * pixel data, or 0 to use the format of the rendering target - * \param pixels a pointer to the pixel data to copy into - * \param pitch the pitch of the `pixels` parameter + * pixel data, or 0 to use the format of the rendering target. + * \param pixels a pointer to the pixel data to copy into. + * \param pitch the pitch of the `pixels` parameter. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1729,7 +1735,7 @@ extern DECLSPEC int SDLCALL SDL_RenderReadPixels(SDL_Renderer * renderer, * starting each new frame's drawing, even if you plan to overwrite every * pixel. * - * \param renderer the rendering context + * \param renderer the rendering context. * * \threadsafety You may only call this function on the main thread. If this * happens to work on a background thread on any given platform @@ -1738,6 +1744,7 @@ extern DECLSPEC int SDLCALL SDL_RenderReadPixels(SDL_Renderer * renderer, * * \since This function is available since SDL 2.0.0. * + * \sa SDL_CreateRenderer * \sa SDL_RenderClear * \sa SDL_RenderDrawLine * \sa SDL_RenderDrawLines @@ -1758,7 +1765,7 @@ extern DECLSPEC void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer); * Passing NULL or an otherwise invalid texture will set the SDL error message * to "Invalid texture". * - * \param texture the texture to destroy + * \param texture the texture to destroy. * * \since This function is available since SDL 2.0.0. * @@ -1773,7 +1780,7 @@ extern DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_Texture * texture); * If `renderer` is NULL, this function will return immediately after setting * the SDL error message to "Invalid renderer". See SDL_GetError(). * - * \param renderer the rendering context + * \param renderer the rendering context. * * \since This function is available since SDL 2.0.0. * @@ -1804,7 +1811,7 @@ extern DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_Renderer * renderer); * and earlier, as earlier versions did not queue rendering commands at all, * instead flushing them to the OS immediately. * - * \param renderer the rendering context + * \param renderer the rendering context. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1835,11 +1842,11 @@ extern DECLSPEC int SDLCALL SDL_RenderFlush(SDL_Renderer * renderer); * re-order the color channels in the shaders phase, so the uploaded texture * may have swapped color channels. * - * \param texture the texture to bind to the current OpenGL/ES/ES2 context + * \param texture the texture to bind to the current OpenGL/ES/ES2 context. * \param texw a pointer to a float value which will be filled with the - * texture width or NULL if you don't need that value + * texture width or NULL if you don't need that value. * \param texh a pointer to a float value which will be filled with the - * texture height or NULL if you don't need that value + * texture height or NULL if you don't need that value. * \returns 0 on success, or -1 if the operation is not supported; call * SDL_GetError() for more information. * @@ -1855,8 +1862,9 @@ extern DECLSPEC int SDLCALL SDL_GL_BindTexture(SDL_Texture *texture, float *texw * * See SDL_GL_BindTexture() for examples on how to use these functions * - * \param texture the texture to unbind from the current OpenGL/ES/ES2 context - * \returns 0 on success, or -1 if the operation is not supported + * \param texture the texture to unbind from the current OpenGL/ES/ES2 + * context. + * \returns 0 on success, or -1 if the operation is not supported. * * \since This function is available since SDL 2.0.0. * @@ -1871,9 +1879,9 @@ extern DECLSPEC int SDLCALL SDL_GL_UnbindTexture(SDL_Texture *texture); * This function returns `void *`, so SDL doesn't have to include Metal's * headers, but it can be safely cast to a `CAMetalLayer *`. * - * \param renderer The renderer to query + * \param renderer The renderer to query. * \returns a `CAMetalLayer *` on success, or NULL if the renderer isn't a - * Metal renderer + * Metal renderer. * * \since This function is available since SDL 2.0.8. * @@ -1892,7 +1900,7 @@ extern DECLSPEC void *SDLCALL SDL_RenderGetMetalLayer(SDL_Renderer * renderer); * hidden/minimized/offscreen. This doesn't apply to command encoders for * render targets, just the window's backbuffer. Check your return values! * - * \param renderer The renderer to query + * \param renderer The renderer to query. * \returns an `id` on success, or NULL if the * renderer isn't a Metal renderer or there was an error. * @@ -1905,9 +1913,9 @@ extern DECLSPEC void *SDLCALL SDL_RenderGetMetalCommandEncoder(SDL_Renderer * re /** * Toggle VSync of the given renderer. * - * \param renderer The renderer to toggle - * \param vsync 1 for on, 0 for off. All other values are reserved - * \returns a 0 int on success, or non-zero on failure + * \param renderer The renderer to toggle. + * \param vsync 1 for on, 0 for off. All other values are reserved. + * \returns a 0 int on success, or non-zero on failure. * * \since This function is available since SDL 2.0.18. */ diff --git a/vs/sdl2/include/SDL_rwops.h b/vs/sdl2/include/SDL_rwops.h index 9dd99f92b15..43c1b0ec777 100644 --- a/vs/sdl2/include/SDL_rwops.h +++ b/vs/sdl2/include/SDL_rwops.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,11 +19,13 @@ 3. This notice may not be removed or altered from any source distribution. */ +/* WIKI CATEGORY: RWOPS */ + /** - * \file SDL_rwops.h + * # CategoryRWOPS * - * This file provides a general interface for SDL to read and write - * data streams. It can easily be extended to files, memory, etc. + * This file provides a general interface for SDL to read and write data + * streams. It can easily be extended to files, memory, etc. */ #ifndef SDL_rwops_h_ @@ -57,7 +59,7 @@ typedef struct SDL_RWops Sint64 (SDLCALL * size) (struct SDL_RWops * context); /** - * Seek to \c offset relative to \c whence, one of stdio's whence values: + * Seek to `offset` relative to `whence`, one of stdio's whence values: * RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END * * \return the final offset in the data stream, or -1 on error. @@ -66,8 +68,8 @@ typedef struct SDL_RWops int whence); /** - * Read up to \c maxnum objects each of size \c size from the data - * stream to the area pointed at by \c ptr. + * Read up to `maxnum` objects each of size `size` from the data + * stream to the area pointed at by `ptr`. * * \return the number of objects read, or 0 at error or end of file. */ @@ -75,8 +77,8 @@ typedef struct SDL_RWops size_t size, size_t maxnum); /** - * Write exactly \c num objects each of size \c size from the area - * pointed at by \c ptr to data stream. + * Write exactly `num` objects each of size `size` from the area + * pointed at by `ptr` to data stream. * * \return the number of objects written, or 0 at error or end of file. */ @@ -186,7 +188,7 @@ typedef struct SDL_RWops * * Closing the SDL_RWops will close the file handle SDL is holding internally. * - * \param file a UTF-8 string representing the filename to open + * \param file a UTF-8 string representing the filename to open. * \param mode an ASCII string representing the mode to be used for opening * the file. * \returns a pointer to the SDL_RWops structure that is created, or NULL on @@ -224,10 +226,10 @@ extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp, SDL_bool autoclose); * `FILE*`, depending on what system headers are available to SDL. It is * always intended to be the `FILE*` type from the C runtime's stdio.h. * - * \param fp the `FILE*` that feeds the SDL_RWops stream + * \param fp the `FILE*` that feeds the SDL_RWops stream. * \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, * SDL_FALSE to leave the `FILE*` open when the RWops is - * closed + * closed. * \returns a pointer to the SDL_RWops structure that is created, or NULL on * failure; call SDL_GetError() for more information. * @@ -260,8 +262,8 @@ extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(void * fp, * If you need to make sure the RWops never writes to the memory buffer, you * should use SDL_RWFromConstMem() with a read-only buffer of memory instead. * - * \param mem a pointer to a buffer to feed an SDL_RWops stream - * \param size the buffer size, in bytes + * \param mem a pointer to a buffer to feed an SDL_RWops stream. + * \param size the buffer size, in bytes. * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call * SDL_GetError() for more information. * @@ -295,8 +297,8 @@ extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size); * If you need to write to a memory buffer, you should use SDL_RWFromMem() * with a writable buffer of memory instead. * - * \param mem a pointer to a read-only buffer to feed an SDL_RWops stream - * \param size the buffer size, in bytes + * \param mem a pointer to a read-only buffer to feed an SDL_RWops stream. + * \param size the buffer size, in bytes. * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call * SDL_GetError() for more information. * @@ -358,7 +360,7 @@ extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); * creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must * be responsible for managing that memory in their **close** method. * - * \param area the SDL_RWops structure to be freed + * \param area the SDL_RWops structure to be freed. * * \since This function is available since SDL 2.0.0. * @@ -366,6 +368,7 @@ extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); */ extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); +/* Possible `whence` values for SDL_RWops seeking... */ #define RW_SEEK_SET 0 /**< Seek from the beginning of data */ #define RW_SEEK_CUR 1 /**< Seek relative to current read point */ #define RW_SEEK_END 2 /**< Seek relative to the end of data */ @@ -375,7 +378,7 @@ extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); * * Prior to SDL 2.0.10, this function was a macro. * - * \param context the SDL_RWops to get the size of the data stream from + * \param context the SDL_RWops to get the size of the data stream from. * \returns the size of the data stream in the SDL_RWops on success, -1 if * unknown or a negative error code on failure; call SDL_GetError() * for more information. @@ -402,10 +405,10 @@ extern DECLSPEC Sint64 SDLCALL SDL_RWsize(SDL_RWops *context); * * Prior to SDL 2.0.10, this function was a macro. * - * \param context a pointer to an SDL_RWops structure + * \param context a pointer to an SDL_RWops structure. * \param offset an offset in bytes, relative to **whence** location; can be - * negative - * \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END` + * negative. + * \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END`. * \returns the final offset in the data stream after the seek or -1 on error. * * \since This function is available since SDL 2.0.10. @@ -432,7 +435,7 @@ extern DECLSPEC Sint64 SDLCALL SDL_RWseek(SDL_RWops *context, * Prior to SDL 2.0.10, this function was a macro. * * \param context a SDL_RWops data stream object from which to get the current - * offset + * offset. * \returns the current offset in the stream, or -1 if the information can not * be determined. * @@ -462,10 +465,10 @@ extern DECLSPEC Sint64 SDLCALL SDL_RWtell(SDL_RWops *context); * * Prior to SDL 2.0.10, this function was a macro. * - * \param context a pointer to an SDL_RWops structure - * \param ptr a pointer to a buffer to read data into - * \param size the size of each object to read, in bytes - * \param maxnum the maximum number of objects to be read + * \param context a pointer to an SDL_RWops structure. + * \param ptr a pointer to a buffer to read data into. + * \param size the size of each object to read, in bytes. + * \param maxnum the maximum number of objects to be read. * \returns the number of objects read, or 0 at error or end of file; call * SDL_GetError() for more information. * @@ -496,10 +499,10 @@ extern DECLSPEC size_t SDLCALL SDL_RWread(SDL_RWops *context, * * Prior to SDL 2.0.10, this function was a macro. * - * \param context a pointer to an SDL_RWops structure - * \param ptr a pointer to a buffer containing data to write - * \param size the size of an object to write, in bytes - * \param num the number of objects to write + * \param context a pointer to an SDL_RWops structure. + * \param ptr a pointer to a buffer containing data to write. + * \param size the size of an object to write, in bytes. + * \param num the number of objects to write. * \returns the number of objects written, which will be less than **num** on * error; call SDL_GetError() for more information. * @@ -530,7 +533,7 @@ extern DECLSPEC size_t SDLCALL SDL_RWwrite(SDL_RWops *context, * * Prior to SDL 2.0.10, this function was a macro. * - * \param context SDL_RWops structure to close + * \param context SDL_RWops structure to close. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -555,9 +558,9 @@ extern DECLSPEC int SDLCALL SDL_RWclose(SDL_RWops *context); * * The data should be freed with SDL_free(). * - * \param src the SDL_RWops to read all available data from - * \param datasize if not NULL, will store the number of bytes read - * \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning + * \param src the SDL_RWops to read all available data from. + * \param datasize if not NULL, will store the number of bytes read. + * \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning. * \returns the data, or NULL if there was an error. * * \since This function is available since SDL 2.0.6. @@ -578,8 +581,8 @@ extern DECLSPEC void *SDLCALL SDL_LoadFile_RW(SDL_RWops *src, * Prior to SDL 2.0.10, this function was a macro wrapping around * SDL_LoadFile_RW. * - * \param file the path to read all available data from - * \param datasize if not NULL, will store the number of bytes read + * \param file the path to read all available data from. + * \param datasize if not NULL, will store the number of bytes read. * \returns the data, or NULL if there was an error. * * \since This function is available since SDL 2.0.10. @@ -596,7 +599,7 @@ extern DECLSPEC void *SDLCALL SDL_LoadFile(const char *file, size_t *datasize); /** * Use this function to read a byte from an SDL_RWops. * - * \param src the SDL_RWops to read from + * \param src the SDL_RWops to read from. * \returns the read byte on success or 0 on failure; call SDL_GetError() for * more information. * @@ -613,7 +616,7 @@ extern DECLSPEC Uint8 SDLCALL SDL_ReadU8(SDL_RWops * src); * SDL byteswaps the data only if necessary, so the data returned will be in * the native byte order. * - * \param src the stream from which to read data + * \param src the stream from which to read data. * \returns 16 bits of data in the native byte order of the platform. * * \since This function is available since SDL 2.0.0. @@ -629,7 +632,7 @@ extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src); * SDL byteswaps the data only if necessary, so the data returned will be in * the native byte order. * - * \param src the stream from which to read data + * \param src the stream from which to read data. * \returns 16 bits of data in the native byte order of the platform. * * \since This function is available since SDL 2.0.0. @@ -645,7 +648,7 @@ extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src); * SDL byteswaps the data only if necessary, so the data returned will be in * the native byte order. * - * \param src the stream from which to read data + * \param src the stream from which to read data. * \returns 32 bits of data in the native byte order of the platform. * * \since This function is available since SDL 2.0.0. @@ -661,7 +664,7 @@ extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src); * SDL byteswaps the data only if necessary, so the data returned will be in * the native byte order. * - * \param src the stream from which to read data + * \param src the stream from which to read data. * \returns 32 bits of data in the native byte order of the platform. * * \since This function is available since SDL 2.0.0. @@ -677,7 +680,7 @@ extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src); * SDL byteswaps the data only if necessary, so the data returned will be in * the native byte order. * - * \param src the stream from which to read data + * \param src the stream from which to read data. * \returns 64 bits of data in the native byte order of the platform. * * \since This function is available since SDL 2.0.0. @@ -693,7 +696,7 @@ extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src); * SDL byteswaps the data only if necessary, so the data returned will be in * the native byte order. * - * \param src the stream from which to read data + * \param src the stream from which to read data. * \returns 64 bits of data in the native byte order of the platform. * * \since This function is available since SDL 2.0.0. @@ -713,8 +716,8 @@ extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src); /** * Use this function to write a byte to an SDL_RWops. * - * \param dst the SDL_RWops to write to - * \param value the byte value to write + * \param dst the SDL_RWops to write to. + * \param value the byte value to write. * \returns 1 on success or 0 on failure; call SDL_GetError() for more * information. * @@ -732,8 +735,8 @@ extern DECLSPEC size_t SDLCALL SDL_WriteU8(SDL_RWops * dst, Uint8 value); * specifies native format, and the data written will be in little-endian * format. * - * \param dst the stream to which data will be written - * \param value the data to be written, in native format + * \param dst the stream to which data will be written. + * \param value the data to be written, in native format. * \returns 1 on successful write, 0 on error. * * \since This function is available since SDL 2.0.0. @@ -749,8 +752,8 @@ extern DECLSPEC size_t SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value); * SDL byteswaps the data only if necessary, so the application always * specifies native format, and the data written will be in big-endian format. * - * \param dst the stream to which data will be written - * \param value the data to be written, in native format + * \param dst the stream to which data will be written. + * \param value the data to be written, in native format. * \returns 1 on successful write, 0 on error. * * \since This function is available since SDL 2.0.0. @@ -767,8 +770,8 @@ extern DECLSPEC size_t SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value); * specifies native format, and the data written will be in little-endian * format. * - * \param dst the stream to which data will be written - * \param value the data to be written, in native format + * \param dst the stream to which data will be written. + * \param value the data to be written, in native format. * \returns 1 on successful write, 0 on error. * * \since This function is available since SDL 2.0.0. @@ -784,8 +787,8 @@ extern DECLSPEC size_t SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value); * SDL byteswaps the data only if necessary, so the application always * specifies native format, and the data written will be in big-endian format. * - * \param dst the stream to which data will be written - * \param value the data to be written, in native format + * \param dst the stream to which data will be written. + * \param value the data to be written, in native format. * \returns 1 on successful write, 0 on error. * * \since This function is available since SDL 2.0.0. @@ -802,8 +805,8 @@ extern DECLSPEC size_t SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value); * specifies native format, and the data written will be in little-endian * format. * - * \param dst the stream to which data will be written - * \param value the data to be written, in native format + * \param dst the stream to which data will be written. + * \param value the data to be written, in native format. * \returns 1 on successful write, 0 on error. * * \since This function is available since SDL 2.0.0. @@ -819,8 +822,8 @@ extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); * SDL byteswaps the data only if necessary, so the application always * specifies native format, and the data written will be in big-endian format. * - * \param dst the stream to which data will be written - * \param value the data to be written, in native format + * \param dst the stream to which data will be written. + * \param value the data to be written, in native format. * \returns 1 on successful write, 0 on error. * * \since This function is available since SDL 2.0.0. diff --git a/vs/sdl2/include/SDL_scancode.h b/vs/sdl2/include/SDL_scancode.h index fe13d5b7aaa..0652d7ef66d 100644 --- a/vs/sdl2/include/SDL_scancode.h +++ b/vs/sdl2/include/SDL_scancode.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_scancode.h + * # CategoryScancode * - * Defines keyboard scancodes. + * Defines keyboard scancodes. */ #ifndef SDL_scancode_h_ @@ -31,16 +31,16 @@ #include "SDL_stdinc.h" /** - * \brief The SDL keyboard scancode representation. + * The SDL keyboard scancode representation. * - * Values of this type are used to represent keyboard keys, among other places - * in the \link SDL_Keysym::scancode key.keysym.scancode \endlink field of the - * SDL_Event structure. + * Values of this type are used to represent keyboard keys, among other places + * in the SDL_Keysym::scancode key.keysym.scancode field of the SDL_Event + * structure. * - * The values in this enumeration are based on the USB usage page standard: - * https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf + * The values in this enumeration are based on the USB usage page standard: + * https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf */ -typedef enum +typedef enum SDL_Scancode { SDL_SCANCODE_UNKNOWN = 0, diff --git a/vs/sdl2/include/SDL_sensor.h b/vs/sdl2/include/SDL_sensor.h index 8b89ef6a526..d4b1c511d7d 100644 --- a/vs/sdl2/include/SDL_sensor.h +++ b/vs/sdl2/include/SDL_sensor.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,10 +20,9 @@ */ /** - * \file SDL_sensor.h - * - * Include file for SDL sensor event handling + * # CategorySensor * + * Include file for SDL sensor event handling */ #ifndef SDL_sensor_h_ @@ -44,7 +43,7 @@ extern "C" { * \brief SDL_sensor.h * * In order to use these functions, SDL_Init() must have been called - * with the ::SDL_INIT_SENSOR flag. This causes SDL to scan the system + * with the SDL_INIT_SENSOR flag. This causes SDL to scan the system * for sensors, and load appropriate drivers. */ @@ -52,21 +51,67 @@ struct _SDL_Sensor; typedef struct _SDL_Sensor SDL_Sensor; /** - * This is a unique ID for a sensor for the time it is connected to the system, - * and is never reused for the lifetime of the application. + * This is a unique ID for a sensor for the time it is connected to the + * system, and is never reused for the lifetime of the application. * - * The ID value starts at 0 and increments from there. The value -1 is an invalid ID. + * The ID value starts at 0 and increments from there. The value -1 is an + * invalid ID. */ typedef Sint32 SDL_SensorID; -/* The different sensors defined by SDL +/** + * The different sensors defined by SDL. * * Additional sensors may be available, using platform dependent semantics. * - * Hare are the additional Android sensors: + * Here are the additional Android sensors: + * * https://developer.android.com/reference/android/hardware/SensorEvent.html#values + * + * Accelerometer sensor notes: + * + * The accelerometer returns the current acceleration in SI meters per second + * squared. This measurement includes the force of gravity, so a device at + * rest will have an value of SDL_STANDARD_GRAVITY away from the center of the + * earth, which is a positive Y value. + * + * - `values[0]`: Acceleration on the x axis + * - `values[1]`: Acceleration on the y axis + * - `values[2]`: Acceleration on the z axis + * + * For phones and tablets held in natural orientation and game controllers + * held in front of you, the axes are defined as follows: + * + * - -X ... +X : left ... right + * - -Y ... +Y : bottom ... top + * - -Z ... +Z : farther ... closer + * + * The accelerometer axis data is not changed when the device is rotated. + * + * Gyroscope sensor notes: + * + * The gyroscope returns the current rate of rotation in radians per second. + * The rotation is positive in the counter-clockwise direction. That is, an + * observer looking from a positive location on one of the axes would see + * positive rotation on that axis when it appeared to be rotating + * counter-clockwise. + * + * - `values[0]`: Angular speed around the x axis (pitch) + * - `values[1]`: Angular speed around the y axis (yaw) + * - `values[2]`: Angular speed around the z axis (roll) + * + * For phones and tablets held in natural orientation and game controllers + * held in front of you, the axes are defined as follows: + * + * - -X ... +X : left ... right + * - -Y ... +Y : bottom ... top + * - -Z ... +Z : farther ... closer + * + * The gyroscope axis data is not changed when the device is rotated. + * + * \sa SDL_GetDisplayOrientation */ -typedef enum +typedef enum SDL_SensorType { SDL_SENSOR_INVALID = -1, /**< Returned for an invalid sensor */ SDL_SENSOR_UNKNOWN, /**< Unknown sensor type */ @@ -79,52 +124,14 @@ typedef enum } SDL_SensorType; /** - * Accelerometer sensor - * - * The accelerometer returns the current acceleration in SI meters per - * second squared. This measurement includes the force of gravity, so - * a device at rest will have an value of SDL_STANDARD_GRAVITY away - * from the center of the earth, which is a positive Y value. - * - * values[0]: Acceleration on the x axis - * values[1]: Acceleration on the y axis - * values[2]: Acceleration on the z axis - * - * For phones held in portrait mode and game controllers held in front of you, - * the axes are defined as follows: - * -X ... +X : left ... right - * -Y ... +Y : bottom ... top - * -Z ... +Z : farther ... closer - * - * The axis data is not changed when the phone is rotated. - * - * \sa SDL_GetDisplayOrientation() - */ -#define SDL_STANDARD_GRAVITY 9.80665f - -/** - * Gyroscope sensor - * - * The gyroscope returns the current rate of rotation in radians per second. - * The rotation is positive in the counter-clockwise direction. That is, - * an observer looking from a positive location on one of the axes would - * see positive rotation on that axis when it appeared to be rotating - * counter-clockwise. + * A constant to represent standard gravity for accelerometer sensors. * - * values[0]: Angular speed around the x axis (pitch) - * values[1]: Angular speed around the y axis (yaw) - * values[2]: Angular speed around the z axis (roll) - * - * For phones held in portrait mode and game controllers held in front of you, - * the axes are defined as follows: - * -X ... +X : left ... right - * -Y ... +Y : bottom ... top - * -Z ... +Z : farther ... closer - * - * The axis data is not changed when the phone or controller is rotated. - * - * \sa SDL_GetDisplayOrientation() + * The accelerometer returns the current acceleration in SI meters per second + * squared. This measurement includes the force of gravity, so a device at + * rest will have an value of SDL_STANDARD_GRAVITY away from the center of the + * earth, which is a positive Y value. */ +#define SDL_STANDARD_GRAVITY 9.80665f /* Function prototypes */ @@ -155,7 +162,7 @@ extern DECLSPEC int SDLCALL SDL_NumSensors(void); /** * Get the implementation dependent name of a sensor. * - * \param device_index The sensor to obtain name from + * \param device_index The sensor to obtain name from. * \returns the sensor name, or NULL if `device_index` is out of range. * * \since This function is available since SDL 2.0.9. @@ -165,7 +172,7 @@ extern DECLSPEC const char *SDLCALL SDL_SensorGetDeviceName(int device_index); /** * Get the type of a sensor. * - * \param device_index The sensor to get the type from + * \param device_index The sensor to get the type from. * \returns the SDL_SensorType, or `SDL_SENSOR_INVALID` if `device_index` is * out of range. * @@ -176,7 +183,7 @@ extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetDeviceType(int device_index) /** * Get the platform dependent type of a sensor. * - * \param device_index The sensor to check + * \param device_index The sensor to check. * \returns the sensor platform dependent type, or -1 if `device_index` is out * of range. * @@ -187,7 +194,7 @@ extern DECLSPEC int SDLCALL SDL_SensorGetDeviceNonPortableType(int device_index) /** * Get the instance ID of a sensor. * - * \param device_index The sensor to get instance id from + * \param device_index The sensor to get instance id from. * \returns the sensor instance ID, or -1 if `device_index` is out of range. * * \since This function is available since SDL 2.0.9. @@ -197,7 +204,7 @@ extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetDeviceInstanceID(int device_in /** * Open a sensor for use. * - * \param device_index The sensor to open + * \param device_index The sensor to open. * \returns an SDL_Sensor sensor object, or NULL if an error occurred. * * \since This function is available since SDL 2.0.9. @@ -207,7 +214,7 @@ extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorOpen(int device_index); /** * Return the SDL_Sensor associated with an instance id. * - * \param instance_id The sensor from instance id + * \param instance_id The sensor from instance id. * \returns an SDL_Sensor object. * * \since This function is available since SDL 2.0.9. @@ -217,7 +224,7 @@ extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorFromInstanceID(SDL_SensorID instan /** * Get the implementation dependent name of a sensor * - * \param sensor The SDL_Sensor object + * \param sensor The SDL_Sensor object. * \returns the sensor name, or NULL if `sensor` is NULL. * * \since This function is available since SDL 2.0.9. @@ -227,7 +234,7 @@ extern DECLSPEC const char *SDLCALL SDL_SensorGetName(SDL_Sensor *sensor); /** * Get the type of a sensor. * - * \param sensor The SDL_Sensor object to inspect + * \param sensor The SDL_Sensor object to inspect. * \returns the SDL_SensorType type, or `SDL_SENSOR_INVALID` if `sensor` is * NULL. * @@ -238,7 +245,7 @@ extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetType(SDL_Sensor *sensor); /** * Get the platform dependent type of a sensor. * - * \param sensor The SDL_Sensor object to inspect + * \param sensor The SDL_Sensor object to inspect. * \returns the sensor platform dependent type, or -1 if `sensor` is NULL. * * \since This function is available since SDL 2.0.9. @@ -248,7 +255,7 @@ extern DECLSPEC int SDLCALL SDL_SensorGetNonPortableType(SDL_Sensor *sensor); /** * Get the instance ID of a sensor. * - * \param sensor The SDL_Sensor object to inspect + * \param sensor The SDL_Sensor object to inspect. * \returns the sensor instance ID, or -1 if `sensor` is NULL. * * \since This function is available since SDL 2.0.9. @@ -260,9 +267,9 @@ extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetInstanceID(SDL_Sensor *sensor) * * The number of values and interpretation of the data is sensor dependent. * - * \param sensor The SDL_Sensor object to query - * \param data A pointer filled with the current sensor state - * \param num_values The number of values to write to data + * \param sensor The SDL_Sensor object to query. + * \param data A pointer filled with the current sensor state. + * \param num_values The number of values to write to data. * \returns 0 or -1 if an error occurred. * * \since This function is available since SDL 2.0.9. @@ -275,11 +282,11 @@ extern DECLSPEC int SDLCALL SDL_SensorGetData(SDL_Sensor *sensor, float *data, i * * The number of values and interpretation of the data is sensor dependent. * - * \param sensor The SDL_Sensor object to query + * \param sensor The SDL_Sensor object to query. * \param timestamp A pointer filled with the timestamp in microseconds of the - * current sensor reading if available, or 0 if not - * \param data A pointer filled with the current sensor state - * \param num_values The number of values to write to data + * current sensor reading if available, or 0 if not. + * \param data A pointer filled with the current sensor state. + * \param num_values The number of values to write to data. * \returns 0 or -1 if an error occurred. * * \since This function is available since SDL 2.26.0. @@ -289,7 +296,7 @@ extern DECLSPEC int SDLCALL SDL_SensorGetDataWithTimestamp(SDL_Sensor *sensor, U /** * Close a sensor previously opened with SDL_SensorOpen(). * - * \param sensor The SDL_Sensor object to close + * \param sensor The SDL_Sensor object to close. * * \since This function is available since SDL 2.0.9. */ diff --git a/vs/sdl2/include/SDL_shape.h b/vs/sdl2/include/SDL_shape.h index 4783cf290e9..d3560845f85 100644 --- a/vs/sdl2/include/SDL_shape.h +++ b/vs/sdl2/include/SDL_shape.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -48,18 +48,18 @@ extern "C" { * and flags. * * \param title The title of the window, in UTF-8 encoding. - * \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or - * ::SDL_WINDOWPOS_UNDEFINED. - * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or - * ::SDL_WINDOWPOS_UNDEFINED. + * \param x The x position of the window, SDL_WINDOWPOS_CENTERED, or + * SDL_WINDOWPOS_UNDEFINED. + * \param y The y position of the window, SDL_WINDOWPOS_CENTERED, or + * SDL_WINDOWPOS_UNDEFINED. * \param w The width of the window. * \param h The height of the window. * \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with - * any of the following: ::SDL_WINDOW_OPENGL, - * ::SDL_WINDOW_INPUT_GRABBED, ::SDL_WINDOW_HIDDEN, - * ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED, - * ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_BORDERLESS is always set, - * and ::SDL_WINDOW_FULLSCREEN is always unset. + * any of the following: SDL_WINDOW_OPENGL, + * SDL_WINDOW_INPUT_GRABBED, SDL_WINDOW_HIDDEN, + * SDL_WINDOW_RESIZABLE, SDL_WINDOW_MAXIMIZED, + * SDL_WINDOW_MINIMIZED, SDL_WINDOW_BORDERLESS is always set, and + * SDL_WINDOW_FULLSCREEN is always unset. * \return the window created, or NULL if window creation failed. * * \since This function is available since SDL 2.0.0. diff --git a/vs/sdl2/include/SDL_stdinc.h b/vs/sdl2/include/SDL_stdinc.h index 45e2a7830aa..1854698b606 100644 --- a/vs/sdl2/include/SDL_stdinc.h +++ b/vs/sdl2/include/SDL_stdinc.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,10 +19,12 @@ 3. This notice may not be removed or altered from any source distribution. */ +/* WIKI CATEGORY: StdInc */ + /** - * \file SDL_stdinc.h + * # CategoryStdInc * - * This is a general header that includes C language support. + * This is a general header that includes C language support. */ #ifndef SDL_stdinc_h_ @@ -129,15 +131,19 @@ void *alloca(size_t); #endif /** - * The number of elements in an array. + * The number of elements in an array. */ #define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) #define SDL_TABLESIZE(table) SDL_arraysize(table) /** - * Macro useful for building other macros with strings in them + * Macro useful for building other macros with strings in them + * + * e.g: * - * e.g. #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n") + * ```c + * #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n") + * ``` */ #define SDL_STRINGIFY_ARG(arg) #arg @@ -185,54 +191,61 @@ typedef enum #endif /** - * \brief A signed 8-bit integer type. + * A signed 8-bit integer type. */ +typedef int8_t Sint8; #define SDL_MAX_SINT8 ((Sint8)0x7F) /* 127 */ #define SDL_MIN_SINT8 ((Sint8)(~0x7F)) /* -128 */ -typedef int8_t Sint8; + /** - * \brief An unsigned 8-bit integer type. + * An unsigned 8-bit integer type. */ +typedef uint8_t Uint8; #define SDL_MAX_UINT8 ((Uint8)0xFF) /* 255 */ #define SDL_MIN_UINT8 ((Uint8)0x00) /* 0 */ -typedef uint8_t Uint8; + /** - * \brief A signed 16-bit integer type. + * A signed 16-bit integer type. */ +typedef int16_t Sint16; #define SDL_MAX_SINT16 ((Sint16)0x7FFF) /* 32767 */ #define SDL_MIN_SINT16 ((Sint16)(~0x7FFF)) /* -32768 */ -typedef int16_t Sint16; + /** - * \brief An unsigned 16-bit integer type. + * An unsigned 16-bit integer type. */ +typedef uint16_t Uint16; #define SDL_MAX_UINT16 ((Uint16)0xFFFF) /* 65535 */ #define SDL_MIN_UINT16 ((Uint16)0x0000) /* 0 */ -typedef uint16_t Uint16; + /** - * \brief A signed 32-bit integer type. + * A signed 32-bit integer type. */ +typedef int32_t Sint32; #define SDL_MAX_SINT32 ((Sint32)0x7FFFFFFF) /* 2147483647 */ #define SDL_MIN_SINT32 ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */ -typedef int32_t Sint32; + /** - * \brief An unsigned 32-bit integer type. + * An unsigned 32-bit integer type. */ +typedef uint32_t Uint32; #define SDL_MAX_UINT32 ((Uint32)0xFFFFFFFFu) /* 4294967295 */ #define SDL_MIN_UINT32 ((Uint32)0x00000000) /* 0 */ -typedef uint32_t Uint32; /** - * \brief A signed 64-bit integer type. + * A signed 64-bit integer type. */ +typedef int64_t Sint64; #define SDL_MAX_SINT64 ((Sint64)0x7FFFFFFFFFFFFFFFll) /* 9223372036854775807 */ #define SDL_MIN_SINT64 ((Sint64)(~0x7FFFFFFFFFFFFFFFll)) /* -9223372036854775808 */ -typedef int64_t Sint64; + /** - * \brief An unsigned 64-bit integer type. + * An unsigned 64-bit integer type. */ +typedef uint64_t Uint64; #define SDL_MAX_UINT64 ((Uint64)0xFFFFFFFFFFFFFFFFull) /* 18446744073709551615 */ #define SDL_MIN_UINT64 ((Uint64)(0x0000000000000000ull)) /* 0 */ -typedef uint64_t Uint64; + /* @} *//* Basic data types */ @@ -255,9 +268,9 @@ typedef uint64_t Uint64; #ifndef SDL_PRIs64 #if defined(__WIN32__) || defined(__GDK__) #define SDL_PRIs64 "I64d" -#elif defined(PRIs64) -#define SDL_PRIs64 PRIs64 -#elif defined(__LP64__) && !defined(__APPLE__) +#elif defined(PRId64) +#define SDL_PRIs64 PRId64 +#elif defined(__LP64__) && !defined(__APPLE__) && !defined(__EMSCRIPTEN__) #define SDL_PRIs64 "ld" #else #define SDL_PRIs64 "lld" @@ -377,9 +390,12 @@ typedef uint64_t Uint64; #ifndef SDL_COMPILE_TIME_ASSERT #if defined(__cplusplus) +/* Keep C++ case alone: Some versions of gcc will define __STDC_VERSION__ even when compiling in C++ mode. */ #if (__cplusplus >= 201103L) #define SDL_COMPILE_TIME_ASSERT(name, x) static_assert(x, #x) #endif +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 202311L) +#define SDL_COMPILE_TIME_ASSERT(name, x) static_assert(x, #x) #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) #define SDL_COMPILE_TIME_ASSERT(name, x) _Static_assert(x, #x) #endif @@ -412,8 +428,8 @@ SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); /** \cond */ #ifndef DOXYGEN_SHOULD_IGNORE_THIS -#if !defined(__ANDROID__) && !defined(__VITA__) && !defined(__3DS__) - /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */ +#if !defined(__VITA__) && !defined(__3DS__) +/* TODO: include/SDL_stdinc.h:422: error: size of array 'SDL_dummy_enum' is negative */ typedef enum { DUMMY_ENUM_VALUE @@ -488,8 +504,9 @@ extern DECLSPEC int SDLCALL SDL_GetNumAllocations(void); extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); -extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *)); -extern DECLSPEC void * SDLCALL SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *)); +typedef int (SDLCALL *SDL_CompareCallback)(const void *, const void *); +extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, SDL_CompareCallback compare); +extern DECLSPEC void * SDLCALL SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, SDL_CompareCallback compare); extern DECLSPEC int SDLCALL SDL_abs(int x); @@ -518,6 +535,7 @@ extern DECLSPEC Uint32 SDLCALL SDL_crc32(Uint32 crc, const void *data, size_t le extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len); +/* Some safe(r) macros for zero'ing structures... */ #define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) #define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) #define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x))) @@ -703,6 +721,8 @@ extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft); + +/* Some helper macros for common cases... */ #define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1) @@ -730,6 +750,13 @@ size_t wcslcpy(wchar_t *dst, const wchar_t *src, size_t size); size_t wcslcat(wchar_t *dst, const wchar_t *src, size_t size); #endif +#ifndef _WIN32 +/* strdup is not ANSI but POSIX, and its prototype might be hidden... */ +/* not for windows: might conflict with string.h where strdup may have + * dllimport attribute: https://github.com/libsdl-org/SDL/issues/12948 */ +char *strdup(const char *str); +#endif + /* Starting LLVM 16, the analyser errors out if these functions do not have their prototype defined (clang-diagnostic-implicit-function-declaration) */ #include @@ -775,8 +802,9 @@ SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_B } /** - * If a * b would overflow, return -1. Otherwise store a * b via ret - * and return 0. + * If a * b would overflow, return -1. + * + * Otherwise store a * b via ret and return 0. * * \since This function is available since SDL 2.24.0. */ @@ -805,8 +833,9 @@ SDL_FORCE_INLINE int _SDL_size_mul_overflow_builtin (size_t a, #endif /** - * If a + b would overflow, return -1. Otherwise store a + b via ret - * and return 0. + * If a + b would overflow, return -1. + * + * Otherwise store a + b via ret and return 0. * * \since This function is available since SDL 2.24.0. */ diff --git a/vs/sdl2/include/SDL_surface.h b/vs/sdl2/include/SDL_surface.h index ceeb86bd867..42ea5919af0 100644 --- a/vs/sdl2/include/SDL_surface.h +++ b/vs/sdl2/include/SDL_surface.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_surface.h + * # CategorySurface * - * Header file for ::SDL_Surface definition and management functions. + * Header file for SDL_Surface definition and management functions. */ #ifndef SDL_surface_h_ @@ -43,7 +43,7 @@ extern "C" { /** * \name Surface flags * - * These are the currently supported flags for the ::SDL_Surface. + * These are the currently supported flags for the SDL_Surface. * * \internal * Used internally (read-only). @@ -57,17 +57,17 @@ extern "C" { /* @} *//* Surface flags */ /** - * Evaluates to true if the surface needs to be locked before access. + * Evaluates to true if the surface needs to be locked before access. */ #define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0) typedef struct SDL_BlitMap SDL_BlitMap; /* this is an opaque type. */ /** - * \brief A collection of pixels used in software blitting. + * A collection of pixels used in software blitting. * - * \note This structure should be treated as read-only, except for \c pixels, - * which, if not NULL, contains the raw pixel data for the surface. + * This structure should be treated as read-only, except for `pixels`, which, + * if not NULL, contains the raw pixel data for the surface. */ typedef struct SDL_Surface { @@ -97,15 +97,15 @@ typedef struct SDL_Surface } SDL_Surface; /** - * \brief The type of function used for surface blitting functions. + * The type of function used for surface blitting functions. */ typedef int (SDLCALL *SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, struct SDL_Surface * dst, SDL_Rect * dstrect); /** - * \brief The formula used for converting between YUV and RGB + * The formula used for converting between YUV and RGB */ -typedef enum +typedef enum SDL_YUV_CONVERSION_MODE { SDL_YUV_CONVERSION_JPEG, /**< Full range JPEG */ SDL_YUV_CONVERSION_BT601, /**< BT.601 (the default) */ @@ -140,14 +140,14 @@ typedef enum * You can change this by calling SDL_SetSurfaceBlendMode() and selecting a * different `blendMode`. * - * \param flags the flags are unused and should be set to 0 - * \param width the width of the surface - * \param height the height of the surface - * \param depth the depth of the surface in bits - * \param Rmask the red mask for the pixels - * \param Gmask the green mask for the pixels - * \param Bmask the blue mask for the pixels - * \param Amask the alpha mask for the pixels + * \param flags the flags are unused and should be set to 0. + * \param width the width of the surface. + * \param height the height of the surface. + * \param depth the depth of the surface in bits. + * \param Rmask the red mask for the pixels. + * \param Gmask the green mask for the pixels. + * \param Bmask the blue mask for the pixels. + * \param Amask the alpha mask for the pixels. * \returns the new SDL_Surface structure that is created or NULL if it fails; * call SDL_GetError() for more information. * @@ -171,10 +171,10 @@ extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface * of providing pixel color masks, you provide it with a predefined format * from SDL_PixelFormatEnum. * - * \param flags the flags are unused and should be set to 0 - * \param width the width of the surface - * \param height the height of the surface - * \param depth the depth of the surface in bits + * \param flags the flags are unused and should be set to 0. + * \param width the width of the surface. + * \param height the height of the surface. + * \param depth the depth of the surface in bits. * \param format the SDL_PixelFormatEnum for the new surface's pixel format. * \returns the new SDL_Surface structure that is created or NULL if it fails; * call SDL_GetError() for more information. @@ -198,15 +198,15 @@ extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormat * No copy is made of the pixel data. Pixel data is not managed automatically; * you must free the surface before you free the pixel data. * - * \param pixels a pointer to existing pixel data - * \param width the width of the surface - * \param height the height of the surface - * \param depth the depth of the surface in bits - * \param pitch the pitch of the surface in bytes - * \param Rmask the red mask for the pixels - * \param Gmask the green mask for the pixels - * \param Bmask the blue mask for the pixels - * \param Amask the alpha mask for the pixels + * \param pixels a pointer to existing pixel data. + * \param width the width of the surface. + * \param height the height of the surface. + * \param depth the depth of the surface in bits. + * \param pitch the pitch of the surface in bytes. + * \param Rmask the red mask for the pixels. + * \param Gmask the green mask for the pixels. + * \param Bmask the blue mask for the pixels. + * \param Amask the alpha mask for the pixels. * \returns the new SDL_Surface structure that is created or NULL if it fails; * call SDL_GetError() for more information. * @@ -214,6 +214,7 @@ extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormat * * \sa SDL_CreateRGBSurface * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_CreateRGBSurfaceWithFormatFrom * \sa SDL_FreeSurface */ extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, @@ -239,11 +240,11 @@ extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, * No copy is made of the pixel data. Pixel data is not managed automatically; * you must free the surface before you free the pixel data. * - * \param pixels a pointer to existing pixel data - * \param width the width of the surface - * \param height the height of the surface - * \param depth the depth of the surface in bits - * \param pitch the pitch of the surface in bytes + * \param pixels a pointer to existing pixel data. + * \param width the width of the surface. + * \param height the height of the surface. + * \param depth the depth of the surface in bits. + * \param pitch the pitch of the surface in bytes. * \param format the SDL_PixelFormatEnum for the new surface's pixel format. * \returns the new SDL_Surface structure that is created or NULL if it fails; * call SDL_GetError() for more information. @@ -278,8 +279,8 @@ extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface); * * A single palette can be shared with many surfaces. * - * \param surface the SDL_Surface structure to update - * \param palette the SDL_Palette structure to use + * \param surface the SDL_Surface structure to update. + * \param palette the SDL_Palette structure to use. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -300,7 +301,7 @@ extern DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface * surface, * 0, then you can read and write to the surface at any time, and the pixel * format of the surface will not change. * - * \param surface the SDL_Surface structure to be locked + * \param surface the SDL_Surface structure to be locked. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -314,7 +315,7 @@ extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface * surface); /** * Release a surface after directly accessing the pixels. * - * \param surface the SDL_Surface structure to be unlocked + * \param surface the SDL_Surface structure to be unlocked. * * \since This function is available since SDL 2.0.0. * @@ -329,11 +330,11 @@ extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface * surface); * result in a memory leak. * * src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. - * Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap + * Alternatively, you might also use the macro SDL_LoadBMP to load a bitmap * from a file, convert it to an SDL_Surface and then close the file. * - * \param src the data stream for the surface - * \param freesrc non-zero to close the stream after being read + * \param src the data stream for the surface. + * \param freesrc non-zero to close the stream after being read. * \returns a pointer to a new SDL_Surface structure or NULL if there was an * error; call SDL_GetError() for more information. * @@ -363,9 +364,9 @@ extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP_RW(SDL_RWops * src, * surface before they are saved. YUV and paletted 1-bit and 4-bit formats are * not supported. * - * \param surface the SDL_Surface structure containing the image to be saved - * \param dst a data stream to save to - * \param freedst non-zero to close the stream after being written + * \param surface the SDL_Surface structure containing the image to be saved. + * \param dst a data stream to save to. + * \param freedst non-zero to close the stream after being written. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -378,9 +379,9 @@ extern DECLSPEC int SDLCALL SDL_SaveBMP_RW (SDL_Surface * surface, SDL_RWops * dst, int freedst); /** - * Save a surface to a file. + * Save a surface to a file. * - * Convenience macro. + * Convenience macro. */ #define SDL_SaveBMP(surface, file) \ SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) @@ -391,8 +392,8 @@ extern DECLSPEC int SDLCALL SDL_SaveBMP_RW * If RLE is enabled, color key and alpha blending blits are much faster, but * the surface must be locked before directly accessing the pixels. * - * \param surface the SDL_Surface structure to optimize - * \param flag 0 to disable, non-zero to enable RLE acceleration + * \param surface the SDL_Surface structure to optimize. + * \param flag 0 to disable, non-zero to enable RLE acceleration. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -410,7 +411,7 @@ extern DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface * surface, * * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. * - * \param surface the SDL_Surface structure to query + * \param surface the SDL_Surface structure to query. * \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.14. @@ -432,9 +433,9 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasSurfaceRLE(SDL_Surface * surface); * RLE acceleration can substantially speed up blitting of images with large * horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. * - * \param surface the SDL_Surface structure to update - * \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key - * \param key the transparent pixel + * \param surface the SDL_Surface structure to update. + * \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key. + * \param key the transparent pixel. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -451,7 +452,7 @@ extern DECLSPEC int SDLCALL SDL_SetColorKey(SDL_Surface * surface, * * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. * - * \param surface the SDL_Surface structure to query + * \param surface the SDL_Surface structure to query. * \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.9. @@ -469,8 +470,8 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasColorKey(SDL_Surface * surface); * * If the surface doesn't have color key enabled this function returns -1. * - * \param surface the SDL_Surface structure to query - * \param key a pointer filled in with the transparent pixel + * \param surface the SDL_Surface structure to query. + * \param key a pointer filled in with the transparent pixel. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -491,10 +492,10 @@ extern DECLSPEC int SDLCALL SDL_GetColorKey(SDL_Surface * surface, * * `srcC = srcC * (color / 255)` * - * \param surface the SDL_Surface structure to update - * \param r the red color value multiplied into blit operations - * \param g the green color value multiplied into blit operations - * \param b the blue color value multiplied into blit operations + * \param surface the SDL_Surface structure to update. + * \param r the red color value multiplied into blit operations. + * \param g the green color value multiplied into blit operations. + * \param b the blue color value multiplied into blit operations. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -510,10 +511,10 @@ extern DECLSPEC int SDLCALL SDL_SetSurfaceColorMod(SDL_Surface * surface, /** * Get the additional color value multiplied into blit operations. * - * \param surface the SDL_Surface structure to query - * \param r a pointer filled in with the current red color value - * \param g a pointer filled in with the current green color value - * \param b a pointer filled in with the current blue color value + * \param surface the SDL_Surface structure to query. + * \param r a pointer filled in with the current red color value. + * \param g a pointer filled in with the current green color value. + * \param b a pointer filled in with the current blue color value. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -534,8 +535,8 @@ extern DECLSPEC int SDLCALL SDL_GetSurfaceColorMod(SDL_Surface * surface, * * `srcA = srcA * (alpha / 255)` * - * \param surface the SDL_Surface structure to update - * \param alpha the alpha value multiplied into blit operations + * \param surface the SDL_Surface structure to update. + * \param alpha the alpha value multiplied into blit operations. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -550,8 +551,8 @@ extern DECLSPEC int SDLCALL SDL_SetSurfaceAlphaMod(SDL_Surface * surface, /** * Get the additional alpha value used in blit operations. * - * \param surface the SDL_Surface structure to query - * \param alpha a pointer filled in with the current alpha value + * \param surface the SDL_Surface structure to query. + * \param alpha a pointer filled in with the current alpha value. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -570,8 +571,8 @@ extern DECLSPEC int SDLCALL SDL_GetSurfaceAlphaMod(SDL_Surface * surface, * existing data, the blendmode of the SOURCE surface should be set to * `SDL_BLENDMODE_NONE`. * - * \param surface the SDL_Surface structure to update - * \param blendMode the SDL_BlendMode to use for blit blending + * \param surface the SDL_Surface structure to update. + * \param blendMode the SDL_BlendMode to use for blit blending. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -585,8 +586,8 @@ extern DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface * surface, /** * Get the blend mode used for blit operations. * - * \param surface the SDL_Surface structure to query - * \param blendMode a pointer filled in with the current SDL_BlendMode + * \param surface the SDL_Surface structure to query. + * \param blendMode a pointer filled in with the current SDL_BlendMode. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -606,9 +607,9 @@ extern DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface * surface, * Note that blits are automatically clipped to the edges of the source and * destination surfaces. * - * \param surface the SDL_Surface structure to be clipped + * \param surface the SDL_Surface structure to be clipped. * \param rect the SDL_Rect structure representing the clipping rectangle, or - * NULL to disable clipping + * NULL to disable clipping. * \returns SDL_TRUE if the rectangle intersects the surface, otherwise * SDL_FALSE and blits will be completely clipped. * @@ -627,9 +628,9 @@ extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface * surface, * rectangle is drawn into. * * \param surface the SDL_Surface structure representing the surface to be - * clipped + * clipped. * \param rect an SDL_Rect structure filled in with the clipping rectangle for - * the surface + * the surface. * * \since This function is available since SDL 2.0.0. * @@ -658,11 +659,11 @@ extern DECLSPEC SDL_Surface *SDLCALL SDL_DuplicateSurface(SDL_Surface * surface) * surface. The new, optimized surface can then be used as the source for * future blits, making them faster. * - * \param src the existing SDL_Surface structure to convert + * \param src the existing SDL_Surface structure to convert. * \param fmt the SDL_PixelFormat structure that the new surface is optimized - * for + * for. * \param flags the flags are unused and should be set to 0; this is a - * leftover from SDL 1.2's API + * leftover from SDL 1.2's API. * \returns the new SDL_Surface structure that is created or NULL if it fails; * call SDL_GetError() for more information. * @@ -683,11 +684,11 @@ extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface * it might be easier to call but it doesn't have access to palette * information for the destination surface, in case that would be important. * - * \param src the existing SDL_Surface structure to convert + * \param src the existing SDL_Surface structure to convert. * \param pixel_format the SDL_PixelFormatEnum that the new surface is - * optimized for + * optimized for. * \param flags the flags are unused and should be set to 0; this is a - * leftover from SDL 1.2's API + * leftover from SDL 1.2's API. * \returns the new SDL_Surface structure that is created or NULL if it fails; * call SDL_GetError() for more information. * @@ -703,14 +704,14 @@ extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat /** * Copy a block of pixels of one format to another format. * - * \param width the width of the block to copy, in pixels - * \param height the height of the block to copy, in pixels - * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format - * \param src a pointer to the source pixels - * \param src_pitch the pitch of the source pixels, in bytes - * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format - * \param dst a pointer to be filled in with new pixel data - * \param dst_pitch the pitch of the destination pixels, in bytes + * \param width the width of the block to copy, in pixels. + * \param height the height of the block to copy, in pixels. + * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format. + * \param src a pointer to the source pixels. + * \param src_pitch the pitch of the source pixels, in bytes. + * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format. + * \param dst a pointer to be filled in with new pixel data. + * \param dst_pitch the pitch of the destination pixels, in bytes. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -729,14 +730,14 @@ extern DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, * * This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. * - * \param width the width of the block to convert, in pixels - * \param height the height of the block to convert, in pixels - * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format - * \param src a pointer to the source pixels - * \param src_pitch the pitch of the source pixels, in bytes - * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format - * \param dst a pointer to be filled in with premultiplied pixel data - * \param dst_pitch the pitch of the destination pixels, in bytes + * \param width the width of the block to convert, in pixels. + * \param height the height of the block to convert, in pixels. + * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format. + * \param src a pointer to the source pixels. + * \param src_pitch the pitch of the source pixels, in bytes. + * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format. + * \param dst a pointer to be filled in with premultiplied pixel data. + * \param dst_pitch the pitch of the destination pixels, in bytes. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -760,10 +761,10 @@ extern DECLSPEC int SDLCALL SDL_PremultiplyAlpha(int width, int height, * SDL_SetClipRect()), then this function will fill based on the intersection * of the clip rectangle and `rect`. * - * \param dst the SDL_Surface structure that is the drawing target + * \param dst the SDL_Surface structure that is the drawing target. * \param rect the SDL_Rect structure representing the rectangle to fill, or - * NULL to fill the entire surface - * \param color the color to fill with + * NULL to fill the entire surface. + * \param color the color to fill with. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -786,10 +787,10 @@ extern DECLSPEC int SDLCALL SDL_FillRect * SDL_SetClipRect()), then this function will fill based on the intersection * of the clip rectangle and `rect`. * - * \param dst the SDL_Surface structure that is the drawing target - * \param rects an array of SDL_Rects representing the rectangles to fill. - * \param count the number of rectangles in the array - * \param color the color to fill with + * \param dst the SDL_Surface structure that is the drawing target. + * \param rects an array of SDL_Rect representing the rectangles to fill. + * \param count the number of rectangles in the array. + * \param color the color to fill with. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -801,62 +802,64 @@ extern DECLSPEC int SDLCALL SDL_FillRects (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color); /* !!! FIXME: merge this documentation with the wiki */ + /** - * Performs a fast blit from the source surface to the destination surface. - * - * This assumes that the source and destination rectangles are - * the same size. If either \c srcrect or \c dstrect are NULL, the entire - * surface (\c src or \c dst) is copied. The final blit rectangles are saved - * in \c srcrect and \c dstrect after all clipping is performed. - * - * \returns 0 if the blit is successful, otherwise it returns -1. - * - * The blit function should not be called on a locked surface. - * - * The blit semantics for surfaces with and without blending and colorkey - * are defined as follows: - * \verbatim - RGBA->RGB: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source alpha-channel and per-surface alpha) - SDL_SRCCOLORKEY ignored. - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy RGB. - if SDL_SRCCOLORKEY set, only copy the pixels matching the - RGB values of the source color key, ignoring alpha in the - comparison. - - RGB->RGBA: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source per-surface alpha) - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy RGB, set destination alpha to source per-surface alpha value. - both: - if SDL_SRCCOLORKEY set, only copy the pixels matching the - source color key. - - RGBA->RGBA: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source alpha-channel and per-surface alpha) - SDL_SRCCOLORKEY ignored. - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy all of RGBA to the destination. - if SDL_SRCCOLORKEY set, only copy the pixels matching the - RGB values of the source color key, ignoring alpha in the - comparison. - - RGB->RGB: - Source surface blend mode set to SDL_BLENDMODE_BLEND: - alpha-blend (using the source per-surface alpha) - Source surface blend mode set to SDL_BLENDMODE_NONE: - copy RGB. - both: - if SDL_SRCCOLORKEY set, only copy the pixels matching the - source color key. - \endverbatim - * - * You should call SDL_BlitSurface() unless you know exactly how SDL - * blitting works internally and how to use the other blit functions. + * Performs a fast blit from the source surface to the destination surface. + * + * This assumes that the source and destination rectangles are the same size. + * If either `srcrect` or `dstrect` are NULL, the entire surface (`src` or + * `dst`) is copied. The final blit rectangle is saved in `dstrect` after + * all clipping is performed. + * + * The blit function should not be called on a locked surface. + * + * The blit semantics for surfaces with and without blending and colorkey are + * defined as follows: + * + * ``` + * RGBA->RGB: + * Source surface blend mode set to SDL_BLENDMODE_BLEND: + * alpha-blend (using the source alpha-channel and per-surface alpha) + * SDL_SRCCOLORKEY ignored. + * Source surface blend mode set to SDL_BLENDMODE_NONE: + * copy RGB. + * if SDL_SRCCOLORKEY set, only copy the pixels matching the + * RGB values of the source color key, ignoring alpha in the + * comparison. + * + * RGB->RGBA: + * Source surface blend mode set to SDL_BLENDMODE_BLEND: + * alpha-blend (using the source per-surface alpha) + * Source surface blend mode set to SDL_BLENDMODE_NONE: + * copy RGB, set destination alpha to source per-surface alpha value. + * both: + * if SDL_SRCCOLORKEY set, only copy the pixels matching the + * source color key. + * + * RGBA->RGBA: + * Source surface blend mode set to SDL_BLENDMODE_BLEND: + * alpha-blend (using the source alpha-channel and per-surface alpha) + * SDL_SRCCOLORKEY ignored. + * Source surface blend mode set to SDL_BLENDMODE_NONE: + * copy all of RGBA to the destination. + * if SDL_SRCCOLORKEY set, only copy the pixels matching the + * RGB values of the source color key, ignoring alpha in the + * comparison. + * + * RGB->RGB: + * Source surface blend mode set to SDL_BLENDMODE_BLEND: + * alpha-blend (using the source per-surface alpha) + * Source surface blend mode set to SDL_BLENDMODE_NONE: + * copy RGB. + * both: + * if SDL_SRCCOLORKEY set, only copy the pixels matching the + * source color key. + * ``` + * + * You should call SDL_BlitSurface() unless you know exactly how SDL blitting + * works internally and how to use the other blit functions. + * + * \returns 0 if the blit is successful, otherwise it returns -1. */ #define SDL_BlitSurface SDL_UpperBlit @@ -883,12 +886,12 @@ extern DECLSPEC int SDLCALL SDL_UpperBlit * Unless you know what you're doing, you should be using SDL_BlitSurface() * instead. * - * \param src the SDL_Surface structure to be copied from + * \param src the SDL_Surface structure to be copied from. * \param srcrect the SDL_Rect structure representing the rectangle to be - * copied, or NULL to copy the entire surface - * \param dst the SDL_Surface structure that is the blit target + * copied, or NULL to copy the entire surface. + * \param dst the SDL_Surface structure that is the blit target. * \param dstrect the SDL_Rect structure representing the rectangle that is - * copied into + * copied into. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -925,8 +928,6 @@ extern DECLSPEC int SDLCALL SDL_SoftStretchLinear(SDL_Surface * src, const SDL_Rect * dstrect); -#define SDL_BlitScaled SDL_UpperBlitScaled - /** * Perform a scaled surface copy to a destination surface. * @@ -941,18 +942,21 @@ extern DECLSPEC int SDLCALL SDL_UpperBlitScaled (SDL_Surface * src, const SDL_Rect * srcrect, SDL_Surface * dst, SDL_Rect * dstrect); +#define SDL_BlitScaled SDL_UpperBlitScaled + + /** * Perform low-level surface scaled blitting only. * * This is a semi-private function and it performs low-level surface blitting, * assuming the input rectangles have already been clipped. * - * \param src the SDL_Surface structure to be copied from + * \param src the SDL_Surface structure to be copied from. * \param srcrect the SDL_Rect structure representing the rectangle to be - * copied - * \param dst the SDL_Surface structure that is the blit target + * copied. + * \param dst the SDL_Surface structure that is the blit target. * \param dstrect the SDL_Rect structure representing the rectangle that is - * copied into + * copied into. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * diff --git a/vs/sdl2/include/SDL_system.h b/vs/sdl2/include/SDL_system.h index ddae4f8cc1f..2f7a236f17e 100644 --- a/vs/sdl2/include/SDL_system.h +++ b/vs/sdl2/include/SDL_system.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_system.h + * # CategorySystem * - * Include file for platform specific SDL API functions + * Include file for platform specific SDL API functions */ #ifndef SDL_system_h_ @@ -49,7 +49,7 @@ typedef void (SDLCALL * SDL_WindowsMessageHook)(void *userdata, void *hWnd, unsi * Set a callback for every Windows message, run before TranslateMessage(). * * \param callback The SDL_WindowsMessageHook function to call. - * \param userdata a pointer to pass to every iteration of `callback` + * \param userdata a pointer to pass to every iteration of `callback`. * * \since This function is available since SDL 2.0.4. */ @@ -66,7 +66,7 @@ extern DECLSPEC void SDLCALL SDL_SetWindowsMessageHook(SDL_WindowsMessageHook ca * controls on which monitor a full screen application will appear. * * \param displayIndex the display index for which to get the D3D9 adapter - * index + * index. * \returns the D3D9 adapter index on success or a negative error code on * failure; call SDL_GetError() for more information. * @@ -82,7 +82,7 @@ typedef struct IDirect3DDevice9 IDirect3DDevice9; * Once you are done using the device, you should release it to avoid a * resource leak. * - * \param renderer the renderer from which to get the associated D3D device + * \param renderer the renderer from which to get the associated D3D device. * \returns the D3D9 device associated with given renderer or NULL if it is * not a D3D9 renderer; call SDL_GetError() for more information. * @@ -98,7 +98,7 @@ typedef struct ID3D11Device ID3D11Device; * Once you are done using the device, you should release it to avoid a * resource leak. * - * \param renderer the renderer from which to get the associated D3D11 device + * \param renderer the renderer from which to get the associated D3D11 device. * \returns the D3D11 device associated with given renderer or NULL if it is * not a D3D11 renderer; call SDL_GetError() for more information. * @@ -118,7 +118,7 @@ typedef struct ID3D12Device ID3D12Device; * Once you are done using the device, you should release it to avoid a * resource leak. * - * \param renderer the renderer from which to get the associated D3D12 device + * \param renderer the renderer from which to get the associated D3D12 device. * \returns the D3D12 device associated with given renderer or NULL if it is * not a D3D12 renderer; call SDL_GetError() for more information. * @@ -140,9 +140,9 @@ extern DECLSPEC ID3D12Device* SDLCALL SDL_RenderGetD3D12Device(SDL_Renderer* ren * Before SDL 2.0.4 this function did not return a value. Since SDL 2.0.4 it * returns an SDL_bool. * - * \param displayIndex the display index for which to get both indices - * \param adapterIndex a pointer to be filled in with the adapter index - * \param outputIndex a pointer to be filled in with the output index + * \param displayIndex the display index for which to get both indices. + * \param adapterIndex a pointer to be filled in with the adapter index. + * \param outputIndex a pointer to be filled in with the output index. * \returns SDL_TRUE on success or SDL_FALSE on failure; call SDL_GetError() * for more information. * @@ -176,7 +176,7 @@ extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriority(Sint64 threadID, int prio * \param threadID The Unix thread ID to change priority of. * \param sdlPriority The new SDL_ThreadPriority value. * \param schedPolicy The new scheduling policy (SCHED_FIFO, SCHED_RR, - * SCHED_OTHER, etc...) + * SCHED_OTHER, etc...). * \returns 0 on success, or -1 on error. * * \since This function is available since SDL 2.0.18. @@ -188,7 +188,7 @@ extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, /* Platform specific functions for iOS */ #ifdef __IPHONEOS__ -#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam) +typedef void (SDLCALL *SDL_iOSAnimationCallback)(void*); /** * Use this function to set the animation callback on Apple iOS. @@ -210,9 +210,9 @@ extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, * This functions is also accessible using the macro * SDL_iOSSetAnimationCallback() since SDL 2.0.4. * - * \param window the window for which the animation callback should be set + * \param window the window for which the animation callback should be set. * \param interval the number of frames after which **callback** will be - * called + * called. * \param callback the function to call for every frame. * \param callbackParam a pointer that is passed to `callback`. * \returns 0 on success or a negative error code on failure; call @@ -222,9 +222,10 @@ extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, * * \sa SDL_iPhoneSetEventPump */ -extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (SDLCALL *callback)(void*), void *callbackParam); +extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, SDL_iOSAnimationCallback callback, void *callbackParam); + +#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam) -#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) /** * Use this function to enable or disable the SDL event pump on Apple iOS. @@ -234,7 +235,7 @@ extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, * This functions is also accessible using the macro SDL_iOSSetEventPump() * since SDL 2.0.4. * - * \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it + * \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it. * * \since This function is available since SDL 2.0.0. * @@ -242,6 +243,9 @@ extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, */ extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); +#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) + +/* end of iOS-specific functions. */ #endif /* __IPHONEOS__ */ @@ -356,9 +360,9 @@ extern DECLSPEC SDL_bool SDLCALL SDL_IsDeXMode(void); extern DECLSPEC void SDLCALL SDL_AndroidBackButton(void); /** - See the official Android developer guide for more information: - http://developer.android.com/guide/topics/data/data-storage.html -*/ + * See the official Android developer guide for more information: + * http://developer.android.com/guide/topics/data/data-storage.html + */ #define SDL_ANDROID_EXTERNAL_STORAGE_READ 0x01 #define SDL_ANDROID_EXTERNAL_STORAGE_WRITE 0x02 @@ -441,11 +445,11 @@ extern DECLSPEC SDL_bool SDLCALL SDL_AndroidRequestPermission(const char *permis * * https://developer.android.com/reference/android/view/Gravity * - * \param message text message to be shown - * \param duration 0=short, 1=long + * \param message text message to be shown. + * \param duration 0=short, 1=long. * \param gravity where the notification should appear on the screen. - * \param xoffset set this parameter only when gravity >=0 - * \param yoffset set this parameter only when gravity >=0 + * \param xoffset set this parameter only when gravity >=0. + * \param yoffset set this parameter only when gravity >=0. * \returns 0 if success, -1 if any error occurs. * * \since This function is available since SDL 2.0.16. @@ -457,8 +461,8 @@ extern DECLSPEC int SDLCALL SDL_AndroidShowToast(const char* message, int durati * * Override "boolean onUnhandledMessage(Message msg)" to handle the message. * - * \param command user command that must be greater or equal to 0x8000 - * \param param user parameter + * \param command user command that must be greater or equal to 0x8000. + * \param param user parameter. * * \since This function is available since SDL 2.0.22. */ @@ -470,9 +474,9 @@ extern DECLSPEC int SDLCALL SDL_AndroidSendMessage(Uint32 command, int param); #ifdef __WINRT__ /** - * \brief WinRT / Windows Phone path types + * WinRT / Windows Phone path types */ -typedef enum +typedef enum SDL_WinRT_Path { /** \brief The installed app's root directory. Files here are likely to be read-only. */ @@ -494,9 +498,9 @@ typedef enum /** - * \brief WinRT Device Family + * WinRT Device Family */ -typedef enum +typedef enum SDL_WinRT_DeviceFamily { /** \brief Unknown family */ SDL_WINRT_DEVICEFAMILY_UNKNOWN, @@ -524,7 +528,7 @@ typedef enum * * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx * - * \param pathType the type of path to retrieve, one of SDL_WinRT_Path + * \param pathType the type of path to retrieve, one of SDL_WinRT_Path. * \returns a UCS-2 string (16-bit, wide-char) containing the path, or NULL if * the path is not available for any reason; call SDL_GetError() for * more information. @@ -547,7 +551,7 @@ extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path * * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx * - * \param pathType the type of path to retrieve, one of SDL_WinRT_Path + * \param pathType the type of path to retrieve, one of SDL_WinRT_Path. * \returns a UTF-8 string (8-bit, multi-byte) containing the path, or NULL if * the path is not available for any reason; call SDL_GetError() for * more information. diff --git a/vs/sdl2/include/SDL_syswm.h b/vs/sdl2/include/SDL_syswm.h index 7b8bd6ef996..18f6873299d 100644 --- a/vs/sdl2/include/SDL_syswm.h +++ b/vs/sdl2/include/SDL_syswm.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,10 +19,17 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** - * \file SDL_syswm.h +/* WIKI CATEGORY: SYSWM */ + +/* + * # CategorySYSWM + * + * Include file for SDL custom system window manager hooks. * - * Include file for SDL custom system window manager hooks. + * Your application has access to a special type of event SDL_SYSWMEVENT, + * which contains window-manager specific information and arrives whenever + * an unhandled window event occurs. This event is ignored by default, but + * you can enable it with SDL_EventState(). */ #ifndef SDL_syswm_h_ @@ -33,14 +40,6 @@ #include "SDL_video.h" #include "SDL_version.h" -/** - * \brief SDL_syswm.h - * - * Your application has access to a special type of event ::SDL_SYSWMEVENT, - * which contains window-manager specific information and arrives whenever - * an unhandled window event occurs. This event is ignored by default, but - * you can enable it with SDL_EventState(). - */ struct SDL_SysWMinfo; #if !defined(SDL_PROTOTYPES_ONLY) @@ -129,10 +128,11 @@ extern "C" { #endif #if !defined(SDL_PROTOTYPES_ONLY) + /** - * These are the various supported windowing subsystems + * These are the various supported windowing subsystems */ -typedef enum +typedef enum SDL_SYSWM_TYPE { SDL_SYSWM_UNKNOWN, SDL_SYSWM_WINDOWS, @@ -152,7 +152,7 @@ typedef enum } SDL_SYSWM_TYPE; /** - * The custom event structure. + * The custom event structure. */ struct SDL_SysWMmsg { @@ -218,10 +218,10 @@ struct SDL_SysWMmsg }; /** - * The custom window manager information structure. + * The custom window manager information structure. * - * When this structure is returned, it holds information about which - * low level system it is using, and will be one of SDL_SYSWM_TYPE. + * When this structure is returned, it holds information about which low level + * system it is using, and will be one of SDL_SYSWM_TYPE. */ struct SDL_SysWMinfo { @@ -363,8 +363,8 @@ typedef struct SDL_SysWMinfo SDL_SysWMinfo; * `SDL_VERSION(&info.version)`, and then this function will fill in the rest * of the structure with information about the given window. * - * \param window the window about which information is being requested - * \param info an SDL_SysWMinfo structure filled in with window information + * \param window the window about which information is being requested. + * \param info an SDL_SysWMinfo structure filled in with window information. * \returns SDL_TRUE if the function is implemented and the `version` member * of the `info` struct is valid, or SDL_FALSE if the information * could not be retrieved; call SDL_GetError() for more information. diff --git a/vs/sdl2/include/SDL_test.h b/vs/sdl2/include/SDL_test.h index e5acbee4e31..78a7e623e4c 100644 --- a/vs/sdl2/include/SDL_test.h +++ b/vs/sdl2/include/SDL_test.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test.h * * Include file for SDL test framework. diff --git a/vs/sdl2/include/SDL_test_assert.h b/vs/sdl2/include/SDL_test_assert.h index 4f983350a39..ff3b6b6bcd8 100644 --- a/vs/sdl2/include/SDL_test_assert.h +++ b/vs/sdl2/include/SDL_test_assert.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test_assert.h * * Include file for SDL test framework. @@ -42,17 +42,17 @@ extern "C" { #endif -/** +/* * \brief Fails the assert. */ #define ASSERT_FAIL 0 -/** +/* * \brief Passes the assert. */ #define ASSERT_PASS 1 -/** +/* * \brief Assert that logs and break execution flow on failures. * * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). @@ -60,7 +60,7 @@ extern "C" { */ void SDLTest_Assert(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); -/** +/* * \brief Assert for test cases that logs but does not break execution flow on failures. Updates assertion counters. * * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). @@ -70,25 +70,25 @@ void SDLTest_Assert(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *as */ int SDLTest_AssertCheck(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); -/** +/* * \brief Explicitly pass without checking an assertion condition. Updates assertion counter. * * \param assertDescription Message to log with the assert describing it. */ void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(1); -/** +/* * \brief Resets the assert summary counters to zero. */ void SDLTest_ResetAssertSummary(void); -/** +/* * \brief Logs summary of all assertions (total, pass, fail) since last reset as INFO or ERROR. */ void SDLTest_LogAssertSummary(void); -/** +/* * \brief Converts the current assert summary state to a test result. * * \returns TEST_RESULT_PASSED, TEST_RESULT_FAILED, or TEST_RESULT_NO_ASSERT diff --git a/vs/sdl2/include/SDL_test_common.h b/vs/sdl2/include/SDL_test_common.h index d977e463f11..64b5f83e808 100644 --- a/vs/sdl2/include/SDL_test_common.h +++ b/vs/sdl2/include/SDL_test_common.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test_common.h * * Include file for SDL test framework. @@ -129,7 +129,7 @@ extern "C" { /* Function prototypes */ -/** +/* * \brief Parse command line parameters and create common state. * * \param argv Array of command line parameters @@ -139,7 +139,7 @@ extern "C" { */ SDLTest_CommonState *SDLTest_CommonCreateState(char **argv, Uint32 flags); -/** +/* * \brief Process one common argument. * * \param state The common state describing the test window to create. @@ -150,7 +150,7 @@ SDLTest_CommonState *SDLTest_CommonCreateState(char **argv, Uint32 flags); int SDLTest_CommonArg(SDLTest_CommonState * state, int index); -/** +/* * \brief Logs command line usage info. * * This logs the appropriate command line options for the subsystems in use @@ -164,7 +164,7 @@ int SDLTest_CommonArg(SDLTest_CommonState * state, int index); */ void SDLTest_CommonLogUsage(SDLTest_CommonState * state, const char *argv0, const char **options); -/** +/* * \brief Returns common usage information * * You should (probably) be using SDLTest_CommonLogUsage() instead, but this @@ -177,7 +177,7 @@ void SDLTest_CommonLogUsage(SDLTest_CommonState * state, const char *argv0, cons */ const char *SDLTest_CommonUsage(SDLTest_CommonState * state); -/** +/* * \brief Open test window. * * \param state The common state describing the test window to create. @@ -186,7 +186,7 @@ const char *SDLTest_CommonUsage(SDLTest_CommonState * state); */ SDL_bool SDLTest_CommonInit(SDLTest_CommonState * state); -/** +/* * \brief Easy argument handling when test app doesn't need any custom args. * * \param state The common state describing the test window to create. @@ -197,7 +197,7 @@ SDL_bool SDLTest_CommonInit(SDLTest_CommonState * state); */ SDL_bool SDLTest_CommonDefaultArgs(SDLTest_CommonState * state, const int argc, char **argv); -/** +/* * \brief Common event handler for test windows. * * \param state The common state used to create test window. @@ -207,7 +207,7 @@ SDL_bool SDLTest_CommonDefaultArgs(SDLTest_CommonState * state, const int argc, */ void SDLTest_CommonEvent(SDLTest_CommonState * state, SDL_Event * event, int *done); -/** +/* * \brief Close test window. * * \param state The common state used to create test window. @@ -215,7 +215,7 @@ void SDLTest_CommonEvent(SDLTest_CommonState * state, SDL_Event * event, int *do */ void SDLTest_CommonQuit(SDLTest_CommonState * state); -/** +/* * \brief Draws various window information (position, size, etc.) to the renderer. * * \param renderer The renderer to draw to. diff --git a/vs/sdl2/include/SDL_test_compare.h b/vs/sdl2/include/SDL_test_compare.h index 61a38d09051..3fcb935970c 100644 --- a/vs/sdl2/include/SDL_test_compare.h +++ b/vs/sdl2/include/SDL_test_compare.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test_compare.h * * Include file for SDL test framework. @@ -46,7 +46,7 @@ extern "C" { #endif -/** +/* * \brief Compares a surface and with reference image data for equality * * \param surface Surface used in comparison diff --git a/vs/sdl2/include/SDL_test_crc32.h b/vs/sdl2/include/SDL_test_crc32.h index e3478318dc0..1dbeef27685 100644 --- a/vs/sdl2/include/SDL_test_crc32.h +++ b/vs/sdl2/include/SDL_test_crc32.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test_crc32.h * * Include file for SDL test framework. @@ -60,7 +60,7 @@ extern "C" { #define CRC32_POLY 0xEDB88320 /* Perl String::CRC32 compatible */ #endif -/** +/* * Data structure for CRC32 (checksum) computation */ typedef struct { @@ -69,7 +69,7 @@ extern "C" { /* ---------- Function Prototypes ------------- */ -/** +/* * \brief Initialize the CRC context * * Note: The function initializes the crc table required for all crc calculations. @@ -82,7 +82,7 @@ extern "C" { int SDLTest_Crc32Init(SDLTest_Crc32Context * crcContext); -/** +/* * \brief calculate a crc32 from a data block * * \param crcContext pointer to context variable @@ -101,7 +101,7 @@ int SDLTest_Crc32CalcEnd(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); int SDLTest_Crc32CalcBuffer(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); -/** +/* * \brief clean up CRC context * * \param crcContext pointer to context variable diff --git a/vs/sdl2/include/SDL_test_font.h b/vs/sdl2/include/SDL_test_font.h index 620c82116b3..0eade923944 100644 --- a/vs/sdl2/include/SDL_test_font.h +++ b/vs/sdl2/include/SDL_test_font.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test_font.h * * Include file for SDL test framework. @@ -41,7 +41,7 @@ extern "C" { #define FONT_CHARACTER_SIZE 8 #define FONT_LINE_HEIGHT (FONT_CHARACTER_SIZE + 2) -/** +/* * \brief Draw a string in the currently set font. * * \param renderer The renderer to draw on. @@ -53,7 +53,7 @@ extern "C" { */ int SDLTest_DrawCharacter(SDL_Renderer *renderer, int x, int y, Uint32 c); -/** +/* * \brief Draw a UTF-8 string in the currently set font. * * The font currently only supports characters in the Basic Latin and Latin-1 Supplement sets. @@ -67,7 +67,7 @@ int SDLTest_DrawCharacter(SDL_Renderer *renderer, int x, int y, Uint32 c); */ int SDLTest_DrawString(SDL_Renderer *renderer, int x, int y, const char *s); -/** +/* * \brief Data used for multi-line text output */ typedef struct SDLTest_TextWindow @@ -78,7 +78,7 @@ typedef struct SDLTest_TextWindow char **lines; } SDLTest_TextWindow; -/** +/* * \brief Create a multi-line text output window * * \param x The X coordinate of the upper left corner of the window. @@ -92,7 +92,7 @@ typedef struct SDLTest_TextWindow */ SDLTest_TextWindow *SDLTest_TextWindowCreate(int x, int y, int w, int h); -/** +/* * \brief Display a multi-line text output window * * This function should be called every frame to display the text @@ -104,7 +104,7 @@ SDLTest_TextWindow *SDLTest_TextWindowCreate(int x, int y, int w, int h); */ void SDLTest_TextWindowDisplay(SDLTest_TextWindow *textwin, SDL_Renderer *renderer); -/** +/* * \brief Add text to a multi-line text output window * * Adds UTF-8 text to the end of the current text. The newline character starts a @@ -119,7 +119,7 @@ void SDLTest_TextWindowDisplay(SDLTest_TextWindow *textwin, SDL_Renderer *render */ void SDLTest_TextWindowAddText(SDLTest_TextWindow *textwin, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); -/** +/* * \brief Add text to a multi-line text output window * * Adds UTF-8 text to the end of the current text. The newline character starts a @@ -134,7 +134,7 @@ void SDLTest_TextWindowAddText(SDLTest_TextWindow *textwin, SDL_PRINTF_FORMAT_ST */ void SDLTest_TextWindowAddTextWithLength(SDLTest_TextWindow *textwin, const char *text, size_t len); -/** +/* * \brief Clear the text in a multi-line text output window * * \param textwin The text output window @@ -143,7 +143,7 @@ void SDLTest_TextWindowAddTextWithLength(SDLTest_TextWindow *textwin, const char */ void SDLTest_TextWindowClear(SDLTest_TextWindow *textwin); -/** +/* * \brief Free the storage associated with a multi-line text output window * * \param textwin The text output window @@ -152,7 +152,7 @@ void SDLTest_TextWindowClear(SDLTest_TextWindow *textwin); */ void SDLTest_TextWindowDestroy(SDLTest_TextWindow *textwin); -/** +/* * \brief Cleanup textures used by font drawing functions. */ void SDLTest_CleanupTextDrawing(void); diff --git a/vs/sdl2/include/SDL_test_fuzzer.h b/vs/sdl2/include/SDL_test_fuzzer.h index a847ccb01ca..c6978ac8109 100644 --- a/vs/sdl2/include/SDL_test_fuzzer.h +++ b/vs/sdl2/include/SDL_test_fuzzer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test_fuzzer.h * * Include file for SDL test framework. @@ -48,13 +48,13 @@ extern "C" { */ -/** +/* * \file * Note: The fuzzer implementation uses a static instance of random context * internally which makes it thread-UNsafe. */ -/** +/* * Initializes the fuzzer for a test * * \param execKey Execution "Key" that initializes the random number generator uniquely for the test. @@ -63,14 +63,14 @@ extern "C" { void SDLTest_FuzzerInit(Uint64 execKey); -/** +/* * Returns a random Uint8 * * \returns a generated integer */ Uint8 SDLTest_RandomUint8(void); -/** +/* * Returns a random Sint8 * * \returns a generated signed integer @@ -78,14 +78,14 @@ Uint8 SDLTest_RandomUint8(void); Sint8 SDLTest_RandomSint8(void); -/** +/* * Returns a random Uint16 * * \returns a generated integer */ Uint16 SDLTest_RandomUint16(void); -/** +/* * Returns a random Sint16 * * \returns a generated signed integer @@ -93,7 +93,7 @@ Uint16 SDLTest_RandomUint16(void); Sint16 SDLTest_RandomSint16(void); -/** +/* * Returns a random integer * * \returns a generated integer @@ -101,14 +101,14 @@ Sint16 SDLTest_RandomSint16(void); Sint32 SDLTest_RandomSint32(void); -/** +/* * Returns a random positive integer * * \returns a generated integer */ Uint32 SDLTest_RandomUint32(void); -/** +/* * Returns random Uint64. * * \returns a generated integer @@ -116,36 +116,36 @@ Uint32 SDLTest_RandomUint32(void); Uint64 SDLTest_RandomUint64(void); -/** +/* * Returns random Sint64. * * \returns a generated signed integer */ Sint64 SDLTest_RandomSint64(void); -/** +/* * \returns a random float in range [0.0 - 1.0] */ float SDLTest_RandomUnitFloat(void); -/** +/* * \returns a random double in range [0.0 - 1.0] */ double SDLTest_RandomUnitDouble(void); -/** +/* * \returns a random float. * */ float SDLTest_RandomFloat(void); -/** +/* * \returns a random double. * */ double SDLTest_RandomDouble(void); -/** +/* * Returns a random boundary value for Uint8 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid @@ -166,7 +166,7 @@ double SDLTest_RandomDouble(void); */ Uint8 SDLTest_RandomUint8BoundaryValue(Uint8 boundary1, Uint8 boundary2, SDL_bool validDomain); -/** +/* * Returns a random boundary value for Uint16 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid @@ -187,7 +187,7 @@ Uint8 SDLTest_RandomUint8BoundaryValue(Uint8 boundary1, Uint8 boundary2, SDL_boo */ Uint16 SDLTest_RandomUint16BoundaryValue(Uint16 boundary1, Uint16 boundary2, SDL_bool validDomain); -/** +/* * Returns a random boundary value for Uint32 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid @@ -208,7 +208,7 @@ Uint16 SDLTest_RandomUint16BoundaryValue(Uint16 boundary1, Uint16 boundary2, SDL */ Uint32 SDLTest_RandomUint32BoundaryValue(Uint32 boundary1, Uint32 boundary2, SDL_bool validDomain); -/** +/* * Returns a random boundary value for Uint64 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid @@ -229,7 +229,7 @@ Uint32 SDLTest_RandomUint32BoundaryValue(Uint32 boundary1, Uint32 boundary2, SDL */ Uint64 SDLTest_RandomUint64BoundaryValue(Uint64 boundary1, Uint64 boundary2, SDL_bool validDomain); -/** +/* * Returns a random boundary value for Sint8 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid @@ -251,7 +251,7 @@ Uint64 SDLTest_RandomUint64BoundaryValue(Uint64 boundary1, Uint64 boundary2, SDL Sint8 SDLTest_RandomSint8BoundaryValue(Sint8 boundary1, Sint8 boundary2, SDL_bool validDomain); -/** +/* * Returns a random boundary value for Sint16 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid @@ -272,7 +272,7 @@ Sint8 SDLTest_RandomSint8BoundaryValue(Sint8 boundary1, Sint8 boundary2, SDL_boo */ Sint16 SDLTest_RandomSint16BoundaryValue(Sint16 boundary1, Sint16 boundary2, SDL_bool validDomain); -/** +/* * Returns a random boundary value for Sint32 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid @@ -293,7 +293,7 @@ Sint16 SDLTest_RandomSint16BoundaryValue(Sint16 boundary1, Sint16 boundary2, SDL */ Sint32 SDLTest_RandomSint32BoundaryValue(Sint32 boundary1, Sint32 boundary2, SDL_bool validDomain); -/** +/* * Returns a random boundary value for Sint64 within the given boundaries. * Boundaries are inclusive, see the usage examples below. If validDomain * is true, the function will only return valid boundaries, otherwise non-valid @@ -315,7 +315,7 @@ Sint32 SDLTest_RandomSint32BoundaryValue(Sint32 boundary1, Sint32 boundary2, SDL Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL_bool validDomain); -/** +/* * Returns integer in range [min, max] (inclusive). * Min and max values can be negative values. * If Max in smaller than min, then the values are swapped. @@ -329,7 +329,7 @@ Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL Sint32 SDLTest_RandomIntegerInRange(Sint32 min, Sint32 max); -/** +/* * Generates random null-terminated string. The minimum length for * the string is 1 character, maximum length for the string is 255 * characters and it can contain ASCII characters from 32 to 126. @@ -341,7 +341,7 @@ Sint32 SDLTest_RandomIntegerInRange(Sint32 min, Sint32 max); char * SDLTest_RandomAsciiString(void); -/** +/* * Generates random null-terminated string. The maximum length for * the string is defined by the maxLength parameter. * String can contain ASCII characters from 32 to 126. @@ -355,7 +355,7 @@ char * SDLTest_RandomAsciiString(void); char * SDLTest_RandomAsciiStringWithMaximumLength(int maxLength); -/** +/* * Generates random null-terminated string. The length for * the string is defined by the size parameter. * String can contain ASCII characters from 32 to 126. @@ -368,7 +368,8 @@ char * SDLTest_RandomAsciiStringWithMaximumLength(int maxLength); */ char * SDLTest_RandomAsciiStringOfSize(int size); -/** + +/* * Get the invocation count for the fuzzer since last ...FuzzerInit. * * \returns the invocation count. diff --git a/vs/sdl2/include/SDL_test_harness.h b/vs/sdl2/include/SDL_test_harness.h index bd9e4f8de07..cfd62e8401b 100644 --- a/vs/sdl2/include/SDL_test_harness.h +++ b/vs/sdl2/include/SDL_test_harness.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test_harness.h * * Include file for SDL test framework. @@ -69,7 +69,7 @@ typedef int (*SDLTest_TestCaseFp)(void *arg); /* !< Function pointer to a test case teardown function (run after every test) */ typedef void (*SDLTest_TestCaseTearDownFp)(void *arg); -/** +/* * Holds information about a single test case. */ typedef struct SDLTest_TestCaseReference { @@ -83,7 +83,7 @@ typedef struct SDLTest_TestCaseReference { int enabled; } SDLTest_TestCaseReference; -/** +/* * Holds information about a test suite (multiple test cases). */ typedef struct SDLTest_TestSuiteReference { @@ -98,7 +98,7 @@ typedef struct SDLTest_TestSuiteReference { } SDLTest_TestSuiteReference; -/** +/* * \brief Generates a random run seed string for the harness. The generated seed will contain alphanumeric characters (0-9A-Z). * * Note: The returned string needs to be deallocated by the caller. @@ -109,7 +109,7 @@ typedef struct SDLTest_TestSuiteReference { */ char *SDLTest_GenerateRunSeed(const int length); -/** +/* * \brief Execute a test suite using the given run seed and execution key. * * \param testSuites Suites containing the test case. diff --git a/vs/sdl2/include/SDL_test_images.h b/vs/sdl2/include/SDL_test_images.h index b5bcb0a0000..d593a31565b 100644 --- a/vs/sdl2/include/SDL_test_images.h +++ b/vs/sdl2/include/SDL_test_images.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test_images.h * * Include file for SDL test framework. @@ -44,7 +44,7 @@ extern "C" { #endif -/** +/* *Type for test images. */ typedef struct SDLTest_SurfaceImage_s { diff --git a/vs/sdl2/include/SDL_test_log.h b/vs/sdl2/include/SDL_test_log.h index ea9ae5e1ca1..6f7f66145b0 100644 --- a/vs/sdl2/include/SDL_test_log.h +++ b/vs/sdl2/include/SDL_test_log.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test_log.h * * Include file for SDL test framework. @@ -42,14 +42,14 @@ extern "C" { #endif -/** +/* * \brief Prints given message with a timestamp in the TEST category and INFO priority. * * \param fmt Message to be logged */ void SDLTest_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); -/** +/* * \brief Prints given message with a timestamp in the TEST category and the ERROR priority. * * \param fmt Message to be logged diff --git a/vs/sdl2/include/SDL_test_md5.h b/vs/sdl2/include/SDL_test_md5.h index 3764b042569..edd79451c70 100644 --- a/vs/sdl2/include/SDL_test_md5.h +++ b/vs/sdl2/include/SDL_test_md5.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test_md5.h * * Include file for SDL test framework. @@ -77,7 +77,7 @@ extern "C" { /* ---------- Function Prototypes ------------- */ -/** +/* * \brief initialize the context * * \param mdContext pointer to context variable @@ -89,7 +89,7 @@ extern "C" { void SDLTest_Md5Init(SDLTest_Md5Context * mdContext); -/** +/* * \brief update digest from variable length data * * \param mdContext pointer to context variable @@ -105,7 +105,7 @@ extern "C" { unsigned int inLen); -/** +/* * \brief complete digest computation * * \param mdContext pointer to context variable diff --git a/vs/sdl2/include/SDL_test_memory.h b/vs/sdl2/include/SDL_test_memory.h index 9bd143252ce..e789fa802a5 100644 --- a/vs/sdl2/include/SDL_test_memory.h +++ b/vs/sdl2/include/SDL_test_memory.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test_memory.h * * Include file for SDL test framework. @@ -37,14 +37,14 @@ extern "C" { #endif -/** +/* * \brief Start tracking SDL memory allocations * * \note This should be called before any other SDL functions for complete tracking coverage */ int SDLTest_TrackAllocations(void); -/** +/* * \brief Print a log of any outstanding allocations * * \note This can be called after SDL_Quit() diff --git a/vs/sdl2/include/SDL_test_random.h b/vs/sdl2/include/SDL_test_random.h index 344646aa8b2..05d6d3ee5e2 100644 --- a/vs/sdl2/include/SDL_test_random.h +++ b/vs/sdl2/include/SDL_test_random.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** +/* * \file SDL_test_random.h * * Include file for SDL test framework. @@ -67,7 +67,7 @@ extern "C" { /* --- Function prototypes */ -/** +/* * \brief Initialize random number generator with two integers. * * Note: The random sequence of numbers returned by ...Random() is the @@ -81,7 +81,7 @@ extern "C" { void SDLTest_RandomInit(SDLTest_RandomContext * rndContext, unsigned int xi, unsigned int ci); -/** +/* * \brief Initialize random number generator based on current system time. * * \param rndContext pointer to context structure @@ -90,7 +90,7 @@ extern "C" { void SDLTest_RandomInitTime(SDLTest_RandomContext *rndContext); -/** +/* * \brief Initialize random number generator based on current system time. * * Note: ...RandomInit() or ...RandomInitTime() must have been called diff --git a/vs/sdl2/include/SDL_thread.h b/vs/sdl2/include/SDL_thread.h index dc7f5363aad..ac405d85ed5 100644 --- a/vs/sdl2/include/SDL_thread.h +++ b/vs/sdl2/include/SDL_thread.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,9 +23,9 @@ #define SDL_thread_h_ /** - * \file SDL_thread.h + * # CategoryThread * - * Header for the SDL thread management routines. + * Header for the SDL thread management routines. */ #include "SDL_stdinc.h" @@ -63,16 +63,18 @@ typedef unsigned long SDL_threadID; typedef unsigned int SDL_TLSID; /** - * The SDL thread priority. + * The SDL thread priority. * - * SDL will make system changes as necessary in order to apply the thread priority. - * Code which attempts to control thread state related to priority should be aware - * that calling SDL_SetThreadPriority may alter such state. - * SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this behavior. + * SDL will make system changes as necessary in order to apply the thread + * priority. Code which attempts to control thread state related to priority + * should be aware that calling SDL_SetThreadPriority may alter such state. + * SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this + * behavior. * - * \note On many systems you require special privileges to set high or time critical priority. + * On many systems you require special privileges to set high or time critical + * priority. */ -typedef enum { +typedef enum SDL_ThreadPriority { SDL_THREAD_PRIORITY_LOW, SDL_THREAD_PRIORITY_NORMAL, SDL_THREAD_PRIORITY_HIGH, @@ -82,7 +84,7 @@ typedef enum { /** * The function passed to SDL_CreateThread(). * - * \param data what was passed as `data` to SDL_CreateThread() + * \param data what was passed as `data` to SDL_CreateThread(). * \returns a value that can be reported through SDL_WaitThread(). */ typedef int (SDLCALL * SDL_ThreadFunction) (void *data); @@ -192,9 +194,9 @@ SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const siz * SDL_CreateThreadWithStackSize(fn, name, 0, data); * ``` * - * \param fn the SDL_ThreadFunction function to call in the new thread - * \param name the name of the thread - * \param data a pointer that is passed to `fn` + * \param fn the SDL_ThreadFunction function to call in the new thread. + * \param name the name of the thread. + * \param data a pointer that is passed to `fn`. * \returns an opaque pointer to the new thread object on success, NULL if the * new thread could not be created; call SDL_GetError() for more * information. @@ -238,10 +240,10 @@ SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data); * function, but for backwards compatibility, this is currently a separate * function. * - * \param fn the SDL_ThreadFunction function to call in the new thread - * \param name the name of the thread + * \param fn the SDL_ThreadFunction function to call in the new thread. + * \param name the name of the thread. * \param stacksize the size, in bytes, to allocate for the new thread stack. - * \param data a pointer that is passed to `fn` + * \param data a pointer that is passed to `fn`. * \returns an opaque pointer to the new thread object on success, NULL if the * new thread could not be created; call SDL_GetError() for more * information. @@ -261,7 +263,7 @@ SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const siz * This is internal memory, not to be freed by the caller, and remains valid * until the specified thread is cleaned up by SDL_WaitThread(). * - * \param thread the thread to query + * \param thread the thread to query. * \returns a pointer to a UTF-8 string that names the specified thread, or * NULL if it doesn't have a name. * @@ -296,7 +298,7 @@ extern DECLSPEC SDL_threadID SDLCALL SDL_ThreadID(void); * If SDL is running on a platform that does not support threads the return * value will always be zero. * - * \param thread the thread to query + * \param thread the thread to query. * \returns the ID of the specified thread, or the ID of the current thread if * `thread` is NULL. * @@ -313,7 +315,7 @@ extern DECLSPEC SDL_threadID SDLCALL SDL_GetThreadID(SDL_Thread * thread); * promote the thread to a higher priority) at all, and some require you to be * an administrator account. Be prepared for this to fail. * - * \param priority the SDL_ThreadPriority to set + * \param priority the SDL_ThreadPriority to set. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -344,7 +346,7 @@ extern DECLSPEC int SDLCALL SDL_SetThreadPriority(SDL_ThreadPriority priority); * afterward. * * \param thread the SDL_Thread pointer that was returned from the - * SDL_CreateThread() call that started this thread + * SDL_CreateThread() call that started this thread. * \param status pointer to an integer that will receive the value returned * from the thread function by its 'return', or NULL to not * receive such value back. @@ -383,7 +385,7 @@ extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread * thread, int *status); * It is safe to pass NULL to this function; it is a no-op. * * \param thread the SDL_Thread pointer that was returned from the - * SDL_CreateThread() call that started this thread + * SDL_CreateThread() call that started this thread. * * \since This function is available since SDL 2.0.2. * @@ -410,7 +412,7 @@ extern DECLSPEC SDL_TLSID SDLCALL SDL_TLSCreate(void); /** * Get the current thread's value associated with a thread local storage ID. * - * \param id the thread local storage ID + * \param id the thread local storage ID. * \returns the value associated with the ID for the current thread or NULL if * no value has been set; call SDL_GetError() for more information. * @@ -421,6 +423,8 @@ extern DECLSPEC SDL_TLSID SDLCALL SDL_TLSCreate(void); */ extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id); +typedef void (SDLCALL *SDL_TLSDestructorCallback)(void*); + /** * Set the current thread's value associated with a thread local storage ID. * @@ -432,10 +436,10 @@ extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id); * * where its parameter `value` is what was passed as `value` to SDL_TLSSet(). * - * \param id the thread local storage ID - * \param value the value to associate with the ID for the current thread + * \param id the thread local storage ID. + * \param value the value to associate with the ID for the current thread. * \param destructor a function called when the thread exits, to free the - * value + * value. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -444,7 +448,7 @@ extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id); * \sa SDL_TLSCreate * \sa SDL_TLSGet */ -extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (SDLCALL *destructor)(void*)); +extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, SDL_TLSDestructorCallback destructor); /** * Cleanup all TLS data for this thread. diff --git a/vs/sdl2/include/SDL_timer.h b/vs/sdl2/include/SDL_timer.h index 8123e432f1e..60969690b23 100644 --- a/vs/sdl2/include/SDL_timer.h +++ b/vs/sdl2/include/SDL_timer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,9 +23,9 @@ #define SDL_timer_h_ /** - * \file SDL_timer.h + * # CategoryTimer * - * Header for the SDL time management routines. + * Header for the SDL time management routines. */ #include "SDL_stdinc.h" @@ -89,8 +89,8 @@ extern DECLSPEC Uint64 SDLCALL SDL_GetTicks64(void); * days, but should _not_ be used with SDL_GetTicks64(), which does not have * that problem. * - * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could - * do this: + * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could do + * this: * * ```c * const Uint32 timeout = SDL_GetTicks() + 100; @@ -99,9 +99,9 @@ extern DECLSPEC Uint64 SDLCALL SDL_GetTicks64(void); * } * ``` * - * Note that this does not handle tick differences greater - * than 2^31 so take care when using the above kind of code - * with large timeout delays (tens of days). + * Note that this does not handle tick differences greater than 2^31 so take + * care when using the above kind of code with large timeout delays (tens of + * days). */ #define SDL_TICKS_PASSED(A, B) ((Sint32)((B) - (A)) <= 0) @@ -140,7 +140,7 @@ extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void); * waits at least the specified time, but possibly longer due to OS * scheduling. * - * \param ms the number of milliseconds to delay + * \param ms the number of milliseconds to delay. * * \since This function is available since SDL 2.0.0. */ @@ -149,10 +149,10 @@ extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); /** * Function prototype for the timer callback function. * - * The callback function is passed the current timer interval and returns - * the next timer interval. If the returned value is the same as the one - * passed in, the periodic alarm continues, otherwise a new alarm is - * scheduled. If the callback returns 0, the periodic alarm is cancelled. + * The callback function is passed the current timer interval and returns the + * next timer interval. If the returned value is the same as the one passed + * in, the periodic alarm continues, otherwise a new alarm is scheduled. If + * the callback returns 0, the periodic alarm is cancelled. */ typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param); @@ -182,10 +182,10 @@ typedef int SDL_TimerID; * time with SDL_GetTicks() or SDL_GetPerformanceCounter() in case your * callback needs to adjust for variances. * - * \param interval the timer delay, in milliseconds, passed to `callback` + * \param interval the timer delay, in milliseconds, passed to `callback`. * \param callback the SDL_TimerCallback function to call when the specified - * `interval` elapses - * \param param a pointer that is passed to `callback` + * `interval` elapses. + * \param param a pointer that is passed to `callback`. * \returns a timer ID or 0 if an error occurs; call SDL_GetError() for more * information. * @@ -200,7 +200,7 @@ extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, /** * Remove a timer created with SDL_AddTimer(). * - * \param id the ID of the timer to remove + * \param id the ID of the timer to remove. * \returns SDL_TRUE if the timer is removed or SDL_FALSE if the timer wasn't * found. * diff --git a/vs/sdl2/include/SDL_touch.h b/vs/sdl2/include/SDL_touch.h index f6a5db413df..80a0fef8ac6 100644 --- a/vs/sdl2/include/SDL_touch.h +++ b/vs/sdl2/include/SDL_touch.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_touch.h + * # CategoryTouch * - * Include file for SDL touch event handling. + * Include file for SDL touch event handling. */ #ifndef SDL_touch_h_ @@ -85,7 +85,7 @@ extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void); /** * Get the touch ID with the given index. * - * \param index the touch device index + * \param index the touch device index. * \returns the touch ID with the given index on success or 0 if the index is * invalid; call SDL_GetError() for more information. * @@ -113,7 +113,7 @@ extern DECLSPEC SDL_TouchDeviceType SDLCALL SDL_GetTouchDeviceType(SDL_TouchID t /** * Get the number of active fingers for a given touch device. * - * \param touchID the ID of a touch device + * \param touchID the ID of a touch device. * \returns the number of active fingers for a given touch device on success * or 0 on failure; call SDL_GetError() for more information. * @@ -128,8 +128,8 @@ extern DECLSPEC int SDLCALL SDL_GetNumTouchFingers(SDL_TouchID touchID); * * The returned resource is owned by SDL and should not be deallocated. * - * \param touchID the ID of the requested touch device - * \param index the index of the requested finger + * \param touchID the ID of the requested touch device. + * \param index the index of the requested finger. * \returns a pointer to the SDL_Finger object or NULL if no object at the * given ID and index could be found. * diff --git a/vs/sdl2/include/SDL_types.h b/vs/sdl2/include/SDL_types.h index e8d33c65137..cb3b4a8df1a 100644 --- a/vs/sdl2/include/SDL_types.h +++ b/vs/sdl2/include/SDL_types.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,11 +19,6 @@ 3. This notice may not be removed or altered from any source distribution. */ -/** - * \file SDL_types.h - * - * \deprecated - */ - /* DEPRECATED */ + #include "SDL_stdinc.h" diff --git a/vs/sdl2/include/SDL_version.h b/vs/sdl2/include/SDL_version.h index bd33871a9ec..9d7c760ddf5 100644 --- a/vs/sdl2/include/SDL_version.h +++ b/vs/sdl2/include/SDL_version.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_version.h + * # CategoryVersion * - * This header defines the current SDL version. + * This header defines the current SDL version. */ #ifndef SDL_version_h_ @@ -43,10 +43,9 @@ extern "C" { * Information about the version of SDL in use. * * Represents the library's version as three levels: major revision - * (increments with massive changes, additions, and enhancements), - * minor revision (increments with backwards-compatible changes to the - * major revision), and patchlevel (increments with fixes to the minor - * revision). + * (increments with massive changes, additions, and enhancements), minor + * revision (increments with backwards-compatible changes to the major + * revision), and patchlevel (increments with fixes to the minor revision). * * \sa SDL_VERSION * \sa SDL_GetVersion @@ -61,18 +60,17 @@ typedef struct SDL_version /* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL */ #define SDL_MAJOR_VERSION 2 -#define SDL_MINOR_VERSION 30 -#define SDL_PATCHLEVEL 4 +#define SDL_MINOR_VERSION 32 +#define SDL_PATCHLEVEL 10 /** * Macro to determine SDL version program was compiled against. * - * This macro fills in a SDL_version structure with the version of the - * library you compiled against. This is determined by what header the - * compiler uses. Note that if you dynamically linked the library, you might - * have a slightly newer or older version at runtime. That version can be - * determined with SDL_GetVersion(), which, unlike SDL_VERSION(), - * is not a macro. + * This macro fills in a SDL_version structure with the version of the library + * you compiled against. This is determined by what header the compiler uses. + * Note that if you dynamically linked the library, you might have a slightly + * newer or older version at runtime. That version can be determined with + * SDL_GetVersion(), which, unlike SDL_VERSION(), is not a macro. * * \param x A pointer to a SDL_version struct to initialize. * @@ -88,37 +86,40 @@ typedef struct SDL_version /* TODO: Remove this whole block in SDL 3 */ #if SDL_MAJOR_VERSION < 3 + /** - * This macro turns the version numbers into a numeric value: - * \verbatim - (1,2,3) -> (1203) - \endverbatim + * This macro turns the version numbers into a numeric value: + * + * ``` + * (1,2,3) -> (1203) + * ``` + * + * This assumes that there will never be more than 100 patchlevels. * - * This assumes that there will never be more than 100 patchlevels. + * In versions higher than 2.9.0, the minor version overflows into the + * thousands digit: for example, 2.23.0 is encoded as 4300, and 2.255.99 would + * be encoded as 25799. * - * In versions higher than 2.9.0, the minor version overflows into - * the thousands digit: for example, 2.23.0 is encoded as 4300, - * and 2.255.99 would be encoded as 25799. - * This macro will not be available in SDL 3.x. + * This macro will not be available in SDL 3.x. */ #define SDL_VERSIONNUM(X, Y, Z) \ ((X)*1000 + (Y)*100 + (Z)) /** - * This is the version number macro for the current SDL version. + * This is the version number macro for the current SDL version. * - * In versions higher than 2.9.0, the minor version overflows into - * the thousands digit: for example, 2.23.0 is encoded as 4300. - * This macro will not be available in SDL 3.x. + * In versions higher than 2.9.0, the minor version overflows into the + * thousands digit: for example, 2.23.0 is encoded as 4300. This macro will + * not be available in SDL 3.x. * - * Deprecated, use SDL_VERSION_ATLEAST or SDL_VERSION instead. + * Deprecated, use SDL_VERSION_ATLEAST or SDL_VERSION instead. */ #define SDL_COMPILEDVERSION \ SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) #endif /* SDL_MAJOR_VERSION < 3 */ /** - * This macro will evaluate to true if compiled with SDL at least X.Y.Z. + * This macro will evaluate to true if compiled with SDL at least X.Y.Z. */ #define SDL_VERSION_ATLEAST(X, Y, Z) \ ((SDL_MAJOR_VERSION >= X) && \ @@ -135,7 +136,7 @@ typedef struct SDL_version * * This function may be called safely at any time, even before SDL_Init(). * - * \param ver the SDL_version structure that contains the version information + * \param ver the SDL_version structure that contains the version information. * * \since This function is available since SDL 2.0.0. * diff --git a/vs/sdl2/include/SDL_video.h b/vs/sdl2/include/SDL_video.h index fa47d30991d..2db5552fa22 100644 --- a/vs/sdl2/include/SDL_video.h +++ b/vs/sdl2/include/SDL_video.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,9 @@ */ /** - * \file SDL_video.h + * # CategoryVideo * - * Header file for SDL video functions. + * Header file for SDL video functions. */ #ifndef SDL_video_h_ @@ -40,17 +40,17 @@ extern "C" { #endif /** - * \brief The structure that defines a display mode + * The structure that defines a display mode * - * \sa SDL_GetNumDisplayModes() - * \sa SDL_GetDisplayMode() - * \sa SDL_GetDesktopDisplayMode() - * \sa SDL_GetCurrentDisplayMode() - * \sa SDL_GetClosestDisplayMode() - * \sa SDL_SetWindowDisplayMode() - * \sa SDL_GetWindowDisplayMode() + * \sa SDL_GetNumDisplayModes + * \sa SDL_GetDisplayMode + * \sa SDL_GetDesktopDisplayMode + * \sa SDL_GetCurrentDisplayMode + * \sa SDL_GetClosestDisplayMode + * \sa SDL_SetWindowDisplayMode + * \sa SDL_GetWindowDisplayMode */ -typedef struct +typedef struct SDL_DisplayMode { Uint32 format; /**< pixel format */ int w; /**< width, in screen coordinates */ @@ -60,46 +60,46 @@ typedef struct } SDL_DisplayMode; /** - * \brief The type used to identify a window - * - * \sa SDL_CreateWindow() - * \sa SDL_CreateWindowFrom() - * \sa SDL_DestroyWindow() - * \sa SDL_FlashWindow() - * \sa SDL_GetWindowData() - * \sa SDL_GetWindowFlags() - * \sa SDL_GetWindowGrab() - * \sa SDL_GetWindowKeyboardGrab() - * \sa SDL_GetWindowMouseGrab() - * \sa SDL_GetWindowPosition() - * \sa SDL_GetWindowSize() - * \sa SDL_GetWindowTitle() - * \sa SDL_HideWindow() - * \sa SDL_MaximizeWindow() - * \sa SDL_MinimizeWindow() - * \sa SDL_RaiseWindow() - * \sa SDL_RestoreWindow() - * \sa SDL_SetWindowData() - * \sa SDL_SetWindowFullscreen() - * \sa SDL_SetWindowGrab() - * \sa SDL_SetWindowKeyboardGrab() - * \sa SDL_SetWindowMouseGrab() - * \sa SDL_SetWindowIcon() - * \sa SDL_SetWindowPosition() - * \sa SDL_SetWindowSize() - * \sa SDL_SetWindowBordered() - * \sa SDL_SetWindowResizable() - * \sa SDL_SetWindowTitle() - * \sa SDL_ShowWindow() + * The opaque type used to identify a window. + * + * \sa SDL_CreateWindow + * \sa SDL_CreateWindowFrom + * \sa SDL_DestroyWindow + * \sa SDL_FlashWindow + * \sa SDL_GetWindowData + * \sa SDL_GetWindowFlags + * \sa SDL_GetWindowGrab + * \sa SDL_GetWindowKeyboardGrab + * \sa SDL_GetWindowMouseGrab + * \sa SDL_GetWindowPosition + * \sa SDL_GetWindowSize + * \sa SDL_GetWindowTitle + * \sa SDL_HideWindow + * \sa SDL_MaximizeWindow + * \sa SDL_MinimizeWindow + * \sa SDL_RaiseWindow + * \sa SDL_RestoreWindow + * \sa SDL_SetWindowData + * \sa SDL_SetWindowFullscreen + * \sa SDL_SetWindowGrab + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_SetWindowMouseGrab + * \sa SDL_SetWindowIcon + * \sa SDL_SetWindowPosition + * \sa SDL_SetWindowSize + * \sa SDL_SetWindowBordered + * \sa SDL_SetWindowResizable + * \sa SDL_SetWindowTitle + * \sa SDL_ShowWindow */ typedef struct SDL_Window SDL_Window; /** - * \brief The flags on a window + * The flags on a window * - * \sa SDL_GetWindowFlags() + * \sa SDL_GetWindowFlags */ -typedef enum +typedef enum SDL_WindowFlags { SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */ SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ @@ -131,7 +131,7 @@ typedef enum } SDL_WindowFlags; /** - * \brief Used to indicate that you don't care what the window position is. + * Used to indicate that you don't care what the window position is. */ #define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000u #define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X)) @@ -140,7 +140,7 @@ typedef enum (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK) /** - * \brief Used to indicate that the window position should be centered. + * Used to indicate that the window position should be centered. */ #define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000u #define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X)) @@ -149,9 +149,9 @@ typedef enum (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK) /** - * \brief Event subtype for window events + * Event subtype for window events */ -typedef enum +typedef enum SDL_WindowEventID { SDL_WINDOWEVENT_NONE, /**< Never used */ SDL_WINDOWEVENT_SHOWN, /**< Window has been shown */ @@ -180,9 +180,9 @@ typedef enum } SDL_WindowEventID; /** - * \brief Event subtype for display events + * Event subtype for display events */ -typedef enum +typedef enum SDL_DisplayEventID { SDL_DISPLAYEVENT_NONE, /**< Never used */ SDL_DISPLAYEVENT_ORIENTATION, /**< Display orientation has changed to data1 */ @@ -192,9 +192,9 @@ typedef enum } SDL_DisplayEventID; /** - * \brief Display orientation + * Display orientation */ -typedef enum +typedef enum SDL_DisplayOrientation { SDL_ORIENTATION_UNKNOWN, /**< The display orientation can't be determined */ SDL_ORIENTATION_LANDSCAPE, /**< The display is in landscape mode, with the right side up, relative to portrait mode */ @@ -204,9 +204,9 @@ typedef enum } SDL_DisplayOrientation; /** - * \brief Window flash operation + * Window flash operation */ -typedef enum +typedef enum SDL_FlashOperation { SDL_FLASH_CANCEL, /**< Cancel any window flash state */ SDL_FLASH_BRIEFLY, /**< Flash the window briefly to get attention */ @@ -214,53 +214,85 @@ typedef enum } SDL_FlashOperation; /** - * \brief An opaque handle to an OpenGL context. + * An opaque handle to an OpenGL context. + * + * \sa SDL_GL_CreateContext */ typedef void *SDL_GLContext; /** - * \brief OpenGL configuration attributes + * OpenGL configuration attributes. + * + * While you can set most OpenGL attributes normally, the attributes listed + * above must be known before SDL creates the window that will be used with + * the OpenGL context. These attributes are set and read with + * SDL_GL_SetAttribute and SDL_GL_GetAttribute. + * + * In some cases, these attributes are minimum requests; the GL does not + * promise to give you exactly what you asked for. It's possible to ask for a + * 16-bit depth buffer and get a 24-bit one instead, for example, or to ask + * for no stencil buffer and still have one available. Context creation should + * fail if the GL can't provide your requested attributes at a minimum, but + * you should check to see exactly what you got. + * + * + * [Multisample anti-aliasing](http://en.wikipedia.org/wiki/Multisample_anti-aliasing) + * is a type of full screen anti-aliasing. Multipsampling defaults to off but + * can be turned on by setting SDL_GL_MULTISAMPLEBUFFERS to 1 and + * SDL_GL_MULTISAMPLESAMPLES to a value greater than 0. Typical values are 2 + * and 4. + * + * SDL_GL_CONTEXT_PROFILE_MASK determines the type of context created, while + * both SDL_GL_CONTEXT_MAJOR_VERSION and SDL_GL_CONTEXT_MINOR_VERSION + * determine which version. All three attributes must be set prior to creating + * the first window, and in general you can't change the value of + * SDL_GL_CONTEXT_PROFILE_MASK without first destroying all windows created + * with the previous setting. + * + * SDL_GL_CONTEXT_RELEASE_BEHAVIOR can be set to + * SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE or + * SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH. */ -typedef enum +typedef enum SDL_GLattr { - SDL_GL_RED_SIZE, - SDL_GL_GREEN_SIZE, - SDL_GL_BLUE_SIZE, - SDL_GL_ALPHA_SIZE, - SDL_GL_BUFFER_SIZE, - SDL_GL_DOUBLEBUFFER, - SDL_GL_DEPTH_SIZE, - SDL_GL_STENCIL_SIZE, - SDL_GL_ACCUM_RED_SIZE, - SDL_GL_ACCUM_GREEN_SIZE, - SDL_GL_ACCUM_BLUE_SIZE, - SDL_GL_ACCUM_ALPHA_SIZE, - SDL_GL_STEREO, - SDL_GL_MULTISAMPLEBUFFERS, - SDL_GL_MULTISAMPLESAMPLES, - SDL_GL_ACCELERATED_VISUAL, - SDL_GL_RETAINED_BACKING, - SDL_GL_CONTEXT_MAJOR_VERSION, - SDL_GL_CONTEXT_MINOR_VERSION, - SDL_GL_CONTEXT_EGL, - SDL_GL_CONTEXT_FLAGS, - SDL_GL_CONTEXT_PROFILE_MASK, - SDL_GL_SHARE_WITH_CURRENT_CONTEXT, - SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, - SDL_GL_CONTEXT_RELEASE_BEHAVIOR, + SDL_GL_RED_SIZE, /**< the minimum number of bits for the red channel of the color buffer; defaults to 3. */ + SDL_GL_GREEN_SIZE, /**< the minimum number of bits for the green channel of the color buffer; defaults to 3. */ + SDL_GL_BLUE_SIZE, /**< the minimum number of bits for the blue channel of the color buffer; defaults to 2. */ + SDL_GL_ALPHA_SIZE, /**< the minimum number of bits for the alpha channel of the color buffer; defaults to 0. */ + SDL_GL_BUFFER_SIZE, /**< the minimum number of bits for frame buffer size; defaults to 0. */ + SDL_GL_DOUBLEBUFFER, /**< whether the output is single or double buffered; defaults to double buffering on. */ + SDL_GL_DEPTH_SIZE, /**< the minimum number of bits in the depth buffer; defaults to 16. */ + SDL_GL_STENCIL_SIZE, /**< the minimum number of bits in the stencil buffer; defaults to 0. */ + SDL_GL_ACCUM_RED_SIZE, /**< the minimum number of bits for the red channel of the accumulation buffer; defaults to 0. */ + SDL_GL_ACCUM_GREEN_SIZE, /**< the minimum number of bits for the green channel of the accumulation buffer; defaults to 0. */ + SDL_GL_ACCUM_BLUE_SIZE, /**< the minimum number of bits for the blue channel of the accumulation buffer; defaults to 0. */ + SDL_GL_ACCUM_ALPHA_SIZE, /**< the minimum number of bits for the alpha channel of the accumulation buffer; defaults to 0. */ + SDL_GL_STEREO, /**< whether the output is stereo 3D; defaults to off. */ + SDL_GL_MULTISAMPLEBUFFERS, /**< the number of buffers used for multisample anti-aliasing; defaults to 0. */ + SDL_GL_MULTISAMPLESAMPLES, /**< the number of samples used around the current pixel used for multisample anti-aliasing. */ + SDL_GL_ACCELERATED_VISUAL, /**< set to 1 to require hardware acceleration, set to 0 to force software rendering; defaults to allow either. */ + SDL_GL_RETAINED_BACKING, /**< not used (deprecated). */ + SDL_GL_CONTEXT_MAJOR_VERSION, /**< OpenGL context major version. */ + SDL_GL_CONTEXT_MINOR_VERSION, /**< OpenGL context minor version. */ + SDL_GL_CONTEXT_EGL, /**< deprecated: set SDL_GL_CONTEXT_PROFILE_MASK to SDL_GL_CONTEXT_PROFILE_ES to enable instead. */ + SDL_GL_CONTEXT_FLAGS, /**< some combination of 0 or more of elements of the SDL_GLcontextFlag enumeration; defaults to 0. */ + SDL_GL_CONTEXT_PROFILE_MASK, /**< type of GL context (Core, Compatibility, ES). See SDL_GLprofile; default value depends on platform. */ + SDL_GL_SHARE_WITH_CURRENT_CONTEXT, /**< OpenGL context sharing; defaults to 0. */ + SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, /**< requests sRGB capable visual; defaults to 0. (>= SDL 2.0.1) */ + SDL_GL_CONTEXT_RELEASE_BEHAVIOR, /**< sets context the release behavior; defaults to 1. (>= SDL 2.0.4) */ SDL_GL_CONTEXT_RESET_NOTIFICATION, SDL_GL_CONTEXT_NO_ERROR, SDL_GL_FLOATBUFFERS } SDL_GLattr; -typedef enum +typedef enum SDL_GLprofile { SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, SDL_GL_CONTEXT_PROFILE_ES = 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */ } SDL_GLprofile; -typedef enum +typedef enum SDL_GLcontextFlag { SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002, @@ -268,13 +300,13 @@ typedef enum SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008 } SDL_GLcontextFlag; -typedef enum +typedef enum SDL_GLcontextReleaseFlag { SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = 0x0000, SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001 } SDL_GLcontextReleaseFlag; -typedef enum +typedef enum SDL_GLContextResetNotification { SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000, SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = 0x0001 @@ -300,7 +332,7 @@ extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void); * The video drivers are presented in the order in which they are normally * checked during initialization. * - * \param index the index of a video driver + * \param index the index of a video driver. * \returns the name of the video driver with the given **index**. * * \since This function is available since SDL 2.0.0. @@ -327,7 +359,7 @@ extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index); * specific `driver_name`. * * \param driver_name the name of a video driver to initialize, or NULL for - * the default driver + * the default driver. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -380,7 +412,7 @@ extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void); * Get the name of a display in UTF-8 encoding. * * \param displayIndex the index of display from which the name should be - * queried + * queried. * \returns the name of a display or NULL for an invalid display index or * failure; call SDL_GetError() for more information. * @@ -395,8 +427,8 @@ extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex); * * The primary display (`displayIndex` zero) is always located at 0,0. * - * \param displayIndex the index of the display to query - * \param rect the SDL_Rect structure filled in with the display bounds + * \param displayIndex the index of the display to query. + * \param rect the SDL_Rect structure filled in with the display bounds. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -425,8 +457,8 @@ extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * re * range. * * \param displayIndex the index of the display to query the usable bounds - * from - * \param rect the SDL_Rect structure filled in with the display bounds + * from. + * \param rect the SDL_Rect structure filled in with the display bounds. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -456,13 +488,13 @@ extern DECLSPEC int SDLCALL SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rec * more consistent, reliable, and clear. * * \param displayIndex the index of the display from which DPI information - * should be queried + * should be queried. * \param ddpi a pointer filled in with the diagonal DPI of the display; may - * be NULL + * be NULL. * \param hdpi a pointer filled in with the horizontal DPI of the display; may - * be NULL + * be NULL. * \param vdpi a pointer filled in with the vertical DPI of the display; may - * be NULL + * be NULL. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -475,7 +507,7 @@ extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, fl /** * Get the orientation of a display. * - * \param displayIndex the index of the display to query + * \param displayIndex the index of the display to query. * \returns The SDL_DisplayOrientation enum value of the display, or * `SDL_ORIENTATION_UNKNOWN` if it isn't available. * @@ -491,7 +523,7 @@ extern DECLSPEC SDL_DisplayOrientation SDLCALL SDL_GetDisplayOrientation(int dis * The `displayIndex` needs to be in the range from 0 to * SDL_GetNumVideoDisplays() - 1. * - * \param displayIndex the index of the display to query + * \param displayIndex the index of the display to query. * \returns a number >= 1 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -513,10 +545,10 @@ extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(int displayIndex); * - packed pixel layout -> largest to smallest * - refresh rate -> highest to lowest * - * \param displayIndex the index of the display to query - * \param modeIndex the index of the display mode to query + * \param displayIndex the index of the display to query. + * \param modeIndex the index of the display mode to query. * \param mode an SDL_DisplayMode structure filled in with the mode at - * `modeIndex` + * `modeIndex`. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -535,9 +567,9 @@ extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int displayIndex, int modeIndex, * function will return the previous native display mode, and not the current * display mode. * - * \param displayIndex the index of the display to query + * \param displayIndex the index of the display to query. * \param mode an SDL_DisplayMode structure filled in with the current display - * mode + * mode. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -557,9 +589,9 @@ extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(int displayIndex, SDL_Disp * function will return the current display mode, and not the previous native * display mode. * - * \param displayIndex the index of the display to query + * \param displayIndex the index of the display to query. * \param mode an SDL_DisplayMode structure filled in with the current display - * mode + * mode. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -583,11 +615,11 @@ extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_Disp * and finally checking the refresh rate. If all the available modes are too * small, then NULL is returned. * - * \param displayIndex the index of the display to query + * \param displayIndex the index of the display to query. * \param mode an SDL_DisplayMode structure containing the desired display - * mode + * mode. * \param closest an SDL_DisplayMode structure filled in with the closest - * match of the available display modes + * match of the available display modes. * \returns the passed in value `closest` or NULL if no matching video mode * was available; call SDL_GetError() for more information. * @@ -601,7 +633,7 @@ extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayI /** * Get the index of the display containing a point * - * \param point the point to query + * \param point the point to query. * \returns the index of the display containing the point or a negative error * code on failure; call SDL_GetError() for more information. * @@ -615,7 +647,7 @@ extern DECLSPEC int SDLCALL SDL_GetPointDisplayIndex(const SDL_Point * point); /** * Get the index of the display primarily containing a rect * - * \param rect the rect to query + * \param rect the rect to query. * \returns the index of the display entirely containing the rect or closest * to the center of the rect on success or a negative error code on * failure; call SDL_GetError() for more information. @@ -630,7 +662,7 @@ extern DECLSPEC int SDLCALL SDL_GetRectDisplayIndex(const SDL_Rect * rect); /** * Get the index of the display associated with a window. * - * \param window the window to query + * \param window the window to query. * \returns the index of the display containing the center of the window on * success or a negative error code on failure; call SDL_GetError() * for more information. @@ -649,10 +681,10 @@ extern DECLSPEC int SDLCALL SDL_GetWindowDisplayIndex(SDL_Window * window); * change the window size when the window is not fullscreen, use * SDL_SetWindowSize(). * - * \param window the window to affect + * \param window the window to affect. * \param mode the SDL_DisplayMode structure representing the mode to use, or * NULL to use the window's dimensions and the desktop's format - * and refresh rate + * and refresh rate. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -667,9 +699,9 @@ extern DECLSPEC int SDLCALL SDL_SetWindowDisplayMode(SDL_Window * window, /** * Query the display mode to use when a window is visible at fullscreen. * - * \param window the window to query + * \param window the window to query. * \param mode an SDL_DisplayMode structure filled in with the fullscreen - * display mode + * display mode. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -686,8 +718,8 @@ extern DECLSPEC int SDLCALL SDL_GetWindowDisplayMode(SDL_Window * window, * * Data returned should be freed with SDL_free. * - * \param window the window to query - * \param size the size of the ICC profile + * \param window the window to query. + * \param size the size of the ICC profile. * \returns the raw ICC profile data on success or NULL on failure; call * SDL_GetError() for more information. * @@ -698,7 +730,7 @@ extern DECLSPEC void* SDLCALL SDL_GetWindowICCProfile(SDL_Window * window, size_ /** * Get the pixel format associated with the window. * - * \param window the window to query + * \param window the window to query. * \returns the pixel format of the window on success or * SDL_PIXELFORMAT_UNKNOWN on failure; call SDL_GetError() for more * information. @@ -762,15 +794,15 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); * loader or link to a dynamic library version. This limitation may be removed * in a future version of SDL. * - * \param title the title of the window, in UTF-8 encoding + * \param title the title of the window, in UTF-8 encoding. * \param x the x position of the window, `SDL_WINDOWPOS_CENTERED`, or - * `SDL_WINDOWPOS_UNDEFINED` + * `SDL_WINDOWPOS_UNDEFINED`. * \param y the y position of the window, `SDL_WINDOWPOS_CENTERED`, or - * `SDL_WINDOWPOS_UNDEFINED` - * \param w the width of the window, in screen coordinates - * \param h the height of the window, in screen coordinates - * \param flags 0, or one or more SDL_WindowFlags OR'd together - * \returns the window that was created or NULL on failure; call + * `SDL_WINDOWPOS_UNDEFINED`. + * \param w the width of the window, in screen coordinates. + * \param h the height of the window, in screen coordinates. + * \param flags 0, or one or more SDL_WindowFlags OR'd together. + * \returns the `SDL_Window` that was created or NULL on failure; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.0. @@ -790,7 +822,7 @@ extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, * before using SDL_CreateWindowFrom(). * * \param data a pointer to driver-dependent window creation data, typically - * your native window cast to a void* + * your native window cast to a void*. * \returns the window that was created or NULL on failure; call * SDL_GetError() for more information. * @@ -807,7 +839,7 @@ extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowFrom(const void *data); * The numeric ID is what SDL_WindowEvent references, and is necessary to map * these events to specific SDL_Window objects. * - * \param window the window to query + * \param window the window to query. * \returns the ID of the window on success or 0 on failure; call * SDL_GetError() for more information. * @@ -823,7 +855,7 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowID(SDL_Window * window); * The numeric ID is what SDL_WindowEvent references, and is necessary to map * these events to specific SDL_Window objects. * - * \param id the ID of the window + * \param id the ID of the window. * \returns the window associated with `id` or NULL if it doesn't exist; call * SDL_GetError() for more information. * @@ -836,8 +868,8 @@ extern DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(Uint32 id); /** * Get the window flags. * - * \param window the window to query - * \returns a mask of the SDL_WindowFlags associated with `window` + * \param window the window to query. + * \returns a mask of the SDL_WindowFlags associated with `window`. * * \since This function is available since SDL 2.0.0. * @@ -856,8 +888,8 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_Window * window); * * This string is expected to be in UTF-8 encoding. * - * \param window the window to change - * \param title the desired window title in UTF-8 format + * \param window the window to change. + * \param title the desired window title in UTF-8 format. * * \since This function is available since SDL 2.0.0. * @@ -869,7 +901,7 @@ extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_Window * window, /** * Get the title of a window. * - * \param window the window to query + * \param window the window to query. * \returns the title of the window in UTF-8 format or "" if there is no * title. * @@ -882,8 +914,8 @@ extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_Window * window); /** * Set the icon for a window. * - * \param window the window to change - * \param icon an SDL_Surface structure containing the icon for the window + * \param window the window to change. + * \param icon an SDL_Surface structure containing the icon for the window. * * \since This function is available since SDL 2.0.0. */ @@ -895,9 +927,9 @@ extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window, * * `name` is case-sensitive. * - * \param window the window to associate with the pointer - * \param name the name of the pointer - * \param userdata the associated pointer + * \param window the window to associate with the pointer. + * \param name the name of the pointer. + * \param userdata the associated pointer. * \returns the previous value associated with `name`. * * \since This function is available since SDL 2.0.0. @@ -911,8 +943,8 @@ extern DECLSPEC void* SDLCALL SDL_SetWindowData(SDL_Window * window, /** * Retrieve the data pointer associated with a window. * - * \param window the window to query - * \param name the name of the pointer + * \param window the window to query. + * \param name the name of the pointer. * \returns the value associated with `name`. * * \since This function is available since SDL 2.0.0. @@ -927,11 +959,11 @@ extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window, * * The window coordinate origin is the upper left of the display. * - * \param window the window to reposition + * \param window the window to reposition. * \param x the x coordinate of the window in screen coordinates, or - * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED` + * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`. * \param y the y coordinate of the window in screen coordinates, or - * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED` + * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`. * * \since This function is available since SDL 2.0.0. * @@ -946,11 +978,11 @@ extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window, * If you do not need the value for one of the positions a NULL may be passed * in the `x` or `y` parameter. * - * \param window the window to query + * \param window the window to query. * \param x a pointer filled in with the x position of the window, in screen - * coordinates, may be NULL + * coordinates, may be NULL. * \param y a pointer filled in with the y position of the window, in screen - * coordinates, may be NULL + * coordinates, may be NULL. * * \since This function is available since SDL 2.0.0. * @@ -970,11 +1002,11 @@ extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window, * Fullscreen windows automatically match the size of the display mode, and * you should use SDL_SetWindowDisplayMode() to change their size. * - * \param window the window to change + * \param window the window to change. * \param w the width of the window in pixels, in screen coordinates, must be - * > 0 + * > 0. * \param h the height of the window in pixels, in screen coordinates, must be - * > 0 + * > 0. * * \since This function is available since SDL 2.0.0. * @@ -996,11 +1028,11 @@ extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, * SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to get the * real client area size in pixels. * - * \param window the window to query the width and height from + * \param window the window to query the width and height from. * \param w a pointer filled in with the width of the window, in screen - * coordinates, may be NULL + * coordinates, may be NULL. * \param h a pointer filled in with the height of the window, in screen - * coordinates, may be NULL + * coordinates, may be NULL. * * \since This function is available since SDL 2.0.0. * @@ -1027,15 +1059,15 @@ extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w, * This function also returns -1 if getting the information is not supported. * * \param window the window to query the size values of the border - * (decorations) from + * (decorations) from. * \param top pointer to variable for storing the size of the top border; NULL - * is permitted + * is permitted. * \param left pointer to variable for storing the size of the left border; - * NULL is permitted + * NULL is permitted. * \param bottom pointer to variable for storing the size of the bottom - * border; NULL is permitted + * border; NULL is permitted. * \param right pointer to variable for storing the size of the right border; - * NULL is permitted + * NULL is permitted. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1055,10 +1087,11 @@ extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window, * platform with high-DPI support (Apple calls this "Retina"), and not * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. * - * \param window the window from which the drawable size should be queried - * \param w a pointer to variable for storing the width in pixels, may be NULL + * \param window the window from which the drawable size should be queried. + * \param w a pointer to variable for storing the width in pixels, may be + * NULL. * \param h a pointer to variable for storing the height in pixels, may be - * NULL + * NULL. * * \since This function is available since SDL 2.26.0. * @@ -1071,9 +1104,9 @@ extern DECLSPEC void SDLCALL SDL_GetWindowSizeInPixels(SDL_Window * window, /** * Set the minimum size of a window's client area. * - * \param window the window to change - * \param min_w the minimum width of the window in pixels - * \param min_h the minimum height of the window in pixels + * \param window the window to change. + * \param min_w the minimum width of the window in pixels. + * \param min_h the minimum height of the window in pixels. * * \since This function is available since SDL 2.0.0. * @@ -1086,11 +1119,11 @@ extern DECLSPEC void SDLCALL SDL_SetWindowMinimumSize(SDL_Window * window, /** * Get the minimum size of a window's client area. * - * \param window the window to query + * \param window the window to query. * \param w a pointer filled in with the minimum width of the window, may be - * NULL + * NULL. * \param h a pointer filled in with the minimum height of the window, may be - * NULL + * NULL. * * \since This function is available since SDL 2.0.0. * @@ -1103,9 +1136,9 @@ extern DECLSPEC void SDLCALL SDL_GetWindowMinimumSize(SDL_Window * window, /** * Set the maximum size of a window's client area. * - * \param window the window to change - * \param max_w the maximum width of the window in pixels - * \param max_h the maximum height of the window in pixels + * \param window the window to change. + * \param max_w the maximum width of the window in pixels. + * \param max_h the maximum height of the window in pixels. * * \since This function is available since SDL 2.0.0. * @@ -1118,11 +1151,11 @@ extern DECLSPEC void SDLCALL SDL_SetWindowMaximumSize(SDL_Window * window, /** * Get the maximum size of a window's client area. * - * \param window the window to query + * \param window the window to query. * \param w a pointer filled in with the maximum width of the window, may be - * NULL + * NULL. * \param h a pointer filled in with the maximum height of the window, may be - * NULL + * NULL. * * \since This function is available since SDL 2.0.0. * @@ -1141,8 +1174,8 @@ extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window, * * You can't change the border state of a fullscreen window. * - * \param window the window of which to change the border state - * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border + * \param window the window of which to change the border state. + * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border. * * \since This function is available since SDL 2.0.0. * @@ -1160,8 +1193,8 @@ extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window, * * You can't change the resizable state of a fullscreen window. * - * \param window the window of which to change the resizable state - * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow + * \param window the window of which to change the resizable state. + * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow. * * \since This function is available since SDL 2.0.5. * @@ -1176,9 +1209,9 @@ extern DECLSPEC void SDLCALL SDL_SetWindowResizable(SDL_Window * window, * This will add or remove the window's `SDL_WINDOW_ALWAYS_ON_TOP` flag. This * will bring the window to the front and keep the window above the rest. * - * \param window The window of which to change the always on top state + * \param window The window of which to change the always on top state. * \param on_top SDL_TRUE to set the window always on top, SDL_FALSE to - * disable + * disable. * * \since This function is available since SDL 2.0.16. * @@ -1190,7 +1223,7 @@ extern DECLSPEC void SDLCALL SDL_SetWindowAlwaysOnTop(SDL_Window * window, /** * Show a window. * - * \param window the window to show + * \param window the window to show. * * \since This function is available since SDL 2.0.0. * @@ -1202,7 +1235,7 @@ extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_Window * window); /** * Hide a window. * - * \param window the window to hide + * \param window the window to hide. * * \since This function is available since SDL 2.0.0. * @@ -1213,7 +1246,7 @@ extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_Window * window); /** * Raise a window above other windows and set the input focus. * - * \param window the window to raise + * \param window the window to raise. * * \since This function is available since SDL 2.0.0. */ @@ -1222,7 +1255,7 @@ extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_Window * window); /** * Make a window as large as possible. * - * \param window the window to maximize + * \param window the window to maximize. * * \since This function is available since SDL 2.0.0. * @@ -1234,7 +1267,7 @@ extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window * window); /** * Minimize a window to an iconic representation. * - * \param window the window to minimize + * \param window the window to minimize. * * \since This function is available since SDL 2.0.0. * @@ -1246,7 +1279,7 @@ extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_Window * window); /** * Restore the size and position of a minimized or maximized window. * - * \param window the window to restore + * \param window the window to restore. * * \since This function is available since SDL 2.0.0. * @@ -1262,8 +1295,12 @@ extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window); * videomode change; `SDL_WINDOW_FULLSCREEN_DESKTOP` for "fake" fullscreen * that takes the size of the desktop; and 0 for windowed mode. * - * \param window the window to change - * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0 + * Note that for some renderers, this function may trigger an + * SDL_RENDER_TARGETS_RESET event. Your application should be prepared to + * handle this event by reuploading textures! + * + * \param window the window to change. + * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1297,11 +1334,15 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasWindowSurface(SDL_Window *window); * This surface will be invalidated if the window is resized. After resizing a * window this function must be called again to return a valid surface. * + * Note that on some platforms the pixels pointer of the surface may be + * modified after each call to SDL_UpdateWindowSurface(), so that the platform + * code can implement efficient double or triple buffering. + * * You may not combine this with 3D or the rendering API on this window. * * This function is affected by `SDL_HINT_FRAMEBUFFER_ACCELERATION`. * - * \param window the window to query + * \param window the window to query. * \returns the surface associated with the window, or NULL on failure; call * SDL_GetError() for more information. * @@ -1322,7 +1363,7 @@ extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window); * * This function is equivalent to the SDL 1.2 API SDL_Flip(). * - * \param window the window to update + * \param window the window to update. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1343,13 +1384,13 @@ extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window); * * Note that this function will update _at least_ the rectangles specified, * but this is only intended as an optimization; in practice, this might - * update more of the screen (or all of the screen!), depending on what - * method SDL uses to send pixels to the system. + * update more of the screen (or all of the screen!), depending on what method + * SDL uses to send pixels to the system. * - * \param window the window to update + * \param window the window to update. * \param rects an array of SDL_Rect structures representing areas of the - * surface to copy, in pixels - * \param numrects the number of rectangles + * surface to copy, in pixels. + * \param numrects the number of rectangles. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1365,7 +1406,7 @@ extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window, /** * Destroy the surface associated with the window. * - * \param window the window to update + * \param window the window to update. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1386,8 +1427,8 @@ extern DECLSPEC int SDLCALL SDL_DestroyWindowSurface(SDL_Window *window); * If the caller enables a grab while another window is currently grabbed, the * other window loses its grab in favor of the caller's window. * - * \param window the window for which the input grab mode should be set - * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input + * \param window the window for which the input grab mode should be set. + * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input. * * \since This function is available since SDL 2.0.0. * @@ -1448,7 +1489,7 @@ extern DECLSPEC void SDLCALL SDL_SetWindowMouseGrab(SDL_Window * window, /** * Get a window's input grab mode. * - * \param window the window to query + * \param window the window to query. * \returns SDL_TRUE if input is grabbed, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. @@ -1460,7 +1501,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window); /** * Get a window's keyboard grab mode. * - * \param window the window to query + * \param window the window to query. * \returns SDL_TRUE if keyboard is grabbed, and SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.16. @@ -1473,7 +1514,7 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowKeyboardGrab(SDL_Window * window); /** * Get a window's mouse grab mode. * - * \param window the window to query + * \param window the window to query. * \returns SDL_TRUE if mouse is grabbed, and SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.16. @@ -1517,7 +1558,7 @@ extern DECLSPEC int SDLCALL SDL_SetWindowMouseRect(SDL_Window * window, const SD /** * Get the mouse confinement rectangle of a window. * - * \param window The window to query + * \param window The window to query. * \returns A pointer to the mouse confinement rectangle of a window, or NULL * if there isn't one. * @@ -1542,9 +1583,9 @@ extern DECLSPEC const SDL_Rect * SDLCALL SDL_GetWindowMouseRect(SDL_Window * win * something similar. * * \param window the window used to select the display whose brightness will - * be changed + * be changed. * \param brightness the brightness (gamma multiplier) value to set where 0.0 - * is completely dark and 1.0 is normal brightness + * is completely dark and 1.0 is normal brightness. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1564,7 +1605,7 @@ extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float b * this display can be retrieved using SDL_GetWindowDisplayIndex().) * * \param window the window used to select the display whose brightness will - * be queried + * be queried. * \returns the brightness for the display where 0.0 is completely dark and * 1.0 is normal brightness. * @@ -1582,8 +1623,8 @@ extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window); * * This function also returns -1 if setting the opacity isn't supported. * - * \param window the window which will be made transparent or opaque - * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque) + * \param window the window which will be made transparent or opaque. + * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque). * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1603,8 +1644,8 @@ extern DECLSPEC int SDLCALL SDL_SetWindowOpacity(SDL_Window * window, float opac * * This function also returns -1 if an invalid window was provided. * - * \param window the window to get the current opacity value from - * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque) + * \param window the window to get the current opacity value from. + * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque). * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1617,8 +1658,8 @@ extern DECLSPEC int SDLCALL SDL_GetWindowOpacity(SDL_Window * window, float * ou /** * Set the window as a modal for another window. * - * \param modal_window the window that should be set modal - * \param parent_window the parent window for the modal window + * \param modal_window the window that should be set modal. + * \param parent_window the parent window for the modal window. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1633,7 +1674,7 @@ extern DECLSPEC int SDLCALL SDL_SetWindowModalFor(SDL_Window * modal_window, SDL * this with caution, as you might give focus to a window that is completely * obscured by other windows. * - * \param window the window that should get the input focus + * \param window the window that should get the input focus. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1659,13 +1700,13 @@ extern DECLSPEC int SDLCALL SDL_SetWindowInputFocus(SDL_Window * window); * ramp set will not follow the window if it is moved to another display. * * \param window the window used to select the display whose gamma ramp will - * be changed + * be changed. * \param red a 256 element array of 16-bit quantities representing the - * translation table for the red channel, or NULL + * translation table for the red channel, or NULL. * \param green a 256 element array of 16-bit quantities representing the - * translation table for the green channel, or NULL + * translation table for the green channel, or NULL. * \param blue a 256 element array of 16-bit quantities representing the - * translation table for the blue channel, or NULL + * translation table for the blue channel, or NULL. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1687,13 +1728,13 @@ extern DECLSPEC int SDLCALL SDL_SetWindowGammaRamp(SDL_Window * window, * this display can be retrieved using SDL_GetWindowDisplayIndex().) * * \param window the window used to select the display whose gamma ramp will - * be queried + * be queried. * \param red a 256 element array of 16-bit quantities filled in with the - * translation table for the red channel, or NULL + * translation table for the red channel, or NULL. * \param green a 256 element array of 16-bit quantities filled in with the - * translation table for the green channel, or NULL + * translation table for the green channel, or NULL. * \param blue a 256 element array of 16-bit quantities filled in with the - * translation table for the blue channel, or NULL + * translation table for the blue channel, or NULL. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1711,7 +1752,7 @@ extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window, * * \sa SDL_HitTest */ -typedef enum +typedef enum SDL_HitTestResult { SDL_HITTEST_NORMAL, /**< Region is normal. No special properties. */ SDL_HITTEST_DRAGGABLE, /**< Region can drag entire window. */ @@ -1728,9 +1769,9 @@ typedef enum /** * Callback used for hit-testing. * - * \param win the SDL_Window where hit-testing was set on - * \param area an SDL_Point which should be hit-tested - * \param data what was passed as `callback_data` to SDL_SetWindowHitTest() + * \param win the SDL_Window where hit-testing was set on. + * \param area an SDL_Point which should be hit-tested. + * \param data what was passed as `callback_data` to SDL_SetWindowHitTest(). * \return an SDL_HitTestResult value. * * \sa SDL_SetWindowHitTest @@ -1771,9 +1812,9 @@ typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win, * can fire at any time, you should try to keep your callback efficient, * devoid of allocations, etc. * - * \param window the window to set hit-testing on - * \param callback the function to call when doing a hit-test - * \param callback_data an app-defined void pointer passed to **callback** + * \param window the window to set hit-testing on. + * \param callback the function to call when doing a hit-test. + * \param callback_data an app-defined void pointer passed to **callback**. * \returns 0 on success or -1 on error (including unsupported); call * SDL_GetError() for more information. * @@ -1786,8 +1827,8 @@ extern DECLSPEC int SDLCALL SDL_SetWindowHitTest(SDL_Window * window, /** * Request a window to demand attention from the user. * - * \param window the window to be flashed - * \param operation the flash operation + * \param window the window to be flashed. + * \param operation the flash operation. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1801,7 +1842,7 @@ extern DECLSPEC int SDLCALL SDL_FlashWindow(SDL_Window * window, SDL_FlashOperat * If `window` is NULL, this function will return immediately after setting * the SDL error message to "Invalid window". See SDL_GetError(). * - * \param window the window to destroy + * \param window the window to destroy. * * \since This function is available since SDL 2.0.0. * @@ -1872,7 +1913,7 @@ extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void); * program from the dynamic library using SDL_GL_GetProcAddress(). * * \param path the platform dependent OpenGL library name, or NULL to open the - * default OpenGL library + * default OpenGL library. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -1924,7 +1965,7 @@ extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); * code. This will ensure the proper calling convention is followed on * platforms where this matters (Win32) thereby avoiding stack corruption. * - * \param proc the name of an OpenGL function + * \param proc the name of an OpenGL function. * \returns a pointer to the named OpenGL function. The returned pointer * should be cast to the appropriate function signature. * @@ -1959,7 +2000,7 @@ extern DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void); * context and save that information somewhere instead of calling the function * every time you need to know. * - * \param extension the name of the extension to check + * \param extension the name of the extension to check. * \returns SDL_TRUE if the extension is supported, SDL_FALSE otherwise. * * \since This function is available since SDL 2.0.0. @@ -1985,8 +2026,9 @@ extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void); * SDL_GL_GetAttribute() to check the values after creating the OpenGL * context, since the values obtained can differ from the requested ones. * - * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to set - * \param value the desired value for the attribute + * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to + * set. + * \param value the desired value for the attribute. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -2000,8 +2042,9 @@ extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); /** * Get the actual value for an attribute from the current context. * - * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to get - * \param value a pointer filled in with the current value of `attr` + * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to + * get. + * \param value a pointer filled in with the current value of `attr`. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -2023,7 +2066,7 @@ extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value); * * SDL_GLContext is an alias for `void *`. It's opaque to the application. * - * \param window the window to associate with the context + * \param window the window to associate with the context. * \returns the OpenGL context associated with `window` or NULL on error; call * SDL_GetError() for more details. * @@ -2040,8 +2083,8 @@ extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window * * * The context must have been created with a compatible window. * - * \param window the window to associate with the context - * \param context the OpenGL context to associate with the window + * \param window the window to associate with the context. + * \param context the OpenGL context to associate with the window. * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * @@ -2084,10 +2127,11 @@ extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void); * platform with high-DPI support (Apple calls this "Retina"), and not * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. * - * \param window the window from which the drawable size should be queried - * \param w a pointer to variable for storing the width in pixels, may be NULL + * \param window the window from which the drawable size should be queried. + * \param w a pointer to variable for storing the width in pixels, may be + * NULL. * \param h a pointer to variable for storing the height in pixels, may be - * NULL + * NULL. * * \since This function is available since SDL 2.0.1. * @@ -2116,7 +2160,7 @@ extern DECLSPEC void SDLCALL SDL_GL_GetDrawableSize(SDL_Window * window, int *w, * https://www.khronos.org/opengl/wiki/Swap_Interval#Adaptive_Vsync * * \param interval 0 for immediate updates, 1 for updates synchronized with - * the vertical retrace, -1 for adaptive vsync + * the vertical retrace, -1 for adaptive vsync. * \returns 0 on success or -1 if setting the swap interval is not supported; * call SDL_GetError() for more information. * @@ -2153,7 +2197,7 @@ extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void); * glBindFramebuffer(), this is the default and you won't have to do anything * extra. * - * \param window the window to change + * \param window the window to change. * * \since This function is available since SDL 2.0.0. */ @@ -2162,7 +2206,7 @@ extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window); /** * Delete an OpenGL context. * - * \param context the OpenGL context to be deleted + * \param context the OpenGL context to be deleted. * * \since This function is available since SDL 2.0.0. * diff --git a/vs/sdl2/include/SDL_vulkan.h b/vs/sdl2/include/SDL_vulkan.h index ab86a0b8656..e005ed373ba 100644 --- a/vs/sdl2/include/SDL_vulkan.h +++ b/vs/sdl2/include/SDL_vulkan.h @@ -20,9 +20,9 @@ */ /** - * \file SDL_vulkan.h + * # CategoryVulkan * - * Header file for functions to creating Vulkan surfaces on SDL windows. + * Header file for functions to creating Vulkan surfaces on SDL windows. */ #ifndef SDL_vulkan_h_ @@ -52,6 +52,10 @@ extern "C" { VK_DEFINE_HANDLE(VkInstance) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) +/* Make sure to undef to avoid issues in case of later vulkan include */ +#undef VK_DEFINE_HANDLE +#undef VK_DEFINE_NON_DISPATCHABLE_HANDLE + #endif /* !NO_SDL_VULKAN_TYPEDEFS */ typedef VkInstance SDL_vulkanInstance; @@ -97,13 +101,13 @@ typedef VkSurfaceKHR SDL_vulkanSurface; /* for compatibility with Tizen */ * supported. Either do not link to the Vulkan loader or link to a dynamic * library version. * - * \param path The platform dependent Vulkan loader library name or NULL + * \param path The platform dependent Vulkan loader library name or NULL. * \returns 0 on success or -1 if the library couldn't be loaded; call * SDL_GetError() for more information. * * \since This function is available since SDL 2.0.6. * - * \sa SDL_Vulkan_GetVkInstanceProcAddr + * \sa SDL_Vulkan_GetVkGetInstanceProcAddr * \sa SDL_Vulkan_UnloadLibrary */ extern DECLSPEC int SDLCALL SDL_Vulkan_LoadLibrary(const char *path); @@ -146,11 +150,11 @@ extern DECLSPEC void SDLCALL SDL_Vulkan_UnloadLibrary(void); * however, this parameter will likely be removed in future releases * * \param window A window for which the required Vulkan instance extensions - * should be retrieved (will be deprecated in a future release) + * should be retrieved (will be deprecated in a future release). * \param pCount A pointer to an unsigned int corresponding to the number of - * extensions to be returned + * extensions to be returned. * \param pNames NULL or a pointer to an array to be filled with required - * Vulkan instance extensions + * Vulkan instance extensions. * \returns SDL_TRUE on success, SDL_FALSE on error. * * \since This function is available since SDL 2.0.6. @@ -168,10 +172,10 @@ extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_GetInstanceExtensions(SDL_Window *wi * `instance` must have been created with extensions returned by * SDL_Vulkan_GetInstanceExtensions() enabled. * - * \param window The window to which to attach the Vulkan surface - * \param instance The Vulkan instance handle + * \param window The window to which to attach the Vulkan surface. + * \param instance The Vulkan instance handle. * \param surface A pointer to a VkSurfaceKHR handle to output the newly - * created surface + * created surface. * \returns SDL_TRUE on success, SDL_FALSE on error. * * \since This function is available since SDL 2.0.6. @@ -191,9 +195,9 @@ extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_CreateSurface(SDL_Window *window, * platform with high-DPI support (Apple calls this "Retina"), and not * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. * - * \param window an SDL_Window for which the size is to be queried - * \param w Pointer to the variable to write the width to or NULL - * \param h Pointer to the variable to write the height to or NULL + * \param window an SDL_Window for which the size is to be queried. + * \param w Pointer to the variable to write the width to or NULL. + * \param h Pointer to the variable to write the height to or NULL. * * \since This function is available since SDL 2.0.6. * diff --git a/vs/sdl2/include/begin_code.h b/vs/sdl2/include/begin_code.h index 124ff7cb7d4..7ccfad3b4de 100644 --- a/vs/sdl2/include/begin_code.h +++ b/vs/sdl2/include/begin_code.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,12 +19,12 @@ 3. This notice may not be removed or altered from any source distribution. */ +/* WIKI CATEGORY: BeginCode */ + /** - * \file begin_code.h - * - * This file sets things up for C dynamic library function definitions, - * static inlined functions, and structures aligned at 4-byte alignment. - * If you don't like ugly C preprocessor code, don't look at this file. :) + * begin_code.h sets things up for C dynamic library function definitions, + * static inlined functions, and structures aligned at 4-byte alignment. + * If you don't like ugly C preprocessor code, don't look at this file. :) */ /* This shouldn't be nested -- included it around code only. */ @@ -172,7 +172,7 @@ (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L) #define SDL_FALLTHROUGH [[fallthrough]] #else -#if defined(__has_attribute) +#if defined(__has_attribute) && !defined(__SUNPRO_C) && !defined(__SUNPRO_CC) #define SDL_HAS_FALLTHROUGH __has_attribute(__fallthrough__) #else #define SDL_HAS_FALLTHROUGH 0 diff --git a/vs/sdl2/include/close_code.h b/vs/sdl2/include/close_code.h index 50a0e6f3b44..f991f458d59 100644 --- a/vs/sdl2/include/close_code.h +++ b/vs/sdl2/include/close_code.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/mingw/pkg-support/INSTALL.txt b/vs/sdl2/mingw/pkg-support/INSTALL.txt new file mode 100644 index 00000000000..11a4ca8b0c0 --- /dev/null +++ b/vs/sdl2/mingw/pkg-support/INSTALL.txt @@ -0,0 +1,18 @@ + +The 32-bit files are in i686-w64-mingw32 +The 64-bit files are in x86_64-w64-mingw32 + +To install SDL for native development: + make native + +To install SDL for cross-compiling development: + make cross + +Look at the example programs in ./test, and check out online documentation: + http://wiki.libsdl.org/ + +Join the SDL developer mailing list if you want to join the community: + http://www.libsdl.org/mailing-list.php + +That's it! +Sam Lantinga diff --git a/vs/sdl2/sdl2-config.cmake.in b/vs/sdl2/sdl2-config.cmake.in index 842f826bb5a..f3fa08c2183 100644 --- a/vs/sdl2/sdl2-config.cmake.in +++ b/vs/sdl2/sdl2-config.cmake.in @@ -56,6 +56,9 @@ list(APPEND _sdl2_libdirs "${SDL2_LIBDIR}") string(REGEX MATCHALL "(-[lm]([-a-zA-Z0-9._]+))|(-Wl,[^ ]*framework[^ ]*)|(-pthread)" _sdl2_static_private_libs "${_sdl2_static_private_libs_in}") string(REGEX REPLACE "^-l" "" _sdl2_static_private_libs "${_sdl2_static_private_libs}") string(REGEX REPLACE ";-l" ";" _sdl2_static_private_libs "${_sdl2_static_private_libs}") +string(REGEX REPLACE "-Wl,-framework,([a-zA-Z0-9_]+)" "$" _sdl2_static_private_libs "${_sdl2_static_private_libs}") +string(REGEX REPLACE "-Wl,-weak_framework,([a-zA-Z0-9_]+)" "$" _sdl2_static_private_libs "${_sdl2_static_private_libs}") + string(REGEX MATCHALL "-L([-a-zA-Z0-9._/]+)" _sdl2_static_private_libdirs "${_sdl2_static_private_libs_in}") string(REGEX REPLACE "^-L" "" _sdl2_static_private_libdirs "${_sdl2_static_private_libdirs}") string(REGEX REPLACE ";-L" ";" _sdl2_static_private_libdirs "${_sdl2_static_private_libdirs}") diff --git a/vs/sdl2/sdl2-config.in b/vs/sdl2/sdl2-config.in index f6eca7668ca..b41fc1697a8 100644 --- a/vs/sdl2/sdl2-config.in +++ b/vs/sdl2/sdl2-config.in @@ -1,10 +1,10 @@ #!/bin/sh # Get the canonical path of the folder containing this script -bindir=$(cd -P -- "$(dirname -- "$0")" && printf '%s\n' "$(pwd -P)") +bindir=`cd -P -- "\`dirname -- "$0"\`" && printf '%s\n' "\`pwd -P\`"` # Calculate the canonical path of the prefix, relative to the folder of this script -prefix=$(cd -P -- "$bindir/@bin_prefix_relpath@" && printf '%s\n' "$(pwd -P)") +prefix=`cd -P -- "$bindir/@bin_prefix_relpath@" && printf '%s\n' "\`pwd -P\`"` exec_prefix=@exec_prefix@ exec_prefix_set=no libdir=@libdir@ diff --git a/vs/sdl2/sdl2.m4 b/vs/sdl2/sdl2.m4 index 274753b118a..ca96369a2e0 100644 --- a/vs/sdl2/sdl2.m4 +++ b/vs/sdl2/sdl2.m4 @@ -197,7 +197,7 @@ int main(int argc, char *argv[]) echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], [ echo "*** The test program failed to compile or link. See the file config.log for the" - echo "*** exact error that occured. This usually means SDL was incorrectly installed" + echo "*** exact error that occurred. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" echo "*** may want to edit the sdl2-config script: $SDL2_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" diff --git a/vs/sdl2/src/SDL.c b/vs/sdl2/src/SDL.c index 7065fe71161..e21b500abb1 100644 --- a/vs/sdl2/src/SDL.c +++ b/vs/sdl2/src/SDL.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,9 +29,6 @@ #endif #if defined(__OS2__) #include "core/os2/SDL_os2.h" -#ifdef SDL_THREAD_OS2 -#include "thread/os2/SDL_systls_c.h" -#endif #endif /* this checks for HAVE_DBUS_DBUS_H internally. */ @@ -52,6 +49,7 @@ #include "haptic/SDL_haptic_c.h" #include "joystick/SDL_joystick_c.h" #include "sensor/SDL_sensor_c.h" +#include "thread/SDL_thread_c.h" /* Initialization/Cleanup routines */ #ifndef SDL_TIMERS_DISABLED @@ -116,6 +114,7 @@ static SDL_bool SDL_MainIsReady = SDL_FALSE; #else static SDL_bool SDL_MainIsReady = SDL_TRUE; #endif +static SDL_bool SDL_main_thread_initialized = SDL_FALSE; static SDL_bool SDL_bInMainQuit = SDL_FALSE; static Uint8 SDL_SubsystemRefCount[32]; @@ -181,6 +180,36 @@ void SDL_SetMainReady(void) SDL_MainIsReady = SDL_TRUE; } +void SDL_InitMainThread(void) +{ + if (SDL_main_thread_initialized) { + return; + } + + SDL_InitTLSData(); +#ifndef SDL_TIMERS_DISABLED + SDL_TicksInit(); +#endif + SDL_LogInit(); + + SDL_main_thread_initialized = SDL_TRUE; +} + +static void SDL_QuitMainThread(void) +{ + if (!SDL_main_thread_initialized) { + return; + } + + SDL_LogQuit(); +#ifndef SDL_TIMERS_DISABLED + SDL_TicksQuit(); +#endif + SDL_QuitTLSData(); + + SDL_main_thread_initialized = SDL_FALSE; +} + int SDL_InitSubSystem(Uint32 flags) { Uint32 flags_initialized = 0; @@ -189,8 +218,6 @@ int SDL_InitSubSystem(Uint32 flags) return SDL_SetError("Application didn't initialize properly, did you include SDL_main.h in the file containing your main() function?"); } - SDL_LogInit(); - /* Clear the error message */ SDL_ClearError(); @@ -198,10 +225,6 @@ int SDL_InitSubSystem(Uint32 flags) SDL_DBus_Init(); #endif -#ifdef SDL_THREAD_OS2 - SDL_OS2TLSAlloc(); /* thread/os2/SDL_systls.c */ -#endif - #ifdef SDL_VIDEO_DRIVER_WINDOWS if (flags & (SDL_INIT_HAPTIC | SDL_INIT_JOYSTICK)) { if (SDL_HelperWindowCreate() < 0) { @@ -210,10 +233,6 @@ int SDL_InitSubSystem(Uint32 flags) } #endif -#ifndef SDL_TIMERS_DISABLED - SDL_TicksInit(); -#endif - /* Initialize the event subsystem */ if (flags & SDL_INIT_EVENTS) { #ifndef SDL_EVENTS_DISABLED @@ -378,9 +397,6 @@ int SDL_Init(Uint32 flags) void SDL_QuitSubSystem(Uint32 flags) { #if defined(__OS2__) -#ifdef SDL_THREAD_OS2 - SDL_OS2TLSFree(); /* thread/os2/SDL_systls.c */ -#endif SDL_OS2Quit(); #endif @@ -504,10 +520,6 @@ void SDL_Quit(void) #endif SDL_QuitSubSystem(SDL_INIT_EVERYTHING); -#ifndef SDL_TIMERS_DISABLED - SDL_TicksQuit(); -#endif - #ifdef SDL_USE_LIBDBUS SDL_DBus_Quit(); #endif @@ -515,14 +527,12 @@ void SDL_Quit(void) SDL_ClearHints(); SDL_AssertionsQuit(); - SDL_LogQuit(); - /* Now that every subsystem has been quit, we reset the subsystem refcount * and the list of initialized subsystems. */ SDL_memset(SDL_SubsystemRefCount, 0x0, sizeof(SDL_SubsystemRefCount)); - SDL_TLSCleanup(); + SDL_QuitMainThread(); SDL_bInMainQuit = SDL_FALSE; } diff --git a/vs/sdl2/src/SDL_assert.c b/vs/sdl2/src/SDL_assert.c index 1ca41e76f38..99a376e948c 100644 --- a/vs/sdl2/src/SDL_assert.c +++ b/vs/sdl2/src/SDL_assert.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -42,15 +42,7 @@ #endif #if defined(__EMSCRIPTEN__) - #include - /* older Emscriptens don't have this, but we need to for wasm64 compatibility. */ - #ifndef MAIN_THREAD_EM_ASM_PTR - #ifdef __wasm64__ - #error You need to upgrade your Emscripten compiler to support wasm64 - #else - #define MAIN_THREAD_EM_ASM_PTR MAIN_THREAD_EM_ASM_INT - #endif - #endif +#include #endif /* The size of the stack buffer to use for rendering assert messages. */ @@ -259,7 +251,7 @@ static SDL_assert_state SDLCALL SDL_PromptAssertion(const SDL_assert_data *data, for (;;) { SDL_bool okay = SDL_TRUE; /* *INDENT-OFF* */ /* clang-format off */ - char *buf = (char *) MAIN_THREAD_EM_ASM_PTR({ + int reply = MAIN_THREAD_EM_ASM_INT({ var str = UTF8ToString($0) + '\n\n' + 'Abort/Retry/Ignore/AlwaysIgnore? [ariA] :'; @@ -267,32 +259,37 @@ static SDL_assert_state SDLCALL SDL_PromptAssertion(const SDL_assert_data *data, if (reply === null) { reply = "i"; } - return allocate(intArrayFromString(reply), 'i8', ALLOC_NORMAL); + return reply.length === 1 ? reply.charCodeAt(0) : -1; }, message); /* *INDENT-ON* */ /* clang-format on */ - if (SDL_strcmp(buf, "a") == 0) { + switch (reply) { + case 'a': state = SDL_ASSERTION_ABORT; #if 0 /* (currently) no break functionality on Emscripten */ - } else if (SDL_strcmp(buf, "b") == 0) { + case 'b': state = SDL_ASSERTION_BREAK; + break; #endif - } else if (SDL_strcmp(buf, "r") == 0) { + case 'r': state = SDL_ASSERTION_RETRY; - } else if (SDL_strcmp(buf, "i") == 0) { + break; + case 'i': state = SDL_ASSERTION_IGNORE; - } else if (SDL_strcmp(buf, "A") == 0) { + break; + case 'A': state = SDL_ASSERTION_ALWAYS_IGNORE; - } else { + break; + default: okay = SDL_FALSE; + break; } - free(buf); if (okay) { break; } } -#elif defined(HAVE_STDIO_H) +#elif defined(HAVE_STDIO_H) && !defined(__3DS__) /* this is a little hacky. */ for (;;) { char buf[32]; @@ -319,6 +316,8 @@ static SDL_assert_state SDLCALL SDL_PromptAssertion(const SDL_assert_data *data, break; } } +#else + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_WARNING, "Assertion Failed", message, window); #endif /* HAVE_STDIO_H */ } diff --git a/vs/sdl2/src/SDL_assert_c.h b/vs/sdl2/src/SDL_assert_c.h index 330acb87c93..69cd9c3e4c0 100644 --- a/vs/sdl2/src/SDL_assert_c.h +++ b/vs/sdl2/src/SDL_assert_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_dataqueue.c b/vs/sdl2/src/SDL_dataqueue.c index e32ba3199b0..0498e1259c0 100644 --- a/vs/sdl2/src/SDL_dataqueue.c +++ b/vs/sdl2/src/SDL_dataqueue.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_dataqueue.h b/vs/sdl2/src/SDL_dataqueue.h index 972a5213824..6c671adadc6 100644 --- a/vs/sdl2/src/SDL_dataqueue.h +++ b/vs/sdl2/src/SDL_dataqueue.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_error.c b/vs/sdl2/src/SDL_error.c index d5c45fb6c4d..db24b3bce6f 100644 --- a/vs/sdl2/src/SDL_error.c +++ b/vs/sdl2/src/SDL_error.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_error_c.h b/vs/sdl2/src/SDL_error_c.h index 1aae3be718d..ae9f5dfed01 100644 --- a/vs/sdl2/src/SDL_error_c.h +++ b/vs/sdl2/src/SDL_error_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_guid.c b/vs/sdl2/src/SDL_guid.c index 2f91edb185f..0e4c34b1c97 100644 --- a/vs/sdl2/src/SDL_guid.c +++ b/vs/sdl2/src/SDL_guid.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_hints.c b/vs/sdl2/src/SDL_hints.c index 2455cc13a1b..f8e9ba4c2a3 100644 --- a/vs/sdl2/src/SDL_hints.c +++ b/vs/sdl2/src/SDL_hints.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_hints_c.h b/vs/sdl2/src/SDL_hints_c.h index 8af9fc53883..097a0d9dacb 100644 --- a/vs/sdl2/src/SDL_hints_c.h +++ b/vs/sdl2/src/SDL_hints_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_internal.h b/vs/sdl2/src/SDL_internal.h index b193edef62f..aa6391493c7 100644 --- a/vs/sdl2/src/SDL_internal.h +++ b/vs/sdl2/src/SDL_internal.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -208,6 +208,8 @@ #include "SDL_assert.h" #include "SDL_log.h" +extern void SDL_InitMainThread(void); + #endif /* SDL_internal_h_ */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/src/SDL_list.c b/vs/sdl2/src/SDL_list.c index b7f45de44ec..88730029c2b 100644 --- a/vs/sdl2/src/SDL_list.c +++ b/vs/sdl2/src/SDL_list.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_list.h b/vs/sdl2/src/SDL_list.h index f855e9bd712..16079b84b7d 100644 --- a/vs/sdl2/src/SDL_list.h +++ b/vs/sdl2/src/SDL_list.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_log.c b/vs/sdl2/src/SDL_log.c index 9e324e3ddb2..47f5b7251ea 100644 --- a/vs/sdl2/src/SDL_log.c +++ b/vs/sdl2/src/SDL_log.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_log_c.h b/vs/sdl2/src/SDL_log_c.h index 4d6676d30f0..7fdd5142ddd 100644 --- a/vs/sdl2/src/SDL_log_c.h +++ b/vs/sdl2/src/SDL_log_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_utils.c b/vs/sdl2/src/SDL_utils.c index 10a30836b3c..f4ebcf9dba8 100644 --- a/vs/sdl2/src/SDL_utils.c +++ b/vs/sdl2/src/SDL_utils.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/SDL_utils_c.h b/vs/sdl2/src/SDL_utils_c.h index 4c00d8b3add..eb870c79214 100644 --- a/vs/sdl2/src/SDL_utils_c.h +++ b/vs/sdl2/src/SDL_utils_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/atomic/SDL_atomic.c b/vs/sdl2/src/atomic/SDL_atomic.c index e843c8d2c51..ea65796e7fc 100644 --- a/vs/sdl2/src/atomic/SDL_atomic.c +++ b/vs/sdl2/src/atomic/SDL_atomic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -259,7 +259,7 @@ int SDL_AtomicGet(SDL_atomic_t *a) #elif defined(__MACOSX__) /* this is deprecated in 10.12 sdk; favor gcc atomics. */ return sizeof(a->value) == sizeof(uint32_t) ? OSAtomicOr32Barrier(0, (volatile uint32_t *)&a->value) : OSAtomicAdd64Barrier(0, (volatile int64_t *)&a->value); #elif defined(__SOLARIS__) - return atomic_or_uint((volatile uint_t *)&a->value, 0); + return atomic_or_uint_nv((volatile uint_t *)&a->value, 0); #else int value; do { diff --git a/vs/sdl2/src/atomic/SDL_spinlock.c b/vs/sdl2/src/atomic/SDL_spinlock.c index a2d1d3f9da6..bdfa082d0d5 100644 --- a/vs/sdl2/src/atomic/SDL_spinlock.c +++ b/vs/sdl2/src/atomic/SDL_spinlock.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/SDL_audio.c b/vs/sdl2/src/audio/SDL_audio.c index 96586fe7731..1ab847aa490 100644 --- a/vs/sdl2/src/audio/SDL_audio.c +++ b/vs/sdl2/src/audio/SDL_audio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -93,12 +93,12 @@ static const AudioBootStrap *const bootstrap[] = { #ifdef SDL_AUDIO_DRIVER_FUSIONSOUND &FUSIONSOUND_bootstrap, #endif -#ifdef SDL_AUDIO_DRIVER_AAUDIO - &aaudio_bootstrap, -#endif #ifdef SDL_AUDIO_DRIVER_OPENSLES &openslES_bootstrap, #endif +#ifdef SDL_AUDIO_DRIVER_AAUDIO + &aaudio_bootstrap, +#endif #ifdef SDL_AUDIO_DRIVER_ANDROID &ANDROIDAUDIO_bootstrap, #endif @@ -700,8 +700,6 @@ static int SDLCALL SDL_RunAudio(void *userdata) /* Loop, filling the audio buffers */ while (!SDL_AtomicGet(&device->shutdown)) { - data_len = device->callbackspec.size; - /* Fill the current buffer with sound */ if (!device->stream && SDL_AtomicGet(&device->enabled)) { data = current_audio.impl.GetDeviceBuf(device); @@ -728,6 +726,8 @@ static int SDLCALL SDL_RunAudio(void *userdata) data = device->work_buffer; } + data_len = device->callbackspec.size; + /* !!! FIXME: this should be LockDevice. */ SDL_LockMutex(device->mixer_lock); if (SDL_AtomicGet(&device->paused)) { diff --git a/vs/sdl2/src/audio/SDL_audio_c.h b/vs/sdl2/src/audio/SDL_audio_c.h index 5bc2b41daa0..49019e13d95 100644 --- a/vs/sdl2/src/audio/SDL_audio_c.h +++ b/vs/sdl2/src/audio/SDL_audio_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/SDL_audio_channel_converters.h b/vs/sdl2/src/audio/SDL_audio_channel_converters.h index 95e22b1c356..1e6fd6e5f0d 100644 --- a/vs/sdl2/src/audio/SDL_audio_channel_converters.h +++ b/vs/sdl2/src/audio/SDL_audio_channel_converters.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/SDL_audio_resampler_filter.h b/vs/sdl2/src/audio/SDL_audio_resampler_filter.h index a6dff392d38..be728eaf275 100644 --- a/vs/sdl2/src/audio/SDL_audio_resampler_filter.h +++ b/vs/sdl2/src/audio/SDL_audio_resampler_filter.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/SDL_audiocvt.c b/vs/sdl2/src/audio/SDL_audiocvt.c index 9087317bcbd..348ce6b9c50 100644 --- a/vs/sdl2/src/audio/SDL_audiocvt.c +++ b/vs/sdl2/src/audio/SDL_audiocvt.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/SDL_audiodev.c b/vs/sdl2/src/audio/SDL_audiodev.c index 903ba9e761d..3ecaa05ee01 100644 --- a/vs/sdl2/src/audio/SDL_audiodev.c +++ b/vs/sdl2/src/audio/SDL_audiodev.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/SDL_audiodev_c.h b/vs/sdl2/src/audio/SDL_audiodev_c.h index 1235ea44503..7aefc0d203e 100644 --- a/vs/sdl2/src/audio/SDL_audiodev_c.h +++ b/vs/sdl2/src/audio/SDL_audiodev_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/SDL_audiotypecvt.c b/vs/sdl2/src/audio/SDL_audiotypecvt.c index 221bfbb8d45..516be82e479 100644 --- a/vs/sdl2/src/audio/SDL_audiotypecvt.c +++ b/vs/sdl2/src/audio/SDL_audiotypecvt.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/SDL_mixer.c b/vs/sdl2/src/audio/SDL_mixer.c index 9cf96a6b3d4..bb42fe72748 100644 --- a/vs/sdl2/src/audio/SDL_mixer.c +++ b/vs/sdl2/src/audio/SDL_mixer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/SDL_sysaudio.h b/vs/sdl2/src/audio/SDL_sysaudio.h index d569ba76a87..6e8de52915b 100644 --- a/vs/sdl2/src/audio/SDL_sysaudio.h +++ b/vs/sdl2/src/audio/SDL_sysaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/SDL_wave.c b/vs/sdl2/src/audio/SDL_wave.c index 1ecce9b917d..e71235e0a95 100644 --- a/vs/sdl2/src/audio/SDL_wave.c +++ b/vs/sdl2/src/audio/SDL_wave.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/SDL_wave.h b/vs/sdl2/src/audio/SDL_wave.h index 6d71e47dc77..b0e0e68aca4 100644 --- a/vs/sdl2/src/audio/SDL_wave.h +++ b/vs/sdl2/src/audio/SDL_wave.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/aaudio/SDL_aaudio.c b/vs/sdl2/src/audio/aaudio/SDL_aaudio.c index 401fef6a8bc..93bcaf3f78c 100644 --- a/vs/sdl2/src/audio/aaudio/SDL_aaudio.c +++ b/vs/sdl2/src/audio/aaudio/SDL_aaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -116,7 +116,6 @@ static int aaudio_OpenDevice(_THIS, const char *devname) } ctx.AAudioStreamBuilder_setErrorCallback(ctx.builder, aaudio_errorCallback, private); - ctx.AAudioStreamBuilder_setPerformanceMode(ctx.builder, AAUDIO_PERFORMANCE_MODE_LOW_LATENCY); LOGI("AAudio Try to open %u hz %u bit chan %u %s samples %u", this->spec.freq, SDL_AUDIO_BITSIZE(this->spec.format), @@ -239,7 +238,6 @@ static int RebuildAAudioStream(SDL_AudioDevice *device) } ctx.AAudioStreamBuilder_setErrorCallback(ctx.builder, aaudio_errorCallback, hidden); - ctx.AAudioStreamBuilder_setPerformanceMode(ctx.builder, AAUDIO_PERFORMANCE_MODE_LOW_LATENCY); LOGI("AAudio Try to reopen %u hz %u bit chan %u %s samples %u", device->spec.freq, SDL_AUDIO_BITSIZE(device->spec.format), diff --git a/vs/sdl2/src/audio/aaudio/SDL_aaudio.h b/vs/sdl2/src/audio/aaudio/SDL_aaudio.h index d61d1b02b6d..b988a5c1ee9 100644 --- a/vs/sdl2/src/audio/aaudio/SDL_aaudio.h +++ b/vs/sdl2/src/audio/aaudio/SDL_aaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/aaudio/SDL_aaudiofuncs.h b/vs/sdl2/src/audio/aaudio/SDL_aaudiofuncs.h index 2bc674c038f..c2fff183002 100644 --- a/vs/sdl2/src/audio/aaudio/SDL_aaudiofuncs.h +++ b/vs/sdl2/src/audio/aaudio/SDL_aaudiofuncs.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright , (C) 1997-2024 Sam Lantinga + Copyright , (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -32,7 +32,7 @@ SDL_PROC(void, AAudioStreamBuilder_setFormat, (AAudioStreamBuilder * builder, aa SDL_PROC_UNUSED(void, AAudioStreamBuilder_setSharingMode, (AAudioStreamBuilder * builder, aaudio_sharing_mode_t sharingMode)) SDL_PROC(void, AAudioStreamBuilder_setDirection, (AAudioStreamBuilder * builder, aaudio_direction_t direction)) SDL_PROC_UNUSED(void, AAudioStreamBuilder_setBufferCapacityInFrames, (AAudioStreamBuilder * builder, int32_t numFrames)) -SDL_PROC(void, AAudioStreamBuilder_setPerformanceMode, (AAudioStreamBuilder * builder, aaudio_performance_mode_t mode)) +SDL_PROC_UNUSED(void, AAudioStreamBuilder_setPerformanceMode, (AAudioStreamBuilder * builder, aaudio_performance_mode_t mode)) SDL_PROC_UNUSED(void, AAudioStreamBuilder_setUsage, (AAudioStreamBuilder * builder, aaudio_usage_t usage)) /* API 28 */ SDL_PROC_UNUSED(void, AAudioStreamBuilder_setContentType, (AAudioStreamBuilder * builder, aaudio_content_type_t contentType)) /* API 28 */ SDL_PROC_UNUSED(void, AAudioStreamBuilder_setInputPreset, (AAudioStreamBuilder * builder, aaudio_input_preset_t inputPreset)) /* API 28 */ diff --git a/vs/sdl2/src/audio/alsa/SDL_alsa_audio.c b/vs/sdl2/src/audio/alsa/SDL_alsa_audio.c index 3ed66f2900b..8f3a49c8148 100644 --- a/vs/sdl2/src/audio/alsa/SDL_alsa_audio.c +++ b/vs/sdl2/src/audio/alsa/SDL_alsa_audio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -83,6 +83,12 @@ static int (*ALSA_snd_device_name_hint)(int, const char *, void ***); static char *(*ALSA_snd_device_name_get_hint)(const void *, const char *); static int (*ALSA_snd_device_name_free_hint)(void **); static snd_pcm_sframes_t (*ALSA_snd_pcm_avail)(snd_pcm_t *); +static int (*ALSA_snd_pcm_info)(snd_pcm_t *, snd_pcm_info_t *); +static const char *(*ALSA_snd_pcm_info_get_name)(const snd_pcm_info_t *); +static int (*ALSA_snd_pcm_info_get_card)(const snd_pcm_info_t *); +static int (*ALSA_snd_card_get_name)(int, char **); +static int (*ALSA_snd_pcm_info_malloc)(snd_pcm_info_t **); +static int (*ALSA_snd_pcm_info_free)(snd_pcm_info_t *); #ifdef SND_CHMAP_API_VERSION static snd_pcm_chmap_t *(*ALSA_snd_pcm_get_chmap)(snd_pcm_t *); static int (*ALSA_snd_pcm_chmap_print)(const snd_pcm_chmap_t *map, size_t maxlen, char *buf); @@ -152,6 +158,12 @@ static int load_alsa_syms(void) SDL_ALSA_SYM(snd_device_name_get_hint); SDL_ALSA_SYM(snd_device_name_free_hint); SDL_ALSA_SYM(snd_pcm_avail); + SDL_ALSA_SYM(snd_pcm_info); + SDL_ALSA_SYM(snd_pcm_info_get_card); + SDL_ALSA_SYM(snd_pcm_info_get_name); + SDL_ALSA_SYM(snd_card_get_name); + SDL_ALSA_SYM(snd_pcm_info_malloc); + SDL_ALSA_SYM(snd_pcm_info_free); #ifdef SND_CHMAP_API_VERSION SDL_ALSA_SYM(snd_pcm_get_chmap); SDL_ALSA_SYM(snd_pcm_chmap_print); @@ -466,6 +478,58 @@ static void ALSA_CloseDevice(_THIS) SDL_free(this->hidden); } +static int ALSA_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapture) +{ + const char *device = "default"; + snd_pcm_t *pcm_handle; + snd_pcm_info_t *pcm_info; + snd_pcm_stream_t stream; + int card_index; + const char *dev_name; + char *card_name = NULL; + char final_name[256]; + + SDL_zero(final_name); + stream = iscapture ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK; + + if (ALSA_snd_pcm_open(&pcm_handle, device, stream, SND_PCM_NONBLOCK) < 0) { + return SDL_SetError("ALSA: Couldn't open default device"); + } + + if (ALSA_snd_pcm_info_malloc(&pcm_info) < 0) { + ALSA_snd_pcm_close(pcm_handle); + return SDL_SetError("ALSA: Couldn't allocate pcm_info"); + } + + if (ALSA_snd_pcm_info(pcm_handle, pcm_info) < 0) { + ALSA_snd_pcm_info_free(pcm_info); + ALSA_snd_pcm_close(pcm_handle); + return SDL_SetError("ALSA: Couldn't get PCM info"); + } + + card_index = ALSA_snd_pcm_info_get_card(pcm_info); + dev_name = ALSA_snd_pcm_info_get_name(pcm_info); + + if (card_index >= 0 && ALSA_snd_card_get_name(card_index, &card_name) >= 0) { + SDL_snprintf(final_name, sizeof(final_name), "%s, %s", card_name, dev_name); + *name = SDL_strdup(final_name); + } else { + *name = SDL_strdup(dev_name ? dev_name : "Unknown ALSA Device"); + } + + if (spec) { + SDL_zero(*spec); + spec->freq = 48000; + spec->format = AUDIO_S16SYS; + spec->channels = 2; + spec->samples = 512; + } + + ALSA_snd_pcm_info_free(pcm_info); + ALSA_snd_pcm_close(pcm_handle); + return 0; +} + static int ALSA_set_buffer_size(_THIS, snd_pcm_hw_params_t *params) { int status; @@ -975,6 +1039,7 @@ static SDL_bool ALSA_Init(SDL_AudioDriverImpl *impl) impl->Deinitialize = ALSA_Deinitialize; impl->CaptureFromDevice = ALSA_CaptureFromDevice; impl->FlushCapture = ALSA_FlushCapture; + impl->GetDefaultAudioInfo = ALSA_GetDefaultAudioInfo; impl->HasCaptureSupport = SDL_TRUE; impl->SupportsNonPow2Samples = SDL_TRUE; diff --git a/vs/sdl2/src/audio/alsa/SDL_alsa_audio.h b/vs/sdl2/src/audio/alsa/SDL_alsa_audio.h index fb3f1549025..200e8e7bf5a 100644 --- a/vs/sdl2/src/audio/alsa/SDL_alsa_audio.h +++ b/vs/sdl2/src/audio/alsa/SDL_alsa_audio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/android/SDL_androidaudio.c b/vs/sdl2/src/audio/android/SDL_androidaudio.c index 81736868097..c45e031df82 100644 --- a/vs/sdl2/src/audio/android/SDL_androidaudio.c +++ b/vs/sdl2/src/audio/android/SDL_androidaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/android/SDL_androidaudio.h b/vs/sdl2/src/audio/android/SDL_androidaudio.h index 4e9df10f10e..e9c2ef62beb 100644 --- a/vs/sdl2/src/audio/android/SDL_androidaudio.h +++ b/vs/sdl2/src/audio/android/SDL_androidaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/arts/SDL_artsaudio.c b/vs/sdl2/src/audio/arts/SDL_artsaudio.c index da91997a20c..420588b962e 100644 --- a/vs/sdl2/src/audio/arts/SDL_artsaudio.c +++ b/vs/sdl2/src/audio/arts/SDL_artsaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -86,7 +86,7 @@ static struct #undef SDL_ARTS_SYM -static void UnloadARTSLibrary() +static void UnloadARTSLibrary(void) { if (arts_handle) { SDL_UnloadObject(arts_handle); @@ -119,7 +119,7 @@ static int LoadARTSLibrary(void) #else -static void UnloadARTSLibrary() +static void UnloadARTSLibrary(void) { return; } diff --git a/vs/sdl2/src/audio/arts/SDL_artsaudio.h b/vs/sdl2/src/audio/arts/SDL_artsaudio.h index fe55bcd61d9..e7f4fc175c1 100644 --- a/vs/sdl2/src/audio/arts/SDL_artsaudio.h +++ b/vs/sdl2/src/audio/arts/SDL_artsaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/coreaudio/SDL_coreaudio.h b/vs/sdl2/src/audio/coreaudio/SDL_coreaudio.h index d5d11ca5110..2a9fac2cc32 100644 --- a/vs/sdl2/src/audio/coreaudio/SDL_coreaudio.h +++ b/vs/sdl2/src/audio/coreaudio/SDL_coreaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/coreaudio/SDL_coreaudio.m b/vs/sdl2/src/audio/coreaudio/SDL_coreaudio.m index 26da64d7edd..941a2afe03c 100644 --- a/vs/sdl2/src/audio/coreaudio/SDL_coreaudio.m +++ b/vs/sdl2/src/audio/coreaudio/SDL_coreaudio.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -383,7 +383,8 @@ static BOOL update_audio_session(_THIS, SDL_bool open, SDL_bool allow_playandrec hint = SDL_GetHint(SDL_HINT_AUDIO_CATEGORY); if (hint) { - if (SDL_strcasecmp(hint, "AVAudioSessionCategoryAmbient") == 0) { + if (SDL_strcasecmp(hint, "AVAudioSessionCategoryAmbient") == 0 || + SDL_strcasecmp(hint, "ambient") == 0) { category = AVAudioSessionCategoryAmbient; } else if (SDL_strcasecmp(hint, "AVAudioSessionCategorySoloAmbient") == 0) { category = AVAudioSessionCategorySoloAmbient; @@ -455,12 +456,13 @@ static BOOL update_audio_session(_THIS, SDL_bool open, SDL_bool allow_playandrec if ((open_playback_devices || open_capture_devices) && !session_active) { if (![session setActive:YES error:&err]) { + NSString *desc; if ([err code] == AVAudioSessionErrorCodeResourceNotAvailable && category == AVAudioSessionCategoryPlayAndRecord) { return update_audio_session(this, open, SDL_FALSE); } - NSString *desc = err.description; + desc = err.description; SDL_SetError("Could not activate Audio Session: %s", desc.UTF8String); return NO; } @@ -672,7 +674,21 @@ static OSStatus default_device_changed(AudioObjectID inObjectID, UInt32 inNumber #if DEBUG_COREAUDIO printf("COREAUDIO: default device changed for SDL audio device %p!\n", this); #endif - SDL_AtomicSet(&this->hidden->device_change_flag, 1); /* let the audioqueue thread pick up on this when safe to do so. */ + + /* due to a bug (?) in CoreAudio, this seems able to fire for a device pointer that's already closed, so check our list to make sure + the pointer is still valid before touching it. https://github.com/libsdl-org/SDL/issues/10432 */ + if (open_devices) { + int i; + for (i = 0; i < num_open_devices; i++) { + SDL_AudioDevice *device = open_devices[i]; + if (device == this) { + if (this->hidden) { + SDL_AtomicSet(&this->hidden->device_change_flag, 1); /* let the audioqueue thread pick up on this when safe to do so. */ + } + return noErr; + } + } + } return noErr; } #endif @@ -806,8 +822,8 @@ static int assign_device_to_audioqueue(_THIS) result = AudioObjectGetPropertyData(this->hidden->deviceID, &prop, 0, NULL, &devuidsize, &devuid); CHECK_RESULT("AudioObjectGetPropertyData (kAudioDevicePropertyDeviceUID)"); result = AudioQueueSetProperty(this->hidden->audioQueue, kAudioQueueProperty_CurrentDevice, &devuid, devuidsize); + CFRelease(devuid); /* Release devuid; we're done with it and AudioQueueSetProperty should have retained if it wants to keep it. */ CHECK_RESULT("AudioQueueSetProperty (kAudioQueueProperty_CurrentDevice)"); - return 1; } #endif @@ -856,30 +872,50 @@ static int prepare_audioqueue(_THIS) SDL_zero(layout); switch (this->spec.channels) { case 1: + // a standard mono stream layout.mChannelLayoutTag = kAudioChannelLayoutTag_Mono; break; case 2: + // a standard stereo stream (L R) - implied playback layout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo; break; case 3: + // L R LFE layout.mChannelLayoutTag = kAudioChannelLayoutTag_DVD_4; break; case 4: + // front left, front right, back left, back right layout.mChannelLayoutTag = kAudioChannelLayoutTag_Quadraphonic; break; case 5: - layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_5_0_A; + // L R LFE Ls Rs + layout.mChannelLayoutTag = kAudioChannelLayoutTag_DVD_6; break; case 6: - layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_5_1_A; + // L R C LFE Ls Rs + layout.mChannelLayoutTag = kAudioChannelLayoutTag_DVD_12; break; +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000) || \ + (defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED >= 101500) case 7: - /* FIXME: Need to move channel[4] (BC) to channel[6] */ - layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_6_1_A; + // L R C LFE Cs Ls Rs + if (@available(macOS 10.15, iOS 13, *)) { + layout.mChannelLayoutTag = kAudioChannelLayoutTag_WAVE_6_1; + } else { + return SDL_SetError("Unsupported audio channels"); + } break; case 8: - layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_7_1_A; + // L R C LFE Rls Rrs Ls Rs + if (@available(macOS 10.15, iOS 13, *)) { + layout.mChannelLayoutTag = kAudioChannelLayoutTag_WAVE_7_1; + } else { + return SDL_SetError("Unsupported audio channels"); + } break; +#endif + default: + return SDL_SetError("Unsupported audio channels"); } if (layout.mChannelLayoutTag != 0) { result = AudioQueueSetProperty(this->hidden->audioQueue, kAudioQueueProperty_ChannelLayout, &layout, sizeof(layout)); diff --git a/vs/sdl2/src/audio/directsound/SDL_directsound.c b/vs/sdl2/src/audio/directsound/SDL_directsound.c index a98a1645f02..9d52c38399a 100644 --- a/vs/sdl2/src/audio/directsound/SDL_directsound.c +++ b/vs/sdl2/src/audio/directsound/SDL_directsound.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/directsound/SDL_directsound.h b/vs/sdl2/src/audio/directsound/SDL_directsound.h index 051b9d7039a..6de044a2d27 100644 --- a/vs/sdl2/src/audio/directsound/SDL_directsound.h +++ b/vs/sdl2/src/audio/directsound/SDL_directsound.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/disk/SDL_diskaudio.c b/vs/sdl2/src/audio/disk/SDL_diskaudio.c index d9d4aae05b6..49a39f7d340 100644 --- a/vs/sdl2/src/audio/disk/SDL_diskaudio.c +++ b/vs/sdl2/src/audio/disk/SDL_diskaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/disk/SDL_diskaudio.h b/vs/sdl2/src/audio/disk/SDL_diskaudio.h index 8ae237f1eed..a7e7e01d92f 100644 --- a/vs/sdl2/src/audio/disk/SDL_diskaudio.h +++ b/vs/sdl2/src/audio/disk/SDL_diskaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/dsp/SDL_dspaudio.c b/vs/sdl2/src/audio/dsp/SDL_dspaudio.c index fdbad8fee92..ffba531aa64 100644 --- a/vs/sdl2/src/audio/dsp/SDL_dspaudio.c +++ b/vs/sdl2/src/audio/dsp/SDL_dspaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/dsp/SDL_dspaudio.h b/vs/sdl2/src/audio/dsp/SDL_dspaudio.h index 11214a52f60..c710a7ec9b1 100644 --- a/vs/sdl2/src/audio/dsp/SDL_dspaudio.h +++ b/vs/sdl2/src/audio/dsp/SDL_dspaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/dummy/SDL_dummyaudio.c b/vs/sdl2/src/audio/dummy/SDL_dummyaudio.c index b17cd44acce..a9bdd84a5a0 100644 --- a/vs/sdl2/src/audio/dummy/SDL_dummyaudio.c +++ b/vs/sdl2/src/audio/dummy/SDL_dummyaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/dummy/SDL_dummyaudio.h b/vs/sdl2/src/audio/dummy/SDL_dummyaudio.h index 500f5d97dd4..e0e77e523ca 100644 --- a/vs/sdl2/src/audio/dummy/SDL_dummyaudio.h +++ b/vs/sdl2/src/audio/dummy/SDL_dummyaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/emscripten/SDL_emscriptenaudio.c b/vs/sdl2/src/audio/emscripten/SDL_emscriptenaudio.c index 8d21dab597d..304cabd0bf6 100644 --- a/vs/sdl2/src/audio/emscripten/SDL_emscriptenaudio.c +++ b/vs/sdl2/src/audio/emscripten/SDL_emscriptenaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -39,6 +39,12 @@ static void FeedAudioDevice(_THIS, const void *buf, const int buflen) /* *INDENT-OFF* */ /* clang-format off */ MAIN_THREAD_EM_ASM({ var SDL2 = Module['SDL2']; + /* Convert incoming buf pointer to a HEAPF32 offset. */ +#ifdef __wasm64__ + var buf = $0 / 4; +#else + var buf = $0 >>> 2; +#endif var numChannels = SDL2.audio.currentOutputBuffer['numberOfChannels']; for (var c = 0; c < numChannels; ++c) { var channelData = SDL2.audio.currentOutputBuffer['getChannelData'](c); @@ -47,7 +53,7 @@ static void FeedAudioDevice(_THIS, const void *buf, const int buflen) } for (var j = 0; j < $1; ++j) { - channelData[j] = HEAPF32[$0 + ((j*numChannels + c) << 2) >> 2]; /* !!! FIXME: why are these shifts here? */ + channelData[j] = HEAPF32[buf + (j*numChannels + c)]; } } }, buf, buflen / framelen); @@ -223,7 +229,7 @@ static int EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname) SDL2.audioContext = new webkitAudioContext(); } if (SDL2.audioContext) { - if ((typeof navigator.userActivation) === 'undefined') { // Firefox doesn't have this (as of August 2023), use autoResumeAudioContext instead. + if ((typeof navigator.userActivation) === 'undefined') { autoResumeAudioContext(SDL2.audioContext); } } @@ -304,7 +310,7 @@ static int EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname) if ((SDL2 === undefined) || (SDL2.capture === undefined)) { return; } audioProcessingEvent.outputBuffer.getChannelData(0).fill(0.0); SDL2.capture.currentCaptureBuffer = audioProcessingEvent.inputBuffer; - dynCall('vi', $2, [$3]); + dynCall('vp', $2, [$3]); }; SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode); SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination); @@ -320,7 +326,7 @@ static int EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname) SDL2.capture.silenceBuffer.getChannelData(0).fill(0.0); var silence_callback = function() { SDL2.capture.currentCaptureBuffer = SDL2.capture.silenceBuffer; - dynCall('vi', $2, [$3]); + dynCall('vp', $2, [$3]); }; SDL2.capture.silenceTimer = setInterval(silence_callback, ($1 / SDL2.audioContext.sampleRate) * 1000); @@ -345,7 +351,7 @@ static int EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname) SDL2.audio.silenceBuffer = undefined; } SDL2.audio.currentOutputBuffer = e['outputBuffer']; - dynCall('vi', $2, [$3]); + dynCall('vp', $2, [$3]); }; SDL2.audio.scriptProcessorNode['connect'](SDL2.audioContext['destination']); @@ -354,7 +360,7 @@ static int EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname) SDL2.audio.silenceBuffer = SDL2.audioContext.createBuffer($0, $1, SDL2.audioContext.sampleRate); SDL2.audio.silenceBuffer.getChannelData(0).fill(0.0); var silence_callback = function() { - if ((typeof navigator.userActivation) !== 'undefined') { // Almost everything modern except Firefox (as of August 2023) + if ((typeof navigator.userActivation) !== 'undefined') { if (navigator.userActivation.hasBeenActive) { SDL2.audioContext.resume(); } @@ -363,7 +369,7 @@ static int EMSCRIPTENAUDIO_OpenDevice(_THIS, const char *devname) // the buffer that gets filled here just gets ignored, so the app can make progress // and/or avoid flooding audio queues until we can actually play audio. SDL2.audio.currentOutputBuffer = SDL2.audio.silenceBuffer; - dynCall('vi', $2, [$3]); + dynCall('vp', $2, [$3]); SDL2.audio.currentOutputBuffer = undefined; }; diff --git a/vs/sdl2/src/audio/emscripten/SDL_emscriptenaudio.h b/vs/sdl2/src/audio/emscripten/SDL_emscriptenaudio.h index 54f605724c3..62631cf9c74 100644 --- a/vs/sdl2/src/audio/emscripten/SDL_emscriptenaudio.h +++ b/vs/sdl2/src/audio/emscripten/SDL_emscriptenaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/esd/SDL_esdaudio.c b/vs/sdl2/src/audio/esd/SDL_esdaudio.c index 596f51a3309..70cdfa26339 100644 --- a/vs/sdl2/src/audio/esd/SDL_esdaudio.c +++ b/vs/sdl2/src/audio/esd/SDL_esdaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -64,7 +64,7 @@ static struct #undef SDL_ESD_SYM -static void UnloadESDLibrary() +static void UnloadESDLibrary(void) { if (esd_handle) { SDL_UnloadObject(esd_handle); @@ -96,7 +96,7 @@ static int LoadESDLibrary(void) #else -static void UnloadESDLibrary() +static void UnloadESDLibrary(void) { return; } diff --git a/vs/sdl2/src/audio/esd/SDL_esdaudio.h b/vs/sdl2/src/audio/esd/SDL_esdaudio.h index 15e3d4e1dc4..0ec50b06870 100644 --- a/vs/sdl2/src/audio/esd/SDL_esdaudio.h +++ b/vs/sdl2/src/audio/esd/SDL_esdaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/fusionsound/SDL_fsaudio.c b/vs/sdl2/src/audio/fusionsound/SDL_fsaudio.c index 5abab2e7c12..30a429fbf1d 100644 --- a/vs/sdl2/src/audio/fusionsound/SDL_fsaudio.c +++ b/vs/sdl2/src/audio/fusionsound/SDL_fsaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -77,7 +77,7 @@ static struct #undef SDL_FS_SYM -static void UnloadFusionSoundLibrary() +static void UnloadFusionSoundLibrary(void) { if (fs_handle) { SDL_UnloadObject(fs_handle); @@ -110,7 +110,7 @@ static int LoadFusionSoundLibrary(void) #else -static void UnloadFusionSoundLibrary() +static void UnloadFusionSoundLibrary(void) { return; } diff --git a/vs/sdl2/src/audio/fusionsound/SDL_fsaudio.h b/vs/sdl2/src/audio/fusionsound/SDL_fsaudio.h index 556ea54c6f4..49c2f53469b 100644 --- a/vs/sdl2/src/audio/fusionsound/SDL_fsaudio.h +++ b/vs/sdl2/src/audio/fusionsound/SDL_fsaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/haiku/SDL_haikuaudio.cc b/vs/sdl2/src/audio/haiku/SDL_haikuaudio.cc index 39b8d8ca7be..729c0b0dd38 100644 --- a/vs/sdl2/src/audio/haiku/SDL_haikuaudio.cc +++ b/vs/sdl2/src/audio/haiku/SDL_haikuaudio.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/haiku/SDL_haikuaudio.h b/vs/sdl2/src/audio/haiku/SDL_haikuaudio.h index 9acb6e1b36c..50008de7b8b 100644 --- a/vs/sdl2/src/audio/haiku/SDL_haikuaudio.h +++ b/vs/sdl2/src/audio/haiku/SDL_haikuaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/jack/SDL_jackaudio.c b/vs/sdl2/src/audio/jack/SDL_jackaudio.c index 9be8799b4e3..697cc0afd7b 100644 --- a/vs/sdl2/src/audio/jack/SDL_jackaudio.c +++ b/vs/sdl2/src/audio/jack/SDL_jackaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/jack/SDL_jackaudio.h b/vs/sdl2/src/audio/jack/SDL_jackaudio.h index e0ac2e90bb7..5fbac2b2801 100644 --- a/vs/sdl2/src/audio/jack/SDL_jackaudio.h +++ b/vs/sdl2/src/audio/jack/SDL_jackaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/n3ds/SDL_n3dsaudio.c b/vs/sdl2/src/audio/n3ds/SDL_n3dsaudio.c index ea20a7ce3e3..c577436028a 100644 --- a/vs/sdl2/src/audio/n3ds/SDL_n3dsaudio.c +++ b/vs/sdl2/src/audio/n3ds/SDL_n3dsaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/n3ds/SDL_n3dsaudio.h b/vs/sdl2/src/audio/n3ds/SDL_n3dsaudio.h index 274e9f362e6..dbd9d61b506 100644 --- a/vs/sdl2/src/audio/n3ds/SDL_n3dsaudio.h +++ b/vs/sdl2/src/audio/n3ds/SDL_n3dsaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/nacl/SDL_naclaudio.c b/vs/sdl2/src/audio/nacl/SDL_naclaudio.c index f189256cb6b..c592aaaa6f3 100644 --- a/vs/sdl2/src/audio/nacl/SDL_naclaudio.c +++ b/vs/sdl2/src/audio/nacl/SDL_naclaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/nacl/SDL_naclaudio.h b/vs/sdl2/src/audio/nacl/SDL_naclaudio.h index c08702be497..c47f544d15a 100644 --- a/vs/sdl2/src/audio/nacl/SDL_naclaudio.h +++ b/vs/sdl2/src/audio/nacl/SDL_naclaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/nas/SDL_nasaudio.c b/vs/sdl2/src/audio/nas/SDL_nasaudio.c index f3eb68f33b4..22301e567a6 100644 --- a/vs/sdl2/src/audio/nas/SDL_nasaudio.c +++ b/vs/sdl2/src/audio/nas/SDL_nasaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/nas/SDL_nasaudio.h b/vs/sdl2/src/audio/nas/SDL_nasaudio.h index 0275c06d604..eaa3b3797b0 100644 --- a/vs/sdl2/src/audio/nas/SDL_nasaudio.h +++ b/vs/sdl2/src/audio/nas/SDL_nasaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/netbsd/SDL_netbsdaudio.c b/vs/sdl2/src/audio/netbsd/SDL_netbsdaudio.c index cc515995baf..0704e328007 100644 --- a/vs/sdl2/src/audio/netbsd/SDL_netbsdaudio.c +++ b/vs/sdl2/src/audio/netbsd/SDL_netbsdaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/netbsd/SDL_netbsdaudio.h b/vs/sdl2/src/audio/netbsd/SDL_netbsdaudio.h index 81fd4e6d004..416f9cdceee 100644 --- a/vs/sdl2/src/audio/netbsd/SDL_netbsdaudio.h +++ b/vs/sdl2/src/audio/netbsd/SDL_netbsdaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/openslES/SDL_openslES.c b/vs/sdl2/src/audio/openslES/SDL_openslES.c index d93fb5ac1f6..dce28482158 100644 --- a/vs/sdl2/src/audio/openslES/SDL_openslES.c +++ b/vs/sdl2/src/audio/openslES/SDL_openslES.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -413,27 +413,32 @@ static int openslES_CreatePCMPlayer(_THIS) SLresult result; int i; - /* If we want to add floating point audio support (requires API level 21) - it can be done as described here: - https://developer.android.com/ndk/guides/audio/opensl/android-extensions.html#floating-point - */ + /* according to https://developer.android.com/ndk/guides/audio/opensl/opensl-for-android, + Android's OpenSL ES only supports Uint8 and _littleendian_ Sint16. + (and float32, with an extension we use, below.) */ if (SDL_GetAndroidSDKVersion() >= 21) { SDL_AudioFormat test_format; for (test_format = SDL_FirstAudioFormat(this->spec.format); test_format; test_format = SDL_NextAudioFormat()) { - if (SDL_AUDIO_ISSIGNED(test_format)) { + switch (test_format) { + case AUDIO_U8: + case AUDIO_S16LSB: + case AUDIO_F32LSB: break; + default: + continue; } + break; } if (!test_format) { /* Didn't find a compatible format : */ - LOGI("No compatible audio format, using signed 16-bit audio"); - test_format = AUDIO_S16SYS; + LOGI("No compatible audio format, using signed 16-bit LE audio"); + test_format = AUDIO_S16LSB; } this->spec.format = test_format; } else { /* Just go with signed 16-bit audio as it's the most compatible */ - this->spec.format = AUDIO_S16SYS; + this->spec.format = AUDIO_S16LSB; } /* Update the fragment size as size in bytes */ diff --git a/vs/sdl2/src/audio/openslES/SDL_openslES.h b/vs/sdl2/src/audio/openslES/SDL_openslES.h index b9943d89d71..1f84b84b61c 100644 --- a/vs/sdl2/src/audio/openslES/SDL_openslES.h +++ b/vs/sdl2/src/audio/openslES/SDL_openslES.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/os2/SDL_os2audio.c b/vs/sdl2/src/audio/os2/SDL_os2audio.c index c61c641c845..3657e530bd2 100644 --- a/vs/sdl2/src/audio/os2/SDL_os2audio.c +++ b/vs/sdl2/src/audio/os2/SDL_os2audio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/os2/SDL_os2audio.h b/vs/sdl2/src/audio/os2/SDL_os2audio.h index 41f091fa0b3..7aa8efb8c00 100644 --- a/vs/sdl2/src/audio/os2/SDL_os2audio.h +++ b/vs/sdl2/src/audio/os2/SDL_os2audio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/paudio/SDL_paudio.c b/vs/sdl2/src/audio/paudio/SDL_paudio.c index b82ec8e97d4..1d954dd5133 100644 --- a/vs/sdl2/src/audio/paudio/SDL_paudio.c +++ b/vs/sdl2/src/audio/paudio/SDL_paudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/paudio/SDL_paudio.h b/vs/sdl2/src/audio/paudio/SDL_paudio.h index 7c870ca9bc2..d1f8928cfbc 100644 --- a/vs/sdl2/src/audio/paudio/SDL_paudio.h +++ b/vs/sdl2/src/audio/paudio/SDL_paudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/pipewire/SDL_pipewire.c b/vs/sdl2/src/audio/pipewire/SDL_pipewire.c index 4fbe9af9193..8b0772bc9e7 100644 --- a/vs/sdl2/src/audio/pipewire/SDL_pipewire.c +++ b/vs/sdl2/src/audio/pipewire/SDL_pipewire.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -142,13 +142,13 @@ static int pipewire_dlsym(const char *fn, void **addr) return -1; \ } -static int load_pipewire_library() +static int load_pipewire_library(void) { pipewire_handle = SDL_LoadObject(pipewire_library); return pipewire_handle ? 0 : -1; } -static void unload_pipewire_library() +static void unload_pipewire_library(void) { if (pipewire_handle) { SDL_UnloadObject(pipewire_handle); @@ -160,18 +160,18 @@ static void unload_pipewire_library() #define SDL_PIPEWIRE_SYM(x) PIPEWIRE_##x = x -static int load_pipewire_library() +static int load_pipewire_library(void) { return 0; } -static void unload_pipewire_library() +static void unload_pipewire_library(void) { /* Nothing to do */ } #endif /* SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC */ -static int load_pipewire_syms() +static int load_pipewire_syms(void) { SDL_PIPEWIRE_SYM(pw_get_library_version); SDL_PIPEWIRE_SYM(pw_init); @@ -212,7 +212,7 @@ SDL_FORCE_INLINE SDL_bool pipewire_version_at_least(int major, int minor, int pa (pipewire_version_major > major || pipewire_version_minor > minor || pipewire_version_patch >= patch); } -static int init_pipewire_library() +static int init_pipewire_library(void) { if (!load_pipewire_library()) { if (!load_pipewire_syms()) { @@ -234,7 +234,7 @@ static int init_pipewire_library() return -1; } -static void deinit_pipewire_library() +static void deinit_pipewire_library(void) { PIPEWIRE_pw_deinit(); unload_pipewire_library(); @@ -340,7 +340,7 @@ static void io_list_remove(Uint32 id) } } -static void io_list_sort() +static void io_list_sort(void) { struct io_node *default_sink = NULL, *default_source = NULL; struct io_node *n, *temp; @@ -365,7 +365,7 @@ static void io_list_sort() } } -static void io_list_clear() +static void io_list_clear(void) { struct io_node *n, *temp; @@ -426,7 +426,7 @@ static void pending_list_remove(Uint32 id) } } -static void pending_list_clear() +static void pending_list_clear(void) { struct node_object *node, *temp; @@ -574,6 +574,25 @@ static SDL_bool get_int_param(const struct spa_pod *param, Uint32 key, int *val) return SDL_FALSE; } +static SDL_AudioFormat SPAFormatToSDL(enum spa_audio_format spafmt) +{ + switch (spafmt) { + #define CHECKFMT(spa,sdl) case SPA_AUDIO_FORMAT_##spa: return AUDIO_##sdl + CHECKFMT(U8, U8); + CHECKFMT(S8, S8); + CHECKFMT(S16_LE, S16LSB); + CHECKFMT(S16_BE, S16MSB); + CHECKFMT(S32_LE, S32LSB); + CHECKFMT(S32_BE, S32MSB); + CHECKFMT(F32_LE, F32LSB); + CHECKFMT(F32_BE, F32MSB); + #undef CHECKFMT + default: break; + } + + return 0; +} + /* Interface node callbacks */ static void node_event_info(void *object, const struct pw_node_info *info) { @@ -590,7 +609,7 @@ static void node_event_info(void *object, const struct pw_node_info *info) /* Need to parse the parameters to get the sample rate */ for (i = 0; i < info->n_params; ++i) { - pw_node_enum_params(node->proxy, 0, info->params[i].id, 0, 0, NULL); + pw_node_enum_params((struct pw_node*)node->proxy, 0, info->params[i].id, 0, 0, NULL); } hotplug_core_sync(node); @@ -602,6 +621,15 @@ static void node_event_param(void *object, int seq, uint32_t id, uint32_t index, struct node_object *node = object; struct io_node *io = node->userdata; + if ((id == SPA_PARAM_Format) && (io->spec.format == 0)) { + struct spa_audio_info_raw info; + SDL_zero(info); + if (spa_format_audio_raw_parse(param, &info) == 0) { + /*SDL_Log("Sink Format: %d, Rate: %d Hz, Channels: %d", info.format, info.rate, info.channels);*/ + io->spec.format = SPAFormatToSDL(info.format); + } + } + /* Get the default frequency */ if (io->spec.freq == 0) { get_range_param(param, SPA_FORMAT_AUDIO_rate, &io->spec.freq, NULL, NULL); @@ -719,7 +747,9 @@ static void registry_event_global_callback(void *object, uint32_t id, uint32_t p /* Begin setting the node properties */ io->id = id; io->is_capture = is_capture; - io->spec.format = AUDIO_F32; /* Pipewire uses floats internally, other formats require conversion. */ + if (io->spec.format == 0) { + io->spec.format = AUDIO_S16; /* we'll go conservative here if for some reason the format isn't known. */ + } io->name = io->buf; io->path = io->buf + desc_buffer_len; SDL_strlcpy(io->buf, node_desc, desc_buffer_len); @@ -751,7 +781,7 @@ static const struct pw_registry_events registry_events = { PW_VERSION_REGISTRY_E .global_remove = registry_event_remove_callback }; /* The hotplug thread */ -static int hotplug_loop_init() +static int hotplug_loop_init(void) { int res; @@ -794,7 +824,7 @@ static int hotplug_loop_init() return 0; } -static void hotplug_loop_destroy() +static void hotplug_loop_destroy(void) { if (hotplug_loop) { PIPEWIRE_pw_thread_loop_stop(hotplug_loop); @@ -836,7 +866,7 @@ static void hotplug_loop_destroy() } } -static void PIPEWIRE_DetectDevices() +static void PIPEWIRE_DetectDevices(void) { struct io_node *io; @@ -1342,7 +1372,7 @@ static int PIPEWIRE_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int is return ret; } -static void PIPEWIRE_Deinitialize() +static void PIPEWIRE_Deinitialize(void) { if (pipewire_initialized) { hotplug_loop_destroy(); diff --git a/vs/sdl2/src/audio/pipewire/SDL_pipewire.h b/vs/sdl2/src/audio/pipewire/SDL_pipewire.h index cf5817b1ac7..079821d92d2 100644 --- a/vs/sdl2/src/audio/pipewire/SDL_pipewire.h +++ b/vs/sdl2/src/audio/pipewire/SDL_pipewire.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/ps2/SDL_ps2audio.c b/vs/sdl2/src/audio/ps2/SDL_ps2audio.c index da5c5d32846..0de23722fbf 100644 --- a/vs/sdl2/src/audio/ps2/SDL_ps2audio.c +++ b/vs/sdl2/src/audio/ps2/SDL_ps2audio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/ps2/SDL_ps2audio.h b/vs/sdl2/src/audio/ps2/SDL_ps2audio.h index 5f5989dc629..3c76544b58d 100644 --- a/vs/sdl2/src/audio/ps2/SDL_ps2audio.h +++ b/vs/sdl2/src/audio/ps2/SDL_ps2audio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/psp/SDL_pspaudio.c b/vs/sdl2/src/audio/psp/SDL_pspaudio.c index 30e1c234f0a..e949a7adf17 100644 --- a/vs/sdl2/src/audio/psp/SDL_pspaudio.c +++ b/vs/sdl2/src/audio/psp/SDL_pspaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/psp/SDL_pspaudio.h b/vs/sdl2/src/audio/psp/SDL_pspaudio.h index ba351025da5..7baa93f083d 100644 --- a/vs/sdl2/src/audio/psp/SDL_pspaudio.h +++ b/vs/sdl2/src/audio/psp/SDL_pspaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/pulseaudio/SDL_pulseaudio.c b/vs/sdl2/src/audio/pulseaudio/SDL_pulseaudio.c index 5e2bb6f160c..49230b7d46a 100644 --- a/vs/sdl2/src/audio/pulseaudio/SDL_pulseaudio.c +++ b/vs/sdl2/src/audio/pulseaudio/SDL_pulseaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -497,7 +497,7 @@ static void PULSEAUDIO_FlushCapture(_THIS) { struct SDL_PrivateAudioData *h = this->hidden; const void *data = NULL; - size_t nbytes = 0; + size_t nbytes = 0, buflen = 0; PULSEAUDIO_pa_threaded_mainloop_lock(pulseaudio_threaded_mainloop); @@ -507,19 +507,19 @@ static void PULSEAUDIO_FlushCapture(_THIS) h->capturelen = 0; } - while (SDL_AtomicGet(&this->enabled) && (PULSEAUDIO_pa_stream_readable_size(h->stream) > 0)) { + buflen = PULSEAUDIO_pa_stream_readable_size(h->stream); + while (SDL_AtomicGet(&this->enabled) && (buflen > 0)) { PULSEAUDIO_pa_threaded_mainloop_wait(pulseaudio_threaded_mainloop); if ((PULSEAUDIO_pa_context_get_state(pulseaudio_context) != PA_CONTEXT_READY) || (PULSEAUDIO_pa_stream_get_state(h->stream) != PA_STREAM_READY)) { /*printf("PULSEAUDIO DEVICE FAILURE IN FLUSHCAPTURE!\n");*/ SDL_OpenedAudioDeviceDisconnected(this); break; } - - if (PULSEAUDIO_pa_stream_readable_size(h->stream) > 0) { - /* a new fragment is available! Just dump it. */ - PULSEAUDIO_pa_stream_peek(h->stream, &data, &nbytes); - PULSEAUDIO_pa_stream_drop(h->stream); /* drop this fragment. */ - } + /* a fragment of audio present before FlushCapture was call is + available! Just drop it. */ + PULSEAUDIO_pa_stream_peek(h->stream, &data, &nbytes); + PULSEAUDIO_pa_stream_drop(h->stream); + buflen -= nbytes; } PULSEAUDIO_pa_threaded_mainloop_unlock(pulseaudio_threaded_mainloop); @@ -885,7 +885,7 @@ static int SDLCALL HotplugThread(void *data) return 0; } -static void PULSEAUDIO_DetectDevices() +static void PULSEAUDIO_DetectDevices(void) { SDL_sem *ready_sem = SDL_CreateSemaphore(0); @@ -897,8 +897,12 @@ static void PULSEAUDIO_DetectDevices() /* ok, we have a sane list, let's set up hotplug notifications now... */ SDL_AtomicSet(&pulseaudio_hotplug_thread_active, 1); - pulseaudio_hotplug_thread = SDL_CreateThreadInternal(HotplugThread, "PulseHotplug", 256 * 1024, ready_sem); /* !!! FIXME: this can probably survive in significantly less stack space. */ - SDL_SemWait(ready_sem); + pulseaudio_hotplug_thread = SDL_CreateThreadInternal(HotplugThread, "PulseHotplug", 0, ready_sem); + if (pulseaudio_hotplug_thread) { + SDL_SemWait(ready_sem); + } else { + SDL_AtomicSet(&pulseaudio_hotplug_thread_active, 0); // thread failed to start, we'll go on without hotplug. + } SDL_DestroySemaphore(ready_sem); } diff --git a/vs/sdl2/src/audio/pulseaudio/SDL_pulseaudio.h b/vs/sdl2/src/audio/pulseaudio/SDL_pulseaudio.h index b4ad3822ce3..f58d9c0532b 100644 --- a/vs/sdl2/src/audio/pulseaudio/SDL_pulseaudio.h +++ b/vs/sdl2/src/audio/pulseaudio/SDL_pulseaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/qsa/SDL_qsa_audio.c b/vs/sdl2/src/audio/qsa/SDL_qsa_audio.c index be0532cf922..c9cc6168ba0 100644 --- a/vs/sdl2/src/audio/qsa/SDL_qsa_audio.c +++ b/vs/sdl2/src/audio/qsa/SDL_qsa_audio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/qsa/SDL_qsa_audio.h b/vs/sdl2/src/audio/qsa/SDL_qsa_audio.h index 1e69f26c929..5140e6dcf05 100644 --- a/vs/sdl2/src/audio/qsa/SDL_qsa_audio.h +++ b/vs/sdl2/src/audio/qsa/SDL_qsa_audio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/sndio/SDL_sndioaudio.c b/vs/sdl2/src/audio/sndio/SDL_sndioaudio.c index 499b8478cc9..480afd904c8 100644 --- a/vs/sdl2/src/audio/sndio/SDL_sndioaudio.c +++ b/vs/sdl2/src/audio/sndio/SDL_sndioaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/sndio/SDL_sndioaudio.h b/vs/sdl2/src/audio/sndio/SDL_sndioaudio.h index ffd4df895c0..ecd5c39eddb 100644 --- a/vs/sdl2/src/audio/sndio/SDL_sndioaudio.h +++ b/vs/sdl2/src/audio/sndio/SDL_sndioaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/sun/SDL_sunaudio.c b/vs/sdl2/src/audio/sun/SDL_sunaudio.c index 442cf2b5ecb..2a046c41d74 100644 --- a/vs/sdl2/src/audio/sun/SDL_sunaudio.c +++ b/vs/sdl2/src/audio/sun/SDL_sunaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,18 +24,12 @@ /* Allow access to a raw mixing buffer */ +#include #include #include -#ifdef __NETBSD__ #include #include -#endif -#ifdef __SVR4 -#include -#else #include -#include -#endif #include #include "SDL_timer.h" diff --git a/vs/sdl2/src/audio/sun/SDL_sunaudio.h b/vs/sdl2/src/audio/sun/SDL_sunaudio.h index 095254333ef..976f0fc1fab 100644 --- a/vs/sdl2/src/audio/sun/SDL_sunaudio.h +++ b/vs/sdl2/src/audio/sun/SDL_sunaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/vita/SDL_vitaaudio.c b/vs/sdl2/src/audio/vita/SDL_vitaaudio.c index bd873238185..88ce007413a 100644 --- a/vs/sdl2/src/audio/vita/SDL_vitaaudio.c +++ b/vs/sdl2/src/audio/vita/SDL_vitaaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/vita/SDL_vitaaudio.h b/vs/sdl2/src/audio/vita/SDL_vitaaudio.h index cb0aba8ec95..4cde8d8e659 100644 --- a/vs/sdl2/src/audio/vita/SDL_vitaaudio.h +++ b/vs/sdl2/src/audio/vita/SDL_vitaaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/wasapi/SDL_wasapi.c b/vs/sdl2/src/audio/wasapi/SDL_wasapi.c index cf90efc0f9d..f516b1e2e7d 100644 --- a/vs/sdl2/src/audio/wasapi/SDL_wasapi.c +++ b/vs/sdl2/src/audio/wasapi/SDL_wasapi.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -111,6 +111,12 @@ static int UpdateAudioStream(_THIS, const SDL_AudioSpec *oldspec) } } + /* if the device sample size changed, make sure we're asking for enough data. */ + if (this->callbackspec.samples != this->spec.samples) { + this->callbackspec.samples = this->spec.samples; + SDL_CalculateAudioSpec(&this->callbackspec); + } + /* make sure our scratch buffer can cover the new device spec. */ if (this->spec.size > this->work_buffer_len) { Uint8 *ptr = (Uint8 *)SDL_realloc(this->work_buffer, this->spec.size); diff --git a/vs/sdl2/src/audio/wasapi/SDL_wasapi.h b/vs/sdl2/src/audio/wasapi/SDL_wasapi.h index 804e0b74e93..97865986acf 100644 --- a/vs/sdl2/src/audio/wasapi/SDL_wasapi.h +++ b/vs/sdl2/src/audio/wasapi/SDL_wasapi.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/wasapi/SDL_wasapi_win32.c b/vs/sdl2/src/audio/wasapi/SDL_wasapi_win32.c index 88823c5ac58..0c1e8bd3df9 100644 --- a/vs/sdl2/src/audio/wasapi/SDL_wasapi_win32.c +++ b/vs/sdl2/src/audio/wasapi/SDL_wasapi_win32.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/wasapi/SDL_wasapi_winrt.cpp b/vs/sdl2/src/audio/wasapi/SDL_wasapi_winrt.cpp index 26f483878a1..6bf862800d8 100644 --- a/vs/sdl2/src/audio/wasapi/SDL_wasapi_winrt.cpp +++ b/vs/sdl2/src/audio/wasapi/SDL_wasapi_winrt.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -145,7 +145,7 @@ SDL_WasapiDeviceEventHandler::~SDL_WasapiDeviceEventHandler() void SDL_WasapiDeviceEventHandler::OnDeviceAdded(DeviceWatcher ^ sender, DeviceInformation ^ info) { SDL_assert(sender == this->watcher); - char *utf8dev = WIN_StringToUTF8(info->Name->Data()); + char *utf8dev = WIN_StringToUTF8W(info->Name->Data()); if (utf8dev) { WAVEFORMATEXTENSIBLE fmt; Platform::Object ^ obj = info->Properties->Lookup(SDL_PKEY_AudioEngine_DeviceFormat); diff --git a/vs/sdl2/src/audio/winmm/SDL_winmm.c b/vs/sdl2/src/audio/winmm/SDL_winmm.c index 47cb4ba7df7..77e17736618 100644 --- a/vs/sdl2/src/audio/winmm/SDL_winmm.c +++ b/vs/sdl2/src/audio/winmm/SDL_winmm.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/audio/winmm/SDL_winmm.h b/vs/sdl2/src/audio/winmm/SDL_winmm.h index 8d0744a2d63..cebc747e303 100644 --- a/vs/sdl2/src/audio/winmm/SDL_winmm.h +++ b/vs/sdl2/src/audio/winmm/SDL_winmm.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/android/SDL_android.c b/vs/sdl2/src/core/android/SDL_android.c index 60620d814e1..86f272e4037 100644 --- a/vs/sdl2/src/core/android/SDL_android.c +++ b/vs/sdl2/src/core/android/SDL_android.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -842,18 +842,18 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeDropFile)( } /* Lock / Unlock Mutex */ -void Android_ActivityMutex_Lock() +void Android_ActivityMutex_Lock(void) { SDL_LockMutex(Android_ActivityMutex); } -void Android_ActivityMutex_Unlock() +void Android_ActivityMutex_Unlock(void) { SDL_UnlockMutex(Android_ActivityMutex); } /* Lock the Mutex when the Activity is in its 'Running' state */ -void Android_ActivityMutex_Lock_Running() +void Android_ActivityMutex_Lock_Running(void) { int pauseSignaled = 0; int resumeSignaled = 0; @@ -1439,13 +1439,13 @@ void Android_JNI_SetOrientation(int w, int h, int resizable, const char *hint) (*env)->DeleteLocalRef(env, jhint); } -void Android_JNI_MinizeWindow() +void Android_JNI_MinizeWindow(void) { JNIEnv *env = Android_JNI_GetEnv(); (*env)->CallStaticVoidMethod(env, mActivityClass, midMinimizeWindow); } -SDL_bool Android_JNI_ShouldMinimizeOnFocusLoss() +SDL_bool Android_JNI_ShouldMinimizeOnFocusLoss(void) { JNIEnv *env = Android_JNI_GetEnv(); return (*env)->CallStaticBooleanMethod(env, mActivityClass, midShouldMinimizeOnFocusLoss); @@ -1879,7 +1879,7 @@ static SDL_bool Android_JNI_ExceptionOccurred(SDL_bool silent) return SDL_FALSE; } -static void Internal_Android_Create_AssetManager() +static void Internal_Android_Create_AssetManager(void) { struct LocalReferenceHolder refs = LocalReferenceHolder_Setup(__FUNCTION__); @@ -1918,7 +1918,7 @@ static void Internal_Android_Create_AssetManager() LocalReferenceHolder_Cleanup(&refs); } -static void Internal_Android_Destroy_AssetManager() +static void Internal_Android_Destroy_AssetManager(void) { JNIEnv *env = Android_JNI_GetEnv(); @@ -2153,7 +2153,7 @@ int Android_JNI_GetPowerInfo(int *plugged, int *charged, int *battery, int *seco } /* Add all touch devices */ -void Android_JNI_InitTouch() +void Android_JNI_InitTouch(void) { JNIEnv *env = Android_JNI_GetEnv(); (*env)->CallStaticVoidMethod(env, mActivityClass, midInitTouch); diff --git a/vs/sdl2/src/core/android/SDL_android.h b/vs/sdl2/src/core/android/SDL_android.h index 20d1fc521b2..650b7947b50 100644 --- a/vs/sdl2/src/core/android/SDL_android.h +++ b/vs/sdl2/src/core/android/SDL_android.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/freebsd/SDL_evdev_kbd_freebsd.c b/vs/sdl2/src/core/freebsd/SDL_evdev_kbd_freebsd.c index a3c3456876c..47e25b510b5 100644 --- a/vs/sdl2/src/core/freebsd/SDL_evdev_kbd_freebsd.c +++ b/vs/sdl2/src/core/freebsd/SDL_evdev_kbd_freebsd.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -134,7 +134,7 @@ static void kbd_cleanup_signal_action(int signum, siginfo_t *info, void *ucontex SDL_EVDEV_kbd_reraise_signal(signum); } -static void kbd_unregister_emerg_cleanup() +static void kbd_unregister_emerg_cleanup(void) { int tabidx, signum; diff --git a/vs/sdl2/src/core/gdk/SDL_gdk.cpp b/vs/sdl2/src/core/gdk/SDL_gdk.cpp index 06995686740..238375ebc80 100644 --- a/vs/sdl2/src/core/gdk/SDL_gdk.cpp +++ b/vs/sdl2/src/core/gdk/SDL_gdk.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/gdk/SDL_gdk.h b/vs/sdl2/src/core/gdk/SDL_gdk.h index 75f13ab8167..1757c2ff72a 100644 --- a/vs/sdl2/src/core/gdk/SDL_gdk.h +++ b/vs/sdl2/src/core/gdk/SDL_gdk.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/linux/SDL_dbus.c b/vs/sdl2/src/core/linux/SDL_dbus.c index 7d706c2386d..969c04d8862 100644 --- a/vs/sdl2/src/core/linux/SDL_dbus.c +++ b/vs/sdl2/src/core/linux/SDL_dbus.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/linux/SDL_dbus.h b/vs/sdl2/src/core/linux/SDL_dbus.h index 572ea47f94e..5fc118f7a8d 100644 --- a/vs/sdl2/src/core/linux/SDL_dbus.h +++ b/vs/sdl2/src/core/linux/SDL_dbus.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/linux/SDL_evdev.c b/vs/sdl2/src/core/linux/SDL_evdev.c index e3b836cf75d..de1b758dbef 100644 --- a/vs/sdl2/src/core/linux/SDL_evdev.c +++ b/vs/sdl2/src/core/linux/SDL_evdev.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/linux/SDL_evdev.h b/vs/sdl2/src/core/linux/SDL_evdev.h index c3e9c53694d..6c4b14f0897 100644 --- a/vs/sdl2/src/core/linux/SDL_evdev.h +++ b/vs/sdl2/src/core/linux/SDL_evdev.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/linux/SDL_evdev_capabilities.c b/vs/sdl2/src/core/linux/SDL_evdev_capabilities.c index e1b5d74d1b1..472cc2fb068 100644 --- a/vs/sdl2/src/core/linux/SDL_evdev_capabilities.c +++ b/vs/sdl2/src/core/linux/SDL_evdev_capabilities.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga Copyright (C) 2020 Collabora Ltd. This software is provided 'as-is', without any express or implied diff --git a/vs/sdl2/src/core/linux/SDL_evdev_capabilities.h b/vs/sdl2/src/core/linux/SDL_evdev_capabilities.h index 8d3830aec6f..37f9d063a9c 100644 --- a/vs/sdl2/src/core/linux/SDL_evdev_capabilities.h +++ b/vs/sdl2/src/core/linux/SDL_evdev_capabilities.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga Copyright (C) 2020 Collabora Ltd. This software is provided 'as-is', without any express or implied diff --git a/vs/sdl2/src/core/linux/SDL_evdev_kbd.c b/vs/sdl2/src/core/linux/SDL_evdev_kbd.c index 0aaefa0354f..22a70c3baec 100644 --- a/vs/sdl2/src/core/linux/SDL_evdev_kbd.c +++ b/vs/sdl2/src/core/linux/SDL_evdev_kbd.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -214,7 +214,7 @@ static void kbd_cleanup_signal_action(int signum, siginfo_t *info, void *ucontex SDL_EVDEV_kbd_reraise_signal(signum); } -static void kbd_unregister_emerg_cleanup() +static void kbd_unregister_emerg_cleanup(void) { int tabidx, signum; diff --git a/vs/sdl2/src/core/linux/SDL_evdev_kbd.h b/vs/sdl2/src/core/linux/SDL_evdev_kbd.h index 52a4778e8dd..ffc7a3d9fad 100644 --- a/vs/sdl2/src/core/linux/SDL_evdev_kbd.h +++ b/vs/sdl2/src/core/linux/SDL_evdev_kbd.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/linux/SDL_evdev_kbd_default_accents.h b/vs/sdl2/src/core/linux/SDL_evdev_kbd_default_accents.h index d0d52345576..fd1fe6f033b 100644 --- a/vs/sdl2/src/core/linux/SDL_evdev_kbd_default_accents.h +++ b/vs/sdl2/src/core/linux/SDL_evdev_kbd_default_accents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/linux/SDL_evdev_kbd_default_keymap.h b/vs/sdl2/src/core/linux/SDL_evdev_kbd_default_keymap.h index d744a54a294..35f7ebfc934 100644 --- a/vs/sdl2/src/core/linux/SDL_evdev_kbd_default_keymap.h +++ b/vs/sdl2/src/core/linux/SDL_evdev_kbd_default_keymap.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/linux/SDL_fcitx.c b/vs/sdl2/src/core/linux/SDL_fcitx.c index 88b6d06f405..23dcc28c434 100644 --- a/vs/sdl2/src/core/linux/SDL_fcitx.c +++ b/vs/sdl2/src/core/linux/SDL_fcitx.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -55,7 +55,7 @@ typedef struct _FcitxClient static FcitxClient fcitx_client; -static char *GetAppName() +static char *GetAppName(void) { #if defined(__LINUX__) || defined(__FREEBSD__) char *spot; @@ -368,7 +368,7 @@ static Uint32 Fcitx_ModState(void) return fcitx_mods; } -SDL_bool SDL_Fcitx_Init() +SDL_bool SDL_Fcitx_Init(void) { fcitx_client.dbus = SDL_DBus_GetContext(); @@ -380,7 +380,7 @@ SDL_bool SDL_Fcitx_Init() return FcitxClientCreateIC(&fcitx_client); } -void SDL_Fcitx_Quit() +void SDL_Fcitx_Quit(void) { FcitxClientICCallMethod(&fcitx_client, "DestroyIC"); if (fcitx_client.ic_path) { @@ -485,7 +485,6 @@ void SDL_Fcitx_PumpEvents(void) while (dbus->connection_dispatch(conn) == DBUS_DISPATCH_DATA_REMAINS) { /* Do nothing, actual work happens in DBus_MessageFilter */ - usleep(10); } } diff --git a/vs/sdl2/src/core/linux/SDL_fcitx.h b/vs/sdl2/src/core/linux/SDL_fcitx.h index 4a893f2f943..7aaf1f6f6aa 100644 --- a/vs/sdl2/src/core/linux/SDL_fcitx.h +++ b/vs/sdl2/src/core/linux/SDL_fcitx.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/linux/SDL_ibus.c b/vs/sdl2/src/core/linux/SDL_ibus.c index 31179d4fa27..83e322747a9 100644 --- a/vs/sdl2/src/core/linux/SDL_ibus.c +++ b/vs/sdl2/src/core/linux/SDL_ibus.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/linux/SDL_ibus.h b/vs/sdl2/src/core/linux/SDL_ibus.h index a4ea140b5c8..f6ec1b2f35b 100644 --- a/vs/sdl2/src/core/linux/SDL_ibus.h +++ b/vs/sdl2/src/core/linux/SDL_ibus.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/linux/SDL_ime.c b/vs/sdl2/src/core/linux/SDL_ime.c index 6c28e5f6b59..45406217725 100644 --- a/vs/sdl2/src/core/linux/SDL_ime.c +++ b/vs/sdl2/src/core/linux/SDL_ime.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -40,7 +40,7 @@ static _SDL_IME_ProcessKeyEvent SDL_IME_ProcessKeyEvent_Real = NULL; static _SDL_IME_UpdateTextRect SDL_IME_UpdateTextRect_Real = NULL; static _SDL_IME_PumpEvents SDL_IME_PumpEvents_Real = NULL; -static void InitIME() +static void InitIME(void) { static SDL_bool inited = SDL_FALSE; #ifdef HAVE_FCITX @@ -142,7 +142,7 @@ void SDL_IME_UpdateTextRect(const SDL_Rect *rect) } } -void SDL_IME_PumpEvents() +void SDL_IME_PumpEvents(void) { if (SDL_IME_PumpEvents_Real) { SDL_IME_PumpEvents_Real(); diff --git a/vs/sdl2/src/core/linux/SDL_ime.h b/vs/sdl2/src/core/linux/SDL_ime.h index 0c1e2d07ed3..0995ce5abe7 100644 --- a/vs/sdl2/src/core/linux/SDL_ime.h +++ b/vs/sdl2/src/core/linux/SDL_ime.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/linux/SDL_sandbox.c b/vs/sdl2/src/core/linux/SDL_sandbox.c index e93e1830156..d4e036099c0 100644 --- a/vs/sdl2/src/core/linux/SDL_sandbox.c +++ b/vs/sdl2/src/core/linux/SDL_sandbox.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga Copyright (C) 2022 Collabora Ltd. This software is provided 'as-is', without any express or implied diff --git a/vs/sdl2/src/core/linux/SDL_sandbox.h b/vs/sdl2/src/core/linux/SDL_sandbox.h index 4e66918067f..dc2fd478e0e 100644 --- a/vs/sdl2/src/core/linux/SDL_sandbox.h +++ b/vs/sdl2/src/core/linux/SDL_sandbox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga Copyright (C) 2022 Collabora Ltd. This software is provided 'as-is', without any express or implied diff --git a/vs/sdl2/src/core/linux/SDL_threadprio.c b/vs/sdl2/src/core/linux/SDL_threadprio.c index 80d448e4726..fca20332097 100644 --- a/vs/sdl2/src/core/linux/SDL_threadprio.c +++ b/vs/sdl2/src/core/linux/SDL_threadprio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -79,7 +79,7 @@ static SDL_bool realtime_portal_supported(DBusConnection *conn) "RTTimeUSecMax", DBUS_TYPE_INT64, &res); } -static void set_rtkit_interface() +static void set_rtkit_interface(void) { SDL_DBusContext *dbus = SDL_DBus_GetContext(); @@ -108,7 +108,7 @@ static DBusConnection *get_rtkit_dbus_connection() return NULL; } -static void rtkit_initialize() +static void rtkit_initialize(void) { DBusConnection *dbus_conn; @@ -134,7 +134,7 @@ static void rtkit_initialize() } } -static SDL_bool rtkit_initialize_realtime_thread() +static SDL_bool rtkit_initialize_realtime_thread(void) { // Following is an excerpt from rtkit README that outlines the requirements // a thread must meet before making rtkit requests: diff --git a/vs/sdl2/src/core/linux/SDL_udev.c b/vs/sdl2/src/core/linux/SDL_udev.c index 5bdfc0db819..6c0fc14da22 100644 --- a/vs/sdl2/src/core/linux/SDL_udev.c +++ b/vs/sdl2/src/core/linux/SDL_udev.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -424,9 +424,12 @@ static int device_class(struct udev_device *dev) } val = _this->syms.udev_device_get_property_value(dev, "ID_INPUT_ACCELEROMETER"); - if (SDL_GetHintBoolean(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, SDL_TRUE) && - val && SDL_strcmp(val, "1") == 0) { - devclass |= SDL_UDEV_DEVICE_JOYSTICK; + if (val && SDL_strcmp(val, "1") == 0) { + if (SDL_GetHintBoolean(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, SDL_FALSE)) { + devclass |= SDL_UDEV_DEVICE_JOYSTICK; + } else { + devclass |= SDL_UDEV_DEVICE_ACCELEROMETER; + } } val = _this->syms.udev_device_get_property_value(dev, "ID_INPUT_MOUSE"); diff --git a/vs/sdl2/src/core/linux/SDL_udev.h b/vs/sdl2/src/core/linux/SDL_udev.h index 1489a852b4c..85a563cdd7b 100644 --- a/vs/sdl2/src/core/linux/SDL_udev.h +++ b/vs/sdl2/src/core/linux/SDL_udev.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/openbsd/SDL_wscons.h b/vs/sdl2/src/core/openbsd/SDL_wscons.h index 40e102d0055..201aeca799e 100644 --- a/vs/sdl2/src/core/openbsd/SDL_wscons.h +++ b/vs/sdl2/src/core/openbsd/SDL_wscons.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/openbsd/SDL_wscons_kbd.c b/vs/sdl2/src/core/openbsd/SDL_wscons_kbd.c index 975ba823631..1bee37ef61a 100644 --- a/vs/sdl2/src/core/openbsd/SDL_wscons_kbd.c +++ b/vs/sdl2/src/core/openbsd/SDL_wscons_kbd.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -449,7 +449,7 @@ static SDL_WSCONS_input_data *SDL_WSCONS_Init_Keyboard(const char *dev) return input; } -void SDL_WSCONS_Init() +void SDL_WSCONS_Init(void) { inputs[0] = SDL_WSCONS_Init_Keyboard("/dev/wskbd0"); inputs[1] = SDL_WSCONS_Init_Keyboard("/dev/wskbd1"); @@ -460,7 +460,7 @@ void SDL_WSCONS_Init() return; } -void SDL_WSCONS_Quit() +void SDL_WSCONS_Quit(void) { int i = 0; SDL_WSCONS_input_data *input = NULL; @@ -921,7 +921,7 @@ static void updateKeyboard(SDL_WSCONS_input_data *input) } } -void SDL_WSCONS_PumpEvents() +void SDL_WSCONS_PumpEvents(void) { int i = 0; for (i = 0; i < 4; i++) { diff --git a/vs/sdl2/src/core/openbsd/SDL_wscons_mouse.c b/vs/sdl2/src/core/openbsd/SDL_wscons_mouse.c index 5a8664c0358..8b04634fbb4 100644 --- a/vs/sdl2/src/core/openbsd/SDL_wscons_mouse.c +++ b/vs/sdl2/src/core/openbsd/SDL_wscons_mouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/os2/SDL_os2.c b/vs/sdl2/src/core/os2/SDL_os2.c index 76ad59d4a96..138652cac03 100644 --- a/vs/sdl2/src/core/os2/SDL_os2.c +++ b/vs/sdl2/src/core/os2/SDL_os2.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/os2/SDL_os2.h b/vs/sdl2/src/core/os2/SDL_os2.h index 9f88c70c4ff..4f90d7fc68c 100644 --- a/vs/sdl2/src/core/os2/SDL_os2.h +++ b/vs/sdl2/src/core/os2/SDL_os2.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/os2/geniconv/geniconv.c b/vs/sdl2/src/core/os2/geniconv/geniconv.c index df9c7c78dce..81ceaec9870 100644 --- a/vs/sdl2/src/core/os2/geniconv/geniconv.c +++ b/vs/sdl2/src/core/os2/geniconv/geniconv.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/os2/geniconv/geniconv.h b/vs/sdl2/src/core/os2/geniconv/geniconv.h index 463255b96cf..8483d0fe96f 100644 --- a/vs/sdl2/src/core/os2/geniconv/geniconv.h +++ b/vs/sdl2/src/core/os2/geniconv/geniconv.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/os2/geniconv/os2cp.c b/vs/sdl2/src/core/os2/geniconv/os2cp.c index 36d808eed2f..ee321102a01 100644 --- a/vs/sdl2/src/core/os2/geniconv/os2cp.c +++ b/vs/sdl2/src/core/os2/geniconv/os2cp.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/os2/geniconv/os2cp.h b/vs/sdl2/src/core/os2/geniconv/os2cp.h index 7024e9daf5c..9ea8b99cba8 100644 --- a/vs/sdl2/src/core/os2/geniconv/os2cp.h +++ b/vs/sdl2/src/core/os2/geniconv/os2cp.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/os2/geniconv/os2iconv.c b/vs/sdl2/src/core/os2/geniconv/os2iconv.c index 4c6a024e2f9..dd9fc5e3673 100644 --- a/vs/sdl2/src/core/os2/geniconv/os2iconv.c +++ b/vs/sdl2/src/core/os2/geniconv/os2iconv.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/os2/geniconv/sys2utf8.c b/vs/sdl2/src/core/os2/geniconv/sys2utf8.c index 75dd7dd6414..ec53d9f94ad 100644 --- a/vs/sdl2/src/core/os2/geniconv/sys2utf8.c +++ b/vs/sdl2/src/core/os2/geniconv/sys2utf8.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/os2/geniconv/test.c b/vs/sdl2/src/core/os2/geniconv/test.c index 2fe19acef31..251ca92bd2e 100644 --- a/vs/sdl2/src/core/os2/geniconv/test.c +++ b/vs/sdl2/src/core/os2/geniconv/test.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/unix/SDL_poll.c b/vs/sdl2/src/core/unix/SDL_poll.c index 1a34c57d2e0..9bcc8f0f8bb 100644 --- a/vs/sdl2/src/core/unix/SDL_poll.c +++ b/vs/sdl2/src/core/unix/SDL_poll.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/unix/SDL_poll.h b/vs/sdl2/src/core/unix/SDL_poll.h index 67e52ecdad1..045068efe12 100644 --- a/vs/sdl2/src/core/unix/SDL_poll.h +++ b/vs/sdl2/src/core/unix/SDL_poll.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/windows/SDL_directx.h b/vs/sdl2/src/core/windows/SDL_directx.h index 98c63ec376d..128df87ef1b 100644 --- a/vs/sdl2/src/core/windows/SDL_directx.h +++ b/vs/sdl2/src/core/windows/SDL_directx.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/windows/SDL_hid.c b/vs/sdl2/src/core/windows/SDL_hid.c index 60b9d14eb17..fddfba2ce83 100644 --- a/vs/sdl2/src/core/windows/SDL_hid.c +++ b/vs/sdl2/src/core/windows/SDL_hid.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/windows/SDL_hid.h b/vs/sdl2/src/core/windows/SDL_hid.h index f75ea24af4b..869190f9178 100644 --- a/vs/sdl2/src/core/windows/SDL_hid.h +++ b/vs/sdl2/src/core/windows/SDL_hid.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/windows/SDL_immdevice.c b/vs/sdl2/src/core/windows/SDL_immdevice.c index a8e8b458a74..d08e7b21070 100644 --- a/vs/sdl2/src/core/windows/SDL_immdevice.c +++ b/vs/sdl2/src/core/windows/SDL_immdevice.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/windows/SDL_immdevice.h b/vs/sdl2/src/core/windows/SDL_immdevice.h index b15b9033594..fc7708da0ef 100644 --- a/vs/sdl2/src/core/windows/SDL_immdevice.h +++ b/vs/sdl2/src/core/windows/SDL_immdevice.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/windows/SDL_windows.c b/vs/sdl2/src/core/windows/SDL_windows.c index 1da9418131b..c4e760be33b 100644 --- a/vs/sdl2/src/core/windows/SDL_windows.c +++ b/vs/sdl2/src/core/windows/SDL_windows.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -250,7 +250,7 @@ WASAPI doesn't need this. This is just for DirectSound/WinMM. char *WIN_LookupAudioDeviceName(const WCHAR *name, const GUID *guid) { #if defined(__WINRT__) || defined(__XBOXONE__) || defined(__XBOXSERIES__) - return WIN_StringToUTF8(name); /* No registry access on WinRT/UWP and Xbox, go with what we've got. */ + return WIN_StringToUTF8W(name); /* No registry access on WinRT/UWP and Xbox, go with what we've got. */ #else static const GUID nullguid = { 0 }; const unsigned char *ptr; diff --git a/vs/sdl2/src/core/windows/SDL_windows.h b/vs/sdl2/src/core/windows/SDL_windows.h index 2bd6257d1aa..33581a95a68 100644 --- a/vs/sdl2/src/core/windows/SDL_windows.h +++ b/vs/sdl2/src/core/windows/SDL_windows.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/windows/SDL_xinput.c b/vs/sdl2/src/core/windows/SDL_xinput.c index 053473e0cbb..0e39ded0ba2 100644 --- a/vs/sdl2/src/core/windows/SDL_xinput.c +++ b/vs/sdl2/src/core/windows/SDL_xinput.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/windows/SDL_xinput.h b/vs/sdl2/src/core/windows/SDL_xinput.h index efdb86282e1..0f6ab1dd248 100644 --- a/vs/sdl2/src/core/windows/SDL_xinput.h +++ b/vs/sdl2/src/core/windows/SDL_xinput.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/winrt/SDL_winrtapp_common.cpp b/vs/sdl2/src/core/winrt/SDL_winrtapp_common.cpp index 9d164923743..dfd1ac83e10 100644 --- a/vs/sdl2/src/core/winrt/SDL_winrtapp_common.cpp +++ b/vs/sdl2/src/core/winrt/SDL_winrtapp_common.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/winrt/SDL_winrtapp_common.h b/vs/sdl2/src/core/winrt/SDL_winrtapp_common.h index fdc8294da94..3789f0784af 100644 --- a/vs/sdl2/src/core/winrt/SDL_winrtapp_common.h +++ b/vs/sdl2/src/core/winrt/SDL_winrtapp_common.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/winrt/SDL_winrtapp_direct3d.cpp b/vs/sdl2/src/core/winrt/SDL_winrtapp_direct3d.cpp index 0115c5da484..04c655dda94 100644 --- a/vs/sdl2/src/core/winrt/SDL_winrtapp_direct3d.cpp +++ b/vs/sdl2/src/core/winrt/SDL_winrtapp_direct3d.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/winrt/SDL_winrtapp_direct3d.h b/vs/sdl2/src/core/winrt/SDL_winrtapp_direct3d.h index fcd6ab791c8..c4bfd1d4619 100644 --- a/vs/sdl2/src/core/winrt/SDL_winrtapp_direct3d.h +++ b/vs/sdl2/src/core/winrt/SDL_winrtapp_direct3d.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/winrt/SDL_winrtapp_xaml.cpp b/vs/sdl2/src/core/winrt/SDL_winrtapp_xaml.cpp index 9174f0d23cd..361c8329abd 100644 --- a/vs/sdl2/src/core/winrt/SDL_winrtapp_xaml.cpp +++ b/vs/sdl2/src/core/winrt/SDL_winrtapp_xaml.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/core/winrt/SDL_winrtapp_xaml.h b/vs/sdl2/src/core/winrt/SDL_winrtapp_xaml.h index b41475383b4..39e46c9fa23 100644 --- a/vs/sdl2/src/core/winrt/SDL_winrtapp_xaml.h +++ b/vs/sdl2/src/core/winrt/SDL_winrtapp_xaml.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/cpuinfo/SDL_cpuinfo.c b/vs/sdl2/src/cpuinfo/SDL_cpuinfo.c index 34aa424eb37..b0e31531ba3 100644 --- a/vs/sdl2/src/cpuinfo/SDL_cpuinfo.c +++ b/vs/sdl2/src/cpuinfo/SDL_cpuinfo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -85,6 +85,10 @@ #endif #endif +#if defined (__FreeBSD__) +#include +#endif + #if defined(__ANDROID__) && defined(__arm__) && !defined(HAVE_GETAUXVAL) #include #endif @@ -123,7 +127,11 @@ #define CPU_CFG2_LSX (1 << 6) #define CPU_CFG2_LASX (1 << 7) -#if defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP) && !defined(__MACOSX__) && !defined(__OpenBSD__) && !defined(__FreeBSD__) +#if !defined(SDL_CPUINFO_DISABLED) && \ + !((defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))) || (defined(__OpenBSD__) && defined(__powerpc__))) && \ + !(defined(__FreeBSD__) && defined(__powerpc__)) && \ + !(defined(__LINUX__) && defined(__powerpc__) && defined(HAVE_GETAUXVAL)) && \ + defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP) /* This is the brute force way of detecting instruction sets... the idea is borrowed from the libmpeg2 library - thanks! */ @@ -352,6 +360,8 @@ static int CPU_haveAltiVec(void) elf_aux_info(AT_HWCAP, &cpufeatures, sizeof(cpufeatures)); altivec = cpufeatures & PPC_FEATURE_HAS_ALTIVEC; return altivec; +#elif defined(__LINUX__) && defined(__powerpc__) && defined(HAVE_GETAUXVAL) + altivec = getauxval(AT_HWCAP) & PPC_FEATURE_HAS_ALTIVEC; #elif defined(SDL_ALTIVEC_BLITTERS) && defined(HAVE_SETJMP) void (*handler)(int sig); handler = signal(SIGILL, illegal_instruction); @@ -891,6 +901,7 @@ static const char *SDL_GetCPUName(void) int SDL_GetCPUCacheLineSize(void) { const char *cpuType = SDL_GetCPUType(); + int cacheline_size = SDL_CACHELINE_SIZE; /* initial guess */ int a, b, c, d; (void)a; (void)b; @@ -898,14 +909,34 @@ int SDL_GetCPUCacheLineSize(void) (void)d; if (SDL_strcmp(cpuType, "GenuineIntel") == 0 || SDL_strcmp(cpuType, "CentaurHauls") == 0 || SDL_strcmp(cpuType, " Shanghai ") == 0) { cpuid(0x00000001, a, b, c, d); - return ((b >> 8) & 0xff) * 8; + cacheline_size = ((b >> 8) & 0xff) * 8; } else if (SDL_strcmp(cpuType, "AuthenticAMD") == 0 || SDL_strcmp(cpuType, "HygonGenuine") == 0) { cpuid(0x80000005, a, b, c, d); - return c & 0xff; + cacheline_size = c & 0xff; } else { - /* Just make a guess here... */ - return SDL_CACHELINE_SIZE; +#if defined(HAVE_SYSCONF) && defined(_SC_LEVEL1_DCACHE_LINESIZE) + if ((cacheline_size = sysconf(_SC_LEVEL1_DCACHE_LINESIZE)) > 0) { + return cacheline_size; + } else { + cacheline_size = SDL_CACHELINE_SIZE; + } +#endif +#if defined(__LINUX__) + { + FILE *f = fopen("/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size", "r"); + if (f) { + int size; + if (fscanf(f, "%d", &size) == 1) { + cacheline_size = size; + } + fclose(f); + } + } +#elif defined(__FreeBSD__) && defined(CACHE_LINE_SIZE) + cacheline_size = CACHE_LINE_SIZE; +#endif } + return cacheline_size; } static Uint32 SDL_CPUFeatures = 0xFFFFFFFF; @@ -1239,7 +1270,7 @@ void SDL_SIMDFree(void *ptr) #include -int main() +int main(void) { printf("CPU count: %d\n", SDL_GetCPUCount()); printf("CPU type: %s\n", SDL_GetCPUType()); diff --git a/vs/sdl2/src/dynapi/SDL_dynapi.c b/vs/sdl2/src/dynapi/SDL_dynapi.c index e79f8b8ad77..64d32bf9a14 100644 --- a/vs/sdl2/src/dynapi/SDL_dynapi.c +++ b/vs/sdl2/src/dynapi/SDL_dynapi.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -440,10 +440,24 @@ extern SDL_NORETURN void SDL_ExitProcess(int exitcode); static void SDL_InitDynamicAPILocked(void) { - char *libname = SDL_getenv_REAL(SDL_DYNAMIC_API_ENVVAR); SDL_DYNAPI_ENTRYFN entry = NULL; /* funcs from here by default. */ SDL_bool use_internal = SDL_TRUE; + /* this can't use SDL_getenv_REAL, because it might allocate memory before the app can set their allocator */ +#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) + /* We've always used LoadLibraryA for this, so this has never worked with Unicode paths on Windows. Sorry. */ + char envbuf[512]; /* overflows will just report as environment variable being unset, but LoadLibraryA has a MAX_PATH of 260 anyhow, apparently. */ + const DWORD rc = GetEnvironmentVariableA(SDL_DYNAMIC_API_ENVVAR, envbuf, (DWORD) sizeof (envbuf)); + char *libname = ((rc != 0) && (rc < sizeof (envbuf))) ? envbuf : NULL; +#elif defined(__OS2__) + char * libname; + if (DosScanEnv(SDL_DYNAMIC_API_ENVVAR, &libname) != NO_ERROR) { + libname = NULL; + } +#else + char *libname = getenv(SDL_DYNAMIC_API_ENVVAR); +#endif + if (libname) { while (*libname && !entry) { char *ptr = libname; diff --git a/vs/sdl2/src/dynapi/SDL_dynapi.h b/vs/sdl2/src/dynapi/SDL_dynapi.h index 95b20aaefa2..b5c9cbbe338 100644 --- a/vs/sdl2/src/dynapi/SDL_dynapi.h +++ b/vs/sdl2/src/dynapi/SDL_dynapi.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/dynapi/SDL_dynapi_overrides.h b/vs/sdl2/src/dynapi/SDL_dynapi_overrides.h index 057f5aa59b9..68059cf724b 100644 --- a/vs/sdl2/src/dynapi/SDL_dynapi_overrides.h +++ b/vs/sdl2/src/dynapi/SDL_dynapi_overrides.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/dynapi/SDL_dynapi_procs.h b/vs/sdl2/src/dynapi/SDL_dynapi_procs.h index e98ec6e5147..f46ab80c077 100644 --- a/vs/sdl2/src/dynapi/SDL_dynapi_procs.h +++ b/vs/sdl2/src/dynapi/SDL_dynapi_procs.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -73,7 +73,7 @@ SDL_DYNAPI_PROC(IDirect3DDevice9*,SDL_RenderGetD3D9Device,(SDL_Renderer *a),(a), #endif #ifdef __IPHONEOS__ -SDL_DYNAPI_PROC(int,SDL_iPhoneSetAnimationCallback,(SDL_Window *a, int b, void (SDLCALL *c)(void *), void *d),(a,b,c,d),return) +SDL_DYNAPI_PROC(int,SDL_iPhoneSetAnimationCallback,(SDL_Window *a, int b, SDL_iOSAnimationCallback c, void *d),(a,b,c,d),return) SDL_DYNAPI_PROC(void,SDL_iPhoneSetEventPump,(SDL_bool a),(a),) #endif @@ -411,7 +411,7 @@ SDL_DYNAPI_PROC(void*,SDL_realloc,(void *a, size_t b),(a,b),return) SDL_DYNAPI_PROC(void,SDL_free,(void *a),(a),) SDL_DYNAPI_PROC(char*,SDL_getenv,(const char *a),(a),return) SDL_DYNAPI_PROC(int,SDL_setenv,(const char *a, const char *b, int c),(a,b,c),return) -SDL_DYNAPI_PROC(void,SDL_qsort,(void *a, size_t b, size_t c, int (SDLCALL *d)(const void *, const void *)),(a,b,c,d),) +SDL_DYNAPI_PROC(void,SDL_qsort,(void *a, size_t b, size_t c, SDL_CompareCallback d),(a,b,c,d),) SDL_DYNAPI_PROC(int,SDL_abs,(int a),(a),return) SDL_DYNAPI_PROC(int,SDL_isdigit,(int a),(a),return) SDL_DYNAPI_PROC(int,SDL_isspace,(int a),(a),return) @@ -511,7 +511,7 @@ SDL_DYNAPI_PROC(void,SDL_WaitThread,(SDL_Thread *a, int *b),(a,b),) SDL_DYNAPI_PROC(void,SDL_DetachThread,(SDL_Thread *a),(a),) SDL_DYNAPI_PROC(SDL_TLSID,SDL_TLSCreate,(void),(),return) SDL_DYNAPI_PROC(void*,SDL_TLSGet,(SDL_TLSID a),(a),return) -SDL_DYNAPI_PROC(int,SDL_TLSSet,(SDL_TLSID a, const void *b, void (SDLCALL *c)(void*)),(a,b,c),return) +SDL_DYNAPI_PROC(int,SDL_TLSSet,(SDL_TLSID a, const void *b, SDL_TLSDestructorCallback c),(a,b,c),return) SDL_DYNAPI_PROC(Uint32,SDL_GetTicks,(void),(),return) SDL_DYNAPI_PROC(Uint64,SDL_GetPerformanceCounter,(void),(),return) SDL_DYNAPI_PROC(Uint64,SDL_GetPerformanceFrequency,(void),(),return) @@ -939,7 +939,7 @@ SDL_DYNAPI_PROC(void,SDL_UnionFRect,(const SDL_FRect *a, const SDL_FRect *b, SDL SDL_DYNAPI_PROC(SDL_bool,SDL_EncloseFPoints,(const SDL_FPoint *a, int b, const SDL_FRect *c, SDL_FRect *d),(a,b,c,d),return) SDL_DYNAPI_PROC(SDL_bool,SDL_IntersectFRectAndLine,(const SDL_FRect *a, float *b, float *c, float *d, float *e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(SDL_Window*,SDL_RenderGetWindow,(SDL_Renderer *a),(a),return) -SDL_DYNAPI_PROC(void*,SDL_bsearch,(const void *a, const void *b, size_t c, size_t d, int (SDLCALL *e)(const void *, const void *)),(a,b,c,d,e),return) +SDL_DYNAPI_PROC(void*,SDL_bsearch,(const void *a, const void *b, size_t c, size_t d, SDL_CompareCallback e),(a,b,c,d,e),return) SDL_DYNAPI_PROC(const char*,SDL_GameControllerPathForIndex,(int a),(a),return) SDL_DYNAPI_PROC(const char*,SDL_GameControllerPath,(SDL_GameController *a),(a),return) SDL_DYNAPI_PROC(const char*,SDL_JoystickPathForIndex,(int a),(a),return) diff --git a/vs/sdl2/src/dynapi/gendynapi.pl b/vs/sdl2/src/dynapi/gendynapi.pl index dad2bc4878b..14c206fa01d 100755 --- a/vs/sdl2/src/dynapi/gendynapi.pl +++ b/vs/sdl2/src/dynapi/gendynapi.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w # Simple DirectMedia Layer -# Copyright (C) 1997-2024 Sam Lantinga +# Copyright (C) 1997-2025 Sam Lantinga # # This software is provided 'as-is', without any express or implied # warranty. In no event will the authors be held liable for any damages @@ -50,8 +50,13 @@ open(SDL_DYNAPI_OVERRIDES_H, '>>', $sdl_dynapi_overrides_h) or die("Can't open $sdl_dynapi_overrides_h: $!\n"); open(SDL2_EXPORTS, '>>', $sdl2_exports) or die("Can't open $sdl2_exports: $!\n"); +# Ordered for reproducible builds opendir(HEADERS, 'include') or die("Can't open include dir: $!\n"); -while (my $d = readdir(HEADERS)) { +my @entries = readdir(HEADERS); +closedir(HEADERS); +# Sort the entries +@entries = sort @entries; +foreach my $d (@entries) { next if not $d =~ /\.h\Z/; my $header = "include/$d"; open(HEADER, '<', $header) or die("Can't open $header: $!\n"); @@ -143,8 +148,6 @@ close(HEADER); } -closedir(HEADERS); - close(SDL_DYNAPI_PROCS_H); close(SDL_DYNAPI_OVERRIDES_H); close(SDL2_EXPORTS); diff --git a/vs/sdl2/src/events/SDL_clipboardevents.c b/vs/sdl2/src/events/SDL_clipboardevents.c index 68b9a76366a..2789303b6c4 100644 --- a/vs/sdl2/src/events/SDL_clipboardevents.c +++ b/vs/sdl2/src/events/SDL_clipboardevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_clipboardevents_c.h b/vs/sdl2/src/events/SDL_clipboardevents_c.h index 77e2e42e43e..116ba997b68 100644 --- a/vs/sdl2/src/events/SDL_clipboardevents_c.h +++ b/vs/sdl2/src/events/SDL_clipboardevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_displayevents.c b/vs/sdl2/src/events/SDL_displayevents.c index 9777d5d7a2d..36bf19fbda9 100644 --- a/vs/sdl2/src/events/SDL_displayevents.c +++ b/vs/sdl2/src/events/SDL_displayevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_displayevents_c.h b/vs/sdl2/src/events/SDL_displayevents_c.h index d2e2b57648e..99058c28541 100644 --- a/vs/sdl2/src/events/SDL_displayevents_c.h +++ b/vs/sdl2/src/events/SDL_displayevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_dropevents.c b/vs/sdl2/src/events/SDL_dropevents.c index 7c7cc560725..a7a9a981f72 100644 --- a/vs/sdl2/src/events/SDL_dropevents.c +++ b/vs/sdl2/src/events/SDL_dropevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_dropevents_c.h b/vs/sdl2/src/events/SDL_dropevents_c.h index 83177a8757c..5bdd32fd7a7 100644 --- a/vs/sdl2/src/events/SDL_dropevents_c.h +++ b/vs/sdl2/src/events/SDL_dropevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_events.c b/vs/sdl2/src/events/SDL_events.c index b432703b4d4..271e2504b94 100644 --- a/vs/sdl2/src/events/SDL_events.c +++ b/vs/sdl2/src/events/SDL_events.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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,8 +37,11 @@ /* An arbitrary limit so we don't have unbounded growth */ #define SDL_MAX_QUEUED_EVENTS 65535 -/* Determines how often we wake to call SDL_PumpEvents() in SDL_WaitEventTimeout_Device() */ -#define PERIODIC_POLL_INTERVAL_MS 3000 +/* Determines how often we pump events if joystick or sensor subsystems are active */ +#define ENUMERATION_POLL_INTERVAL_MS 3000 + +/* Determines how often to pump events if joysticks or sensors are actively being read */ +#define EVENT_POLL_INTERVAL_MS 1 typedef struct SDL_EventWatcher { @@ -735,21 +738,17 @@ static void SDL_CutEvent(SDL_EventEntry *entry) static int SDL_SendWakeupEvent(void) { + SDL_Window *wakeup_window; SDL_VideoDevice *_this = SDL_GetVideoDevice(); if (_this == NULL || !_this->SendWakeupEvent) { return 0; } - SDL_LockMutex(_this->wakeup_lock); - { - if (_this->wakeup_window) { - _this->SendWakeupEvent(_this, _this->wakeup_window); - - /* No more wakeup events needed until we enter a new wait */ - _this->wakeup_window = NULL; - } + /* We only want to do this once while waiting for an event, so set it to NULL atomically here */ + wakeup_window = (SDL_Window *)SDL_AtomicSetPtr(&_this->wakeup_window, NULL); + if (wakeup_window) { + _this->SendWakeupEvent(_this, wakeup_window); } - SDL_UnlockMutex(_this->wakeup_lock); return 0; } @@ -960,27 +959,41 @@ int SDL_PollEvent(SDL_Event *event) return SDL_WaitEventTimeout(event, 0); } -static SDL_bool SDL_events_need_periodic_poll(void) +static Sint16 SDL_events_get_polling_interval(void) { - SDL_bool need_periodic_poll = SDL_FALSE; + Sint16 poll_interval = SDL_MAX_SINT16; #ifndef SDL_JOYSTICK_DISABLED - need_periodic_poll = - SDL_WasInit(SDL_INIT_JOYSTICK) && SDL_update_joysticks; + if (SDL_WasInit(SDL_INIT_JOYSTICK) && SDL_update_joysticks) { + if (SDL_NumJoysticks() > 0) { + /* If we have joysticks open, we need to poll rapidly for events */ + poll_interval = SDL_min(poll_interval, EVENT_POLL_INTERVAL_MS); + } else { + /* If not, just poll every few seconds to enumerate new joysticks */ + poll_interval = SDL_min(poll_interval, ENUMERATION_POLL_INTERVAL_MS); + } + } #endif #ifndef SDL_SENSOR_DISABLED - need_periodic_poll = need_periodic_poll || - (SDL_WasInit(SDL_INIT_SENSOR) && SDL_update_sensors); + if (SDL_WasInit(SDL_INIT_SENSOR) && SDL_update_sensors) { + if (SDL_NumSensors() > 0) { + /* If we have sensors open, we need to poll rapidly for events */ + poll_interval = SDL_min(poll_interval, EVENT_POLL_INTERVAL_MS); + } else { + /* If not, just poll every few seconds to enumerate new sensors */ + poll_interval = SDL_min(poll_interval, ENUMERATION_POLL_INTERVAL_MS); + } + } #endif - return need_periodic_poll; + return poll_interval; } static int SDL_WaitEventTimeout_Device(_THIS, SDL_Window *wakeup_window, SDL_Event *event, Uint32 start, int timeout) { int loop_timeout = timeout; - SDL_bool need_periodic_poll = SDL_events_need_periodic_poll(); + Sint16 poll_interval = SDL_events_get_polling_interval(); for (;;) { /* Pump events on entry and each time we wake to ensure: @@ -992,18 +1005,7 @@ static int SDL_WaitEventTimeout_Device(_THIS, SDL_Window *wakeup_window, SDL_Eve int status; SDL_PumpEventsInternal(SDL_TRUE); - SDL_LockMutex(_this->wakeup_lock); - { - status = SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT); - /* If status == 0 we are going to block so wakeup will be needed. */ - if (status == 0) { - _this->wakeup_window = wakeup_window; - } else { - _this->wakeup_window = NULL; - } - } - SDL_UnlockMutex(_this->wakeup_lock); - + status = SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT); if (status < 0) { /* Got an error: return */ break; @@ -1016,23 +1018,24 @@ static int SDL_WaitEventTimeout_Device(_THIS, SDL_Window *wakeup_window, SDL_Eve if (timeout > 0) { Uint32 elapsed = SDL_GetTicks() - start; if (elapsed >= (Uint32)timeout) { - /* Set wakeup_window to NULL without holding the lock. */ - _this->wakeup_window = NULL; return 0; } loop_timeout = (int)((Uint32)timeout - elapsed); } - if (need_periodic_poll) { + + /* Adjust the timeout for any polling requirements we currently have. */ + if (poll_interval != SDL_MAX_SINT16) { if (loop_timeout >= 0) { - loop_timeout = SDL_min(loop_timeout, PERIODIC_POLL_INTERVAL_MS); + loop_timeout = SDL_min(loop_timeout, poll_interval); } else { - loop_timeout = PERIODIC_POLL_INTERVAL_MS; + loop_timeout = poll_interval; } } + + SDL_AtomicSetPtr(&_this->wakeup_window, wakeup_window); status = _this->WaitEventTimeout(_this, loop_timeout); - /* Set wakeup_window to NULL without holding the lock. */ - _this->wakeup_window = NULL; - if (status == 0 && need_periodic_poll && loop_timeout == PERIODIC_POLL_INTERVAL_MS) { + SDL_AtomicSetPtr(&_this->wakeup_window, NULL); + if (status == 0 && poll_interval != SDL_MAX_SINT16 && loop_timeout == poll_interval) { /* We may have woken up to poll. Try again */ continue; } else if (status <= 0) { @@ -1045,25 +1048,6 @@ static int SDL_WaitEventTimeout_Device(_THIS, SDL_Window *wakeup_window, SDL_Eve return 0; } -static SDL_bool SDL_events_need_polling(void) -{ - SDL_bool need_polling = SDL_FALSE; - -#ifndef SDL_JOYSTICK_DISABLED - need_polling = - SDL_WasInit(SDL_INIT_JOYSTICK) && - SDL_update_joysticks && - (SDL_NumJoysticks() > 0); -#endif - -#ifndef SDL_SENSOR_DISABLED - need_polling = need_polling || - (SDL_WasInit(SDL_INIT_SENSOR) && SDL_update_sensors && (SDL_NumSensors() > 0)); -#endif - - return need_polling; -} - static SDL_Window *SDL_find_active_window(SDL_VideoDevice *_this) { SDL_Window *window; @@ -1136,7 +1120,7 @@ int SDL_WaitEventTimeout(SDL_Event *event, int timeout) expiration = 0; } - if (_this && _this->WaitEventTimeout && _this->SendWakeupEvent && !SDL_events_need_polling()) { + if (_this && _this->WaitEventTimeout && _this->SendWakeupEvent) { /* Look if a shown window is available to send the wakeup event. */ wakeup_window = SDL_find_active_window(_this); if (wakeup_window) { @@ -1160,7 +1144,7 @@ int SDL_WaitEventTimeout(SDL_Event *event, int timeout) /* Timeout expired and no events */ return 0; } - SDL_Delay(1); + SDL_Delay(EVENT_POLL_INTERVAL_MS); break; default: /* Has events */ @@ -1317,7 +1301,7 @@ Uint8 SDL_EventState(Uint32 type, int state) Uint8 lo = (type & 0xff); if (SDL_disabled_events[hi] && - (SDL_disabled_events[hi]->bits[lo / 32] & (1 << (lo & 31)))) { + (SDL_disabled_events[hi]->bits[lo / 32] & (1U << (lo & 31)))) { current_state = SDL_DISABLE; } else { current_state = SDL_ENABLE; @@ -1331,11 +1315,11 @@ Uint8 SDL_EventState(Uint32 type, int state) } /* Out of memory, nothing we can do... */ if (SDL_disabled_events[hi]) { - SDL_disabled_events[hi]->bits[lo / 32] |= (1 << (lo & 31)); + SDL_disabled_events[hi]->bits[lo / 32] |= (1U << (lo & 31)); SDL_FlushEvent(type); } } else { // state == SDL_ENABLE - SDL_disabled_events[hi]->bits[lo / 32] &= ~(1 << (lo & 31)); + SDL_disabled_events[hi]->bits[lo / 32] &= ~(1U << (lo & 31)); } #ifndef SDL_JOYSTICK_DISABLED diff --git a/vs/sdl2/src/events/SDL_events_c.h b/vs/sdl2/src/events/SDL_events_c.h index 6a9cf4ce637..572734ecd08 100644 --- a/vs/sdl2/src/events/SDL_events_c.h +++ b/vs/sdl2/src/events/SDL_events_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_gesture.c b/vs/sdl2/src/events/SDL_gesture.c index 63362c0f6af..628743154d9 100644 --- a/vs/sdl2/src/events/SDL_gesture.c +++ b/vs/sdl2/src/events/SDL_gesture.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_gesture_c.h b/vs/sdl2/src/events/SDL_gesture_c.h index 04320d52550..b6f450b2049 100644 --- a/vs/sdl2/src/events/SDL_gesture_c.h +++ b/vs/sdl2/src/events/SDL_gesture_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_keyboard.c b/vs/sdl2/src/events/SDL_keyboard.c index 58a95c907b4..6b3e9de6c89 100644 --- a/vs/sdl2/src/events/SDL_keyboard.c +++ b/vs/sdl2/src/events/SDL_keyboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_keyboard_c.h b/vs/sdl2/src/events/SDL_keyboard_c.h index 4c5cd2f8b23..bbad0867632 100644 --- a/vs/sdl2/src/events/SDL_keyboard_c.h +++ b/vs/sdl2/src/events/SDL_keyboard_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_keysym_to_scancode.c b/vs/sdl2/src/events/SDL_keysym_to_scancode.c index ddf4ae3fb2b..7bd91c0b86e 100644 --- a/vs/sdl2/src/events/SDL_keysym_to_scancode.c +++ b/vs/sdl2/src/events/SDL_keysym_to_scancode.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_keysym_to_scancode_c.h b/vs/sdl2/src/events/SDL_keysym_to_scancode_c.h index 11e2d370aca..e11dde08855 100644 --- a/vs/sdl2/src/events/SDL_keysym_to_scancode_c.h +++ b/vs/sdl2/src/events/SDL_keysym_to_scancode_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_mouse.c b/vs/sdl2/src/events/SDL_mouse.c index 431354f88b3..a9a89f63d82 100644 --- a/vs/sdl2/src/events/SDL_mouse.c +++ b/vs/sdl2/src/events/SDL_mouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -122,13 +122,13 @@ static void SDLCALL SDL_VitaTouchMouseDeviceChanged(void *userdata, const char * switch (*hint) { default: case '0': - mouse->vita_touch_mouse_device = 0; + mouse->vita_touch_mouse_device = 1; break; case '1': - mouse->vita_touch_mouse_device = 1; + mouse->vita_touch_mouse_device = 2; break; case '2': - mouse->vita_touch_mouse_device = 2; + mouse->vita_touch_mouse_device = 3; break; } } @@ -170,6 +170,13 @@ static void SDLCALL SDL_MouseRelativeWarpMotionChanged(void *userdata, const cha mouse->relative_mode_warp_motion = SDL_GetStringBoolean(hint, SDL_FALSE); } +static void SDLCALL SDL_MouseRelativeCursorVisibleChanged(void *userdata, const char *name, const char *oldValue, const char *hint) +{ + SDL_Mouse *mouse = (SDL_Mouse *)userdata; + + mouse->relative_mode_cursor_visible = SDL_GetStringBoolean(hint, SDL_FALSE); +} + /* Public functions */ int SDL_MousePreInit(void) { @@ -209,6 +216,9 @@ int SDL_MousePreInit(void) SDL_AddHintCallback(SDL_HINT_MOUSE_RELATIVE_WARP_MOTION, SDL_MouseRelativeWarpMotionChanged, mouse); + SDL_AddHintCallback(SDL_HINT_MOUSE_RELATIVE_CURSOR_VISIBLE, + SDL_MouseRelativeCursorVisibleChanged, mouse); + mouse->was_touch_mouse_events = SDL_FALSE; /* no touch to mouse movement event pending */ mouse->cursor_shown = SDL_TRUE; @@ -992,6 +1002,9 @@ void SDL_MouseQuit(void) SDL_DelHintCallback(SDL_HINT_MOUSE_RELATIVE_WARP_MOTION, SDL_MouseRelativeWarpMotionChanged, mouse); + + SDL_DelHintCallback(SDL_HINT_MOUSE_RELATIVE_CURSOR_VISIBLE, + SDL_MouseRelativeCursorVisibleChanged, mouse); } Uint32 SDL_GetMouseState(int *x, int *y) @@ -1412,7 +1425,7 @@ void SDL_SetCursor(SDL_Cursor *cursor) } } - if (cursor && mouse->cursor_shown && !mouse->relative_mode) { + if (cursor && mouse->cursor_shown && (!mouse->relative_mode || mouse->relative_mode_cursor_visible)) { if (mouse->ShowCursor) { mouse->ShowCursor(cursor); } diff --git a/vs/sdl2/src/events/SDL_mouse_c.h b/vs/sdl2/src/events/SDL_mouse_c.h index 4204f6201f7..e71fd8d28a8 100644 --- a/vs/sdl2/src/events/SDL_mouse_c.h +++ b/vs/sdl2/src/events/SDL_mouse_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -92,6 +92,7 @@ typedef struct SDL_bool relative_mode; SDL_bool relative_mode_warp; SDL_bool relative_mode_warp_motion; + SDL_bool relative_mode_cursor_visible; SDL_bool enable_normal_speed_scale; float normal_speed_scale; SDL_bool enable_relative_speed_scale; diff --git a/vs/sdl2/src/events/SDL_quit.c b/vs/sdl2/src/events/SDL_quit.c index cd629a927f8..b4234fc2185 100644 --- a/vs/sdl2/src/events/SDL_quit.c +++ b/vs/sdl2/src/events/SDL_quit.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_scancode_tables.c b/vs/sdl2/src/events/SDL_scancode_tables.c index db6d8619664..71147a5cae2 100644 --- a/vs/sdl2/src/events/SDL_scancode_tables.c +++ b/vs/sdl2/src/events/SDL_scancode_tables.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_scancode_tables_c.h b/vs/sdl2/src/events/SDL_scancode_tables_c.h index 481e7a59eeb..153c3c768dd 100644 --- a/vs/sdl2/src/events/SDL_scancode_tables_c.h +++ b/vs/sdl2/src/events/SDL_scancode_tables_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_touch.c b/vs/sdl2/src/events/SDL_touch.c index b5ec77bd554..ea32b086608 100644 --- a/vs/sdl2/src/events/SDL_touch.c +++ b/vs/sdl2/src/events/SDL_touch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -252,7 +252,7 @@ int SDL_SendTouch(SDL_TouchID id, SDL_FingerID fingerid, SDL_Window *window, /* SDL_HINT_VITA_TOUCH_MOUSE_DEVICE: controlling which touchpad should generate synthetic mouse events, PSVita-only */ { #if defined(__vita__) - if (mouse->touch_mouse_events && ((mouse->vita_touch_mouse_device == id) || (mouse->vita_touch_mouse_device == 2))) { + if (mouse->touch_mouse_events && ((mouse->vita_touch_mouse_device == id) || (mouse->vita_touch_mouse_device == 3))) { #else if (mouse->touch_mouse_events) { #endif diff --git a/vs/sdl2/src/events/SDL_touch_c.h b/vs/sdl2/src/events/SDL_touch_c.h index 85f1f90c8e6..290222837c3 100644 --- a/vs/sdl2/src/events/SDL_touch_c.h +++ b/vs/sdl2/src/events/SDL_touch_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_windowevents.c b/vs/sdl2/src/events/SDL_windowevents.c index 2ef1e745e62..9e4f0f36360 100644 --- a/vs/sdl2/src/events/SDL_windowevents.c +++ b/vs/sdl2/src/events/SDL_windowevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/SDL_windowevents_c.h b/vs/sdl2/src/events/SDL_windowevents_c.h index cf7fc3a77e8..3ae1d34c920 100644 --- a/vs/sdl2/src/events/SDL_windowevents_c.h +++ b/vs/sdl2/src/events/SDL_windowevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/blank_cursor.h b/vs/sdl2/src/events/blank_cursor.h index 1c317b712a5..597d78ee9fa 100644 --- a/vs/sdl2/src/events/blank_cursor.h +++ b/vs/sdl2/src/events/blank_cursor.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/default_cursor.h b/vs/sdl2/src/events/default_cursor.h index 3eecf6c45f1..95ea8ec0451 100644 --- a/vs/sdl2/src/events/default_cursor.h +++ b/vs/sdl2/src/events/default_cursor.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/scancodes_ascii.h b/vs/sdl2/src/events/scancodes_ascii.h index a4a0ecca9f4..0e28b54e4bb 100644 --- a/vs/sdl2/src/events/scancodes_ascii.h +++ b/vs/sdl2/src/events/scancodes_ascii.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/scancodes_darwin.h b/vs/sdl2/src/events/scancodes_darwin.h index de23de4de07..6564bc05c89 100644 --- a/vs/sdl2/src/events/scancodes_darwin.h +++ b/vs/sdl2/src/events/scancodes_darwin.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/scancodes_linux.h b/vs/sdl2/src/events/scancodes_linux.h index 03d84a98293..f505db12d62 100644 --- a/vs/sdl2/src/events/scancodes_linux.h +++ b/vs/sdl2/src/events/scancodes_linux.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/scancodes_windows.h b/vs/sdl2/src/events/scancodes_windows.h index e902e760072..84a3713fda1 100644 --- a/vs/sdl2/src/events/scancodes_windows.h +++ b/vs/sdl2/src/events/scancodes_windows.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/events/scancodes_xfree86.h b/vs/sdl2/src/events/scancodes_xfree86.h index 20d02fe58f7..e751cb499a1 100644 --- a/vs/sdl2/src/events/scancodes_xfree86.h +++ b/vs/sdl2/src/events/scancodes_xfree86.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/file/SDL_rwops.c b/vs/sdl2/src/file/SDL_rwops.c index bf47ba7110b..ae20002a7a2 100644 --- a/vs/sdl2/src/file/SDL_rwops.c +++ b/vs/sdl2/src/file/SDL_rwops.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -36,6 +36,7 @@ #ifdef HAVE_STDIO_H #include +#include #include #endif #ifdef HAVE_LIMITS_H @@ -368,6 +369,7 @@ stdio_size(SDL_RWops * context) static Sint64 SDLCALL stdio_seek(SDL_RWops *context, Sint64 offset, int whence) { int stdiowhence; + SDL_bool is_noop; switch (whence) { case RW_SEEK_SET: @@ -389,7 +391,10 @@ static Sint64 SDLCALL stdio_seek(SDL_RWops *context, Sint64 offset, int whence) } #endif - if (fseek(context->hidden.stdio.fp, (fseek_off_t)offset, stdiowhence) == 0) { + /* don't make a possibly-costly API call for the noop seek from SDL_RWtell */ + is_noop = (whence == RW_SEEK_CUR) && (offset == 0); + + if (is_noop || fseek(context->hidden.stdio.fp, (fseek_off_t)offset, stdiowhence) == 0) { Sint64 pos = ftell(context->hidden.stdio.fp); if (pos < 0) { return SDL_SetError("Couldn't get stream offset"); @@ -532,7 +537,7 @@ static SDL_bool IsRegularFileOrPipe(FILE *f) !((st.st_mode & _S_IFMT) == _S_IFREG || (st.st_mode & _S_IFMT) == _S_IFIFO)) { return SDL_FALSE; } - #else + #elif !defined __EMSCRIPTEN__ struct stat st; if (fstat(fileno(f), &st) < 0 || !(S_ISREG(st.st_mode) || S_ISFIFO(st.st_mode))) { return SDL_FALSE; @@ -632,7 +637,7 @@ SDL_RWops *SDL_RWFromFile(const char *file, const char *mode) FILE *fp = fopen(file, mode); #endif if (!fp) { - SDL_SetError("Couldn't open %s", file); + SDL_SetError("Couldn't open %s: %s", file, strerror(errno)); } else if (!IsRegularFileOrPipe(fp)) { fclose(fp); fp = NULL; diff --git a/vs/sdl2/src/file/cocoa/SDL_rwopsbundlesupport.h b/vs/sdl2/src/file/cocoa/SDL_rwopsbundlesupport.h index c57ce452930..2cb9331434b 100644 --- a/vs/sdl2/src/file/cocoa/SDL_rwopsbundlesupport.h +++ b/vs/sdl2/src/file/cocoa/SDL_rwopsbundlesupport.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/file/cocoa/SDL_rwopsbundlesupport.m b/vs/sdl2/src/file/cocoa/SDL_rwopsbundlesupport.m index 1fdce060180..dbfc5a5b845 100644 --- a/vs/sdl2/src/file/cocoa/SDL_rwopsbundlesupport.m +++ b/vs/sdl2/src/file/cocoa/SDL_rwopsbundlesupport.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,6 +24,7 @@ #import #include "SDL_rwopsbundlesupport.h" +#include "SDL_hints.h" /* For proper OS X applications, the resources are contained inside the application bundle. So the strategy is to first check the application bundle for the file, then fallback to the current working directory. @@ -41,6 +42,11 @@ NSString *ns_string_file_component; NSString *full_path_with_file_to_try; + /* if the app doesn't want this app bundle behavior, just use the path as-is. */ + if (!SDL_GetHintBoolean(SDL_HINT_APPLE_RWFROMFILE_USE_RESOURCES, SDL_TRUE)) { + return fopen(file, mode); + } + /* If the file mode is writable, skip all the bundle stuff because generally the bundle is read-only. */ if (SDL_strchr(mode, 'r') == NULL) { return fopen(file, mode); diff --git a/vs/sdl2/src/file/n3ds/SDL_rwopsromfs.c b/vs/sdl2/src/file/n3ds/SDL_rwopsromfs.c index 9ca81a1b842..72ab031fc66 100644 --- a/vs/sdl2/src/file/n3ds/SDL_rwopsromfs.c +++ b/vs/sdl2/src/file/n3ds/SDL_rwopsromfs.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/file/n3ds/SDL_rwopsromfs.h b/vs/sdl2/src/file/n3ds/SDL_rwopsromfs.h index 1ec1567377d..7ff212f7113 100644 --- a/vs/sdl2/src/file/n3ds/SDL_rwopsromfs.h +++ b/vs/sdl2/src/file/n3ds/SDL_rwopsromfs.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/android/SDL_sysfilesystem.c b/vs/sdl2/src/filesystem/android/SDL_sysfilesystem.c index 5e372987b86..a2296a44a65 100644 --- a/vs/sdl2/src/filesystem/android/SDL_sysfilesystem.c +++ b/vs/sdl2/src/filesystem/android/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/cocoa/SDL_sysfilesystem.m b/vs/sdl2/src/filesystem/cocoa/SDL_sysfilesystem.m index 3d48ef6aa37..f3fce9c62fa 100644 --- a/vs/sdl2/src/filesystem/cocoa/SDL_sysfilesystem.m +++ b/vs/sdl2/src/filesystem/cocoa/SDL_sysfilesystem.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/dummy/SDL_sysfilesystem.c b/vs/sdl2/src/filesystem/dummy/SDL_sysfilesystem.c index 0243cce6d6e..aa09063d0b3 100644 --- a/vs/sdl2/src/filesystem/dummy/SDL_sysfilesystem.c +++ b/vs/sdl2/src/filesystem/dummy/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/emscripten/SDL_sysfilesystem.c b/vs/sdl2/src/filesystem/emscripten/SDL_sysfilesystem.c index 31639720932..6d40e24d35b 100644 --- a/vs/sdl2/src/filesystem/emscripten/SDL_sysfilesystem.c +++ b/vs/sdl2/src/filesystem/emscripten/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/gdk/SDL_sysfilesystem.cpp b/vs/sdl2/src/filesystem/gdk/SDL_sysfilesystem.cpp index 22cc9c2881d..202f02b28b6 100644 --- a/vs/sdl2/src/filesystem/gdk/SDL_sysfilesystem.cpp +++ b/vs/sdl2/src/filesystem/gdk/SDL_sysfilesystem.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/haiku/SDL_sysfilesystem.cc b/vs/sdl2/src/filesystem/haiku/SDL_sysfilesystem.cc index 5585c48c652..921b33979b0 100644 --- a/vs/sdl2/src/filesystem/haiku/SDL_sysfilesystem.cc +++ b/vs/sdl2/src/filesystem/haiku/SDL_sysfilesystem.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/n3ds/SDL_sysfilesystem.c b/vs/sdl2/src/filesystem/n3ds/SDL_sysfilesystem.c index fe46076216b..5fbbd51ff87 100644 --- a/vs/sdl2/src/filesystem/n3ds/SDL_sysfilesystem.c +++ b/vs/sdl2/src/filesystem/n3ds/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/nacl/SDL_sysfilesystem.c b/vs/sdl2/src/filesystem/nacl/SDL_sysfilesystem.c index 1ef34dd0c19..8d5faa9b3fc 100644 --- a/vs/sdl2/src/filesystem/nacl/SDL_sysfilesystem.c +++ b/vs/sdl2/src/filesystem/nacl/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/os2/SDL_sysfilesystem.c b/vs/sdl2/src/filesystem/os2/SDL_sysfilesystem.c index 4e9597f0ca9..99fda9e7fce 100644 --- a/vs/sdl2/src/filesystem/os2/SDL_sysfilesystem.c +++ b/vs/sdl2/src/filesystem/os2/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/ps2/SDL_sysfilesystem.c b/vs/sdl2/src/filesystem/ps2/SDL_sysfilesystem.c index 6b6446656ce..a71cd553e69 100644 --- a/vs/sdl2/src/filesystem/ps2/SDL_sysfilesystem.c +++ b/vs/sdl2/src/filesystem/ps2/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -33,16 +33,14 @@ char *SDL_GetBasePath(void) { - char *retval; + char *retval = NULL; size_t len; char cwd[FILENAME_MAX]; getcwd(cwd, sizeof(cwd)); - len = SDL_strlen(cwd) + 1; + len = SDL_strlen(cwd) + 2; retval = (char *)SDL_malloc(len); - if (retval) { - SDL_memcpy(retval, cwd, len); - } + SDL_snprintf(retval, len, "%s/", cwd); return retval; } diff --git a/vs/sdl2/src/filesystem/psp/SDL_sysfilesystem.c b/vs/sdl2/src/filesystem/psp/SDL_sysfilesystem.c index 7ed87e0eb62..392399e3bfb 100644 --- a/vs/sdl2/src/filesystem/psp/SDL_sysfilesystem.c +++ b/vs/sdl2/src/filesystem/psp/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/riscos/SDL_sysfilesystem.c b/vs/sdl2/src/filesystem/riscos/SDL_sysfilesystem.c index 4617895549c..e0ac0800434 100644 --- a/vs/sdl2/src/filesystem/riscos/SDL_sysfilesystem.c +++ b/vs/sdl2/src/filesystem/riscos/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/unix/SDL_sysfilesystem.c b/vs/sdl2/src/filesystem/unix/SDL_sysfilesystem.c index c69a99168ce..3f7533c4163 100644 --- a/vs/sdl2/src/filesystem/unix/SDL_sysfilesystem.c +++ b/vs/sdl2/src/filesystem/unix/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/vita/SDL_sysfilesystem.c b/vs/sdl2/src/filesystem/vita/SDL_sysfilesystem.c index eb7e159efb3..0ae693ff0bb 100644 --- a/vs/sdl2/src/filesystem/vita/SDL_sysfilesystem.c +++ b/vs/sdl2/src/filesystem/vita/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/windows/SDL_sysfilesystem.c b/vs/sdl2/src/filesystem/windows/SDL_sysfilesystem.c index a6532911757..c8aea903010 100644 --- a/vs/sdl2/src/filesystem/windows/SDL_sysfilesystem.c +++ b/vs/sdl2/src/filesystem/windows/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/filesystem/winrt/SDL_sysfilesystem.cpp b/vs/sdl2/src/filesystem/winrt/SDL_sysfilesystem.cpp index 85cfd190efc..43c3d835419 100644 --- a/vs/sdl2/src/filesystem/winrt/SDL_sysfilesystem.cpp +++ b/vs/sdl2/src/filesystem/winrt/SDL_sysfilesystem.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -115,7 +115,7 @@ SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType) return NULL; } - char *utf8Path = WIN_StringToUTF8(ucs2Path); + char *utf8Path = WIN_StringToUTF8W(ucs2Path); utf8Paths[pathType] = utf8Path; SDL_free(utf8Path); return utf8Paths[pathType].c_str(); @@ -181,13 +181,13 @@ SDL_GetPrefPath(const char *org, const char *app) } SDL_wcslcpy(path, srcPath, SDL_arraysize(path)); - worg = WIN_UTF8ToString(org); + worg = WIN_UTF8ToStringW(org); if (!worg) { SDL_OutOfMemory(); return NULL; } - wapp = WIN_UTF8ToString(app); + wapp = WIN_UTF8ToStringW(app); if (!wapp) { SDL_free(worg); SDL_OutOfMemory(); @@ -232,7 +232,7 @@ SDL_GetPrefPath(const char *org, const char *app) SDL_wcslcat(path, L"\\", new_wpath_len + 1); - retval = WIN_StringToUTF8(path); + retval = WIN_StringToUTF8W(path); return retval; } diff --git a/vs/sdl2/src/haptic/SDL_haptic.c b/vs/sdl2/src/haptic/SDL_haptic.c index 256d6677a4d..86510d50852 100644 --- a/vs/sdl2/src/haptic/SDL_haptic.c +++ b/vs/sdl2/src/haptic/SDL_haptic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,6 +23,85 @@ #include "SDL_syshaptic.h" #include "SDL_haptic_c.h" #include "../joystick/SDL_joystick_c.h" /* For SDL_PrivateJoystickValid */ +#include "SDL_hints.h" +#include "../SDL_hints_c.h" + +typedef struct SDL_Haptic_VIDPID_Naxes { + Uint16 vid; + Uint16 pid; + Uint16 naxes; +} SDL_Haptic_VIDPID_Naxes; + +static void SDL_HapticLoadAxesList(SDL_Haptic_VIDPID_Naxes **entries, int *num_entries) +{ + SDL_Haptic_VIDPID_Naxes entry; + const char *spot; + int length = 0; + + spot = SDL_GetHint(SDL_HINT_JOYSTICK_HAPTIC_AXES); + if (!spot) + return; + + while (SDL_sscanf(spot, "0x%hx/0x%hx/%hu%n", &entry.vid, &entry.pid, &entry.naxes, &length) == 3) { + SDL_assert(length > 0); + spot += length; + length = 0; + + if ((*num_entries % 8) == 0) { + int new_max = *num_entries + 8; + SDL_Haptic_VIDPID_Naxes *new_entries = + (SDL_Haptic_VIDPID_Naxes *)SDL_realloc(*entries, new_max * sizeof(**entries)); + + // Out of memory, go with what we have already + if (!new_entries) + break; + + *entries = new_entries; + } + (*entries)[(*num_entries)++] = entry; + + if (spot[0] == ',') + spot++; + } +} + +// /* Return -1 if not found */ +static int SDL_HapticNaxesListIndex(struct SDL_Haptic_VIDPID_Naxes *entries, int num_entries, Uint16 vid, Uint16 pid) +{ + int i; + if (!entries) + return -1; + + for (i = 0; i < num_entries; ++i) { + if (entries[i].vid == vid && entries[i].pid == pid) + return i; + } + + return -1; +} + +// Check if device needs a custom number of naxes +static int SDL_HapticGetNaxes(Uint16 vid, Uint16 pid) +{ + int num_entries = 0, index = 0, naxes = -1; + SDL_Haptic_VIDPID_Naxes *naxes_list = NULL; + + SDL_HapticLoadAxesList(&naxes_list, &num_entries); + if (!num_entries || !naxes_list) + return -1; + + // Perform "wildcard" pass + index = SDL_HapticNaxesListIndex(naxes_list, num_entries, 0xffff, 0xffff); + if (index >= 0) + naxes = naxes_list[index].naxes; + + index = SDL_HapticNaxesListIndex(naxes_list, num_entries, vid, pid); + if (index >= 0) + naxes = naxes_list[index].naxes; + + SDL_free(naxes_list); + return naxes; +} /* Global for SDL_windowshaptic.c */ #if defined(SDL_HAPTIC_DINPUT) || defined(SDL_HAPTIC_XINPUT) @@ -258,6 +337,8 @@ SDL_Haptic *SDL_HapticOpenFromJoystick(SDL_Joystick *joystick) { SDL_Haptic *haptic; SDL_Haptic *hapticlist; + int naxes, general_axes; + Uint16 vid, pid; /* Make sure there is room. */ if (SDL_NumHaptics() <= 0) { @@ -314,6 +395,18 @@ SDL_Haptic *SDL_HapticOpenFromJoystick(SDL_Joystick *joystick) } SDL_UnlockJoysticks(); + vid = SDL_JoystickGetVendor(joystick); + pid = SDL_JoystickGetProduct(joystick); + general_axes = SDL_JoystickNumAxes(joystick); + + naxes = SDL_HapticGetNaxes(vid, pid); + if (naxes > 0) + haptic->naxes = naxes; + + // Limit to the actual number of axes found on the device + if (general_axes >= 0 && naxes > general_axes) + haptic->naxes = general_axes; + /* Add haptic to list */ ++haptic->ref_count; /* Link the haptic in the list */ diff --git a/vs/sdl2/src/haptic/SDL_haptic_c.h b/vs/sdl2/src/haptic/SDL_haptic_c.h index a1b1ed7131e..44107a6538c 100644 --- a/vs/sdl2/src/haptic/SDL_haptic_c.h +++ b/vs/sdl2/src/haptic/SDL_haptic_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/haptic/SDL_syshaptic.h b/vs/sdl2/src/haptic/SDL_syshaptic.h index 31f37dde1ae..8f8abda26a4 100644 --- a/vs/sdl2/src/haptic/SDL_syshaptic.h +++ b/vs/sdl2/src/haptic/SDL_syshaptic.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/haptic/android/SDL_syshaptic.c b/vs/sdl2/src/haptic/android/SDL_syshaptic.c index 15fbdd2805b..b3cbf0112bc 100644 --- a/vs/sdl2/src/haptic/android/SDL_syshaptic.c +++ b/vs/sdl2/src/haptic/android/SDL_syshaptic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/haptic/darwin/SDL_syshaptic.c b/vs/sdl2/src/haptic/darwin/SDL_syshaptic.c index d33e4d6aa35..64b42921e5d 100644 --- a/vs/sdl2/src/haptic/darwin/SDL_syshaptic.c +++ b/vs/sdl2/src/haptic/darwin/SDL_syshaptic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -162,7 +162,11 @@ int SDL_SYS_HapticInit(void) } /* Now search I/O Registry for matching devices. */ +#if MAC_OS_X_VERSION_MIN_REQUIRED < 120000 + result = IOServiceGetMatchingServices(MACH_PORT_NULL, match, &iter); /* fixed for DOSBox-X (old macOS support) */ +#else result = IOServiceGetMatchingServices(kIOMainPortDefault, match, &iter); +#endif if (result != kIOReturnSuccess) { return SDL_SetError("Haptic: Couldn't create a HID object iterator."); } diff --git a/vs/sdl2/src/haptic/darwin/SDL_syshaptic_c.h b/vs/sdl2/src/haptic/darwin/SDL_syshaptic_c.h index 49b54bb2cc5..dfa1f95f631 100644 --- a/vs/sdl2/src/haptic/darwin/SDL_syshaptic_c.h +++ b/vs/sdl2/src/haptic/darwin/SDL_syshaptic_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/haptic/dummy/SDL_syshaptic.c b/vs/sdl2/src/haptic/dummy/SDL_syshaptic.c index 861aa6ed142..d8cdb0e87c5 100644 --- a/vs/sdl2/src/haptic/dummy/SDL_syshaptic.c +++ b/vs/sdl2/src/haptic/dummy/SDL_syshaptic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/haptic/linux/SDL_syshaptic.c b/vs/sdl2/src/haptic/linux/SDL_syshaptic.c index a21c118612c..3622e433ad7 100644 --- a/vs/sdl2/src/haptic/linux/SDL_syshaptic.c +++ b/vs/sdl2/src/haptic/linux/SDL_syshaptic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -812,7 +812,9 @@ static int SDL_SYS_ToFFEffect(struct ff_effect *dest, SDL_HapticEffect *src) dest->type = FF_FRICTION; } - dest->direction = 0; /* Handled by the condition-specifics. */ + if (SDL_SYS_ToDirection(&dest->direction, &condition->direction) == -1) { + return -1; + } /* Replay */ dest->replay.length = (condition->length == SDL_HAPTIC_INFINITY) ? 0 : CLAMP(condition->length); @@ -878,7 +880,7 @@ static int SDL_SYS_ToFFEffect(struct ff_effect *dest, SDL_HapticEffect *src) /* Header */ dest->type = FF_RUMBLE; - dest->direction = 0; + dest->direction = 0x4000; /* Replay */ dest->replay.length = (leftright->length == SDL_HAPTIC_INFINITY) ? 0 : CLAMP(leftright->length); diff --git a/vs/sdl2/src/haptic/windows/SDL_dinputhaptic.c b/vs/sdl2/src/haptic/windows/SDL_dinputhaptic.c index 22149151f95..04d91ce057b 100644 --- a/vs/sdl2/src/haptic/windows/SDL_dinputhaptic.c +++ b/vs/sdl2/src/haptic/windows/SDL_dinputhaptic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/haptic/windows/SDL_dinputhaptic_c.h b/vs/sdl2/src/haptic/windows/SDL_dinputhaptic_c.h index b84fd719123..bdf64f982a4 100644 --- a/vs/sdl2/src/haptic/windows/SDL_dinputhaptic_c.h +++ b/vs/sdl2/src/haptic/windows/SDL_dinputhaptic_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/haptic/windows/SDL_windowshaptic.c b/vs/sdl2/src/haptic/windows/SDL_windowshaptic.c index 1992a0630b9..4d7e662cde1 100644 --- a/vs/sdl2/src/haptic/windows/SDL_windowshaptic.c +++ b/vs/sdl2/src/haptic/windows/SDL_windowshaptic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/haptic/windows/SDL_windowshaptic_c.h b/vs/sdl2/src/haptic/windows/SDL_windowshaptic_c.h index e5d45d5263c..5217c28240f 100644 --- a/vs/sdl2/src/haptic/windows/SDL_windowshaptic_c.h +++ b/vs/sdl2/src/haptic/windows/SDL_windowshaptic_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/haptic/windows/SDL_xinputhaptic.c b/vs/sdl2/src/haptic/windows/SDL_xinputhaptic.c index 0066412f4d1..0704a088dee 100644 --- a/vs/sdl2/src/haptic/windows/SDL_xinputhaptic.c +++ b/vs/sdl2/src/haptic/windows/SDL_xinputhaptic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/haptic/windows/SDL_xinputhaptic_c.h b/vs/sdl2/src/haptic/windows/SDL_xinputhaptic_c.h index 071d3e47610..a011b353a77 100644 --- a/vs/sdl2/src/haptic/windows/SDL_xinputhaptic_c.h +++ b/vs/sdl2/src/haptic/windows/SDL_xinputhaptic_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/hidapi/SDL_hidapi.c b/vs/sdl2/src/hidapi/SDL_hidapi.c index ef9597782ff..5e7a03bea7b 100644 --- a/vs/sdl2/src/hidapi/SDL_hidapi.c +++ b/vs/sdl2/src/hidapi/SDL_hidapi.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -257,7 +257,11 @@ static void HIDAPI_InitializeDiscovery(void) #endif /* defined(__WIN32__) || defined(__WINGDK__) */ #if defined(__MACOSX__) +#if MAC_OS_X_VERSION_MIN_REQUIRED < 120000 + SDL_HIDAPI_discovery.m_notificationPort = IONotificationPortCreate(MACH_PORT_NULL); /* fixed for DOSBox-X (old macOS support) */ +#else SDL_HIDAPI_discovery.m_notificationPort = IONotificationPortCreate(kIOMainPortDefault); +#endif if (SDL_HIDAPI_discovery.m_notificationPort) { { io_iterator_t portIterator = 0; @@ -630,11 +634,9 @@ static const SDL_UDEV_Symbols *udev_ctx = NULL; #ifdef SDL_JOYSTICK_HIDAPI_STEAMXBOX #define HAVE_DRIVER_BACKEND 1 -#else -#define HAVE_DRIVER_BACKEND 0 #endif -#if HAVE_DRIVER_BACKEND +#ifdef HAVE_DRIVER_BACKEND /* DRIVER HIDAPI Implementation */ @@ -905,10 +907,10 @@ IsInWhitelist(Uint16 vendor, Uint16 product) return SDL_FALSE; } -#if defined(HAVE_PLATFORM_BACKEND) || HAVE_DRIVER_BACKEND -static const SDL_bool use_libusb_whitelist_default = SDL_TRUE; +#if defined(HAVE_PLATFORM_BACKEND) || defined(HAVE_DRIVER_BACKEND) + #define use_libusb_whitelist_default SDL_TRUE #else -static const SDL_bool use_libusb_whitelist_default = SDL_FALSE; + #define use_libusb_whitelist_default SDL_FALSE #endif /* HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND */ static SDL_bool use_libusb_whitelist = use_libusb_whitelist_default; @@ -951,7 +953,7 @@ static const struct hidapi_backend PLATFORM_Backend = { }; #endif /* HAVE_PLATFORM_BACKEND */ -#if HAVE_DRIVER_BACKEND +#ifdef HAVE_DRIVER_BACKEND static const struct hidapi_backend DRIVER_Backend = { (void *)DRIVER_hid_write, (void *)DRIVER_hid_read_timeout, @@ -993,7 +995,7 @@ struct SDL_hid_device_ }; static char device_magic; -#if defined(HAVE_PLATFORM_BACKEND) || HAVE_DRIVER_BACKEND || defined(HAVE_LIBUSB) +#if defined(HAVE_PLATFORM_BACKEND) || defined(HAVE_DRIVER_BACKEND) || defined(HAVE_LIBUSB) static SDL_hid_device *CreateHIDDeviceWrapper(void *device, const struct hidapi_backend *backend) { @@ -1019,7 +1021,7 @@ static void DeleteHIDDeviceWrapper(SDL_hid_device *device) } #ifndef SDL_HIDAPI_DISABLED -#if defined(HAVE_PLATFORM_BACKEND) || HAVE_DRIVER_BACKEND || defined(HAVE_LIBUSB) +#if defined(HAVE_PLATFORM_BACKEND) || defined(HAVE_DRIVER_BACKEND) || defined(HAVE_LIBUSB) #define COPY_IF_EXISTS(var) \ if (pSrc->var != NULL) { \ @@ -1249,12 +1251,12 @@ Uint32 SDL_hid_device_change_count(void) struct SDL_hid_device_info *SDL_hid_enumerate(unsigned short vendor_id, unsigned short product_id) { -#if defined(HAVE_PLATFORM_BACKEND) || HAVE_DRIVER_BACKEND || defined(HAVE_LIBUSB) +#if defined(HAVE_PLATFORM_BACKEND) || defined(HAVE_DRIVER_BACKEND) || defined(HAVE_LIBUSB) #ifdef HAVE_LIBUSB struct SDL_hid_device_info *usb_devs = NULL; struct SDL_hid_device_info *usb_dev; #endif -#if HAVE_DRIVER_BACKEND +#ifdef HAVE_DRIVER_BACKEND struct SDL_hid_device_info *driver_devs = NULL; struct SDL_hid_device_info *driver_dev; #endif @@ -1309,7 +1311,7 @@ struct SDL_hid_device_info *SDL_hid_enumerate(unsigned short vendor_id, unsigned } #endif /* HAVE_LIBUSB */ -#if HAVE_DRIVER_BACKEND +#ifdef HAVE_DRIVER_BACKEND driver_devs = DRIVER_hid_enumerate(vendor_id, product_id); for (driver_dev = driver_devs; driver_dev; driver_dev = driver_dev->next) { new_dev = (struct SDL_hid_device_info *)SDL_malloc(sizeof(struct SDL_hid_device_info)); @@ -1347,7 +1349,7 @@ struct SDL_hid_device_info *SDL_hid_enumerate(unsigned short vendor_id, unsigned } } #endif -#if HAVE_DRIVER_BACKEND +#ifdef HAVE_DRIVER_BACKEND for (driver_dev = driver_devs; driver_dev; driver_dev = driver_dev->next) { if (raw_dev->vendor_id == driver_dev->vendor_id && raw_dev->product_id == driver_dev->product_id && @@ -1412,7 +1414,7 @@ void SDL_hid_free_enumeration(struct SDL_hid_device_info *devs) SDL_hid_device *SDL_hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number) { -#if defined(HAVE_PLATFORM_BACKEND) || HAVE_DRIVER_BACKEND || defined(HAVE_LIBUSB) +#if defined(HAVE_PLATFORM_BACKEND) || defined(HAVE_DRIVER_BACKEND) || defined(HAVE_LIBUSB) void *pDevice = NULL; if (SDL_hidapi_refcount == 0 && SDL_hid_init() != 0) { @@ -1428,7 +1430,7 @@ SDL_hid_device *SDL_hid_open(unsigned short vendor_id, unsigned short product_id } #endif /* HAVE_PLATFORM_BACKEND */ -#if HAVE_DRIVER_BACKEND +#ifdef HAVE_DRIVER_BACKEND pDevice = DRIVER_hid_open(vendor_id, product_id, serial_number); if (pDevice != NULL) { return CreateHIDDeviceWrapper(pDevice, &DRIVER_Backend); @@ -1451,7 +1453,7 @@ SDL_hid_device *SDL_hid_open(unsigned short vendor_id, unsigned short product_id SDL_hid_device *SDL_hid_open_path(const char *path, int bExclusive /* = false */) { -#if defined(HAVE_PLATFORM_BACKEND) || HAVE_DRIVER_BACKEND || defined(HAVE_LIBUSB) +#if defined(HAVE_PLATFORM_BACKEND) || defined(HAVE_DRIVER_BACKEND) || defined(HAVE_LIBUSB) void *pDevice = NULL; if (SDL_hidapi_refcount == 0 && SDL_hid_init() != 0) { @@ -1467,7 +1469,7 @@ SDL_hid_device *SDL_hid_open_path(const char *path, int bExclusive /* = false */ } #endif /* HAVE_PLATFORM_BACKEND */ -#if HAVE_DRIVER_BACKEND +#ifdef HAVE_DRIVER_BACKEND pDevice = DRIVER_hid_open_path(path, bExclusive); if (pDevice != NULL) { return CreateHIDDeviceWrapper(pDevice, &DRIVER_Backend); diff --git a/vs/sdl2/src/hidapi/SDL_hidapi_c.h b/vs/sdl2/src/hidapi/SDL_hidapi_c.h index 51fe0135c68..06a75d3b82e 100644 --- a/vs/sdl2/src/hidapi/SDL_hidapi_c.h +++ b/vs/sdl2/src/hidapi/SDL_hidapi_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/hidapi/ios/hid.m b/vs/sdl2/src/hidapi/ios/hid.m index 636d0f07696..72879f2b072 100644 --- a/vs/sdl2/src/hidapi/ios/hid.m +++ b/vs/sdl2/src/hidapi/ios/hid.m @@ -290,6 +290,8 @@ - (int)updateConnectedSteamControllers:(BOOL) bForce { static uint64_t s_unLastUpdateTick = 0; static mach_timebase_info_data_t s_timebase_info; + uint64_t ticksNow; + NSArray *peripherals; if ( self.centralManager == nil ) { @@ -301,7 +303,7 @@ - (int)updateConnectedSteamControllers:(BOOL) bForce mach_timebase_info( &s_timebase_info ); } - uint64_t ticksNow = mach_approximate_time(); + ticksNow = mach_approximate_time(); if ( !bForce && ( ( (ticksNow - s_unLastUpdateTick) * s_timebase_info.numer ) / s_timebase_info.denom ) < (5ull * NSEC_PER_SEC) ) return (int)self.deviceMap.count; @@ -318,7 +320,7 @@ - (int)updateConnectedSteamControllers:(BOOL) bForce if ( self.nPendingPairs > 0 ) return (int)self.deviceMap.count; - NSArray *peripherals = [self.centralManager retrieveConnectedPeripheralsWithServices: @[ [CBUUID UUIDWithString:@"180A"]]]; + peripherals = [self.centralManager retrieveConnectedPeripheralsWithServices: @[ [CBUUID UUIDWithString:@"180A"]]]; for ( CBPeripheral *peripheral in peripherals ) { // we already know this peripheral @@ -328,8 +330,9 @@ - (int)updateConnectedSteamControllers:(BOOL) bForce NSLog( @"connected peripheral: %@", peripheral ); if ( [peripheral.name isEqualToString:@"SteamController"] ) { + HIDBLEDevice *steamController; self.nPendingPairs += 1; - HIDBLEDevice *steamController = [[HIDBLEDevice alloc] initWithPeripheral:peripheral]; + steamController = [[HIDBLEDevice alloc] initWithPeripheral:peripheral]; [self.deviceMap setObject:steamController forKey:peripheral]; [self.centralManager connectPeripheral:peripheral options:nil]; } @@ -452,9 +455,10 @@ - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeri if ( [localName isEqualToString:@"SteamController"] ) { + HIDBLEDevice *steamController; NSLog( @"%@ : %@ - %@", log, peripheral, advertisementData ); self.nPendingPairs += 1; - HIDBLEDevice *steamController = [[HIDBLEDevice alloc] initWithPeripheral:peripheral]; + steamController = [[HIDBLEDevice alloc] initWithPeripheral:peripheral]; [self.deviceMap setObject:steamController forKey:peripheral]; [self.centralManager connectPeripheral:peripheral options:nil]; } @@ -851,11 +855,13 @@ int HID_API_EXPORT hid_set_nonblocking(hid_device *dev, int nonblock) if ( ( vendor_id == 0 || vendor_id == VALVE_USB_VID ) && ( product_id == 0 || product_id == D0G_BLE2_PID ) ) { + NSEnumerator *devices; HIDBLEManager *bleManager = HIDBLEManager.sharedInstance; [bleManager updateConnectedSteamControllers:false]; - NSEnumerator *devices = [bleManager.deviceMap objectEnumerator]; + devices = [bleManager.deviceMap objectEnumerator]; for ( HIDBLEDevice *device in devices ) { + struct hid_device_info *device_info; // there are several brief windows in connecting to an already paired device and // one long window waiting for users to confirm pairing where we don't want // to consider a device ready - if we hand it back to SDL or another @@ -873,7 +879,7 @@ int HID_API_EXPORT hid_set_nonblocking(hid_device *dev, int nonblock) } continue; } - struct hid_device_info *device_info = (struct hid_device_info *)malloc( sizeof(struct hid_device_info) ); + device_info = (struct hid_device_info *)malloc( sizeof(struct hid_device_info) ); memset( device_info, 0, sizeof(struct hid_device_info) ); device_info->next = root; root = device_info; @@ -947,12 +953,13 @@ int HID_API_EXPORT hid_send_feature_report(hid_device *dev, const unsigned char int HID_API_EXPORT hid_get_feature_report(hid_device *dev, unsigned char *data, size_t length) { + size_t written; HIDBLEDevice *device_handle = (__bridge HIDBLEDevice *)dev->device_handle; if ( !device_handle.connected ) return -1; - size_t written = [device_handle get_feature_report:data[0] into:data]; + written = [device_handle get_feature_report:data[0] into:data]; return written == length-1 ? (int)length : (int)written; } @@ -969,6 +976,7 @@ int HID_API_EXPORT hid_read(hid_device *dev, unsigned char *data, size_t length) int HID_API_EXPORT hid_read_timeout(hid_device *dev, unsigned char *data, size_t length, int milliseconds) { + int result; HIDBLEDevice *device_handle = (__bridge HIDBLEDevice *)dev->device_handle; if ( !device_handle.connected ) @@ -978,7 +986,7 @@ int HID_API_EXPORT hid_read_timeout(hid_device *dev, unsigned char *data, size_t { NSLog( @"hid_read_timeout with non-zero wait" ); } - int result = (int)[device_handle read_input_report:data]; + result = (int)[device_handle read_input_report:data]; #if FEATURE_REPORT_LOGGING NSLog( @"HIDBLE:hid_read_timeout (%d) [%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x]", result, data[1], data[2], data[3], data[4], data[5], data[6], diff --git a/vs/sdl2/src/hidapi/libusb/hid.c b/vs/sdl2/src/hidapi/libusb/hid.c index 008131bd9d2..2485bbf9be3 100644 --- a/vs/sdl2/src/hidapi/libusb/hid.c +++ b/vs/sdl2/src/hidapi/libusb/hid.c @@ -519,7 +519,7 @@ static struct usb_string_cache_entry *usb_string_cache = NULL; static size_t usb_string_cache_size = 0; static size_t usb_string_cache_insert_pos = 0; -static int usb_string_cache_grow() +static int usb_string_cache_grow(void) { struct usb_string_cache_entry *new_cache; size_t allocSize; @@ -537,7 +537,7 @@ static int usb_string_cache_grow() return 0; } -static void usb_string_cache_destroy() +static void usb_string_cache_destroy(void) { size_t i; for (i = 0; i < usb_string_cache_insert_pos; i++) { @@ -715,6 +715,7 @@ static int is_xboxone(unsigned short vendor_id, const struct libusb_interface_de 0x044f, /* Thrustmaster */ 0x045e, /* Microsoft */ 0x0738, /* Mad Catz */ + 0x0b05, /* ASUS */ 0x0e6f, /* PDP */ 0x0f0d, /* Hori */ 0x10f5, /* Turtle Beach */ diff --git a/vs/sdl2/src/hidapi/mac/hid.c b/vs/sdl2/src/hidapi/mac/hid.c index bbb5c625da1..24e0b8ac2a0 100644 --- a/vs/sdl2/src/hidapi/mac/hid.c +++ b/vs/sdl2/src/hidapi/mac/hid.c @@ -504,7 +504,7 @@ int HID_API_EXPORT hid_exit(void) return 0; } -static void process_pending_events() { +static void process_pending_events(void) { SInt32 res; do { res = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.001, FALSE); @@ -1135,11 +1135,14 @@ int HID_API_EXPORT hid_get_feature_report(hid_device *dev, unsigned char *data, void HID_API_EXPORT hid_close(hid_device *dev) { + int disconnected; + if (!dev) return; /* Disconnect the report callback before close. */ - if (!dev->disconnected) { + disconnected = dev->disconnected; + if (!disconnected) { IOHIDDeviceRegisterInputReportCallback( dev->device_handle, dev->input_report_buf, dev->max_input_report_len, NULL, dev); @@ -1163,7 +1166,7 @@ void HID_API_EXPORT hid_close(hid_device *dev) /* Close the OS handle to the device, but only if it's not been unplugged. If it's been unplugged, then calling IOHIDDeviceClose() will crash. */ - if (!dev->disconnected) { + if (!disconnected) { IOHIDDeviceClose(dev->device_handle, kIOHIDOptionsTypeNone); } diff --git a/vs/sdl2/src/hidapi/testgui/copy_to_bundle.sh b/vs/sdl2/src/hidapi/testgui/copy_to_bundle.sh index f0fc767a922..ce72de95aac 100755 --- a/vs/sdl2/src/hidapi/testgui/copy_to_bundle.sh +++ b/vs/sdl2/src/hidapi/testgui/copy_to_bundle.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh #### Configuration: # The name of the executable. It is assumed @@ -14,7 +14,7 @@ EXEPATH=$PWD/TestGUI.app/Contents/MacOS LIBS_TO_BUNDLE=libFOX -function copydeps { +copydeps() { local file=$1 # echo "Copying deps for $file...." local BASE_OF_EXE=`basename $file` @@ -44,7 +44,7 @@ function copydeps { isOptLocal=1 echo "bundling $i because it's in /opt/local." fi - + # Bundle the library if [ $isOptLocal -ne 0 ] || [ $bundle_this_lib -ne 0 ]; then @@ -55,15 +55,15 @@ function copydeps { cp $i $EXEPATH chmod 755 $EXEPATH/$BASE fi - - + + # echo "$BASE_OF_EXE depends on $BASE" - + # Fix the paths using install_name_tool and then # call this function recursively for each dependency - # of this library. + # of this library. if [ $BASE_OF_EXE != $BASE ]; then - + # Fix the paths install_name_tool -id @executable_path/$BASE $EXEPATH/$BASE install_name_tool -change $i @executable_path/$BASE $EXEPATH/$BASE_OF_EXE diff --git a/vs/sdl2/src/hidapi/testgui/start.sh b/vs/sdl2/src/hidapi/testgui/start.sh index 980635d955b..e2980851d16 100755 --- a/vs/sdl2/src/hidapi/testgui/start.sh +++ b/vs/sdl2/src/hidapi/testgui/start.sh @@ -1,2 +1,2 @@ -#!/bin/bash +#!/bin/sh xterm -e /Users/alan/work/hidapi/testgui/TestGUI.app/Contents/MacOS/tg diff --git a/vs/sdl2/src/hidapi/windows/hid.c b/vs/sdl2/src/hidapi/windows/hid.c index 3d8a2302ea8..54843d48658 100644 --- a/vs/sdl2/src/hidapi/windows/hid.c +++ b/vs/sdl2/src/hidapi/windows/hid.c @@ -264,7 +264,7 @@ static void register_error(hid_device *device, const char *op) } #ifndef HIDAPI_USE_DDK -static int lookup_functions() +static int lookup_functions(void) { lib_handle = LoadLibrary(TEXT("hid.dll")); if (lib_handle) { diff --git a/vs/sdl2/src/joystick/SDL_gamecontroller.c b/vs/sdl2/src/joystick/SDL_gamecontroller.c index a7d3303b316..36e521eb956 100644 --- a/vs/sdl2/src/joystick/SDL_gamecontroller.c +++ b/vs/sdl2/src/joystick/SDL_gamecontroller.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -688,16 +688,14 @@ static ControllerMapping_t *SDL_CreateMappingForWGIController(SDL_JoystickGUID g /* * Helper function to scan the mappings database for a controller with the specified GUID */ -static ControllerMapping_t *SDL_PrivateMatchControllerMappingForGUID(SDL_JoystickGUID guid, SDL_bool match_crc, SDL_bool match_version) +static ControllerMapping_t *SDL_PrivateMatchControllerMappingForGUID(SDL_JoystickGUID guid, SDL_bool match_version, SDL_bool exact_match_crc) { - ControllerMapping_t *mapping; + ControllerMapping_t *mapping, *best_match = NULL; Uint16 crc = 0; SDL_AssertJoysticksLocked(); - if (match_crc) { - SDL_GetJoystickGUIDInfo(guid, NULL, NULL, NULL, &crc); - } + SDL_GetJoystickGUIDInfo(guid, NULL, NULL, NULL, &crc); /* Clear the CRC from the GUID for matching, the mappings never include it in the GUID */ SDL_SetJoystickGUIDCRC(&guid, 0); @@ -719,20 +717,27 @@ static ControllerMapping_t *SDL_PrivateMatchControllerMappingForGUID(SDL_Joystic } if (SDL_memcmp(&guid, &mapping_guid, sizeof(guid)) == 0) { - Uint16 mapping_crc = 0; + const char *crc_string = SDL_strstr(mapping->mapping, SDL_CONTROLLER_CRC_FIELD); + if (crc_string) { + Uint16 mapping_crc = (Uint16)SDL_strtol(crc_string + SDL_CONTROLLER_CRC_FIELD_SIZE, NULL, 16); - if (match_crc) { - const char *crc_string = SDL_strstr(mapping->mapping, SDL_CONTROLLER_CRC_FIELD); - if (crc_string) { - mapping_crc = (Uint16)SDL_strtol(crc_string + SDL_CONTROLLER_CRC_FIELD_SIZE, NULL, 16); + if (mapping_crc != crc) { + /* This mapping specified a CRC and they don't match */ + continue; } - } - if (crc == mapping_crc) { + + /* An exact match, including CRC */ return mapping; + } else if (crc && exact_match_crc) { + return NULL; + } + + if (!best_match) { + best_match = mapping; } } } - return NULL; + return best_match; } /* @@ -741,19 +746,8 @@ static ControllerMapping_t *SDL_PrivateMatchControllerMappingForGUID(SDL_Joystic static ControllerMapping_t *SDL_PrivateGetControllerMappingForGUID(SDL_JoystickGUID guid, SDL_bool adding_mapping) { ControllerMapping_t *mapping; - Uint16 vendor, product, crc; - - SDL_GetJoystickGUIDInfo(guid, &vendor, &product, NULL, &crc); - if (crc) { - /* First check for exact CRC matching */ - mapping = SDL_PrivateMatchControllerMappingForGUID(guid, SDL_TRUE, SDL_TRUE); - if (mapping) { - return mapping; - } - } - /* Now check for a mapping without CRC */ - mapping = SDL_PrivateMatchControllerMappingForGUID(guid, SDL_FALSE, SDL_TRUE); + mapping = SDL_PrivateMatchControllerMappingForGUID(guid, SDL_TRUE, adding_mapping); if (mapping) { return mapping; } @@ -767,13 +761,6 @@ static ControllerMapping_t *SDL_PrivateGetControllerMappingForGUID(SDL_JoystickG if (SDL_JoystickGUIDUsesVersion(guid)) { /* Try again, ignoring the version */ - if (crc) { - mapping = SDL_PrivateMatchControllerMappingForGUID(guid, SDL_TRUE, SDL_FALSE); - if (mapping) { - return mapping; - } - } - mapping = SDL_PrivateMatchControllerMappingForGUID(guid, SDL_FALSE, SDL_FALSE); if (mapping) { return mapping; @@ -1391,9 +1378,6 @@ static ControllerMapping_t *SDL_PrivateGetControllerMappingForNameAndGUID(const } #endif /* __LINUX__ */ - if (!mapping) { - mapping = s_pDefaultMapping; - } return mapping; } @@ -1506,6 +1490,9 @@ static ControllerMapping_t *SDL_PrivateGetControllerMapping(int device_index) } } + if (!mapping) { + mapping = s_pDefaultMapping; + } return mapping; } @@ -2059,7 +2046,7 @@ SDL_bool SDL_IsGameControllerNameAndGUID(const char *name, SDL_JoystickGUID guid SDL_LockJoysticks(); { - if (SDL_PrivateGetControllerMappingForNameAndGUID(name, guid) != NULL) { + if (s_pDefaultMapping || SDL_PrivateGetControllerMappingForNameAndGUID(name, guid) != NULL) { retval = SDL_TRUE; } else { retval = SDL_FALSE; @@ -2137,28 +2124,22 @@ SDL_bool SDL_ShouldIgnoreGameController(const char *name, SDL_JoystickGUID guid) return SDL_TRUE; } - if (SDL_allowed_controllers.num_included_entries == 0 && - SDL_ignored_controllers.num_included_entries == 0) { + SDL_GetJoystickGUIDInfo(guid, &vendor, &product, &version, NULL); + +#ifdef __WIN32__ + if (SDL_GetHintBoolean("SDL_GAMECONTROLLER_ALLOW_STEAM_VIRTUAL_GAMEPAD", SDL_FALSE) && + SDL_GetHintBoolean("STEAM_COMPAT_PROTON", SDL_FALSE)) { + /* We are launched by Steam and running under Proton + * We can't tell whether this controller is a Steam Virtual Gamepad, + * so assume that Proton is doing the appropriate filtering of controllers + * and anything we see here is fine to use. + */ return SDL_FALSE; } +#endif // __WIN32__ - SDL_GetJoystickGUIDInfo(guid, &vendor, &product, &version, NULL); - - if (SDL_GetHintBoolean("SDL_GAMECONTROLLER_ALLOW_STEAM_VIRTUAL_GAMEPAD", SDL_FALSE)) { - /* We shouldn't ignore Steam's virtual gamepad since it's using the hints to filter out the real controllers so it can remap input for the virtual controller */ - /* https://partner.steamgames.com/doc/features/steam_controller/steam_input_gamepad_emulation_bestpractices */ - SDL_bool bSteamVirtualGamepad = SDL_FALSE; -#if defined(__LINUX__) - bSteamVirtualGamepad = (vendor == USB_VENDOR_VALVE && product == USB_PRODUCT_STEAM_VIRTUAL_GAMEPAD); -#elif defined(__MACOSX__) - bSteamVirtualGamepad = (vendor == USB_VENDOR_MICROSOFT && product == USB_PRODUCT_XBOX360_WIRED_CONTROLLER && version == 1); -#elif defined(__WIN32__) - /* We can't tell on Windows, but Steam will block others in input hooks */ - bSteamVirtualGamepad = SDL_TRUE; -#endif - if (bSteamVirtualGamepad) { - return SDL_FALSE; - } + if (SDL_IsJoystickSteamVirtualGamepad(vendor, product, version)) { + return !SDL_GetHintBoolean("SDL_GAMECONTROLLER_ALLOW_STEAM_VIRTUAL_GAMEPAD", SDL_FALSE); } if (SDL_allowed_controllers.num_included_entries > 0) { @@ -2396,23 +2377,19 @@ Uint8 SDL_GameControllerGetButton(SDL_GameController *gamecontroller, SDL_GameCo if (binding->input.axis.axis_min < binding->input.axis.axis_max) { valid_input_range = (value >= binding->input.axis.axis_min && value <= binding->input.axis.axis_max); if (valid_input_range) { - retval = (value >= threshold) ? SDL_PRESSED : SDL_RELEASED; - break; + retval |= (value >= threshold) ? SDL_PRESSED : SDL_RELEASED; } } else { valid_input_range = (value >= binding->input.axis.axis_max && value <= binding->input.axis.axis_min); if (valid_input_range) { - retval = (value <= threshold) ? SDL_PRESSED : SDL_RELEASED; - break; + retval |= (value <= threshold) ? SDL_PRESSED : SDL_RELEASED; } } } else if (binding->inputType == SDL_CONTROLLER_BINDTYPE_BUTTON) { - retval = SDL_JoystickGetButton(gamecontroller->joystick, binding->input.button); - break; + retval |= SDL_JoystickGetButton(gamecontroller->joystick, binding->input.button); } else if (binding->inputType == SDL_CONTROLLER_BINDTYPE_HAT) { int hat_mask = SDL_JoystickGetHat(gamecontroller->joystick, binding->input.hat.hat); - retval = (hat_mask & binding->input.hat.hat_mask) ? SDL_PRESSED : SDL_RELEASED; - break; + retval |= (hat_mask & binding->input.hat.hat_mask) ? SDL_PRESSED : SDL_RELEASED; } } } diff --git a/vs/sdl2/src/joystick/SDL_gamecontrollerdb.h b/vs/sdl2/src/joystick/SDL_gamecontrollerdb.h index 22979210f1b..1366fb25d7e 100644 --- a/vs/sdl2/src/joystick/SDL_gamecontrollerdb.h +++ b/vs/sdl2/src/joystick/SDL_gamecontrollerdb.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -84,6 +84,7 @@ static const char *s_ControllerMappings[] = { "03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,hint:!SDL_GAMECONTROLLER_USE_BUTTON_LABELS:=1,", "030000003512000020ab000000000000,8BitDo SNES30 Gamepad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,hint:SDL_GAMECONTROLLER_USE_BUTTON_LABELS:=1,", "030000003512000020ab000000000000,8BitDo SNES30 Gamepad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,hint:!SDL_GAMECONTROLLER_USE_BUTTON_LABELS:=1,", + "03000000c82d00001b30000000000000,8BitDo Ultimate 2C Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a2,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a5,start:b11,x:b3,y:b4,", /* Bluetooth */ "03000000c82d00001130000000000000,8BitDo Ultimate Wired Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b26,paddle1:b24,paddle2:b25,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,", "03000000c82d00001330000000000000,8BitDo Ultimate Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,", "03000000c82d00001890000000000000,8BitDo Zero 2,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,hint:SDL_GAMECONTROLLER_USE_BUTTON_LABELS:=1,", @@ -135,7 +136,6 @@ static const char *s_ControllerMappings[] = { "03000000b80500000610000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,", "03000000852100000201000000000000,FF-GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", "030000000d0f00002700000000000000,FIGHTING STICK V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,", - "03000000790000000600000000000000,G-Shark GS-GP702,crc:8e4f,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,", "030000008f0e00000d31000000000000,GAMEPAD 3 TURBO,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", "03000000300f00000b01000000000000,GGE909 Recoil Pad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,", "03000000790000002201000000000000,Game Controller for PC,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,", @@ -324,6 +324,7 @@ static const char *s_ControllerMappings[] = { "030000009b2800000500000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,", "030000008f0e00000800000000000000,SpeedLink Strike FX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,", "03000000c01100000591000000000000,Speedlink Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,", + "030000004c0500006802000000000000,SplitFish Game Controller,crc:5628,a:b0,b:b16,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,leftshoulder:b17,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b10,", "03000000de280000ff11000000000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", "03000000110100003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,", "03000000381000001814000000000000,SteelSeries Stratus XL,a:b0,b:b1,back:b18,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b19,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b2,y:b3,", @@ -396,6 +397,7 @@ static const char *s_ControllerMappings[] = { "03000000c82d00000261000000010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,hint:!SDL_GAMECONTROLLER_USE_BUTTON_LABELS:=1,", "03000000c82d00000160000001000000,8BitDo SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,hint:SDL_GAMECONTROLLER_USE_BUTTON_LABELS:=1,", "03000000c82d00000160000001000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,hint:!SDL_GAMECONTROLLER_USE_BUTTON_LABELS:=1,", + "03000000c82d00001b30000001000000,8BitDo Ultimate 2C Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,", /* Bluetooth */ "03000000c82d00001130000000020000,8BitDo Ultimate Wired Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b24,paddle2:b25,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,", "03000000c82d00001330000000020000,8BitDo Ultimate Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,", "03000000c82d00001890000001000000,8BitDo Zero 2,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,hint:SDL_GAMECONTROLLER_USE_BUTTON_LABELS:=1,", @@ -566,6 +568,7 @@ static const char *s_ControllerMappings[] = { "030000003512000020ab000010010000,8BitDo SNES30 Gamepad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,hint:!SDL_GAMECONTROLLER_USE_BUTTON_LABELS:=1,", "05000000202800000900000000010000,8BitDo SNES30 Gamepad,a:b0,b:b1,back:b10,dpdown:b122,dpleft:b119,dpright:b120,dpup:b117,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,hint:SDL_GAMECONTROLLER_USE_BUTTON_LABELS:=1,", "05000000202800000900000000010000,8BitDo SNES30 Gamepad,a:b1,b:b0,back:b10,dpdown:b122,dpleft:b119,dpright:b120,dpup:b117,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,hint:!SDL_GAMECONTROLLER_USE_BUTTON_LABELS:=1,", + "05000000c82d00001b30000001000000,8BitDo Ultimate 2C Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,", /* Bluetooth */ "03000000c82d00001130000011010000,8BitDo Ultimate Wired Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b24,paddle2:b25,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,", "03000000c82d00001330000011010000,8BitDo Ultimate Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,", "03000000c82d00001890000011010000,8BitDo Zero 2,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,hint:SDL_GAMECONTROLLER_USE_BUTTON_LABELS:=1,", @@ -772,8 +775,8 @@ static const char *s_ControllerMappings[] = { "03000000300f00001211000011010000,QanBa Arcade JoyStick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,", "03000000222c00000225000011010000,Qanba Dragon Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", "03000000222c00000025000011010000,Qanba Dragon Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,", - "03000000222c00001020000011010000,Qanba Drone 2 Arcade Joystick (PS5),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,", "03000000222c00001220000011010000,Qanba Drone 2 Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,", + "03000000222c00001020000011010000,Qanba Drone 2 Arcade Joystick (PS5),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,", "03000000222c00000020000011010000,Qanba Drone Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,", "03000000222c00000223000011010000,Qanba Obsidian Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", "03000000222c00000023000011010000,Qanba Obsidian Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,", @@ -924,7 +927,7 @@ static const char *s_ControllerMappings[] = { "050000004c050000c4050000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,", "050000004c050000cc090000fffe3f80,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a3,rightx:a4,righty:a5,start:b16,x:b0,y:b2,", "050000004c050000cc090000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,", - "050000004c050000e60c0000fffe3f80,PS5 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a3,rightx:a4,righty:a5,start:b16,x:b0,y:b2,", + "050000004c050000e60c0000fffe3f80,PS5 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a3,rightx:a4,righty:a5,start:b16,x:b2,y:b17,", "050000004c050000e60c0000ffff3f00,PS5 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,", "05000000f8270000bf0b0000ffff3f00,Razer Kishi,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,", "050000003215000005070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,", diff --git a/vs/sdl2/src/joystick/SDL_joystick.c b/vs/sdl2/src/joystick/SDL_joystick.c index 05c9807c26e..e9682885995 100644 --- a/vs/sdl2/src/joystick/SDL_joystick.c +++ b/vs/sdl2/src/joystick/SDL_joystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -370,6 +370,7 @@ static Uint32 initial_wheel_devices[] = { MAKE_VIDPID(0x044f, 0xb65e), /* Thrustmaster T500RS */ MAKE_VIDPID(0x044f, 0xb664), /* Thrustmaster TX (initial mode) */ MAKE_VIDPID(0x044f, 0xb669), /* Thrustmaster TX (active mode) */ + MAKE_VIDPID(0x044f, 0xb67f), /* Thrustmaster TMX */ MAKE_VIDPID(0x044f, 0xb691), /* Thrustmaster TS-XW (initial mode) */ MAKE_VIDPID(0x044f, 0xb692), /* Thrustmaster TS-XW (active mode) */ MAKE_VIDPID(0x0483, 0x0522), /* Simagic Wheelbase (including M10, Alpha Mini, Alpha, Alpha U) */ @@ -394,7 +395,8 @@ static Uint32 initial_wheel_devices[] = { MAKE_VIDPID(0x2433, 0xf301), /* Asetek SimSports Forte Wheelbase */ MAKE_VIDPID(0x2433, 0xf303), /* Asetek SimSports La Prima Wheelbase */ MAKE_VIDPID(0x2433, 0xf306), /* Asetek SimSports Tony Kannan Wheelbase */ - MAKE_VIDPID(0x3416, 0x0301), /* Cammus C5 Wheelbase */ + MAKE_VIDPID(0x3416, 0x0301), /* Cammus C5 Wheelbase */ + MAKE_VIDPID(0x3416, 0x0302), /* Cammus C12 Wheelbase */ MAKE_VIDPID(0x346e, 0x0000), /* Moza R16/R21 Wheelbase */ MAKE_VIDPID(0x346e, 0x0002), /* Moza R9 Wheelbase */ MAKE_VIDPID(0x346e, 0x0004), /* Moza R5 Wheelbase */ @@ -1412,9 +1414,13 @@ int SDL_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint retval = 0; } else { retval = joystick->driver->Rumble(joystick, low_frequency_rumble, high_frequency_rumble); - joystick->rumble_resend = SDL_GetTicks() + SDL_RUMBLE_RESEND_MS; - if (!joystick->rumble_resend) { - joystick->rumble_resend = 1; + if (retval == 0) { + joystick->rumble_resend = SDL_GetTicks() + SDL_RUMBLE_RESEND_MS; + if (joystick->rumble_resend == 0) { + joystick->rumble_resend = 1; + } + } else { + joystick->rumble_resend = 0; } } @@ -2177,12 +2183,14 @@ void SDL_JoystickUpdate(void) #endif /* SDL_JOYSTICK_HIDAPI */ for (joystick = SDL_joysticks; joystick; joystick = joystick->next) { - if (joystick->attached) { - joystick->driver->Update(joystick); + if (!joystick->attached) { + continue; + } - if (joystick->delayed_guide_button) { - SDL_GameControllerHandleDelayedGuideButton(joystick); - } + joystick->driver->Update(joystick); + + if (joystick->delayed_guide_button) { + SDL_GameControllerHandleDelayedGuideButton(joystick); } now = SDL_GetTicks(); @@ -2220,7 +2228,7 @@ void SDL_JoystickUpdate(void) int SDL_JoystickEventState(int state) { #ifdef SDL_EVENTS_DISABLED - return SDL_DISABLE; + return SDL_IGNORE; #else const Uint32 event_list[] = { SDL_JOYAXISMOTION, SDL_JOYBALLMOTION, SDL_JOYHATMOTION, @@ -2487,7 +2495,7 @@ SDL_JoystickGUID SDL_CreateJoystickGUID(Uint16 bus, Uint16 vendor, Uint16 produc *guid16++ = SDL_SwapLE16(bus); *guid16++ = SDL_SwapLE16(crc); - if (vendor && product) { + if (vendor) { *guid16++ = SDL_SwapLE16(vendor); *guid16++ = 0; *guid16++ = SDL_SwapLE16(product); @@ -2503,7 +2511,9 @@ SDL_JoystickGUID SDL_CreateJoystickGUID(Uint16 bus, Uint16 vendor, Uint16 produc guid.data[14] = driver_signature; guid.data[15] = driver_data; } - SDL_strlcpy((char *)guid16, product_name, available_space); + if (product_name) { + SDL_strlcpy((char *)guid16, product_name, available_space); + } } return guid; } @@ -2748,6 +2758,11 @@ SDL_bool SDL_IsJoystickXboxSeriesX(Uint16 vendor_id, Uint16 product_id) return SDL_TRUE; } } + if (vendor_id == USB_VENDOR_ASUS) { + if (product_id == USB_PRODUCT_ROG_RAIKIRI) { + return SDL_TRUE; + } + } return SDL_FALSE; } @@ -2830,6 +2845,15 @@ SDL_bool SDL_IsJoystickNintendoSwitchJoyConPair(Uint16 vendor_id, Uint16 product return vendor_id == USB_VENDOR_NINTENDO && product_id == USB_PRODUCT_NINTENDO_SWITCH_JOYCON_PAIR; } +SDL_bool SDL_IsJoystickSteamVirtualGamepad(Uint16 vendor_id, Uint16 product_id, Uint16 version) +{ +#ifdef __MACOSX__ + return (vendor_id == USB_VENDOR_MICROSOFT && product_id == USB_PRODUCT_XBOX360_WIRED_CONTROLLER && version == 0); +#else + return (vendor_id == USB_VENDOR_VALVE && product_id == USB_PRODUCT_STEAM_VIRTUAL_GAMEPAD); +#endif +} + SDL_bool SDL_IsJoystickSteamController(Uint16 vendor_id, Uint16 product_id) { EControllerType eType = GuessControllerType(vendor_id, product_id); diff --git a/vs/sdl2/src/joystick/SDL_joystick_c.h b/vs/sdl2/src/joystick/SDL_joystick_c.h index 44d8e8cc911..3107d3fad60 100644 --- a/vs/sdl2/src/joystick/SDL_joystick_c.h +++ b/vs/sdl2/src/joystick/SDL_joystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -123,6 +123,9 @@ extern SDL_bool SDL_IsJoystickNintendoSwitchJoyConRight(Uint16 vendor_id, Uint16 extern SDL_bool SDL_IsJoystickNintendoSwitchJoyConGrip(Uint16 vendor_id, Uint16 product_id); extern SDL_bool SDL_IsJoystickNintendoSwitchJoyConPair(Uint16 vendor_id, Uint16 product_id); +/* Function to return whether a joystick is a Steam Virtual Gamepad */ +extern SDL_bool SDL_IsJoystickSteamVirtualGamepad(Uint16 vendor_id, Uint16 product_id, Uint16 version); + /* Function to return whether a joystick is a Steam Controller */ extern SDL_bool SDL_IsJoystickSteamController(Uint16 vendor_id, Uint16 product_id); diff --git a/vs/sdl2/src/joystick/SDL_steam_virtual_gamepad.c b/vs/sdl2/src/joystick/SDL_steam_virtual_gamepad.c index 4e5255d05e8..403f7e70412 100644 --- a/vs/sdl2/src/joystick/SDL_steam_virtual_gamepad.c +++ b/vs/sdl2/src/joystick/SDL_steam_virtual_gamepad.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/SDL_steam_virtual_gamepad.h b/vs/sdl2/src/joystick/SDL_steam_virtual_gamepad.h index 415643b675e..8bdbeff5e80 100644 --- a/vs/sdl2/src/joystick/SDL_steam_virtual_gamepad.h +++ b/vs/sdl2/src/joystick/SDL_steam_virtual_gamepad.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/SDL_sysjoystick.h b/vs/sdl2/src/joystick/SDL_sysjoystick.h index 173650e31f9..cabb69af551 100644 --- a/vs/sdl2/src/joystick/SDL_sysjoystick.h +++ b/vs/sdl2/src/joystick/SDL_sysjoystick.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/android/SDL_sysjoystick.c b/vs/sdl2/src/joystick/android/SDL_sysjoystick.c index c29f7387b83..e0c228afc3d 100644 --- a/vs/sdl2/src/joystick/android/SDL_sysjoystick.c +++ b/vs/sdl2/src/joystick/android/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/android/SDL_sysjoystick_c.h b/vs/sdl2/src/joystick/android/SDL_sysjoystick_c.h index 189bcf4b389..e1eceabc41e 100644 --- a/vs/sdl2/src/joystick/android/SDL_sysjoystick_c.h +++ b/vs/sdl2/src/joystick/android/SDL_sysjoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/bsd/SDL_bsdjoystick.c b/vs/sdl2/src/joystick/bsd/SDL_bsdjoystick.c index 3886fbfbb61..8c0260d27e6 100644 --- a/vs/sdl2/src/joystick/bsd/SDL_bsdjoystick.c +++ b/vs/sdl2/src/joystick/bsd/SDL_bsdjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -93,40 +93,11 @@ #define HUG_DPAD_RIGHT 0x92 #define HUG_DPAD_LEFT 0x93 -#define HAT_CENTERED 0x00 #define HAT_UP 0x01 #define HAT_RIGHT 0x02 #define HAT_DOWN 0x04 #define HAT_LEFT 0x08 -#define HAT_RIGHTUP (HAT_RIGHT | HAT_UP) -#define HAT_RIGHTDOWN (HAT_RIGHT | HAT_DOWN) -#define HAT_LEFTUP (HAT_LEFT | HAT_UP) -#define HAT_LEFTDOWN (HAT_LEFT | HAT_DOWN) - -/* calculate the value from the state of the dpad */ -int dpad_to_sdl(Sint32 *dpad) -{ - if (dpad[2]) { - if (dpad[0]) - return HAT_RIGHTUP; - else if (dpad[1]) - return HAT_RIGHTDOWN; - else - return HAT_RIGHT; - } else if (dpad[3]) { - if (dpad[0]) - return HAT_LEFTUP; - else if (dpad[1]) - return HAT_LEFTDOWN; - else - return HAT_LEFT; - } else if (dpad[0]) { - return HAT_UP; - } else if (dpad[1]) { - return HAT_DOWN; - } - return HAT_CENTERED; -} + #endif struct report @@ -724,19 +695,29 @@ static void BSD_JoystickUpdate(SDL_Joystick *joy) hitem.logical_minimum); } #ifdef __OpenBSD__ - else if (usage == HUG_DPAD_UP) { + /* here D-pad directions are reported like separate buttons. + * calculate the SDL hat value from the 4 separate values. + */ + switch (usage) { + case HUG_DPAD_UP: dpad[0] = (Sint32)hid_get_data(REP_BUF_DATA(rep), &hitem); - SDL_PrivateJoystickHat(joy, 0, dpad_to_sdl(dpad)); - } else if (usage == HUG_DPAD_DOWN) { + break; + case HUG_DPAD_DOWN: dpad[1] = (Sint32)hid_get_data(REP_BUF_DATA(rep), &hitem); - SDL_PrivateJoystickHat(joy, 0, dpad_to_sdl(dpad)); - } else if (usage == HUG_DPAD_RIGHT) { + break; + case HUG_DPAD_RIGHT: dpad[2] = (Sint32)hid_get_data(REP_BUF_DATA(rep), &hitem); - SDL_PrivateJoystickHat(joy, 0, dpad_to_sdl(dpad)); - } else if (usage == HUG_DPAD_LEFT) { + break; + case HUG_DPAD_LEFT: dpad[3] = (Sint32)hid_get_data(REP_BUF_DATA(rep), &hitem); - SDL_PrivateJoystickHat(joy, 0, dpad_to_sdl(dpad)); + break; + //default: + // no-op } + SDL_PrivateJoystickHat(joy, 0, (dpad[0] * HAT_UP) | + (dpad[1] * HAT_DOWN) | + (dpad[2] * HAT_RIGHT) | + (dpad[3] * HAT_LEFT) ); #endif break; } diff --git a/vs/sdl2/src/joystick/controller_list.h b/vs/sdl2/src/joystick/controller_list.h index fd77b2a9d5a..79446c5cae7 100644 --- a/vs/sdl2/src/joystick/controller_list.h +++ b/vs/sdl2/src/joystick/controller_list.h @@ -69,7 +69,7 @@ static const ControllerDescription_t arrControllers[] = { { MAKE_CONTROLLER_ID( 0x20d6, 0x576d ), k_eControllerType_PS3Controller, NULL }, // Power A PS3 { MAKE_CONTROLLER_ID( 0x20d6, 0xca6d ), k_eControllerType_PS3Controller, NULL }, // From SDL { MAKE_CONTROLLER_ID( 0x2563, 0x0523 ), k_eControllerType_PS3Controller, NULL }, // Digiflip GP006 - { MAKE_CONTROLLER_ID( 0x2563, 0x0575 ), k_eControllerType_PS3Controller, NULL }, // From SDL + { MAKE_CONTROLLER_ID( 0x2563, 0x0575 ), k_eControllerType_PS3Controller, "Retro-bit Controller" }, // SWITCH CO., LTD. Retro-bit Controller { MAKE_CONTROLLER_ID( 0x25f0, 0x83c3 ), k_eControllerType_PS3Controller, NULL }, // gioteck vx2 { MAKE_CONTROLLER_ID( 0x25f0, 0xc121 ), k_eControllerType_PS3Controller, NULL }, // { MAKE_CONTROLLER_ID( 0x2c22, 0x2003 ), k_eControllerType_PS3Controller, NULL }, // Qanba Drone diff --git a/vs/sdl2/src/joystick/darwin/SDL_iokitjoystick.c b/vs/sdl2/src/joystick/darwin/SDL_iokitjoystick.c index 493f81640cc..8bb8d0097c6 100644 --- a/vs/sdl2/src/joystick/darwin/SDL_iokitjoystick.c +++ b/vs/sdl2/src/joystick/darwin/SDL_iokitjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -477,6 +477,11 @@ static SDL_bool GetDeviceInfo(IOHIDDeviceRef hidDevice, recDevice *pDevice) CFNumberGetValue(refCF, kCFNumberSInt32Type, &version); } + if (SDL_IsJoystickXboxOne(vendor, product)) { + /* We can't actually use this API for Xbox controllers */ + return false; + } + /* get device name */ refCF = IOHIDDeviceGetProperty(hidDevice, CFSTR(kIOHIDManufacturerKey)); if ((!refCF) || (!CFStringGetCString(refCF, manufacturer_string, sizeof(manufacturer_string), kCFStringEncodingUTF8))) { diff --git a/vs/sdl2/src/joystick/darwin/SDL_iokitjoystick_c.h b/vs/sdl2/src/joystick/darwin/SDL_iokitjoystick_c.h index 095c0832217..e7b42aec74e 100644 --- a/vs/sdl2/src/joystick/darwin/SDL_iokitjoystick_c.h +++ b/vs/sdl2/src/joystick/darwin/SDL_iokitjoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/dummy/SDL_sysjoystick.c b/vs/sdl2/src/joystick/dummy/SDL_sysjoystick.c index 1ade8e1b5b1..f2e2fc0653d 100644 --- a/vs/sdl2/src/joystick/dummy/SDL_sysjoystick.c +++ b/vs/sdl2/src/joystick/dummy/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/emscripten/SDL_sysjoystick.c b/vs/sdl2/src/joystick/emscripten/SDL_sysjoystick.c index a2db803ff75..02c450a5e3a 100644 --- a/vs/sdl2/src/joystick/emscripten/SDL_sysjoystick.c +++ b/vs/sdl2/src/joystick/emscripten/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/emscripten/SDL_sysjoystick_c.h b/vs/sdl2/src/joystick/emscripten/SDL_sysjoystick_c.h index 6e9b64948c8..10814cf0d98 100644 --- a/vs/sdl2/src/joystick/emscripten/SDL_sysjoystick_c.h +++ b/vs/sdl2/src/joystick/emscripten/SDL_sysjoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/haiku/SDL_haikujoystick.cc b/vs/sdl2/src/joystick/haiku/SDL_haikujoystick.cc index 5c313636fe3..013bff0bbff 100644 --- a/vs/sdl2/src/joystick/haiku/SDL_haikujoystick.cc +++ b/vs/sdl2/src/joystick/haiku/SDL_haikujoystick.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/hidapi/SDL_hidapi_combined.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_combined.c index 94ab75c1d9a..25000f64101 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_combined.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_combined.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/hidapi/SDL_hidapi_gamecube.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_gamecube.c index 53d40b92b91..db64518df2f 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_gamecube.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_gamecube.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/hidapi/SDL_hidapi_luna.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_luna.c index e5557c59827..811b0a6eade 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_luna.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_luna.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/hidapi/SDL_hidapi_nintendo.h b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_nintendo.h index bd8459a4202..4247828331c 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_nintendo.h +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_nintendo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/hidapi/SDL_hidapi_ps3.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_ps3.c index 1b10e9ffbad..61a242f1eff 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_ps3.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_ps3.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -50,6 +50,7 @@ typedef struct SDL_HIDAPI_Device *device; SDL_Joystick *joystick; SDL_bool is_shanwan; + SDL_bool has_analog_buttons; SDL_bool report_sensors; SDL_bool effects_updated; int player_index; @@ -145,6 +146,7 @@ static SDL_bool HIDAPI_DriverPS3_InitDevice(SDL_HIDAPI_Device *device) } ctx->device = device; ctx->is_shanwan = is_shanwan; + ctx->has_analog_buttons = SDL_TRUE; device->context = ctx; @@ -247,7 +249,10 @@ static SDL_bool HIDAPI_DriverPS3_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joy /* Initialize the joystick capabilities */ joystick->nbuttons = 15; - joystick->naxes = 16; + joystick->naxes = 6; + if (ctx->has_analog_buttons) { + joystick->naxes += 10; + } joystick->epowerlevel = SDL_JOYSTICK_POWER_WIRED; SDL_PrivateJoystickAddSensor(joystick, SDL_SENSOR_ACCEL, 100.0f); @@ -432,7 +437,7 @@ static void HIDAPI_DriverPS3_HandleStatePacket(SDL_Joystick *joystick, SDL_Drive SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis); /* Buttons are mapped as axes in the order they appear in the button enumeration */ - { + if (ctx->has_analog_buttons) { static int button_axis_offsets[] = { 24, /* SDL_CONTROLLER_BUTTON_A */ 23, /* SDL_CONTROLLER_BUTTON_B */ @@ -617,6 +622,11 @@ static SDL_bool HIDAPI_DriverPS3ThirdParty_InitDevice(SDL_HIDAPI_Device *device) return SDL_FALSE; } ctx->device = device; + if (device->vendor_id == USB_VENDOR_SWITCH && device->product_id == USB_PRODUCT_SWITCH_RETROBIT_CONTROLLER) { + ctx->has_analog_buttons = SDL_FALSE; + } else { + ctx->has_analog_buttons = SDL_TRUE; + } device->context = ctx; @@ -650,8 +660,17 @@ static SDL_bool HIDAPI_DriverPS3ThirdParty_OpenJoystick(SDL_HIDAPI_Device *devic /* Initialize the joystick capabilities */ joystick->nbuttons = 15; - joystick->naxes = 16; - joystick->epowerlevel = SDL_JOYSTICK_POWER_WIRED; + joystick->naxes = 6; + if (ctx->has_analog_buttons) { + joystick->naxes += 10; + } + + if (device->vendor_id == USB_VENDOR_SWITCH && device->product_id == USB_PRODUCT_SWITCH_RETROBIT_CONTROLLER) { + // This is a wireless controller using a USB dongle + joystick->epowerlevel = SDL_JOYSTICK_POWER_UNKNOWN; + } else { + joystick->epowerlevel = SDL_JOYSTICK_POWER_WIRED; + } return SDL_TRUE; } @@ -762,7 +781,7 @@ static void HIDAPI_DriverPS3ThirdParty_HandleStatePacket18(SDL_Joystick *joystic SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis); /* Buttons are mapped as axes in the order they appear in the button enumeration */ - { + if (ctx->has_analog_buttons) { static int button_axis_offsets[] = { 12, /* SDL_GAMEPAD_BUTTON_A */ 11, /* SDL_GAMEPAD_BUTTON_B */ @@ -871,9 +890,17 @@ static void HIDAPI_DriverPS3ThirdParty_HandleStatePacket19(SDL_Joystick *joystic } } - axis = ((int)data[17] * 257) - 32768; + if (data[0] & 0x40) { + axis = 32767; + } else { + axis = ((int)data[17] * 257) - 32768; + } SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis); - axis = ((int)data[18] * 257) - 32768; + if (data[0] & 0x80) { + axis = 32767; + } else { + axis = ((int)data[18] * 257) - 32768; + } SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis); axis = ((int)data[3] * 257) - 32768; SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis); @@ -885,7 +912,7 @@ static void HIDAPI_DriverPS3ThirdParty_HandleStatePacket19(SDL_Joystick *joystic SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis); /* Buttons are mapped as axes in the order they appear in the button enumeration */ - { + if (ctx->has_analog_buttons) { static int button_axis_offsets[] = { 13, /* SDL_CONTROLLER_BUTTON_A */ 12, /* SDL_CONTROLLER_BUTTON_B */ diff --git a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_ps4.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_ps4.c index 565431d8389..fd38dc98a2d 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_ps4.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_ps4.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -263,7 +263,7 @@ static SDL_bool HIDAPI_DriverPS4_InitDevice(SDL_HIDAPI_Device *device) j = -1; for (i = 0; i < 12; i += 2) { j += 1; - SDL_memcpy(&serial[j], &device->serial[i], 2); + SDL_memmove(&serial[j], &device->serial[i], 2); j += 2; serial[j] = '-'; } @@ -1208,6 +1208,7 @@ static SDL_bool HIDAPI_DriverPS4_UpdateDevice(SDL_HIDAPI_Device *device) if (SDL_TICKS_PASSED(now, ctx->last_packet + BLUETOOTH_DISCONNECT_TIMEOUT_MS)) { /* Send an empty output report to tickle the Bluetooth stack */ HIDAPI_DriverPS4_TickleBluetooth(device); + ctx->last_packet = now; } } else { /* Reconnect the Bluetooth device once the USB device is gone */ diff --git a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_ps5.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_ps5.c index dfdbc81201d..159a0e846bf 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_ps5.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_ps5.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -371,7 +371,7 @@ static SDL_bool HIDAPI_DriverPS5_InitDevice(SDL_HIDAPI_Device *device) j = -1; for (i = 0; i < 12; i += 2) { j += 1; - SDL_memcpy(&serial[j], &device->serial[i], 2); + SDL_memmove(&serial[j], &device->serial[i], 2); j += 2; serial[j] = '-'; } @@ -1500,6 +1500,7 @@ static SDL_bool HIDAPI_DriverPS5_UpdateDevice(SDL_HIDAPI_Device *device) if (SDL_TICKS_PASSED(now, ctx->last_packet + BLUETOOTH_DISCONNECT_TIMEOUT_MS)) { /* Send an empty output report to tickle the Bluetooth stack */ HIDAPI_DriverPS5_TickleBluetooth(device); + ctx->last_packet = now; } } else { /* Reconnect the Bluetooth device once the USB device is gone */ diff --git a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_rumble.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_rumble.c index 2bb166e130a..8cacc3362ad 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_rumble.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_rumble.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/hidapi/SDL_hidapi_rumble.h b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_rumble.h index 918e08c91fd..fa5158ab1b6 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_rumble.h +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_rumble.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/hidapi/SDL_hidapi_shield.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_shield.c index 63540e65eb7..0507ca1693d 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_shield.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_shield.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/hidapi/SDL_hidapi_stadia.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_stadia.c index 0fc6d1486c1..9c0307e825d 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_stadia.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_stadia.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/hidapi/SDL_hidapi_steam.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_steam.c index 9f9e0e34207..9a712b0d82d 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_steam.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_steam.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/hidapi/SDL_hidapi_steamdeck.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_steamdeck.c index c26b3e6db47..20554edc605 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_steamdeck.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_steamdeck.c @@ -134,6 +134,89 @@ static SDL_bool FeedDeckLizardWatchdog(SDL_hid_device *dev) return SDL_TRUE; } +static void HIDAPI_DriverSteamDeck_HandleState(SDL_HIDAPI_Device *device, + SDL_Joystick *joystick, + ValveInReport_t *pInReport) +{ + float values[3]; + SDL_DriverSteamDeck_Context *ctx = (SDL_DriverSteamDeck_Context *)device->context; + + if (pInReport->payload.deckState.ulButtons != ctx->last_button_state) { + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_A, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_A) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_B, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_B) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_X, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_X) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_Y, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_Y) ? SDL_PRESSED : SDL_RELEASED); + + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_L) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_R) ? SDL_PRESSED : SDL_RELEASED); + + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_BACK, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_VIEW) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_START, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_MENU) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_GUIDE, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_STEAM) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_MISC1, + (pInReport->payload.deckState.ulButtonsH & STEAMDECK_HBUTTON_QAM) ? SDL_PRESSED : SDL_RELEASED); + + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSTICK, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_L3) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSTICK, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_R3) ? SDL_PRESSED : SDL_RELEASED); + + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_PADDLE1, + (pInReport->payload.deckState.ulButtonsH & STEAMDECK_HBUTTON_R4) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_PADDLE2, + (pInReport->payload.deckState.ulButtonsH & STEAMDECK_HBUTTON_L4) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_PADDLE3, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_R5) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_PADDLE4, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_L5) ? SDL_PRESSED : SDL_RELEASED); + + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_UP, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_DPAD_UP) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_DOWN, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_DPAD_DOWN) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_LEFT, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_DPAD_LEFT) ? SDL_PRESSED : SDL_RELEASED); + SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, + (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_DPAD_RIGHT) ? SDL_PRESSED : SDL_RELEASED); + ctx->last_button_state = pInReport->payload.deckState.ulButtons; + } + + SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, + (int)pInReport->payload.deckState.sTriggerRawL * 2 - 32768); + SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, + (int)pInReport->payload.deckState.sTriggerRawR * 2 - 32768); + + SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, + pInReport->payload.deckState.sLeftStickX); + SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, + -pInReport->payload.deckState.sLeftStickY); + SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, + pInReport->payload.deckState.sRightStickX); + SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, + -pInReport->payload.deckState.sRightStickY); + + ctx->sensor_timestamp_us += ctx->update_rate_us; + + values[0] = (pInReport->payload.deckState.sGyroX / 32768.0f) * (2000.0f * ((float)M_PI / 180.0f)); + values[1] = (pInReport->payload.deckState.sGyroZ / 32768.0f) * (2000.0f * ((float)M_PI / 180.0f)); + values[2] = (-pInReport->payload.deckState.sGyroY / 32768.0f) * (2000.0f * ((float)M_PI / 180.0f)); + SDL_PrivateJoystickSensor(joystick, SDL_SENSOR_GYRO, ctx->sensor_timestamp_us, values, 3); + + values[0] = (pInReport->payload.deckState.sAccelX / 32768.0f) * 2.0f * SDL_STANDARD_GRAVITY; + values[1] = (pInReport->payload.deckState.sAccelZ / 32768.0f) * 2.0f * SDL_STANDARD_GRAVITY; + values[2] = (-pInReport->payload.deckState.sAccelY / 32768.0f) * 2.0f * SDL_STANDARD_GRAVITY; + SDL_PrivateJoystickSensor(joystick, SDL_SENSOR_ACCEL, ctx->sensor_timestamp_us, values, 3); +} + /*****************************************************************************************************/ static void HIDAPI_DriverSteamDeck_RegisterHints(SDL_HintCallback callback, void *userdata) @@ -179,8 +262,8 @@ static SDL_bool HIDAPI_DriverSteamDeck_InitDevice(SDL_HIDAPI_Device *device) return SDL_FALSE; } - // Always 1kHz according to USB descriptor - ctx->update_rate_us = 1000; + // Always 1kHz according to USB descriptor, but actually about 4 ms. + ctx->update_rate_us = 4000; device->context = ctx; @@ -214,7 +297,6 @@ static SDL_bool HIDAPI_DriverSteamDeck_UpdateDevice(SDL_HIDAPI_Device *device) SDL_Joystick *joystick = NULL; int r; uint8_t data[64]; - float values[3]; ValveInReport_t *pInReport = (ValveInReport_t *)data; if (device->num_joysticks > 0) { @@ -233,95 +315,21 @@ static SDL_bool HIDAPI_DriverSteamDeck_UpdateDevice(SDL_HIDAPI_Device *device) } SDL_memset(data, 0, sizeof(data)); - r = SDL_hid_read(device->dev, data, sizeof(data)); - if (r == 0) { - return SDL_FALSE; - } else if (r <= 0) { - /* Failed to read from controller */ - HIDAPI_JoystickDisconnected(device, device->joysticks[0]); - return SDL_FALSE; - } - - if (!(r == 64 && pInReport->header.unReportVersion == k_ValveInReportMsgVersion && pInReport->header.ucType == ID_CONTROLLER_DECK_STATE && pInReport->header.ucLength == 64)) { - return SDL_FALSE; - } - // Uint64 timestamp = SDL_GetTicksNS(); + do { + r = SDL_hid_read(device->dev, data, sizeof(data)); - if (pInReport->payload.deckState.ulButtons != ctx->last_button_state) { - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_A, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_A) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_B, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_B) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_X, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_X) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_Y, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_Y) ? SDL_PRESSED : SDL_RELEASED); - - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_L) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_R) ? SDL_PRESSED : SDL_RELEASED); - - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_BACK, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_VIEW) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_START, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_MENU) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_GUIDE, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_STEAM) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_MISC1, - (pInReport->payload.deckState.ulButtonsH & STEAMDECK_HBUTTON_QAM) ? SDL_PRESSED : SDL_RELEASED); - - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSTICK, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_L3) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSTICK, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_R3) ? SDL_PRESSED : SDL_RELEASED); - - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_PADDLE1, - (pInReport->payload.deckState.ulButtonsH & STEAMDECK_HBUTTON_R4) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_PADDLE2, - (pInReport->payload.deckState.ulButtonsH & STEAMDECK_HBUTTON_L4) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_PADDLE3, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_R5) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_PADDLE4, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_L5) ? SDL_PRESSED : SDL_RELEASED); - - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_UP, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_DPAD_UP) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_DOWN, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_DPAD_DOWN) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_LEFT, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_DPAD_LEFT) ? SDL_PRESSED : SDL_RELEASED); - SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, - (pInReport->payload.deckState.ulButtonsL & STEAMDECK_LBUTTON_DPAD_RIGHT) ? SDL_PRESSED : SDL_RELEASED); - ctx->last_button_state = pInReport->payload.deckState.ulButtons; - } - - SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, - (int)pInReport->payload.deckState.sTriggerRawL * 2 - 32768); - SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, - (int)pInReport->payload.deckState.sTriggerRawR * 2 - 32768); - - SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, - pInReport->payload.deckState.sLeftStickX); - SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, - -pInReport->payload.deckState.sLeftStickY); - SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, - pInReport->payload.deckState.sRightStickX); - SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, - -pInReport->payload.deckState.sRightStickY); - - ctx->sensor_timestamp_us += ctx->update_rate_us; - - values[0] = (pInReport->payload.deckState.sGyroX / 32768.0f) * (2000.0f * ((float)M_PI / 180.0f)); - values[1] = (pInReport->payload.deckState.sGyroZ / 32768.0f) * (2000.0f * ((float)M_PI / 180.0f)); - values[2] = (-pInReport->payload.deckState.sGyroY / 32768.0f) * (2000.0f * ((float)M_PI / 180.0f)); - SDL_PrivateJoystickSensor(joystick, SDL_SENSOR_GYRO, ctx->sensor_timestamp_us, values, 3); - - values[0] = (pInReport->payload.deckState.sAccelX / 32768.0f) * 2.0f * SDL_STANDARD_GRAVITY; - values[1] = (pInReport->payload.deckState.sAccelZ / 32768.0f) * 2.0f * SDL_STANDARD_GRAVITY; - values[2] = (-pInReport->payload.deckState.sAccelY / 32768.0f) * 2.0f * SDL_STANDARD_GRAVITY; - SDL_PrivateJoystickSensor(joystick, SDL_SENSOR_ACCEL, ctx->sensor_timestamp_us, values, 3); + if (r < 0) { + /* Failed to read from controller */ + HIDAPI_JoystickDisconnected(device, device->joysticks[0]); + return SDL_FALSE; + } else if (r == 64 && + pInReport->header.unReportVersion == k_ValveInReportMsgVersion && + pInReport->header.ucType == ID_CONTROLLER_DECK_STATE && + pInReport->header.ucLength == 64) { + HIDAPI_DriverSteamDeck_HandleState(device, joystick, pInReport); + } + } while (r > 0); return SDL_TRUE; } diff --git a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_switch.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_switch.c index 45a2260d1b0..ab80858b7eb 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_switch.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_switch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -62,9 +62,7 @@ #define SWITCH_GYRO_SCALE 14.2842f #define SWITCH_ACCEL_SCALE 4096.f -#define SWITCH_GYRO_SCALE_OFFSET 13371.0f #define SWITCH_GYRO_SCALE_MULT 936.0f -#define SWITCH_ACCEL_SCALE_OFFSET 16384.0f #define SWITCH_ACCEL_SCALE_MULT 4.0f typedef enum @@ -332,12 +330,28 @@ typedef struct static int ReadInput(SDL_DriverSwitch_Context *ctx) { + int result; + /* Make sure we don't try to read at the same time a write is happening */ if (SDL_AtomicGet(&ctx->device->rumble_pending) > 0) { return 0; } - return SDL_hid_read_timeout(ctx->device->dev, ctx->m_rgucReadBuffer, sizeof(ctx->m_rgucReadBuffer), 0); + result = SDL_hid_read_timeout(ctx->device->dev, ctx->m_rgucReadBuffer, sizeof(ctx->m_rgucReadBuffer), 0); + + /* See if we can guess the initial input mode */ + if (result > 0 && !ctx->m_bInputOnly && !ctx->m_nInitialInputMode) { + switch (ctx->m_rgucReadBuffer[0]) { + case k_eSwitchInputReportIDs_FullControllerState: + case k_eSwitchInputReportIDs_FullControllerAndMcuState: + case k_eSwitchInputReportIDs_SimpleControllerState: + ctx->m_nInitialInputMode = ctx->m_rgucReadBuffer[0]; + break; + default: + break; + } + } + return result; } static int WriteOutput(SDL_DriverSwitch_Context *ctx, const Uint8 *data, int size) @@ -727,14 +741,12 @@ static void SDLCALL SDL_PlayerLEDHintChanged(void *userdata, const char *name, c } } -static Uint8 GetInitialInputMode(SDL_DriverSwitch_Context *ctx) +static void GetInitialInputMode(SDL_DriverSwitch_Context *ctx) { - Uint8 input_mode = 0; - - if (ReadInput(ctx) > 0) { - input_mode = ctx->m_rgucReadBuffer[0]; + if (!ctx->m_nInitialInputMode) { + /* This will set the initial input mode if it can */ + ReadInput(ctx); } - return input_mode; } static Uint8 GetDefaultInputMode(SDL_DriverSwitch_Context *ctx) @@ -803,6 +815,8 @@ static SDL_bool LoadStickCalibration(SDL_DriverSwitch_Context *ctx) SwitchSubcommandInputPacket_t *factory_reply = NULL; SwitchSPIOpData_t readUserParams; SwitchSPIOpData_t readFactoryParams; + const int MAX_ATTEMPTS = 3; + int attempt; /* Read User Calibration Info */ readUserParams.unAddress = k_unSPIStickUserCalibrationStartOffset; @@ -815,8 +829,19 @@ static SDL_bool LoadStickCalibration(SDL_DriverSwitch_Context *ctx) readFactoryParams.unAddress = k_unSPIStickFactoryCalibrationStartOffset; readFactoryParams.ucLength = k_unSPIStickFactoryCalibrationLength; - if (!WriteSubcommand(ctx, k_eSwitchSubcommandIDs_SPIFlashRead, (uint8_t *)&readFactoryParams, sizeof(readFactoryParams), &factory_reply)) { - return SDL_FALSE; + for (attempt = 0; ; ++attempt) { + if (!WriteSubcommand(ctx, k_eSwitchSubcommandIDs_SPIFlashRead, (uint8_t *)&readFactoryParams, sizeof(readFactoryParams), &factory_reply)) { + return SDL_FALSE; + } + + if (factory_reply->stickFactoryCalibration.opData.unAddress == k_unSPIStickFactoryCalibrationStartOffset) { + /* We successfully read the calibration data */ + break; + } + + if (attempt == MAX_ATTEMPTS) { + return SDL_FALSE; + } } /* Automatically select the user calibration if magic bytes are set */ @@ -898,6 +923,8 @@ static SDL_bool LoadIMUCalibration(SDL_DriverSwitch_Context *ctx) if (WriteSubcommand(ctx, k_eSwitchSubcommandIDs_SPIFlashRead, (uint8_t *)&readParams, sizeof(readParams), &reply)) { Uint8 *pIMUScale; Sint16 sAccelRawX, sAccelRawY, sAccelRawZ, sGyroRawX, sGyroRawY, sGyroRawZ; + Sint16 sAccelSensCoeffX, sAccelSensCoeffY, sAccelSensCoeffZ; + Sint16 sGyroSensCoeffX, sGyroSensCoeffY, sGyroSensCoeffZ; /* IMU scale gives us multipliers for converting raw values to real world values */ pIMUScale = reply->spiReadData.rgucReadData; @@ -906,10 +933,18 @@ static SDL_bool LoadIMUCalibration(SDL_DriverSwitch_Context *ctx) sAccelRawY = (pIMUScale[3] << 8) | pIMUScale[2]; sAccelRawZ = (pIMUScale[5] << 8) | pIMUScale[4]; + sAccelSensCoeffX = (pIMUScale[7] << 8) | pIMUScale[6]; + sAccelSensCoeffY = (pIMUScale[9] << 8) | pIMUScale[8]; + sAccelSensCoeffZ = (pIMUScale[11] << 8) | pIMUScale[10]; + sGyroRawX = (pIMUScale[13] << 8) | pIMUScale[12]; sGyroRawY = (pIMUScale[15] << 8) | pIMUScale[14]; sGyroRawZ = (pIMUScale[17] << 8) | pIMUScale[16]; + sGyroSensCoeffX = (pIMUScale[19] << 8) | pIMUScale[18]; + sGyroSensCoeffY = (pIMUScale[21] << 8) | pIMUScale[20]; + sGyroSensCoeffZ = (pIMUScale[23] << 8) | pIMUScale[22]; + /* Check for user calibration data. If it's present and set, it'll override the factory settings */ readParams.unAddress = k_unSPIIMUUserScaleStartOffset; readParams.ucLength = k_unSPIIMUUserScaleLength; @@ -926,14 +961,14 @@ static SDL_bool LoadIMUCalibration(SDL_DriverSwitch_Context *ctx) } /* Accelerometer scale */ - ctx->m_IMUScaleData.fAccelScaleX = SWITCH_ACCEL_SCALE_MULT / (SWITCH_ACCEL_SCALE_OFFSET - (float)sAccelRawX) * SDL_STANDARD_GRAVITY; - ctx->m_IMUScaleData.fAccelScaleY = SWITCH_ACCEL_SCALE_MULT / (SWITCH_ACCEL_SCALE_OFFSET - (float)sAccelRawY) * SDL_STANDARD_GRAVITY; - ctx->m_IMUScaleData.fAccelScaleZ = SWITCH_ACCEL_SCALE_MULT / (SWITCH_ACCEL_SCALE_OFFSET - (float)sAccelRawZ) * SDL_STANDARD_GRAVITY; + ctx->m_IMUScaleData.fAccelScaleX = SWITCH_ACCEL_SCALE_MULT / ((float)sAccelSensCoeffX - (float)sAccelRawX) * SDL_STANDARD_GRAVITY; + ctx->m_IMUScaleData.fAccelScaleY = SWITCH_ACCEL_SCALE_MULT / ((float)sAccelSensCoeffY - (float)sAccelRawY) * SDL_STANDARD_GRAVITY; + ctx->m_IMUScaleData.fAccelScaleZ = SWITCH_ACCEL_SCALE_MULT / ((float)sAccelSensCoeffZ - (float)sAccelRawZ) * SDL_STANDARD_GRAVITY; /* Gyro scale */ - ctx->m_IMUScaleData.fGyroScaleX = SWITCH_GYRO_SCALE_MULT / (SWITCH_GYRO_SCALE_OFFSET - (float)sGyroRawX) * (float)M_PI / 180.0f; - ctx->m_IMUScaleData.fGyroScaleY = SWITCH_GYRO_SCALE_MULT / (SWITCH_GYRO_SCALE_OFFSET - (float)sGyroRawY) * (float)M_PI / 180.0f; - ctx->m_IMUScaleData.fGyroScaleZ = SWITCH_GYRO_SCALE_MULT / (SWITCH_GYRO_SCALE_OFFSET - (float)sGyroRawZ) * (float)M_PI / 180.0f; + ctx->m_IMUScaleData.fGyroScaleX = SWITCH_GYRO_SCALE_MULT / ((float)sGyroSensCoeffX - (float)sGyroRawX) * (float)M_PI / 180.0f; + ctx->m_IMUScaleData.fGyroScaleY = SWITCH_GYRO_SCALE_MULT / ((float)sGyroSensCoeffY - (float)sGyroRawY) * (float)M_PI / 180.0f; + ctx->m_IMUScaleData.fGyroScaleZ = SWITCH_GYRO_SCALE_MULT / ((float)sGyroSensCoeffZ - (float)sGyroRawZ) * (float)M_PI / 180.0f; } else { /* Use default values */ @@ -955,15 +990,17 @@ static Sint16 ApplyStickCalibration(SDL_DriverSwitch_Context *ctx, int nStick, i { sRawValue -= ctx->m_StickCalData[nStick].axis[nAxis].sCenter; - if (sRawValue > ctx->m_StickExtents[nStick].axis[nAxis].sMax) { - ctx->m_StickExtents[nStick].axis[nAxis].sMax = sRawValue; - } - if (sRawValue < ctx->m_StickExtents[nStick].axis[nAxis].sMin) { - ctx->m_StickExtents[nStick].axis[nAxis].sMin = sRawValue; + if (sRawValue >= 0) { + if (sRawValue > ctx->m_StickExtents[nStick].axis[nAxis].sMax) { + ctx->m_StickExtents[nStick].axis[nAxis].sMax = sRawValue; + } + return (Sint16)HIDAPI_RemapVal(sRawValue, 0, ctx->m_StickExtents[nStick].axis[nAxis].sMax, 0, SDL_MAX_SINT16); + } else { + if (sRawValue < ctx->m_StickExtents[nStick].axis[nAxis].sMin) { + ctx->m_StickExtents[nStick].axis[nAxis].sMin = sRawValue; + } + return (Sint16)HIDAPI_RemapVal(sRawValue, ctx->m_StickExtents[nStick].axis[nAxis].sMin, 0, SDL_MIN_SINT16, 0); } - - return (Sint16)HIDAPI_RemapVal(sRawValue, ctx->m_StickExtents[nStick].axis[nAxis].sMin, ctx->m_StickExtents[nStick].axis[nAxis].sMax, - SDL_MIN_SINT16, SDL_MAX_SINT16); } static Sint16 ApplySimpleStickCalibration(SDL_DriverSwitch_Context *ctx, int nStick, int nAxis, Sint16 sRawValue) @@ -973,15 +1010,17 @@ static Sint16 ApplySimpleStickCalibration(SDL_DriverSwitch_Context *ctx, int nSt sRawValue -= usJoystickCenter; - if (sRawValue > ctx->m_SimpleStickExtents[nStick].axis[nAxis].sMax) { - ctx->m_SimpleStickExtents[nStick].axis[nAxis].sMax = sRawValue; - } - if (sRawValue < ctx->m_SimpleStickExtents[nStick].axis[nAxis].sMin) { - ctx->m_SimpleStickExtents[nStick].axis[nAxis].sMin = sRawValue; + if (sRawValue >= 0) { + if (sRawValue > ctx->m_SimpleStickExtents[nStick].axis[nAxis].sMax) { + ctx->m_SimpleStickExtents[nStick].axis[nAxis].sMax = sRawValue; + } + return (Sint16)HIDAPI_RemapVal(sRawValue, 0, ctx->m_SimpleStickExtents[nStick].axis[nAxis].sMax, 0, SDL_MAX_SINT16); + } else { + if (sRawValue < ctx->m_SimpleStickExtents[nStick].axis[nAxis].sMin) { + ctx->m_SimpleStickExtents[nStick].axis[nAxis].sMin = sRawValue; + } + return (Sint16)HIDAPI_RemapVal(sRawValue, ctx->m_SimpleStickExtents[nStick].axis[nAxis].sMin, 0, SDL_MIN_SINT16, 0); } - - return (Sint16)HIDAPI_RemapVal(sRawValue, ctx->m_SimpleStickExtents[nStick].axis[nAxis].sMin, ctx->m_SimpleStickExtents[nStick].axis[nAxis].sMax, - SDL_MIN_SINT16, SDL_MAX_SINT16); } static void SDLCALL SDL_GameControllerButtonReportingHintChanged(void *userdata, const char *name, const char *oldValue, const char *hint) @@ -1412,7 +1451,11 @@ static SDL_bool HIDAPI_DriverSwitch_OpenJoystick(SDL_HIDAPI_Device *device, SDL_ ctx->m_bSyncWrite = SDL_TRUE; if (!ctx->m_bInputOnly) { - ctx->m_nInitialInputMode = GetInitialInputMode(ctx); +#ifdef SDL_PLATFORM_MACOS + // Wait for the OS to finish its handshake with the controller + SDL_Delay(250); +#endif + GetInitialInputMode(ctx); ctx->m_nCurrentInputMode = ctx->m_nInitialInputMode; /* Initialize rumble data */ diff --git a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_wii.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_wii.c index 3b3d9944826..f28f2ab0321 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_wii.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_wii.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/hidapi/SDL_hidapi_xbox360.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_xbox360.c index 2917fffa7ba..189115e0ad8 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_xbox360.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_xbox360.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -84,21 +84,16 @@ static SDL_bool HIDAPI_DriverXbox360_IsSupportedDevice(SDL_HIDAPI_Device *device /* This is the chatpad or other input interface, not the Xbox 360 interface */ return SDL_FALSE; } -#ifdef __MACOSX__ - if (vendor_id == USB_VENDOR_MICROSOFT && product_id == USB_PRODUCT_XBOX360_WIRED_CONTROLLER && version == 1) { - /* This is the Steam Virtual Gamepad, which isn't supported by this driver */ - return SDL_FALSE; - } - /* Wired Xbox One controllers are handled by this driver, interfacing with - the 360Controller driver available from: - https://github.com/360Controller/360Controller/releases - - Bluetooth Xbox One controllers are handled by the SDL Xbox One driver - */ - if (SDL_IsJoystickBluetoothXboxOne(vendor_id, product_id)) { +#if defined(__MACOSX__) && defined(SDL_JOYSTICK_MFI) + if (SDL_IsJoystickSteamVirtualGamepad(vendor_id, product_id, version)) { + /* GCController support doesn't work with the Steam Virtual Gamepad */ + return SDL_TRUE; + } else { + /* On macOS you can't write output reports to wired XBox controllers, + so we'll just use the GCController support instead. + */ return SDL_FALSE; } - return (type == SDL_CONTROLLER_TYPE_XBOX360 || type == SDL_CONTROLLER_TYPE_XBOXONE) ? SDL_TRUE : SDL_FALSE; #else return (type == SDL_CONTROLLER_TYPE_XBOX360) ? SDL_TRUE : SDL_FALSE; #endif @@ -153,6 +148,13 @@ static SDL_bool HIDAPI_DriverXbox360_InitDevice(SDL_HIDAPI_Device *device) device->type = SDL_CONTROLLER_TYPE_XBOX360; + if (SDL_IsJoystickSteamVirtualGamepad(device->vendor_id, device->product_id, device->version) && + device->product_string && SDL_strncmp(device->product_string, "GamePad-", 8) == 0) { + int slot = 0; + SDL_sscanf(device->product_string, "GamePad-%d", &slot); + device->steam_virtual_gamepad_slot = (slot - 1); + } + return HIDAPI_JoystickConnected(device, NULL); } @@ -201,30 +203,6 @@ static SDL_bool HIDAPI_DriverXbox360_OpenJoystick(SDL_HIDAPI_Device *device, SDL static int HIDAPI_DriverXbox360_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble) { -#ifdef __MACOSX__ - if (SDL_IsJoystickBluetoothXboxOne(device->vendor_id, device->product_id)) { - Uint8 rumble_packet[] = { 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 }; - - rumble_packet[4] = (low_frequency_rumble >> 8); - rumble_packet[5] = (high_frequency_rumble >> 8); - - if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) { - return SDL_SetError("Couldn't send rumble packet"); - } - } else { - /* On Mac OS X the 360Controller driver uses this short report, - and we need to prefix it with a magic token so hidapi passes it through untouched - */ - Uint8 rumble_packet[] = { 'M', 'A', 'G', 'I', 'C', '0', 0x00, 0x04, 0x00, 0x00 }; - - rumble_packet[6 + 2] = (low_frequency_rumble >> 8); - rumble_packet[6 + 3] = (high_frequency_rumble >> 8); - - if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) { - return SDL_SetError("Couldn't send rumble packet"); - } - } -#else Uint8 rumble_packet[] = { 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; rumble_packet[3] = (low_frequency_rumble >> 8); @@ -233,7 +211,6 @@ static int HIDAPI_DriverXbox360_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Jo if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) { return SDL_SetError("Couldn't send rumble packet"); } -#endif return 0; } diff --git a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_xbox360w.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_xbox360w.c index 9c44085eb3c..19798ab1a9a 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_xbox360w.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_xbox360w.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/hidapi/SDL_hidapi_xboxone.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_xboxone.c index 497234a91d9..9ca02bf0a78 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapi_xboxone.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapi_xboxone.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -354,9 +354,12 @@ static SDL_bool HIDAPI_DriverXboxOne_IsEnabled(void) static SDL_bool HIDAPI_DriverXboxOne_IsSupportedDevice(SDL_HIDAPI_Device *device, const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol) { -#ifdef __MACOSX__ - /* Wired Xbox One controllers are handled by the 360Controller driver */ +#if defined(__MACOSX__) && defined(SDL_JOYSTICK_MFI) if (!SDL_IsJoystickBluetoothXboxOne(vendor_id, product_id)) { + /* On macOS we get a shortened version of the real report and + you can't write output reports for wired controllers, so + we'll just use the GCController support instead. + */ return SDL_FALSE; } #endif diff --git a/vs/sdl2/src/joystick/hidapi/SDL_hidapijoystick.c b/vs/sdl2/src/joystick/hidapi/SDL_hidapijoystick.c index 84767dca528..7bc52305e6a 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapijoystick.c +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapijoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -197,7 +197,13 @@ SDL_bool HIDAPI_SupportsPlaystationDetection(Uint16 vendor, Uint16 product) case USB_VENDOR_SHANWAN_ALT: return SDL_TRUE; case USB_VENDOR_THRUSTMASTER: - return SDL_TRUE; + /* Most of these are wheels, don't have the full set of effects, and + * at least in the case of the T248 and T300 RS, the hid-tmff2 driver + * puts them in a non-standard report mode and they can't be read. + * + * If these should use the HIDAPI driver, add them to controller_list.h + */ + return SDL_FALSE; case USB_VENDOR_ZEROPLUS: return SDL_TRUE; case 0x7545 /* SZ-MYPOWER */: @@ -280,6 +286,7 @@ static SDL_GameControllerType SDL_GetJoystickGameControllerProtocol(const char * 0x044f, /* Thrustmaster */ 0x045e, /* Microsoft */ 0x0738, /* Mad Catz */ + 0x0b05, /* ASUS */ 0x0e6f, /* PDP */ 0x0f0d, /* Hori */ 0x10f5, /* Turtle Beach */ @@ -815,11 +822,12 @@ SDL_bool HIDAPI_JoystickConnected(SDL_HIDAPI_Device *device, SDL_JoystickID *pJo ++SDL_HIDAPI_numjoysticks; - SDL_PrivateJoystickAdded(joystickID); - if (pJoystickID) { *pJoystickID = joystickID; } + + SDL_PrivateJoystickAdded(joystickID); + return SDL_TRUE; } @@ -883,10 +891,8 @@ static SDL_HIDAPI_Device *HIDAPI_AddDevice(const struct SDL_hid_device_info *inf return NULL; } device->magic = &SDL_HIDAPI_device_magic; - device->path = SDL_strdup(info->path); - if (!device->path) { - SDL_free(device); - return NULL; + if (info->path) { + device->path = SDL_strdup(info->path); } device->seen = SDL_TRUE; device->vendor_id = info->vendor_id; @@ -928,6 +934,7 @@ static SDL_HIDAPI_Device *HIDAPI_AddDevice(const struct SDL_hid_device_info *inf device->guid = SDL_CreateJoystickGUID(SDL_HARDWARE_BUS_USB, device->vendor_id, device->product_id, device->version, device->manufacturer_string, device->product_string, 'h', 0); device->joystick_type = SDL_JOYSTICK_TYPE_GAMECONTROLLER; device->type = SDL_GetJoystickGameControllerProtocol(device->name, device->vendor_id, device->product_id, device->interface_number, device->interface_class, device->interface_subclass, device->interface_protocol); + device->steam_virtual_gamepad_slot = -1; if (num_children > 0) { int i; @@ -1007,7 +1014,7 @@ static void HIDAPI_DelDevice(SDL_HIDAPI_Device *device) } } -static SDL_bool HIDAPI_CreateCombinedJoyCons() +static SDL_bool HIDAPI_CreateCombinedJoyCons(void) { SDL_HIDAPI_Device *device, *combined; SDL_HIDAPI_Device *joycons[2] = { NULL, NULL }; @@ -1379,6 +1386,12 @@ static const char *HIDAPI_JoystickGetDevicePath(int device_index) static int HIDAPI_JoystickGetDeviceSteamVirtualGamepadSlot(int device_index) { + SDL_HIDAPI_Device *device; + + device = HIDAPI_GetDeviceByIndex(device_index, NULL); + if (device) { + return device->steam_virtual_gamepad_slot; + } return -1; } diff --git a/vs/sdl2/src/joystick/hidapi/SDL_hidapijoystick_c.h b/vs/sdl2/src/joystick/hidapi/SDL_hidapijoystick_c.h index cd18730a83e..a46151594a3 100644 --- a/vs/sdl2/src/joystick/hidapi/SDL_hidapijoystick_c.h +++ b/vs/sdl2/src/joystick/hidapi/SDL_hidapijoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -47,7 +47,14 @@ #define SDL_JOYSTICK_HIDAPI_SHIELD /* Whether HIDAPI is enabled by default */ +#if defined(__ANDROID__) || \ + defined(__IPHONEOS__) || \ + defined(__TVOS__) +/* On Android, HIDAPI prompts for permissions and acquires exclusive access to the device, and on Apple mobile platforms it doesn't do anything except for handling Bluetooth Steam Controllers, so we'll leave it off by default. */ +#define SDL_HIDAPI_DEFAULT SDL_FALSE +#else #define SDL_HIDAPI_DEFAULT SDL_TRUE +#endif /* The maximum size of a USB packet for HID devices */ #define USB_PACKET_LENGTH 64 @@ -76,6 +83,7 @@ typedef struct _SDL_HIDAPI_Device SDL_bool is_bluetooth; SDL_JoystickType joystick_type; SDL_GameControllerType type; + int steam_virtual_gamepad_slot; struct _SDL_HIDAPI_DeviceDriver *driver; void *context; diff --git a/vs/sdl2/src/joystick/iphoneos/SDL_mfijoystick.m b/vs/sdl2/src/joystick/iphoneos/SDL_mfijoystick.m index 28ddca72348..6ff8e0e0bd3 100644 --- a/vs/sdl2/src/joystick/iphoneos/SDL_mfijoystick.m +++ b/vs/sdl2/src/joystick/iphoneos/SDL_mfijoystick.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -406,7 +406,8 @@ static BOOL IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCControlle device->is_switch_joyconL = IsControllerSwitchJoyConL(controller); device->is_switch_joyconR = IsControllerSwitchJoyConR(controller); #ifdef SDL_JOYSTICK_HIDAPI - if ((device->is_xbox && HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_XBOXONE)) || + if ((device->is_xbox && (HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_XBOXONE) || + HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_XBOX360))) || (device->is_ps4 && HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_PS4)) || (device->is_ps5 && HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_PS5)) || (device->is_switch_pro && HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO)) || @@ -418,6 +419,10 @@ static BOOL IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCControlle return FALSE; } #endif + if (device->is_xbox && SDL_strncmp(name, "GamePad-", 8) == 0) { + /* This is a Steam Virtual Gamepad, which isn't supported by GCController */ + return FALSE; + } CheckControllerSiriRemote(controller, &device->is_siri_remote); if (device->is_siri_remote && !SDL_GetHintBoolean(SDL_HINT_TV_REMOTE_AS_JOYSTICK, SDL_TRUE)) { @@ -437,7 +442,7 @@ static BOOL IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCControlle device->has_xbox_share_button = TRUE; } } -#endif // ENABLE_PHYSICAL_INPUT_PROFILE +#endif /* ENABLE_PHYSICAL_INPUT_PROFILE */ if (device->is_backbone_one) { vendor = USB_VENDOR_BACKBONE; @@ -1278,6 +1283,8 @@ static void IOS_MFIJoystickUpdate(SDL_Joystick *joystick) } #if TARGET_OS_TV else if (controller.microGamepad) { + Uint8 buttons[joystick->nbuttons]; + int button_count = 0; GCMicroGamepad *gamepad = controller.microGamepad; Sint16 axes[] = { @@ -1289,8 +1296,6 @@ static void IOS_MFIJoystickUpdate(SDL_Joystick *joystick) SDL_PrivateJoystickAxis(joystick, i, axes[i]); } - Uint8 buttons[joystick->nbuttons]; - int button_count = 0; buttons[button_count++] = gamepad.buttonA.isPressed; buttons[button_count++] = gamepad.buttonX.isPressed; buttons[button_count++] = (device->pause_button_pressed > 0); diff --git a/vs/sdl2/src/joystick/iphoneos/SDL_mfijoystick_c.h b/vs/sdl2/src/joystick/iphoneos/SDL_mfijoystick_c.h index 84a4e71a3a5..8eee5e8142c 100644 --- a/vs/sdl2/src/joystick/iphoneos/SDL_mfijoystick_c.h +++ b/vs/sdl2/src/joystick/iphoneos/SDL_mfijoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/linux/SDL_sysjoystick.c b/vs/sdl2/src/joystick/linux/SDL_sysjoystick.c index bb7c31cedc1..889d87c2d44 100644 --- a/vs/sdl2/src/joystick/linux/SDL_sysjoystick.c +++ b/vs/sdl2/src/joystick/linux/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/linux/SDL_sysjoystick_c.h b/vs/sdl2/src/joystick/linux/SDL_sysjoystick_c.h index 6d6ee69abc2..8b5c92709b4 100644 --- a/vs/sdl2/src/joystick/linux/SDL_sysjoystick_c.h +++ b/vs/sdl2/src/joystick/linux/SDL_sysjoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/n3ds/SDL_sysjoystick.c b/vs/sdl2/src/joystick/n3ds/SDL_sysjoystick.c index bfb1a37f1ec..274f0c1c48c 100644 --- a/vs/sdl2/src/joystick/n3ds/SDL_sysjoystick.c +++ b/vs/sdl2/src/joystick/n3ds/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/os2/SDL_os2joystick.c b/vs/sdl2/src/joystick/os2/SDL_os2joystick.c index 8df26ffe898..66de5a2daff 100644 --- a/vs/sdl2/src/joystick/os2/SDL_os2joystick.c +++ b/vs/sdl2/src/joystick/os2/SDL_os2joystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/ps2/SDL_sysjoystick.c b/vs/sdl2/src/joystick/ps2/SDL_sysjoystick.c index 8c0edb7a566..adc73ca7b0a 100644 --- a/vs/sdl2/src/joystick/ps2/SDL_sysjoystick.c +++ b/vs/sdl2/src/joystick/ps2/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -133,13 +133,13 @@ static int PS2_JoystickInit(void) } /* Function to return the number of joystick devices plugged in right now */ -static int PS2_JoystickGetCount() +static int PS2_JoystickGetCount(void) { return (int)enabled_pads; } /* Function to cause any queued joystick insertions to be processed */ -static void PS2_JoystickDetect() +static void PS2_JoystickDetect(void) { } diff --git a/vs/sdl2/src/joystick/psp/SDL_sysjoystick.c b/vs/sdl2/src/joystick/psp/SDL_sysjoystick.c index 3d7d53148c3..160e3f2d88f 100644 --- a/vs/sdl2/src/joystick/psp/SDL_sysjoystick.c +++ b/vs/sdl2/src/joystick/psp/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -96,6 +96,9 @@ static int PSP_JoystickInit(void) analog_map[127 - i] = -1 * analog_map[i + 128]; } + /* Fire off a joystick add event */ + SDL_PrivateJoystickAdded(0); + return 1; } diff --git a/vs/sdl2/src/joystick/steam/SDL_steamcontroller.c b/vs/sdl2/src/joystick/steam/SDL_steamcontroller.c index 04327e37ecb..b80dc866750 100644 --- a/vs/sdl2/src/joystick/steam/SDL_steamcontroller.c +++ b/vs/sdl2/src/joystick/steam/SDL_steamcontroller.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/steam/SDL_steamcontroller.h b/vs/sdl2/src/joystick/steam/SDL_steamcontroller.h index 35a72226c65..81131f2d6c5 100644 --- a/vs/sdl2/src/joystick/steam/SDL_steamcontroller.h +++ b/vs/sdl2/src/joystick/steam/SDL_steamcontroller.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/usb_ids.h b/vs/sdl2/src/joystick/usb_ids.h index 9cdcfa68ad7..9484ba50740 100644 --- a/vs/sdl2/src/joystick/usb_ids.h +++ b/vs/sdl2/src/joystick/usb_ids.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,6 +28,7 @@ #define USB_VENDOR_AMAZON 0x1949 #define USB_VENDOR_APPLE 0x05ac #define USB_VENDOR_ASTRO 0x9886 +#define USB_VENDOR_ASUS 0x0b05 #define USB_VENDOR_BACKBONE 0x358a #define USB_VENDOR_GAMESIR 0x3537 #define USB_VENDOR_DRAGONRISE 0x0079 @@ -53,6 +54,7 @@ #define USB_VENDOR_SONY 0x054c #define USB_VENDOR_THRUSTMASTER 0x044f #define USB_VENDOR_TURTLE_BEACH 0x10f5 +#define USB_VENDOR_SWITCH 0x2563 #define USB_VENDOR_VALVE 0x28de #define USB_VENDOR_ZEROPLUS 0x0c12 @@ -105,6 +107,7 @@ #define USB_PRODUCT_RAZER_WOLVERINE_V2_PRO_PS5_WIRELESS 0x100c #define USB_PRODUCT_RAZER_WOLVERINE_V2_PRO_XBOX_WIRED 0x1010 #define USB_PRODUCT_RAZER_WOLVERINE_V2_PRO_XBOX_WIRELESS 0x1011 +#define USB_PRODUCT_ROG_RAIKIRI 0x1a38 #define USB_PRODUCT_SAITEK_CYBORG_V3 0xf622 #define USB_PRODUCT_SHANWAN_DS3 0x0523 #define USB_PRODUCT_SONY_DS3 0x0268 @@ -114,6 +117,7 @@ #define USB_PRODUCT_SONY_DS4_STRIKEPAD 0x05c5 #define USB_PRODUCT_SONY_DS5 0x0ce6 #define USB_PRODUCT_SONY_DS5_EDGE 0x0df2 +#define USB_PRODUCT_SWITCH_RETROBIT_CONTROLLER 0x0575 #define USB_PRODUCT_THRUSTMASTER_ESWAPX_PRO 0xd012 #define USB_PRODUCT_TURTLE_BEACH_SERIES_X_REACT_R 0x7013 #define USB_PRODUCT_TURTLE_BEACH_SERIES_X_RECON 0x7009 diff --git a/vs/sdl2/src/joystick/virtual/SDL_virtualjoystick.c b/vs/sdl2/src/joystick/virtual/SDL_virtualjoystick.c index e5e9b38c39c..a8859c88036 100644 --- a/vs/sdl2/src/joystick/virtual/SDL_virtualjoystick.c +++ b/vs/sdl2/src/joystick/virtual/SDL_virtualjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/virtual/SDL_virtualjoystick_c.h b/vs/sdl2/src/joystick/virtual/SDL_virtualjoystick_c.h index 10c5cff4561..62cc41ec900 100644 --- a/vs/sdl2/src/joystick/virtual/SDL_virtualjoystick_c.h +++ b/vs/sdl2/src/joystick/virtual/SDL_virtualjoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/vita/SDL_sysjoystick.c b/vs/sdl2/src/joystick/vita/SDL_sysjoystick.c index 9da62c2b3d7..215a0329ed1 100644 --- a/vs/sdl2/src/joystick/vita/SDL_sysjoystick.c +++ b/vs/sdl2/src/joystick/vita/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -145,12 +145,12 @@ int VITA_JoystickInit(void) return SDL_numjoysticks; } -int VITA_JoystickGetCount() +int VITA_JoystickGetCount(void) { return SDL_numjoysticks; } -void VITA_JoystickDetect() +void VITA_JoystickDetect(void) { } diff --git a/vs/sdl2/src/joystick/windows/SDL_dinputjoystick.c b/vs/sdl2/src/joystick/windows/SDL_dinputjoystick.c index fb46445e109..73c26051ec8 100644 --- a/vs/sdl2/src/joystick/windows/SDL_dinputjoystick.c +++ b/vs/sdl2/src/joystick/windows/SDL_dinputjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/windows/SDL_dinputjoystick_c.h b/vs/sdl2/src/joystick/windows/SDL_dinputjoystick_c.h index 8e6d233df2d..79bbd222512 100644 --- a/vs/sdl2/src/joystick/windows/SDL_dinputjoystick_c.h +++ b/vs/sdl2/src/joystick/windows/SDL_dinputjoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/windows/SDL_rawinputjoystick.c b/vs/sdl2/src/joystick/windows/SDL_rawinputjoystick.c index c911efdb915..cd958b1ff9e 100644 --- a/vs/sdl2/src/joystick/windows/SDL_rawinputjoystick.c +++ b/vs/sdl2/src/joystick/windows/SDL_rawinputjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 2024 Sam Lantinga + Copyright (C) 2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -331,7 +331,7 @@ static struct static SDL_bool xinput_device_change = SDL_TRUE; static SDL_bool xinput_state_dirty = SDL_TRUE; -static void RAWINPUT_UpdateXInput() +static void RAWINPUT_UpdateXInput(void) { DWORD user_index; if (xinput_device_change) { @@ -371,7 +371,7 @@ static void RAWINPUT_MarkXInputSlotFree(Uint8 xinput_slot) xinput_state[xinput_slot].used = SDL_FALSE; } } -static SDL_bool RAWINPUT_MissingXInputSlot() +static SDL_bool RAWINPUT_MissingXInputSlot(void) { int ii; for (ii = 0; ii < SDL_arraysize(xinput_state); ii++) { @@ -556,7 +556,7 @@ static void RAWINPUT_MarkWindowsGamingInputSlotFree(WindowsGamingInputGamepadSta wgi_slot->correlated_context = NULL; } -static SDL_bool RAWINPUT_MissingWindowsGamingInputSlot() +static SDL_bool RAWINPUT_MissingWindowsGamingInputSlot(void) { int ii; for (ii = 0; ii < wgi_state.per_gamepad_count; ii++) { @@ -567,7 +567,7 @@ static SDL_bool RAWINPUT_MissingWindowsGamingInputSlot() return SDL_FALSE; } -static void RAWINPUT_UpdateWindowsGamingInput() +static void RAWINPUT_UpdateWindowsGamingInput(void) { int ii; if (!wgi_state.gamepad_statics) { @@ -908,9 +908,11 @@ static void RAWINPUT_AddDevice(HANDLE hDevice) char *product_string = NULL; WCHAR string[128]; + string[0] = 0; if (SDL_HidD_GetManufacturerString(hFile, string, sizeof(string))) { manufacturer_string = WIN_StringToUTF8W(string); } + string[0] = 0; if (SDL_HidD_GetProductString(hFile, string, sizeof(string))) { product_string = WIN_StringToUTF8W(string); } @@ -1050,7 +1052,7 @@ static int RAWINPUT_JoystickGetCount(void) return SDL_RAWINPUT_numjoysticks; } -SDL_bool RAWINPUT_IsEnabled() +SDL_bool RAWINPUT_IsEnabled(void) { return SDL_RAWINPUT_inited && !SDL_RAWINPUT_remote_desktop; } @@ -1290,6 +1292,7 @@ static int RAWINPUT_JoystickOpen(SDL_Joystick *joystick, int device_index) value_caps = SDL_stack_alloc(HIDP_VALUE_CAPS, caps.NumberInputValueCaps); if (SDL_HidP_GetValueCaps(HidP_Input, value_caps, &caps.NumberInputValueCaps, ctx->preparsed_data) != HIDP_STATUS_SUCCESS) { RAWINPUT_JoystickClose(joystick); + SDL_stack_free(button_caps); return SDL_SetError("Couldn't get device value capabilities"); } @@ -1318,6 +1321,8 @@ static int RAWINPUT_JoystickOpen(SDL_Joystick *joystick, int device_index) ctx->button_indices = (USHORT *)SDL_malloc(joystick->nbuttons * sizeof(*ctx->button_indices)); if (!ctx->button_indices) { RAWINPUT_JoystickClose(joystick); + SDL_stack_free(value_caps); + SDL_stack_free(button_caps); return SDL_OutOfMemory(); } @@ -1342,6 +1347,8 @@ static int RAWINPUT_JoystickOpen(SDL_Joystick *joystick, int device_index) joystick->nbuttons += 1; } + SDL_stack_free(button_caps); + for (i = 0; i < caps.NumberInputValueCaps; ++i) { HIDP_VALUE_CAPS *cap = &value_caps[i]; @@ -1371,6 +1378,7 @@ static int RAWINPUT_JoystickOpen(SDL_Joystick *joystick, int device_index) ctx->axis_indices = (USHORT *)SDL_malloc(joystick->naxes * sizeof(*ctx->axis_indices)); if (!ctx->axis_indices) { RAWINPUT_JoystickClose(joystick); + SDL_stack_free(value_caps); return SDL_OutOfMemory(); } @@ -1404,6 +1412,7 @@ static int RAWINPUT_JoystickOpen(SDL_Joystick *joystick, int device_index) ctx->hat_indices = (USHORT *)SDL_malloc(joystick->nhats * sizeof(*ctx->hat_indices)); if (!ctx->hat_indices) { RAWINPUT_JoystickClose(joystick); + SDL_stack_free(value_caps); return SDL_OutOfMemory(); } @@ -1422,6 +1431,8 @@ static int RAWINPUT_JoystickOpen(SDL_Joystick *joystick, int device_index) } } + SDL_stack_free(value_caps); + joystick->epowerlevel = SDL_JOYSTICK_POWER_UNKNOWN; return 0; @@ -2087,7 +2098,7 @@ int RAWINPUT_RegisterNotifications(HWND hWnd) return 0; } -int RAWINPUT_UnregisterNotifications() +int RAWINPUT_UnregisterNotifications(void) { int i; RAWINPUTDEVICE rid[SDL_arraysize(subscribed_devices)]; diff --git a/vs/sdl2/src/joystick/windows/SDL_rawinputjoystick_c.h b/vs/sdl2/src/joystick/windows/SDL_rawinputjoystick_c.h index 598a22d72b2..75bd5ff5e6a 100644 --- a/vs/sdl2/src/joystick/windows/SDL_rawinputjoystick_c.h +++ b/vs/sdl2/src/joystick/windows/SDL_rawinputjoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/windows/SDL_windows_gaming_input.c b/vs/sdl2/src/joystick/windows/SDL_windows_gaming_input.c index 656f742a8e0..9299ac528a3 100644 --- a/vs/sdl2/src/joystick/windows/SDL_windows_gaming_input.c +++ b/vs/sdl2/src/joystick/windows/SDL_windows_gaming_input.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -110,7 +110,7 @@ extern SDL_bool SDL_XINPUT_Enabled(void); extern SDL_bool SDL_DINPUT_JoystickPresent(Uint16 vendor, Uint16 product, Uint16 version); -static SDL_bool SDL_IsXInputDevice(Uint16 vendor, Uint16 product) +static SDL_bool SDL_IsXInputDevice(Uint16 vendor, Uint16 product, const char* name) { #if defined(SDL_JOYSTICK_XINPUT) || defined(SDL_JOYSTICK_RAWINPUT) PRAWINPUTDEVICELIST raw_devices = NULL; @@ -126,6 +126,13 @@ static SDL_bool SDL_IsXInputDevice(Uint16 vendor, Uint16 product) return SDL_FALSE; } + /* Sometimes we'll get a Windows.Gaming.Input callback before the raw input device is even in the list, + * so try to do some checks up front to catch these cases. */ + if (SDL_IsJoystickXboxOne(vendor, product) || + (name && SDL_strncmp(name, "Xbox ", 5) == 0)) { + return SDL_TRUE; + } + /* Go through RAWINPUT (WinXP and later) to find HID devices. */ if ((GetRawInputDeviceList(NULL, &raw_device_count, sizeof(RAWINPUTDEVICELIST)) == -1) || (!raw_device_count)) { return SDL_FALSE; /* oh well. */ @@ -216,7 +223,7 @@ static SDL_bool SDL_IsXInputDevice(Uint16 vendor, Uint16 product) return SDL_FALSE; } -static void WGI_LoadRawGameControllerStatics() +static void WGI_LoadRawGameControllerStatics(void) { WindowsCreateStringReference_t WindowsCreateStringReferenceFunc = NULL; RoGetActivationFactory_t RoGetActivationFactoryFunc = NULL; @@ -247,7 +254,7 @@ static void WGI_LoadRawGameControllerStatics() } } -static void WGI_LoadOtherControllerStatics() +static void WGI_LoadOtherControllerStatics(void) { WindowsCreateStringReference_t WindowsCreateStringReferenceFunc = NULL; RoGetActivationFactory_t RoGetActivationFactoryFunc = NULL; @@ -508,7 +515,7 @@ static HRESULT STDMETHODCALLTYPE IEventHandler_CRawGameControllerVtbl_InvokeAdde ignore_joystick = SDL_TRUE; } - if (!ignore_joystick && SDL_IsXInputDevice(vendor, product)) { + if (!ignore_joystick && SDL_IsXInputDevice(vendor, product, name)) { ignore_joystick = SDL_TRUE; } diff --git a/vs/sdl2/src/joystick/windows/SDL_windowsjoystick.c b/vs/sdl2/src/joystick/windows/SDL_windowsjoystick.c index 49e4c59757c..d2ea36d0c8d 100644 --- a/vs/sdl2/src/joystick/windows/SDL_windowsjoystick.c +++ b/vs/sdl2/src/joystick/windows/SDL_windowsjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -377,7 +377,7 @@ static int SDLCALL SDL_JoystickThread(void *_data) #ifdef SDL_JOYSTICK_XINPUT /* WM_DEVICECHANGE not working, poll for new XINPUT controllers */ SDL_CondWaitTimeout(s_condJoystickThread, s_mutexJoyStickEnum, 1000); - if (SDL_XINPUT_Enabled() && XINPUTGETCAPABILITIES) { + if (SDL_XINPUT_Enabled()) { /* scan for any change in XInput devices */ Uint8 userId; for (userId = 0; userId < XUSER_MAX_COUNT; userId++) { @@ -473,12 +473,12 @@ void WINDOWS_JoystickQuit(void); */ static int WINDOWS_JoystickInit(void) { - if (SDL_DINPUT_JoystickInit() < 0) { + if (SDL_XINPUT_JoystickInit() < 0) { WINDOWS_JoystickQuit(); return -1; } - if (SDL_XINPUT_JoystickInit() < 0) { + if (SDL_DINPUT_JoystickInit() < 0) { WINDOWS_JoystickQuit(); return -1; } diff --git a/vs/sdl2/src/joystick/windows/SDL_windowsjoystick_c.h b/vs/sdl2/src/joystick/windows/SDL_windowsjoystick_c.h index 18c39e80388..aeb534e57fb 100644 --- a/vs/sdl2/src/joystick/windows/SDL_windowsjoystick_c.h +++ b/vs/sdl2/src/joystick/windows/SDL_windowsjoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/joystick/windows/SDL_xinputjoystick.c b/vs/sdl2/src/joystick/windows/SDL_xinputjoystick.c index 0551b4e2f11..35f25e87536 100644 --- a/vs/sdl2/src/joystick/windows/SDL_xinputjoystick.c +++ b/vs/sdl2/src/joystick/windows/SDL_xinputjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -39,9 +39,9 @@ extern "C" { /* * Internal stuff. */ -static SDL_bool s_bXInputEnabled = SDL_TRUE; +static SDL_bool s_bXInputEnabled = SDL_FALSE; -static SDL_bool SDL_XInputUseOldJoystickMapping() +static SDL_bool SDL_XInputUseOldJoystickMapping(void) { #ifdef __WINRT__ /* TODO: remove this __WINRT__ block, but only after integrating with UWP/WinRT's HID API */ @@ -65,11 +65,13 @@ SDL_bool SDL_XINPUT_Enabled(void) int SDL_XINPUT_JoystickInit(void) { - s_bXInputEnabled = SDL_GetHintBoolean(SDL_HINT_XINPUT_ENABLED, SDL_TRUE); + SDL_bool enabled = SDL_GetHintBoolean(SDL_HINT_XINPUT_ENABLED, SDL_TRUE); - if (s_bXInputEnabled && WIN_LoadXInputDLL() < 0) { - s_bXInputEnabled = SDL_FALSE; /* oh well. */ + if (enabled && WIN_LoadXInputDLL() < 0) { + enabled = SDL_FALSE; /* oh well. */ } + s_bXInputEnabled = enabled; + return 0; } @@ -368,10 +370,10 @@ static void UpdateXInputJoystickState(SDL_Joystick *joystick, XINPUT_STATE *pXIn SDL_PrivateJoystickAxis(joystick, 0, pXInputState->Gamepad.sThumbLX); SDL_PrivateJoystickAxis(joystick, 1, ~pXInputState->Gamepad.sThumbLY); - //SDL_PrivateJoystickAxis(joystick, 2, ((int)pXInputState->Gamepad.bLeftTrigger * 257) - 32768); - //SDL_PrivateJoystickAxis(joystick, 3, pXInputState->Gamepad.sThumbRX); - //SDL_PrivateJoystickAxis(joystick, 4, ~pXInputState->Gamepad.sThumbRY); - // Fixes for DOSBox-X + // SDL_PrivateJoystickAxis(joystick, 2, ((int)pXInputState->Gamepad.bLeftTrigger * 257) - 32768); + // SDL_PrivateJoystickAxis(joystick, 3, pXInputState->Gamepad.sThumbRX); + // SDL_PrivateJoystickAxis(joystick, 4, ~pXInputState->Gamepad.sThumbRY); + // Fixes for DOSBox-X SDL_PrivateJoystickAxis(joystick, 2, pXInputState->Gamepad.sThumbRX); SDL_PrivateJoystickAxis(joystick, 3, ~pXInputState->Gamepad.sThumbRY); SDL_PrivateJoystickAxis(joystick, 4, ((int)pXInputState->Gamepad.bLeftTrigger * 257) - 32768); @@ -462,6 +464,7 @@ void SDL_XINPUT_JoystickClose(SDL_Joystick *joystick) void SDL_XINPUT_JoystickQuit(void) { if (s_bXInputEnabled) { + s_bXInputEnabled = SDL_FALSE; WIN_UnloadXInputDLL(); } } diff --git a/vs/sdl2/src/joystick/windows/SDL_xinputjoystick_c.h b/vs/sdl2/src/joystick/windows/SDL_xinputjoystick_c.h index 8eaa849a7c8..15094b95890 100644 --- a/vs/sdl2/src/joystick/windows/SDL_xinputjoystick_c.h +++ b/vs/sdl2/src/joystick/windows/SDL_xinputjoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/libm/math_libm.h b/vs/sdl2/src/libm/math_libm.h index 831a1847671..cf06850d687 100644 --- a/vs/sdl2/src/libm/math_libm.h +++ b/vs/sdl2/src/libm/math_libm.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/loadso/dlopen/SDL_sysloadso.c b/vs/sdl2/src/loadso/dlopen/SDL_sysloadso.c index f08209c1d73..b7f341c7d70 100644 --- a/vs/sdl2/src/loadso/dlopen/SDL_sysloadso.c +++ b/vs/sdl2/src/loadso/dlopen/SDL_sysloadso.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/loadso/dummy/SDL_sysloadso.c b/vs/sdl2/src/loadso/dummy/SDL_sysloadso.c index b03703b16e5..a21b15014cd 100644 --- a/vs/sdl2/src/loadso/dummy/SDL_sysloadso.c +++ b/vs/sdl2/src/loadso/dummy/SDL_sysloadso.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/loadso/os2/SDL_sysloadso.c b/vs/sdl2/src/loadso/os2/SDL_sysloadso.c index a48db99d5bb..f55631d2e42 100644 --- a/vs/sdl2/src/loadso/os2/SDL_sysloadso.c +++ b/vs/sdl2/src/loadso/os2/SDL_sysloadso.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/loadso/windows/SDL_sysloadso.c b/vs/sdl2/src/loadso/windows/SDL_sysloadso.c index 1fcee3d42e4..8ee6ee8f96d 100644 --- a/vs/sdl2/src/loadso/windows/SDL_sysloadso.c +++ b/vs/sdl2/src/loadso/windows/SDL_sysloadso.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -32,23 +32,23 @@ void *SDL_LoadObject(const char *sofile) { void *handle; - LPTSTR tstr; + LPWSTR wstr; if (!sofile) { SDL_InvalidParamError("sofile"); return NULL; } - tstr = WIN_UTF8ToString(sofile); + wstr = WIN_UTF8ToStringW(sofile); #ifdef __WINRT__ /* WinRT only publicly supports LoadPackagedLibrary() for loading .dll files. LoadLibrary() is a private API, and not available for apps (that can be published to MS' Windows Store.) */ - handle = (void *)LoadPackagedLibrary(tstr, 0); + handle = (void *)LoadPackagedLibrary(wstr, 0); #else - handle = (void *)LoadLibrary(tstr); + handle = (void *)LoadLibraryW(wstr); #endif - SDL_free(tstr); + SDL_free(wstr); /* Generate an error message if all loads failed */ if (!handle) { diff --git a/vs/sdl2/src/locale/SDL_locale.c b/vs/sdl2/src/locale/SDL_locale.c index ea3e858a10c..f80fd63436a 100644 --- a/vs/sdl2/src/locale/SDL_locale.c +++ b/vs/sdl2/src/locale/SDL_locale.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/locale/SDL_syslocale.h b/vs/sdl2/src/locale/SDL_syslocale.h index 32171604c53..fb163ee8b4b 100644 --- a/vs/sdl2/src/locale/SDL_syslocale.h +++ b/vs/sdl2/src/locale/SDL_syslocale.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/locale/android/SDL_syslocale.c b/vs/sdl2/src/locale/android/SDL_syslocale.c index 9a447d07862..5724eb74bfe 100644 --- a/vs/sdl2/src/locale/android/SDL_syslocale.c +++ b/vs/sdl2/src/locale/android/SDL_syslocale.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/locale/dummy/SDL_syslocale.c b/vs/sdl2/src/locale/dummy/SDL_syslocale.c index 89a7b1de865..d852d828433 100644 --- a/vs/sdl2/src/locale/dummy/SDL_syslocale.c +++ b/vs/sdl2/src/locale/dummy/SDL_syslocale.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/locale/emscripten/SDL_syslocale.c b/vs/sdl2/src/locale/emscripten/SDL_syslocale.c index 3b148acbf61..6972294bbdc 100644 --- a/vs/sdl2/src/locale/emscripten/SDL_syslocale.c +++ b/vs/sdl2/src/locale/emscripten/SDL_syslocale.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/locale/haiku/SDL_syslocale.cc b/vs/sdl2/src/locale/haiku/SDL_syslocale.cc index 016a17c6b99..619a8fb143c 100644 --- a/vs/sdl2/src/locale/haiku/SDL_syslocale.cc +++ b/vs/sdl2/src/locale/haiku/SDL_syslocale.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/locale/macosx/SDL_syslocale.m b/vs/sdl2/src/locale/macosx/SDL_syslocale.m index 57f40fef944..426599a9f5b 100644 --- a/vs/sdl2/src/locale/macosx/SDL_syslocale.m +++ b/vs/sdl2/src/locale/macosx/SDL_syslocale.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/locale/n3ds/SDL_syslocale.c b/vs/sdl2/src/locale/n3ds/SDL_syslocale.c index 1573f28bc03..38453447674 100644 --- a/vs/sdl2/src/locale/n3ds/SDL_syslocale.c +++ b/vs/sdl2/src/locale/n3ds/SDL_syslocale.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/locale/psp/SDL_syslocale.c b/vs/sdl2/src/locale/psp/SDL_syslocale.c new file mode 100644 index 00000000000..983df761d9d --- /dev/null +++ b/vs/sdl2/src/locale/psp/SDL_syslocale.c @@ -0,0 +1,77 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + 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. +*/ + +#include "../../SDL_internal.h" +#include "../SDL_syslocale.h" + +#include + +void SDL_SYS_GetPreferredLocales(char *buf, size_t buflen) +{ + int current_locale_int = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH; + + SDL_assert(buflen > 0); + + sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_LANGUAGE, ¤t_locale_int); + switch(current_locale_int) { + case PSP_SYSTEMPARAM_LANGUAGE_JAPANESE: + SDL_strlcpy(buf, "ja_JP", buflen); + break; + case PSP_SYSTEMPARAM_LANGUAGE_ENGLISH: + SDL_strlcpy(buf, "en_US", buflen); + break; + case PSP_SYSTEMPARAM_LANGUAGE_FRENCH: + SDL_strlcpy(buf, "fr_FR", buflen); + break; + case PSP_SYSTEMPARAM_LANGUAGE_SPANISH: + SDL_strlcpy(buf, "es_ES", buflen); + break; + case PSP_SYSTEMPARAM_LANGUAGE_GERMAN: + SDL_strlcpy(buf, "de_DE", buflen); + break; + case PSP_SYSTEMPARAM_LANGUAGE_ITALIAN: + SDL_strlcpy(buf, "it_IT", buflen); + break; + case PSP_SYSTEMPARAM_LANGUAGE_DUTCH: + SDL_strlcpy(buf, "nl_NL", buflen); + break; + case PSP_SYSTEMPARAM_LANGUAGE_PORTUGUESE: + SDL_strlcpy(buf, "pt_PT", buflen); + break; + case PSP_SYSTEMPARAM_LANGUAGE_RUSSIAN: + SDL_strlcpy(buf, "ru_RU", buflen); + break; + case PSP_SYSTEMPARAM_LANGUAGE_KOREAN: + SDL_strlcpy(buf, "ko_KR", buflen); + break; + case PSP_SYSTEMPARAM_LANGUAGE_CHINESE_TRADITIONAL: + SDL_strlcpy(buf, "zh_TW", buflen); + break; + case PSP_SYSTEMPARAM_LANGUAGE_CHINESE_SIMPLIFIED: + SDL_strlcpy(buf, "zh_CN", buflen); + break; + default: + SDL_strlcpy(buf, "en_US", buflen); + break; + } +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/src/locale/unix/SDL_syslocale.c b/vs/sdl2/src/locale/unix/SDL_syslocale.c index f1e59cc9651..146381efcdc 100644 --- a/vs/sdl2/src/locale/unix/SDL_syslocale.c +++ b/vs/sdl2/src/locale/unix/SDL_syslocale.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/locale/vita/SDL_syslocale.c b/vs/sdl2/src/locale/vita/SDL_syslocale.c index 780b9ad9a30..76cba99e4f5 100644 --- a/vs/sdl2/src/locale/vita/SDL_syslocale.c +++ b/vs/sdl2/src/locale/vita/SDL_syslocale.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/locale/windows/SDL_syslocale.c b/vs/sdl2/src/locale/windows/SDL_syslocale.c index 2449b156868..52766bd8115 100644 --- a/vs/sdl2/src/locale/windows/SDL_syslocale.c +++ b/vs/sdl2/src/locale/windows/SDL_syslocale.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/locale/winrt/SDL_syslocale.c b/vs/sdl2/src/locale/winrt/SDL_syslocale.c index 8fdeec7038a..3cd7420f501 100644 --- a/vs/sdl2/src/locale/winrt/SDL_syslocale.c +++ b/vs/sdl2/src/locale/winrt/SDL_syslocale.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/main/gdk/SDL_gdk_main.c b/vs/sdl2/src/main/gdk/SDL_gdk_main.c index 7bfd9cc9587..03383b2e5e8 100644 --- a/vs/sdl2/src/main/gdk/SDL_gdk_main.c +++ b/vs/sdl2/src/main/gdk/SDL_gdk_main.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/main/haiku/SDL_BApp.h b/vs/sdl2/src/main/haiku/SDL_BApp.h index 284445d986d..60272193faa 100644 --- a/vs/sdl2/src/main/haiku/SDL_BApp.h +++ b/vs/sdl2/src/main/haiku/SDL_BApp.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/main/haiku/SDL_BeApp.cc b/vs/sdl2/src/main/haiku/SDL_BeApp.cc index a736a9f0973..d2a1e354d70 100644 --- a/vs/sdl2/src/main/haiku/SDL_BeApp.cc +++ b/vs/sdl2/src/main/haiku/SDL_BeApp.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -118,9 +118,13 @@ static int StartBeLooper() } while ((!be_app) || be_app->IsLaunching()); } - /* Change working directory to that of executable */ + /* If started from the GUI, change working directory to that of executable. + * This matches behavior on other platforms and may be needed by some SDL software. + * Don't do it when started from terminal (TERM environment variable is set), because in that + * case, the current directory may be important, and after this there will be no way to know + * what it was. */ app_info info; - if (B_OK == be_app->GetAppInfo(&info)) { + if (NULL == getenv("TERM") && B_OK == be_app->GetAppInfo(&info)) { entry_ref ref = info.ref; BEntry entry; if (B_OK == entry.SetTo(&ref)) { diff --git a/vs/sdl2/src/main/haiku/SDL_BeApp.h b/vs/sdl2/src/main/haiku/SDL_BeApp.h index 8b8cc0f15e6..f35b22cec4d 100644 --- a/vs/sdl2/src/main/haiku/SDL_BeApp.h +++ b/vs/sdl2/src/main/haiku/SDL_BeApp.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/main/n3ds/SDL_n3ds_main.c b/vs/sdl2/src/main/n3ds/SDL_n3ds_main.c index 844416ff954..82f7754da98 100644 --- a/vs/sdl2/src/main/n3ds/SDL_n3ds_main.c +++ b/vs/sdl2/src/main/n3ds/SDL_n3ds_main.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/main/nacl/SDL_nacl_main.c b/vs/sdl2/src/main/nacl/SDL_nacl_main.c index 174b85b0a69..3e55c1a0db1 100644 --- a/vs/sdl2/src/main/nacl/SDL_nacl_main.c +++ b/vs/sdl2/src/main/nacl/SDL_nacl_main.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/main/ps2/SDL_ps2_main.c b/vs/sdl2/src/main/ps2/SDL_ps2_main.c index b237eea8c64..14fb0d704fc 100644 --- a/vs/sdl2/src/main/ps2/SDL_ps2_main.c +++ b/vs/sdl2/src/main/ps2/SDL_ps2_main.c @@ -23,7 +23,7 @@ #undef main #endif -__attribute__((weak)) void reset_IOP() +__attribute__((weak)) void reset_IOP(void) { SifInitRpc(0); while (!SifIopReset(NULL, 0)) { @@ -32,7 +32,7 @@ __attribute__((weak)) void reset_IOP() } } -static void prepare_IOP() +static void prepare_IOP(void) { reset_IOP(); SifInitRpc(0); @@ -41,12 +41,12 @@ static void prepare_IOP() sbv_patch_fileio(); } -static void init_drivers() +static void init_drivers(void) { init_ps2_filesystem_driver(); } -static void deinit_drivers() +static void deinit_drivers(void) { deinit_ps2_filesystem_driver(); } diff --git a/vs/sdl2/src/main/psp/SDL_psp_main.c b/vs/sdl2/src/main/psp/SDL_psp_main.c index 3d083cc75a9..c3555b3cf08 100644 --- a/vs/sdl2/src/main/psp/SDL_psp_main.c +++ b/vs/sdl2/src/main/psp/SDL_psp_main.c @@ -8,6 +8,7 @@ #include "SDL_main.h" #include #include +#include "../../events/SDL_events_c.h" #ifdef main #undef main @@ -28,7 +29,7 @@ PSP_MAIN_THREAD_ATTR(THREAD_ATTR_VFPU | THREAD_ATTR_USER); int sdl_psp_exit_callback(int arg1, int arg2, void *common) { - sceKernelExitGame(); + SDL_SendQuit(); return 0; } diff --git a/vs/sdl2/src/main/windows/version.rc b/vs/sdl2/src/main/windows/version.rc index 4862fdd649a..bcf991c8967 100644 --- a/vs/sdl2/src/main/windows/version.rc +++ b/vs/sdl2/src/main/windows/version.rc @@ -9,8 +9,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,30,4,0 - PRODUCTVERSION 2,30,4,0 + FILEVERSION 2,32,10,0 + PRODUCTVERSION 2,32,10,0 FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L @@ -23,12 +23,12 @@ BEGIN BEGIN VALUE "CompanyName", "\0" VALUE "FileDescription", "SDL\0" - VALUE "FileVersion", "2, 30, 4, 0\0" + VALUE "FileVersion", "2, 32, 10, 0\0" VALUE "InternalName", "SDL\0" - VALUE "LegalCopyright", "Copyright (C) 2024 Sam Lantinga\0" + VALUE "LegalCopyright", "Copyright (C) 2025 Sam Lantinga\0" VALUE "OriginalFilename", "SDL2.dll\0" VALUE "ProductName", "Simple DirectMedia Layer\0" - VALUE "ProductVersion", "2, 30, 4, 0\0" + VALUE "ProductVersion", "2, 32, 10, 0\0" END END BLOCK "VarFileInfo" diff --git a/vs/sdl2/src/misc/SDL_sysurl.h b/vs/sdl2/src/misc/SDL_sysurl.h index f2a4f9b925d..bd28b4d03a8 100644 --- a/vs/sdl2/src/misc/SDL_sysurl.h +++ b/vs/sdl2/src/misc/SDL_sysurl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/misc/SDL_url.c b/vs/sdl2/src/misc/SDL_url.c index 9876bf21a61..458c6c18669 100644 --- a/vs/sdl2/src/misc/SDL_url.c +++ b/vs/sdl2/src/misc/SDL_url.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/misc/android/SDL_sysurl.c b/vs/sdl2/src/misc/android/SDL_sysurl.c index e7e21d272b7..09f8d26aac5 100644 --- a/vs/sdl2/src/misc/android/SDL_sysurl.c +++ b/vs/sdl2/src/misc/android/SDL_sysurl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/misc/dummy/SDL_sysurl.c b/vs/sdl2/src/misc/dummy/SDL_sysurl.c index a5fa7cbab95..be5679d1974 100644 --- a/vs/sdl2/src/misc/dummy/SDL_sysurl.c +++ b/vs/sdl2/src/misc/dummy/SDL_sysurl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/misc/emscripten/SDL_sysurl.c b/vs/sdl2/src/misc/emscripten/SDL_sysurl.c index 87c1a0ca3da..8070d0e1482 100644 --- a/vs/sdl2/src/misc/emscripten/SDL_sysurl.c +++ b/vs/sdl2/src/misc/emscripten/SDL_sysurl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/misc/haiku/SDL_sysurl.cc b/vs/sdl2/src/misc/haiku/SDL_sysurl.cc index 85fd622a011..5183234c756 100644 --- a/vs/sdl2/src/misc/haiku/SDL_sysurl.cc +++ b/vs/sdl2/src/misc/haiku/SDL_sysurl.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/misc/ios/SDL_sysurl.m b/vs/sdl2/src/misc/ios/SDL_sysurl.m index 76363b50dc8..08722ba9e1b 100644 --- a/vs/sdl2/src/misc/ios/SDL_sysurl.m +++ b/vs/sdl2/src/misc/ios/SDL_sysurl.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,10 +26,19 @@ int SDL_SYS_OpenURL(const char *url) { @autoreleasepool { - NSString *nsstr = [NSString stringWithUTF8String:url]; NSURL *nsurl = [NSURL URLWithString:nsstr]; - return [[UIApplication sharedApplication] openURL:nsurl] ? 0 : -1; + if (![[UIApplication sharedApplication] canOpenURL:nsurl]) { + return SDL_SetError("No handler registered for this type of URL"); + } + if (@available(iOS 10.0, tvOS 10.0, *)) { + [[UIApplication sharedApplication] openURL:nsurl options:@{} completionHandler:^(BOOL success) {}]; + } else { + #ifndef SDL_PLATFORM_VISIONOS /* Fallback is never available in any version of VisionOS (but correct API always is). */ + [[UIApplication sharedApplication] openURL:nsurl]; + #endif + } + return 0; } } diff --git a/vs/sdl2/src/misc/macosx/SDL_sysurl.m b/vs/sdl2/src/misc/macosx/SDL_sysurl.m index d6088d1330b..f2d445d23d2 100644 --- a/vs/sdl2/src/misc/macosx/SDL_sysurl.m +++ b/vs/sdl2/src/misc/macosx/SDL_sysurl.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/misc/riscos/SDL_sysurl.c b/vs/sdl2/src/misc/riscos/SDL_sysurl.c index bbb78c9ce5e..28ed4911d44 100644 --- a/vs/sdl2/src/misc/riscos/SDL_sysurl.c +++ b/vs/sdl2/src/misc/riscos/SDL_sysurl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/misc/unix/SDL_sysurl.c b/vs/sdl2/src/misc/unix/SDL_sysurl.c index 050446df58e..42218a79fdf 100644 --- a/vs/sdl2/src/misc/unix/SDL_sysurl.c +++ b/vs/sdl2/src/misc/unix/SDL_sysurl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/misc/vita/SDL_sysurl.c b/vs/sdl2/src/misc/vita/SDL_sysurl.c index fca6b2f3267..8530cdefe04 100644 --- a/vs/sdl2/src/misc/vita/SDL_sysurl.c +++ b/vs/sdl2/src/misc/vita/SDL_sysurl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/misc/windows/SDL_sysurl.c b/vs/sdl2/src/misc/windows/SDL_sysurl.c index 8462babe5ef..04c3134f739 100644 --- a/vs/sdl2/src/misc/windows/SDL_sysurl.c +++ b/vs/sdl2/src/misc/windows/SDL_sysurl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/misc/winrt/SDL_sysurl.cpp b/vs/sdl2/src/misc/winrt/SDL_sysurl.cpp index f435ab97d1a..32c412df0bd 100644 --- a/vs/sdl2/src/misc/winrt/SDL_sysurl.cpp +++ b/vs/sdl2/src/misc/winrt/SDL_sysurl.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/SDL_power.c b/vs/sdl2/src/power/SDL_power.c index a64cace49cb..ab4e4c995b8 100644 --- a/vs/sdl2/src/power/SDL_power.c +++ b/vs/sdl2/src/power/SDL_power.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/SDL_syspower.h b/vs/sdl2/src/power/SDL_syspower.h index 25b22fc1cbf..480c39d0b16 100644 --- a/vs/sdl2/src/power/SDL_syspower.h +++ b/vs/sdl2/src/power/SDL_syspower.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/android/SDL_syspower.c b/vs/sdl2/src/power/android/SDL_syspower.c index 3da49e5d8a8..9bdcdd4bd04 100644 --- a/vs/sdl2/src/power/android/SDL_syspower.c +++ b/vs/sdl2/src/power/android/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/emscripten/SDL_syspower.c b/vs/sdl2/src/power/emscripten/SDL_syspower.c index aed93b0c41f..18a2699615e 100644 --- a/vs/sdl2/src/power/emscripten/SDL_syspower.c +++ b/vs/sdl2/src/power/emscripten/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/haiku/SDL_syspower.c b/vs/sdl2/src/power/haiku/SDL_syspower.c index ec3d4b9f5d5..10b86d976d5 100644 --- a/vs/sdl2/src/power/haiku/SDL_syspower.c +++ b/vs/sdl2/src/power/haiku/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/linux/SDL_syspower.c b/vs/sdl2/src/power/linux/SDL_syspower.c index 7899e3d1909..8e4860b6914 100644 --- a/vs/sdl2/src/power/linux/SDL_syspower.c +++ b/vs/sdl2/src/power/linux/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/macosx/SDL_syspower.c b/vs/sdl2/src/power/macosx/SDL_syspower.c index a3881f37461..c01de19d92b 100644 --- a/vs/sdl2/src/power/macosx/SDL_syspower.c +++ b/vs/sdl2/src/power/macosx/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/n3ds/SDL_syspower.c b/vs/sdl2/src/power/n3ds/SDL_syspower.c index 9b5555ee1ba..4c369b236b4 100644 --- a/vs/sdl2/src/power/n3ds/SDL_syspower.c +++ b/vs/sdl2/src/power/n3ds/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/psp/SDL_syspower.c b/vs/sdl2/src/power/psp/SDL_syspower.c index 4b9d1453113..8b8204fe6a8 100644 --- a/vs/sdl2/src/power/psp/SDL_syspower.c +++ b/vs/sdl2/src/power/psp/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/uikit/SDL_syspower.h b/vs/sdl2/src/power/uikit/SDL_syspower.h index 9d5c6a88bd4..02bd7b2a397 100644 --- a/vs/sdl2/src/power/uikit/SDL_syspower.h +++ b/vs/sdl2/src/power/uikit/SDL_syspower.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/uikit/SDL_syspower.m b/vs/sdl2/src/power/uikit/SDL_syspower.m index d366d6548cd..26ddf03d611 100644 --- a/vs/sdl2/src/power/uikit/SDL_syspower.m +++ b/vs/sdl2/src/power/uikit/SDL_syspower.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -61,6 +61,7 @@ SDL_bool SDL_GetPowerInfo_UIKit(SDL_PowerState *state, int *seconds, int *percen #else /* TARGET_OS_TV */ @autoreleasepool { UIDevice *uidev = [UIDevice currentDevice]; + const float level = uidev.batteryLevel; if (!SDL_UIKitLastPowerInfoQuery) { SDL_assert(uidev.isBatteryMonitoringEnabled == NO); @@ -95,7 +96,6 @@ SDL_bool SDL_GetPowerInfo_UIKit(SDL_PowerState *state, int *seconds, int *percen break; } - const float level = uidev.batteryLevel; *percent = ((level < 0.0f) ? -1 : ((int)((level * 100) + 0.5f))); } #endif /* TARGET_OS_TV */ diff --git a/vs/sdl2/src/power/vita/SDL_syspower.c b/vs/sdl2/src/power/vita/SDL_syspower.c index 644b72a4253..7d870b2278a 100644 --- a/vs/sdl2/src/power/vita/SDL_syspower.c +++ b/vs/sdl2/src/power/vita/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/windows/SDL_syspower.c b/vs/sdl2/src/power/windows/SDL_syspower.c index 58fa9a8eab6..c20e8e05e51 100644 --- a/vs/sdl2/src/power/windows/SDL_syspower.c +++ b/vs/sdl2/src/power/windows/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/power/winrt/SDL_syspower.cpp b/vs/sdl2/src/power/winrt/SDL_syspower.cpp index 1fc971fac44..3e1951c427a 100644 --- a/vs/sdl2/src/power/winrt/SDL_syspower.cpp +++ b/vs/sdl2/src/power/winrt/SDL_syspower.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/SDL_d3dmath.c b/vs/sdl2/src/render/SDL_d3dmath.c index 021b8c2eec9..e348efea2a0 100644 --- a/vs/sdl2/src/render/SDL_d3dmath.c +++ b/vs/sdl2/src/render/SDL_d3dmath.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/SDL_d3dmath.h b/vs/sdl2/src/render/SDL_d3dmath.h index 9ef2f53ed48..a0e04b2b21a 100644 --- a/vs/sdl2/src/render/SDL_d3dmath.h +++ b/vs/sdl2/src/render/SDL_d3dmath.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/SDL_render.c b/vs/sdl2/src/render/SDL_render.c index f7fcc52c995..cc3d16959bc 100644 --- a/vs/sdl2/src/render/SDL_render.c +++ b/vs/sdl2/src/render/SDL_render.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -47,12 +47,19 @@ this should probably be removed at some point in the future. --ryan. */ #define SDL_WINDOWRENDERDATA "_SDL_WindowRenderData" -#define CHECK_RENDERER_MAGIC(renderer, retval) \ +#define CHECK_RENDERER_MAGIC_BUT_NOT_DESTROYED_FLAG(renderer, retval) \ if (!renderer || renderer->magic != &renderer_magic) { \ SDL_InvalidParamError("renderer"); \ return retval; \ } +#define CHECK_RENDERER_MAGIC(renderer, retval) \ + CHECK_RENDERER_MAGIC_BUT_NOT_DESTROYED_FLAG(renderer, retval); \ + if (renderer->destroyed) { \ + SDL_SetError("Renderer's window has been destroyed, can't use further"); \ + return retval; \ + } + #define CHECK_TEXTURE_MAGIC(texture, retval) \ if (!texture || texture->magic != &texture_magic) { \ SDL_InvalidParamError("texture"); \ @@ -954,6 +961,7 @@ SDL_Renderer *SDL_CreateRenderer(SDL_Window *window, int index, Uint32 flags) int n = SDL_GetNumRenderDrivers(); SDL_bool batching = SDL_TRUE; const char *hint; + int rc = -1; #if defined(__ANDROID__) Android_ActivityMutex_Lock_Running(); @@ -974,6 +982,14 @@ SDL_Renderer *SDL_CreateRenderer(SDL_Window *window, int index, Uint32 flags) goto error; } + renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(*renderer)); + if (!renderer) { + SDL_OutOfMemory(); + goto error; + } + + renderer->magic = &renderer_magic; + hint = SDL_GetHint(SDL_HINT_RENDER_VSYNC); if (hint && *hint) { if (SDL_GetHintBoolean(SDL_HINT_RENDER_VSYNC, SDL_TRUE)) { @@ -991,30 +1007,36 @@ SDL_Renderer *SDL_CreateRenderer(SDL_Window *window, int index, Uint32 flags) if (SDL_strcasecmp(hint, driver->info.name) == 0) { /* Create a new renderer instance */ - renderer = driver->CreateRenderer(window, flags); - if (renderer) { + rc = driver->CreateRenderer(renderer, window, flags); + if (rc == 0) { batching = SDL_FALSE; + } else { + SDL_zerop(renderer); /* make sure we don't leave function pointers from a previous CreateRenderer() in this struct. */ + renderer->magic = &renderer_magic; } break; } } } - if (!renderer) { + if (rc == -1) { for (index = 0; index < n; ++index) { const SDL_RenderDriver *driver = render_drivers[index]; if ((driver->info.flags & flags) == flags) { /* Create a new renderer instance */ - renderer = driver->CreateRenderer(window, flags); - if (renderer) { + rc = driver->CreateRenderer(renderer, window, flags); + if (rc == 0) { /* Yay, we got one! */ break; + } else { + SDL_zerop(renderer); /* make sure we don't leave function pointers from a previous CreateRenderer() in this struct. */ + renderer->magic = &renderer_magic; } } } } - if (!renderer) { + if (rc == -1) { SDL_SetError("Couldn't find matching render driver"); goto error; } @@ -1025,9 +1047,9 @@ SDL_Renderer *SDL_CreateRenderer(SDL_Window *window, int index, Uint32 flags) goto error; } /* Create a new renderer instance */ - renderer = render_drivers[index]->CreateRenderer(window, flags); + rc = render_drivers[index]->CreateRenderer(renderer, window, flags); batching = SDL_FALSE; - if (!renderer) { + if (rc == -1) { goto error; } } @@ -1108,6 +1130,7 @@ SDL_Renderer *SDL_CreateRenderer(SDL_Window *window, int index, Uint32 flags) return renderer; error: + SDL_free(renderer); #if defined(__ANDROID__) Android_ActivityMutex_Unlock(); @@ -1124,12 +1147,23 @@ SDL_Renderer *SDL_CreateSoftwareRenderer(SDL_Surface *surface) { #if SDL_VIDEO_RENDER_SW SDL_Renderer *renderer; + int rc; - renderer = SW_CreateRendererForSurface(surface); + renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(*renderer)); + if (!renderer) { + SDL_OutOfMemory(); + return NULL; + } - if (renderer) { + renderer->magic = &renderer_magic; + + rc = SW_CreateRendererForSurface(renderer, surface); + + if (rc == -1) { + SDL_free(renderer); + renderer = NULL; + } else { VerifyDrawQueueFunctions(renderer); - renderer->magic = &renderer_magic; renderer->target_mutex = SDL_CreateMutex(); renderer->scale.x = 1.0f; renderer->scale.y = 1.0f; @@ -4318,11 +4352,14 @@ void SDL_DestroyTexture(SDL_Texture *texture) SDL_free(texture); } -void SDL_DestroyRenderer(SDL_Renderer *renderer) +void SDL_DestroyRendererWithoutFreeing(SDL_Renderer *renderer) { SDL_RenderCommand *cmd; - CHECK_RENDERER_MAGIC(renderer, ); + SDL_assert(renderer != NULL); + SDL_assert(!renderer->destroyed); + + renderer->destroyed = SDL_TRUE; SDL_DelEventWatch(SDL_RendererEventWatch, renderer); @@ -4357,9 +4394,6 @@ void SDL_DestroyRenderer(SDL_Renderer *renderer) SDL_SetWindowData(renderer->window, SDL_WINDOWRENDERDATA, NULL); } - /* It's no longer magical... */ - renderer->magic = NULL; - /* Free the target mutex */ SDL_DestroyMutex(renderer->target_mutex); renderer->target_mutex = NULL; @@ -4368,6 +4402,22 @@ void SDL_DestroyRenderer(SDL_Renderer *renderer) renderer->DestroyRenderer(renderer); } +void SDL_DestroyRenderer(SDL_Renderer *renderer) +{ + CHECK_RENDERER_MAGIC_BUT_NOT_DESTROYED_FLAG(renderer,); + + /* if we've already destroyed the renderer through SDL_DestroyWindow, we just need + to free the renderer pointer. This lets apps destroy the window and renderer + in either order. */ + if (!renderer->destroyed) { + SDL_DestroyRendererWithoutFreeing(renderer); + renderer->magic = NULL; // It's no longer magical... + } + + SDL_free(renderer); +} + + int SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh) { SDL_Renderer *renderer; diff --git a/vs/sdl2/src/render/SDL_sysrender.h b/vs/sdl2/src/render/SDL_sysrender.h index a4eef4d7d96..bab41e7729e 100644 --- a/vs/sdl2/src/render/SDL_sysrender.h +++ b/vs/sdl2/src/render/SDL_sysrender.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -282,13 +282,15 @@ struct SDL_Renderer size_t vertex_data_used; size_t vertex_data_allocation; + SDL_bool destroyed; /* already destroyed by SDL_DestroyWindow; just free this struct in SDL_DestroyRenderer. */ + void *driverdata; }; /* Define the SDL render driver structure */ struct SDL_RenderDriver { - SDL_Renderer *(*CreateRenderer)(SDL_Window *window, Uint32 flags); + int (*CreateRenderer)(SDL_Renderer *renderer, SDL_Window *window, Uint32 flags); /* Info about the renderer capabilities */ SDL_RendererInfo info; @@ -324,6 +326,9 @@ extern void *SDL_AllocateRenderVertices(SDL_Renderer *renderer, const size_t num extern int SDL_PrivateLowerBlitScaled(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect, SDL_ScaleMode scaleMode); extern int SDL_PrivateUpperBlitScaled(SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect, SDL_ScaleMode scaleMode); +/* Let the video subsystem destroy a renderer without making its pointer invalid. */ +extern void SDL_DestroyRendererWithoutFreeing(SDL_Renderer *renderer); + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/vs/sdl2/src/render/SDL_yuv_sw.c b/vs/sdl2/src/render/SDL_yuv_sw.c index 903279b3db6..203306f3354 100644 --- a/vs/sdl2/src/render/SDL_yuv_sw.c +++ b/vs/sdl2/src/render/SDL_yuv_sw.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/SDL_yuv_sw_c.h b/vs/sdl2/src/render/SDL_yuv_sw_c.h index c123c51691a..0c35f9d8ef1 100644 --- a/vs/sdl2/src/render/SDL_yuv_sw_c.h +++ b/vs/sdl2/src/render/SDL_yuv_sw_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/direct3d/SDL_render_d3d.c b/vs/sdl2/src/render/direct3d/SDL_render_d3d.c index f117bd664d1..3a336731062 100644 --- a/vs/sdl2/src/render/direct3d/SDL_render_d3d.c +++ b/vs/sdl2/src/render/direct3d/SDL_render_d3d.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -1447,7 +1447,6 @@ static void D3D_DestroyRenderer(SDL_Renderer *renderer) } SDL_free(data); } - SDL_free(renderer); } static int D3D_Reset(SDL_Renderer *renderer) @@ -1547,9 +1546,8 @@ static int D3D_SetVSync(SDL_Renderer *renderer, const int vsync) return 0; } -SDL_Renderer *D3D_CreateRenderer(SDL_Window *window, Uint32 flags) +int D3D_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32 flags) { - SDL_Renderer *renderer; D3D_RenderData *data; SDL_SysWMinfo windowinfo; HRESULT result; @@ -1562,24 +1560,14 @@ SDL_Renderer *D3D_CreateRenderer(SDL_Window *window, Uint32 flags) SDL_DisplayMode fullscreen_mode; int displayIndex; - renderer = (SDL_Renderer *) SDL_calloc(1, sizeof(*renderer)); - if (!renderer) { - SDL_OutOfMemory(); - return NULL; - } - data = (D3D_RenderData *)SDL_calloc(1, sizeof(*data)); if (!data) { - SDL_free(renderer); - SDL_OutOfMemory(); - return NULL; + return SDL_OutOfMemory(); } if (!D3D_LoadDLL(&data->d3dDLL, &data->d3d)) { - SDL_free(renderer); SDL_free(data); - SDL_SetError("Unable to create Direct3D interface"); - return NULL; + return SDL_SetError("Unable to create Direct3D interface"); } renderer->WindowEvent = D3D_WindowEvent; @@ -1610,7 +1598,11 @@ SDL_Renderer *D3D_CreateRenderer(SDL_Window *window, Uint32 flags) renderer->driverdata = data; SDL_VERSION(&windowinfo.version); - SDL_GetWindowWMInfo(window, &windowinfo); + if (!SDL_GetWindowWMInfo(window, &windowinfo) || + windowinfo.subsystem != SDL_SYSWM_WINDOWS) { + SDL_free(data); + return SDL_SetError("Couldn't get window handle"); + } window_flags = SDL_GetWindowFlags(window); SDL_GetWindowSizeInPixels(window, &w, &h); @@ -1662,23 +1654,20 @@ SDL_Renderer *D3D_CreateRenderer(SDL_Window *window, Uint32 flags) &pparams, &data->device); if (FAILED(result)) { D3D_DestroyRenderer(renderer); - D3D_SetError("CreateDevice()", result); - return NULL; + return D3D_SetError("CreateDevice()", result); } /* Get presentation parameters to fill info */ result = IDirect3DDevice9_GetSwapChain(data->device, 0, &chain); if (FAILED(result)) { D3D_DestroyRenderer(renderer); - D3D_SetError("GetSwapChain()", result); - return NULL; + return D3D_SetError("GetSwapChain()", result); } result = IDirect3DSwapChain9_GetPresentParameters(chain, &pparams); if (FAILED(result)) { IDirect3DSwapChain9_Release(chain); D3D_DestroyRenderer(renderer); - D3D_SetError("GetPresentParameters()", result); - return NULL; + return D3D_SetError("GetPresentParameters()", result); } IDirect3DSwapChain9_Release(chain); if (pparams.PresentationInterval == D3DPRESENT_INTERVAL_ONE) { @@ -1720,7 +1709,7 @@ SDL_Renderer *D3D_CreateRenderer(SDL_Window *window, Uint32 flags) data->drawstate.cliprect_enabled_dirty = SDL_TRUE; data->drawstate.blend = SDL_BLENDMODE_INVALID; - return renderer; + return 0; } SDL_RenderDriver D3D_RenderDriver = { diff --git a/vs/sdl2/src/render/direct3d/SDL_shaders_d3d.c b/vs/sdl2/src/render/direct3d/SDL_shaders_d3d.c index 2f55d80ca75..9c5835adc8e 100644 --- a/vs/sdl2/src/render/direct3d/SDL_shaders_d3d.c +++ b/vs/sdl2/src/render/direct3d/SDL_shaders_d3d.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/direct3d/SDL_shaders_d3d.h b/vs/sdl2/src/render/direct3d/SDL_shaders_d3d.h index 89cd1ea604a..389a1228d10 100644 --- a/vs/sdl2/src/render/direct3d/SDL_shaders_d3d.h +++ b/vs/sdl2/src/render/direct3d/SDL_shaders_d3d.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/direct3d11/SDL_render_d3d11.c b/vs/sdl2/src/render/direct3d11/SDL_render_d3d11.c index 8249256faff..f5d0d80a3bd 100644 --- a/vs/sdl2/src/render/direct3d11/SDL_render_d3d11.c +++ b/vs/sdl2/src/render/direct3d11/SDL_render_d3d11.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -304,7 +304,6 @@ static void D3D11_DestroyRenderer(SDL_Renderer *renderer) if (data) { SDL_free(data); } - SDL_free(renderer); } static D3D11_BLEND GetBlendFunc(SDL_BlendFactor factor) @@ -813,7 +812,12 @@ static HRESULT D3D11_CreateSwapChain(SDL_Renderer *renderer, int w, int h) #if defined(__WIN32__) || defined(__WINGDK__) SDL_SysWMinfo windowinfo; SDL_VERSION(&windowinfo.version); - SDL_GetWindowWMInfo(renderer->window, &windowinfo); + if (!SDL_GetWindowWMInfo(renderer->window, &windowinfo) || + windowinfo.subsystem != SDL_SYSWM_WINDOWS) { + SDL_SetError("Couldn't get window handle"); + result = E_FAIL; + goto done; + } result = IDXGIFactory2_CreateSwapChainForHwnd(data->dxgiFactory, (IUnknown *)data->d3dDevice, @@ -2308,22 +2312,13 @@ static int D3D11_SetVSync(SDL_Renderer *renderer, const int vsync) } #endif -SDL_Renderer *D3D11_CreateRenderer(SDL_Window *window, Uint32 flags) +int D3D11_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32 flags) { - SDL_Renderer *renderer; D3D11_RenderData *data; - renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(*renderer)); - if (!renderer) { - SDL_OutOfMemory(); - return NULL; - } - data = (D3D11_RenderData *)SDL_calloc(1, sizeof(*data)); if (!data) { - SDL_free(renderer); - SDL_OutOfMemory(); - return NULL; + return SDL_OutOfMemory(); } data->identity = MatrixIdentity(); @@ -2385,14 +2380,14 @@ SDL_Renderer *D3D11_CreateRenderer(SDL_Window *window, Uint32 flags) /* Initialize Direct3D resources */ if (FAILED(D3D11_CreateDeviceResources(renderer))) { D3D11_DestroyRenderer(renderer); - return NULL; + return -1; } if (FAILED(D3D11_CreateWindowSizeDependentResources(renderer))) { D3D11_DestroyRenderer(renderer); - return NULL; + return -1; } - return renderer; + return 0; } SDL_RenderDriver D3D11_RenderDriver = { diff --git a/vs/sdl2/src/render/direct3d11/SDL_render_winrt.cpp b/vs/sdl2/src/render/direct3d11/SDL_render_winrt.cpp index 0ed7addbd2c..6ff295c0f9c 100644 --- a/vs/sdl2/src/render/direct3d11/SDL_render_winrt.cpp +++ b/vs/sdl2/src/render/direct3d11/SDL_render_winrt.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/direct3d11/SDL_render_winrt.h b/vs/sdl2/src/render/direct3d11/SDL_render_winrt.h index dd9a17631c5..a19b9e6f107 100644 --- a/vs/sdl2/src/render/direct3d11/SDL_render_winrt.h +++ b/vs/sdl2/src/render/direct3d11/SDL_render_winrt.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/direct3d11/SDL_shaders_d3d11.c b/vs/sdl2/src/render/direct3d11/SDL_shaders_d3d11.c index 5f3a9a41f5e..45c9be85113 100644 --- a/vs/sdl2/src/render/direct3d11/SDL_shaders_d3d11.c +++ b/vs/sdl2/src/render/direct3d11/SDL_shaders_d3d11.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/direct3d11/SDL_shaders_d3d11.h b/vs/sdl2/src/render/direct3d11/SDL_shaders_d3d11.h index 010cd93b3c1..597ff9bb7ab 100644 --- a/vs/sdl2/src/render/direct3d11/SDL_shaders_d3d11.h +++ b/vs/sdl2/src/render/direct3d11/SDL_shaders_d3d11.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/direct3d12/SDL_render_d3d12.c b/vs/sdl2/src/render/direct3d12/SDL_render_d3d12.c index 8a607bfbe03..e97189a0026 100644 --- a/vs/sdl2/src/render/direct3d12/SDL_render_d3d12.c +++ b/vs/sdl2/src/render/direct3d12/SDL_render_d3d12.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -556,7 +556,6 @@ static void D3D12_DestroyRenderer(SDL_Renderer *renderer) if (data) { SDL_free(data); } - SDL_free(renderer); } static int D3D12_GetOutputSize(SDL_Renderer *renderer, int *w, int *h) @@ -3014,22 +3013,13 @@ static int D3D12_SetVSync(SDL_Renderer *renderer, const int vsync) return 0; } -SDL_Renderer *D3D12_CreateRenderer(SDL_Window *window, Uint32 flags) +int D3D12_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32 flags) { - SDL_Renderer *renderer; D3D12_RenderData *data; - renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(*renderer)); - if (!renderer) { - SDL_OutOfMemory(); - return NULL; - } - data = (D3D12_RenderData *)SDL_calloc(1, sizeof(*data)); if (!data) { - SDL_free(renderer); - SDL_OutOfMemory(); - return NULL; + return SDL_OutOfMemory(); } data->identity = MatrixIdentity(); @@ -3074,14 +3064,14 @@ SDL_Renderer *D3D12_CreateRenderer(SDL_Window *window, Uint32 flags) /* Initialize Direct3D resources */ if (FAILED(D3D12_CreateDeviceResources(renderer))) { D3D12_DestroyRenderer(renderer); - return NULL; + return -1; } if (FAILED(D3D12_CreateWindowSizeDependentResources(renderer))) { D3D12_DestroyRenderer(renderer); - return NULL; + return -1; } - return renderer; + return 0; } SDL_RenderDriver D3D12_RenderDriver = { diff --git a/vs/sdl2/src/render/direct3d12/SDL_render_d3d12_xbox.cpp b/vs/sdl2/src/render/direct3d12/SDL_render_d3d12_xbox.cpp index 7b598c016ac..4abb1dc23e1 100644 --- a/vs/sdl2/src/render/direct3d12/SDL_render_d3d12_xbox.cpp +++ b/vs/sdl2/src/render/direct3d12/SDL_render_d3d12_xbox.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/direct3d12/SDL_render_d3d12_xbox.h b/vs/sdl2/src/render/direct3d12/SDL_render_d3d12_xbox.h index 6db955a4229..16d22cdc4ad 100644 --- a/vs/sdl2/src/render/direct3d12/SDL_render_d3d12_xbox.h +++ b/vs/sdl2/src/render/direct3d12/SDL_render_d3d12_xbox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12.c b/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12.c index 29862d46403..20c3167aa64 100644 --- a/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12.c +++ b/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12.h b/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12.h index f0c528daf6c..50920b137fa 100644 --- a/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12.h +++ b/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp b/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp index cc5c84f2f44..ac90574cf6d 100644 --- a/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp +++ b/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12_xboxone.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp b/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp index f1e4063179e..b48ae188bc0 100644 --- a/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp +++ b/vs/sdl2/src/render/direct3d12/SDL_shaders_d3d12_xboxseries.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/metal/SDL_render_metal.m b/vs/sdl2/src/render/metal/SDL_render_metal.m index ee6b8820939..246af41bde5 100644 --- a/vs/sdl2/src/render/metal/SDL_render_metal.m +++ b/vs/sdl2/src/render/metal/SDL_render_metal.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -1513,8 +1513,6 @@ in case we want to use it later (recreating the renderer) /* SDL_Metal_DestroyView(data.mtlview); */ CFBridgingRelease(data.mtlview); } - - SDL_free(renderer); }} static void *METAL_GetMetalLayer(SDL_Renderer * renderer) @@ -1580,9 +1578,8 @@ static SDL_MetalView GetWindowView(SDL_Window *window) return nil; } -static SDL_Renderer *METAL_CreateRenderer(SDL_Window * window, Uint32 flags) +static int METAL_CreateRenderer(SDL_Renderer *renderer, SDL_Window * window, Uint32 flags) { @autoreleasepool { - SDL_Renderer *renderer = NULL; METAL_RenderData *data = NULL; id mtldevice = nil; SDL_MetalView view = NULL; @@ -1641,17 +1638,11 @@ static SDL_MetalView GetWindowView(SDL_Window *window) SDL_VERSION(&syswm.version); if (!SDL_GetWindowWMInfo(window, &syswm)) { - return NULL; + return -1; } if (IsMetalAvailable(&syswm) == -1) { - return NULL; - } - - renderer = (SDL_Renderer *) SDL_calloc(1, sizeof(*renderer)); - if (!renderer) { - SDL_OutOfMemory(); - return NULL; + return -1; } #ifdef __MACOSX__ @@ -1672,9 +1663,7 @@ static SDL_MetalView GetWindowView(SDL_Window *window) } if (mtldevice == nil) { - SDL_free(renderer); - SDL_SetError("Failed to obtain Metal device"); - return NULL; + return SDL_SetError("Failed to obtain Metal device"); } view = GetWindowView(window); @@ -1683,8 +1672,7 @@ static SDL_MetalView GetWindowView(SDL_Window *window) } if (view == NULL) { - SDL_free(renderer); - return NULL; + return -1; } // !!! FIXME: error checking on all of this. @@ -1696,8 +1684,7 @@ in case we want to use it later (recreating the renderer) */ /* SDL_Metal_DestroyView(view); */ CFBridgingRelease(view); - SDL_free(renderer); - return NULL; + return -1; } renderer->driverdata = (void*)CFBridgingRetain(data); @@ -1875,7 +1862,7 @@ in case we want to use it later (recreating the renderer) renderer->info.max_texture_width = maxtexsize; renderer->info.max_texture_height = maxtexsize; - return renderer; + return 0; }} SDL_RenderDriver METAL_RenderDriver = { diff --git a/vs/sdl2/src/render/metal/build-metal-shaders.sh b/vs/sdl2/src/render/metal/build-metal-shaders.sh index 0f3e48ef21b..9c505d2f32e 100755 --- a/vs/sdl2/src/render/metal/build-metal-shaders.sh +++ b/vs/sdl2/src/render/metal/build-metal-shaders.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh set -x set -e diff --git a/vs/sdl2/src/render/opengl/SDL_glfuncs.h b/vs/sdl2/src/render/opengl/SDL_glfuncs.h index 860b9c07a33..273d84d4d88 100644 --- a/vs/sdl2/src/render/opengl/SDL_glfuncs.h +++ b/vs/sdl2/src/render/opengl/SDL_glfuncs.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/opengl/SDL_render_gl.c b/vs/sdl2/src/render/opengl/SDL_render_gl.c index 9c266191a6a..ea3fe107410 100644 --- a/vs/sdl2/src/render/opengl/SDL_render_gl.c +++ b/vs/sdl2/src/render/opengl/SDL_render_gl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -1555,7 +1555,6 @@ static void GL_DestroyRenderer(SDL_Renderer *renderer) } SDL_free(data); } - SDL_free(renderer); } static int GL_BindTexture(SDL_Renderer *renderer, SDL_Texture *texture, float *texw, float *texh) @@ -1700,9 +1699,8 @@ static SDL_bool GL_IsProbablyAccelerated(const GL_RenderData *data) return SDL_TRUE; } -static SDL_Renderer *GL_CreateRenderer(SDL_Window *window, Uint32 flags) +static int GL_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32 flags) { - SDL_Renderer *renderer; GL_RenderData *data; GLint value; Uint32 window_flags; @@ -1731,15 +1729,8 @@ static SDL_Renderer *GL_CreateRenderer(SDL_Window *window, Uint32 flags) } #endif - renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(*renderer)); - if (!renderer) { - SDL_OutOfMemory(); - goto error; - } - data = (GL_RenderData *)SDL_calloc(1, sizeof(*data)); if (!data) { - SDL_free(renderer); SDL_OutOfMemory(); goto error; } @@ -1777,20 +1768,17 @@ static SDL_Renderer *GL_CreateRenderer(SDL_Window *window, Uint32 flags) data->context = SDL_GL_CreateContext(window); if (!data->context) { - SDL_free(renderer); SDL_free(data); goto error; } if (SDL_GL_MakeCurrent(window, data->context) < 0) { SDL_GL_DeleteContext(data->context); - SDL_free(renderer); SDL_free(data); goto error; } if (GL_LoadFunctions(data) < 0) { SDL_GL_DeleteContext(data->context); - SDL_free(renderer); SDL_free(data); goto error; } @@ -1944,7 +1932,7 @@ static SDL_Renderer *GL_CreateRenderer(SDL_Window *window, Uint32 flags) data->drawstate.color = 0xFFFFFFFF; data->drawstate.clear_color = 0xFFFFFFFF; - return renderer; + return 0; error: if (changed_window) { @@ -1954,7 +1942,7 @@ static SDL_Renderer *GL_CreateRenderer(SDL_Window *window, Uint32 flags) SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor); SDL_RecreateWindow(window, window_flags); } - return NULL; + return -1; } SDL_RenderDriver GL_RenderDriver = { diff --git a/vs/sdl2/src/render/opengl/SDL_shaders_gl.c b/vs/sdl2/src/render/opengl/SDL_shaders_gl.c index e24a36af9d0..c7bb6b07bc1 100644 --- a/vs/sdl2/src/render/opengl/SDL_shaders_gl.c +++ b/vs/sdl2/src/render/opengl/SDL_shaders_gl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/opengl/SDL_shaders_gl.h b/vs/sdl2/src/render/opengl/SDL_shaders_gl.h index d237b3ec257..18fb84b777a 100644 --- a/vs/sdl2/src/render/opengl/SDL_shaders_gl.h +++ b/vs/sdl2/src/render/opengl/SDL_shaders_gl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/opengles/SDL_glesfuncs.h b/vs/sdl2/src/render/opengles/SDL_glesfuncs.h index 971b44554ac..6a59fc4e508 100644 --- a/vs/sdl2/src/render/opengles/SDL_glesfuncs.h +++ b/vs/sdl2/src/render/opengles/SDL_glesfuncs.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/opengles/SDL_render_gles.c b/vs/sdl2/src/render/opengles/SDL_render_gles.c index 9906b46d8b9..4f1a9401e97 100644 --- a/vs/sdl2/src/render/opengles/SDL_render_gles.c +++ b/vs/sdl2/src/render/opengles/SDL_render_gles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -997,7 +997,6 @@ static void GLES_DestroyRenderer(SDL_Renderer *renderer) } SDL_free(data); } - SDL_free(renderer); } static int GLES_BindTexture(SDL_Renderer *renderer, SDL_Texture *texture, float *texw, float *texh) @@ -1054,10 +1053,9 @@ static int GLES_SetVSync(SDL_Renderer *renderer, const int vsync) return retval; } -static SDL_Renderer *GLES_CreateRenderer(SDL_Window *window, Uint32 flags) +static int GLES_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32 flags) { - SDL_Renderer *renderer; - GLES_RenderData *data; + GLES_RenderData *data = NULL; GLint value; Uint32 window_flags; int profile_mask = 0, major = 0, minor = 0; @@ -1081,12 +1079,6 @@ static SDL_Renderer *GLES_CreateRenderer(SDL_Window *window, Uint32 flags) } } - renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(*renderer)); - if (!renderer) { - SDL_OutOfMemory(); - goto error; - } - data = (GLES_RenderData *)SDL_calloc(1, sizeof(*data)); if (!data) { GLES_DestroyRenderer(renderer); @@ -1192,7 +1184,7 @@ static SDL_Renderer *GLES_CreateRenderer(SDL_Window *window, Uint32 flags) data->drawstate.color = 0xFFFFFFFF; data->drawstate.clear_color = 0xFFFFFFFF; - return renderer; + return 0; error: if (changed_window) { @@ -1202,7 +1194,7 @@ static SDL_Renderer *GLES_CreateRenderer(SDL_Window *window, Uint32 flags) SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor); SDL_RecreateWindow(window, window_flags); } - return NULL; + return -1; } SDL_RenderDriver GLES_RenderDriver = { diff --git a/vs/sdl2/src/render/opengles2/SDL_gles2funcs.h b/vs/sdl2/src/render/opengles2/SDL_gles2funcs.h index b808b767c28..f6c8124fa99 100644 --- a/vs/sdl2/src/render/opengles2/SDL_gles2funcs.h +++ b/vs/sdl2/src/render/opengles2/SDL_gles2funcs.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/opengles2/SDL_render_gles2.c b/vs/sdl2/src/render/opengles2/SDL_render_gles2.c index 43aebda0f44..be182a85007 100644 --- a/vs/sdl2/src/render/opengles2/SDL_render_gles2.c +++ b/vs/sdl2/src/render/opengles2/SDL_render_gles2.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -975,8 +975,8 @@ static int SetDrawState(GLES2_RenderData *data, const SDL_RenderCommand *cmd, co } if (texture) { - SDL_Vertex *verts = (SDL_Vertex *)(((Uint8 *)vertices) + cmd->data.draw.first); - data->glVertexAttribPointer(GLES2_ATTRIBUTE_TEXCOORD, 2, GL_FLOAT, GL_FALSE, stride, (const GLvoid *)&verts->tex_coord); + uintptr_t base = (uintptr_t)vertices + cmd->data.draw.first; // address of first vertex, or base offset when using VBOs. + data->glVertexAttribPointer(GLES2_ATTRIBUTE_TEXCOORD, 2, GL_FLOAT, GL_FALSE, stride, (const GLvoid *)(base + offsetof(SDL_Vertex, tex_coord))); } if (GLES2_SelectProgram(data, imgsrc, texture ? texture->w : 0, texture ? texture->h : 0) < 0) { @@ -1009,9 +1009,9 @@ static int SetDrawState(GLES2_RenderData *data, const SDL_RenderCommand *cmd, co /* all drawing commands use this */ { - SDL_VertexSolid *verts = (SDL_VertexSolid *)(((Uint8 *)vertices) + cmd->data.draw.first); - data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, stride, (const GLvoid *)&verts->position); - data->glVertexAttribPointer(GLES2_ATTRIBUTE_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE /* Normalized */, stride, (const GLvoid *)&verts->color); + uintptr_t base = (uintptr_t)vertices + cmd->data.draw.first; // address of first vertex, or base offset when using VBOs. + data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, stride, (const GLvoid *)(base + offsetof(SDL_VertexSolid, position))); + data->glVertexAttribPointer(GLES2_ATTRIBUTE_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE /* Normalized */, stride, (const GLvoid *)(base + offsetof(SDL_VertexSolid, color))); } return 0; @@ -1200,7 +1200,8 @@ static int GLES2_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, if (data->current_vertex_buffer >= SDL_arraysize(data->vertex_buffers)) { data->current_vertex_buffer = 0; } - vertices = NULL; /* attrib pointers will be offsets into the VBO. */ + // attrib pointers will be offsets into the VBO. + vertices = (void *)(uintptr_t)0; // must be the exact value 0, not NULL (the representation of NULL is not guaranteed to be 0). #endif while (cmd) { @@ -1406,7 +1407,6 @@ static void GLES2_DestroyRenderer(SDL_Renderer *renderer) SDL_free(data); } - SDL_free(renderer); } static int GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture) @@ -2030,10 +2030,9 @@ static int GLES2_UnbindTexture(SDL_Renderer *renderer, SDL_Texture *texture) * Renderer instantiation * *************************************************************************************************/ -static SDL_Renderer *GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) +static int GLES2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32 flags) { - SDL_Renderer *renderer; - GLES2_RenderData *data; + GLES2_RenderData *data = NULL; Uint32 window_flags = 0; /* -Wconditional-uninitialized */ GLint window_framebuffer; GLint value; @@ -2066,16 +2065,8 @@ static SDL_Renderer *GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) } } - /* Create the renderer struct */ - renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(SDL_Renderer)); - if (!renderer) { - SDL_OutOfMemory(); - goto error; - } - data = (GLES2_RenderData *)SDL_calloc(1, sizeof(GLES2_RenderData)); if (!data) { - SDL_free(renderer); SDL_OutOfMemory(); goto error; } @@ -2087,28 +2078,20 @@ static SDL_Renderer *GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) /* Create an OpenGL ES 2.0 context */ data->context = SDL_GL_CreateContext(window); if (!data->context) { - SDL_free(renderer); - SDL_free(data); goto error; } if (SDL_GL_MakeCurrent(window, data->context) < 0) { SDL_GL_DeleteContext(data->context); - SDL_free(renderer); - SDL_free(data); goto error; } if (GLES2_LoadFunctions(data) < 0) { SDL_GL_DeleteContext(data->context); - SDL_free(renderer); - SDL_free(data); goto error; } if (GLES2_CacheShaders(data) < 0) { SDL_GL_DeleteContext(data->context); - SDL_free(renderer); - SDL_free(data); goto error; } @@ -2219,9 +2202,10 @@ static SDL_Renderer *GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) GL_CheckError("", renderer); - return renderer; + return 0; error: + SDL_free(data); if (changed_window) { /* Uh oh, better try to put it back... */ SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, profile_mask); @@ -2229,7 +2213,7 @@ static SDL_Renderer *GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor); SDL_RecreateWindow(window, window_flags); } - return NULL; + return -1; } SDL_RenderDriver GLES2_RenderDriver = { diff --git a/vs/sdl2/src/render/opengles2/SDL_shaders_gles2.c b/vs/sdl2/src/render/opengles2/SDL_shaders_gles2.c index 9a434f40b1a..ff455227cb1 100644 --- a/vs/sdl2/src/render/opengles2/SDL_shaders_gles2.c +++ b/vs/sdl2/src/render/opengles2/SDL_shaders_gles2.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/opengles2/SDL_shaders_gles2.h b/vs/sdl2/src/render/opengles2/SDL_shaders_gles2.h index 0be234f3ce3..f57e9287e2f 100644 --- a/vs/sdl2/src/render/opengles2/SDL_shaders_gles2.h +++ b/vs/sdl2/src/render/opengles2/SDL_shaders_gles2.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/ps2/SDL_render_ps2.c b/vs/sdl2/src/render/ps2/SDL_render_ps2.c index ec17323cd43..e8ef2e92a8b 100644 --- a/vs/sdl2/src/render/ps2/SDL_render_ps2.c +++ b/vs/sdl2/src/render/ps2/SDL_render_ps2.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -55,7 +55,7 @@ typedef struct static int vsync_sema_id = 0; /* PRIVATE METHODS */ -static int vsync_handler() +static int vsync_handler(int reason) { iSignalSema(vsync_sema_id); @@ -593,8 +593,6 @@ static void PS2_DestroyRenderer(SDL_Renderer *renderer) if (vsync_sema_id >= 0) { DeleteSema(vsync_sema_id); } - - SDL_free(renderer); } static int PS2_SetVSync(SDL_Renderer *renderer, const int vsync) @@ -605,25 +603,17 @@ static int PS2_SetVSync(SDL_Renderer *renderer, const int vsync) return 0; } -static SDL_Renderer *PS2_CreateRenderer(SDL_Window *window, Uint32 flags) +static int PS2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32 flags) { - SDL_Renderer *renderer; PS2_RenderData *data; GSGLOBAL *gsGlobal; ee_sema_t sema; SDL_bool dynamicVsync; - renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(*renderer)); - if (!renderer) { - SDL_OutOfMemory(); - return NULL; - } - data = (PS2_RenderData *)SDL_calloc(1, sizeof(*data)); if (!data) { PS2_DestroyRenderer(renderer); - SDL_OutOfMemory(); - return NULL; + return SDL_OutOfMemory(); } /* Specific gsKit init */ @@ -689,7 +679,7 @@ static SDL_Renderer *PS2_CreateRenderer(SDL_Window *window, Uint32 flags) renderer->driverdata = data; renderer->window = window; - return renderer; + return 0; } SDL_RenderDriver PS2_RenderDriver = { diff --git a/vs/sdl2/src/render/psp/SDL_render_psp.c b/vs/sdl2/src/render/psp/SDL_render_psp.c index 47fab82c153..2b85309d812 100644 --- a/vs/sdl2/src/render/psp/SDL_render_psp.c +++ b/vs/sdl2/src/render/psp/SDL_render_psp.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -36,15 +36,9 @@ #include #include #include +#include "SDL_render_psp.h" /* PSP renderer implementation, based on the PGE */ - -#define PSP_SCREEN_WIDTH 480 -#define PSP_SCREEN_HEIGHT 272 - -#define PSP_FRAME_BUFFER_WIDTH 512 -#define PSP_FRAME_BUFFER_SIZE (PSP_FRAME_BUFFER_WIDTH * PSP_SCREEN_HEIGHT) - static unsigned int __attribute__((aligned(16))) DisplayList[262144]; #define COL5650(r, g, b, a) ((r >> 3) | ((g >> 2) << 5) | ((b >> 3) << 11)) @@ -124,6 +118,24 @@ typedef struct float x, y, z; } VertTCV; +int SDL_PSP_RenderGetProp(SDL_Renderer *r, enum SDL_PSP_RenderProps which, void** out) +{ + PSP_RenderData *rd; + if (r == NULL) { + return -1; + } + rd = r->driverdata; + switch (which) { + case SDL_PSP_RENDERPROPS_FRONTBUFFER: + *out = rd->frontbuffer; + return 0; + case SDL_PSP_RENDERPROPS_BACKBUFFER: + *out = rd->backbuffer; + return 0; + } + return -1; +} + #define PI 3.14159265358979f #define radToDeg(x) ((x)*180.f / PI) @@ -1268,8 +1280,6 @@ static void PSP_DestroyRenderer(SDL_Renderer *renderer) return; } - StartDrawing(renderer); - sceKernelDisableSubIntr(PSP_VBLANK_INT, 0); sceKernelReleaseSubIntrHandler(PSP_VBLANK_INT, 0); sceDisplayWaitVblankStart(); @@ -1282,7 +1292,6 @@ static void PSP_DestroyRenderer(SDL_Renderer *renderer) data->displayListAvail = SDL_FALSE; SDL_free(data); } - SDL_free(renderer); } static int PSP_SetVSync(SDL_Renderer *renderer, const int vsync) @@ -1292,25 +1301,16 @@ static int PSP_SetVSync(SDL_Renderer *renderer, const int vsync) return 0; } -SDL_Renderer *PSP_CreateRenderer(SDL_Window *window, Uint32 flags) +int PSP_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32 flags) { - - SDL_Renderer *renderer; PSP_RenderData *data; int pixelformat; void *doublebuffer = NULL; - renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(*renderer)); - if (!renderer) { - SDL_OutOfMemory(); - return NULL; - } - data = (PSP_RenderData *)SDL_calloc(1, sizeof(*data)); if (!data) { PSP_DestroyRenderer(renderer); - SDL_OutOfMemory(); - return NULL; + return SDL_OutOfMemory(); } renderer->WindowEvent = PSP_WindowEvent; @@ -1402,7 +1402,7 @@ SDL_Renderer *PSP_CreateRenderer(SDL_Window *window, Uint32 flags) sceKernelRegisterSubIntrHandler(PSP_VBLANK_INT, 0, psp_on_vblank, data); sceKernelEnableSubIntr(PSP_VBLANK_INT, 0); - return renderer; + return 0; } SDL_RenderDriver PSP_RenderDriver = { diff --git a/vs/sdl2/src/render/psp/SDL_render_psp.h b/vs/sdl2/src/render/psp/SDL_render_psp.h new file mode 100644 index 00000000000..74a964fcc3d --- /dev/null +++ b/vs/sdl2/src/render/psp/SDL_render_psp.h @@ -0,0 +1,38 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + 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. +*/ + +/* this header is meant to be included after the other related internal SDL + headers. it's the interface between psp renderer and video driver code. */ + +#define PSP_SCREEN_WIDTH 480 +#define PSP_SCREEN_HEIGHT 272 + +#define PSP_FRAME_BUFFER_WIDTH 512 +#define PSP_FRAME_BUFFER_SIZE (PSP_FRAME_BUFFER_WIDTH * PSP_SCREEN_HEIGHT) + +enum SDL_PSP_RenderProps +{ + SDL_PSP_RENDERPROPS_FRONTBUFFER, + SDL_PSP_RENDERPROPS_BACKBUFFER, +}; + +int SDL_PSP_RenderGetProp(SDL_Renderer *r, enum SDL_PSP_RenderProps which, void** out); + diff --git a/vs/sdl2/src/render/software/SDL_blendfillrect.c b/vs/sdl2/src/render/software/SDL_blendfillrect.c index 2026cb885d4..ac2136654be 100644 --- a/vs/sdl2/src/render/software/SDL_blendfillrect.c +++ b/vs/sdl2/src/render/software/SDL_blendfillrect.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_blendfillrect.h b/vs/sdl2/src/render/software/SDL_blendfillrect.h index eb9ba7d2642..df66e641f30 100644 --- a/vs/sdl2/src/render/software/SDL_blendfillrect.h +++ b/vs/sdl2/src/render/software/SDL_blendfillrect.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_blendline.c b/vs/sdl2/src/render/software/SDL_blendline.c index 19e2cdb0d6e..0844e7ff1db 100644 --- a/vs/sdl2/src/render/software/SDL_blendline.c +++ b/vs/sdl2/src/render/software/SDL_blendline.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_blendline.h b/vs/sdl2/src/render/software/SDL_blendline.h index 993dd473383..4612afdb162 100644 --- a/vs/sdl2/src/render/software/SDL_blendline.h +++ b/vs/sdl2/src/render/software/SDL_blendline.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_blendpoint.c b/vs/sdl2/src/render/software/SDL_blendpoint.c index c3803711033..ecdea30b1f8 100644 --- a/vs/sdl2/src/render/software/SDL_blendpoint.c +++ b/vs/sdl2/src/render/software/SDL_blendpoint.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_blendpoint.h b/vs/sdl2/src/render/software/SDL_blendpoint.h index 86ee766ea85..23a67a3a84b 100644 --- a/vs/sdl2/src/render/software/SDL_blendpoint.h +++ b/vs/sdl2/src/render/software/SDL_blendpoint.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_draw.h b/vs/sdl2/src/render/software/SDL_draw.h index ab80b87f822..f9e5ad39323 100644 --- a/vs/sdl2/src/render/software/SDL_draw.h +++ b/vs/sdl2/src/render/software/SDL_draw.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_drawline.c b/vs/sdl2/src/render/software/SDL_drawline.c index e164a8f08c2..8b6bc3d722f 100644 --- a/vs/sdl2/src/render/software/SDL_drawline.c +++ b/vs/sdl2/src/render/software/SDL_drawline.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_drawline.h b/vs/sdl2/src/render/software/SDL_drawline.h index 0d406c8584a..1472f744a19 100644 --- a/vs/sdl2/src/render/software/SDL_drawline.h +++ b/vs/sdl2/src/render/software/SDL_drawline.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_drawpoint.c b/vs/sdl2/src/render/software/SDL_drawpoint.c index 16bb9fac29a..9e095a319c5 100644 --- a/vs/sdl2/src/render/software/SDL_drawpoint.c +++ b/vs/sdl2/src/render/software/SDL_drawpoint.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_drawpoint.h b/vs/sdl2/src/render/software/SDL_drawpoint.h index 1e74d597374..994c529a877 100644 --- a/vs/sdl2/src/render/software/SDL_drawpoint.h +++ b/vs/sdl2/src/render/software/SDL_drawpoint.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_render_sw.c b/vs/sdl2/src/render/software/SDL_render_sw.c index b7843340f61..8abf4287045 100644 --- a/vs/sdl2/src/render/software/SDL_render_sw.c +++ b/vs/sdl2/src/render/software/SDL_render_sw.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -987,30 +987,20 @@ static void SW_DestroyRenderer(SDL_Renderer *renderer) SDL_DestroyWindowSurface(window); } SDL_free(data); - SDL_free(renderer); } -SDL_Renderer *SW_CreateRendererForSurface(SDL_Surface *surface) +int SW_CreateRendererForSurface(SDL_Renderer *renderer, SDL_Surface *surface) { - SDL_Renderer *renderer; SW_RenderData *data; if (!surface) { - SDL_InvalidParamError("surface"); - return NULL; - } - - renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(*renderer)); - if (!renderer) { - SDL_OutOfMemory(); - return NULL; + return SDL_InvalidParamError("surface"); } data = (SW_RenderData *)SDL_calloc(1, sizeof(*data)); if (!data) { SW_DestroyRenderer(renderer); - SDL_OutOfMemory(); - return NULL; + return SDL_OutOfMemory(); } data->surface = surface; data->window = surface; @@ -1039,10 +1029,10 @@ SDL_Renderer *SW_CreateRendererForSurface(SDL_Surface *surface) renderer->info = SW_RenderDriver.info; renderer->driverdata = data; - return renderer; + return 0; } -static SDL_Renderer *SW_CreateRenderer(SDL_Window *window, Uint32 flags) +static int SW_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32 flags) { const char *hint; SDL_Surface *surface; @@ -1068,9 +1058,9 @@ static SDL_Renderer *SW_CreateRenderer(SDL_Window *window, Uint32 flags) } if (!surface) { - return NULL; + return -1; } - return SW_CreateRendererForSurface(surface); + return SW_CreateRendererForSurface(renderer, surface); } SDL_RenderDriver SW_RenderDriver = { diff --git a/vs/sdl2/src/render/software/SDL_render_sw_c.h b/vs/sdl2/src/render/software/SDL_render_sw_c.h index 1d7901fc876..d59a85fdb9e 100644 --- a/vs/sdl2/src/render/software/SDL_render_sw_c.h +++ b/vs/sdl2/src/render/software/SDL_render_sw_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -22,7 +22,7 @@ #ifndef SDL_render_sw_c_h_ #define SDL_render_sw_c_h_ -extern SDL_Renderer *SW_CreateRendererForSurface(SDL_Surface *surface); +extern int SW_CreateRendererForSurface(SDL_Renderer *renderer, SDL_Surface *surface); #endif /* SDL_render_sw_c_h_ */ diff --git a/vs/sdl2/src/render/software/SDL_rotate.h b/vs/sdl2/src/render/software/SDL_rotate.h index 9e08e53abb2..256853137a6 100644 --- a/vs/sdl2/src/render/software/SDL_rotate.h +++ b/vs/sdl2/src/render/software/SDL_rotate.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_triangle.c b/vs/sdl2/src/render/software/SDL_triangle.c index f6af3dcabe3..db8aaf5d997 100644 --- a/vs/sdl2/src/render/software/SDL_triangle.c +++ b/vs/sdl2/src/render/software/SDL_triangle.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/software/SDL_triangle.h b/vs/sdl2/src/render/software/SDL_triangle.h index 463cab60dad..05b17905803 100644 --- a/vs/sdl2/src/render/software/SDL_triangle.h +++ b/vs/sdl2/src/render/software/SDL_triangle.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm.c b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm.c index 7d8085902d4..ee3586ca05a 100644 --- a/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm.c +++ b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -44,7 +44,7 @@ #include #endif -static SDL_Renderer *VITA_GXM_CreateRenderer(SDL_Window *window, Uint32 flags); +static int VITA_GXM_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32 flags); static void VITA_GXM_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event); @@ -211,22 +211,13 @@ static int VITA_GXM_SetVSync(SDL_Renderer *renderer, const int vsync) return 0; } -SDL_Renderer *VITA_GXM_CreateRenderer(SDL_Window *window, Uint32 flags) +int VITA_GXM_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32 flags) { - SDL_Renderer *renderer; VITA_GXM_RenderData *data; - renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(*renderer)); - if (!renderer) { - SDL_OutOfMemory(); - return NULL; - } - data = (VITA_GXM_RenderData *)SDL_calloc(1, sizeof(VITA_GXM_RenderData)); if (!data) { - SDL_free(renderer); - SDL_OutOfMemory(); - return NULL; + return SDL_OutOfMemory(); } renderer->WindowEvent = VITA_GXM_WindowEvent; @@ -273,11 +264,10 @@ SDL_Renderer *VITA_GXM_CreateRenderer(SDL_Window *window, Uint32 flags) if (gxm_init(renderer) != 0) { SDL_free(data); - SDL_free(renderer); - return NULL; + return -1; } - return renderer; + return 0; } static void VITA_GXM_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event) @@ -366,6 +356,7 @@ static int VITA_GXM_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, length = rect->w * SDL_BYTESPERPIXEL(texture->format); if (length == pitch && length == dpitch) { SDL_memcpy(dst, pixels, length * rect->h); + pixels += pitch * rect->h; } else { for (row = 0; row < rect->h; ++row) { SDL_memcpy(dst, pixels, length); @@ -393,6 +384,7 @@ static int VITA_GXM_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, // U plane if (length == uv_src_pitch && length == uv_pitch) { SDL_memcpy(Udst, pixels, length * UVrect.h); + pixels += uv_src_pitch * UVrect.h; } else { for (row = 0; row < UVrect.h; ++row) { SDL_memcpy(Udst, pixels, length); @@ -834,6 +826,35 @@ static int VITA_GXM_RenderClear(SDL_Renderer *renderer, SDL_RenderCommand *cmd) return 0; } +static void ClampCliprectToViewport(SDL_Rect *clip, const SDL_Rect *viewport) +{ + int max_x_v, max_y_v, max_x_c, max_y_c; + + if (clip->x < 0) { + clip->w += clip->x; + clip->x = 0; + } + + if (clip->y < 0) { + clip->h += clip->y; + clip->y = 0; + } + + max_x_c = clip->x + clip->w; + max_y_c = clip->y + clip->h; + + max_x_v = viewport->x + viewport->w; + max_y_v = viewport->y + viewport->h; + + if (max_x_c > max_x_v) { + clip->w -= (max_x_v - max_x_c); + } + + if (max_y_c > max_y_v) { + clip->h -= (max_y_v - max_y_c); + } +} + static int SetDrawState(VITA_GXM_RenderData *data, const SDL_RenderCommand *cmd) { SDL_Texture *texture = cmd->data.draw.texture; @@ -876,9 +897,13 @@ static int SetDrawState(VITA_GXM_RenderData *data, const SDL_RenderCommand *cmd) data->drawstate.cliprect_enabled_dirty = SDL_FALSE; } - if (data->drawstate.cliprect_enabled && data->drawstate.cliprect_dirty) { - const SDL_Rect *rect = &data->drawstate.cliprect; - set_clip_rectangle(data, rect->x, rect->y, rect->x + rect->w, rect->y + rect->h); + if ((data->drawstate.cliprect_enabled || data->drawstate.viewport_is_set) && data->drawstate.cliprect_dirty) { + SDL_Rect rect; + SDL_copyp(&rect, &data->drawstate.cliprect); + if (data->drawstate.viewport_is_set) { + ClampCliprectToViewport(&rect, &data->drawstate.viewport); + } + set_clip_rectangle(data, rect.x, rect.y, rect.x + rect.w, rect.y + rect.h); data->drawstate.cliprect_dirty = SDL_FALSE; } @@ -933,20 +958,27 @@ static int SetDrawState(VITA_GXM_RenderData *data, const SDL_RenderCommand *cmd) static int VITA_GXM_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize) { VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->driverdata; + int w, h; + StartDrawing(renderer); data->drawstate.target = renderer->target; if (!data->drawstate.target) { - int w, h; SDL_GL_GetDrawableSize(renderer->window, &w, &h); - if ((w != data->drawstate.drawablew) || (h != data->drawstate.drawableh)) { - data->drawstate.viewport_dirty = SDL_TRUE; // if the window dimensions changed, invalidate the current viewport, etc. - data->drawstate.cliprect_dirty = SDL_TRUE; - data->drawstate.drawablew = w; - data->drawstate.drawableh = h; + } else { + if (SDL_QueryTexture(renderer->target, NULL, NULL, &w, &h) < 0) { + w = data->drawstate.drawablew; + h = data->drawstate.drawableh; } } + if ((w != data->drawstate.drawablew) || (h != data->drawstate.drawableh)) { + data->drawstate.viewport_dirty = SDL_TRUE; // if the window dimensions changed, invalidate the current viewport, etc. + data->drawstate.cliprect_dirty = SDL_TRUE; + data->drawstate.drawablew = w; + data->drawstate.drawableh = h; + } + while (cmd) { switch (cmd->command) { @@ -957,6 +989,16 @@ static int VITA_GXM_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *c SDL_copyp(viewport, &cmd->data.viewport.rect); data->drawstate.viewport_dirty = SDL_TRUE; data->drawstate.cliprect_dirty = SDL_TRUE; + data->drawstate.viewport_is_set = viewport->x != 0 || viewport->y != 0 || viewport->w != data->drawstate.drawablew || viewport->h != data->drawstate.drawableh; + if (!data->drawstate.cliprect_enabled) { + if (data->drawstate.viewport_is_set) { + SDL_copyp(&data->drawstate.cliprect, viewport); + data->drawstate.cliprect.x = 0; + data->drawstate.cliprect.y = 0; + } else { + data->drawstate.cliprect_enabled_dirty = SDL_TRUE; + } + } } break; } @@ -964,9 +1006,15 @@ static int VITA_GXM_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *c case SDL_RENDERCMD_SETCLIPRECT: { const SDL_Rect *rect = &cmd->data.cliprect.rect; + const SDL_Rect *viewport = &data->drawstate.viewport; if (data->drawstate.cliprect_enabled != cmd->data.cliprect.enabled) { data->drawstate.cliprect_enabled = cmd->data.cliprect.enabled; data->drawstate.cliprect_enabled_dirty = SDL_TRUE; + if (!data->drawstate.cliprect_enabled && data->drawstate.viewport_is_set) { + SDL_copyp(&data->drawstate.cliprect, viewport); + data->drawstate.cliprect.x = 0; + data->drawstate.cliprect.y = 0; + } } if (SDL_memcmp(&data->drawstate.cliprect, rect, sizeof(*rect)) != 0) { @@ -1222,7 +1270,6 @@ static void VITA_GXM_DestroyRenderer(SDL_Renderer *renderer) data->drawing = SDL_FALSE; SDL_free(data); } - SDL_free(renderer); } #endif /* SDL_VIDEO_RENDER_VITA_GXM */ diff --git a/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_memory.c b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_memory.c index 86e33115f47..b8e5ea7ba1b 100644 --- a/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_memory.c +++ b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_memory.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -31,6 +31,8 @@ void *vita_mem_alloc(unsigned int type, unsigned int size, unsigned int alignmen if (type == SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW) { size = ALIGN(size, 256 * 1024); + } else if (type == SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW) { + size = ALIGN(size, 1024 * 1024); } else { size = ALIGN(size, 4 * 1024); } diff --git a/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_memory.h b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_memory.h index 1f3832ee07f..1c109552610 100644 --- a/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_memory.h +++ b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_memory.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_shaders.h b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_shaders.h index d383fd8efe7..26ac57ccbcf 100644 --- a/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_shaders.h +++ b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_shaders.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_tools.c b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_tools.c index 2c38441d1d0..31a321a3b74 100644 --- a/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_tools.c +++ b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_tools.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -1162,7 +1162,7 @@ void gxm_init_for_common_dialog(void) for (int i = 0; i < VITA_GXM_BUFFERS; i += 1) { buffer_for_common_dialog[i].displayData.wait_vblank = SDL_TRUE; buffer_for_common_dialog[i].displayData.address = vita_mem_alloc( - SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW, + SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW, 4 * VITA_GXM_SCREEN_STRIDE * VITA_GXM_SCREEN_HEIGHT, SCE_GXM_COLOR_SURFACE_ALIGNMENT, SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, diff --git a/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_tools.h b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_tools.h index ca50e3f3c91..6ee781e6522 100644 --- a/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_tools.h +++ b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_tools.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_types.h b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_types.h index 4255247d6c0..d7964037527 100644 --- a/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_types.h +++ b/vs/sdl2/src/render/vitagxm/SDL_render_vita_gxm_types.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -106,6 +106,7 @@ typedef struct { SDL_Rect viewport; SDL_bool viewport_dirty; + SDL_bool viewport_is_set; SDL_Texture *texture; SDL_Texture *target; SDL_Color color; diff --git a/vs/sdl2/src/sensor/SDL_sensor.c b/vs/sdl2/src/sensor/SDL_sensor.c index 3179f7302e2..ced1904b7d2 100644 --- a/vs/sdl2/src/sensor/SDL_sensor.c +++ b/vs/sdl2/src/sensor/SDL_sensor.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/sensor/SDL_sensor_c.h b/vs/sdl2/src/sensor/SDL_sensor_c.h index 0d2a483199c..8d049efea93 100644 --- a/vs/sdl2/src/sensor/SDL_sensor_c.h +++ b/vs/sdl2/src/sensor/SDL_sensor_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/sensor/SDL_syssensor.h b/vs/sdl2/src/sensor/SDL_syssensor.h index 8f8196f5308..67012abb7e7 100644 --- a/vs/sdl2/src/sensor/SDL_syssensor.h +++ b/vs/sdl2/src/sensor/SDL_syssensor.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/sensor/android/SDL_androidsensor.c b/vs/sdl2/src/sensor/android/SDL_androidsensor.c index 3f57253cd19..ce69c110ffc 100644 --- a/vs/sdl2/src/sensor/android/SDL_androidsensor.c +++ b/vs/sdl2/src/sensor/android/SDL_androidsensor.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -161,7 +161,7 @@ static void SDL_ANDROID_SensorUpdate(SDL_Sensor *sensor) ASensorEvent event; struct android_poll_source *source; - if (ALooper_pollAll(0, NULL, &events, (void **)&source) == LOOPER_ID_USER) { + if (ALooper_pollOnce(0, NULL, &events, (void **)&source) == LOOPER_ID_USER) { SDL_zero(event); while (ASensorEventQueue_getEvents(sensor->hwdata->eventqueue, &event, 1) > 0) { SDL_PrivateSensorUpdate(sensor, 0, event.data, SDL_arraysize(event.data)); diff --git a/vs/sdl2/src/sensor/android/SDL_androidsensor.h b/vs/sdl2/src/sensor/android/SDL_androidsensor.h index 5a119dbf5f6..08eb077372c 100644 --- a/vs/sdl2/src/sensor/android/SDL_androidsensor.h +++ b/vs/sdl2/src/sensor/android/SDL_androidsensor.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/sensor/coremotion/SDL_coremotionsensor.h b/vs/sdl2/src/sensor/coremotion/SDL_coremotionsensor.h index ae48163eb7b..3cfad6413b0 100644 --- a/vs/sdl2/src/sensor/coremotion/SDL_coremotionsensor.h +++ b/vs/sdl2/src/sensor/coremotion/SDL_coremotionsensor.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/sensor/coremotion/SDL_coremotionsensor.m b/vs/sdl2/src/sensor/coremotion/SDL_coremotionsensor.m index c653c9bb9e8..f4983b90be1 100644 --- a/vs/sdl2/src/sensor/coremotion/SDL_coremotionsensor.m +++ b/vs/sdl2/src/sensor/coremotion/SDL_coremotionsensor.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/sensor/dummy/SDL_dummysensor.c b/vs/sdl2/src/sensor/dummy/SDL_dummysensor.c index b8840d87471..d4b13fd1fe5 100644 --- a/vs/sdl2/src/sensor/dummy/SDL_dummysensor.c +++ b/vs/sdl2/src/sensor/dummy/SDL_dummysensor.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/sensor/dummy/SDL_dummysensor.h b/vs/sdl2/src/sensor/dummy/SDL_dummysensor.h index e8bf8ef2480..a255a53fc18 100644 --- a/vs/sdl2/src/sensor/dummy/SDL_dummysensor.h +++ b/vs/sdl2/src/sensor/dummy/SDL_dummysensor.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/sensor/n3ds/SDL_n3dssensor.c b/vs/sdl2/src/sensor/n3ds/SDL_n3dssensor.c index 236b64803d6..08af044d8db 100644 --- a/vs/sdl2/src/sensor/n3ds/SDL_n3dssensor.c +++ b/vs/sdl2/src/sensor/n3ds/SDL_n3dssensor.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/sensor/vita/SDL_vitasensor.c b/vs/sdl2/src/sensor/vita/SDL_vitasensor.c index 8ff68ddf350..a80c0c235ee 100644 --- a/vs/sdl2/src/sensor/vita/SDL_vitasensor.c +++ b/vs/sdl2/src/sensor/vita/SDL_vitasensor.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/sensor/vita/SDL_vitasensor.h b/vs/sdl2/src/sensor/vita/SDL_vitasensor.h index 183c35a8b50..794cc0cbbad 100644 --- a/vs/sdl2/src/sensor/vita/SDL_vitasensor.h +++ b/vs/sdl2/src/sensor/vita/SDL_vitasensor.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/sensor/windows/SDL_windowssensor.c b/vs/sdl2/src/sensor/windows/SDL_windowssensor.c index cba5b17699a..3c15dd34978 100644 --- a/vs/sdl2/src/sensor/windows/SDL_windowssensor.c +++ b/vs/sdl2/src/sensor/windows/SDL_windowssensor.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/sensor/windows/SDL_windowssensor.h b/vs/sdl2/src/sensor/windows/SDL_windowssensor.h index e8bf8ef2480..a255a53fc18 100644 --- a/vs/sdl2/src/sensor/windows/SDL_windowssensor.h +++ b/vs/sdl2/src/sensor/windows/SDL_windowssensor.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/stdlib/SDL_crc16.c b/vs/sdl2/src/stdlib/SDL_crc16.c index d1270f1f12f..98fdb413c75 100644 --- a/vs/sdl2/src/stdlib/SDL_crc16.c +++ b/vs/sdl2/src/stdlib/SDL_crc16.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/stdlib/SDL_crc32.c b/vs/sdl2/src/stdlib/SDL_crc32.c index ad6eed32629..9f2b567ebb9 100644 --- a/vs/sdl2/src/stdlib/SDL_crc32.c +++ b/vs/sdl2/src/stdlib/SDL_crc32.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/stdlib/SDL_getenv.c b/vs/sdl2/src/stdlib/SDL_getenv.c index 13cf5a39f54..2421f51962c 100644 --- a/vs/sdl2/src/stdlib/SDL_getenv.c +++ b/vs/sdl2/src/stdlib/SDL_getenv.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/stdlib/SDL_iconv.c b/vs/sdl2/src/stdlib/SDL_iconv.c index 416e199b76c..3a54be068a9 100644 --- a/vs/sdl2/src/stdlib/SDL_iconv.c +++ b/vs/sdl2/src/stdlib/SDL_iconv.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/stdlib/SDL_malloc.c b/vs/sdl2/src/stdlib/SDL_malloc.c index 4c266611baf..a045a6aadef 100644 --- a/vs/sdl2/src/stdlib/SDL_malloc.c +++ b/vs/sdl2/src/stdlib/SDL_malloc.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -4472,7 +4472,7 @@ struct mallinfo dlmallinfo(void) { } #endif /* NO_MALLINFO */ -void dlmalloc_stats() { +void dlmalloc_stats(void) { internal_malloc_stats(gm); } diff --git a/vs/sdl2/src/stdlib/SDL_mslibc.c b/vs/sdl2/src/stdlib/SDL_mslibc.c index 3a1a08ab551..09b8bf8b824 100644 --- a/vs/sdl2/src/stdlib/SDL_mslibc.c +++ b/vs/sdl2/src/stdlib/SDL_mslibc.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -120,7 +120,7 @@ void __declspec(naked) _ftol() /* *INDENT-ON* */ } -//Causes conflict with LIBCMT on VS2022 +// Causes conflict with LIBCMT on VS2022 #if _MSC_VER <= 1930 void _ftol2_sse() { diff --git a/vs/sdl2/src/stdlib/SDL_qsort.c b/vs/sdl2/src/stdlib/SDL_qsort.c index d1375ec40d8..63995594e67 100644 --- a/vs/sdl2/src/stdlib/SDL_qsort.c +++ b/vs/sdl2/src/stdlib/SDL_qsort.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,7 +28,7 @@ #include "SDL_stdinc.h" #if defined(HAVE_QSORT) -void SDL_qsort(void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *)) +void SDL_qsort(void *base, size_t nmemb, size_t size, SDL_CompareCallback compare) { if (!base) { return; @@ -65,7 +65,7 @@ void SDL_qsort(void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (co /* This code came from Gareth McCaughan, under the zlib license. -Specifically this: https://www.mccaughan.org.uk/software/qsort.c-1.15 +Specifically this: https://www.mccaughan.org.uk/software/qsort.c-1.16 Everything below this comment until the HAVE_QSORT #endif was from Gareth (any minor changes will be noted inline). @@ -112,7 +112,7 @@ benefit! * Gareth McCaughan */ -/* Copyright (c) 1998-2016 Gareth McCaughan +/* Copyright (c) 1998-2021 Gareth McCaughan * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any @@ -148,17 +148,23 @@ benefit! * (pre-insertion-sort messed up). * Disable DEBUG_QSORT by default. * Tweak comments very slightly. + * 2021-02-20 v1.16 Fix bug kindly reported by Ray Gardner + * (error in recursion leading to possible + * stack overflow). + * When checking alignment, avoid casting + * pointer to possibly-smaller integer. */ /* BEGIN SDL CHANGE ... commented this out with an #if 0 block. --ryan. */ #if 0 #include +#include #include #include #undef DEBUG_QSORT -static char _ID[]=""; +static char _ID[]=""; #endif /* END SDL CHANGE ... commented this out with an #if 0 block. --ryan. */ @@ -168,7 +174,8 @@ static char _ID[]=""; #define WORD_BYTES sizeof(int) /* How big does our stack need to be? Answer: one entry per - * bit in a |size_t|. + * bit in a |size_t|. (Actually, a bit less because we don't + * recurse all the way down to size-1 subarrays.) */ #define STACK_SIZE (8*sizeof(size_t)) @@ -207,11 +214,12 @@ typedef struct { char * first; char * last; } stack_entry; * on large datasets for locality-of-reference reasons, * but it makes the code much nastier and increases * bookkeeping overhead. - * 2. We always save the shorter and get to work on the - * longer. This guarantees that every time we push - * an item onto the stack its size is <= 1/2 of that - * of its parent; so the stack can't need more than - * log_2(max-array-size) entries. + * 2. We always save the longer and get to work on the + * shorter. This guarantees that whenever we push + * a k'th entry onto the stack we are about to get + * working on something of size <= N/2^k where N is + * the original array size; so the stack can't need + * more than log_2(max-array-size) entries. * 3. We choose a pivot by looking at the first, last * and middle elements. We arrange them into order * because it's easy to do that in conjunction with @@ -273,8 +281,8 @@ typedef struct { char * first; char * last; } stack_entry; if (r>=Trunc) doRight \ else pop \ } \ - else if (l<=r) { pushLeft; doRight } \ - else if (r>=Trunc) { pushRight; doLeft }\ + else if (l<=r) { pushRight; doLeft } \ + else if (r>=Trunc) { pushLeft; doRight }\ else doLeft \ } @@ -522,11 +530,10 @@ fprintf(stderr, "after partitioning first=#%lu last=#%lu\n", (first-(char*)base) /* ---------------------------------------------------------------------- */ -extern void qsortG(void *base, size_t nmemb, size_t size, - int (SDLCALL * compare)(const void *, const void *)) { +extern void qsortG(void *base, size_t nmemb, size_t size, SDL_CompareCallback compare) { if (nmemb<=1) return; - if (((size_t)base|size)&(WORD_BYTES-1)) + if (((uintptr_t)base|size)&(WORD_BYTES-1)) qsort_nonaligned(base,nmemb,size,compare); else if (size!=WORD_BYTES) qsort_aligned(base,nmemb,size,compare); @@ -536,7 +543,7 @@ extern void qsortG(void *base, size_t nmemb, size_t size, #endif /* HAVE_QSORT */ -void *SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (SDLCALL * compare)(const void *, const void *)) +void *SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, SDL_CompareCallback compare) { #if defined(HAVE_BSEARCH) return bsearch(key, base, nmemb, size, compare); diff --git a/vs/sdl2/src/stdlib/SDL_stdlib.c b/vs/sdl2/src/stdlib/SDL_stdlib.c index a90f09f7c11..2a930da2f5e 100644 --- a/vs/sdl2/src/stdlib/SDL_stdlib.c +++ b/vs/sdl2/src/stdlib/SDL_stdlib.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/stdlib/SDL_string.c b/vs/sdl2/src/stdlib/SDL_string.c index b66163ce6ef..38b5201c624 100644 --- a/vs/sdl2/src/stdlib/SDL_string.c +++ b/vs/sdl2/src/stdlib/SDL_string.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -55,234 +55,235 @@ static size_t UTF8_TrailingBytes(unsigned char c) } #if !defined(HAVE_VSSCANF) || !defined(HAVE_STRTOL) || !defined(HAVE_STRTOUL) || !defined(HAVE_STRTOD) -static size_t SDL_ScanLong(const char *text, int count, int radix, long *valuep) -{ - const char *textstart = text; - long value = 0; +/** + * Parses an unsigned long long and returns the unsigned value and sign bit. + * + * Positive values are clamped to ULLONG_MAX. + * The result `value == 0 && negative` indicates negative overflow + * and might need to be handled differently depending on whether a + * signed or unsigned integer is being parsed. + */ +static size_t SDL_ScanUnsignedLongLongInternal(const char *text, int count, int radix, unsigned long long *valuep, SDL_bool *negativep) +{ + const unsigned long long ullong_max = ~0ULL; + + const char *text_start = text; + const char *number_start = text_start; + unsigned long long value = 0; SDL_bool negative = SDL_FALSE; + SDL_bool overflow = SDL_FALSE; - if (*text == '-') { - negative = SDL_TRUE; - ++text; + if (radix == 0 || (radix >= 2 && radix <= 36)) { + while (SDL_isspace(*text)) { + ++text; + } + if (*text == '-' || *text == '+') { + negative = *text == '-'; + ++text; + } + if ((radix == 0 || radix == 16) && *text == '0' && (text[1] == 'x' || text[1] == 'X')) { + text += 2; + radix = 16; + } else if (radix == 0 && *text == '0' && (text[1] >= '0' && text[1] <= '9')) { + ++text; + radix = 8; + } else if (radix == 0) { + radix = 10; + } + number_start = text; + do { + unsigned long long digit; + if (*text >= '0' && *text <= '9') { + digit = *text - '0'; + } else if (radix > 10) { + if (*text >= 'A' && *text < 'A' + (radix - 10)) { + digit = 10 + (*text - 'A'); + } else if (*text >= 'a' && *text < 'a' + (radix - 10)) { + digit = 10 + (*text - 'a'); + } else { + break; + } + } else { + break; + } + if (value != 0 && radix > ullong_max / value) { + overflow = SDL_TRUE; + } else { + value *= radix; + if (digit > ullong_max - value) { + overflow = SDL_TRUE; + } else { + value += digit; + } + } + ++text; + } while (count == 0 || (text - text_start) != count); } - if (radix == 16 && SDL_strncmp(text, "0x", 2) == 0) { - text += 2; - } - for (;;) { - int v; - if (SDL_isdigit((unsigned char)*text)) { - v = *text - '0'; - } else if (radix == 16 && SDL_isupperhex(*text)) { - v = 10 + (*text - 'A'); - } else if (radix == 16 && SDL_islowerhex(*text)) { - v = 10 + (*text - 'a'); + if (text == number_start) { + if (radix == 16 && text > text_start && (*(text - 1) == 'x' || *(text - 1) == 'X')) { + // the string was "0x"; consume the '0' but not the 'x' + --text; } else { - break; + // no number was parsed, and thus no characters were consumed + text = text_start; } - value *= radix; - value += v; - ++text; - - if (count > 0 && (text - textstart) == count) { - break; + } + if (overflow) { + if (negative) { + value = 0; + } else { + value = ullong_max; } + } else if (value == 0) { + negative = SDL_FALSE; } - if (valuep && text > textstart) { - if (negative && value) { - *valuep = -value; + *valuep = value; + *negativep = negative; + return text - text_start; +} + +static size_t SDL_ScanLong(const char *text, int count, int radix, long *valuep) +{ + const unsigned long long_max = (~0UL) >> 1; + unsigned long long value; + SDL_bool negative; + size_t len = SDL_ScanUnsignedLongLongInternal(text, count, radix, &value, &negative); + if (negative) { + const unsigned long abs_long_min = long_max + 1; + if (value == 0 || value > abs_long_min) { + value = 0ULL - abs_long_min; } else { - *valuep = value; + value = 0ULL - value; } + } else if (value > long_max) { + value = long_max; } - return text - textstart; + *valuep = (long)value; + return len; } #endif #if !defined(HAVE_VSSCANF) || !defined(HAVE_STRTOUL) || !defined(HAVE_STRTOD) static size_t SDL_ScanUnsignedLong(const char *text, int count, int radix, unsigned long *valuep) { - const char *textstart = text; - unsigned long value = 0; - - if (*text == '-') { - return SDL_ScanLong(text, count, radix, (long *)valuep); - } - - if (radix == 16 && SDL_strncmp(text, "0x", 2) == 0) { - text += 2; - } - for (;;) { - int v; - if (SDL_isdigit((unsigned char)*text)) { - v = *text - '0'; - } else if (radix == 16 && SDL_isupperhex(*text)) { - v = 10 + (*text - 'A'); - } else if (radix == 16 && SDL_islowerhex(*text)) { - v = 10 + (*text - 'a'); + const unsigned long ulong_max = ~0UL; + unsigned long long value; + SDL_bool negative; + size_t len = SDL_ScanUnsignedLongLongInternal(text, count, radix, &value, &negative); + if (negative) { + if (value == 0 || value > ulong_max) { + value = ulong_max; + } else if (value == ulong_max) { + value = 1; } else { - break; - } - value *= radix; - value += v; - ++text; - - if (count > 0 && (text - textstart) == count) { - break; + value = 0ULL - value; } + } else if (value > ulong_max) { + value = ulong_max; } - if (valuep && text > textstart) { - *valuep = value; - } - return text - textstart; + *valuep = (unsigned long)value; + return len; } #endif #ifndef HAVE_VSSCANF static size_t SDL_ScanUintPtrT(const char *text, int radix, uintptr_t *valuep) { - const char *textstart = text; - uintptr_t value = 0; - - if (radix == 16 && SDL_strncmp(text, "0x", 2) == 0) { - text += 2; - } - for (;;) { - int v; - if (SDL_isdigit((unsigned char)*text)) { - v = *text - '0'; - } else if (radix == 16 && SDL_isupperhex(*text)) { - v = 10 + (*text - 'A'); - } else if (radix == 16 && SDL_islowerhex(*text)) { - v = 10 + (*text - 'a'); + const uintptr_t uintptr_max = ~(uintptr_t)0; + unsigned long long value; + SDL_bool negative; + size_t len = SDL_ScanUnsignedLongLongInternal(text, 0, 16, &value, &negative); + if (negative) { + if (value == 0 || value > uintptr_max) { + value = uintptr_max; + } else if (value == uintptr_max) { + value = 1; } else { - break; + value = 0ULL - value; } - value *= radix; - value += v; - ++text; - } - if (valuep && text > textstart) { - *valuep = value; + } else if (value > uintptr_max) { + value = uintptr_max; } - return text - textstart; + *valuep = (uintptr_t)value; + return len; } #endif #if !defined(HAVE_VSSCANF) || !defined(HAVE_STRTOLL) || !defined(HAVE_STRTOULL) static size_t SDL_ScanLongLong(const char *text, int count, int radix, Sint64 *valuep) { - const char *textstart = text; - Sint64 value = 0; - SDL_bool negative = SDL_FALSE; - - if (*text == '-') { - negative = SDL_TRUE; - ++text; - } - if (radix == 16 && SDL_strncmp(text, "0x", 2) == 0) { - text += 2; - } - for (;;) { - int v; - if (SDL_isdigit((unsigned char)*text)) { - v = *text - '0'; - } else if (radix == 16 && SDL_isupperhex(*text)) { - v = 10 + (*text - 'A'); - } else if (radix == 16 && SDL_islowerhex(*text)) { - v = 10 + (*text - 'a'); - } else { - break; - } - value *= radix; - value += v; - ++text; - - if (count > 0 && (text - textstart) == count) { - break; - } - } - if (valuep && text > textstart) { - if (negative && value) { - *valuep = -value; + const unsigned long long llong_max = (~0ULL) >> 1; + unsigned long long value; + SDL_bool negative; + size_t len = SDL_ScanUnsignedLongLongInternal(text, count, radix, &value, &negative); + if (negative) { + const unsigned long long abs_llong_min = llong_max + 1; + if (value == 0 || value > abs_llong_min) { + value = 0ULL - abs_llong_min; } else { - *valuep = value; + value = 0ULL - value; } + } else if (value > llong_max) { + value = llong_max; } - return text - textstart; + *valuep = value; + return len; } #endif #if !defined(HAVE_VSSCANF) || !defined(HAVE_STRTOULL) static size_t SDL_ScanUnsignedLongLong(const char *text, int count, int radix, Uint64 *valuep) { - const char *textstart = text; - Uint64 value = 0; - - if (*text == '-') { - return SDL_ScanLongLong(text, count, radix, (Sint64 *)valuep); - } - - if (radix == 16 && SDL_strncmp(text, "0x", 2) == 0) { - text += 2; - } - for (;;) { - int v; - if (SDL_isdigit((unsigned char)*text)) { - v = *text - '0'; - } else if (radix == 16 && SDL_isupperhex(*text)) { - v = 10 + (*text - 'A'); - } else if (radix == 16 && SDL_islowerhex(*text)) { - v = 10 + (*text - 'a'); + const unsigned long long ullong_max = ~0ULL; + SDL_bool negative; + size_t len = SDL_ScanUnsignedLongLongInternal(text, count, radix, valuep, &negative); + if (negative) { + if (*valuep == 0) { + *valuep = ullong_max; } else { - break; - } - value *= radix; - value += v; - ++text; - - if (count > 0 && (text - textstart) == count) { - break; + *valuep = 0ULL - *valuep; } } - if (valuep && text > textstart) { - *valuep = value; - } - return text - textstart; + return len; } #endif #if !defined(HAVE_VSSCANF) || !defined(HAVE_STRTOD) static size_t SDL_ScanFloat(const char *text, double *valuep) { - const char *textstart = text; - unsigned long lvalue = 0; + const char *text_start = text; + const char *number_start = text_start; double value = 0.0; SDL_bool negative = SDL_FALSE; - if (*text == '-') { - negative = SDL_TRUE; + while (SDL_isspace(*text)) { ++text; } - text += SDL_ScanUnsignedLong(text, 0, 10, &lvalue); - value += lvalue; - if (*text == '.') { - int mult = 10; + if (*text == '-' || *text == '+') { + negative = *text == '-'; ++text; - while (SDL_isdigit((unsigned char)*text)) { - lvalue = *text - '0'; - value += (double)lvalue / mult; - mult *= 10; + } + number_start = text; + if (SDL_isdigit(*text)) { + value += SDL_strtoull(text, (char **)(&text), 10); + if (*text == '.') { + double denom = 10; ++text; + while (SDL_isdigit(*text)) { + value += (double)(*text - '0') / denom; + denom *= 10; + ++text; + } } } - if (valuep && text > textstart) { - if (negative && value) { - *valuep = -value; - } else { - *valuep = value; - } + if (text == number_start) { + // no number was parsed, and thus no characters were consumed + text = text_start; + } else if (negative) { + value = -value; } - return text - textstart; + *valuep = value; + return text - text_start; } #endif @@ -897,18 +898,8 @@ long SDL_strtol(const char *string, char **endp, int base) #if defined(HAVE_STRTOL) return strtol(string, endp, base); #else - size_t len; long value = 0; - - if (!base) { - if ((SDL_strlen(string) > 2) && (SDL_strncmp(string, "0x", 2) == 0)) { - base = 16; - } else { - base = 10; - } - } - - len = SDL_ScanLong(string, 0, base, &value); + size_t len = SDL_ScanLong(string, 0, base, &value); if (endp) { *endp = (char *)string + len; } @@ -922,18 +913,8 @@ SDL_strtoul(const char *string, char **endp, int base) #if defined(HAVE_STRTOUL) return strtoul(string, endp, base); #else - size_t len; unsigned long value = 0; - - if (!base) { - if ((SDL_strlen(string) > 2) && (SDL_strncmp(string, "0x", 2) == 0)) { - base = 16; - } else { - base = 10; - } - } - - len = SDL_ScanUnsignedLong(string, 0, base, &value); + size_t len = SDL_ScanUnsignedLong(string, 0, base, &value); if (endp) { *endp = (char *)string + len; } @@ -946,18 +927,8 @@ Sint64 SDL_strtoll(const char *string, char **endp, int base) #if defined(HAVE_STRTOLL) return strtoll(string, endp, base); #else - size_t len; - Sint64 value = 0; - - if (!base) { - if ((SDL_strlen(string) > 2) && (SDL_strncmp(string, "0x", 2) == 0)) { - base = 16; - } else { - base = 10; - } - } - - len = SDL_ScanLongLong(string, 0, base, &value); + long long value = 0; + size_t len = SDL_ScanLongLong(string, 0, base, &value); if (endp) { *endp = (char *)string + len; } @@ -970,18 +941,8 @@ Uint64 SDL_strtoull(const char *string, char **endp, int base) #if defined(HAVE_STRTOULL) return strtoull(string, endp, base); #else - size_t len; - Uint64 value = 0; - - if (!base) { - if ((SDL_strlen(string) > 2) && (SDL_strncmp(string, "0x", 2) == 0)) { - base = 16; - } else { - base = 10; - } - } - - len = SDL_ScanUnsignedLongLong(string, 0, base, &value); + unsigned long long value = 0; + size_t len = SDL_ScanUnsignedLongLong(string, 0, base, &value); if (endp) { *endp = (char *)string + len; } @@ -1150,6 +1111,7 @@ static SDL_bool CharacterMatchesSet(char c, const char *set, size_t set_len) /* NOLINTNEXTLINE(readability-non-const-parameter) */ int SDL_vsscanf(const char *text, const char *fmt, va_list ap) { + const char *start = text; int retval = 0; if (!text || !*text) { @@ -1420,6 +1382,36 @@ int SDL_vsscanf(const char *text, const char *fmt, va_list ap) } done = SDL_TRUE; break; + case 'n': + switch (inttype) { + case DO_SHORT: + { + short *valuep = va_arg(ap, short *); + *valuep = (short)(text - start); + } break; + case DO_INT: + { + int *valuep = va_arg(ap, int *); + *valuep = (int)(text - start); + } break; + case DO_LONG: + { + long *valuep = va_arg(ap, long *); + *valuep = (long)(text - start); + } break; + case DO_LONGLONG: + { + long long *valuep = va_arg(ap, long long *); + *valuep = (long long)(text - start); + } break; + case DO_SIZE_T: + { + size_t *valuep = va_arg(ap, size_t *); + *valuep = (size_t)(text - start); + } break; + } + done = SDL_TRUE; + break; case '[': { const char *set = fmt + 1; @@ -1529,7 +1521,7 @@ typedef enum typedef struct { - SDL_bool left_justify; /* for now: ignored. */ + SDL_bool left_justify; SDL_bool force_sign; SDL_bool force_type; /* for now: used only by float printer, ignored otherwise. */ SDL_bool pad_zeroes; @@ -1541,6 +1533,9 @@ typedef struct static size_t SDL_PrintString(char *text, size_t maxlen, SDL_FormatInfo *info, const char *string) { + const char fill = (info && info->pad_zeroes) ? '0' : ' '; + size_t width = 0; + size_t filllen = 0; size_t length = 0; size_t slen, sz; @@ -1550,24 +1545,29 @@ static size_t SDL_PrintString(char *text, size_t maxlen, SDL_FormatInfo *info, c sz = SDL_strlen(string); if (info && info->width > 0 && (size_t)info->width > sz) { - const char fill = info->pad_zeroes ? '0' : ' '; - size_t width = info->width - sz; - size_t filllen; - + width = info->width - sz; if (info->precision >= 0 && (size_t)info->precision < sz) { width += sz - (size_t)info->precision; } filllen = SDL_min(width, maxlen); - SDL_memset(text, fill, filllen); - text += filllen; - maxlen -= filllen; - length += width; + if (!info->left_justify) { + SDL_memset(text, fill, filllen); + text += filllen; + maxlen -= filllen; + length += width; + filllen = 0; + } } SDL_strlcpy(text, string, maxlen); length += sz; + if (filllen > 0) { + SDL_memset(text + sz, fill, filllen); + length += width; + } + if (info) { if (info->precision >= 0 && (size_t)info->precision < sz) { slen = (size_t)info->precision; diff --git a/vs/sdl2/src/stdlib/SDL_strtokr.c b/vs/sdl2/src/stdlib/SDL_strtokr.c index 38dc83029a6..7d8cd0d7f62 100644 --- a/vs/sdl2/src/stdlib/SDL_strtokr.c +++ b/vs/sdl2/src/stdlib/SDL_strtokr.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/stdlib/SDL_vacopy.h b/vs/sdl2/src/stdlib/SDL_vacopy.h index ee45bf6318f..d8ae331aba3 100644 --- a/vs/sdl2/src/stdlib/SDL_vacopy.h +++ b/vs/sdl2/src/stdlib/SDL_vacopy.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/test/SDL_test_assert.c b/vs/sdl2/src/test/SDL_test_assert.c index e8d0ff0d18b..0082e374cce 100644 --- a/vs/sdl2/src/test/SDL_test_assert.c +++ b/vs/sdl2/src/test/SDL_test_assert.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -107,7 +107,7 @@ void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription, /* * Resets the assert summary counters to zero. */ -void SDLTest_ResetAssertSummary() +void SDLTest_ResetAssertSummary(void) { SDLTest_AssertsPassed = 0; SDLTest_AssertsFailed = 0; @@ -117,7 +117,7 @@ void SDLTest_ResetAssertSummary() * Logs summary of all assertions (total, pass, fail) since last reset * as INFO (failed==0) or ERROR (failed > 0). */ -void SDLTest_LogAssertSummary() +void SDLTest_LogAssertSummary(void) { int totalAsserts = SDLTest_AssertsPassed + SDLTest_AssertsFailed; if (SDLTest_AssertsFailed == 0) { @@ -130,7 +130,7 @@ void SDLTest_LogAssertSummary() /* * Converts the current assert state into a test result */ -int SDLTest_AssertSummaryToTestResult() +int SDLTest_AssertSummaryToTestResult(void) { if (SDLTest_AssertsFailed > 0) { return TEST_RESULT_FAILED; diff --git a/vs/sdl2/src/test/SDL_test_common.c b/vs/sdl2/src/test/SDL_test_common.c index 04ad51f2ac5..8181ce33db6 100644 --- a/vs/sdl2/src/test/SDL_test_common.c +++ b/vs/sdl2/src/test/SDL_test_common.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/test/SDL_test_compare.c b/vs/sdl2/src/test/SDL_test_compare.c index ba532c7f34e..de3e94c9e8f 100644 --- a/vs/sdl2/src/test/SDL_test_compare.c +++ b/vs/sdl2/src/test/SDL_test_compare.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/test/SDL_test_crc32.c b/vs/sdl2/src/test/SDL_test_crc32.c index b13839b5849..6de87142223 100644 --- a/vs/sdl2/src/test/SDL_test_crc32.c +++ b/vs/sdl2/src/test/SDL_test_crc32.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/test/SDL_test_font.c b/vs/sdl2/src/test/SDL_test_font.c index ffa3dde82cd..d7267b47f34 100644 --- a/vs/sdl2/src/test/SDL_test_font.c +++ b/vs/sdl2/src/test/SDL_test_font.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/test/SDL_test_fuzzer.c b/vs/sdl2/src/test/SDL_test_fuzzer.c index a04eee05ed0..15bef31c88d 100644 --- a/vs/sdl2/src/test/SDL_test_fuzzer.c +++ b/vs/sdl2/src/test/SDL_test_fuzzer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -68,54 +68,54 @@ void SDLTest_FuzzerInit(Uint64 execKey) fuzzerInvocationCounter = 0; } -int SDLTest_GetFuzzerInvocationCount() +int SDLTest_GetFuzzerInvocationCount(void) { return fuzzerInvocationCounter; } -Uint8 SDLTest_RandomUint8() +Uint8 SDLTest_RandomUint8(void) { fuzzerInvocationCounter++; return (Uint8)SDLTest_RandomInt(&rndContext) & 0x000000FF; } -Sint8 SDLTest_RandomSint8() +Sint8 SDLTest_RandomSint8(void) { fuzzerInvocationCounter++; return (Sint8)SDLTest_RandomInt(&rndContext) & 0x000000FF; } -Uint16 SDLTest_RandomUint16() +Uint16 SDLTest_RandomUint16(void) { fuzzerInvocationCounter++; return (Uint16)SDLTest_RandomInt(&rndContext) & 0x0000FFFF; } -Sint16 SDLTest_RandomSint16() +Sint16 SDLTest_RandomSint16(void) { fuzzerInvocationCounter++; return (Sint16)SDLTest_RandomInt(&rndContext) & 0x0000FFFF; } -Sint32 SDLTest_RandomSint32() +Sint32 SDLTest_RandomSint32(void) { fuzzerInvocationCounter++; return (Sint32)SDLTest_RandomInt(&rndContext); } -Uint32 SDLTest_RandomUint32() +Uint32 SDLTest_RandomUint32(void) { fuzzerInvocationCounter++; return (Uint32)SDLTest_RandomInt(&rndContext); } -Uint64 SDLTest_RandomUint64() +Uint64 SDLTest_RandomUint64(void) { union { @@ -132,7 +132,7 @@ Uint64 SDLTest_RandomUint64() return value.v64; } -Sint64 SDLTest_RandomSint64() +Sint64 SDLTest_RandomSint64(void) { union { @@ -153,21 +153,22 @@ Sint32 SDLTest_RandomIntegerInRange(Sint32 pMin, Sint32 pMax) { Sint64 min = pMin; Sint64 max = pMax; - Sint64 temp; - Sint64 number; + Uint64 range; if (pMin > pMax) { - temp = min; - min = max; - max = temp; + min = pMax; + max = pMin; } else if (pMin == pMax) { return (Sint32)min; } - number = SDLTest_RandomUint32(); - /* invocation count increment in preceeding call */ - - return (Sint32)((number % ((max + 1) - min)) + min); + range = (Sint64)max - (Sint64)min; + if (range < SDL_MAX_SINT32) { + return (Sint32) (min + (Sint32) (SDLTest_RandomUint32() % (range + 1))); + } else { + const Uint64 add = SDLTest_RandomUint32() | SDLTest_RandomUint32(); + return (Sint32) (min + (Sint64) (add % (range + 1))); + } } /* ! @@ -425,24 +426,24 @@ Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL validDomain); } -float SDLTest_RandomUnitFloat() +float SDLTest_RandomUnitFloat(void) { return SDLTest_RandomUint32() / (float)UINT_MAX; } -float SDLTest_RandomFloat() +float SDLTest_RandomFloat(void) { return (float)(SDLTest_RandomUnitDouble() * 2.0 * (double)FLT_MAX - (double)(FLT_MAX)); } double -SDLTest_RandomUnitDouble() +SDLTest_RandomUnitDouble(void) { return (double)(SDLTest_RandomUint64() >> 11) * (1.0 / 9007199254740992.0); } double -SDLTest_RandomDouble() +SDLTest_RandomDouble(void) { double r = 0.0; double s = 1.0; @@ -456,7 +457,7 @@ SDLTest_RandomDouble() return r; } -char *SDLTest_RandomAsciiString() +char *SDLTest_RandomAsciiString(void) { return SDLTest_RandomAsciiStringWithMaximumLength(255); } diff --git a/vs/sdl2/src/test/SDL_test_harness.c b/vs/sdl2/src/test/SDL_test_harness.c index 460e694f8c4..ae6d11caa53 100644 --- a/vs/sdl2/src/test/SDL_test_harness.c +++ b/vs/sdl2/src/test/SDL_test_harness.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -339,7 +339,7 @@ static void SDLTest_LogTestSuiteSummary(SDLTest_TestSuiteReference *testSuites) #endif /* Gets a timer value in seconds */ -static float GetClock() +static float GetClock(void) { float currentClock = SDL_GetPerformanceCounter() / (float)SDL_GetPerformanceFrequency(); return currentClock; diff --git a/vs/sdl2/src/test/SDL_test_imageBlit.c b/vs/sdl2/src/test/SDL_test_imageBlit.c index bf1cf2fce28..f084db52301 100644 --- a/vs/sdl2/src/test/SDL_test_imageBlit.c +++ b/vs/sdl2/src/test/SDL_test_imageBlit.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -540,7 +540,7 @@ static const SDLTest_SurfaceImage_t SDLTest_imageBlit = { /** * \brief Returns the Blit test image as SDL_Surface. */ -SDL_Surface *SDLTest_ImageBlit() +SDL_Surface *SDLTest_ImageBlit(void) { SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormatFrom( (void *)SDLTest_imageBlit.pixel_data, @@ -1014,7 +1014,7 @@ static const SDLTest_SurfaceImage_t SDLTest_imageBlitColor = { /** * \brief Returns the BlitColor test image as SDL_Surface. */ -SDL_Surface *SDLTest_ImageBlitColor() +SDL_Surface *SDLTest_ImageBlitColor(void) { SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormatFrom( (void *)SDLTest_imageBlitColor.pixel_data, @@ -1651,7 +1651,7 @@ static const SDLTest_SurfaceImage_t SDLTest_imageBlitAlpha = { /** * \brief Returns the BlitAlpha test image as SDL_Surface. */ -SDL_Surface *SDLTest_ImageBlitAlpha() +SDL_Surface *SDLTest_ImageBlitAlpha(void) { SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormatFrom( (void *)SDLTest_imageBlitAlpha.pixel_data, diff --git a/vs/sdl2/src/test/SDL_test_imageBlitBlend.c b/vs/sdl2/src/test/SDL_test_imageBlitBlend.c index 520cfffdd00..946bf586a06 100644 --- a/vs/sdl2/src/test/SDL_test_imageBlitBlend.c +++ b/vs/sdl2/src/test/SDL_test_imageBlitBlend.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -580,7 +580,7 @@ static const SDLTest_SurfaceImage_t SDLTest_imageBlitBlendAdd = { /** * \brief Returns the BlitBlendAdd test image as SDL_Surface. */ -SDL_Surface *SDLTest_ImageBlitBlendAdd() +SDL_Surface *SDLTest_ImageBlitBlendAdd(void) { SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormatFrom( (void *)SDLTest_imageBlitBlendAdd.pixel_data, @@ -1171,7 +1171,7 @@ static const SDLTest_SurfaceImage_t SDLTest_imageBlitBlend = { /** * \brief Returns the BlitBlend test image as SDL_Surface. */ -SDL_Surface *SDLTest_ImageBlitBlend() +SDL_Surface *SDLTest_ImageBlitBlend(void) { SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormatFrom( (void *)SDLTest_imageBlitBlend.pixel_data, @@ -1592,7 +1592,7 @@ static const SDLTest_SurfaceImage_t SDLTest_imageBlitBlendMod = { /** * \brief Returns the BlitBlendMod test image as SDL_Surface. */ -SDL_Surface *SDLTest_ImageBlitBlendMod() +SDL_Surface *SDLTest_ImageBlitBlendMod(void) { SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormatFrom( (void *)SDLTest_imageBlitBlendMod.pixel_data, @@ -2396,7 +2396,7 @@ static const SDLTest_SurfaceImage_t SDLTest_imageBlitBlendNone = { /** * \brief Returns the BlitBlendNone test image as SDL_Surface. */ -SDL_Surface *SDLTest_ImageBlitBlendNone() +SDL_Surface *SDLTest_ImageBlitBlendNone(void) { SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormatFrom( (void *)SDLTest_imageBlitBlendNone.pixel_data, @@ -2932,7 +2932,7 @@ static const SDLTest_SurfaceImage_t SDLTest_imageBlitBlendAll = { /** * \brief Returns the BlitBlendAll test image as SDL_Surface. */ -SDL_Surface *SDLTest_ImageBlitBlendAll() +SDL_Surface *SDLTest_ImageBlitBlendAll(void) { SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormatFrom( (void *)SDLTest_imageBlitBlendAll.pixel_data, diff --git a/vs/sdl2/src/test/SDL_test_imageFace.c b/vs/sdl2/src/test/SDL_test_imageFace.c index 255acaddee1..a30b6688944 100644 --- a/vs/sdl2/src/test/SDL_test_imageFace.c +++ b/vs/sdl2/src/test/SDL_test_imageFace.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -223,7 +223,7 @@ static const SDLTest_SurfaceImage_t SDLTest_imageFace = { /** * \brief Returns the Face test image as SDL_Surface. */ -SDL_Surface *SDLTest_ImageFace() +SDL_Surface *SDLTest_ImageFace(void) { SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormatFrom( (void *)SDLTest_imageFace.pixel_data, diff --git a/vs/sdl2/src/test/SDL_test_imagePrimitives.c b/vs/sdl2/src/test/SDL_test_imagePrimitives.c index 6ef05c5547e..8e6585fd136 100644 --- a/vs/sdl2/src/test/SDL_test_imagePrimitives.c +++ b/vs/sdl2/src/test/SDL_test_imagePrimitives.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -504,7 +504,7 @@ static const SDLTest_SurfaceImage_t SDLTest_imagePrimitives = { /** * \brief Returns the Primitives test image as SDL_Surface. */ -SDL_Surface *SDLTest_ImagePrimitives() +SDL_Surface *SDLTest_ImagePrimitives(void) { SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormatFrom( (void *)SDLTest_imagePrimitives.pixel_data, diff --git a/vs/sdl2/src/test/SDL_test_imagePrimitivesBlend.c b/vs/sdl2/src/test/SDL_test_imagePrimitivesBlend.c index 8ee9f417757..a6372f56a66 100644 --- a/vs/sdl2/src/test/SDL_test_imagePrimitivesBlend.c +++ b/vs/sdl2/src/test/SDL_test_imagePrimitivesBlend.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -677,7 +677,7 @@ static const SDLTest_SurfaceImage_t SDLTest_imagePrimitivesBlend = { /** * \brief Returns the PrimitivesBlend test image as SDL_Surface. */ -SDL_Surface *SDLTest_ImagePrimitivesBlend() +SDL_Surface *SDLTest_ImagePrimitivesBlend(void) { SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormatFrom( (void *)SDLTest_imagePrimitivesBlend.pixel_data, diff --git a/vs/sdl2/src/test/SDL_test_log.c b/vs/sdl2/src/test/SDL_test_log.c index 714d307a7d0..4e8059591b0 100644 --- a/vs/sdl2/src/test/SDL_test_log.c +++ b/vs/sdl2/src/test/SDL_test_log.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/test/SDL_test_md5.c b/vs/sdl2/src/test/SDL_test_md5.c index 83f6f9ce90a..fe9f9385005 100644 --- a/vs/sdl2/src/test/SDL_test_md5.c +++ b/vs/sdl2/src/test/SDL_test_md5.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/test/SDL_test_memory.c b/vs/sdl2/src/test/SDL_test_memory.c index ffd3eaac87d..066c64f666f 100644 --- a/vs/sdl2/src/test/SDL_test_memory.c +++ b/vs/sdl2/src/test/SDL_test_memory.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,6 +20,8 @@ */ #include "SDL_config.h" #include "SDL_assert.h" +#include "SDL_atomic.h" +#include "SDL_loadso.h" #include "SDL_stdinc.h" #include "SDL_log.h" #include "SDL_test_crc32.h" @@ -28,6 +30,31 @@ #ifdef HAVE_LIBUNWIND_H #define UNW_LOCAL_ONLY #include +#ifndef unw_get_proc_name_by_ip +#define SDLTEST_UNWIND_NO_PROC_NAME_BY_IP +static SDL_bool s_unwind_symbol_names = SDL_TRUE; +#endif +#endif + +#if defined(__WIN32__) && !defined(__WATCOMC__) +#define WIN32_WITH_DBGHELP +#endif + +#ifdef WIN32_WITH_DBGHELP +#include +#include + +static struct { + HMODULE module; + BOOL (WINAPI *pSymInitialize)(HANDLE hProcess, PCSTR UserSearchPath, BOOL fInvadeProcess); + BOOL (WINAPI *pSymFromAddr)(HANDLE hProcess, DWORD64 Address, PDWORD64 Displacement, PSYMBOL_INFO Symbol); + BOOL (WINAPI *pSymGetLineFromAddr64)(HANDLE hProcess, DWORD64 qwAddr, PDWORD pdwDisplacement, PIMAGEHLP_LINE64 Line); +} dyn_dbghelp; + +/* older SDKs might not have this: */ +__declspec(dllimport) USHORT WINAPI RtlCaptureStackBackTrace(ULONG FramesToSkip, ULONG FramesToCapture, PVOID* BackTrace, PULONG BackTraceHash); +#define CaptureStackBackTrace RtlCaptureStackBackTrace + #endif /* This is a simple tracking allocator to demonstrate the use of SDL's @@ -37,13 +64,17 @@ for production code. */ +#define MAXIMUM_TRACKED_STACK_DEPTH 16 + typedef struct SDL_tracked_allocation { void *mem; size_t size; - Uint64 stack[10]; - char stack_names[10][256]; + Uint64 stack[MAXIMUM_TRACKED_STACK_DEPTH]; struct SDL_tracked_allocation *next; +#ifdef SDLTEST_UNWIND_NO_PROC_NAME_BY_IP + char stack_names[MAXIMUM_TRACKED_STACK_DEPTH][256]; +#endif } SDL_tracked_allocation; static SDLTest_Crc32Context s_crc32_context; @@ -53,6 +84,16 @@ static SDL_realloc_func SDL_realloc_orig = NULL; static SDL_free_func SDL_free_orig = NULL; static int s_previous_allocations = 0; static SDL_tracked_allocation *s_tracked_allocations[256]; +static SDL_atomic_t s_lock; + +#define LOCK_ALLOCATOR() \ + do { \ + if (SDL_AtomicCAS(&s_lock, 0, 1)) { \ + break; \ + } \ + SDL_CPUPauseInstruction(); \ + } while (SDL_TRUE) +#define UNLOCK_ALLOCATOR() do { SDL_AtomicSet(&s_lock, 0); } while (0) static unsigned int get_allocation_bucket(void *mem) { @@ -66,12 +107,17 @@ static unsigned int get_allocation_bucket(void *mem) static SDL_bool SDL_IsAllocationTracked(void *mem) { SDL_tracked_allocation *entry; - int index = get_allocation_bucket(mem); + int index; + + LOCK_ALLOCATOR(); + index = get_allocation_bucket(mem); for (entry = s_tracked_allocations[index]; entry; entry = entry->next) { if (mem == entry->mem) { + UNLOCK_ALLOCATOR(); return SDL_TRUE; } } + UNLOCK_ALLOCATOR(); return SDL_FALSE; } @@ -83,8 +129,10 @@ static void SDL_TrackAllocation(void *mem, size_t size) if (SDL_IsAllocationTracked(mem)) { return; } + LOCK_ALLOCATOR(); entry = (SDL_tracked_allocation *)SDL_malloc_orig(sizeof(*entry)); if (!entry) { + UNLOCK_ALLOCATOR(); return; } entry->mem = mem; @@ -103,15 +151,20 @@ static void SDL_TrackAllocation(void *mem, size_t size) stack_index = 0; while (unw_step(&cursor) > 0) { - unw_word_t offset, pc; + unw_word_t pc; +#ifdef SDLTEST_UNWIND_NO_PROC_NAME_BY_IP + unw_word_t offset; char sym[236]; +#endif unw_get_reg(&cursor, UNW_REG_IP, &pc); entry->stack[stack_index] = pc; - if (unw_get_proc_name(&cursor, sym, sizeof(sym), &offset) == 0) { +#ifdef SDLTEST_UNWIND_NO_PROC_NAME_BY_IP + if (s_unwind_symbol_names && unw_get_proc_name(&cursor, sym, sizeof(sym), &offset) == 0) { SDL_snprintf(entry->stack_names[stack_index], sizeof(entry->stack_names[stack_index]), "%s+0x%llx", sym, (unsigned long long)offset); } +#endif ++stack_index; if (stack_index == SDL_arraysize(entry->stack)) { @@ -119,10 +172,24 @@ static void SDL_TrackAllocation(void *mem, size_t size) } } } +#elif defined(WIN32_WITH_DBGHELP) + { + Uint32 count; + PVOID frames[63]; + Uint32 i; + + count = CaptureStackBackTrace(1, SDL_arraysize(frames), frames, NULL); + + count = SDL_min(count, MAXIMUM_TRACKED_STACK_DEPTH); + for (i = 0; i < count; i++) { + entry->stack[i] = (Uint64)(uintptr_t)frames[i]; + } + } #endif /* HAVE_LIBUNWIND_H */ entry->next = s_tracked_allocations[index]; s_tracked_allocations[index] = entry; + UNLOCK_ALLOCATOR(); } static void SDL_UntrackAllocation(void *mem) @@ -130,6 +197,7 @@ static void SDL_UntrackAllocation(void *mem) SDL_tracked_allocation *entry, *prev; int index = get_allocation_bucket(mem); + LOCK_ALLOCATOR(); prev = NULL; for (entry = s_tracked_allocations[index]; entry; entry = entry->next) { if (mem == entry->mem) { @@ -139,10 +207,12 @@ static void SDL_UntrackAllocation(void *mem) s_tracked_allocations[index] = entry->next; } SDL_free_orig(entry); + UNLOCK_ALLOCATOR(); return; } prev = entry; } + UNLOCK_ALLOCATOR(); } static void *SDLCALL SDLTest_TrackedMalloc(size_t size) @@ -195,7 +265,7 @@ static void SDLCALL SDLTest_TrackedFree(void *ptr) SDL_free_orig(ptr); } -int SDLTest_TrackAllocations() +int SDLTest_TrackAllocations(void) { if (SDL_malloc_orig) { return 0; @@ -207,6 +277,41 @@ int SDLTest_TrackAllocations() if (s_previous_allocations != 0) { SDL_Log("SDLTest_TrackAllocations(): There are %d previous allocations, disabling free() validation", s_previous_allocations); } +#ifdef SDLTEST_UNWIND_NO_PROC_NAME_BY_IP + do { + /* Don't use SDL_GetHint: SDL_malloc is off limits. */ + const char *env_trackmem = SDL_getenv("SDL_TRACKMEM_SYMBOL_NAMES"); + if (env_trackmem) { + if (SDL_strcasecmp(env_trackmem, "1") == 0 || SDL_strcasecmp(env_trackmem, "yes") == 0 || SDL_strcasecmp(env_trackmem, "true") == 0) { + s_unwind_symbol_names = SDL_TRUE; + } else if (SDL_strcasecmp(env_trackmem, "0") == 0 || SDL_strcasecmp(env_trackmem, "no") == 0 || SDL_strcasecmp(env_trackmem, "false") == 0) { + s_unwind_symbol_names = SDL_FALSE; + } + } + } while (0); +#elif defined(WIN32_WITH_DBGHELP) + do { + dyn_dbghelp.module = SDL_LoadObject("dbghelp.dll"); + if (!dyn_dbghelp.module) { + goto dbghelp_failed; + } + dyn_dbghelp.pSymInitialize = (void *)SDL_LoadFunction(dyn_dbghelp.module, "SymInitialize"); + dyn_dbghelp.pSymFromAddr = (void *)SDL_LoadFunction(dyn_dbghelp.module, "SymFromAddr"); + dyn_dbghelp.pSymGetLineFromAddr64 = (void *)SDL_LoadFunction(dyn_dbghelp.module, "SymGetLineFromAddr64"); + if (!dyn_dbghelp.pSymInitialize || !dyn_dbghelp.pSymFromAddr || !dyn_dbghelp.pSymGetLineFromAddr64) { + goto dbghelp_failed; + } + if (!dyn_dbghelp.pSymInitialize(GetCurrentProcess(), NULL, TRUE)) { + goto dbghelp_failed; + } + break; + dbghelp_failed: + if (dyn_dbghelp.module) { + SDL_UnloadObject(dyn_dbghelp.module); + dyn_dbghelp.module = NULL; + } + } while (0); +#endif SDL_GetMemoryFunctions(&SDL_malloc_orig, &SDL_calloc_orig, @@ -220,11 +325,11 @@ int SDLTest_TrackAllocations() return 0; } -void SDLTest_LogAllocations() +void SDLTest_LogAllocations(void) { char *message = NULL; size_t message_size = 0; - char line[128], *tmp; + char line[256], *tmp; SDL_tracked_allocation *entry; int index, count, stack_index; Uint64 total_allocated; @@ -261,10 +366,48 @@ void SDLTest_LogAllocations() ADD_LINE(); /* Start at stack index 1 to skip our tracking functions */ for (stack_index = 1; stack_index < SDL_arraysize(entry->stack); ++stack_index) { + char stack_entry_description[256] = "???"; if (!entry->stack[stack_index]) { break; } - (void)SDL_snprintf(line, sizeof(line), "\t0x%" SDL_PRIx64 ": %s\n", entry->stack[stack_index], entry->stack_names[stack_index]); +#ifdef HAVE_LIBUNWIND_H + { +#ifdef SDLTEST_UNWIND_NO_PROC_NAME_BY_IP + if (s_unwind_symbol_names) { + (void)SDL_snprintf(stack_entry_description, sizeof(stack_entry_description), "%s", entry->stack_names[stack_index]); + } +#else + char name[256] = "???"; + unw_word_t offset = 0; + unw_get_proc_name_by_ip(unw_local_addr_space, entry->stack[stack_index], name, sizeof(name), &offset, NULL); + (void)SDL_snprintf(stack_entry_description, sizeof(stack_entry_description), "%s+0x%llx", name, (long long unsigned int)offset); +#endif + } +#elif defined(WIN32_WITH_DBGHELP) + { + DWORD64 dwDisplacement = 0; + IMAGEHLP_LINE64 dbg_line; + char symbol_buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)]; + PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)symbol_buffer; + DWORD lineColumn = 0; + pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO); + pSymbol->MaxNameLen = MAX_SYM_NAME; + dbg_line.SizeOfStruct = sizeof(dbg_line); + dbg_line.FileName = ""; + dbg_line.LineNumber = 0; + + if (dyn_dbghelp.module) { + if (!dyn_dbghelp.pSymFromAddr(GetCurrentProcess(), entry->stack[stack_index], &dwDisplacement, pSymbol)) { + SDL_strlcpy(pSymbol->Name, "???", MAX_SYM_NAME); + dwDisplacement = 0; + } + dyn_dbghelp.pSymGetLineFromAddr64(GetCurrentProcess(), (DWORD64)entry->stack[stack_index], &lineColumn, &dbg_line); + } + SDL_snprintf(stack_entry_description, sizeof(stack_entry_description), "%s+0x%I64x %s:%u", pSymbol->Name, dwDisplacement, dbg_line.FileName, (Uint32)dbg_line.LineNumber); + } +#endif + (void)SDL_snprintf(line, sizeof(line), "\t0x%" SDL_PRIx64 ": %s\n", entry->stack[stack_index], stack_entry_description); + ADD_LINE(); } total_allocated += entry->size; diff --git a/vs/sdl2/src/test/SDL_test_random.c b/vs/sdl2/src/test/SDL_test_random.c index 0d7ef4ed3a5..4d87e5b583e 100644 --- a/vs/sdl2/src/test/SDL_test_random.c +++ b/vs/sdl2/src/test/SDL_test_random.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/SDL_systhread.h b/vs/sdl2/src/thread/SDL_systhread.h index b56eaf4da25..a58e14bec07 100644 --- a/vs/sdl2/src/thread/SDL_systhread.h +++ b/vs/sdl2/src/thread/SDL_systhread.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -59,12 +59,18 @@ extern void SDL_SYS_WaitThread(SDL_Thread *thread); /* Mark thread as cleaned up as soon as it exits, without joining. */ extern void SDL_SYS_DetachThread(SDL_Thread *thread); +/* Initialize the global TLS data */ +extern void SDL_SYS_InitTLSData(void); + /* Get the thread local storage for this thread */ extern SDL_TLSData *SDL_SYS_GetTLSData(void); /* Set the thread local storage for this thread */ extern int SDL_SYS_SetTLSData(SDL_TLSData *data); +/* Quit the global TLS data */ +extern void SDL_SYS_QuitTLSData(void); + /* This is for internal SDL use, so we don't need #ifdefs everywhere. */ extern SDL_Thread * SDL_CreateThreadInternal(int(SDLCALL *fn)(void *), const char *name, diff --git a/vs/sdl2/src/thread/SDL_thread.c b/vs/sdl2/src/thread/SDL_thread.c index 55c29024428..8ff094072a6 100644 --- a/vs/sdl2/src/thread/SDL_thread.c +++ b/vs/sdl2/src/thread/SDL_thread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,6 +28,15 @@ #include "SDL_hints.h" #include "../SDL_error_c.h" +/* The storage is local to the thread, but the IDs are global for the process */ + +static SDL_atomic_t SDL_tls_allocated; + +void SDL_InitTLSData(void) +{ + SDL_SYS_InitTLSData(); +} + SDL_TLSID SDL_TLSCreate(void) { static SDL_atomic_t SDL_tls_id; @@ -45,7 +54,7 @@ void *SDL_TLSGet(SDL_TLSID id) return storage->array[id - 1].data; } -int SDL_TLSSet(SDL_TLSID id, const void *value, void(SDLCALL *destructor)(void *)) +int SDL_TLSSet(SDL_TLSID id, const void *value, SDL_TLSDestructorCallback destructor) { SDL_TLSData *storage; @@ -53,6 +62,13 @@ int SDL_TLSSet(SDL_TLSID id, const void *value, void(SDLCALL *destructor)(void * return SDL_InvalidParamError("id"); } + /* Make sure TLS is initialized. + * There's a race condition here if you are calling this from non-SDL threads + * and haven't called SDL_Init() on your main thread, but such is life. + */ + SDL_InitTLSData(); + + /* Get the storage for the current thread */ storage = SDL_SYS_GetTLSData(); if (!storage || (id > storage->limit)) { unsigned int i, oldlimit, newlimit; @@ -69,8 +85,10 @@ int SDL_TLSSet(SDL_TLSID id, const void *value, void(SDLCALL *destructor)(void * storage->array[i].destructor = NULL; } if (SDL_SYS_SetTLSData(storage) != 0) { + SDL_free(storage); return -1; } + SDL_AtomicIncRef(&SDL_tls_allocated); } storage->array[id - 1].data = SDL_const_cast(void *, value); @@ -82,6 +100,7 @@ void SDL_TLSCleanup(void) { SDL_TLSData *storage; + /* Cleanup the storage for the current thread */ storage = SDL_SYS_GetTLSData(); if (storage) { unsigned int i; @@ -92,6 +111,18 @@ void SDL_TLSCleanup(void) } SDL_SYS_SetTLSData(NULL); SDL_free(storage); + (void)SDL_AtomicDecRef(&SDL_tls_allocated); + } +} + +void SDL_QuitTLSData(void) +{ + SDL_TLSCleanup(); + + if (SDL_AtomicGet(&SDL_tls_allocated) == 0) { + SDL_SYS_QuitTLSData(); + } else { + /* Some thread hasn't called SDL_CleanupTLS() */ } } @@ -113,40 +144,27 @@ typedef struct SDL_TLSEntry static SDL_mutex *SDL_generic_TLS_mutex; static SDL_TLSEntry *SDL_generic_TLS; +void SDL_Generic_InitTLSData(void) +{ + if (!SDL_generic_TLS_mutex) { + SDL_generic_TLS_mutex = SDL_CreateMutex(); + } +} + SDL_TLSData *SDL_Generic_GetTLSData(void) { SDL_threadID thread = SDL_ThreadID(); SDL_TLSEntry *entry; SDL_TLSData *storage = NULL; -#ifndef SDL_THREADS_DISABLED - if (!SDL_generic_TLS_mutex) { - static SDL_SpinLock tls_lock; - SDL_AtomicLock(&tls_lock); - if (!SDL_generic_TLS_mutex) { - SDL_mutex *mutex = SDL_CreateMutex(); - SDL_MemoryBarrierRelease(); - SDL_generic_TLS_mutex = mutex; - if (!SDL_generic_TLS_mutex) { - SDL_AtomicUnlock(&tls_lock); - return NULL; - } - } - SDL_AtomicUnlock(&tls_lock); - } - SDL_MemoryBarrierAcquire(); SDL_LockMutex(SDL_generic_TLS_mutex); -#endif /* SDL_THREADS_DISABLED */ - for (entry = SDL_generic_TLS; entry; entry = entry->next) { if (entry->thread == thread) { storage = entry->storage; break; } } -#ifndef SDL_THREADS_DISABLED SDL_UnlockMutex(SDL_generic_TLS_mutex); -#endif return storage; } @@ -155,8 +173,8 @@ int SDL_Generic_SetTLSData(SDL_TLSData *data) { SDL_threadID thread = SDL_ThreadID(); SDL_TLSEntry *prev, *entry; + int retval = 0; - /* SDL_Generic_GetTLSData() is always called first, so we can assume SDL_generic_TLS_mutex */ SDL_LockMutex(SDL_generic_TLS_mutex); prev = NULL; for (entry = SDL_generic_TLS; entry; entry = entry->next) { @@ -175,21 +193,44 @@ int SDL_Generic_SetTLSData(SDL_TLSData *data) } prev = entry; } - if (!entry) { + if (!entry && data) { entry = (SDL_TLSEntry *)SDL_malloc(sizeof(*entry)); if (entry) { entry->thread = thread; entry->storage = data; entry->next = SDL_generic_TLS; SDL_generic_TLS = entry; + } else { + retval = SDL_OutOfMemory(); } } SDL_UnlockMutex(SDL_generic_TLS_mutex); - if (!entry) { - return SDL_OutOfMemory(); + return retval; +} + +void SDL_Generic_QuitTLSData(void) +{ + SDL_TLSEntry *entry; + + /* This should have been cleaned up by the time we get here */ + SDL_assert(!SDL_generic_TLS); + if (SDL_generic_TLS) { + SDL_LockMutex(SDL_generic_TLS_mutex); + for (entry = SDL_generic_TLS; entry; ) { + SDL_TLSEntry *next = entry->next; + SDL_free(entry->storage); + SDL_free(entry); + entry = next; + } + SDL_generic_TLS = NULL; + SDL_UnlockMutex(SDL_generic_TLS_mutex); + } + + if (SDL_generic_TLS_mutex) { + SDL_DestroyMutex(SDL_generic_TLS_mutex); + SDL_generic_TLS_mutex = NULL; } - return 0; } /* Non-thread-safe global error variable */ @@ -328,6 +369,8 @@ SDL_Thread *SDL_CreateThreadWithStackSize(int(SDLCALL *fn)(void *), SDL_Thread *thread; int ret; + SDL_InitMainThread(); + /* Allocate memory for the thread info structure */ thread = (SDL_Thread *)SDL_calloc(1, sizeof(*thread)); if (!thread) { diff --git a/vs/sdl2/src/thread/SDL_thread_c.h b/vs/sdl2/src/thread/SDL_thread_c.h index 985a51996af..d173f1f880f 100644 --- a/vs/sdl2/src/thread/SDL_thread_c.h +++ b/vs/sdl2/src/thread/SDL_thread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -93,17 +93,17 @@ typedef struct /* This is how many TLS entries we allocate at once */ #define TLS_ALLOC_CHUNKSIZE 4 -/* Get cross-platform, slow, thread local storage for this thread. - This is only intended as a fallback if getting real thread-local - storage fails or isn't supported on this platform. - */ -extern SDL_TLSData *SDL_Generic_GetTLSData(void); +extern void SDL_InitTLSData(void); +extern void SDL_QuitTLSData(void); -/* Set cross-platform, slow, thread local storage for this thread. +/* Generic TLS support. This is only intended as a fallback if getting real thread-local storage fails or isn't supported on this platform. */ +extern void SDL_Generic_InitTLSData(void); +extern SDL_TLSData *SDL_Generic_GetTLSData(void); extern int SDL_Generic_SetTLSData(SDL_TLSData *data); +extern void SDL_Generic_QuitTLSData(void); #endif /* SDL_thread_c_h_ */ diff --git a/vs/sdl2/src/thread/generic/SDL_syscond.c b/vs/sdl2/src/thread/generic/SDL_syscond.c index ebd0412310e..8345e4da225 100644 --- a/vs/sdl2/src/thread/generic/SDL_syscond.c +++ b/vs/sdl2/src/thread/generic/SDL_syscond.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/generic/SDL_syscond_c.h b/vs/sdl2/src/thread/generic/SDL_syscond_c.h index 64aaf4184fd..c0543787678 100644 --- a/vs/sdl2/src/thread/generic/SDL_syscond_c.h +++ b/vs/sdl2/src/thread/generic/SDL_syscond_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/generic/SDL_sysmutex.c b/vs/sdl2/src/thread/generic/SDL_sysmutex.c index f9fc4e4a8e4..385ed5e328f 100644 --- a/vs/sdl2/src/thread/generic/SDL_sysmutex.c +++ b/vs/sdl2/src/thread/generic/SDL_sysmutex.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/generic/SDL_sysmutex_c.h b/vs/sdl2/src/thread/generic/SDL_sysmutex_c.h index 886ce23bf43..6d24bf7827d 100644 --- a/vs/sdl2/src/thread/generic/SDL_sysmutex_c.h +++ b/vs/sdl2/src/thread/generic/SDL_sysmutex_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/generic/SDL_syssem.c b/vs/sdl2/src/thread/generic/SDL_syssem.c index 8b835b07484..0adc26c424f 100644 --- a/vs/sdl2/src/thread/generic/SDL_syssem.c +++ b/vs/sdl2/src/thread/generic/SDL_syssem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/generic/SDL_systhread.c b/vs/sdl2/src/thread/generic/SDL_systhread.c index b3a33f7be83..61861cd952a 100644 --- a/vs/sdl2/src/thread/generic/SDL_systhread.c +++ b/vs/sdl2/src/thread/generic/SDL_systhread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/generic/SDL_systhread_c.h b/vs/sdl2/src/thread/generic/SDL_systhread_c.h index 800b333a5d6..0795900c93e 100644 --- a/vs/sdl2/src/thread/generic/SDL_systhread_c.h +++ b/vs/sdl2/src/thread/generic/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/generic/SDL_systls.c b/vs/sdl2/src/thread/generic/SDL_systls.c index 1d100e0325d..d5cf231b00e 100644 --- a/vs/sdl2/src/thread/generic/SDL_systls.c +++ b/vs/sdl2/src/thread/generic/SDL_systls.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -22,6 +22,11 @@ #include "../../SDL_internal.h" #include "../SDL_thread_c.h" +void SDL_SYS_InitTLSData(void) +{ + SDL_Generic_InitTLSData(); +} + SDL_TLSData *SDL_SYS_GetTLSData(void) { return SDL_Generic_GetTLSData(); @@ -32,4 +37,9 @@ int SDL_SYS_SetTLSData(SDL_TLSData *data) return SDL_Generic_SetTLSData(data); } +void SDL_SYS_QuitTLSData(void) +{ + SDL_Generic_QuitTLSData(); +} + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/src/thread/n3ds/SDL_sysmutex.c b/vs/sdl2/src/thread/n3ds/SDL_sysmutex.c index 71056c23c30..ce0c03c5afb 100644 --- a/vs/sdl2/src/thread/n3ds/SDL_sysmutex.c +++ b/vs/sdl2/src/thread/n3ds/SDL_sysmutex.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/n3ds/SDL_sysmutex_c.h b/vs/sdl2/src/thread/n3ds/SDL_sysmutex_c.h index 4a3e7e9f830..192d4e12806 100644 --- a/vs/sdl2/src/thread/n3ds/SDL_sysmutex_c.h +++ b/vs/sdl2/src/thread/n3ds/SDL_sysmutex_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/n3ds/SDL_syssem.c b/vs/sdl2/src/thread/n3ds/SDL_syssem.c index 45e53055ba3..744eeb7b37f 100644 --- a/vs/sdl2/src/thread/n3ds/SDL_syssem.c +++ b/vs/sdl2/src/thread/n3ds/SDL_syssem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/n3ds/SDL_systhread.c b/vs/sdl2/src/thread/n3ds/SDL_systhread.c index c15c281be15..a202a7dc3d7 100644 --- a/vs/sdl2/src/thread/n3ds/SDL_systhread.c +++ b/vs/sdl2/src/thread/n3ds/SDL_systhread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/n3ds/SDL_systhread_c.h b/vs/sdl2/src/thread/n3ds/SDL_systhread_c.h index ee8bf94ed86..d7c43010876 100644 --- a/vs/sdl2/src/thread/n3ds/SDL_systhread_c.h +++ b/vs/sdl2/src/thread/n3ds/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/ngage/SDL_sysmutex.cpp b/vs/sdl2/src/thread/ngage/SDL_sysmutex.cpp index 4aa2625aa1a..357dd3ba6ab 100644 --- a/vs/sdl2/src/thread/ngage/SDL_sysmutex.cpp +++ b/vs/sdl2/src/thread/ngage/SDL_sysmutex.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/ngage/SDL_syssem.cpp b/vs/sdl2/src/thread/ngage/SDL_syssem.cpp index f8e1198cc7f..6d2d5c23228 100644 --- a/vs/sdl2/src/thread/ngage/SDL_syssem.cpp +++ b/vs/sdl2/src/thread/ngage/SDL_syssem.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/ngage/SDL_systhread.cpp b/vs/sdl2/src/thread/ngage/SDL_systhread.cpp index 8eb50b23bf4..674b3bf860d 100644 --- a/vs/sdl2/src/thread/ngage/SDL_systhread.cpp +++ b/vs/sdl2/src/thread/ngage/SDL_systhread.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/ngage/SDL_systhread_c.h b/vs/sdl2/src/thread/ngage/SDL_systhread_c.h index ed6ce366076..2e744d8a338 100644 --- a/vs/sdl2/src/thread/ngage/SDL_systhread_c.h +++ b/vs/sdl2/src/thread/ngage/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/os2/SDL_sysmutex.c b/vs/sdl2/src/thread/os2/SDL_sysmutex.c index e3a32e26149..32354e144f2 100644 --- a/vs/sdl2/src/thread/os2/SDL_sysmutex.c +++ b/vs/sdl2/src/thread/os2/SDL_sysmutex.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/os2/SDL_syssem.c b/vs/sdl2/src/thread/os2/SDL_syssem.c index 44d6e91a517..aca5245079c 100644 --- a/vs/sdl2/src/thread/os2/SDL_syssem.c +++ b/vs/sdl2/src/thread/os2/SDL_syssem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/os2/SDL_systhread.c b/vs/sdl2/src/thread/os2/SDL_systhread.c index f150de70e10..120ee8931da 100644 --- a/vs/sdl2/src/thread/os2/SDL_systhread.c +++ b/vs/sdl2/src/thread/os2/SDL_systhread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/os2/SDL_systhread_c.h b/vs/sdl2/src/thread/os2/SDL_systhread_c.h index ed6ce366076..2e744d8a338 100644 --- a/vs/sdl2/src/thread/os2/SDL_systhread_c.h +++ b/vs/sdl2/src/thread/os2/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/os2/SDL_systls.c b/vs/sdl2/src/thread/os2/SDL_systls.c index 5c380dd7f8f..e0a17b0a053 100644 --- a/vs/sdl2/src/thread/os2/SDL_systls.c +++ b/vs/sdl2/src/thread/os2/SDL_systls.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -34,45 +34,22 @@ SDL_TLSData **ppSDLTLSData = NULL; -static ULONG cTLSAlloc = 0; - -/* SDL_OS2TLSAlloc() called from SDL_InitSubSystem() */ -void SDL_OS2TLSAlloc(void) +void SDL_SYS_InitTLSData(void) { ULONG ulRC; - if (cTLSAlloc == 0 || !ppSDLTLSData) { - /* First call - allocate the thread local memory (1 DWORD) */ + if (!ppSDLTLSData) { + /* Allocate the thread local memory (1 DWORD) */ ulRC = DosAllocThreadLocalMemory(1, (PULONG *)&ppSDLTLSData); if (ulRC != NO_ERROR) { debug_os2("DosAllocThreadLocalMemory() failed, rc = %u", ulRC); } } - cTLSAlloc++; -} - -/* SDL_OS2TLSFree() called from SDL_QuitSubSystem() */ -void SDL_OS2TLSFree(void) -{ - ULONG ulRC; - - if (cTLSAlloc != 0) - cTLSAlloc--; - - if (cTLSAlloc == 0 && ppSDLTLSData) { - /* Last call - free the thread local memory */ - ulRC = DosFreeThreadLocalMemory((PULONG)ppSDLTLSData); - if (ulRC != NO_ERROR) { - debug_os2("DosFreeThreadLocalMemory() failed, rc = %u", ulRC); - } else { - ppSDLTLSData = NULL; - } - } } SDL_TLSData *SDL_SYS_GetTLSData(void) { - return (!ppSDLTLSData)? NULL : *ppSDLTLSData; + return ppSDLTLSData ? *ppSDLTLSData : NULL; } int SDL_SYS_SetTLSData(SDL_TLSData *data) @@ -84,6 +61,21 @@ int SDL_SYS_SetTLSData(SDL_TLSData *data) return 0; } +void SDL_SYS_QuitTLSData(void) +{ + ULONG ulRC; + + if (ppSDLTLSData) { + /* Free the thread local memory */ + ulRC = DosFreeThreadLocalMemory((PULONG)ppSDLTLSData); + if (ulRC != NO_ERROR) { + debug_os2("DosFreeThreadLocalMemory() failed, rc = %u", ulRC); + } else { + ppSDLTLSData = NULL; + } + } +} + #endif /* SDL_THREAD_OS2 */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/src/thread/os2/SDL_systls_c.h b/vs/sdl2/src/thread/os2/SDL_systls_c.h index bb39443794e..6070433a42d 100644 --- a/vs/sdl2/src/thread/os2/SDL_systls_c.h +++ b/vs/sdl2/src/thread/os2/SDL_systls_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -27,12 +27,4 @@ extern SDL_TLSData **ppSDLTLSData; -/* SDL_OS2TLSAlloc() called from SDL_InitSubSystem() */ -void SDL_OS2TLSAlloc(void); - -/* SDL_OS2TLSFree() called from SDL_QuitSubSystem() */ -void SDL_OS2TLSFree(void); - #endif /* SDL_THREAD_OS2 */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/src/thread/ps2/SDL_syssem.c b/vs/sdl2/src/thread/ps2/SDL_syssem.c index c5f2cae114d..d1f97f2fe98 100644 --- a/vs/sdl2/src/thread/ps2/SDL_syssem.c +++ b/vs/sdl2/src/thread/ps2/SDL_syssem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/ps2/SDL_systhread.c b/vs/sdl2/src/thread/ps2/SDL_systhread.c index 15dcf0d96a0..4a51aa4c379 100644 --- a/vs/sdl2/src/thread/ps2/SDL_systhread.c +++ b/vs/sdl2/src/thread/ps2/SDL_systhread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/ps2/SDL_systhread_c.h b/vs/sdl2/src/thread/ps2/SDL_systhread_c.h index afab3838f41..c6f30dde752 100644 --- a/vs/sdl2/src/thread/ps2/SDL_systhread_c.h +++ b/vs/sdl2/src/thread/ps2/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/psp/SDL_sysmutex.c b/vs/sdl2/src/thread/psp/SDL_sysmutex.c index eafca9f362d..50c69914c74 100644 --- a/vs/sdl2/src/thread/psp/SDL_sysmutex.c +++ b/vs/sdl2/src/thread/psp/SDL_sysmutex.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/psp/SDL_sysmutex_c.h b/vs/sdl2/src/thread/psp/SDL_sysmutex_c.h index 886ce23bf43..6d24bf7827d 100644 --- a/vs/sdl2/src/thread/psp/SDL_sysmutex_c.h +++ b/vs/sdl2/src/thread/psp/SDL_sysmutex_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/psp/SDL_syssem.c b/vs/sdl2/src/thread/psp/SDL_syssem.c index 9b8e7d13b8c..a96193e5261 100644 --- a/vs/sdl2/src/thread/psp/SDL_syssem.c +++ b/vs/sdl2/src/thread/psp/SDL_syssem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/psp/SDL_systhread.c b/vs/sdl2/src/thread/psp/SDL_systhread.c index c137799ffa1..b38bb73e5cf 100644 --- a/vs/sdl2/src/thread/psp/SDL_systhread.c +++ b/vs/sdl2/src/thread/psp/SDL_systhread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -34,6 +34,8 @@ #include #include +#define PSP_THREAD_NAME_MAX 32 + static int ThreadEntry(SceSize args, void *argp) { SDL_RunThread(*(SDL_Thread **)argp); @@ -44,6 +46,7 @@ int SDL_SYS_CreateThread(SDL_Thread *thread) { SceKernelThreadInfo status; int priority = 32; + char thread_name[PSP_THREAD_NAME_MAX]; /* Set priority of new thread to the same as the current thread */ status.size = sizeof(SceKernelThreadInfo); @@ -51,7 +54,12 @@ int SDL_SYS_CreateThread(SDL_Thread *thread) priority = status.currentPriority; } - thread->handle = sceKernelCreateThread(thread->name, ThreadEntry, + SDL_strlcpy(thread_name, "SDL thread", PSP_THREAD_NAME_MAX); + if (thread->name) { + SDL_strlcpy(thread_name, thread->name, PSP_THREAD_NAME_MAX); + } + + thread->handle = sceKernelCreateThread(thread_name, ThreadEntry, priority, thread->stacksize ? ((int)thread->stacksize) : 0x8000, PSP_THREAD_ATTR_VFPU, NULL); if (thread->handle < 0) { diff --git a/vs/sdl2/src/thread/psp/SDL_systhread_c.h b/vs/sdl2/src/thread/psp/SDL_systhread_c.h index ffa844924b7..9e951ecb6f9 100644 --- a/vs/sdl2/src/thread/psp/SDL_systhread_c.h +++ b/vs/sdl2/src/thread/psp/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/pthread/SDL_syscond.c b/vs/sdl2/src/thread/pthread/SDL_syscond.c index a1a2e63b901..485bdbcade2 100644 --- a/vs/sdl2/src/thread/pthread/SDL_syscond.c +++ b/vs/sdl2/src/thread/pthread/SDL_syscond.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -114,7 +114,7 @@ int SDL_CondWaitTimeout(SDL_cond *cond, SDL_mutex *mutex, Uint32 ms) abstime.tv_sec = delta.tv_sec + (ms / 1000); abstime.tv_nsec = (long)(delta.tv_usec + (ms % 1000) * 1000) * 1000; #endif - if (abstime.tv_nsec > 1000000000) { + if (abstime.tv_nsec >= 1000000000) { abstime.tv_sec += 1; abstime.tv_nsec -= 1000000000; } diff --git a/vs/sdl2/src/thread/pthread/SDL_sysmutex.c b/vs/sdl2/src/thread/pthread/SDL_sysmutex.c index c66b5cc9c5f..ee356d9d1b4 100644 --- a/vs/sdl2/src/thread/pthread/SDL_sysmutex.c +++ b/vs/sdl2/src/thread/pthread/SDL_sysmutex.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/pthread/SDL_sysmutex_c.h b/vs/sdl2/src/thread/pthread/SDL_sysmutex_c.h index 0435a38d4ce..78395222631 100644 --- a/vs/sdl2/src/thread/pthread/SDL_sysmutex_c.h +++ b/vs/sdl2/src/thread/pthread/SDL_sysmutex_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/pthread/SDL_syssem.c b/vs/sdl2/src/thread/pthread/SDL_syssem.c index 6d0cdd5c2a8..80fc5fa79d6 100644 --- a/vs/sdl2/src/thread/pthread/SDL_syssem.c +++ b/vs/sdl2/src/thread/pthread/SDL_syssem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -141,7 +141,7 @@ int SDL_SemWaitTimeout(SDL_sem *sem, Uint32 timeout) #endif /* Wrap the second if needed */ - if (ts_timeout.tv_nsec > 1000000000) { + if (ts_timeout.tv_nsec >= 1000000000) { ts_timeout.tv_sec += 1; ts_timeout.tv_nsec -= 1000000000; } diff --git a/vs/sdl2/src/thread/pthread/SDL_systhread.c b/vs/sdl2/src/thread/pthread/SDL_systhread.c index ccc09875fb1..2105673464e 100644 --- a/vs/sdl2/src/thread/pthread/SDL_systhread.c +++ b/vs/sdl2/src/thread/pthread/SDL_systhread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -41,7 +41,7 @@ #include "../../core/linux/SDL_dbus.h" #endif /* __LINUX__ */ -#if (defined(__LINUX__) || defined(__MACOSX__) || defined(__IPHONEOS__)) && defined(HAVE_DLOPEN) +#if (defined(__LINUX__) || defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__ANDROID__)) && defined(HAVE_DLOPEN) #include #ifndef RTLD_DEFAULT #define RTLD_DEFAULT NULL @@ -80,7 +80,7 @@ static void *RunThread(void *data) #if (defined(__MACOSX__) || defined(__IPHONEOS__)) && defined(HAVE_DLOPEN) static SDL_bool checked_setname = SDL_FALSE; static int (*ppthread_setname_np)(const char *) = NULL; -#elif defined(__LINUX__) && defined(HAVE_DLOPEN) +#elif (defined(__LINUX__) || defined(__ANDROID__)) && defined(HAVE_DLOPEN) static SDL_bool checked_setname = SDL_FALSE; static int (*ppthread_setname_np)(pthread_t, const char *) = NULL; #endif @@ -89,17 +89,17 @@ int SDL_SYS_CreateThread(SDL_Thread *thread) pthread_attr_t type; /* do this here before any threads exist, so there's no race condition. */ - #if (defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__LINUX__)) && defined(HAVE_DLOPEN) + #if (defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__LINUX__) || defined(__ANDROID__)) && defined(HAVE_DLOPEN) if (!checked_setname) { void *fn = dlsym(RTLD_DEFAULT, "pthread_setname_np"); #if defined(__MACOSX__) || defined(__IPHONEOS__) ppthread_setname_np = (int(*)(const char*)) fn; - #elif defined(__LINUX__) + #elif defined(__LINUX__) || defined(__ANDROID__) ppthread_setname_np = (int(*)(pthread_t, const char*)) fn; #endif checked_setname = SDL_TRUE; } -#endif + #endif /* Set the thread attributes */ if (pthread_attr_init(&type) != 0) { @@ -128,12 +128,12 @@ void SDL_SYS_SetupThread(const char *name) #endif /* !__NACL__ */ if (name) { - #if (defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__LINUX__)) && defined(HAVE_DLOPEN) +#if (defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__LINUX__) || defined(__ANDROID__)) && defined(HAVE_DLOPEN) SDL_assert(checked_setname); if (ppthread_setname_np) { - #if defined(__MACOSX__) || defined(__IPHONEOS__) +#if defined(__MACOSX__) || defined(__IPHONEOS__) ppthread_setname_np(name); -#elif defined(__LINUX__) +#elif defined(__LINUX__) || defined(__ANDROID__) if (ppthread_setname_np(pthread_self(), name) == ERANGE) { char namebuf[16]; /* Limited to 16 char */ SDL_strlcpy(namebuf, name, sizeof(namebuf)); diff --git a/vs/sdl2/src/thread/pthread/SDL_systhread_c.h b/vs/sdl2/src/thread/pthread/SDL_systhread_c.h index 04dbb22bc20..7a26f0f4536 100644 --- a/vs/sdl2/src/thread/pthread/SDL_systhread_c.h +++ b/vs/sdl2/src/thread/pthread/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/pthread/SDL_systls.c b/vs/sdl2/src/thread/pthread/SDL_systls.c index 0618cb3c592..e625a75dc4d 100644 --- a/vs/sdl2/src/thread/pthread/SDL_systls.c +++ b/vs/sdl2/src/thread/pthread/SDL_systls.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -30,27 +30,27 @@ static pthread_key_t thread_local_storage = INVALID_PTHREAD_KEY; static SDL_bool generic_local_storage = SDL_FALSE; -SDL_TLSData *SDL_SYS_GetTLSData(void) +void SDL_SYS_InitTLSData(void) { if (thread_local_storage == INVALID_PTHREAD_KEY && !generic_local_storage) { - static SDL_SpinLock lock; - SDL_AtomicLock(&lock); - if (thread_local_storage == INVALID_PTHREAD_KEY && !generic_local_storage) { - pthread_key_t storage; - if (pthread_key_create(&storage, NULL) == 0) { - SDL_MemoryBarrierRelease(); - thread_local_storage = storage; - } else { - generic_local_storage = SDL_TRUE; - } + if (pthread_key_create(&thread_local_storage, NULL) != 0) { + thread_local_storage = INVALID_PTHREAD_KEY; + SDL_Generic_InitTLSData(); + generic_local_storage = SDL_TRUE; } - SDL_AtomicUnlock(&lock); } +} + +SDL_TLSData *SDL_SYS_GetTLSData(void) +{ if (generic_local_storage) { return SDL_Generic_GetTLSData(); } - SDL_MemoryBarrierAcquire(); - return (SDL_TLSData *)pthread_getspecific(thread_local_storage); + + if (thread_local_storage != INVALID_PTHREAD_KEY) { + return (SDL_TLSData *)pthread_getspecific(thread_local_storage); + } + return NULL; } int SDL_SYS_SetTLSData(SDL_TLSData *data) @@ -58,10 +58,24 @@ int SDL_SYS_SetTLSData(SDL_TLSData *data) if (generic_local_storage) { return SDL_Generic_SetTLSData(data); } + if (pthread_setspecific(thread_local_storage, data) != 0) { return SDL_SetError("pthread_setspecific() failed"); } return 0; } +void SDL_SYS_QuitTLSData(void) +{ + if (generic_local_storage) { + SDL_Generic_QuitTLSData(); + generic_local_storage = SDL_FALSE; + } else { + if (thread_local_storage != INVALID_PTHREAD_KEY) { + pthread_key_delete(thread_local_storage); + thread_local_storage = INVALID_PTHREAD_KEY; + } + } +} + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/src/thread/stdcpp/SDL_syscond.cpp b/vs/sdl2/src/thread/stdcpp/SDL_syscond.cpp index 561d774ac6b..ea46973add4 100644 --- a/vs/sdl2/src/thread/stdcpp/SDL_syscond.cpp +++ b/vs/sdl2/src/thread/stdcpp/SDL_syscond.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/stdcpp/SDL_sysmutex.cpp b/vs/sdl2/src/thread/stdcpp/SDL_sysmutex.cpp index bc04bed8d8f..49f087fa77d 100644 --- a/vs/sdl2/src/thread/stdcpp/SDL_sysmutex.cpp +++ b/vs/sdl2/src/thread/stdcpp/SDL_sysmutex.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/stdcpp/SDL_sysmutex_c.h b/vs/sdl2/src/thread/stdcpp/SDL_sysmutex_c.h index dd53ee8a920..759852fcdad 100644 --- a/vs/sdl2/src/thread/stdcpp/SDL_sysmutex_c.h +++ b/vs/sdl2/src/thread/stdcpp/SDL_sysmutex_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/stdcpp/SDL_systhread.cpp b/vs/sdl2/src/thread/stdcpp/SDL_systhread.cpp index 3d93a014dd1..0b360bdc0d4 100644 --- a/vs/sdl2/src/thread/stdcpp/SDL_systhread.cpp +++ b/vs/sdl2/src/thread/stdcpp/SDL_systhread.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -120,8 +120,12 @@ SDL_SYS_WaitThread(SDL_Thread *thread) try { std::thread *cpp_thread = (std::thread *)thread->handle; - if (cpp_thread->joinable()) { - cpp_thread->join(); + if (cpp_thread) { + if (cpp_thread->joinable()) { + cpp_thread->join(); + } + delete cpp_thread; + thread->handle = nullptr; } } catch (std::system_error &) { // An error occurred when joining the thread. SDL_WaitThread does not, @@ -139,8 +143,12 @@ SDL_SYS_DetachThread(SDL_Thread *thread) try { std::thread *cpp_thread = (std::thread *)thread->handle; - if (cpp_thread->joinable()) { - cpp_thread->detach(); + if (cpp_thread) { + if (cpp_thread->joinable()) { + cpp_thread->detach(); + } + delete cpp_thread; + thread->handle = nullptr; } } catch (std::system_error &) { // An error occurred when detaching the thread. SDL_DetachThread does not, @@ -149,16 +157,29 @@ SDL_SYS_DetachThread(SDL_Thread *thread) } } -extern "C" SDL_TLSData * -SDL_SYS_GetTLSData(void) +static thread_local SDL_TLSData *thread_local_storage; + +extern "C" +void SDL_SYS_InitTLSData(void) { - return SDL_Generic_GetTLSData(); } -extern "C" int -SDL_SYS_SetTLSData(SDL_TLSData *data) +extern "C" +SDL_TLSData * SDL_SYS_GetTLSData(void) +{ + return thread_local_storage; +} + +extern "C" +int SDL_SYS_SetTLSData(SDL_TLSData *data) +{ + thread_local_storage = data; + return 0; +} + +extern "C" +void SDL_SYS_QuitTLSData(void) { - return SDL_Generic_SetTLSData(data); } /* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/src/thread/stdcpp/SDL_systhread_c.h b/vs/sdl2/src/thread/stdcpp/SDL_systhread_c.h index 5cf9d118662..b479a5c8278 100644 --- a/vs/sdl2/src/thread/stdcpp/SDL_systhread_c.h +++ b/vs/sdl2/src/thread/stdcpp/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/vita/SDL_sysmutex.c b/vs/sdl2/src/thread/vita/SDL_sysmutex.c index b0301453a20..7c3f21d30e9 100644 --- a/vs/sdl2/src/thread/vita/SDL_sysmutex.c +++ b/vs/sdl2/src/thread/vita/SDL_sysmutex.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/vita/SDL_sysmutex_c.h b/vs/sdl2/src/thread/vita/SDL_sysmutex_c.h index 46b7996b7c3..075ded25ec5 100644 --- a/vs/sdl2/src/thread/vita/SDL_sysmutex_c.h +++ b/vs/sdl2/src/thread/vita/SDL_sysmutex_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/vita/SDL_syssem.c b/vs/sdl2/src/thread/vita/SDL_syssem.c index 0149ec39db0..da1da65e21d 100644 --- a/vs/sdl2/src/thread/vita/SDL_syssem.c +++ b/vs/sdl2/src/thread/vita/SDL_syssem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/vita/SDL_systhread.c b/vs/sdl2/src/thread/vita/SDL_systhread.c index 5e531b6b51b..d3cb1b5393e 100644 --- a/vs/sdl2/src/thread/vita/SDL_systhread.c +++ b/vs/sdl2/src/thread/vita/SDL_systhread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/vita/SDL_systhread_c.h b/vs/sdl2/src/thread/vita/SDL_systhread_c.h index 7419b1e0c83..646f43e6cc5 100644 --- a/vs/sdl2/src/thread/vita/SDL_systhread_c.h +++ b/vs/sdl2/src/thread/vita/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/windows/SDL_syscond_cv.c b/vs/sdl2/src/thread/windows/SDL_syscond_cv.c index b532231a59f..cb1bed3877c 100644 --- a/vs/sdl2/src/thread/windows/SDL_syscond_cv.c +++ b/vs/sdl2/src/thread/windows/SDL_syscond_cv.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/windows/SDL_sysmutex.c b/vs/sdl2/src/thread/windows/SDL_sysmutex.c index 71cdac94c06..ab4734df074 100644 --- a/vs/sdl2/src/thread/windows/SDL_sysmutex.c +++ b/vs/sdl2/src/thread/windows/SDL_sysmutex.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/windows/SDL_sysmutex_c.h b/vs/sdl2/src/thread/windows/SDL_sysmutex_c.h index 6a0f45fa14a..e74497bc781 100644 --- a/vs/sdl2/src/thread/windows/SDL_sysmutex_c.h +++ b/vs/sdl2/src/thread/windows/SDL_sysmutex_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/windows/SDL_syssem.c b/vs/sdl2/src/thread/windows/SDL_syssem.c index 4c59fc1dc2a..4a96fef6885 100644 --- a/vs/sdl2/src/thread/windows/SDL_syssem.c +++ b/vs/sdl2/src/thread/windows/SDL_syssem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/windows/SDL_systhread.c b/vs/sdl2/src/thread/windows/SDL_systhread.c index 974759b7c07..37653f96318 100644 --- a/vs/sdl2/src/thread/windows/SDL_systhread.c +++ b/vs/sdl2/src/thread/windows/SDL_systhread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -159,7 +159,7 @@ void SDL_SYS_SetupThread(const char *name) inf.dwFlags = 0; /* The debugger catches this, renames the thread, continues on. */ - RaiseException(0x406D1388, 0, sizeof(inf) / sizeof(ULONG), (const ULONG_PTR *)&inf); + RaiseException(0x406D1388, 0, sizeof(inf) / sizeof(ULONG_PTR), (const ULONG_PTR *)&inf); } } } diff --git a/vs/sdl2/src/thread/windows/SDL_systhread_c.h b/vs/sdl2/src/thread/windows/SDL_systhread_c.h index ae6978b1c53..80edc26df03 100644 --- a/vs/sdl2/src/thread/windows/SDL_systhread_c.h +++ b/vs/sdl2/src/thread/windows/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/thread/windows/SDL_systls.c b/vs/sdl2/src/thread/windows/SDL_systls.c index 9ae61b39eaf..dd0a711cdf8 100644 --- a/vs/sdl2/src/thread/windows/SDL_systls.c +++ b/vs/sdl2/src/thread/windows/SDL_systls.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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,27 +43,27 @@ static DWORD thread_local_storage = TLS_OUT_OF_INDEXES; static SDL_bool generic_local_storage = SDL_FALSE; -SDL_TLSData *SDL_SYS_GetTLSData(void) +void SDL_SYS_InitTLSData(void) { if (thread_local_storage == TLS_OUT_OF_INDEXES && !generic_local_storage) { - static SDL_SpinLock lock; - SDL_AtomicLock(&lock); - if (thread_local_storage == TLS_OUT_OF_INDEXES && !generic_local_storage) { - DWORD storage = TlsAlloc(); - if (storage != TLS_OUT_OF_INDEXES) { - SDL_MemoryBarrierRelease(); - thread_local_storage = storage; - } else { - generic_local_storage = SDL_TRUE; - } + thread_local_storage = TlsAlloc(); + if (thread_local_storage == TLS_OUT_OF_INDEXES) { + SDL_Generic_InitTLSData(); + generic_local_storage = SDL_TRUE; } - SDL_AtomicUnlock(&lock); } +} + +SDL_TLSData *SDL_SYS_GetTLSData(void) +{ if (generic_local_storage) { return SDL_Generic_GetTLSData(); } - SDL_MemoryBarrierAcquire(); - return (SDL_TLSData *)TlsGetValue(thread_local_storage); + + if (thread_local_storage != TLS_OUT_OF_INDEXES) { + return (SDL_TLSData *)TlsGetValue(thread_local_storage); + } + return NULL; } int SDL_SYS_SetTLSData(SDL_TLSData *data) @@ -71,12 +71,26 @@ int SDL_SYS_SetTLSData(SDL_TLSData *data) if (generic_local_storage) { return SDL_Generic_SetTLSData(data); } + if (!TlsSetValue(thread_local_storage, data)) { - return SDL_SetError("TlsSetValue() failed"); + return WIN_SetError("TlsSetValue()"); } return 0; } +void SDL_SYS_QuitTLSData(void) +{ + if (generic_local_storage) { + SDL_Generic_QuitTLSData(); + generic_local_storage = SDL_FALSE; + } else { + if (thread_local_storage != TLS_OUT_OF_INDEXES) { + TlsFree(thread_local_storage); + thread_local_storage = TLS_OUT_OF_INDEXES; + } + } +} + #endif /* SDL_THREAD_WINDOWS */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/src/timer/SDL_timer.c b/vs/sdl2/src/timer/SDL_timer.c index 8cba8087fc6..a050290171d 100644 --- a/vs/sdl2/src/timer/SDL_timer.c +++ b/vs/sdl2/src/timer/SDL_timer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/timer/SDL_timer_c.h b/vs/sdl2/src/timer/SDL_timer_c.h index f5c1e43adeb..2f7de5f6c81 100644 --- a/vs/sdl2/src/timer/SDL_timer_c.h +++ b/vs/sdl2/src/timer/SDL_timer_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/timer/dummy/SDL_systimer.c b/vs/sdl2/src/timer/dummy/SDL_systimer.c index ecc31ad6970..b9eb0cecaae 100644 --- a/vs/sdl2/src/timer/dummy/SDL_systimer.c +++ b/vs/sdl2/src/timer/dummy/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/timer/haiku/SDL_systimer.c b/vs/sdl2/src/timer/haiku/SDL_systimer.c index 8b038b565fe..6e7d6bee32c 100644 --- a/vs/sdl2/src/timer/haiku/SDL_systimer.c +++ b/vs/sdl2/src/timer/haiku/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/timer/n3ds/SDL_systimer.c b/vs/sdl2/src/timer/n3ds/SDL_systimer.c index 047b004deba..bc31eb80ff6 100644 --- a/vs/sdl2/src/timer/n3ds/SDL_systimer.c +++ b/vs/sdl2/src/timer/n3ds/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/timer/ngage/SDL_systimer.cpp b/vs/sdl2/src/timer/ngage/SDL_systimer.cpp index 4ddf76f0aa1..85d3dc87bc3 100644 --- a/vs/sdl2/src/timer/ngage/SDL_systimer.cpp +++ b/vs/sdl2/src/timer/ngage/SDL_systimer.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/timer/os2/SDL_systimer.c b/vs/sdl2/src/timer/os2/SDL_systimer.c index f558855bdc8..e268d592b86 100644 --- a/vs/sdl2/src/timer/os2/SDL_systimer.c +++ b/vs/sdl2/src/timer/os2/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/timer/ps2/SDL_systimer.c b/vs/sdl2/src/timer/ps2/SDL_systimer.c index 720f696d9bb..0b0cf1a904c 100644 --- a/vs/sdl2/src/timer/ps2/SDL_systimer.c +++ b/vs/sdl2/src/timer/ps2/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -34,6 +34,8 @@ static uint64_t start; static SDL_bool ticks_started = SDL_FALSE; +static Uint64 BUSCLK_MS = (kBUSCLK / 1000); + void SDL_TicksInit(void) { if (ticks_started) { @@ -58,7 +60,7 @@ Uint64 SDL_GetTicks64(void) } now = GetTimerSystemTime(); - return (Uint64)((now - start) / (kBUSCLK / CLOCKS_PER_SEC)); + return (Uint64)((now - start) / BUSCLK_MS); } Uint64 SDL_GetPerformanceCounter(void) diff --git a/vs/sdl2/src/timer/psp/SDL_systimer.c b/vs/sdl2/src/timer/psp/SDL_systimer.c index c69598e4483..def21f8b565 100644 --- a/vs/sdl2/src/timer/psp/SDL_systimer.c +++ b/vs/sdl2/src/timer/psp/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -30,45 +30,42 @@ #include #include #include +#include -static struct timeval start; -static SDL_bool ticks_started = SDL_FALSE; +static Uint64 start_tick; + +static Uint64 PSP_Ticks(void) +{ + Uint64 ticks; + sceRtcGetCurrentTick(&ticks); + return ticks; +} void SDL_TicksInit(void) { - if (ticks_started) { - return; + if (start_tick == 0) { + start_tick = PSP_Ticks(); } - ticks_started = SDL_TRUE; - - gettimeofday(&start, NULL); } void SDL_TicksQuit(void) { - ticks_started = SDL_FALSE; } +/* return ticks as milliseconds */ Uint64 SDL_GetTicks64(void) { - struct timeval now; - - if (!ticks_started) { - SDL_TicksInit(); - } - - gettimeofday(&now, NULL); - return (Uint64)(((Sint64)(now.tv_sec - start.tv_sec) * 1000) + ((now.tv_usec - start.tv_usec) / 1000)); + return (PSP_Ticks() - start_tick) / 1000ULL; } Uint64 SDL_GetPerformanceCounter(void) { - return SDL_GetTicks64(); + return PSP_Ticks(); } Uint64 SDL_GetPerformanceFrequency(void) { - return 1000; + return sceRtcGetTickResolution(); } void SDL_Delay(Uint32 ms) diff --git a/vs/sdl2/src/timer/unix/SDL_systimer.c b/vs/sdl2/src/timer/unix/SDL_systimer.c index a697b7117a5..7cc5dee88c6 100644 --- a/vs/sdl2/src/timer/unix/SDL_systimer.c +++ b/vs/sdl2/src/timer/unix/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/timer/vita/SDL_systimer.c b/vs/sdl2/src/timer/vita/SDL_systimer.c index d5ccabcab95..8aa994ddb1d 100644 --- a/vs/sdl2/src/timer/vita/SDL_systimer.c +++ b/vs/sdl2/src/timer/vita/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/timer/windows/SDL_systimer.c b/vs/sdl2/src/timer/windows/SDL_systimer.c index e7c2c78fe86..b23390d1f07 100644 --- a/vs/sdl2/src/timer/windows/SDL_systimer.c +++ b/vs/sdl2/src/timer/windows/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_RLEaccel.c b/vs/sdl2/src/video/SDL_RLEaccel.c index a007984fc67..ee7e8fcc61f 100644 --- a/vs/sdl2/src/video/SDL_RLEaccel.c +++ b/vs/sdl2/src/video/SDL_RLEaccel.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_RLEaccel_c.h b/vs/sdl2/src/video/SDL_RLEaccel_c.h index 5968081099f..88e4bf56d5b 100644 --- a/vs/sdl2/src/video/SDL_RLEaccel_c.h +++ b/vs/sdl2/src/video/SDL_RLEaccel_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_blit.c b/vs/sdl2/src/video/SDL_blit.c index 19d47a17f85..95758758115 100644 --- a/vs/sdl2/src/video/SDL_blit.c +++ b/vs/sdl2/src/video/SDL_blit.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -103,7 +103,7 @@ static int SDLCALL SDL_SoftBlit(SDL_Surface *src, SDL_Rect *srcrect, #ifdef __MACOSX__ #include -static SDL_bool SDL_UseAltivecPrefetch() +static SDL_bool SDL_UseAltivecPrefetch(void) { const char key[] = "hw.l3cachesize"; u_int64_t result = 0; diff --git a/vs/sdl2/src/video/SDL_blit.h b/vs/sdl2/src/video/SDL_blit.h index 731ea63753f..563f00c628d 100644 --- a/vs/sdl2/src/video/SDL_blit.h +++ b/vs/sdl2/src/video/SDL_blit.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -471,6 +471,15 @@ extern SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface); #else #define USE_DUFFS_LOOP #endif + +#define DUFFS_LOOP1(pixel_copy_increment, width) \ + { \ + int n; \ + for (n = width; n > 0; --n) { \ + pixel_copy_increment; \ + } \ + } + #ifdef USE_DUFFS_LOOP /* 8-times unrolled loop */ @@ -527,8 +536,26 @@ extern SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface); } \ } -/* Use the 8-times version of the loop by default */ +/* 2-times unrolled loop */ +#define DUFFS_LOOP2(pixel_copy_increment, width) \ + { \ + int n = (width + 1) / 2; \ + switch (width & 1) { \ + case 0: \ + do { \ + pixel_copy_increment; \ + SDL_FALLTHROUGH; \ + case 1: \ + pixel_copy_increment; \ + } while (--n > 0); \ + } \ + } + +/* Use the 4-times version of the loop by default */ #define DUFFS_LOOP(pixel_copy_increment, width) \ + DUFFS_LOOP4(pixel_copy_increment, width) +/* Use the 8-times version of the loop for simple routines */ +#define DUFFS_LOOP_TRIVIAL(pixel_copy_increment, width) \ DUFFS_LOOP8(pixel_copy_increment, width) /* Special version of Duff's device for even more optimization */ @@ -562,20 +589,19 @@ extern SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface); /* Don't use Duff's device to unroll loops */ #define DUFFS_LOOP(pixel_copy_increment, width) \ - { \ - int n; \ - for (n = width; n > 0; --n) { \ - pixel_copy_increment; \ - } \ - } + DUFFS_LOOP1(pixel_copy_increment, width) +#define DUFFS_LOOP_TRIVIAL(pixel_copy_increment, width) \ + DUFFS_LOOP1(pixel_copy_increment, width) #define DUFFS_LOOP8(pixel_copy_increment, width) \ - DUFFS_LOOP(pixel_copy_increment, width) + DUFFS_LOOP1(pixel_copy_increment, width) #define DUFFS_LOOP4(pixel_copy_increment, width) \ - DUFFS_LOOP(pixel_copy_increment, width) + DUFFS_LOOP1(pixel_copy_increment, width) +#define DUFFS_LOOP2(pixel_copy_increment, width) \ + DUFFS_LOOP1(pixel_copy_increment, width) #define DUFFS_LOOP_124(pixel_copy_increment1, \ pixel_copy_increment2, \ pixel_copy_increment4, width) \ - DUFFS_LOOP(pixel_copy_increment1, width) + DUFFS_LOOP1(pixel_copy_increment1, width) #endif /* USE_DUFFS_LOOP */ diff --git a/vs/sdl2/src/video/SDL_blit_0.c b/vs/sdl2/src/video/SDL_blit_0.c index e7750ddb3d4..4056200ceb7 100644 --- a/vs/sdl2/src/video/SDL_blit_0.c +++ b/vs/sdl2/src/video/SDL_blit_0.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -605,11 +605,8 @@ SDL_FORCE_INLINE void BlitBto4Key(SDL_BlitInfo *info, const Uint32 srcbpp) } } -SDL_FORCE_INLINE void BlitBtoNAlpha(SDL_BlitInfo *info, const Uint32 srcbpp) +static void BlitBtoNAlpha(SDL_BlitInfo *info) { - const Uint32 mask = (1 << srcbpp) - 1; - const Uint32 align = (8 / srcbpp) - 1; - int width = info->dst_w; int height = info->dst_h; Uint8 *src = info->src; @@ -617,15 +614,17 @@ SDL_FORCE_INLINE void BlitBtoNAlpha(SDL_BlitInfo *info, const Uint32 srcbpp) int srcskip = info->src_skip; int dstskip = info->dst_skip; const SDL_Color *srcpal = info->src_fmt->palette->colors; + SDL_PixelFormat *srcfmt = info->src_fmt; SDL_PixelFormat *dstfmt = info->dst_fmt; - int dstbpp; + int srcbpp, dstbpp; int c; - Uint32 pixel; + Uint32 pixel, mask, align; unsigned sR, sG, sB; unsigned dR, dG, dB, dA; const unsigned A = info->a; /* Set up some basic variables */ + srcbpp = srcfmt->BytesPerPixel; dstbpp = dstfmt->BytesPerPixel; if (srcbpp == 4) srcskip += width - (width + 1) / 2; @@ -633,6 +632,8 @@ SDL_FORCE_INLINE void BlitBtoNAlpha(SDL_BlitInfo *info, const Uint32 srcbpp) srcskip += width - (width + 3) / 4; else if (srcbpp == 1) srcskip += width - (width + 7) / 8; + mask = (1 << srcbpp) - 1; + align = (8 / srcbpp) - 1; if (SDL_PIXELORDER(info->src_fmt->format) == SDL_BITMAPORDER_4321) { while (height--) { @@ -681,11 +682,8 @@ SDL_FORCE_INLINE void BlitBtoNAlpha(SDL_BlitInfo *info, const Uint32 srcbpp) } } -SDL_FORCE_INLINE void BlitBtoNAlphaKey(SDL_BlitInfo *info, const Uint32 srcbpp) +static void BlitBtoNAlphaKey(SDL_BlitInfo *info) { - const Uint32 mask = (1 << srcbpp) - 1; - const Uint32 align = (8 / srcbpp) - 1; - int width = info->dst_w; int height = info->dst_h; Uint8 *src = info->src; @@ -695,15 +693,16 @@ SDL_FORCE_INLINE void BlitBtoNAlphaKey(SDL_BlitInfo *info, const Uint32 srcbpp) SDL_PixelFormat *srcfmt = info->src_fmt; SDL_PixelFormat *dstfmt = info->dst_fmt; const SDL_Color *srcpal = srcfmt->palette->colors; - int dstbpp; + int srcbpp, dstbpp; int c; - Uint32 pixel; + Uint32 pixel, mask, align; unsigned sR, sG, sB; unsigned dR, dG, dB, dA; const unsigned A = info->a; Uint32 ckey = info->colorkey; /* Set up some basic variables */ + srcbpp = srcfmt->BytesPerPixel; dstbpp = dstfmt->BytesPerPixel; if (srcbpp == 4) srcskip += width - (width + 1) / 2; @@ -711,6 +710,8 @@ SDL_FORCE_INLINE void BlitBtoNAlphaKey(SDL_BlitInfo *info, const Uint32 srcbpp) srcskip += width - (width + 3) / 4; else if (srcbpp == 1) srcskip += width - (width + 7) / 8; + mask = (1 << srcbpp) - 1; + align = (8 / srcbpp) - 1; if (SDL_PIXELORDER(info->src_fmt->format) == SDL_BITMAPORDER_4321) { while (height--) { @@ -801,16 +802,6 @@ static const SDL_BlitFunc colorkey_blit_1b[] = { (SDL_BlitFunc)NULL, Blit1bto1Key, Blit1bto2Key, Blit1bto3Key, Blit1bto4Key }; -static void Blit1btoNAlpha(SDL_BlitInfo *info) -{ - BlitBtoNAlpha(info, 1); -} - -static void Blit1btoNAlphaKey(SDL_BlitInfo *info) -{ - BlitBtoNAlphaKey(info, 1); -} - static void Blit2bto1(SDL_BlitInfo *info) { @@ -853,16 +844,6 @@ static const SDL_BlitFunc colorkey_blit_2b[] = { (SDL_BlitFunc)NULL, Blit2bto1Key, Blit2bto2Key, Blit2bto3Key, Blit2bto4Key }; -static void Blit2btoNAlpha(SDL_BlitInfo *info) -{ - BlitBtoNAlpha(info, 2); -} - -static void Blit2btoNAlphaKey(SDL_BlitInfo *info) -{ - BlitBtoNAlphaKey(info, 2); -} - static void Blit4bto1(SDL_BlitInfo *info) { @@ -905,16 +886,6 @@ static const SDL_BlitFunc colorkey_blit_4b[] = { (SDL_BlitFunc)NULL, Blit4bto1Key, Blit4bto2Key, Blit4bto3Key, Blit4bto4Key }; -static void Blit4btoNAlpha(SDL_BlitInfo *info) -{ - BlitBtoNAlpha(info, 4); -} - -static void Blit4btoNAlphaKey(SDL_BlitInfo *info) -{ - BlitBtoNAlphaKey(info, 4); -} - SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface *surface) @@ -936,10 +907,10 @@ SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface *surface) return colorkey_blit_1b[which]; case SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND: - return which >= 2 ? Blit1btoNAlpha : (SDL_BlitFunc)NULL; + return which >= 2 ? BlitBtoNAlpha : (SDL_BlitFunc)NULL; case SDL_COPY_COLORKEY | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND: - return which >= 2 ? Blit1btoNAlphaKey : (SDL_BlitFunc)NULL; + return which >= 2 ? BlitBtoNAlphaKey : (SDL_BlitFunc)NULL; } return NULL; } @@ -953,10 +924,10 @@ SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface *surface) return colorkey_blit_2b[which]; case SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND: - return which >= 2 ? Blit2btoNAlpha : (SDL_BlitFunc)NULL; + return which >= 2 ? BlitBtoNAlpha : (SDL_BlitFunc)NULL; case SDL_COPY_COLORKEY | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND: - return which >= 2 ? Blit2btoNAlphaKey : (SDL_BlitFunc)NULL; + return which >= 2 ? BlitBtoNAlphaKey : (SDL_BlitFunc)NULL; } return NULL; } @@ -970,10 +941,10 @@ SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface *surface) return colorkey_blit_4b[which]; case SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND: - return which >= 2 ? Blit4btoNAlpha : (SDL_BlitFunc)NULL; + return which >= 2 ? BlitBtoNAlpha : (SDL_BlitFunc)NULL; case SDL_COPY_COLORKEY | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND: - return which >= 2 ? Blit4btoNAlphaKey : (SDL_BlitFunc)NULL; + return which >= 2 ? BlitBtoNAlphaKey : (SDL_BlitFunc)NULL; } return NULL; } diff --git a/vs/sdl2/src/video/SDL_blit_1.c b/vs/sdl2/src/video/SDL_blit_1.c index 93fdb3ec1bc..6e59b5030ac 100644 --- a/vs/sdl2/src/video/SDL_blit_1.c +++ b/vs/sdl2/src/video/SDL_blit_1.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -50,7 +50,7 @@ static void Blit1to1(SDL_BlitInfo *info) while (height--) { #ifdef USE_DUFFS_LOOP /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { *dst = map[*src]; } @@ -102,7 +102,7 @@ static void Blit1to2(SDL_BlitInfo *info) #ifdef USE_DUFFS_LOOP while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { *(Uint16 *)dst = map[*src++]; dst += 2; @@ -258,7 +258,7 @@ static void Blit1to4(SDL_BlitInfo *info) while (height--) { #ifdef USE_DUFFS_LOOP /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( *dst++ = map[*src++]; , width); /* *INDENT-ON* */ /* clang-format on */ @@ -299,7 +299,7 @@ static void Blit1to1Key(SDL_BlitInfo *info) if (palmap) { while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { if ( *src != ckey ) { *dst = palmap[*src]; @@ -315,7 +315,7 @@ static void Blit1to1Key(SDL_BlitInfo *info) } else { while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { if ( *src != ckey ) { *dst = *src; @@ -347,7 +347,7 @@ static void Blit1to2Key(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { if ( *src != ckey ) { *dstp=palmap[*src]; @@ -410,7 +410,7 @@ static void Blit1to4Key(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { if ( *src != ckey ) { *dstp = palmap[*src]; @@ -446,7 +446,7 @@ static void Blit1toNAlpha(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP4( + DUFFS_LOOP( { sR = srcpal[*src].r; sG = srcpal[*src].g; diff --git a/vs/sdl2/src/video/SDL_blit_A.c b/vs/sdl2/src/video/SDL_blit_A.c index b7cd25d9044..cf64257d9c0 100644 --- a/vs/sdl2/src/video/SDL_blit_A.c +++ b/vs/sdl2/src/video/SDL_blit_A.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -47,7 +47,7 @@ static void BlitNto1SurfaceAlpha(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP4( + DUFFS_LOOP( { DISEMBLE_RGB(src, srcbpp, srcfmt, Pixel, sR, sG, sB); dR = dstfmt->palette->colors[*dst].r; @@ -92,7 +92,7 @@ static void BlitNto1PixelAlpha(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP4( + DUFFS_LOOP( { DISEMBLE_RGBA(src,srcbpp,srcfmt,Pixel,sR,sG,sB,sA); dR = dstfmt->palette->colors[*dst].r; @@ -484,7 +484,7 @@ static void BlitRGBtoRGBSurfaceAlpha128(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP4({ + DUFFS_LOOP({ Uint32 s = *srcp++; Uint32 d = *dstp; *dstp++ = ((((s & 0x00fefefe) + (d & 0x00fefefe)) >> 1) @@ -516,7 +516,7 @@ static void BlitRGBtoRGBSurfaceAlpha(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP4({ + DUFFS_LOOP({ s = *srcp; d = *dstp; s1 = s & 0xff00ff; @@ -1148,7 +1148,7 @@ static void Blit565to565SurfaceAlpha(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP4({ + DUFFS_LOOP({ Uint32 s = *srcp++; Uint32 d = *dstp; /* @@ -1186,7 +1186,7 @@ static void Blit555to555SurfaceAlpha(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP4({ + DUFFS_LOOP({ Uint32 s = *srcp++; Uint32 d = *dstp; /* @@ -1219,13 +1219,12 @@ static void BlitARGBto565PixelAlpha(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP4({ + DUFFS_LOOP({ Uint32 s = *srcp; unsigned alpha = s >> 27; /* downscale alpha to 5 bits */ - /* FIXME: Here we special-case opaque alpha since the + /* Here we special-case opaque alpha since the compositioning used (>>8 instead of /255) doesn't handle - it correctly. Also special-case alpha=0 for speed? - Benchmark this! */ + it correctly. */ if (alpha) { if (alpha == (SDL_ALPHA_OPAQUE >> 3)) { *dstp = (Uint16)((s >> 8 & 0xf800) + (s >> 5 & 0x7e0) + (s >> 3 & 0x1f)); @@ -1235,8 +1234,7 @@ static void BlitARGBto565PixelAlpha(SDL_BlitInfo *info) * convert source and destination to G0RAB65565 * and blend all components at the same time */ - s = ((s & 0xfc00) << 11) + (s >> 8 & 0xf800) - + (s >> 3 & 0x1f); + s = ((s & 0xfc00) << 11) + (s >> 8 & 0xf800) + (s >> 3 & 0x1f); d = (d | d << 16) & 0x07e0f81f; d += (s - d) * alpha >> 5; d &= 0x07e0f81f; @@ -1264,25 +1262,23 @@ static void BlitARGBto555PixelAlpha(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP4({ + DUFFS_LOOP({ unsigned alpha; Uint32 s = *srcp; alpha = s >> 27; /* downscale alpha to 5 bits */ - /* FIXME: Here we special-case opaque alpha since the + /* Here we special-case opaque alpha since the compositioning used (>>8 instead of /255) doesn't handle - it correctly. Also special-case alpha=0 for speed? - Benchmark this! */ + it correctly. */ if (alpha) { if (alpha == (SDL_ALPHA_OPAQUE >> 3)) { *dstp = (Uint16)((s >> 9 & 0x7c00) + (s >> 6 & 0x3e0) + (s >> 3 & 0x1f)); } else { Uint32 d = *dstp; /* - * convert source and destination to G0RAB65565 + * convert source and destination to G0RAB55555 * and blend all components at the same time */ - s = ((s & 0xf800) << 10) + (s >> 9 & 0x7c00) - + (s >> 3 & 0x1f); + s = ((s & 0xf800) << 10) + (s >> 9 & 0x7c00) + (s >> 3 & 0x1f); d = (d | d << 16) & 0x03e07c1f; d += (s - d) * alpha >> 5; d &= 0x03e07c1f; @@ -1319,7 +1315,7 @@ static void BlitNtoNSurfaceAlpha(SDL_BlitInfo *info) if (sA) { while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP4( + DUFFS_LOOP( { DISEMBLE_RGB(src, srcbpp, srcfmt, Pixel, sR, sG, sB); DISEMBLE_RGBA(dst, dstbpp, dstfmt, Pixel, dR, dG, dB, dA); @@ -1357,7 +1353,7 @@ static void BlitNtoNSurfaceAlphaKey(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP4( + DUFFS_LOOP( { RETRIEVE_RGB_PIXEL(src, srcbpp, Pixel); if (sA && Pixel != ckey) { @@ -1399,7 +1395,7 @@ static void BlitNtoNPixelAlpha(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP4( + DUFFS_LOOP( { DISEMBLE_RGBA(src, srcbpp, srcfmt, Pixel, sR, sG, sB, sA); if (sA) { @@ -1454,7 +1450,7 @@ SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface) if (sf->BytesPerPixel == 4 && sf->Amask == 0xff000000 && sf->Gmask == 0xff00 && ((sf->Rmask == 0xff && df->Rmask == 0x1f) || (sf->Bmask == 0xff && df->Bmask == 0x1f))) { if (df->Gmask == 0x7e0) { return BlitARGBto565PixelAlpha; - } else if (df->Gmask == 0x3e0) { + } else if (df->Gmask == 0x3e0 && !df->Amask) { return BlitARGBto555PixelAlpha; } } diff --git a/vs/sdl2/src/video/SDL_blit_N.c b/vs/sdl2/src/video/SDL_blit_N.c index 123d0aad039..41161d57d37 100644 --- a/vs/sdl2/src/video/SDL_blit_N.c +++ b/vs/sdl2/src/video/SDL_blit_N.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -2076,7 +2076,7 @@ static void Blit_RGB555_ARGB1555(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { *dst = *src | mask; ++dst; @@ -2200,7 +2200,7 @@ static void Blit4to4MaskAlpha(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { *dst = *src | mask; ++dst; @@ -2217,7 +2217,7 @@ static void Blit4to4MaskAlpha(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { *dst = *src & mask; ++dst; @@ -2576,7 +2576,7 @@ static void Blit2to2Key(SDL_BlitInfo *info) while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { if ( (*srcp & rgbmask) != ckey ) { *dstp = *srcp; @@ -2622,7 +2622,7 @@ static void BlitNtoNKey(SDL_BlitInfo *info) Uint32 mask = ((Uint32)info->a) << dstfmt->Ashift; while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { if ((*src32 & rgbmask) != ckey) { *dst32 = *src32 | mask; @@ -2640,7 +2640,7 @@ static void BlitNtoNKey(SDL_BlitInfo *info) Uint32 mask = srcfmt->Rmask | srcfmt->Gmask | srcfmt->Bmask; while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { if ((*src32 & rgbmask) != ckey) { *dst32 = *src32 & mask; @@ -2897,7 +2897,7 @@ static void BlitNtoNKeyCopyAlpha(SDL_BlitInfo *info) Uint32 *dst32 = (Uint32 *)dst; while (height--) { /* *INDENT-OFF* */ /* clang-format off */ - DUFFS_LOOP( + DUFFS_LOOP_TRIVIAL( { if ((*src32 & rgbmask) != ckey) { *dst32 = *src32; diff --git a/vs/sdl2/src/video/SDL_blit_auto.c b/vs/sdl2/src/video/SDL_blit_auto.c index b05dc4a02e7..e7a25e7a44f 100644 --- a/vs/sdl2/src/video/SDL_blit_auto.c +++ b/vs/sdl2/src/video/SDL_blit_auto.c @@ -1,7 +1,7 @@ /* DO NOT EDIT! This file is generated by sdlgenblit.pl */ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_blit_auto.h b/vs/sdl2/src/video/SDL_blit_auto.h index 1b7f227d745..3f76c7ee732 100644 --- a/vs/sdl2/src/video/SDL_blit_auto.h +++ b/vs/sdl2/src/video/SDL_blit_auto.h @@ -1,7 +1,7 @@ /* DO NOT EDIT! This file is generated by sdlgenblit.pl */ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_blit_copy.c b/vs/sdl2/src/video/SDL_blit_copy.c index 47dafb59e29..4559c010019 100644 --- a/vs/sdl2/src/video/SDL_blit_copy.c +++ b/vs/sdl2/src/video/SDL_blit_copy.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_blit_copy.h b/vs/sdl2/src/video/SDL_blit_copy.h index 0979a87da45..40a0dda4db6 100644 --- a/vs/sdl2/src/video/SDL_blit_copy.h +++ b/vs/sdl2/src/video/SDL_blit_copy.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_blit_slow.c b/vs/sdl2/src/video/SDL_blit_slow.c index 7696dcf9255..2cdca1c482b 100644 --- a/vs/sdl2/src/video/SDL_blit_slow.c +++ b/vs/sdl2/src/video/SDL_blit_slow.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_blit_slow.h b/vs/sdl2/src/video/SDL_blit_slow.h index 05b1dca227d..76d173fab96 100644 --- a/vs/sdl2/src/video/SDL_blit_slow.h +++ b/vs/sdl2/src/video/SDL_blit_slow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_bmp.c b/vs/sdl2/src/video/SDL_bmp.c index 10e99fb041d..292a061f45e 100644 --- a/vs/sdl2/src/video/SDL_bmp.c +++ b/vs/sdl2/src/video/SDL_bmp.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_clipboard.c b/vs/sdl2/src/video/SDL_clipboard.c index 3111a63b658..ce61b0094bc 100644 --- a/vs/sdl2/src/video/SDL_clipboard.c +++ b/vs/sdl2/src/video/SDL_clipboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_egl.c b/vs/sdl2/src/video/SDL_egl.c index a89c0e812c6..50f7082f489 100644 --- a/vs/sdl2/src/video/SDL_egl.c +++ b/vs/sdl2/src/video/SDL_egl.c @@ -1,6 +1,6 @@ /* * Simple DirectMedia Layer - * Copyright (C) 1997-2024 Sam Lantinga + * Copyright (C) 1997-2025 Sam Lantinga * * 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/vs/sdl2/src/video/SDL_egl_c.h b/vs/sdl2/src/video/SDL_egl_c.h index 3fc29776629..f6052617e62 100644 --- a/vs/sdl2/src/video/SDL_egl_c.h +++ b/vs/sdl2/src/video/SDL_egl_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_fillrect.c b/vs/sdl2/src/video/SDL_fillrect.c index d7d112fd141..8d87d9e0acc 100644 --- a/vs/sdl2/src/video/SDL_fillrect.c +++ b/vs/sdl2/src/video/SDL_fillrect.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -63,6 +63,13 @@ static void SDL_FillRect##bpp##SSE(Uint8 *pixels, int pitch, Uint32 color, int w Uint8 *p = NULL; \ \ SSE_BEGIN; \ + \ + /* If the number of bytes per row is equal to the pitch, treat */ \ + /* all rows as one long continuous row (for better performance) */ \ + if ((w) * (bpp) == pitch) { \ + w = w * h; \ + h = 1; \ + } \ \ while (h--) { \ n = w * bpp; \ diff --git a/vs/sdl2/src/video/SDL_pixels.c b/vs/sdl2/src/video/SDL_pixels.c index a6821784ded..034b47c611d 100644 --- a/vs/sdl2/src/video/SDL_pixels.c +++ b/vs/sdl2/src/video/SDL_pixels.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_pixels_c.h b/vs/sdl2/src/video/SDL_pixels_c.h index 7b5eff3aacd..6ad77c3b128 100644 --- a/vs/sdl2/src/video/SDL_pixels_c.h +++ b/vs/sdl2/src/video/SDL_pixels_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_rect.c b/vs/sdl2/src/video/SDL_rect.c index 7af1125d38f..77653c8edbb 100644 --- a/vs/sdl2/src/video/SDL_rect.c +++ b/vs/sdl2/src/video/SDL_rect.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_rect_c.h b/vs/sdl2/src/video/SDL_rect_c.h index b7d6e7ffee2..bcd96585e96 100644 --- a/vs/sdl2/src/video/SDL_rect_c.h +++ b/vs/sdl2/src/video/SDL_rect_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_rect_impl.h b/vs/sdl2/src/video/SDL_rect_impl.h index 288a7277600..ffc3d853c9f 100644 --- a/vs/sdl2/src/video/SDL_rect_impl.h +++ b/vs/sdl2/src/video/SDL_rect_impl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_shape.c b/vs/sdl2/src/video/SDL_shape.c index 77cc8dcad9b..2ec6d027f8e 100644 --- a/vs/sdl2/src/video/SDL_shape.c +++ b/vs/sdl2/src/video/SDL_shape.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_shape_internals.h b/vs/sdl2/src/video/SDL_shape_internals.h index ed0b0d0ed80..dafd3b26553 100644 --- a/vs/sdl2/src/video/SDL_shape_internals.h +++ b/vs/sdl2/src/video/SDL_shape_internals.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_stretch.c b/vs/sdl2/src/video/SDL_stretch.c index a2bae057820..5277b790b01 100644 --- a/vs/sdl2/src/video/SDL_stretch.c +++ b/vs/sdl2/src/video/SDL_stretch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -367,7 +367,7 @@ static void printf_128(const char *str, __m128i var) } #endif -static SDL_INLINE int hasSSE2() +static SDL_INLINE int hasSSE2(void) { static int val = -1; if (val != -1) { diff --git a/vs/sdl2/src/video/SDL_surface.c b/vs/sdl2/src/video/SDL_surface.c index 9db0c5039cf..d05c8b17e49 100644 --- a/vs/sdl2/src/video/SDL_surface.c +++ b/vs/sdl2/src/video/SDL_surface.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_sysvideo.h b/vs/sdl2/src/video/SDL_sysvideo.h index 344efec489d..faf598be388 100644 --- a/vs/sdl2/src/video/SDL_sysvideo.h +++ b/vs/sdl2/src/video/SDL_sysvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -155,6 +155,7 @@ typedef enum { VIDEO_DEVICE_QUIRK_DISABLE_DISPLAY_MODE_SWITCHING = 0x01, VIDEO_DEVICE_QUIRK_DISABLE_UNSET_FULLSCREEN_ON_MINIMIZE = 0x02, + VIDEO_DEVICE_QUIRK_FULLSCREEN_ONLY = 0x04, } DeviceQuirkFlags; struct SDL_VideoDevice @@ -354,8 +355,7 @@ struct SDL_VideoDevice SDL_bool checked_texture_framebuffer; SDL_bool is_dummy; SDL_bool suspend_screensaver; - SDL_Window *wakeup_window; - SDL_mutex *wakeup_lock; /* Initialized only if WaitEventTimeout/SendWakeupEvent are supported */ + void *wakeup_window; int num_displays; SDL_VideoDisplay *displays; SDL_Window *windows; @@ -511,6 +511,7 @@ extern void SDL_OnWindowShown(SDL_Window *window); extern void SDL_OnWindowHidden(SDL_Window *window); extern void SDL_OnWindowMoved(SDL_Window *window); extern void SDL_OnWindowResized(SDL_Window *window); +extern void SDL_OnWindowLiveResizeUpdate(SDL_Window *window); extern void SDL_OnWindowMinimized(SDL_Window *window); extern void SDL_OnWindowRestored(SDL_Window *window); extern void SDL_OnWindowEnter(SDL_Window *window); diff --git a/vs/sdl2/src/video/SDL_video.c b/vs/sdl2/src/video/SDL_video.c index 4a201462618..f1c6db9ec19 100644 --- a/vs/sdl2/src/video/SDL_video.c +++ b/vs/sdl2/src/video/SDL_video.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -34,6 +34,8 @@ #include "SDL_syswm.h" +#include "../render/SDL_sysrender.h" + #ifdef SDL_VIDEO_OPENGL #include "SDL_opengl.h" #endif /* SDL_VIDEO_OPENGL */ @@ -57,6 +59,10 @@ #include #endif +#ifdef __3DS__ +#include <3ds.h> +#endif + #ifdef __LINUX__ #include #include @@ -188,6 +194,11 @@ static SDL_bool DisableUnsetFullscreenOnMinimize(_THIS) return !!(_this->quirk_flags & VIDEO_DEVICE_QUIRK_DISABLE_UNSET_FULLSCREEN_ON_MINIMIZE); } +static SDL_bool IsFullscreenOnly(_THIS) +{ + return !!(_this->quirk_flags & VIDEO_DEVICE_QUIRK_FULLSCREEN_ONLY); +} + /* Support for framebuffer emulation using an accelerated renderer */ #define SDL_WINDOWTEXTUREDATA "_SDL_WindowTextureData" @@ -227,26 +238,37 @@ static int SDL_CreateWindowTexture(SDL_VideoDevice *_this, SDL_Window *window, U if (!data) { SDL_Renderer *renderer = NULL; - const char *hint = SDL_GetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION); - const SDL_bool specific_accelerated_renderer = (hint && *hint != '0' && *hint != '1' && - SDL_strcasecmp(hint, "true") != 0 && - SDL_strcasecmp(hint, "false") != 0 && - SDL_strcasecmp(hint, "software") != 0); + const char *render_driver = NULL; + const char *hint; + + /* See if there's a render driver being requested */ + hint = SDL_GetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION); + if (hint && *hint != '0' && *hint != '1' && + SDL_strcasecmp(hint, "true") != 0 && + SDL_strcasecmp(hint, "false") != 0 && + SDL_strcasecmp(hint, "software") != 0) { + render_driver = hint; + } + + if (!render_driver) { + hint = SDL_GetHint(SDL_HINT_RENDER_DRIVER); + if (hint && *hint && SDL_strcasecmp(hint, "software") != 0) { + render_driver = hint; + } + } /* Check to see if there's a specific driver requested */ - if (specific_accelerated_renderer) { + if (render_driver) { for (i = 0; i < SDL_GetNumRenderDrivers(); ++i) { SDL_GetRenderDriverInfo(i, &info); - if (SDL_strcasecmp(info.name, hint) == 0) { + if (SDL_strcasecmp(info.name, render_driver) == 0) { renderer = SDL_CreateRenderer(window, i, 0); break; } } - if (!renderer || (SDL_GetRendererInfo(renderer, &info) == -1)) { - if (renderer) { - SDL_DestroyRenderer(renderer); - } - return SDL_SetError("Requested renderer for " SDL_HINT_FRAMEBUFFER_ACCELERATION " is not available"); + if (!renderer) { + /* The error for this specific renderer has already been set */ + return -1; } /* if it was specifically requested, even if SDL_RENDERER_ACCELERATED isn't set, we'll accept this renderer. */ } else { @@ -562,7 +584,7 @@ int SDL_VideoInit(const char *driver_name) SDL_DisableScreenSaver(); } -#if !defined(SDL_VIDEO_DRIVER_N3DS) +#if !defined(SDL_VIDEO_DRIVER_N3DS) && !defined(SDL_VIDEO_DRIVER_PSP) /* In the initial state we don't want to pop up an on-screen keyboard, * but we do want to allow text input from other mechanisms. */ @@ -576,7 +598,7 @@ int SDL_VideoInit(const char *driver_name) SDL_SetHint(SDL_HINT_ENABLE_SCREEN_KEYBOARD, NULL); } } -#endif /* !SDL_VIDEO_DRIVER_N3DS */ +#endif /* !SDL_VIDEO_DRIVER_N3DS && !SDL_VIDEO_DRIVER_PSP */ SDL_MousePostInit(); @@ -672,9 +694,11 @@ void SDL_DelVideoDisplay(int index) SDL_SendDisplayEvent(&_this->displays[index], SDL_DISPLAYEVENT_DISCONNECTED, 0); + SDL_free(_this->displays[index].driverdata); + _this->displays[index].driverdata = NULL; + SDL_free(_this->displays[index].name); + _this->displays[index].name = NULL; if (index < (_this->num_displays - 1)) { - SDL_free(_this->displays[index].driverdata); - SDL_free(_this->displays[index].name); SDL_memmove(&_this->displays[index], &_this->displays[index + 1], (_this->num_displays - index - 1) * sizeof(_this->displays[index])); } --_this->num_displays; @@ -989,7 +1013,7 @@ static SDL_DisplayMode *SDL_GetClosestDisplayModeForDisplay(SDL_VideoDisplay *di match = current; continue; } - if (current->format != match->format) { + if (current->format != match->format && match->format != target_format) { /* Sorted highest depth to lowest */ if (current->format == target_format || (SDL_BITSPERPIXEL(current->format) >= @@ -1000,7 +1024,7 @@ static SDL_DisplayMode *SDL_GetClosestDisplayModeForDisplay(SDL_VideoDisplay *di } continue; } - if (current->refresh_rate != match->refresh_rate) { + if (current->refresh_rate != match->refresh_rate && match->refresh_rate != target_refresh_rate) { /* Sorted highest refresh to lowest */ if (current->refresh_rate >= target_refresh_rate) { match = current; @@ -1752,7 +1776,7 @@ SDL_Window *SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint window->windowed.w = window->w; window->windowed.h = window->h; - if (flags & SDL_WINDOW_FULLSCREEN) { + if (flags & SDL_WINDOW_FULLSCREEN || IsFullscreenOnly(_this)) { SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); int displayIndex; SDL_Rect bounds; @@ -1779,6 +1803,7 @@ SDL_Window *SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint window->y = bounds.y; window->w = bounds.w; window->h = bounds.h; + flags |= SDL_WINDOW_FULLSCREEN; } window->flags = ((flags & CREATE_FLAGS) | SDL_WINDOW_HIDDEN); @@ -1941,12 +1966,6 @@ int SDL_RecreateWindow(SDL_Window *window, Uint32 flags) /* Tear down the old native window */ SDL_DestroyWindowSurface(window); - if (_this->checked_texture_framebuffer) { /* never checked? No framebuffer to destroy. Don't risk calling the wrong implementation. */ - if (_this->DestroyWindowFramebuffer) { - _this->DestroyWindowFramebuffer(_this, window); - } - } - if (_this->DestroyWindow && !(flags & SDL_WINDOW_FOREIGN)) { _this->DestroyWindow(_this, window); } @@ -2645,39 +2664,29 @@ int SDL_SetWindowFullscreen(SDL_Window *window, Uint32 flags) return -1; } -static SDL_Surface *SDL_CreateWindowFramebuffer(SDL_Window *window) +static SDL_bool ShouldAttemptTextureFramebuffer(void) { - Uint32 format = 0; - void *pixels = NULL; - int pitch = 0; - int bpp; - Uint32 Rmask, Gmask, Bmask, Amask; - SDL_bool created_framebuffer = SDL_FALSE; - int w, h; - - SDL_GetWindowSizeInPixels(window, &w, &h); - - /* This will switch the video backend from using a software surface to - using a GPU texture through the 2D render API, if we think this would - be more efficient. This only checks once, on demand. */ - if (!_this->checked_texture_framebuffer) { - SDL_bool attempt_texture_framebuffer = SDL_TRUE; + const char *hint; + SDL_bool attempt_texture_framebuffer = SDL_TRUE; - /* See if the user or application wants to specifically disable the framebuffer */ - const char *hint = SDL_GetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION); - if (hint) { - if ((*hint == '0') || (SDL_strcasecmp(hint, "false") == 0) || (SDL_strcasecmp(hint, "software") == 0)) { - attempt_texture_framebuffer = SDL_FALSE; - } - } + /* The dummy driver never has GPU support, of course. */ + if (_this->is_dummy) { + return SDL_FALSE; + } - if (_this->is_dummy) { /* dummy driver never has GPU support, of course. */ + /* See if there's a hint override */ + hint = SDL_GetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION); + if (hint && *hint) { + if (*hint == '0' || SDL_strcasecmp(hint, "false") == 0 || SDL_strcasecmp(hint, "software") == 0) { attempt_texture_framebuffer = SDL_FALSE; + } else { + attempt_texture_framebuffer = SDL_TRUE; } - + } else { + /* Check for platform specific defaults */ #if defined(__LINUX__) /* On WSL, direct X11 is faster than using OpenGL for window framebuffers, so try to detect WSL and avoid texture framebuffer. */ - else if ((_this->CreateWindowFramebuffer) && (SDL_strcmp(_this->name, "x11") == 0)) { + if ((_this->CreateWindowFramebuffer) && (SDL_strcmp(_this->name, "x11") == 0)) { struct stat sb; if ((stat("/proc/sys/fs/binfmt_misc/WSLInterop", &sb) == 0) || (stat("/run/WSL", &sb) == 0)) { /* if either of these exist, we're on WSL. */ attempt_texture_framebuffer = SDL_FALSE; @@ -2685,18 +2694,35 @@ static SDL_Surface *SDL_CreateWindowFramebuffer(SDL_Window *window) } #endif #if defined(__WIN32__) || defined(__WINGDK__) /* GDI BitBlt() is way faster than Direct3D dynamic textures right now. (!!! FIXME: is this still true?) */ - else if ((_this->CreateWindowFramebuffer) && (SDL_strcmp(_this->name, "windows") == 0)) { + if (_this->CreateWindowFramebuffer && (SDL_strcmp(_this->name, "windows") == 0)) { attempt_texture_framebuffer = SDL_FALSE; } #endif #if defined(__EMSCRIPTEN__) - else { - attempt_texture_framebuffer = SDL_FALSE; - } + attempt_texture_framebuffer = SDL_FALSE; #endif + } + return attempt_texture_framebuffer; +} + +static SDL_Surface *SDL_CreateWindowFramebuffer(SDL_Window *window) +{ + Uint32 format = 0; + void *pixels = NULL; + int pitch = 0; + int bpp; + Uint32 Rmask, Gmask, Bmask, Amask; + SDL_bool created_framebuffer = SDL_FALSE; + int w, h; - if (attempt_texture_framebuffer) { - if (SDL_CreateWindowTexture(_this, window, &format, &pixels, &pitch) == -1) { + SDL_GetWindowSizeInPixels(window, &w, &h); + + /* This will switch the video backend from using a software surface to + using a GPU texture through the 2D render API, if we think this would + be more efficient. This only checks once, on demand. */ + if (!_this->checked_texture_framebuffer) { + if (ShouldAttemptTextureFramebuffer()) { + if (SDL_CreateWindowTexture(_this, window, &format, &pixels, &pitch) < 0) { /* !!! FIXME: if this failed halfway (made renderer, failed to make texture, etc), !!! FIXME: we probably need to clean this up so it doesn't interfere with !!! FIXME: a software fallback at the system level (can we blit to an @@ -2718,6 +2744,7 @@ static SDL_Surface *SDL_CreateWindowFramebuffer(SDL_Window *window) if (!created_framebuffer) { if (!_this->CreateWindowFramebuffer || !_this->UpdateWindowFramebuffer) { + SDL_SetError("Window framebuffer support not available"); return NULL; } @@ -2727,6 +2754,7 @@ static SDL_Surface *SDL_CreateWindowFramebuffer(SDL_Window *window) } if (window->surface) { + /* We may have gone recursive and already created the surface */ return window->surface; } @@ -2749,7 +2777,12 @@ SDL_Surface *SDL_GetWindowSurface(SDL_Window *window) CHECK_WINDOW_MAGIC(window, NULL); if (!window->surface_valid) { - SDL_DestroyWindowSurface(window); + if (window->surface) { + window->surface->flags &= ~SDL_DONTFREE; + SDL_FreeSurface(window->surface); + window->surface = NULL; + } + window->surface = SDL_CreateWindowFramebuffer(window); if (window->surface) { window->surface_valid = SDL_TRUE; @@ -2786,6 +2819,25 @@ int SDL_UpdateWindowSurfaceRects(SDL_Window *window, const SDL_Rect *rects, return _this->UpdateWindowFramebuffer(_this, window, rects, numrects); } +int SDL_DestroyWindowSurface(SDL_Window *window) +{ + CHECK_WINDOW_MAGIC(window, -1); + + if (window->surface) { + window->surface->flags &= ~SDL_DONTFREE; + SDL_FreeSurface(window->surface); + window->surface = NULL; + window->surface_valid = SDL_FALSE; + } + + if (_this->checked_texture_framebuffer) { /* never checked? No framebuffer to destroy. Don't risk calling the wrong implementation. */ + if (_this->DestroyWindowFramebuffer) { + _this->DestroyWindowFramebuffer(_this, window); + } + } + return 0; +} + int SDL_SetWindowBrightness(SDL_Window * window, float brightness) { Uint16 ramp[256]; @@ -2831,19 +2883,6 @@ int SDL_SetWindowOpacity(SDL_Window * window, float opacity) return retval; } -int SDL_DestroyWindowSurface(SDL_Window *window) -{ - CHECK_WINDOW_MAGIC(window, -1); - - if (window->surface) { - window->surface->flags &= ~SDL_DONTFREE; - SDL_FreeSurface(window->surface); - window->surface = NULL; - window->surface_valid = SDL_FALSE; - } - return 0; -} - int SDL_GetWindowOpacity(SDL_Window *window, float *out_opacity) { CHECK_WINDOW_MAGIC(window, -1); @@ -3142,6 +3181,12 @@ void SDL_OnWindowMoved(SDL_Window *window) } } +void SDL_OnWindowLiveResizeUpdate(SDL_Window *window) +{ + /* Send an expose event so the application can redraw */ + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_EXPOSED, 0, 0); +} + void SDL_OnWindowMinimized(SDL_Window *window) { if (!DisableUnsetFullscreenOnMinimize(_this)) { @@ -3264,6 +3309,7 @@ SDL_Window *SDL_GetFocusWindow(void) void SDL_DestroyWindow(SDL_Window *window) { SDL_VideoDisplay *display; + SDL_Renderer *renderer; CHECK_WINDOW_MAGIC(window, ); @@ -3278,23 +3324,27 @@ void SDL_DestroyWindow(SDL_Window *window) if (SDL_GetKeyboardFocus() == window) { SDL_SetKeyboardFocus(NULL); } + if ((window->flags & SDL_WINDOW_MOUSE_CAPTURE)) { + SDL_UpdateMouseCapture(SDL_TRUE); + } if (SDL_GetMouseFocus() == window) { SDL_SetMouseFocus(NULL); } - /* make no context current if this is the current context window. */ + renderer = SDL_GetRenderer(window); + if (renderer) { + SDL_DestroyRendererWithoutFreeing(renderer); + } + + SDL_DestroyWindowSurface(window); + + /* Make no context current if this is the current context window */ if (window->flags & SDL_WINDOW_OPENGL) { if (_this->current_glwin == window) { SDL_GL_MakeCurrent(window, NULL); } } - SDL_DestroyWindowSurface(window); - if (_this->checked_texture_framebuffer) { /* never checked? No framebuffer to destroy. Don't risk calling the wrong implementation. */ - if (_this->DestroyWindowFramebuffer) { - _this->DestroyWindowFramebuffer(_this, window); - } - } if (_this->DestroyWindow) { _this->DestroyWindow(_this, window); } @@ -3318,9 +3368,7 @@ void SDL_DestroyWindow(SDL_Window *window) _this->current_glwin = NULL; } - if (_this->wakeup_window == window) { - _this->wakeup_window = NULL; - } + SDL_AtomicCASPtr(&_this->wakeup_window, window, NULL); /* Now invalidate magic */ window->magic = NULL; @@ -4518,6 +4566,23 @@ int SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *messag }, title, message); return 0; +#elif defined(__3DS__) + errorConf errCnf; + bool hasGpuRight; + + /* If the video subsystem has not been initialised, set up graphics temporarily */ + hasGpuRight = gspHasGpuRight(); + if (!hasGpuRight) + gfxInitDefault(); + + errorInit(&errCnf, ERROR_TEXT_WORD_WRAP, CFG_LANGUAGE_EN); + errorText(&errCnf, message); + errorDisp(&errCnf); + + if (!hasGpuRight) + gfxExit(); + + return 0; #else SDL_MessageBoxData data; SDL_MessageBoxButtonData button; diff --git a/vs/sdl2/src/video/SDL_vulkan_internal.h b/vs/sdl2/src/video/SDL_vulkan_internal.h index 28728fadc53..ac14f9a3549 100644 --- a/vs/sdl2/src/video/SDL_vulkan_internal.h +++ b/vs/sdl2/src/video/SDL_vulkan_internal.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_vulkan_utils.c b/vs/sdl2/src/video/SDL_vulkan_utils.c index 7a1579d75a5..1c796e7ba94 100644 --- a/vs/sdl2/src/video/SDL_vulkan_utils.c +++ b/vs/sdl2/src/video/SDL_vulkan_utils.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_yuv.c b/vs/sdl2/src/video/SDL_yuv.c index 14f57468d38..3334b752450 100644 --- a/vs/sdl2/src/video/SDL_yuv.c +++ b/vs/sdl2/src/video/SDL_yuv.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/SDL_yuv_c.h b/vs/sdl2/src/video/SDL_yuv_c.h index 3fda84b7fd4..ea58ea4d06f 100644 --- a/vs/sdl2/src/video/SDL_yuv_c.h +++ b/vs/sdl2/src/video/SDL_yuv_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidclipboard.c b/vs/sdl2/src/video/android/SDL_androidclipboard.c index afd729eca83..6a8b872d57f 100644 --- a/vs/sdl2/src/video/android/SDL_androidclipboard.c +++ b/vs/sdl2/src/video/android/SDL_androidclipboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidclipboard.h b/vs/sdl2/src/video/android/SDL_androidclipboard.h index 8097d719937..eee537b2b72 100644 --- a/vs/sdl2/src/video/android/SDL_androidclipboard.h +++ b/vs/sdl2/src/video/android/SDL_androidclipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidevents.c b/vs/sdl2/src/video/android/SDL_androidevents.c index d125c92bd1f..cbe7dd17410 100644 --- a/vs/sdl2/src/video/android/SDL_androidevents.c +++ b/vs/sdl2/src/video/android/SDL_androidevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidevents.h b/vs/sdl2/src/video/android/SDL_androidevents.h index 921daa6cf97..cf043aa59f4 100644 --- a/vs/sdl2/src/video/android/SDL_androidevents.h +++ b/vs/sdl2/src/video/android/SDL_androidevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidgl.c b/vs/sdl2/src/video/android/SDL_androidgl.c index 5e5ef603eaa..dade42b1d2b 100644 --- a/vs/sdl2/src/video/android/SDL_androidgl.c +++ b/vs/sdl2/src/video/android/SDL_androidgl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidgl.h b/vs/sdl2/src/video/android/SDL_androidgl.h index 4fb505c1f7e..e9fd3fbf1b8 100644 --- a/vs/sdl2/src/video/android/SDL_androidgl.h +++ b/vs/sdl2/src/video/android/SDL_androidgl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidkeyboard.c b/vs/sdl2/src/video/android/SDL_androidkeyboard.c index b55de029779..a9ad4900c58 100644 --- a/vs/sdl2/src/video/android/SDL_androidkeyboard.c +++ b/vs/sdl2/src/video/android/SDL_androidkeyboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidkeyboard.h b/vs/sdl2/src/video/android/SDL_androidkeyboard.h index 4081ac674fb..829a4f40775 100644 --- a/vs/sdl2/src/video/android/SDL_androidkeyboard.h +++ b/vs/sdl2/src/video/android/SDL_androidkeyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidmessagebox.c b/vs/sdl2/src/video/android/SDL_androidmessagebox.c index cb2ad280798..d30c6e63540 100644 --- a/vs/sdl2/src/video/android/SDL_androidmessagebox.c +++ b/vs/sdl2/src/video/android/SDL_androidmessagebox.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidmessagebox.h b/vs/sdl2/src/video/android/SDL_androidmessagebox.h index 7c93c0eff68..254790c4429 100644 --- a/vs/sdl2/src/video/android/SDL_androidmessagebox.h +++ b/vs/sdl2/src/video/android/SDL_androidmessagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidmouse.c b/vs/sdl2/src/video/android/SDL_androidmouse.c index 29ee05e3564..4f12dd15668 100644 --- a/vs/sdl2/src/video/android/SDL_androidmouse.c +++ b/vs/sdl2/src/video/android/SDL_androidmouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -78,7 +78,7 @@ static SDL_Cursor *Android_WrapCursor(int custom_cursor, int system_cursor) return cursor; } -static SDL_Cursor *Android_CreateDefaultCursor() +static SDL_Cursor *Android_CreateDefaultCursor(void) { return Android_WrapCursor(0, SDL_SYSTEM_CURSOR_ARROW); } @@ -116,7 +116,7 @@ static void Android_FreeCursor(SDL_Cursor *cursor) SDL_free(cursor); } -static SDL_Cursor *Android_CreateEmptyCursor() +static SDL_Cursor *Android_CreateEmptyCursor(void) { if (!empty_cursor) { SDL_Surface *empty_surface = SDL_CreateRGBSurfaceWithFormat(0, 1, 1, 32, SDL_PIXELFORMAT_ARGB8888); @@ -129,7 +129,7 @@ static SDL_Cursor *Android_CreateEmptyCursor() return empty_cursor; } -static void Android_DestroyEmptyCursor() +static void Android_DestroyEmptyCursor(void) { if (empty_cursor) { Android_FreeCursor(empty_cursor); diff --git a/vs/sdl2/src/video/android/SDL_androidmouse.h b/vs/sdl2/src/video/android/SDL_androidmouse.h index 6ff724986bc..561a1f8a1f0 100644 --- a/vs/sdl2/src/video/android/SDL_androidmouse.h +++ b/vs/sdl2/src/video/android/SDL_androidmouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidtouch.c b/vs/sdl2/src/video/android/SDL_androidtouch.c index c44f2b0dede..5741a86c160 100644 --- a/vs/sdl2/src/video/android/SDL_androidtouch.c +++ b/vs/sdl2/src/video/android/SDL_androidtouch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidtouch.h b/vs/sdl2/src/video/android/SDL_androidtouch.h index 067842a606b..806f6b8d8c3 100644 --- a/vs/sdl2/src/video/android/SDL_androidtouch.h +++ b/vs/sdl2/src/video/android/SDL_androidtouch.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidvideo.c b/vs/sdl2/src/video/android/SDL_androidvideo.c index f54b4c3cdd4..12a976c4da3 100644 --- a/vs/sdl2/src/video/android/SDL_androidvideo.c +++ b/vs/sdl2/src/video/android/SDL_androidvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidvideo.h b/vs/sdl2/src/video/android/SDL_androidvideo.h index 7eb4f9ac503..0ba13263b2a 100644 --- a/vs/sdl2/src/video/android/SDL_androidvideo.h +++ b/vs/sdl2/src/video/android/SDL_androidvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidvulkan.c b/vs/sdl2/src/video/android/SDL_androidvulkan.c index 6ade57ed8ca..c4c21550cb7 100644 --- a/vs/sdl2/src/video/android/SDL_androidvulkan.c +++ b/vs/sdl2/src/video/android/SDL_androidvulkan.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidvulkan.h b/vs/sdl2/src/video/android/SDL_androidvulkan.h index caee0a67281..2cf99e8af3b 100644 --- a/vs/sdl2/src/video/android/SDL_androidvulkan.h +++ b/vs/sdl2/src/video/android/SDL_androidvulkan.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidwindow.c b/vs/sdl2/src/video/android/SDL_androidwindow.c index 2624331e079..7af56691d12 100644 --- a/vs/sdl2/src/video/android/SDL_androidwindow.c +++ b/vs/sdl2/src/video/android/SDL_androidwindow.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/android/SDL_androidwindow.h b/vs/sdl2/src/video/android/SDL_androidwindow.h index 240c77ce34f..eddfe7f0d73 100644 --- a/vs/sdl2/src/video/android/SDL_androidwindow.h +++ b/vs/sdl2/src/video/android/SDL_androidwindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoaclipboard.h b/vs/sdl2/src/video/cocoa/SDL_cocoaclipboard.h index a7b7a548e4a..b3b3d81622a 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoaclipboard.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoaclipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoaclipboard.m b/vs/sdl2/src/video/cocoa/SDL_cocoaclipboard.m index 136dba44ec7..5b32bbca02b 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoaclipboard.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoaclipboard.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoaevents.h b/vs/sdl2/src/video/cocoa/SDL_cocoaevents.h index 421df3aa190..e99089ab125 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoaevents.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoaevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoaevents.m b/vs/sdl2/src/video/cocoa/SDL_cocoaevents.m index 441985da2d7..39c5c4f3884 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoaevents.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoaevents.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -287,9 +287,19 @@ - (void)applicationDidFinishLaunching:(NSNotification *)notification /* The menu bar of SDL apps which don't have the typical .app bundle * structure fails to work the first time a window is created (until it's * de-focused and re-focused), if this call is in Cocoa_RegisterApp instead - * of here. https://bugzilla.libsdl.org/show_bug.cgi?id=3051 + * of here. https://github.com/libsdl-org/SDL/issues/1913 */ - if (!SDL_GetHintBoolean(SDL_HINT_MAC_BACKGROUND_APP, SDL_FALSE)) { + + /* this apparently became unnecessary on macOS 14.0, and will addition pop up a + hidden dock if you're moving the mouse during launch, so change the default + behaviour there. https://github.com/libsdl-org/SDL/issues/10340 + (13.6 still needs it, presumably 13.7 does, too.) */ + SDL_bool background_app_default = SDL_FALSE; + if (@available(macOS 14.0, *)) { + background_app_default = SDL_TRUE; /* by default, don't explicitly activate the dock and then us again to force to foreground */ + } + + if (!SDL_GetHintBoolean(SDL_HINT_MAC_BACKGROUND_APP, background_app_default)) { /* Get more aggressive for Catalina: activate the Dock first so we definitely reset all activation state. */ for (NSRunningApplication *i in [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.apple.dock"]) { [i activateWithOptions:NSApplicationActivateIgnoringOtherApps]; diff --git a/vs/sdl2/src/video/cocoa/SDL_cocoakeyboard.h b/vs/sdl2/src/video/cocoa/SDL_cocoakeyboard.h index d08066403cf..62d6f0383e4 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoakeyboard.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoakeyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoakeyboard.m b/vs/sdl2/src/video/cocoa/SDL_cocoakeyboard.m index 3d65456bc6d..1e369394812 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoakeyboard.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoakeyboard.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -158,7 +158,7 @@ - (void)setMarkedText:(id)aString selectedRange:(NSRange)selectedRange replaceme - (void)unmarkText { //[_markedText release]; // Maybe required for DOSBox-X - _markedText = nil; + _markedText = nil; [_markedLabel setHidden:YES]; // inserted for DOSBox-X SDL_SendEditingText("", 0, 0); } diff --git a/vs/sdl2/src/video/cocoa/SDL_cocoamessagebox.h b/vs/sdl2/src/video/cocoa/SDL_cocoamessagebox.h index 765ffe71743..501ffa50208 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoamessagebox.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoamessagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoamessagebox.m b/vs/sdl2/src/video/cocoa/SDL_cocoamessagebox.m index 4e342c1d5ed..20eabe3eeec 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoamessagebox.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoamessagebox.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -33,6 +33,9 @@ @interface SDLMessageBoxPresenter : NSObject { NSWindow *nswindow; } - (id)initWithParentWindow:(SDL_Window *)window; +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090 +- (void)alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; +#endif @end @implementation SDLMessageBoxPresenter @@ -56,16 +59,32 @@ - (id) initWithParentWindow:(SDL_Window *)window - (void)showAlert:(NSAlert*)alert { if (nswindow) { - [alert beginSheetModalForWindow:nswindow +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1090 + if ([alert respondsToSelector:@selector(beginSheetModalForWindow:completionHandler:)]) { + [alert beginSheetModalForWindow:nswindow completionHandler:^(NSModalResponse returnCode) { [NSApp stopModalWithCode:returnCode]; }]; + } else +#endif + { +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090 + [alert beginSheetModalForWindow:nswindow modalDelegate:self didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) contextInfo:nil]; +#endif + } clicked = [NSApp runModalForWindow:nswindow]; nswindow = nil; } else { clicked = [alert runModal]; } } + +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090 +- (void) alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo +{ + [NSApp stopModalWithCode:returnCode]; +} +#endif @end diff --git a/vs/sdl2/src/video/cocoa/SDL_cocoametalview.h b/vs/sdl2/src/video/cocoa/SDL_cocoametalview.h index d4a537400e8..b8b6b7a24ae 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoametalview.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoametalview.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoametalview.m b/vs/sdl2/src/video/cocoa/SDL_cocoametalview.m index d71f6511d00..9591f9771b1 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoametalview.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoametalview.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoamodes.h b/vs/sdl2/src/video/cocoa/SDL_cocoamodes.h index 426036e8c7e..dc6273d5e16 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoamodes.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoamodes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoamodes.m b/vs/sdl2/src/video/cocoa/SDL_cocoamodes.m index d1ef99e9c0c..fa5b1845824 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoamodes.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoamodes.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoamouse.h b/vs/sdl2/src/video/cocoa/SDL_cocoamouse.h index 0d5f5db2a71..4fee8655e7c 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoamouse.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoamouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoamouse.m b/vs/sdl2/src/video/cocoa/SDL_cocoamouse.m index c14f9abdc73..e70c40956ad 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoamouse.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoamouse.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoaopengl.h b/vs/sdl2/src/video/cocoa/SDL_cocoaopengl.h index 26462bb7655..f152a726c04 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoaopengl.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoaopengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoaopengl.m b/vs/sdl2/src/video/cocoa/SDL_cocoaopengl.m index bda93159da6..ffc59e671ff 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoaopengl.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoaopengl.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -507,13 +507,31 @@ int Cocoa_GL_SwapWindow(_THIS, SDL_Window * window) return 0; }} +static void DispatchedDeleteContext(SDL_GLContext context) +{ + @autoreleasepool { + SDLOpenGLContext *nscontext = (__bridge SDLOpenGLContext *)context; + [nscontext cleanup]; + CFRelease(context); + } +} + void Cocoa_GL_DeleteContext(_THIS, SDL_GLContext context) -{ @autoreleasepool { - SDLOpenGLContext *nscontext = (__bridge SDLOpenGLContext *)context; - [nscontext cleanup]; - CFRelease(context); -}} + if ([NSThread isMainThread]) { + DispatchedDeleteContext(context); + } else { + if (SDL_opengl_async_dispatch) { + dispatch_async(dispatch_get_main_queue(), ^{ + DispatchedDeleteContext(context); + }); + } else { + dispatch_sync(dispatch_get_main_queue(), ^{ + DispatchedDeleteContext(context); + }); + } + } +} /* We still support OpenGL as long as Apple offers it, deprecated or not, so disable deprecation warnings about it. */ #ifdef __clang__ diff --git a/vs/sdl2/src/video/cocoa/SDL_cocoaopengles.h b/vs/sdl2/src/video/cocoa/SDL_cocoaopengles.h index 0729b6be0b2..8ec93a3c362 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoaopengles.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoaopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoaopengles.m b/vs/sdl2/src/video/cocoa/SDL_cocoaopengles.m index abb2014c9fe..074646037d4 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoaopengles.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoaopengles.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoashape.h b/vs/sdl2/src/video/cocoa/SDL_cocoashape.h index f37c2d4e15d..82b8658b342 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoashape.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoashape.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoashape.m b/vs/sdl2/src/video/cocoa/SDL_cocoashape.m index 11642ded0b8..e1421ee1b27 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoashape.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoashape.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoavideo.h b/vs/sdl2/src/video/cocoa/SDL_cocoavideo.h index 0082171d9ca..d7663f90ca4 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoavideo.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoavideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoavideo.m b/vs/sdl2/src/video/cocoa/SDL_cocoavideo.m index 156af891507..4ca68ba836f 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoavideo.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoavideo.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -48,9 +48,6 @@ @implementation SDL_VideoData static void Cocoa_DeleteDevice(SDL_VideoDevice * device) { @autoreleasepool { - if (device->wakeup_lock) { - SDL_DestroyMutex(device->wakeup_lock); - } CFBridgingRelease(device->driverdata); SDL_free(device); }} @@ -76,7 +73,6 @@ static void Cocoa_DeleteDevice(SDL_VideoDevice * device) return NULL; } device->driverdata = (void *)CFBridgingRetain(data); - device->wakeup_lock = SDL_CreateMutex(); /* Set the function pointers */ device->VideoInit = Cocoa_VideoInit; diff --git a/vs/sdl2/src/video/cocoa/SDL_cocoavulkan.h b/vs/sdl2/src/video/cocoa/SDL_cocoavulkan.h index fc90ee168af..3de20dcd269 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoavulkan.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoavulkan.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoavulkan.m b/vs/sdl2/src/video/cocoa/SDL_cocoavulkan.m index d1ea16fef47..1454de50b4a 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoavulkan.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoavulkan.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/cocoa/SDL_cocoawindow.h b/vs/sdl2/src/video/cocoa/SDL_cocoawindow.h index 0cf9e9a6ee7..7ef0bc03641 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoawindow.h +++ b/vs/sdl2/src/video/cocoa/SDL_cocoawindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -54,6 +54,7 @@ typedef enum NSInteger focusClickPending; int pendingWindowWarpX, pendingWindowWarpY; BOOL isDragAreaRunning; + NSTimer *liveResizeTimer; } -(BOOL) isTouchFromTrackpad:(NSEvent *)theEvent; @@ -77,6 +78,9 @@ typedef enum /* Window delegate functionality */ -(BOOL) windowShouldClose:(id) sender; -(void) windowDidExpose:(NSNotification *) aNotification; +-(void) onLiveResizeTimerFire:(id) sender; +-(void) windowWillStartLiveResize:(NSNotification *)aNotification; +-(void) windowDidEndLiveResize:(NSNotification *)aNotification; -(void) windowDidMove:(NSNotification *) aNotification; -(void) windowDidResize:(NSNotification *) aNotification; -(void) windowDidMiniaturize:(NSNotification *) aNotification; diff --git a/vs/sdl2/src/video/cocoa/SDL_cocoawindow.m b/vs/sdl2/src/video/cocoa/SDL_cocoawindow.m index 828366095c5..641df8129e4 100644 --- a/vs/sdl2/src/video/cocoa/SDL_cocoawindow.m +++ b/vs/sdl2/src/video/cocoa/SDL_cocoawindow.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -490,11 +490,14 @@ - (void)listen:(SDL_WindowData *)data isMoving = NO; isDragAreaRunning = NO; pendingWindowWarpX = pendingWindowWarpY = INT_MAX; + liveResizeTimer = nil; center = [NSNotificationCenter defaultCenter]; if ([window delegate] != nil) { [center addObserver:self selector:@selector(windowDidExpose:) name:NSWindowDidExposeNotification object:window]; + [center addObserver:self selector:@selector(windowWillStartLiveResize:) name:NSWindowWillStartLiveResizeNotification object:window]; + [center addObserver:self selector:@selector(windowDidEndLiveResize:) name:NSWindowDidEndLiveResizeNotification object:window]; [center addObserver:self selector:@selector(windowDidMove:) name:NSWindowDidMoveNotification object:window]; [center addObserver:self selector:@selector(windowDidResize:) name:NSWindowDidResizeNotification object:window]; [center addObserver:self selector:@selector(windowDidMiniaturize:) name:NSWindowDidMiniaturizeNotification object:window]; @@ -628,6 +631,8 @@ - (void)close if ([window delegate] != self) { [center removeObserver:self name:NSWindowDidExposeNotification object:window]; + [center removeObserver:self name:NSWindowWillStartLiveResizeNotification object:window]; + [center removeObserver:self name:NSWindowDidEndLiveResizeNotification object:window]; [center removeObserver:self name:NSWindowDidMoveNotification object:window]; [center removeObserver:self name:NSWindowDidResizeNotification object:window]; [center removeObserver:self name:NSWindowDidMiniaturizeNotification object:window]; @@ -738,6 +743,36 @@ - (void)windowDidExpose:(NSNotification *)aNotification SDL_SendWindowEvent(_data.window, SDL_WINDOWEVENT_EXPOSED, 0, 0); } +- (void)onLiveResizeTimerFire:(id)sender +{ + SDL_OnWindowLiveResizeUpdate(_data.window); +} + +- (void)windowWillStartLiveResize:(NSNotification *)aNotification +{ + // We'll try to maintain 60 FPS during live resizing + const NSTimeInterval interval = 1.0 / 60.0; + + NSMethodSignature *invocationSig = [Cocoa_WindowListener + instanceMethodSignatureForSelector:@selector(onLiveResizeTimerFire:)]; + NSInvocation *invocation = [NSInvocation + invocationWithMethodSignature:invocationSig]; + [invocation setTarget:self]; + [invocation setSelector:@selector(onLiveResizeTimerFire:)]; + + liveResizeTimer = [NSTimer scheduledTimerWithTimeInterval:interval + invocation:invocation + repeats:TRUE]; + + [[NSRunLoop currentRunLoop] addTimer:liveResizeTimer forMode:NSRunLoopCommonModes]; +} + +- (void)windowDidEndLiveResize:(NSNotification *)aNotification +{ + [liveResizeTimer invalidate]; + liveResizeTimer = nil; +} + - (void)windowWillMove:(NSNotification *)aNotification { if ([_data.nswindow isKindOfClass:[SDLWindow class]]) { @@ -820,6 +855,11 @@ - (void)windowDidResize:(NSNotification *)aNotification SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MOVED, x, y); SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, w, h); + /* The OS can resize the window automatically if the display density + changes while the window is miniaturized or hidden */ + if (![nswindow isVisible]) + return; + /* isZoomed always returns true if the window is not resizable */ if ((window->flags & SDL_WINDOW_RESIZABLE) && [nswindow isZoomed]) { zoomed = YES; @@ -933,11 +973,13 @@ - (void)windowDidChangeScreenProfile:(NSNotification *)aNotification - (void)windowDidChangeScreen:(NSNotification *)aNotification { /*printf("WINDOWDIDCHANGESCREEN\n");*/ +#ifdef SDL_VIDEO_OPENGL if (_data && _data.nscontexts) { for (SDLOpenGLContext *context in _data.nscontexts) { [context movedToNewScreen]; } } +#endif /* SDL_VIDEO_OPENGL */ } - (void)windowWillEnterFullScreen:(NSNotification *)aNotification @@ -2346,7 +2388,10 @@ void Cocoa_DestroyWindow(_THIS, SDL_Window * window) SDL_WindowData *data = (SDL_WindowData *) CFBridgingRelease(window->driverdata); if (data) { +#ifdef SDL_VIDEO_OPENGL NSArray *contexts; +#endif + if ([data.listener isInFullscreenSpace]) { [NSMenu setMenuBarVisible:YES]; } @@ -2358,15 +2403,13 @@ void Cocoa_DestroyWindow(_THIS, SDL_Window * window) [data.nswindow close]; } - #ifdef SDL_VIDEO_OPENGL - +#ifdef SDL_VIDEO_OPENGL contexts = [data.nscontexts copy]; for (SDLOpenGLContext *context in contexts) { /* Calling setWindow:NULL causes the context to remove itself from the context list. */ [context setWindow:NULL]; } - - #endif /* SDL_VIDEO_OPENGL */ +#endif /* SDL_VIDEO_OPENGL */ if (window->shaper) { CFBridgingRelease(window->shaper->driverdata); diff --git a/vs/sdl2/src/video/directfb/SDL_DirectFB_WM.c b/vs/sdl2/src/video/directfb/SDL_DirectFB_WM.c index d32ab5db8e6..425ca097915 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_WM.c +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_WM.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_WM.h b/vs/sdl2/src/video/directfb/SDL_DirectFB_WM.h index d373ee6a017..d36ada421b8 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_WM.h +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_WM.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_dyn.c b/vs/sdl2/src/video/directfb/SDL_DirectFB_dyn.c index b4c734aaa4d..e3aca31634d 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_dyn.c +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_dyn.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_dyn.h b/vs/sdl2/src/video/directfb/SDL_DirectFB_dyn.h index dc08d98750b..854ce43ca85 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_dyn.h +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_dyn.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_events.c b/vs/sdl2/src/video/directfb/SDL_DirectFB_events.c index 1b2d654cb3b..e076ff000df 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_events.c +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_events.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_events.h b/vs/sdl2/src/video/directfb/SDL_DirectFB_events.h index 65ee229fd34..c41cb1518ba 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_events.h +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_events.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_modes.c b/vs/sdl2/src/video/directfb/SDL_DirectFB_modes.c index 3c69a82f039..6829e206ece 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_modes.c +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_modes.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_modes.h b/vs/sdl2/src/video/directfb/SDL_DirectFB_modes.h index 236ea8b23a4..58374c80dee 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_modes.h +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_modes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_mouse.c b/vs/sdl2/src/video/directfb/SDL_DirectFB_mouse.c index 363509e878f..0e24fbffc58 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_mouse.c +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_mouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_mouse.h b/vs/sdl2/src/video/directfb/SDL_DirectFB_mouse.h index 6d90970bd2a..d45b202e74b 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_mouse.h +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_mouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_opengl.c b/vs/sdl2/src/video/directfb/SDL_DirectFB_opengl.c index 338d53a8782..17737c2960f 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_opengl.c +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_opengl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_opengl.h b/vs/sdl2/src/video/directfb/SDL_DirectFB_opengl.h index 3700da76770..1e27774ff67 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_opengl.h +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_opengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_render.c b/vs/sdl2/src/video/directfb/SDL_DirectFB_render.c index 0d96f860021..38ff16fb15c 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_render.c +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_render.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -561,7 +561,7 @@ static void DirectFB_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * textur } } -static void DirectFB_SetTextureScaleMode() +static void DirectFB_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL_ScaleMode scaleMode) { } diff --git a/vs/sdl2/src/video/directfb/SDL_DirectFB_render.h b/vs/sdl2/src/video/directfb/SDL_DirectFB_render.h index 76370396f56..8030948fe96 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_render.h +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_render.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_shape.c b/vs/sdl2/src/video/directfb/SDL_DirectFB_shape.c index f738605731c..3167a5bc161 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_shape.c +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_shape.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_shape.h b/vs/sdl2/src/video/directfb/SDL_DirectFB_shape.h index a34b5719200..70e97b941b0 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_shape.h +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_shape.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_video.c b/vs/sdl2/src/video/directfb/SDL_DirectFB_video.c index 931a7054124..b3110cbc334 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_video.c +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_video.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_video.h b/vs/sdl2/src/video/directfb/SDL_DirectFB_video.h index 958caefe68f..39d7b2a56aa 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_video.h +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_video.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_vulkan.c b/vs/sdl2/src/video/directfb/SDL_DirectFB_vulkan.c index 5dcd0219c40..24bacbb1434 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_vulkan.c +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_vulkan.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_vulkan.h b/vs/sdl2/src/video/directfb/SDL_DirectFB_vulkan.h index de042130b55..54e109de2b2 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_vulkan.h +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_vulkan.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_window.c b/vs/sdl2/src/video/directfb/SDL_DirectFB_window.c index fb9ce7b0b30..601a9f95eeb 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_window.c +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_window.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/directfb/SDL_DirectFB_window.h b/vs/sdl2/src/video/directfb/SDL_DirectFB_window.h index f736e1e30c1..8046b622142 100644 --- a/vs/sdl2/src/video/directfb/SDL_DirectFB_window.h +++ b/vs/sdl2/src/video/directfb/SDL_DirectFB_window.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/dummy/SDL_nullevents.c b/vs/sdl2/src/video/dummy/SDL_nullevents.c index bbe02e0cbfb..c961d197b2a 100644 --- a/vs/sdl2/src/video/dummy/SDL_nullevents.c +++ b/vs/sdl2/src/video/dummy/SDL_nullevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/dummy/SDL_nullevents_c.h b/vs/sdl2/src/video/dummy/SDL_nullevents_c.h index 14021c50f68..5e6730b3cbc 100644 --- a/vs/sdl2/src/video/dummy/SDL_nullevents_c.h +++ b/vs/sdl2/src/video/dummy/SDL_nullevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/dummy/SDL_nullframebuffer.c b/vs/sdl2/src/video/dummy/SDL_nullframebuffer.c index 22a9d278ab3..879b77484ef 100644 --- a/vs/sdl2/src/video/dummy/SDL_nullframebuffer.c +++ b/vs/sdl2/src/video/dummy/SDL_nullframebuffer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/dummy/SDL_nullframebuffer_c.h b/vs/sdl2/src/video/dummy/SDL_nullframebuffer_c.h index dea414e07ce..aeca720dbac 100644 --- a/vs/sdl2/src/video/dummy/SDL_nullframebuffer_c.h +++ b/vs/sdl2/src/video/dummy/SDL_nullframebuffer_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/dummy/SDL_nullvideo.c b/vs/sdl2/src/video/dummy/SDL_nullvideo.c index 930e9891215..b5c60bb0fff 100644 --- a/vs/sdl2/src/video/dummy/SDL_nullvideo.c +++ b/vs/sdl2/src/video/dummy/SDL_nullvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -131,7 +131,7 @@ VideoBootStrap DUMMY_evdev_bootstrap = { NULL /* no ShowMessageBox implementation */ }; void SDL_EVDEV_Init(void); -void SDL_EVDEV_Poll(); +void SDL_EVDEV_Poll(void); void SDL_EVDEV_Quit(void); static void DUMMY_EVDEV_Poll(_THIS) { diff --git a/vs/sdl2/src/video/dummy/SDL_nullvideo.h b/vs/sdl2/src/video/dummy/SDL_nullvideo.h index 84a18a9b25e..42927321c84 100644 --- a/vs/sdl2/src/video/dummy/SDL_nullvideo.h +++ b/vs/sdl2/src/video/dummy/SDL_nullvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/emscripten/SDL_emscriptenevents.c b/vs/sdl2/src/video/emscripten/SDL_emscriptenevents.c index 2017a6aee2b..9957c1a361f 100644 --- a/vs/sdl2/src/video/emscripten/SDL_emscriptenevents.c +++ b/vs/sdl2/src/video/emscripten/SDL_emscriptenevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -714,20 +714,24 @@ static EM_BOOL Emscripten_HandleWheel(int eventType, const EmscriptenWheelEvent SDL_WindowData *window_data = userData; float deltaY = wheelEvent->deltaY; + float deltaX = wheelEvent->deltaX; switch (wheelEvent->deltaMode) { case DOM_DELTA_PIXEL: deltaY /= 100; /* 100 pixels make up a step */ + deltaX /= 100; /* 100 pixels make up a step */ break; case DOM_DELTA_LINE: deltaY /= 3; /* 3 lines make up a step */ + deltaX /= 3; /* 3 lines make up a step */ break; case DOM_DELTA_PAGE: deltaY *= 80; /* A page makes up 80 steps */ + deltaX *= 80; /* A page makes up 80 steps */ break; } - SDL_SendMouseWheel(window_data->window, 0, (float)wheelEvent->deltaX, -deltaY, SDL_MOUSEWHEEL_NORMAL); + SDL_SendMouseWheel(window_data->window, 0, deltaX, -deltaY, SDL_MOUSEWHEEL_NORMAL); return SDL_GetEventState(SDL_MOUSEWHEEL) == SDL_ENABLE; } @@ -790,11 +794,25 @@ static EM_BOOL Emscripten_HandleTouch(int eventType, const EmscriptenTouchEvent return preventDefault; } +static SDL_bool IsFunctionKey(SDL_Scancode scancode) +{ + if (scancode >= SDL_SCANCODE_F1 && scancode <= SDL_SCANCODE_F12) { + return SDL_TRUE; + } + if (scancode >= SDL_SCANCODE_F13 && scancode <= SDL_SCANCODE_F24) { + return SDL_TRUE; + } + return SDL_FALSE; +} + +/* This is a great tool to see web keyboard events live: + * https://w3c.github.io/uievents/tools/key-event-viewer.html + */ static EM_BOOL Emscripten_HandleKey(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData) { const SDL_Keycode keycode = Emscripten_MapKeyCode(keyEvent); SDL_Scancode scancode = Emscripten_MapScanCode(keyEvent->code); - SDL_bool prevent_default = SDL_TRUE; + SDL_bool prevent_default = SDL_FALSE; SDL_bool is_nav_key = SDL_FALSE; if (scancode == SDL_SCANCODE_UNKNOWN) { @@ -807,7 +825,7 @@ static EM_BOOL Emscripten_HandleKey(int eventType, const EmscriptenKeyboardEvent } if (scancode != SDL_SCANCODE_UNKNOWN) { - SDL_SendKeyboardKeyAndKeycode(eventType == EMSCRIPTEN_EVENT_KEYDOWN ? SDL_PRESSED : SDL_RELEASED, scancode, keycode); + prevent_default = SDL_SendKeyboardKeyAndKeycode(eventType == EMSCRIPTEN_EVENT_KEYDOWN ? SDL_PRESSED : SDL_RELEASED, scancode, keycode); } /* if TEXTINPUT events are enabled we can't prevent keydown or we won't get keypress @@ -819,7 +837,7 @@ static EM_BOOL Emscripten_HandleKey(int eventType, const EmscriptenKeyboardEvent (scancode == SDL_SCANCODE_UP) || (scancode == SDL_SCANCODE_RIGHT) || (scancode == SDL_SCANCODE_DOWN) || - ((scancode >= SDL_SCANCODE_F1) && (scancode <= SDL_SCANCODE_F15)) || + IsFunctionKey(scancode) || keyEvent->ctrlKey) { is_nav_key = SDL_TRUE; } diff --git a/vs/sdl2/src/video/emscripten/SDL_emscriptenevents.h b/vs/sdl2/src/video/emscripten/SDL_emscriptenevents.h index 502236adeff..cb4bdf07fcd 100644 --- a/vs/sdl2/src/video/emscripten/SDL_emscriptenevents.h +++ b/vs/sdl2/src/video/emscripten/SDL_emscriptenevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/emscripten/SDL_emscriptenframebuffer.c b/vs/sdl2/src/video/emscripten/SDL_emscriptenframebuffer.c index 6a0e78fd43b..b87fb476fa1 100644 --- a/vs/sdl2/src/video/emscripten/SDL_emscriptenframebuffer.c +++ b/vs/sdl2/src/video/emscripten/SDL_emscriptenframebuffer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -79,7 +79,7 @@ int Emscripten_UpdateWindowFramebuffer(_THIS, SDL_Window *window, const SDL_Rect if (!Module['SDL2']) Module['SDL2'] = {}; var SDL2 = Module['SDL2']; if (SDL2.ctxCanvas !== Module['canvas']) { - SDL2.ctx = Module['createContext'](Module['canvas'], false, true); + SDL2.ctx = Browser.createContext(Module['canvas'], false, true); SDL2.ctxCanvas = Module['canvas']; } if (SDL2.w !== w || SDL2.h !== h || SDL2.imageCtx !== SDL2.ctx) { @@ -89,7 +89,7 @@ int Emscripten_UpdateWindowFramebuffer(_THIS, SDL_Window *window, const SDL_Rect SDL2.imageCtx = SDL2.ctx; } var data = SDL2.image.data; - var src = pixels >> 2; + var src = pixels / 4; var dst = 0; var num; if (typeof CanvasPixelArray !== 'undefined' && data instanceof CanvasPixelArray) { diff --git a/vs/sdl2/src/video/emscripten/SDL_emscriptenframebuffer.h b/vs/sdl2/src/video/emscripten/SDL_emscriptenframebuffer.h index fdf1c35ecc6..d022b4c1b86 100644 --- a/vs/sdl2/src/video/emscripten/SDL_emscriptenframebuffer.h +++ b/vs/sdl2/src/video/emscripten/SDL_emscriptenframebuffer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/emscripten/SDL_emscriptenmouse.c b/vs/sdl2/src/video/emscripten/SDL_emscriptenmouse.c index d189e5393cb..60071619188 100644 --- a/vs/sdl2/src/video/emscripten/SDL_emscriptenmouse.c +++ b/vs/sdl2/src/video/emscripten/SDL_emscriptenmouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -98,7 +98,7 @@ static SDL_Cursor *Emscripten_CreateCursor(SDL_Surface *surface, int hot_x, int var image = ctx.createImageData(w, h); var data = image.data; - var src = pixels >> 2; + var src = pixels / 4; var dst = 0; var num; if (typeof CanvasPixelArray !== 'undefined' && data instanceof CanvasPixelArray) { @@ -222,7 +222,7 @@ static int Emscripten_SetRelativeMouseMode(SDL_bool enabled) return -1; } -void Emscripten_InitMouse() +void Emscripten_InitMouse(void) { SDL_Mouse *mouse = SDL_GetMouse(); @@ -236,7 +236,7 @@ void Emscripten_InitMouse() SDL_SetDefaultCursor(Emscripten_CreateDefaultCursor()); } -void Emscripten_FiniMouse() +void Emscripten_FiniMouse(void) { } diff --git a/vs/sdl2/src/video/emscripten/SDL_emscriptenmouse.h b/vs/sdl2/src/video/emscripten/SDL_emscriptenmouse.h index 10cd24e3b33..7ca49783bb3 100644 --- a/vs/sdl2/src/video/emscripten/SDL_emscriptenmouse.h +++ b/vs/sdl2/src/video/emscripten/SDL_emscriptenmouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/emscripten/SDL_emscriptenopengles.c b/vs/sdl2/src/video/emscripten/SDL_emscriptenopengles.c index baf9eb7ea5a..b78c1ea1938 100644 --- a/vs/sdl2/src/video/emscripten/SDL_emscriptenopengles.c +++ b/vs/sdl2/src/video/emscripten/SDL_emscriptenopengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/emscripten/SDL_emscriptenopengles.h b/vs/sdl2/src/video/emscripten/SDL_emscriptenopengles.h index 184d0f2a4b4..cea5d272948 100644 --- a/vs/sdl2/src/video/emscripten/SDL_emscriptenopengles.h +++ b/vs/sdl2/src/video/emscripten/SDL_emscriptenopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/emscripten/SDL_emscriptenvideo.c b/vs/sdl2/src/video/emscripten/SDL_emscriptenvideo.c index 6319f92714f..d32dd2f2053 100644 --- a/vs/sdl2/src/video/emscripten/SDL_emscriptenvideo.c +++ b/vs/sdl2/src/video/emscripten/SDL_emscriptenvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/emscripten/SDL_emscriptenvideo.h b/vs/sdl2/src/video/emscripten/SDL_emscriptenvideo.h index 2cbb6716c84..2ec0d5185c7 100644 --- a/vs/sdl2/src/video/emscripten/SDL_emscriptenvideo.h +++ b/vs/sdl2/src/video/emscripten/SDL_emscriptenvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_BApp.h b/vs/sdl2/src/video/haiku/SDL_BApp.h index 284445d986d..60272193faa 100644 --- a/vs/sdl2/src/video/haiku/SDL_BApp.h +++ b/vs/sdl2/src/video/haiku/SDL_BApp.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_BWin.h b/vs/sdl2/src/video/haiku/SDL_BWin.h index f1ad1ea2ff3..4d4d4af889e 100644 --- a/vs/sdl2/src/video/haiku/SDL_BWin.h +++ b/vs/sdl2/src/video/haiku/SDL_BWin.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bclipboard.cc b/vs/sdl2/src/video/haiku/SDL_bclipboard.cc index 11e79f33626..658cd5fed45 100644 --- a/vs/sdl2/src/video/haiku/SDL_bclipboard.cc +++ b/vs/sdl2/src/video/haiku/SDL_bclipboard.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bclipboard.h b/vs/sdl2/src/video/haiku/SDL_bclipboard.h index 89e9e906513..801d5d3d989 100644 --- a/vs/sdl2/src/video/haiku/SDL_bclipboard.h +++ b/vs/sdl2/src/video/haiku/SDL_bclipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bevents.cc b/vs/sdl2/src/video/haiku/SDL_bevents.cc index 45727a66a8a..cd9f4185e18 100644 --- a/vs/sdl2/src/video/haiku/SDL_bevents.cc +++ b/vs/sdl2/src/video/haiku/SDL_bevents.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bevents.h b/vs/sdl2/src/video/haiku/SDL_bevents.h index 1afd33ad055..ac5b9b0c72b 100644 --- a/vs/sdl2/src/video/haiku/SDL_bevents.h +++ b/vs/sdl2/src/video/haiku/SDL_bevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bframebuffer.cc b/vs/sdl2/src/video/haiku/SDL_bframebuffer.cc index 1961cea3b8d..71e7689a878 100644 --- a/vs/sdl2/src/video/haiku/SDL_bframebuffer.cc +++ b/vs/sdl2/src/video/haiku/SDL_bframebuffer.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bframebuffer.h b/vs/sdl2/src/video/haiku/SDL_bframebuffer.h index ce3649c164c..0b2a16580c1 100644 --- a/vs/sdl2/src/video/haiku/SDL_bframebuffer.h +++ b/vs/sdl2/src/video/haiku/SDL_bframebuffer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bkeyboard.cc b/vs/sdl2/src/video/haiku/SDL_bkeyboard.cc index b9499edb739..84dd4fdd7bc 100644 --- a/vs/sdl2/src/video/haiku/SDL_bkeyboard.cc +++ b/vs/sdl2/src/video/haiku/SDL_bkeyboard.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bkeyboard.h b/vs/sdl2/src/video/haiku/SDL_bkeyboard.h index 46fd9d6b35c..6fdc9cf4499 100644 --- a/vs/sdl2/src/video/haiku/SDL_bkeyboard.h +++ b/vs/sdl2/src/video/haiku/SDL_bkeyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bmessagebox.cc b/vs/sdl2/src/video/haiku/SDL_bmessagebox.cc index d0c43e282c4..d59c7a564ae 100644 --- a/vs/sdl2/src/video/haiku/SDL_bmessagebox.cc +++ b/vs/sdl2/src/video/haiku/SDL_bmessagebox.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga Copyright (C) 2018-2019 EXL This software is provided 'as-is', without any express or implied diff --git a/vs/sdl2/src/video/haiku/SDL_bmessagebox.h b/vs/sdl2/src/video/haiku/SDL_bmessagebox.h index 822d7c230da..f61ecad6913 100644 --- a/vs/sdl2/src/video/haiku/SDL_bmessagebox.h +++ b/vs/sdl2/src/video/haiku/SDL_bmessagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga Copyright (C) 2018-2019 EXL This software is provided 'as-is', without any express or implied diff --git a/vs/sdl2/src/video/haiku/SDL_bmodes.cc b/vs/sdl2/src/video/haiku/SDL_bmodes.cc index 6a162f614dd..77b91236efb 100644 --- a/vs/sdl2/src/video/haiku/SDL_bmodes.cc +++ b/vs/sdl2/src/video/haiku/SDL_bmodes.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bmodes.h b/vs/sdl2/src/video/haiku/SDL_bmodes.h index e0d6f04c55c..b0d956ed04a 100644 --- a/vs/sdl2/src/video/haiku/SDL_bmodes.h +++ b/vs/sdl2/src/video/haiku/SDL_bmodes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bopengl.cc b/vs/sdl2/src/video/haiku/SDL_bopengl.cc index d34d5923bad..eada4c0025c 100644 --- a/vs/sdl2/src/video/haiku/SDL_bopengl.cc +++ b/vs/sdl2/src/video/haiku/SDL_bopengl.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bopengl.h b/vs/sdl2/src/video/haiku/SDL_bopengl.h index 0905b7c962c..b3bd6c89401 100644 --- a/vs/sdl2/src/video/haiku/SDL_bopengl.h +++ b/vs/sdl2/src/video/haiku/SDL_bopengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bvideo.cc b/vs/sdl2/src/video/haiku/SDL_bvideo.cc index aac091afc79..d5412893432 100644 --- a/vs/sdl2/src/video/haiku/SDL_bvideo.cc +++ b/vs/sdl2/src/video/haiku/SDL_bvideo.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bvideo.h b/vs/sdl2/src/video/haiku/SDL_bvideo.h index 6c420480cb5..21a6797df49 100644 --- a/vs/sdl2/src/video/haiku/SDL_bvideo.h +++ b/vs/sdl2/src/video/haiku/SDL_bvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bwindow.cc b/vs/sdl2/src/video/haiku/SDL_bwindow.cc index 38863abfc1d..0ca751aca0c 100644 --- a/vs/sdl2/src/video/haiku/SDL_bwindow.cc +++ b/vs/sdl2/src/video/haiku/SDL_bwindow.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/haiku/SDL_bwindow.h b/vs/sdl2/src/video/haiku/SDL_bwindow.h index cf0bdfda1cc..fa42c356ad9 100644 --- a/vs/sdl2/src/video/haiku/SDL_bwindow.h +++ b/vs/sdl2/src/video/haiku/SDL_bwindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmdyn.c b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmdyn.c index 750babbcdee..294739405dc 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmdyn.c +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmdyn.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -47,7 +47,7 @@ static kmsdrmdynlib kmsdrmlibs[] = { { NULL, SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC } }; -static void *KMSDRM_GetSym(const char *fnname, int *pHasModule) +static void *KMSDRM_GetSym(const char *fnname, int *pHasModule, SDL_bool required) { int i; void *fn = NULL; @@ -67,7 +67,7 @@ static void *KMSDRM_GetSym(const char *fnname, int *pHasModule) SDL_Log("KMSDRM: Symbol '%s' NOT FOUND!\n", fnname); #endif - if (!fn) { + if (!fn && required) { *pHasModule = 0; /* kill this module. */ } @@ -80,6 +80,7 @@ static void *KMSDRM_GetSym(const char *fnname, int *pHasModule) #define SDL_KMSDRM_MODULE(modname) int SDL_KMSDRM_HAVE_##modname = 0; #define SDL_KMSDRM_SYM(rc, fn, params) SDL_DYNKMSDRMFN_##fn KMSDRM_##fn = NULL; #define SDL_KMSDRM_SYM_CONST(type, name) SDL_DYNKMSDRMCONST_##name KMSDRM_##name = NULL; +#define SDL_KMSDRM_SYM_OPT(rc, fn, params) SDL_DYNKMSDRMFN_##fn KMSDRM_##fn = NULL; #include "SDL_kmsdrmsym.h" static int kmsdrm_load_refcount = 0; @@ -97,6 +98,7 @@ void SDL_KMSDRM_UnloadSymbols(void) #define SDL_KMSDRM_MODULE(modname) SDL_KMSDRM_HAVE_##modname = 0; #define SDL_KMSDRM_SYM(rc, fn, params) KMSDRM_##fn = NULL; #define SDL_KMSDRM_SYM_CONST(type, name) KMSDRM_##name = NULL; +#define SDL_KMSDRM_SYM_OPT(rc, fn, params) KMSDRM_##fn = NULL; #include "SDL_kmsdrmsym.h" #ifdef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC @@ -130,9 +132,10 @@ int SDL_KMSDRM_LoadSymbols(void) #define SDL_KMSDRM_MODULE(modname) SDL_KMSDRM_HAVE_##modname = 1; /* default yes */ #include "SDL_kmsdrmsym.h" -#define SDL_KMSDRM_MODULE(modname) thismod = &SDL_KMSDRM_HAVE_##modname; -#define SDL_KMSDRM_SYM(rc, fn, params) KMSDRM_##fn = (SDL_DYNKMSDRMFN_##fn)KMSDRM_GetSym(#fn, thismod); -#define SDL_KMSDRM_SYM_CONST(type, name) KMSDRM_##name = *(SDL_DYNKMSDRMCONST_##name *)KMSDRM_GetSym(#name, thismod); +#define SDL_KMSDRM_MODULE(modname) thismod = &SDL_KMSDRM_HAVE_##modname; +#define SDL_KMSDRM_SYM(rc, fn, params) KMSDRM_##fn = (SDL_DYNKMSDRMFN_##fn)KMSDRM_GetSym(#fn, thismod, SDL_TRUE); +#define SDL_KMSDRM_SYM_CONST(type, name) KMSDRM_##name = *(SDL_DYNKMSDRMCONST_##name *)KMSDRM_GetSym(#name, thismod, SDL_TRUE); +#define SDL_KMSDRM_SYM_OPT(rc, fn, params) KMSDRM_##fn = (SDL_DYNKMSDRMFN_##fn)KMSDRM_GetSym(#fn, thismod, SDL_FALSE); #include "SDL_kmsdrmsym.h" if ((SDL_KMSDRM_HAVE_LIBDRM) && (SDL_KMSDRM_HAVE_GBM)) { @@ -149,6 +152,7 @@ int SDL_KMSDRM_LoadSymbols(void) #define SDL_KMSDRM_MODULE(modname) SDL_KMSDRM_HAVE_##modname = 1; /* default yes */ #define SDL_KMSDRM_SYM(rc, fn, params) KMSDRM_##fn = fn; #define SDL_KMSDRM_SYM_CONST(type, name) KMSDRM_##name = name; +#define SDL_KMSDRM_SYM_OPT(rc, fn, params) KMSDRM_##fn = fn; #include "SDL_kmsdrmsym.h" #endif diff --git a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmdyn.h b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmdyn.h index e6da337921a..63f39a64c95 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmdyn.h +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmdyn.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -42,6 +42,9 @@ void SDL_KMSDRM_UnloadSymbols(void); #define SDL_KMSDRM_SYM_CONST(type, name) \ typedef type SDL_DYNKMSDRMCONST_##name; \ extern SDL_DYNKMSDRMCONST_##name KMSDRM_##name; +#define SDL_KMSDRM_SYM_OPT(rc, fn, params) \ + typedef rc(*SDL_DYNKMSDRMFN_##fn) params; \ + extern SDL_DYNKMSDRMFN_##fn KMSDRM_##fn; #include "SDL_kmsdrmsym.h" #ifdef __cplusplus diff --git a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmevents.c b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmevents.c index a52f1b6b167..39216ed16c6 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmevents.c +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmevents.h b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmevents.h index 74625e34fa5..b9c99fcee02 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmevents.h +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmmouse.c b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmmouse.c index ec01004efc2..c589476632c 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmmouse.c +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmmouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmmouse.h b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmmouse.h index 0485abfb3e2..b060dd3fb49 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmmouse.h +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmmouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmopengles.c b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmopengles.c index 9b34d689615..311586278b6 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmopengles.c +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmopengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -194,7 +194,7 @@ int KMSDRM_GLES_SwapWindow(_THIS, SDL_Window *window) we have waited here, there won't be a pending pageflip so the WaitPageflip at the beginning of this function will be a no-op. Just leave it here and don't worry. - Run your SDL2 program with "SDL_KMSDRM_DOUBLE_BUFFER=1 " + Run your SDL2 program with "SDL_VIDEO_DOUBLE_BUFFER=1 " to enable this. */ if (windata->double_buffer) { if (!KMSDRM_WaitPageflip(_this, windata)) { diff --git a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmopengles.h b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmopengles.h index 63e548a335f..9307066e3c9 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmopengles.h +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmsym.h b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmsym.h index d1e856f4b77..b0be627f1b5 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmsym.h +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmsym.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -33,6 +33,10 @@ #define SDL_KMSDRM_SYM_CONST(type, name) #endif +#ifndef SDL_KMSDRM_SYM_OPT +#define SDL_KMSDRM_SYM_OPT(rc,fn,params) +#endif + SDL_KMSDRM_MODULE(LIBDRM) SDL_KMSDRM_SYM(void,drmModeFreeResources,(drmModeResPtr ptr)) @@ -49,11 +53,16 @@ SDL_KMSDRM_SYM(int,drmModeAddFB,(int fd, uint32_t width, uint32_t height, uint8_ uint8_t bpp, uint32_t pitch, uint32_t bo_handle, uint32_t *buf_id)) -SDL_KMSDRM_SYM(int,drmModeAddFB2,(int fd, uint32_t width, uint32_t height, +SDL_KMSDRM_SYM_OPT(int,drmModeAddFB2,(int fd, uint32_t width, uint32_t height, uint32_t pixel_format, const uint32_t bo_handles[4], const uint32_t pitches[4], const uint32_t offsets[4], uint32_t *buf_id, uint32_t flags)) +SDL_KMSDRM_SYM_OPT(int,drmModeAddFB2WithModifiers,(int fd, uint32_t width, + uint32_t height, uint32_t pixel_format, const uint32_t bo_handles[4], + const uint32_t pitches[4], const uint32_t offsets[4], + const uint64_t modifier[4], uint32_t *buf_id, uint32_t flags)) + SDL_KMSDRM_SYM(int,drmModeRmFB,(int fd, uint32_t bufferId)) SDL_KMSDRM_SYM(drmModeFBPtr,drmModeGetFB,(int fd, uint32_t buf)) SDL_KMSDRM_SYM(drmModeCrtcPtr,drmModeGetCrtc,(int fd, uint32_t crtcId)) @@ -124,10 +133,16 @@ SDL_KMSDRM_SYM(void,gbm_surface_destroy,(struct gbm_surface *surf)) SDL_KMSDRM_SYM(struct gbm_bo *,gbm_surface_lock_front_buffer,(struct gbm_surface *surf)) SDL_KMSDRM_SYM(void,gbm_surface_release_buffer,(struct gbm_surface *surf, struct gbm_bo *bo)) +SDL_KMSDRM_SYM_OPT(uint64_t,gbm_bo_get_modifier,(struct gbm_bo *bo)) +SDL_KMSDRM_SYM_OPT(int,gbm_bo_get_plane_count,(struct gbm_bo *bo)) +SDL_KMSDRM_SYM_OPT(uint32_t,gbm_bo_get_offset,(struct gbm_bo *bo, int plane)) +SDL_KMSDRM_SYM_OPT(uint32_t,gbm_bo_get_stride_for_plane,(struct gbm_bo *bo, int plane)) +SDL_KMSDRM_SYM_OPT(union gbm_bo_handle,gbm_bo_get_handle_for_plane,(struct gbm_bo *bo, int plane)) #undef SDL_KMSDRM_MODULE #undef SDL_KMSDRM_SYM #undef SDL_KMSDRM_SYM_CONST +#undef SDL_KMSDRM_SYM_OPT /* *INDENT-ON* */ /* clang-format on */ diff --git a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvideo.c b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvideo.c index bdcd2207ade..8f080c20257 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvideo.c +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -96,8 +96,8 @@ static int get_driindex(void) } SDL_strlcpy(device + kmsdrm_dri_pathsize, kmsdrm_dri_devname, - sizeof(device) - kmsdrm_dri_devnamesize); - while((res = readdir(folder)) != NULL) { + sizeof(device) - kmsdrm_dri_pathsize); + while((res = readdir(folder)) != NULL && available < 0) { if (SDL_memcmp(res->d_name, kmsdrm_dri_devname, kmsdrm_dri_devnamesize) == 0) { SDL_strlcpy(device + kmsdrm_dri_pathsize + kmsdrm_dri_devnamesize, @@ -123,7 +123,7 @@ static int get_driindex(void) resources->count_encoders > 0 && resources->count_crtcs > 0) { available = -ENOENT; - for (i = 0; i < resources->count_connectors; i++) { + for (i = 0; i < resources->count_connectors && available < 0; i++) { drmModeConnector *conn = KMSDRM_drmModeGetConnector( drm_fd, resources->connectors[i]); @@ -134,20 +134,21 @@ static int get_driindex(void) if (conn->connection == DRM_MODE_CONNECTED && conn->count_modes) { + SDL_bool access_denied = SDL_FALSE; if (SDL_GetHintBoolean( SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER, SDL_TRUE)) { /* Skip this device if we can't obtain * DRM master */ KMSDRM_drmSetMaster(drm_fd); - if (KMSDRM_drmAuthMagic(drm_fd, 0) == - -EACCES) { - continue; + if (KMSDRM_drmAuthMagic(drm_fd, 0) == -EACCES) { + access_denied = SDL_TRUE; } } - available = devindex; - break; + if (!access_denied) { + available = devindex; + } } KMSDRM_drmModeFreeConnector(conn); @@ -158,11 +159,10 @@ static int get_driindex(void) SDL_KMSDRM_UnloadSymbols(); } close(drm_fd); + } else { + SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, + "Failed to open KMSDRM device %s, errno: %d\n", device, errno); } - - SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, - "Failed to open KMSDRM device %s, errno: %d\n", device, - errno); } } @@ -336,8 +336,10 @@ KMSDRM_FBInfo *KMSDRM_FBFromBO(_THIS, struct gbm_bo *bo) { SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata); unsigned w, h; - int ret; - Uint32 stride, handle; + int rc = -1; + int num_planes = 0; + uint32_t format, strides[4] = { 0 }, handles[4] = { 0 }, offsets[4] = { 0 }, flags = 0; + uint64_t modifiers[4] = { 0 }; /* Check for an existing framebuffer */ KMSDRM_FBInfo *fb_info = (KMSDRM_FBInfo *)KMSDRM_gbm_bo_get_user_data(bo); @@ -357,20 +359,48 @@ KMSDRM_FBInfo *KMSDRM_FBFromBO(_THIS, struct gbm_bo *bo) fb_info->drm_fd = viddata->drm_fd; - /* Create framebuffer object for the buffer */ + /* Create framebuffer object for the buffer using the modifiers requested by GBM. + Use of the modifiers is necessary on some platforms. */ w = KMSDRM_gbm_bo_get_width(bo); h = KMSDRM_gbm_bo_get_height(bo); - stride = KMSDRM_gbm_bo_get_stride(bo); - handle = KMSDRM_gbm_bo_get_handle(bo).u32; - ret = KMSDRM_drmModeAddFB(viddata->drm_fd, w, h, 24, 32, stride, handle, - &fb_info->fb_id); - if (ret) { + format = KMSDRM_gbm_bo_get_format(bo); + + if (KMSDRM_drmModeAddFB2WithModifiers && + KMSDRM_gbm_bo_get_modifier && + KMSDRM_gbm_bo_get_plane_count && + KMSDRM_gbm_bo_get_offset && + KMSDRM_gbm_bo_get_stride_for_plane && + KMSDRM_gbm_bo_get_handle_for_plane) { + + modifiers[0] = KMSDRM_gbm_bo_get_modifier(bo); + num_planes = KMSDRM_gbm_bo_get_plane_count(bo); + for (int i = 0; i < num_planes; i++) { + strides[i] = KMSDRM_gbm_bo_get_stride_for_plane(bo, i); + handles[i] = KMSDRM_gbm_bo_get_handle_for_plane(bo, i).u32; + offsets[i] = KMSDRM_gbm_bo_get_offset(bo, i); + modifiers[i] = modifiers[0]; + } + + if (modifiers[0] && modifiers[0] != DRM_FORMAT_MOD_INVALID) { + flags = DRM_MODE_FB_MODIFIERS; + } + + rc = KMSDRM_drmModeAddFB2WithModifiers(viddata->drm_fd, w, h, format, handles, strides, offsets, modifiers, &fb_info->fb_id, flags); + } + + if (rc < 0) { + strides[0] = KMSDRM_gbm_bo_get_stride(bo); + handles[0] = KMSDRM_gbm_bo_get_handle(bo).u32; + rc = KMSDRM_drmModeAddFB(viddata->drm_fd, w, h, 24, 32, strides[0], handles[0], &fb_info->fb_id); + } + + if (rc < 0) { SDL_free(fb_info); return NULL; } - SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "New DRM FB (%u): %ux%u, stride %u from BO %p", - fb_info->fb_id, w, h, stride, (void *)bo); + SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "New DRM FB (%u): %ux%u, from BO %p", + fb_info->fb_id, w, h, (void *)bo); /* Associate our DRM framebuffer with this buffer object */ KMSDRM_gbm_bo_set_user_data(bo, fb_info, KMSDRM_FBDestroyCallback); @@ -500,10 +530,23 @@ static drmModeModeInfo *KMSDRM_GetClosestDisplayMode(SDL_VideoDisplay *display, /* _this is a SDL_VideoDevice * */ /*****************************************************************************/ +static SDL_bool KMSDRM_DropMaster(_THIS) +{ + SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata); + + /* Check if we have DRM master to begin with */ + if (KMSDRM_drmAuthMagic(viddata->drm_fd, 0) == -EACCES) { + /* Nope, nothing to do then */ + return SDL_TRUE; + } + + return KMSDRM_drmDropMaster(viddata->drm_fd) < 0 ? SDL_FALSE : SDL_TRUE; +} + /* Deinitializes the driverdata of the SDL Displays in the SDL display list. */ static void KMSDRM_DeinitDisplays(_THIS) { - + SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata); SDL_DisplayData *dispdata; int num_displays, i; @@ -527,6 +570,11 @@ static void KMSDRM_DeinitDisplays(_THIS) dispdata->crtc = NULL; } } + + if (viddata->drm_fd >= 0) { + close(viddata->drm_fd); + viddata->drm_fd = -1; + } } static uint32_t KMSDRM_CrtcGetPropId(uint32_t drm_fd, @@ -882,8 +930,6 @@ static void KMSDRM_AddDisplay(_THIS, drmModeConnector *connector, drmModeRes *re /* Initializes the list of SDL displays: we build a new display for each connecter connector we find. - Inoffeensive for VK compatibility, except we must leave the drm_fd - closed when we get to the end of this function. This is to be called early, in VideoInit(), because it gets us the videomode information, which SDL needs immediately after VideoInit(). */ static int KMSDRM_InitDisplays(_THIS) @@ -956,10 +1002,13 @@ static int KMSDRM_InitDisplays(_THIS) /* Block for Vulkan compatibility. */ /***********************************/ - /* THIS IS FOR VULKAN! Leave the FD closed, so VK can work. - Will reopen this in CreateWindow, but only if requested a non-VK window. */ - close(viddata->drm_fd); - viddata->drm_fd = -1; + /* Vulkan requires DRM master on its own FD to work, so try to drop master + on our FD. This will only work without root on kernels v5.8 and later. + If it doesn't work, just close the FD and we'll reopen it later. */ + if (!KMSDRM_DropMaster(_this)) { + close(viddata->drm_fd); + viddata->drm_fd = -1; + } cleanup: if (resources) { @@ -987,10 +1036,15 @@ static int KMSDRM_GBMInit(_THIS, SDL_DisplayData *dispdata) SDL_VideoData *viddata = (SDL_VideoData *)_this->driverdata; int ret = 0; - /* Reopen the FD! */ - viddata->drm_fd = open(viddata->devpath, O_RDWR | O_CLOEXEC); + /* Reopen the FD if we weren't able to drop master on the original one */ + if (viddata->drm_fd < 0) { + viddata->drm_fd = open(viddata->devpath, O_RDWR | O_CLOEXEC); + if (viddata->drm_fd < 0) { + return SDL_SetError("Could not reopen %s", viddata->devpath); + } + } - /* Set the FD we just opened as current DRM master. */ + /* Set the FD as current DRM master. */ KMSDRM_drmSetMaster(viddata->drm_fd); /* Create the GBM device. */ @@ -1016,8 +1070,9 @@ static void KMSDRM_GBMDeinit(_THIS, SDL_DisplayData *dispdata) viddata->gbm_dev = NULL; } - /* Finally close DRM FD. May be reopen on next non-vulkan window creation. */ - if (viddata->drm_fd >= 0) { + /* Finally drop DRM master if possible, otherwise close DRM FD. + May be reopened on next non-vulkan window creation. */ + if (viddata->drm_fd >= 0 && !KMSDRM_DropMaster(_this)) { close(viddata->drm_fd); viddata->drm_fd = -1; } @@ -1451,6 +1506,12 @@ int KMSDRM_CreateWindow(_THIS, SDL_Window *window) windata->viddata = viddata; window->driverdata = windata; + /* Do we want a double buffering scheme to get low video lag? */ + windata->double_buffer = SDL_FALSE; + if (SDL_GetHintBoolean(SDL_HINT_VIDEO_DOUBLE_BUFFER, SDL_FALSE)) { + windata->double_buffer = SDL_TRUE; + } + if (!is_vulkan && !vulkan_mode) { /* NON-Vulkan block. */ /* Maybe you didn't ask for an OPENGL window, but that's what you will get. @@ -1556,7 +1617,12 @@ int KMSDRM_CreateWindow(_THIS, SDL_Window *window) SDL_SetKeyboardFocus(window); /* Tell the app that the window has moved to top-left. */ - SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MOVED, 0, 0); + { + SDL_Rect display_bounds; + SDL_zero(display_bounds); + SDL_GetDisplayBounds(SDL_GetWindowDisplayIndex(window), &display_bounds); + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MOVED, display_bounds.x, display_bounds.y); + } /* Allocated windata will be freed in KMSDRM_DestroyWindow, and KMSDRM_DestroyWindow() will be called by SDL_CreateWindow() diff --git a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvideo.h b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvideo.h index c9222f81a55..16431435d6f 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvideo.h +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -33,6 +33,45 @@ #include #include +#ifndef DRM_FORMAT_MOD_INVALID +#define DRM_FORMAT_MOD_INVALID 0x00ffffffffffffffULL +#endif + +#ifndef DRM_MODE_FB_MODIFIERS +#define DRM_MODE_FB_MODIFIERS 2 +#endif + +#ifndef DRM_MODE_PAGE_FLIP_ASYNC +#define DRM_MODE_PAGE_FLIP_ASYNC 2 +#endif + +#ifndef DRM_MODE_OBJECT_CONNECTOR +#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0 +#endif + +#ifndef DRM_MODE_OBJECT_CRTC +#define DRM_MODE_OBJECT_CRTC 0xcccccccc +#endif + +#ifndef DRM_CAP_ASYNC_PAGE_FLIP +#define DRM_CAP_ASYNC_PAGE_FLIP 7 +#endif + +#ifndef DRM_CAP_CURSOR_WIDTH +#define DRM_CAP_CURSOR_WIDTH 8 +#endif + +#ifndef DRM_CAP_CURSOR_HEIGHT +#define DRM_CAP_CURSOR_HEIGHT 9 +#endif + +#ifndef GBM_FORMAT_ARGB8888 +#define GBM_FORMAT_ARGB8888 ((uint32_t)('A') | ((uint32_t)('R') << 8) | ((uint32_t)('2') << 16) | ((uint32_t)('4') << 24)) +#define GBM_BO_USE_CURSOR (1 << 1) +#define GBM_BO_USE_WRITE (1 << 3) +#define GBM_BO_USE_LINEAR (1 << 4) +#endif + typedef struct SDL_VideoData { int devindex; /* device index that was passed on creation */ diff --git a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvulkan.c b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvulkan.c index b5dc7b802ff..5190b7721d1 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvulkan.c +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvulkan.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvulkan.h b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvulkan.h index 01a582aaa1d..1c2a48e6ce6 100644 --- a/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvulkan.h +++ b/vs/sdl2/src/video/kmsdrm/SDL_kmsdrmvulkan.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/n3ds/SDL_n3dsevents.c b/vs/sdl2/src/video/n3ds/SDL_n3dsevents.c index c45bb808957..5c6b9ce050e 100644 --- a/vs/sdl2/src/video/n3ds/SDL_n3dsevents.c +++ b/vs/sdl2/src/video/n3ds/SDL_n3dsevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -31,7 +31,7 @@ void N3DS_PumpEvents(_THIS) { hidScanInput(); - N3DS_PollTouch(); + N3DS_PollTouch(_this); if (!aptMainLoop()) { SDL_Event ev; diff --git a/vs/sdl2/src/video/n3ds/SDL_n3dsevents_c.h b/vs/sdl2/src/video/n3ds/SDL_n3dsevents_c.h index 2e75951fd99..f05cc7c7460 100644 --- a/vs/sdl2/src/video/n3ds/SDL_n3dsevents_c.h +++ b/vs/sdl2/src/video/n3ds/SDL_n3dsevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/n3ds/SDL_n3dsframebuffer.c b/vs/sdl2/src/video/n3ds/SDL_n3dsframebuffer.c index 784c2df44bc..d093b442275 100644 --- a/vs/sdl2/src/video/n3ds/SDL_n3dsframebuffer.c +++ b/vs/sdl2/src/video/n3ds/SDL_n3dsframebuffer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -33,9 +33,9 @@ typedef struct int width, height; } Dimensions; -SDL_FORCE_INLINE void FreePreviousWindowFramebuffer(SDL_Window *window); -SDL_FORCE_INLINE SDL_Surface *CreateNewWindowFramebuffer(SDL_Window *window); -SDL_FORCE_INLINE void CopyFramebuffertoN3DS(u32 *dest, const Dimensions dest_dim, const u32 *source, const Dimensions source_dim); +SDL_FORCE_INLINE void CopyFramebuffertoN3DS_16(u16 *dest, const Dimensions dest_dim, const u16 *source, const Dimensions source_dim); +SDL_FORCE_INLINE void CopyFramebuffertoN3DS_24(u8 *dest, const Dimensions dest_dim, const u8 *source, const Dimensions source_dim); +SDL_FORCE_INLINE void CopyFramebuffertoN3DS_32(u32 *dest, const Dimensions dest_dim, const u32 *source, const Dimensions source_dim); SDL_FORCE_INLINE int GetDestOffset(int x, int y, int dest_width); SDL_FORCE_INLINE int GetSourceOffset(int x, int y, int source_width); SDL_FORCE_INLINE void FlushN3DSBuffer(const void *buffer, u32 bufsize, gfxScreen_t screen); @@ -43,44 +43,32 @@ SDL_FORCE_INLINE void FlushN3DSBuffer(const void *buffer, u32 bufsize, gfxScreen int SDL_N3DS_CreateWindowFramebuffer(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch) { SDL_Surface *framebuffer; + SDL_DisplayMode mode; + int w, h; - FreePreviousWindowFramebuffer(window); - framebuffer = CreateNewWindowFramebuffer(window); + SDL_N3DS_DestroyWindowFramebuffer(_this, window); + + SDL_GetCurrentDisplayMode(SDL_GetWindowDisplayIndex(window), &mode); + SDL_GetWindowSizeInPixels(window, &w, &h); + framebuffer = SDL_CreateRGBSurfaceWithFormat(0, w, h, SDL_BYTESPERPIXEL(mode.format), mode.format); if (!framebuffer) { return SDL_OutOfMemory(); } SDL_SetWindowData(window, N3DS_SURFACE, framebuffer); - *format = FRAMEBUFFER_FORMAT; + *format = mode.format; *pixels = framebuffer->pixels; *pitch = framebuffer->pitch; return 0; } -SDL_FORCE_INLINE void -FreePreviousWindowFramebuffer(SDL_Window *window) -{ - SDL_Surface *surface = (SDL_Surface *)SDL_GetWindowData(window, N3DS_SURFACE); - SDL_FreeSurface(surface); -} - -SDL_FORCE_INLINE SDL_Surface * -CreateNewWindowFramebuffer(SDL_Window *window) -{ - int w, h, bpp; - Uint32 Rmask, Gmask, Bmask, Amask; - SDL_PixelFormatEnumToMasks(FRAMEBUFFER_FORMAT, &bpp, &Rmask, &Gmask, &Bmask, &Amask); - SDL_GetWindowSizeInPixels(window, &w, &h); - return SDL_CreateRGBSurface(0, w, h, bpp, Rmask, Gmask, Bmask, Amask); -} - int SDL_N3DS_UpdateWindowFramebuffer(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects) { SDL_WindowData *drv_data = (SDL_WindowData *)window->driverdata; SDL_Surface *surface; u16 width, height; - u32 *framebuffer; + void *framebuffer; u32 bufsize; surface = (SDL_Surface *)SDL_GetWindowData(window, N3DS_SURFACE); @@ -89,27 +77,63 @@ int SDL_N3DS_UpdateWindowFramebuffer(_THIS, SDL_Window *window, const SDL_Rect * } /* Get the N3DS internal framebuffer and its size */ - framebuffer = (u32 *)gfxGetFramebuffer(drv_data->screen, GFX_LEFT, &width, &height); + framebuffer = gfxGetFramebuffer(drv_data->screen, GFX_LEFT, &width, &height); bufsize = width * height * 4; - CopyFramebuffertoN3DS(framebuffer, (Dimensions){ width, height }, - surface->pixels, (Dimensions){ surface->w, surface->h }); + if (surface->format->BytesPerPixel == 2) + CopyFramebuffertoN3DS_16(framebuffer, (Dimensions){ width, height }, + surface->pixels, (Dimensions){ surface->w, surface->h }); + else if (surface->format->BytesPerPixel == 3) + CopyFramebuffertoN3DS_24(framebuffer, (Dimensions){ width, height }, + surface->pixels, (Dimensions){ surface->w, surface->h }); + else + CopyFramebuffertoN3DS_32(framebuffer, (Dimensions){ width, height }, + surface->pixels, (Dimensions){ surface->w, surface->h }); FlushN3DSBuffer(framebuffer, bufsize, drv_data->screen); return 0; } SDL_FORCE_INLINE void -CopyFramebuffertoN3DS(u32 *dest, const Dimensions dest_dim, const u32 *source, const Dimensions source_dim) +CopyFramebuffertoN3DS_16(u16 *dest, const Dimensions dest_dim, const u16 *source, const Dimensions source_dim) +{ + int rows = SDL_min(dest_dim.width, source_dim.height); + int cols = SDL_min(dest_dim.height, source_dim.width); + for (int y = 0; y < rows; ++y) { + for (int x = 0; x < cols; ++x) { + const u16 *s = source + GetSourceOffset(x, y, source_dim.width); + u16 *d = dest + GetDestOffset(x, y, dest_dim.width); + *d = *s; + } + } +} + +SDL_FORCE_INLINE void +CopyFramebuffertoN3DS_24(u8 *dest, const Dimensions dest_dim, const u8 *source, const Dimensions source_dim) +{ + int rows = SDL_min(dest_dim.width, source_dim.height); + int cols = SDL_min(dest_dim.height, source_dim.width); + for (int y = 0; y < rows; ++y) { + for (int x = 0; x < cols; ++x) { + const u8 *s = source + GetSourceOffset(x, y, source_dim.width) * 3; + u8 *d = dest + GetDestOffset(x, y, dest_dim.width) * 3; + d[0] = s[0]; + d[1] = s[1]; + d[2] = s[2]; + } + } +} + +SDL_FORCE_INLINE void +CopyFramebuffertoN3DS_32(u32 *dest, const Dimensions dest_dim, const u32 *source, const Dimensions source_dim) { int rows = SDL_min(dest_dim.width, source_dim.height); int cols = SDL_min(dest_dim.height, source_dim.width); for (int y = 0; y < rows; ++y) { for (int x = 0; x < cols; ++x) { - SDL_memcpy( - dest + GetDestOffset(x, y, dest_dim.width), - source + GetSourceOffset(x, y, source_dim.width), - 4); + const u32 *s = source + GetSourceOffset(x, y, source_dim.width); + u32 *d = dest + GetDestOffset(x, y, dest_dim.width); + *d = *s; } } } diff --git a/vs/sdl2/src/video/n3ds/SDL_n3dsframebuffer_c.h b/vs/sdl2/src/video/n3ds/SDL_n3dsframebuffer_c.h index 19a9e95757d..bbcfd4c9b71 100644 --- a/vs/sdl2/src/video/n3ds/SDL_n3dsframebuffer_c.h +++ b/vs/sdl2/src/video/n3ds/SDL_n3dsframebuffer_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/n3ds/SDL_n3dsswkb.c b/vs/sdl2/src/video/n3ds/SDL_n3dsswkb.c index 9a35d272b6e..af1d8fc8efd 100644 --- a/vs/sdl2/src/video/n3ds/SDL_n3dsswkb.c +++ b/vs/sdl2/src/video/n3ds/SDL_n3dsswkb.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -30,17 +30,17 @@ static SwkbdState sw_keyboard; const static size_t BUFFER_SIZE = 256; -void N3DS_SwkbInit() +void N3DS_SwkbInit(void) { swkbdInit(&sw_keyboard, SWKBD_TYPE_NORMAL, 2, -1); } -void N3DS_SwkbPoll() +void N3DS_SwkbPoll(void) { return; } -void N3DS_SwkbQuit() +void N3DS_SwkbQuit(void) { return; } diff --git a/vs/sdl2/src/video/n3ds/SDL_n3dsswkb.h b/vs/sdl2/src/video/n3ds/SDL_n3dsswkb.h index 04a355b29b2..196f7de24b0 100644 --- a/vs/sdl2/src/video/n3ds/SDL_n3dsswkb.h +++ b/vs/sdl2/src/video/n3ds/SDL_n3dsswkb.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/n3ds/SDL_n3dstouch.c b/vs/sdl2/src/video/n3ds/SDL_n3dstouch.c index 982c578ac18..0b3f06ab559 100644 --- a/vs/sdl2/src/video/n3ds/SDL_n3dstouch.c +++ b/vs/sdl2/src/video/n3ds/SDL_n3dstouch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,9 +26,11 @@ #include <3ds.h> #include "../../events/SDL_touch_c.h" +#include "../SDL_sysvideo.h" #include "SDL_n3dstouch.h" +#include "SDL_n3dsvideo.h" -#define N3DS_TOUCH_ID 0 +#define N3DS_TOUCH_ID 1 /* Factors used to convert touchscreen coordinates to @@ -49,19 +51,25 @@ void N3DS_QuitTouch(void) SDL_DelTouch(N3DS_TOUCH_ID); } -void N3DS_PollTouch(void) +void N3DS_PollTouch(_THIS) { + SDL_VideoData *driverdata = (SDL_VideoData *)_this->driverdata; touchPosition touch; + SDL_Window *window; + SDL_VideoDisplay *display; static SDL_bool was_pressed = SDL_FALSE; SDL_bool pressed; hidTouchRead(&touch); pressed = (touch.px != 0 || touch.py != 0); + display = SDL_GetDisplay(driverdata->touch_display); + window = display ? display->fullscreen_window : NULL; + if (pressed != was_pressed) { was_pressed = pressed; SDL_SendTouch(N3DS_TOUCH_ID, 0, - NULL, + window, pressed, touch.px * TOUCHSCREEN_SCALE_X, touch.py * TOUCHSCREEN_SCALE_Y, @@ -69,7 +77,7 @@ void N3DS_PollTouch(void) } else if (pressed) { SDL_SendTouchMotion(N3DS_TOUCH_ID, 0, - NULL, + window, touch.px * TOUCHSCREEN_SCALE_X, touch.py * TOUCHSCREEN_SCALE_Y, 1.0f); diff --git a/vs/sdl2/src/video/n3ds/SDL_n3dstouch.h b/vs/sdl2/src/video/n3ds/SDL_n3dstouch.h index d99e5a32152..3d95fafcc32 100644 --- a/vs/sdl2/src/video/n3ds/SDL_n3dstouch.h +++ b/vs/sdl2/src/video/n3ds/SDL_n3dstouch.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,7 +24,7 @@ void N3DS_InitTouch(void); void N3DS_QuitTouch(void); -void N3DS_PollTouch(void); +void N3DS_PollTouch(_THIS); #endif /* SDL_n3dstouch_h_ */ diff --git a/vs/sdl2/src/video/n3ds/SDL_n3dsvideo.c b/vs/sdl2/src/video/n3ds/SDL_n3dsvideo.c index fc875d3ce52..bb80f9c18d5 100644 --- a/vs/sdl2/src/video/n3ds/SDL_n3dsvideo.c +++ b/vs/sdl2/src/video/n3ds/SDL_n3dsvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -31,11 +31,12 @@ #define N3DSVID_DRIVER_NAME "n3ds" -SDL_FORCE_INLINE void AddN3DSDisplay(gfxScreen_t screen); +SDL_FORCE_INLINE int AddN3DSDisplay(gfxScreen_t screen); static int N3DS_VideoInit(_THIS); static void N3DS_VideoQuit(_THIS); static void N3DS_GetDisplayModes(_THIS, SDL_VideoDisplay *display); +static int N3DS_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode); static int N3DS_GetDisplayBounds(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect); static int N3DS_CreateWindow(_THIS, SDL_Window *window); static void N3DS_DestroyWindow(_THIS, SDL_Window *window); @@ -45,6 +46,23 @@ typedef struct gfxScreen_t screen; } DisplayDriverData; +typedef struct +{ + GSPGPU_FramebufferFormat fmt; +} ModeDriverData; + +static const struct +{ + SDL_PixelFormatEnum pixfmt; + GSPGPU_FramebufferFormat gspfmt; +} format_map[] = { + { SDL_PIXELFORMAT_RGBA8888, GSP_RGBA8_OES }, + { SDL_PIXELFORMAT_BGR24, GSP_BGR8_OES }, + { SDL_PIXELFORMAT_RGB565, GSP_RGB565_OES }, + { SDL_PIXELFORMAT_RGBA5551, GSP_RGB5_A1_OES }, + { SDL_PIXELFORMAT_RGBA4444, GSP_RGBA4_OES } +}; + /* N3DS driver bootstrap functions */ static void N3DS_DeleteDevice(SDL_VideoDevice *device) @@ -56,16 +74,31 @@ static void N3DS_DeleteDevice(SDL_VideoDevice *device) static SDL_VideoDevice *N3DS_CreateDevice(void) { - SDL_VideoDevice *device = (SDL_VideoDevice *)SDL_calloc(1, sizeof(SDL_VideoDevice)); + SDL_VideoDevice *device; + SDL_VideoData *phdata; + + /* Initialize all variables that we clean on shutdown */ + device = (SDL_VideoDevice *)SDL_calloc(1, sizeof(SDL_VideoDevice)); if (!device) { SDL_OutOfMemory(); return 0; } + /* Initialize internal data */ + phdata = (SDL_VideoData *)SDL_calloc(1, sizeof(SDL_VideoData)); + if (!phdata) { + SDL_OutOfMemory(); + SDL_free(device); + return NULL; + } + + device->driverdata = phdata; + device->VideoInit = N3DS_VideoInit; device->VideoQuit = N3DS_VideoQuit; device->GetDisplayModes = N3DS_GetDisplayModes; + device->SetDisplayMode = N3DS_SetDisplayMode; device->GetDisplayBounds = N3DS_GetDisplayBounds; device->CreateSDLWindow = N3DS_CreateWindow; @@ -83,6 +116,8 @@ static SDL_VideoDevice *N3DS_CreateDevice(void) device->free = N3DS_DeleteDevice; + device->quirk_flags = VIDEO_DEVICE_QUIRK_FULLSCREEN_ONLY; + return device; } @@ -90,11 +125,13 @@ VideoBootStrap N3DS_bootstrap = { N3DSVID_DRIVER_NAME, "N3DS Video Driver", N3DS static int N3DS_VideoInit(_THIS) { + SDL_VideoData *driverdata = (SDL_VideoData *)_this->driverdata; + gfxInit(GSP_RGBA8_OES, GSP_RGBA8_OES, false); hidInit(); - AddN3DSDisplay(GFX_TOP); - AddN3DSDisplay(GFX_BOTTOM); + driverdata->top_display = AddN3DSDisplay(GFX_TOP); + driverdata->touch_display = AddN3DSDisplay(GFX_BOTTOM); N3DS_InitTouch(); N3DS_SwkbInit(); @@ -102,15 +139,15 @@ static int N3DS_VideoInit(_THIS) return 0; } -SDL_FORCE_INLINE void +SDL_FORCE_INLINE int AddN3DSDisplay(gfxScreen_t screen) { SDL_DisplayMode mode; + ModeDriverData *modedata; SDL_VideoDisplay display; DisplayDriverData *display_driver_data = SDL_calloc(1, sizeof(DisplayDriverData)); if (!display_driver_data) { - SDL_OutOfMemory(); - return; + return SDL_OutOfMemory(); } SDL_zero(mode); @@ -118,18 +155,24 @@ AddN3DSDisplay(gfxScreen_t screen) display_driver_data->screen = screen; + modedata = SDL_malloc(sizeof(ModeDriverData)); + if (!modedata) { + return SDL_OutOfMemory(); + } + mode.w = (screen == GFX_TOP) ? GSP_SCREEN_HEIGHT_TOP : GSP_SCREEN_HEIGHT_BOTTOM; mode.h = GSP_SCREEN_WIDTH; mode.refresh_rate = 60; - mode.format = FRAMEBUFFER_FORMAT; - mode.driverdata = NULL; + mode.format = SDL_PIXELFORMAT_RGBA8888; + mode.driverdata = modedata; + modedata->fmt = GSP_RGBA8_OES; display.name = (screen == GFX_TOP) ? "N3DS top screen" : "N3DS bottom screen"; display.desktop_mode = mode; display.current_mode = mode; display.driverdata = display_driver_data; - SDL_AddVideoDisplay(&display, SDL_FALSE); + return SDL_AddVideoDisplay(&display, SDL_FALSE); } static void N3DS_VideoQuit(_THIS) @@ -143,8 +186,37 @@ static void N3DS_VideoQuit(_THIS) static void N3DS_GetDisplayModes(_THIS, SDL_VideoDisplay *display) { - /* Each display only has a single mode */ - SDL_AddDisplayMode(display, &display->current_mode); + DisplayDriverData *displaydata = display->driverdata; + ModeDriverData *modedata; + SDL_DisplayMode mode; + int i; + + for (i = 0; i < SDL_arraysize(format_map); i++) { + modedata = SDL_malloc(sizeof(ModeDriverData)); + if (!modedata) + continue; + + SDL_zero(mode); + mode.w = (displaydata->screen == GFX_TOP) ? GSP_SCREEN_HEIGHT_TOP : GSP_SCREEN_HEIGHT_BOTTOM; + mode.h = GSP_SCREEN_WIDTH; + mode.refresh_rate = 60; + mode.format = format_map[i].pixfmt; + mode.driverdata = modedata; + modedata->fmt = format_map[i].gspfmt; + + if (!SDL_AddDisplayMode(display, &mode)) { + SDL_free(modedata); + } + } +} + +static int N3DS_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode) +{ + DisplayDriverData *displaydata = display->driverdata; + ModeDriverData *modedata = mode->driverdata; + + gfxSetScreenFormat(displaydata->screen, modedata->fmt); + return 0; } static int N3DS_GetDisplayBounds(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect) diff --git a/vs/sdl2/src/video/n3ds/SDL_n3dsvideo.h b/vs/sdl2/src/video/n3ds/SDL_n3dsvideo.h index 455eaf425ef..205f7d270f8 100644 --- a/vs/sdl2/src/video/n3ds/SDL_n3dsvideo.h +++ b/vs/sdl2/src/video/n3ds/SDL_n3dsvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,13 +26,18 @@ #include <3ds.h> #include "../SDL_sysvideo.h" + +typedef struct SDL_VideoData +{ + int top_display; + int touch_display; +} SDL_VideoData; + typedef struct SDL_WindowData { gfxScreen_t screen; /**< Keeps track of which N3DS screen is targetted */ } SDL_WindowData; -#define FRAMEBUFFER_FORMAT SDL_PIXELFORMAT_RGBA8888 - #endif /* SDL_n3dsvideo_h_ */ /* vi: set sts=4 ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/src/video/nacl/SDL_naclevents.c b/vs/sdl2/src/video/nacl/SDL_naclevents.c index 6e7226e1ce4..08cba118109 100644 --- a/vs/sdl2/src/video/nacl/SDL_naclevents.c +++ b/vs/sdl2/src/video/nacl/SDL_naclevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/nacl/SDL_naclevents_c.h b/vs/sdl2/src/video/nacl/SDL_naclevents_c.h index 4bf777a769e..1b01e99a531 100644 --- a/vs/sdl2/src/video/nacl/SDL_naclevents_c.h +++ b/vs/sdl2/src/video/nacl/SDL_naclevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/nacl/SDL_naclglue.c b/vs/sdl2/src/video/nacl/SDL_naclglue.c index 04b0823ab57..7ba6db31bea 100644 --- a/vs/sdl2/src/video/nacl/SDL_naclglue.c +++ b/vs/sdl2/src/video/nacl/SDL_naclglue.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/nacl/SDL_naclopengles.c b/vs/sdl2/src/video/nacl/SDL_naclopengles.c index fd121b7114f..f1fa7976d70 100644 --- a/vs/sdl2/src/video/nacl/SDL_naclopengles.c +++ b/vs/sdl2/src/video/nacl/SDL_naclopengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/nacl/SDL_naclopengles.h b/vs/sdl2/src/video/nacl/SDL_naclopengles.h index 5ae394612af..026eaa6ed76 100644 --- a/vs/sdl2/src/video/nacl/SDL_naclopengles.h +++ b/vs/sdl2/src/video/nacl/SDL_naclopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/nacl/SDL_naclvideo.c b/vs/sdl2/src/video/nacl/SDL_naclvideo.c index 53fc679b030..f7f35e73a1b 100644 --- a/vs/sdl2/src/video/nacl/SDL_naclvideo.c +++ b/vs/sdl2/src/video/nacl/SDL_naclvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -128,6 +128,7 @@ static SDL_VideoDevice *NACL_CreateDevice(void) { device->GL_SwapWindow = NACL_GLES_SwapWindow; device->GL_DeleteContext = NACL_GLES_DeleteContext; + device->quirk_flags = VIDEO_DEVICE_QUIRK_FULLSCREEN_ONLY; return device; } diff --git a/vs/sdl2/src/video/nacl/SDL_naclvideo.h b/vs/sdl2/src/video/nacl/SDL_naclvideo.h index 504f4d622eb..8be165f2448 100644 --- a/vs/sdl2/src/video/nacl/SDL_naclvideo.h +++ b/vs/sdl2/src/video/nacl/SDL_naclvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/nacl/SDL_naclwindow.c b/vs/sdl2/src/video/nacl/SDL_naclwindow.c index 200b345f9ef..072e4a8100c 100644 --- a/vs/sdl2/src/video/nacl/SDL_naclwindow.c +++ b/vs/sdl2/src/video/nacl/SDL_naclwindow.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -45,7 +45,6 @@ int NACL_CreateWindow(_THIS, SDL_Window * window) window->h = driverdata->h; window->flags &= ~SDL_WINDOW_RESIZABLE; /* window is NEVER resizeable */ - window->flags |= SDL_WINDOW_FULLSCREEN; /* window is always fullscreen */ window->flags &= ~SDL_WINDOW_HIDDEN; window->flags |= SDL_WINDOW_SHOWN; /* only one window on NaCl */ window->flags |= SDL_WINDOW_INPUT_FOCUS; /* always has input focus */ diff --git a/vs/sdl2/src/video/nacl/SDL_naclwindow.h b/vs/sdl2/src/video/nacl/SDL_naclwindow.h index 9ac941c4704..d2d5521f0d2 100644 --- a/vs/sdl2/src/video/nacl/SDL_naclwindow.h +++ b/vs/sdl2/src/video/nacl/SDL_naclwindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/ngage/SDL_ngageevents.cpp b/vs/sdl2/src/video/ngage/SDL_ngageevents.cpp index 3ecf164ef4e..98353642639 100644 --- a/vs/sdl2/src/video/ngage/SDL_ngageevents.cpp +++ b/vs/sdl2/src/video/ngage/SDL_ngageevents.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/ngage/SDL_ngageevents_c.h b/vs/sdl2/src/video/ngage/SDL_ngageevents_c.h index e0ef5a0317d..45a3588d949 100644 --- a/vs/sdl2/src/video/ngage/SDL_ngageevents_c.h +++ b/vs/sdl2/src/video/ngage/SDL_ngageevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/ngage/SDL_ngageframebuffer.cpp b/vs/sdl2/src/video/ngage/SDL_ngageframebuffer.cpp index 98fb495d4e4..09753872bae 100644 --- a/vs/sdl2/src/video/ngage/SDL_ngageframebuffer.cpp +++ b/vs/sdl2/src/video/ngage/SDL_ngageframebuffer.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/ngage/SDL_ngageframebuffer_c.h b/vs/sdl2/src/video/ngage/SDL_ngageframebuffer_c.h index 02c50efa3e0..57e8f3ab1a3 100644 --- a/vs/sdl2/src/video/ngage/SDL_ngageframebuffer_c.h +++ b/vs/sdl2/src/video/ngage/SDL_ngageframebuffer_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/ngage/SDL_ngagevideo.cpp b/vs/sdl2/src/video/ngage/SDL_ngagevideo.cpp index d18abc8378a..752f3dffd99 100644 --- a/vs/sdl2/src/video/ngage/SDL_ngagevideo.cpp +++ b/vs/sdl2/src/video/ngage/SDL_ngagevideo.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/ngage/SDL_ngagevideo.h b/vs/sdl2/src/video/ngage/SDL_ngagevideo.h index 57386e1025a..a56b2500f88 100644 --- a/vs/sdl2/src/video/ngage/SDL_ngagevideo.h +++ b/vs/sdl2/src/video/ngage/SDL_ngagevideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/ngage/SDL_ngagewindow.cpp b/vs/sdl2/src/video/ngage/SDL_ngagewindow.cpp index 37a6be05c13..3aa5d22540e 100644 --- a/vs/sdl2/src/video/ngage/SDL_ngagewindow.cpp +++ b/vs/sdl2/src/video/ngage/SDL_ngagewindow.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/ngage/SDL_ngagewindow.h b/vs/sdl2/src/video/ngage/SDL_ngagewindow.h index 933ca8e9eef..76b4e4d704e 100644 --- a/vs/sdl2/src/video/ngage/SDL_ngagewindow.h +++ b/vs/sdl2/src/video/ngage/SDL_ngagewindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/offscreen/SDL_offscreenevents.c b/vs/sdl2/src/video/offscreen/SDL_offscreenevents.c index d825162b86b..ef9cd0fcfc1 100644 --- a/vs/sdl2/src/video/offscreen/SDL_offscreenevents.c +++ b/vs/sdl2/src/video/offscreen/SDL_offscreenevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/offscreen/SDL_offscreenevents_c.h b/vs/sdl2/src/video/offscreen/SDL_offscreenevents_c.h index ccbef93f285..201b432d033 100644 --- a/vs/sdl2/src/video/offscreen/SDL_offscreenevents_c.h +++ b/vs/sdl2/src/video/offscreen/SDL_offscreenevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/offscreen/SDL_offscreenframebuffer.c b/vs/sdl2/src/video/offscreen/SDL_offscreenframebuffer.c index 2b9337b1114..ef0c1e3875d 100644 --- a/vs/sdl2/src/video/offscreen/SDL_offscreenframebuffer.c +++ b/vs/sdl2/src/video/offscreen/SDL_offscreenframebuffer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/offscreen/SDL_offscreenframebuffer_c.h b/vs/sdl2/src/video/offscreen/SDL_offscreenframebuffer_c.h index 1151576f3b0..72840a27aeb 100644 --- a/vs/sdl2/src/video/offscreen/SDL_offscreenframebuffer_c.h +++ b/vs/sdl2/src/video/offscreen/SDL_offscreenframebuffer_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/offscreen/SDL_offscreenopengles.c b/vs/sdl2/src/video/offscreen/SDL_offscreenopengles.c index a36cf518871..95413d74e8a 100644 --- a/vs/sdl2/src/video/offscreen/SDL_offscreenopengles.c +++ b/vs/sdl2/src/video/offscreen/SDL_offscreenopengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/offscreen/SDL_offscreenopengles.h b/vs/sdl2/src/video/offscreen/SDL_offscreenopengles.h index c8c23f1c035..15f7ecdeeb3 100644 --- a/vs/sdl2/src/video/offscreen/SDL_offscreenopengles.h +++ b/vs/sdl2/src/video/offscreen/SDL_offscreenopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/offscreen/SDL_offscreenvideo.c b/vs/sdl2/src/video/offscreen/SDL_offscreenvideo.c index 2d42374adb8..d9e31e5ebd6 100644 --- a/vs/sdl2/src/video/offscreen/SDL_offscreenvideo.c +++ b/vs/sdl2/src/video/offscreen/SDL_offscreenvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/offscreen/SDL_offscreenvideo.h b/vs/sdl2/src/video/offscreen/SDL_offscreenvideo.h index f4e3c8fe8ca..17fc936f7fd 100644 --- a/vs/sdl2/src/video/offscreen/SDL_offscreenvideo.h +++ b/vs/sdl2/src/video/offscreen/SDL_offscreenvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/offscreen/SDL_offscreenwindow.c b/vs/sdl2/src/video/offscreen/SDL_offscreenwindow.c index 58fc2e95eb5..bc0d121d415 100644 --- a/vs/sdl2/src/video/offscreen/SDL_offscreenwindow.c +++ b/vs/sdl2/src/video/offscreen/SDL_offscreenwindow.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/offscreen/SDL_offscreenwindow.h b/vs/sdl2/src/video/offscreen/SDL_offscreenwindow.h index aa189c08695..08acba2a0ed 100644 --- a/vs/sdl2/src/video/offscreen/SDL_offscreenwindow.h +++ b/vs/sdl2/src/video/offscreen/SDL_offscreenwindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/os2/SDL_os2dive.c b/vs/sdl2/src/video/os2/SDL_os2dive.c index 0cb8735320e..66b3257bc82 100644 --- a/vs/sdl2/src/video/os2/SDL_os2dive.c +++ b/vs/sdl2/src/video/os2/SDL_os2dive.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/os2/SDL_os2messagebox.c b/vs/sdl2/src/video/os2/SDL_os2messagebox.c index e39463575cd..cf24b0879d4 100644 --- a/vs/sdl2/src/video/os2/SDL_os2messagebox.c +++ b/vs/sdl2/src/video/os2/SDL_os2messagebox.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/os2/SDL_os2messagebox.h b/vs/sdl2/src/video/os2/SDL_os2messagebox.h index 453d035a7fd..f8fdd7f425d 100644 --- a/vs/sdl2/src/video/os2/SDL_os2messagebox.h +++ b/vs/sdl2/src/video/os2/SDL_os2messagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/os2/SDL_os2mouse.c b/vs/sdl2/src/video/os2/SDL_os2mouse.c index 220766a4c17..4842cbe27e0 100644 --- a/vs/sdl2/src/video/os2/SDL_os2mouse.c +++ b/vs/sdl2/src/video/os2/SDL_os2mouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/os2/SDL_os2mouse.h b/vs/sdl2/src/video/os2/SDL_os2mouse.h index ccd99da7ae2..5ab8e01900b 100644 --- a/vs/sdl2/src/video/os2/SDL_os2mouse.h +++ b/vs/sdl2/src/video/os2/SDL_os2mouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/os2/SDL_os2output.h b/vs/sdl2/src/video/os2/SDL_os2output.h index 7115ab72dac..5f94d3144f4 100644 --- a/vs/sdl2/src/video/os2/SDL_os2output.h +++ b/vs/sdl2/src/video/os2/SDL_os2output.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/os2/SDL_os2util.c b/vs/sdl2/src/video/os2/SDL_os2util.c index 44450b6eb49..70aa293756d 100644 --- a/vs/sdl2/src/video/os2/SDL_os2util.c +++ b/vs/sdl2/src/video/os2/SDL_os2util.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/os2/SDL_os2util.h b/vs/sdl2/src/video/os2/SDL_os2util.h index 5def7b6be71..e6128462124 100644 --- a/vs/sdl2/src/video/os2/SDL_os2util.h +++ b/vs/sdl2/src/video/os2/SDL_os2util.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/os2/SDL_os2video.c b/vs/sdl2/src/video/os2/SDL_os2video.c index 8da1f4f480c..a5dd3f60174 100644 --- a/vs/sdl2/src/video/os2/SDL_os2video.c +++ b/vs/sdl2/src/video/os2/SDL_os2video.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/os2/SDL_os2video.h b/vs/sdl2/src/video/os2/SDL_os2video.h index 0f9f3799c05..e2aaa269e8e 100644 --- a/vs/sdl2/src/video/os2/SDL_os2video.h +++ b/vs/sdl2/src/video/os2/SDL_os2video.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/os2/SDL_os2vman.c b/vs/sdl2/src/video/os2/SDL_os2vman.c index 5945e8e4b96..0412ee02e3a 100644 --- a/vs/sdl2/src/video/os2/SDL_os2vman.c +++ b/vs/sdl2/src/video/os2/SDL_os2vman.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/pandora/SDL_pandora.c b/vs/sdl2/src/video/pandora/SDL_pandora.c index 35e062347f3..03712b4af4f 100644 --- a/vs/sdl2/src/video/pandora/SDL_pandora.c +++ b/vs/sdl2/src/video/pandora/SDL_pandora.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/pandora/SDL_pandora.h b/vs/sdl2/src/video/pandora/SDL_pandora.h index 43faa6a8c9f..307a12c5fbe 100644 --- a/vs/sdl2/src/video/pandora/SDL_pandora.h +++ b/vs/sdl2/src/video/pandora/SDL_pandora.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/pandora/SDL_pandora_events.c b/vs/sdl2/src/video/pandora/SDL_pandora_events.c index 4d6ef6e8cbf..372c0b79cd9 100644 --- a/vs/sdl2/src/video/pandora/SDL_pandora_events.c +++ b/vs/sdl2/src/video/pandora/SDL_pandora_events.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/pandora/SDL_pandora_events.h b/vs/sdl2/src/video/pandora/SDL_pandora_events.h index 4753ff11fc8..d4e2e76533b 100644 --- a/vs/sdl2/src/video/pandora/SDL_pandora_events.h +++ b/vs/sdl2/src/video/pandora/SDL_pandora_events.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/ps2/SDL_ps2video.c b/vs/sdl2/src/video/ps2/SDL_ps2video.c index 4e823fe2dbb..c80fc708135 100644 --- a/vs/sdl2/src/video/ps2/SDL_ps2video.c +++ b/vs/sdl2/src/video/ps2/SDL_ps2video.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/ps2/SDL_ps2video.h b/vs/sdl2/src/video/ps2/SDL_ps2video.h index 6bc13b81ecb..8c7166696ca 100644 --- a/vs/sdl2/src/video/ps2/SDL_ps2video.h +++ b/vs/sdl2/src/video/ps2/SDL_ps2video.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/psp/SDL_pspevents.c b/vs/sdl2/src/video/psp/SDL_pspevents.c index 44b487faf77..3c4ae391e99 100644 --- a/vs/sdl2/src/video/psp/SDL_pspevents.c +++ b/vs/sdl2/src/video/psp/SDL_pspevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/psp/SDL_pspevents_c.h b/vs/sdl2/src/video/psp/SDL_pspevents_c.h index fc9cd0e9470..e604d4592e7 100644 --- a/vs/sdl2/src/video/psp/SDL_pspevents_c.h +++ b/vs/sdl2/src/video/psp/SDL_pspevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/psp/SDL_pspgl.c b/vs/sdl2/src/video/psp/SDL_pspgl.c index 7071091e7a6..381e8322d5d 100644 --- a/vs/sdl2/src/video/psp/SDL_pspgl.c +++ b/vs/sdl2/src/video/psp/SDL_pspgl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/psp/SDL_pspgl_c.h b/vs/sdl2/src/video/psp/SDL_pspgl_c.h index b302c8e3fd6..e51aabc913d 100644 --- a/vs/sdl2/src/video/psp/SDL_pspgl_c.h +++ b/vs/sdl2/src/video/psp/SDL_pspgl_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/psp/SDL_pspmouse.c b/vs/sdl2/src/video/psp/SDL_pspmouse.c index 57fc45cdd4e..ce7658c1076 100644 --- a/vs/sdl2/src/video/psp/SDL_pspmouse.c +++ b/vs/sdl2/src/video/psp/SDL_pspmouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/psp/SDL_pspmouse_c.h b/vs/sdl2/src/video/psp/SDL_pspmouse_c.h index a961232b55a..7abe075a3ad 100644 --- a/vs/sdl2/src/video/psp/SDL_pspmouse_c.h +++ b/vs/sdl2/src/video/psp/SDL_pspmouse_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/psp/SDL_pspvideo.c b/vs/sdl2/src/video/psp/SDL_pspvideo.c index 9631904bd13..bcf5491829b 100644 --- a/vs/sdl2/src/video/psp/SDL_pspvideo.c +++ b/vs/sdl2/src/video/psp/SDL_pspvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,8 +29,10 @@ #include "SDL_syswm.h" #include "SDL_loadso.h" #include "SDL_events.h" +#include "SDL_render.h" #include "../../events/SDL_mouse_c.h" #include "../../events/SDL_keyboard_c.h" +#include "../../render/SDL_sysrender.h" /* PSP declarations */ @@ -38,6 +40,123 @@ #include "SDL_pspevents_c.h" #include "SDL_pspgl_c.h" +#include +#include +#include +#include +#include "../../render/psp/SDL_render_psp.h" + +#define SDL_WINDOWTEXTUREDATA "_SDL_WindowTextureData" + +typedef struct +{ + SDL_Renderer *renderer; + SDL_Texture *texture; + void *pixels; + int pitch; + int bytes_per_pixel; +} SDL_WindowTextureData; + +int PSP_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, Uint32 *format, void **pixels, int *pitch) +{ + SDL_RendererInfo info; + SDL_WindowTextureData *data = SDL_GetWindowData(window, SDL_WINDOWTEXTUREDATA); + int i, w, h; + + SDL_GetWindowSizeInPixels(window, &w, &h); + + if (w != PSP_SCREEN_WIDTH) { + return SDL_SetError("Unexpected window size"); + } + + if (!data) { + SDL_Renderer *renderer = NULL; + for (i = 0; i < SDL_GetNumRenderDrivers(); ++i) { + SDL_GetRenderDriverInfo(i, &info); + if (SDL_strcmp(info.name, "software") != 0) { + renderer = SDL_CreateRenderer(window, i, 0); + if (renderer && (SDL_GetRendererInfo(renderer, &info) == 0) && (info.flags & SDL_RENDERER_ACCELERATED)) { + break; /* this will work. */ + } + if (renderer) { /* wasn't accelerated, etc, skip it. */ + SDL_DestroyRenderer(renderer); + renderer = NULL; + } + } + } + if (!renderer) { + return SDL_SetError("No hardware accelerated renderers available"); + } + + SDL_assert(renderer != NULL); /* should have explicitly checked this above. */ + + /* Create the data after we successfully create the renderer (bug #1116) */ + data = (SDL_WindowTextureData *)SDL_calloc(1, sizeof(*data)); + + if (!data) { + SDL_DestroyRenderer(renderer); + return SDL_OutOfMemory(); + } + + SDL_SetWindowData(window, SDL_WINDOWTEXTUREDATA, data); + data->renderer = renderer; + } else { + if (SDL_GetRendererInfo(data->renderer, &info) == -1) { + return -1; + } + } + + /* Find the first format without an alpha channel */ + *format = info.texture_formats[0]; + + for (i = 0; i < (int)info.num_texture_formats; ++i) { + if (!SDL_ISPIXELFORMAT_FOURCC(info.texture_formats[i]) && + !SDL_ISPIXELFORMAT_ALPHA(info.texture_formats[i])) { + *format = info.texture_formats[i]; + break; + } + } + + /* get the PSP renderer's "private" data */ + SDL_PSP_RenderGetProp(data->renderer, SDL_PSP_RENDERPROPS_FRONTBUFFER, &data->pixels); + + /* Create framebuffer data */ + data->bytes_per_pixel = SDL_BYTESPERPIXEL(*format); + /* since we point directly to VRAM's frontbuffer, we have to use + the upscaled pitch of 512 width - since PSP requires all textures to be + powers of 2. */ + data->pitch = 512 * data->bytes_per_pixel; + *pixels = data->pixels; + *pitch = data->pitch; + + /* Make sure we're not double-scaling the viewport */ + SDL_RenderSetViewport(data->renderer, NULL); + + return 0; +} + +int PSP_UpdateWindowFramebuffer(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects) +{ + SDL_WindowTextureData *data; + data = SDL_GetWindowData(window, SDL_WINDOWTEXTUREDATA); + if (!data || !data->renderer || !window->surface) { + return -1; + } + data->renderer->RenderPresent(data->renderer); + SDL_PSP_RenderGetProp(data->renderer, SDL_PSP_RENDERPROPS_BACKBUFFER, &window->surface->pixels); + return 0; +} + +void PSP_DestroyWindowFramebuffer(_THIS, SDL_Window *window) +{ + SDL_WindowTextureData *data = SDL_GetWindowData(window, SDL_WINDOWTEXTUREDATA); + if (!data || !data->renderer) { + return; + } + SDL_DestroyRenderer(data->renderer); + data->renderer = NULL; +} + /* unused static SDL_bool PSP_initialized = SDL_FALSE; */ @@ -128,14 +247,161 @@ static SDL_VideoDevice *PSP_Create() device->PumpEvents = PSP_PumpEvents; + /* backend to use VRAM directly as a framebuffer using + SDL_GetWindowSurface() API. */ + device->checked_texture_framebuffer = 1; + device->CreateWindowFramebuffer = PSP_CreateWindowFramebuffer; + device->UpdateWindowFramebuffer = PSP_UpdateWindowFramebuffer; + device->DestroyWindowFramebuffer = PSP_DestroyWindowFramebuffer; + return device; } +static void configure_dialog(pspUtilityMsgDialogParams *dialog, size_t dialog_size) +{ + /* clear structure and setup size */ + SDL_memset(dialog, 0, dialog_size); + dialog->base.size = dialog_size; + + /* set language */ + sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_LANGUAGE, &dialog->base.language); + + /* set X/O swap */ + sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_UNKNOWN, &dialog->base.buttonSwap); + + /* set thread priorities */ + /* TODO: understand how these work */ + dialog->base.soundThread = 0x10; + dialog->base.graphicsThread = 0x11; + dialog->base.fontThread = 0x12; + dialog->base.accessThread = 0x13; +} + +static void *setup_temporal_gu(void *list) +{ + // Using GU_PSM_8888 for the framebuffer + int bpp = 4; + + void *doublebuffer = vramalloc(PSP_FRAME_BUFFER_SIZE * bpp * 2); + void *backbuffer = doublebuffer; + void *frontbuffer = ((uint8_t *)doublebuffer) + PSP_FRAME_BUFFER_SIZE * bpp; + + sceGuInit(); + + sceGuStart(GU_DIRECT,list); + sceGuDrawBuffer(GU_PSM_8888, vrelptr(frontbuffer), PSP_FRAME_BUFFER_WIDTH); + sceGuDispBuffer(PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT, vrelptr(backbuffer), PSP_FRAME_BUFFER_WIDTH); + + sceGuOffset(2048 - (PSP_SCREEN_WIDTH >> 1), 2048 - (PSP_SCREEN_HEIGHT >> 1)); + sceGuViewport(2048, 2048, PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT); + + sceGuDisable(GU_DEPTH_TEST); + + /* Scissoring */ + sceGuScissor(0, 0, PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT); + sceGuEnable(GU_SCISSOR_TEST); + + sceGuFinish(); + sceGuSync(0,0); + + sceDisplayWaitVblankStart(); + sceGuDisplay(GU_TRUE); + + return doublebuffer; +} + +static void term_temporal_gu(void *guBuffer) +{ + sceGuTerm(); + vfree(guBuffer); + sceDisplayWaitVblankStart(); +} + +int PSP_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) +{ + unsigned char list[64] __attribute__((aligned(64))); + pspUtilityMsgDialogParams dialog; + int status; + void *guBuffer = NULL; + + /* check if it's possible to use existing video context */ + if (SDL_GetFocusWindow() == NULL) { + guBuffer = setup_temporal_gu(list); + } + + /* configure dialog */ + configure_dialog(&dialog, sizeof(dialog)); + + /* setup dialog options for text */ + dialog.mode = PSP_UTILITY_MSGDIALOG_MODE_TEXT; + dialog.options = PSP_UTILITY_MSGDIALOG_OPTION_TEXT; + + /* copy the message in, 512 bytes max */ + SDL_snprintf(dialog.message, sizeof(dialog.message), "%s\r\n\r\n%s", messageboxdata->title, messageboxdata->message); + + /* too many buttons */ + if (messageboxdata->numbuttons > 2) + return SDL_SetError("messageboxdata->numbuttons valid values are 0, 1, 2"); + + /* we only have two options, "yes/no" or "ok" */ + if (messageboxdata->numbuttons == 2) + dialog.options |= PSP_UTILITY_MSGDIALOG_OPTION_YESNO_BUTTONS | PSP_UTILITY_MSGDIALOG_OPTION_DEFAULT_NO; + + /* start dialog */ + if (sceUtilityMsgDialogInitStart(&dialog) != 0) + return SDL_SetError("sceUtilityMsgDialogInitStart() failed for some reason"); + + /* loop while the dialog is active */ + status = PSP_UTILITY_DIALOG_NONE; + do + { + sceGuStart(GU_DIRECT, list); + sceGuClearColor(0); + sceGuClearDepth(0); + sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT); + sceGuFinish(); + sceGuSync(0,0); + + status = sceUtilityMsgDialogGetStatus(); + + switch (status) + { + case PSP_UTILITY_DIALOG_VISIBLE: + sceUtilityMsgDialogUpdate(1); + break; + + case PSP_UTILITY_DIALOG_QUIT: + sceUtilityMsgDialogShutdownStart(); + break; + } + + sceDisplayWaitVblankStart(); + sceGuSwapBuffers(); + + } while (status != PSP_UTILITY_DIALOG_NONE); + + /* cleanup */ + if (guBuffer) + { + term_temporal_gu(guBuffer); + } + + /* success */ + if (dialog.buttonPressed == PSP_UTILITY_MSGDIALOG_RESULT_YES) + *buttonid = messageboxdata->buttons[0].buttonid; + else if (dialog.buttonPressed == PSP_UTILITY_MSGDIALOG_RESULT_NO) + *buttonid = messageboxdata->buttons[1].buttonid; + else + *buttonid = messageboxdata->buttons[0].buttonid; + + return 0; +} + VideoBootStrap PSP_bootstrap = { "PSP", "PSP Video Driver", PSP_Create, - NULL /* no ShowMessageBox implementation */ + PSP_ShowMessageBox }; /*****************************************************************************/ @@ -152,8 +418,8 @@ int PSP_VideoInit(_THIS) SDL_zero(current_mode); - current_mode.w = 480; - current_mode.h = 272; + current_mode.w = PSP_SCREEN_WIDTH; + current_mode.h = PSP_SCREEN_HEIGHT; current_mode.refresh_rate = 60; /* 32 bpp for default */ @@ -281,13 +547,79 @@ SDL_bool PSP_GetWindowWMInfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *i #endif -/* TO Write Me */ -SDL_bool PSP_HasScreenKeyboardSupport(_THIS) + +SDL_bool PSP_HasScreenKeyboardSupport(SDL_VideoDevice *_this) { - return SDL_FALSE; + return SDL_TRUE; } -void PSP_ShowScreenKeyboard(_THIS, SDL_Window *window) + +void PSP_ShowScreenKeyboard(SDL_VideoDevice *_this, SDL_Window *window) { + char list[0x20000] __attribute__((aligned(64))); // Needed for sceGuStart to work + int i; + int done = 0; + int input_text_length = 32; // SDL_SendKeyboardText supports up to 32 characters per event + unsigned short outtext[input_text_length]; + char text_string[input_text_length]; + + SceUtilityOskData data; + SceUtilityOskParams params; + + SDL_memset(outtext, 0, input_text_length * sizeof(unsigned short)); + + data.language = PSP_UTILITY_OSK_LANGUAGE_DEFAULT; + data.lines = 1; + data.unk_24 = 1; + data.inputtype = PSP_UTILITY_OSK_INPUTTYPE_ALL; + data.desc = NULL; + data.intext = NULL; + data.outtextlength = input_text_length; + data.outtextlimit = input_text_length; + data.outtext = outtext; + + params.base.size = sizeof(params); + sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_LANGUAGE, ¶ms.base.language); + sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_UNKNOWN, ¶ms.base.buttonSwap); + params.base.graphicsThread = 17; + params.base.accessThread = 19; + params.base.fontThread = 18; + params.base.soundThread = 16; + params.datacount = 1; + params.data = &data; + + sceUtilityOskInitStart(¶ms); + + while(!done) { + sceGuStart(GU_DIRECT, list); + sceGuClearColor(0); + sceGuClearDepth(0); + sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT); + sceGuFinish(); + sceGuSync(0,0); + + switch(sceUtilityOskGetStatus()) + { + case PSP_UTILITY_DIALOG_VISIBLE: + sceUtilityOskUpdate(1); + break; + case PSP_UTILITY_DIALOG_QUIT: + sceUtilityOskShutdownStart(); + break; + case PSP_UTILITY_DIALOG_NONE: + done = 1; + break; + default : + break; + } + sceDisplayWaitVblankStart(); + sceGuSwapBuffers(); + } + + // Convert input list to string + for (i = 0; i < input_text_length; i++) { + text_string[i] = outtext[i]; + } + SDL_SendKeyboardText((const char *) text_string); } void PSP_HideScreenKeyboard(_THIS, SDL_Window *window) { diff --git a/vs/sdl2/src/video/psp/SDL_pspvideo.h b/vs/sdl2/src/video/psp/SDL_pspvideo.h index 442d3eae03e..ee150c6309b 100644 --- a/vs/sdl2/src/video/psp/SDL_pspvideo.h +++ b/vs/sdl2/src/video/psp/SDL_pspvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -68,6 +68,14 @@ void PSP_MinimizeWindow(_THIS, SDL_Window *window); void PSP_RestoreWindow(_THIS, SDL_Window *window); void PSP_DestroyWindow(_THIS, SDL_Window *window); +/* "methods" aka callbacks for SDL_WindowSurface API */ +int PSP_CreateWindowFramebuffer(_THIS, SDL_Window *window, Uint32 *format, + void **pixels, int *pitch); +int PSP_UpdateWindowFramebuffer(_THIS, SDL_Window *window, +const SDL_Rect *rects, int numrects); +void PSP_DestroyWindowFramebuffer(_THIS, SDL_Window *window); + + /* Window manager function */ SDL_bool PSP_GetWindowWMInfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *info); diff --git a/vs/sdl2/src/video/raspberry/SDL_rpievents.c b/vs/sdl2/src/video/raspberry/SDL_rpievents.c index 5b9bdf06212..d97fb83660e 100644 --- a/vs/sdl2/src/video/raspberry/SDL_rpievents.c +++ b/vs/sdl2/src/video/raspberry/SDL_rpievents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/raspberry/SDL_rpievents_c.h b/vs/sdl2/src/video/raspberry/SDL_rpievents_c.h index e3b826c3833..7f8aec29044 100644 --- a/vs/sdl2/src/video/raspberry/SDL_rpievents_c.h +++ b/vs/sdl2/src/video/raspberry/SDL_rpievents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/raspberry/SDL_rpimouse.c b/vs/sdl2/src/video/raspberry/SDL_rpimouse.c index ff35a7913c2..ea390490e67 100644 --- a/vs/sdl2/src/video/raspberry/SDL_rpimouse.c +++ b/vs/sdl2/src/video/raspberry/SDL_rpimouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/raspberry/SDL_rpimouse.h b/vs/sdl2/src/video/raspberry/SDL_rpimouse.h index 8ff70dec671..717b6b4f9b3 100644 --- a/vs/sdl2/src/video/raspberry/SDL_rpimouse.h +++ b/vs/sdl2/src/video/raspberry/SDL_rpimouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/raspberry/SDL_rpiopengles.c b/vs/sdl2/src/video/raspberry/SDL_rpiopengles.c index 27b4edffc47..91fe9f807d3 100644 --- a/vs/sdl2/src/video/raspberry/SDL_rpiopengles.c +++ b/vs/sdl2/src/video/raspberry/SDL_rpiopengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/raspberry/SDL_rpiopengles.h b/vs/sdl2/src/video/raspberry/SDL_rpiopengles.h index 15c6ab1faf4..73f064237cd 100644 --- a/vs/sdl2/src/video/raspberry/SDL_rpiopengles.h +++ b/vs/sdl2/src/video/raspberry/SDL_rpiopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/raspberry/SDL_rpivideo.c b/vs/sdl2/src/video/raspberry/SDL_rpivideo.c index 1442607b1c9..1604adb611f 100644 --- a/vs/sdl2/src/video/raspberry/SDL_rpivideo.c +++ b/vs/sdl2/src/video/raspberry/SDL_rpivideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -56,7 +56,7 @@ static void RPI_Destroy(SDL_VideoDevice *device) SDL_free(device); } -static int RPI_GetRefreshRate() +static int RPI_GetRefreshRate(void) { TV_DISPLAY_STATE_T tvstate; if (vc_tv_get_display_state(&tvstate) == 0) { diff --git a/vs/sdl2/src/video/raspberry/SDL_rpivideo.h b/vs/sdl2/src/video/raspberry/SDL_rpivideo.h index e2ffe6f9fc0..66ea28ff9ed 100644 --- a/vs/sdl2/src/video/raspberry/SDL_rpivideo.h +++ b/vs/sdl2/src/video/raspberry/SDL_rpivideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -30,6 +30,14 @@ #include "EGL/egl.h" #include "EGL/eglext.h" +/* This must match the definition of EGL_DISPMANX_WINDOW_T in EGL/eglplatform.h, + and is defined here to allow compiling with standard headers. */ +typedef struct { + DISPMANX_ELEMENT_HANDLE_T element; + int width; + int height; +} SDL_EGL_DISPMANX_WINDOW_T; + typedef struct SDL_VideoData { uint32_t egl_refcount; /* OpenGL ES reference count */ @@ -42,7 +50,7 @@ typedef struct SDL_DisplayData typedef struct SDL_WindowData { - EGL_DISPMANX_WINDOW_T dispman_window; + SDL_EGL_DISPMANX_WINDOW_T dispman_window; #ifdef SDL_VIDEO_OPENGL_EGL EGLSurface egl_surface; #endif diff --git a/vs/sdl2/src/video/riscos/SDL_riscosdefs.h b/vs/sdl2/src/video/riscos/SDL_riscosdefs.h index 8a621c2094d..03a6af118be 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosdefs.h +++ b/vs/sdl2/src/video/riscos/SDL_riscosdefs.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/SDL_riscosevents.c b/vs/sdl2/src/video/riscos/SDL_riscosevents.c index cebb89f5bbb..f959f775407 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosevents.c +++ b/vs/sdl2/src/video/riscos/SDL_riscosevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/SDL_riscosevents_c.h b/vs/sdl2/src/video/riscos/SDL_riscosevents_c.h index 6f16b193caf..3b53d2575ac 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosevents_c.h +++ b/vs/sdl2/src/video/riscos/SDL_riscosevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/SDL_riscosframebuffer.c b/vs/sdl2/src/video/riscos/SDL_riscosframebuffer.c index ae128d3513b..72bb8f91d21 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosframebuffer.c +++ b/vs/sdl2/src/video/riscos/SDL_riscosframebuffer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/SDL_riscosframebuffer_c.h b/vs/sdl2/src/video/riscos/SDL_riscosframebuffer_c.h index e4f79ad3e7d..61aa9914522 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosframebuffer_c.h +++ b/vs/sdl2/src/video/riscos/SDL_riscosframebuffer_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/SDL_riscosmessagebox.c b/vs/sdl2/src/video/riscos/SDL_riscosmessagebox.c index 9d44e07b48f..e7dd11916d2 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosmessagebox.c +++ b/vs/sdl2/src/video/riscos/SDL_riscosmessagebox.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/SDL_riscosmessagebox.h b/vs/sdl2/src/video/riscos/SDL_riscosmessagebox.h index 09f9c76b94b..d56a64c4274 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosmessagebox.h +++ b/vs/sdl2/src/video/riscos/SDL_riscosmessagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/SDL_riscosmodes.c b/vs/sdl2/src/video/riscos/SDL_riscosmodes.c index 79f5fa39e55..4975d04af59 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosmodes.c +++ b/vs/sdl2/src/video/riscos/SDL_riscosmodes.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/SDL_riscosmodes.h b/vs/sdl2/src/video/riscos/SDL_riscosmodes.h index f523dd49396..c5347e01d2b 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosmodes.h +++ b/vs/sdl2/src/video/riscos/SDL_riscosmodes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/SDL_riscosmouse.c b/vs/sdl2/src/video/riscos/SDL_riscosmouse.c index 90c6de06b7e..c1cd0942ac0 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosmouse.c +++ b/vs/sdl2/src/video/riscos/SDL_riscosmouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/SDL_riscosmouse.h b/vs/sdl2/src/video/riscos/SDL_riscosmouse.h index e675d84f435..5c124148a23 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosmouse.h +++ b/vs/sdl2/src/video/riscos/SDL_riscosmouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/SDL_riscosvideo.c b/vs/sdl2/src/video/riscos/SDL_riscosvideo.c index 1550139b702..4e51ea0e325 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosvideo.c +++ b/vs/sdl2/src/video/riscos/SDL_riscosvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -90,6 +90,9 @@ static SDL_VideoDevice *RISCOS_CreateDevice(void) device->free = RISCOS_DeleteDevice; + /* TODO: Support windowed mode */ + device->quirk_flags = VIDEO_DEVICE_QUIRK_FULLSCREEN_ONLY; + return device; } diff --git a/vs/sdl2/src/video/riscos/SDL_riscosvideo.h b/vs/sdl2/src/video/riscos/SDL_riscosvideo.h index d014458fa0a..0734be2cdaf 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscosvideo.h +++ b/vs/sdl2/src/video/riscos/SDL_riscosvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/SDL_riscoswindow.c b/vs/sdl2/src/video/riscos/SDL_riscoswindow.c index 5a59c4994c4..5792d2f544f 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscoswindow.c +++ b/vs/sdl2/src/video/riscos/SDL_riscoswindow.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -41,8 +41,6 @@ int RISCOS_CreateWindow(_THIS, SDL_Window *window) } driverdata->window = window; - window->flags |= SDL_WINDOW_FULLSCREEN; - SDL_SetMouseFocus(window); /* All done! */ diff --git a/vs/sdl2/src/video/riscos/SDL_riscoswindow.h b/vs/sdl2/src/video/riscos/SDL_riscoswindow.h index 48d17baaac3..59cb5017505 100644 --- a/vs/sdl2/src/video/riscos/SDL_riscoswindow.h +++ b/vs/sdl2/src/video/riscos/SDL_riscoswindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/riscos/scancodes_riscos.h b/vs/sdl2/src/video/riscos/scancodes_riscos.h index 1caa33af0ee..79ed1468608 100644 --- a/vs/sdl2/src/video/riscos/scancodes_riscos.h +++ b/vs/sdl2/src/video/riscos/scancodes_riscos.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/sdlgenblit.pl b/vs/sdl2/src/video/sdlgenblit.pl index 4afef7a0d08..59774488c66 100755 --- a/vs/sdl2/src/video/sdlgenblit.pl +++ b/vs/sdl2/src/video/sdlgenblit.pl @@ -92,7 +92,7 @@ sub open_file { /* DO NOT EDIT! This file is generated by sdlgenblit.pl */ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitappdelegate.h b/vs/sdl2/src/video/uikit/SDL_uikitappdelegate.h index c40dae0795b..df3ff0fb962 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitappdelegate.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitappdelegate.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitappdelegate.m b/vs/sdl2/src/video/uikit/SDL_uikitappdelegate.m index 8fd4c71014e..31b114a9340 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitappdelegate.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitappdelegate.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -189,12 +189,14 @@ - (instancetype)init - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + NSString *screenname; + NSBundle *bundle; if (!(self = [super initWithNibName:nil bundle:nil])) { return nil; } - NSString *screenname = nibNameOrNil; - NSBundle *bundle = nibBundleOrNil; + screenname = nibNameOrNil; + bundle = nibBundleOrNil; /* A launch screen may not exist. Fall back to launch images in that case. */ if (screenname) { @@ -230,6 +232,10 @@ - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibB /* Xcode 5 introduced a dictionary of launch images in Info.plist. */ if (launchimages) { for (NSDictionary *dict in launchimages) { +#if !TARGET_OS_TV + UIInterfaceOrientationMask orientmask; + NSString *orientstring; +#endif NSString *minversion = dict[@"UILaunchImageMinimumOSVersion"]; NSString *sizestring = dict[@"UILaunchImageSize"]; @@ -247,8 +253,8 @@ - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibB } #if !TARGET_OS_TV - UIInterfaceOrientationMask orientmask = UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown; - NSString *orientstring = dict[@"UILaunchImageOrientation"]; + orientmask = UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown; + orientstring = dict[@"UILaunchImageOrientation"]; if (orientstring) { if ([orientstring isEqualToString:@"PortraitUpsideDown"]) { diff --git a/vs/sdl2/src/video/uikit/SDL_uikitclipboard.h b/vs/sdl2/src/video/uikit/SDL_uikitclipboard.h index ad267429328..e3e8fcc61f6 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitclipboard.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitclipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitclipboard.m b/vs/sdl2/src/video/uikit/SDL_uikitclipboard.m index b025697e17b..8bd3f978214 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitclipboard.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitclipboard.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitevents.h b/vs/sdl2/src/video/uikit/SDL_uikitevents.h index fae375918bc..dda1944fb29 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitevents.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitevents.m b/vs/sdl2/src/video/uikit/SDL_uikitevents.m index 938b70a7d7f..0a96c6821e3 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitevents.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitevents.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -110,10 +110,11 @@ - (void)applicationDidChangeStatusBarOrientation void SDL_iPhoneSetEventPump(SDL_bool enabled) { - UIKit_EventPumpEnabled = enabled; - static SDL_LifecycleObserver *lifecycleObserver; static dispatch_once_t onceToken; + + UIKit_EventPumpEnabled = enabled; + dispatch_once(&onceToken, ^{ lifecycleObserver = [SDL_LifecycleObserver new]; }); @@ -122,10 +123,6 @@ void SDL_iPhoneSetEventPump(SDL_bool enabled) void UIKit_PumpEvents(_THIS) { - if (!UIKit_EventPumpEnabled) { - return; - } - /* Let the run loop run for a short amount of time: long enough for touch events to get processed (which is important to get certain elements of Game Center's GKLeaderboardViewController to respond @@ -133,9 +130,12 @@ touch events to get processed (which is important to get certain delay in the rest of the app. */ const CFTimeInterval seconds = 0.000002; + SInt32 result; + if (!UIKit_EventPumpEnabled) { + return; + } /* Pump most event types. */ - SInt32 result; do { result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, seconds, TRUE); } while (result == kCFRunLoopRunHandledSource); @@ -159,13 +159,14 @@ touch events to get processed (which is important to get certain static void OnGCKeyboardConnected(GCKeyboard *keyboard) API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0)) { + dispatch_queue_t queue; keyboard_connected = SDL_TRUE; keyboard.keyboardInput.keyChangedHandler = ^(GCKeyboardInput *kbrd, GCControllerButtonInput *key, GCKeyCode keyCode, BOOL pressed) { SDL_SendKeyboardKey(pressed ? SDL_PRESSED : SDL_RELEASED, (SDL_Scancode)keyCode); }; - dispatch_queue_t queue = dispatch_queue_create( "org.libsdl.input.keyboard", DISPATCH_QUEUE_SERIAL ); + queue = dispatch_queue_create( "org.libsdl.input.keyboard", DISPATCH_QUEUE_SERIAL ); dispatch_set_target_queue( queue, dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_HIGH, 0 ) ); keyboard.handlerQueue = queue; } @@ -275,7 +276,7 @@ static void UpdateScrollDirection(void) /* Couldn't read the preference, assume natural scrolling direction */ naturalScrollDirection = YES; } - if (naturalScrollDirection) { + if (naturalScrollDirection) { mouse_scroll_direction = SDL_MOUSEWHEEL_FLIPPED; } else { mouse_scroll_direction = SDL_MOUSEWHEEL_NORMAL; @@ -307,6 +308,8 @@ static void OnGCMouseButtonChanged(SDL_MouseID mouseID, Uint8 button, BOOL press static void OnGCMouseConnected(GCMouse *mouse) API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0)) { + int auxiliary_button; + dispatch_queue_t queue; SDL_MouseID mouseID = mice_connected; mouse.mouseInput.leftButton.pressedChangedHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) @@ -322,7 +325,7 @@ static void OnGCMouseConnected(GCMouse *mouse) API_AVAILABLE(macos(11.0), ios(14 OnGCMouseButtonChanged(mouseID, SDL_BUTTON_RIGHT, pressed); }; - int auxiliary_button = SDL_BUTTON_X1; + auxiliary_button = SDL_BUTTON_X1; for (GCControllerButtonInput *btn in mouse.mouseInput.auxiliaryButtons) { btn.pressedChangedHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) { @@ -355,7 +358,7 @@ static void OnGCMouseConnected(GCMouse *mouse) API_AVAILABLE(macos(11.0), ios(14 }; UpdateScrollDirection(); - dispatch_queue_t queue = dispatch_queue_create( "org.libsdl.input.mouse", DISPATCH_QUEUE_SERIAL ); + queue = dispatch_queue_create( "org.libsdl.input.mouse", DISPATCH_QUEUE_SERIAL ); dispatch_set_target_queue( queue, dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_HIGH, 0 ) ); mouse.handlerQueue = queue; diff --git a/vs/sdl2/src/video/uikit/SDL_uikitmessagebox.h b/vs/sdl2/src/video/uikit/SDL_uikitmessagebox.h index 87239837063..4a9a4dc9866 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitmessagebox.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitmessagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitmessagebox.m b/vs/sdl2/src/video/uikit/SDL_uikitmessagebox.m index b68c0657e09..a28f1cf9802 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitmessagebox.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitmessagebox.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -56,12 +56,12 @@ static BOOL UIKit_ShowMessageBoxAlertController(const SDL_MessageBoxData *messag int __block clickedindex = messageboxdata->numbuttons; UIWindow *window = nil; UIWindow *alertwindow = nil; + UIAlertController *alert; if (![UIAlertController class]) { return NO; } - UIAlertController *alert; alert = [UIAlertController alertControllerWithTitle:@(messageboxdata->title) message:@(messageboxdata->message) preferredStyle:UIAlertControllerStyleAlert]; diff --git a/vs/sdl2/src/video/uikit/SDL_uikitmetalview.h b/vs/sdl2/src/video/uikit/SDL_uikitmetalview.h index 7a3060e7ea8..acc10fb9a3f 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitmetalview.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitmetalview.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitmetalview.m b/vs/sdl2/src/video/uikit/SDL_uikitmetalview.m index 5c41aa5b844..7c17d8d5d79 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitmetalview.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitmetalview.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitmodes.h b/vs/sdl2/src/video/uikit/SDL_uikitmodes.h index 38511a2991d..e5b103a38a2 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitmodes.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitmodes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitmodes.m b/vs/sdl2/src/video/uikit/SDL_uikitmodes.m index 47723070a14..97c59c250a1 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitmodes.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitmodes.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -34,13 +34,17 @@ @implementation SDL_DisplayData - (instancetype)initWithScreen:(UIScreen*)screen { if (self = [super init]) { + NSDictionary* devices; + struct utsname systemInfo; + NSString* deviceName; + id foundDPI; self.uiscreen = screen; /* * A well up to date list of device info can be found here: * https://github.com/lmirosevic/GBDeviceInfo/blob/master/GBDeviceInfo/GBDeviceInfo_iOS.m */ - NSDictionary* devices = @{ + devices = @{ @"iPhone1,1": @163, @"iPhone1,2": @163, @"iPhone2,1": @163, @@ -138,11 +142,10 @@ - (instancetype)initWithScreen:(UIScreen*)screen @"iPod9,1": @326, }; - struct utsname systemInfo; uname(&systemInfo); - NSString* deviceName = + deviceName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; - id foundDPI = devices[deviceName]; + foundDPI = devices[deviceName]; if (foundDPI) { self.screenDPI = (float)[foundDPI integerValue]; } else { @@ -296,6 +299,7 @@ int UIKit_AddDisplay(UIScreen *uiscreen, SDL_bool send_event) CGSize size = uiscreen.bounds.size; SDL_VideoDisplay display; SDL_DisplayMode mode; + SDL_DisplayData *data; SDL_zero(mode); /* Make sure the width/height are oriented correctly */ @@ -319,7 +323,7 @@ int UIKit_AddDisplay(UIScreen *uiscreen, SDL_bool send_event) display.current_mode = mode; /* Allocate the display data */ - SDL_DisplayData *data = [[SDL_DisplayData alloc] initWithScreen:uiscreen]; + data = [[SDL_DisplayData alloc] initWithScreen:uiscreen]; if (!data) { UIKit_FreeDisplayModeData(&display.desktop_mode); return SDL_OutOfMemory(); @@ -340,6 +344,7 @@ void UIKit_DelDisplay(UIScreen *uiscreen) if (data && data.uiscreen == uiscreen) { CFRelease(SDL_GetDisplayDriverData(i)); + SDL_GetDisplay(i)->driverdata = NULL; SDL_DelVideoDisplay(i); return; } @@ -494,10 +499,11 @@ int UIKit_GetDisplayUsableBounds(_THIS, SDL_VideoDisplay * display, SDL_Rect * r void UIKit_QuitModes(_THIS) { + int i, j; + [SDL_DisplayWatch stop]; /* Release Objective-C objects, so higher level doesn't free() them. */ - int i, j; @autoreleasepool { for (i = 0; i < _this->num_displays; i++) { SDL_VideoDisplay *display = &_this->displays[i]; diff --git a/vs/sdl2/src/video/uikit/SDL_uikitopengles.h b/vs/sdl2/src/video/uikit/SDL_uikitopengles.h index 00efc464ec7..0533f6970ec 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitopengles.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitopengles.m b/vs/sdl2/src/video/uikit/SDL_uikitopengles.m index 8713ae34014..988966d0646 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitopengles.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitopengles.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitopenglview.h b/vs/sdl2/src/video/uikit/SDL_uikitopenglview.h index d0eb0ac1040..70abdc9cd11 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitopenglview.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitopenglview.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitopenglview.m b/vs/sdl2/src/video/uikit/SDL_uikitopenglview.m index 145e8673fbf..c36f0601fa4 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitopenglview.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitopenglview.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -74,6 +74,7 @@ - (instancetype)initWithFrame:(CGRect)frame const BOOL useStencilBuffer = (stencilBits != 0); const BOOL useDepthBuffer = (depthBits != 0); NSString *colorFormat = nil; + CAEAGLLayer *eaglLayer; context = glcontext; samples = multisamples; @@ -105,7 +106,7 @@ - (instancetype)initWithFrame:(CGRect)frame colorBufferFormat = GL_RGB565; } - CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer; + eaglLayer = (CAEAGLLayer *)self.layer; eaglLayer.opaque = YES; eaglLayer.drawableProperties = @{ @@ -315,10 +316,13 @@ - (void)swapBuffers - (void)layoutSubviews { + int width; + int height; + [super layoutSubviews]; - int width = (int) (self.bounds.size.width * self.contentScaleFactor); - int height = (int) (self.bounds.size.height * self.contentScaleFactor); + width = (int) (self.bounds.size.width * self.contentScaleFactor); + height = (int) (self.bounds.size.height * self.contentScaleFactor); /* Update the color and depth buffer storage if the layer size has changed. */ if (width != backingWidth || height != backingHeight) { diff --git a/vs/sdl2/src/video/uikit/SDL_uikitvideo.h b/vs/sdl2/src/video/uikit/SDL_uikitvideo.h index 02a01104256..4d3b81a938f 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitvideo.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitvideo.m b/vs/sdl2/src/video/uikit/SDL_uikitvideo.m index f3257ea3f56..f7aa3fd1279 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitvideo.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitvideo.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -198,6 +198,11 @@ CGRect UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen) { SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; CGRect frame = screen.bounds; +#if !TARGET_OS_TV + UIInterfaceOrientation orient; + BOOL landscape; + BOOL fullscreen; +#endif /* Use the UIWindow bounds instead of the UIScreen bounds, when possible. * The uiwindow bounds may be smaller than the screen bounds when Split View @@ -215,10 +220,10 @@ CGRect UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen) * https://bugzilla.libsdl.org/show_bug.cgi?id=3505 * https://bugzilla.libsdl.org/show_bug.cgi?id=3465 * https://forums.developer.apple.com/thread/65337 */ - UIInterfaceOrientation orient = [UIApplication sharedApplication].statusBarOrientation; - BOOL landscape = UIInterfaceOrientationIsLandscape(orient) || + orient = [UIApplication sharedApplication].statusBarOrientation; + landscape = UIInterfaceOrientationIsLandscape(orient) || !(UIKit_GetSupportedOrientations(window) & (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown)); - BOOL fullscreen = CGRectEqualToRect(screen.bounds, frame); + fullscreen = CGRectEqualToRect(screen.bounds, frame); /* The orientation flip doesn't make sense when the window is smaller * than the screen (iPad Split View, for example). */ diff --git a/vs/sdl2/src/video/uikit/SDL_uikitview.h b/vs/sdl2/src/video/uikit/SDL_uikitview.h index c7fa8a8c31b..9c35e639e60 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitview.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitview.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitview.m b/vs/sdl2/src/video/uikit/SDL_uikitview.m index 63afa0942bb..676fedbdab4 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitview.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitview.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -53,20 +53,25 @@ - (instancetype)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { #if TARGET_OS_TV + UISwipeGestureRecognizer *swipeUp; + UISwipeGestureRecognizer *swipeDown; + UISwipeGestureRecognizer *swipeLeft; + UISwipeGestureRecognizer *swipeRight; + /* Apple TV Remote touchpad swipe gestures. */ - UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; + swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; swipeUp.direction = UISwipeGestureRecognizerDirectionUp; [self addGestureRecognizer:swipeUp]; - UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; + swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; swipeDown.direction = UISwipeGestureRecognizerDirectionDown; [self addGestureRecognizer:swipeDown]; - UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; + swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; [self addGestureRecognizer:swipeLeft]; - UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; + swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; swipeRight.direction = UISwipeGestureRecognizerDirectionRight; [self addGestureRecognizer:swipeRight]; #endif @@ -257,6 +262,7 @@ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event } #endif if (!handled) { + CGPoint locationInView; SDL_TouchDeviceType touchType = [self touchTypeForTouch:touch]; SDL_TouchID touchId = [self touchIdForType:touchType]; float pressure = [self pressureForTouch:touch]; @@ -267,7 +273,7 @@ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event /* FIXME, need to send: int clicks = (int) touch.tapCount; ? */ - CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES]; + locationInView = [self touchLocation:touch shouldNormalize:YES]; SDL_SendTouch(touchId, (SDL_FingerID)((size_t)touch), sdlwindow, SDL_TRUE, locationInView.x, locationInView.y, pressure); } @@ -312,6 +318,7 @@ - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event } #endif if (!handled) { + CGPoint locationInView; SDL_TouchDeviceType touchType = [self touchTypeForTouch:touch]; SDL_TouchID touchId = [self touchIdForType:touchType]; float pressure = [self pressureForTouch:touch]; @@ -322,7 +329,7 @@ - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event /* FIXME, need to send: int clicks = (int) touch.tapCount; ? */ - CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES]; + locationInView = [self touchLocation:touch shouldNormalize:YES]; SDL_SendTouch(touchId, (SDL_FingerID)((size_t)touch), sdlwindow, SDL_FALSE, locationInView.x, locationInView.y, pressure); } @@ -348,6 +355,7 @@ - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event } #endif if (!handled) { + CGPoint locationInView; SDL_TouchDeviceType touchType = [self touchTypeForTouch:touch]; SDL_TouchID touchId = [self touchIdForType:touchType]; float pressure = [self pressureForTouch:touch]; @@ -356,7 +364,7 @@ - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event continue; } - CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES]; + locationInView = [self touchLocation:touch shouldNormalize:YES]; SDL_SendTouchMotion(touchId, (SDL_FingerID)((size_t)touch), sdlwindow, locationInView.x, locationInView.y, pressure); } diff --git a/vs/sdl2/src/video/uikit/SDL_uikitviewcontroller.h b/vs/sdl2/src/video/uikit/SDL_uikitviewcontroller.h index 660e11c4eb2..1ae4633556e 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitviewcontroller.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitviewcontroller.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitviewcontroller.m b/vs/sdl2/src/video/uikit/SDL_uikitviewcontroller.m index 0d8052b7f02..dee4b197238 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitviewcontroller.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitviewcontroller.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -118,6 +118,20 @@ - (instancetype)initWithSDLWindow:(SDL_Window *)_window SDL_HideHomeIndicatorHintChanged, (__bridge void *) self); #endif + + /* Enable high refresh rates on iOS + * To enable this on phones, you should add the following line to Info.plist: + * CADisableMinimumFrameDurationOnPhone + */ + if (@available(iOS 15.0, tvOS 15.0, *)) { + SDL_DisplayMode mode; + if (SDL_GetDesktopDisplayMode(0, &mode) == 0 && mode.refresh_rate > 60.0f) { + int frame_rate = (int)mode.refresh_rate; + displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(doLoop:)]; + displayLink.preferredFrameRateRange = CAFrameRateRangeMake((frame_rate * 2) / 3, frame_rate, frame_rate); + [displayLink addToRunLoop:NSRunLoop.currentRunLoop forMode:NSDefaultRunLoopMode]; + } + } } return self; } @@ -147,6 +161,9 @@ - (void)setAnimationCallback:(int)interval { [self stopAnimation]; + if (interval <= 0) { + interval = 1; + } animationInterval = interval; animationCallback = callback; animationCallbackParam = callbackParam; @@ -158,10 +175,14 @@ - (void)setAnimationCallback:(int)interval - (void)startAnimation { +#ifdef __IPHONE_10_3 + SDL_WindowData *data; +#endif + displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(doLoop:)]; #ifdef __IPHONE_10_3 - SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; + data = (__bridge SDL_WindowData *) window->driverdata; if ([displayLink respondsToSelector:@selector(preferredFramesPerSecond)] && data != nil && data.uiwindow != nil @@ -187,7 +208,7 @@ - (void)stopAnimation - (void)doLoop:(CADisplayLink*)sender { /* Don't run the game loop while a messagebox is up */ - if (!UIKit_ShowingMessageBox()) { + if (animationCallback && !UIKit_ShowingMessageBox()) { /* See the comment in the function definition. */ #if defined(SDL_VIDEO_OPENGL_ES) || defined(SDL_VIDEO_OPENGL_ES2) UIKit_GL_RestoreCurrentContext(); @@ -269,6 +290,7 @@ - (BOOL)prefersPointerLocked /* Set ourselves up as a UITextFieldDelegate */ - (void)initKeyboard { + NSNotificationCenter *center; obligateForBackspace = @" "; /* 64 space */ textField = [[SDLUITextField alloc] initWithFrame:CGRectZero]; textField.delegate = self; @@ -288,7 +310,7 @@ - (void)initKeyboard textField.hidden = YES; keyboardVisible = NO; - NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + center = [NSNotificationCenter defaultCenter]; #if !TARGET_OS_TV [center addObserver:self selector:@selector(keyboardWillShow:) @@ -415,6 +437,9 @@ - (void)hideKeyboard - (void)keyboardWillShow:(NSNotification *)notification { BOOL shouldStartTextInput = NO; +#if !TARGET_OS_TV + CGRect kbrect; +#endif if (!SDL_IsTextInputActive() && !hidingKeyboard && !rotatingOrientation) { shouldStartTextInput = YES; @@ -422,7 +447,7 @@ - (void)keyboardWillShow:(NSNotification *)notification showingKeyboard = YES; #if !TARGET_OS_TV - CGRect kbrect = [[notification userInfo][UIKeyboardFrameEndUserInfoKey] CGRectValue]; + kbrect = [[notification userInfo][UIKeyboardFrameEndUserInfoKey] CGRectValue]; /* The keyboard rect is in the coordinate space of the screen/window, but we * want its height in the coordinate space of the view. */ @@ -568,12 +593,13 @@ - (BOOL)textFieldShouldReturn:(UITextField*)_textField static SDL_uikitviewcontroller *GetWindowViewController(SDL_Window * window) { + SDL_WindowData *data; if (!window || !window->driverdata) { SDL_SetError("Invalid window"); return nil; } - SDL_WindowData *data = (__bridge SDL_WindowData *)window->driverdata; + data = (__bridge SDL_WindowData *)window->driverdata; return data.viewcontroller; } diff --git a/vs/sdl2/src/video/uikit/SDL_uikitvulkan.h b/vs/sdl2/src/video/uikit/SDL_uikitvulkan.h index fe558f91aee..af436c4645e 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitvulkan.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitvulkan.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitvulkan.m b/vs/sdl2/src/video/uikit/SDL_uikitvulkan.m index c0dfd29d2c5..01cfd7ecf83 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitvulkan.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitvulkan.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitwindow.h b/vs/sdl2/src/video/uikit/SDL_uikitwindow.h index bf79ee159d2..7dd90acd53e 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitwindow.h +++ b/vs/sdl2/src/video/uikit/SDL_uikitwindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/uikit/SDL_uikitwindow.m b/vs/sdl2/src/video/uikit/SDL_uikitwindow.m index ff3cb859db6..0e0ea0577e6 100644 --- a/vs/sdl2/src/video/uikit/SDL_uikitwindow.m +++ b/vs/sdl2/src/video/uikit/SDL_uikitwindow.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -155,6 +155,10 @@ int UIKit_CreateWindow(_THIS, SDL_Window *window) SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); SDL_DisplayData *data = (__bridge SDL_DisplayData *) display->driverdata; SDL_Window *other; + UIWindow *uiwindow; +#if !TARGET_OS_TV + const CGSize origsize = data.uiscreen.currentMode.size; +#endif /* We currently only handle a single window per display on iOS */ for (other = _this->windows; other; other = other->next) { @@ -167,14 +171,13 @@ int UIKit_CreateWindow(_THIS, SDL_Window *window) * user, so it's in standby), try to force the display to a resolution * that most closely matches the desired window size. */ #if !TARGET_OS_TV - const CGSize origsize = data.uiscreen.currentMode.size; if ((origsize.width == 0.0f) && (origsize.height == 0.0f)) { + int i; + const SDL_DisplayMode *bestmode = NULL; if (display->num_display_modes == 0) { _this->GetDisplayModes(_this, display); } - int i; - const SDL_DisplayMode *bestmode = NULL; for (i = display->num_display_modes; i >= 0; i--) { const SDL_DisplayMode *mode = &display->display_modes[i]; if ((mode->w >= window->w) && (mode->h >= window->h)) { @@ -204,7 +207,7 @@ int UIKit_CreateWindow(_THIS, SDL_Window *window) /* ignore the size user requested, and make a fullscreen window */ /* !!! FIXME: can we have a smaller view? */ - UIWindow *uiwindow = [[SDL_uikitwindow alloc] initWithFrame:data.uiscreen.bounds]; + uiwindow = [[SDL_uikitwindow alloc] initWithFrame:data.uiscreen.bounds]; /* put the window on an external display if appropriate. */ if (data.uiscreen != [UIScreen mainScreen]) { @@ -230,12 +233,14 @@ void UIKit_SetWindowTitle(_THIS, SDL_Window * window) void UIKit_ShowWindow(_THIS, SDL_Window * window) { @autoreleasepool { + SDL_VideoDisplay *display; + SDL_DisplayData *displaydata; SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; [data.uiwindow makeKeyAndVisible]; /* Make this window the current mouse focus for touch input */ - SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); - SDL_DisplayData *displaydata = (__bridge SDL_DisplayData *) display->driverdata; + display = SDL_GetDisplayForWindow(window); + displaydata = (__bridge SDL_DisplayData *) display->driverdata; if (displaydata.uiscreen == [UIScreen mainScreen]) { SDL_SetMouseFocus(window); SDL_SetKeyboardFocus(window); @@ -476,7 +481,7 @@ NSUInteger UIKit_GetSupportedOrientations(SDL_Window * window) } #endif /* !TARGET_OS_TV */ -int SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam) +int SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, SDL_iOSAnimationCallback callback, void *callbackParam) { if (!window || !window->driverdata) { return SDL_SetError("Invalid window"); diff --git a/vs/sdl2/src/video/vita/SDL_vitaframebuffer.c b/vs/sdl2/src/video/vita/SDL_vitaframebuffer.c index 56069b29ccd..c0f9d9e8cd9 100644 --- a/vs/sdl2/src/video/vita/SDL_vitaframebuffer.c +++ b/vs/sdl2/src/video/vita/SDL_vitaframebuffer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitaframebuffer.h b/vs/sdl2/src/video/vita/SDL_vitaframebuffer.h index 495d51b8134..cb6d317c121 100644 --- a/vs/sdl2/src/video/vita/SDL_vitaframebuffer.h +++ b/vs/sdl2/src/video/vita/SDL_vitaframebuffer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitagl_pvr.c b/vs/sdl2/src/video/vita/SDL_vitagl_pvr.c index 5e148f967fa..f9845776ab1 100644 --- a/vs/sdl2/src/video/vita/SDL_vitagl_pvr.c +++ b/vs/sdl2/src/video/vita/SDL_vitagl_pvr.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitagl_pvr_c.h b/vs/sdl2/src/video/vita/SDL_vitagl_pvr_c.h index fee3d30fb57..083ebac706a 100644 --- a/vs/sdl2/src/video/vita/SDL_vitagl_pvr_c.h +++ b/vs/sdl2/src/video/vita/SDL_vitagl_pvr_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitagles.c b/vs/sdl2/src/video/vita/SDL_vitagles.c index 1944112f7f4..d3edcecd53d 100644 --- a/vs/sdl2/src/video/vita/SDL_vitagles.c +++ b/vs/sdl2/src/video/vita/SDL_vitagles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitagles_c.h b/vs/sdl2/src/video/vita/SDL_vitagles_c.h index 6dcc651472d..a86e43b31ed 100644 --- a/vs/sdl2/src/video/vita/SDL_vitagles_c.h +++ b/vs/sdl2/src/video/vita/SDL_vitagles_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitagles_pvr.c b/vs/sdl2/src/video/vita/SDL_vitagles_pvr.c index cf917af7206..066e466a9dc 100644 --- a/vs/sdl2/src/video/vita/SDL_vitagles_pvr.c +++ b/vs/sdl2/src/video/vita/SDL_vitagles_pvr.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitagles_pvr_c.h b/vs/sdl2/src/video/vita/SDL_vitagles_pvr_c.h index 2815057b1e5..53788657dac 100644 --- a/vs/sdl2/src/video/vita/SDL_vitagles_pvr_c.h +++ b/vs/sdl2/src/video/vita/SDL_vitagles_pvr_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitakeyboard.c b/vs/sdl2/src/video/vita/SDL_vitakeyboard.c index 038e0ff37f6..a110661ae9c 100644 --- a/vs/sdl2/src/video/vita/SDL_vitakeyboard.c +++ b/vs/sdl2/src/video/vita/SDL_vitakeyboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitakeyboard.h b/vs/sdl2/src/video/vita/SDL_vitakeyboard.h index 3ea646592e5..d63e77cf5cb 100644 --- a/vs/sdl2/src/video/vita/SDL_vitakeyboard.h +++ b/vs/sdl2/src/video/vita/SDL_vitakeyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitamessagebox.c b/vs/sdl2/src/video/vita/SDL_vitamessagebox.c index 6811748c802..f78c9700bc5 100644 --- a/vs/sdl2/src/video/vita/SDL_vitamessagebox.c +++ b/vs/sdl2/src/video/vita/SDL_vitamessagebox.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitamessagebox.h b/vs/sdl2/src/video/vita/SDL_vitamessagebox.h index 15aeb6d1ee3..5d54168972a 100644 --- a/vs/sdl2/src/video/vita/SDL_vitamessagebox.h +++ b/vs/sdl2/src/video/vita/SDL_vitamessagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitamouse.c b/vs/sdl2/src/video/vita/SDL_vitamouse.c index 47fa095bbfe..4c53406ff9f 100644 --- a/vs/sdl2/src/video/vita/SDL_vitamouse.c +++ b/vs/sdl2/src/video/vita/SDL_vitamouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -73,12 +73,28 @@ void VITA_PollMouse(void) else SDL_SendMouseButton(Vita_Window, 0, SDL_PRESSED, SDL_BUTTON_MIDDLE); } + if (changed_buttons & 0x8) { + if (prev_buttons & 0x8) + SDL_SendMouseButton(Vita_Window, 0, SDL_RELEASED, SDL_BUTTON_X1); + else + SDL_SendMouseButton(Vita_Window, 0, SDL_PRESSED, SDL_BUTTON_X1); + } + if (changed_buttons & 0x10) { + if (prev_buttons & 0x10) + SDL_SendMouseButton(Vita_Window, 0, SDL_RELEASED, SDL_BUTTON_X2); + else + SDL_SendMouseButton(Vita_Window, 0, SDL_PRESSED, SDL_BUTTON_X2); + } prev_buttons = m_reports[i].buttons; if (m_reports[i].rel_x || m_reports[i].rel_y) { SDL_SendMouseMotion(Vita_Window, 0, 1, m_reports[i].rel_x, m_reports[i].rel_y); } + + if (m_reports[i].tilt != 0 || m_reports[i].wheel != 0) { + SDL_SendMouseWheel(Vita_Window, 0, m_reports[i].tilt, m_reports[i].wheel, SDL_MOUSEWHEEL_NORMAL); + } } } } diff --git a/vs/sdl2/src/video/vita/SDL_vitamouse_c.h b/vs/sdl2/src/video/vita/SDL_vitamouse_c.h index 281a611cc78..4104eb6fd9a 100644 --- a/vs/sdl2/src/video/vita/SDL_vitamouse_c.h +++ b/vs/sdl2/src/video/vita/SDL_vitamouse_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitatouch.c b/vs/sdl2/src/video/vita/SDL_vitatouch.c index 07cbedebec2..62d297716fd 100644 --- a/vs/sdl2/src/video/vita/SDL_vitatouch.c +++ b/vs/sdl2/src/video/vita/SDL_vitatouch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -70,8 +70,8 @@ void VITA_InitTouch(void) } // Support passing both front and back touch devices in events - SDL_AddTouch((SDL_TouchID)0, SDL_TOUCH_DEVICE_DIRECT, "Front"); - SDL_AddTouch((SDL_TouchID)1, SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE, "Back"); + SDL_AddTouch((SDL_TouchID)1, SDL_TOUCH_DEVICE_DIRECT, "Front"); + SDL_AddTouch((SDL_TouchID)2, SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE, "Back"); } void VITA_QuitTouch(void) @@ -123,7 +123,7 @@ void VITA_PollTouch(void) // Skip if finger was already previously down if (!finger_down) { // Send an initial touch - SDL_SendTouch((SDL_TouchID)port, + SDL_SendTouch((SDL_TouchID)(port + 1), finger_id, Vita_Window, SDL_TRUE, @@ -133,7 +133,7 @@ void VITA_PollTouch(void) } // Always send the motion - SDL_SendTouchMotion((SDL_TouchID)port, + SDL_SendTouchMotion((SDL_TouchID)(port + 1), finger_id, Vita_Window, x, @@ -160,7 +160,7 @@ void VITA_PollTouch(void) VITA_ConvertTouchXYToSDLXY(&x, &y, touch_old[port].report[i].x, touch_old[port].report[i].y, port); finger_id = (SDL_FingerID)touch_old[port].report[i].id; // Finger released from screen - SDL_SendTouch((SDL_TouchID)port, + SDL_SendTouch((SDL_TouchID)(port + 1), finger_id, Vita_Window, SDL_FALSE, diff --git a/vs/sdl2/src/video/vita/SDL_vitatouch.h b/vs/sdl2/src/video/vita/SDL_vitatouch.h index 29369dcea6f..62cd28d7f5e 100644 --- a/vs/sdl2/src/video/vita/SDL_vitatouch.h +++ b/vs/sdl2/src/video/vita/SDL_vitatouch.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitavideo.c b/vs/sdl2/src/video/vita/SDL_vitavideo.c index 9b8839d2c97..afa9b54a61f 100644 --- a/vs/sdl2/src/video/vita/SDL_vitavideo.c +++ b/vs/sdl2/src/video/vita/SDL_vitavideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vita/SDL_vitavideo.h b/vs/sdl2/src/video/vita/SDL_vitavideo.h index 5f234591604..defc5458b8a 100644 --- a/vs/sdl2/src/video/vita/SDL_vitavideo.h +++ b/vs/sdl2/src/video/vita/SDL_vitavideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vivante/SDL_vivanteopengles.c b/vs/sdl2/src/video/vivante/SDL_vivanteopengles.c index e088cf470f0..1939c74a8f2 100644 --- a/vs/sdl2/src/video/vivante/SDL_vivanteopengles.c +++ b/vs/sdl2/src/video/vivante/SDL_vivanteopengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vivante/SDL_vivanteopengles.h b/vs/sdl2/src/video/vivante/SDL_vivanteopengles.h index 7dc55c22327..d302bc836e7 100644 --- a/vs/sdl2/src/video/vivante/SDL_vivanteopengles.h +++ b/vs/sdl2/src/video/vivante/SDL_vivanteopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vivante/SDL_vivanteplatform.c b/vs/sdl2/src/video/vivante/SDL_vivanteplatform.c index cf4b5ac4576..7c178898046 100644 --- a/vs/sdl2/src/video/vivante/SDL_vivanteplatform.c +++ b/vs/sdl2/src/video/vivante/SDL_vivanteplatform.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vivante/SDL_vivanteplatform.h b/vs/sdl2/src/video/vivante/SDL_vivanteplatform.h index 19e8e3e6023..bcf7c8d6fe9 100644 --- a/vs/sdl2/src/video/vivante/SDL_vivanteplatform.h +++ b/vs/sdl2/src/video/vivante/SDL_vivanteplatform.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vivante/SDL_vivantevideo.c b/vs/sdl2/src/video/vivante/SDL_vivantevideo.c index a501f65b60b..bcfa365fdc4 100644 --- a/vs/sdl2/src/video/vivante/SDL_vivantevideo.c +++ b/vs/sdl2/src/video/vivante/SDL_vivantevideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vivante/SDL_vivantevideo.h b/vs/sdl2/src/video/vivante/SDL_vivantevideo.h index 03dcb7e9edf..dc1bab0e7d9 100644 --- a/vs/sdl2/src/video/vivante/SDL_vivantevideo.h +++ b/vs/sdl2/src/video/vivante/SDL_vivantevideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vivante/SDL_vivantevulkan.c b/vs/sdl2/src/video/vivante/SDL_vivantevulkan.c index ce1e80cad03..f53b31401a4 100644 --- a/vs/sdl2/src/video/vivante/SDL_vivantevulkan.c +++ b/vs/sdl2/src/video/vivante/SDL_vivantevulkan.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/vivante/SDL_vivantevulkan.h b/vs/sdl2/src/video/vivante/SDL_vivantevulkan.h index 4fb69641830..e1763358a89 100644 --- a/vs/sdl2/src/video/vivante/SDL_vivantevulkan.h +++ b/vs/sdl2/src/video/vivante/SDL_vivantevulkan.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylandclipboard.c b/vs/sdl2/src/video/wayland/SDL_waylandclipboard.c index fc3d285cfb0..38f45498768 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandclipboard.c +++ b/vs/sdl2/src/video/wayland/SDL_waylandclipboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylandclipboard.h b/vs/sdl2/src/video/wayland/SDL_waylandclipboard.h index 012bf822208..64c33ab1930 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandclipboard.h +++ b/vs/sdl2/src/video/wayland/SDL_waylandclipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylanddatamanager.c b/vs/sdl2/src/video/wayland/SDL_waylanddatamanager.c index 8839e235c93..cece2427ec9 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylanddatamanager.c +++ b/vs/sdl2/src/video/wayland/SDL_waylanddatamanager.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -40,6 +40,48 @@ */ #define PIPE_MS_TIMEOUT 14 +/* sigtimedwait() is an optional part of POSIX.1-2001, and OpenBSD doesn't implement it. + * Based on https://comp.unix.programmer.narkive.com/rEDH0sPT/sigtimedwait-implementation + */ +#ifndef HAVE_SIGTIMEDWAIT +#include +#include +static int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout) +{ + struct timespec elapsed = { 0 }, rem = { 0 }; + sigset_t pending; + int signo; + do { + /* Check the pending signals, and call sigwait if there is at least one of interest in the set. */ + sigpending(&pending); + for (signo = 1; signo < NSIG; ++signo) { + if (sigismember(set, signo) && sigismember(&pending, signo)) { + if (!sigwait(set, &signo)) { + if (info) { + SDL_memset(info, 0, sizeof *info); + info->si_signo = signo; + } + return signo; + } else { + return -1; + } + } + } + + if (timeout->tv_sec || timeout->tv_nsec) { + long ns = 20000000L; // 2/100ths of a second + nanosleep(&(struct timespec){ 0, ns }, &rem); + ns -= rem.tv_nsec; + elapsed.tv_sec += (elapsed.tv_nsec + ns) / 1000000000L; + elapsed.tv_nsec = (elapsed.tv_nsec + ns) % 1000000000L; + } + } while (elapsed.tv_sec < timeout->tv_sec || (elapsed.tv_sec == timeout->tv_sec && elapsed.tv_nsec < timeout->tv_nsec)); + + errno = EAGAIN; + return -1; +} +#endif + static ssize_t write_pipe(int fd, const void *buffer, size_t total_length, size_t *pos) { int ready = 0; @@ -75,7 +117,7 @@ static ssize_t write_pipe(int fd, const void *buffer, size_t total_length, size_ } } - sigtimedwait(&sig_set, 0, &zerotime); + sigtimedwait(&sig_set, NULL, &zerotime); #ifdef SDL_THREADS_DISABLED sigprocmask(SIG_SETMASK, &old_sig_set, NULL); diff --git a/vs/sdl2/src/video/wayland/SDL_waylanddatamanager.h b/vs/sdl2/src/video/wayland/SDL_waylanddatamanager.h index 496de21dfd6..f48bb82e7f0 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylanddatamanager.h +++ b/vs/sdl2/src/video/wayland/SDL_waylanddatamanager.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylanddyn.c b/vs/sdl2/src/video/wayland/SDL_waylanddyn.c index f7d501ac7f0..81f7904d908 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylanddyn.c +++ b/vs/sdl2/src/video/wayland/SDL_waylanddyn.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylanddyn.h b/vs/sdl2/src/video/wayland/SDL_waylanddyn.h index 6feb343912b..e86375ac943 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylanddyn.h +++ b/vs/sdl2/src/video/wayland/SDL_waylanddyn.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylandevents.c b/vs/sdl2/src/video/wayland/SDL_waylandevents.c index 9e9c3934022..496bb5e8feb 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandevents.c +++ b/vs/sdl2/src/video/wayland/SDL_waylandevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -64,6 +64,7 @@ #include #include "../../events/imKStoUCS.h" #include "../../events/SDL_keysym_to_scancode_c.h" +#include "cursor-shape-v1-client-protocol.h" /* Clamp the wl_seat version on older versions of libwayland. */ #if SDL_WAYLAND_CHECK_VERSION(1, 21, 0) @@ -178,6 +179,17 @@ static SDL_bool Wayland_SurfaceHasActiveTouches(struct wl_surface *surface) return SDL_FALSE; } +void Wayland_CreateCursorShapeDevice(struct SDL_WaylandInput *input) +{ + SDL_VideoData *viddata = input->display; + + if (viddata->cursor_shape_manager) { + if (input->pointer && !input->cursor_shape) { + input->cursor_shape = wp_cursor_shape_manager_v1_get_pointer(viddata->cursor_shape_manager, input->pointer); + } + } +} + /* Returns SDL_TRUE if a key repeat event was due */ static SDL_bool keyboard_repeat_handle(SDL_WaylandKeyboardRepeat *repeat_info, uint32_t elapsed) { @@ -248,12 +260,25 @@ static SDL_bool keyboard_repeat_key_is_set(SDL_WaylandKeyboardRepeat *repeat_inf return repeat_info->is_initialized && repeat_info->is_key_down && key == repeat_info->key; } +static void sync_done_handler(void *data, struct wl_callback *callback, uint32_t callback_data) +{ + /* Nothing to do, just destroy the callback */ + wl_callback_destroy(callback); +} + +static struct wl_callback_listener sync_listener = { + sync_done_handler +}; + void Wayland_SendWakeupEvent(_THIS, SDL_Window *window) { SDL_VideoData *d = _this->driverdata; - /* TODO: Maybe use a pipe to avoid the compositor roundtrip? */ - wl_display_sync(d->display); + /* Queue a sync event to unblock the event queue fd if it's empty and being waited on. + * TODO: Maybe use a pipe to avoid the compositor roundtrip? + */ + struct wl_callback *cb = wl_display_sync(d->display); + wl_callback_add_listener(cb, &sync_listener, NULL); WAYLAND_wl_display_flush(d->display); } @@ -907,6 +932,28 @@ static void touch_handler_frame(void *data, struct wl_touch *touch) static void touch_handler_cancel(void *data, struct wl_touch *touch) { + struct SDL_WaylandTouchPoint *tp; + while ((tp = touch_points.head)) { + wl_fixed_t fx = 0, fy = 0; + struct wl_surface *surface = NULL; + int id = tp->id; + + touch_del(id, &fx, &fy, &surface); + + if (surface) { + SDL_WindowData *window_data = (SDL_WindowData *)wl_surface_get_user_data(surface); + + if (window_data) { + const double dblx = wl_fixed_to_double(fx) * window_data->pointer_scale_x; + const double dbly = wl_fixed_to_double(fy) * window_data->pointer_scale_y; + const float x = dblx / window_data->sdlwindow->w; + const float y = dbly / window_data->sdlwindow->h; + + SDL_SendTouch((SDL_TouchID)(intptr_t)touch, (SDL_FingerID)id, + window_data->sdlwindow, SDL_FALSE, x, y, 1.0f); + } + } + } } static const struct wl_touch_listener touch_listener = { @@ -1293,10 +1340,8 @@ static void keyboard_handle_key(void *data, struct wl_keyboard *keyboard, keyboard_input_get_text(text, input, key, SDL_RELEASED, &handled_by_ime); } - if (!handled_by_ime) { - scancode = Wayland_get_scancode_from_key(input, key + 8); - SDL_SendKeyboardKey(state == WL_KEYBOARD_KEY_STATE_PRESSED ? SDL_PRESSED : SDL_RELEASED, scancode); - } + scancode = Wayland_get_scancode_from_key(input, key + 8); + SDL_SendKeyboardKey(state == WL_KEYBOARD_KEY_STATE_PRESSED ? SDL_PRESSED : SDL_RELEASED, scancode); Wayland_data_device_set_serial(input->data_device, serial); Wayland_primary_selection_device_set_serial(input->primary_selection_device, serial); @@ -1395,10 +1440,15 @@ static void seat_handle_capabilities(void *data, struct wl_seat *seat, input->pointer = wl_seat_get_pointer(seat); SDL_memset(&input->pointer_curr_axis_info, 0, sizeof(input->pointer_curr_axis_info)); input->display->pointer = input->pointer; + Wayland_CreateCursorShapeDevice(input); wl_pointer_set_user_data(input->pointer, input); wl_pointer_add_listener(input->pointer, &pointer_listener, input); } else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && input->pointer) { + if (input->cursor_shape) { + wp_cursor_shape_device_v1_destroy(input->cursor_shape); + input->cursor_shape = NULL; + } wl_pointer_destroy(input->pointer); input->pointer = NULL; input->display->pointer = NULL; @@ -2134,6 +2184,18 @@ void Wayland_add_primary_selection_device_manager(SDL_VideoData *d, uint32_t id, void Wayland_add_text_input_manager(SDL_VideoData *d, uint32_t id, uint32_t version) { +#ifdef HAVE_FCITX + const char *im_module = SDL_getenv("SDL_IM_MODULE"); + if (im_module && SDL_strcmp(im_module, "fcitx") == 0) { + /* Override the Wayland text-input protocol when Fcitx is enabled, like how GTK_IM_MODULE does. + * + * The Fcitx wiki discourages enabling it under Wayland via SDL_IM_MODULE, so its presence must + * be intentional, and this workaround is needed for fixing key repeat detection. + */ + return; + } +#endif + d->text_input_manager = wl_registry_bind(d->registry, id, &zwp_text_input_manager_v3_interface, 1); if (d->input) { @@ -2522,6 +2584,9 @@ void Wayland_display_destroy_input(SDL_VideoData *d) if (input->primary_selection_device->selection_offer) { Wayland_primary_selection_offer_destroy(input->primary_selection_device->selection_offer); } + if (input->primary_selection_device->primary_selection_device) { + zwp_primary_selection_device_v1_destroy(input->primary_selection_device->primary_selection_device); + } SDL_free(input->primary_selection_device); } @@ -2534,6 +2599,10 @@ void Wayland_display_destroy_input(SDL_VideoData *d) wl_keyboard_destroy(input->keyboard); } + if (input->cursor_shape) { + wp_cursor_shape_device_v1_destroy(input->cursor_shape); + } + if (input->pointer) { wl_pointer_destroy(input->pointer); } diff --git a/vs/sdl2/src/video/wayland/SDL_waylandevents_c.h b/vs/sdl2/src/video/wayland/SDL_waylandevents_c.h index d69888c8227..b2b7890f0ae 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandevents_c.h +++ b/vs/sdl2/src/video/wayland/SDL_waylandevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -92,6 +92,7 @@ struct SDL_WaylandInput SDL_WaylandDataDevice *data_device; SDL_WaylandPrimarySelectionDevice *primary_selection_device; SDL_WaylandTextInput *text_input; + struct wp_cursor_shape_device_v1 *cursor_shape; struct zwp_relative_pointer_v1 *relative_pointer; SDL_WindowData *pointer_focus; SDL_WindowData *keyboard_focus; @@ -175,6 +176,8 @@ extern int Wayland_input_ungrab_keyboard(SDL_Window *window); extern void Wayland_input_add_tablet(struct SDL_WaylandInput *input, struct SDL_WaylandTabletManager *tablet_manager); extern void Wayland_input_destroy_tablet(struct SDL_WaylandInput *input); +extern void Wayland_CreateCursorShapeDevice(struct SDL_WaylandInput *input); + #endif /* SDL_waylandevents_h_ */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/src/video/wayland/SDL_waylandkeyboard.c b/vs/sdl2/src/video/wayland/SDL_waylandkeyboard.c index df0f865c0bb..46ac0528a9d 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandkeyboard.c +++ b/vs/sdl2/src/video/wayland/SDL_waylandkeyboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -54,25 +54,13 @@ void Wayland_QuitKeyboard(_THIS) void Wayland_StartTextInput(_THIS) { SDL_VideoData *driverdata = _this->driverdata; + struct SDL_WaylandInput *input = driverdata->input; if (driverdata->text_input_manager) { - struct SDL_WaylandInput *input = driverdata->input; if (input && input->text_input) { const SDL_Rect *rect = &input->text_input->cursor_rect; - /* Don't re-enable if we're already enabled. */ - if (input->text_input->is_enabled) { - return; - } - - /* For some reason this has to be done twice, it appears to be a - * bug in mutter? Maybe? - * -flibit - */ zwp_text_input_v3_enable(input->text_input->text_input); - zwp_text_input_v3_commit(input->text_input->text_input); - zwp_text_input_v3_enable(input->text_input->text_input); - zwp_text_input_v3_commit(input->text_input->text_input); /* Now that it's enabled, set the input properties */ zwp_text_input_v3_set_content_type(input->text_input->text_input, @@ -87,29 +75,36 @@ void Wayland_StartTextInput(_THIS) rect->h); } zwp_text_input_v3_commit(input->text_input->text_input); - input->text_input->is_enabled = SDL_TRUE; } } + + if (input && input->xkb.compose_state) { + /* Reset compose state so composite and dead keys don't carry over */ + WAYLAND_xkb_compose_state_reset(input->xkb.compose_state); + } } void Wayland_StopTextInput(_THIS) { SDL_VideoData *driverdata = _this->driverdata; + struct SDL_WaylandInput *input = driverdata->input; if (driverdata->text_input_manager) { - struct SDL_WaylandInput *input = driverdata->input; if (input && input->text_input) { zwp_text_input_v3_disable(input->text_input->text_input); zwp_text_input_v3_commit(input->text_input->text_input); - input->text_input->is_enabled = SDL_FALSE; } } - #ifdef SDL_USE_IME else { SDL_IME_Reset(); } #endif + + if (input && input->xkb.compose_state) { + /* Reset compose state so composite and dead keys don't carry over */ + WAYLAND_xkb_compose_state_reset(input->xkb.compose_state); + } } void Wayland_SetTextInputRect(_THIS, const SDL_Rect *rect) diff --git a/vs/sdl2/src/video/wayland/SDL_waylandkeyboard.h b/vs/sdl2/src/video/wayland/SDL_waylandkeyboard.h index 6a0fccda1fb..8fb7448c05d 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandkeyboard.h +++ b/vs/sdl2/src/video/wayland/SDL_waylandkeyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,7 +28,6 @@ typedef struct SDL_WaylandTextInput struct zwp_text_input_v3 *text_input; SDL_Rect cursor_rect; SDL_bool has_preedit; - SDL_bool is_enabled; } SDL_WaylandTextInput; extern int Wayland_InitKeyboard(_THIS); diff --git a/vs/sdl2/src/video/wayland/SDL_waylandmessagebox.c b/vs/sdl2/src/video/wayland/SDL_waylandmessagebox.c index 2fea3decebf..1744dbda858 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandmessagebox.c +++ b/vs/sdl2/src/video/wayland/SDL_waylandmessagebox.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylandmessagebox.h b/vs/sdl2/src/video/wayland/SDL_waylandmessagebox.h index 2193a6bf8f4..87284d2c42c 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandmessagebox.h +++ b/vs/sdl2/src/video/wayland/SDL_waylandmessagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylandmouse.c b/vs/sdl2/src/video/wayland/SDL_waylandmouse.c index 4b7264588dd..bf1bf9b8d36 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandmouse.c +++ b/vs/sdl2/src/video/wayland/SDL_waylandmouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,10 +25,7 @@ #include #include -#include -#include #include -#include #include "../SDL_sysvideo.h" @@ -40,6 +37,9 @@ #include "wayland-cursor.h" #include "SDL_waylandmouse.h" +#include "SDL_waylandshmbuffer.h" + +#include "cursor-shape-v1-client-protocol.h" #include "SDL_hints.h" #include "../../SDL_hints_c.h" @@ -48,7 +48,7 @@ static int Wayland_SetRelativeMouseMode(SDL_bool enabled); typedef struct { - struct wl_buffer *buffer; + struct Wayland_SHMBuffer shmBuffer; struct wl_surface *surface; int hot_x, hot_y; @@ -58,8 +58,6 @@ typedef struct * When shm_data is NULL, system_cursor must be valid */ SDL_SystemCursor system_cursor; - void *shm_data; - size_t shm_data_size; } Wayland_CursorData; #ifdef SDL_USE_LIBDBUS @@ -192,7 +190,6 @@ static SDL_bool wayland_get_system_cursor(SDL_VideoData *vdata, Wayland_CursorDa int size = 0; SDL_Window *focus; - SDL_WindowData *focusdata; int i; /* @@ -216,16 +213,17 @@ static SDL_bool wayland_get_system_cursor(SDL_VideoData *vdata, Wayland_CursorDa } /* First, find the appropriate theme based on the current scale... */ focus = SDL_GetMouse()->focus; - if (!focus) { - /* Nothing to see here, bail. */ - return SDL_FALSE; + if (focus) { + SDL_WindowData *focusdata = (SDL_WindowData*)focus->driverdata; + + /* Cursors use integer scaling. */ + *scale = SDL_ceilf(focusdata->scale_factor); + } else { + *scale = 1.0f; } - focusdata = focus->driverdata; - /* Cursors use integer scaling. */ - *scale = SDL_ceilf(focusdata->scale_factor); - size *= *scale; - for (i = 0; i < vdata->num_cursor_themes; i += 1) { + size *= (int)*scale; + for (i = 0; i < vdata->num_cursor_themes; ++i) { if (vdata->cursor_themes[i].size == size) { theme = vdata->cursor_themes[i].theme; break; @@ -283,7 +281,7 @@ static SDL_bool wayland_get_system_cursor(SDL_VideoData *vdata, Wayland_CursorDa } /* ... Set the cursor data, finally. */ - cdata->buffer = WAYLAND_wl_cursor_image_get_buffer(cursor->images[0]); + cdata->shmBuffer.wl_buffer = WAYLAND_wl_cursor_image_get_buffer(cursor->images[0]); cdata->hot_x = cursor->images[0]->hotspot_x; cdata->hot_y = cursor->images[0]->hotspot_y; cdata->w = cursor->images[0]->width; @@ -291,136 +289,6 @@ static SDL_bool wayland_get_system_cursor(SDL_VideoData *vdata, Wayland_CursorDa return SDL_TRUE; } -static int set_tmp_file_size(int fd, off_t size) -{ -#ifdef HAVE_POSIX_FALLOCATE - sigset_t set, old_set; - int ret; - - /* SIGALRM can potentially block a large posix_fallocate() operation - * from succeeding, so block it. - */ - sigemptyset(&set); - sigaddset(&set, SIGALRM); - sigprocmask(SIG_BLOCK, &set, &old_set); - - do { - ret = posix_fallocate(fd, 0, size); - } while (ret == EINTR); - - sigprocmask(SIG_SETMASK, &old_set, NULL); - - if (ret == 0) { - return 0; - } - else if (ret != EINVAL && errno != EOPNOTSUPP) { - return -1; - } -#endif - - if (ftruncate(fd, size) < 0) { - return -1; - } - return 0; -} - -static int wayland_create_tmp_file(off_t size) -{ - int fd; - -#ifdef HAVE_MEMFD_CREATE - fd = memfd_create("SDL", MFD_CLOEXEC | MFD_ALLOW_SEALING); - if (fd >= 0) { - fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_SEAL); - } else -#endif - { - static const char template[] = "/sdl-shared-XXXXXX"; - char *xdg_path; - char tmp_path[PATH_MAX]; - - xdg_path = SDL_getenv("XDG_RUNTIME_DIR"); - if (!xdg_path) { - return -1; - } - - SDL_strlcpy(tmp_path, xdg_path, PATH_MAX); - SDL_strlcat(tmp_path, template, PATH_MAX); - - fd = mkostemp(tmp_path, O_CLOEXEC); - if (fd < 0) { - return -1; - } - - /* Need to manually unlink the temp files, or they can persist after close and fill up the temp storage. */ - unlink(tmp_path); - } - - if (set_tmp_file_size(fd, size) < 0) { - close(fd); - return -1; - } - - return fd; -} - -static void mouse_buffer_release(void *data, struct wl_buffer *buffer) -{ -} - -static const struct wl_buffer_listener mouse_buffer_listener = { - mouse_buffer_release -}; - -static int create_buffer_from_shm(Wayland_CursorData *d, - int width, - int height, - uint32_t format) -{ - SDL_VideoDevice *vd = SDL_GetVideoDevice(); - SDL_VideoData *data = (SDL_VideoData *)vd->driverdata; - struct wl_shm_pool *shm_pool; - int shm_fd; - - int stride = width * 4; - d->shm_data_size = stride * height; - - shm_fd = wayland_create_tmp_file(d->shm_data_size); - if (shm_fd < 0) { - return SDL_SetError("Creating mouse cursor buffer failed."); - } - - d->shm_data = mmap(NULL, - d->shm_data_size, - PROT_READ | PROT_WRITE, - MAP_SHARED, - shm_fd, - 0); - if (d->shm_data == MAP_FAILED) { - d->shm_data = NULL; - close(shm_fd); - return SDL_SetError("mmap() failed."); - } - - SDL_assert(d->shm_data != NULL); - - shm_pool = wl_shm_create_pool(data->shm, shm_fd, d->shm_data_size); - d->buffer = wl_shm_pool_create_buffer(shm_pool, - 0, - width, - height, - stride, - format); - wl_buffer_add_listener(d->buffer, - &mouse_buffer_listener, - d); - - wl_shm_pool_destroy(shm_pool); - close(shm_fd); - - return 0; -} - static SDL_Cursor *Wayland_CreateCursor(SDL_Surface *surface, int hot_x, int hot_y) { SDL_Cursor *cursor; @@ -438,10 +306,9 @@ static SDL_Cursor *Wayland_CreateCursor(SDL_Surface *surface, int hot_x, int hot cursor->driverdata = (void *)data; /* Allocate shared memory buffer for this cursor */ - if (create_buffer_from_shm(data, - surface->w, + if (Wayland_AllocSHMBuffer(surface->w, surface->h, - WL_SHM_FORMAT_ARGB8888) < 0) { + &data->shmBuffer) < 0) { SDL_free(cursor->driverdata); SDL_free(cursor); return NULL; @@ -450,7 +317,7 @@ static SDL_Cursor *Wayland_CreateCursor(SDL_Surface *surface, int hot_x, int hot /* Wayland requires premultiplied alpha for its surfaces. */ SDL_PremultiplyAlpha(surface->w, surface->h, surface->format->format, surface->pixels, surface->pitch, - SDL_PIXELFORMAT_ARGB8888, data->shm_data, surface->w * 4); + SDL_PIXELFORMAT_ARGB8888, data->shmBuffer.shm_data, surface->w * 4); data->surface = wl_compositor_create_surface(wd->compositor); wl_surface_set_user_data(data->surface, NULL); @@ -481,8 +348,10 @@ static SDL_Cursor *Wayland_CreateSystemCursor(SDL_SystemCursor id) } cursor->driverdata = (void *)cdata; - cdata->surface = wl_compositor_create_surface(data->compositor); - wl_surface_set_user_data(cdata->surface, NULL); + if (!data->cursor_shape_manager) { + cdata->surface = wl_compositor_create_surface(data->compositor); + wl_surface_set_user_data(cdata->surface, NULL); + } /* Note that we can't actually set any other cursor properties, as this * is output-specific. See wayland_get_system_cursor for the rest! @@ -502,12 +371,10 @@ static SDL_Cursor *Wayland_CreateDefaultCursor() static void Wayland_FreeCursorData(Wayland_CursorData *d) { - if (d->buffer) { - if (d->shm_data) { - wl_buffer_destroy(d->buffer); - munmap(d->shm_data, d->shm_data_size); - } - d->buffer = NULL; + if (d->shmBuffer.shm_data) { + Wayland_ReleaseSHMBuffer(&d->shmBuffer); + } else { + d->shmBuffer.wl_buffer = NULL; } if (d->surface) { @@ -533,6 +400,55 @@ static void Wayland_FreeCursor(SDL_Cursor *cursor) SDL_free(cursor); } +static void Wayland_SetSystemCursorShape(struct SDL_WaylandInput *input, SDL_SystemCursor id) +{ + Uint32 shape; + + switch (id) { + case SDL_SYSTEM_CURSOR_ARROW: + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_DEFAULT; + break; + case SDL_SYSTEM_CURSOR_IBEAM: + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_TEXT; + break; + case SDL_SYSTEM_CURSOR_WAIT: + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_WAIT; + break; + case SDL_SYSTEM_CURSOR_CROSSHAIR: + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_CROSSHAIR; + break; + case SDL_SYSTEM_CURSOR_WAITARROW: + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_PROGRESS; + break; + case SDL_SYSTEM_CURSOR_SIZENWSE: + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NWSE_RESIZE; + break; + case SDL_SYSTEM_CURSOR_SIZENESW: + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NESW_RESIZE; + break; + case SDL_SYSTEM_CURSOR_SIZEWE: + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_EW_RESIZE; + break; + case SDL_SYSTEM_CURSOR_SIZENS: + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NS_RESIZE; + break; + case SDL_SYSTEM_CURSOR_SIZEALL: + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ALL_SCROLL; + break; + case SDL_SYSTEM_CURSOR_NO: + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NOT_ALLOWED; + break; + case SDL_SYSTEM_CURSOR_HAND: + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_POINTER; + break; + default: + SDL_assert(0); /* Should never be here... */ + shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_DEFAULT; + } + + wp_cursor_shape_device_v1_set_shape(input->cursor_shape, input->pointer_enter_serial, shape); +} + static int Wayland_ShowCursor(SDL_Cursor *cursor) { SDL_VideoDevice *vd = SDL_GetVideoDevice(); @@ -549,8 +465,19 @@ static int Wayland_ShowCursor(SDL_Cursor *cursor) Wayland_CursorData *data = cursor->driverdata; /* TODO: High-DPI custom cursors? -flibit */ - if (!data->shm_data) { - if (!wayland_get_system_cursor(d, data, &scale)) { + if (!data->shmBuffer.shm_data) { + if (input->cursor_shape) { + Wayland_SetSystemCursorShape(input, data->system_cursor); + + input->cursor_visible = SDL_TRUE; + + if (input->relative_mode_override) { + Wayland_input_unlock_pointer(input); + input->relative_mode_override = SDL_FALSE; + } + + return 0; + } else if (!wayland_get_system_cursor(d, data, &scale)) { return -1; } } @@ -561,7 +488,7 @@ static int Wayland_ShowCursor(SDL_Cursor *cursor) data->surface, data->hot_x / scale, data->hot_y / scale); - wl_surface_attach(data->surface, data->buffer, 0, 0); + wl_surface_attach(data->surface, data->shmBuffer.wl_buffer, 0, 0); wl_surface_damage(data->surface, 0, 0, data->w, data->h); wl_surface_commit(data->surface); @@ -595,6 +522,7 @@ static void Wayland_WarpMouse(SDL_Window *window, int x, int y) Wayland_input_lock_pointer(input); input->relative_mode_override = SDL_TRUE; } + SDL_SendMouseMotion(window, 0, 0, x, y); } } diff --git a/vs/sdl2/src/video/wayland/SDL_waylandmouse.h b/vs/sdl2/src/video/wayland/SDL_waylandmouse.h index 4f3296d0e2b..e5c95a4871b 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandmouse.h +++ b/vs/sdl2/src/video/wayland/SDL_waylandmouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylandopengles.c b/vs/sdl2/src/video/wayland/SDL_waylandopengles.c index 22311a63e65..f271ac7ce5b 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandopengles.c +++ b/vs/sdl2/src/video/wayland/SDL_waylandopengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -120,6 +120,20 @@ int Wayland_GLES_SwapWindow(_THIS, SDL_Window *window) return 0; } + /* By default, we wait for Wayland frame callback and then issue pageflip (eglSwapBuffers), + * but if we want low latency (double buffer scheme), we issue the pageflip + * and then wait immediately for Wayland frame callback. + */ + + if (data->double_buffer) { + /* Feed the frame to Wayland. This will set it so the wl_surface_frame callback can fire again. */ + if (!_this->egl_data->eglSwapBuffers(_this->egl_data->egl_display, data->egl_surface)) { + return SDL_EGL_SetError("unable to show color buffer in an OS-native window", "eglSwapBuffers"); + } + + WAYLAND_wl_display_flush(data->waylandData->display); + } + /* Control swap interval ourselves. See comments on Wayland_GLES_SetSwapInterval */ if (swap_interval != 0) { SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata; @@ -162,12 +176,14 @@ int Wayland_GLES_SwapWindow(_THIS, SDL_Window *window) SDL_AtomicSet(&data->swap_interval_ready, 0); } - /* Feed the frame to Wayland. This will set it so the wl_surface_frame callback can fire again. */ - if (!_this->egl_data->eglSwapBuffers(_this->egl_data->egl_display, data->egl_surface)) { - return SDL_EGL_SetError("unable to show color buffer in an OS-native window", "eglSwapBuffers"); - } + if (!data->double_buffer) { + /* Feed the frame to Wayland. This will set it so the wl_surface_frame callback can fire again. */ + if (!_this->egl_data->eglSwapBuffers(_this->egl_data->egl_display, data->egl_surface)) { + return SDL_EGL_SetError("unable to show color buffer in an OS-native window", "eglSwapBuffers"); + } - WAYLAND_wl_display_flush(data->waylandData->display); + WAYLAND_wl_display_flush(data->waylandData->display); + } return 0; } diff --git a/vs/sdl2/src/video/wayland/SDL_waylandopengles.h b/vs/sdl2/src/video/wayland/SDL_waylandopengles.h index 772a80a04f5..580591850c9 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandopengles.h +++ b/vs/sdl2/src/video/wayland/SDL_waylandopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylandshmbuffer.c b/vs/sdl2/src/video/wayland/SDL_waylandshmbuffer.c new file mode 100644 index 00000000000..a64c7c3501a --- /dev/null +++ b/vs/sdl2/src/video/wayland/SDL_waylandshmbuffer.c @@ -0,0 +1,172 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + 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. +*/ + +#include "../../SDL_internal.h" + +#ifdef SDL_VIDEO_DRIVER_WAYLAND + +#include +#include +#include +#include +#include +#include + +#include "SDL_waylandshmbuffer.h" +#include "SDL_waylandvideo.h" + +static int SetTempFileSize(int fd, off_t size) +{ +#ifdef HAVE_POSIX_FALLOCATE + sigset_t set, old_set; + int ret; + + /* SIGALRM can potentially block a large posix_fallocate() operation + * from succeeding, so block it. + */ + sigemptyset(&set); + sigaddset(&set, SIGALRM); + sigprocmask(SIG_BLOCK, &set, &old_set); + + do { + ret = posix_fallocate(fd, 0, size); + } while (ret == EINTR); + + sigprocmask(SIG_SETMASK, &old_set, NULL); + + if (ret == 0) { + return 0; + } else if (ret != EINVAL && errno != EOPNOTSUPP) { + return -1; + } +#endif + + if (ftruncate(fd, size) < 0) { + return -1; + } + return 0; +} + +static int CreateTempFD(off_t size) +{ + int fd; + +#ifdef HAVE_MEMFD_CREATE + fd = memfd_create("SDL", MFD_CLOEXEC | MFD_ALLOW_SEALING); + if (fd >= 0) { + fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_SEAL); + } else +#endif + { + static const char template[] = "/sdl-shared-XXXXXX"; + char *xdg_path; + char tmp_path[PATH_MAX]; + + xdg_path = SDL_getenv("XDG_RUNTIME_DIR"); + if (!xdg_path) { + return -1; + } + + SDL_strlcpy(tmp_path, xdg_path, PATH_MAX); + SDL_strlcat(tmp_path, template, PATH_MAX); + + fd = mkostemp(tmp_path, O_CLOEXEC); + if (fd < 0) { + return -1; + } + + /* Need to manually unlink the temp files, or they can persist after close and fill up the temp storage. */ + unlink(tmp_path); + } + + if (SetTempFileSize(fd, size) < 0) { + close(fd); + return -1; + } + + return fd; +} + +static void buffer_handle_release(void *data, struct wl_buffer *wl_buffer) +{ + /* NOP */ +} + +static struct wl_buffer_listener buffer_listener = { + buffer_handle_release +}; + +int Wayland_AllocSHMBuffer(int width, int height, struct Wayland_SHMBuffer *shmBuffer) +{ + SDL_VideoDevice *vd = SDL_GetVideoDevice(); + SDL_VideoData *data = vd->driverdata; + struct wl_shm_pool *shm_pool; + int shm_fd; + int stride; + const Uint32 SHM_FMT = WL_SHM_FORMAT_ARGB8888; + + if (!shmBuffer) { + return SDL_InvalidParamError("shmBuffer"); + } + + stride = width * 4; + shmBuffer->shm_data_size = stride * height; + + shm_fd = CreateTempFD(shmBuffer->shm_data_size); + if (shm_fd < 0) { + return SDL_SetError("Creating SHM buffer failed."); + } + + shmBuffer->shm_data = mmap(NULL, shmBuffer->shm_data_size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0); + if (shmBuffer->shm_data == MAP_FAILED) { + shmBuffer->shm_data = NULL; + close(shm_fd); + return SDL_SetError("mmap() failed."); + } + + SDL_assert(shmBuffer->shm_data != NULL); + + shm_pool = wl_shm_create_pool(data->shm, shm_fd, shmBuffer->shm_data_size); + shmBuffer->wl_buffer = wl_shm_pool_create_buffer(shm_pool, 0, width, height, stride, SHM_FMT); + wl_buffer_add_listener(shmBuffer->wl_buffer, &buffer_listener, shmBuffer); + + wl_shm_pool_destroy(shm_pool); + close(shm_fd); + + return 0; +} + +void Wayland_ReleaseSHMBuffer(struct Wayland_SHMBuffer *shmBuffer) +{ + if (shmBuffer) { + if (shmBuffer->wl_buffer) { + wl_buffer_destroy(shmBuffer->wl_buffer); + shmBuffer->wl_buffer = NULL; + } + if (shmBuffer->shm_data) { + munmap(shmBuffer->shm_data, shmBuffer->shm_data_size); + shmBuffer->shm_data = NULL; + } + shmBuffer->shm_data_size = 0; + } +} + +#endif \ No newline at end of file diff --git a/vs/sdl2/src/video/wayland/SDL_waylandshmbuffer.h b/vs/sdl2/src/video/wayland/SDL_waylandshmbuffer.h new file mode 100644 index 00000000000..fb6649a08df --- /dev/null +++ b/vs/sdl2/src/video/wayland/SDL_waylandshmbuffer.h @@ -0,0 +1,34 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + 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. +*/ +#include "../../SDL_internal.h" + +#ifndef SDL_waylandshmbuffer_h_ +#define SDL_waylandshmbuffer_h_ + +struct Wayland_SHMBuffer +{ + struct wl_buffer *wl_buffer; + void *shm_data; + int shm_data_size; +}; + +/* Allocates an SHM buffer with the format WL_SHM_FORMAT_ARGB8888 */ +extern int Wayland_AllocSHMBuffer(int width, int height, struct Wayland_SHMBuffer *shmBuffer); +extern void Wayland_ReleaseSHMBuffer(struct Wayland_SHMBuffer *shmBuffer); + +#endif \ No newline at end of file diff --git a/vs/sdl2/src/video/wayland/SDL_waylandsym.h b/vs/sdl2/src/video/wayland/SDL_waylandsym.h index 1b02b01c669..13fc0d8a7f3 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandsym.h +++ b/vs/sdl2/src/video/wayland/SDL_waylandsym.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -146,6 +146,7 @@ SDL_WAYLAND_SYM(struct xkb_compose_table *, xkb_compose_table_new_from_locale, ( const char *locale, enum xkb_compose_compile_flags) ) SDL_WAYLAND_SYM(void, xkb_compose_table_unref, (struct xkb_compose_table *) ) SDL_WAYLAND_SYM(struct xkb_compose_state *, xkb_compose_state_new, (struct xkb_compose_table *, enum xkb_compose_state_flags) ) +SDL_WAYLAND_SYM(void, xkb_compose_state_reset, (struct xkb_compose_state *) ) SDL_WAYLAND_SYM(void, xkb_compose_state_unref, (struct xkb_compose_state *) ) SDL_WAYLAND_SYM(enum xkb_compose_feed_result, xkb_compose_state_feed, (struct xkb_compose_state *, xkb_keysym_t) ) SDL_WAYLAND_SYM(enum xkb_compose_status, xkb_compose_state_get_status, (struct xkb_compose_state *) ) diff --git a/vs/sdl2/src/video/wayland/SDL_waylandtouch.c b/vs/sdl2/src/video/wayland/SDL_waylandtouch.c index 7a6b7fcd0dc..73a431a855e 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandtouch.c +++ b/vs/sdl2/src/video/wayland/SDL_waylandtouch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylandtouch.h b/vs/sdl2/src/video/wayland/SDL_waylandtouch.h index ed260ea39b3..57563487b43 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandtouch.h +++ b/vs/sdl2/src/video/wayland/SDL_waylandtouch.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylandvideo.c b/vs/sdl2/src/video/wayland/SDL_waylandvideo.c index 9b593cc9177..0549520d61a 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandvideo.c +++ b/vs/sdl2/src/video/wayland/SDL_waylandvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -58,6 +58,8 @@ #include "viewporter-client-protocol.h" #include "primary-selection-unstable-v1-client-protocol.h" #include "fractional-scale-v1-client-protocol.h" +#include "cursor-shape-v1-client-protocol.h" +#include "xdg-toplevel-icon-v1-client-protocol.h" #ifdef HAVE_LIBDECOR_H #include @@ -78,7 +80,7 @@ static void Wayland_VideoQuit(_THIS); /* Find out what class name we should use * Based on src/video/x11/SDL_x11video.c */ -static char *get_classname() +static char *get_classname(void) { /* !!! FIXME: this is probably wrong, albeit harmless in many common cases. From protocol spec: "The surface class identifies the general class of applications @@ -160,9 +162,6 @@ static void Wayland_DeleteDevice(SDL_VideoDevice *device) WAYLAND_wl_display_flush(data->display); WAYLAND_wl_display_disconnect(data->display); } - if (device->wakeup_lock) { - SDL_DestroyMutex(device->wakeup_lock); - } SDL_free(data); SDL_free(device); SDL_WAYLAND_UnloadSymbols(); @@ -231,7 +230,6 @@ static SDL_VideoDevice *Wayland_CreateDevice(void) } device->driverdata = data; - device->wakeup_lock = SDL_CreateMutex(); /* Set the function pointers */ device->VideoInit = Wayland_VideoInit; @@ -275,6 +273,7 @@ static SDL_VideoDevice *Wayland_CreateDevice(void) device->SetWindowMaximumSize = Wayland_SetWindowMaximumSize; device->SetWindowModalFor = Wayland_SetWindowModalFor; device->SetWindowTitle = Wayland_SetWindowTitle; + device->SetWindowIcon = Wayland_SetWindowIcon; device->GetWindowSizeInPixels = Wayland_GetWindowSizeInPixels; device->DestroyWindow = Wayland_DestroyWindow; device->SetWindowHitTest = Wayland_SetWindowHitTest; @@ -644,6 +643,11 @@ static void display_handle_done(void *data, if (driverdata->index > -1) { dpy = SDL_GetDisplay(driverdata->index); + + /* XXX: This can never happen, but jump threading during aggressive LTO can generate a warning without this check. */ + if (!dpy) { + dpy = &driverdata->placeholder; + } } else { dpy = &driverdata->placeholder; } @@ -732,6 +736,7 @@ static void Wayland_free_display(SDL_VideoData *d, uint32_t id) int num_displays = SDL_GetNumVideoDisplays(); SDL_VideoDisplay *display; SDL_WaylandOutputData *data; + SDL_Window *window; int i; for (i = 0; i < num_displays; i += 1) { @@ -751,12 +756,19 @@ static void Wayland_free_display(SDL_VideoData *d, uint32_t id) } } } - SDL_DelVideoDisplay(i); + + /* Surface leave events may be implicit when an output is destroyed, so make sure that + * no windows retain a reference to a destroyed output. + */ + for (window = SDL_GetVideoDevice()->windows; window; window = window->next) { + Wayland_RemoveOutputFromWindow(window->driverdata, data->output); + } + if (data->xdg_output) { zxdg_output_v1_destroy(data->xdg_output); } wl_output_destroy(data->output); - SDL_free(data); + SDL_DelVideoDisplay(i); /* Update the index for all remaining displays */ num_displays -= 1; @@ -833,7 +845,7 @@ static void display_handle_global(void *data, struct wl_registry *registry, uint } else if (SDL_strcmp(interface, "wl_seat") == 0) { Wayland_display_add_input(d, id, version); } else if (SDL_strcmp(interface, "xdg_wm_base") == 0) { - d->shell.xdg = wl_registry_bind(d->registry, id, &xdg_wm_base_interface, SDL_min(version, 3)); + d->shell.xdg = wl_registry_bind(d->registry, id, &xdg_wm_base_interface, SDL_min(version, 5)); xdg_wm_base_add_listener(d->shell.xdg, &shell_listener_xdg, NULL); } else if (SDL_strcmp(interface, "wl_shm") == 0) { d->shm = wl_registry_bind(registry, id, &wl_shm_interface, 1); @@ -866,6 +878,13 @@ static void display_handle_global(void *data, struct wl_registry *registry, uint d->viewporter = wl_registry_bind(d->registry, id, &wp_viewporter_interface, 1); } else if (SDL_strcmp(interface, "wp_fractional_scale_manager_v1") == 0) { d->fractional_scale_manager = wl_registry_bind(d->registry, id, &wp_fractional_scale_manager_v1_interface, 1); + } else if (SDL_strcmp(interface, "wp_cursor_shape_manager_v1") == 0) { + d->cursor_shape_manager = wl_registry_bind(d->registry, id, &wp_cursor_shape_manager_v1_interface, 1); + if (d->input) { + Wayland_CreateCursorShapeDevice(d->input); + } + } else if (SDL_strcmp(interface, "xdg_toplevel_icon_manager_v1") == 0) { + d->xdg_toplevel_icon_manager_v1 = wl_registry_bind(d->registry, id, &xdg_toplevel_icon_manager_v1_interface, 1); #ifdef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH } else if (SDL_strcmp(interface, "qt_touch_extension") == 0) { Wayland_touch_create(d, id); @@ -1016,9 +1035,6 @@ static void Wayland_VideoCleanup(_THIS) } wl_output_destroy(((SDL_WaylandOutputData *)display->driverdata)->output); - SDL_free(display->driverdata); - display->driverdata = NULL; - SDL_DelVideoDisplay(i); } data->output_list = NULL; @@ -1112,6 +1128,16 @@ static void Wayland_VideoCleanup(_THIS) data->fractional_scale_manager = NULL; } + if (data->cursor_shape_manager) { + wp_cursor_shape_manager_v1_destroy(data->cursor_shape_manager); + data->cursor_shape_manager = NULL; + } + + if (data->xdg_toplevel_icon_manager_v1) { + xdg_toplevel_icon_manager_v1_destroy(data->xdg_toplevel_icon_manager_v1); + data->xdg_toplevel_icon_manager_v1 = NULL; + } + if (data->compositor) { wl_compositor_destroy(data->compositor); data->compositor = NULL; diff --git a/vs/sdl2/src/video/wayland/SDL_waylandvideo.h b/vs/sdl2/src/video/wayland/SDL_waylandvideo.h index b7b3348c6d4..13e9b35ee8e 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandvideo.h +++ b/vs/sdl2/src/video/wayland/SDL_waylandvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -70,6 +70,7 @@ typedef struct } shell; struct zwp_relative_pointer_manager_v1 *relative_pointer_manager; struct zwp_pointer_constraints_v1 *pointer_constraints; + struct wp_cursor_shape_manager_v1 *cursor_shape_manager; struct wl_data_device_manager *data_device_manager; struct zwp_primary_selection_device_manager_v1 *primary_selection_device_manager; struct zxdg_decoration_manager_v1 *decoration_manager; @@ -77,6 +78,7 @@ typedef struct struct zwp_idle_inhibit_manager_v1 *idle_inhibit_manager; struct xdg_activation_v1 *activation_manager; struct zwp_text_input_manager_v3 *text_input_manager; + struct xdg_toplevel_icon_manager_v1 *xdg_toplevel_icon_manager_v1; struct zxdg_output_manager_v1 *xdg_output_manager; struct wp_viewporter *viewporter; struct wp_fractional_scale_manager_v1 *fractional_scale_manager; diff --git a/vs/sdl2/src/video/wayland/SDL_waylandvulkan.c b/vs/sdl2/src/video/wayland/SDL_waylandvulkan.c index af956dad2e9..0c39d1b622a 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandvulkan.c +++ b/vs/sdl2/src/video/wayland/SDL_waylandvulkan.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylandvulkan.h b/vs/sdl2/src/video/wayland/SDL_waylandvulkan.h index f42ed8e3b7e..9e0a0d043a7 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandvulkan.h +++ b/vs/sdl2/src/video/wayland/SDL_waylandvulkan.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/wayland/SDL_waylandwindow.c b/vs/sdl2/src/video/wayland/SDL_waylandwindow.c index c8d55def175..d208c1ab268 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandwindow.c +++ b/vs/sdl2/src/video/wayland/SDL_waylandwindow.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -31,6 +31,7 @@ #include "SDL_waylandwindow.h" #include "SDL_waylandvideo.h" #include "SDL_waylandtouch.h" +#include "SDL_waylandshmbuffer.h" #include "SDL_hints.h" #include "../../SDL_hints_c.h" #include "SDL_events.h" @@ -41,6 +42,7 @@ #include "xdg-activation-v1-client-protocol.h" #include "viewporter-client-protocol.h" #include "fractional-scale-v1-client-protocol.h" +#include "xdg-toplevel-icon-v1-client-protocol.h" #ifdef HAVE_LIBDECOR_H #include @@ -118,47 +120,12 @@ static void GetFullScreenDimensions(SDL_Window *window, int *width, int *height, } } -SDL_FORCE_INLINE SDL_bool SurfaceScaleIsFractional(SDL_Window *window) -{ - SDL_WindowData *data = window->driverdata; - return !FloatEqual(SDL_roundf(data->scale_factor), data->scale_factor); -} - SDL_FORCE_INLINE SDL_bool FullscreenModeEmulation(SDL_Window *window) { return (window->flags & SDL_WINDOW_FULLSCREEN) && ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP); } -static SDL_bool NeedViewport(SDL_Window *window) -{ - SDL_WindowData *wind = window->driverdata; - SDL_VideoData *video = wind->waylandData; - SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); - SDL_WaylandOutputData *output = display ? ((SDL_WaylandOutputData *)display->driverdata) : NULL; - const int output_width = wind->fs_output_width ? wind->fs_output_width : (output ? output->width : wind->window_width); - const int output_height = wind->fs_output_height ? wind->fs_output_height : (output ? output->height : wind->window_height); - int fs_width, fs_height; - - /* - * A viewport is only required when scaling is enabled and: - * - A fullscreen mode is being emulated and the mode does not match the logical desktop dimensions. - * - The desktop uses fractional scaling and the high-DPI flag is set. - */ - if (video->viewporter) { - if (FullscreenModeEmulation(window)) { - GetFullScreenDimensions(window, &fs_width, &fs_height, NULL, NULL); - if (fs_width != output_width || fs_height != output_height) { - return SDL_TRUE; - } - } else if (SurfaceScaleIsFractional(window) && (window->flags & SDL_WINDOW_ALLOW_HIGHDPI)) { - return SDL_TRUE; - } - } - - return SDL_FALSE; -} - static void GetBufferSize(SDL_Window *window, int *width, int *height) { SDL_WindowData *data = window->driverdata; @@ -167,15 +134,12 @@ static void GetBufferSize(SDL_Window *window, int *width, int *height) if (FullscreenModeEmulation(window)) { GetFullScreenDimensions(window, NULL, NULL, &buf_width, &buf_height); - } else if (NeedViewport(window)) { + } else if (data->draw_viewport) { /* Round fractional backbuffer sizes halfway away from zero. */ buf_width = (int)SDL_lroundf(window->w * data->scale_factor); buf_height = (int)SDL_lroundf(window->h * data->scale_factor); } else { - /* - * Integer scaled windowed or fullscreen with no viewport - * - * Round the scale factor up in the unlikely scenario of a compositor + /* Round the scale factor up in the unlikely scenario of a compositor * that supports fractional scaling, but not viewports. */ int scale_factor = (int)SDL_ceilf(data->scale_factor); @@ -192,31 +156,6 @@ static void GetBufferSize(SDL_Window *window, int *width, int *height) } } -static void SetDrawSurfaceViewport(SDL_Window *window, int src_width, int src_height, int dst_width, int dst_height) -{ - SDL_WindowData *wind = window->driverdata; - SDL_VideoData *video = wind->waylandData; - - if (video->viewporter) { - if (!wind->draw_viewport) { - wind->draw_viewport = wp_viewporter_get_viewport(video->viewporter, wind->surface); - } - - wp_viewport_set_source(wind->draw_viewport, wl_fixed_from_int(-1), wl_fixed_from_int(-1), wl_fixed_from_int(-1), wl_fixed_from_int(-1)); - wp_viewport_set_destination(wind->draw_viewport, dst_width, dst_height); - } -} - -static void UnsetDrawSurfaceViewport(SDL_Window *window) -{ - SDL_WindowData *wind = window->driverdata; - - if (wind->draw_viewport) { - wp_viewport_destroy(wind->draw_viewport); - wind->draw_viewport = NULL; - } -} - static void ConfigureWindowGeometry(SDL_Window *window) { SDL_WindowData *data = window->driverdata; @@ -240,7 +179,7 @@ static void ConfigureWindowGeometry(SDL_Window *window) 0, 0); } - if (FullscreenModeEmulation(window) && NeedViewport(window)) { + if (FullscreenModeEmulation(window) && data->draw_viewport) { int fs_width, fs_height; const int output_width = data->fs_output_width ? data->fs_output_width : (output ? output->width : data->window_width); const int output_height = data->fs_output_height ? data->fs_output_height : (output ? output->height : data->window_height); @@ -252,8 +191,7 @@ static void ConfigureWindowGeometry(SDL_Window *window) /* Set the buffer scale to 1 since a viewport will be used. */ wl_surface_set_buffer_scale(data->surface, 1); - SetDrawSurfaceViewport(window, data->drawable_width, data->drawable_height, - output_width, output_height); + wp_viewport_set_destination(data->draw_viewport, output_width, output_height); data->window_width = output_width; data->window_height = output_height; @@ -265,12 +203,10 @@ static void ConfigureWindowGeometry(SDL_Window *window) window_size_changed = data->window_width != window->w || data->window_height != window->h; if (window_size_changed || drawable_size_changed) { - if (NeedViewport(window)) { + if (data->draw_viewport) { wl_surface_set_buffer_scale(data->surface, 1); - SetDrawSurfaceViewport(window, data->drawable_width, data->drawable_height, window->w, window->h); + wp_viewport_set_destination(data->draw_viewport, window->w, window->h); } else { - UnsetDrawSurfaceViewport(window); - if (!FullscreenModeEmulation(window)) { /* Round to the next integer in case of a fractional value. */ wl_surface_set_buffer_scale(data->surface, (int32_t)SDL_ceilf(data->scale_factor)); @@ -293,8 +229,11 @@ static void ConfigureWindowGeometry(SDL_Window *window) * need to be recalculated if the output size has changed. */ if (window_size_changed) { - /* libdecor does this internally on frame commits, so it's only needed for xdg surfaces. */ - if (data->shell_surface_type != WAYLAND_SURFACE_LIBDECOR && + /* XXX: This is a hack and only set on the xdg-toplevel path when viewports + * aren't supported to avoid a potential protocol violation if a buffer + * with an old size is committed. + */ + if (!data->draw_viewport && data->shell_surface_type == WAYLAND_SURFACE_XDG_TOPLEVEL && viddata->shell.xdg && data->shell_surface.xdg.surface) { xdg_surface_set_window_geometry(data->shell_surface.xdg.surface, 0, 0, data->window_width, data->window_height); } @@ -599,6 +538,13 @@ static void handle_configure_xdg_toplevel(void *data, */ width = wind->floating_width; height = wind->floating_height; + + /* Clamp resizable windows to the toplevel bounds when mapping, if any were sent. */ + if ((window->flags & (SDL_WINDOW_HIDDEN | SDL_WINDOW_RESIZABLE)) && + wind->toplevel_bounds_width && wind->toplevel_bounds_height) { + width = SDL_min(width, wind->toplevel_bounds_width); + height = SDL_min(height, wind->toplevel_bounds_height); + } } /* xdg_toplevel spec states that this is a suggestion. @@ -675,9 +621,28 @@ static void handle_close_xdg_toplevel(void *data, struct xdg_toplevel *xdg_tople SDL_SendWindowEvent(window->sdlwindow, SDL_WINDOWEVENT_CLOSE, 0, 0); } +static void handle_xdg_toplevel_configure_bounds(void *data, + struct xdg_toplevel *xdg_toplevel, + int32_t width, + int32_t height) +{ + SDL_WindowData *window = (SDL_WindowData *)data; + window->toplevel_bounds_width = width; + window->toplevel_bounds_height = height; +} + +static void handle_xdg_toplevel_wm_capabilities(void *data, + struct xdg_toplevel *xdg_toplevel, + struct wl_array *capabilities) +{ + /* NOP */ +} + static const struct xdg_toplevel_listener toplevel_listener_xdg = { handle_configure_xdg_toplevel, - handle_close_xdg_toplevel + handle_close_xdg_toplevel, + handle_xdg_toplevel_configure_bounds, + handle_xdg_toplevel_wm_capabilities }; static void handle_configure_xdg_popup(void *data, @@ -1098,39 +1063,11 @@ static void Wayland_move_window(SDL_Window *window, } } -static void handle_surface_enter(void *data, struct wl_surface *surface, - struct wl_output *output) +void Wayland_RemoveOutputFromWindow(SDL_WindowData *window, struct wl_output *output) { - SDL_WindowData *window = data; - SDL_WaylandOutputData *driverdata = wl_output_get_user_data(output); - - if (!SDL_WAYLAND_own_output(output) || !SDL_WAYLAND_own_surface(surface)) { - return; - } - - window->outputs = SDL_realloc(window->outputs, - sizeof(SDL_WaylandOutputData *) * (window->num_outputs + 1)); - window->outputs[window->num_outputs++] = driverdata; - - /* Update the scale factor after the move so that fullscreen outputs are updated. */ - Wayland_move_window(window->sdlwindow, driverdata); - - if (!window->fractional_scale) { - update_scale_factor(window); - } -} - -static void handle_surface_leave(void *data, struct wl_surface *surface, - struct wl_output *output) -{ - SDL_WindowData *window = data; int i, send_move_event = 0; SDL_WaylandOutputData *driverdata = wl_output_get_user_data(output); - if (!SDL_WAYLAND_own_output(output) || !SDL_WAYLAND_own_surface(surface)) { - return; - } - for (i = 0; i < window->num_outputs; i++) { if (window->outputs[i] == driverdata) { /* remove this one */ if (i == (window->num_outputs - 1)) { @@ -1159,6 +1096,40 @@ static void handle_surface_leave(void *data, struct wl_surface *surface, } } +static void handle_surface_enter(void *data, struct wl_surface *surface, + struct wl_output *output) +{ + SDL_WindowData *window = data; + SDL_WaylandOutputData *driverdata = wl_output_get_user_data(output); + + if (!SDL_WAYLAND_own_output(output) || !SDL_WAYLAND_own_surface(surface)) { + return; + } + + window->outputs = SDL_realloc(window->outputs, + sizeof(SDL_WaylandOutputData *) * (window->num_outputs + 1)); + window->outputs[window->num_outputs++] = driverdata; + + /* Update the scale factor after the move so that fullscreen outputs are updated. */ + Wayland_move_window(window->sdlwindow, driverdata); + + if (!window->fractional_scale) { + update_scale_factor(window); + } +} + +static void handle_surface_leave(void *data, struct wl_surface *surface, + struct wl_output *output) +{ + SDL_WindowData *window = (SDL_WindowData *)data; + + if (!SDL_WAYLAND_own_output(output) || !SDL_WAYLAND_own_surface(surface)) { + return; + } + + Wayland_RemoveOutputFromWindow(window, output); +} + static const struct wl_surface_listener surface_listener = { handle_surface_enter, handle_surface_leave @@ -1330,6 +1301,12 @@ void Wayland_ShowWindow(_THIS, SDL_Window *window) } else { libdecor_frame_set_app_id(data->shell_surface.libdecor.frame, c->classname); libdecor_frame_map(data->shell_surface.libdecor.frame); + + if (c->xdg_toplevel_icon_manager_v1 && data->xdg_toplevel_icon_v1) { + xdg_toplevel_icon_manager_v1_set_icon(c->xdg_toplevel_icon_manager_v1, + libdecor_frame_get_xdg_toplevel(data->shell_surface.libdecor.frame), + data->xdg_toplevel_icon_v1); + } } } else #endif @@ -1374,6 +1351,12 @@ void Wayland_ShowWindow(_THIS, SDL_Window *window) xdg_toplevel_set_app_id(data->shell_surface.xdg.roleobj.toplevel, c->classname); xdg_toplevel_add_listener(data->shell_surface.xdg.roleobj.toplevel, &toplevel_listener_xdg, data); + if (c->xdg_toplevel_icon_manager_v1 && data->xdg_toplevel_icon_v1) { + xdg_toplevel_icon_manager_v1_set_icon(c->xdg_toplevel_icon_manager_v1, + data->shell_surface.xdg.roleobj.toplevel, + data->xdg_toplevel_icon_v1); + } + SetMinMaxDimensions(window, SDL_FALSE); } } @@ -1401,6 +1384,12 @@ void Wayland_ShowWindow(_THIS, SDL_Window *window) } else #endif if (c->shell.xdg) { + /* Create the window decorations */ + if (data->shell_surface_type != WAYLAND_SURFACE_XDG_POPUP && data->shell_surface.xdg.roleobj.toplevel && c->decoration_manager) { + data->server_decoration = zxdg_decoration_manager_v1_get_toplevel_decoration(c->decoration_manager, data->shell_surface.xdg.roleobj.toplevel); + zxdg_toplevel_decoration_v1_add_listener(data->server_decoration, &decoration_listener, window); + } + /* Unlike libdecor we need to call this explicitly to prevent a deadlock. * libdecor will call this as part of their configure event! * -flibit @@ -1412,17 +1401,6 @@ void Wayland_ShowWindow(_THIS, SDL_Window *window) WAYLAND_wl_display_dispatch(c->display); } } - - /* Create the window decorations */ - if (data->shell_surface_type != WAYLAND_SURFACE_XDG_POPUP && data->shell_surface.xdg.roleobj.toplevel && c->decoration_manager) { - data->server_decoration = zxdg_decoration_manager_v1_get_toplevel_decoration(c->decoration_manager, data->shell_surface.xdg.roleobj.toplevel); - zxdg_toplevel_decoration_v1_add_listener(data->server_decoration, - &decoration_listener, - window); - } - - /* Set the geometry */ - xdg_surface_set_window_geometry(data->shell_surface.xdg.surface, 0, 0, data->window_width, data->window_height); } else { /* Nothing to see here, just commit. */ wl_surface_commit(data->surface); @@ -1481,6 +1459,9 @@ void Wayland_ShowWindow(_THIS, SDL_Window *window) * HideWindow was called immediately before ShowWindow. */ WAYLAND_wl_display_roundtrip(c->display); + + /* Send an exposure event to signal that the client should draw. */ + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_EXPOSED, 0, 0); } static void Wayland_ReleasePopup(_THIS, SDL_Window *popup) @@ -1996,13 +1977,6 @@ int Wayland_CreateWindow(_THIS, SDL_Window *window) c = _this->driverdata; window->driverdata = data; - if (!(window->flags & SDL_WINDOW_VULKAN)) { - if (!(window->flags & SDL_WINDOW_OPENGL)) { - SDL_GL_LoadLibrary(NULL); - window->flags |= SDL_WINDOW_OPENGL; - } - } - if (window->x == SDL_WINDOWPOS_UNDEFINED) { window->x = 0; } @@ -2023,6 +1997,11 @@ int Wayland_CreateWindow(_THIS, SDL_Window *window) } } + data->double_buffer = SDL_FALSE; + if (SDL_GetHintBoolean(SDL_HINT_VIDEO_DOUBLE_BUFFER, SDL_FALSE)) { + data->double_buffer = SDL_TRUE; + } + data->outputs = NULL; data->num_outputs = 0; @@ -2035,6 +2014,13 @@ int Wayland_CreateWindow(_THIS, SDL_Window *window) SDL_WAYLAND_register_surface(data->surface); + if (c->viewporter) { + data->draw_viewport = wp_viewporter_get_viewport(c->viewporter, data->surface); + wp_viewport_set_source(data->draw_viewport, + wl_fixed_from_int(-1), wl_fixed_from_int(-1), + wl_fixed_from_int(-1), wl_fixed_from_int(-1)); + } + /* Must be called before EGL configuration to set the drawable backbuffer size. */ ConfigureWindowGeometry(window); @@ -2142,6 +2128,7 @@ static void Wayland_HandleResize(SDL_Window *window, int width, int height, floa window->w = 0; window->h = 0; SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, width, height); + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_EXPOSED, 0, 0); window->w = width; window->h = height; data->needs_resize_event = SDL_FALSE; @@ -2223,6 +2210,46 @@ void Wayland_SetWindowTitle(_THIS, SDL_Window *window) WAYLAND_wl_display_flush(viddata->display); } +void Wayland_SetWindowIcon(SDL_VideoDevice *_this, SDL_Window *window, SDL_Surface *icon) +{ + SDL_WindowData *wind = window->driverdata; + SDL_VideoData *viddata = _this->driverdata; + struct xdg_toplevel *toplevel = NULL; + + if (!viddata->xdg_toplevel_icon_manager_v1) { + SDL_SetError("wayland: cannot set icon; xdg_toplevel_icon_v1 protocol not supported"); + return; + } + if (icon->w != icon->h) { + SDL_SetError("wayland: icon width and height must be equal, got %ix%i", icon->w, icon->h); + return; + } + if (wind->xdg_toplevel_icon_v1) { + xdg_toplevel_icon_v1_destroy(wind->xdg_toplevel_icon_v1); + wind->xdg_toplevel_icon_v1 = NULL; + } + + Wayland_ReleaseSHMBuffer(&wind->icon); + if (Wayland_AllocSHMBuffer(icon->w, icon->h, &wind->icon) != 0) { + SDL_SetError("wayland: failed to allocate SHM buffer for the icon"); + return; + } + SDL_PremultiplyAlpha(icon->w, icon->h, icon->format->format, icon->pixels, icon->pitch, SDL_PIXELFORMAT_ARGB8888, wind->icon.shm_data, icon->w * 4); + wind->xdg_toplevel_icon_v1 = xdg_toplevel_icon_manager_v1_create_icon(viddata->xdg_toplevel_icon_manager_v1); + xdg_toplevel_icon_v1_add_buffer(wind->xdg_toplevel_icon_v1, wind->icon.wl_buffer, 1); +#ifdef HAVE_LIBDECOR_H + if (wind->shell_surface_type == WAYLAND_SURFACE_LIBDECOR && wind->shell_surface.libdecor.frame) { + toplevel = libdecor_frame_get_xdg_toplevel(wind->shell_surface.libdecor.frame); + } else +#endif + if (wind->shell_surface_type == WAYLAND_SURFACE_XDG_TOPLEVEL && wind->shell_surface.xdg.roleobj.toplevel) { + toplevel = wind->shell_surface.xdg.roleobj.toplevel; + } + if (toplevel) { + xdg_toplevel_icon_manager_v1_set_icon(viddata->xdg_toplevel_icon_manager_v1, toplevel, wind->xdg_toplevel_icon_v1); + } +} + void Wayland_SuspendScreenSaver(_THIS) { SDL_VideoData *data = (SDL_VideoData *)_this->driverdata; @@ -2291,6 +2318,12 @@ void Wayland_DestroyWindow(_THIS, SDL_Window *window) wp_fractional_scale_v1_destroy(wind->fractional_scale); } + if (wind->xdg_toplevel_icon_v1) { + xdg_toplevel_icon_v1_destroy(wind->xdg_toplevel_icon_v1); + } + + Wayland_ReleaseSHMBuffer(&wind->icon); + SDL_free(wind->outputs); if (wind->gles_swap_frame_callback) { diff --git a/vs/sdl2/src/video/wayland/SDL_waylandwindow.h b/vs/sdl2/src/video/wayland/SDL_waylandwindow.h index 36600a4d278..618fd21cf18 100644 --- a/vs/sdl2/src/video/wayland/SDL_waylandwindow.h +++ b/vs/sdl2/src/video/wayland/SDL_waylandwindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,6 +29,7 @@ #include "../../events/SDL_touch_c.h" #include "SDL_waylandvideo.h" +#include "SDL_waylandshmbuffer.h" struct SDL_WaylandInput; @@ -89,6 +90,9 @@ typedef struct struct xdg_activation_token_v1 *activation_token; struct wp_viewport *draw_viewport; struct wp_fractional_scale_v1 *fractional_scale; + struct xdg_toplevel_icon_v1 *xdg_toplevel_icon_v1; + + struct Wayland_SHMBuffer icon; /* floating dimensions for restoring from maximized and fullscreen */ int floating_width, floating_height; @@ -110,12 +114,15 @@ typedef struct int window_width, window_height; int system_min_required_width; int system_min_required_height; + int toplevel_bounds_width; + int toplevel_bounds_height; SDL_bool needs_resize_event; SDL_bool floating_resize_pending; SDL_bool was_floating; SDL_bool is_fullscreen; SDL_bool in_fullscreen_transition; Uint32 fullscreen_flags; + SDL_bool double_buffer; } SDL_WindowData; extern void Wayland_ShowWindow(_THIS, SDL_Window *window); @@ -141,11 +148,13 @@ extern int Wayland_SetWindowModalFor(_THIS, SDL_Window *modal_window, SDL_Window extern void Wayland_SetWindowTitle(_THIS, SDL_Window *window); extern void Wayland_DestroyWindow(_THIS, SDL_Window *window); extern void Wayland_SuspendScreenSaver(_THIS); +extern void Wayland_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon); extern SDL_bool Wayland_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info); extern int Wayland_SetWindowHitTest(SDL_Window *window, SDL_bool enabled); extern int Wayland_FlashWindow(_THIS, SDL_Window *window, SDL_FlashOperation operation); +extern void Wayland_RemoveOutputFromWindow(SDL_WindowData *window, struct wl_output *output); extern void Wayland_InitWin(SDL_VideoData *data); extern void Wayland_QuitWin(SDL_VideoData *data); diff --git a/vs/sdl2/src/video/windows/SDL_msctf.h b/vs/sdl2/src/video/windows/SDL_msctf.h index 738696f017e..fbe02720cec 100644 --- a/vs/sdl2/src/video/windows/SDL_msctf.h +++ b/vs/sdl2/src/video/windows/SDL_msctf.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_vkeys.h b/vs/sdl2/src/video/windows/SDL_vkeys.h index fb4d27de91a..2aaa9eff28c 100644 --- a/vs/sdl2/src/video/windows/SDL_vkeys.h +++ b/vs/sdl2/src/video/windows/SDL_vkeys.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsclipboard.c b/vs/sdl2/src/video/windows/SDL_windowsclipboard.c index 24bc5abef30..29593d3692e 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsclipboard.c +++ b/vs/sdl2/src/video/windows/SDL_windowsclipboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsclipboard.h b/vs/sdl2/src/video/windows/SDL_windowsclipboard.h index 3db9bb9362d..66b3ae7e8ff 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsclipboard.h +++ b/vs/sdl2/src/video/windows/SDL_windowsclipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsevents.c b/vs/sdl2/src/video/windows/SDL_windowsevents.c index 35bae2596a5..559c1217185 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsevents.c +++ b/vs/sdl2/src/video/windows/SDL_windowsevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -318,7 +318,10 @@ static SDL_Scancode WindowsScanCodeToSDLScanCode(LPARAM lParam, WPARAM wParam) * value set, however we cannot simply map these in VKeytoScancode() or we will be * incorrectly handling the arrow keys on the number pad when NumLock is disabled * (which also generate VK_LEFT, VK_RIGHT, etc in that scenario). Instead, we'll only - * map them if none of the above special number pad mappings applied. */ + * map them if none of the above special number pad mappings applied. + * + * WIN+V (clipboard history feature) can also send Ctrl-V without a scancode value set. + */ if (code == SDL_SCANCODE_UNKNOWN) { code = VKeytoScancodeFallback(wParam); } @@ -327,7 +330,7 @@ static SDL_Scancode WindowsScanCodeToSDLScanCode(LPARAM lParam, WPARAM wParam) } #if !defined(__XBOXONE__) && !defined(__XBOXSERIES__) -static SDL_bool WIN_ShouldIgnoreFocusClick() +static SDL_bool WIN_ShouldIgnoreFocusClick(void) { return !SDL_GetHintBoolean(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, SDL_FALSE); } @@ -638,8 +641,9 @@ WIN_KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) if (nCode < 0 || nCode != HC_ACTION) { return CallNextHookEx(NULL, nCode, wParam, lParam); } + if (hookData->scanCode == 0x21d) { - // Skip fake LCtrl when RAlt is pressed + /* Skip fake LCtrl when RAlt is pressed */ return 1; } @@ -697,36 +701,37 @@ WIN_KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) #endif /*!defined(__XBOXONE__) && !defined(__XBOXSERIES__)*/ -// Return 1 if spruious LCtrl is pressed -// LCtrl is sent when RAltGR is pressed -int skip_bad_lcrtl(WPARAM wParam, LPARAM lParam) +/* Return SDL_TRUE if spurious LCtrl is pressed. LCtrl is sent when RAltGR is pressed. */ +static SDL_bool SkipAltGrLeftControl(WPARAM wParam, LPARAM lParam) { MSG next_msg; DWORD msg_time; + if (wParam != VK_CONTROL) { - return 0; + return SDL_FALSE; } - // Is this an extended key (i.e. right key)? - if (lParam & 0x01000000) - return 0; - // Here is a trick: "Alt Gr" sends LCTRL, then RALT. We only - // want the RALT message, so we try to see if the next message - // is a RALT message. In that case, this is a false LCTRL! + /* Is this an extended key (i.e. right key)? */ + if (lParam & 0x01000000) { + return SDL_FALSE; + } + +#if !defined(__XBOXONE__) && !defined(__XBOXSERIES__) + /* Here is a trick: "Alt Gr" sends LCTRL, then RALT. We only + want the RALT message, so we try to see if the next message + is a RALT message. In that case, this is a false LCTRL! */ msg_time = GetMessageTime(); if (PeekMessage(&next_msg, NULL, 0, 0, PM_NOREMOVE)) { if (next_msg.message == WM_KEYDOWN || next_msg.message == WM_SYSKEYDOWN) { - if (next_msg.wParam == VK_MENU && - (next_msg.lParam & 0x01000000) && - next_msg.time == msg_time) { - // Next message is a RALT down message, which - // means that this is NOT a proper LCTRL message! - return 1; + if (next_msg.wParam == VK_MENU && (next_msg.lParam & 0x01000000) && next_msg.time == msg_time) { + /* Next message is a RALT down message, which means that this is NOT a proper LCTRL message! */ + return SDL_TRUE; } } } - return 0; +#endif // !defined(__XBOXONE__) && !defined(__XBOXSERIES__) + return SDL_FALSE; } LRESULT CALLBACK @@ -1046,7 +1051,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) SDL_Scancode code = WindowsScanCodeToSDLScanCode(lParam, wParam); const Uint8 *keyboardState = SDL_GetKeyboardState(NULL); - if (skip_bad_lcrtl(wParam, lParam)) { + if (SkipAltGrLeftControl(wParam, lParam)) { returnCode = 0; break; } @@ -1073,7 +1078,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) SDL_Scancode code = WindowsScanCodeToSDLScanCode(lParam, wParam); const Uint8 *keyboardState = SDL_GetKeyboardState(NULL); - if (skip_bad_lcrtl(wParam, lParam)) { + if (SkipAltGrLeftControl(wParam, lParam)) { returnCode = 0; break; } @@ -1330,8 +1335,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) case WM_TIMER: { if (wParam == (UINT_PTR)&s_ModalMoveResizeLoop) { - // Send an expose event so the application can redraw - SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_EXPOSED, 0, 0); + SDL_OnWindowLiveResizeUpdate(data->window); return 0; } } break; @@ -1794,7 +1798,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) } #if !defined(__XBOXONE__) && !defined(__XBOXSERIES__) -static void WIN_UpdateClipCursorForWindows() +static void WIN_UpdateClipCursorForWindows(void) { SDL_VideoDevice *_this = SDL_GetVideoDevice(); SDL_Window *window; @@ -1816,7 +1820,7 @@ static void WIN_UpdateClipCursorForWindows() } } -static void WIN_UpdateMouseCapture() +static void WIN_UpdateMouseCapture(void) { SDL_Window *focusWindow = SDL_GetKeyboardFocus(); @@ -2090,7 +2094,7 @@ int SDL_RegisterApp(const char *name, Uint32 style, void *hInst) } /* Unregisters the windowclass registered in SDL_RegisterApp above. */ -void SDL_UnregisterApp() +void SDL_UnregisterApp(void) { WNDCLASSEX wcex; diff --git a/vs/sdl2/src/video/windows/SDL_windowsevents.h b/vs/sdl2/src/video/windows/SDL_windowsevents.h index 3e337d09294..7e1e5b1581d 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsevents.h +++ b/vs/sdl2/src/video/windows/SDL_windowsevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsframebuffer.c b/vs/sdl2/src/video/windows/SDL_windowsframebuffer.c index 423462222f6..8160e3e1d85 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsframebuffer.c +++ b/vs/sdl2/src/video/windows/SDL_windowsframebuffer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsframebuffer.h b/vs/sdl2/src/video/windows/SDL_windowsframebuffer.h index adcac8a35d6..f48d97e8787 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsframebuffer.h +++ b/vs/sdl2/src/video/windows/SDL_windowsframebuffer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowskeyboard.c b/vs/sdl2/src/video/windows/SDL_windowskeyboard.c index fb5aea7f892..b7cc929ab9f 100644 --- a/vs/sdl2/src/video/windows/SDL_windowskeyboard.c +++ b/vs/sdl2/src/video/windows/SDL_windowskeyboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -32,17 +32,18 @@ #include #ifndef SDL_DISABLE_WINDOWS_IME -static Uint32 end_ticks = 0; // added for DOSBox-X -static SDL_bool ime_incompos; // added for DOSBox-X static void IME_Init(SDL_VideoData *videodata, HWND hwnd); static void IME_Enable(SDL_VideoData *videodata, HWND hwnd); static void IME_Disable(SDL_VideoData *videodata, HWND hwnd); static void IME_Quit(SDL_VideoData *videodata); static SDL_bool IME_IsTextInputShown(SDL_VideoData *videodata); +static Uint32 end_ticks = 0; // added for DOSBox-X +static SDL_bool ime_incompos; // added for DOSBox-X #endif /* !SDL_DISABLE_WINDOWS_IME */ #if 1 // Added for DOSBox-X -SDL_bool SDL_IM_Composition(int more) { +SDL_bool SDL_IM_Composition(int more) +{ (void)more; #ifndef SDL_DISABLE_WINDOWS_IME #define IME_END_CR_WAIT 50 @@ -180,7 +181,7 @@ void WIN_QuitKeyboard(_THIS) #endif /* !SDL_DISABLE_WINDOWS_IME */ } -void WIN_ResetDeadKeys() +void WIN_ResetDeadKeys(void) { /* if a deadkey has been typed, but not the next character (which the deadkey might modify), @@ -263,9 +264,25 @@ void WIN_SetTextInputRect(_THIS, const SDL_Rect *rect) himc = ImmGetContext(videodata->ime_hwnd_current); if (himc) { - /* //reverted for DOSBox-X + /** //reverted for DOSBox-X COMPOSITIONFORM cof; CANDIDATEFORM caf; + + cof.dwStyle = CFS_RECT; + cof.ptCurrentPos.x = videodata->ime_rect.x; + cof.ptCurrentPos.y = videodata->ime_rect.y; + cof.rcArea.left = videodata->ime_rect.x; + cof.rcArea.right = (LONG)videodata->ime_rect.x + videodata->ime_rect.w; + cof.rcArea.top = videodata->ime_rect.y; + cof.rcArea.bottom = (LONG)videodata->ime_rect.y + videodata->ime_rect.h; + ImmSetCompositionWindow(himc, &cof); + + caf.dwIndex = 0; + caf.dwStyle = CFS_EXCLUDE; + caf.ptCurrentPos.x = videodata->ime_rect.x; + caf.ptCurrentPos.y = videodata->ime_rect.y; + caf.rcArea.left = videodata->ime_rect.x; + caf.rcArea.right = (LONG)videodata->ime_rect.x + videodata->ime_rect.w; caf.rcArea.top = videodata->ime_rect.y; caf.rcArea.bottom = (LONG)videodata->ime_rect.y + videodata->ime_rect.h; ImmSetCandidateWindow(himc, &caf); @@ -275,7 +292,6 @@ void WIN_SetTextInputRect(_THIS, const SDL_Rect *rect) cf.ptCurrentPos.y = videodata->ime_rect.y; cf.dwStyle = CFS_FORCE_POSITION; ImmSetCompositionWindow(himc, &cf); - ImmReleaseContext(videodata->ime_hwnd_current, himc); } #endif /* !SDL_DISABLE_WINDOWS_IME */ @@ -372,7 +388,7 @@ static void UILess_ReleaseSinks(SDL_VideoData *videodata); static void UILess_EnableUIUpdates(SDL_VideoData *videodata); static void UILess_DisableUIUpdates(SDL_VideoData *videodata); -static SDL_bool WIN_ShouldShowNativeUI() +static SDL_bool WIN_ShouldShowNativeUI(void) { return SDL_GetHintBoolean(SDL_HINT_IME_SHOW_UI, SDL_FALSE); } @@ -421,7 +437,7 @@ static void IME_Init(SDL_VideoData *videodata, HWND hwnd) IME_UpdateInputLocale(videodata); IME_SetupAPI(videodata); // Disabled because the candidate window will not be displayed. (for DOSBox-X) - /* + /** if (WIN_ShouldShowNativeUI()) { videodata->ime_uiless = SDL_FALSE; } else { @@ -1028,11 +1044,10 @@ SDL_bool IME_HandleMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM *lParam, S break; #if 1 // added for DOSBox-X case WM_IME_CHAR: - if(wParam == 0x20) { + if (wParam == 0x20) { // enable IME input space PostMessage(hwnd, WM_KEYDOWN, 0x20, 0x390001); - } - else if(wParam == 0x3000) { + } else if (wParam == 0x3000) { // input Zenkaku space videodata->ime_composition[0] = 0x3000; videodata->ime_composition[1] = 0; @@ -1044,19 +1059,19 @@ SDL_bool IME_HandleMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM *lParam, S #endif case WM_IME_SETCONTEXT: // Disabled because the string being converted will not be displayed. (for DOSBox-X) - /* + /** if (videodata->ime_uiless) { *lParam = 0; } - break; */ + break; case WM_IME_STARTCOMPOSITION: videodata->ime_suppress_endcomposition_event = SDL_FALSE; - ime_incompos = 1; /* added for DOSBox-X */ - //trap = SDL_TRUE; /* disabled for DOSBox-X */ + ime_incompos = 1; /* added for DOSBox-X */ + // trap = SDL_TRUE; /* disabled for DOSBox-X */ break; case WM_IME_COMPOSITION: - //trap = SDL_TRUE; /* disabled for DOSBox-X */ + // trap = SDL_TRUE; /* disabled for DOSBox-X */ himc = ImmGetContext(hwnd); if (*lParam & GCS_RESULTSTR) { videodata->ime_suppress_endcomposition_event = SDL_TRUE; diff --git a/vs/sdl2/src/video/windows/SDL_windowskeyboard.h b/vs/sdl2/src/video/windows/SDL_windowskeyboard.h index 3eb2398ea83..547169186b4 100644 --- a/vs/sdl2/src/video/windows/SDL_windowskeyboard.h +++ b/vs/sdl2/src/video/windows/SDL_windowskeyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsmessagebox.c b/vs/sdl2/src/video/windows/SDL_windowsmessagebox.c index f90e0d2e9aa..7f27022fe51 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsmessagebox.c +++ b/vs/sdl2/src/video/windows/SDL_windowsmessagebox.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsmessagebox.h b/vs/sdl2/src/video/windows/SDL_windowsmessagebox.h index 5cddc87e0a1..fe0b16e4a21 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsmessagebox.h +++ b/vs/sdl2/src/video/windows/SDL_windowsmessagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsmodes.c b/vs/sdl2/src/video/windows/SDL_windowsmodes.c index 9a37a11ac06..adc3902ce41 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsmodes.c +++ b/vs/sdl2/src/video/windows/SDL_windowsmodes.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -193,19 +193,8 @@ static SDL_bool WIN_GetDisplayMode(_THIS, LPCWSTR deviceName, DWORD index, SDL_D return SDL_TRUE; } -/* The win32 API calls in this function require Windows Vista or later. */ -/* *INDENT-OFF* */ /* clang-format off */ -typedef LONG (WINAPI *SDL_WIN32PROC_GetDisplayConfigBufferSizes)(UINT32 flags, UINT32* numPathArrayElements, UINT32* numModeInfoArrayElements); -typedef LONG (WINAPI *SDL_WIN32PROC_QueryDisplayConfig)(UINT32 flags, UINT32* numPathArrayElements, DISPLAYCONFIG_PATH_INFO* pathArray, UINT32* numModeInfoArrayElements, DISPLAYCONFIG_MODE_INFO* modeInfoArray, DISPLAYCONFIG_TOPOLOGY_ID* currentTopologyId); -typedef LONG (WINAPI *SDL_WIN32PROC_DisplayConfigGetDeviceInfo)(DISPLAYCONFIG_DEVICE_INFO_HEADER* requestPacket); -/* *INDENT-ON* */ /* clang-format on */ - -static char *WIN_GetDisplayNameVista(const WCHAR *deviceName) +static char *WIN_GetDisplayNameVista(SDL_VideoData *videodata, const WCHAR *deviceName) { - void *dll; - SDL_WIN32PROC_GetDisplayConfigBufferSizes pGetDisplayConfigBufferSizes; - SDL_WIN32PROC_QueryDisplayConfig pQueryDisplayConfig; - SDL_WIN32PROC_DisplayConfigGetDeviceInfo pDisplayConfigGetDeviceInfo; DISPLAYCONFIG_PATH_INFO *paths = NULL; DISPLAYCONFIG_MODE_INFO *modes = NULL; char *retval = NULL; @@ -214,21 +203,12 @@ static char *WIN_GetDisplayNameVista(const WCHAR *deviceName) UINT32 i; LONG rc; - dll = SDL_LoadObject("USER32.DLL"); - if (!dll) { + if (!videodata->GetDisplayConfigBufferSizes || !videodata->QueryDisplayConfig || !videodata->DisplayConfigGetDeviceInfo) { return NULL; } - pGetDisplayConfigBufferSizes = (SDL_WIN32PROC_GetDisplayConfigBufferSizes)SDL_LoadFunction(dll, "GetDisplayConfigBufferSizes"); - pQueryDisplayConfig = (SDL_WIN32PROC_QueryDisplayConfig)SDL_LoadFunction(dll, "QueryDisplayConfig"); - pDisplayConfigGetDeviceInfo = (SDL_WIN32PROC_DisplayConfigGetDeviceInfo)SDL_LoadFunction(dll, "DisplayConfigGetDeviceInfo"); - - if (!pGetDisplayConfigBufferSizes || !pQueryDisplayConfig || !pDisplayConfigGetDeviceInfo) { - goto WIN_GetDisplayNameVista_failed; - } - do { - rc = pGetDisplayConfigBufferSizes(QDC_ONLY_ACTIVE_PATHS, &pathCount, &modeCount); + rc = videodata->GetDisplayConfigBufferSizes(QDC_ONLY_ACTIVE_PATHS, &pathCount, &modeCount); if (rc != ERROR_SUCCESS) { goto WIN_GetDisplayNameVista_failed; } @@ -242,7 +222,7 @@ static char *WIN_GetDisplayNameVista(const WCHAR *deviceName) goto WIN_GetDisplayNameVista_failed; } - rc = pQueryDisplayConfig(QDC_ONLY_ACTIVE_PATHS, &pathCount, paths, &modeCount, modes, 0); + rc = videodata->QueryDisplayConfig(QDC_ONLY_ACTIVE_PATHS, &pathCount, paths, &modeCount, modes, 0); } while (rc == ERROR_INSUFFICIENT_BUFFER); if (rc == ERROR_SUCCESS) { @@ -255,7 +235,7 @@ static char *WIN_GetDisplayNameVista(const WCHAR *deviceName) sourceName.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME; sourceName.header.size = sizeof(sourceName); sourceName.header.id = paths[i].sourceInfo.id; - rc = pDisplayConfigGetDeviceInfo(&sourceName.header); + rc = videodata->DisplayConfigGetDeviceInfo(&sourceName.header); if (rc != ERROR_SUCCESS) { break; } else if (SDL_wcscmp(deviceName, sourceName.viewGdiDeviceName) != 0) { @@ -267,7 +247,7 @@ static char *WIN_GetDisplayNameVista(const WCHAR *deviceName) targetName.header.id = paths[i].targetInfo.id; targetName.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME; targetName.header.size = sizeof(targetName); - rc = pDisplayConfigGetDeviceInfo(&targetName.header); + rc = videodata->DisplayConfigGetDeviceInfo(&targetName.header); if (rc == ERROR_SUCCESS) { retval = WIN_StringToUTF8W(targetName.monitorFriendlyDeviceName); /* if we got an empty string, treat it as failure so we'll fallback @@ -283,14 +263,12 @@ static char *WIN_GetDisplayNameVista(const WCHAR *deviceName) SDL_free(paths); SDL_free(modes); - SDL_UnloadObject(dll); return retval; WIN_GetDisplayNameVista_failed: SDL_free(retval); SDL_free(paths); SDL_free(modes); - SDL_UnloadObject(dll); return NULL; } @@ -360,7 +338,7 @@ static void WIN_AddDisplay(_THIS, HMONITOR hMonitor, const MONITORINFOEXW *info, displaydata->IsValid = SDL_TRUE; SDL_zero(display); - display.name = WIN_GetDisplayNameVista(info->szDevice); + display.name = WIN_GetDisplayNameVista(_this->driverdata, info->szDevice); if (!display.name) { DISPLAY_DEVICEW device; SDL_zero(device); @@ -377,11 +355,10 @@ static void WIN_AddDisplay(_THIS, HMONITOR hMonitor, const MONITORINFOEXW *info, display.driverdata = displaydata; WIN_GetDisplayBounds(_this, &display, &displaydata->bounds); index = SDL_AddVideoDisplay(&display, send_event); - SDL_assert(index == *display_index); SDL_free(display.name); done: - *display_index += 1; + *display_index = index + 1; } typedef struct _WIN_AddDisplaysData diff --git a/vs/sdl2/src/video/windows/SDL_windowsmodes.h b/vs/sdl2/src/video/windows/SDL_windowsmodes.h index 9cec89ebd06..a0c7724160c 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsmodes.h +++ b/vs/sdl2/src/video/windows/SDL_windowsmodes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsmouse.c b/vs/sdl2/src/video/windows/SDL_windowsmouse.c index 214197b6b0d..a7136700998 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsmouse.c +++ b/vs/sdl2/src/video/windows/SDL_windowsmouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -474,7 +474,7 @@ static void WIN_SetLinearMouseScale(int mouse_speed) } } -void WIN_UpdateMouseSystemScale() +void WIN_UpdateMouseSystemScale(void) { int mouse_speed; int params[3] = { 0, 0, 0 }; diff --git a/vs/sdl2/src/video/windows/SDL_windowsmouse.h b/vs/sdl2/src/video/windows/SDL_windowsmouse.h index 25f510e5e09..4fa51ff9139 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsmouse.h +++ b/vs/sdl2/src/video/windows/SDL_windowsmouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsopengl.c b/vs/sdl2/src/video/windows/SDL_windowsopengl.c index ba505f1e782..58d0dd7be94 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsopengl.c +++ b/vs/sdl2/src/video/windows/SDL_windowsopengl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -642,6 +642,7 @@ static int WIN_GL_SetupWindowInternal(_THIS, SDL_Window *window) } if (_this->gl_config.floatbuffers) { + *iAttr++ = WGL_PIXEL_TYPE_ARB; *iAttr++ = WGL_TYPE_RGBA_FLOAT_ARB; } diff --git a/vs/sdl2/src/video/windows/SDL_windowsopengl.h b/vs/sdl2/src/video/windows/SDL_windowsopengl.h index 184a313ab04..1fabe2131a8 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsopengl.h +++ b/vs/sdl2/src/video/windows/SDL_windowsopengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsopengles.c b/vs/sdl2/src/video/windows/SDL_windowsopengles.c index 1450d50159b..50e63fd3af0 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsopengles.c +++ b/vs/sdl2/src/video/windows/SDL_windowsopengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsopengles.h b/vs/sdl2/src/video/windows/SDL_windowsopengles.h index f7844b47db5..fb85da6f0bb 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsopengles.h +++ b/vs/sdl2/src/video/windows/SDL_windowsopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsshape.c b/vs/sdl2/src/video/windows/SDL_windowsshape.c index fdeb1cdd364..1c0bc4e6916 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsshape.c +++ b/vs/sdl2/src/video/windows/SDL_windowsshape.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsshape.h b/vs/sdl2/src/video/windows/SDL_windowsshape.h index e1ce96a1864..3e5f300854b 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsshape.h +++ b/vs/sdl2/src/video/windows/SDL_windowsshape.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsvideo.c b/vs/sdl2/src/video/windows/SDL_windowsvideo.c index 5f1902aae3e..6c71bdcb60b 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsvideo.c +++ b/vs/sdl2/src/video/windows/SDL_windowsvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -93,9 +93,6 @@ static void WIN_DeleteDevice(SDL_VideoDevice *device) SDL_UnloadObject(data->shcoreDLL); } #endif - if (device->wakeup_lock) { - SDL_DestroyMutex(device->wakeup_lock); - } SDL_free(device->driverdata); SDL_free(device); } @@ -120,7 +117,6 @@ static SDL_VideoDevice *WIN_CreateDevice(void) return NULL; } device->driverdata = data; - device->wakeup_lock = SDL_CreateMutex(); #if !defined(__XBOXONE__) && !defined(__XBOXSERIES__) data->userDLL = SDL_LoadObject("USER32.DLL"); @@ -139,6 +135,9 @@ static SDL_VideoDevice *WIN_CreateDevice(void) data->GetDpiForWindow = (UINT (WINAPI *)(HWND))SDL_LoadFunction(data->userDLL, "GetDpiForWindow"); data->AreDpiAwarenessContextsEqual = (BOOL (WINAPI *)(DPI_AWARENESS_CONTEXT, DPI_AWARENESS_CONTEXT))SDL_LoadFunction(data->userDLL, "AreDpiAwarenessContextsEqual"); data->IsValidDpiAwarenessContext = (BOOL (WINAPI *)(DPI_AWARENESS_CONTEXT))SDL_LoadFunction(data->userDLL, "IsValidDpiAwarenessContext"); + data->GetDisplayConfigBufferSizes = (LONG (WINAPI *)(UINT32,UINT32*,UINT32* ))SDL_LoadFunction(data->userDLL, "GetDisplayConfigBufferSizes"); + data->QueryDisplayConfig = (LONG (WINAPI *)(UINT32,UINT32*,DISPLAYCONFIG_PATH_INFO*,UINT32*,DISPLAYCONFIG_MODE_INFO*,DISPLAYCONFIG_TOPOLOGY_ID*))SDL_LoadFunction(data->userDLL, "QueryDisplayConfig"); + data->DisplayConfigGetDeviceInfo = (LONG (WINAPI *)(DISPLAYCONFIG_DEVICE_INFO_HEADER*))SDL_LoadFunction(data->userDLL, "DisplayConfigGetDeviceInfo"); /* *INDENT-ON* */ /* clang-format on */ } else { SDL_ClearError(); diff --git a/vs/sdl2/src/video/windows/SDL_windowsvideo.h b/vs/sdl2/src/video/windows/SDL_windowsvideo.h index 93ca1cb63e3..1818e79355a 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsvideo.h +++ b/vs/sdl2/src/video/windows/SDL_windowsvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -389,6 +389,10 @@ typedef struct SDL_VideoData UINT (WINAPI *GetDpiForWindow)( HWND ); BOOL (WINAPI *AreDpiAwarenessContextsEqual)(DPI_AWARENESS_CONTEXT, DPI_AWARENESS_CONTEXT); BOOL (WINAPI *IsValidDpiAwarenessContext)(DPI_AWARENESS_CONTEXT); + /* DisplayConfig functions */ + LONG (WINAPI *GetDisplayConfigBufferSizes)( UINT32, UINT32*, UINT32* ); + LONG (WINAPI *QueryDisplayConfig)( UINT32, UINT32*, DISPLAYCONFIG_PATH_INFO*, UINT32*, DISPLAYCONFIG_MODE_INFO*, DISPLAYCONFIG_TOPOLOGY_ID*); + LONG (WINAPI *DisplayConfigGetDeviceInfo)( DISPLAYCONFIG_DEVICE_INFO_HEADER*); /* *INDENT-ON* */ /* clang-format on */ void *shcoreDLL; diff --git a/vs/sdl2/src/video/windows/SDL_windowsvulkan.c b/vs/sdl2/src/video/windows/SDL_windowsvulkan.c index 01ab8a55e48..9e985ca78d3 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsvulkan.c +++ b/vs/sdl2/src/video/windows/SDL_windowsvulkan.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowsvulkan.h b/vs/sdl2/src/video/windows/SDL_windowsvulkan.h index 1545dcd89a2..1e0e41b820c 100644 --- a/vs/sdl2/src/video/windows/SDL_windowsvulkan.h +++ b/vs/sdl2/src/video/windows/SDL_windowsvulkan.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowswindow.c b/vs/sdl2/src/video/windows/SDL_windowswindow.c index cf49fbfbfce..93470f34d8a 100644 --- a/vs/sdl2/src/video/windows/SDL_windowswindow.c +++ b/vs/sdl2/src/video/windows/SDL_windowswindow.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/SDL_windowswindow.h b/vs/sdl2/src/video/windows/SDL_windowswindow.h index 20f78b97d44..0134adca815 100644 --- a/vs/sdl2/src/video/windows/SDL_windowswindow.h +++ b/vs/sdl2/src/video/windows/SDL_windowswindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/windows/wmmsg.h b/vs/sdl2/src/video/windows/wmmsg.h index 86e6c2a900a..24603bef458 100644 --- a/vs/sdl2/src/video/windows/wmmsg.h +++ b/vs/sdl2/src/video/windows/wmmsg.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/winrt/SDL_winrtevents.cpp b/vs/sdl2/src/video/winrt/SDL_winrtevents.cpp index 79468f7cdd5..6e72da3431f 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtevents.cpp +++ b/vs/sdl2/src/video/winrt/SDL_winrtevents.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/winrt/SDL_winrtevents_c.h b/vs/sdl2/src/video/winrt/SDL_winrtevents_c.h index d08cf9aeaa3..6030b92eb59 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtevents_c.h +++ b/vs/sdl2/src/video/winrt/SDL_winrtevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/winrt/SDL_winrtgamebar.cpp b/vs/sdl2/src/video/winrt/SDL_winrtgamebar.cpp index e56def1d11b..3cfc7e8129d 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtgamebar.cpp +++ b/vs/sdl2/src/video/winrt/SDL_winrtgamebar.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/winrt/SDL_winrtgamebar_cpp.h b/vs/sdl2/src/video/winrt/SDL_winrtgamebar_cpp.h index 7e3f5d9277c..43a9bf31e9c 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtgamebar_cpp.h +++ b/vs/sdl2/src/video/winrt/SDL_winrtgamebar_cpp.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/winrt/SDL_winrtkeyboard.cpp b/vs/sdl2/src/video/winrt/SDL_winrtkeyboard.cpp index 26a1902d5d2..da2d09df9c0 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtkeyboard.cpp +++ b/vs/sdl2/src/video/winrt/SDL_winrtkeyboard.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/winrt/SDL_winrtmessagebox.cpp b/vs/sdl2/src/video/winrt/SDL_winrtmessagebox.cpp index a2d66a3c4ff..b8469a7227c 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtmessagebox.cpp +++ b/vs/sdl2/src/video/winrt/SDL_winrtmessagebox.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -35,7 +35,7 @@ using namespace Windows::Foundation; using namespace Windows::UI::Popups; static String ^ WINRT_UTF8ToPlatformString(const char *str) { - wchar_t *wstr = WIN_UTF8ToString(str); + wchar_t *wstr = WIN_UTF8ToStringW(str); String ^ rtstr = ref new String(wstr); SDL_free(wstr); return rtstr; diff --git a/vs/sdl2/src/video/winrt/SDL_winrtmessagebox.h b/vs/sdl2/src/video/winrt/SDL_winrtmessagebox.h index ab02d3a8b9b..6ff3d3f76dc 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtmessagebox.h +++ b/vs/sdl2/src/video/winrt/SDL_winrtmessagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/winrt/SDL_winrtmouse.cpp b/vs/sdl2/src/video/winrt/SDL_winrtmouse.cpp index e46687fd484..49da5319627 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtmouse.cpp +++ b/vs/sdl2/src/video/winrt/SDL_winrtmouse.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/winrt/SDL_winrtmouse_c.h b/vs/sdl2/src/video/winrt/SDL_winrtmouse_c.h index 2271a14cdb0..cdeb578874f 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtmouse_c.h +++ b/vs/sdl2/src/video/winrt/SDL_winrtmouse_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/winrt/SDL_winrtopengles.cpp b/vs/sdl2/src/video/winrt/SDL_winrtopengles.cpp index cf70241746d..5fa15c47750 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtopengles.cpp +++ b/vs/sdl2/src/video/winrt/SDL_winrtopengles.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/winrt/SDL_winrtopengles.h b/vs/sdl2/src/video/winrt/SDL_winrtopengles.h index c48a2df67db..29b919b3f8f 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtopengles.h +++ b/vs/sdl2/src/video/winrt/SDL_winrtopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/winrt/SDL_winrtpointerinput.cpp b/vs/sdl2/src/video/winrt/SDL_winrtpointerinput.cpp index 63c2c860548..8f1264cc4c8 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtpointerinput.cpp +++ b/vs/sdl2/src/video/winrt/SDL_winrtpointerinput.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/winrt/SDL_winrtvideo.cpp b/vs/sdl2/src/video/winrt/SDL_winrtvideo.cpp index 9160bbb6386..3edf770caf5 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtvideo.cpp +++ b/vs/sdl2/src/video/winrt/SDL_winrtvideo.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -321,7 +321,7 @@ static int WINRT_AddDisplaysForOutput(_THIS, IDXGIAdapter1 *dxgiAdapter1, int ou WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGIOutput::FindClosestMatchingMode failed", hr); goto done; } else { - displayName = WIN_StringToUTF8(dxgiOutputDesc.DeviceName); + displayName = WIN_StringToUTF8W(dxgiOutputDesc.DeviceName); display.name = displayName; WINRT_DXGIModeToSDLDisplayMode(&closestMatch, &display.desktop_mode); display.current_mode = display.desktop_mode; diff --git a/vs/sdl2/src/video/winrt/SDL_winrtvideo_cpp.h b/vs/sdl2/src/video/winrt/SDL_winrtvideo_cpp.h index a60b3aa742f..2928ee882a4 100644 --- a/vs/sdl2/src/video/winrt/SDL_winrtvideo_cpp.h +++ b/vs/sdl2/src/video/winrt/SDL_winrtvideo_cpp.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11clipboard.c b/vs/sdl2/src/video/x11/SDL_x11clipboard.c index cf826a55986..f9c0a431ac7 100644 --- a/vs/sdl2/src/video/x11/SDL_x11clipboard.c +++ b/vs/sdl2/src/video/x11/SDL_x11clipboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11clipboard.h b/vs/sdl2/src/video/x11/SDL_x11clipboard.h index c9849b7bb54..cb010a34cb2 100644 --- a/vs/sdl2/src/video/x11/SDL_x11clipboard.h +++ b/vs/sdl2/src/video/x11/SDL_x11clipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11dyn.c b/vs/sdl2/src/video/x11/SDL_x11dyn.c index 7a4f5cc0e67..a940bea8e46 100644 --- a/vs/sdl2/src/video/x11/SDL_x11dyn.c +++ b/vs/sdl2/src/video/x11/SDL_x11dyn.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11dyn.h b/vs/sdl2/src/video/x11/SDL_x11dyn.h index 5a78ad00044..34a0a90c709 100644 --- a/vs/sdl2/src/video/x11/SDL_x11dyn.h +++ b/vs/sdl2/src/video/x11/SDL_x11dyn.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11events.c b/vs/sdl2/src/video/x11/SDL_x11events.c index 21b66ff778b..60c87a288cd 100644 --- a/vs/sdl2/src/video/x11/SDL_x11events.c +++ b/vs/sdl2/src/video/x11/SDL_x11events.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -676,9 +676,10 @@ static void X11_HandleClipboardEvent(_THIS, const XEvent *xevent) &overflow, &seln_data) == Success) { if (seln_format != None) { X11_XChangeProperty(display, req->requestor, req->property, - sevent.xselection.target, seln_format, PropModeReplace, + req->target, 8, PropModeReplace, seln_data, nbytes); sevent.xselection.property = req->property; + sevent.xselection.target = req->target; X11_XFree(seln_data); break; } else { diff --git a/vs/sdl2/src/video/x11/SDL_x11events.h b/vs/sdl2/src/video/x11/SDL_x11events.h index cec823c0c32..c9534f15e36 100644 --- a/vs/sdl2/src/video/x11/SDL_x11events.h +++ b/vs/sdl2/src/video/x11/SDL_x11events.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11framebuffer.c b/vs/sdl2/src/video/x11/SDL_x11framebuffer.c index 0a63eda7c0a..2bfdc74acac 100644 --- a/vs/sdl2/src/video/x11/SDL_x11framebuffer.c +++ b/vs/sdl2/src/video/x11/SDL_x11framebuffer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11framebuffer.h b/vs/sdl2/src/video/x11/SDL_x11framebuffer.h index f5fe14224bb..d6fb21fc368 100644 --- a/vs/sdl2/src/video/x11/SDL_x11framebuffer.h +++ b/vs/sdl2/src/video/x11/SDL_x11framebuffer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11keyboard.c b/vs/sdl2/src/video/x11/SDL_x11keyboard.c index 9a23baf324c..7073e134128 100644 --- a/vs/sdl2/src/video/x11/SDL_x11keyboard.c +++ b/vs/sdl2/src/video/x11/SDL_x11keyboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11keyboard.h b/vs/sdl2/src/video/x11/SDL_x11keyboard.h index 53cf51253b7..389119c76c1 100644 --- a/vs/sdl2/src/video/x11/SDL_x11keyboard.h +++ b/vs/sdl2/src/video/x11/SDL_x11keyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11messagebox.c b/vs/sdl2/src/video/x11/SDL_x11messagebox.c index 0e3b67af110..9dd2887a865 100644 --- a/vs/sdl2/src/video/x11/SDL_x11messagebox.c +++ b/vs/sdl2/src/video/x11/SDL_x11messagebox.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -125,12 +125,15 @@ static SDL_INLINE int IntMax(int a, int b) /* Return width and height for a string. */ static void GetTextWidthHeight(SDL_MessageBoxDataX11 *data, const char *str, int nbytes, int *pwidth, int *pheight) { +#ifdef X_HAVE_UTF8_STRING if (SDL_X11_HAVE_UTF8) { XRectangle overall_ink, overall_logical; X11_Xutf8TextExtents(data->font_set, str, nbytes, &overall_ink, &overall_logical); *pwidth = overall_logical.width; *pheight = overall_logical.height; - } else { + } else +#endif + { XCharStruct text_structure; int font_direction, font_ascent, font_descent; X11_XTextExtents(data->font_struct, str, nbytes, @@ -186,6 +189,7 @@ static int X11_MessageBoxInit(SDL_MessageBoxDataX11 *data, const SDL_MessageBoxD return SDL_SetError("Couldn't open X11 display"); } +#ifdef X_HAVE_UTF8_STRING if (SDL_X11_HAVE_UTF8) { char **missing = NULL; int num_missing = 0; @@ -197,7 +201,9 @@ static int X11_MessageBoxInit(SDL_MessageBoxDataX11 *data, const SDL_MessageBoxD if (!data->font_set) { return SDL_SetError("Couldn't load font %s", g_MessageBoxFont); } - } else { + } else +#endif + { data->font_struct = X11_XLoadQueryFont(data->display, g_MessageBoxFontLatin1); if (!data->font_struct) { return SDL_SetError("Couldn't load font %s", g_MessageBoxFontLatin1); @@ -536,11 +542,14 @@ static void X11_MessageBoxDraw(SDL_MessageBoxDataX11 *data, GC ctx) for (i = 0; i < data->numlines; i++) { TextLineData *plinedata = &data->linedata[i]; +#ifdef X_HAVE_UTF8_STRING if (SDL_X11_HAVE_UTF8) { X11_Xutf8DrawString(display, window, data->font_set, ctx, data->xtext, data->ytext + i * data->text_height, plinedata->text, plinedata->length); - } else { + } else +#endif + { X11_XDrawString(display, window, ctx, data->xtext, data->ytext + i * data->text_height, plinedata->text, plinedata->length); @@ -565,12 +574,15 @@ static void X11_MessageBoxDraw(SDL_MessageBoxDataX11 *data, GC ctx) X11_XSetForeground(display, ctx, (data->mouse_over_index == i) ? data->color[SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED] : data->color[SDL_MESSAGEBOX_COLOR_TEXT]); +#ifdef X_HAVE_UTF8_STRING if (SDL_X11_HAVE_UTF8) { X11_Xutf8DrawString(display, window, data->font_set, ctx, buttondatax11->x + offset, buttondatax11->y + offset, buttondata->text, buttondatax11->length); - } else { + } else +#endif + { X11_XDrawString(display, window, ctx, buttondatax11->x + offset, buttondatax11->y + offset, buttondata->text, buttondatax11->length); @@ -604,12 +616,17 @@ static int X11_MessageBoxLoop(SDL_MessageBoxDataX11 *data) SDL_bool has_focus = SDL_TRUE; KeySym last_key_pressed = XK_VoidSymbol; unsigned long gcflags = GCForeground | GCBackground; +#ifdef X_HAVE_UTF8_STRING + const int have_utf8 = SDL_X11_HAVE_UTF8; +#else + const int have_utf8 = 0; +#endif SDL_zero(ctx_vals); ctx_vals.foreground = data->color[SDL_MESSAGEBOX_COLOR_BACKGROUND]; ctx_vals.background = data->color[SDL_MESSAGEBOX_COLOR_BACKGROUND]; - if (!SDL_X11_HAVE_UTF8) { + if (!have_utf8) { gcflags |= GCFont; ctx_vals.font = data->font_struct->fid; } diff --git a/vs/sdl2/src/video/x11/SDL_x11messagebox.h b/vs/sdl2/src/video/x11/SDL_x11messagebox.h index 16759798f68..6232b350b05 100644 --- a/vs/sdl2/src/video/x11/SDL_x11messagebox.h +++ b/vs/sdl2/src/video/x11/SDL_x11messagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11modes.c b/vs/sdl2/src/video/x11/SDL_x11modes.c index 35c02e304f6..842836ca562 100644 --- a/vs/sdl2/src/video/x11/SDL_x11modes.c +++ b/vs/sdl2/src/video/x11/SDL_x11modes.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11modes.h b/vs/sdl2/src/video/x11/SDL_x11modes.h index 8c6c1c24e4d..31dec38cdaa 100644 --- a/vs/sdl2/src/video/x11/SDL_x11modes.h +++ b/vs/sdl2/src/video/x11/SDL_x11modes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11mouse.c b/vs/sdl2/src/video/x11/SDL_x11mouse.c index 0938de99f82..df5f968d638 100644 --- a/vs/sdl2/src/video/x11/SDL_x11mouse.c +++ b/vs/sdl2/src/video/x11/SDL_x11mouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -30,6 +30,7 @@ /* FIXME: Find a better place to put this... */ static Cursor x11_empty_cursor = None; +static SDL_bool x11_cursor_visible = SDL_TRUE; static Display *GetDisplay(void) { @@ -298,6 +299,8 @@ static int X11_ShowCursor(SDL_Cursor *cursor) Display *display = GetDisplay(); SDL_Window *window; + x11_cursor_visible = !!cursor; + for (window = video->windows; window; window = window->next) { SDL_WindowData *data = (SDL_WindowData *)window->driverdata; if (data) { @@ -317,12 +320,13 @@ static void WarpMouseInternal(Window xwindow, const int x, const int y) { SDL_VideoData *videodata = (SDL_VideoData *)SDL_GetVideoDevice()->driverdata; Display *display = videodata->display; - SDL_Mouse *mouse = SDL_GetMouse(); +#ifdef SDL_VIDEO_DRIVER_X11_XINPUT2 int deviceid = 0; +#endif SDL_bool warp_hack = SDL_FALSE; /* XWayland will only warp the cursor if it is hidden, so this workaround is required. */ - if (videodata->is_xwayland && mouse && mouse->cursor_shown) { + if (videodata->is_xwayland && x11_cursor_visible) { warp_hack = SDL_TRUE; } @@ -490,5 +494,3 @@ void X11_QuitMouse(_THIS) } #endif /* SDL_VIDEO_DRIVER_X11 */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/src/video/x11/SDL_x11mouse.h b/vs/sdl2/src/video/x11/SDL_x11mouse.h index 5cccd31d4f2..eb9153ec45b 100644 --- a/vs/sdl2/src/video/x11/SDL_x11mouse.h +++ b/vs/sdl2/src/video/x11/SDL_x11mouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11opengl.c b/vs/sdl2/src/video/x11/SDL_x11opengl.c index 30563fc6e9b..a597f4e7f20 100644 --- a/vs/sdl2/src/video/x11/SDL_x11opengl.c +++ b/vs/sdl2/src/video/x11/SDL_x11opengl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga Copyright (C) 2021 NVIDIA Corporation This software is provided 'as-is', without any express or implied @@ -575,6 +575,7 @@ static int X11_GL_GetAttributes(_THIS, Display *display, int screen, int *attrib } if (_this->gl_config.floatbuffers) { + attribs[i++] = GLX_RENDER_TYPE; attribs[i++] = GLX_RGBA_FLOAT_TYPE_ARB; } diff --git a/vs/sdl2/src/video/x11/SDL_x11opengl.h b/vs/sdl2/src/video/x11/SDL_x11opengl.h index e0e8e195d93..6d7f3c8409b 100644 --- a/vs/sdl2/src/video/x11/SDL_x11opengl.h +++ b/vs/sdl2/src/video/x11/SDL_x11opengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11opengles.c b/vs/sdl2/src/video/x11/SDL_x11opengles.c index ad1e26b1f6f..09733c33fdc 100644 --- a/vs/sdl2/src/video/x11/SDL_x11opengles.c +++ b/vs/sdl2/src/video/x11/SDL_x11opengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11opengles.h b/vs/sdl2/src/video/x11/SDL_x11opengles.h index 23530d85466..f9409680730 100644 --- a/vs/sdl2/src/video/x11/SDL_x11opengles.h +++ b/vs/sdl2/src/video/x11/SDL_x11opengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11shape.c b/vs/sdl2/src/video/x11/SDL_x11shape.c index fee1c7aa8aa..88ff052a75d 100644 --- a/vs/sdl2/src/video/x11/SDL_x11shape.c +++ b/vs/sdl2/src/video/x11/SDL_x11shape.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11shape.h b/vs/sdl2/src/video/x11/SDL_x11shape.h index 7cd168c8f98..79f99bc35ad 100644 --- a/vs/sdl2/src/video/x11/SDL_x11shape.h +++ b/vs/sdl2/src/video/x11/SDL_x11shape.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11sym.h b/vs/sdl2/src/video/x11/SDL_x11sym.h index 450c07ebf2e..2fc12ceefa1 100644 --- a/vs/sdl2/src/video/x11/SDL_x11sym.h +++ b/vs/sdl2/src/video/x11/SDL_x11sym.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -99,7 +99,7 @@ SDL_X11_SYM(Status,XInitThreads,(void),(),return) SDL_X11_SYM(int,XPeekEvent,(Display* a,XEvent* b),(a,b),return) SDL_X11_SYM(int,XPending,(Display* a),(a),return) SDL_X11_SYM(int,XPutImage,(Display* a,Drawable b,GC c,XImage* d,int e,int f,int g,int h,unsigned int i,unsigned int j),(a,b,c,d,e,f,g,h,i,j),return) -SDL_X11_SYM(int,XQueryKeymap,(Display* a,char *b),(a,b),return) +SDL_X11_SYM(int,XQueryKeymap,(Display* a,char b[32]),(a,b),return) SDL_X11_SYM(Bool,XQueryPointer,(Display* a,Window b,Window* c,Window* d,int* e,int* f,int* g,int* h,unsigned int* i),(a,b,c,d,e,f,g,h,i),return) SDL_X11_SYM(int,XRaiseWindow,(Display* a,Window b),(a,b),return) SDL_X11_SYM(int,XReparentWindow,(Display* a,Window b,Window c,int d,int e),(a,b,c,d,e),return) diff --git a/vs/sdl2/src/video/x11/SDL_x11touch.c b/vs/sdl2/src/video/x11/SDL_x11touch.c index 338001fd610..414d8e80515 100644 --- a/vs/sdl2/src/video/x11/SDL_x11touch.c +++ b/vs/sdl2/src/video/x11/SDL_x11touch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11touch.h b/vs/sdl2/src/video/x11/SDL_x11touch.h index ca6edac544f..3ff0e9a5824 100644 --- a/vs/sdl2/src/video/x11/SDL_x11touch.h +++ b/vs/sdl2/src/video/x11/SDL_x11touch.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11video.c b/vs/sdl2/src/video/x11/SDL_x11video.c index 6a543c186c9..b43da511681 100644 --- a/vs/sdl2/src/video/x11/SDL_x11video.c +++ b/vs/sdl2/src/video/x11/SDL_x11video.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -50,7 +50,7 @@ static int X11_VideoInit(_THIS); static void X11_VideoQuit(_THIS); /* Find out what class name we should use */ -static char *get_classname() +static char *get_classname(void) { char *spot; #if defined(__LINUX__) || defined(__FREEBSD__) @@ -108,9 +108,6 @@ static void X11_DeleteDevice(SDL_VideoDevice *device) X11_XCloseDisplay(data->request_display); } SDL_free(data->windowlist); - if (device->wakeup_lock) { - SDL_DestroyMutex(device->wakeup_lock); - } SDL_free(device->driverdata); SDL_free(device); @@ -204,8 +201,6 @@ static SDL_VideoDevice *X11_CreateDevice(void) return NULL; } - device->wakeup_lock = SDL_CreateMutex(); - #ifdef X11_DEBUG X11_XSynchronize(data->display, True); #endif diff --git a/vs/sdl2/src/video/x11/SDL_x11video.h b/vs/sdl2/src/video/x11/SDL_x11video.h index a12a34b9685..274233d4d49 100644 --- a/vs/sdl2/src/video/x11/SDL_x11video.h +++ b/vs/sdl2/src/video/x11/SDL_x11video.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11vulkan.c b/vs/sdl2/src/video/x11/SDL_x11vulkan.c index d9a0d2f35bf..a2fe5ae32d4 100644 --- a/vs/sdl2/src/video/x11/SDL_x11vulkan.c +++ b/vs/sdl2/src/video/x11/SDL_x11vulkan.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -32,8 +32,10 @@ #if defined(__OpenBSD__) #define DEFAULT_VULKAN "libvulkan.so" +#define DEFAULT_X11_XCB "libX11-xcb.so" #else #define DEFAULT_VULKAN "libvulkan.so.1" +#define DEFAULT_X11_XCB "libX11-xcb.so.1" #endif /* @@ -108,7 +110,7 @@ int X11_Vulkan_LoadLibrary(_THIS, const char *path) } else { const char *libX11XCBLibraryName = SDL_getenv("SDL_X11_XCB_LIBRARY"); if (!libX11XCBLibraryName) { - libX11XCBLibraryName = "libX11-xcb.so"; + libX11XCBLibraryName = DEFAULT_X11_XCB; } videoData->vulkan_xlib_xcb_library = SDL_LoadObject(libX11XCBLibraryName); if (!videoData->vulkan_xlib_xcb_library) { diff --git a/vs/sdl2/src/video/x11/SDL_x11vulkan.h b/vs/sdl2/src/video/x11/SDL_x11vulkan.h index 438b16d07da..480c5aa6edc 100644 --- a/vs/sdl2/src/video/x11/SDL_x11vulkan.h +++ b/vs/sdl2/src/video/x11/SDL_x11vulkan.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11window.c b/vs/sdl2/src/video/x11/SDL_x11window.c index 07ec43156ab..cde53c4a3ab 100644 --- a/vs/sdl2/src/video/x11/SDL_x11window.c +++ b/vs/sdl2/src/video/x11/SDL_x11window.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -285,8 +285,8 @@ static int SetupWindowData(_THIS, SDL_Window *window, Window w, BOOL created) 1) * sizeof(*windowlist)); if (!windowlist) { - SDL_free(data); - return SDL_OutOfMemory(); + SDL_OutOfMemory(); + goto error_cleanup; } windowlist[numwindows] = data; videodata->numwindows++; @@ -331,9 +331,45 @@ static int SetupWindowData(_THIS, SDL_Window *window, Window w, BOOL created) } } +#if defined(SDL_VIDEO_OPENGL_ES) || defined(SDL_VIDEO_OPENGL_ES2) || defined(SDL_VIDEO_OPENGL_EGL) + if ((window->flags & SDL_WINDOW_OPENGL) && + ((_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) || + SDL_GetHintBoolean(SDL_HINT_VIDEO_X11_FORCE_EGL, SDL_FALSE)) +#ifdef SDL_VIDEO_OPENGL_GLX + && (!_this->gl_data || X11_GL_UseEGL(_this) ) +#endif + ) { +#ifdef SDL_VIDEO_OPENGL_EGL + if (!_this->egl_data) { + goto error_cleanup; + } + + /* Create the GLES window surface */ + data->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType)w); + + if (data->egl_surface == EGL_NO_SURFACE) { + SDL_SetError("Could not create GLES window surface"); + goto error_cleanup; + } +#else + SDL_SetError("Could not create GLES window surface (EGL support not configured)"); + goto error_cleanup; +#endif /* SDL_VIDEO_OPENGL_EGL */ + } +#endif + /* All done! */ window->driverdata = data; return 0; + +error_cleanup: +#ifdef X_HAVE_UTF8_STRING + if (data->ic) { + X11_XDestroyIC(data->ic); + } +#endif + SDL_free(data); + return -1; } static void SetWindowBordered(Display *display, int screen, Window window, SDL_bool border) @@ -634,31 +670,6 @@ int X11_CreateWindow(_THIS, SDL_Window *window) } windowdata = (SDL_WindowData *)window->driverdata; -#if defined(SDL_VIDEO_OPENGL_ES) || defined(SDL_VIDEO_OPENGL_ES2) || defined(SDL_VIDEO_OPENGL_EGL) - if ((window->flags & SDL_WINDOW_OPENGL) && - ((_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) || - SDL_GetHintBoolean(SDL_HINT_VIDEO_X11_FORCE_EGL, SDL_FALSE)) -#ifdef SDL_VIDEO_OPENGL_GLX - && (!_this->gl_data || X11_GL_UseEGL(_this) ) -#endif - ) { -#ifdef SDL_VIDEO_OPENGL_EGL - if (!_this->egl_data) { - return -1; - } - - /* Create the GLES window surface */ - windowdata->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType)w); - - if (windowdata->egl_surface == EGL_NO_SURFACE) { - return SDL_SetError("Could not create GLES window surface"); - } -#else - return SDL_SetError("Could not create GLES window surface (EGL support not configured)"); -#endif /* SDL_VIDEO_OPENGL_EGL */ - } -#endif - #ifdef X_HAVE_UTF8_STRING if (SDL_X11_HAVE_UTF8 && windowdata->ic) { X11_XGetICValues(windowdata->ic, XNFilterEvents, &fevent, NULL); @@ -861,11 +872,6 @@ void X11_SetWindowMinimumSize(_THIS, SDL_Window *window) X11_XSetWMNormalHints(display, data->xwindow, sizehints); X11_XFree(sizehints); - - /* See comment in X11_SetWindowSize. */ - X11_XResizeWindow(display, data->xwindow, window->w, window->h); - X11_XMoveWindow(display, data->xwindow, window->x - data->border_left, window->y - data->border_top); - X11_XRaiseWindow(display, data->xwindow); } X11_XFlush(display); @@ -889,11 +895,6 @@ void X11_SetWindowMaximumSize(_THIS, SDL_Window *window) X11_XSetWMNormalHints(display, data->xwindow, sizehints); X11_XFree(sizehints); - - /* See comment in X11_SetWindowSize. */ - X11_XResizeWindow(display, data->xwindow, window->w, window->h); - X11_XMoveWindow(display, data->xwindow, window->x - data->border_left, window->y - data->border_top); - X11_XRaiseWindow(display, data->xwindow); } X11_XFlush(display); diff --git a/vs/sdl2/src/video/x11/SDL_x11window.h b/vs/sdl2/src/video/x11/SDL_x11window.h index 12a89b03b2a..cc8511f44ed 100644 --- a/vs/sdl2/src/video/x11/SDL_x11window.h +++ b/vs/sdl2/src/video/x11/SDL_x11window.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11xfixes.c b/vs/sdl2/src/video/x11/SDL_x11xfixes.c index 6ae7e053ff8..3fb000dde55 100644 --- a/vs/sdl2/src/video/x11/SDL_x11xfixes.c +++ b/vs/sdl2/src/video/x11/SDL_x11xfixes.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -74,12 +74,12 @@ void X11_InitXfixes(_THIS) xfixes_initialized = 1; } -int X11_XfixesIsInitialized() +int X11_XfixesIsInitialized(void) { return xfixes_initialized; } -int X11_GetXFixesSelectionNotifyEvent() +int X11_GetXFixesSelectionNotifyEvent(void) { return xfixes_selection_notify_event; } diff --git a/vs/sdl2/src/video/x11/SDL_x11xfixes.h b/vs/sdl2/src/video/x11/SDL_x11xfixes.h index 3464867374d..8c72b19de4c 100644 --- a/vs/sdl2/src/video/x11/SDL_x11xfixes.h +++ b/vs/sdl2/src/video/x11/SDL_x11xfixes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/src/video/x11/SDL_x11xinput2.c b/vs/sdl2/src/video/x11/SDL_x11xinput2.c index afed8581744..65ed9b6dfdc 100644 --- a/vs/sdl2/src/video/x11/SDL_x11xinput2.c +++ b/vs/sdl2/src/video/x11/SDL_x11xinput2.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -453,7 +453,7 @@ void X11_Xinput2SelectTouch(_THIS, SDL_Window *window) #endif } -int X11_Xinput2IsInitialized() +int X11_Xinput2IsInitialized(void) { #ifdef SDL_VIDEO_DRIVER_X11_XINPUT2 return xinput2_initialized; @@ -462,7 +462,7 @@ int X11_Xinput2IsInitialized() #endif } -int X11_Xinput2IsMultitouchSupported() +int X11_Xinput2IsMultitouchSupported(void) { #ifdef SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH return xinput2_initialized && xinput2_multitouch_supported; diff --git a/vs/sdl2/src/video/x11/SDL_x11xinput2.h b/vs/sdl2/src/video/x11/SDL_x11xinput2.h index 3a8e3c0f445..174033bfcac 100644 --- a/vs/sdl2/src/video/x11/SDL_x11xinput2.h +++ b/vs/sdl2/src/video/x11/SDL_x11xinput2.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/CMakeLists.txt b/vs/sdl2/test/CMakeLists.txt index f048d51f9ed..7cabbc36038 100644 --- a/vs/sdl2/test/CMakeLists.txt +++ b/vs/sdl2/test/CMakeLists.txt @@ -1,5 +1,5 @@ -cmake_minimum_required(VERSION 3.0...3.5) -project(SDL2_test) +cmake_minimum_required(VERSION 3.0...3.10) +project(SDL2_test C) include(CheckCCompilerFlag) include(CMakeParseArguments) @@ -9,8 +9,35 @@ set(SDL_TEST_EXECUTABLES) set(SDL_TESTS_NONINTERACTIVE) set(SDL_TESTS_NEEDS_RESOURCES) +option(SDLTEST_TRACKMEM "Run tests with --trackmem" OFF) + +if(WIN32 AND NOT WINDOWS_STORE) + option(SDLTEST_PROCDUMP "Run tests using sdlprocdump for minidump generation" OFF) + add_executable(sdlprocdump win32/sdlprocdump.c) + if(SDLTEST_PROCDUMP) + set(CMAKE_TEST_LAUNCHER "$;--") + else() + set_property(TARGET sdlprocdump PROPERTY EXCLUDE_FROM_ALL "1") + endif() +endif() + +set(SDLTEST_TARGETS ) + +macro(sdltest_link_librararies) + foreach(TARGET ${SDLTEST_TARGETS}) + target_link_libraries(${TARGET} PRIVATE ${ARGN}) + endforeach() +endmacro() + +macro(sdltest_add_definitions) + foreach(TARGET ${SDLTEST_TARGETS}) + target_compile_definitions(${TARGET} PRIVATE ${ARGN}) + endforeach() +endmacro() + macro(add_sdl_test_executable TARGET) - cmake_parse_arguments(AST "NONINTERACTIVE;NEEDS_RESOURCES" "" "" ${ARGN}) + cmake_parse_arguments(AST "NONINTERACTIVE;NEEDS_RESOURCES;NOTRACKMEM" "" "" ${ARGN}) + list(APPEND SDLTEST_TARGETS ${TARGET}) if(ANDROID) add_library(${TARGET} SHARED ${AST_UNPARSED_ARGUMENTS}) else() @@ -18,6 +45,7 @@ macro(add_sdl_test_executable TARGET) endif() list(APPEND SDL_TEST_EXECUTABLES ${TARGET}) + set_property(TARGET ${TARGET} PROPERTY SDL_NOTRACKMEM ${AST_NOTRACKMEM}) if(AST_NONINTERACTIVE) list(APPEND SDL_TESTS_NONINTERACTIVE ${TARGET}) endif() @@ -69,57 +97,6 @@ if(SDL_INSTALL_TESTS) include(GNUInstallDirs) endif() -if(N3DS) - link_libraries(SDL2::SDL2main) -endif() - -if(PSP) - link_libraries( - SDL2::SDL2main - SDL2::SDL2test - SDL2::SDL2-static - GL - pspvram - pspvfpu - pspdisplay - pspgu - pspge - pspaudio - pspctrl - psphprm - psppower - ) -elseif(PS2) - link_libraries( - SDL2main - SDL2_test - SDL2-static - patches - gskit - dmakit - ps2_drivers - ) -else() - link_libraries(SDL2::SDL2test SDL2::SDL2-static) -endif() - -if(WINDOWS) - # mingw32 must come before SDL2main to link successfully - if(MINGW OR CYGWIN) - link_libraries(mingw32) - endif() - - # CET support was added in VS 16.7 - if(MSVC_VERSION GREATER 1926 AND CMAKE_GENERATOR_PLATFORM MATCHES "Win32|x64") - link_libraries(-CETCOMPAT) - endif() - - # FIXME: Parent directory CMakeLists.txt only sets these for mingw/cygwin, - # but we need them for VS as well. - link_libraries(SDL2main) - add_definitions(-Dmain=SDL_main) -endif() - # CMake incorrectly detects opengl32.lib being present on MSVC ARM64 if(NOT MSVC OR NOT CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64") # Prefer GLVND, if present @@ -154,7 +131,7 @@ add_sdl_test_executable(testdropfile testdropfile.c) add_sdl_test_executable(testerror NONINTERACTIVE testerror.c) if(LINUX) - add_sdl_test_executable(testevdev NONINTERACTIVE testevdev.c) + add_sdl_test_executable(testevdev NOTRACKMEM NONINTERACTIVE testevdev.c) endif() add_sdl_test_executable(testfile testfile.c) @@ -165,6 +142,9 @@ add_sdl_test_executable(testgl2 testgl2.c) add_sdl_test_executable(testgles testgles.c) add_sdl_test_executable(testgles2 testgles2.c) add_sdl_test_executable(testgles2_sdf NEEDS_RESOURCES testgles2_sdf.c testutils.c) +if(APPLE) + set_property(TARGET testgles testgles2 testgles2_sdf APPEND PROPERTY COMPILE_DEFINITIONS "GLES_SILENCE_DEPRECATION") +endif() add_sdl_test_executable(testhaptic testhaptic.c) add_sdl_test_executable(testhotplug testhotplug.c) add_sdl_test_executable(testrumble testrumble.c) @@ -196,7 +176,7 @@ elseif(WINDOWS) add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativew32.c testutils.c) elseif(HAVE_X11) add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativex11.c testutils.c) - target_link_libraries(testnative X11) + target_link_libraries(testnative PRIVATE X11) elseif(OS2) add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativeos2.c testutils.c) endif() @@ -234,6 +214,59 @@ add_sdl_test_executable(controllermap NEEDS_RESOURCES controllermap.c testutils. add_sdl_test_executable(testvulkan testvulkan.c) add_sdl_test_executable(testoffscreen testoffscreen.c) +if(N3DS) + sdltest_link_librararies(SDL2::SDL2main) +endif() + +if(PSP) + sdltest_link_librararies( + SDL2::SDL2main + SDL2::SDL2test + SDL2::SDL2-static + GL + pspvram + pspvfpu + pspdisplay + pspgu + pspge + pspaudio + pspctrl + psphprm + psppower + ) +elseif(PS2) + sdltest_link_librararies( + SDL2main + SDL2_test + SDL2-static + patches + gskit + dmakit + ps2_drivers + ) +elseif(IOS OR TVOS) + sdltest_link_librararies(SDL2::SDL2main SDL2::SDL2test SDL2::SDL2-static) +else() + sdltest_link_librararies(SDL2::SDL2test SDL2::SDL2-static) +endif() + +if(WINDOWS) + # mingw32 must come before SDL2main to link successfully + if(MINGW OR CYGWIN) + sdltest_link_librararies(mingw32) + endif() + + # CET support was added in VS 16.7 + if(MSVC_VERSION GREATER 1926 AND CMAKE_GENERATOR_PLATFORM MATCHES "Win32|x64") + sdltest_link_librararies(-CETCOMPAT) + endif() + + # FIXME: Parent directory CMakeLists.txt only sets these for mingw/cygwin, + # but we need them for VS as well. + sdltest_link_librararies(SDL2main) + sdltest_add_definitions(-Dmain=SDL_main) +endif() + cmake_push_check_state(RESET) check_c_compiler_flag(-Wformat-overflow HAVE_WFORMAT_OVERFLOW) @@ -270,19 +303,19 @@ endif() if(OPENGL_FOUND) if(TARGET OpenGL::GL) - target_link_libraries(testshader OpenGL::GL) - target_link_libraries(testgl2 OpenGL::GL) + target_link_libraries(testshader PRIVATE OpenGL::GL) + target_link_libraries(testgl2 PRIVATE OpenGL::GL) else() if(EMSCRIPTEN AND OPENGL_gl_LIBRARY STREQUAL "nul") set(OPENGL_gl_LIBRARY GL) endif() # emscripten's FindOpenGL.cmake does not create OpenGL::GL - target_link_libraries(testshader ${OPENGL_gl_LIBRARY}) - target_link_libraries(testgl2 ${OPENGL_gl_LIBRARY}) + target_link_libraries(testshader PRIVATE ${OPENGL_gl_LIBRARY}) + target_link_libraries(testgl2 PRIVATE ${OPENGL_gl_LIBRARY}) endif() endif() if(EMSCRIPTEN) - target_link_libraries(testshader -sLEGACY_GL_EMULATION) + target_link_libraries(testshader PRIVATE -sLEGACY_GL_EMULATION) endif() file(GLOB RESOURCE_FILES *.bmp *.wav *.hex moose.dat utf8.txt) @@ -331,47 +364,17 @@ if(PSP) ICON_PATH NULL BACKGROUND_PATH NULL PREVIEW_PATH NULL - ) - add_custom_command( - TARGET ${APP} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory - $/sdl-${APP} - ) - add_custom_command( - TARGET ${APP} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E rename - $/EBOOT.PBP - $/sdl-${APP}/EBOOT.PBP - ) - if(${BUILD_PRX}) - add_custom_command( - TARGET ${APP} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - $/${APP} - $/sdl-${APP}/${APP} - ) - add_custom_command( - TARGET ${APP} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E rename - $/${APP}.prx - $/sdl-${APP}/${APP}.prx - ) - endif() - add_custom_command( - TARGET ${APP} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E remove - $/PARAM.SFO + OUTPUT_DIR $/sdl-${APP} ) endforeach() endif() if(N3DS) - set(ROMFS_DIR "${CMAKE_CURRENT_BINARY_DIR}/romfs") - file(COPY ${RESOURCE_FILES} DESTINATION "${ROMFS_DIR}") - foreach(APP IN LISTS SDL_TEST_EXECUTABLES) get_target_property(TARGET_BINARY_DIR ${APP} BINARY_DIR) + set(ROMFS_DIR "${TARGET_BINARY_DIR}/sdl-${APP}") set(SMDH_FILE "${TARGET_BINARY_DIR}/${APP}.smdh") + file(MAKE_DIRECTORY ${ROMFS_DIR}) ctr_generate_smdh("${SMDH_FILE}" NAME "SDL-${APP}" DESCRIPTION "SDL2 Test suite" @@ -428,7 +431,7 @@ add_custom_target(copy-sdl-test-resources ) foreach(APP IN LISTS SDL_TESTS_NEEDS_RESOURCES) - if(PSP OR PS2) + if(PSP OR PS2 OR N3DS) foreach(RESOURCE_FILE ${RESOURCE_FILES}) add_custom_command(TARGET ${APP} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${RESOURCE_FILE} $/sdl-${APP}) endforeach() @@ -470,9 +473,16 @@ set(TESTS_ENVIRONMENT ) foreach(TESTCASE ${SDL_TESTS_NONINTERACTIVE}) + set(command ${TESTCASE}) + if(SDLTEST_TRACKMEM) + get_property(notrackmem TARGET ${TESTCASE} PROPERTY SDL_NOTRACKMEM) + if(NOT notrackmem) + list(APPEND command --trackmem) + endif() + endif() add_test( NAME ${TESTCASE} - COMMAND ${TESTCASE} + COMMAND ${command} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) set_tests_properties(${TESTCASE} @@ -480,6 +490,9 @@ foreach(TESTCASE ${SDL_TESTS_NONINTERACTIVE}) ENVIRONMENT "${TESTS_ENVIRONMENT}" TIMEOUT 10 ) + if(NOT notrackmem) + set_property(TEST ${TESTCASE} PROPERTY FAIL_REGULAR_EXPRESSION "Total: [0-9]+\\.[0-9]+ Kb in [1-9][0-9]* allocations") + endif() if(SDL_INSTALL_TESTS) set(exe ${TESTCASE}) set(installedtestsdir "${CMAKE_INSTALL_FULL_LIBEXECDIR}/installed-tests/SDL2") diff --git a/vs/sdl2/test/checkkeys.c b/vs/sdl2/test/checkkeys.c index f546900c507..984ff237be6 100644 --- a/vs/sdl2/test/checkkeys.c +++ b/vs/sdl2/test/checkkeys.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -107,7 +107,7 @@ print_modifiers(char **text, size_t *maxlen) } static void -PrintModifierState() +PrintModifierState(void) { char message[512]; char *spot; @@ -166,7 +166,7 @@ PrintText(const char *eventtype, const char *text) SDL_Log("%s Text (%s): \"%s%s\"\n", eventtype, expanded, *text == '"' ? "\\" : "", text); } -void loop() +void loop(void) { SDL_Event event; /* Check for events */ diff --git a/vs/sdl2/test/checkkeysthreads.c b/vs/sdl2/test/checkkeysthreads.c index efd654875f9..959231dd0ad 100644 --- a/vs/sdl2/test/checkkeysthreads.c +++ b/vs/sdl2/test/checkkeysthreads.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -103,7 +103,7 @@ print_modifiers(char **text, size_t *maxlen) } static void -PrintModifierState() +PrintModifierState(void) { char message[512]; char *spot; @@ -162,7 +162,7 @@ PrintText(const char *eventtype, const char *text) SDL_Log("%s Text (%s): \"%s%s\"\n", eventtype, expanded, *text == '"' ? "\\" : "", text); } -void loop() +void loop(void) { SDL_Event event; /* Check for events */ diff --git a/vs/sdl2/test/controllermap.c b/vs/sdl2/test/controllermap.c index 982a9fb6fd9..aedaa14d5c9 100644 --- a/vs/sdl2/test/controllermap.c +++ b/vs/sdl2/test/controllermap.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/loopwave.c b/vs/sdl2/test/loopwave.c index 15f13658c5e..a2898129a4f 100644 --- a/vs/sdl2/test/loopwave.c +++ b/vs/sdl2/test/loopwave.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -46,7 +46,7 @@ quit(int rc) } static void -close_audio() +close_audio(void) { if (device != 0) { SDL_CloseAudioDevice(device); @@ -55,7 +55,7 @@ close_audio() } static void -open_audio() +open_audio(void) { /* Initialize fillerup() variables */ device = SDL_OpenAudioDevice(NULL, SDL_FALSE, &wave.spec, NULL, 0); @@ -70,7 +70,7 @@ open_audio() } #ifndef __EMSCRIPTEN__ -static void reopen_audio() +static void reopen_audio(void) { close_audio(); open_audio(); @@ -103,7 +103,7 @@ fillerup(void *unused, Uint8 *stream, int len) static int done = 0; #ifdef __EMSCRIPTEN__ -void loop() +void loop(void) { if (done || (SDL_GetAudioDeviceStatus(device) != SDL_AUDIO_PLAYING)) { emscripten_cancel_main_loop(); diff --git a/vs/sdl2/test/loopwavequeue.c b/vs/sdl2/test/loopwavequeue.c index 01b6ece3e39..411791592d7 100644 --- a/vs/sdl2/test/loopwavequeue.c +++ b/vs/sdl2/test/loopwavequeue.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -48,7 +48,7 @@ void poked(int sig) done = 1; } -void loop() +void loop(void) { #ifdef __EMSCRIPTEN__ if (done || (SDL_GetAudioStatus() != SDL_AUDIO_PLAYING)) { diff --git a/vs/sdl2/test/testatomic.c b/vs/sdl2/test/testatomic.c index 1a599101ec3..fd80fd6ef01 100644 --- a/vs/sdl2/test/testatomic.c +++ b/vs/sdl2/test/testatomic.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -12,6 +12,7 @@ #include #include "SDL.h" +#include "SDL_test.h" /* Absolutely basic tests just to see if we get the expected value @@ -31,7 +32,7 @@ tf(SDL_bool _tf) return f; } -static void RunBasicTest() +static void RunBasicTest(void) { int value; SDL_SpinLock lock = 0; @@ -130,7 +131,8 @@ static int SDLCALL adder(void *junk) static void runAdder(void) { Uint32 start, end; - int T = NThreads; + int i; + SDL_Thread *threads[NThreads]; start = SDL_GetTicks(); @@ -138,14 +140,18 @@ static void runAdder(void) SDL_AtomicSet(&threadsRunning, NThreads); - while (T--) { - SDL_CreateThread(adder, "Adder", NULL); + for (i = 0; i < NThreads; i++) { + threads[i] = SDL_CreateThread(adder, "Adder", NULL); } while (SDL_AtomicGet(&threadsRunning) > 0) { SDL_SemWait(threadDone); } + for (i = 0; i < NThreads; i++) { + SDL_WaitThread(threads[i], NULL); + } + SDL_DestroySemaphore(threadDone); end = SDL_GetTicks(); @@ -153,7 +159,7 @@ static void runAdder(void) SDL_Log("Finished in %f sec\n", (end - start) / 1000.f); } -static void RunEpicTest() +static void RunEpicTest(void) { int b; atomicValue v; @@ -699,9 +705,26 @@ static void RunFIFOTest(SDL_bool lock_free) int main(int argc, char *argv[]) { + SDLTest_CommonState *state; + + state = SDLTest_CommonCreateState(argv, 0); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } + /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + RunBasicTest(); if (SDL_getenv("SDL_TESTS_QUICK") != NULL) { @@ -715,6 +738,8 @@ int main(int argc, char *argv[]) RunFIFOTest(SDL_FALSE); #endif RunFIFOTest(SDL_TRUE); + SDL_Quit(); + SDLTest_CommonQuit(state); return 0; } diff --git a/vs/sdl2/test/testaudiocapture.c b/vs/sdl2/test/testaudiocapture.c index 523385b3ae4..b07d5630567 100644 --- a/vs/sdl2/test/testaudiocapture.c +++ b/vs/sdl2/test/testaudiocapture.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,7 +24,7 @@ static SDL_AudioDeviceID devid_in = 0; static SDL_AudioDeviceID devid_out = 0; static void -loop() +loop(void) { SDL_bool please_quit = SDL_FALSE; SDL_Event e; diff --git a/vs/sdl2/test/testaudiohotplug.c b/vs/sdl2/test/testaudiohotplug.c index 354d4644f3c..cfa3e1b3f39 100644 --- a/vs/sdl2/test/testaudiohotplug.c +++ b/vs/sdl2/test/testaudiohotplug.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -81,7 +81,7 @@ devtypestr(int iscapture) } static void -iteration() +iteration(void) { SDL_Event e; SDL_AudioDeviceID dev; @@ -124,7 +124,7 @@ iteration() } #ifdef __EMSCRIPTEN__ -void loop() +void loop(void) { if (done) emscripten_cancel_main_loop(); diff --git a/vs/sdl2/test/testaudioinfo.c b/vs/sdl2/test/testaudioinfo.c index ec4b86470d7..2f087f2b53c 100644 --- a/vs/sdl2/test/testaudioinfo.c +++ b/vs/sdl2/test/testaudioinfo.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -11,6 +11,7 @@ */ #include #include "SDL.h" +#include "SDL_test.h" static void print_devices(int iscapture) @@ -50,12 +51,22 @@ int main(int argc, char **argv) char *deviceName = NULL; SDL_AudioSpec spec; int n; + SDLTest_CommonState *state; + + state = SDLTest_CommonCreateState(argv, SDL_INIT_AUDIO); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); - /* Load the SDL library */ - if (SDL_Init(SDL_INIT_AUDIO) < 0) { + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); return 1; } @@ -98,6 +109,6 @@ int main(int argc, char **argv) SDL_Log("SDL_AudioFormat: %X\n", spec.format); } - SDL_Quit(); + SDLTest_CommonQuit(state); return 0; } diff --git a/vs/sdl2/test/testautomation.c b/vs/sdl2/test/testautomation.c index 3b5fad808ac..b0b6b004189 100644 --- a/vs/sdl2/test/testautomation.c +++ b/vs/sdl2/test/testautomation.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testautomation_audio.c b/vs/sdl2/test/testautomation_audio.c index 16ab753e978..1564f05541f 100644 --- a/vs/sdl2/test/testautomation_audio.c +++ b/vs/sdl2/test/testautomation_audio.c @@ -96,7 +96,7 @@ static SDL_bool DriverIsProblematic(const char *driver) * \sa https://wiki.libsdl.org/SDL_QuitSubSystem * \sa https://wiki.libsdl.org/SDL_InitSubSystem */ -int audio_quitInitAudioSubSystem() +int audio_quitInitAudioSubSystem(void) { /* Stop SDL audio subsystem */ SDL_QuitSubSystem(SDL_INIT_AUDIO); @@ -114,7 +114,7 @@ int audio_quitInitAudioSubSystem() * \sa https://wiki.libsdl.org/SDL_InitAudio * \sa https://wiki.libsdl.org/SDL_QuitAudio */ -int audio_initQuitAudio() +int audio_initQuitAudio(void) { int result; int i, iMax; @@ -195,7 +195,7 @@ int audio_initQuitAudio() * \sa https://wiki.libsdl.org/SDL_CloseAudio * \sa https://wiki.libsdl.org/SDL_QuitAudio */ -int audio_initOpenCloseQuitAudio() +int audio_initOpenCloseQuitAudio(void) { int result, expectedResult; int i, iMax, j, k; @@ -318,7 +318,7 @@ int audio_initOpenCloseQuitAudio() * * \sa https://wiki.libsdl.org/SDL_PauseAudio */ -int audio_pauseUnpauseAudio() +int audio_pauseUnpauseAudio(void) { int result; int i, iMax, j, k, l; @@ -474,7 +474,7 @@ int audio_pauseUnpauseAudio() * \sa https://wiki.libsdl.org/SDL_GetNumAudioDevices * \sa https://wiki.libsdl.org/SDL_GetAudioDeviceName */ -int audio_enumerateAndNameAudioDevices() +int audio_enumerateAndNameAudioDevices(void) { int t, tt; int i, n, nn; @@ -532,7 +532,7 @@ int audio_enumerateAndNameAudioDevices() * \sa https://wiki.libsdl.org/SDL_GetNumAudioDevices * \sa https://wiki.libsdl.org/SDL_GetAudioDeviceName */ -int audio_enumerateAndNameAudioDevicesNegativeTests() +int audio_enumerateAndNameAudioDevicesNegativeTests(void) { int t; int i, j, no, nc; @@ -578,7 +578,7 @@ int audio_enumerateAndNameAudioDevicesNegativeTests() * \sa https://wiki.libsdl.org/SDL_GetNumAudioDrivers * \sa https://wiki.libsdl.org/SDL_GetAudioDriver */ -int audio_printAudioDrivers() +int audio_printAudioDrivers(void) { int i, n; const char *name; @@ -608,7 +608,7 @@ int audio_printAudioDrivers() * * \sa https://wiki.libsdl.org/SDL_GetCurrentAudioDriver */ -int audio_printCurrentAudioDriver() +int audio_printCurrentAudioDriver(void) { /* Check current audio driver */ const char *name = SDL_GetCurrentAudioDriver(); @@ -639,7 +639,7 @@ int _audioFrequencies[] = { 11025, 22050, 44100, 48000 }; * * \sa https://wiki.libsdl.org/SDL_BuildAudioCVT */ -int audio_buildAudioCVT() +int audio_buildAudioCVT(void) { int result; SDL_AudioCVT cvt; @@ -703,7 +703,7 @@ int audio_buildAudioCVT() * * \sa https://wiki.libsdl.org/SDL_BuildAudioCVT */ -int audio_buildAudioCVTNegative() +int audio_buildAudioCVTNegative(void) { const char *expectedError = "Parameter 'cvt' is invalid"; const char *error; @@ -798,7 +798,7 @@ int audio_buildAudioCVTNegative() * * \sa https://wiki.libsdl.org/SDL_GetAudioStatus */ -int audio_getAudioStatus() +int audio_getAudioStatus(void) { SDL_AudioStatus result; @@ -817,7 +817,7 @@ int audio_getAudioStatus() * * \sa https://wiki.libsdl.org/SDL_GetAudioStatus */ -int audio_openCloseAndGetAudioStatus() +int audio_openCloseAndGetAudioStatus(void) { SDL_AudioStatus result; int i; @@ -878,7 +878,7 @@ int audio_openCloseAndGetAudioStatus() * \sa https://wiki.libsdl.org/SDL_LockAudioDevice * \sa https://wiki.libsdl.org/SDL_UnlockAudioDevice */ -int audio_lockUnlockOpenAudioDevice() +int audio_lockUnlockOpenAudioDevice(void) { int i; int count; @@ -942,7 +942,7 @@ int audio_lockUnlockOpenAudioDevice() * \sa https://wiki.libsdl.org/SDL_BuildAudioCVT * \sa https://wiki.libsdl.org/SDL_ConvertAudio */ -int audio_convertAudio() +int audio_convertAudio(void) { int result; SDL_AudioCVT cvt; @@ -1043,7 +1043,7 @@ int audio_convertAudio() * * \sa https://wiki.libsdl.org/SDL_AudioDeviceConnected */ -int audio_openCloseAudioDeviceConnected() +int audio_openCloseAudioDeviceConnected(void) { int result = -1; int i; @@ -1118,7 +1118,7 @@ static double sine_wave_sample(const Sint64 idx, const Sint64 rate, const Sint64 * \sa https://wiki.libsdl.org/SDL_BuildAudioCVT * \sa https://wiki.libsdl.org/SDL_ConvertAudio */ -int audio_resampleLoss() +int audio_resampleLoss(void) { /* Note: always test long input time (>= 5s from experience) in some test * cases because an improper implementation may suffer from low resampling diff --git a/vs/sdl2/test/testautomation_keyboard.c b/vs/sdl2/test/testautomation_keyboard.c index 5ed9207bca5..bbbe4e7c7aa 100644 --- a/vs/sdl2/test/testautomation_keyboard.c +++ b/vs/sdl2/test/testautomation_keyboard.c @@ -102,7 +102,7 @@ int keyboard_getKeyFromName(void *arg) /* * Local helper to check for the invalid scancode error message */ -void _checkInvalidScancodeError() +void _checkInvalidScancodeError(void) { const char *expectedError = "Parameter 'scancode' is invalid"; const char *error; @@ -127,9 +127,9 @@ int keyboard_getKeyFromScancode(void *arg) SDL_Keycode result; /* Case where input is valid */ - result = SDL_GetKeyFromScancode(SDL_SCANCODE_A); + result = SDL_GetKeyFromScancode(SDL_SCANCODE_SPACE); SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(valid)"); - SDLTest_AssertCheck(result == SDLK_a, "Verify result from call, expected: %i, got: %" SDL_PRIs32, SDLK_a, result); + SDLTest_AssertCheck(result == SDLK_SPACE, "Verify result from call, expected: %i, got: %" SDL_PRIs32, SDLK_SPACE, result); /* Case where input is zero */ result = SDL_GetKeyFromScancode(0); @@ -574,7 +574,7 @@ int keyboard_getScancodeFromName(void *arg) /* * Local helper to check for the invalid scancode error message */ -void _checkInvalidNameError() +void _checkInvalidNameError(void) { const char *expectedError = "Parameter 'name' is invalid"; const char *error; diff --git a/vs/sdl2/test/testautomation_log.c b/vs/sdl2/test/testautomation_log.c index 4edb487ea31..1ad1894e6d3 100644 --- a/vs/sdl2/test/testautomation_log.c +++ b/vs/sdl2/test/testautomation_log.c @@ -21,7 +21,7 @@ static void EnableTestLog(int *message_count) SDL_LogSetOutputFunction(TestLogOutput, message_count); } -static void DisableTestLog() +static void DisableTestLog(void) { SDL_LogSetOutputFunction(original_function, original_userdata); } diff --git a/vs/sdl2/test/testautomation_sdltest.c b/vs/sdl2/test/testautomation_sdltest.c index 194a69d0f49..23ef7df9fb0 100644 --- a/vs/sdl2/test/testautomation_sdltest.c +++ b/vs/sdl2/test/testautomation_sdltest.c @@ -1074,13 +1074,13 @@ int sdltest_randomIntegerInRange(void *arg) /* Range with min at integer limit */ min = long_min; - max = long_max + (Sint32)SDLTest_RandomSint16(); + max = long_min + (Sint32)SDLTest_RandomUint16(); result = SDLTest_RandomIntegerInRange(min, max); SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(SINT32_MIN,...)"); SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%" SDL_PRIs32 ",%" SDL_PRIs32 "], got: %" SDL_PRIs32, min, max, result); /* Range with max at integer limit */ - min = long_min - (Sint32)SDLTest_RandomSint16(); + min = long_max - (Sint32)SDLTest_RandomUint16(); max = long_max; result = SDLTest_RandomIntegerInRange(min, max); SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(...,SINT32_MAX)"); diff --git a/vs/sdl2/test/testautomation_stdlib.c b/vs/sdl2/test/testautomation_stdlib.c index ed9f13ea35d..b83d9a1ea37 100644 --- a/vs/sdl2/test/testautomation_stdlib.c +++ b/vs/sdl2/test/testautomation_stdlib.c @@ -62,6 +62,18 @@ int stdlib_snprintf(void *arg) SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + result = SDL_snprintf(text, sizeof(text), "%10sA", "foo"); + expected = " fooA"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%10sA\", \"foo\")"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%-10sA", "foo"); + expected = "foo A"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%-10sA\", \"foo\")"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int)SDL_strlen(text), result); + result = SDL_snprintf(text, sizeof(text), "%S", L"foo"); expected = "foo"; SDLTest_AssertPass("Call to SDL_snprintf(\"%%S\", \"foo\")"); @@ -380,6 +392,10 @@ int stdlib_getsetenv(void *arg) #endif #endif +#define FMT_PRILLd "%lld" +#define FMT_PRILLdn "%lld%lln" +#define FMT_PRILLu "%llu" + /** * @brief Call to SDL_sscanf */ @@ -388,13 +404,15 @@ int stdlib_sscanf(void *arg) { int output; int result; + int length; int expected_output; int expected_result; - short short_output, expected_short_output; - long long_output, expected_long_output; - long long long_long_output, expected_long_long_output; + short short_output, expected_short_output, short_length; + long long_output, expected_long_output, long_length; + long long long_long_output, expected_long_long_output, long_long_length; size_t size_output, expected_size_output; char text[128], text2[128]; + unsigned int r = 0, g = 0, b = 0; expected_output = output = 123; expected_result = -1; @@ -411,43 +429,62 @@ int stdlib_sscanf(void *arg) SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); output = 123; + length = 0; expected_output = 2; expected_result = 1; - result = SDL_sscanf("2", "%i", &output); - SDLTest_AssertPass("Call to SDL_sscanf(\"2\", \"%%i\", &output)"); + result = SDL_sscanf("2", "%i%n", &output, &length); + SDLTest_AssertPass("Call to SDL_sscanf(\"2\", \"%%i%%n\", &output, &length)"); SDLTest_AssertCheck(expected_output == output, "Check output, expected: %i, got: %i", expected_output, output); SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + SDLTest_AssertCheck(length == 1, "Check length, expected: 1, got: %i", length); output = 123; + length = 0; expected_output = 0xa; expected_result = 1; - result = SDL_sscanf("aa", "%1x", &output); - SDLTest_AssertPass("Call to SDL_sscanf(\"aa\", \"%%1x\", &output)"); + result = SDL_sscanf("aa", "%1x%n", &output, &length); + SDLTest_AssertPass("Call to SDL_sscanf(\"aa\", \"%%1x%%n\", &output, &length)"); SDLTest_AssertCheck(expected_output == output, "Check output, expected: %i, got: %i", expected_output, output); SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + SDLTest_AssertCheck(length == 1, "Check length, expected: 1, got: %i", length); + + expected_result = 3; + result = SDL_sscanf("#026", "#%1x%1x%1x", &r, &g, &b); + SDLTest_AssertPass("Call to SDL_sscanf(\"#026\", \"#%%1x%%1x%%1x\", &r, &g, &b)"); + expected_output = 0; + SDLTest_AssertCheck(r == expected_output, "Check output for r, expected: %i, got: %i", expected_output, r); + expected_output = 2; + SDLTest_AssertCheck(g == expected_output, "Check output for g, expected: %i, got: %i", expected_output, g); + expected_output = 6; + SDLTest_AssertCheck(b == expected_output, "Check output for b, expected: %i, got: %i", expected_output, b); + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); -#define SIZED_TEST_CASE(type, var, format_specifier) \ +#define SIZED_TEST_CASE(type, var, printf_specifier, scanf_specifier) \ var##_output = 123; \ + var##_length = 0; \ expected_##var##_output = (type)(((unsigned type)(~0)) >> 1); \ expected_result = 1; \ - result = SDL_snprintf(text, sizeof(text), format_specifier, expected_##var##_output); \ - result = SDL_sscanf(text, format_specifier, &var##_output); \ - SDLTest_AssertPass("Call to SDL_sscanf(\"%s\", \"%s\", &output)", text, #format_specifier); \ - SDLTest_AssertCheck(expected_##var##_output == var##_output, "Check output, expected: " format_specifier ", got: " format_specifier, expected_##var##_output, var##_output); \ + result = SDL_snprintf(text, sizeof(text), printf_specifier, expected_##var##_output); \ + result = SDL_sscanf(text, scanf_specifier, &var##_output, &var##_length); \ + SDLTest_AssertPass("Call to SDL_sscanf(\"%s\", %s, &output, &length)", text, #scanf_specifier); \ + SDLTest_AssertCheck(expected_##var##_output == var##_output, "Check output, expected: " printf_specifier ", got: " printf_specifier, expected_##var##_output, var##_output); \ SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); \ + SDLTest_AssertCheck(var##_length == (type)SDL_strlen(text), "Check length, expected: %i, got: %i", (int)SDL_strlen(text), (int)var##_length); \ \ var##_output = 123; \ + var##_length = 0; \ expected_##var##_output = ~(type)(((unsigned type)(~0)) >> 1); \ expected_result = 1; \ - result = SDL_snprintf(text, sizeof(text), format_specifier, expected_##var##_output); \ - result = SDL_sscanf(text, format_specifier, &var##_output); \ - SDLTest_AssertPass("Call to SDL_sscanf(\"%s\", \"%s\", &output)", text, #format_specifier); \ - SDLTest_AssertCheck(expected_##var##_output == var##_output, "Check output, expected: " format_specifier ", got: " format_specifier, expected_##var##_output, var##_output); \ - SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); + result = SDL_snprintf(text, sizeof(text), printf_specifier, expected_##var##_output); \ + result = SDL_sscanf(text, scanf_specifier, &var##_output, &var##_length); \ + SDLTest_AssertPass("Call to SDL_sscanf(\"%s\", %s, &output, &length)", text, #scanf_specifier); \ + SDLTest_AssertCheck(expected_##var##_output == var##_output, "Check output, expected: " printf_specifier ", got: " printf_specifier, expected_##var##_output, var##_output); \ + SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result); \ + SDLTest_AssertCheck(var##_length == (type)SDL_strlen(text), "Check length, expected: %i, got: %i", (int)SDL_strlen(text), (int)var##_length); \ - SIZED_TEST_CASE(short, short, "%hd") - SIZED_TEST_CASE(long, long, "%ld") - SIZED_TEST_CASE(long long, long_long, "%lld") + SIZED_TEST_CASE(short, short, "%hd", "%hd%hn") + SIZED_TEST_CASE(long, long, "%ld", "%ld%ln") + SIZED_TEST_CASE(long long, long_long, FMT_PRILLd, FMT_PRILLdn) size_output = 123; expected_size_output = ~((size_t)0); @@ -701,6 +738,112 @@ stdlib_overflow(void *arg) return TEST_COMPLETED; } +static int +stdlib_strtox(void *arg) +{ + const unsigned long long ullong_max = ~0ULL; + +#define STRTOX_TEST_CASE(func_name, type, format_spec, str, base, expected_result, expected_endp_offset) do { \ + const char *s = str; \ + type r, expected_r = expected_result; \ + char *ep, *expected_ep = (char *)s + expected_endp_offset; \ + r = func_name(s, &ep, base); \ + SDLTest_AssertPass("Call to " #func_name "(" #str ", &endp, " #base ")"); \ + SDLTest_AssertCheck(r == expected_r, "Check result value, expected: " format_spec ", got: " format_spec, expected_r, r); \ + SDLTest_AssertCheck(ep == expected_ep, "Check endp value, expected: %p, got: %p", expected_ep, ep); \ + } while (0) + + // infer decimal + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "\t 123abcxyz", 0, 123, 6); // skip leading space + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "+123abcxyz", 0, 123, 4); + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "+123abcxyz", 0, 123, 4); + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "-123abcxyz", 0, -123, 4); + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "9999999999999999999999999999999999999999abcxyz", 0, ullong_max, 40); + + // infer hexadecimal + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "0x123abcxyz", 0, 0x123abc, 8); + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "0X123ABCXYZ", 0, 0x123abc, 8); // uppercase X + + // infer octal + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "0123abcxyz", 0, 0123, 4); + + // arbitrary bases + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "00110011", 2, 51, 8); + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "-uvwxyz", 32, -991, 3); + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "ZzZzZzZzZzZzZzZzZzZzZzZzZ", 36, ullong_max, 25); + + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "0", 0, 0, 1); + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "0", 10, 0, 1); + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "-0", 0, 0, 2); + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, "-0", 10, 0, 2); + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLu, " - 1", 0, 0, 0); // invalid input + + // We know that SDL_strtol, SDL_strtoul and SDL_strtoll share the same code path as SDL_strtoull under the hood, + // so the most interesting test cases are those close to the bounds of the integer type. + + // For simplicity, we only run long/long long tests when they are 32-bit/64-bit, respectively. + // Suppressing warnings would be difficult otherwise. + // Since the CI runs the tests against a variety of targets, this should be fine in practice. + + if (sizeof(long) == 4) { + STRTOX_TEST_CASE(SDL_strtol, long, "%ld", "0", 0, 0, 1); + STRTOX_TEST_CASE(SDL_strtol, long, "%ld", "0", 10, 0, 1); + STRTOX_TEST_CASE(SDL_strtol, long, "%ld", "-0", 0, 0, 2); + STRTOX_TEST_CASE(SDL_strtol, long, "%ld", "-0", 10, 0, 2); + STRTOX_TEST_CASE(SDL_strtol, long, "%ld", "2147483647", 10, 2147483647, 10); + STRTOX_TEST_CASE(SDL_strtol, long, "%ld", "2147483648", 10, 2147483647, 10); + STRTOX_TEST_CASE(SDL_strtol, long, "%ld", "-2147483648", 10, -2147483647L - 1, 11); + STRTOX_TEST_CASE(SDL_strtol, long, "%ld", "-2147483649", 10, -2147483647L - 1, 11); + STRTOX_TEST_CASE(SDL_strtol, long, "%ld", "-9999999999999999999999999999999999999999", 10, -2147483647L - 1, 41); + + STRTOX_TEST_CASE(SDL_strtoul, unsigned long, "%lu", "4294967295", 10, 4294967295UL, 10); + STRTOX_TEST_CASE(SDL_strtoul, unsigned long, "%lu", "4294967296", 10, 4294967295UL, 10); + STRTOX_TEST_CASE(SDL_strtoul, unsigned long, "%lu", "-4294967295", 10, 1, 11); + } + + if (sizeof(long long) == 8) { + STRTOX_TEST_CASE(SDL_strtoll, long long, FMT_PRILLd, "0", 0, 0LL, 1); + STRTOX_TEST_CASE(SDL_strtoll, long long, FMT_PRILLd, "0", 10, 0LL, 1); + STRTOX_TEST_CASE(SDL_strtoll, long long, FMT_PRILLd, "-0", 0, 0LL, 2); + STRTOX_TEST_CASE(SDL_strtoll, long long, FMT_PRILLd, "-0", 10, 0LL, 2); + STRTOX_TEST_CASE(SDL_strtoll, long long, FMT_PRILLd, "9223372036854775807", 10, 9223372036854775807LL, 19); + STRTOX_TEST_CASE(SDL_strtoll, long long, FMT_PRILLd, "9223372036854775808", 10, 9223372036854775807LL, 19); + STRTOX_TEST_CASE(SDL_strtoll, long long, FMT_PRILLd, "-9223372036854775808", 10, -9223372036854775807LL - 1, 20); + STRTOX_TEST_CASE(SDL_strtoll, long long, FMT_PRILLd, "-9223372036854775809", 10, -9223372036854775807LL - 1, 20); + STRTOX_TEST_CASE(SDL_strtoll, long long, FMT_PRILLd, "-9999999999999999999999999999999999999999", 10, -9223372036854775807LL - 1, 41); + + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLd, "18446744073709551615", 10, 18446744073709551615ULL, 20); + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLd, "18446744073709551616", 10, 18446744073709551615ULL, 20); + STRTOX_TEST_CASE(SDL_strtoull, unsigned long long, FMT_PRILLd, "-18446744073709551615", 10, 1, 21); + } + +#undef STRTOX_TEST_CASE + + return TEST_COMPLETED; +} + +static int +stdlib_strtod(void *arg) +{ +#define STRTOD_TEST_CASE(str, expected_result, expected_endp_offset) do { \ + const char *s = str; \ + double r, expected_r = expected_result; \ + char *ep, *expected_ep = (char *)s + expected_endp_offset; \ + r = SDL_strtod(s, &ep); \ + SDLTest_AssertPass("Call to SDL_strtod(" #str ", &endp)"); \ + SDLTest_AssertCheck(r == expected_r, "Check result value, expected: %f, got: %f", expected_r, r); \ + SDLTest_AssertCheck(ep == expected_ep, "Check endp value, expected: %p, got: %p", expected_ep, ep); \ + } while (0) + + STRTOD_TEST_CASE("\t 123.75abcxyz", 123.75, 9); // skip leading space + STRTOD_TEST_CASE("+999.555", 999.555, 8); + STRTOD_TEST_CASE("-999.555", -999.555, 8); + +#undef STRTOD_TEST_CASE + + return TEST_COMPLETED; +} + /* ================= Test References ================== */ /* Standard C routine test cases */ @@ -724,6 +867,14 @@ static const SDLTest_TestCaseReference stdlibTestOverflow = { stdlib_overflow, "stdlib_overflow", "Overflow detection", TEST_ENABLED }; +static const SDLTest_TestCaseReference stdlibTest_strtox = { + stdlib_strtox, "stdlib_strtox", "Calls to SDL_strtol, SDL_strtoul, SDL_strtoll and SDL_strtoull", TEST_ENABLED +}; + +static const SDLTest_TestCaseReference stdlibTest_strtod = { + stdlib_strtod, "stdlib_strtod", "Calls to SDL_strtod", TEST_ENABLED +}; + /* Sequence of Standard C routine test cases */ static const SDLTest_TestCaseReference *stdlibTests[] = { &stdlibTest1, @@ -731,6 +882,8 @@ static const SDLTest_TestCaseReference *stdlibTests[] = { &stdlibTest3, &stdlibTest4, &stdlibTestOverflow, + &stdlibTest_strtox, + &stdlibTest_strtod, NULL }; diff --git a/vs/sdl2/test/testautomation_subsystems.c b/vs/sdl2/test/testautomation_subsystems.c index d25edeeb7ce..73eaca2fdf9 100644 --- a/vs/sdl2/test/testautomation_subsystems.c +++ b/vs/sdl2/test/testautomation_subsystems.c @@ -40,7 +40,7 @@ static void subsystemsTearDown(void *arg) * \sa SDL_QuitSubSystem * */ -static int subsystems_referenceCount() +static int subsystems_referenceCount(void) { const int system = SDL_INIT_VIDEO; int result; @@ -90,7 +90,7 @@ static int subsystems_referenceCount() * \sa SDL_QuitSubSystem * */ -static int subsystems_dependRefCountInitAllQuitByOne() +static int subsystems_dependRefCountInitAllQuitByOne(void) { int result; /* Ensure that we start with reset subsystems. */ @@ -100,6 +100,8 @@ static int subsystems_dependRefCountInitAllQuitByOne() /* Following should init SDL_INIT_EVENTS and give it +3 ref counts. */ SDL_InitSubSystem(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK); SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK)"); + result = SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK); + SDLTest_AssertCheck(result == (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK), "Check result from SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK), expected: 0x%x, got: 0x%x", (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK), result); result = SDL_WasInit(SDL_INIT_EVENTS); SDLTest_AssertCheck(result == SDL_INIT_EVENTS, "Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x", result); @@ -128,7 +130,7 @@ static int subsystems_dependRefCountInitAllQuitByOne() * \sa SDL_QuitSubSystem * */ -static int subsystems_dependRefCountInitByOneQuitAll() +static int subsystems_dependRefCountInitByOneQuitAll(void) { int result; /* Ensure that we start with reset subsystems. */ @@ -163,7 +165,7 @@ static int subsystems_dependRefCountInitByOneQuitAll() * \sa SDL_QuitSubSystem * */ -static int subsystems_dependRefCountWithExtraInit() +static int subsystems_dependRefCountWithExtraInit(void) { int result; /* Ensure that we start with reset subsystems. */ diff --git a/vs/sdl2/test/testautomation_surface.c b/vs/sdl2/test/testautomation_surface.c index e86704a6b2d..575ebcfb410 100644 --- a/vs/sdl2/test/testautomation_surface.c +++ b/vs/sdl2/test/testautomation_surface.c @@ -81,7 +81,7 @@ void _surfaceTearDown(void *arg) /** * Helper that clears the test surface */ -void _clearTestSurface() +void _clearTestSurface(void) { int ret; Uint32 color; diff --git a/vs/sdl2/test/testautomation_video.c b/vs/sdl2/test/testautomation_video.c index dd8f1c5c25b..bf24bbb089a 100644 --- a/vs/sdl2/test/testautomation_video.c +++ b/vs/sdl2/test/testautomation_video.c @@ -624,7 +624,7 @@ int video_getWindowDisplayMode(void *arg) } /* Helper function that checks for an 'Invalid window' error */ -void _checkInvalidWindowError() +void _checkInvalidWindowError(void) { const char *invalidWindowError = "Invalid window"; char *lastError; @@ -1300,7 +1300,7 @@ int video_getSetWindowPosition(void *arg) } /* Helper function that checks for an 'Invalid parameter' error */ -void _checkInvalidParameterError() +void _checkInvalidParameterError(void) { const char *invalidParameterError = "Parameter"; char *lastError; @@ -2181,6 +2181,76 @@ int video_setWindowCenteredOnDisplay(void *arg) return TEST_COMPLETED; } +/** + * Tests window surface functionality + */ +static int video_getWindowSurface(void *arg) +{ + const char *title = "video_getWindowSurface Test Window"; + SDL_Window *window; + SDL_Surface *surface; + SDL_Renderer *renderer; + Uint32 renderer_flags = SDL_RENDERER_ACCELERATED; + int result; + + if (SDL_strcmp(SDL_GetCurrentVideoDriver(), "dummy") == 0) { + renderer_flags = SDL_RENDERER_SOFTWARE; + } + + /* Make sure we're testing interaction with an accelerated renderer */ + SDL_SetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION, "1"); + + window = SDL_CreateWindow(title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 320, 320, 0); + SDLTest_AssertPass("Call to SDL_CreateWindow('%s', SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 320, 320, 0)", title); + SDLTest_AssertCheck(window != NULL, "Validate that returned window is not NULL"); + + surface = SDL_GetWindowSurface(window); + SDLTest_AssertPass("Call to SDL_GetWindowSurface(window)"); + SDLTest_AssertCheck(surface != NULL, "Validate that returned surface is not NULL"); + SDLTest_AssertCheck(SDL_HasWindowSurface(window), "Validate that window has a surface"); + + result = SDL_UpdateWindowSurface(window); + SDLTest_AssertPass("Call to SDL_UpdateWindowSurface(window)"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + + /* We shouldn't be able to create a renderer on a window with a surface */ + renderer = SDL_CreateRenderer(window, -1, renderer_flags); + SDLTest_AssertPass("Call to SDL_CreateRenderer(window)"); + SDLTest_AssertCheck(renderer == NULL, "Validate that returned renderer is NULL"); + + result = SDL_DestroyWindowSurface(window); + SDLTest_AssertPass("Call to SDL_DestroyWindowSurface(window)"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + SDLTest_AssertCheck(!SDL_HasWindowSurface(window), "Validate that window does not have a surface"); + + /* We should be able to create a renderer on the window now */ + renderer = SDL_CreateRenderer(window, -1, renderer_flags); + SDLTest_AssertPass("Call to SDL_CreateRenderer(window)"); + SDLTest_AssertCheck(renderer != NULL, "Validate that returned renderer is not NULL"); + + /* We should not be able to create a window surface now, unless it was created by the renderer */ + if (!SDL_HasWindowSurface(window)) { + surface = SDL_GetWindowSurface(window); + SDLTest_AssertPass("Call to SDL_GetWindowSurface(window)"); + SDLTest_AssertCheck(surface == NULL, "Validate that returned surface is NULL"); + } + + SDL_DestroyRenderer(renderer); + SDLTest_AssertPass("Call to SDL_DestroyRenderer(renderer)"); + SDLTest_AssertCheck(!SDL_HasWindowSurface(window), "Validate that window does not have a surface"); + + /* We should be able to create a window surface again */ + surface = SDL_GetWindowSurface(window); + SDLTest_AssertPass("Call to SDL_GetWindowSurface(window)"); + SDLTest_AssertCheck(surface != NULL, "Validate that returned surface is not NULL"); + SDLTest_AssertCheck(SDL_HasWindowSurface(window), "Validate that window has a surface"); + + /* Clean up */ + SDL_DestroyWindow(window); + + return TEST_COMPLETED; +} + /* ================= Test References ================== */ /* Video test cases */ @@ -2265,13 +2335,17 @@ static const SDLTest_TestCaseReference videoTest23 = static const SDLTest_TestCaseReference videoTest24 = { (SDLTest_TestCaseFp) video_setWindowCenteredOnDisplay, "video_setWindowCenteredOnDisplay", "Checks using SDL_WINDOWPOS_CENTERED_DISPLAY centers the window on a display", TEST_ENABLED }; +static const SDLTest_TestCaseReference videoTest25 = { + (SDLTest_TestCaseFp)video_getWindowSurface, "video_getWindowSurface", "Checks window surface functionality", TEST_ENABLED +}; + /* Sequence of Video test cases */ static const SDLTest_TestCaseReference *videoTests[] = { &videoTest1, &videoTest2, &videoTest3, &videoTest4, &videoTest5, &videoTest6, &videoTest7, &videoTest8, &videoTest9, &videoTest10, &videoTest11, &videoTest12, &videoTest13, &videoTest14, &videoTest15, &videoTest16, &videoTest17, &videoTest18, &videoTest19, &videoTest20, &videoTest21, &videoTest22, - &videoTest23, &videoTest24, NULL + &videoTest23, &videoTest24, &videoTest25, NULL }; /* Video test suite (global) */ diff --git a/vs/sdl2/test/testbounds.c b/vs/sdl2/test/testbounds.c index 9bd73ac962d..cfe9d968cb8 100644 --- a/vs/sdl2/test/testbounds.c +++ b/vs/sdl2/test/testbounds.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -11,12 +11,27 @@ */ #include "SDL.h" +#include "SDL_test.h" int main(int argc, char **argv) { int total, i; + SDLTest_CommonState *state; - if (SDL_Init(SDL_INIT_VIDEO) < 0) { + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { SDL_Log("SDL_Init(SDL_INIT_VIDEO) failed: %s", SDL_GetError()); return 1; } @@ -32,7 +47,7 @@ int main(int argc, char **argv) usable.x, usable.y, usable.w, usable.h); } - SDL_Quit(); + SDLTest_CommonQuit(state); return 0; } diff --git a/vs/sdl2/test/testcustomcursor.c b/vs/sdl2/test/testcustomcursor.c index aec3c78aa3e..2d13fd505e7 100644 --- a/vs/sdl2/test/testcustomcursor.c +++ b/vs/sdl2/test/testcustomcursor.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -148,7 +148,7 @@ quit(int rc) exit(rc); } -void loop() +void loop(void) { int i; SDL_Event event; diff --git a/vs/sdl2/test/testdisplayinfo.c b/vs/sdl2/test/testdisplayinfo.c index 9740ab17428..783e4891ae5 100644 --- a/vs/sdl2/test/testdisplayinfo.c +++ b/vs/sdl2/test/testdisplayinfo.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -13,6 +13,7 @@ /* Program to test querying of display info */ #include "SDL.h" +#include "SDL_test.h" #include #include @@ -33,12 +34,22 @@ int main(int argc, char *argv[]) { SDL_DisplayMode mode; int num_displays, dpy; + SDLTest_CommonState *state; + + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); - /* Load the SDL library */ - if (SDL_Init(SDL_INIT_VIDEO) < 0) { + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); return 1; } @@ -88,7 +99,7 @@ int main(int argc, char *argv[]) SDL_Log("\n"); } - SDL_Quit(); + SDLTest_CommonQuit(state); return 0; } diff --git a/vs/sdl2/test/testdraw2.c b/vs/sdl2/test/testdraw2.c index 43aa1843b18..4e8c5a29b7d 100644 --- a/vs/sdl2/test/testdraw2.c +++ b/vs/sdl2/test/testdraw2.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -174,7 +174,7 @@ void DrawRects(SDL_Renderer *renderer) } } -void loop() +void loop(void) { Uint32 now; int i; diff --git a/vs/sdl2/test/testdrawchessboard.c b/vs/sdl2/test/testdrawchessboard.c index 4dffe06bd76..db9da41c9de 100644 --- a/vs/sdl2/test/testdrawchessboard.c +++ b/vs/sdl2/test/testdrawchessboard.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -12,7 +12,10 @@ This file is created by : Nitin Jain (nitin.j4@samsung.com) */ -/* Sample program: Draw a Chess Board by using SDL_CreateSoftwareRenderer API */ +/* Sample program: Draw a Chess Board by using the SDL render API */ + +/* This allows testing SDL_CreateSoftwareRenderer with the window surface API. Undefine it to use the accelerated renderer instead. */ +#define USE_SOFTWARE_RENDERER #include #include @@ -25,10 +28,13 @@ SDL_Window *window; SDL_Renderer *renderer; -SDL_Surface *surface; int done; -void DrawChessBoard() +#ifdef USE_SOFTWARE_RENDERER +SDL_Surface *surface; +#endif + +void DrawChessBoard(void) { int row = 0, column = 0, x = 0; SDL_Rect rect, darea; @@ -50,14 +56,14 @@ void DrawChessBoard() SDL_RenderFillRect(renderer, &rect); } } - SDL_RenderPresent(renderer); } -void loop() +void loop(void) { SDL_Event e; while (SDL_PollEvent(&e)) { +#ifdef USE_SOFTWARE_RENDERER /* Re-create when window has been resized */ if ((e.type == SDL_WINDOWEVENT) && (e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)) { @@ -69,6 +75,7 @@ void loop() SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); SDL_RenderClear(renderer); } +#endif if (e.type == SDL_QUIT) { done = 1; @@ -87,11 +94,19 @@ void loop() } } + /* Clear the rendering surface with the specified color */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + SDL_RenderClear(renderer); + DrawChessBoard(); + SDL_RenderPresent(renderer); + +#ifdef USE_SOFTWARE_RENDERER /* Got everything on rendering surface, now Update the drawing image on window screen */ SDL_UpdateWindowSurface(window); +#endif } int main(int argc, char *argv[]) @@ -111,17 +126,17 @@ int main(int argc, char *argv[]) SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Window creation fail : %s\n", SDL_GetError()); return 1; } +#ifdef USE_SOFTWARE_RENDERER surface = SDL_GetWindowSurface(window); renderer = SDL_CreateSoftwareRenderer(surface); +#else + renderer = SDL_CreateRenderer(window, -1, 0); +#endif if (!renderer) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Render creation for surface fail : %s\n", SDL_GetError()); return 1; } - /* Clear the rendering surface with the specified color */ - SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); - SDL_RenderClear(renderer); - /* Draw the Image on rendering surface */ done = 0; #ifdef __EMSCRIPTEN__ diff --git a/vs/sdl2/test/testdropfile.c b/vs/sdl2/test/testdropfile.c index 2184f062eed..80fcd4a1212 100644 --- a/vs/sdl2/test/testdropfile.c +++ b/vs/sdl2/test/testdropfile.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testerror.c b/vs/sdl2/test/testerror.c index 25874d1ea78..83df188e205 100644 --- a/vs/sdl2/test/testerror.c +++ b/vs/sdl2/test/testerror.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -16,6 +16,7 @@ #include #include "SDL.h" +#include "SDL_test.h" static int alive = 0; @@ -44,12 +45,22 @@ ThreadFunc(void *data) int main(int argc, char *argv[]) { SDL_Thread *thread; + SDLTest_CommonState *state; + + state = SDLTest_CommonCreateState(argv, 0); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); - /* Load the SDL library */ - if (SDL_Init(0) < 0) { + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); return 1; } @@ -76,6 +87,6 @@ int main(int argc, char *argv[]) SDL_Log("Main thread error string: %s\n", SDL_GetError()); - SDL_Quit(); + SDLTest_CommonQuit(state); return 0; } diff --git a/vs/sdl2/test/testevdev.c b/vs/sdl2/test/testevdev.c index 67124ae0f46..07e85c521cb 100644 --- a/vs/sdl2/test/testevdev.c +++ b/vs/sdl2/test/testevdev.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga Copyright (C) 2020-2022 Collabora Ltd. This software is provided 'as-is', without any express or implied diff --git a/vs/sdl2/test/testfile.c b/vs/sdl2/test/testfile.c index a35da02bd71..67ef4ae3b49 100644 --- a/vs/sdl2/test/testfile.c +++ b/vs/sdl2/test/testfile.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testfilesystem.c b/vs/sdl2/test/testfilesystem.c index af0bd9f05a3..f73336f01f6 100644 --- a/vs/sdl2/test/testfilesystem.c +++ b/vs/sdl2/test/testfilesystem.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -13,17 +13,29 @@ #include #include "SDL.h" +#include "SDL_test.h" int main(int argc, char *argv[]) { char *base_path; char *pref_path; + SDLTest_CommonState *state; + + state = SDLTest_CommonCreateState(argv, 0); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); - if (SDL_Init(0) == -1) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init() failed: %s\n", SDL_GetError()); + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); return 1; } @@ -54,6 +66,6 @@ int main(int argc, char *argv[]) SDL_free(pref_path); } - SDL_Quit(); + SDLTest_CommonQuit(state); return 0; } diff --git a/vs/sdl2/test/testfilesystem_pre.c b/vs/sdl2/test/testfilesystem_pre.c index 11615abd281..632a9907e07 100644 --- a/vs/sdl2/test/testfilesystem_pre.c +++ b/vs/sdl2/test/testfilesystem_pre.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -17,16 +17,35 @@ */ #include "SDL.h" +#include "SDL_test.h" int main(int argc, char *argv[]) { + SDLTest_CommonState *state; Uint64 start; - (void)argc; - (void)argv; - SDL_Init(0); + char *path; + + state = SDLTest_CommonCreateState(argv, 0); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + start = SDL_GetTicks(); - SDL_GetPrefPath("libsdl", "test_filesystem"); + if (!SDLTest_CommonInit(state)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + path = SDL_GetPrefPath("libsdl", "test_filesystem"); + SDL_free(path); SDL_Log("SDL_GetPrefPath took %" SDL_PRIu64 "ms", SDL_GetTicks() - start); - SDL_Quit(); + SDLTest_CommonQuit(state); return 0; } diff --git a/vs/sdl2/test/testgamecontroller.c b/vs/sdl2/test/testgamecontroller.c index 52d3b2d853b..fa9b2408bac 100644 --- a/vs/sdl2/test/testgamecontroller.c +++ b/vs/sdl2/test/testgamecontroller.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -107,7 +107,7 @@ static int virtual_axis_start_x; static int virtual_axis_start_y; static SDL_GameControllerButton virtual_button_active = SDL_CONTROLLER_BUTTON_INVALID; -static void UpdateWindowTitle() +static void UpdateWindowTitle(void) { if (!window) { return; @@ -329,7 +329,7 @@ typedef struct Uint8 ucLedBlue; /* 46 */ } DS5EffectsState_t; -static void CyclePS5TriggerEffect() +static void CyclePS5TriggerEffect(void) { DS5EffectsState_t state; @@ -351,7 +351,7 @@ static void CyclePS5TriggerEffect() SDL_GameControllerSendEffect(gamecontroller, &state, sizeof(state)); } -static SDL_bool ShowingFront() +static SDL_bool ShowingFront(void) { SDL_bool showing_front = SDL_TRUE; int i; @@ -394,7 +394,7 @@ static int SDLCALL VirtualControllerSetLED(void *userdata, Uint8 red, Uint8 gree return 0; } -static void OpenVirtualController() +static void OpenVirtualController(void) { SDL_VirtualJoystickDesc desc; int virtual_index; @@ -420,7 +420,7 @@ static void OpenVirtualController() } } -static void CloseVirtualController() +static void CloseVirtualController(void) { int i; diff --git a/vs/sdl2/test/testgeometry.c b/vs/sdl2/test/testgeometry.c index e09c38332f8..f6377e277c5 100644 --- a/vs/sdl2/test/testgeometry.c +++ b/vs/sdl2/test/testgeometry.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -62,7 +62,7 @@ int LoadSprite(const char *file) return 0; } -void loop() +void loop(void) { int i; SDL_Event event; diff --git a/vs/sdl2/test/testgesture.c b/vs/sdl2/test/testgesture.c index 9870b6059c4..1a5d72d96d3 100644 --- a/vs/sdl2/test/testgesture.c +++ b/vs/sdl2/test/testgesture.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testgl2.c b/vs/sdl2/test/testgl2.c index d14ae167518..1c283c84fdb 100644 --- a/vs/sdl2/test/testgl2.c +++ b/vs/sdl2/test/testgl2.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -78,7 +78,7 @@ quit(int rc) } static void -Render() +Render(void) { static float color[8][3] = { { 1.0, 1.0, 0.0 }, diff --git a/vs/sdl2/test/testgles.c b/vs/sdl2/test/testgles.c index b1577cd8ef2..f092075bb98 100644 --- a/vs/sdl2/test/testgles.c +++ b/vs/sdl2/test/testgles.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -49,7 +49,7 @@ quit(int rc) } static void -Render() +Render(void) { static GLubyte color[8][4] = { { 255, 0, 0, 0 }, { 255, 0, 0, 255 }, diff --git a/vs/sdl2/test/testgles2.c b/vs/sdl2/test/testgles2.c index bafc524ef4b..78bc18a25df 100644 --- a/vs/sdl2/test/testgles2.c +++ b/vs/sdl2/test/testgles2.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -569,7 +569,7 @@ render_thread_fn(void *render_ctx) } static void -loop_threaded() +loop_threaded(void) { SDL_Event event; int i; @@ -598,7 +598,7 @@ loop_threaded() #endif static void -loop() +loop(void) { SDL_Event event; int i; diff --git a/vs/sdl2/test/testgles2_sdf.c b/vs/sdl2/test/testgles2_sdf.c index 3b15f7298f0..2d6427bf45c 100644 --- a/vs/sdl2/test/testgles2_sdf.c +++ b/vs/sdl2/test/testgles2_sdf.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -325,7 +325,7 @@ int done; Uint32 frames; shader_data *datas; -void loop() +void loop(void) { SDL_Event event; int i; diff --git a/vs/sdl2/test/testhotplug.c b/vs/sdl2/test/testhotplug.c index aca1741d7c1..57706a755c8 100644 --- a/vs/sdl2/test/testhotplug.c +++ b/vs/sdl2/test/testhotplug.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testiconv.c b/vs/sdl2/test/testiconv.c index fcdd72892f1..7c27d58c04c 100644 --- a/vs/sdl2/test/testiconv.c +++ b/vs/sdl2/test/testiconv.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testime.c b/vs/sdl2/test/testime.c index fb5756dcba5..8dcd6bb661e 100644 --- a/vs/sdl2/test/testime.c +++ b/vs/sdl2/test/testime.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -333,7 +333,7 @@ static Sint32 unifont_draw_glyph(Uint32 codepoint, int rendererID, SDL_Rect *dst return unifontGlyph[codepoint].width; } -static void unifont_cleanup() +static void unifont_cleanup(void) { int i, j; for (i = 0; i < state->num_windows; ++i) { @@ -425,12 +425,12 @@ Uint32 utf8_decode(char *p, size_t len) return codepoint; } -void usage() +void usage(void) { SDL_Log("usage: testime [--font fontfile]\n"); } -void InitInput() +void InitInput(void) { /* Prepare a rect for text input */ textRect.x = textRect.y = 100; @@ -444,7 +444,7 @@ void InitInput() SDL_StartTextInput(); } -void CleanupVideo() +void CleanupVideo(void) { SDL_StopTextInput(); #ifdef HAVE_SDL_TTF @@ -597,7 +597,7 @@ void _Redraw(int rendererID) SDL_SetTextInputRect(&markedRect); } -void Redraw() +void Redraw(void) { int i; for (i = 0; i < state->num_windows; ++i) { diff --git a/vs/sdl2/test/testintersections.c b/vs/sdl2/test/testintersections.c index bb95fbe937f..b3a91f70bb6 100644 --- a/vs/sdl2/test/testintersections.c +++ b/vs/sdl2/test/testintersections.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -208,7 +208,7 @@ DrawRectRectIntersections(SDL_Renderer *renderer) } } -void loop() +void loop(void) { int i; SDL_Event event; diff --git a/vs/sdl2/test/testjoystick.c b/vs/sdl2/test/testjoystick.c index 38985804943..f9d445d09d2 100644 --- a/vs/sdl2/test/testjoystick.c +++ b/vs/sdl2/test/testjoystick.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testkeys.c b/vs/sdl2/test/testkeys.c index c7b120b4f52..a3daf5cc119 100644 --- a/vs/sdl2/test/testkeys.c +++ b/vs/sdl2/test/testkeys.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,14 +18,31 @@ #include #include "SDL.h" +#include "SDL_test.h" int main(int argc, char *argv[]) { + SDLTest_CommonState *state; SDL_Scancode scancode; + state = SDLTest_CommonCreateState(argv, 0); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } + /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + if (SDL_Init(SDL_INIT_VIDEO) < 0) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); exit(1); @@ -34,6 +51,6 @@ int main(int argc, char *argv[]) SDL_Log("Scancode #%d, \"%s\"\n", scancode, SDL_GetScancodeName(scancode)); } - SDL_Quit(); + SDLTest_CommonQuit(state); return 0; } diff --git a/vs/sdl2/test/testloadso.c b/vs/sdl2/test/testloadso.c index fa6923b97a5..a7d197051f3 100644 --- a/vs/sdl2/test/testloadso.c +++ b/vs/sdl2/test/testloadso.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testlocale.c b/vs/sdl2/test/testlocale.c index 6e371ca1017..863c1839704 100644 --- a/vs/sdl2/test/testlocale.c +++ b/vs/sdl2/test/testlocale.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -11,6 +11,7 @@ */ #include #include "SDL.h" +#include "SDL_test.h" /* !!! FIXME: move this to the test framework */ @@ -35,32 +36,64 @@ static void log_locales(void) int main(int argc, char **argv) { + SDLTest_CommonState *state; + SDL_bool listen = SDL_FALSE; + int i = 1; + + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } + /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp("--listen", argv[i]) == 0) { + listen = SDL_TRUE; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[--listen]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + + i += consumed; + } + + if (!SDLTest_CommonInit(state)) { + return 1; + } + /* Print locales and languages */ - if (SDL_Init(SDL_INIT_VIDEO) != -1) { - log_locales(); - - if ((argc == 2) && (SDL_strcmp(argv[1], "--listen") == 0)) { - SDL_bool keep_going = SDL_TRUE; - while (keep_going) { - SDL_Event e; - while (SDL_PollEvent(&e)) { - if (e.type == SDL_QUIT) { - keep_going = SDL_FALSE; - } else if (e.type == SDL_LOCALECHANGED) { - SDL_Log("Saw SDL_LOCALECHANGED event!"); - log_locales(); - } + log_locales(); + + if (listen) { + SDL_bool keep_going = SDL_TRUE; + while (keep_going) { + SDL_Event e; + while (SDL_PollEvent(&e)) { + if (e.type == SDL_QUIT) { + keep_going = SDL_FALSE; + } else if (e.type == SDL_LOCALECHANGED) { + SDL_Log("Saw SDL_LOCALECHANGED event!"); + log_locales(); } - SDL_Delay(10); } + SDL_Delay(10); } - - SDL_Quit(); } + SDLTest_CommonQuit(state); + return 0; } diff --git a/vs/sdl2/test/testlock.c b/vs/sdl2/test/testlock.c index 1af8846fac1..1a3c2e9f6bd 100644 --- a/vs/sdl2/test/testlock.c +++ b/vs/sdl2/test/testlock.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testmessage.c b/vs/sdl2/test/testmessage.c index d3de67ee766..2bf90092993 100644 --- a/vs/sdl2/test/testmessage.c +++ b/vs/sdl2/test/testmessage.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testmouse.c b/vs/sdl2/test/testmouse.c index 0583ead5a1d..a7096b65d72 100644 --- a/vs/sdl2/test/testmouse.c +++ b/vs/sdl2/test/testmouse.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,7 +18,13 @@ #include /* exit() */ -#ifdef __IPHONEOS__ +#ifdef __3DS__ +/* For mouse-based tests, we want to have the window on the touch screen */ +#define SCREEN_X 40 +#define SCREEN_Y 240 +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 240 +#elif defined(__IPHONEOS__) #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 480 #else @@ -26,6 +32,13 @@ #define SCREEN_HEIGHT 480 #endif +#ifndef SCREEN_X +#define SCREEN_X SDL_WINDOWPOS_CENTERED +#endif +#ifndef SCREEN_Y +#define SCREEN_Y SDL_WINDOWPOS_CENTERED +#endif + static SDL_Window *window; typedef struct _Object @@ -263,9 +276,7 @@ int main(int argc, char *argv[]) } /* Create a window to display joystick axis position */ - window = SDL_CreateWindow("Mouse Test", SDL_WINDOWPOS_CENTERED, - SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, - SCREEN_HEIGHT, 0); + window = SDL_CreateWindow("Mouse Test", SCREEN_X, SCREEN_Y, SCREEN_WIDTH, SCREEN_HEIGHT, 0); if (!window) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window: %s\n", SDL_GetError()); return SDL_FALSE; diff --git a/vs/sdl2/test/testmultiaudio.c b/vs/sdl2/test/testmultiaudio.c index 593942038c3..1b09d9534bb 100644 --- a/vs/sdl2/test/testmultiaudio.c +++ b/vs/sdl2/test/testmultiaudio.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -53,7 +53,7 @@ play_through_once(void *arg, Uint8 *stream, int len) } } -void loop() +void loop(void) { if (SDL_AtomicGet(&cbd[0].done)) { #ifdef __EMSCRIPTEN__ diff --git a/vs/sdl2/test/testnative.c b/vs/sdl2/test/testnative.c index ad47e4a07db..64abd4a07b8 100644 --- a/vs/sdl2/test/testnative.c +++ b/vs/sdl2/test/testnative.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testnative.h b/vs/sdl2/test/testnative.h index e2643902e89..516c8359280 100644 --- a/vs/sdl2/test/testnative.h +++ b/vs/sdl2/test/testnative.h @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testnativeos2.c b/vs/sdl2/test/testnativeos2.c index bbdbe9025ee..cf3629108da 100644 --- a/vs/sdl2/test/testnativeos2.c +++ b/vs/sdl2/test/testnativeos2.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testnativew32.c b/vs/sdl2/test/testnativew32.c index dfd0b63f476..83ffd9a67d0 100644 --- a/vs/sdl2/test/testnativew32.c +++ b/vs/sdl2/test/testnativew32.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testnativex11.c b/vs/sdl2/test/testnativex11.c index a891f466ea6..086ce63c131 100644 --- a/vs/sdl2/test/testnativex11.c +++ b/vs/sdl2/test/testnativex11.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testoffscreen.c b/vs/sdl2/test/testoffscreen.c index 09ef7fcdd77..059a26771a3 100644 --- a/vs/sdl2/test/testoffscreen.c +++ b/vs/sdl2/test/testoffscreen.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -32,7 +32,7 @@ static int width = 640; static int height = 480; static unsigned int max_frames = 200; -void draw() +void draw(void) { SDL_Rect Rect; @@ -50,7 +50,7 @@ void draw() SDL_RenderPresent(renderer); } -void save_surface_to_bmp() +void save_surface_to_bmp(void) { SDL_Surface *surface; Uint32 r_mask, g_mask, b_mask, a_mask; @@ -71,7 +71,7 @@ void save_surface_to_bmp() SDL_FreeSurface(surface); } -void loop() +void loop(void) { SDL_Event event; diff --git a/vs/sdl2/test/testoverlay2.c b/vs/sdl2/test/testoverlay2.c index ccfa8e5b402..d8d2e50c6a2 100644 --- a/vs/sdl2/test/testoverlay2.c +++ b/vs/sdl2/test/testoverlay2.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -178,7 +178,7 @@ PrintUsage(char *argv0) SDL_Log("\n"); } -void loop() +void loop(void) { SDL_Event event; diff --git a/vs/sdl2/test/testplatform.c b/vs/sdl2/test/testplatform.c index 353758a7dac..656d0e57a2a 100644 --- a/vs/sdl2/test/testplatform.c +++ b/vs/sdl2/test/testplatform.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -13,6 +13,7 @@ #include #include "SDL.h" +#include "SDL_test.h" /* * Watcom C flags these as Warning 201: "Unreachable code" if you just @@ -284,7 +285,7 @@ static LL_Test LL_Tests[] = { { "_allmul", &TST_allmul, 0x0000000080000000ll, 0xFFFFFFFFFFFFFFFEll, 0, 0xFFFFFFFF00000000ll }, { "_allmul", &TST_allmul, 0xFFFFFFFFFFFFFFFEll, 0x0000000080000008ll, 0, 0xFFFFFFFEFFFFFFF0ll }, { "_allmul", &TST_allmul, 0x0000000080000008ll, 0xFFFFFFFFFFFFFFFEll, 0, 0xFFFFFFFEFFFFFFF0ll }, - { "_allmul", &TST_allmul, 0x00000000FFFFFFFFll, 0x00000000FFFFFFFFll, 0, 0xFFFFFFFE00000001ll }, + /* UNDEFINED { "_allmul", &TST_allmul, 0x00000000FFFFFFFFll, 0x00000000FFFFFFFFll, 0, 0xFFFFFFFE00000001ll }, */ { "_alldiv", &TST_alldiv, 0x0000000000000000ll, 0x0000000000000001ll, 0, 0x0000000000000000ll }, { "_alldiv", &TST_alldiv, 0x0000000000000000ll, 0xFFFFFFFFFFFFFFFFll, 0, 0x0000000000000000ll }, @@ -445,13 +446,42 @@ int main(int argc, char *argv[]) { SDL_bool verbose = SDL_TRUE; int status = 0; + int i; + SDLTest_CommonState *state; + + state = SDLTest_CommonCreateState(argv, 0); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); - if (argv[1] && (SDL_strcmp(argv[1], "-q") == 0)) { - verbose = SDL_FALSE; + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp("-q", argv[i]) == 0) { + verbose = SDL_FALSE; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[-q]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + + i += consumed; } + + if (!SDLTest_CommonInit(state)) { + return 1; + } + if (verbose) { SDL_Log("This system is running %s\n", SDL_GetPlatform()); } @@ -462,5 +492,6 @@ int main(int argc, char *argv[]) status += TestCPUInfo(verbose); status += TestAssertions(verbose); + SDLTest_CommonQuit(state); return status; } diff --git a/vs/sdl2/test/testpower.c b/vs/sdl2/test/testpower.c index 1c13b4dbaf5..79c0d69ff30 100644 --- a/vs/sdl2/test/testpower.c +++ b/vs/sdl2/test/testpower.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -13,6 +13,7 @@ #include #include "SDL.h" +#include "SDL_test.h" static void report_power(void) @@ -60,17 +61,29 @@ report_power(void) int main(int argc, char *argv[]) { + SDLTest_CommonState *state; + + state = SDLTest_CommonCreateState(argv, 0); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } + /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); - if (SDL_Init(0) == -1) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init() failed: %s\n", SDL_GetError()); + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); return 1; } report_power(); - SDL_Quit(); + SDLTest_CommonQuit(state); return 0; } diff --git a/vs/sdl2/test/testqsort.c b/vs/sdl2/test/testqsort.c index 9c1f7646d95..e35e2a066cc 100644 --- a/vs/sdl2/test/testqsort.c +++ b/vs/sdl2/test/testqsort.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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,36 +43,73 @@ test_sort(const char *desc, int *nums, const int arraylen) int main(int argc, char *argv[]) { + SDLTest_CommonState *state; static int nums[1024 * 100]; static const int itervals[] = { SDL_arraysize(nums), 12 }; int iteration; + int i; + SDL_bool custom_seed = SDL_FALSE; + Uint64 seed; SDLTest_RandomContext rndctx; - if (argc > 1) { - int success; - Uint64 seed = 0; - if (argv[1][0] == '0' && argv[1][1] == 'x') { - success = SDL_sscanf(argv[1] + 2, "%" SDL_PRIx64, &seed); - } else { - success = SDL_sscanf(argv[1], "%" SDL_PRIu64, &seed); - } - if (!success) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Invalid seed. Use a decimal or hexadecimal number.\n"); - return 1; + state = SDLTest_CommonCreateState(argv, 0); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (!custom_seed) { + int success; + + if (argv[i][0] == '0' && argv[i][1] == 'x') { + success = SDL_sscanf(argv[i] + 2, "%" SDL_PRIx64, &seed); + } else { + success = SDL_sscanf(argv[i], "%" SDL_PRIu64, &seed); + } + if (!success) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Invalid seed. Use a decimal or hexadecimal number.\n"); + return 1; + } + if (seed <= ((Uint64)0xffffffff)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Seed must be equal or greater than 0x100000000.\n"); + return 1; + } + custom_seed = SDL_TRUE; + consumed = 1; + } } - if (seed <= ((Uint64)0xffffffff)) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Seed must be equal or greater than 0x100000000.\n"); + + if (consumed <= 0) { + static const char *options[] = { "[SEED]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); return 1; } + + i += consumed; + } + + if (custom_seed) { SDLTest_RandomInit(&rndctx, (unsigned int)(seed >> 32), (unsigned int)(seed & 0xffffffff)); } else { SDLTest_RandomInitTime(&rndctx); } SDL_Log("Using random seed 0x%08x%08x\n", rndctx.x, rndctx.c); + if (!SDLTest_CommonInit(state)) { + return 1; + } + for (iteration = 0; iteration < SDL_arraysize(itervals); iteration++) { const int arraylen = itervals[iteration]; - int i; for (i = 0; i < arraylen; i++) { nums[i] = i; @@ -96,6 +133,8 @@ int main(int argc, char *argv[]) test_sort("random sorted", nums, arraylen); } + SDLTest_CommonQuit(state); + return 0; } diff --git a/vs/sdl2/test/testrelative.c b/vs/sdl2/test/testrelative.c index 3f777cd83d8..c0c7099ee95 100644 --- a/vs/sdl2/test/testrelative.c +++ b/vs/sdl2/test/testrelative.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -35,7 +35,7 @@ DrawRects(SDL_Renderer *renderer) } static void -loop() +loop(void) { /* Check for events */ while (SDL_PollEvent(&event)) { diff --git a/vs/sdl2/test/testrendercopyex.c b/vs/sdl2/test/testrendercopyex.c index 832101aa376..6ecc31e22ff 100644 --- a/vs/sdl2/test/testrendercopyex.c +++ b/vs/sdl2/test/testrendercopyex.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -87,7 +87,7 @@ void Draw(DrawState *s) /* SDL_Delay(10); */ } -void loop() +void loop(void) { int i; SDL_Event event; diff --git a/vs/sdl2/test/testrendertarget.c b/vs/sdl2/test/testrendertarget.c index 9693df4f84f..7e62b5ba5eb 100644 --- a/vs/sdl2/test/testrendertarget.c +++ b/vs/sdl2/test/testrendertarget.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -173,7 +173,7 @@ Draw(DrawState *s) return SDL_TRUE; } -void loop() +void loop(void) { int i; SDL_Event event; diff --git a/vs/sdl2/test/testresample.c b/vs/sdl2/test/testresample.c index 21ff8e170ce..e1608a319f5 100644 --- a/vs/sdl2/test/testresample.c +++ b/vs/sdl2/test/testresample.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testrumble.c b/vs/sdl2/test/testrumble.c index 401b7605e29..29c0ae29c53 100644 --- a/vs/sdl2/test/testrumble.c +++ b/vs/sdl2/test/testrumble.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testscale.c b/vs/sdl2/test/testscale.c index 3659c914907..f98d4d9c613 100644 --- a/vs/sdl2/test/testscale.c +++ b/vs/sdl2/test/testscale.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -78,7 +78,7 @@ void Draw(DrawState *s) SDL_RenderPresent(s->renderer); } -void loop() +void loop(void) { int i; SDL_Event event; diff --git a/vs/sdl2/test/testsem.c b/vs/sdl2/test/testsem.c index 5740833f430..5afa79cf6c2 100644 --- a/vs/sdl2/test/testsem.c +++ b/vs/sdl2/test/testsem.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testsensor.c b/vs/sdl2/test/testsensor.c index 2b9af5835ff..d3523d8b252 100644 --- a/vs/sdl2/test/testsensor.c +++ b/vs/sdl2/test/testsensor.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testshader.c b/vs/sdl2/test/testshader.c index 48535dca78d..f930071c927 100644 --- a/vs/sdl2/test/testshader.c +++ b/vs/sdl2/test/testshader.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -11,6 +11,7 @@ */ /* This is a simple example of using GLSL shaders with SDL */ +#include #include "SDL.h" #ifdef HAVE_OPENGL @@ -228,7 +229,7 @@ static void DestroyShaderProgram(ShaderData *data) } } -static SDL_bool InitShaders() +static SDL_bool InitShaders(void) { int i; @@ -282,7 +283,7 @@ static SDL_bool InitShaders() return SDL_TRUE; } -static void QuitShaders() +static void QuitShaders(void) { int i; diff --git a/vs/sdl2/test/testshape.c b/vs/sdl2/test/testshape.c index 112ec0c60b4..3a84d2188e6 100644 --- a/vs/sdl2/test/testshape.c +++ b/vs/sdl2/test/testshape.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testsprite2.c b/vs/sdl2/test/testsprite2.c index 71b565678b2..204c08bae8f 100644 --- a/vs/sdl2/test/testsprite2.c +++ b/vs/sdl2/test/testsprite2.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -392,7 +392,7 @@ void MoveSprites(SDL_Renderer *renderer, SDL_Texture *sprite) SDL_RenderPresent(renderer); } -static void MoveAllSprites() +static void MoveAllSprites(void) { int i; @@ -404,7 +404,7 @@ static void MoveAllSprites() } } -void loop() +void loop(void) { Uint32 now; SDL_Event event; diff --git a/vs/sdl2/test/testspriteminimal.c b/vs/sdl2/test/testspriteminimal.c index b81101eb5d0..faa2dc83d58 100644 --- a/vs/sdl2/test/testspriteminimal.c +++ b/vs/sdl2/test/testspriteminimal.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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,7 +43,7 @@ quit(int rc) exit(rc); } -void MoveSprites() +void MoveSprites(void) { int i; int window_w = WINDOW_WIDTH; @@ -77,7 +77,7 @@ void MoveSprites() SDL_RenderPresent(renderer); } -void loop() +void loop(void) { SDL_Event event; diff --git a/vs/sdl2/test/teststreaming.c b/vs/sdl2/test/teststreaming.c index 45202a7797d..65686c9de55 100644 --- a/vs/sdl2/test/teststreaming.c +++ b/vs/sdl2/test/teststreaming.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -94,7 +94,7 @@ void UpdateTexture(SDL_Texture *texture) SDL_UnlockTexture(texture); } -void loop() +void loop(void) { SDL_Event event; diff --git a/vs/sdl2/test/testsurround.c b/vs/sdl2/test/testsurround.c index b7dc7d7818c..8a118f79e36 100644 --- a/vs/sdl2/test/testsurround.c +++ b/vs/sdl2/test/testsurround.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -14,6 +14,7 @@ #include "SDL_config.h" #include "SDL.h" +#include "SDL_test.h" static int total_channels; static int active_channel; @@ -141,11 +142,22 @@ fill_buffer(void *unused, Uint8 *stream, int len) int main(int argc, char *argv[]) { int i; + SDLTest_CommonState *state; + + state = SDLTest_CommonCreateState(argv, SDL_INIT_AUDIO); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); - if (SDL_Init(SDL_INIT_AUDIO) < 0) { + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); return 1; } @@ -204,7 +216,7 @@ int main(int argc, char *argv[]) SDL_CloseAudioDevice(dev); } - SDL_Quit(); + SDLTest_CommonQuit(state); return 0; } diff --git a/vs/sdl2/test/testthread.c b/vs/sdl2/test/testthread.c index 5ceac05ffac..b099ae25a2e 100644 --- a/vs/sdl2/test/testthread.c +++ b/vs/sdl2/test/testthread.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -17,15 +17,19 @@ #include #include "SDL.h" +#include "SDL_test.h" static SDL_TLSID tls; -static int alive = 0; +static SDL_Thread *thread = NULL; +static SDL_atomic_t alive; static int testprio = 0; +static SDLTest_CommonState *state; /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ static void quit(int rc) { + SDLTest_CommonQuit(state); SDL_Quit(); exit(rc); } @@ -55,7 +59,7 @@ ThreadFunc(void *data) SDL_TLSSet(tls, "baby thread", NULL); SDL_Log("Started thread %s: My thread id is %lu, thread data = %s\n", (char *)data, SDL_ThreadID(), (const char *)SDL_TLSGet(tls)); - while (alive) { + while (SDL_AtomicGet(&alive)) { SDL_Log("Thread '%s' is alive!\n", (char *)data); if (testprio) { @@ -76,20 +80,45 @@ killed(int sig) { SDL_Log("Killed with SIGTERM, waiting 5 seconds to exit\n"); SDL_Delay(5 * 1000); - alive = 0; + SDL_AtomicSet(&alive, 0); + SDL_WaitThread(thread, NULL); quit(0); } int main(int argc, char *argv[]) { - int arg = 1; - SDL_Thread *thread; + int i; + + state = SDLTest_CommonCreateState(argv, 0); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); - /* Load the SDL library */ - if (SDL_Init(0) < 0) { + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (SDL_strcmp("--prio", argv[i]) == 0) { + testprio = 1; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[--prio]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + exit(1); + } + + i += consumed; + } + + if (!SDLTest_CommonInit(state)) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); return 1; } @@ -100,19 +129,12 @@ int main(int argc, char *argv[]) return 0; } - while (argv[arg] && *argv[arg] == '-') { - if (SDL_strcmp(argv[arg], "--prio") == 0) { - testprio = 1; - } - ++arg; - } - tls = SDL_TLSCreate(); SDL_assert(tls); SDL_TLSSet(tls, "main thread", NULL); SDL_Log("Main thread data initially: %s\n", (const char *)SDL_TLSGet(tls)); - alive = 1; + SDL_AtomicSet(&alive, 1); thread = SDL_CreateThread(ThreadFunc, "One", "#1"); if (!thread) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); @@ -120,12 +142,12 @@ int main(int argc, char *argv[]) } SDL_Delay(5 * 1000); SDL_Log("Waiting for thread #1\n"); - alive = 0; + SDL_AtomicSet(&alive, 0); SDL_WaitThread(thread, NULL); SDL_Log("Main thread data finally: %s\n", (const char *)SDL_TLSGet(tls)); - alive = 1; + SDL_AtomicSet(&alive, 1); (void)signal(SIGTERM, killed); thread = SDL_CreateThread(ThreadFunc, "Two", "#2"); if (!thread) { @@ -134,6 +156,6 @@ int main(int argc, char *argv[]) } (void)raise(SIGTERM); - SDL_Quit(); /* Never reached */ + SDLTest_CommonQuit(state); /* Never reached */ return 0; /* Never reached */ } diff --git a/vs/sdl2/test/testtimer.c b/vs/sdl2/test/testtimer.c index eea9730c534..05219227c44 100644 --- a/vs/sdl2/test/testtimer.c +++ b/vs/sdl2/test/testtimer.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -62,7 +62,9 @@ ticktock(Uint32 interval, void *param) static Uint32 SDLCALL callback(Uint32 interval, void *param) { - SDL_Log("Timer %" SDL_PRIu32 " : param = %d\n", interval, (int)(uintptr_t)param); + int value = (int)(uintptr_t)param; + SDL_assert( value == 1 || value == 2 || value == 3 ); + SDL_Log("Timer %" SDL_PRIu32 " : param = %d\n", interval, value); return interval; } @@ -76,16 +78,24 @@ int main(int argc, char *argv[]) Uint64 start, now; SDL_bool run_interactive_tests = SDL_FALSE; int return_code = 0; + SDLTest_CommonState *state; + + state = SDLTest_CommonCreateState(argv, SDL_INIT_TIMER); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); /* Parse commandline */ for (i = 1; i < argc;) { - int consumed = 0; + int consumed; + consumed = SDLTest_CommonArg(state, i); if (!consumed) { - if (SDL_strcmp(argv[i], "--interactive") == 0) { + if (SDL_strcmp("--interactive", argv[i]) == 0) { run_interactive_tests = SDL_TRUE; consumed = 1; } else if (desired < 0) { @@ -98,14 +108,15 @@ int main(int argc, char *argv[]) } } if (consumed <= 0) { - SDL_Log("Usage: %s [--interactive] [interval]", argv[0]); - return 1; + static const char *options[] = { "[--interactive]", "[interval]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + exit(1); } i += consumed; } - if (SDL_Init(SDL_INIT_TIMER) < 0) { + if (!SDLTest_CommonInit(state)) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); return 1; } @@ -201,7 +212,7 @@ int main(int argc, char *argv[]) if (run_interactive_tests) { return_code |= test_sdl_delay_within_bounds(); } - SDL_Quit(); + SDLTest_CommonQuit(state); return return_code; } diff --git a/vs/sdl2/test/testurl.c b/vs/sdl2/test/testurl.c index 2008186f3a6..6791557aeb7 100644 --- a/vs/sdl2/test/testurl.c +++ b/vs/sdl2/test/testurl.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testutils.c b/vs/sdl2/test/testutils.c index 3b76ea8331f..ed8b7d7949a 100644 --- a/vs/sdl2/test/testutils.c +++ b/vs/sdl2/test/testutils.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga Copyright 2022 Collabora Ltd. This software is provided 'as-is', without any express or implied diff --git a/vs/sdl2/test/testutils.h b/vs/sdl2/test/testutils.h index a10aaadd311..ee32b0bb228 100644 --- a/vs/sdl2/test/testutils.h +++ b/vs/sdl2/test/testutils.h @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga Copyright 2022 Collabora Ltd. This software is provided 'as-is', without any express or implied diff --git a/vs/sdl2/test/testver.c b/vs/sdl2/test/testver.c index 409b1f12f39..b51a32c5af7 100644 --- a/vs/sdl2/test/testver.c +++ b/vs/sdl2/test/testver.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,15 +19,32 @@ #include "SDL.h" #include "SDL_revision.h" +#include "SDL_test.h" int main(int argc, char *argv[]) { SDL_version compiled; SDL_version linked; + SDLTest_CommonState *state; + + state = SDLTest_CommonCreateState(argv, 0); + if (!state) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDLTest_CommonCreateState failed: %s\n", SDL_GetError()); + return 1; + } /* Enable standard application logging */ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { + return 1; + } + + if (!SDLTest_CommonInit(state)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + #if SDL_VERSION_ATLEAST(2, 0, 0) SDL_Log("Compiled with SDL 2.0 or newer\n"); #else @@ -41,6 +58,7 @@ int main(int argc, char *argv[]) SDL_Log("Linked version: %d.%d.%d (%s)\n", linked.major, linked.minor, linked.patch, SDL_GetRevision()); - SDL_Quit(); + + SDLTest_CommonQuit(state); return 0; } diff --git a/vs/sdl2/test/testviewport.c b/vs/sdl2/test/testviewport.c index ee76a3782f9..83fa2b0963e 100644 --- a/vs/sdl2/test/testviewport.c +++ b/vs/sdl2/test/testviewport.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -95,7 +95,7 @@ void DrawOnViewport(SDL_Renderer *renderer) SDL_RenderSetClipRect(renderer, NULL); } -void loop() +void loop(void) { SDL_Event event; int i; diff --git a/vs/sdl2/test/testvulkan.c b/vs/sdl2/test/testvulkan.c index 8a4ac893491..ad09f82cd5a 100644 --- a/vs/sdl2/test/testvulkan.c +++ b/vs/sdl2/test/testvulkan.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testwm2.c b/vs/sdl2/test/testwm2.c index 5236a7f5b97..faa97a3cfa8 100644 --- a/vs/sdl2/test/testwm2.c +++ b/vs/sdl2/test/testwm2.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -143,7 +143,7 @@ draw_modes_menu(SDL_Window *window, SDL_Renderer *renderer, SDL_Rect viewport) } } -void loop() +void loop(void) { int i; SDL_Event event; diff --git a/vs/sdl2/test/testyuv.c b/vs/sdl2/test/testyuv.c index e9038ed0d3d..20708de8fb8 100644 --- a/vs/sdl2/test/testyuv.c +++ b/vs/sdl2/test/testyuv.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testyuv_cvt.c b/vs/sdl2/test/testyuv_cvt.c index d78e5b19645..98576273587 100644 --- a/vs/sdl2/test/testyuv_cvt.c +++ b/vs/sdl2/test/testyuv_cvt.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/testyuv_cvt.h b/vs/sdl2/test/testyuv_cvt.h index fa736be3c3b..6565e52e0a1 100644 --- a/vs/sdl2/test/testyuv_cvt.h +++ b/vs/sdl2/test/testyuv_cvt.h @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga 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/vs/sdl2/test/torturethread.c b/vs/sdl2/test/torturethread.c index b612cda4977..3b0737c3aa0 100644 --- a/vs/sdl2/test/torturethread.c +++ b/vs/sdl2/test/torturethread.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1997-2024 Sam Lantinga + Copyright (C) 1997-2025 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -34,8 +34,9 @@ quit(int rc) int SDLCALL SubThreadFunc(void *data) { - while (!*(int volatile *)data) { - ; /* SDL_Delay(10); */ /* do nothing */ + SDL_atomic_t *flag = (SDL_atomic_t *)data; + while (!SDL_AtomicGet(flag)) { + SDL_Delay(10); } return 0; } @@ -44,7 +45,7 @@ int SDLCALL ThreadFunc(void *data) { SDL_Thread *sub_threads[NUMTHREADS]; - int flags[NUMTHREADS]; + SDL_atomic_t flags[NUMTHREADS]; int i; int tid = (int)(uintptr_t)data; @@ -53,7 +54,7 @@ ThreadFunc(void *data) for (i = 0; i < NUMTHREADS; i++) { char name[64]; (void)SDL_snprintf(name, sizeof(name), "Child%d_%d", tid, i); - flags[i] = 0; + SDL_AtomicSet(&flags[i], 0); sub_threads[i] = SDL_CreateThread(SubThreadFunc, name, &flags[i]); } @@ -64,7 +65,7 @@ ThreadFunc(void *data) SDL_Log("Thread '%d' sending signals to subthreads\n", tid); for (i = 0; i < NUMTHREADS; i++) { - flags[i] = 1; + SDL_AtomicSet(&flags[i], 1); SDL_WaitThread(sub_threads[i], NULL); } diff --git a/vs/sdl2/visualtest/COPYING.txt b/vs/sdl2/visualtest/COPYING.txt new file mode 100644 index 00000000000..f791d2cd27c --- /dev/null +++ b/vs/sdl2/visualtest/COPYING.txt @@ -0,0 +1,18 @@ +Visual and Interactive Test Automation for SDL 2.0 +Copyright (C) 2013 Apoorv Upreti + +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. diff --git a/vs/sdl2/visualtest/README.txt b/vs/sdl2/visualtest/README.txt new file mode 100644 index 00000000000..5a5539507e6 --- /dev/null +++ b/vs/sdl2/visualtest/README.txt @@ -0,0 +1,214 @@ +/*! + +\mainpage Visual and Interactive Test Automation for SDL 2.0 + +\section license_sec License +Check the file \c LICENSE.txt for licensing information. + +\section intro_sec Introduction +The goal of this GSoC project is to automate the testing of testsprite2. +testsprite2 takes 26 parameters which have thousands of valid combinations and is +used to validate SDL's window, mouse and rendering behaviour. By having a test +harness that runs testsprite2 with various command line argument strings and +validates the output for each run, we can make testing an easier task for +maintainers, contributors and testers. The test harness can be used by a continuous +integration system (like buildbot or jenkins) to validate SDL after checkins. + +SDL Homepage: http://libsdl.org/ + +\section build_sec Building + +\subsection build_linux Building on Linux/Cygwin +./autogen.sh; ./configure; make; + +\subsection build_windows Building on Windows +Use the Visual Studio solution under \c SDL/VisualC/visualtest. + +\section docs_sec Documentation +Documentation is available via Doxygen. To build the documentation, cd to the +SDL/visualtest/docs directory and run \c doxygen. A good starting point for +exploring the documentation is \c SDL/visualtest/docs/html/index.html + +\section usage_sec Usage +To see all the options supported by the test harness, just run \c testharness +with no arguments. + +At the moment the following options are supported: +\li \c sutapp - Path to the system under test (SUT) application +\li \c sutargs - Launch the SUT with the specified arguments string +\li \c timeout - The maximum time after which the SUT process will be killed; + passed as hh:mm:ss; default 00:01:00 +\li \c variator - Which variator to use; see \ref variators_sec +\li \c num-variations - The number of variations to run for; taken to be + 1 for the random variator and ALL for the exhaustive variator by default +\li \c no-launch - Just print the arguments string for each variation without + launching the SUT or performing any actions +\li \c parameter-config - A config file that describes the command line parameters + supported by the SUT; see \ref paramconfig_sec or the sample *.parameters files + for more details +\li \c action-config - A config file with a list of actions to be performed while + the SUT is running; see \ref actionconfig_sec or the sample *.actions files +\li \c output-dir - Path to the directory where screenshots should be saved; is + created if it doesn't exist; taken to be "./output" by default +\li \c verify-dir - Path to the directory with the verification images; taken to + be "./verify" by default + +Paths can be relative or absolute. + +Alternatively, the options can be passed as a config file for convenience: + +testharness \-\-config testsprite2_sample.config + +For a sample, take a look at the *.config files in this repository. + +We can also pass a config file and override certain options as necessary: +testharness \-\-config testsprite2_sample.config \-\-num-variations 10 + +Note: You may find it convenient to copy the SUT executable along with any +resources to the test harness directory. Also note that testsprite2 and its +resources (icon.bmp) are automatically copied when using the Visual Studio +solution. + +\subsection usageexamples_subsec Usage examples: + +Passing a custom arguments string: +testharness \-\-sutapp testsprite2 \-\-sutargs "\-\-cyclecolor \-\-blend mod +\-\-iterations 2" \-\-action-config xyz.actions + +Using the random variator: +testharness \-\-sutapp testsprite2 \-\-variator random \-\-num-variations 5 +\-\-parameter-config xyz.parameters \-\-action-config xyz.actions + +\subsection config_subsec Config Files +Config files are an alternate way to pass parameters to the test harness. We +describe the paramters in a config file and pass that to the test harness using +the \-\-config option. The config file consists of lines of the form "x=y" where +x is an option and y is it's value. For boolean options, we simply give the name +of the option to indicate that it is to be passed to the testharness. + +The hash '#' character can be used to start a comment from that point to the end +of the line. + +\section paramconfig_sec The SUT Parameters File +To generate variations we need to describe the parameters the will be passed to +the SUT. This description is given in a parameters file. Each line of the parameters +file (except the blank lines) represents one command line option with five +comma separated fields: +name, type, values, required, categories + +\li \c name is the name of the option, e.g., \c \-\-cyclecolor. +\li \c type can have one of three values - integer, boolean and enum. +\li \c values - for integer options this is the valid range of values the option + can take, i.e., [min max]. For enum options this is a list of strings that + the option can take, e.g., [val1 val2 val3]. For boolean options this field + is ignored. +\li \c required - true if the option is required, false otherwise. +\li \c categories - a list of categories that the option belongs to. For example, + [video mouse audio] + +Just like with config files, hash characters can be used to start comments. + +\subsection additionalnotes_subsec Additional Notes + +\li If you want to have an option that always takes a certain value, use an enum + with only one value. +\li Currently there isn't any way to turn an option off, i.e., all options will + be included in the command line options string that is generated using the + config. If you don't want an option to be passed to the SUT, remove it from + the config file or comment it out. + +\section variators_sec Variators +Variators are the mechanism by which we generate strings of command line arguments +to test the SUT with. A variator is quite simply an iterator that iterates through +different variations of command line options. There are two variators supported at +the moment: +\li \b Exhaustive - Generate all possible combinations of command line arguments + that are valid. +\li \b Random - Generate a random variation each time the variator is called. + +As an example, let's try a simple .parameters file:\n + +\-\-blend, enum, [add mod], false, [] \n +\-\-fullscreen, boolean, [], false, [] + + +The exhaustive variator would generate the following four variations:\n + +\-\-blend add \n +\-\-blend mod \n +\-\-blend add \-\-fullscreen \n +\-\-blend mod \-\-fullscreen \n + + +The random variator would simply generate a random variation like the following:\n +\-\-blend mod + +\section actionconfig_sec The Actions File +Once the SUT process has been launched, automated testing happens using a mechanism +called actions. A list of actions is read from a file and each action is performed +on the SUT process sequentially. Each line in the actions file describes an action. +The format for an action is hh:mm:ss ACTION_NAME additional parameters. +There are five actions supported at the moment: +\li \b SCREENSHOT - Takes a screenshot of each window owned by the SUT process. The + images are saved as \c [hash]_[i].bmp where \c [hash] is the 32 character long + hexadecimal MD5 hash of the arguments string that was passed to the SUT while + launching it and \c i is the window number. i = 1 is an exceptional case + where the \c _[i] is dropped and the filename is simply \c [hash].bmp\n + Note: The screenshots are only of the window's client area. +\li \b VERIFY - Verifies the screenshots taken by the last SCREENSHOT action by + comparing them against a verification image. Each \c [hash]_i.bmp image output + by the SCREENSHOT action is compared against a \c [hash].bmp image in the + verify-dir. +\li \b QUIT - Gracefully quits the SUT process. On Windows this means sending a + WM_CLOSE message to each window owned by the SUT process. On Linux it means + sending a SIGQUIT signal to the SUT process. +\li \b KILL - Forcefully kills the SUT process. This is useful when the SUT process + doesn't respond to the QUIT action. +\li LAUNCH [/path/to/executable] [args] - Runs an executable with \c [args] + as the arguments string. + +Just like with config files, hash characters can be used to start comments. + +\section contint_sec Continuous Integration (CI) +One of the goals of the project was to create a test harness that integrates +with CI systems to provide automated visual and interactive testing to SDL. + +At the moment the test harness can be run in two modes that are useful for CI: +\li Crash testing mode - launch the SUT with every variation and all parameters, + report to the CI if there's a crash +\li Visual testing mode - launch and visually verify the SUT for a smaller subset + of the parameters + +Look at the launch_harness.sh/launch_harness.cmd for an example scripts that run the +test harness for all variations with all parameters and report an error on a crash. +The script uses the testsprite2_crashtest config, so remember to copy those files +over to the test harness executable directory along with the script. + +\section todo_sec TODOs +\li Allow specifying a clipping box along with the VERIFY action, i.e., hh:mm:ss + VERIFY x, y, w, h +\li Add support for spaces between the equals sign in test harness config files +\li Implement the SCREENSHOT action on Linux +\li Add a pairwise variator +\li Add actions to inject keyboard/mouse events +\li Add actions to manipulate the SUT window, e.g., minimize, restore, resize +\li Add support to load and save screenshots as .pngs instead of .bmps + +\section issues_sec Known Issues +\li The QUIT action does not work on a testsprite2 process with multiple windows. + This appears to be an issue with testsprite2. +\li The SCREENSHOT action doesn't capture the testsprite2 window correctly if the + --fullscreen option is supplied. It works with --fullscreen-desktop, however. + +\section moreinfo_sec More Information + +Author Contact Info:\n +Apoorv Upreti \c \ + +Other useful links: +- Project Repository: https://bitbucket.org/nerdap/sdlvisualtest +- Project Wiki: https://github.com/nerdap/autotestsprite2/wiki +- Project Blog: http://nerdap.github.io +- Verification images for testsprite2_blendmodes: https://www.dropbox.com/s/nm02aem76m812ng/testsprite2_blendmodes.zip +- Verification images for testsprite2_geometry: https://www.dropbox.com/s/csypwryopaslpaf/testsprite2_geometry.zip +*/ diff --git a/vs/sdl2/visualtest/acinclude.m4 b/vs/sdl2/visualtest/acinclude.m4 new file mode 100644 index 00000000000..0fdf353ea29 --- /dev/null +++ b/vs/sdl2/visualtest/acinclude.m4 @@ -0,0 +1,337 @@ +# Configure paths for SDL +# Sam Lantinga 9/21/99 +# stolen from Manish Singh +# stolen back from Frank Belew +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +# serial 2 + +dnl AM_PATH_SDL2([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS +dnl +AC_DEFUN([AM_PATH_SDL2], +[dnl +dnl Get the cflags and libraries from the sdl2-config script +dnl +AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], + sdl_prefix="$withval", sdl_prefix="") +AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], + sdl_exec_prefix="$withval", sdl_exec_prefix="") +AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], + , enable_sdltest=yes) + + min_sdl_version=ifelse([$1], ,2.0.0,$1) + + if test "x$sdl_prefix$sdl_exec_prefix" = x ; then + PKG_CHECK_MODULES([SDL], [sdl2 >= $min_sdl_version], + [sdl_pc=yes], + [sdl_pc=no]) + else + sdl_pc=no + if test x$sdl_exec_prefix != x ; then + sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" + if test x${SDL2_CONFIG+set} != xset ; then + SDL2_CONFIG=$sdl_exec_prefix/bin/sdl2-config + fi + fi + if test x$sdl_prefix != x ; then + sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" + if test x${SDL2_CONFIG+set} != xset ; then + SDL2_CONFIG=$sdl_prefix/bin/sdl2-config + fi + fi + fi + + if test "x$sdl_pc" = xyes ; then + no_sdl="" + SDL2_CONFIG="pkg-config sdl2" + else + as_save_PATH="$PATH" + if test "x$prefix" != xNONE && test "$cross_compiling" != yes; then + PATH="$prefix/bin:$prefix/usr/bin:$PATH" + fi + AC_PATH_PROG(SDL2_CONFIG, sdl2-config, no, [$PATH]) + PATH="$as_save_PATH" + AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) + no_sdl="" + + if test "$SDL2_CONFIG" = "no" ; then + no_sdl=yes + else + SDL_CFLAGS=`$SDL2_CONFIG $sdl_config_args --cflags` + SDL_LIBS=`$SDL2_CONFIG $sdl_config_args --libs` + + sdl_major_version=`$SDL2_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + sdl_minor_version=`$SDL2_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + sdl_micro_version=`$SDL2_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_sdltest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_CXXFLAGS="$CXXFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" +dnl +dnl Now check if the installed SDL is sufficiently new. (Also sanity +dnl checks the results of sdl2-config to some extent +dnl + rm -f conf.sdltest + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include +#include +#include "SDL.h" + +int main (int argc, char *argv[]) +{ + int major, minor, micro; + FILE *fp = fopen("conf.sdltest", "w"); + + if (fp) fclose(fp); + + if (sscanf("$min_sdl_version", "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_sdl_version"); + exit(1); + } + + if (($sdl_major_version > major) || + (($sdl_major_version == major) && ($sdl_minor_version > minor)) || + (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'sdl2-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); + printf("*** of SDL required is %d.%d.%d. If sdl2-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If sdl2-config was wrong, set the environment variable SDL2_CONFIG\n"); + printf("*** to point to the correct copy of sdl2-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +]])], [], [no_sdl=yes], [echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_sdl" = x ; then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi + fi + if test "x$no_sdl" = x ; then + ifelse([$2], , :, [$2]) + else + if test "$SDL2_CONFIG" = "no" ; then + echo "*** The sdl2-config script installed by SDL could not be found" + echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the SDL2_CONFIG environment variable to the" + echo "*** full path to sdl2-config." + else + if test -f conf.sdltest ; then + : + else + echo "*** Could not run SDL test program, checking why..." + CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +#include "SDL.h" + +int main(int argc, char *argv[]) +{ return 0; } +#undef main +#define main K_and_R_C_main +]], [[ return 0; ]])], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding SDL or finding the wrong" + echo "*** version of SDL. If it is not finding SDL, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means SDL was incorrectly installed" + echo "*** or that you have moved SDL since it was installed. In the latter case, you" + echo "*** may want to edit the sdl2-config script: $SDL2_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + SDL_CFLAGS="" + SDL_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(SDL_CFLAGS) + AC_SUBST(SDL_LIBS) + rm -f conf.sdltest +]) +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH|_LIBDIR)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $2]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES diff --git a/vs/sdl2/visualtest/autogen.sh b/vs/sdl2/visualtest/autogen.sh new file mode 100644 index 00000000000..988d41760d9 --- /dev/null +++ b/vs/sdl2/visualtest/autogen.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +cp acinclude.m4 aclocal.m4 + +if test "$AUTOCONF"x = x; then + AUTOCONF=autoconf +fi + +$AUTOCONF || exit 1 +rm aclocal.m4 +rm -rf autom4te.cache diff --git a/vs/sdl2/visualtest/configs/testsprite2_blendmodes/testsprite2_blendmodes.actions b/vs/sdl2/visualtest/configs/testsprite2_blendmodes/testsprite2_blendmodes.actions new file mode 100644 index 00000000000..b0a2072a594 --- /dev/null +++ b/vs/sdl2/visualtest/configs/testsprite2_blendmodes/testsprite2_blendmodes.actions @@ -0,0 +1,3 @@ +00:00:03 SCREENSHOT +00:00:06 VERIFY +00:00:09 QUIT \ No newline at end of file diff --git a/vs/sdl2/visualtest/configs/testsprite2_blendmodes/testsprite2_blendmodes.config b/vs/sdl2/visualtest/configs/testsprite2_blendmodes/testsprite2_blendmodes.config new file mode 100644 index 00000000000..30be6052b80 --- /dev/null +++ b/vs/sdl2/visualtest/configs/testsprite2_blendmodes/testsprite2_blendmodes.config @@ -0,0 +1,5 @@ +parameter-config=testsprite2_blendmodes.parameters +variator=exhaustive +sutapp=testsprite2 +timeout=00:00:15 +action-config=testsprite2_blendmodes.actions \ No newline at end of file diff --git a/vs/sdl2/visualtest/configs/testsprite2_blendmodes/testsprite2_blendmodes.parameters b/vs/sdl2/visualtest/configs/testsprite2_blendmodes/testsprite2_blendmodes.parameters new file mode 100644 index 00000000000..8b93a725137 --- /dev/null +++ b/vs/sdl2/visualtest/configs/testsprite2_blendmodes/testsprite2_blendmodes.parameters @@ -0,0 +1,5 @@ +# parameter name, type, value range, required, categories +--blend, enum, [none blend add mod], false, [] +--cyclecolor, boolean, [], false, [] +--cyclealpha, boolean, [], false, [] +--iterations, integer, [1000 1000], true, [] \ No newline at end of file diff --git a/vs/sdl2/visualtest/configs/testsprite2_crashtest/testsprite2_crashtest.actions b/vs/sdl2/visualtest/configs/testsprite2_crashtest/testsprite2_crashtest.actions new file mode 100644 index 00000000000..75af9d75deb --- /dev/null +++ b/vs/sdl2/visualtest/configs/testsprite2_crashtest/testsprite2_crashtest.actions @@ -0,0 +1 @@ +00:00:02 QUIT \ No newline at end of file diff --git a/vs/sdl2/visualtest/configs/testsprite2_crashtest/testsprite2_crashtest.config b/vs/sdl2/visualtest/configs/testsprite2_crashtest/testsprite2_crashtest.config new file mode 100644 index 00000000000..9a4bcf7fc93 --- /dev/null +++ b/vs/sdl2/visualtest/configs/testsprite2_crashtest/testsprite2_crashtest.config @@ -0,0 +1,5 @@ +parameter-config=testsprite2_crashtest.parameters +variator=exhaustive +sutapp=testsprite2 +timeout=00:00:10 +action-config=testsprite2_crashtest.actions \ No newline at end of file diff --git a/vs/sdl2/visualtest/configs/testsprite2_crashtest/testsprite2_crashtest.parameters b/vs/sdl2/visualtest/configs/testsprite2_crashtest/testsprite2_crashtest.parameters new file mode 100644 index 00000000000..1c484bb67dd --- /dev/null +++ b/vs/sdl2/visualtest/configs/testsprite2_crashtest/testsprite2_crashtest.parameters @@ -0,0 +1,24 @@ +# parameter name, type, value range, required, categories +--display, integer, [1 5], false, [] +--fullscreen, boolean, [], false, [] +--fullscreen-desktop, boolean, [], false, [] +--title, enum, [vartest bartest footest], false, [] +--icon, enum, [icon.bmp], false, [] +--center, boolean, [], false, [] +--position, enum, [300,300], false, [] +--geometry, enum, [500x500], false, [] +--min-geometry, enum, [100x100 200x200], false, [] +--max-geometry, enum, [600x600 700x700], false, [] +--logical, enum, [500x500 550x450], false, [] +--scale, integer, [1 5], false, [] +--depth, integer, [1 5], false, [] +--refresh, integer, [1 5], false, [] +--vsync, boolean, [], false, [] +--noframe, boolean, [], false, [] +--resize, boolean, [], false, [] +--minimize, boolean, [], false, [] +--maximize, boolean, [], false, [] +--grab, boolean, [], false, [mouse] +--blend, enum, [none blend add mod], false, [] +--cyclecolor, boolean, [], false, [] +--cyclealpha, boolean, [], false, [] \ No newline at end of file diff --git a/vs/sdl2/visualtest/configs/testsprite2_fullscreen/testsprite2_fullscreen.actions b/vs/sdl2/visualtest/configs/testsprite2_fullscreen/testsprite2_fullscreen.actions new file mode 100644 index 00000000000..b0a2072a594 --- /dev/null +++ b/vs/sdl2/visualtest/configs/testsprite2_fullscreen/testsprite2_fullscreen.actions @@ -0,0 +1,3 @@ +00:00:03 SCREENSHOT +00:00:06 VERIFY +00:00:09 QUIT \ No newline at end of file diff --git a/vs/sdl2/visualtest/configs/testsprite2_fullscreen/testsprite2_fullscreen.config b/vs/sdl2/visualtest/configs/testsprite2_fullscreen/testsprite2_fullscreen.config new file mode 100644 index 00000000000..a97ac721b33 --- /dev/null +++ b/vs/sdl2/visualtest/configs/testsprite2_fullscreen/testsprite2_fullscreen.config @@ -0,0 +1,5 @@ +parameter-config=testsprite2_fullscreen.parameters +variator=exhaustive +sutapp=testsprite2 +timeout=00:00:15 +action-config=testsprite2_fullscreen.actions \ No newline at end of file diff --git a/vs/sdl2/visualtest/configs/testsprite2_fullscreen/testsprite2_fullscreen.parameters b/vs/sdl2/visualtest/configs/testsprite2_fullscreen/testsprite2_fullscreen.parameters new file mode 100644 index 00000000000..b352921fd9c --- /dev/null +++ b/vs/sdl2/visualtest/configs/testsprite2_fullscreen/testsprite2_fullscreen.parameters @@ -0,0 +1,5 @@ +# parameter name, type, value range, required, categories +--blend, enum, [none blend add mod], false, [] +--fullscreen, boolean, [], false, [] +--fullscreen-desktop, boolean, [], false, [] +--iterations, integer, [1000 1000], true, [] \ No newline at end of file diff --git a/vs/sdl2/visualtest/configs/testsprite2_geometry/testsprite2_geometry.actions b/vs/sdl2/visualtest/configs/testsprite2_geometry/testsprite2_geometry.actions new file mode 100644 index 00000000000..b0a2072a594 --- /dev/null +++ b/vs/sdl2/visualtest/configs/testsprite2_geometry/testsprite2_geometry.actions @@ -0,0 +1,3 @@ +00:00:03 SCREENSHOT +00:00:06 VERIFY +00:00:09 QUIT \ No newline at end of file diff --git a/vs/sdl2/visualtest/configs/testsprite2_geometry/testsprite2_geometry.config b/vs/sdl2/visualtest/configs/testsprite2_geometry/testsprite2_geometry.config new file mode 100644 index 00000000000..f38d30a2c71 --- /dev/null +++ b/vs/sdl2/visualtest/configs/testsprite2_geometry/testsprite2_geometry.config @@ -0,0 +1,5 @@ +parameter-config=testsprite2_geometry.parameters +variator=exhaustive +sutapp=testsprite2 +timeout=00:00:15 +action-config=testsprite2_geometry.actions \ No newline at end of file diff --git a/vs/sdl2/visualtest/configs/testsprite2_geometry/testsprite2_geometry.parameters b/vs/sdl2/visualtest/configs/testsprite2_geometry/testsprite2_geometry.parameters new file mode 100644 index 00000000000..92844a634f0 --- /dev/null +++ b/vs/sdl2/visualtest/configs/testsprite2_geometry/testsprite2_geometry.parameters @@ -0,0 +1,5 @@ +# parameter name, type, value range, required, categories +--geometry, enum, [500x500 600x600], false, [] +--logical, enum, [300x500 550x450], false, [] +--scale, integer, [1 5], false, [] +--iterations, integer, [1000 1000], true, [] \ No newline at end of file diff --git a/vs/sdl2/visualtest/configure.ac b/vs/sdl2/visualtest/configure.ac new file mode 100644 index 00000000000..3566bf0d830 --- /dev/null +++ b/vs/sdl2/visualtest/configure.ac @@ -0,0 +1,41 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT +AC_CONFIG_SRCDIR([unittest/testquit.c]) + +dnl Detect the canonical build and host environments +AC_CONFIG_AUX_DIR([../build-scripts]) +AC_CANONICAL_HOST + +dnl Check for tools +AC_PROG_CC + +dnl Figure out which math or extra library to use +case "$host" in + *-*-cygwin* | *-*-mingw*) + EXE=".exe" + EXTRALIB="-lshlwapi" + ;; + *) + EXE="" + EXTRALIB="" + ;; +esac +AC_SUBST(EXE) + +dnl Check for SDL +SDL_VERSION=2.0.0 +AM_PATH_SDL2($SDL_VERSION, + :, + AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!]) +) +CFLAGS="$CFLAGS $SDL_CFLAGS" +LIBS="$LIBS -lSDL2_test $SDL_LIBS $EXTRALIB" + +PKG_CHECK_MODULES(LIBUNWIND, libunwind, have_libunwind=yes, have_libunwind=no) +if test x$have_libunwind = xyes ; then + LIBS="$LIBS $LIBUNWIND_LIBS" +fi + +dnl Finally create all the generated files +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/vs/sdl2/visualtest/docs/Doxyfile b/vs/sdl2/visualtest/docs/Doxyfile new file mode 100644 index 00000000000..08caeb491e9 --- /dev/null +++ b/vs/sdl2/visualtest/docs/Doxyfile @@ -0,0 +1,1936 @@ +# Doxyfile 1.8.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = "SDL Visual Test" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = . + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Latvian, Lithuanian, Norwegian, Macedonian, +# Persian, Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, +# Slovak, Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. Note that you specify absolute paths here, but also +# relative paths, which will be relative from the directory where doxygen is +# started. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, +# and language is one of the parsers supported by doxygen: IDL, Java, +# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, +# C++. For instance to make doxygen treat .inc files as Fortran files (default +# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note +# that for custom extensions you also need to set FILE_PATTERNS otherwise the +# files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by by putting a % sign in front of the word +# or globally by setting AUTOLINK_SUPPORT to NO. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES (the +# default) will make doxygen replace the get and set methods by a property in +# the documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields or simple typedef fields will be shown +# inline in the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO (the default), structs, classes, and unions are shown on a separate +# page (for HTML and Man pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can +# be an expensive process and often the same symbol appear multiple times in +# the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too +# small doxygen will become slower. If the cache is too large, memory is wasted. +# The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid +# range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536 +# symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if section-label ... \endif +# and \cond section-label ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. Do not use +# file names with spaces, bibtex cannot handle them. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.for \ + *.vhd \ + *.vhdl \ + README.txt + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be ignored. +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +# If CLANG_ASSISTED_PARSING is set to YES, then doxygen will use the clang parser +# for more acurate parsing at the cost of reduced performance. This can be +# particularly helpful with template rich C++ code for which doxygen's built-in +# parser lacks the necessairy type information. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified at INPUT and INCLUDE_PATH. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If left blank doxygen will +# generate a default style sheet. Note that it is recommended to use +# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this +# tag will in the future become obsolete. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional +# user-defined cascading style sheet that is included after the standard +# style sheets created by doxygen. Using this option one can overrule +# certain style aspects. This is preferred over using HTML_STYLESHEET +# since it does not replace the standard style sheet and is therefor more +# robust against future updates. Doxygen will copy the style sheet file to +# the output directory. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely +# identify the documentation publisher. This should be a reverse domain-name +# style string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and +# SVG. The default value is HTML-CSS, which is slower, but has the best +# compatibility. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript +# pieces of code that will be used on startup of the MathJax code. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a web server instead of a web client using Javascript. +# There are two flavours of web server based search depending on the +# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for +# searching and an index file used by the script. When EXTERNAL_SEARCH is +# enabled the indexing and searching needs to be provided by external tools. +# See the manual for details. + +SERVER_BASED_SEARCH = NO + +# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP +# script for searching. Instead the search results are written to an XML file +# which needs to be processed by an external indexer. Doxygen will invoke an +# external search engine pointed to by the SEARCHENGINE_URL option to obtain +# the search results. Doxygen ships with an example indexer (doxyindexer) and +# search engine (doxysearch.cgi) which are based on the open source search +# engine library Xapian. See the manual for configuration details. + +EXTERNAL_SEARCH = NO + +# The SEARCHENGINE_URL should point to a search engine hosted by a web server +# which will returned the search results when EXTERNAL_SEARCH is enabled. +# Doxygen ships with an example search engine (doxysearch) which is based on +# the open source search engine library Xapian. See the manual for configuration +# details. + +SEARCHENGINE_URL = + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed +# search data is written to a file for indexing by an external tool. With the +# SEARCHDATA_FILE tag the name of this file can be specified. + +SEARCHDATA_FILE = searchdata.xml + +# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the +# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is +# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple +# projects and redirect the results back to the right project. + +EXTERNAL_SEARCH_ID = + +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# projects other than the one defined by this configuration file, but that are +# all added to the same external search index. Each project needs to have a +# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id +# of to a relative location where the documentation can be found. +# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ... + +EXTRA_SEARCH_MAPPINGS = + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4 will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images +# or other source files which should be copied to the LaTeX output directory. +# Note that the files will be copied as-is; there are no commands or markers +# available. + +LATEX_EXTRA_FILES = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- + +# If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files +# that can be used to generate PDF. + +GENERATE_DOCBOOK = NO + +# The DOCBOOK_OUTPUT tag is used to specify where the DOCBOOK pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in +# front of it. If left blank docbook will be used as the default path. + +DOCBOOK_OUTPUT = docbook + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed +# in the related pages index. If set to NO, only the current project's +# pages will be listed. + +EXTERNAL_PAGES = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# manageable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/vs/sdl2/visualtest/include/SDL_visualtest_action_configparser.h b/vs/sdl2/visualtest/include/SDL_visualtest_action_configparser.h new file mode 100644 index 00000000000..40481f3798d --- /dev/null +++ b/vs/sdl2/visualtest/include/SDL_visualtest_action_configparser.h @@ -0,0 +1,149 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file SDL_visualtest_action_configparser.h + * + * Header file for the parser for action config files. + */ + +#ifndef SDL_visualtest_action_configparser_h_ +#define SDL_visualtest_action_configparser_h_ + +/** The maximum length of one line in the actions file */ +#define MAX_ACTION_LINE_LENGTH 300 + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Type of the action. + */ +typedef enum +{ + /*! Launch an application with some given arguments */ + SDL_ACTION_LAUNCH = 0, + /*! Kill the SUT process */ + SDL_ACTION_KILL, + /*! Quit (Gracefully exit) the SUT process */ + SDL_ACTION_QUIT, + /*! Take a screenshot of the SUT window */ + SDL_ACTION_SCREENSHOT, + /*! Verify a previously taken screenshot */ + SDL_ACTION_VERIFY +} SDLVisualTest_ActionType; + +/** + * Struct that defines an action that will be performed on the SUT process at + * a specific time. + */ +typedef struct SDLVisualTest_Action +{ + /*! The type of action to be performed */ + SDLVisualTest_ActionType type; + /*! The time, in milliseconds from the launch of the SUT, when the action + will be performed */ + int time; + /*! Any additional information needed to perform the action. */ + union + { + /*! The path and arguments to the process to be launched */ + struct + { + char* path; + char* args; + } process; + } extra; +} SDLVisualTest_Action; + +/** + * Struct for a node in the action queue. + */ +typedef struct SDLVisualTest_ActionNode +{ + /*! The action in this node */ + SDLVisualTest_Action action; + /*! Pointer to the next element in the queue */ + struct SDLVisualTest_ActionNode* next; +} SDLVisualTest_ActionNode; + +/** + * Queue structure for actions loaded from the actions config file. + */ +typedef struct SDLVisualTest_ActionQueue +{ + /*! Pointer to the front of the queue */ + SDLVisualTest_ActionNode* front; + /*! Pointer to the rear of the queue */ + SDLVisualTest_ActionNode* rear; + /*! Number of nodes in the queue */ + int size; +} SDLVisualTest_ActionQueue; + +/** + * Add an action pointed to by \c action to the rear of the action queue pointed + * to by \c queue. + * + * \return 1 on success, 0 on failure. + */ +int SDLVisualTest_EnqueueAction(SDLVisualTest_ActionQueue* queue, + SDLVisualTest_Action action); + +/** + * Remove an action from the front of the action queue pointed to by \c queue. + * + * \return 1 on success, 0 on failure. + */ +int SDLVisualTest_DequeueAction(SDLVisualTest_ActionQueue* queue); + +/** + * Initialize the action queue pointed to by \c queue. + */ +void SDLVisualTest_InitActionQueue(SDLVisualTest_ActionQueue* queue); + +/** + * Get the action at the front of the action queue pointed to by \c queue. + * The returned action pointer may become invalid after subsequent dequeues. + * + * \return pointer to the action on success, NULL on failure. + */ +SDLVisualTest_Action* SDLVisualTest_GetQueueFront(SDLVisualTest_ActionQueue* queue); + +/** + * Check if the queue pointed to by \c queue is empty or not. + * + * \return 1 if the queue is empty, 0 otherwise. + */ +int SDLVisualTest_IsActionQueueEmpty(SDLVisualTest_ActionQueue* queue); + +/** + * Dequeues all the elements in the queque pointed to by \c queue. + */ +void SDLVisualTest_EmptyActionQueue(SDLVisualTest_ActionQueue* queue); + +/** + * Inserts an action \c action into the queue pointed to by \c queue such that + * the times of actions in the queue increase as we move from the front to the + * rear. + * + * \return 1 on success, 0 on failure. + */ +int SDLVisualTest_InsertIntoActionQueue(SDLVisualTest_ActionQueue* queue, + SDLVisualTest_Action action); + +/** + * Parses an action config file with path \c file and populates an action queue + * pointed to by \c queue with actions. + * + * \return 1 on success, 0 on failure. + */ +int SDLVisualTest_ParseActionConfig(const char* file, SDLVisualTest_ActionQueue* queue); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* SDL_visualtest_action_configparser_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/visualtest/include/SDL_visualtest_exhaustive_variator.h b/vs/sdl2/visualtest/include/SDL_visualtest_exhaustive_variator.h new file mode 100644 index 00000000000..4637ce29e10 --- /dev/null +++ b/vs/sdl2/visualtest/include/SDL_visualtest_exhaustive_variator.h @@ -0,0 +1,64 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file SDL_visualtest_exhaustive_variator.h + * + * Header for the exhaustive variator. + */ + +#include "SDL_visualtest_harness_argparser.h" +#include "SDL_visualtest_variator_common.h" + +#ifndef SDL_visualtest_exhaustive_variator_h_ +#define SDL_visualtest_exhaustive_variator_h_ + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Struct for the variator that exhaustively iterates through all variations of + * command line arguments to the SUT. + */ +typedef struct SDLVisualTest_ExhaustiveVariator +{ + /*! The current variation. */ + SDLVisualTest_Variation variation; + /*! Configuration object for the SUT that the variator is running for. */ + SDLVisualTest_SUTConfig config; + /*! Buffer to store the arguments string built from the variation */ + char buffer[MAX_SUT_ARGS_LEN]; +} SDLVisualTest_ExhaustiveVariator; + +/** + * Initializes the variator. + * + * \return 1 on success, 0 on failure + */ +int SDLVisualTest_InitExhaustiveVariator(SDLVisualTest_ExhaustiveVariator* variator, + SDLVisualTest_SUTConfig* config); + +/** + * Gets the arguments string for the next variation using the variator and updates + * the variator's current variation object to the next variation. + * + * \return The arguments string representing the next variation on success, and + * NULL on failure or if we have iterated through all possible variations. + * In the latter case subsequent calls will start the variations again from + * the very beginning. The pointer returned should not be freed. + */ +char* SDLVisualTest_GetNextExhaustiveVariation(SDLVisualTest_ExhaustiveVariator* variator); + +/** + * Frees any resources associated with the variator. + */ +void SDLVisualTest_FreeExhaustiveVariator(SDLVisualTest_ExhaustiveVariator* variator); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* SDL_visualtest_exhaustive_variator_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/visualtest/include/SDL_visualtest_harness_argparser.h b/vs/sdl2/visualtest/include/SDL_visualtest_harness_argparser.h new file mode 100644 index 00000000000..75420fe2e64 --- /dev/null +++ b/vs/sdl2/visualtest/include/SDL_visualtest_harness_argparser.h @@ -0,0 +1,75 @@ +/** + * \file SDL_visualtest_harness_argparser.h + * + * Provides functionality to parse command line arguments to the test harness. + */ + +#include +#include "SDL_visualtest_sut_configparser.h" +#include "SDL_visualtest_variator_common.h" +#include "SDL_visualtest_action_configparser.h" + +#ifndef SDL_visualtest_harness_argparser_h_ +#define SDL_visualtest_harness_argparser_h_ + +/** Maximum length of a path string */ +#define MAX_PATH_LEN 300 +/** Maximum length of a string of SUT arguments */ +#define MAX_SUT_ARGS_LEN 600 + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Stores the state of the test harness. + */ +typedef struct SDLVisualTest_HarnessState +{ + /*! Path to the System Under Test (SUT) executable */ + char sutapp[MAX_PATH_LEN]; + /*! Command line arguments to be passed to the SUT */ + char sutargs[MAX_SUT_ARGS_LEN]; + /*! Time in milliseconds after which to kill the SUT */ + int timeout; + /*! Configuration object for the SUT */ + SDLVisualTest_SUTConfig sut_config; + /*! What type of variator to use to generate argument strings */ + SDLVisualTest_VariatorType variator_type; + /*! The number of variations to generate */ + int num_variations; + /*! If true, the test harness will just print the different variations + without launching the SUT for each one */ + SDL_bool no_launch; + /*! A queue with actions to be performed while the SUT is running */ + SDLVisualTest_ActionQueue action_queue; + /*! Output directory to save the screenshots */ + char output_dir[MAX_PATH_LEN]; + /*! Path to directory with the verification images */ + char verify_dir[MAX_PATH_LEN]; +} SDLVisualTest_HarnessState; + +/** + * Parse command line paramters to the test harness and populate a state object. + * + * \param argv The array of command line parameters. + * \param state Pointer to the state object to be populated. + * + * \return Non-zero on success, zero on failure. + */ +int SDLVisualTest_ParseHarnessArgs(char** argv, SDLVisualTest_HarnessState* state); + +/** + * Frees any resources associated with the state object pointed to by \c state. + */ +void SDLVisualTest_FreeHarnessState(SDLVisualTest_HarnessState* state); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* SDL_visualtest_harness_argparser_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/visualtest/include/SDL_visualtest_mischelper.h b/vs/sdl2/visualtest/include/SDL_visualtest_mischelper.h new file mode 100644 index 00000000000..5faffa5677b --- /dev/null +++ b/vs/sdl2/visualtest/include/SDL_visualtest_mischelper.h @@ -0,0 +1,28 @@ +/** + * \file mischelper.c + * + * Header with miscellaneous helper functions. + */ + +#ifndef SDL_visualtest_mischelper_h_ +#define SDL_visualtest_mischelper_h_ + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Stores a 32 digit hexadecimal string representing the MD5 hash of the + * string \c str in \c hash. + */ +void SDLVisualTest_HashString(char* str, char hash[33]); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* SDL_visualtest_mischelper_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/visualtest/include/SDL_visualtest_parsehelper.h b/vs/sdl2/visualtest/include/SDL_visualtest_parsehelper.h new file mode 100644 index 00000000000..4558552c133 --- /dev/null +++ b/vs/sdl2/visualtest/include/SDL_visualtest_parsehelper.h @@ -0,0 +1,46 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file SDL_visualtest_parsehelper.h + * + * Header with some helper functions for parsing strings. + */ + +#ifndef SDL_visualtest_parsehelper_h_ +#define SDL_visualtest_parsehelper_h_ + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Takes an string of command line arguments and breaks them up into an array + * based on whitespace. + * + * \param args The string of arguments. + * + * \return NULL on failure, an array of strings on success. The last element + * of the array is NULL. The first element of the array is NULL and should + * be set to the path of the executable by the caller. + */ +char** SDLVisualTest_ParseArgsToArgv(char* args); + +/** + * Takes a string and breaks it into tokens by splitting on whitespace. + * + * \param str The string to be split. + * \param max_token_len Length of each element in the array to be returned. + * + * \return NULL on failure; an array of strings with the tokens on success. The + * last element of the array is NULL. + */ +char** SDLVisualTest_Tokenize(char* str, int max_token_len); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* SDL_visualtest_parsehelper_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/visualtest/include/SDL_visualtest_process.h b/vs/sdl2/visualtest/include/SDL_visualtest_process.h new file mode 100644 index 00000000000..26ce5a09889 --- /dev/null +++ b/vs/sdl2/visualtest/include/SDL_visualtest_process.h @@ -0,0 +1,112 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file SDL_visualtest_process.h + * + * Provides cross-platfrom process launching and termination functionality. + */ + +#include + +#if defined(__WIN32__) +#include +#include +#elif defined(__LINUX__) +#include +#else +#error "Unsupported platform." +#endif + +#ifndef SDL_visualtest_process_h_ +#define SDL_visualtest_process_h_ + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Struct to store a platform specific handle to a process. + */ +typedef struct SDL_ProcessInfo +{ +//#if defined(_WIN32) || defined(__WIN32__) +#if defined(__WIN32__) + PROCESS_INFORMATION pi; +//#elif defined(__linux__) +#elif defined(__LINUX__) + int pid; +#endif +} SDL_ProcessInfo; + +/** + * This structure stores the exit status (value returned by main()) and + * whether the process exited sucessfully or not. + */ +typedef struct SDL_ProcessExitStatus +{ + int exit_success; /*!< Zero if the process exited successfully */ + int exit_status; /*!< The exit status of the process. 8-bit value. */ +} SDL_ProcessExitStatus; + +/** + * Launches a process with the given commandline arguments. + * + * \param file The path to the executable to be launched. + * \param args The command line arguments to be passed to the process. + * \param pinfo Pointer to an SDL_ProcessInfo object to be populated with + * platform specific information about the launched process. + * + * \return Non-zero on success, zero on failure. + */ +int SDL_LaunchProcess(char* file, char* args, SDL_ProcessInfo* pinfo); + +/** + * Checks if a process is running or not. + * + * \param pinfo Pointer to SDL_ProcessInfo object of the process that needs to be + * checked. + * + * \return 1 if the process is still running; zero if it is not and -1 if the + * status could not be retrieved. + */ +int SDL_IsProcessRunning(SDL_ProcessInfo* pinfo); + +/** + * Kills a currently running process. + * + * \param pinfo Pointer to a SDL_ProcessInfo object of the process to be terminated. + * \param ps Pointer to a SDL_ProcessExitStatus object which will be populated + * with the exit status. + * + * \return 1 on success, 0 on failure. + */ +int SDL_KillProcess(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps); + +/** + * Cleanly exits the process represented by \c pinfo and stores the exit status + * in the exit status object pointed to by \c ps. + * + * \return 1 on success, 0 on failure. + */ +int SDL_QuitProcess(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps); + +/** + * Gets the exit status of a process. If the exit status is -1, the process is + * still running. + * + * \param pinfo Pointer to a SDL_ProcessInfo object of the process to be checked. + * \param ps Pointer to a SDL_ProcessExitStatus object which will be populated + * with the exit status. + * + * \return 1 on success, 0 on failure. + */ +int SDL_GetProcessExitStatus(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* SDL_visualtest_process_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/visualtest/include/SDL_visualtest_random_variator.h b/vs/sdl2/visualtest/include/SDL_visualtest_random_variator.h new file mode 100644 index 00000000000..0514ce63122 --- /dev/null +++ b/vs/sdl2/visualtest/include/SDL_visualtest_random_variator.h @@ -0,0 +1,61 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file SDL_visualtest_random_variator.h + * + * Header for the random variator. + */ + +#include "SDL_visualtest_harness_argparser.h" +#include "SDL_visualtest_variator_common.h" + +#ifndef SDL_visualtest_random_variator_h_ +#define SDL_visualtest_random_variator_h_ + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Struct for the variator that randomly generates variations of command line + * arguments to the SUT. + */ +typedef struct SDLVisualTest_RandomVariator +{ + /*! The current variation. */ + SDLVisualTest_Variation variation; + /*! Configuration object for the SUT that the variator is running for. */ + SDLVisualTest_SUTConfig config; + /*! Buffer to store the arguments string built from the variation */ + char buffer[MAX_SUT_ARGS_LEN]; +} SDLVisualTest_RandomVariator; + +/** + * Initializes the variator. + * + * \return 1 on success, 0 on failure + */ +int SDLVisualTest_InitRandomVariator(SDLVisualTest_RandomVariator* variator, + SDLVisualTest_SUTConfig* config, Uint64 seed); + +/** + * Generates a new random variation. + * + * \return The arguments string representing the random variation on success, and + * NULL on failure. The pointer returned should not be freed. + */ +char* SDLVisualTest_GetNextRandomVariation(SDLVisualTest_RandomVariator* variator); + +/** + * Frees any resources associated with the variator. + */ +void SDLVisualTest_FreeRandomVariator(SDLVisualTest_RandomVariator* variator); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* SDL_visualtest_random_variator_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/visualtest/include/SDL_visualtest_rwhelper.h b/vs/sdl2/visualtest/include/SDL_visualtest_rwhelper.h new file mode 100644 index 00000000000..bc394259483 --- /dev/null +++ b/vs/sdl2/visualtest/include/SDL_visualtest_rwhelper.h @@ -0,0 +1,87 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file rwhelper.c + * + * Header file with some helper functions for working with SDL_RWops. + */ + +#include + +#ifndef SDL_visualtest_rwhelper_h_ +#define SDL_visualtest_rwhelper_h_ + +/** Length of the buffer in SDLVisualTest_RWHelperBuffer */ +#define RWOPS_BUFFER_LEN 256 + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Struct that is used as a buffer by the RW helper functions. Should be initialized by calling + * SDLVisualTest_RWHelperResetBuffer() before being used. + */ +typedef struct SDLVisualTest_RWHelperBuffer +{ + /*! Character buffer that data is read into */ + char buffer[RWOPS_BUFFER_LEN]; + /*! buffer[buffer_pos] is the next character to be read from the buffer */ + int buffer_pos; + /*! Number of character read into the buffer */ + int buffer_width; +} SDLVisualTest_RWHelperBuffer; + +/** + * Resets the buffer pointed to by \c buffer used by some of the helper functions. + * This function should be called when you're using one of the helper functions + * with a new SDL_RWops object. + */ +void SDLVisualTest_RWHelperResetBuffer(SDLVisualTest_RWHelperBuffer* buffer); + +/** + * Reads a single character using the SDL_RWops object pointed to by \c rw. + * This function reads data in blocks and stores them in the buffer pointed to by + * \c buffer, so other SDL_RWops functions should not be used in conjunction + * with this function. + * + * \return The character that was read. + */ +char SDLVisualTest_RWHelperReadChar(SDL_RWops* rw, + SDLVisualTest_RWHelperBuffer* buffer); + +/** + * Reads characters using the SDL_RWops object pointed to by \c rw into the + * character array pointed to by \c str (of size \c size) until either the + * array is full or a new line is encountered. If \c comment_char is encountered, + * all characters from that position till the end of the line are ignored. The new line + * is not included as part of the buffer. Lines with only whitespace and comments + * are ignored. This function reads data in blocks and stores them in the buffer + * pointed to by \c buffer, so other SDL_RWops functions should not be used in + * conjunction with this function. + * + * \return pointer to the string on success, NULL on failure or EOF. + */ +char* SDLVisualTest_RWHelperReadLine(SDL_RWops* rw, char* str, int size, + SDLVisualTest_RWHelperBuffer* buffer, + char comment_char); + +/** + * Counts the number of lines that are not all whitespace and comments using the + * SDL_RWops object pointed to by \c rw. \c comment_char indicates the character + * used for comments. Uses the buffer pointed to by \c buffer to read data in blocks. + * + * \return Number of lines on success, -1 on failure. + */ +int SDLVisualTest_RWHelperCountNonEmptyLines(SDL_RWops* rw, + SDLVisualTest_RWHelperBuffer* buffer, + char comment_char); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* SDL_visualtest_rwhelper_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/visualtest/include/SDL_visualtest_screenshot.h b/vs/sdl2/visualtest/include/SDL_visualtest_screenshot.h new file mode 100644 index 00000000000..69411e99dfa --- /dev/null +++ b/vs/sdl2/visualtest/include/SDL_visualtest_screenshot.h @@ -0,0 +1,52 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file SDL_visualtest_screenshot.h + * + * Header for the screenshot API. + */ + +#include "SDL_visualtest_process.h" + +#ifndef SDL_visualtest_screenshot_h_ +#define SDL_visualtest_screenshot_h_ + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Takes a screenshot of each window owned by the process \c pinfo and saves + * it in a file \c prefix-i.png where \c prefix is the full path to the file + * along with a prefix given to each screenshot. + * + * \return 1 on success, 0 on failure. + */ +int SDLVisualTest_ScreenshotProcess(SDL_ProcessInfo* pinfo, char* prefix); + +/** + * Takes a screenshot of the desktop and saves it into the file with path + * \c filename. + * + * \return 1 on success, 0 on failure. + */ +int SDLVisualTest_ScreenshotDesktop(char* filename); + +/** + * Compare a screenshot taken previously with SUT arguments \c args that is + * located in \c test_dir with a verification image that is located in + * \c verify_dir. + * + * \return -1 on failure, 0 if the images were not equal, 1 if the images are equal + * and 2 if the verification image is not present. + */ +int SDLVisualTest_VerifyScreenshots(char* args, char* test_dir, char* verify_dir); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* SDL_visualtest_screenshot_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/visualtest/include/SDL_visualtest_sut_configparser.h b/vs/sdl2/visualtest/include/SDL_visualtest_sut_configparser.h new file mode 100644 index 00000000000..63506f5a02b --- /dev/null +++ b/vs/sdl2/visualtest/include/SDL_visualtest_sut_configparser.h @@ -0,0 +1,105 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file SDL_visualtest_sut_configparser.h + * + * Header for the parser for SUT config files. + */ + +#ifndef SDL_visualtest_sut_configparser_h_ +#define SDL_visualtest_sut_configparser_h_ + +/** Maximum length of the name of an SUT option */ +#define MAX_SUTOPTION_NAME_LEN 100 +/** Maximum length of the name of a category of an SUT option */ +#define MAX_SUTOPTION_CATEGORY_LEN 40 +/** Maximum length of one enum value of an SUT option */ +#define MAX_SUTOPTION_ENUMVAL_LEN 40 +/** Maximum length of a line in the paramters file */ +#define MAX_SUTOPTION_LINE_LENGTH 256 + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Describes the different kinds of options to the SUT. + */ +typedef enum { + SDL_SUT_OPTIONTYPE_STRING = 0, + SDL_SUT_OPTIONTYPE_INT, + SDL_SUT_OPTIONTYPE_ENUM, + SDL_SUT_OPTIONTYPE_BOOL +} SDLVisualTest_SUTOptionType; + +/** + * Represents the range of values an integer option can take. + */ +typedef struct SDLVisualTest_SUTIntRange { + /*! Minimum value of the integer option */ + int min; + /*! Maximum value of the integer option */ + int max; +} SDLVisualTest_SUTIntRange; + +/** + * Struct that defines an option to be passed to the SUT. + */ +typedef struct SDLVisualTest_SUTOption { + /*! The name of the option. This is what you would pass in the command line + along with two leading hyphens. */ + char name[MAX_SUTOPTION_NAME_LEN]; + /*! An array of categories that the option belongs to. The last element is + NULL. */ + char** categories; + /*! Type of the option - integer, boolean, etc. */ + SDLVisualTest_SUTOptionType type; + /*! Whether the option is required or not */ + SDL_bool required; + /*! extra data that is required for certain types */ + union { + /*! This field is valid only for integer type options; it defines the + valid range for such an option */ + SDLVisualTest_SUTIntRange range; + /*! This field is valid only for enum type options; it holds the list of values + that the option can take. The last element is NULL */ + char** enum_values; + } data; +} SDLVisualTest_SUTOption; + +/** + * Struct to hold all the options to an SUT application. + */ +typedef struct SDLVisualTest_SUTConfig +{ + /*! Pointer to an array of options */ + SDLVisualTest_SUTOption* options; + /*! Number of options in \c options */ + int num_options; +} SDLVisualTest_SUTConfig; + +/** + * Parses a configuration file that describes the command line options an SUT + * application will take and populates a SUT config object. All lines in the + * config file must be smaller than + * + * \param file Path to the configuration file. + * \param config Pointer to an object that represents an SUT configuration. + * + * \return zero on failure, non-zero on success + */ +int SDLVisualTest_ParseSUTConfig(char* file, SDLVisualTest_SUTConfig* config); + +/** + * Free any resources associated with the config object pointed to by \c config. + */ +void SDLVisualTest_FreeSUTConfig(SDLVisualTest_SUTConfig* config); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* SDL_visualtest_sut_configparser_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/visualtest/include/SDL_visualtest_variator_common.h b/vs/sdl2/visualtest/include/SDL_visualtest_variator_common.h new file mode 100644 index 00000000000..19a5b378286 --- /dev/null +++ b/vs/sdl2/visualtest/include/SDL_visualtest_variator_common.h @@ -0,0 +1,122 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file SDL_visualtest_variator_common.h + * + * Header for common functionality used by variators. + */ + +#include +#include "SDL_visualtest_sut_configparser.h" + +#ifndef SDL_visualtest_variator_common_h_ +#define SDL_visualtest_variator_common_h_ + +/** The number of variations one integer option would generate */ +#define SDL_SUT_INTEGER_OPTION_TEST_STEPS 3 + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** enum for indicating the type of variator being used */ +typedef enum SDLVisualTest_VariatorType +{ + SDL_VARIATOR_NONE = 0, + SDL_VARIATOR_EXHAUSTIVE, + SDL_VARIATOR_RANDOM +} SDLVisualTest_VariatorType; + +/** + * One possible value for a command line option to the SUT. + */ +typedef union SDLVisualTest_SUTOptionValue +{ + /*! Value if the option is of type boolean */ + SDL_bool bool_value; + /*! Value if the option is of type integer. If on is true then the option + will be passed to the SUT, otherwise it will be ignored. */ + struct { + int value; + SDL_bool on; + } integer; + /*! Index of the string in the enum_values field of the corresponding + SDLVisualTest_SUTOption object. If on is true the option will passed + to the SUT, otherwise it will be ignored. */ + struct { + int index; + SDL_bool on; + } enumerated; + /*! Value if the option is of type string. If on is true the option will + be passed to the SUT, otherwise it will be ignored. */ + struct { + char* value; + SDL_bool on; + } string; +} SDLVisualTest_SUTOptionValue; + +/** + * Represents a valid combination of parameters that can be passed to the SUT. + * The ordering of the values here is the same as the ordering of the options in + * the SDLVisualTest_SUTConfig object for this variation. + */ +typedef struct SDLVisualTest_Variation +{ + /*! Pointer to array of option values */ + SDLVisualTest_SUTOptionValue* vars; + /*! Number of option values in \c vars */ + int num_vars; +} SDLVisualTest_Variation; + +/** + * "Increments" the value of the option by one and returns the carry. We wrap + * around to the initial value on overflow which makes the carry one. + * For example: "incrementing" an SDL_FALSE option makes it SDL_TRUE with no + * carry, and "incrementing" an SDL_TRUE option makes it SDL_FALSE with carry + * one. For integers, a random value in the valid range for the option is used. + * + * \param var Value of the option + * \param opt Object with metadata about the option + * + * \return 1 if there is a carry for enum and bool type options, 0 otherwise. + * 1 is always returned for integer and string type options. -1 is + * returned on error. + */ +int SDLVisualTest_NextValue(SDLVisualTest_SUTOptionValue* var, + SDLVisualTest_SUTOption* opt); + +/** + * Converts a variation object into a string of command line arguments. + * + * \param variation Variation object to be converted. + * \param config Config object for the SUT. + * \param buffer Pointer to the buffer the arguments string will be copied into. + * \param size Size of the buffer. + * + * \return 1 on success, 0 on failure + */ +int SDLVisualTest_MakeStrFromVariation(SDLVisualTest_Variation* variation, + SDLVisualTest_SUTConfig* config, + char* buffer, int size); + +/** + * Initializes the variation using the following rules: + * - Boolean options are initialized to SDL_FALSE. + * - Integer options are initialized to the minimum valid value they can hold. + * - Enum options are initialized to the first element in the list of values they + * can take. + * - String options are initialized to the name of the option. + * + * \return 1 on success, 0 on failure. + */ +int SDLVisualTest_InitVariation(SDLVisualTest_Variation* variation, + SDLVisualTest_SUTConfig* config); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* SDL_visualtest_variator_common_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/visualtest/include/SDL_visualtest_variators.h b/vs/sdl2/visualtest/include/SDL_visualtest_variators.h new file mode 100644 index 00000000000..e14f67d2a4f --- /dev/null +++ b/vs/sdl2/visualtest/include/SDL_visualtest_variators.h @@ -0,0 +1,66 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file SDL_visualtest_variators.h + * + * Header for all the variators that vary input parameters to a SUT application. + */ + +#include "SDL_visualtest_exhaustive_variator.h" +#include "SDL_visualtest_random_variator.h" + +#ifndef SDL_visualtest_variators_h_ +#define SDL_visualtest_variators_h_ + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Struct that acts like a wrapper around the different types of variators + * available. + */ +typedef struct SDLVisualTest_Variator +{ + /*! Type of the variator */ + SDLVisualTest_VariatorType type; + /*! union object that stores the variator */ + union + { + SDLVisualTest_ExhaustiveVariator exhaustive; + SDLVisualTest_RandomVariator random; + } data; +} SDLVisualTest_Variator; + +/** + * Initializes the variator object pointed to by \c variator of type \c type + * with information from the config object pointed to by \c config. + * + * \return 1 on success, 0 on failure + */ +int SDLVisualTest_InitVariator(SDLVisualTest_Variator* variator, + SDLVisualTest_SUTConfig* config, + SDLVisualTest_VariatorType type, + Uint64 seed); + +/** + * Gets the next variation using the variator. + * + * \return The arguments string representing the variation on success, and + * NULL on failure. The pointer returned should not be freed. + */ +char* SDLVisualTest_GetNextVariation(SDLVisualTest_Variator* variator); + +/** + * Frees any resources associated with the variator. + */ +void SDLVisualTest_FreeVariator(SDLVisualTest_Variator* variator); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* SDL_visualtest_variators_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2/visualtest/launch_harness.cmd b/vs/sdl2/visualtest/launch_harness.cmd new file mode 100644 index 00000000000..9909cd491a0 --- /dev/null +++ b/vs/sdl2/visualtest/launch_harness.cmd @@ -0,0 +1,2 @@ +start /wait testharness.exe --config testsprite2_crashtest.config > testrun.log 2>&1 +if %ERRORLEVEL% NEQ 0 echo TEST RUN FAILED (see testrun.log) \ No newline at end of file diff --git a/vs/sdl2/visualtest/launch_harness.sh b/vs/sdl2/visualtest/launch_harness.sh new file mode 100644 index 00000000000..10cbf660efd --- /dev/null +++ b/vs/sdl2/visualtest/launch_harness.sh @@ -0,0 +1,6 @@ +#!/bin/sh +./testharness.exe --config testsprite2_crashtest.config > testrun.log 2>&1 +if [ "$?" != "0" ]; then + echo TEST RUN FAILED (see testrun.log) + # report error code to CI +fi diff --git a/vs/sdl2/visualtest/src/action_configparser.c b/vs/sdl2/visualtest/src/action_configparser.c new file mode 100644 index 00000000000..f3b1afd7360 --- /dev/null +++ b/vs/sdl2/visualtest/src/action_configparser.c @@ -0,0 +1,399 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file action_configparser.c + * + * Source file for the parser for action config files. + */ + +#include +#include +#include +#include "SDL_visualtest_action_configparser.h" +#include "SDL_visualtest_rwhelper.h" +#include "SDL_visualtest_parsehelper.h" + +static void +FreeAction(SDLVisualTest_Action* action) +{ + if(!action) + return; + switch(action->type) + { + case SDL_ACTION_LAUNCH: + { + char* path; + char* args; + + path = action->extra.process.path; + args = action->extra.process.args; + + if(path) + SDL_free(path); + if(args) + SDL_free(args); + + action->extra.process.path = NULL; + action->extra.process.args = NULL; + } + break; + + default: + break; + } +} + +int +SDLVisualTest_EnqueueAction(SDLVisualTest_ActionQueue* queue, + SDLVisualTest_Action action) +{ + SDLVisualTest_ActionNode* node; + if(!queue) + { + SDLTest_LogError("queue argument cannot be NULL"); + return 0; + } + + node = (SDLVisualTest_ActionNode*)SDL_malloc( + sizeof(SDLVisualTest_ActionNode)); + if(!node) + { + SDLTest_LogError("SDL_malloc() failed"); + return 0; + } + node->action = action; + node->next = NULL; + queue->size++; + if(!queue->rear) + queue->rear = queue->front = node; + else + { + queue->rear->next = node; + queue->rear = node; + } + return 1; +} + +int +SDLVisualTest_DequeueAction(SDLVisualTest_ActionQueue* queue) +{ + SDLVisualTest_ActionNode* node; + if(!queue) + { + SDLTest_LogError("queue argument cannot be NULL"); + return 0; + } + if(SDLVisualTest_IsActionQueueEmpty(queue)) + { + SDLTest_LogError("cannot dequeue from empty queue"); + return 0; + } + if(queue->front == queue->rear) + { + FreeAction(&queue->front->action); + SDL_free(queue->front); + queue->front = queue->rear = NULL; + } + else + { + node = queue->front; + queue->front = queue->front->next; + FreeAction(&node->action); + SDL_free(node); + } + queue->size--; + return 1; +} + +void +SDLVisualTest_InitActionQueue(SDLVisualTest_ActionQueue* queue) +{ + if(!queue) + { + SDLTest_LogError("queue argument cannot be NULL"); + return; + } + queue->front = NULL; + queue->rear = NULL; + queue->size = 0; +} + +SDLVisualTest_Action* +SDLVisualTest_GetQueueFront(SDLVisualTest_ActionQueue* queue) +{ + if(!queue) + { + SDLTest_LogError("queue argument cannot be NULL"); + return NULL; + } + if(!queue->front) + { + SDLTest_LogError("cannot get front of empty queue"); + return NULL; + } + + return &queue->front->action; +} + +int +SDLVisualTest_IsActionQueueEmpty(SDLVisualTest_ActionQueue* queue) +{ + if(!queue) + { + SDLTest_LogError("queue argument cannot be NULL"); + return 1; + } + + if(queue->size > 0) + return 0; + return 1; +} + +void +SDLVisualTest_EmptyActionQueue(SDLVisualTest_ActionQueue* queue) +{ + if(queue) + { + while(!SDLVisualTest_IsActionQueueEmpty(queue)) + SDLVisualTest_DequeueAction(queue); + } +} + +/* Since the size of the queue is not likely to be larger than 100 elements + we can get away with using insertion sort. */ +static void +SortQueue(SDLVisualTest_ActionQueue* queue) +{ + SDLVisualTest_ActionNode* head; + SDLVisualTest_ActionNode* tail; + + if(!queue || SDLVisualTest_IsActionQueueEmpty(queue)) + return; + + head = queue->front; + for(tail = head; tail && tail->next;) + { + SDLVisualTest_ActionNode* pos; + SDLVisualTest_ActionNode* element = tail->next; + + if(element->action.time < head->action.time) + { + tail->next = tail->next->next; + element->next = head; + head = element; + } + else if(element->action.time >= tail->action.time) + { + tail = tail->next; + } + else + { + for(pos = head; + (pos->next->action.time < element->action.time); + pos = pos->next); + tail->next = tail->next->next; + element->next = pos->next; + pos->next = element; + } + } + + queue->front = head; + queue->rear = tail; +} + +int +SDLVisualTest_InsertIntoActionQueue(SDLVisualTest_ActionQueue* queue, + SDLVisualTest_Action action) +{ + SDLVisualTest_ActionNode* n; + SDLVisualTest_ActionNode* prev; + SDLVisualTest_ActionNode* newnode; + if(!queue) + { + SDLTest_LogError("queue argument cannot be NULL"); + return 0; + } + + if(SDLVisualTest_IsActionQueueEmpty(queue)) + { + if(!SDLVisualTest_EnqueueAction(queue, action)) + { + SDLTest_LogError("SDLVisualTest_EnqueueAction() failed"); + return 0; + } + return 1; + } + + newnode = (SDLVisualTest_ActionNode*)SDL_malloc(sizeof(SDLVisualTest_ActionNode)); + if(!newnode) + { + SDLTest_LogError("SDL_malloc() failed"); + return 0; + } + newnode->action = action; + + queue->size++; + for(n = queue->front, prev = NULL; n; n = n->next) + { + if(action.time < n->action.time) + { + if(prev) + { + prev->next = newnode; + newnode->next = n; + } + else + { + newnode->next = queue->front; + queue->front = newnode; + } + return 1; + } + prev = n; + } + + queue->rear->next = newnode; + newnode->next = NULL; + queue->rear = newnode; + + return 1; +} + +int +SDLVisualTest_ParseActionConfig(const char* file, SDLVisualTest_ActionQueue* queue) +{ + char line[MAX_ACTION_LINE_LENGTH]; + SDLVisualTest_RWHelperBuffer buffer; + char* token_ptr; + int linenum; + SDL_RWops* rw; + + if(!file) + { + SDLTest_LogError("file argument cannot be NULL"); + return 0; + } + if(!queue) + { + SDLTest_LogError("queue argument cannot be NULL"); + return 0; + } + + rw = SDL_RWFromFile(file, "r"); + if(!rw) + { + SDLTest_LogError("SDL_RWFromFile() failed"); + return 0; + } + + SDLVisualTest_RWHelperResetBuffer(&buffer); + SDLVisualTest_InitActionQueue(queue); + linenum = 0; + while(SDLVisualTest_RWHelperReadLine(rw, line, MAX_ACTION_LINE_LENGTH, + &buffer, '#')) + { + SDLVisualTest_Action action; + int hr, min, sec; + + /* parse time */ + token_ptr = strtok(line, " "); + if(!token_ptr || + (SDL_sscanf(token_ptr, "%d:%d:%d", &hr, &min, &sec) != 3)) + { + SDLTest_LogError("Could not parse time token at line: %d", + linenum); + SDLVisualTest_EmptyActionQueue(queue); + SDL_RWclose(rw); + return 0; + } + action.time = (((hr * 60 + min) * 60) + sec) * 1000; + + /* parse type */ + token_ptr = strtok(NULL, " "); + if(SDL_strcasecmp(token_ptr, "launch") == 0) + action.type = SDL_ACTION_LAUNCH; + else if(SDL_strcasecmp(token_ptr, "kill") == 0) + action.type = SDL_ACTION_KILL; + else if(SDL_strcasecmp(token_ptr, "quit") == 0) + action.type = SDL_ACTION_QUIT; + else if(SDL_strcasecmp(token_ptr, "screenshot") == 0) + action.type = SDL_ACTION_SCREENSHOT; + else if(SDL_strcasecmp(token_ptr, "verify") == 0) + action.type = SDL_ACTION_VERIFY; + else + { + SDLTest_LogError("Could not parse type token at line: %d", + linenum); + SDLVisualTest_EmptyActionQueue(queue); + SDL_RWclose(rw); + return 0; + } + + /* parse the extra field */ + if(action.type == SDL_ACTION_LAUNCH) + { + int len; + char* args; + char* path; + token_ptr = strtok(NULL, " "); + len = token_ptr ? SDL_strlen(token_ptr) : 0; + if(len <= 0) + { + SDLTest_LogError("Please specify the process to launch at line: %d", + linenum); + SDLVisualTest_EmptyActionQueue(queue); + SDL_RWclose(rw); + return 0; + } + path = (char*)SDL_malloc(sizeof(char) * (len + 1)); + if(!path) + { + SDLTest_LogError("SDL_malloc() failed"); + SDLVisualTest_EmptyActionQueue(queue); + SDL_RWclose(rw); + return 0; + } + SDL_strlcpy(path, token_ptr, len + 1); + + token_ptr = strtok(NULL, ""); + len = token_ptr ? SDL_strlen(token_ptr) : 0; + if(len > 0) + { + args = (char*)SDL_malloc(sizeof(char) * (len + 1)); + if(!args) + { + SDLTest_LogError("SDL_malloc() failed"); + SDL_free(path); + SDLVisualTest_EmptyActionQueue(queue); + SDL_RWclose(rw); + return 0; + } + SDL_strlcpy(args, token_ptr, len + 1); + } + else + args = NULL; + + action.extra.process.path = path; + action.extra.process.args = args; + } + + /* add the action to the queue */ + if(!SDLVisualTest_EnqueueAction(queue, action)) + { + SDLTest_LogError("SDLVisualTest_EnqueueAction() failed"); + if(action.type == SDL_ACTION_LAUNCH) + { + SDL_free(action.extra.process.path); + if(action.extra.process.args) + SDL_free(action.extra.process.args); + } + SDLVisualTest_EmptyActionQueue(queue); + SDL_RWclose(rw); + return 0; + } + } + /* sort the queue of actions */ + SortQueue(queue); + + SDL_RWclose(rw); + return 1; +} diff --git a/vs/sdl2/visualtest/src/harness_argparser.c b/vs/sdl2/visualtest/src/harness_argparser.c new file mode 100644 index 00000000000..8bc57064ba2 --- /dev/null +++ b/vs/sdl2/visualtest/src/harness_argparser.c @@ -0,0 +1,358 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file harness_argparser.c + * + * Source file for functions to parse arguments to the test harness. + */ + +#include +#include +#include + +#include "SDL_visualtest_harness_argparser.h" +#include "SDL_visualtest_rwhelper.h" + +/** Maximum length of one line in the config file */ +#define MAX_CONFIG_LINE_LEN 400 +/** Default value for the timeout after which the SUT is forcefully killed */ +#define DEFAULT_SUT_TIMEOUT (60 * 1000) + +/* String compare s1 and s2 ignoring leading hyphens */ +static int +StrCaseCmpIgnoreHyphen(const char* s1, const char* s2) +{ + /* treat NULL pointer as empty strings */ + if(!s1) + s1 = ""; + if(!s2) + s2 = ""; + + while(*s1 == '-') + s1++; + while(*s2 == '-') + s2++; + + return SDL_strcasecmp(s1, s2); +} + +/* parser an argument, updates the state object and returns the number of + arguments processed; returns -1 on failure */ +static int +ParseArg(char** argv, int index, SDLVisualTest_HarnessState* state) +{ + if(!argv || !argv[index] || !state) + return 0; + + if(StrCaseCmpIgnoreHyphen("sutapp", argv[index]) == 0) + { + index++; + if(!argv[index]) + { + SDLTest_LogError("Arguments parsing error: Invalid argument for sutapp."); + return -1; + } + SDL_strlcpy(state->sutapp, argv[index], MAX_PATH_LEN); + SDLTest_Log("SUT Application: %s", state->sutapp); + return 2; + } + else if(StrCaseCmpIgnoreHyphen("output-dir", argv[index]) == 0) + { + index++; + if(!argv[index]) + { + SDLTest_LogError("Arguments parsing error: Invalid argument for output-dir."); + return -1; + } + SDL_strlcpy(state->output_dir, argv[index], MAX_PATH_LEN); + SDLTest_Log("Screenshot Output Directory: %s", state->output_dir); + return 2; + } + else if(StrCaseCmpIgnoreHyphen("verify-dir", argv[index]) == 0) + { + index++; + if(!argv[index]) + { + SDLTest_LogError("Arguments parsing error: Invalid argument for verify-dir."); + return -1; + } + SDL_strlcpy(state->verify_dir, argv[index], MAX_PATH_LEN); + SDLTest_Log("Screenshot Verification Directory: %s", state->verify_dir); + return 2; + } + else if(StrCaseCmpIgnoreHyphen("sutargs", argv[index]) == 0) + { + index++; + if(!argv[index]) + { + SDLTest_LogError("Arguments parsing error: Invalid argument for sutargs."); + return -1; + } + SDL_strlcpy(state->sutargs, argv[index], MAX_SUT_ARGS_LEN); + SDLTest_Log("SUT Arguments: %s", state->sutargs); + return 2; + } + else if(StrCaseCmpIgnoreHyphen("timeout", argv[index]) == 0) + { + int hr, min, sec; + index++; + if(!argv[index] || SDL_sscanf(argv[index], "%d:%d:%d", &hr, &min, &sec) != 3) + { + SDLTest_LogError("Arguments parsing error: Invalid argument for timeout."); + return -1; + } + state->timeout = (((hr * 60) + min) * 60 + sec) * 1000; + SDLTest_Log("Maximum Timeout for each SUT run: %d milliseconds", + state->timeout); + return 2; + } + else if(StrCaseCmpIgnoreHyphen("parameter-config", argv[index]) == 0) + { + index++; + if(!argv[index]) + { + SDLTest_LogError("Arguments parsing error: Invalid argument for parameter-config."); + return -1; + } + SDLTest_Log("SUT Parameters file: %s", argv[index]); + SDLVisualTest_FreeSUTConfig(&state->sut_config); + if(!SDLVisualTest_ParseSUTConfig(argv[index], &state->sut_config)) + { + SDLTest_LogError("Failed to parse SUT parameters file"); + return -1; + } + return 2; + } + else if(StrCaseCmpIgnoreHyphen("variator", argv[index]) == 0) + { + index++; + if(!argv[index]) + { + SDLTest_LogError("Arguments parsing error: Invalid argument for variator."); + return -1; + } + SDLTest_Log("Variator: %s", argv[index]); + if(SDL_strcasecmp("exhaustive", argv[index]) == 0) + state->variator_type = SDL_VARIATOR_EXHAUSTIVE; + else if(SDL_strcasecmp("random", argv[index]) == 0) + state->variator_type = SDL_VARIATOR_RANDOM; + else + { + SDLTest_LogError("Arguments parsing error: Invalid variator name."); + return -1; + } + return 2; + } + else if(StrCaseCmpIgnoreHyphen("num-variations", argv[index]) == 0) + { + index++; + if(!argv[index]) + { + SDLTest_LogError("Arguments parsing error: Invalid argument for num-variations."); + return -1; + } + state->num_variations = SDL_atoi(argv[index]); + SDLTest_Log("Number of variations to run: %d", state->num_variations); + if(state->num_variations <= 0) + { + SDLTest_LogError("Arguments parsing error: num-variations must be positive."); + return -1; + } + return 2; + } + else if(StrCaseCmpIgnoreHyphen("no-launch", argv[index]) == 0) + { + state->no_launch = SDL_TRUE; + SDLTest_Log("SUT will not be launched."); + return 1; + } + else if(StrCaseCmpIgnoreHyphen("action-config", argv[index]) == 0) + { + index++; + if(!argv[index]) + { + SDLTest_LogError("Arguments parsing error: invalid argument for action-config"); + return -1; + } + SDLTest_Log("Action Config file: %s", argv[index]); + SDLVisualTest_EmptyActionQueue(&state->action_queue); + if(!SDLVisualTest_ParseActionConfig(argv[index], &state->action_queue)) + { + SDLTest_LogError("SDLVisualTest_ParseActionConfig() failed"); + return -1; + } + return 2; + } + else if(StrCaseCmpIgnoreHyphen("config", argv[index]) == 0) + { + index++; + if(!argv[index]) + { + SDLTest_LogError("Arguments parsing error: invalid argument for config"); + return -1; + } + + /* do nothing, this option has already been handled */ + return 2; + } + return 0; +} + +/* TODO: Trailing/leading spaces and spaces between equals sign not supported. */ +static int +ParseConfig(const char* file, SDLVisualTest_HarnessState* state) +{ + SDL_RWops* rw; + SDLVisualTest_RWHelperBuffer buffer; + char line[MAX_CONFIG_LINE_LEN]; + + rw = SDL_RWFromFile(file, "r"); + if(!rw) + { + SDLTest_LogError("SDL_RWFromFile() failed"); + return 0; + } + + SDLVisualTest_RWHelperResetBuffer(&buffer); + while(SDLVisualTest_RWHelperReadLine(rw, line, MAX_CONFIG_LINE_LEN, + &buffer, '#')) + { + char** argv; + int i, num_params; + + /* count number of parameters and replace the trailing newline with 0 */ + num_params = 1; + for(i = 0; line[i]; i++) + { + if(line[i] == '=') + { + num_params = 2; + break; + } + } + + /* populate argv */ + argv = (char**)SDL_malloc((num_params + 1) * sizeof(char*)); + if(!argv) + { + SDLTest_LogError("SDL_malloc() failed."); + SDL_RWclose(rw); + return 0; + } + + argv[num_params] = NULL; + for(i = 0; i < num_params; i++) + { + argv[i] = strtok(i == 0 ? line : NULL, "="); + } + + if(ParseArg(argv, 0, state) == -1) + { + SDLTest_LogError("ParseArg() failed"); + SDL_free(argv); + SDL_RWclose(rw); + return 0; + } + SDL_free(argv); + } + SDL_RWclose(rw); + + if(!state->sutapp[0]) + return 0; + return 1; +} + +int +SDLVisualTest_ParseHarnessArgs(char** argv, SDLVisualTest_HarnessState* state) +{ + int i; + + SDLTest_Log("Parsing commandline arguments.."); + + if(!argv) + { + SDLTest_LogError("argv is NULL"); + return 0; + } + if(!state) + { + SDLTest_LogError("state is NULL"); + return 0; + } + + /* initialize the state object */ + state->sutargs[0] = '\0'; + state->sutapp[0] = '\0'; + state->output_dir[0] = '\0'; + state->verify_dir[0] = '\0'; + state->timeout = DEFAULT_SUT_TIMEOUT; + SDL_memset(&state->sut_config, 0, sizeof(SDLVisualTest_SUTConfig)); + SDL_memset(&state->action_queue, 0, sizeof(SDLVisualTest_ActionQueue)); + state->variator_type = SDL_VARIATOR_RANDOM; + state->num_variations = -1; + state->no_launch = SDL_FALSE; + + /* parse config file if passed */ + for(i = 0; argv[i]; i++) + { + if(StrCaseCmpIgnoreHyphen("config", argv[i]) == 0) + { + if(!argv[i + 1]) + { + SDLTest_Log("Arguments parsing error: invalid argument for config."); + return 0; + } + if(!ParseConfig(argv[i + 1], state)) + { + SDLTest_LogError("ParseConfig() failed"); + return 0; + } + } + } + + /* parse the arguments */ + for(i = 0; argv[i];) + { + int consumed = ParseArg(argv, i, state); + if(consumed == -1 || consumed == 0) + { + SDLTest_LogError("ParseArg() failed"); + return 0; + } + i += consumed; + } + + if(state->variator_type == SDL_VARIATOR_RANDOM && state->num_variations == -1) + state->num_variations = 1; + + /* check to see if required options have been passed */ + if(!state->sutapp[0]) + { + SDLTest_LogError("sutapp must be passed."); + return 0; + } + if(!state->sutargs[0] && !state->sut_config.options) + { + SDLTest_LogError("Either sutargs or parameter-config must be passed."); + return 0; + } + if(!state->output_dir[0]) + { + SDL_strlcpy(state->output_dir, "./output", MAX_PATH_LEN); + } + if(!state->verify_dir[0]) + { + SDL_strlcpy(state->verify_dir, "./verify", MAX_PATH_LEN); + } + + return 1; +} + +void +SDLVisualTest_FreeHarnessState(SDLVisualTest_HarnessState* state) +{ + if(state) + { + SDLVisualTest_EmptyActionQueue(&state->action_queue); + SDLVisualTest_FreeSUTConfig(&state->sut_config); + } +} diff --git a/vs/sdl2/visualtest/src/linux/linux_process.c b/vs/sdl2/visualtest/src/linux/linux_process.c new file mode 100644 index 00000000000..b93f3407eeb --- /dev/null +++ b/vs/sdl2/visualtest/src/linux/linux_process.c @@ -0,0 +1,208 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file linux_process.c + * + * Source file for the process API on linux. + */ + + +#include +#include + +#include "SDL_visualtest_process.h" +#include "SDL_visualtest_harness_argparser.h" +#include "SDL_visualtest_parsehelper.h" + +#if defined(__LINUX__) +#include +#include +#include +#include + +static void +LogLastError(const char* str) +{ + const char* error = strerror(errno); + if(!str || !error) + return; + SDLTest_LogError("%s: %s", str, error); +} + +int +SDL_LaunchProcess(char* file, char* args, SDL_ProcessInfo* pinfo) +{ + pid_t pid; + char** argv; + + if(!file) + { + SDLTest_LogError("file argument cannot be NULL"); + return 0; + } + if(!pinfo) + { + SDLTest_LogError("pinfo cannot be NULL"); + return 0; + } + pid = fork(); + if(pid == -1) + { + LogLastError("fork() failed"); + return 0; + } + else if(pid == 0) + { + /* parse the arguments string */ + argv = SDLVisualTest_ParseArgsToArgv(args); + argv[0] = file; + execv(file, argv); + LogLastError("execv() failed"); + return 0; + } + else + { + pinfo->pid = pid; + return 1; + } + + /* never executed */ + return 0; +} + +int +SDL_GetProcessExitStatus(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps) +{ + int success, status; + if(!pinfo) + { + SDLTest_LogError("pinfo argument cannot be NULL"); + return 0; + } + if(!ps) + { + SDLTest_LogError("ps argument cannot be NULL"); + return 0; + } + success = waitpid(pinfo->pid, &status, WNOHANG); + if(success == -1) + { + LogLastError("waitpid() failed"); + return 0; + } + else if(success == 0) + { + ps->exit_status = -1; + ps->exit_success = 1; + } + else + { + ps->exit_success = WIFEXITED(status); + ps->exit_status = WEXITSTATUS(status); + } + return 1; +} + +int +SDL_IsProcessRunning(SDL_ProcessInfo* pinfo) +{ + int success; + + if(!pinfo) + { + SDLTest_LogError("pinfo cannot be NULL"); + return -1; + } + + success = kill(pinfo->pid, 0); + if(success == -1) + { + if(errno == ESRCH) /* process is not running */ + return 0; + else + { + LogLastError("kill() failed"); + return -1; + } + } + return 1; +} + +int +SDL_QuitProcess(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps) +{ + int success, status; + + if(!pinfo) + { + SDLTest_LogError("pinfo argument cannot be NULL"); + return 0; + } + if(!ps) + { + SDLTest_LogError("ps argument cannot be NULL"); + return 0; + } + + success = kill(pinfo->pid, SIGQUIT); + if(success == -1) + { + LogLastError("kill() failed"); + return 0; + } + + success = waitpid(pinfo->pid, &status, 0); + if(success == -1) + { + LogLastError("waitpid() failed"); + return 0; + } + + ps->exit_success = WIFEXITED(status); + ps->exit_status = WEXITSTATUS(status); + return 1; +} + +int +SDL_KillProcess(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps) +{ + int success, status; + + if(!pinfo) + { + SDLTest_LogError("pinfo argument cannot be NULL"); + return 0; + } + if(!ps) + { + SDLTest_LogError("ps argument cannot be NULL"); + return 0; + } + + success = kill(pinfo->pid, SIGKILL); + if(success == -1) + { + LogLastError("kill() failed"); + return 0; + } + success = waitpid(pinfo->pid, &status, 0); + if(success == -1) + { + LogLastError("waitpid() failed"); + return 0; + } + + ps->exit_success = WIFEXITED(status); + ps->exit_status = WEXITSTATUS(status); + return 1; +} + +/* each window of the process will have a screenshot taken. The file name will be + prefix-i.png for the i'th window. */ +int +SDLVisualTest_ScreenshotProcess(SDL_ProcessInfo* pinfo, char* prefix) +{ + SDLTest_LogError("Screenshot process not implemented"); + return 0; +} + +#endif diff --git a/vs/sdl2/visualtest/src/mischelper.c b/vs/sdl2/visualtest/src/mischelper.c new file mode 100644 index 00000000000..9684af6f6b4 --- /dev/null +++ b/vs/sdl2/visualtest/src/mischelper.c @@ -0,0 +1,28 @@ +/** + * \file mischelper.c + * + * Source file with miscellaneous helper functions. + */ + +#include + +void +SDLVisualTest_HashString(char* str, char hash[33]) +{ + SDLTest_Md5Context md5c; + int i; + + if(!str) + { + SDLTest_LogError("str argument cannot be NULL"); + return; + } + + SDLTest_Md5Init(&md5c); + SDLTest_Md5Update(&md5c, (unsigned char*)str, SDL_strlen(str)); + SDLTest_Md5Final(&md5c); + + /* convert the md5 hash to an array of hexadecimal digits */ + for(i = 0; i < 16; i++) + SDL_snprintf(hash + 2 * i, 33 - 2 * i, "%02x", (int)md5c.digest[i]); +} diff --git a/vs/sdl2/visualtest/src/parsehelper.c b/vs/sdl2/visualtest/src/parsehelper.c new file mode 100644 index 00000000000..9d38cb2f246 --- /dev/null +++ b/vs/sdl2/visualtest/src/parsehelper.c @@ -0,0 +1,231 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file parsehelper.c + * + * Source file with some helper functions for parsing strings. + */ + +#include +#include "SDL_visualtest_harness_argparser.h" + +/* this function uses a DFA to count the number of tokens in an agruments string. + state 0 is taken to be the start and end state. State 1 handles a double quoted + argument and state 2 handles unquoted arguments. */ +static int +CountTokens(char* args) +{ + int index, num_tokens; + int state; /* current state of the DFA */ + + if(!args) + return -1; + + index = 0; + state = 0; + num_tokens = 0; + while(args[index]) + { + char ch = args[index]; + switch(state) + { + case 0: + if(ch == '\"') + { + state = 1; + num_tokens++; + } + else if(!SDL_isspace(ch)) + { + state = 2; + num_tokens++; + } + break; + + case 1: + if(ch == '\"') + { + state = 0; + } + break; + + case 2: + if(SDL_isspace(ch)) + { + state = 0; + } + break; + } + index++; + } + return num_tokens; +} + +/* - size of tokens is num_tokens + 1 +- uses the same DFA used in CountTokens() to split args into an array of strings */ +static int +TokenizeHelper(char* str, char** tokens, int num_tokens, int max_token_len) +{ + int index, state, done, st_index, token_index; + + if(!str) + { + SDLTest_LogError("str argument cannot be NULL"); + return 0; + } + if(!tokens) + { + SDLTest_LogError("tokens argument cannot be NULL"); + return 0; + } + if(num_tokens <= 0) + { + SDLTest_LogError("num_tokens argument must be positive"); + return 0; + } + if(max_token_len <= 0) + { + SDLTest_LogError("max_token_len argument must be positive"); + return 0; + } + + /* allocate memory for the tokens */ + tokens[num_tokens] = NULL; + for(index = 0; index < num_tokens; index++) + { + tokens[index] = (char*)SDL_malloc(max_token_len); + if(!tokens[index]) + { + int i; + SDLTest_LogError("SDL_malloc() failed."); + for(i = 0; i < index; i++) + SDL_free(tokens[i]); + return 0; + } + tokens[index][0] = '\0'; + } + + /* copy the tokens into the array */ + st_index = 0; + index = 0; + token_index = 0; + state = 0; + done = 0; + while(!done) + { + char ch = str[index]; + switch(state) + { + case 0: + if(ch == '\"') + { + state = 1; + st_index = index + 1; + } + else if(!ch) + done = 1; + else if(ch && !SDL_isspace(ch)) + { + state = 2; + st_index = index; + } + break; + + case 1: + if(ch == '\"') + { + int i; + state = 0; + for(i = st_index; i < index; i++) + { + tokens[token_index][i - st_index] = str[i]; + } + tokens[token_index][i - st_index] = '\0'; + token_index++; + } + else if(!ch) + { + SDLTest_LogError("Parsing Error!"); + done = 1; + } + break; + + case 2: + if(!ch) + done = 1; + if(SDL_isspace(ch) || !ch) + { + int i; + state = 0; + for(i = st_index; i < index; i++) + { + tokens[token_index][i - st_index] = str[i]; + } + tokens[token_index][i - st_index] = '\0'; + token_index++; + } + break; + } + index++; + } + return 1; +} + +char** +SDLVisualTest_Tokenize(char* str, int max_token_len) +{ + int num_tokens; + char** tokens; + + if(!str) + { + SDLTest_LogError("str argument cannot be NULL"); + return NULL; + } + if(max_token_len <= 0) + { + SDLTest_LogError("max_token_len argument must be positive"); + return NULL; + } + + num_tokens = CountTokens(str); + if(num_tokens == 0) + return NULL; + + tokens = (char**)SDL_malloc(sizeof(char*) * (num_tokens + 1)); + if(!TokenizeHelper(str, tokens, num_tokens, max_token_len)) + { + SDLTest_LogError("TokenizeHelper() failed"); + SDL_free(tokens); + return NULL; + } + return tokens; +} + +char** +SDLVisualTest_ParseArgsToArgv(char* args) +{ + char** argv; + int num_tokens; + + num_tokens = CountTokens(args); + if(num_tokens == 0) + return NULL; + + /* allocate space for arguments */ + argv = (char**)SDL_malloc((num_tokens + 2) * sizeof(char*)); + if(!argv) + { + SDLTest_LogError("SDL_malloc() failed."); + return NULL; + } + + /* tokenize */ + if(!TokenizeHelper(args, argv + 1, num_tokens, MAX_SUT_ARGS_LEN)) + { + SDLTest_LogError("TokenizeHelper() failed"); + SDL_free(argv); + return NULL; + } + argv[0] = NULL; + return argv; +} diff --git a/vs/sdl2/visualtest/src/rwhelper.c b/vs/sdl2/visualtest/src/rwhelper.c new file mode 100644 index 00000000000..1ff9190ff85 --- /dev/null +++ b/vs/sdl2/visualtest/src/rwhelper.c @@ -0,0 +1,131 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file rwhelper.c + * + * Source file with some helper functions for working with SDL_RWops. + */ + +#include +#include "SDL_visualtest_sut_configparser.h" +#include "SDL_visualtest_rwhelper.h" + +void +SDLVisualTest_RWHelperResetBuffer(SDLVisualTest_RWHelperBuffer* buffer) +{ + if(!buffer) + { + SDLTest_LogError("buffer argument cannot be NULL"); + return; + } + buffer->buffer_pos = 0; + buffer->buffer_width = 0; +} + +char +SDLVisualTest_RWHelperReadChar(SDL_RWops* rw, SDLVisualTest_RWHelperBuffer* buffer) +{ + if(!rw || !buffer) + return 0; + /* if the buffer has been consumed, we fill it up again */ + if(buffer->buffer_pos == buffer->buffer_width) + { + buffer->buffer_width = SDL_RWread(rw, buffer->buffer, 1, RWOPS_BUFFER_LEN); + buffer->buffer_pos = 0; + if(buffer->buffer_width == 0) + return 0; + } + buffer->buffer_pos++; + return buffer->buffer[buffer->buffer_pos - 1]; +} + +/* does not include new lines in the buffer and adds a trailing null character */ +char* +SDLVisualTest_RWHelperReadLine(SDL_RWops* rw, char* str, int size, + SDLVisualTest_RWHelperBuffer* buffer, + char comment_char) +{ + char ch; + int current_pos, done; + if(!rw) + { + SDLTest_LogError("rw argument cannot be NULL"); + return NULL; + } + if(!str) + { + SDLTest_LogError("str argument cannot be NULL"); + return NULL; + } + if(!buffer) + { + SDLTest_LogError("buffer argument cannot be NULL"); + return NULL; + } + if(size <= 0) + { + SDLTest_LogError("size argument should be positive"); + return NULL; + } + + done = 0; + while(!done) + { + /* ignore leading whitespace */ + for(ch = SDLVisualTest_RWHelperReadChar(rw, buffer); ch && SDL_isspace(ch); + ch = SDLVisualTest_RWHelperReadChar(rw, buffer)); + + for(current_pos = 0; + ch && ch != '\n' && ch != '\r' && ch != comment_char; + current_pos++) + { + str[current_pos] = ch; + if(current_pos >= size - 2) + { + current_pos++; + break; + } + ch = SDLVisualTest_RWHelperReadChar(rw, buffer); + } + + done = 1; + if(ch == comment_char) /* discard all characters until the next line */ + { + do + { + ch = SDLVisualTest_RWHelperReadChar(rw, buffer); + }while(ch && ch != '\n' && ch != '\r'); + + if(current_pos == 0) + done = 0; + } + } + if(current_pos == 0) + return NULL; + + str[current_pos] = '\0'; + return str; +} + +/* Lines with all whitespace are ignored */ +int +SDLVisualTest_RWHelperCountNonEmptyLines(SDL_RWops* rw, + SDLVisualTest_RWHelperBuffer* buffer, + char comment_char) +{ + int num_lines = 0; + char str[MAX_SUTOPTION_LINE_LENGTH]; + if(!rw) + { + SDLTest_LogError("rw argument cannot be NULL"); + return -1; + } + if(!buffer) + { + SDLTest_LogError("buffer argument cannot be NULL"); + return -1; + } + while(SDLVisualTest_RWHelperReadLine(rw, str, MAX_SUTOPTION_LINE_LENGTH, + buffer, comment_char)) + num_lines++; + return num_lines; +} diff --git a/vs/sdl2/visualtest/src/screenshot.c b/vs/sdl2/visualtest/src/screenshot.c new file mode 100644 index 00000000000..be5e4df85bf --- /dev/null +++ b/vs/sdl2/visualtest/src/screenshot.c @@ -0,0 +1,136 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file screenshot.c + * + * Source file for the screenshot API. + */ + +#include "SDL_visualtest_mischelper.h" +#include + +int +SDLVisualTest_VerifyScreenshots(char* args, char* test_dir, char* verify_dir) +{ + int i, verify_len, return_code, test_len; + char hash[33]; + char* verify_path; /* path to the bmp file used for verification */ + char* test_path; /* path to the bmp file to be verified */ + SDL_RWops* rw; + SDL_Surface* verifybmp; + + return_code = 1; + + if(!args) + { + SDLTest_LogError("args argument cannot be NULL"); + return_code = -1; + goto verifyscreenshots_cleanup_generic; + } + if(!test_dir) + { + SDLTest_LogError("test_dir argument cannot be NULL"); + return_code = -1; + goto verifyscreenshots_cleanup_generic; + } + if(!verify_dir) + { + SDLTest_LogError("verify_dir argument cannot be NULL"); + return_code = -1; + goto verifyscreenshots_cleanup_generic; + } + + /* generate the MD5 hash */ + SDLVisualTest_HashString(args, hash); + + /* find the verification image */ + /* path_len + hash_len + some number of extra characters */ + verify_len = SDL_strlen(verify_dir) + 32 + 10; + verify_path = (char*)SDL_malloc(verify_len * sizeof(char)); + if(!verify_path) + { + SDLTest_LogError("SDL_malloc() failed"); + return_code = -1; + goto verifyscreenshots_cleanup_generic; + } + SDL_snprintf(verify_path, verify_len - 1, + "%s/%s.bmp", verify_dir, hash); + rw = SDL_RWFromFile(verify_path, "rb"); + if(!rw) + { + SDLTest_Log("Verification image does not exist." + " Please manually verify that the SUT is working correctly."); + return_code = 2; + goto verifyscreenshots_cleanup_verifypath; + } + + /* load the verification image */ + verifybmp = SDL_LoadBMP_RW(rw, 1); + if(!verifybmp) + { + SDLTest_LogError("SDL_LoadBMP_RW() failed"); + return_code = -1; + goto verifyscreenshots_cleanup_verifypath; + } + + /* load the test images and compare with the verification image */ + /* path_len + hash_len + some number of extra characters */ + test_len = SDL_strlen(test_dir) + 32 + 10; + test_path = (char*)SDL_malloc(test_len * sizeof(char)); + if(!test_path) + { + SDLTest_LogError("SDL_malloc() failed"); + return_code = -1; + goto verifyscreenshots_cleanup_verifybmp; + } + + for(i = 1; ; i++) + { + SDL_RWops* testrw; + SDL_Surface* testbmp; + + if(i == 1) + SDL_snprintf(test_path, test_len - 1, "%s/%s.bmp", test_dir, hash); + else + SDL_snprintf(test_path, test_len - 1, "%s/%s_%d.bmp", test_dir, hash, i); + testrw = SDL_RWFromFile(test_path, "rb"); + + /* we keep going until we've iterated through the screenshots each + SUT window */ + if(!testrw) + break; + + /* load the test screenshot */ + testbmp = SDL_LoadBMP_RW(testrw, 1); + if(!testbmp) + { + SDLTest_LogError("SDL_LoadBMP_RW() failed"); + return_code = -1; + goto verifyscreenshots_cleanup_verifybmp; + } + + /* compare with the verification image */ + if(SDLTest_CompareSurfaces(testbmp, verifybmp, 0) != 0) + { + return_code = 0; + SDL_FreeSurface(testbmp); + goto verifyscreenshots_cleanup_verifybmp; + } + + SDL_FreeSurface(testbmp); + } + + if(i == 1) + { + SDLTest_LogError("No verification images found"); + return_code = -1; + } + +verifyscreenshots_cleanup_verifybmp: + SDL_FreeSurface(verifybmp); + +verifyscreenshots_cleanup_verifypath: + SDL_free(verify_path); + +verifyscreenshots_cleanup_generic: + return return_code; +} diff --git a/vs/sdl2/visualtest/src/sut_configparser.c b/vs/sdl2/visualtest/src/sut_configparser.c new file mode 100644 index 00000000000..fa8c2d4bbd7 --- /dev/null +++ b/vs/sdl2/visualtest/src/sut_configparser.c @@ -0,0 +1,232 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file sut_configparser.c + * + * Source file for the parser for SUT config files. + */ + +#include +#include +#include +#include +#include "SDL_visualtest_sut_configparser.h" +#include "SDL_visualtest_parsehelper.h" +#include "SDL_visualtest_rwhelper.h" + +int +SDLVisualTest_ParseSUTConfig(char* file, SDLVisualTest_SUTConfig* config) +{ + char line[MAX_SUTOPTION_LINE_LENGTH]; + SDLVisualTest_RWHelperBuffer buffer; + char* token_ptr; + char* token_end; + int num_lines, i, token_len; + SDL_RWops* rw; + + if(!file) + { + SDLTest_LogError("file argument cannot be NULL"); + return 0; + } + if(!config) + { + SDLTest_LogError("config argument cannot be NULL"); + return 0; + } + + /* count the number of lines */ + rw = SDL_RWFromFile(file, "r"); + if(!rw) + { + SDLTest_LogError("SDL_RWFromFile() failed"); + return 0; + } + SDLVisualTest_RWHelperResetBuffer(&buffer); + num_lines = SDLVisualTest_RWHelperCountNonEmptyLines(rw, &buffer, '#'); + if(num_lines == -1) + return 0; + else if(num_lines == 0) + { + config->options = NULL; + config->num_options = 0; + SDL_RWclose(rw); + return 1; + } + + /* allocate memory */ + SDL_RWseek(rw, 0, RW_SEEK_SET); + SDLVisualTest_RWHelperResetBuffer(&buffer); + config->num_options = num_lines; + config->options = (SDLVisualTest_SUTOption*)SDL_malloc(num_lines * + sizeof(SDLVisualTest_SUTOption)); + if(!config->options) + { + SDLTest_LogError("SDL_malloc() failed"); + SDL_RWclose(rw); + return 0; + } + + /* actually parse the options */ + for(i = 0; i < num_lines; i++) + { + if(!SDLVisualTest_RWHelperReadLine(rw, line, MAX_SUTOPTION_LINE_LENGTH, + &buffer, '#')) + { + SDLTest_LogError("SDLVisualTest_RWHelperReadLine() failed"); + SDL_free(config->options); + SDL_RWclose(rw); + return 0; + } + + /* parse name */ + token_ptr = strtok(line, ", "); + if(!token_ptr) + { + SDLTest_LogError("Could not parse line %d", i + 1); + SDL_free(config->options); + SDL_RWclose(rw); + return 0; + } + token_len = SDL_strlen(token_ptr) + 1; + SDL_strlcpy(config->options[i].name, token_ptr, token_len); + + /* parse type */ + token_ptr = strtok(NULL, ", "); + if(!token_ptr) + { + SDLTest_LogError("Could not parse line %d", i + 1); + SDL_free(config->options); + SDL_RWclose(rw); + return 0; + } + if(SDL_strcmp(token_ptr, "string") == 0) + config->options[i].type = SDL_SUT_OPTIONTYPE_STRING; + else if(SDL_strcmp(token_ptr, "integer") == 0) + config->options[i].type = SDL_SUT_OPTIONTYPE_INT; + else if(SDL_strcmp(token_ptr, "enum") == 0) + config->options[i].type = SDL_SUT_OPTIONTYPE_ENUM; + else if(SDL_strcmp(token_ptr, "boolean") == 0) + config->options[i].type = SDL_SUT_OPTIONTYPE_BOOL; + else + { + SDLTest_LogError("Could not parse type token at line %d", i + 1); + SDL_free(config->options); + SDL_RWclose(rw); + return 0; + } + + /* parse values */ + token_ptr = strtok(NULL, "]"); + if(!token_ptr) + { + SDLTest_LogError("Could not parse line %d", i + 1); + SDL_free(config->options); + SDL_RWclose(rw); + return 0; + } + token_ptr = SDL_strchr(token_ptr, '['); + if(!token_ptr) + { + SDLTest_LogError("Could not parse enum token at line %d", i + 1); + SDL_free(config->options); + SDL_RWclose(rw); + return 0; + } + token_ptr++; + if(config->options[i].type == SDL_SUT_OPTIONTYPE_INT) + { + if(SDL_sscanf(token_ptr, "%d %d", &config->options[i].data.range.min, + &config->options[i].data.range.max) != 2) + { + config->options[i].data.range.min = INT_MIN; + config->options[i].data.range.max = INT_MAX; + } + } + else if(config->options[i].type == SDL_SUT_OPTIONTYPE_ENUM) + { + config->options[i].data.enum_values = SDLVisualTest_Tokenize(token_ptr, + MAX_SUTOPTION_ENUMVAL_LEN); + if(!config->options[i].data.enum_values) + { + SDLTest_LogError("Could not parse enum token at line %d", i + 1); + SDL_free(config->options); + SDL_RWclose(rw); + return 0; + } + } + + /* parse required */ + token_ptr = strtok(NULL, ", "); + if(!token_ptr) + { + SDLTest_LogError("Could not parse line %d", i + 1); + SDL_free(config->options); + SDL_RWclose(rw); + return 0; + } + + if(SDL_strcmp(token_ptr, "true") == 0) + config->options[i].required = SDL_TRUE; + else if(SDL_strcmp(token_ptr, "false") == 0) + config->options[i].required = SDL_FALSE; + else + { + SDLTest_LogError("Could not parse required token at line %d", i + 1); + SDL_free(config->options); + SDL_RWclose(rw); + return 0; + } + + /* parse categories */ + token_ptr = strtok(NULL, ","); + if(!token_ptr) + { + SDLTest_LogError("Could not parse line %d", i + 1); + SDL_free(config->options); + SDL_RWclose(rw); + return 0; + } + token_ptr = SDL_strchr(token_ptr, '['); + if(!token_ptr) + { + SDLTest_LogError("Could not parse enum token at line %d", i + 1); + SDL_free(config->options); + SDL_RWclose(rw); + return 0; + } + token_ptr++; + token_end = SDL_strchr(token_ptr, ']'); + *token_end = '\0'; + if(!token_end) + { + SDLTest_LogError("Could not parse enum token at line %d", i + 1); + SDL_free(config->options); + SDL_RWclose(rw); + return 0; + } + config->options[i].categories = SDLVisualTest_Tokenize(token_ptr, + MAX_SUTOPTION_CATEGORY_LEN); + } + SDL_RWclose(rw); + return 1; +} + +void +SDLVisualTest_FreeSUTConfig(SDLVisualTest_SUTConfig* config) +{ + if(config && config->options) + { + SDLVisualTest_SUTOption* option; + for(option = config->options; + option != config->options + config->num_options; option++) + { + if(option->categories) + SDL_free(option->categories); + if(option->type == SDL_SUT_OPTIONTYPE_ENUM && option->data.enum_values) + SDL_free(option->data.enum_values); + } + SDL_free(config->options); + config->options = NULL; + config->num_options = 0; + } +} diff --git a/vs/sdl2/visualtest/src/testharness.c b/vs/sdl2/visualtest/src/testharness.c new file mode 100644 index 00000000000..db3ca55b287 --- /dev/null +++ b/vs/sdl2/visualtest/src/testharness.c @@ -0,0 +1,532 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file testharness.c + * + * Source file for the test harness. + */ + +#include +#include +#include +#include +#include "SDL_visualtest_harness_argparser.h" +#include "SDL_visualtest_process.h" +#include "SDL_visualtest_variators.h" +#include "SDL_visualtest_screenshot.h" +#include "SDL_visualtest_mischelper.h" + +#if defined(__WIN32__) && !defined(__CYGWIN__) +#include +#elif defined(__WIN32__) && defined(__CYGWIN__) +#include +#elif defined(__LINUX__) +#include +#include +#include +#else +#error "Unsupported platform" +#endif + +/** Code for the user event triggered when a new action is to be executed */ +#define ACTION_TIMER_EVENT 0 +/** Code for the user event triggered when the maximum timeout is reached */ +#define KILL_TIMER_EVENT 1 +/** FPS value used for delays in the action loop */ +#define ACTION_LOOP_FPS 10 + +/** Value returned by RunSUTAndTest() when the test has passed */ +#define TEST_PASSED 1 +/** Value returned by RunSUTAndTest() when the test has failed */ +#define TEST_FAILED 0 +/** Value returned by RunSUTAndTest() on a fatal error */ +#define TEST_ERROR -1 + +static SDL_ProcessInfo pinfo; +static SDL_ProcessExitStatus sut_exitstatus; +static SDLVisualTest_HarnessState state; +static SDLVisualTest_Variator variator; +static SDLVisualTest_ActionNode* current; /* the current action being performed */ +static SDL_TimerID action_timer, kill_timer; + +/* returns a char* to be passed as the format argument of a printf-style function. */ +static const char* +usage(void) +{ + return "Usage: \n%s --sutapp xyz" + " [--sutargs abc | --parameter-config xyz.parameters" + " [--variator exhaustive|random]" + " [--num-variations N] [--no-launch]] [--timeout hh:mm:ss]" + " [--action-config xyz.actions]" + " [--output-dir /path/to/output]" + " [--verify-dir /path/to/verify]" + " or --config app.config"; +} + +/* register Ctrl+C handlers */ +#if defined(__LINUX__) || defined(__CYGWIN__) +static void +CtrlCHandlerCallback(int signum) +{ + SDL_Event event; + SDLTest_Log("Ctrl+C received"); + event.type = SDL_QUIT; + SDL_PushEvent(&event); +} +#endif + +static Uint32 +ActionTimerCallback(Uint32 interval, void* param) +{ + SDL_Event event; + SDL_UserEvent userevent; + Uint32 next_action_time; + + /* push an event to handle the action */ + SDL_zero(userevent); + userevent.type = SDL_USEREVENT; + userevent.code = ACTION_TIMER_EVENT; + userevent.data1 = ¤t->action; + + event.type = SDL_USEREVENT; + event.user = userevent; + SDL_PushEvent(&event); + + /* calculate the new interval and return it */ + if(current->next) + next_action_time = current->next->action.time - current->action.time; + else + { + next_action_time = 0; + action_timer = 0; + } + + current = current->next; + return next_action_time; +} + +static Uint32 +KillTimerCallback(Uint32 interval, void* param) +{ + SDL_Event event; + SDL_UserEvent userevent; + + SDL_zero(userevent); + userevent.type = SDL_USEREVENT; + userevent.code = KILL_TIMER_EVENT; + + event.type = SDL_USEREVENT; + event.user = userevent; + SDL_PushEvent(&event); + + kill_timer = 0; + return 0; +} + +static int +ProcessAction(SDLVisualTest_Action* action, int* sut_running, char* args) +{ + if(!action || !sut_running) + return TEST_ERROR; + + switch(action->type) + { + case SDL_ACTION_KILL: + SDLTest_Log("Action: Kill SUT"); + if(SDL_IsProcessRunning(&pinfo) == 1 && + !SDL_KillProcess(&pinfo, &sut_exitstatus)) + { + SDLTest_LogError("SDL_KillProcess() failed"); + return TEST_ERROR; + } + *sut_running = 0; + break; + + case SDL_ACTION_QUIT: + SDLTest_Log("Action: Quit SUT"); + if(SDL_IsProcessRunning(&pinfo) == 1 && + !SDL_QuitProcess(&pinfo, &sut_exitstatus)) + { + SDLTest_LogError("SDL_QuitProcess() failed"); + return TEST_FAILED; + } + *sut_running = 0; + break; + + case SDL_ACTION_LAUNCH: + { + char* path; + char* args; + SDL_ProcessInfo action_process; + SDL_ProcessExitStatus ps; + + path = action->extra.process.path; + args = action->extra.process.args; + if(args) + { + SDLTest_Log("Action: Launch process: %s with arguments: %s", + path, args); + } + else + SDLTest_Log("Action: Launch process: %s", path); + if(!SDL_LaunchProcess(path, args, &action_process)) + { + SDLTest_LogError("SDL_LaunchProcess() failed"); + return TEST_ERROR; + } + + /* small delay so that the process can do its job */ + SDL_Delay(1000); + + if(SDL_IsProcessRunning(&action_process) > 0) + { + SDLTest_LogError("Process %s took too long too complete." + " Force killing...", action->extra.process.path); + if(!SDL_KillProcess(&action_process, &ps)) + { + SDLTest_LogError("SDL_KillProcess() failed"); + return TEST_ERROR; + } + } + } + break; + + case SDL_ACTION_SCREENSHOT: + { + char path[MAX_PATH_LEN], hash[33]; + + SDLTest_Log("Action: Take screenshot"); + /* can't take a screenshot if the SUT isn't running */ + if(SDL_IsProcessRunning(&pinfo) != 1) + { + SDLTest_LogError("SUT has quit."); + *sut_running = 0; + return TEST_FAILED; + } + + /* file name for the screenshot image */ + SDLVisualTest_HashString(args, hash); + SDL_snprintf(path, MAX_PATH_LEN, "%s/%s", state.output_dir, hash); + if(!SDLVisualTest_ScreenshotProcess(&pinfo, path)) + { + SDLTest_LogError("SDLVisualTest_ScreenshotProcess() failed"); + return TEST_ERROR; + } + } + break; + + case SDL_ACTION_VERIFY: + { + int ret; + + SDLTest_Log("Action: Verify screenshot"); + ret = SDLVisualTest_VerifyScreenshots(args, state.output_dir, + state.verify_dir); + + if(ret == -1) + { + SDLTest_LogError("SDLVisualTest_VerifyScreenshots() failed"); + return TEST_ERROR; + } + else if(ret == 0) + { + SDLTest_Log("Verification failed: Images were not equal."); + return TEST_FAILED; + } + else if(ret == 1) + SDLTest_Log("Verification successful."); + else + { + SDLTest_Log("Verfication skipped."); + return TEST_FAILED; + } + } + break; + + default: + SDLTest_LogError("Invalid action type"); + return TEST_ERROR; + break; + } + + return TEST_PASSED; +} + +static int +RunSUTAndTest(char* sutargs, int variation_num) +{ + int success, sut_running, return_code; + char hash[33]; + SDL_Event event; + + return_code = TEST_PASSED; + + if(!sutargs) + { + SDLTest_LogError("sutargs argument cannot be NULL"); + return_code = TEST_ERROR; + goto runsutandtest_cleanup_generic; + } + + SDLVisualTest_HashString(sutargs, hash); + SDLTest_Log("Hash: %s", hash); + + success = SDL_LaunchProcess(state.sutapp, sutargs, &pinfo); + if(!success) + { + SDLTest_Log("Could not launch SUT."); + return_code = TEST_ERROR; + goto runsutandtest_cleanup_generic; + } + SDLTest_Log("SUT launch successful."); + SDLTest_Log("Process will be killed in %d milliseconds", state.timeout); + sut_running = 1; + + /* launch the timers */ + SDLTest_Log("Performing actions.."); + current = state.action_queue.front; + action_timer = 0; + kill_timer = 0; + if(current) + { + action_timer = SDL_AddTimer(current->action.time, ActionTimerCallback, NULL); + if(!action_timer) + { + SDLTest_LogError("SDL_AddTimer() failed"); + return_code = TEST_ERROR; + goto runsutandtest_cleanup_timer; + } + } + kill_timer = SDL_AddTimer(state.timeout, KillTimerCallback, NULL); + if(!kill_timer) + { + SDLTest_LogError("SDL_AddTimer() failed"); + return_code = TEST_ERROR; + goto runsutandtest_cleanup_timer; + } + + /* the timer stops running if the actions queue is empty, and the + SUT stops running if it crashes or if we encounter a KILL/QUIT action */ + while(sut_running) + { + /* process the actions by using an event queue */ + while(SDL_PollEvent(&event)) + { + if(event.type == SDL_USEREVENT) + { + if(event.user.code == ACTION_TIMER_EVENT) + { + SDLVisualTest_Action* action; + + action = (SDLVisualTest_Action*)event.user.data1; + + switch(ProcessAction(action, &sut_running, sutargs)) + { + case TEST_PASSED: + break; + + case TEST_FAILED: + return_code = TEST_FAILED; + goto runsutandtest_cleanup_timer; + break; + + default: + SDLTest_LogError("ProcessAction() failed"); + return_code = TEST_ERROR; + goto runsutandtest_cleanup_timer; + } + } + else if(event.user.code == KILL_TIMER_EVENT) + { + SDLTest_LogError("Maximum timeout reached. Force killing.."); + return_code = TEST_FAILED; + goto runsutandtest_cleanup_timer; + } + } + else if(event.type == SDL_QUIT) + { + SDLTest_LogError("Received QUIT event. Testharness is quitting.."); + return_code = TEST_ERROR; + goto runsutandtest_cleanup_timer; + } + } + SDL_Delay(1000/ACTION_LOOP_FPS); + } + + SDLTest_Log("SUT exit code was: %d", sut_exitstatus.exit_status); + if(sut_exitstatus.exit_status == 0) + { + return_code = TEST_PASSED; + goto runsutandtest_cleanup_timer; + } + else + { + return_code = TEST_FAILED; + goto runsutandtest_cleanup_timer; + } + + return_code = TEST_ERROR; + goto runsutandtest_cleanup_generic; + +runsutandtest_cleanup_timer: + if(action_timer && !SDL_RemoveTimer(action_timer)) + { + SDLTest_Log("SDL_RemoveTimer() failed"); + return_code = TEST_ERROR; + } + + if(kill_timer && !SDL_RemoveTimer(kill_timer)) + { + SDLTest_Log("SDL_RemoveTimer() failed"); + return_code = TEST_ERROR; + } +/* runsutandtest_cleanup_process: */ + if(SDL_IsProcessRunning(&pinfo) && !SDL_KillProcess(&pinfo, &sut_exitstatus)) + { + SDLTest_Log("SDL_KillProcess() failed"); + return_code = TEST_ERROR; + } +runsutandtest_cleanup_generic: + return return_code; +} + +/** Entry point for testharness */ +int +main(int argc, char* argv[]) +{ + int i, passed, return_code, failed; + + /* freeing resources, linux style! */ + return_code = 0; + + if(argc < 2) + { + SDLTest_Log(usage(), argv[0]); + goto cleanup_generic; + } + +#if defined(__LINUX__) || defined(__CYGWIN__) + signal(SIGINT, CtrlCHandlerCallback); +#endif + + /* parse arguments */ + if(!SDLVisualTest_ParseHarnessArgs(argv + 1, &state)) + { + SDLTest_Log(usage(), argv[0]); + return_code = 1; + goto cleanup_generic; + } + SDLTest_Log("Parsed harness arguments successfully."); + + /* initialize SDL */ + if(SDL_Init(SDL_INIT_TIMER) == -1) + { + SDLTest_LogError("SDL_Init() failed."); + SDLVisualTest_FreeHarnessState(&state); + return_code = 1; + goto cleanup_harness_state; + } + + /* create an output directory if none exists */ +#if defined(__LINUX__) || defined(__CYGWIN__) + mkdir(state.output_dir, 0777); +#elif defined(__WIN32__) + _mkdir(state.output_dir); +#else +#error "Unsupported platform" +#endif + + /* test with sutargs */ + if(SDL_strlen(state.sutargs)) + { + SDLTest_Log("Running: %s %s", state.sutapp, state.sutargs); + if(!state.no_launch) + { + switch(RunSUTAndTest(state.sutargs, 0)) + { + case TEST_PASSED: + SDLTest_Log("Status: PASSED"); + break; + + case TEST_FAILED: + SDLTest_Log("Status: FAILED"); + break; + + case TEST_ERROR: + SDLTest_LogError("Some error occurred while testing."); + return_code = 1; + goto cleanup_sdl; + break; + } + } + } + + if(state.sut_config.num_options > 0) + { + const char* variator_name = (state.variator_type == SDL_VARIATOR_RANDOM) ? + "RANDOM" : "EXHAUSTIVE"; + if(state.num_variations > 0) + SDLTest_Log("Testing SUT with variator: %s for %d variations", + variator_name, state.num_variations); + else + SDLTest_Log("Testing SUT with variator: %s and ALL variations", + variator_name); + /* initialize the variator */ + if(!SDLVisualTest_InitVariator(&variator, &state.sut_config, + state.variator_type, 0)) + { + SDLTest_LogError("Could not initialize variator"); + return_code = 1; + goto cleanup_sdl; + } + + /* iterate through all the variations */ + passed = 0; + failed = 0; + for(i = 0; state.num_variations > 0 ? (i < state.num_variations) : 1; i++) + { + char* args = SDLVisualTest_GetNextVariation(&variator); + if(!args) + break; + SDLTest_Log("\nVariation number: %d\nArguments: %s", i + 1, args); + + if(!state.no_launch) + { + switch(RunSUTAndTest(args, i + 1)) + { + case TEST_PASSED: + SDLTest_Log("Status: PASSED"); + passed++; + break; + + case TEST_FAILED: + SDLTest_Log("Status: FAILED"); + failed++; + break; + + case TEST_ERROR: + SDLTest_LogError("Some error occurred while testing."); + goto cleanup_variator; + break; + } + } + } + if(!state.no_launch) + { + /* report stats */ + SDLTest_Log("Testing complete."); + SDLTest_Log("%d/%d tests passed.", passed, passed + failed); + } + goto cleanup_variator; + } + + goto cleanup_sdl; + +cleanup_variator: + SDLVisualTest_FreeVariator(&variator); +cleanup_sdl: + SDL_Quit(); +cleanup_harness_state: + SDLVisualTest_FreeHarnessState(&state); +cleanup_generic: + return return_code; +} diff --git a/vs/sdl2/visualtest/src/variator_common.c b/vs/sdl2/visualtest/src/variator_common.c new file mode 100644 index 00000000000..e8444b31758 --- /dev/null +++ b/vs/sdl2/visualtest/src/variator_common.c @@ -0,0 +1,225 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file variator_common.c + * + * Source file for some common functionality used by variators. + */ + +#include +#include "SDL_visualtest_variator_common.h" + +int +SDLVisualTest_NextValue(SDLVisualTest_SUTOptionValue* var, + SDLVisualTest_SUTOption* opt) +{ + if(!var) + { + SDLTest_LogError("var argument cannot be NULL"); + return -1; + } + if(!opt) + { + SDLTest_LogError("opt argument cannot be NULL"); + return -1; + } + + switch(opt->type) + { + case SDL_SUT_OPTIONTYPE_BOOL: + if(var->bool_value) + { + var->bool_value = SDL_FALSE; + return 1; + } + else + { + var->bool_value = SDL_TRUE; + return 0; + } + break; + + case SDL_SUT_OPTIONTYPE_ENUM: + var->enumerated.index++; + if(!opt->data.enum_values[var->enumerated.index]) + { + var->enumerated.index = 0; + return 1; + } + return 0; + break; + + case SDL_SUT_OPTIONTYPE_INT: + { + int increment = (opt->data.range.max - opt->data.range.min) / + SDL_SUT_INTEGER_OPTION_TEST_STEPS; + /* prevents infinite loop when rounding */ + if(increment == 0) + increment = 1; + var->integer.value += increment; + if(var->integer.value > opt->data.range.max) + { + var->integer.value = opt->data.range.min; + return 1; + } + return 0; + } + break; + + case SDL_SUT_OPTIONTYPE_STRING: + return 1; + break; + } + return -1; +} + +int +SDLVisualTest_MakeStrFromVariation(SDLVisualTest_Variation* variation, + SDLVisualTest_SUTConfig* config, + char* buffer, int size) +{ + int i, index; + SDLVisualTest_SUTOptionValue* vars; + SDLVisualTest_SUTOption* options; + if(!variation) + { + SDLTest_LogError("variation argument cannot be NULL"); + return 0; + } + if(!config) + { + SDLTest_LogError("config argument cannot be NULL"); + return 0; + } + if(!buffer) + { + SDLTest_LogError("buffer argument cannot be NULL"); + return 0; + } + if(size <= 0) + { + SDLTest_LogError("size argument should be positive"); + return 0; + } + + index = 0; + buffer[0] = '\0'; + options = config->options; + vars = variation->vars; + for(i = 0; i < variation->num_vars; i++) + { + int n, enum_index; + if(index >= size - 1) + { + SDLTest_LogError("String did not fit in buffer size"); + return 0; + } + switch(options[i].type) + { + case SDL_SUT_OPTIONTYPE_BOOL: + if(vars[i].bool_value) + { + n = SDL_snprintf(buffer + index, size - index, "%s ", + options[i].name); + if(n <= 0) + { + SDLTest_LogError("SDL_snprintf() failed"); + return 0; + } + index += n; + } + break; + + case SDL_SUT_OPTIONTYPE_ENUM: + if(vars[i].enumerated.on) + { + enum_index = vars[i].enumerated.index; + n = SDL_snprintf(buffer + index, size - index, "%s %s ", + options[i].name, options[i].data.enum_values[enum_index]); + index += n; + } + break; + + case SDL_SUT_OPTIONTYPE_INT: + if(vars[i].integer.on) + { + n = SDL_snprintf(buffer + index, size - index, "%s %d ", + options[i].name, vars[i].integer.value); + index += n; + } + break; + + case SDL_SUT_OPTIONTYPE_STRING: + if(vars[i].string.on) + { + n = SDL_snprintf(buffer + index, size - index, "%s %s ", + options[i].name, vars[i].string.value); + index += n; + } + break; + } + } + return 1; +} + +int +SDLVisualTest_InitVariation(SDLVisualTest_Variation* variation, + SDLVisualTest_SUTConfig* config) +{ + int i; + SDLVisualTest_SUTOptionValue* vars; + SDLVisualTest_SUTOption* options; + if(!variation) + { + SDLTest_LogError("variation argument cannot be NULL"); + return 0; + } + if(!config) + { + SDLTest_LogError("config argument cannot be NULL"); + return 0; + } + + /* initialize the first variation */ + if(config->num_options <= 0) + { + SDLTest_LogError("config->num_options must be positive"); + return 0; + } + variation->vars = (SDLVisualTest_SUTOptionValue*)SDL_malloc(config->num_options * + sizeof(SDLVisualTest_SUTOptionValue)); + if(!variation->vars) + { + SDLTest_LogError("SDL_malloc() failed"); + return 0; + } + variation->num_vars = config->num_options; + vars = variation->vars; + options = config->options; + for(i = 0; i < variation->num_vars; i++) + { + switch(options[i].type) + { + case SDL_SUT_OPTIONTYPE_BOOL: + vars[i].bool_value = SDL_FALSE; + break; + + case SDL_SUT_OPTIONTYPE_ENUM: + vars[i].enumerated.on = SDL_TRUE; + vars[i].enumerated.index = 0; + break; + + case SDL_SUT_OPTIONTYPE_INT: + { + vars[i].integer.on = SDL_TRUE; + vars[i].integer.value = options[i].data.range.min; + } + break; + + case SDL_SUT_OPTIONTYPE_STRING: + vars[i].string.on = SDL_TRUE; + vars[i].string.value = options[i].name; + break; + } + } + return 1; +} diff --git a/vs/sdl2/visualtest/src/variator_exhaustive.c b/vs/sdl2/visualtest/src/variator_exhaustive.c new file mode 100644 index 00000000000..1e6a79e0acf --- /dev/null +++ b/vs/sdl2/visualtest/src/variator_exhaustive.c @@ -0,0 +1,133 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file variator_exhaustive.c + * + * Source file for the variator that tests the SUT with all the different + * variations of input parameters that are valid. + */ + +#include +#include +#include "SDL_visualtest_sut_configparser.h" +#include "SDL_visualtest_exhaustive_variator.h" + +static int +NextVariation(SDLVisualTest_Variation* variation, + SDLVisualTest_SUTConfig* config) +{ + int i, carry; + if(!variation) + { + SDLTest_LogError("variation argument cannot be NULL"); + return -1; + } + if(!config) + { + SDLTest_LogError("config argument cannot be NULL"); + return -1; + } + + carry = 1; + for(i = 0; i < variation->num_vars; i++) + { + carry = SDLVisualTest_NextValue(&variation->vars[i], &config->options[i]); + if(carry != 1) + break; + } + + if(carry == 1) /* we're done, we've tried all possible variations */ + return 0; + if(carry == 0) + return 1; + + SDLTest_LogError("NextVariation() failed"); + return -1; +} + +int +SDLVisualTest_InitExhaustiveVariator(SDLVisualTest_ExhaustiveVariator* variator, + SDLVisualTest_SUTConfig* config) +{ + if(!variator) + { + SDLTest_LogError("variator argument cannot be NULL"); + return 0; + } + if(!config) + { + SDLTest_LogError("config argument cannot be NULL"); + return 0; + } + + SDLTest_FuzzerInit(time(NULL)); + + variator->config = *config; + variator->variation.num_vars = 0; + variator->variation.vars = NULL; + + return 1; +} + +/* TODO: Right now variations where an option is not specified at all are not + tested for. This can be implemented by switching the on attribute for integer, + enum and string options to true and false. */ +char* +SDLVisualTest_GetNextExhaustiveVariation(SDLVisualTest_ExhaustiveVariator* variator) +{ + int success; + if(!variator) + { + SDLTest_LogError("variator argument cannot be NULL"); + return NULL; + } + + if(!variator->variation.vars) /* the first time this function is called */ + { + success = SDLVisualTest_InitVariation(&variator->variation, + &variator->config); + if(!success) + { + SDLTest_LogError("SDLVisualTest_InitVariation() failed"); + return NULL; + } + success = SDLVisualTest_MakeStrFromVariation(&variator->variation, + &variator->config, variator->buffer, MAX_SUT_ARGS_LEN); + if(!success) + { + SDLTest_LogError("SDLVisualTest_MakeStrFromVariation() failed"); + return NULL; + } + return variator->buffer; + } + else + { + success = NextVariation(&variator->variation, &variator->config); + if(success == 1) + { + success = SDLVisualTest_MakeStrFromVariation(&variator->variation, + &variator->config, variator->buffer, MAX_SUT_ARGS_LEN); + if(!success) + { + SDLTest_LogError("SDLVisualTest_MakeStrFromVariation() failed"); + return NULL; + } + return variator->buffer; + } + else if(success == -1) + SDLTest_LogError("NextVariation() failed."); + return NULL; + } + return NULL; +} + +void +SDLVisualTest_FreeExhaustiveVariator(SDLVisualTest_ExhaustiveVariator* variator) +{ + if(!variator) + { + SDLTest_LogError("variator argument cannot be NULL"); + return; + } + SDL_free(variator->variation.vars); + variator->variation.vars = NULL; +} diff --git a/vs/sdl2/visualtest/src/variator_random.c b/vs/sdl2/visualtest/src/variator_random.c new file mode 100644 index 00000000000..4da4161e196 --- /dev/null +++ b/vs/sdl2/visualtest/src/variator_random.c @@ -0,0 +1,113 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file variator_random.c + * + * Source file for the variator that tests the SUT with random variations to the + * input parameters. + */ + +#include +#include +#include "SDL_visualtest_random_variator.h" + +int +SDLVisualTest_InitRandomVariator(SDLVisualTest_RandomVariator* variator, + SDLVisualTest_SUTConfig* config, Uint64 seed) +{ + if(!variator) + { + SDLTest_LogError("variator argument cannot be NULL"); + return 0; + } + if(!config) + { + SDLTest_LogError("config argument cannot be NULL"); + return 0; + } + + if(seed) + SDLTest_FuzzerInit(seed); + else + SDLTest_FuzzerInit(time(NULL)); + + variator->config = *config; + + if(!SDLVisualTest_InitVariation(&variator->variation, &variator->config)) + { + SDLTest_LogError("SDLVisualTest_InitVariation() failed"); + return 0; + } + + return 1; +} + +char* +SDLVisualTest_GetNextRandomVariation(SDLVisualTest_RandomVariator* variator) +{ + SDLVisualTest_SUTOptionValue* vars; + SDLVisualTest_SUTOption* options; + int i; + + if(!variator) + { + SDLTest_LogError("variator argument cannot be NULL"); + return NULL; + } + + /* to save typing */ + vars = variator->variation.vars; + options = variator->config.options; + + /* generate a random variation */ + for(i = 0; i < variator->variation.num_vars; i++) + { + switch(options[i].type) + { + case SDL_SUT_OPTIONTYPE_BOOL: + vars[i].bool_value = SDLTest_RandomIntegerInRange(0, 1) ? SDL_FALSE : + SDL_TRUE; + break; + + case SDL_SUT_OPTIONTYPE_ENUM: + { + int emx = 0; + while(options[i].data.enum_values[emx]) + emx++; + vars[i].enumerated.index = SDLTest_RandomIntegerInRange(0, emx - 1); + } + break; + + case SDL_SUT_OPTIONTYPE_INT: + vars[i].integer.value = SDLTest_RandomIntegerInRange( + options[i].data.range.min, + options[i].data.range.max); + break; + + case SDL_SUT_OPTIONTYPE_STRING: + // String values are left unchanged + break; + } + } + + /* convert variation to an arguments string */ + if(!SDLVisualTest_MakeStrFromVariation(&variator->variation, &variator->config, + variator->buffer, MAX_SUT_ARGS_LEN)) + { + SDLTest_LogError("SDLVisualTest_MakeStrFromVariation() failed"); + return NULL; + } + + return variator->buffer; +} + +void SDLVisualTest_FreeRandomVariator(SDLVisualTest_RandomVariator* variator) +{ + if(!variator) + { + SDLTest_LogError("variator argument cannot be NULL"); + return; + } + + SDL_free(variator->variation.vars); + variator->variation.vars = NULL; +} diff --git a/vs/sdl2/visualtest/src/variators.c b/vs/sdl2/visualtest/src/variators.c new file mode 100644 index 00000000000..e9485c6f633 --- /dev/null +++ b/vs/sdl2/visualtest/src/variators.c @@ -0,0 +1,95 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file variators.c + * + * Source file for the operations that act on variators. + */ + +#include +#include "SDL_visualtest_variators.h" + +int +SDLVisualTest_InitVariator(SDLVisualTest_Variator* variator, + SDLVisualTest_SUTConfig* config, + SDLVisualTest_VariatorType type, + Uint64 seed) +{ + if(!variator) + { + SDLTest_LogError("variator argument cannot be NULL"); + return 0; + } + if(!config) + { + SDLTest_LogError("config argument cannot be NULL"); + return 0; + } + + variator->type = type; + switch(type) + { + case SDL_VARIATOR_EXHAUSTIVE: + return SDLVisualTest_InitExhaustiveVariator(&variator->data.exhaustive, + config); + break; + + case SDL_VARIATOR_RANDOM: + return SDLVisualTest_InitRandomVariator(&variator->data.random, + config, seed); + break; + + default: + SDLTest_LogError("Invalid value for variator type"); + return 0; + } + return 0; +} + +char* +SDLVisualTest_GetNextVariation(SDLVisualTest_Variator* variator) +{ + if(!variator) + { + SDLTest_LogError("variator argument cannot be NULL"); + return NULL; + } + + switch(variator->type) + { + case SDL_VARIATOR_EXHAUSTIVE: + return SDLVisualTest_GetNextExhaustiveVariation(&variator->data.exhaustive); + break; + + case SDL_VARIATOR_RANDOM: + return SDLVisualTest_GetNextRandomVariation(&variator->data.random); + break; + + default: + SDLTest_LogError("Invalid value for variator type"); + return NULL; + } + return NULL; +} + +void SDLVisualTest_FreeVariator(SDLVisualTest_Variator* variator) +{ + if(!variator) + { + SDLTest_LogError("variator argument cannot be NULL"); + return; + } + + switch(variator->type) + { + case SDL_VARIATOR_EXHAUSTIVE: + SDLVisualTest_FreeExhaustiveVariator(&variator->data.exhaustive); + break; + + case SDL_VARIATOR_RANDOM: + SDLVisualTest_FreeRandomVariator(&variator->data.random); + break; + + default: + SDLTest_LogError("Invalid value for variator type"); + } +} diff --git a/vs/sdl2/visualtest/src/windows/windows_process.c b/vs/sdl2/visualtest/src/windows/windows_process.c new file mode 100644 index 00000000000..e7e265c7cbc --- /dev/null +++ b/vs/sdl2/visualtest/src/windows/windows_process.c @@ -0,0 +1,283 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file windows_process.c + * + * Source file for the process API on windows. + */ + +#include +#include +#include +#include + +#include "SDL_visualtest_process.h" + +#if defined(__WIN32__) + +void +LogLastError(const char* str) +{ + LPVOID buffer; + DWORD dw = GetLastError(); + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM| + FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&buffer, + 0, NULL); + SDLTest_LogError("%s: %s", str, (char*)buffer); + LocalFree(buffer); +} + +int +SDL_LaunchProcess(char* file, char* args, SDL_ProcessInfo* pinfo) +{ + BOOL success; + char* working_directory; + char* command_line; + int path_length, args_length; + STARTUPINFO sui = {0}; + sui.cb = sizeof(sui); + + if(!file) + { + SDLTest_LogError("Path to executable to launched cannot be NULL."); + return 0; + } + if(!pinfo) + { + SDLTest_LogError("pinfo cannot be NULL."); + return 0; + } + + /* get the working directory of the process being launched, so that + the process can load any resources it has in it's working directory */ + path_length = SDL_strlen(file); + if(path_length == 0) + { + SDLTest_LogError("Length of the file parameter is zero."); + return 0; + } + + working_directory = (char*)SDL_malloc(path_length + 1); + if(!working_directory) + { + SDLTest_LogError("Could not allocate working_directory - SDL_malloc() failed."); + return 0; + } + + SDL_memcpy(working_directory, file, path_length + 1); + PathRemoveFileSpec(working_directory); + if(SDL_strlen(working_directory) == 0) + { + SDL_free(working_directory); + working_directory = NULL; + } + + /* join the file path and the args string together */ + if(!args) + args = ""; + args_length = SDL_strlen(args); + command_line = (char*)SDL_malloc(path_length + args_length + 2); + if(!command_line) + { + SDLTest_LogError("Could not allocate command_line - SDL_malloc() failed."); + return 0; + } + SDL_memcpy(command_line, file, path_length); + command_line[path_length] = ' '; + SDL_memcpy(command_line + path_length + 1, args, args_length + 1); + + /* create the process */ + success = CreateProcess(NULL, command_line, NULL, NULL, FALSE, + NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, + NULL, working_directory, &sui, &pinfo->pi); + if(working_directory) + { + SDL_free(working_directory); + working_directory = NULL; + } + SDL_free(command_line); + if(!success) + { + LogLastError("CreateProcess() failed"); + return 0; + } + + return 1; +} + +int +SDL_GetProcessExitStatus(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps) +{ + DWORD exit_status; + BOOL success; + + if(!pinfo) + { + SDLTest_LogError("pinfo cannot be NULL"); + return 0; + } + if(!ps) + { + SDLTest_LogError("ps cannot be NULL"); + return 0; + } + + /* get the exit code */ + success = GetExitCodeProcess(pinfo->pi.hProcess, &exit_status); + if(!success) + { + LogLastError("GetExitCodeProcess() failed"); + return 0; + } + + if(exit_status == STILL_ACTIVE) + ps->exit_status = -1; + else + ps->exit_status = exit_status; + ps->exit_success = 1; + return 1; +} + + +int +SDL_IsProcessRunning(SDL_ProcessInfo* pinfo) +{ + DWORD exit_status; + BOOL success; + + if(!pinfo) + { + SDLTest_LogError("pinfo cannot be NULL"); + return -1; + } + + success = GetExitCodeProcess(pinfo->pi.hProcess, &exit_status); + if(!success) + { + LogLastError("GetExitCodeProcess() failed"); + return -1; + } + + if(exit_status == STILL_ACTIVE) + return 1; + return 0; +} + +static BOOL CALLBACK +CloseWindowCallback(HWND hwnd, LPARAM lparam) +{ + DWORD pid; + SDL_ProcessInfo* pinfo; + + pinfo = (SDL_ProcessInfo*)lparam; + + GetWindowThreadProcessId(hwnd, &pid); + if(pid == pinfo->pi.dwProcessId) + { + DWORD_PTR result; + if(!SendMessageTimeout(hwnd, WM_CLOSE, 0, 0, SMTO_BLOCK, + 1000, &result)) + { + if(GetLastError() != ERROR_TIMEOUT) + { + LogLastError("SendMessageTimeout() failed"); + return FALSE; + } + } + } + return TRUE; +} + +int +SDL_QuitProcess(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps) +{ + DWORD wait_result; + if(!pinfo) + { + SDLTest_LogError("pinfo argument cannot be NULL"); + return 0; + } + if(!ps) + { + SDLTest_LogError("ps argument cannot be NULL"); + return 0; + } + + /* enumerate through all the windows, trying to close each one */ + if(!EnumWindows(CloseWindowCallback, (LPARAM)pinfo)) + { + SDLTest_LogError("EnumWindows() failed"); + return 0; + } + + /* wait until the process terminates */ + wait_result = WaitForSingleObject(pinfo->pi.hProcess, 1000); + if(wait_result == WAIT_FAILED) + { + LogLastError("WaitForSingleObject() failed"); + return 0; + } + if(wait_result != WAIT_OBJECT_0) + { + SDLTest_LogError("Process did not quit."); + return 0; + } + + /* get the exit code */ + if(!SDL_GetProcessExitStatus(pinfo, ps)) + { + SDLTest_LogError("SDL_GetProcessExitStatus() failed"); + return 0; + } + + return 1; +} + +int +SDL_KillProcess(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps) +{ + BOOL success; + DWORD exit_status, wait_result; + + if(!pinfo) + { + SDLTest_LogError("pinfo argument cannot be NULL"); + return 0; + } + if(!ps) + { + SDLTest_LogError("ps argument cannot be NULL"); + return 0; + } + + /* initiate termination of the process */ + success = TerminateProcess(pinfo->pi.hProcess, 0); + if(!success) + { + LogLastError("TerminateProcess() failed"); + return 0; + } + + /* wait until the process terminates */ + wait_result = WaitForSingleObject(pinfo->pi.hProcess, INFINITE); + if(wait_result == WAIT_FAILED) + { + LogLastError("WaitForSingleObject() failed"); + return 0; + } + + /* get the exit code */ + success = GetExitCodeProcess(pinfo->pi.hProcess, &exit_status); + if(!success) + { + LogLastError("GetExitCodeProcess() failed"); + return 0; + } + + ps->exit_status = exit_status; + ps->exit_success = 1; + + return 1; +} + +#endif diff --git a/vs/sdl2/visualtest/src/windows/windows_screenshot.c b/vs/sdl2/visualtest/src/windows/windows_screenshot.c new file mode 100644 index 00000000000..d4ac7d3a1e1 --- /dev/null +++ b/vs/sdl2/visualtest/src/windows/windows_screenshot.c @@ -0,0 +1,349 @@ +/* See LICENSE.txt for the full license governing this code. */ +/** + * \file windows_screenshot.c + * + * Source file for the screenshot API on windows. + */ + +#include "SDL_visualtest_process.h" +#include +#include + +#if defined(__CYGWIN__) +#include +#endif + +#if defined(__WIN32__) +#include + +void LogLastError(const char* str); + +static int img_num; +static SDL_ProcessInfo screenshot_pinfo; + +/* Saves a bitmap to a file using hdc as a device context */ +static int +SaveBitmapToFile(HDC hdc, HBITMAP hbitmap, char* filename) +{ + BITMAP bitmap; + BITMAPFILEHEADER bfh; + BITMAPINFOHEADER bih; + DWORD bmpsize, bytes_written; + HANDLE hdib, hfile; + char* bmpdata; + int return_code = 1; + + if(!hdc) + { + SDLTest_LogError("hdc argument is NULL"); + return 0; + } + if(!hbitmap) + { + SDLTest_LogError("hbitmap argument is NULL"); + return 0; + } + if(!filename) + { + SDLTest_LogError("filename argument is NULL"); + return 0; + } + + if(!GetObject(hbitmap, sizeof(BITMAP), (void*)&bitmap)) + { + SDLTest_LogError("GetObject() failed"); + return_code = 0; + goto savebitmaptofile_cleanup_generic; + } + + bih.biSize = sizeof(BITMAPINFOHEADER); + bih.biWidth = bitmap.bmWidth; + bih.biHeight = bitmap.bmHeight; + bih.biPlanes = 1; + bih.biBitCount = 32; + bih.biCompression = BI_RGB; + bih.biSizeImage = 0; + bih.biXPelsPerMeter = 0; + bih.biYPelsPerMeter = 0; + bih.biClrUsed = 0; + bih.biClrImportant = 0; + + bmpsize = ((bitmap.bmWidth * bih.biBitCount + 31) / 32) * 4 * bitmap.bmHeight; + + hdib = GlobalAlloc(GHND, bmpsize); + if(!hdib) + { + LogLastError("GlobalAlloc() failed"); + return_code = 0; + goto savebitmaptofile_cleanup_generic; + } + bmpdata = (char*)GlobalLock(hdib); + if(!bmpdata) + { + LogLastError("GlobalLock() failed"); + return_code = 0; + goto savebitmaptofile_cleanup_hdib; + } + + if(!GetDIBits(hdc, hbitmap, 0, (UINT)bitmap.bmHeight, bmpdata, + (LPBITMAPINFO)&bih, DIB_RGB_COLORS)) + { + SDLTest_LogError("GetDIBits() failed"); + return_code = 0; + goto savebitmaptofile_cleanup_unlockhdib; + } + + hfile = CreateFile(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL, NULL); + if(hfile == INVALID_HANDLE_VALUE) + { + LogLastError("CreateFile()"); + return_code = 0; + goto savebitmaptofile_cleanup_unlockhdib; + } + bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); + bfh.bfSize = bmpsize + bfh.bfOffBits; + bfh.bfType = 0x4D42; + + bytes_written = 0; + if(!WriteFile(hfile, (void*)&bfh, sizeof(BITMAPFILEHEADER), &bytes_written, NULL) || + !WriteFile(hfile, (void*)&bih, sizeof(BITMAPINFOHEADER), &bytes_written, NULL) || + !WriteFile(hfile, (void*)bmpdata, bmpsize, &bytes_written, NULL)) + { + LogLastError("WriteFile() failed"); + return_code = 0; + goto savebitmaptofile_cleanup_hfile; + } + +savebitmaptofile_cleanup_hfile: + CloseHandle(hfile); + +/* make the screenshot file writable on cygwin, since it could be overwritten later */ +#if defined(__CYGWIN__) + if(chmod(filename, 0777) == -1) + { + SDLTest_LogError("chmod() failed"); + return_code = 0; + } +#endif + +savebitmaptofile_cleanup_unlockhdib: + GlobalUnlock(hdib); + +savebitmaptofile_cleanup_hdib: + GlobalFree(hdib); + +savebitmaptofile_cleanup_generic: + return return_code; +} + +/* Takes the screenshot of a window and saves it to a file. If only_client_area + is true, then only the client area of the window is considered */ +static int +ScreenshotWindow(HWND hwnd, char* filename, SDL_bool only_client_area) +{ + int width, height; + RECT dimensions; + HDC windowdc, capturedc; + HBITMAP capturebitmap; + HGDIOBJ select_success; + BOOL blt_success; + int return_code = 1; + + if(!filename) + { + SDLTest_LogError("filename argument cannot be NULL"); + return_code = 0; + goto screenshotwindow_cleanup_generic; + } + if(!hwnd) + { + SDLTest_LogError("hwnd argument cannot be NULL"); + return_code = 0; + goto screenshotwindow_cleanup_generic; + } + + if(!GetWindowRect(hwnd, &dimensions)) + { + LogLastError("GetWindowRect() failed"); + return_code = 0; + goto screenshotwindow_cleanup_generic; + } + + if(only_client_area) + { + RECT crect; + if(!GetClientRect(hwnd, &crect)) + { + SDLTest_LogError("GetClientRect() failed"); + return_code = 0; + goto screenshotwindow_cleanup_generic; + } + + width = crect.right; + height = crect.bottom; + windowdc = GetDC(hwnd); + if(!windowdc) + { + SDLTest_LogError("GetDC() failed"); + return_code = 0; + goto screenshotwindow_cleanup_generic; + } + } + else + { + width = dimensions.right - dimensions.left; + height = dimensions.bottom - dimensions.top; + windowdc = GetWindowDC(hwnd); + if(!windowdc) + { + SDLTest_LogError("GetWindowDC() failed"); + return_code = 0; + goto screenshotwindow_cleanup_generic; + } + } + + capturedc = CreateCompatibleDC(windowdc); + if(!capturedc) + { + SDLTest_LogError("CreateCompatibleDC() failed"); + return_code = 0; + goto screenshotwindow_cleanup_windowdc; + } + capturebitmap = CreateCompatibleBitmap(windowdc, width, height); + if(!capturebitmap) + { + SDLTest_LogError("CreateCompatibleBitmap() failed"); + return_code = 0; + goto screenshotwindow_cleanup_capturedc; + } + select_success = SelectObject(capturedc, capturebitmap); + if(!select_success || select_success == HGDI_ERROR) + { + SDLTest_LogError("SelectObject() failed"); + return_code = 0; + goto screenshotwindow_cleanup_capturebitmap; + } + blt_success = BitBlt(capturedc, 0, 0, width, height, windowdc, + 0, 0, SRCCOPY|CAPTUREBLT); + if(!blt_success) + { + LogLastError("BitBlt() failed"); + return_code = 0; + goto screenshotwindow_cleanup_capturebitmap; + } + + /* save bitmap as file */ + if(!SaveBitmapToFile(windowdc, capturebitmap, filename)) + { + SDLTest_LogError("SaveBitmapToFile() failed"); + return_code = 0; + goto screenshotwindow_cleanup_capturebitmap; + } + + /* Free resources */ + +screenshotwindow_cleanup_capturebitmap: + if(!DeleteObject(capturebitmap)) + { + SDLTest_LogError("DeleteObjectFailed"); + return_code = 0; + } + +screenshotwindow_cleanup_capturedc: + if(!DeleteDC(capturedc)) + { + SDLTest_LogError("DeleteDC() failed"); + return_code = 0; + } + +screenshotwindow_cleanup_windowdc: + if(!ReleaseDC(hwnd, windowdc)) + { + SDLTest_LogError("ReleaseDC() failed"); + return_code = 0; + } + +screenshotwindow_cleanup_generic: + return return_code; +} + +/* Takes the screenshot of the entire desktop and saves it to a file */ +int SDLVisualTest_ScreenshotDesktop(char* filename) +{ + HWND hwnd; + hwnd = GetDesktopWindow(); + return ScreenshotWindow(hwnd, filename, SDL_FALSE); +} + +/* take screenshot of a window and save it to a file */ +static BOOL CALLBACK +ScreenshotHwnd(HWND hwnd, LPARAM lparam) +{ + int len; + DWORD pid; + char* prefix; + char* filename; + + GetWindowThreadProcessId(hwnd, &pid); + if(pid != screenshot_pinfo.pi.dwProcessId) + return TRUE; + + if(!IsWindowVisible(hwnd)) + return TRUE; + + prefix = (char*)lparam; + len = SDL_strlen(prefix) + 100; + filename = (char*)SDL_malloc(len * sizeof(char)); + if(!filename) + { + SDLTest_LogError("SDL_malloc() failed"); + return FALSE; + } + + /* restore the window and bring it to the top */ + ShowWindowAsync(hwnd, SW_RESTORE); + /* restore is not instantaneous */ + SDL_Delay(500); + + /* take a screenshot of the client area */ + if(img_num == 1) + SDL_snprintf(filename, len, "%s.bmp", prefix); + else + SDL_snprintf(filename, len, "%s_%d.bmp", prefix, img_num); + img_num++; + ScreenshotWindow(hwnd, filename, SDL_TRUE); + + SDL_free(filename); + return TRUE; +} + + +/* each window of the process will have a screenshot taken. The file name will be + prefix-i.png for the i'th window. */ +int +SDLVisualTest_ScreenshotProcess(SDL_ProcessInfo* pinfo, char* prefix) +{ + if(!pinfo) + { + SDLTest_LogError("pinfo argument cannot be NULL"); + return 0; + } + if(!prefix) + { + SDLTest_LogError("prefix argument cannot be NULL"); + return 0; + } + + img_num = 1; + screenshot_pinfo = *pinfo; + if(!EnumWindows(ScreenshotHwnd, (LPARAM)prefix)) + { + SDLTest_LogError("EnumWindows() failed"); + return 0; + } + + return 1; +} + +#endif diff --git a/vs/sdl2/visualtest/testsprite2_sample.actions b/vs/sdl2/visualtest/testsprite2_sample.actions new file mode 100644 index 00000000000..658ca57f800 --- /dev/null +++ b/vs/sdl2/visualtest/testsprite2_sample.actions @@ -0,0 +1,3 @@ +00:00:02 SCREENSHOT # Take a screenshot of each window owned by the SUT process +00:00:05 VERIFY # Verify each screenshot taken with verification images +00:00:10 QUIT # Gracefully quit the SUT process \ No newline at end of file diff --git a/vs/sdl2/visualtest/testsprite2_sample.config b/vs/sdl2/visualtest/testsprite2_sample.config new file mode 100644 index 00000000000..d598f1eaead --- /dev/null +++ b/vs/sdl2/visualtest/testsprite2_sample.config @@ -0,0 +1,6 @@ +parameter-config=testsprite2_sample.parameters +num-variations=10 +variator=random +sutapp=testsprite2 +timeout=00:00:20 +action-config=testsprite2_sample.actions \ No newline at end of file diff --git a/vs/sdl2/visualtest/testsprite2_sample.parameters b/vs/sdl2/visualtest/testsprite2_sample.parameters new file mode 100644 index 00000000000..4c4c3905f4f --- /dev/null +++ b/vs/sdl2/visualtest/testsprite2_sample.parameters @@ -0,0 +1,29 @@ +# parameter name, type, value range, required, categories +--gldebug, boolean, [], false, [] +--info, enum, [all video modes render event], false, [] +--log, enum, [all error system audio video render input], false, [] +--display, integer, [1 5], false, [] +--fullscreen, boolean, [], false, [] +--fullscreen-desktop, boolean, [], false, [] +# --windows, integer, [1 5], false, [] # this option is not supported yet +--title, enum, [vartest bartest footest], false, [] +--icon, enum, [icon.bmp], false, [] +--center, boolean, [], false, [] +--position, enum, [300,300], false, [] +--geometry, enum, [500x500], false, [] +--min-geometry, enum, [100x100], false, [] +--max-geometry, enum, [600x600 700x700], false, [] +--logical, enum, [500x500 550x450], false, [] +--scale, integer, [1 5], false, [] +--depth, integer, [1 5], false, [] +--refresh, integer, [1 5], false, [] +--vsync, boolean, [], false, [] +--noframe, boolean, [], false, [] +--resize, boolean, [], false, [] +--minimize, boolean, [], false, [] +--maximize, boolean, [], false, [] +--grab, boolean, [], false, [mouse] +--blend, enum, [none blend add mod], false, [] +--cyclecolor, boolean, [], false, [] +--cyclealpha, boolean, [], false, [] +--iterations, integer, [10 100], false, [] \ No newline at end of file diff --git a/vs/sdl2/visualtest/unittest/testquit.actions b/vs/sdl2/visualtest/unittest/testquit.actions new file mode 100644 index 00000000000..fa688052006 --- /dev/null +++ b/vs/sdl2/visualtest/unittest/testquit.actions @@ -0,0 +1 @@ +00:00:05 QUIT \ No newline at end of file diff --git a/vs/sdl2/visualtest/unittest/testquit.c b/vs/sdl2/visualtest/unittest/testquit.c new file mode 100644 index 00000000000..04e3c5c5a92 --- /dev/null +++ b/vs/sdl2/visualtest/unittest/testquit.c @@ -0,0 +1,102 @@ +/* + Copyright (C) 2013 Apoorv Upreti + + 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. +*/ +/* Quits, hangs or crashes based on the command line options passed. */ + +#include +#include + +static SDLTest_CommonState *state; +static int exit_code; +static SDL_bool hang; +static SDL_bool crash; + +int +main(int argc, char** argv) +{ + int i, done; + SDL_Event event; + + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if(!state) + return 1; + + state->window_flags |= SDL_WINDOW_RESIZABLE; + + exit_code = 0; + hang = SDL_FALSE; + crash = SDL_FALSE; + + for(i = 1; i < argc; ) + { + int consumed; + consumed = SDLTest_CommonArg(state, i); + if(consumed == 0) + { + consumed = -1; + if(SDL_strcasecmp(argv[i], "--exit-code") == 0) + { + if(argv[i + 1]) + { + exit_code = SDL_atoi(argv[i + 1]); + consumed = 2; + } + } + else if(SDL_strcasecmp(argv[i], "--hang") == 0) + { + hang = SDL_TRUE; + consumed = 1; + } + else if(SDL_strcasecmp(argv[i], "--crash") == 0) + { + crash = SDL_TRUE; + consumed = 1; + } + } + + if(consumed < 0) + { + static const char *options[] = { "[--exit-code N]", "[--crash]", "[--hang]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + SDLTest_CommonQuit(state); + return 1; + } + i += consumed; + } + + if(!SDLTest_CommonInit(state)) + { + SDLTest_CommonQuit(state); + return 1; + } + + /* infinite loop to hang the process */ + while(hang) + SDL_Delay(10); + + /* dereference NULL pointer to crash process */ + if(crash) + { + int* p = NULL; + *p = 5; + } + + /* event loop */ + done = 0; + while(!done) + { + while(SDL_PollEvent(&event)) + SDLTest_CommonEvent(state, &event, &done); + SDL_Delay(10); + } + + return exit_code; +} diff --git a/vs/sdl2/visualtest/unittest/testquit.config b/vs/sdl2/visualtest/unittest/testquit.config new file mode 100644 index 00000000000..8c2d1bacf87 --- /dev/null +++ b/vs/sdl2/visualtest/unittest/testquit.config @@ -0,0 +1,5 @@ +sutconfig=testquit.parameters +action-config=testquit.actions +variator=exhaustive +sutapp=testquit +timeout=00:00:10 \ No newline at end of file diff --git a/vs/sdl2/visualtest/unittest/testquit.parameters b/vs/sdl2/visualtest/unittest/testquit.parameters new file mode 100644 index 00000000000..e1bb2fdb969 --- /dev/null +++ b/vs/sdl2/visualtest/unittest/testquit.parameters @@ -0,0 +1,3 @@ +--exit-code, integer, [-1 1], false, [] # The exit code returned by the executable +--crash, boolean, [], false, [] # Crashes the SUT executable +--hang, boolean, [], false, [] # Runs the SUT in the infinite loop and ignores all events \ No newline at end of file diff --git a/vs/sdl2/wayland-protocols/cursor-shape-v1.xml b/vs/sdl2/wayland-protocols/cursor-shape-v1.xml new file mode 100644 index 00000000000..56f6a1a65bf --- /dev/null +++ b/vs/sdl2/wayland-protocols/cursor-shape-v1.xml @@ -0,0 +1,147 @@ + + + + Copyright 2018 The Chromium Authors + Copyright 2023 Simon Ser + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + + This global offers an alternative, optional way to set cursor images. This + new way uses enumerated cursors instead of a wl_surface like + wl_pointer.set_cursor does. + + Warning! The protocol described in this file is currently in the testing + phase. Backward compatible changes may be added together with the + corresponding interface version bump. Backward incompatible changes can + only be done by creating a new major version of the extension. + + + + + Destroy the cursor shape manager. + + + + + + Obtain a wp_cursor_shape_device_v1 for a wl_pointer object. + + + + + + + + Obtain a wp_cursor_shape_device_v1 for a zwp_tablet_tool_v2 object. + + + + + + + + + This interface advertises the list of supported cursor shapes for a + device, and allows clients to set the cursor shape. + + + + + This enum describes cursor shapes. + + The names are taken from the CSS W3C specification: + https://w3c.github.io/csswg-drafts/css-ui/#cursor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Destroy the cursor shape device. + + The device cursor shape remains unchanged. + + + + + + Sets the device cursor to the specified shape. The compositor will + change the cursor image based on the specified shape. + + The cursor actually changes only if the input device focus is one of + the requesting client's surfaces. If any, the previous cursor image + (surface or shape) is replaced. + + The "shape" argument must be a valid enum entry, otherwise the + invalid_shape protocol error is raised. + + This is similar to the wl_pointer.set_cursor and + zwp_tablet_tool_v2.set_cursor requests, but this request accepts a + shape instead of contents in the form of a surface. Clients can mix + set_cursor and set_shape requests. + + The serial parameter must match the latest wl_pointer.enter or + zwp_tablet_tool_v2.proximity_in serial number sent to the client. + Otherwise the request will be ignored. + + + + + + diff --git a/vs/sdl2/wayland-protocols/xdg-shell.xml b/vs/sdl2/wayland-protocols/xdg-shell.xml index be64354da05..1caf6f10016 100644 --- a/vs/sdl2/wayland-protocols/xdg-shell.xml +++ b/vs/sdl2/wayland-protocols/xdg-shell.xml @@ -29,7 +29,7 @@ DEALINGS IN THE SOFTWARE. - + The xdg_wm_base interface is exposed as a global object enabling clients to turn their wl_surfaces into windows in a desktop environment. It @@ -50,6 +50,8 @@ summary="the client provided an invalid surface state"/> + @@ -58,7 +60,7 @@ Destroying a bound xdg_wm_base object while there are surfaces still alive created by this xdg_wm_base object instance is illegal - and will result in a protocol error. + and will result in a defunct_surfaces error. @@ -75,7 +77,9 @@ This creates an xdg_surface for the given surface. While xdg_surface itself is not a role, the corresponding surface may only be assigned - a role extending xdg_surface, such as xdg_toplevel or xdg_popup. + a role extending xdg_surface, such as xdg_toplevel or xdg_popup. It is + illegal to create an xdg_surface for a wl_surface which already has an + assigned role and this will result in a role error. This creates an xdg_surface for the given surface. An xdg_surface is used as basis to define a role to a given surface, such as xdg_toplevel @@ -92,7 +96,8 @@ A client must respond to a ping event with a pong request or - the client may be deemed unresponsive. See xdg_wm_base.ping. + the client may be deemed unresponsive. See xdg_wm_base.ping + and xdg_wm_base.error.unresponsive. @@ -106,7 +111,9 @@ Compositors can use this to determine if the client is still alive. It's unspecified what will happen if the client doesn't respond to the ping request, or in what timeframe. Clients should - try to respond in a reasonable amount of time. + try to respond in a reasonable amount of time. The “unresponsive” + error is provided for compositors that wish to disconnect unresponsive + clients. A compositor is free to ping in any way it wants, but a client must always respond to any xdg_wm_base object it created. @@ -115,7 +122,7 @@ - + The xdg_positioner provides a collection of rules for the placement of a child surface relative to a parent surface. Rules can be defined to ensure @@ -135,7 +142,7 @@ For an xdg_positioner object to be considered complete, it must have a non-zero size set by set_size, and a non-zero anchor rectangle set by set_anchor_rect. Passing an incomplete xdg_positioner object when - positioning a surface raises an error. + positioning a surface raises an invalid_positioner error. @@ -223,7 +230,8 @@ specified (e.g. 'bottom_right' or 'top_left'), then the child surface will be placed towards the specified gravity; otherwise, the child surface will be centered over the anchor point on any axis that had no - gravity specified. + gravity specified. If the gravity is not in the ‘gravity’ enum, an + invalid_input error is raised. @@ -336,7 +344,7 @@ The default adjustment is none. - @@ -389,7 +397,7 @@ - Set the serial of a xdg_surface.configure event this positioner will be + Set the serial of an xdg_surface.configure event this positioner will be used in response to. The compositor may use this information together with set_parent_size to determine what future state the popup should be constrained using. @@ -399,7 +407,7 @@ - + An interface that may be implemented by a wl_surface, for implementations that provide a desktop-style user interface. @@ -426,6 +434,14 @@ manipulate a buffer prior to the first xdg_surface.configure call must also be treated as errors. + After creating a role-specific object and setting it up (e.g. by sending + the title, app ID, size constraints, parent, etc), the client must + perform an initial commit without any buffer attached. The compositor + will reply with initial wl_surface state such as + wl_surface.preferred_buffer_scale followed by an xdg_surface.configure + event. The client must acknowledge it and is then allowed to attach a + buffer to map the surface. + Mapping an xdg_surface-based role surface is defined as making it possible for the surface to be shown by the compositor. Note that a mapped surface is not guaranteed to be visible once it is mapped. @@ -439,19 +455,30 @@ A newly-unmapped surface is considered to have met condition (1) out of the 3 required conditions for mapping a surface if its role surface - has not been destroyed. + has not been destroyed, i.e. the client must perform the initial commit + again before attaching a buffer. - - - + + + + + + Destroy the xdg_surface object. An xdg_surface must only be destroyed - after its role object has been destroyed. + after its role object has been destroyed, otherwise + a defunct_role_object error is raised. @@ -489,8 +516,7 @@ portions like drop-shadows which should be ignored for the purposes of aligning, placing and constraining windows. - The window geometry is double buffered, and will be applied at the - time wl_surface.commit of the corresponding wl_surface is called. + The window geometry is double-buffered state, see wl_surface.commit. When maintaining a position, the compositor should treat the (x, y) coordinate of the window geometry as the top left corner of the window. @@ -506,13 +532,22 @@ commit. This unset is meant for extremely simple clients. The arguments are given in the surface-local coordinate space of - the wl_surface associated with this xdg_surface. + the wl_surface associated with this xdg_surface, and may extend outside + of the wl_surface itself to mark parts of the subsurface tree as part of + the window geometry. - The width and height must be greater than zero. Setting an invalid size - will raise an error. When applied, the effective window geometry will be - the set window geometry clamped to the bounding rectangle of the - combined geometry of the surface of the xdg_surface and the associated + When applied, the effective window geometry will be the set window + geometry clamped to the bounding rectangle of the combined + geometry of the surface of the xdg_surface and the associated subsurfaces. + + The effective geometry will not be recalculated unless a new call to + set_window_geometry is done and the new pending surface state is + subsequently applied. + + The width and height of the effective window geometry must be + greater than zero. Setting an invalid size will raise an + invalid_size error. @@ -533,6 +568,8 @@ If the client receives multiple configure events before it can respond to one, it only has to ack the last configure event. + Acking a configure event that was never sent raises an invalid_serial + error. A client is not required to commit immediately after sending an ack_configure request - it may even ack_configure several times @@ -541,6 +578,17 @@ A client may send multiple ack_configure requests before committing, but only the last request sent before a commit indicates which configure event the client really is responding to. + + Sending an ack_configure request consumes the serial number sent with + the request, as well as serial numbers sent by all configure events + sent on this xdg_surface prior to the configure event referenced by + the committed serial. + + It is an error to issue multiple ack_configure requests referencing a + serial from the same configure event, or to issue an ack_configure + request referencing a serial from a configure event issued before the + event identified by the last ack_configure request for the same + xdg_surface. Doing so will raise an invalid_serial error. @@ -569,7 +617,7 @@ - + This interface defines an xdg_surface role which allows a surface to, among other things, set window-like properties such as maximize, @@ -577,11 +625,19 @@ id, and well as trigger user interactive operations such as interactive resize and move. + A xdg_toplevel by default is responsible for providing the full intended + visual representation of the toplevel, which depending on the window + state, may mean things like a title bar, window controls and drop shadow. + Unmapping an xdg_toplevel means that the surface cannot be shown by the compositor until it is explicitly mapped again. All active operations (e.g., move, resize) are canceled and all attributes (e.g. title, state, stacking, ...) are discarded for - an xdg_toplevel surface when it is unmapped. + an xdg_toplevel surface when it is unmapped. The xdg_toplevel returns to + the state it had right after xdg_surface.get_toplevel. The client + can re-map the toplevel by performing a commit without any buffer + attached, waiting for a configure event and handling it as usual (see + xdg_surface description). Attaching a null buffer to a toplevel unmaps the surface. @@ -593,24 +649,37 @@ + + + + + + Set the "parent" of this surface. This surface should be stacked above the parent surface and all other ancestor surfaces. - Parent windows should be set on dialogs, toolboxes, or other + Parent surfaces should be set on dialogs, toolboxes, or other "auxiliary" surfaces, so that the parent is raised when the dialog is raised. - Setting a null parent for a child window removes any parent-child - relationship for the child. Setting a null parent for a window which - currently has no parent is a no-op. + Setting a null parent for a child surface unsets its parent. Setting + a null parent for a surface which currently has no parent is a no-op. - If the parent is unmapped then its children are managed as - though the parent of the now-unmapped parent has become the - parent of this surface. If no parent exists for the now-unmapped - parent then the children are managed as though they have no - parent surface. + Only mapped surfaces can have child surfaces. Setting a parent which + is not mapped is equivalent to setting a null parent. If a surface + becomes unmapped, its children's parent is set to the parent of + the now-unmapped surface. If the now-unmapped surface has no parent, + its children's parent is unset. If the now-unmapped surface becomes + mapped again, its parent-child relationship is not restored. + + The parent toplevel must not be one of the child toplevel's + descendants, and the parent must be different from the child toplevel, + otherwise the invalid_parent protocol error is raised. @@ -652,7 +721,7 @@ application identifiers and how they relate to well-known D-Bus names and .desktop files. - [0] http://standards.freedesktop.org/desktop-entry-spec/ + [0] https://standards.freedesktop.org/desktop-entry-spec/ @@ -666,7 +735,8 @@ This request asks the compositor to pop up such a window menu at the given position, relative to the local surface coordinates of the parent surface. There are no guarantees as to what menu items - the window menu contains. + the window menu contains, or even if a window menu will be drawn + at all. This request must be used in response to some sort of user action like a button press, key press, or touch down event. @@ -742,12 +812,13 @@ guarantee that the device focus will return when the resize is completed. - The edges parameter specifies how the surface should be resized, - and is one of the values of the resize_edge enum. The compositor - may use this information to update the surface position for - example when dragging the top left corner. The compositor may also - use this information to adapt its behavior, e.g. choose an - appropriate cursor image. + The edges parameter specifies how the surface should be resized, and + is one of the values of the resize_edge enum. Values not matching + a variant of the enum will cause the invalid_resize_edge protocol error. + The compositor may use this information to update the surface position + for example when dragging the top left corner. The compositor may also + use this information to adapt its behavior, e.g. choose an appropriate + cursor image. @@ -761,13 +832,13 @@ configure event to ensure that both the client and the compositor setting the state can be synchronized. - States set in this way are double-buffered. They will get applied on - the next commit. + States set in this way are double-buffered, see wl_surface.commit. The surface is maximized. The window geometry specified in the configure - event must be obeyed by the client. + event must be obeyed by the client, or the xdg_wm_base.invalid_surface_state + error is raised. The client should draw without shadow or other decoration outside of the window geometry. @@ -798,27 +869,46 @@ - + The window is currently in a tiled layout and the left edge is considered to be adjacent to another part of the tiling grid. + + The client should draw without shadow or other decoration outside of + the window geometry on the left edge. - + The window is currently in a tiled layout and the right edge is considered to be adjacent to another part of the tiling grid. + + The client should draw without shadow or other decoration outside of + the window geometry on the right edge. - + The window is currently in a tiled layout and the top edge is considered to be adjacent to another part of the tiling grid. + + The client should draw without shadow or other decoration outside of + the window geometry on the top edge. - + The window is currently in a tiled layout and the bottom edge is considered to be adjacent to another part of the tiling grid. + + The client should draw without shadow or other decoration outside of + the window geometry on the bottom edge. + + + + + The surface is currently not ordinarily being repainted; for + example because its content is occluded by another window, or its + outputs are switched off due to screen locking. @@ -833,8 +923,7 @@ The width and height arguments are in window geometry coordinates. See xdg_surface.set_window_geometry. - Values set in this way are double-buffered. They will get applied - on the next commit. + Values set in this way are double-buffered, see wl_surface.commit. The compositor can use this information to allow or disallow different states like maximize or fullscreen and draw accurate @@ -854,11 +943,11 @@ request. Requesting a maximum size to be smaller than the minimum size of - a surface is illegal and will result in a protocol error. + a surface is illegal and will result in an invalid_size error. The width and height must be greater than or equal to zero. Using - strictly negative values for width and height will result in a - protocol error. + strictly negative values for width or height will result in a + invalid_size error. @@ -874,8 +963,7 @@ The width and height arguments are in window geometry coordinates. See xdg_surface.set_window_geometry. - Values set in this way are double-buffered. They will get applied - on the next commit. + Values set in this way are double-buffered, see wl_surface.commit. The compositor can use this information to allow or disallow different states like maximize or fullscreen and draw accurate @@ -895,11 +983,11 @@ request. Requesting a minimum size to be larger than the maximum size of - a surface is illegal and will result in a protocol error. + a surface is illegal and will result in an invalid_size error. The width and height must be greater than or equal to zero. Using strictly negative values for width and height will result in a - protocol error. + invalid_size error. @@ -1058,9 +1146,68 @@ a dialog to ask the user to save their data, etc. + + + + + + The configure_bounds event may be sent prior to a xdg_toplevel.configure + event to communicate the bounds a window geometry size is recommended + to constrain to. + + The passed width and height are in surface coordinate space. If width + and height are 0, it means bounds is unknown and equivalent to as if no + configure_bounds event was ever sent for this surface. + + The bounds can for example correspond to the size of a monitor excluding + any panels or other shell components, so that a surface isn't created in + a way that it cannot fit. + + The bounds may change at any point, and in such a case, a new + xdg_toplevel.configure_bounds will be sent, followed by + xdg_toplevel.configure and xdg_surface.configure. + + + + + + + + + + + + + + + + + This event advertises the capabilities supported by the compositor. If + a capability isn't supported, clients should hide or disable the UI + elements that expose this functionality. For instance, if the + compositor doesn't advertise support for minimized toplevels, a button + triggering the set_minimized request should not be displayed. + + The compositor will ignore requests it doesn't support. For instance, + a compositor which doesn't advertise support for minimized will ignore + set_minimized requests. + + Compositors must send this event once before the first + xdg_surface.configure event. When the capabilities change, compositors + must send this event again and then send an xdg_surface.configure + event. + + The configured state should not be applied immediately. See + xdg_surface.configure for details. + + The capabilities are sent as an array of 32-bit unsigned integers in + native endianness. + + + - + A popup surface is a short-lived, temporary surface. It can be used to implement for example menus, popovers, tooltips and other similar user @@ -1098,8 +1245,8 @@ This destroys the popup. Explicitly destroying the xdg_popup object will also dismiss the popup, and unmap the surface. - If this xdg_popup is not the "topmost" popup, a protocol error - will be sent. + If this xdg_popup is not the "topmost" popup, the + xdg_wm_base.not_the_topmost_popup protocol error will be sent. @@ -1131,10 +1278,6 @@ nested grabbing popup as well. When a compositor dismisses popups, it will follow the same dismissing order as required from the client. - The parent of a grabbing popup must either be another xdg_popup with an - active explicit grab, or an xdg_popup or xdg_toplevel, if there are no - explicit grabs already taken. - If the topmost grabbing popup is destroyed, the grab will be returned to the parent of the popup, if that parent previously had an explicit grab. @@ -1204,12 +1347,12 @@ If the popup is repositioned in response to a configure event for its parent, the client should send an xdg_positioner.set_parent_configure - and possibly a xdg_positioner.set_parent_size request to allow the + and possibly an xdg_positioner.set_parent_size request to allow the compositor to properly constrain the popup. If the popup is repositioned together with a parent that is being resized, but not in response to a configure event, the client should - send a xdg_positioner.set_parent_size request. + send an xdg_positioner.set_parent_size request. diff --git a/vs/sdl2/wayland-protocols/xdg-toplevel-icon-v1.xml b/vs/sdl2/wayland-protocols/xdg-toplevel-icon-v1.xml new file mode 100644 index 00000000000..fc409fef7c6 --- /dev/null +++ b/vs/sdl2/wayland-protocols/xdg-toplevel-icon-v1.xml @@ -0,0 +1,205 @@ + + + + + Copyright © 2023-2024 Matthias Klumpp + Copyright © 2024 David Edmundson + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + This protocol allows clients to set icons for their toplevel surfaces + either via the XDG icon stock (using an icon name), or from pixel data. + + A toplevel icon represents the individual toplevel (unlike the application + or launcher icon, which represents the application as a whole), and may be + shown in window switchers, window overviews and taskbars that list + individual windows. + + This document adheres to RFC 2119 when using words like "must", + "should", "may", etc. + + Warning! The protocol described in this file is currently in the testing + phase. Backward compatible changes may be added together with the + corresponding interface version bump. Backward incompatible changes can + only be done by creating a new major version of the extension. + + + + + This interface allows clients to create toplevel window icons and set + them on toplevel windows to be displayed to the user. + + + + + Destroy the toplevel icon manager. + This does not destroy objects created with the manager. + + + + + + Creates a new icon object. This icon can then be attached to a + xdg_toplevel via the 'set_icon' request. + + + + + + + This request assigns the icon 'icon' to 'toplevel', or clears the + toplevel icon if 'icon' was null. + This state is double-buffered and is applied on the next + wl_surface.commit of the toplevel. + + After making this call, the xdg_toplevel_icon_v1 provided as 'icon' + can be destroyed by the client without 'toplevel' losing its icon. + The xdg_toplevel_icon_v1 is immutable from this point, and any + future attempts to change it must raise the + 'xdg_toplevel_icon_v1.immutable' protocol error. + + The compositor must set the toplevel icon from either the pixel data + the icon provides, or by loading a stock icon using the icon name. + See the description of 'xdg_toplevel_icon_v1' for details. + + If 'icon' is set to null, the icon of the respective toplevel is reset + to its default icon (usually the icon of the application, derived from + its desktop-entry file, or a placeholder icon). + If this request is passed an icon with no pixel buffers or icon name + assigned, the icon must be reset just like if 'icon' was null. + + + + + + + + This event indicates an icon size the compositor prefers to be + available if the client has scalable icons and can render to any size. + + When the 'xdg_toplevel_icon_manager_v1' object is created, the + compositor may send one or more 'icon_size' events to describe the list + of preferred icon sizes. If the compositor has no size preference, it + may not send any 'icon_size' event, and it is up to the client to + decide a suitable icon size. + + A sequence of 'icon_size' events must be finished with a 'done' event. + If the compositor has no size preferences, it must still send the + 'done' event, without any preceding 'icon_size' events. + + + + + + + This event is sent after all 'icon_size' events have been sent. + + + + + + + This interface defines a toplevel icon. + An icon can have a name, and multiple buffers. + In order to be applied, the icon must have either a name, or at least + one buffer assigned. Applying an empty icon (with no buffer or name) to + a toplevel should reset its icon to the default icon. + + It is up to compositor policy whether to prefer using a buffer or loading + an icon via its name. See 'set_name' and 'add_buffer' for details. + + + + + + + + + + + Destroys the 'xdg_toplevel_icon_v1' object. + The icon must still remain set on every toplevel it was assigned to, + until the toplevel icon is reset explicitly. + + + + + + This request assigns an icon name to this icon. + Any previously set name is overridden. + + The compositor must resolve 'icon_name' according to the lookup rules + described in the XDG icon theme specification[1] using the + environment's current icon theme. + + If the compositor does not support icon names or cannot resolve + 'icon_name' according to the XDG icon theme specification it must + fall back to using pixel buffer data instead. + + If this request is made after the icon has been assigned to a toplevel + via 'set_icon', a 'immutable' error must be raised. + + [1]: https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html + + + + + + + This request adds pixel data supplied as wl_buffer to the icon. + + The client should add pixel data for all icon sizes and scales that + it can provide, or which are explicitly requested by the compositor + via 'icon_size' events on xdg_toplevel_icon_manager_v1. + + The wl_buffer supplying pixel data as 'buffer' must be backed by wl_shm + and must be a square (width and height being equal). + If any of these buffer requirements are not fulfilled, a 'invalid_buffer' + error must be raised. + + If this icon instance already has a buffer of the same size and scale + from a previous 'add_buffer' request, data from the last request + overrides the preexisting pixel data. + + The wl_buffer must be kept alive for as long as the xdg_toplevel_icon + it is associated with is not destroyed, otherwise a 'no_buffer' error + is raised. The buffer contents must not be modified after it was + assigned to the icon. As a result, the region of the wl_shm_pool's + backing storage used for the wl_buffer must not be modified after this + request is sent. The wl_buffer.release event is unused. + + If this request is made after the icon has been assigned to a toplevel + via 'set_icon', a 'immutable' error must be raised. + + + + + + diff --git a/vs/sdl2net/.github/fetch_sdl_vc.ps1 b/vs/sdl2net/.github/fetch_sdl_vc.ps1 new file mode 100644 index 00000000000..6a4e5d59a5c --- /dev/null +++ b/vs/sdl2net/.github/fetch_sdl_vc.ps1 @@ -0,0 +1,40 @@ +$ErrorActionPreference = "Stop" + +$project_root = "$psScriptRoot\.." +Write-Output "project_root: $project_root" + +$sdl2_version = "2.0.4" +$sdl2_zip = "SDL2-devel-$($sdl2_version)-VC.zip" + +$sdl2_url = "https://www.libsdl.org/release/$($sdl2_zip)" +$sdl2_dlpath = "$($Env:TEMP)\$sdl2_zip" + +$sdl2_bindir = "$($project_root)" +$sdl2_extractdir = "$($sdl2_bindir)\SDL2-$($sdl2_version)" +$sdl2_root_name = "SDL2-devel-VC" + +echo "sdl2_bindir: $sdl2_bindir" +echo "sdl2_extractdir: $sdl2_extractdir" +echo "sdl2_root_name: $sdl2_root_name" + +echo "Cleaning previous artifacts" +if (Test-Path $sdl2_extractdir) { + Remove-Item $sdl2_extractdir -Recurse -Force +} +if (Test-Path "$($sdl2_bindir)/$sdl2_root_name") { + Remove-Item "$($sdl2_bindir)/$sdl2_root_name" -Recurse -Force +} +if (Test-Path $sdl2_dlpath) { + Remove-Item $sdl2_dlpath -Force +} + +Write-Output "Downloading $sdl2_url" +Invoke-WebRequest -Uri $sdl2_url -OutFile $sdl2_dlpath + +Write-Output "Extracting archive" +Expand-Archive $sdl2_dlpath -DestinationPath $sdl2_bindir + +Write-Output "Setting up SDL2 folder" +Rename-Item $sdl2_extractdir $sdl2_root_name + +Write-Output "Done" diff --git a/vs/sdl2net/.github/workflows/main.yml b/vs/sdl2net/.github/workflows/main.yml new file mode 100644 index 00000000000..715dbcccd64 --- /dev/null +++ b/vs/sdl2net/.github/workflows/main.yml @@ -0,0 +1,159 @@ +name: Build + +on: [push, pull_request] + +jobs: + Build: + name: ${{ matrix.platform.name }} + runs-on: ${{ matrix.platform.os }} + + defaults: + run: + shell: ${{ matrix.platform.shell }} + + strategy: + fail-fast: false + matrix: + platform: + - { name: Windows (MSVC+CMake), os: windows-latest, shell: sh, cmake: '-GNinja', msvc: 1, shared: 1, static: 0 } + - { name: Windows (mingw32+autotools), os: windows-latest, shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, shared: 1, static: 1 } + - { name: Windows (mingw64+CMake), os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64, cmake: '-G "Ninja Multi-Config"', shared: 1, static: 0 } + - { name: Linux (autotools), os: ubuntu-20.04, shell: sh , shared: 1, static: 1 } + - { name: Linux (CMake), os: ubuntu-20.04, shell: sh, cmake: '-GNinja', shared: 1, static: 0 } + - { name: 'Linux (CMake, static)', os: ubuntu-20.04, shell: sh, cmake: '-DBUILD_SHARED_LIBS=OFF -GNinja', shared: 0, static: 1 } + - { name: macOS (autotools), os: macos-latest, shell: sh, shared: 1, static: 1 } + - { name: macOS (CMake), os: macos-latest, shell: sh, cmake: '-GNinja', shared: 1, static: 0 } + + steps: + - name: Set up MSYS2 + if: matrix.platform.shell == 'msys2 {0}' + uses: msys2/setup-msys2@v2 + with: + msystem: ${{ matrix.platform.msystem }} + install: >- + ${{ matrix.platform.msys-env }}-SDL2 + ${{ matrix.platform.msys-env }}-autotools + ${{ matrix.platform.msys-env }}-cmake + ${{ matrix.platform.msys-env }}-gcc + ${{ matrix.platform.msys-env }}-ninja + ${{ matrix.platform.msys-env }}-pkg-config + + - name: Setup macOS dependencies + if: runner.os == 'macOS' + run: | + brew install \ + autoconf \ + automake \ + ninja \ + pkg-config \ + sdl2 \ + ${NULL+} + + - name: Setup Linux dependencies + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get -y install \ + autoconf \ + automake \ + cmake \ + libsdl2-dev \ + ninja-build \ + pkg-config \ + ${NULL+} + + - uses: actions/checkout@v2 + + - name: Setup MSVC dependencies + if: "matrix.platform.msvc" + shell: pwsh + run: | + .github/fetch_sdl_vc.ps1 + echo "SDL2_DIR=$Env:GITHUB_WORKSPACE/SDL2-devel-VC" >> $Env:GITHUB_ENV + - name: Setup Ninja for MSVC + if: "matrix.platform.msvc" + uses: ashutoshvarma/setup-ninja@master + with: + version: 1.10.2 + - uses: ilammy/msvc-dev-cmd@v1 + if: "matrix.platform.msvc" + with: + arch: x64 + + - name: Check that versioning is consistent + # We only need to run this once: arbitrarily use the Linux/CMake build + if: "runner.os == 'Linux' && matrix.platform.cmake" + run: ./test-versioning.sh + + - name: Configure (CMake) + if: "matrix.platform.cmake" + run: | + set -eu + # FIXME: add -DSDL2NET_SAMPLES=ON when msys2 has SDL2test + cmake -S . \ + -B build-cmake \ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=prefix_cmake \ + ${{ matrix.platform.cmake }} + + - name: Build (CMake) + if: "matrix.platform.cmake" + run: cmake --build build-cmake/ --config Release --parallel --verbose + + - name: Install (CMake) + if: "matrix.platform.cmake" + run: | + set -eu + rm -rf prefix_cmake + cmake --install build-cmake/ --config Release --verbose + echo "SDL2_net_DIR=$(pwd)/prefix_cmake" >> $GITHUB_ENV + ( cd prefix_cmake; find . ) | LC_ALL=C sort -u + + - name: Configure (Autotools) + if: "! matrix.platform.cmake" + run: | + set -eu + rm -fr build-autotools + mkdir build-autotools + ./autogen.sh + set -- --prefix=$(pwd)/prefix_autotools + # mingw-w64-*-SDL2 doesn't have SDL_test, so only build this on Unix + if [ "${{ matrix.platform.shell }}" != 'sh' ]; then + set -- "$@" --disable-examples + fi + ( cd build-autotools && ../configure "$@" ) + + - name: Build (Autotools) + if: "! matrix.platform.cmake" + run: | + set -eu + parallel="$(getconf _NPROCESSORS_ONLN)" + make -j"${parallel}" -C build-autotools V=1 + + - name: Install (Autotools) + if: "! matrix.platform.cmake" + run: | + set -eu + curdir="$(pwd)" + parallel="$(getconf _NPROCESSORS_ONLN)" + rm -rf prefix_autotools + make -j"${parallel}" -C build-autotools install V=1 + echo "SDL2_net_DIR=$(pwd)/prefix_autotools" >> $GITHUB_ENV + ( cd prefix_autotools; find . ) | LC_ALL=C sort -u + + - name: Distcheck (Autotools) + if: "runner.os == 'Linux' && ! matrix.platform.cmake" + run: | + set -eu + parallel="$(getconf _NPROCESSORS_ONLN)" + make -j"${parallel}" -C build-autotools distcheck V=1 + + - name: Verify CMake configuration files + run: | + cmake -S cmake/test -B cmake_config_build \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH="${{ env.SDL2_net_DIR }};${{ env.SDL2_DIR }}" \ + -DTEST_SHARED=${{ matrix.platform.shared }} \ + -DTEST_STATIC=${{ matrix.platform.static }} + cmake --build cmake_config_build --verbose diff --git a/vs/sdl2net/.gitignore b/vs/sdl2net/.gitignore new file mode 100644 index 00000000000..9527eafad18 --- /dev/null +++ b/vs/sdl2net/.gitignore @@ -0,0 +1,85 @@ +autom4te* +config.cache +config.log +config.status +Makefile +libtool +.deps +.libs +*.so +*.so.* +*.dll +*.exe +*.lo +*.o +*.obj +*.res +*.lib +*.a +*.la +*.dSYM +*,e1f +*,ff8 +*.lnk +*.err +*.exp +*.map +*.orig +*~ +*.swp +*.tmp +*.rej +SDL2_net.pc +SDL2_net.spec +showinterfaces +chat +chatd +build +gen +Build +buildbot + +# for CMake +CMakeFiles/ +CMakeCache.txt +cmake_install.cmake +cmake_uninstall.cmake +SDL2ConfigVersion.cmake +.ninja_* +*.ninja +sdl2_net-config-version.cmake +sdl2_net-config.cmake + +# for CLion +.idea +cmake-build-* + +# for Xcode +*.mode1* +*.perspective* +*.pbxuser +(^|/)build($|/) +.DS_Store +xcuserdata +*.xcworkspace + +# for Visual C++ +.vs +Debug +Release +*.user +*.ncb +*.suo +*.sdf + +# for Android +android-project/local.properties + +# for Debian package +debian/*.debhelper.log +debian/*.substvars +debian/*.tar.gz +debian/.debhelper/ +debian/files +debian/libsdl*/ +debian/tmp/ diff --git a/vs/sdl2net/.wikiheaders-options b/vs/sdl2net/.wikiheaders-options new file mode 100644 index 00000000000..e2657e9ec9c --- /dev/null +++ b/vs/sdl2net/.wikiheaders-options @@ -0,0 +1,16 @@ +projectfullname = SDL_net +projectshortname = SDL_net +incsubdir = +wikisubdir = SDL_net +apiprefixregex = SDLNet_ +mainincludefname = SDL_net.h +versionfname = SDL_net.h +versionmajorregex = \A\#define\s+SDL_NET_MAJOR_VERSION\s+(\d+)\Z +versionminorregex = \A\#define\s+SDL_NET_MINOR_VERSION\s+(\d+)\Z +versionpatchregex = \A\#define\s+SDL_NET_PATCHLEVEL\s+(\d+)\Z +selectheaderregex = \ASDL_net\.h\Z +projecturl = https://libsdl.org/projects/SDL_net +wikiurl = https://wiki.libsdl.org/SDL_net +bugreporturl = https://github.com/libsdl-org/sdlwiki/issues/new +warn_about_missing = 1 +wikipreamble = (This function is part of SDL_net, a separate library from SDL.) diff --git a/vs/sdl2net/Android.mk b/vs/sdl2net/Android.mk new file mode 100644 index 00000000000..72cb31c6324 --- /dev/null +++ b/vs/sdl2net/Android.mk @@ -0,0 +1,16 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := SDL2_net + +LOCAL_C_INCLUDES := $(LOCAL_PATH) +LOCAL_CFLAGS := + +LOCAL_SRC_FILES := SDLnet.c SDLnetTCP.c SDLnetUDP.c SDLnetselect.c + +LOCAL_SHARED_LIBRARIES := SDL2 + +LOCAL_EXPORT_C_INCLUDES += $(LOCAL_C_INCLUDES) + +include $(BUILD_SHARED_LIBRARY) diff --git a/vs/sdl2net/CHANGES.txt b/vs/sdl2net/CHANGES.txt new file mode 100644 index 00000000000..66aa0c0ee3a --- /dev/null +++ b/vs/sdl2net/CHANGES.txt @@ -0,0 +1,57 @@ +2.2.0: + * Added support for building with CMake + +2.0.1: +Mārtiņš Možeiko - Fri Sep 27 23:26:33 2013 + * Fixed returning all IP addresses from SDLNet_GetLocalAddresses() on Windows + +2.0.0: +Sam Lantinga - Sat Jun 1 19:11:26 PDT 2013 + * Updated for SDL 2.0 release + +1.2.9: +Simeon Maxein - Mon Jul 2 08:02:57 EDT 2012 + * Made it possible to use SDL_net without SDL + +1.2.8: +Sam Lantinga - Sun Jan 15 01:39:35 EST 2012 + * Added the definition for INADDR_LOOPBACK +Sam Lantinga - Thu Jan 05 22:57:56 2012 -0500 + * Added an Xcode project for iOS +Sam Lantinga - Sat Dec 31 10:28:12 EST 2011 + * SDL_net is now under the zlib license +Sam Lantinga - Sun Nov 20 01:29:33 EST 2011 + * Added SDLNet_UDP_SetPacketLoss() to simulate random packet loss +Sam Lantinga - Fri Nov 04 04:52:12 2011 -0400 + * Added SDLNet_GetLocalAddresses() to query local interfaces +Sam Lantinga - Fri Nov 4 04:05:03 EDT 2011 + * Removed obsolete OpenTransport code +Sam Lantinga - Tue Mar 08 16:52:59 2011 -0800 + * Added Android.mk to build on the Android platform +Sam Lantinga - Sun Feb 27 10:00:53 PST 2011 + * Fixed to compile cleanly with g++ +C.W. Betts - Thu Feb 17 12:52:47 PST 2011 + * Fixed the code to use socklen_t where appropriate +Evan Nemerson - Thu Feb 17 12:47:13 PST 2011 + * Added pkg-config support +esigra - Mon Feb 16 20:59:55 PST 2009 + * Fixed C++ compilation with -Wold-style-cast +Matthew Mondor - Fri Jan 4 08:44:22 PST 2008 + * Enable multicast receiving on 224.0.0.1 on Windows (already worked on UNIX) + +1.2.7: +Joakim L. Gilje - Sat Jul 14 22:54:37 PDT 2007 + * Set server TCP sockets to blocking mode on Mac OS X, Solaris, etc. + +1.2.6: +Sam Lantinga - Sun Apr 30 01:48:40 PDT 2006 + * Added gcc-fat.sh for generating Universal binaries on Mac OS X + * Updated libtool support to version 1.5.22 +Sam Lantinga - Wed Nov 19 00:23:44 PST 2003 + * Updated libtool support for new mingw32 DLL build process +Shard - Thu, 05 Jun 2003 09:30:20 -0500 + * Fixed compiling on BeOS, which may not have SO_BROADCAST +Kyle Davenport - Sat, 19 Apr 2003 17:13:31 -0500 + * Added .la files to the development RPM, fixing RPM build on RedHat 8 + +1.2.5: diff --git a/vs/sdl2net/CMakeLists.txt b/vs/sdl2net/CMakeLists.txt new file mode 100644 index 00000000000..bf30a702a2a --- /dev/null +++ b/vs/sdl2net/CMakeLists.txt @@ -0,0 +1,272 @@ +cmake_minimum_required(VERSION 3.16) + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") + +# See release_checklist.md +set(MAJOR_VERSION 2) +set(MINOR_VERSION 2) +set(MICRO_VERSION 0) +set(SDL_REQUIRED_VERSION 2.0.4) + +set(DYLIB_COMPATIBILITY_VERSION "1") + +include(PrivateSdlFunctions) +sdl_calculate_derived_version_variables() + +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) + message(FATAL_ERROR "Prevented in-tree built. Please create a build directory outside of the SDL_net source code and call cmake from there") +endif() + +project(SDL2_net + LANGUAGES C + VERSION "${FULL_VERSION}" +) + +message(STATUS "Configuring ${PROJECT_NAME} ${PROJECT_VERSION}") + +if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) + set(SDL2NET_ROOTPROJECT ON) +else() + set(SDL2NET_ROOTPROJECT OFF) +endif() + +if(TARGET SDL2::SDL2test) + set(SDL2test_FOUND ON) +else() + find_package(SDL2test) +endif() + +# Set defaults preventing destination file conflicts +set(SDL2NET_DEBUG_POSTFIX "d" + CACHE STRING "Name suffix for debug builds") +mark_as_advanced(SDL2NET_DEBUG_POSTFIX) + +include(CMakeDependentOption) +include(CMakePackageConfigHelpers) +include(GNUInstallDirs) + +option(CMAKE_POSITION_INDEPENDENT_CODE "Build static libraries with -fPIC" ON) +option(BUILD_SHARED_LIBS "Build the library as a shared library" ON) + +option(SDL2NET_INSTALL "Enable SDL2_net install target" ${SDL2NET_ROOTPROJECT}) + +cmake_dependent_option(SDL2NET_SAMPLES "Build SDL2_net samples" ${SDL2NET_ROOTPROJECT} "${SDL2test_FOUND}" OFF) + +if(SDL2NET_SAMPLES) + find_package(SDL2test REQUIRED) +endif() + +# Save BUILD_SHARED_LIBS variable +set(SDL2NET_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) + +if(SDL2NET_BUILD_SHARED_LIBS) + set(sdl2_net_export_name SDL2_net) + set(sdl2_net_install_name_infix shared) + set(sdl2_target_name SDL2::SDL2) +else() + set(sdl2_net_export_name SDL2_net-static) + set(sdl2_net_install_name_infix static) + set(sdl2_target_name SDL2::SDL2-static) +endif() + +sdl_find_sdl2(${sdl2_target_name} ${SDL_REQUIRED_VERSION}) + +add_library(SDL2_net + SDLnet.c + SDLnetselect.c + SDLnetTCP.c + SDLnetUDP.c +) +add_library(SDL2_net::${sdl2_net_export_name} ALIAS SDL2_net) +target_include_directories(SDL2_net PUBLIC + "$" + "$" +) +target_compile_definitions(SDL2_net PRIVATE + BUILD_SDL + SDL_BUILD_MAJOR_VERSION=${MAJOR_VERSION} + SDL_BUILD_MINOR_VERSION=${MINOR_VERSION} + SDL_BUILD_MICRO_VERSION=${MICRO_VERSION} +) +target_link_libraries(SDL2_net PRIVATE $) +if(WIN32) + if (MSVC) + target_compile_options(SDL2_net PRIVATE /W3 /wd4244) + endif() + target_compile_definitions(SDL2_net PRIVATE _WINSOCK_DEPRECATED_NO_WARNINGS) + target_link_libraries(SDL2_net PRIVATE ws2_32 iphlpapi) + if(SDL2NET_BUILD_SHARED_LIBS) + target_sources(SDL2_net PRIVATE version.rc) + endif() +endif() +set_target_properties(SDL2_net PROPERTIES + DEFINE_SYMBOL DLL_EXPORT + EXPORT_NAME ${sdl2_net_export_name} + C_VISIBILITY_PRESET "hidden" +) +if(NOT ANDROID) + set_target_properties(SDL2_net PROPERTIES + DEBUG_POSTFIX "${SDL2NET_DEBUG_POSTFIX}" + ) + if(APPLE) + # the SOVERSION property corresponds to the compatibility version and VERSION corresponds to the current version + # https://cmake.org/cmake/help/latest/prop_tgt/SOVERSION.html#mach-o-versions + set_target_properties(SDL2_net PROPERTIES + SOVERSION "${DYLIB_COMPATIBILITY_VERSION}" + VERSION "${DYLIB_CURRENT_VERSION}" + ) + else() + set_target_properties(SDL2_net PROPERTIES + SOVERSION "${LT_MAJOR}" + VERSION "${LT_VERSION}" + ) + endif() +endif() +if(SDL2NET_BUILD_SHARED_LIBS AND (APPLE OR (UNIX AND NOT ANDROID))) + add_custom_command(TARGET SDL2_net POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E create_symlink "$" "libSDL2_net$<$:${SDL2NET_DEBUG_POSTFIX}>$" + WORKING_DIRECTORY "${PROJECT_BINARY_DIR}" + ) +endif() +if(SDL2NET_BUILD_SHARED_LIBS) + if(WIN32 OR OS2) + set_target_properties(SDL2_net PROPERTIES + PREFIX "" + ) + endif() + if(OS2) + # FIXME: OS/2 Makefile has a different LIBNAME + set_target_properties(SDL2_net PROPERTIES + OUTPUT_NAME "SDL2net" + ) + elseif(UNIX AND NOT ANDROID) + set_target_properties(SDL2_net PROPERTIES + OUTPUT_NAME "SDL2_net-${LT_RELEASE}" + ) + endif() +else() + if(MSVC OR (WATCOM AND (WIN32 OR OS2))) + set_target_properties(SDL2_net PROPERTIES + OUTPUT_NAME "SDL2_net-static" + ) + endif() +endif() + +# Use `Compatible Interface Properties` to ensure a shared SDL2_net is built with a shared SDL2 +if(SDL2NET_BUILD_SHARED_LIBS) + set_target_properties(SDL2_net PROPERTIES + INTERFACE_SDL2_SHARED ${SDL2NET_BUILD_SHARED_LIBS} + COMPATIBLE_INTERFACE_BOOL SDL2_SHARED + ) +endif() + +if(SDL2NET_BUILD_SHARED_LIBS) + sdl_target_link_options_no_undefined(SDL2_net) +endif() + +if(SDL2NET_INSTALL) + install( + TARGETS SDL2_net + EXPORT SDL2NetExports + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT library + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT library + ) + install(FILES + "${CMAKE_CURRENT_SOURCE_DIR}/SDL_net.h" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/SDL2" COMPONENT devel + ) + + if(WIN32 AND NOT MINGW) + set(PKG_PREFIX "cmake") + else() + set(PKG_PREFIX "${CMAKE_INSTALL_LIBDIR}/cmake/SDL2_net") + endif() + + configure_package_config_file(SDL2_netConfig.cmake.in SDL2_netConfig.cmake + INSTALL_DESTINATION "${PKG_PREFIX}" + ) + write_basic_package_version_file("${PROJECT_BINARY_DIR}/SDL2_netConfigVersion.cmake" + VERSION ${FULL_VERSION} + COMPATIBILITY AnyNewerVersion + ) + install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/SDL2_netConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/SDL2_netConfigVersion.cmake" + DESTINATION "${PKG_PREFIX}" + COMPONENT devel + ) + install(EXPORT SDL2NetExports + FILE SDL2_net-${sdl2_net_install_name_infix}-targets.cmake + NAMESPACE SDL2_net:: + DESTINATION "${PKG_PREFIX}" + COMPONENT devel + ) + + if(SDL2NET_BUILD_SHARED_LIBS) + # Only create a .pc file for a shared SDL2_net + set(prefix "${CMAKE_INSTALL_PREFIX}") + set(exec_prefix "\${prefix}") + set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}") + set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") + set(PACKAGE "${PROJECT_NAME}") + set(VERSION "${FULL_VERSION}") + set(SDL_VERSION "${SDL_REQUIRED_VERSION}") + string(JOIN " " PC_REQUIRES ${PC_REQUIRES}) + string(JOIN " " PC_LIBS ${PC_LIBS}) + configure_file("${PROJECT_SOURCE_DIR}/SDL2_net.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/SDL2_net.pc.intermediate" @ONLY) + file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/SDL2_net-$.pc" INPUT "${CMAKE_CURRENT_BINARY_DIR}/SDL2_net.pc.intermediate") + + set(PC_DESTDIR) + if(CMAKE_SYSTEM_NAME MATCHES FreeBSD) + # FreeBSD uses ${PREFIX}/libdata/pkgconfig + set(PC_DESTDIR "libdata/pkgconfig") + else() + set(PC_DESTDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + endif() + # Only install a SDL2_net.pc file in Release mode + install(CODE " + if(CMAKE_INSTALL_CONFIG_NAME MATCHES \"Release\") + # FIXME: use file(COPY_FILE) if minimum CMake version >= 3.21 + execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E copy_if_different + \"${CMAKE_CURRENT_BINARY_DIR}/SDL2_net-$.pc\" + \"${CMAKE_CURRENT_BINARY_DIR}/SDL2_net.pc\") + file(INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${PC_DESTDIR}\" + TYPE FILE + FILES \"${CMAKE_CURRENT_BINARY_DIR}/SDL2_net.pc\") + endif()" COMPONENT devel) + endif() + + if(SDL2NET_BUILD_SHARED_LIBS AND (APPLE OR (UNIX AND NOT ANDROID))) + install( + FILES + "${PROJECT_BINARY_DIR}/libSDL2_net$<$:${SDL2NET_DEBUG_POSTFIX}>$" + DESTINATION "${CMAKE_INSTALL_LIBDIR}" + COMPONENT devel + ) + endif() + + install(FILES "LICENSE.txt" + DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}" + COMPONENT library + ) +endif() + +if(SDL2NET_SAMPLES) + find_package(SDL2main) + + add_executable(showinterfaces showinterfaces.c) + target_compile_definitions(showinterfaces PRIVATE SDL_MAIN_HANDLED) + target_link_libraries(showinterfaces PRIVATE SDL2_net::${sdl2_net_export_name} ${sdl2_target_name}) + + add_executable(chat chat.c chat.h) + if(TARGET SDL2::SDL2main) + target_link_libraries(chat PRIVATE SDL2::SDL2main) + endif() + target_link_libraries(chat PRIVATE SDL2_net::${sdl2_net_export_name} SDL2::SDL2test ${sdl2_target_name}) + + add_executable(chatd chatd.c) + target_compile_definitions(chatd PRIVATE SDL_MAIN_HANDLED) + target_link_libraries(chatd PRIVATE SDL2_net::${sdl2_net_export_name} ${sdl2_target_name}) +endif() diff --git a/vs/sdl2net/LICENSE.txt b/vs/sdl2net/LICENSE.txt new file mode 100644 index 00000000000..728a3d7087f --- /dev/null +++ b/vs/sdl2net/LICENSE.txt @@ -0,0 +1,18 @@ +Copyright (C) 1997-2022 Sam Lantinga + +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. + diff --git a/vs/sdl2net/Makefile.am b/vs/sdl2net/Makefile.am new file mode 100644 index 00000000000..76ebf89961b --- /dev/null +++ b/vs/sdl2net/Makefile.am @@ -0,0 +1,53 @@ +ACLOCAL_AMFLAGS = -I acinclude +AUTOMAKE_OPTIONS= foreign + +# Build static library only +lib_LIBRARIES = libSDL2_net.a + +libSDL2_netincludedir = $(includedir)/SDL2 +libSDL2_netinclude_HEADERS = SDL_net.h + +libSDL2_net_a_SOURCES = \ + SDLnet.c \ + SDLnetTCP.c \ + SDLnetUDP.c \ + SDLnetselect.c \ + SDLnetsys.h + +EXTRA_DIST = \ + Android.mk \ + CHANGES.txt \ + CMakeLists.txt \ + LICENSE.txt \ + Makefile.os2 \ + README.txt \ + SDL2_net.spec \ + SDL2_netConfig.cmake.in \ + VisualC \ + Xcode \ + autogen.sh \ + cmake \ + mingw \ + version.rc + +.rc.o: + $(RC) $< $@ + +# Distribution rules +$(PACKAGE)-$(VERSION).tar.gz: distcheck + +rpm: $(PACKAGE)-$(VERSION).tar.gz + rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = SDL2_net.pc + +install-data-local: + $(MKDIR_P) $(DESTDIR)$(libdir)/cmake/SDL2_net + $(INSTALL) -m 644 sdl2_net-config.cmake $(DESTDIR)$(libdir)/cmake/SDL2_net + $(INSTALL) -m 644 sdl2_net-config-version.cmake $(DESTDIR)$(libdir)/cmake/SDL2_net + +uninstall-hook: + rm -f $(DESTDIR)$(libdir)/cmake/SDL2_net/sdl2_net-config.cmake + rm -f $(DESTDIR)$(libdir)/cmake/SDL2_net/sdl2_net-config-version.cmake + rmdir --ignore-fail-on-non-empty $(DESTDIR)$(libdir)/cmake/SDL2_net \ No newline at end of file diff --git a/vs/sdl2net/Makefile.os2 b/vs/sdl2net/Makefile.os2 new file mode 100644 index 00000000000..0b0e2cb7481 --- /dev/null +++ b/vs/sdl2net/Makefile.os2 @@ -0,0 +1,102 @@ +# Open Watcom makefile to build SDL2net.dll for OS/2 +# wmake -f Makefile.os2 +# +# Remember to edit DEPS_INC and DEPS_LIB below to meet +# your own environment!. + +LIBNAME = SDL2net +MAJOR_VERSION = 2 +MINOR_VERSION = 2 +MICRO_VERSION = 0 +VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION) + +TITLENAME = $(LIBNAME) $(VERSION) + +LIBFILE = $(LIBNAME).lib +DLLFILE = $(LIBNAME).dll +LNKFILE = $(LIBNAME).lnk + +# change DEPS_INC in order to point to the dependency headers. +DEPS_INC=-IC:\SDL2DEV\h\SDL2 +# change DEPS_LIB in order to point to the dependency libraries. +DEPS_LIB=C:\SDL2DEV\lib + +SRCS = SDLnetTCP.c SDLnetUDP.c SDLnetselect.c SDLnet.c + +OBJS = $(SRCS:.c=.obj) + +LIBS = SDL2.lib + +CFLAGS_BASE = -bt=os2 -d0 -q -bm -5s -fp5 -fpi87 -sg -oeatxh -ei -j +# warnings: +CFLAGS_BASE+= -wx +# newer OpenWatcom versions enable W303 by default +CFLAGS_BASE+= -wcd=303 +# include paths: +CFLAGS_BASE+= -I$(%WATCOM)/h/os2 -I$(%WATCOM)/h +CFLAGS_BASE+= -I. $(DEPS_INC) + +CFLAGS =$(CFLAGS_BASE) +# to build a dll: +CFLAGS+= -bd +# for DECLSPEC: +CFLAGS+= -DBUILD_SDL + +# For the static assertions in SDLnet.c +CFLAGS+= -DSDL_BUILD_MAJOR_VERSION=$(MAJOR_VERSION) +CFLAGS+= -DSDL_BUILD_MINOR_VERSION=$(MINOR_VERSION) +CFLAGS+= -DSDL_BUILD_MICRO_VERSION=$(MICRO_VERSION) + +all: $(LIBFILE) showinterfaces.exe chat.exe chatd.exe + +$(LIBFILE): $(DLLFILE) + @echo * Create library: $@... + wlib -b -n -q -c -pa -s -t -zld -ii -io $@ $(DLLFILE) + +$(DLLFILE): $(OBJS) $(LNKFILE) + @echo * Link: $@ + wlink @$(LNKFILE) + +$(LNKFILE): + @%create $@ + @%append $@ SYSTEM os2v2_dll INITINSTANCE TERMINSTANCE + @%append $@ NAME $(LIBNAME) + @for %i in ($(OBJS)) do @%append $@ FILE %i + @%append $@ OPTION QUIET + @%append $@ OPTION DESCRIPTION '@$#libsdl org:$(VERSION)$#@Simple DirectMedia Layer network library' + @%append $@ LIBPATH $(DEPS_LIB) + @for %i in ($(LIBS)) do @%append $@ LIB %i + @%append $@ OPTION MAP=$* + @%append $@ OPTION ELIMINATE + @%append $@ OPTION MANYAUTODATA + @%append $@ OPTION OSNAME='OS/2 and eComStation' + @%append $@ OPTION SHOWDEAD + +.c.obj: + wcc386 $(CFLAGS) -fo=$^@ $< + +showinterfaces.obj: showinterfaces.c + wcc386 $(CFLAGS_BASE) -fo=$^@ $< +chat.obj: chat.c + wcc386 $(CFLAGS_BASE) -fo=$^@ $< +chatd.obj: chatd.c + wcc386 $(CFLAGS_BASE) -fo=$^@ $< + +showinterfaces.exe: $(LIBFILE) showinterfaces.obj + wlink SYS os2v2 OP q LIBPATH $(DEPS_LIB) LIBR {$(LIBFILE) SDL2.lib} F {showinterfaces.obj} N showinterfaces.exe +chat.exe: $(LIBFILE) chat.obj + wlink SYS os2v2 OP q LIBPATH $(DEPS_LIB) LIBR {$(LIBFILE) SDL2test.lib SDL2.lib} F {chat.obj} N chat.exe +chatd.exe: $(LIBFILE) chatd.obj + wlink SYS os2v2 OP q LIBPATH $(DEPS_LIB) LIBR {$(LIBFILE) SDL2.lib} F {chatd.obj} N chatd.exe + +clean: .SYMBOLIC + @echo * Clean: $(TITLENAME) + @if exist *.obj rm *.obj + @if exist *.err rm *.err + @if exist $(LNKFILE) rm $(LNKFILE) + +distclean: .SYMBOLIC clean + @if exist $(DLLFILE) rm $(DLLFILE) + @if exist $(LIBFILE) rm $(LIBFILE) + @if exist *.map rm *.map + @if exist *.exe rm *.exe diff --git a/vs/sdl2net/README-versions.md b/vs/sdl2net/README-versions.md new file mode 100644 index 00000000000..364d356238c --- /dev/null +++ b/vs/sdl2net/README-versions.md @@ -0,0 +1,59 @@ +# Versioning + +## Since 2.1.0 + +`SDL_net` follows an "odd/even" versioning policy, similar to GLib, GTK, Flatpak +and older versions of the Linux kernel: + +* The major version (first part) increases when backwards compatibility + is broken, which will happen infrequently. + +* If the minor version (second part) is divisible by 2 + (for example 2.2.x, 2.4.x), this indicates a version that + is believed to be stable and suitable for production use. + + * In stable releases, the patchlevel or micro version (third part) + indicates bugfix releases. Bugfix releases should not add or + remove ABI, so the ".0" release (for example 2.2.0) should be + forwards-compatible with all the bugfix releases from the + same cycle (for example 2.2.1). + + * The minor version increases when new API or ABI is added, or when + other significant changes are made. Newer minor versions are + backwards-compatible, but not fully forwards-compatible. + For example, programs built against `SDL_net` 2.2.x should work fine + with 2.4.x, but programs built against 2.4.x will not necessarily + work with 2.2.x. + +* If the minor version (second part) is not divisible by 2 + (for example 2.1.x, 2.3.x), this indicates a development prerelease + that is not suitable for stable software distributions. + Use with caution. + + * The patchlevel or micro version (third part) increases with + each prerelease. + + * Each prerelease might add new API and/or ABI. + + * Prereleases are backwards-compatible with older stable branches. + For example, 2.3.x will be backwards-compatible with 2.2.x. + + * Prereleases are not guaranteed to be backwards-compatible with + each other. For example, new API or ABI added in 2.1.1 + might be removed or changed in 2.1.2. + If this would be a problem for you, please do not use prereleases. + + * Only upgrade to a prerelease if you can guarantee that you will + promptly upgrade to the stable release that follows it. + For example, do not upgrade to 2.1.x unless you will be able to + upgrade to 2.2.0 when it becomes available. + + * Software distributions that have a freeze policy (in particular Linux + distributions with a release cycle, such as Debian and Fedora) + should usually only package stable releases, and not prereleases. + +## Before 2.1.0 + +Older versions of `SDL_net` used the patchlevel (micro version, +third part) for feature releases, and did not distinguish between feature +and bugfix releases. diff --git a/vs/sdl2net/README.txt b/vs/sdl2net/README.txt new file mode 100644 index 00000000000..2a722540d78 --- /dev/null +++ b/vs/sdl2net/README.txt @@ -0,0 +1,26 @@ + +SDL_net 2.0 + +The latest version of this library is available from GitHub: +https://github.com/libsdl-org/SDL_net/releases + +This is an example portable network library for use with SDL. +It is available under the zlib license, found in the file LICENSE.txt. +The API can be found in the file SDL_net.h and online at https://wiki.libsdl.org/SDL_net +This library supports UNIX, Windows, MacOS Classic, MacOS X, +BeOS and QNX. + +The demo program is a chat client and server. + +The chat client connects to the server via TCP, registering itself. +The server sends back a list of connected clients, and keeps the +client updated with the status of other clients. +Every line of text from a client is sent via UDP to every other client. + +Note that this isn't necessarily how you would want to write a chat +program, but it demonstrates how to use the basic features of the +network library. + +Enjoy! + -Sam Lantinga and Roy Wood + diff --git a/vs/sdl2net/SDL2_net.pc.in b/vs/sdl2net/SDL2_net.pc.in new file mode 100644 index 00000000000..28dd6c8b224 --- /dev/null +++ b/vs/sdl2net/SDL2_net.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: SDL2_net +Description: net library for Simple DirectMedia Layer +Version: @VERSION@ +Requires: sdl2 >= @SDL_VERSION@ +@ENABLE_SHARED_TRUE@Libs: -L${libdir} -lSDL2_net +@ENABLE_SHARED_TRUE@@ENABLE_STATIC_TRUE@Libs.private: @INETLIB@ +@ENABLE_SHARED_FALSE@Libs: -L${libdir} -lSDL2_net @INETLIB@ +Cflags: -I${includedir}/SDL2 diff --git a/vs/sdl2net/SDL2_net.spec.in b/vs/sdl2net/SDL2_net.spec.in new file mode 100644 index 00000000000..3777ae606bd --- /dev/null +++ b/vs/sdl2net/SDL2_net.spec.in @@ -0,0 +1,62 @@ +%define name @PACKAGE@ +%define version @VERSION@ +%define release 1 + +Summary: SDL portable network library +Name: %{name} +Version: %{version} +Release: %{release} +Source0: %{name}-%{version}.tar.gz +URL: http://www.libsdl.org/projects/SDL_net/ +License: LGPL +Group: System Environment/Libraries +BuildRoot: /var/tmp/%{name}-buildroot +Prefix: %{_prefix} + +%description +This is a portable network library for use with SDL. + +%package devel +Summary: Libraries and includes to develop SDL networked applications. +Group: Development/Libraries +Requires: %{name} + +%description devel +This is a portable network library for use with SDL. + +This is the libraries and include files you can use to develop SDL networked applications. + +%prep +rm -rf ${RPM_BUILD_ROOT} + +%setup -q + +%build +CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} --disable-gui +make + +%install +rm -rf $RPM_BUILD_ROOT +make install prefix=$RPM_BUILD_ROOT/%{prefix} + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root) +%doc README.txt CHANGES.txt LICENSE.txt +%{prefix}/lib/lib*.so.* + +%files devel +%defattr(-,root,root) +%{prefix}/lib/lib*.a +%{prefix}/lib/lib*.la +%{prefix}/lib/lib*.so +%{prefix}/include/*/ +%{prefix}/lib/pkgconfig/*.pc + +%changelog +* Sat Feb 3 2001 Paul S Jenner +- First spec file based on SDL spec file + +# end of file diff --git a/vs/sdl2net/SDL2_netConfig.cmake.in b/vs/sdl2net/SDL2_netConfig.cmake.in new file mode 100644 index 00000000000..ae35e9b9736 --- /dev/null +++ b/vs/sdl2net/SDL2_netConfig.cmake.in @@ -0,0 +1,14 @@ +set(SDL2_net_FOUND ON) + +set(SDL2NET_SDL2_REQUIRED_VERSION @SDL_REQUIRED_VERSION@) + +include(CMakeFindDependencyMacro) + +#FIXME: can't add SDL2NET_SDL2_REQUIRED_VERSION since not all SDL2 installs ship SDL2ConfigVersion.cmake +if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_net-shared-targets.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/SDL2_net-shared-targets.cmake") +endif() + +if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_net-static-targets.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/SDL2_net-static-targets.cmake") +endif() diff --git a/vs/sdl2net/SDL_net.h b/vs/sdl2net/SDL_net.h new file mode 100644 index 00000000000..16c545c929b --- /dev/null +++ b/vs/sdl2net/SDL_net.h @@ -0,0 +1,1042 @@ +/* + SDL_net: An example cross-platform network library for use with SDL + Copyright (C) 1997-2022 Sam Lantinga + Copyright (C) 2012 Simeon Maxein + + 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. +*/ + +#ifndef SDL_NET_H_ +#define SDL_NET_H_ + +#ifdef WITHOUT_SDL +#include +typedef uint8_t Uint8; +typedef uint16_t Uint16; +typedef uint32_t Uint32; + +typedef struct SDLNet_version { + Uint8 major; + Uint8 minor; + Uint8 patch; +} SDLNet_version; + +#else /* WITHOUT_SDL */ + +#include "SDL.h" +#include "SDL_endian.h" +#include "SDL_version.h" + +typedef SDL_version SDLNet_version; + +#endif /* WITHOUT_SDL */ + +#include "begin_code.h" + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL +*/ +#define SDL_NET_MAJOR_VERSION 2 +#define SDL_NET_MINOR_VERSION 2 +#define SDL_NET_PATCHLEVEL 0 + +/* This macro can be used to fill a version structure with the compile-time + * version of the SDL_net library. + */ +#define SDL_NET_VERSION(X) \ +{ \ + (X)->major = SDL_NET_MAJOR_VERSION; \ + (X)->minor = SDL_NET_MINOR_VERSION; \ + (X)->patch = SDL_NET_PATCHLEVEL; \ +} + +#if SDL_NET_MAJOR_VERSION < 3 && SDL_MAJOR_VERSION < 3 +/** + * This is the version number macro for the current SDL_net version. + * + * In versions higher than 2.9.0, the minor version overflows into + * the thousands digit: for example, 2.23.0 is encoded as 4300. + * This macro will not be available in SDL 3.x or SDL_net 3.x. + * + * Deprecated, use SDL_NET_VERSION_ATLEAST or SDL_NET_VERSION instead. + */ +#define SDL_NET_COMPILEDVERSION \ + SDL_VERSIONNUM(SDL_NET_MAJOR_VERSION, SDL_NET_MINOR_VERSION, SDL_NET_PATCHLEVEL) +#endif /* SDL_NET_MAJOR_VERSION < 3 && SDL_MAJOR_VERSION < 3 */ + +/** + * This macro will evaluate to true if compiled with SDL_net at least X.Y.Z. + */ +#define SDL_NET_VERSION_ATLEAST(X, Y, Z) \ + ((SDL_NET_MAJOR_VERSION >= X) && \ + (SDL_NET_MAJOR_VERSION > X || SDL_NET_MINOR_VERSION >= Y) && \ + (SDL_NET_MAJOR_VERSION > X || SDL_NET_MINOR_VERSION > Y || SDL_NET_PATCHLEVEL >= Z)) + +/** + * Query the version of SDL_net that the program is linked against. + * + * This function gets the version of the dynamically linked SDL_net library. + * This is separate from the SDL_NET_VERSION() macro, which tells you what + * version of the SDL_net headers you compiled against. + * + * This returns static internal data; do not free or modify it! + * + * \returns a pointer to the version information. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC const SDLNet_version * SDLCALL SDLNet_Linked_Version(void); + +/** + * Initialize SDL_net. + * + * You must successfully call this function before it is safe to call any + * other function in this library, with one exception: a human-readable error + * message can be retrieved from SDLNet_GetError() if this function fails. + * + * SDL must be initialized before calls to functions in this library, because + * this library uses utility functions from the SDL library. + * + * It is safe to call this more than once; the library keeps a counter of init + * calls, and decrements it on each call to SDLNet_Quit, so you must pair your + * init and quit calls. + * + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC int SDLCALL SDLNet_Init(void); + +/** + * Deinitialize SDL_net. + * + * You must call this when done with the library, to free internal resources. + * It is safe to call this when the library isn't initialized, as it will just + * return immediately. + * + * Once you have as many quit calls as you have had successful calls to + * SDLNet_Init, the library will actually deinitialize. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC void SDLCALL SDLNet_Quit(void); + + +/* IPv4 hostname resolution API... */ + +typedef struct { + Uint32 host; /* 32-bit IPv4 host address */ + Uint16 port; /* 16-bit protocol port */ +} IPaddress; + +#ifndef INADDR_ANY +#define INADDR_ANY 0x00000000 +#endif +#ifndef INADDR_NONE +#define INADDR_NONE 0xFFFFFFFF +#endif +#ifndef INADDR_LOOPBACK +#define INADDR_LOOPBACK 0x7f000001 +#endif +#ifndef INADDR_BROADCAST +#define INADDR_BROADCAST 0xFFFFFFFF +#endif + +/** + * Resolve a host name and port to an IP address in network form. + * + * If `host` is NULL, the resolved host will be set to `INADDR_ANY`. + * + * If the host couldn't be resolved, the host portion of the returned address + * will be INADDR_NONE, and the function will return -1. + * + * \param address to be filled in with the resolved address and port. + * \param host the hostname to lookup (like "libsdl.org") + * \param port the port intended to be connected to, to fill into address. + * \returns zero on success, -1 on error. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC int SDLCALL SDLNet_ResolveHost(IPaddress *address, const char *host, Uint16 port); + +/** + * Resolve an IP address to a host name in canonical form. + * + * If the IP couldn't be resolved, this function returns NULL, otherwise a + * pointer to a static buffer containing the hostname is returned. + * + * **Warning**: This function is not thread-safe! + * + * \param ip the IP address to resolve into a hostname. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC const char * SDLCALL SDLNet_ResolveIP(const IPaddress *ip); + +/** + * Get the addresses of network interfaces on this system. + * + * \param addresses where to store the returned information. + * \param maxcount the number of results that can be stored at `addresses` + * \returns the number of addresses saved in `addresses` + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC int SDLCALL SDLNet_GetLocalAddresses(IPaddress *addresses, int maxcount); + + +/* TCP network API */ + +typedef struct _TCPsocket *TCPsocket; + +/** + * Open a TCP network socket. + * + * If `ip->host` is INADDR_NONE or INADDR_ANY, this creates a local server + * socket on the given port, otherwise a TCP connection to the remote host and + * port is attempted. The address passed in should already be swapped to + * network byte order (addresses returned from SDLNet_ResolveHost() are + * already in the correct form). + * + * \param ip The address to open a connection to (or to host a server on). + * \returns the newly created socket, or NULL if there was an error. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_TCP_Close + */ +extern DECLSPEC TCPsocket SDLCALL SDLNet_TCP_Open(IPaddress *ip); + +/** + * Accept an incoming connection on the given server socket. + * + * `server` must be a socket returned by SDLNet_TCP_Open with an address of + * INADDR_NONE or INADDR_ANY (a "server socket"). Other sockets do not accept + * connections. + * + * \param server the server socket to accept a connection on. + * \returns the newly created socket, or NULL if there was an error. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC TCPsocket SDLCALL SDLNet_TCP_Accept(TCPsocket server); + +/** + * Get the IP address of the remote system associated with the socket. + * + * If the socket is a server socket, this function returns NULL. + * + * This returns a pointer to internal memory; you should not modify or free + * it, and should assume it's only valid until the socket is given to + * SDLNet_TCP_Close. + * + * \param sock the socket to query. + * \returns the address information for the socket. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC IPaddress * SDLCALL SDLNet_TCP_GetPeerAddress(TCPsocket sock); + +/** + * Send data over a non-server socket. + * + * `sock` must be a valid socket that was created by SDLNet_TCP_Open with a + * specific address, or SDLNet_TCP_Accept. + * + * This function sends `len` bytes, pointed to by `data` over the non-server + * socket `sock`. + * + * This function returns the actual amount of data sent. If the return value + * is less than the amount of data sent, then either the remote connection was + * closed, or an unknown socket error occurred. + * + * This function may block! + * + * \param sock the socket to send data to. + * \param data a pointer to the bytes to send. + * \param len the number of bytes, pointed to by `data`, to transmit. + * \returns number of bytes sent, which might be less if there was a problem + * or connection failure. If the socket is invalid, this function can + * return -1, but in valid uses it'll return >= 0. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_TCP_Recv + */ +extern DECLSPEC int SDLCALL SDLNet_TCP_Send(TCPsocket sock, const void *data, int len); + +/** + * Receive data from a non-server socket. + * + * `sock` must be a valid socket that was created by SDLNet_TCP_Open with a + * specific address, or SDLNet_TCP_Accept. + * + * Receive up to `maxlen` bytes of data over the non-server socket `sock`, and + * store them in the buffer pointed to by `data`. + * + * This function returns the actual amount of data received. If the return + * value is less than or equal to zero, then either the remote connection was + * closed, or an unknown socket error occurred. + * + * Note that this will return the number of bytes available at the first + * moment the socket is able to see new data. If packets are coming in slowly + * from the network, this might be less data than you expect at a given time. + * + * This function may block! Use SDLNet_CheckSockets() to make sure there is + * data available before calling this function, if you want to avoid blocking. + * + * \param sock the socket to send data to. + * \param data a pointer to where to store received data. + * \param maxlen the maximum number of bytes that can be stored at `data`. + * \returns number of bytes received, which might be less than `maxlen`. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_TCP_Send + * \sa SDLNet_CheckSockets + */ +extern DECLSPEC int SDLCALL SDLNet_TCP_Recv(TCPsocket sock, void *data, int maxlen); + +/** + * Close a TCP network socket. + * + * All TCP sockets (server and non-server) are deinitialized through this + * function. Call this once you are done with a socket, and assume the handle + * is invalid once you have. + * + * Closing a socket will disconnect any communication and free its resources. + * + * \param sock socket to close. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC void SDLCALL SDLNet_TCP_Close(TCPsocket sock); + + +/* UDP network API */ + +/* The maximum channels on a a UDP socket */ +#define SDLNET_MAX_UDPCHANNELS 32 +/* The maximum addresses bound to a single UDP socket channel */ +#define SDLNET_MAX_UDPADDRESSES 4 + +typedef struct _UDPsocket *UDPsocket; +typedef struct { + int channel; /* The src/dst channel of the packet */ + Uint8 *data; /* The packet data */ + int len; /* The length of the packet data */ + int maxlen; /* The size of the data buffer */ + int status; /* packet status after sending */ + IPaddress address; /* The source/dest address of an incoming/outgoing packet */ +} UDPpacket; + +/** + * Allocate a single UDP packet. + * + * This allocates a packet with `size` bytes of space for payload. + * + * When done with this packet, you can free it with SDLNet_FreePacket. Packets + * can be reused multiple times; you don't have to allocate a new one for each + * piece of data you intend to send. + * + * You can allocate multiple packets at once with SDLNet_AllocPacketV. + * + * \param size the maximum number of bytes of payload this packet will + * contain. + * \returns the new packet, or NULL if the function ran out of memory. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_ResizePacket + * \sa SDLNet_FreePacket + * \sa SDLNet_AllocPacketV + */ +extern DECLSPEC UDPpacket * SDLCALL SDLNet_AllocPacket(int size); + + +/** + * Reallocate a UDP packet's payload space. + * + * This takes an existing packet and makes sure it can contain at least + * `newsize` bytes of space for payload. + * + * When done with this packet, you can free it with SDLNet_FreePacket. Packets + * can be used multiple times; you don't have to allocate a new one for each + * piece of data you intend to send. + * + * Please note that on memory allocation failure, this function will leave the + * existing buffer alone, and _will return the original buffer size_. It will + * not return an error value, it'll just leave the packet as it was! + * + * **Warning**: Existing contents of the packet's data are lost when resizing, + * whether you are growing or shrinking the payload space, since SDL_net does + * not realloc the existing data. + * + * \param newsize the new maximum number of bytes of payload this packet will + * contain. + * \returns the new maximum payload size, which will be unchanged from the + * previous if the system ran out of memory. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_AllocPacket + * \sa SDLNet_FreePacket + */ +extern DECLSPEC int SDLCALL SDLNet_ResizePacket(UDPpacket *packet, int newsize); + + +/** + * Dispose of a UDP packet. + * + * This frees both the packet's payload and the packet itself. Once this call + * completes, the packet's pointer is invalid and should not be used anymore. + * + * \param packet the packet to free. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_AllocPacket + * \sa SDLNet_ResizePacket + */ +extern DECLSPEC void SDLCALL SDLNet_FreePacket(UDPpacket *packet); + +/** + * Allocate a UDP packet vector (array of packets). + * + * This allocates `howmany` packets at once, each `size` bytes long. + * + * You must free the results of this function with SDLNet_FreePacketV, and + * must not free individual packets from this function with SDLNet_FreePacket. + * + * \param howmany the number of packets to allocate. + * \param size the maximum bytes of payload each packet should contain. + * \returns a pointer to the first packet in the array, or NULL if the + * function ran out of memory. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_FreePacketV + */ +extern DECLSPEC UDPpacket ** SDLCALL SDLNet_AllocPacketV(int howmany, int size); + + +/** + * Free a UDP packet vector (array of packets). + * + * This frees the results of a previous call to SDLNet_AllocPacketV(), freeing + * both the set of packets and the array that holds them. + * + * It is safe to free a NULL array through here; it's a harmless no-op. + * + * You must not use this to free packets allocated through any function other + * than SDLNet_AllocPacketV(). + * + * \param packetV the results of a call to SDLNet_AllocPacketV(). + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_AllocPacketV + */ +extern DECLSPEC void SDLCALL SDLNet_FreePacketV(UDPpacket **packetV); + +/** + * Open a UDP network socket. + * + * If `port` is non-zero, the UDP socket is bound to a local port. + * + * The `port` should be given in native byte order, but is used internally in + * network (big endian) byte order, in addresses, etc. This allows other + * systems to send to this socket via a known port. + * + * Note that UDP sockets at the platform layer "bind" to a nework port number, + * but SDL_net's UDP sockets also "bind" to a "channel" on top of that, with + * SDLNet_UDP_Bind(). But the term is used for both. + * + * When you are done communicating over the returned socket, you can shut it + * down and free its resources with SDLNet_UDP_Close(). + * + * \param port the UDP port to bind this socket to. + * \returns a new UDP socket, ready to communicate. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_UDP_Close + * \sa SDLNet_UDP_Bind + */ +extern DECLSPEC UDPsocket SDLCALL SDLNet_UDP_Open(Uint16 port); + +/** + * Set the percentage of simulated packet loss for packets sent on the socket. + * + * SDL_net can optionally, at random, drop packets that are being sent and + * received, to simulate bad networking conditions. As these sort of + * conditions can happen in the real world but likely won't between machines + * on the same LAN, you can use this function in testing to make sure your app + * is robust against network problems even on a fast, reliable network. + * + * You probably don't want to use this function outside of local testing. + * + * \param sock the socket to simulate packet loss on. + * \param percent a value from 0 to 100 of likelihood to drop a packet (higher + * the number means more likelihood of dropping. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC void SDLCALL SDLNet_UDP_SetPacketLoss(UDPsocket sock, int percent); + +/** + * Bind an address to the requested channel on the UDP socket. + * + * Note that UDP sockets at the platform layer "bind" to a nework port number, + * but SDL_net's UDP sockets also "bind" to a "channel" on top of that, with + * SDLNet_UDP_Bind(). But the term is used for both. + * + * If `channel` is -1, then the first unbound channel that has not yet been + * bound to the maximum number of addresses will be bound with the given + * address as it's primary address. + * + * If the channel is already bound, this new address will be added to the list + * of valid source addresses for packets arriving on the channel. If the + * channel is not already bound, then the address becomes the primary address, + * to which all outbound packets on the channel are sent. + * + * \param sock the UDP socket to bind an address to a channel on. + * \param channel the channel of the socket to bind to, or -1 to use the first + * available channel. + * \param address the address to bind to the socket's channel. + * \returns the channel which was bound, or -1 on error. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_UDP_Unbind + */ +extern DECLSPEC int SDLCALL SDLNet_UDP_Bind(UDPsocket sock, int channel, const IPaddress *address); + +/** + * Unbind all addresses from the given channel. + * + * Note that UDP sockets at the platform layer "bind" to a nework port number, + * but SDL_net's UDP sockets also "bind" to a "channel" on top of that, with + * SDLNet_UDP_Bind(). But the term is used for both. + * + * \param sock the UDP socket to unbind addresses from a channel on. + * \param channel the channel of the socket to unbind. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_UDP_Bind + */ +extern DECLSPEC void SDLCALL SDLNet_UDP_Unbind(UDPsocket sock, int channel); + +/** + * Get the IP address of the remote system for a socket and channel. + * + * If `channel` is -1, then the primary IP port of the UDP socket is returned + * -- this is only meaningful for sockets opened with a specific port. + * + * If the channel is not bound and not -1, this function returns NULL. + * + * \param sock the UDP socket to unbind addresses from a channel on. + * \param channel the channel of the socket to unbind. + * \returns the address bound to the socket's channel, or + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC IPaddress * SDLCALL SDLNet_UDP_GetPeerAddress(UDPsocket sock, int channel); + +/** + * Send a vector of packets to the the channels specified within the packet. + * + * If the channel specified in the packet is -1, the packet will be sent to + * the address in the `src` member of the packet. + * + * Each packet will be updated with the status of the packet after it has been + * sent, -1 if the packet send failed. + * + * This function takes an array of packets but does not need to be allocated + * through SDLNet_AllocPacketV; if you supply your own array of packets you + * allocated individually, that is okay. + * + * **Warning**: UDP is an _unreliable protocol_, which means we can report + * that your packet has been successfully sent from your machine, but then it + * never makes it to its destination when a router along the way quietly drops + * it. If this happens--and this is a common result on the internet!--you will + * not know the packet never made it. Also, packets may arrive in a different + * order than you sent them. Plan accordingly! + * + * **Warning**: The maximum size of the packet is limited by the MTU (Maximum + * Transfer Unit) of the transport medium. It can be as low as 250 bytes for + * some PPP links, and as high as 1500 bytes for ethernet. Different sizes can + * be sent, but the system might split it into multiple transmission fragments + * behind the scenes, that need to be reassembled on the other side (and the + * packet is lost if any fragment is lost in transit). So the less you can + * reasonably send in a single packet, the better, as it will be more reliable + * and lower latency. + * + * \param sock the UDP socket to send packets on. + * \param packets an array of packets to send to the network. + * \param npackets the number of packets in the `packets` array. + * \returns the number of packets successfully sent from this machine. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_UDP_RecV + */ +extern DECLSPEC int SDLCALL SDLNet_UDP_SendV(UDPsocket sock, UDPpacket **packets, int npackets); + +/** + * Send a single UDP packet to the specified channel. + * + * If the channel specified is -1, the packet will be sent to the address in + * the `src` member of the packet. + * + * The packet will be updated with the status of the packet after it has been + * sent. + * + * **Warning**: UDP is an _unreliable protocol_, which means we can report + * that your packet has been successfully sent from your machine, but then it + * never makes it to its destination when a router along the way quietly drops + * it. If this happens--and this is a common result on the internet!--you will + * not know the packet never made it. Also, packets may arrive in a different + * order than you sent them. Plan accordingly! + * + * **Warning**: The maximum size of the packet is limited by the MTU (Maximum + * Transfer Unit) of the transport medium. It can be as low as 250 bytes for + * some PPP links, and as high as 1500 bytes for ethernet. Different sizes can + * be sent, but the system might split it into multiple transmission fragments + * behind the scenes, that need to be reassembled on the other side (and the + * packet is lost if any fragment is lost in transit). So the less you can + * reasonably send in a single packet, the better, as it will be more reliable + * and lower latency. + * + * \param sock the UDP socket to send packets on. + * \param packet a single packet to send to the network. + * \returns 1 if the packet was sent, or 0 on error. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC int SDLCALL SDLNet_UDP_Send(UDPsocket sock, int channel, UDPpacket *packet); + +/** + * Receive a vector of pending packets from a UDP socket. + * + * The returned packets contain the source address and the channel they + * arrived on. If they did not arrive on a bound channel, the the channel will + * be set to -1. + * + * The channels are checked in highest to lowest order, so if an address is + * bound to multiple channels, the highest channel with the source address + * bound will be returned. + * + * This function takes an array of packets but does not need to be allocated + * through SDLNet_AllocPacketV; if you supply your own array of packets you + * allocated individually, that is okay, as long as the last element in the + * array is NULL, so SDL_net knows the array bounds. The arrays returned by + * SDLNet_AllocPacketV are properly NULL-terminated for these purposes. + * + * This function does not block, so it can return 0 packets pending, which is + * not an error condition. + * + * \param sock the UDP socket to receive packets on. + * \param packets an array of packets, NULL terminated. + * \returns the number of packets read from the network, or -1 on error. 0 + * means no packets were currently available. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_UDP_SendV + * \sa SDLNet_UDP_Recv + */ +extern DECLSPEC int SDLCALL SDLNet_UDP_RecvV(UDPsocket sock, UDPpacket **packets); + +/** + * Receive a single packet from a UDP socket. + * + * The returned packets contain the source address and the channel they + * arrived on. If they did not arrive on a bound channel, the the channel will + * be set to -1. + * + * The channels are checked in highest to lowest order, so if an address is + * bound to multiple channels, the highest channel with the source address + * bound will be returned. + * + * This function does not block, so it can return 0 packets pending, which is + * not an error condition. + * + * \param sock the UDP socket to receive packets on. + * \param packet a single packet to receive data into from the network. + * \returns 1 if a new packet is available, or -1 on error. 0 means no packets + * were currently available. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_UDP_Send + * \sa SDLNet_UDP_RecvV + */ +extern DECLSPEC int SDLCALL SDLNet_UDP_Recv(UDPsocket sock, UDPpacket *packet); + +/** + * Close a UDP socket. + * + * This disconnects the socket and frees any resources it retains. + * + * This socket may not be used again once given to this function. + * + * \param sock UDP socket to close. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC void SDLCALL SDLNet_UDP_Close(UDPsocket sock); + + +/***********************************************************************/ +/* Hooks for checking sockets for available data */ +/***********************************************************************/ + +typedef struct _SDLNet_SocketSet *SDLNet_SocketSet; + +/* Any network socket can be safely cast to this socket type */ +typedef struct _SDLNet_GenericSocket { + int ready; +} *SDLNet_GenericSocket; + +/** + * Allocate a socket set for use with SDLNet_CheckSockets(). + * + * To query if new data is available on a socket, you use a "socket set" with + * SDLNet_CheckSockets(). A socket set is just a list of sockets behind the + * scenes; you allocate a set and then add/remove individual sockets to/from + * the set. + * + * When done with a socket set, you can free it with SDLNet_FreeSocketSet. + * + * \param maxsockets the maximum amount of sockets to include in this set. + * \returns a socket set for up to `maxsockets` sockets, or NULL if the + * function ran out of memory. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_FreeSocketSet + */ +extern DECLSPEC SDLNet_SocketSet SDLCALL SDLNet_AllocSocketSet(int maxsockets); + +/** + * Add a socket to a socket set, to be checked for available data. + * + * Generally you don't want to call this generic function, but rather the + * specific, inline function that wraps it: SDLNet_TCP_AddSocket() or + * SDLNet_UDP_AddSocket(). + * + * This function will fail if you add a socket to the set when the set already + * has its maximum number of sockets added, but otherwise it will always + * succeed. + * + * If `sock` is NULL, nothing is added to the set; this lets you query the + * number of sockets currently contained in the set. + * + * \param set the socket set to add a new socket to. + * \param sock the socket to add to the set. + * \returns the total number of sockets contained in the set (including this + * new one), or -1 if the set is already full. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_TCP_AddSocket + * \sa SDLNet_UDP_AddSocket + * \sa SDLNet_DelSocket + * \sa SDLNet_TCP_DelSocket + * \sa SDLNet_UDP_DelSocket + * \sa SDLNet_CheckSockets + */ +extern DECLSPEC int SDLCALL SDLNet_AddSocket(SDLNet_SocketSet set, SDLNet_GenericSocket sock); + +/** + * Add a TCP socket to a socket set, to be checked for available data. + * + * This is a small TCP-specific wrapper over SDLNet_AddSocket; please refer + * to that function's documentation. + * + * \param set the socket set to add a new socket to. + * \param sock the socket to add to the set. + * \returns the total number of sockets contained in the set (including this new one), + * or -1 if the set is already full. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_AddSocket + */ +SDL_FORCE_INLINE int SDLNet_TCP_AddSocket(SDLNet_SocketSet set, TCPsocket sock) +{ + return SDLNet_AddSocket(set, (SDLNet_GenericSocket)sock); +} + +/** + * Add a UDP socket to a socket set, to be checked for available data. + * + * This is a small UDP-specific wrapper over SDLNet_AddSocket; please refer + * to that function's documentation. + * + * \param set the socket set to add a new socket to. + * \param sock the socket to add to the set. + * \returns the total number of sockets contained in the set (including this new one), + * or -1 if the set is already full. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_AddSocket + */ +SDL_FORCE_INLINE int SDLNet_UDP_AddSocket(SDLNet_SocketSet set, UDPsocket sock) +{ + return SDLNet_AddSocket(set, (SDLNet_GenericSocket)sock); +} + + +/** + * Remove a socket from a set of sockets to be checked for available data. + * + * Generally you don't want to call this generic function, but rather the + * specific, inline function that wraps it: SDLNet_TCP_DelSocket() or + * SDLNet_UDP_DelSocket(). + * + * If `sock` is NULL, nothing is removed from the set; this lets you query the + * number of sockets currently contained in the set. + * + * This will return -1 if the socket was not found in the set; in such a case, + * nothing is removed from the set. + * + * \param set the socket set to remove a socket from. + * \param sock the socket to remove from the set. + * \returns the total number of sockets contained in the set (after `sock`'s + * removal), or -1 if `sock` was not in the set. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_TCP_DelSocket + * \sa SDLNet_UDP_DelSocket + * \sa SDLNet_AddSocket + * \sa SDLNet_TCP_AddSocket + * \sa SDLNet_UDP_AddSocket + * \sa SDLNet_CheckSockets + */ +extern DECLSPEC int SDLCALL SDLNet_DelSocket(SDLNet_SocketSet set, SDLNet_GenericSocket sock); + +/** + * Remove a TCP socket from a socket set. + * + * This is a small TCP-specific wrapper over SDLNet_DelSocket; please refer + * to that function's documentation. + * + * \param set the socket set to remove a socket from. + * \param sock the socket to remove from the set. + * \returns the total number of sockets contained in the set (after + * `sock`'s removal), or -1 if `sock` was not in the set. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_DelSocket + */ +SDL_FORCE_INLINE int SDLNet_TCP_DelSocket(SDLNet_SocketSet set, TCPsocket sock) +{ + return SDLNet_DelSocket(set, (SDLNet_GenericSocket)sock); +} + +/** + * Remove a UDP socket from a socket set. + * + * This is a small UDP-specific wrapper over SDLNet_DelSocket; please refer + * to that function's documentation. + * + * \param set the socket set to remove a socket from. + * \param sock the socket to remove from the set. + * \returns the total number of sockets contained in the set (after + * `sock`'s removal), or -1 if `sock` was not in the set. + * + * \since This function is available since SDL_net 2.0.0. + * + * \sa SDLNet_DelSocket + */ +SDL_FORCE_INLINE int SDLNet_UDP_DelSocket(SDLNet_SocketSet set, UDPsocket sock) +{ + return SDLNet_DelSocket(set, (SDLNet_GenericSocket)sock); +} + +/** + * Check a socket set for data availability. + * + * This function checks to see if data is available for reading on the given + * set of sockets. If 'timeout' is 0, it performs a quick poll, otherwise the + * function returns when either data is available for reading, or the timeout + * in milliseconds has elapsed, whichever occurs first. + * + * \param set the socket set to check for ready sockets. + * \param timeout the time to wait in milliseconds for new data to arrive. A + * timeout of zero checks for new data and returns without + * blocking. + * \returns the number of sockets ready for reading, or -1 if there was an + * error with the select() system call. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC int SDLCALL SDLNet_CheckSockets(SDLNet_SocketSet set, Uint32 timeout); + +/* !!! FIXME: wikiheaders.pl ignores macros, atm */ +/** + * See if a specific socket has data available after checking it in a set. + * + * After calling SDLNet_CheckSockets(), you can use this function on a + * socket that was in the socket set, to find out if data is available + * for reading. + * + * \param sock the socket to check. + * \returns non-zero if socket has new data available, zero otherwise. + * + * \since This function is available since SDL_net 2.0.0. + */ +#define SDLNet_SocketReady(sock) _SDLNet_SocketReady((SDLNet_GenericSocket)(sock)) +SDL_FORCE_INLINE int _SDLNet_SocketReady(SDLNet_GenericSocket sock) +{ + return (sock != NULL) && (sock->ready); +} + +/** + * Free a set of sockets allocated by SDLNet_AllocSocketSet(). + * + * When done with a socket set, call this function to free its resources. + * + * This only frees the socket set, not the individual sockets in the set, + * which would still (at some future point) need to be closed with + * SDLNet_TCP_Close or SDLNet_UDP_Close. + * + * \param set the socket set to free. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC void SDLCALL SDLNet_FreeSocketSet(SDLNet_SocketSet set); + + +/* Error reporting functions */ + +/** + * Set an error message to be retrieved with SDLNet_GetError. + * + * Generally you don't need to call this (SDL_net will use it internally to + * report errors), but it could be useful if you need to inject an error + * message of your own in here. + * + * \param fmt a printf-style format string for the error message. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC void SDLCALL SDLNet_SetError(const char *fmt, ...); + +/** + * Get the latest error message from SDL_net. + * + * The error message, depending on how SDL_net was built, may or may not be + * thread-local data. Sometimes things will set an error message when no + * failure was reported; the error string is only meaningful right after a + * public API reports a failure, and should be ignored otherwise. + * + * \returns the last set error message in UTF-8 encoding. + * + * \since This function is available since SDL_net 2.0.0. + */ +extern DECLSPEC const char * SDLCALL SDLNet_GetError(void); + +/* Inline functions to read/write network data */ + +/* Warning, most systems have data access alignment restrictions */ +#if defined(__i386__) || defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86) || defined(_M_AMD64) +#define SDL_DATA_ALIGNED 0 +#endif +#ifndef SDL_DATA_ALIGNED +#define SDL_DATA_ALIGNED 1 +#endif + +/* Write a 16/32-bit value to network packet buffer */ +#define SDLNet_Write16(value, areap) _SDLNet_Write16(value, areap) +#define SDLNet_Write32(value, areap) _SDLNet_Write32(value, areap) + +/* Read a 16/32-bit value from network packet buffer */ +#define SDLNet_Read16(areap) _SDLNet_Read16(areap) +#define SDLNet_Read32(areap) _SDLNet_Read32(areap) + +#if !defined(WITHOUT_SDL) && !SDL_DATA_ALIGNED + +SDL_FORCE_INLINE void _SDLNet_Write16(Uint16 value, void *areap) +{ + *(Uint16 *)areap = SDL_SwapBE16(value); +} + +SDL_FORCE_INLINE void _SDLNet_Write32(Uint32 value, void *areap) +{ + *(Uint32 *)areap = SDL_SwapBE32(value); +} + +SDL_FORCE_INLINE Uint16 _SDLNet_Read16(const void *areap) +{ + return SDL_SwapBE16(*(const Uint16 *)areap); +} + +SDL_FORCE_INLINE Uint32 _SDLNet_Read32(const void *areap) +{ + return SDL_SwapBE32(*(const Uint32 *)areap); +} + +#else /* !defined(WITHOUT_SDL) && !SDL_DATA_ALIGNED */ + +SDL_FORCE_INLINE void _SDLNet_Write16(Uint16 value, void *areap) +{ + Uint8 *area = (Uint8*)areap; + area[0] = (value >> 8) & 0xFF; + area[1] = value & 0xFF; +} + +SDL_FORCE_INLINE void _SDLNet_Write32(Uint32 value, void *areap) +{ + Uint8 *area = (Uint8*)areap; + area[0] = (value >> 24) & 0xFF; + area[1] = (value >> 16) & 0xFF; + area[2] = (value >> 8) & 0xFF; + area[3] = value & 0xFF; +} + +SDL_FORCE_INLINE Uint16 _SDLNet_Read16(const void *areap) +{ + const Uint8 *area = (const Uint8*)areap; + return ((Uint16)area[0]) << 8 | ((Uint16)area[1]); +} + +SDL_FORCE_INLINE Uint32 _SDLNet_Read32(const void *areap) +{ + const Uint8 *area = (const Uint8*)areap; + return ((Uint32)area[0]) << 24 | ((Uint32)area[1]) << 16 | ((Uint32)area[2]) << 8 | ((Uint32)area[3]); +} + +#endif /* !defined(WITHOUT_SDL) && !SDL_DATA_ALIGNED */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_NET_H_ */ diff --git a/vs/sdl2net/SDLnet.c b/vs/sdl2net/SDLnet.c new file mode 100644 index 00000000000..24eb05bf5bf --- /dev/null +++ b/vs/sdl2net/SDLnet.c @@ -0,0 +1,329 @@ +/* + SDL_net: An example cross-platform network library for use with SDL + Copyright (C) 1997-2022 Sam Lantinga + Copyright (C) 2012 Simeon Maxein + + 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. +*/ + +#include "SDLnetsys.h" +#include "SDL_net.h" + +#ifdef WITHOUT_SDL +#include +#include +#endif + +#if defined(SDL_BUILD_MAJOR_VERSION) && defined(SDL_COMPILE_TIME_ASSERT) +SDL_COMPILE_TIME_ASSERT(SDL_BUILD_MAJOR_VERSION, + SDL_NET_MAJOR_VERSION == SDL_BUILD_MAJOR_VERSION); +SDL_COMPILE_TIME_ASSERT(SDL_BUILD_MINOR_VERSION, + SDL_NET_MINOR_VERSION == SDL_BUILD_MINOR_VERSION); +SDL_COMPILE_TIME_ASSERT(SDL_BUILD_MICRO_VERSION, + SDL_NET_PATCHLEVEL == SDL_BUILD_MICRO_VERSION); +#endif + +#if defined(SDL_COMPILE_TIME_ASSERT) +SDL_COMPILE_TIME_ASSERT(SDL_NET_MAJOR_VERSION_min, SDL_NET_MAJOR_VERSION >= 0); +/* Limited only by the need to fit in SDL_version */ +SDL_COMPILE_TIME_ASSERT(SDL_NET_MAJOR_VERSION_max, SDL_NET_MAJOR_VERSION <= 255); + +SDL_COMPILE_TIME_ASSERT(SDL_NET_MINOR_VERSION_min, SDL_NET_MINOR_VERSION >= 0); +/* Limited only by the need to fit in SDL_version */ +SDL_COMPILE_TIME_ASSERT(SDL_NET_MINOR_VERSION_max, SDL_NET_MINOR_VERSION <= 255); + +SDL_COMPILE_TIME_ASSERT(SDL_NET_PATCHLEVEL_min, SDL_NET_PATCHLEVEL >= 0); +/* Limited by its encoding in SDL_VERSIONNUM and in the ABI versions */ +SDL_COMPILE_TIME_ASSERT(SDL_NET_PATCHLEVEL_max, SDL_NET_PATCHLEVEL <= 99); +#endif + +const SDLNet_version *SDLNet_Linked_Version(void) +{ + static SDLNet_version linked_version; + SDL_NET_VERSION(&linked_version); + return(&linked_version); +} + +/* Since the UNIX/Win32/BeOS code is so different from MacOS, + we'll just have two completely different sections here. +*/ +static int SDLNet_started = 0; + +#ifndef __USE_W32_SOCKETS +#include +#endif + +#ifndef __USE_W32_SOCKETS + +int SDLNet_GetLastError(void) +{ + #if defined(__OS2__) && !defined(__EMX__) + return sock_errno(); + #else + return errno; + #endif +} + +void SDLNet_SetLastError(int err) +{ + #if defined(__OS2__) && !defined(__EMX__) + (void) err; /* FIXME: OS2 doesn't have a function to reset socket errno */ + #else + errno = err; + #endif +} + +#endif + +static char errorbuf[1024]; + +void SDLCALL SDLNet_SetError(const char *fmt, ...) +{ + va_list argp; + va_start(argp, fmt); + SDL_vsnprintf(errorbuf, sizeof(errorbuf), fmt, argp); + va_end(argp); +#ifndef WITHOUT_SDL + SDL_SetError("%s", errorbuf); +#endif +} + +const char * SDLCALL SDLNet_GetError(void) +{ +#ifdef WITHOUT_SDL + return errorbuf; +#else + return SDL_GetError(); +#endif +} + +/* Initialize/Cleanup the network API */ +int SDLNet_Init(void) +{ + if ( !SDLNet_started ) { +#ifdef __USE_W32_SOCKETS + /* Start up the windows networking */ + WORD version_wanted = MAKEWORD(1,1); + WSADATA wsaData; + + if ( WSAStartup(version_wanted, &wsaData) != 0 ) { + SDLNet_SetError("Couldn't initialize Winsock 1.1\n"); + return(-1); + } +#elif defined(__OS2__) && !defined(__EMX__) + if (sock_init() < 0) { + SDLNet_SetError("Couldn't initialize IBM OS/2 sockets"); + return(-1); + } +#else + /* SIGPIPE is generated when a remote socket is closed */ + void (*handler)(int); + handler = signal(SIGPIPE, SIG_IGN); + if ( handler != SIG_DFL ) { + signal(SIGPIPE, handler); + } +#endif + } + ++SDLNet_started; + return(0); +} + +void SDLNet_Quit(void) +{ + if ( SDLNet_started == 0 ) { + return; + } + if ( --SDLNet_started == 0 ) { +#ifdef __USE_W32_SOCKETS + /* Clean up windows networking */ + if ( WSACleanup() == SOCKET_ERROR ) { + if ( WSAGetLastError() == WSAEINPROGRESS ) { + WSACleanup(); + } + } +#elif defined(__OS2__) && !defined(__EMX__) + /* -- nothing */ +#else + /* Restore the SIGPIPE handler */ + void (*handler)(int); + handler = signal(SIGPIPE, SIG_DFL); + if ( handler != SIG_IGN ) { + signal(SIGPIPE, handler); + } +#endif + } +} + +/* Resolve a host name and port to an IP address in network form */ +int SDLNet_ResolveHost(IPaddress *address, const char *host, Uint16 port) +{ + int retval = 0; + + /* Perform the actual host resolution */ + if ( host == NULL ) { + address->host = INADDR_ANY; + } else { + address->host = inet_addr(host); + if ( address->host == INADDR_NONE ) { + struct hostent *hp; + + hp = gethostbyname(host); + if ( hp ) { + SDL_memcpy(&address->host,hp->h_addr,hp->h_length); + } else { + retval = -1; + } + } + } + address->port = SDLNet_Read16(&port); + + /* Return the status */ + return(retval); +} + +/* Resolve an ip address to a host name in canonical form. + If the ip couldn't be resolved, this function returns NULL, + otherwise a pointer to a static buffer containing the hostname + is returned. Note that this function is not thread-safe. +*/ +/* Written by Miguel Angel Blanch. + * Main Programmer of Arianne RPG. + * http://come.to/arianne_rpg + */ +const char *SDLNet_ResolveIP(const IPaddress *ip) +{ + struct hostent *hp; + struct in_addr in; + + hp = gethostbyaddr((const char *)&ip->host, sizeof(ip->host), AF_INET); + if ( hp != NULL ) { + return hp->h_name; + } + + in.s_addr = ip->host; + return inet_ntoa(in); +} + +int SDLNet_GetLocalAddresses(IPaddress *addresses, int maxcount) +{ + int count = 0; +#ifdef SIOCGIFCONF +/* Defined on Mac OS X */ +#ifndef _SIZEOF_ADDR_IFREQ +#define _SIZEOF_ADDR_IFREQ sizeof +#endif + SOCKET sock; + struct ifconf conf; + char data[4096]; + struct ifreq *ifr; + struct sockaddr_in *sock_addr; + + sock = socket(AF_INET, SOCK_DGRAM, 0); + if ( sock == INVALID_SOCKET ) { + return 0; + } + + conf.ifc_len = sizeof(data); + conf.ifc_buf = (caddr_t) data; + if ( ioctl(sock, SIOCGIFCONF, &conf) < 0 ) { + closesocket(sock); + return 0; + } + + ifr = (struct ifreq*)data; + while ((char*)ifr < data+conf.ifc_len) { + if (ifr->ifr_addr.sa_family == AF_INET) { + if (count < maxcount) { + sock_addr = (struct sockaddr_in*)&ifr->ifr_addr; + addresses[count].host = sock_addr->sin_addr.s_addr; + addresses[count].port = sock_addr->sin_port; + } + ++count; + } + ifr = (struct ifreq*)((char*)ifr + _SIZEOF_ADDR_IFREQ(*ifr)); + } + closesocket(sock); +#elif defined(__WIN32__) + PIP_ADAPTER_INFO pAdapterInfo; + PIP_ADAPTER_INFO pAdapter; + PIP_ADDR_STRING pAddress; + DWORD dwRetVal = 0; + ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO); + + pAdapterInfo = (IP_ADAPTER_INFO *) SDL_malloc(sizeof (IP_ADAPTER_INFO)); + if (pAdapterInfo == NULL) { + return 0; + } + + if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == ERROR_BUFFER_OVERFLOW) { + pAdapterInfo = (IP_ADAPTER_INFO *) SDL_realloc(pAdapterInfo, ulOutBufLen); + if (pAdapterInfo == NULL) { + return 0; + } + dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen); + } + + if (dwRetVal == NO_ERROR) { + for (pAdapter = pAdapterInfo; pAdapter; pAdapter = pAdapter->Next) { + for (pAddress = &pAdapter->IpAddressList; pAddress; pAddress = pAddress->Next) { + if (count < maxcount) { + addresses[count].host = inet_addr(pAddress->IpAddress.String); + addresses[count].port = 0; + } + ++count; + } + } + } + SDL_free(pAdapterInfo); +#endif + return count; +} + +/* function versions for binary compatibility */ + +#undef SDLNet_Write16 +#undef SDLNet_Write32 +#undef SDLNet_Read16 +#undef SDLNet_Read32 + +/* Write a 16/32 bit value to network packet buffer */ +extern DECLSPEC void SDLCALL SDLNet_Write16(Uint16 value, void *area); +extern DECLSPEC void SDLCALL SDLNet_Write32(Uint32 value, void *area); + +/* Read a 16/32 bit value from network packet buffer */ +extern DECLSPEC Uint16 SDLCALL SDLNet_Read16(const void *area); +extern DECLSPEC Uint32 SDLCALL SDLNet_Read32(const void *area); + +void SDLNet_Write16(Uint16 value, void *areap) +{ + _SDLNet_Write16(value, areap); +} + +void SDLNet_Write32(Uint32 value, void *areap) +{ + _SDLNet_Write32(value, areap); +} + +Uint16 SDLNet_Read16(const void *areap) +{ + return _SDLNet_Read16(areap); +} + +Uint32 SDLNet_Read32(const void *areap) +{ + return _SDLNet_Read32(areap); +} diff --git a/vs/sdl2net/SDLnetTCP.c b/vs/sdl2net/SDLnetTCP.c new file mode 100644 index 00000000000..9fb00093887 --- /dev/null +++ b/vs/sdl2net/SDLnetTCP.c @@ -0,0 +1,293 @@ +/* + SDL_net: An example cross-platform network library for use with SDL + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#include "SDLnetsys.h" +#include "SDL_net.h" + +/* The network API for TCP sockets */ + +/* Since the UNIX/Win32/BeOS code is so different from MacOS, + we'll just have two completely different sections here. +*/ + +struct _TCPsocket { + int ready; + SOCKET channel; + IPaddress remoteAddress; + IPaddress localAddress; + int sflag; +}; + +/* Open a TCP network socket + If 'remote' is NULL, this creates a local server socket on the given port, + otherwise a TCP connection to the remote host and port is attempted. + The newly created socket is returned, or NULL if there was an error. +*/ +TCPsocket SDLNet_TCP_Open(IPaddress *ip) +{ + TCPsocket sock; + struct sockaddr_in sock_addr; + + /* Allocate a TCP socket structure */ + sock = (TCPsocket)SDL_malloc(sizeof(*sock)); + if ( sock == NULL ) { + SDLNet_SetError("Out of memory"); + goto error_return; + } + + /* Open the socket */ + sock->channel = socket(AF_INET, SOCK_STREAM, 0); + if ( sock->channel == INVALID_SOCKET ) { + SDLNet_SetError("Couldn't create socket"); + goto error_return; + } + + /* Connect to remote, or bind locally, as appropriate */ + if ( (ip->host != INADDR_NONE) && (ip->host != INADDR_ANY) ) { + + /* ######### Connecting to remote */ + SDL_memset(&sock_addr, 0, sizeof(sock_addr)); + sock_addr.sin_family = AF_INET; + sock_addr.sin_addr.s_addr = ip->host; + sock_addr.sin_port = ip->port; + + /* Connect to the remote host */ + if ( connect(sock->channel, (struct sockaddr *)&sock_addr, + sizeof(sock_addr)) == SOCKET_ERROR ) { + SDLNet_SetError("Couldn't connect to remote host"); + goto error_return; + } + sock->sflag = 0; + } else { + + /* ########## Binding locally */ + SDL_memset(&sock_addr, 0, sizeof(sock_addr)); + sock_addr.sin_family = AF_INET; + sock_addr.sin_addr.s_addr = INADDR_ANY; + sock_addr.sin_port = ip->port; + +/* + * Windows gets bad mojo with SO_REUSEADDR: + * http://www.devolution.com/pipermail/sdl/2005-September/070491.html + * --ryan. + */ +#ifndef WIN32 + /* allow local address reuse */ + { int yes = 1; + setsockopt(sock->channel, SOL_SOCKET, SO_REUSEADDR, (char*)&yes, sizeof(yes)); + } +#endif + + /* Bind the socket for listening */ + if ( bind(sock->channel, (struct sockaddr *)&sock_addr, + sizeof(sock_addr)) == SOCKET_ERROR ) { + SDLNet_SetError("Couldn't bind to local port"); + goto error_return; + } + if ( listen(sock->channel, 5) == SOCKET_ERROR ) { + SDLNet_SetError("Couldn't listen to local port"); + goto error_return; + } + + /* Set the socket to non-blocking mode for accept() */ +#if defined(__BEOS__) && defined(SO_NONBLOCK) + /* On BeOS r5 there is O_NONBLOCK but it's for files only */ + { + long b = 1; + setsockopt(sock->channel, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b)); + } +#elif defined(O_NONBLOCK) + { + fcntl(sock->channel, F_SETFL, O_NONBLOCK); + } +#elif defined(WIN32) + { + unsigned long mode = 1; + ioctlsocket (sock->channel, FIONBIO, &mode); + } +#elif defined(__OS2__) + { + int dontblock = 1; + ioctl(sock->channel, FIONBIO, &dontblock); + } +#else +#warning How do we set non-blocking mode on other operating systems? +#endif + sock->sflag = 1; + } + sock->ready = 0; + +#ifdef TCP_NODELAY + /* Set the nodelay TCP option for real-time games */ + { int yes = 1; + setsockopt(sock->channel, IPPROTO_TCP, TCP_NODELAY, (char*)&yes, sizeof(yes)); + } +#else +#warning Building without TCP_NODELAY +#endif /* TCP_NODELAY */ + + /* Fill in the channel host address */ + sock->remoteAddress.host = sock_addr.sin_addr.s_addr; + sock->remoteAddress.port = sock_addr.sin_port; + + /* The socket is ready */ + return(sock); + +error_return: + SDLNet_TCP_Close(sock); + return(NULL); +} + +/* Accept an incoming connection on the given server socket. + The newly created socket is returned, or NULL if there was an error. +*/ +TCPsocket SDLNet_TCP_Accept(TCPsocket server) +{ + TCPsocket sock; + struct sockaddr_in sock_addr; + socklen_t sock_alen; + + /* Only server sockets can accept */ + if ( ! server->sflag ) { + SDLNet_SetError("Only server sockets can accept()"); + return(NULL); + } + server->ready = 0; + + /* Allocate a TCP socket structure */ + sock = (TCPsocket)SDL_malloc(sizeof(*sock)); + if ( sock == NULL ) { + SDLNet_SetError("Out of memory"); + goto error_return; + } + + /* Accept a new TCP connection on a server socket */ + sock_alen = sizeof(sock_addr); + sock->channel = accept(server->channel, (struct sockaddr *)&sock_addr, + &sock_alen); + if ( sock->channel == INVALID_SOCKET ) { + SDLNet_SetError("accept() failed"); + goto error_return; + } +#ifdef WIN32 + { + /* passing a zero value, socket mode set to block on */ + unsigned long mode = 0; + ioctlsocket (sock->channel, FIONBIO, &mode); + } +#elif defined(O_NONBLOCK) + { + int flags = fcntl(sock->channel, F_GETFL, 0); + fcntl(sock->channel, F_SETFL, flags & ~O_NONBLOCK); + } +#endif /* WIN32 */ + sock->remoteAddress.host = sock_addr.sin_addr.s_addr; + sock->remoteAddress.port = sock_addr.sin_port; + + sock->sflag = 0; + sock->ready = 0; + + /* The socket is ready */ + return(sock); + +error_return: + SDLNet_TCP_Close(sock); + return(NULL); +} + +/* Get the IP address of the remote system associated with the socket. + If the socket is a server socket, this function returns NULL. +*/ +IPaddress *SDLNet_TCP_GetPeerAddress(TCPsocket sock) +{ + if ( sock->sflag ) { + return(NULL); + } + return(&sock->remoteAddress); +} + +/* Send 'len' bytes of 'data' over the non-server socket 'sock' + This function returns the actual amount of data sent. If the return value + is less than the amount of data sent, then either the remote connection was + closed, or an unknown socket error occurred. +*/ +int SDLNet_TCP_Send(TCPsocket sock, const void *datap, int len) +{ + const Uint8 *data = (const Uint8 *)datap; /* For pointer arithmetic */ + int sent, left; + + /* Server sockets are for accepting connections only */ + if ( sock->sflag ) { + SDLNet_SetError("Server sockets cannot send"); + return(-1); + } + + /* Keep sending data until it's sent or an error occurs */ + left = len; + sent = 0; + SDLNet_SetLastError(0); + do { + len = send(sock->channel, (const char *) data, left, 0); + if ( len > 0 ) { + sent += len; + left -= len; + data += len; + } + } while ( (left > 0) && ((len > 0) || (SDLNet_GetLastError() == EINTR)) ); + + return(sent); +} + +/* Receive up to 'maxlen' bytes of data over the non-server socket 'sock', + and store them in the buffer pointed to by 'data'. + This function returns the actual amount of data received. If the return + value is less than or equal to zero, then either the remote connection was + closed, or an unknown socket error occurred. +*/ +int SDLNet_TCP_Recv(TCPsocket sock, void *data, int maxlen) +{ + int len; + + /* Server sockets are for accepting connections only */ + if ( sock->sflag ) { + SDLNet_SetError("Server sockets cannot receive"); + return(-1); + } + + SDLNet_SetLastError(0); + do { + len = recv(sock->channel, (char *) data, maxlen, 0); + } while ( SDLNet_GetLastError() == EINTR ); + + sock->ready = 0; + return(len); +} + +/* Close a TCP network socket */ +void SDLNet_TCP_Close(TCPsocket sock) +{ + if ( sock != NULL ) { + if ( sock->channel != INVALID_SOCKET ) { + closesocket(sock->channel); + } + SDL_free(sock); + } +} diff --git a/vs/sdl2net/SDLnetUDP.c b/vs/sdl2net/SDLnetUDP.c new file mode 100644 index 00000000000..ee4e46b5170 --- /dev/null +++ b/vs/sdl2net/SDLnetUDP.c @@ -0,0 +1,520 @@ +/* + SDL_net: An example cross-platform network library for use with SDL + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#include "SDLnetsys.h" +#include "SDL_net.h" + +#if defined(__WIN32__) || defined(__OS2__) +#define srandom srand +#define random rand +#endif + +struct UDP_channel { + int numbound; + IPaddress address[SDLNET_MAX_UDPADDRESSES]; +}; + +struct _UDPsocket { + int ready; + SOCKET channel; + IPaddress address; + + struct UDP_channel binding[SDLNET_MAX_UDPCHANNELS]; + + /* For debugging purposes */ + int packetloss; +}; + +/* Allocate/free a single UDP packet 'size' bytes long. + The new packet is returned, or NULL if the function ran out of memory. + */ +UDPpacket *SDLNet_AllocPacket(int size) +{ + UDPpacket *packet; + int error; + + error = 1; + packet = (UDPpacket *)SDL_malloc(sizeof(*packet)); + if ( packet != NULL ) { + packet->maxlen = size; + packet->data = (Uint8 *)SDL_malloc(size); + if ( packet->data != NULL ) { + error = 0; + } + } + if ( error ) { + SDLNet_SetError("Out of memory"); + SDLNet_FreePacket(packet); + packet = NULL; + } + return(packet); +} + +int SDLNet_ResizePacket(UDPpacket *packet, int newsize) +{ + Uint8 *newdata; + + newdata = (Uint8 *)SDL_malloc(newsize); + if ( newdata != NULL ) { + SDL_free(packet->data); + packet->data = newdata; + packet->maxlen = newsize; + } + return(packet->maxlen); +} + +void SDLNet_FreePacket(UDPpacket *packet) +{ + if ( packet ) { + SDL_free(packet->data); + SDL_free(packet); + } +} + +/* Allocate/Free a UDP packet vector (array of packets) of 'howmany' packets, + each 'size' bytes long. + A pointer to the packet array is returned, or NULL if the function ran out + of memory. + */ +UDPpacket **SDLNet_AllocPacketV(int howmany, int size) +{ + UDPpacket **packetV; + + packetV = (UDPpacket **)SDL_malloc((howmany+1)*sizeof(*packetV)); + if ( packetV != NULL ) { + int i; + for ( i=0; ichannel = socket(AF_INET, SOCK_DGRAM, 0); + if ( sock->channel == INVALID_SOCKET ) + { + SDLNet_SetError("Couldn't create socket"); + goto error_return; + } + + /* Bind locally, if appropriate */ + sock_addr.sin_family = AF_INET; + sock_addr.sin_addr.s_addr = INADDR_ANY; + sock_addr.sin_port = SDLNet_Read16(&port); + + /* Bind the socket for listening */ + if ( bind(sock->channel, (struct sockaddr *)&sock_addr, + sizeof(sock_addr)) == SOCKET_ERROR ) { + SDLNet_SetError("Couldn't bind to local port"); + goto error_return; + } + + /* Get the bound address and port */ + sock_len = sizeof(sock_addr); + if ( getsockname(sock->channel, (struct sockaddr *)&sock_addr, &sock_len) < 0 ) { + SDLNet_SetError("Couldn't get socket address"); + goto error_return; + } + + /* Fill in the channel host address */ + sock->address.host = sock_addr.sin_addr.s_addr; + sock->address.port = sock_addr.sin_port; + +#ifdef SO_BROADCAST + /* Allow LAN broadcasts with the socket */ + { int yes = 1; + setsockopt(sock->channel, SOL_SOCKET, SO_BROADCAST, (char*)&yes, sizeof(yes)); + } +#endif +#ifdef IP_ADD_MEMBERSHIP + /* Receive LAN multicast packets on 224.0.0.1 + This automatically works on Mac OS X, Linux and BSD, but needs + this code on Windows. + */ + /* A good description of multicast can be found here: + http://www.docs.hp.com/en/B2355-90136/ch05s05.html + */ + /* FIXME: Add support for joining arbitrary groups to the API */ + { + struct ip_mreq g; + + g.imr_multiaddr.s_addr = inet_addr("224.0.0.1"); + g.imr_interface.s_addr = INADDR_ANY; + setsockopt(sock->channel, IPPROTO_IP, IP_ADD_MEMBERSHIP, + (char*)&g, sizeof(g)); + } +#endif + + /* The socket is ready */ + return(sock); + +error_return: + SDLNet_UDP_Close(sock); + return(NULL); +} + +void SDLNet_UDP_SetPacketLoss(UDPsocket sock, int percent) +{ + /* FIXME: We may want this behavior to be reproducible + but there isn't a portable reentrant random + number generator with good randomness. + */ + srandom(time(NULL)); + + if (percent < 0) { + percent = 0; + } else if (percent > 100) { + percent = 100; + } + sock->packetloss = percent; +} + +/* Verify that the channel is in the valid range */ +static int ValidChannel(int channel) +{ + if ( (channel < 0) || (channel >= SDLNET_MAX_UDPCHANNELS) ) { + SDLNet_SetError("Invalid channel"); + return(0); + } + return(1); +} + +/* Bind the address 'address' to the requested channel on the UDP socket. + If the channel is -1, then the first unbound channel that has not yet + been bound to the maximum number of addresses will be bound with + the given address as it's primary address. + If the channel is already bound, this new address will be added to the + list of valid source addresses for packets arriving on the channel. + If the channel is not already bound, then the address becomes the primary + address, to which all outbound packets on the channel are sent. + This function returns the channel which was bound, or -1 on error. +*/ +int SDLNet_UDP_Bind(UDPsocket sock, int channel, const IPaddress *address) +{ + struct UDP_channel *binding; + + if ( sock == NULL ) { + SDLNet_SetError("Passed a NULL socket"); + return(-1); + } + + if ( channel == -1 ) { + for ( channel=0; channel < SDLNET_MAX_UDPCHANNELS; ++channel ) { + binding = &sock->binding[channel]; + if ( binding->numbound < SDLNET_MAX_UDPADDRESSES ) { + break; + } + } + } else { + if ( ! ValidChannel(channel) ) { + return(-1); + } + binding = &sock->binding[channel]; + } + if ( binding->numbound == SDLNET_MAX_UDPADDRESSES ) { + SDLNet_SetError("No room for new addresses"); + return(-1); + } + binding->address[binding->numbound++] = *address; + return(channel); +} + +/* Unbind all addresses from the given channel */ +void SDLNet_UDP_Unbind(UDPsocket sock, int channel) +{ + if ( (channel >= 0) && (channel < SDLNET_MAX_UDPCHANNELS) ) { + sock->binding[channel].numbound = 0; + } +} + +/* Get the primary IP address of the remote system associated with the + socket and channel. + If the channel is not bound, this function returns NULL. + */ +IPaddress *SDLNet_UDP_GetPeerAddress(UDPsocket sock, int channel) +{ + IPaddress *address; + + address = NULL; + switch (channel) { + case -1: + /* Return the actual address of the socket */ + address = &sock->address; + break; + default: + /* Return the address of the bound channel */ + if ( ValidChannel(channel) && + (sock->binding[channel].numbound > 0) ) { + address = &sock->binding[channel].address[0]; + } + break; + } + return(address); +} + +/* Send a vector of packets to the the channels specified within the packet. + If the channel specified in the packet is -1, the packet will be sent to + the address in the 'src' member of the packet. + Each packet will be updated with the status of the packet after it has + been sent, -1 if the packet send failed. + This function returns the number of packets sent. +*/ +int SDLNet_UDP_SendV(UDPsocket sock, UDPpacket **packets, int npackets) +{ + int numsent, i, j; + struct UDP_channel *binding; + int status; + int sock_len; + struct sockaddr_in sock_addr; + + if ( sock == NULL ) { + SDLNet_SetError("Passed a NULL socket"); + return(0); + } + + /* Set up the variables to send packets */ + sock_len = sizeof(sock_addr); + + numsent = 0; + for ( i=0; ipacketloss) { + if ((random()%100) <= sock->packetloss) { + packets[i]->status = packets[i]->len; + ++numsent; + continue; + } + } + + /* if channel is < 0, then use channel specified in sock */ + + if ( packets[i]->channel < 0 ) + { + sock_addr.sin_addr.s_addr = packets[i]->address.host; + sock_addr.sin_port = packets[i]->address.port; + sock_addr.sin_family = AF_INET; + status = sendto(sock->channel, + packets[i]->data, packets[i]->len, 0, + (struct sockaddr *)&sock_addr,sock_len); + if ( status >= 0 ) + { + packets[i]->status = status; + ++numsent; + } + } + else + { + /* Send to each of the bound addresses on the channel */ +#ifdef DEBUG_NET + printf("SDLNet_UDP_SendV sending packet to channel = %d\n", packets[i]->channel ); +#endif + + binding = &sock->binding[packets[i]->channel]; + + for ( j=binding->numbound-1; j>=0; --j ) + { + sock_addr.sin_addr.s_addr = binding->address[j].host; + sock_addr.sin_port = binding->address[j].port; + sock_addr.sin_family = AF_INET; + status = sendto(sock->channel, + packets[i]->data, packets[i]->len, 0, + (struct sockaddr *)&sock_addr,sock_len); + if ( status >= 0 ) + { + packets[i]->status = status; + ++numsent; + } + } + } + } + + return(numsent); +} + +int SDLNet_UDP_Send(UDPsocket sock, int channel, UDPpacket *packet) +{ + /* This is silly, but... */ + packet->channel = channel; + return(SDLNet_UDP_SendV(sock, &packet, 1)); +} + +/* Returns true if a socket is has data available for reading right now */ +static int SocketReady(SOCKET sock) +{ + int retval = 0; + struct timeval tv; + fd_set mask; + + /* Check the file descriptors for available data */ + do { + SDLNet_SetLastError(0); + + /* Set up the mask of file descriptors */ + FD_ZERO(&mask); + FD_SET(sock, &mask); + + /* Set up the timeout */ + tv.tv_sec = 0; + tv.tv_usec = 0; + + /* Look! */ + retval = select(sock+1, &mask, NULL, NULL, &tv); + } while ( SDLNet_GetLastError() == EINTR ); + + return(retval == 1); +} + +/* Receive a vector of pending packets from the UDP socket. + The returned packets contain the source address and the channel they arrived + on. If they did not arrive on a bound channel, the the channel will be set + to -1. + This function returns the number of packets read from the network, or -1 + on error. This function does not block, so can return 0 packets pending. +*/ +int SDLNet_UDP_RecvV(UDPsocket sock, UDPpacket **packets) +{ + int numrecv, i, j; + struct UDP_channel *binding; + socklen_t sock_len; + struct sockaddr_in sock_addr; + + if ( sock == NULL ) { + return(0); + } + + numrecv = 0; + while ( packets[numrecv] && SocketReady(sock->channel) ) + { + UDPpacket *packet; + + packet = packets[numrecv]; + + sock_len = sizeof(sock_addr); + packet->status = recvfrom(sock->channel, + packet->data, packet->maxlen, 0, + (struct sockaddr *)&sock_addr, + &sock_len); + if ( packet->status >= 0 ) { + packet->len = packet->status; + packet->address.host = sock_addr.sin_addr.s_addr; + packet->address.port = sock_addr.sin_port; + packet->channel = -1; + + for (i=(SDLNET_MAX_UDPCHANNELS-1); i>=0; --i ) + { + binding = &sock->binding[i]; + + for ( j=binding->numbound-1; j>=0; --j ) + { + if ( (packet->address.host == binding->address[j].host) && + (packet->address.port == binding->address[j].port) ) + { + packet->channel = i; + goto foundit; /* break twice */ + } + } + } +foundit: + ++numrecv; + } + else + { + packet->len = 0; + } + } + + sock->ready = 0; + + return(numrecv); +} + +/* Receive a single packet from the UDP socket. + The returned packet contains the source address and the channel it arrived + on. If it did not arrive on a bound channel, the the channel will be set + to -1. + This function returns the number of packets read from the network, or -1 + on error. This function does not block, so can return 0 packets pending. +*/ +int SDLNet_UDP_Recv(UDPsocket sock, UDPpacket *packet) +{ + UDPpacket *packets[2]; + + /* Receive a packet array of 1 */ + packets[0] = packet; + packets[1] = NULL; + return(SDLNet_UDP_RecvV(sock, packets)); +} + +/* Close a UDP network socket */ +void SDLNet_UDP_Close(UDPsocket sock) +{ + if ( sock != NULL ) { + if ( sock->channel != INVALID_SOCKET ) { + closesocket(sock->channel); + } + SDL_free(sock); + } +} diff --git a/vs/sdl2net/SDLnetselect.c b/vs/sdl2net/SDLnetselect.c new file mode 100644 index 00000000000..8513c3a85d3 --- /dev/null +++ b/vs/sdl2net/SDLnetselect.c @@ -0,0 +1,160 @@ +/* + SDL_net: An example cross-platform network library for use with SDL + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#include "SDLnetsys.h" +#include "SDL_net.h" + +/* The select() API for network sockets */ + +struct SDLNet_Socket { + int ready; + SOCKET channel; +}; + +struct _SDLNet_SocketSet { + int numsockets; + int maxsockets; + struct SDLNet_Socket **sockets; +}; + +/* Allocate a socket set for use with SDLNet_CheckSockets() + This returns a socket set for up to 'maxsockets' sockets, or NULL if + the function ran out of memory. + */ +SDLNet_SocketSet SDLNet_AllocSocketSet(int maxsockets) +{ + struct _SDLNet_SocketSet *set; + int i; + + set = (struct _SDLNet_SocketSet *)SDL_malloc(sizeof(*set)); + if ( set != NULL ) { + set->numsockets = 0; + set->maxsockets = maxsockets; + set->sockets = (struct SDLNet_Socket **)SDL_malloc + (maxsockets*sizeof(*set->sockets)); + if ( set->sockets != NULL ) { + for ( i=0; isockets[i] = NULL; + } + } else { + SDL_free(set); + set = NULL; + } + } + return(set); +} + +/* Add a socket to a set of sockets to be checked for available data */ +int SDLNet_AddSocket(SDLNet_SocketSet set, SDLNet_GenericSocket sock) +{ + if ( sock != NULL ) { + if ( set->numsockets == set->maxsockets ) { + SDLNet_SetError("socketset is full"); + return(-1); + } + set->sockets[set->numsockets++] = (struct SDLNet_Socket *)sock; + } + return(set->numsockets); +} + +/* Remove a socket from a set of sockets to be checked for available data */ +int SDLNet_DelSocket(SDLNet_SocketSet set, SDLNet_GenericSocket sock) +{ + int i; + + if ( sock != NULL ) { + for ( i=0; inumsockets; ++i ) { + if ( set->sockets[i] == (struct SDLNet_Socket *)sock ) { + break; + } + } + if ( i == set->numsockets ) { + SDLNet_SetError("socket not found in socketset"); + return(-1); + } + --set->numsockets; + for ( ; inumsockets; ++i ) { + set->sockets[i] = set->sockets[i+1]; + } + } + return(set->numsockets); +} + +/* This function checks to see if data is available for reading on the + given set of sockets. If 'timeout' is 0, it performs a quick poll, + otherwise the function returns when either data is available for + reading, or the timeout in milliseconds has elapsed, which ever occurs + first. This function returns the number of sockets ready for reading, + or -1 if there was an error with the select() system call. +*/ +int SDLNet_CheckSockets(SDLNet_SocketSet set, Uint32 timeout) +{ + int i; + SOCKET maxfd; + int retval; + struct timeval tv; + fd_set mask; + + /* Find the largest file descriptor */ + maxfd = 0; + for ( i=set->numsockets-1; i>=0; --i ) { + if ( set->sockets[i]->channel > maxfd ) { + maxfd = set->sockets[i]->channel; + } + } + + /* Check the file descriptors for available data */ + do { + SDLNet_SetLastError(0); + + /* Set up the mask of file descriptors */ + FD_ZERO(&mask); + for ( i=set->numsockets-1; i>=0; --i ) { + FD_SET(set->sockets[i]->channel, &mask); + } + + /* Set up the timeout */ + tv.tv_sec = timeout/1000; + tv.tv_usec = (timeout%1000)*1000; + + /* Look! */ + retval = select(maxfd+1, &mask, NULL, NULL, &tv); + } while ( SDLNet_GetLastError() == EINTR ); + + /* Mark all file descriptors ready that have data available */ + if ( retval > 0 ) { + for ( i=set->numsockets-1; i>=0; --i ) { + if ( FD_ISSET(set->sockets[i]->channel, &mask) ) { + set->sockets[i]->ready = 1; + } + } + } + return(retval); +} + +/* Free a set of sockets allocated by SDL_NetAllocSocketSet() */ +void SDLNet_FreeSocketSet(SDLNet_SocketSet set) +{ + if ( set ) { + SDL_free(set->sockets); + SDL_free(set); + } +} diff --git a/vs/sdl2net/SDLnetsys.h b/vs/sdl2net/SDLnetsys.h new file mode 100644 index 00000000000..825d1cc5eb9 --- /dev/null +++ b/vs/sdl2net/SDLnetsys.h @@ -0,0 +1,94 @@ +/* + SDL_net: An example cross-platform network library for use with SDL + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/* Include normal system headers */ +#if defined(__APPLE__) && !defined(_DARWIN_C_SOURCE) +#define _DARWIN_C_SOURCE +#endif +#include +#include +#include +#include + +#if defined(__OS2__) && !defined(__EMX__) +#include +#else +#include +#endif + +/* Include system network headers */ +#if defined(__WIN32__) || defined(WIN32) +#define __USE_W32_SOCKETS +#include +#include +#include +#else /* UNIX */ +#ifdef __OS2__ +#include +#endif +#include +#ifdef __FreeBSD__ +#include +#endif +#include +#include +#include +#include +#include +#ifndef __BEOS__ +#include +#endif +#include +#include +#include +#include +#endif /* WIN32 */ + +#ifdef __OS2__ +typedef int socklen_t; +#elif 0 +/* FIXME: What platforms need this? */ +typedef Uint32 socklen_t; +#endif + +/* System-dependent definitions */ +#ifndef __USE_W32_SOCKETS +#ifdef __OS2__ +#define closesocket soclose +#else /* !__OS2__ */ +#define closesocket close +#endif /* __OS2__ */ +#define SOCKET int +#define INVALID_SOCKET -1 +#define SOCKET_ERROR -1 +#endif /* __USE_W32_SOCKETS */ + +#ifdef __USE_W32_SOCKETS +#define SDLNet_GetLastError WSAGetLastError +#define SDLNet_SetLastError WSASetLastError +#ifndef EINTR +#define EINTR WSAEINTR +#endif +#else +int SDLNet_GetLastError(void); +void SDLNet_SetLastError(int err); +#endif + diff --git a/vs/sdl2net/VisualC/SDL_net.sln b/vs/sdl2net/VisualC/SDL_net.sln new file mode 100644 index 00000000000..2f563b15b12 --- /dev/null +++ b/vs/sdl2net/VisualC/SDL_net.sln @@ -0,0 +1,36 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL2_net", "SDL_net.vcxproj", "{8AB3504F-5E58-4910-AFE8-7A1E595AC3F4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "showinterfaces", "showinterfaces\showinterfaces.vcxproj", "{7B1F60CD-2A09-4514-937C-D9DD044428FB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8AB3504F-5E58-4910-AFE8-7A1E595AC3F4}.Debug|Win32.ActiveCfg = Debug|Win32 + {8AB3504F-5E58-4910-AFE8-7A1E595AC3F4}.Debug|Win32.Build.0 = Debug|Win32 + {8AB3504F-5E58-4910-AFE8-7A1E595AC3F4}.Debug|x64.ActiveCfg = Debug|x64 + {8AB3504F-5E58-4910-AFE8-7A1E595AC3F4}.Debug|x64.Build.0 = Debug|x64 + {8AB3504F-5E58-4910-AFE8-7A1E595AC3F4}.Release|Win32.ActiveCfg = Release|Win32 + {8AB3504F-5E58-4910-AFE8-7A1E595AC3F4}.Release|Win32.Build.0 = Release|Win32 + {8AB3504F-5E58-4910-AFE8-7A1E595AC3F4}.Release|x64.ActiveCfg = Release|x64 + {8AB3504F-5E58-4910-AFE8-7A1E595AC3F4}.Release|x64.Build.0 = Release|x64 + {7B1F60CD-2A09-4514-937C-D9DD044428FB}.Debug|Win32.ActiveCfg = Debug|Win32 + {7B1F60CD-2A09-4514-937C-D9DD044428FB}.Debug|Win32.Build.0 = Debug|Win32 + {7B1F60CD-2A09-4514-937C-D9DD044428FB}.Debug|x64.ActiveCfg = Debug|x64 + {7B1F60CD-2A09-4514-937C-D9DD044428FB}.Debug|x64.Build.0 = Debug|x64 + {7B1F60CD-2A09-4514-937C-D9DD044428FB}.Release|Win32.ActiveCfg = Release|Win32 + {7B1F60CD-2A09-4514-937C-D9DD044428FB}.Release|Win32.Build.0 = Release|Win32 + {7B1F60CD-2A09-4514-937C-D9DD044428FB}.Release|x64.ActiveCfg = Release|x64 + {7B1F60CD-2A09-4514-937C-D9DD044428FB}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/vs/sdl2net/VisualC/SDL_net.vcxproj b/vs/sdl2net/VisualC/SDL_net.vcxproj new file mode 100644 index 00000000000..9876903e3fe --- /dev/null +++ b/vs/sdl2net/VisualC/SDL_net.vcxproj @@ -0,0 +1,242 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + SDL2_net + {8AB3504F-5E58-4910-AFE8-7A1E595AC3F4} + SDL_net + + + + DynamicLibrary + + + DynamicLibrary + + + DynamicLibrary + + + DynamicLibrary + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)\$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)\$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)\$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(SolutionDir)\$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + $(SolutionDir)..\..\SDL\include;$(IncludePath) + $(SolutionDir)..\..\SDL\VisualC\$(PlatformName)\$(Configuration);$(LibraryPath) + + + $(SolutionDir)..\..\SDL\include;$(IncludePath) + $(SolutionDir)..\..\SDL\VisualC\$(PlatformName)\$(Configuration);$(LibraryPath) + + + $(SolutionDir)..\..\SDL\include;$(IncludePath) + $(SolutionDir)..\..\SDL\VisualC\$(PlatformName)\$(Configuration);$(LibraryPath) + + + $(SolutionDir)..\..\SDL\include;$(IncludePath) + $(SolutionDir)..\..\SDL\VisualC\$(PlatformName)\$(Configuration);$(LibraryPath) + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/SDL2_net.tlb + + + + + Disabled + DLL_EXPORT;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + StreamingSIMDExtensions + + + _DEBUG;%(PreprocessorDefinitions) + + + ws2_32.lib;iphlpapi.lib;SDL2.lib;%(AdditionalDependencies) + true + Windows + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/SDL2_net.tlb + + + + + Disabled + DLL_EXPORT;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + OldStyle + StreamingSIMDExtensions + + + _DEBUG;%(PreprocessorDefinitions) + + + ws2_32.lib;iphlpapi.lib;SDL2.lib;%(AdditionalDependencies) + true + Windows + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/SDL2_net.tlb + + + + + DLL_EXPORT;WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + StreamingSIMDExtensions + + + NDEBUG;%(PreprocessorDefinitions) + + + ws2_32.lib;iphlpapi.lib;SDL2.lib;%(AdditionalDependencies) + Windows + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Release/SDL2_net.tlb + + + + + DLL_EXPORT;WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + StreamingSIMDExtensions + + + NDEBUG;%(PreprocessorDefinitions) + + + ws2_32.lib;iphlpapi.lib;SDL2.lib;%(AdditionalDependencies) + Windows + + + + + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + + + + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + \ No newline at end of file diff --git a/vs/sdl2net/VisualC/SDL_net.vcxproj.filters b/vs/sdl2net/VisualC/SDL_net.vcxproj.filters new file mode 100644 index 00000000000..a4b59dc1ad0 --- /dev/null +++ b/vs/sdl2net/VisualC/SDL_net.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {2cc01156-0219-4532-b5cc-4deb572c8d16} + + + {64a63be2-c42b-4b99-a06a-61d4cc4efa21} + + + + + Sources + + + Sources + + + Sources + + + Sources + + + + + Sources + + + Public Headers + + + + + Sources + + + \ No newline at end of file diff --git a/vs/sdl2net/VisualC/Version.rc b/vs/sdl2net/VisualC/Version.rc new file mode 100644 index 00000000000..fc72548f251 --- /dev/null +++ b/vs/sdl2net/VisualC/Version.rc @@ -0,0 +1,105 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winresrc.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 2,2,0,0 + PRODUCTVERSION 2,2,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "\0" + VALUE "FileDescription", "SDL_net\0" + VALUE "FileVersion", "2, 2, 0, 0\0" + VALUE "InternalName", "SDL_net\0" + VALUE "LegalCopyright", "Copyright 2022 Sam Lantinga\0" + VALUE "OriginalFilename", "SDL_net.dll\0" + VALUE "ProductName", "Simple DirectMedia Layer\0" + VALUE "ProductVersion", "2, 2, 0, 0\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/vs/sdl2net/VisualC/clean.sh b/vs/sdl2net/VisualC/clean.sh new file mode 100644 index 00000000000..f084be5d55b --- /dev/null +++ b/vs/sdl2net/VisualC/clean.sh @@ -0,0 +1,3 @@ +#!/bin/sh +find . -type f \( -name '*.user' -o -name '*.sdf' -o -name '*.ncb' -o -name '*.suo' \) -print -delete +rm -rvf Win32 */Win32 x64 */x64 diff --git a/vs/sdl2net/VisualC/resource.h b/vs/sdl2net/VisualC/resource.h new file mode 100644 index 00000000000..7c822cff2a0 --- /dev/null +++ b/vs/sdl2net/VisualC/resource.h @@ -0,0 +1,15 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by Version.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/vs/sdl2net/Xcode/Info-Framework.plist b/vs/sdl2net/Xcode/Info-Framework.plist new file mode 100644 index 00000000000..acd71ca8c3c --- /dev/null +++ b/vs/sdl2net/Xcode/Info-Framework.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + SDL2_net + CFBundleIdentifier + org.libsdl.SDL2-net + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + SDL2_net + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.2.0 + CFBundleVersion + 2.2.0 + + diff --git a/vs/sdl2net/Xcode/SDL_net.xcodeproj/project.pbxproj b/vs/sdl2net/Xcode/SDL_net.xcodeproj/project.pbxproj new file mode 100644 index 00000000000..45cb6e2a48a --- /dev/null +++ b/vs/sdl2net/Xcode/SDL_net.xcodeproj/project.pbxproj @@ -0,0 +1,524 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 7F1CA4C62854D7A400FE6C2E /* CMake in Resources */ = {isa = PBXBuildFile; fileRef = 7F1CA4C12854D77600FE6C2E /* CMake */; }; + BE48FF5807AFA9A800BB41DA /* SDL_net.h in Headers */ = {isa = PBXBuildFile; fileRef = 1014BAEA010A4B677F000001 /* SDL_net.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE48FF5C07AFA9A800BB41DA /* SDLnet.c in Sources */ = {isa = PBXBuildFile; fileRef = 1014BAEB010A4B677F000001 /* SDLnet.c */; }; + BE48FF5D07AFA9A800BB41DA /* SDLnetselect.c in Sources */ = {isa = PBXBuildFile; fileRef = 1014BAEC010A4B677F000001 /* SDLnetselect.c */; }; + BE48FF5E07AFA9A800BB41DA /* SDLnetTCP.c in Sources */ = {isa = PBXBuildFile; fileRef = 1014BAED010A4B677F000001 /* SDLnetTCP.c */; }; + BE48FF5F07AFA9A800BB41DA /* SDLnetUDP.c in Sources */ = {isa = PBXBuildFile; fileRef = 1014BAEE010A4B677F000001 /* SDLnetUDP.c */; }; + BE48FF6707AFA9A800BB41DA /* SDLnetsys.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E06A2830119C8317F000001 /* SDLnetsys.h */; }; + BE48FF6907AFA9A800BB41DA /* SDLnet.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E06A2810119C8317F000001 /* SDLnet.c */; }; + BE48FF6A07AFA9A800BB41DA /* SDLnetselect.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E06A2820119C8317F000001 /* SDLnetselect.c */; }; + BE48FF6B07AFA9A800BB41DA /* SDLnetTCP.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E06A2840119C8317F000001 /* SDLnetTCP.c */; }; + BE48FF6C07AFA9A800BB41DA /* SDLnetUDP.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E06A2850119C8317F000001 /* SDLnetUDP.c */; }; + BE48FF8307AFAA6F00BB41DA /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE48FF8207AFAA6F00BB41DA /* SDL2.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + BE48FF7A07AFA9A900BB41DA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BE48FF5607AFA9A800BB41DA; + remoteInfo = Framework; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0E06A2810119C8317F000001 /* SDLnet.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SDLnet.c; path = ../SDLnet.c; sourceTree = SOURCE_ROOT; }; + 0E06A2820119C8317F000001 /* SDLnetselect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SDLnetselect.c; path = ../SDLnetselect.c; sourceTree = SOURCE_ROOT; }; + 0E06A2830119C8317F000001 /* SDLnetsys.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SDLnetsys.h; path = ../SDLnetsys.h; sourceTree = SOURCE_ROOT; }; + 0E06A2840119C8317F000001 /* SDLnetTCP.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SDLnetTCP.c; path = ../SDLnetTCP.c; sourceTree = SOURCE_ROOT; }; + 0E06A2850119C8317F000001 /* SDLnetUDP.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SDLnetUDP.c; path = ../SDLnetUDP.c; sourceTree = SOURCE_ROOT; }; + 1014BAEA010A4B677F000001 /* SDL_net.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SDL_net.h; path = ../SDL_net.h; sourceTree = SOURCE_ROOT; }; + 1014BAEB010A4B677F000001 /* SDLnet.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SDLnet.c; path = ../SDLnet.c; sourceTree = SOURCE_ROOT; }; + 1014BAEC010A4B677F000001 /* SDLnetselect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SDLnetselect.c; path = ../SDLnetselect.c; sourceTree = SOURCE_ROOT; }; + 1014BAED010A4B677F000001 /* SDLnetTCP.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SDLnetTCP.c; path = ../SDLnetTCP.c; sourceTree = SOURCE_ROOT; }; + 1014BAEE010A4B677F000001 /* SDLnetUDP.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = SDLnetUDP.c; path = ../SDLnetUDP.c; sourceTree = SOURCE_ROOT; }; + 7F1CA4C12854D77600FE6C2E /* CMake */ = {isa = PBXFileReference; lastKnownFileType = folder; path = CMake; sourceTree = ""; }; + BE48FF6307AFA9A800BB41DA /* Info-Framework.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Framework.plist"; sourceTree = ""; }; + BE48FF6407AFA9A800BB41DA /* SDL2_net.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDL2_net.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BE48FF6F07AFA9A900BB41DA /* libSDL2_net.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSDL2_net.a; sourceTree = BUILT_PRODUCTS_DIR; }; + BE48FF7307AFA9A900BB41DA /* Create DMG */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Create DMG"; sourceTree = BUILT_PRODUCTS_DIR; }; + BE48FF8207AFAA6F00BB41DA /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = /Library/Frameworks/SDL2.framework; sourceTree = ""; }; + F59C710300D5CB5801000001 /* ReadMe.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ReadMe.txt; sourceTree = ""; }; + F59C710400D5CB5801000001 /* Welcome.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Welcome.txt; sourceTree = ""; }; + F59C710600D5CB5801000001 /* SDL_net.info */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SDL_net.info; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + BE48FF6007AFA9A800BB41DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BE48FF8307AFAA6F00BB41DA /* SDL2.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BE48FF6D07AFA9A800BB41DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0153844A006D81B07F000001 /* Public Headers */ = { + isa = PBXGroup; + children = ( + 1014BAEA010A4B677F000001 /* SDL_net.h */, + ); + name = "Public Headers"; + sourceTree = ""; + }; + 034768DDFF38A45A11DB9C8B /* Products */ = { + isa = PBXGroup; + children = ( + 089C1665FE841158C02AAC07 /* Resources */, + BE48FF6407AFA9A800BB41DA /* SDL2_net.framework */, + BE48FF6F07AFA9A900BB41DA /* libSDL2_net.a */, + BE48FF7307AFA9A900BB41DA /* Create DMG */, + ); + name = Products; + sourceTree = ""; + }; + 0867D691FE84028FC02AAC07 /* SDL_netFramework */ = { + isa = PBXGroup; + children = ( + F59C70FC00D5CB5801000001 /* pkg-support */, + 0153844A006D81B07F000001 /* Public Headers */, + 08FB77ACFE841707C02AAC07 /* Library Source */, + BE48FF8007AFAA4100BB41DA /* Frameworks */, + 034768DDFF38A45A11DB9C8B /* Products */, + BE48FF6307AFA9A800BB41DA /* Info-Framework.plist */, + ); + name = SDL_netFramework; + sourceTree = ""; + }; + 089C1665FE841158C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + ); + name = Resources; + sourceTree = ""; + }; + 08FB77ACFE841707C02AAC07 /* Library Source */ = { + isa = PBXGroup; + children = ( + 0E06A2830119C8317F000001 /* SDLnetsys.h */, + 1014BAEB010A4B677F000001 /* SDLnet.c */, + 1014BAEC010A4B677F000001 /* SDLnetselect.c */, + 1014BAED010A4B677F000001 /* SDLnetTCP.c */, + 1014BAEE010A4B677F000001 /* SDLnetUDP.c */, + 0E06A2810119C8317F000001 /* SDLnet.c */, + 0E06A2820119C8317F000001 /* SDLnetselect.c */, + 0E06A2840119C8317F000001 /* SDLnetTCP.c */, + 0E06A2850119C8317F000001 /* SDLnetUDP.c */, + ); + name = "Library Source"; + sourceTree = ""; + }; + BE48FF8007AFAA4100BB41DA /* Frameworks */ = { + isa = PBXGroup; + children = ( + BE48FF8107AFAA4A00BB41DA /* Linked Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + BE48FF8107AFAA4A00BB41DA /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + BE48FF8207AFAA6F00BB41DA /* SDL2.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + F59C70FC00D5CB5801000001 /* pkg-support */ = { + isa = PBXGroup; + children = ( + F59C710100D5CB5801000001 /* resources */, + F59C710600D5CB5801000001 /* SDL_net.info */, + ); + path = "pkg-support"; + sourceTree = SOURCE_ROOT; + }; + F59C710100D5CB5801000001 /* resources */ = { + isa = PBXGroup; + children = ( + 7F1CA4C12854D77600FE6C2E /* CMake */, + F59C710300D5CB5801000001 /* ReadMe.txt */, + F59C710400D5CB5801000001 /* Welcome.txt */, + ); + path = resources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + BE48FF5707AFA9A800BB41DA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + BE48FF5807AFA9A800BB41DA /* SDL_net.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BE48FF6607AFA9A800BB41DA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + BE48FF6707AFA9A800BB41DA /* SDLnetsys.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + BE48FF5607AFA9A800BB41DA /* Framework */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00F071FD0992C7C800D99510 /* Build configuration list for PBXNativeTarget "Framework" */; + buildPhases = ( + BE48FF5707AFA9A800BB41DA /* Headers */, + BE48FF5A07AFA9A800BB41DA /* Resources */, + BE48FF5B07AFA9A800BB41DA /* Sources */, + BE48FF6007AFA9A800BB41DA /* Frameworks */, + BE48FF6107AFA9A800BB41DA /* Rez */, + AAF0666114D4748600475C7D /* Convert SDL includes to SDL Framework includes */, + ); + buildRules = ( + ); + comments = "Installed into ~/Library/Frameworks/SDL_net.framework\n\nAdd -framework SDL_net to your linker flags\nAdd ~/Library/Frameworks/SDL_net.framework/Headers to your header search path\nAdd ~/Library/Frameworks to your library search path"; + dependencies = ( + ); + name = Framework; + productInstallPath = "@executable_path/../Frameworks"; + productName = SDL_net; + productReference = BE48FF6407AFA9A800BB41DA /* SDL2_net.framework */; + productType = "com.apple.product-type.framework"; + }; + BE48FF6507AFA9A800BB41DA /* Static Library */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00F072010992C7C800D99510 /* Build configuration list for PBXNativeTarget "Static Library" */; + buildPhases = ( + BE48FF6607AFA9A800BB41DA /* Headers */, + BE48FF6807AFA9A800BB41DA /* Sources */, + BE48FF6D07AFA9A800BB41DA /* Frameworks */, + BE48FF6E07AFA9A800BB41DA /* Rez */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Static Library"; + productInstallPath = /usr/local/lib; + productName = "Static Library"; + productReference = BE48FF6F07AFA9A900BB41DA /* libSDL2_net.a */; + productType = "com.apple.product-type.library.static"; + }; + BE48FF7007AFA9A900BB41DA /* Create DMG */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00F072050992C7C800D99510 /* Build configuration list for PBXNativeTarget "Create DMG" */; + buildPhases = ( + BE48FF7207AFA9A900BB41DA /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + BE48FF7B07AFA9A900BB41DA /* PBXTargetDependency */, + ); + name = "Create DMG"; + productInstallPath = /usr/local/bin; + productName = "Standard Package"; + productReference = BE48FF7307AFA9A900BB41DA /* Create DMG */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0867D690FE84028FC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0630; + }; + buildConfigurationList = 00F072090992C7C800D99510 /* Build configuration list for PBXProject "SDL_net" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + en, + ); + mainGroup = 0867D691FE84028FC02AAC07 /* SDL_netFramework */; + productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + BE48FF5607AFA9A800BB41DA /* Framework */, + BE48FF6507AFA9A800BB41DA /* Static Library */, + BE48FF7007AFA9A900BB41DA /* Create DMG */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + BE48FF5A07AFA9A800BB41DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7F1CA4C62854D7A400FE6C2E /* CMake in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + BE48FF6107AFA9A800BB41DA /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BE48FF6E07AFA9A800BB41DA /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + AAF0666114D4748600475C7D /* Convert SDL includes to SDL Framework includes */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Convert SDL includes to SDL Framework includes"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd $SYMROOT/$CONFIGURATION/$PUBLIC_HEADERS_FOLDER_PATH\nHEADER=SDL_net.h\nsed 's,#include \"\\(.*\\)\",#include ,' <$HEADER >$HEADER.new\nmv $HEADER.new $HEADER"; + }; + BE48FF7207AFA9A900BB41DA /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "PRODUCT_NAME=SDL2_net\n\n# Sign framework\nif [ \"$SDL_CODESIGN_IDENTITY\" != \"\" ]; then\n codesign --force --deep --sign \"$SDL_CODESIGN_IDENTITY\" --preserve-metadata\\=identifier,entitlements,flags --generate-entitlement-der $TARGET_BUILD_DIR/$PRODUCT_NAME.framework/Versions/A || exit $?\nfi\n\n# clean up the framework, remove headers, extra files\nmkdir -p build/dmg-tmp\ncp -a $TARGET_BUILD_DIR/$PRODUCT_NAME.framework build/dmg-tmp/\ncp pkg-support/resources/ReadMe.txt build/dmg-tmp\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nrm -rf build/dmg-tmp/.DS_Store\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname $PRODUCT_NAME -srcfolder build/dmg-tmp build/$PRODUCT_NAME.dmg\n\n# clean up\nrm -rf build/dmg-tmp\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + BE48FF5B07AFA9A800BB41DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BE48FF5C07AFA9A800BB41DA /* SDLnet.c in Sources */, + BE48FF5D07AFA9A800BB41DA /* SDLnetselect.c in Sources */, + BE48FF5E07AFA9A800BB41DA /* SDLnetTCP.c in Sources */, + BE48FF5F07AFA9A800BB41DA /* SDLnetUDP.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BE48FF6807AFA9A800BB41DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BE48FF6907AFA9A800BB41DA /* SDLnet.c in Sources */, + BE48FF6A07AFA9A800BB41DA /* SDLnetselect.c in Sources */, + BE48FF6B07AFA9A800BB41DA /* SDLnetTCP.c in Sources */, + BE48FF6C07AFA9A800BB41DA /* SDLnetUDP.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + BE48FF7B07AFA9A900BB41DA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = BE48FF5607AFA9A800BB41DA /* Framework */; + targetProxy = BE48FF7A07AFA9A900BB41DA /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 00F071FE0992C7C800D99510 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + 00F071FF0992C7C800D99510 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; + 00F072020992C7C800D99510 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + 00F072030992C7C800D99510 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; + 00F072060992C7C800D99510 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + OTHER_REZFLAGS = ""; + PRODUCT_NAME = "Create DMG"; + REZ_EXECUTABLE = YES; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = YES; + }; + name = Debug; + }; + 00F072070992C7C800D99510 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + OTHER_REZFLAGS = ""; + PRODUCT_NAME = "Create DMG"; + REZ_EXECUTABLE = YES; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = NO; + }; + name = Release; + }; + 00F0720A0992C7C800D99510 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + COPY_PHASE_STRIP = NO; + DYLIB_COMPATIBILITY_VERSION = 1.0.0; + DYLIB_CURRENT_VERSION = 201.0.0; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = "\"$(SRCROOT)/$(PLATFORM)\""; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/$(PLATFORM)/SDL2.framework/Headers\""; + INFOPLIST_FILE = "Info-Framework.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + ONLY_ACTIVE_ARCH = YES; + PLATFORM = ""; + "PLATFORM[sdk=appletvos*]" = tvOS; + "PLATFORM[sdk=iphoneos*]" = iOS; + "PLATFORM[sdk=macosx*]" = macOS; + PRODUCT_BUNDLE_IDENTIFIER = "org.libsdl.SDL2-net"; + PRODUCT_NAME = SDL2_net; + SUPPORTED_PLATFORMS = "watchsimulator watchos macosx iphonesimulator iphoneos driverkit appletvsimulator appletvos"; + SUPPORTS_MACCATALYST = YES; + TVOS_DEPLOYMENT_TARGET = 9.0; + }; + name = Debug; + }; + 00F0720B0992C7C800D99510 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + DEPLOYMENT_POSTPROCESSING = YES; + DYLIB_COMPATIBILITY_VERSION = 1.0.0; + DYLIB_CURRENT_VERSION = 201.0.0; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = "\"$(SRCROOT)/$(PLATFORM)\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/$(PLATFORM)/SDL2.framework/Headers\""; + INFOPLIST_FILE = "Info-Framework.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PLATFORM = ""; + "PLATFORM[sdk=appletvos*]" = tvOS; + "PLATFORM[sdk=iphoneos*]" = iOS; + "PLATFORM[sdk=macosx*]" = macOS; + PRODUCT_BUNDLE_IDENTIFIER = "org.libsdl.SDL2-net"; + PRODUCT_NAME = SDL2_net; + SUPPORTED_PLATFORMS = "watchsimulator watchos macosx iphonesimulator iphoneos driverkit appletvsimulator appletvos"; + SUPPORTS_MACCATALYST = YES; + TVOS_DEPLOYMENT_TARGET = 9.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 00F071FD0992C7C800D99510 /* Build configuration list for PBXNativeTarget "Framework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00F071FE0992C7C800D99510 /* Debug */, + 00F071FF0992C7C800D99510 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 00F072010992C7C800D99510 /* Build configuration list for PBXNativeTarget "Static Library" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00F072020992C7C800D99510 /* Debug */, + 00F072030992C7C800D99510 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 00F072050992C7C800D99510 /* Build configuration list for PBXNativeTarget "Create DMG" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00F072060992C7C800D99510 /* Debug */, + 00F072070992C7C800D99510 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 00F072090992C7C800D99510 /* Build configuration list for PBXProject "SDL_net" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00F0720A0992C7C800D99510 /* Debug */, + 00F0720B0992C7C800D99510 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0867D690FE84028FC02AAC07 /* Project object */; +} diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL.h new file mode 100644 index 00000000000..28778f39258 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL.h @@ -0,0 +1,232 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL.h + * + * Main include header for the SDL library + */ + + +#ifndef SDL_h_ +#define SDL_h_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* As of version 0.5, SDL is loaded dynamically into the application */ + +/** + * \name SDL_INIT_* + * + * These are the flags which may be passed to SDL_Init(). You should + * specify the subsystems which you will be using in your application. + */ +/* @{ */ +#define SDL_INIT_TIMER 0x00000001u +#define SDL_INIT_AUDIO 0x00000010u +#define SDL_INIT_VIDEO 0x00000020u /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */ +#define SDL_INIT_JOYSTICK 0x00000200u /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */ +#define SDL_INIT_HAPTIC 0x00001000u +#define SDL_INIT_GAMECONTROLLER 0x00002000u /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */ +#define SDL_INIT_EVENTS 0x00004000u +#define SDL_INIT_SENSOR 0x00008000u +#define SDL_INIT_NOPARACHUTE 0x00100000u /**< compatibility; this flag is ignored. */ +#define SDL_INIT_EVERYTHING ( \ + SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ + SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_SENSOR \ + ) +/* @} */ + +/** + * Initialize the SDL library. + * + * SDL_Init() simply forwards to calling SDL_InitSubSystem(). Therefore, the + * two may be used interchangeably. Though for readability of your code + * SDL_InitSubSystem() might be preferred. + * + * The file I/O (for example: SDL_RWFromFile) and threading (SDL_CreateThread) + * subsystems are initialized by default. Message boxes + * (SDL_ShowSimpleMessageBox) also attempt to work without initializing the + * video subsystem, in hopes of being useful in showing an error dialog when + * SDL_Init fails. You must specifically initialize other subsystems if you + * use them in your application. + * + * Logging (such as SDL_Log) works without initialization, too. + * + * `flags` may be any of the following OR'd together: + * + * - `SDL_INIT_TIMER`: timer subsystem + * - `SDL_INIT_AUDIO`: audio subsystem + * - `SDL_INIT_VIDEO`: video subsystem; automatically initializes the events + * subsystem + * - `SDL_INIT_JOYSTICK`: joystick subsystem; automatically initializes the + * events subsystem + * - `SDL_INIT_HAPTIC`: haptic (force feedback) subsystem + * - `SDL_INIT_GAMECONTROLLER`: controller subsystem; automatically + * initializes the joystick subsystem + * - `SDL_INIT_EVENTS`: events subsystem + * - `SDL_INIT_EVERYTHING`: all of the above subsystems + * - `SDL_INIT_NOPARACHUTE`: compatibility; this flag is ignored + * + * Subsystem initialization is ref-counted, you must call SDL_QuitSubSystem() + * for each SDL_InitSubSystem() to correctly shutdown a subsystem manually (or + * call SDL_Quit() to force shutdown). If a subsystem is already loaded then + * this call will increase the ref-count and return. + * + * \param flags subsystem initialization flags + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_InitSubSystem + * \sa SDL_Quit + * \sa SDL_SetMainReady + * \sa SDL_WasInit + */ +extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); + +/** + * Compatibility function to initialize the SDL library. + * + * In SDL2, this function and SDL_Init() are interchangeable. + * + * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + * \sa SDL_Quit + * \sa SDL_QuitSubSystem + */ +extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); + +/** + * Shut down specific SDL subsystems. + * + * If you start a subsystem using a call to that subsystem's init function + * (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(), + * SDL_QuitSubSystem() and SDL_WasInit() will not work. You will need to use + * that subsystem's quit function (SDL_VideoQuit()) directly instead. But + * generally, you should not be using those functions directly anyhow; use + * SDL_Init() instead. + * + * You still need to call SDL_Quit() even if you close all open subsystems + * with SDL_QuitSubSystem(). + * + * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_InitSubSystem + * \sa SDL_Quit + */ +extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); + +/** + * Get a mask of the specified subsystems which are currently initialized. + * + * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. + * \returns a mask of all initialized subsystems if `flags` is 0, otherwise it + * returns the initialization status of the specified subsystems. + * + * The return value does not include SDL_INIT_NOPARACHUTE. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + * \sa SDL_InitSubSystem + */ +extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); + +/** + * Clean up all initialized subsystems. + * + * You should call this function even if you have already shutdown each + * initialized subsystem with SDL_QuitSubSystem(). It is safe to call this + * function even in the case of errors in initialization. + * + * If you start a subsystem using a call to that subsystem's init function + * (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(), + * then you must use that subsystem's quit function (SDL_VideoQuit()) to shut + * it down before calling SDL_Quit(). But generally, you should not be using + * those functions directly anyhow; use SDL_Init() instead. + * + * You can use this function with atexit() to ensure that it is run when your + * application is shutdown, but it is not wise to do this from a library or + * other dynamically loaded code. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + * \sa SDL_QuitSubSystem + */ +extern DECLSPEC void SDLCALL SDL_Quit(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_assert.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_assert.h new file mode 100644 index 00000000000..835e3eadc3a --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_assert.h @@ -0,0 +1,324 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_assert_h_ +#define SDL_assert_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SDL_ASSERT_LEVEL +#ifdef SDL_DEFAULT_ASSERT_LEVEL +#define SDL_ASSERT_LEVEL SDL_DEFAULT_ASSERT_LEVEL +#elif defined(_DEBUG) || defined(DEBUG) || \ + (defined(__GNUC__) && !defined(__OPTIMIZE__)) +#define SDL_ASSERT_LEVEL 2 +#else +#define SDL_ASSERT_LEVEL 1 +#endif +#endif /* SDL_ASSERT_LEVEL */ + +/* +These are macros and not first class functions so that the debugger breaks +on the assertion line and not in some random guts of SDL, and so each +assert can have unique static variables associated with it. +*/ + +#if defined(_MSC_VER) +/* Don't include intrin.h here because it contains C++ code */ + extern void __cdecl __debugbreak(void); + #define SDL_TriggerBreakpoint() __debugbreak() +#elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) ) + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) +#elif ( defined(__APPLE__) && (defined(__arm64__) || defined(__aarch64__)) ) /* this might work on other ARM targets, but this is a known quantity... */ + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #22\n\t" ) +#elif defined(__APPLE__) && defined(__arm__) + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "bkpt #22\n\t" ) +#elif defined(__386__) && defined(__WATCOMC__) + #define SDL_TriggerBreakpoint() { _asm { int 0x03 } } +#elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__) + #include + #define SDL_TriggerBreakpoint() raise(SIGTRAP) +#else + /* How do we trigger breakpoints on this platform? */ + #define SDL_TriggerBreakpoint() +#endif + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */ +# define SDL_FUNCTION __func__ +#elif ((__GNUC__ >= 2) || defined(_MSC_VER) || defined (__WATCOMC__)) +# define SDL_FUNCTION __FUNCTION__ +#else +# define SDL_FUNCTION "???" +#endif +#define SDL_FILE __FILE__ +#define SDL_LINE __LINE__ + +/* +sizeof (x) makes the compiler still parse the expression even without +assertions enabled, so the code is always checked at compile time, but +doesn't actually generate code for it, so there are no side effects or +expensive checks at run time, just the constant size of what x WOULD be, +which presumably gets optimized out as unused. +This also solves the problem of... + + int somevalue = blah(); + SDL_assert(somevalue == 1); + +...which would cause compiles to complain that somevalue is unused if we +disable assertions. +*/ + +/* "while (0,0)" fools Microsoft's compiler's /W4 warning level into thinking + this condition isn't constant. And looks like an owl's face! */ +#ifdef _MSC_VER /* stupid /W4 warnings. */ +#define SDL_NULL_WHILE_LOOP_CONDITION (0,0) +#else +#define SDL_NULL_WHILE_LOOP_CONDITION (0) +#endif + +#define SDL_disabled_assert(condition) \ + do { (void) sizeof ((condition)); } while (SDL_NULL_WHILE_LOOP_CONDITION) + +typedef enum +{ + SDL_ASSERTION_RETRY, /**< Retry the assert immediately. */ + SDL_ASSERTION_BREAK, /**< Make the debugger trigger a breakpoint. */ + SDL_ASSERTION_ABORT, /**< Terminate the program. */ + SDL_ASSERTION_IGNORE, /**< Ignore the assert. */ + SDL_ASSERTION_ALWAYS_IGNORE /**< Ignore the assert from now on. */ +} SDL_AssertState; + +typedef struct SDL_AssertData +{ + int always_ignore; + unsigned int trigger_count; + const char *condition; + const char *filename; + int linenum; + const char *function; + const struct SDL_AssertData *next; +} SDL_AssertData; + +#if (SDL_ASSERT_LEVEL > 0) + +/* Never call this directly. Use the SDL_assert* macros. */ +extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *, + const char *, + const char *, int) +#if defined(__clang__) +#if __has_feature(attribute_analyzer_noreturn) +/* this tells Clang's static analysis that we're a custom assert function, + and that the analyzer should assume the condition was always true past this + SDL_assert test. */ + __attribute__((analyzer_noreturn)) +#endif +#endif +; + +/* the do {} while(0) avoids dangling else problems: + if (x) SDL_assert(y); else blah(); + ... without the do/while, the "else" could attach to this macro's "if". + We try to handle just the minimum we need here in a macro...the loop, + the static vars, and break points. The heavy lifting is handled in + SDL_ReportAssertion(), in SDL_assert.c. +*/ +#define SDL_enabled_assert(condition) \ + do { \ + while ( !(condition) ) { \ + static struct SDL_AssertData sdl_assert_data = { \ + 0, 0, #condition, 0, 0, 0, 0 \ + }; \ + const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \ + if (sdl_assert_state == SDL_ASSERTION_RETRY) { \ + continue; /* go again. */ \ + } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \ + SDL_TriggerBreakpoint(); \ + } \ + break; /* not retrying. */ \ + } \ + } while (SDL_NULL_WHILE_LOOP_CONDITION) + +#endif /* enabled assertions support code */ + +/* Enable various levels of assertions. */ +#if SDL_ASSERT_LEVEL == 0 /* assertions disabled */ +# define SDL_assert(condition) SDL_disabled_assert(condition) +# define SDL_assert_release(condition) SDL_disabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 1 /* release settings. */ +# define SDL_assert(condition) SDL_disabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 2 /* normal settings. */ +# define SDL_assert(condition) SDL_enabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 3 /* paranoid settings. */ +# define SDL_assert(condition) SDL_enabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_enabled_assert(condition) +#else +# error Unknown assertion level. +#endif + +/* this assertion is never disabled at any level. */ +#define SDL_assert_always(condition) SDL_enabled_assert(condition) + + +/** + * A callback that fires when an SDL assertion fails. + * + * \param data a pointer to the SDL_AssertData structure corresponding to the + * current assertion + * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler() + * \returns an SDL_AssertState value indicating how to handle the failure. + */ +typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)( + const SDL_AssertData* data, void* userdata); + +/** + * Set an application-defined assertion handler. + * + * This function allows an application to show its own assertion UI and/or + * force the response to an assertion failure. If the application doesn't + * provide this, SDL will try to do the right thing, popping up a + * system-specific GUI dialog, and probably minimizing any fullscreen windows. + * + * This callback may fire from any thread, but it runs wrapped in a mutex, so + * it will only fire from one thread at a time. + * + * This callback is NOT reset to SDL's internal handler upon SDL_Quit()! + * + * \param handler the SDL_AssertionHandler function to call when an assertion + * fails or NULL for the default handler + * \param userdata a pointer that is passed to `handler` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAssertionHandler + */ +extern DECLSPEC void SDLCALL SDL_SetAssertionHandler( + SDL_AssertionHandler handler, + void *userdata); + +/** + * Get the default assertion handler. + * + * This returns the function pointer that is called by default when an + * assertion is triggered. This is an internal function provided by SDL, that + * is used for assertions when SDL_SetAssertionHandler() hasn't been used to + * provide a different function. + * + * \returns the default SDL_AssertionHandler that is called when an assert + * triggers. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_GetAssertionHandler + */ +extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetDefaultAssertionHandler(void); + +/** + * Get the current assertion handler. + * + * This returns the function pointer that is called when an assertion is + * triggered. This is either the value last passed to + * SDL_SetAssertionHandler(), or if no application-specified function is set, + * is equivalent to calling SDL_GetDefaultAssertionHandler(). + * + * The parameter `puserdata` is a pointer to a void*, which will store the + * "userdata" pointer that was passed to SDL_SetAssertionHandler(). This value + * will always be NULL for the default handler. If you don't care about this + * data, it is safe to pass a NULL pointer to this function to ignore it. + * + * \param puserdata pointer which is filled with the "userdata" pointer that + * was passed to SDL_SetAssertionHandler() + * \returns the SDL_AssertionHandler that is called when an assert triggers. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_SetAssertionHandler + */ +extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puserdata); + +/** + * Get a list of all assertion failures. + * + * This function gets all assertions triggered since the last call to + * SDL_ResetAssertionReport(), or the start of the program. + * + * The proper way to examine this data looks something like this: + * + * ```c + * const SDL_AssertData *item = SDL_GetAssertionReport(); + * while (item) { + * printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\\n", + * item->condition, item->function, item->filename, + * item->linenum, item->trigger_count, + * item->always_ignore ? "yes" : "no"); + * item = item->next; + * } + * ``` + * + * \returns a list of all failed assertions or NULL if the list is empty. This + * memory should not be modified or freed by the application. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ResetAssertionReport + */ +extern DECLSPEC const SDL_AssertData * SDLCALL SDL_GetAssertionReport(void); + +/** + * Clear the list of all assertion failures. + * + * This function will clear the list of all assertions triggered up to that + * point. Immediately following this call, SDL_GetAssertionReport will return + * no items. In addition, any previously-triggered assertions will be reset to + * a trigger_count of zero, and their always_ignore state will be false. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAssertionReport + */ +extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void); + + +/* these had wrong naming conventions until 2.0.4. Please update your app! */ +#define SDL_assert_state SDL_AssertState +#define SDL_assert_data SDL_AssertData + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_assert_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_atomic.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_atomic.h new file mode 100644 index 00000000000..02a93fb43c0 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_atomic.h @@ -0,0 +1,395 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_atomic.h + * + * Atomic operations. + * + * IMPORTANT: + * If you are not an expert in concurrent lockless programming, you should + * only be using the atomic lock and reference counting functions in this + * file. In all other cases you should be protecting your data structures + * with full mutexes. + * + * The list of "safe" functions to use are: + * SDL_AtomicLock() + * SDL_AtomicUnlock() + * SDL_AtomicIncRef() + * SDL_AtomicDecRef() + * + * Seriously, here be dragons! + * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * + * You can find out a little more about lockless programming and the + * subtle issues that can arise here: + * http://msdn.microsoft.com/en-us/library/ee418650%28v=vs.85%29.aspx + * + * There's also lots of good information here: + * http://www.1024cores.net/home/lock-free-algorithms + * http://preshing.com/ + * + * These operations may or may not actually be implemented using + * processor specific atomic operations. When possible they are + * implemented as true processor specific atomic operations. When that + * is not possible the are implemented using locks that *do* use the + * available atomic operations. + * + * All of the atomic operations that modify memory are full memory barriers. + */ + +#ifndef SDL_atomic_h_ +#define SDL_atomic_h_ + +#include +#include + +#include + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name SDL AtomicLock + * + * The atomic locks are efficient spinlocks using CPU instructions, + * but are vulnerable to starvation and can spin forever if a thread + * holding a lock has been terminated. For this reason you should + * minimize the code executed inside an atomic lock and never do + * expensive things like API or system calls while holding them. + * + * The atomic locks are not safe to lock recursively. + * + * Porting Note: + * The spin lock functions and type are required and can not be + * emulated because they are used in the atomic emulation code. + */ +/* @{ */ + +typedef int SDL_SpinLock; + +/** + * Try to lock a spin lock by setting it to a non-zero value. + * + * ***Please note that spinlocks are dangerous if you don't know what you're + * doing. Please be careful using any sort of spinlock!*** + * + * \param lock a pointer to a lock variable + * \returns SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already + * held. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicLock + * \sa SDL_AtomicUnlock + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicTryLock(SDL_SpinLock *lock); + +/** + * Lock a spin lock by setting it to a non-zero value. + * + * ***Please note that spinlocks are dangerous if you don't know what you're + * doing. Please be careful using any sort of spinlock!*** + * + * \param lock a pointer to a lock variable + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicTryLock + * \sa SDL_AtomicUnlock + */ +extern DECLSPEC void SDLCALL SDL_AtomicLock(SDL_SpinLock *lock); + +/** + * Unlock a spin lock by setting it to 0. + * + * Always returns immediately. + * + * ***Please note that spinlocks are dangerous if you don't know what you're + * doing. Please be careful using any sort of spinlock!*** + * + * \param lock a pointer to a lock variable + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicLock + * \sa SDL_AtomicTryLock + */ +extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock); + +/* @} *//* SDL AtomicLock */ + + +/** + * The compiler barrier prevents the compiler from reordering + * reads and writes to globally visible variables across the call. + */ +#if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__) +void _ReadWriteBarrier(void); +#pragma intrinsic(_ReadWriteBarrier) +#define SDL_CompilerBarrier() _ReadWriteBarrier() +#elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) +/* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */ +#define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory") +#elif defined(__WATCOMC__) +extern __inline void SDL_CompilerBarrier(void); +#pragma aux SDL_CompilerBarrier = "" parm [] modify exact []; +#else +#define SDL_CompilerBarrier() \ +{ SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); } +#endif + +/** + * Memory barriers are designed to prevent reads and writes from being + * reordered by the compiler and being seen out of order on multi-core CPUs. + * + * A typical pattern would be for thread A to write some data and a flag, and + * for thread B to read the flag and get the data. In this case you would + * insert a release barrier between writing the data and the flag, + * guaranteeing that the data write completes no later than the flag is + * written, and you would insert an acquire barrier between reading the flag + * and reading the data, to ensure that all the reads associated with the flag + * have completed. + * + * In this pattern you should always see a release barrier paired with an + * acquire barrier and you should gate the data reads/writes with a single + * flag variable. + * + * For more information on these semantics, take a look at the blog post: + * http://preshing.com/20120913/acquire-and-release-semantics + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC void SDLCALL SDL_MemoryBarrierReleaseFunction(void); +extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquireFunction(void); + +#if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("lwsync" : : : "memory") +#elif defined(__GNUC__) && defined(__aarch64__) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") +#elif defined(__GNUC__) && defined(__arm__) +#if 0 /* defined(__LINUX__) || defined(__ANDROID__) */ +/* Information from: + https://chromium.googlesource.com/chromium/chromium/+/trunk/base/atomicops_internals_arm_gcc.h#19 + + The Linux kernel provides a helper function which provides the right code for a memory barrier, + hard-coded at address 0xffff0fa0 +*/ +typedef void (*SDL_KernelMemoryBarrierFunc)(); +#define SDL_MemoryBarrierRelease() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)() +#define SDL_MemoryBarrierAcquire() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)() +#elif 0 /* defined(__QNXNTO__) */ +#include + +#define SDL_MemoryBarrierRelease() __cpu_membarrier() +#define SDL_MemoryBarrierAcquire() __cpu_membarrier() +#else +#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) || defined(__ARM_ARCH_8A__) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") +#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_5TE__) +#ifdef __thumb__ +/* The mcr instruction isn't available in thumb mode, use real functions */ +#define SDL_MEMORY_BARRIER_USES_FUNCTION +#define SDL_MemoryBarrierRelease() SDL_MemoryBarrierReleaseFunction() +#define SDL_MemoryBarrierAcquire() SDL_MemoryBarrierAcquireFunction() +#else +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") +#endif /* __thumb__ */ +#else +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("" : : : "memory") +#endif /* __LINUX__ || __ANDROID__ */ +#endif /* __GNUC__ && __arm__ */ +#else +#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) +/* This is correct for all CPUs on Solaris when using Solaris Studio 12.1+. */ +#include +#define SDL_MemoryBarrierRelease() __machine_rel_barrier() +#define SDL_MemoryBarrierAcquire() __machine_acq_barrier() +#else +/* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */ +#define SDL_MemoryBarrierRelease() SDL_CompilerBarrier() +#define SDL_MemoryBarrierAcquire() SDL_CompilerBarrier() +#endif +#endif + +/** + * \brief A type representing an atomic integer value. It is a struct + * so people don't accidentally use numeric operations on it. + */ +typedef struct { int value; } SDL_atomic_t; + +/** + * Set an atomic variable to a new value if it is currently an old value. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable to be modified + * \param oldval the old value + * \param newval the new value + * \returns SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicCASPtr + * \sa SDL_AtomicGet + * \sa SDL_AtomicSet + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval); + +/** + * Set an atomic variable to a value. + * + * This function also acts as a full memory barrier. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable to be modified + * \param v the desired value + * \returns the previous value of the atomic variable. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicGet + */ +extern DECLSPEC int SDLCALL SDL_AtomicSet(SDL_atomic_t *a, int v); + +/** + * Get the value of an atomic variable. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable + * \returns the current value of an atomic variable. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicSet + */ +extern DECLSPEC int SDLCALL SDL_AtomicGet(SDL_atomic_t *a); + +/** + * Add to an atomic variable. + * + * This function also acts as a full memory barrier. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable to be modified + * \param v the desired value to add + * \returns the previous value of the atomic variable. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicDecRef + * \sa SDL_AtomicIncRef + */ +extern DECLSPEC int SDLCALL SDL_AtomicAdd(SDL_atomic_t *a, int v); + +/** + * \brief Increment an atomic variable used as a reference count. + */ +#ifndef SDL_AtomicIncRef +#define SDL_AtomicIncRef(a) SDL_AtomicAdd(a, 1) +#endif + +/** + * \brief Decrement an atomic variable used as a reference count. + * + * \return SDL_TRUE if the variable reached zero after decrementing, + * SDL_FALSE otherwise + */ +#ifndef SDL_AtomicDecRef +#define SDL_AtomicDecRef(a) (SDL_AtomicAdd(a, -1) == 1) +#endif + +/** + * Set a pointer to a new value if it is currently an old value. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to a pointer + * \param oldval the old pointer value + * \param newval the new pointer value + * \returns SDL_TRUE if the pointer was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicCAS + * \sa SDL_AtomicGetPtr + * \sa SDL_AtomicSetPtr + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCASPtr(void **a, void *oldval, void *newval); + +/** + * Set a pointer to a value atomically. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to a pointer + * \param v the desired pointer value + * \returns the previous value of the pointer. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicCASPtr + * \sa SDL_AtomicGetPtr + */ +extern DECLSPEC void* SDLCALL SDL_AtomicSetPtr(void **a, void* v); + +/** + * Get the value of a pointer atomically. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to a pointer + * \returns the current value of a pointer. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicCASPtr + * \sa SDL_AtomicSetPtr + */ +extern DECLSPEC void* SDLCALL SDL_AtomicGetPtr(void **a); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#include + +#endif /* SDL_atomic_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_audio.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_audio.h new file mode 100644 index 00000000000..d8bd141d2a0 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_audio.h @@ -0,0 +1,1462 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/* !!! FIXME: several functions in here need Doxygen comments. */ + +/** + * \file SDL_audio.h + * + * Access to the raw audio mixing buffer for the SDL library. + */ + +#ifndef SDL_audio_h_ +#define SDL_audio_h_ + +#include +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Audio format flags. + * + * These are what the 16 bits in SDL_AudioFormat currently mean... + * (Unspecified bits are always zero). + * + * \verbatim + ++-----------------------sample is signed if set + || + || ++-----------sample is bigendian if set + || || + || || ++---sample is float if set + || || || + || || || +---sample bit size---+ + || || || | | + 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 + \endverbatim + * + * There are macros in SDL 2.0 and later to query these bits. + */ +typedef Uint16 SDL_AudioFormat; + +/** + * \name Audio flags + */ +/* @{ */ + +#define SDL_AUDIO_MASK_BITSIZE (0xFF) +#define SDL_AUDIO_MASK_DATATYPE (1<<8) +#define SDL_AUDIO_MASK_ENDIAN (1<<12) +#define SDL_AUDIO_MASK_SIGNED (1<<15) +#define SDL_AUDIO_BITSIZE(x) (x & SDL_AUDIO_MASK_BITSIZE) +#define SDL_AUDIO_ISFLOAT(x) (x & SDL_AUDIO_MASK_DATATYPE) +#define SDL_AUDIO_ISBIGENDIAN(x) (x & SDL_AUDIO_MASK_ENDIAN) +#define SDL_AUDIO_ISSIGNED(x) (x & SDL_AUDIO_MASK_SIGNED) +#define SDL_AUDIO_ISINT(x) (!SDL_AUDIO_ISFLOAT(x)) +#define SDL_AUDIO_ISLITTLEENDIAN(x) (!SDL_AUDIO_ISBIGENDIAN(x)) +#define SDL_AUDIO_ISUNSIGNED(x) (!SDL_AUDIO_ISSIGNED(x)) + +/** + * \name Audio format flags + * + * Defaults to LSB byte order. + */ +/* @{ */ +#define AUDIO_U8 0x0008 /**< Unsigned 8-bit samples */ +#define AUDIO_S8 0x8008 /**< Signed 8-bit samples */ +#define AUDIO_U16LSB 0x0010 /**< Unsigned 16-bit samples */ +#define AUDIO_S16LSB 0x8010 /**< Signed 16-bit samples */ +#define AUDIO_U16MSB 0x1010 /**< As above, but big-endian byte order */ +#define AUDIO_S16MSB 0x9010 /**< As above, but big-endian byte order */ +#define AUDIO_U16 AUDIO_U16LSB +#define AUDIO_S16 AUDIO_S16LSB +/* @} */ + +/** + * \name int32 support + */ +/* @{ */ +#define AUDIO_S32LSB 0x8020 /**< 32-bit integer samples */ +#define AUDIO_S32MSB 0x9020 /**< As above, but big-endian byte order */ +#define AUDIO_S32 AUDIO_S32LSB +/* @} */ + +/** + * \name float32 support + */ +/* @{ */ +#define AUDIO_F32LSB 0x8120 /**< 32-bit floating point samples */ +#define AUDIO_F32MSB 0x9120 /**< As above, but big-endian byte order */ +#define AUDIO_F32 AUDIO_F32LSB +/* @} */ + +/** + * \name Native audio byte ordering + */ +/* @{ */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define AUDIO_U16SYS AUDIO_U16LSB +#define AUDIO_S16SYS AUDIO_S16LSB +#define AUDIO_S32SYS AUDIO_S32LSB +#define AUDIO_F32SYS AUDIO_F32LSB +#else +#define AUDIO_U16SYS AUDIO_U16MSB +#define AUDIO_S16SYS AUDIO_S16MSB +#define AUDIO_S32SYS AUDIO_S32MSB +#define AUDIO_F32SYS AUDIO_F32MSB +#endif +/* @} */ + +/** + * \name Allow change flags + * + * Which audio format changes are allowed when opening a device. + */ +/* @{ */ +#define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001 +#define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002 +#define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004 +#define SDL_AUDIO_ALLOW_SAMPLES_CHANGE 0x00000008 +#define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE|SDL_AUDIO_ALLOW_SAMPLES_CHANGE) +/* @} */ + +/* @} *//* Audio flags */ + +/** + * This function is called when the audio device needs more data. + * + * \param userdata An application-specific parameter saved in + * the SDL_AudioSpec structure + * \param stream A pointer to the audio data buffer. + * \param len The length of that buffer in bytes. + * + * Once the callback returns, the buffer will no longer be valid. + * Stereo samples are stored in a LRLRLR ordering. + * + * You can choose to avoid callbacks and use SDL_QueueAudio() instead, if + * you like. Just open your audio device with a NULL callback. + */ +typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream, + int len); + +/** + * The calculated values in this structure are calculated by SDL_OpenAudio(). + * + * For multi-channel audio, the default SDL channel mapping is: + * 2: FL FR (stereo) + * 3: FL FR LFE (2.1 surround) + * 4: FL FR BL BR (quad) + * 5: FL FR FC BL BR (quad + center) + * 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR) + * 7: FL FR FC LFE BC SL SR (6.1 surround) + * 8: FL FR FC LFE BL BR SL SR (7.1 surround) + */ +typedef struct SDL_AudioSpec +{ + int freq; /**< DSP frequency -- samples per second */ + SDL_AudioFormat format; /**< Audio data format */ + Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */ + Uint8 silence; /**< Audio buffer silence value (calculated) */ + Uint16 samples; /**< Audio buffer size in sample FRAMES (total samples divided by channel count) */ + Uint16 padding; /**< Necessary for some compile environments */ + Uint32 size; /**< Audio buffer size in bytes (calculated) */ + SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */ + void *userdata; /**< Userdata passed to callback (ignored for NULL callbacks). */ +} SDL_AudioSpec; + + +struct SDL_AudioCVT; +typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, + SDL_AudioFormat format); + +/** + * \brief Upper limit of filters in SDL_AudioCVT + * + * The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is + * currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers, + * one of which is the terminating NULL pointer. + */ +#define SDL_AUDIOCVT_MAX_FILTERS 9 + +/** + * \struct SDL_AudioCVT + * \brief A structure to hold a set of audio conversion filters and buffers. + * + * Note that various parts of the conversion pipeline can take advantage + * of SIMD operations (like SSE2, for example). SDL_AudioCVT doesn't require + * you to pass it aligned data, but can possibly run much faster if you + * set both its (buf) field to a pointer that is aligned to 16 bytes, and its + * (len) field to something that's a multiple of 16, if possible. + */ +#if defined(__GNUC__) && !defined(__CHERI_PURE_CAPABILITY__) +/* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't + pad it out to 88 bytes to guarantee ABI compatibility between compilers. + This is not a concern on CHERI architectures, where pointers must be stored + at aligned locations otherwise they will become invalid, and thus structs + containing pointers cannot be packed without giving a warning or error. + vvv + The next time we rev the ABI, make sure to size the ints and add padding. +*/ +#define SDL_AUDIOCVT_PACKED __attribute__((packed)) +#else +#define SDL_AUDIOCVT_PACKED +#endif +/* */ +typedef struct SDL_AudioCVT +{ + int needed; /**< Set to 1 if conversion possible */ + SDL_AudioFormat src_format; /**< Source audio format */ + SDL_AudioFormat dst_format; /**< Target audio format */ + double rate_incr; /**< Rate conversion increment */ + Uint8 *buf; /**< Buffer to hold entire audio data */ + int len; /**< Length of original audio buffer */ + int len_cvt; /**< Length of converted audio buffer */ + int len_mult; /**< buffer must be len*len_mult big */ + double len_ratio; /**< Given len, final size is len*len_ratio */ + SDL_AudioFilter filters[SDL_AUDIOCVT_MAX_FILTERS + 1]; /**< NULL-terminated list of filter functions */ + int filter_index; /**< Current audio conversion function */ +} SDL_AUDIOCVT_PACKED SDL_AudioCVT; + + +/* Function prototypes */ + +/** + * \name Driver discovery functions + * + * These functions return the list of built in audio drivers, in the + * order that they are normally initialized by default. + */ +/* @{ */ + +/** + * Use this function to get the number of built-in audio drivers. + * + * This function returns a hardcoded number. This never returns a negative + * value; if there are no drivers compiled into this build of SDL, this + * function returns zero. The presence of a driver in this list does not mean + * it will function, it just means SDL is capable of interacting with that + * interface. For example, a build of SDL might have esound support, but if + * there's no esound server available, SDL's esound driver would fail if used. + * + * By default, SDL tries all drivers, in its preferred order, until one is + * found to be usable. + * + * \returns the number of built-in audio drivers. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioDriver + */ +extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void); + +/** + * Use this function to get the name of a built in audio driver. + * + * The list of audio drivers is given in the order that they are normally + * initialized by default; the drivers that seem more reasonable to choose + * first (as far as the SDL developers believe) are earlier in the list. + * + * The names of drivers are all simple, low-ASCII identifiers, like "alsa", + * "coreaudio" or "xaudio2". These never have Unicode characters, and are not + * meant to be proper names. + * + * \param index the index of the audio driver; the value ranges from 0 to + * SDL_GetNumAudioDrivers() - 1 + * \returns the name of the audio driver at the requested index, or NULL if an + * invalid index was specified. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumAudioDrivers + */ +extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index); +/* @} */ + +/** + * \name Initialization and cleanup + * + * \internal These functions are used internally, and should not be used unless + * you have a specific need to specify the audio driver you want to + * use. You should normally use SDL_Init() or SDL_InitSubSystem(). + */ +/* @{ */ + +/** + * Use this function to initialize a particular audio driver. + * + * This function is used internally, and should not be used unless you have a + * specific need to designate the audio driver you want to use. You should + * normally use SDL_Init() or SDL_InitSubSystem(). + * + * \param driver_name the name of the desired audio driver + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AudioQuit + */ +extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); + +/** + * Use this function to shut down audio if you initialized it with + * SDL_AudioInit(). + * + * This function is used internally, and should not be used unless you have a + * specific need to specify the audio driver you want to use. You should + * normally use SDL_Quit() or SDL_QuitSubSystem(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AudioInit + */ +extern DECLSPEC void SDLCALL SDL_AudioQuit(void); +/* @} */ + +/** + * Get the name of the current audio driver. + * + * The returned string points to internal static memory and thus never becomes + * invalid, even if you quit the audio subsystem and initialize a new driver + * (although such a case would return a different static string from another + * call to this function, of course). As such, you should not modify or free + * the returned string. + * + * \returns the name of the current audio driver or NULL if no driver has been + * initialized. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AudioInit + */ +extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); + +/** + * This function is a legacy means of opening the audio device. + * + * This function remains for compatibility with SDL 1.2, but also because it's + * slightly easier to use than the new functions in SDL 2.0. The new, more + * powerful, and preferred way to do this is SDL_OpenAudioDevice(). + * + * This function is roughly equivalent to: + * + * ```c + * SDL_OpenAudioDevice(NULL, 0, desired, obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); + * ``` + * + * With two notable exceptions: + * + * - If `obtained` is NULL, we use `desired` (and allow no changes), which + * means desired will be modified to have the correct values for silence, + * etc, and SDL will convert any differences between your app's specific + * request and the hardware behind the scenes. + * - The return value is always success or failure, and not a device ID, which + * means you can only have one device open at a time with this function. + * + * \param desired an SDL_AudioSpec structure representing the desired output + * format. Please refer to the SDL_OpenAudioDevice + * documentation for details on how to prepare this structure. + * \param obtained an SDL_AudioSpec structure filled in with the actual + * parameters, or NULL. + * \returns 0 if successful, placing the actual hardware parameters in the + * structure pointed to by `obtained`. + * + * If `obtained` is NULL, the audio data passed to the callback + * function will be guaranteed to be in the requested format, and + * will be automatically converted to the actual hardware audio + * format if necessary. If `obtained` is NULL, `desired` will have + * fields modified. + * + * This function returns a negative error code on failure to open the + * audio device or failure to set up the audio thread; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CloseAudio + * \sa SDL_LockAudio + * \sa SDL_PauseAudio + * \sa SDL_UnlockAudio + */ +extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, + SDL_AudioSpec * obtained); + +/** + * SDL Audio Device IDs. + * + * A successful call to SDL_OpenAudio() is always device id 1, and legacy + * SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls + * always returns devices >= 2 on success. The legacy calls are good both + * for backwards compatibility and when you don't care about multiple, + * specific, or capture devices. + */ +typedef Uint32 SDL_AudioDeviceID; + +/** + * Get the number of built-in audio devices. + * + * This function is only valid after successfully initializing the audio + * subsystem. + * + * Note that audio capture support is not implemented as of SDL 2.0.4, so the + * `iscapture` parameter is for future expansion and should always be zero for + * now. + * + * This function will return -1 if an explicit list of devices can't be + * determined. Returning -1 is not an error. For example, if SDL is set up to + * talk to a remote audio server, it can't list every one available on the + * Internet, but it will still allow a specific host to be specified in + * SDL_OpenAudioDevice(). + * + * In many common cases, when this function returns a value <= 0, it can still + * successfully open the default device (NULL for first argument of + * SDL_OpenAudioDevice()). + * + * This function may trigger a complete redetect of available hardware. It + * should not be called for each iteration of a loop, but rather once at the + * start of a loop: + * + * ```c + * // Don't do this: + * for (int i = 0; i < SDL_GetNumAudioDevices(0); i++) + * + * // do this instead: + * const int count = SDL_GetNumAudioDevices(0); + * for (int i = 0; i < count; ++i) { do_something_here(); } + * ``` + * + * \param iscapture zero to request playback devices, non-zero to request + * recording devices + * \returns the number of available devices exposed by the current driver or + * -1 if an explicit list of devices can't be determined. A return + * value of -1 does not necessarily mean an error condition. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioDeviceName + * \sa SDL_OpenAudioDevice + */ +extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture); + +/** + * Get the human-readable name of a specific audio device. + * + * This function is only valid after successfully initializing the audio + * subsystem. The values returned by this function reflect the latest call to + * SDL_GetNumAudioDevices(); re-call that function to redetect available + * hardware. + * + * The string returned by this function is UTF-8 encoded, read-only, and + * managed internally. You are not to free it. If you need to keep the string + * for any length of time, you should make your own copy of it, as it will be + * invalid next time any of several other SDL functions are called. + * + * \param index the index of the audio device; valid values range from 0 to + * SDL_GetNumAudioDevices() - 1 + * \param iscapture non-zero to query the list of recording devices, zero to + * query the list of output devices. + * \returns the name of the audio device at the requested index, or NULL on + * error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumAudioDevices + */ +extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, + int iscapture); + +/** + * Get the preferred audio format of a specific audio device. + * + * This function is only valid after a successfully initializing the audio + * subsystem. The values returned by this function reflect the latest call to + * SDL_GetNumAudioDevices(); re-call that function to redetect available + * hardware. + * + * `spec` will be filled with the sample rate, sample format, and channel + * count. + * + * \param index the index of the audio device; valid values range from 0 to + * SDL_GetNumAudioDevices() - 1 + * \param iscapture non-zero to query the list of recording devices, zero to + * query the list of output devices. + * \param spec The SDL_AudioSpec to be initialized by this function. + * \returns 0 on success, nonzero on error + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetNumAudioDevices + */ +extern DECLSPEC int SDLCALL SDL_GetAudioDeviceSpec(int index, + int iscapture, + SDL_AudioSpec *spec); + + +/** + * Open a specific audio device. + * + * SDL_OpenAudio(), unlike this function, always acts on device ID 1. As such, + * this function will never return a 1 so as not to conflict with the legacy + * function. + * + * Please note that SDL 2.0 before 2.0.5 did not support recording; as such, + * this function would fail if `iscapture` was not zero. Starting with SDL + * 2.0.5, recording is implemented and this value can be non-zero. + * + * Passing in a `device` name of NULL requests the most reasonable default + * (and is equivalent to what SDL_OpenAudio() does to choose a device). The + * `device` name is a UTF-8 string reported by SDL_GetAudioDeviceName(), but + * some drivers allow arbitrary and driver-specific strings, such as a + * hostname/IP address for a remote audio server, or a filename in the + * diskaudio driver. + * + * An opened audio device starts out paused, and should be enabled for playing + * by calling SDL_PauseAudioDevice(devid, 0) when you are ready for your audio + * callback function to be called. Since the audio driver may modify the + * requested size of the audio buffer, you should allocate any local mixing + * buffers after you open the audio device. + * + * The audio callback runs in a separate thread in most cases; you can prevent + * race conditions between your callback and other threads without fully + * pausing playback with SDL_LockAudioDevice(). For more information about the + * callback, see SDL_AudioSpec. + * + * Managing the audio spec via 'desired' and 'obtained': + * + * When filling in the desired audio spec structure: + * + * - `desired->freq` should be the frequency in sample-frames-per-second (Hz). + * - `desired->format` should be the audio format (`AUDIO_S16SYS`, etc). + * - `desired->samples` is the desired size of the audio buffer, in _sample + * frames_ (with stereo output, two samples--left and right--would make a + * single sample frame). This number should be a power of two, and may be + * adjusted by the audio driver to a value more suitable for the hardware. + * Good values seem to range between 512 and 8096 inclusive, depending on + * the application and CPU speed. Smaller values reduce latency, but can + * lead to underflow if the application is doing heavy processing and cannot + * fill the audio buffer in time. Note that the number of sample frames is + * directly related to time by the following formula: `ms = + * (sampleframes*1000)/freq` + * - `desired->size` is the size in _bytes_ of the audio buffer, and is + * calculated by SDL_OpenAudioDevice(). You don't initialize this. + * - `desired->silence` is the value used to set the buffer to silence, and is + * calculated by SDL_OpenAudioDevice(). You don't initialize this. + * - `desired->callback` should be set to a function that will be called when + * the audio device is ready for more data. It is passed a pointer to the + * audio buffer, and the length in bytes of the audio buffer. This function + * usually runs in a separate thread, and so you should protect data + * structures that it accesses by calling SDL_LockAudioDevice() and + * SDL_UnlockAudioDevice() in your code. Alternately, you may pass a NULL + * pointer here, and call SDL_QueueAudio() with some frequency, to queue + * more audio samples to be played (or for capture devices, call + * SDL_DequeueAudio() with some frequency, to obtain audio samples). + * - `desired->userdata` is passed as the first parameter to your callback + * function. If you passed a NULL callback, this value is ignored. + * + * `allowed_changes` can have the following flags OR'd together: + * + * - `SDL_AUDIO_ALLOW_FREQUENCY_CHANGE` + * - `SDL_AUDIO_ALLOW_FORMAT_CHANGE` + * - `SDL_AUDIO_ALLOW_CHANNELS_CHANGE` + * - `SDL_AUDIO_ALLOW_ANY_CHANGE` + * + * These flags specify how SDL should behave when a device cannot offer a + * specific feature. If the application requests a feature that the hardware + * doesn't offer, SDL will always try to get the closest equivalent. + * + * For example, if you ask for float32 audio format, but the sound card only + * supports int16, SDL will set the hardware to int16. If you had set + * SDL_AUDIO_ALLOW_FORMAT_CHANGE, SDL will change the format in the `obtained` + * structure. If that flag was *not* set, SDL will prepare to convert your + * callback's float32 audio to int16 before feeding it to the hardware and + * will keep the originally requested format in the `obtained` structure. + * + * The resulting audio specs, varying depending on hardware and on what + * changes were allowed, will then be written back to `obtained`. + * + * If your application can only handle one specific data format, pass a zero + * for `allowed_changes` and let SDL transparently handle any differences. + * + * \param device a UTF-8 string reported by SDL_GetAudioDeviceName() or a + * driver-specific name as appropriate. NULL requests the most + * reasonable default device. + * \param iscapture non-zero to specify a device should be opened for + * recording, not playback + * \param desired an SDL_AudioSpec structure representing the desired output + * format; see SDL_OpenAudio() for more information + * \param obtained an SDL_AudioSpec structure filled in with the actual output + * format; see SDL_OpenAudio() for more information + * \param allowed_changes 0, or one or more flags OR'd together + * \returns a valid device ID that is > 0 on success or 0 on failure; call + * SDL_GetError() for more information. + * + * For compatibility with SDL 1.2, this will never return 1, since + * SDL reserves that ID for the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CloseAudioDevice + * \sa SDL_GetAudioDeviceName + * \sa SDL_LockAudioDevice + * \sa SDL_OpenAudio + * \sa SDL_PauseAudioDevice + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice( + const char *device, + int iscapture, + const SDL_AudioSpec *desired, + SDL_AudioSpec *obtained, + int allowed_changes); + + + +/** + * \name Audio state + * + * Get the current audio state. + */ +/* @{ */ +typedef enum +{ + SDL_AUDIO_STOPPED = 0, + SDL_AUDIO_PLAYING, + SDL_AUDIO_PAUSED +} SDL_AudioStatus; + +/** + * This function is a legacy means of querying the audio device. + * + * New programs might want to use SDL_GetAudioDeviceStatus() instead. This + * function is equivalent to calling... + * + * ```c + * SDL_GetAudioDeviceStatus(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \returns the SDL_AudioStatus of the audio device opened by SDL_OpenAudio(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioDeviceStatus + */ +extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioStatus(void); + +/** + * Use this function to get the current audio state of an audio device. + * + * \param dev the ID of an audio device previously opened with + * SDL_OpenAudioDevice() + * \returns the SDL_AudioStatus of the specified audio device. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PauseAudioDevice + */ +extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev); +/* @} *//* Audio State */ + +/** + * \name Pause audio functions + * + * These functions pause and unpause the audio callback processing. + * They should be called with a parameter of 0 after opening the audio + * device to start playing sound. This is so you can safely initialize + * data for your callback function after opening the audio device. + * Silence will be written to the audio device during the pause. + */ +/* @{ */ + +/** + * This function is a legacy means of pausing the audio device. + * + * New programs might want to use SDL_PauseAudioDevice() instead. This + * function is equivalent to calling... + * + * ```c + * SDL_PauseAudioDevice(1, pause_on); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \param pause_on non-zero to pause, 0 to unpause + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioStatus + * \sa SDL_PauseAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); + +/** + * Use this function to pause and unpause audio playback on a specified + * device. + * + * This function pauses and unpauses the audio callback processing for a given + * device. Newly-opened audio devices start in the paused state, so you must + * call this function with **pause_on**=0 after opening the specified audio + * device to start playing sound. This allows you to safely initialize data + * for your callback function after opening the audio device. Silence will be + * written to the audio device while paused, and the audio callback is + * guaranteed to not be called. Pausing one device does not prevent other + * unpaused devices from running their callbacks. + * + * Pausing state does not stack; even if you pause a device several times, a + * single unpause will start the device playing again, and vice versa. This is + * different from how SDL_LockAudioDevice() works. + * + * If you just need to protect a few variables from race conditions vs your + * callback, you shouldn't pause the audio device, as it will lead to dropouts + * in the audio playback. Instead, you should use SDL_LockAudioDevice(). + * + * \param dev a device opened by SDL_OpenAudioDevice() + * \param pause_on non-zero to pause, 0 to unpause + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev, + int pause_on); +/* @} *//* Pause audio functions */ + +/** + * Load the audio data of a WAVE file into memory. + * + * Loading a WAVE file requires `src`, `spec`, `audio_buf` and `audio_len` to + * be valid pointers. The entire data portion of the file is then loaded into + * memory and decoded if necessary. + * + * If `freesrc` is non-zero, the data source gets automatically closed and + * freed before the function returns. + * + * Supported formats are RIFF WAVE files with the formats PCM (8, 16, 24, and + * 32 bits), IEEE Float (32 bits), Microsoft ADPCM and IMA ADPCM (4 bits), and + * A-law and mu-law (8 bits). Other formats are currently unsupported and + * cause an error. + * + * If this function succeeds, the pointer returned by it is equal to `spec` + * and the pointer to the audio data allocated by the function is written to + * `audio_buf` and its length in bytes to `audio_len`. The SDL_AudioSpec + * members `freq`, `channels`, and `format` are set to the values of the audio + * data in the buffer. The `samples` member is set to a sane default and all + * others are set to zero. + * + * It's necessary to use SDL_FreeWAV() to free the audio data returned in + * `audio_buf` when it is no longer used. + * + * Because of the underspecification of the .WAV format, there are many + * problematic files in the wild that cause issues with strict decoders. To + * provide compatibility with these files, this decoder is lenient in regards + * to the truncation of the file, the fact chunk, and the size of the RIFF + * chunk. The hints `SDL_HINT_WAVE_RIFF_CHUNK_SIZE`, + * `SDL_HINT_WAVE_TRUNCATION`, and `SDL_HINT_WAVE_FACT_CHUNK` can be used to + * tune the behavior of the loading process. + * + * Any file that is invalid (due to truncation, corruption, or wrong values in + * the headers), too big, or unsupported causes an error. Additionally, any + * critical I/O error from the data source will terminate the loading process + * with an error. The function returns NULL on error and in all cases (with + * the exception of `src` being NULL), an appropriate error message will be + * set. + * + * It is required that the data source supports seeking. + * + * Example: + * + * ```c + * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, &spec, &buf, &len); + * ``` + * + * Note that the SDL_LoadWAV macro does this same thing for you, but in a less + * messy way: + * + * ```c + * SDL_LoadWAV("sample.wav", &spec, &buf, &len); + * ``` + * + * \param src The data source for the WAVE data + * \param freesrc If non-zero, SDL will _always_ free the data source + * \param spec An SDL_AudioSpec that will be filled in with the wave file's + * format details + * \param audio_buf A pointer filled with the audio data, allocated by the + * function. + * \param audio_len A pointer filled with the length of the audio data buffer + * in bytes + * \returns This function, if successfully called, returns `spec`, which will + * be filled with the audio data format of the wave source data. + * `audio_buf` will be filled with a pointer to an allocated buffer + * containing the audio data, and `audio_len` is filled with the + * length of that audio buffer in bytes. + * + * This function returns NULL if the .WAV file cannot be opened, uses + * an unknown data format, or is corrupt; call SDL_GetError() for + * more information. + * + * When the application is done with the data returned in + * `audio_buf`, it should call SDL_FreeWAV() to dispose of it. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeWAV + * \sa SDL_LoadWAV + */ +extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, + int freesrc, + SDL_AudioSpec * spec, + Uint8 ** audio_buf, + Uint32 * audio_len); + +/** + * Loads a WAV from a file. + * Compatibility convenience function. + */ +#define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ + SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) + +/** + * Free data previously allocated with SDL_LoadWAV() or SDL_LoadWAV_RW(). + * + * After a WAVE file has been opened with SDL_LoadWAV() or SDL_LoadWAV_RW() + * its data can eventually be freed with SDL_FreeWAV(). It is safe to call + * this function with a NULL pointer. + * + * \param audio_buf a pointer to the buffer created by SDL_LoadWAV() or + * SDL_LoadWAV_RW() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadWAV + * \sa SDL_LoadWAV_RW + */ +extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf); + +/** + * Initialize an SDL_AudioCVT structure for conversion. + * + * Before an SDL_AudioCVT structure can be used to convert audio data it must + * be initialized with source and destination information. + * + * This function will zero out every field of the SDL_AudioCVT, so it must be + * called before the application fills in the final buffer information. + * + * Once this function has returned successfully, and reported that a + * conversion is necessary, the application fills in the rest of the fields in + * SDL_AudioCVT, now that it knows how large a buffer it needs to allocate, + * and then can call SDL_ConvertAudio() to complete the conversion. + * + * \param cvt an SDL_AudioCVT structure filled in with audio conversion + * information + * \param src_format the source format of the audio data; for more info see + * SDL_AudioFormat + * \param src_channels the number of channels in the source + * \param src_rate the frequency (sample-frames-per-second) of the source + * \param dst_format the destination format of the audio data; for more info + * see SDL_AudioFormat + * \param dst_channels the number of channels in the destination + * \param dst_rate the frequency (sample-frames-per-second) of the destination + * \returns 1 if the audio filter is prepared, 0 if no conversion is needed, + * or a negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ConvertAudio + */ +extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, + SDL_AudioFormat src_format, + Uint8 src_channels, + int src_rate, + SDL_AudioFormat dst_format, + Uint8 dst_channels, + int dst_rate); + +/** + * Convert audio data to a desired audio format. + * + * This function does the actual audio data conversion, after the application + * has called SDL_BuildAudioCVT() to prepare the conversion information and + * then filled in the buffer details. + * + * Once the application has initialized the `cvt` structure using + * SDL_BuildAudioCVT(), allocated an audio buffer and filled it with audio + * data in the source format, this function will convert the buffer, in-place, + * to the desired format. + * + * The data conversion may go through several passes; any given pass may + * possibly temporarily increase the size of the data. For example, SDL might + * expand 16-bit data to 32 bits before resampling to a lower frequency, + * shrinking the data size after having grown it briefly. Since the supplied + * buffer will be both the source and destination, converting as necessary + * in-place, the application must allocate a buffer that will fully contain + * the data during its largest conversion pass. After SDL_BuildAudioCVT() + * returns, the application should set the `cvt->len` field to the size, in + * bytes, of the source data, and allocate a buffer that is `cvt->len * + * cvt->len_mult` bytes long for the `buf` field. + * + * The source data should be copied into this buffer before the call to + * SDL_ConvertAudio(). Upon successful return, this buffer will contain the + * converted audio, and `cvt->len_cvt` will be the size of the converted data, + * in bytes. Any bytes in the buffer past `cvt->len_cvt` are undefined once + * this function returns. + * + * \param cvt an SDL_AudioCVT structure that was previously set up by + * SDL_BuildAudioCVT(). + * \returns 0 if the conversion was completed successfully or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BuildAudioCVT + */ +extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt); + +/* SDL_AudioStream is a new audio conversion interface. + The benefits vs SDL_AudioCVT: + - it can handle resampling data in chunks without generating + artifacts, when it doesn't have the complete buffer available. + - it can handle incoming data in any variable size. + - You push data as you have it, and pull it when you need it + */ +/* this is opaque to the outside world. */ +struct _SDL_AudioStream; +typedef struct _SDL_AudioStream SDL_AudioStream; + +/** + * Create a new audio stream. + * + * \param src_format The format of the source audio + * \param src_channels The number of channels of the source audio + * \param src_rate The sampling rate of the source audio + * \param dst_format The format of the desired audio output + * \param dst_channels The number of channels of the desired audio output + * \param dst_rate The sampling rate of the desired audio output + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC SDL_AudioStream * SDLCALL SDL_NewAudioStream(const SDL_AudioFormat src_format, + const Uint8 src_channels, + const int src_rate, + const SDL_AudioFormat dst_format, + const Uint8 dst_channels, + const int dst_rate); + +/** + * Add data to be converted/resampled to the stream. + * + * \param stream The stream the audio data is being added to + * \param buf A pointer to the audio data to add + * \param len The number of bytes to write to the stream + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamPut(SDL_AudioStream *stream, const void *buf, int len); + +/** + * Get converted/resampled data from the stream + * + * \param stream The stream the audio is being requested from + * \param buf A buffer to fill with audio data + * \param len The maximum number of bytes to fill + * \returns the number of bytes read from the stream, or -1 on error + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, int len); + +/** + * Get the number of converted/resampled bytes available. + * + * The stream may be buffering data behind the scenes until it has enough to + * resample correctly, so this number might be lower than what you expect, or + * even be zero. Add more data or flush the stream if you need the data now. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamAvailable(SDL_AudioStream *stream); + +/** + * Tell the stream that you're done sending data, and anything being buffered + * should be converted/resampled and made available immediately. + * + * It is legal to add more data to a stream after flushing, but there will be + * audio gaps in the output. Generally this is intended to signal the end of + * input, so the complete output becomes available. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamFlush(SDL_AudioStream *stream); + +/** + * Clear any pending data in the stream without converting it + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC void SDLCALL SDL_AudioStreamClear(SDL_AudioStream *stream); + +/** + * Free an audio stream + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + */ +extern DECLSPEC void SDLCALL SDL_FreeAudioStream(SDL_AudioStream *stream); + +#define SDL_MIX_MAXVOLUME 128 + +/** + * This function is a legacy means of mixing audio. + * + * This function is equivalent to calling... + * + * ```c + * SDL_MixAudioFormat(dst, src, format, len, volume); + * ``` + * + * ...where `format` is the obtained format of the audio device from the + * legacy SDL_OpenAudio() function. + * + * \param dst the destination for the mixed audio + * \param src the source audio buffer to be mixed + * \param len the length of the audio buffer in bytes + * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME + * for full audio volume + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MixAudioFormat + */ +extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, + Uint32 len, int volume); + +/** + * Mix audio data in a specified format. + * + * This takes an audio buffer `src` of `len` bytes of `format` data and mixes + * it into `dst`, performing addition, volume adjustment, and overflow + * clipping. The buffer pointed to by `dst` must also be `len` bytes of + * `format` data. + * + * This is provided for convenience -- you can mix your own audio data. + * + * Do not use this function for mixing together more than two streams of + * sample data. The output from repeated application of this function may be + * distorted by clipping, because there is no accumulator with greater range + * than the input (not to mention this being an inefficient way of doing it). + * + * It is a common misconception that this function is required to write audio + * data to an output stream in an audio callback. While you can do that, + * SDL_MixAudioFormat() is really only needed when you're mixing a single + * audio stream with a volume adjustment. + * + * \param dst the destination for the mixed audio + * \param src the source audio buffer to be mixed + * \param format the SDL_AudioFormat structure representing the desired audio + * format + * \param len the length of the audio buffer in bytes + * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME + * for full audio volume + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, + const Uint8 * src, + SDL_AudioFormat format, + Uint32 len, int volume); + +/** + * Queue more audio on non-callback devices. + * + * If you are looking to retrieve queued audio from a non-callback capture + * device, you want SDL_DequeueAudio() instead. SDL_QueueAudio() will return + * -1 to signify an error if you use it with capture devices. + * + * SDL offers two ways to feed audio to the device: you can either supply a + * callback that SDL triggers with some frequency to obtain more audio (pull + * method), or you can supply no callback, and then SDL will expect you to + * supply data at regular intervals (push method) with this function. + * + * There are no limits on the amount of data you can queue, short of + * exhaustion of address space. Queued data will drain to the device as + * necessary without further intervention from you. If the device needs audio + * but there is not enough queued, it will play silence to make up the + * difference. This means you will have skips in your audio playback if you + * aren't routinely queueing sufficient data. + * + * This function copies the supplied data, so you are safe to free it when the + * function returns. This function is thread-safe, but queueing to the same + * device from two threads at once does not promise which buffer will be + * queued first. + * + * You may not queue audio on a device that is using an application-supplied + * callback; doing so returns an error. You have to use the audio callback or + * queue audio with this function, but not both. + * + * You should not call SDL_LockAudio() on the device before queueing; SDL + * handles locking internally for this function. + * + * Note that SDL2 does not support planar audio. You will need to resample + * from planar audio formats into a non-planar one (see SDL_AudioFormat) + * before queuing audio. + * + * \param dev the device ID to which we will queue audio + * \param data the data to queue to the device for later playback + * \param len the number of bytes (not samples!) to which `data` points + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_ClearQueuedAudio + * \sa SDL_GetQueuedAudioSize + */ +extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len); + +/** + * Dequeue more audio on non-callback devices. + * + * If you are looking to queue audio for output on a non-callback playback + * device, you want SDL_QueueAudio() instead. SDL_DequeueAudio() will always + * return 0 if you use it with playback devices. + * + * SDL offers two ways to retrieve audio from a capture device: you can either + * supply a callback that SDL triggers with some frequency as the device + * records more audio data, (push method), or you can supply no callback, and + * then SDL will expect you to retrieve data at regular intervals (pull + * method) with this function. + * + * There are no limits on the amount of data you can queue, short of + * exhaustion of address space. Data from the device will keep queuing as + * necessary without further intervention from you. This means you will + * eventually run out of memory if you aren't routinely dequeueing data. + * + * Capture devices will not queue data when paused; if you are expecting to + * not need captured audio for some length of time, use SDL_PauseAudioDevice() + * to stop the capture device from queueing more data. This can be useful + * during, say, level loading times. When unpaused, capture devices will start + * queueing data from that point, having flushed any capturable data available + * while paused. + * + * This function is thread-safe, but dequeueing from the same device from two + * threads at once does not promise which thread will dequeue data first. + * + * You may not dequeue audio from a device that is using an + * application-supplied callback; doing so returns an error. You have to use + * the audio callback, or dequeue audio with this function, but not both. + * + * You should not call SDL_LockAudio() on the device before dequeueing; SDL + * handles locking internally for this function. + * + * \param dev the device ID from which we will dequeue audio + * \param data a pointer into where audio data should be copied + * \param len the number of bytes (not samples!) to which (data) points + * \returns the number of bytes dequeued, which could be less than requested; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_ClearQueuedAudio + * \sa SDL_GetQueuedAudioSize + */ +extern DECLSPEC Uint32 SDLCALL SDL_DequeueAudio(SDL_AudioDeviceID dev, void *data, Uint32 len); + +/** + * Get the number of bytes of still-queued audio. + * + * For playback devices: this is the number of bytes that have been queued for + * playback with SDL_QueueAudio(), but have not yet been sent to the hardware. + * + * Once we've sent it to the hardware, this function can not decide the exact + * byte boundary of what has been played. It's possible that we just gave the + * hardware several kilobytes right before you called this function, but it + * hasn't played any of it yet, or maybe half of it, etc. + * + * For capture devices, this is the number of bytes that have been captured by + * the device and are waiting for you to dequeue. This number may grow at any + * time, so this only informs of the lower-bound of available data. + * + * You may not queue or dequeue audio on a device that is using an + * application-supplied callback; calling this function on such a device + * always returns 0. You have to use the audio callback or queue audio, but + * not both. + * + * You should not call SDL_LockAudio() on the device before querying; SDL + * handles locking internally for this function. + * + * \param dev the device ID of which we will query queued audio size + * \returns the number of bytes (not samples!) of queued audio. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_ClearQueuedAudio + * \sa SDL_QueueAudio + * \sa SDL_DequeueAudio + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev); + +/** + * Drop any queued audio data waiting to be sent to the hardware. + * + * Immediately after this call, SDL_GetQueuedAudioSize() will return 0. For + * output devices, the hardware will start playing silence if more audio isn't + * queued. For capture devices, the hardware will start filling the empty + * queue with new data if the capture device isn't paused. + * + * This will not prevent playback of queued audio that's already been sent to + * the hardware, as we can not undo that, so expect there to be some fraction + * of a second of audio that might still be heard. This can be useful if you + * want to, say, drop any pending music or any unprocessed microphone input + * during a level change in your game. + * + * You may not queue or dequeue audio on a device that is using an + * application-supplied callback; calling this function on such a device + * always returns 0. You have to use the audio callback or queue audio, but + * not both. + * + * You should not call SDL_LockAudio() on the device before clearing the + * queue; SDL handles locking internally for this function. + * + * This function always succeeds and thus returns void. + * + * \param dev the device ID of which to clear the audio queue + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetQueuedAudioSize + * \sa SDL_QueueAudio + * \sa SDL_DequeueAudio + */ +extern DECLSPEC void SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev); + + +/** + * \name Audio lock functions + * + * The lock manipulated by these functions protects the callback function. + * During a SDL_LockAudio()/SDL_UnlockAudio() pair, you can be guaranteed that + * the callback function is not running. Do not call these from the callback + * function or you will cause deadlock. + */ +/* @{ */ + +/** + * This function is a legacy means of locking the audio device. + * + * New programs might want to use SDL_LockAudioDevice() instead. This function + * is equivalent to calling... + * + * ```c + * SDL_LockAudioDevice(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudioDevice + * \sa SDL_UnlockAudio + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_LockAudio(void); + +/** + * Use this function to lock out the audio callback function for a specified + * device. + * + * The lock manipulated by these functions protects the audio callback + * function specified in SDL_OpenAudioDevice(). During a + * SDL_LockAudioDevice()/SDL_UnlockAudioDevice() pair, you can be guaranteed + * that the callback function for that device is not running, even if the + * device is not paused. While a device is locked, any other unpaused, + * unlocked devices may still run their callbacks. + * + * Calling this function from inside your audio callback is unnecessary. SDL + * obtains this lock before calling your function, and releases it when the + * function returns. + * + * You should not hold the lock longer than absolutely necessary. If you hold + * it too long, you'll experience dropouts in your audio playback. Ideally, + * your application locks the device, sets a few variables and unlocks again. + * Do not do heavy work while holding the lock for a device. + * + * It is safe to lock the audio device multiple times, as long as you unlock + * it an equivalent number of times. The callback will not run until the + * device has been unlocked completely in this way. If your application fails + * to unlock the device appropriately, your callback will never run, you might + * hear repeating bursts of audio, and SDL_CloseAudioDevice() will probably + * deadlock. + * + * Internally, the audio device lock is a mutex; if you lock from two threads + * at once, not only will you block the audio callback, you'll block the other + * thread. + * + * \param dev the ID of the device to be locked + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev); + +/** + * This function is a legacy means of unlocking the audio device. + * + * New programs might want to use SDL_UnlockAudioDevice() instead. This + * function is equivalent to calling... + * + * ```c + * SDL_UnlockAudioDevice(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudio + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); + +/** + * Use this function to unlock the audio callback function for a specified + * device. + * + * This function should be paired with a previous SDL_LockAudioDevice() call. + * + * \param dev the ID of the device to be unlocked + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev); +/* @} *//* Audio lock functions */ + +/** + * This function is a legacy means of closing the audio device. + * + * This function is equivalent to calling... + * + * ```c + * SDL_CloseAudioDevice(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_OpenAudio + */ +extern DECLSPEC void SDLCALL SDL_CloseAudio(void); + +/** + * Use this function to shut down audio processing and close the audio device. + * + * The application should close open audio devices once they are no longer + * needed. Calling this function will wait until the device's audio callback + * is not running, release the audio hardware and then clean up internal + * state. No further audio will play from this device once this function + * returns. + * + * This function may block briefly while pending audio data is played by the + * hardware, so that applications don't drop the last buffer of data they + * supplied. + * + * The device ID is invalid as soon as the device is closed, and is eligible + * for reuse in a new SDL_OpenAudioDevice() call immediately. + * + * \param dev an audio device previously opened with SDL_OpenAudioDevice() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_OpenAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_audio_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_bits.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_bits.h new file mode 100644 index 00000000000..d822aff1ea6 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_bits.h @@ -0,0 +1,126 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_bits.h + * + * Functions for fiddling with bits and bitmasks. + */ + +#ifndef SDL_bits_h_ +#define SDL_bits_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_bits.h + */ + +/** + * Get the index of the most significant bit. Result is undefined when called + * with 0. This operation can also be stated as "count leading zeroes" and + * "log base 2". + * + * \return the index of the most significant bit, or -1 if the value is 0. + */ +#if defined(__WATCOMC__) && defined(__386__) +extern __inline int _SDL_bsr_watcom(Uint32); +#pragma aux _SDL_bsr_watcom = \ + "bsr eax, eax" \ + parm [eax] nomemory \ + value [eax] \ + modify exact [eax] nomemory; +#endif + +SDL_FORCE_INLINE int +SDL_MostSignificantBitIndex32(Uint32 x) +{ +#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) + /* Count Leading Zeroes builtin in GCC. + * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html + */ + if (x == 0) { + return -1; + } + return 31 - __builtin_clz(x); +#elif defined(__WATCOMC__) && defined(__386__) + if (x == 0) { + return -1; + } + return _SDL_bsr_watcom(x); +#elif defined(_MSC_VER) + unsigned long index; + if (_BitScanReverse(&index, x)) { + return index; + } + return -1; +#else + /* Based off of Bit Twiddling Hacks by Sean Eron Anderson + * , released in the public domain. + * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog + */ + const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000}; + const int S[] = {1, 2, 4, 8, 16}; + + int msbIndex = 0; + int i; + + if (x == 0) { + return -1; + } + + for (i = 4; i >= 0; i--) + { + if (x & b[i]) + { + x >>= S[i]; + msbIndex |= S[i]; + } + } + + return msbIndex; +#endif +} + +SDL_FORCE_INLINE SDL_bool +SDL_HasExactlyOneBitSet32(Uint32 x) +{ + if (x && !(x & (x - 1))) { + return SDL_TRUE; + } + return SDL_FALSE; +} + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_bits_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_blendmode.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_blendmode.h new file mode 100644 index 00000000000..327ae95a511 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_blendmode.h @@ -0,0 +1,198 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_blendmode.h + * + * Header file declaring the SDL_BlendMode enumeration + */ + +#ifndef SDL_blendmode_h_ +#define SDL_blendmode_h_ + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The blend mode used in SDL_RenderCopy() and drawing operations. + */ +typedef enum +{ + SDL_BLENDMODE_NONE = 0x00000000, /**< no blending + dstRGBA = srcRGBA */ + SDL_BLENDMODE_BLEND = 0x00000001, /**< alpha blending + dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA)) + dstA = srcA + (dstA * (1-srcA)) */ + SDL_BLENDMODE_ADD = 0x00000002, /**< additive blending + dstRGB = (srcRGB * srcA) + dstRGB + dstA = dstA */ + SDL_BLENDMODE_MOD = 0x00000004, /**< color modulate + dstRGB = srcRGB * dstRGB + dstA = dstA */ + SDL_BLENDMODE_MUL = 0x00000008, /**< color multiply + dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA)) + dstA = (srcA * dstA) + (dstA * (1-srcA)) */ + SDL_BLENDMODE_INVALID = 0x7FFFFFFF + + /* Additional custom blend modes can be returned by SDL_ComposeCustomBlendMode() */ + +} SDL_BlendMode; + +/** + * \brief The blend operation used when combining source and destination pixel components + */ +typedef enum +{ + SDL_BLENDOPERATION_ADD = 0x1, /**< dst + src: supported by all renderers */ + SDL_BLENDOPERATION_SUBTRACT = 0x2, /**< dst - src : supported by D3D9, D3D11, OpenGL, OpenGLES */ + SDL_BLENDOPERATION_REV_SUBTRACT = 0x3, /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */ + SDL_BLENDOPERATION_MINIMUM = 0x4, /**< min(dst, src) : supported by D3D9, D3D11 */ + SDL_BLENDOPERATION_MAXIMUM = 0x5 /**< max(dst, src) : supported by D3D9, D3D11 */ +} SDL_BlendOperation; + +/** + * \brief The normalized factor used to multiply pixel components + */ +typedef enum +{ + SDL_BLENDFACTOR_ZERO = 0x1, /**< 0, 0, 0, 0 */ + SDL_BLENDFACTOR_ONE = 0x2, /**< 1, 1, 1, 1 */ + SDL_BLENDFACTOR_SRC_COLOR = 0x3, /**< srcR, srcG, srcB, srcA */ + SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = 0x4, /**< 1-srcR, 1-srcG, 1-srcB, 1-srcA */ + SDL_BLENDFACTOR_SRC_ALPHA = 0x5, /**< srcA, srcA, srcA, srcA */ + SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = 0x6, /**< 1-srcA, 1-srcA, 1-srcA, 1-srcA */ + SDL_BLENDFACTOR_DST_COLOR = 0x7, /**< dstR, dstG, dstB, dstA */ + SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = 0x8, /**< 1-dstR, 1-dstG, 1-dstB, 1-dstA */ + SDL_BLENDFACTOR_DST_ALPHA = 0x9, /**< dstA, dstA, dstA, dstA */ + SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = 0xA /**< 1-dstA, 1-dstA, 1-dstA, 1-dstA */ +} SDL_BlendFactor; + +/** + * Compose a custom blend mode for renderers. + * + * The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept + * the SDL_BlendMode returned by this function if the renderer supports it. + * + * A blend mode controls how the pixels from a drawing operation (source) get + * combined with the pixels from the render target (destination). First, the + * components of the source and destination pixels get multiplied with their + * blend factors. Then, the blend operation takes the two products and + * calculates the result that will get stored in the render target. + * + * Expressed in pseudocode, it would look like this: + * + * ```c + * dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor); + * dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor); + * ``` + * + * Where the functions `colorOperation(src, dst)` and `alphaOperation(src, + * dst)` can return one of the following: + * + * - `src + dst` + * - `src - dst` + * - `dst - src` + * - `min(src, dst)` + * - `max(src, dst)` + * + * The red, green, and blue components are always multiplied with the first, + * second, and third components of the SDL_BlendFactor, respectively. The + * fourth component is not used. + * + * The alpha component is always multiplied with the fourth component of the + * SDL_BlendFactor. The other components are not used in the alpha + * calculation. + * + * Support for these blend modes varies for each renderer. To check if a + * specific SDL_BlendMode is supported, create a renderer and pass it to + * either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will + * return with an error if the blend mode is not supported. + * + * This list describes the support of custom blend modes for each renderer in + * SDL 2.0.6. All renderers support the four blend modes listed in the + * SDL_BlendMode enumeration. + * + * - **direct3d**: Supports all operations with all factors. However, some + * factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and + * `SDL_BLENDOPERATION_MAXIMUM`. + * - **direct3d11**: Same as Direct3D 9. + * - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + * factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL + * 2.0.6. + * - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + * factors. Color and alpha factors need to be the same. OpenGL ES 1 + * implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT` + * and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha + * operations being different from each other. May support color and alpha + * factors being different from each other. + * - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`, + * `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT` + * operations with all factors. + * - **psp**: No custom blend mode support. + * - **software**: No custom blend mode support. + * + * Some renderers do not provide an alpha component for the default render + * target. The `SDL_BLENDFACTOR_DST_ALPHA` and + * `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this + * case. + * + * \param srcColorFactor the SDL_BlendFactor applied to the red, green, and + * blue components of the source pixels + * \param dstColorFactor the SDL_BlendFactor applied to the red, green, and + * blue components of the destination pixels + * \param colorOperation the SDL_BlendOperation used to combine the red, + * green, and blue components of the source and + * destination pixels + * \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of + * the source pixels + * \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of + * the destination pixels + * \param alphaOperation the SDL_BlendOperation used to combine the alpha + * component of the source and destination pixels + * \returns an SDL_BlendMode that represents the chosen factors and + * operations. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_GetRenderDrawBlendMode + * \sa SDL_SetTextureBlendMode + * \sa SDL_GetTextureBlendMode + */ +extern DECLSPEC SDL_BlendMode SDLCALL SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor, + SDL_BlendFactor dstColorFactor, + SDL_BlendOperation colorOperation, + SDL_BlendFactor srcAlphaFactor, + SDL_BlendFactor dstAlphaFactor, + SDL_BlendOperation alphaOperation); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_blendmode_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_clipboard.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_clipboard.h new file mode 100644 index 00000000000..81a5218f413 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_clipboard.h @@ -0,0 +1,94 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_clipboard.h + * + * Include file for SDL clipboard handling + */ + +#ifndef SDL_clipboard_h_ +#define SDL_clipboard_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Function prototypes */ + +/** + * Put UTF-8 text into the clipboard. + * + * \param text the text to store in the clipboard + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetClipboardText + * \sa SDL_HasClipboardText + */ +extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text); + +/** + * Get UTF-8 text from the clipboard, which must be freed with SDL_free(). + * + * This functions returns empty string if there was not enough memory left for + * a copy of the clipboard's content. + * + * \returns the clipboard text on success or an empty string on failure; call + * SDL_GetError() for more information. Caller must call SDL_free() + * on the returned pointer when done with it (even if there was an + * error). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasClipboardText + * \sa SDL_SetClipboardText + */ +extern DECLSPEC char * SDLCALL SDL_GetClipboardText(void); + +/** + * Query whether the clipboard exists and contains a non-empty text string. + * + * \returns SDL_TRUE if the clipboard has text, or SDL_FALSE if it does not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetClipboardText + * \sa SDL_SetClipboardText + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_clipboard_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_config.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_config.h new file mode 100644 index 00000000000..4bb4115e05a --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_config.h @@ -0,0 +1,55 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_config_h_ +#define SDL_config_h_ + +#include + +/** + * \file SDL_config.h + */ + +/* Add any platform that doesn't build using the configure system. */ +#if defined(__WIN32__) +#include +#elif defined(__WINRT__) +#include +#elif defined(__MACOSX__) +#include +#elif defined(__IPHONEOS__) +#include +#elif defined(__ANDROID__) +#include +#elif defined(__OS2__) +#include +#elif defined(__EMSCRIPTEN__) +#include +#else +/* This is a minimal configuration just to get SDL running on new platforms. */ +#include +#endif /* platform config */ + +#ifdef USING_GENERATED_CONFIG_H +#error Wrong SDL_config.h, check your include path? +#endif + +#endif /* SDL_config_h_ */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_config_iphoneos.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_config_iphoneos.h new file mode 100644 index 00000000000..851ac53a44a --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_config_iphoneos.h @@ -0,0 +1,215 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_config_iphoneos_h_ +#define SDL_config_iphoneos_h_ +#define SDL_config_h_ + +#include + +#ifdef __LP64__ +#define SIZEOF_VOIDP 8 +#else +#define SIZEOF_VOIDP 4 +#endif + +#define HAVE_GCC_ATOMICS 1 + +#define STDC_HEADERS 1 +#define HAVE_ALLOCA_H 1 +#define HAVE_CTYPE_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_MATH_H 1 +#define HAVE_SIGNAL_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_STDIO_H 1 +#define HAVE_STRING_H 1 +#define HAVE_SYS_TYPES_H 1 +/* The libunwind functions are only available on x86 */ +/* #undef HAVE_LIBUNWIND_H */ + +/* C library functions */ +#define HAVE_DLOPEN 1 +#define HAVE_MALLOC 1 +#define HAVE_CALLOC 1 +#define HAVE_REALLOC 1 +#define HAVE_FREE 1 +#define HAVE_ALLOCA 1 +#define HAVE_GETENV 1 +#define HAVE_SETENV 1 +#define HAVE_PUTENV 1 +#define HAVE_SETENV 1 +#define HAVE_UNSETENV 1 +#define HAVE_QSORT 1 +#define HAVE_ABS 1 +#define HAVE_BCOPY 1 +#define HAVE_MEMSET 1 +#define HAVE_MEMCPY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MEMCMP 1 +#define HAVE_STRLEN 1 +#define HAVE_STRLCPY 1 +#define HAVE_STRLCAT 1 +#define HAVE_STRCHR 1 +#define HAVE_STRRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_STRTOK_R 1 +#define HAVE_STRTOL 1 +#define HAVE_STRTOUL 1 +#define HAVE_STRTOLL 1 +#define HAVE_STRTOULL 1 +#define HAVE_STRTOD 1 +#define HAVE_ATOI 1 +#define HAVE_ATOF 1 +#define HAVE_STRCMP 1 +#define HAVE_STRNCMP 1 +#define HAVE_STRCASECMP 1 +#define HAVE_STRNCASECMP 1 +#define HAVE_VSSCANF 1 +#define HAVE_VSNPRINTF 1 +#define HAVE_M_PI 1 +#define HAVE_ACOS 1 +#define HAVE_ACOSF 1 +#define HAVE_ASIN 1 +#define HAVE_ASINF 1 +#define HAVE_ATAN 1 +#define HAVE_ATANF 1 +#define HAVE_ATAN2 1 +#define HAVE_ATAN2F 1 +#define HAVE_CEIL 1 +#define HAVE_CEILF 1 +#define HAVE_COPYSIGN 1 +#define HAVE_COPYSIGNF 1 +#define HAVE_COS 1 +#define HAVE_COSF 1 +#define HAVE_EXP 1 +#define HAVE_EXPF 1 +#define HAVE_FABS 1 +#define HAVE_FABSF 1 +#define HAVE_FLOOR 1 +#define HAVE_FLOORF 1 +#define HAVE_FMOD 1 +#define HAVE_FMODF 1 +#define HAVE_LOG 1 +#define HAVE_LOGF 1 +#define HAVE_LOG10 1 +#define HAVE_LOG10F 1 +#define HAVE_LROUND 1 +#define HAVE_LROUNDF 1 +#define HAVE_POW 1 +#define HAVE_POWF 1 +#define HAVE_ROUND 1 +#define HAVE_ROUNDF 1 +#define HAVE_SCALBN 1 +#define HAVE_SCALBNF 1 +#define HAVE_SIN 1 +#define HAVE_SINF 1 +#define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 +#define HAVE_TRUNC 1 +#define HAVE_TRUNCF 1 +#define HAVE_SIGACTION 1 +#define HAVE_SETJMP 1 +#define HAVE_NANOSLEEP 1 +#define HAVE_SYSCONF 1 +#define HAVE_SYSCTLBYNAME 1 +#define HAVE_O_CLOEXEC 1 + +/* enable iPhone version of Core Audio driver */ +#define SDL_AUDIO_DRIVER_COREAUDIO 1 +/* Enable the dummy audio driver (src/audio/dummy/\*.c) */ +#define SDL_AUDIO_DRIVER_DUMMY 1 + +/* Enable the stub haptic driver (src/haptic/dummy/\*.c) */ +#define SDL_HAPTIC_DUMMY 1 + +/* Enable joystick support */ +/* Only enable HIDAPI support if you want to support Steam Controllers on iOS and tvOS */ +/*#define SDL_JOYSTICK_HIDAPI 1*/ +#define SDL_JOYSTICK_MFI 1 +#define SDL_JOYSTICK_VIRTUAL 1 + +#ifdef __TVOS__ +#define SDL_SENSOR_DUMMY 1 +#else +/* Enable the CoreMotion sensor driver */ +#define SDL_SENSOR_COREMOTION 1 +#endif + +/* Enable Unix style SO loading */ +#define SDL_LOADSO_DLOPEN 1 + +/* Enable various threading systems */ +#define SDL_THREAD_PTHREAD 1 +#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 + +/* Enable various timer systems */ +#define SDL_TIMER_UNIX 1 + +/* Supported video drivers */ +#define SDL_VIDEO_DRIVER_UIKIT 1 +#define SDL_VIDEO_DRIVER_DUMMY 1 + +/* Enable OpenGL ES */ +#if !TARGET_OS_MACCATALYST +#define SDL_VIDEO_OPENGL_ES2 1 +#define SDL_VIDEO_OPENGL_ES 1 +#define SDL_VIDEO_RENDER_OGL_ES 1 +#define SDL_VIDEO_RENDER_OGL_ES2 1 +#endif + +/* Metal supported on 64-bit devices running iOS 8.0 and tvOS 9.0 and newer + Also supported in simulator from iOS 13.0 and tvOS 13.0 + */ +#if (TARGET_OS_SIMULATOR && ((__IPHONE_OS_VERSION_MIN_REQUIRED >= 130000) || (__TV_OS_VERSION_MIN_REQUIRED >= 130000))) || (!TARGET_CPU_ARM && ((__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 90000))) +#define SDL_PLATFORM_SUPPORTS_METAL 1 +#else +#define SDL_PLATFORM_SUPPORTS_METAL 0 +#endif + +#if SDL_PLATFORM_SUPPORTS_METAL +#define SDL_VIDEO_RENDER_METAL 1 +#endif + +#if SDL_PLATFORM_SUPPORTS_METAL +#define SDL_VIDEO_VULKAN 1 +#endif + +#if SDL_PLATFORM_SUPPORTS_METAL +#define SDL_VIDEO_METAL 1 +#endif + +/* Enable system power support */ +#define SDL_POWER_UIKIT 1 + +/* enable iPhone keyboard support */ +#define SDL_IPHONE_KEYBOARD 1 + +/* enable iOS extended launch screen */ +#define SDL_IPHONE_LAUNCHSCREEN 1 + +/* enable filesystem support */ +#define SDL_FILESYSTEM_COCOA 1 + +#endif /* SDL_config_iphoneos_h_ */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_copying.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_copying.h new file mode 100644 index 00000000000..49e3f9da07a --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_copying.h @@ -0,0 +1,20 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_cpuinfo.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_cpuinfo.h new file mode 100644 index 00000000000..ace7e064b29 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_cpuinfo.h @@ -0,0 +1,559 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_cpuinfo.h + * + * CPU feature detection for SDL. + */ + +#ifndef SDL_cpuinfo_h_ +#define SDL_cpuinfo_h_ + +#include + +/* Need to do this here because intrin.h has C++ code in it */ +/* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ +#if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64)) +#ifdef __clang__ +/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, + so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ + +#ifndef __PRFCHWINTRIN_H +#define __PRFCHWINTRIN_H + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_prefetch(void *__P) +{ + __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); +} + +#endif /* __PRFCHWINTRIN_H */ +#endif /* __clang__ */ +#include +#ifndef _WIN64 +#ifndef __MMX__ +#define __MMX__ +#endif +#ifndef __3dNOW__ +#define __3dNOW__ +#endif +#endif +#ifndef __SSE__ +#define __SSE__ +#endif +#ifndef __SSE2__ +#define __SSE2__ +#endif +#ifndef __SSE3__ +#define __SSE3__ +#endif +#elif defined(__MINGW64_VERSION_MAJOR) +#include +#if !defined(SDL_DISABLE_ARM_NEON_H) && defined(__ARM_NEON) +# include +#endif +#else +/* altivec.h redefining bool causes a number of problems, see bugs 3993 and 4392, so you need to explicitly define SDL_ENABLE_ALTIVEC_H to have it included. */ +#if defined(HAVE_ALTIVEC_H) && defined(__ALTIVEC__) && !defined(__APPLE_ALTIVEC__) && defined(SDL_ENABLE_ALTIVEC_H) +#include +#endif +#if !defined(SDL_DISABLE_ARM_NEON_H) +# if defined(__ARM_NEON) +# include +# elif defined(__WINDOWS__) || defined(__WINRT__) +/* Visual Studio doesn't define __ARM_ARCH, but _M_ARM (if set, always 7), and _M_ARM64 (if set, always 1). */ +# if defined(_M_ARM) +# include +# include +# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */ +# endif +# if defined (_M_ARM64) +# include +# include +# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */ +# endif +# endif +#endif +#endif /* compiler version */ + +#if defined(__3dNOW__) && !defined(SDL_DISABLE_MM3DNOW_H) +#include +#endif +#if defined(HAVE_IMMINTRIN_H) && !defined(SDL_DISABLE_IMMINTRIN_H) +#include +#else +#if defined(__MMX__) && !defined(SDL_DISABLE_MMINTRIN_H) +#include +#endif +#if defined(__SSE__) && !defined(SDL_DISABLE_XMMINTRIN_H) +#include +#endif +#if defined(__SSE2__) && !defined(SDL_DISABLE_EMMINTRIN_H) +#include +#endif +#if defined(__SSE3__) && !defined(SDL_DISABLE_PMMINTRIN_H) +#include +#endif +#endif /* HAVE_IMMINTRIN_H */ + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* This is a guess for the cacheline size used for padding. + * Most x86 processors have a 64 byte cache line. + * The 64-bit PowerPC processors have a 128 byte cache line. + * We'll use the larger value to be generally safe. + */ +#define SDL_CACHELINE_SIZE 128 + +/** + * Get the number of CPU cores available. + * + * \returns the total number of logical CPU cores. On CPUs that include + * technologies such as hyperthreading, the number of logical cores + * may be more than the number of physical cores. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_GetCPUCount(void); + +/** + * Determine the L1 cache line size of the CPU. + * + * This is useful for determining multi-threaded structure padding or SIMD + * prefetch sizes. + * + * \returns the L1 cache line size of the CPU, in bytes. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void); + +/** + * Determine whether the CPU has the RDTSC instruction. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has the RDTSC instruction or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); + +/** + * Determine whether the CPU has AltiVec features. + * + * This always returns false on CPUs that aren't using PowerPC instruction + * sets. + * + * \returns SDL_TRUE if the CPU has AltiVec features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); + +/** + * Determine whether the CPU has MMX features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has MMX features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); + +/** + * Determine whether the CPU has 3DNow! features. + * + * This always returns false on CPUs that aren't using AMD instruction sets. + * + * \returns SDL_TRUE if the CPU has 3DNow! features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); + +/** + * Determine whether the CPU has SSE features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); + +/** + * Determine whether the CPU has SSE2 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE2 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); + +/** + * Determine whether the CPU has SSE3 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE3 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void); + +/** + * Determine whether the CPU has SSE4.1 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE4.1 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void); + +/** + * Determine whether the CPU has SSE4.2 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE4.2 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); + +/** + * Determine whether the CPU has AVX features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has AVX features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void); + +/** + * Determine whether the CPU has AVX2 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has AVX2 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void); + +/** + * Determine whether the CPU has AVX-512F (foundation) features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has AVX-512F features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_HasAVX + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX512F(void); + +/** + * Determine whether the CPU has ARM SIMD (ARMv6) features. + * + * This is different from ARM NEON, which is a different instruction set. + * + * This always returns false on CPUs that aren't using ARM instruction sets. + * + * \returns SDL_TRUE if the CPU has ARM SIMD features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_HasNEON + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasARMSIMD(void); + +/** + * Determine whether the CPU has NEON (ARM SIMD) features. + * + * This always returns false on CPUs that aren't using ARM instruction sets. + * + * \returns SDL_TRUE if the CPU has ARM NEON features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasNEON(void); + +/** + * Get the amount of RAM configured in the system. + * + * \returns the amount of RAM configured in the system in MB. + * + * \since This function is available since SDL 2.0.1. + */ +extern DECLSPEC int SDLCALL SDL_GetSystemRAM(void); + +/** + * Report the alignment this system needs for SIMD allocations. + * + * This will return the minimum number of bytes to which a pointer must be + * aligned to be compatible with SIMD instructions on the current machine. For + * example, if the machine supports SSE only, it will return 16, but if it + * supports AVX-512F, it'll return 64 (etc). This only reports values for + * instruction sets SDL knows about, so if your SDL build doesn't have + * SDL_HasAVX512F(), then it might return 16 for the SSE support it sees and + * not 64 for the AVX-512 instructions that exist but SDL doesn't know about. + * Plan accordingly. + * + * \returns the alignment in bytes needed for available, known SIMD + * instructions. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC size_t SDLCALL SDL_SIMDGetAlignment(void); + +/** + * Allocate memory in a SIMD-friendly way. + * + * This will allocate a block of memory that is suitable for use with SIMD + * instructions. Specifically, it will be properly aligned and padded for the + * system's supported vector instructions. + * + * The memory returned will be padded such that it is safe to read or write an + * incomplete vector at the end of the memory block. This can be useful so you + * don't have to drop back to a scalar fallback at the end of your SIMD + * processing loop to deal with the final elements without overflowing the + * allocated buffer. + * + * You must free this memory with SDL_FreeSIMD(), not free() or SDL_free() or + * delete[], etc. + * + * Note that SDL will only deal with SIMD instruction sets it is aware of; for + * example, SDL 2.0.8 knows that SSE wants 16-byte vectors (SDL_HasSSE()), and + * AVX2 wants 32 bytes (SDL_HasAVX2()), but doesn't know that AVX-512 wants + * 64. To be clear: if you can't decide to use an instruction set with an + * SDL_Has*() function, don't use that instruction set with memory allocated + * through here. + * + * SDL_AllocSIMD(0) will return a non-NULL pointer, assuming the system isn't + * out of memory, but you are not allowed to dereference it (because you only + * own zero bytes of that buffer). + * + * \param len The length, in bytes, of the block to allocate. The actual + * allocated block might be larger due to padding, etc. + * \returns a pointer to the newly-allocated block, NULL if out of memory. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_SIMDAlignment + * \sa SDL_SIMDRealloc + * \sa SDL_SIMDFree + */ +extern DECLSPEC void * SDLCALL SDL_SIMDAlloc(const size_t len); + +/** + * Reallocate memory obtained from SDL_SIMDAlloc + * + * It is not valid to use this function on a pointer from anything but + * SDL_SIMDAlloc(). It can't be used on pointers from malloc, realloc, + * SDL_malloc, memalign, new[], etc. + * + * \param mem The pointer obtained from SDL_SIMDAlloc. This function also + * accepts NULL, at which point this function is the same as + * calling SDL_SIMDAlloc with a NULL pointer. + * \param len The length, in bytes, of the block to allocated. The actual + * allocated block might be larger due to padding, etc. Passing 0 + * will return a non-NULL pointer, assuming the system isn't out of + * memory. + * \returns a pointer to the newly-reallocated block, NULL if out of memory. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_SIMDAlignment + * \sa SDL_SIMDAlloc + * \sa SDL_SIMDFree + */ +extern DECLSPEC void * SDLCALL SDL_SIMDRealloc(void *mem, const size_t len); + +/** + * Deallocate memory obtained from SDL_SIMDAlloc + * + * It is not valid to use this function on a pointer from anything but + * SDL_SIMDAlloc() or SDL_SIMDRealloc(). It can't be used on pointers from + * malloc, realloc, SDL_malloc, memalign, new[], etc. + * + * However, SDL_SIMDFree(NULL) is a legal no-op. + * + * The memory pointed to by `ptr` is no longer valid for access upon return, + * and may be returned to the system or reused by a future allocation. The + * pointer passed to this function is no longer safe to dereference once this + * function returns, and should be discarded. + * + * \param ptr The pointer, returned from SDL_SIMDAlloc or SDL_SIMDRealloc, to + * deallocate. NULL is a legal no-op. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_SIMDAlloc + * \sa SDL_SIMDRealloc + */ +extern DECLSPEC void SDLCALL SDL_SIMDFree(void *ptr); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_cpuinfo_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_endian.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_endian.h new file mode 100644 index 00000000000..5ef32704275 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_endian.h @@ -0,0 +1,326 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_endian.h + * + * Functions for reading and writing endian-specific values + */ + +#ifndef SDL_endian_h_ +#define SDL_endian_h_ + +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1400) +/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, + so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ +#ifdef __clang__ +#ifndef __PRFCHWINTRIN_H +#define __PRFCHWINTRIN_H +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_prefetch(void *__P) +{ + __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); +} +#endif /* __PRFCHWINTRIN_H */ +#endif /* __clang__ */ + +#include +#endif + +/** + * \name The two types of endianness + */ +/* @{ */ +#define SDL_LIL_ENDIAN 1234 +#define SDL_BIG_ENDIAN 4321 +/* @} */ + +#ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ +#ifdef __linux__ +#include +#define SDL_BYTEORDER __BYTE_ORDER +#elif defined(__OpenBSD__) +#include +#define SDL_BYTEORDER BYTE_ORDER +#elif defined(__FreeBSD__) || defined(__NetBSD__) +#include +#define SDL_BYTEORDER BYTE_ORDER +/* predefs from newer gcc and clang versions: */ +#elif defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__BYTE_ORDER__) +#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +#define SDL_BYTEORDER SDL_LIL_ENDIAN +#elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#define SDL_BYTEORDER SDL_BIG_ENDIAN +#else +#error Unsupported endianness +#endif /**/ +#else +#if defined(__hppa__) || \ + defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ + (defined(__MIPS__) && defined(__MIPSEB__)) || \ + defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ + defined(__sparc__) +#define SDL_BYTEORDER SDL_BIG_ENDIAN +#else +#define SDL_BYTEORDER SDL_LIL_ENDIAN +#endif +#endif /* __linux__ */ +#endif /* !SDL_BYTEORDER */ + + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_endian.h + */ + +/* various modern compilers may have builtin swap */ +#if defined(__GNUC__) || defined(__clang__) +# define HAS_BUILTIN_BSWAP16 (_SDL_HAS_BUILTIN(__builtin_bswap16)) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) +# define HAS_BUILTIN_BSWAP32 (_SDL_HAS_BUILTIN(__builtin_bswap32)) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) +# define HAS_BUILTIN_BSWAP64 (_SDL_HAS_BUILTIN(__builtin_bswap64)) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + + /* this one is broken */ +# define HAS_BROKEN_BSWAP (__GNUC__ == 2 && __GNUC_MINOR__ <= 95) +#else +# define HAS_BUILTIN_BSWAP16 0 +# define HAS_BUILTIN_BSWAP32 0 +# define HAS_BUILTIN_BSWAP64 0 +# define HAS_BROKEN_BSWAP 0 +#endif + +#if HAS_BUILTIN_BSWAP16 +#define SDL_Swap16(x) __builtin_bswap16(x) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) +#pragma intrinsic(_byteswap_ushort) +#define SDL_Swap16(x) _byteswap_ushort(x) +#elif defined(__i386__) && !HAS_BROKEN_BSWAP +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); + return x; +} +#elif defined(__x86_64__) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); + return x; +} +#elif (defined(__powerpc__) || defined(__ppc__)) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + int result; + + __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); + return (Uint16)result; +} +#elif (defined(__m68k__) && !defined(__mcoldfire__)) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern __inline Uint16 SDL_Swap16(Uint16); +#pragma aux SDL_Swap16 = \ + "xchg al, ah" \ + parm [ax] \ + modify [ax]; +#else +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); +} +#endif + +#if HAS_BUILTIN_BSWAP32 +#define SDL_Swap32(x) __builtin_bswap32(x) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) +#pragma intrinsic(_byteswap_ulong) +#define SDL_Swap32(x) _byteswap_ulong(x) +#elif defined(__i386__) && !HAS_BROKEN_BSWAP +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("bswap %0": "=r"(x):"0"(x)); + return x; +} +#elif defined(__x86_64__) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("bswapl %0": "=r"(x):"0"(x)); + return x; +} +#elif (defined(__powerpc__) || defined(__ppc__)) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + Uint32 result; + + __asm__("rlwimi %0,%2,24,16,23": "=&r"(result): "0" (x>>24), "r"(x)); + __asm__("rlwimi %0,%2,8,8,15" : "=&r"(result): "0" (result), "r"(x)); + __asm__("rlwimi %0,%2,24,0,7" : "=&r"(result): "0" (result), "r"(x)); + return result; +} +#elif (defined(__m68k__) && !defined(__mcoldfire__)) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern __inline Uint32 SDL_Swap32(Uint32); +#pragma aux SDL_Swap32 = \ + "bswap eax" \ + parm [eax] \ + modify [eax]; +#else +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | + ((x >> 8) & 0x0000FF00) | (x >> 24))); +} +#endif + +#if HAS_BUILTIN_BSWAP64 +#define SDL_Swap64(x) __builtin_bswap64(x) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) +#pragma intrinsic(_byteswap_uint64) +#define SDL_Swap64(x) _byteswap_uint64(x) +#elif defined(__i386__) && !HAS_BROKEN_BSWAP +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + union { + struct { + Uint32 a, b; + } s; + Uint64 u; + } v; + v.u = x; + __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1" + : "=r"(v.s.a), "=r"(v.s.b) + : "0" (v.s.a), "1"(v.s.b)); + return v.u; +} +#elif defined(__x86_64__) +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + __asm__("bswapq %0": "=r"(x):"0"(x)); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern __inline Uint64 SDL_Swap64(Uint64); +#pragma aux SDL_Swap64 = \ + "bswap eax" \ + "bswap edx" \ + "xchg eax,edx" \ + parm [eax edx] \ + modify [eax edx]; +#else +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + Uint32 hi, lo; + + /* Separate into high and low 32-bit values and swap them */ + lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); + x >>= 32; + hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); + x = SDL_Swap32(lo); + x <<= 32; + x |= SDL_Swap32(hi); + return (x); +} +#endif + + +SDL_FORCE_INLINE float +SDL_SwapFloat(float x) +{ + union { + float f; + Uint32 ui32; + } swapper; + swapper.f = x; + swapper.ui32 = SDL_Swap32(swapper.ui32); + return swapper.f; +} + +/* remove extra macros */ +#undef HAS_BROKEN_BSWAP +#undef HAS_BUILTIN_BSWAP16 +#undef HAS_BUILTIN_BSWAP32 +#undef HAS_BUILTIN_BSWAP64 + +/** + * \name Swap to native + * Byteswap item from the specified endianness to the native endianness. + */ +/* @{ */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define SDL_SwapLE16(X) (X) +#define SDL_SwapLE32(X) (X) +#define SDL_SwapLE64(X) (X) +#define SDL_SwapFloatLE(X) (X) +#define SDL_SwapBE16(X) SDL_Swap16(X) +#define SDL_SwapBE32(X) SDL_Swap32(X) +#define SDL_SwapBE64(X) SDL_Swap64(X) +#define SDL_SwapFloatBE(X) SDL_SwapFloat(X) +#else +#define SDL_SwapLE16(X) SDL_Swap16(X) +#define SDL_SwapLE32(X) SDL_Swap32(X) +#define SDL_SwapLE64(X) SDL_Swap64(X) +#define SDL_SwapFloatLE(X) SDL_SwapFloat(X) +#define SDL_SwapBE16(X) (X) +#define SDL_SwapBE32(X) (X) +#define SDL_SwapBE64(X) (X) +#define SDL_SwapFloatBE(X) (X) +#endif +/* @} *//* Swap to native */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_endian_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_error.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_error.h new file mode 100644 index 00000000000..743e46de111 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_error.h @@ -0,0 +1,163 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_error.h + * + * Simple error message routines for SDL. + */ + +#ifndef SDL_error_h_ +#define SDL_error_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Public functions */ + + +/** + * Set the SDL error message for the current thread. + * + * Calling this function will replace any previous error message that was set. + * + * This function always returns -1, since SDL frequently uses -1 to signify an + * failing result, leading to this idiom: + * + * ```c + * if (error_code) { + * return SDL_SetError("This operation has failed: %d", error_code); + * } + * ``` + * + * \param fmt a printf()-style message format string + * \param ... additional parameters matching % tokens in the `fmt` string, if + * any + * \returns always -1. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ClearError + * \sa SDL_GetError + */ +extern DECLSPEC int SDLCALL SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); + +/** + * Retrieve a message about the last error that occurred on the current + * thread. + * + * It is possible for multiple errors to occur before calling SDL_GetError(). + * Only the last error is returned. + * + * The message is only applicable when an SDL function has signaled an error. + * You must check the return values of SDL function calls to determine when to + * appropriately call SDL_GetError(). You should *not* use the results of + * SDL_GetError() to decide if an error has occurred! Sometimes SDL will set + * an error string even when reporting success. + * + * SDL will *not* clear the error string for successful API calls. You *must* + * check return values for failure cases before you can assume the error + * string applies. + * + * Error strings are set per-thread, so an error set in a different thread + * will not interfere with the current thread's operation. + * + * The returned string is internally allocated and must not be freed by the + * application. + * + * \returns a message with information about the specific error that occurred, + * or an empty string if there hasn't been an error message set since + * the last call to SDL_ClearError(). The message is only applicable + * when an SDL function has signaled an error. You must check the + * return values of SDL function calls to determine when to + * appropriately call SDL_GetError(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ClearError + * \sa SDL_SetError + */ +extern DECLSPEC const char *SDLCALL SDL_GetError(void); + +/** + * Get the last error message that was set for the current thread. + * + * This allows the caller to copy the error string into a provided buffer, but + * otherwise operates exactly the same as SDL_GetError(). + * + * \param errstr A buffer to fill with the last error message that was set for + * the current thread + * \param maxlen The size of the buffer pointed to by the errstr parameter + * \returns the pointer passed in as the `errstr` parameter. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_GetError + */ +extern DECLSPEC char * SDLCALL SDL_GetErrorMsg(char *errstr, int maxlen); + +/** + * Clear any previous error message for this thread. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetError + * \sa SDL_SetError + */ +extern DECLSPEC void SDLCALL SDL_ClearError(void); + +/** + * \name Internal error functions + * + * \internal + * Private error reporting function - used internally. + */ +/* @{ */ +#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) +#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) +#define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param)) +typedef enum +{ + SDL_ENOMEM, + SDL_EFREAD, + SDL_EFWRITE, + SDL_EFSEEK, + SDL_UNSUPPORTED, + SDL_LASTERROR +} SDL_errorcode; +/* SDL_Error() unconditionally returns -1. */ +extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code); +/* @} *//* Internal error functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_error_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_events.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_events.h new file mode 100644 index 00000000000..9cfeb7bc0ed --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_events.h @@ -0,0 +1,1150 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_events.h + * + * Include file for SDL event handling. + */ + +#ifndef SDL_events_h_ +#define SDL_events_h_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* General keyboard/mouse state definitions */ +#define SDL_RELEASED 0 +#define SDL_PRESSED 1 + +/** + * The types of events that can be delivered. + */ +typedef enum +{ + SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */ + + /* Application events */ + SDL_QUIT = 0x100, /**< User-requested quit */ + + /* These application events have special meaning on iOS, see README-ios.md for details */ + SDL_APP_TERMINATING, /**< The application is being terminated by the OS + Called on iOS in applicationWillTerminate() + Called on Android in onDestroy() + */ + SDL_APP_LOWMEMORY, /**< The application is low on memory, free memory if possible. + Called on iOS in applicationDidReceiveMemoryWarning() + Called on Android in onLowMemory() + */ + SDL_APP_WILLENTERBACKGROUND, /**< The application is about to enter the background + Called on iOS in applicationWillResignActive() + Called on Android in onPause() + */ + SDL_APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time + Called on iOS in applicationDidEnterBackground() + Called on Android in onPause() + */ + SDL_APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground + Called on iOS in applicationWillEnterForeground() + Called on Android in onResume() + */ + SDL_APP_DIDENTERFOREGROUND, /**< The application is now interactive + Called on iOS in applicationDidBecomeActive() + Called on Android in onResume() + */ + + SDL_LOCALECHANGED, /**< The user's locale preferences have changed. */ + + /* Display events */ + SDL_DISPLAYEVENT = 0x150, /**< Display state change */ + + /* Window events */ + SDL_WINDOWEVENT = 0x200, /**< Window state change */ + SDL_SYSWMEVENT, /**< System specific event */ + + /* Keyboard events */ + SDL_KEYDOWN = 0x300, /**< Key pressed */ + SDL_KEYUP, /**< Key released */ + SDL_TEXTEDITING, /**< Keyboard text editing (composition) */ + SDL_TEXTINPUT, /**< Keyboard text input */ + SDL_KEYMAPCHANGED, /**< Keymap changed due to a system event such as an + input language or keyboard layout change. + */ + SDL_TEXTEDITING_EXT, /**< Extended keyboard text editing (composition) */ + + /* Mouse events */ + SDL_MOUSEMOTION = 0x400, /**< Mouse moved */ + SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */ + SDL_MOUSEBUTTONUP, /**< Mouse button released */ + SDL_MOUSEWHEEL, /**< Mouse wheel motion */ + + /* Joystick events */ + SDL_JOYAXISMOTION = 0x600, /**< Joystick axis motion */ + SDL_JOYBALLMOTION, /**< Joystick trackball motion */ + SDL_JOYHATMOTION, /**< Joystick hat position change */ + SDL_JOYBUTTONDOWN, /**< Joystick button pressed */ + SDL_JOYBUTTONUP, /**< Joystick button released */ + SDL_JOYDEVICEADDED, /**< A new joystick has been inserted into the system */ + SDL_JOYDEVICEREMOVED, /**< An opened joystick has been removed */ + + /* Game controller events */ + SDL_CONTROLLERAXISMOTION = 0x650, /**< Game controller axis motion */ + SDL_CONTROLLERBUTTONDOWN, /**< Game controller button pressed */ + SDL_CONTROLLERBUTTONUP, /**< Game controller button released */ + SDL_CONTROLLERDEVICEADDED, /**< A new Game controller has been inserted into the system */ + SDL_CONTROLLERDEVICEREMOVED, /**< An opened Game controller has been removed */ + SDL_CONTROLLERDEVICEREMAPPED, /**< The controller mapping was updated */ + SDL_CONTROLLERTOUCHPADDOWN, /**< Game controller touchpad was touched */ + SDL_CONTROLLERTOUCHPADMOTION, /**< Game controller touchpad finger was moved */ + SDL_CONTROLLERTOUCHPADUP, /**< Game controller touchpad finger was lifted */ + SDL_CONTROLLERSENSORUPDATE, /**< Game controller sensor was updated */ + + /* Touch events */ + SDL_FINGERDOWN = 0x700, + SDL_FINGERUP, + SDL_FINGERMOTION, + + /* Gesture events */ + SDL_DOLLARGESTURE = 0x800, + SDL_DOLLARRECORD, + SDL_MULTIGESTURE, + + /* Clipboard events */ + SDL_CLIPBOARDUPDATE = 0x900, /**< The clipboard changed */ + + /* Drag and drop events */ + SDL_DROPFILE = 0x1000, /**< The system requests a file open */ + SDL_DROPTEXT, /**< text/plain drag-and-drop event */ + SDL_DROPBEGIN, /**< A new set of drops is beginning (NULL filename) */ + SDL_DROPCOMPLETE, /**< Current set of drops is now complete (NULL filename) */ + + /* Audio hotplug events */ + SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */ + SDL_AUDIODEVICEREMOVED, /**< An audio device has been removed. */ + + /* Sensor events */ + SDL_SENSORUPDATE = 0x1200, /**< A sensor was updated */ + + /* Render events */ + SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */ + SDL_RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */ + + /* Internal events */ + SDL_POLLSENTINEL = 0x7F00, /**< Signals the end of an event poll cycle */ + + /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use, + * and should be allocated with SDL_RegisterEvents() + */ + SDL_USEREVENT = 0x8000, + + /** + * This last event is only for bounding internal arrays + */ + SDL_LASTEVENT = 0xFFFF +} SDL_EventType; + +/** + * \brief Fields shared by every event + */ +typedef struct SDL_CommonEvent +{ + Uint32 type; + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ +} SDL_CommonEvent; + +/** + * \brief Display state change event data (event.display.*) + */ +typedef struct SDL_DisplayEvent +{ + Uint32 type; /**< ::SDL_DISPLAYEVENT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 display; /**< The associated display index */ + Uint8 event; /**< ::SDL_DisplayEventID */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint32 data1; /**< event dependent data */ +} SDL_DisplayEvent; + +/** + * \brief Window state change event data (event.window.*) + */ +typedef struct SDL_WindowEvent +{ + Uint32 type; /**< ::SDL_WINDOWEVENT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The associated window */ + Uint8 event; /**< ::SDL_WindowEventID */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint32 data1; /**< event dependent data */ + Sint32 data2; /**< event dependent data */ +} SDL_WindowEvent; + +/** + * \brief Keyboard button event structure (event.key.*) + */ +typedef struct SDL_KeyboardEvent +{ + Uint32 type; /**< ::SDL_KEYDOWN or ::SDL_KEYUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 repeat; /**< Non-zero if this is a key repeat */ + Uint8 padding2; + Uint8 padding3; + SDL_Keysym keysym; /**< The key that was pressed or released */ +} SDL_KeyboardEvent; + +#define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32) +/** + * \brief Keyboard text editing event structure (event.edit.*) + */ +typedef struct SDL_TextEditingEvent +{ + Uint32 type; /**< ::SDL_TEXTEDITING */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */ + Sint32 start; /**< The start cursor of selected editing text */ + Sint32 length; /**< The length of selected editing text */ +} SDL_TextEditingEvent; + +/** + * \brief Extended keyboard text editing event structure (event.editExt.*) when text would be + * truncated if stored in the text buffer SDL_TextEditingEvent + */ +typedef struct SDL_TextEditingExtEvent +{ + Uint32 type; /**< ::SDL_TEXTEDITING_EXT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + char* text; /**< The editing text, which should be freed with SDL_free(), and will not be NULL */ + Sint32 start; /**< The start cursor of selected editing text */ + Sint32 length; /**< The length of selected editing text */ +} SDL_TextEditingExtEvent; + +#define SDL_TEXTINPUTEVENT_TEXT_SIZE (32) +/** + * \brief Keyboard text input event structure (event.text.*) + */ +typedef struct SDL_TextInputEvent +{ + Uint32 type; /**< ::SDL_TEXTINPUT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */ +} SDL_TextInputEvent; + +/** + * \brief Mouse motion event structure (event.motion.*) + */ +typedef struct SDL_MouseMotionEvent +{ + Uint32 type; /**< ::SDL_MOUSEMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Uint32 state; /**< The current button state */ + Sint32 x; /**< X coordinate, relative to window */ + Sint32 y; /**< Y coordinate, relative to window */ + Sint32 xrel; /**< The relative motion in the X direction */ + Sint32 yrel; /**< The relative motion in the Y direction */ +} SDL_MouseMotionEvent; + +/** + * \brief Mouse button event structure (event.button.*) + */ +typedef struct SDL_MouseButtonEvent +{ + Uint32 type; /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Uint8 button; /**< The mouse button index */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 clicks; /**< 1 for single-click, 2 for double-click, etc. */ + Uint8 padding1; + Sint32 x; /**< X coordinate, relative to window */ + Sint32 y; /**< Y coordinate, relative to window */ +} SDL_MouseButtonEvent; + +/** + * \brief Mouse wheel event structure (event.wheel.*) + */ +typedef struct SDL_MouseWheelEvent +{ + Uint32 type; /**< ::SDL_MOUSEWHEEL */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */ + Sint32 y; /**< The amount scrolled vertically, positive away from the user and negative toward the user */ + Uint32 direction; /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */ + float preciseX; /**< The amount scrolled horizontally, positive to the right and negative to the left, with float precision (added in 2.0.18) */ + float preciseY; /**< The amount scrolled vertically, positive away from the user and negative toward the user, with float precision (added in 2.0.18) */ +} SDL_MouseWheelEvent; + +/** + * \brief Joystick axis motion event structure (event.jaxis.*) + */ +typedef struct SDL_JoyAxisEvent +{ + Uint32 type; /**< ::SDL_JOYAXISMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 axis; /**< The joystick axis index */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 value; /**< The axis value (range: -32768 to 32767) */ + Uint16 padding4; +} SDL_JoyAxisEvent; + +/** + * \brief Joystick trackball motion event structure (event.jball.*) + */ +typedef struct SDL_JoyBallEvent +{ + Uint32 type; /**< ::SDL_JOYBALLMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 ball; /**< The joystick trackball index */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 xrel; /**< The relative motion in the X direction */ + Sint16 yrel; /**< The relative motion in the Y direction */ +} SDL_JoyBallEvent; + +/** + * \brief Joystick hat position change event structure (event.jhat.*) + */ +typedef struct SDL_JoyHatEvent +{ + Uint32 type; /**< ::SDL_JOYHATMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 hat; /**< The joystick hat index */ + Uint8 value; /**< The hat position value. + * \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP + * \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT + * \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN + * + * Note that zero means the POV is centered. + */ + Uint8 padding1; + Uint8 padding2; +} SDL_JoyHatEvent; + +/** + * \brief Joystick button event structure (event.jbutton.*) + */ +typedef struct SDL_JoyButtonEvent +{ + Uint32 type; /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 button; /**< The joystick button index */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 padding1; + Uint8 padding2; +} SDL_JoyButtonEvent; + +/** + * \brief Joystick device event structure (event.jdevice.*) + */ +typedef struct SDL_JoyDeviceEvent +{ + Uint32 type; /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED event */ +} SDL_JoyDeviceEvent; + + +/** + * \brief Game controller axis motion event structure (event.caxis.*) + */ +typedef struct SDL_ControllerAxisEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERAXISMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 axis; /**< The controller axis (SDL_GameControllerAxis) */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 value; /**< The axis value (range: -32768 to 32767) */ + Uint16 padding4; +} SDL_ControllerAxisEvent; + + +/** + * \brief Game controller button event structure (event.cbutton.*) + */ +typedef struct SDL_ControllerButtonEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 button; /**< The controller button (SDL_GameControllerButton) */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 padding1; + Uint8 padding2; +} SDL_ControllerButtonEvent; + + +/** + * \brief Controller device event structure (event.cdevice.*) + */ +typedef struct SDL_ControllerDeviceEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, or ::SDL_CONTROLLERDEVICEREMAPPED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ +} SDL_ControllerDeviceEvent; + +/** + * \brief Game controller touchpad event structure (event.ctouchpad.*) + */ +typedef struct SDL_ControllerTouchpadEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERTOUCHPADDOWN or ::SDL_CONTROLLERTOUCHPADMOTION or ::SDL_CONTROLLERTOUCHPADUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Sint32 touchpad; /**< The index of the touchpad */ + Sint32 finger; /**< The index of the finger on the touchpad */ + float x; /**< Normalized in the range 0...1 with 0 being on the left */ + float y; /**< Normalized in the range 0...1 with 0 being at the top */ + float pressure; /**< Normalized in the range 0...1 */ +} SDL_ControllerTouchpadEvent; + +/** + * \brief Game controller sensor event structure (event.csensor.*) + */ +typedef struct SDL_ControllerSensorEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERSENSORUPDATE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Sint32 sensor; /**< The type of the sensor, one of the values of ::SDL_SensorType */ + float data[3]; /**< Up to 3 values from the sensor, as defined in SDL_sensor.h */ +} SDL_ControllerSensorEvent; + +/** + * \brief Audio device event structure (event.adevice.*) + */ +typedef struct SDL_AudioDeviceEvent +{ + Uint32 type; /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 which; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */ + Uint8 iscapture; /**< zero if an output device, non-zero if a capture device. */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; +} SDL_AudioDeviceEvent; + + +/** + * \brief Touch finger event structure (event.tfinger.*) + */ +typedef struct SDL_TouchFingerEvent +{ + Uint32 type; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_TouchID touchId; /**< The touch device id */ + SDL_FingerID fingerId; + float x; /**< Normalized in the range 0...1 */ + float y; /**< Normalized in the range 0...1 */ + float dx; /**< Normalized in the range -1...1 */ + float dy; /**< Normalized in the range -1...1 */ + float pressure; /**< Normalized in the range 0...1 */ + Uint32 windowID; /**< The window underneath the finger, if any */ +} SDL_TouchFingerEvent; + + +/** + * \brief Multiple Finger Gesture Event (event.mgesture.*) + */ +typedef struct SDL_MultiGestureEvent +{ + Uint32 type; /**< ::SDL_MULTIGESTURE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_TouchID touchId; /**< The touch device id */ + float dTheta; + float dDist; + float x; + float y; + Uint16 numFingers; + Uint16 padding; +} SDL_MultiGestureEvent; + + +/** + * \brief Dollar Gesture Event (event.dgesture.*) + */ +typedef struct SDL_DollarGestureEvent +{ + Uint32 type; /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_TouchID touchId; /**< The touch device id */ + SDL_GestureID gestureId; + Uint32 numFingers; + float error; + float x; /**< Normalized center of gesture */ + float y; /**< Normalized center of gesture */ +} SDL_DollarGestureEvent; + + +/** + * \brief An event used to request a file open by the system (event.drop.*) + * This event is enabled by default, you can disable it with SDL_EventState(). + * \note If this event is enabled, you must free the filename in the event. + */ +typedef struct SDL_DropEvent +{ + Uint32 type; /**< ::SDL_DROPBEGIN or ::SDL_DROPFILE or ::SDL_DROPTEXT or ::SDL_DROPCOMPLETE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + char *file; /**< The file name, which should be freed with SDL_free(), is NULL on begin/complete */ + Uint32 windowID; /**< The window that was dropped on, if any */ +} SDL_DropEvent; + + +/** + * \brief Sensor event structure (event.sensor.*) + */ +typedef struct SDL_SensorEvent +{ + Uint32 type; /**< ::SDL_SENSORUPDATE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Sint32 which; /**< The instance ID of the sensor */ + float data[6]; /**< Up to 6 values from the sensor - additional values can be queried using SDL_SensorGetData() */ +} SDL_SensorEvent; + +/** + * \brief The "quit requested" event + */ +typedef struct SDL_QuitEvent +{ + Uint32 type; /**< ::SDL_QUIT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ +} SDL_QuitEvent; + +/** + * \brief OS Specific event + */ +typedef struct SDL_OSEvent +{ + Uint32 type; /**< ::SDL_QUIT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ +} SDL_OSEvent; + +/** + * \brief A user-defined event type (event.user.*) + */ +typedef struct SDL_UserEvent +{ + Uint32 type; /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The associated window if any */ + Sint32 code; /**< User defined event code */ + void *data1; /**< User defined data pointer */ + void *data2; /**< User defined data pointer */ +} SDL_UserEvent; + + +struct SDL_SysWMmsg; +typedef struct SDL_SysWMmsg SDL_SysWMmsg; + +/** + * \brief A video driver dependent system event (event.syswm.*) + * This event is disabled by default, you can enable it with SDL_EventState() + * + * \note If you want to use this event, you should include SDL_syswm.h. + */ +typedef struct SDL_SysWMEvent +{ + Uint32 type; /**< ::SDL_SYSWMEVENT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */ +} SDL_SysWMEvent; + +/** + * \brief General event structure + */ +typedef union SDL_Event +{ + Uint32 type; /**< Event type, shared with all events */ + SDL_CommonEvent common; /**< Common event data */ + SDL_DisplayEvent display; /**< Display event data */ + SDL_WindowEvent window; /**< Window event data */ + SDL_KeyboardEvent key; /**< Keyboard event data */ + SDL_TextEditingEvent edit; /**< Text editing event data */ + SDL_TextEditingExtEvent editExt; /**< Extended text editing event data */ + SDL_TextInputEvent text; /**< Text input event data */ + SDL_MouseMotionEvent motion; /**< Mouse motion event data */ + SDL_MouseButtonEvent button; /**< Mouse button event data */ + SDL_MouseWheelEvent wheel; /**< Mouse wheel event data */ + SDL_JoyAxisEvent jaxis; /**< Joystick axis event data */ + SDL_JoyBallEvent jball; /**< Joystick ball event data */ + SDL_JoyHatEvent jhat; /**< Joystick hat event data */ + SDL_JoyButtonEvent jbutton; /**< Joystick button event data */ + SDL_JoyDeviceEvent jdevice; /**< Joystick device change event data */ + SDL_ControllerAxisEvent caxis; /**< Game Controller axis event data */ + SDL_ControllerButtonEvent cbutton; /**< Game Controller button event data */ + SDL_ControllerDeviceEvent cdevice; /**< Game Controller device event data */ + SDL_ControllerTouchpadEvent ctouchpad; /**< Game Controller touchpad event data */ + SDL_ControllerSensorEvent csensor; /**< Game Controller sensor event data */ + SDL_AudioDeviceEvent adevice; /**< Audio device event data */ + SDL_SensorEvent sensor; /**< Sensor event data */ + SDL_QuitEvent quit; /**< Quit request event data */ + SDL_UserEvent user; /**< Custom event data */ + SDL_SysWMEvent syswm; /**< System dependent window event data */ + SDL_TouchFingerEvent tfinger; /**< Touch finger event data */ + SDL_MultiGestureEvent mgesture; /**< Gesture event data */ + SDL_DollarGestureEvent dgesture; /**< Gesture event data */ + SDL_DropEvent drop; /**< Drag and drop event data */ + + /* This is necessary for ABI compatibility between Visual C++ and GCC. + Visual C++ will respect the push pack pragma and use 52 bytes (size of + SDL_TextEditingEvent, the largest structure for 32-bit and 64-bit + architectures) for this union, and GCC will use the alignment of the + largest datatype within the union, which is 8 bytes on 64-bit + architectures. + + So... we'll add padding to force the size to be 56 bytes for both. + + On architectures where pointers are 16 bytes, this needs rounding up to + the next multiple of 16, 64, and on architectures where pointers are + even larger the size of SDL_UserEvent will dominate as being 3 pointers. + */ + Uint8 padding[sizeof(void *) <= 8 ? 56 : sizeof(void *) == 16 ? 64 : 3 * sizeof(void *)]; +} SDL_Event; + +/* Make sure we haven't broken binary compatibility */ +SDL_COMPILE_TIME_ASSERT(SDL_Event, sizeof(SDL_Event) == sizeof(((SDL_Event *)NULL)->padding)); + + +/* Function prototypes */ + +/** + * Pump the event loop, gathering events from the input devices. + * + * This function updates the event queue and internal input device state. + * + * **WARNING**: This should only be run in the thread that initialized the + * video subsystem, and for extra safety, you should consider only doing those + * things on the main thread in any case. + * + * SDL_PumpEvents() gathers all the pending input information from devices and + * places it in the event queue. Without calls to SDL_PumpEvents() no events + * would ever be placed on the queue. Often the need for calls to + * SDL_PumpEvents() is hidden from the user since SDL_PollEvent() and + * SDL_WaitEvent() implicitly call SDL_PumpEvents(). However, if you are not + * polling or waiting for events (e.g. you are filtering them), then you must + * call SDL_PumpEvents() to force an event queue update. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_WaitEvent + */ +extern DECLSPEC void SDLCALL SDL_PumpEvents(void); + +/* @{ */ +typedef enum +{ + SDL_ADDEVENT, + SDL_PEEKEVENT, + SDL_GETEVENT +} SDL_eventaction; + +/** + * Check the event queue for messages and optionally return them. + * + * `action` may be any of the following: + * + * - `SDL_ADDEVENT`: up to `numevents` events will be added to the back of the + * event queue. + * - `SDL_PEEKEVENT`: `numevents` events at the front of the event queue, + * within the specified minimum and maximum type, will be returned to the + * caller and will _not_ be removed from the queue. + * - `SDL_GETEVENT`: up to `numevents` events at the front of the event queue, + * within the specified minimum and maximum type, will be returned to the + * caller and will be removed from the queue. + * + * You may have to call SDL_PumpEvents() before calling this function. + * Otherwise, the events may not be ready to be filtered when you call + * SDL_PeepEvents(). + * + * This function is thread-safe. + * + * \param events destination buffer for the retrieved events + * \param numevents if action is SDL_ADDEVENT, the number of events to add + * back to the event queue; if action is SDL_PEEKEVENT or + * SDL_GETEVENT, the maximum number of events to retrieve + * \param action action to take; see [[#action|Remarks]] for details + * \param minType minimum value of the event type to be considered; + * SDL_FIRSTEVENT is a safe choice + * \param maxType maximum value of the event type to be considered; + * SDL_LASTEVENT is a safe choice + * \returns the number of events actually stored or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_PumpEvents + * \sa SDL_PushEvent + */ +extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents, + SDL_eventaction action, + Uint32 minType, Uint32 maxType); +/* @} */ + +/** + * Check for the existence of a certain event type in the event queue. + * + * If you need to check for a range of event types, use SDL_HasEvents() + * instead. + * + * \param type the type of event to be queried; see SDL_EventType for details + * \returns SDL_TRUE if events matching `type` are present, or SDL_FALSE if + * events matching `type` are not present. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasEvents + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 type); + + +/** + * Check for the existence of certain event types in the event queue. + * + * If you need to check for a single event type, use SDL_HasEvent() instead. + * + * \param minType the low end of event type to be queried, inclusive; see + * SDL_EventType for details + * \param maxType the high end of event type to be queried, inclusive; see + * SDL_EventType for details + * \returns SDL_TRUE if events with type >= `minType` and <= `maxType` are + * present, or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasEvents + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType); + +/** + * Clear events of a specific type from the event queue. + * + * This will unconditionally remove any events from the queue that match + * `type`. If you need to remove a range of event types, use SDL_FlushEvents() + * instead. + * + * It's also normal to just ignore events you don't care about in your event + * loop without calling this function. + * + * This function only affects currently queued events. If you want to make + * sure that all pending OS events are flushed, you can call SDL_PumpEvents() + * on the main thread immediately before the flush call. + * + * \param type the type of event to be cleared; see SDL_EventType for details + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FlushEvents + */ +extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type); + +/** + * Clear events of a range of types from the event queue. + * + * This will unconditionally remove any events from the queue that are in the + * range of `minType` to `maxType`, inclusive. If you need to remove a single + * event type, use SDL_FlushEvent() instead. + * + * It's also normal to just ignore events you don't care about in your event + * loop without calling this function. + * + * This function only affects currently queued events. If you want to make + * sure that all pending OS events are flushed, you can call SDL_PumpEvents() + * on the main thread immediately before the flush call. + * + * \param minType the low end of event type to be cleared, inclusive; see + * SDL_EventType for details + * \param maxType the high end of event type to be cleared, inclusive; see + * SDL_EventType for details + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FlushEvent + */ +extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType); + +/** + * Poll for currently pending events. + * + * If `event` is not NULL, the next event is removed from the queue and stored + * in the SDL_Event structure pointed to by `event`. The 1 returned refers to + * this event, immediately stored in the SDL Event structure -- not an event + * to follow. + * + * If `event` is NULL, it simply returns 1 if there is an event in the queue, + * but will not remove it from the queue. + * + * As this function may implicitly call SDL_PumpEvents(), you can only call + * this function in the thread that set the video mode. + * + * SDL_PollEvent() is the favored way of receiving system events since it can + * be done from the main loop and does not suspend the main loop while waiting + * on an event to be posted. + * + * The common practice is to fully process the event queue once every frame, + * usually as a first step before updating the game's state: + * + * ```c + * while (game_is_still_running) { + * SDL_Event event; + * while (SDL_PollEvent(&event)) { // poll until all events are handled! + * // decide what to do with this event. + * } + * + * // update game state, draw the current frame + * } + * ``` + * + * \param event the SDL_Event structure to be filled with the next event from + * the queue, or NULL + * \returns 1 if there is a pending event or 0 if there are none available. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetEventFilter + * \sa SDL_PeepEvents + * \sa SDL_PushEvent + * \sa SDL_SetEventFilter + * \sa SDL_WaitEvent + * \sa SDL_WaitEventTimeout + */ +extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event); + +/** + * Wait indefinitely for the next available event. + * + * If `event` is not NULL, the next event is removed from the queue and stored + * in the SDL_Event structure pointed to by `event`. + * + * As this function may implicitly call SDL_PumpEvents(), you can only call + * this function in the thread that initialized the video subsystem. + * + * \param event the SDL_Event structure to be filled in with the next event + * from the queue, or NULL + * \returns 1 on success or 0 if there was an error while waiting for events; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_PumpEvents + * \sa SDL_WaitEventTimeout + */ +extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event); + +/** + * Wait until the specified timeout (in milliseconds) for the next available + * event. + * + * If `event` is not NULL, the next event is removed from the queue and stored + * in the SDL_Event structure pointed to by `event`. + * + * As this function may implicitly call SDL_PumpEvents(), you can only call + * this function in the thread that initialized the video subsystem. + * + * \param event the SDL_Event structure to be filled in with the next event + * from the queue, or NULL + * \param timeout the maximum number of milliseconds to wait for the next + * available event + * \returns 1 on success or 0 if there was an error while waiting for events; + * call SDL_GetError() for more information. This also returns 0 if + * the timeout elapsed without an event arriving. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_PumpEvents + * \sa SDL_WaitEvent + */ +extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event * event, + int timeout); + +/** + * Add an event to the event queue. + * + * The event queue can actually be used as a two way communication channel. + * Not only can events be read from the queue, but the user can also push + * their own events onto it. `event` is a pointer to the event structure you + * wish to push onto the queue. The event is copied into the queue, and the + * caller may dispose of the memory pointed to after SDL_PushEvent() returns. + * + * Note: Pushing device input events onto the queue doesn't modify the state + * of the device within SDL. + * + * This function is thread-safe, and can be called from other threads safely. + * + * Note: Events pushed onto the queue with SDL_PushEvent() get passed through + * the event filter but events added with SDL_PeepEvents() do not. + * + * For pushing application-specific events, please use SDL_RegisterEvents() to + * get an event type that does not conflict with other code that also wants + * its own custom event types. + * + * \param event the SDL_Event to be added to the queue + * \returns 1 on success, 0 if the event was filtered, or a negative error + * code on failure; call SDL_GetError() for more information. A + * common reason for error is the event queue being full. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PeepEvents + * \sa SDL_PollEvent + * \sa SDL_RegisterEvents + */ +extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event); + +/** + * A function pointer used for callbacks that watch the event queue. + * + * \param userdata what was passed as `userdata` to SDL_SetEventFilter() + * or SDL_AddEventWatch, etc + * \param event the event that triggered the callback + * \returns 1 to permit event to be added to the queue, and 0 to disallow + * it. When used with SDL_AddEventWatch, the return value is ignored. + * + * \sa SDL_SetEventFilter + * \sa SDL_AddEventWatch + */ +typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event); + +/** + * Set up a filter to process all events before they change internal state and + * are posted to the internal event queue. + * + * If the filter function returns 1 when called, then the event will be added + * to the internal queue. If it returns 0, then the event will be dropped from + * the queue, but the internal state will still be updated. This allows + * selective filtering of dynamically arriving events. + * + * **WARNING**: Be very careful of what you do in the event filter function, + * as it may run in a different thread! + * + * On platforms that support it, if the quit event is generated by an + * interrupt signal (e.g. pressing Ctrl-C), it will be delivered to the + * application at the next event poll. + * + * There is one caveat when dealing with the ::SDL_QuitEvent event type. The + * event filter is only called when the window manager desires to close the + * application window. If the event filter returns 1, then the window will be + * closed, otherwise the window will remain open if possible. + * + * Note: Disabled events never make it to the event filter function; see + * SDL_EventState(). + * + * Note: If you just want to inspect events without filtering, you should use + * SDL_AddEventWatch() instead. + * + * Note: Events pushed onto the queue with SDL_PushEvent() get passed through + * the event filter, but events pushed onto the queue with SDL_PeepEvents() do + * not. + * + * \param filter An SDL_EventFilter function to call when an event happens + * \param userdata a pointer that is passed to `filter` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddEventWatch + * \sa SDL_EventState + * \sa SDL_GetEventFilter + * \sa SDL_PeepEvents + * \sa SDL_PushEvent + */ +extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter, + void *userdata); + +/** + * Query the current event filter. + * + * This function can be used to "chain" filters, by saving the existing filter + * before replacing it with a function that will call that saved filter. + * + * \param filter the current callback function will be stored here + * \param userdata the pointer that is passed to the current event filter will + * be stored here + * \returns SDL_TRUE on success or SDL_FALSE if there is no event filter set. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetEventFilter + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter, + void **userdata); + +/** + * Add a callback to be triggered when an event is added to the event queue. + * + * `filter` will be called when an event happens, and its return value is + * ignored. + * + * **WARNING**: Be very careful of what you do in the event filter function, + * as it may run in a different thread! + * + * If the quit event is generated by a signal (e.g. SIGINT), it will bypass + * the internal queue and be delivered to the watch callback immediately, and + * arrive at the next event poll. + * + * Note: the callback is called for events posted by the user through + * SDL_PushEvent(), but not for disabled events, nor for events by a filter + * callback set with SDL_SetEventFilter(), nor for events posted by the user + * through SDL_PeepEvents(). + * + * \param filter an SDL_EventFilter function to call when an event happens. + * \param userdata a pointer that is passed to `filter` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DelEventWatch + * \sa SDL_SetEventFilter + */ +extern DECLSPEC void SDLCALL SDL_AddEventWatch(SDL_EventFilter filter, + void *userdata); + +/** + * Remove an event watch callback added with SDL_AddEventWatch(). + * + * This function takes the same input as SDL_AddEventWatch() to identify and + * delete the corresponding callback. + * + * \param filter the function originally passed to SDL_AddEventWatch() + * \param userdata the pointer originally passed to SDL_AddEventWatch() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddEventWatch + */ +extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter, + void *userdata); + +/** + * Run a specific filter function on the current event queue, removing any + * events for which the filter returns 0. + * + * See SDL_SetEventFilter() for more information. Unlike SDL_SetEventFilter(), + * this function does not change the filter permanently, it only uses the + * supplied filter until this function returns. + * + * \param filter the SDL_EventFilter function to call when an event happens + * \param userdata a pointer that is passed to `filter` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetEventFilter + * \sa SDL_SetEventFilter + */ +extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, + void *userdata); + +/* @{ */ +#define SDL_QUERY -1 +#define SDL_IGNORE 0 +#define SDL_DISABLE 0 +#define SDL_ENABLE 1 + +/** + * Set the state of processing events by type. + * + * `state` may be any of the following: + * + * - `SDL_QUERY`: returns the current processing state of the specified event + * - `SDL_IGNORE` (aka `SDL_DISABLE`): the event will automatically be dropped + * from the event queue and will not be filtered + * - `SDL_ENABLE`: the event will be processed normally + * + * \param type the type of event; see SDL_EventType for details + * \param state how to process the event + * \returns `SDL_DISABLE` or `SDL_ENABLE`, representing the processing state + * of the event before this function makes any changes to it. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetEventState + */ +extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint32 type, int state); +/* @} */ +#define SDL_GetEventState(type) SDL_EventState(type, SDL_QUERY) + +/** + * Allocate a set of user-defined events, and return the beginning event + * number for that set of events. + * + * Calling this function with `numevents` <= 0 is an error and will return + * (Uint32)-1. + * + * Note, (Uint32)-1 means the maximum unsigned 32-bit integer value (or + * 0xFFFFFFFF), but is clearer to write. + * + * \param numevents the number of events to be allocated + * \returns the beginning event number, or (Uint32)-1 if there are not enough + * user-defined events left. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PushEvent + */ +extern DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_events_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_filesystem.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_filesystem.h new file mode 100644 index 00000000000..1c92913161e --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_filesystem.h @@ -0,0 +1,145 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_filesystem.h + * + * \brief Include file for filesystem SDL API functions + */ + +#ifndef SDL_filesystem_h_ +#define SDL_filesystem_h_ + +#include + +#include + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the directory where the application was run from. + * + * This is not necessarily a fast call, so you should call this once near + * startup and save the string if you need it. + * + * **Mac OS X and iOS Specific Functionality**: If the application is in a + * ".app" bundle, this function returns the Resource directory (e.g. + * MyApp.app/Contents/Resources/). This behaviour can be overridden by adding + * a property to the Info.plist file. Adding a string key with the name + * SDL_FILESYSTEM_BASE_DIR_TYPE with a supported value will change the + * behaviour. + * + * Supported values for the SDL_FILESYSTEM_BASE_DIR_TYPE property (Given an + * application in /Applications/SDLApp/MyApp.app): + * + * - `resource`: bundle resource directory (the default). For example: + * `/Applications/SDLApp/MyApp.app/Contents/Resources` + * - `bundle`: the Bundle directory. For example: + * `/Applications/SDLApp/MyApp.app/` + * - `parent`: the containing directory of the bundle. For example: + * `/Applications/SDLApp/` + * + * The returned path is guaranteed to end with a path separator ('\' on + * Windows, '/' on most other platforms). + * + * The pointer returned is owned by the caller. Please call SDL_free() on the + * pointer when done with it. + * + * \returns an absolute path in UTF-8 encoding to the application data + * directory. NULL will be returned on error or when the platform + * doesn't implement this functionality, call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_GetPrefPath + */ +extern DECLSPEC char *SDLCALL SDL_GetBasePath(void); + +/** + * Get the user-and-app-specific path where files can be written. + * + * Get the "pref dir". This is meant to be where users can write personal + * files (preferences and save games, etc) that are specific to your + * application. This directory is unique per user, per application. + * + * This function will decide the appropriate location in the native + * filesystem, create the directory if necessary, and return a string of the + * absolute path to the directory in UTF-8 encoding. + * + * On Windows, the string might look like: + * + * `C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\` + * + * On Linux, the string might look like" + * + * `/home/bob/.local/share/My Program Name/` + * + * On Mac OS X, the string might look like: + * + * `/Users/bob/Library/Application Support/My Program Name/` + * + * You should assume the path returned by this function is the only safe place + * to write files (and that SDL_GetBasePath(), while it might be writable, or + * even the parent of the returned path, isn't where you should be writing + * things). + * + * Both the org and app strings may become part of a directory name, so please + * follow these rules: + * + * - Try to use the same org string (_including case-sensitivity_) for all + * your applications that use this function. + * - Always use a unique app string for each one, and make sure it never + * changes for an app once you've decided on it. + * - Unicode characters are legal, as long as it's UTF-8 encoded, but... + * - ...only use letters, numbers, and spaces. Avoid punctuation like "Game + * Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient. + * + * The returned path is guaranteed to end with a path separator ('\' on + * Windows, '/' on most other platforms). + * + * The pointer returned is owned by the caller. Please call SDL_free() on the + * pointer when done with it. + * + * \param org the name of your organization + * \param app the name of your application + * \returns a UTF-8 string of the user directory in platform-dependent + * notation. NULL if there's a problem (creating directory failed, + * etc.). + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_GetBasePath + */ +extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_filesystem_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_gamecontroller.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_gamecontroller.h new file mode 100644 index 00000000000..254397c6c96 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_gamecontroller.h @@ -0,0 +1,1002 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_gamecontroller.h + * + * Include file for SDL game controller event handling + */ + +#ifndef SDL_gamecontroller_h_ +#define SDL_gamecontroller_h_ + +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_gamecontroller.h + * + * In order to use these functions, SDL_Init() must have been called + * with the ::SDL_INIT_GAMECONTROLLER flag. This causes SDL to scan the system + * for game controllers, and load appropriate drivers. + * + * If you would like to receive controller updates while the application + * is in the background, you should set the following hint before calling + * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS + */ + +/** + * The gamecontroller structure used to identify an SDL game controller + */ +struct _SDL_GameController; +typedef struct _SDL_GameController SDL_GameController; + +typedef enum +{ + SDL_CONTROLLER_TYPE_UNKNOWN = 0, + SDL_CONTROLLER_TYPE_XBOX360, + SDL_CONTROLLER_TYPE_XBOXONE, + SDL_CONTROLLER_TYPE_PS3, + SDL_CONTROLLER_TYPE_PS4, + SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO, + SDL_CONTROLLER_TYPE_VIRTUAL, + SDL_CONTROLLER_TYPE_PS5, + SDL_CONTROLLER_TYPE_AMAZON_LUNA, + SDL_CONTROLLER_TYPE_GOOGLE_STADIA +} SDL_GameControllerType; + +typedef enum +{ + SDL_CONTROLLER_BINDTYPE_NONE = 0, + SDL_CONTROLLER_BINDTYPE_BUTTON, + SDL_CONTROLLER_BINDTYPE_AXIS, + SDL_CONTROLLER_BINDTYPE_HAT +} SDL_GameControllerBindType; + +/** + * Get the SDL joystick layer binding for this controller button/axis mapping + */ +typedef struct SDL_GameControllerButtonBind +{ + SDL_GameControllerBindType bindType; + union + { + int button; + int axis; + struct { + int hat; + int hat_mask; + } hat; + } value; + +} SDL_GameControllerButtonBind; + + +/** + * To count the number of game controllers in the system for the following: + * + * ```c + * int nJoysticks = SDL_NumJoysticks(); + * int nGameControllers = 0; + * for (int i = 0; i < nJoysticks; i++) { + * if (SDL_IsGameController(i)) { + * nGameControllers++; + * } + * } + * ``` + * + * Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping() you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is: + * guid,name,mappings + * + * Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones. + * Under Windows there is a reserved GUID of "xinput" that covers any XInput devices. + * The mapping format for joystick is: + * bX - a joystick button, index X + * hX.Y - hat X with value Y + * aX - axis X of the joystick + * Buttons can be used as a controller axis and vice versa. + * + * This string shows an example of a valid mapping for a controller + * + * ```c + * "03000000341a00003608000000000000,PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", + * ``` + */ + +/** + * Load a set of Game Controller mappings from a seekable SDL data stream. + * + * You can call this function several times, if needed, to load different + * database files. + * + * If a new mapping is loaded for an already known controller GUID, the later + * version will overwrite the one currently loaded. + * + * Mappings not belonging to the current platform or with no platform field + * specified will be ignored (i.e. mappings for Linux will be ignored in + * Windows, etc). + * + * This function will load the text database entirely in memory before + * processing it, so take this into consideration if you are in a memory + * constrained environment. + * + * \param rw the data stream for the mappings to be added + * \param freerw non-zero to close the stream after being read + * \returns the number of mappings added or -1 on error; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_GameControllerAddMapping + * \sa SDL_GameControllerAddMappingsFromFile + * \sa SDL_GameControllerMappingForGUID + */ +extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, int freerw); + +/** + * Load a set of mappings from a file, filtered by the current SDL_GetPlatform() + * + * Convenience macro. + */ +#define SDL_GameControllerAddMappingsFromFile(file) SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file, "rb"), 1) + +/** + * Add support for controllers that SDL is unaware of or to cause an existing + * controller to have a different binding. + * + * The mapping string has the format "GUID,name,mapping", where GUID is the + * string value from SDL_JoystickGetGUIDString(), name is the human readable + * string for the device and mappings are controller mappings to joystick + * ones. Under Windows there is a reserved GUID of "xinput" that covers all + * XInput devices. The mapping format for joystick is: {| |bX |a joystick + * button, index X |- |hX.Y |hat X with value Y |- |aX |axis X of the joystick + * |} Buttons can be used as a controller axes and vice versa. + * + * This string shows an example of a valid mapping for a controller: + * + * ```c + * "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7" + * ``` + * + * \param mappingString the mapping string + * \returns 1 if a new mapping is added, 0 if an existing mapping is updated, + * -1 on error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerMapping + * \sa SDL_GameControllerMappingForGUID + */ +extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping(const char* mappingString); + +/** + * Get the number of mappings installed. + * + * \returns the number of mappings. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerNumMappings(void); + +/** + * Get the mapping at a particular index. + * + * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if + * the index is out of range. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForIndex(int mapping_index); + +/** + * Get the game controller mapping string for a given GUID. + * + * The returned string must be freed with SDL_free(). + * + * \param guid a structure containing the GUID for which a mapping is desired + * \returns a mapping string or NULL on error; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetDeviceGUID + * \sa SDL_JoystickGetGUID + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid); + +/** + * Get the current mapping of a Game Controller. + * + * The returned string must be freed with SDL_free(). + * + * Details about mappings are discussed with SDL_GameControllerAddMapping(). + * + * \param gamecontroller the game controller you want to get the current + * mapping for + * \returns a string that has the controller's mapping or NULL if no mapping + * is available; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerAddMapping + * \sa SDL_GameControllerMappingForGUID + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMapping(SDL_GameController *gamecontroller); + +/** + * Check if the given joystick is supported by the game controller interface. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * \param joystick_index the device_index of a device, up to + * SDL_NumJoysticks() + * \returns SDL_TRUE if the given joystick is supported by the game controller + * interface, SDL_FALSE if it isn't or it's an invalid index. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerNameForIndex + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index); + +/** + * Get the implementation dependent name for the game controller. + * + * This function can be called before any controllers are opened. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1 + * \returns the implementation-dependent name for the game controller, or NULL + * if there is no name or the index is invalid. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerName + * \sa SDL_GameControllerOpen + * \sa SDL_IsGameController + */ +extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_index); + +/** + * Get the type of a game controller. + * + * This can be called before any controllers are opened. + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1 + * \returns the controller type. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerTypeForIndex(int joystick_index); + +/** + * Get the mapping of a game controller. + * + * This can be called before any controllers are opened. + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1 + * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if + * no mapping is available. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC char *SDLCALL SDL_GameControllerMappingForDeviceIndex(int joystick_index); + +/** + * Open a game controller for use. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * The index passed as an argument refers to the N'th game controller on the + * system. This index is not the value which will identify this controller in + * future controller events. The joystick's instance id (SDL_JoystickID) will + * be used there instead. + * + * \param joystick_index the device_index of a device, up to + * SDL_NumJoysticks() + * \returns a gamecontroller identifier or NULL if an error occurred; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerClose + * \sa SDL_GameControllerNameForIndex + * \sa SDL_IsGameController + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerOpen(int joystick_index); + +/** + * Get the SDL_GameController associated with an instance id. + * + * \param joyid the instance id to get the SDL_GameController for + * \returns an SDL_GameController on success or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromInstanceID(SDL_JoystickID joyid); + +/** + * Get the SDL_GameController associated with a player index. + * + * Please note that the player index is _not_ the device index, nor is it the + * instance id! + * + * \param player_index the player index, which is not the device index or the + * instance id! + * \returns the SDL_GameController associated with a player index. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_GameControllerGetPlayerIndex + * \sa SDL_GameControllerSetPlayerIndex + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromPlayerIndex(int player_index); + +/** + * Get the implementation-dependent name for an opened game controller. + * + * This is the same name as returned by SDL_GameControllerNameForIndex(), but + * it takes a controller identifier instead of the (unstable) device index. + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen() + * \returns the implementation dependent name for the game controller, or NULL + * if there is no name or the identifier passed is invalid. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerNameForIndex + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *gamecontroller); + +/** + * Get the type of this currently opened controller + * + * This is the same name as returned by SDL_GameControllerTypeForIndex(), but + * it takes a controller identifier instead of the (unstable) device index. + * + * \param gamecontroller the game controller object to query. + * \returns the controller type. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerGetType(SDL_GameController *gamecontroller); + +/** + * Get the player index of an opened game controller. + * + * For XInput controllers this returns the XInput user index. + * + * \param gamecontroller the game controller object to query. + * \returns the player index for controller, or -1 if it's not available. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetPlayerIndex(SDL_GameController *gamecontroller); + +/** + * Set the player index of an opened game controller. + * + * \param gamecontroller the game controller object to adjust. + * \param player_index Player index to assign to this controller. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC void SDLCALL SDL_GameControllerSetPlayerIndex(SDL_GameController *gamecontroller, int player_index); + +/** + * Get the USB vendor ID of an opened controller, if available. + * + * If the vendor ID isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the USB vendor ID, or zero if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetVendor(SDL_GameController *gamecontroller); + +/** + * Get the USB product ID of an opened controller, if available. + * + * If the product ID isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the USB product ID, or zero if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProduct(SDL_GameController *gamecontroller); + +/** + * Get the product version of an opened controller, if available. + * + * If the product version isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the USB product version, or zero if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProductVersion(SDL_GameController *gamecontroller); + +/** + * Get the serial number of an opened controller, if available. + * + * Returns the serial number of the controller, or NULL if it is not + * available. + * + * \param gamecontroller the game controller object to query. + * \return the serial number, or NULL if unavailable. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC const char * SDLCALL SDL_GameControllerGetSerial(SDL_GameController *gamecontroller); + +/** + * Check if a controller has been opened and is currently connected. + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen() + * \returns SDL_TRUE if the controller has been opened and is currently + * connected, or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerClose + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerGetAttached(SDL_GameController *gamecontroller); + +/** + * Get the Joystick ID from a Game Controller. + * + * This function will give you a SDL_Joystick object, which allows you to use + * the SDL_Joystick functions with a SDL_GameController object. This would be + * useful for getting a joystick's position at any given time, even if it + * hasn't moved (moving it would produce an event, which would have the axis' + * value). + * + * The pointer returned is owned by the SDL_GameController. You should not + * call SDL_JoystickClose() on it, for example, since doing so will likely + * cause SDL to crash. + * + * \param gamecontroller the game controller object that you want to get a + * joystick from + * \returns a SDL_Joystick object; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_GameControllerGetJoystick(SDL_GameController *gamecontroller); + +/** + * Query or change current state of Game Controller events. + * + * If controller events are disabled, you must call SDL_GameControllerUpdate() + * yourself and check the state of the controller when you want controller + * information. + * + * Any number can be passed to SDL_GameControllerEventState(), but only -1, 0, + * and 1 will have any effect. Other numbers will just be returned. + * + * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` + * \returns the same value passed to the function, with exception to -1 + * (SDL_QUERY), which will return the current state. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickEventState + */ +extern DECLSPEC int SDLCALL SDL_GameControllerEventState(int state); + +/** + * Manually pump game controller updates if not using the loop. + * + * This function is called automatically by the event loop if events are + * enabled. Under such circumstances, it will not be necessary to call this + * function. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_GameControllerUpdate(void); + + +/** + * The list of axes available from a controller + * + * Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to SDL_JOYSTICK_AXIS_MAX, + * and are centered within ~8000 of zero, though advanced UI will allow users to set + * or autodetect the dead zone, which varies between controllers. + * + * Trigger axis values range from 0 to SDL_JOYSTICK_AXIS_MAX. + */ +typedef enum +{ + SDL_CONTROLLER_AXIS_INVALID = -1, + SDL_CONTROLLER_AXIS_LEFTX, + SDL_CONTROLLER_AXIS_LEFTY, + SDL_CONTROLLER_AXIS_RIGHTX, + SDL_CONTROLLER_AXIS_RIGHTY, + SDL_CONTROLLER_AXIS_TRIGGERLEFT, + SDL_CONTROLLER_AXIS_TRIGGERRIGHT, + SDL_CONTROLLER_AXIS_MAX +} SDL_GameControllerAxis; + +/** + * Convert a string into SDL_GameControllerAxis enum. + * + * This function is called internally to translate SDL_GameController mapping + * strings for the underlying joystick device into the consistent + * SDL_GameController mapping. You do not normally need to call this function + * unless you are parsing SDL_GameController mappings in your own code. + * + * Note specially that "righttrigger" and "lefttrigger" map to + * `SDL_CONTROLLER_AXIS_TRIGGERRIGHT` and `SDL_CONTROLLER_AXIS_TRIGGERLEFT`, + * respectively. + * + * \param str string representing a SDL_GameController axis + * \returns the SDL_GameControllerAxis enum corresponding to the input string, + * or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetStringForAxis + */ +extern DECLSPEC SDL_GameControllerAxis SDLCALL SDL_GameControllerGetAxisFromString(const char *str); + +/** + * Convert from an SDL_GameControllerAxis enum to a string. + * + * The caller should not SDL_free() the returned string. + * + * \param axis an enum value for a given SDL_GameControllerAxis + * \returns a string for the given axis, or NULL if an invalid axis is + * specified. The string returned is of the format used by + * SDL_GameController mapping strings. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetAxisFromString + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis); + +/** + * Get the SDL joystick layer binding for a controller axis mapping. + * + * \param gamecontroller a game controller + * \param axis an axis enum value (one of the SDL_GameControllerAxis values) + * \returns a SDL_GameControllerButtonBind describing the bind. On failure + * (like the given Controller axis doesn't exist on the device), its + * `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetBindForButton + */ +extern DECLSPEC SDL_GameControllerButtonBind SDLCALL +SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, + SDL_GameControllerAxis axis); + +/** + * Query whether a game controller has a given axis. + * + * This merely reports whether the controller's mapping defined this axis, as + * that is all the information SDL has about the physical device. + * + * \param gamecontroller a game controller + * \param axis an axis enum value (an SDL_GameControllerAxis value) + * \returns SDL_TRUE if the controller has this axis, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL +SDL_GameControllerHasAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); + +/** + * Get the current state of an axis control on a game controller. + * + * The axis indices start at index 0. + * + * The state is a value ranging from -32768 to 32767. Triggers, however, range + * from 0 to 32767 (they never return a negative value). + * + * \param gamecontroller a game controller + * \param axis an axis index (one of the SDL_GameControllerAxis values) + * \returns axis state (including 0) on success or 0 (also) on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetButton + */ +extern DECLSPEC Sint16 SDLCALL +SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); + +/** + * The list of buttons available from a controller + */ +typedef enum +{ + SDL_CONTROLLER_BUTTON_INVALID = -1, + SDL_CONTROLLER_BUTTON_A, + SDL_CONTROLLER_BUTTON_B, + SDL_CONTROLLER_BUTTON_X, + SDL_CONTROLLER_BUTTON_Y, + SDL_CONTROLLER_BUTTON_BACK, + SDL_CONTROLLER_BUTTON_GUIDE, + SDL_CONTROLLER_BUTTON_START, + SDL_CONTROLLER_BUTTON_LEFTSTICK, + SDL_CONTROLLER_BUTTON_RIGHTSTICK, + SDL_CONTROLLER_BUTTON_LEFTSHOULDER, + SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, + SDL_CONTROLLER_BUTTON_DPAD_UP, + SDL_CONTROLLER_BUTTON_DPAD_DOWN, + SDL_CONTROLLER_BUTTON_DPAD_LEFT, + SDL_CONTROLLER_BUTTON_DPAD_RIGHT, + SDL_CONTROLLER_BUTTON_MISC1, /* Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button */ + SDL_CONTROLLER_BUTTON_PADDLE1, /* Xbox Elite paddle P1 */ + SDL_CONTROLLER_BUTTON_PADDLE2, /* Xbox Elite paddle P3 */ + SDL_CONTROLLER_BUTTON_PADDLE3, /* Xbox Elite paddle P2 */ + SDL_CONTROLLER_BUTTON_PADDLE4, /* Xbox Elite paddle P4 */ + SDL_CONTROLLER_BUTTON_TOUCHPAD, /* PS4/PS5 touchpad button */ + SDL_CONTROLLER_BUTTON_MAX +} SDL_GameControllerButton; + +/** + * Convert a string into an SDL_GameControllerButton enum. + * + * This function is called internally to translate SDL_GameController mapping + * strings for the underlying joystick device into the consistent + * SDL_GameController mapping. You do not normally need to call this function + * unless you are parsing SDL_GameController mappings in your own code. + * + * \param str string representing a SDL_GameController axis + * \returns the SDL_GameControllerButton enum corresponding to the input + * string, or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_GameControllerButton SDLCALL SDL_GameControllerGetButtonFromString(const char *str); + +/** + * Convert from an SDL_GameControllerButton enum to a string. + * + * The caller should not SDL_free() the returned string. + * + * \param button an enum value for a given SDL_GameControllerButton + * \returns a string for the given button, or NULL if an invalid axis is + * specified. The string returned is of the format used by + * SDL_GameController mapping strings. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetButtonFromString + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForButton(SDL_GameControllerButton button); + +/** + * Get the SDL joystick layer binding for a controller button mapping. + * + * \param gamecontroller a game controller + * \param button an button enum value (an SDL_GameControllerButton value) + * \returns a SDL_GameControllerButtonBind describing the bind. On failure + * (like the given Controller button doesn't exist on the device), + * its `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetBindForAxis + */ +extern DECLSPEC SDL_GameControllerButtonBind SDLCALL +SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Query whether a game controller has a given button. + * + * This merely reports whether the controller's mapping defined this button, + * as that is all the information SDL has about the physical device. + * + * \param gamecontroller a game controller + * \param button a button enum value (an SDL_GameControllerButton value) + * \returns SDL_TRUE if the controller has this button, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Get the current state of a button on a game controller. + * + * \param gamecontroller a game controller + * \param button a button index (one of the SDL_GameControllerButton values) + * \returns 1 for pressed state or 0 for not pressed state or error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetAxis + */ +extern DECLSPEC Uint8 SDLCALL SDL_GameControllerGetButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Get the number of touchpads on a game controller. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetNumTouchpads(SDL_GameController *gamecontroller); + +/** + * Get the number of supported simultaneous fingers on a touchpad on a game + * controller. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetNumTouchpadFingers(SDL_GameController *gamecontroller, int touchpad); + +/** + * Get the current state of a finger on a touchpad on a game controller. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetTouchpadFinger(SDL_GameController *gamecontroller, int touchpad, int finger, Uint8 *state, float *x, float *y, float *pressure); + +/** + * Return whether a game controller has a particular sensor. + * + * \param gamecontroller The controller to query + * \param type The type of sensor to query + * \returns SDL_TRUE if the sensor exists, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasSensor(SDL_GameController *gamecontroller, SDL_SensorType type); + +/** + * Set whether data reporting for a game controller sensor is enabled. + * + * \param gamecontroller The controller to update + * \param type The type of sensor to enable/disable + * \param enabled Whether data reporting should be enabled + * \returns 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerSetSensorEnabled(SDL_GameController *gamecontroller, SDL_SensorType type, SDL_bool enabled); + +/** + * Query whether sensor data reporting is enabled for a game controller. + * + * \param gamecontroller The controller to query + * \param type The type of sensor to query + * \returns SDL_TRUE if the sensor is enabled, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerIsSensorEnabled(SDL_GameController *gamecontroller, SDL_SensorType type); + +/** + * Get the data rate (number of events per second) of a game controller + * sensor. + * + * \param gamecontroller The controller to query + * \param type The type of sensor to query + * \return the data rate, or 0.0f if the data rate is not available. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC float SDLCALL SDL_GameControllerGetSensorDataRate(SDL_GameController *gamecontroller, SDL_SensorType type); + +/** + * Get the current state of a game controller sensor. + * + * The number of values and interpretation of the data is sensor dependent. + * See SDL_sensor.h for the details for each type of sensor. + * + * \param gamecontroller The controller to query + * \param type The type of sensor to query + * \param data A pointer filled with the current sensor state + * \param num_values The number of values to write to data + * \return 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetSensorData(SDL_GameController *gamecontroller, SDL_SensorType type, float *data, int num_values); + +/** + * Start a rumble effect on a game controller. + * + * Each call to this function cancels any previous rumble effect, and calling + * it with 0 intensity stops any rumbling. + * + * \param gamecontroller The controller to vibrate + * \param low_frequency_rumble The intensity of the low frequency (left) + * rumble motor, from 0 to 0xFFFF + * \param high_frequency_rumble The intensity of the high frequency (right) + * rumble motor, from 0 to 0xFFFF + * \param duration_ms The duration of the rumble effect, in milliseconds + * \returns 0, or -1 if rumble isn't supported on this controller + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_GameControllerHasRumble + */ +extern DECLSPEC int SDLCALL SDL_GameControllerRumble(SDL_GameController *gamecontroller, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); + +/** + * Start a rumble effect in the game controller's triggers. + * + * Each call to this function cancels any previous trigger rumble effect, and + * calling it with 0 intensity stops any rumbling. + * + * Note that this is rumbling of the _triggers_ and not the game controller as + * a whole. This is currently only supported on Xbox One controllers. If you + * want the (more common) whole-controller rumble, use + * SDL_GameControllerRumble() instead. + * + * \param gamecontroller The controller to vibrate + * \param left_rumble The intensity of the left trigger rumble motor, from 0 + * to 0xFFFF + * \param right_rumble The intensity of the right trigger rumble motor, from 0 + * to 0xFFFF + * \param duration_ms The duration of the rumble effect, in milliseconds + * \returns 0, or -1 if trigger rumble isn't supported on this controller + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_GameControllerHasRumbleTriggers + */ +extern DECLSPEC int SDLCALL SDL_GameControllerRumbleTriggers(SDL_GameController *gamecontroller, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms); + +/** + * Query whether a game controller has an LED. + * + * \param gamecontroller The controller to query + * \returns SDL_TRUE, or SDL_FALSE if this controller does not have a + * modifiable LED + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasLED(SDL_GameController *gamecontroller); + +/** + * Query whether a game controller has rumble support. + * + * \param gamecontroller The controller to query + * \returns SDL_TRUE, or SDL_FALSE if this controller does not have rumble + * support + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerRumble + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumble(SDL_GameController *gamecontroller); + +/** + * Query whether a game controller has rumble support on triggers. + * + * \param gamecontroller The controller to query + * \returns SDL_TRUE, or SDL_FALSE if this controller does not have trigger + * rumble support + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerRumbleTriggers + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumbleTriggers(SDL_GameController *gamecontroller); + +/** + * Update a game controller's LED color. + * + * \param gamecontroller The controller to update + * \param red The intensity of the red LED + * \param green The intensity of the green LED + * \param blue The intensity of the blue LED + * \returns 0, or -1 if this controller does not have a modifiable LED + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerSetLED(SDL_GameController *gamecontroller, Uint8 red, Uint8 green, Uint8 blue); + +/** + * Send a controller specific effect packet + * + * \param gamecontroller The controller to affect + * \param data The data to send to the controller + * \param size The size of the data to send to the controller + * \returns 0, or -1 if this controller or driver doesn't support effect + * packets + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerSendEffect(SDL_GameController *gamecontroller, const void *data, int size); + +/** + * Close a game controller previously opened with SDL_GameControllerOpen(). + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC void SDLCALL SDL_GameControllerClose(SDL_GameController *gamecontroller); + +/** + * Return the sfSymbolsName for a given button on a game controller on Apple + * platforms. + * + * \param gamecontroller the controller to query + * \param button a button on the game controller + * \returns the sfSymbolsName or NULL if the name can't be found + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerGetAppleSFSymbolsNameForAxis + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button); + +/** + * Return the sfSymbolsName for a given axis on a game controller on Apple + * platforms. + * + * \param gamecontroller the controller to query + * \param axis an axis on the game controller + * \returns the sfSymbolsName or NULL if the name can't be found + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerGetAppleSFSymbolsNameForButton + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_gamecontroller_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_gesture.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_gesture.h new file mode 100644 index 00000000000..6af76adf8b8 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_gesture.h @@ -0,0 +1,117 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_gesture.h + * + * Include file for SDL gesture event handling. + */ + +#ifndef SDL_gesture_h_ +#define SDL_gesture_h_ + +#include +#include +#include + +#include + + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef Sint64 SDL_GestureID; + +/* Function prototypes */ + +/** + * Begin recording a gesture on a specified touch device or all touch devices. + * + * If the parameter `touchId` is -1 (i.e., all devices), this function will + * always return 1, regardless of whether there actually are any devices. + * + * \param touchId the touch device id, or -1 for all touch devices + * \returns 1 on success or 0 if the specified device could not be found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTouchDevice + */ +extern DECLSPEC int SDLCALL SDL_RecordGesture(SDL_TouchID touchId); + + +/** + * Save all currently loaded Dollar Gesture templates. + * + * \param dst a SDL_RWops to save to + * \returns the number of saved templates on success or 0 on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadDollarTemplates + * \sa SDL_SaveDollarTemplate + */ +extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(SDL_RWops *dst); + +/** + * Save a currently loaded Dollar Gesture template. + * + * \param gestureId a gesture id + * \param dst a SDL_RWops to save to + * \returns 1 on success or 0 on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadDollarTemplates + * \sa SDL_SaveAllDollarTemplates + */ +extern DECLSPEC int SDLCALL SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *dst); + + +/** + * Load Dollar Gesture templates from a file. + * + * \param touchId a touch id + * \param src a SDL_RWops to load from + * \returns the number of loaded templates on success or a negative error code + * (or 0) on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SaveAllDollarTemplates + * \sa SDL_SaveDollarTemplate + */ +extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_gesture_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_haptic.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_haptic.h new file mode 100644 index 00000000000..f9dee0b8131 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_haptic.h @@ -0,0 +1,1341 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_haptic.h + * + * \brief The SDL haptic subsystem allows you to control haptic (force feedback) + * devices. + * + * The basic usage is as follows: + * - Initialize the subsystem (::SDL_INIT_HAPTIC). + * - Open a haptic device. + * - SDL_HapticOpen() to open from index. + * - SDL_HapticOpenFromJoystick() to open from an existing joystick. + * - Create an effect (::SDL_HapticEffect). + * - Upload the effect with SDL_HapticNewEffect(). + * - Run the effect with SDL_HapticRunEffect(). + * - (optional) Free the effect with SDL_HapticDestroyEffect(). + * - Close the haptic device with SDL_HapticClose(). + * + * \par Simple rumble example: + * \code + * SDL_Haptic *haptic; + * + * // Open the device + * haptic = SDL_HapticOpen( 0 ); + * if (haptic == NULL) + * return -1; + * + * // Initialize simple rumble + * if (SDL_HapticRumbleInit( haptic ) != 0) + * return -1; + * + * // Play effect at 50% strength for 2 seconds + * if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0) + * return -1; + * SDL_Delay( 2000 ); + * + * // Clean up + * SDL_HapticClose( haptic ); + * \endcode + * + * \par Complete example: + * \code + * int test_haptic( SDL_Joystick * joystick ) { + * SDL_Haptic *haptic; + * SDL_HapticEffect effect; + * int effect_id; + * + * // Open the device + * haptic = SDL_HapticOpenFromJoystick( joystick ); + * if (haptic == NULL) return -1; // Most likely joystick isn't haptic + * + * // See if it can do sine waves + * if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) { + * SDL_HapticClose(haptic); // No sine effect + * return -1; + * } + * + * // Create the effect + * SDL_memset( &effect, 0, sizeof(SDL_HapticEffect) ); // 0 is safe default + * effect.type = SDL_HAPTIC_SINE; + * effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates + * effect.periodic.direction.dir[0] = 18000; // Force comes from south + * effect.periodic.period = 1000; // 1000 ms + * effect.periodic.magnitude = 20000; // 20000/32767 strength + * effect.periodic.length = 5000; // 5 seconds long + * effect.periodic.attack_length = 1000; // Takes 1 second to get max strength + * effect.periodic.fade_length = 1000; // Takes 1 second to fade away + * + * // Upload the effect + * effect_id = SDL_HapticNewEffect( haptic, &effect ); + * + * // Test the effect + * SDL_HapticRunEffect( haptic, effect_id, 1 ); + * SDL_Delay( 5000); // Wait for the effect to finish + * + * // We destroy the effect, although closing the device also does this + * SDL_HapticDestroyEffect( haptic, effect_id ); + * + * // Close the device + * SDL_HapticClose(haptic); + * + * return 0; // Success + * } + * \endcode + */ + +#ifndef SDL_haptic_h_ +#define SDL_haptic_h_ + +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* FIXME: For SDL 2.1, adjust all the magnitude variables to be Uint16 (0xFFFF). + * + * At the moment the magnitude variables are mixed between signed/unsigned, and + * it is also not made clear that ALL of those variables expect a max of 0x7FFF. + * + * Some platforms may have higher precision than that (Linux FF, Windows XInput) + * so we should fix the inconsistency in favor of higher possible precision, + * adjusting for platforms that use different scales. + * -flibit + */ + +/** + * \typedef SDL_Haptic + * + * \brief The haptic structure used to identify an SDL haptic. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticOpenFromJoystick + * \sa SDL_HapticClose + */ +struct _SDL_Haptic; +typedef struct _SDL_Haptic SDL_Haptic; + + +/** + * \name Haptic features + * + * Different haptic features a device can have. + */ +/* @{ */ + +/** + * \name Haptic effects + */ +/* @{ */ + +/** + * \brief Constant effect supported. + * + * Constant haptic effect. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_CONSTANT (1u<<0) + +/** + * \brief Sine wave effect supported. + * + * Periodic haptic effect that simulates sine waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SINE (1u<<1) + +/** + * \brief Left/Right effect supported. + * + * Haptic effect for direct control over high/low frequency motors. + * + * \sa SDL_HapticLeftRight + * \warning this value was SDL_HAPTIC_SQUARE right before 2.0.0 shipped. Sorry, + * we ran out of bits, and this is important for XInput devices. + */ +#define SDL_HAPTIC_LEFTRIGHT (1u<<2) + +/* !!! FIXME: put this back when we have more bits in 2.1 */ +/* #define SDL_HAPTIC_SQUARE (1<<2) */ + +/** + * \brief Triangle wave effect supported. + * + * Periodic haptic effect that simulates triangular waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_TRIANGLE (1u<<3) + +/** + * \brief Sawtoothup wave effect supported. + * + * Periodic haptic effect that simulates saw tooth up waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SAWTOOTHUP (1u<<4) + +/** + * \brief Sawtoothdown wave effect supported. + * + * Periodic haptic effect that simulates saw tooth down waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SAWTOOTHDOWN (1u<<5) + +/** + * \brief Ramp effect supported. + * + * Ramp haptic effect. + * + * \sa SDL_HapticRamp + */ +#define SDL_HAPTIC_RAMP (1u<<6) + +/** + * \brief Spring effect supported - uses axes position. + * + * Condition haptic effect that simulates a spring. Effect is based on the + * axes position. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_SPRING (1u<<7) + +/** + * \brief Damper effect supported - uses axes velocity. + * + * Condition haptic effect that simulates dampening. Effect is based on the + * axes velocity. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_DAMPER (1u<<8) + +/** + * \brief Inertia effect supported - uses axes acceleration. + * + * Condition haptic effect that simulates inertia. Effect is based on the axes + * acceleration. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_INERTIA (1u<<9) + +/** + * \brief Friction effect supported - uses axes movement. + * + * Condition haptic effect that simulates friction. Effect is based on the + * axes movement. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_FRICTION (1u<<10) + +/** + * \brief Custom effect is supported. + * + * User defined custom haptic effect. + */ +#define SDL_HAPTIC_CUSTOM (1u<<11) + +/* @} *//* Haptic effects */ + +/* These last few are features the device has, not effects */ + +/** + * \brief Device can set global gain. + * + * Device supports setting the global gain. + * + * \sa SDL_HapticSetGain + */ +#define SDL_HAPTIC_GAIN (1u<<12) + +/** + * \brief Device can set autocenter. + * + * Device supports setting autocenter. + * + * \sa SDL_HapticSetAutocenter + */ +#define SDL_HAPTIC_AUTOCENTER (1u<<13) + +/** + * \brief Device can be queried for effect status. + * + * Device supports querying effect status. + * + * \sa SDL_HapticGetEffectStatus + */ +#define SDL_HAPTIC_STATUS (1u<<14) + +/** + * \brief Device can be paused. + * + * Devices supports being paused. + * + * \sa SDL_HapticPause + * \sa SDL_HapticUnpause + */ +#define SDL_HAPTIC_PAUSE (1u<<15) + + +/** + * \name Direction encodings + */ +/* @{ */ + +/** + * \brief Uses polar coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_POLAR 0 + +/** + * \brief Uses cartesian coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_CARTESIAN 1 + +/** + * \brief Uses spherical coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_SPHERICAL 2 + +/** + * \brief Use this value to play an effect on the steering wheel axis. This + * provides better compatibility across platforms and devices as SDL will guess + * the correct axis. + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_STEERING_AXIS 3 + +/* @} *//* Direction encodings */ + +/* @} *//* Haptic features */ + +/* + * Misc defines. + */ + +/** + * \brief Used to play a device an infinite number of times. + * + * \sa SDL_HapticRunEffect + */ +#define SDL_HAPTIC_INFINITY 4294967295U + + +/** + * \brief Structure that represents a haptic direction. + * + * This is the direction where the force comes from, + * instead of the direction in which the force is exerted. + * + * Directions can be specified by: + * - ::SDL_HAPTIC_POLAR : Specified by polar coordinates. + * - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. + * - ::SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates. + * + * Cardinal directions of the haptic device are relative to the positioning + * of the device. North is considered to be away from the user. + * + * The following diagram represents the cardinal directions: + * \verbatim + .--. + |__| .-------. + |=.| |.-----.| + |--| || || + | | |'-----'| + |__|~')_____(' + [ COMPUTER ] + + + North (0,-1) + ^ + | + | + (-1,0) West <----[ HAPTIC ]----> East (1,0) + | + | + v + South (0,1) + + + [ USER ] + \|||/ + (o o) + ---ooO-(_)-Ooo--- + \endverbatim + * + * If type is ::SDL_HAPTIC_POLAR, direction is encoded by hundredths of a + * degree starting north and turning clockwise. ::SDL_HAPTIC_POLAR only uses + * the first \c dir parameter. The cardinal directions would be: + * - North: 0 (0 degrees) + * - East: 9000 (90 degrees) + * - South: 18000 (180 degrees) + * - West: 27000 (270 degrees) + * + * If type is ::SDL_HAPTIC_CARTESIAN, direction is encoded by three positions + * (X axis, Y axis and Z axis (with 3 axes)). ::SDL_HAPTIC_CARTESIAN uses + * the first three \c dir parameters. The cardinal directions would be: + * - North: 0,-1, 0 + * - East: 1, 0, 0 + * - South: 0, 1, 0 + * - West: -1, 0, 0 + * + * The Z axis represents the height of the effect if supported, otherwise + * it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you + * can use any multiple you want, only the direction matters. + * + * If type is ::SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. + * The first two \c dir parameters are used. The \c dir parameters are as + * follows (all values are in hundredths of degrees): + * - Degrees from (1, 0) rotated towards (0, 1). + * - Degrees towards (0, 0, 1) (device needs at least 3 axes). + * + * + * Example of force coming from the south with all encodings (force coming + * from the south means the user will have to pull the stick to counteract): + * \code + * SDL_HapticDirection direction; + * + * // Cartesian directions + * direction.type = SDL_HAPTIC_CARTESIAN; // Using cartesian direction encoding. + * direction.dir[0] = 0; // X position + * direction.dir[1] = 1; // Y position + * // Assuming the device has 2 axes, we don't need to specify third parameter. + * + * // Polar directions + * direction.type = SDL_HAPTIC_POLAR; // We'll be using polar direction encoding. + * direction.dir[0] = 18000; // Polar only uses first parameter + * + * // Spherical coordinates + * direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding + * direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters. + * \endcode + * + * \sa SDL_HAPTIC_POLAR + * \sa SDL_HAPTIC_CARTESIAN + * \sa SDL_HAPTIC_SPHERICAL + * \sa SDL_HAPTIC_STEERING_AXIS + * \sa SDL_HapticEffect + * \sa SDL_HapticNumAxes + */ +typedef struct SDL_HapticDirection +{ + Uint8 type; /**< The type of encoding. */ + Sint32 dir[3]; /**< The encoded direction. */ +} SDL_HapticDirection; + + +/** + * \brief A structure containing a template for a Constant effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_CONSTANT effect. + * + * A constant effect applies a constant force in the specified direction + * to the joystick. + * + * \sa SDL_HAPTIC_CONSTANT + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticConstant +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_CONSTANT */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Constant */ + Sint16 level; /**< Strength of the constant effect. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticConstant; + +/** + * \brief A structure containing a template for a Periodic effect. + * + * The struct handles the following effects: + * - ::SDL_HAPTIC_SINE + * - ::SDL_HAPTIC_LEFTRIGHT + * - ::SDL_HAPTIC_TRIANGLE + * - ::SDL_HAPTIC_SAWTOOTHUP + * - ::SDL_HAPTIC_SAWTOOTHDOWN + * + * A periodic effect consists in a wave-shaped effect that repeats itself + * over time. The type determines the shape of the wave and the parameters + * determine the dimensions of the wave. + * + * Phase is given by hundredth of a degree meaning that giving the phase a value + * of 9000 will displace it 25% of its period. Here are sample values: + * - 0: No phase displacement. + * - 9000: Displaced 25% of its period. + * - 18000: Displaced 50% of its period. + * - 27000: Displaced 75% of its period. + * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred. + * + * Examples: + * \verbatim + SDL_HAPTIC_SINE + __ __ __ __ + / \ / \ / \ / + / \__/ \__/ \__/ + + SDL_HAPTIC_SQUARE + __ __ __ __ __ + | | | | | | | | | | + | |__| |__| |__| |__| | + + SDL_HAPTIC_TRIANGLE + /\ /\ /\ /\ /\ + / \ / \ / \ / \ / + / \/ \/ \/ \/ + + SDL_HAPTIC_SAWTOOTHUP + /| /| /| /| /| /| /| + / | / | / | / | / | / | / | + / |/ |/ |/ |/ |/ |/ | + + SDL_HAPTIC_SAWTOOTHDOWN + \ |\ |\ |\ |\ |\ |\ | + \ | \ | \ | \ | \ | \ | \ | + \| \| \| \| \| \| \| + \endverbatim + * + * \sa SDL_HAPTIC_SINE + * \sa SDL_HAPTIC_LEFTRIGHT + * \sa SDL_HAPTIC_TRIANGLE + * \sa SDL_HAPTIC_SAWTOOTHUP + * \sa SDL_HAPTIC_SAWTOOTHDOWN + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticPeriodic +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_SINE, ::SDL_HAPTIC_LEFTRIGHT, + ::SDL_HAPTIC_TRIANGLE, ::SDL_HAPTIC_SAWTOOTHUP or + ::SDL_HAPTIC_SAWTOOTHDOWN */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Periodic */ + Uint16 period; /**< Period of the wave. */ + Sint16 magnitude; /**< Peak value; if negative, equivalent to 180 degrees extra phase shift. */ + Sint16 offset; /**< Mean value of the wave. */ + Uint16 phase; /**< Positive phase shift given by hundredth of a degree. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticPeriodic; + +/** + * \brief A structure containing a template for a Condition effect. + * + * The struct handles the following effects: + * - ::SDL_HAPTIC_SPRING: Effect based on axes position. + * - ::SDL_HAPTIC_DAMPER: Effect based on axes velocity. + * - ::SDL_HAPTIC_INERTIA: Effect based on axes acceleration. + * - ::SDL_HAPTIC_FRICTION: Effect based on axes movement. + * + * Direction is handled by condition internals instead of a direction member. + * The condition effect specific members have three parameters. The first + * refers to the X axis, the second refers to the Y axis and the third + * refers to the Z axis. The right terms refer to the positive side of the + * axis and the left terms refer to the negative side of the axis. Please + * refer to the ::SDL_HapticDirection diagram for which side is positive and + * which is negative. + * + * \sa SDL_HapticDirection + * \sa SDL_HAPTIC_SPRING + * \sa SDL_HAPTIC_DAMPER + * \sa SDL_HAPTIC_INERTIA + * \sa SDL_HAPTIC_FRICTION + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticCondition +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_SPRING, ::SDL_HAPTIC_DAMPER, + ::SDL_HAPTIC_INERTIA or ::SDL_HAPTIC_FRICTION */ + SDL_HapticDirection direction; /**< Direction of the effect - Not used ATM. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Condition */ + Uint16 right_sat[3]; /**< Level when joystick is to the positive side; max 0xFFFF. */ + Uint16 left_sat[3]; /**< Level when joystick is to the negative side; max 0xFFFF. */ + Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */ + Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */ + Uint16 deadband[3]; /**< Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered. */ + Sint16 center[3]; /**< Position of the dead zone. */ +} SDL_HapticCondition; + +/** + * \brief A structure containing a template for a Ramp effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_RAMP effect. + * + * The ramp effect starts at start strength and ends at end strength. + * It augments in linear fashion. If you use attack and fade with a ramp + * the effects get added to the ramp effect making the effect become + * quadratic instead of linear. + * + * \sa SDL_HAPTIC_RAMP + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticRamp +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_RAMP */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Ramp */ + Sint16 start; /**< Beginning strength level. */ + Sint16 end; /**< Ending strength level. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticRamp; + +/** + * \brief A structure containing a template for a Left/Right effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_LEFTRIGHT effect. + * + * The Left/Right effect is used to explicitly control the large and small + * motors, commonly found in modern game controllers. The small (right) motor + * is high frequency, and the large (left) motor is low frequency. + * + * \sa SDL_HAPTIC_LEFTRIGHT + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticLeftRight +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_LEFTRIGHT */ + + /* Replay */ + Uint32 length; /**< Duration of the effect in milliseconds. */ + + /* Rumble */ + Uint16 large_magnitude; /**< Control of the large controller motor. */ + Uint16 small_magnitude; /**< Control of the small controller motor. */ +} SDL_HapticLeftRight; + +/** + * \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_CUSTOM effect. + * + * A custom force feedback effect is much like a periodic effect, where the + * application can define its exact shape. You will have to allocate the + * data yourself. Data should consist of channels * samples Uint16 samples. + * + * If channels is one, the effect is rotated using the defined direction. + * Otherwise it uses the samples in data for the different axes. + * + * \sa SDL_HAPTIC_CUSTOM + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticCustom +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_CUSTOM */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Custom */ + Uint8 channels; /**< Axes to use, minimum of one. */ + Uint16 period; /**< Sample periods. */ + Uint16 samples; /**< Amount of samples. */ + Uint16 *data; /**< Should contain channels*samples items. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticCustom; + +/** + * \brief The generic template for any haptic effect. + * + * All values max at 32767 (0x7FFF). Signed values also can be negative. + * Time values unless specified otherwise are in milliseconds. + * + * You can also pass ::SDL_HAPTIC_INFINITY to length instead of a 0-32767 + * value. Neither delay, interval, attack_length nor fade_length support + * ::SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends. + * + * Additionally, the ::SDL_HAPTIC_RAMP effect does not support a duration of + * ::SDL_HAPTIC_INFINITY. + * + * Button triggers may not be supported on all devices, it is advised to not + * use them if possible. Buttons start at index 1 instead of index 0 like + * the joystick. + * + * If both attack_length and fade_level are 0, the envelope is not used, + * otherwise both values are used. + * + * Common parts: + * \code + * // Replay - All effects have this + * Uint32 length; // Duration of effect (ms). + * Uint16 delay; // Delay before starting effect. + * + * // Trigger - All effects have this + * Uint16 button; // Button that triggers effect. + * Uint16 interval; // How soon before effect can be triggered again. + * + * // Envelope - All effects except condition effects have this + * Uint16 attack_length; // Duration of the attack (ms). + * Uint16 attack_level; // Level at the start of the attack. + * Uint16 fade_length; // Duration of the fade out (ms). + * Uint16 fade_level; // Level at the end of the fade. + * \endcode + * + * + * Here we have an example of a constant effect evolution in time: + * \verbatim + Strength + ^ + | + | effect level --> _________________ + | / \ + | / \ + | / \ + | / \ + | attack_level --> | \ + | | | <--- fade_level + | + +--------------------------------------------------> Time + [--] [---] + attack_length fade_length + + [------------------][-----------------------] + delay length + \endverbatim + * + * Note either the attack_level or the fade_level may be above the actual + * effect level. + * + * \sa SDL_HapticConstant + * \sa SDL_HapticPeriodic + * \sa SDL_HapticCondition + * \sa SDL_HapticRamp + * \sa SDL_HapticLeftRight + * \sa SDL_HapticCustom + */ +typedef union SDL_HapticEffect +{ + /* Common for all force feedback effects */ + Uint16 type; /**< Effect type. */ + SDL_HapticConstant constant; /**< Constant effect. */ + SDL_HapticPeriodic periodic; /**< Periodic effect. */ + SDL_HapticCondition condition; /**< Condition effect. */ + SDL_HapticRamp ramp; /**< Ramp effect. */ + SDL_HapticLeftRight leftright; /**< Left/Right effect. */ + SDL_HapticCustom custom; /**< Custom effect. */ +} SDL_HapticEffect; + + +/* Function prototypes */ + +/** + * Count the number of haptic devices attached to the system. + * + * \returns the number of haptic devices detected on the system or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticName + */ +extern DECLSPEC int SDLCALL SDL_NumHaptics(void); + +/** + * Get the implementation dependent name of a haptic device. + * + * This can be called before any joysticks are opened. If no name can be + * found, this function returns NULL. + * + * \param device_index index of the device to query. + * \returns the name of the device or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_NumHaptics + */ +extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index); + +/** + * Open a haptic device for use. + * + * The index passed as an argument refers to the N'th haptic device on this + * system. + * + * When opening a haptic device, its gain will be set to maximum and + * autocenter will be disabled. To modify these values use SDL_HapticSetGain() + * and SDL_HapticSetAutocenter(). + * + * \param device_index index of the device to open + * \returns the device identifier or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticClose + * \sa SDL_HapticIndex + * \sa SDL_HapticOpenFromJoystick + * \sa SDL_HapticOpenFromMouse + * \sa SDL_HapticPause + * \sa SDL_HapticSetAutocenter + * \sa SDL_HapticSetGain + * \sa SDL_HapticStopAll + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpen(int device_index); + +/** + * Check if the haptic device at the designated index has been opened. + * + * \param device_index the index of the device to query + * \returns 1 if it has been opened, 0 if it hasn't or on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticIndex + * \sa SDL_HapticOpen + */ +extern DECLSPEC int SDLCALL SDL_HapticOpened(int device_index); + +/** + * Get the index of a haptic device. + * + * \param haptic the SDL_Haptic device to query + * \returns the index of the specified haptic device or a negative error code + * on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticOpened + */ +extern DECLSPEC int SDLCALL SDL_HapticIndex(SDL_Haptic * haptic); + +/** + * Query whether or not the current mouse has haptic capabilities. + * + * \returns SDL_TRUE if the mouse is haptic or SDL_FALSE if it isn't. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpenFromMouse + */ +extern DECLSPEC int SDLCALL SDL_MouseIsHaptic(void); + +/** + * Try to open a haptic device from the current mouse. + * + * \returns the haptic device identifier or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + * \sa SDL_MouseIsHaptic + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromMouse(void); + +/** + * Query if a joystick has haptic features. + * + * \param joystick the SDL_Joystick to test for haptic capabilities + * \returns SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't, or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpenFromJoystick + */ +extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); + +/** + * Open a haptic device for use from a joystick device. + * + * You must still close the haptic device separately. It will not be closed + * with the joystick. + * + * When opened from a joystick you should first close the haptic device before + * closing the joystick device. If not, on some implementations the haptic + * device will also get unallocated and you'll be unable to use force feedback + * on that device. + * + * \param joystick the SDL_Joystick to create a haptic device from + * \returns a valid haptic device identifier on success or NULL on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticClose + * \sa SDL_HapticOpen + * \sa SDL_JoystickIsHaptic + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromJoystick(SDL_Joystick * + joystick); + +/** + * Close a haptic device previously opened with SDL_HapticOpen(). + * + * \param haptic the SDL_Haptic device to close + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + */ +extern DECLSPEC void SDLCALL SDL_HapticClose(SDL_Haptic * haptic); + +/** + * Get the number of effects a haptic device can store. + * + * On some platforms this isn't fully supported, and therefore is an + * approximation. Always check to see if your created effect was actually + * created and do not rely solely on SDL_HapticNumEffects(). + * + * \param haptic the SDL_Haptic device to query + * \returns the number of effects the haptic device can store or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNumEffectsPlaying + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic); + +/** + * Get the number of effects a haptic device can play at the same time. + * + * This is not supported on all platforms, but will always return a value. + * + * \param haptic the SDL_Haptic device to query maximum playing effects + * \returns the number of effects the haptic device can play at the same time + * or a negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNumEffects + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); + +/** + * Get the haptic device's supported features in bitwise manner. + * + * \param haptic the SDL_Haptic device to query + * \returns a list of supported haptic features in bitwise manner (OR'd), or 0 + * on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticEffectSupported + * \sa SDL_HapticNumEffects + */ +extern DECLSPEC unsigned int SDLCALL SDL_HapticQuery(SDL_Haptic * haptic); + + +/** + * Get the number of haptic axes the device has. + * + * The number of haptic axes might be useful if working with the + * SDL_HapticDirection effect. + * + * \param haptic the SDL_Haptic device to query + * \returns the number of axes on success or a negative error code on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_HapticNumAxes(SDL_Haptic * haptic); + +/** + * Check to see if an effect is supported by a haptic device. + * + * \param haptic the SDL_Haptic device to query + * \param effect the desired effect to query + * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNewEffect + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticEffectSupported(SDL_Haptic * haptic, + SDL_HapticEffect * + effect); + +/** + * Create a new haptic effect on a specified device. + * + * \param haptic an SDL_Haptic device to create the effect on + * \param effect an SDL_HapticEffect structure containing the properties of + * the effect to create + * \returns the ID of the effect on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticRunEffect + * \sa SDL_HapticUpdateEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticNewEffect(SDL_Haptic * haptic, + SDL_HapticEffect * effect); + +/** + * Update the properties of an effect. + * + * Can be used dynamically, although behavior when dynamically changing + * direction may be strange. Specifically the effect may re-upload itself and + * start playing from the start. You also cannot change the type either when + * running SDL_HapticUpdateEffect(). + * + * \param haptic the SDL_Haptic device that has the effect + * \param effect the identifier of the effect to update + * \param data an SDL_HapticEffect structure containing the new effect + * properties to use + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticNewEffect + * \sa SDL_HapticRunEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticUpdateEffect(SDL_Haptic * haptic, + int effect, + SDL_HapticEffect * data); + +/** + * Run the haptic effect on its associated haptic device. + * + * To repeat the effect over and over indefinitely, set `iterations` to + * `SDL_HAPTIC_INFINITY`. (Repeats the envelope - attack and fade.) To make + * one instance of the effect last indefinitely (so the effect does not fade), + * set the effect's `length` in its structure/union to `SDL_HAPTIC_INFINITY` + * instead. + * + * \param haptic the SDL_Haptic device to run the effect on + * \param effect the ID of the haptic effect to run + * \param iterations the number of iterations to run the effect; use + * `SDL_HAPTIC_INFINITY` to repeat forever + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticGetEffectStatus + * \sa SDL_HapticStopEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticRunEffect(SDL_Haptic * haptic, + int effect, + Uint32 iterations); + +/** + * Stop the haptic effect on its associated haptic device. + * + * * + * + * \param haptic the SDL_Haptic device to stop the effect on + * \param effect the ID of the haptic effect to stop + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticRunEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticStopEffect(SDL_Haptic * haptic, + int effect); + +/** + * Destroy a haptic effect on the device. + * + * This will stop the effect if it's running. Effects are automatically + * destroyed when the device is closed. + * + * \param haptic the SDL_Haptic device to destroy the effect on + * \param effect the ID of the haptic effect to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNewEffect + */ +extern DECLSPEC void SDLCALL SDL_HapticDestroyEffect(SDL_Haptic * haptic, + int effect); + +/** + * Get the status of the current effect on the specified haptic device. + * + * Device must support the SDL_HAPTIC_STATUS feature. + * + * \param haptic the SDL_Haptic device to query for the effect status on + * \param effect the ID of the haptic effect to query its status + * \returns 0 if it isn't playing, 1 if it is playing, or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRunEffect + * \sa SDL_HapticStopEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticGetEffectStatus(SDL_Haptic * haptic, + int effect); + +/** + * Set the global gain of the specified haptic device. + * + * Device must support the SDL_HAPTIC_GAIN feature. + * + * The user may specify the maximum gain by setting the environment variable + * `SDL_HAPTIC_GAIN_MAX` which should be between 0 and 100. All calls to + * SDL_HapticSetGain() will scale linearly using `SDL_HAPTIC_GAIN_MAX` as the + * maximum. + * + * \param haptic the SDL_Haptic device to set the gain on + * \param gain value to set the gain to, should be between 0 and 100 (0 - 100) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticSetGain(SDL_Haptic * haptic, int gain); + +/** + * Set the global autocenter of the device. + * + * Autocenter should be between 0 and 100. Setting it to 0 will disable + * autocentering. + * + * Device must support the SDL_HAPTIC_AUTOCENTER feature. + * + * \param haptic the SDL_Haptic device to set autocentering on + * \param autocenter value to set autocenter to (0-100) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticSetAutocenter(SDL_Haptic * haptic, + int autocenter); + +/** + * Pause a haptic device. + * + * Device must support the `SDL_HAPTIC_PAUSE` feature. Call + * SDL_HapticUnpause() to resume playback. + * + * Do not modify the effects nor add new ones while the device is paused. That + * can cause all sorts of weird errors. + * + * \param haptic the SDL_Haptic device to pause + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticUnpause + */ +extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic); + +/** + * Unpause a haptic device. + * + * Call to unpause after SDL_HapticPause(). + * + * \param haptic the SDL_Haptic device to unpause + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticPause + */ +extern DECLSPEC int SDLCALL SDL_HapticUnpause(SDL_Haptic * haptic); + +/** + * Stop all the currently playing effects on a haptic device. + * + * \param haptic the SDL_Haptic device to stop + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_HapticStopAll(SDL_Haptic * haptic); + +/** + * Check whether rumble is supported on a haptic device. + * + * \param haptic haptic device to check for rumble support + * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleStop + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleSupported(SDL_Haptic * haptic); + +/** + * Initialize a haptic device for simple rumble playback. + * + * \param haptic the haptic device to initialize for simple rumble playback + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleStop + * \sa SDL_HapticRumbleSupported + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleInit(SDL_Haptic * haptic); + +/** + * Run a simple rumble effect on a haptic device. + * + * \param haptic the haptic device to play the rumble effect on + * \param strength strength of the rumble to play as a 0-1 float value + * \param length length of the rumble to play in milliseconds + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumbleStop + * \sa SDL_HapticRumbleSupported + */ +extern DECLSPEC int SDLCALL SDL_HapticRumblePlay(SDL_Haptic * haptic, float strength, Uint32 length ); + +/** + * Stop the simple rumble on a haptic device. + * + * \param haptic the haptic device to stop the rumble effect on + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleSupported + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleStop(SDL_Haptic * haptic); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_haptic_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_hidapi.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_hidapi.h new file mode 100644 index 00000000000..dbb0cad3b34 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_hidapi.h @@ -0,0 +1,451 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_hidapi.h + * + * Header file for SDL HIDAPI functions. + * + * This is an adaptation of the original HIDAPI interface by Alan Ott, + * and includes source code licensed under the following BSD license: + * + Copyright (c) 2010, Alan Ott, Signal 11 Software + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Signal 11 Software nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + * + * If you would like a version of SDL without this code, you can build SDL + * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for example + * on iOS or tvOS to avoid a dependency on the CoreBluetooth framework. + */ + +#ifndef SDL_hidapi_h_ +#define SDL_hidapi_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief A handle representing an open HID device + */ +struct SDL_hid_device_; +typedef struct SDL_hid_device_ SDL_hid_device; /**< opaque hidapi structure */ + +/** hidapi info structure */ +/** + * \brief Information about a connected HID device + */ +typedef struct SDL_hid_device_info +{ + /** Platform-specific device path */ + char *path; + /** Device Vendor ID */ + unsigned short vendor_id; + /** Device Product ID */ + unsigned short product_id; + /** Serial Number */ + wchar_t *serial_number; + /** Device Release Number in binary-coded decimal, + also known as Device Version Number */ + unsigned short release_number; + /** Manufacturer String */ + wchar_t *manufacturer_string; + /** Product string */ + wchar_t *product_string; + /** Usage Page for this Device/Interface + (Windows/Mac only). */ + unsigned short usage_page; + /** Usage for this Device/Interface + (Windows/Mac only).*/ + unsigned short usage; + /** The USB interface which this logical device + represents. + + * Valid on both Linux implementations in all cases. + * Valid on the Windows implementation only if the device + contains more than one interface. */ + int interface_number; + + /** Additional information about the USB interface. + Valid on libusb and Android implementations. */ + int interface_class; + int interface_subclass; + int interface_protocol; + + /** Pointer to the next device */ + struct SDL_hid_device_info *next; +} SDL_hid_device_info; + + +/** + * Initialize the HIDAPI library. + * + * This function initializes the HIDAPI library. Calling it is not strictly + * necessary, as it will be called automatically by SDL_hid_enumerate() and + * any of the SDL_hid_open_*() functions if it is needed. This function should + * be called at the beginning of execution however, if there is a chance of + * HIDAPI handles being opened by different threads simultaneously. + * + * Each call to this function should have a matching call to SDL_hid_exit() + * + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_exit + */ +extern DECLSPEC int SDLCALL SDL_hid_init(void); + +/** + * Finalize the HIDAPI library. + * + * This function frees all of the static data associated with HIDAPI. It + * should be called at the end of execution to avoid memory leaks. + * + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_init + */ +extern DECLSPEC int SDLCALL SDL_hid_exit(void); + +/** + * Check to see if devices may have been added or removed. + * + * Enumerating the HID devices is an expensive operation, so you can call this + * to see if there have been any system device changes since the last call to + * this function. A change in the counter returned doesn't necessarily mean + * that anything has changed, but you can call SDL_hid_enumerate() to get an + * updated device list. + * + * Calling this function for the first time may cause a thread or other system + * resource to be allocated to track device change notifications. + * + * \returns a change counter that is incremented with each potential device + * change, or 0 if device change detection isn't available. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_enumerate + */ +extern DECLSPEC Uint32 SDLCALL SDL_hid_device_change_count(void); + +/** + * Enumerate the HID Devices. + * + * This function returns a linked list of all the HID devices attached to the + * system which match vendor_id and product_id. If `vendor_id` is set to 0 + * then any vendor matches. If `product_id` is set to 0 then any product + * matches. If `vendor_id` and `product_id` are both set to 0, then all HID + * devices will be returned. + * + * \param vendor_id The Vendor ID (VID) of the types of device to open. + * \param product_id The Product ID (PID) of the types of device to open. + * \returns a pointer to a linked list of type SDL_hid_device_info, containing + * information about the HID devices attached to the system, or NULL + * in the case of failure. Free this linked list by calling + * SDL_hid_free_enumeration(). + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_device_change_count + */ +extern DECLSPEC SDL_hid_device_info * SDLCALL SDL_hid_enumerate(unsigned short vendor_id, unsigned short product_id); + +/** + * Free an enumeration Linked List + * + * This function frees a linked list created by SDL_hid_enumerate(). + * + * \param devs Pointer to a list of struct_device returned from + * SDL_hid_enumerate(). + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void SDLCALL SDL_hid_free_enumeration(SDL_hid_device_info *devs); + +/** + * Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally + * a serial number. + * + * If `serial_number` is NULL, the first device with the specified VID and PID + * is opened. + * + * \param vendor_id The Vendor ID (VID) of the device to open. + * \param product_id The Product ID (PID) of the device to open. + * \param serial_number The Serial Number of the device to open (Optionally + * NULL). + * \returns a pointer to a SDL_hid_device object on success or NULL on + * failure. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number); + +/** + * Open a HID device by its path name. + * + * The path name be determined by calling SDL_hid_enumerate(), or a + * platform-specific path name can be used (eg: /dev/hidraw0 on Linux). + * + * \param path The path name of the device to open + * \returns a pointer to a SDL_hid_device object on success or NULL on + * failure. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive /* = false */); + +/** + * Write an Output report to a HID device. + * + * The first byte of `data` must contain the Report ID. For devices which only + * support a single report, this must be set to 0x0. The remaining bytes + * contain the report data. Since the Report ID is mandatory, calls to + * SDL_hid_write() will always contain one more byte than the report contains. + * For example, if a hid report is 16 bytes long, 17 bytes must be passed to + * SDL_hid_write(), the Report ID (or 0x0, for devices with a single report), + * followed by the report data (16 bytes). In this example, the length passed + * in would be 17. + * + * SDL_hid_write() will send the data on the first OUT endpoint, if one + * exists. If it does not, it will send the data through the Control Endpoint + * (Endpoint 0). + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data The data to send, including the report number as the first + * byte. + * \param length The length in bytes of the data to send. + * \returns the actual number of bytes written and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_write(SDL_hid_device *dev, const unsigned char *data, size_t length); + +/** + * Read an Input report from a HID device with timeout. + * + * Input reports are returned to the host through the INTERRUPT IN endpoint. + * The first byte will contain the Report number if the device uses numbered + * reports. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data A buffer to put the read data into. + * \param length The number of bytes to read. For devices with multiple + * reports, make sure to read an extra byte for the report + * number. + * \param milliseconds timeout in milliseconds or -1 for blocking wait. + * \returns the actual number of bytes read and -1 on error. If no packet was + * available to be read within the timeout period, this function + * returns 0. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_read_timeout(SDL_hid_device *dev, unsigned char *data, size_t length, int milliseconds); + +/** + * Read an Input report from a HID device. + * + * Input reports are returned to the host through the INTERRUPT IN endpoint. + * The first byte will contain the Report number if the device uses numbered + * reports. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data A buffer to put the read data into. + * \param length The number of bytes to read. For devices with multiple + * reports, make sure to read an extra byte for the report + * number. + * \returns the actual number of bytes read and -1 on error. If no packet was + * available to be read and the handle is in non-blocking mode, this + * function returns 0. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_read(SDL_hid_device *dev, unsigned char *data, size_t length); + +/** + * Set the device handle to be non-blocking. + * + * In non-blocking mode calls to SDL_hid_read() will return immediately with a + * value of 0 if there is no data to be read. In blocking mode, SDL_hid_read() + * will wait (block) until there is data to read before returning. + * + * Nonblocking can be turned on and off at any time. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param nonblock enable or not the nonblocking reads - 1 to enable + * nonblocking - 0 to disable nonblocking. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_set_nonblocking(SDL_hid_device *dev, int nonblock); + +/** + * Send a Feature report to the device. + * + * Feature reports are sent over the Control endpoint as a Set_Report + * transfer. The first byte of `data` must contain the Report ID. For devices + * which only support a single report, this must be set to 0x0. The remaining + * bytes contain the report data. Since the Report ID is mandatory, calls to + * SDL_hid_send_feature_report() will always contain one more byte than the + * report contains. For example, if a hid report is 16 bytes long, 17 bytes + * must be passed to SDL_hid_send_feature_report(): the Report ID (or 0x0, for + * devices which do not use numbered reports), followed by the report data (16 + * bytes). In this example, the length passed in would be 17. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data The data to send, including the report number as the first + * byte. + * \param length The length in bytes of the data to send, including the report + * number. + * \returns the actual number of bytes written and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_send_feature_report(SDL_hid_device *dev, const unsigned char *data, size_t length); + +/** + * Get a feature report from a HID device. + * + * Set the first byte of `data` to the Report ID of the report to be read. + * Make sure to allow space for this extra byte in `data`. Upon return, the + * first byte will still contain the Report ID, and the report data will start + * in data[1]. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data A buffer to put the read data into, including the Report ID. + * Set the first byte of `data` to the Report ID of the report to + * be read, or set it to zero if your device does not use numbered + * reports. + * \param length The number of bytes to read, including an extra byte for the + * report ID. The buffer can be longer than the actual report. + * \returns the number of bytes read plus one for the report ID (which is + * still in the first byte), or -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_feature_report(SDL_hid_device *dev, unsigned char *data, size_t length); + +/** + * Close a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void SDLCALL SDL_hid_close(SDL_hid_device *dev); + +/** + * Get The Manufacturer String from a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_manufacturer_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); + +/** + * Get The Product String from a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_product_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); + +/** + * Get The Serial Number String from a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_serial_number_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); + +/** + * Get a string from a HID device, based on its string index. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string_index The index of the string to get. + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_indexed_string(SDL_hid_device *dev, int string_index, wchar_t *string, size_t maxlen); + +/** + * Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers + * + * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void SDLCALL SDL_hid_ble_scan(SDL_bool active); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_hidapi_h_ */ + +/* vi: set sts=4 ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_hints.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_hints.h new file mode 100644 index 00000000000..3ac5802f754 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_hints.h @@ -0,0 +1,2182 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_hints.h + * + * Official documentation for SDL configuration variables + * + * This file contains functions to set and get configuration hints, + * as well as listing each of them alphabetically. + * + * The convention for naming hints is SDL_HINT_X, where "SDL_X" is + * the environment variable that can be used to override the default. + * + * In general these hints are just that - they may or may not be + * supported or applicable on any given platform, but they provide + * a way for an application or user to give the library a hint as + * to how they would like the library to work. + */ + +#ifndef SDL_hints_h_ +#define SDL_hints_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief A variable controlling whether the Android / iOS built-in + * accelerometer should be listed as a joystick device. + * + * This variable can be set to the following values: + * "0" - The accelerometer is not listed as a joystick + * "1" - The accelerometer is available as a 3 axis joystick (the default). + */ +#define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK" + +/** + * \brief Specify the behavior of Alt+Tab while the keyboard is grabbed. + * + * By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed + * and your window is full-screen. This prevents the user from getting stuck in + * your application if you've enabled keyboard grab. + * + * The variable can be set to the following values: + * "0" - SDL will not handle Alt+Tab. Your application is responsible + for handling Alt+Tab while the keyboard is grabbed. + * "1" - SDL will minimize your window when Alt+Tab is pressed (default) +*/ +#define SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED "SDL_ALLOW_ALT_TAB_WHILE_GRABBED" + +/** + * \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it. + * This is a debugging aid for developers and not expected to be used by end users. The default is "1" + * + * This variable can be set to the following values: + * "0" - don't allow topmost + * "1" - allow topmost + */ +#define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST" + +/** + * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc. + * + * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and assets. + * + * By default this hint is not set and the APK expansion files are not searched. + */ +#define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION" + +/** + * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc. + * + * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and assets. + * + * By default this hint is not set and the APK expansion files are not searched. + */ +#define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION" + +/** + * \brief A variable to control whether the event loop will block itself when the app is paused. + * + * The variable can be set to the following values: + * "0" - Non blocking. + * "1" - Blocking. (default) + * + * The value should be set before SDL is initialized. + */ +#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE" + +/** + * \brief A variable to control whether SDL will pause audio in background + * (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking") + * + * The variable can be set to the following values: + * "0" - Non paused. + * "1" - Paused. (default) + * + * The value should be set before SDL is initialized. + */ +#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO" + +/** + * \brief A variable to control whether we trap the Android back button to handle it manually. + * This is necessary for the right mouse button to work on some Android devices, or + * to be able to trap the back button for use in your code reliably. If set to true, + * the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair with a keycode of + * SDL_SCANCODE_AC_BACK. + * + * The variable can be set to the following values: + * "0" - Back button will be handled as usual for system. (default) + * "1" - Back button will be trapped, allowing you to handle the key press + * manually. (This will also let right mouse click work on systems + * where the right mouse button functions as back.) + * + * The value of this hint is used at runtime, so it can be changed at any time. + */ +#define SDL_HINT_ANDROID_TRAP_BACK_BUTTON "SDL_ANDROID_TRAP_BACK_BUTTON" + +/** + * \brief Specify an application name. + * + * This hint lets you specify the application name sent to the OS when + * required. For example, this will often appear in volume control applets for + * audio streams, and in lists of applications which are inhibiting the + * screensaver. You should use a string that describes your program ("My Game + * 2: The Revenge") + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: probably the application's name or "SDL Application" if SDL + * doesn't have any better information. + * + * Note that, for audio streams, this can be overridden with + * SDL_HINT_AUDIO_DEVICE_APP_NAME. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_APP_NAME "SDL_APP_NAME" + +/** + * \brief A variable controlling whether controllers used with the Apple TV + * generate UI events. + * + * When UI events are generated by controller input, the app will be + * backgrounded when the Apple TV remote's menu button is pressed, and when the + * pause or B buttons on gamepads are pressed. + * + * More information about properly making use of controllers for the Apple TV + * can be found here: + * https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/ + * + * This variable can be set to the following values: + * "0" - Controller input does not generate UI events (the default). + * "1" - Controller input generates UI events. + */ +#define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS" + +/** + * \brief A variable controlling whether the Apple TV remote's joystick axes + * will automatically match the rotation of the remote. + * + * This variable can be set to the following values: + * "0" - Remote orientation does not affect joystick axes (the default). + * "1" - Joystick axes are based on the orientation of the remote. + */ +#define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION" + +/** + * \brief A variable controlling the audio category on iOS and Mac OS X + * + * This variable can be set to the following values: + * + * "ambient" - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default) + * "playback" - Use the AVAudioSessionCategoryPlayback category + * + * For more information, see Apple's documentation: + * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html + */ +#define SDL_HINT_AUDIO_CATEGORY "SDL_AUDIO_CATEGORY" + +/** + * \brief Specify an application name for an audio device. + * + * Some audio backends (such as PulseAudio) allow you to describe your audio + * stream. Among other things, this description might show up in a system + * control panel that lets the user adjust the volume on specific audio + * streams instead of using one giant master volume slider. + * + * This hints lets you transmit that information to the OS. The contents of + * this hint are used while opening an audio device. You should use a string + * that describes your program ("My Game 2: The Revenge") + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: this will be the name set with SDL_HINT_APP_NAME, if that hint is + * set. Otherwise, it'll probably the application's name or "SDL Application" + * if SDL doesn't have any better information. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME" + +/** + * \brief Specify an application name for an audio device. + * + * Some audio backends (such as PulseAudio) allow you to describe your audio + * stream. Among other things, this description might show up in a system + * control panel that lets the user adjust the volume on specific audio + * streams instead of using one giant master volume slider. + * + * This hints lets you transmit that information to the OS. The contents of + * this hint are used while opening an audio device. You should use a string + * that describes your what your program is playing ("audio stream" is + * probably sufficient in many cases, but this could be useful for something + * like "team chat" if you have a headset playing VoIP audio separately). + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: "audio stream" or something similar. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_AUDIO_DEVICE_STREAM_NAME "SDL_AUDIO_DEVICE_STREAM_NAME" + +/** + * \brief Specify an application role for an audio device. + * + * Some audio backends (such as Pipewire) allow you to describe the role of + * your audio stream. Among other things, this description might show up in + * a system control panel or software for displaying and manipulating media + * playback/capture graphs. + * + * This hints lets you transmit that information to the OS. The contents of + * this hint are used while opening an audio device. You should use a string + * that describes your what your program is playing (Game, Music, Movie, + * etc...). + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: "Game" or something similar. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_AUDIO_DEVICE_STREAM_ROLE "SDL_AUDIO_DEVICE_STREAM_ROLE" + +/** + * \brief A variable controlling speed/quality tradeoff of audio resampling. + * + * If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ ) + * to handle audio resampling. There are different resampling modes available + * that produce different levels of quality, using more CPU. + * + * If this hint isn't specified to a valid setting, or libsamplerate isn't + * available, SDL will use the default, internal resampling algorithm. + * + * Note that this is currently only applicable to resampling audio that is + * being written to a device for playback or audio being read from a device + * for capture. SDL_AudioCVT always uses the default resampler (although this + * might change for SDL 2.1). + * + * This hint is currently only checked at audio subsystem initialization. + * + * This variable can be set to the following values: + * + * "0" or "default" - Use SDL's internal resampling (Default when not set - low quality, fast) + * "1" or "fast" - Use fast, slightly higher quality resampling, if available + * "2" or "medium" - Use medium quality resampling, if available + * "3" or "best" - Use high quality resampling, if available + */ +#define SDL_HINT_AUDIO_RESAMPLING_MODE "SDL_AUDIO_RESAMPLING_MODE" + +/** + * \brief A variable controlling whether SDL updates joystick state when getting input events + * + * This variable can be set to the following values: + * + * "0" - You'll call SDL_JoystickUpdate() manually + * "1" - SDL will automatically call SDL_JoystickUpdate() (default) + * + * This hint can be toggled on and off at runtime. + */ +#define SDL_HINT_AUTO_UPDATE_JOYSTICKS "SDL_AUTO_UPDATE_JOYSTICKS" + +/** + * \brief A variable controlling whether SDL updates sensor state when getting input events + * + * This variable can be set to the following values: + * + * "0" - You'll call SDL_SensorUpdate() manually + * "1" - SDL will automatically call SDL_SensorUpdate() (default) + * + * This hint can be toggled on and off at runtime. + */ +#define SDL_HINT_AUTO_UPDATE_SENSORS "SDL_AUTO_UPDATE_SENSORS" + +/** + * \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs. + * + * The bitmap header version 4 is required for proper alpha channel support and + * SDL will use it when required. Should this not be desired, this hint can + * force the use of the 40 byte header version which is supported everywhere. + * + * The variable can be set to the following values: + * "0" - Surfaces with a colorkey or an alpha channel are saved to a + * 32-bit BMP file with an alpha mask. SDL will use the bitmap + * header version 4 and set the alpha mask accordingly. + * "1" - Surfaces with a colorkey or an alpha channel are saved to a + * 32-bit BMP file without an alpha mask. The alpha channel data + * will be in the file, but applications are going to ignore it. + * + * The default value is "0". + */ +#define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT" + +/** + * \brief Override for SDL_GetDisplayUsableBounds() + * + * If set, this hint will override the expected results for + * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want + * to do this, but this allows an embedded system to request that some of the + * screen be reserved for other uses when paired with a well-behaved + * application. + * + * The contents of this hint must be 4 comma-separated integers, the first + * is the bounds x, then y, width and height, in that order. + */ +#define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS" + +/** + * \brief Disable giving back control to the browser automatically + * when running with asyncify + * + * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations + * such as refreshing the screen or polling events. + * + * This hint only applies to the emscripten platform + * + * The variable can be set to the following values: + * "0" - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes) + * "1" - Enable emscripten_sleep calls (the default) + */ +#define SDL_HINT_EMSCRIPTEN_ASYNCIFY "SDL_EMSCRIPTEN_ASYNCIFY" + +/** + * \brief override the binding element for keyboard inputs for Emscripten builds + * + * This hint only applies to the emscripten platform + * + * The variable can be one of + * "#window" - The javascript window object (this is the default) + * "#document" - The javascript document object + * "#screen" - the javascript window.screen object + * "#canvas" - the WebGL canvas element + * any other string without a leading # sign applies to the element on the page with that ID. + */ +#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT" + +/** + * \brief A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs + * + * The variable can be set to the following values: + * "0" - Do not scan for Steam Controllers + * "1" - Scan for Steam Controllers (the default) + * + * The default value is "1". This hint must be set before initializing the joystick subsystem. + */ +#define SDL_HINT_ENABLE_STEAM_CONTROLLERS "SDL_ENABLE_STEAM_CONTROLLERS" + +/** + * \brief A variable controlling whether SDL logs all events pushed onto its internal queue. + * + * This variable can be set to the following values: + * + * "0" - Don't log any events (default) + * "1" - Log all events except mouse and finger motion, which are pretty spammy. + * "2" - Log all events. + * + * This is generally meant to be used to debug SDL itself, but can be useful + * for application developers that need better visibility into what is going + * on in the event queue. Logged events are sent through SDL_Log(), which + * means by default they appear on stdout on most platforms or maybe + * OutputDebugString() on Windows, and can be funneled by the app with + * SDL_LogSetOutputFunction(), etc. + * + * This hint can be toggled on and off at runtime, if you only need to log + * events for a small subset of program execution. + */ +#define SDL_HINT_EVENT_LOGGING "SDL_EVENT_LOGGING" + +/** + * \brief A variable controlling whether raising the window should be done more forcefully + * + * This variable can be set to the following values: + * "0" - No forcing (the default) + * "1" - Extra level of forcing + * + * At present, this is only an issue under MS Windows, which makes it nearly impossible to + * programmatically move a window to the foreground, for "security" reasons. See + * http://stackoverflow.com/a/34414846 for a discussion. + */ +#define SDL_HINT_FORCE_RAISEWINDOW "SDL_HINT_FORCE_RAISEWINDOW" + +/** + * \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface. + * + * SDL can try to accelerate the SDL screen surface by using streaming + * textures with a 3D rendering engine. This variable controls whether and + * how this is done. + * + * This variable can be set to the following values: + * "0" - Disable 3D acceleration + * "1" - Enable 3D acceleration, using the default renderer. + * "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.) + * + * By default SDL tries to make a best guess for each platform whether + * to use acceleration or not. + */ +#define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION" + +/** + * \brief A variable that lets you manually hint extra gamecontroller db entries. + * + * The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h + * + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() + */ +#define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG" + +/** + * \brief A variable that lets you provide a file with extra gamecontroller db entries. + * + * The file should contain lines of gamecontroller config data, see SDL_gamecontroller.h + * + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() + */ +#define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE" + +/** + * \brief A variable that overrides the automatic controller type detection + * + * The variable should be comma separated entries, in the form: VID/PID=type + * + * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd + * + * The type should be one of: + * Xbox360 + * XboxOne + * PS3 + * PS4 + * PS5 + * SwitchPro + * + * This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + */ +#define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE" + +/** + * \brief A variable containing a list of devices to skip when scanning for game controllers. + * + * The format of the string is a comma separated list of USB VID/PID pairs + * in hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named + * file will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES" + +/** + * \brief If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable. + * + * The format of the string is a comma separated list of USB VID/PID pairs + * in hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named + * file will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT" + +/** + * \brief If set, game controller face buttons report their values according to their labels instead of their positional layout. + * + * For example, on Nintendo Switch controllers, normally you'd get: + * + * (Y) + * (X) (B) + * (A) + * + * but if this hint is set, you'll get: + * + * (X) + * (Y) (A) + * (B) + * + * The variable can be set to the following values: + * "0" - Report the face buttons by position, as though they were on an Xbox controller. + * "1" - Report the face buttons by label instead of position + * + * The default value is "1". This hint may be set at any time. + */ +#define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS" + +/** + * \brief A variable controlling whether grabbing input grabs the keyboard + * + * This variable can be set to the following values: + * "0" - Grab will affect only the mouse + * "1" - Grab will affect mouse and keyboard + * + * By default SDL will not grab the keyboard so system shortcuts still work. + */ +#define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD" + +/** + * \brief A variable controlling whether the idle timer is disabled on iOS. + * + * When an iOS app does not receive touches for some time, the screen is + * dimmed automatically. For games where the accelerometer is the only input + * this is problematic. This functionality can be disabled by setting this + * hint. + * + * As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver() + * accomplish the same thing on iOS. They should be preferred over this hint. + * + * This variable can be set to the following values: + * "0" - Enable idle timer + * "1" - Disable idle timer + */ +#define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED" + +/** + * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events. + * + * The variable can be set to the following values: + * "0" - SDL_TEXTEDITING events are sent, and it is the application's + * responsibility to render the text from these events and + * differentiate it somehow from committed text. (default) + * "1" - If supported by the IME then SDL_TEXTEDITING events are not sent, + * and text that is being composed will be rendered in its own UI. + */ +#define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING" + +/** + * \brief A variable to control whether certain IMEs should show native UI components (such as the Candidate List) instead of suppressing them. + * + * The variable can be set to the following values: + * "0" - Native UI components are not display. (default) + * "1" - Native UI components are displayed. + */ +#define SDL_HINT_IME_SHOW_UI "SDL_IME_SHOW_UI" + +/** + * \brief A variable to control if extended IME text support is enabled. + * If enabled then SDL_TextEditingExtEvent will be issued if the text would be truncated otherwise. + * Additionally SDL_TextInputEvent will be dispatched multiple times so that it is not truncated. + * + * The variable can be set to the following values: + * "0" - Legacy behavior. Text can be truncated, no heap allocations. (default) + * "1" - Modern behavior. + */ +#define SDL_HINT_IME_SUPPORT_EXTENDED_TEXT "SDL_IME_SUPPORT_EXTENDED_TEXT" + +/** + * \brief A variable controlling whether the home indicator bar on iPhone X + * should be hidden. + * + * This variable can be set to the following values: + * "0" - The indicator bar is not hidden (default for windowed applications) + * "1" - The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications) + * "2" - The indicator bar is dim and the first swipe makes it visible and the second swipe performs the "home" action (default for fullscreen applications) + */ +#define SDL_HINT_IOS_HIDE_HOME_INDICATOR "SDL_IOS_HIDE_HOME_INDICATOR" + +/** + * \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background. + * + * The variable can be set to the following values: + * "0" - Disable joystick & gamecontroller input events when the + * application is in the background. + * "1" - Enable joystick & gamecontroller input events when the + * application is in the background. + * + * The default value is "0". This hint may be set at any time. + */ +#define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS" + +/** + * \brief A variable controlling whether the HIDAPI joystick drivers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI drivers are not used + * "1" - HIDAPI drivers are used (the default) + * + * This variable is the default for all drivers, but can be overridden by the hints for specific drivers below. + */ +#define SDL_HINT_JOYSTICK_HIDAPI "SDL_JOYSTICK_HIDAPI" + +/** + * \brief A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE" + +/** + * \brief A variable controlling whether "low_frequency_rumble" and "high_frequency_rumble" is used to implement + * the GameCube controller's 3 rumble modes, Stop(0), Rumble(1), and StopHard(2) + * this is useful for applications that need full compatibility for things like ADSR envelopes. + * Stop is implemented by setting "low_frequency_rumble" to "0" and "high_frequency_rumble" ">0" + * Rumble is both at any arbitrary value, + * StopHard is implemented by setting both "low_frequency_rumble" and "high_frequency_rumble" to "0" + * + * This variable can be set to the following values: + * "0" - Normal rumble behavior is behavior is used (default) + * "1" - Proper GameCube controller rumble behavior is used + * + */ +#define SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE "SDL_JOYSTICK_GAMECUBE_RUMBLE_BRAKE" + + /** + * \brief A variable controlling whether Switch Joy-Cons should be treated the same as Switch Pro Controllers when using the HIDAPI driver. + * + * This variable can be set to the following values: + * "0" - basic Joy-Con support with no analog input (the default) + * "1" - Joy-Cons treated as half full Pro Controllers with analog inputs and sensors + * + * This does not combine Joy-Cons into a single controller. That's up to the user. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS "SDL_JOYSTICK_HIDAPI_JOY_CONS" + + /** + * \brief A variable controlling whether the HIDAPI driver for Amazon Luna controllers connected via Bluetooth should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_LUNA "SDL_JOYSTICK_HIDAPI_LUNA" + +/** + * \brief A variable controlling whether the HIDAPI driver for PS4 controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4" + +/** + * \brief A variable controlling whether extended input reports should be used for PS4 controllers when using the HIDAPI driver. + * + * This variable can be set to the following values: + * "0" - extended reports are not enabled (the default) + * "1" - extended reports + * + * Extended input reports allow rumble on Bluetooth PS4 controllers, but + * break DirectInput handling for applications that don't use SDL. + * + * Once extended reports are enabled, they can not be disabled without + * power cycling the controller. + * + * For compatibility with applications written for versions of SDL prior + * to the introduction of PS5 controller support, this value will also + * control the state of extended reports on PS5 controllers when the + * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE" + +/** + * \brief A variable controlling whether the HIDAPI driver for PS5 controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS5 "SDL_JOYSTICK_HIDAPI_PS5" + +/** + * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a PS5 controller. + * + * This variable can be set to the following values: + * "0" - player LEDs are not enabled + * "1" - player LEDs are enabled (the default) + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED "SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED" + +/** + * \brief A variable controlling whether extended input reports should be used for PS5 controllers when using the HIDAPI driver. + * + * This variable can be set to the following values: + * "0" - extended reports are not enabled (the default) + * "1" - extended reports + * + * Extended input reports allow rumble on Bluetooth PS5 controllers, but + * break DirectInput handling for applications that don't use SDL. + * + * Once extended reports are enabled, they can not be disabled without + * power cycling the controller. + * + * For compatibility with applications written for versions of SDL prior + * to the introduction of PS5 controller support, this value defaults to + * the value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE "SDL_JOYSTICK_HIDAPI_PS5_RUMBLE" + +/** + * \brief A variable controlling whether the HIDAPI driver for Google Stadia controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_STADIA "SDL_JOYSTICK_HIDAPI_STADIA" + +/** + * \brief A variable controlling whether the HIDAPI driver for Steam Controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used for Steam Controllers, which requires Bluetooth access + * and may prompt the user for permission on iOS and Android. + * + * The default is "0" + */ +#define SDL_HINT_JOYSTICK_HIDAPI_STEAM "SDL_JOYSTICK_HIDAPI_STEAM" + +/** + * \brief A variable controlling whether the HIDAPI driver for Nintendo Switch controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH" + +/** + * \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch controller is opened + * + * This variable can be set to the following values: + * "0" - home button LED is turned off + * "1" - home button LED is turned on + * + * By default the Home button LED state is not changed. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED" + +/** + * \brief A variable controlling whether the HIDAPI driver for XBox controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is "0" on Windows, otherwise the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_XBOX "SDL_JOYSTICK_HIDAPI_XBOX" + + /** + * \brief A variable controlling whether the RAWINPUT joystick drivers should be used for better handling XInput-capable devices. + * + * This variable can be set to the following values: + * "0" - RAWINPUT drivers are not used + * "1" - RAWINPUT drivers are used (the default) + */ +#define SDL_HINT_JOYSTICK_RAWINPUT "SDL_JOYSTICK_RAWINPUT" + + /** + * \brief A variable controlling whether the RAWINPUT driver should pull correlated data from XInput. + * + * This variable can be set to the following values: + * "0" - RAWINPUT driver will only use data from raw input APIs + * "1" - RAWINPUT driver will also pull data from XInput, providing + * better trigger axes, guide button presses, and rumble support + * for Xbox controllers + * + * The default is "1". This hint applies to any joysticks opened after setting the hint. + */ +#define SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT "SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT" + + /** + * \brief A variable controlling whether the ROG Chakram mice should show up as joysticks + * + * This variable can be set to the following values: + * "0" - ROG Chakram mice do not show up as joysticks (the default) + * "1" - ROG Chakram mice show up as joysticks + */ +#define SDL_HINT_JOYSTICK_ROG_CHAKRAM "SDL_JOYSTICK_ROG_CHAKRAM" + + /** + * \brief A variable controlling whether a separate thread should be used + * for handling joystick detection and raw input messages on Windows + * + * This variable can be set to the following values: + * "0" - A separate thread is not used (the default) + * "1" - A separate thread is used for handling raw input messages + * + */ +#define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD" + +/** + * \brief Determines whether SDL enforces that DRM master is required in order + * to initialize the KMSDRM video backend. + * + * The DRM subsystem has a concept of a "DRM master" which is a DRM client that + * has the ability to set planes, set cursor, etc. When SDL is DRM master, it + * can draw to the screen using the SDL rendering APIs. Without DRM master, SDL + * is still able to process input and query attributes of attached displays, + * but it cannot change display state or draw to the screen directly. + * + * In some cases, it can be useful to have the KMSDRM backend even if it cannot + * be used for rendering. An app may want to use SDL for input processing while + * using another rendering API (such as an MMAL overlay on Raspberry Pi) or + * using its own code to render to DRM overlays that SDL doesn't support. + * + * This hint must be set before initializing the video subsystem. + * + * This variable can be set to the following values: + * "0" - SDL will allow usage of the KMSDRM backend without DRM master + * "1" - SDL Will require DRM master to use the KMSDRM backend (default) + */ +#define SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER "SDL_KMSDRM_REQUIRE_DRM_MASTER" + + /** + * \brief A comma separated list of devices to open as joysticks + * + * This variable is currently only used by the Linux joystick driver. + */ +#define SDL_HINT_JOYSTICK_DEVICE "SDL_JOYSTICK_DEVICE" + + /** + * \brief A variable controlling whether to use the classic /dev/input/js* joystick interface or the newer /dev/input/event* joystick interface on Linux + * + * This variable can be set to the following values: + * "0" - Use /dev/input/event* + * "1" - Use /dev/input/js* + * + * By default the /dev/input/event* interfaces are used + */ +#define SDL_HINT_LINUX_JOYSTICK_CLASSIC "SDL_LINUX_JOYSTICK_CLASSIC" + + /** + * \brief A variable controlling whether joysticks on Linux adhere to their HID-defined deadzones or return unfiltered values. + * + * This variable can be set to the following values: + * "0" - Return unfiltered joystick axis values (the default) + * "1" - Return axis values with deadzones taken into account + */ +#define SDL_HINT_LINUX_JOYSTICK_DEADZONES "SDL_LINUX_JOYSTICK_DEADZONES" + +/** +* \brief When set don't force the SDL app to become a foreground process +* +* This hint only applies to Mac OS X. +* +*/ +#define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP" + +/** + * \brief A variable that determines whether ctrl+click should generate a right-click event on Mac + * + * If present, holding ctrl while left clicking will generate a right click + * event when on Mac. + */ +#define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK" + +/** + * \brief A variable setting the double click radius, in pixels. + */ +#define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS "SDL_MOUSE_DOUBLE_CLICK_RADIUS" + +/** + * \brief A variable setting the double click time, in milliseconds. + */ +#define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME "SDL_MOUSE_DOUBLE_CLICK_TIME" + +/** + * \brief Allow mouse click events when clicking to focus an SDL window + * + * This variable can be set to the following values: + * "0" - Ignore mouse clicks that activate a window + * "1" - Generate events for mouse clicks that activate a window + * + * By default SDL will ignore mouse clicks that activate a window + */ +#define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH" + +/** + * \brief A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode + */ +#define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE "SDL_MOUSE_NORMAL_SPEED_SCALE" + +/** + * \brief A variable controlling whether relative mouse mode constrains the mouse to the center of the window + * + * This variable can be set to the following values: + * "0" - Relative mouse mode constrains the mouse to the window + * "1" - Relative mouse mode constrains the mouse to the center of the window + * + * Constraining to the center of the window works better for FPS games and when the + * application is running over RDP. Constraining to the whole window works better + * for 2D games and increases the chance that the mouse will be in the correct + * position when using high DPI mice. + * + * By default SDL will constrain the mouse to the center of the window + */ +#define SDL_HINT_MOUSE_RELATIVE_MODE_CENTER "SDL_MOUSE_RELATIVE_MODE_CENTER" + +/** + * \brief A variable controlling whether relative mouse mode is implemented using mouse warping + * + * This variable can be set to the following values: + * "0" - Relative mouse mode uses raw input + * "1" - Relative mouse mode uses mouse warping + * + * By default SDL will use raw input for relative mouse mode + */ +#define SDL_HINT_MOUSE_RELATIVE_MODE_WARP "SDL_MOUSE_RELATIVE_MODE_WARP" + +/** + * \brief A variable controlling whether relative mouse motion is affected by renderer scaling + * + * This variable can be set to the following values: + * "0" - Relative motion is unaffected by DPI or renderer's logical size + * "1" - Relative motion is scaled according to DPI scaling and logical size + * + * By default relative mouse deltas are affected by DPI and renderer scaling + */ +#define SDL_HINT_MOUSE_RELATIVE_SCALING "SDL_MOUSE_RELATIVE_SCALING" + +/** + * \brief A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode + */ +#define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE "SDL_MOUSE_RELATIVE_SPEED_SCALE" + +/** + * \brief A variable controlling whether mouse events should generate synthetic touch events + * + * This variable can be set to the following values: + * "0" - Mouse events will not generate touch events (default for desktop platforms) + * "1" - Mouse events will generate touch events (default for mobile platforms, such as Android and iOS) + */ +#define SDL_HINT_MOUSE_TOUCH_EVENTS "SDL_MOUSE_TOUCH_EVENTS" + +/** + * \brief A variable controlling whether the mouse is captured while mouse buttons are pressed + * + * This variable can be set to the following values: + * "0" - The mouse is not captured while mouse buttons are pressed + * "1" - The mouse is captured while mouse buttons are pressed + * + * By default the mouse is captured while mouse buttons are pressed so if the mouse is dragged + * outside the window, the application continues to receive mouse events until the button is + * released. + */ +#define SDL_HINT_MOUSE_AUTO_CAPTURE "SDL_MOUSE_AUTO_CAPTURE" + +/** + * \brief Tell SDL not to catch the SIGINT or SIGTERM signals. + * + * This hint only applies to Unix-like platforms, and should set before + * any calls to SDL_Init() + * + * The variable can be set to the following values: + * "0" - SDL will install a SIGINT and SIGTERM handler, and when it + * catches a signal, convert it into an SDL_QUIT event. + * "1" - SDL will not install a signal handler at all. + */ +#define SDL_HINT_NO_SIGNAL_HANDLERS "SDL_NO_SIGNAL_HANDLERS" + +/** + * \brief A variable controlling what driver to use for OpenGL ES contexts. + * + * On some platforms, currently Windows and X11, OpenGL drivers may support + * creating contexts with an OpenGL ES profile. By default SDL uses these + * profiles, when available, otherwise it attempts to load an OpenGL ES + * library, e.g. that provided by the ANGLE project. This variable controls + * whether SDL follows this default behaviour or will always load an + * OpenGL ES library. + * + * Circumstances where this is useful include + * - Testing an app with a particular OpenGL ES implementation, e.g ANGLE, + * or emulator, e.g. those from ARM, Imagination or Qualcomm. + * - Resolving OpenGL ES function addresses at link time by linking with + * the OpenGL ES library instead of querying them at run time with + * SDL_GL_GetProcAddress(). + * + * Caution: for an application to work with the default behaviour across + * different OpenGL drivers it must query the OpenGL ES function + * addresses at run time using SDL_GL_GetProcAddress(). + * + * This variable is ignored on most platforms because OpenGL ES is native + * or not supported. + * + * This variable can be set to the following values: + * "0" - Use ES profile of OpenGL, if available. (Default when not set.) + * "1" - Load OpenGL ES library using the default library names. + * + */ +#define SDL_HINT_OPENGL_ES_DRIVER "SDL_OPENGL_ES_DRIVER" + +/** + * \brief A variable controlling which orientations are allowed on iOS/Android. + * + * In some circumstances it is necessary to be able to explicitly control + * which UI orientations are allowed. + * + * This variable is a space delimited list of the following values: + * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown" + */ +#define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" + +/** + * \brief A variable controlling the use of a sentinel event when polling the event queue + * + * This variable can be set to the following values: + * "0" - Disable poll sentinels + * "1" - Enable poll sentinels + * + * When polling for events, SDL_PumpEvents is used to gather new events from devices. + * If a device keeps producing new events between calls to SDL_PumpEvents, a poll loop will + * become stuck until the new events stop. + * This is most noticable when moving a high frequency mouse. + * + * By default, poll sentinels are enabled. + */ +#define SDL_HINT_POLL_SENTINEL "SDL_POLL_SENTINEL" + +/** + * \brief Override for SDL_GetPreferredLocales() + * + * If set, this will be favored over anything the OS might report for the + * user's preferred locales. Changing this hint at runtime will not generate + * a SDL_LOCALECHANGED event (but if you can change the hint, you can push + * your own event, if you want). + * + * The format of this hint is a comma-separated list of language and locale, + * combined with an underscore, as is a common format: "en_GB". Locale is + * optional: "en". So you might have a list like this: "en_GB,jp,es_PT" + */ +#define SDL_HINT_PREFERRED_LOCALES "SDL_PREFERRED_LOCALES" + +/** + * \brief A variable describing the content orientation on QtWayland-based platforms. + * + * On QtWayland platforms, windows are rotated client-side to allow for custom + * transitions. In order to correctly position overlays (e.g. volume bar) and + * gestures (e.g. events view, close/minimize gestures), the system needs to + * know in which orientation the application is currently drawing its contents. + * + * This does not cause the window to be rotated or resized, the application + * needs to take care of drawing the content in the right orientation (the + * framebuffer is always in portrait mode). + * + * This variable can be one of the following values: + * "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape" + */ +#define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION" + +/** + * \brief Flags to set on QtWayland windows to integrate with the native window manager. + * + * On QtWayland platforms, this hint controls the flags to set on the windows. + * For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures. + * + * This variable is a space-separated list of the following values (empty = no flags): + * "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager" + */ +#define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS" + +/** + * \brief A variable controlling whether the 2D render API is compatible or efficient. + * + * This variable can be set to the following values: + * + * "0" - Don't use batching to make rendering more efficient. + * "1" - Use batching, but might cause problems if app makes its own direct OpenGL calls. + * + * Up to SDL 2.0.9, the render API would draw immediately when requested. Now + * it batches up draw requests and sends them all to the GPU only when forced + * to (during SDL_RenderPresent, when changing render targets, by updating a + * texture that the batch needs, etc). This is significantly more efficient, + * but it can cause problems for apps that expect to render on top of the + * render API's output. As such, SDL will disable batching if a specific + * render backend is requested (since this might indicate that the app is + * planning to use the underlying graphics API directly). This hint can + * be used to explicitly request batching in this instance. It is a contract + * that you will either never use the underlying graphics API directly, or + * if you do, you will call SDL_RenderFlush() before you do so any current + * batch goes to the GPU before your work begins. Not following this contract + * will result in undefined behavior. + */ +#define SDL_HINT_RENDER_BATCHING "SDL_RENDER_BATCHING" + +/** + * \brief A variable controlling how the 2D render API renders lines + * + * This variable can be set to the following values: + * "0" - Use the default line drawing method (Bresenham's line algorithm as of SDL 2.0.20) + * "1" - Use the driver point API using Bresenham's line algorithm (correct, draws many points) + * "2" - Use the driver line API (occasionally misses line endpoints based on hardware driver quirks, was the default before 2.0.20) + * "3" - Use the driver geometry API (correct, draws thicker diagonal lines) + * + * This variable should be set when the renderer is created. + */ +#define SDL_HINT_RENDER_LINE_METHOD "SDL_RENDER_LINE_METHOD" + +/** + * \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer. + * + * This variable does not have any effect on the Direct3D 9 based renderer. + * + * This variable can be set to the following values: + * "0" - Disable Debug Layer use + * "1" - Enable Debug Layer use + * + * By default, SDL does not use Direct3D Debug Layer. + */ +#define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG" + +/** + * \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations. + * + * This variable can be set to the following values: + * "0" - Thread-safety is not enabled (faster) + * "1" - Thread-safety is enabled + * + * By default the Direct3D device is created with thread-safety disabled. + */ +#define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE" + +/** + * \brief A variable specifying which render driver to use. + * + * If the application doesn't pick a specific renderer to use, this variable + * specifies the name of the preferred renderer. If the preferred renderer + * can't be initialized, the normal default renderer is used. + * + * This variable is case insensitive and can be set to the following values: + * "direct3d" + * "opengl" + * "opengles2" + * "opengles" + * "metal" + * "software" + * + * The default varies by platform, but it's the first one in the list that + * is available on the current platform. + */ +#define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER" + +/** + * \brief A variable controlling the scaling policy for SDL_RenderSetLogicalSize. + * + * This variable can be set to the following values: + * "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen + * "1" or "overscan" - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen + * + * By default letterbox is used + */ +#define SDL_HINT_RENDER_LOGICAL_SIZE_MODE "SDL_RENDER_LOGICAL_SIZE_MODE" + +/** + * \brief A variable controlling whether the OpenGL render driver uses shaders if they are available. + * + * This variable can be set to the following values: + * "0" - Disable shaders + * "1" - Enable shaders + * + * By default shaders are used if OpenGL supports them. + */ +#define SDL_HINT_RENDER_OPENGL_SHADERS "SDL_RENDER_OPENGL_SHADERS" + +/** + * \brief A variable controlling the scaling quality + * + * This variable can be set to the following values: + * "0" or "nearest" - Nearest pixel sampling + * "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D) + * "2" or "best" - Currently this is the same as "linear" + * + * By default nearest pixel sampling is used + */ +#define SDL_HINT_RENDER_SCALE_QUALITY "SDL_RENDER_SCALE_QUALITY" + +/** + * \brief A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing. + * + * This variable can be set to the following values: + * "0" - Disable vsync + * "1" - Enable vsync + * + * By default SDL does not sync screen surface updates with vertical refresh. + */ +#define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC" + + /** + * \brief A variable to control whether the return key on the soft keyboard + * should hide the soft keyboard on Android and iOS. + * + * The variable can be set to the following values: + * "0" - The return key will be handled as a key event. This is the behaviour of SDL <= 2.0.3. (default) + * "1" - The return key will hide the keyboard. + * + * The value of this hint is used at runtime, so it can be changed at any time. + */ +#define SDL_HINT_RETURN_KEY_HIDES_IME "SDL_RETURN_KEY_HIDES_IME" + +/** + * \brief Tell SDL which Dispmanx layer to use on a Raspberry PI + * + * Also known as Z-order. The variable can take a negative or positive value. + * The default is 10000. + */ +#define SDL_HINT_RPI_VIDEO_LAYER "SDL_RPI_VIDEO_LAYER" + +/** + * \brief Specify an "activity name" for screensaver inhibition. + * + * Some platforms, notably Linux desktops, list the applications which are + * inhibiting the screensaver or other power-saving features. + * + * This hint lets you specify the "activity name" sent to the OS when + * SDL_DisableScreenSaver() is used (or the screensaver is automatically + * disabled). The contents of this hint are used when the screensaver is + * disabled. You should use a string that describes what your program is doing + * (and, therefore, why the screensaver is disabled). For example, "Playing a + * game" or "Watching a video". + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: "Playing a game" or something similar. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME "SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME" + +/** + * \brief Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as realtime. + * + * On some platforms, like Linux, a realtime priority thread may be subject to restrictions + * that require special handling by the application. This hint exists to let SDL know that + * the app is prepared to handle said restrictions. + * + * On Linux, SDL will apply the following configuration to any thread that becomes realtime: + * * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy, + * * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit. + * * Exceeding this limit will result in the kernel sending SIGKILL to the app, + * * Refer to the man pages for more information. + * + * This variable can be set to the following values: + * "0" - default platform specific behaviour + * "1" - Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy + */ +#define SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL "SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL" + +/** +* \brief A string specifying additional information to use with SDL_SetThreadPriority. +* +* By default SDL_SetThreadPriority will make appropriate system changes in order to +* apply a thread priority. For example on systems using pthreads the scheduler policy +* is changed automatically to a policy that works well with a given priority. +* Code which has specific requirements can override SDL's default behavior with this hint. +* +* pthread hint values are "current", "other", "fifo" and "rr". +* Currently no other platform hint values are defined but may be in the future. +* +* \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro +* configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME +* after calling SDL_SetThreadPriority(). +*/ +#define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY" + +/** +* \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size +* +* Use this hint in case you need to set SDL's threads stack size to other than the default. +* This is specially useful if you build SDL against a non glibc libc library (such as musl) which +* provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses). +* Support for this hint is currently available only in the pthread, Windows, and PSP backend. +* +* Instead of this hint, in 2.0.9 and later, you can use +* SDL_CreateThreadWithStackSize(). This hint only works with the classic +* SDL_CreateThread(). +*/ +#define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE" + +/** + * \brief A variable that controls the timer resolution, in milliseconds. + * + * The higher resolution the timer, the more frequently the CPU services + * timer interrupts, and the more precise delays are, but this takes up + * power and CPU time. This hint is only used on Windows. + * + * See this blog post for more information: + * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/ + * + * If this variable is set to "0", the system timer resolution is not set. + * + * The default value is "1". This hint may be set at any time. + */ +#define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION" + +/** + * \brief A variable controlling whether touch events should generate synthetic mouse events + * + * This variable can be set to the following values: + * "0" - Touch events will not generate mouse events + * "1" - Touch events will generate mouse events + * + * By default SDL will generate mouse events for touch events + */ +#define SDL_HINT_TOUCH_MOUSE_EVENTS "SDL_TOUCH_MOUSE_EVENTS" + +/** + * \brief A variable controlling which touchpad should generate synthetic mouse events + * + * This variable can be set to the following values: + * "0" - Only front touchpad should generate mouse events. Default + * "1" - Only back touchpad should generate mouse events. + * "2" - Both touchpads should generate mouse events. + * + * By default SDL will generate mouse events for all touch devices + */ +#define SDL_HINT_VITA_TOUCH_MOUSE_DEVICE "SDL_HINT_VITA_TOUCH_MOUSE_DEVICE" + +/** + * \brief A variable controlling whether the Android / tvOS remotes + * should be listed as joystick devices, instead of sending keyboard events. + * + * This variable can be set to the following values: + * "0" - Remotes send enter/escape/arrow key events + * "1" - Remotes are available as 2 axis, 2 button joysticks (the default). + */ +#define SDL_HINT_TV_REMOTE_AS_JOYSTICK "SDL_TV_REMOTE_AS_JOYSTICK" + +/** + * \brief A variable controlling whether the screensaver is enabled. + * + * This variable can be set to the following values: + * "0" - Disable screensaver + * "1" - Enable screensaver + * + * By default SDL will disable the screensaver. + */ +#define SDL_HINT_VIDEO_ALLOW_SCREENSAVER "SDL_VIDEO_ALLOW_SCREENSAVER" + +/** + * \brief Tell the video driver that we only want a double buffer. + * + * By default, most lowlevel 2D APIs will use a triple buffer scheme that + * wastes no CPU time on waiting for vsync after issuing a flip, but + * introduces a frame of latency. On the other hand, using a double buffer + * scheme instead is recommended for cases where low latency is an important + * factor because we save a whole frame of latency. + * We do so by waiting for vsync immediately after issuing a flip, usually just + * after eglSwapBuffers call in the backend's *_SwapWindow function. + * + * Since it's driver-specific, it's only supported where possible and + * implemented. Currently supported the following drivers: + * + * - KMSDRM (kmsdrm) + * - Raspberry Pi (raspberrypi) + */ +#define SDL_HINT_VIDEO_DOUBLE_BUFFER "SDL_VIDEO_DOUBLE_BUFFER" + +/** + * \brief A variable controlling whether the EGL window is allowed to be + * composited as transparent, rather than opaque. + * + * Most window systems will always render windows opaque, even if the surface + * format has an alpha channel. This is not always true, however, so by default + * SDL will try to enforce opaque composition. To override this behavior, you + * can set this hint to "1". + */ +#define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY" + +/** + * \brief A variable controlling whether the graphics context is externally managed. + * + * This variable can be set to the following values: + * "0" - SDL will manage graphics contexts that are attached to windows. + * "1" - Disable graphics context management on windows. + * + * By default SDL will manage OpenGL contexts in certain situations. For example, on Android the + * context will be automatically saved and restored when pausing the application. Additionally, some + * platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this + * behavior, which is desireable when the application manages the graphics context, such as + * an externally managed OpenGL context or attaching a Vulkan surface to the window. + */ +#define SDL_HINT_VIDEO_EXTERNAL_CONTEXT "SDL_VIDEO_EXTERNAL_CONTEXT" + +/** + * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS) + */ +#define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED" + +/** + * \brief A variable that dictates policy for fullscreen Spaces on Mac OS X. + * + * This hint only applies to Mac OS X. + * + * The variable can be set to the following values: + * "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and + * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" + * button on their titlebars). + * "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and + * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" + * button on their titlebars). + * + * The default value is "1". Spaces are disabled regardless of this hint if + * the OS isn't at least Mac OS X Lion (10.7). This hint must be set before + * any windows are created. + */ +#define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES "SDL_VIDEO_MAC_FULLSCREEN_SPACES" + +/** + * \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to false. + * \warning Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're + * seeing if "true" causes more problems than it solves in modern times. + * + */ +#define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS" + +/** + * \brief A variable controlling whether the libdecor Wayland backend is allowed to be used. + * + * This variable can be set to the following values: + * "0" - libdecor use is disabled. + * "1" - libdecor use is enabled (default). + * + * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. + */ +#define SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR "SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR" + +/** + * \brief A variable controlling whether the libdecor Wayland backend is preferred over native decrations. + * + * When this hint is set, libdecor will be used to provide window decorations, even if xdg-decoration is + * available. (Note that, by default, libdecor will use xdg-decoration itself if available). + * + * This variable can be set to the following values: + * "0" - libdecor is enabled only if server-side decorations are unavailable. + * "1" - libdecor is always enabled if available. + * + * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. + */ +#define SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR "SDL_VIDEO_WAYLAND_PREFER_LIBDECOR" + +/** +* \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p"). +* +* If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has +* SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly +* created SDL_Window: +* +* 1. Its pixel format will be set to the same pixel format as this SDL_Window. This is +* needed for example when sharing an OpenGL context across multiple windows. +* +* 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for +* OpenGL rendering. +* +* This variable can be set to the following values: +* The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should +* share a pixel format with. +*/ +#define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT" + +/** + * \brief When calling SDL_CreateWindowFrom(), make the window compatible with OpenGL. + * + * This variable can be set to the following values: + * "0" - Don't add any graphics flags to the SDL_WindowFlags + * "1" - Add SDL_WINDOW_OPENGL to the SDL_WindowFlags + * + * By default SDL will not make the foreign window compatible with OpenGL. + */ +#define SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL "SDL_VIDEO_FOREIGN_WINDOW_OPENGL" + +/** + * \brief When calling SDL_CreateWindowFrom(), make the window compatible with Vulkan. + * + * This variable can be set to the following values: + * "0" - Don't add any graphics flags to the SDL_WindowFlags + * "1" - Add SDL_WINDOW_VULKAN to the SDL_WindowFlags + * + * By default SDL will not make the foreign window compatible with Vulkan. + */ +#define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN "SDL_VIDEO_FOREIGN_WINDOW_VULKAN" + +/** +* \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries +* +* SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It +* can use two different sets of binaries, those compiled by the user from source +* or those provided by the Chrome browser. In the later case, these binaries require +* that SDL loads a DLL providing the shader compiler. +* +* This variable can be set to the following values: +* "d3dcompiler_46.dll" - default, best for Vista or later. +* "d3dcompiler_43.dll" - for XP support. +* "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries. +* +*/ +#define SDL_HINT_VIDEO_WIN_D3DCOMPILER "SDL_VIDEO_WIN_D3DCOMPILER" + +/** + * \brief A variable controlling whether X11 should use GLX or EGL by default + * + * This variable can be set to the following values: + * "0" - Use GLX + * "1" - Use EGL + * + * By default SDL will use GLX when both are present. + */ +#define SDL_HINT_VIDEO_X11_FORCE_EGL "SDL_VIDEO_X11_FORCE_EGL" + +/** + * \brief A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be used. + * + * This variable can be set to the following values: + * "0" - Disable _NET_WM_BYPASS_COMPOSITOR + * "1" - Enable _NET_WM_BYPASS_COMPOSITOR + * + * By default SDL will use _NET_WM_BYPASS_COMPOSITOR + * + */ +#define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR" + +/** + * \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported. + * + * This variable can be set to the following values: + * "0" - Disable _NET_WM_PING + * "1" - Enable _NET_WM_PING + * + * By default SDL will use _NET_WM_PING, but for applications that know they + * will not always be able to respond to ping requests in a timely manner they can + * turn it off to avoid the window manager thinking the app is hung. + * The hint is checked in CreateWindow. + */ +#define SDL_HINT_VIDEO_X11_NET_WM_PING "SDL_VIDEO_X11_NET_WM_PING" + +/** + * \brief A variable forcing the visual ID chosen for new X11 windows + * + */ +#define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID" + +/** + * \brief A variable controlling whether the X11 Xinerama extension should be used. + * + * This variable can be set to the following values: + * "0" - Disable Xinerama + * "1" - Enable Xinerama + * + * By default SDL will use Xinerama if it is available. + */ +#define SDL_HINT_VIDEO_X11_XINERAMA "SDL_VIDEO_X11_XINERAMA" + +/** + * \brief A variable controlling whether the X11 XRandR extension should be used. + * + * This variable can be set to the following values: + * "0" - Disable XRandR + * "1" - Enable XRandR + * + * By default SDL will not use XRandR because of window manager issues. + */ +#define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR" + +/** + * \brief A variable controlling whether the X11 VidMode extension should be used. + * + * This variable can be set to the following values: + * "0" - Disable XVidMode + * "1" - Enable XVidMode + * + * By default SDL will use XVidMode if it is available. + */ +#define SDL_HINT_VIDEO_X11_XVIDMODE "SDL_VIDEO_X11_XVIDMODE" + +/** + * \brief Controls how the fact chunk affects the loading of a WAVE file. + * + * The fact chunk stores information about the number of samples of a WAVE + * file. The Standards Update from Microsoft notes that this value can be used + * to 'determine the length of the data in seconds'. This is especially useful + * for compressed formats (for which this is a mandatory chunk) if they produce + * multiple sample frames per block and truncating the block is not allowed. + * The fact chunk can exactly specify how many sample frames there should be + * in this case. + * + * Unfortunately, most application seem to ignore the fact chunk and so SDL + * ignores it by default as well. + * + * This variable can be set to the following values: + * + * "truncate" - Use the number of samples to truncate the wave data if + * the fact chunk is present and valid + * "strict" - Like "truncate", but raise an error if the fact chunk + * is invalid, not present for non-PCM formats, or if the + * data chunk doesn't have that many samples + * "ignorezero" - Like "truncate", but ignore fact chunk if the number of + * samples is zero + * "ignore" - Ignore fact chunk entirely (default) + */ +#define SDL_HINT_WAVE_FACT_CHUNK "SDL_WAVE_FACT_CHUNK" + +/** + * \brief Controls how the size of the RIFF chunk affects the loading of a WAVE file. + * + * The size of the RIFF chunk (which includes all the sub-chunks of the WAVE + * file) is not always reliable. In case the size is wrong, it's possible to + * just ignore it and step through the chunks until a fixed limit is reached. + * + * Note that files that have trailing data unrelated to the WAVE file or + * corrupt files may slow down the loading process without a reliable boundary. + * By default, SDL stops after 10000 chunks to prevent wasting time. Use the + * environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value. + * + * This variable can be set to the following values: + * + * "force" - Always use the RIFF chunk size as a boundary for the chunk search + * "ignorezero" - Like "force", but a zero size searches up to 4 GiB (default) + * "ignore" - Ignore the RIFF chunk size and always search up to 4 GiB + * "maximum" - Search for chunks until the end of file (not recommended) + */ +#define SDL_HINT_WAVE_RIFF_CHUNK_SIZE "SDL_WAVE_RIFF_CHUNK_SIZE" + +/** + * \brief Controls how a truncated WAVE file is handled. + * + * A WAVE file is considered truncated if any of the chunks are incomplete or + * the data chunk size is not a multiple of the block size. By default, SDL + * decodes until the first incomplete block, as most applications seem to do. + * + * This variable can be set to the following values: + * + * "verystrict" - Raise an error if the file is truncated + * "strict" - Like "verystrict", but the size of the RIFF chunk is ignored + * "dropframe" - Decode until the first incomplete sample frame + * "dropblock" - Decode until the first incomplete block (default) + */ +#define SDL_HINT_WAVE_TRUNCATION "SDL_WAVE_TRUNCATION" + +/** + * \brief Tell SDL not to name threads on Windows with the 0x406D1388 Exception. + * The 0x406D1388 Exception is a trick used to inform Visual Studio of a + * thread's name, but it tends to cause problems with other debuggers, + * and the .NET runtime. Note that SDL 2.0.6 and later will still use + * the (safer) SetThreadDescription API, introduced in the Windows 10 + * Creators Update, if available. + * + * The variable can be set to the following values: + * "0" - SDL will raise the 0x406D1388 Exception to name threads. + * This is the default behavior of SDL <= 2.0.4. + * "1" - SDL will not raise this exception, and threads will be unnamed. (default) + * This is necessary with .NET languages or debuggers that aren't Visual Studio. + */ +#define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING" + +/** + * \brief A variable controlling whether the windows message loop is processed by SDL + * + * This variable can be set to the following values: + * "0" - The window message loop is not run + * "1" - The window message loop is processed in SDL_PumpEvents() + * + * By default SDL will process the windows message loop + */ +#define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP" + +/** + * \brief Force SDL to use Critical Sections for mutexes on Windows. + * On Windows 7 and newer, Slim Reader/Writer Locks are available. + * They offer better performance, allocate no kernel ressources and + * use less memory. SDL will fall back to Critical Sections on older + * OS versions or if forced to by this hint. + * + * This variable can be set to the following values: + * "0" - Use SRW Locks when available. If not, fall back to Critical Sections. (default) + * "1" - Force the use of Critical Sections in all cases. + * + */ +#define SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS "SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS" + +/** + * \brief Force SDL to use Kernel Semaphores on Windows. + * Kernel Semaphores are inter-process and require a context + * switch on every interaction. On Windows 8 and newer, the + * WaitOnAddress API is available. Using that and atomics to + * implement semaphores increases performance. + * SDL will fall back to Kernel Objects on older OS versions + * or if forced to by this hint. + * + * This variable can be set to the following values: + * "0" - Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel Objects. (default) + * "1" - Force the use of Kernel Objects in all cases. + * + */ +#define SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL "SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL" + +/** + * \brief A variable to specify custom icon resource id from RC file on Windows platform + */ +#define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON" +#define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL" + +/** + * \brief Tell SDL not to generate window-close events for Alt+F4 on Windows. + * + * The variable can be set to the following values: + * "0" - SDL will generate a window-close event when it sees Alt+F4. + * "1" - SDL will only do normal key handling for Alt+F4. + */ +#define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4" + +/** + * \brief Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9. + * Direct3D 9Ex contains changes to state management that can eliminate device + * loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require + * some changes to your application to cope with the new behavior, so this + * is disabled by default. + * + * This hint must be set before initializing the video subsystem. + * + * For more information on Direct3D 9Ex, see: + * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex + * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements + * + * This variable can be set to the following values: + * "0" - Use the original Direct3D 9 API (default) + * "1" - Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is unavailable) + * + */ +#define SDL_HINT_WINDOWS_USE_D3D9EX "SDL_WINDOWS_USE_D3D9EX" + +/** + * \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden + * + * This variable can be set to the following values: + * "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc) + * "1" - The window frame is interactive when the cursor is hidden + * + * By default SDL will allow interaction with the window frame when the cursor is hidden + */ +#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN" + +/** +* \brief A variable controlling whether the window is activated when the SDL_ShowWindow function is called +* +* This variable can be set to the following values: +* "0" - The window is activated when the SDL_ShowWindow function is called +* "1" - The window is not activated when the SDL_ShowWindow function is called +* +* By default SDL will activate the window when the SDL_ShowWindow function is called +*/ +#define SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN "SDL_WINDOW_NO_ACTIVATION_WHEN_SHOWN" + +/** \brief Allows back-button-press events on Windows Phone to be marked as handled + * + * Windows Phone devices typically feature a Back button. When pressed, + * the OS will emit back-button-press events, which apps are expected to + * handle in an appropriate manner. If apps do not explicitly mark these + * events as 'Handled', then the OS will invoke its default behavior for + * unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to + * terminate the app (and attempt to switch to the previous app, or to the + * device's home screen). + * + * Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL + * to mark back-button-press events as Handled, if and when one is sent to + * the app. + * + * Internally, Windows Phone sends back button events as parameters to + * special back-button-press callback functions. Apps that need to respond + * to back-button-press events are expected to register one or more + * callback functions for such, shortly after being launched (during the + * app's initialization phase). After the back button is pressed, the OS + * will invoke these callbacks. If the app's callback(s) do not explicitly + * mark the event as handled by the time they return, or if the app never + * registers one of these callback, the OS will consider the event + * un-handled, and it will apply its default back button behavior (terminate + * the app). + * + * SDL registers its own back-button-press callback with the Windows Phone + * OS. This callback will emit a pair of SDL key-press events (SDL_KEYDOWN + * and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which + * it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON. + * If the hint's value is set to "1", the back button event's Handled + * property will get set to 'true'. If the hint's value is set to something + * else, or if it is unset, SDL will leave the event's Handled property + * alone. (By default, the OS sets this property to 'false', to note.) + * + * SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a + * back button is pressed, or can set it in direct-response to a back button + * being pressed. + * + * In order to get notified when a back button is pressed, SDL apps should + * register a callback function with SDL_AddEventWatch(), and have it listen + * for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK. + * (Alternatively, SDL_KEYUP events can be listened-for. Listening for + * either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON + * set by such a callback, will be applied to the OS' current + * back-button-press event. + * + * More details on back button behavior in Windows Phone apps can be found + * at the following page, on Microsoft's developer site: + * http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx + */ +#define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON" + +/** \brief Label text for a WinRT app's privacy policy link + * + * Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT, + * Microsoft mandates that this policy be available via the Windows Settings charm. + * SDL provides code to add a link there, with its label text being set via the + * optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. + * + * Please note that a privacy policy's contents are not set via this hint. A separate + * hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the + * policy. + * + * The contents of this hint should be encoded as a UTF8 string. + * + * The default value is "Privacy Policy". This hint should only be set during app + * initialization, preferably before any calls to SDL_Init(). + * + * For additional information on linking to a privacy policy, see the documentation for + * SDL_HINT_WINRT_PRIVACY_POLICY_URL. + */ +#define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL" + +/** + * \brief A URL to a WinRT app's privacy policy + * + * All network-enabled WinRT apps must make a privacy policy available to its + * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be + * be available in the Windows Settings charm, as accessed from within the app. + * SDL provides code to add a URL-based link there, which can point to the app's + * privacy policy. + * + * To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL + * before calling any SDL_Init() functions. The contents of the hint should + * be a valid URL. For example, "http://www.example.com". + * + * The default value is "", which will prevent SDL from adding a privacy policy + * link to the Settings charm. This hint should only be set during app init. + * + * The label text of an app's "Privacy Policy" link may be customized via another + * hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. + * + * Please note that on Windows Phone, Microsoft does not provide standard UI + * for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL + * will not get used on that platform. Network-enabled phone apps should display + * their privacy policy through some other, in-app means. + */ +#define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL" + +/** + * \brief Mark X11 windows as override-redirect. + * + * If set, this _might_ increase framerate at the expense of the desktop + * not working as expected. Override-redirect windows aren't noticed by the + * window manager at all. + * + * You should probably only use this for fullscreen windows, and you probably + * shouldn't even use it for that. But it's here if you want to try! + */ +#define SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT "SDL_X11_FORCE_OVERRIDE_REDIRECT" + +/** + * \brief A variable that lets you disable the detection and use of Xinput gamepad devices + * + * The variable can be set to the following values: + * "0" - Disable XInput detection (only uses direct input) + * "1" - Enable XInput detection (the default) + */ +#define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" + +/** + * \brief A variable that causes SDL to use the old axis and button mapping for XInput devices. + * + * This hint is for backwards compatibility only and will be removed in SDL 2.1 + * + * The default value is "0". This hint must be set before SDL_Init() + */ +#define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING" + +/** + * \brief A variable that causes SDL to not ignore audio "monitors" + * + * This is currently only used for PulseAudio and ignored elsewhere. + * + * By default, SDL ignores audio devices that aren't associated with physical + * hardware. Changing this hint to "1" will expose anything SDL sees that + * appears to be an audio source or sink. This will add "devices" to the list + * that the user probably doesn't want or need, but it can be useful in + * scenarios where you want to hook up SDL to some sort of virtual device, + * etc. + * + * The default value is "0". This hint must be set before SDL_Init(). + * + * This hint is available since SDL 2.0.16. Before then, virtual devices are + * always ignored. + */ +#define SDL_HINT_AUDIO_INCLUDE_MONITORS "SDL_AUDIO_INCLUDE_MONITORS" + +/** + * \brief A variable that forces X11 windows to create as a custom type. + * + * This is currently only used for X11 and ignored elsewhere. + * + * During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property + * to report to the window manager the type of window it wants to create. + * This might be set to various things if SDL_WINDOW_TOOLTIP or + * SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that + * haven't set a specific type, this hint can be used to specify a custom + * type. For example, a dock window might set this to + * "_NET_WM_WINDOW_TYPE_DOCK". + * + * If not set or set to "", this hint is ignored. This hint must be set + * before the SDL_CreateWindow() call that it is intended to affect. + * + * This hint is available since SDL 2.0.22. + */ +#define SDL_HINT_X11_WINDOW_TYPE "SDL_X11_WINDOW_TYPE" + +/** + * \brief A variable that decides whether to send SDL_QUIT when closing the final window. + * + * By default, SDL sends an SDL_QUIT event when there is only one window + * and it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most + * apps would also take the loss of this window as a signal to terminate the + * program. + * + * However, it's not unreasonable in some cases to have the program continue + * to live on, perhaps to create new windows later. + * + * Changing this hint to "0" will cause SDL to not send an SDL_QUIT event + * when the final window is requesting to close. Note that in this case, + * there are still other legitimate reasons one might get an SDL_QUIT + * event: choosing "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c) + * on Unix, etc. + * + * The default value is "1". This hint can be changed at any time. + * + * This hint is available since SDL 2.0.22. Before then, you always get + * an SDL_QUIT event when closing the final window. + */ +#define SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE "SDL_QUIT_ON_LAST_WINDOW_CLOSE" + + +/** + * \brief A variable that decides what video backend to use. + * + * By default, SDL will try all available video backends in a reasonable + * order until it finds one that can work, but this hint allows the app + * or user to force a specific target, such as "x11" if, say, you are + * on Wayland but want to try talking to the X server instead. + * + * This functionality has existed since SDL 2.0.0 (indeed, before that) + * but before 2.0.22 this was an environment variable only. In 2.0.22, + * it was upgraded to a full SDL hint, so you can set the environment + * variable as usual or programatically set the hint with SDL_SetHint, + * which won't propagate to child processes. + * + * The default value is unset, in which case SDL will try to figure out + * the best video backend on your behalf. This hint needs to be set + * before SDL_Init() is called to be useful. + * + * This hint is available since SDL 2.0.22. Before then, you could set + * the environment variable to get the same effect. + */ +#define SDL_HINT_VIDEODRIVER "SDL_VIDEODRIVER" + +/** + * \brief A variable that decides what audio backend to use. + * + * By default, SDL will try all available audio backends in a reasonable + * order until it finds one that can work, but this hint allows the app + * or user to force a specific target, such as "alsa" if, say, you are + * on PulseAudio but want to try talking to the lower level instead. + * + * This functionality has existed since SDL 2.0.0 (indeed, before that) + * but before 2.0.22 this was an environment variable only. In 2.0.22, + * it was upgraded to a full SDL hint, so you can set the environment + * variable as usual or programatically set the hint with SDL_SetHint, + * which won't propagate to child processes. + * + * The default value is unset, in which case SDL will try to figure out + * the best audio backend on your behalf. This hint needs to be set + * before SDL_Init() is called to be useful. + * + * This hint is available since SDL 2.0.22. Before then, you could set + * the environment variable to get the same effect. + */ +#define SDL_HINT_AUDIODRIVER "SDL_AUDIODRIVER" + + +/** + * \brief An enumeration of hint priorities + */ +typedef enum +{ + SDL_HINT_DEFAULT, + SDL_HINT_NORMAL, + SDL_HINT_OVERRIDE +} SDL_HintPriority; + + +/** + * Set a hint with a specific priority. + * + * The priority controls the behavior when setting a hint that already has a + * value. Hints will replace existing hints of their priority and lower. + * Environment variables are considered to have override priority. + * + * \param name the hint to set + * \param value the value of the hint variable + * \param priority the SDL_HintPriority level for the hint + * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetHint + * \sa SDL_SetHint + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name, + const char *value, + SDL_HintPriority priority); + +/** + * Set a hint with normal priority. + * + * Hints will not be set if there is an existing override hint or environment + * variable that takes precedence. You can use SDL_SetHintWithPriority() to + * set the hint with override priority instead. + * + * \param name the hint to set + * \param value the value of the hint variable + * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetHint + * \sa SDL_SetHintWithPriority + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name, + const char *value); + +/** + * Get the value of a hint. + * + * \param name the hint to query + * \returns the string value of a hint or NULL if the hint isn't set. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetHint + * \sa SDL_SetHintWithPriority + */ +extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name); + +/** + * Get the boolean value of a hint variable. + * + * \param name the name of the hint to get the boolean value from + * \param default_value the value to return if the hint does not exist + * \returns the boolean value of a hint or the provided default value if the + * hint does not exist. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetHint + * \sa SDL_SetHint + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetHintBoolean(const char *name, SDL_bool default_value); + +/** + * Type definition of the hint callback function. + * + * \param userdata what was passed as `userdata` to SDL_AddHintCallback() + * \param name what was passed as `name` to SDL_AddHintCallback() + * \param oldValue the previous hint value + * \param newValue the new value hint is to be set to + */ +typedef void (SDLCALL *SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue); + +/** + * Add a function to watch a particular hint. + * + * \param name the hint to watch + * \param callback An SDL_HintCallback function that will be called when the + * hint value changes + * \param userdata a pointer to pass to the callback function + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DelHintCallback + */ +extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name, + SDL_HintCallback callback, + void *userdata); + +/** + * Remove a function watching a particular hint. + * + * \param name the hint being watched + * \param callback An SDL_HintCallback function that will be called when the + * hint value changes + * \param userdata a pointer being passed to the callback function + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddHintCallback + */ +extern DECLSPEC void SDLCALL SDL_DelHintCallback(const char *name, + SDL_HintCallback callback, + void *userdata); + +/** + * Clear all hints. + * + * This function is automatically called during SDL_Quit(). + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_ClearHints(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_hints_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_joystick.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_joystick.h new file mode 100644 index 00000000000..3e5b4a9a320 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_joystick.h @@ -0,0 +1,946 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_joystick.h + * + * Include file for SDL joystick event handling + * + * The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks(), with the exact joystick + * behind a device_index changing as joysticks are plugged and unplugged. + * + * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted + * then it will get a new instance_id, instance_id's are monotonically increasing identifiers of a joystick plugged in. + * + * The term "player_index" is the number assigned to a player on a specific + * controller. For XInput controllers this returns the XInput user index. + * Many joysticks will not be able to supply this information. + * + * The term JoystickGUID is a stable 128-bit identifier for a joystick device that does not change over time, it identifies class of + * the device (a X360 wired controller for example). This identifier is platform dependent. + */ + +#ifndef SDL_joystick_h_ +#define SDL_joystick_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_joystick.h + * + * In order to use these functions, SDL_Init() must have been called + * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system + * for joysticks, and load appropriate drivers. + * + * If you would like to receive joystick updates while the application + * is in the background, you should set the following hint before calling + * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS + */ + +/** + * The joystick structure used to identify an SDL joystick + */ +struct _SDL_Joystick; +typedef struct _SDL_Joystick SDL_Joystick; + +/* A structure that encodes the stable unique id for a joystick device */ +typedef struct { + Uint8 data[16]; +} SDL_JoystickGUID; + +/** + * This is a unique ID for a joystick for the time it is connected to the system, + * and is never reused for the lifetime of the application. If the joystick is + * disconnected and reconnected, it will get a new ID. + * + * The ID value starts at 0 and increments from there. The value -1 is an invalid ID. + */ +typedef Sint32 SDL_JoystickID; + +typedef enum +{ + SDL_JOYSTICK_TYPE_UNKNOWN, + SDL_JOYSTICK_TYPE_GAMECONTROLLER, + SDL_JOYSTICK_TYPE_WHEEL, + SDL_JOYSTICK_TYPE_ARCADE_STICK, + SDL_JOYSTICK_TYPE_FLIGHT_STICK, + SDL_JOYSTICK_TYPE_DANCE_PAD, + SDL_JOYSTICK_TYPE_GUITAR, + SDL_JOYSTICK_TYPE_DRUM_KIT, + SDL_JOYSTICK_TYPE_ARCADE_PAD, + SDL_JOYSTICK_TYPE_THROTTLE +} SDL_JoystickType; + +typedef enum +{ + SDL_JOYSTICK_POWER_UNKNOWN = -1, + SDL_JOYSTICK_POWER_EMPTY, /* <= 5% */ + SDL_JOYSTICK_POWER_LOW, /* <= 20% */ + SDL_JOYSTICK_POWER_MEDIUM, /* <= 70% */ + SDL_JOYSTICK_POWER_FULL, /* <= 100% */ + SDL_JOYSTICK_POWER_WIRED, + SDL_JOYSTICK_POWER_MAX +} SDL_JoystickPowerLevel; + +/* Set max recognized G-force from accelerometer + See src/joystick/uikit/SDL_sysjoystick.m for notes on why this is needed + */ +#define SDL_IPHONE_MAX_GFORCE 5.0 + + +/* Function prototypes */ + +/** + * Locking for multi-threaded access to the joystick API + * + * If you are using the joystick API or handling events from multiple threads + * you should use these locking functions to protect access to the joysticks. + * + * In particular, you are guaranteed that the joystick list won't change, so + * the API functions that take a joystick index will be valid, and joystick + * and game controller events will not be delivered. + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC void SDLCALL SDL_LockJoysticks(void); + + +/** + * Unlocking for multi-threaded access to the joystick API + * + * If you are using the joystick API or handling events from multiple threads + * you should use these locking functions to protect access to the joysticks. + * + * In particular, you are guaranteed that the joystick list won't change, so + * the API functions that take a joystick index will be valid, and joystick + * and game controller events will not be delivered. + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC void SDLCALL SDL_UnlockJoysticks(void); + +/** + * Count the number of joysticks attached to the system. + * + * \returns the number of attached joysticks on success or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickName + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); + +/** + * Get the implementation dependent name of a joystick. + * + * This can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system) + * \returns the name of the selected joystick. If no name can be found, this + * function returns NULL; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickName + * \sa SDL_JoystickOpen + */ +extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); + +/** + * Get the player index of a joystick, or -1 if it's not available This can be + * called before any joysticks are opened. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetDevicePlayerIndex(int device_index); + +/** + * Get the implementation-dependent GUID for the joystick at a given device + * index. + * + * This function can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the GUID of the selected joystick. If called on an invalid index, + * this function returns a zero GUID + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetGUID + * \sa SDL_JoystickGetGUIDString + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetDeviceGUID(int device_index); + +/** + * Get the USB vendor ID of a joystick, if available. + * + * This can be called before any joysticks are opened. If the vendor ID isn't + * available this function returns 0. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the USB vendor ID of the selected joystick. If called on an + * invalid index, this function returns zero + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceVendor(int device_index); + +/** + * Get the USB product ID of a joystick, if available. + * + * This can be called before any joysticks are opened. If the product ID isn't + * available this function returns 0. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the USB product ID of the selected joystick. If called on an + * invalid index, this function returns zero + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProduct(int device_index); + +/** + * Get the product version of a joystick, if available. + * + * This can be called before any joysticks are opened. If the product version + * isn't available this function returns 0. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the product version of the selected joystick. If called on an + * invalid index, this function returns zero + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProductVersion(int device_index); + +/** + * Get the type of a joystick, if available. + * + * This can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the SDL_JoystickType of the selected joystick. If called on an + * invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN` + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetDeviceType(int device_index); + +/** + * Get the instance ID of a joystick. + * + * This can be called before any joysticks are opened. If the index is out of + * range, this function will return -1. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the instance id of the selected joystick. If called on an invalid + * index, this function returns zero + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickGetDeviceInstanceID(int device_index); + +/** + * Open a joystick for use. + * + * The `device_index` argument refers to the N'th joystick presently + * recognized by SDL on the system. It is **NOT** the same as the instance ID + * used to identify the joystick in future events. See + * SDL_JoystickInstanceID() for more details about instance IDs. + * + * The joystick subsystem must be initialized before a joystick can be opened + * for use. + * + * \param device_index the index of the joystick to query + * \returns a joystick identifier or NULL if an error occurred; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickClose + * \sa SDL_JoystickInstanceID + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); + +/** + * Get the SDL_Joystick associated with an instance id. + * + * \param instance_id the instance id to get the SDL_Joystick for + * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID instance_id); + +/** + * Get the SDL_Joystick associated with a player index. + * + * \param player_index the player index to get the SDL_Joystick for + * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromPlayerIndex(int player_index); + +/** + * Attach a new virtual joystick. + * + * \returns the joystick's device index, or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickAttachVirtual(SDL_JoystickType type, + int naxes, + int nbuttons, + int nhats); + +/** + * Detach a virtual joystick. + * + * \param device_index a value previously returned from + * SDL_JoystickAttachVirtual() + * \returns 0 on success, or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickDetachVirtual(int device_index); + +/** + * Query whether or not the joystick at a given device index is virtual. + * + * \param device_index a joystick device index. + * \returns SDL_TRUE if the joystick is virtual, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickIsVirtual(int device_index); + +/** + * Set values on an opened, virtual-joystick's axis. + * + * Please note that values set here will not be applied until the next call to + * SDL_JoystickUpdate, which can either be called directly, or can be called + * indirectly through various other SDL APIs, including, but not limited to + * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, + * SDL_WaitEvent. + * + * \param joystick the virtual joystick on which to set state. + * \param axis the specific axis on the virtual joystick to set. + * \param value the new value for the specified axis. + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualAxis(SDL_Joystick *joystick, int axis, Sint16 value); + +/** + * Set values on an opened, virtual-joystick's button. + * + * Please note that values set here will not be applied until the next call to + * SDL_JoystickUpdate, which can either be called directly, or can be called + * indirectly through various other SDL APIs, including, but not limited to + * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, + * SDL_WaitEvent. + * + * \param joystick the virtual joystick on which to set state. + * \param button the specific button on the virtual joystick to set. + * \param value the new value for the specified button. + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualButton(SDL_Joystick *joystick, int button, Uint8 value); + +/** + * Set values on an opened, virtual-joystick's hat. + * + * Please note that values set here will not be applied until the next call to + * SDL_JoystickUpdate, which can either be called directly, or can be called + * indirectly through various other SDL APIs, including, but not limited to + * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, + * SDL_WaitEvent. + * + * \param joystick the virtual joystick on which to set state. + * \param hat the specific hat on the virtual joystick to set. + * \param value the new value for the specified hat. + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualHat(SDL_Joystick *joystick, int hat, Uint8 value); + +/** + * Get the implementation dependent name of a joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the name of the selected joystick. If no name can be found, this + * function returns NULL; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNameForIndex + * \sa SDL_JoystickOpen + */ +extern DECLSPEC const char *SDLCALL SDL_JoystickName(SDL_Joystick *joystick); + +/** + * Get the player index of an opened joystick. + * + * For XInput controllers this returns the XInput user index. Many joysticks + * will not be able to supply this information. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the player index, or -1 if it's not available. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetPlayerIndex(SDL_Joystick *joystick); + +/** + * Set the player index of an opened joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param player_index the player index to set. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC void SDLCALL SDL_JoystickSetPlayerIndex(SDL_Joystick *joystick, int player_index); + +/** + * Get the implementation-dependent GUID for the joystick. + * + * This function requires an open joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the GUID of the given joystick. If called on an invalid index, + * this function returns a zero GUID; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetDeviceGUID + * \sa SDL_JoystickGetGUIDString + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick *joystick); + +/** + * Get the USB vendor ID of an opened joystick, if available. + * + * If the vendor ID isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the USB vendor ID of the selected joystick, or 0 if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetVendor(SDL_Joystick *joystick); + +/** + * Get the USB product ID of an opened joystick, if available. + * + * If the product ID isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the USB product ID of the selected joystick, or 0 if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProduct(SDL_Joystick *joystick); + +/** + * Get the product version of an opened joystick, if available. + * + * If the product version isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the product version of the selected joystick, or 0 if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProductVersion(SDL_Joystick *joystick); + +/** + * Get the serial number of an opened joystick, if available. + * + * Returns the serial number of the joystick, or NULL if it is not available. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the serial number of the selected joystick, or NULL if + * unavailable. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC const char * SDLCALL SDL_JoystickGetSerial(SDL_Joystick *joystick); + +/** + * Get the type of an opened joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the SDL_JoystickType of the selected joystick. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetType(SDL_Joystick *joystick); + +/** + * Get an ASCII string representation for a given SDL_JoystickGUID. + * + * You should supply at least 33 bytes for pszGUID. + * + * \param guid the SDL_JoystickGUID you wish to convert to string + * \param pszGUID buffer in which to write the ASCII string + * \param cbGUID the size of pszGUID + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetDeviceGUID + * \sa SDL_JoystickGetGUID + * \sa SDL_JoystickGetGUIDFromString + */ +extern DECLSPEC void SDLCALL SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID); + +/** + * Convert a GUID string into a SDL_JoystickGUID structure. + * + * Performs no error checking. If this function is given a string containing + * an invalid GUID, the function will silently succeed, but the GUID generated + * will not be useful. + * + * \param pchGUID string containing an ASCII representation of a GUID + * \returns a SDL_JoystickGUID structure. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetGUIDString + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUIDFromString(const char *pchGUID); + +/** + * Get the status of a specified joystick. + * + * \param joystick the joystick to query + * \returns SDL_TRUE if the joystick has been opened, SDL_FALSE if it has not; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickClose + * \sa SDL_JoystickOpen + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAttached(SDL_Joystick *joystick); + +/** + * Get the instance ID of an opened joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the instance ID of the specified joystick on success or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickOpen + */ +extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickInstanceID(SDL_Joystick *joystick); + +/** + * Get the number of general axis controls on a joystick. + * + * Often, the directional pad on a game controller will either look like 4 + * separate buttons or a POV hat, and not axes, but all of this is up to the + * device and platform. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the number of axis controls/number of axes on success or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetAxis + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick *joystick); + +/** + * Get the number of trackballs on a joystick. + * + * Joystick trackballs have only relative motion events associated with them + * and their state cannot be polled. + * + * Most joysticks do not have trackballs. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the number of trackballs on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetBall + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick *joystick); + +/** + * Get the number of POV hats on a joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the number of POV hats on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetHat + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick *joystick); + +/** + * Get the number of buttons on a joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the number of buttons on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetButton + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick *joystick); + +/** + * Update the current state of the open joysticks. + * + * This is called automatically by the event loop if any joystick events are + * enabled. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickEventState + */ +extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); + +/** + * Enable/disable joystick event polling. + * + * If joystick events are disabled, you must call SDL_JoystickUpdate() + * yourself and manually check the state of the joystick when you want + * joystick information. + * + * It is recommended that you leave joystick event handling enabled. + * + * **WARNING**: Calling this function may delete all events currently in SDL's + * event queue. + * + * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` + * \returns 1 if enabled, 0 if disabled, or a negative error code on failure; + * call SDL_GetError() for more information. + * + * If `state` is `SDL_QUERY` then the current state is returned, + * otherwise the new processing state is returned. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerEventState + */ +extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); + +#define SDL_JOYSTICK_AXIS_MAX 32767 +#define SDL_JOYSTICK_AXIS_MIN -32768 + +/** + * Get the current state of an axis control on a joystick. + * + * SDL makes no promises about what part of the joystick any given axis refers + * to. Your game should have some sort of configuration UI to let users + * specify what each axis should be bound to. Alternately, SDL's higher-level + * Game Controller API makes a great effort to apply order to this lower-level + * interface, so you know that a specific axis is the "left thumb stick," etc. + * + * The value returned by SDL_JoystickGetAxis() is a signed integer (-32768 to + * 32767) representing the current position of the axis. It may be necessary + * to impose certain tolerances on these values to account for jitter. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \param axis the axis to query; the axis indices start at index 0 + * \returns a 16-bit signed integer representing the current position of the + * axis or 0 on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumAxes + */ +extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick *joystick, + int axis); + +/** + * Get the initial state of an axis control on a joystick. + * + * The state is a value ranging from -32768 to 32767. + * + * The axis indices start at index 0. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \param axis the axis to query; the axis indices start at index 0 + * \param state Upon return, the initial value is supplied here. + * \return SDL_TRUE if this axis has any initial value, or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAxisInitialState(SDL_Joystick *joystick, + int axis, Sint16 *state); + +/** + * \name Hat positions + */ +/* @{ */ +#define SDL_HAT_CENTERED 0x00 +#define SDL_HAT_UP 0x01 +#define SDL_HAT_RIGHT 0x02 +#define SDL_HAT_DOWN 0x04 +#define SDL_HAT_LEFT 0x08 +#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP) +#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) +#define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) +#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) +/* @} */ + +/** + * Get the current state of a POV hat on a joystick. + * + * The returned value will be one of the following positions: + * + * - `SDL_HAT_CENTERED` + * - `SDL_HAT_UP` + * - `SDL_HAT_RIGHT` + * - `SDL_HAT_DOWN` + * - `SDL_HAT_LEFT` + * - `SDL_HAT_RIGHTUP` + * - `SDL_HAT_RIGHTDOWN` + * - `SDL_HAT_LEFTUP` + * - `SDL_HAT_LEFTDOWN` + * + * \param joystick an SDL_Joystick structure containing joystick information + * \param hat the hat index to get the state from; indices start at index 0 + * \returns the current hat position. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumHats + */ +extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick *joystick, + int hat); + +/** + * Get the ball axis change since the last poll. + * + * Trackballs can only return relative motion since the last call to + * SDL_JoystickGetBall(), these motion deltas are placed into `dx` and `dy`. + * + * Most joysticks do not have trackballs. + * + * \param joystick the SDL_Joystick to query + * \param ball the ball index to query; ball indices start at index 0 + * \param dx stores the difference in the x axis position since the last poll + * \param dy stores the difference in the y axis position since the last poll + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumBalls + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick *joystick, + int ball, int *dx, int *dy); + +/** + * Get the current state of a button on a joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \param button the button index to get the state from; indices start at + * index 0 + * \returns 1 if the specified button is pressed, 0 otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumButtons + */ +extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick *joystick, + int button); + +/** + * Start a rumble effect. + * + * Each call to this function cancels any previous rumble effect, and calling + * it with 0 intensity stops any rumbling. + * + * \param joystick The joystick to vibrate + * \param low_frequency_rumble The intensity of the low frequency (left) + * rumble motor, from 0 to 0xFFFF + * \param high_frequency_rumble The intensity of the high frequency (right) + * rumble motor, from 0 to 0xFFFF + * \param duration_ms The duration of the rumble effect, in milliseconds + * \returns 0, or -1 if rumble isn't supported on this joystick + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_JoystickHasRumble + */ +extern DECLSPEC int SDLCALL SDL_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); + +/** + * Start a rumble effect in the joystick's triggers + * + * Each call to this function cancels any previous trigger rumble effect, and + * calling it with 0 intensity stops any rumbling. + * + * Note that this is rumbling of the _triggers_ and not the game controller as + * a whole. This is currently only supported on Xbox One controllers. If you + * want the (more common) whole-controller rumble, use SDL_JoystickRumble() + * instead. + * + * \param joystick The joystick to vibrate + * \param left_rumble The intensity of the left trigger rumble motor, from 0 + * to 0xFFFF + * \param right_rumble The intensity of the right trigger rumble motor, from 0 + * to 0xFFFF + * \param duration_ms The duration of the rumble effect, in milliseconds + * \returns 0, or -1 if trigger rumble isn't supported on this joystick + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_JoystickHasRumbleTriggers + */ +extern DECLSPEC int SDLCALL SDL_JoystickRumbleTriggers(SDL_Joystick *joystick, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms); + +/** + * Query whether a joystick has an LED. + * + * An example of a joystick LED is the light on the back of a PlayStation 4's + * DualShock 4 controller. + * + * \param joystick The joystick to query + * \return SDL_TRUE if the joystick has a modifiable LED, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasLED(SDL_Joystick *joystick); + +/** + * Query whether a joystick has rumble support. + * + * \param joystick The joystick to query + * \return SDL_TRUE if the joystick has rumble, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_JoystickRumble + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumble(SDL_Joystick *joystick); + +/** + * Query whether a joystick has rumble support on triggers. + * + * \param joystick The joystick to query + * \return SDL_TRUE if the joystick has trigger rumble, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_JoystickRumbleTriggers + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumbleTriggers(SDL_Joystick *joystick); + +/** + * Update a joystick's LED color. + * + * An example of a joystick LED is the light on the back of a PlayStation 4's + * DualShock 4 controller. + * + * \param joystick The joystick to update + * \param red The intensity of the red LED + * \param green The intensity of the green LED + * \param blue The intensity of the blue LED + * \returns 0 on success, -1 if this joystick does not have a modifiable LED + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetLED(SDL_Joystick *joystick, Uint8 red, Uint8 green, Uint8 blue); + +/** + * Send a joystick specific effect packet + * + * \param joystick The joystick to affect + * \param data The data to send to the joystick + * \param size The size of the data to send to the joystick + * \returns 0, or -1 if this joystick or driver doesn't support effect packets + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSendEffect(SDL_Joystick *joystick, const void *data, int size); + +/** + * Close a joystick previously opened with SDL_JoystickOpen(). + * + * \param joystick The joystick device to close + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickOpen + */ +extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick *joystick); + +/** + * Get the battery level of a joystick as SDL_JoystickPowerLevel. + * + * \param joystick the SDL_Joystick to query + * \returns the current battery level as SDL_JoystickPowerLevel on success or + * `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC SDL_JoystickPowerLevel SDLCALL SDL_JoystickCurrentPowerLevel(SDL_Joystick *joystick); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_joystick_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_keyboard.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_keyboard.h new file mode 100644 index 00000000000..48608cb6a79 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_keyboard.h @@ -0,0 +1,337 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_keyboard.h + * + * Include file for SDL keyboard event handling + */ + +#ifndef SDL_keyboard_h_ +#define SDL_keyboard_h_ + +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The SDL keysym structure, used in key events. + * + * \note If you are looking for translated character input, see the ::SDL_TEXTINPUT event. + */ +typedef struct SDL_Keysym +{ + SDL_Scancode scancode; /**< SDL physical key code - see ::SDL_Scancode for details */ + SDL_Keycode sym; /**< SDL virtual key code - see ::SDL_Keycode for details */ + Uint16 mod; /**< current key modifiers */ + Uint32 unused; +} SDL_Keysym; + +/* Function prototypes */ + +/** + * Query the window which currently has keyboard focus. + * + * \returns the window with keyboard focus. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void); + +/** + * Get a snapshot of the current state of the keyboard. + * + * The pointer returned is a pointer to an internal SDL array. It will be + * valid for the whole lifetime of the application and should not be freed by + * the caller. + * + * A array element with a value of 1 means that the key is pressed and a value + * of 0 means that it is not. Indexes into this array are obtained by using + * SDL_Scancode values. + * + * Use SDL_PumpEvents() to update the state array. + * + * This function gives you the current state after all events have been + * processed, so if a key or button has been pressed and released before you + * process events, then the pressed state will never show up in the + * SDL_GetKeyboardState() calls. + * + * Note: This function doesn't take into account whether shift has been + * pressed or not. + * + * \param numkeys if non-NULL, receives the length of the returned array + * \returns a pointer to an array of key states. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PumpEvents + */ +extern DECLSPEC const Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys); + +/** + * Get the current key modifier state for the keyboard. + * + * \returns an OR'd combination of the modifier keys for the keyboard. See + * SDL_Keymod for details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyboardState + * \sa SDL_SetModState + */ +extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void); + +/** + * Set the current key modifier state for the keyboard. + * + * The inverse of SDL_GetModState(), SDL_SetModState() allows you to impose + * modifier key states on your application. Simply pass your desired modifier + * states into `modstate`. This value may be a bitwise, OR'd combination of + * SDL_Keymod values. + * + * This does not change the keyboard state, only the key modifier flags that + * SDL reports. + * + * \param modstate the desired SDL_Keymod for the keyboard + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetModState + */ +extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate); + +/** + * Get the key code corresponding to the given scancode according to the + * current keyboard layout. + * + * See SDL_Keycode for details. + * + * \param scancode the desired SDL_Scancode to query + * \returns the SDL_Keycode that corresponds to the given SDL_Scancode. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyName + * \sa SDL_GetScancodeFromKey + */ +extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode); + +/** + * Get the scancode corresponding to the given key code according to the + * current keyboard layout. + * + * See SDL_Scancode for details. + * + * \param key the desired SDL_Keycode to query + * \returns the SDL_Scancode that corresponds to the given SDL_Keycode. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromScancode + * \sa SDL_GetScancodeName + */ +extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key); + +/** + * Get a human-readable name for a scancode. + * + * See SDL_Scancode for details. + * + * **Warning**: The returned name is by design not stable across platforms, + * e.g. the name for `SDL_SCANCODE_LGUI` is "Left GUI" under Linux but "Left + * Windows" under Microsoft Windows, and some scancodes like + * `SDL_SCANCODE_NONUSBACKSLASH` don't have any name at all. There are even + * scancodes that share names, e.g. `SDL_SCANCODE_RETURN` and + * `SDL_SCANCODE_RETURN2` (both called "Return"). This function is therefore + * unsuitable for creating a stable cross-platform two-way mapping between + * strings and scancodes. + * + * \param scancode the desired SDL_Scancode to query + * \returns a pointer to the name for the scancode. If the scancode doesn't + * have a name this function returns an empty string (""). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetScancodeFromKey + * \sa SDL_GetScancodeFromName + */ +extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode); + +/** + * Get a scancode from a human-readable name. + * + * \param name the human-readable scancode name + * \returns the SDL_Scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't + * recognized; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromName + * \sa SDL_GetScancodeFromKey + * \sa SDL_GetScancodeName + */ +extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name); + +/** + * Get a human-readable name for a key. + * + * See SDL_Scancode and SDL_Keycode for details. + * + * \param key the desired SDL_Keycode to query + * \returns a pointer to a UTF-8 string that stays valid at least until the + * next call to this function. If you need it around any longer, you + * must copy it. If the key doesn't have a name, this function + * returns an empty string (""). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromName + * \sa SDL_GetKeyFromScancode + * \sa SDL_GetScancodeFromKey + */ +extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key); + +/** + * Get a key code from a human-readable name. + * + * \param name the human-readable key name + * \returns key code, or `SDLK_UNKNOWN` if the name wasn't recognized; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromScancode + * \sa SDL_GetKeyName + * \sa SDL_GetScancodeFromName + */ +extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name); + +/** + * Start accepting Unicode text input events. + * + * This function will start accepting Unicode text input events in the focused + * SDL window, and start emitting SDL_TextInputEvent (SDL_TEXTINPUT) and + * SDL_TextEditingEvent (SDL_TEXTEDITING) events. Please use this function in + * pair with SDL_StopTextInput(). + * + * On some platforms using this function activates the screen keyboard. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetTextInputRect + * \sa SDL_StopTextInput + */ +extern DECLSPEC void SDLCALL SDL_StartTextInput(void); + +/** + * Check whether or not Unicode text input events are enabled. + * + * \returns SDL_TRUE if text input events are enabled else SDL_FALSE. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputActive(void); + +/** + * Stop receiving any text input events. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + */ +extern DECLSPEC void SDLCALL SDL_StopTextInput(void); + +/** + * Dismiss the composition window/IME without disabling the subsystem. + * + * \since This function is available since SDL 2.0.22. + * + * \sa SDL_StartTextInput + * \sa SDL_StopTextInput + */ +extern DECLSPEC void SDLCALL SDL_ClearComposition(void); + +/** + * Returns if an IME Composite or Candidate window is currently shown. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputShown(void); + +/** + * Set the rectangle used to type Unicode text inputs. + * + * Note: If you want use system native IME window, try to set hint + * **SDL_HINT_IME_SHOW_UI** to **1**, otherwise this function won't give you + * any feedback. + * + * \param rect the SDL_Rect structure representing the rectangle to receive + * text (ignored if NULL) + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + */ +extern DECLSPEC void SDLCALL SDL_SetTextInputRect(SDL_Rect *rect); + +/** + * Check whether the platform has screen keyboard support. + * + * \returns SDL_TRUE if the platform has some screen keyboard support or + * SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + * \sa SDL_IsScreenKeyboardShown + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void); + +/** + * Check whether the screen keyboard is shown for given window. + * + * \param window the window for which screen keyboard should be queried + * \returns SDL_TRUE if screen keyboard is shown or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasScreenKeyboardSupport + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenKeyboardShown(SDL_Window *window); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_keyboard_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_keycode.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_keycode.h new file mode 100644 index 00000000000..9cdf0ebfcb5 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_keycode.h @@ -0,0 +1,353 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_keycode.h + * + * Defines constants which identify keyboard keys and modifiers. + */ + +#ifndef SDL_keycode_h_ +#define SDL_keycode_h_ + +#include +#include + +/** + * \brief The SDL virtual key representation. + * + * Values of this type are used to represent keyboard keys using the current + * layout of the keyboard. These values include Unicode values representing + * the unmodified character that would be generated by pressing the key, or + * an SDLK_* constant for those keys that do not generate characters. + * + * A special exception is the number keys at the top of the keyboard which + * always map to SDLK_0...SDLK_9, regardless of layout. + */ +typedef Sint32 SDL_Keycode; + +#define SDLK_SCANCODE_MASK (1<<30) +#define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK) + +typedef enum +{ + SDLK_UNKNOWN = 0, + + SDLK_RETURN = '\r', + SDLK_ESCAPE = '\x1B', + SDLK_BACKSPACE = '\b', + SDLK_TAB = '\t', + SDLK_SPACE = ' ', + SDLK_EXCLAIM = '!', + SDLK_QUOTEDBL = '"', + SDLK_HASH = '#', + SDLK_PERCENT = '%', + SDLK_DOLLAR = '$', + SDLK_AMPERSAND = '&', + SDLK_QUOTE = '\'', + SDLK_LEFTPAREN = '(', + SDLK_RIGHTPAREN = ')', + SDLK_ASTERISK = '*', + SDLK_PLUS = '+', + SDLK_COMMA = ',', + SDLK_MINUS = '-', + SDLK_PERIOD = '.', + SDLK_SLASH = '/', + SDLK_0 = '0', + SDLK_1 = '1', + SDLK_2 = '2', + SDLK_3 = '3', + SDLK_4 = '4', + SDLK_5 = '5', + SDLK_6 = '6', + SDLK_7 = '7', + SDLK_8 = '8', + SDLK_9 = '9', + SDLK_COLON = ':', + SDLK_SEMICOLON = ';', + SDLK_LESS = '<', + SDLK_EQUALS = '=', + SDLK_GREATER = '>', + SDLK_QUESTION = '?', + SDLK_AT = '@', + + /* + Skip uppercase letters + */ + + SDLK_LEFTBRACKET = '[', + SDLK_BACKSLASH = '\\', + SDLK_RIGHTBRACKET = ']', + SDLK_CARET = '^', + SDLK_UNDERSCORE = '_', + SDLK_BACKQUOTE = '`', + SDLK_a = 'a', + SDLK_b = 'b', + SDLK_c = 'c', + SDLK_d = 'd', + SDLK_e = 'e', + SDLK_f = 'f', + SDLK_g = 'g', + SDLK_h = 'h', + SDLK_i = 'i', + SDLK_j = 'j', + SDLK_k = 'k', + SDLK_l = 'l', + SDLK_m = 'm', + SDLK_n = 'n', + SDLK_o = 'o', + SDLK_p = 'p', + SDLK_q = 'q', + SDLK_r = 'r', + SDLK_s = 's', + SDLK_t = 't', + SDLK_u = 'u', + SDLK_v = 'v', + SDLK_w = 'w', + SDLK_x = 'x', + SDLK_y = 'y', + SDLK_z = 'z', + + SDLK_CAPSLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK), + + SDLK_F1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1), + SDLK_F2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2), + SDLK_F3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F3), + SDLK_F4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F4), + SDLK_F5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F5), + SDLK_F6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F6), + SDLK_F7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F7), + SDLK_F8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F8), + SDLK_F9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F9), + SDLK_F10 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F10), + SDLK_F11 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F11), + SDLK_F12 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F12), + + SDLK_PRINTSCREEN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRINTSCREEN), + SDLK_SCROLLLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SCROLLLOCK), + SDLK_PAUSE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAUSE), + SDLK_INSERT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT), + SDLK_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME), + SDLK_PAGEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP), + SDLK_DELETE = '\x7F', + SDLK_END = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END), + SDLK_PAGEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN), + SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT), + SDLK_LEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LEFT), + SDLK_DOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DOWN), + SDLK_UP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UP), + + SDLK_NUMLOCKCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_NUMLOCKCLEAR), + SDLK_KP_DIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DIVIDE), + SDLK_KP_MULTIPLY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MULTIPLY), + SDLK_KP_MINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MINUS), + SDLK_KP_PLUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUS), + SDLK_KP_ENTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_ENTER), + SDLK_KP_1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_1), + SDLK_KP_2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_2), + SDLK_KP_3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_3), + SDLK_KP_4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_4), + SDLK_KP_5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_5), + SDLK_KP_6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_6), + SDLK_KP_7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_7), + SDLK_KP_8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_8), + SDLK_KP_9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_9), + SDLK_KP_0 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_0), + SDLK_KP_PERIOD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERIOD), + + SDLK_APPLICATION = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APPLICATION), + SDLK_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_POWER), + SDLK_KP_EQUALS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALS), + SDLK_F13 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F13), + SDLK_F14 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F14), + SDLK_F15 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F15), + SDLK_F16 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F16), + SDLK_F17 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F17), + SDLK_F18 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F18), + SDLK_F19 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F19), + SDLK_F20 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F20), + SDLK_F21 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F21), + SDLK_F22 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F22), + SDLK_F23 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F23), + SDLK_F24 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F24), + SDLK_EXECUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXECUTE), + SDLK_HELP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HELP), + SDLK_MENU = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MENU), + SDLK_SELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SELECT), + SDLK_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_STOP), + SDLK_AGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AGAIN), + SDLK_UNDO = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UNDO), + SDLK_CUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CUT), + SDLK_COPY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COPY), + SDLK_PASTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PASTE), + SDLK_FIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FIND), + SDLK_MUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MUTE), + SDLK_VOLUMEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEUP), + SDLK_VOLUMEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEDOWN), + SDLK_KP_COMMA = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COMMA), + SDLK_KP_EQUALSAS400 = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALSAS400), + + SDLK_ALTERASE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ALTERASE), + SDLK_SYSREQ = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SYSREQ), + SDLK_CANCEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CANCEL), + SDLK_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEAR), + SDLK_PRIOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRIOR), + SDLK_RETURN2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RETURN2), + SDLK_SEPARATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SEPARATOR), + SDLK_OUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OUT), + SDLK_OPER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OPER), + SDLK_CLEARAGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEARAGAIN), + SDLK_CRSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CRSEL), + SDLK_EXSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXSEL), + + SDLK_KP_00 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00), + SDLK_KP_000 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000), + SDLK_THOUSANDSSEPARATOR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR), + SDLK_DECIMALSEPARATOR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR), + SDLK_CURRENCYUNIT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT), + SDLK_CURRENCYSUBUNIT = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT), + SDLK_KP_LEFTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN), + SDLK_KP_RIGHTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN), + SDLK_KP_LEFTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE), + SDLK_KP_RIGHTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE), + SDLK_KP_TAB = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB), + SDLK_KP_BACKSPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE), + SDLK_KP_A = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A), + SDLK_KP_B = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B), + SDLK_KP_C = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C), + SDLK_KP_D = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D), + SDLK_KP_E = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E), + SDLK_KP_F = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F), + SDLK_KP_XOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR), + SDLK_KP_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER), + SDLK_KP_PERCENT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT), + SDLK_KP_LESS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS), + SDLK_KP_GREATER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER), + SDLK_KP_AMPERSAND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND), + SDLK_KP_DBLAMPERSAND = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND), + SDLK_KP_VERTICALBAR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR), + SDLK_KP_DBLVERTICALBAR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR), + SDLK_KP_COLON = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON), + SDLK_KP_HASH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH), + SDLK_KP_SPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE), + SDLK_KP_AT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT), + SDLK_KP_EXCLAM = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM), + SDLK_KP_MEMSTORE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE), + SDLK_KP_MEMRECALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL), + SDLK_KP_MEMCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR), + SDLK_KP_MEMADD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD), + SDLK_KP_MEMSUBTRACT = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT), + SDLK_KP_MEMMULTIPLY = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY), + SDLK_KP_MEMDIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE), + SDLK_KP_PLUSMINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS), + SDLK_KP_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR), + SDLK_KP_CLEARENTRY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY), + SDLK_KP_BINARY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY), + SDLK_KP_OCTAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL), + SDLK_KP_DECIMAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL), + SDLK_KP_HEXADECIMAL = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL), + + SDLK_LCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL), + SDLK_LSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT), + SDLK_LALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT), + SDLK_LGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI), + SDLK_RCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL), + SDLK_RSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT), + SDLK_RALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT), + SDLK_RGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI), + + SDLK_MODE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE), + + SDLK_AUDIONEXT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIONEXT), + SDLK_AUDIOPREV = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPREV), + SDLK_AUDIOSTOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOSTOP), + SDLK_AUDIOPLAY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPLAY), + SDLK_AUDIOMUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOMUTE), + SDLK_MEDIASELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIASELECT), + SDLK_WWW = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WWW), + SDLK_MAIL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MAIL), + SDLK_CALCULATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALCULATOR), + SDLK_COMPUTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COMPUTER), + SDLK_AC_SEARCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH), + SDLK_AC_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME), + SDLK_AC_BACK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK), + SDLK_AC_FORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD), + SDLK_AC_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP), + SDLK_AC_REFRESH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH), + SDLK_AC_BOOKMARKS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS), + + SDLK_BRIGHTNESSDOWN = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSDOWN), + SDLK_BRIGHTNESSUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSUP), + SDLK_DISPLAYSWITCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DISPLAYSWITCH), + SDLK_KBDILLUMTOGGLE = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMTOGGLE), + SDLK_KBDILLUMDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN), + SDLK_KBDILLUMUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP), + SDLK_EJECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT), + SDLK_SLEEP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP), + SDLK_APP1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP1), + SDLK_APP2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP2), + + SDLK_AUDIOREWIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOREWIND), + SDLK_AUDIOFASTFORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOFASTFORWARD) +} SDL_KeyCode; + +/** + * \brief Enumeration of valid key mods (possibly OR'd together). + */ +typedef enum +{ + KMOD_NONE = 0x0000, + KMOD_LSHIFT = 0x0001, + KMOD_RSHIFT = 0x0002, + KMOD_LCTRL = 0x0040, + KMOD_RCTRL = 0x0080, + KMOD_LALT = 0x0100, + KMOD_RALT = 0x0200, + KMOD_LGUI = 0x0400, + KMOD_RGUI = 0x0800, + KMOD_NUM = 0x1000, + KMOD_CAPS = 0x2000, + KMOD_MODE = 0x4000, + KMOD_SCROLL = 0x8000, + + KMOD_CTRL = KMOD_LCTRL | KMOD_RCTRL, + KMOD_SHIFT = KMOD_LSHIFT | KMOD_RSHIFT, + KMOD_ALT = KMOD_LALT | KMOD_RALT, + KMOD_GUI = KMOD_LGUI | KMOD_RGUI, + + KMOD_RESERVED = KMOD_SCROLL /* This is for source-level compatibility with SDL 2.0.0. */ +} SDL_Keymod; + +#endif /* SDL_keycode_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_loadso.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_loadso.h new file mode 100644 index 00000000000..f1fc9cfae38 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_loadso.h @@ -0,0 +1,115 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_loadso.h + * + * System dependent library loading routines + * + * Some things to keep in mind: + * \li These functions only work on C function names. Other languages may + * have name mangling and intrinsic language support that varies from + * compiler to compiler. + * \li Make sure you declare your function pointers with the same calling + * convention as the actual library function. Your code will crash + * mysteriously if you do not do this. + * \li Avoid namespace collisions. If you load a symbol from the library, + * it is not defined whether or not it goes into the global symbol + * namespace for the application. If it does and it conflicts with + * symbols in your code or other shared libraries, you will not get + * the results you expect. :) + */ + +#ifndef SDL_loadso_h_ +#define SDL_loadso_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Dynamically load a shared object. + * + * \param sofile a system-dependent name of the object file + * \returns an opaque pointer to the object handle or NULL if there was an + * error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadFunction + * \sa SDL_UnloadObject + */ +extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile); + +/** + * Look up the address of the named function in a shared object. + * + * This function pointer is no longer valid after calling SDL_UnloadObject(). + * + * This function can only look up C function names. Other languages may have + * name mangling and intrinsic language support that varies from compiler to + * compiler. + * + * Make sure you declare your function pointers with the same calling + * convention as the actual library function. Your code will crash + * mysteriously if you do not do this. + * + * If the requested function doesn't exist, NULL is returned. + * + * \param handle a valid shared object handle returned by SDL_LoadObject() + * \param name the name of the function to look up + * \returns a pointer to the function or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadObject + * \sa SDL_UnloadObject + */ +extern DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, + const char *name); + +/** + * Unload a shared object from memory. + * + * \param handle a valid shared object handle returned by SDL_LoadObject() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadFunction + * \sa SDL_LoadObject + */ +extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_loadso_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_locale.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_locale.h new file mode 100644 index 00000000000..7d7a6ab4188 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_locale.h @@ -0,0 +1,103 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_locale.h + * + * Include file for SDL locale services + */ + +#ifndef _SDL_locale_h +#define _SDL_locale_h + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +extern "C" { +/* *INDENT-ON* */ +#endif + + +typedef struct SDL_Locale +{ + const char *language; /**< A language name, like "en" for English. */ + const char *country; /**< A country, like "US" for America. Can be NULL. */ +} SDL_Locale; + +/** + * Report the user's preferred locale. + * + * This returns an array of SDL_Locale structs, the final item zeroed out. + * When the caller is done with this array, it should call SDL_free() on the + * returned value; all the memory involved is allocated in a single block, so + * a single SDL_free() will suffice. + * + * Returned language strings are in the format xx, where 'xx' is an ISO-639 + * language specifier (such as "en" for English, "de" for German, etc). + * Country strings are in the format YY, where "YY" is an ISO-3166 country + * code (such as "US" for the United States, "CA" for Canada, etc). Country + * might be NULL if there's no specific guidance on them (so you might get { + * "en", "US" } for American English, but { "en", NULL } means "English + * language, generically"). Language strings are never NULL, except to + * terminate the array. + * + * Please note that not all of these strings are 2 characters; some are three + * or more. + * + * The returned list of locales are in the order of the user's preference. For + * example, a German citizen that is fluent in US English and knows enough + * Japanese to navigate around Tokyo might have a list like: { "de", "en_US", + * "jp", NULL }. Someone from England might prefer British English (where + * "color" is spelled "colour", etc), but will settle for anything like it: { + * "en_GB", "en", NULL }. + * + * This function returns NULL on error, including when the platform does not + * supply this information at all. + * + * This might be a "slow" call that has to query the operating system. It's + * best to ask for this once and save the results. However, this list can + * change, usually because the user has changed a system preference outside of + * your program; SDL will send an SDL_LOCALECHANGED event in this case, if + * possible, and you can call this function again to get an updated copy of + * preferred locales. + * + * \return array of locales, terminated with a locale with a NULL language + * field. Will return NULL on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_Locale * SDLCALL SDL_GetPreferredLocales(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +} +/* *INDENT-ON* */ +#endif +#include + +#endif /* _SDL_locale_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_log.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_log.h new file mode 100644 index 00000000000..312a596f1b9 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_log.h @@ -0,0 +1,404 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_log.h + * + * Simple log messages with categories and priorities. + * + * By default logs are quiet, but if you're debugging SDL you might want: + * + * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); + * + * Here's where the messages go on different platforms: + * Windows: debug output stream + * Android: log output + * Others: standard error output (stderr) + */ + +#ifndef SDL_log_h_ +#define SDL_log_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * \brief The maximum size of a log message + * + * Messages longer than the maximum size will be truncated + */ +#define SDL_MAX_LOG_MESSAGE 4096 + +/** + * \brief The predefined log categories + * + * By default the application category is enabled at the INFO level, + * the assert category is enabled at the WARN level, test is enabled + * at the VERBOSE level and all other categories are enabled at the + * CRITICAL level. + */ +typedef enum +{ + SDL_LOG_CATEGORY_APPLICATION, + SDL_LOG_CATEGORY_ERROR, + SDL_LOG_CATEGORY_ASSERT, + SDL_LOG_CATEGORY_SYSTEM, + SDL_LOG_CATEGORY_AUDIO, + SDL_LOG_CATEGORY_VIDEO, + SDL_LOG_CATEGORY_RENDER, + SDL_LOG_CATEGORY_INPUT, + SDL_LOG_CATEGORY_TEST, + + /* Reserved for future SDL library use */ + SDL_LOG_CATEGORY_RESERVED1, + SDL_LOG_CATEGORY_RESERVED2, + SDL_LOG_CATEGORY_RESERVED3, + SDL_LOG_CATEGORY_RESERVED4, + SDL_LOG_CATEGORY_RESERVED5, + SDL_LOG_CATEGORY_RESERVED6, + SDL_LOG_CATEGORY_RESERVED7, + SDL_LOG_CATEGORY_RESERVED8, + SDL_LOG_CATEGORY_RESERVED9, + SDL_LOG_CATEGORY_RESERVED10, + + /* Beyond this point is reserved for application use, e.g. + enum { + MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM, + MYAPP_CATEGORY_AWESOME2, + MYAPP_CATEGORY_AWESOME3, + ... + }; + */ + SDL_LOG_CATEGORY_CUSTOM +} SDL_LogCategory; + +/** + * \brief The predefined log priorities + */ +typedef enum +{ + SDL_LOG_PRIORITY_VERBOSE = 1, + SDL_LOG_PRIORITY_DEBUG, + SDL_LOG_PRIORITY_INFO, + SDL_LOG_PRIORITY_WARN, + SDL_LOG_PRIORITY_ERROR, + SDL_LOG_PRIORITY_CRITICAL, + SDL_NUM_LOG_PRIORITIES +} SDL_LogPriority; + + +/** + * Set the priority of all log categories. + * + * \param priority the SDL_LogPriority to assign + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetPriority + */ +extern DECLSPEC void SDLCALL SDL_LogSetAllPriority(SDL_LogPriority priority); + +/** + * Set the priority of a particular log category. + * + * \param category the category to assign a priority to + * \param priority the SDL_LogPriority to assign + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogGetPriority + * \sa SDL_LogSetAllPriority + */ +extern DECLSPEC void SDLCALL SDL_LogSetPriority(int category, + SDL_LogPriority priority); + +/** + * Get the priority of a particular log category. + * + * \param category the category to query + * \returns the SDL_LogPriority for the requested category + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetPriority + */ +extern DECLSPEC SDL_LogPriority SDLCALL SDL_LogGetPriority(int category); + +/** + * Reset all priorities to default. + * + * This is called by SDL_Quit(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetAllPriority + * \sa SDL_LogSetPriority + */ +extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void); + +/** + * Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO. + * + * = * \param fmt a printf() style message format string + * + * \param ... additional parameters matching % tokens in the `fmt` string, if + * any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); + +/** + * Log a message with SDL_LOG_PRIORITY_VERBOSE. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_DEBUG. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_INFO. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_WARN. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + */ +extern DECLSPEC void SDLCALL SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_ERROR. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_CRITICAL. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with the specified category and priority. + * + * \param category the category of the message + * \param priority the priority of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogMessage(int category, + SDL_LogPriority priority, + SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3); + +/** + * Log a message with the specified category and priority. + * + * \param category the category of the message + * \param priority the priority of the message + * \param fmt a printf() style message format string + * \param ap a variable argument list + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogMessageV(int category, + SDL_LogPriority priority, + const char *fmt, va_list ap); + +/** + * The prototype for the log output callback function. + * + * This function is called by SDL when there is new text to be logged. + * + * \param userdata what was passed as `userdata` to SDL_LogSetOutputFunction() + * \param category the category of the message + * \param priority the priority of the message + * \param message the message being output + */ +typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message); + +/** + * Get the current log output function. + * + * \param callback an SDL_LogOutputFunction filled in with the current log + * callback + * \param userdata a pointer filled in with the pointer that is passed to + * `callback` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetOutputFunction + */ +extern DECLSPEC void SDLCALL SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata); + +/** + * Replace the default log output function with one of your own. + * + * \param callback an SDL_LogOutputFunction to call instead of the default + * \param userdata a pointer that is passed to `callback` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogGetOutputFunction + */ +extern DECLSPEC void SDLCALL SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_log_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_main.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_main.h new file mode 100644 index 00000000000..233bb176e0c --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_main.h @@ -0,0 +1,235 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_main_h_ +#define SDL_main_h_ + +#include + +/** + * \file SDL_main.h + * + * Redefine main() on some platforms so that it is called by SDL. + */ + +#ifndef SDL_MAIN_HANDLED +#if defined(__WIN32__) +/* On Windows SDL provides WinMain(), which parses the command line and passes + the arguments to your main function. + + If you provide your own WinMain(), you may define SDL_MAIN_HANDLED + */ +#define SDL_MAIN_AVAILABLE + +#elif defined(__WINRT__) +/* On WinRT, SDL provides a main function that initializes CoreApplication, + creating an instance of IFrameworkView in the process. + + Please note that #include'ing SDL_main.h is not enough to get a main() + function working. In non-XAML apps, the file, + src/main/winrt/SDL_WinRT_main_NonXAML.cpp, or a copy of it, must be compiled + into the app itself. In XAML apps, the function, SDL_WinRTRunApp must be + called, with a pointer to the Direct3D-hosted XAML control passed in. +*/ +#define SDL_MAIN_NEEDED + +#elif defined(__IPHONEOS__) +/* On iOS SDL provides a main function that creates an application delegate + and starts the iOS application run loop. + + If you link with SDL dynamically on iOS, the main function can't be in a + shared library, so you need to link with libSDLmain.a, which includes a + stub main function that calls into the shared library to start execution. + + See src/video/uikit/SDL_uikitappdelegate.m for more details. + */ +#define SDL_MAIN_NEEDED + +#elif defined(__ANDROID__) +/* On Android SDL provides a Java class in SDLActivity.java that is the + main activity entry point. + + See docs/README-android.md for more details on extending that class. + */ +#define SDL_MAIN_NEEDED + +/* We need to export SDL_main so it can be launched from Java */ +#define SDLMAIN_DECLSPEC DECLSPEC + +#elif defined(__NACL__) +/* On NACL we use ppapi_simple to set up the application helper code, + then wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before + starting the user main function. + All user code is run in a separate thread by ppapi_simple, thus + allowing for blocking io to take place via nacl_io +*/ +#define SDL_MAIN_NEEDED + +#elif defined(__PSP__) +/* On PSP SDL provides a main function that sets the module info, + activates the GPU and starts the thread required to be able to exit + the software. + + If you provide this yourself, you may define SDL_MAIN_HANDLED + */ +#define SDL_MAIN_AVAILABLE + +#endif +#endif /* SDL_MAIN_HANDLED */ + +#ifndef SDLMAIN_DECLSPEC +#define SDLMAIN_DECLSPEC +#endif + +/** + * \file SDL_main.h + * + * The application's main() function must be called with C linkage, + * and should be declared like this: + * \code + * #ifdef __cplusplus + * extern "C" + * #endif + * int main(int argc, char *argv[]) + * { + * } + * \endcode + */ + +#if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) +#define main SDL_main +#endif + +#include +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The prototype for the application's main() function + */ +typedef int (*SDL_main_func)(int argc, char *argv[]); +extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]); + + +/** + * Circumvent failure of SDL_Init() when not using SDL_main() as an entry + * point. + * + * This function is defined in SDL_main.h, along with the preprocessor rule to + * redefine main() as SDL_main(). Thus to ensure that your main() function + * will not be changed it is necessary to define SDL_MAIN_HANDLED before + * including SDL.h. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + */ +extern DECLSPEC void SDLCALL SDL_SetMainReady(void); + +#ifdef __WIN32__ + +/** + * Register a win32 window class for SDL's use. + * + * This can be called to set the application window class at startup. It is + * safe to call this multiple times, as long as every call is eventually + * paired with a call to SDL_UnregisterApp, but a second registration attempt + * while a previous registration is still active will be ignored, other than + * to increment a counter. + * + * Most applications do not need to, and should not, call this directly; SDL + * will call it when initializing the video subsystem. + * + * \param name the window class name, in UTF-8 encoding. If NULL, SDL + * currently uses "SDL_app" but this isn't guaranteed. + * \param style the value to use in WNDCLASSEX::style. If `name` is NULL, SDL + * currently uses `(CS_BYTEALIGNCLIENT | CS_OWNDC)` regardless of + * what is specified here. + * \param hInst the HINSTANCE to use in WNDCLASSEX::hInstance. If zero, SDL + * will use `GetModuleHandle(NULL)` instead. + * \returns 0 on success, -1 on error. SDL_GetError() may have details. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC int SDLCALL SDL_RegisterApp(const char *name, Uint32 style, void *hInst); + +/** + * Deregister the win32 window class from an SDL_RegisterApp call. + * + * This can be called to undo the effects of SDL_RegisterApp. + * + * Most applications do not need to, and should not, call this directly; SDL + * will call it when deinitializing the video subsystem. + * + * It is safe to call this multiple times, as long as every call is eventually + * paired with a prior call to SDL_RegisterApp. The window class will only be + * deregistered when the registration counter in SDL_RegisterApp decrements to + * zero through calls to this function. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); + +#endif /* __WIN32__ */ + + +#ifdef __WINRT__ + +/** + * Initialize and launch an SDL/WinRT application. + * + * \param mainFunction the SDL app's C-style main(), an SDL_main_func + * \param reserved reserved for future use; should be NULL + * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve + * more information on the failure. + * + * \since This function is available since SDL 2.0.3. + */ +extern DECLSPEC int SDLCALL SDL_WinRTRunApp(SDL_main_func mainFunction, void * reserved); + +#endif /* __WINRT__ */ + +#if defined(__IPHONEOS__) + +/** + * Initializes and launches an SDL application. + * + * \param argc The argc parameter from the application's main() function + * \param argv The argv parameter from the application's main() function + * \param mainFunction The SDL app's C-style main(), an SDL_main_func + * \return the return value from mainFunction + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_UIKitRunApp(int argc, char *argv[], SDL_main_func mainFunction); + +#endif /* __IPHONEOS__ */ + + +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_main_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_messagebox.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_messagebox.h new file mode 100644 index 00000000000..149c35cfefe --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_messagebox.h @@ -0,0 +1,193 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_messagebox_h_ +#define SDL_messagebox_h_ + +#include +#include /* For SDL_Window */ + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * SDL_MessageBox flags. If supported will display warning icon, etc. + */ +typedef enum +{ + SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */ + SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */ + SDL_MESSAGEBOX_INFORMATION = 0x00000040, /**< informational dialog */ + SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT = 0x00000080, /**< buttons placed left to right */ + SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT = 0x00000100 /**< buttons placed right to left */ +} SDL_MessageBoxFlags; + +/** + * Flags for SDL_MessageBoxButtonData. + */ +typedef enum +{ + SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001, /**< Marks the default button when return is hit */ + SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002 /**< Marks the default button when escape is hit */ +} SDL_MessageBoxButtonFlags; + +/** + * Individual button data. + */ +typedef struct +{ + Uint32 flags; /**< ::SDL_MessageBoxButtonFlags */ + int buttonid; /**< User defined button id (value returned via SDL_ShowMessageBox) */ + const char * text; /**< The UTF-8 button text */ +} SDL_MessageBoxButtonData; + +/** + * RGB value used in a message box color scheme + */ +typedef struct +{ + Uint8 r, g, b; +} SDL_MessageBoxColor; + +typedef enum +{ + SDL_MESSAGEBOX_COLOR_BACKGROUND, + SDL_MESSAGEBOX_COLOR_TEXT, + SDL_MESSAGEBOX_COLOR_BUTTON_BORDER, + SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND, + SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED, + SDL_MESSAGEBOX_COLOR_MAX +} SDL_MessageBoxColorType; + +/** + * A set of colors to use for message box dialogs + */ +typedef struct +{ + SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX]; +} SDL_MessageBoxColorScheme; + +/** + * MessageBox structure containing title, text, window, etc. + */ +typedef struct +{ + Uint32 flags; /**< ::SDL_MessageBoxFlags */ + SDL_Window *window; /**< Parent window, can be NULL */ + const char *title; /**< UTF-8 title */ + const char *message; /**< UTF-8 message text */ + + int numbuttons; + const SDL_MessageBoxButtonData *buttons; + + const SDL_MessageBoxColorScheme *colorScheme; /**< ::SDL_MessageBoxColorScheme, can be NULL to use system settings */ +} SDL_MessageBoxData; + +/** + * Create a modal message box. + * + * If your needs aren't complex, it might be easier to use + * SDL_ShowSimpleMessageBox. + * + * This function should be called on the thread that created the parent + * window, or on the main thread if the messagebox has no parent. It will + * block execution of that thread until the user clicks a button or closes the + * messagebox. + * + * This function may be called at any time, even before SDL_Init(). This makes + * it useful for reporting errors like a failure to create a renderer or + * OpenGL context. + * + * On X11, SDL rolls its own dialog box with X11 primitives instead of a + * formal toolkit like GTK+ or Qt. + * + * Note that if SDL_Init() would fail because there isn't any available video + * target, this function is likely to fail for the same reasons. If this is a + * concern, check the return value from this function and fall back to writing + * to stderr if you can. + * + * \param messageboxdata the SDL_MessageBoxData structure with title, text and + * other options + * \param buttonid the pointer to which user id of hit button should be copied + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ShowSimpleMessageBox + */ +extern DECLSPEC int SDLCALL SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); + +/** + * Display a simple modal message box. + * + * If your needs aren't complex, this function is preferred over + * SDL_ShowMessageBox. + * + * `flags` may be any of the following: + * + * - `SDL_MESSAGEBOX_ERROR`: error dialog + * - `SDL_MESSAGEBOX_WARNING`: warning dialog + * - `SDL_MESSAGEBOX_INFORMATION`: informational dialog + * + * This function should be called on the thread that created the parent + * window, or on the main thread if the messagebox has no parent. It will + * block execution of that thread until the user clicks a button or closes the + * messagebox. + * + * This function may be called at any time, even before SDL_Init(). This makes + * it useful for reporting errors like a failure to create a renderer or + * OpenGL context. + * + * On X11, SDL rolls its own dialog box with X11 primitives instead of a + * formal toolkit like GTK+ or Qt. + * + * Note that if SDL_Init() would fail because there isn't any available video + * target, this function is likely to fail for the same reasons. If this is a + * concern, check the return value from this function and fall back to writing + * to stderr if you can. + * + * \param flags an SDL_MessageBoxFlags value + * \param title UTF-8 title text + * \param message UTF-8 message text + * \param window the parent window, or NULL for no parent + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ShowMessageBox + */ +extern DECLSPEC int SDLCALL SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_messagebox_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_metal.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_metal.h new file mode 100644 index 00000000000..bd3091bdfeb --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_metal.h @@ -0,0 +1,113 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_metal.h + * + * Header file for functions to creating Metal layers and views on SDL windows. + */ + +#ifndef SDL_metal_h_ +#define SDL_metal_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS). + * + * \note This can be cast directly to an NSView or UIView. + */ +typedef void *SDL_MetalView; + +/** + * \name Metal support functions + */ +/* @{ */ + +/** + * Create a CAMetalLayer-backed NSView/UIView and attach it to the specified + * window. + * + * On macOS, this does *not* associate a MTLDevice with the CAMetalLayer on + * its own. It is up to user code to do that. + * + * The returned handle can be casted directly to a NSView or UIView. To access + * the backing CAMetalLayer, call SDL_Metal_GetLayer(). + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_Metal_DestroyView + * \sa SDL_Metal_GetLayer + */ +extern DECLSPEC SDL_MetalView SDLCALL SDL_Metal_CreateView(SDL_Window * window); + +/** + * Destroy an existing SDL_MetalView object. + * + * This should be called before SDL_DestroyWindow, if SDL_Metal_CreateView was + * called after SDL_CreateWindow. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_Metal_CreateView + */ +extern DECLSPEC void SDLCALL SDL_Metal_DestroyView(SDL_MetalView view); + +/** + * Get a pointer to the backing CAMetalLayer for the given view. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_MetalCreateView + */ +extern DECLSPEC void *SDLCALL SDL_Metal_GetLayer(SDL_MetalView view); + +/** + * Get the size of a window's underlying drawable in pixels (for use with + * setting viewport, scissor & etc). + * + * \param window SDL_Window from which the drawable size should be queried + * \param w Pointer to variable for storing the width in pixels, may be NULL + * \param h Pointer to variable for storing the height in pixels, may be NULL + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_GetWindowSize + * \sa SDL_CreateWindow + */ +extern DECLSPEC void SDLCALL SDL_Metal_GetDrawableSize(SDL_Window* window, int *w, + int *h); + +/* @} *//* Metal support functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_metal_h_ */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_misc.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_misc.h new file mode 100644 index 00000000000..8983ec05ad9 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_misc.h @@ -0,0 +1,79 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_misc.h + * + * \brief Include file for SDL API functions that don't fit elsewhere. + */ + +#ifndef SDL_misc_h_ +#define SDL_misc_h_ + +#include + +#include + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Open a URL/URI in the browser or other appropriate external application. + * + * Open a URL in a separate, system-provided application. How this works will + * vary wildly depending on the platform. This will likely launch what makes + * sense to handle a specific URL's protocol (a web browser for `http://`, + * etc), but it might also be able to launch file managers for directories and + * other things. + * + * What happens when you open a URL varies wildly as well: your game window + * may lose focus (and may or may not lose focus if your game was fullscreen + * or grabbing input at the time). On mobile devices, your app will likely + * move to the background or your process might be paused. Any given platform + * may or may not handle a given URL. + * + * If this is unimplemented (or simply unavailable) for a platform, this will + * fail with an error. A successful result does not mean the URL loaded, just + * that we launched _something_ to handle it (or at least believe we did). + * + * All this to say: this function can be useful, but you should definitely + * test it on every platform you target. + * + * \param url A valid URL/URI to open. Use `file:///full/path/to/file` for + * local files, if supported. + * \returns 0 on success, or -1 on error; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_OpenURL(const char *url); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_misc_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_mouse.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_mouse.h new file mode 100644 index 00000000000..0e359fec8a0 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_mouse.h @@ -0,0 +1,454 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_mouse.h + * + * Include file for SDL mouse event handling. + */ + +#ifndef SDL_mouse_h_ +#define SDL_mouse_h_ + +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct SDL_Cursor SDL_Cursor; /**< Implementation dependent */ + +/** + * \brief Cursor types for SDL_CreateSystemCursor(). + */ +typedef enum +{ + SDL_SYSTEM_CURSOR_ARROW, /**< Arrow */ + SDL_SYSTEM_CURSOR_IBEAM, /**< I-beam */ + SDL_SYSTEM_CURSOR_WAIT, /**< Wait */ + SDL_SYSTEM_CURSOR_CROSSHAIR, /**< Crosshair */ + SDL_SYSTEM_CURSOR_WAITARROW, /**< Small wait cursor (or Wait if not available) */ + SDL_SYSTEM_CURSOR_SIZENWSE, /**< Double arrow pointing northwest and southeast */ + SDL_SYSTEM_CURSOR_SIZENESW, /**< Double arrow pointing northeast and southwest */ + SDL_SYSTEM_CURSOR_SIZEWE, /**< Double arrow pointing west and east */ + SDL_SYSTEM_CURSOR_SIZENS, /**< Double arrow pointing north and south */ + SDL_SYSTEM_CURSOR_SIZEALL, /**< Four pointed arrow pointing north, south, east, and west */ + SDL_SYSTEM_CURSOR_NO, /**< Slashed circle or crossbones */ + SDL_SYSTEM_CURSOR_HAND, /**< Hand */ + SDL_NUM_SYSTEM_CURSORS +} SDL_SystemCursor; + +/** + * \brief Scroll direction types for the Scroll event + */ +typedef enum +{ + SDL_MOUSEWHEEL_NORMAL, /**< The scroll direction is normal */ + SDL_MOUSEWHEEL_FLIPPED /**< The scroll direction is flipped / natural */ +} SDL_MouseWheelDirection; + +/* Function prototypes */ + +/** + * Get the window which currently has mouse focus. + * + * \returns the window with mouse focus. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void); + +/** + * Retrieve the current state of the mouse. + * + * The current button state is returned as a button bitmask, which can be + * tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the + * left, 2 for middle, 3 for the right button), and `x` and `y` are set to the + * mouse cursor position relative to the focus window. You can pass NULL for + * either `x` or `y`. + * + * \param x the x coordinate of the mouse cursor position relative to the + * focus window + * \param y the y coordinate of the mouse cursor position relative to the + * focus window + * \returns a 32-bit button bitmask of the current button state. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetGlobalMouseState + * \sa SDL_GetRelativeMouseState + * \sa SDL_PumpEvents + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetMouseState(int *x, int *y); + +/** + * Get the current state of the mouse in relation to the desktop. + * + * This works similarly to SDL_GetMouseState(), but the coordinates will be + * reported relative to the top-left of the desktop. This can be useful if you + * need to track the mouse outside of a specific window and SDL_CaptureMouse() + * doesn't fit your needs. For example, it could be useful if you need to + * track the mouse while dragging a window, where coordinates relative to a + * window might not be in sync at all times. + * + * Note: SDL_GetMouseState() returns the mouse position as SDL understands it + * from the last pump of the event queue. This function, however, queries the + * OS for the current mouse position, and as such, might be a slightly less + * efficient function. Unless you know what you're doing and have a good + * reason to use this function, you probably want SDL_GetMouseState() instead. + * + * \param x filled in with the current X coord relative to the desktop; can be + * NULL + * \param y filled in with the current Y coord relative to the desktop; can be + * NULL + * \returns the current button state as a bitmask which can be tested using + * the SDL_BUTTON(X) macros. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_CaptureMouse + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetGlobalMouseState(int *x, int *y); + +/** + * Retrieve the relative state of the mouse. + * + * The current button state is returned as a button bitmask, which can be + * tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the + * left, 2 for middle, 3 for the right button), and `x` and `y` are set to the + * mouse deltas since the last call to SDL_GetRelativeMouseState() or since + * event initialization. You can pass NULL for either `x` or `y`. + * + * \param x a pointer filled with the last recorded x coordinate of the mouse + * \param y a pointer filled with the last recorded y coordinate of the mouse + * \returns a 32-bit button bitmask of the relative button state. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetMouseState + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); + +/** + * Move the mouse cursor to the given position within the window. + * + * This function generates a mouse motion event. + * + * Note that this function will appear to succeed, but not actually move the + * mouse when used over Microsoft Remote Desktop. + * + * \param window the window to move the mouse into, or NULL for the current + * mouse focus + * \param x the x coordinate within the window + * \param y the y coordinate within the window + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WarpMouseGlobal + */ +extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, + int x, int y); + +/** + * Move the mouse to the given position in global screen space. + * + * This function generates a mouse motion event. + * + * A failure of this function usually means that it is unsupported by a + * platform. + * + * Note that this function will appear to succeed, but not actually move the + * mouse when used over Microsoft Remote Desktop. + * + * \param x the x coordinate + * \param y the y coordinate + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_WarpMouseInWindow + */ +extern DECLSPEC int SDLCALL SDL_WarpMouseGlobal(int x, int y); + +/** + * Set relative mouse mode. + * + * While the mouse is in relative mode, the cursor is hidden, and the driver + * will try to report continuous motion in the current window. Only relative + * motion events will be delivered, the mouse position will not change. + * + * Note that this function will not be able to provide continuous relative + * motion when used over Microsoft Remote Desktop, instead motion is limited + * to the bounds of the screen. + * + * This function will flush any pending mouse motion. + * + * \param enabled SDL_TRUE to enable relative mode, SDL_FALSE to disable. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * If relative mode is not supported, this returns -1. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRelativeMouseMode + */ +extern DECLSPEC int SDLCALL SDL_SetRelativeMouseMode(SDL_bool enabled); + +/** + * Capture the mouse and to track input outside an SDL window. + * + * Capturing enables your app to obtain mouse events globally, instead of just + * within your window. Not all video targets support this function. When + * capturing is enabled, the current window will get all mouse events, but + * unlike relative mode, no change is made to the cursor and it is not + * restrained to your window. + * + * This function may also deny mouse input to other windows--both those in + * your application and others on the system--so you should use this function + * sparingly, and in small bursts. For example, you might want to track the + * mouse while the user is dragging something, until the user releases a mouse + * button. It is not recommended that you capture the mouse for long periods + * of time, such as the entire time your app is running. For that, you should + * probably use SDL_SetRelativeMouseMode() or SDL_SetWindowGrab(), depending + * on your goals. + * + * While captured, mouse events still report coordinates relative to the + * current (foreground) window, but those coordinates may be outside the + * bounds of the window (including negative values). Capturing is only allowed + * for the foreground window. If the window loses focus while capturing, the + * capture will be disabled automatically. + * + * While capturing is enabled, the current window will have the + * `SDL_WINDOW_MOUSE_CAPTURE` flag set. + * + * \param enabled SDL_TRUE to enable capturing, SDL_FALSE to disable. + * \returns 0 on success or -1 if not supported; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetGlobalMouseState + */ +extern DECLSPEC int SDLCALL SDL_CaptureMouse(SDL_bool enabled); + +/** + * Query whether relative mouse mode is enabled. + * + * \returns SDL_TRUE if relative mode is enabled or SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRelativeMouseMode + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetRelativeMouseMode(void); + +/** + * Create a cursor using the specified bitmap data and mask (in MSB format). + * + * `mask` has to be in MSB (Most Significant Bit) format. + * + * The cursor width (`w`) must be a multiple of 8 bits. + * + * The cursor is created in black and white according to the following: + * + * - data=0, mask=1: white + * - data=1, mask=1: black + * - data=0, mask=0: transparent + * - data=1, mask=0: inverted color if possible, black if not. + * + * Cursors created with this function must be freed with SDL_FreeCursor(). + * + * If you want to have a color cursor, or create your cursor from an + * SDL_Surface, you should use SDL_CreateColorCursor(). Alternately, you can + * hide the cursor and draw your own as part of your game's rendering, but it + * will be bound to the framerate. + * + * Also, since SDL 2.0.0, SDL_CreateSystemCursor() is available, which + * provides twelve readily available system cursors to pick from. + * + * \param data the color value for each pixel of the cursor + * \param mask the mask value for each pixel of the cursor + * \param w the width of the cursor + * \param h the height of the cursor + * \param hot_x the X-axis location of the upper left corner of the cursor + * relative to the actual mouse position + * \param hot_y the Y-axis location of the upper left corner of the cursor + * relative to the actual mouse position + * \returns a new cursor with the specified parameters on success or NULL on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeCursor + * \sa SDL_SetCursor + * \sa SDL_ShowCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateCursor(const Uint8 * data, + const Uint8 * mask, + int w, int h, int hot_x, + int hot_y); + +/** + * Create a color cursor. + * + * \param surface an SDL_Surface structure representing the cursor image + * \param hot_x the x position of the cursor hot spot + * \param hot_y the y position of the cursor hot spot + * \returns the new cursor on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateCursor + * \sa SDL_FreeCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateColorCursor(SDL_Surface *surface, + int hot_x, + int hot_y); + +/** + * Create a system cursor. + * + * \param id an SDL_SystemCursor enum value + * \returns a cursor on success or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateSystemCursor(SDL_SystemCursor id); + +/** + * Set the active cursor. + * + * This function sets the currently active cursor to the specified one. If the + * cursor is currently visible, the change will be immediately represented on + * the display. SDL_SetCursor(NULL) can be used to force cursor redraw, if + * this is desired for any reason. + * + * \param cursor a cursor to make active + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateCursor + * \sa SDL_GetCursor + * \sa SDL_ShowCursor + */ +extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor * cursor); + +/** + * Get the active cursor. + * + * This function returns a pointer to the current cursor which is owned by the + * library. It is not necessary to free the cursor with SDL_FreeCursor(). + * + * \returns the active cursor or NULL if there is no mouse. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetCursor(void); + +/** + * Get the default cursor. + * + * \returns the default cursor on success or NULL on failure. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSystemCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetDefaultCursor(void); + +/** + * Free a previously-created cursor. + * + * Use this function to free cursor resources created with SDL_CreateCursor(), + * SDL_CreateColorCursor() or SDL_CreateSystemCursor(). + * + * \param cursor the cursor to free + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateColorCursor + * \sa SDL_CreateCursor + * \sa SDL_CreateSystemCursor + */ +extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor * cursor); + +/** + * Toggle whether or not the cursor is shown. + * + * The cursor starts off displayed but can be turned off. Passing `SDL_ENABLE` + * displays the cursor and passing `SDL_DISABLE` hides it. + * + * The current state of the mouse cursor can be queried by passing + * `SDL_QUERY`; either `SDL_DISABLE` or `SDL_ENABLE` will be returned. + * + * \param toggle `SDL_ENABLE` to show the cursor, `SDL_DISABLE` to hide it, + * `SDL_QUERY` to query the current state without changing it. + * \returns `SDL_ENABLE` if the cursor is shown, or `SDL_DISABLE` if the + * cursor is hidden, or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateCursor + * \sa SDL_SetCursor + */ +extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); + +/** + * Used as a mask when testing buttons in buttonstate. + * + * - Button 1: Left mouse button + * - Button 2: Middle mouse button + * - Button 3: Right mouse button + */ +#define SDL_BUTTON(X) (1 << ((X)-1)) +#define SDL_BUTTON_LEFT 1 +#define SDL_BUTTON_MIDDLE 2 +#define SDL_BUTTON_RIGHT 3 +#define SDL_BUTTON_X1 4 +#define SDL_BUTTON_X2 5 +#define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) +#define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) +#define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) +#define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) +#define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_mouse_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_mutex.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_mutex.h new file mode 100644 index 00000000000..10038f1b70c --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_mutex.h @@ -0,0 +1,471 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_mutex_h_ +#define SDL_mutex_h_ + +/** + * \file SDL_mutex.h + * + * Functions to provide thread synchronization primitives. + */ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Synchronization functions which can time out return this value + * if they time out. + */ +#define SDL_MUTEX_TIMEDOUT 1 + +/** + * This is the timeout value which corresponds to never time out. + */ +#define SDL_MUTEX_MAXWAIT (~(Uint32)0) + + +/** + * \name Mutex functions + */ +/* @{ */ + +/* The SDL mutex structure, defined in SDL_sysmutex.c */ +struct SDL_mutex; +typedef struct SDL_mutex SDL_mutex; + +/** + * Create a new mutex. + * + * All newly-created mutexes begin in the _unlocked_ state. + * + * Calls to SDL_LockMutex() will not return while the mutex is locked by + * another thread. See SDL_TryLockMutex() to attempt to lock without blocking. + * + * SDL mutexes are reentrant. + * + * \returns the initialized and unlocked mutex or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroyMutex + * \sa SDL_LockMutex + * \sa SDL_TryLockMutex + * \sa SDL_UnlockMutex + */ +extern DECLSPEC SDL_mutex *SDLCALL SDL_CreateMutex(void); + +/** + * Lock the mutex. + * + * This will block until the mutex is available, which is to say it is in the + * unlocked state and the OS has chosen the caller as the next thread to lock + * it. Of all threads waiting to lock the mutex, only one may do so at a time. + * + * It is legal for the owning thread to lock an already-locked mutex. It must + * unlock it the same number of times before it is actually made available for + * other threads in the system (this is known as a "recursive mutex"). + * + * \param mutex the mutex to lock + * \return 0, or -1 on error. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_LockMutex(SDL_mutex * mutex); +#define SDL_mutexP(m) SDL_LockMutex(m) + +/** + * Try to lock a mutex without blocking. + * + * This works just like SDL_LockMutex(), but if the mutex is not available, + * this function returns `SDL_MUTEX_TIMEOUT` immediately. + * + * This technique is useful if you need exclusive access to a resource but + * don't want to wait for it, and will return to it to try again later. + * + * \param mutex the mutex to try to lock + * \returns 0, `SDL_MUTEX_TIMEDOUT`, or -1 on error; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateMutex + * \sa SDL_DestroyMutex + * \sa SDL_LockMutex + * \sa SDL_UnlockMutex + */ +extern DECLSPEC int SDLCALL SDL_TryLockMutex(SDL_mutex * mutex); + +/** + * Unlock the mutex. + * + * It is legal for the owning thread to lock an already-locked mutex. It must + * unlock it the same number of times before it is actually made available for + * other threads in the system (this is known as a "recursive mutex"). + * + * It is an error to unlock a mutex that has not been locked by the current + * thread, and doing so results in undefined behavior. + * + * It is also an error to unlock a mutex that isn't locked at all. + * + * \param mutex the mutex to unlock. + * \returns 0, or -1 on error. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_UnlockMutex(SDL_mutex * mutex); +#define SDL_mutexV(m) SDL_UnlockMutex(m) + +/** + * Destroy a mutex created with SDL_CreateMutex(). + * + * This function must be called on any mutex that is no longer needed. Failure + * to destroy a mutex will result in a system memory or resource leak. While + * it is safe to destroy a mutex that is _unlocked_, it is not safe to attempt + * to destroy a locked mutex, and may result in undefined behavior depending + * on the platform. + * + * \param mutex the mutex to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateMutex + * \sa SDL_LockMutex + * \sa SDL_TryLockMutex + * \sa SDL_UnlockMutex + */ +extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex * mutex); + +/* @} *//* Mutex functions */ + + +/** + * \name Semaphore functions + */ +/* @{ */ + +/* The SDL semaphore structure, defined in SDL_syssem.c */ +struct SDL_semaphore; +typedef struct SDL_semaphore SDL_sem; + +/** + * Create a semaphore. + * + * This function creates a new semaphore and initializes it with the value + * `initial_value`. Each wait operation on the semaphore will atomically + * decrement the semaphore value and potentially block if the semaphore value + * is 0. Each post operation will atomically increment the semaphore value and + * wake waiting threads and allow them to retry the wait operation. + * + * \param initial_value the starting value of the semaphore + * \returns a new semaphore or NULL on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC SDL_sem *SDLCALL SDL_CreateSemaphore(Uint32 initial_value); + +/** + * Destroy a semaphore. + * + * It is not safe to destroy a semaphore if there are threads currently + * waiting on it. + * + * \param sem the semaphore to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem * sem); + +/** + * Wait until a semaphore has a positive value and then decrements it. + * + * This function suspends the calling thread until either the semaphore + * pointed to by `sem` has a positive value or the call is interrupted by a + * signal or error. If the call is successful it will atomically decrement the + * semaphore value. + * + * This function is the equivalent of calling SDL_SemWaitTimeout() with a time + * length of `SDL_MUTEX_MAXWAIT`. + * + * \param sem the semaphore wait on + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem * sem); + +/** + * See if a semaphore has a positive value and decrement it if it does. + * + * This function checks to see if the semaphore pointed to by `sem` has a + * positive value and atomically decrements the semaphore value if it does. If + * the semaphore doesn't have a positive value, the function immediately + * returns SDL_MUTEX_TIMEDOUT. + * + * \param sem the semaphore to wait on + * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait would + * block, or a negative error code on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem * sem); + +/** + * Wait until a semaphore has a positive value and then decrements it. + * + * This function suspends the calling thread until either the semaphore + * pointed to by `sem` has a positive value, the call is interrupted by a + * signal or error, or the specified time has elapsed. If the call is + * successful it will atomically decrement the semaphore value. + * + * \param sem the semaphore to wait on + * \param ms the length of the timeout, in milliseconds + * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait does not + * succeed in the allotted time, or a negative error code on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + */ +extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem * sem, Uint32 ms); + +/** + * Atomically increment a semaphore's value and wake waiting threads. + * + * \param sem the semaphore to increment + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem * sem); + +/** + * Get the current value of a semaphore. + * + * \param sem the semaphore to query + * \returns the current value of the semaphore. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + */ +extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem * sem); + +/* @} *//* Semaphore functions */ + + +/** + * \name Condition variable functions + */ +/* @{ */ + +/* The SDL condition variable structure, defined in SDL_syscond.c */ +struct SDL_cond; +typedef struct SDL_cond SDL_cond; + +/** + * Create a condition variable. + * + * \returns a new condition variable or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_DestroyCond + */ +extern DECLSPEC SDL_cond *SDLCALL SDL_CreateCond(void); + +/** + * Destroy a condition variable. + * + * \param cond the condition variable to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + */ +extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond * cond); + +/** + * Restart one of the threads that are waiting on the condition variable. + * + * \param cond the condition variable to signal + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond * cond); + +/** + * Restart all threads that are waiting on the condition variable. + * + * \param cond the condition variable to signal + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond * cond); + +/** + * Wait until a condition variable is signaled. + * + * This function unlocks the specified `mutex` and waits for another thread to + * call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable + * `cond`. Once the condition variable is signaled, the mutex is re-locked and + * the function returns. + * + * The mutex must be locked before calling this function. + * + * This function is the equivalent of calling SDL_CondWaitTimeout() with a + * time length of `SDL_MUTEX_MAXWAIT`. + * + * \param cond the condition variable to wait on + * \param mutex the mutex used to coordinate thread access + * \returns 0 when it is signaled or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex); + +/** + * Wait until a condition variable is signaled or a certain time has passed. + * + * This function unlocks the specified `mutex` and waits for another thread to + * call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable + * `cond`, or for the specified time to elapse. Once the condition variable is + * signaled or the time elapsed, the mutex is re-locked and the function + * returns. + * + * The mutex must be locked before calling this function. + * + * \param cond the condition variable to wait on + * \param mutex the mutex used to coordinate thread access + * \param ms the maximum time to wait, in milliseconds, or `SDL_MUTEX_MAXWAIT` + * to wait indefinitely + * \returns 0 if the condition variable is signaled, `SDL_MUTEX_TIMEDOUT` if + * the condition is not signaled in the allotted time, or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond * cond, + SDL_mutex * mutex, Uint32 ms); + +/* @} *//* Condition variable functions */ + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_mutex_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_name.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_name.h new file mode 100644 index 00000000000..6ff35b46efe --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_name.h @@ -0,0 +1,33 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDLname_h_ +#define SDLname_h_ + +#if defined(__STDC__) || defined(__cplusplus) +#define NeedFunctionPrototypes 1 +#endif + +#define SDL_NAME(X) SDL_##X + +#endif /* SDLname_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengl.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengl.h new file mode 100644 index 00000000000..e9bcde82761 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengl.h @@ -0,0 +1,2183 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_opengl.h + * + * This is a simple file to encapsulate the OpenGL API headers. + */ + +/** + * \def NO_SDL_GLEXT + * + * Define this if you have your own version of glext.h and want to disable the + * version included in SDL_opengl.h. + */ + +#ifndef SDL_opengl_h_ +#define SDL_opengl_h_ + +#include + +#ifndef __IPHONEOS__ /* No OpenGL on iOS. */ + +/* + * Mesa 3-D graphics library + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * Copyright (C) 2009 VMware, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef __gl_h_ +#define __gl_h_ + +#if defined(USE_MGL_NAMESPACE) +#include +#endif + + +/********************************************************************** + * Begin system-specific stuff. + */ + +#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) +#define __WIN32__ +#endif + +#if defined(__WIN32__) && !defined(__CYGWIN__) +# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ +# define GLAPI __declspec(dllexport) +# elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ +# define GLAPI __declspec(dllimport) +# else /* for use with static link lib build of Win32 edition only */ +# define GLAPI extern +# endif /* _STATIC_MESA support */ +# if defined(__MINGW32__) && defined(GL_NO_STDCALL) || defined(UNDER_CE) /* The generated DLLs by MingW with STDCALL are not compatible with the ones done by Microsoft's compilers */ +# define GLAPIENTRY +# else +# define GLAPIENTRY __stdcall +# endif +#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ +# define GLAPI extern +# define GLAPIENTRY __stdcall +#elif defined(__OS2__) || defined(__EMX__) /* native os/2 opengl */ +# define GLAPI extern +# define GLAPIENTRY _System +# define APIENTRY _System +# if defined(__GNUC__) && !defined(_System) +# define _System +# endif +#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) +# define GLAPI __attribute__((visibility("default"))) +# define GLAPIENTRY +#endif /* WIN32 && !CYGWIN */ + +/* + * WINDOWS: Include windows.h here to define APIENTRY. + * It is also useful when applications include this file by + * including only glut.h, since glut.h depends on windows.h. + * Applications needing to include windows.h with parms other + * than "WIN32_LEAN_AND_MEAN" may include windows.h before + * glut.h or gl.h. + */ +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX +#endif +#include +#endif + +#ifndef GLAPI +#define GLAPI extern +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY +#endif + +#ifndef APIENTRY +#define APIENTRY GLAPIENTRY +#endif + +/* "P" suffix to be used for a pointer to a function */ +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif + +#ifndef GLAPIENTRYP +#define GLAPIENTRYP GLAPIENTRY * +#endif + +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export on +#endif + +/* + * End system-specific stuff. + **********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + + + +#define GL_VERSION_1_1 1 +#define GL_VERSION_1_2 1 +#define GL_VERSION_1_3 1 +#define GL_ARB_imaging 1 + + +/* + * Datatypes + */ +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef signed char GLbyte; /* 1-byte signed */ +typedef short GLshort; /* 2-byte signed */ +typedef int GLint; /* 4-byte signed */ +typedef unsigned char GLubyte; /* 1-byte unsigned */ +typedef unsigned short GLushort; /* 2-byte unsigned */ +typedef unsigned int GLuint; /* 4-byte unsigned */ +typedef int GLsizei; /* 4-byte signed */ +typedef float GLfloat; /* single precision float */ +typedef float GLclampf; /* single precision float in [0,1] */ +typedef double GLdouble; /* double precision float */ +typedef double GLclampd; /* double precision float in [0,1] */ + + + +/* + * Constants + */ + +/* Boolean values */ +#define GL_FALSE 0 +#define GL_TRUE 1 + +/* Data types */ +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_2_BYTES 0x1407 +#define GL_3_BYTES 0x1408 +#define GL_4_BYTES 0x1409 +#define GL_DOUBLE 0x140A + +/* Primitives */ +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_QUADS 0x0007 +#define GL_QUAD_STRIP 0x0008 +#define GL_POLYGON 0x0009 + +/* Vertex Arrays */ +#define GL_VERTEX_ARRAY 0x8074 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_COLOR_ARRAY 0x8076 +#define GL_INDEX_ARRAY 0x8077 +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_EDGE_FLAG_ARRAY 0x8079 +#define GL_VERTEX_ARRAY_SIZE 0x807A +#define GL_VERTEX_ARRAY_TYPE 0x807B +#define GL_VERTEX_ARRAY_STRIDE 0x807C +#define GL_NORMAL_ARRAY_TYPE 0x807E +#define GL_NORMAL_ARRAY_STRIDE 0x807F +#define GL_COLOR_ARRAY_SIZE 0x8081 +#define GL_COLOR_ARRAY_TYPE 0x8082 +#define GL_COLOR_ARRAY_STRIDE 0x8083 +#define GL_INDEX_ARRAY_TYPE 0x8085 +#define GL_INDEX_ARRAY_STRIDE 0x8086 +#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A +#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C +#define GL_VERTEX_ARRAY_POINTER 0x808E +#define GL_NORMAL_ARRAY_POINTER 0x808F +#define GL_COLOR_ARRAY_POINTER 0x8090 +#define GL_INDEX_ARRAY_POINTER 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 +#define GL_V2F 0x2A20 +#define GL_V3F 0x2A21 +#define GL_C4UB_V2F 0x2A22 +#define GL_C4UB_V3F 0x2A23 +#define GL_C3F_V3F 0x2A24 +#define GL_N3F_V3F 0x2A25 +#define GL_C4F_N3F_V3F 0x2A26 +#define GL_T2F_V3F 0x2A27 +#define GL_T4F_V4F 0x2A28 +#define GL_T2F_C4UB_V3F 0x2A29 +#define GL_T2F_C3F_V3F 0x2A2A +#define GL_T2F_N3F_V3F 0x2A2B +#define GL_T2F_C4F_N3F_V3F 0x2A2C +#define GL_T4F_C4F_N3F_V4F 0x2A2D + +/* Matrix Mode */ +#define GL_MATRIX_MODE 0x0BA0 +#define GL_MODELVIEW 0x1700 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 + +/* Points */ +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_POINT_SIZE_RANGE 0x0B12 + +/* Lines */ +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_WIDTH_RANGE 0x0B22 + +/* Polygons */ +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_EDGE_FLAG 0x0B43 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_FILL 0x8037 + +/* Display Lists */ +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_INDEX 0x0B33 +#define GL_LIST_MODE 0x0B30 + +/* Depth buffer */ +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_BITS 0x0D56 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_COMPONENT 0x1902 + +/* Lighting */ +#define GL_LIGHTING 0x0B50 +#define GL_LIGHT0 0x4000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_QUADRATIC_ATTENUATION 0x1209 +#define GL_AMBIENT 0x1200 +#define GL_DIFFUSE 0x1201 +#define GL_SPECULAR 0x1202 +#define GL_SHININESS 0x1601 +#define GL_EMISSION 0x1600 +#define GL_POSITION 0x1203 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_COLOR_INDEXES 0x1603 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_SHADE_MODEL 0x0B54 +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_NORMALIZE 0x0BA1 + +/* User clipping planes */ +#define GL_CLIP_PLANE0 0x3000 +#define GL_CLIP_PLANE1 0x3001 +#define GL_CLIP_PLANE2 0x3002 +#define GL_CLIP_PLANE3 0x3003 +#define GL_CLIP_PLANE4 0x3004 +#define GL_CLIP_PLANE5 0x3005 + +/* Accumulation buffer */ +#define GL_ACCUM_RED_BITS 0x0D58 +#define GL_ACCUM_GREEN_BITS 0x0D59 +#define GL_ACCUM_BLUE_BITS 0x0D5A +#define GL_ACCUM_ALPHA_BITS 0x0D5B +#define GL_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_ACCUM 0x0100 +#define GL_ADD 0x0104 +#define GL_LOAD 0x0101 +#define GL_MULT 0x0103 +#define GL_RETURN 0x0102 + +/* Alpha testing */ +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_ALPHA_TEST_FUNC 0x0BC1 + +/* Blending */ +#define GL_BLEND 0x0BE2 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND_DST 0x0BE0 +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 + +/* Render Mode */ +#define GL_FEEDBACK 0x1C01 +#define GL_RENDER 0x1C00 +#define GL_SELECT 0x1C02 + +/* Feedback */ +#define GL_2D 0x0600 +#define GL_3D 0x0601 +#define GL_3D_COLOR 0x0602 +#define GL_3D_COLOR_TEXTURE 0x0603 +#define GL_4D_COLOR_TEXTURE 0x0604 +#define GL_POINT_TOKEN 0x0701 +#define GL_LINE_TOKEN 0x0702 +#define GL_LINE_RESET_TOKEN 0x0707 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 + +/* Selection */ +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 + +/* Fog */ +#define GL_FOG 0x0B60 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_COLOR 0x0B66 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_START 0x0B63 +#define GL_FOG_END 0x0B64 +#define GL_LINEAR 0x2601 +#define GL_EXP 0x0800 +#define GL_EXP2 0x0801 + +/* Logic Ops */ +#define GL_LOGIC_OP 0x0BF1 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_CLEAR 0x1500 +#define GL_SET 0x150F +#define GL_COPY 0x1503 +#define GL_COPY_INVERTED 0x150C +#define GL_NOOP 0x1505 +#define GL_INVERT 0x150A +#define GL_AND 0x1501 +#define GL_NAND 0x150E +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_XOR 0x1506 +#define GL_EQUIV 0x1509 +#define GL_AND_REVERSE 0x1502 +#define GL_AND_INVERTED 0x1504 +#define GL_OR_REVERSE 0x150B +#define GL_OR_INVERTED 0x150D + +/* Stencil */ +#define GL_STENCIL_BITS 0x0D57 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STENCIL_INDEX 0x1901 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 + +/* Buffers, Pixel Drawing/Reading */ +#define GL_NONE 0 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +/*GL_FRONT 0x0404 */ +/*GL_BACK 0x0405 */ +/*GL_FRONT_AND_BACK 0x0408 */ +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_COLOR_INDEX 0x1900 +#define GL_RED 0x1903 +#define GL_GREEN 0x1904 +#define GL_BLUE 0x1905 +#define GL_ALPHA 0x1906 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_ALPHA_BITS 0x0D55 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_INDEX_BITS 0x0D51 +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_AUX_BUFFERS 0x0C00 +#define GL_READ_BUFFER 0x0C02 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_BITMAP 0x1A00 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 +#define GL_DITHER 0x0BD0 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 + +/* Implementation limits */ +#define GL_MAX_LIST_NESTING 0x0B31 +#define GL_MAX_EVAL_ORDER 0x0D30 +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_CLIP_PLANES 0x0D32 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B + +/* Gets */ +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_MODE 0x0C30 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_RENDER_MODE 0x0C40 +#define GL_RGBA_MODE 0x0C31 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_VIEWPORT 0x0BA2 + +/* Evaluators */ +#define GL_AUTO_NORMAL 0x0D80 +#define GL_MAP1_COLOR_4 0x0D90 +#define GL_MAP1_INDEX 0x0D91 +#define GL_MAP1_NORMAL 0x0D92 +#define GL_MAP1_TEXTURE_COORD_1 0x0D93 +#define GL_MAP1_TEXTURE_COORD_2 0x0D94 +#define GL_MAP1_TEXTURE_COORD_3 0x0D95 +#define GL_MAP1_TEXTURE_COORD_4 0x0D96 +#define GL_MAP1_VERTEX_3 0x0D97 +#define GL_MAP1_VERTEX_4 0x0D98 +#define GL_MAP2_COLOR_4 0x0DB0 +#define GL_MAP2_INDEX 0x0DB1 +#define GL_MAP2_NORMAL 0x0DB2 +#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 +#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 +#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 +#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 +#define GL_MAP2_VERTEX_3 0x0DB7 +#define GL_MAP2_VERTEX_4 0x0DB8 +#define GL_MAP1_GRID_DOMAIN 0x0DD0 +#define GL_MAP1_GRID_SEGMENTS 0x0DD1 +#define GL_MAP2_GRID_DOMAIN 0x0DD2 +#define GL_MAP2_GRID_SEGMENTS 0x0DD3 +#define GL_COEFF 0x0A00 +#define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 + +/* Hints */ +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_FOG_HINT 0x0C54 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +/* Scissor box */ +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 + +/* Pixel Mode / Transfer */ +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_STENCIL 0x0D11 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_RED_SCALE 0x0D14 +#define GL_RED_BIAS 0x0D15 +#define GL_GREEN_SCALE 0x0D18 +#define GL_GREEN_BIAS 0x0D19 +#define GL_BLUE_SCALE 0x0D1A +#define GL_BLUE_BIAS 0x0D1B +#define GL_ALPHA_SCALE 0x0D1C +#define GL_ALPHA_BIAS 0x0D1D +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_BIAS 0x0D1F +#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 +#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 +#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 +#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 +#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 +#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 +#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 +#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 +#define GL_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#define GL_PIXEL_MAP_I_TO_R 0x0C72 +#define GL_PIXEL_MAP_I_TO_G 0x0C73 +#define GL_PIXEL_MAP_I_TO_B 0x0C74 +#define GL_PIXEL_MAP_I_TO_A 0x0C75 +#define GL_PIXEL_MAP_R_TO_R 0x0C76 +#define GL_PIXEL_MAP_G_TO_G 0x0C77 +#define GL_PIXEL_MAP_B_TO_B 0x0C78 +#define GL_PIXEL_MAP_A_TO_A 0x0C79 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 + +/* Texture mapping */ +#define GL_TEXTURE_ENV 0x2300 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_ENV_COLOR 0x2201 +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GEN_R 0x0C62 +#define GL_TEXTURE_GEN_Q 0x0C63 +#define GL_TEXTURE_GEN_MODE 0x2500 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_TEXTURE_COMPONENTS 0x1003 +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_OBJECT_PLANE 0x2501 +#define GL_EYE_LINEAR 0x2400 +#define GL_EYE_PLANE 0x2502 +#define GL_SPHERE_MAP 0x2402 +#define GL_DECAL 0x2101 +#define GL_MODULATE 0x2100 +#define GL_NEAREST 0x2600 +#define GL_REPEAT 0x2901 +#define GL_CLAMP 0x2900 +#define GL_S 0x2000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#define GL_Q 0x2003 + +/* Utility */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* Errors */ +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_OUT_OF_MEMORY 0x0505 + +/* glPush/PopAttrib bits */ +#define GL_CURRENT_BIT 0x00000001 +#define GL_POINT_BIT 0x00000002 +#define GL_LINE_BIT 0x00000004 +#define GL_POLYGON_BIT 0x00000008 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_FOG_BIT 0x00000080 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_ENABLE_BIT 0x00002000 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_HINT_BIT 0x00008000 +#define GL_EVAL_BIT 0x00010000 +#define GL_LIST_BIT 0x00020000 +#define GL_TEXTURE_BIT 0x00040000 +#define GL_SCISSOR_BIT 0x00080000 +#define GL_ALL_ATTRIB_BITS 0x000FFFFF + + +/* OpenGL 1.1 */ +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_ALPHA4 0x803B +#define GL_ALPHA8 0x803C +#define GL_ALPHA12 0x803D +#define GL_ALPHA16 0x803E +#define GL_LUMINANCE4 0x803F +#define GL_LUMINANCE8 0x8040 +#define GL_LUMINANCE12 0x8041 +#define GL_LUMINANCE16 0x8042 +#define GL_LUMINANCE4_ALPHA4 0x8043 +#define GL_LUMINANCE6_ALPHA2 0x8044 +#define GL_LUMINANCE8_ALPHA8 0x8045 +#define GL_LUMINANCE12_ALPHA4 0x8046 +#define GL_LUMINANCE12_ALPHA12 0x8047 +#define GL_LUMINANCE16_ALPHA16 0x8048 +#define GL_INTENSITY 0x8049 +#define GL_INTENSITY4 0x804A +#define GL_INTENSITY8 0x804B +#define GL_INTENSITY12 0x804C +#define GL_INTENSITY16 0x804D +#define GL_R3_G3_B2 0x2A10 +#define GL_RGB4 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB10 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGBA2 0x8055 +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGBA8 0x8058 +#define GL_RGB10_A2 0x8059 +#define GL_RGBA12 0x805A +#define GL_RGBA16 0x805B +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF +#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF + + + +/* + * Miscellaneous + */ + +GLAPI void GLAPIENTRY glClearIndex( GLfloat c ); + +GLAPI void GLAPIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); + +GLAPI void GLAPIENTRY glClear( GLbitfield mask ); + +GLAPI void GLAPIENTRY glIndexMask( GLuint mask ); + +GLAPI void GLAPIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); + +GLAPI void GLAPIENTRY glAlphaFunc( GLenum func, GLclampf ref ); + +GLAPI void GLAPIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); + +GLAPI void GLAPIENTRY glLogicOp( GLenum opcode ); + +GLAPI void GLAPIENTRY glCullFace( GLenum mode ); + +GLAPI void GLAPIENTRY glFrontFace( GLenum mode ); + +GLAPI void GLAPIENTRY glPointSize( GLfloat size ); + +GLAPI void GLAPIENTRY glLineWidth( GLfloat width ); + +GLAPI void GLAPIENTRY glLineStipple( GLint factor, GLushort pattern ); + +GLAPI void GLAPIENTRY glPolygonMode( GLenum face, GLenum mode ); + +GLAPI void GLAPIENTRY glPolygonOffset( GLfloat factor, GLfloat units ); + +GLAPI void GLAPIENTRY glPolygonStipple( const GLubyte *mask ); + +GLAPI void GLAPIENTRY glGetPolygonStipple( GLubyte *mask ); + +GLAPI void GLAPIENTRY glEdgeFlag( GLboolean flag ); + +GLAPI void GLAPIENTRY glEdgeFlagv( const GLboolean *flag ); + +GLAPI void GLAPIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); + +GLAPI void GLAPIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); + +GLAPI void GLAPIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); + +GLAPI void GLAPIENTRY glDrawBuffer( GLenum mode ); + +GLAPI void GLAPIENTRY glReadBuffer( GLenum mode ); + +GLAPI void GLAPIENTRY glEnable( GLenum cap ); + +GLAPI void GLAPIENTRY glDisable( GLenum cap ); + +GLAPI GLboolean GLAPIENTRY glIsEnabled( GLenum cap ); + + +GLAPI void GLAPIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ + +GLAPI void GLAPIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ + + +GLAPI void GLAPIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); + +GLAPI void GLAPIENTRY glGetDoublev( GLenum pname, GLdouble *params ); + +GLAPI void GLAPIENTRY glGetFloatv( GLenum pname, GLfloat *params ); + +GLAPI void GLAPIENTRY glGetIntegerv( GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glPushAttrib( GLbitfield mask ); + +GLAPI void GLAPIENTRY glPopAttrib( void ); + + +GLAPI void GLAPIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ + +GLAPI void GLAPIENTRY glPopClientAttrib( void ); /* 1.1 */ + + +GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode ); + +GLAPI GLenum GLAPIENTRY glGetError( void ); + +GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name ); + +GLAPI void GLAPIENTRY glFinish( void ); + +GLAPI void GLAPIENTRY glFlush( void ); + +GLAPI void GLAPIENTRY glHint( GLenum target, GLenum mode ); + + +/* + * Depth Buffer + */ + +GLAPI void GLAPIENTRY glClearDepth( GLclampd depth ); + +GLAPI void GLAPIENTRY glDepthFunc( GLenum func ); + +GLAPI void GLAPIENTRY glDepthMask( GLboolean flag ); + +GLAPI void GLAPIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); + + +/* + * Accumulation Buffer + */ + +GLAPI void GLAPIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); + +GLAPI void GLAPIENTRY glAccum( GLenum op, GLfloat value ); + + +/* + * Transformation + */ + +GLAPI void GLAPIENTRY glMatrixMode( GLenum mode ); + +GLAPI void GLAPIENTRY glOrtho( GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, + GLdouble near_val, GLdouble far_val ); + +GLAPI void GLAPIENTRY glFrustum( GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, + GLdouble near_val, GLdouble far_val ); + +GLAPI void GLAPIENTRY glViewport( GLint x, GLint y, + GLsizei width, GLsizei height ); + +GLAPI void GLAPIENTRY glPushMatrix( void ); + +GLAPI void GLAPIENTRY glPopMatrix( void ); + +GLAPI void GLAPIENTRY glLoadIdentity( void ); + +GLAPI void GLAPIENTRY glLoadMatrixd( const GLdouble *m ); +GLAPI void GLAPIENTRY glLoadMatrixf( const GLfloat *m ); + +GLAPI void GLAPIENTRY glMultMatrixd( const GLdouble *m ); +GLAPI void GLAPIENTRY glMultMatrixf( const GLfloat *m ); + +GLAPI void GLAPIENTRY glRotated( GLdouble angle, + GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glRotatef( GLfloat angle, + GLfloat x, GLfloat y, GLfloat z ); + +GLAPI void GLAPIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z ); + +GLAPI void GLAPIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); + + +/* + * Display Lists + */ + +GLAPI GLboolean GLAPIENTRY glIsList( GLuint list ); + +GLAPI void GLAPIENTRY glDeleteLists( GLuint list, GLsizei range ); + +GLAPI GLuint GLAPIENTRY glGenLists( GLsizei range ); + +GLAPI void GLAPIENTRY glNewList( GLuint list, GLenum mode ); + +GLAPI void GLAPIENTRY glEndList( void ); + +GLAPI void GLAPIENTRY glCallList( GLuint list ); + +GLAPI void GLAPIENTRY glCallLists( GLsizei n, GLenum type, + const GLvoid *lists ); + +GLAPI void GLAPIENTRY glListBase( GLuint base ); + + +/* + * Drawing Functions + */ + +GLAPI void GLAPIENTRY glBegin( GLenum mode ); + +GLAPI void GLAPIENTRY glEnd( void ); + + +GLAPI void GLAPIENTRY glVertex2d( GLdouble x, GLdouble y ); +GLAPI void GLAPIENTRY glVertex2f( GLfloat x, GLfloat y ); +GLAPI void GLAPIENTRY glVertex2i( GLint x, GLint y ); +GLAPI void GLAPIENTRY glVertex2s( GLshort x, GLshort y ); + +GLAPI void GLAPIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); +GLAPI void GLAPIENTRY glVertex3i( GLint x, GLint y, GLint z ); +GLAPI void GLAPIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); + +GLAPI void GLAPIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +GLAPI void GLAPIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +GLAPI void GLAPIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); +GLAPI void GLAPIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); + +GLAPI void GLAPIENTRY glVertex2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex2iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glVertex3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex3iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glVertex4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex4iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); +GLAPI void GLAPIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); +GLAPI void GLAPIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); +GLAPI void GLAPIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); +GLAPI void GLAPIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); + +GLAPI void GLAPIENTRY glNormal3bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glNormal3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glNormal3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glNormal3iv( const GLint *v ); +GLAPI void GLAPIENTRY glNormal3sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glIndexd( GLdouble c ); +GLAPI void GLAPIENTRY glIndexf( GLfloat c ); +GLAPI void GLAPIENTRY glIndexi( GLint c ); +GLAPI void GLAPIENTRY glIndexs( GLshort c ); +GLAPI void GLAPIENTRY glIndexub( GLubyte c ); /* 1.1 */ + +GLAPI void GLAPIENTRY glIndexdv( const GLdouble *c ); +GLAPI void GLAPIENTRY glIndexfv( const GLfloat *c ); +GLAPI void GLAPIENTRY glIndexiv( const GLint *c ); +GLAPI void GLAPIENTRY glIndexsv( const GLshort *c ); +GLAPI void GLAPIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ + +GLAPI void GLAPIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); +GLAPI void GLAPIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); +GLAPI void GLAPIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); +GLAPI void GLAPIENTRY glColor3i( GLint red, GLint green, GLint blue ); +GLAPI void GLAPIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); +GLAPI void GLAPIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); +GLAPI void GLAPIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); +GLAPI void GLAPIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); + +GLAPI void GLAPIENTRY glColor4b( GLbyte red, GLbyte green, + GLbyte blue, GLbyte alpha ); +GLAPI void GLAPIENTRY glColor4d( GLdouble red, GLdouble green, + GLdouble blue, GLdouble alpha ); +GLAPI void GLAPIENTRY glColor4f( GLfloat red, GLfloat green, + GLfloat blue, GLfloat alpha ); +GLAPI void GLAPIENTRY glColor4i( GLint red, GLint green, + GLint blue, GLint alpha ); +GLAPI void GLAPIENTRY glColor4s( GLshort red, GLshort green, + GLshort blue, GLshort alpha ); +GLAPI void GLAPIENTRY glColor4ub( GLubyte red, GLubyte green, + GLubyte blue, GLubyte alpha ); +GLAPI void GLAPIENTRY glColor4ui( GLuint red, GLuint green, + GLuint blue, GLuint alpha ); +GLAPI void GLAPIENTRY glColor4us( GLushort red, GLushort green, + GLushort blue, GLushort alpha ); + + +GLAPI void GLAPIENTRY glColor3bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glColor3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glColor3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glColor3iv( const GLint *v ); +GLAPI void GLAPIENTRY glColor3sv( const GLshort *v ); +GLAPI void GLAPIENTRY glColor3ubv( const GLubyte *v ); +GLAPI void GLAPIENTRY glColor3uiv( const GLuint *v ); +GLAPI void GLAPIENTRY glColor3usv( const GLushort *v ); + +GLAPI void GLAPIENTRY glColor4bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glColor4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glColor4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glColor4iv( const GLint *v ); +GLAPI void GLAPIENTRY glColor4sv( const GLshort *v ); +GLAPI void GLAPIENTRY glColor4ubv( const GLubyte *v ); +GLAPI void GLAPIENTRY glColor4uiv( const GLuint *v ); +GLAPI void GLAPIENTRY glColor4usv( const GLushort *v ); + + +GLAPI void GLAPIENTRY glTexCoord1d( GLdouble s ); +GLAPI void GLAPIENTRY glTexCoord1f( GLfloat s ); +GLAPI void GLAPIENTRY glTexCoord1i( GLint s ); +GLAPI void GLAPIENTRY glTexCoord1s( GLshort s ); + +GLAPI void GLAPIENTRY glTexCoord2d( GLdouble s, GLdouble t ); +GLAPI void GLAPIENTRY glTexCoord2f( GLfloat s, GLfloat t ); +GLAPI void GLAPIENTRY glTexCoord2i( GLint s, GLint t ); +GLAPI void GLAPIENTRY glTexCoord2s( GLshort s, GLshort t ); + +GLAPI void GLAPIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); +GLAPI void GLAPIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); +GLAPI void GLAPIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); +GLAPI void GLAPIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); + +GLAPI void GLAPIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); +GLAPI void GLAPIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); +GLAPI void GLAPIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); +GLAPI void GLAPIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); + +GLAPI void GLAPIENTRY glTexCoord1dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord1fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord1iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord1sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord2iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord3iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord4iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glRasterPos2d( GLdouble x, GLdouble y ); +GLAPI void GLAPIENTRY glRasterPos2f( GLfloat x, GLfloat y ); +GLAPI void GLAPIENTRY glRasterPos2i( GLint x, GLint y ); +GLAPI void GLAPIENTRY glRasterPos2s( GLshort x, GLshort y ); + +GLAPI void GLAPIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); +GLAPI void GLAPIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); +GLAPI void GLAPIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); + +GLAPI void GLAPIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +GLAPI void GLAPIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +GLAPI void GLAPIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); +GLAPI void GLAPIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); + +GLAPI void GLAPIENTRY glRasterPos2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos2iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glRasterPos3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos3iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glRasterPos4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos4iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); +GLAPI void GLAPIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); +GLAPI void GLAPIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); +GLAPI void GLAPIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); + + +GLAPI void GLAPIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); +GLAPI void GLAPIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); +GLAPI void GLAPIENTRY glRectiv( const GLint *v1, const GLint *v2 ); +GLAPI void GLAPIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); + + +/* + * Vertex Arrays (1.1) + */ + +GLAPI void GLAPIENTRY glVertexPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glNormalPointer( GLenum type, GLsizei stride, + const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glColorPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glIndexPointer( GLenum type, GLsizei stride, + const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params ); + +GLAPI void GLAPIENTRY glArrayElement( GLint i ); + +GLAPI void GLAPIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); + +GLAPI void GLAPIENTRY glDrawElements( GLenum mode, GLsizei count, + GLenum type, const GLvoid *indices ); + +GLAPI void GLAPIENTRY glInterleavedArrays( GLenum format, GLsizei stride, + const GLvoid *pointer ); + +/* + * Lighting + */ + +GLAPI void GLAPIENTRY glShadeModel( GLenum mode ); + +GLAPI void GLAPIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glLighti( GLenum light, GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glLightfv( GLenum light, GLenum pname, + const GLfloat *params ); +GLAPI void GLAPIENTRY glLightiv( GLenum light, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glGetLightfv( GLenum light, GLenum pname, + GLfloat *params ); +GLAPI void GLAPIENTRY glGetLightiv( GLenum light, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glLightModelf( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glLightModeli( GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glLightModeliv( GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); + +GLAPI void GLAPIENTRY glColorMaterial( GLenum face, GLenum mode ); + + +/* + * Raster functions + */ + +GLAPI void GLAPIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); + +GLAPI void GLAPIENTRY glPixelStoref( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glPixelStorei( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glPixelTransferf( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glPixelTransferi( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glPixelMapfv( GLenum map, GLsizei mapsize, + const GLfloat *values ); +GLAPI void GLAPIENTRY glPixelMapuiv( GLenum map, GLsizei mapsize, + const GLuint *values ); +GLAPI void GLAPIENTRY glPixelMapusv( GLenum map, GLsizei mapsize, + const GLushort *values ); + +GLAPI void GLAPIENTRY glGetPixelMapfv( GLenum map, GLfloat *values ); +GLAPI void GLAPIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); +GLAPI void GLAPIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); + +GLAPI void GLAPIENTRY glBitmap( GLsizei width, GLsizei height, + GLfloat xorig, GLfloat yorig, + GLfloat xmove, GLfloat ymove, + const GLubyte *bitmap ); + +GLAPI void GLAPIENTRY glReadPixels( GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + GLvoid *pixels ); + +GLAPI void GLAPIENTRY glDrawPixels( GLsizei width, GLsizei height, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glCopyPixels( GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum type ); + +/* + * Stenciling + */ + +GLAPI void GLAPIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask ); + +GLAPI void GLAPIENTRY glStencilMask( GLuint mask ); + +GLAPI void GLAPIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass ); + +GLAPI void GLAPIENTRY glClearStencil( GLint s ); + + + +/* + * Texture mapping + */ + +GLAPI void GLAPIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); +GLAPI void GLAPIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); +GLAPI void GLAPIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params ); +GLAPI void GLAPIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexParameterfv( GLenum target, GLenum pname, + const GLfloat *params ); +GLAPI void GLAPIENTRY glTexParameteriv( GLenum target, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexParameterfv( GLenum target, + GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexParameteriv( GLenum target, + GLenum pname, GLint *params ); + +GLAPI void GLAPIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, + GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, + GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexImage1D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLint border, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glTexImage2D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLint border, GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glGetTexImage( GLenum target, GLint level, + GLenum format, GLenum type, + GLvoid *pixels ); + + +/* 1.1 functions */ + +GLAPI void GLAPIENTRY glGenTextures( GLsizei n, GLuint *textures ); + +GLAPI void GLAPIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); + +GLAPI void GLAPIENTRY glBindTexture( GLenum target, GLuint texture ); + +GLAPI void GLAPIENTRY glPrioritizeTextures( GLsizei n, + const GLuint *textures, + const GLclampf *priorities ); + +GLAPI GLboolean GLAPIENTRY glAreTexturesResident( GLsizei n, + const GLuint *textures, + GLboolean *residences ); + +GLAPI GLboolean GLAPIENTRY glIsTexture( GLuint texture ); + + +GLAPI void GLAPIENTRY glTexSubImage1D( GLenum target, GLint level, + GLint xoffset, + GLsizei width, GLenum format, + GLenum type, const GLvoid *pixels ); + + +GLAPI void GLAPIENTRY glTexSubImage2D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + const GLvoid *pixels ); + + +GLAPI void GLAPIENTRY glCopyTexImage1D( GLenum target, GLint level, + GLenum internalformat, + GLint x, GLint y, + GLsizei width, GLint border ); + + +GLAPI void GLAPIENTRY glCopyTexImage2D( GLenum target, GLint level, + GLenum internalformat, + GLint x, GLint y, + GLsizei width, GLsizei height, + GLint border ); + + +GLAPI void GLAPIENTRY glCopyTexSubImage1D( GLenum target, GLint level, + GLint xoffset, GLint x, GLint y, + GLsizei width ); + + +GLAPI void GLAPIENTRY glCopyTexSubImage2D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint x, GLint y, + GLsizei width, GLsizei height ); + + +/* + * Evaluators + */ + +GLAPI void GLAPIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, + GLint stride, + GLint order, const GLdouble *points ); +GLAPI void GLAPIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, + GLint stride, + GLint order, const GLfloat *points ); + +GLAPI void GLAPIENTRY glMap2d( GLenum target, + GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, + GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, + const GLdouble *points ); +GLAPI void GLAPIENTRY glMap2f( GLenum target, + GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, + GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, + const GLfloat *points ); + +GLAPI void GLAPIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v ); +GLAPI void GLAPIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v ); +GLAPI void GLAPIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v ); + +GLAPI void GLAPIENTRY glEvalCoord1d( GLdouble u ); +GLAPI void GLAPIENTRY glEvalCoord1f( GLfloat u ); + +GLAPI void GLAPIENTRY glEvalCoord1dv( const GLdouble *u ); +GLAPI void GLAPIENTRY glEvalCoord1fv( const GLfloat *u ); + +GLAPI void GLAPIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); +GLAPI void GLAPIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); + +GLAPI void GLAPIENTRY glEvalCoord2dv( const GLdouble *u ); +GLAPI void GLAPIENTRY glEvalCoord2fv( const GLfloat *u ); + +GLAPI void GLAPIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 ); +GLAPI void GLAPIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 ); + +GLAPI void GLAPIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, + GLint vn, GLdouble v1, GLdouble v2 ); +GLAPI void GLAPIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, + GLint vn, GLfloat v1, GLfloat v2 ); + +GLAPI void GLAPIENTRY glEvalPoint1( GLint i ); + +GLAPI void GLAPIENTRY glEvalPoint2( GLint i, GLint j ); + +GLAPI void GLAPIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); + +GLAPI void GLAPIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); + + +/* + * Fog + */ + +GLAPI void GLAPIENTRY glFogf( GLenum pname, GLfloat param ); + +GLAPI void GLAPIENTRY glFogi( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glFogfv( GLenum pname, const GLfloat *params ); + +GLAPI void GLAPIENTRY glFogiv( GLenum pname, const GLint *params ); + + +/* + * Selection and Feedback + */ + +GLAPI void GLAPIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); + +GLAPI void GLAPIENTRY glPassThrough( GLfloat token ); + +GLAPI void GLAPIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); + +GLAPI void GLAPIENTRY glInitNames( void ); + +GLAPI void GLAPIENTRY glLoadName( GLuint name ); + +GLAPI void GLAPIENTRY glPushName( GLuint name ); + +GLAPI void GLAPIENTRY glPopName( void ); + + + +/* + * OpenGL 1.2 + */ + +#define GL_RESCALE_NORMAL 0x803A +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_TEXTURE_BINDING_3D 0x806A + +GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start, + GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); + +GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLsizei depth, GLint border, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, + GLenum format, + GLenum type, const GLvoid *pixels); + +GLAPI void GLAPIENTRY glCopyTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLint x, + GLint y, GLsizei width, + GLsizei height ); + +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + + +/* + * GL_ARB_imaging + */ + +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_BLEND_EQUATION 0x8009 +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_BLEND_COLOR 0x8005 + + +GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat, + GLsizei width, GLenum format, + GLenum type, const GLvoid *table ); + +GLAPI void GLAPIENTRY glColorSubTable( GLenum target, + GLsizei start, GLsizei count, + GLenum format, GLenum type, + const GLvoid *data ); + +GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname, + const GLint *params); + +GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname, + const GLfloat *params); + +GLAPI void GLAPIENTRY glCopyColorSubTable( GLenum target, GLsizei start, + GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glCopyColorTable( GLenum target, GLenum internalformat, + GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glGetColorTable( GLenum target, GLenum format, + GLenum type, GLvoid *table ); + +GLAPI void GLAPIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glBlendEquation( GLenum mode ); + +GLAPI void GLAPIENTRY glBlendColor( GLclampf red, GLclampf green, + GLclampf blue, GLclampf alpha ); + +GLAPI void GLAPIENTRY glHistogram( GLenum target, GLsizei width, + GLenum internalformat, GLboolean sink ); + +GLAPI void GLAPIENTRY glResetHistogram( GLenum target ); + +GLAPI void GLAPIENTRY glGetHistogram( GLenum target, GLboolean reset, + GLenum format, GLenum type, + GLvoid *values ); + +GLAPI void GLAPIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glMinmax( GLenum target, GLenum internalformat, + GLboolean sink ); + +GLAPI void GLAPIENTRY glResetMinmax( GLenum target ); + +GLAPI void GLAPIENTRY glGetMinmax( GLenum target, GLboolean reset, + GLenum format, GLenum types, + GLvoid *values ); + +GLAPI void GLAPIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glConvolutionFilter1D( GLenum target, + GLenum internalformat, GLsizei width, GLenum format, GLenum type, + const GLvoid *image ); + +GLAPI void GLAPIENTRY glConvolutionFilter2D( GLenum target, + GLenum internalformat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *image ); + +GLAPI void GLAPIENTRY glConvolutionParameterf( GLenum target, GLenum pname, + GLfloat params ); + +GLAPI void GLAPIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, + const GLfloat *params ); + +GLAPI void GLAPIENTRY glConvolutionParameteri( GLenum target, GLenum pname, + GLint params ); + +GLAPI void GLAPIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glCopyConvolutionFilter1D( GLenum target, + GLenum internalformat, GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glCopyConvolutionFilter2D( GLenum target, + GLenum internalformat, GLint x, GLint y, GLsizei width, + GLsizei height); + +GLAPI void GLAPIENTRY glGetConvolutionFilter( GLenum target, GLenum format, + GLenum type, GLvoid *image ); + +GLAPI void GLAPIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glSeparableFilter2D( GLenum target, + GLenum internalformat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *row, const GLvoid *column ); + +GLAPI void GLAPIENTRY glGetSeparableFilter( GLenum target, GLenum format, + GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); + + + + +/* + * OpenGL 1.3 + */ + +/* multitexture */ +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +/* texture_cube_map */ +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +/* texture_compression */ +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +/* multisample */ +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_MULTISAMPLE_BIT 0x20000000 +/* transpose_matrix */ +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +/* texture_env_combine */ +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +/* texture_env_dot3 */ +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +/* texture_border_clamp */ +#define GL_CLAMP_TO_BORDER 0x812D + +GLAPI void GLAPIENTRY glActiveTexture( GLenum texture ); + +GLAPI void GLAPIENTRY glClientActiveTexture( GLenum texture ); + +GLAPI void GLAPIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); + +GLAPI void GLAPIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1i( GLenum target, GLint s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); + + +GLAPI void GLAPIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); + +GLAPI void GLAPIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); + +GLAPI void GLAPIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); + +GLAPI void GLAPIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); + +GLAPI void GLAPIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); + + +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); + + + +/* + * GL_ARB_multitexture (ARB extension 1 and OpenGL 1.2.1) + */ +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 + +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 + +GLAPI void GLAPIENTRY glActiveTextureARB(GLenum texture); +GLAPI void GLAPIENTRY glClientActiveTextureARB(GLenum texture); +GLAPI void GLAPIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s); +GLAPI void GLAPIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s); +GLAPI void GLAPIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord1iARB(GLenum target, GLint s); +GLAPI void GLAPIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s); +GLAPI void GLAPIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t); +GLAPI void GLAPIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t); +GLAPI void GLAPIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t); +GLAPI void GLAPIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t); +GLAPI void GLAPIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void GLAPIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void GLAPIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r); +GLAPI void GLAPIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void GLAPIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void GLAPIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void GLAPIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void GLAPIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void GLAPIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v); + +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); + +#endif /* GL_ARB_multitexture */ + + + +/* + * Define this token if you want "old-style" header file behaviour (extensions + * defined in gl.h). Otherwise, extensions will be included from glext.h. + */ +#if !defined(NO_SDL_GLEXT) && !defined(GL_GLEXT_LEGACY) +#include +#endif /* GL_GLEXT_LEGACY */ + + + +/* + * ???. GL_MESA_packed_depth_stencil + * XXX obsolete + */ +#ifndef GL_MESA_packed_depth_stencil +#define GL_MESA_packed_depth_stencil 1 + +#define GL_DEPTH_STENCIL_MESA 0x8750 +#define GL_UNSIGNED_INT_24_8_MESA 0x8751 +#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752 +#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753 +#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754 + +#endif /* GL_MESA_packed_depth_stencil */ + + +#ifndef GL_ATI_blend_equation_separate +#define GL_ATI_blend_equation_separate 1 + +#define GL_ALPHA_BLEND_EQUATION_ATI 0x883D + +GLAPI void GLAPIENTRY glBlendEquationSeparateATI( GLenum modeRGB, GLenum modeA ); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLenum modeA); + +#endif /* GL_ATI_blend_equation_separate */ + + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +typedef void* GLeglImageOES; +#endif + +#ifndef GL_OES_EGL_image +#define GL_OES_EGL_image 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); +GLAPI void APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); +#endif +typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); +#endif + + +/** + ** NOTE!!!!! If you add new functions to this file, or update + ** glext.h be sure to regenerate the gl_mangle.h file. See comments + ** in that file for details. + **/ + + + +/********************************************************************** + * Begin system-specific stuff + */ +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export off +#endif + +/* + * End system-specific stuff + **********************************************************************/ + + +#ifdef __cplusplus +} +#endif + +#endif /* __gl_h_ */ + +#endif /* !__IPHONEOS__ */ + +#endif /* SDL_opengl_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengl_glext.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengl_glext.h new file mode 100644 index 00000000000..6a402b15a22 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengl_glext.h @@ -0,0 +1,11180 @@ +#ifndef __glext_h_ +#define __glext_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright (c) 2013-2014 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ +/* +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** http://www.opengl.org/registry/ +** +** Khronos $Revision: 26745 $ on $Date: 2014-05-21 03:12:26 -0700 (Wed, 21 May 2014) $ +*/ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX +#endif +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif +#ifndef GLAPI +#define GLAPI extern +#endif + +#define GL_GLEXT_VERSION 20140521 + +/* Generated C header for: + * API: gl + * Profile: compatibility + * Versions considered: .* + * Versions emitted: 1\.[2-9]|[234]\.[0-9] + * Default extensions included: gl + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_RESCALE_NORMAL 0x803A +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_VERSION_1_2 */ + +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTexture (GLenum texture); +GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); +GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); +GLAPI void APIENTRY glClientActiveTexture (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); +#endif +#endif /* GL_VERSION_1_3 */ + +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_COLOR_SUM 0x8458 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFogCoordf (GLfloat coord); +GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); +GLAPI void APIENTRY glFogCoordd (GLdouble coord); +GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2iv (const GLint *v); +GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); +GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3iv (const GLint *v); +GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); +GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void APIENTRY glBlendEquation (GLenum mode); +#endif +#endif /* GL_VERSION_1_4 */ + +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 +#include +#ifdef __MACOSX__ +typedef long GLsizeiptr; +typedef long GLintptr; +#else +typedef ptrdiff_t GLsizeiptr; +typedef ptrdiff_t GLintptr; +#endif +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_CURRENT_QUERY 0x8865 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_READ_ONLY 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SRC1_ALPHA 0x8589 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_FOG_COORD_SRC 0x8450 +#define GL_FOG_COORD 0x8451 +#define GL_CURRENT_FOG_COORD 0x8453 +#define GL_FOG_COORD_ARRAY_TYPE 0x8454 +#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORD_ARRAY_POINTER 0x8456 +#define GL_FOG_COORD_ARRAY 0x8457 +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D +#define GL_SRC0_RGB 0x8580 +#define GL_SRC1_RGB 0x8581 +#define GL_SRC2_RGB 0x8582 +#define GL_SRC0_ALPHA 0x8588 +#define GL_SRC2_ALPHA 0x858A +typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQuery (GLuint id); +GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQuery (GLenum target); +GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); +GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); +GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); +GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_VERSION_1_5 */ + +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +typedef char GLchar; +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_TEXTURE_COORDS 0x8871 +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); +typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); +GLAPI void APIENTRY glCompileShader (GLuint shader); +GLAPI GLuint APIENTRY glCreateProgram (void); +GLAPI GLuint APIENTRY glCreateShader (GLenum type); +GLAPI void APIENTRY glDeleteProgram (GLuint program); +GLAPI void APIENTRY glDeleteShader (GLuint shader); +GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgram (GLuint program); +GLAPI GLboolean APIENTRY glIsShader (GLuint shader); +GLAPI void APIENTRY glLinkProgram (GLuint program); +GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +GLAPI void APIENTRY glUseProgram (GLuint program); +GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glValidateProgram (GLuint program); +GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#endif +#endif /* GL_VERSION_2_0 */ + +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#endif +#endif /* GL_VERSION_2_1 */ + +#ifndef GL_VERSION_3_0 +#define GL_VERSION_3_0 1 +typedef unsigned short GLhalf; +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_CONTEXT_FLAGS 0x821E +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RG 0x8226 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_RGBA32F 0x8814 +#define GL_RGB32F 0x8815 +#define GL_RGBA16F 0x881A +#define GL_RGB16F 0x881B +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_FIXED_ONLY 0x891D +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_RGB9_E5 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_RGBA32UI 0x8D70 +#define GL_RGB32UI 0x8D71 +#define GL_RGBA16UI 0x8D76 +#define GL_RGB16UI 0x8D77 +#define GL_RGBA8UI 0x8D7C +#define GL_RGB8UI 0x8D7D +#define GL_RGBA32I 0x8D82 +#define GL_RGB32I 0x8D83 +#define GL_RGBA16I 0x8D88 +#define GL_RGB16I 0x8D89 +#define GL_RGBA8I 0x8D8E +#define GL_RGB8I 0x8D8F +#define GL_RED_INTEGER 0x8D94 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGRA_INTEGER 0x8D9B +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_INDEX 0x8222 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_HALF_FLOAT 0x140B +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_RG 0x8227 +#define GL_RG_INTEGER 0x8228 +#define GL_R8 0x8229 +#define GL_R16 0x822A +#define GL_RG8 0x822B +#define GL_RG16 0x822C +#define GL_R16F 0x822D +#define GL_R32F 0x822E +#define GL_RG16F 0x822F +#define GL_RG32F 0x8230 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_ALPHA_INTEGER 0x8D97 +typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); +GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); +GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedback (void); +GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); +GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRender (void); +GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); +GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); +GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmap (GLenum target); +GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glBindVertexArray (GLuint array); +GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); +#endif +#endif /* GL_VERSION_3_0 */ + +#ifndef GL_VERSION_3_1 +#define GL_VERSION_3_1 1 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM 0x8F98 +#define GL_RG16_SNORM 0x8F99 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGBA16_SNORM 0x8F9B +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_INVALID_INDEX 0xFFFFFFFFu +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); +typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); +GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); +GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#endif +#endif /* GL_VERSION_3_1 */ + +#ifndef GL_VERSION_3_2 +#define GL_VERSION_3_2 1 +typedef struct __GLsync *GLsync; +#ifndef GLEXT_64_TYPES_DEFINED +/* This code block is duplicated in glxext.h, so must be protected */ +#define GLEXT_64_TYPES_DEFINED +/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ +/* (as used in the GL_EXT_timer_query extension). */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#include +#elif defined(__sun__) || defined(__digital__) +#include +#if defined(__STDC__) +#if defined(__arch64__) || defined(_LP64) +typedef long int int64_t; +typedef unsigned long int uint64_t; +#else +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#endif /* __arch64__ */ +#endif /* __STDC__ */ +#elif defined( __VMS ) || defined(__sgi) +#include +#elif defined(__SCO__) || defined(__USLC__) +#include +#elif defined(__UNIXOS2__) || defined(__SOL64__) +typedef long int int32_t; +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#elif defined(_WIN32) && defined(__GNUC__) +#include +#elif defined(_WIN32) +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#else +/* Fallback if nothing above works */ +#include +#endif +#endif +typedef uint64_t GLuint64; +typedef int64_t GLint64; +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_DEPTH_CLAMP 0x864F +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_OBJECT_TYPE 0x9112 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_UNSIGNALED 0x9118 +#define GL_SIGNALED 0x9119 +#define GL_ALREADY_SIGNALED 0x911A +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_CONDITION_SATISFIED 0x911C +#define GL_WAIT_FAILED 0x911D +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_INTEGER_SAMPLES 0x9110 +typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); +typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); +typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); +typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); +typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +GLAPI void APIENTRY glProvokingVertex (GLenum mode); +GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); +GLAPI GLboolean APIENTRY glIsSync (GLsync sync); +GLAPI void APIENTRY glDeleteSync (GLsync sync); +GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); +GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); +GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); +#endif +#endif /* GL_VERSION_3_2 */ + +#ifndef GL_VERSION_3_3 +#define GL_VERSION_3_3 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_SRC1_COLOR 0x88F9 +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_SAMPLER_BINDING 0x8919 +#define GL_RGB10_A2UI 0x906F +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIMESTAMP 0x8E28 +#define GL_INT_2_10_10_10_REV 0x8D9F +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); +typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); +typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); +typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); +GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); +GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); +GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); +GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); +GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); +GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); +GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); +GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); +GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); +GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); +GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); +#endif +#endif /* GL_VERSION_3_3 */ + +#ifndef GL_VERSION_4_0 +#define GL_VERSION_4_0 1 +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_PATCHES 0x000E +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_ISOLINES 0x8E7A +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); +typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); +typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); +typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); +typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); +typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShading (GLfloat value); +GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); +GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); +GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); +GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); +GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); +GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); +GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); +GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); +GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedback (void); +GLAPI void APIENTRY glResumeTransformFeedback (void); +GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); +GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); +GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); +GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); +GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_VERSION_4_0 */ + +#ifndef GL_VERSION_4_1 +#define GL_VERSION_4_1 1 +#define GL_FIXED 0x140C +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_RGB565 0x8D62 +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_MAX_VIEWPORTS 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_UNDEFINED_VERTEX 0x8260 +typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); +typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); +typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); +typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); +typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); +typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReleaseShaderCompiler (void); +GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); +GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); +GLAPI void APIENTRY glClearDepthf (GLfloat d); +GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); +GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); +GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); +GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); +GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); +GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); +GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); +GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); +GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); +GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); +#endif +#endif /* GL_VERSION_4_1 */ + +#ifndef GL_VERSION_4_2 +#define GL_VERSION_4_2 1 +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C +#define GL_MAX_IMAGE_SAMPLES 0x906D +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F +#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); +typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); +GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); +GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#endif +#endif /* GL_VERSION_4_2 */ + +#ifndef GL_VERSION_4_3 +#define GL_VERSION_4_3 1 +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_BUFFER 0x82E0 +#define GL_SHADER 0x82E1 +#define GL_PROGRAM 0x82E2 +#define GL_QUERY 0x82E3 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_SAMPLER 0x82E6 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_INTERNALFORMAT_SUPPORTED 0x826F +#define GL_INTERNALFORMAT_PREFERRED 0x8270 +#define GL_INTERNALFORMAT_RED_SIZE 0x8271 +#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 +#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 +#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 +#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 +#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 +#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 +#define GL_INTERNALFORMAT_RED_TYPE 0x8278 +#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 +#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A +#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B +#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C +#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D +#define GL_MAX_WIDTH 0x827E +#define GL_MAX_HEIGHT 0x827F +#define GL_MAX_DEPTH 0x8280 +#define GL_MAX_LAYERS 0x8281 +#define GL_MAX_COMBINED_DIMENSIONS 0x8282 +#define GL_COLOR_COMPONENTS 0x8283 +#define GL_DEPTH_COMPONENTS 0x8284 +#define GL_STENCIL_COMPONENTS 0x8285 +#define GL_COLOR_RENDERABLE 0x8286 +#define GL_DEPTH_RENDERABLE 0x8287 +#define GL_STENCIL_RENDERABLE 0x8288 +#define GL_FRAMEBUFFER_RENDERABLE 0x8289 +#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A +#define GL_FRAMEBUFFER_BLEND 0x828B +#define GL_READ_PIXELS 0x828C +#define GL_READ_PIXELS_FORMAT 0x828D +#define GL_READ_PIXELS_TYPE 0x828E +#define GL_TEXTURE_IMAGE_FORMAT 0x828F +#define GL_TEXTURE_IMAGE_TYPE 0x8290 +#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 +#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 +#define GL_MIPMAP 0x8293 +#define GL_MANUAL_GENERATE_MIPMAP 0x8294 +#define GL_AUTO_GENERATE_MIPMAP 0x8295 +#define GL_COLOR_ENCODING 0x8296 +#define GL_SRGB_READ 0x8297 +#define GL_SRGB_WRITE 0x8298 +#define GL_FILTER 0x829A +#define GL_VERTEX_TEXTURE 0x829B +#define GL_TESS_CONTROL_TEXTURE 0x829C +#define GL_TESS_EVALUATION_TEXTURE 0x829D +#define GL_GEOMETRY_TEXTURE 0x829E +#define GL_FRAGMENT_TEXTURE 0x829F +#define GL_COMPUTE_TEXTURE 0x82A0 +#define GL_TEXTURE_SHADOW 0x82A1 +#define GL_TEXTURE_GATHER 0x82A2 +#define GL_TEXTURE_GATHER_SHADOW 0x82A3 +#define GL_SHADER_IMAGE_LOAD 0x82A4 +#define GL_SHADER_IMAGE_STORE 0x82A5 +#define GL_SHADER_IMAGE_ATOMIC 0x82A6 +#define GL_IMAGE_TEXEL_SIZE 0x82A7 +#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 +#define GL_IMAGE_PIXEL_FORMAT 0x82A9 +#define GL_IMAGE_PIXEL_TYPE 0x82AA +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF +#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 +#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 +#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 +#define GL_CLEAR_BUFFER 0x82B4 +#define GL_TEXTURE_VIEW 0x82B5 +#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 +#define GL_FULL_SUPPORT 0x82B7 +#define GL_CAVEAT_SUPPORT 0x82B8 +#define GL_IMAGE_CLASS_4_X_32 0x82B9 +#define GL_IMAGE_CLASS_2_X_32 0x82BA +#define GL_IMAGE_CLASS_1_X_32 0x82BB +#define GL_IMAGE_CLASS_4_X_16 0x82BC +#define GL_IMAGE_CLASS_2_X_16 0x82BD +#define GL_IMAGE_CLASS_1_X_16 0x82BE +#define GL_IMAGE_CLASS_4_X_8 0x82BF +#define GL_IMAGE_CLASS_2_X_8 0x82C0 +#define GL_IMAGE_CLASS_1_X_8 0x82C1 +#define GL_IMAGE_CLASS_11_11_10 0x82C2 +#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 +#define GL_VIEW_CLASS_128_BITS 0x82C4 +#define GL_VIEW_CLASS_96_BITS 0x82C5 +#define GL_VIEW_CLASS_64_BITS 0x82C6 +#define GL_VIEW_CLASS_48_BITS 0x82C7 +#define GL_VIEW_CLASS_32_BITS 0x82C8 +#define GL_VIEW_CLASS_24_BITS 0x82C9 +#define GL_VIEW_CLASS_16_BITS 0x82CA +#define GL_VIEW_CLASS_8_BITS 0x82CB +#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC +#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD +#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE +#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF +#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 +#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 +#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 +#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_VERTEX_SUBROUTINE 0x92E8 +#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 +#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA +#define GL_GEOMETRY_SUBROUTINE 0x92EB +#define GL_FRAGMENT_SUBROUTINE 0x92EC +#define GL_COMPUTE_SUBROUTINE 0x92ED +#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE +#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF +#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 +#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 +#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 +#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 +#define GL_NAME_LENGTH 0x92F9 +#define GL_TYPE 0x92FA +#define GL_ARRAY_SIZE 0x92FB +#define GL_OFFSET 0x92FC +#define GL_BLOCK_INDEX 0x92FD +#define GL_ARRAY_STRIDE 0x92FE +#define GL_MATRIX_STRIDE 0x92FF +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_LOCATION 0x930E +#define GL_LOCATION_INDEX 0x930F +#define GL_IS_PER_PATCH 0x92E7 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB +#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC +#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD +#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_DISPLAY_LIST 0x82E7 +typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); +typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); +typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); +GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); +GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); +GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); +GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); +GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); +GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GLAPI void APIENTRY glPopDebugGroup (void); +GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_VERSION_4_3 */ + +#ifndef GL_VERSION_4_4 +#define GL_VERSION_4_4 1 +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_TEXTURE_BUFFER_BINDING 0x8C2A +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_COHERENT_BIT 0x0080 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_STORAGE_FLAGS 0x8220 +#define GL_CLEAR_TEXTURE 0x9365 +#define GL_LOCATION_COMPONENT 0x934A +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 +typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); +GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#endif +#endif /* GL_VERSION_4_4 */ + +#ifndef GL_ARB_ES2_compatibility +#define GL_ARB_ES2_compatibility 1 +#endif /* GL_ARB_ES2_compatibility */ + +#ifndef GL_ARB_ES3_compatibility +#define GL_ARB_ES3_compatibility 1 +#endif /* GL_ARB_ES3_compatibility */ + +#ifndef GL_ARB_arrays_of_arrays +#define GL_ARB_arrays_of_arrays 1 +#endif /* GL_ARB_arrays_of_arrays */ + +#ifndef GL_ARB_base_instance +#define GL_ARB_base_instance 1 +#endif /* GL_ARB_base_instance */ + +#ifndef GL_ARB_bindless_texture +#define GL_ARB_bindless_texture 1 +typedef uint64_t GLuint64EXT; +#define GL_UNSIGNED_INT64_ARB 0x140F +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_ARB_bindless_texture */ + +#ifndef GL_ARB_blend_func_extended +#define GL_ARB_blend_func_extended 1 +#endif /* GL_ARB_blend_func_extended */ + +#ifndef GL_ARB_buffer_storage +#define GL_ARB_buffer_storage 1 +#endif /* GL_ARB_buffer_storage */ + +#ifndef GL_ARB_cl_event +#define GL_ARB_cl_event 1 +struct _cl_context; +struct _cl_event; +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#endif +#endif /* GL_ARB_cl_event */ + +#ifndef GL_ARB_clear_buffer_object +#define GL_ARB_clear_buffer_object 1 +#endif /* GL_ARB_clear_buffer_object */ + +#ifndef GL_ARB_clear_texture +#define GL_ARB_clear_texture 1 +#endif /* GL_ARB_clear_texture */ + +#ifndef GL_ARB_color_buffer_float +#define GL_ARB_color_buffer_float 1 +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY_ARB 0x891D +typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); +#endif +#endif /* GL_ARB_color_buffer_float */ + +#ifndef GL_ARB_compatibility +#define GL_ARB_compatibility 1 +#endif /* GL_ARB_compatibility */ + +#ifndef GL_ARB_compressed_texture_pixel_storage +#define GL_ARB_compressed_texture_pixel_storage 1 +#endif /* GL_ARB_compressed_texture_pixel_storage */ + +#ifndef GL_ARB_compute_shader +#define GL_ARB_compute_shader 1 +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#endif /* GL_ARB_compute_shader */ + +#ifndef GL_ARB_compute_variable_group_size +#define GL_ARB_compute_variable_group_size 1 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 +#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB +#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 +#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +#endif +#endif /* GL_ARB_compute_variable_group_size */ + +#ifndef GL_ARB_conservative_depth +#define GL_ARB_conservative_depth 1 +#endif /* GL_ARB_conservative_depth */ + +#ifndef GL_ARB_copy_buffer +#define GL_ARB_copy_buffer 1 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#endif /* GL_ARB_copy_buffer */ + +#ifndef GL_ARB_copy_image +#define GL_ARB_copy_image 1 +#endif /* GL_ARB_copy_image */ + +#ifndef GL_ARB_debug_output +#define GL_ARB_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#endif +#endif /* GL_ARB_debug_output */ + +#ifndef GL_ARB_depth_buffer_float +#define GL_ARB_depth_buffer_float 1 +#endif /* GL_ARB_depth_buffer_float */ + +#ifndef GL_ARB_depth_clamp +#define GL_ARB_depth_clamp 1 +#endif /* GL_ARB_depth_clamp */ + +#ifndef GL_ARB_depth_texture +#define GL_ARB_depth_texture 1 +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#endif /* GL_ARB_depth_texture */ + +#ifndef GL_ARB_draw_buffers +#define GL_ARB_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER15_ARB 0x8834 +typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ARB_draw_buffers */ + +#ifndef GL_ARB_draw_buffers_blend +#define GL_ARB_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#endif +#endif /* GL_ARB_draw_buffers_blend */ + +#ifndef GL_ARB_draw_elements_base_vertex +#define GL_ARB_draw_elements_base_vertex 1 +#endif /* GL_ARB_draw_elements_base_vertex */ + +#ifndef GL_ARB_draw_indirect +#define GL_ARB_draw_indirect 1 +#endif /* GL_ARB_draw_indirect */ + +#ifndef GL_ARB_draw_instanced +#define GL_ARB_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_ARB_draw_instanced */ + +#ifndef GL_ARB_enhanced_layouts +#define GL_ARB_enhanced_layouts 1 +#endif /* GL_ARB_enhanced_layouts */ + +#ifndef GL_ARB_explicit_attrib_location +#define GL_ARB_explicit_attrib_location 1 +#endif /* GL_ARB_explicit_attrib_location */ + +#ifndef GL_ARB_explicit_uniform_location +#define GL_ARB_explicit_uniform_location 1 +#endif /* GL_ARB_explicit_uniform_location */ + +#ifndef GL_ARB_fragment_coord_conventions +#define GL_ARB_fragment_coord_conventions 1 +#endif /* GL_ARB_fragment_coord_conventions */ + +#ifndef GL_ARB_fragment_layer_viewport +#define GL_ARB_fragment_layer_viewport 1 +#endif /* GL_ARB_fragment_layer_viewport */ + +#ifndef GL_ARB_fragment_program +#define GL_ARB_fragment_program 1 +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); +GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string); +GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); +#endif +#endif /* GL_ARB_fragment_program */ + +#ifndef GL_ARB_fragment_program_shadow +#define GL_ARB_fragment_program_shadow 1 +#endif /* GL_ARB_fragment_program_shadow */ + +#ifndef GL_ARB_fragment_shader +#define GL_ARB_fragment_shader 1 +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#endif /* GL_ARB_fragment_shader */ + +#ifndef GL_ARB_framebuffer_no_attachments +#define GL_ARB_framebuffer_no_attachments 1 +#endif /* GL_ARB_framebuffer_no_attachments */ + +#ifndef GL_ARB_framebuffer_object +#define GL_ARB_framebuffer_object 1 +#endif /* GL_ARB_framebuffer_object */ + +#ifndef GL_ARB_framebuffer_sRGB +#define GL_ARB_framebuffer_sRGB 1 +#endif /* GL_ARB_framebuffer_sRGB */ + +#ifndef GL_KHR_context_flush_control +#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC +#endif /* GL_KHR_context_flush_control */ + +#ifndef GL_ARB_geometry_shader4 +#define GL_ARB_geometry_shader4 1 +#define GL_LINES_ADJACENCY_ARB 0x000A +#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B +#define GL_TRIANGLES_ADJACENCY_ARB 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 +#define GL_GEOMETRY_SHADER_ARB 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_ARB_geometry_shader4 */ + +#ifndef GL_ARB_get_program_binary +#define GL_ARB_get_program_binary 1 +#endif /* GL_ARB_get_program_binary */ + +#ifndef GL_ARB_gpu_shader5 +#define GL_ARB_gpu_shader5 1 +#endif /* GL_ARB_gpu_shader5 */ + +#ifndef GL_ARB_gpu_shader_fp64 +#define GL_ARB_gpu_shader_fp64 1 +#endif /* GL_ARB_gpu_shader_fp64 */ + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 +typedef unsigned short GLhalfARB; +#define GL_HALF_FLOAT_ARB 0x140B +#endif /* GL_ARB_half_float_pixel */ + +#ifndef GL_ARB_half_float_vertex +#define GL_ARB_half_float_vertex 1 +#endif /* GL_ARB_half_float_vertex */ + +#ifndef GL_ARB_imaging +#define GL_ARB_imaging 1 +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_EQUATION 0x8009 +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogram (GLenum target); +GLAPI void APIENTRY glResetMinmax (GLenum target); +#endif +#endif /* GL_ARB_imaging */ + +#ifndef GL_ARB_indirect_parameters +#define GL_ARB_indirect_parameters 1 +#define GL_PARAMETER_BUFFER_ARB 0x80EE +#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#endif +#endif /* GL_ARB_indirect_parameters */ + +#ifndef GL_ARB_instanced_arrays +#define GL_ARB_instanced_arrays 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); +#endif +#endif /* GL_ARB_instanced_arrays */ + +#ifndef GL_ARB_internalformat_query +#define GL_ARB_internalformat_query 1 +#endif /* GL_ARB_internalformat_query */ + +#ifndef GL_ARB_internalformat_query2 +#define GL_ARB_internalformat_query2 1 +#define GL_SRGB_DECODE_ARB 0x8299 +#endif /* GL_ARB_internalformat_query2 */ + +#ifndef GL_ARB_invalidate_subdata +#define GL_ARB_invalidate_subdata 1 +#endif /* GL_ARB_invalidate_subdata */ + +#ifndef GL_ARB_map_buffer_alignment +#define GL_ARB_map_buffer_alignment 1 +#endif /* GL_ARB_map_buffer_alignment */ + +#ifndef GL_ARB_map_buffer_range +#define GL_ARB_map_buffer_range 1 +#endif /* GL_ARB_map_buffer_range */ + +#ifndef GL_ARB_matrix_palette +#define GL_ARB_matrix_palette 1 +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); +typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); +GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); +GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); +GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); +GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_ARB_matrix_palette */ + +#ifndef GL_ARB_multi_bind +#define GL_ARB_multi_bind 1 +#endif /* GL_ARB_multi_bind */ + +#ifndef GL_ARB_multi_draw_indirect +#define GL_ARB_multi_draw_indirect 1 +#endif /* GL_ARB_multi_draw_indirect */ + +#ifndef GL_ARB_multisample +#define GL_ARB_multisample 1 +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); +#endif +#endif /* GL_ARB_multisample */ + +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); +#endif +#endif /* GL_ARB_multitexture */ + +#ifndef GL_ARB_occlusion_query +#define GL_ARB_occlusion_query 1 +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_SAMPLES_PASSED_ARB 0x8914 +typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); +GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQueryARB (GLenum target); +GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_ARB_occlusion_query */ + +#ifndef GL_ARB_occlusion_query2 +#define GL_ARB_occlusion_query2 1 +#endif /* GL_ARB_occlusion_query2 */ + +#ifndef GL_ARB_pixel_buffer_object +#define GL_ARB_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#endif /* GL_ARB_pixel_buffer_object */ + +#ifndef GL_ARB_point_parameters +#define GL_ARB_point_parameters 1 +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_ARB_point_parameters */ + +#ifndef GL_ARB_point_sprite +#define GL_ARB_point_sprite 1 +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 +#endif /* GL_ARB_point_sprite */ + +#ifndef GL_ARB_program_interface_query +#define GL_ARB_program_interface_query 1 +#endif /* GL_ARB_program_interface_query */ + +#ifndef GL_ARB_provoking_vertex +#define GL_ARB_provoking_vertex 1 +#endif /* GL_ARB_provoking_vertex */ + +#ifndef GL_ARB_query_buffer_object +#define GL_ARB_query_buffer_object 1 +#endif /* GL_ARB_query_buffer_object */ + +#ifndef GL_ARB_robust_buffer_access_behavior +#define GL_ARB_robust_buffer_access_behavior 1 +#endif /* GL_ARB_robust_buffer_access_behavior */ + +#ifndef GL_ARB_robustness +#define GL_ARB_robustness 1 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 +typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); +typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); +typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); +typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); +GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); +GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); +GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); +GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); +GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); +GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#endif +#endif /* GL_ARB_robustness */ + +#ifndef GL_ARB_robustness_isolation +#define GL_ARB_robustness_isolation 1 +#endif /* GL_ARB_robustness_isolation */ + +#ifndef GL_ARB_sample_shading +#define GL_ARB_sample_shading 1 +#define GL_SAMPLE_SHADING_ARB 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); +#endif +#endif /* GL_ARB_sample_shading */ + +#ifndef GL_ARB_sampler_objects +#define GL_ARB_sampler_objects 1 +#endif /* GL_ARB_sampler_objects */ + +#ifndef GL_ARB_seamless_cube_map +#define GL_ARB_seamless_cube_map 1 +#endif /* GL_ARB_seamless_cube_map */ + +#ifndef GL_ARB_seamless_cubemap_per_texture +#define GL_ARB_seamless_cubemap_per_texture 1 +#endif /* GL_ARB_seamless_cubemap_per_texture */ + +#ifndef GL_ARB_separate_shader_objects +#define GL_ARB_separate_shader_objects 1 +#endif /* GL_ARB_separate_shader_objects */ + +#ifndef GL_ARB_shader_atomic_counters +#define GL_ARB_shader_atomic_counters 1 +#endif /* GL_ARB_shader_atomic_counters */ + +#ifndef GL_ARB_shader_bit_encoding +#define GL_ARB_shader_bit_encoding 1 +#endif /* GL_ARB_shader_bit_encoding */ + +#ifndef GL_ARB_shader_draw_parameters +#define GL_ARB_shader_draw_parameters 1 +#endif /* GL_ARB_shader_draw_parameters */ + +#ifndef GL_ARB_shader_group_vote +#define GL_ARB_shader_group_vote 1 +#endif /* GL_ARB_shader_group_vote */ + +#ifndef GL_ARB_shader_image_load_store +#define GL_ARB_shader_image_load_store 1 +#endif /* GL_ARB_shader_image_load_store */ + +#ifndef GL_ARB_shader_image_size +#define GL_ARB_shader_image_size 1 +#endif /* GL_ARB_shader_image_size */ + +#ifndef GL_ARB_shader_objects +#define GL_ARB_shader_objects 1 +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef char GLcharARB; +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); +typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); +GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); +GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); +GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); +GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); +GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); +GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); +GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); +GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); +GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#endif +#endif /* GL_ARB_shader_objects */ + +#ifndef GL_ARB_shader_precision +#define GL_ARB_shader_precision 1 +#endif /* GL_ARB_shader_precision */ + +#ifndef GL_ARB_shader_stencil_export +#define GL_ARB_shader_stencil_export 1 +#endif /* GL_ARB_shader_stencil_export */ + +#ifndef GL_ARB_shader_storage_buffer_object +#define GL_ARB_shader_storage_buffer_object 1 +#endif /* GL_ARB_shader_storage_buffer_object */ + +#ifndef GL_ARB_shader_subroutine +#define GL_ARB_shader_subroutine 1 +#endif /* GL_ARB_shader_subroutine */ + +#ifndef GL_ARB_shader_texture_lod +#define GL_ARB_shader_texture_lod 1 +#endif /* GL_ARB_shader_texture_lod */ + +#ifndef GL_ARB_shading_language_100 +#define GL_ARB_shading_language_100 1 +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#endif /* GL_ARB_shading_language_100 */ + +#ifndef GL_ARB_shading_language_420pack +#define GL_ARB_shading_language_420pack 1 +#endif /* GL_ARB_shading_language_420pack */ + +#ifndef GL_ARB_shading_language_include +#define GL_ARB_shading_language_include 1 +#define GL_SHADER_INCLUDE_ARB 0x8DAE +#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 +#define GL_NAMED_STRING_TYPE_ARB 0x8DEA +typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#endif +#endif /* GL_ARB_shading_language_include */ + +#ifndef GL_ARB_shading_language_packing +#define GL_ARB_shading_language_packing 1 +#endif /* GL_ARB_shading_language_packing */ + +#ifndef GL_ARB_shadow +#define GL_ARB_shadow 1 +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#endif /* GL_ARB_shadow */ + +#ifndef GL_ARB_shadow_ambient +#define GL_ARB_shadow_ambient 1 +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#endif /* GL_ARB_shadow_ambient */ + +#ifndef GL_ARB_sparse_texture +#define GL_ARB_sparse_texture 1 +#define GL_TEXTURE_SPARSE_ARB 0x91A6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 +#define GL_MIN_SPARSE_LEVEL_ARB 0x919B +#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 +#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 +typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +#endif +#endif /* GL_ARB_sparse_texture */ + +#ifndef GL_ARB_stencil_texturing +#define GL_ARB_stencil_texturing 1 +#endif /* GL_ARB_stencil_texturing */ + +#ifndef GL_ARB_sync +#define GL_ARB_sync 1 +#endif /* GL_ARB_sync */ + +#ifndef GL_ARB_tessellation_shader +#define GL_ARB_tessellation_shader 1 +#endif /* GL_ARB_tessellation_shader */ + +#ifndef GL_ARB_texture_border_clamp +#define GL_ARB_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#endif /* GL_ARB_texture_border_clamp */ + +#ifndef GL_ARB_texture_buffer_object +#define GL_ARB_texture_buffer_object 1 +#define GL_TEXTURE_BUFFER_ARB 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E +typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_ARB_texture_buffer_object */ + +#ifndef GL_ARB_texture_buffer_object_rgb32 +#define GL_ARB_texture_buffer_object_rgb32 1 +#endif /* GL_ARB_texture_buffer_object_rgb32 */ + +#ifndef GL_ARB_texture_buffer_range +#define GL_ARB_texture_buffer_range 1 +#endif /* GL_ARB_texture_buffer_range */ + +#ifndef GL_ARB_texture_compression +#define GL_ARB_texture_compression 1 +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img); +#endif +#endif /* GL_ARB_texture_compression */ + +#ifndef GL_ARB_texture_compression_bptc +#define GL_ARB_texture_compression_bptc 1 +#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F +#endif /* GL_ARB_texture_compression_bptc */ + +#ifndef GL_ARB_texture_compression_rgtc +#define GL_ARB_texture_compression_rgtc 1 +#endif /* GL_ARB_texture_compression_rgtc */ + +#ifndef GL_ARB_texture_cube_map +#define GL_ARB_texture_cube_map 1 +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C +#endif /* GL_ARB_texture_cube_map */ + +#ifndef GL_ARB_texture_cube_map_array +#define GL_ARB_texture_cube_map_array 1 +#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#endif /* GL_ARB_texture_cube_map_array */ + +#ifndef GL_ARB_texture_env_add +#define GL_ARB_texture_env_add 1 +#endif /* GL_ARB_texture_env_add */ + +#ifndef GL_ARB_texture_env_combine +#define GL_ARB_texture_env_combine 1 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_CONSTANT_ARB 0x8576 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PREVIOUS_ARB 0x8578 +#endif /* GL_ARB_texture_env_combine */ + +#ifndef GL_ARB_texture_env_crossbar +#define GL_ARB_texture_env_crossbar 1 +#endif /* GL_ARB_texture_env_crossbar */ + +#ifndef GL_ARB_texture_env_dot3 +#define GL_ARB_texture_env_dot3 1 +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGBA_ARB 0x86AF +#endif /* GL_ARB_texture_env_dot3 */ + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#endif /* GL_ARB_texture_float */ + +#ifndef GL_ARB_texture_gather +#define GL_ARB_texture_gather 1 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F +#endif /* GL_ARB_texture_gather */ + +#ifndef GL_ARB_texture_mirror_clamp_to_edge +#define GL_ARB_texture_mirror_clamp_to_edge 1 +#endif /* GL_ARB_texture_mirror_clamp_to_edge */ + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#endif /* GL_ARB_texture_mirrored_repeat */ + +#ifndef GL_ARB_texture_multisample +#define GL_ARB_texture_multisample 1 +#endif /* GL_ARB_texture_multisample */ + +#ifndef GL_ARB_texture_non_power_of_two +#define GL_ARB_texture_non_power_of_two 1 +#endif /* GL_ARB_texture_non_power_of_two */ + +#ifndef GL_ARB_texture_query_levels +#define GL_ARB_texture_query_levels 1 +#endif /* GL_ARB_texture_query_levels */ + +#ifndef GL_ARB_texture_query_lod +#define GL_ARB_texture_query_lod 1 +#endif /* GL_ARB_texture_query_lod */ + +#ifndef GL_ARB_texture_rectangle +#define GL_ARB_texture_rectangle 1 +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#endif /* GL_ARB_texture_rectangle */ + +#ifndef GL_ARB_texture_rg +#define GL_ARB_texture_rg 1 +#endif /* GL_ARB_texture_rg */ + +#ifndef GL_ARB_texture_rgb10_a2ui +#define GL_ARB_texture_rgb10_a2ui 1 +#endif /* GL_ARB_texture_rgb10_a2ui */ + +#ifndef GL_ARB_texture_stencil8 +#define GL_ARB_texture_stencil8 1 +#endif /* GL_ARB_texture_stencil8 */ + +#ifndef GL_ARB_texture_storage +#define GL_ARB_texture_storage 1 +#endif /* GL_ARB_texture_storage */ + +#ifndef GL_ARB_texture_storage_multisample +#define GL_ARB_texture_storage_multisample 1 +#endif /* GL_ARB_texture_storage_multisample */ + +#ifndef GL_ARB_texture_swizzle +#define GL_ARB_texture_swizzle 1 +#endif /* GL_ARB_texture_swizzle */ + +#ifndef GL_ARB_texture_view +#define GL_ARB_texture_view 1 +#endif /* GL_ARB_texture_view */ + +#ifndef GL_ARB_timer_query +#define GL_ARB_timer_query 1 +#endif /* GL_ARB_timer_query */ + +#ifndef GL_ARB_transform_feedback2 +#define GL_ARB_transform_feedback2 1 +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#endif /* GL_ARB_transform_feedback2 */ + +#ifndef GL_ARB_transform_feedback3 +#define GL_ARB_transform_feedback3 1 +#endif /* GL_ARB_transform_feedback3 */ + +#ifndef GL_ARB_transform_feedback_instanced +#define GL_ARB_transform_feedback_instanced 1 +#endif /* GL_ARB_transform_feedback_instanced */ + +#ifndef GL_ARB_transpose_matrix +#define GL_ARB_transpose_matrix 1 +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); +#endif +#endif /* GL_ARB_transpose_matrix */ + +#ifndef GL_ARB_uniform_buffer_object +#define GL_ARB_uniform_buffer_object 1 +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#endif /* GL_ARB_uniform_buffer_object */ + +#ifndef GL_ARB_vertex_array_bgra +#define GL_ARB_vertex_array_bgra 1 +#endif /* GL_ARB_vertex_array_bgra */ + +#ifndef GL_ARB_vertex_array_object +#define GL_ARB_vertex_array_object 1 +#endif /* GL_ARB_vertex_array_object */ + +#ifndef GL_ARB_vertex_attrib_64bit +#define GL_ARB_vertex_attrib_64bit 1 +#endif /* GL_ARB_vertex_attrib_64bit */ + +#ifndef GL_ARB_vertex_attrib_binding +#define GL_ARB_vertex_attrib_binding 1 +#endif /* GL_ARB_vertex_attrib_binding */ + +#ifndef GL_ARB_vertex_blend +#define GL_ARB_vertex_blend 1 +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F +typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); +typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); +typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); +typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); +typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); +typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); +typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); +GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); +GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); +GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); +GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); +GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); +GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); +GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); +GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexBlendARB (GLint count); +#endif +#endif /* GL_ARB_vertex_blend */ + +#ifndef GL_ARB_vertex_buffer_object +#define GL_ARB_vertex_buffer_object 1 +#ifdef __MACOSX__ /* The OS X headers haven't caught up with Khronos yet */ +typedef long GLsizeiptrARB; +typedef long GLintptrARB; +#else +typedef ptrdiff_t GLsizeiptrARB; +typedef ptrdiff_t GLintptrARB; +#endif +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY_ARB 0x88EA +typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); +GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); +GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_ARB_vertex_buffer_object */ + +#ifndef GL_ARB_vertex_program +#define GL_ARB_vertex_program 1 +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer); +#endif +#endif /* GL_ARB_vertex_program */ + +#ifndef GL_ARB_vertex_shader +#define GL_ARB_vertex_shader 1 +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); +#endif +#endif /* GL_ARB_vertex_shader */ + +#ifndef GL_ARB_vertex_type_10f_11f_11f_rev +#define GL_ARB_vertex_type_10f_11f_11f_rev 1 +#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ + +#ifndef GL_ARB_vertex_type_2_10_10_10_rev +#define GL_ARB_vertex_type_2_10_10_10_rev 1 +#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ + +#ifndef GL_ARB_viewport_array +#define GL_ARB_viewport_array 1 +#endif /* GL_ARB_viewport_array */ + +#ifndef GL_ARB_window_pos +#define GL_ARB_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); +#endif +#endif /* GL_ARB_window_pos */ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +#endif /* GL_KHR_debug */ + +#ifndef GL_KHR_texture_compression_astc_hdr +#define GL_KHR_texture_compression_astc_hdr 1 +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#endif /* GL_KHR_texture_compression_astc_hdr */ + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif /* GL_KHR_texture_compression_astc_ldr */ + +#ifndef GL_OES_byte_coordinates +#define GL_OES_byte_coordinates 1 +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); +typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x); +typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y); +typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z); +typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); +GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); +GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); +GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); +GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex2bOES (GLbyte x); +GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y); +GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z); +GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); +#endif +#endif /* GL_OES_byte_coordinates */ + +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#endif /* GL_OES_compressed_paletted_texture */ + +#ifndef GL_OES_fixed_point +#define GL_OES_fixed_point 1 +typedef GLint GLfixed; +#define GL_FIXED_OES 0x140C +typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); +typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); +typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); +typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); +typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); +typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); +typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); +typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEOESPROC) (GLfixed value, GLboolean invert); +typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); +typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); +typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); +typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); +typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); +typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); +typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); +typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); +typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); +typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); +typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); +typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); +typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); +typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); +typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); +GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); +GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); +GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); +GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); +GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glLineWidthxOES (GLfixed width); +GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); +GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glPointSizexOES (GLfixed size); +GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); +GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glSampleCoverageOES (GLfixed value, GLboolean invert); +GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); +GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); +GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); +GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); +GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); +GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); +GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); +GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); +GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); +GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glIndexxOES (GLfixed component); +GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); +GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); +GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); +GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); +GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glPassThroughxOES (GLfixed token); +GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); +GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); +GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); +GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); +GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); +GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); +GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glVertex2xOES (GLfixed x); +GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); +#endif +#endif /* GL_OES_fixed_point */ + +#ifndef GL_OES_query_matrix +#define GL_OES_query_matrix 1 +typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); +#endif +#endif /* GL_OES_query_matrix */ + +#ifndef GL_OES_read_format +#define GL_OES_read_format 1 +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#endif /* GL_OES_read_format */ + +#ifndef GL_OES_single_precision +#define GL_OES_single_precision 1 +typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); +typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); +typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); +typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); +typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); +GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); +GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); +GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); +GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#endif +#endif /* GL_OES_single_precision */ + +#ifndef GL_3DFX_multisample +#define GL_3DFX_multisample 1 +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 +#endif /* GL_3DFX_multisample */ + +#ifndef GL_3DFX_tbuffer +#define GL_3DFX_tbuffer 1 +typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); +#endif +#endif /* GL_3DFX_tbuffer */ + +#ifndef GL_3DFX_texture_compression_FXT1 +#define GL_3DFX_texture_compression_FXT1 1 +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 +#endif /* GL_3DFX_texture_compression_FXT1 */ + +#ifndef GL_AMD_blend_minmax_factor +#define GL_AMD_blend_minmax_factor 1 +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FACTOR_MAX_AMD 0x901D +#endif /* GL_AMD_blend_minmax_factor */ + +#ifndef GL_AMD_conservative_depth +#define GL_AMD_conservative_depth 1 +#endif /* GL_AMD_conservative_depth */ + +#ifndef GL_AMD_debug_output +#define GL_AMD_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#endif +#endif /* GL_AMD_debug_output */ + +#ifndef GL_AMD_depth_clamp_separate +#define GL_AMD_depth_clamp_separate 1 +#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E +#define GL_DEPTH_CLAMP_FAR_AMD 0x901F +#endif /* GL_AMD_depth_clamp_separate */ + +#ifndef GL_AMD_draw_buffers_blend +#define GL_AMD_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_AMD_draw_buffers_blend */ + +#ifndef GL_AMD_gcn_shader +#define GL_AMD_gcn_shader 1 +#endif /* GL_AMD_gcn_shader */ + +#ifndef GL_AMD_gpu_shader_int64 +#define GL_AMD_gpu_shader_int64 1 +typedef int64_t GLint64EXT; +#define GL_INT64_NV 0x140E +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); +GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); +GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); +GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); +GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); +GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); +GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_AMD_gpu_shader_int64 */ + +#ifndef GL_AMD_interleaved_elements +#define GL_AMD_interleaved_elements 1 +#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 +#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 +typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param); +#endif +#endif /* GL_AMD_interleaved_elements */ + +#ifndef GL_AMD_multi_draw_indirect +#define GL_AMD_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#endif +#endif /* GL_AMD_multi_draw_indirect */ + +#ifndef GL_AMD_name_gen_delete +#define GL_AMD_name_gen_delete 1 +#define GL_DATA_BUFFER_AMD 0x9151 +#define GL_PERFORMANCE_MONITOR_AMD 0x9152 +#define GL_QUERY_OBJECT_AMD 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 +#define GL_SAMPLER_OBJECT_AMD 0x9155 +typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); +typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); +typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); +GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); +GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); +#endif +#endif /* GL_AMD_name_gen_delete */ + +#ifndef GL_AMD_occlusion_query_event +#define GL_AMD_occlusion_query_event 1 +#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F +#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 +#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 +#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 +#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 +#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF +typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param); +#endif +#endif /* GL_AMD_occlusion_query_event */ + +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); +typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); +GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +#endif /* GL_AMD_performance_monitor */ + +#ifndef GL_AMD_pinned_memory +#define GL_AMD_pinned_memory 1 +#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 +#endif /* GL_AMD_pinned_memory */ + +#ifndef GL_AMD_query_buffer_object +#define GL_AMD_query_buffer_object 1 +#define GL_QUERY_BUFFER_AMD 0x9192 +#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 +#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 +#endif /* GL_AMD_query_buffer_object */ + +#ifndef GL_AMD_sample_positions +#define GL_AMD_sample_positions 1 +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); +#endif +#endif /* GL_AMD_sample_positions */ + +#ifndef GL_AMD_seamless_cubemap_per_texture +#define GL_AMD_seamless_cubemap_per_texture 1 +#endif /* GL_AMD_seamless_cubemap_per_texture */ + +#ifndef GL_AMD_shader_atomic_counter_ops +#define GL_AMD_shader_atomic_counter_ops 1 +#endif /* GL_AMD_shader_atomic_counter_ops */ + +#ifndef GL_AMD_shader_stencil_export +#define GL_AMD_shader_stencil_export 1 +#endif /* GL_AMD_shader_stencil_export */ + +#ifndef GL_AMD_shader_trinary_minmax +#define GL_AMD_shader_trinary_minmax 1 +#endif /* GL_AMD_shader_trinary_minmax */ + +#ifndef GL_AMD_sparse_texture +#define GL_AMD_sparse_texture 1 +#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A +#define GL_MIN_SPARSE_LEVEL_AMD 0x919B +#define GL_MIN_LOD_WARNING_AMD 0x919C +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#endif +#endif /* GL_AMD_sparse_texture */ + +#ifndef GL_AMD_stencil_operation_extended +#define GL_AMD_stencil_operation_extended 1 +#define GL_SET_AMD 0x874A +#define GL_REPLACE_VALUE_AMD 0x874B +#define GL_STENCIL_OP_VALUE_AMD 0x874C +#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D +typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); +#endif +#endif /* GL_AMD_stencil_operation_extended */ + +#ifndef GL_AMD_texture_texture4 +#define GL_AMD_texture_texture4 1 +#endif /* GL_AMD_texture_texture4 */ + +#ifndef GL_AMD_transform_feedback3_lines_triangles +#define GL_AMD_transform_feedback3_lines_triangles 1 +#endif /* GL_AMD_transform_feedback3_lines_triangles */ + +#ifndef GL_AMD_transform_feedback4 +#define GL_AMD_transform_feedback4 1 +#define GL_STREAM_RASTERIZATION_AMD 0x91A0 +#endif /* GL_AMD_transform_feedback4 */ + +#ifndef GL_AMD_vertex_shader_layer +#define GL_AMD_vertex_shader_layer 1 +#endif /* GL_AMD_vertex_shader_layer */ + +#ifndef GL_AMD_vertex_shader_tessellator +#define GL_AMD_vertex_shader_tessellator 1 +#define GL_SAMPLER_BUFFER_AMD 0x9001 +#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 +#define GL_TESSELLATION_MODE_AMD 0x9004 +#define GL_TESSELLATION_FACTOR_AMD 0x9005 +#define GL_DISCRETE_AMD 0x9006 +#define GL_CONTINUOUS_AMD 0x9007 +typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); +GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); +#endif +#endif /* GL_AMD_vertex_shader_tessellator */ + +#ifndef GL_AMD_vertex_shader_viewport_index +#define GL_AMD_vertex_shader_viewport_index 1 +#endif /* GL_AMD_vertex_shader_viewport_index */ + +#ifndef GL_APPLE_aux_depth_stencil +#define GL_APPLE_aux_depth_stencil 1 +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#endif /* GL_APPLE_aux_depth_stencil */ + +#ifndef GL_APPLE_client_storage +#define GL_APPLE_client_storage 1 +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#endif /* GL_APPLE_client_storage */ + +#ifndef GL_APPLE_element_array +#define GL_APPLE_element_array 1 +#define GL_ELEMENT_ARRAY_APPLE 0x8A0C +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E +typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#endif +#endif /* GL_APPLE_element_array */ + +#ifndef GL_APPLE_fence +#define GL_APPLE_fence 1 +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B +typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); +typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); +typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); +GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); +GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); +GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); +#endif +#endif /* GL_APPLE_fence */ + +#ifndef GL_APPLE_float_pixels +#define GL_APPLE_float_pixels 1 +#define GL_HALF_APPLE 0x140B +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_COLOR_FLOAT_APPLE 0x8A0F +#endif /* GL_APPLE_float_pixels */ + +#ifndef GL_APPLE_flush_buffer_range +#define GL_APPLE_flush_buffer_range 1 +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 +typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); +#endif +#endif /* GL_APPLE_flush_buffer_range */ + +#ifndef GL_APPLE_object_purgeable +#define GL_APPLE_object_purgeable 1 +#define GL_BUFFER_OBJECT_APPLE 0x85B3 +#define GL_RELEASED_APPLE 0x8A19 +#define GL_VOLATILE_APPLE 0x8A1A +#define GL_RETAINED_APPLE 0x8A1B +#define GL_UNDEFINED_APPLE 0x8A1C +#define GL_PURGEABLE_APPLE 0x8A1D +typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#endif +#endif /* GL_APPLE_object_purgeable */ + +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_RGB_RAW_422_APPLE 0x8A51 +#endif /* GL_APPLE_rgb_422 */ + +#ifndef GL_APPLE_row_bytes +#define GL_APPLE_row_bytes 1 +#define GL_PACK_ROW_BYTES_APPLE 0x8A15 +#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 +#endif /* GL_APPLE_row_bytes */ + +#ifndef GL_APPLE_specular_vector +#define GL_APPLE_specular_vector 1 +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#endif /* GL_APPLE_specular_vector */ + +#ifndef GL_APPLE_texture_range +#define GL_APPLE_texture_range 1 +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF +typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_APPLE_texture_range */ + +#ifndef GL_APPLE_transform_hint +#define GL_APPLE_transform_hint 1 +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#endif /* GL_APPLE_transform_hint */ + +#ifndef GL_APPLE_vertex_array_object +#define GL_APPLE_vertex_array_object 1 +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); +GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); +#endif +#endif /* GL_APPLE_vertex_array_object */ + +#ifndef GL_APPLE_vertex_array_range +#define GL_APPLE_vertex_array_range 1 +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_STORAGE_CLIENT_APPLE 0x85B4 +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); +#endif +#endif /* GL_APPLE_vertex_array_range */ + +#ifndef GL_APPLE_vertex_program_evaluators +#define GL_APPLE_vertex_program_evaluators 1 +#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 +#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 +#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 +#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 +#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 +#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 +#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 +#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 +#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 +#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#endif +#endif /* GL_APPLE_vertex_program_evaluators */ + +#ifndef GL_APPLE_ycbcr_422 +#define GL_APPLE_ycbcr_422 1 +#define GL_YCBCR_422_APPLE 0x85B9 +#endif /* GL_APPLE_ycbcr_422 */ + +#ifndef GL_ATI_draw_buffers +#define GL_ATI_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER15_ATI 0x8834 +typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ATI_draw_buffers */ + +#ifndef GL_ATI_element_array +#define GL_ATI_element_array 1 +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); +#endif +#endif /* GL_ATI_element_array */ + +#ifndef GL_ATI_envmap_bumpmap +#define GL_ATI_envmap_bumpmap 1 +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_DUDV_ATI 0x8779 +#define GL_DU8DV8_ATI 0x877A +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_TARGET_ATI 0x877C +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); +GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); +GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); +#endif +#endif /* GL_ATI_envmap_bumpmap */ + +#ifndef GL_ATI_fragment_shader +#define GL_ATI_fragment_shader 1 +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_RED_BIT_ATI 0x00000001 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); +typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); +typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); +GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glBeginFragmentShaderATI (void); +GLAPI void APIENTRY glEndFragmentShaderATI (void); +GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); +GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); +GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); +#endif +#endif /* GL_ATI_fragment_shader */ + +#ifndef GL_ATI_map_object_buffer +#define GL_ATI_map_object_buffer 1 +typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); +#endif +#endif /* GL_ATI_map_object_buffer */ + +#ifndef GL_ATI_meminfo +#define GL_ATI_meminfo 1 +#define GL_VBO_FREE_MEMORY_ATI 0x87FB +#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC +#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD +#endif /* GL_ATI_meminfo */ + +#ifndef GL_ATI_pixel_format_float +#define GL_ATI_pixel_format_float 1 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#endif /* GL_ATI_pixel_format_float */ + +#ifndef GL_ATI_pn_triangles +#define GL_ATI_pn_triangles 1 +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); +GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_pn_triangles */ + +#ifndef GL_ATI_separate_stencil +#define GL_ATI_separate_stencil 1 +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#endif +#endif /* GL_ATI_separate_stencil */ + +#ifndef GL_ATI_text_fragment_shader +#define GL_ATI_text_fragment_shader 1 +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#endif /* GL_ATI_text_fragment_shader */ + +#ifndef GL_ATI_texture_env_combine3 +#define GL_ATI_texture_env_combine3 1 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#endif /* GL_ATI_texture_env_combine3 */ + +#ifndef GL_ATI_texture_float +#define GL_ATI_texture_float 1 +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#endif /* GL_ATI_texture_float */ + +#ifndef GL_ATI_texture_mirror_once +#define GL_ATI_texture_mirror_once 1 +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#endif /* GL_ATI_texture_mirror_once */ + +#ifndef GL_ATI_vertex_array_object +#define GL_ATI_vertex_array_object 1 +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage); +typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage); +GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); +GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_array_object */ + +#ifndef GL_ATI_vertex_attrib_array_object +#define GL_ATI_vertex_attrib_array_object 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_attrib_array_object */ + +#ifndef GL_ATI_vertex_streams +#define GL_ATI_vertex_streams 1 +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SOURCE_ATI 0x8774 +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); +GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); +GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); +GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); +GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); +GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); +GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); +GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); +GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); +GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_vertex_streams */ + +#ifndef GL_EXT_422_pixels +#define GL_EXT_422_pixels 1 +#define GL_422_EXT 0x80CC +#define GL_422_REV_EXT 0x80CD +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_REV_AVERAGE_EXT 0x80CF +#endif /* GL_EXT_422_pixels */ + +#ifndef GL_EXT_abgr +#define GL_EXT_abgr 1 +#define GL_ABGR_EXT 0x8000 +#endif /* GL_EXT_abgr */ + +#ifndef GL_EXT_bgra +#define GL_EXT_bgra 1 +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA_EXT 0x80E1 +#endif /* GL_EXT_bgra */ + +#ifndef GL_EXT_bindable_uniform +#define GL_EXT_bindable_uniform 1 +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF +typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); +typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); +typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); +GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); +GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); +#endif +#endif /* GL_EXT_bindable_uniform */ + +#ifndef GL_EXT_blend_color +#define GL_EXT_blend_color 1 +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_BLEND_COLOR_EXT 0x8005 +typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#endif +#endif /* GL_EXT_blend_color */ + +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 1 +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_EXT_blend_equation_separate */ + +#ifndef GL_EXT_blend_func_separate +#define GL_EXT_blend_func_separate 1 +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_EXT_blend_func_separate */ + +#ifndef GL_EXT_blend_logic_op +#define GL_EXT_blend_logic_op 1 +#endif /* GL_EXT_blend_logic_op */ + +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_BLEND_EQUATION_EXT 0x8009 +typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); +#endif +#endif /* GL_EXT_blend_minmax */ + +#ifndef GL_EXT_blend_subtract +#define GL_EXT_blend_subtract 1 +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#endif /* GL_EXT_blend_subtract */ + +#ifndef GL_EXT_clip_volume_hint +#define GL_EXT_clip_volume_hint 1 +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#endif /* GL_EXT_clip_volume_hint */ + +#ifndef GL_EXT_cmyka +#define GL_EXT_cmyka 1 +#define GL_CMYK_EXT 0x800C +#define GL_CMYKA_EXT 0x800D +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_UNPACK_CMYK_HINT_EXT 0x800F +#endif /* GL_EXT_cmyka */ + +#ifndef GL_EXT_color_subtable +#define GL_EXT_color_subtable 1 +typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#endif +#endif /* GL_EXT_color_subtable */ + +#ifndef GL_EXT_compiled_vertex_array +#define GL_EXT_compiled_vertex_array 1 +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 +typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); +GLAPI void APIENTRY glUnlockArraysEXT (void); +#endif +#endif /* GL_EXT_compiled_vertex_array */ + +#ifndef GL_EXT_convolution +#define GL_EXT_convolution 1 +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_REDUCE_EXT 0x8016 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#endif +#endif /* GL_EXT_convolution */ + +#ifndef GL_EXT_coordinate_frame +#define GL_EXT_coordinate_frame 1 +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP2_BINORMAL_EXT 0x8447 +typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); +typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); +typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); +typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); +typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); +typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); +typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); +typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); +typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); +typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); +typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); +GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); +GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); +GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); +GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); +GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); +GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); +GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); +GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); +GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); +GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); +GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); +GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); +GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); +GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_coordinate_frame */ + +#ifndef GL_EXT_copy_texture +#define GL_EXT_copy_texture 1 +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_copy_texture */ + +#ifndef GL_EXT_cull_vertex +#define GL_EXT_cull_vertex 1 +#define GL_CULL_VERTEX_EXT 0x81AA +#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB +#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC +typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); +GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_cull_vertex */ + +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_EXT_debug_label */ + +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPopGroupMarkerEXT (void); +#endif +#endif /* GL_EXT_debug_marker */ + +#ifndef GL_EXT_depth_bounds_test +#define GL_EXT_depth_bounds_test 1 +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); +#endif +#endif /* GL_EXT_depth_bounds_test */ + +#ifndef GL_EXT_direct_state_access +#define GL_EXT_direct_state_access 1 +#define GL_PROGRAM_MATRIX_EXT 0x8E2D +#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E +#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F +typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); +typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); +typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); +typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); +GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); +GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); +GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); +GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); +GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); +GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); +GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); +GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); +GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); +GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); +GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); +GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); +GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); +GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); +GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); +GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); +GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); +GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); +#endif +#endif /* GL_EXT_direct_state_access */ + +#ifndef GL_EXT_draw_buffers2 +#define GL_EXT_draw_buffers2 1 +typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#endif +#endif /* GL_EXT_draw_buffers2 */ + +#ifndef GL_EXT_draw_instanced +#define GL_EXT_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_EXT_draw_instanced */ + +#ifndef GL_EXT_draw_range_elements +#define GL_EXT_draw_range_elements 1 +#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 +#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#endif +#endif /* GL_EXT_draw_range_elements */ + +#ifndef GL_EXT_fog_coord +#define GL_EXT_fog_coord 1 +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 +typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); +GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); +GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); +GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_fog_coord */ + +#ifndef GL_EXT_framebuffer_blit +#define GL_EXT_framebuffer_blit 1 +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +#endif /* GL_EXT_framebuffer_blit */ + +#ifndef GL_EXT_framebuffer_multisample +#define GL_EXT_framebuffer_multisample 1 +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_framebuffer_multisample */ + +#ifndef GL_EXT_framebuffer_multisample_blit_scaled +#define GL_EXT_framebuffer_multisample_blit_scaled 1 +#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA +#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB +#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ + +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 1 +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); +#endif +#endif /* GL_EXT_framebuffer_object */ + +#ifndef GL_EXT_framebuffer_sRGB +#define GL_EXT_framebuffer_sRGB 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#endif /* GL_EXT_framebuffer_sRGB */ + +#ifndef GL_EXT_geometry_shader4 +#define GL_EXT_geometry_shader4 1 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +#endif +#endif /* GL_EXT_geometry_shader4 */ + +#ifndef GL_EXT_gpu_program_parameters +#define GL_EXT_gpu_program_parameters 1 +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#endif +#endif /* GL_EXT_gpu_program_parameters */ + +#ifndef GL_EXT_gpu_shader4 +#define GL_EXT_gpu_shader4 1 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 +typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); +#endif +#endif /* GL_EXT_gpu_shader4 */ + +#ifndef GL_EXT_histogram +#define GL_EXT_histogram 1 +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK_EXT 0x8030 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogramEXT (GLenum target); +GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); +#endif +#endif /* GL_EXT_histogram */ + +#ifndef GL_EXT_index_array_formats +#define GL_EXT_index_array_formats 1 +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#endif /* GL_EXT_index_array_formats */ + +#ifndef GL_EXT_index_func +#define GL_EXT_index_func 1 +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); +#endif +#endif /* GL_EXT_index_func */ + +#ifndef GL_EXT_index_material +#define GL_EXT_index_material 1 +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_index_material */ + +#ifndef GL_EXT_index_texture +#define GL_EXT_index_texture 1 +#endif /* GL_EXT_index_texture */ + +#ifndef GL_EXT_light_texture +#define GL_EXT_light_texture 1 +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_ATTENUATION_EXT 0x834D +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); +GLAPI void APIENTRY glTextureLightEXT (GLenum pname); +GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_light_texture */ + +#ifndef GL_EXT_misc_attribute +#define GL_EXT_misc_attribute 1 +#endif /* GL_EXT_misc_attribute */ + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#endif +#endif /* GL_EXT_multi_draw_arrays */ + +#ifndef GL_EXT_multisample +#define GL_EXT_multisample 1 +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_1PASS_EXT 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 +typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); +#endif +#endif /* GL_EXT_multisample */ + +#ifndef GL_EXT_packed_depth_stencil +#define GL_EXT_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#endif /* GL_EXT_packed_depth_stencil */ + +#ifndef GL_EXT_packed_float +#define GL_EXT_packed_float 1 +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C +#endif /* GL_EXT_packed_float */ + +#ifndef GL_EXT_packed_pixels +#define GL_EXT_packed_pixels 1 +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 +#endif /* GL_EXT_packed_pixels */ + +#ifndef GL_EXT_paletted_texture +#define GL_EXT_paletted_texture 1 +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data); +GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_paletted_texture */ + +#ifndef GL_EXT_pixel_buffer_object +#define GL_EXT_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#endif /* GL_EXT_pixel_buffer_object */ + +#ifndef GL_EXT_pixel_transform +#define GL_EXT_pixel_transform 1 +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_CUBIC_EXT 0x8334 +#define GL_AVERAGE_EXT 0x8335 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_pixel_transform */ + +#ifndef GL_EXT_pixel_transform_color_table +#define GL_EXT_pixel_transform_color_table 1 +#endif /* GL_EXT_pixel_transform_color_table */ + +#ifndef GL_EXT_point_parameters +#define GL_EXT_point_parameters 1 +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_EXT_point_parameters */ + +#ifndef GL_EXT_polygon_offset +#define GL_EXT_polygon_offset 1 +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 +typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); +#endif +#endif /* GL_EXT_polygon_offset */ + +#ifndef GL_EXT_provoking_vertex +#define GL_EXT_provoking_vertex 1 +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_PROVOKING_VERTEX_EXT 0x8E4F +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); +#endif +#endif /* GL_EXT_provoking_vertex */ + +#ifndef GL_EXT_rescale_normal +#define GL_EXT_rescale_normal 1 +#define GL_RESCALE_NORMAL_EXT 0x803A +#endif /* GL_EXT_rescale_normal */ + +#ifndef GL_EXT_secondary_color +#define GL_EXT_secondary_color 1 +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_secondary_color */ + +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); +typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); +GLAPI void APIENTRY glActiveProgramEXT (GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); +#endif +#endif /* GL_EXT_separate_shader_objects */ + +#ifndef GL_EXT_separate_specular_color +#define GL_EXT_separate_specular_color 1 +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA +#endif /* GL_EXT_separate_specular_color */ + +#ifndef GL_EXT_shader_image_load_formatted +#define GL_EXT_shader_image_load_formatted 1 +#endif /* GL_EXT_shader_image_load_formatted */ + +#ifndef GL_EXT_shader_image_load_store +#define GL_EXT_shader_image_load_store 1 +#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A +#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B +#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C +#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D +#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E +#define GL_IMAGE_1D_EXT 0x904C +#define GL_IMAGE_2D_EXT 0x904D +#define GL_IMAGE_3D_EXT 0x904E +#define GL_IMAGE_2D_RECT_EXT 0x904F +#define GL_IMAGE_CUBE_EXT 0x9050 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_IMAGE_1D_ARRAY_EXT 0x9052 +#define GL_IMAGE_2D_ARRAY_EXT 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 +#define GL_INT_IMAGE_1D_EXT 0x9057 +#define GL_INT_IMAGE_2D_EXT 0x9058 +#define GL_INT_IMAGE_3D_EXT 0x9059 +#define GL_INT_IMAGE_2D_RECT_EXT 0x905A +#define GL_INT_IMAGE_CUBE_EXT 0x905B +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D +#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C +#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D +#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 +#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 +#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); +#endif +#endif /* GL_EXT_shader_image_load_store */ + +#ifndef GL_EXT_shader_integer_mix +#define GL_EXT_shader_integer_mix 1 +#endif /* GL_EXT_shader_integer_mix */ + +#ifndef GL_EXT_shadow_funcs +#define GL_EXT_shadow_funcs 1 +#endif /* GL_EXT_shadow_funcs */ + +#ifndef GL_EXT_shared_texture_palette +#define GL_EXT_shared_texture_palette 1 +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#endif /* GL_EXT_shared_texture_palette */ + +#ifndef GL_EXT_stencil_clear_tag +#define GL_EXT_stencil_clear_tag 1 +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 +typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); +#endif +#endif /* GL_EXT_stencil_clear_tag */ + +#ifndef GL_EXT_stencil_two_side +#define GL_EXT_stencil_two_side 1 +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); +#endif +#endif /* GL_EXT_stencil_two_side */ + +#ifndef GL_EXT_stencil_wrap +#define GL_EXT_stencil_wrap 1 +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_DECR_WRAP_EXT 0x8508 +#endif /* GL_EXT_stencil_wrap */ + +#ifndef GL_EXT_subtexture +#define GL_EXT_subtexture 1 +typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_subtexture */ + +#ifndef GL_EXT_texture +#define GL_EXT_texture 1 +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16_EXT 0x803E +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16_EXT 0x804D +#define GL_RGB2_EXT 0x804E +#define GL_RGB4_EXT 0x804F +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8_EXT 0x8051 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGBA8_EXT 0x8058 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16_EXT 0x805B +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_REPLACE_EXT 0x8062 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#endif /* GL_EXT_texture */ + +#ifndef GL_EXT_texture3D +#define GL_EXT_texture3D 1 +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 +typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_texture3D */ + +#ifndef GL_EXT_texture_array +#define GL_EXT_texture_array 1 +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +#endif /* GL_EXT_texture_array */ + +#ifndef GL_EXT_texture_buffer_object +#define GL_EXT_texture_buffer_object 1 +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E +typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_EXT_texture_buffer_object */ + +#ifndef GL_EXT_texture_compression_latc +#define GL_EXT_texture_compression_latc 1 +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 +#endif /* GL_EXT_texture_compression_latc */ + +#ifndef GL_EXT_texture_compression_rgtc +#define GL_EXT_texture_compression_rgtc 1 +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE +#endif /* GL_EXT_texture_compression_rgtc */ + +#ifndef GL_EXT_texture_compression_s3tc +#define GL_EXT_texture_compression_s3tc 1 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#endif /* GL_EXT_texture_compression_s3tc */ + +#ifndef GL_EXT_texture_cube_map +#define GL_EXT_texture_cube_map 1 +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C +#endif /* GL_EXT_texture_cube_map */ + +#ifndef GL_EXT_texture_env_add +#define GL_EXT_texture_env_add 1 +#endif /* GL_EXT_texture_env_add */ + +#ifndef GL_EXT_texture_env_combine +#define GL_EXT_texture_env_combine 1 +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_CONSTANT_EXT 0x8576 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND2_ALPHA_EXT 0x859A +#endif /* GL_EXT_texture_env_combine */ + +#ifndef GL_EXT_texture_env_dot3 +#define GL_EXT_texture_env_dot3 1 +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 +#endif /* GL_EXT_texture_env_dot3 */ + +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif /* GL_EXT_texture_filter_anisotropic */ + +#ifndef GL_EXT_texture_integer +#define GL_EXT_texture_integer 1 +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGB8UI_EXT 0x8D7D +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGB32I_EXT 0x8D83 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGB16I_EXT 0x8D89 +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGB8I_EXT 0x8D8F +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); +typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); +GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#endif +#endif /* GL_EXT_texture_integer */ + +#ifndef GL_EXT_texture_lod_bias +#define GL_EXT_texture_lod_bias 1 +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 +#endif /* GL_EXT_texture_lod_bias */ + +#ifndef GL_EXT_texture_mirror_clamp +#define GL_EXT_texture_mirror_clamp 1 +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#endif /* GL_EXT_texture_mirror_clamp */ + +#ifndef GL_EXT_texture_object +#define GL_EXT_texture_object 1 +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_3D_BINDING_EXT 0x806A +typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); +typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); +GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); +GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); +GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); +GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); +GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#endif +#endif /* GL_EXT_texture_object */ + +#ifndef GL_EXT_texture_perturb_normal +#define GL_EXT_texture_perturb_normal 1 +#define GL_PERTURB_EXT 0x85AE +#define GL_TEXTURE_NORMAL_EXT 0x85AF +typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); +#endif +#endif /* GL_EXT_texture_perturb_normal */ + +#ifndef GL_EXT_texture_sRGB +#define GL_EXT_texture_sRGB 1 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#endif /* GL_EXT_texture_sRGB */ + +#ifndef GL_EXT_texture_sRGB_decode +#define GL_EXT_texture_sRGB_decode 1 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#endif /* GL_EXT_texture_sRGB_decode */ + +#ifndef GL_EXT_texture_shared_exponent +#define GL_EXT_texture_shared_exponent 1 +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F +#endif /* GL_EXT_texture_shared_exponent */ + +#ifndef GL_EXT_texture_snorm +#define GL_EXT_texture_snorm 1 +#define GL_ALPHA_SNORM 0x9010 +#define GL_LUMINANCE_SNORM 0x9011 +#define GL_LUMINANCE_ALPHA_SNORM 0x9012 +#define GL_INTENSITY_SNORM 0x9013 +#define GL_ALPHA8_SNORM 0x9014 +#define GL_LUMINANCE8_SNORM 0x9015 +#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 +#define GL_INTENSITY8_SNORM 0x9017 +#define GL_ALPHA16_SNORM 0x9018 +#define GL_LUMINANCE16_SNORM 0x9019 +#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A +#define GL_INTENSITY16_SNORM 0x901B +#define GL_RED_SNORM 0x8F90 +#define GL_RG_SNORM 0x8F91 +#define GL_RGB_SNORM 0x8F92 +#define GL_RGBA_SNORM 0x8F93 +#endif /* GL_EXT_texture_snorm */ + +#ifndef GL_EXT_texture_swizzle +#define GL_EXT_texture_swizzle 1 +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 +#endif /* GL_EXT_texture_swizzle */ + +#ifndef GL_EXT_timer_query +#define GL_EXT_timer_query 1 +#define GL_TIME_ELAPSED_EXT 0x88BF +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +#endif +#endif /* GL_EXT_timer_query */ + +#ifndef GL_EXT_transform_feedback +#define GL_EXT_transform_feedback 1 +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 +#define GL_RASTERIZER_DISCARD_EXT 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackEXT (void); +GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#endif +#endif /* GL_EXT_transform_feedback */ + +#ifndef GL_EXT_vertex_array +#define GL_EXT_vertex_array 1 +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); +typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); +typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params); +typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glArrayElementEXT (GLint i); +GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); +GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params); +GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#endif +#endif /* GL_EXT_vertex_array */ + +#ifndef GL_EXT_vertex_array_bgra +#define GL_EXT_vertex_array_bgra 1 +#endif /* GL_EXT_vertex_array_bgra */ + +#ifndef GL_EXT_vertex_attrib_64bit +#define GL_EXT_vertex_attrib_64bit 1 +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#define GL_DOUBLE_MAT2_EXT 0x8F46 +#define GL_DOUBLE_MAT3_EXT 0x8F47 +#define GL_DOUBLE_MAT4_EXT 0x8F48 +#define GL_DOUBLE_MAT2x3_EXT 0x8F49 +#define GL_DOUBLE_MAT2x4_EXT 0x8F4A +#define GL_DOUBLE_MAT3x2_EXT 0x8F4B +#define GL_DOUBLE_MAT3x4_EXT 0x8F4C +#define GL_DOUBLE_MAT4x2_EXT 0x8F4D +#define GL_DOUBLE_MAT4x3_EXT 0x8F4E +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); +#endif +#endif /* GL_EXT_vertex_attrib_64bit */ + +#ifndef GL_EXT_vertex_shader +#define GL_EXT_vertex_shader 1 +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); +typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); +typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); +typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); +typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); +typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); +typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); +typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); +typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); +typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); +typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); +typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); +typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); +typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data); +typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVertexShaderEXT (void); +GLAPI void APIENTRY glEndVertexShaderEXT (void); +GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); +GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); +GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); +GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); +GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); +GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); +GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); +GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); +GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); +GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); +GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); +GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); +GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr); +GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); +GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); +GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); +GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); +GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); +GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); +GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); +GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); +GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data); +GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +#endif +#endif /* GL_EXT_vertex_shader */ + +#ifndef GL_EXT_vertex_weighting +#define GL_EXT_vertex_weighting 1 +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_MODELVIEW0_EXT 0x1700 +#define GL_MODELVIEW1_EXT 0x850A +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); +GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); +GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_vertex_weighting */ + +#ifndef GL_EXT_x11_sync_object +#define GL_EXT_x11_sync_object 1 +#define GL_SYNC_X11_FENCE_EXT 0x90E1 +typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#endif +#endif /* GL_EXT_x11_sync_object */ + +#ifndef GL_GREMEDY_frame_terminator +#define GL_GREMEDY_frame_terminator 1 +typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); +#endif +#endif /* GL_GREMEDY_frame_terminator */ + +#ifndef GL_GREMEDY_string_marker +#define GL_GREMEDY_string_marker 1 +typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string); +#endif +#endif /* GL_GREMEDY_string_marker */ + +#ifndef GL_HP_convolution_border_modes +#define GL_HP_convolution_border_modes 1 +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#endif /* GL_HP_convolution_border_modes */ + +#ifndef GL_HP_image_transform +#define GL_HP_image_transform 1 +#define GL_IMAGE_SCALE_X_HP 0x8155 +#define GL_IMAGE_SCALE_Y_HP 0x8156 +#define GL_IMAGE_TRANSLATE_X_HP 0x8157 +#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 +#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 +#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A +#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B +#define GL_IMAGE_MAG_FILTER_HP 0x815C +#define GL_IMAGE_MIN_FILTER_HP 0x815D +#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E +#define GL_CUBIC_HP 0x815F +#define GL_AVERAGE_HP 0x8160 +#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 +#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 +#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_HP_image_transform */ + +#ifndef GL_HP_occlusion_test +#define GL_HP_occlusion_test 1 +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#endif /* GL_HP_occlusion_test */ + +#ifndef GL_HP_texture_lighting +#define GL_HP_texture_lighting 1 +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#endif /* GL_HP_texture_lighting */ + +#ifndef GL_IBM_cull_vertex +#define GL_IBM_cull_vertex 1 +#define GL_CULL_VERTEX_IBM 103050 +#endif /* GL_IBM_cull_vertex */ + +#ifndef GL_IBM_multimode_draw_arrays +#define GL_IBM_multimode_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#endif +#endif /* GL_IBM_multimode_draw_arrays */ + +#ifndef GL_IBM_rasterpos_clip +#define GL_IBM_rasterpos_clip 1 +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#endif /* GL_IBM_rasterpos_clip */ + +#ifndef GL_IBM_static_data +#define GL_IBM_static_data 1 +#define GL_ALL_STATIC_DATA_IBM 103060 +#define GL_STATIC_VERTEX_ARRAY_IBM 103061 +typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); +#endif +#endif /* GL_IBM_static_data */ + +#ifndef GL_IBM_texture_mirrored_repeat +#define GL_IBM_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#endif /* GL_IBM_texture_mirrored_repeat */ + +#ifndef GL_IBM_vertex_array_lists +#define GL_IBM_vertex_array_lists 1 +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 +typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride); +GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#endif +#endif /* GL_IBM_vertex_array_lists */ + +#ifndef GL_INGR_blend_func_separate +#define GL_INGR_blend_func_separate 1 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_INGR_blend_func_separate */ + +#ifndef GL_INGR_color_clamp +#define GL_INGR_color_clamp 1 +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 +#endif /* GL_INGR_color_clamp */ + +#ifndef GL_INGR_interlace_read +#define GL_INGR_interlace_read 1 +#define GL_INTERLACE_READ_INGR 0x8568 +#endif /* GL_INGR_interlace_read */ + +#ifndef GL_INTEL_fragment_shader_ordering +#define GL_INTEL_fragment_shader_ordering 1 +#endif /* GL_INTEL_fragment_shader_ordering */ + +#ifndef GL_INTEL_map_texture +#define GL_INTEL_map_texture 1 +#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF +#define GL_LAYOUT_DEFAULT_INTEL 0 +#define GL_LAYOUT_LINEAR_INTEL 1 +#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 +typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); +typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); +GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); +GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#endif +#endif /* GL_INTEL_map_texture */ + +#ifndef GL_INTEL_parallel_arrays +#define GL_INTEL_parallel_arrays 1 +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 +typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer); +GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer); +#endif +#endif /* GL_INTEL_parallel_arrays */ + +#ifndef GL_INTEL_performance_query +#define GL_INTEL_performance_query 1 +#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 +#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 +#define GL_PERFQUERY_WAIT_INTEL 0x83FB +#define GL_PERFQUERY_FLUSH_INTEL 0x83FA +#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 +#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 +#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 +#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 +#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 +#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 +#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 +#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 +#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 +#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA +#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB +#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC +#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD +#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE +#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF +#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 +typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); +typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); +typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); +typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); +typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); +typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); +GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); +GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); +GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); +GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); +GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#endif +#endif /* GL_INTEL_performance_query */ + +#ifndef GL_MESAX_texture_stack +#define GL_MESAX_texture_stack 1 +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +#endif /* GL_MESAX_texture_stack */ + +#ifndef GL_MESA_pack_invert +#define GL_MESA_pack_invert 1 +#define GL_PACK_INVERT_MESA 0x8758 +#endif /* GL_MESA_pack_invert */ + +#ifndef GL_MESA_resize_buffers +#define GL_MESA_resize_buffers 1 +typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glResizeBuffersMESA (void); +#endif +#endif /* GL_MESA_resize_buffers */ + +#ifndef GL_MESA_window_pos +#define GL_MESA_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); +#endif +#endif /* GL_MESA_window_pos */ + +#ifndef GL_MESA_ycbcr_texture +#define GL_MESA_ycbcr_texture 1 +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_YCBCR_MESA 0x8757 +#endif /* GL_MESA_ycbcr_texture */ + +#ifndef GL_NVX_conditional_render +#define GL_NVX_conditional_render 1 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); +GLAPI void APIENTRY glEndConditionalRenderNVX (void); +#endif +#endif /* GL_NVX_conditional_render */ + +#ifndef GL_NVX_gpu_memory_info +#define GL_NVX_gpu_memory_info 1 +#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 +#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 +#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 +#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A +#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B +#endif /* GL_NVX_gpu_memory_info */ + +#ifndef GL_NV_bindless_multi_draw_indirect +#define GL_NV_bindless_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#endif +#endif /* GL_NV_bindless_multi_draw_indirect */ + +#ifndef GL_NV_bindless_texture +#define GL_NV_bindless_texture 1 +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); +#endif +#endif /* GL_NV_bindless_texture */ + +#ifndef GL_NV_blend_equation_advanced +#define GL_NV_blend_equation_advanced 1 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLUE_NV 0x1905 +#define GL_COLORBURN_NV 0x929A +#define GL_COLORDODGE_NV 0x9299 +#define GL_CONJOINT_NV 0x9284 +#define GL_CONTRAST_NV 0x92A1 +#define GL_DARKEN_NV 0x9297 +#define GL_DIFFERENCE_NV 0x929E +#define GL_DISJOINT_NV 0x9283 +#define GL_DST_ATOP_NV 0x928F +#define GL_DST_IN_NV 0x928B +#define GL_DST_NV 0x9287 +#define GL_DST_OUT_NV 0x928D +#define GL_DST_OVER_NV 0x9289 +#define GL_EXCLUSION_NV 0x92A0 +#define GL_GREEN_NV 0x1904 +#define GL_HARDLIGHT_NV 0x929B +#define GL_HARDMIX_NV 0x92A9 +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_INVERT_OVG_NV 0x92B4 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_LIGHTEN_NV 0x9298 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_MINUS_NV 0x929F +#define GL_MULTIPLY_NV 0x9294 +#define GL_OVERLAY_NV 0x9296 +#define GL_PINLIGHT_NV 0x92A8 +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_PLUS_NV 0x9291 +#define GL_RED_NV 0x1903 +#define GL_SCREEN_NV 0x9295 +#define GL_SOFTLIGHT_NV 0x929C +#define GL_SRC_ATOP_NV 0x928E +#define GL_SRC_IN_NV 0x928A +#define GL_SRC_NV 0x9286 +#define GL_SRC_OUT_NV 0x928C +#define GL_SRC_OVER_NV 0x9288 +#define GL_UNCORRELATED_NV 0x9282 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_XOR_NV 0x1506 +typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); +GLAPI void APIENTRY glBlendBarrierNV (void); +#endif +#endif /* GL_NV_blend_equation_advanced */ + +#ifndef GL_NV_blend_equation_advanced_coherent +#define GL_NV_blend_equation_advanced_coherent 1 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#endif /* GL_NV_blend_equation_advanced_coherent */ + +#ifndef GL_NV_blend_square +#define GL_NV_blend_square 1 +#endif /* GL_NV_blend_square */ + +#ifndef GL_NV_compute_program5 +#define GL_NV_compute_program5 1 +#define GL_COMPUTE_PROGRAM_NV 0x90FB +#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC +#endif /* GL_NV_compute_program5 */ + +#ifndef GL_NV_conditional_render +#define GL_NV_conditional_render 1 +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRenderNV (void); +#endif +#endif /* GL_NV_conditional_render */ + +#ifndef GL_NV_copy_depth_to_color +#define GL_NV_copy_depth_to_color 1 +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#endif /* GL_NV_copy_depth_to_color */ + +#ifndef GL_NV_copy_image +#define GL_NV_copy_image 1 +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#endif +#endif /* GL_NV_copy_image */ + +#ifndef GL_NV_deep_texture3D +#define GL_NV_deep_texture3D 1 +#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 +#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 +#endif /* GL_NV_deep_texture3D */ + +#ifndef GL_NV_depth_buffer_float +#define GL_NV_depth_buffer_float 1 +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF +typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); +typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); +GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); +#endif +#endif /* GL_NV_depth_buffer_float */ + +#ifndef GL_NV_depth_clamp +#define GL_NV_depth_clamp 1 +#define GL_DEPTH_CLAMP_NV 0x864F +#endif /* GL_NV_depth_clamp */ + +#ifndef GL_NV_draw_texture +#define GL_NV_draw_texture 1 +typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#endif +#endif /* GL_NV_draw_texture */ + +#ifndef GL_NV_evaluators +#define GL_NV_evaluators 1 +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); +#endif +#endif /* GL_NV_evaluators */ + +#ifndef GL_NV_explicit_multisample +#define GL_NV_explicit_multisample 1 +#define GL_SAMPLE_POSITION_NV 0x8E50 +#define GL_SAMPLE_MASK_NV 0x8E51 +#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 +#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 +#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 +#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 +#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 +#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 +#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); +GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); +#endif +#endif /* GL_NV_explicit_multisample */ + +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); +GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GLAPI void APIENTRY glFinishFenceNV (GLuint fence); +GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +#endif /* GL_NV_fence */ + +#ifndef GL_NV_float_buffer +#define GL_NV_float_buffer 1 +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#endif /* GL_NV_float_buffer */ + +#ifndef GL_NV_fog_distance +#define GL_NV_fog_distance 1 +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_EYE_RADIAL_NV 0x855B +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C +#endif /* GL_NV_fog_distance */ + +#ifndef GL_NV_fragment_program +#define GL_NV_fragment_program 1 +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#endif +#endif /* GL_NV_fragment_program */ + +#ifndef GL_NV_fragment_program2 +#define GL_NV_fragment_program2 1 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#endif /* GL_NV_fragment_program2 */ + +#ifndef GL_NV_fragment_program4 +#define GL_NV_fragment_program4 1 +#endif /* GL_NV_fragment_program4 */ + +#ifndef GL_NV_fragment_program_option +#define GL_NV_fragment_program_option 1 +#endif /* GL_NV_fragment_program_option */ + +#ifndef GL_NV_framebuffer_multisample_coverage +#define GL_NV_framebuffer_multisample_coverage 1 +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_NV_framebuffer_multisample_coverage */ + +#ifndef GL_NV_geometry_program4 +#define GL_NV_geometry_program4 1 +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 +typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); +GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_NV_geometry_program4 */ + +#ifndef GL_NV_geometry_shader4 +#define GL_NV_geometry_shader4 1 +#endif /* GL_NV_geometry_shader4 */ + +#ifndef GL_NV_gpu_program4 +#define GL_NV_gpu_program4 1 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); +#endif +#endif /* GL_NV_gpu_program4 */ + +#ifndef GL_NV_gpu_program5 +#define GL_NV_gpu_program5 1 +#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C +#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F +#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); +#endif +#endif /* GL_NV_gpu_program5 */ + +#ifndef GL_NV_gpu_program5_mem_extended +#define GL_NV_gpu_program5_mem_extended 1 +#endif /* GL_NV_gpu_program5_mem_extended */ + +#ifndef GL_NV_gpu_shader5 +#define GL_NV_gpu_shader5 1 +#endif /* GL_NV_gpu_shader5 */ + +#ifndef GL_NV_half_float +#define GL_NV_half_float 1 +typedef unsigned short GLhalfNV; +#define GL_HALF_FLOAT_NV 0x140B +typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); +typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); +typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); +GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); +GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); +GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); +GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); +GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); +GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); +GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +#endif +#endif /* GL_NV_half_float */ + +#ifndef GL_NV_light_max_exponent +#define GL_NV_light_max_exponent 1 +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 +#endif /* GL_NV_light_max_exponent */ + +#ifndef GL_NV_multisample_coverage +#define GL_NV_multisample_coverage 1 +#define GL_COLOR_SAMPLES_NV 0x8E20 +#endif /* GL_NV_multisample_coverage */ + +#ifndef GL_NV_multisample_filter_hint +#define GL_NV_multisample_filter_hint 1 +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#endif /* GL_NV_multisample_filter_hint */ + +#ifndef GL_NV_occlusion_query +#define GL_NV_occlusion_query 1 +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glEndOcclusionQueryNV (void); +GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_occlusion_query */ + +#ifndef GL_NV_packed_depth_stencil +#define GL_NV_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#endif /* GL_NV_packed_depth_stencil */ + +#ifndef GL_NV_parameter_buffer_object +#define GL_NV_parameter_buffer_object 1 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#endif +#endif /* GL_NV_parameter_buffer_object */ + +#ifndef GL_NV_parameter_buffer_object2 +#define GL_NV_parameter_buffer_object2 1 +#endif /* GL_NV_parameter_buffer_object2 */ + +#ifndef GL_NV_path_rendering +#define GL_NV_path_rendering 1 +#define GL_PATH_FORMAT_SVG_NV 0x9070 +#define GL_PATH_FORMAT_PS_NV 0x9071 +#define GL_STANDARD_FONT_NAME_NV 0x9072 +#define GL_SYSTEM_FONT_NAME_NV 0x9073 +#define GL_FILE_NAME_NV 0x9074 +#define GL_PATH_STROKE_WIDTH_NV 0x9075 +#define GL_PATH_END_CAPS_NV 0x9076 +#define GL_PATH_INITIAL_END_CAP_NV 0x9077 +#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 +#define GL_PATH_JOIN_STYLE_NV 0x9079 +#define GL_PATH_MITER_LIMIT_NV 0x907A +#define GL_PATH_DASH_CAPS_NV 0x907B +#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C +#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D +#define GL_PATH_DASH_OFFSET_NV 0x907E +#define GL_PATH_CLIENT_LENGTH_NV 0x907F +#define GL_PATH_FILL_MODE_NV 0x9080 +#define GL_PATH_FILL_MASK_NV 0x9081 +#define GL_PATH_FILL_COVER_MODE_NV 0x9082 +#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 +#define GL_PATH_STROKE_MASK_NV 0x9084 +#define GL_COUNT_UP_NV 0x9088 +#define GL_COUNT_DOWN_NV 0x9089 +#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A +#define GL_CONVEX_HULL_NV 0x908B +#define GL_BOUNDING_BOX_NV 0x908D +#define GL_TRANSLATE_X_NV 0x908E +#define GL_TRANSLATE_Y_NV 0x908F +#define GL_TRANSLATE_2D_NV 0x9090 +#define GL_TRANSLATE_3D_NV 0x9091 +#define GL_AFFINE_2D_NV 0x9092 +#define GL_AFFINE_3D_NV 0x9094 +#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 +#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 +#define GL_UTF8_NV 0x909A +#define GL_UTF16_NV 0x909B +#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C +#define GL_PATH_COMMAND_COUNT_NV 0x909D +#define GL_PATH_COORD_COUNT_NV 0x909E +#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F +#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 +#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 +#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 +#define GL_SQUARE_NV 0x90A3 +#define GL_ROUND_NV 0x90A4 +#define GL_TRIANGULAR_NV 0x90A5 +#define GL_BEVEL_NV 0x90A6 +#define GL_MITER_REVERT_NV 0x90A7 +#define GL_MITER_TRUNCATE_NV 0x90A8 +#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 +#define GL_USE_MISSING_GLYPH_NV 0x90AA +#define GL_PATH_ERROR_POSITION_NV 0x90AB +#define GL_PATH_FOG_GEN_MODE_NV 0x90AC +#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD +#define GL_ADJACENT_PAIRS_NV 0x90AE +#define GL_FIRST_TO_REST_NV 0x90AF +#define GL_PATH_GEN_MODE_NV 0x90B0 +#define GL_PATH_GEN_COEFF_NV 0x90B1 +#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 +#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 +#define GL_PATH_STENCIL_FUNC_NV 0x90B7 +#define GL_PATH_STENCIL_REF_NV 0x90B8 +#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 +#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD +#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE +#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF +#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_MOVE_TO_NV 0x02 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_LINE_TO_NV 0x04 +#define GL_RELATIVE_LINE_TO_NV 0x05 +#define GL_HORIZONTAL_LINE_TO_NV 0x06 +#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 +#define GL_VERTICAL_LINE_TO_NV 0x08 +#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 +#define GL_QUADRATIC_CURVE_TO_NV 0x0A +#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B +#define GL_CUBIC_CURVE_TO_NV 0x0C +#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D +#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E +#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F +#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 +#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 +#define GL_SMALL_CCW_ARC_TO_NV 0x12 +#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 +#define GL_SMALL_CW_ARC_TO_NV 0x14 +#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 +#define GL_LARGE_CCW_ARC_TO_NV 0x16 +#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 +#define GL_LARGE_CW_ARC_TO_NV 0x18 +#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 +#define GL_RESTART_PATH_NV 0xF0 +#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 +#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 +#define GL_RECT_NV 0xF6 +#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 +#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA +#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC +#define GL_ARC_TO_NV 0xFE +#define GL_RELATIVE_ARC_TO_NV 0xFF +#define GL_BOLD_BIT_NV 0x01 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 +#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 +#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 +#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 +#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 +#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 +#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 +#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 +#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 +#define GL_FONT_ASCENDER_BIT_NV 0x00200000 +#define GL_FONT_DESCENDER_BIT_NV 0x00400000 +#define GL_FONT_HEIGHT_BIT_NV 0x00800000 +#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 +#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 +#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 +#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 +#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_SECONDARY_COLOR_NV 0x852D +typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); +typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); +typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); +typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); +typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); +typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); +typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); +typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); +typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); +typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); +typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); +typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); +typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); +typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); +GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); +GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); +GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); +GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); +GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); +GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); +GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); +GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); +GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); +GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); +GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); +GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); +GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); +GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); +GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); +GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); +GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); +GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); +GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); +GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); +GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +#endif +#endif /* GL_NV_path_rendering */ + +#ifndef GL_NV_pixel_data_range +#define GL_NV_pixel_data_range 1 +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); +#endif +#endif /* GL_NV_pixel_data_range */ + +#ifndef GL_NV_point_sprite +#define GL_NV_point_sprite 1 +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); +#endif +#endif /* GL_NV_point_sprite */ + +#ifndef GL_NV_present_video +#define GL_NV_present_video 1 +#define GL_FRAME_NV 0x8E26 +#define GL_FIELDS_NV 0x8E27 +#define GL_CURRENT_TIME_NV 0x8E28 +#define GL_NUM_FILL_STREAMS_NV 0x8E29 +#define GL_PRESENT_TIME_NV 0x8E2A +#define GL_PRESENT_DURATION_NV 0x8E2B +typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); +GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_NV_present_video */ + +#ifndef GL_NV_primitive_restart +#define GL_NV_primitive_restart 1 +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPrimitiveRestartNV (void); +GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); +#endif +#endif /* GL_NV_primitive_restart */ + +#ifndef GL_NV_register_combiners +#define GL_NV_register_combiners 1 +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_SPARE0_NV 0x852E +#define GL_SPARE1_NV 0x852F +#define GL_DISCARD_NV 0x8530 +#define GL_E_TIMES_F_NV 0x8531 +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); +GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); +GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); +#endif +#endif /* GL_NV_register_combiners */ + +#ifndef GL_NV_register_combiners2 +#define GL_NV_register_combiners2 1 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); +#endif +#endif /* GL_NV_register_combiners2 */ + +#ifndef GL_NV_shader_atomic_counters +#define GL_NV_shader_atomic_counters 1 +#endif /* GL_NV_shader_atomic_counters */ + +#ifndef GL_NV_shader_atomic_float +#define GL_NV_shader_atomic_float 1 +#endif /* GL_NV_shader_atomic_float */ + +#ifndef GL_NV_shader_buffer_load +#define GL_NV_shader_buffer_load 1 +#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D +#define GL_GPU_ADDRESS_NV 0x8F34 +#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 +typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); +typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); +typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); +typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); +typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); +GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); +GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); +GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); +GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); +GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); +GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); +GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); +GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); +GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_NV_shader_buffer_load */ + +#ifndef GL_NV_shader_buffer_store +#define GL_NV_shader_buffer_store 1 +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +#endif /* GL_NV_shader_buffer_store */ + +#ifndef GL_NV_shader_storage_buffer_object +#define GL_NV_shader_storage_buffer_object 1 +#endif /* GL_NV_shader_storage_buffer_object */ + +#ifndef GL_NV_shader_thread_group +#define GL_NV_shader_thread_group 1 +#define GL_WARP_SIZE_NV 0x9339 +#define GL_WARPS_PER_SM_NV 0x933A +#define GL_SM_COUNT_NV 0x933B +#endif /* GL_NV_shader_thread_group */ + +#ifndef GL_NV_shader_thread_shuffle +#define GL_NV_shader_thread_shuffle 1 +#endif /* GL_NV_shader_thread_shuffle */ + +#ifndef GL_NV_tessellation_program5 +#define GL_NV_tessellation_program5 1 +#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 +#define GL_TESS_CONTROL_PROGRAM_NV 0x891E +#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F +#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 +#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 +#endif /* GL_NV_tessellation_program5 */ + +#ifndef GL_NV_texgen_emboss +#define GL_NV_texgen_emboss 1 +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_MAP_NV 0x855F +#endif /* GL_NV_texgen_emboss */ + +#ifndef GL_NV_texgen_reflection +#define GL_NV_texgen_reflection 1 +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_REFLECTION_MAP_NV 0x8512 +#endif /* GL_NV_texgen_reflection */ + +#ifndef GL_NV_texture_barrier +#define GL_NV_texture_barrier 1 +typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureBarrierNV (void); +#endif +#endif /* GL_NV_texture_barrier */ + +#ifndef GL_NV_texture_compression_vtc +#define GL_NV_texture_compression_vtc 1 +#endif /* GL_NV_texture_compression_vtc */ + +#ifndef GL_NV_texture_env_combine4 +#define GL_NV_texture_env_combine4 1 +#define GL_COMBINE4_NV 0x8503 +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPERAND3_ALPHA_NV 0x859B +#endif /* GL_NV_texture_env_combine4 */ + +#ifndef GL_NV_texture_expand_normal +#define GL_NV_texture_expand_normal 1 +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#endif /* GL_NV_texture_expand_normal */ + +#ifndef GL_NV_texture_multisample +#define GL_NV_texture_multisample 1 +#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 +#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#endif +#endif /* GL_NV_texture_multisample */ + +#ifndef GL_NV_texture_rectangle +#define GL_NV_texture_rectangle 1 +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#endif /* GL_NV_texture_rectangle */ + +#ifndef GL_NV_texture_shader +#define GL_NV_texture_shader 1 +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_CULL_MODES_NV 0x86E0 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_HI_SCALE_NV 0x870E +#define GL_LO_SCALE_NV 0x870F +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_SCALE_NV 0x8711 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_HI_BIAS_NV 0x8714 +#define GL_LO_BIAS_NV 0x8715 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DT_BIAS_NV 0x8717 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#endif /* GL_NV_texture_shader */ + +#ifndef GL_NV_texture_shader2 +#define GL_NV_texture_shader2 1 +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#endif /* GL_NV_texture_shader2 */ + +#ifndef GL_NV_texture_shader3 +#define GL_NV_texture_shader3 1 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_HILO8_NV 0x885E +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#endif /* GL_NV_texture_shader3 */ + +#ifndef GL_NV_transform_feedback +#define GL_NV_transform_feedback 1 +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F +#define GL_LAYER_NV 0x8DAA +#define GL_NEXT_BUFFER_NV -2 +#define GL_SKIP_COMPONENTS4_NV -3 +#define GL_SKIP_COMPONENTS3_NV -4 +#define GL_SKIP_COMPONENTS2_NV -5 +#define GL_SKIP_COMPONENTS1_NV -6 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackNV (void); +GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode); +GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); +GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); +GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#endif +#endif /* GL_NV_transform_feedback */ + +#ifndef GL_NV_transform_feedback2 +#define GL_NV_transform_feedback2 1 +#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedbackNV (void); +GLAPI void APIENTRY glResumeTransformFeedbackNV (void); +GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); +#endif +#endif /* GL_NV_transform_feedback2 */ + +#ifndef GL_NV_vdpau_interop +#define GL_NV_vdpau_interop 1 +typedef GLintptr GLvdpauSurfaceNV; +#define GL_SURFACE_STATE_NV 0x86EB +#define GL_SURFACE_REGISTERED_NV 0x86FD +#define GL_SURFACE_MAPPED_NV 0x8700 +#define GL_WRITE_DISCARD_NV 0x88BE +typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress); +typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); +typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress); +GLAPI void APIENTRY glVDPAUFiniNV (void); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); +GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#endif +#endif /* GL_NV_vdpau_interop */ + +#ifndef GL_NV_vertex_array_range +#define GL_NV_vertex_array_range 1 +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); +GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer); +#endif +#endif /* GL_NV_vertex_array_range */ + +#ifndef GL_NV_vertex_array_range2 +#define GL_NV_vertex_array_range2 1 +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#endif /* GL_NV_vertex_array_range2 */ + +#ifndef GL_NV_vertex_attrib_integer_64bit +#define GL_NV_vertex_attrib_integer_64bit 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); +GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +#endif +#endif /* GL_NV_vertex_attrib_integer_64bit */ + +#ifndef GL_NV_vertex_buffer_unified_memory +#define GL_NV_vertex_buffer_unified_memory 1 +#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E +#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F +#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 +#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 +#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 +#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 +#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 +#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 +#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 +#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 +#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 +#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 +#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A +#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B +#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C +#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D +#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E +#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F +#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 +#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 +#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 +#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 +#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 +#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 +#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 +typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); +GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); +#endif +#endif /* GL_NV_vertex_buffer_unified_memory */ + +#ifndef GL_NV_vertex_program +#define GL_NV_vertex_program 1 +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_IDENTITY_NV 0x862A +#define GL_INVERSE_NV 0x862B +#define GL_TRANSPOSE_NV 0x862C +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_NV 0x8637 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); +typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); +typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); +GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); +GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); +GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); +GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); +GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); +GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); +GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); +#endif +#endif /* GL_NV_vertex_program */ + +#ifndef GL_NV_vertex_program1_1 +#define GL_NV_vertex_program1_1 1 +#endif /* GL_NV_vertex_program1_1 */ + +#ifndef GL_NV_vertex_program2 +#define GL_NV_vertex_program2 1 +#endif /* GL_NV_vertex_program2 */ + +#ifndef GL_NV_vertex_program2_option +#define GL_NV_vertex_program2_option 1 +#endif /* GL_NV_vertex_program2_option */ + +#ifndef GL_NV_vertex_program3 +#define GL_NV_vertex_program3 1 +#endif /* GL_NV_vertex_program3 */ + +#ifndef GL_NV_vertex_program4 +#define GL_NV_vertex_program4 1 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_vertex_program4 */ + +#ifndef GL_NV_video_capture +#define GL_NV_video_capture 1 +#define GL_VIDEO_BUFFER_NV 0x9020 +#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 +#define GL_FIELD_UPPER_NV 0x9022 +#define GL_FIELD_LOWER_NV 0x9023 +#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 +#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 +#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 +#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 +#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 +#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 +#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A +#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B +#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C +#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D +#define GL_PARTIAL_SUCCESS_NV 0x902E +#define GL_SUCCESS_NV 0x902F +#define GL_FAILURE_NV 0x9030 +#define GL_YCBYCR8_422_NV 0x9031 +#define GL_YCBAYCR8A_4224_NV 0x9032 +#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 +#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 +#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 +#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 +#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 +#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 +#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 +#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A +#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B +#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C +typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#endif +#endif /* GL_NV_video_capture */ + +#ifndef GL_OML_interlace +#define GL_OML_interlace 1 +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 +#endif /* GL_OML_interlace */ + +#ifndef GL_OML_resample +#define GL_OML_resample 1 +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#endif /* GL_OML_resample */ + +#ifndef GL_OML_subsample +#define GL_OML_subsample 1 +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#endif /* GL_OML_subsample */ + +#ifndef GL_PGI_misc_hints +#define GL_PGI_misc_hints 1 +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 +#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD +#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 +#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C +#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E +#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F +#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 +#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 +#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 +#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 +#define GL_CLIP_NEAR_HINT_PGI 0x1A220 +#define GL_CLIP_FAR_HINT_PGI 0x1A221 +#define GL_WIDE_LINE_HINT_PGI 0x1A222 +#define GL_BACK_NORMALS_HINT_PGI 0x1A223 +typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); +#endif +#endif /* GL_PGI_misc_hints */ + +#ifndef GL_PGI_vertex_hints +#define GL_PGI_vertex_hints 1 +#define GL_VERTEX_DATA_HINT_PGI 0x1A22A +#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B +#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C +#define GL_MAX_VERTEX_HINT_PGI 0x1A22D +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#endif /* GL_PGI_vertex_hints */ + +#ifndef GL_REND_screen_coordinates +#define GL_REND_screen_coordinates 1 +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#endif /* GL_REND_screen_coordinates */ + +#ifndef GL_S3_s3tc +#define GL_S3_s3tc 1 +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA4_DXT5_S3TC 0x83A5 +#endif /* GL_S3_s3tc */ + +#ifndef GL_SGIS_detail_texture +#define GL_SGIS_detail_texture 1 +#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 +#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 +#define GL_LINEAR_DETAIL_SGIS 0x8097 +#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 +#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 +#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A +#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B +#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C +typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_detail_texture */ + +#ifndef GL_SGIS_fog_function +#define GL_SGIS_fog_function 1 +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); +#endif +#endif /* GL_SGIS_fog_function */ + +#ifndef GL_SGIS_generate_mipmap +#define GL_SGIS_generate_mipmap 1 +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#endif /* GL_SGIS_generate_mipmap */ + +#ifndef GL_SGIS_multisample +#define GL_SGIS_multisample 1 +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); +#endif +#endif /* GL_SGIS_multisample */ + +#ifndef GL_SGIS_pixel_texture +#define GL_SGIS_pixel_texture 1 +#define GL_PIXEL_TEXTURE_SGIS 0x8353 +#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 +#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 +#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); +#endif +#endif /* GL_SGIS_pixel_texture */ + +#ifndef GL_SGIS_point_line_texgen +#define GL_SGIS_point_line_texgen 1 +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_OBJECT_LINE_SGIS 0x81F7 +#endif /* GL_SGIS_point_line_texgen */ + +#ifndef GL_SGIS_point_parameters +#define GL_SGIS_point_parameters 1 +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_SGIS_point_parameters */ + +#ifndef GL_SGIS_sharpen_texture +#define GL_SGIS_sharpen_texture 1 +#define GL_LINEAR_SHARPEN_SGIS 0x80AD +#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE +#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF +#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 +typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_sharpen_texture */ + +#ifndef GL_SGIS_texture4D +#define GL_SGIS_texture4D 1 +#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 +#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 +#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 +#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 +#define GL_TEXTURE_4D_SGIS 0x8134 +#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 +#define GL_TEXTURE_4DSIZE_SGIS 0x8136 +#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 +#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 +#define GL_TEXTURE_4D_BINDING_SGIS 0x814F +typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_SGIS_texture4D */ + +#ifndef GL_SGIS_texture_border_clamp +#define GL_SGIS_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#endif /* GL_SGIS_texture_border_clamp */ + +#ifndef GL_SGIS_texture_color_mask +#define GL_SGIS_texture_color_mask 1 +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#endif +#endif /* GL_SGIS_texture_color_mask */ + +#ifndef GL_SGIS_texture_edge_clamp +#define GL_SGIS_texture_edge_clamp 1 +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#endif /* GL_SGIS_texture_edge_clamp */ + +#ifndef GL_SGIS_texture_filter4 +#define GL_SGIS_texture_filter4 1 +#define GL_FILTER4_SGIS 0x8146 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); +typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); +GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#endif +#endif /* GL_SGIS_texture_filter4 */ + +#ifndef GL_SGIS_texture_lod +#define GL_SGIS_texture_lod 1 +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D +#endif /* GL_SGIS_texture_lod */ + +#ifndef GL_SGIS_texture_select +#define GL_SGIS_texture_select 1 +#define GL_DUAL_ALPHA4_SGIS 0x8110 +#define GL_DUAL_ALPHA8_SGIS 0x8111 +#define GL_DUAL_ALPHA12_SGIS 0x8112 +#define GL_DUAL_ALPHA16_SGIS 0x8113 +#define GL_DUAL_LUMINANCE4_SGIS 0x8114 +#define GL_DUAL_LUMINANCE8_SGIS 0x8115 +#define GL_DUAL_LUMINANCE12_SGIS 0x8116 +#define GL_DUAL_LUMINANCE16_SGIS 0x8117 +#define GL_DUAL_INTENSITY4_SGIS 0x8118 +#define GL_DUAL_INTENSITY8_SGIS 0x8119 +#define GL_DUAL_INTENSITY12_SGIS 0x811A +#define GL_DUAL_INTENSITY16_SGIS 0x811B +#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C +#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D +#define GL_QUAD_ALPHA4_SGIS 0x811E +#define GL_QUAD_ALPHA8_SGIS 0x811F +#define GL_QUAD_LUMINANCE4_SGIS 0x8120 +#define GL_QUAD_LUMINANCE8_SGIS 0x8121 +#define GL_QUAD_INTENSITY4_SGIS 0x8122 +#define GL_QUAD_INTENSITY8_SGIS 0x8123 +#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 +#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 +#endif /* GL_SGIS_texture_select */ + +#ifndef GL_SGIX_async +#define GL_SGIX_async 1 +#define GL_ASYNC_MARKER_SGIX 0x8329 +typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); +typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); +typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); +typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); +GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); +GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); +GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); +GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); +GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); +#endif +#endif /* GL_SGIX_async */ + +#ifndef GL_SGIX_async_histogram +#define GL_SGIX_async_histogram 1 +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#endif /* GL_SGIX_async_histogram */ + +#ifndef GL_SGIX_async_pixel +#define GL_SGIX_async_pixel 1 +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 +#endif /* GL_SGIX_async_pixel */ + +#ifndef GL_SGIX_blend_alpha_minmax +#define GL_SGIX_blend_alpha_minmax 1 +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_MAX_SGIX 0x8321 +#endif /* GL_SGIX_blend_alpha_minmax */ + +#ifndef GL_SGIX_calligraphic_fragment +#define GL_SGIX_calligraphic_fragment 1 +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#endif /* GL_SGIX_calligraphic_fragment */ + +#ifndef GL_SGIX_clipmap +#define GL_SGIX_clipmap 1 +#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 +#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 +#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 +#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 +#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 +#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 +#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 +#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 +#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 +#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#endif /* GL_SGIX_clipmap */ + +#ifndef GL_SGIX_convolution_accuracy +#define GL_SGIX_convolution_accuracy 1 +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#endif /* GL_SGIX_convolution_accuracy */ + +#ifndef GL_SGIX_depth_pass_instrument +#define GL_SGIX_depth_pass_instrument 1 +#endif /* GL_SGIX_depth_pass_instrument */ + +#ifndef GL_SGIX_depth_texture +#define GL_SGIX_depth_texture 1 +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 +#endif /* GL_SGIX_depth_texture */ + +#ifndef GL_SGIX_flush_raster +#define GL_SGIX_flush_raster 1 +typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushRasterSGIX (void); +#endif +#endif /* GL_SGIX_flush_raster */ + +#ifndef GL_SGIX_fog_offset +#define GL_SGIX_fog_offset 1 +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#endif /* GL_SGIX_fog_offset */ + +#ifndef GL_SGIX_fragment_lighting +#define GL_SGIX_fragment_lighting 1 +#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 +#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 +#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 +#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 +#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 +#define GL_LIGHT_ENV_MODE_SGIX 0x8407 +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B +#define GL_FRAGMENT_LIGHT0_SGIX 0x840C +#define GL_FRAGMENT_LIGHT1_SGIX 0x840D +#define GL_FRAGMENT_LIGHT2_SGIX 0x840E +#define GL_FRAGMENT_LIGHT3_SGIX 0x840F +#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 +#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 +#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 +#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 +typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); +GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); +GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); +#endif +#endif /* GL_SGIX_fragment_lighting */ + +#ifndef GL_SGIX_framezoom +#define GL_SGIX_framezoom 1 +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); +#endif +#endif /* GL_SGIX_framezoom */ + +#ifndef GL_SGIX_igloo_interface +#define GL_SGIX_igloo_interface 1 +typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params); +#endif +#endif /* GL_SGIX_igloo_interface */ + +#ifndef GL_SGIX_instruments +#define GL_SGIX_instruments 1 +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); +typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); +typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); +typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); +GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); +GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); +GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); +GLAPI void APIENTRY glStartInstrumentsSGIX (void); +GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); +#endif +#endif /* GL_SGIX_instruments */ + +#ifndef GL_SGIX_interlace +#define GL_SGIX_interlace 1 +#define GL_INTERLACE_SGIX 0x8094 +#endif /* GL_SGIX_interlace */ + +#ifndef GL_SGIX_ir_instrument1 +#define GL_SGIX_ir_instrument1 1 +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#endif /* GL_SGIX_ir_instrument1 */ + +#ifndef GL_SGIX_list_priority +#define GL_SGIX_list_priority 1 +#define GL_LIST_PRIORITY_SGIX 0x8182 +typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); +GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); +GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); +GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_list_priority */ + +#ifndef GL_SGIX_pixel_texture +#define GL_SGIX_pixel_texture 1 +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); +#endif +#endif /* GL_SGIX_pixel_texture */ + +#ifndef GL_SGIX_pixel_tiles +#define GL_SGIX_pixel_tiles 1 +#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E +#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F +#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 +#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 +#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 +#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 +#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 +#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 +#endif /* GL_SGIX_pixel_tiles */ + +#ifndef GL_SGIX_polynomial_ffd +#define GL_SGIX_polynomial_ffd 1 +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 +#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 +#define GL_DEFORMATIONS_MASK_SGIX 0x8196 +#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); +GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); +#endif +#endif /* GL_SGIX_polynomial_ffd */ + +#ifndef GL_SGIX_reference_plane +#define GL_SGIX_reference_plane 1 +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); +#endif +#endif /* GL_SGIX_reference_plane */ + +#ifndef GL_SGIX_resample +#define GL_SGIX_resample 1 +#define GL_PACK_RESAMPLE_SGIX 0x842C +#define GL_UNPACK_RESAMPLE_SGIX 0x842D +#define GL_RESAMPLE_REPLICATE_SGIX 0x842E +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#endif /* GL_SGIX_resample */ + +#ifndef GL_SGIX_scalebias_hint +#define GL_SGIX_scalebias_hint 1 +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#endif /* GL_SGIX_scalebias_hint */ + +#ifndef GL_SGIX_shadow +#define GL_SGIX_shadow 1 +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D +#endif /* GL_SGIX_shadow */ + +#ifndef GL_SGIX_shadow_ambient +#define GL_SGIX_shadow_ambient 1 +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#endif /* GL_SGIX_shadow_ambient */ + +#ifndef GL_SGIX_sprite +#define GL_SGIX_sprite 1 +#define GL_SPRITE_SGIX 0x8148 +#define GL_SPRITE_MODE_SGIX 0x8149 +#define GL_SPRITE_AXIS_SGIX 0x814A +#define GL_SPRITE_TRANSLATION_SGIX 0x814B +#define GL_SPRITE_AXIAL_SGIX 0x814C +#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D +#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_sprite */ + +#ifndef GL_SGIX_subsample +#define GL_SGIX_subsample 1 +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 +#endif /* GL_SGIX_subsample */ + +#ifndef GL_SGIX_tag_sample_buffer +#define GL_SGIX_tag_sample_buffer 1 +typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTagSampleBufferSGIX (void); +#endif +#endif /* GL_SGIX_tag_sample_buffer */ + +#ifndef GL_SGIX_texture_add_env +#define GL_SGIX_texture_add_env 1 +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#endif /* GL_SGIX_texture_add_env */ + +#ifndef GL_SGIX_texture_coordinate_clamp +#define GL_SGIX_texture_coordinate_clamp 1 +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#endif /* GL_SGIX_texture_coordinate_clamp */ + +#ifndef GL_SGIX_texture_lod_bias +#define GL_SGIX_texture_lod_bias 1 +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#endif /* GL_SGIX_texture_lod_bias */ + +#ifndef GL_SGIX_texture_multi_buffer +#define GL_SGIX_texture_multi_buffer 1 +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#endif /* GL_SGIX_texture_multi_buffer */ + +#ifndef GL_SGIX_texture_scale_bias +#define GL_SGIX_texture_scale_bias 1 +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C +#endif /* GL_SGIX_texture_scale_bias */ + +#ifndef GL_SGIX_vertex_preclip +#define GL_SGIX_vertex_preclip 1 +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#endif /* GL_SGIX_vertex_preclip */ + +#ifndef GL_SGIX_ycrcb +#define GL_SGIX_ycrcb 1 +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#endif /* GL_SGIX_ycrcb */ + +#ifndef GL_SGIX_ycrcb_subsample +#define GL_SGIX_ycrcb_subsample 1 +#endif /* GL_SGIX_ycrcb_subsample */ + +#ifndef GL_SGIX_ycrcba +#define GL_SGIX_ycrcba 1 +#define GL_YCRCB_SGIX 0x8318 +#define GL_YCRCBA_SGIX 0x8319 +#endif /* GL_SGIX_ycrcba */ + +#ifndef GL_SGI_color_matrix +#define GL_SGI_color_matrix 1 +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB +#endif /* GL_SGI_color_matrix */ + +#ifndef GL_SGI_color_table +#define GL_SGI_color_table 1 +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF +typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); +#endif +#endif /* GL_SGI_color_table */ + +#ifndef GL_SGI_texture_color_table +#define GL_SGI_texture_color_table 1 +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD +#endif /* GL_SGI_texture_color_table */ + +#ifndef GL_SUNX_constant_data +#define GL_SUNX_constant_data 1 +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 +typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFinishTextureSUNX (void); +#endif +#endif /* GL_SUNX_constant_data */ + +#ifndef GL_SUN_convolution_border_modes +#define GL_SUN_convolution_border_modes 1 +#define GL_WRAP_BORDER_SUN 0x81D4 +#endif /* GL_SUN_convolution_border_modes */ + +#ifndef GL_SUN_global_alpha +#define GL_SUN_global_alpha 1 +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); +GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); +GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); +GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); +GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); +GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); +#endif +#endif /* GL_SUN_global_alpha */ + +#ifndef GL_SUN_mesh_array +#define GL_SUN_mesh_array 1 +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 +typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); +#endif +#endif /* GL_SUN_mesh_array */ + +#ifndef GL_SUN_slice_accum +#define GL_SUN_slice_accum 1 +#define GL_SLICE_ACCUM_SUN 0x85CC +#endif /* GL_SUN_slice_accum */ + +#ifndef GL_SUN_triangle_list +#define GL_SUN_triangle_list 1 +#define GL_RESTART_SUN 0x0001 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); +GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); +GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); +GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); +GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); +GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); +GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer); +#endif +#endif /* GL_SUN_triangle_list */ + +#ifndef GL_SUN_vertex +#define GL_SUN_vertex 1 +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#endif +#endif /* GL_SUN_vertex */ + +#ifndef GL_WIN_phong_shading +#define GL_WIN_phong_shading 1 +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB +#endif /* GL_WIN_phong_shading */ + +#ifndef GL_WIN_specular_fog +#define GL_WIN_specular_fog 1 +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#endif /* GL_WIN_specular_fog */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles.h new file mode 100644 index 00000000000..b5d7ebe9a36 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles.h @@ -0,0 +1,39 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_opengles.h + * + * This is a simple file to encapsulate the OpenGL ES 1.X API headers. + */ +#include + +#ifdef __IPHONEOS__ +#include +#include +#else +#include +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2.h new file mode 100644 index 00000000000..e2388d1bfc2 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2.h @@ -0,0 +1,52 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_opengles2.h + * + * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. + */ +#include + +#if !defined(_MSC_VER) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS) + +#ifdef __IPHONEOS__ +#include +#include +#else +#include +#include +#include +#endif + +#else /* _MSC_VER */ + +/* OpenGL ES2 headers for Visual Studio */ +#include +#include +#include +#include + +#endif /* _MSC_VER */ + +#ifndef APIENTRY +#define APIENTRY GL_APIENTRY +#endif diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2_gl2.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2_gl2.h new file mode 100644 index 00000000000..c62fb0a547f --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2_gl2.h @@ -0,0 +1,621 @@ +#ifndef __gl2_h_ +#define __gl2_h_ + +/* $Revision: 20555 $ on $Date:: 2013-02-12 14:32:47 -0800 #$ */ + +/*#include */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +/*------------------------------------------------------------------------- + * Data type definitions + *-----------------------------------------------------------------------*/ + +typedef void GLvoid; +typedef char GLchar; +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef khronos_int8_t GLbyte; +typedef short GLshort; +typedef int GLint; +typedef int GLsizei; +typedef khronos_uint8_t GLubyte; +typedef unsigned short GLushort; +typedef unsigned int GLuint; +typedef khronos_float_t GLfloat; +typedef khronos_float_t GLclampf; +typedef khronos_int32_t GLfixed; + +/* GL types for handling large vertex buffer objects */ +typedef khronos_intptr_t GLintptr; +typedef khronos_ssize_t GLsizeiptr; + +/* OpenGL ES core versions */ +#define GL_ES_VERSION_2_0 1 + +/* ClearBufferMask */ +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_COLOR_BUFFER_BIT 0x00004000 + +/* Boolean */ +#define GL_FALSE 0 +#define GL_TRUE 1 + +/* BeginMode */ +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 + +/* AlphaFunction (not supported in ES20) */ +/* GL_NEVER */ +/* GL_LESS */ +/* GL_EQUAL */ +/* GL_LEQUAL */ +/* GL_GREATER */ +/* GL_NOTEQUAL */ +/* GL_GEQUAL */ +/* GL_ALWAYS */ + +/* BlendingFactorDest */ +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 + +/* BlendingFactorSrc */ +/* GL_ZERO */ +/* GL_ONE */ +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +/* GL_SRC_ALPHA */ +/* GL_ONE_MINUS_SRC_ALPHA */ +/* GL_DST_ALPHA */ +/* GL_ONE_MINUS_DST_ALPHA */ + +/* BlendEquationSeparate */ +#define GL_FUNC_ADD 0x8006 +#define GL_BLEND_EQUATION 0x8009 +#define GL_BLEND_EQUATION_RGB 0x8009 /* same as BLEND_EQUATION */ +#define GL_BLEND_EQUATION_ALPHA 0x883D + +/* BlendSubtract */ +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B + +/* Separate Blend Functions */ +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_BLEND_COLOR 0x8005 + +/* Buffer Objects */ +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 + +#define GL_STREAM_DRAW 0x88E0 +#define GL_STATIC_DRAW 0x88E4 +#define GL_DYNAMIC_DRAW 0x88E8 + +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 + +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 + +/* CullFaceMode */ +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_FRONT_AND_BACK 0x0408 + +/* DepthFunction */ +/* GL_NEVER */ +/* GL_LESS */ +/* GL_EQUAL */ +/* GL_LEQUAL */ +/* GL_GREATER */ +/* GL_NOTEQUAL */ +/* GL_GEQUAL */ +/* GL_ALWAYS */ + +/* EnableCap */ +#define GL_TEXTURE_2D 0x0DE1 +#define GL_CULL_FACE 0x0B44 +#define GL_BLEND 0x0BE2 +#define GL_DITHER 0x0BD0 +#define GL_STENCIL_TEST 0x0B90 +#define GL_DEPTH_TEST 0x0B71 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_COVERAGE 0x80A0 + +/* ErrorCode */ +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_OUT_OF_MEMORY 0x0505 + +/* FrontFaceDirection */ +#define GL_CW 0x0900 +#define GL_CCW 0x0901 + +/* GetPName */ +#define GL_LINE_WIDTH 0x0B21 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_VIEWPORT 0x0BA2 +#define GL_SCISSOR_BOX 0x0C10 +/* GL_SCISSOR_TEST */ +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_ALPHA_BITS 0x0D55 +#define GL_DEPTH_BITS 0x0D56 +#define GL_STENCIL_BITS 0x0D57 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +/* GL_POLYGON_OFFSET_FILL */ +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB + +/* GetTextureParameter */ +/* GL_TEXTURE_MAG_FILTER */ +/* GL_TEXTURE_MIN_FILTER */ +/* GL_TEXTURE_WRAP_S */ +/* GL_TEXTURE_WRAP_T */ + +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 + +/* HintMode */ +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +/* HintTarget */ +#define GL_GENERATE_MIPMAP_HINT 0x8192 + +/* DataType */ +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_FIXED 0x140C + +/* PixelFormat */ +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A + +/* PixelType */ +/* GL_UNSIGNED_BYTE */ +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 + +/* Shaders */ +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_SHADER_TYPE 0x8B4F +#define GL_DELETE_STATUS 0x8B80 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D + +/* StencilFunction */ +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 + +/* StencilOp */ +/* GL_ZERO */ +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#define GL_INVERT 0x150A +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 + +/* StringName */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* TextureMagFilter */ +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 + +/* TextureMinFilter */ +/* GL_NEAREST */ +/* GL_LINEAR */ +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 + +/* TextureParameterName */ +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 + +/* TextureTarget */ +/* GL_TEXTURE_2D */ +#define GL_TEXTURE 0x1702 + +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C + +/* TextureUnit */ +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 + +/* TextureWrapMode */ +#define GL_REPEAT 0x2901 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_MIRRORED_REPEAT 0x8370 + +/* Uniform Types */ +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_CUBE 0x8B60 + +/* Vertex Arrays */ +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F + +/* Read Format */ +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B + +/* Shader Source */ +#define GL_COMPILE_STATUS 0x8B81 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_SHADER_COMPILER 0x8DFA + +/* Shader Binary */ +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 + +/* Shader Precision-Specified Types */ +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 + +/* Framebuffer Object. */ +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 + +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGB565 0x8D62 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_STENCIL_INDEX8 0x8D48 + +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 + +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 + +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 + +#define GL_NONE 0 + +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD + +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 + +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 + +/*------------------------------------------------------------------------- + * GL core functions. + *-----------------------------------------------------------------------*/ + +GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); +GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); +GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name); +GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); +GL_APICALL void GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GL_APICALL void GL_APIENTRY glBlendEquation ( GLenum mode ); +GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); +GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); +GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); +GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); +GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); +GL_APICALL void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GL_APICALL void GL_APIENTRY glClearDepthf (GLclampf depth); +GL_APICALL void GL_APIENTRY glClearStencil (GLint s); +GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); +GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); +GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); +GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); +GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers); +GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers); +GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); +GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers); +GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); +GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures); +GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); +GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); +GL_APICALL void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); +GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); +GL_APICALL void GL_APIENTRY glDisable (GLenum cap); +GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); +GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); +GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); +GL_APICALL void GL_APIENTRY glEnable (GLenum cap); +GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); +GL_APICALL void GL_APIENTRY glFinish (void); +GL_APICALL void GL_APIENTRY glFlush (void); +GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); +GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); +GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); +GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers); +GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers); +GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); +GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); +GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name); +GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params); +GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL GLenum GL_APIENTRY glGetError (void); +GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); +GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); +GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); +GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); +GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); +GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params); +GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name); +GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer); +GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); +GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); +GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); +GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); +GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); +GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); +GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); +GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); +GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); +GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); +GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); +GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); +GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); +GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length); +GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); +GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); +GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); +GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass); +GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); +GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params); +GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params); +GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat x); +GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint x); +GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y); +GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z); +GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); +GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); +GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); +GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); +GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr); +GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); + +#ifdef __cplusplus +} +#endif + +#endif /* __gl2_h_ */ + diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2_gl2ext.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2_gl2ext.h new file mode 100644 index 00000000000..e8ca8b13f1a --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2_gl2ext.h @@ -0,0 +1,2050 @@ +#ifndef __gl2ext_h_ +#define __gl2ext_h_ + +/* $Revision: 22801 $ on $Date:: 2013-08-21 03:20:48 -0700 #$ */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +#ifndef GL_APIENTRYP +# define GL_APIENTRYP GL_APIENTRY* +#endif + +/* New types shared by several extensions */ + +#ifndef __gl3_h_ +/* These are defined with respect to in the + * Apple extension spec, but they are also used by non-APPLE + * extensions, and in the Khronos header we use the Khronos + * portable types in khrplatform.h, which must be defined. + */ +typedef khronos_int64_t GLint64; +typedef khronos_uint64_t GLuint64; +typedef struct __GLsync *GLsync; +#endif + + +/*------------------------------------------------------------------------* + * OES extension tokens + *------------------------------------------------------------------------*/ + +/* GL_OES_compressed_ETC1_RGB8_texture */ +#ifndef GL_OES_compressed_ETC1_RGB8_texture +#define GL_ETC1_RGB8_OES 0x8D64 +#endif + +/* GL_OES_compressed_paletted_texture */ +#ifndef GL_OES_compressed_paletted_texture +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#endif + +/* GL_OES_depth24 */ +#ifndef GL_OES_depth24 +#define GL_DEPTH_COMPONENT24_OES 0x81A6 +#endif + +/* GL_OES_depth32 */ +#ifndef GL_OES_depth32 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#endif + +/* GL_OES_depth_texture */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +typedef void* GLeglImageOES; +#endif + +/* GL_OES_EGL_image_external */ +#ifndef GL_OES_EGL_image_external +/* GLeglImageOES defined in GL_OES_EGL_image already. */ +#define GL_TEXTURE_EXTERNAL_OES 0x8D65 +#define GL_SAMPLER_EXTERNAL_OES 0x8D66 +#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 +#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 +#endif + +/* GL_OES_element_index_uint */ +#ifndef GL_OES_element_index_uint +#define GL_UNSIGNED_INT 0x1405 +#endif + +/* GL_OES_get_program_binary */ +#ifndef GL_OES_get_program_binary +#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE +#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF +#endif + +/* GL_OES_mapbuffer */ +#ifndef GL_OES_mapbuffer +#define GL_WRITE_ONLY_OES 0x88B9 +#define GL_BUFFER_ACCESS_OES 0x88BB +#define GL_BUFFER_MAPPED_OES 0x88BC +#define GL_BUFFER_MAP_POINTER_OES 0x88BD +#endif + +/* GL_OES_packed_depth_stencil */ +#ifndef GL_OES_packed_depth_stencil +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#endif + +/* GL_OES_required_internalformat */ +#ifndef GL_OES_required_internalformat +#define GL_ALPHA8_OES 0x803C +#define GL_DEPTH_COMPONENT16_OES 0x81A5 +/* reuse GL_DEPTH_COMPONENT24_OES */ +/* reuse GL_DEPTH24_STENCIL8_OES */ +/* reuse GL_DEPTH_COMPONENT32_OES */ +#define GL_LUMINANCE4_ALPHA4_OES 0x8043 +#define GL_LUMINANCE8_ALPHA8_OES 0x8045 +#define GL_LUMINANCE8_OES 0x8040 +#define GL_RGBA4_OES 0x8056 +#define GL_RGB5_A1_OES 0x8057 +#define GL_RGB565_OES 0x8D62 +/* reuse GL_RGB8_OES */ +/* reuse GL_RGBA8_OES */ +/* reuse GL_RGB10_EXT */ +/* reuse GL_RGB10_A2_EXT */ +#endif + +/* GL_OES_rgb8_rgba8 */ +#ifndef GL_OES_rgb8_rgba8 +#define GL_RGB8_OES 0x8051 +#define GL_RGBA8_OES 0x8058 +#endif + +/* GL_OES_standard_derivatives */ +#ifndef GL_OES_standard_derivatives +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B +#endif + +/* GL_OES_stencil1 */ +#ifndef GL_OES_stencil1 +#define GL_STENCIL_INDEX1_OES 0x8D46 +#endif + +/* GL_OES_stencil4 */ +#ifndef GL_OES_stencil4 +#define GL_STENCIL_INDEX4_OES 0x8D47 +#endif + +#ifndef GL_OES_surfaceless_context +#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 +#endif + +/* GL_OES_texture_3D */ +#ifndef GL_OES_texture_3D +#define GL_TEXTURE_WRAP_R_OES 0x8072 +#define GL_TEXTURE_3D_OES 0x806F +#define GL_TEXTURE_BINDING_3D_OES 0x806A +#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 +#define GL_SAMPLER_3D_OES 0x8B5F +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 +#endif + +/* GL_OES_texture_float */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_float_linear */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_half_float */ +#ifndef GL_OES_texture_half_float +#define GL_HALF_FLOAT_OES 0x8D61 +#endif + +/* GL_OES_texture_half_float_linear */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_npot */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_vertex_array_object */ +#ifndef GL_OES_vertex_array_object +#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 +#endif + +/* GL_OES_vertex_half_float */ +/* GL_HALF_FLOAT_OES defined in GL_OES_texture_half_float already. */ + +/* GL_OES_vertex_type_10_10_10_2 */ +#ifndef GL_OES_vertex_type_10_10_10_2 +#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 +#define GL_INT_10_10_10_2_OES 0x8DF7 +#endif + +/*------------------------------------------------------------------------* + * KHR extension tokens + *------------------------------------------------------------------------*/ + +#ifndef GL_KHR_debug +typedef void (GL_APIENTRYP GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 +#define GL_DEBUG_SOURCE_API_KHR 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A +#define GL_DEBUG_SOURCE_OTHER_KHR 0x824B +#define GL_DEBUG_TYPE_ERROR_KHR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 +#define GL_DEBUG_TYPE_OTHER_KHR 0x8251 +#define GL_DEBUG_TYPE_MARKER_KHR 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D +#define GL_BUFFER_KHR 0x82E0 +#define GL_SHADER_KHR 0x82E1 +#define GL_PROGRAM_KHR 0x82E2 +#define GL_QUERY_KHR 0x82E3 +/* PROGRAM_PIPELINE only in GL */ +#define GL_SAMPLER_KHR 0x82E6 +/* DISPLAY_LIST only in GL */ +#define GL_MAX_LABEL_LENGTH_KHR 0x82E8 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 +#define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 +#define GL_DEBUG_OUTPUT_KHR 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 +#define GL_STACK_OVERFLOW_KHR 0x0503 +#define GL_STACK_UNDERFLOW_KHR 0x0504 +#endif + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#endif + +/*------------------------------------------------------------------------* + * AMD extension tokens + *------------------------------------------------------------------------*/ + +/* GL_AMD_compressed_3DC_texture */ +#ifndef GL_AMD_compressed_3DC_texture +#define GL_3DC_X_AMD 0x87F9 +#define GL_3DC_XY_AMD 0x87FA +#endif + +/* GL_AMD_compressed_ATC_texture */ +#ifndef GL_AMD_compressed_ATC_texture +#define GL_ATC_RGB_AMD 0x8C92 +#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 +#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE +#endif + +/* GL_AMD_performance_monitor */ +#ifndef GL_AMD_performance_monitor +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +#endif + +/* GL_AMD_program_binary_Z400 */ +#ifndef GL_AMD_program_binary_Z400 +#define GL_Z400_BINARY_AMD 0x8740 +#endif + +/*------------------------------------------------------------------------* + * ANGLE extension tokens + *------------------------------------------------------------------------*/ + +/* GL_ANGLE_depth_texture */ +#ifndef GL_ANGLE_depth_texture +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_UNSIGNED_INT 0x1405 +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#endif + +/* GL_ANGLE_framebuffer_blit */ +#ifndef GL_ANGLE_framebuffer_blit +#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA +#endif + +/* GL_ANGLE_framebuffer_multisample */ +#ifndef GL_ANGLE_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 +#define GL_MAX_SAMPLES_ANGLE 0x8D57 +#endif + +/* GL_ANGLE_instanced_arrays */ +#ifndef GL_ANGLE_instanced_arrays +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE +#endif + +/* GL_ANGLE_pack_reverse_row_order */ +#ifndef GL_ANGLE_pack_reverse_row_order +#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 +#endif + +/* GL_ANGLE_program_binary */ +#ifndef GL_ANGLE_program_binary +#define GL_PROGRAM_BINARY_ANGLE 0x93A6 +#endif + +/* GL_ANGLE_texture_compression_dxt3 */ +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#endif + +/* GL_ANGLE_texture_compression_dxt5 */ +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 +#endif + +/* GL_ANGLE_texture_usage */ +#ifndef GL_ANGLE_texture_usage +#define GL_TEXTURE_USAGE_ANGLE 0x93A2 +#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 +#endif + +/* GL_ANGLE_translated_shader_source */ +#ifndef GL_ANGLE_translated_shader_source +#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 +#endif + +/*------------------------------------------------------------------------* + * APPLE extension tokens + *------------------------------------------------------------------------*/ + +/* GL_APPLE_copy_texture_levels */ +/* No new tokens introduced by this extension. */ + +/* GL_APPLE_framebuffer_multisample */ +#ifndef GL_APPLE_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 +#define GL_MAX_SAMPLES_APPLE 0x8D57 +#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA +#endif + +/* GL_APPLE_rgb_422 */ +#ifndef GL_APPLE_rgb_422 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#endif + +/* GL_APPLE_sync */ +#ifndef GL_APPLE_sync + +#define GL_SYNC_OBJECT_APPLE 0x8A53 +#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 +#define GL_OBJECT_TYPE_APPLE 0x9112 +#define GL_SYNC_CONDITION_APPLE 0x9113 +#define GL_SYNC_STATUS_APPLE 0x9114 +#define GL_SYNC_FLAGS_APPLE 0x9115 +#define GL_SYNC_FENCE_APPLE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 +#define GL_UNSIGNALED_APPLE 0x9118 +#define GL_SIGNALED_APPLE 0x9119 +#define GL_ALREADY_SIGNALED_APPLE 0x911A +#define GL_TIMEOUT_EXPIRED_APPLE 0x911B +#define GL_CONDITION_SATISFIED_APPLE 0x911C +#define GL_WAIT_FAILED_APPLE 0x911D +#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 +#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull +#endif + +/* GL_APPLE_texture_format_BGRA8888 */ +#ifndef GL_APPLE_texture_format_BGRA8888 +#define GL_BGRA_EXT 0x80E1 +#endif + +/* GL_APPLE_texture_max_level */ +#ifndef GL_APPLE_texture_max_level +#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D +#endif + +/*------------------------------------------------------------------------* + * ARM extension tokens + *------------------------------------------------------------------------*/ + +/* GL_ARM_mali_program_binary */ +#ifndef GL_ARM_mali_program_binary +#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 +#endif + +/* GL_ARM_mali_shader_binary */ +#ifndef GL_ARM_mali_shader_binary +#define GL_MALI_SHADER_BINARY_ARM 0x8F60 +#endif + +/* GL_ARM_rgba8 */ +/* No new tokens introduced by this extension. */ + +/*------------------------------------------------------------------------* + * EXT extension tokens + *------------------------------------------------------------------------*/ + +/* GL_EXT_blend_minmax */ +#ifndef GL_EXT_blend_minmax +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#endif + +/* GL_EXT_color_buffer_half_float */ +#ifndef GL_EXT_color_buffer_half_float +#define GL_RGBA16F_EXT 0x881A +#define GL_RGB16F_EXT 0x881B +#define GL_RG16F_EXT 0x822F +#define GL_R16F_EXT 0x822D +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 +#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 +#endif + +/* GL_EXT_debug_label */ +#ifndef GL_EXT_debug_label +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +#endif + +/* GL_EXT_debug_marker */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_discard_framebuffer */ +#ifndef GL_EXT_discard_framebuffer +#define GL_COLOR_EXT 0x1800 +#define GL_DEPTH_EXT 0x1801 +#define GL_STENCIL_EXT 0x1802 +#endif + +#ifndef GL_EXT_disjoint_timer_query +#define GL_QUERY_COUNTER_BITS_EXT 0x8864 +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#define GL_TIME_ELAPSED_EXT 0x88BF +#define GL_TIMESTAMP_EXT 0x8E28 +#define GL_GPU_DISJOINT_EXT 0x8FBB +#endif + +#ifndef GL_EXT_draw_buffers +#define GL_EXT_draw_buffers 1 +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 +#define GL_DRAW_BUFFER0_EXT 0x8825 +#define GL_DRAW_BUFFER1_EXT 0x8826 +#define GL_DRAW_BUFFER2_EXT 0x8827 +#define GL_DRAW_BUFFER3_EXT 0x8828 +#define GL_DRAW_BUFFER4_EXT 0x8829 +#define GL_DRAW_BUFFER5_EXT 0x882A +#define GL_DRAW_BUFFER6_EXT 0x882B +#define GL_DRAW_BUFFER7_EXT 0x882C +#define GL_DRAW_BUFFER8_EXT 0x882D +#define GL_DRAW_BUFFER9_EXT 0x882E +#define GL_DRAW_BUFFER10_EXT 0x882F +#define GL_DRAW_BUFFER11_EXT 0x8830 +#define GL_DRAW_BUFFER12_EXT 0x8831 +#define GL_DRAW_BUFFER13_EXT 0x8832 +#define GL_DRAW_BUFFER14_EXT 0x8833 +#define GL_DRAW_BUFFER15_EXT 0x8834 +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#endif + +/* GL_EXT_map_buffer_range */ +#ifndef GL_EXT_map_buffer_range +#define GL_MAP_READ_BIT_EXT 0x0001 +#define GL_MAP_WRITE_BIT_EXT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 +#endif + +/* GL_EXT_multisampled_render_to_texture */ +#ifndef GL_EXT_multisampled_render_to_texture +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C +/* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */ +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +#endif + +/* GL_EXT_multiview_draw_buffers */ +#ifndef GL_EXT_multiview_draw_buffers +#define GL_COLOR_ATTACHMENT_EXT 0x90F0 +#define GL_MULTIVIEW_EXT 0x90F1 +#define GL_DRAW_BUFFER_EXT 0x0C01 +#define GL_READ_BUFFER_EXT 0x0C02 +#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 +#endif + +/* GL_EXT_multi_draw_arrays */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_occlusion_query_boolean */ +#ifndef GL_EXT_occlusion_query_boolean +#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#endif + +/* GL_EXT_read_format_bgra */ +#ifndef GL_EXT_read_format_bgra +#define GL_BGRA_EXT 0x80E1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 +#endif + +/* GL_EXT_robustness */ +#ifndef GL_EXT_robustness +/* reuse GL_NO_ERROR */ +#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 +#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 +#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 +#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 +#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 +#endif + +/* GL_EXT_separate_shader_objects */ +#ifndef GL_EXT_separate_shader_objects +#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 +#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE_EXT 0x8258 +#define GL_ACTIVE_PROGRAM_EXT 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A +#endif + +/* GL_EXT_shader_framebuffer_fetch */ +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#endif + +/* GL_EXT_shader_texture_lod */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_shadow_samplers */ +#ifndef GL_EXT_shadow_samplers +#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C +#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D +#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E +#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 +#endif + +/* GL_EXT_sRGB */ +#ifndef GL_EXT_sRGB +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 +#endif + +/* GL_EXT_sRGB_write_control */ +#ifndef GL_EXT_sRGB_write_control +#define GL_EXT_sRGB_write_control 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#endif + +/* GL_EXT_texture_compression_dxt1 */ +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#endif + +/* GL_EXT_texture_filter_anisotropic */ +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif + +/* GL_EXT_texture_format_BGRA8888 */ +#ifndef GL_EXT_texture_format_BGRA8888 +#define GL_BGRA_EXT 0x80E1 +#endif + +/* GL_EXT_texture_rg */ +#ifndef GL_EXT_texture_rg +#define GL_RED_EXT 0x1903 +#define GL_RG_EXT 0x8227 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#endif + +/* GL_EXT_texture_sRGB_decode */ +#ifndef GL_EXT_texture_sRGB_decode +#define GL_EXT_texture_sRGB_decode 1 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#endif + +/* GL_EXT_texture_storage */ +#ifndef GL_EXT_texture_storage +#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F +#define GL_ALPHA8_EXT 0x803C +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_RGBA32F_EXT 0x8814 +#define GL_RGB32F_EXT 0x8815 +#define GL_ALPHA32F_EXT 0x8816 +#define GL_LUMINANCE32F_EXT 0x8818 +#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 +/* reuse GL_RGBA16F_EXT */ +/* reuse GL_RGB16F_EXT */ +#define GL_ALPHA16F_EXT 0x881C +#define GL_LUMINANCE16F_EXT 0x881E +#define GL_LUMINANCE_ALPHA16F_EXT 0x881F +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGB10_EXT 0x8052 +#define GL_BGRA8_EXT 0x93A1 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#define GL_R32F_EXT 0x822E +#define GL_RG32F_EXT 0x8230 +#define GL_R16F_EXT 0x822D +#define GL_RG16F_EXT 0x822F +#endif + +/* GL_EXT_texture_type_2_10_10_10_REV */ +#ifndef GL_EXT_texture_type_2_10_10_10_REV +#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 +#endif + +/* GL_EXT_unpack_subimage */ +#ifndef GL_EXT_unpack_subimage +#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 +#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 +#endif + +/*------------------------------------------------------------------------* + * DMP extension tokens + *------------------------------------------------------------------------*/ + +/* GL_DMP_shader_binary */ +#ifndef GL_DMP_shader_binary +#define GL_SHADER_BINARY_DMP 0x9250 +#endif + +/*------------------------------------------------------------------------* + * FJ extension tokens + *------------------------------------------------------------------------*/ + +/* GL_FJ_shader_binary_GCCSO */ +#ifndef GL_FJ_shader_binary_GCCSO +#define GL_GCCSO_SHADER_BINARY_FJ 0x9260 +#endif + +/*------------------------------------------------------------------------* + * IMG extension tokens + *------------------------------------------------------------------------*/ + +/* GL_IMG_program_binary */ +#ifndef GL_IMG_program_binary +#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 +#endif + +/* GL_IMG_read_format */ +#ifndef GL_IMG_read_format +#define GL_BGRA_IMG 0x80E1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 +#endif + +/* GL_IMG_shader_binary */ +#ifndef GL_IMG_shader_binary +#define GL_SGX_BINARY_IMG 0x8C0A +#endif + +/* GL_IMG_texture_compression_pvrtc */ +#ifndef GL_IMG_texture_compression_pvrtc +#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 +#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 +#endif + +/* GL_IMG_texture_compression_pvrtc2 */ +#ifndef GL_IMG_texture_compression_pvrtc2 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 +#endif + +/* GL_IMG_multisampled_render_to_texture */ +#ifndef GL_IMG_multisampled_render_to_texture +#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 +#define GL_MAX_SAMPLES_IMG 0x9135 +#define GL_TEXTURE_SAMPLES_IMG 0x9136 +#endif + +/*------------------------------------------------------------------------* + * NV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_NV_coverage_sample */ +#ifndef GL_NV_coverage_sample +#define GL_COVERAGE_COMPONENT_NV 0x8ED0 +#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 +#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 +#define GL_COVERAGE_BUFFERS_NV 0x8ED3 +#define GL_COVERAGE_SAMPLES_NV 0x8ED4 +#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 +#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 +#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 +#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 +#endif + +/* GL_NV_depth_nonlinear */ +#ifndef GL_NV_depth_nonlinear +#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C +#endif + +/* GL_NV_draw_buffers */ +#ifndef GL_NV_draw_buffers +#define GL_MAX_DRAW_BUFFERS_NV 0x8824 +#define GL_DRAW_BUFFER0_NV 0x8825 +#define GL_DRAW_BUFFER1_NV 0x8826 +#define GL_DRAW_BUFFER2_NV 0x8827 +#define GL_DRAW_BUFFER3_NV 0x8828 +#define GL_DRAW_BUFFER4_NV 0x8829 +#define GL_DRAW_BUFFER5_NV 0x882A +#define GL_DRAW_BUFFER6_NV 0x882B +#define GL_DRAW_BUFFER7_NV 0x882C +#define GL_DRAW_BUFFER8_NV 0x882D +#define GL_DRAW_BUFFER9_NV 0x882E +#define GL_DRAW_BUFFER10_NV 0x882F +#define GL_DRAW_BUFFER11_NV 0x8830 +#define GL_DRAW_BUFFER12_NV 0x8831 +#define GL_DRAW_BUFFER13_NV 0x8832 +#define GL_DRAW_BUFFER14_NV 0x8833 +#define GL_DRAW_BUFFER15_NV 0x8834 +#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 +#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 +#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 +#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 +#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 +#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 +#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 +#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 +#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 +#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 +#define GL_COLOR_ATTACHMENT10_NV 0x8CEA +#define GL_COLOR_ATTACHMENT11_NV 0x8CEB +#define GL_COLOR_ATTACHMENT12_NV 0x8CEC +#define GL_COLOR_ATTACHMENT13_NV 0x8CED +#define GL_COLOR_ATTACHMENT14_NV 0x8CEE +#define GL_COLOR_ATTACHMENT15_NV 0x8CEF +#endif + +/* GL_NV_draw_instanced */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_fbo_color_attachments */ +#ifndef GL_NV_fbo_color_attachments +#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF +/* GL_COLOR_ATTACHMENT{0-15}_NV defined in GL_NV_draw_buffers already. */ +#endif + +/* GL_NV_fence */ +#ifndef GL_NV_fence +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +#endif + +/* GL_NV_framebuffer_blit */ +#ifndef GL_NV_framebuffer_blit +#define GL_READ_FRAMEBUFFER_NV 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA +#endif + +/* GL_NV_framebuffer_multisample */ +#ifndef GL_NV_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 +#define GL_MAX_SAMPLES_NV 0x8D57 +#endif + +/* GL_NV_generate_mipmap_sRGB */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_instanced_arrays */ +#ifndef GL_NV_instanced_arrays +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE +#endif + +/* GL_NV_read_buffer */ +#ifndef GL_NV_read_buffer +#define GL_READ_BUFFER_NV 0x0C02 +#endif + +/* GL_NV_read_buffer_front */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_depth */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_depth_stencil */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_stencil */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_shadow_samplers_array */ +#ifndef GL_NV_shadow_samplers_array +#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 +#endif + +/* GL_NV_shadow_samplers_cube */ +#ifndef GL_NV_shadow_samplers_cube +#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 +#endif + +/* GL_NV_sRGB_formats */ +#ifndef GL_NV_sRGB_formats +#define GL_SLUMINANCE_NV 0x8C46 +#define GL_SLUMINANCE_ALPHA_NV 0x8C44 +#define GL_SRGB8_NV 0x8C41 +#define GL_SLUMINANCE8_NV 0x8C47 +#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 +#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F +#define GL_ETC1_SRGB8_NV 0x88EE +#endif + +/* GL_NV_texture_border_clamp */ +#ifndef GL_NV_texture_border_clamp +#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 +#define GL_CLAMP_TO_BORDER_NV 0x812D +#endif + +/* GL_NV_texture_compression_s3tc_update */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_texture_npot_2D_mipmap */ +/* No new tokens introduced by this extension. */ + +/*------------------------------------------------------------------------* + * QCOM extension tokens + *------------------------------------------------------------------------*/ + +/* GL_QCOM_alpha_test */ +#ifndef GL_QCOM_alpha_test +#define GL_ALPHA_TEST_QCOM 0x0BC0 +#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 +#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 +#endif + +/* GL_QCOM_binning_control */ +#ifndef GL_QCOM_binning_control +#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 +#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 +#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 +#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 +#endif + +/* GL_QCOM_driver_control */ +/* No new tokens introduced by this extension. */ + +/* GL_QCOM_extended_get */ +#ifndef GL_QCOM_extended_get +#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 +#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 +#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 +#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 +#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 +#define GL_TEXTURE_TYPE_QCOM 0x8BD7 +#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 +#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 +#define GL_TEXTURE_TARGET_QCOM 0x8BDA +#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB +#define GL_STATE_RESTORE 0x8BDC +#endif + +/* GL_QCOM_extended_get2 */ +/* No new tokens introduced by this extension. */ + +/* GL_QCOM_perfmon_global_mode */ +#ifndef GL_QCOM_perfmon_global_mode +#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 +#endif + +/* GL_QCOM_writeonly_rendering */ +#ifndef GL_QCOM_writeonly_rendering +#define GL_WRITEONLY_RENDERING_QCOM 0x8823 +#endif + +/* GL_QCOM_tiled_rendering */ +#ifndef GL_QCOM_tiled_rendering +#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 +#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 +#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 +#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 +#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 +#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 +#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 +#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 +#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 +#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 +#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 +#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 +#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 +#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 +#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 +#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 +#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 +#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 +#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 +#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 +#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 +#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 +#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 +#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 +#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 +#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 +#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 +#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 +#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 +#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 +#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 +#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 +#endif + +/*------------------------------------------------------------------------* + * VIV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_VIV_shader_binary */ +#ifndef GL_VIV_shader_binary +#define GL_SHADER_BINARY_VIV 0x8FC4 +#endif + +/*------------------------------------------------------------------------* + * End of extension tokens, start of corresponding extension functions + *------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------* + * OES extension functions + *------------------------------------------------------------------------*/ + +/* GL_OES_compressed_ETC1_RGB8_texture */ +#ifndef GL_OES_compressed_ETC1_RGB8_texture +#define GL_OES_compressed_ETC1_RGB8_texture 1 +#endif + +/* GL_OES_compressed_paletted_texture */ +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 +#endif + +/* GL_OES_depth24 */ +#ifndef GL_OES_depth24 +#define GL_OES_depth24 1 +#endif + +/* GL_OES_depth32 */ +#ifndef GL_OES_depth32 +#define GL_OES_depth32 1 +#endif + +/* GL_OES_depth_texture */ +#ifndef GL_OES_depth_texture +#define GL_OES_depth_texture 1 +#endif + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +#define GL_OES_EGL_image 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); +GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); +#endif +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); +#endif + +/* GL_OES_EGL_image_external */ +#ifndef GL_OES_EGL_image_external +#define GL_OES_EGL_image_external 1 +/* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */ +#endif + +/* GL_OES_element_index_uint */ +#ifndef GL_OES_element_index_uint +#define GL_OES_element_index_uint 1 +#endif + +/* GL_OES_fbo_render_mipmap */ +#ifndef GL_OES_fbo_render_mipmap +#define GL_OES_fbo_render_mipmap 1 +#endif + +/* GL_OES_fragment_precision_high */ +#ifndef GL_OES_fragment_precision_high +#define GL_OES_fragment_precision_high 1 +#endif + +/* GL_OES_get_program_binary */ +#ifndef GL_OES_get_program_binary +#define GL_OES_get_program_binary 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); +GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); +#endif +typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); +typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); +#endif + +/* GL_OES_mapbuffer */ +#ifndef GL_OES_mapbuffer +#define GL_OES_mapbuffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); +GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); +GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid **params); +#endif +typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); +typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid **params); +#endif + +/* GL_OES_packed_depth_stencil */ +#ifndef GL_OES_packed_depth_stencil +#define GL_OES_packed_depth_stencil 1 +#endif + +/* GL_OES_required_internalformat */ +#ifndef GL_OES_required_internalformat +#define GL_OES_required_internalformat 1 +#endif + +/* GL_OES_rgb8_rgba8 */ +#ifndef GL_OES_rgb8_rgba8 +#define GL_OES_rgb8_rgba8 1 +#endif + +/* GL_OES_standard_derivatives */ +#ifndef GL_OES_standard_derivatives +#define GL_OES_standard_derivatives 1 +#endif + +/* GL_OES_stencil1 */ +#ifndef GL_OES_stencil1 +#define GL_OES_stencil1 1 +#endif + +/* GL_OES_stencil4 */ +#ifndef GL_OES_stencil4 +#define GL_OES_stencil4 1 +#endif + +#ifndef GL_OES_surfaceless_context +#define GL_OES_surfaceless_context 1 +#endif + +/* GL_OES_texture_3D */ +#ifndef GL_OES_texture_3D +#define GL_OES_texture_3D 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +#endif +typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); +typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +#endif + +/* GL_OES_texture_float */ +#ifndef GL_OES_texture_float +#define GL_OES_texture_float 1 +#endif + +/* GL_OES_texture_float_linear */ +#ifndef GL_OES_texture_float_linear +#define GL_OES_texture_float_linear 1 +#endif + +/* GL_OES_texture_half_float */ +#ifndef GL_OES_texture_half_float +#define GL_OES_texture_half_float 1 +#endif + +/* GL_OES_texture_half_float_linear */ +#ifndef GL_OES_texture_half_float_linear +#define GL_OES_texture_half_float_linear 1 +#endif + +/* GL_OES_texture_npot */ +#ifndef GL_OES_texture_npot +#define GL_OES_texture_npot 1 +#endif + +/* GL_OES_vertex_array_object */ +#ifndef GL_OES_vertex_array_object +#define GL_OES_vertex_array_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); +GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); +GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); +GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); +#endif +typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); +typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); +typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); +#endif + +/* GL_OES_vertex_half_float */ +#ifndef GL_OES_vertex_half_float +#define GL_OES_vertex_half_float 1 +#endif + +/* GL_OES_vertex_type_10_10_10_2 */ +#ifndef GL_OES_vertex_type_10_10_10_2 +#define GL_OES_vertex_type_10_10_10_2 1 +#endif + +/*------------------------------------------------------------------------* + * KHR extension functions + *------------------------------------------------------------------------*/ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDebugMessageControlKHR (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GL_APICALL void GL_APIENTRY glDebugMessageInsertKHR (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHR (GLDEBUGPROCKHR callback, const void *userParam); +GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHR (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GL_APICALL void GL_APIENTRY glPushDebugGroupKHR (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GL_APICALL void GL_APIENTRY glPopDebugGroupKHR (void); +GL_APICALL void GL_APIENTRY glObjectLabelKHR (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectLabelKHR (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GL_APICALL void GL_APIENTRY glObjectPtrLabelKHR (const void *ptr, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHR (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, GLvoid **params); +#endif +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC) (GLDEBUGPROCKHR callback, const void *userParam); +typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC) (void); +typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRPROC) (GLenum pname, GLvoid **params); +#endif + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif + + +/*------------------------------------------------------------------------* + * AMD extension functions + *------------------------------------------------------------------------*/ + +/* GL_AMD_compressed_3DC_texture */ +#ifndef GL_AMD_compressed_3DC_texture +#define GL_AMD_compressed_3DC_texture 1 +#endif + +/* GL_AMD_compressed_ATC_texture */ +#ifndef GL_AMD_compressed_ATC_texture +#define GL_AMD_compressed_ATC_texture 1 +#endif + +/* AMD_performance_monitor */ +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); +GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); +GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); +typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); +typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif + +/* GL_AMD_program_binary_Z400 */ +#ifndef GL_AMD_program_binary_Z400 +#define GL_AMD_program_binary_Z400 1 +#endif + +/*------------------------------------------------------------------------* + * ANGLE extension functions + *------------------------------------------------------------------------*/ + +/* GL_ANGLE_depth_texture */ +#ifndef GL_ANGLE_depth_texture +#define GL_ANGLE_depth_texture 1 +#endif + +/* GL_ANGLE_framebuffer_blit */ +#ifndef GL_ANGLE_framebuffer_blit +#define GL_ANGLE_framebuffer_blit 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif + +/* GL_ANGLE_framebuffer_multisample */ +#ifndef GL_ANGLE_framebuffer_multisample +#define GL_ANGLE_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif + +#ifndef GL_ANGLE_instanced_arrays +#define GL_ANGLE_instanced_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); +#endif + +/* GL_ANGLE_pack_reverse_row_order */ +#ifndef GL_ANGLE_pack_reverse_row_order +#define GL_ANGLE_pack_reverse_row_order 1 +#endif + +/* GL_ANGLE_program_binary */ +#ifndef GL_ANGLE_program_binary +#define GL_ANGLE_program_binary 1 +#endif + +/* GL_ANGLE_texture_compression_dxt3 */ +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_ANGLE_texture_compression_dxt3 1 +#endif + +/* GL_ANGLE_texture_compression_dxt5 */ +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_ANGLE_texture_compression_dxt5 1 +#endif + +/* GL_ANGLE_texture_usage */ +#ifndef GL_ANGLE_texture_usage +#define GL_ANGLE_texture_usage 1 +#endif + +#ifndef GL_ANGLE_translated_shader_source +#define GL_ANGLE_translated_shader_source 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); +#endif +typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); +#endif + +/*------------------------------------------------------------------------* + * APPLE extension functions + *------------------------------------------------------------------------*/ + +/* GL_APPLE_copy_texture_levels */ +#ifndef GL_APPLE_copy_texture_levels +#define GL_APPLE_copy_texture_levels 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +#endif +typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +#endif + +/* GL_APPLE_framebuffer_multisample */ +#ifndef GL_APPLE_framebuffer_multisample +#define GL_APPLE_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); +#endif + +/* GL_APPLE_rgb_422 */ +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#endif + +/* GL_APPLE_sync */ +#ifndef GL_APPLE_sync +#define GL_APPLE_sync 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); +GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); +GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); +GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); +GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); +GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); +GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +#endif +typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); +typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); +typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); +typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +#endif + +/* GL_APPLE_texture_format_BGRA8888 */ +#ifndef GL_APPLE_texture_format_BGRA8888 +#define GL_APPLE_texture_format_BGRA8888 1 +#endif + +/* GL_APPLE_texture_max_level */ +#ifndef GL_APPLE_texture_max_level +#define GL_APPLE_texture_max_level 1 +#endif + +/*------------------------------------------------------------------------* + * ARM extension functions + *------------------------------------------------------------------------*/ + +/* GL_ARM_mali_program_binary */ +#ifndef GL_ARM_mali_program_binary +#define GL_ARM_mali_program_binary 1 +#endif + +/* GL_ARM_mali_shader_binary */ +#ifndef GL_ARM_mali_shader_binary +#define GL_ARM_mali_shader_binary 1 +#endif + +/* GL_ARM_rgba8 */ +#ifndef GL_ARM_rgba8 +#define GL_ARM_rgba8 1 +#endif + +/*------------------------------------------------------------------------* + * EXT extension functions + *------------------------------------------------------------------------*/ + +/* GL_EXT_blend_minmax */ +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#endif + +/* GL_EXT_color_buffer_half_float */ +#ifndef GL_EXT_color_buffer_half_float +#define GL_EXT_color_buffer_half_float 1 +#endif + +/* GL_EXT_debug_label */ +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif + +/* GL_EXT_debug_marker */ +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); +#endif +typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#endif + +/* GL_EXT_discard_framebuffer */ +#ifndef GL_EXT_discard_framebuffer +#define GL_EXT_discard_framebuffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); +#endif +typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +#endif + +#ifndef GL_EXT_disjoint_timer_query +#define GL_EXT_disjoint_timer_query 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); +GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); +GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); +GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); +GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); +GL_APICALL void GL_APIENTRY glQueryCounterEXT (GLuint id, GLenum target); +GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectivEXT (GLuint id, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +#endif +typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); +typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); +typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); +typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTPROC) (GLuint id, GLenum target); +typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +#endif /* GL_EXT_disjoint_timer_query */ + +#ifndef GL_EXT_draw_buffers +#define GL_EXT_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs); +#endif /* GL_EXT_draw_buffers */ + +/* GL_EXT_map_buffer_range */ +#ifndef GL_EXT_map_buffer_range +#define GL_EXT_map_buffer_range 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void* GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); +#endif +typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +#endif + +/* GL_EXT_multisampled_render_to_texture */ +#ifndef GL_EXT_multisampled_render_to_texture +#define GL_EXT_multisampled_render_to_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif + +/* GL_EXT_multiview_draw_buffers */ +#ifndef GL_EXT_multiview_draw_buffers +#define GL_EXT_multiview_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); +GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); +GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); +#endif +typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); +typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); +#endif + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); +#endif + +/* GL_EXT_occlusion_query_boolean */ +#ifndef GL_EXT_occlusion_query_boolean +#define GL_EXT_occlusion_query_boolean 1 +/* All entry points also exist in GL_EXT_disjoint_timer_query */ +#endif + +/* GL_EXT_read_format_bgra */ +#ifndef GL_EXT_read_format_bgra +#define GL_EXT_read_format_bgra 1 +#endif + +/* GL_EXT_robustness */ +#ifndef GL_EXT_robustness +#define GL_EXT_robustness 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); +GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); +GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); +#endif +typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); +typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +#endif + +/* GL_EXT_separate_shader_objects */ +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); +GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); +GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); +GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); +GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); +GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint x); +GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint x, GLint y); +GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z); +GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); +GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat x); +GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +#endif +typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); +typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); +typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); +typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint x); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint x, GLint y); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat x); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +#endif + +/* GL_EXT_shader_framebuffer_fetch */ +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_EXT_shader_framebuffer_fetch 1 +#endif + +/* GL_EXT_shader_texture_lod */ +#ifndef GL_EXT_shader_texture_lod +#define GL_EXT_shader_texture_lod 1 +#endif + +/* GL_EXT_shadow_samplers */ +#ifndef GL_EXT_shadow_samplers +#define GL_EXT_shadow_samplers 1 +#endif + +/* GL_EXT_sRGB */ +#ifndef GL_EXT_sRGB +#define GL_EXT_sRGB 1 +#endif + +/* GL_EXT_texture_compression_dxt1 */ +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_EXT_texture_compression_dxt1 1 +#endif + +/* GL_EXT_texture_filter_anisotropic */ +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#endif + +/* GL_EXT_texture_format_BGRA8888 */ +#ifndef GL_EXT_texture_format_BGRA8888 +#define GL_EXT_texture_format_BGRA8888 1 +#endif + +/* GL_EXT_texture_rg */ +#ifndef GL_EXT_texture_rg +#define GL_EXT_texture_rg 1 +#endif + +/* GL_EXT_texture_storage */ +#ifndef GL_EXT_texture_storage +#define GL_EXT_texture_storage 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif + +/* GL_EXT_texture_type_2_10_10_10_REV */ +#ifndef GL_EXT_texture_type_2_10_10_10_REV +#define GL_EXT_texture_type_2_10_10_10_REV 1 +#endif + +/* GL_EXT_unpack_subimage */ +#ifndef GL_EXT_unpack_subimage +#define GL_EXT_unpack_subimage 1 +#endif + +/*------------------------------------------------------------------------* + * DMP extension functions + *------------------------------------------------------------------------*/ + +/* GL_DMP_shader_binary */ +#ifndef GL_DMP_shader_binary +#define GL_DMP_shader_binary 1 +#endif + +/*------------------------------------------------------------------------* + * FJ extension functions + *------------------------------------------------------------------------*/ + +/* GL_FJ_shader_binary_GCCSO */ +#ifndef GL_FJ_shader_binary_GCCSO +#define GL_FJ_shader_binary_GCCSO 1 +#endif + +/*------------------------------------------------------------------------* + * IMG extension functions + *------------------------------------------------------------------------*/ + +/* GL_IMG_program_binary */ +#ifndef GL_IMG_program_binary +#define GL_IMG_program_binary 1 +#endif + +/* GL_IMG_read_format */ +#ifndef GL_IMG_read_format +#define GL_IMG_read_format 1 +#endif + +/* GL_IMG_shader_binary */ +#ifndef GL_IMG_shader_binary +#define GL_IMG_shader_binary 1 +#endif + +/* GL_IMG_texture_compression_pvrtc */ +#ifndef GL_IMG_texture_compression_pvrtc +#define GL_IMG_texture_compression_pvrtc 1 +#endif + +/* GL_IMG_texture_compression_pvrtc2 */ +#ifndef GL_IMG_texture_compression_pvrtc2 +#define GL_IMG_texture_compression_pvrtc2 1 +#endif + +/* GL_IMG_multisampled_render_to_texture */ +#ifndef GL_IMG_multisampled_render_to_texture +#define GL_IMG_multisampled_render_to_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif + +/*------------------------------------------------------------------------* + * NV extension functions + *------------------------------------------------------------------------*/ + +/* GL_NV_coverage_sample */ +#ifndef GL_NV_coverage_sample +#define GL_NV_coverage_sample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); +GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); +#endif +typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); +typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); +#endif + +/* GL_NV_depth_nonlinear */ +#ifndef GL_NV_depth_nonlinear +#define GL_NV_depth_nonlinear 1 +#endif + +/* GL_NV_draw_buffers */ +#ifndef GL_NV_draw_buffers +#define GL_NV_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); +#endif + +/* GL_NV_draw_instanced */ +#ifndef GL_NV_draw_instanced +#define GL_NV_draw_instanced 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +#endif + +/* GL_NV_fbo_color_attachments */ +#ifndef GL_NV_fbo_color_attachments +#define GL_NV_fbo_color_attachments 1 +#endif + +/* GL_NV_fence */ +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint fence); +GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint fence); +GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint fence); +GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#endif + +/* GL_NV_framebuffer_blit */ +#ifndef GL_NV_framebuffer_blit +#define GL_NV_framebuffer_blit 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif + +/* GL_NV_framebuffer_multisample */ +#ifndef GL_NV_framebuffer_multisample +#define GL_NV_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif + +/* GL_NV_generate_mipmap_sRGB */ +#ifndef GL_NV_generate_mipmap_sRGB +#define GL_NV_generate_mipmap_sRGB 1 +#endif + +/* GL_NV_instanced_arrays */ +#ifndef GL_NV_instanced_arrays +#define GL_NV_instanced_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor); +#endif +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor); +#endif + +/* GL_NV_read_buffer */ +#ifndef GL_NV_read_buffer +#define GL_NV_read_buffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); +#endif +typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); +#endif + +/* GL_NV_read_buffer_front */ +#ifndef GL_NV_read_buffer_front +#define GL_NV_read_buffer_front 1 +#endif + +/* GL_NV_read_depth */ +#ifndef GL_NV_read_depth +#define GL_NV_read_depth 1 +#endif + +/* GL_NV_read_depth_stencil */ +#ifndef GL_NV_read_depth_stencil +#define GL_NV_read_depth_stencil 1 +#endif + +/* GL_NV_read_stencil */ +#ifndef GL_NV_read_stencil +#define GL_NV_read_stencil 1 +#endif + +/* GL_NV_shadow_samplers_array */ +#ifndef GL_NV_shadow_samplers_array +#define GL_NV_shadow_samplers_array 1 +#endif + +/* GL_NV_shadow_samplers_cube */ +#ifndef GL_NV_shadow_samplers_cube +#define GL_NV_shadow_samplers_cube 1 +#endif + +/* GL_NV_sRGB_formats */ +#ifndef GL_NV_sRGB_formats +#define GL_NV_sRGB_formats 1 +#endif + +/* GL_NV_texture_border_clamp */ +#ifndef GL_NV_texture_border_clamp +#define GL_NV_texture_border_clamp 1 +#endif + +/* GL_NV_texture_compression_s3tc_update */ +#ifndef GL_NV_texture_compression_s3tc_update +#define GL_NV_texture_compression_s3tc_update 1 +#endif + +/* GL_NV_texture_npot_2D_mipmap */ +#ifndef GL_NV_texture_npot_2D_mipmap +#define GL_NV_texture_npot_2D_mipmap 1 +#endif + +/*------------------------------------------------------------------------* + * QCOM extension functions + *------------------------------------------------------------------------*/ + +/* GL_QCOM_alpha_test */ +#ifndef GL_QCOM_alpha_test +#define GL_QCOM_alpha_test 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); +#endif +typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); +#endif + +/* GL_QCOM_binning_control */ +#ifndef GL_QCOM_binning_control +#define GL_QCOM_binning_control 1 +#endif + +/* GL_QCOM_driver_control */ +#ifndef GL_QCOM_driver_control +#define GL_QCOM_driver_control 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); +GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); +GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); +GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); +#endif +typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); +typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); +typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +#endif + +/* GL_QCOM_extended_get */ +#ifndef GL_QCOM_extended_get +#define GL_QCOM_extended_get 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); +GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); +GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); +GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); +GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); +GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params); +#endif +typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); +typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); +typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params); +#endif + +/* GL_QCOM_extended_get2 */ +#ifndef GL_QCOM_extended_get2 +#define GL_QCOM_extended_get2 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); +GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); +GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); +GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); +#endif +typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); +typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); +typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); +typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); +#endif + +/* GL_QCOM_perfmon_global_mode */ +#ifndef GL_QCOM_perfmon_global_mode +#define GL_QCOM_perfmon_global_mode 1 +#endif + +/* GL_QCOM_writeonly_rendering */ +#ifndef GL_QCOM_writeonly_rendering +#define GL_QCOM_writeonly_rendering 1 +#endif + +/* GL_QCOM_tiled_rendering */ +#ifndef GL_QCOM_tiled_rendering +#define GL_QCOM_tiled_rendering 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); +#endif +typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); +#endif + +/*------------------------------------------------------------------------* + * VIV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_VIV_shader_binary */ +#ifndef GL_VIV_shader_binary +#define GL_VIV_shader_binary 1 +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __gl2ext_h_ */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2_gl2platform.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2_gl2platform.h new file mode 100644 index 00000000000..c325686f014 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2_gl2platform.h @@ -0,0 +1,30 @@ +#ifndef __gl2platform_h_ +#define __gl2platform_h_ + +/* $Revision: 10602 $ on $Date:: 2010-03-04 22:35:34 -0800 #$ */ + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h + * + * Adopters may modify khrplatform.h and this file to suit their platform. + * You are encouraged to submit all modifications to the Khronos group so that + * they can be included in future versions of this file. Please submit changes + * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) + * by filing a bug against product "OpenGL-ES" component "Registry". + */ + +/*#include */ + +#ifndef GL_APICALL +#define GL_APICALL KHRONOS_APICALL +#endif + +#ifndef GL_APIENTRY +#define GL_APIENTRY KHRONOS_APIENTRY +#endif + +#endif /* __gl2platform_h_ */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2_khrplatform.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2_khrplatform.h new file mode 100644 index 00000000000..c9e6f17d343 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_opengles2_khrplatform.h @@ -0,0 +1,282 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2009 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $ + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by sending them to the public Khronos Bugzilla + * (http://khronos.org/bugzilla) by filing a bug against product + * "Khronos (general)" component "Registry". + * + * A predefined template which fills in some of the bug fields can be + * reached using http://tinyurl.com/khrplatform-h-bugreport, but you + * must create a Bugzilla login first. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(_WIN32) && !defined(__SCITECH_SNAP__) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef _WIN64 +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_pixels.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_pixels.h new file mode 100644 index 00000000000..823124ef597 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_pixels.h @@ -0,0 +1,644 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_pixels.h + * + * Header for the enumerated pixel format definitions. + */ + +#ifndef SDL_pixels_h_ +#define SDL_pixels_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name Transparency definitions + * + * These define alpha as the opacity of a surface. + */ +/* @{ */ +#define SDL_ALPHA_OPAQUE 255 +#define SDL_ALPHA_TRANSPARENT 0 +/* @} */ + +/** Pixel type. */ +typedef enum +{ + SDL_PIXELTYPE_UNKNOWN, + SDL_PIXELTYPE_INDEX1, + SDL_PIXELTYPE_INDEX4, + SDL_PIXELTYPE_INDEX8, + SDL_PIXELTYPE_PACKED8, + SDL_PIXELTYPE_PACKED16, + SDL_PIXELTYPE_PACKED32, + SDL_PIXELTYPE_ARRAYU8, + SDL_PIXELTYPE_ARRAYU16, + SDL_PIXELTYPE_ARRAYU32, + SDL_PIXELTYPE_ARRAYF16, + SDL_PIXELTYPE_ARRAYF32 +} SDL_PixelType; + +/** Bitmap pixel order, high bit -> low bit. */ +typedef enum +{ + SDL_BITMAPORDER_NONE, + SDL_BITMAPORDER_4321, + SDL_BITMAPORDER_1234 +} SDL_BitmapOrder; + +/** Packed component order, high bit -> low bit. */ +typedef enum +{ + SDL_PACKEDORDER_NONE, + SDL_PACKEDORDER_XRGB, + SDL_PACKEDORDER_RGBX, + SDL_PACKEDORDER_ARGB, + SDL_PACKEDORDER_RGBA, + SDL_PACKEDORDER_XBGR, + SDL_PACKEDORDER_BGRX, + SDL_PACKEDORDER_ABGR, + SDL_PACKEDORDER_BGRA +} SDL_PackedOrder; + +/** Array component order, low byte -> high byte. */ +/* !!! FIXME: in 2.1, make these not overlap differently with + !!! FIXME: SDL_PACKEDORDER_*, so we can simplify SDL_ISPIXELFORMAT_ALPHA */ +typedef enum +{ + SDL_ARRAYORDER_NONE, + SDL_ARRAYORDER_RGB, + SDL_ARRAYORDER_RGBA, + SDL_ARRAYORDER_ARGB, + SDL_ARRAYORDER_BGR, + SDL_ARRAYORDER_BGRA, + SDL_ARRAYORDER_ABGR +} SDL_ArrayOrder; + +/** Packed component layout. */ +typedef enum +{ + SDL_PACKEDLAYOUT_NONE, + SDL_PACKEDLAYOUT_332, + SDL_PACKEDLAYOUT_4444, + SDL_PACKEDLAYOUT_1555, + SDL_PACKEDLAYOUT_5551, + SDL_PACKEDLAYOUT_565, + SDL_PACKEDLAYOUT_8888, + SDL_PACKEDLAYOUT_2101010, + SDL_PACKEDLAYOUT_1010102 +} SDL_PackedLayout; + +#define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D) + +#define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \ + ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ + ((bits) << 8) | ((bytes) << 0)) + +#define SDL_PIXELFLAG(X) (((X) >> 28) & 0x0F) +#define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F) +#define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F) +#define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F) +#define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF) +#define SDL_BYTESPERPIXEL(X) \ + (SDL_ISPIXELFORMAT_FOURCC(X) ? \ + ((((X) == SDL_PIXELFORMAT_YUY2) || \ + ((X) == SDL_PIXELFORMAT_UYVY) || \ + ((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF)) + +#define SDL_ISPIXELFORMAT_INDEXED(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))) + +#define SDL_ISPIXELFORMAT_PACKED(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32))) + +#define SDL_ISPIXELFORMAT_ARRAY(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))) + +#define SDL_ISPIXELFORMAT_ALPHA(format) \ + ((SDL_ISPIXELFORMAT_PACKED(format) && \ + ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) || \ + (SDL_ISPIXELFORMAT_ARRAY(format) && \ + ((SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA)))) + +/* The flag is set to 1 because 0x1? is not in the printable ASCII range */ +#define SDL_ISPIXELFORMAT_FOURCC(format) \ + ((format) && (SDL_PIXELFLAG(format) != 1)) + +/* Note: If you modify this list, update SDL_GetPixelFormatName() */ +typedef enum +{ + SDL_PIXELFORMAT_UNKNOWN, + SDL_PIXELFORMAT_INDEX1LSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, + 1, 0), + SDL_PIXELFORMAT_INDEX1MSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, + 1, 0), + SDL_PIXELFORMAT_INDEX4LSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, + 4, 0), + SDL_PIXELFORMAT_INDEX4MSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, + 4, 0), + SDL_PIXELFORMAT_INDEX8 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1), + SDL_PIXELFORMAT_RGB332 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_332, 8, 1), + SDL_PIXELFORMAT_XRGB4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_4444, 12, 2), + SDL_PIXELFORMAT_RGB444 = SDL_PIXELFORMAT_XRGB4444, + SDL_PIXELFORMAT_XBGR4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_4444, 12, 2), + SDL_PIXELFORMAT_BGR444 = SDL_PIXELFORMAT_XBGR4444, + SDL_PIXELFORMAT_XRGB1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_1555, 15, 2), + SDL_PIXELFORMAT_RGB555 = SDL_PIXELFORMAT_XRGB1555, + SDL_PIXELFORMAT_XBGR1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_1555, 15, 2), + SDL_PIXELFORMAT_BGR555 = SDL_PIXELFORMAT_XBGR1555, + SDL_PIXELFORMAT_ARGB4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_RGBA4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_ABGR4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_BGRA4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_ARGB1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_1555, 16, 2), + SDL_PIXELFORMAT_RGBA5551 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_5551, 16, 2), + SDL_PIXELFORMAT_ABGR1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_1555, 16, 2), + SDL_PIXELFORMAT_BGRA5551 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_5551, 16, 2), + SDL_PIXELFORMAT_RGB565 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_565, 16, 2), + SDL_PIXELFORMAT_BGR565 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_565, 16, 2), + SDL_PIXELFORMAT_RGB24 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, + 24, 3), + SDL_PIXELFORMAT_BGR24 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0, + 24, 3), + SDL_PIXELFORMAT_XRGB8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_RGB888 = SDL_PIXELFORMAT_XRGB8888, + SDL_PIXELFORMAT_RGBX8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_XBGR8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_BGR888 = SDL_PIXELFORMAT_XBGR8888, + SDL_PIXELFORMAT_BGRX8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_ARGB8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_RGBA8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_ABGR8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_BGRA8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_ARGB2101010 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_2101010, 32, 4), + + /* Aliases for RGBA byte arrays of color data, for the current platform */ +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_RGBA8888, + SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_ABGR8888, +#else + SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_ABGR8888, + SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_RGBA8888, +#endif + + SDL_PIXELFORMAT_YV12 = /**< Planar mode: Y + V + U (3 planes) */ + SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), + SDL_PIXELFORMAT_IYUV = /**< Planar mode: Y + U + V (3 planes) */ + SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'), + SDL_PIXELFORMAT_YUY2 = /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */ + SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'), + SDL_PIXELFORMAT_UYVY = /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */ + SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), + SDL_PIXELFORMAT_YVYU = /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */ + SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'), + SDL_PIXELFORMAT_NV12 = /**< Planar mode: Y + U/V interleaved (2 planes) */ + SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'), + SDL_PIXELFORMAT_NV21 = /**< Planar mode: Y + V/U interleaved (2 planes) */ + SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1'), + SDL_PIXELFORMAT_EXTERNAL_OES = /**< Android video texture format */ + SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' ') +} SDL_PixelFormatEnum; + +/** + * The bits of this structure can be directly reinterpreted as an integer-packed + * color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 + * on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems). + */ +typedef struct SDL_Color +{ + Uint8 r; + Uint8 g; + Uint8 b; + Uint8 a; +} SDL_Color; +#define SDL_Colour SDL_Color + +typedef struct SDL_Palette +{ + int ncolors; + SDL_Color *colors; + Uint32 version; + int refcount; +} SDL_Palette; + +/** + * \note Everything in the pixel format structure is read-only. + */ +typedef struct SDL_PixelFormat +{ + Uint32 format; + SDL_Palette *palette; + Uint8 BitsPerPixel; + Uint8 BytesPerPixel; + Uint8 padding[2]; + Uint32 Rmask; + Uint32 Gmask; + Uint32 Bmask; + Uint32 Amask; + Uint8 Rloss; + Uint8 Gloss; + Uint8 Bloss; + Uint8 Aloss; + Uint8 Rshift; + Uint8 Gshift; + Uint8 Bshift; + Uint8 Ashift; + int refcount; + struct SDL_PixelFormat *next; +} SDL_PixelFormat; + +/** + * Get the human readable name of a pixel format. + * + * \param format the pixel format to query + * \returns the human readable name of the specified pixel format or + * `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format); + +/** + * Convert one of the enumerated pixel formats to a bpp value and RGBA masks. + * + * \param format one of the SDL_PixelFormatEnum values + * \param bpp a bits per pixel value; usually 15, 16, or 32 + * \param Rmask a pointer filled in with the red mask for the format + * \param Gmask a pointer filled in with the green mask for the format + * \param Bmask a pointer filled in with the blue mask for the format + * \param Amask a pointer filled in with the alpha mask for the format + * \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't + * possible; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MasksToPixelFormatEnum + */ +extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format, + int *bpp, + Uint32 * Rmask, + Uint32 * Gmask, + Uint32 * Bmask, + Uint32 * Amask); + +/** + * Convert a bpp value and RGBA masks to an enumerated pixel format. + * + * This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't + * possible. + * + * \param bpp a bits per pixel value; usually 15, 16, or 32 + * \param Rmask the red mask for the format + * \param Gmask the green mask for the format + * \param Bmask the blue mask for the format + * \param Amask the alpha mask for the format + * \returns one of the SDL_PixelFormatEnum values + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PixelFormatEnumToMasks + */ +extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp, + Uint32 Rmask, + Uint32 Gmask, + Uint32 Bmask, + Uint32 Amask); + +/** + * Create an SDL_PixelFormat structure corresponding to a pixel format. + * + * Returned structure may come from a shared global cache (i.e. not newly + * allocated), and hence should not be modified, especially the palette. Weird + * errors such as `Blit combination not supported` may occur. + * + * \param pixel_format one of the SDL_PixelFormatEnum values + * \returns the new SDL_PixelFormat structure or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeFormat + */ +extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format); + +/** + * Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). + * + * \param format the SDL_PixelFormat structure to free + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocFormat + */ +extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format); + +/** + * Create a palette structure with the specified number of color entries. + * + * The palette entries are initialized to white. + * + * \param ncolors represents the number of color entries in the color palette + * \returns a new SDL_Palette structure on success or NULL on failure (e.g. if + * there wasn't enough memory); call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreePalette + */ +extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors); + +/** + * Set the palette for a pixel format structure. + * + * \param format the SDL_PixelFormat structure that will use the palette + * \param palette the SDL_Palette structure that will be used + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocPalette + * \sa SDL_FreePalette + */ +extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format, + SDL_Palette *palette); + +/** + * Set a range of colors in a palette. + * + * \param palette the SDL_Palette structure to modify + * \param colors an array of SDL_Color structures to copy into the palette + * \param firstcolor the index of the first palette entry to modify + * \param ncolors the number of entries to modify + * \returns 0 on success or a negative error code if not all of the colors + * could be set; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocPalette + * \sa SDL_CreateRGBSurface + */ +extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette, + const SDL_Color * colors, + int firstcolor, int ncolors); + +/** + * Free a palette created with SDL_AllocPalette(). + * + * \param palette the SDL_Palette structure to be freed + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocPalette + */ +extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette); + +/** + * Map an RGB triple to an opaque pixel value for a given pixel format. + * + * This function maps the RGB color value to the specified pixel format and + * returns the pixel value best approximating the given RGB color value for + * the given pixel format. + * + * If the format has a palette (8-bit) the index of the closest matching color + * in the palette will be returned. + * + * If the specified pixel format has an alpha component it will be returned as + * all 1 bits (fully opaque). + * + * If the pixel format bpp (color depth) is less than 32-bpp then the unused + * upper bits of the return value can safely be ignored (e.g., with a 16-bpp + * format the return value can be assigned to a Uint16, and similarly a Uint8 + * for an 8-bpp format). + * + * \param format an SDL_PixelFormat structure describing the pixel format + * \param r the red component of the pixel in the range 0-255 + * \param g the green component of the pixel in the range 0-255 + * \param b the blue component of the pixel in the range 0-255 + * \returns a pixel value + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGB + * \sa SDL_GetRGBA + * \sa SDL_MapRGBA + */ +extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format, + Uint8 r, Uint8 g, Uint8 b); + +/** + * Map an RGBA quadruple to a pixel value for a given pixel format. + * + * This function maps the RGBA color value to the specified pixel format and + * returns the pixel value best approximating the given RGBA color value for + * the given pixel format. + * + * If the specified pixel format has no alpha component the alpha value will + * be ignored (as it will be in formats with a palette). + * + * If the format has a palette (8-bit) the index of the closest matching color + * in the palette will be returned. + * + * If the pixel format bpp (color depth) is less than 32-bpp then the unused + * upper bits of the return value can safely be ignored (e.g., with a 16-bpp + * format the return value can be assigned to a Uint16, and similarly a Uint8 + * for an 8-bpp format). + * + * \param format an SDL_PixelFormat structure describing the format of the + * pixel + * \param r the red component of the pixel in the range 0-255 + * \param g the green component of the pixel in the range 0-255 + * \param b the blue component of the pixel in the range 0-255 + * \param a the alpha component of the pixel in the range 0-255 + * \returns a pixel value + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGB + * \sa SDL_GetRGBA + * \sa SDL_MapRGB + */ +extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format, + Uint8 r, Uint8 g, Uint8 b, + Uint8 a); + +/** + * Get RGB values from a pixel in the specified format. + * + * This function uses the entire 8-bit [0..255] range when converting color + * components from pixel formats with less than 8-bits per RGB component + * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + * + * \param pixel a pixel value + * \param format an SDL_PixelFormat structure describing the format of the + * pixel + * \param r a pointer filled in with the red component + * \param g a pointer filled in with the green component + * \param b a pointer filled in with the blue component + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGBA + * \sa SDL_MapRGB + * \sa SDL_MapRGBA + */ +extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, + const SDL_PixelFormat * format, + Uint8 * r, Uint8 * g, Uint8 * b); + +/** + * Get RGBA values from a pixel in the specified format. + * + * This function uses the entire 8-bit [0..255] range when converting color + * components from pixel formats with less than 8-bits per RGB component + * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + * + * If the surface has no alpha component, the alpha will be returned as 0xff + * (100% opaque). + * + * \param pixel a pixel value + * \param format an SDL_PixelFormat structure describing the format of the + * pixel + * \param r a pointer filled in with the red component + * \param g a pointer filled in with the green component + * \param b a pointer filled in with the blue component + * \param a a pointer filled in with the alpha component + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGB + * \sa SDL_MapRGB + * \sa SDL_MapRGBA + */ +extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, + const SDL_PixelFormat * format, + Uint8 * r, Uint8 * g, Uint8 * b, + Uint8 * a); + +/** + * Calculate a 256 entry gamma ramp for a gamma value. + * + * \param gamma a gamma value where 0.0 is black and 1.0 is identity + * \param ramp an array of 256 values filled in with the gamma ramp + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowGammaRamp + */ +extern DECLSPEC void SDLCALL SDL_CalculateGammaRamp(float gamma, Uint16 * ramp); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_pixels_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_platform.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_platform.h new file mode 100644 index 00000000000..ff49f2408ab --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_platform.h @@ -0,0 +1,235 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_platform.h + * + * Try to get a standard set of platform defines. + */ + +#ifndef SDL_platform_h_ +#define SDL_platform_h_ + +#if defined(_AIX) +#undef __AIX__ +#define __AIX__ 1 +#endif +#if defined(__HAIKU__) +#undef __HAIKU__ +#define __HAIKU__ 1 +#endif +#if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) +#undef __BSDI__ +#define __BSDI__ 1 +#endif +#if defined(_arch_dreamcast) +#undef __DREAMCAST__ +#define __DREAMCAST__ 1 +#endif +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) +#undef __FREEBSD__ +#define __FREEBSD__ 1 +#endif +#if defined(hpux) || defined(__hpux) || defined(__hpux__) +#undef __HPUX__ +#define __HPUX__ 1 +#endif +#if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) +#undef __IRIX__ +#define __IRIX__ 1 +#endif +#if (defined(linux) || defined(__linux) || defined(__linux__)) +#undef __LINUX__ +#define __LINUX__ 1 +#endif +#if defined(ANDROID) || defined(__ANDROID__) +#undef __ANDROID__ +#undef __LINUX__ /* do we need to do this? */ +#define __ANDROID__ 1 +#endif + +#if defined(__APPLE__) +/* lets us know what version of Mac OS X we're compiling on */ +#include +#include + +/* Fix building with older SDKs that don't define these + See this for more information: + https://stackoverflow.com/questions/12132933/preprocessor-macro-for-os-x-targets +*/ +#ifndef TARGET_OS_MACCATALYST +#define TARGET_OS_MACCATALYST 0 +#endif +#ifndef TARGET_OS_IOS +#define TARGET_OS_IOS 0 +#endif +#ifndef TARGET_OS_IPHONE +#define TARGET_OS_IPHONE 0 +#endif +#ifndef TARGET_OS_TV +#define TARGET_OS_TV 0 +#endif +#ifndef TARGET_OS_SIMULATOR +#define TARGET_OS_SIMULATOR 0 +#endif + +#if TARGET_OS_TV +#undef __TVOS__ +#define __TVOS__ 1 +#endif +#if TARGET_OS_IPHONE +/* if compiling for iOS */ +#undef __IPHONEOS__ +#define __IPHONEOS__ 1 +#undef __MACOSX__ +#else +/* if not compiling for iOS */ +#undef __MACOSX__ +#define __MACOSX__ 1 +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +# error SDL for Mac OS X only supports deploying on 10.6 and above. +#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1060 */ +#endif /* TARGET_OS_IPHONE */ +#endif /* defined(__APPLE__) */ + +#if defined(__NetBSD__) +#undef __NETBSD__ +#define __NETBSD__ 1 +#endif +#if defined(__OpenBSD__) +#undef __OPENBSD__ +#define __OPENBSD__ 1 +#endif +#if defined(__OS2__) || defined(__EMX__) +#undef __OS2__ +#define __OS2__ 1 +#endif +#if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) +#undef __OSF__ +#define __OSF__ 1 +#endif +#if defined(__QNXNTO__) +#undef __QNXNTO__ +#define __QNXNTO__ 1 +#endif +#if defined(riscos) || defined(__riscos) || defined(__riscos__) +#undef __RISCOS__ +#define __RISCOS__ 1 +#endif +#if defined(__sun) && defined(__SVR4) +#undef __SOLARIS__ +#define __SOLARIS__ 1 +#endif + +#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) +/* Try to find out if we're compiling for WinRT or non-WinRT */ +#if defined(_MSC_VER) && defined(__has_include) +#if __has_include() +#define HAVE_WINAPIFAMILY_H 1 +#else +#define HAVE_WINAPIFAMILY_H 0 +#endif + +/* If _USING_V110_SDK71_ is defined it means we are using the Windows XP toolset. */ +#elif defined(_MSC_VER) && (_MSC_VER >= 1700 && !_USING_V110_SDK71_) /* _MSC_VER == 1700 for Visual Studio 2012 */ +#define HAVE_WINAPIFAMILY_H 1 +#else +#define HAVE_WINAPIFAMILY_H 0 +#endif + +#if HAVE_WINAPIFAMILY_H +#include +#define WINAPI_FAMILY_WINRT (!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)) +#else +#define WINAPI_FAMILY_WINRT 0 +#endif /* HAVE_WINAPIFAMILY_H */ + +#if WINAPI_FAMILY_WINRT +#undef __WINRT__ +#define __WINRT__ 1 +#else +#undef __WINDOWS__ +#define __WINDOWS__ 1 +#endif +#endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */ + +#if defined(__WINDOWS__) +#undef __WIN32__ +#define __WIN32__ 1 +#endif +#if defined(__PSP__) +#undef __PSP__ +#define __PSP__ 1 +#endif + +/* The NACL compiler defines __native_client__ and __pnacl__ + * Ref: http://www.chromium.org/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi + */ +#if defined(__native_client__) +#undef __LINUX__ +#undef __NACL__ +#define __NACL__ 1 +#endif +#if defined(__pnacl__) +#undef __LINUX__ +#undef __PNACL__ +#define __PNACL__ 1 +/* PNACL with newlib supports static linking only */ +#define __SDL_NOGETPROCADDR__ +#endif + +#if defined(__vita__) +#define __VITA__ 1 +#endif + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the name of the platform. + * + * Here are the names returned for some (but not all) supported platforms: + * + * - "Windows" + * - "Mac OS X" + * - "Linux" + * - "iOS" + * - "Android" + * + * \returns the name of the platform. If the correct platform name is not + * available, returns a string beginning with the text "Unknown". + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC const char * SDLCALL SDL_GetPlatform (void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_platform_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_power.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_power.h new file mode 100644 index 00000000000..4e70e1edecf --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_power.h @@ -0,0 +1,88 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_power_h_ +#define SDL_power_h_ + +/** + * \file SDL_power.h + * + * Header for the SDL power management routines. + */ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The basic state for the system's power supply. + */ +typedef enum +{ + SDL_POWERSTATE_UNKNOWN, /**< cannot determine power status */ + SDL_POWERSTATE_ON_BATTERY, /**< Not plugged in, running on the battery */ + SDL_POWERSTATE_NO_BATTERY, /**< Plugged in, no battery available */ + SDL_POWERSTATE_CHARGING, /**< Plugged in, charging battery */ + SDL_POWERSTATE_CHARGED /**< Plugged in, battery charged */ +} SDL_PowerState; + + +/** + * Get the current power supply details. + * + * You should never take a battery status as absolute truth. Batteries + * (especially failing batteries) are delicate hardware, and the values + * reported here are best estimates based on what that hardware reports. It's + * not uncommon for older batteries to lose stored power much faster than it + * reports, or completely drain when reporting it has 20 percent left, etc. + * + * Battery status can change at any time; if you are concerned with power + * state, you should call this function frequently, and perhaps ignore changes + * until they seem to be stable for a few seconds. + * + * It's possible a platform can only report battery percentage or time left + * but not both. + * + * \param secs seconds of battery life left, you can pass a NULL here if you + * don't care, will return -1 if we can't determine a value, or + * we're not running on a battery + * \param pct percentage of battery life left, between 0 and 100, you can pass + * a NULL here if you don't care, will return -1 if we can't + * determine a value, or we're not running on a battery + * \returns an SDL_PowerState enum representing the current battery state. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_PowerState SDLCALL SDL_GetPowerInfo(int *secs, int *pct); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_power_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_quit.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_quit.h new file mode 100644 index 00000000000..efcc56d72fb --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_quit.h @@ -0,0 +1,58 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_quit.h + * + * Include file for SDL quit event handling. + */ + +#ifndef SDL_quit_h_ +#define SDL_quit_h_ + +#include +#include + +/** + * \file SDL_quit.h + * + * An ::SDL_QUIT event is generated when the user tries to close the application + * window. If it is ignored or filtered out, the window will remain open. + * If it is not ignored or filtered, it is queued normally and the window + * is allowed to close. When the window is closed, screen updates will + * complete, but have no effect. + * + * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) + * and SIGTERM (system termination request), if handlers do not already + * exist, that generate ::SDL_QUIT events as well. There is no way + * to determine the cause of an ::SDL_QUIT event, but setting a signal + * handler in your application will override the default generation of + * quit events for that signal. + * + * \sa SDL_Quit() + */ + +/* There are no functions directly affecting the quit event */ + +#define SDL_QuitRequested() \ + (SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT) > 0)) + +#endif /* SDL_quit_h_ */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_rect.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_rect.h new file mode 100644 index 00000000000..e2dc81bfdba --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_rect.h @@ -0,0 +1,376 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_rect.h + * + * Header file for SDL_rect definition and management functions. + */ + +#ifndef SDL_rect_h_ +#define SDL_rect_h_ + +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The structure that defines a point (integer) + * + * \sa SDL_EnclosePoints + * \sa SDL_PointInRect + */ +typedef struct SDL_Point +{ + int x; + int y; +} SDL_Point; + +/** + * The structure that defines a point (floating point) + * + * \sa SDL_EncloseFPoints + * \sa SDL_PointInFRect + */ +typedef struct SDL_FPoint +{ + float x; + float y; +} SDL_FPoint; + + +/** + * A rectangle, with the origin at the upper left (integer). + * + * \sa SDL_RectEmpty + * \sa SDL_RectEquals + * \sa SDL_HasIntersection + * \sa SDL_IntersectRect + * \sa SDL_IntersectRectAndLine + * \sa SDL_UnionRect + * \sa SDL_EnclosePoints + */ +typedef struct SDL_Rect +{ + int x, y; + int w, h; +} SDL_Rect; + + +/** + * A rectangle, with the origin at the upper left (floating point). + * + * \sa SDL_FRectEmpty + * \sa SDL_FRectEquals + * \sa SDL_FRectEqualsEpsilon + * \sa SDL_HasIntersectionF + * \sa SDL_IntersectFRect + * \sa SDL_IntersectFRectAndLine + * \sa SDL_UnionFRect + * \sa SDL_EncloseFPoints + * \sa SDL_PointInFRect + */ +typedef struct SDL_FRect +{ + float x; + float y; + float w; + float h; +} SDL_FRect; + + +/** + * Returns true if point resides inside a rectangle. + */ +SDL_FORCE_INLINE SDL_bool SDL_PointInRect(const SDL_Point *p, const SDL_Rect *r) +{ + return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && + (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the rectangle has no area. + */ +SDL_FORCE_INLINE SDL_bool SDL_RectEmpty(const SDL_Rect *r) +{ + return ((!r) || (r->w <= 0) || (r->h <= 0)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the two rectangles are equal. + */ +SDL_FORCE_INLINE SDL_bool SDL_RectEquals(const SDL_Rect *a, const SDL_Rect *b) +{ + return (a && b && (a->x == b->x) && (a->y == b->y) && + (a->w == b->w) && (a->h == b->h)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Determine whether two rectangles intersect. + * + * If either pointer is NULL the function will return SDL_FALSE. + * + * \param A an SDL_Rect structure representing the first rectangle + * \param B an SDL_Rect structure representing the second rectangle + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_IntersectRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersection(const SDL_Rect * A, + const SDL_Rect * B); + +/** + * Calculate the intersection of two rectangles. + * + * If `result` is NULL then this function will return SDL_FALSE. + * + * \param A an SDL_Rect structure representing the first rectangle + * \param B an SDL_Rect structure representing the second rectangle + * \param result an SDL_Rect structure filled in with the intersection of + * rectangles `A` and `B` + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasIntersection + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRect(const SDL_Rect * A, + const SDL_Rect * B, + SDL_Rect * result); + +/** + * Calculate the union of two rectangles. + * + * \param A an SDL_Rect structure representing the first rectangle + * \param B an SDL_Rect structure representing the second rectangle + * \param result an SDL_Rect structure filled in with the union of rectangles + * `A` and `B` + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_UnionRect(const SDL_Rect * A, + const SDL_Rect * B, + SDL_Rect * result); + +/** + * Calculate a minimal rectangle enclosing a set of points. + * + * If `clip` is not NULL then only points inside of the clipping rectangle are + * considered. + * + * \param points an array of SDL_Point structures representing points to be + * enclosed + * \param count the number of structures in the `points` array + * \param clip an SDL_Rect used for clipping or NULL to enclose all points + * \param result an SDL_Rect structure filled in with the minimal enclosing + * rectangle + * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + * points were outside of the clipping rectangle. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_EnclosePoints(const SDL_Point * points, + int count, + const SDL_Rect * clip, + SDL_Rect * result); + +/** + * Calculate the intersection of a rectangle and line segment. + * + * This function is used to clip a line segment to a rectangle. A line segment + * contained entirely within the rectangle or that does not intersect will + * remain unchanged. A line segment that crosses the rectangle at either or + * both ends will be clipped to the boundary of the rectangle and the new + * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + * + * \param rect an SDL_Rect structure representing the rectangle to intersect + * \param X1 a pointer to the starting X-coordinate of the line + * \param Y1 a pointer to the starting Y-coordinate of the line + * \param X2 a pointer to the ending X-coordinate of the line + * \param Y2 a pointer to the ending Y-coordinate of the line + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRectAndLine(const SDL_Rect * + rect, int *X1, + int *Y1, int *X2, + int *Y2); + + +/* SDL_FRect versions... */ + +/** + * Returns true if point resides inside a rectangle. + */ +SDL_FORCE_INLINE SDL_bool SDL_PointInFRect(const SDL_FPoint *p, const SDL_FRect *r) +{ + return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && + (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the rectangle has no area. + */ +SDL_FORCE_INLINE SDL_bool SDL_FRectEmpty(const SDL_FRect *r) +{ + return ((!r) || (r->w <= 0.0f) || (r->h <= 0.0f)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the two rectangles are equal, within some given epsilon. + * + * \since This function is available since SDL 2.0.22. + */ +SDL_FORCE_INLINE SDL_bool SDL_FRectEqualsEpsilon(const SDL_FRect *a, const SDL_FRect *b, const float epsilon) +{ + return (a && b && ((a == b) || + ((SDL_fabs(a->x - b->x) <= epsilon) && + (SDL_fabs(a->y - b->y) <= epsilon) && + (SDL_fabs(a->w - b->w) <= epsilon) && + (SDL_fabs(a->h - b->h) <= epsilon)))) + ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the two rectangles are equal, using a default epsilon. + * + * \since This function is available since SDL 2.0.22. + */ +SDL_FORCE_INLINE SDL_bool SDL_FRectEquals(const SDL_FRect *a, const SDL_FRect *b) +{ + return SDL_FRectEqualsEpsilon(a, b, SDL_FLT_EPSILON); +} + +/** + * Determine whether two rectangles intersect with float precision. + * + * If either pointer is NULL the function will return SDL_FALSE. + * + * \param A an SDL_FRect structure representing the first rectangle + * \param B an SDL_FRect structure representing the second rectangle + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.22. + * + * \sa SDL_IntersectRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersectionF(const SDL_FRect * A, + const SDL_FRect * B); + +/** + * Calculate the intersection of two rectangles with float precision. + * + * If `result` is NULL then this function will return SDL_FALSE. + * + * \param A an SDL_FRect structure representing the first rectangle + * \param B an SDL_FRect structure representing the second rectangle + * \param result an SDL_FRect structure filled in with the intersection of + * rectangles `A` and `B` + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.22. + * + * \sa SDL_HasIntersectionF + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRect(const SDL_FRect * A, + const SDL_FRect * B, + SDL_FRect * result); + +/** + * Calculate the union of two rectangles with float precision. + * + * \param A an SDL_FRect structure representing the first rectangle + * \param B an SDL_FRect structure representing the second rectangle + * \param result an SDL_FRect structure filled in with the union of rectangles + * `A` and `B` + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC void SDLCALL SDL_UnionFRect(const SDL_FRect * A, + const SDL_FRect * B, + SDL_FRect * result); + +/** + * Calculate a minimal rectangle enclosing a set of points with float + * precision. + * + * If `clip` is not NULL then only points inside of the clipping rectangle are + * considered. + * + * \param points an array of SDL_FPoint structures representing points to be + * enclosed + * \param count the number of structures in the `points` array + * \param clip an SDL_FRect used for clipping or NULL to enclose all points + * \param result an SDL_FRect structure filled in with the minimal enclosing + * rectangle + * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + * points were outside of the clipping rectangle. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_EncloseFPoints(const SDL_FPoint * points, + int count, + const SDL_FRect * clip, + SDL_FRect * result); + +/** + * Calculate the intersection of a rectangle and line segment with float + * precision. + * + * This function is used to clip a line segment to a rectangle. A line segment + * contained entirely within the rectangle or that does not intersect will + * remain unchanged. A line segment that crosses the rectangle at either or + * both ends will be clipped to the boundary of the rectangle and the new + * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + * + * \param rect an SDL_FRect structure representing the rectangle to intersect + * \param X1 a pointer to the starting X-coordinate of the line + * \param Y1 a pointer to the starting Y-coordinate of the line + * \param X2 a pointer to the ending X-coordinate of the line + * \param Y2 a pointer to the ending Y-coordinate of the line + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRectAndLine(const SDL_FRect * + rect, float *X1, + float *Y1, float *X2, + float *Y2); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_rect_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_render.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_render.h new file mode 100644 index 00000000000..330bddc0dc7 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_render.h @@ -0,0 +1,1908 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_render.h + * + * Header file for SDL 2D rendering functions. + * + * This API supports the following features: + * * single pixel points + * * single pixel lines + * * filled rectangles + * * texture images + * + * The primitives may be drawn in opaque, blended, or additive modes. + * + * The texture images may be drawn in opaque, blended, or additive modes. + * They can have an additional color tint or alpha modulation applied to + * them, and may also be stretched with linear interpolation. + * + * This API is designed to accelerate simple 2D operations. You may + * want more functionality such as polygons and particle effects and + * in that case you should use SDL's OpenGL/Direct3D support or one + * of the many good 3D engines. + * + * These functions must be called from the main thread. + * See this bug for details: http://bugzilla.libsdl.org/show_bug.cgi?id=1995 + */ + +#ifndef SDL_render_h_ +#define SDL_render_h_ + +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Flags used when creating a rendering context + */ +typedef enum +{ + SDL_RENDERER_SOFTWARE = 0x00000001, /**< The renderer is a software fallback */ + SDL_RENDERER_ACCELERATED = 0x00000002, /**< The renderer uses hardware + acceleration */ + SDL_RENDERER_PRESENTVSYNC = 0x00000004, /**< Present is synchronized + with the refresh rate */ + SDL_RENDERER_TARGETTEXTURE = 0x00000008 /**< The renderer supports + rendering to texture */ +} SDL_RendererFlags; + +/** + * Information on the capabilities of a render driver or context. + */ +typedef struct SDL_RendererInfo +{ + const char *name; /**< The name of the renderer */ + Uint32 flags; /**< Supported ::SDL_RendererFlags */ + Uint32 num_texture_formats; /**< The number of available texture formats */ + Uint32 texture_formats[16]; /**< The available texture formats */ + int max_texture_width; /**< The maximum texture width */ + int max_texture_height; /**< The maximum texture height */ +} SDL_RendererInfo; + +/** + * Vertex structure + */ +typedef struct SDL_Vertex +{ + SDL_FPoint position; /**< Vertex position, in SDL_Renderer coordinates */ + SDL_Color color; /**< Vertex color */ + SDL_FPoint tex_coord; /**< Normalized texture coordinates, if needed */ +} SDL_Vertex; + +/** + * The scaling mode for a texture. + */ +typedef enum +{ + SDL_ScaleModeNearest, /**< nearest pixel sampling */ + SDL_ScaleModeLinear, /**< linear filtering */ + SDL_ScaleModeBest /**< anisotropic filtering */ +} SDL_ScaleMode; + +/** + * The access pattern allowed for a texture. + */ +typedef enum +{ + SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */ + SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */ + SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */ +} SDL_TextureAccess; + +/** + * The texture channel modulation used in SDL_RenderCopy(). + */ +typedef enum +{ + SDL_TEXTUREMODULATE_NONE = 0x00000000, /**< No modulation */ + SDL_TEXTUREMODULATE_COLOR = 0x00000001, /**< srcC = srcC * color */ + SDL_TEXTUREMODULATE_ALPHA = 0x00000002 /**< srcA = srcA * alpha */ +} SDL_TextureModulate; + +/** + * Flip constants for SDL_RenderCopyEx + */ +typedef enum +{ + SDL_FLIP_NONE = 0x00000000, /**< Do not flip */ + SDL_FLIP_HORIZONTAL = 0x00000001, /**< flip horizontally */ + SDL_FLIP_VERTICAL = 0x00000002 /**< flip vertically */ +} SDL_RendererFlip; + +/** + * A structure representing rendering state + */ +struct SDL_Renderer; +typedef struct SDL_Renderer SDL_Renderer; + +/** + * An efficient driver-specific representation of pixel data + */ +struct SDL_Texture; +typedef struct SDL_Texture SDL_Texture; + +/* Function prototypes */ + +/** + * Get the number of 2D rendering drivers available for the current display. + * + * A render driver is a set of code that handles rendering and texture + * management on a particular display. Normally there is only one, but some + * drivers may have several available with different capabilities. + * + * There may be none if SDL was compiled without render support. + * + * \returns a number >= 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_GetRenderDriverInfo + */ +extern DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void); + +/** + * Get info about a specific 2D rendering driver for the current display. + * + * \param index the index of the driver to query information about + * \param info an SDL_RendererInfo structure to be filled with information on + * the rendering driver + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_GetNumRenderDrivers + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDriverInfo(int index, + SDL_RendererInfo * info); + +/** + * Create a window and default renderer. + * + * \param width the width of the window + * \param height the height of the window + * \param window_flags the flags used to create the window (see + * SDL_CreateWindow()) + * \param window a pointer filled with the window, or NULL on error + * \param renderer a pointer filled with the renderer, or NULL on error + * \returns 0 on success, or -1 on error; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_CreateWindow + */ +extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer( + int width, int height, Uint32 window_flags, + SDL_Window **window, SDL_Renderer **renderer); + + +/** + * Create a 2D rendering context for a window. + * + * \param window the window where rendering is displayed + * \param index the index of the rendering driver to initialize, or -1 to + * initialize the first one supporting the requested flags + * \param flags 0, or one or more SDL_RendererFlags OR'd together + * \returns a valid rendering context or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSoftwareRenderer + * \sa SDL_DestroyRenderer + * \sa SDL_GetNumRenderDrivers + * \sa SDL_GetRendererInfo + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window, + int index, Uint32 flags); + +/** + * Create a 2D software rendering context for a surface. + * + * Two other API which can be used to create SDL_Renderer: + * SDL_CreateRenderer() and SDL_CreateWindowAndRenderer(). These can _also_ + * create a software renderer, but they are intended to be used with an + * SDL_Window as the final destination and not an SDL_Surface. + * + * \param surface the SDL_Surface structure representing the surface where + * rendering is done + * \returns a valid rendering context or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_CreateWindowRenderer + * \sa SDL_DestroyRenderer + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface); + +/** + * Get the renderer associated with a window. + * + * \param window the window to query + * \returns the rendering context on success or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window * window); + +/** + * Get the window associated with a renderer. + * + * \param renderer the renderer to query + * \returns the window on success or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_RenderGetWindow(SDL_Renderer *renderer); + +/** + * Get information about a rendering context. + * + * \param renderer the rendering context + * \param info an SDL_RendererInfo structure filled with information about the + * current renderer + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + */ +extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer * renderer, + SDL_RendererInfo * info); + +/** + * Get the output size in pixels of a rendering context. + * + * Due to high-dpi displays, you might end up with a rendering context that + * has more pixels than the window that contains it, so use this instead of + * SDL_GetWindowSize() to decide how much drawing area you have. + * + * \param renderer the rendering context + * \param w an int filled with the width + * \param h an int filled with the height + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderer + */ +extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, + int *w, int *h); + +/** + * Create a texture for a rendering context. + * + * You can set the texture scaling method by setting + * `SDL_HINT_RENDER_SCALE_QUALITY` before creating the texture. + * + * \param renderer the rendering context + * \param format one of the enumerated values in SDL_PixelFormatEnum + * \param access one of the enumerated values in SDL_TextureAccess + * \param w the width of the texture in pixels + * \param h the height of the texture in pixels + * \returns a pointer to the created texture or NULL if no rendering context + * was active, the format was unsupported, or the width or height + * were out of range; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTextureFromSurface + * \sa SDL_DestroyTexture + * \sa SDL_QueryTexture + * \sa SDL_UpdateTexture + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, + Uint32 format, + int access, int w, + int h); + +/** + * Create a texture from an existing surface. + * + * The surface is not modified or freed by this function. + * + * The SDL_TextureAccess hint for the created texture is + * `SDL_TEXTUREACCESS_STATIC`. + * + * The pixel format of the created texture may be different from the pixel + * format of the surface. Use SDL_QueryTexture() to query the pixel format of + * the texture. + * + * \param renderer the rendering context + * \param surface the SDL_Surface structure containing pixel data used to fill + * the texture + * \returns the created texture or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + * \sa SDL_DestroyTexture + * \sa SDL_QueryTexture + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface); + +/** + * Query the attributes of a texture. + * + * \param texture the texture to query + * \param format a pointer filled in with the raw format of the texture; the + * actual format may differ, but pixel transfers will use this + * format (one of the SDL_PixelFormatEnum values). This argument + * can be NULL if you don't need this information. + * \param access a pointer filled in with the actual access to the texture + * (one of the SDL_TextureAccess values). This argument can be + * NULL if you don't need this information. + * \param w a pointer filled in with the width of the texture in pixels. This + * argument can be NULL if you don't need this information. + * \param h a pointer filled in with the height of the texture in pixels. This + * argument can be NULL if you don't need this information. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + */ +extern DECLSPEC int SDLCALL SDL_QueryTexture(SDL_Texture * texture, + Uint32 * format, int *access, + int *w, int *h); + +/** + * Set an additional color value multiplied into render copy operations. + * + * When this texture is rendered, during the copy operation each source color + * channel is modulated by the appropriate color value according to the + * following formula: + * + * `srcC = srcC * (color / 255)` + * + * Color modulation is not always supported by the renderer; it will return -1 + * if color modulation is not supported. + * + * \param texture the texture to update + * \param r the red color value multiplied into copy operations + * \param g the green color value multiplied into copy operations + * \param b the blue color value multiplied into copy operations + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureColorMod + * \sa SDL_SetTextureAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_SetTextureColorMod(SDL_Texture * texture, + Uint8 r, Uint8 g, Uint8 b); + + +/** + * Get the additional color value multiplied into render copy operations. + * + * \param texture the texture to query + * \param r a pointer filled in with the current red color value + * \param g a pointer filled in with the current green color value + * \param b a pointer filled in with the current blue color value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureAlphaMod + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_GetTextureColorMod(SDL_Texture * texture, + Uint8 * r, Uint8 * g, + Uint8 * b); + +/** + * Set an additional alpha value multiplied into render copy operations. + * + * When this texture is rendered, during the copy operation the source alpha + * value is modulated by this alpha value according to the following formula: + * + * `srcA = srcA * (alpha / 255)` + * + * Alpha modulation is not always supported by the renderer; it will return -1 + * if alpha modulation is not supported. + * + * \param texture the texture to update + * \param alpha the source alpha value multiplied into copy operations + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureAlphaMod + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_SetTextureAlphaMod(SDL_Texture * texture, + Uint8 alpha); + +/** + * Get the additional alpha value multiplied into render copy operations. + * + * \param texture the texture to query + * \param alpha a pointer filled in with the current alpha value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureColorMod + * \sa SDL_SetTextureAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_GetTextureAlphaMod(SDL_Texture * texture, + Uint8 * alpha); + +/** + * Set the blend mode for a texture, used by SDL_RenderCopy(). + * + * If the blend mode is not supported, the closest supported mode is chosen + * and this function returns -1. + * + * \param texture the texture to update + * \param blendMode the SDL_BlendMode to use for texture blending + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureBlendMode + * \sa SDL_RenderCopy + */ +extern DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_Texture * texture, + SDL_BlendMode blendMode); + +/** + * Get the blend mode used for texture copy operations. + * + * \param texture the texture to query + * \param blendMode a pointer filled in with the current SDL_BlendMode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetTextureBlendMode + */ +extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture * texture, + SDL_BlendMode *blendMode); + +/** + * Set the scale mode used for texture scale operations. + * + * If the scale mode is not supported, the closest supported mode is chosen. + * + * \param texture The texture to update. + * \param scaleMode the SDL_ScaleMode to use for texture scaling. + * \returns 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_GetTextureScaleMode + */ +extern DECLSPEC int SDLCALL SDL_SetTextureScaleMode(SDL_Texture * texture, + SDL_ScaleMode scaleMode); + +/** + * Get the scale mode used for texture scale operations. + * + * \param texture the texture to query. + * \param scaleMode a pointer filled in with the current scale mode. + * \return 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_SetTextureScaleMode + */ +extern DECLSPEC int SDLCALL SDL_GetTextureScaleMode(SDL_Texture * texture, + SDL_ScaleMode *scaleMode); + +/** + * Associate a user-specified pointer with a texture. + * + * \param texture the texture to update. + * \param userdata the pointer to associate with the texture. + * \returns 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GetTextureUserData + */ +extern DECLSPEC int SDLCALL SDL_SetTextureUserData(SDL_Texture * texture, + void *userdata); + +/** + * Get the user-specified pointer associated with a texture + * + * \param texture the texture to query. + * \return the pointer associated with the texture, or NULL if the texture is + * not valid. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_SetTextureUserData + */ +extern DECLSPEC void * SDLCALL SDL_GetTextureUserData(SDL_Texture * texture); + +/** + * Update the given texture rectangle with new pixel data. + * + * The pixel data must be in the pixel format of the texture. Use + * SDL_QueryTexture() to query the pixel format of the texture. + * + * This is a fairly slow function, intended for use with static textures that + * do not change often. + * + * If the texture is intended to be updated often, it is preferred to create + * the texture as streaming and use the locking functions referenced below. + * While this function will work with streaming textures, for optimization + * reasons you may not get the pixels back if you lock the texture afterward. + * + * \param texture the texture to update + * \param rect an SDL_Rect structure representing the area to update, or NULL + * to update the entire texture + * \param pixels the raw pixel data in the format of the texture + * \param pitch the number of bytes in a row of pixel data, including padding + * between lines + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + * \sa SDL_LockTexture + * \sa SDL_UnlockTexture + */ +extern DECLSPEC int SDLCALL SDL_UpdateTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const void *pixels, int pitch); + +/** + * Update a rectangle within a planar YV12 or IYUV texture with new pixel + * data. + * + * You can use SDL_UpdateTexture() as long as your pixel data is a contiguous + * block of Y and U/V planes in the proper order, but this function is + * available if your pixel data is not contiguous. + * + * \param texture the texture to update + * \param rect a pointer to the rectangle of pixels to update, or NULL to + * update the entire texture + * \param Yplane the raw pixel data for the Y plane + * \param Ypitch the number of bytes between rows of pixel data for the Y + * plane + * \param Uplane the raw pixel data for the U plane + * \param Upitch the number of bytes between rows of pixel data for the U + * plane + * \param Vplane the raw pixel data for the V plane + * \param Vpitch the number of bytes between rows of pixel data for the V + * plane + * \returns 0 on success or -1 if the texture is not valid; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_UpdateTexture + */ +extern DECLSPEC int SDLCALL SDL_UpdateYUVTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const Uint8 *Yplane, int Ypitch, + const Uint8 *Uplane, int Upitch, + const Uint8 *Vplane, int Vpitch); + +/** + * Update a rectangle within a planar NV12 or NV21 texture with new pixels. + * + * You can use SDL_UpdateTexture() as long as your pixel data is a contiguous + * block of NV12/21 planes in the proper order, but this function is available + * if your pixel data is not contiguous. + * + * \param texture the texture to update + * \param rect a pointer to the rectangle of pixels to update, or NULL to + * update the entire texture. + * \param Yplane the raw pixel data for the Y plane. + * \param Ypitch the number of bytes between rows of pixel data for the Y + * plane. + * \param UVplane the raw pixel data for the UV plane. + * \param UVpitch the number of bytes between rows of pixel data for the UV + * plane. + * \return 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_UpdateNVTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const Uint8 *Yplane, int Ypitch, + const Uint8 *UVplane, int UVpitch); + +/** + * Lock a portion of the texture for **write-only** pixel access. + * + * As an optimization, the pixels made available for editing don't necessarily + * contain the old texture data. This is a write-only operation, and if you + * need to keep a copy of the texture data you should do that at the + * application level. + * + * You must use SDL_UnlockTexture() to unlock the pixels and apply any + * changes. + * + * \param texture the texture to lock for access, which was created with + * `SDL_TEXTUREACCESS_STREAMING` + * \param rect an SDL_Rect structure representing the area to lock for access; + * NULL to lock the entire texture + * \param pixels this is filled in with a pointer to the locked pixels, + * appropriately offset by the locked area + * \param pitch this is filled in with the pitch of the locked pixels; the + * pitch is the length of one row in bytes + * \returns 0 on success or a negative error code if the texture is not valid + * or was not created with `SDL_TEXTUREACCESS_STREAMING`; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_UnlockTexture + */ +extern DECLSPEC int SDLCALL SDL_LockTexture(SDL_Texture * texture, + const SDL_Rect * rect, + void **pixels, int *pitch); + +/** + * Lock a portion of the texture for **write-only** pixel access, and expose + * it as a SDL surface. + * + * Besides providing an SDL_Surface instead of raw pixel data, this function + * operates like SDL_LockTexture. + * + * As an optimization, the pixels made available for editing don't necessarily + * contain the old texture data. This is a write-only operation, and if you + * need to keep a copy of the texture data you should do that at the + * application level. + * + * You must use SDL_UnlockTexture() to unlock the pixels and apply any + * changes. + * + * The returned surface is freed internally after calling SDL_UnlockTexture() + * or SDL_DestroyTexture(). The caller should not free it. + * + * \param texture the texture to lock for access, which was created with + * `SDL_TEXTUREACCESS_STREAMING` + * \param rect a pointer to the rectangle to lock for access. If the rect is + * NULL, the entire texture will be locked + * \param surface this is filled in with an SDL surface representing the + * locked area + * \returns 0 on success, or -1 if the texture is not valid or was not created + * with `SDL_TEXTUREACCESS_STREAMING` + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_LockTexture + * \sa SDL_UnlockTexture + */ +extern DECLSPEC int SDLCALL SDL_LockTextureToSurface(SDL_Texture *texture, + const SDL_Rect *rect, + SDL_Surface **surface); + +/** + * Unlock a texture, uploading the changes to video memory, if needed. + * + * **Warning**: Please note that SDL_LockTexture() is intended to be + * write-only; it will not guarantee the previous contents of the texture will + * be provided. You must fully initialize any area of a texture that you lock + * before unlocking it, as the pixels might otherwise be uninitialized memory. + * + * Which is to say: locking and immediately unlocking a texture can result in + * corrupted textures, depending on the renderer in use. + * + * \param texture a texture locked by SDL_LockTexture() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockTexture + */ +extern DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture * texture); + +/** + * Determine whether a renderer supports the use of render targets. + * + * \param renderer the renderer that will be checked + * \returns SDL_TRUE if supported or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderTarget + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderTargetSupported(SDL_Renderer *renderer); + +/** + * Set a texture as the current rendering target. + * + * Before using this function, you should check the + * `SDL_RENDERER_TARGETTEXTURE` bit in the flags of SDL_RendererInfo to see if + * render targets are supported. + * + * The default render target is the window for which the renderer was created. + * To stop rendering to a texture and render to the window again, call this + * function with a NULL `texture`. + * + * \param renderer the rendering context + * \param texture the targeted texture, which must be created with the + * `SDL_TEXTUREACCESS_TARGET` flag, or NULL to render to the + * window instead of a texture. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderTarget + */ +extern DECLSPEC int SDLCALL SDL_SetRenderTarget(SDL_Renderer *renderer, + SDL_Texture *texture); + +/** + * Get the current render target. + * + * The default render target is the window for which the renderer was created, + * and is reported a NULL here. + * + * \param renderer the rendering context + * \returns the current render target or NULL for the default render target. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderTarget + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *renderer); + +/** + * Set a device independent resolution for rendering. + * + * This function uses the viewport and scaling functionality to allow a fixed + * logical resolution for rendering, regardless of the actual output + * resolution. If the actual output resolution doesn't have the same aspect + * ratio the output rendering will be centered within the output display. + * + * If the output display is a window, mouse and touch events in the window + * will be filtered and scaled so they seem to arrive within the logical + * resolution. The SDL_HINT_MOUSE_RELATIVE_SCALING hint controls whether + * relative motion events are also scaled. + * + * If this function results in scaling or subpixel drawing by the rendering + * backend, it will be handled using the appropriate quality hints. + * + * \param renderer the renderer for which resolution should be set + * \param w the width of the logical resolution + * \param h the height of the logical resolution + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetLogicalSize + */ +extern DECLSPEC int SDLCALL SDL_RenderSetLogicalSize(SDL_Renderer * renderer, int w, int h); + +/** + * Get device independent resolution for rendering. + * + * This may return 0 for `w` and `h` if the SDL_Renderer has never had its + * logical size set by SDL_RenderSetLogicalSize() and never had a render + * target set. + * + * \param renderer a rendering context + * \param w an int to be filled with the width + * \param h an int to be filled with the height + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC void SDLCALL SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h); + +/** + * Set whether to force integer scales for resolution-independent rendering. + * + * This function restricts the logical viewport to integer values - that is, + * when a resolution is between two multiples of a logical size, the viewport + * size is rounded down to the lower multiple. + * + * \param renderer the renderer for which integer scaling should be set + * \param enable enable or disable the integer scaling for rendering + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_RenderGetIntegerScale + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC int SDLCALL SDL_RenderSetIntegerScale(SDL_Renderer * renderer, + SDL_bool enable); + +/** + * Get whether integer scales are forced for resolution-independent rendering. + * + * \param renderer the renderer from which integer scaling should be queried + * \returns SDL_TRUE if integer scales are forced or SDL_FALSE if not and on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_RenderSetIntegerScale + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderGetIntegerScale(SDL_Renderer * renderer); + +/** + * Set the drawing area for rendering on the current target. + * + * When the window is resized, the viewport is reset to fill the entire new + * window size. + * + * \param renderer the rendering context + * \param rect the SDL_Rect structure representing the drawing area, or NULL + * to set the viewport to the entire target + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetViewport + */ +extern DECLSPEC int SDLCALL SDL_RenderSetViewport(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Get the drawing area for the current target. + * + * \param renderer the rendering context + * \param rect an SDL_Rect structure filled in with the current drawing area + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderSetViewport + */ +extern DECLSPEC void SDLCALL SDL_RenderGetViewport(SDL_Renderer * renderer, + SDL_Rect * rect); + +/** + * Set the clip rectangle for rendering on the specified target. + * + * \param renderer the rendering context for which clip rectangle should be + * set + * \param rect an SDL_Rect structure representing the clip area, relative to + * the viewport, or NULL to disable clipping + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetClipRect + * \sa SDL_RenderIsClipEnabled + */ +extern DECLSPEC int SDLCALL SDL_RenderSetClipRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Get the clip rectangle for the current target. + * + * \param renderer the rendering context from which clip rectangle should be + * queried + * \param rect an SDL_Rect structure filled in with the current clipping area + * or an empty rectangle if clipping is disabled + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderIsClipEnabled + * \sa SDL_RenderSetClipRect + */ +extern DECLSPEC void SDLCALL SDL_RenderGetClipRect(SDL_Renderer * renderer, + SDL_Rect * rect); + +/** + * Get whether clipping is enabled on the given renderer. + * + * \param renderer the renderer from which clip state should be queried + * \returns SDL_TRUE if clipping is enabled or SDL_FALSE if not; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_RenderGetClipRect + * \sa SDL_RenderSetClipRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderIsClipEnabled(SDL_Renderer * renderer); + + +/** + * Set the drawing scale for rendering on the current target. + * + * The drawing coordinates are scaled by the x/y scaling factors before they + * are used by the renderer. This allows resolution independent drawing with a + * single coordinate system. + * + * If this results in scaling or subpixel drawing by the rendering backend, it + * will be handled using the appropriate quality hints. For best results use + * integer scaling factors. + * + * \param renderer a rendering context + * \param scaleX the horizontal scaling factor + * \param scaleY the vertical scaling factor + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetScale + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC int SDLCALL SDL_RenderSetScale(SDL_Renderer * renderer, + float scaleX, float scaleY); + +/** + * Get the drawing scale for the current target. + * + * \param renderer the renderer from which drawing scale should be queried + * \param scaleX a pointer filled in with the horizontal scaling factor + * \param scaleY a pointer filled in with the vertical scaling factor + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderSetScale + */ +extern DECLSPEC void SDLCALL SDL_RenderGetScale(SDL_Renderer * renderer, + float *scaleX, float *scaleY); + +/** + * Get logical coordinates of point in renderer when given real coordinates of + * point in window. + * + * Logical coordinates will differ from real coordinates when render is scaled + * and logical renderer size set + * + * \param renderer the renderer from which the logical coordinates should be + * calcualted + * \param windowX the real X coordinate in the window + * \param windowY the real Y coordinate in the window + * \param logicalX the pointer filled with the logical x coordinate + * \param logicalY the pointer filled with the logical y coordinate + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGetScale + * \sa SDL_RenderSetScale + * \sa SDL_RenderGetLogicalSize + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC void SDLCALL SDL_RenderWindowToLogical(SDL_Renderer * renderer, + int windowX, int windowY, + float *logicalX, float *logicalY); + + /** + * Get real coordinates of point in window when given logical coordinates of point in renderer. + * Logical coordinates will differ from real coordinates when render is scaled and logical renderer size set + * + * \param renderer the renderer from which the window coordinates should be calculated + * \param logicalX the logical x coordinate + * \param logicalY the logical y coordinate + * \param windowX the pointer filled with the real X coordinate in the window + * \param windowY the pointer filled with the real Y coordinate in the window + + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGetScale + * \sa SDL_RenderSetScale + * \sa SDL_RenderGetLogicalSize + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC void SDLCALL SDL_RenderLogicalToWindow(SDL_Renderer * renderer, + float logicalX, float logicalY, + int *windowX, int *windowY); + +/** + * Set the color used for drawing operations (Rect, Line and Clear). + * + * Set the color for drawing or filling rectangles, lines, and points, and for + * SDL_RenderClear(). + * + * \param renderer the rendering context + * \param r the red value used to draw on the rendering target + * \param g the green value used to draw on the rendering target + * \param b the blue value used to draw on the rendering target + * \param a the alpha value used to draw on the rendering target; usually + * `SDL_ALPHA_OPAQUE` (255). Use SDL_SetRenderDrawBlendMode to + * specify how the alpha channel is used + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderDrawColor + * \sa SDL_RenderClear + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + */ +extern DECLSPEC int SDLCALL SDL_SetRenderDrawColor(SDL_Renderer * renderer, + Uint8 r, Uint8 g, Uint8 b, + Uint8 a); + +/** + * Get the color used for drawing operations (Rect, Line and Clear). + * + * \param renderer the rendering context + * \param r a pointer filled in with the red value used to draw on the + * rendering target + * \param g a pointer filled in with the green value used to draw on the + * rendering target + * \param b a pointer filled in with the blue value used to draw on the + * rendering target + * \param a a pointer filled in with the alpha value used to draw on the + * rendering target; usually `SDL_ALPHA_OPAQUE` (255) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDrawColor(SDL_Renderer * renderer, + Uint8 * r, Uint8 * g, Uint8 * b, + Uint8 * a); + +/** + * Set the blend mode used for drawing operations (Fill and Line). + * + * If the blend mode is not supported, the closest supported mode is chosen. + * + * \param renderer the rendering context + * \param blendMode the SDL_BlendMode to use for blending + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderDrawBlendMode + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + */ +extern DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer * renderer, + SDL_BlendMode blendMode); + +/** + * Get the blend mode used for drawing operations. + * + * \param renderer the rendering context + * \param blendMode a pointer filled in with the current SDL_BlendMode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderDrawBlendMode + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer * renderer, + SDL_BlendMode *blendMode); + +/** + * Clear the current rendering target with the drawing color. + * + * This function clears the entire rendering target, ignoring the viewport and + * the clip rectangle. + * + * \param renderer the rendering context + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderClear(SDL_Renderer * renderer); + +/** + * Draw a point on the current rendering target. + * + * SDL_RenderDrawPoint() draws a single point. If you want to draw multiple, + * use SDL_RenderDrawPoints() instead. + * + * \param renderer the rendering context + * \param x the x coordinate of the point + * \param y the y coordinate of the point + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPoint(SDL_Renderer * renderer, + int x, int y); + +/** + * Draw multiple points on the current rendering target. + * + * \param renderer the rendering context + * \param points an array of SDL_Point structures that represent the points to + * draw + * \param count the number of points to draw + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPoints(SDL_Renderer * renderer, + const SDL_Point * points, + int count); + +/** + * Draw a line on the current rendering target. + * + * SDL_RenderDrawLine() draws the line to include both end points. If you want + * to draw multiple, connecting lines use SDL_RenderDrawLines() instead. + * + * \param renderer the rendering context + * \param x1 the x coordinate of the start point + * \param y1 the y coordinate of the start point + * \param x2 the x coordinate of the end point + * \param y2 the y coordinate of the end point + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLine(SDL_Renderer * renderer, + int x1, int y1, int x2, int y2); + +/** + * Draw a series of connected lines on the current rendering target. + * + * \param renderer the rendering context + * \param points an array of SDL_Point structures representing points along + * the lines + * \param count the number of points, drawing count-1 lines + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLines(SDL_Renderer * renderer, + const SDL_Point * points, + int count); + +/** + * Draw a rectangle on the current rendering target. + * + * \param renderer the rendering context + * \param rect an SDL_Rect structure representing the rectangle to draw, or + * NULL to outline the entire rendering target + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Draw some number of rectangles on the current rendering target. + * + * \param renderer the rendering context + * \param rects an array of SDL_Rect structures representing the rectangles to + * be drawn + * \param count the number of rectangles + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRects(SDL_Renderer * renderer, + const SDL_Rect * rects, + int count); + +/** + * Fill a rectangle on the current rendering target with the drawing color. + * + * The current drawing color is set by SDL_SetRenderDrawColor(), and the + * color's alpha value is ignored unless blending is enabled with the + * appropriate call to SDL_SetRenderDrawBlendMode(). + * + * \param renderer the rendering context + * \param rect the SDL_Rect structure representing the rectangle to fill, or + * NULL for the entire rendering target + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Fill some number of rectangles on the current rendering target with the + * drawing color. + * + * \param renderer the rendering context + * \param rects an array of SDL_Rect structures representing the rectangles to + * be filled + * \param count the number of rectangles + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderPresent + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRects(SDL_Renderer * renderer, + const SDL_Rect * rects, + int count); + +/** + * Copy a portion of the texture to the current rendering target. + * + * The texture is blended with the destination based on its blend mode set + * with SDL_SetTextureBlendMode(). + * + * The texture color is affected based on its color modulation set by + * SDL_SetTextureColorMod(). + * + * The texture alpha is affected based on its alpha modulation set by + * SDL_SetTextureAlphaMod(). + * + * \param renderer the rendering context + * \param texture the source texture + * \param srcrect the source SDL_Rect structure or NULL for the entire texture + * \param dstrect the destination SDL_Rect structure or NULL for the entire + * rendering target; the texture will be stretched to fill the + * given rectangle + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderCopyEx + * \sa SDL_SetTextureAlphaMod + * \sa SDL_SetTextureBlendMode + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_Rect * dstrect); + +/** + * Copy a portion of the texture to the current rendering, with optional + * rotation and flipping. + * + * Copy a portion of the texture to the current rendering target, optionally + * rotating it by angle around the given center and also flipping it + * top-bottom and/or left-right. + * + * The texture is blended with the destination based on its blend mode set + * with SDL_SetTextureBlendMode(). + * + * The texture color is affected based on its color modulation set by + * SDL_SetTextureColorMod(). + * + * The texture alpha is affected based on its alpha modulation set by + * SDL_SetTextureAlphaMod(). + * + * \param renderer the rendering context + * \param texture the source texture + * \param srcrect the source SDL_Rect structure or NULL for the entire texture + * \param dstrect the destination SDL_Rect structure or NULL for the entire + * rendering target + * \param angle an angle in degrees that indicates the rotation that will be + * applied to dstrect, rotating it in a clockwise direction + * \param center a pointer to a point indicating the point around which + * dstrect will be rotated (if NULL, rotation will be done + * around `dstrect.w / 2`, `dstrect.h / 2`) + * \param flip a SDL_RendererFlip value stating which flipping actions should + * be performed on the texture + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderCopy + * \sa SDL_SetTextureAlphaMod + * \sa SDL_SetTextureBlendMode + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyEx(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_Rect * dstrect, + const double angle, + const SDL_Point *center, + const SDL_RendererFlip flip); + + +/** + * Draw a point on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw a point. + * \param x The x coordinate of the point. + * \param y The y coordinate of the point. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPointF(SDL_Renderer * renderer, + float x, float y); + +/** + * Draw multiple points on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw multiple points. + * \param points The points to draw + * \param count The number of points to draw + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPointsF(SDL_Renderer * renderer, + const SDL_FPoint * points, + int count); + +/** + * Draw a line on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw a line. + * \param x1 The x coordinate of the start point. + * \param y1 The y coordinate of the start point. + * \param x2 The x coordinate of the end point. + * \param y2 The y coordinate of the end point. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLineF(SDL_Renderer * renderer, + float x1, float y1, float x2, float y2); + +/** + * Draw a series of connected lines on the current rendering target at + * subpixel precision. + * + * \param renderer The renderer which should draw multiple lines. + * \param points The points along the lines + * \param count The number of points, drawing count-1 lines + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLinesF(SDL_Renderer * renderer, + const SDL_FPoint * points, + int count); + +/** + * Draw a rectangle on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw a rectangle. + * \param rect A pointer to the destination rectangle, or NULL to outline the + * entire rendering target. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRectF(SDL_Renderer * renderer, + const SDL_FRect * rect); + +/** + * Draw some number of rectangles on the current rendering target at subpixel + * precision. + * + * \param renderer The renderer which should draw multiple rectangles. + * \param rects A pointer to an array of destination rectangles. + * \param count The number of rectangles. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRectsF(SDL_Renderer * renderer, + const SDL_FRect * rects, + int count); + +/** + * Fill a rectangle on the current rendering target with the drawing color at + * subpixel precision. + * + * \param renderer The renderer which should fill a rectangle. + * \param rect A pointer to the destination rectangle, or NULL for the entire + * rendering target. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRectF(SDL_Renderer * renderer, + const SDL_FRect * rect); + +/** + * Fill some number of rectangles on the current rendering target with the + * drawing color at subpixel precision. + * + * \param renderer The renderer which should fill multiple rectangles. + * \param rects A pointer to an array of destination rectangles. + * \param count The number of rectangles. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRectsF(SDL_Renderer * renderer, + const SDL_FRect * rects, + int count); + +/** + * Copy a portion of the texture to the current rendering target at subpixel + * precision. + * + * \param renderer The renderer which should copy parts of a texture. + * \param texture The source texture. + * \param srcrect A pointer to the source rectangle, or NULL for the entire + * texture. + * \param dstrect A pointer to the destination rectangle, or NULL for the + * entire rendering target. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyF(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_FRect * dstrect); + +/** + * Copy a portion of the source texture to the current rendering target, with + * rotation and flipping, at subpixel precision. + * + * \param renderer The renderer which should copy parts of a texture. + * \param texture The source texture. + * \param srcrect A pointer to the source rectangle, or NULL for the entire + * texture. + * \param dstrect A pointer to the destination rectangle, or NULL for the + * entire rendering target. + * \param angle An angle in degrees that indicates the rotation that will be + * applied to dstrect, rotating it in a clockwise direction + * \param center A pointer to a point indicating the point around which + * dstrect will be rotated (if NULL, rotation will be done + * around dstrect.w/2, dstrect.h/2). + * \param flip An SDL_RendererFlip value stating which flipping actions should + * be performed on the texture + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyExF(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_FRect * dstrect, + const double angle, + const SDL_FPoint *center, + const SDL_RendererFlip flip); + +/** + * Render a list of triangles, optionally using a texture and indices into the + * vertex array Color and alpha modulation is done per vertex + * (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored). + * + * \param renderer The rendering context. + * \param texture (optional) The SDL texture to use. + * \param vertices Vertices. + * \param num_vertices Number of vertices. + * \param indices (optional) An array of integer indices into the 'vertices' + * array, if NULL all vertices will be rendered in sequential + * order. + * \param num_indices Number of indices. + * \return 0 on success, or -1 if the operation is not supported + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGeometryRaw + * \sa SDL_Vertex + */ +extern DECLSPEC int SDLCALL SDL_RenderGeometry(SDL_Renderer *renderer, + SDL_Texture *texture, + const SDL_Vertex *vertices, int num_vertices, + const int *indices, int num_indices); + +/** + * Render a list of triangles, optionally using a texture and indices into the + * vertex arrays Color and alpha modulation is done per vertex + * (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored). + * + * \param renderer The rendering context. + * \param texture (optional) The SDL texture to use. + * \param xy Vertex positions + * \param xy_stride Byte size to move from one element to the next element + * \param color Vertex colors (as SDL_Color) + * \param color_stride Byte size to move from one element to the next element + * \param uv Vertex normalized texture coordinates + * \param uv_stride Byte size to move from one element to the next element + * \param num_vertices Number of vertices. + * \param indices (optional) An array of indices into the 'vertices' arrays, + * if NULL all vertices will be rendered in sequential order. + * \param num_indices Number of indices. + * \param size_indices Index size: 1 (byte), 2 (short), 4 (int) + * \return 0 on success, or -1 if the operation is not supported + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGeometry + * \sa SDL_Vertex + */ +extern DECLSPEC int SDLCALL SDL_RenderGeometryRaw(SDL_Renderer *renderer, + SDL_Texture *texture, + const float *xy, int xy_stride, + const SDL_Color *color, int color_stride, + const float *uv, int uv_stride, + int num_vertices, + const void *indices, int num_indices, int size_indices); + +/** + * Read pixels from the current rendering target to an array of pixels. + * + * **WARNING**: This is a very slow operation, and should not be used + * frequently. If you're using this on the main rendering target, it should be + * called after rendering and before SDL_RenderPresent(). + * + * `pitch` specifies the number of bytes between rows in the destination + * `pixels` data. This allows you to write to a subrectangle or have padded + * rows in the destination. Generally, `pitch` should equal the number of + * pixels per row in the `pixels` data times the number of bytes per pixel, + * but it might contain additional padding (for example, 24bit RGB Windows + * Bitmap data pads all rows to multiples of 4 bytes). + * + * \param renderer the rendering context + * \param rect an SDL_Rect structure representing the area to read, or NULL + * for the entire render target + * \param format an SDL_PixelFormatEnum value of the desired format of the + * pixel data, or 0 to use the format of the rendering target + * \param pixels a pointer to the pixel data to copy into + * \param pitch the pitch of the `pixels` parameter + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_RenderReadPixels(SDL_Renderer * renderer, + const SDL_Rect * rect, + Uint32 format, + void *pixels, int pitch); + +/** + * Update the screen with any rendering performed since the previous call. + * + * SDL's rendering functions operate on a backbuffer; that is, calling a + * rendering function such as SDL_RenderDrawLine() does not directly put a + * line on the screen, but rather updates the backbuffer. As such, you compose + * your entire scene and *present* the composed backbuffer to the screen as a + * complete picture. + * + * Therefore, when using SDL's rendering API, one does all drawing intended + * for the frame, and then calls this function once per frame to present the + * final drawing to the user. + * + * The backbuffer should be considered invalidated after each present; do not + * assume that previous contents will exist between frames. You are strongly + * encouraged to call SDL_RenderClear() to initialize the backbuffer before + * starting each new frame's drawing, even if you plan to overwrite every + * pixel. + * + * \param renderer the rendering context + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderClear + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer); + +/** + * Destroy the specified texture. + * + * Passing NULL or an otherwise invalid texture will set the SDL error message + * to "Invalid texture". + * + * \param texture the texture to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + * \sa SDL_CreateTextureFromSurface + */ +extern DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_Texture * texture); + +/** + * Destroy the rendering context for a window and free associated textures. + * + * \param renderer the rendering context + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + */ +extern DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_Renderer * renderer); + +/** + * Force the rendering context to flush any pending commands to the underlying + * rendering API. + * + * You do not need to (and in fact, shouldn't) call this function unless you + * are planning to call into OpenGL/Direct3D/Metal/whatever directly in + * addition to using an SDL_Renderer. + * + * This is for a very-specific case: if you are using SDL's render API, you + * asked for a specific renderer backend (OpenGL, Direct3D, etc), you set + * SDL_HINT_RENDER_BATCHING to "1", and you plan to make OpenGL/D3D/whatever + * calls in addition to SDL render API calls. If all of this applies, you + * should call SDL_RenderFlush() between calls to SDL's render API and the + * low-level API you're using in cooperation. + * + * In all other cases, you can ignore this function. This is only here to get + * maximum performance out of a specific situation. In all other cases, SDL + * will do the right thing, perhaps at a performance loss. + * + * This function is first available in SDL 2.0.10, and is not needed in 2.0.9 + * and earlier, as earlier versions did not queue rendering commands at all, + * instead flushing them to the OS immediately. + * + * \param renderer the rendering context + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderFlush(SDL_Renderer * renderer); + + +/** + * Bind an OpenGL/ES/ES2 texture to the current context. + * + * This is for use with OpenGL instructions when rendering OpenGL primitives + * directly. + * + * If not NULL, `texw` and `texh` will be filled with the width and height + * values suitable for the provided texture. In most cases, both will be 1.0, + * however, on systems that support the GL_ARB_texture_rectangle extension, + * these values will actually be the pixel width and height used to create the + * texture, so this factor needs to be taken into account when providing + * texture coordinates to OpenGL. + * + * You need a renderer to create an SDL_Texture, therefore you can only use + * this function with an implicit OpenGL context from SDL_CreateRenderer(), + * not with your own OpenGL context. If you need control over your OpenGL + * context, you need to write your own texture-loading methods. + * + * Also note that SDL may upload RGB textures as BGR (or vice-versa), and + * re-order the color channels in the shaders phase, so the uploaded texture + * may have swapped color channels. + * + * \param texture the texture to bind to the current OpenGL/ES/ES2 context + * \param texw a pointer to a float value which will be filled with the + * texture width or NULL if you don't need that value + * \param texh a pointer to a float value which will be filled with the + * texture height or NULL if you don't need that value + * \returns 0 on success, or -1 if the operation is not supported; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_MakeCurrent + * \sa SDL_GL_UnbindTexture + */ +extern DECLSPEC int SDLCALL SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh); + +/** + * Unbind an OpenGL/ES/ES2 texture from the current context. + * + * See SDL_GL_BindTexture() for examples on how to use these functions + * + * \param texture the texture to unbind from the current OpenGL/ES/ES2 context + * \returns 0 on success, or -1 if the operation is not supported + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_BindTexture + * \sa SDL_GL_MakeCurrent + */ +extern DECLSPEC int SDLCALL SDL_GL_UnbindTexture(SDL_Texture *texture); + +/** + * Get the CAMetalLayer associated with the given Metal renderer. + * + * This function returns `void *`, so SDL doesn't have to include Metal's + * headers, but it can be safely cast to a `CAMetalLayer *`. + * + * \param renderer The renderer to query + * \returns a `CAMetalLayer *` on success, or NULL if the renderer isn't a + * Metal renderer + * + * \since This function is available since SDL 2.0.8. + * + * \sa SDL_RenderGetMetalCommandEncoder + */ +extern DECLSPEC void *SDLCALL SDL_RenderGetMetalLayer(SDL_Renderer * renderer); + +/** + * Get the Metal command encoder for the current frame + * + * This function returns `void *`, so SDL doesn't have to include Metal's + * headers, but it can be safely cast to an `id`. + * + * Note that as of SDL 2.0.18, this will return NULL if Metal refuses to give + * SDL a drawable to render to, which might happen if the window is + * hidden/minimized/offscreen. This doesn't apply to command encoders for + * render targets, just the window's backbacker. Check your return values! + * + * \param renderer The renderer to query + * \returns an `id` on success, or NULL if the + * renderer isn't a Metal renderer or there was an error. + * + * \since This function is available since SDL 2.0.8. + * + * \sa SDL_RenderGetMetalLayer + */ +extern DECLSPEC void *SDLCALL SDL_RenderGetMetalCommandEncoder(SDL_Renderer * renderer); + +/** + * Toggle VSync of the given renderer. + * + * \param renderer The renderer to toggle + * \param vsync 1 for on, 0 for off. All other values are reserved + * \returns a 0 int on success, or non-zero on failure + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_RenderSetVSync(SDL_Renderer* renderer, int vsync); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_render_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_revision.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_revision.h new file mode 100644 index 00000000000..9910dff49b8 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_revision.h @@ -0,0 +1,2 @@ +#define SDL_REVISION "https://github.com/libsdl-org/SDL.git@53dea9830964eee8b5c2a7ee0a65d6e268dc78a1" +#define SDL_REVISION_NUMBER 0 diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_rwops.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_rwops.h new file mode 100644 index 00000000000..99e373c8b51 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_rwops.h @@ -0,0 +1,855 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_rwops.h + * + * This file provides a general interface for SDL to read and write + * data streams. It can easily be extended to files, memory, etc. + */ + +#ifndef SDL_rwops_h_ +#define SDL_rwops_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* RWops Types */ +#define SDL_RWOPS_UNKNOWN 0U /**< Unknown stream type */ +#define SDL_RWOPS_WINFILE 1U /**< Win32 file */ +#define SDL_RWOPS_STDFILE 2U /**< Stdio file */ +#define SDL_RWOPS_JNIFILE 3U /**< Android asset */ +#define SDL_RWOPS_MEMORY 4U /**< Memory stream */ +#define SDL_RWOPS_MEMORY_RO 5U /**< Read-Only memory stream */ +#if defined(__VITA__) +#define SDL_RWOPS_VITAFILE 6U /**< Vita file */ +#endif + +/** + * This is the read/write operation structure -- very basic. + */ +typedef struct SDL_RWops +{ + /** + * Return the size of the file in this rwops, or -1 if unknown + */ + Sint64 (SDLCALL * size) (struct SDL_RWops * context); + + /** + * Seek to \c offset relative to \c whence, one of stdio's whence values: + * RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END + * + * \return the final offset in the data stream, or -1 on error. + */ + Sint64 (SDLCALL * seek) (struct SDL_RWops * context, Sint64 offset, + int whence); + + /** + * Read up to \c maxnum objects each of size \c size from the data + * stream to the area pointed at by \c ptr. + * + * \return the number of objects read, or 0 at error or end of file. + */ + size_t (SDLCALL * read) (struct SDL_RWops * context, void *ptr, + size_t size, size_t maxnum); + + /** + * Write exactly \c num objects each of size \c size from the area + * pointed at by \c ptr to data stream. + * + * \return the number of objects written, or 0 at error or end of file. + */ + size_t (SDLCALL * write) (struct SDL_RWops * context, const void *ptr, + size_t size, size_t num); + + /** + * Close and free an allocated SDL_RWops structure. + * + * \return 0 if successful or -1 on write error when flushing data. + */ + int (SDLCALL * close) (struct SDL_RWops * context); + + Uint32 type; + union + { +#if defined(__ANDROID__) + struct + { + void *asset; + } androidio; +#elif defined(__WIN32__) + struct + { + SDL_bool append; + void *h; + struct + { + void *data; + size_t size; + size_t left; + } buffer; + } windowsio; +#elif defined(__VITA__) + struct + { + int h; + struct + { + void *data; + size_t size; + size_t left; + } buffer; + } vitaio; +#endif + +#ifdef HAVE_STDIO_H + struct + { + SDL_bool autoclose; + FILE *fp; + } stdio; +#endif + struct + { + Uint8 *base; + Uint8 *here; + Uint8 *stop; + } mem; + struct + { + void *data1; + void *data2; + } unknown; + } hidden; + +} SDL_RWops; + + +/** + * \name RWFrom functions + * + * Functions to create SDL_RWops structures from various data streams. + */ +/* @{ */ + +/** + * Use this function to create a new SDL_RWops structure for reading from + * and/or writing to a named file. + * + * The `mode` string is treated roughly the same as in a call to the C + * library's fopen(), even if SDL doesn't happen to use fopen() behind the + * scenes. + * + * Available `mode` strings: + * + * - "r": Open a file for reading. The file must exist. + * - "w": Create an empty file for writing. If a file with the same name + * already exists its content is erased and the file is treated as a new + * empty file. + * - "a": Append to a file. Writing operations append data at the end of the + * file. The file is created if it does not exist. + * - "r+": Open a file for update both reading and writing. The file must + * exist. + * - "w+": Create an empty file for both reading and writing. If a file with + * the same name already exists its content is erased and the file is + * treated as a new empty file. + * - "a+": Open a file for reading and appending. All writing operations are + * performed at the end of the file, protecting the previous content to be + * overwritten. You can reposition (fseek, rewind) the internal pointer to + * anywhere in the file for reading, but writing operations will move it + * back to the end of file. The file is created if it does not exist. + * + * **NOTE**: In order to open a file as a binary file, a "b" character has to + * be included in the `mode` string. This additional "b" character can either + * be appended at the end of the string (thus making the following compound + * modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the + * letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). + * Additional characters may follow the sequence, although they should have no + * effect. For example, "t" is sometimes appended to make explicit the file is + * a text file. + * + * This function supports Unicode filenames, but they must be encoded in UTF-8 + * format, regardless of the underlying operating system. + * + * As a fallback, SDL_RWFromFile() will transparently open a matching filename + * in an Android app's `assets`. + * + * Closing the SDL_RWops will close the file handle SDL is holding internally. + * + * \param file a UTF-8 string representing the filename to open + * \param mode an ASCII string representing the mode to be used for opening + * the file. + * \returns a pointer to the SDL_RWops structure that is created, or NULL on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file, + const char *mode); + +#ifdef HAVE_STDIO_H + +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp, SDL_bool autoclose); + +#else + +/** + * Use this function to create an SDL_RWops structure from a standard I/O file + * pointer (stdio.h's `FILE*`). + * + * This function is not available on Windows, since files opened in an + * application on that platform cannot be used by a dynamically linked + * library. + * + * On some platforms, the first parameter is a `void*`, on others, it's a + * `FILE*`, depending on what system headers are available to SDL. It is + * always intended to be the `FILE*` type from the C runtime's stdio.h. + * + * \param fp the `FILE*` that feeds the SDL_RWops stream + * \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, + * SDL_FALSE to leave the `FILE*` open when the RWops is + * closed + * \returns a pointer to the SDL_RWops structure that is created, or NULL on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(void * fp, + SDL_bool autoclose); +#endif + +/** + * Use this function to prepare a read-write memory buffer for use with + * SDL_RWops. + * + * This function sets up an SDL_RWops struct based on a memory area of a + * certain size, for both read and write access. + * + * This memory buffer is not copied by the RWops; the pointer you provide must + * remain valid until you close the stream. Closing the stream will not free + * the original buffer. + * + * If you need to make sure the RWops never writes to the memory buffer, you + * should use SDL_RWFromConstMem() with a read-only buffer of memory instead. + * + * \param mem a pointer to a buffer to feed an SDL_RWops stream + * \param size the buffer size, in bytes + * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size); + +/** + * Use this function to prepare a read-only memory buffer for use with RWops. + * + * This function sets up an SDL_RWops struct based on a memory area of a + * certain size. It assumes the memory area is not writable. + * + * Attempting to write to this RWops stream will report an error without + * writing to the memory buffer. + * + * This memory buffer is not copied by the RWops; the pointer you provide must + * remain valid until you close the stream. Closing the stream will not free + * the original buffer. + * + * If you need to write to a memory buffer, you should use SDL_RWFromMem() + * with a writable buffer of memory instead. + * + * \param mem a pointer to a read-only buffer to feed an SDL_RWops stream + * \param size the buffer size, in bytes + * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem, + int size); + +/* @} *//* RWFrom functions */ + + +/** + * Use this function to allocate an empty, unpopulated SDL_RWops structure. + * + * Applications do not need to use this function unless they are providing + * their own SDL_RWops implementation. If you just need a SDL_RWops to + * read/write a common data source, you should use the built-in + * implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc. + * + * You must free the returned pointer with SDL_FreeRW(). Depending on your + * operating system and compiler, there may be a difference between the + * malloc() and free() your program uses and the versions SDL calls + * internally. Trying to mix the two can cause crashing such as segmentation + * faults. Since all SDL_RWops must free themselves when their **close** + * method is called, all SDL_RWops must be allocated through this function, so + * they can all be freed correctly with SDL_FreeRW(). + * + * \returns a pointer to the allocated memory on success, or NULL on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeRW + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); + +/** + * Use this function to free an SDL_RWops structure allocated by + * SDL_AllocRW(). + * + * Applications do not need to use this function unless they are providing + * their own SDL_RWops implementation. If you just need a SDL_RWops to + * read/write a common data source, you should use the built-in + * implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc, and + * call the **close** method on those SDL_RWops pointers when you are done + * with them. + * + * Only use SDL_FreeRW() on pointers returned by SDL_AllocRW(). The pointer is + * invalid as soon as this function returns. Any extra memory allocated during + * creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must + * be responsible for managing that memory in their **close** method. + * + * \param area the SDL_RWops structure to be freed + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocRW + */ +extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); + +#define RW_SEEK_SET 0 /**< Seek from the beginning of data */ +#define RW_SEEK_CUR 1 /**< Seek relative to current read point */ +#define RW_SEEK_END 2 /**< Seek relative to the end of data */ + +/** + * Use this function to get the size of the data stream in an SDL_RWops. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context the SDL_RWops to get the size of the data stream from + * \returns the size of the data stream in the SDL_RWops on success, -1 if + * unknown or a negative error code on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC Sint64 SDLCALL SDL_RWsize(SDL_RWops *context); + +/** + * Seek within an SDL_RWops data stream. + * + * This function seeks to byte `offset`, relative to `whence`. + * + * `whence` may be any of the following values: + * + * - `RW_SEEK_SET`: seek from the beginning of data + * - `RW_SEEK_CUR`: seek relative to current read point + * - `RW_SEEK_END`: seek relative to the end of data + * + * If this stream can not seek, it will return -1. + * + * SDL_RWseek() is actually a wrapper function that calls the SDL_RWops's + * `seek` method appropriately, to simplify application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a pointer to an SDL_RWops structure + * \param offset an offset in bytes, relative to **whence** location; can be + * negative + * \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END` + * \returns the final offset in the data stream after the seek or -1 on error. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC Sint64 SDLCALL SDL_RWseek(SDL_RWops *context, + Sint64 offset, int whence); + +/** + * Determine the current read/write offset in an SDL_RWops data stream. + * + * SDL_RWtell is actually a wrapper function that calls the SDL_RWops's `seek` + * method, with an offset of 0 bytes from `RW_SEEK_CUR`, to simplify + * application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a SDL_RWops data stream object from which to get the current + * offset + * \returns the current offset in the stream, or -1 if the information can not + * be determined. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWwrite + */ +extern DECLSPEC Sint64 SDLCALL SDL_RWtell(SDL_RWops *context); + +/** + * Read from a data source. + * + * This function reads up to `maxnum` objects each of size `size` from the + * data source to the area pointed at by `ptr`. This function may read less + * objects than requested. It will return zero when there has been an error or + * the data stream is completely read. + * + * SDL_RWread() is actually a function wrapper that calls the SDL_RWops's + * `read` method appropriately, to simplify application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a pointer to an SDL_RWops structure + * \param ptr a pointer to a buffer to read data into + * \param size the size of each object to read, in bytes + * \param maxnum the maximum number of objects to be read + * \returns the number of objects read, or 0 at error or end of file; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWseek + * \sa SDL_RWwrite + */ +extern DECLSPEC size_t SDLCALL SDL_RWread(SDL_RWops *context, + void *ptr, size_t size, + size_t maxnum); + +/** + * Write to an SDL_RWops data stream. + * + * This function writes exactly `num` objects each of size `size` from the + * area pointed at by `ptr` to the stream. If this fails for any reason, it'll + * return less than `num` to demonstrate how far the write progressed. On + * success, it returns `num`. + * + * SDL_RWwrite is actually a function wrapper that calls the SDL_RWops's + * `write` method appropriately, to simplify application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a pointer to an SDL_RWops structure + * \param ptr a pointer to a buffer containing data to write + * \param size the size of an object to write, in bytes + * \param num the number of objects to write + * \returns the number of objects written, which will be less than **num** on + * error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + */ +extern DECLSPEC size_t SDLCALL SDL_RWwrite(SDL_RWops *context, + const void *ptr, size_t size, + size_t num); + +/** + * Close and free an allocated SDL_RWops structure. + * + * SDL_RWclose() closes and cleans up the SDL_RWops stream. It releases any + * resources used by the stream and frees the SDL_RWops itself with + * SDL_FreeRW(). This returns 0 on success, or -1 if the stream failed to + * flush to its output (e.g. to disk). + * + * Note that if this fails to flush the stream to disk, this function reports + * an error, but the SDL_RWops is still invalid once this function returns. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context SDL_RWops structure to close + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWwrite + */ +extern DECLSPEC int SDLCALL SDL_RWclose(SDL_RWops *context); + +/** + * Load all the data from an SDL data stream. + * + * The data is allocated with a zero byte at the end (null terminated) for + * convenience. This extra byte is not included in the value reported via + * `datasize`. + * + * The data should be freed with SDL_free(). + * + * \param src the SDL_RWops to read all available data from + * \param datasize if not NULL, will store the number of bytes read + * \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning + * \returns the data, or NULL if there was an error. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC void *SDLCALL SDL_LoadFile_RW(SDL_RWops *src, + size_t *datasize, + int freesrc); + +/** + * Load all the data from a file path. + * + * The data is allocated with a zero byte at the end (null terminated) for + * convenience. This extra byte is not included in the value reported via + * `datasize`. + * + * The data should be freed with SDL_free(). + * + * Prior to SDL 2.0.10, this function was a macro wrapping around + * SDL_LoadFile_RW. + * + * \param file the path to read all available data from + * \param datasize if not NULL, will store the number of bytes read + * \returns the data, or NULL if there was an error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC void *SDLCALL SDL_LoadFile(const char *file, size_t *datasize); + +/** + * \name Read endian functions + * + * Read an item of the specified endianness and return in native format. + */ +/* @{ */ + +/** + * Use this function to read a byte from an SDL_RWops. + * + * \param src the SDL_RWops to read from + * \returns the read byte on success or 0 on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteU8 + */ +extern DECLSPEC Uint8 SDLCALL SDL_ReadU8(SDL_RWops * src); + +/** + * Use this function to read 16 bits of little-endian data from an SDL_RWops + * and return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 16 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadBE16 + */ +extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src); + +/** + * Use this function to read 16 bits of big-endian data from an SDL_RWops and + * return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 16 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadLE16 + */ +extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src); + +/** + * Use this function to read 32 bits of little-endian data from an SDL_RWops + * and return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 32 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadBE32 + */ +extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src); + +/** + * Use this function to read 32 bits of big-endian data from an SDL_RWops and + * return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 32 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadLE32 + */ +extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src); + +/** + * Use this function to read 64 bits of little-endian data from an SDL_RWops + * and return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 64 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadBE64 + */ +extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src); + +/** + * Use this function to read 64 bits of big-endian data from an SDL_RWops and + * return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 64 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadLE64 + */ +extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src); +/* @} *//* Read endian functions */ + +/** + * \name Write endian functions + * + * Write an item of native format to the specified endianness. + */ +/* @{ */ + +/** + * Use this function to write a byte to an SDL_RWops. + * + * \param dst the SDL_RWops to write to + * \param value the byte value to write + * \returns 1 on success or 0 on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadU8 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteU8(SDL_RWops * dst, Uint8 value); + +/** + * Use this function to write 16 bits in native format to a SDL_RWops as + * little-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in little-endian + * format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteBE16 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value); + +/** + * Use this function to write 16 bits in native format to a SDL_RWops as + * big-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in big-endian format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteLE16 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value); + +/** + * Use this function to write 32 bits in native format to a SDL_RWops as + * little-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in little-endian + * format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteBE32 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value); + +/** + * Use this function to write 32 bits in native format to a SDL_RWops as + * big-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in big-endian format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteLE32 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value); + +/** + * Use this function to write 64 bits in native format to a SDL_RWops as + * little-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in little-endian + * format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteBE64 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); + +/** + * Use this function to write 64 bits in native format to a SDL_RWops as + * big-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in big-endian format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteLE64 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value); +/* @} *//* Write endian functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_rwops_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_scancode.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_scancode.h new file mode 100644 index 00000000000..9dd3af7ba68 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_scancode.h @@ -0,0 +1,413 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_scancode.h + * + * Defines keyboard scancodes. + */ + +#ifndef SDL_scancode_h_ +#define SDL_scancode_h_ + +#include + +/** + * \brief The SDL keyboard scancode representation. + * + * Values of this type are used to represent keyboard keys, among other places + * in the \link SDL_Keysym::scancode key.keysym.scancode \endlink field of the + * SDL_Event structure. + * + * The values in this enumeration are based on the USB usage page standard: + * https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf + */ +typedef enum +{ + SDL_SCANCODE_UNKNOWN = 0, + + /** + * \name Usage page 0x07 + * + * These values are from usage page 0x07 (USB keyboard page). + */ + /* @{ */ + + SDL_SCANCODE_A = 4, + SDL_SCANCODE_B = 5, + SDL_SCANCODE_C = 6, + SDL_SCANCODE_D = 7, + SDL_SCANCODE_E = 8, + SDL_SCANCODE_F = 9, + SDL_SCANCODE_G = 10, + SDL_SCANCODE_H = 11, + SDL_SCANCODE_I = 12, + SDL_SCANCODE_J = 13, + SDL_SCANCODE_K = 14, + SDL_SCANCODE_L = 15, + SDL_SCANCODE_M = 16, + SDL_SCANCODE_N = 17, + SDL_SCANCODE_O = 18, + SDL_SCANCODE_P = 19, + SDL_SCANCODE_Q = 20, + SDL_SCANCODE_R = 21, + SDL_SCANCODE_S = 22, + SDL_SCANCODE_T = 23, + SDL_SCANCODE_U = 24, + SDL_SCANCODE_V = 25, + SDL_SCANCODE_W = 26, + SDL_SCANCODE_X = 27, + SDL_SCANCODE_Y = 28, + SDL_SCANCODE_Z = 29, + + SDL_SCANCODE_1 = 30, + SDL_SCANCODE_2 = 31, + SDL_SCANCODE_3 = 32, + SDL_SCANCODE_4 = 33, + SDL_SCANCODE_5 = 34, + SDL_SCANCODE_6 = 35, + SDL_SCANCODE_7 = 36, + SDL_SCANCODE_8 = 37, + SDL_SCANCODE_9 = 38, + SDL_SCANCODE_0 = 39, + + SDL_SCANCODE_RETURN = 40, + SDL_SCANCODE_ESCAPE = 41, + SDL_SCANCODE_BACKSPACE = 42, + SDL_SCANCODE_TAB = 43, + SDL_SCANCODE_SPACE = 44, + + SDL_SCANCODE_MINUS = 45, + SDL_SCANCODE_EQUALS = 46, + SDL_SCANCODE_LEFTBRACKET = 47, + SDL_SCANCODE_RIGHTBRACKET = 48, + SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return + * key on ISO keyboards and at the right end + * of the QWERTY row on ANSI keyboards. + * Produces REVERSE SOLIDUS (backslash) and + * VERTICAL LINE in a US layout, REVERSE + * SOLIDUS and VERTICAL LINE in a UK Mac + * layout, NUMBER SIGN and TILDE in a UK + * Windows layout, DOLLAR SIGN and POUND SIGN + * in a Swiss German layout, NUMBER SIGN and + * APOSTROPHE in a German layout, GRAVE + * ACCENT and POUND SIGN in a French Mac + * layout, and ASTERISK and MICRO SIGN in a + * French Windows layout. + */ + SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code + * instead of 49 for the same key, but all + * OSes I've seen treat the two codes + * identically. So, as an implementor, unless + * your keyboard generates both of those + * codes and your OS treats them differently, + * you should generate SDL_SCANCODE_BACKSLASH + * instead of this code. As a user, you + * should not rely on this code because SDL + * will never generate it with most (all?) + * keyboards. + */ + SDL_SCANCODE_SEMICOLON = 51, + SDL_SCANCODE_APOSTROPHE = 52, + SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI + * and ISO keyboards). Produces GRAVE ACCENT and + * TILDE in a US Windows layout and in US and UK + * Mac layouts on ANSI keyboards, GRAVE ACCENT + * and NOT SIGN in a UK Windows layout, SECTION + * SIGN and PLUS-MINUS SIGN in US and UK Mac + * layouts on ISO keyboards, SECTION SIGN and + * DEGREE SIGN in a Swiss German layout (Mac: + * only on ISO keyboards), CIRCUMFLEX ACCENT and + * DEGREE SIGN in a German layout (Mac: only on + * ISO keyboards), SUPERSCRIPT TWO and TILDE in a + * French Windows layout, COMMERCIAL AT and + * NUMBER SIGN in a French Mac layout on ISO + * keyboards, and LESS-THAN SIGN and GREATER-THAN + * SIGN in a Swiss German, German, or French Mac + * layout on ANSI keyboards. + */ + SDL_SCANCODE_COMMA = 54, + SDL_SCANCODE_PERIOD = 55, + SDL_SCANCODE_SLASH = 56, + + SDL_SCANCODE_CAPSLOCK = 57, + + SDL_SCANCODE_F1 = 58, + SDL_SCANCODE_F2 = 59, + SDL_SCANCODE_F3 = 60, + SDL_SCANCODE_F4 = 61, + SDL_SCANCODE_F5 = 62, + SDL_SCANCODE_F6 = 63, + SDL_SCANCODE_F7 = 64, + SDL_SCANCODE_F8 = 65, + SDL_SCANCODE_F9 = 66, + SDL_SCANCODE_F10 = 67, + SDL_SCANCODE_F11 = 68, + SDL_SCANCODE_F12 = 69, + + SDL_SCANCODE_PRINTSCREEN = 70, + SDL_SCANCODE_SCROLLLOCK = 71, + SDL_SCANCODE_PAUSE = 72, + SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but + does send code 73, not 117) */ + SDL_SCANCODE_HOME = 74, + SDL_SCANCODE_PAGEUP = 75, + SDL_SCANCODE_DELETE = 76, + SDL_SCANCODE_END = 77, + SDL_SCANCODE_PAGEDOWN = 78, + SDL_SCANCODE_RIGHT = 79, + SDL_SCANCODE_LEFT = 80, + SDL_SCANCODE_DOWN = 81, + SDL_SCANCODE_UP = 82, + + SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards + */ + SDL_SCANCODE_KP_DIVIDE = 84, + SDL_SCANCODE_KP_MULTIPLY = 85, + SDL_SCANCODE_KP_MINUS = 86, + SDL_SCANCODE_KP_PLUS = 87, + SDL_SCANCODE_KP_ENTER = 88, + SDL_SCANCODE_KP_1 = 89, + SDL_SCANCODE_KP_2 = 90, + SDL_SCANCODE_KP_3 = 91, + SDL_SCANCODE_KP_4 = 92, + SDL_SCANCODE_KP_5 = 93, + SDL_SCANCODE_KP_6 = 94, + SDL_SCANCODE_KP_7 = 95, + SDL_SCANCODE_KP_8 = 96, + SDL_SCANCODE_KP_9 = 97, + SDL_SCANCODE_KP_0 = 98, + SDL_SCANCODE_KP_PERIOD = 99, + + SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO + * keyboards have over ANSI ones, + * located between left shift and Y. + * Produces GRAVE ACCENT and TILDE in a + * US or UK Mac layout, REVERSE SOLIDUS + * (backslash) and VERTICAL LINE in a + * US or UK Windows layout, and + * LESS-THAN SIGN and GREATER-THAN SIGN + * in a Swiss German, German, or French + * layout. */ + SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */ + SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag, + * not a physical key - but some Mac keyboards + * do have a power key. */ + SDL_SCANCODE_KP_EQUALS = 103, + SDL_SCANCODE_F13 = 104, + SDL_SCANCODE_F14 = 105, + SDL_SCANCODE_F15 = 106, + SDL_SCANCODE_F16 = 107, + SDL_SCANCODE_F17 = 108, + SDL_SCANCODE_F18 = 109, + SDL_SCANCODE_F19 = 110, + SDL_SCANCODE_F20 = 111, + SDL_SCANCODE_F21 = 112, + SDL_SCANCODE_F22 = 113, + SDL_SCANCODE_F23 = 114, + SDL_SCANCODE_F24 = 115, + SDL_SCANCODE_EXECUTE = 116, + SDL_SCANCODE_HELP = 117, + SDL_SCANCODE_MENU = 118, + SDL_SCANCODE_SELECT = 119, + SDL_SCANCODE_STOP = 120, + SDL_SCANCODE_AGAIN = 121, /**< redo */ + SDL_SCANCODE_UNDO = 122, + SDL_SCANCODE_CUT = 123, + SDL_SCANCODE_COPY = 124, + SDL_SCANCODE_PASTE = 125, + SDL_SCANCODE_FIND = 126, + SDL_SCANCODE_MUTE = 127, + SDL_SCANCODE_VOLUMEUP = 128, + SDL_SCANCODE_VOLUMEDOWN = 129, +/* not sure whether there's a reason to enable these */ +/* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */ +/* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */ +/* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */ + SDL_SCANCODE_KP_COMMA = 133, + SDL_SCANCODE_KP_EQUALSAS400 = 134, + + SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see + footnotes in USB doc */ + SDL_SCANCODE_INTERNATIONAL2 = 136, + SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */ + SDL_SCANCODE_INTERNATIONAL4 = 138, + SDL_SCANCODE_INTERNATIONAL5 = 139, + SDL_SCANCODE_INTERNATIONAL6 = 140, + SDL_SCANCODE_INTERNATIONAL7 = 141, + SDL_SCANCODE_INTERNATIONAL8 = 142, + SDL_SCANCODE_INTERNATIONAL9 = 143, + SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */ + SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */ + SDL_SCANCODE_LANG3 = 146, /**< Katakana */ + SDL_SCANCODE_LANG4 = 147, /**< Hiragana */ + SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */ + SDL_SCANCODE_LANG6 = 149, /**< reserved */ + SDL_SCANCODE_LANG7 = 150, /**< reserved */ + SDL_SCANCODE_LANG8 = 151, /**< reserved */ + SDL_SCANCODE_LANG9 = 152, /**< reserved */ + + SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */ + SDL_SCANCODE_SYSREQ = 154, + SDL_SCANCODE_CANCEL = 155, + SDL_SCANCODE_CLEAR = 156, + SDL_SCANCODE_PRIOR = 157, + SDL_SCANCODE_RETURN2 = 158, + SDL_SCANCODE_SEPARATOR = 159, + SDL_SCANCODE_OUT = 160, + SDL_SCANCODE_OPER = 161, + SDL_SCANCODE_CLEARAGAIN = 162, + SDL_SCANCODE_CRSEL = 163, + SDL_SCANCODE_EXSEL = 164, + + SDL_SCANCODE_KP_00 = 176, + SDL_SCANCODE_KP_000 = 177, + SDL_SCANCODE_THOUSANDSSEPARATOR = 178, + SDL_SCANCODE_DECIMALSEPARATOR = 179, + SDL_SCANCODE_CURRENCYUNIT = 180, + SDL_SCANCODE_CURRENCYSUBUNIT = 181, + SDL_SCANCODE_KP_LEFTPAREN = 182, + SDL_SCANCODE_KP_RIGHTPAREN = 183, + SDL_SCANCODE_KP_LEFTBRACE = 184, + SDL_SCANCODE_KP_RIGHTBRACE = 185, + SDL_SCANCODE_KP_TAB = 186, + SDL_SCANCODE_KP_BACKSPACE = 187, + SDL_SCANCODE_KP_A = 188, + SDL_SCANCODE_KP_B = 189, + SDL_SCANCODE_KP_C = 190, + SDL_SCANCODE_KP_D = 191, + SDL_SCANCODE_KP_E = 192, + SDL_SCANCODE_KP_F = 193, + SDL_SCANCODE_KP_XOR = 194, + SDL_SCANCODE_KP_POWER = 195, + SDL_SCANCODE_KP_PERCENT = 196, + SDL_SCANCODE_KP_LESS = 197, + SDL_SCANCODE_KP_GREATER = 198, + SDL_SCANCODE_KP_AMPERSAND = 199, + SDL_SCANCODE_KP_DBLAMPERSAND = 200, + SDL_SCANCODE_KP_VERTICALBAR = 201, + SDL_SCANCODE_KP_DBLVERTICALBAR = 202, + SDL_SCANCODE_KP_COLON = 203, + SDL_SCANCODE_KP_HASH = 204, + SDL_SCANCODE_KP_SPACE = 205, + SDL_SCANCODE_KP_AT = 206, + SDL_SCANCODE_KP_EXCLAM = 207, + SDL_SCANCODE_KP_MEMSTORE = 208, + SDL_SCANCODE_KP_MEMRECALL = 209, + SDL_SCANCODE_KP_MEMCLEAR = 210, + SDL_SCANCODE_KP_MEMADD = 211, + SDL_SCANCODE_KP_MEMSUBTRACT = 212, + SDL_SCANCODE_KP_MEMMULTIPLY = 213, + SDL_SCANCODE_KP_MEMDIVIDE = 214, + SDL_SCANCODE_KP_PLUSMINUS = 215, + SDL_SCANCODE_KP_CLEAR = 216, + SDL_SCANCODE_KP_CLEARENTRY = 217, + SDL_SCANCODE_KP_BINARY = 218, + SDL_SCANCODE_KP_OCTAL = 219, + SDL_SCANCODE_KP_DECIMAL = 220, + SDL_SCANCODE_KP_HEXADECIMAL = 221, + + SDL_SCANCODE_LCTRL = 224, + SDL_SCANCODE_LSHIFT = 225, + SDL_SCANCODE_LALT = 226, /**< alt, option */ + SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */ + SDL_SCANCODE_RCTRL = 228, + SDL_SCANCODE_RSHIFT = 229, + SDL_SCANCODE_RALT = 230, /**< alt gr, option */ + SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */ + + SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered + * by any of the above, but since there's a + * special KMOD_MODE for it I'm adding it here + */ + + /* @} *//* Usage page 0x07 */ + + /** + * \name Usage page 0x0C + * + * These values are mapped from usage page 0x0C (USB consumer page). + */ + /* @{ */ + + SDL_SCANCODE_AUDIONEXT = 258, + SDL_SCANCODE_AUDIOPREV = 259, + SDL_SCANCODE_AUDIOSTOP = 260, + SDL_SCANCODE_AUDIOPLAY = 261, + SDL_SCANCODE_AUDIOMUTE = 262, + SDL_SCANCODE_MEDIASELECT = 263, + SDL_SCANCODE_WWW = 264, + SDL_SCANCODE_MAIL = 265, + SDL_SCANCODE_CALCULATOR = 266, + SDL_SCANCODE_COMPUTER = 267, + SDL_SCANCODE_AC_SEARCH = 268, + SDL_SCANCODE_AC_HOME = 269, + SDL_SCANCODE_AC_BACK = 270, + SDL_SCANCODE_AC_FORWARD = 271, + SDL_SCANCODE_AC_STOP = 272, + SDL_SCANCODE_AC_REFRESH = 273, + SDL_SCANCODE_AC_BOOKMARKS = 274, + + /* @} *//* Usage page 0x0C */ + + /** + * \name Walther keys + * + * These are values that Christian Walther added (for mac keyboard?). + */ + /* @{ */ + + SDL_SCANCODE_BRIGHTNESSDOWN = 275, + SDL_SCANCODE_BRIGHTNESSUP = 276, + SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display + switch, video mode switch */ + SDL_SCANCODE_KBDILLUMTOGGLE = 278, + SDL_SCANCODE_KBDILLUMDOWN = 279, + SDL_SCANCODE_KBDILLUMUP = 280, + SDL_SCANCODE_EJECT = 281, + SDL_SCANCODE_SLEEP = 282, + + SDL_SCANCODE_APP1 = 283, + SDL_SCANCODE_APP2 = 284, + + /* @} *//* Walther keys */ + + /** + * \name Usage page 0x0C (additional media keys) + * + * These values are mapped from usage page 0x0C (USB consumer page). + */ + /* @{ */ + + SDL_SCANCODE_AUDIOREWIND = 285, + SDL_SCANCODE_AUDIOFASTFORWARD = 286, + + /* @} *//* Usage page 0x0C (additional media keys) */ + + /* Add any other keys here. */ + + SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes + for array bounds */ +} SDL_Scancode; + +#endif /* SDL_scancode_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_sensor.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_sensor.h new file mode 100644 index 00000000000..8758cc303e1 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_sensor.h @@ -0,0 +1,301 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_sensor.h + * + * Include file for SDL sensor event handling + * + */ + +#ifndef SDL_sensor_h_ +#define SDL_sensor_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +extern "C" { +/* *INDENT-ON* */ +#endif + +/** + * \brief SDL_sensor.h + * + * In order to use these functions, SDL_Init() must have been called + * with the ::SDL_INIT_SENSOR flag. This causes SDL to scan the system + * for sensors, and load appropriate drivers. + */ + +struct _SDL_Sensor; +typedef struct _SDL_Sensor SDL_Sensor; + +/** + * This is a unique ID for a sensor for the time it is connected to the system, + * and is never reused for the lifetime of the application. + * + * The ID value starts at 0 and increments from there. The value -1 is an invalid ID. + */ +typedef Sint32 SDL_SensorID; + +/* The different sensors defined by SDL + * + * Additional sensors may be available, using platform dependent semantics. + * + * Hare are the additional Android sensors: + * https://developer.android.com/reference/android/hardware/SensorEvent.html#values + */ +typedef enum +{ + SDL_SENSOR_INVALID = -1, /**< Returned for an invalid sensor */ + SDL_SENSOR_UNKNOWN, /**< Unknown sensor type */ + SDL_SENSOR_ACCEL, /**< Accelerometer */ + SDL_SENSOR_GYRO /**< Gyroscope */ +} SDL_SensorType; + +/** + * Accelerometer sensor + * + * The accelerometer returns the current acceleration in SI meters per + * second squared. This measurement includes the force of gravity, so + * a device at rest will have an value of SDL_STANDARD_GRAVITY away + * from the center of the earth. + * + * values[0]: Acceleration on the x axis + * values[1]: Acceleration on the y axis + * values[2]: Acceleration on the z axis + * + * For phones held in portrait mode and game controllers held in front of you, + * the axes are defined as follows: + * -X ... +X : left ... right + * -Y ... +Y : bottom ... top + * -Z ... +Z : farther ... closer + * + * The axis data is not changed when the phone is rotated. + * + * \sa SDL_GetDisplayOrientation() + */ +#define SDL_STANDARD_GRAVITY 9.80665f + +/** + * Gyroscope sensor + * + * The gyroscope returns the current rate of rotation in radians per second. + * The rotation is positive in the counter-clockwise direction. That is, + * an observer looking from a positive location on one of the axes would + * see positive rotation on that axis when it appeared to be rotating + * counter-clockwise. + * + * values[0]: Angular speed around the x axis (pitch) + * values[1]: Angular speed around the y axis (yaw) + * values[2]: Angular speed around the z axis (roll) + * + * For phones held in portrait mode and game controllers held in front of you, + * the axes are defined as follows: + * -X ... +X : left ... right + * -Y ... +Y : bottom ... top + * -Z ... +Z : farther ... closer + * + * The axis data is not changed when the phone or controller is rotated. + * + * \sa SDL_GetDisplayOrientation() + */ + +/* Function prototypes */ + +/** + * Locking for multi-threaded access to the sensor API + * + * If you are using the sensor API or handling events from multiple threads + * you should use these locking functions to protect access to the sensors. + * + * In particular, you are guaranteed that the sensor list won't change, so the + * API functions that take a sensor index will be valid, and sensor events + * will not be delivered. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC void SDLCALL SDL_LockSensors(void); +extern DECLSPEC void SDLCALL SDL_UnlockSensors(void); + +/** + * Count the number of sensors attached to the system right now. + * + * \returns the number of sensors detected. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_NumSensors(void); + +/** + * Get the implementation dependent name of a sensor. + * + * \param device_index The sensor to obtain name from + * \returns the sensor name, or NULL if `device_index` is out of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC const char *SDLCALL SDL_SensorGetDeviceName(int device_index); + +/** + * Get the type of a sensor. + * + * \param device_index The sensor to get the type from + * \returns the SDL_SensorType, or `SDL_SENSOR_INVALID` if `device_index` is + * out of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetDeviceType(int device_index); + +/** + * Get the platform dependent type of a sensor. + * + * \param device_index The sensor to check + * \returns the sensor platform dependent type, or -1 if `device_index` is out + * of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetDeviceNonPortableType(int device_index); + +/** + * Get the instance ID of a sensor. + * + * \param device_index The sensor to get instance id from + * \returns the sensor instance ID, or -1 if `device_index` is out of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetDeviceInstanceID(int device_index); + +/** + * Open a sensor for use. + * + * \param device_index The sensor to open + * \returns an SDL_Sensor sensor object, or NULL if an error occurred. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorOpen(int device_index); + +/** + * Return the SDL_Sensor associated with an instance id. + * + * \param instance_id The sensor from instance id + * \returns an SDL_Sensor object. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorFromInstanceID(SDL_SensorID instance_id); + +/** + * Get the implementation dependent name of a sensor + * + * \param sensor The SDL_Sensor object + * \returns the sensor name, or NULL if `sensor` is NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC const char *SDLCALL SDL_SensorGetName(SDL_Sensor *sensor); + +/** + * Get the type of a sensor. + * + * \param sensor The SDL_Sensor object to inspect + * \returns the SDL_SensorType type, or `SDL_SENSOR_INVALID` if `sensor` is + * NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetType(SDL_Sensor *sensor); + +/** + * Get the platform dependent type of a sensor. + * + * \param sensor The SDL_Sensor object to inspect + * \returns the sensor platform dependent type, or -1 if `sensor` is NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetNonPortableType(SDL_Sensor *sensor); + +/** + * Get the instance ID of a sensor. + * + * \param sensor The SDL_Sensor object to inspect + * \returns the sensor instance ID, or -1 if `sensor` is NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetInstanceID(SDL_Sensor *sensor); + +/** + * Get the current state of an opened sensor. + * + * The number of values and interpretation of the data is sensor dependent. + * + * \param sensor The SDL_Sensor object to query + * \param data A pointer filled with the current sensor state + * \param num_values The number of values to write to data + * \returns 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetData(SDL_Sensor * sensor, float *data, int num_values); + +/** + * Close a sensor previously opened with SDL_SensorOpen(). + * + * \param sensor The SDL_Sensor object to close + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC void SDLCALL SDL_SensorClose(SDL_Sensor * sensor); + +/** + * Update the current state of the open sensors. + * + * This is called automatically by the event loop if sensor events are + * enabled. + * + * This needs to be called from the thread that initialized the sensor + * subsystem. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC void SDLCALL SDL_SensorUpdate(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +} +/* *INDENT-ON* */ +#endif +#include + +#endif /* SDL_sensor_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_shape.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_shape.h new file mode 100644 index 00000000000..71662aad838 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_shape.h @@ -0,0 +1,155 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_shape_h_ +#define SDL_shape_h_ + +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** \file SDL_shape.h + * + * Header file for the shaped window API. + */ + +#define SDL_NONSHAPEABLE_WINDOW -1 +#define SDL_INVALID_SHAPE_ARGUMENT -2 +#define SDL_WINDOW_LACKS_SHAPE -3 + +/** + * Create a window that can be shaped with the specified position, dimensions, + * and flags. + * + * \param title The title of the window, in UTF-8 encoding. + * \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or + * ::SDL_WINDOWPOS_UNDEFINED. + * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or + * ::SDL_WINDOWPOS_UNDEFINED. + * \param w The width of the window. + * \param h The height of the window. + * \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with + * any of the following: ::SDL_WINDOW_OPENGL, + * ::SDL_WINDOW_INPUT_GRABBED, ::SDL_WINDOW_HIDDEN, + * ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED, + * ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_BORDERLESS is always set, + * and ::SDL_WINDOW_FULLSCREEN is always unset. + * \return the window created, or NULL if window creation failed. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroyWindow + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned int w,unsigned int h,Uint32 flags); + +/** + * Return whether the given window is a shaped window. + * + * \param window The window to query for being shaped. + * \return SDL_TRUE if the window is a window that can be shaped, SDL_FALSE if + * the window is unshaped or NULL. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateShapedWindow + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsShapedWindow(const SDL_Window *window); + +/** \brief An enum denoting the specific type of contents present in an SDL_WindowShapeParams union. */ +typedef enum { + /** \brief The default mode, a binarized alpha cutoff of 1. */ + ShapeModeDefault, + /** \brief A binarized alpha cutoff with a given integer value. */ + ShapeModeBinarizeAlpha, + /** \brief A binarized alpha cutoff with a given integer value, but with the opposite comparison. */ + ShapeModeReverseBinarizeAlpha, + /** \brief A color key is applied. */ + ShapeModeColorKey +} WindowShapeMode; + +#define SDL_SHAPEMODEALPHA(mode) (mode == ShapeModeDefault || mode == ShapeModeBinarizeAlpha || mode == ShapeModeReverseBinarizeAlpha) + +/** \brief A union containing parameters for shaped windows. */ +typedef union { + /** \brief A cutoff alpha value for binarization of the window shape's alpha channel. */ + Uint8 binarizationCutoff; + SDL_Color colorKey; +} SDL_WindowShapeParams; + +/** \brief A struct that tags the SDL_WindowShapeParams union with an enum describing the type of its contents. */ +typedef struct SDL_WindowShapeMode { + /** \brief The mode of these window-shape parameters. */ + WindowShapeMode mode; + /** \brief Window-shape parameters. */ + SDL_WindowShapeParams parameters; +} SDL_WindowShapeMode; + +/** + * Set the shape and parameters of a shaped window. + * + * \param window The shaped window whose parameters should be set. + * \param shape A surface encoding the desired shape for the window. + * \param shape_mode The parameters to set for the shaped window. + * \return 0 on success, SDL_INVALID_SHAPE_ARGUMENT on an invalid shape + * argument, or SDL_NONSHAPEABLE_WINDOW if the SDL_Window given does + * not reference a valid shaped window. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WindowShapeMode + * \sa SDL_GetShapedWindowMode + */ +extern DECLSPEC int SDLCALL SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode); + +/** + * Get the shape parameters of a shaped window. + * + * \param window The shaped window whose parameters should be retrieved. + * \param shape_mode An empty shape-mode structure to fill, or NULL to check + * whether the window has a shape. + * \return 0 if the window has a shape and, provided shape_mode was not NULL, + * shape_mode has been filled with the mode data, + * SDL_NONSHAPEABLE_WINDOW if the SDL_Window given is not a shaped + * window, or SDL_WINDOW_LACKS_SHAPE if the SDL_Window given is a + * shapeable window currently lacking a shape. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WindowShapeMode + * \sa SDL_SetWindowShape + */ +extern DECLSPEC int SDLCALL SDL_GetShapedWindowMode(SDL_Window *window,SDL_WindowShapeMode *shape_mode); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_shape_h_ */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_stdinc.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_stdinc.h new file mode 100644 index 00000000000..23a14adaf47 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_stdinc.h @@ -0,0 +1,738 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_stdinc.h + * + * This is a general header that includes C language support. + */ + +#ifndef SDL_stdinc_h_ +#define SDL_stdinc_h_ + +#include + +#ifdef __APPLE__ +#ifndef _DARWIN_C_SOURCE +#define _DARWIN_C_SOURCE 1 /* for memset_pattern4() */ +#endif +#endif + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_STDIO_H +#include +#endif +#if defined(STDC_HEADERS) +# include +# include +# include +#else +# if defined(HAVE_STDLIB_H) +# include +# elif defined(HAVE_MALLOC_H) +# include +# endif +# if defined(HAVE_STDDEF_H) +# include +# endif +# if defined(HAVE_STDARG_H) +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_WCHAR_H +# include +#endif +#if defined(HAVE_INTTYPES_H) +# include +#elif defined(HAVE_STDINT_H) +# include +#endif +#ifdef HAVE_CTYPE_H +# include +#endif +#ifdef HAVE_MATH_H +# if defined(__WINRT__) +/* Defining _USE_MATH_DEFINES is required to get M_PI to be defined on + WinRT. See http://msdn.microsoft.com/en-us/library/4hwaceh6.aspx + for more information. +*/ +# define _USE_MATH_DEFINES +# endif +# include +#endif +#ifdef HAVE_FLOAT_H +# include +#endif +#if defined(HAVE_ALLOCA) && !defined(alloca) +# if defined(HAVE_ALLOCA_H) +# include +# elif defined(__GNUC__) +# define alloca __builtin_alloca +# elif defined(_MSC_VER) +# include +# define alloca _alloca +# elif defined(__WATCOMC__) +# include +# elif defined(__BORLANDC__) +# include +# elif defined(__DMC__) +# include +# elif defined(__AIX__) +#pragma alloca +# elif defined(__MRC__) +void *alloca(unsigned); +# else +char *alloca(); +# endif +#endif + +/** + * Check if the compiler supports a given builtin. + * Supported by virtually all clang versions and recent gcc. Use this + * instead of checking the clang version if possible. + */ +#ifdef __has_builtin +#define _SDL_HAS_BUILTIN(x) __has_builtin(x) +#else +#define _SDL_HAS_BUILTIN(x) 0 +#endif + +/** + * The number of elements in an array. + */ +#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) +#define SDL_TABLESIZE(table) SDL_arraysize(table) + +/** + * Macro useful for building other macros with strings in them + * + * e.g. #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n") + */ +#define SDL_STRINGIFY_ARG(arg) #arg + +/** + * \name Cast operators + * + * Use proper C++ casts when compiled as C++ to be compatible with the option + * -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above). + */ +/* @{ */ +#ifdef __cplusplus +#define SDL_reinterpret_cast(type, expression) reinterpret_cast(expression) +#define SDL_static_cast(type, expression) static_cast(expression) +#define SDL_const_cast(type, expression) const_cast(expression) +#else +#define SDL_reinterpret_cast(type, expression) ((type)(expression)) +#define SDL_static_cast(type, expression) ((type)(expression)) +#define SDL_const_cast(type, expression) ((type)(expression)) +#endif +/* @} *//* Cast operators */ + +/* Define a four character code as a Uint32 */ +#define SDL_FOURCC(A, B, C, D) \ + ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24)) + +/** + * \name Basic data types + */ +/* @{ */ + +#ifdef __CC_ARM +/* ARM's compiler throws warnings if we use an enum: like "SDL_bool x = a < b;" */ +#define SDL_FALSE 0 +#define SDL_TRUE 1 +typedef int SDL_bool; +#else +typedef enum +{ + SDL_FALSE = 0, + SDL_TRUE = 1 +} SDL_bool; +#endif + +/** + * \brief A signed 8-bit integer type. + */ +#define SDL_MAX_SINT8 ((Sint8)0x7F) /* 127 */ +#define SDL_MIN_SINT8 ((Sint8)(~0x7F)) /* -128 */ +typedef int8_t Sint8; +/** + * \brief An unsigned 8-bit integer type. + */ +#define SDL_MAX_UINT8 ((Uint8)0xFF) /* 255 */ +#define SDL_MIN_UINT8 ((Uint8)0x00) /* 0 */ +typedef uint8_t Uint8; +/** + * \brief A signed 16-bit integer type. + */ +#define SDL_MAX_SINT16 ((Sint16)0x7FFF) /* 32767 */ +#define SDL_MIN_SINT16 ((Sint16)(~0x7FFF)) /* -32768 */ +typedef int16_t Sint16; +/** + * \brief An unsigned 16-bit integer type. + */ +#define SDL_MAX_UINT16 ((Uint16)0xFFFF) /* 65535 */ +#define SDL_MIN_UINT16 ((Uint16)0x0000) /* 0 */ +typedef uint16_t Uint16; +/** + * \brief A signed 32-bit integer type. + */ +#define SDL_MAX_SINT32 ((Sint32)0x7FFFFFFF) /* 2147483647 */ +#define SDL_MIN_SINT32 ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */ +typedef int32_t Sint32; +/** + * \brief An unsigned 32-bit integer type. + */ +#define SDL_MAX_UINT32 ((Uint32)0xFFFFFFFFu) /* 4294967295 */ +#define SDL_MIN_UINT32 ((Uint32)0x00000000) /* 0 */ +typedef uint32_t Uint32; + +/** + * \brief A signed 64-bit integer type. + */ +#define SDL_MAX_SINT64 ((Sint64)0x7FFFFFFFFFFFFFFFll) /* 9223372036854775807 */ +#define SDL_MIN_SINT64 ((Sint64)(~0x7FFFFFFFFFFFFFFFll)) /* -9223372036854775808 */ +typedef int64_t Sint64; +/** + * \brief An unsigned 64-bit integer type. + */ +#define SDL_MAX_UINT64 ((Uint64)0xFFFFFFFFFFFFFFFFull) /* 18446744073709551615 */ +#define SDL_MIN_UINT64 ((Uint64)(0x0000000000000000ull)) /* 0 */ +typedef uint64_t Uint64; + +/* @} *//* Basic data types */ + +/** + * \name Floating-point constants + */ +/* @{ */ + +#ifdef FLT_EPSILON +#define SDL_FLT_EPSILON FLT_EPSILON +#else +#define SDL_FLT_EPSILON 1.1920928955078125e-07F /* 0x0.000002p0 */ +#endif + +/* @} *//* Floating-point constants */ + +/* Make sure we have macros for printing width-based integers. + * should define these but this is not true all platforms. + * (for example win32) */ +#ifndef SDL_PRIs64 +#ifdef PRIs64 +#define SDL_PRIs64 PRIs64 +#elif defined(__WIN32__) +#define SDL_PRIs64 "I64d" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIs64 "ld" +#else +#define SDL_PRIs64 "lld" +#endif +#endif +#ifndef SDL_PRIu64 +#ifdef PRIu64 +#define SDL_PRIu64 PRIu64 +#elif defined(__WIN32__) +#define SDL_PRIu64 "I64u" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIu64 "lu" +#else +#define SDL_PRIu64 "llu" +#endif +#endif +#ifndef SDL_PRIx64 +#ifdef PRIx64 +#define SDL_PRIx64 PRIx64 +#elif defined(__WIN32__) +#define SDL_PRIx64 "I64x" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIx64 "lx" +#else +#define SDL_PRIx64 "llx" +#endif +#endif +#ifndef SDL_PRIX64 +#ifdef PRIX64 +#define SDL_PRIX64 PRIX64 +#elif defined(__WIN32__) +#define SDL_PRIX64 "I64X" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIX64 "lX" +#else +#define SDL_PRIX64 "llX" +#endif +#endif +#ifndef SDL_PRIs32 +#ifdef PRId32 +#define SDL_PRIs32 PRId32 +#else +#define SDL_PRIs32 "d" +#endif +#endif +#ifndef SDL_PRIu32 +#ifdef PRIu32 +#define SDL_PRIu32 PRIu32 +#else +#define SDL_PRIu32 "u" +#endif +#endif +#ifndef SDL_PRIx32 +#ifdef PRIx32 +#define SDL_PRIx32 PRIx32 +#else +#define SDL_PRIx32 "x" +#endif +#endif +#ifndef SDL_PRIX32 +#ifdef PRIX32 +#define SDL_PRIX32 PRIX32 +#else +#define SDL_PRIX32 "X" +#endif +#endif + +/* Annotations to help code analysis tools */ +#ifdef SDL_DISABLE_ANALYZE_MACROS +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#else +#if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */ +#include + +#define SDL_IN_BYTECAP(x) _In_bytecount_(x) +#define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x) +#define SDL_OUT_Z_CAP(x) _Out_z_cap_(x) +#define SDL_OUT_CAP(x) _Out_cap_(x) +#define SDL_OUT_BYTECAP(x) _Out_bytecap_(x) +#define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x) + +#define SDL_PRINTF_FORMAT_STRING _Printf_format_string_ +#define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_ +#else +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#endif +#if defined(__GNUC__) +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 ))) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 ))) +#else +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#endif +#endif /* SDL_DISABLE_ANALYZE_MACROS */ + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) +#define SDL_COMPILE_TIME_ASSERT(name, x) _Static_assert(x, #x) +#elif defined(__cplusplus) && (__cplusplus >= 201103L) +#define SDL_COMPILE_TIME_ASSERT(name, x) static_assert(x, #x) +#else /* universal, but may trigger -Wunused-local-typedefs */ +#define SDL_COMPILE_TIME_ASSERT(name, x) \ + typedef int SDL_compile_time_assert_ ## name[(x) * 2 - 1] +#endif +/** \cond */ +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); +SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); +SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); +SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); +SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); +SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); +SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); +SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ +/** \endcond */ + +/* Check to make sure enums are the size of ints, for structure packing. + For both Watcom C/C++ and Borland C/C++ the compiler option that makes + enums having the size of an int must be enabled. + This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). +*/ + +/** \cond */ +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +#if !defined(__ANDROID__) && !defined(__VITA__) + /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */ +typedef enum +{ + DUMMY_ENUM_VALUE +} SDL_DUMMY_ENUM; + +SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); +#endif +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ +/** \endcond */ + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef HAVE_ALLOCA +#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) +#define SDL_stack_free(data) +#else +#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) +#define SDL_stack_free(data) SDL_free(data) +#endif + +extern DECLSPEC void *SDLCALL SDL_malloc(size_t size); +extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); +extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); +extern DECLSPEC void SDLCALL SDL_free(void *mem); + +typedef void *(SDLCALL *SDL_malloc_func)(size_t size); +typedef void *(SDLCALL *SDL_calloc_func)(size_t nmemb, size_t size); +typedef void *(SDLCALL *SDL_realloc_func)(void *mem, size_t size); +typedef void (SDLCALL *SDL_free_func)(void *mem); + +/** + * Get the current set of SDL memory functions + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC void SDLCALL SDL_GetMemoryFunctions(SDL_malloc_func *malloc_func, + SDL_calloc_func *calloc_func, + SDL_realloc_func *realloc_func, + SDL_free_func *free_func); + +/** + * Replace SDL's memory allocation functions with a custom set + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC int SDLCALL SDL_SetMemoryFunctions(SDL_malloc_func malloc_func, + SDL_calloc_func calloc_func, + SDL_realloc_func realloc_func, + SDL_free_func free_func); + +/** + * Get the number of outstanding (unfreed) allocations + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC int SDLCALL SDL_GetNumAllocations(void); + +extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); +extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); + +extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)); + +extern DECLSPEC int SDLCALL SDL_abs(int x); + +/* NOTE: these double-evaluate their arguments, so you should never have side effects in the parameters */ +#define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) +#define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) +#define SDL_clamp(x, a, b) (((x) < (a)) ? (a) : (((x) > (b)) ? (b) : (x))) + +extern DECLSPEC int SDLCALL SDL_isalpha(int x); +extern DECLSPEC int SDLCALL SDL_isalnum(int x); +extern DECLSPEC int SDLCALL SDL_isblank(int x); +extern DECLSPEC int SDLCALL SDL_iscntrl(int x); +extern DECLSPEC int SDLCALL SDL_isdigit(int x); +extern DECLSPEC int SDLCALL SDL_isxdigit(int x); +extern DECLSPEC int SDLCALL SDL_ispunct(int x); +extern DECLSPEC int SDLCALL SDL_isspace(int x); +extern DECLSPEC int SDLCALL SDL_isupper(int x); +extern DECLSPEC int SDLCALL SDL_islower(int x); +extern DECLSPEC int SDLCALL SDL_isprint(int x); +extern DECLSPEC int SDLCALL SDL_isgraph(int x); +extern DECLSPEC int SDLCALL SDL_toupper(int x); +extern DECLSPEC int SDLCALL SDL_tolower(int x); + +extern DECLSPEC Uint32 SDLCALL SDL_crc32(Uint32 crc, const void *data, size_t len); + +extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len); + +#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) +#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) +#define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x))) + +/* Note that memset() is a byte assignment and this is a 32-bit assignment, so they're not directly equivalent. */ +SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords) +{ +#ifdef __APPLE__ + memset_pattern4(dst, &val, dwords * 4); +#elif defined(__GNUC__) && defined(__i386__) + int u0, u1, u2; + __asm__ __volatile__ ( + "cld \n\t" + "rep ; stosl \n\t" + : "=&D" (u0), "=&a" (u1), "=&c" (u2) + : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, dwords)) + : "memory" + ); +#else + size_t _n = (dwords + 3) / 4; + Uint32 *_p = SDL_static_cast(Uint32 *, dst); + Uint32 _val = (val); + if (dwords == 0) { + return; + } + switch (dwords % 4) { + case 0: do { *_p++ = _val; SDL_FALLTHROUGH; + case 3: *_p++ = _val; SDL_FALLTHROUGH; + case 2: *_p++ = _val; SDL_FALLTHROUGH; + case 1: *_p++ = _val; + } while ( --_n ); + } +#endif +} + +extern DECLSPEC void *SDLCALL SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); + +extern DECLSPEC void *SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); +extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); + +extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); +extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC wchar_t *SDLCALL SDL_wcsdup(const wchar_t *wstr); +extern DECLSPEC wchar_t *SDLCALL SDL_wcsstr(const wchar_t *haystack, const wchar_t *needle); + +extern DECLSPEC int SDLCALL SDL_wcscmp(const wchar_t *str1, const wchar_t *str2); +extern DECLSPEC int SDLCALL SDL_wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen); +extern DECLSPEC int SDLCALL SDL_wcscasecmp(const wchar_t *str1, const wchar_t *str2); +extern DECLSPEC int SDLCALL SDL_wcsncasecmp(const wchar_t *str1, const wchar_t *str2, size_t len); + +extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); +extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes); +extern DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); +extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); +extern DECLSPEC char *SDLCALL SDL_strrev(char *str); +extern DECLSPEC char *SDLCALL SDL_strupr(char *str); +extern DECLSPEC char *SDLCALL SDL_strlwr(char *str); +extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c); +extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c); +extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle); +extern DECLSPEC char *SDLCALL SDL_strtokr(char *s1, const char *s2, char **saveptr); +extern DECLSPEC size_t SDLCALL SDL_utf8strlen(const char *str); + +extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix); + +extern DECLSPEC int SDLCALL SDL_atoi(const char *str); +extern DECLSPEC double SDLCALL SDL_atof(const char *str); +extern DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base); +extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base); +extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base); +extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base); +extern DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp); + +extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); +extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); +extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); +extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); + +extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) SDL_SCANF_VARARG_FUNC(2); +extern DECLSPEC int SDLCALL SDL_vsscanf(const char *text, const char *fmt, va_list ap); +extern DECLSPEC int SDLCALL SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ... ) SDL_PRINTF_VARARG_FUNC(3); +extern DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap); +extern DECLSPEC int SDLCALL SDL_asprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); +extern DECLSPEC int SDLCALL SDL_vasprintf(char **strp, const char *fmt, va_list ap); + +#ifndef HAVE_M_PI +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288 /**< pi */ +#endif +#endif + +/** + * Use this function to compute arc cosine of `x`. + * + * The definition of `y = acos(x)` is `x = cos(y)`. + * + * Domain: `-1 <= x <= 1` + * + * Range: `0 <= y <= Pi` + * + * \param x floating point value, in radians. + * \returns arc cosine of `x`. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC double SDLCALL SDL_acos(double x); +extern DECLSPEC float SDLCALL SDL_acosf(float x); +extern DECLSPEC double SDLCALL SDL_asin(double x); +extern DECLSPEC float SDLCALL SDL_asinf(float x); +extern DECLSPEC double SDLCALL SDL_atan(double x); +extern DECLSPEC float SDLCALL SDL_atanf(float x); +extern DECLSPEC double SDLCALL SDL_atan2(double y, double x); +extern DECLSPEC float SDLCALL SDL_atan2f(float y, float x); +extern DECLSPEC double SDLCALL SDL_ceil(double x); +extern DECLSPEC float SDLCALL SDL_ceilf(float x); +extern DECLSPEC double SDLCALL SDL_copysign(double x, double y); +extern DECLSPEC float SDLCALL SDL_copysignf(float x, float y); +extern DECLSPEC double SDLCALL SDL_cos(double x); +extern DECLSPEC float SDLCALL SDL_cosf(float x); +extern DECLSPEC double SDLCALL SDL_exp(double x); +extern DECLSPEC float SDLCALL SDL_expf(float x); +extern DECLSPEC double SDLCALL SDL_fabs(double x); +extern DECLSPEC float SDLCALL SDL_fabsf(float x); +extern DECLSPEC double SDLCALL SDL_floor(double x); +extern DECLSPEC float SDLCALL SDL_floorf(float x); +extern DECLSPEC double SDLCALL SDL_trunc(double x); +extern DECLSPEC float SDLCALL SDL_truncf(float x); +extern DECLSPEC double SDLCALL SDL_fmod(double x, double y); +extern DECLSPEC float SDLCALL SDL_fmodf(float x, float y); +extern DECLSPEC double SDLCALL SDL_log(double x); +extern DECLSPEC float SDLCALL SDL_logf(float x); +extern DECLSPEC double SDLCALL SDL_log10(double x); +extern DECLSPEC float SDLCALL SDL_log10f(float x); +extern DECLSPEC double SDLCALL SDL_pow(double x, double y); +extern DECLSPEC float SDLCALL SDL_powf(float x, float y); +extern DECLSPEC double SDLCALL SDL_round(double x); +extern DECLSPEC float SDLCALL SDL_roundf(float x); +extern DECLSPEC long SDLCALL SDL_lround(double x); +extern DECLSPEC long SDLCALL SDL_lroundf(float x); +extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); +extern DECLSPEC float SDLCALL SDL_scalbnf(float x, int n); +extern DECLSPEC double SDLCALL SDL_sin(double x); +extern DECLSPEC float SDLCALL SDL_sinf(float x); +extern DECLSPEC double SDLCALL SDL_sqrt(double x); +extern DECLSPEC float SDLCALL SDL_sqrtf(float x); +extern DECLSPEC double SDLCALL SDL_tan(double x); +extern DECLSPEC float SDLCALL SDL_tanf(float x); + +/* The SDL implementation of iconv() returns these error codes */ +#define SDL_ICONV_ERROR (size_t)-1 +#define SDL_ICONV_E2BIG (size_t)-2 +#define SDL_ICONV_EILSEQ (size_t)-3 +#define SDL_ICONV_EINVAL (size_t)-4 + +/* SDL_iconv_* are now always real symbols/types, not macros or inlined. */ +typedef struct _SDL_iconv_t *SDL_iconv_t; +extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, + const char *fromcode); +extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); +extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, + size_t * inbytesleft, char **outbuf, + size_t * outbytesleft); + +/** + * This function converts a string between encodings in one pass, returning a + * string that must be freed with SDL_free() or NULL on error. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, + const char *fromcode, + const char *inbuf, + size_t inbytesleft); +#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_wchar_utf8(S) SDL_iconv_string("UTF-8", "WCHAR_T", (char *)S, (SDL_wcslen(S)+1)*sizeof(wchar_t)) + +/* force builds using Clang's static analysis tools to use literal C runtime + here, since there are possibly tests that are ineffective otherwise. */ +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) + +/* The analyzer knows about strlcpy even when the system doesn't provide it */ +#ifndef HAVE_STRLCPY +size_t strlcpy(char* dst, const char* src, size_t size); +#endif + +/* The analyzer knows about strlcat even when the system doesn't provide it */ +#ifndef HAVE_STRLCAT +size_t strlcat(char* dst, const char* src, size_t size); +#endif + +#define SDL_malloc malloc +#define SDL_calloc calloc +#define SDL_realloc realloc +#define SDL_free free +#define SDL_memset memset +#define SDL_memcpy memcpy +#define SDL_memmove memmove +#define SDL_memcmp memcmp +#define SDL_strlcpy strlcpy +#define SDL_strlcat strlcat +#define SDL_strlen strlen +#define SDL_wcslen wcslen +#define SDL_wcslcpy wcslcpy +#define SDL_wcslcat wcslcat +#define SDL_strdup strdup +#define SDL_wcsdup wcsdup +#define SDL_strchr strchr +#define SDL_strrchr strrchr +#define SDL_strstr strstr +#define SDL_wcsstr wcsstr +#define SDL_strtokr strtok_r +#define SDL_strcmp strcmp +#define SDL_wcscmp wcscmp +#define SDL_strncmp strncmp +#define SDL_wcsncmp wcsncmp +#define SDL_strcasecmp strcasecmp +#define SDL_strncasecmp strncasecmp +#define SDL_sscanf sscanf +#define SDL_vsscanf vsscanf +#define SDL_snprintf snprintf +#define SDL_vsnprintf vsnprintf +#endif + +SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_BYTECAP(dwords*4) const void *src, size_t dwords) +{ + return SDL_memcpy(dst, src, dwords * 4); +} + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_stdinc_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_surface.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_surface.h new file mode 100644 index 00000000000..318b541f2b9 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_surface.h @@ -0,0 +1,995 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_surface.h + * + * Header file for ::SDL_Surface definition and management functions. + */ + +#ifndef SDL_surface_h_ +#define SDL_surface_h_ + +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name Surface flags + * + * These are the currently supported flags for the ::SDL_Surface. + * + * \internal + * Used internally (read-only). + */ +/* @{ */ +#define SDL_SWSURFACE 0 /**< Just here for compatibility */ +#define SDL_PREALLOC 0x00000001 /**< Surface uses preallocated memory */ +#define SDL_RLEACCEL 0x00000002 /**< Surface is RLE encoded */ +#define SDL_DONTFREE 0x00000004 /**< Surface is referenced internally */ +#define SDL_SIMD_ALIGNED 0x00000008 /**< Surface uses aligned memory */ +/* @} *//* Surface flags */ + +/** + * Evaluates to true if the surface needs to be locked before access. + */ +#define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0) + +/** + * \brief A collection of pixels used in software blitting. + * + * \note This structure should be treated as read-only, except for \c pixels, + * which, if not NULL, contains the raw pixel data for the surface. + */ +typedef struct SDL_Surface +{ + Uint32 flags; /**< Read-only */ + SDL_PixelFormat *format; /**< Read-only */ + int w, h; /**< Read-only */ + int pitch; /**< Read-only */ + void *pixels; /**< Read-write */ + + /** Application data associated with the surface */ + void *userdata; /**< Read-write */ + + /** information needed for surfaces requiring locks */ + int locked; /**< Read-only */ + + /** list of BlitMap that hold a reference to this surface */ + void *list_blitmap; /**< Private */ + + /** clipping information */ + SDL_Rect clip_rect; /**< Read-only */ + + /** info for fast blit mapping to other surfaces */ + struct SDL_BlitMap *map; /**< Private */ + + /** Reference count -- used when freeing surface */ + int refcount; /**< Read-mostly */ +} SDL_Surface; + +/** + * \brief The type of function used for surface blitting functions. + */ +typedef int (SDLCALL *SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, + struct SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * \brief The formula used for converting between YUV and RGB + */ +typedef enum +{ + SDL_YUV_CONVERSION_JPEG, /**< Full range JPEG */ + SDL_YUV_CONVERSION_BT601, /**< BT.601 (the default) */ + SDL_YUV_CONVERSION_BT709, /**< BT.709 */ + SDL_YUV_CONVERSION_AUTOMATIC /**< BT.601 for SD content, BT.709 for HD content */ +} SDL_YUV_CONVERSION_MODE; + +/** + * Allocate a new RGB surface. + * + * If `depth` is 4 or 8 bits, an empty palette is allocated for the surface. + * If `depth` is greater than 8 bits, the pixel format is set using the + * [RGBA]mask parameters. + * + * The [RGBA]mask parameters are the bitmasks used to extract that color from + * a pixel. For instance, `Rmask` being 0xFF000000 means the red data is + * stored in the most significant byte. Using zeros for the RGB masks sets a + * default value, based on the depth. For example: + * + * ```c++ + * SDL_CreateRGBSurface(0,w,h,32,0,0,0,0); + * ``` + * + * However, using zero for the Amask results in an Amask of 0. + * + * By default surfaces with an alpha mask are set up for blending as with: + * + * ```c++ + * SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND) + * ``` + * + * You can change this by calling SDL_SetSurfaceBlendMode() and selecting a + * different `blendMode`. + * + * \param flags the flags are unused and should be set to 0 + * \param width the width of the surface + * \param height the height of the surface + * \param depth the depth of the surface in bits + * \param Rmask the red mask for the pixels + * \param Gmask the green mask for the pixels + * \param Bmask the blue mask for the pixels + * \param Amask the alpha mask for the pixels + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface + (Uint32 flags, int width, int height, int depth, + Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); + + +/* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */ + +/** + * Allocate a new RGB surface with a specific pixel format. + * + * This function operates mostly like SDL_CreateRGBSurface(), except instead + * of providing pixel color masks, you provide it with a predefined format + * from SDL_PixelFormatEnum. + * + * \param flags the flags are unused and should be set to 0 + * \param width the width of the surface + * \param height the height of the surface + * \param depth the depth of the surface in bits + * \param format the SDL_PixelFormatEnum for the new surface's pixel format. + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_CreateRGBSurface + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormat + (Uint32 flags, int width, int height, int depth, Uint32 format); + +/** + * Allocate a new RGB surface with existing pixel data. + * + * This function operates mostly like SDL_CreateRGBSurface(), except it does + * not allocate memory for the pixel data, instead the caller provides an + * existing buffer of data for the surface to use. + * + * No copy is made of the pixel data. Pixel data is not managed automatically; + * you must free the surface before you free the pixel data. + * + * \param pixels a pointer to existing pixel data + * \param width the width of the surface + * \param height the height of the surface + * \param depth the depth of the surface in bits + * \param pitch the pitch of the surface in bytes + * \param Rmask the red mask for the pixels + * \param Gmask the green mask for the pixels + * \param Bmask the blue mask for the pixels + * \param Amask the alpha mask for the pixels + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRGBSurface + * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, + int width, + int height, + int depth, + int pitch, + Uint32 Rmask, + Uint32 Gmask, + Uint32 Bmask, + Uint32 Amask); + +/* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */ + +/** + * Allocate a new RGB surface with with a specific pixel format and existing + * pixel data. + * + * This function operates mostly like SDL_CreateRGBSurfaceFrom(), except + * instead of providing pixel color masks, you provide it with a predefined + * format from SDL_PixelFormatEnum. + * + * No copy is made of the pixel data. Pixel data is not managed automatically; + * you must free the surface before you free the pixel data. + * + * \param pixels a pointer to existing pixel data + * \param width the width of the surface + * \param height the height of the surface + * \param depth the depth of the surface in bits + * \param pitch the pitch of the surface in bytes + * \param format the SDL_PixelFormatEnum for the new surface's pixel format. + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormatFrom + (void *pixels, int width, int height, int depth, int pitch, Uint32 format); + +/** + * Free an RGB surface. + * + * It is safe to pass NULL to this function. + * + * \param surface the SDL_Surface to free. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRGBSurface + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_LoadBMP + * \sa SDL_LoadBMP_RW + */ +extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface); + +/** + * Set the palette used by a surface. + * + * A single palette can be shared with many surfaces. + * + * \param surface the SDL_Surface structure to update + * \param palette the SDL_Palette structure to use + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface * surface, + SDL_Palette * palette); + +/** + * Set up a surface for directly accessing the pixels. + * + * Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to + * and read from `surface->pixels`, using the pixel format stored in + * `surface->format`. Once you are done accessing the surface, you should use + * SDL_UnlockSurface() to release it. + * + * Not all surfaces require locking. If `SDL_MUSTLOCK(surface)` evaluates to + * 0, then you can read and write to the surface at any time, and the pixel + * format of the surface will not change. + * + * \param surface the SDL_Surface structure to be locked + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MUSTLOCK + * \sa SDL_UnlockSurface + */ +extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface * surface); + +/** + * Release a surface after directly accessing the pixels. + * + * \param surface the SDL_Surface structure to be unlocked + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockSurface + */ +extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface * surface); + +/** + * Load a BMP image from a seekable SDL data stream. + * + * The new surface should be freed with SDL_FreeSurface(). Not doing so will + * result in a memory leak. + * + * src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. + * Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap + * from a file, convert it to an SDL_Surface and then close the file. + * + * \param src the data stream for the surface + * \param freesrc non-zero to close the stream after being read + * \returns a pointer to a new SDL_Surface structure or NULL if there was an + * error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeSurface + * \sa SDL_RWFromFile + * \sa SDL_LoadBMP + * \sa SDL_SaveBMP_RW + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP_RW(SDL_RWops * src, + int freesrc); + +/** + * Load a surface from a file. + * + * Convenience macro. + */ +#define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) + +/** + * Save a surface to a seekable SDL data stream in BMP format. + * + * Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the + * BMP directly. Other RGB formats with 8-bit or higher get converted to a + * 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit + * surface before they are saved. YUV and paletted 1-bit and 4-bit formats are + * not supported. + * + * \param surface the SDL_Surface structure containing the image to be saved + * \param dst a data stream to save to + * \param freedst non-zero to close the stream after being written + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadBMP_RW + * \sa SDL_SaveBMP + */ +extern DECLSPEC int SDLCALL SDL_SaveBMP_RW + (SDL_Surface * surface, SDL_RWops * dst, int freedst); + +/** + * Save a surface to a file. + * + * Convenience macro. + */ +#define SDL_SaveBMP(surface, file) \ + SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) + +/** + * Set the RLE acceleration hint for a surface. + * + * If RLE is enabled, color key and alpha blending blits are much faster, but + * the surface must be locked before directly accessing the pixels. + * + * \param surface the SDL_Surface structure to optimize + * \param flag 0 to disable, non-zero to enable RLE acceleration + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_LockSurface + * \sa SDL_UnlockSurface + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface * surface, + int flag); + +/** + * Returns whether the surface is RLE enabled + * + * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + * + * \param surface the SDL_Surface structure to query + * \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_SetSurfaceRLE + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSurfaceRLE(SDL_Surface * surface); + +/** + * Set the color key (transparent pixel) in a surface. + * + * The color key defines a pixel value that will be treated as transparent in + * a blit. For example, one can use this to specify that cyan pixels should be + * considered transparent, and therefore not rendered. + * + * It is a pixel of the format used by the surface, as generated by + * SDL_MapRGB(). + * + * RLE acceleration can substantially speed up blitting of images with large + * horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. + * + * \param surface the SDL_Surface structure to update + * \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key + * \param key the transparent pixel + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_GetColorKey + */ +extern DECLSPEC int SDLCALL SDL_SetColorKey(SDL_Surface * surface, + int flag, Uint32 key); + +/** + * Returns whether the surface has a color key + * + * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + * + * \param surface the SDL_Surface structure to query + * \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_SetColorKey + * \sa SDL_GetColorKey + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasColorKey(SDL_Surface * surface); + +/** + * Get the color key (transparent pixel) for a surface. + * + * The color key is a pixel of the format used by the surface, as generated by + * SDL_MapRGB(). + * + * If the surface doesn't have color key enabled this function returns -1. + * + * \param surface the SDL_Surface structure to query + * \param key a pointer filled in with the transparent pixel + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_SetColorKey + */ +extern DECLSPEC int SDLCALL SDL_GetColorKey(SDL_Surface * surface, + Uint32 * key); + +/** + * Set an additional color value multiplied into blit operations. + * + * When this surface is blitted, during the blit operation each source color + * channel is modulated by the appropriate color value according to the + * following formula: + * + * `srcC = srcC * (color / 255)` + * + * \param surface the SDL_Surface structure to update + * \param r the red color value multiplied into blit operations + * \param g the green color value multiplied into blit operations + * \param b the blue color value multiplied into blit operations + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceColorMod + * \sa SDL_SetSurfaceAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceColorMod(SDL_Surface * surface, + Uint8 r, Uint8 g, Uint8 b); + + +/** + * Get the additional color value multiplied into blit operations. + * + * \param surface the SDL_Surface structure to query + * \param r a pointer filled in with the current red color value + * \param g a pointer filled in with the current green color value + * \param b a pointer filled in with the current blue color value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceAlphaMod + * \sa SDL_SetSurfaceColorMod + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceColorMod(SDL_Surface * surface, + Uint8 * r, Uint8 * g, + Uint8 * b); + +/** + * Set an additional alpha value used in blit operations. + * + * When this surface is blitted, during the blit operation the source alpha + * value is modulated by this alpha value according to the following formula: + * + * `srcA = srcA * (alpha / 255)` + * + * \param surface the SDL_Surface structure to update + * \param alpha the alpha value multiplied into blit operations + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceAlphaMod + * \sa SDL_SetSurfaceColorMod + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceAlphaMod(SDL_Surface * surface, + Uint8 alpha); + +/** + * Get the additional alpha value used in blit operations. + * + * \param surface the SDL_Surface structure to query + * \param alpha a pointer filled in with the current alpha value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceColorMod + * \sa SDL_SetSurfaceAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceAlphaMod(SDL_Surface * surface, + Uint8 * alpha); + +/** + * Set the blend mode used for blit operations. + * + * To copy a surface to another surface (or texture) without blending with the + * existing data, the blendmode of the SOURCE surface should be set to + * `SDL_BLENDMODE_NONE`. + * + * \param surface the SDL_Surface structure to update + * \param blendMode the SDL_BlendMode to use for blit blending + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceBlendMode + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface * surface, + SDL_BlendMode blendMode); + +/** + * Get the blend mode used for blit operations. + * + * \param surface the SDL_Surface structure to query + * \param blendMode a pointer filled in with the current SDL_BlendMode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetSurfaceBlendMode + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface * surface, + SDL_BlendMode *blendMode); + +/** + * Set the clipping rectangle for a surface. + * + * When `surface` is the destination of a blit, only the area within the clip + * rectangle is drawn into. + * + * Note that blits are automatically clipped to the edges of the source and + * destination surfaces. + * + * \param surface the SDL_Surface structure to be clipped + * \param rect the SDL_Rect structure representing the clipping rectangle, or + * NULL to disable clipping + * \returns SDL_TRUE if the rectangle intersects the surface, otherwise + * SDL_FALSE and blits will be completely clipped. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_GetClipRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface * surface, + const SDL_Rect * rect); + +/** + * Get the clipping rectangle for a surface. + * + * When `surface` is the destination of a blit, only the area within the clip + * rectangle is drawn into. + * + * \param surface the SDL_Surface structure representing the surface to be + * clipped + * \param rect an SDL_Rect structure filled in with the clipping rectangle for + * the surface + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_SetClipRect + */ +extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface, + SDL_Rect * rect); + +/* + * Creates a new surface identical to the existing surface. + * + * The returned surface should be freed with SDL_FreeSurface(). + * + * \param surface the surface to duplicate. + * \returns a copy of the surface, or NULL on failure; call SDL_GetError() for + * more information. + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_DuplicateSurface(SDL_Surface * surface); + +/** + * Copy an existing surface to a new surface of the specified format. + * + * This function is used to optimize images for faster *repeat* blitting. This + * is accomplished by converting the original and storing the result as a new + * surface. The new, optimized surface can then be used as the source for + * future blits, making them faster. + * + * \param src the existing SDL_Surface structure to convert + * \param fmt the SDL_PixelFormat structure that the new surface is optimized + * for + * \param flags the flags are unused and should be set to 0; this is a + * leftover from SDL 1.2's API + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocFormat + * \sa SDL_ConvertSurfaceFormat + * \sa SDL_CreateRGBSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface + (SDL_Surface * src, const SDL_PixelFormat * fmt, Uint32 flags); + +/** + * Copy an existing surface to a new surface of the specified format enum. + * + * This function operates just like SDL_ConvertSurface(), but accepts an + * SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such, + * it might be easier to call but it doesn't have access to palette + * information for the destination surface, in case that would be important. + * + * \param src the existing SDL_Surface structure to convert + * \param pixel_format the SDL_PixelFormatEnum that the new surface is + * optimized for + * \param flags the flags are unused and should be set to 0; this is a + * leftover from SDL 1.2's API + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocFormat + * \sa SDL_ConvertSurface + * \sa SDL_CreateRGBSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat + (SDL_Surface * src, Uint32 pixel_format, Uint32 flags); + +/** + * Copy a block of pixels of one format to another format. + * + * \param width the width of the block to copy, in pixels + * \param height the height of the block to copy, in pixels + * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + * \param src a pointer to the source pixels + * \param src_pitch the pitch of the source pixels, in bytes + * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + * \param dst a pointer to be filled in with new pixel data + * \param dst_pitch the pitch of the destination pixels, in bytes + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, + Uint32 src_format, + const void * src, int src_pitch, + Uint32 dst_format, + void * dst, int dst_pitch); + +/** + * Premultiply the alpha on a block of pixels. + * + * This is safe to use with src == dst, but not for other overlapping areas. + * + * This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. + * + * \param width the width of the block to convert, in pixels + * \param height the height of the block to convert, in pixels + * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + * \param src a pointer to the source pixels + * \param src_pitch the pitch of the source pixels, in bytes + * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + * \param dst a pointer to be filled in with premultiplied pixel data + * \param dst_pitch the pitch of the destination pixels, in bytes + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_PremultiplyAlpha(int width, int height, + Uint32 src_format, + const void * src, int src_pitch, + Uint32 dst_format, + void * dst, int dst_pitch); + +/** + * Perform a fast fill of a rectangle with a specific color. + * + * `color` should be a pixel of the format used by the surface, and can be + * generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + * alpha component then the destination is simply filled with that alpha + * information, no blending takes place. + * + * If there is a clip rectangle set on the destination (set via + * SDL_SetClipRect()), then this function will fill based on the intersection + * of the clip rectangle and `rect`. + * + * \param dst the SDL_Surface structure that is the drawing target + * \param rect the SDL_Rect structure representing the rectangle to fill, or + * NULL to fill the entire surface + * \param color the color to fill with + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FillRects + */ +extern DECLSPEC int SDLCALL SDL_FillRect + (SDL_Surface * dst, const SDL_Rect * rect, Uint32 color); + +/** + * Perform a fast fill of a set of rectangles with a specific color. + * + * `color` should be a pixel of the format used by the surface, and can be + * generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + * alpha component then the destination is simply filled with that alpha + * information, no blending takes place. + * + * If there is a clip rectangle set on the destination (set via + * SDL_SetClipRect()), then this function will fill based on the intersection + * of the clip rectangle and `rect`. + * + * \param dst the SDL_Surface structure that is the drawing target + * \param rects an array of SDL_Rects representing the rectangles to fill. + * \param count the number of rectangles in the array + * \param color the color to fill with + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FillRect + */ +extern DECLSPEC int SDLCALL SDL_FillRects + (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color); + +/* !!! FIXME: merge this documentation with the wiki */ +/** + * Performs a fast blit from the source surface to the destination surface. + * + * This assumes that the source and destination rectangles are + * the same size. If either \c srcrect or \c dstrect are NULL, the entire + * surface (\c src or \c dst) is copied. The final blit rectangles are saved + * in \c srcrect and \c dstrect after all clipping is performed. + * + * \returns 0 if the blit is successful, otherwise it returns -1. + * + * The blit function should not be called on a locked surface. + * + * The blit semantics for surfaces with and without blending and colorkey + * are defined as follows: + * \verbatim + RGBA->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB, set destination alpha to source per-surface alpha value. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + + RGBA->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy all of RGBA to the destination. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + \endverbatim + * + * You should call SDL_BlitSurface() unless you know exactly how SDL + * blitting works internally and how to use the other blit functions. + */ +#define SDL_BlitSurface SDL_UpperBlit + +/** + * Perform a fast blit from the source surface to the destination surface. + * + * SDL_UpperBlit() has been replaced by SDL_BlitSurface(), which is merely a + * macro for this function with a less confusing name. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + */ +extern DECLSPEC int SDLCALL SDL_UpperBlit + (SDL_Surface * src, const SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * Perform low-level surface blitting only. + * + * This is a semi-private blit function and it performs low-level surface + * blitting, assuming the input rectangles have already been clipped. + * + * Unless you know what you're doing, you should be using SDL_BlitSurface() + * instead. + * + * \param src the SDL_Surface structure to be copied from + * \param srcrect the SDL_Rect structure representing the rectangle to be + * copied, or NULL to copy the entire surface + * \param dst the SDL_Surface structure that is the blit target + * \param dstrect the SDL_Rect structure representing the rectangle that is + * copied into + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + */ +extern DECLSPEC int SDLCALL SDL_LowerBlit + (SDL_Surface * src, SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + + +/** + * Perform a fast, low quality, stretch blit between two surfaces of the same + * format. + * + * Please use SDL_BlitScaled() instead. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface * src, + const SDL_Rect * srcrect, + SDL_Surface * dst, + const SDL_Rect * dstrect); + +/** + * Perform bilinear scaling between two surfaces of the same format, 32BPP. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_SoftStretchLinear(SDL_Surface * src, + const SDL_Rect * srcrect, + SDL_Surface * dst, + const SDL_Rect * dstrect); + + +#define SDL_BlitScaled SDL_UpperBlitScaled + +/** + * Perform a scaled surface copy to a destination surface. + * + * SDL_UpperBlitScaled() has been replaced by SDL_BlitScaled(), which is + * merely a macro for this function with a less confusing name. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitScaled + */ +extern DECLSPEC int SDLCALL SDL_UpperBlitScaled + (SDL_Surface * src, const SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * Perform low-level surface scaled blitting only. + * + * This is a semi-private function and it performs low-level surface blitting, + * assuming the input rectangles have already been clipped. + * + * \param src the SDL_Surface structure to be copied from + * \param srcrect the SDL_Rect structure representing the rectangle to be + * copied + * \param dst the SDL_Surface structure that is the blit target + * \param dstrect the SDL_Rect structure representing the rectangle that is + * copied into + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitScaled + */ +extern DECLSPEC int SDLCALL SDL_LowerBlitScaled + (SDL_Surface * src, SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * Set the YUV conversion mode + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC void SDLCALL SDL_SetYUVConversionMode(SDL_YUV_CONVERSION_MODE mode); + +/** + * Get the YUV conversion mode + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_YUV_CONVERSION_MODE SDLCALL SDL_GetYUVConversionMode(void); + +/** + * Get the YUV conversion mode, returning the correct mode for the resolution + * when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_YUV_CONVERSION_MODE SDLCALL SDL_GetYUVConversionModeForResolution(int width, int height); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_surface_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_system.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_system.h new file mode 100644 index 00000000000..7324329ac1d --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_system.h @@ -0,0 +1,575 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_system.h + * + * Include file for platform specific SDL API functions + */ + +#ifndef SDL_system_h_ +#define SDL_system_h_ + +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* Platform specific functions for Windows */ +#ifdef __WIN32__ + +typedef void (SDLCALL * SDL_WindowsMessageHook)(void *userdata, void *hWnd, unsigned int message, Uint64 wParam, Sint64 lParam); + +/** + * Set a callback for every Windows message, run before TranslateMessage(). + * + * \param callback The SDL_WindowsMessageHook function to call. + * \param userdata a pointer to pass to every iteration of `callback` + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC void SDLCALL SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata); + +/** + * Get the D3D9 adapter index that matches the specified display index. + * + * The returned adapter index can be passed to `IDirect3D9::CreateDevice` and + * controls on which monitor a full screen application will appear. + * + * \param displayIndex the display index for which to get the D3D9 adapter + * index + * \returns the D3D9 adapter index on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.1. + */ +extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex( int displayIndex ); + +typedef struct IDirect3DDevice9 IDirect3DDevice9; + +/** + * Get the D3D9 device associated with a renderer. + * + * Once you are done using the device, you should release it to avoid a + * resource leak. + * + * \param renderer the renderer from which to get the associated D3D device + * \returns the D3D9 device associated with given renderer or NULL if it is + * not a D3D9 renderer; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.1. + */ +extern DECLSPEC IDirect3DDevice9* SDLCALL SDL_RenderGetD3D9Device(SDL_Renderer * renderer); + +typedef struct ID3D11Device ID3D11Device; + +/** + * Get the D3D11 device associated with a renderer. + * + * Once you are done using the device, you should release it to avoid a + * resource leak. + * + * \param renderer the renderer from which to get the associated D3D11 device + * \returns the D3D11 device associated with given renderer or NULL if it is + * not a D3D11 renderer; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC ID3D11Device* SDLCALL SDL_RenderGetD3D11Device(SDL_Renderer * renderer); + +/** + * Get the DXGI Adapter and Output indices for the specified display index. + * + * The DXGI Adapter and Output indices can be passed to `EnumAdapters` and + * `EnumOutputs` respectively to get the objects required to create a DX10 or + * DX11 device and swap chain. + * + * Before SDL 2.0.4 this function did not return a value. Since SDL 2.0.4 it + * returns an SDL_bool. + * + * \param displayIndex the display index for which to get both indices + * \param adapterIndex a pointer to be filled in with the adapter index + * \param outputIndex a pointer to be filled in with the output index + * \returns SDL_TRUE on success or SDL_FALSE on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex ); + +#endif /* __WIN32__ */ + + +/* Platform specific functions for Linux */ +#ifdef __LINUX__ + +/** + * Sets the UNIX nice value for a thread. + * + * This uses setpriority() if possible, and RealtimeKit if available. + * + * \param threadID the Unix thread ID to change priority of. + * \param priority The new, Unix-specific, priority value. + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriority(Sint64 threadID, int priority); + +/** + * Sets the priority (not nice level) and scheduling policy for a thread. + * + * This uses setpriority() if possible, and RealtimeKit if available. + * + * \param threadID The Unix thread ID to change priority of. + * \param sdlPriority The new SDL_ThreadPriority value. + * \param schedPolicy The new scheduling policy (SCHED_FIFO, SCHED_RR, + * SCHED_OTHER, etc...) + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedPolicy); + +#endif /* __LINUX__ */ + +/* Platform specific functions for iOS */ +#ifdef __IPHONEOS__ + +#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam) + +/** + * Use this function to set the animation callback on Apple iOS. + * + * The function prototype for `callback` is: + * + * ```c + * void callback(void* callbackParam); + * ``` + * + * Where its parameter, `callbackParam`, is what was passed as `callbackParam` + * to SDL_iPhoneSetAnimationCallback(). + * + * This function is only available on Apple iOS. + * + * For more information see: + * [README-ios.md](https://hg.libsdl.org/SDL/file/default/docs/README-ios.md) + * + * This functions is also accessible using the macro + * SDL_iOSSetAnimationCallback() since SDL 2.0.4. + * + * \param window the window for which the animation callback should be set + * \param interval the number of frames after which **callback** will be + * called + * \param callback the function to call for every frame. + * \param callbackParam a pointer that is passed to `callback`. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_iPhoneSetEventPump + */ +extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); + +#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) + +/** + * Use this function to enable or disable the SDL event pump on Apple iOS. + * + * This function is only available on Apple iOS. + * + * This functions is also accessible using the macro SDL_iOSSetEventPump() + * since SDL 2.0.4. + * + * \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_iPhoneSetAnimationCallback + */ +extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); + +#endif /* __IPHONEOS__ */ + + +/* Platform specific functions for Android */ +#ifdef __ANDROID__ + +/** + * Get the Android Java Native Interface Environment of the current thread. + * + * This is the JNIEnv one needs to access the Java virtual machine from native + * code, and is needed for many Android APIs to be usable from C. + * + * The prototype of the function in SDL's code actually declare a void* return + * type, even if the implementation returns a pointer to a JNIEnv. The + * rationale being that the SDL headers can avoid including jni.h. + * + * \returns a pointer to Java native interface object (JNIEnv) to which the + * current thread is attached, or 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetActivity + */ +extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(void); + +/** + * Retrieve the Java instance of the Android activity class. + * + * The prototype of the function in SDL's code actually declares a void* + * return type, even if the implementation returns a jobject. The rationale + * being that the SDL headers can avoid including jni.h. + * + * The jobject returned by the function is a local reference and must be + * released by the caller. See the PushLocalFrame() and PopLocalFrame() or + * DeleteLocalRef() functions of the Java native interface: + * + * https://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html + * + * \returns the jobject representing the instance of the Activity class of the + * Android application, or NULL on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetJNIEnv + */ +extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(void); + +/** + * Query Android API level of the current device. + * + * - API level 31: Android 12 + * - API level 30: Android 11 + * - API level 29: Android 10 + * - API level 28: Android 9 + * - API level 27: Android 8.1 + * - API level 26: Android 8.0 + * - API level 25: Android 7.1 + * - API level 24: Android 7.0 + * - API level 23: Android 6.0 + * - API level 22: Android 5.1 + * - API level 21: Android 5.0 + * - API level 20: Android 4.4W + * - API level 19: Android 4.4 + * - API level 18: Android 4.3 + * - API level 17: Android 4.2 + * - API level 16: Android 4.1 + * - API level 15: Android 4.0.3 + * - API level 14: Android 4.0 + * - API level 13: Android 3.2 + * - API level 12: Android 3.1 + * - API level 11: Android 3.0 + * - API level 10: Android 2.3.3 + * + * \returns the Android API level. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC int SDLCALL SDL_GetAndroidSDKVersion(void); + +/** + * Query if the application is running on Android TV. + * + * \returns SDL_TRUE if this is Android TV, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsAndroidTV(void); + +/** + * Query if the application is running on a Chromebook. + * + * \returns SDL_TRUE if this is a Chromebook, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsChromebook(void); + +/** + * Query if the application is running on a Samsung DeX docking station. + * + * \returns SDL_TRUE if this is a DeX docking station, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsDeXMode(void); + +/** + * Trigger the Android system back button behavior. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC void SDLCALL SDL_AndroidBackButton(void); + +/** + See the official Android developer guide for more information: + http://developer.android.com/guide/topics/data/data-storage.html +*/ +#define SDL_ANDROID_EXTERNAL_STORAGE_READ 0x01 +#define SDL_ANDROID_EXTERNAL_STORAGE_WRITE 0x02 + +/** + * Get the path used for internal storage for this application. + * + * This path is unique to your application and cannot be written to by other + * applications. + * + * Your internal storage path is typically: + * `/data/data/your.app.package/files`. + * + * \returns the path used for internal storage or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetExternalStorageState + */ +extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(void); + +/** + * Get the current state of external storage. + * + * The current state of external storage, a bitmask of these values: + * `SDL_ANDROID_EXTERNAL_STORAGE_READ`, `SDL_ANDROID_EXTERNAL_STORAGE_WRITE`. + * + * If external storage is currently unavailable, this will return 0. + * + * \returns the current state of external storage on success or 0 on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetExternalStoragePath + */ +extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(void); + +/** + * Get the path used for external storage for this application. + * + * This path is unique to your application, but is public and can be written + * to by other applications. + * + * Your external storage path is typically: + * `/storage/sdcard0/Android/data/your.app.package/files`. + * + * \returns the path used for external storage for this application on success + * or NULL on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetExternalStorageState + */ +extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(void); + +/** + * Request permissions at runtime. + * + * This blocks the calling thread until the permission is granted or denied. + * + * \param permission The permission to request. + * \returns SDL_TRUE if the permission was granted, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AndroidRequestPermission(const char *permission); + +/** + * Shows an Android toast notification. + * + * Toasts are a sort of lightweight notification that are unique to Android. + * + * https://developer.android.com/guide/topics/ui/notifiers/toasts + * + * Shows toast in UI thread. + * + * For the `gravity` parameter, choose a value from here, or -1 if you don't + * have a preference: + * + * https://developer.android.com/reference/android/view/Gravity + * + * \param message text message to be shown + * \param duration 0=short, 1=long + * \param gravity where the notification should appear on the screen. + * \param xoffset set this parameter only when gravity >=0 + * \param yoffset set this parameter only when gravity >=0 + * \returns 0 if success, -1 if any error occurs. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_AndroidShowToast(const char* message, int duration, int gravity, int xoffset, int yoffset); + +/** + * Send a user command to SDLActivity. + * + * Override "boolean onUnhandledMessage(Message msg)" to handle the message. + * + * \param command user command that must be greater or equal to 0x8000 + * \param param user parameter + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC int SDLCALL SDL_AndroidSendMessage(Uint32 command, int param); + +#endif /* __ANDROID__ */ + +/* Platform specific functions for WinRT */ +#ifdef __WINRT__ + +/** + * \brief WinRT / Windows Phone path types + */ +typedef enum +{ + /** \brief The installed app's root directory. + Files here are likely to be read-only. */ + SDL_WINRT_PATH_INSTALLED_LOCATION, + + /** \brief The app's local data store. Files may be written here */ + SDL_WINRT_PATH_LOCAL_FOLDER, + + /** \brief The app's roaming data store. Unsupported on Windows Phone. + Files written here may be copied to other machines via a network + connection. + */ + SDL_WINRT_PATH_ROAMING_FOLDER, + + /** \brief The app's temporary data store. Unsupported on Windows Phone. + Files written here may be deleted at any time. */ + SDL_WINRT_PATH_TEMP_FOLDER +} SDL_WinRT_Path; + + +/** + * \brief WinRT Device Family + */ +typedef enum +{ + /** \brief Unknown family */ + SDL_WINRT_DEVICEFAMILY_UNKNOWN, + + /** \brief Desktop family*/ + SDL_WINRT_DEVICEFAMILY_DESKTOP, + + /** \brief Mobile family (for example smartphone) */ + SDL_WINRT_DEVICEFAMILY_MOBILE, + + /** \brief XBox family */ + SDL_WINRT_DEVICEFAMILY_XBOX, +} SDL_WinRT_DeviceFamily; + + +/** + * Retrieve a WinRT defined path on the local file system. + * + * Not all paths are available on all versions of Windows. This is especially + * true on Windows Phone. Check the documentation for the given SDL_WinRT_Path + * for more information on which path types are supported where. + * + * Documentation on most app-specific path types on WinRT can be found on + * MSDN, at the URL: + * + * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx + * + * \param pathType the type of path to retrieve, one of SDL_WinRT_Path + * \returns a UCS-2 string (16-bit, wide-char) containing the path, or NULL if + * the path is not available for any reason; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.3. + * + * \sa SDL_WinRTGetFSPathUTF8 + */ +extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType); + +/** + * Retrieve a WinRT defined path on the local file system. + * + * Not all paths are available on all versions of Windows. This is especially + * true on Windows Phone. Check the documentation for the given SDL_WinRT_Path + * for more information on which path types are supported where. + * + * Documentation on most app-specific path types on WinRT can be found on + * MSDN, at the URL: + * + * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx + * + * \param pathType the type of path to retrieve, one of SDL_WinRT_Path + * \returns a UTF-8 string (8-bit, multi-byte) containing the path, or NULL if + * the path is not available for any reason; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.3. + * + * \sa SDL_WinRTGetFSPathUNICODE + */ +extern DECLSPEC const char * SDLCALL SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType); + +/** + * Detects the device family of WinRT plattform at runtime. + * + * \returns a value from the SDL_WinRT_DeviceFamily enum. + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_WinRT_DeviceFamily SDLCALL SDL_WinRTGetDeviceFamily(); + +#endif /* __WINRT__ */ + +/** + * Query if the current device is a tablet. + * + * If SDL can't determine this, it will return SDL_FALSE. + * + * \returns SDL_TRUE if the device is a tablet, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTablet(void); + +/* Functions used by iOS application delegates to notify SDL about state changes */ +extern DECLSPEC void SDLCALL SDL_OnApplicationWillTerminate(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationDidReceiveMemoryWarning(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationWillResignActive(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationDidEnterBackground(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationWillEnterForeground(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationDidBecomeActive(void); +#ifdef __IPHONEOS__ +extern DECLSPEC void SDLCALL SDL_OnApplicationDidChangeStatusBarOrientation(void); +#endif + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_system_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_syswm.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_syswm.h new file mode 100644 index 00000000000..b55544efe88 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_syswm.h @@ -0,0 +1,386 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_syswm.h + * + * Include file for SDL custom system window manager hooks. + */ + +#ifndef SDL_syswm_h_ +#define SDL_syswm_h_ + +#include +#include +#include +#include + +/** + * \brief SDL_syswm.h + * + * Your application has access to a special type of event ::SDL_SYSWMEVENT, + * which contains window-manager specific information and arrives whenever + * an unhandled window event occurs. This event is ignored by default, but + * you can enable it with SDL_EventState(). + */ +struct SDL_SysWMinfo; + +#if !defined(SDL_PROTOTYPES_ONLY) + +#if defined(SDL_VIDEO_DRIVER_WINDOWS) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX +#endif +#include +#endif + +#if defined(SDL_VIDEO_DRIVER_WINRT) +#include +#endif + +/* This is the structure for custom window manager events */ +#if defined(SDL_VIDEO_DRIVER_X11) +#if defined(__APPLE__) && defined(__MACH__) +/* conflicts with Quickdraw.h */ +#define Cursor X11Cursor +#endif + +#include +#include + +#if defined(__APPLE__) && defined(__MACH__) +/* matches the re-define above */ +#undef Cursor +#endif + +#endif /* defined(SDL_VIDEO_DRIVER_X11) */ + +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) +#include +#endif + +#if defined(SDL_VIDEO_DRIVER_COCOA) +#ifdef __OBJC__ +@class NSWindow; +#else +typedef struct _NSWindow NSWindow; +#endif +#endif + +#if defined(SDL_VIDEO_DRIVER_UIKIT) +#ifdef __OBJC__ +#include +#else +typedef struct _UIWindow UIWindow; +typedef struct _UIViewController UIViewController; +#endif +typedef Uint32 GLuint; +#endif + +#if defined(SDL_VIDEO_VULKAN) || defined(SDL_VIDEO_METAL) +#define SDL_METALVIEW_TAG 255 +#endif + +#if defined(SDL_VIDEO_DRIVER_ANDROID) +typedef struct ANativeWindow ANativeWindow; +typedef void *EGLSurface; +#endif + +#if defined(SDL_VIDEO_DRIVER_VIVANTE) +#include +#endif + +#if defined(SDL_VIDEO_DRIVER_OS2) +#define INCL_WIN +#include +#endif +#endif /* SDL_PROTOTYPES_ONLY */ + +#if defined(SDL_VIDEO_DRIVER_KMSDRM) +struct gbm_device; +#endif + + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(SDL_PROTOTYPES_ONLY) +/** + * These are the various supported windowing subsystems + */ +typedef enum +{ + SDL_SYSWM_UNKNOWN, + SDL_SYSWM_WINDOWS, + SDL_SYSWM_X11, + SDL_SYSWM_DIRECTFB, + SDL_SYSWM_COCOA, + SDL_SYSWM_UIKIT, + SDL_SYSWM_WAYLAND, + SDL_SYSWM_MIR, /* no longer available, left for API/ABI compatibility. Remove in 2.1! */ + SDL_SYSWM_WINRT, + SDL_SYSWM_ANDROID, + SDL_SYSWM_VIVANTE, + SDL_SYSWM_OS2, + SDL_SYSWM_HAIKU, + SDL_SYSWM_KMSDRM, + SDL_SYSWM_RISCOS +} SDL_SYSWM_TYPE; + +/** + * The custom event structure. + */ +struct SDL_SysWMmsg +{ + SDL_version version; + SDL_SYSWM_TYPE subsystem; + union + { +#if defined(SDL_VIDEO_DRIVER_WINDOWS) + struct { + HWND hwnd; /**< The window for the message */ + UINT msg; /**< The type of message */ + WPARAM wParam; /**< WORD message parameter */ + LPARAM lParam; /**< LONG message parameter */ + } win; +#endif +#if defined(SDL_VIDEO_DRIVER_X11) + struct { + XEvent event; + } x11; +#endif +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) + struct { + DFBEvent event; + } dfb; +#endif +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { + /* Latest version of Xcode clang complains about empty structs in C v. C++: + error: empty struct has size 0 in C, size 1 in C++ + */ + int dummy; + /* No Cocoa window events yet */ + } cocoa; +#endif +#if defined(SDL_VIDEO_DRIVER_UIKIT) + struct + { + int dummy; + /* No UIKit window events yet */ + } uikit; +#endif +#if defined(SDL_VIDEO_DRIVER_VIVANTE) + struct + { + int dummy; + /* No Vivante window events yet */ + } vivante; +#endif +#if defined(SDL_VIDEO_DRIVER_OS2) + struct + { + BOOL fFrame; /**< TRUE if hwnd is a frame window */ + HWND hwnd; /**< The window receiving the message */ + ULONG msg; /**< The message identifier */ + MPARAM mp1; /**< The first first message parameter */ + MPARAM mp2; /**< The second first message parameter */ + } os2; +#endif + /* Can't have an empty union */ + int dummy; + } msg; +}; + +/** + * The custom window manager information structure. + * + * When this structure is returned, it holds information about which + * low level system it is using, and will be one of SDL_SYSWM_TYPE. + */ +struct SDL_SysWMinfo +{ + SDL_version version; + SDL_SYSWM_TYPE subsystem; + union + { +#if defined(SDL_VIDEO_DRIVER_WINDOWS) + struct + { + HWND window; /**< The window handle */ + HDC hdc; /**< The window device context */ + HINSTANCE hinstance; /**< The instance handle */ + } win; +#endif +#if defined(SDL_VIDEO_DRIVER_WINRT) + struct + { + IInspectable * window; /**< The WinRT CoreWindow */ + } winrt; +#endif +#if defined(SDL_VIDEO_DRIVER_X11) + struct + { + Display *display; /**< The X11 display */ + Window window; /**< The X11 window */ + } x11; +#endif +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) + struct + { + IDirectFB *dfb; /**< The directfb main interface */ + IDirectFBWindow *window; /**< The directfb window handle */ + IDirectFBSurface *surface; /**< The directfb client surface */ + } dfb; +#endif +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { +#if defined(__OBJC__) && defined(__has_feature) + #if __has_feature(objc_arc) + NSWindow __unsafe_unretained *window; /**< The Cocoa window */ + #else + NSWindow *window; /**< The Cocoa window */ + #endif +#else + NSWindow *window; /**< The Cocoa window */ +#endif + } cocoa; +#endif +#if defined(SDL_VIDEO_DRIVER_UIKIT) + struct + { +#if defined(__OBJC__) && defined(__has_feature) + #if __has_feature(objc_arc) + UIWindow __unsafe_unretained *window; /**< The UIKit window */ + #else + UIWindow *window; /**< The UIKit window */ + #endif +#else + UIWindow *window; /**< The UIKit window */ +#endif + GLuint framebuffer; /**< The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */ + GLuint colorbuffer; /**< The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */ + GLuint resolveFramebuffer; /**< The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */ + } uikit; +#endif +#if defined(SDL_VIDEO_DRIVER_WAYLAND) + struct + { + struct wl_display *display; /**< Wayland display */ + struct wl_surface *surface; /**< Wayland surface */ + void *shell_surface; /**< DEPRECATED Wayland shell_surface (window manager handle) */ + struct wl_egl_window *egl_window; /**< Wayland EGL window (native window) */ + struct xdg_surface *xdg_surface; /**< Wayland xdg surface (window manager handle) */ + struct xdg_toplevel *xdg_toplevel; /**< Wayland xdg toplevel role */ + struct xdg_popup *xdg_popup; /**< Wayland xdg popup role */ + struct xdg_positioner *xdg_positioner; /**< Wayland xdg positioner, for popup */ + } wl; +#endif +#if defined(SDL_VIDEO_DRIVER_MIR) /* no longer available, left for API/ABI compatibility. Remove in 2.1! */ + struct + { + void *connection; /**< Mir display server connection */ + void *surface; /**< Mir surface */ + } mir; +#endif + +#if defined(SDL_VIDEO_DRIVER_ANDROID) + struct + { + ANativeWindow *window; + EGLSurface surface; + } android; +#endif + +#if defined(SDL_VIDEO_DRIVER_OS2) + struct + { + HWND hwnd; /**< The window handle */ + HWND hwndFrame; /**< The frame window handle */ + } os2; +#endif + +#if defined(SDL_VIDEO_DRIVER_VIVANTE) + struct + { + EGLNativeDisplayType display; + EGLNativeWindowType window; + } vivante; +#endif + +#if defined(SDL_VIDEO_DRIVER_KMSDRM) + struct + { + int dev_index; /**< Device index (ex: the X in /dev/dri/cardX) */ + int drm_fd; /**< DRM FD (unavailable on Vulkan windows) */ + struct gbm_device *gbm_dev; /**< GBM device (unavailable on Vulkan windows) */ + } kmsdrm; +#endif + + /* Make sure this union is always 64 bytes (8 64-bit pointers). */ + /* Be careful not to overflow this if you add a new target! */ + Uint8 dummy[64]; + } info; +}; + +#endif /* SDL_PROTOTYPES_ONLY */ + +typedef struct SDL_SysWMinfo SDL_SysWMinfo; + + +/** + * Get driver-specific information about a window. + * + * You must include SDL_syswm.h for the declaration of SDL_SysWMinfo. + * + * The caller must initialize the `info` structure's version by using + * `SDL_VERSION(&info.version)`, and then this function will fill in the rest + * of the structure with information about the given window. + * + * \param window the window about which information is being requested + * \param info an SDL_SysWMinfo structure filled in with window information + * \returns SDL_TRUE if the function is implemented and the `version` member + * of the `info` struct is valid, or SDL_FALSE if the information + * could not be retrieved; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window, + SDL_SysWMinfo * info); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_syswm_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_thread.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_thread.h new file mode 100644 index 00000000000..0a535c88fa3 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_thread.h @@ -0,0 +1,464 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_thread_h_ +#define SDL_thread_h_ + +/** + * \file SDL_thread.h + * + * Header for the SDL thread management routines. + */ + +#include +#include + +/* Thread synchronization primitives */ +#include +#include + +#if defined(__WIN32__) +#include /* _beginthreadex() and _endthreadex() */ +#endif +#if defined(__OS2__) /* for _beginthread() and _endthread() */ +#ifndef __EMX__ +#include +#else +#include +#endif +#endif + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* The SDL thread structure, defined in SDL_thread.c */ +struct SDL_Thread; +typedef struct SDL_Thread SDL_Thread; + +/* The SDL thread ID */ +typedef unsigned long SDL_threadID; + +/* Thread local storage ID, 0 is the invalid ID */ +typedef unsigned int SDL_TLSID; + +/** + * The SDL thread priority. + * + * SDL will make system changes as necessary in order to apply the thread priority. + * Code which attempts to control thread state related to priority should be aware + * that calling SDL_SetThreadPriority may alter such state. + * SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this behavior. + * + * \note On many systems you require special privileges to set high or time critical priority. + */ +typedef enum { + SDL_THREAD_PRIORITY_LOW, + SDL_THREAD_PRIORITY_NORMAL, + SDL_THREAD_PRIORITY_HIGH, + SDL_THREAD_PRIORITY_TIME_CRITICAL +} SDL_ThreadPriority; + +/** + * The function passed to SDL_CreateThread(). + * + * \param data what was passed as `data` to SDL_CreateThread() + * \returns a value that can be reported through SDL_WaitThread(). + */ +typedef int (SDLCALL * SDL_ThreadFunction) (void *data); + + +#if defined(__WIN32__) +/** + * \file SDL_thread.h + * + * We compile SDL into a DLL. This means, that it's the DLL which + * creates a new thread for the calling process with the SDL_CreateThread() + * API. There is a problem with this, that only the RTL of the SDL2.DLL will + * be initialized for those threads, and not the RTL of the calling + * application! + * + * To solve this, we make a little hack here. + * + * We'll always use the caller's _beginthread() and _endthread() APIs to + * start a new thread. This way, if it's the SDL2.DLL which uses this API, + * then the RTL of SDL2.DLL will be used to create the new thread, and if it's + * the application, then the RTL of the application will be used. + * + * So, in short: + * Always use the _beginthread() and _endthread() of the calling runtime + * library! + */ +#define SDL_PASSED_BEGINTHREAD_ENDTHREAD + +typedef uintptr_t (__cdecl * pfnSDL_CurrentBeginThread) + (void *, unsigned, unsigned (__stdcall *func)(void *), + void * /*arg*/, unsigned, unsigned * /* threadID */); +typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); + +#ifndef SDL_beginthread +#define SDL_beginthread _beginthreadex +#endif +#ifndef SDL_endthread +#define SDL_endthread _endthreadex +#endif + +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThreadWithStackSize(int (SDLCALL * fn) (void *), + const char *name, const size_t stacksize, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + + +#if defined(SDL_CreateThread) && SDL_DYNAMIC_API +#undef SDL_CreateThread +#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#undef SDL_CreateThreadWithStackSize +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#else +#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)SDL_endthread) +#endif + +#elif defined(__OS2__) +/* + * just like the windows case above: We compile SDL2 + * into a dll with Watcom's runtime statically linked. + */ +#define SDL_PASSED_BEGINTHREAD_ENDTHREAD + +typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void * /*arg*/); +typedef void (*pfnSDL_CurrentEndThread)(void); + +#ifndef SDL_beginthread +#define SDL_beginthread _beginthread +#endif +#ifndef SDL_endthread +#define SDL_endthread _endthread +#endif + +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + +#if defined(SDL_CreateThread) && SDL_DYNAMIC_API +#undef SDL_CreateThread +#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#undef SDL_CreateThreadWithStackSize +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#else +#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#endif + +#else + +/** + * Create a new thread with a default stack size. + * + * This is equivalent to calling: + * + * ```c + * SDL_CreateThreadWithStackSize(fn, name, 0, data); + * ``` + * + * \param fn the SDL_ThreadFunction function to call in the new thread + * \param name the name of the thread + * \param data a pointer that is passed to `fn` + * \returns an opaque pointer to the new thread object on success, NULL if the + * new thread could not be created; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateThreadWithStackSize + * \sa SDL_WaitThread + */ +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data); + +/** + * Create a new thread with a specific stack size. + * + * SDL makes an attempt to report `name` to the system, so that debuggers can + * display it. Not all platforms support this. + * + * Thread naming is a little complicated: Most systems have very small limits + * for the string length (Haiku has 32 bytes, Linux currently has 16, Visual + * C++ 6.0 has _nine_!), and possibly other arbitrary rules. You'll have to + * see what happens with your system's debugger. The name should be UTF-8 (but + * using the naming limits of C identifiers is a better bet). There are no + * requirements for thread naming conventions, so long as the string is + * null-terminated UTF-8, but these guidelines are helpful in choosing a name: + * + * https://stackoverflow.com/questions/149932/naming-conventions-for-threads + * + * If a system imposes requirements, SDL will try to munge the string for it + * (truncate, etc), but the original string contents will be available from + * SDL_GetThreadName(). + * + * The size (in bytes) of the new stack can be specified. Zero means "use the + * system default" which might be wildly different between platforms. x86 + * Linux generally defaults to eight megabytes, an embedded device might be a + * few kilobytes instead. You generally need to specify a stack that is a + * multiple of the system's page size (in many cases, this is 4 kilobytes, but + * check your system documentation). + * + * In SDL 2.1, stack size will be folded into the original SDL_CreateThread + * function, but for backwards compatibility, this is currently a separate + * function. + * + * \param fn the SDL_ThreadFunction function to call in the new thread + * \param name the name of the thread + * \param stacksize the size, in bytes, to allocate for the new thread stack. + * \param data a pointer that is passed to `fn` + * \returns an opaque pointer to the new thread object on success, NULL if the + * new thread could not be created; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_WaitThread + */ +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data); + +#endif + +/** + * Get the thread name as it was specified in SDL_CreateThread(). + * + * This is internal memory, not to be freed by the caller, and remains valid + * until the specified thread is cleaned up by SDL_WaitThread(). + * + * \param thread the thread to query + * \returns a pointer to a UTF-8 string that names the specified thread, or + * NULL if it doesn't have a name. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateThread + */ +extern DECLSPEC const char *SDLCALL SDL_GetThreadName(SDL_Thread *thread); + +/** + * Get the thread identifier for the current thread. + * + * This thread identifier is as reported by the underlying operating system. + * If SDL is running on a platform that does not support threads the return + * value will always be zero. + * + * This function also returns a valid thread ID when called from the main + * thread. + * + * \returns the ID of the current thread. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetThreadID + */ +extern DECLSPEC SDL_threadID SDLCALL SDL_ThreadID(void); + +/** + * Get the thread identifier for the specified thread. + * + * This thread identifier is as reported by the underlying operating system. + * If SDL is running on a platform that does not support threads the return + * value will always be zero. + * + * \param thread the thread to query + * \returns the ID of the specified thread, or the ID of the current thread if + * `thread` is NULL. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ThreadID + */ +extern DECLSPEC SDL_threadID SDLCALL SDL_GetThreadID(SDL_Thread * thread); + +/** + * Set the priority for the current thread. + * + * Note that some platforms will not let you alter the priority (or at least, + * promote the thread to a higher priority) at all, and some require you to be + * an administrator account. Be prepared for this to fail. + * + * \param priority the SDL_ThreadPriority to set + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_SetThreadPriority(SDL_ThreadPriority priority); + +/** + * Wait for a thread to finish. + * + * Threads that haven't been detached will remain (as a "zombie") until this + * function cleans them up. Not doing so is a resource leak. + * + * Once a thread has been cleaned up through this function, the SDL_Thread + * that references it becomes invalid and should not be referenced again. As + * such, only one thread may call SDL_WaitThread() on another. + * + * The return code for the thread function is placed in the area pointed to by + * `status`, if `status` is not NULL. + * + * You may not wait on a thread that has been used in a call to + * SDL_DetachThread(). Use either that function or this one, but not both, or + * behavior is undefined. + * + * It is safe to pass a NULL thread to this function; it is a no-op. + * + * Note that the thread pointer is freed by this function and is not valid + * afterward. + * + * \param thread the SDL_Thread pointer that was returned from the + * SDL_CreateThread() call that started this thread + * \param status pointer to an integer that will receive the value returned + * from the thread function by its 'return', or NULL to not + * receive such value back. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateThread + * \sa SDL_DetachThread + */ +extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread * thread, int *status); + +/** + * Let a thread clean up on exit without intervention. + * + * A thread may be "detached" to signify that it should not remain until + * another thread has called SDL_WaitThread() on it. Detaching a thread is + * useful for long-running threads that nothing needs to synchronize with or + * further manage. When a detached thread is done, it simply goes away. + * + * There is no way to recover the return code of a detached thread. If you + * need this, don't detach the thread and instead use SDL_WaitThread(). + * + * Once a thread is detached, you should usually assume the SDL_Thread isn't + * safe to reference again, as it will become invalid immediately upon the + * detached thread's exit, instead of remaining until someone has called + * SDL_WaitThread() to finally clean it up. As such, don't detach the same + * thread more than once. + * + * If a thread has already exited when passed to SDL_DetachThread(), it will + * stop waiting for a call to SDL_WaitThread() and clean up immediately. It is + * not safe to detach a thread that might be used with SDL_WaitThread(). + * + * You may not call SDL_WaitThread() on a thread that has been detached. Use + * either that function or this one, but not both, or behavior is undefined. + * + * It is safe to pass NULL to this function; it is a no-op. + * + * \param thread the SDL_Thread pointer that was returned from the + * SDL_CreateThread() call that started this thread + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_CreateThread + * \sa SDL_WaitThread + */ +extern DECLSPEC void SDLCALL SDL_DetachThread(SDL_Thread * thread); + +/** + * Create a piece of thread-local storage. + * + * This creates an identifier that is globally visible to all threads but + * refers to data that is thread-specific. + * + * \returns the newly created thread local storage identifier or 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TLSGet + * \sa SDL_TLSSet + */ +extern DECLSPEC SDL_TLSID SDLCALL SDL_TLSCreate(void); + +/** + * Get the current thread's value associated with a thread local storage ID. + * + * \param id the thread local storage ID + * \returns the value associated with the ID for the current thread or NULL if + * no value has been set; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TLSCreate + * \sa SDL_TLSSet + */ +extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id); + +/** + * Set the current thread's value associated with a thread local storage ID. + * + * The function prototype for `destructor` is: + * + * ```c + * void destructor(void *value) + * ``` + * + * where its parameter `value` is what was passed as `value` to SDL_TLSSet(). + * + * \param id the thread local storage ID + * \param value the value to associate with the ID for the current thread + * \param destructor a function called when the thread exits, to free the + * value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TLSCreate + * \sa SDL_TLSGet + */ +extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (SDLCALL *destructor)(void*)); + +/** + * Cleanup all TLS data for this thread. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC void SDLCALL SDL_TLSCleanup(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_thread_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_timer.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_timer.h new file mode 100644 index 00000000000..008e8e356c6 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_timer.h @@ -0,0 +1,222 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_timer_h_ +#define SDL_timer_h_ + +/** + * \file SDL_timer.h + * + * Header for the SDL time management routines. + */ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the number of milliseconds since SDL library initialization. + * + * This value wraps if the program runs for more than ~49 days. + * + * This function is not recommended as of SDL 2.0.18; use SDL_GetTicks64() + * instead, where the value doesn't wrap every ~49 days. There are places in + * SDL where we provide a 32-bit timestamp that can not change without + * breaking binary compatibility, though, so this function isn't officially + * deprecated. + * + * \returns an unsigned 32-bit value representing the number of milliseconds + * since the SDL library initialized. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TICKS_PASSED + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); + +/** + * Get the number of milliseconds since SDL library initialization. + * + * Note that you should not use the SDL_TICKS_PASSED macro with values + * returned by this function, as that macro does clever math to compensate for + * the 32-bit overflow every ~49 days that SDL_GetTicks() suffers from. 64-bit + * values from this function can be safely compared directly. + * + * For example, if you want to wait 100 ms, you could do this: + * + * ```c + * const Uint64 timeout = SDL_GetTicks64() + 100; + * while (SDL_GetTicks64() < timeout) { + * // ... do work until timeout has elapsed + * } + * ``` + * + * \returns an unsigned 64-bit value representing the number of milliseconds + * since the SDL library initialized. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetTicks64(void); + +/** + * Compare 32-bit SDL ticks values, and return true if `A` has passed `B`. + * + * This should be used with results from SDL_GetTicks(), as this macro + * attempts to deal with the 32-bit counter wrapping back to zero every ~49 + * days, but should _not_ be used with SDL_GetTicks64(), which does not have + * that problem. + * + * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could + * do this: + * + * ```c + * const Uint32 timeout = SDL_GetTicks() + 100; + * while (!SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) { + * // ... do work until timeout has elapsed + * } + * ``` + * + * Note that this does not handle tick differences greater + * than 2^31 so take care when using the above kind of code + * with large timeout delays (tens of days). + */ +#define SDL_TICKS_PASSED(A, B) ((Sint32)((B) - (A)) <= 0) + +/** + * Get the current value of the high resolution counter. + * + * This function is typically used for profiling. + * + * The counter values are only meaningful relative to each other. Differences + * between values can be converted to times by using + * SDL_GetPerformanceFrequency(). + * + * \returns the current counter value. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetPerformanceFrequency + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceCounter(void); + +/** + * Get the count per second of the high resolution counter. + * + * \returns a platform-specific count per second. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetPerformanceCounter + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void); + +/** + * Wait a specified number of milliseconds before returning. + * + * This function waits a specified number of milliseconds before returning. It + * waits at least the specified time, but possibly longer due to OS + * scheduling. + * + * \param ms the number of milliseconds to delay + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); + +/** + * Function prototype for the timer callback function. + * + * The callback function is passed the current timer interval and returns + * the next timer interval. If the returned value is the same as the one + * passed in, the periodic alarm continues, otherwise a new alarm is + * scheduled. If the callback returns 0, the periodic alarm is cancelled. + */ +typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param); + +/** + * Definition of the timer ID type. + */ +typedef int SDL_TimerID; + +/** + * Call a callback function at a future time. + * + * If you use this function, you must pass `SDL_INIT_TIMER` to SDL_Init(). + * + * The callback function is passed the current timer interval and the user + * supplied parameter from the SDL_AddTimer() call and should return the next + * timer interval. If the value returned from the callback is 0, the timer is + * canceled. + * + * The callback is run on a separate thread. + * + * Timers take into account the amount of time it took to execute the + * callback. For example, if the callback took 250 ms to execute and returned + * 1000 (ms), the timer would only wait another 750 ms before its next + * iteration. + * + * Timing may be inexact due to OS scheduling. Be sure to note the current + * time with SDL_GetTicks() or SDL_GetPerformanceCounter() in case your + * callback needs to adjust for variances. + * + * \param interval the timer delay, in milliseconds, passed to `callback` + * \param callback the SDL_TimerCallback function to call when the specified + * `interval` elapses + * \param param a pointer that is passed to `callback` + * \returns a timer ID or 0 if an error occurs; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RemoveTimer + */ +extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, + SDL_TimerCallback callback, + void *param); + +/** + * Remove a timer created with SDL_AddTimer(). + * + * \param id the ID of the timer to remove + * \returns SDL_TRUE if the timer is removed or SDL_FALSE if the timer wasn't + * found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddTimer + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID id); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_timer_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_touch.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_touch.h new file mode 100644 index 00000000000..c7202981b91 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_touch.h @@ -0,0 +1,150 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_touch.h + * + * Include file for SDL touch event handling. + */ + +#ifndef SDL_touch_h_ +#define SDL_touch_h_ + +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef Sint64 SDL_TouchID; +typedef Sint64 SDL_FingerID; + +typedef enum +{ + SDL_TOUCH_DEVICE_INVALID = -1, + SDL_TOUCH_DEVICE_DIRECT, /* touch screen with window-relative coordinates */ + SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE, /* trackpad with absolute device coordinates */ + SDL_TOUCH_DEVICE_INDIRECT_RELATIVE /* trackpad with screen cursor-relative coordinates */ +} SDL_TouchDeviceType; + +typedef struct SDL_Finger +{ + SDL_FingerID id; + float x; + float y; + float pressure; +} SDL_Finger; + +/* Used as the device ID for mouse events simulated with touch input */ +#define SDL_TOUCH_MOUSEID ((Uint32)-1) + +/* Used as the SDL_TouchID for touch events simulated with mouse input */ +#define SDL_MOUSE_TOUCHID ((Sint64)-1) + + +/** + * Get the number of registered touch devices. + * + * On some platforms SDL first sees the touch device if it was actually used. + * Therefore SDL_GetNumTouchDevices() may return 0 although devices are + * available. After using all devices at least once the number will be + * correct. + * + * This was fixed for Android in SDL 2.0.1. + * + * \returns the number of registered touch devices. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTouchDevice + */ +extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void); + +/** + * Get the touch ID with the given index. + * + * \param index the touch device index + * \returns the touch ID with the given index on success or 0 if the index is + * invalid; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumTouchDevices + */ +extern DECLSPEC SDL_TouchID SDLCALL SDL_GetTouchDevice(int index); + +/** + * Get the touch device name as reported from the driver or NULL if the index + * is invalid. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC const char* SDLCALL SDL_GetTouchName(int index); + +/** + * Get the type of the given touch device. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC SDL_TouchDeviceType SDLCALL SDL_GetTouchDeviceType(SDL_TouchID touchID); + +/** + * Get the number of active fingers for a given touch device. + * + * \param touchID the ID of a touch device + * \returns the number of active fingers for a given touch device on success + * or 0 on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTouchFinger + */ +extern DECLSPEC int SDLCALL SDL_GetNumTouchFingers(SDL_TouchID touchID); + +/** + * Get the finger object for specified touch device ID and finger index. + * + * The returned resource is owned by SDL and should not be deallocated. + * + * \param touchID the ID of the requested touch device + * \param index the index of the requested finger + * \returns a pointer to the SDL_Finger object or NULL if no object at the + * given ID and index could be found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RecordGesture + */ +extern DECLSPEC SDL_Finger * SDLCALL SDL_GetTouchFinger(SDL_TouchID touchID, int index); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_touch_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_types.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_types.h new file mode 100644 index 00000000000..afd55e8a32a --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_types.h @@ -0,0 +1,29 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_types.h + * + * \deprecated + */ + +/* DEPRECATED */ +#include diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_version.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_version.h new file mode 100644 index 00000000000..e374f0e17a0 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_version.h @@ -0,0 +1,188 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_version.h + * + * This header defines the current SDL version. + */ + +#ifndef SDL_version_h_ +#define SDL_version_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Information about the version of SDL in use. + * + * Represents the library's version as three levels: major revision + * (increments with massive changes, additions, and enhancements), + * minor revision (increments with backwards-compatible changes to the + * major revision), and patchlevel (increments with fixes to the minor + * revision). + * + * \sa SDL_VERSION + * \sa SDL_GetVersion + */ +typedef struct SDL_version +{ + Uint8 major; /**< major version */ + Uint8 minor; /**< minor version */ + Uint8 patch; /**< update version */ +} SDL_version; + +/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL +*/ +#define SDL_MAJOR_VERSION 2 +#define SDL_MINOR_VERSION 0 +#define SDL_PATCHLEVEL 22 + +/** + * Macro to determine SDL version program was compiled against. + * + * This macro fills in a SDL_version structure with the version of the + * library you compiled against. This is determined by what header the + * compiler uses. Note that if you dynamically linked the library, you might + * have a slightly newer or older version at runtime. That version can be + * determined with SDL_GetVersion(), which, unlike SDL_VERSION(), + * is not a macro. + * + * \param x A pointer to a SDL_version struct to initialize. + * + * \sa SDL_version + * \sa SDL_GetVersion + */ +#define SDL_VERSION(x) \ +{ \ + (x)->major = SDL_MAJOR_VERSION; \ + (x)->minor = SDL_MINOR_VERSION; \ + (x)->patch = SDL_PATCHLEVEL; \ +} + +/** + * This macro turns the version numbers into a numeric value: + * \verbatim + (1,2,3) -> (1203) + \endverbatim + * + * This assumes that there will never be more than 100 patchlevels. + */ +#define SDL_VERSIONNUM(X, Y, Z) \ + ((X)*1000 + (Y)*100 + (Z)) + +/** + * This is the version number macro for the current SDL version. + */ +#define SDL_COMPILEDVERSION \ + SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) + +/** + * This macro will evaluate to true if compiled with SDL at least X.Y.Z. + */ +#define SDL_VERSION_ATLEAST(X, Y, Z) \ + (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) + +/** + * Get the version of SDL that is linked against your program. + * + * If you are linking to SDL dynamically, then it is possible that the current + * version will be different than the version you compiled against. This + * function returns the current version, while SDL_VERSION() is a macro that + * tells you what version you compiled with. + * + * This function may be called safely at any time, even before SDL_Init(). + * + * \param ver the SDL_version structure that contains the version information + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRevision + */ +extern DECLSPEC void SDLCALL SDL_GetVersion(SDL_version * ver); + +/** + * Get the code revision of SDL that is linked against your program. + * + * This value is the revision of the code you are linked with and may be + * different from the code you are compiling with, which is found in the + * constant SDL_REVISION. + * + * The revision is arbitrary string (a hash value) uniquely identifying the + * exact revision of the SDL library in use, and is only useful in comparing + * against other revisions. It is NOT an incrementing number. + * + * If SDL wasn't built from a git repository with the appropriate tools, this + * will return an empty string. + * + * Prior to SDL 2.0.16, before development moved to GitHub, this returned a + * hash for a Mercurial repository. + * + * You shouldn't use this function for anything but logging it for debugging + * purposes. The string is not intended to be reliable in any way. + * + * \returns an arbitrary string, uniquely identifying the exact revision of + * the SDL library in use. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetVersion + */ +extern DECLSPEC const char *SDLCALL SDL_GetRevision(void); + +/** + * Obsolete function, do not use. + * + * When SDL was hosted in a Mercurial repository, and was built carefully, + * this would return the revision number that the build was created from. This + * number was not reliable for several reasons, but more importantly, SDL is + * now hosted in a git repository, which does not offer numbers at all, only + * hashes. This function only ever returns zero now. Don't use it. + * + * Before SDL 2.0.16, this might have returned an unreliable, but non-zero + * number. + * + * \deprecated Use SDL_GetRevision() instead; if SDL was carefully built, it + * will return a git hash. + * + * \returns zero, always, in modern SDL releases. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRevision + */ +extern SDL_DEPRECATED DECLSPEC int SDLCALL SDL_GetRevisionNumber(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_version_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_video.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_video.h new file mode 100644 index 00000000000..90fe7121377 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_video.h @@ -0,0 +1,2089 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_video.h + * + * Header file for SDL video functions. + */ + +#ifndef SDL_video_h_ +#define SDL_video_h_ + +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The structure that defines a display mode + * + * \sa SDL_GetNumDisplayModes() + * \sa SDL_GetDisplayMode() + * \sa SDL_GetDesktopDisplayMode() + * \sa SDL_GetCurrentDisplayMode() + * \sa SDL_GetClosestDisplayMode() + * \sa SDL_SetWindowDisplayMode() + * \sa SDL_GetWindowDisplayMode() + */ +typedef struct +{ + Uint32 format; /**< pixel format */ + int w; /**< width, in screen coordinates */ + int h; /**< height, in screen coordinates */ + int refresh_rate; /**< refresh rate (or zero for unspecified) */ + void *driverdata; /**< driver-specific data, initialize to 0 */ +} SDL_DisplayMode; + +/** + * \brief The type used to identify a window + * + * \sa SDL_CreateWindow() + * \sa SDL_CreateWindowFrom() + * \sa SDL_DestroyWindow() + * \sa SDL_FlashWindow() + * \sa SDL_GetWindowData() + * \sa SDL_GetWindowFlags() + * \sa SDL_GetWindowGrab() + * \sa SDL_GetWindowKeyboardGrab() + * \sa SDL_GetWindowMouseGrab() + * \sa SDL_GetWindowPosition() + * \sa SDL_GetWindowSize() + * \sa SDL_GetWindowTitle() + * \sa SDL_HideWindow() + * \sa SDL_MaximizeWindow() + * \sa SDL_MinimizeWindow() + * \sa SDL_RaiseWindow() + * \sa SDL_RestoreWindow() + * \sa SDL_SetWindowData() + * \sa SDL_SetWindowFullscreen() + * \sa SDL_SetWindowGrab() + * \sa SDL_SetWindowKeyboardGrab() + * \sa SDL_SetWindowMouseGrab() + * \sa SDL_SetWindowIcon() + * \sa SDL_SetWindowPosition() + * \sa SDL_SetWindowSize() + * \sa SDL_SetWindowBordered() + * \sa SDL_SetWindowResizable() + * \sa SDL_SetWindowTitle() + * \sa SDL_ShowWindow() + */ +typedef struct SDL_Window SDL_Window; + +/** + * \brief The flags on a window + * + * \sa SDL_GetWindowFlags() + */ +typedef enum +{ + SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */ + SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ + SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */ + SDL_WINDOW_HIDDEN = 0x00000008, /**< window is not visible */ + SDL_WINDOW_BORDERLESS = 0x00000010, /**< no window decoration */ + SDL_WINDOW_RESIZABLE = 0x00000020, /**< window can be resized */ + SDL_WINDOW_MINIMIZED = 0x00000040, /**< window is minimized */ + SDL_WINDOW_MAXIMIZED = 0x00000080, /**< window is maximized */ + SDL_WINDOW_MOUSE_GRABBED = 0x00000100, /**< window has grabbed mouse input */ + SDL_WINDOW_INPUT_FOCUS = 0x00000200, /**< window has input focus */ + SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */ + SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), + SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */ + SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported. + On macOS NSHighResolutionCapable must be set true in the + application's Info.plist for this to have any effect. */ + SDL_WINDOW_MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to MOUSE_GRABBED) */ + SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */ + SDL_WINDOW_SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */ + SDL_WINDOW_UTILITY = 0x00020000, /**< window should be treated as a utility window */ + SDL_WINDOW_TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */ + SDL_WINDOW_POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */ + SDL_WINDOW_KEYBOARD_GRABBED = 0x00100000, /**< window has grabbed keyboard input */ + SDL_WINDOW_VULKAN = 0x10000000, /**< window usable for Vulkan surface */ + SDL_WINDOW_METAL = 0x20000000, /**< window usable for Metal view */ + + SDL_WINDOW_INPUT_GRABBED = SDL_WINDOW_MOUSE_GRABBED /**< equivalent to SDL_WINDOW_MOUSE_GRABBED for compatibility */ +} SDL_WindowFlags; + +/** + * \brief Used to indicate that you don't care what the window position is. + */ +#define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000u +#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X)) +#define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0) +#define SDL_WINDOWPOS_ISUNDEFINED(X) \ + (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK) + +/** + * \brief Used to indicate that the window position should be centered. + */ +#define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000u +#define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X)) +#define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0) +#define SDL_WINDOWPOS_ISCENTERED(X) \ + (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK) + +/** + * \brief Event subtype for window events + */ +typedef enum +{ + SDL_WINDOWEVENT_NONE, /**< Never used */ + SDL_WINDOWEVENT_SHOWN, /**< Window has been shown */ + SDL_WINDOWEVENT_HIDDEN, /**< Window has been hidden */ + SDL_WINDOWEVENT_EXPOSED, /**< Window has been exposed and should be + redrawn */ + SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1, data2 + */ + SDL_WINDOWEVENT_RESIZED, /**< Window has been resized to data1xdata2 */ + SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as + a result of an API call or through the + system or user changing the window size. */ + SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */ + SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */ + SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size + and position */ + SDL_WINDOWEVENT_ENTER, /**< Window has gained mouse focus */ + SDL_WINDOWEVENT_LEAVE, /**< Window has lost mouse focus */ + SDL_WINDOWEVENT_FOCUS_GAINED, /**< Window has gained keyboard focus */ + SDL_WINDOWEVENT_FOCUS_LOST, /**< Window has lost keyboard focus */ + SDL_WINDOWEVENT_CLOSE, /**< The window manager requests that the window be closed */ + SDL_WINDOWEVENT_TAKE_FOCUS, /**< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) */ + SDL_WINDOWEVENT_HIT_TEST, /**< Window had a hit test that wasn't SDL_HITTEST_NORMAL. */ + SDL_WINDOWEVENT_ICCPROF_CHANGED,/**< The ICC profile of the window's display has changed. */ + SDL_WINDOWEVENT_DISPLAY_CHANGED /**< Window has been moved to display data1. */ +} SDL_WindowEventID; + +/** + * \brief Event subtype for display events + */ +typedef enum +{ + SDL_DISPLAYEVENT_NONE, /**< Never used */ + SDL_DISPLAYEVENT_ORIENTATION, /**< Display orientation has changed to data1 */ + SDL_DISPLAYEVENT_CONNECTED, /**< Display has been added to the system */ + SDL_DISPLAYEVENT_DISCONNECTED /**< Display has been removed from the system */ +} SDL_DisplayEventID; + +/** + * \brief Display orientation + */ +typedef enum +{ + SDL_ORIENTATION_UNKNOWN, /**< The display orientation can't be determined */ + SDL_ORIENTATION_LANDSCAPE, /**< The display is in landscape mode, with the right side up, relative to portrait mode */ + SDL_ORIENTATION_LANDSCAPE_FLIPPED, /**< The display is in landscape mode, with the left side up, relative to portrait mode */ + SDL_ORIENTATION_PORTRAIT, /**< The display is in portrait mode */ + SDL_ORIENTATION_PORTRAIT_FLIPPED /**< The display is in portrait mode, upside down */ +} SDL_DisplayOrientation; + +/** + * \brief Window flash operation + */ +typedef enum +{ + SDL_FLASH_CANCEL, /**< Cancel any window flash state */ + SDL_FLASH_BRIEFLY, /**< Flash the window briefly to get attention */ + SDL_FLASH_UNTIL_FOCUSED /**< Flash the window until it gets focus */ +} SDL_FlashOperation; + +/** + * \brief An opaque handle to an OpenGL context. + */ +typedef void *SDL_GLContext; + +/** + * \brief OpenGL configuration attributes + */ +typedef enum +{ + SDL_GL_RED_SIZE, + SDL_GL_GREEN_SIZE, + SDL_GL_BLUE_SIZE, + SDL_GL_ALPHA_SIZE, + SDL_GL_BUFFER_SIZE, + SDL_GL_DOUBLEBUFFER, + SDL_GL_DEPTH_SIZE, + SDL_GL_STENCIL_SIZE, + SDL_GL_ACCUM_RED_SIZE, + SDL_GL_ACCUM_GREEN_SIZE, + SDL_GL_ACCUM_BLUE_SIZE, + SDL_GL_ACCUM_ALPHA_SIZE, + SDL_GL_STEREO, + SDL_GL_MULTISAMPLEBUFFERS, + SDL_GL_MULTISAMPLESAMPLES, + SDL_GL_ACCELERATED_VISUAL, + SDL_GL_RETAINED_BACKING, + SDL_GL_CONTEXT_MAJOR_VERSION, + SDL_GL_CONTEXT_MINOR_VERSION, + SDL_GL_CONTEXT_EGL, + SDL_GL_CONTEXT_FLAGS, + SDL_GL_CONTEXT_PROFILE_MASK, + SDL_GL_SHARE_WITH_CURRENT_CONTEXT, + SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, + SDL_GL_CONTEXT_RELEASE_BEHAVIOR, + SDL_GL_CONTEXT_RESET_NOTIFICATION, + SDL_GL_CONTEXT_NO_ERROR +} SDL_GLattr; + +typedef enum +{ + SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, + SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, + SDL_GL_CONTEXT_PROFILE_ES = 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */ +} SDL_GLprofile; + +typedef enum +{ + SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001, + SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002, + SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = 0x0004, + SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008 +} SDL_GLcontextFlag; + +typedef enum +{ + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = 0x0000, + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001 +} SDL_GLcontextReleaseFlag; + +typedef enum +{ + SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000, + SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = 0x0001 +} SDL_GLContextResetNotification; + +/* Function prototypes */ + +/** + * Get the number of video drivers compiled into SDL. + * + * \returns a number >= 1 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetVideoDriver + */ +extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void); + +/** + * Get the name of a built in video driver. + * + * The video drivers are presented in the order in which they are normally + * checked during initialization. + * + * \param index the index of a video driver + * \returns the name of the video driver with the given **index**. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDrivers + */ +extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index); + +/** + * Initialize the video subsystem, optionally specifying a video driver. + * + * This function initializes the video subsystem, setting up a connection to + * the window manager, etc, and determines the available display modes and + * pixel formats, but does not initialize a window or graphics mode. + * + * If you use this function and you haven't used the SDL_INIT_VIDEO flag with + * either SDL_Init() or SDL_InitSubSystem(), you should call SDL_VideoQuit() + * before calling SDL_Quit(). + * + * It is safe to call this function multiple times. SDL_VideoInit() will call + * SDL_VideoQuit() itself if the video subsystem has already been initialized. + * + * You can use SDL_GetNumVideoDrivers() and SDL_GetVideoDriver() to find a + * specific `driver_name`. + * + * \param driver_name the name of a video driver to initialize, or NULL for + * the default driver + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDrivers + * \sa SDL_GetVideoDriver + * \sa SDL_InitSubSystem + * \sa SDL_VideoQuit + */ +extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name); + +/** + * Shut down the video subsystem, if initialized with SDL_VideoInit(). + * + * This function closes all windows, and restores the original video mode. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_VideoInit + */ +extern DECLSPEC void SDLCALL SDL_VideoQuit(void); + +/** + * Get the name of the currently initialized video driver. + * + * \returns the name of the current video driver or NULL if no driver has been + * initialized. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDrivers + * \sa SDL_GetVideoDriver + */ +extern DECLSPEC const char *SDLCALL SDL_GetCurrentVideoDriver(void); + +/** + * Get the number of available video displays. + * + * \returns a number >= 1 or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayBounds + */ +extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void); + +/** + * Get the name of a display in UTF-8 encoding. + * + * \param displayIndex the index of display from which the name should be + * queried + * \returns the name of a display or NULL for an invalid display index or + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex); + +/** + * Get the desktop area represented by a display. + * + * The primary display (`displayIndex` zero) is always located at 0,0. + * + * \param displayIndex the index of the display to query + * \param rect the SDL_Rect structure filled in with the display bounds + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect); + +/** + * Get the usable desktop area represented by a display. + * + * The primary display (`displayIndex` zero) is always located at 0,0. + * + * This is the same area as SDL_GetDisplayBounds() reports, but with portions + * reserved by the system removed. For example, on Apple's macOS, this + * subtracts the area occupied by the menu bar and dock. + * + * Setting a window to be fullscreen generally bypasses these unusable areas, + * so these are good guidelines for the maximum space available to a + * non-fullscreen window. + * + * The parameter `rect` is ignored if it is NULL. + * + * This function also returns -1 if the parameter `displayIndex` is out of + * range. + * + * \param displayIndex the index of the display to query the usable bounds + * from + * \param rect the SDL_Rect structure filled in with the display bounds + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetDisplayBounds + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect * rect); + +/** + * Get the dots/pixels-per-inch for a display. + * + * Diagonal, horizontal and vertical DPI can all be optionally returned if the + * appropriate parameter is non-NULL. + * + * A failure of this function usually means that either no DPI information is + * available or the `displayIndex` is out of range. + * + * \param displayIndex the index of the display from which DPI information + * should be queried + * \param ddpi a pointer filled in with the diagonal DPI of the display; may + * be NULL + * \param hdpi a pointer filled in with the horizontal DPI of the display; may + * be NULL + * \param vdpi a pointer filled in with the vertical DPI of the display; may + * be NULL + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi); + +/** + * Get the orientation of a display. + * + * \param displayIndex the index of the display to query + * \returns The SDL_DisplayOrientation enum value of the display, or + * `SDL_ORIENTATION_UNKNOWN` if it isn't available. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC SDL_DisplayOrientation SDLCALL SDL_GetDisplayOrientation(int displayIndex); + +/** + * Get the number of available display modes. + * + * The `displayIndex` needs to be in the range from 0 to + * SDL_GetNumVideoDisplays() - 1. + * + * \param displayIndex the index of the display to query + * \returns a number >= 1 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayMode + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(int displayIndex); + +/** + * Get information about a specific display mode. + * + * The display modes are sorted in this priority: + * + * - width -> largest to smallest + * - height -> largest to smallest + * - bits per pixel -> more colors to fewer colors + * - packed pixel layout -> largest to smallest + * - refresh rate -> highest to lowest + * + * \param displayIndex the index of the display to query + * \param modeIndex the index of the display mode to query + * \param mode an SDL_DisplayMode structure filled in with the mode at + * `modeIndex` + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumDisplayModes + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int displayIndex, int modeIndex, + SDL_DisplayMode * mode); + +/** + * Get information about the desktop's display mode. + * + * There's a difference between this function and SDL_GetCurrentDisplayMode() + * when SDL runs fullscreen and has changed the resolution. In that case this + * function will return the previous native display mode, and not the current + * display mode. + * + * \param displayIndex the index of the display to query + * \param mode an SDL_DisplayMode structure filled in with the current display + * mode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetCurrentDisplayMode + * \sa SDL_GetDisplayMode + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode * mode); + +/** + * Get information about the current display mode. + * + * There's a difference between this function and SDL_GetDesktopDisplayMode() + * when SDL runs fullscreen and has changed the resolution. In that case this + * function will return the current display mode, and not the previous native + * display mode. + * + * \param displayIndex the index of the display to query + * \param mode an SDL_DisplayMode structure filled in with the current display + * mode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDesktopDisplayMode + * \sa SDL_GetDisplayMode + * \sa SDL_GetNumVideoDisplays + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode * mode); + + +/** + * Get the closest match to the requested display mode. + * + * The available display modes are scanned and `closest` is filled in with the + * closest mode matching the requested mode and returned. The mode format and + * refresh rate default to the desktop mode if they are set to 0. The modes + * are scanned with size being first priority, format being second priority, + * and finally checking the refresh rate. If all the available modes are too + * small, then NULL is returned. + * + * \param displayIndex the index of the display to query + * \param mode an SDL_DisplayMode structure containing the desired display + * mode + * \param closest an SDL_DisplayMode structure filled in with the closest + * match of the available display modes + * \returns the passed in value `closest` or NULL if no matching video mode + * was available; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayMode + * \sa SDL_GetNumDisplayModes + */ +extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest); + +/** + * Get the index of the display associated with a window. + * + * \param window the window to query + * \returns the index of the display containing the center of the window on + * success or a negative error code on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayBounds + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetWindowDisplayIndex(SDL_Window * window); + +/** + * Set the display mode to use when a window is visible at fullscreen. + * + * This only affects the display mode used when the window is fullscreen. To + * change the window size when the window is not fullscreen, use + * SDL_SetWindowSize(). + * + * \param window the window to affect + * \param mode the SDL_DisplayMode structure representing the mode to use, or + * NULL to use the window's dimensions and the desktop's format + * and refresh rate + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowDisplayMode + * \sa SDL_SetWindowFullscreen + */ +extern DECLSPEC int SDLCALL SDL_SetWindowDisplayMode(SDL_Window * window, + const SDL_DisplayMode * mode); + +/** + * Query the display mode to use when a window is visible at fullscreen. + * + * \param window the window to query + * \param mode an SDL_DisplayMode structure filled in with the fullscreen + * display mode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowDisplayMode + * \sa SDL_SetWindowFullscreen + */ +extern DECLSPEC int SDLCALL SDL_GetWindowDisplayMode(SDL_Window * window, + SDL_DisplayMode * mode); + +/** + * Get the raw ICC profile data for the screen the window is currently on. + * + * Data returned should be freed with SDL_free. + * + * \param window the window to query + * \param size the size of the ICC profile + * \returns the raw ICC profile data on success or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void* SDLCALL SDL_GetWindowICCProfile(SDL_Window * window, size_t* size); + +/** + * Get the pixel format associated with the window. + * + * \param window the window to query + * \returns the pixel format of the window on success or + * SDL_PIXELFORMAT_UNKNOWN on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); + +/** + * Create a window with the specified position, dimensions, and flags. + * + * `flags` may be any of the following OR'd together: + * + * - `SDL_WINDOW_FULLSCREEN`: fullscreen window + * - `SDL_WINDOW_FULLSCREEN_DESKTOP`: fullscreen window at desktop resolution + * - `SDL_WINDOW_OPENGL`: window usable with an OpenGL context + * - `SDL_WINDOW_VULKAN`: window usable with a Vulkan instance + * - `SDL_WINDOW_METAL`: window usable with a Metal instance + * - `SDL_WINDOW_HIDDEN`: window is not visible + * - `SDL_WINDOW_BORDERLESS`: no window decoration + * - `SDL_WINDOW_RESIZABLE`: window can be resized + * - `SDL_WINDOW_MINIMIZED`: window is minimized + * - `SDL_WINDOW_MAXIMIZED`: window is maximized + * - `SDL_WINDOW_INPUT_GRABBED`: window has grabbed input focus + * - `SDL_WINDOW_ALLOW_HIGHDPI`: window should be created in high-DPI mode if + * supported (>= SDL 2.0.1) + * + * `SDL_WINDOW_SHOWN` is ignored by SDL_CreateWindow(). The SDL_Window is + * implicitly shown if SDL_WINDOW_HIDDEN is not set. `SDL_WINDOW_SHOWN` may be + * queried later using SDL_GetWindowFlags(). + * + * On Apple's macOS, you **must** set the NSHighResolutionCapable Info.plist + * property to YES, otherwise you will not receive a High-DPI OpenGL canvas. + * + * If the window is created with the `SDL_WINDOW_ALLOW_HIGHDPI` flag, its size + * in pixels may differ from its size in screen coordinates on platforms with + * high-DPI support (e.g. iOS and macOS). Use SDL_GetWindowSize() to query the + * client area's size in screen coordinates, and SDL_GL_GetDrawableSize() or + * SDL_GetRendererOutputSize() to query the drawable size in pixels. + * + * If the window is set fullscreen, the width and height parameters `w` and + * `h` will not be used. However, invalid size parameters (e.g. too large) may + * still fail. Window size is actually limited to 16384 x 16384 for all + * platforms at window creation. + * + * If the window is created with any of the SDL_WINDOW_OPENGL or + * SDL_WINDOW_VULKAN flags, then the corresponding LoadLibrary function + * (SDL_GL_LoadLibrary or SDL_Vulkan_LoadLibrary) is called and the + * corresponding UnloadLibrary function is called by SDL_DestroyWindow(). + * + * If SDL_WINDOW_VULKAN is specified and there isn't a working Vulkan driver, + * SDL_CreateWindow() will fail because SDL_Vulkan_LoadLibrary() will fail. + * + * If SDL_WINDOW_METAL is specified on an OS that does not support Metal, + * SDL_CreateWindow() will fail. + * + * On non-Apple devices, SDL requires you to either not link to the Vulkan + * loader or link to a dynamic library version. This limitation may be removed + * in a future version of SDL. + * + * \param title the title of the window, in UTF-8 encoding + * \param x the x position of the window, `SDL_WINDOWPOS_CENTERED`, or + * `SDL_WINDOWPOS_UNDEFINED` + * \param y the y position of the window, `SDL_WINDOWPOS_CENTERED`, or + * `SDL_WINDOWPOS_UNDEFINED` + * \param w the width of the window, in screen coordinates + * \param h the height of the window, in screen coordinates + * \param flags 0, or one or more SDL_WindowFlags OR'd together + * \returns the window that was created or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindowFrom + * \sa SDL_DestroyWindow + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, + int x, int y, int w, + int h, Uint32 flags); + +/** + * Create an SDL window from an existing native window. + * + * In some cases (e.g. OpenGL) and on some platforms (e.g. Microsoft Windows) + * the hint `SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT` needs to be configured + * before using SDL_CreateWindowFrom(). + * + * \param data a pointer to driver-dependent window creation data, typically + * your native window cast to a void* + * \returns the window that was created or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindow + * \sa SDL_DestroyWindow + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowFrom(const void *data); + +/** + * Get the numeric ID of a window. + * + * The numeric ID is what SDL_WindowEvent references, and is necessary to map + * these events to specific SDL_Window objects. + * + * \param window the window to query + * \returns the ID of the window on success or 0 on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowFromID + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowID(SDL_Window * window); + +/** + * Get a window from a stored ID. + * + * The numeric ID is what SDL_WindowEvent references, and is necessary to map + * these events to specific SDL_Window objects. + * + * \param id the ID of the window + * \returns the window associated with `id` or NULL if it doesn't exist; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowID + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(Uint32 id); + +/** + * Get the window flags. + * + * \param window the window to query + * \returns a mask of the SDL_WindowFlags associated with `window` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindow + * \sa SDL_HideWindow + * \sa SDL_MaximizeWindow + * \sa SDL_MinimizeWindow + * \sa SDL_SetWindowFullscreen + * \sa SDL_SetWindowGrab + * \sa SDL_ShowWindow + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_Window * window); + +/** + * Set the title of a window. + * + * This string is expected to be in UTF-8 encoding. + * + * \param window the window to change + * \param title the desired window title in UTF-8 format + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowTitle + */ +extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_Window * window, + const char *title); + +/** + * Get the title of a window. + * + * \param window the window to query + * \returns the title of the window in UTF-8 format or "" if there is no + * title. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowTitle + */ +extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_Window * window); + +/** + * Set the icon for a window. + * + * \param window the window to change + * \param icon an SDL_Surface structure containing the icon for the window + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window, + SDL_Surface * icon); + +/** + * Associate an arbitrary named pointer with a window. + * + * `name` is case-sensitive. + * + * \param window the window to associate with the pointer + * \param name the name of the pointer + * \param userdata the associated pointer + * \returns the previous value associated with `name`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowData + */ +extern DECLSPEC void* SDLCALL SDL_SetWindowData(SDL_Window * window, + const char *name, + void *userdata); + +/** + * Retrieve the data pointer associated with a window. + * + * \param window the window to query + * \param name the name of the pointer + * \returns the value associated with `name`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowData + */ +extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window, + const char *name); + +/** + * Set the position of a window. + * + * The window coordinate origin is the upper left of the display. + * + * \param window the window to reposition + * \param x the x coordinate of the window in screen coordinates, or + * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED` + * \param y the y coordinate of the window in screen coordinates, or + * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowPosition + */ +extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window, + int x, int y); + +/** + * Get the position of a window. + * + * If you do not need the value for one of the positions a NULL may be passed + * in the `x` or `y` parameter. + * + * \param window the window to query + * \param x a pointer filled in with the x position of the window, in screen + * coordinates, may be NULL + * \param y a pointer filled in with the y position of the window, in screen + * coordinates, may be NULL + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowPosition + */ +extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window, + int *x, int *y); + +/** + * Set the size of a window's client area. + * + * The window size in screen coordinates may differ from the size in pixels, + * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform + * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize() or + * SDL_GetRendererOutputSize() to get the real client area size in pixels. + * + * Fullscreen windows automatically match the size of the display mode, and + * you should use SDL_SetWindowDisplayMode() to change their size. + * + * \param window the window to change + * \param w the width of the window in pixels, in screen coordinates, must be + * > 0 + * \param h the height of the window in pixels, in screen coordinates, must be + * > 0 + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowSize + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, + int h); + +/** + * Get the size of a window's client area. + * + * NULL can safely be passed as the `w` or `h` parameter if the width or + * height value is not desired. + * + * The window size in screen coordinates may differ from the size in pixels, + * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform + * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize(), + * SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to get the + * real client area size in pixels. + * + * \param window the window to query the width and height from + * \param w a pointer filled in with the width of the window, in screen + * coordinates, may be NULL + * \param h a pointer filled in with the height of the window, in screen + * coordinates, may be NULL + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetDrawableSize + * \sa SDL_Vulkan_GetDrawableSize + * \sa SDL_SetWindowSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w, + int *h); + +/** + * Get the size of a window's borders (decorations) around the client area. + * + * Note: If this function fails (returns -1), the size values will be + * initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as if the + * window in question was borderless. + * + * Note: This function may fail on systems where the window has not yet been + * decorated by the display server (for example, immediately after calling + * SDL_CreateWindow). It is recommended that you wait at least until the + * window has been presented and composited, so that the window system has a + * chance to decorate the window and provide the border dimensions to SDL. + * + * This function also returns -1 if getting the information is not supported. + * + * \param window the window to query the size values of the border + * (decorations) from + * \param top pointer to variable for storing the size of the top border; NULL + * is permitted + * \param left pointer to variable for storing the size of the left border; + * NULL is permitted + * \param bottom pointer to variable for storing the size of the bottom + * border; NULL is permitted + * \param right pointer to variable for storing the size of the right border; + * NULL is permitted + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetWindowSize + */ +extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window, + int *top, int *left, + int *bottom, int *right); + +/** + * Set the minimum size of a window's client area. + * + * \param window the window to change + * \param min_w the minimum width of the window in pixels + * \param min_h the minimum height of the window in pixels + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMinimumSize + * \sa SDL_SetWindowMaximumSize + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMinimumSize(SDL_Window * window, + int min_w, int min_h); + +/** + * Get the minimum size of a window's client area. + * + * \param window the window to query + * \param w a pointer filled in with the minimum width of the window, may be + * NULL + * \param h a pointer filled in with the minimum height of the window, may be + * NULL + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMaximumSize + * \sa SDL_SetWindowMinimumSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowMinimumSize(SDL_Window * window, + int *w, int *h); + +/** + * Set the maximum size of a window's client area. + * + * \param window the window to change + * \param max_w the maximum width of the window in pixels + * \param max_h the maximum height of the window in pixels + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMaximumSize + * \sa SDL_SetWindowMinimumSize + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMaximumSize(SDL_Window * window, + int max_w, int max_h); + +/** + * Get the maximum size of a window's client area. + * + * \param window the window to query + * \param w a pointer filled in with the maximum width of the window, may be + * NULL + * \param h a pointer filled in with the maximum height of the window, may be + * NULL + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMinimumSize + * \sa SDL_SetWindowMaximumSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window, + int *w, int *h); + +/** + * Set the border state of a window. + * + * This will add or remove the window's `SDL_WINDOW_BORDERLESS` flag and add + * or remove the border from the actual window. This is a no-op if the + * window's border already matches the requested state. + * + * You can't change the border state of a fullscreen window. + * + * \param window the window of which to change the border state + * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowFlags + */ +extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window, + SDL_bool bordered); + +/** + * Set the user-resizable state of a window. + * + * This will add or remove the window's `SDL_WINDOW_RESIZABLE` flag and + * allow/disallow user resizing of the window. This is a no-op if the window's + * resizable state already matches the requested state. + * + * You can't change the resizable state of a fullscreen window. + * + * \param window the window of which to change the resizable state + * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetWindowFlags + */ +extern DECLSPEC void SDLCALL SDL_SetWindowResizable(SDL_Window * window, + SDL_bool resizable); + +/** + * Set the window to always be above the others. + * + * This will add or remove the window's `SDL_WINDOW_ALWAYS_ON_TOP` flag. This + * will bring the window to the front and keep the window above the rest. + * + * \param window The window of which to change the always on top state + * \param on_top SDL_TRUE to set the window always on top, SDL_FALSE to + * disable + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetWindowFlags + */ +extern DECLSPEC void SDLCALL SDL_SetWindowAlwaysOnTop(SDL_Window * window, + SDL_bool on_top); + +/** + * Show a window. + * + * \param window the window to show + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HideWindow + * \sa SDL_RaiseWindow + */ +extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_Window * window); + +/** + * Hide a window. + * + * \param window the window to hide + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ShowWindow + */ +extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_Window * window); + +/** + * Raise a window above other windows and set the input focus. + * + * \param window the window to raise + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_Window * window); + +/** + * Make a window as large as possible. + * + * \param window the window to maximize + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MinimizeWindow + * \sa SDL_RestoreWindow + */ +extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window * window); + +/** + * Minimize a window to an iconic representation. + * + * \param window the window to minimize + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MaximizeWindow + * \sa SDL_RestoreWindow + */ +extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_Window * window); + +/** + * Restore the size and position of a minimized or maximized window. + * + * \param window the window to restore + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MaximizeWindow + * \sa SDL_MinimizeWindow + */ +extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window); + +/** + * Set a window's fullscreen state. + * + * `flags` may be `SDL_WINDOW_FULLSCREEN`, for "real" fullscreen with a + * videomode change; `SDL_WINDOW_FULLSCREEN_DESKTOP` for "fake" fullscreen + * that takes the size of the desktop; and 0 for windowed mode. + * + * \param window the window to change + * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0 + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowDisplayMode + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window, + Uint32 flags); + +/** + * Get the SDL surface associated with the window. + * + * A new surface will be created with the optimal format for the window, if + * necessary. This surface will be freed when the window is destroyed. Do not + * free this surface. + * + * This surface will be invalidated if the window is resized. After resizing a + * window this function must be called again to return a valid surface. + * + * You may not combine this with 3D or the rendering API on this window. + * + * This function is affected by `SDL_HINT_FRAMEBUFFER_ACCELERATION`. + * + * \param window the window to query + * \returns the surface associated with the window, or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_UpdateWindowSurface + * \sa SDL_UpdateWindowSurfaceRects + */ +extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window); + +/** + * Copy the window surface to the screen. + * + * This is the function you use to reflect any changes to the surface on the + * screen. + * + * This function is equivalent to the SDL 1.2 API SDL_Flip(). + * + * \param window the window to update + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowSurface + * \sa SDL_UpdateWindowSurfaceRects + */ +extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window); + +/** + * Copy areas of the window surface to the screen. + * + * This is the function you use to reflect changes to portions of the surface + * on the screen. + * + * This function is equivalent to the SDL 1.2 API SDL_UpdateRects(). + * + * \param window the window to update + * \param rects an array of SDL_Rect structures representing areas of the + * surface to copy + * \param numrects the number of rectangles + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowSurface + * \sa SDL_UpdateWindowSurface + */ +extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window, + const SDL_Rect * rects, + int numrects); + +/** + * Set a window's input grab mode. + * + * When input is grabbed, the mouse is confined to the window. This function + * will also grab the keyboard if `SDL_HINT_GRAB_KEYBOARD` is set. To grab the + * keyboard without also grabbing the mouse, use SDL_SetWindowKeyboardGrab(). + * + * If the caller enables a grab while another window is currently grabbed, the + * other window loses its grab in favor of the caller's window. + * + * \param window the window for which the input grab mode should be set + * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetGrabbedWindow + * \sa SDL_GetWindowGrab + */ +extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * Set a window's keyboard grab mode. + * + * Keyboard grab enables capture of system keyboard shortcuts like Alt+Tab or + * the Meta/Super key. Note that not all system keyboard shortcuts can be + * captured by applications (one example is Ctrl+Alt+Del on Windows). + * + * This is primarily intended for specialized applications such as VNC clients + * or VM frontends. Normal games should not use keyboard grab. + * + * When keyboard grab is enabled, SDL will continue to handle Alt+Tab when the + * window is full-screen to ensure the user is not trapped in your + * application. If you have a custom keyboard shortcut to exit fullscreen + * mode, you may suppress this behavior with + * `SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED`. + * + * If the caller enables a grab while another window is currently grabbed, the + * other window loses its grab in favor of the caller's window. + * + * \param window The window for which the keyboard grab mode should be set. + * \param grabbed This is SDL_TRUE to grab keyboard, and SDL_FALSE to release. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetWindowKeyboardGrab + * \sa SDL_SetWindowMouseGrab + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC void SDLCALL SDL_SetWindowKeyboardGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * Set a window's mouse grab mode. + * + * Mouse grab confines the mouse cursor to the window. + * + * \param window The window for which the mouse grab mode should be set. + * \param grabbed This is SDL_TRUE to grab mouse, and SDL_FALSE to release. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetWindowMouseGrab + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMouseGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * Get a window's input grab mode. + * + * \param window the window to query + * \returns SDL_TRUE if input is grabbed, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window); + +/** + * Get a window's keyboard grab mode. + * + * \param window the window to query + * \returns SDL_TRUE if keyboard is grabbed, and SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_GetWindowGrab + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowKeyboardGrab(SDL_Window * window); + +/** + * Get a window's mouse grab mode. + * + * \param window the window to query + * \returns SDL_TRUE if mouse is grabbed, and SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_GetWindowGrab + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowMouseGrab(SDL_Window * window); + +/** + * Get the window that currently has an input grab enabled. + * + * \returns the window if input is grabbed or NULL otherwise. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetWindowGrab + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetGrabbedWindow(void); + +/** + * Confines the cursor to the specified area of a window. + * + * Note that this does NOT grab the cursor, it only defines the area a cursor + * is restricted to when the window has mouse focus. + * + * \param window The window that will be associated with the barrier. + * \param rect A rectangle area in window-relative coordinates. If NULL the + * barrier for the specified window will be destroyed. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GetWindowMouseRect + * \sa SDL_SetWindowMouseGrab + */ +extern DECLSPEC int SDLCALL SDL_SetWindowMouseRect(SDL_Window * window, const SDL_Rect * rect); + +/** + * Get the mouse confinement rectangle of a window. + * + * \param window The window to query + * \returns A pointer to the mouse confinement rectangle of a window, or NULL + * if there isn't one. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_SetWindowMouseRect + */ +extern DECLSPEC const SDL_Rect * SDLCALL SDL_GetWindowMouseRect(SDL_Window * window); + +/** + * Set the brightness (gamma multiplier) for a given window's display. + * + * Despite the name and signature, this method sets the brightness of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) The + * brightness set will not follow the window if it is moved to another + * display. + * + * Many platforms will refuse to set the display brightness in modern times. + * You are better off using a shader to adjust gamma during rendering, or + * something similar. + * + * \param window the window used to select the display whose brightness will + * be changed + * \param brightness the brightness (gamma multiplier) value to set where 0.0 + * is completely dark and 1.0 is normal brightness + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowBrightness + * \sa SDL_SetWindowGammaRamp + */ +extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float brightness); + +/** + * Get the brightness (gamma multiplier) for a given window's display. + * + * Despite the name and signature, this method retrieves the brightness of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) + * + * \param window the window used to select the display whose brightness will + * be queried + * \returns the brightness for the display where 0.0 is completely dark and + * 1.0 is normal brightness. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowBrightness + */ +extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window); + +/** + * Set the opacity for a window. + * + * The parameter `opacity` will be clamped internally between 0.0f + * (transparent) and 1.0f (opaque). + * + * This function also returns -1 if setting the opacity isn't supported. + * + * \param window the window which will be made transparent or opaque + * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetWindowOpacity + */ +extern DECLSPEC int SDLCALL SDL_SetWindowOpacity(SDL_Window * window, float opacity); + +/** + * Get the opacity of a window. + * + * If transparency isn't supported on this platform, opacity will be reported + * as 1.0f without error. + * + * The parameter `opacity` is ignored if it is NULL. + * + * This function also returns -1 if an invalid window was provided. + * + * \param window the window to get the current opacity value from + * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_SetWindowOpacity + */ +extern DECLSPEC int SDLCALL SDL_GetWindowOpacity(SDL_Window * window, float * out_opacity); + +/** + * Set the window as a modal for another window. + * + * \param modal_window the window that should be set modal + * \param parent_window the parent window for the modal window + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + */ +extern DECLSPEC int SDLCALL SDL_SetWindowModalFor(SDL_Window * modal_window, SDL_Window * parent_window); + +/** + * Explicitly set input focus to the window. + * + * You almost certainly want SDL_RaiseWindow() instead of this function. Use + * this with caution, as you might give focus to a window that is completely + * obscured by other windows. + * + * \param window the window that should get the input focus + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_RaiseWindow + */ +extern DECLSPEC int SDLCALL SDL_SetWindowInputFocus(SDL_Window * window); + +/** + * Set the gamma ramp for the display that owns a given window. + * + * Set the gamma translation table for the red, green, and blue channels of + * the video hardware. Each table is an array of 256 16-bit quantities, + * representing a mapping between the input and output for that channel. The + * input is the index into the array, and the output is the 16-bit gamma value + * at that index, scaled to the output color precision. + * + * Despite the name and signature, this method sets the gamma ramp of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) The gamma + * ramp set will not follow the window if it is moved to another display. + * + * \param window the window used to select the display whose gamma ramp will + * be changed + * \param red a 256 element array of 16-bit quantities representing the + * translation table for the red channel, or NULL + * \param green a 256 element array of 16-bit quantities representing the + * translation table for the green channel, or NULL + * \param blue a 256 element array of 16-bit quantities representing the + * translation table for the blue channel, or NULL + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowGammaRamp + */ +extern DECLSPEC int SDLCALL SDL_SetWindowGammaRamp(SDL_Window * window, + const Uint16 * red, + const Uint16 * green, + const Uint16 * blue); + +/** + * Get the gamma ramp for a given window's display. + * + * Despite the name and signature, this method retrieves the gamma ramp of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) + * + * \param window the window used to select the display whose gamma ramp will + * be queried + * \param red a 256 element array of 16-bit quantities filled in with the + * translation table for the red channel, or NULL + * \param green a 256 element array of 16-bit quantities filled in with the + * translation table for the green channel, or NULL + * \param blue a 256 element array of 16-bit quantities filled in with the + * translation table for the blue channel, or NULL + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowGammaRamp + */ +extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window, + Uint16 * red, + Uint16 * green, + Uint16 * blue); + +/** + * Possible return values from the SDL_HitTest callback. + * + * \sa SDL_HitTest + */ +typedef enum +{ + SDL_HITTEST_NORMAL, /**< Region is normal. No special properties. */ + SDL_HITTEST_DRAGGABLE, /**< Region can drag entire window. */ + SDL_HITTEST_RESIZE_TOPLEFT, + SDL_HITTEST_RESIZE_TOP, + SDL_HITTEST_RESIZE_TOPRIGHT, + SDL_HITTEST_RESIZE_RIGHT, + SDL_HITTEST_RESIZE_BOTTOMRIGHT, + SDL_HITTEST_RESIZE_BOTTOM, + SDL_HITTEST_RESIZE_BOTTOMLEFT, + SDL_HITTEST_RESIZE_LEFT +} SDL_HitTestResult; + +/** + * Callback used for hit-testing. + * + * \param win the SDL_Window where hit-testing was set on + * \param area an SDL_Point which should be hit-tested + * \param data what was passed as `callback_data` to SDL_SetWindowHitTest() + * \return an SDL_HitTestResult value. + * + * \sa SDL_SetWindowHitTest + */ +typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win, + const SDL_Point *area, + void *data); + +/** + * Provide a callback that decides if a window region has special properties. + * + * Normally windows are dragged and resized by decorations provided by the + * system window manager (a title bar, borders, etc), but for some apps, it + * makes sense to drag them from somewhere else inside the window itself; for + * example, one might have a borderless window that wants to be draggable from + * any part, or simulate its own title bar, etc. + * + * This function lets the app provide a callback that designates pieces of a + * given window as special. This callback is run during event processing if we + * need to tell the OS to treat a region of the window specially; the use of + * this callback is known as "hit testing." + * + * Mouse input may not be delivered to your application if it is within a + * special area; the OS will often apply that input to moving the window or + * resizing the window and not deliver it to the application. + * + * Specifying NULL for a callback disables hit-testing. Hit-testing is + * disabled by default. + * + * Platforms that don't support this functionality will return -1 + * unconditionally, even if you're attempting to disable hit-testing. + * + * Your callback may fire at any time, and its firing does not indicate any + * specific behavior (for example, on Windows, this certainly might fire when + * the OS is deciding whether to drag your window, but it fires for lots of + * other reasons, too, some unrelated to anything you probably care about _and + * when the mouse isn't actually at the location it is testing_). Since this + * can fire at any time, you should try to keep your callback efficient, + * devoid of allocations, etc. + * + * \param window the window to set hit-testing on + * \param callback the function to call when doing a hit-test + * \param callback_data an app-defined void pointer passed to **callback** + * \returns 0 on success or -1 on error (including unsupported); call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC int SDLCALL SDL_SetWindowHitTest(SDL_Window * window, + SDL_HitTest callback, + void *callback_data); + +/** + * Request a window to demand attention from the user. + * + * \param window the window to be flashed + * \param operation the flash operation + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_FlashWindow(SDL_Window * window, SDL_FlashOperation operation); + +/** + * Destroy a window. + * + * If `window` is NULL, this function will return immediately after setting + * the SDL error message to "Invalid window". See SDL_GetError(). + * + * \param window the window to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindow + * \sa SDL_CreateWindowFrom + */ +extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window * window); + + +/** + * Check whether the screensaver is currently enabled. + * + * The screensaver is disabled by default since SDL 2.0.2. Before SDL 2.0.2 + * the screensaver was enabled by default. + * + * The default can also be changed using `SDL_HINT_VIDEO_ALLOW_SCREENSAVER`. + * + * \returns SDL_TRUE if the screensaver is enabled, SDL_FALSE if it is + * disabled. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DisableScreenSaver + * \sa SDL_EnableScreenSaver + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenSaverEnabled(void); + +/** + * Allow the screen to be blanked by a screen saver. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DisableScreenSaver + * \sa SDL_IsScreenSaverEnabled + */ +extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void); + +/** + * Prevent the screen from being blanked by a screen saver. + * + * If you disable the screensaver, it is automatically re-enabled when SDL + * quits. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_EnableScreenSaver + * \sa SDL_IsScreenSaverEnabled + */ +extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void); + + +/** + * \name OpenGL support functions + */ +/* @{ */ + +/** + * Dynamically load an OpenGL library. + * + * This should be done after initializing the video driver, but before + * creating any OpenGL windows. If no OpenGL library is loaded, the default + * library will be loaded upon creation of the first OpenGL window. + * + * If you do this, you need to retrieve all of the GL functions used in your + * program from the dynamic library using SDL_GL_GetProcAddress(). + * + * \param path the platform dependent OpenGL library name, or NULL to open the + * default OpenGL library + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetProcAddress + * \sa SDL_GL_UnloadLibrary + */ +extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); + +/** + * Get an OpenGL function by name. + * + * If the GL library is loaded at runtime with SDL_GL_LoadLibrary(), then all + * GL functions must be retrieved this way. Usually this is used to retrieve + * function pointers to OpenGL extensions. + * + * There are some quirks to looking up OpenGL functions that require some + * extra care from the application. If you code carefully, you can handle + * these quirks without any platform-specific code, though: + * + * - On Windows, function pointers are specific to the current GL context; + * this means you need to have created a GL context and made it current + * before calling SDL_GL_GetProcAddress(). If you recreate your context or + * create a second context, you should assume that any existing function + * pointers aren't valid to use with it. This is (currently) a + * Windows-specific limitation, and in practice lots of drivers don't suffer + * this limitation, but it is still the way the wgl API is documented to + * work and you should expect crashes if you don't respect it. Store a copy + * of the function pointers that comes and goes with context lifespan. + * - On X11, function pointers returned by this function are valid for any + * context, and can even be looked up before a context is created at all. + * This means that, for at least some common OpenGL implementations, if you + * look up a function that doesn't exist, you'll get a non-NULL result that + * is _NOT_ safe to call. You must always make sure the function is actually + * available for a given GL context before calling it, by checking for the + * existence of the appropriate extension with SDL_GL_ExtensionSupported(), + * or verifying that the version of OpenGL you're using offers the function + * as core functionality. + * - Some OpenGL drivers, on all platforms, *will* return NULL if a function + * isn't supported, but you can't count on this behavior. Check for + * extensions you use, and if you get a NULL anyway, act as if that + * extension wasn't available. This is probably a bug in the driver, but you + * can code defensively for this scenario anyhow. + * - Just because you're on Linux/Unix, don't assume you'll be using X11. + * Next-gen display servers are waiting to replace it, and may or may not + * make the same promises about function pointers. + * - OpenGL function pointers must be declared `APIENTRY` as in the example + * code. This will ensure the proper calling convention is followed on + * platforms where this matters (Win32) thereby avoiding stack corruption. + * + * \param proc the name of an OpenGL function + * \returns a pointer to the named OpenGL function. The returned pointer + * should be cast to the appropriate function signature. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_ExtensionSupported + * \sa SDL_GL_LoadLibrary + * \sa SDL_GL_UnloadLibrary + */ +extern DECLSPEC void *SDLCALL SDL_GL_GetProcAddress(const char *proc); + +/** + * Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_LoadLibrary + */ +extern DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void); + +/** + * Check if an OpenGL extension is supported for the current context. + * + * This function operates on the current GL context; you must have created a + * context and it must be current before calling this function. Do not assume + * that all contexts you create will have the same set of extensions + * available, or that recreating an existing context will offer the same + * extensions again. + * + * While it's probably not a massive overhead, this function is not an O(1) + * operation. Check the extensions you care about after creating the GL + * context and save that information somewhere instead of calling the function + * every time you need to know. + * + * \param extension the name of the extension to check + * \returns SDL_TRUE if the extension is supported, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GL_ExtensionSupported(const char + *extension); + +/** + * Reset all previously set OpenGL context attributes to their default values. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_GL_GetAttribute + * \sa SDL_GL_SetAttribute + */ +extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void); + +/** + * Set an OpenGL window attribute before window creation. + * + * This function sets the OpenGL attribute `attr` to `value`. The requested + * attributes should be set before creating an OpenGL window. You should use + * SDL_GL_GetAttribute() to check the values after creating the OpenGL + * context, since the values obtained can differ from the requested ones. + * + * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to set + * \param value the desired value for the attribute + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetAttribute + * \sa SDL_GL_ResetAttributes + */ +extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); + +/** + * Get the actual value for an attribute from the current context. + * + * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to get + * \param value a pointer filled in with the current value of `attr` + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_ResetAttributes + * \sa SDL_GL_SetAttribute + */ +extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value); + +/** + * Create an OpenGL context for an OpenGL window, and make it current. + * + * Windows users new to OpenGL should note that, for historical reasons, GL + * functions added after OpenGL version 1.1 are not available by default. + * Those functions must be loaded at run-time, either with an OpenGL + * extension-handling library or with SDL_GL_GetProcAddress() and its related + * functions. + * + * SDL_GLContext is an alias for `void *`. It's opaque to the application. + * + * \param window the window to associate with the context + * \returns the OpenGL context associated with `window` or NULL on error; call + * SDL_GetError() for more details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_DeleteContext + * \sa SDL_GL_MakeCurrent + */ +extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window * + window); + +/** + * Set up an OpenGL context for rendering into an OpenGL window. + * + * The context must have been created with a compatible window. + * + * \param window the window to associate with the context + * \param context the OpenGL context to associate with the window + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_CreateContext + */ +extern DECLSPEC int SDLCALL SDL_GL_MakeCurrent(SDL_Window * window, + SDL_GLContext context); + +/** + * Get the currently active OpenGL window. + * + * \returns the currently active OpenGL window on success or NULL on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void); + +/** + * Get the currently active OpenGL context. + * + * \returns the currently active OpenGL context or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_MakeCurrent + */ +extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void); + +/** + * Get the size of a window's underlying drawable in pixels. + * + * This returns info useful for calling glViewport(). + * + * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI + * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a + * platform with high-DPI support (Apple calls this "Retina"), and not + * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. + * + * \param window the window from which the drawable size should be queried + * \param w a pointer to variable for storing the width in pixels, may be NULL + * \param h a pointer to variable for storing the height in pixels, may be + * NULL + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_CreateWindow + * \sa SDL_GetWindowSize + */ +extern DECLSPEC void SDLCALL SDL_GL_GetDrawableSize(SDL_Window * window, int *w, + int *h); + +/** + * Set the swap interval for the current OpenGL context. + * + * Some systems allow specifying -1 for the interval, to enable adaptive + * vsync. Adaptive vsync works the same as vsync, but if you've already missed + * the vertical retrace for a given frame, it swaps buffers immediately, which + * might be less jarring for the user during occasional framerate drops. If an + * application requests adaptive vsync and the system does not support it, + * this function will fail and return -1. In such a case, you should probably + * retry the call with 1 for the interval. + * + * Adaptive vsync is implemented for some glX drivers with + * GLX_EXT_swap_control_tear: + * + * https://www.opengl.org/registry/specs/EXT/glx_swap_control_tear.txt + * + * and for some Windows drivers with WGL_EXT_swap_control_tear: + * + * https://www.opengl.org/registry/specs/EXT/wgl_swap_control_tear.txt + * + * Read more on the Khronos wiki: + * https://www.khronos.org/opengl/wiki/Swap_Interval#Adaptive_Vsync + * + * \param interval 0 for immediate updates, 1 for updates synchronized with + * the vertical retrace, -1 for adaptive vsync + * \returns 0 on success or -1 if setting the swap interval is not supported; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetSwapInterval + */ +extern DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval); + +/** + * Get the swap interval for the current OpenGL context. + * + * If the system can't determine the swap interval, or there isn't a valid + * current context, this function will return 0 as a safe default. + * + * \returns 0 if there is no vertical retrace synchronization, 1 if the buffer + * swap is synchronized with the vertical retrace, and -1 if late + * swaps happen immediately instead of waiting for the next retrace; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_SetSwapInterval + */ +extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void); + +/** + * Update a window with OpenGL rendering. + * + * This is used with double-buffered OpenGL contexts, which are the default. + * + * On macOS, make sure you bind 0 to the draw framebuffer before swapping the + * window, otherwise nothing will happen. If you aren't using + * glBindFramebuffer(), this is the default and you won't have to do anything + * extra. + * + * \param window the window to change + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window); + +/** + * Delete an OpenGL context. + * + * \param context the OpenGL context to be deleted + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_CreateContext + */ +extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context); + +/* @} *//* OpenGL support functions */ + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_video_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_vulkan.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_vulkan.h new file mode 100644 index 00000000000..cca130b58a1 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/SDL_vulkan.h @@ -0,0 +1,215 @@ +/* + Simple DirectMedia Layer + Copyright (C) 2017, Mark Callow + + 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. +*/ + +/** + * \file SDL_vulkan.h + * + * Header file for functions to creating Vulkan surfaces on SDL windows. + */ + +#ifndef SDL_vulkan_h_ +#define SDL_vulkan_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Avoid including vulkan.h, don't define VkInstance if it's already included */ +#ifdef VULKAN_H_ +#define NO_SDL_VULKAN_TYPEDEFS +#endif +#ifndef NO_SDL_VULKAN_TYPEDEFS +#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; + +#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) +#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; +#else +#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; +#endif + +VK_DEFINE_HANDLE(VkInstance) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) + +#endif /* !NO_SDL_VULKAN_TYPEDEFS */ + +typedef VkInstance SDL_vulkanInstance; +typedef VkSurfaceKHR SDL_vulkanSurface; /* for compatibility with Tizen */ + +/** + * \name Vulkan support functions + * + * \note SDL_Vulkan_GetInstanceExtensions & SDL_Vulkan_CreateSurface API + * is compatable with Tizen's implementation of Vulkan in SDL. + */ +/* @{ */ + +/** + * Dynamically load the Vulkan loader library. + * + * This should be called after initializing the video driver, but before + * creating any Vulkan windows. If no Vulkan loader library is loaded, the + * default library will be loaded upon creation of the first Vulkan window. + * + * It is fairly common for Vulkan applications to link with libvulkan instead + * of explicitly loading it at run time. This will work with SDL provided the + * application links to a dynamic library and both it and SDL use the same + * search path. + * + * If you specify a non-NULL `path`, an application should retrieve all of the + * Vulkan functions it uses from the dynamic library using + * SDL_Vulkan_GetVkGetInstanceProcAddr unless you can guarantee `path` points + * to the same vulkan loader library the application linked to. + * + * On Apple devices, if `path` is NULL, SDL will attempt to find the + * `vkGetInstanceProcAddr` address within all the Mach-O images of the current + * process. This is because it is fairly common for Vulkan applications to + * link with libvulkan (and historically MoltenVK was provided as a static + * library). If it is not found, on macOS, SDL will attempt to load + * `vulkan.framework/vulkan`, `libvulkan.1.dylib`, + * `MoltenVK.framework/MoltenVK`, and `libMoltenVK.dylib`, in that order. On + * iOS, SDL will attempt to load `libMoltenVK.dylib`. Applications using a + * dynamic framework or .dylib must ensure it is included in its application + * bundle. + * + * On non-Apple devices, application linking with a static libvulkan is not + * supported. Either do not link to the Vulkan loader or link to a dynamic + * library version. + * + * \param path The platform dependent Vulkan loader library name or NULL + * \returns 0 on success or -1 if the library couldn't be loaded; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_GetVkInstanceProcAddr + * \sa SDL_Vulkan_UnloadLibrary + */ +extern DECLSPEC int SDLCALL SDL_Vulkan_LoadLibrary(const char *path); + +/** + * Get the address of the `vkGetInstanceProcAddr` function. + * + * This should be called after either calling SDL_Vulkan_LoadLibrary() or + * creating an SDL_Window with the `SDL_WINDOW_VULKAN` flag. + * + * \returns the function pointer for `vkGetInstanceProcAddr` or NULL on error. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC void *SDLCALL SDL_Vulkan_GetVkGetInstanceProcAddr(void); + +/** + * Unload the Vulkan library previously loaded by SDL_Vulkan_LoadLibrary() + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_LoadLibrary + */ +extern DECLSPEC void SDLCALL SDL_Vulkan_UnloadLibrary(void); + +/** + * Get the names of the Vulkan instance extensions needed to create a surface + * with SDL_Vulkan_CreateSurface. + * + * If `pNames` is NULL, then the number of required Vulkan instance extensions + * is returned in `pCount`. Otherwise, `pCount` must point to a variable set + * to the number of elements in the `pNames` array, and on return the variable + * is overwritten with the number of names actually written to `pNames`. If + * `pCount` is less than the number of required extensions, at most `pCount` + * structures will be written. If `pCount` is smaller than the number of + * required extensions, SDL_FALSE will be returned instead of SDL_TRUE, to + * indicate that not all the required extensions were returned. + * + * The `window` parameter is currently needed to be valid as of SDL 2.0.8, + * however, this parameter will likely be removed in future releases + * + * \param window A window for which the required Vulkan instance extensions + * should be retrieved (will be deprecated in a future release) + * \param pCount A pointer to an unsigned int corresponding to the number of + * extensions to be returned + * \param pNames NULL or a pointer to an array to be filled with required + * Vulkan instance extensions + * \returns SDL_TRUE on success, SDL_FALSE on error. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_CreateSurface + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_GetInstanceExtensions(SDL_Window *window, + unsigned int *pCount, + const char **pNames); + +/** + * Create a Vulkan rendering surface for a window. + * + * The `window` must have been created with the `SDL_WINDOW_VULKAN` flag and + * `instance` must have been created with extensions returned by + * SDL_Vulkan_GetInstanceExtensions() enabled. + * + * \param window The window to which to attach the Vulkan surface + * \param instance The Vulkan instance handle + * \param surface A pointer to a VkSurfaceKHR handle to output the newly + * created surface + * \returns SDL_TRUE on success, SDL_FALSE on error. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_GetInstanceExtensions + * \sa SDL_Vulkan_GetDrawableSize + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_CreateSurface(SDL_Window *window, + VkInstance instance, + VkSurfaceKHR* surface); + +/** + * Get the size of the window's underlying drawable dimensions in pixels. + * + * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI + * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a + * platform with high-DPI support (Apple calls this "Retina"), and not + * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. + * + * \param window an SDL_Window for which the size is to be queried + * \param w Pointer to the variable to write the width to or NULL + * \param h Pointer to the variable to write the height to or NULL + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_GetWindowSize + * \sa SDL_CreateWindow + * \sa SDL_Vulkan_CreateSurface + */ +extern DECLSPEC void SDLCALL SDL_Vulkan_GetDrawableSize(SDL_Window * window, + int *w, int *h); + +/* @} *//* Vulkan support functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_vulkan_h_ */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/begin_code.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/begin_code.h new file mode 100644 index 00000000000..b1b1a3a9bea --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/begin_code.h @@ -0,0 +1,187 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file begin_code.h + * + * This file sets things up for C dynamic library function definitions, + * static inlined functions, and structures aligned at 4-byte alignment. + * If you don't like ugly C preprocessor code, don't look at this file. :) + */ + +/* This shouldn't be nested -- included it around code only. */ +#ifdef _begin_code_h +#error Nested inclusion of begin_code.h +#endif +#define _begin_code_h + +#ifndef SDL_DEPRECATED +# if (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */ +# define SDL_DEPRECATED __attribute__((deprecated)) +# else +# define SDL_DEPRECATED +# endif +#endif + +#ifndef SDL_UNUSED +# ifdef __GNUC__ +# define SDL_UNUSED __attribute__((unused)) +# else +# define SDL_UNUSED +# endif +#endif + +/* Some compilers use a special export keyword */ +#ifndef DECLSPEC +# if defined(__WIN32__) || defined(__WINRT__) || defined(__CYGWIN__) +# ifdef DLL_EXPORT +# define DECLSPEC __declspec(dllexport) +# else +# define DECLSPEC +# endif +# elif defined(__OS2__) +# ifdef BUILD_SDL +# define DECLSPEC __declspec(dllexport) +# else +# define DECLSPEC +# endif +# else +# if defined(__GNUC__) && __GNUC__ >= 4 +# define DECLSPEC __attribute__ ((visibility("default"))) +# else +# define DECLSPEC +# endif +# endif +#endif + +/* By default SDL uses the C calling convention */ +#ifndef SDLCALL +#if (defined(__WIN32__) || defined(__WINRT__)) && !defined(__GNUC__) +#define SDLCALL __cdecl +#elif defined(__OS2__) || defined(__EMX__) +#define SDLCALL _System +# if defined (__GNUC__) && !defined(_System) +# define _System /* for old EMX/GCC compat. */ +# endif +#else +#define SDLCALL +#endif +#endif /* SDLCALL */ + +/* Removed DECLSPEC on Symbian OS because SDL cannot be a DLL in EPOC */ +#ifdef __SYMBIAN32__ +#undef DECLSPEC +#define DECLSPEC +#endif /* __SYMBIAN32__ */ + +/* Force structure packing at 4 byte alignment. + This is necessary if the header is included in code which has structure + packing set to an alternate value, say for loading structures from disk. + The packing is reset to the previous value in close_code.h + */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) +#ifdef _MSC_VER +#pragma warning(disable: 4103) +#endif +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wpragma-pack" +#endif +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#ifdef _WIN64 +/* Use 8-byte alignment on 64-bit architectures, so pointers are aligned */ +#pragma pack(push,8) +#else +#pragma pack(push,4) +#endif +#endif /* Compiler needs structure packing set */ + +#ifndef SDL_INLINE +#if defined(__GNUC__) +#define SDL_INLINE __inline__ +#elif defined(_MSC_VER) || defined(__BORLANDC__) || \ + defined(__DMC__) || defined(__SC__) || \ + defined(__WATCOMC__) || defined(__LCC__) || \ + defined(__DECC) || defined(__CC_ARM) +#define SDL_INLINE __inline +#ifndef __inline__ +#define __inline__ __inline +#endif +#else +#define SDL_INLINE inline +#ifndef __inline__ +#define __inline__ inline +#endif +#endif +#endif /* SDL_INLINE not defined */ + +#ifndef SDL_FORCE_INLINE +#if defined(_MSC_VER) +#define SDL_FORCE_INLINE __forceinline +#elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) +#define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ +#else +#define SDL_FORCE_INLINE static SDL_INLINE +#endif +#endif /* SDL_FORCE_INLINE not defined */ + +#ifndef SDL_NORETURN +#if defined(__GNUC__) +#define SDL_NORETURN __attribute__((noreturn)) +#elif defined(_MSC_VER) +#define SDL_NORETURN __declspec(noreturn) +#else +#define SDL_NORETURN +#endif +#endif /* SDL_NORETURN not defined */ + +/* Apparently this is needed by several Windows compilers */ +#if !defined(__MACH__) +#ifndef NULL +#ifdef __cplusplus +#define NULL 0 +#else +#define NULL ((void *)0) +#endif +#endif /* NULL */ +#endif /* ! Mac OS X - breaks precompiled headers */ + +#ifndef SDL_FALLTHROUGH +#if (defined(__cplusplus) && __cplusplus >= 201703L) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L) +#define SDL_FALLTHROUGH [[fallthrough]] +#else +#if defined(__has_attribute) +#define _HAS_FALLTHROUGH __has_attribute(__fallthrough__) +#else +#define _HAS_FALLTHROUGH 0 +#endif /* __has_attribute */ +#if _HAS_FALLTHROUGH && \ + ((defined(__GNUC__) && __GNUC__ >= 7) || \ + (defined(__clang_major__) && __clang_major__ >= 10)) +#define SDL_FALLTHROUGH __attribute__((__fallthrough__)) +#else +#define SDL_FALLTHROUGH do {} while (0) /* fallthrough */ +#endif /* _HAS_FALLTHROUGH */ +#undef _HAS_FALLTHROUGH +#endif /* C++17 or C2x */ +#endif /* SDL_FALLTHROUGH not defined */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/close_code.h b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/close_code.h new file mode 100644 index 00000000000..dc73432f622 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/Headers/close_code.h @@ -0,0 +1,40 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file close_code.h + * + * This file reverses the effects of begin_code.h and should be included + * after you finish any function and structure declarations in your headers + */ + +#ifndef _begin_code_h +#error close_code.h included without matching begin_code.h +#endif +#undef _begin_code_h + +/* Reset structure packing at previous byte alignment */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#pragma pack(pop) +#endif /* Compiler needs structure packing set */ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/Info.plist b/vs/sdl2net/Xcode/iOS/SDL2.framework/Info.plist new file mode 100644 index 00000000000..da20a049235 Binary files /dev/null and b/vs/sdl2net/Xcode/iOS/SDL2.framework/Info.plist differ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/License.txt b/vs/sdl2net/Xcode/iOS/SDL2.framework/License.txt new file mode 100644 index 00000000000..d2785a68158 --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/License.txt @@ -0,0 +1,19 @@ + +Simple DirectMedia Layer +Copyright (C) 1997-2022 Sam Lantinga + +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. diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/ReadMe.txt b/vs/sdl2net/Xcode/iOS/SDL2.framework/ReadMe.txt new file mode 100644 index 00000000000..40ac3a14c1c --- /dev/null +++ b/vs/sdl2net/Xcode/iOS/SDL2.framework/ReadMe.txt @@ -0,0 +1,32 @@ +The Simple DirectMedia Layer (SDL for short) is a cross-platform +library designed to make it easy to write multi-media software, +such as games and emulators. + +The Simple DirectMedia Layer library source code is available from: +http://www.libsdl.org/ + +This library is distributed under the terms of the zlib license: +http://zlib.net/zlib_license.html + + +This packages contains the SDL framework for OS X. +Conforming with Apple guidelines, this framework +contains both the SDL runtime component and development header files. + + +To Install: +Copy the SDL2.framework to /Library/Frameworks + +You may alternatively install it in /Library/Frameworks +if your access privileges are not high enough. + + +Additional References: + + - Screencast tutorials for getting started with OpenSceneGraph/Mac OS X are + available at: + http://www.openscenegraph.org/projects/osg/wiki/Support/Tutorials/MacOSXTips + Though these are OpenSceneGraph centric, the same exact concepts apply to + SDL, thus the videos are recommended for everybody getting started with + developing on Mac OS X. (You can skim over the PlugIns stuff since SDL + doesn't have any PlugIns to worry about.) diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/SDL2 b/vs/sdl2net/Xcode/iOS/SDL2.framework/SDL2 new file mode 100644 index 00000000000..1a0305906ee Binary files /dev/null and b/vs/sdl2net/Xcode/iOS/SDL2.framework/SDL2 differ diff --git a/vs/sdl2net/Xcode/iOS/SDL2.framework/default.metallib b/vs/sdl2net/Xcode/iOS/SDL2.framework/default.metallib new file mode 100644 index 00000000000..681ab6a9cb2 Binary files /dev/null and b/vs/sdl2net/Xcode/iOS/SDL2.framework/default.metallib differ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Headers b/vs/sdl2net/Xcode/macOS/SDL2.framework/Headers new file mode 100644 index 00000000000..a177d2a6b92 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Resources b/vs/sdl2net/Xcode/macOS/SDL2.framework/Resources new file mode 100644 index 00000000000..953ee36f3bb --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/SDL2 b/vs/sdl2net/Xcode/macOS/SDL2.framework/SDL2 new file mode 100644 index 00000000000..9dd4e4fbb81 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/SDL2 @@ -0,0 +1 @@ +Versions/Current/SDL2 \ No newline at end of file diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL.h new file mode 100644 index 00000000000..28778f39258 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL.h @@ -0,0 +1,232 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL.h + * + * Main include header for the SDL library + */ + + +#ifndef SDL_h_ +#define SDL_h_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* As of version 0.5, SDL is loaded dynamically into the application */ + +/** + * \name SDL_INIT_* + * + * These are the flags which may be passed to SDL_Init(). You should + * specify the subsystems which you will be using in your application. + */ +/* @{ */ +#define SDL_INIT_TIMER 0x00000001u +#define SDL_INIT_AUDIO 0x00000010u +#define SDL_INIT_VIDEO 0x00000020u /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */ +#define SDL_INIT_JOYSTICK 0x00000200u /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */ +#define SDL_INIT_HAPTIC 0x00001000u +#define SDL_INIT_GAMECONTROLLER 0x00002000u /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */ +#define SDL_INIT_EVENTS 0x00004000u +#define SDL_INIT_SENSOR 0x00008000u +#define SDL_INIT_NOPARACHUTE 0x00100000u /**< compatibility; this flag is ignored. */ +#define SDL_INIT_EVERYTHING ( \ + SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ + SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_SENSOR \ + ) +/* @} */ + +/** + * Initialize the SDL library. + * + * SDL_Init() simply forwards to calling SDL_InitSubSystem(). Therefore, the + * two may be used interchangeably. Though for readability of your code + * SDL_InitSubSystem() might be preferred. + * + * The file I/O (for example: SDL_RWFromFile) and threading (SDL_CreateThread) + * subsystems are initialized by default. Message boxes + * (SDL_ShowSimpleMessageBox) also attempt to work without initializing the + * video subsystem, in hopes of being useful in showing an error dialog when + * SDL_Init fails. You must specifically initialize other subsystems if you + * use them in your application. + * + * Logging (such as SDL_Log) works without initialization, too. + * + * `flags` may be any of the following OR'd together: + * + * - `SDL_INIT_TIMER`: timer subsystem + * - `SDL_INIT_AUDIO`: audio subsystem + * - `SDL_INIT_VIDEO`: video subsystem; automatically initializes the events + * subsystem + * - `SDL_INIT_JOYSTICK`: joystick subsystem; automatically initializes the + * events subsystem + * - `SDL_INIT_HAPTIC`: haptic (force feedback) subsystem + * - `SDL_INIT_GAMECONTROLLER`: controller subsystem; automatically + * initializes the joystick subsystem + * - `SDL_INIT_EVENTS`: events subsystem + * - `SDL_INIT_EVERYTHING`: all of the above subsystems + * - `SDL_INIT_NOPARACHUTE`: compatibility; this flag is ignored + * + * Subsystem initialization is ref-counted, you must call SDL_QuitSubSystem() + * for each SDL_InitSubSystem() to correctly shutdown a subsystem manually (or + * call SDL_Quit() to force shutdown). If a subsystem is already loaded then + * this call will increase the ref-count and return. + * + * \param flags subsystem initialization flags + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_InitSubSystem + * \sa SDL_Quit + * \sa SDL_SetMainReady + * \sa SDL_WasInit + */ +extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); + +/** + * Compatibility function to initialize the SDL library. + * + * In SDL2, this function and SDL_Init() are interchangeable. + * + * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + * \sa SDL_Quit + * \sa SDL_QuitSubSystem + */ +extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); + +/** + * Shut down specific SDL subsystems. + * + * If you start a subsystem using a call to that subsystem's init function + * (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(), + * SDL_QuitSubSystem() and SDL_WasInit() will not work. You will need to use + * that subsystem's quit function (SDL_VideoQuit()) directly instead. But + * generally, you should not be using those functions directly anyhow; use + * SDL_Init() instead. + * + * You still need to call SDL_Quit() even if you close all open subsystems + * with SDL_QuitSubSystem(). + * + * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_InitSubSystem + * \sa SDL_Quit + */ +extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); + +/** + * Get a mask of the specified subsystems which are currently initialized. + * + * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. + * \returns a mask of all initialized subsystems if `flags` is 0, otherwise it + * returns the initialization status of the specified subsystems. + * + * The return value does not include SDL_INIT_NOPARACHUTE. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + * \sa SDL_InitSubSystem + */ +extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); + +/** + * Clean up all initialized subsystems. + * + * You should call this function even if you have already shutdown each + * initialized subsystem with SDL_QuitSubSystem(). It is safe to call this + * function even in the case of errors in initialization. + * + * If you start a subsystem using a call to that subsystem's init function + * (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(), + * then you must use that subsystem's quit function (SDL_VideoQuit()) to shut + * it down before calling SDL_Quit(). But generally, you should not be using + * those functions directly anyhow; use SDL_Init() instead. + * + * You can use this function with atexit() to ensure that it is run when your + * application is shutdown, but it is not wise to do this from a library or + * other dynamically loaded code. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + * \sa SDL_QuitSubSystem + */ +extern DECLSPEC void SDLCALL SDL_Quit(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_assert.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_assert.h new file mode 100644 index 00000000000..835e3eadc3a --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_assert.h @@ -0,0 +1,324 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_assert_h_ +#define SDL_assert_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SDL_ASSERT_LEVEL +#ifdef SDL_DEFAULT_ASSERT_LEVEL +#define SDL_ASSERT_LEVEL SDL_DEFAULT_ASSERT_LEVEL +#elif defined(_DEBUG) || defined(DEBUG) || \ + (defined(__GNUC__) && !defined(__OPTIMIZE__)) +#define SDL_ASSERT_LEVEL 2 +#else +#define SDL_ASSERT_LEVEL 1 +#endif +#endif /* SDL_ASSERT_LEVEL */ + +/* +These are macros and not first class functions so that the debugger breaks +on the assertion line and not in some random guts of SDL, and so each +assert can have unique static variables associated with it. +*/ + +#if defined(_MSC_VER) +/* Don't include intrin.h here because it contains C++ code */ + extern void __cdecl __debugbreak(void); + #define SDL_TriggerBreakpoint() __debugbreak() +#elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) ) + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) +#elif ( defined(__APPLE__) && (defined(__arm64__) || defined(__aarch64__)) ) /* this might work on other ARM targets, but this is a known quantity... */ + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #22\n\t" ) +#elif defined(__APPLE__) && defined(__arm__) + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "bkpt #22\n\t" ) +#elif defined(__386__) && defined(__WATCOMC__) + #define SDL_TriggerBreakpoint() { _asm { int 0x03 } } +#elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__) + #include + #define SDL_TriggerBreakpoint() raise(SIGTRAP) +#else + /* How do we trigger breakpoints on this platform? */ + #define SDL_TriggerBreakpoint() +#endif + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */ +# define SDL_FUNCTION __func__ +#elif ((__GNUC__ >= 2) || defined(_MSC_VER) || defined (__WATCOMC__)) +# define SDL_FUNCTION __FUNCTION__ +#else +# define SDL_FUNCTION "???" +#endif +#define SDL_FILE __FILE__ +#define SDL_LINE __LINE__ + +/* +sizeof (x) makes the compiler still parse the expression even without +assertions enabled, so the code is always checked at compile time, but +doesn't actually generate code for it, so there are no side effects or +expensive checks at run time, just the constant size of what x WOULD be, +which presumably gets optimized out as unused. +This also solves the problem of... + + int somevalue = blah(); + SDL_assert(somevalue == 1); + +...which would cause compiles to complain that somevalue is unused if we +disable assertions. +*/ + +/* "while (0,0)" fools Microsoft's compiler's /W4 warning level into thinking + this condition isn't constant. And looks like an owl's face! */ +#ifdef _MSC_VER /* stupid /W4 warnings. */ +#define SDL_NULL_WHILE_LOOP_CONDITION (0,0) +#else +#define SDL_NULL_WHILE_LOOP_CONDITION (0) +#endif + +#define SDL_disabled_assert(condition) \ + do { (void) sizeof ((condition)); } while (SDL_NULL_WHILE_LOOP_CONDITION) + +typedef enum +{ + SDL_ASSERTION_RETRY, /**< Retry the assert immediately. */ + SDL_ASSERTION_BREAK, /**< Make the debugger trigger a breakpoint. */ + SDL_ASSERTION_ABORT, /**< Terminate the program. */ + SDL_ASSERTION_IGNORE, /**< Ignore the assert. */ + SDL_ASSERTION_ALWAYS_IGNORE /**< Ignore the assert from now on. */ +} SDL_AssertState; + +typedef struct SDL_AssertData +{ + int always_ignore; + unsigned int trigger_count; + const char *condition; + const char *filename; + int linenum; + const char *function; + const struct SDL_AssertData *next; +} SDL_AssertData; + +#if (SDL_ASSERT_LEVEL > 0) + +/* Never call this directly. Use the SDL_assert* macros. */ +extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *, + const char *, + const char *, int) +#if defined(__clang__) +#if __has_feature(attribute_analyzer_noreturn) +/* this tells Clang's static analysis that we're a custom assert function, + and that the analyzer should assume the condition was always true past this + SDL_assert test. */ + __attribute__((analyzer_noreturn)) +#endif +#endif +; + +/* the do {} while(0) avoids dangling else problems: + if (x) SDL_assert(y); else blah(); + ... without the do/while, the "else" could attach to this macro's "if". + We try to handle just the minimum we need here in a macro...the loop, + the static vars, and break points. The heavy lifting is handled in + SDL_ReportAssertion(), in SDL_assert.c. +*/ +#define SDL_enabled_assert(condition) \ + do { \ + while ( !(condition) ) { \ + static struct SDL_AssertData sdl_assert_data = { \ + 0, 0, #condition, 0, 0, 0, 0 \ + }; \ + const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \ + if (sdl_assert_state == SDL_ASSERTION_RETRY) { \ + continue; /* go again. */ \ + } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \ + SDL_TriggerBreakpoint(); \ + } \ + break; /* not retrying. */ \ + } \ + } while (SDL_NULL_WHILE_LOOP_CONDITION) + +#endif /* enabled assertions support code */ + +/* Enable various levels of assertions. */ +#if SDL_ASSERT_LEVEL == 0 /* assertions disabled */ +# define SDL_assert(condition) SDL_disabled_assert(condition) +# define SDL_assert_release(condition) SDL_disabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 1 /* release settings. */ +# define SDL_assert(condition) SDL_disabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 2 /* normal settings. */ +# define SDL_assert(condition) SDL_enabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 3 /* paranoid settings. */ +# define SDL_assert(condition) SDL_enabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_enabled_assert(condition) +#else +# error Unknown assertion level. +#endif + +/* this assertion is never disabled at any level. */ +#define SDL_assert_always(condition) SDL_enabled_assert(condition) + + +/** + * A callback that fires when an SDL assertion fails. + * + * \param data a pointer to the SDL_AssertData structure corresponding to the + * current assertion + * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler() + * \returns an SDL_AssertState value indicating how to handle the failure. + */ +typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)( + const SDL_AssertData* data, void* userdata); + +/** + * Set an application-defined assertion handler. + * + * This function allows an application to show its own assertion UI and/or + * force the response to an assertion failure. If the application doesn't + * provide this, SDL will try to do the right thing, popping up a + * system-specific GUI dialog, and probably minimizing any fullscreen windows. + * + * This callback may fire from any thread, but it runs wrapped in a mutex, so + * it will only fire from one thread at a time. + * + * This callback is NOT reset to SDL's internal handler upon SDL_Quit()! + * + * \param handler the SDL_AssertionHandler function to call when an assertion + * fails or NULL for the default handler + * \param userdata a pointer that is passed to `handler` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAssertionHandler + */ +extern DECLSPEC void SDLCALL SDL_SetAssertionHandler( + SDL_AssertionHandler handler, + void *userdata); + +/** + * Get the default assertion handler. + * + * This returns the function pointer that is called by default when an + * assertion is triggered. This is an internal function provided by SDL, that + * is used for assertions when SDL_SetAssertionHandler() hasn't been used to + * provide a different function. + * + * \returns the default SDL_AssertionHandler that is called when an assert + * triggers. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_GetAssertionHandler + */ +extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetDefaultAssertionHandler(void); + +/** + * Get the current assertion handler. + * + * This returns the function pointer that is called when an assertion is + * triggered. This is either the value last passed to + * SDL_SetAssertionHandler(), or if no application-specified function is set, + * is equivalent to calling SDL_GetDefaultAssertionHandler(). + * + * The parameter `puserdata` is a pointer to a void*, which will store the + * "userdata" pointer that was passed to SDL_SetAssertionHandler(). This value + * will always be NULL for the default handler. If you don't care about this + * data, it is safe to pass a NULL pointer to this function to ignore it. + * + * \param puserdata pointer which is filled with the "userdata" pointer that + * was passed to SDL_SetAssertionHandler() + * \returns the SDL_AssertionHandler that is called when an assert triggers. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_SetAssertionHandler + */ +extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puserdata); + +/** + * Get a list of all assertion failures. + * + * This function gets all assertions triggered since the last call to + * SDL_ResetAssertionReport(), or the start of the program. + * + * The proper way to examine this data looks something like this: + * + * ```c + * const SDL_AssertData *item = SDL_GetAssertionReport(); + * while (item) { + * printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\\n", + * item->condition, item->function, item->filename, + * item->linenum, item->trigger_count, + * item->always_ignore ? "yes" : "no"); + * item = item->next; + * } + * ``` + * + * \returns a list of all failed assertions or NULL if the list is empty. This + * memory should not be modified or freed by the application. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ResetAssertionReport + */ +extern DECLSPEC const SDL_AssertData * SDLCALL SDL_GetAssertionReport(void); + +/** + * Clear the list of all assertion failures. + * + * This function will clear the list of all assertions triggered up to that + * point. Immediately following this call, SDL_GetAssertionReport will return + * no items. In addition, any previously-triggered assertions will be reset to + * a trigger_count of zero, and their always_ignore state will be false. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAssertionReport + */ +extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void); + + +/* these had wrong naming conventions until 2.0.4. Please update your app! */ +#define SDL_assert_state SDL_AssertState +#define SDL_assert_data SDL_AssertData + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_assert_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_atomic.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_atomic.h new file mode 100644 index 00000000000..02a93fb43c0 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_atomic.h @@ -0,0 +1,395 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_atomic.h + * + * Atomic operations. + * + * IMPORTANT: + * If you are not an expert in concurrent lockless programming, you should + * only be using the atomic lock and reference counting functions in this + * file. In all other cases you should be protecting your data structures + * with full mutexes. + * + * The list of "safe" functions to use are: + * SDL_AtomicLock() + * SDL_AtomicUnlock() + * SDL_AtomicIncRef() + * SDL_AtomicDecRef() + * + * Seriously, here be dragons! + * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * + * You can find out a little more about lockless programming and the + * subtle issues that can arise here: + * http://msdn.microsoft.com/en-us/library/ee418650%28v=vs.85%29.aspx + * + * There's also lots of good information here: + * http://www.1024cores.net/home/lock-free-algorithms + * http://preshing.com/ + * + * These operations may or may not actually be implemented using + * processor specific atomic operations. When possible they are + * implemented as true processor specific atomic operations. When that + * is not possible the are implemented using locks that *do* use the + * available atomic operations. + * + * All of the atomic operations that modify memory are full memory barriers. + */ + +#ifndef SDL_atomic_h_ +#define SDL_atomic_h_ + +#include +#include + +#include + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name SDL AtomicLock + * + * The atomic locks are efficient spinlocks using CPU instructions, + * but are vulnerable to starvation and can spin forever if a thread + * holding a lock has been terminated. For this reason you should + * minimize the code executed inside an atomic lock and never do + * expensive things like API or system calls while holding them. + * + * The atomic locks are not safe to lock recursively. + * + * Porting Note: + * The spin lock functions and type are required and can not be + * emulated because they are used in the atomic emulation code. + */ +/* @{ */ + +typedef int SDL_SpinLock; + +/** + * Try to lock a spin lock by setting it to a non-zero value. + * + * ***Please note that spinlocks are dangerous if you don't know what you're + * doing. Please be careful using any sort of spinlock!*** + * + * \param lock a pointer to a lock variable + * \returns SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already + * held. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicLock + * \sa SDL_AtomicUnlock + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicTryLock(SDL_SpinLock *lock); + +/** + * Lock a spin lock by setting it to a non-zero value. + * + * ***Please note that spinlocks are dangerous if you don't know what you're + * doing. Please be careful using any sort of spinlock!*** + * + * \param lock a pointer to a lock variable + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicTryLock + * \sa SDL_AtomicUnlock + */ +extern DECLSPEC void SDLCALL SDL_AtomicLock(SDL_SpinLock *lock); + +/** + * Unlock a spin lock by setting it to 0. + * + * Always returns immediately. + * + * ***Please note that spinlocks are dangerous if you don't know what you're + * doing. Please be careful using any sort of spinlock!*** + * + * \param lock a pointer to a lock variable + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicLock + * \sa SDL_AtomicTryLock + */ +extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock); + +/* @} *//* SDL AtomicLock */ + + +/** + * The compiler barrier prevents the compiler from reordering + * reads and writes to globally visible variables across the call. + */ +#if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__) +void _ReadWriteBarrier(void); +#pragma intrinsic(_ReadWriteBarrier) +#define SDL_CompilerBarrier() _ReadWriteBarrier() +#elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) +/* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */ +#define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory") +#elif defined(__WATCOMC__) +extern __inline void SDL_CompilerBarrier(void); +#pragma aux SDL_CompilerBarrier = "" parm [] modify exact []; +#else +#define SDL_CompilerBarrier() \ +{ SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); } +#endif + +/** + * Memory barriers are designed to prevent reads and writes from being + * reordered by the compiler and being seen out of order on multi-core CPUs. + * + * A typical pattern would be for thread A to write some data and a flag, and + * for thread B to read the flag and get the data. In this case you would + * insert a release barrier between writing the data and the flag, + * guaranteeing that the data write completes no later than the flag is + * written, and you would insert an acquire barrier between reading the flag + * and reading the data, to ensure that all the reads associated with the flag + * have completed. + * + * In this pattern you should always see a release barrier paired with an + * acquire barrier and you should gate the data reads/writes with a single + * flag variable. + * + * For more information on these semantics, take a look at the blog post: + * http://preshing.com/20120913/acquire-and-release-semantics + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC void SDLCALL SDL_MemoryBarrierReleaseFunction(void); +extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquireFunction(void); + +#if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("lwsync" : : : "memory") +#elif defined(__GNUC__) && defined(__aarch64__) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") +#elif defined(__GNUC__) && defined(__arm__) +#if 0 /* defined(__LINUX__) || defined(__ANDROID__) */ +/* Information from: + https://chromium.googlesource.com/chromium/chromium/+/trunk/base/atomicops_internals_arm_gcc.h#19 + + The Linux kernel provides a helper function which provides the right code for a memory barrier, + hard-coded at address 0xffff0fa0 +*/ +typedef void (*SDL_KernelMemoryBarrierFunc)(); +#define SDL_MemoryBarrierRelease() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)() +#define SDL_MemoryBarrierAcquire() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)() +#elif 0 /* defined(__QNXNTO__) */ +#include + +#define SDL_MemoryBarrierRelease() __cpu_membarrier() +#define SDL_MemoryBarrierAcquire() __cpu_membarrier() +#else +#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) || defined(__ARM_ARCH_8A__) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") +#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_5TE__) +#ifdef __thumb__ +/* The mcr instruction isn't available in thumb mode, use real functions */ +#define SDL_MEMORY_BARRIER_USES_FUNCTION +#define SDL_MemoryBarrierRelease() SDL_MemoryBarrierReleaseFunction() +#define SDL_MemoryBarrierAcquire() SDL_MemoryBarrierAcquireFunction() +#else +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") +#endif /* __thumb__ */ +#else +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("" : : : "memory") +#endif /* __LINUX__ || __ANDROID__ */ +#endif /* __GNUC__ && __arm__ */ +#else +#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) +/* This is correct for all CPUs on Solaris when using Solaris Studio 12.1+. */ +#include +#define SDL_MemoryBarrierRelease() __machine_rel_barrier() +#define SDL_MemoryBarrierAcquire() __machine_acq_barrier() +#else +/* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */ +#define SDL_MemoryBarrierRelease() SDL_CompilerBarrier() +#define SDL_MemoryBarrierAcquire() SDL_CompilerBarrier() +#endif +#endif + +/** + * \brief A type representing an atomic integer value. It is a struct + * so people don't accidentally use numeric operations on it. + */ +typedef struct { int value; } SDL_atomic_t; + +/** + * Set an atomic variable to a new value if it is currently an old value. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable to be modified + * \param oldval the old value + * \param newval the new value + * \returns SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicCASPtr + * \sa SDL_AtomicGet + * \sa SDL_AtomicSet + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval); + +/** + * Set an atomic variable to a value. + * + * This function also acts as a full memory barrier. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable to be modified + * \param v the desired value + * \returns the previous value of the atomic variable. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicGet + */ +extern DECLSPEC int SDLCALL SDL_AtomicSet(SDL_atomic_t *a, int v); + +/** + * Get the value of an atomic variable. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable + * \returns the current value of an atomic variable. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicSet + */ +extern DECLSPEC int SDLCALL SDL_AtomicGet(SDL_atomic_t *a); + +/** + * Add to an atomic variable. + * + * This function also acts as a full memory barrier. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable to be modified + * \param v the desired value to add + * \returns the previous value of the atomic variable. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicDecRef + * \sa SDL_AtomicIncRef + */ +extern DECLSPEC int SDLCALL SDL_AtomicAdd(SDL_atomic_t *a, int v); + +/** + * \brief Increment an atomic variable used as a reference count. + */ +#ifndef SDL_AtomicIncRef +#define SDL_AtomicIncRef(a) SDL_AtomicAdd(a, 1) +#endif + +/** + * \brief Decrement an atomic variable used as a reference count. + * + * \return SDL_TRUE if the variable reached zero after decrementing, + * SDL_FALSE otherwise + */ +#ifndef SDL_AtomicDecRef +#define SDL_AtomicDecRef(a) (SDL_AtomicAdd(a, -1) == 1) +#endif + +/** + * Set a pointer to a new value if it is currently an old value. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to a pointer + * \param oldval the old pointer value + * \param newval the new pointer value + * \returns SDL_TRUE if the pointer was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicCAS + * \sa SDL_AtomicGetPtr + * \sa SDL_AtomicSetPtr + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCASPtr(void **a, void *oldval, void *newval); + +/** + * Set a pointer to a value atomically. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to a pointer + * \param v the desired pointer value + * \returns the previous value of the pointer. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicCASPtr + * \sa SDL_AtomicGetPtr + */ +extern DECLSPEC void* SDLCALL SDL_AtomicSetPtr(void **a, void* v); + +/** + * Get the value of a pointer atomically. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to a pointer + * \returns the current value of a pointer. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicCASPtr + * \sa SDL_AtomicSetPtr + */ +extern DECLSPEC void* SDLCALL SDL_AtomicGetPtr(void **a); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#include + +#endif /* SDL_atomic_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_audio.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_audio.h new file mode 100644 index 00000000000..d8bd141d2a0 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_audio.h @@ -0,0 +1,1462 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/* !!! FIXME: several functions in here need Doxygen comments. */ + +/** + * \file SDL_audio.h + * + * Access to the raw audio mixing buffer for the SDL library. + */ + +#ifndef SDL_audio_h_ +#define SDL_audio_h_ + +#include +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Audio format flags. + * + * These are what the 16 bits in SDL_AudioFormat currently mean... + * (Unspecified bits are always zero). + * + * \verbatim + ++-----------------------sample is signed if set + || + || ++-----------sample is bigendian if set + || || + || || ++---sample is float if set + || || || + || || || +---sample bit size---+ + || || || | | + 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 + \endverbatim + * + * There are macros in SDL 2.0 and later to query these bits. + */ +typedef Uint16 SDL_AudioFormat; + +/** + * \name Audio flags + */ +/* @{ */ + +#define SDL_AUDIO_MASK_BITSIZE (0xFF) +#define SDL_AUDIO_MASK_DATATYPE (1<<8) +#define SDL_AUDIO_MASK_ENDIAN (1<<12) +#define SDL_AUDIO_MASK_SIGNED (1<<15) +#define SDL_AUDIO_BITSIZE(x) (x & SDL_AUDIO_MASK_BITSIZE) +#define SDL_AUDIO_ISFLOAT(x) (x & SDL_AUDIO_MASK_DATATYPE) +#define SDL_AUDIO_ISBIGENDIAN(x) (x & SDL_AUDIO_MASK_ENDIAN) +#define SDL_AUDIO_ISSIGNED(x) (x & SDL_AUDIO_MASK_SIGNED) +#define SDL_AUDIO_ISINT(x) (!SDL_AUDIO_ISFLOAT(x)) +#define SDL_AUDIO_ISLITTLEENDIAN(x) (!SDL_AUDIO_ISBIGENDIAN(x)) +#define SDL_AUDIO_ISUNSIGNED(x) (!SDL_AUDIO_ISSIGNED(x)) + +/** + * \name Audio format flags + * + * Defaults to LSB byte order. + */ +/* @{ */ +#define AUDIO_U8 0x0008 /**< Unsigned 8-bit samples */ +#define AUDIO_S8 0x8008 /**< Signed 8-bit samples */ +#define AUDIO_U16LSB 0x0010 /**< Unsigned 16-bit samples */ +#define AUDIO_S16LSB 0x8010 /**< Signed 16-bit samples */ +#define AUDIO_U16MSB 0x1010 /**< As above, but big-endian byte order */ +#define AUDIO_S16MSB 0x9010 /**< As above, but big-endian byte order */ +#define AUDIO_U16 AUDIO_U16LSB +#define AUDIO_S16 AUDIO_S16LSB +/* @} */ + +/** + * \name int32 support + */ +/* @{ */ +#define AUDIO_S32LSB 0x8020 /**< 32-bit integer samples */ +#define AUDIO_S32MSB 0x9020 /**< As above, but big-endian byte order */ +#define AUDIO_S32 AUDIO_S32LSB +/* @} */ + +/** + * \name float32 support + */ +/* @{ */ +#define AUDIO_F32LSB 0x8120 /**< 32-bit floating point samples */ +#define AUDIO_F32MSB 0x9120 /**< As above, but big-endian byte order */ +#define AUDIO_F32 AUDIO_F32LSB +/* @} */ + +/** + * \name Native audio byte ordering + */ +/* @{ */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define AUDIO_U16SYS AUDIO_U16LSB +#define AUDIO_S16SYS AUDIO_S16LSB +#define AUDIO_S32SYS AUDIO_S32LSB +#define AUDIO_F32SYS AUDIO_F32LSB +#else +#define AUDIO_U16SYS AUDIO_U16MSB +#define AUDIO_S16SYS AUDIO_S16MSB +#define AUDIO_S32SYS AUDIO_S32MSB +#define AUDIO_F32SYS AUDIO_F32MSB +#endif +/* @} */ + +/** + * \name Allow change flags + * + * Which audio format changes are allowed when opening a device. + */ +/* @{ */ +#define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001 +#define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002 +#define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004 +#define SDL_AUDIO_ALLOW_SAMPLES_CHANGE 0x00000008 +#define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE|SDL_AUDIO_ALLOW_SAMPLES_CHANGE) +/* @} */ + +/* @} *//* Audio flags */ + +/** + * This function is called when the audio device needs more data. + * + * \param userdata An application-specific parameter saved in + * the SDL_AudioSpec structure + * \param stream A pointer to the audio data buffer. + * \param len The length of that buffer in bytes. + * + * Once the callback returns, the buffer will no longer be valid. + * Stereo samples are stored in a LRLRLR ordering. + * + * You can choose to avoid callbacks and use SDL_QueueAudio() instead, if + * you like. Just open your audio device with a NULL callback. + */ +typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream, + int len); + +/** + * The calculated values in this structure are calculated by SDL_OpenAudio(). + * + * For multi-channel audio, the default SDL channel mapping is: + * 2: FL FR (stereo) + * 3: FL FR LFE (2.1 surround) + * 4: FL FR BL BR (quad) + * 5: FL FR FC BL BR (quad + center) + * 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR) + * 7: FL FR FC LFE BC SL SR (6.1 surround) + * 8: FL FR FC LFE BL BR SL SR (7.1 surround) + */ +typedef struct SDL_AudioSpec +{ + int freq; /**< DSP frequency -- samples per second */ + SDL_AudioFormat format; /**< Audio data format */ + Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */ + Uint8 silence; /**< Audio buffer silence value (calculated) */ + Uint16 samples; /**< Audio buffer size in sample FRAMES (total samples divided by channel count) */ + Uint16 padding; /**< Necessary for some compile environments */ + Uint32 size; /**< Audio buffer size in bytes (calculated) */ + SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */ + void *userdata; /**< Userdata passed to callback (ignored for NULL callbacks). */ +} SDL_AudioSpec; + + +struct SDL_AudioCVT; +typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, + SDL_AudioFormat format); + +/** + * \brief Upper limit of filters in SDL_AudioCVT + * + * The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is + * currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers, + * one of which is the terminating NULL pointer. + */ +#define SDL_AUDIOCVT_MAX_FILTERS 9 + +/** + * \struct SDL_AudioCVT + * \brief A structure to hold a set of audio conversion filters and buffers. + * + * Note that various parts of the conversion pipeline can take advantage + * of SIMD operations (like SSE2, for example). SDL_AudioCVT doesn't require + * you to pass it aligned data, but can possibly run much faster if you + * set both its (buf) field to a pointer that is aligned to 16 bytes, and its + * (len) field to something that's a multiple of 16, if possible. + */ +#if defined(__GNUC__) && !defined(__CHERI_PURE_CAPABILITY__) +/* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't + pad it out to 88 bytes to guarantee ABI compatibility between compilers. + This is not a concern on CHERI architectures, where pointers must be stored + at aligned locations otherwise they will become invalid, and thus structs + containing pointers cannot be packed without giving a warning or error. + vvv + The next time we rev the ABI, make sure to size the ints and add padding. +*/ +#define SDL_AUDIOCVT_PACKED __attribute__((packed)) +#else +#define SDL_AUDIOCVT_PACKED +#endif +/* */ +typedef struct SDL_AudioCVT +{ + int needed; /**< Set to 1 if conversion possible */ + SDL_AudioFormat src_format; /**< Source audio format */ + SDL_AudioFormat dst_format; /**< Target audio format */ + double rate_incr; /**< Rate conversion increment */ + Uint8 *buf; /**< Buffer to hold entire audio data */ + int len; /**< Length of original audio buffer */ + int len_cvt; /**< Length of converted audio buffer */ + int len_mult; /**< buffer must be len*len_mult big */ + double len_ratio; /**< Given len, final size is len*len_ratio */ + SDL_AudioFilter filters[SDL_AUDIOCVT_MAX_FILTERS + 1]; /**< NULL-terminated list of filter functions */ + int filter_index; /**< Current audio conversion function */ +} SDL_AUDIOCVT_PACKED SDL_AudioCVT; + + +/* Function prototypes */ + +/** + * \name Driver discovery functions + * + * These functions return the list of built in audio drivers, in the + * order that they are normally initialized by default. + */ +/* @{ */ + +/** + * Use this function to get the number of built-in audio drivers. + * + * This function returns a hardcoded number. This never returns a negative + * value; if there are no drivers compiled into this build of SDL, this + * function returns zero. The presence of a driver in this list does not mean + * it will function, it just means SDL is capable of interacting with that + * interface. For example, a build of SDL might have esound support, but if + * there's no esound server available, SDL's esound driver would fail if used. + * + * By default, SDL tries all drivers, in its preferred order, until one is + * found to be usable. + * + * \returns the number of built-in audio drivers. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioDriver + */ +extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void); + +/** + * Use this function to get the name of a built in audio driver. + * + * The list of audio drivers is given in the order that they are normally + * initialized by default; the drivers that seem more reasonable to choose + * first (as far as the SDL developers believe) are earlier in the list. + * + * The names of drivers are all simple, low-ASCII identifiers, like "alsa", + * "coreaudio" or "xaudio2". These never have Unicode characters, and are not + * meant to be proper names. + * + * \param index the index of the audio driver; the value ranges from 0 to + * SDL_GetNumAudioDrivers() - 1 + * \returns the name of the audio driver at the requested index, or NULL if an + * invalid index was specified. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumAudioDrivers + */ +extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index); +/* @} */ + +/** + * \name Initialization and cleanup + * + * \internal These functions are used internally, and should not be used unless + * you have a specific need to specify the audio driver you want to + * use. You should normally use SDL_Init() or SDL_InitSubSystem(). + */ +/* @{ */ + +/** + * Use this function to initialize a particular audio driver. + * + * This function is used internally, and should not be used unless you have a + * specific need to designate the audio driver you want to use. You should + * normally use SDL_Init() or SDL_InitSubSystem(). + * + * \param driver_name the name of the desired audio driver + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AudioQuit + */ +extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); + +/** + * Use this function to shut down audio if you initialized it with + * SDL_AudioInit(). + * + * This function is used internally, and should not be used unless you have a + * specific need to specify the audio driver you want to use. You should + * normally use SDL_Quit() or SDL_QuitSubSystem(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AudioInit + */ +extern DECLSPEC void SDLCALL SDL_AudioQuit(void); +/* @} */ + +/** + * Get the name of the current audio driver. + * + * The returned string points to internal static memory and thus never becomes + * invalid, even if you quit the audio subsystem and initialize a new driver + * (although such a case would return a different static string from another + * call to this function, of course). As such, you should not modify or free + * the returned string. + * + * \returns the name of the current audio driver or NULL if no driver has been + * initialized. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AudioInit + */ +extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); + +/** + * This function is a legacy means of opening the audio device. + * + * This function remains for compatibility with SDL 1.2, but also because it's + * slightly easier to use than the new functions in SDL 2.0. The new, more + * powerful, and preferred way to do this is SDL_OpenAudioDevice(). + * + * This function is roughly equivalent to: + * + * ```c + * SDL_OpenAudioDevice(NULL, 0, desired, obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); + * ``` + * + * With two notable exceptions: + * + * - If `obtained` is NULL, we use `desired` (and allow no changes), which + * means desired will be modified to have the correct values for silence, + * etc, and SDL will convert any differences between your app's specific + * request and the hardware behind the scenes. + * - The return value is always success or failure, and not a device ID, which + * means you can only have one device open at a time with this function. + * + * \param desired an SDL_AudioSpec structure representing the desired output + * format. Please refer to the SDL_OpenAudioDevice + * documentation for details on how to prepare this structure. + * \param obtained an SDL_AudioSpec structure filled in with the actual + * parameters, or NULL. + * \returns 0 if successful, placing the actual hardware parameters in the + * structure pointed to by `obtained`. + * + * If `obtained` is NULL, the audio data passed to the callback + * function will be guaranteed to be in the requested format, and + * will be automatically converted to the actual hardware audio + * format if necessary. If `obtained` is NULL, `desired` will have + * fields modified. + * + * This function returns a negative error code on failure to open the + * audio device or failure to set up the audio thread; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CloseAudio + * \sa SDL_LockAudio + * \sa SDL_PauseAudio + * \sa SDL_UnlockAudio + */ +extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, + SDL_AudioSpec * obtained); + +/** + * SDL Audio Device IDs. + * + * A successful call to SDL_OpenAudio() is always device id 1, and legacy + * SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls + * always returns devices >= 2 on success. The legacy calls are good both + * for backwards compatibility and when you don't care about multiple, + * specific, or capture devices. + */ +typedef Uint32 SDL_AudioDeviceID; + +/** + * Get the number of built-in audio devices. + * + * This function is only valid after successfully initializing the audio + * subsystem. + * + * Note that audio capture support is not implemented as of SDL 2.0.4, so the + * `iscapture` parameter is for future expansion and should always be zero for + * now. + * + * This function will return -1 if an explicit list of devices can't be + * determined. Returning -1 is not an error. For example, if SDL is set up to + * talk to a remote audio server, it can't list every one available on the + * Internet, but it will still allow a specific host to be specified in + * SDL_OpenAudioDevice(). + * + * In many common cases, when this function returns a value <= 0, it can still + * successfully open the default device (NULL for first argument of + * SDL_OpenAudioDevice()). + * + * This function may trigger a complete redetect of available hardware. It + * should not be called for each iteration of a loop, but rather once at the + * start of a loop: + * + * ```c + * // Don't do this: + * for (int i = 0; i < SDL_GetNumAudioDevices(0); i++) + * + * // do this instead: + * const int count = SDL_GetNumAudioDevices(0); + * for (int i = 0; i < count; ++i) { do_something_here(); } + * ``` + * + * \param iscapture zero to request playback devices, non-zero to request + * recording devices + * \returns the number of available devices exposed by the current driver or + * -1 if an explicit list of devices can't be determined. A return + * value of -1 does not necessarily mean an error condition. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioDeviceName + * \sa SDL_OpenAudioDevice + */ +extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture); + +/** + * Get the human-readable name of a specific audio device. + * + * This function is only valid after successfully initializing the audio + * subsystem. The values returned by this function reflect the latest call to + * SDL_GetNumAudioDevices(); re-call that function to redetect available + * hardware. + * + * The string returned by this function is UTF-8 encoded, read-only, and + * managed internally. You are not to free it. If you need to keep the string + * for any length of time, you should make your own copy of it, as it will be + * invalid next time any of several other SDL functions are called. + * + * \param index the index of the audio device; valid values range from 0 to + * SDL_GetNumAudioDevices() - 1 + * \param iscapture non-zero to query the list of recording devices, zero to + * query the list of output devices. + * \returns the name of the audio device at the requested index, or NULL on + * error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumAudioDevices + */ +extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, + int iscapture); + +/** + * Get the preferred audio format of a specific audio device. + * + * This function is only valid after a successfully initializing the audio + * subsystem. The values returned by this function reflect the latest call to + * SDL_GetNumAudioDevices(); re-call that function to redetect available + * hardware. + * + * `spec` will be filled with the sample rate, sample format, and channel + * count. + * + * \param index the index of the audio device; valid values range from 0 to + * SDL_GetNumAudioDevices() - 1 + * \param iscapture non-zero to query the list of recording devices, zero to + * query the list of output devices. + * \param spec The SDL_AudioSpec to be initialized by this function. + * \returns 0 on success, nonzero on error + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetNumAudioDevices + */ +extern DECLSPEC int SDLCALL SDL_GetAudioDeviceSpec(int index, + int iscapture, + SDL_AudioSpec *spec); + + +/** + * Open a specific audio device. + * + * SDL_OpenAudio(), unlike this function, always acts on device ID 1. As such, + * this function will never return a 1 so as not to conflict with the legacy + * function. + * + * Please note that SDL 2.0 before 2.0.5 did not support recording; as such, + * this function would fail if `iscapture` was not zero. Starting with SDL + * 2.0.5, recording is implemented and this value can be non-zero. + * + * Passing in a `device` name of NULL requests the most reasonable default + * (and is equivalent to what SDL_OpenAudio() does to choose a device). The + * `device` name is a UTF-8 string reported by SDL_GetAudioDeviceName(), but + * some drivers allow arbitrary and driver-specific strings, such as a + * hostname/IP address for a remote audio server, or a filename in the + * diskaudio driver. + * + * An opened audio device starts out paused, and should be enabled for playing + * by calling SDL_PauseAudioDevice(devid, 0) when you are ready for your audio + * callback function to be called. Since the audio driver may modify the + * requested size of the audio buffer, you should allocate any local mixing + * buffers after you open the audio device. + * + * The audio callback runs in a separate thread in most cases; you can prevent + * race conditions between your callback and other threads without fully + * pausing playback with SDL_LockAudioDevice(). For more information about the + * callback, see SDL_AudioSpec. + * + * Managing the audio spec via 'desired' and 'obtained': + * + * When filling in the desired audio spec structure: + * + * - `desired->freq` should be the frequency in sample-frames-per-second (Hz). + * - `desired->format` should be the audio format (`AUDIO_S16SYS`, etc). + * - `desired->samples` is the desired size of the audio buffer, in _sample + * frames_ (with stereo output, two samples--left and right--would make a + * single sample frame). This number should be a power of two, and may be + * adjusted by the audio driver to a value more suitable for the hardware. + * Good values seem to range between 512 and 8096 inclusive, depending on + * the application and CPU speed. Smaller values reduce latency, but can + * lead to underflow if the application is doing heavy processing and cannot + * fill the audio buffer in time. Note that the number of sample frames is + * directly related to time by the following formula: `ms = + * (sampleframes*1000)/freq` + * - `desired->size` is the size in _bytes_ of the audio buffer, and is + * calculated by SDL_OpenAudioDevice(). You don't initialize this. + * - `desired->silence` is the value used to set the buffer to silence, and is + * calculated by SDL_OpenAudioDevice(). You don't initialize this. + * - `desired->callback` should be set to a function that will be called when + * the audio device is ready for more data. It is passed a pointer to the + * audio buffer, and the length in bytes of the audio buffer. This function + * usually runs in a separate thread, and so you should protect data + * structures that it accesses by calling SDL_LockAudioDevice() and + * SDL_UnlockAudioDevice() in your code. Alternately, you may pass a NULL + * pointer here, and call SDL_QueueAudio() with some frequency, to queue + * more audio samples to be played (or for capture devices, call + * SDL_DequeueAudio() with some frequency, to obtain audio samples). + * - `desired->userdata` is passed as the first parameter to your callback + * function. If you passed a NULL callback, this value is ignored. + * + * `allowed_changes` can have the following flags OR'd together: + * + * - `SDL_AUDIO_ALLOW_FREQUENCY_CHANGE` + * - `SDL_AUDIO_ALLOW_FORMAT_CHANGE` + * - `SDL_AUDIO_ALLOW_CHANNELS_CHANGE` + * - `SDL_AUDIO_ALLOW_ANY_CHANGE` + * + * These flags specify how SDL should behave when a device cannot offer a + * specific feature. If the application requests a feature that the hardware + * doesn't offer, SDL will always try to get the closest equivalent. + * + * For example, if you ask for float32 audio format, but the sound card only + * supports int16, SDL will set the hardware to int16. If you had set + * SDL_AUDIO_ALLOW_FORMAT_CHANGE, SDL will change the format in the `obtained` + * structure. If that flag was *not* set, SDL will prepare to convert your + * callback's float32 audio to int16 before feeding it to the hardware and + * will keep the originally requested format in the `obtained` structure. + * + * The resulting audio specs, varying depending on hardware and on what + * changes were allowed, will then be written back to `obtained`. + * + * If your application can only handle one specific data format, pass a zero + * for `allowed_changes` and let SDL transparently handle any differences. + * + * \param device a UTF-8 string reported by SDL_GetAudioDeviceName() or a + * driver-specific name as appropriate. NULL requests the most + * reasonable default device. + * \param iscapture non-zero to specify a device should be opened for + * recording, not playback + * \param desired an SDL_AudioSpec structure representing the desired output + * format; see SDL_OpenAudio() for more information + * \param obtained an SDL_AudioSpec structure filled in with the actual output + * format; see SDL_OpenAudio() for more information + * \param allowed_changes 0, or one or more flags OR'd together + * \returns a valid device ID that is > 0 on success or 0 on failure; call + * SDL_GetError() for more information. + * + * For compatibility with SDL 1.2, this will never return 1, since + * SDL reserves that ID for the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CloseAudioDevice + * \sa SDL_GetAudioDeviceName + * \sa SDL_LockAudioDevice + * \sa SDL_OpenAudio + * \sa SDL_PauseAudioDevice + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice( + const char *device, + int iscapture, + const SDL_AudioSpec *desired, + SDL_AudioSpec *obtained, + int allowed_changes); + + + +/** + * \name Audio state + * + * Get the current audio state. + */ +/* @{ */ +typedef enum +{ + SDL_AUDIO_STOPPED = 0, + SDL_AUDIO_PLAYING, + SDL_AUDIO_PAUSED +} SDL_AudioStatus; + +/** + * This function is a legacy means of querying the audio device. + * + * New programs might want to use SDL_GetAudioDeviceStatus() instead. This + * function is equivalent to calling... + * + * ```c + * SDL_GetAudioDeviceStatus(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \returns the SDL_AudioStatus of the audio device opened by SDL_OpenAudio(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioDeviceStatus + */ +extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioStatus(void); + +/** + * Use this function to get the current audio state of an audio device. + * + * \param dev the ID of an audio device previously opened with + * SDL_OpenAudioDevice() + * \returns the SDL_AudioStatus of the specified audio device. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PauseAudioDevice + */ +extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev); +/* @} *//* Audio State */ + +/** + * \name Pause audio functions + * + * These functions pause and unpause the audio callback processing. + * They should be called with a parameter of 0 after opening the audio + * device to start playing sound. This is so you can safely initialize + * data for your callback function after opening the audio device. + * Silence will be written to the audio device during the pause. + */ +/* @{ */ + +/** + * This function is a legacy means of pausing the audio device. + * + * New programs might want to use SDL_PauseAudioDevice() instead. This + * function is equivalent to calling... + * + * ```c + * SDL_PauseAudioDevice(1, pause_on); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \param pause_on non-zero to pause, 0 to unpause + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioStatus + * \sa SDL_PauseAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); + +/** + * Use this function to pause and unpause audio playback on a specified + * device. + * + * This function pauses and unpauses the audio callback processing for a given + * device. Newly-opened audio devices start in the paused state, so you must + * call this function with **pause_on**=0 after opening the specified audio + * device to start playing sound. This allows you to safely initialize data + * for your callback function after opening the audio device. Silence will be + * written to the audio device while paused, and the audio callback is + * guaranteed to not be called. Pausing one device does not prevent other + * unpaused devices from running their callbacks. + * + * Pausing state does not stack; even if you pause a device several times, a + * single unpause will start the device playing again, and vice versa. This is + * different from how SDL_LockAudioDevice() works. + * + * If you just need to protect a few variables from race conditions vs your + * callback, you shouldn't pause the audio device, as it will lead to dropouts + * in the audio playback. Instead, you should use SDL_LockAudioDevice(). + * + * \param dev a device opened by SDL_OpenAudioDevice() + * \param pause_on non-zero to pause, 0 to unpause + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev, + int pause_on); +/* @} *//* Pause audio functions */ + +/** + * Load the audio data of a WAVE file into memory. + * + * Loading a WAVE file requires `src`, `spec`, `audio_buf` and `audio_len` to + * be valid pointers. The entire data portion of the file is then loaded into + * memory and decoded if necessary. + * + * If `freesrc` is non-zero, the data source gets automatically closed and + * freed before the function returns. + * + * Supported formats are RIFF WAVE files with the formats PCM (8, 16, 24, and + * 32 bits), IEEE Float (32 bits), Microsoft ADPCM and IMA ADPCM (4 bits), and + * A-law and mu-law (8 bits). Other formats are currently unsupported and + * cause an error. + * + * If this function succeeds, the pointer returned by it is equal to `spec` + * and the pointer to the audio data allocated by the function is written to + * `audio_buf` and its length in bytes to `audio_len`. The SDL_AudioSpec + * members `freq`, `channels`, and `format` are set to the values of the audio + * data in the buffer. The `samples` member is set to a sane default and all + * others are set to zero. + * + * It's necessary to use SDL_FreeWAV() to free the audio data returned in + * `audio_buf` when it is no longer used. + * + * Because of the underspecification of the .WAV format, there are many + * problematic files in the wild that cause issues with strict decoders. To + * provide compatibility with these files, this decoder is lenient in regards + * to the truncation of the file, the fact chunk, and the size of the RIFF + * chunk. The hints `SDL_HINT_WAVE_RIFF_CHUNK_SIZE`, + * `SDL_HINT_WAVE_TRUNCATION`, and `SDL_HINT_WAVE_FACT_CHUNK` can be used to + * tune the behavior of the loading process. + * + * Any file that is invalid (due to truncation, corruption, or wrong values in + * the headers), too big, or unsupported causes an error. Additionally, any + * critical I/O error from the data source will terminate the loading process + * with an error. The function returns NULL on error and in all cases (with + * the exception of `src` being NULL), an appropriate error message will be + * set. + * + * It is required that the data source supports seeking. + * + * Example: + * + * ```c + * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, &spec, &buf, &len); + * ``` + * + * Note that the SDL_LoadWAV macro does this same thing for you, but in a less + * messy way: + * + * ```c + * SDL_LoadWAV("sample.wav", &spec, &buf, &len); + * ``` + * + * \param src The data source for the WAVE data + * \param freesrc If non-zero, SDL will _always_ free the data source + * \param spec An SDL_AudioSpec that will be filled in with the wave file's + * format details + * \param audio_buf A pointer filled with the audio data, allocated by the + * function. + * \param audio_len A pointer filled with the length of the audio data buffer + * in bytes + * \returns This function, if successfully called, returns `spec`, which will + * be filled with the audio data format of the wave source data. + * `audio_buf` will be filled with a pointer to an allocated buffer + * containing the audio data, and `audio_len` is filled with the + * length of that audio buffer in bytes. + * + * This function returns NULL if the .WAV file cannot be opened, uses + * an unknown data format, or is corrupt; call SDL_GetError() for + * more information. + * + * When the application is done with the data returned in + * `audio_buf`, it should call SDL_FreeWAV() to dispose of it. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeWAV + * \sa SDL_LoadWAV + */ +extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, + int freesrc, + SDL_AudioSpec * spec, + Uint8 ** audio_buf, + Uint32 * audio_len); + +/** + * Loads a WAV from a file. + * Compatibility convenience function. + */ +#define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ + SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) + +/** + * Free data previously allocated with SDL_LoadWAV() or SDL_LoadWAV_RW(). + * + * After a WAVE file has been opened with SDL_LoadWAV() or SDL_LoadWAV_RW() + * its data can eventually be freed with SDL_FreeWAV(). It is safe to call + * this function with a NULL pointer. + * + * \param audio_buf a pointer to the buffer created by SDL_LoadWAV() or + * SDL_LoadWAV_RW() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadWAV + * \sa SDL_LoadWAV_RW + */ +extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf); + +/** + * Initialize an SDL_AudioCVT structure for conversion. + * + * Before an SDL_AudioCVT structure can be used to convert audio data it must + * be initialized with source and destination information. + * + * This function will zero out every field of the SDL_AudioCVT, so it must be + * called before the application fills in the final buffer information. + * + * Once this function has returned successfully, and reported that a + * conversion is necessary, the application fills in the rest of the fields in + * SDL_AudioCVT, now that it knows how large a buffer it needs to allocate, + * and then can call SDL_ConvertAudio() to complete the conversion. + * + * \param cvt an SDL_AudioCVT structure filled in with audio conversion + * information + * \param src_format the source format of the audio data; for more info see + * SDL_AudioFormat + * \param src_channels the number of channels in the source + * \param src_rate the frequency (sample-frames-per-second) of the source + * \param dst_format the destination format of the audio data; for more info + * see SDL_AudioFormat + * \param dst_channels the number of channels in the destination + * \param dst_rate the frequency (sample-frames-per-second) of the destination + * \returns 1 if the audio filter is prepared, 0 if no conversion is needed, + * or a negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ConvertAudio + */ +extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, + SDL_AudioFormat src_format, + Uint8 src_channels, + int src_rate, + SDL_AudioFormat dst_format, + Uint8 dst_channels, + int dst_rate); + +/** + * Convert audio data to a desired audio format. + * + * This function does the actual audio data conversion, after the application + * has called SDL_BuildAudioCVT() to prepare the conversion information and + * then filled in the buffer details. + * + * Once the application has initialized the `cvt` structure using + * SDL_BuildAudioCVT(), allocated an audio buffer and filled it with audio + * data in the source format, this function will convert the buffer, in-place, + * to the desired format. + * + * The data conversion may go through several passes; any given pass may + * possibly temporarily increase the size of the data. For example, SDL might + * expand 16-bit data to 32 bits before resampling to a lower frequency, + * shrinking the data size after having grown it briefly. Since the supplied + * buffer will be both the source and destination, converting as necessary + * in-place, the application must allocate a buffer that will fully contain + * the data during its largest conversion pass. After SDL_BuildAudioCVT() + * returns, the application should set the `cvt->len` field to the size, in + * bytes, of the source data, and allocate a buffer that is `cvt->len * + * cvt->len_mult` bytes long for the `buf` field. + * + * The source data should be copied into this buffer before the call to + * SDL_ConvertAudio(). Upon successful return, this buffer will contain the + * converted audio, and `cvt->len_cvt` will be the size of the converted data, + * in bytes. Any bytes in the buffer past `cvt->len_cvt` are undefined once + * this function returns. + * + * \param cvt an SDL_AudioCVT structure that was previously set up by + * SDL_BuildAudioCVT(). + * \returns 0 if the conversion was completed successfully or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BuildAudioCVT + */ +extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt); + +/* SDL_AudioStream is a new audio conversion interface. + The benefits vs SDL_AudioCVT: + - it can handle resampling data in chunks without generating + artifacts, when it doesn't have the complete buffer available. + - it can handle incoming data in any variable size. + - You push data as you have it, and pull it when you need it + */ +/* this is opaque to the outside world. */ +struct _SDL_AudioStream; +typedef struct _SDL_AudioStream SDL_AudioStream; + +/** + * Create a new audio stream. + * + * \param src_format The format of the source audio + * \param src_channels The number of channels of the source audio + * \param src_rate The sampling rate of the source audio + * \param dst_format The format of the desired audio output + * \param dst_channels The number of channels of the desired audio output + * \param dst_rate The sampling rate of the desired audio output + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC SDL_AudioStream * SDLCALL SDL_NewAudioStream(const SDL_AudioFormat src_format, + const Uint8 src_channels, + const int src_rate, + const SDL_AudioFormat dst_format, + const Uint8 dst_channels, + const int dst_rate); + +/** + * Add data to be converted/resampled to the stream. + * + * \param stream The stream the audio data is being added to + * \param buf A pointer to the audio data to add + * \param len The number of bytes to write to the stream + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamPut(SDL_AudioStream *stream, const void *buf, int len); + +/** + * Get converted/resampled data from the stream + * + * \param stream The stream the audio is being requested from + * \param buf A buffer to fill with audio data + * \param len The maximum number of bytes to fill + * \returns the number of bytes read from the stream, or -1 on error + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, int len); + +/** + * Get the number of converted/resampled bytes available. + * + * The stream may be buffering data behind the scenes until it has enough to + * resample correctly, so this number might be lower than what you expect, or + * even be zero. Add more data or flush the stream if you need the data now. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamAvailable(SDL_AudioStream *stream); + +/** + * Tell the stream that you're done sending data, and anything being buffered + * should be converted/resampled and made available immediately. + * + * It is legal to add more data to a stream after flushing, but there will be + * audio gaps in the output. Generally this is intended to signal the end of + * input, so the complete output becomes available. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamFlush(SDL_AudioStream *stream); + +/** + * Clear any pending data in the stream without converting it + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC void SDLCALL SDL_AudioStreamClear(SDL_AudioStream *stream); + +/** + * Free an audio stream + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + */ +extern DECLSPEC void SDLCALL SDL_FreeAudioStream(SDL_AudioStream *stream); + +#define SDL_MIX_MAXVOLUME 128 + +/** + * This function is a legacy means of mixing audio. + * + * This function is equivalent to calling... + * + * ```c + * SDL_MixAudioFormat(dst, src, format, len, volume); + * ``` + * + * ...where `format` is the obtained format of the audio device from the + * legacy SDL_OpenAudio() function. + * + * \param dst the destination for the mixed audio + * \param src the source audio buffer to be mixed + * \param len the length of the audio buffer in bytes + * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME + * for full audio volume + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MixAudioFormat + */ +extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, + Uint32 len, int volume); + +/** + * Mix audio data in a specified format. + * + * This takes an audio buffer `src` of `len` bytes of `format` data and mixes + * it into `dst`, performing addition, volume adjustment, and overflow + * clipping. The buffer pointed to by `dst` must also be `len` bytes of + * `format` data. + * + * This is provided for convenience -- you can mix your own audio data. + * + * Do not use this function for mixing together more than two streams of + * sample data. The output from repeated application of this function may be + * distorted by clipping, because there is no accumulator with greater range + * than the input (not to mention this being an inefficient way of doing it). + * + * It is a common misconception that this function is required to write audio + * data to an output stream in an audio callback. While you can do that, + * SDL_MixAudioFormat() is really only needed when you're mixing a single + * audio stream with a volume adjustment. + * + * \param dst the destination for the mixed audio + * \param src the source audio buffer to be mixed + * \param format the SDL_AudioFormat structure representing the desired audio + * format + * \param len the length of the audio buffer in bytes + * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME + * for full audio volume + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, + const Uint8 * src, + SDL_AudioFormat format, + Uint32 len, int volume); + +/** + * Queue more audio on non-callback devices. + * + * If you are looking to retrieve queued audio from a non-callback capture + * device, you want SDL_DequeueAudio() instead. SDL_QueueAudio() will return + * -1 to signify an error if you use it with capture devices. + * + * SDL offers two ways to feed audio to the device: you can either supply a + * callback that SDL triggers with some frequency to obtain more audio (pull + * method), or you can supply no callback, and then SDL will expect you to + * supply data at regular intervals (push method) with this function. + * + * There are no limits on the amount of data you can queue, short of + * exhaustion of address space. Queued data will drain to the device as + * necessary without further intervention from you. If the device needs audio + * but there is not enough queued, it will play silence to make up the + * difference. This means you will have skips in your audio playback if you + * aren't routinely queueing sufficient data. + * + * This function copies the supplied data, so you are safe to free it when the + * function returns. This function is thread-safe, but queueing to the same + * device from two threads at once does not promise which buffer will be + * queued first. + * + * You may not queue audio on a device that is using an application-supplied + * callback; doing so returns an error. You have to use the audio callback or + * queue audio with this function, but not both. + * + * You should not call SDL_LockAudio() on the device before queueing; SDL + * handles locking internally for this function. + * + * Note that SDL2 does not support planar audio. You will need to resample + * from planar audio formats into a non-planar one (see SDL_AudioFormat) + * before queuing audio. + * + * \param dev the device ID to which we will queue audio + * \param data the data to queue to the device for later playback + * \param len the number of bytes (not samples!) to which `data` points + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_ClearQueuedAudio + * \sa SDL_GetQueuedAudioSize + */ +extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len); + +/** + * Dequeue more audio on non-callback devices. + * + * If you are looking to queue audio for output on a non-callback playback + * device, you want SDL_QueueAudio() instead. SDL_DequeueAudio() will always + * return 0 if you use it with playback devices. + * + * SDL offers two ways to retrieve audio from a capture device: you can either + * supply a callback that SDL triggers with some frequency as the device + * records more audio data, (push method), or you can supply no callback, and + * then SDL will expect you to retrieve data at regular intervals (pull + * method) with this function. + * + * There are no limits on the amount of data you can queue, short of + * exhaustion of address space. Data from the device will keep queuing as + * necessary without further intervention from you. This means you will + * eventually run out of memory if you aren't routinely dequeueing data. + * + * Capture devices will not queue data when paused; if you are expecting to + * not need captured audio for some length of time, use SDL_PauseAudioDevice() + * to stop the capture device from queueing more data. This can be useful + * during, say, level loading times. When unpaused, capture devices will start + * queueing data from that point, having flushed any capturable data available + * while paused. + * + * This function is thread-safe, but dequeueing from the same device from two + * threads at once does not promise which thread will dequeue data first. + * + * You may not dequeue audio from a device that is using an + * application-supplied callback; doing so returns an error. You have to use + * the audio callback, or dequeue audio with this function, but not both. + * + * You should not call SDL_LockAudio() on the device before dequeueing; SDL + * handles locking internally for this function. + * + * \param dev the device ID from which we will dequeue audio + * \param data a pointer into where audio data should be copied + * \param len the number of bytes (not samples!) to which (data) points + * \returns the number of bytes dequeued, which could be less than requested; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_ClearQueuedAudio + * \sa SDL_GetQueuedAudioSize + */ +extern DECLSPEC Uint32 SDLCALL SDL_DequeueAudio(SDL_AudioDeviceID dev, void *data, Uint32 len); + +/** + * Get the number of bytes of still-queued audio. + * + * For playback devices: this is the number of bytes that have been queued for + * playback with SDL_QueueAudio(), but have not yet been sent to the hardware. + * + * Once we've sent it to the hardware, this function can not decide the exact + * byte boundary of what has been played. It's possible that we just gave the + * hardware several kilobytes right before you called this function, but it + * hasn't played any of it yet, or maybe half of it, etc. + * + * For capture devices, this is the number of bytes that have been captured by + * the device and are waiting for you to dequeue. This number may grow at any + * time, so this only informs of the lower-bound of available data. + * + * You may not queue or dequeue audio on a device that is using an + * application-supplied callback; calling this function on such a device + * always returns 0. You have to use the audio callback or queue audio, but + * not both. + * + * You should not call SDL_LockAudio() on the device before querying; SDL + * handles locking internally for this function. + * + * \param dev the device ID of which we will query queued audio size + * \returns the number of bytes (not samples!) of queued audio. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_ClearQueuedAudio + * \sa SDL_QueueAudio + * \sa SDL_DequeueAudio + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev); + +/** + * Drop any queued audio data waiting to be sent to the hardware. + * + * Immediately after this call, SDL_GetQueuedAudioSize() will return 0. For + * output devices, the hardware will start playing silence if more audio isn't + * queued. For capture devices, the hardware will start filling the empty + * queue with new data if the capture device isn't paused. + * + * This will not prevent playback of queued audio that's already been sent to + * the hardware, as we can not undo that, so expect there to be some fraction + * of a second of audio that might still be heard. This can be useful if you + * want to, say, drop any pending music or any unprocessed microphone input + * during a level change in your game. + * + * You may not queue or dequeue audio on a device that is using an + * application-supplied callback; calling this function on such a device + * always returns 0. You have to use the audio callback or queue audio, but + * not both. + * + * You should not call SDL_LockAudio() on the device before clearing the + * queue; SDL handles locking internally for this function. + * + * This function always succeeds and thus returns void. + * + * \param dev the device ID of which to clear the audio queue + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetQueuedAudioSize + * \sa SDL_QueueAudio + * \sa SDL_DequeueAudio + */ +extern DECLSPEC void SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev); + + +/** + * \name Audio lock functions + * + * The lock manipulated by these functions protects the callback function. + * During a SDL_LockAudio()/SDL_UnlockAudio() pair, you can be guaranteed that + * the callback function is not running. Do not call these from the callback + * function or you will cause deadlock. + */ +/* @{ */ + +/** + * This function is a legacy means of locking the audio device. + * + * New programs might want to use SDL_LockAudioDevice() instead. This function + * is equivalent to calling... + * + * ```c + * SDL_LockAudioDevice(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudioDevice + * \sa SDL_UnlockAudio + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_LockAudio(void); + +/** + * Use this function to lock out the audio callback function for a specified + * device. + * + * The lock manipulated by these functions protects the audio callback + * function specified in SDL_OpenAudioDevice(). During a + * SDL_LockAudioDevice()/SDL_UnlockAudioDevice() pair, you can be guaranteed + * that the callback function for that device is not running, even if the + * device is not paused. While a device is locked, any other unpaused, + * unlocked devices may still run their callbacks. + * + * Calling this function from inside your audio callback is unnecessary. SDL + * obtains this lock before calling your function, and releases it when the + * function returns. + * + * You should not hold the lock longer than absolutely necessary. If you hold + * it too long, you'll experience dropouts in your audio playback. Ideally, + * your application locks the device, sets a few variables and unlocks again. + * Do not do heavy work while holding the lock for a device. + * + * It is safe to lock the audio device multiple times, as long as you unlock + * it an equivalent number of times. The callback will not run until the + * device has been unlocked completely in this way. If your application fails + * to unlock the device appropriately, your callback will never run, you might + * hear repeating bursts of audio, and SDL_CloseAudioDevice() will probably + * deadlock. + * + * Internally, the audio device lock is a mutex; if you lock from two threads + * at once, not only will you block the audio callback, you'll block the other + * thread. + * + * \param dev the ID of the device to be locked + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev); + +/** + * This function is a legacy means of unlocking the audio device. + * + * New programs might want to use SDL_UnlockAudioDevice() instead. This + * function is equivalent to calling... + * + * ```c + * SDL_UnlockAudioDevice(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudio + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); + +/** + * Use this function to unlock the audio callback function for a specified + * device. + * + * This function should be paired with a previous SDL_LockAudioDevice() call. + * + * \param dev the ID of the device to be unlocked + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev); +/* @} *//* Audio lock functions */ + +/** + * This function is a legacy means of closing the audio device. + * + * This function is equivalent to calling... + * + * ```c + * SDL_CloseAudioDevice(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_OpenAudio + */ +extern DECLSPEC void SDLCALL SDL_CloseAudio(void); + +/** + * Use this function to shut down audio processing and close the audio device. + * + * The application should close open audio devices once they are no longer + * needed. Calling this function will wait until the device's audio callback + * is not running, release the audio hardware and then clean up internal + * state. No further audio will play from this device once this function + * returns. + * + * This function may block briefly while pending audio data is played by the + * hardware, so that applications don't drop the last buffer of data they + * supplied. + * + * The device ID is invalid as soon as the device is closed, and is eligible + * for reuse in a new SDL_OpenAudioDevice() call immediately. + * + * \param dev an audio device previously opened with SDL_OpenAudioDevice() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_OpenAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_audio_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_bits.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_bits.h new file mode 100644 index 00000000000..d822aff1ea6 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_bits.h @@ -0,0 +1,126 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_bits.h + * + * Functions for fiddling with bits and bitmasks. + */ + +#ifndef SDL_bits_h_ +#define SDL_bits_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_bits.h + */ + +/** + * Get the index of the most significant bit. Result is undefined when called + * with 0. This operation can also be stated as "count leading zeroes" and + * "log base 2". + * + * \return the index of the most significant bit, or -1 if the value is 0. + */ +#if defined(__WATCOMC__) && defined(__386__) +extern __inline int _SDL_bsr_watcom(Uint32); +#pragma aux _SDL_bsr_watcom = \ + "bsr eax, eax" \ + parm [eax] nomemory \ + value [eax] \ + modify exact [eax] nomemory; +#endif + +SDL_FORCE_INLINE int +SDL_MostSignificantBitIndex32(Uint32 x) +{ +#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) + /* Count Leading Zeroes builtin in GCC. + * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html + */ + if (x == 0) { + return -1; + } + return 31 - __builtin_clz(x); +#elif defined(__WATCOMC__) && defined(__386__) + if (x == 0) { + return -1; + } + return _SDL_bsr_watcom(x); +#elif defined(_MSC_VER) + unsigned long index; + if (_BitScanReverse(&index, x)) { + return index; + } + return -1; +#else + /* Based off of Bit Twiddling Hacks by Sean Eron Anderson + * , released in the public domain. + * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog + */ + const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000}; + const int S[] = {1, 2, 4, 8, 16}; + + int msbIndex = 0; + int i; + + if (x == 0) { + return -1; + } + + for (i = 4; i >= 0; i--) + { + if (x & b[i]) + { + x >>= S[i]; + msbIndex |= S[i]; + } + } + + return msbIndex; +#endif +} + +SDL_FORCE_INLINE SDL_bool +SDL_HasExactlyOneBitSet32(Uint32 x) +{ + if (x && !(x & (x - 1))) { + return SDL_TRUE; + } + return SDL_FALSE; +} + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_bits_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_blendmode.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_blendmode.h new file mode 100644 index 00000000000..327ae95a511 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_blendmode.h @@ -0,0 +1,198 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_blendmode.h + * + * Header file declaring the SDL_BlendMode enumeration + */ + +#ifndef SDL_blendmode_h_ +#define SDL_blendmode_h_ + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The blend mode used in SDL_RenderCopy() and drawing operations. + */ +typedef enum +{ + SDL_BLENDMODE_NONE = 0x00000000, /**< no blending + dstRGBA = srcRGBA */ + SDL_BLENDMODE_BLEND = 0x00000001, /**< alpha blending + dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA)) + dstA = srcA + (dstA * (1-srcA)) */ + SDL_BLENDMODE_ADD = 0x00000002, /**< additive blending + dstRGB = (srcRGB * srcA) + dstRGB + dstA = dstA */ + SDL_BLENDMODE_MOD = 0x00000004, /**< color modulate + dstRGB = srcRGB * dstRGB + dstA = dstA */ + SDL_BLENDMODE_MUL = 0x00000008, /**< color multiply + dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA)) + dstA = (srcA * dstA) + (dstA * (1-srcA)) */ + SDL_BLENDMODE_INVALID = 0x7FFFFFFF + + /* Additional custom blend modes can be returned by SDL_ComposeCustomBlendMode() */ + +} SDL_BlendMode; + +/** + * \brief The blend operation used when combining source and destination pixel components + */ +typedef enum +{ + SDL_BLENDOPERATION_ADD = 0x1, /**< dst + src: supported by all renderers */ + SDL_BLENDOPERATION_SUBTRACT = 0x2, /**< dst - src : supported by D3D9, D3D11, OpenGL, OpenGLES */ + SDL_BLENDOPERATION_REV_SUBTRACT = 0x3, /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */ + SDL_BLENDOPERATION_MINIMUM = 0x4, /**< min(dst, src) : supported by D3D9, D3D11 */ + SDL_BLENDOPERATION_MAXIMUM = 0x5 /**< max(dst, src) : supported by D3D9, D3D11 */ +} SDL_BlendOperation; + +/** + * \brief The normalized factor used to multiply pixel components + */ +typedef enum +{ + SDL_BLENDFACTOR_ZERO = 0x1, /**< 0, 0, 0, 0 */ + SDL_BLENDFACTOR_ONE = 0x2, /**< 1, 1, 1, 1 */ + SDL_BLENDFACTOR_SRC_COLOR = 0x3, /**< srcR, srcG, srcB, srcA */ + SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = 0x4, /**< 1-srcR, 1-srcG, 1-srcB, 1-srcA */ + SDL_BLENDFACTOR_SRC_ALPHA = 0x5, /**< srcA, srcA, srcA, srcA */ + SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = 0x6, /**< 1-srcA, 1-srcA, 1-srcA, 1-srcA */ + SDL_BLENDFACTOR_DST_COLOR = 0x7, /**< dstR, dstG, dstB, dstA */ + SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = 0x8, /**< 1-dstR, 1-dstG, 1-dstB, 1-dstA */ + SDL_BLENDFACTOR_DST_ALPHA = 0x9, /**< dstA, dstA, dstA, dstA */ + SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = 0xA /**< 1-dstA, 1-dstA, 1-dstA, 1-dstA */ +} SDL_BlendFactor; + +/** + * Compose a custom blend mode for renderers. + * + * The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept + * the SDL_BlendMode returned by this function if the renderer supports it. + * + * A blend mode controls how the pixels from a drawing operation (source) get + * combined with the pixels from the render target (destination). First, the + * components of the source and destination pixels get multiplied with their + * blend factors. Then, the blend operation takes the two products and + * calculates the result that will get stored in the render target. + * + * Expressed in pseudocode, it would look like this: + * + * ```c + * dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor); + * dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor); + * ``` + * + * Where the functions `colorOperation(src, dst)` and `alphaOperation(src, + * dst)` can return one of the following: + * + * - `src + dst` + * - `src - dst` + * - `dst - src` + * - `min(src, dst)` + * - `max(src, dst)` + * + * The red, green, and blue components are always multiplied with the first, + * second, and third components of the SDL_BlendFactor, respectively. The + * fourth component is not used. + * + * The alpha component is always multiplied with the fourth component of the + * SDL_BlendFactor. The other components are not used in the alpha + * calculation. + * + * Support for these blend modes varies for each renderer. To check if a + * specific SDL_BlendMode is supported, create a renderer and pass it to + * either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will + * return with an error if the blend mode is not supported. + * + * This list describes the support of custom blend modes for each renderer in + * SDL 2.0.6. All renderers support the four blend modes listed in the + * SDL_BlendMode enumeration. + * + * - **direct3d**: Supports all operations with all factors. However, some + * factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and + * `SDL_BLENDOPERATION_MAXIMUM`. + * - **direct3d11**: Same as Direct3D 9. + * - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + * factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL + * 2.0.6. + * - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + * factors. Color and alpha factors need to be the same. OpenGL ES 1 + * implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT` + * and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha + * operations being different from each other. May support color and alpha + * factors being different from each other. + * - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`, + * `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT` + * operations with all factors. + * - **psp**: No custom blend mode support. + * - **software**: No custom blend mode support. + * + * Some renderers do not provide an alpha component for the default render + * target. The `SDL_BLENDFACTOR_DST_ALPHA` and + * `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this + * case. + * + * \param srcColorFactor the SDL_BlendFactor applied to the red, green, and + * blue components of the source pixels + * \param dstColorFactor the SDL_BlendFactor applied to the red, green, and + * blue components of the destination pixels + * \param colorOperation the SDL_BlendOperation used to combine the red, + * green, and blue components of the source and + * destination pixels + * \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of + * the source pixels + * \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of + * the destination pixels + * \param alphaOperation the SDL_BlendOperation used to combine the alpha + * component of the source and destination pixels + * \returns an SDL_BlendMode that represents the chosen factors and + * operations. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_GetRenderDrawBlendMode + * \sa SDL_SetTextureBlendMode + * \sa SDL_GetTextureBlendMode + */ +extern DECLSPEC SDL_BlendMode SDLCALL SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor, + SDL_BlendFactor dstColorFactor, + SDL_BlendOperation colorOperation, + SDL_BlendFactor srcAlphaFactor, + SDL_BlendFactor dstAlphaFactor, + SDL_BlendOperation alphaOperation); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_blendmode_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_clipboard.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_clipboard.h new file mode 100644 index 00000000000..81a5218f413 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_clipboard.h @@ -0,0 +1,94 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_clipboard.h + * + * Include file for SDL clipboard handling + */ + +#ifndef SDL_clipboard_h_ +#define SDL_clipboard_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Function prototypes */ + +/** + * Put UTF-8 text into the clipboard. + * + * \param text the text to store in the clipboard + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetClipboardText + * \sa SDL_HasClipboardText + */ +extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text); + +/** + * Get UTF-8 text from the clipboard, which must be freed with SDL_free(). + * + * This functions returns empty string if there was not enough memory left for + * a copy of the clipboard's content. + * + * \returns the clipboard text on success or an empty string on failure; call + * SDL_GetError() for more information. Caller must call SDL_free() + * on the returned pointer when done with it (even if there was an + * error). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasClipboardText + * \sa SDL_SetClipboardText + */ +extern DECLSPEC char * SDLCALL SDL_GetClipboardText(void); + +/** + * Query whether the clipboard exists and contains a non-empty text string. + * + * \returns SDL_TRUE if the clipboard has text, or SDL_FALSE if it does not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetClipboardText + * \sa SDL_SetClipboardText + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_clipboard_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_config.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_config.h new file mode 100644 index 00000000000..4bb4115e05a --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_config.h @@ -0,0 +1,55 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_config_h_ +#define SDL_config_h_ + +#include + +/** + * \file SDL_config.h + */ + +/* Add any platform that doesn't build using the configure system. */ +#if defined(__WIN32__) +#include +#elif defined(__WINRT__) +#include +#elif defined(__MACOSX__) +#include +#elif defined(__IPHONEOS__) +#include +#elif defined(__ANDROID__) +#include +#elif defined(__OS2__) +#include +#elif defined(__EMSCRIPTEN__) +#include +#else +/* This is a minimal configuration just to get SDL running on new platforms. */ +#include +#endif /* platform config */ + +#ifdef USING_GENERATED_CONFIG_H +#error Wrong SDL_config.h, check your include path? +#endif + +#endif /* SDL_config_h_ */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_config_macosx.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_config_macosx.h new file mode 100644 index 00000000000..640b351942f --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_config_macosx.h @@ -0,0 +1,280 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_config_macosx_h_ +#define SDL_config_macosx_h_ +#define SDL_config_h_ + +#include + +/* This gets us MAC_OS_X_VERSION_MIN_REQUIRED... */ +#include + +/* This is a set of defines to configure the SDL features */ + +#ifdef __LP64__ + #define SIZEOF_VOIDP 8 +#else + #define SIZEOF_VOIDP 4 +#endif + +/* Useful headers */ +#define STDC_HEADERS 1 +#define HAVE_ALLOCA_H 1 +#define HAVE_CTYPE_H 1 +#define HAVE_FLOAT_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_MATH_H 1 +#define HAVE_SIGNAL_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_STDIO_H 1 +#define HAVE_STRING_H 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_LIBUNWIND_H 1 + +/* C library functions */ +#define HAVE_DLOPEN 1 +#define HAVE_MALLOC 1 +#define HAVE_CALLOC 1 +#define HAVE_REALLOC 1 +#define HAVE_FREE 1 +#define HAVE_ALLOCA 1 +#define HAVE_GETENV 1 +#define HAVE_SETENV 1 +#define HAVE_PUTENV 1 +#define HAVE_UNSETENV 1 +#define HAVE_QSORT 1 +#define HAVE_ABS 1 +#define HAVE_BCOPY 1 +#define HAVE_MEMSET 1 +#define HAVE_MEMCPY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MEMCMP 1 +#define HAVE_STRLEN 1 +#define HAVE_STRLCPY 1 +#define HAVE_STRLCAT 1 +#define HAVE_STRCHR 1 +#define HAVE_STRRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_STRTOK_R 1 +#define HAVE_STRTOL 1 +#define HAVE_STRTOUL 1 +#define HAVE_STRTOLL 1 +#define HAVE_STRTOULL 1 +#define HAVE_STRTOD 1 +#define HAVE_ATOI 1 +#define HAVE_ATOF 1 +#define HAVE_STRCMP 1 +#define HAVE_STRNCMP 1 +#define HAVE_STRCASECMP 1 +#define HAVE_STRNCASECMP 1 +#define HAVE_VSSCANF 1 +#define HAVE_VSNPRINTF 1 +#define HAVE_M_PI 1 +#define HAVE_ACOS 1 +#define HAVE_ACOSF 1 +#define HAVE_ASIN 1 +#define HAVE_ASINF 1 +#define HAVE_ATAN 1 +#define HAVE_ATANF 1 +#define HAVE_ATAN2 1 +#define HAVE_ATAN2F 1 +#define HAVE_CEIL 1 +#define HAVE_CEILF 1 +#define HAVE_COPYSIGN 1 +#define HAVE_COPYSIGNF 1 +#define HAVE_COS 1 +#define HAVE_COSF 1 +#define HAVE_EXP 1 +#define HAVE_EXPF 1 +#define HAVE_FABS 1 +#define HAVE_FABSF 1 +#define HAVE_FLOOR 1 +#define HAVE_FLOORF 1 +#define HAVE_FMOD 1 +#define HAVE_FMODF 1 +#define HAVE_LOG 1 +#define HAVE_LOGF 1 +#define HAVE_LOG10 1 +#define HAVE_LOG10F 1 +#define HAVE_LROUND 1 +#define HAVE_LROUNDF 1 +#define HAVE_POW 1 +#define HAVE_POWF 1 +#define HAVE_ROUND 1 +#define HAVE_ROUNDF 1 +#define HAVE_SCALBN 1 +#define HAVE_SCALBNF 1 +#define HAVE_SIN 1 +#define HAVE_SINF 1 +#define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 +#define HAVE_TRUNC 1 +#define HAVE_TRUNCF 1 +#define HAVE_SIGACTION 1 +#define HAVE_SETJMP 1 +#define HAVE_NANOSLEEP 1 +#define HAVE_SYSCONF 1 +#define HAVE_SYSCTLBYNAME 1 + +#if defined(__has_include) && (defined(__i386__) || defined(__x86_64)) +# if __has_include() +# define HAVE_IMMINTRIN_H 1 +# endif +#endif + +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) +#define HAVE_O_CLOEXEC 1 +#endif + +#define HAVE_GCC_ATOMICS 1 + +/* Enable various audio drivers */ +#define SDL_AUDIO_DRIVER_COREAUDIO 1 +#define SDL_AUDIO_DRIVER_DISK 1 +#define SDL_AUDIO_DRIVER_DUMMY 1 + +/* Enable various input drivers */ +#define SDL_JOYSTICK_HIDAPI 1 +#define SDL_JOYSTICK_IOKIT 1 +#define SDL_JOYSTICK_VIRTUAL 1 +#define SDL_HAPTIC_IOKIT 1 + +/* The MFI controller support requires ARC Objective C runtime */ +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1080 && !defined(__i386__) +#define SDL_JOYSTICK_MFI 1 +#endif + +/* Enable the dummy sensor driver */ +#define SDL_SENSOR_DUMMY 1 + +/* Enable various shared object loading systems */ +#define SDL_LOADSO_DLOPEN 1 + +/* Enable various threading systems */ +#define SDL_THREAD_PTHREAD 1 +#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 + +/* Enable various timer systems */ +#define SDL_TIMER_UNIX 1 + +/* Enable various video drivers */ +#define SDL_VIDEO_DRIVER_COCOA 1 +#define SDL_VIDEO_DRIVER_DUMMY 1 +#undef SDL_VIDEO_DRIVER_X11 +#define SDL_VIDEO_DRIVER_X11_DYNAMIC "/opt/X11/lib/libX11.6.dylib" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "/opt/X11/lib/libXext.6.dylib" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "/opt/X11/lib/libXinerama.1.dylib" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "/opt/X11/lib/libXi.6.dylib" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "/opt/X11/lib/libXrandr.2.dylib" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "/opt/X11/lib/libXss.1.dylib" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "/opt/X11/lib/libXxf86vm.1.dylib" +#define SDL_VIDEO_DRIVER_X11_XDBE 1 +#define SDL_VIDEO_DRIVER_X11_XINERAMA 1 +#define SDL_VIDEO_DRIVER_X11_XRANDR 1 +#define SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1 +#define SDL_VIDEO_DRIVER_X11_XSHAPE 1 +#define SDL_VIDEO_DRIVER_X11_XVIDMODE 1 +#define SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM 1 + +#ifdef MAC_OS_X_VERSION_10_8 +/* + * No matter the versions targeted, this is the 10.8 or later SDK, so you have + * to use the external Xquartz, which is a more modern Xlib. Previous SDKs + * used an older Xlib. + */ +#define SDL_VIDEO_DRIVER_X11_XINPUT2 1 +#define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1 +#endif + +#ifndef SDL_VIDEO_RENDER_OGL +#define SDL_VIDEO_RENDER_OGL 1 +#endif + +#ifndef SDL_VIDEO_RENDER_OGL_ES2 +#define SDL_VIDEO_RENDER_OGL_ES2 1 +#endif + +/* Metal only supported on 64-bit architectures with 10.11+ */ +#if TARGET_RT_64_BIT && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101100) +#define SDL_PLATFORM_SUPPORTS_METAL 1 +#else +#define SDL_PLATFORM_SUPPORTS_METAL 0 +#endif + +#ifndef SDL_VIDEO_RENDER_METAL +#if SDL_PLATFORM_SUPPORTS_METAL +#define SDL_VIDEO_RENDER_METAL 1 +#else +#define SDL_VIDEO_RENDER_METAL 0 +#endif +#endif + +/* Enable OpenGL support */ +#ifndef SDL_VIDEO_OPENGL +#define SDL_VIDEO_OPENGL 1 +#endif +#ifndef SDL_VIDEO_OPENGL_ES2 +#define SDL_VIDEO_OPENGL_ES2 1 +#endif +#ifndef SDL_VIDEO_OPENGL_EGL +#define SDL_VIDEO_OPENGL_EGL 1 +#endif +#ifndef SDL_VIDEO_OPENGL_CGL +#define SDL_VIDEO_OPENGL_CGL 1 +#endif +#ifndef SDL_VIDEO_OPENGL_GLX +#define SDL_VIDEO_OPENGL_GLX 1 +#endif + +/* Enable Vulkan and Metal support */ +#ifndef SDL_VIDEO_VULKAN +#if SDL_PLATFORM_SUPPORTS_METAL +#define SDL_VIDEO_VULKAN 1 +#else +#define SDL_VIDEO_VULKAN 0 +#endif +#endif + +#ifndef SDL_VIDEO_METAL +#if SDL_PLATFORM_SUPPORTS_METAL +#define SDL_VIDEO_METAL 1 +#else +#define SDL_VIDEO_METAL 0 +#endif +#endif + +/* Enable system power support */ +#define SDL_POWER_MACOSX 1 + +/* enable filesystem support */ +#define SDL_FILESYSTEM_COCOA 1 + +/* Enable assembly routines */ +#define SDL_ASSEMBLY_ROUTINES 1 +#ifdef __ppc__ +#define SDL_ALTIVEC_BLITTERS 1 +#endif + +#endif /* SDL_config_macosx_h_ */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_copying.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_copying.h new file mode 100644 index 00000000000..49e3f9da07a --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_copying.h @@ -0,0 +1,20 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_cpuinfo.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_cpuinfo.h new file mode 100644 index 00000000000..ace7e064b29 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_cpuinfo.h @@ -0,0 +1,559 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_cpuinfo.h + * + * CPU feature detection for SDL. + */ + +#ifndef SDL_cpuinfo_h_ +#define SDL_cpuinfo_h_ + +#include + +/* Need to do this here because intrin.h has C++ code in it */ +/* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ +#if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64)) +#ifdef __clang__ +/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, + so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ + +#ifndef __PRFCHWINTRIN_H +#define __PRFCHWINTRIN_H + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_prefetch(void *__P) +{ + __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); +} + +#endif /* __PRFCHWINTRIN_H */ +#endif /* __clang__ */ +#include +#ifndef _WIN64 +#ifndef __MMX__ +#define __MMX__ +#endif +#ifndef __3dNOW__ +#define __3dNOW__ +#endif +#endif +#ifndef __SSE__ +#define __SSE__ +#endif +#ifndef __SSE2__ +#define __SSE2__ +#endif +#ifndef __SSE3__ +#define __SSE3__ +#endif +#elif defined(__MINGW64_VERSION_MAJOR) +#include +#if !defined(SDL_DISABLE_ARM_NEON_H) && defined(__ARM_NEON) +# include +#endif +#else +/* altivec.h redefining bool causes a number of problems, see bugs 3993 and 4392, so you need to explicitly define SDL_ENABLE_ALTIVEC_H to have it included. */ +#if defined(HAVE_ALTIVEC_H) && defined(__ALTIVEC__) && !defined(__APPLE_ALTIVEC__) && defined(SDL_ENABLE_ALTIVEC_H) +#include +#endif +#if !defined(SDL_DISABLE_ARM_NEON_H) +# if defined(__ARM_NEON) +# include +# elif defined(__WINDOWS__) || defined(__WINRT__) +/* Visual Studio doesn't define __ARM_ARCH, but _M_ARM (if set, always 7), and _M_ARM64 (if set, always 1). */ +# if defined(_M_ARM) +# include +# include +# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */ +# endif +# if defined (_M_ARM64) +# include +# include +# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */ +# endif +# endif +#endif +#endif /* compiler version */ + +#if defined(__3dNOW__) && !defined(SDL_DISABLE_MM3DNOW_H) +#include +#endif +#if defined(HAVE_IMMINTRIN_H) && !defined(SDL_DISABLE_IMMINTRIN_H) +#include +#else +#if defined(__MMX__) && !defined(SDL_DISABLE_MMINTRIN_H) +#include +#endif +#if defined(__SSE__) && !defined(SDL_DISABLE_XMMINTRIN_H) +#include +#endif +#if defined(__SSE2__) && !defined(SDL_DISABLE_EMMINTRIN_H) +#include +#endif +#if defined(__SSE3__) && !defined(SDL_DISABLE_PMMINTRIN_H) +#include +#endif +#endif /* HAVE_IMMINTRIN_H */ + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* This is a guess for the cacheline size used for padding. + * Most x86 processors have a 64 byte cache line. + * The 64-bit PowerPC processors have a 128 byte cache line. + * We'll use the larger value to be generally safe. + */ +#define SDL_CACHELINE_SIZE 128 + +/** + * Get the number of CPU cores available. + * + * \returns the total number of logical CPU cores. On CPUs that include + * technologies such as hyperthreading, the number of logical cores + * may be more than the number of physical cores. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_GetCPUCount(void); + +/** + * Determine the L1 cache line size of the CPU. + * + * This is useful for determining multi-threaded structure padding or SIMD + * prefetch sizes. + * + * \returns the L1 cache line size of the CPU, in bytes. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void); + +/** + * Determine whether the CPU has the RDTSC instruction. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has the RDTSC instruction or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); + +/** + * Determine whether the CPU has AltiVec features. + * + * This always returns false on CPUs that aren't using PowerPC instruction + * sets. + * + * \returns SDL_TRUE if the CPU has AltiVec features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); + +/** + * Determine whether the CPU has MMX features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has MMX features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); + +/** + * Determine whether the CPU has 3DNow! features. + * + * This always returns false on CPUs that aren't using AMD instruction sets. + * + * \returns SDL_TRUE if the CPU has 3DNow! features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); + +/** + * Determine whether the CPU has SSE features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); + +/** + * Determine whether the CPU has SSE2 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE2 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); + +/** + * Determine whether the CPU has SSE3 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE3 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void); + +/** + * Determine whether the CPU has SSE4.1 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE4.1 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void); + +/** + * Determine whether the CPU has SSE4.2 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE4.2 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); + +/** + * Determine whether the CPU has AVX features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has AVX features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void); + +/** + * Determine whether the CPU has AVX2 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has AVX2 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void); + +/** + * Determine whether the CPU has AVX-512F (foundation) features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has AVX-512F features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_HasAVX + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX512F(void); + +/** + * Determine whether the CPU has ARM SIMD (ARMv6) features. + * + * This is different from ARM NEON, which is a different instruction set. + * + * This always returns false on CPUs that aren't using ARM instruction sets. + * + * \returns SDL_TRUE if the CPU has ARM SIMD features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_HasNEON + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasARMSIMD(void); + +/** + * Determine whether the CPU has NEON (ARM SIMD) features. + * + * This always returns false on CPUs that aren't using ARM instruction sets. + * + * \returns SDL_TRUE if the CPU has ARM NEON features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasNEON(void); + +/** + * Get the amount of RAM configured in the system. + * + * \returns the amount of RAM configured in the system in MB. + * + * \since This function is available since SDL 2.0.1. + */ +extern DECLSPEC int SDLCALL SDL_GetSystemRAM(void); + +/** + * Report the alignment this system needs for SIMD allocations. + * + * This will return the minimum number of bytes to which a pointer must be + * aligned to be compatible with SIMD instructions on the current machine. For + * example, if the machine supports SSE only, it will return 16, but if it + * supports AVX-512F, it'll return 64 (etc). This only reports values for + * instruction sets SDL knows about, so if your SDL build doesn't have + * SDL_HasAVX512F(), then it might return 16 for the SSE support it sees and + * not 64 for the AVX-512 instructions that exist but SDL doesn't know about. + * Plan accordingly. + * + * \returns the alignment in bytes needed for available, known SIMD + * instructions. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC size_t SDLCALL SDL_SIMDGetAlignment(void); + +/** + * Allocate memory in a SIMD-friendly way. + * + * This will allocate a block of memory that is suitable for use with SIMD + * instructions. Specifically, it will be properly aligned and padded for the + * system's supported vector instructions. + * + * The memory returned will be padded such that it is safe to read or write an + * incomplete vector at the end of the memory block. This can be useful so you + * don't have to drop back to a scalar fallback at the end of your SIMD + * processing loop to deal with the final elements without overflowing the + * allocated buffer. + * + * You must free this memory with SDL_FreeSIMD(), not free() or SDL_free() or + * delete[], etc. + * + * Note that SDL will only deal with SIMD instruction sets it is aware of; for + * example, SDL 2.0.8 knows that SSE wants 16-byte vectors (SDL_HasSSE()), and + * AVX2 wants 32 bytes (SDL_HasAVX2()), but doesn't know that AVX-512 wants + * 64. To be clear: if you can't decide to use an instruction set with an + * SDL_Has*() function, don't use that instruction set with memory allocated + * through here. + * + * SDL_AllocSIMD(0) will return a non-NULL pointer, assuming the system isn't + * out of memory, but you are not allowed to dereference it (because you only + * own zero bytes of that buffer). + * + * \param len The length, in bytes, of the block to allocate. The actual + * allocated block might be larger due to padding, etc. + * \returns a pointer to the newly-allocated block, NULL if out of memory. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_SIMDAlignment + * \sa SDL_SIMDRealloc + * \sa SDL_SIMDFree + */ +extern DECLSPEC void * SDLCALL SDL_SIMDAlloc(const size_t len); + +/** + * Reallocate memory obtained from SDL_SIMDAlloc + * + * It is not valid to use this function on a pointer from anything but + * SDL_SIMDAlloc(). It can't be used on pointers from malloc, realloc, + * SDL_malloc, memalign, new[], etc. + * + * \param mem The pointer obtained from SDL_SIMDAlloc. This function also + * accepts NULL, at which point this function is the same as + * calling SDL_SIMDAlloc with a NULL pointer. + * \param len The length, in bytes, of the block to allocated. The actual + * allocated block might be larger due to padding, etc. Passing 0 + * will return a non-NULL pointer, assuming the system isn't out of + * memory. + * \returns a pointer to the newly-reallocated block, NULL if out of memory. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_SIMDAlignment + * \sa SDL_SIMDAlloc + * \sa SDL_SIMDFree + */ +extern DECLSPEC void * SDLCALL SDL_SIMDRealloc(void *mem, const size_t len); + +/** + * Deallocate memory obtained from SDL_SIMDAlloc + * + * It is not valid to use this function on a pointer from anything but + * SDL_SIMDAlloc() or SDL_SIMDRealloc(). It can't be used on pointers from + * malloc, realloc, SDL_malloc, memalign, new[], etc. + * + * However, SDL_SIMDFree(NULL) is a legal no-op. + * + * The memory pointed to by `ptr` is no longer valid for access upon return, + * and may be returned to the system or reused by a future allocation. The + * pointer passed to this function is no longer safe to dereference once this + * function returns, and should be discarded. + * + * \param ptr The pointer, returned from SDL_SIMDAlloc or SDL_SIMDRealloc, to + * deallocate. NULL is a legal no-op. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_SIMDAlloc + * \sa SDL_SIMDRealloc + */ +extern DECLSPEC void SDLCALL SDL_SIMDFree(void *ptr); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_cpuinfo_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_endian.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_endian.h new file mode 100644 index 00000000000..5ef32704275 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_endian.h @@ -0,0 +1,326 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_endian.h + * + * Functions for reading and writing endian-specific values + */ + +#ifndef SDL_endian_h_ +#define SDL_endian_h_ + +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1400) +/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, + so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ +#ifdef __clang__ +#ifndef __PRFCHWINTRIN_H +#define __PRFCHWINTRIN_H +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_prefetch(void *__P) +{ + __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); +} +#endif /* __PRFCHWINTRIN_H */ +#endif /* __clang__ */ + +#include +#endif + +/** + * \name The two types of endianness + */ +/* @{ */ +#define SDL_LIL_ENDIAN 1234 +#define SDL_BIG_ENDIAN 4321 +/* @} */ + +#ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ +#ifdef __linux__ +#include +#define SDL_BYTEORDER __BYTE_ORDER +#elif defined(__OpenBSD__) +#include +#define SDL_BYTEORDER BYTE_ORDER +#elif defined(__FreeBSD__) || defined(__NetBSD__) +#include +#define SDL_BYTEORDER BYTE_ORDER +/* predefs from newer gcc and clang versions: */ +#elif defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__BYTE_ORDER__) +#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +#define SDL_BYTEORDER SDL_LIL_ENDIAN +#elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#define SDL_BYTEORDER SDL_BIG_ENDIAN +#else +#error Unsupported endianness +#endif /**/ +#else +#if defined(__hppa__) || \ + defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ + (defined(__MIPS__) && defined(__MIPSEB__)) || \ + defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ + defined(__sparc__) +#define SDL_BYTEORDER SDL_BIG_ENDIAN +#else +#define SDL_BYTEORDER SDL_LIL_ENDIAN +#endif +#endif /* __linux__ */ +#endif /* !SDL_BYTEORDER */ + + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_endian.h + */ + +/* various modern compilers may have builtin swap */ +#if defined(__GNUC__) || defined(__clang__) +# define HAS_BUILTIN_BSWAP16 (_SDL_HAS_BUILTIN(__builtin_bswap16)) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) +# define HAS_BUILTIN_BSWAP32 (_SDL_HAS_BUILTIN(__builtin_bswap32)) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) +# define HAS_BUILTIN_BSWAP64 (_SDL_HAS_BUILTIN(__builtin_bswap64)) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + + /* this one is broken */ +# define HAS_BROKEN_BSWAP (__GNUC__ == 2 && __GNUC_MINOR__ <= 95) +#else +# define HAS_BUILTIN_BSWAP16 0 +# define HAS_BUILTIN_BSWAP32 0 +# define HAS_BUILTIN_BSWAP64 0 +# define HAS_BROKEN_BSWAP 0 +#endif + +#if HAS_BUILTIN_BSWAP16 +#define SDL_Swap16(x) __builtin_bswap16(x) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) +#pragma intrinsic(_byteswap_ushort) +#define SDL_Swap16(x) _byteswap_ushort(x) +#elif defined(__i386__) && !HAS_BROKEN_BSWAP +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); + return x; +} +#elif defined(__x86_64__) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); + return x; +} +#elif (defined(__powerpc__) || defined(__ppc__)) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + int result; + + __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); + return (Uint16)result; +} +#elif (defined(__m68k__) && !defined(__mcoldfire__)) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern __inline Uint16 SDL_Swap16(Uint16); +#pragma aux SDL_Swap16 = \ + "xchg al, ah" \ + parm [ax] \ + modify [ax]; +#else +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); +} +#endif + +#if HAS_BUILTIN_BSWAP32 +#define SDL_Swap32(x) __builtin_bswap32(x) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) +#pragma intrinsic(_byteswap_ulong) +#define SDL_Swap32(x) _byteswap_ulong(x) +#elif defined(__i386__) && !HAS_BROKEN_BSWAP +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("bswap %0": "=r"(x):"0"(x)); + return x; +} +#elif defined(__x86_64__) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("bswapl %0": "=r"(x):"0"(x)); + return x; +} +#elif (defined(__powerpc__) || defined(__ppc__)) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + Uint32 result; + + __asm__("rlwimi %0,%2,24,16,23": "=&r"(result): "0" (x>>24), "r"(x)); + __asm__("rlwimi %0,%2,8,8,15" : "=&r"(result): "0" (result), "r"(x)); + __asm__("rlwimi %0,%2,24,0,7" : "=&r"(result): "0" (result), "r"(x)); + return result; +} +#elif (defined(__m68k__) && !defined(__mcoldfire__)) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern __inline Uint32 SDL_Swap32(Uint32); +#pragma aux SDL_Swap32 = \ + "bswap eax" \ + parm [eax] \ + modify [eax]; +#else +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | + ((x >> 8) & 0x0000FF00) | (x >> 24))); +} +#endif + +#if HAS_BUILTIN_BSWAP64 +#define SDL_Swap64(x) __builtin_bswap64(x) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) +#pragma intrinsic(_byteswap_uint64) +#define SDL_Swap64(x) _byteswap_uint64(x) +#elif defined(__i386__) && !HAS_BROKEN_BSWAP +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + union { + struct { + Uint32 a, b; + } s; + Uint64 u; + } v; + v.u = x; + __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1" + : "=r"(v.s.a), "=r"(v.s.b) + : "0" (v.s.a), "1"(v.s.b)); + return v.u; +} +#elif defined(__x86_64__) +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + __asm__("bswapq %0": "=r"(x):"0"(x)); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern __inline Uint64 SDL_Swap64(Uint64); +#pragma aux SDL_Swap64 = \ + "bswap eax" \ + "bswap edx" \ + "xchg eax,edx" \ + parm [eax edx] \ + modify [eax edx]; +#else +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + Uint32 hi, lo; + + /* Separate into high and low 32-bit values and swap them */ + lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); + x >>= 32; + hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); + x = SDL_Swap32(lo); + x <<= 32; + x |= SDL_Swap32(hi); + return (x); +} +#endif + + +SDL_FORCE_INLINE float +SDL_SwapFloat(float x) +{ + union { + float f; + Uint32 ui32; + } swapper; + swapper.f = x; + swapper.ui32 = SDL_Swap32(swapper.ui32); + return swapper.f; +} + +/* remove extra macros */ +#undef HAS_BROKEN_BSWAP +#undef HAS_BUILTIN_BSWAP16 +#undef HAS_BUILTIN_BSWAP32 +#undef HAS_BUILTIN_BSWAP64 + +/** + * \name Swap to native + * Byteswap item from the specified endianness to the native endianness. + */ +/* @{ */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define SDL_SwapLE16(X) (X) +#define SDL_SwapLE32(X) (X) +#define SDL_SwapLE64(X) (X) +#define SDL_SwapFloatLE(X) (X) +#define SDL_SwapBE16(X) SDL_Swap16(X) +#define SDL_SwapBE32(X) SDL_Swap32(X) +#define SDL_SwapBE64(X) SDL_Swap64(X) +#define SDL_SwapFloatBE(X) SDL_SwapFloat(X) +#else +#define SDL_SwapLE16(X) SDL_Swap16(X) +#define SDL_SwapLE32(X) SDL_Swap32(X) +#define SDL_SwapLE64(X) SDL_Swap64(X) +#define SDL_SwapFloatLE(X) SDL_SwapFloat(X) +#define SDL_SwapBE16(X) (X) +#define SDL_SwapBE32(X) (X) +#define SDL_SwapBE64(X) (X) +#define SDL_SwapFloatBE(X) (X) +#endif +/* @} *//* Swap to native */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_endian_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_error.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_error.h new file mode 100644 index 00000000000..743e46de111 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_error.h @@ -0,0 +1,163 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_error.h + * + * Simple error message routines for SDL. + */ + +#ifndef SDL_error_h_ +#define SDL_error_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Public functions */ + + +/** + * Set the SDL error message for the current thread. + * + * Calling this function will replace any previous error message that was set. + * + * This function always returns -1, since SDL frequently uses -1 to signify an + * failing result, leading to this idiom: + * + * ```c + * if (error_code) { + * return SDL_SetError("This operation has failed: %d", error_code); + * } + * ``` + * + * \param fmt a printf()-style message format string + * \param ... additional parameters matching % tokens in the `fmt` string, if + * any + * \returns always -1. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ClearError + * \sa SDL_GetError + */ +extern DECLSPEC int SDLCALL SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); + +/** + * Retrieve a message about the last error that occurred on the current + * thread. + * + * It is possible for multiple errors to occur before calling SDL_GetError(). + * Only the last error is returned. + * + * The message is only applicable when an SDL function has signaled an error. + * You must check the return values of SDL function calls to determine when to + * appropriately call SDL_GetError(). You should *not* use the results of + * SDL_GetError() to decide if an error has occurred! Sometimes SDL will set + * an error string even when reporting success. + * + * SDL will *not* clear the error string for successful API calls. You *must* + * check return values for failure cases before you can assume the error + * string applies. + * + * Error strings are set per-thread, so an error set in a different thread + * will not interfere with the current thread's operation. + * + * The returned string is internally allocated and must not be freed by the + * application. + * + * \returns a message with information about the specific error that occurred, + * or an empty string if there hasn't been an error message set since + * the last call to SDL_ClearError(). The message is only applicable + * when an SDL function has signaled an error. You must check the + * return values of SDL function calls to determine when to + * appropriately call SDL_GetError(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ClearError + * \sa SDL_SetError + */ +extern DECLSPEC const char *SDLCALL SDL_GetError(void); + +/** + * Get the last error message that was set for the current thread. + * + * This allows the caller to copy the error string into a provided buffer, but + * otherwise operates exactly the same as SDL_GetError(). + * + * \param errstr A buffer to fill with the last error message that was set for + * the current thread + * \param maxlen The size of the buffer pointed to by the errstr parameter + * \returns the pointer passed in as the `errstr` parameter. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_GetError + */ +extern DECLSPEC char * SDLCALL SDL_GetErrorMsg(char *errstr, int maxlen); + +/** + * Clear any previous error message for this thread. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetError + * \sa SDL_SetError + */ +extern DECLSPEC void SDLCALL SDL_ClearError(void); + +/** + * \name Internal error functions + * + * \internal + * Private error reporting function - used internally. + */ +/* @{ */ +#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) +#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) +#define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param)) +typedef enum +{ + SDL_ENOMEM, + SDL_EFREAD, + SDL_EFWRITE, + SDL_EFSEEK, + SDL_UNSUPPORTED, + SDL_LASTERROR +} SDL_errorcode; +/* SDL_Error() unconditionally returns -1. */ +extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code); +/* @} *//* Internal error functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_error_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_events.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_events.h new file mode 100644 index 00000000000..9cfeb7bc0ed --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_events.h @@ -0,0 +1,1150 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_events.h + * + * Include file for SDL event handling. + */ + +#ifndef SDL_events_h_ +#define SDL_events_h_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* General keyboard/mouse state definitions */ +#define SDL_RELEASED 0 +#define SDL_PRESSED 1 + +/** + * The types of events that can be delivered. + */ +typedef enum +{ + SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */ + + /* Application events */ + SDL_QUIT = 0x100, /**< User-requested quit */ + + /* These application events have special meaning on iOS, see README-ios.md for details */ + SDL_APP_TERMINATING, /**< The application is being terminated by the OS + Called on iOS in applicationWillTerminate() + Called on Android in onDestroy() + */ + SDL_APP_LOWMEMORY, /**< The application is low on memory, free memory if possible. + Called on iOS in applicationDidReceiveMemoryWarning() + Called on Android in onLowMemory() + */ + SDL_APP_WILLENTERBACKGROUND, /**< The application is about to enter the background + Called on iOS in applicationWillResignActive() + Called on Android in onPause() + */ + SDL_APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time + Called on iOS in applicationDidEnterBackground() + Called on Android in onPause() + */ + SDL_APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground + Called on iOS in applicationWillEnterForeground() + Called on Android in onResume() + */ + SDL_APP_DIDENTERFOREGROUND, /**< The application is now interactive + Called on iOS in applicationDidBecomeActive() + Called on Android in onResume() + */ + + SDL_LOCALECHANGED, /**< The user's locale preferences have changed. */ + + /* Display events */ + SDL_DISPLAYEVENT = 0x150, /**< Display state change */ + + /* Window events */ + SDL_WINDOWEVENT = 0x200, /**< Window state change */ + SDL_SYSWMEVENT, /**< System specific event */ + + /* Keyboard events */ + SDL_KEYDOWN = 0x300, /**< Key pressed */ + SDL_KEYUP, /**< Key released */ + SDL_TEXTEDITING, /**< Keyboard text editing (composition) */ + SDL_TEXTINPUT, /**< Keyboard text input */ + SDL_KEYMAPCHANGED, /**< Keymap changed due to a system event such as an + input language or keyboard layout change. + */ + SDL_TEXTEDITING_EXT, /**< Extended keyboard text editing (composition) */ + + /* Mouse events */ + SDL_MOUSEMOTION = 0x400, /**< Mouse moved */ + SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */ + SDL_MOUSEBUTTONUP, /**< Mouse button released */ + SDL_MOUSEWHEEL, /**< Mouse wheel motion */ + + /* Joystick events */ + SDL_JOYAXISMOTION = 0x600, /**< Joystick axis motion */ + SDL_JOYBALLMOTION, /**< Joystick trackball motion */ + SDL_JOYHATMOTION, /**< Joystick hat position change */ + SDL_JOYBUTTONDOWN, /**< Joystick button pressed */ + SDL_JOYBUTTONUP, /**< Joystick button released */ + SDL_JOYDEVICEADDED, /**< A new joystick has been inserted into the system */ + SDL_JOYDEVICEREMOVED, /**< An opened joystick has been removed */ + + /* Game controller events */ + SDL_CONTROLLERAXISMOTION = 0x650, /**< Game controller axis motion */ + SDL_CONTROLLERBUTTONDOWN, /**< Game controller button pressed */ + SDL_CONTROLLERBUTTONUP, /**< Game controller button released */ + SDL_CONTROLLERDEVICEADDED, /**< A new Game controller has been inserted into the system */ + SDL_CONTROLLERDEVICEREMOVED, /**< An opened Game controller has been removed */ + SDL_CONTROLLERDEVICEREMAPPED, /**< The controller mapping was updated */ + SDL_CONTROLLERTOUCHPADDOWN, /**< Game controller touchpad was touched */ + SDL_CONTROLLERTOUCHPADMOTION, /**< Game controller touchpad finger was moved */ + SDL_CONTROLLERTOUCHPADUP, /**< Game controller touchpad finger was lifted */ + SDL_CONTROLLERSENSORUPDATE, /**< Game controller sensor was updated */ + + /* Touch events */ + SDL_FINGERDOWN = 0x700, + SDL_FINGERUP, + SDL_FINGERMOTION, + + /* Gesture events */ + SDL_DOLLARGESTURE = 0x800, + SDL_DOLLARRECORD, + SDL_MULTIGESTURE, + + /* Clipboard events */ + SDL_CLIPBOARDUPDATE = 0x900, /**< The clipboard changed */ + + /* Drag and drop events */ + SDL_DROPFILE = 0x1000, /**< The system requests a file open */ + SDL_DROPTEXT, /**< text/plain drag-and-drop event */ + SDL_DROPBEGIN, /**< A new set of drops is beginning (NULL filename) */ + SDL_DROPCOMPLETE, /**< Current set of drops is now complete (NULL filename) */ + + /* Audio hotplug events */ + SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */ + SDL_AUDIODEVICEREMOVED, /**< An audio device has been removed. */ + + /* Sensor events */ + SDL_SENSORUPDATE = 0x1200, /**< A sensor was updated */ + + /* Render events */ + SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */ + SDL_RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */ + + /* Internal events */ + SDL_POLLSENTINEL = 0x7F00, /**< Signals the end of an event poll cycle */ + + /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use, + * and should be allocated with SDL_RegisterEvents() + */ + SDL_USEREVENT = 0x8000, + + /** + * This last event is only for bounding internal arrays + */ + SDL_LASTEVENT = 0xFFFF +} SDL_EventType; + +/** + * \brief Fields shared by every event + */ +typedef struct SDL_CommonEvent +{ + Uint32 type; + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ +} SDL_CommonEvent; + +/** + * \brief Display state change event data (event.display.*) + */ +typedef struct SDL_DisplayEvent +{ + Uint32 type; /**< ::SDL_DISPLAYEVENT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 display; /**< The associated display index */ + Uint8 event; /**< ::SDL_DisplayEventID */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint32 data1; /**< event dependent data */ +} SDL_DisplayEvent; + +/** + * \brief Window state change event data (event.window.*) + */ +typedef struct SDL_WindowEvent +{ + Uint32 type; /**< ::SDL_WINDOWEVENT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The associated window */ + Uint8 event; /**< ::SDL_WindowEventID */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint32 data1; /**< event dependent data */ + Sint32 data2; /**< event dependent data */ +} SDL_WindowEvent; + +/** + * \brief Keyboard button event structure (event.key.*) + */ +typedef struct SDL_KeyboardEvent +{ + Uint32 type; /**< ::SDL_KEYDOWN or ::SDL_KEYUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 repeat; /**< Non-zero if this is a key repeat */ + Uint8 padding2; + Uint8 padding3; + SDL_Keysym keysym; /**< The key that was pressed or released */ +} SDL_KeyboardEvent; + +#define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32) +/** + * \brief Keyboard text editing event structure (event.edit.*) + */ +typedef struct SDL_TextEditingEvent +{ + Uint32 type; /**< ::SDL_TEXTEDITING */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */ + Sint32 start; /**< The start cursor of selected editing text */ + Sint32 length; /**< The length of selected editing text */ +} SDL_TextEditingEvent; + +/** + * \brief Extended keyboard text editing event structure (event.editExt.*) when text would be + * truncated if stored in the text buffer SDL_TextEditingEvent + */ +typedef struct SDL_TextEditingExtEvent +{ + Uint32 type; /**< ::SDL_TEXTEDITING_EXT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + char* text; /**< The editing text, which should be freed with SDL_free(), and will not be NULL */ + Sint32 start; /**< The start cursor of selected editing text */ + Sint32 length; /**< The length of selected editing text */ +} SDL_TextEditingExtEvent; + +#define SDL_TEXTINPUTEVENT_TEXT_SIZE (32) +/** + * \brief Keyboard text input event structure (event.text.*) + */ +typedef struct SDL_TextInputEvent +{ + Uint32 type; /**< ::SDL_TEXTINPUT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */ +} SDL_TextInputEvent; + +/** + * \brief Mouse motion event structure (event.motion.*) + */ +typedef struct SDL_MouseMotionEvent +{ + Uint32 type; /**< ::SDL_MOUSEMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Uint32 state; /**< The current button state */ + Sint32 x; /**< X coordinate, relative to window */ + Sint32 y; /**< Y coordinate, relative to window */ + Sint32 xrel; /**< The relative motion in the X direction */ + Sint32 yrel; /**< The relative motion in the Y direction */ +} SDL_MouseMotionEvent; + +/** + * \brief Mouse button event structure (event.button.*) + */ +typedef struct SDL_MouseButtonEvent +{ + Uint32 type; /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Uint8 button; /**< The mouse button index */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 clicks; /**< 1 for single-click, 2 for double-click, etc. */ + Uint8 padding1; + Sint32 x; /**< X coordinate, relative to window */ + Sint32 y; /**< Y coordinate, relative to window */ +} SDL_MouseButtonEvent; + +/** + * \brief Mouse wheel event structure (event.wheel.*) + */ +typedef struct SDL_MouseWheelEvent +{ + Uint32 type; /**< ::SDL_MOUSEWHEEL */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */ + Sint32 y; /**< The amount scrolled vertically, positive away from the user and negative toward the user */ + Uint32 direction; /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */ + float preciseX; /**< The amount scrolled horizontally, positive to the right and negative to the left, with float precision (added in 2.0.18) */ + float preciseY; /**< The amount scrolled vertically, positive away from the user and negative toward the user, with float precision (added in 2.0.18) */ +} SDL_MouseWheelEvent; + +/** + * \brief Joystick axis motion event structure (event.jaxis.*) + */ +typedef struct SDL_JoyAxisEvent +{ + Uint32 type; /**< ::SDL_JOYAXISMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 axis; /**< The joystick axis index */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 value; /**< The axis value (range: -32768 to 32767) */ + Uint16 padding4; +} SDL_JoyAxisEvent; + +/** + * \brief Joystick trackball motion event structure (event.jball.*) + */ +typedef struct SDL_JoyBallEvent +{ + Uint32 type; /**< ::SDL_JOYBALLMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 ball; /**< The joystick trackball index */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 xrel; /**< The relative motion in the X direction */ + Sint16 yrel; /**< The relative motion in the Y direction */ +} SDL_JoyBallEvent; + +/** + * \brief Joystick hat position change event structure (event.jhat.*) + */ +typedef struct SDL_JoyHatEvent +{ + Uint32 type; /**< ::SDL_JOYHATMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 hat; /**< The joystick hat index */ + Uint8 value; /**< The hat position value. + * \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP + * \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT + * \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN + * + * Note that zero means the POV is centered. + */ + Uint8 padding1; + Uint8 padding2; +} SDL_JoyHatEvent; + +/** + * \brief Joystick button event structure (event.jbutton.*) + */ +typedef struct SDL_JoyButtonEvent +{ + Uint32 type; /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 button; /**< The joystick button index */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 padding1; + Uint8 padding2; +} SDL_JoyButtonEvent; + +/** + * \brief Joystick device event structure (event.jdevice.*) + */ +typedef struct SDL_JoyDeviceEvent +{ + Uint32 type; /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED event */ +} SDL_JoyDeviceEvent; + + +/** + * \brief Game controller axis motion event structure (event.caxis.*) + */ +typedef struct SDL_ControllerAxisEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERAXISMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 axis; /**< The controller axis (SDL_GameControllerAxis) */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 value; /**< The axis value (range: -32768 to 32767) */ + Uint16 padding4; +} SDL_ControllerAxisEvent; + + +/** + * \brief Game controller button event structure (event.cbutton.*) + */ +typedef struct SDL_ControllerButtonEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 button; /**< The controller button (SDL_GameControllerButton) */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 padding1; + Uint8 padding2; +} SDL_ControllerButtonEvent; + + +/** + * \brief Controller device event structure (event.cdevice.*) + */ +typedef struct SDL_ControllerDeviceEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, or ::SDL_CONTROLLERDEVICEREMAPPED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ +} SDL_ControllerDeviceEvent; + +/** + * \brief Game controller touchpad event structure (event.ctouchpad.*) + */ +typedef struct SDL_ControllerTouchpadEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERTOUCHPADDOWN or ::SDL_CONTROLLERTOUCHPADMOTION or ::SDL_CONTROLLERTOUCHPADUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Sint32 touchpad; /**< The index of the touchpad */ + Sint32 finger; /**< The index of the finger on the touchpad */ + float x; /**< Normalized in the range 0...1 with 0 being on the left */ + float y; /**< Normalized in the range 0...1 with 0 being at the top */ + float pressure; /**< Normalized in the range 0...1 */ +} SDL_ControllerTouchpadEvent; + +/** + * \brief Game controller sensor event structure (event.csensor.*) + */ +typedef struct SDL_ControllerSensorEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERSENSORUPDATE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Sint32 sensor; /**< The type of the sensor, one of the values of ::SDL_SensorType */ + float data[3]; /**< Up to 3 values from the sensor, as defined in SDL_sensor.h */ +} SDL_ControllerSensorEvent; + +/** + * \brief Audio device event structure (event.adevice.*) + */ +typedef struct SDL_AudioDeviceEvent +{ + Uint32 type; /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 which; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */ + Uint8 iscapture; /**< zero if an output device, non-zero if a capture device. */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; +} SDL_AudioDeviceEvent; + + +/** + * \brief Touch finger event structure (event.tfinger.*) + */ +typedef struct SDL_TouchFingerEvent +{ + Uint32 type; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_TouchID touchId; /**< The touch device id */ + SDL_FingerID fingerId; + float x; /**< Normalized in the range 0...1 */ + float y; /**< Normalized in the range 0...1 */ + float dx; /**< Normalized in the range -1...1 */ + float dy; /**< Normalized in the range -1...1 */ + float pressure; /**< Normalized in the range 0...1 */ + Uint32 windowID; /**< The window underneath the finger, if any */ +} SDL_TouchFingerEvent; + + +/** + * \brief Multiple Finger Gesture Event (event.mgesture.*) + */ +typedef struct SDL_MultiGestureEvent +{ + Uint32 type; /**< ::SDL_MULTIGESTURE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_TouchID touchId; /**< The touch device id */ + float dTheta; + float dDist; + float x; + float y; + Uint16 numFingers; + Uint16 padding; +} SDL_MultiGestureEvent; + + +/** + * \brief Dollar Gesture Event (event.dgesture.*) + */ +typedef struct SDL_DollarGestureEvent +{ + Uint32 type; /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_TouchID touchId; /**< The touch device id */ + SDL_GestureID gestureId; + Uint32 numFingers; + float error; + float x; /**< Normalized center of gesture */ + float y; /**< Normalized center of gesture */ +} SDL_DollarGestureEvent; + + +/** + * \brief An event used to request a file open by the system (event.drop.*) + * This event is enabled by default, you can disable it with SDL_EventState(). + * \note If this event is enabled, you must free the filename in the event. + */ +typedef struct SDL_DropEvent +{ + Uint32 type; /**< ::SDL_DROPBEGIN or ::SDL_DROPFILE or ::SDL_DROPTEXT or ::SDL_DROPCOMPLETE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + char *file; /**< The file name, which should be freed with SDL_free(), is NULL on begin/complete */ + Uint32 windowID; /**< The window that was dropped on, if any */ +} SDL_DropEvent; + + +/** + * \brief Sensor event structure (event.sensor.*) + */ +typedef struct SDL_SensorEvent +{ + Uint32 type; /**< ::SDL_SENSORUPDATE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Sint32 which; /**< The instance ID of the sensor */ + float data[6]; /**< Up to 6 values from the sensor - additional values can be queried using SDL_SensorGetData() */ +} SDL_SensorEvent; + +/** + * \brief The "quit requested" event + */ +typedef struct SDL_QuitEvent +{ + Uint32 type; /**< ::SDL_QUIT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ +} SDL_QuitEvent; + +/** + * \brief OS Specific event + */ +typedef struct SDL_OSEvent +{ + Uint32 type; /**< ::SDL_QUIT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ +} SDL_OSEvent; + +/** + * \brief A user-defined event type (event.user.*) + */ +typedef struct SDL_UserEvent +{ + Uint32 type; /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The associated window if any */ + Sint32 code; /**< User defined event code */ + void *data1; /**< User defined data pointer */ + void *data2; /**< User defined data pointer */ +} SDL_UserEvent; + + +struct SDL_SysWMmsg; +typedef struct SDL_SysWMmsg SDL_SysWMmsg; + +/** + * \brief A video driver dependent system event (event.syswm.*) + * This event is disabled by default, you can enable it with SDL_EventState() + * + * \note If you want to use this event, you should include SDL_syswm.h. + */ +typedef struct SDL_SysWMEvent +{ + Uint32 type; /**< ::SDL_SYSWMEVENT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */ +} SDL_SysWMEvent; + +/** + * \brief General event structure + */ +typedef union SDL_Event +{ + Uint32 type; /**< Event type, shared with all events */ + SDL_CommonEvent common; /**< Common event data */ + SDL_DisplayEvent display; /**< Display event data */ + SDL_WindowEvent window; /**< Window event data */ + SDL_KeyboardEvent key; /**< Keyboard event data */ + SDL_TextEditingEvent edit; /**< Text editing event data */ + SDL_TextEditingExtEvent editExt; /**< Extended text editing event data */ + SDL_TextInputEvent text; /**< Text input event data */ + SDL_MouseMotionEvent motion; /**< Mouse motion event data */ + SDL_MouseButtonEvent button; /**< Mouse button event data */ + SDL_MouseWheelEvent wheel; /**< Mouse wheel event data */ + SDL_JoyAxisEvent jaxis; /**< Joystick axis event data */ + SDL_JoyBallEvent jball; /**< Joystick ball event data */ + SDL_JoyHatEvent jhat; /**< Joystick hat event data */ + SDL_JoyButtonEvent jbutton; /**< Joystick button event data */ + SDL_JoyDeviceEvent jdevice; /**< Joystick device change event data */ + SDL_ControllerAxisEvent caxis; /**< Game Controller axis event data */ + SDL_ControllerButtonEvent cbutton; /**< Game Controller button event data */ + SDL_ControllerDeviceEvent cdevice; /**< Game Controller device event data */ + SDL_ControllerTouchpadEvent ctouchpad; /**< Game Controller touchpad event data */ + SDL_ControllerSensorEvent csensor; /**< Game Controller sensor event data */ + SDL_AudioDeviceEvent adevice; /**< Audio device event data */ + SDL_SensorEvent sensor; /**< Sensor event data */ + SDL_QuitEvent quit; /**< Quit request event data */ + SDL_UserEvent user; /**< Custom event data */ + SDL_SysWMEvent syswm; /**< System dependent window event data */ + SDL_TouchFingerEvent tfinger; /**< Touch finger event data */ + SDL_MultiGestureEvent mgesture; /**< Gesture event data */ + SDL_DollarGestureEvent dgesture; /**< Gesture event data */ + SDL_DropEvent drop; /**< Drag and drop event data */ + + /* This is necessary for ABI compatibility between Visual C++ and GCC. + Visual C++ will respect the push pack pragma and use 52 bytes (size of + SDL_TextEditingEvent, the largest structure for 32-bit and 64-bit + architectures) for this union, and GCC will use the alignment of the + largest datatype within the union, which is 8 bytes on 64-bit + architectures. + + So... we'll add padding to force the size to be 56 bytes for both. + + On architectures where pointers are 16 bytes, this needs rounding up to + the next multiple of 16, 64, and on architectures where pointers are + even larger the size of SDL_UserEvent will dominate as being 3 pointers. + */ + Uint8 padding[sizeof(void *) <= 8 ? 56 : sizeof(void *) == 16 ? 64 : 3 * sizeof(void *)]; +} SDL_Event; + +/* Make sure we haven't broken binary compatibility */ +SDL_COMPILE_TIME_ASSERT(SDL_Event, sizeof(SDL_Event) == sizeof(((SDL_Event *)NULL)->padding)); + + +/* Function prototypes */ + +/** + * Pump the event loop, gathering events from the input devices. + * + * This function updates the event queue and internal input device state. + * + * **WARNING**: This should only be run in the thread that initialized the + * video subsystem, and for extra safety, you should consider only doing those + * things on the main thread in any case. + * + * SDL_PumpEvents() gathers all the pending input information from devices and + * places it in the event queue. Without calls to SDL_PumpEvents() no events + * would ever be placed on the queue. Often the need for calls to + * SDL_PumpEvents() is hidden from the user since SDL_PollEvent() and + * SDL_WaitEvent() implicitly call SDL_PumpEvents(). However, if you are not + * polling or waiting for events (e.g. you are filtering them), then you must + * call SDL_PumpEvents() to force an event queue update. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_WaitEvent + */ +extern DECLSPEC void SDLCALL SDL_PumpEvents(void); + +/* @{ */ +typedef enum +{ + SDL_ADDEVENT, + SDL_PEEKEVENT, + SDL_GETEVENT +} SDL_eventaction; + +/** + * Check the event queue for messages and optionally return them. + * + * `action` may be any of the following: + * + * - `SDL_ADDEVENT`: up to `numevents` events will be added to the back of the + * event queue. + * - `SDL_PEEKEVENT`: `numevents` events at the front of the event queue, + * within the specified minimum and maximum type, will be returned to the + * caller and will _not_ be removed from the queue. + * - `SDL_GETEVENT`: up to `numevents` events at the front of the event queue, + * within the specified minimum and maximum type, will be returned to the + * caller and will be removed from the queue. + * + * You may have to call SDL_PumpEvents() before calling this function. + * Otherwise, the events may not be ready to be filtered when you call + * SDL_PeepEvents(). + * + * This function is thread-safe. + * + * \param events destination buffer for the retrieved events + * \param numevents if action is SDL_ADDEVENT, the number of events to add + * back to the event queue; if action is SDL_PEEKEVENT or + * SDL_GETEVENT, the maximum number of events to retrieve + * \param action action to take; see [[#action|Remarks]] for details + * \param minType minimum value of the event type to be considered; + * SDL_FIRSTEVENT is a safe choice + * \param maxType maximum value of the event type to be considered; + * SDL_LASTEVENT is a safe choice + * \returns the number of events actually stored or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_PumpEvents + * \sa SDL_PushEvent + */ +extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents, + SDL_eventaction action, + Uint32 minType, Uint32 maxType); +/* @} */ + +/** + * Check for the existence of a certain event type in the event queue. + * + * If you need to check for a range of event types, use SDL_HasEvents() + * instead. + * + * \param type the type of event to be queried; see SDL_EventType for details + * \returns SDL_TRUE if events matching `type` are present, or SDL_FALSE if + * events matching `type` are not present. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasEvents + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 type); + + +/** + * Check for the existence of certain event types in the event queue. + * + * If you need to check for a single event type, use SDL_HasEvent() instead. + * + * \param minType the low end of event type to be queried, inclusive; see + * SDL_EventType for details + * \param maxType the high end of event type to be queried, inclusive; see + * SDL_EventType for details + * \returns SDL_TRUE if events with type >= `minType` and <= `maxType` are + * present, or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasEvents + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType); + +/** + * Clear events of a specific type from the event queue. + * + * This will unconditionally remove any events from the queue that match + * `type`. If you need to remove a range of event types, use SDL_FlushEvents() + * instead. + * + * It's also normal to just ignore events you don't care about in your event + * loop without calling this function. + * + * This function only affects currently queued events. If you want to make + * sure that all pending OS events are flushed, you can call SDL_PumpEvents() + * on the main thread immediately before the flush call. + * + * \param type the type of event to be cleared; see SDL_EventType for details + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FlushEvents + */ +extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type); + +/** + * Clear events of a range of types from the event queue. + * + * This will unconditionally remove any events from the queue that are in the + * range of `minType` to `maxType`, inclusive. If you need to remove a single + * event type, use SDL_FlushEvent() instead. + * + * It's also normal to just ignore events you don't care about in your event + * loop without calling this function. + * + * This function only affects currently queued events. If you want to make + * sure that all pending OS events are flushed, you can call SDL_PumpEvents() + * on the main thread immediately before the flush call. + * + * \param minType the low end of event type to be cleared, inclusive; see + * SDL_EventType for details + * \param maxType the high end of event type to be cleared, inclusive; see + * SDL_EventType for details + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FlushEvent + */ +extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType); + +/** + * Poll for currently pending events. + * + * If `event` is not NULL, the next event is removed from the queue and stored + * in the SDL_Event structure pointed to by `event`. The 1 returned refers to + * this event, immediately stored in the SDL Event structure -- not an event + * to follow. + * + * If `event` is NULL, it simply returns 1 if there is an event in the queue, + * but will not remove it from the queue. + * + * As this function may implicitly call SDL_PumpEvents(), you can only call + * this function in the thread that set the video mode. + * + * SDL_PollEvent() is the favored way of receiving system events since it can + * be done from the main loop and does not suspend the main loop while waiting + * on an event to be posted. + * + * The common practice is to fully process the event queue once every frame, + * usually as a first step before updating the game's state: + * + * ```c + * while (game_is_still_running) { + * SDL_Event event; + * while (SDL_PollEvent(&event)) { // poll until all events are handled! + * // decide what to do with this event. + * } + * + * // update game state, draw the current frame + * } + * ``` + * + * \param event the SDL_Event structure to be filled with the next event from + * the queue, or NULL + * \returns 1 if there is a pending event or 0 if there are none available. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetEventFilter + * \sa SDL_PeepEvents + * \sa SDL_PushEvent + * \sa SDL_SetEventFilter + * \sa SDL_WaitEvent + * \sa SDL_WaitEventTimeout + */ +extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event); + +/** + * Wait indefinitely for the next available event. + * + * If `event` is not NULL, the next event is removed from the queue and stored + * in the SDL_Event structure pointed to by `event`. + * + * As this function may implicitly call SDL_PumpEvents(), you can only call + * this function in the thread that initialized the video subsystem. + * + * \param event the SDL_Event structure to be filled in with the next event + * from the queue, or NULL + * \returns 1 on success or 0 if there was an error while waiting for events; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_PumpEvents + * \sa SDL_WaitEventTimeout + */ +extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event); + +/** + * Wait until the specified timeout (in milliseconds) for the next available + * event. + * + * If `event` is not NULL, the next event is removed from the queue and stored + * in the SDL_Event structure pointed to by `event`. + * + * As this function may implicitly call SDL_PumpEvents(), you can only call + * this function in the thread that initialized the video subsystem. + * + * \param event the SDL_Event structure to be filled in with the next event + * from the queue, or NULL + * \param timeout the maximum number of milliseconds to wait for the next + * available event + * \returns 1 on success or 0 if there was an error while waiting for events; + * call SDL_GetError() for more information. This also returns 0 if + * the timeout elapsed without an event arriving. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_PumpEvents + * \sa SDL_WaitEvent + */ +extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event * event, + int timeout); + +/** + * Add an event to the event queue. + * + * The event queue can actually be used as a two way communication channel. + * Not only can events be read from the queue, but the user can also push + * their own events onto it. `event` is a pointer to the event structure you + * wish to push onto the queue. The event is copied into the queue, and the + * caller may dispose of the memory pointed to after SDL_PushEvent() returns. + * + * Note: Pushing device input events onto the queue doesn't modify the state + * of the device within SDL. + * + * This function is thread-safe, and can be called from other threads safely. + * + * Note: Events pushed onto the queue with SDL_PushEvent() get passed through + * the event filter but events added with SDL_PeepEvents() do not. + * + * For pushing application-specific events, please use SDL_RegisterEvents() to + * get an event type that does not conflict with other code that also wants + * its own custom event types. + * + * \param event the SDL_Event to be added to the queue + * \returns 1 on success, 0 if the event was filtered, or a negative error + * code on failure; call SDL_GetError() for more information. A + * common reason for error is the event queue being full. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PeepEvents + * \sa SDL_PollEvent + * \sa SDL_RegisterEvents + */ +extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event); + +/** + * A function pointer used for callbacks that watch the event queue. + * + * \param userdata what was passed as `userdata` to SDL_SetEventFilter() + * or SDL_AddEventWatch, etc + * \param event the event that triggered the callback + * \returns 1 to permit event to be added to the queue, and 0 to disallow + * it. When used with SDL_AddEventWatch, the return value is ignored. + * + * \sa SDL_SetEventFilter + * \sa SDL_AddEventWatch + */ +typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event); + +/** + * Set up a filter to process all events before they change internal state and + * are posted to the internal event queue. + * + * If the filter function returns 1 when called, then the event will be added + * to the internal queue. If it returns 0, then the event will be dropped from + * the queue, but the internal state will still be updated. This allows + * selective filtering of dynamically arriving events. + * + * **WARNING**: Be very careful of what you do in the event filter function, + * as it may run in a different thread! + * + * On platforms that support it, if the quit event is generated by an + * interrupt signal (e.g. pressing Ctrl-C), it will be delivered to the + * application at the next event poll. + * + * There is one caveat when dealing with the ::SDL_QuitEvent event type. The + * event filter is only called when the window manager desires to close the + * application window. If the event filter returns 1, then the window will be + * closed, otherwise the window will remain open if possible. + * + * Note: Disabled events never make it to the event filter function; see + * SDL_EventState(). + * + * Note: If you just want to inspect events without filtering, you should use + * SDL_AddEventWatch() instead. + * + * Note: Events pushed onto the queue with SDL_PushEvent() get passed through + * the event filter, but events pushed onto the queue with SDL_PeepEvents() do + * not. + * + * \param filter An SDL_EventFilter function to call when an event happens + * \param userdata a pointer that is passed to `filter` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddEventWatch + * \sa SDL_EventState + * \sa SDL_GetEventFilter + * \sa SDL_PeepEvents + * \sa SDL_PushEvent + */ +extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter, + void *userdata); + +/** + * Query the current event filter. + * + * This function can be used to "chain" filters, by saving the existing filter + * before replacing it with a function that will call that saved filter. + * + * \param filter the current callback function will be stored here + * \param userdata the pointer that is passed to the current event filter will + * be stored here + * \returns SDL_TRUE on success or SDL_FALSE if there is no event filter set. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetEventFilter + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter, + void **userdata); + +/** + * Add a callback to be triggered when an event is added to the event queue. + * + * `filter` will be called when an event happens, and its return value is + * ignored. + * + * **WARNING**: Be very careful of what you do in the event filter function, + * as it may run in a different thread! + * + * If the quit event is generated by a signal (e.g. SIGINT), it will bypass + * the internal queue and be delivered to the watch callback immediately, and + * arrive at the next event poll. + * + * Note: the callback is called for events posted by the user through + * SDL_PushEvent(), but not for disabled events, nor for events by a filter + * callback set with SDL_SetEventFilter(), nor for events posted by the user + * through SDL_PeepEvents(). + * + * \param filter an SDL_EventFilter function to call when an event happens. + * \param userdata a pointer that is passed to `filter` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DelEventWatch + * \sa SDL_SetEventFilter + */ +extern DECLSPEC void SDLCALL SDL_AddEventWatch(SDL_EventFilter filter, + void *userdata); + +/** + * Remove an event watch callback added with SDL_AddEventWatch(). + * + * This function takes the same input as SDL_AddEventWatch() to identify and + * delete the corresponding callback. + * + * \param filter the function originally passed to SDL_AddEventWatch() + * \param userdata the pointer originally passed to SDL_AddEventWatch() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddEventWatch + */ +extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter, + void *userdata); + +/** + * Run a specific filter function on the current event queue, removing any + * events for which the filter returns 0. + * + * See SDL_SetEventFilter() for more information. Unlike SDL_SetEventFilter(), + * this function does not change the filter permanently, it only uses the + * supplied filter until this function returns. + * + * \param filter the SDL_EventFilter function to call when an event happens + * \param userdata a pointer that is passed to `filter` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetEventFilter + * \sa SDL_SetEventFilter + */ +extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, + void *userdata); + +/* @{ */ +#define SDL_QUERY -1 +#define SDL_IGNORE 0 +#define SDL_DISABLE 0 +#define SDL_ENABLE 1 + +/** + * Set the state of processing events by type. + * + * `state` may be any of the following: + * + * - `SDL_QUERY`: returns the current processing state of the specified event + * - `SDL_IGNORE` (aka `SDL_DISABLE`): the event will automatically be dropped + * from the event queue and will not be filtered + * - `SDL_ENABLE`: the event will be processed normally + * + * \param type the type of event; see SDL_EventType for details + * \param state how to process the event + * \returns `SDL_DISABLE` or `SDL_ENABLE`, representing the processing state + * of the event before this function makes any changes to it. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetEventState + */ +extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint32 type, int state); +/* @} */ +#define SDL_GetEventState(type) SDL_EventState(type, SDL_QUERY) + +/** + * Allocate a set of user-defined events, and return the beginning event + * number for that set of events. + * + * Calling this function with `numevents` <= 0 is an error and will return + * (Uint32)-1. + * + * Note, (Uint32)-1 means the maximum unsigned 32-bit integer value (or + * 0xFFFFFFFF), but is clearer to write. + * + * \param numevents the number of events to be allocated + * \returns the beginning event number, or (Uint32)-1 if there are not enough + * user-defined events left. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PushEvent + */ +extern DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_events_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_filesystem.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_filesystem.h new file mode 100644 index 00000000000..1c92913161e --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_filesystem.h @@ -0,0 +1,145 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_filesystem.h + * + * \brief Include file for filesystem SDL API functions + */ + +#ifndef SDL_filesystem_h_ +#define SDL_filesystem_h_ + +#include + +#include + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the directory where the application was run from. + * + * This is not necessarily a fast call, so you should call this once near + * startup and save the string if you need it. + * + * **Mac OS X and iOS Specific Functionality**: If the application is in a + * ".app" bundle, this function returns the Resource directory (e.g. + * MyApp.app/Contents/Resources/). This behaviour can be overridden by adding + * a property to the Info.plist file. Adding a string key with the name + * SDL_FILESYSTEM_BASE_DIR_TYPE with a supported value will change the + * behaviour. + * + * Supported values for the SDL_FILESYSTEM_BASE_DIR_TYPE property (Given an + * application in /Applications/SDLApp/MyApp.app): + * + * - `resource`: bundle resource directory (the default). For example: + * `/Applications/SDLApp/MyApp.app/Contents/Resources` + * - `bundle`: the Bundle directory. For example: + * `/Applications/SDLApp/MyApp.app/` + * - `parent`: the containing directory of the bundle. For example: + * `/Applications/SDLApp/` + * + * The returned path is guaranteed to end with a path separator ('\' on + * Windows, '/' on most other platforms). + * + * The pointer returned is owned by the caller. Please call SDL_free() on the + * pointer when done with it. + * + * \returns an absolute path in UTF-8 encoding to the application data + * directory. NULL will be returned on error or when the platform + * doesn't implement this functionality, call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_GetPrefPath + */ +extern DECLSPEC char *SDLCALL SDL_GetBasePath(void); + +/** + * Get the user-and-app-specific path where files can be written. + * + * Get the "pref dir". This is meant to be where users can write personal + * files (preferences and save games, etc) that are specific to your + * application. This directory is unique per user, per application. + * + * This function will decide the appropriate location in the native + * filesystem, create the directory if necessary, and return a string of the + * absolute path to the directory in UTF-8 encoding. + * + * On Windows, the string might look like: + * + * `C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\` + * + * On Linux, the string might look like" + * + * `/home/bob/.local/share/My Program Name/` + * + * On Mac OS X, the string might look like: + * + * `/Users/bob/Library/Application Support/My Program Name/` + * + * You should assume the path returned by this function is the only safe place + * to write files (and that SDL_GetBasePath(), while it might be writable, or + * even the parent of the returned path, isn't where you should be writing + * things). + * + * Both the org and app strings may become part of a directory name, so please + * follow these rules: + * + * - Try to use the same org string (_including case-sensitivity_) for all + * your applications that use this function. + * - Always use a unique app string for each one, and make sure it never + * changes for an app once you've decided on it. + * - Unicode characters are legal, as long as it's UTF-8 encoded, but... + * - ...only use letters, numbers, and spaces. Avoid punctuation like "Game + * Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient. + * + * The returned path is guaranteed to end with a path separator ('\' on + * Windows, '/' on most other platforms). + * + * The pointer returned is owned by the caller. Please call SDL_free() on the + * pointer when done with it. + * + * \param org the name of your organization + * \param app the name of your application + * \returns a UTF-8 string of the user directory in platform-dependent + * notation. NULL if there's a problem (creating directory failed, + * etc.). + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_GetBasePath + */ +extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_filesystem_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_gamecontroller.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_gamecontroller.h new file mode 100644 index 00000000000..254397c6c96 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_gamecontroller.h @@ -0,0 +1,1002 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_gamecontroller.h + * + * Include file for SDL game controller event handling + */ + +#ifndef SDL_gamecontroller_h_ +#define SDL_gamecontroller_h_ + +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_gamecontroller.h + * + * In order to use these functions, SDL_Init() must have been called + * with the ::SDL_INIT_GAMECONTROLLER flag. This causes SDL to scan the system + * for game controllers, and load appropriate drivers. + * + * If you would like to receive controller updates while the application + * is in the background, you should set the following hint before calling + * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS + */ + +/** + * The gamecontroller structure used to identify an SDL game controller + */ +struct _SDL_GameController; +typedef struct _SDL_GameController SDL_GameController; + +typedef enum +{ + SDL_CONTROLLER_TYPE_UNKNOWN = 0, + SDL_CONTROLLER_TYPE_XBOX360, + SDL_CONTROLLER_TYPE_XBOXONE, + SDL_CONTROLLER_TYPE_PS3, + SDL_CONTROLLER_TYPE_PS4, + SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO, + SDL_CONTROLLER_TYPE_VIRTUAL, + SDL_CONTROLLER_TYPE_PS5, + SDL_CONTROLLER_TYPE_AMAZON_LUNA, + SDL_CONTROLLER_TYPE_GOOGLE_STADIA +} SDL_GameControllerType; + +typedef enum +{ + SDL_CONTROLLER_BINDTYPE_NONE = 0, + SDL_CONTROLLER_BINDTYPE_BUTTON, + SDL_CONTROLLER_BINDTYPE_AXIS, + SDL_CONTROLLER_BINDTYPE_HAT +} SDL_GameControllerBindType; + +/** + * Get the SDL joystick layer binding for this controller button/axis mapping + */ +typedef struct SDL_GameControllerButtonBind +{ + SDL_GameControllerBindType bindType; + union + { + int button; + int axis; + struct { + int hat; + int hat_mask; + } hat; + } value; + +} SDL_GameControllerButtonBind; + + +/** + * To count the number of game controllers in the system for the following: + * + * ```c + * int nJoysticks = SDL_NumJoysticks(); + * int nGameControllers = 0; + * for (int i = 0; i < nJoysticks; i++) { + * if (SDL_IsGameController(i)) { + * nGameControllers++; + * } + * } + * ``` + * + * Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping() you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is: + * guid,name,mappings + * + * Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones. + * Under Windows there is a reserved GUID of "xinput" that covers any XInput devices. + * The mapping format for joystick is: + * bX - a joystick button, index X + * hX.Y - hat X with value Y + * aX - axis X of the joystick + * Buttons can be used as a controller axis and vice versa. + * + * This string shows an example of a valid mapping for a controller + * + * ```c + * "03000000341a00003608000000000000,PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", + * ``` + */ + +/** + * Load a set of Game Controller mappings from a seekable SDL data stream. + * + * You can call this function several times, if needed, to load different + * database files. + * + * If a new mapping is loaded for an already known controller GUID, the later + * version will overwrite the one currently loaded. + * + * Mappings not belonging to the current platform or with no platform field + * specified will be ignored (i.e. mappings for Linux will be ignored in + * Windows, etc). + * + * This function will load the text database entirely in memory before + * processing it, so take this into consideration if you are in a memory + * constrained environment. + * + * \param rw the data stream for the mappings to be added + * \param freerw non-zero to close the stream after being read + * \returns the number of mappings added or -1 on error; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_GameControllerAddMapping + * \sa SDL_GameControllerAddMappingsFromFile + * \sa SDL_GameControllerMappingForGUID + */ +extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, int freerw); + +/** + * Load a set of mappings from a file, filtered by the current SDL_GetPlatform() + * + * Convenience macro. + */ +#define SDL_GameControllerAddMappingsFromFile(file) SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file, "rb"), 1) + +/** + * Add support for controllers that SDL is unaware of or to cause an existing + * controller to have a different binding. + * + * The mapping string has the format "GUID,name,mapping", where GUID is the + * string value from SDL_JoystickGetGUIDString(), name is the human readable + * string for the device and mappings are controller mappings to joystick + * ones. Under Windows there is a reserved GUID of "xinput" that covers all + * XInput devices. The mapping format for joystick is: {| |bX |a joystick + * button, index X |- |hX.Y |hat X with value Y |- |aX |axis X of the joystick + * |} Buttons can be used as a controller axes and vice versa. + * + * This string shows an example of a valid mapping for a controller: + * + * ```c + * "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7" + * ``` + * + * \param mappingString the mapping string + * \returns 1 if a new mapping is added, 0 if an existing mapping is updated, + * -1 on error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerMapping + * \sa SDL_GameControllerMappingForGUID + */ +extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping(const char* mappingString); + +/** + * Get the number of mappings installed. + * + * \returns the number of mappings. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerNumMappings(void); + +/** + * Get the mapping at a particular index. + * + * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if + * the index is out of range. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForIndex(int mapping_index); + +/** + * Get the game controller mapping string for a given GUID. + * + * The returned string must be freed with SDL_free(). + * + * \param guid a structure containing the GUID for which a mapping is desired + * \returns a mapping string or NULL on error; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetDeviceGUID + * \sa SDL_JoystickGetGUID + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid); + +/** + * Get the current mapping of a Game Controller. + * + * The returned string must be freed with SDL_free(). + * + * Details about mappings are discussed with SDL_GameControllerAddMapping(). + * + * \param gamecontroller the game controller you want to get the current + * mapping for + * \returns a string that has the controller's mapping or NULL if no mapping + * is available; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerAddMapping + * \sa SDL_GameControllerMappingForGUID + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMapping(SDL_GameController *gamecontroller); + +/** + * Check if the given joystick is supported by the game controller interface. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * \param joystick_index the device_index of a device, up to + * SDL_NumJoysticks() + * \returns SDL_TRUE if the given joystick is supported by the game controller + * interface, SDL_FALSE if it isn't or it's an invalid index. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerNameForIndex + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index); + +/** + * Get the implementation dependent name for the game controller. + * + * This function can be called before any controllers are opened. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1 + * \returns the implementation-dependent name for the game controller, or NULL + * if there is no name or the index is invalid. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerName + * \sa SDL_GameControllerOpen + * \sa SDL_IsGameController + */ +extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_index); + +/** + * Get the type of a game controller. + * + * This can be called before any controllers are opened. + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1 + * \returns the controller type. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerTypeForIndex(int joystick_index); + +/** + * Get the mapping of a game controller. + * + * This can be called before any controllers are opened. + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1 + * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if + * no mapping is available. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC char *SDLCALL SDL_GameControllerMappingForDeviceIndex(int joystick_index); + +/** + * Open a game controller for use. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * The index passed as an argument refers to the N'th game controller on the + * system. This index is not the value which will identify this controller in + * future controller events. The joystick's instance id (SDL_JoystickID) will + * be used there instead. + * + * \param joystick_index the device_index of a device, up to + * SDL_NumJoysticks() + * \returns a gamecontroller identifier or NULL if an error occurred; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerClose + * \sa SDL_GameControllerNameForIndex + * \sa SDL_IsGameController + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerOpen(int joystick_index); + +/** + * Get the SDL_GameController associated with an instance id. + * + * \param joyid the instance id to get the SDL_GameController for + * \returns an SDL_GameController on success or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromInstanceID(SDL_JoystickID joyid); + +/** + * Get the SDL_GameController associated with a player index. + * + * Please note that the player index is _not_ the device index, nor is it the + * instance id! + * + * \param player_index the player index, which is not the device index or the + * instance id! + * \returns the SDL_GameController associated with a player index. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_GameControllerGetPlayerIndex + * \sa SDL_GameControllerSetPlayerIndex + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromPlayerIndex(int player_index); + +/** + * Get the implementation-dependent name for an opened game controller. + * + * This is the same name as returned by SDL_GameControllerNameForIndex(), but + * it takes a controller identifier instead of the (unstable) device index. + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen() + * \returns the implementation dependent name for the game controller, or NULL + * if there is no name or the identifier passed is invalid. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerNameForIndex + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *gamecontroller); + +/** + * Get the type of this currently opened controller + * + * This is the same name as returned by SDL_GameControllerTypeForIndex(), but + * it takes a controller identifier instead of the (unstable) device index. + * + * \param gamecontroller the game controller object to query. + * \returns the controller type. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerGetType(SDL_GameController *gamecontroller); + +/** + * Get the player index of an opened game controller. + * + * For XInput controllers this returns the XInput user index. + * + * \param gamecontroller the game controller object to query. + * \returns the player index for controller, or -1 if it's not available. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetPlayerIndex(SDL_GameController *gamecontroller); + +/** + * Set the player index of an opened game controller. + * + * \param gamecontroller the game controller object to adjust. + * \param player_index Player index to assign to this controller. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC void SDLCALL SDL_GameControllerSetPlayerIndex(SDL_GameController *gamecontroller, int player_index); + +/** + * Get the USB vendor ID of an opened controller, if available. + * + * If the vendor ID isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the USB vendor ID, or zero if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetVendor(SDL_GameController *gamecontroller); + +/** + * Get the USB product ID of an opened controller, if available. + * + * If the product ID isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the USB product ID, or zero if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProduct(SDL_GameController *gamecontroller); + +/** + * Get the product version of an opened controller, if available. + * + * If the product version isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the USB product version, or zero if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProductVersion(SDL_GameController *gamecontroller); + +/** + * Get the serial number of an opened controller, if available. + * + * Returns the serial number of the controller, or NULL if it is not + * available. + * + * \param gamecontroller the game controller object to query. + * \return the serial number, or NULL if unavailable. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC const char * SDLCALL SDL_GameControllerGetSerial(SDL_GameController *gamecontroller); + +/** + * Check if a controller has been opened and is currently connected. + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen() + * \returns SDL_TRUE if the controller has been opened and is currently + * connected, or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerClose + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerGetAttached(SDL_GameController *gamecontroller); + +/** + * Get the Joystick ID from a Game Controller. + * + * This function will give you a SDL_Joystick object, which allows you to use + * the SDL_Joystick functions with a SDL_GameController object. This would be + * useful for getting a joystick's position at any given time, even if it + * hasn't moved (moving it would produce an event, which would have the axis' + * value). + * + * The pointer returned is owned by the SDL_GameController. You should not + * call SDL_JoystickClose() on it, for example, since doing so will likely + * cause SDL to crash. + * + * \param gamecontroller the game controller object that you want to get a + * joystick from + * \returns a SDL_Joystick object; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_GameControllerGetJoystick(SDL_GameController *gamecontroller); + +/** + * Query or change current state of Game Controller events. + * + * If controller events are disabled, you must call SDL_GameControllerUpdate() + * yourself and check the state of the controller when you want controller + * information. + * + * Any number can be passed to SDL_GameControllerEventState(), but only -1, 0, + * and 1 will have any effect. Other numbers will just be returned. + * + * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` + * \returns the same value passed to the function, with exception to -1 + * (SDL_QUERY), which will return the current state. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickEventState + */ +extern DECLSPEC int SDLCALL SDL_GameControllerEventState(int state); + +/** + * Manually pump game controller updates if not using the loop. + * + * This function is called automatically by the event loop if events are + * enabled. Under such circumstances, it will not be necessary to call this + * function. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_GameControllerUpdate(void); + + +/** + * The list of axes available from a controller + * + * Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to SDL_JOYSTICK_AXIS_MAX, + * and are centered within ~8000 of zero, though advanced UI will allow users to set + * or autodetect the dead zone, which varies between controllers. + * + * Trigger axis values range from 0 to SDL_JOYSTICK_AXIS_MAX. + */ +typedef enum +{ + SDL_CONTROLLER_AXIS_INVALID = -1, + SDL_CONTROLLER_AXIS_LEFTX, + SDL_CONTROLLER_AXIS_LEFTY, + SDL_CONTROLLER_AXIS_RIGHTX, + SDL_CONTROLLER_AXIS_RIGHTY, + SDL_CONTROLLER_AXIS_TRIGGERLEFT, + SDL_CONTROLLER_AXIS_TRIGGERRIGHT, + SDL_CONTROLLER_AXIS_MAX +} SDL_GameControllerAxis; + +/** + * Convert a string into SDL_GameControllerAxis enum. + * + * This function is called internally to translate SDL_GameController mapping + * strings for the underlying joystick device into the consistent + * SDL_GameController mapping. You do not normally need to call this function + * unless you are parsing SDL_GameController mappings in your own code. + * + * Note specially that "righttrigger" and "lefttrigger" map to + * `SDL_CONTROLLER_AXIS_TRIGGERRIGHT` and `SDL_CONTROLLER_AXIS_TRIGGERLEFT`, + * respectively. + * + * \param str string representing a SDL_GameController axis + * \returns the SDL_GameControllerAxis enum corresponding to the input string, + * or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetStringForAxis + */ +extern DECLSPEC SDL_GameControllerAxis SDLCALL SDL_GameControllerGetAxisFromString(const char *str); + +/** + * Convert from an SDL_GameControllerAxis enum to a string. + * + * The caller should not SDL_free() the returned string. + * + * \param axis an enum value for a given SDL_GameControllerAxis + * \returns a string for the given axis, or NULL if an invalid axis is + * specified. The string returned is of the format used by + * SDL_GameController mapping strings. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetAxisFromString + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis); + +/** + * Get the SDL joystick layer binding for a controller axis mapping. + * + * \param gamecontroller a game controller + * \param axis an axis enum value (one of the SDL_GameControllerAxis values) + * \returns a SDL_GameControllerButtonBind describing the bind. On failure + * (like the given Controller axis doesn't exist on the device), its + * `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetBindForButton + */ +extern DECLSPEC SDL_GameControllerButtonBind SDLCALL +SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, + SDL_GameControllerAxis axis); + +/** + * Query whether a game controller has a given axis. + * + * This merely reports whether the controller's mapping defined this axis, as + * that is all the information SDL has about the physical device. + * + * \param gamecontroller a game controller + * \param axis an axis enum value (an SDL_GameControllerAxis value) + * \returns SDL_TRUE if the controller has this axis, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL +SDL_GameControllerHasAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); + +/** + * Get the current state of an axis control on a game controller. + * + * The axis indices start at index 0. + * + * The state is a value ranging from -32768 to 32767. Triggers, however, range + * from 0 to 32767 (they never return a negative value). + * + * \param gamecontroller a game controller + * \param axis an axis index (one of the SDL_GameControllerAxis values) + * \returns axis state (including 0) on success or 0 (also) on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetButton + */ +extern DECLSPEC Sint16 SDLCALL +SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); + +/** + * The list of buttons available from a controller + */ +typedef enum +{ + SDL_CONTROLLER_BUTTON_INVALID = -1, + SDL_CONTROLLER_BUTTON_A, + SDL_CONTROLLER_BUTTON_B, + SDL_CONTROLLER_BUTTON_X, + SDL_CONTROLLER_BUTTON_Y, + SDL_CONTROLLER_BUTTON_BACK, + SDL_CONTROLLER_BUTTON_GUIDE, + SDL_CONTROLLER_BUTTON_START, + SDL_CONTROLLER_BUTTON_LEFTSTICK, + SDL_CONTROLLER_BUTTON_RIGHTSTICK, + SDL_CONTROLLER_BUTTON_LEFTSHOULDER, + SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, + SDL_CONTROLLER_BUTTON_DPAD_UP, + SDL_CONTROLLER_BUTTON_DPAD_DOWN, + SDL_CONTROLLER_BUTTON_DPAD_LEFT, + SDL_CONTROLLER_BUTTON_DPAD_RIGHT, + SDL_CONTROLLER_BUTTON_MISC1, /* Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button */ + SDL_CONTROLLER_BUTTON_PADDLE1, /* Xbox Elite paddle P1 */ + SDL_CONTROLLER_BUTTON_PADDLE2, /* Xbox Elite paddle P3 */ + SDL_CONTROLLER_BUTTON_PADDLE3, /* Xbox Elite paddle P2 */ + SDL_CONTROLLER_BUTTON_PADDLE4, /* Xbox Elite paddle P4 */ + SDL_CONTROLLER_BUTTON_TOUCHPAD, /* PS4/PS5 touchpad button */ + SDL_CONTROLLER_BUTTON_MAX +} SDL_GameControllerButton; + +/** + * Convert a string into an SDL_GameControllerButton enum. + * + * This function is called internally to translate SDL_GameController mapping + * strings for the underlying joystick device into the consistent + * SDL_GameController mapping. You do not normally need to call this function + * unless you are parsing SDL_GameController mappings in your own code. + * + * \param str string representing a SDL_GameController axis + * \returns the SDL_GameControllerButton enum corresponding to the input + * string, or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_GameControllerButton SDLCALL SDL_GameControllerGetButtonFromString(const char *str); + +/** + * Convert from an SDL_GameControllerButton enum to a string. + * + * The caller should not SDL_free() the returned string. + * + * \param button an enum value for a given SDL_GameControllerButton + * \returns a string for the given button, or NULL if an invalid axis is + * specified. The string returned is of the format used by + * SDL_GameController mapping strings. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetButtonFromString + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForButton(SDL_GameControllerButton button); + +/** + * Get the SDL joystick layer binding for a controller button mapping. + * + * \param gamecontroller a game controller + * \param button an button enum value (an SDL_GameControllerButton value) + * \returns a SDL_GameControllerButtonBind describing the bind. On failure + * (like the given Controller button doesn't exist on the device), + * its `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetBindForAxis + */ +extern DECLSPEC SDL_GameControllerButtonBind SDLCALL +SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Query whether a game controller has a given button. + * + * This merely reports whether the controller's mapping defined this button, + * as that is all the information SDL has about the physical device. + * + * \param gamecontroller a game controller + * \param button a button enum value (an SDL_GameControllerButton value) + * \returns SDL_TRUE if the controller has this button, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Get the current state of a button on a game controller. + * + * \param gamecontroller a game controller + * \param button a button index (one of the SDL_GameControllerButton values) + * \returns 1 for pressed state or 0 for not pressed state or error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetAxis + */ +extern DECLSPEC Uint8 SDLCALL SDL_GameControllerGetButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Get the number of touchpads on a game controller. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetNumTouchpads(SDL_GameController *gamecontroller); + +/** + * Get the number of supported simultaneous fingers on a touchpad on a game + * controller. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetNumTouchpadFingers(SDL_GameController *gamecontroller, int touchpad); + +/** + * Get the current state of a finger on a touchpad on a game controller. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetTouchpadFinger(SDL_GameController *gamecontroller, int touchpad, int finger, Uint8 *state, float *x, float *y, float *pressure); + +/** + * Return whether a game controller has a particular sensor. + * + * \param gamecontroller The controller to query + * \param type The type of sensor to query + * \returns SDL_TRUE if the sensor exists, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasSensor(SDL_GameController *gamecontroller, SDL_SensorType type); + +/** + * Set whether data reporting for a game controller sensor is enabled. + * + * \param gamecontroller The controller to update + * \param type The type of sensor to enable/disable + * \param enabled Whether data reporting should be enabled + * \returns 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerSetSensorEnabled(SDL_GameController *gamecontroller, SDL_SensorType type, SDL_bool enabled); + +/** + * Query whether sensor data reporting is enabled for a game controller. + * + * \param gamecontroller The controller to query + * \param type The type of sensor to query + * \returns SDL_TRUE if the sensor is enabled, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerIsSensorEnabled(SDL_GameController *gamecontroller, SDL_SensorType type); + +/** + * Get the data rate (number of events per second) of a game controller + * sensor. + * + * \param gamecontroller The controller to query + * \param type The type of sensor to query + * \return the data rate, or 0.0f if the data rate is not available. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC float SDLCALL SDL_GameControllerGetSensorDataRate(SDL_GameController *gamecontroller, SDL_SensorType type); + +/** + * Get the current state of a game controller sensor. + * + * The number of values and interpretation of the data is sensor dependent. + * See SDL_sensor.h for the details for each type of sensor. + * + * \param gamecontroller The controller to query + * \param type The type of sensor to query + * \param data A pointer filled with the current sensor state + * \param num_values The number of values to write to data + * \return 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetSensorData(SDL_GameController *gamecontroller, SDL_SensorType type, float *data, int num_values); + +/** + * Start a rumble effect on a game controller. + * + * Each call to this function cancels any previous rumble effect, and calling + * it with 0 intensity stops any rumbling. + * + * \param gamecontroller The controller to vibrate + * \param low_frequency_rumble The intensity of the low frequency (left) + * rumble motor, from 0 to 0xFFFF + * \param high_frequency_rumble The intensity of the high frequency (right) + * rumble motor, from 0 to 0xFFFF + * \param duration_ms The duration of the rumble effect, in milliseconds + * \returns 0, or -1 if rumble isn't supported on this controller + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_GameControllerHasRumble + */ +extern DECLSPEC int SDLCALL SDL_GameControllerRumble(SDL_GameController *gamecontroller, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); + +/** + * Start a rumble effect in the game controller's triggers. + * + * Each call to this function cancels any previous trigger rumble effect, and + * calling it with 0 intensity stops any rumbling. + * + * Note that this is rumbling of the _triggers_ and not the game controller as + * a whole. This is currently only supported on Xbox One controllers. If you + * want the (more common) whole-controller rumble, use + * SDL_GameControllerRumble() instead. + * + * \param gamecontroller The controller to vibrate + * \param left_rumble The intensity of the left trigger rumble motor, from 0 + * to 0xFFFF + * \param right_rumble The intensity of the right trigger rumble motor, from 0 + * to 0xFFFF + * \param duration_ms The duration of the rumble effect, in milliseconds + * \returns 0, or -1 if trigger rumble isn't supported on this controller + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_GameControllerHasRumbleTriggers + */ +extern DECLSPEC int SDLCALL SDL_GameControllerRumbleTriggers(SDL_GameController *gamecontroller, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms); + +/** + * Query whether a game controller has an LED. + * + * \param gamecontroller The controller to query + * \returns SDL_TRUE, or SDL_FALSE if this controller does not have a + * modifiable LED + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasLED(SDL_GameController *gamecontroller); + +/** + * Query whether a game controller has rumble support. + * + * \param gamecontroller The controller to query + * \returns SDL_TRUE, or SDL_FALSE if this controller does not have rumble + * support + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerRumble + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumble(SDL_GameController *gamecontroller); + +/** + * Query whether a game controller has rumble support on triggers. + * + * \param gamecontroller The controller to query + * \returns SDL_TRUE, or SDL_FALSE if this controller does not have trigger + * rumble support + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerRumbleTriggers + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumbleTriggers(SDL_GameController *gamecontroller); + +/** + * Update a game controller's LED color. + * + * \param gamecontroller The controller to update + * \param red The intensity of the red LED + * \param green The intensity of the green LED + * \param blue The intensity of the blue LED + * \returns 0, or -1 if this controller does not have a modifiable LED + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerSetLED(SDL_GameController *gamecontroller, Uint8 red, Uint8 green, Uint8 blue); + +/** + * Send a controller specific effect packet + * + * \param gamecontroller The controller to affect + * \param data The data to send to the controller + * \param size The size of the data to send to the controller + * \returns 0, or -1 if this controller or driver doesn't support effect + * packets + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerSendEffect(SDL_GameController *gamecontroller, const void *data, int size); + +/** + * Close a game controller previously opened with SDL_GameControllerOpen(). + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC void SDLCALL SDL_GameControllerClose(SDL_GameController *gamecontroller); + +/** + * Return the sfSymbolsName for a given button on a game controller on Apple + * platforms. + * + * \param gamecontroller the controller to query + * \param button a button on the game controller + * \returns the sfSymbolsName or NULL if the name can't be found + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerGetAppleSFSymbolsNameForAxis + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button); + +/** + * Return the sfSymbolsName for a given axis on a game controller on Apple + * platforms. + * + * \param gamecontroller the controller to query + * \param axis an axis on the game controller + * \returns the sfSymbolsName or NULL if the name can't be found + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerGetAppleSFSymbolsNameForButton + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_gamecontroller_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_gesture.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_gesture.h new file mode 100644 index 00000000000..6af76adf8b8 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_gesture.h @@ -0,0 +1,117 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_gesture.h + * + * Include file for SDL gesture event handling. + */ + +#ifndef SDL_gesture_h_ +#define SDL_gesture_h_ + +#include +#include +#include + +#include + + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef Sint64 SDL_GestureID; + +/* Function prototypes */ + +/** + * Begin recording a gesture on a specified touch device or all touch devices. + * + * If the parameter `touchId` is -1 (i.e., all devices), this function will + * always return 1, regardless of whether there actually are any devices. + * + * \param touchId the touch device id, or -1 for all touch devices + * \returns 1 on success or 0 if the specified device could not be found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTouchDevice + */ +extern DECLSPEC int SDLCALL SDL_RecordGesture(SDL_TouchID touchId); + + +/** + * Save all currently loaded Dollar Gesture templates. + * + * \param dst a SDL_RWops to save to + * \returns the number of saved templates on success or 0 on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadDollarTemplates + * \sa SDL_SaveDollarTemplate + */ +extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(SDL_RWops *dst); + +/** + * Save a currently loaded Dollar Gesture template. + * + * \param gestureId a gesture id + * \param dst a SDL_RWops to save to + * \returns 1 on success or 0 on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadDollarTemplates + * \sa SDL_SaveAllDollarTemplates + */ +extern DECLSPEC int SDLCALL SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *dst); + + +/** + * Load Dollar Gesture templates from a file. + * + * \param touchId a touch id + * \param src a SDL_RWops to load from + * \returns the number of loaded templates on success or a negative error code + * (or 0) on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SaveAllDollarTemplates + * \sa SDL_SaveDollarTemplate + */ +extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_gesture_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_haptic.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_haptic.h new file mode 100644 index 00000000000..f9dee0b8131 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_haptic.h @@ -0,0 +1,1341 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_haptic.h + * + * \brief The SDL haptic subsystem allows you to control haptic (force feedback) + * devices. + * + * The basic usage is as follows: + * - Initialize the subsystem (::SDL_INIT_HAPTIC). + * - Open a haptic device. + * - SDL_HapticOpen() to open from index. + * - SDL_HapticOpenFromJoystick() to open from an existing joystick. + * - Create an effect (::SDL_HapticEffect). + * - Upload the effect with SDL_HapticNewEffect(). + * - Run the effect with SDL_HapticRunEffect(). + * - (optional) Free the effect with SDL_HapticDestroyEffect(). + * - Close the haptic device with SDL_HapticClose(). + * + * \par Simple rumble example: + * \code + * SDL_Haptic *haptic; + * + * // Open the device + * haptic = SDL_HapticOpen( 0 ); + * if (haptic == NULL) + * return -1; + * + * // Initialize simple rumble + * if (SDL_HapticRumbleInit( haptic ) != 0) + * return -1; + * + * // Play effect at 50% strength for 2 seconds + * if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0) + * return -1; + * SDL_Delay( 2000 ); + * + * // Clean up + * SDL_HapticClose( haptic ); + * \endcode + * + * \par Complete example: + * \code + * int test_haptic( SDL_Joystick * joystick ) { + * SDL_Haptic *haptic; + * SDL_HapticEffect effect; + * int effect_id; + * + * // Open the device + * haptic = SDL_HapticOpenFromJoystick( joystick ); + * if (haptic == NULL) return -1; // Most likely joystick isn't haptic + * + * // See if it can do sine waves + * if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) { + * SDL_HapticClose(haptic); // No sine effect + * return -1; + * } + * + * // Create the effect + * SDL_memset( &effect, 0, sizeof(SDL_HapticEffect) ); // 0 is safe default + * effect.type = SDL_HAPTIC_SINE; + * effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates + * effect.periodic.direction.dir[0] = 18000; // Force comes from south + * effect.periodic.period = 1000; // 1000 ms + * effect.periodic.magnitude = 20000; // 20000/32767 strength + * effect.periodic.length = 5000; // 5 seconds long + * effect.periodic.attack_length = 1000; // Takes 1 second to get max strength + * effect.periodic.fade_length = 1000; // Takes 1 second to fade away + * + * // Upload the effect + * effect_id = SDL_HapticNewEffect( haptic, &effect ); + * + * // Test the effect + * SDL_HapticRunEffect( haptic, effect_id, 1 ); + * SDL_Delay( 5000); // Wait for the effect to finish + * + * // We destroy the effect, although closing the device also does this + * SDL_HapticDestroyEffect( haptic, effect_id ); + * + * // Close the device + * SDL_HapticClose(haptic); + * + * return 0; // Success + * } + * \endcode + */ + +#ifndef SDL_haptic_h_ +#define SDL_haptic_h_ + +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* FIXME: For SDL 2.1, adjust all the magnitude variables to be Uint16 (0xFFFF). + * + * At the moment the magnitude variables are mixed between signed/unsigned, and + * it is also not made clear that ALL of those variables expect a max of 0x7FFF. + * + * Some platforms may have higher precision than that (Linux FF, Windows XInput) + * so we should fix the inconsistency in favor of higher possible precision, + * adjusting for platforms that use different scales. + * -flibit + */ + +/** + * \typedef SDL_Haptic + * + * \brief The haptic structure used to identify an SDL haptic. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticOpenFromJoystick + * \sa SDL_HapticClose + */ +struct _SDL_Haptic; +typedef struct _SDL_Haptic SDL_Haptic; + + +/** + * \name Haptic features + * + * Different haptic features a device can have. + */ +/* @{ */ + +/** + * \name Haptic effects + */ +/* @{ */ + +/** + * \brief Constant effect supported. + * + * Constant haptic effect. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_CONSTANT (1u<<0) + +/** + * \brief Sine wave effect supported. + * + * Periodic haptic effect that simulates sine waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SINE (1u<<1) + +/** + * \brief Left/Right effect supported. + * + * Haptic effect for direct control over high/low frequency motors. + * + * \sa SDL_HapticLeftRight + * \warning this value was SDL_HAPTIC_SQUARE right before 2.0.0 shipped. Sorry, + * we ran out of bits, and this is important for XInput devices. + */ +#define SDL_HAPTIC_LEFTRIGHT (1u<<2) + +/* !!! FIXME: put this back when we have more bits in 2.1 */ +/* #define SDL_HAPTIC_SQUARE (1<<2) */ + +/** + * \brief Triangle wave effect supported. + * + * Periodic haptic effect that simulates triangular waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_TRIANGLE (1u<<3) + +/** + * \brief Sawtoothup wave effect supported. + * + * Periodic haptic effect that simulates saw tooth up waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SAWTOOTHUP (1u<<4) + +/** + * \brief Sawtoothdown wave effect supported. + * + * Periodic haptic effect that simulates saw tooth down waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SAWTOOTHDOWN (1u<<5) + +/** + * \brief Ramp effect supported. + * + * Ramp haptic effect. + * + * \sa SDL_HapticRamp + */ +#define SDL_HAPTIC_RAMP (1u<<6) + +/** + * \brief Spring effect supported - uses axes position. + * + * Condition haptic effect that simulates a spring. Effect is based on the + * axes position. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_SPRING (1u<<7) + +/** + * \brief Damper effect supported - uses axes velocity. + * + * Condition haptic effect that simulates dampening. Effect is based on the + * axes velocity. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_DAMPER (1u<<8) + +/** + * \brief Inertia effect supported - uses axes acceleration. + * + * Condition haptic effect that simulates inertia. Effect is based on the axes + * acceleration. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_INERTIA (1u<<9) + +/** + * \brief Friction effect supported - uses axes movement. + * + * Condition haptic effect that simulates friction. Effect is based on the + * axes movement. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_FRICTION (1u<<10) + +/** + * \brief Custom effect is supported. + * + * User defined custom haptic effect. + */ +#define SDL_HAPTIC_CUSTOM (1u<<11) + +/* @} *//* Haptic effects */ + +/* These last few are features the device has, not effects */ + +/** + * \brief Device can set global gain. + * + * Device supports setting the global gain. + * + * \sa SDL_HapticSetGain + */ +#define SDL_HAPTIC_GAIN (1u<<12) + +/** + * \brief Device can set autocenter. + * + * Device supports setting autocenter. + * + * \sa SDL_HapticSetAutocenter + */ +#define SDL_HAPTIC_AUTOCENTER (1u<<13) + +/** + * \brief Device can be queried for effect status. + * + * Device supports querying effect status. + * + * \sa SDL_HapticGetEffectStatus + */ +#define SDL_HAPTIC_STATUS (1u<<14) + +/** + * \brief Device can be paused. + * + * Devices supports being paused. + * + * \sa SDL_HapticPause + * \sa SDL_HapticUnpause + */ +#define SDL_HAPTIC_PAUSE (1u<<15) + + +/** + * \name Direction encodings + */ +/* @{ */ + +/** + * \brief Uses polar coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_POLAR 0 + +/** + * \brief Uses cartesian coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_CARTESIAN 1 + +/** + * \brief Uses spherical coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_SPHERICAL 2 + +/** + * \brief Use this value to play an effect on the steering wheel axis. This + * provides better compatibility across platforms and devices as SDL will guess + * the correct axis. + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_STEERING_AXIS 3 + +/* @} *//* Direction encodings */ + +/* @} *//* Haptic features */ + +/* + * Misc defines. + */ + +/** + * \brief Used to play a device an infinite number of times. + * + * \sa SDL_HapticRunEffect + */ +#define SDL_HAPTIC_INFINITY 4294967295U + + +/** + * \brief Structure that represents a haptic direction. + * + * This is the direction where the force comes from, + * instead of the direction in which the force is exerted. + * + * Directions can be specified by: + * - ::SDL_HAPTIC_POLAR : Specified by polar coordinates. + * - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. + * - ::SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates. + * + * Cardinal directions of the haptic device are relative to the positioning + * of the device. North is considered to be away from the user. + * + * The following diagram represents the cardinal directions: + * \verbatim + .--. + |__| .-------. + |=.| |.-----.| + |--| || || + | | |'-----'| + |__|~')_____(' + [ COMPUTER ] + + + North (0,-1) + ^ + | + | + (-1,0) West <----[ HAPTIC ]----> East (1,0) + | + | + v + South (0,1) + + + [ USER ] + \|||/ + (o o) + ---ooO-(_)-Ooo--- + \endverbatim + * + * If type is ::SDL_HAPTIC_POLAR, direction is encoded by hundredths of a + * degree starting north and turning clockwise. ::SDL_HAPTIC_POLAR only uses + * the first \c dir parameter. The cardinal directions would be: + * - North: 0 (0 degrees) + * - East: 9000 (90 degrees) + * - South: 18000 (180 degrees) + * - West: 27000 (270 degrees) + * + * If type is ::SDL_HAPTIC_CARTESIAN, direction is encoded by three positions + * (X axis, Y axis and Z axis (with 3 axes)). ::SDL_HAPTIC_CARTESIAN uses + * the first three \c dir parameters. The cardinal directions would be: + * - North: 0,-1, 0 + * - East: 1, 0, 0 + * - South: 0, 1, 0 + * - West: -1, 0, 0 + * + * The Z axis represents the height of the effect if supported, otherwise + * it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you + * can use any multiple you want, only the direction matters. + * + * If type is ::SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. + * The first two \c dir parameters are used. The \c dir parameters are as + * follows (all values are in hundredths of degrees): + * - Degrees from (1, 0) rotated towards (0, 1). + * - Degrees towards (0, 0, 1) (device needs at least 3 axes). + * + * + * Example of force coming from the south with all encodings (force coming + * from the south means the user will have to pull the stick to counteract): + * \code + * SDL_HapticDirection direction; + * + * // Cartesian directions + * direction.type = SDL_HAPTIC_CARTESIAN; // Using cartesian direction encoding. + * direction.dir[0] = 0; // X position + * direction.dir[1] = 1; // Y position + * // Assuming the device has 2 axes, we don't need to specify third parameter. + * + * // Polar directions + * direction.type = SDL_HAPTIC_POLAR; // We'll be using polar direction encoding. + * direction.dir[0] = 18000; // Polar only uses first parameter + * + * // Spherical coordinates + * direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding + * direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters. + * \endcode + * + * \sa SDL_HAPTIC_POLAR + * \sa SDL_HAPTIC_CARTESIAN + * \sa SDL_HAPTIC_SPHERICAL + * \sa SDL_HAPTIC_STEERING_AXIS + * \sa SDL_HapticEffect + * \sa SDL_HapticNumAxes + */ +typedef struct SDL_HapticDirection +{ + Uint8 type; /**< The type of encoding. */ + Sint32 dir[3]; /**< The encoded direction. */ +} SDL_HapticDirection; + + +/** + * \brief A structure containing a template for a Constant effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_CONSTANT effect. + * + * A constant effect applies a constant force in the specified direction + * to the joystick. + * + * \sa SDL_HAPTIC_CONSTANT + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticConstant +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_CONSTANT */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Constant */ + Sint16 level; /**< Strength of the constant effect. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticConstant; + +/** + * \brief A structure containing a template for a Periodic effect. + * + * The struct handles the following effects: + * - ::SDL_HAPTIC_SINE + * - ::SDL_HAPTIC_LEFTRIGHT + * - ::SDL_HAPTIC_TRIANGLE + * - ::SDL_HAPTIC_SAWTOOTHUP + * - ::SDL_HAPTIC_SAWTOOTHDOWN + * + * A periodic effect consists in a wave-shaped effect that repeats itself + * over time. The type determines the shape of the wave and the parameters + * determine the dimensions of the wave. + * + * Phase is given by hundredth of a degree meaning that giving the phase a value + * of 9000 will displace it 25% of its period. Here are sample values: + * - 0: No phase displacement. + * - 9000: Displaced 25% of its period. + * - 18000: Displaced 50% of its period. + * - 27000: Displaced 75% of its period. + * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred. + * + * Examples: + * \verbatim + SDL_HAPTIC_SINE + __ __ __ __ + / \ / \ / \ / + / \__/ \__/ \__/ + + SDL_HAPTIC_SQUARE + __ __ __ __ __ + | | | | | | | | | | + | |__| |__| |__| |__| | + + SDL_HAPTIC_TRIANGLE + /\ /\ /\ /\ /\ + / \ / \ / \ / \ / + / \/ \/ \/ \/ + + SDL_HAPTIC_SAWTOOTHUP + /| /| /| /| /| /| /| + / | / | / | / | / | / | / | + / |/ |/ |/ |/ |/ |/ | + + SDL_HAPTIC_SAWTOOTHDOWN + \ |\ |\ |\ |\ |\ |\ | + \ | \ | \ | \ | \ | \ | \ | + \| \| \| \| \| \| \| + \endverbatim + * + * \sa SDL_HAPTIC_SINE + * \sa SDL_HAPTIC_LEFTRIGHT + * \sa SDL_HAPTIC_TRIANGLE + * \sa SDL_HAPTIC_SAWTOOTHUP + * \sa SDL_HAPTIC_SAWTOOTHDOWN + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticPeriodic +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_SINE, ::SDL_HAPTIC_LEFTRIGHT, + ::SDL_HAPTIC_TRIANGLE, ::SDL_HAPTIC_SAWTOOTHUP or + ::SDL_HAPTIC_SAWTOOTHDOWN */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Periodic */ + Uint16 period; /**< Period of the wave. */ + Sint16 magnitude; /**< Peak value; if negative, equivalent to 180 degrees extra phase shift. */ + Sint16 offset; /**< Mean value of the wave. */ + Uint16 phase; /**< Positive phase shift given by hundredth of a degree. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticPeriodic; + +/** + * \brief A structure containing a template for a Condition effect. + * + * The struct handles the following effects: + * - ::SDL_HAPTIC_SPRING: Effect based on axes position. + * - ::SDL_HAPTIC_DAMPER: Effect based on axes velocity. + * - ::SDL_HAPTIC_INERTIA: Effect based on axes acceleration. + * - ::SDL_HAPTIC_FRICTION: Effect based on axes movement. + * + * Direction is handled by condition internals instead of a direction member. + * The condition effect specific members have three parameters. The first + * refers to the X axis, the second refers to the Y axis and the third + * refers to the Z axis. The right terms refer to the positive side of the + * axis and the left terms refer to the negative side of the axis. Please + * refer to the ::SDL_HapticDirection diagram for which side is positive and + * which is negative. + * + * \sa SDL_HapticDirection + * \sa SDL_HAPTIC_SPRING + * \sa SDL_HAPTIC_DAMPER + * \sa SDL_HAPTIC_INERTIA + * \sa SDL_HAPTIC_FRICTION + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticCondition +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_SPRING, ::SDL_HAPTIC_DAMPER, + ::SDL_HAPTIC_INERTIA or ::SDL_HAPTIC_FRICTION */ + SDL_HapticDirection direction; /**< Direction of the effect - Not used ATM. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Condition */ + Uint16 right_sat[3]; /**< Level when joystick is to the positive side; max 0xFFFF. */ + Uint16 left_sat[3]; /**< Level when joystick is to the negative side; max 0xFFFF. */ + Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */ + Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */ + Uint16 deadband[3]; /**< Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered. */ + Sint16 center[3]; /**< Position of the dead zone. */ +} SDL_HapticCondition; + +/** + * \brief A structure containing a template for a Ramp effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_RAMP effect. + * + * The ramp effect starts at start strength and ends at end strength. + * It augments in linear fashion. If you use attack and fade with a ramp + * the effects get added to the ramp effect making the effect become + * quadratic instead of linear. + * + * \sa SDL_HAPTIC_RAMP + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticRamp +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_RAMP */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Ramp */ + Sint16 start; /**< Beginning strength level. */ + Sint16 end; /**< Ending strength level. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticRamp; + +/** + * \brief A structure containing a template for a Left/Right effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_LEFTRIGHT effect. + * + * The Left/Right effect is used to explicitly control the large and small + * motors, commonly found in modern game controllers. The small (right) motor + * is high frequency, and the large (left) motor is low frequency. + * + * \sa SDL_HAPTIC_LEFTRIGHT + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticLeftRight +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_LEFTRIGHT */ + + /* Replay */ + Uint32 length; /**< Duration of the effect in milliseconds. */ + + /* Rumble */ + Uint16 large_magnitude; /**< Control of the large controller motor. */ + Uint16 small_magnitude; /**< Control of the small controller motor. */ +} SDL_HapticLeftRight; + +/** + * \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_CUSTOM effect. + * + * A custom force feedback effect is much like a periodic effect, where the + * application can define its exact shape. You will have to allocate the + * data yourself. Data should consist of channels * samples Uint16 samples. + * + * If channels is one, the effect is rotated using the defined direction. + * Otherwise it uses the samples in data for the different axes. + * + * \sa SDL_HAPTIC_CUSTOM + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticCustom +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_CUSTOM */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Custom */ + Uint8 channels; /**< Axes to use, minimum of one. */ + Uint16 period; /**< Sample periods. */ + Uint16 samples; /**< Amount of samples. */ + Uint16 *data; /**< Should contain channels*samples items. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticCustom; + +/** + * \brief The generic template for any haptic effect. + * + * All values max at 32767 (0x7FFF). Signed values also can be negative. + * Time values unless specified otherwise are in milliseconds. + * + * You can also pass ::SDL_HAPTIC_INFINITY to length instead of a 0-32767 + * value. Neither delay, interval, attack_length nor fade_length support + * ::SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends. + * + * Additionally, the ::SDL_HAPTIC_RAMP effect does not support a duration of + * ::SDL_HAPTIC_INFINITY. + * + * Button triggers may not be supported on all devices, it is advised to not + * use them if possible. Buttons start at index 1 instead of index 0 like + * the joystick. + * + * If both attack_length and fade_level are 0, the envelope is not used, + * otherwise both values are used. + * + * Common parts: + * \code + * // Replay - All effects have this + * Uint32 length; // Duration of effect (ms). + * Uint16 delay; // Delay before starting effect. + * + * // Trigger - All effects have this + * Uint16 button; // Button that triggers effect. + * Uint16 interval; // How soon before effect can be triggered again. + * + * // Envelope - All effects except condition effects have this + * Uint16 attack_length; // Duration of the attack (ms). + * Uint16 attack_level; // Level at the start of the attack. + * Uint16 fade_length; // Duration of the fade out (ms). + * Uint16 fade_level; // Level at the end of the fade. + * \endcode + * + * + * Here we have an example of a constant effect evolution in time: + * \verbatim + Strength + ^ + | + | effect level --> _________________ + | / \ + | / \ + | / \ + | / \ + | attack_level --> | \ + | | | <--- fade_level + | + +--------------------------------------------------> Time + [--] [---] + attack_length fade_length + + [------------------][-----------------------] + delay length + \endverbatim + * + * Note either the attack_level or the fade_level may be above the actual + * effect level. + * + * \sa SDL_HapticConstant + * \sa SDL_HapticPeriodic + * \sa SDL_HapticCondition + * \sa SDL_HapticRamp + * \sa SDL_HapticLeftRight + * \sa SDL_HapticCustom + */ +typedef union SDL_HapticEffect +{ + /* Common for all force feedback effects */ + Uint16 type; /**< Effect type. */ + SDL_HapticConstant constant; /**< Constant effect. */ + SDL_HapticPeriodic periodic; /**< Periodic effect. */ + SDL_HapticCondition condition; /**< Condition effect. */ + SDL_HapticRamp ramp; /**< Ramp effect. */ + SDL_HapticLeftRight leftright; /**< Left/Right effect. */ + SDL_HapticCustom custom; /**< Custom effect. */ +} SDL_HapticEffect; + + +/* Function prototypes */ + +/** + * Count the number of haptic devices attached to the system. + * + * \returns the number of haptic devices detected on the system or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticName + */ +extern DECLSPEC int SDLCALL SDL_NumHaptics(void); + +/** + * Get the implementation dependent name of a haptic device. + * + * This can be called before any joysticks are opened. If no name can be + * found, this function returns NULL. + * + * \param device_index index of the device to query. + * \returns the name of the device or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_NumHaptics + */ +extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index); + +/** + * Open a haptic device for use. + * + * The index passed as an argument refers to the N'th haptic device on this + * system. + * + * When opening a haptic device, its gain will be set to maximum and + * autocenter will be disabled. To modify these values use SDL_HapticSetGain() + * and SDL_HapticSetAutocenter(). + * + * \param device_index index of the device to open + * \returns the device identifier or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticClose + * \sa SDL_HapticIndex + * \sa SDL_HapticOpenFromJoystick + * \sa SDL_HapticOpenFromMouse + * \sa SDL_HapticPause + * \sa SDL_HapticSetAutocenter + * \sa SDL_HapticSetGain + * \sa SDL_HapticStopAll + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpen(int device_index); + +/** + * Check if the haptic device at the designated index has been opened. + * + * \param device_index the index of the device to query + * \returns 1 if it has been opened, 0 if it hasn't or on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticIndex + * \sa SDL_HapticOpen + */ +extern DECLSPEC int SDLCALL SDL_HapticOpened(int device_index); + +/** + * Get the index of a haptic device. + * + * \param haptic the SDL_Haptic device to query + * \returns the index of the specified haptic device or a negative error code + * on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticOpened + */ +extern DECLSPEC int SDLCALL SDL_HapticIndex(SDL_Haptic * haptic); + +/** + * Query whether or not the current mouse has haptic capabilities. + * + * \returns SDL_TRUE if the mouse is haptic or SDL_FALSE if it isn't. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpenFromMouse + */ +extern DECLSPEC int SDLCALL SDL_MouseIsHaptic(void); + +/** + * Try to open a haptic device from the current mouse. + * + * \returns the haptic device identifier or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + * \sa SDL_MouseIsHaptic + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromMouse(void); + +/** + * Query if a joystick has haptic features. + * + * \param joystick the SDL_Joystick to test for haptic capabilities + * \returns SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't, or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpenFromJoystick + */ +extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); + +/** + * Open a haptic device for use from a joystick device. + * + * You must still close the haptic device separately. It will not be closed + * with the joystick. + * + * When opened from a joystick you should first close the haptic device before + * closing the joystick device. If not, on some implementations the haptic + * device will also get unallocated and you'll be unable to use force feedback + * on that device. + * + * \param joystick the SDL_Joystick to create a haptic device from + * \returns a valid haptic device identifier on success or NULL on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticClose + * \sa SDL_HapticOpen + * \sa SDL_JoystickIsHaptic + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromJoystick(SDL_Joystick * + joystick); + +/** + * Close a haptic device previously opened with SDL_HapticOpen(). + * + * \param haptic the SDL_Haptic device to close + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + */ +extern DECLSPEC void SDLCALL SDL_HapticClose(SDL_Haptic * haptic); + +/** + * Get the number of effects a haptic device can store. + * + * On some platforms this isn't fully supported, and therefore is an + * approximation. Always check to see if your created effect was actually + * created and do not rely solely on SDL_HapticNumEffects(). + * + * \param haptic the SDL_Haptic device to query + * \returns the number of effects the haptic device can store or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNumEffectsPlaying + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic); + +/** + * Get the number of effects a haptic device can play at the same time. + * + * This is not supported on all platforms, but will always return a value. + * + * \param haptic the SDL_Haptic device to query maximum playing effects + * \returns the number of effects the haptic device can play at the same time + * or a negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNumEffects + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); + +/** + * Get the haptic device's supported features in bitwise manner. + * + * \param haptic the SDL_Haptic device to query + * \returns a list of supported haptic features in bitwise manner (OR'd), or 0 + * on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticEffectSupported + * \sa SDL_HapticNumEffects + */ +extern DECLSPEC unsigned int SDLCALL SDL_HapticQuery(SDL_Haptic * haptic); + + +/** + * Get the number of haptic axes the device has. + * + * The number of haptic axes might be useful if working with the + * SDL_HapticDirection effect. + * + * \param haptic the SDL_Haptic device to query + * \returns the number of axes on success or a negative error code on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_HapticNumAxes(SDL_Haptic * haptic); + +/** + * Check to see if an effect is supported by a haptic device. + * + * \param haptic the SDL_Haptic device to query + * \param effect the desired effect to query + * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNewEffect + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticEffectSupported(SDL_Haptic * haptic, + SDL_HapticEffect * + effect); + +/** + * Create a new haptic effect on a specified device. + * + * \param haptic an SDL_Haptic device to create the effect on + * \param effect an SDL_HapticEffect structure containing the properties of + * the effect to create + * \returns the ID of the effect on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticRunEffect + * \sa SDL_HapticUpdateEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticNewEffect(SDL_Haptic * haptic, + SDL_HapticEffect * effect); + +/** + * Update the properties of an effect. + * + * Can be used dynamically, although behavior when dynamically changing + * direction may be strange. Specifically the effect may re-upload itself and + * start playing from the start. You also cannot change the type either when + * running SDL_HapticUpdateEffect(). + * + * \param haptic the SDL_Haptic device that has the effect + * \param effect the identifier of the effect to update + * \param data an SDL_HapticEffect structure containing the new effect + * properties to use + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticNewEffect + * \sa SDL_HapticRunEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticUpdateEffect(SDL_Haptic * haptic, + int effect, + SDL_HapticEffect * data); + +/** + * Run the haptic effect on its associated haptic device. + * + * To repeat the effect over and over indefinitely, set `iterations` to + * `SDL_HAPTIC_INFINITY`. (Repeats the envelope - attack and fade.) To make + * one instance of the effect last indefinitely (so the effect does not fade), + * set the effect's `length` in its structure/union to `SDL_HAPTIC_INFINITY` + * instead. + * + * \param haptic the SDL_Haptic device to run the effect on + * \param effect the ID of the haptic effect to run + * \param iterations the number of iterations to run the effect; use + * `SDL_HAPTIC_INFINITY` to repeat forever + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticGetEffectStatus + * \sa SDL_HapticStopEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticRunEffect(SDL_Haptic * haptic, + int effect, + Uint32 iterations); + +/** + * Stop the haptic effect on its associated haptic device. + * + * * + * + * \param haptic the SDL_Haptic device to stop the effect on + * \param effect the ID of the haptic effect to stop + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticRunEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticStopEffect(SDL_Haptic * haptic, + int effect); + +/** + * Destroy a haptic effect on the device. + * + * This will stop the effect if it's running. Effects are automatically + * destroyed when the device is closed. + * + * \param haptic the SDL_Haptic device to destroy the effect on + * \param effect the ID of the haptic effect to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNewEffect + */ +extern DECLSPEC void SDLCALL SDL_HapticDestroyEffect(SDL_Haptic * haptic, + int effect); + +/** + * Get the status of the current effect on the specified haptic device. + * + * Device must support the SDL_HAPTIC_STATUS feature. + * + * \param haptic the SDL_Haptic device to query for the effect status on + * \param effect the ID of the haptic effect to query its status + * \returns 0 if it isn't playing, 1 if it is playing, or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRunEffect + * \sa SDL_HapticStopEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticGetEffectStatus(SDL_Haptic * haptic, + int effect); + +/** + * Set the global gain of the specified haptic device. + * + * Device must support the SDL_HAPTIC_GAIN feature. + * + * The user may specify the maximum gain by setting the environment variable + * `SDL_HAPTIC_GAIN_MAX` which should be between 0 and 100. All calls to + * SDL_HapticSetGain() will scale linearly using `SDL_HAPTIC_GAIN_MAX` as the + * maximum. + * + * \param haptic the SDL_Haptic device to set the gain on + * \param gain value to set the gain to, should be between 0 and 100 (0 - 100) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticSetGain(SDL_Haptic * haptic, int gain); + +/** + * Set the global autocenter of the device. + * + * Autocenter should be between 0 and 100. Setting it to 0 will disable + * autocentering. + * + * Device must support the SDL_HAPTIC_AUTOCENTER feature. + * + * \param haptic the SDL_Haptic device to set autocentering on + * \param autocenter value to set autocenter to (0-100) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticSetAutocenter(SDL_Haptic * haptic, + int autocenter); + +/** + * Pause a haptic device. + * + * Device must support the `SDL_HAPTIC_PAUSE` feature. Call + * SDL_HapticUnpause() to resume playback. + * + * Do not modify the effects nor add new ones while the device is paused. That + * can cause all sorts of weird errors. + * + * \param haptic the SDL_Haptic device to pause + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticUnpause + */ +extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic); + +/** + * Unpause a haptic device. + * + * Call to unpause after SDL_HapticPause(). + * + * \param haptic the SDL_Haptic device to unpause + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticPause + */ +extern DECLSPEC int SDLCALL SDL_HapticUnpause(SDL_Haptic * haptic); + +/** + * Stop all the currently playing effects on a haptic device. + * + * \param haptic the SDL_Haptic device to stop + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_HapticStopAll(SDL_Haptic * haptic); + +/** + * Check whether rumble is supported on a haptic device. + * + * \param haptic haptic device to check for rumble support + * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleStop + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleSupported(SDL_Haptic * haptic); + +/** + * Initialize a haptic device for simple rumble playback. + * + * \param haptic the haptic device to initialize for simple rumble playback + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleStop + * \sa SDL_HapticRumbleSupported + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleInit(SDL_Haptic * haptic); + +/** + * Run a simple rumble effect on a haptic device. + * + * \param haptic the haptic device to play the rumble effect on + * \param strength strength of the rumble to play as a 0-1 float value + * \param length length of the rumble to play in milliseconds + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumbleStop + * \sa SDL_HapticRumbleSupported + */ +extern DECLSPEC int SDLCALL SDL_HapticRumblePlay(SDL_Haptic * haptic, float strength, Uint32 length ); + +/** + * Stop the simple rumble on a haptic device. + * + * \param haptic the haptic device to stop the rumble effect on + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleSupported + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleStop(SDL_Haptic * haptic); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_haptic_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_hidapi.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_hidapi.h new file mode 100644 index 00000000000..dbb0cad3b34 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_hidapi.h @@ -0,0 +1,451 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_hidapi.h + * + * Header file for SDL HIDAPI functions. + * + * This is an adaptation of the original HIDAPI interface by Alan Ott, + * and includes source code licensed under the following BSD license: + * + Copyright (c) 2010, Alan Ott, Signal 11 Software + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Signal 11 Software nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + * + * If you would like a version of SDL without this code, you can build SDL + * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for example + * on iOS or tvOS to avoid a dependency on the CoreBluetooth framework. + */ + +#ifndef SDL_hidapi_h_ +#define SDL_hidapi_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief A handle representing an open HID device + */ +struct SDL_hid_device_; +typedef struct SDL_hid_device_ SDL_hid_device; /**< opaque hidapi structure */ + +/** hidapi info structure */ +/** + * \brief Information about a connected HID device + */ +typedef struct SDL_hid_device_info +{ + /** Platform-specific device path */ + char *path; + /** Device Vendor ID */ + unsigned short vendor_id; + /** Device Product ID */ + unsigned short product_id; + /** Serial Number */ + wchar_t *serial_number; + /** Device Release Number in binary-coded decimal, + also known as Device Version Number */ + unsigned short release_number; + /** Manufacturer String */ + wchar_t *manufacturer_string; + /** Product string */ + wchar_t *product_string; + /** Usage Page for this Device/Interface + (Windows/Mac only). */ + unsigned short usage_page; + /** Usage for this Device/Interface + (Windows/Mac only).*/ + unsigned short usage; + /** The USB interface which this logical device + represents. + + * Valid on both Linux implementations in all cases. + * Valid on the Windows implementation only if the device + contains more than one interface. */ + int interface_number; + + /** Additional information about the USB interface. + Valid on libusb and Android implementations. */ + int interface_class; + int interface_subclass; + int interface_protocol; + + /** Pointer to the next device */ + struct SDL_hid_device_info *next; +} SDL_hid_device_info; + + +/** + * Initialize the HIDAPI library. + * + * This function initializes the HIDAPI library. Calling it is not strictly + * necessary, as it will be called automatically by SDL_hid_enumerate() and + * any of the SDL_hid_open_*() functions if it is needed. This function should + * be called at the beginning of execution however, if there is a chance of + * HIDAPI handles being opened by different threads simultaneously. + * + * Each call to this function should have a matching call to SDL_hid_exit() + * + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_exit + */ +extern DECLSPEC int SDLCALL SDL_hid_init(void); + +/** + * Finalize the HIDAPI library. + * + * This function frees all of the static data associated with HIDAPI. It + * should be called at the end of execution to avoid memory leaks. + * + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_init + */ +extern DECLSPEC int SDLCALL SDL_hid_exit(void); + +/** + * Check to see if devices may have been added or removed. + * + * Enumerating the HID devices is an expensive operation, so you can call this + * to see if there have been any system device changes since the last call to + * this function. A change in the counter returned doesn't necessarily mean + * that anything has changed, but you can call SDL_hid_enumerate() to get an + * updated device list. + * + * Calling this function for the first time may cause a thread or other system + * resource to be allocated to track device change notifications. + * + * \returns a change counter that is incremented with each potential device + * change, or 0 if device change detection isn't available. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_enumerate + */ +extern DECLSPEC Uint32 SDLCALL SDL_hid_device_change_count(void); + +/** + * Enumerate the HID Devices. + * + * This function returns a linked list of all the HID devices attached to the + * system which match vendor_id and product_id. If `vendor_id` is set to 0 + * then any vendor matches. If `product_id` is set to 0 then any product + * matches. If `vendor_id` and `product_id` are both set to 0, then all HID + * devices will be returned. + * + * \param vendor_id The Vendor ID (VID) of the types of device to open. + * \param product_id The Product ID (PID) of the types of device to open. + * \returns a pointer to a linked list of type SDL_hid_device_info, containing + * information about the HID devices attached to the system, or NULL + * in the case of failure. Free this linked list by calling + * SDL_hid_free_enumeration(). + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_device_change_count + */ +extern DECLSPEC SDL_hid_device_info * SDLCALL SDL_hid_enumerate(unsigned short vendor_id, unsigned short product_id); + +/** + * Free an enumeration Linked List + * + * This function frees a linked list created by SDL_hid_enumerate(). + * + * \param devs Pointer to a list of struct_device returned from + * SDL_hid_enumerate(). + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void SDLCALL SDL_hid_free_enumeration(SDL_hid_device_info *devs); + +/** + * Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally + * a serial number. + * + * If `serial_number` is NULL, the first device with the specified VID and PID + * is opened. + * + * \param vendor_id The Vendor ID (VID) of the device to open. + * \param product_id The Product ID (PID) of the device to open. + * \param serial_number The Serial Number of the device to open (Optionally + * NULL). + * \returns a pointer to a SDL_hid_device object on success or NULL on + * failure. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number); + +/** + * Open a HID device by its path name. + * + * The path name be determined by calling SDL_hid_enumerate(), or a + * platform-specific path name can be used (eg: /dev/hidraw0 on Linux). + * + * \param path The path name of the device to open + * \returns a pointer to a SDL_hid_device object on success or NULL on + * failure. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive /* = false */); + +/** + * Write an Output report to a HID device. + * + * The first byte of `data` must contain the Report ID. For devices which only + * support a single report, this must be set to 0x0. The remaining bytes + * contain the report data. Since the Report ID is mandatory, calls to + * SDL_hid_write() will always contain one more byte than the report contains. + * For example, if a hid report is 16 bytes long, 17 bytes must be passed to + * SDL_hid_write(), the Report ID (or 0x0, for devices with a single report), + * followed by the report data (16 bytes). In this example, the length passed + * in would be 17. + * + * SDL_hid_write() will send the data on the first OUT endpoint, if one + * exists. If it does not, it will send the data through the Control Endpoint + * (Endpoint 0). + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data The data to send, including the report number as the first + * byte. + * \param length The length in bytes of the data to send. + * \returns the actual number of bytes written and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_write(SDL_hid_device *dev, const unsigned char *data, size_t length); + +/** + * Read an Input report from a HID device with timeout. + * + * Input reports are returned to the host through the INTERRUPT IN endpoint. + * The first byte will contain the Report number if the device uses numbered + * reports. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data A buffer to put the read data into. + * \param length The number of bytes to read. For devices with multiple + * reports, make sure to read an extra byte for the report + * number. + * \param milliseconds timeout in milliseconds or -1 for blocking wait. + * \returns the actual number of bytes read and -1 on error. If no packet was + * available to be read within the timeout period, this function + * returns 0. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_read_timeout(SDL_hid_device *dev, unsigned char *data, size_t length, int milliseconds); + +/** + * Read an Input report from a HID device. + * + * Input reports are returned to the host through the INTERRUPT IN endpoint. + * The first byte will contain the Report number if the device uses numbered + * reports. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data A buffer to put the read data into. + * \param length The number of bytes to read. For devices with multiple + * reports, make sure to read an extra byte for the report + * number. + * \returns the actual number of bytes read and -1 on error. If no packet was + * available to be read and the handle is in non-blocking mode, this + * function returns 0. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_read(SDL_hid_device *dev, unsigned char *data, size_t length); + +/** + * Set the device handle to be non-blocking. + * + * In non-blocking mode calls to SDL_hid_read() will return immediately with a + * value of 0 if there is no data to be read. In blocking mode, SDL_hid_read() + * will wait (block) until there is data to read before returning. + * + * Nonblocking can be turned on and off at any time. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param nonblock enable or not the nonblocking reads - 1 to enable + * nonblocking - 0 to disable nonblocking. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_set_nonblocking(SDL_hid_device *dev, int nonblock); + +/** + * Send a Feature report to the device. + * + * Feature reports are sent over the Control endpoint as a Set_Report + * transfer. The first byte of `data` must contain the Report ID. For devices + * which only support a single report, this must be set to 0x0. The remaining + * bytes contain the report data. Since the Report ID is mandatory, calls to + * SDL_hid_send_feature_report() will always contain one more byte than the + * report contains. For example, if a hid report is 16 bytes long, 17 bytes + * must be passed to SDL_hid_send_feature_report(): the Report ID (or 0x0, for + * devices which do not use numbered reports), followed by the report data (16 + * bytes). In this example, the length passed in would be 17. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data The data to send, including the report number as the first + * byte. + * \param length The length in bytes of the data to send, including the report + * number. + * \returns the actual number of bytes written and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_send_feature_report(SDL_hid_device *dev, const unsigned char *data, size_t length); + +/** + * Get a feature report from a HID device. + * + * Set the first byte of `data` to the Report ID of the report to be read. + * Make sure to allow space for this extra byte in `data`. Upon return, the + * first byte will still contain the Report ID, and the report data will start + * in data[1]. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data A buffer to put the read data into, including the Report ID. + * Set the first byte of `data` to the Report ID of the report to + * be read, or set it to zero if your device does not use numbered + * reports. + * \param length The number of bytes to read, including an extra byte for the + * report ID. The buffer can be longer than the actual report. + * \returns the number of bytes read plus one for the report ID (which is + * still in the first byte), or -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_feature_report(SDL_hid_device *dev, unsigned char *data, size_t length); + +/** + * Close a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void SDLCALL SDL_hid_close(SDL_hid_device *dev); + +/** + * Get The Manufacturer String from a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_manufacturer_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); + +/** + * Get The Product String from a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_product_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); + +/** + * Get The Serial Number String from a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_serial_number_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); + +/** + * Get a string from a HID device, based on its string index. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string_index The index of the string to get. + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_indexed_string(SDL_hid_device *dev, int string_index, wchar_t *string, size_t maxlen); + +/** + * Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers + * + * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void SDLCALL SDL_hid_ble_scan(SDL_bool active); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_hidapi_h_ */ + +/* vi: set sts=4 ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_hints.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_hints.h new file mode 100644 index 00000000000..3ac5802f754 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_hints.h @@ -0,0 +1,2182 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_hints.h + * + * Official documentation for SDL configuration variables + * + * This file contains functions to set and get configuration hints, + * as well as listing each of them alphabetically. + * + * The convention for naming hints is SDL_HINT_X, where "SDL_X" is + * the environment variable that can be used to override the default. + * + * In general these hints are just that - they may or may not be + * supported or applicable on any given platform, but they provide + * a way for an application or user to give the library a hint as + * to how they would like the library to work. + */ + +#ifndef SDL_hints_h_ +#define SDL_hints_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief A variable controlling whether the Android / iOS built-in + * accelerometer should be listed as a joystick device. + * + * This variable can be set to the following values: + * "0" - The accelerometer is not listed as a joystick + * "1" - The accelerometer is available as a 3 axis joystick (the default). + */ +#define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK" + +/** + * \brief Specify the behavior of Alt+Tab while the keyboard is grabbed. + * + * By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed + * and your window is full-screen. This prevents the user from getting stuck in + * your application if you've enabled keyboard grab. + * + * The variable can be set to the following values: + * "0" - SDL will not handle Alt+Tab. Your application is responsible + for handling Alt+Tab while the keyboard is grabbed. + * "1" - SDL will minimize your window when Alt+Tab is pressed (default) +*/ +#define SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED "SDL_ALLOW_ALT_TAB_WHILE_GRABBED" + +/** + * \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it. + * This is a debugging aid for developers and not expected to be used by end users. The default is "1" + * + * This variable can be set to the following values: + * "0" - don't allow topmost + * "1" - allow topmost + */ +#define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST" + +/** + * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc. + * + * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and assets. + * + * By default this hint is not set and the APK expansion files are not searched. + */ +#define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION" + +/** + * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc. + * + * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and assets. + * + * By default this hint is not set and the APK expansion files are not searched. + */ +#define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION" + +/** + * \brief A variable to control whether the event loop will block itself when the app is paused. + * + * The variable can be set to the following values: + * "0" - Non blocking. + * "1" - Blocking. (default) + * + * The value should be set before SDL is initialized. + */ +#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE" + +/** + * \brief A variable to control whether SDL will pause audio in background + * (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking") + * + * The variable can be set to the following values: + * "0" - Non paused. + * "1" - Paused. (default) + * + * The value should be set before SDL is initialized. + */ +#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO" + +/** + * \brief A variable to control whether we trap the Android back button to handle it manually. + * This is necessary for the right mouse button to work on some Android devices, or + * to be able to trap the back button for use in your code reliably. If set to true, + * the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair with a keycode of + * SDL_SCANCODE_AC_BACK. + * + * The variable can be set to the following values: + * "0" - Back button will be handled as usual for system. (default) + * "1" - Back button will be trapped, allowing you to handle the key press + * manually. (This will also let right mouse click work on systems + * where the right mouse button functions as back.) + * + * The value of this hint is used at runtime, so it can be changed at any time. + */ +#define SDL_HINT_ANDROID_TRAP_BACK_BUTTON "SDL_ANDROID_TRAP_BACK_BUTTON" + +/** + * \brief Specify an application name. + * + * This hint lets you specify the application name sent to the OS when + * required. For example, this will often appear in volume control applets for + * audio streams, and in lists of applications which are inhibiting the + * screensaver. You should use a string that describes your program ("My Game + * 2: The Revenge") + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: probably the application's name or "SDL Application" if SDL + * doesn't have any better information. + * + * Note that, for audio streams, this can be overridden with + * SDL_HINT_AUDIO_DEVICE_APP_NAME. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_APP_NAME "SDL_APP_NAME" + +/** + * \brief A variable controlling whether controllers used with the Apple TV + * generate UI events. + * + * When UI events are generated by controller input, the app will be + * backgrounded when the Apple TV remote's menu button is pressed, and when the + * pause or B buttons on gamepads are pressed. + * + * More information about properly making use of controllers for the Apple TV + * can be found here: + * https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/ + * + * This variable can be set to the following values: + * "0" - Controller input does not generate UI events (the default). + * "1" - Controller input generates UI events. + */ +#define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS" + +/** + * \brief A variable controlling whether the Apple TV remote's joystick axes + * will automatically match the rotation of the remote. + * + * This variable can be set to the following values: + * "0" - Remote orientation does not affect joystick axes (the default). + * "1" - Joystick axes are based on the orientation of the remote. + */ +#define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION" + +/** + * \brief A variable controlling the audio category on iOS and Mac OS X + * + * This variable can be set to the following values: + * + * "ambient" - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default) + * "playback" - Use the AVAudioSessionCategoryPlayback category + * + * For more information, see Apple's documentation: + * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html + */ +#define SDL_HINT_AUDIO_CATEGORY "SDL_AUDIO_CATEGORY" + +/** + * \brief Specify an application name for an audio device. + * + * Some audio backends (such as PulseAudio) allow you to describe your audio + * stream. Among other things, this description might show up in a system + * control panel that lets the user adjust the volume on specific audio + * streams instead of using one giant master volume slider. + * + * This hints lets you transmit that information to the OS. The contents of + * this hint are used while opening an audio device. You should use a string + * that describes your program ("My Game 2: The Revenge") + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: this will be the name set with SDL_HINT_APP_NAME, if that hint is + * set. Otherwise, it'll probably the application's name or "SDL Application" + * if SDL doesn't have any better information. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME" + +/** + * \brief Specify an application name for an audio device. + * + * Some audio backends (such as PulseAudio) allow you to describe your audio + * stream. Among other things, this description might show up in a system + * control panel that lets the user adjust the volume on specific audio + * streams instead of using one giant master volume slider. + * + * This hints lets you transmit that information to the OS. The contents of + * this hint are used while opening an audio device. You should use a string + * that describes your what your program is playing ("audio stream" is + * probably sufficient in many cases, but this could be useful for something + * like "team chat" if you have a headset playing VoIP audio separately). + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: "audio stream" or something similar. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_AUDIO_DEVICE_STREAM_NAME "SDL_AUDIO_DEVICE_STREAM_NAME" + +/** + * \brief Specify an application role for an audio device. + * + * Some audio backends (such as Pipewire) allow you to describe the role of + * your audio stream. Among other things, this description might show up in + * a system control panel or software for displaying and manipulating media + * playback/capture graphs. + * + * This hints lets you transmit that information to the OS. The contents of + * this hint are used while opening an audio device. You should use a string + * that describes your what your program is playing (Game, Music, Movie, + * etc...). + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: "Game" or something similar. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_AUDIO_DEVICE_STREAM_ROLE "SDL_AUDIO_DEVICE_STREAM_ROLE" + +/** + * \brief A variable controlling speed/quality tradeoff of audio resampling. + * + * If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ ) + * to handle audio resampling. There are different resampling modes available + * that produce different levels of quality, using more CPU. + * + * If this hint isn't specified to a valid setting, or libsamplerate isn't + * available, SDL will use the default, internal resampling algorithm. + * + * Note that this is currently only applicable to resampling audio that is + * being written to a device for playback or audio being read from a device + * for capture. SDL_AudioCVT always uses the default resampler (although this + * might change for SDL 2.1). + * + * This hint is currently only checked at audio subsystem initialization. + * + * This variable can be set to the following values: + * + * "0" or "default" - Use SDL's internal resampling (Default when not set - low quality, fast) + * "1" or "fast" - Use fast, slightly higher quality resampling, if available + * "2" or "medium" - Use medium quality resampling, if available + * "3" or "best" - Use high quality resampling, if available + */ +#define SDL_HINT_AUDIO_RESAMPLING_MODE "SDL_AUDIO_RESAMPLING_MODE" + +/** + * \brief A variable controlling whether SDL updates joystick state when getting input events + * + * This variable can be set to the following values: + * + * "0" - You'll call SDL_JoystickUpdate() manually + * "1" - SDL will automatically call SDL_JoystickUpdate() (default) + * + * This hint can be toggled on and off at runtime. + */ +#define SDL_HINT_AUTO_UPDATE_JOYSTICKS "SDL_AUTO_UPDATE_JOYSTICKS" + +/** + * \brief A variable controlling whether SDL updates sensor state when getting input events + * + * This variable can be set to the following values: + * + * "0" - You'll call SDL_SensorUpdate() manually + * "1" - SDL will automatically call SDL_SensorUpdate() (default) + * + * This hint can be toggled on and off at runtime. + */ +#define SDL_HINT_AUTO_UPDATE_SENSORS "SDL_AUTO_UPDATE_SENSORS" + +/** + * \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs. + * + * The bitmap header version 4 is required for proper alpha channel support and + * SDL will use it when required. Should this not be desired, this hint can + * force the use of the 40 byte header version which is supported everywhere. + * + * The variable can be set to the following values: + * "0" - Surfaces with a colorkey or an alpha channel are saved to a + * 32-bit BMP file with an alpha mask. SDL will use the bitmap + * header version 4 and set the alpha mask accordingly. + * "1" - Surfaces with a colorkey or an alpha channel are saved to a + * 32-bit BMP file without an alpha mask. The alpha channel data + * will be in the file, but applications are going to ignore it. + * + * The default value is "0". + */ +#define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT" + +/** + * \brief Override for SDL_GetDisplayUsableBounds() + * + * If set, this hint will override the expected results for + * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want + * to do this, but this allows an embedded system to request that some of the + * screen be reserved for other uses when paired with a well-behaved + * application. + * + * The contents of this hint must be 4 comma-separated integers, the first + * is the bounds x, then y, width and height, in that order. + */ +#define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS" + +/** + * \brief Disable giving back control to the browser automatically + * when running with asyncify + * + * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations + * such as refreshing the screen or polling events. + * + * This hint only applies to the emscripten platform + * + * The variable can be set to the following values: + * "0" - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes) + * "1" - Enable emscripten_sleep calls (the default) + */ +#define SDL_HINT_EMSCRIPTEN_ASYNCIFY "SDL_EMSCRIPTEN_ASYNCIFY" + +/** + * \brief override the binding element for keyboard inputs for Emscripten builds + * + * This hint only applies to the emscripten platform + * + * The variable can be one of + * "#window" - The javascript window object (this is the default) + * "#document" - The javascript document object + * "#screen" - the javascript window.screen object + * "#canvas" - the WebGL canvas element + * any other string without a leading # sign applies to the element on the page with that ID. + */ +#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT" + +/** + * \brief A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs + * + * The variable can be set to the following values: + * "0" - Do not scan for Steam Controllers + * "1" - Scan for Steam Controllers (the default) + * + * The default value is "1". This hint must be set before initializing the joystick subsystem. + */ +#define SDL_HINT_ENABLE_STEAM_CONTROLLERS "SDL_ENABLE_STEAM_CONTROLLERS" + +/** + * \brief A variable controlling whether SDL logs all events pushed onto its internal queue. + * + * This variable can be set to the following values: + * + * "0" - Don't log any events (default) + * "1" - Log all events except mouse and finger motion, which are pretty spammy. + * "2" - Log all events. + * + * This is generally meant to be used to debug SDL itself, but can be useful + * for application developers that need better visibility into what is going + * on in the event queue. Logged events are sent through SDL_Log(), which + * means by default they appear on stdout on most platforms or maybe + * OutputDebugString() on Windows, and can be funneled by the app with + * SDL_LogSetOutputFunction(), etc. + * + * This hint can be toggled on and off at runtime, if you only need to log + * events for a small subset of program execution. + */ +#define SDL_HINT_EVENT_LOGGING "SDL_EVENT_LOGGING" + +/** + * \brief A variable controlling whether raising the window should be done more forcefully + * + * This variable can be set to the following values: + * "0" - No forcing (the default) + * "1" - Extra level of forcing + * + * At present, this is only an issue under MS Windows, which makes it nearly impossible to + * programmatically move a window to the foreground, for "security" reasons. See + * http://stackoverflow.com/a/34414846 for a discussion. + */ +#define SDL_HINT_FORCE_RAISEWINDOW "SDL_HINT_FORCE_RAISEWINDOW" + +/** + * \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface. + * + * SDL can try to accelerate the SDL screen surface by using streaming + * textures with a 3D rendering engine. This variable controls whether and + * how this is done. + * + * This variable can be set to the following values: + * "0" - Disable 3D acceleration + * "1" - Enable 3D acceleration, using the default renderer. + * "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.) + * + * By default SDL tries to make a best guess for each platform whether + * to use acceleration or not. + */ +#define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION" + +/** + * \brief A variable that lets you manually hint extra gamecontroller db entries. + * + * The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h + * + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() + */ +#define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG" + +/** + * \brief A variable that lets you provide a file with extra gamecontroller db entries. + * + * The file should contain lines of gamecontroller config data, see SDL_gamecontroller.h + * + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() + */ +#define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE" + +/** + * \brief A variable that overrides the automatic controller type detection + * + * The variable should be comma separated entries, in the form: VID/PID=type + * + * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd + * + * The type should be one of: + * Xbox360 + * XboxOne + * PS3 + * PS4 + * PS5 + * SwitchPro + * + * This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + */ +#define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE" + +/** + * \brief A variable containing a list of devices to skip when scanning for game controllers. + * + * The format of the string is a comma separated list of USB VID/PID pairs + * in hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named + * file will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES" + +/** + * \brief If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable. + * + * The format of the string is a comma separated list of USB VID/PID pairs + * in hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named + * file will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT" + +/** + * \brief If set, game controller face buttons report their values according to their labels instead of their positional layout. + * + * For example, on Nintendo Switch controllers, normally you'd get: + * + * (Y) + * (X) (B) + * (A) + * + * but if this hint is set, you'll get: + * + * (X) + * (Y) (A) + * (B) + * + * The variable can be set to the following values: + * "0" - Report the face buttons by position, as though they were on an Xbox controller. + * "1" - Report the face buttons by label instead of position + * + * The default value is "1". This hint may be set at any time. + */ +#define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS" + +/** + * \brief A variable controlling whether grabbing input grabs the keyboard + * + * This variable can be set to the following values: + * "0" - Grab will affect only the mouse + * "1" - Grab will affect mouse and keyboard + * + * By default SDL will not grab the keyboard so system shortcuts still work. + */ +#define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD" + +/** + * \brief A variable controlling whether the idle timer is disabled on iOS. + * + * When an iOS app does not receive touches for some time, the screen is + * dimmed automatically. For games where the accelerometer is the only input + * this is problematic. This functionality can be disabled by setting this + * hint. + * + * As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver() + * accomplish the same thing on iOS. They should be preferred over this hint. + * + * This variable can be set to the following values: + * "0" - Enable idle timer + * "1" - Disable idle timer + */ +#define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED" + +/** + * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events. + * + * The variable can be set to the following values: + * "0" - SDL_TEXTEDITING events are sent, and it is the application's + * responsibility to render the text from these events and + * differentiate it somehow from committed text. (default) + * "1" - If supported by the IME then SDL_TEXTEDITING events are not sent, + * and text that is being composed will be rendered in its own UI. + */ +#define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING" + +/** + * \brief A variable to control whether certain IMEs should show native UI components (such as the Candidate List) instead of suppressing them. + * + * The variable can be set to the following values: + * "0" - Native UI components are not display. (default) + * "1" - Native UI components are displayed. + */ +#define SDL_HINT_IME_SHOW_UI "SDL_IME_SHOW_UI" + +/** + * \brief A variable to control if extended IME text support is enabled. + * If enabled then SDL_TextEditingExtEvent will be issued if the text would be truncated otherwise. + * Additionally SDL_TextInputEvent will be dispatched multiple times so that it is not truncated. + * + * The variable can be set to the following values: + * "0" - Legacy behavior. Text can be truncated, no heap allocations. (default) + * "1" - Modern behavior. + */ +#define SDL_HINT_IME_SUPPORT_EXTENDED_TEXT "SDL_IME_SUPPORT_EXTENDED_TEXT" + +/** + * \brief A variable controlling whether the home indicator bar on iPhone X + * should be hidden. + * + * This variable can be set to the following values: + * "0" - The indicator bar is not hidden (default for windowed applications) + * "1" - The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications) + * "2" - The indicator bar is dim and the first swipe makes it visible and the second swipe performs the "home" action (default for fullscreen applications) + */ +#define SDL_HINT_IOS_HIDE_HOME_INDICATOR "SDL_IOS_HIDE_HOME_INDICATOR" + +/** + * \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background. + * + * The variable can be set to the following values: + * "0" - Disable joystick & gamecontroller input events when the + * application is in the background. + * "1" - Enable joystick & gamecontroller input events when the + * application is in the background. + * + * The default value is "0". This hint may be set at any time. + */ +#define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS" + +/** + * \brief A variable controlling whether the HIDAPI joystick drivers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI drivers are not used + * "1" - HIDAPI drivers are used (the default) + * + * This variable is the default for all drivers, but can be overridden by the hints for specific drivers below. + */ +#define SDL_HINT_JOYSTICK_HIDAPI "SDL_JOYSTICK_HIDAPI" + +/** + * \brief A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE" + +/** + * \brief A variable controlling whether "low_frequency_rumble" and "high_frequency_rumble" is used to implement + * the GameCube controller's 3 rumble modes, Stop(0), Rumble(1), and StopHard(2) + * this is useful for applications that need full compatibility for things like ADSR envelopes. + * Stop is implemented by setting "low_frequency_rumble" to "0" and "high_frequency_rumble" ">0" + * Rumble is both at any arbitrary value, + * StopHard is implemented by setting both "low_frequency_rumble" and "high_frequency_rumble" to "0" + * + * This variable can be set to the following values: + * "0" - Normal rumble behavior is behavior is used (default) + * "1" - Proper GameCube controller rumble behavior is used + * + */ +#define SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE "SDL_JOYSTICK_GAMECUBE_RUMBLE_BRAKE" + + /** + * \brief A variable controlling whether Switch Joy-Cons should be treated the same as Switch Pro Controllers when using the HIDAPI driver. + * + * This variable can be set to the following values: + * "0" - basic Joy-Con support with no analog input (the default) + * "1" - Joy-Cons treated as half full Pro Controllers with analog inputs and sensors + * + * This does not combine Joy-Cons into a single controller. That's up to the user. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS "SDL_JOYSTICK_HIDAPI_JOY_CONS" + + /** + * \brief A variable controlling whether the HIDAPI driver for Amazon Luna controllers connected via Bluetooth should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_LUNA "SDL_JOYSTICK_HIDAPI_LUNA" + +/** + * \brief A variable controlling whether the HIDAPI driver for PS4 controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4" + +/** + * \brief A variable controlling whether extended input reports should be used for PS4 controllers when using the HIDAPI driver. + * + * This variable can be set to the following values: + * "0" - extended reports are not enabled (the default) + * "1" - extended reports + * + * Extended input reports allow rumble on Bluetooth PS4 controllers, but + * break DirectInput handling for applications that don't use SDL. + * + * Once extended reports are enabled, they can not be disabled without + * power cycling the controller. + * + * For compatibility with applications written for versions of SDL prior + * to the introduction of PS5 controller support, this value will also + * control the state of extended reports on PS5 controllers when the + * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE" + +/** + * \brief A variable controlling whether the HIDAPI driver for PS5 controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS5 "SDL_JOYSTICK_HIDAPI_PS5" + +/** + * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a PS5 controller. + * + * This variable can be set to the following values: + * "0" - player LEDs are not enabled + * "1" - player LEDs are enabled (the default) + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED "SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED" + +/** + * \brief A variable controlling whether extended input reports should be used for PS5 controllers when using the HIDAPI driver. + * + * This variable can be set to the following values: + * "0" - extended reports are not enabled (the default) + * "1" - extended reports + * + * Extended input reports allow rumble on Bluetooth PS5 controllers, but + * break DirectInput handling for applications that don't use SDL. + * + * Once extended reports are enabled, they can not be disabled without + * power cycling the controller. + * + * For compatibility with applications written for versions of SDL prior + * to the introduction of PS5 controller support, this value defaults to + * the value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE "SDL_JOYSTICK_HIDAPI_PS5_RUMBLE" + +/** + * \brief A variable controlling whether the HIDAPI driver for Google Stadia controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_STADIA "SDL_JOYSTICK_HIDAPI_STADIA" + +/** + * \brief A variable controlling whether the HIDAPI driver for Steam Controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used for Steam Controllers, which requires Bluetooth access + * and may prompt the user for permission on iOS and Android. + * + * The default is "0" + */ +#define SDL_HINT_JOYSTICK_HIDAPI_STEAM "SDL_JOYSTICK_HIDAPI_STEAM" + +/** + * \brief A variable controlling whether the HIDAPI driver for Nintendo Switch controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH" + +/** + * \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch controller is opened + * + * This variable can be set to the following values: + * "0" - home button LED is turned off + * "1" - home button LED is turned on + * + * By default the Home button LED state is not changed. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED" + +/** + * \brief A variable controlling whether the HIDAPI driver for XBox controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is "0" on Windows, otherwise the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_XBOX "SDL_JOYSTICK_HIDAPI_XBOX" + + /** + * \brief A variable controlling whether the RAWINPUT joystick drivers should be used for better handling XInput-capable devices. + * + * This variable can be set to the following values: + * "0" - RAWINPUT drivers are not used + * "1" - RAWINPUT drivers are used (the default) + */ +#define SDL_HINT_JOYSTICK_RAWINPUT "SDL_JOYSTICK_RAWINPUT" + + /** + * \brief A variable controlling whether the RAWINPUT driver should pull correlated data from XInput. + * + * This variable can be set to the following values: + * "0" - RAWINPUT driver will only use data from raw input APIs + * "1" - RAWINPUT driver will also pull data from XInput, providing + * better trigger axes, guide button presses, and rumble support + * for Xbox controllers + * + * The default is "1". This hint applies to any joysticks opened after setting the hint. + */ +#define SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT "SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT" + + /** + * \brief A variable controlling whether the ROG Chakram mice should show up as joysticks + * + * This variable can be set to the following values: + * "0" - ROG Chakram mice do not show up as joysticks (the default) + * "1" - ROG Chakram mice show up as joysticks + */ +#define SDL_HINT_JOYSTICK_ROG_CHAKRAM "SDL_JOYSTICK_ROG_CHAKRAM" + + /** + * \brief A variable controlling whether a separate thread should be used + * for handling joystick detection and raw input messages on Windows + * + * This variable can be set to the following values: + * "0" - A separate thread is not used (the default) + * "1" - A separate thread is used for handling raw input messages + * + */ +#define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD" + +/** + * \brief Determines whether SDL enforces that DRM master is required in order + * to initialize the KMSDRM video backend. + * + * The DRM subsystem has a concept of a "DRM master" which is a DRM client that + * has the ability to set planes, set cursor, etc. When SDL is DRM master, it + * can draw to the screen using the SDL rendering APIs. Without DRM master, SDL + * is still able to process input and query attributes of attached displays, + * but it cannot change display state or draw to the screen directly. + * + * In some cases, it can be useful to have the KMSDRM backend even if it cannot + * be used for rendering. An app may want to use SDL for input processing while + * using another rendering API (such as an MMAL overlay on Raspberry Pi) or + * using its own code to render to DRM overlays that SDL doesn't support. + * + * This hint must be set before initializing the video subsystem. + * + * This variable can be set to the following values: + * "0" - SDL will allow usage of the KMSDRM backend without DRM master + * "1" - SDL Will require DRM master to use the KMSDRM backend (default) + */ +#define SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER "SDL_KMSDRM_REQUIRE_DRM_MASTER" + + /** + * \brief A comma separated list of devices to open as joysticks + * + * This variable is currently only used by the Linux joystick driver. + */ +#define SDL_HINT_JOYSTICK_DEVICE "SDL_JOYSTICK_DEVICE" + + /** + * \brief A variable controlling whether to use the classic /dev/input/js* joystick interface or the newer /dev/input/event* joystick interface on Linux + * + * This variable can be set to the following values: + * "0" - Use /dev/input/event* + * "1" - Use /dev/input/js* + * + * By default the /dev/input/event* interfaces are used + */ +#define SDL_HINT_LINUX_JOYSTICK_CLASSIC "SDL_LINUX_JOYSTICK_CLASSIC" + + /** + * \brief A variable controlling whether joysticks on Linux adhere to their HID-defined deadzones or return unfiltered values. + * + * This variable can be set to the following values: + * "0" - Return unfiltered joystick axis values (the default) + * "1" - Return axis values with deadzones taken into account + */ +#define SDL_HINT_LINUX_JOYSTICK_DEADZONES "SDL_LINUX_JOYSTICK_DEADZONES" + +/** +* \brief When set don't force the SDL app to become a foreground process +* +* This hint only applies to Mac OS X. +* +*/ +#define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP" + +/** + * \brief A variable that determines whether ctrl+click should generate a right-click event on Mac + * + * If present, holding ctrl while left clicking will generate a right click + * event when on Mac. + */ +#define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK" + +/** + * \brief A variable setting the double click radius, in pixels. + */ +#define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS "SDL_MOUSE_DOUBLE_CLICK_RADIUS" + +/** + * \brief A variable setting the double click time, in milliseconds. + */ +#define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME "SDL_MOUSE_DOUBLE_CLICK_TIME" + +/** + * \brief Allow mouse click events when clicking to focus an SDL window + * + * This variable can be set to the following values: + * "0" - Ignore mouse clicks that activate a window + * "1" - Generate events for mouse clicks that activate a window + * + * By default SDL will ignore mouse clicks that activate a window + */ +#define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH" + +/** + * \brief A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode + */ +#define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE "SDL_MOUSE_NORMAL_SPEED_SCALE" + +/** + * \brief A variable controlling whether relative mouse mode constrains the mouse to the center of the window + * + * This variable can be set to the following values: + * "0" - Relative mouse mode constrains the mouse to the window + * "1" - Relative mouse mode constrains the mouse to the center of the window + * + * Constraining to the center of the window works better for FPS games and when the + * application is running over RDP. Constraining to the whole window works better + * for 2D games and increases the chance that the mouse will be in the correct + * position when using high DPI mice. + * + * By default SDL will constrain the mouse to the center of the window + */ +#define SDL_HINT_MOUSE_RELATIVE_MODE_CENTER "SDL_MOUSE_RELATIVE_MODE_CENTER" + +/** + * \brief A variable controlling whether relative mouse mode is implemented using mouse warping + * + * This variable can be set to the following values: + * "0" - Relative mouse mode uses raw input + * "1" - Relative mouse mode uses mouse warping + * + * By default SDL will use raw input for relative mouse mode + */ +#define SDL_HINT_MOUSE_RELATIVE_MODE_WARP "SDL_MOUSE_RELATIVE_MODE_WARP" + +/** + * \brief A variable controlling whether relative mouse motion is affected by renderer scaling + * + * This variable can be set to the following values: + * "0" - Relative motion is unaffected by DPI or renderer's logical size + * "1" - Relative motion is scaled according to DPI scaling and logical size + * + * By default relative mouse deltas are affected by DPI and renderer scaling + */ +#define SDL_HINT_MOUSE_RELATIVE_SCALING "SDL_MOUSE_RELATIVE_SCALING" + +/** + * \brief A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode + */ +#define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE "SDL_MOUSE_RELATIVE_SPEED_SCALE" + +/** + * \brief A variable controlling whether mouse events should generate synthetic touch events + * + * This variable can be set to the following values: + * "0" - Mouse events will not generate touch events (default for desktop platforms) + * "1" - Mouse events will generate touch events (default for mobile platforms, such as Android and iOS) + */ +#define SDL_HINT_MOUSE_TOUCH_EVENTS "SDL_MOUSE_TOUCH_EVENTS" + +/** + * \brief A variable controlling whether the mouse is captured while mouse buttons are pressed + * + * This variable can be set to the following values: + * "0" - The mouse is not captured while mouse buttons are pressed + * "1" - The mouse is captured while mouse buttons are pressed + * + * By default the mouse is captured while mouse buttons are pressed so if the mouse is dragged + * outside the window, the application continues to receive mouse events until the button is + * released. + */ +#define SDL_HINT_MOUSE_AUTO_CAPTURE "SDL_MOUSE_AUTO_CAPTURE" + +/** + * \brief Tell SDL not to catch the SIGINT or SIGTERM signals. + * + * This hint only applies to Unix-like platforms, and should set before + * any calls to SDL_Init() + * + * The variable can be set to the following values: + * "0" - SDL will install a SIGINT and SIGTERM handler, and when it + * catches a signal, convert it into an SDL_QUIT event. + * "1" - SDL will not install a signal handler at all. + */ +#define SDL_HINT_NO_SIGNAL_HANDLERS "SDL_NO_SIGNAL_HANDLERS" + +/** + * \brief A variable controlling what driver to use for OpenGL ES contexts. + * + * On some platforms, currently Windows and X11, OpenGL drivers may support + * creating contexts with an OpenGL ES profile. By default SDL uses these + * profiles, when available, otherwise it attempts to load an OpenGL ES + * library, e.g. that provided by the ANGLE project. This variable controls + * whether SDL follows this default behaviour or will always load an + * OpenGL ES library. + * + * Circumstances where this is useful include + * - Testing an app with a particular OpenGL ES implementation, e.g ANGLE, + * or emulator, e.g. those from ARM, Imagination or Qualcomm. + * - Resolving OpenGL ES function addresses at link time by linking with + * the OpenGL ES library instead of querying them at run time with + * SDL_GL_GetProcAddress(). + * + * Caution: for an application to work with the default behaviour across + * different OpenGL drivers it must query the OpenGL ES function + * addresses at run time using SDL_GL_GetProcAddress(). + * + * This variable is ignored on most platforms because OpenGL ES is native + * or not supported. + * + * This variable can be set to the following values: + * "0" - Use ES profile of OpenGL, if available. (Default when not set.) + * "1" - Load OpenGL ES library using the default library names. + * + */ +#define SDL_HINT_OPENGL_ES_DRIVER "SDL_OPENGL_ES_DRIVER" + +/** + * \brief A variable controlling which orientations are allowed on iOS/Android. + * + * In some circumstances it is necessary to be able to explicitly control + * which UI orientations are allowed. + * + * This variable is a space delimited list of the following values: + * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown" + */ +#define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" + +/** + * \brief A variable controlling the use of a sentinel event when polling the event queue + * + * This variable can be set to the following values: + * "0" - Disable poll sentinels + * "1" - Enable poll sentinels + * + * When polling for events, SDL_PumpEvents is used to gather new events from devices. + * If a device keeps producing new events between calls to SDL_PumpEvents, a poll loop will + * become stuck until the new events stop. + * This is most noticable when moving a high frequency mouse. + * + * By default, poll sentinels are enabled. + */ +#define SDL_HINT_POLL_SENTINEL "SDL_POLL_SENTINEL" + +/** + * \brief Override for SDL_GetPreferredLocales() + * + * If set, this will be favored over anything the OS might report for the + * user's preferred locales. Changing this hint at runtime will not generate + * a SDL_LOCALECHANGED event (but if you can change the hint, you can push + * your own event, if you want). + * + * The format of this hint is a comma-separated list of language and locale, + * combined with an underscore, as is a common format: "en_GB". Locale is + * optional: "en". So you might have a list like this: "en_GB,jp,es_PT" + */ +#define SDL_HINT_PREFERRED_LOCALES "SDL_PREFERRED_LOCALES" + +/** + * \brief A variable describing the content orientation on QtWayland-based platforms. + * + * On QtWayland platforms, windows are rotated client-side to allow for custom + * transitions. In order to correctly position overlays (e.g. volume bar) and + * gestures (e.g. events view, close/minimize gestures), the system needs to + * know in which orientation the application is currently drawing its contents. + * + * This does not cause the window to be rotated or resized, the application + * needs to take care of drawing the content in the right orientation (the + * framebuffer is always in portrait mode). + * + * This variable can be one of the following values: + * "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape" + */ +#define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION" + +/** + * \brief Flags to set on QtWayland windows to integrate with the native window manager. + * + * On QtWayland platforms, this hint controls the flags to set on the windows. + * For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures. + * + * This variable is a space-separated list of the following values (empty = no flags): + * "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager" + */ +#define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS" + +/** + * \brief A variable controlling whether the 2D render API is compatible or efficient. + * + * This variable can be set to the following values: + * + * "0" - Don't use batching to make rendering more efficient. + * "1" - Use batching, but might cause problems if app makes its own direct OpenGL calls. + * + * Up to SDL 2.0.9, the render API would draw immediately when requested. Now + * it batches up draw requests and sends them all to the GPU only when forced + * to (during SDL_RenderPresent, when changing render targets, by updating a + * texture that the batch needs, etc). This is significantly more efficient, + * but it can cause problems for apps that expect to render on top of the + * render API's output. As such, SDL will disable batching if a specific + * render backend is requested (since this might indicate that the app is + * planning to use the underlying graphics API directly). This hint can + * be used to explicitly request batching in this instance. It is a contract + * that you will either never use the underlying graphics API directly, or + * if you do, you will call SDL_RenderFlush() before you do so any current + * batch goes to the GPU before your work begins. Not following this contract + * will result in undefined behavior. + */ +#define SDL_HINT_RENDER_BATCHING "SDL_RENDER_BATCHING" + +/** + * \brief A variable controlling how the 2D render API renders lines + * + * This variable can be set to the following values: + * "0" - Use the default line drawing method (Bresenham's line algorithm as of SDL 2.0.20) + * "1" - Use the driver point API using Bresenham's line algorithm (correct, draws many points) + * "2" - Use the driver line API (occasionally misses line endpoints based on hardware driver quirks, was the default before 2.0.20) + * "3" - Use the driver geometry API (correct, draws thicker diagonal lines) + * + * This variable should be set when the renderer is created. + */ +#define SDL_HINT_RENDER_LINE_METHOD "SDL_RENDER_LINE_METHOD" + +/** + * \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer. + * + * This variable does not have any effect on the Direct3D 9 based renderer. + * + * This variable can be set to the following values: + * "0" - Disable Debug Layer use + * "1" - Enable Debug Layer use + * + * By default, SDL does not use Direct3D Debug Layer. + */ +#define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG" + +/** + * \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations. + * + * This variable can be set to the following values: + * "0" - Thread-safety is not enabled (faster) + * "1" - Thread-safety is enabled + * + * By default the Direct3D device is created with thread-safety disabled. + */ +#define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE" + +/** + * \brief A variable specifying which render driver to use. + * + * If the application doesn't pick a specific renderer to use, this variable + * specifies the name of the preferred renderer. If the preferred renderer + * can't be initialized, the normal default renderer is used. + * + * This variable is case insensitive and can be set to the following values: + * "direct3d" + * "opengl" + * "opengles2" + * "opengles" + * "metal" + * "software" + * + * The default varies by platform, but it's the first one in the list that + * is available on the current platform. + */ +#define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER" + +/** + * \brief A variable controlling the scaling policy for SDL_RenderSetLogicalSize. + * + * This variable can be set to the following values: + * "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen + * "1" or "overscan" - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen + * + * By default letterbox is used + */ +#define SDL_HINT_RENDER_LOGICAL_SIZE_MODE "SDL_RENDER_LOGICAL_SIZE_MODE" + +/** + * \brief A variable controlling whether the OpenGL render driver uses shaders if they are available. + * + * This variable can be set to the following values: + * "0" - Disable shaders + * "1" - Enable shaders + * + * By default shaders are used if OpenGL supports them. + */ +#define SDL_HINT_RENDER_OPENGL_SHADERS "SDL_RENDER_OPENGL_SHADERS" + +/** + * \brief A variable controlling the scaling quality + * + * This variable can be set to the following values: + * "0" or "nearest" - Nearest pixel sampling + * "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D) + * "2" or "best" - Currently this is the same as "linear" + * + * By default nearest pixel sampling is used + */ +#define SDL_HINT_RENDER_SCALE_QUALITY "SDL_RENDER_SCALE_QUALITY" + +/** + * \brief A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing. + * + * This variable can be set to the following values: + * "0" - Disable vsync + * "1" - Enable vsync + * + * By default SDL does not sync screen surface updates with vertical refresh. + */ +#define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC" + + /** + * \brief A variable to control whether the return key on the soft keyboard + * should hide the soft keyboard on Android and iOS. + * + * The variable can be set to the following values: + * "0" - The return key will be handled as a key event. This is the behaviour of SDL <= 2.0.3. (default) + * "1" - The return key will hide the keyboard. + * + * The value of this hint is used at runtime, so it can be changed at any time. + */ +#define SDL_HINT_RETURN_KEY_HIDES_IME "SDL_RETURN_KEY_HIDES_IME" + +/** + * \brief Tell SDL which Dispmanx layer to use on a Raspberry PI + * + * Also known as Z-order. The variable can take a negative or positive value. + * The default is 10000. + */ +#define SDL_HINT_RPI_VIDEO_LAYER "SDL_RPI_VIDEO_LAYER" + +/** + * \brief Specify an "activity name" for screensaver inhibition. + * + * Some platforms, notably Linux desktops, list the applications which are + * inhibiting the screensaver or other power-saving features. + * + * This hint lets you specify the "activity name" sent to the OS when + * SDL_DisableScreenSaver() is used (or the screensaver is automatically + * disabled). The contents of this hint are used when the screensaver is + * disabled. You should use a string that describes what your program is doing + * (and, therefore, why the screensaver is disabled). For example, "Playing a + * game" or "Watching a video". + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: "Playing a game" or something similar. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME "SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME" + +/** + * \brief Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as realtime. + * + * On some platforms, like Linux, a realtime priority thread may be subject to restrictions + * that require special handling by the application. This hint exists to let SDL know that + * the app is prepared to handle said restrictions. + * + * On Linux, SDL will apply the following configuration to any thread that becomes realtime: + * * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy, + * * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit. + * * Exceeding this limit will result in the kernel sending SIGKILL to the app, + * * Refer to the man pages for more information. + * + * This variable can be set to the following values: + * "0" - default platform specific behaviour + * "1" - Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy + */ +#define SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL "SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL" + +/** +* \brief A string specifying additional information to use with SDL_SetThreadPriority. +* +* By default SDL_SetThreadPriority will make appropriate system changes in order to +* apply a thread priority. For example on systems using pthreads the scheduler policy +* is changed automatically to a policy that works well with a given priority. +* Code which has specific requirements can override SDL's default behavior with this hint. +* +* pthread hint values are "current", "other", "fifo" and "rr". +* Currently no other platform hint values are defined but may be in the future. +* +* \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro +* configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME +* after calling SDL_SetThreadPriority(). +*/ +#define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY" + +/** +* \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size +* +* Use this hint in case you need to set SDL's threads stack size to other than the default. +* This is specially useful if you build SDL against a non glibc libc library (such as musl) which +* provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses). +* Support for this hint is currently available only in the pthread, Windows, and PSP backend. +* +* Instead of this hint, in 2.0.9 and later, you can use +* SDL_CreateThreadWithStackSize(). This hint only works with the classic +* SDL_CreateThread(). +*/ +#define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE" + +/** + * \brief A variable that controls the timer resolution, in milliseconds. + * + * The higher resolution the timer, the more frequently the CPU services + * timer interrupts, and the more precise delays are, but this takes up + * power and CPU time. This hint is only used on Windows. + * + * See this blog post for more information: + * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/ + * + * If this variable is set to "0", the system timer resolution is not set. + * + * The default value is "1". This hint may be set at any time. + */ +#define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION" + +/** + * \brief A variable controlling whether touch events should generate synthetic mouse events + * + * This variable can be set to the following values: + * "0" - Touch events will not generate mouse events + * "1" - Touch events will generate mouse events + * + * By default SDL will generate mouse events for touch events + */ +#define SDL_HINT_TOUCH_MOUSE_EVENTS "SDL_TOUCH_MOUSE_EVENTS" + +/** + * \brief A variable controlling which touchpad should generate synthetic mouse events + * + * This variable can be set to the following values: + * "0" - Only front touchpad should generate mouse events. Default + * "1" - Only back touchpad should generate mouse events. + * "2" - Both touchpads should generate mouse events. + * + * By default SDL will generate mouse events for all touch devices + */ +#define SDL_HINT_VITA_TOUCH_MOUSE_DEVICE "SDL_HINT_VITA_TOUCH_MOUSE_DEVICE" + +/** + * \brief A variable controlling whether the Android / tvOS remotes + * should be listed as joystick devices, instead of sending keyboard events. + * + * This variable can be set to the following values: + * "0" - Remotes send enter/escape/arrow key events + * "1" - Remotes are available as 2 axis, 2 button joysticks (the default). + */ +#define SDL_HINT_TV_REMOTE_AS_JOYSTICK "SDL_TV_REMOTE_AS_JOYSTICK" + +/** + * \brief A variable controlling whether the screensaver is enabled. + * + * This variable can be set to the following values: + * "0" - Disable screensaver + * "1" - Enable screensaver + * + * By default SDL will disable the screensaver. + */ +#define SDL_HINT_VIDEO_ALLOW_SCREENSAVER "SDL_VIDEO_ALLOW_SCREENSAVER" + +/** + * \brief Tell the video driver that we only want a double buffer. + * + * By default, most lowlevel 2D APIs will use a triple buffer scheme that + * wastes no CPU time on waiting for vsync after issuing a flip, but + * introduces a frame of latency. On the other hand, using a double buffer + * scheme instead is recommended for cases where low latency is an important + * factor because we save a whole frame of latency. + * We do so by waiting for vsync immediately after issuing a flip, usually just + * after eglSwapBuffers call in the backend's *_SwapWindow function. + * + * Since it's driver-specific, it's only supported where possible and + * implemented. Currently supported the following drivers: + * + * - KMSDRM (kmsdrm) + * - Raspberry Pi (raspberrypi) + */ +#define SDL_HINT_VIDEO_DOUBLE_BUFFER "SDL_VIDEO_DOUBLE_BUFFER" + +/** + * \brief A variable controlling whether the EGL window is allowed to be + * composited as transparent, rather than opaque. + * + * Most window systems will always render windows opaque, even if the surface + * format has an alpha channel. This is not always true, however, so by default + * SDL will try to enforce opaque composition. To override this behavior, you + * can set this hint to "1". + */ +#define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY" + +/** + * \brief A variable controlling whether the graphics context is externally managed. + * + * This variable can be set to the following values: + * "0" - SDL will manage graphics contexts that are attached to windows. + * "1" - Disable graphics context management on windows. + * + * By default SDL will manage OpenGL contexts in certain situations. For example, on Android the + * context will be automatically saved and restored when pausing the application. Additionally, some + * platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this + * behavior, which is desireable when the application manages the graphics context, such as + * an externally managed OpenGL context or attaching a Vulkan surface to the window. + */ +#define SDL_HINT_VIDEO_EXTERNAL_CONTEXT "SDL_VIDEO_EXTERNAL_CONTEXT" + +/** + * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS) + */ +#define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED" + +/** + * \brief A variable that dictates policy for fullscreen Spaces on Mac OS X. + * + * This hint only applies to Mac OS X. + * + * The variable can be set to the following values: + * "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and + * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" + * button on their titlebars). + * "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and + * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" + * button on their titlebars). + * + * The default value is "1". Spaces are disabled regardless of this hint if + * the OS isn't at least Mac OS X Lion (10.7). This hint must be set before + * any windows are created. + */ +#define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES "SDL_VIDEO_MAC_FULLSCREEN_SPACES" + +/** + * \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to false. + * \warning Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're + * seeing if "true" causes more problems than it solves in modern times. + * + */ +#define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS" + +/** + * \brief A variable controlling whether the libdecor Wayland backend is allowed to be used. + * + * This variable can be set to the following values: + * "0" - libdecor use is disabled. + * "1" - libdecor use is enabled (default). + * + * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. + */ +#define SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR "SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR" + +/** + * \brief A variable controlling whether the libdecor Wayland backend is preferred over native decrations. + * + * When this hint is set, libdecor will be used to provide window decorations, even if xdg-decoration is + * available. (Note that, by default, libdecor will use xdg-decoration itself if available). + * + * This variable can be set to the following values: + * "0" - libdecor is enabled only if server-side decorations are unavailable. + * "1" - libdecor is always enabled if available. + * + * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. + */ +#define SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR "SDL_VIDEO_WAYLAND_PREFER_LIBDECOR" + +/** +* \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p"). +* +* If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has +* SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly +* created SDL_Window: +* +* 1. Its pixel format will be set to the same pixel format as this SDL_Window. This is +* needed for example when sharing an OpenGL context across multiple windows. +* +* 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for +* OpenGL rendering. +* +* This variable can be set to the following values: +* The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should +* share a pixel format with. +*/ +#define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT" + +/** + * \brief When calling SDL_CreateWindowFrom(), make the window compatible with OpenGL. + * + * This variable can be set to the following values: + * "0" - Don't add any graphics flags to the SDL_WindowFlags + * "1" - Add SDL_WINDOW_OPENGL to the SDL_WindowFlags + * + * By default SDL will not make the foreign window compatible with OpenGL. + */ +#define SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL "SDL_VIDEO_FOREIGN_WINDOW_OPENGL" + +/** + * \brief When calling SDL_CreateWindowFrom(), make the window compatible with Vulkan. + * + * This variable can be set to the following values: + * "0" - Don't add any graphics flags to the SDL_WindowFlags + * "1" - Add SDL_WINDOW_VULKAN to the SDL_WindowFlags + * + * By default SDL will not make the foreign window compatible with Vulkan. + */ +#define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN "SDL_VIDEO_FOREIGN_WINDOW_VULKAN" + +/** +* \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries +* +* SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It +* can use two different sets of binaries, those compiled by the user from source +* or those provided by the Chrome browser. In the later case, these binaries require +* that SDL loads a DLL providing the shader compiler. +* +* This variable can be set to the following values: +* "d3dcompiler_46.dll" - default, best for Vista or later. +* "d3dcompiler_43.dll" - for XP support. +* "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries. +* +*/ +#define SDL_HINT_VIDEO_WIN_D3DCOMPILER "SDL_VIDEO_WIN_D3DCOMPILER" + +/** + * \brief A variable controlling whether X11 should use GLX or EGL by default + * + * This variable can be set to the following values: + * "0" - Use GLX + * "1" - Use EGL + * + * By default SDL will use GLX when both are present. + */ +#define SDL_HINT_VIDEO_X11_FORCE_EGL "SDL_VIDEO_X11_FORCE_EGL" + +/** + * \brief A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be used. + * + * This variable can be set to the following values: + * "0" - Disable _NET_WM_BYPASS_COMPOSITOR + * "1" - Enable _NET_WM_BYPASS_COMPOSITOR + * + * By default SDL will use _NET_WM_BYPASS_COMPOSITOR + * + */ +#define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR" + +/** + * \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported. + * + * This variable can be set to the following values: + * "0" - Disable _NET_WM_PING + * "1" - Enable _NET_WM_PING + * + * By default SDL will use _NET_WM_PING, but for applications that know they + * will not always be able to respond to ping requests in a timely manner they can + * turn it off to avoid the window manager thinking the app is hung. + * The hint is checked in CreateWindow. + */ +#define SDL_HINT_VIDEO_X11_NET_WM_PING "SDL_VIDEO_X11_NET_WM_PING" + +/** + * \brief A variable forcing the visual ID chosen for new X11 windows + * + */ +#define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID" + +/** + * \brief A variable controlling whether the X11 Xinerama extension should be used. + * + * This variable can be set to the following values: + * "0" - Disable Xinerama + * "1" - Enable Xinerama + * + * By default SDL will use Xinerama if it is available. + */ +#define SDL_HINT_VIDEO_X11_XINERAMA "SDL_VIDEO_X11_XINERAMA" + +/** + * \brief A variable controlling whether the X11 XRandR extension should be used. + * + * This variable can be set to the following values: + * "0" - Disable XRandR + * "1" - Enable XRandR + * + * By default SDL will not use XRandR because of window manager issues. + */ +#define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR" + +/** + * \brief A variable controlling whether the X11 VidMode extension should be used. + * + * This variable can be set to the following values: + * "0" - Disable XVidMode + * "1" - Enable XVidMode + * + * By default SDL will use XVidMode if it is available. + */ +#define SDL_HINT_VIDEO_X11_XVIDMODE "SDL_VIDEO_X11_XVIDMODE" + +/** + * \brief Controls how the fact chunk affects the loading of a WAVE file. + * + * The fact chunk stores information about the number of samples of a WAVE + * file. The Standards Update from Microsoft notes that this value can be used + * to 'determine the length of the data in seconds'. This is especially useful + * for compressed formats (for which this is a mandatory chunk) if they produce + * multiple sample frames per block and truncating the block is not allowed. + * The fact chunk can exactly specify how many sample frames there should be + * in this case. + * + * Unfortunately, most application seem to ignore the fact chunk and so SDL + * ignores it by default as well. + * + * This variable can be set to the following values: + * + * "truncate" - Use the number of samples to truncate the wave data if + * the fact chunk is present and valid + * "strict" - Like "truncate", but raise an error if the fact chunk + * is invalid, not present for non-PCM formats, or if the + * data chunk doesn't have that many samples + * "ignorezero" - Like "truncate", but ignore fact chunk if the number of + * samples is zero + * "ignore" - Ignore fact chunk entirely (default) + */ +#define SDL_HINT_WAVE_FACT_CHUNK "SDL_WAVE_FACT_CHUNK" + +/** + * \brief Controls how the size of the RIFF chunk affects the loading of a WAVE file. + * + * The size of the RIFF chunk (which includes all the sub-chunks of the WAVE + * file) is not always reliable. In case the size is wrong, it's possible to + * just ignore it and step through the chunks until a fixed limit is reached. + * + * Note that files that have trailing data unrelated to the WAVE file or + * corrupt files may slow down the loading process without a reliable boundary. + * By default, SDL stops after 10000 chunks to prevent wasting time. Use the + * environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value. + * + * This variable can be set to the following values: + * + * "force" - Always use the RIFF chunk size as a boundary for the chunk search + * "ignorezero" - Like "force", but a zero size searches up to 4 GiB (default) + * "ignore" - Ignore the RIFF chunk size and always search up to 4 GiB + * "maximum" - Search for chunks until the end of file (not recommended) + */ +#define SDL_HINT_WAVE_RIFF_CHUNK_SIZE "SDL_WAVE_RIFF_CHUNK_SIZE" + +/** + * \brief Controls how a truncated WAVE file is handled. + * + * A WAVE file is considered truncated if any of the chunks are incomplete or + * the data chunk size is not a multiple of the block size. By default, SDL + * decodes until the first incomplete block, as most applications seem to do. + * + * This variable can be set to the following values: + * + * "verystrict" - Raise an error if the file is truncated + * "strict" - Like "verystrict", but the size of the RIFF chunk is ignored + * "dropframe" - Decode until the first incomplete sample frame + * "dropblock" - Decode until the first incomplete block (default) + */ +#define SDL_HINT_WAVE_TRUNCATION "SDL_WAVE_TRUNCATION" + +/** + * \brief Tell SDL not to name threads on Windows with the 0x406D1388 Exception. + * The 0x406D1388 Exception is a trick used to inform Visual Studio of a + * thread's name, but it tends to cause problems with other debuggers, + * and the .NET runtime. Note that SDL 2.0.6 and later will still use + * the (safer) SetThreadDescription API, introduced in the Windows 10 + * Creators Update, if available. + * + * The variable can be set to the following values: + * "0" - SDL will raise the 0x406D1388 Exception to name threads. + * This is the default behavior of SDL <= 2.0.4. + * "1" - SDL will not raise this exception, and threads will be unnamed. (default) + * This is necessary with .NET languages or debuggers that aren't Visual Studio. + */ +#define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING" + +/** + * \brief A variable controlling whether the windows message loop is processed by SDL + * + * This variable can be set to the following values: + * "0" - The window message loop is not run + * "1" - The window message loop is processed in SDL_PumpEvents() + * + * By default SDL will process the windows message loop + */ +#define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP" + +/** + * \brief Force SDL to use Critical Sections for mutexes on Windows. + * On Windows 7 and newer, Slim Reader/Writer Locks are available. + * They offer better performance, allocate no kernel ressources and + * use less memory. SDL will fall back to Critical Sections on older + * OS versions or if forced to by this hint. + * + * This variable can be set to the following values: + * "0" - Use SRW Locks when available. If not, fall back to Critical Sections. (default) + * "1" - Force the use of Critical Sections in all cases. + * + */ +#define SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS "SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS" + +/** + * \brief Force SDL to use Kernel Semaphores on Windows. + * Kernel Semaphores are inter-process and require a context + * switch on every interaction. On Windows 8 and newer, the + * WaitOnAddress API is available. Using that and atomics to + * implement semaphores increases performance. + * SDL will fall back to Kernel Objects on older OS versions + * or if forced to by this hint. + * + * This variable can be set to the following values: + * "0" - Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel Objects. (default) + * "1" - Force the use of Kernel Objects in all cases. + * + */ +#define SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL "SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL" + +/** + * \brief A variable to specify custom icon resource id from RC file on Windows platform + */ +#define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON" +#define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL" + +/** + * \brief Tell SDL not to generate window-close events for Alt+F4 on Windows. + * + * The variable can be set to the following values: + * "0" - SDL will generate a window-close event when it sees Alt+F4. + * "1" - SDL will only do normal key handling for Alt+F4. + */ +#define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4" + +/** + * \brief Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9. + * Direct3D 9Ex contains changes to state management that can eliminate device + * loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require + * some changes to your application to cope with the new behavior, so this + * is disabled by default. + * + * This hint must be set before initializing the video subsystem. + * + * For more information on Direct3D 9Ex, see: + * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex + * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements + * + * This variable can be set to the following values: + * "0" - Use the original Direct3D 9 API (default) + * "1" - Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is unavailable) + * + */ +#define SDL_HINT_WINDOWS_USE_D3D9EX "SDL_WINDOWS_USE_D3D9EX" + +/** + * \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden + * + * This variable can be set to the following values: + * "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc) + * "1" - The window frame is interactive when the cursor is hidden + * + * By default SDL will allow interaction with the window frame when the cursor is hidden + */ +#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN" + +/** +* \brief A variable controlling whether the window is activated when the SDL_ShowWindow function is called +* +* This variable can be set to the following values: +* "0" - The window is activated when the SDL_ShowWindow function is called +* "1" - The window is not activated when the SDL_ShowWindow function is called +* +* By default SDL will activate the window when the SDL_ShowWindow function is called +*/ +#define SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN "SDL_WINDOW_NO_ACTIVATION_WHEN_SHOWN" + +/** \brief Allows back-button-press events on Windows Phone to be marked as handled + * + * Windows Phone devices typically feature a Back button. When pressed, + * the OS will emit back-button-press events, which apps are expected to + * handle in an appropriate manner. If apps do not explicitly mark these + * events as 'Handled', then the OS will invoke its default behavior for + * unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to + * terminate the app (and attempt to switch to the previous app, or to the + * device's home screen). + * + * Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL + * to mark back-button-press events as Handled, if and when one is sent to + * the app. + * + * Internally, Windows Phone sends back button events as parameters to + * special back-button-press callback functions. Apps that need to respond + * to back-button-press events are expected to register one or more + * callback functions for such, shortly after being launched (during the + * app's initialization phase). After the back button is pressed, the OS + * will invoke these callbacks. If the app's callback(s) do not explicitly + * mark the event as handled by the time they return, or if the app never + * registers one of these callback, the OS will consider the event + * un-handled, and it will apply its default back button behavior (terminate + * the app). + * + * SDL registers its own back-button-press callback with the Windows Phone + * OS. This callback will emit a pair of SDL key-press events (SDL_KEYDOWN + * and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which + * it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON. + * If the hint's value is set to "1", the back button event's Handled + * property will get set to 'true'. If the hint's value is set to something + * else, or if it is unset, SDL will leave the event's Handled property + * alone. (By default, the OS sets this property to 'false', to note.) + * + * SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a + * back button is pressed, or can set it in direct-response to a back button + * being pressed. + * + * In order to get notified when a back button is pressed, SDL apps should + * register a callback function with SDL_AddEventWatch(), and have it listen + * for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK. + * (Alternatively, SDL_KEYUP events can be listened-for. Listening for + * either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON + * set by such a callback, will be applied to the OS' current + * back-button-press event. + * + * More details on back button behavior in Windows Phone apps can be found + * at the following page, on Microsoft's developer site: + * http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx + */ +#define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON" + +/** \brief Label text for a WinRT app's privacy policy link + * + * Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT, + * Microsoft mandates that this policy be available via the Windows Settings charm. + * SDL provides code to add a link there, with its label text being set via the + * optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. + * + * Please note that a privacy policy's contents are not set via this hint. A separate + * hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the + * policy. + * + * The contents of this hint should be encoded as a UTF8 string. + * + * The default value is "Privacy Policy". This hint should only be set during app + * initialization, preferably before any calls to SDL_Init(). + * + * For additional information on linking to a privacy policy, see the documentation for + * SDL_HINT_WINRT_PRIVACY_POLICY_URL. + */ +#define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL" + +/** + * \brief A URL to a WinRT app's privacy policy + * + * All network-enabled WinRT apps must make a privacy policy available to its + * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be + * be available in the Windows Settings charm, as accessed from within the app. + * SDL provides code to add a URL-based link there, which can point to the app's + * privacy policy. + * + * To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL + * before calling any SDL_Init() functions. The contents of the hint should + * be a valid URL. For example, "http://www.example.com". + * + * The default value is "", which will prevent SDL from adding a privacy policy + * link to the Settings charm. This hint should only be set during app init. + * + * The label text of an app's "Privacy Policy" link may be customized via another + * hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. + * + * Please note that on Windows Phone, Microsoft does not provide standard UI + * for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL + * will not get used on that platform. Network-enabled phone apps should display + * their privacy policy through some other, in-app means. + */ +#define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL" + +/** + * \brief Mark X11 windows as override-redirect. + * + * If set, this _might_ increase framerate at the expense of the desktop + * not working as expected. Override-redirect windows aren't noticed by the + * window manager at all. + * + * You should probably only use this for fullscreen windows, and you probably + * shouldn't even use it for that. But it's here if you want to try! + */ +#define SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT "SDL_X11_FORCE_OVERRIDE_REDIRECT" + +/** + * \brief A variable that lets you disable the detection and use of Xinput gamepad devices + * + * The variable can be set to the following values: + * "0" - Disable XInput detection (only uses direct input) + * "1" - Enable XInput detection (the default) + */ +#define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" + +/** + * \brief A variable that causes SDL to use the old axis and button mapping for XInput devices. + * + * This hint is for backwards compatibility only and will be removed in SDL 2.1 + * + * The default value is "0". This hint must be set before SDL_Init() + */ +#define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING" + +/** + * \brief A variable that causes SDL to not ignore audio "monitors" + * + * This is currently only used for PulseAudio and ignored elsewhere. + * + * By default, SDL ignores audio devices that aren't associated with physical + * hardware. Changing this hint to "1" will expose anything SDL sees that + * appears to be an audio source or sink. This will add "devices" to the list + * that the user probably doesn't want or need, but it can be useful in + * scenarios where you want to hook up SDL to some sort of virtual device, + * etc. + * + * The default value is "0". This hint must be set before SDL_Init(). + * + * This hint is available since SDL 2.0.16. Before then, virtual devices are + * always ignored. + */ +#define SDL_HINT_AUDIO_INCLUDE_MONITORS "SDL_AUDIO_INCLUDE_MONITORS" + +/** + * \brief A variable that forces X11 windows to create as a custom type. + * + * This is currently only used for X11 and ignored elsewhere. + * + * During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property + * to report to the window manager the type of window it wants to create. + * This might be set to various things if SDL_WINDOW_TOOLTIP or + * SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that + * haven't set a specific type, this hint can be used to specify a custom + * type. For example, a dock window might set this to + * "_NET_WM_WINDOW_TYPE_DOCK". + * + * If not set or set to "", this hint is ignored. This hint must be set + * before the SDL_CreateWindow() call that it is intended to affect. + * + * This hint is available since SDL 2.0.22. + */ +#define SDL_HINT_X11_WINDOW_TYPE "SDL_X11_WINDOW_TYPE" + +/** + * \brief A variable that decides whether to send SDL_QUIT when closing the final window. + * + * By default, SDL sends an SDL_QUIT event when there is only one window + * and it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most + * apps would also take the loss of this window as a signal to terminate the + * program. + * + * However, it's not unreasonable in some cases to have the program continue + * to live on, perhaps to create new windows later. + * + * Changing this hint to "0" will cause SDL to not send an SDL_QUIT event + * when the final window is requesting to close. Note that in this case, + * there are still other legitimate reasons one might get an SDL_QUIT + * event: choosing "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c) + * on Unix, etc. + * + * The default value is "1". This hint can be changed at any time. + * + * This hint is available since SDL 2.0.22. Before then, you always get + * an SDL_QUIT event when closing the final window. + */ +#define SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE "SDL_QUIT_ON_LAST_WINDOW_CLOSE" + + +/** + * \brief A variable that decides what video backend to use. + * + * By default, SDL will try all available video backends in a reasonable + * order until it finds one that can work, but this hint allows the app + * or user to force a specific target, such as "x11" if, say, you are + * on Wayland but want to try talking to the X server instead. + * + * This functionality has existed since SDL 2.0.0 (indeed, before that) + * but before 2.0.22 this was an environment variable only. In 2.0.22, + * it was upgraded to a full SDL hint, so you can set the environment + * variable as usual or programatically set the hint with SDL_SetHint, + * which won't propagate to child processes. + * + * The default value is unset, in which case SDL will try to figure out + * the best video backend on your behalf. This hint needs to be set + * before SDL_Init() is called to be useful. + * + * This hint is available since SDL 2.0.22. Before then, you could set + * the environment variable to get the same effect. + */ +#define SDL_HINT_VIDEODRIVER "SDL_VIDEODRIVER" + +/** + * \brief A variable that decides what audio backend to use. + * + * By default, SDL will try all available audio backends in a reasonable + * order until it finds one that can work, but this hint allows the app + * or user to force a specific target, such as "alsa" if, say, you are + * on PulseAudio but want to try talking to the lower level instead. + * + * This functionality has existed since SDL 2.0.0 (indeed, before that) + * but before 2.0.22 this was an environment variable only. In 2.0.22, + * it was upgraded to a full SDL hint, so you can set the environment + * variable as usual or programatically set the hint with SDL_SetHint, + * which won't propagate to child processes. + * + * The default value is unset, in which case SDL will try to figure out + * the best audio backend on your behalf. This hint needs to be set + * before SDL_Init() is called to be useful. + * + * This hint is available since SDL 2.0.22. Before then, you could set + * the environment variable to get the same effect. + */ +#define SDL_HINT_AUDIODRIVER "SDL_AUDIODRIVER" + + +/** + * \brief An enumeration of hint priorities + */ +typedef enum +{ + SDL_HINT_DEFAULT, + SDL_HINT_NORMAL, + SDL_HINT_OVERRIDE +} SDL_HintPriority; + + +/** + * Set a hint with a specific priority. + * + * The priority controls the behavior when setting a hint that already has a + * value. Hints will replace existing hints of their priority and lower. + * Environment variables are considered to have override priority. + * + * \param name the hint to set + * \param value the value of the hint variable + * \param priority the SDL_HintPriority level for the hint + * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetHint + * \sa SDL_SetHint + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name, + const char *value, + SDL_HintPriority priority); + +/** + * Set a hint with normal priority. + * + * Hints will not be set if there is an existing override hint or environment + * variable that takes precedence. You can use SDL_SetHintWithPriority() to + * set the hint with override priority instead. + * + * \param name the hint to set + * \param value the value of the hint variable + * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetHint + * \sa SDL_SetHintWithPriority + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name, + const char *value); + +/** + * Get the value of a hint. + * + * \param name the hint to query + * \returns the string value of a hint or NULL if the hint isn't set. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetHint + * \sa SDL_SetHintWithPriority + */ +extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name); + +/** + * Get the boolean value of a hint variable. + * + * \param name the name of the hint to get the boolean value from + * \param default_value the value to return if the hint does not exist + * \returns the boolean value of a hint or the provided default value if the + * hint does not exist. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetHint + * \sa SDL_SetHint + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetHintBoolean(const char *name, SDL_bool default_value); + +/** + * Type definition of the hint callback function. + * + * \param userdata what was passed as `userdata` to SDL_AddHintCallback() + * \param name what was passed as `name` to SDL_AddHintCallback() + * \param oldValue the previous hint value + * \param newValue the new value hint is to be set to + */ +typedef void (SDLCALL *SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue); + +/** + * Add a function to watch a particular hint. + * + * \param name the hint to watch + * \param callback An SDL_HintCallback function that will be called when the + * hint value changes + * \param userdata a pointer to pass to the callback function + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DelHintCallback + */ +extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name, + SDL_HintCallback callback, + void *userdata); + +/** + * Remove a function watching a particular hint. + * + * \param name the hint being watched + * \param callback An SDL_HintCallback function that will be called when the + * hint value changes + * \param userdata a pointer being passed to the callback function + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddHintCallback + */ +extern DECLSPEC void SDLCALL SDL_DelHintCallback(const char *name, + SDL_HintCallback callback, + void *userdata); + +/** + * Clear all hints. + * + * This function is automatically called during SDL_Quit(). + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_ClearHints(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_hints_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_joystick.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_joystick.h new file mode 100644 index 00000000000..3e5b4a9a320 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_joystick.h @@ -0,0 +1,946 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_joystick.h + * + * Include file for SDL joystick event handling + * + * The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks(), with the exact joystick + * behind a device_index changing as joysticks are plugged and unplugged. + * + * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted + * then it will get a new instance_id, instance_id's are monotonically increasing identifiers of a joystick plugged in. + * + * The term "player_index" is the number assigned to a player on a specific + * controller. For XInput controllers this returns the XInput user index. + * Many joysticks will not be able to supply this information. + * + * The term JoystickGUID is a stable 128-bit identifier for a joystick device that does not change over time, it identifies class of + * the device (a X360 wired controller for example). This identifier is platform dependent. + */ + +#ifndef SDL_joystick_h_ +#define SDL_joystick_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_joystick.h + * + * In order to use these functions, SDL_Init() must have been called + * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system + * for joysticks, and load appropriate drivers. + * + * If you would like to receive joystick updates while the application + * is in the background, you should set the following hint before calling + * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS + */ + +/** + * The joystick structure used to identify an SDL joystick + */ +struct _SDL_Joystick; +typedef struct _SDL_Joystick SDL_Joystick; + +/* A structure that encodes the stable unique id for a joystick device */ +typedef struct { + Uint8 data[16]; +} SDL_JoystickGUID; + +/** + * This is a unique ID for a joystick for the time it is connected to the system, + * and is never reused for the lifetime of the application. If the joystick is + * disconnected and reconnected, it will get a new ID. + * + * The ID value starts at 0 and increments from there. The value -1 is an invalid ID. + */ +typedef Sint32 SDL_JoystickID; + +typedef enum +{ + SDL_JOYSTICK_TYPE_UNKNOWN, + SDL_JOYSTICK_TYPE_GAMECONTROLLER, + SDL_JOYSTICK_TYPE_WHEEL, + SDL_JOYSTICK_TYPE_ARCADE_STICK, + SDL_JOYSTICK_TYPE_FLIGHT_STICK, + SDL_JOYSTICK_TYPE_DANCE_PAD, + SDL_JOYSTICK_TYPE_GUITAR, + SDL_JOYSTICK_TYPE_DRUM_KIT, + SDL_JOYSTICK_TYPE_ARCADE_PAD, + SDL_JOYSTICK_TYPE_THROTTLE +} SDL_JoystickType; + +typedef enum +{ + SDL_JOYSTICK_POWER_UNKNOWN = -1, + SDL_JOYSTICK_POWER_EMPTY, /* <= 5% */ + SDL_JOYSTICK_POWER_LOW, /* <= 20% */ + SDL_JOYSTICK_POWER_MEDIUM, /* <= 70% */ + SDL_JOYSTICK_POWER_FULL, /* <= 100% */ + SDL_JOYSTICK_POWER_WIRED, + SDL_JOYSTICK_POWER_MAX +} SDL_JoystickPowerLevel; + +/* Set max recognized G-force from accelerometer + See src/joystick/uikit/SDL_sysjoystick.m for notes on why this is needed + */ +#define SDL_IPHONE_MAX_GFORCE 5.0 + + +/* Function prototypes */ + +/** + * Locking for multi-threaded access to the joystick API + * + * If you are using the joystick API or handling events from multiple threads + * you should use these locking functions to protect access to the joysticks. + * + * In particular, you are guaranteed that the joystick list won't change, so + * the API functions that take a joystick index will be valid, and joystick + * and game controller events will not be delivered. + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC void SDLCALL SDL_LockJoysticks(void); + + +/** + * Unlocking for multi-threaded access to the joystick API + * + * If you are using the joystick API or handling events from multiple threads + * you should use these locking functions to protect access to the joysticks. + * + * In particular, you are guaranteed that the joystick list won't change, so + * the API functions that take a joystick index will be valid, and joystick + * and game controller events will not be delivered. + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC void SDLCALL SDL_UnlockJoysticks(void); + +/** + * Count the number of joysticks attached to the system. + * + * \returns the number of attached joysticks on success or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickName + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); + +/** + * Get the implementation dependent name of a joystick. + * + * This can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system) + * \returns the name of the selected joystick. If no name can be found, this + * function returns NULL; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickName + * \sa SDL_JoystickOpen + */ +extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); + +/** + * Get the player index of a joystick, or -1 if it's not available This can be + * called before any joysticks are opened. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetDevicePlayerIndex(int device_index); + +/** + * Get the implementation-dependent GUID for the joystick at a given device + * index. + * + * This function can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the GUID of the selected joystick. If called on an invalid index, + * this function returns a zero GUID + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetGUID + * \sa SDL_JoystickGetGUIDString + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetDeviceGUID(int device_index); + +/** + * Get the USB vendor ID of a joystick, if available. + * + * This can be called before any joysticks are opened. If the vendor ID isn't + * available this function returns 0. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the USB vendor ID of the selected joystick. If called on an + * invalid index, this function returns zero + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceVendor(int device_index); + +/** + * Get the USB product ID of a joystick, if available. + * + * This can be called before any joysticks are opened. If the product ID isn't + * available this function returns 0. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the USB product ID of the selected joystick. If called on an + * invalid index, this function returns zero + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProduct(int device_index); + +/** + * Get the product version of a joystick, if available. + * + * This can be called before any joysticks are opened. If the product version + * isn't available this function returns 0. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the product version of the selected joystick. If called on an + * invalid index, this function returns zero + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProductVersion(int device_index); + +/** + * Get the type of a joystick, if available. + * + * This can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the SDL_JoystickType of the selected joystick. If called on an + * invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN` + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetDeviceType(int device_index); + +/** + * Get the instance ID of a joystick. + * + * This can be called before any joysticks are opened. If the index is out of + * range, this function will return -1. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the instance id of the selected joystick. If called on an invalid + * index, this function returns zero + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickGetDeviceInstanceID(int device_index); + +/** + * Open a joystick for use. + * + * The `device_index` argument refers to the N'th joystick presently + * recognized by SDL on the system. It is **NOT** the same as the instance ID + * used to identify the joystick in future events. See + * SDL_JoystickInstanceID() for more details about instance IDs. + * + * The joystick subsystem must be initialized before a joystick can be opened + * for use. + * + * \param device_index the index of the joystick to query + * \returns a joystick identifier or NULL if an error occurred; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickClose + * \sa SDL_JoystickInstanceID + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); + +/** + * Get the SDL_Joystick associated with an instance id. + * + * \param instance_id the instance id to get the SDL_Joystick for + * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID instance_id); + +/** + * Get the SDL_Joystick associated with a player index. + * + * \param player_index the player index to get the SDL_Joystick for + * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromPlayerIndex(int player_index); + +/** + * Attach a new virtual joystick. + * + * \returns the joystick's device index, or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickAttachVirtual(SDL_JoystickType type, + int naxes, + int nbuttons, + int nhats); + +/** + * Detach a virtual joystick. + * + * \param device_index a value previously returned from + * SDL_JoystickAttachVirtual() + * \returns 0 on success, or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickDetachVirtual(int device_index); + +/** + * Query whether or not the joystick at a given device index is virtual. + * + * \param device_index a joystick device index. + * \returns SDL_TRUE if the joystick is virtual, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickIsVirtual(int device_index); + +/** + * Set values on an opened, virtual-joystick's axis. + * + * Please note that values set here will not be applied until the next call to + * SDL_JoystickUpdate, which can either be called directly, or can be called + * indirectly through various other SDL APIs, including, but not limited to + * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, + * SDL_WaitEvent. + * + * \param joystick the virtual joystick on which to set state. + * \param axis the specific axis on the virtual joystick to set. + * \param value the new value for the specified axis. + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualAxis(SDL_Joystick *joystick, int axis, Sint16 value); + +/** + * Set values on an opened, virtual-joystick's button. + * + * Please note that values set here will not be applied until the next call to + * SDL_JoystickUpdate, which can either be called directly, or can be called + * indirectly through various other SDL APIs, including, but not limited to + * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, + * SDL_WaitEvent. + * + * \param joystick the virtual joystick on which to set state. + * \param button the specific button on the virtual joystick to set. + * \param value the new value for the specified button. + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualButton(SDL_Joystick *joystick, int button, Uint8 value); + +/** + * Set values on an opened, virtual-joystick's hat. + * + * Please note that values set here will not be applied until the next call to + * SDL_JoystickUpdate, which can either be called directly, or can be called + * indirectly through various other SDL APIs, including, but not limited to + * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, + * SDL_WaitEvent. + * + * \param joystick the virtual joystick on which to set state. + * \param hat the specific hat on the virtual joystick to set. + * \param value the new value for the specified hat. + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualHat(SDL_Joystick *joystick, int hat, Uint8 value); + +/** + * Get the implementation dependent name of a joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the name of the selected joystick. If no name can be found, this + * function returns NULL; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNameForIndex + * \sa SDL_JoystickOpen + */ +extern DECLSPEC const char *SDLCALL SDL_JoystickName(SDL_Joystick *joystick); + +/** + * Get the player index of an opened joystick. + * + * For XInput controllers this returns the XInput user index. Many joysticks + * will not be able to supply this information. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the player index, or -1 if it's not available. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetPlayerIndex(SDL_Joystick *joystick); + +/** + * Set the player index of an opened joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param player_index the player index to set. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC void SDLCALL SDL_JoystickSetPlayerIndex(SDL_Joystick *joystick, int player_index); + +/** + * Get the implementation-dependent GUID for the joystick. + * + * This function requires an open joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the GUID of the given joystick. If called on an invalid index, + * this function returns a zero GUID; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetDeviceGUID + * \sa SDL_JoystickGetGUIDString + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick *joystick); + +/** + * Get the USB vendor ID of an opened joystick, if available. + * + * If the vendor ID isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the USB vendor ID of the selected joystick, or 0 if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetVendor(SDL_Joystick *joystick); + +/** + * Get the USB product ID of an opened joystick, if available. + * + * If the product ID isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the USB product ID of the selected joystick, or 0 if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProduct(SDL_Joystick *joystick); + +/** + * Get the product version of an opened joystick, if available. + * + * If the product version isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the product version of the selected joystick, or 0 if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProductVersion(SDL_Joystick *joystick); + +/** + * Get the serial number of an opened joystick, if available. + * + * Returns the serial number of the joystick, or NULL if it is not available. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the serial number of the selected joystick, or NULL if + * unavailable. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC const char * SDLCALL SDL_JoystickGetSerial(SDL_Joystick *joystick); + +/** + * Get the type of an opened joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the SDL_JoystickType of the selected joystick. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetType(SDL_Joystick *joystick); + +/** + * Get an ASCII string representation for a given SDL_JoystickGUID. + * + * You should supply at least 33 bytes for pszGUID. + * + * \param guid the SDL_JoystickGUID you wish to convert to string + * \param pszGUID buffer in which to write the ASCII string + * \param cbGUID the size of pszGUID + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetDeviceGUID + * \sa SDL_JoystickGetGUID + * \sa SDL_JoystickGetGUIDFromString + */ +extern DECLSPEC void SDLCALL SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID); + +/** + * Convert a GUID string into a SDL_JoystickGUID structure. + * + * Performs no error checking. If this function is given a string containing + * an invalid GUID, the function will silently succeed, but the GUID generated + * will not be useful. + * + * \param pchGUID string containing an ASCII representation of a GUID + * \returns a SDL_JoystickGUID structure. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetGUIDString + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUIDFromString(const char *pchGUID); + +/** + * Get the status of a specified joystick. + * + * \param joystick the joystick to query + * \returns SDL_TRUE if the joystick has been opened, SDL_FALSE if it has not; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickClose + * \sa SDL_JoystickOpen + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAttached(SDL_Joystick *joystick); + +/** + * Get the instance ID of an opened joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the instance ID of the specified joystick on success or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickOpen + */ +extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickInstanceID(SDL_Joystick *joystick); + +/** + * Get the number of general axis controls on a joystick. + * + * Often, the directional pad on a game controller will either look like 4 + * separate buttons or a POV hat, and not axes, but all of this is up to the + * device and platform. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the number of axis controls/number of axes on success or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetAxis + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick *joystick); + +/** + * Get the number of trackballs on a joystick. + * + * Joystick trackballs have only relative motion events associated with them + * and their state cannot be polled. + * + * Most joysticks do not have trackballs. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the number of trackballs on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetBall + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick *joystick); + +/** + * Get the number of POV hats on a joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the number of POV hats on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetHat + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick *joystick); + +/** + * Get the number of buttons on a joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the number of buttons on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetButton + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick *joystick); + +/** + * Update the current state of the open joysticks. + * + * This is called automatically by the event loop if any joystick events are + * enabled. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickEventState + */ +extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); + +/** + * Enable/disable joystick event polling. + * + * If joystick events are disabled, you must call SDL_JoystickUpdate() + * yourself and manually check the state of the joystick when you want + * joystick information. + * + * It is recommended that you leave joystick event handling enabled. + * + * **WARNING**: Calling this function may delete all events currently in SDL's + * event queue. + * + * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` + * \returns 1 if enabled, 0 if disabled, or a negative error code on failure; + * call SDL_GetError() for more information. + * + * If `state` is `SDL_QUERY` then the current state is returned, + * otherwise the new processing state is returned. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerEventState + */ +extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); + +#define SDL_JOYSTICK_AXIS_MAX 32767 +#define SDL_JOYSTICK_AXIS_MIN -32768 + +/** + * Get the current state of an axis control on a joystick. + * + * SDL makes no promises about what part of the joystick any given axis refers + * to. Your game should have some sort of configuration UI to let users + * specify what each axis should be bound to. Alternately, SDL's higher-level + * Game Controller API makes a great effort to apply order to this lower-level + * interface, so you know that a specific axis is the "left thumb stick," etc. + * + * The value returned by SDL_JoystickGetAxis() is a signed integer (-32768 to + * 32767) representing the current position of the axis. It may be necessary + * to impose certain tolerances on these values to account for jitter. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \param axis the axis to query; the axis indices start at index 0 + * \returns a 16-bit signed integer representing the current position of the + * axis or 0 on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumAxes + */ +extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick *joystick, + int axis); + +/** + * Get the initial state of an axis control on a joystick. + * + * The state is a value ranging from -32768 to 32767. + * + * The axis indices start at index 0. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \param axis the axis to query; the axis indices start at index 0 + * \param state Upon return, the initial value is supplied here. + * \return SDL_TRUE if this axis has any initial value, or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAxisInitialState(SDL_Joystick *joystick, + int axis, Sint16 *state); + +/** + * \name Hat positions + */ +/* @{ */ +#define SDL_HAT_CENTERED 0x00 +#define SDL_HAT_UP 0x01 +#define SDL_HAT_RIGHT 0x02 +#define SDL_HAT_DOWN 0x04 +#define SDL_HAT_LEFT 0x08 +#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP) +#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) +#define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) +#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) +/* @} */ + +/** + * Get the current state of a POV hat on a joystick. + * + * The returned value will be one of the following positions: + * + * - `SDL_HAT_CENTERED` + * - `SDL_HAT_UP` + * - `SDL_HAT_RIGHT` + * - `SDL_HAT_DOWN` + * - `SDL_HAT_LEFT` + * - `SDL_HAT_RIGHTUP` + * - `SDL_HAT_RIGHTDOWN` + * - `SDL_HAT_LEFTUP` + * - `SDL_HAT_LEFTDOWN` + * + * \param joystick an SDL_Joystick structure containing joystick information + * \param hat the hat index to get the state from; indices start at index 0 + * \returns the current hat position. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumHats + */ +extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick *joystick, + int hat); + +/** + * Get the ball axis change since the last poll. + * + * Trackballs can only return relative motion since the last call to + * SDL_JoystickGetBall(), these motion deltas are placed into `dx` and `dy`. + * + * Most joysticks do not have trackballs. + * + * \param joystick the SDL_Joystick to query + * \param ball the ball index to query; ball indices start at index 0 + * \param dx stores the difference in the x axis position since the last poll + * \param dy stores the difference in the y axis position since the last poll + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumBalls + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick *joystick, + int ball, int *dx, int *dy); + +/** + * Get the current state of a button on a joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \param button the button index to get the state from; indices start at + * index 0 + * \returns 1 if the specified button is pressed, 0 otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumButtons + */ +extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick *joystick, + int button); + +/** + * Start a rumble effect. + * + * Each call to this function cancels any previous rumble effect, and calling + * it with 0 intensity stops any rumbling. + * + * \param joystick The joystick to vibrate + * \param low_frequency_rumble The intensity of the low frequency (left) + * rumble motor, from 0 to 0xFFFF + * \param high_frequency_rumble The intensity of the high frequency (right) + * rumble motor, from 0 to 0xFFFF + * \param duration_ms The duration of the rumble effect, in milliseconds + * \returns 0, or -1 if rumble isn't supported on this joystick + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_JoystickHasRumble + */ +extern DECLSPEC int SDLCALL SDL_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); + +/** + * Start a rumble effect in the joystick's triggers + * + * Each call to this function cancels any previous trigger rumble effect, and + * calling it with 0 intensity stops any rumbling. + * + * Note that this is rumbling of the _triggers_ and not the game controller as + * a whole. This is currently only supported on Xbox One controllers. If you + * want the (more common) whole-controller rumble, use SDL_JoystickRumble() + * instead. + * + * \param joystick The joystick to vibrate + * \param left_rumble The intensity of the left trigger rumble motor, from 0 + * to 0xFFFF + * \param right_rumble The intensity of the right trigger rumble motor, from 0 + * to 0xFFFF + * \param duration_ms The duration of the rumble effect, in milliseconds + * \returns 0, or -1 if trigger rumble isn't supported on this joystick + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_JoystickHasRumbleTriggers + */ +extern DECLSPEC int SDLCALL SDL_JoystickRumbleTriggers(SDL_Joystick *joystick, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms); + +/** + * Query whether a joystick has an LED. + * + * An example of a joystick LED is the light on the back of a PlayStation 4's + * DualShock 4 controller. + * + * \param joystick The joystick to query + * \return SDL_TRUE if the joystick has a modifiable LED, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasLED(SDL_Joystick *joystick); + +/** + * Query whether a joystick has rumble support. + * + * \param joystick The joystick to query + * \return SDL_TRUE if the joystick has rumble, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_JoystickRumble + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumble(SDL_Joystick *joystick); + +/** + * Query whether a joystick has rumble support on triggers. + * + * \param joystick The joystick to query + * \return SDL_TRUE if the joystick has trigger rumble, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_JoystickRumbleTriggers + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumbleTriggers(SDL_Joystick *joystick); + +/** + * Update a joystick's LED color. + * + * An example of a joystick LED is the light on the back of a PlayStation 4's + * DualShock 4 controller. + * + * \param joystick The joystick to update + * \param red The intensity of the red LED + * \param green The intensity of the green LED + * \param blue The intensity of the blue LED + * \returns 0 on success, -1 if this joystick does not have a modifiable LED + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetLED(SDL_Joystick *joystick, Uint8 red, Uint8 green, Uint8 blue); + +/** + * Send a joystick specific effect packet + * + * \param joystick The joystick to affect + * \param data The data to send to the joystick + * \param size The size of the data to send to the joystick + * \returns 0, or -1 if this joystick or driver doesn't support effect packets + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSendEffect(SDL_Joystick *joystick, const void *data, int size); + +/** + * Close a joystick previously opened with SDL_JoystickOpen(). + * + * \param joystick The joystick device to close + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickOpen + */ +extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick *joystick); + +/** + * Get the battery level of a joystick as SDL_JoystickPowerLevel. + * + * \param joystick the SDL_Joystick to query + * \returns the current battery level as SDL_JoystickPowerLevel on success or + * `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC SDL_JoystickPowerLevel SDLCALL SDL_JoystickCurrentPowerLevel(SDL_Joystick *joystick); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_joystick_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_keyboard.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_keyboard.h new file mode 100644 index 00000000000..48608cb6a79 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_keyboard.h @@ -0,0 +1,337 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_keyboard.h + * + * Include file for SDL keyboard event handling + */ + +#ifndef SDL_keyboard_h_ +#define SDL_keyboard_h_ + +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The SDL keysym structure, used in key events. + * + * \note If you are looking for translated character input, see the ::SDL_TEXTINPUT event. + */ +typedef struct SDL_Keysym +{ + SDL_Scancode scancode; /**< SDL physical key code - see ::SDL_Scancode for details */ + SDL_Keycode sym; /**< SDL virtual key code - see ::SDL_Keycode for details */ + Uint16 mod; /**< current key modifiers */ + Uint32 unused; +} SDL_Keysym; + +/* Function prototypes */ + +/** + * Query the window which currently has keyboard focus. + * + * \returns the window with keyboard focus. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void); + +/** + * Get a snapshot of the current state of the keyboard. + * + * The pointer returned is a pointer to an internal SDL array. It will be + * valid for the whole lifetime of the application and should not be freed by + * the caller. + * + * A array element with a value of 1 means that the key is pressed and a value + * of 0 means that it is not. Indexes into this array are obtained by using + * SDL_Scancode values. + * + * Use SDL_PumpEvents() to update the state array. + * + * This function gives you the current state after all events have been + * processed, so if a key or button has been pressed and released before you + * process events, then the pressed state will never show up in the + * SDL_GetKeyboardState() calls. + * + * Note: This function doesn't take into account whether shift has been + * pressed or not. + * + * \param numkeys if non-NULL, receives the length of the returned array + * \returns a pointer to an array of key states. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PumpEvents + */ +extern DECLSPEC const Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys); + +/** + * Get the current key modifier state for the keyboard. + * + * \returns an OR'd combination of the modifier keys for the keyboard. See + * SDL_Keymod for details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyboardState + * \sa SDL_SetModState + */ +extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void); + +/** + * Set the current key modifier state for the keyboard. + * + * The inverse of SDL_GetModState(), SDL_SetModState() allows you to impose + * modifier key states on your application. Simply pass your desired modifier + * states into `modstate`. This value may be a bitwise, OR'd combination of + * SDL_Keymod values. + * + * This does not change the keyboard state, only the key modifier flags that + * SDL reports. + * + * \param modstate the desired SDL_Keymod for the keyboard + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetModState + */ +extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate); + +/** + * Get the key code corresponding to the given scancode according to the + * current keyboard layout. + * + * See SDL_Keycode for details. + * + * \param scancode the desired SDL_Scancode to query + * \returns the SDL_Keycode that corresponds to the given SDL_Scancode. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyName + * \sa SDL_GetScancodeFromKey + */ +extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode); + +/** + * Get the scancode corresponding to the given key code according to the + * current keyboard layout. + * + * See SDL_Scancode for details. + * + * \param key the desired SDL_Keycode to query + * \returns the SDL_Scancode that corresponds to the given SDL_Keycode. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromScancode + * \sa SDL_GetScancodeName + */ +extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key); + +/** + * Get a human-readable name for a scancode. + * + * See SDL_Scancode for details. + * + * **Warning**: The returned name is by design not stable across platforms, + * e.g. the name for `SDL_SCANCODE_LGUI` is "Left GUI" under Linux but "Left + * Windows" under Microsoft Windows, and some scancodes like + * `SDL_SCANCODE_NONUSBACKSLASH` don't have any name at all. There are even + * scancodes that share names, e.g. `SDL_SCANCODE_RETURN` and + * `SDL_SCANCODE_RETURN2` (both called "Return"). This function is therefore + * unsuitable for creating a stable cross-platform two-way mapping between + * strings and scancodes. + * + * \param scancode the desired SDL_Scancode to query + * \returns a pointer to the name for the scancode. If the scancode doesn't + * have a name this function returns an empty string (""). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetScancodeFromKey + * \sa SDL_GetScancodeFromName + */ +extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode); + +/** + * Get a scancode from a human-readable name. + * + * \param name the human-readable scancode name + * \returns the SDL_Scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't + * recognized; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromName + * \sa SDL_GetScancodeFromKey + * \sa SDL_GetScancodeName + */ +extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name); + +/** + * Get a human-readable name for a key. + * + * See SDL_Scancode and SDL_Keycode for details. + * + * \param key the desired SDL_Keycode to query + * \returns a pointer to a UTF-8 string that stays valid at least until the + * next call to this function. If you need it around any longer, you + * must copy it. If the key doesn't have a name, this function + * returns an empty string (""). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromName + * \sa SDL_GetKeyFromScancode + * \sa SDL_GetScancodeFromKey + */ +extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key); + +/** + * Get a key code from a human-readable name. + * + * \param name the human-readable key name + * \returns key code, or `SDLK_UNKNOWN` if the name wasn't recognized; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromScancode + * \sa SDL_GetKeyName + * \sa SDL_GetScancodeFromName + */ +extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name); + +/** + * Start accepting Unicode text input events. + * + * This function will start accepting Unicode text input events in the focused + * SDL window, and start emitting SDL_TextInputEvent (SDL_TEXTINPUT) and + * SDL_TextEditingEvent (SDL_TEXTEDITING) events. Please use this function in + * pair with SDL_StopTextInput(). + * + * On some platforms using this function activates the screen keyboard. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetTextInputRect + * \sa SDL_StopTextInput + */ +extern DECLSPEC void SDLCALL SDL_StartTextInput(void); + +/** + * Check whether or not Unicode text input events are enabled. + * + * \returns SDL_TRUE if text input events are enabled else SDL_FALSE. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputActive(void); + +/** + * Stop receiving any text input events. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + */ +extern DECLSPEC void SDLCALL SDL_StopTextInput(void); + +/** + * Dismiss the composition window/IME without disabling the subsystem. + * + * \since This function is available since SDL 2.0.22. + * + * \sa SDL_StartTextInput + * \sa SDL_StopTextInput + */ +extern DECLSPEC void SDLCALL SDL_ClearComposition(void); + +/** + * Returns if an IME Composite or Candidate window is currently shown. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputShown(void); + +/** + * Set the rectangle used to type Unicode text inputs. + * + * Note: If you want use system native IME window, try to set hint + * **SDL_HINT_IME_SHOW_UI** to **1**, otherwise this function won't give you + * any feedback. + * + * \param rect the SDL_Rect structure representing the rectangle to receive + * text (ignored if NULL) + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + */ +extern DECLSPEC void SDLCALL SDL_SetTextInputRect(SDL_Rect *rect); + +/** + * Check whether the platform has screen keyboard support. + * + * \returns SDL_TRUE if the platform has some screen keyboard support or + * SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + * \sa SDL_IsScreenKeyboardShown + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void); + +/** + * Check whether the screen keyboard is shown for given window. + * + * \param window the window for which screen keyboard should be queried + * \returns SDL_TRUE if screen keyboard is shown or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasScreenKeyboardSupport + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenKeyboardShown(SDL_Window *window); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_keyboard_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_keycode.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_keycode.h new file mode 100644 index 00000000000..9cdf0ebfcb5 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_keycode.h @@ -0,0 +1,353 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_keycode.h + * + * Defines constants which identify keyboard keys and modifiers. + */ + +#ifndef SDL_keycode_h_ +#define SDL_keycode_h_ + +#include +#include + +/** + * \brief The SDL virtual key representation. + * + * Values of this type are used to represent keyboard keys using the current + * layout of the keyboard. These values include Unicode values representing + * the unmodified character that would be generated by pressing the key, or + * an SDLK_* constant for those keys that do not generate characters. + * + * A special exception is the number keys at the top of the keyboard which + * always map to SDLK_0...SDLK_9, regardless of layout. + */ +typedef Sint32 SDL_Keycode; + +#define SDLK_SCANCODE_MASK (1<<30) +#define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK) + +typedef enum +{ + SDLK_UNKNOWN = 0, + + SDLK_RETURN = '\r', + SDLK_ESCAPE = '\x1B', + SDLK_BACKSPACE = '\b', + SDLK_TAB = '\t', + SDLK_SPACE = ' ', + SDLK_EXCLAIM = '!', + SDLK_QUOTEDBL = '"', + SDLK_HASH = '#', + SDLK_PERCENT = '%', + SDLK_DOLLAR = '$', + SDLK_AMPERSAND = '&', + SDLK_QUOTE = '\'', + SDLK_LEFTPAREN = '(', + SDLK_RIGHTPAREN = ')', + SDLK_ASTERISK = '*', + SDLK_PLUS = '+', + SDLK_COMMA = ',', + SDLK_MINUS = '-', + SDLK_PERIOD = '.', + SDLK_SLASH = '/', + SDLK_0 = '0', + SDLK_1 = '1', + SDLK_2 = '2', + SDLK_3 = '3', + SDLK_4 = '4', + SDLK_5 = '5', + SDLK_6 = '6', + SDLK_7 = '7', + SDLK_8 = '8', + SDLK_9 = '9', + SDLK_COLON = ':', + SDLK_SEMICOLON = ';', + SDLK_LESS = '<', + SDLK_EQUALS = '=', + SDLK_GREATER = '>', + SDLK_QUESTION = '?', + SDLK_AT = '@', + + /* + Skip uppercase letters + */ + + SDLK_LEFTBRACKET = '[', + SDLK_BACKSLASH = '\\', + SDLK_RIGHTBRACKET = ']', + SDLK_CARET = '^', + SDLK_UNDERSCORE = '_', + SDLK_BACKQUOTE = '`', + SDLK_a = 'a', + SDLK_b = 'b', + SDLK_c = 'c', + SDLK_d = 'd', + SDLK_e = 'e', + SDLK_f = 'f', + SDLK_g = 'g', + SDLK_h = 'h', + SDLK_i = 'i', + SDLK_j = 'j', + SDLK_k = 'k', + SDLK_l = 'l', + SDLK_m = 'm', + SDLK_n = 'n', + SDLK_o = 'o', + SDLK_p = 'p', + SDLK_q = 'q', + SDLK_r = 'r', + SDLK_s = 's', + SDLK_t = 't', + SDLK_u = 'u', + SDLK_v = 'v', + SDLK_w = 'w', + SDLK_x = 'x', + SDLK_y = 'y', + SDLK_z = 'z', + + SDLK_CAPSLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK), + + SDLK_F1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1), + SDLK_F2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2), + SDLK_F3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F3), + SDLK_F4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F4), + SDLK_F5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F5), + SDLK_F6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F6), + SDLK_F7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F7), + SDLK_F8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F8), + SDLK_F9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F9), + SDLK_F10 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F10), + SDLK_F11 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F11), + SDLK_F12 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F12), + + SDLK_PRINTSCREEN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRINTSCREEN), + SDLK_SCROLLLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SCROLLLOCK), + SDLK_PAUSE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAUSE), + SDLK_INSERT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT), + SDLK_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME), + SDLK_PAGEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP), + SDLK_DELETE = '\x7F', + SDLK_END = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END), + SDLK_PAGEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN), + SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT), + SDLK_LEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LEFT), + SDLK_DOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DOWN), + SDLK_UP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UP), + + SDLK_NUMLOCKCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_NUMLOCKCLEAR), + SDLK_KP_DIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DIVIDE), + SDLK_KP_MULTIPLY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MULTIPLY), + SDLK_KP_MINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MINUS), + SDLK_KP_PLUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUS), + SDLK_KP_ENTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_ENTER), + SDLK_KP_1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_1), + SDLK_KP_2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_2), + SDLK_KP_3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_3), + SDLK_KP_4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_4), + SDLK_KP_5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_5), + SDLK_KP_6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_6), + SDLK_KP_7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_7), + SDLK_KP_8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_8), + SDLK_KP_9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_9), + SDLK_KP_0 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_0), + SDLK_KP_PERIOD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERIOD), + + SDLK_APPLICATION = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APPLICATION), + SDLK_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_POWER), + SDLK_KP_EQUALS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALS), + SDLK_F13 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F13), + SDLK_F14 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F14), + SDLK_F15 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F15), + SDLK_F16 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F16), + SDLK_F17 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F17), + SDLK_F18 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F18), + SDLK_F19 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F19), + SDLK_F20 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F20), + SDLK_F21 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F21), + SDLK_F22 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F22), + SDLK_F23 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F23), + SDLK_F24 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F24), + SDLK_EXECUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXECUTE), + SDLK_HELP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HELP), + SDLK_MENU = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MENU), + SDLK_SELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SELECT), + SDLK_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_STOP), + SDLK_AGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AGAIN), + SDLK_UNDO = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UNDO), + SDLK_CUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CUT), + SDLK_COPY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COPY), + SDLK_PASTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PASTE), + SDLK_FIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FIND), + SDLK_MUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MUTE), + SDLK_VOLUMEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEUP), + SDLK_VOLUMEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEDOWN), + SDLK_KP_COMMA = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COMMA), + SDLK_KP_EQUALSAS400 = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALSAS400), + + SDLK_ALTERASE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ALTERASE), + SDLK_SYSREQ = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SYSREQ), + SDLK_CANCEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CANCEL), + SDLK_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEAR), + SDLK_PRIOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRIOR), + SDLK_RETURN2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RETURN2), + SDLK_SEPARATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SEPARATOR), + SDLK_OUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OUT), + SDLK_OPER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OPER), + SDLK_CLEARAGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEARAGAIN), + SDLK_CRSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CRSEL), + SDLK_EXSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXSEL), + + SDLK_KP_00 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00), + SDLK_KP_000 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000), + SDLK_THOUSANDSSEPARATOR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR), + SDLK_DECIMALSEPARATOR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR), + SDLK_CURRENCYUNIT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT), + SDLK_CURRENCYSUBUNIT = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT), + SDLK_KP_LEFTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN), + SDLK_KP_RIGHTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN), + SDLK_KP_LEFTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE), + SDLK_KP_RIGHTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE), + SDLK_KP_TAB = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB), + SDLK_KP_BACKSPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE), + SDLK_KP_A = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A), + SDLK_KP_B = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B), + SDLK_KP_C = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C), + SDLK_KP_D = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D), + SDLK_KP_E = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E), + SDLK_KP_F = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F), + SDLK_KP_XOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR), + SDLK_KP_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER), + SDLK_KP_PERCENT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT), + SDLK_KP_LESS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS), + SDLK_KP_GREATER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER), + SDLK_KP_AMPERSAND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND), + SDLK_KP_DBLAMPERSAND = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND), + SDLK_KP_VERTICALBAR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR), + SDLK_KP_DBLVERTICALBAR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR), + SDLK_KP_COLON = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON), + SDLK_KP_HASH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH), + SDLK_KP_SPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE), + SDLK_KP_AT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT), + SDLK_KP_EXCLAM = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM), + SDLK_KP_MEMSTORE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE), + SDLK_KP_MEMRECALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL), + SDLK_KP_MEMCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR), + SDLK_KP_MEMADD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD), + SDLK_KP_MEMSUBTRACT = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT), + SDLK_KP_MEMMULTIPLY = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY), + SDLK_KP_MEMDIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE), + SDLK_KP_PLUSMINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS), + SDLK_KP_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR), + SDLK_KP_CLEARENTRY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY), + SDLK_KP_BINARY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY), + SDLK_KP_OCTAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL), + SDLK_KP_DECIMAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL), + SDLK_KP_HEXADECIMAL = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL), + + SDLK_LCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL), + SDLK_LSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT), + SDLK_LALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT), + SDLK_LGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI), + SDLK_RCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL), + SDLK_RSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT), + SDLK_RALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT), + SDLK_RGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI), + + SDLK_MODE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE), + + SDLK_AUDIONEXT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIONEXT), + SDLK_AUDIOPREV = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPREV), + SDLK_AUDIOSTOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOSTOP), + SDLK_AUDIOPLAY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPLAY), + SDLK_AUDIOMUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOMUTE), + SDLK_MEDIASELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIASELECT), + SDLK_WWW = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WWW), + SDLK_MAIL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MAIL), + SDLK_CALCULATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALCULATOR), + SDLK_COMPUTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COMPUTER), + SDLK_AC_SEARCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH), + SDLK_AC_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME), + SDLK_AC_BACK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK), + SDLK_AC_FORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD), + SDLK_AC_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP), + SDLK_AC_REFRESH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH), + SDLK_AC_BOOKMARKS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS), + + SDLK_BRIGHTNESSDOWN = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSDOWN), + SDLK_BRIGHTNESSUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSUP), + SDLK_DISPLAYSWITCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DISPLAYSWITCH), + SDLK_KBDILLUMTOGGLE = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMTOGGLE), + SDLK_KBDILLUMDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN), + SDLK_KBDILLUMUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP), + SDLK_EJECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT), + SDLK_SLEEP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP), + SDLK_APP1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP1), + SDLK_APP2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP2), + + SDLK_AUDIOREWIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOREWIND), + SDLK_AUDIOFASTFORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOFASTFORWARD) +} SDL_KeyCode; + +/** + * \brief Enumeration of valid key mods (possibly OR'd together). + */ +typedef enum +{ + KMOD_NONE = 0x0000, + KMOD_LSHIFT = 0x0001, + KMOD_RSHIFT = 0x0002, + KMOD_LCTRL = 0x0040, + KMOD_RCTRL = 0x0080, + KMOD_LALT = 0x0100, + KMOD_RALT = 0x0200, + KMOD_LGUI = 0x0400, + KMOD_RGUI = 0x0800, + KMOD_NUM = 0x1000, + KMOD_CAPS = 0x2000, + KMOD_MODE = 0x4000, + KMOD_SCROLL = 0x8000, + + KMOD_CTRL = KMOD_LCTRL | KMOD_RCTRL, + KMOD_SHIFT = KMOD_LSHIFT | KMOD_RSHIFT, + KMOD_ALT = KMOD_LALT | KMOD_RALT, + KMOD_GUI = KMOD_LGUI | KMOD_RGUI, + + KMOD_RESERVED = KMOD_SCROLL /* This is for source-level compatibility with SDL 2.0.0. */ +} SDL_Keymod; + +#endif /* SDL_keycode_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_loadso.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_loadso.h new file mode 100644 index 00000000000..f1fc9cfae38 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_loadso.h @@ -0,0 +1,115 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_loadso.h + * + * System dependent library loading routines + * + * Some things to keep in mind: + * \li These functions only work on C function names. Other languages may + * have name mangling and intrinsic language support that varies from + * compiler to compiler. + * \li Make sure you declare your function pointers with the same calling + * convention as the actual library function. Your code will crash + * mysteriously if you do not do this. + * \li Avoid namespace collisions. If you load a symbol from the library, + * it is not defined whether or not it goes into the global symbol + * namespace for the application. If it does and it conflicts with + * symbols in your code or other shared libraries, you will not get + * the results you expect. :) + */ + +#ifndef SDL_loadso_h_ +#define SDL_loadso_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Dynamically load a shared object. + * + * \param sofile a system-dependent name of the object file + * \returns an opaque pointer to the object handle or NULL if there was an + * error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadFunction + * \sa SDL_UnloadObject + */ +extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile); + +/** + * Look up the address of the named function in a shared object. + * + * This function pointer is no longer valid after calling SDL_UnloadObject(). + * + * This function can only look up C function names. Other languages may have + * name mangling and intrinsic language support that varies from compiler to + * compiler. + * + * Make sure you declare your function pointers with the same calling + * convention as the actual library function. Your code will crash + * mysteriously if you do not do this. + * + * If the requested function doesn't exist, NULL is returned. + * + * \param handle a valid shared object handle returned by SDL_LoadObject() + * \param name the name of the function to look up + * \returns a pointer to the function or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadObject + * \sa SDL_UnloadObject + */ +extern DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, + const char *name); + +/** + * Unload a shared object from memory. + * + * \param handle a valid shared object handle returned by SDL_LoadObject() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadFunction + * \sa SDL_LoadObject + */ +extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_loadso_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_locale.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_locale.h new file mode 100644 index 00000000000..7d7a6ab4188 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_locale.h @@ -0,0 +1,103 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_locale.h + * + * Include file for SDL locale services + */ + +#ifndef _SDL_locale_h +#define _SDL_locale_h + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +extern "C" { +/* *INDENT-ON* */ +#endif + + +typedef struct SDL_Locale +{ + const char *language; /**< A language name, like "en" for English. */ + const char *country; /**< A country, like "US" for America. Can be NULL. */ +} SDL_Locale; + +/** + * Report the user's preferred locale. + * + * This returns an array of SDL_Locale structs, the final item zeroed out. + * When the caller is done with this array, it should call SDL_free() on the + * returned value; all the memory involved is allocated in a single block, so + * a single SDL_free() will suffice. + * + * Returned language strings are in the format xx, where 'xx' is an ISO-639 + * language specifier (such as "en" for English, "de" for German, etc). + * Country strings are in the format YY, where "YY" is an ISO-3166 country + * code (such as "US" for the United States, "CA" for Canada, etc). Country + * might be NULL if there's no specific guidance on them (so you might get { + * "en", "US" } for American English, but { "en", NULL } means "English + * language, generically"). Language strings are never NULL, except to + * terminate the array. + * + * Please note that not all of these strings are 2 characters; some are three + * or more. + * + * The returned list of locales are in the order of the user's preference. For + * example, a German citizen that is fluent in US English and knows enough + * Japanese to navigate around Tokyo might have a list like: { "de", "en_US", + * "jp", NULL }. Someone from England might prefer British English (where + * "color" is spelled "colour", etc), but will settle for anything like it: { + * "en_GB", "en", NULL }. + * + * This function returns NULL on error, including when the platform does not + * supply this information at all. + * + * This might be a "slow" call that has to query the operating system. It's + * best to ask for this once and save the results. However, this list can + * change, usually because the user has changed a system preference outside of + * your program; SDL will send an SDL_LOCALECHANGED event in this case, if + * possible, and you can call this function again to get an updated copy of + * preferred locales. + * + * \return array of locales, terminated with a locale with a NULL language + * field. Will return NULL on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_Locale * SDLCALL SDL_GetPreferredLocales(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +} +/* *INDENT-ON* */ +#endif +#include + +#endif /* _SDL_locale_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_log.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_log.h new file mode 100644 index 00000000000..312a596f1b9 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_log.h @@ -0,0 +1,404 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_log.h + * + * Simple log messages with categories and priorities. + * + * By default logs are quiet, but if you're debugging SDL you might want: + * + * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); + * + * Here's where the messages go on different platforms: + * Windows: debug output stream + * Android: log output + * Others: standard error output (stderr) + */ + +#ifndef SDL_log_h_ +#define SDL_log_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * \brief The maximum size of a log message + * + * Messages longer than the maximum size will be truncated + */ +#define SDL_MAX_LOG_MESSAGE 4096 + +/** + * \brief The predefined log categories + * + * By default the application category is enabled at the INFO level, + * the assert category is enabled at the WARN level, test is enabled + * at the VERBOSE level and all other categories are enabled at the + * CRITICAL level. + */ +typedef enum +{ + SDL_LOG_CATEGORY_APPLICATION, + SDL_LOG_CATEGORY_ERROR, + SDL_LOG_CATEGORY_ASSERT, + SDL_LOG_CATEGORY_SYSTEM, + SDL_LOG_CATEGORY_AUDIO, + SDL_LOG_CATEGORY_VIDEO, + SDL_LOG_CATEGORY_RENDER, + SDL_LOG_CATEGORY_INPUT, + SDL_LOG_CATEGORY_TEST, + + /* Reserved for future SDL library use */ + SDL_LOG_CATEGORY_RESERVED1, + SDL_LOG_CATEGORY_RESERVED2, + SDL_LOG_CATEGORY_RESERVED3, + SDL_LOG_CATEGORY_RESERVED4, + SDL_LOG_CATEGORY_RESERVED5, + SDL_LOG_CATEGORY_RESERVED6, + SDL_LOG_CATEGORY_RESERVED7, + SDL_LOG_CATEGORY_RESERVED8, + SDL_LOG_CATEGORY_RESERVED9, + SDL_LOG_CATEGORY_RESERVED10, + + /* Beyond this point is reserved for application use, e.g. + enum { + MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM, + MYAPP_CATEGORY_AWESOME2, + MYAPP_CATEGORY_AWESOME3, + ... + }; + */ + SDL_LOG_CATEGORY_CUSTOM +} SDL_LogCategory; + +/** + * \brief The predefined log priorities + */ +typedef enum +{ + SDL_LOG_PRIORITY_VERBOSE = 1, + SDL_LOG_PRIORITY_DEBUG, + SDL_LOG_PRIORITY_INFO, + SDL_LOG_PRIORITY_WARN, + SDL_LOG_PRIORITY_ERROR, + SDL_LOG_PRIORITY_CRITICAL, + SDL_NUM_LOG_PRIORITIES +} SDL_LogPriority; + + +/** + * Set the priority of all log categories. + * + * \param priority the SDL_LogPriority to assign + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetPriority + */ +extern DECLSPEC void SDLCALL SDL_LogSetAllPriority(SDL_LogPriority priority); + +/** + * Set the priority of a particular log category. + * + * \param category the category to assign a priority to + * \param priority the SDL_LogPriority to assign + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogGetPriority + * \sa SDL_LogSetAllPriority + */ +extern DECLSPEC void SDLCALL SDL_LogSetPriority(int category, + SDL_LogPriority priority); + +/** + * Get the priority of a particular log category. + * + * \param category the category to query + * \returns the SDL_LogPriority for the requested category + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetPriority + */ +extern DECLSPEC SDL_LogPriority SDLCALL SDL_LogGetPriority(int category); + +/** + * Reset all priorities to default. + * + * This is called by SDL_Quit(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetAllPriority + * \sa SDL_LogSetPriority + */ +extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void); + +/** + * Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO. + * + * = * \param fmt a printf() style message format string + * + * \param ... additional parameters matching % tokens in the `fmt` string, if + * any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); + +/** + * Log a message with SDL_LOG_PRIORITY_VERBOSE. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_DEBUG. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_INFO. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_WARN. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + */ +extern DECLSPEC void SDLCALL SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_ERROR. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_CRITICAL. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with the specified category and priority. + * + * \param category the category of the message + * \param priority the priority of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogMessage(int category, + SDL_LogPriority priority, + SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3); + +/** + * Log a message with the specified category and priority. + * + * \param category the category of the message + * \param priority the priority of the message + * \param fmt a printf() style message format string + * \param ap a variable argument list + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogMessageV(int category, + SDL_LogPriority priority, + const char *fmt, va_list ap); + +/** + * The prototype for the log output callback function. + * + * This function is called by SDL when there is new text to be logged. + * + * \param userdata what was passed as `userdata` to SDL_LogSetOutputFunction() + * \param category the category of the message + * \param priority the priority of the message + * \param message the message being output + */ +typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message); + +/** + * Get the current log output function. + * + * \param callback an SDL_LogOutputFunction filled in with the current log + * callback + * \param userdata a pointer filled in with the pointer that is passed to + * `callback` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetOutputFunction + */ +extern DECLSPEC void SDLCALL SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata); + +/** + * Replace the default log output function with one of your own. + * + * \param callback an SDL_LogOutputFunction to call instead of the default + * \param userdata a pointer that is passed to `callback` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogGetOutputFunction + */ +extern DECLSPEC void SDLCALL SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_log_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_main.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_main.h new file mode 100644 index 00000000000..233bb176e0c --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_main.h @@ -0,0 +1,235 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_main_h_ +#define SDL_main_h_ + +#include + +/** + * \file SDL_main.h + * + * Redefine main() on some platforms so that it is called by SDL. + */ + +#ifndef SDL_MAIN_HANDLED +#if defined(__WIN32__) +/* On Windows SDL provides WinMain(), which parses the command line and passes + the arguments to your main function. + + If you provide your own WinMain(), you may define SDL_MAIN_HANDLED + */ +#define SDL_MAIN_AVAILABLE + +#elif defined(__WINRT__) +/* On WinRT, SDL provides a main function that initializes CoreApplication, + creating an instance of IFrameworkView in the process. + + Please note that #include'ing SDL_main.h is not enough to get a main() + function working. In non-XAML apps, the file, + src/main/winrt/SDL_WinRT_main_NonXAML.cpp, or a copy of it, must be compiled + into the app itself. In XAML apps, the function, SDL_WinRTRunApp must be + called, with a pointer to the Direct3D-hosted XAML control passed in. +*/ +#define SDL_MAIN_NEEDED + +#elif defined(__IPHONEOS__) +/* On iOS SDL provides a main function that creates an application delegate + and starts the iOS application run loop. + + If you link with SDL dynamically on iOS, the main function can't be in a + shared library, so you need to link with libSDLmain.a, which includes a + stub main function that calls into the shared library to start execution. + + See src/video/uikit/SDL_uikitappdelegate.m for more details. + */ +#define SDL_MAIN_NEEDED + +#elif defined(__ANDROID__) +/* On Android SDL provides a Java class in SDLActivity.java that is the + main activity entry point. + + See docs/README-android.md for more details on extending that class. + */ +#define SDL_MAIN_NEEDED + +/* We need to export SDL_main so it can be launched from Java */ +#define SDLMAIN_DECLSPEC DECLSPEC + +#elif defined(__NACL__) +/* On NACL we use ppapi_simple to set up the application helper code, + then wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before + starting the user main function. + All user code is run in a separate thread by ppapi_simple, thus + allowing for blocking io to take place via nacl_io +*/ +#define SDL_MAIN_NEEDED + +#elif defined(__PSP__) +/* On PSP SDL provides a main function that sets the module info, + activates the GPU and starts the thread required to be able to exit + the software. + + If you provide this yourself, you may define SDL_MAIN_HANDLED + */ +#define SDL_MAIN_AVAILABLE + +#endif +#endif /* SDL_MAIN_HANDLED */ + +#ifndef SDLMAIN_DECLSPEC +#define SDLMAIN_DECLSPEC +#endif + +/** + * \file SDL_main.h + * + * The application's main() function must be called with C linkage, + * and should be declared like this: + * \code + * #ifdef __cplusplus + * extern "C" + * #endif + * int main(int argc, char *argv[]) + * { + * } + * \endcode + */ + +#if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) +#define main SDL_main +#endif + +#include +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The prototype for the application's main() function + */ +typedef int (*SDL_main_func)(int argc, char *argv[]); +extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]); + + +/** + * Circumvent failure of SDL_Init() when not using SDL_main() as an entry + * point. + * + * This function is defined in SDL_main.h, along with the preprocessor rule to + * redefine main() as SDL_main(). Thus to ensure that your main() function + * will not be changed it is necessary to define SDL_MAIN_HANDLED before + * including SDL.h. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + */ +extern DECLSPEC void SDLCALL SDL_SetMainReady(void); + +#ifdef __WIN32__ + +/** + * Register a win32 window class for SDL's use. + * + * This can be called to set the application window class at startup. It is + * safe to call this multiple times, as long as every call is eventually + * paired with a call to SDL_UnregisterApp, but a second registration attempt + * while a previous registration is still active will be ignored, other than + * to increment a counter. + * + * Most applications do not need to, and should not, call this directly; SDL + * will call it when initializing the video subsystem. + * + * \param name the window class name, in UTF-8 encoding. If NULL, SDL + * currently uses "SDL_app" but this isn't guaranteed. + * \param style the value to use in WNDCLASSEX::style. If `name` is NULL, SDL + * currently uses `(CS_BYTEALIGNCLIENT | CS_OWNDC)` regardless of + * what is specified here. + * \param hInst the HINSTANCE to use in WNDCLASSEX::hInstance. If zero, SDL + * will use `GetModuleHandle(NULL)` instead. + * \returns 0 on success, -1 on error. SDL_GetError() may have details. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC int SDLCALL SDL_RegisterApp(const char *name, Uint32 style, void *hInst); + +/** + * Deregister the win32 window class from an SDL_RegisterApp call. + * + * This can be called to undo the effects of SDL_RegisterApp. + * + * Most applications do not need to, and should not, call this directly; SDL + * will call it when deinitializing the video subsystem. + * + * It is safe to call this multiple times, as long as every call is eventually + * paired with a prior call to SDL_RegisterApp. The window class will only be + * deregistered when the registration counter in SDL_RegisterApp decrements to + * zero through calls to this function. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); + +#endif /* __WIN32__ */ + + +#ifdef __WINRT__ + +/** + * Initialize and launch an SDL/WinRT application. + * + * \param mainFunction the SDL app's C-style main(), an SDL_main_func + * \param reserved reserved for future use; should be NULL + * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve + * more information on the failure. + * + * \since This function is available since SDL 2.0.3. + */ +extern DECLSPEC int SDLCALL SDL_WinRTRunApp(SDL_main_func mainFunction, void * reserved); + +#endif /* __WINRT__ */ + +#if defined(__IPHONEOS__) + +/** + * Initializes and launches an SDL application. + * + * \param argc The argc parameter from the application's main() function + * \param argv The argv parameter from the application's main() function + * \param mainFunction The SDL app's C-style main(), an SDL_main_func + * \return the return value from mainFunction + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_UIKitRunApp(int argc, char *argv[], SDL_main_func mainFunction); + +#endif /* __IPHONEOS__ */ + + +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_main_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_messagebox.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_messagebox.h new file mode 100644 index 00000000000..149c35cfefe --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_messagebox.h @@ -0,0 +1,193 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_messagebox_h_ +#define SDL_messagebox_h_ + +#include +#include /* For SDL_Window */ + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * SDL_MessageBox flags. If supported will display warning icon, etc. + */ +typedef enum +{ + SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */ + SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */ + SDL_MESSAGEBOX_INFORMATION = 0x00000040, /**< informational dialog */ + SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT = 0x00000080, /**< buttons placed left to right */ + SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT = 0x00000100 /**< buttons placed right to left */ +} SDL_MessageBoxFlags; + +/** + * Flags for SDL_MessageBoxButtonData. + */ +typedef enum +{ + SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001, /**< Marks the default button when return is hit */ + SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002 /**< Marks the default button when escape is hit */ +} SDL_MessageBoxButtonFlags; + +/** + * Individual button data. + */ +typedef struct +{ + Uint32 flags; /**< ::SDL_MessageBoxButtonFlags */ + int buttonid; /**< User defined button id (value returned via SDL_ShowMessageBox) */ + const char * text; /**< The UTF-8 button text */ +} SDL_MessageBoxButtonData; + +/** + * RGB value used in a message box color scheme + */ +typedef struct +{ + Uint8 r, g, b; +} SDL_MessageBoxColor; + +typedef enum +{ + SDL_MESSAGEBOX_COLOR_BACKGROUND, + SDL_MESSAGEBOX_COLOR_TEXT, + SDL_MESSAGEBOX_COLOR_BUTTON_BORDER, + SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND, + SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED, + SDL_MESSAGEBOX_COLOR_MAX +} SDL_MessageBoxColorType; + +/** + * A set of colors to use for message box dialogs + */ +typedef struct +{ + SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX]; +} SDL_MessageBoxColorScheme; + +/** + * MessageBox structure containing title, text, window, etc. + */ +typedef struct +{ + Uint32 flags; /**< ::SDL_MessageBoxFlags */ + SDL_Window *window; /**< Parent window, can be NULL */ + const char *title; /**< UTF-8 title */ + const char *message; /**< UTF-8 message text */ + + int numbuttons; + const SDL_MessageBoxButtonData *buttons; + + const SDL_MessageBoxColorScheme *colorScheme; /**< ::SDL_MessageBoxColorScheme, can be NULL to use system settings */ +} SDL_MessageBoxData; + +/** + * Create a modal message box. + * + * If your needs aren't complex, it might be easier to use + * SDL_ShowSimpleMessageBox. + * + * This function should be called on the thread that created the parent + * window, or on the main thread if the messagebox has no parent. It will + * block execution of that thread until the user clicks a button or closes the + * messagebox. + * + * This function may be called at any time, even before SDL_Init(). This makes + * it useful for reporting errors like a failure to create a renderer or + * OpenGL context. + * + * On X11, SDL rolls its own dialog box with X11 primitives instead of a + * formal toolkit like GTK+ or Qt. + * + * Note that if SDL_Init() would fail because there isn't any available video + * target, this function is likely to fail for the same reasons. If this is a + * concern, check the return value from this function and fall back to writing + * to stderr if you can. + * + * \param messageboxdata the SDL_MessageBoxData structure with title, text and + * other options + * \param buttonid the pointer to which user id of hit button should be copied + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ShowSimpleMessageBox + */ +extern DECLSPEC int SDLCALL SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); + +/** + * Display a simple modal message box. + * + * If your needs aren't complex, this function is preferred over + * SDL_ShowMessageBox. + * + * `flags` may be any of the following: + * + * - `SDL_MESSAGEBOX_ERROR`: error dialog + * - `SDL_MESSAGEBOX_WARNING`: warning dialog + * - `SDL_MESSAGEBOX_INFORMATION`: informational dialog + * + * This function should be called on the thread that created the parent + * window, or on the main thread if the messagebox has no parent. It will + * block execution of that thread until the user clicks a button or closes the + * messagebox. + * + * This function may be called at any time, even before SDL_Init(). This makes + * it useful for reporting errors like a failure to create a renderer or + * OpenGL context. + * + * On X11, SDL rolls its own dialog box with X11 primitives instead of a + * formal toolkit like GTK+ or Qt. + * + * Note that if SDL_Init() would fail because there isn't any available video + * target, this function is likely to fail for the same reasons. If this is a + * concern, check the return value from this function and fall back to writing + * to stderr if you can. + * + * \param flags an SDL_MessageBoxFlags value + * \param title UTF-8 title text + * \param message UTF-8 message text + * \param window the parent window, or NULL for no parent + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ShowMessageBox + */ +extern DECLSPEC int SDLCALL SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_messagebox_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_metal.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_metal.h new file mode 100644 index 00000000000..bd3091bdfeb --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_metal.h @@ -0,0 +1,113 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_metal.h + * + * Header file for functions to creating Metal layers and views on SDL windows. + */ + +#ifndef SDL_metal_h_ +#define SDL_metal_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS). + * + * \note This can be cast directly to an NSView or UIView. + */ +typedef void *SDL_MetalView; + +/** + * \name Metal support functions + */ +/* @{ */ + +/** + * Create a CAMetalLayer-backed NSView/UIView and attach it to the specified + * window. + * + * On macOS, this does *not* associate a MTLDevice with the CAMetalLayer on + * its own. It is up to user code to do that. + * + * The returned handle can be casted directly to a NSView or UIView. To access + * the backing CAMetalLayer, call SDL_Metal_GetLayer(). + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_Metal_DestroyView + * \sa SDL_Metal_GetLayer + */ +extern DECLSPEC SDL_MetalView SDLCALL SDL_Metal_CreateView(SDL_Window * window); + +/** + * Destroy an existing SDL_MetalView object. + * + * This should be called before SDL_DestroyWindow, if SDL_Metal_CreateView was + * called after SDL_CreateWindow. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_Metal_CreateView + */ +extern DECLSPEC void SDLCALL SDL_Metal_DestroyView(SDL_MetalView view); + +/** + * Get a pointer to the backing CAMetalLayer for the given view. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_MetalCreateView + */ +extern DECLSPEC void *SDLCALL SDL_Metal_GetLayer(SDL_MetalView view); + +/** + * Get the size of a window's underlying drawable in pixels (for use with + * setting viewport, scissor & etc). + * + * \param window SDL_Window from which the drawable size should be queried + * \param w Pointer to variable for storing the width in pixels, may be NULL + * \param h Pointer to variable for storing the height in pixels, may be NULL + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_GetWindowSize + * \sa SDL_CreateWindow + */ +extern DECLSPEC void SDLCALL SDL_Metal_GetDrawableSize(SDL_Window* window, int *w, + int *h); + +/* @} *//* Metal support functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_metal_h_ */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_misc.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_misc.h new file mode 100644 index 00000000000..8983ec05ad9 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_misc.h @@ -0,0 +1,79 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_misc.h + * + * \brief Include file for SDL API functions that don't fit elsewhere. + */ + +#ifndef SDL_misc_h_ +#define SDL_misc_h_ + +#include + +#include + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Open a URL/URI in the browser or other appropriate external application. + * + * Open a URL in a separate, system-provided application. How this works will + * vary wildly depending on the platform. This will likely launch what makes + * sense to handle a specific URL's protocol (a web browser for `http://`, + * etc), but it might also be able to launch file managers for directories and + * other things. + * + * What happens when you open a URL varies wildly as well: your game window + * may lose focus (and may or may not lose focus if your game was fullscreen + * or grabbing input at the time). On mobile devices, your app will likely + * move to the background or your process might be paused. Any given platform + * may or may not handle a given URL. + * + * If this is unimplemented (or simply unavailable) for a platform, this will + * fail with an error. A successful result does not mean the URL loaded, just + * that we launched _something_ to handle it (or at least believe we did). + * + * All this to say: this function can be useful, but you should definitely + * test it on every platform you target. + * + * \param url A valid URL/URI to open. Use `file:///full/path/to/file` for + * local files, if supported. + * \returns 0 on success, or -1 on error; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_OpenURL(const char *url); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_misc_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_mouse.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_mouse.h new file mode 100644 index 00000000000..0e359fec8a0 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_mouse.h @@ -0,0 +1,454 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_mouse.h + * + * Include file for SDL mouse event handling. + */ + +#ifndef SDL_mouse_h_ +#define SDL_mouse_h_ + +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct SDL_Cursor SDL_Cursor; /**< Implementation dependent */ + +/** + * \brief Cursor types for SDL_CreateSystemCursor(). + */ +typedef enum +{ + SDL_SYSTEM_CURSOR_ARROW, /**< Arrow */ + SDL_SYSTEM_CURSOR_IBEAM, /**< I-beam */ + SDL_SYSTEM_CURSOR_WAIT, /**< Wait */ + SDL_SYSTEM_CURSOR_CROSSHAIR, /**< Crosshair */ + SDL_SYSTEM_CURSOR_WAITARROW, /**< Small wait cursor (or Wait if not available) */ + SDL_SYSTEM_CURSOR_SIZENWSE, /**< Double arrow pointing northwest and southeast */ + SDL_SYSTEM_CURSOR_SIZENESW, /**< Double arrow pointing northeast and southwest */ + SDL_SYSTEM_CURSOR_SIZEWE, /**< Double arrow pointing west and east */ + SDL_SYSTEM_CURSOR_SIZENS, /**< Double arrow pointing north and south */ + SDL_SYSTEM_CURSOR_SIZEALL, /**< Four pointed arrow pointing north, south, east, and west */ + SDL_SYSTEM_CURSOR_NO, /**< Slashed circle or crossbones */ + SDL_SYSTEM_CURSOR_HAND, /**< Hand */ + SDL_NUM_SYSTEM_CURSORS +} SDL_SystemCursor; + +/** + * \brief Scroll direction types for the Scroll event + */ +typedef enum +{ + SDL_MOUSEWHEEL_NORMAL, /**< The scroll direction is normal */ + SDL_MOUSEWHEEL_FLIPPED /**< The scroll direction is flipped / natural */ +} SDL_MouseWheelDirection; + +/* Function prototypes */ + +/** + * Get the window which currently has mouse focus. + * + * \returns the window with mouse focus. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void); + +/** + * Retrieve the current state of the mouse. + * + * The current button state is returned as a button bitmask, which can be + * tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the + * left, 2 for middle, 3 for the right button), and `x` and `y` are set to the + * mouse cursor position relative to the focus window. You can pass NULL for + * either `x` or `y`. + * + * \param x the x coordinate of the mouse cursor position relative to the + * focus window + * \param y the y coordinate of the mouse cursor position relative to the + * focus window + * \returns a 32-bit button bitmask of the current button state. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetGlobalMouseState + * \sa SDL_GetRelativeMouseState + * \sa SDL_PumpEvents + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetMouseState(int *x, int *y); + +/** + * Get the current state of the mouse in relation to the desktop. + * + * This works similarly to SDL_GetMouseState(), but the coordinates will be + * reported relative to the top-left of the desktop. This can be useful if you + * need to track the mouse outside of a specific window and SDL_CaptureMouse() + * doesn't fit your needs. For example, it could be useful if you need to + * track the mouse while dragging a window, where coordinates relative to a + * window might not be in sync at all times. + * + * Note: SDL_GetMouseState() returns the mouse position as SDL understands it + * from the last pump of the event queue. This function, however, queries the + * OS for the current mouse position, and as such, might be a slightly less + * efficient function. Unless you know what you're doing and have a good + * reason to use this function, you probably want SDL_GetMouseState() instead. + * + * \param x filled in with the current X coord relative to the desktop; can be + * NULL + * \param y filled in with the current Y coord relative to the desktop; can be + * NULL + * \returns the current button state as a bitmask which can be tested using + * the SDL_BUTTON(X) macros. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_CaptureMouse + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetGlobalMouseState(int *x, int *y); + +/** + * Retrieve the relative state of the mouse. + * + * The current button state is returned as a button bitmask, which can be + * tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the + * left, 2 for middle, 3 for the right button), and `x` and `y` are set to the + * mouse deltas since the last call to SDL_GetRelativeMouseState() or since + * event initialization. You can pass NULL for either `x` or `y`. + * + * \param x a pointer filled with the last recorded x coordinate of the mouse + * \param y a pointer filled with the last recorded y coordinate of the mouse + * \returns a 32-bit button bitmask of the relative button state. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetMouseState + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); + +/** + * Move the mouse cursor to the given position within the window. + * + * This function generates a mouse motion event. + * + * Note that this function will appear to succeed, but not actually move the + * mouse when used over Microsoft Remote Desktop. + * + * \param window the window to move the mouse into, or NULL for the current + * mouse focus + * \param x the x coordinate within the window + * \param y the y coordinate within the window + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WarpMouseGlobal + */ +extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, + int x, int y); + +/** + * Move the mouse to the given position in global screen space. + * + * This function generates a mouse motion event. + * + * A failure of this function usually means that it is unsupported by a + * platform. + * + * Note that this function will appear to succeed, but not actually move the + * mouse when used over Microsoft Remote Desktop. + * + * \param x the x coordinate + * \param y the y coordinate + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_WarpMouseInWindow + */ +extern DECLSPEC int SDLCALL SDL_WarpMouseGlobal(int x, int y); + +/** + * Set relative mouse mode. + * + * While the mouse is in relative mode, the cursor is hidden, and the driver + * will try to report continuous motion in the current window. Only relative + * motion events will be delivered, the mouse position will not change. + * + * Note that this function will not be able to provide continuous relative + * motion when used over Microsoft Remote Desktop, instead motion is limited + * to the bounds of the screen. + * + * This function will flush any pending mouse motion. + * + * \param enabled SDL_TRUE to enable relative mode, SDL_FALSE to disable. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * If relative mode is not supported, this returns -1. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRelativeMouseMode + */ +extern DECLSPEC int SDLCALL SDL_SetRelativeMouseMode(SDL_bool enabled); + +/** + * Capture the mouse and to track input outside an SDL window. + * + * Capturing enables your app to obtain mouse events globally, instead of just + * within your window. Not all video targets support this function. When + * capturing is enabled, the current window will get all mouse events, but + * unlike relative mode, no change is made to the cursor and it is not + * restrained to your window. + * + * This function may also deny mouse input to other windows--both those in + * your application and others on the system--so you should use this function + * sparingly, and in small bursts. For example, you might want to track the + * mouse while the user is dragging something, until the user releases a mouse + * button. It is not recommended that you capture the mouse for long periods + * of time, such as the entire time your app is running. For that, you should + * probably use SDL_SetRelativeMouseMode() or SDL_SetWindowGrab(), depending + * on your goals. + * + * While captured, mouse events still report coordinates relative to the + * current (foreground) window, but those coordinates may be outside the + * bounds of the window (including negative values). Capturing is only allowed + * for the foreground window. If the window loses focus while capturing, the + * capture will be disabled automatically. + * + * While capturing is enabled, the current window will have the + * `SDL_WINDOW_MOUSE_CAPTURE` flag set. + * + * \param enabled SDL_TRUE to enable capturing, SDL_FALSE to disable. + * \returns 0 on success or -1 if not supported; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetGlobalMouseState + */ +extern DECLSPEC int SDLCALL SDL_CaptureMouse(SDL_bool enabled); + +/** + * Query whether relative mouse mode is enabled. + * + * \returns SDL_TRUE if relative mode is enabled or SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRelativeMouseMode + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetRelativeMouseMode(void); + +/** + * Create a cursor using the specified bitmap data and mask (in MSB format). + * + * `mask` has to be in MSB (Most Significant Bit) format. + * + * The cursor width (`w`) must be a multiple of 8 bits. + * + * The cursor is created in black and white according to the following: + * + * - data=0, mask=1: white + * - data=1, mask=1: black + * - data=0, mask=0: transparent + * - data=1, mask=0: inverted color if possible, black if not. + * + * Cursors created with this function must be freed with SDL_FreeCursor(). + * + * If you want to have a color cursor, or create your cursor from an + * SDL_Surface, you should use SDL_CreateColorCursor(). Alternately, you can + * hide the cursor and draw your own as part of your game's rendering, but it + * will be bound to the framerate. + * + * Also, since SDL 2.0.0, SDL_CreateSystemCursor() is available, which + * provides twelve readily available system cursors to pick from. + * + * \param data the color value for each pixel of the cursor + * \param mask the mask value for each pixel of the cursor + * \param w the width of the cursor + * \param h the height of the cursor + * \param hot_x the X-axis location of the upper left corner of the cursor + * relative to the actual mouse position + * \param hot_y the Y-axis location of the upper left corner of the cursor + * relative to the actual mouse position + * \returns a new cursor with the specified parameters on success or NULL on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeCursor + * \sa SDL_SetCursor + * \sa SDL_ShowCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateCursor(const Uint8 * data, + const Uint8 * mask, + int w, int h, int hot_x, + int hot_y); + +/** + * Create a color cursor. + * + * \param surface an SDL_Surface structure representing the cursor image + * \param hot_x the x position of the cursor hot spot + * \param hot_y the y position of the cursor hot spot + * \returns the new cursor on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateCursor + * \sa SDL_FreeCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateColorCursor(SDL_Surface *surface, + int hot_x, + int hot_y); + +/** + * Create a system cursor. + * + * \param id an SDL_SystemCursor enum value + * \returns a cursor on success or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateSystemCursor(SDL_SystemCursor id); + +/** + * Set the active cursor. + * + * This function sets the currently active cursor to the specified one. If the + * cursor is currently visible, the change will be immediately represented on + * the display. SDL_SetCursor(NULL) can be used to force cursor redraw, if + * this is desired for any reason. + * + * \param cursor a cursor to make active + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateCursor + * \sa SDL_GetCursor + * \sa SDL_ShowCursor + */ +extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor * cursor); + +/** + * Get the active cursor. + * + * This function returns a pointer to the current cursor which is owned by the + * library. It is not necessary to free the cursor with SDL_FreeCursor(). + * + * \returns the active cursor or NULL if there is no mouse. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetCursor(void); + +/** + * Get the default cursor. + * + * \returns the default cursor on success or NULL on failure. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSystemCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetDefaultCursor(void); + +/** + * Free a previously-created cursor. + * + * Use this function to free cursor resources created with SDL_CreateCursor(), + * SDL_CreateColorCursor() or SDL_CreateSystemCursor(). + * + * \param cursor the cursor to free + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateColorCursor + * \sa SDL_CreateCursor + * \sa SDL_CreateSystemCursor + */ +extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor * cursor); + +/** + * Toggle whether or not the cursor is shown. + * + * The cursor starts off displayed but can be turned off. Passing `SDL_ENABLE` + * displays the cursor and passing `SDL_DISABLE` hides it. + * + * The current state of the mouse cursor can be queried by passing + * `SDL_QUERY`; either `SDL_DISABLE` or `SDL_ENABLE` will be returned. + * + * \param toggle `SDL_ENABLE` to show the cursor, `SDL_DISABLE` to hide it, + * `SDL_QUERY` to query the current state without changing it. + * \returns `SDL_ENABLE` if the cursor is shown, or `SDL_DISABLE` if the + * cursor is hidden, or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateCursor + * \sa SDL_SetCursor + */ +extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); + +/** + * Used as a mask when testing buttons in buttonstate. + * + * - Button 1: Left mouse button + * - Button 2: Middle mouse button + * - Button 3: Right mouse button + */ +#define SDL_BUTTON(X) (1 << ((X)-1)) +#define SDL_BUTTON_LEFT 1 +#define SDL_BUTTON_MIDDLE 2 +#define SDL_BUTTON_RIGHT 3 +#define SDL_BUTTON_X1 4 +#define SDL_BUTTON_X2 5 +#define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) +#define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) +#define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) +#define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) +#define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_mouse_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_mutex.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_mutex.h new file mode 100644 index 00000000000..10038f1b70c --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_mutex.h @@ -0,0 +1,471 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_mutex_h_ +#define SDL_mutex_h_ + +/** + * \file SDL_mutex.h + * + * Functions to provide thread synchronization primitives. + */ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Synchronization functions which can time out return this value + * if they time out. + */ +#define SDL_MUTEX_TIMEDOUT 1 + +/** + * This is the timeout value which corresponds to never time out. + */ +#define SDL_MUTEX_MAXWAIT (~(Uint32)0) + + +/** + * \name Mutex functions + */ +/* @{ */ + +/* The SDL mutex structure, defined in SDL_sysmutex.c */ +struct SDL_mutex; +typedef struct SDL_mutex SDL_mutex; + +/** + * Create a new mutex. + * + * All newly-created mutexes begin in the _unlocked_ state. + * + * Calls to SDL_LockMutex() will not return while the mutex is locked by + * another thread. See SDL_TryLockMutex() to attempt to lock without blocking. + * + * SDL mutexes are reentrant. + * + * \returns the initialized and unlocked mutex or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroyMutex + * \sa SDL_LockMutex + * \sa SDL_TryLockMutex + * \sa SDL_UnlockMutex + */ +extern DECLSPEC SDL_mutex *SDLCALL SDL_CreateMutex(void); + +/** + * Lock the mutex. + * + * This will block until the mutex is available, which is to say it is in the + * unlocked state and the OS has chosen the caller as the next thread to lock + * it. Of all threads waiting to lock the mutex, only one may do so at a time. + * + * It is legal for the owning thread to lock an already-locked mutex. It must + * unlock it the same number of times before it is actually made available for + * other threads in the system (this is known as a "recursive mutex"). + * + * \param mutex the mutex to lock + * \return 0, or -1 on error. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_LockMutex(SDL_mutex * mutex); +#define SDL_mutexP(m) SDL_LockMutex(m) + +/** + * Try to lock a mutex without blocking. + * + * This works just like SDL_LockMutex(), but if the mutex is not available, + * this function returns `SDL_MUTEX_TIMEOUT` immediately. + * + * This technique is useful if you need exclusive access to a resource but + * don't want to wait for it, and will return to it to try again later. + * + * \param mutex the mutex to try to lock + * \returns 0, `SDL_MUTEX_TIMEDOUT`, or -1 on error; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateMutex + * \sa SDL_DestroyMutex + * \sa SDL_LockMutex + * \sa SDL_UnlockMutex + */ +extern DECLSPEC int SDLCALL SDL_TryLockMutex(SDL_mutex * mutex); + +/** + * Unlock the mutex. + * + * It is legal for the owning thread to lock an already-locked mutex. It must + * unlock it the same number of times before it is actually made available for + * other threads in the system (this is known as a "recursive mutex"). + * + * It is an error to unlock a mutex that has not been locked by the current + * thread, and doing so results in undefined behavior. + * + * It is also an error to unlock a mutex that isn't locked at all. + * + * \param mutex the mutex to unlock. + * \returns 0, or -1 on error. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_UnlockMutex(SDL_mutex * mutex); +#define SDL_mutexV(m) SDL_UnlockMutex(m) + +/** + * Destroy a mutex created with SDL_CreateMutex(). + * + * This function must be called on any mutex that is no longer needed. Failure + * to destroy a mutex will result in a system memory or resource leak. While + * it is safe to destroy a mutex that is _unlocked_, it is not safe to attempt + * to destroy a locked mutex, and may result in undefined behavior depending + * on the platform. + * + * \param mutex the mutex to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateMutex + * \sa SDL_LockMutex + * \sa SDL_TryLockMutex + * \sa SDL_UnlockMutex + */ +extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex * mutex); + +/* @} *//* Mutex functions */ + + +/** + * \name Semaphore functions + */ +/* @{ */ + +/* The SDL semaphore structure, defined in SDL_syssem.c */ +struct SDL_semaphore; +typedef struct SDL_semaphore SDL_sem; + +/** + * Create a semaphore. + * + * This function creates a new semaphore and initializes it with the value + * `initial_value`. Each wait operation on the semaphore will atomically + * decrement the semaphore value and potentially block if the semaphore value + * is 0. Each post operation will atomically increment the semaphore value and + * wake waiting threads and allow them to retry the wait operation. + * + * \param initial_value the starting value of the semaphore + * \returns a new semaphore or NULL on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC SDL_sem *SDLCALL SDL_CreateSemaphore(Uint32 initial_value); + +/** + * Destroy a semaphore. + * + * It is not safe to destroy a semaphore if there are threads currently + * waiting on it. + * + * \param sem the semaphore to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem * sem); + +/** + * Wait until a semaphore has a positive value and then decrements it. + * + * This function suspends the calling thread until either the semaphore + * pointed to by `sem` has a positive value or the call is interrupted by a + * signal or error. If the call is successful it will atomically decrement the + * semaphore value. + * + * This function is the equivalent of calling SDL_SemWaitTimeout() with a time + * length of `SDL_MUTEX_MAXWAIT`. + * + * \param sem the semaphore wait on + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem * sem); + +/** + * See if a semaphore has a positive value and decrement it if it does. + * + * This function checks to see if the semaphore pointed to by `sem` has a + * positive value and atomically decrements the semaphore value if it does. If + * the semaphore doesn't have a positive value, the function immediately + * returns SDL_MUTEX_TIMEDOUT. + * + * \param sem the semaphore to wait on + * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait would + * block, or a negative error code on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem * sem); + +/** + * Wait until a semaphore has a positive value and then decrements it. + * + * This function suspends the calling thread until either the semaphore + * pointed to by `sem` has a positive value, the call is interrupted by a + * signal or error, or the specified time has elapsed. If the call is + * successful it will atomically decrement the semaphore value. + * + * \param sem the semaphore to wait on + * \param ms the length of the timeout, in milliseconds + * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait does not + * succeed in the allotted time, or a negative error code on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + */ +extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem * sem, Uint32 ms); + +/** + * Atomically increment a semaphore's value and wake waiting threads. + * + * \param sem the semaphore to increment + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem * sem); + +/** + * Get the current value of a semaphore. + * + * \param sem the semaphore to query + * \returns the current value of the semaphore. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + */ +extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem * sem); + +/* @} *//* Semaphore functions */ + + +/** + * \name Condition variable functions + */ +/* @{ */ + +/* The SDL condition variable structure, defined in SDL_syscond.c */ +struct SDL_cond; +typedef struct SDL_cond SDL_cond; + +/** + * Create a condition variable. + * + * \returns a new condition variable or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_DestroyCond + */ +extern DECLSPEC SDL_cond *SDLCALL SDL_CreateCond(void); + +/** + * Destroy a condition variable. + * + * \param cond the condition variable to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + */ +extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond * cond); + +/** + * Restart one of the threads that are waiting on the condition variable. + * + * \param cond the condition variable to signal + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond * cond); + +/** + * Restart all threads that are waiting on the condition variable. + * + * \param cond the condition variable to signal + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond * cond); + +/** + * Wait until a condition variable is signaled. + * + * This function unlocks the specified `mutex` and waits for another thread to + * call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable + * `cond`. Once the condition variable is signaled, the mutex is re-locked and + * the function returns. + * + * The mutex must be locked before calling this function. + * + * This function is the equivalent of calling SDL_CondWaitTimeout() with a + * time length of `SDL_MUTEX_MAXWAIT`. + * + * \param cond the condition variable to wait on + * \param mutex the mutex used to coordinate thread access + * \returns 0 when it is signaled or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex); + +/** + * Wait until a condition variable is signaled or a certain time has passed. + * + * This function unlocks the specified `mutex` and waits for another thread to + * call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable + * `cond`, or for the specified time to elapse. Once the condition variable is + * signaled or the time elapsed, the mutex is re-locked and the function + * returns. + * + * The mutex must be locked before calling this function. + * + * \param cond the condition variable to wait on + * \param mutex the mutex used to coordinate thread access + * \param ms the maximum time to wait, in milliseconds, or `SDL_MUTEX_MAXWAIT` + * to wait indefinitely + * \returns 0 if the condition variable is signaled, `SDL_MUTEX_TIMEDOUT` if + * the condition is not signaled in the allotted time, or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond * cond, + SDL_mutex * mutex, Uint32 ms); + +/* @} *//* Condition variable functions */ + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_mutex_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_name.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_name.h new file mode 100644 index 00000000000..6ff35b46efe --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_name.h @@ -0,0 +1,33 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDLname_h_ +#define SDLname_h_ + +#if defined(__STDC__) || defined(__cplusplus) +#define NeedFunctionPrototypes 1 +#endif + +#define SDL_NAME(X) SDL_##X + +#endif /* SDLname_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengl.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengl.h new file mode 100644 index 00000000000..e9bcde82761 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengl.h @@ -0,0 +1,2183 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_opengl.h + * + * This is a simple file to encapsulate the OpenGL API headers. + */ + +/** + * \def NO_SDL_GLEXT + * + * Define this if you have your own version of glext.h and want to disable the + * version included in SDL_opengl.h. + */ + +#ifndef SDL_opengl_h_ +#define SDL_opengl_h_ + +#include + +#ifndef __IPHONEOS__ /* No OpenGL on iOS. */ + +/* + * Mesa 3-D graphics library + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * Copyright (C) 2009 VMware, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef __gl_h_ +#define __gl_h_ + +#if defined(USE_MGL_NAMESPACE) +#include +#endif + + +/********************************************************************** + * Begin system-specific stuff. + */ + +#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) +#define __WIN32__ +#endif + +#if defined(__WIN32__) && !defined(__CYGWIN__) +# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ +# define GLAPI __declspec(dllexport) +# elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ +# define GLAPI __declspec(dllimport) +# else /* for use with static link lib build of Win32 edition only */ +# define GLAPI extern +# endif /* _STATIC_MESA support */ +# if defined(__MINGW32__) && defined(GL_NO_STDCALL) || defined(UNDER_CE) /* The generated DLLs by MingW with STDCALL are not compatible with the ones done by Microsoft's compilers */ +# define GLAPIENTRY +# else +# define GLAPIENTRY __stdcall +# endif +#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ +# define GLAPI extern +# define GLAPIENTRY __stdcall +#elif defined(__OS2__) || defined(__EMX__) /* native os/2 opengl */ +# define GLAPI extern +# define GLAPIENTRY _System +# define APIENTRY _System +# if defined(__GNUC__) && !defined(_System) +# define _System +# endif +#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) +# define GLAPI __attribute__((visibility("default"))) +# define GLAPIENTRY +#endif /* WIN32 && !CYGWIN */ + +/* + * WINDOWS: Include windows.h here to define APIENTRY. + * It is also useful when applications include this file by + * including only glut.h, since glut.h depends on windows.h. + * Applications needing to include windows.h with parms other + * than "WIN32_LEAN_AND_MEAN" may include windows.h before + * glut.h or gl.h. + */ +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX +#endif +#include +#endif + +#ifndef GLAPI +#define GLAPI extern +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY +#endif + +#ifndef APIENTRY +#define APIENTRY GLAPIENTRY +#endif + +/* "P" suffix to be used for a pointer to a function */ +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif + +#ifndef GLAPIENTRYP +#define GLAPIENTRYP GLAPIENTRY * +#endif + +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export on +#endif + +/* + * End system-specific stuff. + **********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + + + +#define GL_VERSION_1_1 1 +#define GL_VERSION_1_2 1 +#define GL_VERSION_1_3 1 +#define GL_ARB_imaging 1 + + +/* + * Datatypes + */ +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef signed char GLbyte; /* 1-byte signed */ +typedef short GLshort; /* 2-byte signed */ +typedef int GLint; /* 4-byte signed */ +typedef unsigned char GLubyte; /* 1-byte unsigned */ +typedef unsigned short GLushort; /* 2-byte unsigned */ +typedef unsigned int GLuint; /* 4-byte unsigned */ +typedef int GLsizei; /* 4-byte signed */ +typedef float GLfloat; /* single precision float */ +typedef float GLclampf; /* single precision float in [0,1] */ +typedef double GLdouble; /* double precision float */ +typedef double GLclampd; /* double precision float in [0,1] */ + + + +/* + * Constants + */ + +/* Boolean values */ +#define GL_FALSE 0 +#define GL_TRUE 1 + +/* Data types */ +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_2_BYTES 0x1407 +#define GL_3_BYTES 0x1408 +#define GL_4_BYTES 0x1409 +#define GL_DOUBLE 0x140A + +/* Primitives */ +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_QUADS 0x0007 +#define GL_QUAD_STRIP 0x0008 +#define GL_POLYGON 0x0009 + +/* Vertex Arrays */ +#define GL_VERTEX_ARRAY 0x8074 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_COLOR_ARRAY 0x8076 +#define GL_INDEX_ARRAY 0x8077 +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_EDGE_FLAG_ARRAY 0x8079 +#define GL_VERTEX_ARRAY_SIZE 0x807A +#define GL_VERTEX_ARRAY_TYPE 0x807B +#define GL_VERTEX_ARRAY_STRIDE 0x807C +#define GL_NORMAL_ARRAY_TYPE 0x807E +#define GL_NORMAL_ARRAY_STRIDE 0x807F +#define GL_COLOR_ARRAY_SIZE 0x8081 +#define GL_COLOR_ARRAY_TYPE 0x8082 +#define GL_COLOR_ARRAY_STRIDE 0x8083 +#define GL_INDEX_ARRAY_TYPE 0x8085 +#define GL_INDEX_ARRAY_STRIDE 0x8086 +#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A +#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C +#define GL_VERTEX_ARRAY_POINTER 0x808E +#define GL_NORMAL_ARRAY_POINTER 0x808F +#define GL_COLOR_ARRAY_POINTER 0x8090 +#define GL_INDEX_ARRAY_POINTER 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 +#define GL_V2F 0x2A20 +#define GL_V3F 0x2A21 +#define GL_C4UB_V2F 0x2A22 +#define GL_C4UB_V3F 0x2A23 +#define GL_C3F_V3F 0x2A24 +#define GL_N3F_V3F 0x2A25 +#define GL_C4F_N3F_V3F 0x2A26 +#define GL_T2F_V3F 0x2A27 +#define GL_T4F_V4F 0x2A28 +#define GL_T2F_C4UB_V3F 0x2A29 +#define GL_T2F_C3F_V3F 0x2A2A +#define GL_T2F_N3F_V3F 0x2A2B +#define GL_T2F_C4F_N3F_V3F 0x2A2C +#define GL_T4F_C4F_N3F_V4F 0x2A2D + +/* Matrix Mode */ +#define GL_MATRIX_MODE 0x0BA0 +#define GL_MODELVIEW 0x1700 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 + +/* Points */ +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_POINT_SIZE_RANGE 0x0B12 + +/* Lines */ +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_WIDTH_RANGE 0x0B22 + +/* Polygons */ +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_EDGE_FLAG 0x0B43 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_FILL 0x8037 + +/* Display Lists */ +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_INDEX 0x0B33 +#define GL_LIST_MODE 0x0B30 + +/* Depth buffer */ +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_BITS 0x0D56 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_COMPONENT 0x1902 + +/* Lighting */ +#define GL_LIGHTING 0x0B50 +#define GL_LIGHT0 0x4000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_QUADRATIC_ATTENUATION 0x1209 +#define GL_AMBIENT 0x1200 +#define GL_DIFFUSE 0x1201 +#define GL_SPECULAR 0x1202 +#define GL_SHININESS 0x1601 +#define GL_EMISSION 0x1600 +#define GL_POSITION 0x1203 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_COLOR_INDEXES 0x1603 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_SHADE_MODEL 0x0B54 +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_NORMALIZE 0x0BA1 + +/* User clipping planes */ +#define GL_CLIP_PLANE0 0x3000 +#define GL_CLIP_PLANE1 0x3001 +#define GL_CLIP_PLANE2 0x3002 +#define GL_CLIP_PLANE3 0x3003 +#define GL_CLIP_PLANE4 0x3004 +#define GL_CLIP_PLANE5 0x3005 + +/* Accumulation buffer */ +#define GL_ACCUM_RED_BITS 0x0D58 +#define GL_ACCUM_GREEN_BITS 0x0D59 +#define GL_ACCUM_BLUE_BITS 0x0D5A +#define GL_ACCUM_ALPHA_BITS 0x0D5B +#define GL_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_ACCUM 0x0100 +#define GL_ADD 0x0104 +#define GL_LOAD 0x0101 +#define GL_MULT 0x0103 +#define GL_RETURN 0x0102 + +/* Alpha testing */ +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_ALPHA_TEST_FUNC 0x0BC1 + +/* Blending */ +#define GL_BLEND 0x0BE2 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND_DST 0x0BE0 +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 + +/* Render Mode */ +#define GL_FEEDBACK 0x1C01 +#define GL_RENDER 0x1C00 +#define GL_SELECT 0x1C02 + +/* Feedback */ +#define GL_2D 0x0600 +#define GL_3D 0x0601 +#define GL_3D_COLOR 0x0602 +#define GL_3D_COLOR_TEXTURE 0x0603 +#define GL_4D_COLOR_TEXTURE 0x0604 +#define GL_POINT_TOKEN 0x0701 +#define GL_LINE_TOKEN 0x0702 +#define GL_LINE_RESET_TOKEN 0x0707 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 + +/* Selection */ +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 + +/* Fog */ +#define GL_FOG 0x0B60 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_COLOR 0x0B66 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_START 0x0B63 +#define GL_FOG_END 0x0B64 +#define GL_LINEAR 0x2601 +#define GL_EXP 0x0800 +#define GL_EXP2 0x0801 + +/* Logic Ops */ +#define GL_LOGIC_OP 0x0BF1 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_CLEAR 0x1500 +#define GL_SET 0x150F +#define GL_COPY 0x1503 +#define GL_COPY_INVERTED 0x150C +#define GL_NOOP 0x1505 +#define GL_INVERT 0x150A +#define GL_AND 0x1501 +#define GL_NAND 0x150E +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_XOR 0x1506 +#define GL_EQUIV 0x1509 +#define GL_AND_REVERSE 0x1502 +#define GL_AND_INVERTED 0x1504 +#define GL_OR_REVERSE 0x150B +#define GL_OR_INVERTED 0x150D + +/* Stencil */ +#define GL_STENCIL_BITS 0x0D57 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STENCIL_INDEX 0x1901 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 + +/* Buffers, Pixel Drawing/Reading */ +#define GL_NONE 0 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +/*GL_FRONT 0x0404 */ +/*GL_BACK 0x0405 */ +/*GL_FRONT_AND_BACK 0x0408 */ +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_COLOR_INDEX 0x1900 +#define GL_RED 0x1903 +#define GL_GREEN 0x1904 +#define GL_BLUE 0x1905 +#define GL_ALPHA 0x1906 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_ALPHA_BITS 0x0D55 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_INDEX_BITS 0x0D51 +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_AUX_BUFFERS 0x0C00 +#define GL_READ_BUFFER 0x0C02 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_BITMAP 0x1A00 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 +#define GL_DITHER 0x0BD0 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 + +/* Implementation limits */ +#define GL_MAX_LIST_NESTING 0x0B31 +#define GL_MAX_EVAL_ORDER 0x0D30 +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_CLIP_PLANES 0x0D32 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B + +/* Gets */ +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_MODE 0x0C30 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_RENDER_MODE 0x0C40 +#define GL_RGBA_MODE 0x0C31 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_VIEWPORT 0x0BA2 + +/* Evaluators */ +#define GL_AUTO_NORMAL 0x0D80 +#define GL_MAP1_COLOR_4 0x0D90 +#define GL_MAP1_INDEX 0x0D91 +#define GL_MAP1_NORMAL 0x0D92 +#define GL_MAP1_TEXTURE_COORD_1 0x0D93 +#define GL_MAP1_TEXTURE_COORD_2 0x0D94 +#define GL_MAP1_TEXTURE_COORD_3 0x0D95 +#define GL_MAP1_TEXTURE_COORD_4 0x0D96 +#define GL_MAP1_VERTEX_3 0x0D97 +#define GL_MAP1_VERTEX_4 0x0D98 +#define GL_MAP2_COLOR_4 0x0DB0 +#define GL_MAP2_INDEX 0x0DB1 +#define GL_MAP2_NORMAL 0x0DB2 +#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 +#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 +#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 +#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 +#define GL_MAP2_VERTEX_3 0x0DB7 +#define GL_MAP2_VERTEX_4 0x0DB8 +#define GL_MAP1_GRID_DOMAIN 0x0DD0 +#define GL_MAP1_GRID_SEGMENTS 0x0DD1 +#define GL_MAP2_GRID_DOMAIN 0x0DD2 +#define GL_MAP2_GRID_SEGMENTS 0x0DD3 +#define GL_COEFF 0x0A00 +#define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 + +/* Hints */ +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_FOG_HINT 0x0C54 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +/* Scissor box */ +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 + +/* Pixel Mode / Transfer */ +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_STENCIL 0x0D11 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_RED_SCALE 0x0D14 +#define GL_RED_BIAS 0x0D15 +#define GL_GREEN_SCALE 0x0D18 +#define GL_GREEN_BIAS 0x0D19 +#define GL_BLUE_SCALE 0x0D1A +#define GL_BLUE_BIAS 0x0D1B +#define GL_ALPHA_SCALE 0x0D1C +#define GL_ALPHA_BIAS 0x0D1D +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_BIAS 0x0D1F +#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 +#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 +#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 +#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 +#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 +#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 +#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 +#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 +#define GL_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#define GL_PIXEL_MAP_I_TO_R 0x0C72 +#define GL_PIXEL_MAP_I_TO_G 0x0C73 +#define GL_PIXEL_MAP_I_TO_B 0x0C74 +#define GL_PIXEL_MAP_I_TO_A 0x0C75 +#define GL_PIXEL_MAP_R_TO_R 0x0C76 +#define GL_PIXEL_MAP_G_TO_G 0x0C77 +#define GL_PIXEL_MAP_B_TO_B 0x0C78 +#define GL_PIXEL_MAP_A_TO_A 0x0C79 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 + +/* Texture mapping */ +#define GL_TEXTURE_ENV 0x2300 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_ENV_COLOR 0x2201 +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GEN_R 0x0C62 +#define GL_TEXTURE_GEN_Q 0x0C63 +#define GL_TEXTURE_GEN_MODE 0x2500 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_TEXTURE_COMPONENTS 0x1003 +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_OBJECT_PLANE 0x2501 +#define GL_EYE_LINEAR 0x2400 +#define GL_EYE_PLANE 0x2502 +#define GL_SPHERE_MAP 0x2402 +#define GL_DECAL 0x2101 +#define GL_MODULATE 0x2100 +#define GL_NEAREST 0x2600 +#define GL_REPEAT 0x2901 +#define GL_CLAMP 0x2900 +#define GL_S 0x2000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#define GL_Q 0x2003 + +/* Utility */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* Errors */ +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_OUT_OF_MEMORY 0x0505 + +/* glPush/PopAttrib bits */ +#define GL_CURRENT_BIT 0x00000001 +#define GL_POINT_BIT 0x00000002 +#define GL_LINE_BIT 0x00000004 +#define GL_POLYGON_BIT 0x00000008 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_FOG_BIT 0x00000080 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_ENABLE_BIT 0x00002000 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_HINT_BIT 0x00008000 +#define GL_EVAL_BIT 0x00010000 +#define GL_LIST_BIT 0x00020000 +#define GL_TEXTURE_BIT 0x00040000 +#define GL_SCISSOR_BIT 0x00080000 +#define GL_ALL_ATTRIB_BITS 0x000FFFFF + + +/* OpenGL 1.1 */ +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_ALPHA4 0x803B +#define GL_ALPHA8 0x803C +#define GL_ALPHA12 0x803D +#define GL_ALPHA16 0x803E +#define GL_LUMINANCE4 0x803F +#define GL_LUMINANCE8 0x8040 +#define GL_LUMINANCE12 0x8041 +#define GL_LUMINANCE16 0x8042 +#define GL_LUMINANCE4_ALPHA4 0x8043 +#define GL_LUMINANCE6_ALPHA2 0x8044 +#define GL_LUMINANCE8_ALPHA8 0x8045 +#define GL_LUMINANCE12_ALPHA4 0x8046 +#define GL_LUMINANCE12_ALPHA12 0x8047 +#define GL_LUMINANCE16_ALPHA16 0x8048 +#define GL_INTENSITY 0x8049 +#define GL_INTENSITY4 0x804A +#define GL_INTENSITY8 0x804B +#define GL_INTENSITY12 0x804C +#define GL_INTENSITY16 0x804D +#define GL_R3_G3_B2 0x2A10 +#define GL_RGB4 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB10 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGBA2 0x8055 +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGBA8 0x8058 +#define GL_RGB10_A2 0x8059 +#define GL_RGBA12 0x805A +#define GL_RGBA16 0x805B +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF +#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF + + + +/* + * Miscellaneous + */ + +GLAPI void GLAPIENTRY glClearIndex( GLfloat c ); + +GLAPI void GLAPIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); + +GLAPI void GLAPIENTRY glClear( GLbitfield mask ); + +GLAPI void GLAPIENTRY glIndexMask( GLuint mask ); + +GLAPI void GLAPIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); + +GLAPI void GLAPIENTRY glAlphaFunc( GLenum func, GLclampf ref ); + +GLAPI void GLAPIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); + +GLAPI void GLAPIENTRY glLogicOp( GLenum opcode ); + +GLAPI void GLAPIENTRY glCullFace( GLenum mode ); + +GLAPI void GLAPIENTRY glFrontFace( GLenum mode ); + +GLAPI void GLAPIENTRY glPointSize( GLfloat size ); + +GLAPI void GLAPIENTRY glLineWidth( GLfloat width ); + +GLAPI void GLAPIENTRY glLineStipple( GLint factor, GLushort pattern ); + +GLAPI void GLAPIENTRY glPolygonMode( GLenum face, GLenum mode ); + +GLAPI void GLAPIENTRY glPolygonOffset( GLfloat factor, GLfloat units ); + +GLAPI void GLAPIENTRY glPolygonStipple( const GLubyte *mask ); + +GLAPI void GLAPIENTRY glGetPolygonStipple( GLubyte *mask ); + +GLAPI void GLAPIENTRY glEdgeFlag( GLboolean flag ); + +GLAPI void GLAPIENTRY glEdgeFlagv( const GLboolean *flag ); + +GLAPI void GLAPIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); + +GLAPI void GLAPIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); + +GLAPI void GLAPIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); + +GLAPI void GLAPIENTRY glDrawBuffer( GLenum mode ); + +GLAPI void GLAPIENTRY glReadBuffer( GLenum mode ); + +GLAPI void GLAPIENTRY glEnable( GLenum cap ); + +GLAPI void GLAPIENTRY glDisable( GLenum cap ); + +GLAPI GLboolean GLAPIENTRY glIsEnabled( GLenum cap ); + + +GLAPI void GLAPIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ + +GLAPI void GLAPIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ + + +GLAPI void GLAPIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); + +GLAPI void GLAPIENTRY glGetDoublev( GLenum pname, GLdouble *params ); + +GLAPI void GLAPIENTRY glGetFloatv( GLenum pname, GLfloat *params ); + +GLAPI void GLAPIENTRY glGetIntegerv( GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glPushAttrib( GLbitfield mask ); + +GLAPI void GLAPIENTRY glPopAttrib( void ); + + +GLAPI void GLAPIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ + +GLAPI void GLAPIENTRY glPopClientAttrib( void ); /* 1.1 */ + + +GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode ); + +GLAPI GLenum GLAPIENTRY glGetError( void ); + +GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name ); + +GLAPI void GLAPIENTRY glFinish( void ); + +GLAPI void GLAPIENTRY glFlush( void ); + +GLAPI void GLAPIENTRY glHint( GLenum target, GLenum mode ); + + +/* + * Depth Buffer + */ + +GLAPI void GLAPIENTRY glClearDepth( GLclampd depth ); + +GLAPI void GLAPIENTRY glDepthFunc( GLenum func ); + +GLAPI void GLAPIENTRY glDepthMask( GLboolean flag ); + +GLAPI void GLAPIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); + + +/* + * Accumulation Buffer + */ + +GLAPI void GLAPIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); + +GLAPI void GLAPIENTRY glAccum( GLenum op, GLfloat value ); + + +/* + * Transformation + */ + +GLAPI void GLAPIENTRY glMatrixMode( GLenum mode ); + +GLAPI void GLAPIENTRY glOrtho( GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, + GLdouble near_val, GLdouble far_val ); + +GLAPI void GLAPIENTRY glFrustum( GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, + GLdouble near_val, GLdouble far_val ); + +GLAPI void GLAPIENTRY glViewport( GLint x, GLint y, + GLsizei width, GLsizei height ); + +GLAPI void GLAPIENTRY glPushMatrix( void ); + +GLAPI void GLAPIENTRY glPopMatrix( void ); + +GLAPI void GLAPIENTRY glLoadIdentity( void ); + +GLAPI void GLAPIENTRY glLoadMatrixd( const GLdouble *m ); +GLAPI void GLAPIENTRY glLoadMatrixf( const GLfloat *m ); + +GLAPI void GLAPIENTRY glMultMatrixd( const GLdouble *m ); +GLAPI void GLAPIENTRY glMultMatrixf( const GLfloat *m ); + +GLAPI void GLAPIENTRY glRotated( GLdouble angle, + GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glRotatef( GLfloat angle, + GLfloat x, GLfloat y, GLfloat z ); + +GLAPI void GLAPIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z ); + +GLAPI void GLAPIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); + + +/* + * Display Lists + */ + +GLAPI GLboolean GLAPIENTRY glIsList( GLuint list ); + +GLAPI void GLAPIENTRY glDeleteLists( GLuint list, GLsizei range ); + +GLAPI GLuint GLAPIENTRY glGenLists( GLsizei range ); + +GLAPI void GLAPIENTRY glNewList( GLuint list, GLenum mode ); + +GLAPI void GLAPIENTRY glEndList( void ); + +GLAPI void GLAPIENTRY glCallList( GLuint list ); + +GLAPI void GLAPIENTRY glCallLists( GLsizei n, GLenum type, + const GLvoid *lists ); + +GLAPI void GLAPIENTRY glListBase( GLuint base ); + + +/* + * Drawing Functions + */ + +GLAPI void GLAPIENTRY glBegin( GLenum mode ); + +GLAPI void GLAPIENTRY glEnd( void ); + + +GLAPI void GLAPIENTRY glVertex2d( GLdouble x, GLdouble y ); +GLAPI void GLAPIENTRY glVertex2f( GLfloat x, GLfloat y ); +GLAPI void GLAPIENTRY glVertex2i( GLint x, GLint y ); +GLAPI void GLAPIENTRY glVertex2s( GLshort x, GLshort y ); + +GLAPI void GLAPIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); +GLAPI void GLAPIENTRY glVertex3i( GLint x, GLint y, GLint z ); +GLAPI void GLAPIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); + +GLAPI void GLAPIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +GLAPI void GLAPIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +GLAPI void GLAPIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); +GLAPI void GLAPIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); + +GLAPI void GLAPIENTRY glVertex2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex2iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glVertex3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex3iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glVertex4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex4iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); +GLAPI void GLAPIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); +GLAPI void GLAPIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); +GLAPI void GLAPIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); +GLAPI void GLAPIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); + +GLAPI void GLAPIENTRY glNormal3bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glNormal3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glNormal3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glNormal3iv( const GLint *v ); +GLAPI void GLAPIENTRY glNormal3sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glIndexd( GLdouble c ); +GLAPI void GLAPIENTRY glIndexf( GLfloat c ); +GLAPI void GLAPIENTRY glIndexi( GLint c ); +GLAPI void GLAPIENTRY glIndexs( GLshort c ); +GLAPI void GLAPIENTRY glIndexub( GLubyte c ); /* 1.1 */ + +GLAPI void GLAPIENTRY glIndexdv( const GLdouble *c ); +GLAPI void GLAPIENTRY glIndexfv( const GLfloat *c ); +GLAPI void GLAPIENTRY glIndexiv( const GLint *c ); +GLAPI void GLAPIENTRY glIndexsv( const GLshort *c ); +GLAPI void GLAPIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ + +GLAPI void GLAPIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); +GLAPI void GLAPIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); +GLAPI void GLAPIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); +GLAPI void GLAPIENTRY glColor3i( GLint red, GLint green, GLint blue ); +GLAPI void GLAPIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); +GLAPI void GLAPIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); +GLAPI void GLAPIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); +GLAPI void GLAPIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); + +GLAPI void GLAPIENTRY glColor4b( GLbyte red, GLbyte green, + GLbyte blue, GLbyte alpha ); +GLAPI void GLAPIENTRY glColor4d( GLdouble red, GLdouble green, + GLdouble blue, GLdouble alpha ); +GLAPI void GLAPIENTRY glColor4f( GLfloat red, GLfloat green, + GLfloat blue, GLfloat alpha ); +GLAPI void GLAPIENTRY glColor4i( GLint red, GLint green, + GLint blue, GLint alpha ); +GLAPI void GLAPIENTRY glColor4s( GLshort red, GLshort green, + GLshort blue, GLshort alpha ); +GLAPI void GLAPIENTRY glColor4ub( GLubyte red, GLubyte green, + GLubyte blue, GLubyte alpha ); +GLAPI void GLAPIENTRY glColor4ui( GLuint red, GLuint green, + GLuint blue, GLuint alpha ); +GLAPI void GLAPIENTRY glColor4us( GLushort red, GLushort green, + GLushort blue, GLushort alpha ); + + +GLAPI void GLAPIENTRY glColor3bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glColor3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glColor3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glColor3iv( const GLint *v ); +GLAPI void GLAPIENTRY glColor3sv( const GLshort *v ); +GLAPI void GLAPIENTRY glColor3ubv( const GLubyte *v ); +GLAPI void GLAPIENTRY glColor3uiv( const GLuint *v ); +GLAPI void GLAPIENTRY glColor3usv( const GLushort *v ); + +GLAPI void GLAPIENTRY glColor4bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glColor4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glColor4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glColor4iv( const GLint *v ); +GLAPI void GLAPIENTRY glColor4sv( const GLshort *v ); +GLAPI void GLAPIENTRY glColor4ubv( const GLubyte *v ); +GLAPI void GLAPIENTRY glColor4uiv( const GLuint *v ); +GLAPI void GLAPIENTRY glColor4usv( const GLushort *v ); + + +GLAPI void GLAPIENTRY glTexCoord1d( GLdouble s ); +GLAPI void GLAPIENTRY glTexCoord1f( GLfloat s ); +GLAPI void GLAPIENTRY glTexCoord1i( GLint s ); +GLAPI void GLAPIENTRY glTexCoord1s( GLshort s ); + +GLAPI void GLAPIENTRY glTexCoord2d( GLdouble s, GLdouble t ); +GLAPI void GLAPIENTRY glTexCoord2f( GLfloat s, GLfloat t ); +GLAPI void GLAPIENTRY glTexCoord2i( GLint s, GLint t ); +GLAPI void GLAPIENTRY glTexCoord2s( GLshort s, GLshort t ); + +GLAPI void GLAPIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); +GLAPI void GLAPIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); +GLAPI void GLAPIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); +GLAPI void GLAPIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); + +GLAPI void GLAPIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); +GLAPI void GLAPIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); +GLAPI void GLAPIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); +GLAPI void GLAPIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); + +GLAPI void GLAPIENTRY glTexCoord1dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord1fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord1iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord1sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord2iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord3iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord4iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glRasterPos2d( GLdouble x, GLdouble y ); +GLAPI void GLAPIENTRY glRasterPos2f( GLfloat x, GLfloat y ); +GLAPI void GLAPIENTRY glRasterPos2i( GLint x, GLint y ); +GLAPI void GLAPIENTRY glRasterPos2s( GLshort x, GLshort y ); + +GLAPI void GLAPIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); +GLAPI void GLAPIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); +GLAPI void GLAPIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); + +GLAPI void GLAPIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +GLAPI void GLAPIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +GLAPI void GLAPIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); +GLAPI void GLAPIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); + +GLAPI void GLAPIENTRY glRasterPos2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos2iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glRasterPos3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos3iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glRasterPos4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos4iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); +GLAPI void GLAPIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); +GLAPI void GLAPIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); +GLAPI void GLAPIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); + + +GLAPI void GLAPIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); +GLAPI void GLAPIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); +GLAPI void GLAPIENTRY glRectiv( const GLint *v1, const GLint *v2 ); +GLAPI void GLAPIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); + + +/* + * Vertex Arrays (1.1) + */ + +GLAPI void GLAPIENTRY glVertexPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glNormalPointer( GLenum type, GLsizei stride, + const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glColorPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glIndexPointer( GLenum type, GLsizei stride, + const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params ); + +GLAPI void GLAPIENTRY glArrayElement( GLint i ); + +GLAPI void GLAPIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); + +GLAPI void GLAPIENTRY glDrawElements( GLenum mode, GLsizei count, + GLenum type, const GLvoid *indices ); + +GLAPI void GLAPIENTRY glInterleavedArrays( GLenum format, GLsizei stride, + const GLvoid *pointer ); + +/* + * Lighting + */ + +GLAPI void GLAPIENTRY glShadeModel( GLenum mode ); + +GLAPI void GLAPIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glLighti( GLenum light, GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glLightfv( GLenum light, GLenum pname, + const GLfloat *params ); +GLAPI void GLAPIENTRY glLightiv( GLenum light, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glGetLightfv( GLenum light, GLenum pname, + GLfloat *params ); +GLAPI void GLAPIENTRY glGetLightiv( GLenum light, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glLightModelf( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glLightModeli( GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glLightModeliv( GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); + +GLAPI void GLAPIENTRY glColorMaterial( GLenum face, GLenum mode ); + + +/* + * Raster functions + */ + +GLAPI void GLAPIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); + +GLAPI void GLAPIENTRY glPixelStoref( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glPixelStorei( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glPixelTransferf( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glPixelTransferi( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glPixelMapfv( GLenum map, GLsizei mapsize, + const GLfloat *values ); +GLAPI void GLAPIENTRY glPixelMapuiv( GLenum map, GLsizei mapsize, + const GLuint *values ); +GLAPI void GLAPIENTRY glPixelMapusv( GLenum map, GLsizei mapsize, + const GLushort *values ); + +GLAPI void GLAPIENTRY glGetPixelMapfv( GLenum map, GLfloat *values ); +GLAPI void GLAPIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); +GLAPI void GLAPIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); + +GLAPI void GLAPIENTRY glBitmap( GLsizei width, GLsizei height, + GLfloat xorig, GLfloat yorig, + GLfloat xmove, GLfloat ymove, + const GLubyte *bitmap ); + +GLAPI void GLAPIENTRY glReadPixels( GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + GLvoid *pixels ); + +GLAPI void GLAPIENTRY glDrawPixels( GLsizei width, GLsizei height, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glCopyPixels( GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum type ); + +/* + * Stenciling + */ + +GLAPI void GLAPIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask ); + +GLAPI void GLAPIENTRY glStencilMask( GLuint mask ); + +GLAPI void GLAPIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass ); + +GLAPI void GLAPIENTRY glClearStencil( GLint s ); + + + +/* + * Texture mapping + */ + +GLAPI void GLAPIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); +GLAPI void GLAPIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); +GLAPI void GLAPIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params ); +GLAPI void GLAPIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexParameterfv( GLenum target, GLenum pname, + const GLfloat *params ); +GLAPI void GLAPIENTRY glTexParameteriv( GLenum target, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexParameterfv( GLenum target, + GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexParameteriv( GLenum target, + GLenum pname, GLint *params ); + +GLAPI void GLAPIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, + GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, + GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexImage1D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLint border, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glTexImage2D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLint border, GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glGetTexImage( GLenum target, GLint level, + GLenum format, GLenum type, + GLvoid *pixels ); + + +/* 1.1 functions */ + +GLAPI void GLAPIENTRY glGenTextures( GLsizei n, GLuint *textures ); + +GLAPI void GLAPIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); + +GLAPI void GLAPIENTRY glBindTexture( GLenum target, GLuint texture ); + +GLAPI void GLAPIENTRY glPrioritizeTextures( GLsizei n, + const GLuint *textures, + const GLclampf *priorities ); + +GLAPI GLboolean GLAPIENTRY glAreTexturesResident( GLsizei n, + const GLuint *textures, + GLboolean *residences ); + +GLAPI GLboolean GLAPIENTRY glIsTexture( GLuint texture ); + + +GLAPI void GLAPIENTRY glTexSubImage1D( GLenum target, GLint level, + GLint xoffset, + GLsizei width, GLenum format, + GLenum type, const GLvoid *pixels ); + + +GLAPI void GLAPIENTRY glTexSubImage2D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + const GLvoid *pixels ); + + +GLAPI void GLAPIENTRY glCopyTexImage1D( GLenum target, GLint level, + GLenum internalformat, + GLint x, GLint y, + GLsizei width, GLint border ); + + +GLAPI void GLAPIENTRY glCopyTexImage2D( GLenum target, GLint level, + GLenum internalformat, + GLint x, GLint y, + GLsizei width, GLsizei height, + GLint border ); + + +GLAPI void GLAPIENTRY glCopyTexSubImage1D( GLenum target, GLint level, + GLint xoffset, GLint x, GLint y, + GLsizei width ); + + +GLAPI void GLAPIENTRY glCopyTexSubImage2D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint x, GLint y, + GLsizei width, GLsizei height ); + + +/* + * Evaluators + */ + +GLAPI void GLAPIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, + GLint stride, + GLint order, const GLdouble *points ); +GLAPI void GLAPIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, + GLint stride, + GLint order, const GLfloat *points ); + +GLAPI void GLAPIENTRY glMap2d( GLenum target, + GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, + GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, + const GLdouble *points ); +GLAPI void GLAPIENTRY glMap2f( GLenum target, + GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, + GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, + const GLfloat *points ); + +GLAPI void GLAPIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v ); +GLAPI void GLAPIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v ); +GLAPI void GLAPIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v ); + +GLAPI void GLAPIENTRY glEvalCoord1d( GLdouble u ); +GLAPI void GLAPIENTRY glEvalCoord1f( GLfloat u ); + +GLAPI void GLAPIENTRY glEvalCoord1dv( const GLdouble *u ); +GLAPI void GLAPIENTRY glEvalCoord1fv( const GLfloat *u ); + +GLAPI void GLAPIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); +GLAPI void GLAPIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); + +GLAPI void GLAPIENTRY glEvalCoord2dv( const GLdouble *u ); +GLAPI void GLAPIENTRY glEvalCoord2fv( const GLfloat *u ); + +GLAPI void GLAPIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 ); +GLAPI void GLAPIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 ); + +GLAPI void GLAPIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, + GLint vn, GLdouble v1, GLdouble v2 ); +GLAPI void GLAPIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, + GLint vn, GLfloat v1, GLfloat v2 ); + +GLAPI void GLAPIENTRY glEvalPoint1( GLint i ); + +GLAPI void GLAPIENTRY glEvalPoint2( GLint i, GLint j ); + +GLAPI void GLAPIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); + +GLAPI void GLAPIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); + + +/* + * Fog + */ + +GLAPI void GLAPIENTRY glFogf( GLenum pname, GLfloat param ); + +GLAPI void GLAPIENTRY glFogi( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glFogfv( GLenum pname, const GLfloat *params ); + +GLAPI void GLAPIENTRY glFogiv( GLenum pname, const GLint *params ); + + +/* + * Selection and Feedback + */ + +GLAPI void GLAPIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); + +GLAPI void GLAPIENTRY glPassThrough( GLfloat token ); + +GLAPI void GLAPIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); + +GLAPI void GLAPIENTRY glInitNames( void ); + +GLAPI void GLAPIENTRY glLoadName( GLuint name ); + +GLAPI void GLAPIENTRY glPushName( GLuint name ); + +GLAPI void GLAPIENTRY glPopName( void ); + + + +/* + * OpenGL 1.2 + */ + +#define GL_RESCALE_NORMAL 0x803A +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_TEXTURE_BINDING_3D 0x806A + +GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start, + GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); + +GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLsizei depth, GLint border, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, + GLenum format, + GLenum type, const GLvoid *pixels); + +GLAPI void GLAPIENTRY glCopyTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLint x, + GLint y, GLsizei width, + GLsizei height ); + +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + + +/* + * GL_ARB_imaging + */ + +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_BLEND_EQUATION 0x8009 +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_BLEND_COLOR 0x8005 + + +GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat, + GLsizei width, GLenum format, + GLenum type, const GLvoid *table ); + +GLAPI void GLAPIENTRY glColorSubTable( GLenum target, + GLsizei start, GLsizei count, + GLenum format, GLenum type, + const GLvoid *data ); + +GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname, + const GLint *params); + +GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname, + const GLfloat *params); + +GLAPI void GLAPIENTRY glCopyColorSubTable( GLenum target, GLsizei start, + GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glCopyColorTable( GLenum target, GLenum internalformat, + GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glGetColorTable( GLenum target, GLenum format, + GLenum type, GLvoid *table ); + +GLAPI void GLAPIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glBlendEquation( GLenum mode ); + +GLAPI void GLAPIENTRY glBlendColor( GLclampf red, GLclampf green, + GLclampf blue, GLclampf alpha ); + +GLAPI void GLAPIENTRY glHistogram( GLenum target, GLsizei width, + GLenum internalformat, GLboolean sink ); + +GLAPI void GLAPIENTRY glResetHistogram( GLenum target ); + +GLAPI void GLAPIENTRY glGetHistogram( GLenum target, GLboolean reset, + GLenum format, GLenum type, + GLvoid *values ); + +GLAPI void GLAPIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glMinmax( GLenum target, GLenum internalformat, + GLboolean sink ); + +GLAPI void GLAPIENTRY glResetMinmax( GLenum target ); + +GLAPI void GLAPIENTRY glGetMinmax( GLenum target, GLboolean reset, + GLenum format, GLenum types, + GLvoid *values ); + +GLAPI void GLAPIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glConvolutionFilter1D( GLenum target, + GLenum internalformat, GLsizei width, GLenum format, GLenum type, + const GLvoid *image ); + +GLAPI void GLAPIENTRY glConvolutionFilter2D( GLenum target, + GLenum internalformat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *image ); + +GLAPI void GLAPIENTRY glConvolutionParameterf( GLenum target, GLenum pname, + GLfloat params ); + +GLAPI void GLAPIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, + const GLfloat *params ); + +GLAPI void GLAPIENTRY glConvolutionParameteri( GLenum target, GLenum pname, + GLint params ); + +GLAPI void GLAPIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glCopyConvolutionFilter1D( GLenum target, + GLenum internalformat, GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glCopyConvolutionFilter2D( GLenum target, + GLenum internalformat, GLint x, GLint y, GLsizei width, + GLsizei height); + +GLAPI void GLAPIENTRY glGetConvolutionFilter( GLenum target, GLenum format, + GLenum type, GLvoid *image ); + +GLAPI void GLAPIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glSeparableFilter2D( GLenum target, + GLenum internalformat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *row, const GLvoid *column ); + +GLAPI void GLAPIENTRY glGetSeparableFilter( GLenum target, GLenum format, + GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); + + + + +/* + * OpenGL 1.3 + */ + +/* multitexture */ +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +/* texture_cube_map */ +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +/* texture_compression */ +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +/* multisample */ +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_MULTISAMPLE_BIT 0x20000000 +/* transpose_matrix */ +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +/* texture_env_combine */ +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +/* texture_env_dot3 */ +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +/* texture_border_clamp */ +#define GL_CLAMP_TO_BORDER 0x812D + +GLAPI void GLAPIENTRY glActiveTexture( GLenum texture ); + +GLAPI void GLAPIENTRY glClientActiveTexture( GLenum texture ); + +GLAPI void GLAPIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); + +GLAPI void GLAPIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1i( GLenum target, GLint s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); + + +GLAPI void GLAPIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); + +GLAPI void GLAPIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); + +GLAPI void GLAPIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); + +GLAPI void GLAPIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); + +GLAPI void GLAPIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); + + +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); + + + +/* + * GL_ARB_multitexture (ARB extension 1 and OpenGL 1.2.1) + */ +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 + +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 + +GLAPI void GLAPIENTRY glActiveTextureARB(GLenum texture); +GLAPI void GLAPIENTRY glClientActiveTextureARB(GLenum texture); +GLAPI void GLAPIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s); +GLAPI void GLAPIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s); +GLAPI void GLAPIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord1iARB(GLenum target, GLint s); +GLAPI void GLAPIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s); +GLAPI void GLAPIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t); +GLAPI void GLAPIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t); +GLAPI void GLAPIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t); +GLAPI void GLAPIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t); +GLAPI void GLAPIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void GLAPIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void GLAPIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r); +GLAPI void GLAPIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void GLAPIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void GLAPIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void GLAPIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void GLAPIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void GLAPIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v); + +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); + +#endif /* GL_ARB_multitexture */ + + + +/* + * Define this token if you want "old-style" header file behaviour (extensions + * defined in gl.h). Otherwise, extensions will be included from glext.h. + */ +#if !defined(NO_SDL_GLEXT) && !defined(GL_GLEXT_LEGACY) +#include +#endif /* GL_GLEXT_LEGACY */ + + + +/* + * ???. GL_MESA_packed_depth_stencil + * XXX obsolete + */ +#ifndef GL_MESA_packed_depth_stencil +#define GL_MESA_packed_depth_stencil 1 + +#define GL_DEPTH_STENCIL_MESA 0x8750 +#define GL_UNSIGNED_INT_24_8_MESA 0x8751 +#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752 +#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753 +#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754 + +#endif /* GL_MESA_packed_depth_stencil */ + + +#ifndef GL_ATI_blend_equation_separate +#define GL_ATI_blend_equation_separate 1 + +#define GL_ALPHA_BLEND_EQUATION_ATI 0x883D + +GLAPI void GLAPIENTRY glBlendEquationSeparateATI( GLenum modeRGB, GLenum modeA ); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLenum modeA); + +#endif /* GL_ATI_blend_equation_separate */ + + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +typedef void* GLeglImageOES; +#endif + +#ifndef GL_OES_EGL_image +#define GL_OES_EGL_image 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); +GLAPI void APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); +#endif +typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); +#endif + + +/** + ** NOTE!!!!! If you add new functions to this file, or update + ** glext.h be sure to regenerate the gl_mangle.h file. See comments + ** in that file for details. + **/ + + + +/********************************************************************** + * Begin system-specific stuff + */ +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export off +#endif + +/* + * End system-specific stuff + **********************************************************************/ + + +#ifdef __cplusplus +} +#endif + +#endif /* __gl_h_ */ + +#endif /* !__IPHONEOS__ */ + +#endif /* SDL_opengl_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengl_glext.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengl_glext.h new file mode 100644 index 00000000000..6a402b15a22 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengl_glext.h @@ -0,0 +1,11180 @@ +#ifndef __glext_h_ +#define __glext_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright (c) 2013-2014 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ +/* +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** http://www.opengl.org/registry/ +** +** Khronos $Revision: 26745 $ on $Date: 2014-05-21 03:12:26 -0700 (Wed, 21 May 2014) $ +*/ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX +#endif +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif +#ifndef GLAPI +#define GLAPI extern +#endif + +#define GL_GLEXT_VERSION 20140521 + +/* Generated C header for: + * API: gl + * Profile: compatibility + * Versions considered: .* + * Versions emitted: 1\.[2-9]|[234]\.[0-9] + * Default extensions included: gl + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_RESCALE_NORMAL 0x803A +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_VERSION_1_2 */ + +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTexture (GLenum texture); +GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); +GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); +GLAPI void APIENTRY glClientActiveTexture (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); +#endif +#endif /* GL_VERSION_1_3 */ + +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_COLOR_SUM 0x8458 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFogCoordf (GLfloat coord); +GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); +GLAPI void APIENTRY glFogCoordd (GLdouble coord); +GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2iv (const GLint *v); +GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); +GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3iv (const GLint *v); +GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); +GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void APIENTRY glBlendEquation (GLenum mode); +#endif +#endif /* GL_VERSION_1_4 */ + +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 +#include +#ifdef __MACOSX__ +typedef long GLsizeiptr; +typedef long GLintptr; +#else +typedef ptrdiff_t GLsizeiptr; +typedef ptrdiff_t GLintptr; +#endif +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_CURRENT_QUERY 0x8865 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_READ_ONLY 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SRC1_ALPHA 0x8589 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_FOG_COORD_SRC 0x8450 +#define GL_FOG_COORD 0x8451 +#define GL_CURRENT_FOG_COORD 0x8453 +#define GL_FOG_COORD_ARRAY_TYPE 0x8454 +#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORD_ARRAY_POINTER 0x8456 +#define GL_FOG_COORD_ARRAY 0x8457 +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D +#define GL_SRC0_RGB 0x8580 +#define GL_SRC1_RGB 0x8581 +#define GL_SRC2_RGB 0x8582 +#define GL_SRC0_ALPHA 0x8588 +#define GL_SRC2_ALPHA 0x858A +typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQuery (GLuint id); +GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQuery (GLenum target); +GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); +GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); +GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); +GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_VERSION_1_5 */ + +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +typedef char GLchar; +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_TEXTURE_COORDS 0x8871 +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); +typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); +GLAPI void APIENTRY glCompileShader (GLuint shader); +GLAPI GLuint APIENTRY glCreateProgram (void); +GLAPI GLuint APIENTRY glCreateShader (GLenum type); +GLAPI void APIENTRY glDeleteProgram (GLuint program); +GLAPI void APIENTRY glDeleteShader (GLuint shader); +GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgram (GLuint program); +GLAPI GLboolean APIENTRY glIsShader (GLuint shader); +GLAPI void APIENTRY glLinkProgram (GLuint program); +GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +GLAPI void APIENTRY glUseProgram (GLuint program); +GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glValidateProgram (GLuint program); +GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#endif +#endif /* GL_VERSION_2_0 */ + +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#endif +#endif /* GL_VERSION_2_1 */ + +#ifndef GL_VERSION_3_0 +#define GL_VERSION_3_0 1 +typedef unsigned short GLhalf; +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_CONTEXT_FLAGS 0x821E +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RG 0x8226 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_RGBA32F 0x8814 +#define GL_RGB32F 0x8815 +#define GL_RGBA16F 0x881A +#define GL_RGB16F 0x881B +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_FIXED_ONLY 0x891D +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_RGB9_E5 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_RGBA32UI 0x8D70 +#define GL_RGB32UI 0x8D71 +#define GL_RGBA16UI 0x8D76 +#define GL_RGB16UI 0x8D77 +#define GL_RGBA8UI 0x8D7C +#define GL_RGB8UI 0x8D7D +#define GL_RGBA32I 0x8D82 +#define GL_RGB32I 0x8D83 +#define GL_RGBA16I 0x8D88 +#define GL_RGB16I 0x8D89 +#define GL_RGBA8I 0x8D8E +#define GL_RGB8I 0x8D8F +#define GL_RED_INTEGER 0x8D94 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGRA_INTEGER 0x8D9B +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_INDEX 0x8222 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_HALF_FLOAT 0x140B +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_RG 0x8227 +#define GL_RG_INTEGER 0x8228 +#define GL_R8 0x8229 +#define GL_R16 0x822A +#define GL_RG8 0x822B +#define GL_RG16 0x822C +#define GL_R16F 0x822D +#define GL_R32F 0x822E +#define GL_RG16F 0x822F +#define GL_RG32F 0x8230 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_ALPHA_INTEGER 0x8D97 +typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); +GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); +GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedback (void); +GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); +GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRender (void); +GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); +GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); +GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmap (GLenum target); +GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glBindVertexArray (GLuint array); +GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); +#endif +#endif /* GL_VERSION_3_0 */ + +#ifndef GL_VERSION_3_1 +#define GL_VERSION_3_1 1 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM 0x8F98 +#define GL_RG16_SNORM 0x8F99 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGBA16_SNORM 0x8F9B +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_INVALID_INDEX 0xFFFFFFFFu +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); +typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); +GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); +GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#endif +#endif /* GL_VERSION_3_1 */ + +#ifndef GL_VERSION_3_2 +#define GL_VERSION_3_2 1 +typedef struct __GLsync *GLsync; +#ifndef GLEXT_64_TYPES_DEFINED +/* This code block is duplicated in glxext.h, so must be protected */ +#define GLEXT_64_TYPES_DEFINED +/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ +/* (as used in the GL_EXT_timer_query extension). */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#include +#elif defined(__sun__) || defined(__digital__) +#include +#if defined(__STDC__) +#if defined(__arch64__) || defined(_LP64) +typedef long int int64_t; +typedef unsigned long int uint64_t; +#else +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#endif /* __arch64__ */ +#endif /* __STDC__ */ +#elif defined( __VMS ) || defined(__sgi) +#include +#elif defined(__SCO__) || defined(__USLC__) +#include +#elif defined(__UNIXOS2__) || defined(__SOL64__) +typedef long int int32_t; +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#elif defined(_WIN32) && defined(__GNUC__) +#include +#elif defined(_WIN32) +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#else +/* Fallback if nothing above works */ +#include +#endif +#endif +typedef uint64_t GLuint64; +typedef int64_t GLint64; +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_DEPTH_CLAMP 0x864F +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_OBJECT_TYPE 0x9112 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_UNSIGNALED 0x9118 +#define GL_SIGNALED 0x9119 +#define GL_ALREADY_SIGNALED 0x911A +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_CONDITION_SATISFIED 0x911C +#define GL_WAIT_FAILED 0x911D +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_INTEGER_SAMPLES 0x9110 +typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); +typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); +typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); +typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); +typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +GLAPI void APIENTRY glProvokingVertex (GLenum mode); +GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); +GLAPI GLboolean APIENTRY glIsSync (GLsync sync); +GLAPI void APIENTRY glDeleteSync (GLsync sync); +GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); +GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); +GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); +#endif +#endif /* GL_VERSION_3_2 */ + +#ifndef GL_VERSION_3_3 +#define GL_VERSION_3_3 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_SRC1_COLOR 0x88F9 +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_SAMPLER_BINDING 0x8919 +#define GL_RGB10_A2UI 0x906F +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIMESTAMP 0x8E28 +#define GL_INT_2_10_10_10_REV 0x8D9F +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); +typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); +typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); +typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); +GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); +GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); +GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); +GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); +GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); +GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); +GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); +GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); +GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); +GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); +GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); +#endif +#endif /* GL_VERSION_3_3 */ + +#ifndef GL_VERSION_4_0 +#define GL_VERSION_4_0 1 +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_PATCHES 0x000E +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_ISOLINES 0x8E7A +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); +typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); +typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); +typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); +typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); +typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShading (GLfloat value); +GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); +GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); +GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); +GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); +GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); +GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); +GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); +GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); +GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedback (void); +GLAPI void APIENTRY glResumeTransformFeedback (void); +GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); +GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); +GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); +GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); +GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_VERSION_4_0 */ + +#ifndef GL_VERSION_4_1 +#define GL_VERSION_4_1 1 +#define GL_FIXED 0x140C +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_RGB565 0x8D62 +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_MAX_VIEWPORTS 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_UNDEFINED_VERTEX 0x8260 +typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); +typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); +typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); +typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); +typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); +typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReleaseShaderCompiler (void); +GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); +GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); +GLAPI void APIENTRY glClearDepthf (GLfloat d); +GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); +GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); +GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); +GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); +GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); +GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); +GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); +GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); +GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); +GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); +#endif +#endif /* GL_VERSION_4_1 */ + +#ifndef GL_VERSION_4_2 +#define GL_VERSION_4_2 1 +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C +#define GL_MAX_IMAGE_SAMPLES 0x906D +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F +#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); +typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); +GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); +GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#endif +#endif /* GL_VERSION_4_2 */ + +#ifndef GL_VERSION_4_3 +#define GL_VERSION_4_3 1 +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_BUFFER 0x82E0 +#define GL_SHADER 0x82E1 +#define GL_PROGRAM 0x82E2 +#define GL_QUERY 0x82E3 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_SAMPLER 0x82E6 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_INTERNALFORMAT_SUPPORTED 0x826F +#define GL_INTERNALFORMAT_PREFERRED 0x8270 +#define GL_INTERNALFORMAT_RED_SIZE 0x8271 +#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 +#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 +#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 +#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 +#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 +#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 +#define GL_INTERNALFORMAT_RED_TYPE 0x8278 +#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 +#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A +#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B +#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C +#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D +#define GL_MAX_WIDTH 0x827E +#define GL_MAX_HEIGHT 0x827F +#define GL_MAX_DEPTH 0x8280 +#define GL_MAX_LAYERS 0x8281 +#define GL_MAX_COMBINED_DIMENSIONS 0x8282 +#define GL_COLOR_COMPONENTS 0x8283 +#define GL_DEPTH_COMPONENTS 0x8284 +#define GL_STENCIL_COMPONENTS 0x8285 +#define GL_COLOR_RENDERABLE 0x8286 +#define GL_DEPTH_RENDERABLE 0x8287 +#define GL_STENCIL_RENDERABLE 0x8288 +#define GL_FRAMEBUFFER_RENDERABLE 0x8289 +#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A +#define GL_FRAMEBUFFER_BLEND 0x828B +#define GL_READ_PIXELS 0x828C +#define GL_READ_PIXELS_FORMAT 0x828D +#define GL_READ_PIXELS_TYPE 0x828E +#define GL_TEXTURE_IMAGE_FORMAT 0x828F +#define GL_TEXTURE_IMAGE_TYPE 0x8290 +#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 +#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 +#define GL_MIPMAP 0x8293 +#define GL_MANUAL_GENERATE_MIPMAP 0x8294 +#define GL_AUTO_GENERATE_MIPMAP 0x8295 +#define GL_COLOR_ENCODING 0x8296 +#define GL_SRGB_READ 0x8297 +#define GL_SRGB_WRITE 0x8298 +#define GL_FILTER 0x829A +#define GL_VERTEX_TEXTURE 0x829B +#define GL_TESS_CONTROL_TEXTURE 0x829C +#define GL_TESS_EVALUATION_TEXTURE 0x829D +#define GL_GEOMETRY_TEXTURE 0x829E +#define GL_FRAGMENT_TEXTURE 0x829F +#define GL_COMPUTE_TEXTURE 0x82A0 +#define GL_TEXTURE_SHADOW 0x82A1 +#define GL_TEXTURE_GATHER 0x82A2 +#define GL_TEXTURE_GATHER_SHADOW 0x82A3 +#define GL_SHADER_IMAGE_LOAD 0x82A4 +#define GL_SHADER_IMAGE_STORE 0x82A5 +#define GL_SHADER_IMAGE_ATOMIC 0x82A6 +#define GL_IMAGE_TEXEL_SIZE 0x82A7 +#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 +#define GL_IMAGE_PIXEL_FORMAT 0x82A9 +#define GL_IMAGE_PIXEL_TYPE 0x82AA +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF +#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 +#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 +#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 +#define GL_CLEAR_BUFFER 0x82B4 +#define GL_TEXTURE_VIEW 0x82B5 +#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 +#define GL_FULL_SUPPORT 0x82B7 +#define GL_CAVEAT_SUPPORT 0x82B8 +#define GL_IMAGE_CLASS_4_X_32 0x82B9 +#define GL_IMAGE_CLASS_2_X_32 0x82BA +#define GL_IMAGE_CLASS_1_X_32 0x82BB +#define GL_IMAGE_CLASS_4_X_16 0x82BC +#define GL_IMAGE_CLASS_2_X_16 0x82BD +#define GL_IMAGE_CLASS_1_X_16 0x82BE +#define GL_IMAGE_CLASS_4_X_8 0x82BF +#define GL_IMAGE_CLASS_2_X_8 0x82C0 +#define GL_IMAGE_CLASS_1_X_8 0x82C1 +#define GL_IMAGE_CLASS_11_11_10 0x82C2 +#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 +#define GL_VIEW_CLASS_128_BITS 0x82C4 +#define GL_VIEW_CLASS_96_BITS 0x82C5 +#define GL_VIEW_CLASS_64_BITS 0x82C6 +#define GL_VIEW_CLASS_48_BITS 0x82C7 +#define GL_VIEW_CLASS_32_BITS 0x82C8 +#define GL_VIEW_CLASS_24_BITS 0x82C9 +#define GL_VIEW_CLASS_16_BITS 0x82CA +#define GL_VIEW_CLASS_8_BITS 0x82CB +#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC +#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD +#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE +#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF +#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 +#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 +#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 +#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_VERTEX_SUBROUTINE 0x92E8 +#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 +#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA +#define GL_GEOMETRY_SUBROUTINE 0x92EB +#define GL_FRAGMENT_SUBROUTINE 0x92EC +#define GL_COMPUTE_SUBROUTINE 0x92ED +#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE +#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF +#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 +#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 +#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 +#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 +#define GL_NAME_LENGTH 0x92F9 +#define GL_TYPE 0x92FA +#define GL_ARRAY_SIZE 0x92FB +#define GL_OFFSET 0x92FC +#define GL_BLOCK_INDEX 0x92FD +#define GL_ARRAY_STRIDE 0x92FE +#define GL_MATRIX_STRIDE 0x92FF +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_LOCATION 0x930E +#define GL_LOCATION_INDEX 0x930F +#define GL_IS_PER_PATCH 0x92E7 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB +#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC +#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD +#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_DISPLAY_LIST 0x82E7 +typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); +typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); +typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); +GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); +GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); +GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); +GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); +GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); +GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GLAPI void APIENTRY glPopDebugGroup (void); +GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_VERSION_4_3 */ + +#ifndef GL_VERSION_4_4 +#define GL_VERSION_4_4 1 +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_TEXTURE_BUFFER_BINDING 0x8C2A +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_COHERENT_BIT 0x0080 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_STORAGE_FLAGS 0x8220 +#define GL_CLEAR_TEXTURE 0x9365 +#define GL_LOCATION_COMPONENT 0x934A +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 +typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); +GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#endif +#endif /* GL_VERSION_4_4 */ + +#ifndef GL_ARB_ES2_compatibility +#define GL_ARB_ES2_compatibility 1 +#endif /* GL_ARB_ES2_compatibility */ + +#ifndef GL_ARB_ES3_compatibility +#define GL_ARB_ES3_compatibility 1 +#endif /* GL_ARB_ES3_compatibility */ + +#ifndef GL_ARB_arrays_of_arrays +#define GL_ARB_arrays_of_arrays 1 +#endif /* GL_ARB_arrays_of_arrays */ + +#ifndef GL_ARB_base_instance +#define GL_ARB_base_instance 1 +#endif /* GL_ARB_base_instance */ + +#ifndef GL_ARB_bindless_texture +#define GL_ARB_bindless_texture 1 +typedef uint64_t GLuint64EXT; +#define GL_UNSIGNED_INT64_ARB 0x140F +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_ARB_bindless_texture */ + +#ifndef GL_ARB_blend_func_extended +#define GL_ARB_blend_func_extended 1 +#endif /* GL_ARB_blend_func_extended */ + +#ifndef GL_ARB_buffer_storage +#define GL_ARB_buffer_storage 1 +#endif /* GL_ARB_buffer_storage */ + +#ifndef GL_ARB_cl_event +#define GL_ARB_cl_event 1 +struct _cl_context; +struct _cl_event; +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#endif +#endif /* GL_ARB_cl_event */ + +#ifndef GL_ARB_clear_buffer_object +#define GL_ARB_clear_buffer_object 1 +#endif /* GL_ARB_clear_buffer_object */ + +#ifndef GL_ARB_clear_texture +#define GL_ARB_clear_texture 1 +#endif /* GL_ARB_clear_texture */ + +#ifndef GL_ARB_color_buffer_float +#define GL_ARB_color_buffer_float 1 +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY_ARB 0x891D +typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); +#endif +#endif /* GL_ARB_color_buffer_float */ + +#ifndef GL_ARB_compatibility +#define GL_ARB_compatibility 1 +#endif /* GL_ARB_compatibility */ + +#ifndef GL_ARB_compressed_texture_pixel_storage +#define GL_ARB_compressed_texture_pixel_storage 1 +#endif /* GL_ARB_compressed_texture_pixel_storage */ + +#ifndef GL_ARB_compute_shader +#define GL_ARB_compute_shader 1 +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#endif /* GL_ARB_compute_shader */ + +#ifndef GL_ARB_compute_variable_group_size +#define GL_ARB_compute_variable_group_size 1 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 +#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB +#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 +#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +#endif +#endif /* GL_ARB_compute_variable_group_size */ + +#ifndef GL_ARB_conservative_depth +#define GL_ARB_conservative_depth 1 +#endif /* GL_ARB_conservative_depth */ + +#ifndef GL_ARB_copy_buffer +#define GL_ARB_copy_buffer 1 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#endif /* GL_ARB_copy_buffer */ + +#ifndef GL_ARB_copy_image +#define GL_ARB_copy_image 1 +#endif /* GL_ARB_copy_image */ + +#ifndef GL_ARB_debug_output +#define GL_ARB_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#endif +#endif /* GL_ARB_debug_output */ + +#ifndef GL_ARB_depth_buffer_float +#define GL_ARB_depth_buffer_float 1 +#endif /* GL_ARB_depth_buffer_float */ + +#ifndef GL_ARB_depth_clamp +#define GL_ARB_depth_clamp 1 +#endif /* GL_ARB_depth_clamp */ + +#ifndef GL_ARB_depth_texture +#define GL_ARB_depth_texture 1 +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#endif /* GL_ARB_depth_texture */ + +#ifndef GL_ARB_draw_buffers +#define GL_ARB_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER15_ARB 0x8834 +typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ARB_draw_buffers */ + +#ifndef GL_ARB_draw_buffers_blend +#define GL_ARB_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#endif +#endif /* GL_ARB_draw_buffers_blend */ + +#ifndef GL_ARB_draw_elements_base_vertex +#define GL_ARB_draw_elements_base_vertex 1 +#endif /* GL_ARB_draw_elements_base_vertex */ + +#ifndef GL_ARB_draw_indirect +#define GL_ARB_draw_indirect 1 +#endif /* GL_ARB_draw_indirect */ + +#ifndef GL_ARB_draw_instanced +#define GL_ARB_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_ARB_draw_instanced */ + +#ifndef GL_ARB_enhanced_layouts +#define GL_ARB_enhanced_layouts 1 +#endif /* GL_ARB_enhanced_layouts */ + +#ifndef GL_ARB_explicit_attrib_location +#define GL_ARB_explicit_attrib_location 1 +#endif /* GL_ARB_explicit_attrib_location */ + +#ifndef GL_ARB_explicit_uniform_location +#define GL_ARB_explicit_uniform_location 1 +#endif /* GL_ARB_explicit_uniform_location */ + +#ifndef GL_ARB_fragment_coord_conventions +#define GL_ARB_fragment_coord_conventions 1 +#endif /* GL_ARB_fragment_coord_conventions */ + +#ifndef GL_ARB_fragment_layer_viewport +#define GL_ARB_fragment_layer_viewport 1 +#endif /* GL_ARB_fragment_layer_viewport */ + +#ifndef GL_ARB_fragment_program +#define GL_ARB_fragment_program 1 +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); +GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string); +GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); +#endif +#endif /* GL_ARB_fragment_program */ + +#ifndef GL_ARB_fragment_program_shadow +#define GL_ARB_fragment_program_shadow 1 +#endif /* GL_ARB_fragment_program_shadow */ + +#ifndef GL_ARB_fragment_shader +#define GL_ARB_fragment_shader 1 +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#endif /* GL_ARB_fragment_shader */ + +#ifndef GL_ARB_framebuffer_no_attachments +#define GL_ARB_framebuffer_no_attachments 1 +#endif /* GL_ARB_framebuffer_no_attachments */ + +#ifndef GL_ARB_framebuffer_object +#define GL_ARB_framebuffer_object 1 +#endif /* GL_ARB_framebuffer_object */ + +#ifndef GL_ARB_framebuffer_sRGB +#define GL_ARB_framebuffer_sRGB 1 +#endif /* GL_ARB_framebuffer_sRGB */ + +#ifndef GL_KHR_context_flush_control +#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC +#endif /* GL_KHR_context_flush_control */ + +#ifndef GL_ARB_geometry_shader4 +#define GL_ARB_geometry_shader4 1 +#define GL_LINES_ADJACENCY_ARB 0x000A +#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B +#define GL_TRIANGLES_ADJACENCY_ARB 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 +#define GL_GEOMETRY_SHADER_ARB 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_ARB_geometry_shader4 */ + +#ifndef GL_ARB_get_program_binary +#define GL_ARB_get_program_binary 1 +#endif /* GL_ARB_get_program_binary */ + +#ifndef GL_ARB_gpu_shader5 +#define GL_ARB_gpu_shader5 1 +#endif /* GL_ARB_gpu_shader5 */ + +#ifndef GL_ARB_gpu_shader_fp64 +#define GL_ARB_gpu_shader_fp64 1 +#endif /* GL_ARB_gpu_shader_fp64 */ + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 +typedef unsigned short GLhalfARB; +#define GL_HALF_FLOAT_ARB 0x140B +#endif /* GL_ARB_half_float_pixel */ + +#ifndef GL_ARB_half_float_vertex +#define GL_ARB_half_float_vertex 1 +#endif /* GL_ARB_half_float_vertex */ + +#ifndef GL_ARB_imaging +#define GL_ARB_imaging 1 +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_EQUATION 0x8009 +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogram (GLenum target); +GLAPI void APIENTRY glResetMinmax (GLenum target); +#endif +#endif /* GL_ARB_imaging */ + +#ifndef GL_ARB_indirect_parameters +#define GL_ARB_indirect_parameters 1 +#define GL_PARAMETER_BUFFER_ARB 0x80EE +#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#endif +#endif /* GL_ARB_indirect_parameters */ + +#ifndef GL_ARB_instanced_arrays +#define GL_ARB_instanced_arrays 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); +#endif +#endif /* GL_ARB_instanced_arrays */ + +#ifndef GL_ARB_internalformat_query +#define GL_ARB_internalformat_query 1 +#endif /* GL_ARB_internalformat_query */ + +#ifndef GL_ARB_internalformat_query2 +#define GL_ARB_internalformat_query2 1 +#define GL_SRGB_DECODE_ARB 0x8299 +#endif /* GL_ARB_internalformat_query2 */ + +#ifndef GL_ARB_invalidate_subdata +#define GL_ARB_invalidate_subdata 1 +#endif /* GL_ARB_invalidate_subdata */ + +#ifndef GL_ARB_map_buffer_alignment +#define GL_ARB_map_buffer_alignment 1 +#endif /* GL_ARB_map_buffer_alignment */ + +#ifndef GL_ARB_map_buffer_range +#define GL_ARB_map_buffer_range 1 +#endif /* GL_ARB_map_buffer_range */ + +#ifndef GL_ARB_matrix_palette +#define GL_ARB_matrix_palette 1 +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); +typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); +GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); +GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); +GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); +GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_ARB_matrix_palette */ + +#ifndef GL_ARB_multi_bind +#define GL_ARB_multi_bind 1 +#endif /* GL_ARB_multi_bind */ + +#ifndef GL_ARB_multi_draw_indirect +#define GL_ARB_multi_draw_indirect 1 +#endif /* GL_ARB_multi_draw_indirect */ + +#ifndef GL_ARB_multisample +#define GL_ARB_multisample 1 +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); +#endif +#endif /* GL_ARB_multisample */ + +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); +#endif +#endif /* GL_ARB_multitexture */ + +#ifndef GL_ARB_occlusion_query +#define GL_ARB_occlusion_query 1 +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_SAMPLES_PASSED_ARB 0x8914 +typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); +GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQueryARB (GLenum target); +GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_ARB_occlusion_query */ + +#ifndef GL_ARB_occlusion_query2 +#define GL_ARB_occlusion_query2 1 +#endif /* GL_ARB_occlusion_query2 */ + +#ifndef GL_ARB_pixel_buffer_object +#define GL_ARB_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#endif /* GL_ARB_pixel_buffer_object */ + +#ifndef GL_ARB_point_parameters +#define GL_ARB_point_parameters 1 +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_ARB_point_parameters */ + +#ifndef GL_ARB_point_sprite +#define GL_ARB_point_sprite 1 +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 +#endif /* GL_ARB_point_sprite */ + +#ifndef GL_ARB_program_interface_query +#define GL_ARB_program_interface_query 1 +#endif /* GL_ARB_program_interface_query */ + +#ifndef GL_ARB_provoking_vertex +#define GL_ARB_provoking_vertex 1 +#endif /* GL_ARB_provoking_vertex */ + +#ifndef GL_ARB_query_buffer_object +#define GL_ARB_query_buffer_object 1 +#endif /* GL_ARB_query_buffer_object */ + +#ifndef GL_ARB_robust_buffer_access_behavior +#define GL_ARB_robust_buffer_access_behavior 1 +#endif /* GL_ARB_robust_buffer_access_behavior */ + +#ifndef GL_ARB_robustness +#define GL_ARB_robustness 1 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 +typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); +typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); +typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); +typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); +GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); +GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); +GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); +GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); +GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); +GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#endif +#endif /* GL_ARB_robustness */ + +#ifndef GL_ARB_robustness_isolation +#define GL_ARB_robustness_isolation 1 +#endif /* GL_ARB_robustness_isolation */ + +#ifndef GL_ARB_sample_shading +#define GL_ARB_sample_shading 1 +#define GL_SAMPLE_SHADING_ARB 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); +#endif +#endif /* GL_ARB_sample_shading */ + +#ifndef GL_ARB_sampler_objects +#define GL_ARB_sampler_objects 1 +#endif /* GL_ARB_sampler_objects */ + +#ifndef GL_ARB_seamless_cube_map +#define GL_ARB_seamless_cube_map 1 +#endif /* GL_ARB_seamless_cube_map */ + +#ifndef GL_ARB_seamless_cubemap_per_texture +#define GL_ARB_seamless_cubemap_per_texture 1 +#endif /* GL_ARB_seamless_cubemap_per_texture */ + +#ifndef GL_ARB_separate_shader_objects +#define GL_ARB_separate_shader_objects 1 +#endif /* GL_ARB_separate_shader_objects */ + +#ifndef GL_ARB_shader_atomic_counters +#define GL_ARB_shader_atomic_counters 1 +#endif /* GL_ARB_shader_atomic_counters */ + +#ifndef GL_ARB_shader_bit_encoding +#define GL_ARB_shader_bit_encoding 1 +#endif /* GL_ARB_shader_bit_encoding */ + +#ifndef GL_ARB_shader_draw_parameters +#define GL_ARB_shader_draw_parameters 1 +#endif /* GL_ARB_shader_draw_parameters */ + +#ifndef GL_ARB_shader_group_vote +#define GL_ARB_shader_group_vote 1 +#endif /* GL_ARB_shader_group_vote */ + +#ifndef GL_ARB_shader_image_load_store +#define GL_ARB_shader_image_load_store 1 +#endif /* GL_ARB_shader_image_load_store */ + +#ifndef GL_ARB_shader_image_size +#define GL_ARB_shader_image_size 1 +#endif /* GL_ARB_shader_image_size */ + +#ifndef GL_ARB_shader_objects +#define GL_ARB_shader_objects 1 +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef char GLcharARB; +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); +typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); +GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); +GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); +GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); +GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); +GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); +GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); +GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); +GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); +GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#endif +#endif /* GL_ARB_shader_objects */ + +#ifndef GL_ARB_shader_precision +#define GL_ARB_shader_precision 1 +#endif /* GL_ARB_shader_precision */ + +#ifndef GL_ARB_shader_stencil_export +#define GL_ARB_shader_stencil_export 1 +#endif /* GL_ARB_shader_stencil_export */ + +#ifndef GL_ARB_shader_storage_buffer_object +#define GL_ARB_shader_storage_buffer_object 1 +#endif /* GL_ARB_shader_storage_buffer_object */ + +#ifndef GL_ARB_shader_subroutine +#define GL_ARB_shader_subroutine 1 +#endif /* GL_ARB_shader_subroutine */ + +#ifndef GL_ARB_shader_texture_lod +#define GL_ARB_shader_texture_lod 1 +#endif /* GL_ARB_shader_texture_lod */ + +#ifndef GL_ARB_shading_language_100 +#define GL_ARB_shading_language_100 1 +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#endif /* GL_ARB_shading_language_100 */ + +#ifndef GL_ARB_shading_language_420pack +#define GL_ARB_shading_language_420pack 1 +#endif /* GL_ARB_shading_language_420pack */ + +#ifndef GL_ARB_shading_language_include +#define GL_ARB_shading_language_include 1 +#define GL_SHADER_INCLUDE_ARB 0x8DAE +#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 +#define GL_NAMED_STRING_TYPE_ARB 0x8DEA +typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#endif +#endif /* GL_ARB_shading_language_include */ + +#ifndef GL_ARB_shading_language_packing +#define GL_ARB_shading_language_packing 1 +#endif /* GL_ARB_shading_language_packing */ + +#ifndef GL_ARB_shadow +#define GL_ARB_shadow 1 +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#endif /* GL_ARB_shadow */ + +#ifndef GL_ARB_shadow_ambient +#define GL_ARB_shadow_ambient 1 +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#endif /* GL_ARB_shadow_ambient */ + +#ifndef GL_ARB_sparse_texture +#define GL_ARB_sparse_texture 1 +#define GL_TEXTURE_SPARSE_ARB 0x91A6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 +#define GL_MIN_SPARSE_LEVEL_ARB 0x919B +#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 +#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 +typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +#endif +#endif /* GL_ARB_sparse_texture */ + +#ifndef GL_ARB_stencil_texturing +#define GL_ARB_stencil_texturing 1 +#endif /* GL_ARB_stencil_texturing */ + +#ifndef GL_ARB_sync +#define GL_ARB_sync 1 +#endif /* GL_ARB_sync */ + +#ifndef GL_ARB_tessellation_shader +#define GL_ARB_tessellation_shader 1 +#endif /* GL_ARB_tessellation_shader */ + +#ifndef GL_ARB_texture_border_clamp +#define GL_ARB_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#endif /* GL_ARB_texture_border_clamp */ + +#ifndef GL_ARB_texture_buffer_object +#define GL_ARB_texture_buffer_object 1 +#define GL_TEXTURE_BUFFER_ARB 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E +typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_ARB_texture_buffer_object */ + +#ifndef GL_ARB_texture_buffer_object_rgb32 +#define GL_ARB_texture_buffer_object_rgb32 1 +#endif /* GL_ARB_texture_buffer_object_rgb32 */ + +#ifndef GL_ARB_texture_buffer_range +#define GL_ARB_texture_buffer_range 1 +#endif /* GL_ARB_texture_buffer_range */ + +#ifndef GL_ARB_texture_compression +#define GL_ARB_texture_compression 1 +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img); +#endif +#endif /* GL_ARB_texture_compression */ + +#ifndef GL_ARB_texture_compression_bptc +#define GL_ARB_texture_compression_bptc 1 +#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F +#endif /* GL_ARB_texture_compression_bptc */ + +#ifndef GL_ARB_texture_compression_rgtc +#define GL_ARB_texture_compression_rgtc 1 +#endif /* GL_ARB_texture_compression_rgtc */ + +#ifndef GL_ARB_texture_cube_map +#define GL_ARB_texture_cube_map 1 +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C +#endif /* GL_ARB_texture_cube_map */ + +#ifndef GL_ARB_texture_cube_map_array +#define GL_ARB_texture_cube_map_array 1 +#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#endif /* GL_ARB_texture_cube_map_array */ + +#ifndef GL_ARB_texture_env_add +#define GL_ARB_texture_env_add 1 +#endif /* GL_ARB_texture_env_add */ + +#ifndef GL_ARB_texture_env_combine +#define GL_ARB_texture_env_combine 1 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_CONSTANT_ARB 0x8576 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PREVIOUS_ARB 0x8578 +#endif /* GL_ARB_texture_env_combine */ + +#ifndef GL_ARB_texture_env_crossbar +#define GL_ARB_texture_env_crossbar 1 +#endif /* GL_ARB_texture_env_crossbar */ + +#ifndef GL_ARB_texture_env_dot3 +#define GL_ARB_texture_env_dot3 1 +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGBA_ARB 0x86AF +#endif /* GL_ARB_texture_env_dot3 */ + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#endif /* GL_ARB_texture_float */ + +#ifndef GL_ARB_texture_gather +#define GL_ARB_texture_gather 1 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F +#endif /* GL_ARB_texture_gather */ + +#ifndef GL_ARB_texture_mirror_clamp_to_edge +#define GL_ARB_texture_mirror_clamp_to_edge 1 +#endif /* GL_ARB_texture_mirror_clamp_to_edge */ + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#endif /* GL_ARB_texture_mirrored_repeat */ + +#ifndef GL_ARB_texture_multisample +#define GL_ARB_texture_multisample 1 +#endif /* GL_ARB_texture_multisample */ + +#ifndef GL_ARB_texture_non_power_of_two +#define GL_ARB_texture_non_power_of_two 1 +#endif /* GL_ARB_texture_non_power_of_two */ + +#ifndef GL_ARB_texture_query_levels +#define GL_ARB_texture_query_levels 1 +#endif /* GL_ARB_texture_query_levels */ + +#ifndef GL_ARB_texture_query_lod +#define GL_ARB_texture_query_lod 1 +#endif /* GL_ARB_texture_query_lod */ + +#ifndef GL_ARB_texture_rectangle +#define GL_ARB_texture_rectangle 1 +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#endif /* GL_ARB_texture_rectangle */ + +#ifndef GL_ARB_texture_rg +#define GL_ARB_texture_rg 1 +#endif /* GL_ARB_texture_rg */ + +#ifndef GL_ARB_texture_rgb10_a2ui +#define GL_ARB_texture_rgb10_a2ui 1 +#endif /* GL_ARB_texture_rgb10_a2ui */ + +#ifndef GL_ARB_texture_stencil8 +#define GL_ARB_texture_stencil8 1 +#endif /* GL_ARB_texture_stencil8 */ + +#ifndef GL_ARB_texture_storage +#define GL_ARB_texture_storage 1 +#endif /* GL_ARB_texture_storage */ + +#ifndef GL_ARB_texture_storage_multisample +#define GL_ARB_texture_storage_multisample 1 +#endif /* GL_ARB_texture_storage_multisample */ + +#ifndef GL_ARB_texture_swizzle +#define GL_ARB_texture_swizzle 1 +#endif /* GL_ARB_texture_swizzle */ + +#ifndef GL_ARB_texture_view +#define GL_ARB_texture_view 1 +#endif /* GL_ARB_texture_view */ + +#ifndef GL_ARB_timer_query +#define GL_ARB_timer_query 1 +#endif /* GL_ARB_timer_query */ + +#ifndef GL_ARB_transform_feedback2 +#define GL_ARB_transform_feedback2 1 +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#endif /* GL_ARB_transform_feedback2 */ + +#ifndef GL_ARB_transform_feedback3 +#define GL_ARB_transform_feedback3 1 +#endif /* GL_ARB_transform_feedback3 */ + +#ifndef GL_ARB_transform_feedback_instanced +#define GL_ARB_transform_feedback_instanced 1 +#endif /* GL_ARB_transform_feedback_instanced */ + +#ifndef GL_ARB_transpose_matrix +#define GL_ARB_transpose_matrix 1 +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); +#endif +#endif /* GL_ARB_transpose_matrix */ + +#ifndef GL_ARB_uniform_buffer_object +#define GL_ARB_uniform_buffer_object 1 +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#endif /* GL_ARB_uniform_buffer_object */ + +#ifndef GL_ARB_vertex_array_bgra +#define GL_ARB_vertex_array_bgra 1 +#endif /* GL_ARB_vertex_array_bgra */ + +#ifndef GL_ARB_vertex_array_object +#define GL_ARB_vertex_array_object 1 +#endif /* GL_ARB_vertex_array_object */ + +#ifndef GL_ARB_vertex_attrib_64bit +#define GL_ARB_vertex_attrib_64bit 1 +#endif /* GL_ARB_vertex_attrib_64bit */ + +#ifndef GL_ARB_vertex_attrib_binding +#define GL_ARB_vertex_attrib_binding 1 +#endif /* GL_ARB_vertex_attrib_binding */ + +#ifndef GL_ARB_vertex_blend +#define GL_ARB_vertex_blend 1 +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F +typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); +typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); +typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); +typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); +typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); +typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); +typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); +GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); +GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); +GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); +GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); +GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); +GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); +GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); +GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexBlendARB (GLint count); +#endif +#endif /* GL_ARB_vertex_blend */ + +#ifndef GL_ARB_vertex_buffer_object +#define GL_ARB_vertex_buffer_object 1 +#ifdef __MACOSX__ /* The OS X headers haven't caught up with Khronos yet */ +typedef long GLsizeiptrARB; +typedef long GLintptrARB; +#else +typedef ptrdiff_t GLsizeiptrARB; +typedef ptrdiff_t GLintptrARB; +#endif +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY_ARB 0x88EA +typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); +GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); +GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_ARB_vertex_buffer_object */ + +#ifndef GL_ARB_vertex_program +#define GL_ARB_vertex_program 1 +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer); +#endif +#endif /* GL_ARB_vertex_program */ + +#ifndef GL_ARB_vertex_shader +#define GL_ARB_vertex_shader 1 +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); +#endif +#endif /* GL_ARB_vertex_shader */ + +#ifndef GL_ARB_vertex_type_10f_11f_11f_rev +#define GL_ARB_vertex_type_10f_11f_11f_rev 1 +#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ + +#ifndef GL_ARB_vertex_type_2_10_10_10_rev +#define GL_ARB_vertex_type_2_10_10_10_rev 1 +#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ + +#ifndef GL_ARB_viewport_array +#define GL_ARB_viewport_array 1 +#endif /* GL_ARB_viewport_array */ + +#ifndef GL_ARB_window_pos +#define GL_ARB_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); +#endif +#endif /* GL_ARB_window_pos */ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +#endif /* GL_KHR_debug */ + +#ifndef GL_KHR_texture_compression_astc_hdr +#define GL_KHR_texture_compression_astc_hdr 1 +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#endif /* GL_KHR_texture_compression_astc_hdr */ + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif /* GL_KHR_texture_compression_astc_ldr */ + +#ifndef GL_OES_byte_coordinates +#define GL_OES_byte_coordinates 1 +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); +typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x); +typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y); +typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z); +typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); +GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); +GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); +GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); +GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex2bOES (GLbyte x); +GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y); +GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z); +GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); +#endif +#endif /* GL_OES_byte_coordinates */ + +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#endif /* GL_OES_compressed_paletted_texture */ + +#ifndef GL_OES_fixed_point +#define GL_OES_fixed_point 1 +typedef GLint GLfixed; +#define GL_FIXED_OES 0x140C +typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); +typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); +typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); +typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); +typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); +typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); +typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); +typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEOESPROC) (GLfixed value, GLboolean invert); +typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); +typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); +typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); +typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); +typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); +typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); +typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); +typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); +typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); +typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); +typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); +typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); +typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); +typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); +typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); +GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); +GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); +GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); +GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); +GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glLineWidthxOES (GLfixed width); +GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); +GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glPointSizexOES (GLfixed size); +GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); +GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glSampleCoverageOES (GLfixed value, GLboolean invert); +GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); +GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); +GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); +GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); +GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); +GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); +GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); +GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); +GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); +GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glIndexxOES (GLfixed component); +GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); +GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); +GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); +GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); +GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glPassThroughxOES (GLfixed token); +GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); +GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); +GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); +GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); +GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); +GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); +GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glVertex2xOES (GLfixed x); +GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); +#endif +#endif /* GL_OES_fixed_point */ + +#ifndef GL_OES_query_matrix +#define GL_OES_query_matrix 1 +typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); +#endif +#endif /* GL_OES_query_matrix */ + +#ifndef GL_OES_read_format +#define GL_OES_read_format 1 +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#endif /* GL_OES_read_format */ + +#ifndef GL_OES_single_precision +#define GL_OES_single_precision 1 +typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); +typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); +typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); +typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); +typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); +GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); +GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); +GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); +GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#endif +#endif /* GL_OES_single_precision */ + +#ifndef GL_3DFX_multisample +#define GL_3DFX_multisample 1 +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 +#endif /* GL_3DFX_multisample */ + +#ifndef GL_3DFX_tbuffer +#define GL_3DFX_tbuffer 1 +typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); +#endif +#endif /* GL_3DFX_tbuffer */ + +#ifndef GL_3DFX_texture_compression_FXT1 +#define GL_3DFX_texture_compression_FXT1 1 +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 +#endif /* GL_3DFX_texture_compression_FXT1 */ + +#ifndef GL_AMD_blend_minmax_factor +#define GL_AMD_blend_minmax_factor 1 +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FACTOR_MAX_AMD 0x901D +#endif /* GL_AMD_blend_minmax_factor */ + +#ifndef GL_AMD_conservative_depth +#define GL_AMD_conservative_depth 1 +#endif /* GL_AMD_conservative_depth */ + +#ifndef GL_AMD_debug_output +#define GL_AMD_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#endif +#endif /* GL_AMD_debug_output */ + +#ifndef GL_AMD_depth_clamp_separate +#define GL_AMD_depth_clamp_separate 1 +#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E +#define GL_DEPTH_CLAMP_FAR_AMD 0x901F +#endif /* GL_AMD_depth_clamp_separate */ + +#ifndef GL_AMD_draw_buffers_blend +#define GL_AMD_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_AMD_draw_buffers_blend */ + +#ifndef GL_AMD_gcn_shader +#define GL_AMD_gcn_shader 1 +#endif /* GL_AMD_gcn_shader */ + +#ifndef GL_AMD_gpu_shader_int64 +#define GL_AMD_gpu_shader_int64 1 +typedef int64_t GLint64EXT; +#define GL_INT64_NV 0x140E +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); +GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); +GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); +GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); +GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); +GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); +GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_AMD_gpu_shader_int64 */ + +#ifndef GL_AMD_interleaved_elements +#define GL_AMD_interleaved_elements 1 +#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 +#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 +typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param); +#endif +#endif /* GL_AMD_interleaved_elements */ + +#ifndef GL_AMD_multi_draw_indirect +#define GL_AMD_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#endif +#endif /* GL_AMD_multi_draw_indirect */ + +#ifndef GL_AMD_name_gen_delete +#define GL_AMD_name_gen_delete 1 +#define GL_DATA_BUFFER_AMD 0x9151 +#define GL_PERFORMANCE_MONITOR_AMD 0x9152 +#define GL_QUERY_OBJECT_AMD 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 +#define GL_SAMPLER_OBJECT_AMD 0x9155 +typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); +typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); +typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); +GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); +GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); +#endif +#endif /* GL_AMD_name_gen_delete */ + +#ifndef GL_AMD_occlusion_query_event +#define GL_AMD_occlusion_query_event 1 +#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F +#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 +#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 +#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 +#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 +#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF +typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param); +#endif +#endif /* GL_AMD_occlusion_query_event */ + +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); +typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); +GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +#endif /* GL_AMD_performance_monitor */ + +#ifndef GL_AMD_pinned_memory +#define GL_AMD_pinned_memory 1 +#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 +#endif /* GL_AMD_pinned_memory */ + +#ifndef GL_AMD_query_buffer_object +#define GL_AMD_query_buffer_object 1 +#define GL_QUERY_BUFFER_AMD 0x9192 +#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 +#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 +#endif /* GL_AMD_query_buffer_object */ + +#ifndef GL_AMD_sample_positions +#define GL_AMD_sample_positions 1 +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); +#endif +#endif /* GL_AMD_sample_positions */ + +#ifndef GL_AMD_seamless_cubemap_per_texture +#define GL_AMD_seamless_cubemap_per_texture 1 +#endif /* GL_AMD_seamless_cubemap_per_texture */ + +#ifndef GL_AMD_shader_atomic_counter_ops +#define GL_AMD_shader_atomic_counter_ops 1 +#endif /* GL_AMD_shader_atomic_counter_ops */ + +#ifndef GL_AMD_shader_stencil_export +#define GL_AMD_shader_stencil_export 1 +#endif /* GL_AMD_shader_stencil_export */ + +#ifndef GL_AMD_shader_trinary_minmax +#define GL_AMD_shader_trinary_minmax 1 +#endif /* GL_AMD_shader_trinary_minmax */ + +#ifndef GL_AMD_sparse_texture +#define GL_AMD_sparse_texture 1 +#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A +#define GL_MIN_SPARSE_LEVEL_AMD 0x919B +#define GL_MIN_LOD_WARNING_AMD 0x919C +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#endif +#endif /* GL_AMD_sparse_texture */ + +#ifndef GL_AMD_stencil_operation_extended +#define GL_AMD_stencil_operation_extended 1 +#define GL_SET_AMD 0x874A +#define GL_REPLACE_VALUE_AMD 0x874B +#define GL_STENCIL_OP_VALUE_AMD 0x874C +#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D +typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); +#endif +#endif /* GL_AMD_stencil_operation_extended */ + +#ifndef GL_AMD_texture_texture4 +#define GL_AMD_texture_texture4 1 +#endif /* GL_AMD_texture_texture4 */ + +#ifndef GL_AMD_transform_feedback3_lines_triangles +#define GL_AMD_transform_feedback3_lines_triangles 1 +#endif /* GL_AMD_transform_feedback3_lines_triangles */ + +#ifndef GL_AMD_transform_feedback4 +#define GL_AMD_transform_feedback4 1 +#define GL_STREAM_RASTERIZATION_AMD 0x91A0 +#endif /* GL_AMD_transform_feedback4 */ + +#ifndef GL_AMD_vertex_shader_layer +#define GL_AMD_vertex_shader_layer 1 +#endif /* GL_AMD_vertex_shader_layer */ + +#ifndef GL_AMD_vertex_shader_tessellator +#define GL_AMD_vertex_shader_tessellator 1 +#define GL_SAMPLER_BUFFER_AMD 0x9001 +#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 +#define GL_TESSELLATION_MODE_AMD 0x9004 +#define GL_TESSELLATION_FACTOR_AMD 0x9005 +#define GL_DISCRETE_AMD 0x9006 +#define GL_CONTINUOUS_AMD 0x9007 +typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); +GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); +#endif +#endif /* GL_AMD_vertex_shader_tessellator */ + +#ifndef GL_AMD_vertex_shader_viewport_index +#define GL_AMD_vertex_shader_viewport_index 1 +#endif /* GL_AMD_vertex_shader_viewport_index */ + +#ifndef GL_APPLE_aux_depth_stencil +#define GL_APPLE_aux_depth_stencil 1 +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#endif /* GL_APPLE_aux_depth_stencil */ + +#ifndef GL_APPLE_client_storage +#define GL_APPLE_client_storage 1 +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#endif /* GL_APPLE_client_storage */ + +#ifndef GL_APPLE_element_array +#define GL_APPLE_element_array 1 +#define GL_ELEMENT_ARRAY_APPLE 0x8A0C +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E +typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#endif +#endif /* GL_APPLE_element_array */ + +#ifndef GL_APPLE_fence +#define GL_APPLE_fence 1 +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B +typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); +typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); +typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); +GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); +GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); +GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); +#endif +#endif /* GL_APPLE_fence */ + +#ifndef GL_APPLE_float_pixels +#define GL_APPLE_float_pixels 1 +#define GL_HALF_APPLE 0x140B +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_COLOR_FLOAT_APPLE 0x8A0F +#endif /* GL_APPLE_float_pixels */ + +#ifndef GL_APPLE_flush_buffer_range +#define GL_APPLE_flush_buffer_range 1 +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 +typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); +#endif +#endif /* GL_APPLE_flush_buffer_range */ + +#ifndef GL_APPLE_object_purgeable +#define GL_APPLE_object_purgeable 1 +#define GL_BUFFER_OBJECT_APPLE 0x85B3 +#define GL_RELEASED_APPLE 0x8A19 +#define GL_VOLATILE_APPLE 0x8A1A +#define GL_RETAINED_APPLE 0x8A1B +#define GL_UNDEFINED_APPLE 0x8A1C +#define GL_PURGEABLE_APPLE 0x8A1D +typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#endif +#endif /* GL_APPLE_object_purgeable */ + +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_RGB_RAW_422_APPLE 0x8A51 +#endif /* GL_APPLE_rgb_422 */ + +#ifndef GL_APPLE_row_bytes +#define GL_APPLE_row_bytes 1 +#define GL_PACK_ROW_BYTES_APPLE 0x8A15 +#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 +#endif /* GL_APPLE_row_bytes */ + +#ifndef GL_APPLE_specular_vector +#define GL_APPLE_specular_vector 1 +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#endif /* GL_APPLE_specular_vector */ + +#ifndef GL_APPLE_texture_range +#define GL_APPLE_texture_range 1 +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF +typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_APPLE_texture_range */ + +#ifndef GL_APPLE_transform_hint +#define GL_APPLE_transform_hint 1 +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#endif /* GL_APPLE_transform_hint */ + +#ifndef GL_APPLE_vertex_array_object +#define GL_APPLE_vertex_array_object 1 +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); +GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); +#endif +#endif /* GL_APPLE_vertex_array_object */ + +#ifndef GL_APPLE_vertex_array_range +#define GL_APPLE_vertex_array_range 1 +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_STORAGE_CLIENT_APPLE 0x85B4 +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); +#endif +#endif /* GL_APPLE_vertex_array_range */ + +#ifndef GL_APPLE_vertex_program_evaluators +#define GL_APPLE_vertex_program_evaluators 1 +#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 +#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 +#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 +#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 +#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 +#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 +#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 +#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 +#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 +#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#endif +#endif /* GL_APPLE_vertex_program_evaluators */ + +#ifndef GL_APPLE_ycbcr_422 +#define GL_APPLE_ycbcr_422 1 +#define GL_YCBCR_422_APPLE 0x85B9 +#endif /* GL_APPLE_ycbcr_422 */ + +#ifndef GL_ATI_draw_buffers +#define GL_ATI_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER15_ATI 0x8834 +typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ATI_draw_buffers */ + +#ifndef GL_ATI_element_array +#define GL_ATI_element_array 1 +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); +#endif +#endif /* GL_ATI_element_array */ + +#ifndef GL_ATI_envmap_bumpmap +#define GL_ATI_envmap_bumpmap 1 +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_DUDV_ATI 0x8779 +#define GL_DU8DV8_ATI 0x877A +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_TARGET_ATI 0x877C +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); +GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); +GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); +#endif +#endif /* GL_ATI_envmap_bumpmap */ + +#ifndef GL_ATI_fragment_shader +#define GL_ATI_fragment_shader 1 +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_RED_BIT_ATI 0x00000001 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); +typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); +typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); +GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glBeginFragmentShaderATI (void); +GLAPI void APIENTRY glEndFragmentShaderATI (void); +GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); +GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); +GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); +#endif +#endif /* GL_ATI_fragment_shader */ + +#ifndef GL_ATI_map_object_buffer +#define GL_ATI_map_object_buffer 1 +typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); +#endif +#endif /* GL_ATI_map_object_buffer */ + +#ifndef GL_ATI_meminfo +#define GL_ATI_meminfo 1 +#define GL_VBO_FREE_MEMORY_ATI 0x87FB +#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC +#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD +#endif /* GL_ATI_meminfo */ + +#ifndef GL_ATI_pixel_format_float +#define GL_ATI_pixel_format_float 1 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#endif /* GL_ATI_pixel_format_float */ + +#ifndef GL_ATI_pn_triangles +#define GL_ATI_pn_triangles 1 +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); +GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_pn_triangles */ + +#ifndef GL_ATI_separate_stencil +#define GL_ATI_separate_stencil 1 +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#endif +#endif /* GL_ATI_separate_stencil */ + +#ifndef GL_ATI_text_fragment_shader +#define GL_ATI_text_fragment_shader 1 +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#endif /* GL_ATI_text_fragment_shader */ + +#ifndef GL_ATI_texture_env_combine3 +#define GL_ATI_texture_env_combine3 1 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#endif /* GL_ATI_texture_env_combine3 */ + +#ifndef GL_ATI_texture_float +#define GL_ATI_texture_float 1 +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#endif /* GL_ATI_texture_float */ + +#ifndef GL_ATI_texture_mirror_once +#define GL_ATI_texture_mirror_once 1 +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#endif /* GL_ATI_texture_mirror_once */ + +#ifndef GL_ATI_vertex_array_object +#define GL_ATI_vertex_array_object 1 +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage); +typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage); +GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); +GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_array_object */ + +#ifndef GL_ATI_vertex_attrib_array_object +#define GL_ATI_vertex_attrib_array_object 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_attrib_array_object */ + +#ifndef GL_ATI_vertex_streams +#define GL_ATI_vertex_streams 1 +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SOURCE_ATI 0x8774 +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); +GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); +GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); +GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); +GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); +GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); +GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); +GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); +GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); +GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_vertex_streams */ + +#ifndef GL_EXT_422_pixels +#define GL_EXT_422_pixels 1 +#define GL_422_EXT 0x80CC +#define GL_422_REV_EXT 0x80CD +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_REV_AVERAGE_EXT 0x80CF +#endif /* GL_EXT_422_pixels */ + +#ifndef GL_EXT_abgr +#define GL_EXT_abgr 1 +#define GL_ABGR_EXT 0x8000 +#endif /* GL_EXT_abgr */ + +#ifndef GL_EXT_bgra +#define GL_EXT_bgra 1 +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA_EXT 0x80E1 +#endif /* GL_EXT_bgra */ + +#ifndef GL_EXT_bindable_uniform +#define GL_EXT_bindable_uniform 1 +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF +typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); +typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); +typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); +GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); +GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); +#endif +#endif /* GL_EXT_bindable_uniform */ + +#ifndef GL_EXT_blend_color +#define GL_EXT_blend_color 1 +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_BLEND_COLOR_EXT 0x8005 +typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#endif +#endif /* GL_EXT_blend_color */ + +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 1 +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_EXT_blend_equation_separate */ + +#ifndef GL_EXT_blend_func_separate +#define GL_EXT_blend_func_separate 1 +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_EXT_blend_func_separate */ + +#ifndef GL_EXT_blend_logic_op +#define GL_EXT_blend_logic_op 1 +#endif /* GL_EXT_blend_logic_op */ + +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_BLEND_EQUATION_EXT 0x8009 +typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); +#endif +#endif /* GL_EXT_blend_minmax */ + +#ifndef GL_EXT_blend_subtract +#define GL_EXT_blend_subtract 1 +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#endif /* GL_EXT_blend_subtract */ + +#ifndef GL_EXT_clip_volume_hint +#define GL_EXT_clip_volume_hint 1 +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#endif /* GL_EXT_clip_volume_hint */ + +#ifndef GL_EXT_cmyka +#define GL_EXT_cmyka 1 +#define GL_CMYK_EXT 0x800C +#define GL_CMYKA_EXT 0x800D +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_UNPACK_CMYK_HINT_EXT 0x800F +#endif /* GL_EXT_cmyka */ + +#ifndef GL_EXT_color_subtable +#define GL_EXT_color_subtable 1 +typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#endif +#endif /* GL_EXT_color_subtable */ + +#ifndef GL_EXT_compiled_vertex_array +#define GL_EXT_compiled_vertex_array 1 +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 +typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); +GLAPI void APIENTRY glUnlockArraysEXT (void); +#endif +#endif /* GL_EXT_compiled_vertex_array */ + +#ifndef GL_EXT_convolution +#define GL_EXT_convolution 1 +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_REDUCE_EXT 0x8016 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#endif +#endif /* GL_EXT_convolution */ + +#ifndef GL_EXT_coordinate_frame +#define GL_EXT_coordinate_frame 1 +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP2_BINORMAL_EXT 0x8447 +typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); +typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); +typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); +typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); +typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); +typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); +typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); +typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); +typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); +typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); +typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); +GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); +GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); +GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); +GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); +GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); +GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); +GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); +GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); +GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); +GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); +GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); +GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); +GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); +GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_coordinate_frame */ + +#ifndef GL_EXT_copy_texture +#define GL_EXT_copy_texture 1 +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_copy_texture */ + +#ifndef GL_EXT_cull_vertex +#define GL_EXT_cull_vertex 1 +#define GL_CULL_VERTEX_EXT 0x81AA +#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB +#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC +typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); +GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_cull_vertex */ + +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_EXT_debug_label */ + +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPopGroupMarkerEXT (void); +#endif +#endif /* GL_EXT_debug_marker */ + +#ifndef GL_EXT_depth_bounds_test +#define GL_EXT_depth_bounds_test 1 +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); +#endif +#endif /* GL_EXT_depth_bounds_test */ + +#ifndef GL_EXT_direct_state_access +#define GL_EXT_direct_state_access 1 +#define GL_PROGRAM_MATRIX_EXT 0x8E2D +#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E +#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F +typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); +typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); +typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); +typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); +GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); +GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); +GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); +GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); +GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); +GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); +GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); +GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); +GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); +GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); +GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); +GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); +GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); +GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); +GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); +GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); +GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); +GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); +#endif +#endif /* GL_EXT_direct_state_access */ + +#ifndef GL_EXT_draw_buffers2 +#define GL_EXT_draw_buffers2 1 +typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#endif +#endif /* GL_EXT_draw_buffers2 */ + +#ifndef GL_EXT_draw_instanced +#define GL_EXT_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_EXT_draw_instanced */ + +#ifndef GL_EXT_draw_range_elements +#define GL_EXT_draw_range_elements 1 +#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 +#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#endif +#endif /* GL_EXT_draw_range_elements */ + +#ifndef GL_EXT_fog_coord +#define GL_EXT_fog_coord 1 +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 +typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); +GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); +GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); +GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_fog_coord */ + +#ifndef GL_EXT_framebuffer_blit +#define GL_EXT_framebuffer_blit 1 +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +#endif /* GL_EXT_framebuffer_blit */ + +#ifndef GL_EXT_framebuffer_multisample +#define GL_EXT_framebuffer_multisample 1 +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_framebuffer_multisample */ + +#ifndef GL_EXT_framebuffer_multisample_blit_scaled +#define GL_EXT_framebuffer_multisample_blit_scaled 1 +#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA +#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB +#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ + +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 1 +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); +#endif +#endif /* GL_EXT_framebuffer_object */ + +#ifndef GL_EXT_framebuffer_sRGB +#define GL_EXT_framebuffer_sRGB 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#endif /* GL_EXT_framebuffer_sRGB */ + +#ifndef GL_EXT_geometry_shader4 +#define GL_EXT_geometry_shader4 1 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +#endif +#endif /* GL_EXT_geometry_shader4 */ + +#ifndef GL_EXT_gpu_program_parameters +#define GL_EXT_gpu_program_parameters 1 +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#endif +#endif /* GL_EXT_gpu_program_parameters */ + +#ifndef GL_EXT_gpu_shader4 +#define GL_EXT_gpu_shader4 1 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 +typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); +#endif +#endif /* GL_EXT_gpu_shader4 */ + +#ifndef GL_EXT_histogram +#define GL_EXT_histogram 1 +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK_EXT 0x8030 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogramEXT (GLenum target); +GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); +#endif +#endif /* GL_EXT_histogram */ + +#ifndef GL_EXT_index_array_formats +#define GL_EXT_index_array_formats 1 +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#endif /* GL_EXT_index_array_formats */ + +#ifndef GL_EXT_index_func +#define GL_EXT_index_func 1 +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); +#endif +#endif /* GL_EXT_index_func */ + +#ifndef GL_EXT_index_material +#define GL_EXT_index_material 1 +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_index_material */ + +#ifndef GL_EXT_index_texture +#define GL_EXT_index_texture 1 +#endif /* GL_EXT_index_texture */ + +#ifndef GL_EXT_light_texture +#define GL_EXT_light_texture 1 +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_ATTENUATION_EXT 0x834D +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); +GLAPI void APIENTRY glTextureLightEXT (GLenum pname); +GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_light_texture */ + +#ifndef GL_EXT_misc_attribute +#define GL_EXT_misc_attribute 1 +#endif /* GL_EXT_misc_attribute */ + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#endif +#endif /* GL_EXT_multi_draw_arrays */ + +#ifndef GL_EXT_multisample +#define GL_EXT_multisample 1 +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_1PASS_EXT 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 +typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); +#endif +#endif /* GL_EXT_multisample */ + +#ifndef GL_EXT_packed_depth_stencil +#define GL_EXT_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#endif /* GL_EXT_packed_depth_stencil */ + +#ifndef GL_EXT_packed_float +#define GL_EXT_packed_float 1 +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C +#endif /* GL_EXT_packed_float */ + +#ifndef GL_EXT_packed_pixels +#define GL_EXT_packed_pixels 1 +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 +#endif /* GL_EXT_packed_pixels */ + +#ifndef GL_EXT_paletted_texture +#define GL_EXT_paletted_texture 1 +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data); +GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_paletted_texture */ + +#ifndef GL_EXT_pixel_buffer_object +#define GL_EXT_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#endif /* GL_EXT_pixel_buffer_object */ + +#ifndef GL_EXT_pixel_transform +#define GL_EXT_pixel_transform 1 +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_CUBIC_EXT 0x8334 +#define GL_AVERAGE_EXT 0x8335 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_pixel_transform */ + +#ifndef GL_EXT_pixel_transform_color_table +#define GL_EXT_pixel_transform_color_table 1 +#endif /* GL_EXT_pixel_transform_color_table */ + +#ifndef GL_EXT_point_parameters +#define GL_EXT_point_parameters 1 +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_EXT_point_parameters */ + +#ifndef GL_EXT_polygon_offset +#define GL_EXT_polygon_offset 1 +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 +typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); +#endif +#endif /* GL_EXT_polygon_offset */ + +#ifndef GL_EXT_provoking_vertex +#define GL_EXT_provoking_vertex 1 +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_PROVOKING_VERTEX_EXT 0x8E4F +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); +#endif +#endif /* GL_EXT_provoking_vertex */ + +#ifndef GL_EXT_rescale_normal +#define GL_EXT_rescale_normal 1 +#define GL_RESCALE_NORMAL_EXT 0x803A +#endif /* GL_EXT_rescale_normal */ + +#ifndef GL_EXT_secondary_color +#define GL_EXT_secondary_color 1 +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_secondary_color */ + +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); +typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); +GLAPI void APIENTRY glActiveProgramEXT (GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); +#endif +#endif /* GL_EXT_separate_shader_objects */ + +#ifndef GL_EXT_separate_specular_color +#define GL_EXT_separate_specular_color 1 +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA +#endif /* GL_EXT_separate_specular_color */ + +#ifndef GL_EXT_shader_image_load_formatted +#define GL_EXT_shader_image_load_formatted 1 +#endif /* GL_EXT_shader_image_load_formatted */ + +#ifndef GL_EXT_shader_image_load_store +#define GL_EXT_shader_image_load_store 1 +#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A +#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B +#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C +#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D +#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E +#define GL_IMAGE_1D_EXT 0x904C +#define GL_IMAGE_2D_EXT 0x904D +#define GL_IMAGE_3D_EXT 0x904E +#define GL_IMAGE_2D_RECT_EXT 0x904F +#define GL_IMAGE_CUBE_EXT 0x9050 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_IMAGE_1D_ARRAY_EXT 0x9052 +#define GL_IMAGE_2D_ARRAY_EXT 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 +#define GL_INT_IMAGE_1D_EXT 0x9057 +#define GL_INT_IMAGE_2D_EXT 0x9058 +#define GL_INT_IMAGE_3D_EXT 0x9059 +#define GL_INT_IMAGE_2D_RECT_EXT 0x905A +#define GL_INT_IMAGE_CUBE_EXT 0x905B +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D +#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C +#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D +#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 +#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 +#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); +#endif +#endif /* GL_EXT_shader_image_load_store */ + +#ifndef GL_EXT_shader_integer_mix +#define GL_EXT_shader_integer_mix 1 +#endif /* GL_EXT_shader_integer_mix */ + +#ifndef GL_EXT_shadow_funcs +#define GL_EXT_shadow_funcs 1 +#endif /* GL_EXT_shadow_funcs */ + +#ifndef GL_EXT_shared_texture_palette +#define GL_EXT_shared_texture_palette 1 +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#endif /* GL_EXT_shared_texture_palette */ + +#ifndef GL_EXT_stencil_clear_tag +#define GL_EXT_stencil_clear_tag 1 +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 +typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); +#endif +#endif /* GL_EXT_stencil_clear_tag */ + +#ifndef GL_EXT_stencil_two_side +#define GL_EXT_stencil_two_side 1 +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); +#endif +#endif /* GL_EXT_stencil_two_side */ + +#ifndef GL_EXT_stencil_wrap +#define GL_EXT_stencil_wrap 1 +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_DECR_WRAP_EXT 0x8508 +#endif /* GL_EXT_stencil_wrap */ + +#ifndef GL_EXT_subtexture +#define GL_EXT_subtexture 1 +typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_subtexture */ + +#ifndef GL_EXT_texture +#define GL_EXT_texture 1 +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16_EXT 0x803E +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16_EXT 0x804D +#define GL_RGB2_EXT 0x804E +#define GL_RGB4_EXT 0x804F +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8_EXT 0x8051 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGBA8_EXT 0x8058 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16_EXT 0x805B +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_REPLACE_EXT 0x8062 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#endif /* GL_EXT_texture */ + +#ifndef GL_EXT_texture3D +#define GL_EXT_texture3D 1 +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 +typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_texture3D */ + +#ifndef GL_EXT_texture_array +#define GL_EXT_texture_array 1 +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +#endif /* GL_EXT_texture_array */ + +#ifndef GL_EXT_texture_buffer_object +#define GL_EXT_texture_buffer_object 1 +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E +typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_EXT_texture_buffer_object */ + +#ifndef GL_EXT_texture_compression_latc +#define GL_EXT_texture_compression_latc 1 +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 +#endif /* GL_EXT_texture_compression_latc */ + +#ifndef GL_EXT_texture_compression_rgtc +#define GL_EXT_texture_compression_rgtc 1 +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE +#endif /* GL_EXT_texture_compression_rgtc */ + +#ifndef GL_EXT_texture_compression_s3tc +#define GL_EXT_texture_compression_s3tc 1 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#endif /* GL_EXT_texture_compression_s3tc */ + +#ifndef GL_EXT_texture_cube_map +#define GL_EXT_texture_cube_map 1 +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C +#endif /* GL_EXT_texture_cube_map */ + +#ifndef GL_EXT_texture_env_add +#define GL_EXT_texture_env_add 1 +#endif /* GL_EXT_texture_env_add */ + +#ifndef GL_EXT_texture_env_combine +#define GL_EXT_texture_env_combine 1 +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_CONSTANT_EXT 0x8576 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND2_ALPHA_EXT 0x859A +#endif /* GL_EXT_texture_env_combine */ + +#ifndef GL_EXT_texture_env_dot3 +#define GL_EXT_texture_env_dot3 1 +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 +#endif /* GL_EXT_texture_env_dot3 */ + +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif /* GL_EXT_texture_filter_anisotropic */ + +#ifndef GL_EXT_texture_integer +#define GL_EXT_texture_integer 1 +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGB8UI_EXT 0x8D7D +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGB32I_EXT 0x8D83 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGB16I_EXT 0x8D89 +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGB8I_EXT 0x8D8F +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); +typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); +GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#endif +#endif /* GL_EXT_texture_integer */ + +#ifndef GL_EXT_texture_lod_bias +#define GL_EXT_texture_lod_bias 1 +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 +#endif /* GL_EXT_texture_lod_bias */ + +#ifndef GL_EXT_texture_mirror_clamp +#define GL_EXT_texture_mirror_clamp 1 +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#endif /* GL_EXT_texture_mirror_clamp */ + +#ifndef GL_EXT_texture_object +#define GL_EXT_texture_object 1 +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_3D_BINDING_EXT 0x806A +typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); +typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); +GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); +GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); +GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); +GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); +GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#endif +#endif /* GL_EXT_texture_object */ + +#ifndef GL_EXT_texture_perturb_normal +#define GL_EXT_texture_perturb_normal 1 +#define GL_PERTURB_EXT 0x85AE +#define GL_TEXTURE_NORMAL_EXT 0x85AF +typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); +#endif +#endif /* GL_EXT_texture_perturb_normal */ + +#ifndef GL_EXT_texture_sRGB +#define GL_EXT_texture_sRGB 1 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#endif /* GL_EXT_texture_sRGB */ + +#ifndef GL_EXT_texture_sRGB_decode +#define GL_EXT_texture_sRGB_decode 1 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#endif /* GL_EXT_texture_sRGB_decode */ + +#ifndef GL_EXT_texture_shared_exponent +#define GL_EXT_texture_shared_exponent 1 +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F +#endif /* GL_EXT_texture_shared_exponent */ + +#ifndef GL_EXT_texture_snorm +#define GL_EXT_texture_snorm 1 +#define GL_ALPHA_SNORM 0x9010 +#define GL_LUMINANCE_SNORM 0x9011 +#define GL_LUMINANCE_ALPHA_SNORM 0x9012 +#define GL_INTENSITY_SNORM 0x9013 +#define GL_ALPHA8_SNORM 0x9014 +#define GL_LUMINANCE8_SNORM 0x9015 +#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 +#define GL_INTENSITY8_SNORM 0x9017 +#define GL_ALPHA16_SNORM 0x9018 +#define GL_LUMINANCE16_SNORM 0x9019 +#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A +#define GL_INTENSITY16_SNORM 0x901B +#define GL_RED_SNORM 0x8F90 +#define GL_RG_SNORM 0x8F91 +#define GL_RGB_SNORM 0x8F92 +#define GL_RGBA_SNORM 0x8F93 +#endif /* GL_EXT_texture_snorm */ + +#ifndef GL_EXT_texture_swizzle +#define GL_EXT_texture_swizzle 1 +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 +#endif /* GL_EXT_texture_swizzle */ + +#ifndef GL_EXT_timer_query +#define GL_EXT_timer_query 1 +#define GL_TIME_ELAPSED_EXT 0x88BF +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +#endif +#endif /* GL_EXT_timer_query */ + +#ifndef GL_EXT_transform_feedback +#define GL_EXT_transform_feedback 1 +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 +#define GL_RASTERIZER_DISCARD_EXT 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackEXT (void); +GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#endif +#endif /* GL_EXT_transform_feedback */ + +#ifndef GL_EXT_vertex_array +#define GL_EXT_vertex_array 1 +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); +typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); +typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params); +typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glArrayElementEXT (GLint i); +GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); +GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params); +GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#endif +#endif /* GL_EXT_vertex_array */ + +#ifndef GL_EXT_vertex_array_bgra +#define GL_EXT_vertex_array_bgra 1 +#endif /* GL_EXT_vertex_array_bgra */ + +#ifndef GL_EXT_vertex_attrib_64bit +#define GL_EXT_vertex_attrib_64bit 1 +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#define GL_DOUBLE_MAT2_EXT 0x8F46 +#define GL_DOUBLE_MAT3_EXT 0x8F47 +#define GL_DOUBLE_MAT4_EXT 0x8F48 +#define GL_DOUBLE_MAT2x3_EXT 0x8F49 +#define GL_DOUBLE_MAT2x4_EXT 0x8F4A +#define GL_DOUBLE_MAT3x2_EXT 0x8F4B +#define GL_DOUBLE_MAT3x4_EXT 0x8F4C +#define GL_DOUBLE_MAT4x2_EXT 0x8F4D +#define GL_DOUBLE_MAT4x3_EXT 0x8F4E +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); +#endif +#endif /* GL_EXT_vertex_attrib_64bit */ + +#ifndef GL_EXT_vertex_shader +#define GL_EXT_vertex_shader 1 +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); +typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); +typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); +typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); +typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); +typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); +typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); +typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); +typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); +typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); +typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); +typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); +typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); +typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data); +typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVertexShaderEXT (void); +GLAPI void APIENTRY glEndVertexShaderEXT (void); +GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); +GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); +GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); +GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); +GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); +GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); +GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); +GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); +GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); +GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); +GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); +GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); +GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr); +GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); +GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); +GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); +GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); +GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); +GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); +GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); +GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); +GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data); +GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +#endif +#endif /* GL_EXT_vertex_shader */ + +#ifndef GL_EXT_vertex_weighting +#define GL_EXT_vertex_weighting 1 +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_MODELVIEW0_EXT 0x1700 +#define GL_MODELVIEW1_EXT 0x850A +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); +GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); +GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_vertex_weighting */ + +#ifndef GL_EXT_x11_sync_object +#define GL_EXT_x11_sync_object 1 +#define GL_SYNC_X11_FENCE_EXT 0x90E1 +typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#endif +#endif /* GL_EXT_x11_sync_object */ + +#ifndef GL_GREMEDY_frame_terminator +#define GL_GREMEDY_frame_terminator 1 +typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); +#endif +#endif /* GL_GREMEDY_frame_terminator */ + +#ifndef GL_GREMEDY_string_marker +#define GL_GREMEDY_string_marker 1 +typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string); +#endif +#endif /* GL_GREMEDY_string_marker */ + +#ifndef GL_HP_convolution_border_modes +#define GL_HP_convolution_border_modes 1 +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#endif /* GL_HP_convolution_border_modes */ + +#ifndef GL_HP_image_transform +#define GL_HP_image_transform 1 +#define GL_IMAGE_SCALE_X_HP 0x8155 +#define GL_IMAGE_SCALE_Y_HP 0x8156 +#define GL_IMAGE_TRANSLATE_X_HP 0x8157 +#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 +#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 +#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A +#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B +#define GL_IMAGE_MAG_FILTER_HP 0x815C +#define GL_IMAGE_MIN_FILTER_HP 0x815D +#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E +#define GL_CUBIC_HP 0x815F +#define GL_AVERAGE_HP 0x8160 +#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 +#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 +#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_HP_image_transform */ + +#ifndef GL_HP_occlusion_test +#define GL_HP_occlusion_test 1 +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#endif /* GL_HP_occlusion_test */ + +#ifndef GL_HP_texture_lighting +#define GL_HP_texture_lighting 1 +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#endif /* GL_HP_texture_lighting */ + +#ifndef GL_IBM_cull_vertex +#define GL_IBM_cull_vertex 1 +#define GL_CULL_VERTEX_IBM 103050 +#endif /* GL_IBM_cull_vertex */ + +#ifndef GL_IBM_multimode_draw_arrays +#define GL_IBM_multimode_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#endif +#endif /* GL_IBM_multimode_draw_arrays */ + +#ifndef GL_IBM_rasterpos_clip +#define GL_IBM_rasterpos_clip 1 +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#endif /* GL_IBM_rasterpos_clip */ + +#ifndef GL_IBM_static_data +#define GL_IBM_static_data 1 +#define GL_ALL_STATIC_DATA_IBM 103060 +#define GL_STATIC_VERTEX_ARRAY_IBM 103061 +typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); +#endif +#endif /* GL_IBM_static_data */ + +#ifndef GL_IBM_texture_mirrored_repeat +#define GL_IBM_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#endif /* GL_IBM_texture_mirrored_repeat */ + +#ifndef GL_IBM_vertex_array_lists +#define GL_IBM_vertex_array_lists 1 +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 +typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride); +GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#endif +#endif /* GL_IBM_vertex_array_lists */ + +#ifndef GL_INGR_blend_func_separate +#define GL_INGR_blend_func_separate 1 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_INGR_blend_func_separate */ + +#ifndef GL_INGR_color_clamp +#define GL_INGR_color_clamp 1 +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 +#endif /* GL_INGR_color_clamp */ + +#ifndef GL_INGR_interlace_read +#define GL_INGR_interlace_read 1 +#define GL_INTERLACE_READ_INGR 0x8568 +#endif /* GL_INGR_interlace_read */ + +#ifndef GL_INTEL_fragment_shader_ordering +#define GL_INTEL_fragment_shader_ordering 1 +#endif /* GL_INTEL_fragment_shader_ordering */ + +#ifndef GL_INTEL_map_texture +#define GL_INTEL_map_texture 1 +#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF +#define GL_LAYOUT_DEFAULT_INTEL 0 +#define GL_LAYOUT_LINEAR_INTEL 1 +#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 +typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); +typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); +GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); +GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#endif +#endif /* GL_INTEL_map_texture */ + +#ifndef GL_INTEL_parallel_arrays +#define GL_INTEL_parallel_arrays 1 +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 +typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer); +GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer); +#endif +#endif /* GL_INTEL_parallel_arrays */ + +#ifndef GL_INTEL_performance_query +#define GL_INTEL_performance_query 1 +#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 +#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 +#define GL_PERFQUERY_WAIT_INTEL 0x83FB +#define GL_PERFQUERY_FLUSH_INTEL 0x83FA +#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 +#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 +#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 +#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 +#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 +#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 +#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 +#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 +#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 +#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA +#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB +#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC +#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD +#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE +#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF +#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 +typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); +typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); +typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); +typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); +typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); +typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); +GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); +GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); +GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); +GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); +GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#endif +#endif /* GL_INTEL_performance_query */ + +#ifndef GL_MESAX_texture_stack +#define GL_MESAX_texture_stack 1 +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +#endif /* GL_MESAX_texture_stack */ + +#ifndef GL_MESA_pack_invert +#define GL_MESA_pack_invert 1 +#define GL_PACK_INVERT_MESA 0x8758 +#endif /* GL_MESA_pack_invert */ + +#ifndef GL_MESA_resize_buffers +#define GL_MESA_resize_buffers 1 +typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glResizeBuffersMESA (void); +#endif +#endif /* GL_MESA_resize_buffers */ + +#ifndef GL_MESA_window_pos +#define GL_MESA_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); +#endif +#endif /* GL_MESA_window_pos */ + +#ifndef GL_MESA_ycbcr_texture +#define GL_MESA_ycbcr_texture 1 +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_YCBCR_MESA 0x8757 +#endif /* GL_MESA_ycbcr_texture */ + +#ifndef GL_NVX_conditional_render +#define GL_NVX_conditional_render 1 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); +GLAPI void APIENTRY glEndConditionalRenderNVX (void); +#endif +#endif /* GL_NVX_conditional_render */ + +#ifndef GL_NVX_gpu_memory_info +#define GL_NVX_gpu_memory_info 1 +#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 +#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 +#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 +#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A +#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B +#endif /* GL_NVX_gpu_memory_info */ + +#ifndef GL_NV_bindless_multi_draw_indirect +#define GL_NV_bindless_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#endif +#endif /* GL_NV_bindless_multi_draw_indirect */ + +#ifndef GL_NV_bindless_texture +#define GL_NV_bindless_texture 1 +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); +#endif +#endif /* GL_NV_bindless_texture */ + +#ifndef GL_NV_blend_equation_advanced +#define GL_NV_blend_equation_advanced 1 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLUE_NV 0x1905 +#define GL_COLORBURN_NV 0x929A +#define GL_COLORDODGE_NV 0x9299 +#define GL_CONJOINT_NV 0x9284 +#define GL_CONTRAST_NV 0x92A1 +#define GL_DARKEN_NV 0x9297 +#define GL_DIFFERENCE_NV 0x929E +#define GL_DISJOINT_NV 0x9283 +#define GL_DST_ATOP_NV 0x928F +#define GL_DST_IN_NV 0x928B +#define GL_DST_NV 0x9287 +#define GL_DST_OUT_NV 0x928D +#define GL_DST_OVER_NV 0x9289 +#define GL_EXCLUSION_NV 0x92A0 +#define GL_GREEN_NV 0x1904 +#define GL_HARDLIGHT_NV 0x929B +#define GL_HARDMIX_NV 0x92A9 +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_INVERT_OVG_NV 0x92B4 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_LIGHTEN_NV 0x9298 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_MINUS_NV 0x929F +#define GL_MULTIPLY_NV 0x9294 +#define GL_OVERLAY_NV 0x9296 +#define GL_PINLIGHT_NV 0x92A8 +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_PLUS_NV 0x9291 +#define GL_RED_NV 0x1903 +#define GL_SCREEN_NV 0x9295 +#define GL_SOFTLIGHT_NV 0x929C +#define GL_SRC_ATOP_NV 0x928E +#define GL_SRC_IN_NV 0x928A +#define GL_SRC_NV 0x9286 +#define GL_SRC_OUT_NV 0x928C +#define GL_SRC_OVER_NV 0x9288 +#define GL_UNCORRELATED_NV 0x9282 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_XOR_NV 0x1506 +typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); +GLAPI void APIENTRY glBlendBarrierNV (void); +#endif +#endif /* GL_NV_blend_equation_advanced */ + +#ifndef GL_NV_blend_equation_advanced_coherent +#define GL_NV_blend_equation_advanced_coherent 1 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#endif /* GL_NV_blend_equation_advanced_coherent */ + +#ifndef GL_NV_blend_square +#define GL_NV_blend_square 1 +#endif /* GL_NV_blend_square */ + +#ifndef GL_NV_compute_program5 +#define GL_NV_compute_program5 1 +#define GL_COMPUTE_PROGRAM_NV 0x90FB +#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC +#endif /* GL_NV_compute_program5 */ + +#ifndef GL_NV_conditional_render +#define GL_NV_conditional_render 1 +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRenderNV (void); +#endif +#endif /* GL_NV_conditional_render */ + +#ifndef GL_NV_copy_depth_to_color +#define GL_NV_copy_depth_to_color 1 +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#endif /* GL_NV_copy_depth_to_color */ + +#ifndef GL_NV_copy_image +#define GL_NV_copy_image 1 +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#endif +#endif /* GL_NV_copy_image */ + +#ifndef GL_NV_deep_texture3D +#define GL_NV_deep_texture3D 1 +#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 +#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 +#endif /* GL_NV_deep_texture3D */ + +#ifndef GL_NV_depth_buffer_float +#define GL_NV_depth_buffer_float 1 +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF +typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); +typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); +GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); +#endif +#endif /* GL_NV_depth_buffer_float */ + +#ifndef GL_NV_depth_clamp +#define GL_NV_depth_clamp 1 +#define GL_DEPTH_CLAMP_NV 0x864F +#endif /* GL_NV_depth_clamp */ + +#ifndef GL_NV_draw_texture +#define GL_NV_draw_texture 1 +typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#endif +#endif /* GL_NV_draw_texture */ + +#ifndef GL_NV_evaluators +#define GL_NV_evaluators 1 +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); +#endif +#endif /* GL_NV_evaluators */ + +#ifndef GL_NV_explicit_multisample +#define GL_NV_explicit_multisample 1 +#define GL_SAMPLE_POSITION_NV 0x8E50 +#define GL_SAMPLE_MASK_NV 0x8E51 +#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 +#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 +#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 +#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 +#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 +#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 +#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); +GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); +#endif +#endif /* GL_NV_explicit_multisample */ + +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); +GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GLAPI void APIENTRY glFinishFenceNV (GLuint fence); +GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +#endif /* GL_NV_fence */ + +#ifndef GL_NV_float_buffer +#define GL_NV_float_buffer 1 +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#endif /* GL_NV_float_buffer */ + +#ifndef GL_NV_fog_distance +#define GL_NV_fog_distance 1 +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_EYE_RADIAL_NV 0x855B +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C +#endif /* GL_NV_fog_distance */ + +#ifndef GL_NV_fragment_program +#define GL_NV_fragment_program 1 +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#endif +#endif /* GL_NV_fragment_program */ + +#ifndef GL_NV_fragment_program2 +#define GL_NV_fragment_program2 1 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#endif /* GL_NV_fragment_program2 */ + +#ifndef GL_NV_fragment_program4 +#define GL_NV_fragment_program4 1 +#endif /* GL_NV_fragment_program4 */ + +#ifndef GL_NV_fragment_program_option +#define GL_NV_fragment_program_option 1 +#endif /* GL_NV_fragment_program_option */ + +#ifndef GL_NV_framebuffer_multisample_coverage +#define GL_NV_framebuffer_multisample_coverage 1 +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_NV_framebuffer_multisample_coverage */ + +#ifndef GL_NV_geometry_program4 +#define GL_NV_geometry_program4 1 +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 +typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); +GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_NV_geometry_program4 */ + +#ifndef GL_NV_geometry_shader4 +#define GL_NV_geometry_shader4 1 +#endif /* GL_NV_geometry_shader4 */ + +#ifndef GL_NV_gpu_program4 +#define GL_NV_gpu_program4 1 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); +#endif +#endif /* GL_NV_gpu_program4 */ + +#ifndef GL_NV_gpu_program5 +#define GL_NV_gpu_program5 1 +#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C +#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F +#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); +#endif +#endif /* GL_NV_gpu_program5 */ + +#ifndef GL_NV_gpu_program5_mem_extended +#define GL_NV_gpu_program5_mem_extended 1 +#endif /* GL_NV_gpu_program5_mem_extended */ + +#ifndef GL_NV_gpu_shader5 +#define GL_NV_gpu_shader5 1 +#endif /* GL_NV_gpu_shader5 */ + +#ifndef GL_NV_half_float +#define GL_NV_half_float 1 +typedef unsigned short GLhalfNV; +#define GL_HALF_FLOAT_NV 0x140B +typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); +typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); +typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); +GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); +GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); +GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); +GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); +GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); +GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); +GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +#endif +#endif /* GL_NV_half_float */ + +#ifndef GL_NV_light_max_exponent +#define GL_NV_light_max_exponent 1 +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 +#endif /* GL_NV_light_max_exponent */ + +#ifndef GL_NV_multisample_coverage +#define GL_NV_multisample_coverage 1 +#define GL_COLOR_SAMPLES_NV 0x8E20 +#endif /* GL_NV_multisample_coverage */ + +#ifndef GL_NV_multisample_filter_hint +#define GL_NV_multisample_filter_hint 1 +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#endif /* GL_NV_multisample_filter_hint */ + +#ifndef GL_NV_occlusion_query +#define GL_NV_occlusion_query 1 +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glEndOcclusionQueryNV (void); +GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_occlusion_query */ + +#ifndef GL_NV_packed_depth_stencil +#define GL_NV_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#endif /* GL_NV_packed_depth_stencil */ + +#ifndef GL_NV_parameter_buffer_object +#define GL_NV_parameter_buffer_object 1 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#endif +#endif /* GL_NV_parameter_buffer_object */ + +#ifndef GL_NV_parameter_buffer_object2 +#define GL_NV_parameter_buffer_object2 1 +#endif /* GL_NV_parameter_buffer_object2 */ + +#ifndef GL_NV_path_rendering +#define GL_NV_path_rendering 1 +#define GL_PATH_FORMAT_SVG_NV 0x9070 +#define GL_PATH_FORMAT_PS_NV 0x9071 +#define GL_STANDARD_FONT_NAME_NV 0x9072 +#define GL_SYSTEM_FONT_NAME_NV 0x9073 +#define GL_FILE_NAME_NV 0x9074 +#define GL_PATH_STROKE_WIDTH_NV 0x9075 +#define GL_PATH_END_CAPS_NV 0x9076 +#define GL_PATH_INITIAL_END_CAP_NV 0x9077 +#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 +#define GL_PATH_JOIN_STYLE_NV 0x9079 +#define GL_PATH_MITER_LIMIT_NV 0x907A +#define GL_PATH_DASH_CAPS_NV 0x907B +#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C +#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D +#define GL_PATH_DASH_OFFSET_NV 0x907E +#define GL_PATH_CLIENT_LENGTH_NV 0x907F +#define GL_PATH_FILL_MODE_NV 0x9080 +#define GL_PATH_FILL_MASK_NV 0x9081 +#define GL_PATH_FILL_COVER_MODE_NV 0x9082 +#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 +#define GL_PATH_STROKE_MASK_NV 0x9084 +#define GL_COUNT_UP_NV 0x9088 +#define GL_COUNT_DOWN_NV 0x9089 +#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A +#define GL_CONVEX_HULL_NV 0x908B +#define GL_BOUNDING_BOX_NV 0x908D +#define GL_TRANSLATE_X_NV 0x908E +#define GL_TRANSLATE_Y_NV 0x908F +#define GL_TRANSLATE_2D_NV 0x9090 +#define GL_TRANSLATE_3D_NV 0x9091 +#define GL_AFFINE_2D_NV 0x9092 +#define GL_AFFINE_3D_NV 0x9094 +#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 +#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 +#define GL_UTF8_NV 0x909A +#define GL_UTF16_NV 0x909B +#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C +#define GL_PATH_COMMAND_COUNT_NV 0x909D +#define GL_PATH_COORD_COUNT_NV 0x909E +#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F +#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 +#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 +#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 +#define GL_SQUARE_NV 0x90A3 +#define GL_ROUND_NV 0x90A4 +#define GL_TRIANGULAR_NV 0x90A5 +#define GL_BEVEL_NV 0x90A6 +#define GL_MITER_REVERT_NV 0x90A7 +#define GL_MITER_TRUNCATE_NV 0x90A8 +#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 +#define GL_USE_MISSING_GLYPH_NV 0x90AA +#define GL_PATH_ERROR_POSITION_NV 0x90AB +#define GL_PATH_FOG_GEN_MODE_NV 0x90AC +#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD +#define GL_ADJACENT_PAIRS_NV 0x90AE +#define GL_FIRST_TO_REST_NV 0x90AF +#define GL_PATH_GEN_MODE_NV 0x90B0 +#define GL_PATH_GEN_COEFF_NV 0x90B1 +#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 +#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 +#define GL_PATH_STENCIL_FUNC_NV 0x90B7 +#define GL_PATH_STENCIL_REF_NV 0x90B8 +#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 +#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD +#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE +#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF +#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_MOVE_TO_NV 0x02 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_LINE_TO_NV 0x04 +#define GL_RELATIVE_LINE_TO_NV 0x05 +#define GL_HORIZONTAL_LINE_TO_NV 0x06 +#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 +#define GL_VERTICAL_LINE_TO_NV 0x08 +#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 +#define GL_QUADRATIC_CURVE_TO_NV 0x0A +#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B +#define GL_CUBIC_CURVE_TO_NV 0x0C +#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D +#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E +#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F +#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 +#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 +#define GL_SMALL_CCW_ARC_TO_NV 0x12 +#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 +#define GL_SMALL_CW_ARC_TO_NV 0x14 +#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 +#define GL_LARGE_CCW_ARC_TO_NV 0x16 +#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 +#define GL_LARGE_CW_ARC_TO_NV 0x18 +#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 +#define GL_RESTART_PATH_NV 0xF0 +#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 +#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 +#define GL_RECT_NV 0xF6 +#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 +#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA +#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC +#define GL_ARC_TO_NV 0xFE +#define GL_RELATIVE_ARC_TO_NV 0xFF +#define GL_BOLD_BIT_NV 0x01 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 +#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 +#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 +#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 +#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 +#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 +#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 +#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 +#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 +#define GL_FONT_ASCENDER_BIT_NV 0x00200000 +#define GL_FONT_DESCENDER_BIT_NV 0x00400000 +#define GL_FONT_HEIGHT_BIT_NV 0x00800000 +#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 +#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 +#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 +#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 +#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_SECONDARY_COLOR_NV 0x852D +typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); +typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); +typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); +typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); +typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); +typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); +typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); +typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); +typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); +typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); +typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); +typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); +typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); +typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); +GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); +GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); +GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); +GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); +GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); +GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); +GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); +GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); +GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); +GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); +GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); +GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); +GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); +GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); +GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); +GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); +GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); +GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); +GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); +GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); +GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +#endif +#endif /* GL_NV_path_rendering */ + +#ifndef GL_NV_pixel_data_range +#define GL_NV_pixel_data_range 1 +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); +#endif +#endif /* GL_NV_pixel_data_range */ + +#ifndef GL_NV_point_sprite +#define GL_NV_point_sprite 1 +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); +#endif +#endif /* GL_NV_point_sprite */ + +#ifndef GL_NV_present_video +#define GL_NV_present_video 1 +#define GL_FRAME_NV 0x8E26 +#define GL_FIELDS_NV 0x8E27 +#define GL_CURRENT_TIME_NV 0x8E28 +#define GL_NUM_FILL_STREAMS_NV 0x8E29 +#define GL_PRESENT_TIME_NV 0x8E2A +#define GL_PRESENT_DURATION_NV 0x8E2B +typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); +GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_NV_present_video */ + +#ifndef GL_NV_primitive_restart +#define GL_NV_primitive_restart 1 +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPrimitiveRestartNV (void); +GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); +#endif +#endif /* GL_NV_primitive_restart */ + +#ifndef GL_NV_register_combiners +#define GL_NV_register_combiners 1 +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_SPARE0_NV 0x852E +#define GL_SPARE1_NV 0x852F +#define GL_DISCARD_NV 0x8530 +#define GL_E_TIMES_F_NV 0x8531 +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); +GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); +GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); +#endif +#endif /* GL_NV_register_combiners */ + +#ifndef GL_NV_register_combiners2 +#define GL_NV_register_combiners2 1 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); +#endif +#endif /* GL_NV_register_combiners2 */ + +#ifndef GL_NV_shader_atomic_counters +#define GL_NV_shader_atomic_counters 1 +#endif /* GL_NV_shader_atomic_counters */ + +#ifndef GL_NV_shader_atomic_float +#define GL_NV_shader_atomic_float 1 +#endif /* GL_NV_shader_atomic_float */ + +#ifndef GL_NV_shader_buffer_load +#define GL_NV_shader_buffer_load 1 +#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D +#define GL_GPU_ADDRESS_NV 0x8F34 +#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 +typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); +typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); +typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); +typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); +typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); +GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); +GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); +GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); +GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); +GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); +GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); +GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); +GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); +GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_NV_shader_buffer_load */ + +#ifndef GL_NV_shader_buffer_store +#define GL_NV_shader_buffer_store 1 +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +#endif /* GL_NV_shader_buffer_store */ + +#ifndef GL_NV_shader_storage_buffer_object +#define GL_NV_shader_storage_buffer_object 1 +#endif /* GL_NV_shader_storage_buffer_object */ + +#ifndef GL_NV_shader_thread_group +#define GL_NV_shader_thread_group 1 +#define GL_WARP_SIZE_NV 0x9339 +#define GL_WARPS_PER_SM_NV 0x933A +#define GL_SM_COUNT_NV 0x933B +#endif /* GL_NV_shader_thread_group */ + +#ifndef GL_NV_shader_thread_shuffle +#define GL_NV_shader_thread_shuffle 1 +#endif /* GL_NV_shader_thread_shuffle */ + +#ifndef GL_NV_tessellation_program5 +#define GL_NV_tessellation_program5 1 +#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 +#define GL_TESS_CONTROL_PROGRAM_NV 0x891E +#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F +#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 +#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 +#endif /* GL_NV_tessellation_program5 */ + +#ifndef GL_NV_texgen_emboss +#define GL_NV_texgen_emboss 1 +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_MAP_NV 0x855F +#endif /* GL_NV_texgen_emboss */ + +#ifndef GL_NV_texgen_reflection +#define GL_NV_texgen_reflection 1 +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_REFLECTION_MAP_NV 0x8512 +#endif /* GL_NV_texgen_reflection */ + +#ifndef GL_NV_texture_barrier +#define GL_NV_texture_barrier 1 +typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureBarrierNV (void); +#endif +#endif /* GL_NV_texture_barrier */ + +#ifndef GL_NV_texture_compression_vtc +#define GL_NV_texture_compression_vtc 1 +#endif /* GL_NV_texture_compression_vtc */ + +#ifndef GL_NV_texture_env_combine4 +#define GL_NV_texture_env_combine4 1 +#define GL_COMBINE4_NV 0x8503 +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPERAND3_ALPHA_NV 0x859B +#endif /* GL_NV_texture_env_combine4 */ + +#ifndef GL_NV_texture_expand_normal +#define GL_NV_texture_expand_normal 1 +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#endif /* GL_NV_texture_expand_normal */ + +#ifndef GL_NV_texture_multisample +#define GL_NV_texture_multisample 1 +#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 +#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#endif +#endif /* GL_NV_texture_multisample */ + +#ifndef GL_NV_texture_rectangle +#define GL_NV_texture_rectangle 1 +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#endif /* GL_NV_texture_rectangle */ + +#ifndef GL_NV_texture_shader +#define GL_NV_texture_shader 1 +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_CULL_MODES_NV 0x86E0 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_HI_SCALE_NV 0x870E +#define GL_LO_SCALE_NV 0x870F +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_SCALE_NV 0x8711 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_HI_BIAS_NV 0x8714 +#define GL_LO_BIAS_NV 0x8715 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DT_BIAS_NV 0x8717 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#endif /* GL_NV_texture_shader */ + +#ifndef GL_NV_texture_shader2 +#define GL_NV_texture_shader2 1 +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#endif /* GL_NV_texture_shader2 */ + +#ifndef GL_NV_texture_shader3 +#define GL_NV_texture_shader3 1 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_HILO8_NV 0x885E +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#endif /* GL_NV_texture_shader3 */ + +#ifndef GL_NV_transform_feedback +#define GL_NV_transform_feedback 1 +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F +#define GL_LAYER_NV 0x8DAA +#define GL_NEXT_BUFFER_NV -2 +#define GL_SKIP_COMPONENTS4_NV -3 +#define GL_SKIP_COMPONENTS3_NV -4 +#define GL_SKIP_COMPONENTS2_NV -5 +#define GL_SKIP_COMPONENTS1_NV -6 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackNV (void); +GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode); +GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); +GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); +GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#endif +#endif /* GL_NV_transform_feedback */ + +#ifndef GL_NV_transform_feedback2 +#define GL_NV_transform_feedback2 1 +#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedbackNV (void); +GLAPI void APIENTRY glResumeTransformFeedbackNV (void); +GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); +#endif +#endif /* GL_NV_transform_feedback2 */ + +#ifndef GL_NV_vdpau_interop +#define GL_NV_vdpau_interop 1 +typedef GLintptr GLvdpauSurfaceNV; +#define GL_SURFACE_STATE_NV 0x86EB +#define GL_SURFACE_REGISTERED_NV 0x86FD +#define GL_SURFACE_MAPPED_NV 0x8700 +#define GL_WRITE_DISCARD_NV 0x88BE +typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress); +typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); +typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress); +GLAPI void APIENTRY glVDPAUFiniNV (void); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); +GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#endif +#endif /* GL_NV_vdpau_interop */ + +#ifndef GL_NV_vertex_array_range +#define GL_NV_vertex_array_range 1 +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); +GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer); +#endif +#endif /* GL_NV_vertex_array_range */ + +#ifndef GL_NV_vertex_array_range2 +#define GL_NV_vertex_array_range2 1 +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#endif /* GL_NV_vertex_array_range2 */ + +#ifndef GL_NV_vertex_attrib_integer_64bit +#define GL_NV_vertex_attrib_integer_64bit 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); +GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +#endif +#endif /* GL_NV_vertex_attrib_integer_64bit */ + +#ifndef GL_NV_vertex_buffer_unified_memory +#define GL_NV_vertex_buffer_unified_memory 1 +#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E +#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F +#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 +#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 +#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 +#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 +#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 +#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 +#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 +#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 +#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 +#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 +#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A +#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B +#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C +#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D +#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E +#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F +#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 +#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 +#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 +#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 +#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 +#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 +#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 +typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); +GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); +#endif +#endif /* GL_NV_vertex_buffer_unified_memory */ + +#ifndef GL_NV_vertex_program +#define GL_NV_vertex_program 1 +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_IDENTITY_NV 0x862A +#define GL_INVERSE_NV 0x862B +#define GL_TRANSPOSE_NV 0x862C +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_NV 0x8637 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); +typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); +typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); +GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); +GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); +GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); +GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); +GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); +GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); +GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); +#endif +#endif /* GL_NV_vertex_program */ + +#ifndef GL_NV_vertex_program1_1 +#define GL_NV_vertex_program1_1 1 +#endif /* GL_NV_vertex_program1_1 */ + +#ifndef GL_NV_vertex_program2 +#define GL_NV_vertex_program2 1 +#endif /* GL_NV_vertex_program2 */ + +#ifndef GL_NV_vertex_program2_option +#define GL_NV_vertex_program2_option 1 +#endif /* GL_NV_vertex_program2_option */ + +#ifndef GL_NV_vertex_program3 +#define GL_NV_vertex_program3 1 +#endif /* GL_NV_vertex_program3 */ + +#ifndef GL_NV_vertex_program4 +#define GL_NV_vertex_program4 1 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_vertex_program4 */ + +#ifndef GL_NV_video_capture +#define GL_NV_video_capture 1 +#define GL_VIDEO_BUFFER_NV 0x9020 +#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 +#define GL_FIELD_UPPER_NV 0x9022 +#define GL_FIELD_LOWER_NV 0x9023 +#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 +#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 +#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 +#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 +#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 +#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 +#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A +#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B +#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C +#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D +#define GL_PARTIAL_SUCCESS_NV 0x902E +#define GL_SUCCESS_NV 0x902F +#define GL_FAILURE_NV 0x9030 +#define GL_YCBYCR8_422_NV 0x9031 +#define GL_YCBAYCR8A_4224_NV 0x9032 +#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 +#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 +#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 +#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 +#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 +#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 +#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 +#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A +#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B +#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C +typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#endif +#endif /* GL_NV_video_capture */ + +#ifndef GL_OML_interlace +#define GL_OML_interlace 1 +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 +#endif /* GL_OML_interlace */ + +#ifndef GL_OML_resample +#define GL_OML_resample 1 +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#endif /* GL_OML_resample */ + +#ifndef GL_OML_subsample +#define GL_OML_subsample 1 +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#endif /* GL_OML_subsample */ + +#ifndef GL_PGI_misc_hints +#define GL_PGI_misc_hints 1 +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 +#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD +#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 +#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C +#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E +#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F +#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 +#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 +#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 +#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 +#define GL_CLIP_NEAR_HINT_PGI 0x1A220 +#define GL_CLIP_FAR_HINT_PGI 0x1A221 +#define GL_WIDE_LINE_HINT_PGI 0x1A222 +#define GL_BACK_NORMALS_HINT_PGI 0x1A223 +typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); +#endif +#endif /* GL_PGI_misc_hints */ + +#ifndef GL_PGI_vertex_hints +#define GL_PGI_vertex_hints 1 +#define GL_VERTEX_DATA_HINT_PGI 0x1A22A +#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B +#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C +#define GL_MAX_VERTEX_HINT_PGI 0x1A22D +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#endif /* GL_PGI_vertex_hints */ + +#ifndef GL_REND_screen_coordinates +#define GL_REND_screen_coordinates 1 +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#endif /* GL_REND_screen_coordinates */ + +#ifndef GL_S3_s3tc +#define GL_S3_s3tc 1 +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA4_DXT5_S3TC 0x83A5 +#endif /* GL_S3_s3tc */ + +#ifndef GL_SGIS_detail_texture +#define GL_SGIS_detail_texture 1 +#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 +#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 +#define GL_LINEAR_DETAIL_SGIS 0x8097 +#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 +#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 +#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A +#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B +#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C +typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_detail_texture */ + +#ifndef GL_SGIS_fog_function +#define GL_SGIS_fog_function 1 +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); +#endif +#endif /* GL_SGIS_fog_function */ + +#ifndef GL_SGIS_generate_mipmap +#define GL_SGIS_generate_mipmap 1 +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#endif /* GL_SGIS_generate_mipmap */ + +#ifndef GL_SGIS_multisample +#define GL_SGIS_multisample 1 +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); +#endif +#endif /* GL_SGIS_multisample */ + +#ifndef GL_SGIS_pixel_texture +#define GL_SGIS_pixel_texture 1 +#define GL_PIXEL_TEXTURE_SGIS 0x8353 +#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 +#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 +#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); +#endif +#endif /* GL_SGIS_pixel_texture */ + +#ifndef GL_SGIS_point_line_texgen +#define GL_SGIS_point_line_texgen 1 +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_OBJECT_LINE_SGIS 0x81F7 +#endif /* GL_SGIS_point_line_texgen */ + +#ifndef GL_SGIS_point_parameters +#define GL_SGIS_point_parameters 1 +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_SGIS_point_parameters */ + +#ifndef GL_SGIS_sharpen_texture +#define GL_SGIS_sharpen_texture 1 +#define GL_LINEAR_SHARPEN_SGIS 0x80AD +#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE +#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF +#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 +typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_sharpen_texture */ + +#ifndef GL_SGIS_texture4D +#define GL_SGIS_texture4D 1 +#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 +#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 +#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 +#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 +#define GL_TEXTURE_4D_SGIS 0x8134 +#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 +#define GL_TEXTURE_4DSIZE_SGIS 0x8136 +#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 +#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 +#define GL_TEXTURE_4D_BINDING_SGIS 0x814F +typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_SGIS_texture4D */ + +#ifndef GL_SGIS_texture_border_clamp +#define GL_SGIS_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#endif /* GL_SGIS_texture_border_clamp */ + +#ifndef GL_SGIS_texture_color_mask +#define GL_SGIS_texture_color_mask 1 +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#endif +#endif /* GL_SGIS_texture_color_mask */ + +#ifndef GL_SGIS_texture_edge_clamp +#define GL_SGIS_texture_edge_clamp 1 +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#endif /* GL_SGIS_texture_edge_clamp */ + +#ifndef GL_SGIS_texture_filter4 +#define GL_SGIS_texture_filter4 1 +#define GL_FILTER4_SGIS 0x8146 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); +typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); +GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#endif +#endif /* GL_SGIS_texture_filter4 */ + +#ifndef GL_SGIS_texture_lod +#define GL_SGIS_texture_lod 1 +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D +#endif /* GL_SGIS_texture_lod */ + +#ifndef GL_SGIS_texture_select +#define GL_SGIS_texture_select 1 +#define GL_DUAL_ALPHA4_SGIS 0x8110 +#define GL_DUAL_ALPHA8_SGIS 0x8111 +#define GL_DUAL_ALPHA12_SGIS 0x8112 +#define GL_DUAL_ALPHA16_SGIS 0x8113 +#define GL_DUAL_LUMINANCE4_SGIS 0x8114 +#define GL_DUAL_LUMINANCE8_SGIS 0x8115 +#define GL_DUAL_LUMINANCE12_SGIS 0x8116 +#define GL_DUAL_LUMINANCE16_SGIS 0x8117 +#define GL_DUAL_INTENSITY4_SGIS 0x8118 +#define GL_DUAL_INTENSITY8_SGIS 0x8119 +#define GL_DUAL_INTENSITY12_SGIS 0x811A +#define GL_DUAL_INTENSITY16_SGIS 0x811B +#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C +#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D +#define GL_QUAD_ALPHA4_SGIS 0x811E +#define GL_QUAD_ALPHA8_SGIS 0x811F +#define GL_QUAD_LUMINANCE4_SGIS 0x8120 +#define GL_QUAD_LUMINANCE8_SGIS 0x8121 +#define GL_QUAD_INTENSITY4_SGIS 0x8122 +#define GL_QUAD_INTENSITY8_SGIS 0x8123 +#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 +#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 +#endif /* GL_SGIS_texture_select */ + +#ifndef GL_SGIX_async +#define GL_SGIX_async 1 +#define GL_ASYNC_MARKER_SGIX 0x8329 +typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); +typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); +typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); +typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); +GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); +GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); +GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); +GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); +GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); +#endif +#endif /* GL_SGIX_async */ + +#ifndef GL_SGIX_async_histogram +#define GL_SGIX_async_histogram 1 +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#endif /* GL_SGIX_async_histogram */ + +#ifndef GL_SGIX_async_pixel +#define GL_SGIX_async_pixel 1 +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 +#endif /* GL_SGIX_async_pixel */ + +#ifndef GL_SGIX_blend_alpha_minmax +#define GL_SGIX_blend_alpha_minmax 1 +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_MAX_SGIX 0x8321 +#endif /* GL_SGIX_blend_alpha_minmax */ + +#ifndef GL_SGIX_calligraphic_fragment +#define GL_SGIX_calligraphic_fragment 1 +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#endif /* GL_SGIX_calligraphic_fragment */ + +#ifndef GL_SGIX_clipmap +#define GL_SGIX_clipmap 1 +#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 +#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 +#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 +#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 +#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 +#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 +#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 +#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 +#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 +#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#endif /* GL_SGIX_clipmap */ + +#ifndef GL_SGIX_convolution_accuracy +#define GL_SGIX_convolution_accuracy 1 +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#endif /* GL_SGIX_convolution_accuracy */ + +#ifndef GL_SGIX_depth_pass_instrument +#define GL_SGIX_depth_pass_instrument 1 +#endif /* GL_SGIX_depth_pass_instrument */ + +#ifndef GL_SGIX_depth_texture +#define GL_SGIX_depth_texture 1 +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 +#endif /* GL_SGIX_depth_texture */ + +#ifndef GL_SGIX_flush_raster +#define GL_SGIX_flush_raster 1 +typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushRasterSGIX (void); +#endif +#endif /* GL_SGIX_flush_raster */ + +#ifndef GL_SGIX_fog_offset +#define GL_SGIX_fog_offset 1 +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#endif /* GL_SGIX_fog_offset */ + +#ifndef GL_SGIX_fragment_lighting +#define GL_SGIX_fragment_lighting 1 +#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 +#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 +#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 +#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 +#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 +#define GL_LIGHT_ENV_MODE_SGIX 0x8407 +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B +#define GL_FRAGMENT_LIGHT0_SGIX 0x840C +#define GL_FRAGMENT_LIGHT1_SGIX 0x840D +#define GL_FRAGMENT_LIGHT2_SGIX 0x840E +#define GL_FRAGMENT_LIGHT3_SGIX 0x840F +#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 +#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 +#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 +#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 +typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); +GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); +GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); +#endif +#endif /* GL_SGIX_fragment_lighting */ + +#ifndef GL_SGIX_framezoom +#define GL_SGIX_framezoom 1 +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); +#endif +#endif /* GL_SGIX_framezoom */ + +#ifndef GL_SGIX_igloo_interface +#define GL_SGIX_igloo_interface 1 +typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params); +#endif +#endif /* GL_SGIX_igloo_interface */ + +#ifndef GL_SGIX_instruments +#define GL_SGIX_instruments 1 +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); +typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); +typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); +typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); +GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); +GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); +GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); +GLAPI void APIENTRY glStartInstrumentsSGIX (void); +GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); +#endif +#endif /* GL_SGIX_instruments */ + +#ifndef GL_SGIX_interlace +#define GL_SGIX_interlace 1 +#define GL_INTERLACE_SGIX 0x8094 +#endif /* GL_SGIX_interlace */ + +#ifndef GL_SGIX_ir_instrument1 +#define GL_SGIX_ir_instrument1 1 +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#endif /* GL_SGIX_ir_instrument1 */ + +#ifndef GL_SGIX_list_priority +#define GL_SGIX_list_priority 1 +#define GL_LIST_PRIORITY_SGIX 0x8182 +typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); +GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); +GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); +GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_list_priority */ + +#ifndef GL_SGIX_pixel_texture +#define GL_SGIX_pixel_texture 1 +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); +#endif +#endif /* GL_SGIX_pixel_texture */ + +#ifndef GL_SGIX_pixel_tiles +#define GL_SGIX_pixel_tiles 1 +#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E +#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F +#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 +#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 +#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 +#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 +#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 +#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 +#endif /* GL_SGIX_pixel_tiles */ + +#ifndef GL_SGIX_polynomial_ffd +#define GL_SGIX_polynomial_ffd 1 +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 +#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 +#define GL_DEFORMATIONS_MASK_SGIX 0x8196 +#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); +GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); +#endif +#endif /* GL_SGIX_polynomial_ffd */ + +#ifndef GL_SGIX_reference_plane +#define GL_SGIX_reference_plane 1 +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); +#endif +#endif /* GL_SGIX_reference_plane */ + +#ifndef GL_SGIX_resample +#define GL_SGIX_resample 1 +#define GL_PACK_RESAMPLE_SGIX 0x842C +#define GL_UNPACK_RESAMPLE_SGIX 0x842D +#define GL_RESAMPLE_REPLICATE_SGIX 0x842E +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#endif /* GL_SGIX_resample */ + +#ifndef GL_SGIX_scalebias_hint +#define GL_SGIX_scalebias_hint 1 +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#endif /* GL_SGIX_scalebias_hint */ + +#ifndef GL_SGIX_shadow +#define GL_SGIX_shadow 1 +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D +#endif /* GL_SGIX_shadow */ + +#ifndef GL_SGIX_shadow_ambient +#define GL_SGIX_shadow_ambient 1 +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#endif /* GL_SGIX_shadow_ambient */ + +#ifndef GL_SGIX_sprite +#define GL_SGIX_sprite 1 +#define GL_SPRITE_SGIX 0x8148 +#define GL_SPRITE_MODE_SGIX 0x8149 +#define GL_SPRITE_AXIS_SGIX 0x814A +#define GL_SPRITE_TRANSLATION_SGIX 0x814B +#define GL_SPRITE_AXIAL_SGIX 0x814C +#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D +#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_sprite */ + +#ifndef GL_SGIX_subsample +#define GL_SGIX_subsample 1 +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 +#endif /* GL_SGIX_subsample */ + +#ifndef GL_SGIX_tag_sample_buffer +#define GL_SGIX_tag_sample_buffer 1 +typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTagSampleBufferSGIX (void); +#endif +#endif /* GL_SGIX_tag_sample_buffer */ + +#ifndef GL_SGIX_texture_add_env +#define GL_SGIX_texture_add_env 1 +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#endif /* GL_SGIX_texture_add_env */ + +#ifndef GL_SGIX_texture_coordinate_clamp +#define GL_SGIX_texture_coordinate_clamp 1 +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#endif /* GL_SGIX_texture_coordinate_clamp */ + +#ifndef GL_SGIX_texture_lod_bias +#define GL_SGIX_texture_lod_bias 1 +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#endif /* GL_SGIX_texture_lod_bias */ + +#ifndef GL_SGIX_texture_multi_buffer +#define GL_SGIX_texture_multi_buffer 1 +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#endif /* GL_SGIX_texture_multi_buffer */ + +#ifndef GL_SGIX_texture_scale_bias +#define GL_SGIX_texture_scale_bias 1 +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C +#endif /* GL_SGIX_texture_scale_bias */ + +#ifndef GL_SGIX_vertex_preclip +#define GL_SGIX_vertex_preclip 1 +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#endif /* GL_SGIX_vertex_preclip */ + +#ifndef GL_SGIX_ycrcb +#define GL_SGIX_ycrcb 1 +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#endif /* GL_SGIX_ycrcb */ + +#ifndef GL_SGIX_ycrcb_subsample +#define GL_SGIX_ycrcb_subsample 1 +#endif /* GL_SGIX_ycrcb_subsample */ + +#ifndef GL_SGIX_ycrcba +#define GL_SGIX_ycrcba 1 +#define GL_YCRCB_SGIX 0x8318 +#define GL_YCRCBA_SGIX 0x8319 +#endif /* GL_SGIX_ycrcba */ + +#ifndef GL_SGI_color_matrix +#define GL_SGI_color_matrix 1 +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB +#endif /* GL_SGI_color_matrix */ + +#ifndef GL_SGI_color_table +#define GL_SGI_color_table 1 +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF +typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); +#endif +#endif /* GL_SGI_color_table */ + +#ifndef GL_SGI_texture_color_table +#define GL_SGI_texture_color_table 1 +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD +#endif /* GL_SGI_texture_color_table */ + +#ifndef GL_SUNX_constant_data +#define GL_SUNX_constant_data 1 +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 +typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFinishTextureSUNX (void); +#endif +#endif /* GL_SUNX_constant_data */ + +#ifndef GL_SUN_convolution_border_modes +#define GL_SUN_convolution_border_modes 1 +#define GL_WRAP_BORDER_SUN 0x81D4 +#endif /* GL_SUN_convolution_border_modes */ + +#ifndef GL_SUN_global_alpha +#define GL_SUN_global_alpha 1 +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); +GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); +GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); +GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); +GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); +GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); +#endif +#endif /* GL_SUN_global_alpha */ + +#ifndef GL_SUN_mesh_array +#define GL_SUN_mesh_array 1 +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 +typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); +#endif +#endif /* GL_SUN_mesh_array */ + +#ifndef GL_SUN_slice_accum +#define GL_SUN_slice_accum 1 +#define GL_SLICE_ACCUM_SUN 0x85CC +#endif /* GL_SUN_slice_accum */ + +#ifndef GL_SUN_triangle_list +#define GL_SUN_triangle_list 1 +#define GL_RESTART_SUN 0x0001 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); +GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); +GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); +GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); +GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); +GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); +GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer); +#endif +#endif /* GL_SUN_triangle_list */ + +#ifndef GL_SUN_vertex +#define GL_SUN_vertex 1 +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#endif +#endif /* GL_SUN_vertex */ + +#ifndef GL_WIN_phong_shading +#define GL_WIN_phong_shading 1 +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB +#endif /* GL_WIN_phong_shading */ + +#ifndef GL_WIN_specular_fog +#define GL_WIN_specular_fog 1 +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#endif /* GL_WIN_specular_fog */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles.h new file mode 100644 index 00000000000..b5d7ebe9a36 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles.h @@ -0,0 +1,39 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_opengles.h + * + * This is a simple file to encapsulate the OpenGL ES 1.X API headers. + */ +#include + +#ifdef __IPHONEOS__ +#include +#include +#else +#include +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2.h new file mode 100644 index 00000000000..e2388d1bfc2 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2.h @@ -0,0 +1,52 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_opengles2.h + * + * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. + */ +#include + +#if !defined(_MSC_VER) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS) + +#ifdef __IPHONEOS__ +#include +#include +#else +#include +#include +#include +#endif + +#else /* _MSC_VER */ + +/* OpenGL ES2 headers for Visual Studio */ +#include +#include +#include +#include + +#endif /* _MSC_VER */ + +#ifndef APIENTRY +#define APIENTRY GL_APIENTRY +#endif diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2.h new file mode 100644 index 00000000000..c62fb0a547f --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2.h @@ -0,0 +1,621 @@ +#ifndef __gl2_h_ +#define __gl2_h_ + +/* $Revision: 20555 $ on $Date:: 2013-02-12 14:32:47 -0800 #$ */ + +/*#include */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +/*------------------------------------------------------------------------- + * Data type definitions + *-----------------------------------------------------------------------*/ + +typedef void GLvoid; +typedef char GLchar; +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef khronos_int8_t GLbyte; +typedef short GLshort; +typedef int GLint; +typedef int GLsizei; +typedef khronos_uint8_t GLubyte; +typedef unsigned short GLushort; +typedef unsigned int GLuint; +typedef khronos_float_t GLfloat; +typedef khronos_float_t GLclampf; +typedef khronos_int32_t GLfixed; + +/* GL types for handling large vertex buffer objects */ +typedef khronos_intptr_t GLintptr; +typedef khronos_ssize_t GLsizeiptr; + +/* OpenGL ES core versions */ +#define GL_ES_VERSION_2_0 1 + +/* ClearBufferMask */ +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_COLOR_BUFFER_BIT 0x00004000 + +/* Boolean */ +#define GL_FALSE 0 +#define GL_TRUE 1 + +/* BeginMode */ +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 + +/* AlphaFunction (not supported in ES20) */ +/* GL_NEVER */ +/* GL_LESS */ +/* GL_EQUAL */ +/* GL_LEQUAL */ +/* GL_GREATER */ +/* GL_NOTEQUAL */ +/* GL_GEQUAL */ +/* GL_ALWAYS */ + +/* BlendingFactorDest */ +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 + +/* BlendingFactorSrc */ +/* GL_ZERO */ +/* GL_ONE */ +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +/* GL_SRC_ALPHA */ +/* GL_ONE_MINUS_SRC_ALPHA */ +/* GL_DST_ALPHA */ +/* GL_ONE_MINUS_DST_ALPHA */ + +/* BlendEquationSeparate */ +#define GL_FUNC_ADD 0x8006 +#define GL_BLEND_EQUATION 0x8009 +#define GL_BLEND_EQUATION_RGB 0x8009 /* same as BLEND_EQUATION */ +#define GL_BLEND_EQUATION_ALPHA 0x883D + +/* BlendSubtract */ +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B + +/* Separate Blend Functions */ +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_BLEND_COLOR 0x8005 + +/* Buffer Objects */ +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 + +#define GL_STREAM_DRAW 0x88E0 +#define GL_STATIC_DRAW 0x88E4 +#define GL_DYNAMIC_DRAW 0x88E8 + +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 + +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 + +/* CullFaceMode */ +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_FRONT_AND_BACK 0x0408 + +/* DepthFunction */ +/* GL_NEVER */ +/* GL_LESS */ +/* GL_EQUAL */ +/* GL_LEQUAL */ +/* GL_GREATER */ +/* GL_NOTEQUAL */ +/* GL_GEQUAL */ +/* GL_ALWAYS */ + +/* EnableCap */ +#define GL_TEXTURE_2D 0x0DE1 +#define GL_CULL_FACE 0x0B44 +#define GL_BLEND 0x0BE2 +#define GL_DITHER 0x0BD0 +#define GL_STENCIL_TEST 0x0B90 +#define GL_DEPTH_TEST 0x0B71 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_COVERAGE 0x80A0 + +/* ErrorCode */ +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_OUT_OF_MEMORY 0x0505 + +/* FrontFaceDirection */ +#define GL_CW 0x0900 +#define GL_CCW 0x0901 + +/* GetPName */ +#define GL_LINE_WIDTH 0x0B21 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_VIEWPORT 0x0BA2 +#define GL_SCISSOR_BOX 0x0C10 +/* GL_SCISSOR_TEST */ +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_ALPHA_BITS 0x0D55 +#define GL_DEPTH_BITS 0x0D56 +#define GL_STENCIL_BITS 0x0D57 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +/* GL_POLYGON_OFFSET_FILL */ +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB + +/* GetTextureParameter */ +/* GL_TEXTURE_MAG_FILTER */ +/* GL_TEXTURE_MIN_FILTER */ +/* GL_TEXTURE_WRAP_S */ +/* GL_TEXTURE_WRAP_T */ + +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 + +/* HintMode */ +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +/* HintTarget */ +#define GL_GENERATE_MIPMAP_HINT 0x8192 + +/* DataType */ +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_FIXED 0x140C + +/* PixelFormat */ +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A + +/* PixelType */ +/* GL_UNSIGNED_BYTE */ +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 + +/* Shaders */ +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_SHADER_TYPE 0x8B4F +#define GL_DELETE_STATUS 0x8B80 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D + +/* StencilFunction */ +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 + +/* StencilOp */ +/* GL_ZERO */ +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#define GL_INVERT 0x150A +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 + +/* StringName */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* TextureMagFilter */ +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 + +/* TextureMinFilter */ +/* GL_NEAREST */ +/* GL_LINEAR */ +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 + +/* TextureParameterName */ +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 + +/* TextureTarget */ +/* GL_TEXTURE_2D */ +#define GL_TEXTURE 0x1702 + +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C + +/* TextureUnit */ +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 + +/* TextureWrapMode */ +#define GL_REPEAT 0x2901 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_MIRRORED_REPEAT 0x8370 + +/* Uniform Types */ +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_CUBE 0x8B60 + +/* Vertex Arrays */ +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F + +/* Read Format */ +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B + +/* Shader Source */ +#define GL_COMPILE_STATUS 0x8B81 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_SHADER_COMPILER 0x8DFA + +/* Shader Binary */ +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 + +/* Shader Precision-Specified Types */ +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 + +/* Framebuffer Object. */ +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 + +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGB565 0x8D62 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_STENCIL_INDEX8 0x8D48 + +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 + +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 + +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 + +#define GL_NONE 0 + +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD + +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 + +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 + +/*------------------------------------------------------------------------- + * GL core functions. + *-----------------------------------------------------------------------*/ + +GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); +GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); +GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name); +GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); +GL_APICALL void GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GL_APICALL void GL_APIENTRY glBlendEquation ( GLenum mode ); +GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); +GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); +GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); +GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); +GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); +GL_APICALL void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GL_APICALL void GL_APIENTRY glClearDepthf (GLclampf depth); +GL_APICALL void GL_APIENTRY glClearStencil (GLint s); +GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); +GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); +GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); +GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); +GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers); +GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers); +GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); +GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers); +GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); +GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures); +GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); +GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); +GL_APICALL void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); +GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); +GL_APICALL void GL_APIENTRY glDisable (GLenum cap); +GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); +GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); +GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); +GL_APICALL void GL_APIENTRY glEnable (GLenum cap); +GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); +GL_APICALL void GL_APIENTRY glFinish (void); +GL_APICALL void GL_APIENTRY glFlush (void); +GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); +GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); +GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); +GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers); +GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers); +GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); +GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); +GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name); +GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params); +GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL GLenum GL_APIENTRY glGetError (void); +GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); +GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); +GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); +GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); +GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); +GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params); +GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name); +GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer); +GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); +GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); +GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); +GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); +GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); +GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); +GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); +GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); +GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); +GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); +GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); +GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); +GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); +GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length); +GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); +GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); +GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); +GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass); +GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); +GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params); +GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params); +GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat x); +GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint x); +GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y); +GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z); +GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); +GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); +GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); +GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); +GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr); +GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); + +#ifdef __cplusplus +} +#endif + +#endif /* __gl2_h_ */ + diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2ext.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2ext.h new file mode 100644 index 00000000000..e8ca8b13f1a --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2ext.h @@ -0,0 +1,2050 @@ +#ifndef __gl2ext_h_ +#define __gl2ext_h_ + +/* $Revision: 22801 $ on $Date:: 2013-08-21 03:20:48 -0700 #$ */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +#ifndef GL_APIENTRYP +# define GL_APIENTRYP GL_APIENTRY* +#endif + +/* New types shared by several extensions */ + +#ifndef __gl3_h_ +/* These are defined with respect to in the + * Apple extension spec, but they are also used by non-APPLE + * extensions, and in the Khronos header we use the Khronos + * portable types in khrplatform.h, which must be defined. + */ +typedef khronos_int64_t GLint64; +typedef khronos_uint64_t GLuint64; +typedef struct __GLsync *GLsync; +#endif + + +/*------------------------------------------------------------------------* + * OES extension tokens + *------------------------------------------------------------------------*/ + +/* GL_OES_compressed_ETC1_RGB8_texture */ +#ifndef GL_OES_compressed_ETC1_RGB8_texture +#define GL_ETC1_RGB8_OES 0x8D64 +#endif + +/* GL_OES_compressed_paletted_texture */ +#ifndef GL_OES_compressed_paletted_texture +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#endif + +/* GL_OES_depth24 */ +#ifndef GL_OES_depth24 +#define GL_DEPTH_COMPONENT24_OES 0x81A6 +#endif + +/* GL_OES_depth32 */ +#ifndef GL_OES_depth32 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#endif + +/* GL_OES_depth_texture */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +typedef void* GLeglImageOES; +#endif + +/* GL_OES_EGL_image_external */ +#ifndef GL_OES_EGL_image_external +/* GLeglImageOES defined in GL_OES_EGL_image already. */ +#define GL_TEXTURE_EXTERNAL_OES 0x8D65 +#define GL_SAMPLER_EXTERNAL_OES 0x8D66 +#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 +#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 +#endif + +/* GL_OES_element_index_uint */ +#ifndef GL_OES_element_index_uint +#define GL_UNSIGNED_INT 0x1405 +#endif + +/* GL_OES_get_program_binary */ +#ifndef GL_OES_get_program_binary +#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE +#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF +#endif + +/* GL_OES_mapbuffer */ +#ifndef GL_OES_mapbuffer +#define GL_WRITE_ONLY_OES 0x88B9 +#define GL_BUFFER_ACCESS_OES 0x88BB +#define GL_BUFFER_MAPPED_OES 0x88BC +#define GL_BUFFER_MAP_POINTER_OES 0x88BD +#endif + +/* GL_OES_packed_depth_stencil */ +#ifndef GL_OES_packed_depth_stencil +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#endif + +/* GL_OES_required_internalformat */ +#ifndef GL_OES_required_internalformat +#define GL_ALPHA8_OES 0x803C +#define GL_DEPTH_COMPONENT16_OES 0x81A5 +/* reuse GL_DEPTH_COMPONENT24_OES */ +/* reuse GL_DEPTH24_STENCIL8_OES */ +/* reuse GL_DEPTH_COMPONENT32_OES */ +#define GL_LUMINANCE4_ALPHA4_OES 0x8043 +#define GL_LUMINANCE8_ALPHA8_OES 0x8045 +#define GL_LUMINANCE8_OES 0x8040 +#define GL_RGBA4_OES 0x8056 +#define GL_RGB5_A1_OES 0x8057 +#define GL_RGB565_OES 0x8D62 +/* reuse GL_RGB8_OES */ +/* reuse GL_RGBA8_OES */ +/* reuse GL_RGB10_EXT */ +/* reuse GL_RGB10_A2_EXT */ +#endif + +/* GL_OES_rgb8_rgba8 */ +#ifndef GL_OES_rgb8_rgba8 +#define GL_RGB8_OES 0x8051 +#define GL_RGBA8_OES 0x8058 +#endif + +/* GL_OES_standard_derivatives */ +#ifndef GL_OES_standard_derivatives +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B +#endif + +/* GL_OES_stencil1 */ +#ifndef GL_OES_stencil1 +#define GL_STENCIL_INDEX1_OES 0x8D46 +#endif + +/* GL_OES_stencil4 */ +#ifndef GL_OES_stencil4 +#define GL_STENCIL_INDEX4_OES 0x8D47 +#endif + +#ifndef GL_OES_surfaceless_context +#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 +#endif + +/* GL_OES_texture_3D */ +#ifndef GL_OES_texture_3D +#define GL_TEXTURE_WRAP_R_OES 0x8072 +#define GL_TEXTURE_3D_OES 0x806F +#define GL_TEXTURE_BINDING_3D_OES 0x806A +#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 +#define GL_SAMPLER_3D_OES 0x8B5F +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 +#endif + +/* GL_OES_texture_float */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_float_linear */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_half_float */ +#ifndef GL_OES_texture_half_float +#define GL_HALF_FLOAT_OES 0x8D61 +#endif + +/* GL_OES_texture_half_float_linear */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_npot */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_vertex_array_object */ +#ifndef GL_OES_vertex_array_object +#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 +#endif + +/* GL_OES_vertex_half_float */ +/* GL_HALF_FLOAT_OES defined in GL_OES_texture_half_float already. */ + +/* GL_OES_vertex_type_10_10_10_2 */ +#ifndef GL_OES_vertex_type_10_10_10_2 +#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 +#define GL_INT_10_10_10_2_OES 0x8DF7 +#endif + +/*------------------------------------------------------------------------* + * KHR extension tokens + *------------------------------------------------------------------------*/ + +#ifndef GL_KHR_debug +typedef void (GL_APIENTRYP GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 +#define GL_DEBUG_SOURCE_API_KHR 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A +#define GL_DEBUG_SOURCE_OTHER_KHR 0x824B +#define GL_DEBUG_TYPE_ERROR_KHR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 +#define GL_DEBUG_TYPE_OTHER_KHR 0x8251 +#define GL_DEBUG_TYPE_MARKER_KHR 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D +#define GL_BUFFER_KHR 0x82E0 +#define GL_SHADER_KHR 0x82E1 +#define GL_PROGRAM_KHR 0x82E2 +#define GL_QUERY_KHR 0x82E3 +/* PROGRAM_PIPELINE only in GL */ +#define GL_SAMPLER_KHR 0x82E6 +/* DISPLAY_LIST only in GL */ +#define GL_MAX_LABEL_LENGTH_KHR 0x82E8 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 +#define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 +#define GL_DEBUG_OUTPUT_KHR 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 +#define GL_STACK_OVERFLOW_KHR 0x0503 +#define GL_STACK_UNDERFLOW_KHR 0x0504 +#endif + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#endif + +/*------------------------------------------------------------------------* + * AMD extension tokens + *------------------------------------------------------------------------*/ + +/* GL_AMD_compressed_3DC_texture */ +#ifndef GL_AMD_compressed_3DC_texture +#define GL_3DC_X_AMD 0x87F9 +#define GL_3DC_XY_AMD 0x87FA +#endif + +/* GL_AMD_compressed_ATC_texture */ +#ifndef GL_AMD_compressed_ATC_texture +#define GL_ATC_RGB_AMD 0x8C92 +#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 +#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE +#endif + +/* GL_AMD_performance_monitor */ +#ifndef GL_AMD_performance_monitor +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +#endif + +/* GL_AMD_program_binary_Z400 */ +#ifndef GL_AMD_program_binary_Z400 +#define GL_Z400_BINARY_AMD 0x8740 +#endif + +/*------------------------------------------------------------------------* + * ANGLE extension tokens + *------------------------------------------------------------------------*/ + +/* GL_ANGLE_depth_texture */ +#ifndef GL_ANGLE_depth_texture +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_UNSIGNED_INT 0x1405 +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#endif + +/* GL_ANGLE_framebuffer_blit */ +#ifndef GL_ANGLE_framebuffer_blit +#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA +#endif + +/* GL_ANGLE_framebuffer_multisample */ +#ifndef GL_ANGLE_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 +#define GL_MAX_SAMPLES_ANGLE 0x8D57 +#endif + +/* GL_ANGLE_instanced_arrays */ +#ifndef GL_ANGLE_instanced_arrays +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE +#endif + +/* GL_ANGLE_pack_reverse_row_order */ +#ifndef GL_ANGLE_pack_reverse_row_order +#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 +#endif + +/* GL_ANGLE_program_binary */ +#ifndef GL_ANGLE_program_binary +#define GL_PROGRAM_BINARY_ANGLE 0x93A6 +#endif + +/* GL_ANGLE_texture_compression_dxt3 */ +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#endif + +/* GL_ANGLE_texture_compression_dxt5 */ +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 +#endif + +/* GL_ANGLE_texture_usage */ +#ifndef GL_ANGLE_texture_usage +#define GL_TEXTURE_USAGE_ANGLE 0x93A2 +#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 +#endif + +/* GL_ANGLE_translated_shader_source */ +#ifndef GL_ANGLE_translated_shader_source +#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 +#endif + +/*------------------------------------------------------------------------* + * APPLE extension tokens + *------------------------------------------------------------------------*/ + +/* GL_APPLE_copy_texture_levels */ +/* No new tokens introduced by this extension. */ + +/* GL_APPLE_framebuffer_multisample */ +#ifndef GL_APPLE_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 +#define GL_MAX_SAMPLES_APPLE 0x8D57 +#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA +#endif + +/* GL_APPLE_rgb_422 */ +#ifndef GL_APPLE_rgb_422 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#endif + +/* GL_APPLE_sync */ +#ifndef GL_APPLE_sync + +#define GL_SYNC_OBJECT_APPLE 0x8A53 +#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 +#define GL_OBJECT_TYPE_APPLE 0x9112 +#define GL_SYNC_CONDITION_APPLE 0x9113 +#define GL_SYNC_STATUS_APPLE 0x9114 +#define GL_SYNC_FLAGS_APPLE 0x9115 +#define GL_SYNC_FENCE_APPLE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 +#define GL_UNSIGNALED_APPLE 0x9118 +#define GL_SIGNALED_APPLE 0x9119 +#define GL_ALREADY_SIGNALED_APPLE 0x911A +#define GL_TIMEOUT_EXPIRED_APPLE 0x911B +#define GL_CONDITION_SATISFIED_APPLE 0x911C +#define GL_WAIT_FAILED_APPLE 0x911D +#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 +#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull +#endif + +/* GL_APPLE_texture_format_BGRA8888 */ +#ifndef GL_APPLE_texture_format_BGRA8888 +#define GL_BGRA_EXT 0x80E1 +#endif + +/* GL_APPLE_texture_max_level */ +#ifndef GL_APPLE_texture_max_level +#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D +#endif + +/*------------------------------------------------------------------------* + * ARM extension tokens + *------------------------------------------------------------------------*/ + +/* GL_ARM_mali_program_binary */ +#ifndef GL_ARM_mali_program_binary +#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 +#endif + +/* GL_ARM_mali_shader_binary */ +#ifndef GL_ARM_mali_shader_binary +#define GL_MALI_SHADER_BINARY_ARM 0x8F60 +#endif + +/* GL_ARM_rgba8 */ +/* No new tokens introduced by this extension. */ + +/*------------------------------------------------------------------------* + * EXT extension tokens + *------------------------------------------------------------------------*/ + +/* GL_EXT_blend_minmax */ +#ifndef GL_EXT_blend_minmax +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#endif + +/* GL_EXT_color_buffer_half_float */ +#ifndef GL_EXT_color_buffer_half_float +#define GL_RGBA16F_EXT 0x881A +#define GL_RGB16F_EXT 0x881B +#define GL_RG16F_EXT 0x822F +#define GL_R16F_EXT 0x822D +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 +#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 +#endif + +/* GL_EXT_debug_label */ +#ifndef GL_EXT_debug_label +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +#endif + +/* GL_EXT_debug_marker */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_discard_framebuffer */ +#ifndef GL_EXT_discard_framebuffer +#define GL_COLOR_EXT 0x1800 +#define GL_DEPTH_EXT 0x1801 +#define GL_STENCIL_EXT 0x1802 +#endif + +#ifndef GL_EXT_disjoint_timer_query +#define GL_QUERY_COUNTER_BITS_EXT 0x8864 +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#define GL_TIME_ELAPSED_EXT 0x88BF +#define GL_TIMESTAMP_EXT 0x8E28 +#define GL_GPU_DISJOINT_EXT 0x8FBB +#endif + +#ifndef GL_EXT_draw_buffers +#define GL_EXT_draw_buffers 1 +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 +#define GL_DRAW_BUFFER0_EXT 0x8825 +#define GL_DRAW_BUFFER1_EXT 0x8826 +#define GL_DRAW_BUFFER2_EXT 0x8827 +#define GL_DRAW_BUFFER3_EXT 0x8828 +#define GL_DRAW_BUFFER4_EXT 0x8829 +#define GL_DRAW_BUFFER5_EXT 0x882A +#define GL_DRAW_BUFFER6_EXT 0x882B +#define GL_DRAW_BUFFER7_EXT 0x882C +#define GL_DRAW_BUFFER8_EXT 0x882D +#define GL_DRAW_BUFFER9_EXT 0x882E +#define GL_DRAW_BUFFER10_EXT 0x882F +#define GL_DRAW_BUFFER11_EXT 0x8830 +#define GL_DRAW_BUFFER12_EXT 0x8831 +#define GL_DRAW_BUFFER13_EXT 0x8832 +#define GL_DRAW_BUFFER14_EXT 0x8833 +#define GL_DRAW_BUFFER15_EXT 0x8834 +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#endif + +/* GL_EXT_map_buffer_range */ +#ifndef GL_EXT_map_buffer_range +#define GL_MAP_READ_BIT_EXT 0x0001 +#define GL_MAP_WRITE_BIT_EXT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 +#endif + +/* GL_EXT_multisampled_render_to_texture */ +#ifndef GL_EXT_multisampled_render_to_texture +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C +/* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */ +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +#endif + +/* GL_EXT_multiview_draw_buffers */ +#ifndef GL_EXT_multiview_draw_buffers +#define GL_COLOR_ATTACHMENT_EXT 0x90F0 +#define GL_MULTIVIEW_EXT 0x90F1 +#define GL_DRAW_BUFFER_EXT 0x0C01 +#define GL_READ_BUFFER_EXT 0x0C02 +#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 +#endif + +/* GL_EXT_multi_draw_arrays */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_occlusion_query_boolean */ +#ifndef GL_EXT_occlusion_query_boolean +#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#endif + +/* GL_EXT_read_format_bgra */ +#ifndef GL_EXT_read_format_bgra +#define GL_BGRA_EXT 0x80E1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 +#endif + +/* GL_EXT_robustness */ +#ifndef GL_EXT_robustness +/* reuse GL_NO_ERROR */ +#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 +#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 +#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 +#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 +#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 +#endif + +/* GL_EXT_separate_shader_objects */ +#ifndef GL_EXT_separate_shader_objects +#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 +#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE_EXT 0x8258 +#define GL_ACTIVE_PROGRAM_EXT 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A +#endif + +/* GL_EXT_shader_framebuffer_fetch */ +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#endif + +/* GL_EXT_shader_texture_lod */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_shadow_samplers */ +#ifndef GL_EXT_shadow_samplers +#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C +#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D +#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E +#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 +#endif + +/* GL_EXT_sRGB */ +#ifndef GL_EXT_sRGB +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 +#endif + +/* GL_EXT_sRGB_write_control */ +#ifndef GL_EXT_sRGB_write_control +#define GL_EXT_sRGB_write_control 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#endif + +/* GL_EXT_texture_compression_dxt1 */ +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#endif + +/* GL_EXT_texture_filter_anisotropic */ +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif + +/* GL_EXT_texture_format_BGRA8888 */ +#ifndef GL_EXT_texture_format_BGRA8888 +#define GL_BGRA_EXT 0x80E1 +#endif + +/* GL_EXT_texture_rg */ +#ifndef GL_EXT_texture_rg +#define GL_RED_EXT 0x1903 +#define GL_RG_EXT 0x8227 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#endif + +/* GL_EXT_texture_sRGB_decode */ +#ifndef GL_EXT_texture_sRGB_decode +#define GL_EXT_texture_sRGB_decode 1 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#endif + +/* GL_EXT_texture_storage */ +#ifndef GL_EXT_texture_storage +#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F +#define GL_ALPHA8_EXT 0x803C +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_RGBA32F_EXT 0x8814 +#define GL_RGB32F_EXT 0x8815 +#define GL_ALPHA32F_EXT 0x8816 +#define GL_LUMINANCE32F_EXT 0x8818 +#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 +/* reuse GL_RGBA16F_EXT */ +/* reuse GL_RGB16F_EXT */ +#define GL_ALPHA16F_EXT 0x881C +#define GL_LUMINANCE16F_EXT 0x881E +#define GL_LUMINANCE_ALPHA16F_EXT 0x881F +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGB10_EXT 0x8052 +#define GL_BGRA8_EXT 0x93A1 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#define GL_R32F_EXT 0x822E +#define GL_RG32F_EXT 0x8230 +#define GL_R16F_EXT 0x822D +#define GL_RG16F_EXT 0x822F +#endif + +/* GL_EXT_texture_type_2_10_10_10_REV */ +#ifndef GL_EXT_texture_type_2_10_10_10_REV +#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 +#endif + +/* GL_EXT_unpack_subimage */ +#ifndef GL_EXT_unpack_subimage +#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 +#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 +#endif + +/*------------------------------------------------------------------------* + * DMP extension tokens + *------------------------------------------------------------------------*/ + +/* GL_DMP_shader_binary */ +#ifndef GL_DMP_shader_binary +#define GL_SHADER_BINARY_DMP 0x9250 +#endif + +/*------------------------------------------------------------------------* + * FJ extension tokens + *------------------------------------------------------------------------*/ + +/* GL_FJ_shader_binary_GCCSO */ +#ifndef GL_FJ_shader_binary_GCCSO +#define GL_GCCSO_SHADER_BINARY_FJ 0x9260 +#endif + +/*------------------------------------------------------------------------* + * IMG extension tokens + *------------------------------------------------------------------------*/ + +/* GL_IMG_program_binary */ +#ifndef GL_IMG_program_binary +#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 +#endif + +/* GL_IMG_read_format */ +#ifndef GL_IMG_read_format +#define GL_BGRA_IMG 0x80E1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 +#endif + +/* GL_IMG_shader_binary */ +#ifndef GL_IMG_shader_binary +#define GL_SGX_BINARY_IMG 0x8C0A +#endif + +/* GL_IMG_texture_compression_pvrtc */ +#ifndef GL_IMG_texture_compression_pvrtc +#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 +#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 +#endif + +/* GL_IMG_texture_compression_pvrtc2 */ +#ifndef GL_IMG_texture_compression_pvrtc2 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 +#endif + +/* GL_IMG_multisampled_render_to_texture */ +#ifndef GL_IMG_multisampled_render_to_texture +#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 +#define GL_MAX_SAMPLES_IMG 0x9135 +#define GL_TEXTURE_SAMPLES_IMG 0x9136 +#endif + +/*------------------------------------------------------------------------* + * NV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_NV_coverage_sample */ +#ifndef GL_NV_coverage_sample +#define GL_COVERAGE_COMPONENT_NV 0x8ED0 +#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 +#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 +#define GL_COVERAGE_BUFFERS_NV 0x8ED3 +#define GL_COVERAGE_SAMPLES_NV 0x8ED4 +#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 +#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 +#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 +#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 +#endif + +/* GL_NV_depth_nonlinear */ +#ifndef GL_NV_depth_nonlinear +#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C +#endif + +/* GL_NV_draw_buffers */ +#ifndef GL_NV_draw_buffers +#define GL_MAX_DRAW_BUFFERS_NV 0x8824 +#define GL_DRAW_BUFFER0_NV 0x8825 +#define GL_DRAW_BUFFER1_NV 0x8826 +#define GL_DRAW_BUFFER2_NV 0x8827 +#define GL_DRAW_BUFFER3_NV 0x8828 +#define GL_DRAW_BUFFER4_NV 0x8829 +#define GL_DRAW_BUFFER5_NV 0x882A +#define GL_DRAW_BUFFER6_NV 0x882B +#define GL_DRAW_BUFFER7_NV 0x882C +#define GL_DRAW_BUFFER8_NV 0x882D +#define GL_DRAW_BUFFER9_NV 0x882E +#define GL_DRAW_BUFFER10_NV 0x882F +#define GL_DRAW_BUFFER11_NV 0x8830 +#define GL_DRAW_BUFFER12_NV 0x8831 +#define GL_DRAW_BUFFER13_NV 0x8832 +#define GL_DRAW_BUFFER14_NV 0x8833 +#define GL_DRAW_BUFFER15_NV 0x8834 +#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 +#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 +#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 +#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 +#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 +#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 +#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 +#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 +#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 +#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 +#define GL_COLOR_ATTACHMENT10_NV 0x8CEA +#define GL_COLOR_ATTACHMENT11_NV 0x8CEB +#define GL_COLOR_ATTACHMENT12_NV 0x8CEC +#define GL_COLOR_ATTACHMENT13_NV 0x8CED +#define GL_COLOR_ATTACHMENT14_NV 0x8CEE +#define GL_COLOR_ATTACHMENT15_NV 0x8CEF +#endif + +/* GL_NV_draw_instanced */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_fbo_color_attachments */ +#ifndef GL_NV_fbo_color_attachments +#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF +/* GL_COLOR_ATTACHMENT{0-15}_NV defined in GL_NV_draw_buffers already. */ +#endif + +/* GL_NV_fence */ +#ifndef GL_NV_fence +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +#endif + +/* GL_NV_framebuffer_blit */ +#ifndef GL_NV_framebuffer_blit +#define GL_READ_FRAMEBUFFER_NV 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA +#endif + +/* GL_NV_framebuffer_multisample */ +#ifndef GL_NV_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 +#define GL_MAX_SAMPLES_NV 0x8D57 +#endif + +/* GL_NV_generate_mipmap_sRGB */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_instanced_arrays */ +#ifndef GL_NV_instanced_arrays +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE +#endif + +/* GL_NV_read_buffer */ +#ifndef GL_NV_read_buffer +#define GL_READ_BUFFER_NV 0x0C02 +#endif + +/* GL_NV_read_buffer_front */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_depth */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_depth_stencil */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_stencil */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_shadow_samplers_array */ +#ifndef GL_NV_shadow_samplers_array +#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 +#endif + +/* GL_NV_shadow_samplers_cube */ +#ifndef GL_NV_shadow_samplers_cube +#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 +#endif + +/* GL_NV_sRGB_formats */ +#ifndef GL_NV_sRGB_formats +#define GL_SLUMINANCE_NV 0x8C46 +#define GL_SLUMINANCE_ALPHA_NV 0x8C44 +#define GL_SRGB8_NV 0x8C41 +#define GL_SLUMINANCE8_NV 0x8C47 +#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 +#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F +#define GL_ETC1_SRGB8_NV 0x88EE +#endif + +/* GL_NV_texture_border_clamp */ +#ifndef GL_NV_texture_border_clamp +#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 +#define GL_CLAMP_TO_BORDER_NV 0x812D +#endif + +/* GL_NV_texture_compression_s3tc_update */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_texture_npot_2D_mipmap */ +/* No new tokens introduced by this extension. */ + +/*------------------------------------------------------------------------* + * QCOM extension tokens + *------------------------------------------------------------------------*/ + +/* GL_QCOM_alpha_test */ +#ifndef GL_QCOM_alpha_test +#define GL_ALPHA_TEST_QCOM 0x0BC0 +#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 +#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 +#endif + +/* GL_QCOM_binning_control */ +#ifndef GL_QCOM_binning_control +#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 +#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 +#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 +#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 +#endif + +/* GL_QCOM_driver_control */ +/* No new tokens introduced by this extension. */ + +/* GL_QCOM_extended_get */ +#ifndef GL_QCOM_extended_get +#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 +#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 +#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 +#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 +#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 +#define GL_TEXTURE_TYPE_QCOM 0x8BD7 +#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 +#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 +#define GL_TEXTURE_TARGET_QCOM 0x8BDA +#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB +#define GL_STATE_RESTORE 0x8BDC +#endif + +/* GL_QCOM_extended_get2 */ +/* No new tokens introduced by this extension. */ + +/* GL_QCOM_perfmon_global_mode */ +#ifndef GL_QCOM_perfmon_global_mode +#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 +#endif + +/* GL_QCOM_writeonly_rendering */ +#ifndef GL_QCOM_writeonly_rendering +#define GL_WRITEONLY_RENDERING_QCOM 0x8823 +#endif + +/* GL_QCOM_tiled_rendering */ +#ifndef GL_QCOM_tiled_rendering +#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 +#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 +#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 +#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 +#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 +#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 +#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 +#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 +#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 +#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 +#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 +#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 +#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 +#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 +#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 +#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 +#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 +#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 +#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 +#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 +#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 +#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 +#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 +#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 +#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 +#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 +#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 +#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 +#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 +#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 +#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 +#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 +#endif + +/*------------------------------------------------------------------------* + * VIV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_VIV_shader_binary */ +#ifndef GL_VIV_shader_binary +#define GL_SHADER_BINARY_VIV 0x8FC4 +#endif + +/*------------------------------------------------------------------------* + * End of extension tokens, start of corresponding extension functions + *------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------* + * OES extension functions + *------------------------------------------------------------------------*/ + +/* GL_OES_compressed_ETC1_RGB8_texture */ +#ifndef GL_OES_compressed_ETC1_RGB8_texture +#define GL_OES_compressed_ETC1_RGB8_texture 1 +#endif + +/* GL_OES_compressed_paletted_texture */ +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 +#endif + +/* GL_OES_depth24 */ +#ifndef GL_OES_depth24 +#define GL_OES_depth24 1 +#endif + +/* GL_OES_depth32 */ +#ifndef GL_OES_depth32 +#define GL_OES_depth32 1 +#endif + +/* GL_OES_depth_texture */ +#ifndef GL_OES_depth_texture +#define GL_OES_depth_texture 1 +#endif + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +#define GL_OES_EGL_image 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); +GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); +#endif +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); +#endif + +/* GL_OES_EGL_image_external */ +#ifndef GL_OES_EGL_image_external +#define GL_OES_EGL_image_external 1 +/* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */ +#endif + +/* GL_OES_element_index_uint */ +#ifndef GL_OES_element_index_uint +#define GL_OES_element_index_uint 1 +#endif + +/* GL_OES_fbo_render_mipmap */ +#ifndef GL_OES_fbo_render_mipmap +#define GL_OES_fbo_render_mipmap 1 +#endif + +/* GL_OES_fragment_precision_high */ +#ifndef GL_OES_fragment_precision_high +#define GL_OES_fragment_precision_high 1 +#endif + +/* GL_OES_get_program_binary */ +#ifndef GL_OES_get_program_binary +#define GL_OES_get_program_binary 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); +GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); +#endif +typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); +typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); +#endif + +/* GL_OES_mapbuffer */ +#ifndef GL_OES_mapbuffer +#define GL_OES_mapbuffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); +GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); +GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid **params); +#endif +typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); +typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid **params); +#endif + +/* GL_OES_packed_depth_stencil */ +#ifndef GL_OES_packed_depth_stencil +#define GL_OES_packed_depth_stencil 1 +#endif + +/* GL_OES_required_internalformat */ +#ifndef GL_OES_required_internalformat +#define GL_OES_required_internalformat 1 +#endif + +/* GL_OES_rgb8_rgba8 */ +#ifndef GL_OES_rgb8_rgba8 +#define GL_OES_rgb8_rgba8 1 +#endif + +/* GL_OES_standard_derivatives */ +#ifndef GL_OES_standard_derivatives +#define GL_OES_standard_derivatives 1 +#endif + +/* GL_OES_stencil1 */ +#ifndef GL_OES_stencil1 +#define GL_OES_stencil1 1 +#endif + +/* GL_OES_stencil4 */ +#ifndef GL_OES_stencil4 +#define GL_OES_stencil4 1 +#endif + +#ifndef GL_OES_surfaceless_context +#define GL_OES_surfaceless_context 1 +#endif + +/* GL_OES_texture_3D */ +#ifndef GL_OES_texture_3D +#define GL_OES_texture_3D 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +#endif +typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); +typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +#endif + +/* GL_OES_texture_float */ +#ifndef GL_OES_texture_float +#define GL_OES_texture_float 1 +#endif + +/* GL_OES_texture_float_linear */ +#ifndef GL_OES_texture_float_linear +#define GL_OES_texture_float_linear 1 +#endif + +/* GL_OES_texture_half_float */ +#ifndef GL_OES_texture_half_float +#define GL_OES_texture_half_float 1 +#endif + +/* GL_OES_texture_half_float_linear */ +#ifndef GL_OES_texture_half_float_linear +#define GL_OES_texture_half_float_linear 1 +#endif + +/* GL_OES_texture_npot */ +#ifndef GL_OES_texture_npot +#define GL_OES_texture_npot 1 +#endif + +/* GL_OES_vertex_array_object */ +#ifndef GL_OES_vertex_array_object +#define GL_OES_vertex_array_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); +GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); +GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); +GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); +#endif +typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); +typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); +typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); +#endif + +/* GL_OES_vertex_half_float */ +#ifndef GL_OES_vertex_half_float +#define GL_OES_vertex_half_float 1 +#endif + +/* GL_OES_vertex_type_10_10_10_2 */ +#ifndef GL_OES_vertex_type_10_10_10_2 +#define GL_OES_vertex_type_10_10_10_2 1 +#endif + +/*------------------------------------------------------------------------* + * KHR extension functions + *------------------------------------------------------------------------*/ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDebugMessageControlKHR (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GL_APICALL void GL_APIENTRY glDebugMessageInsertKHR (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHR (GLDEBUGPROCKHR callback, const void *userParam); +GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHR (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GL_APICALL void GL_APIENTRY glPushDebugGroupKHR (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GL_APICALL void GL_APIENTRY glPopDebugGroupKHR (void); +GL_APICALL void GL_APIENTRY glObjectLabelKHR (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectLabelKHR (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GL_APICALL void GL_APIENTRY glObjectPtrLabelKHR (const void *ptr, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHR (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, GLvoid **params); +#endif +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC) (GLDEBUGPROCKHR callback, const void *userParam); +typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC) (void); +typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRPROC) (GLenum pname, GLvoid **params); +#endif + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif + + +/*------------------------------------------------------------------------* + * AMD extension functions + *------------------------------------------------------------------------*/ + +/* GL_AMD_compressed_3DC_texture */ +#ifndef GL_AMD_compressed_3DC_texture +#define GL_AMD_compressed_3DC_texture 1 +#endif + +/* GL_AMD_compressed_ATC_texture */ +#ifndef GL_AMD_compressed_ATC_texture +#define GL_AMD_compressed_ATC_texture 1 +#endif + +/* AMD_performance_monitor */ +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); +GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); +GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); +typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); +typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif + +/* GL_AMD_program_binary_Z400 */ +#ifndef GL_AMD_program_binary_Z400 +#define GL_AMD_program_binary_Z400 1 +#endif + +/*------------------------------------------------------------------------* + * ANGLE extension functions + *------------------------------------------------------------------------*/ + +/* GL_ANGLE_depth_texture */ +#ifndef GL_ANGLE_depth_texture +#define GL_ANGLE_depth_texture 1 +#endif + +/* GL_ANGLE_framebuffer_blit */ +#ifndef GL_ANGLE_framebuffer_blit +#define GL_ANGLE_framebuffer_blit 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif + +/* GL_ANGLE_framebuffer_multisample */ +#ifndef GL_ANGLE_framebuffer_multisample +#define GL_ANGLE_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif + +#ifndef GL_ANGLE_instanced_arrays +#define GL_ANGLE_instanced_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); +#endif + +/* GL_ANGLE_pack_reverse_row_order */ +#ifndef GL_ANGLE_pack_reverse_row_order +#define GL_ANGLE_pack_reverse_row_order 1 +#endif + +/* GL_ANGLE_program_binary */ +#ifndef GL_ANGLE_program_binary +#define GL_ANGLE_program_binary 1 +#endif + +/* GL_ANGLE_texture_compression_dxt3 */ +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_ANGLE_texture_compression_dxt3 1 +#endif + +/* GL_ANGLE_texture_compression_dxt5 */ +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_ANGLE_texture_compression_dxt5 1 +#endif + +/* GL_ANGLE_texture_usage */ +#ifndef GL_ANGLE_texture_usage +#define GL_ANGLE_texture_usage 1 +#endif + +#ifndef GL_ANGLE_translated_shader_source +#define GL_ANGLE_translated_shader_source 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); +#endif +typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); +#endif + +/*------------------------------------------------------------------------* + * APPLE extension functions + *------------------------------------------------------------------------*/ + +/* GL_APPLE_copy_texture_levels */ +#ifndef GL_APPLE_copy_texture_levels +#define GL_APPLE_copy_texture_levels 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +#endif +typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +#endif + +/* GL_APPLE_framebuffer_multisample */ +#ifndef GL_APPLE_framebuffer_multisample +#define GL_APPLE_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); +#endif + +/* GL_APPLE_rgb_422 */ +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#endif + +/* GL_APPLE_sync */ +#ifndef GL_APPLE_sync +#define GL_APPLE_sync 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); +GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); +GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); +GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); +GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); +GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); +GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +#endif +typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); +typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); +typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); +typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +#endif + +/* GL_APPLE_texture_format_BGRA8888 */ +#ifndef GL_APPLE_texture_format_BGRA8888 +#define GL_APPLE_texture_format_BGRA8888 1 +#endif + +/* GL_APPLE_texture_max_level */ +#ifndef GL_APPLE_texture_max_level +#define GL_APPLE_texture_max_level 1 +#endif + +/*------------------------------------------------------------------------* + * ARM extension functions + *------------------------------------------------------------------------*/ + +/* GL_ARM_mali_program_binary */ +#ifndef GL_ARM_mali_program_binary +#define GL_ARM_mali_program_binary 1 +#endif + +/* GL_ARM_mali_shader_binary */ +#ifndef GL_ARM_mali_shader_binary +#define GL_ARM_mali_shader_binary 1 +#endif + +/* GL_ARM_rgba8 */ +#ifndef GL_ARM_rgba8 +#define GL_ARM_rgba8 1 +#endif + +/*------------------------------------------------------------------------* + * EXT extension functions + *------------------------------------------------------------------------*/ + +/* GL_EXT_blend_minmax */ +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#endif + +/* GL_EXT_color_buffer_half_float */ +#ifndef GL_EXT_color_buffer_half_float +#define GL_EXT_color_buffer_half_float 1 +#endif + +/* GL_EXT_debug_label */ +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif + +/* GL_EXT_debug_marker */ +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); +#endif +typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#endif + +/* GL_EXT_discard_framebuffer */ +#ifndef GL_EXT_discard_framebuffer +#define GL_EXT_discard_framebuffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); +#endif +typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +#endif + +#ifndef GL_EXT_disjoint_timer_query +#define GL_EXT_disjoint_timer_query 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); +GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); +GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); +GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); +GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); +GL_APICALL void GL_APIENTRY glQueryCounterEXT (GLuint id, GLenum target); +GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectivEXT (GLuint id, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +#endif +typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); +typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); +typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); +typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTPROC) (GLuint id, GLenum target); +typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +#endif /* GL_EXT_disjoint_timer_query */ + +#ifndef GL_EXT_draw_buffers +#define GL_EXT_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs); +#endif /* GL_EXT_draw_buffers */ + +/* GL_EXT_map_buffer_range */ +#ifndef GL_EXT_map_buffer_range +#define GL_EXT_map_buffer_range 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void* GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); +#endif +typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +#endif + +/* GL_EXT_multisampled_render_to_texture */ +#ifndef GL_EXT_multisampled_render_to_texture +#define GL_EXT_multisampled_render_to_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif + +/* GL_EXT_multiview_draw_buffers */ +#ifndef GL_EXT_multiview_draw_buffers +#define GL_EXT_multiview_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); +GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); +GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); +#endif +typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); +typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); +#endif + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); +#endif + +/* GL_EXT_occlusion_query_boolean */ +#ifndef GL_EXT_occlusion_query_boolean +#define GL_EXT_occlusion_query_boolean 1 +/* All entry points also exist in GL_EXT_disjoint_timer_query */ +#endif + +/* GL_EXT_read_format_bgra */ +#ifndef GL_EXT_read_format_bgra +#define GL_EXT_read_format_bgra 1 +#endif + +/* GL_EXT_robustness */ +#ifndef GL_EXT_robustness +#define GL_EXT_robustness 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); +GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); +GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); +#endif +typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); +typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +#endif + +/* GL_EXT_separate_shader_objects */ +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); +GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); +GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); +GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); +GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); +GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint x); +GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint x, GLint y); +GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z); +GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); +GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat x); +GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +#endif +typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); +typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); +typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); +typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint x); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint x, GLint y); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat x); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +#endif + +/* GL_EXT_shader_framebuffer_fetch */ +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_EXT_shader_framebuffer_fetch 1 +#endif + +/* GL_EXT_shader_texture_lod */ +#ifndef GL_EXT_shader_texture_lod +#define GL_EXT_shader_texture_lod 1 +#endif + +/* GL_EXT_shadow_samplers */ +#ifndef GL_EXT_shadow_samplers +#define GL_EXT_shadow_samplers 1 +#endif + +/* GL_EXT_sRGB */ +#ifndef GL_EXT_sRGB +#define GL_EXT_sRGB 1 +#endif + +/* GL_EXT_texture_compression_dxt1 */ +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_EXT_texture_compression_dxt1 1 +#endif + +/* GL_EXT_texture_filter_anisotropic */ +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#endif + +/* GL_EXT_texture_format_BGRA8888 */ +#ifndef GL_EXT_texture_format_BGRA8888 +#define GL_EXT_texture_format_BGRA8888 1 +#endif + +/* GL_EXT_texture_rg */ +#ifndef GL_EXT_texture_rg +#define GL_EXT_texture_rg 1 +#endif + +/* GL_EXT_texture_storage */ +#ifndef GL_EXT_texture_storage +#define GL_EXT_texture_storage 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif + +/* GL_EXT_texture_type_2_10_10_10_REV */ +#ifndef GL_EXT_texture_type_2_10_10_10_REV +#define GL_EXT_texture_type_2_10_10_10_REV 1 +#endif + +/* GL_EXT_unpack_subimage */ +#ifndef GL_EXT_unpack_subimage +#define GL_EXT_unpack_subimage 1 +#endif + +/*------------------------------------------------------------------------* + * DMP extension functions + *------------------------------------------------------------------------*/ + +/* GL_DMP_shader_binary */ +#ifndef GL_DMP_shader_binary +#define GL_DMP_shader_binary 1 +#endif + +/*------------------------------------------------------------------------* + * FJ extension functions + *------------------------------------------------------------------------*/ + +/* GL_FJ_shader_binary_GCCSO */ +#ifndef GL_FJ_shader_binary_GCCSO +#define GL_FJ_shader_binary_GCCSO 1 +#endif + +/*------------------------------------------------------------------------* + * IMG extension functions + *------------------------------------------------------------------------*/ + +/* GL_IMG_program_binary */ +#ifndef GL_IMG_program_binary +#define GL_IMG_program_binary 1 +#endif + +/* GL_IMG_read_format */ +#ifndef GL_IMG_read_format +#define GL_IMG_read_format 1 +#endif + +/* GL_IMG_shader_binary */ +#ifndef GL_IMG_shader_binary +#define GL_IMG_shader_binary 1 +#endif + +/* GL_IMG_texture_compression_pvrtc */ +#ifndef GL_IMG_texture_compression_pvrtc +#define GL_IMG_texture_compression_pvrtc 1 +#endif + +/* GL_IMG_texture_compression_pvrtc2 */ +#ifndef GL_IMG_texture_compression_pvrtc2 +#define GL_IMG_texture_compression_pvrtc2 1 +#endif + +/* GL_IMG_multisampled_render_to_texture */ +#ifndef GL_IMG_multisampled_render_to_texture +#define GL_IMG_multisampled_render_to_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif + +/*------------------------------------------------------------------------* + * NV extension functions + *------------------------------------------------------------------------*/ + +/* GL_NV_coverage_sample */ +#ifndef GL_NV_coverage_sample +#define GL_NV_coverage_sample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); +GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); +#endif +typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); +typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); +#endif + +/* GL_NV_depth_nonlinear */ +#ifndef GL_NV_depth_nonlinear +#define GL_NV_depth_nonlinear 1 +#endif + +/* GL_NV_draw_buffers */ +#ifndef GL_NV_draw_buffers +#define GL_NV_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); +#endif + +/* GL_NV_draw_instanced */ +#ifndef GL_NV_draw_instanced +#define GL_NV_draw_instanced 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +#endif + +/* GL_NV_fbo_color_attachments */ +#ifndef GL_NV_fbo_color_attachments +#define GL_NV_fbo_color_attachments 1 +#endif + +/* GL_NV_fence */ +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint fence); +GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint fence); +GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint fence); +GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#endif + +/* GL_NV_framebuffer_blit */ +#ifndef GL_NV_framebuffer_blit +#define GL_NV_framebuffer_blit 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif + +/* GL_NV_framebuffer_multisample */ +#ifndef GL_NV_framebuffer_multisample +#define GL_NV_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif + +/* GL_NV_generate_mipmap_sRGB */ +#ifndef GL_NV_generate_mipmap_sRGB +#define GL_NV_generate_mipmap_sRGB 1 +#endif + +/* GL_NV_instanced_arrays */ +#ifndef GL_NV_instanced_arrays +#define GL_NV_instanced_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor); +#endif +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor); +#endif + +/* GL_NV_read_buffer */ +#ifndef GL_NV_read_buffer +#define GL_NV_read_buffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); +#endif +typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); +#endif + +/* GL_NV_read_buffer_front */ +#ifndef GL_NV_read_buffer_front +#define GL_NV_read_buffer_front 1 +#endif + +/* GL_NV_read_depth */ +#ifndef GL_NV_read_depth +#define GL_NV_read_depth 1 +#endif + +/* GL_NV_read_depth_stencil */ +#ifndef GL_NV_read_depth_stencil +#define GL_NV_read_depth_stencil 1 +#endif + +/* GL_NV_read_stencil */ +#ifndef GL_NV_read_stencil +#define GL_NV_read_stencil 1 +#endif + +/* GL_NV_shadow_samplers_array */ +#ifndef GL_NV_shadow_samplers_array +#define GL_NV_shadow_samplers_array 1 +#endif + +/* GL_NV_shadow_samplers_cube */ +#ifndef GL_NV_shadow_samplers_cube +#define GL_NV_shadow_samplers_cube 1 +#endif + +/* GL_NV_sRGB_formats */ +#ifndef GL_NV_sRGB_formats +#define GL_NV_sRGB_formats 1 +#endif + +/* GL_NV_texture_border_clamp */ +#ifndef GL_NV_texture_border_clamp +#define GL_NV_texture_border_clamp 1 +#endif + +/* GL_NV_texture_compression_s3tc_update */ +#ifndef GL_NV_texture_compression_s3tc_update +#define GL_NV_texture_compression_s3tc_update 1 +#endif + +/* GL_NV_texture_npot_2D_mipmap */ +#ifndef GL_NV_texture_npot_2D_mipmap +#define GL_NV_texture_npot_2D_mipmap 1 +#endif + +/*------------------------------------------------------------------------* + * QCOM extension functions + *------------------------------------------------------------------------*/ + +/* GL_QCOM_alpha_test */ +#ifndef GL_QCOM_alpha_test +#define GL_QCOM_alpha_test 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); +#endif +typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); +#endif + +/* GL_QCOM_binning_control */ +#ifndef GL_QCOM_binning_control +#define GL_QCOM_binning_control 1 +#endif + +/* GL_QCOM_driver_control */ +#ifndef GL_QCOM_driver_control +#define GL_QCOM_driver_control 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); +GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); +GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); +GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); +#endif +typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); +typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); +typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +#endif + +/* GL_QCOM_extended_get */ +#ifndef GL_QCOM_extended_get +#define GL_QCOM_extended_get 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); +GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); +GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); +GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); +GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); +GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params); +#endif +typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); +typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); +typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params); +#endif + +/* GL_QCOM_extended_get2 */ +#ifndef GL_QCOM_extended_get2 +#define GL_QCOM_extended_get2 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); +GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); +GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); +GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); +#endif +typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); +typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); +typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); +typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); +#endif + +/* GL_QCOM_perfmon_global_mode */ +#ifndef GL_QCOM_perfmon_global_mode +#define GL_QCOM_perfmon_global_mode 1 +#endif + +/* GL_QCOM_writeonly_rendering */ +#ifndef GL_QCOM_writeonly_rendering +#define GL_QCOM_writeonly_rendering 1 +#endif + +/* GL_QCOM_tiled_rendering */ +#ifndef GL_QCOM_tiled_rendering +#define GL_QCOM_tiled_rendering 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); +#endif +typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); +#endif + +/*------------------------------------------------------------------------* + * VIV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_VIV_shader_binary */ +#ifndef GL_VIV_shader_binary +#define GL_VIV_shader_binary 1 +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __gl2ext_h_ */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2platform.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2platform.h new file mode 100644 index 00000000000..c325686f014 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2platform.h @@ -0,0 +1,30 @@ +#ifndef __gl2platform_h_ +#define __gl2platform_h_ + +/* $Revision: 10602 $ on $Date:: 2010-03-04 22:35:34 -0800 #$ */ + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h + * + * Adopters may modify khrplatform.h and this file to suit their platform. + * You are encouraged to submit all modifications to the Khronos group so that + * they can be included in future versions of this file. Please submit changes + * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) + * by filing a bug against product "OpenGL-ES" component "Registry". + */ + +/*#include */ + +#ifndef GL_APICALL +#define GL_APICALL KHRONOS_APICALL +#endif + +#ifndef GL_APIENTRY +#define GL_APIENTRY KHRONOS_APIENTRY +#endif + +#endif /* __gl2platform_h_ */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2_khrplatform.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2_khrplatform.h new file mode 100644 index 00000000000..c9e6f17d343 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_opengles2_khrplatform.h @@ -0,0 +1,282 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2009 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $ + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by sending them to the public Khronos Bugzilla + * (http://khronos.org/bugzilla) by filing a bug against product + * "Khronos (general)" component "Registry". + * + * A predefined template which fills in some of the bug fields can be + * reached using http://tinyurl.com/khrplatform-h-bugreport, but you + * must create a Bugzilla login first. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(_WIN32) && !defined(__SCITECH_SNAP__) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef _WIN64 +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_pixels.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_pixels.h new file mode 100644 index 00000000000..823124ef597 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_pixels.h @@ -0,0 +1,644 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_pixels.h + * + * Header for the enumerated pixel format definitions. + */ + +#ifndef SDL_pixels_h_ +#define SDL_pixels_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name Transparency definitions + * + * These define alpha as the opacity of a surface. + */ +/* @{ */ +#define SDL_ALPHA_OPAQUE 255 +#define SDL_ALPHA_TRANSPARENT 0 +/* @} */ + +/** Pixel type. */ +typedef enum +{ + SDL_PIXELTYPE_UNKNOWN, + SDL_PIXELTYPE_INDEX1, + SDL_PIXELTYPE_INDEX4, + SDL_PIXELTYPE_INDEX8, + SDL_PIXELTYPE_PACKED8, + SDL_PIXELTYPE_PACKED16, + SDL_PIXELTYPE_PACKED32, + SDL_PIXELTYPE_ARRAYU8, + SDL_PIXELTYPE_ARRAYU16, + SDL_PIXELTYPE_ARRAYU32, + SDL_PIXELTYPE_ARRAYF16, + SDL_PIXELTYPE_ARRAYF32 +} SDL_PixelType; + +/** Bitmap pixel order, high bit -> low bit. */ +typedef enum +{ + SDL_BITMAPORDER_NONE, + SDL_BITMAPORDER_4321, + SDL_BITMAPORDER_1234 +} SDL_BitmapOrder; + +/** Packed component order, high bit -> low bit. */ +typedef enum +{ + SDL_PACKEDORDER_NONE, + SDL_PACKEDORDER_XRGB, + SDL_PACKEDORDER_RGBX, + SDL_PACKEDORDER_ARGB, + SDL_PACKEDORDER_RGBA, + SDL_PACKEDORDER_XBGR, + SDL_PACKEDORDER_BGRX, + SDL_PACKEDORDER_ABGR, + SDL_PACKEDORDER_BGRA +} SDL_PackedOrder; + +/** Array component order, low byte -> high byte. */ +/* !!! FIXME: in 2.1, make these not overlap differently with + !!! FIXME: SDL_PACKEDORDER_*, so we can simplify SDL_ISPIXELFORMAT_ALPHA */ +typedef enum +{ + SDL_ARRAYORDER_NONE, + SDL_ARRAYORDER_RGB, + SDL_ARRAYORDER_RGBA, + SDL_ARRAYORDER_ARGB, + SDL_ARRAYORDER_BGR, + SDL_ARRAYORDER_BGRA, + SDL_ARRAYORDER_ABGR +} SDL_ArrayOrder; + +/** Packed component layout. */ +typedef enum +{ + SDL_PACKEDLAYOUT_NONE, + SDL_PACKEDLAYOUT_332, + SDL_PACKEDLAYOUT_4444, + SDL_PACKEDLAYOUT_1555, + SDL_PACKEDLAYOUT_5551, + SDL_PACKEDLAYOUT_565, + SDL_PACKEDLAYOUT_8888, + SDL_PACKEDLAYOUT_2101010, + SDL_PACKEDLAYOUT_1010102 +} SDL_PackedLayout; + +#define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D) + +#define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \ + ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ + ((bits) << 8) | ((bytes) << 0)) + +#define SDL_PIXELFLAG(X) (((X) >> 28) & 0x0F) +#define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F) +#define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F) +#define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F) +#define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF) +#define SDL_BYTESPERPIXEL(X) \ + (SDL_ISPIXELFORMAT_FOURCC(X) ? \ + ((((X) == SDL_PIXELFORMAT_YUY2) || \ + ((X) == SDL_PIXELFORMAT_UYVY) || \ + ((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF)) + +#define SDL_ISPIXELFORMAT_INDEXED(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))) + +#define SDL_ISPIXELFORMAT_PACKED(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32))) + +#define SDL_ISPIXELFORMAT_ARRAY(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))) + +#define SDL_ISPIXELFORMAT_ALPHA(format) \ + ((SDL_ISPIXELFORMAT_PACKED(format) && \ + ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) || \ + (SDL_ISPIXELFORMAT_ARRAY(format) && \ + ((SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA)))) + +/* The flag is set to 1 because 0x1? is not in the printable ASCII range */ +#define SDL_ISPIXELFORMAT_FOURCC(format) \ + ((format) && (SDL_PIXELFLAG(format) != 1)) + +/* Note: If you modify this list, update SDL_GetPixelFormatName() */ +typedef enum +{ + SDL_PIXELFORMAT_UNKNOWN, + SDL_PIXELFORMAT_INDEX1LSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, + 1, 0), + SDL_PIXELFORMAT_INDEX1MSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, + 1, 0), + SDL_PIXELFORMAT_INDEX4LSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, + 4, 0), + SDL_PIXELFORMAT_INDEX4MSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, + 4, 0), + SDL_PIXELFORMAT_INDEX8 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1), + SDL_PIXELFORMAT_RGB332 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_332, 8, 1), + SDL_PIXELFORMAT_XRGB4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_4444, 12, 2), + SDL_PIXELFORMAT_RGB444 = SDL_PIXELFORMAT_XRGB4444, + SDL_PIXELFORMAT_XBGR4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_4444, 12, 2), + SDL_PIXELFORMAT_BGR444 = SDL_PIXELFORMAT_XBGR4444, + SDL_PIXELFORMAT_XRGB1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_1555, 15, 2), + SDL_PIXELFORMAT_RGB555 = SDL_PIXELFORMAT_XRGB1555, + SDL_PIXELFORMAT_XBGR1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_1555, 15, 2), + SDL_PIXELFORMAT_BGR555 = SDL_PIXELFORMAT_XBGR1555, + SDL_PIXELFORMAT_ARGB4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_RGBA4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_ABGR4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_BGRA4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_ARGB1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_1555, 16, 2), + SDL_PIXELFORMAT_RGBA5551 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_5551, 16, 2), + SDL_PIXELFORMAT_ABGR1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_1555, 16, 2), + SDL_PIXELFORMAT_BGRA5551 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_5551, 16, 2), + SDL_PIXELFORMAT_RGB565 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_565, 16, 2), + SDL_PIXELFORMAT_BGR565 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_565, 16, 2), + SDL_PIXELFORMAT_RGB24 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, + 24, 3), + SDL_PIXELFORMAT_BGR24 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0, + 24, 3), + SDL_PIXELFORMAT_XRGB8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_RGB888 = SDL_PIXELFORMAT_XRGB8888, + SDL_PIXELFORMAT_RGBX8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_XBGR8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_BGR888 = SDL_PIXELFORMAT_XBGR8888, + SDL_PIXELFORMAT_BGRX8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_ARGB8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_RGBA8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_ABGR8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_BGRA8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_ARGB2101010 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_2101010, 32, 4), + + /* Aliases for RGBA byte arrays of color data, for the current platform */ +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_RGBA8888, + SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_ABGR8888, +#else + SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_ABGR8888, + SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_RGBA8888, +#endif + + SDL_PIXELFORMAT_YV12 = /**< Planar mode: Y + V + U (3 planes) */ + SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), + SDL_PIXELFORMAT_IYUV = /**< Planar mode: Y + U + V (3 planes) */ + SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'), + SDL_PIXELFORMAT_YUY2 = /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */ + SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'), + SDL_PIXELFORMAT_UYVY = /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */ + SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), + SDL_PIXELFORMAT_YVYU = /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */ + SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'), + SDL_PIXELFORMAT_NV12 = /**< Planar mode: Y + U/V interleaved (2 planes) */ + SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'), + SDL_PIXELFORMAT_NV21 = /**< Planar mode: Y + V/U interleaved (2 planes) */ + SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1'), + SDL_PIXELFORMAT_EXTERNAL_OES = /**< Android video texture format */ + SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' ') +} SDL_PixelFormatEnum; + +/** + * The bits of this structure can be directly reinterpreted as an integer-packed + * color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 + * on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems). + */ +typedef struct SDL_Color +{ + Uint8 r; + Uint8 g; + Uint8 b; + Uint8 a; +} SDL_Color; +#define SDL_Colour SDL_Color + +typedef struct SDL_Palette +{ + int ncolors; + SDL_Color *colors; + Uint32 version; + int refcount; +} SDL_Palette; + +/** + * \note Everything in the pixel format structure is read-only. + */ +typedef struct SDL_PixelFormat +{ + Uint32 format; + SDL_Palette *palette; + Uint8 BitsPerPixel; + Uint8 BytesPerPixel; + Uint8 padding[2]; + Uint32 Rmask; + Uint32 Gmask; + Uint32 Bmask; + Uint32 Amask; + Uint8 Rloss; + Uint8 Gloss; + Uint8 Bloss; + Uint8 Aloss; + Uint8 Rshift; + Uint8 Gshift; + Uint8 Bshift; + Uint8 Ashift; + int refcount; + struct SDL_PixelFormat *next; +} SDL_PixelFormat; + +/** + * Get the human readable name of a pixel format. + * + * \param format the pixel format to query + * \returns the human readable name of the specified pixel format or + * `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format); + +/** + * Convert one of the enumerated pixel formats to a bpp value and RGBA masks. + * + * \param format one of the SDL_PixelFormatEnum values + * \param bpp a bits per pixel value; usually 15, 16, or 32 + * \param Rmask a pointer filled in with the red mask for the format + * \param Gmask a pointer filled in with the green mask for the format + * \param Bmask a pointer filled in with the blue mask for the format + * \param Amask a pointer filled in with the alpha mask for the format + * \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't + * possible; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MasksToPixelFormatEnum + */ +extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format, + int *bpp, + Uint32 * Rmask, + Uint32 * Gmask, + Uint32 * Bmask, + Uint32 * Amask); + +/** + * Convert a bpp value and RGBA masks to an enumerated pixel format. + * + * This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't + * possible. + * + * \param bpp a bits per pixel value; usually 15, 16, or 32 + * \param Rmask the red mask for the format + * \param Gmask the green mask for the format + * \param Bmask the blue mask for the format + * \param Amask the alpha mask for the format + * \returns one of the SDL_PixelFormatEnum values + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PixelFormatEnumToMasks + */ +extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp, + Uint32 Rmask, + Uint32 Gmask, + Uint32 Bmask, + Uint32 Amask); + +/** + * Create an SDL_PixelFormat structure corresponding to a pixel format. + * + * Returned structure may come from a shared global cache (i.e. not newly + * allocated), and hence should not be modified, especially the palette. Weird + * errors such as `Blit combination not supported` may occur. + * + * \param pixel_format one of the SDL_PixelFormatEnum values + * \returns the new SDL_PixelFormat structure or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeFormat + */ +extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format); + +/** + * Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). + * + * \param format the SDL_PixelFormat structure to free + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocFormat + */ +extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format); + +/** + * Create a palette structure with the specified number of color entries. + * + * The palette entries are initialized to white. + * + * \param ncolors represents the number of color entries in the color palette + * \returns a new SDL_Palette structure on success or NULL on failure (e.g. if + * there wasn't enough memory); call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreePalette + */ +extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors); + +/** + * Set the palette for a pixel format structure. + * + * \param format the SDL_PixelFormat structure that will use the palette + * \param palette the SDL_Palette structure that will be used + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocPalette + * \sa SDL_FreePalette + */ +extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format, + SDL_Palette *palette); + +/** + * Set a range of colors in a palette. + * + * \param palette the SDL_Palette structure to modify + * \param colors an array of SDL_Color structures to copy into the palette + * \param firstcolor the index of the first palette entry to modify + * \param ncolors the number of entries to modify + * \returns 0 on success or a negative error code if not all of the colors + * could be set; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocPalette + * \sa SDL_CreateRGBSurface + */ +extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette, + const SDL_Color * colors, + int firstcolor, int ncolors); + +/** + * Free a palette created with SDL_AllocPalette(). + * + * \param palette the SDL_Palette structure to be freed + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocPalette + */ +extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette); + +/** + * Map an RGB triple to an opaque pixel value for a given pixel format. + * + * This function maps the RGB color value to the specified pixel format and + * returns the pixel value best approximating the given RGB color value for + * the given pixel format. + * + * If the format has a palette (8-bit) the index of the closest matching color + * in the palette will be returned. + * + * If the specified pixel format has an alpha component it will be returned as + * all 1 bits (fully opaque). + * + * If the pixel format bpp (color depth) is less than 32-bpp then the unused + * upper bits of the return value can safely be ignored (e.g., with a 16-bpp + * format the return value can be assigned to a Uint16, and similarly a Uint8 + * for an 8-bpp format). + * + * \param format an SDL_PixelFormat structure describing the pixel format + * \param r the red component of the pixel in the range 0-255 + * \param g the green component of the pixel in the range 0-255 + * \param b the blue component of the pixel in the range 0-255 + * \returns a pixel value + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGB + * \sa SDL_GetRGBA + * \sa SDL_MapRGBA + */ +extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format, + Uint8 r, Uint8 g, Uint8 b); + +/** + * Map an RGBA quadruple to a pixel value for a given pixel format. + * + * This function maps the RGBA color value to the specified pixel format and + * returns the pixel value best approximating the given RGBA color value for + * the given pixel format. + * + * If the specified pixel format has no alpha component the alpha value will + * be ignored (as it will be in formats with a palette). + * + * If the format has a palette (8-bit) the index of the closest matching color + * in the palette will be returned. + * + * If the pixel format bpp (color depth) is less than 32-bpp then the unused + * upper bits of the return value can safely be ignored (e.g., with a 16-bpp + * format the return value can be assigned to a Uint16, and similarly a Uint8 + * for an 8-bpp format). + * + * \param format an SDL_PixelFormat structure describing the format of the + * pixel + * \param r the red component of the pixel in the range 0-255 + * \param g the green component of the pixel in the range 0-255 + * \param b the blue component of the pixel in the range 0-255 + * \param a the alpha component of the pixel in the range 0-255 + * \returns a pixel value + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGB + * \sa SDL_GetRGBA + * \sa SDL_MapRGB + */ +extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format, + Uint8 r, Uint8 g, Uint8 b, + Uint8 a); + +/** + * Get RGB values from a pixel in the specified format. + * + * This function uses the entire 8-bit [0..255] range when converting color + * components from pixel formats with less than 8-bits per RGB component + * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + * + * \param pixel a pixel value + * \param format an SDL_PixelFormat structure describing the format of the + * pixel + * \param r a pointer filled in with the red component + * \param g a pointer filled in with the green component + * \param b a pointer filled in with the blue component + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGBA + * \sa SDL_MapRGB + * \sa SDL_MapRGBA + */ +extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, + const SDL_PixelFormat * format, + Uint8 * r, Uint8 * g, Uint8 * b); + +/** + * Get RGBA values from a pixel in the specified format. + * + * This function uses the entire 8-bit [0..255] range when converting color + * components from pixel formats with less than 8-bits per RGB component + * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + * + * If the surface has no alpha component, the alpha will be returned as 0xff + * (100% opaque). + * + * \param pixel a pixel value + * \param format an SDL_PixelFormat structure describing the format of the + * pixel + * \param r a pointer filled in with the red component + * \param g a pointer filled in with the green component + * \param b a pointer filled in with the blue component + * \param a a pointer filled in with the alpha component + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGB + * \sa SDL_MapRGB + * \sa SDL_MapRGBA + */ +extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, + const SDL_PixelFormat * format, + Uint8 * r, Uint8 * g, Uint8 * b, + Uint8 * a); + +/** + * Calculate a 256 entry gamma ramp for a gamma value. + * + * \param gamma a gamma value where 0.0 is black and 1.0 is identity + * \param ramp an array of 256 values filled in with the gamma ramp + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowGammaRamp + */ +extern DECLSPEC void SDLCALL SDL_CalculateGammaRamp(float gamma, Uint16 * ramp); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_pixels_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_platform.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_platform.h new file mode 100644 index 00000000000..ff49f2408ab --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_platform.h @@ -0,0 +1,235 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_platform.h + * + * Try to get a standard set of platform defines. + */ + +#ifndef SDL_platform_h_ +#define SDL_platform_h_ + +#if defined(_AIX) +#undef __AIX__ +#define __AIX__ 1 +#endif +#if defined(__HAIKU__) +#undef __HAIKU__ +#define __HAIKU__ 1 +#endif +#if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) +#undef __BSDI__ +#define __BSDI__ 1 +#endif +#if defined(_arch_dreamcast) +#undef __DREAMCAST__ +#define __DREAMCAST__ 1 +#endif +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) +#undef __FREEBSD__ +#define __FREEBSD__ 1 +#endif +#if defined(hpux) || defined(__hpux) || defined(__hpux__) +#undef __HPUX__ +#define __HPUX__ 1 +#endif +#if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) +#undef __IRIX__ +#define __IRIX__ 1 +#endif +#if (defined(linux) || defined(__linux) || defined(__linux__)) +#undef __LINUX__ +#define __LINUX__ 1 +#endif +#if defined(ANDROID) || defined(__ANDROID__) +#undef __ANDROID__ +#undef __LINUX__ /* do we need to do this? */ +#define __ANDROID__ 1 +#endif + +#if defined(__APPLE__) +/* lets us know what version of Mac OS X we're compiling on */ +#include +#include + +/* Fix building with older SDKs that don't define these + See this for more information: + https://stackoverflow.com/questions/12132933/preprocessor-macro-for-os-x-targets +*/ +#ifndef TARGET_OS_MACCATALYST +#define TARGET_OS_MACCATALYST 0 +#endif +#ifndef TARGET_OS_IOS +#define TARGET_OS_IOS 0 +#endif +#ifndef TARGET_OS_IPHONE +#define TARGET_OS_IPHONE 0 +#endif +#ifndef TARGET_OS_TV +#define TARGET_OS_TV 0 +#endif +#ifndef TARGET_OS_SIMULATOR +#define TARGET_OS_SIMULATOR 0 +#endif + +#if TARGET_OS_TV +#undef __TVOS__ +#define __TVOS__ 1 +#endif +#if TARGET_OS_IPHONE +/* if compiling for iOS */ +#undef __IPHONEOS__ +#define __IPHONEOS__ 1 +#undef __MACOSX__ +#else +/* if not compiling for iOS */ +#undef __MACOSX__ +#define __MACOSX__ 1 +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +# error SDL for Mac OS X only supports deploying on 10.6 and above. +#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1060 */ +#endif /* TARGET_OS_IPHONE */ +#endif /* defined(__APPLE__) */ + +#if defined(__NetBSD__) +#undef __NETBSD__ +#define __NETBSD__ 1 +#endif +#if defined(__OpenBSD__) +#undef __OPENBSD__ +#define __OPENBSD__ 1 +#endif +#if defined(__OS2__) || defined(__EMX__) +#undef __OS2__ +#define __OS2__ 1 +#endif +#if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) +#undef __OSF__ +#define __OSF__ 1 +#endif +#if defined(__QNXNTO__) +#undef __QNXNTO__ +#define __QNXNTO__ 1 +#endif +#if defined(riscos) || defined(__riscos) || defined(__riscos__) +#undef __RISCOS__ +#define __RISCOS__ 1 +#endif +#if defined(__sun) && defined(__SVR4) +#undef __SOLARIS__ +#define __SOLARIS__ 1 +#endif + +#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) +/* Try to find out if we're compiling for WinRT or non-WinRT */ +#if defined(_MSC_VER) && defined(__has_include) +#if __has_include() +#define HAVE_WINAPIFAMILY_H 1 +#else +#define HAVE_WINAPIFAMILY_H 0 +#endif + +/* If _USING_V110_SDK71_ is defined it means we are using the Windows XP toolset. */ +#elif defined(_MSC_VER) && (_MSC_VER >= 1700 && !_USING_V110_SDK71_) /* _MSC_VER == 1700 for Visual Studio 2012 */ +#define HAVE_WINAPIFAMILY_H 1 +#else +#define HAVE_WINAPIFAMILY_H 0 +#endif + +#if HAVE_WINAPIFAMILY_H +#include +#define WINAPI_FAMILY_WINRT (!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)) +#else +#define WINAPI_FAMILY_WINRT 0 +#endif /* HAVE_WINAPIFAMILY_H */ + +#if WINAPI_FAMILY_WINRT +#undef __WINRT__ +#define __WINRT__ 1 +#else +#undef __WINDOWS__ +#define __WINDOWS__ 1 +#endif +#endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */ + +#if defined(__WINDOWS__) +#undef __WIN32__ +#define __WIN32__ 1 +#endif +#if defined(__PSP__) +#undef __PSP__ +#define __PSP__ 1 +#endif + +/* The NACL compiler defines __native_client__ and __pnacl__ + * Ref: http://www.chromium.org/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi + */ +#if defined(__native_client__) +#undef __LINUX__ +#undef __NACL__ +#define __NACL__ 1 +#endif +#if defined(__pnacl__) +#undef __LINUX__ +#undef __PNACL__ +#define __PNACL__ 1 +/* PNACL with newlib supports static linking only */ +#define __SDL_NOGETPROCADDR__ +#endif + +#if defined(__vita__) +#define __VITA__ 1 +#endif + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the name of the platform. + * + * Here are the names returned for some (but not all) supported platforms: + * + * - "Windows" + * - "Mac OS X" + * - "Linux" + * - "iOS" + * - "Android" + * + * \returns the name of the platform. If the correct platform name is not + * available, returns a string beginning with the text "Unknown". + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC const char * SDLCALL SDL_GetPlatform (void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_platform_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_power.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_power.h new file mode 100644 index 00000000000..4e70e1edecf --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_power.h @@ -0,0 +1,88 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_power_h_ +#define SDL_power_h_ + +/** + * \file SDL_power.h + * + * Header for the SDL power management routines. + */ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The basic state for the system's power supply. + */ +typedef enum +{ + SDL_POWERSTATE_UNKNOWN, /**< cannot determine power status */ + SDL_POWERSTATE_ON_BATTERY, /**< Not plugged in, running on the battery */ + SDL_POWERSTATE_NO_BATTERY, /**< Plugged in, no battery available */ + SDL_POWERSTATE_CHARGING, /**< Plugged in, charging battery */ + SDL_POWERSTATE_CHARGED /**< Plugged in, battery charged */ +} SDL_PowerState; + + +/** + * Get the current power supply details. + * + * You should never take a battery status as absolute truth. Batteries + * (especially failing batteries) are delicate hardware, and the values + * reported here are best estimates based on what that hardware reports. It's + * not uncommon for older batteries to lose stored power much faster than it + * reports, or completely drain when reporting it has 20 percent left, etc. + * + * Battery status can change at any time; if you are concerned with power + * state, you should call this function frequently, and perhaps ignore changes + * until they seem to be stable for a few seconds. + * + * It's possible a platform can only report battery percentage or time left + * but not both. + * + * \param secs seconds of battery life left, you can pass a NULL here if you + * don't care, will return -1 if we can't determine a value, or + * we're not running on a battery + * \param pct percentage of battery life left, between 0 and 100, you can pass + * a NULL here if you don't care, will return -1 if we can't + * determine a value, or we're not running on a battery + * \returns an SDL_PowerState enum representing the current battery state. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_PowerState SDLCALL SDL_GetPowerInfo(int *secs, int *pct); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_power_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_quit.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_quit.h new file mode 100644 index 00000000000..efcc56d72fb --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_quit.h @@ -0,0 +1,58 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_quit.h + * + * Include file for SDL quit event handling. + */ + +#ifndef SDL_quit_h_ +#define SDL_quit_h_ + +#include +#include + +/** + * \file SDL_quit.h + * + * An ::SDL_QUIT event is generated when the user tries to close the application + * window. If it is ignored or filtered out, the window will remain open. + * If it is not ignored or filtered, it is queued normally and the window + * is allowed to close. When the window is closed, screen updates will + * complete, but have no effect. + * + * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) + * and SIGTERM (system termination request), if handlers do not already + * exist, that generate ::SDL_QUIT events as well. There is no way + * to determine the cause of an ::SDL_QUIT event, but setting a signal + * handler in your application will override the default generation of + * quit events for that signal. + * + * \sa SDL_Quit() + */ + +/* There are no functions directly affecting the quit event */ + +#define SDL_QuitRequested() \ + (SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT) > 0)) + +#endif /* SDL_quit_h_ */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_rect.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_rect.h new file mode 100644 index 00000000000..e2dc81bfdba --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_rect.h @@ -0,0 +1,376 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_rect.h + * + * Header file for SDL_rect definition and management functions. + */ + +#ifndef SDL_rect_h_ +#define SDL_rect_h_ + +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The structure that defines a point (integer) + * + * \sa SDL_EnclosePoints + * \sa SDL_PointInRect + */ +typedef struct SDL_Point +{ + int x; + int y; +} SDL_Point; + +/** + * The structure that defines a point (floating point) + * + * \sa SDL_EncloseFPoints + * \sa SDL_PointInFRect + */ +typedef struct SDL_FPoint +{ + float x; + float y; +} SDL_FPoint; + + +/** + * A rectangle, with the origin at the upper left (integer). + * + * \sa SDL_RectEmpty + * \sa SDL_RectEquals + * \sa SDL_HasIntersection + * \sa SDL_IntersectRect + * \sa SDL_IntersectRectAndLine + * \sa SDL_UnionRect + * \sa SDL_EnclosePoints + */ +typedef struct SDL_Rect +{ + int x, y; + int w, h; +} SDL_Rect; + + +/** + * A rectangle, with the origin at the upper left (floating point). + * + * \sa SDL_FRectEmpty + * \sa SDL_FRectEquals + * \sa SDL_FRectEqualsEpsilon + * \sa SDL_HasIntersectionF + * \sa SDL_IntersectFRect + * \sa SDL_IntersectFRectAndLine + * \sa SDL_UnionFRect + * \sa SDL_EncloseFPoints + * \sa SDL_PointInFRect + */ +typedef struct SDL_FRect +{ + float x; + float y; + float w; + float h; +} SDL_FRect; + + +/** + * Returns true if point resides inside a rectangle. + */ +SDL_FORCE_INLINE SDL_bool SDL_PointInRect(const SDL_Point *p, const SDL_Rect *r) +{ + return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && + (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the rectangle has no area. + */ +SDL_FORCE_INLINE SDL_bool SDL_RectEmpty(const SDL_Rect *r) +{ + return ((!r) || (r->w <= 0) || (r->h <= 0)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the two rectangles are equal. + */ +SDL_FORCE_INLINE SDL_bool SDL_RectEquals(const SDL_Rect *a, const SDL_Rect *b) +{ + return (a && b && (a->x == b->x) && (a->y == b->y) && + (a->w == b->w) && (a->h == b->h)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Determine whether two rectangles intersect. + * + * If either pointer is NULL the function will return SDL_FALSE. + * + * \param A an SDL_Rect structure representing the first rectangle + * \param B an SDL_Rect structure representing the second rectangle + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_IntersectRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersection(const SDL_Rect * A, + const SDL_Rect * B); + +/** + * Calculate the intersection of two rectangles. + * + * If `result` is NULL then this function will return SDL_FALSE. + * + * \param A an SDL_Rect structure representing the first rectangle + * \param B an SDL_Rect structure representing the second rectangle + * \param result an SDL_Rect structure filled in with the intersection of + * rectangles `A` and `B` + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasIntersection + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRect(const SDL_Rect * A, + const SDL_Rect * B, + SDL_Rect * result); + +/** + * Calculate the union of two rectangles. + * + * \param A an SDL_Rect structure representing the first rectangle + * \param B an SDL_Rect structure representing the second rectangle + * \param result an SDL_Rect structure filled in with the union of rectangles + * `A` and `B` + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_UnionRect(const SDL_Rect * A, + const SDL_Rect * B, + SDL_Rect * result); + +/** + * Calculate a minimal rectangle enclosing a set of points. + * + * If `clip` is not NULL then only points inside of the clipping rectangle are + * considered. + * + * \param points an array of SDL_Point structures representing points to be + * enclosed + * \param count the number of structures in the `points` array + * \param clip an SDL_Rect used for clipping or NULL to enclose all points + * \param result an SDL_Rect structure filled in with the minimal enclosing + * rectangle + * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + * points were outside of the clipping rectangle. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_EnclosePoints(const SDL_Point * points, + int count, + const SDL_Rect * clip, + SDL_Rect * result); + +/** + * Calculate the intersection of a rectangle and line segment. + * + * This function is used to clip a line segment to a rectangle. A line segment + * contained entirely within the rectangle or that does not intersect will + * remain unchanged. A line segment that crosses the rectangle at either or + * both ends will be clipped to the boundary of the rectangle and the new + * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + * + * \param rect an SDL_Rect structure representing the rectangle to intersect + * \param X1 a pointer to the starting X-coordinate of the line + * \param Y1 a pointer to the starting Y-coordinate of the line + * \param X2 a pointer to the ending X-coordinate of the line + * \param Y2 a pointer to the ending Y-coordinate of the line + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRectAndLine(const SDL_Rect * + rect, int *X1, + int *Y1, int *X2, + int *Y2); + + +/* SDL_FRect versions... */ + +/** + * Returns true if point resides inside a rectangle. + */ +SDL_FORCE_INLINE SDL_bool SDL_PointInFRect(const SDL_FPoint *p, const SDL_FRect *r) +{ + return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && + (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the rectangle has no area. + */ +SDL_FORCE_INLINE SDL_bool SDL_FRectEmpty(const SDL_FRect *r) +{ + return ((!r) || (r->w <= 0.0f) || (r->h <= 0.0f)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the two rectangles are equal, within some given epsilon. + * + * \since This function is available since SDL 2.0.22. + */ +SDL_FORCE_INLINE SDL_bool SDL_FRectEqualsEpsilon(const SDL_FRect *a, const SDL_FRect *b, const float epsilon) +{ + return (a && b && ((a == b) || + ((SDL_fabs(a->x - b->x) <= epsilon) && + (SDL_fabs(a->y - b->y) <= epsilon) && + (SDL_fabs(a->w - b->w) <= epsilon) && + (SDL_fabs(a->h - b->h) <= epsilon)))) + ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the two rectangles are equal, using a default epsilon. + * + * \since This function is available since SDL 2.0.22. + */ +SDL_FORCE_INLINE SDL_bool SDL_FRectEquals(const SDL_FRect *a, const SDL_FRect *b) +{ + return SDL_FRectEqualsEpsilon(a, b, SDL_FLT_EPSILON); +} + +/** + * Determine whether two rectangles intersect with float precision. + * + * If either pointer is NULL the function will return SDL_FALSE. + * + * \param A an SDL_FRect structure representing the first rectangle + * \param B an SDL_FRect structure representing the second rectangle + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.22. + * + * \sa SDL_IntersectRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersectionF(const SDL_FRect * A, + const SDL_FRect * B); + +/** + * Calculate the intersection of two rectangles with float precision. + * + * If `result` is NULL then this function will return SDL_FALSE. + * + * \param A an SDL_FRect structure representing the first rectangle + * \param B an SDL_FRect structure representing the second rectangle + * \param result an SDL_FRect structure filled in with the intersection of + * rectangles `A` and `B` + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.22. + * + * \sa SDL_HasIntersectionF + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRect(const SDL_FRect * A, + const SDL_FRect * B, + SDL_FRect * result); + +/** + * Calculate the union of two rectangles with float precision. + * + * \param A an SDL_FRect structure representing the first rectangle + * \param B an SDL_FRect structure representing the second rectangle + * \param result an SDL_FRect structure filled in with the union of rectangles + * `A` and `B` + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC void SDLCALL SDL_UnionFRect(const SDL_FRect * A, + const SDL_FRect * B, + SDL_FRect * result); + +/** + * Calculate a minimal rectangle enclosing a set of points with float + * precision. + * + * If `clip` is not NULL then only points inside of the clipping rectangle are + * considered. + * + * \param points an array of SDL_FPoint structures representing points to be + * enclosed + * \param count the number of structures in the `points` array + * \param clip an SDL_FRect used for clipping or NULL to enclose all points + * \param result an SDL_FRect structure filled in with the minimal enclosing + * rectangle + * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + * points were outside of the clipping rectangle. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_EncloseFPoints(const SDL_FPoint * points, + int count, + const SDL_FRect * clip, + SDL_FRect * result); + +/** + * Calculate the intersection of a rectangle and line segment with float + * precision. + * + * This function is used to clip a line segment to a rectangle. A line segment + * contained entirely within the rectangle or that does not intersect will + * remain unchanged. A line segment that crosses the rectangle at either or + * both ends will be clipped to the boundary of the rectangle and the new + * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + * + * \param rect an SDL_FRect structure representing the rectangle to intersect + * \param X1 a pointer to the starting X-coordinate of the line + * \param Y1 a pointer to the starting Y-coordinate of the line + * \param X2 a pointer to the ending X-coordinate of the line + * \param Y2 a pointer to the ending Y-coordinate of the line + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRectAndLine(const SDL_FRect * + rect, float *X1, + float *Y1, float *X2, + float *Y2); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_rect_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_render.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_render.h new file mode 100644 index 00000000000..330bddc0dc7 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_render.h @@ -0,0 +1,1908 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_render.h + * + * Header file for SDL 2D rendering functions. + * + * This API supports the following features: + * * single pixel points + * * single pixel lines + * * filled rectangles + * * texture images + * + * The primitives may be drawn in opaque, blended, or additive modes. + * + * The texture images may be drawn in opaque, blended, or additive modes. + * They can have an additional color tint or alpha modulation applied to + * them, and may also be stretched with linear interpolation. + * + * This API is designed to accelerate simple 2D operations. You may + * want more functionality such as polygons and particle effects and + * in that case you should use SDL's OpenGL/Direct3D support or one + * of the many good 3D engines. + * + * These functions must be called from the main thread. + * See this bug for details: http://bugzilla.libsdl.org/show_bug.cgi?id=1995 + */ + +#ifndef SDL_render_h_ +#define SDL_render_h_ + +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Flags used when creating a rendering context + */ +typedef enum +{ + SDL_RENDERER_SOFTWARE = 0x00000001, /**< The renderer is a software fallback */ + SDL_RENDERER_ACCELERATED = 0x00000002, /**< The renderer uses hardware + acceleration */ + SDL_RENDERER_PRESENTVSYNC = 0x00000004, /**< Present is synchronized + with the refresh rate */ + SDL_RENDERER_TARGETTEXTURE = 0x00000008 /**< The renderer supports + rendering to texture */ +} SDL_RendererFlags; + +/** + * Information on the capabilities of a render driver or context. + */ +typedef struct SDL_RendererInfo +{ + const char *name; /**< The name of the renderer */ + Uint32 flags; /**< Supported ::SDL_RendererFlags */ + Uint32 num_texture_formats; /**< The number of available texture formats */ + Uint32 texture_formats[16]; /**< The available texture formats */ + int max_texture_width; /**< The maximum texture width */ + int max_texture_height; /**< The maximum texture height */ +} SDL_RendererInfo; + +/** + * Vertex structure + */ +typedef struct SDL_Vertex +{ + SDL_FPoint position; /**< Vertex position, in SDL_Renderer coordinates */ + SDL_Color color; /**< Vertex color */ + SDL_FPoint tex_coord; /**< Normalized texture coordinates, if needed */ +} SDL_Vertex; + +/** + * The scaling mode for a texture. + */ +typedef enum +{ + SDL_ScaleModeNearest, /**< nearest pixel sampling */ + SDL_ScaleModeLinear, /**< linear filtering */ + SDL_ScaleModeBest /**< anisotropic filtering */ +} SDL_ScaleMode; + +/** + * The access pattern allowed for a texture. + */ +typedef enum +{ + SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */ + SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */ + SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */ +} SDL_TextureAccess; + +/** + * The texture channel modulation used in SDL_RenderCopy(). + */ +typedef enum +{ + SDL_TEXTUREMODULATE_NONE = 0x00000000, /**< No modulation */ + SDL_TEXTUREMODULATE_COLOR = 0x00000001, /**< srcC = srcC * color */ + SDL_TEXTUREMODULATE_ALPHA = 0x00000002 /**< srcA = srcA * alpha */ +} SDL_TextureModulate; + +/** + * Flip constants for SDL_RenderCopyEx + */ +typedef enum +{ + SDL_FLIP_NONE = 0x00000000, /**< Do not flip */ + SDL_FLIP_HORIZONTAL = 0x00000001, /**< flip horizontally */ + SDL_FLIP_VERTICAL = 0x00000002 /**< flip vertically */ +} SDL_RendererFlip; + +/** + * A structure representing rendering state + */ +struct SDL_Renderer; +typedef struct SDL_Renderer SDL_Renderer; + +/** + * An efficient driver-specific representation of pixel data + */ +struct SDL_Texture; +typedef struct SDL_Texture SDL_Texture; + +/* Function prototypes */ + +/** + * Get the number of 2D rendering drivers available for the current display. + * + * A render driver is a set of code that handles rendering and texture + * management on a particular display. Normally there is only one, but some + * drivers may have several available with different capabilities. + * + * There may be none if SDL was compiled without render support. + * + * \returns a number >= 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_GetRenderDriverInfo + */ +extern DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void); + +/** + * Get info about a specific 2D rendering driver for the current display. + * + * \param index the index of the driver to query information about + * \param info an SDL_RendererInfo structure to be filled with information on + * the rendering driver + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_GetNumRenderDrivers + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDriverInfo(int index, + SDL_RendererInfo * info); + +/** + * Create a window and default renderer. + * + * \param width the width of the window + * \param height the height of the window + * \param window_flags the flags used to create the window (see + * SDL_CreateWindow()) + * \param window a pointer filled with the window, or NULL on error + * \param renderer a pointer filled with the renderer, or NULL on error + * \returns 0 on success, or -1 on error; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_CreateWindow + */ +extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer( + int width, int height, Uint32 window_flags, + SDL_Window **window, SDL_Renderer **renderer); + + +/** + * Create a 2D rendering context for a window. + * + * \param window the window where rendering is displayed + * \param index the index of the rendering driver to initialize, or -1 to + * initialize the first one supporting the requested flags + * \param flags 0, or one or more SDL_RendererFlags OR'd together + * \returns a valid rendering context or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSoftwareRenderer + * \sa SDL_DestroyRenderer + * \sa SDL_GetNumRenderDrivers + * \sa SDL_GetRendererInfo + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window, + int index, Uint32 flags); + +/** + * Create a 2D software rendering context for a surface. + * + * Two other API which can be used to create SDL_Renderer: + * SDL_CreateRenderer() and SDL_CreateWindowAndRenderer(). These can _also_ + * create a software renderer, but they are intended to be used with an + * SDL_Window as the final destination and not an SDL_Surface. + * + * \param surface the SDL_Surface structure representing the surface where + * rendering is done + * \returns a valid rendering context or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_CreateWindowRenderer + * \sa SDL_DestroyRenderer + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface); + +/** + * Get the renderer associated with a window. + * + * \param window the window to query + * \returns the rendering context on success or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window * window); + +/** + * Get the window associated with a renderer. + * + * \param renderer the renderer to query + * \returns the window on success or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_RenderGetWindow(SDL_Renderer *renderer); + +/** + * Get information about a rendering context. + * + * \param renderer the rendering context + * \param info an SDL_RendererInfo structure filled with information about the + * current renderer + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + */ +extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer * renderer, + SDL_RendererInfo * info); + +/** + * Get the output size in pixels of a rendering context. + * + * Due to high-dpi displays, you might end up with a rendering context that + * has more pixels than the window that contains it, so use this instead of + * SDL_GetWindowSize() to decide how much drawing area you have. + * + * \param renderer the rendering context + * \param w an int filled with the width + * \param h an int filled with the height + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderer + */ +extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, + int *w, int *h); + +/** + * Create a texture for a rendering context. + * + * You can set the texture scaling method by setting + * `SDL_HINT_RENDER_SCALE_QUALITY` before creating the texture. + * + * \param renderer the rendering context + * \param format one of the enumerated values in SDL_PixelFormatEnum + * \param access one of the enumerated values in SDL_TextureAccess + * \param w the width of the texture in pixels + * \param h the height of the texture in pixels + * \returns a pointer to the created texture or NULL if no rendering context + * was active, the format was unsupported, or the width or height + * were out of range; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTextureFromSurface + * \sa SDL_DestroyTexture + * \sa SDL_QueryTexture + * \sa SDL_UpdateTexture + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, + Uint32 format, + int access, int w, + int h); + +/** + * Create a texture from an existing surface. + * + * The surface is not modified or freed by this function. + * + * The SDL_TextureAccess hint for the created texture is + * `SDL_TEXTUREACCESS_STATIC`. + * + * The pixel format of the created texture may be different from the pixel + * format of the surface. Use SDL_QueryTexture() to query the pixel format of + * the texture. + * + * \param renderer the rendering context + * \param surface the SDL_Surface structure containing pixel data used to fill + * the texture + * \returns the created texture or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + * \sa SDL_DestroyTexture + * \sa SDL_QueryTexture + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface); + +/** + * Query the attributes of a texture. + * + * \param texture the texture to query + * \param format a pointer filled in with the raw format of the texture; the + * actual format may differ, but pixel transfers will use this + * format (one of the SDL_PixelFormatEnum values). This argument + * can be NULL if you don't need this information. + * \param access a pointer filled in with the actual access to the texture + * (one of the SDL_TextureAccess values). This argument can be + * NULL if you don't need this information. + * \param w a pointer filled in with the width of the texture in pixels. This + * argument can be NULL if you don't need this information. + * \param h a pointer filled in with the height of the texture in pixels. This + * argument can be NULL if you don't need this information. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + */ +extern DECLSPEC int SDLCALL SDL_QueryTexture(SDL_Texture * texture, + Uint32 * format, int *access, + int *w, int *h); + +/** + * Set an additional color value multiplied into render copy operations. + * + * When this texture is rendered, during the copy operation each source color + * channel is modulated by the appropriate color value according to the + * following formula: + * + * `srcC = srcC * (color / 255)` + * + * Color modulation is not always supported by the renderer; it will return -1 + * if color modulation is not supported. + * + * \param texture the texture to update + * \param r the red color value multiplied into copy operations + * \param g the green color value multiplied into copy operations + * \param b the blue color value multiplied into copy operations + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureColorMod + * \sa SDL_SetTextureAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_SetTextureColorMod(SDL_Texture * texture, + Uint8 r, Uint8 g, Uint8 b); + + +/** + * Get the additional color value multiplied into render copy operations. + * + * \param texture the texture to query + * \param r a pointer filled in with the current red color value + * \param g a pointer filled in with the current green color value + * \param b a pointer filled in with the current blue color value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureAlphaMod + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_GetTextureColorMod(SDL_Texture * texture, + Uint8 * r, Uint8 * g, + Uint8 * b); + +/** + * Set an additional alpha value multiplied into render copy operations. + * + * When this texture is rendered, during the copy operation the source alpha + * value is modulated by this alpha value according to the following formula: + * + * `srcA = srcA * (alpha / 255)` + * + * Alpha modulation is not always supported by the renderer; it will return -1 + * if alpha modulation is not supported. + * + * \param texture the texture to update + * \param alpha the source alpha value multiplied into copy operations + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureAlphaMod + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_SetTextureAlphaMod(SDL_Texture * texture, + Uint8 alpha); + +/** + * Get the additional alpha value multiplied into render copy operations. + * + * \param texture the texture to query + * \param alpha a pointer filled in with the current alpha value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureColorMod + * \sa SDL_SetTextureAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_GetTextureAlphaMod(SDL_Texture * texture, + Uint8 * alpha); + +/** + * Set the blend mode for a texture, used by SDL_RenderCopy(). + * + * If the blend mode is not supported, the closest supported mode is chosen + * and this function returns -1. + * + * \param texture the texture to update + * \param blendMode the SDL_BlendMode to use for texture blending + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureBlendMode + * \sa SDL_RenderCopy + */ +extern DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_Texture * texture, + SDL_BlendMode blendMode); + +/** + * Get the blend mode used for texture copy operations. + * + * \param texture the texture to query + * \param blendMode a pointer filled in with the current SDL_BlendMode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetTextureBlendMode + */ +extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture * texture, + SDL_BlendMode *blendMode); + +/** + * Set the scale mode used for texture scale operations. + * + * If the scale mode is not supported, the closest supported mode is chosen. + * + * \param texture The texture to update. + * \param scaleMode the SDL_ScaleMode to use for texture scaling. + * \returns 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_GetTextureScaleMode + */ +extern DECLSPEC int SDLCALL SDL_SetTextureScaleMode(SDL_Texture * texture, + SDL_ScaleMode scaleMode); + +/** + * Get the scale mode used for texture scale operations. + * + * \param texture the texture to query. + * \param scaleMode a pointer filled in with the current scale mode. + * \return 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_SetTextureScaleMode + */ +extern DECLSPEC int SDLCALL SDL_GetTextureScaleMode(SDL_Texture * texture, + SDL_ScaleMode *scaleMode); + +/** + * Associate a user-specified pointer with a texture. + * + * \param texture the texture to update. + * \param userdata the pointer to associate with the texture. + * \returns 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GetTextureUserData + */ +extern DECLSPEC int SDLCALL SDL_SetTextureUserData(SDL_Texture * texture, + void *userdata); + +/** + * Get the user-specified pointer associated with a texture + * + * \param texture the texture to query. + * \return the pointer associated with the texture, or NULL if the texture is + * not valid. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_SetTextureUserData + */ +extern DECLSPEC void * SDLCALL SDL_GetTextureUserData(SDL_Texture * texture); + +/** + * Update the given texture rectangle with new pixel data. + * + * The pixel data must be in the pixel format of the texture. Use + * SDL_QueryTexture() to query the pixel format of the texture. + * + * This is a fairly slow function, intended for use with static textures that + * do not change often. + * + * If the texture is intended to be updated often, it is preferred to create + * the texture as streaming and use the locking functions referenced below. + * While this function will work with streaming textures, for optimization + * reasons you may not get the pixels back if you lock the texture afterward. + * + * \param texture the texture to update + * \param rect an SDL_Rect structure representing the area to update, or NULL + * to update the entire texture + * \param pixels the raw pixel data in the format of the texture + * \param pitch the number of bytes in a row of pixel data, including padding + * between lines + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + * \sa SDL_LockTexture + * \sa SDL_UnlockTexture + */ +extern DECLSPEC int SDLCALL SDL_UpdateTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const void *pixels, int pitch); + +/** + * Update a rectangle within a planar YV12 or IYUV texture with new pixel + * data. + * + * You can use SDL_UpdateTexture() as long as your pixel data is a contiguous + * block of Y and U/V planes in the proper order, but this function is + * available if your pixel data is not contiguous. + * + * \param texture the texture to update + * \param rect a pointer to the rectangle of pixels to update, or NULL to + * update the entire texture + * \param Yplane the raw pixel data for the Y plane + * \param Ypitch the number of bytes between rows of pixel data for the Y + * plane + * \param Uplane the raw pixel data for the U plane + * \param Upitch the number of bytes between rows of pixel data for the U + * plane + * \param Vplane the raw pixel data for the V plane + * \param Vpitch the number of bytes between rows of pixel data for the V + * plane + * \returns 0 on success or -1 if the texture is not valid; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_UpdateTexture + */ +extern DECLSPEC int SDLCALL SDL_UpdateYUVTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const Uint8 *Yplane, int Ypitch, + const Uint8 *Uplane, int Upitch, + const Uint8 *Vplane, int Vpitch); + +/** + * Update a rectangle within a planar NV12 or NV21 texture with new pixels. + * + * You can use SDL_UpdateTexture() as long as your pixel data is a contiguous + * block of NV12/21 planes in the proper order, but this function is available + * if your pixel data is not contiguous. + * + * \param texture the texture to update + * \param rect a pointer to the rectangle of pixels to update, or NULL to + * update the entire texture. + * \param Yplane the raw pixel data for the Y plane. + * \param Ypitch the number of bytes between rows of pixel data for the Y + * plane. + * \param UVplane the raw pixel data for the UV plane. + * \param UVpitch the number of bytes between rows of pixel data for the UV + * plane. + * \return 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_UpdateNVTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const Uint8 *Yplane, int Ypitch, + const Uint8 *UVplane, int UVpitch); + +/** + * Lock a portion of the texture for **write-only** pixel access. + * + * As an optimization, the pixels made available for editing don't necessarily + * contain the old texture data. This is a write-only operation, and if you + * need to keep a copy of the texture data you should do that at the + * application level. + * + * You must use SDL_UnlockTexture() to unlock the pixels and apply any + * changes. + * + * \param texture the texture to lock for access, which was created with + * `SDL_TEXTUREACCESS_STREAMING` + * \param rect an SDL_Rect structure representing the area to lock for access; + * NULL to lock the entire texture + * \param pixels this is filled in with a pointer to the locked pixels, + * appropriately offset by the locked area + * \param pitch this is filled in with the pitch of the locked pixels; the + * pitch is the length of one row in bytes + * \returns 0 on success or a negative error code if the texture is not valid + * or was not created with `SDL_TEXTUREACCESS_STREAMING`; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_UnlockTexture + */ +extern DECLSPEC int SDLCALL SDL_LockTexture(SDL_Texture * texture, + const SDL_Rect * rect, + void **pixels, int *pitch); + +/** + * Lock a portion of the texture for **write-only** pixel access, and expose + * it as a SDL surface. + * + * Besides providing an SDL_Surface instead of raw pixel data, this function + * operates like SDL_LockTexture. + * + * As an optimization, the pixels made available for editing don't necessarily + * contain the old texture data. This is a write-only operation, and if you + * need to keep a copy of the texture data you should do that at the + * application level. + * + * You must use SDL_UnlockTexture() to unlock the pixels and apply any + * changes. + * + * The returned surface is freed internally after calling SDL_UnlockTexture() + * or SDL_DestroyTexture(). The caller should not free it. + * + * \param texture the texture to lock for access, which was created with + * `SDL_TEXTUREACCESS_STREAMING` + * \param rect a pointer to the rectangle to lock for access. If the rect is + * NULL, the entire texture will be locked + * \param surface this is filled in with an SDL surface representing the + * locked area + * \returns 0 on success, or -1 if the texture is not valid or was not created + * with `SDL_TEXTUREACCESS_STREAMING` + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_LockTexture + * \sa SDL_UnlockTexture + */ +extern DECLSPEC int SDLCALL SDL_LockTextureToSurface(SDL_Texture *texture, + const SDL_Rect *rect, + SDL_Surface **surface); + +/** + * Unlock a texture, uploading the changes to video memory, if needed. + * + * **Warning**: Please note that SDL_LockTexture() is intended to be + * write-only; it will not guarantee the previous contents of the texture will + * be provided. You must fully initialize any area of a texture that you lock + * before unlocking it, as the pixels might otherwise be uninitialized memory. + * + * Which is to say: locking and immediately unlocking a texture can result in + * corrupted textures, depending on the renderer in use. + * + * \param texture a texture locked by SDL_LockTexture() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockTexture + */ +extern DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture * texture); + +/** + * Determine whether a renderer supports the use of render targets. + * + * \param renderer the renderer that will be checked + * \returns SDL_TRUE if supported or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderTarget + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderTargetSupported(SDL_Renderer *renderer); + +/** + * Set a texture as the current rendering target. + * + * Before using this function, you should check the + * `SDL_RENDERER_TARGETTEXTURE` bit in the flags of SDL_RendererInfo to see if + * render targets are supported. + * + * The default render target is the window for which the renderer was created. + * To stop rendering to a texture and render to the window again, call this + * function with a NULL `texture`. + * + * \param renderer the rendering context + * \param texture the targeted texture, which must be created with the + * `SDL_TEXTUREACCESS_TARGET` flag, or NULL to render to the + * window instead of a texture. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderTarget + */ +extern DECLSPEC int SDLCALL SDL_SetRenderTarget(SDL_Renderer *renderer, + SDL_Texture *texture); + +/** + * Get the current render target. + * + * The default render target is the window for which the renderer was created, + * and is reported a NULL here. + * + * \param renderer the rendering context + * \returns the current render target or NULL for the default render target. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderTarget + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *renderer); + +/** + * Set a device independent resolution for rendering. + * + * This function uses the viewport and scaling functionality to allow a fixed + * logical resolution for rendering, regardless of the actual output + * resolution. If the actual output resolution doesn't have the same aspect + * ratio the output rendering will be centered within the output display. + * + * If the output display is a window, mouse and touch events in the window + * will be filtered and scaled so they seem to arrive within the logical + * resolution. The SDL_HINT_MOUSE_RELATIVE_SCALING hint controls whether + * relative motion events are also scaled. + * + * If this function results in scaling or subpixel drawing by the rendering + * backend, it will be handled using the appropriate quality hints. + * + * \param renderer the renderer for which resolution should be set + * \param w the width of the logical resolution + * \param h the height of the logical resolution + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetLogicalSize + */ +extern DECLSPEC int SDLCALL SDL_RenderSetLogicalSize(SDL_Renderer * renderer, int w, int h); + +/** + * Get device independent resolution for rendering. + * + * This may return 0 for `w` and `h` if the SDL_Renderer has never had its + * logical size set by SDL_RenderSetLogicalSize() and never had a render + * target set. + * + * \param renderer a rendering context + * \param w an int to be filled with the width + * \param h an int to be filled with the height + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC void SDLCALL SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h); + +/** + * Set whether to force integer scales for resolution-independent rendering. + * + * This function restricts the logical viewport to integer values - that is, + * when a resolution is between two multiples of a logical size, the viewport + * size is rounded down to the lower multiple. + * + * \param renderer the renderer for which integer scaling should be set + * \param enable enable or disable the integer scaling for rendering + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_RenderGetIntegerScale + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC int SDLCALL SDL_RenderSetIntegerScale(SDL_Renderer * renderer, + SDL_bool enable); + +/** + * Get whether integer scales are forced for resolution-independent rendering. + * + * \param renderer the renderer from which integer scaling should be queried + * \returns SDL_TRUE if integer scales are forced or SDL_FALSE if not and on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_RenderSetIntegerScale + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderGetIntegerScale(SDL_Renderer * renderer); + +/** + * Set the drawing area for rendering on the current target. + * + * When the window is resized, the viewport is reset to fill the entire new + * window size. + * + * \param renderer the rendering context + * \param rect the SDL_Rect structure representing the drawing area, or NULL + * to set the viewport to the entire target + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetViewport + */ +extern DECLSPEC int SDLCALL SDL_RenderSetViewport(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Get the drawing area for the current target. + * + * \param renderer the rendering context + * \param rect an SDL_Rect structure filled in with the current drawing area + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderSetViewport + */ +extern DECLSPEC void SDLCALL SDL_RenderGetViewport(SDL_Renderer * renderer, + SDL_Rect * rect); + +/** + * Set the clip rectangle for rendering on the specified target. + * + * \param renderer the rendering context for which clip rectangle should be + * set + * \param rect an SDL_Rect structure representing the clip area, relative to + * the viewport, or NULL to disable clipping + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetClipRect + * \sa SDL_RenderIsClipEnabled + */ +extern DECLSPEC int SDLCALL SDL_RenderSetClipRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Get the clip rectangle for the current target. + * + * \param renderer the rendering context from which clip rectangle should be + * queried + * \param rect an SDL_Rect structure filled in with the current clipping area + * or an empty rectangle if clipping is disabled + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderIsClipEnabled + * \sa SDL_RenderSetClipRect + */ +extern DECLSPEC void SDLCALL SDL_RenderGetClipRect(SDL_Renderer * renderer, + SDL_Rect * rect); + +/** + * Get whether clipping is enabled on the given renderer. + * + * \param renderer the renderer from which clip state should be queried + * \returns SDL_TRUE if clipping is enabled or SDL_FALSE if not; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_RenderGetClipRect + * \sa SDL_RenderSetClipRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderIsClipEnabled(SDL_Renderer * renderer); + + +/** + * Set the drawing scale for rendering on the current target. + * + * The drawing coordinates are scaled by the x/y scaling factors before they + * are used by the renderer. This allows resolution independent drawing with a + * single coordinate system. + * + * If this results in scaling or subpixel drawing by the rendering backend, it + * will be handled using the appropriate quality hints. For best results use + * integer scaling factors. + * + * \param renderer a rendering context + * \param scaleX the horizontal scaling factor + * \param scaleY the vertical scaling factor + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetScale + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC int SDLCALL SDL_RenderSetScale(SDL_Renderer * renderer, + float scaleX, float scaleY); + +/** + * Get the drawing scale for the current target. + * + * \param renderer the renderer from which drawing scale should be queried + * \param scaleX a pointer filled in with the horizontal scaling factor + * \param scaleY a pointer filled in with the vertical scaling factor + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderSetScale + */ +extern DECLSPEC void SDLCALL SDL_RenderGetScale(SDL_Renderer * renderer, + float *scaleX, float *scaleY); + +/** + * Get logical coordinates of point in renderer when given real coordinates of + * point in window. + * + * Logical coordinates will differ from real coordinates when render is scaled + * and logical renderer size set + * + * \param renderer the renderer from which the logical coordinates should be + * calcualted + * \param windowX the real X coordinate in the window + * \param windowY the real Y coordinate in the window + * \param logicalX the pointer filled with the logical x coordinate + * \param logicalY the pointer filled with the logical y coordinate + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGetScale + * \sa SDL_RenderSetScale + * \sa SDL_RenderGetLogicalSize + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC void SDLCALL SDL_RenderWindowToLogical(SDL_Renderer * renderer, + int windowX, int windowY, + float *logicalX, float *logicalY); + + /** + * Get real coordinates of point in window when given logical coordinates of point in renderer. + * Logical coordinates will differ from real coordinates when render is scaled and logical renderer size set + * + * \param renderer the renderer from which the window coordinates should be calculated + * \param logicalX the logical x coordinate + * \param logicalY the logical y coordinate + * \param windowX the pointer filled with the real X coordinate in the window + * \param windowY the pointer filled with the real Y coordinate in the window + + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGetScale + * \sa SDL_RenderSetScale + * \sa SDL_RenderGetLogicalSize + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC void SDLCALL SDL_RenderLogicalToWindow(SDL_Renderer * renderer, + float logicalX, float logicalY, + int *windowX, int *windowY); + +/** + * Set the color used for drawing operations (Rect, Line and Clear). + * + * Set the color for drawing or filling rectangles, lines, and points, and for + * SDL_RenderClear(). + * + * \param renderer the rendering context + * \param r the red value used to draw on the rendering target + * \param g the green value used to draw on the rendering target + * \param b the blue value used to draw on the rendering target + * \param a the alpha value used to draw on the rendering target; usually + * `SDL_ALPHA_OPAQUE` (255). Use SDL_SetRenderDrawBlendMode to + * specify how the alpha channel is used + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderDrawColor + * \sa SDL_RenderClear + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + */ +extern DECLSPEC int SDLCALL SDL_SetRenderDrawColor(SDL_Renderer * renderer, + Uint8 r, Uint8 g, Uint8 b, + Uint8 a); + +/** + * Get the color used for drawing operations (Rect, Line and Clear). + * + * \param renderer the rendering context + * \param r a pointer filled in with the red value used to draw on the + * rendering target + * \param g a pointer filled in with the green value used to draw on the + * rendering target + * \param b a pointer filled in with the blue value used to draw on the + * rendering target + * \param a a pointer filled in with the alpha value used to draw on the + * rendering target; usually `SDL_ALPHA_OPAQUE` (255) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDrawColor(SDL_Renderer * renderer, + Uint8 * r, Uint8 * g, Uint8 * b, + Uint8 * a); + +/** + * Set the blend mode used for drawing operations (Fill and Line). + * + * If the blend mode is not supported, the closest supported mode is chosen. + * + * \param renderer the rendering context + * \param blendMode the SDL_BlendMode to use for blending + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderDrawBlendMode + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + */ +extern DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer * renderer, + SDL_BlendMode blendMode); + +/** + * Get the blend mode used for drawing operations. + * + * \param renderer the rendering context + * \param blendMode a pointer filled in with the current SDL_BlendMode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderDrawBlendMode + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer * renderer, + SDL_BlendMode *blendMode); + +/** + * Clear the current rendering target with the drawing color. + * + * This function clears the entire rendering target, ignoring the viewport and + * the clip rectangle. + * + * \param renderer the rendering context + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderClear(SDL_Renderer * renderer); + +/** + * Draw a point on the current rendering target. + * + * SDL_RenderDrawPoint() draws a single point. If you want to draw multiple, + * use SDL_RenderDrawPoints() instead. + * + * \param renderer the rendering context + * \param x the x coordinate of the point + * \param y the y coordinate of the point + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPoint(SDL_Renderer * renderer, + int x, int y); + +/** + * Draw multiple points on the current rendering target. + * + * \param renderer the rendering context + * \param points an array of SDL_Point structures that represent the points to + * draw + * \param count the number of points to draw + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPoints(SDL_Renderer * renderer, + const SDL_Point * points, + int count); + +/** + * Draw a line on the current rendering target. + * + * SDL_RenderDrawLine() draws the line to include both end points. If you want + * to draw multiple, connecting lines use SDL_RenderDrawLines() instead. + * + * \param renderer the rendering context + * \param x1 the x coordinate of the start point + * \param y1 the y coordinate of the start point + * \param x2 the x coordinate of the end point + * \param y2 the y coordinate of the end point + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLine(SDL_Renderer * renderer, + int x1, int y1, int x2, int y2); + +/** + * Draw a series of connected lines on the current rendering target. + * + * \param renderer the rendering context + * \param points an array of SDL_Point structures representing points along + * the lines + * \param count the number of points, drawing count-1 lines + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLines(SDL_Renderer * renderer, + const SDL_Point * points, + int count); + +/** + * Draw a rectangle on the current rendering target. + * + * \param renderer the rendering context + * \param rect an SDL_Rect structure representing the rectangle to draw, or + * NULL to outline the entire rendering target + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Draw some number of rectangles on the current rendering target. + * + * \param renderer the rendering context + * \param rects an array of SDL_Rect structures representing the rectangles to + * be drawn + * \param count the number of rectangles + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRects(SDL_Renderer * renderer, + const SDL_Rect * rects, + int count); + +/** + * Fill a rectangle on the current rendering target with the drawing color. + * + * The current drawing color is set by SDL_SetRenderDrawColor(), and the + * color's alpha value is ignored unless blending is enabled with the + * appropriate call to SDL_SetRenderDrawBlendMode(). + * + * \param renderer the rendering context + * \param rect the SDL_Rect structure representing the rectangle to fill, or + * NULL for the entire rendering target + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Fill some number of rectangles on the current rendering target with the + * drawing color. + * + * \param renderer the rendering context + * \param rects an array of SDL_Rect structures representing the rectangles to + * be filled + * \param count the number of rectangles + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderPresent + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRects(SDL_Renderer * renderer, + const SDL_Rect * rects, + int count); + +/** + * Copy a portion of the texture to the current rendering target. + * + * The texture is blended with the destination based on its blend mode set + * with SDL_SetTextureBlendMode(). + * + * The texture color is affected based on its color modulation set by + * SDL_SetTextureColorMod(). + * + * The texture alpha is affected based on its alpha modulation set by + * SDL_SetTextureAlphaMod(). + * + * \param renderer the rendering context + * \param texture the source texture + * \param srcrect the source SDL_Rect structure or NULL for the entire texture + * \param dstrect the destination SDL_Rect structure or NULL for the entire + * rendering target; the texture will be stretched to fill the + * given rectangle + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderCopyEx + * \sa SDL_SetTextureAlphaMod + * \sa SDL_SetTextureBlendMode + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_Rect * dstrect); + +/** + * Copy a portion of the texture to the current rendering, with optional + * rotation and flipping. + * + * Copy a portion of the texture to the current rendering target, optionally + * rotating it by angle around the given center and also flipping it + * top-bottom and/or left-right. + * + * The texture is blended with the destination based on its blend mode set + * with SDL_SetTextureBlendMode(). + * + * The texture color is affected based on its color modulation set by + * SDL_SetTextureColorMod(). + * + * The texture alpha is affected based on its alpha modulation set by + * SDL_SetTextureAlphaMod(). + * + * \param renderer the rendering context + * \param texture the source texture + * \param srcrect the source SDL_Rect structure or NULL for the entire texture + * \param dstrect the destination SDL_Rect structure or NULL for the entire + * rendering target + * \param angle an angle in degrees that indicates the rotation that will be + * applied to dstrect, rotating it in a clockwise direction + * \param center a pointer to a point indicating the point around which + * dstrect will be rotated (if NULL, rotation will be done + * around `dstrect.w / 2`, `dstrect.h / 2`) + * \param flip a SDL_RendererFlip value stating which flipping actions should + * be performed on the texture + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderCopy + * \sa SDL_SetTextureAlphaMod + * \sa SDL_SetTextureBlendMode + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyEx(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_Rect * dstrect, + const double angle, + const SDL_Point *center, + const SDL_RendererFlip flip); + + +/** + * Draw a point on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw a point. + * \param x The x coordinate of the point. + * \param y The y coordinate of the point. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPointF(SDL_Renderer * renderer, + float x, float y); + +/** + * Draw multiple points on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw multiple points. + * \param points The points to draw + * \param count The number of points to draw + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPointsF(SDL_Renderer * renderer, + const SDL_FPoint * points, + int count); + +/** + * Draw a line on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw a line. + * \param x1 The x coordinate of the start point. + * \param y1 The y coordinate of the start point. + * \param x2 The x coordinate of the end point. + * \param y2 The y coordinate of the end point. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLineF(SDL_Renderer * renderer, + float x1, float y1, float x2, float y2); + +/** + * Draw a series of connected lines on the current rendering target at + * subpixel precision. + * + * \param renderer The renderer which should draw multiple lines. + * \param points The points along the lines + * \param count The number of points, drawing count-1 lines + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLinesF(SDL_Renderer * renderer, + const SDL_FPoint * points, + int count); + +/** + * Draw a rectangle on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw a rectangle. + * \param rect A pointer to the destination rectangle, or NULL to outline the + * entire rendering target. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRectF(SDL_Renderer * renderer, + const SDL_FRect * rect); + +/** + * Draw some number of rectangles on the current rendering target at subpixel + * precision. + * + * \param renderer The renderer which should draw multiple rectangles. + * \param rects A pointer to an array of destination rectangles. + * \param count The number of rectangles. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRectsF(SDL_Renderer * renderer, + const SDL_FRect * rects, + int count); + +/** + * Fill a rectangle on the current rendering target with the drawing color at + * subpixel precision. + * + * \param renderer The renderer which should fill a rectangle. + * \param rect A pointer to the destination rectangle, or NULL for the entire + * rendering target. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRectF(SDL_Renderer * renderer, + const SDL_FRect * rect); + +/** + * Fill some number of rectangles on the current rendering target with the + * drawing color at subpixel precision. + * + * \param renderer The renderer which should fill multiple rectangles. + * \param rects A pointer to an array of destination rectangles. + * \param count The number of rectangles. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRectsF(SDL_Renderer * renderer, + const SDL_FRect * rects, + int count); + +/** + * Copy a portion of the texture to the current rendering target at subpixel + * precision. + * + * \param renderer The renderer which should copy parts of a texture. + * \param texture The source texture. + * \param srcrect A pointer to the source rectangle, or NULL for the entire + * texture. + * \param dstrect A pointer to the destination rectangle, or NULL for the + * entire rendering target. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyF(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_FRect * dstrect); + +/** + * Copy a portion of the source texture to the current rendering target, with + * rotation and flipping, at subpixel precision. + * + * \param renderer The renderer which should copy parts of a texture. + * \param texture The source texture. + * \param srcrect A pointer to the source rectangle, or NULL for the entire + * texture. + * \param dstrect A pointer to the destination rectangle, or NULL for the + * entire rendering target. + * \param angle An angle in degrees that indicates the rotation that will be + * applied to dstrect, rotating it in a clockwise direction + * \param center A pointer to a point indicating the point around which + * dstrect will be rotated (if NULL, rotation will be done + * around dstrect.w/2, dstrect.h/2). + * \param flip An SDL_RendererFlip value stating which flipping actions should + * be performed on the texture + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyExF(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_FRect * dstrect, + const double angle, + const SDL_FPoint *center, + const SDL_RendererFlip flip); + +/** + * Render a list of triangles, optionally using a texture and indices into the + * vertex array Color and alpha modulation is done per vertex + * (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored). + * + * \param renderer The rendering context. + * \param texture (optional) The SDL texture to use. + * \param vertices Vertices. + * \param num_vertices Number of vertices. + * \param indices (optional) An array of integer indices into the 'vertices' + * array, if NULL all vertices will be rendered in sequential + * order. + * \param num_indices Number of indices. + * \return 0 on success, or -1 if the operation is not supported + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGeometryRaw + * \sa SDL_Vertex + */ +extern DECLSPEC int SDLCALL SDL_RenderGeometry(SDL_Renderer *renderer, + SDL_Texture *texture, + const SDL_Vertex *vertices, int num_vertices, + const int *indices, int num_indices); + +/** + * Render a list of triangles, optionally using a texture and indices into the + * vertex arrays Color and alpha modulation is done per vertex + * (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored). + * + * \param renderer The rendering context. + * \param texture (optional) The SDL texture to use. + * \param xy Vertex positions + * \param xy_stride Byte size to move from one element to the next element + * \param color Vertex colors (as SDL_Color) + * \param color_stride Byte size to move from one element to the next element + * \param uv Vertex normalized texture coordinates + * \param uv_stride Byte size to move from one element to the next element + * \param num_vertices Number of vertices. + * \param indices (optional) An array of indices into the 'vertices' arrays, + * if NULL all vertices will be rendered in sequential order. + * \param num_indices Number of indices. + * \param size_indices Index size: 1 (byte), 2 (short), 4 (int) + * \return 0 on success, or -1 if the operation is not supported + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGeometry + * \sa SDL_Vertex + */ +extern DECLSPEC int SDLCALL SDL_RenderGeometryRaw(SDL_Renderer *renderer, + SDL_Texture *texture, + const float *xy, int xy_stride, + const SDL_Color *color, int color_stride, + const float *uv, int uv_stride, + int num_vertices, + const void *indices, int num_indices, int size_indices); + +/** + * Read pixels from the current rendering target to an array of pixels. + * + * **WARNING**: This is a very slow operation, and should not be used + * frequently. If you're using this on the main rendering target, it should be + * called after rendering and before SDL_RenderPresent(). + * + * `pitch` specifies the number of bytes between rows in the destination + * `pixels` data. This allows you to write to a subrectangle or have padded + * rows in the destination. Generally, `pitch` should equal the number of + * pixels per row in the `pixels` data times the number of bytes per pixel, + * but it might contain additional padding (for example, 24bit RGB Windows + * Bitmap data pads all rows to multiples of 4 bytes). + * + * \param renderer the rendering context + * \param rect an SDL_Rect structure representing the area to read, or NULL + * for the entire render target + * \param format an SDL_PixelFormatEnum value of the desired format of the + * pixel data, or 0 to use the format of the rendering target + * \param pixels a pointer to the pixel data to copy into + * \param pitch the pitch of the `pixels` parameter + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_RenderReadPixels(SDL_Renderer * renderer, + const SDL_Rect * rect, + Uint32 format, + void *pixels, int pitch); + +/** + * Update the screen with any rendering performed since the previous call. + * + * SDL's rendering functions operate on a backbuffer; that is, calling a + * rendering function such as SDL_RenderDrawLine() does not directly put a + * line on the screen, but rather updates the backbuffer. As such, you compose + * your entire scene and *present* the composed backbuffer to the screen as a + * complete picture. + * + * Therefore, when using SDL's rendering API, one does all drawing intended + * for the frame, and then calls this function once per frame to present the + * final drawing to the user. + * + * The backbuffer should be considered invalidated after each present; do not + * assume that previous contents will exist between frames. You are strongly + * encouraged to call SDL_RenderClear() to initialize the backbuffer before + * starting each new frame's drawing, even if you plan to overwrite every + * pixel. + * + * \param renderer the rendering context + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderClear + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer); + +/** + * Destroy the specified texture. + * + * Passing NULL or an otherwise invalid texture will set the SDL error message + * to "Invalid texture". + * + * \param texture the texture to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + * \sa SDL_CreateTextureFromSurface + */ +extern DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_Texture * texture); + +/** + * Destroy the rendering context for a window and free associated textures. + * + * \param renderer the rendering context + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + */ +extern DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_Renderer * renderer); + +/** + * Force the rendering context to flush any pending commands to the underlying + * rendering API. + * + * You do not need to (and in fact, shouldn't) call this function unless you + * are planning to call into OpenGL/Direct3D/Metal/whatever directly in + * addition to using an SDL_Renderer. + * + * This is for a very-specific case: if you are using SDL's render API, you + * asked for a specific renderer backend (OpenGL, Direct3D, etc), you set + * SDL_HINT_RENDER_BATCHING to "1", and you plan to make OpenGL/D3D/whatever + * calls in addition to SDL render API calls. If all of this applies, you + * should call SDL_RenderFlush() between calls to SDL's render API and the + * low-level API you're using in cooperation. + * + * In all other cases, you can ignore this function. This is only here to get + * maximum performance out of a specific situation. In all other cases, SDL + * will do the right thing, perhaps at a performance loss. + * + * This function is first available in SDL 2.0.10, and is not needed in 2.0.9 + * and earlier, as earlier versions did not queue rendering commands at all, + * instead flushing them to the OS immediately. + * + * \param renderer the rendering context + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderFlush(SDL_Renderer * renderer); + + +/** + * Bind an OpenGL/ES/ES2 texture to the current context. + * + * This is for use with OpenGL instructions when rendering OpenGL primitives + * directly. + * + * If not NULL, `texw` and `texh` will be filled with the width and height + * values suitable for the provided texture. In most cases, both will be 1.0, + * however, on systems that support the GL_ARB_texture_rectangle extension, + * these values will actually be the pixel width and height used to create the + * texture, so this factor needs to be taken into account when providing + * texture coordinates to OpenGL. + * + * You need a renderer to create an SDL_Texture, therefore you can only use + * this function with an implicit OpenGL context from SDL_CreateRenderer(), + * not with your own OpenGL context. If you need control over your OpenGL + * context, you need to write your own texture-loading methods. + * + * Also note that SDL may upload RGB textures as BGR (or vice-versa), and + * re-order the color channels in the shaders phase, so the uploaded texture + * may have swapped color channels. + * + * \param texture the texture to bind to the current OpenGL/ES/ES2 context + * \param texw a pointer to a float value which will be filled with the + * texture width or NULL if you don't need that value + * \param texh a pointer to a float value which will be filled with the + * texture height or NULL if you don't need that value + * \returns 0 on success, or -1 if the operation is not supported; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_MakeCurrent + * \sa SDL_GL_UnbindTexture + */ +extern DECLSPEC int SDLCALL SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh); + +/** + * Unbind an OpenGL/ES/ES2 texture from the current context. + * + * See SDL_GL_BindTexture() for examples on how to use these functions + * + * \param texture the texture to unbind from the current OpenGL/ES/ES2 context + * \returns 0 on success, or -1 if the operation is not supported + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_BindTexture + * \sa SDL_GL_MakeCurrent + */ +extern DECLSPEC int SDLCALL SDL_GL_UnbindTexture(SDL_Texture *texture); + +/** + * Get the CAMetalLayer associated with the given Metal renderer. + * + * This function returns `void *`, so SDL doesn't have to include Metal's + * headers, but it can be safely cast to a `CAMetalLayer *`. + * + * \param renderer The renderer to query + * \returns a `CAMetalLayer *` on success, or NULL if the renderer isn't a + * Metal renderer + * + * \since This function is available since SDL 2.0.8. + * + * \sa SDL_RenderGetMetalCommandEncoder + */ +extern DECLSPEC void *SDLCALL SDL_RenderGetMetalLayer(SDL_Renderer * renderer); + +/** + * Get the Metal command encoder for the current frame + * + * This function returns `void *`, so SDL doesn't have to include Metal's + * headers, but it can be safely cast to an `id`. + * + * Note that as of SDL 2.0.18, this will return NULL if Metal refuses to give + * SDL a drawable to render to, which might happen if the window is + * hidden/minimized/offscreen. This doesn't apply to command encoders for + * render targets, just the window's backbacker. Check your return values! + * + * \param renderer The renderer to query + * \returns an `id` on success, or NULL if the + * renderer isn't a Metal renderer or there was an error. + * + * \since This function is available since SDL 2.0.8. + * + * \sa SDL_RenderGetMetalLayer + */ +extern DECLSPEC void *SDLCALL SDL_RenderGetMetalCommandEncoder(SDL_Renderer * renderer); + +/** + * Toggle VSync of the given renderer. + * + * \param renderer The renderer to toggle + * \param vsync 1 for on, 0 for off. All other values are reserved + * \returns a 0 int on success, or non-zero on failure + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_RenderSetVSync(SDL_Renderer* renderer, int vsync); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_render_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_revision.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_revision.h new file mode 100644 index 00000000000..9910dff49b8 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_revision.h @@ -0,0 +1,2 @@ +#define SDL_REVISION "https://github.com/libsdl-org/SDL.git@53dea9830964eee8b5c2a7ee0a65d6e268dc78a1" +#define SDL_REVISION_NUMBER 0 diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_rwops.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_rwops.h new file mode 100644 index 00000000000..99e373c8b51 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_rwops.h @@ -0,0 +1,855 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_rwops.h + * + * This file provides a general interface for SDL to read and write + * data streams. It can easily be extended to files, memory, etc. + */ + +#ifndef SDL_rwops_h_ +#define SDL_rwops_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* RWops Types */ +#define SDL_RWOPS_UNKNOWN 0U /**< Unknown stream type */ +#define SDL_RWOPS_WINFILE 1U /**< Win32 file */ +#define SDL_RWOPS_STDFILE 2U /**< Stdio file */ +#define SDL_RWOPS_JNIFILE 3U /**< Android asset */ +#define SDL_RWOPS_MEMORY 4U /**< Memory stream */ +#define SDL_RWOPS_MEMORY_RO 5U /**< Read-Only memory stream */ +#if defined(__VITA__) +#define SDL_RWOPS_VITAFILE 6U /**< Vita file */ +#endif + +/** + * This is the read/write operation structure -- very basic. + */ +typedef struct SDL_RWops +{ + /** + * Return the size of the file in this rwops, or -1 if unknown + */ + Sint64 (SDLCALL * size) (struct SDL_RWops * context); + + /** + * Seek to \c offset relative to \c whence, one of stdio's whence values: + * RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END + * + * \return the final offset in the data stream, or -1 on error. + */ + Sint64 (SDLCALL * seek) (struct SDL_RWops * context, Sint64 offset, + int whence); + + /** + * Read up to \c maxnum objects each of size \c size from the data + * stream to the area pointed at by \c ptr. + * + * \return the number of objects read, or 0 at error or end of file. + */ + size_t (SDLCALL * read) (struct SDL_RWops * context, void *ptr, + size_t size, size_t maxnum); + + /** + * Write exactly \c num objects each of size \c size from the area + * pointed at by \c ptr to data stream. + * + * \return the number of objects written, or 0 at error or end of file. + */ + size_t (SDLCALL * write) (struct SDL_RWops * context, const void *ptr, + size_t size, size_t num); + + /** + * Close and free an allocated SDL_RWops structure. + * + * \return 0 if successful or -1 on write error when flushing data. + */ + int (SDLCALL * close) (struct SDL_RWops * context); + + Uint32 type; + union + { +#if defined(__ANDROID__) + struct + { + void *asset; + } androidio; +#elif defined(__WIN32__) + struct + { + SDL_bool append; + void *h; + struct + { + void *data; + size_t size; + size_t left; + } buffer; + } windowsio; +#elif defined(__VITA__) + struct + { + int h; + struct + { + void *data; + size_t size; + size_t left; + } buffer; + } vitaio; +#endif + +#ifdef HAVE_STDIO_H + struct + { + SDL_bool autoclose; + FILE *fp; + } stdio; +#endif + struct + { + Uint8 *base; + Uint8 *here; + Uint8 *stop; + } mem; + struct + { + void *data1; + void *data2; + } unknown; + } hidden; + +} SDL_RWops; + + +/** + * \name RWFrom functions + * + * Functions to create SDL_RWops structures from various data streams. + */ +/* @{ */ + +/** + * Use this function to create a new SDL_RWops structure for reading from + * and/or writing to a named file. + * + * The `mode` string is treated roughly the same as in a call to the C + * library's fopen(), even if SDL doesn't happen to use fopen() behind the + * scenes. + * + * Available `mode` strings: + * + * - "r": Open a file for reading. The file must exist. + * - "w": Create an empty file for writing. If a file with the same name + * already exists its content is erased and the file is treated as a new + * empty file. + * - "a": Append to a file. Writing operations append data at the end of the + * file. The file is created if it does not exist. + * - "r+": Open a file for update both reading and writing. The file must + * exist. + * - "w+": Create an empty file for both reading and writing. If a file with + * the same name already exists its content is erased and the file is + * treated as a new empty file. + * - "a+": Open a file for reading and appending. All writing operations are + * performed at the end of the file, protecting the previous content to be + * overwritten. You can reposition (fseek, rewind) the internal pointer to + * anywhere in the file for reading, but writing operations will move it + * back to the end of file. The file is created if it does not exist. + * + * **NOTE**: In order to open a file as a binary file, a "b" character has to + * be included in the `mode` string. This additional "b" character can either + * be appended at the end of the string (thus making the following compound + * modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the + * letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). + * Additional characters may follow the sequence, although they should have no + * effect. For example, "t" is sometimes appended to make explicit the file is + * a text file. + * + * This function supports Unicode filenames, but they must be encoded in UTF-8 + * format, regardless of the underlying operating system. + * + * As a fallback, SDL_RWFromFile() will transparently open a matching filename + * in an Android app's `assets`. + * + * Closing the SDL_RWops will close the file handle SDL is holding internally. + * + * \param file a UTF-8 string representing the filename to open + * \param mode an ASCII string representing the mode to be used for opening + * the file. + * \returns a pointer to the SDL_RWops structure that is created, or NULL on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file, + const char *mode); + +#ifdef HAVE_STDIO_H + +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp, SDL_bool autoclose); + +#else + +/** + * Use this function to create an SDL_RWops structure from a standard I/O file + * pointer (stdio.h's `FILE*`). + * + * This function is not available on Windows, since files opened in an + * application on that platform cannot be used by a dynamically linked + * library. + * + * On some platforms, the first parameter is a `void*`, on others, it's a + * `FILE*`, depending on what system headers are available to SDL. It is + * always intended to be the `FILE*` type from the C runtime's stdio.h. + * + * \param fp the `FILE*` that feeds the SDL_RWops stream + * \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, + * SDL_FALSE to leave the `FILE*` open when the RWops is + * closed + * \returns a pointer to the SDL_RWops structure that is created, or NULL on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(void * fp, + SDL_bool autoclose); +#endif + +/** + * Use this function to prepare a read-write memory buffer for use with + * SDL_RWops. + * + * This function sets up an SDL_RWops struct based on a memory area of a + * certain size, for both read and write access. + * + * This memory buffer is not copied by the RWops; the pointer you provide must + * remain valid until you close the stream. Closing the stream will not free + * the original buffer. + * + * If you need to make sure the RWops never writes to the memory buffer, you + * should use SDL_RWFromConstMem() with a read-only buffer of memory instead. + * + * \param mem a pointer to a buffer to feed an SDL_RWops stream + * \param size the buffer size, in bytes + * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size); + +/** + * Use this function to prepare a read-only memory buffer for use with RWops. + * + * This function sets up an SDL_RWops struct based on a memory area of a + * certain size. It assumes the memory area is not writable. + * + * Attempting to write to this RWops stream will report an error without + * writing to the memory buffer. + * + * This memory buffer is not copied by the RWops; the pointer you provide must + * remain valid until you close the stream. Closing the stream will not free + * the original buffer. + * + * If you need to write to a memory buffer, you should use SDL_RWFromMem() + * with a writable buffer of memory instead. + * + * \param mem a pointer to a read-only buffer to feed an SDL_RWops stream + * \param size the buffer size, in bytes + * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem, + int size); + +/* @} *//* RWFrom functions */ + + +/** + * Use this function to allocate an empty, unpopulated SDL_RWops structure. + * + * Applications do not need to use this function unless they are providing + * their own SDL_RWops implementation. If you just need a SDL_RWops to + * read/write a common data source, you should use the built-in + * implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc. + * + * You must free the returned pointer with SDL_FreeRW(). Depending on your + * operating system and compiler, there may be a difference between the + * malloc() and free() your program uses and the versions SDL calls + * internally. Trying to mix the two can cause crashing such as segmentation + * faults. Since all SDL_RWops must free themselves when their **close** + * method is called, all SDL_RWops must be allocated through this function, so + * they can all be freed correctly with SDL_FreeRW(). + * + * \returns a pointer to the allocated memory on success, or NULL on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeRW + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); + +/** + * Use this function to free an SDL_RWops structure allocated by + * SDL_AllocRW(). + * + * Applications do not need to use this function unless they are providing + * their own SDL_RWops implementation. If you just need a SDL_RWops to + * read/write a common data source, you should use the built-in + * implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc, and + * call the **close** method on those SDL_RWops pointers when you are done + * with them. + * + * Only use SDL_FreeRW() on pointers returned by SDL_AllocRW(). The pointer is + * invalid as soon as this function returns. Any extra memory allocated during + * creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must + * be responsible for managing that memory in their **close** method. + * + * \param area the SDL_RWops structure to be freed + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocRW + */ +extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); + +#define RW_SEEK_SET 0 /**< Seek from the beginning of data */ +#define RW_SEEK_CUR 1 /**< Seek relative to current read point */ +#define RW_SEEK_END 2 /**< Seek relative to the end of data */ + +/** + * Use this function to get the size of the data stream in an SDL_RWops. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context the SDL_RWops to get the size of the data stream from + * \returns the size of the data stream in the SDL_RWops on success, -1 if + * unknown or a negative error code on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC Sint64 SDLCALL SDL_RWsize(SDL_RWops *context); + +/** + * Seek within an SDL_RWops data stream. + * + * This function seeks to byte `offset`, relative to `whence`. + * + * `whence` may be any of the following values: + * + * - `RW_SEEK_SET`: seek from the beginning of data + * - `RW_SEEK_CUR`: seek relative to current read point + * - `RW_SEEK_END`: seek relative to the end of data + * + * If this stream can not seek, it will return -1. + * + * SDL_RWseek() is actually a wrapper function that calls the SDL_RWops's + * `seek` method appropriately, to simplify application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a pointer to an SDL_RWops structure + * \param offset an offset in bytes, relative to **whence** location; can be + * negative + * \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END` + * \returns the final offset in the data stream after the seek or -1 on error. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC Sint64 SDLCALL SDL_RWseek(SDL_RWops *context, + Sint64 offset, int whence); + +/** + * Determine the current read/write offset in an SDL_RWops data stream. + * + * SDL_RWtell is actually a wrapper function that calls the SDL_RWops's `seek` + * method, with an offset of 0 bytes from `RW_SEEK_CUR`, to simplify + * application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a SDL_RWops data stream object from which to get the current + * offset + * \returns the current offset in the stream, or -1 if the information can not + * be determined. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWwrite + */ +extern DECLSPEC Sint64 SDLCALL SDL_RWtell(SDL_RWops *context); + +/** + * Read from a data source. + * + * This function reads up to `maxnum` objects each of size `size` from the + * data source to the area pointed at by `ptr`. This function may read less + * objects than requested. It will return zero when there has been an error or + * the data stream is completely read. + * + * SDL_RWread() is actually a function wrapper that calls the SDL_RWops's + * `read` method appropriately, to simplify application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a pointer to an SDL_RWops structure + * \param ptr a pointer to a buffer to read data into + * \param size the size of each object to read, in bytes + * \param maxnum the maximum number of objects to be read + * \returns the number of objects read, or 0 at error or end of file; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWseek + * \sa SDL_RWwrite + */ +extern DECLSPEC size_t SDLCALL SDL_RWread(SDL_RWops *context, + void *ptr, size_t size, + size_t maxnum); + +/** + * Write to an SDL_RWops data stream. + * + * This function writes exactly `num` objects each of size `size` from the + * area pointed at by `ptr` to the stream. If this fails for any reason, it'll + * return less than `num` to demonstrate how far the write progressed. On + * success, it returns `num`. + * + * SDL_RWwrite is actually a function wrapper that calls the SDL_RWops's + * `write` method appropriately, to simplify application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a pointer to an SDL_RWops structure + * \param ptr a pointer to a buffer containing data to write + * \param size the size of an object to write, in bytes + * \param num the number of objects to write + * \returns the number of objects written, which will be less than **num** on + * error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + */ +extern DECLSPEC size_t SDLCALL SDL_RWwrite(SDL_RWops *context, + const void *ptr, size_t size, + size_t num); + +/** + * Close and free an allocated SDL_RWops structure. + * + * SDL_RWclose() closes and cleans up the SDL_RWops stream. It releases any + * resources used by the stream and frees the SDL_RWops itself with + * SDL_FreeRW(). This returns 0 on success, or -1 if the stream failed to + * flush to its output (e.g. to disk). + * + * Note that if this fails to flush the stream to disk, this function reports + * an error, but the SDL_RWops is still invalid once this function returns. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context SDL_RWops structure to close + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWwrite + */ +extern DECLSPEC int SDLCALL SDL_RWclose(SDL_RWops *context); + +/** + * Load all the data from an SDL data stream. + * + * The data is allocated with a zero byte at the end (null terminated) for + * convenience. This extra byte is not included in the value reported via + * `datasize`. + * + * The data should be freed with SDL_free(). + * + * \param src the SDL_RWops to read all available data from + * \param datasize if not NULL, will store the number of bytes read + * \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning + * \returns the data, or NULL if there was an error. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC void *SDLCALL SDL_LoadFile_RW(SDL_RWops *src, + size_t *datasize, + int freesrc); + +/** + * Load all the data from a file path. + * + * The data is allocated with a zero byte at the end (null terminated) for + * convenience. This extra byte is not included in the value reported via + * `datasize`. + * + * The data should be freed with SDL_free(). + * + * Prior to SDL 2.0.10, this function was a macro wrapping around + * SDL_LoadFile_RW. + * + * \param file the path to read all available data from + * \param datasize if not NULL, will store the number of bytes read + * \returns the data, or NULL if there was an error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC void *SDLCALL SDL_LoadFile(const char *file, size_t *datasize); + +/** + * \name Read endian functions + * + * Read an item of the specified endianness and return in native format. + */ +/* @{ */ + +/** + * Use this function to read a byte from an SDL_RWops. + * + * \param src the SDL_RWops to read from + * \returns the read byte on success or 0 on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteU8 + */ +extern DECLSPEC Uint8 SDLCALL SDL_ReadU8(SDL_RWops * src); + +/** + * Use this function to read 16 bits of little-endian data from an SDL_RWops + * and return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 16 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadBE16 + */ +extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src); + +/** + * Use this function to read 16 bits of big-endian data from an SDL_RWops and + * return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 16 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadLE16 + */ +extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src); + +/** + * Use this function to read 32 bits of little-endian data from an SDL_RWops + * and return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 32 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadBE32 + */ +extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src); + +/** + * Use this function to read 32 bits of big-endian data from an SDL_RWops and + * return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 32 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadLE32 + */ +extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src); + +/** + * Use this function to read 64 bits of little-endian data from an SDL_RWops + * and return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 64 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadBE64 + */ +extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src); + +/** + * Use this function to read 64 bits of big-endian data from an SDL_RWops and + * return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 64 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadLE64 + */ +extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src); +/* @} *//* Read endian functions */ + +/** + * \name Write endian functions + * + * Write an item of native format to the specified endianness. + */ +/* @{ */ + +/** + * Use this function to write a byte to an SDL_RWops. + * + * \param dst the SDL_RWops to write to + * \param value the byte value to write + * \returns 1 on success or 0 on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadU8 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteU8(SDL_RWops * dst, Uint8 value); + +/** + * Use this function to write 16 bits in native format to a SDL_RWops as + * little-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in little-endian + * format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteBE16 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value); + +/** + * Use this function to write 16 bits in native format to a SDL_RWops as + * big-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in big-endian format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteLE16 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value); + +/** + * Use this function to write 32 bits in native format to a SDL_RWops as + * little-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in little-endian + * format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteBE32 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value); + +/** + * Use this function to write 32 bits in native format to a SDL_RWops as + * big-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in big-endian format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteLE32 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value); + +/** + * Use this function to write 64 bits in native format to a SDL_RWops as + * little-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in little-endian + * format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteBE64 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); + +/** + * Use this function to write 64 bits in native format to a SDL_RWops as + * big-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in big-endian format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteLE64 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value); +/* @} *//* Write endian functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_rwops_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_scancode.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_scancode.h new file mode 100644 index 00000000000..9dd3af7ba68 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_scancode.h @@ -0,0 +1,413 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_scancode.h + * + * Defines keyboard scancodes. + */ + +#ifndef SDL_scancode_h_ +#define SDL_scancode_h_ + +#include + +/** + * \brief The SDL keyboard scancode representation. + * + * Values of this type are used to represent keyboard keys, among other places + * in the \link SDL_Keysym::scancode key.keysym.scancode \endlink field of the + * SDL_Event structure. + * + * The values in this enumeration are based on the USB usage page standard: + * https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf + */ +typedef enum +{ + SDL_SCANCODE_UNKNOWN = 0, + + /** + * \name Usage page 0x07 + * + * These values are from usage page 0x07 (USB keyboard page). + */ + /* @{ */ + + SDL_SCANCODE_A = 4, + SDL_SCANCODE_B = 5, + SDL_SCANCODE_C = 6, + SDL_SCANCODE_D = 7, + SDL_SCANCODE_E = 8, + SDL_SCANCODE_F = 9, + SDL_SCANCODE_G = 10, + SDL_SCANCODE_H = 11, + SDL_SCANCODE_I = 12, + SDL_SCANCODE_J = 13, + SDL_SCANCODE_K = 14, + SDL_SCANCODE_L = 15, + SDL_SCANCODE_M = 16, + SDL_SCANCODE_N = 17, + SDL_SCANCODE_O = 18, + SDL_SCANCODE_P = 19, + SDL_SCANCODE_Q = 20, + SDL_SCANCODE_R = 21, + SDL_SCANCODE_S = 22, + SDL_SCANCODE_T = 23, + SDL_SCANCODE_U = 24, + SDL_SCANCODE_V = 25, + SDL_SCANCODE_W = 26, + SDL_SCANCODE_X = 27, + SDL_SCANCODE_Y = 28, + SDL_SCANCODE_Z = 29, + + SDL_SCANCODE_1 = 30, + SDL_SCANCODE_2 = 31, + SDL_SCANCODE_3 = 32, + SDL_SCANCODE_4 = 33, + SDL_SCANCODE_5 = 34, + SDL_SCANCODE_6 = 35, + SDL_SCANCODE_7 = 36, + SDL_SCANCODE_8 = 37, + SDL_SCANCODE_9 = 38, + SDL_SCANCODE_0 = 39, + + SDL_SCANCODE_RETURN = 40, + SDL_SCANCODE_ESCAPE = 41, + SDL_SCANCODE_BACKSPACE = 42, + SDL_SCANCODE_TAB = 43, + SDL_SCANCODE_SPACE = 44, + + SDL_SCANCODE_MINUS = 45, + SDL_SCANCODE_EQUALS = 46, + SDL_SCANCODE_LEFTBRACKET = 47, + SDL_SCANCODE_RIGHTBRACKET = 48, + SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return + * key on ISO keyboards and at the right end + * of the QWERTY row on ANSI keyboards. + * Produces REVERSE SOLIDUS (backslash) and + * VERTICAL LINE in a US layout, REVERSE + * SOLIDUS and VERTICAL LINE in a UK Mac + * layout, NUMBER SIGN and TILDE in a UK + * Windows layout, DOLLAR SIGN and POUND SIGN + * in a Swiss German layout, NUMBER SIGN and + * APOSTROPHE in a German layout, GRAVE + * ACCENT and POUND SIGN in a French Mac + * layout, and ASTERISK and MICRO SIGN in a + * French Windows layout. + */ + SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code + * instead of 49 for the same key, but all + * OSes I've seen treat the two codes + * identically. So, as an implementor, unless + * your keyboard generates both of those + * codes and your OS treats them differently, + * you should generate SDL_SCANCODE_BACKSLASH + * instead of this code. As a user, you + * should not rely on this code because SDL + * will never generate it with most (all?) + * keyboards. + */ + SDL_SCANCODE_SEMICOLON = 51, + SDL_SCANCODE_APOSTROPHE = 52, + SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI + * and ISO keyboards). Produces GRAVE ACCENT and + * TILDE in a US Windows layout and in US and UK + * Mac layouts on ANSI keyboards, GRAVE ACCENT + * and NOT SIGN in a UK Windows layout, SECTION + * SIGN and PLUS-MINUS SIGN in US and UK Mac + * layouts on ISO keyboards, SECTION SIGN and + * DEGREE SIGN in a Swiss German layout (Mac: + * only on ISO keyboards), CIRCUMFLEX ACCENT and + * DEGREE SIGN in a German layout (Mac: only on + * ISO keyboards), SUPERSCRIPT TWO and TILDE in a + * French Windows layout, COMMERCIAL AT and + * NUMBER SIGN in a French Mac layout on ISO + * keyboards, and LESS-THAN SIGN and GREATER-THAN + * SIGN in a Swiss German, German, or French Mac + * layout on ANSI keyboards. + */ + SDL_SCANCODE_COMMA = 54, + SDL_SCANCODE_PERIOD = 55, + SDL_SCANCODE_SLASH = 56, + + SDL_SCANCODE_CAPSLOCK = 57, + + SDL_SCANCODE_F1 = 58, + SDL_SCANCODE_F2 = 59, + SDL_SCANCODE_F3 = 60, + SDL_SCANCODE_F4 = 61, + SDL_SCANCODE_F5 = 62, + SDL_SCANCODE_F6 = 63, + SDL_SCANCODE_F7 = 64, + SDL_SCANCODE_F8 = 65, + SDL_SCANCODE_F9 = 66, + SDL_SCANCODE_F10 = 67, + SDL_SCANCODE_F11 = 68, + SDL_SCANCODE_F12 = 69, + + SDL_SCANCODE_PRINTSCREEN = 70, + SDL_SCANCODE_SCROLLLOCK = 71, + SDL_SCANCODE_PAUSE = 72, + SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but + does send code 73, not 117) */ + SDL_SCANCODE_HOME = 74, + SDL_SCANCODE_PAGEUP = 75, + SDL_SCANCODE_DELETE = 76, + SDL_SCANCODE_END = 77, + SDL_SCANCODE_PAGEDOWN = 78, + SDL_SCANCODE_RIGHT = 79, + SDL_SCANCODE_LEFT = 80, + SDL_SCANCODE_DOWN = 81, + SDL_SCANCODE_UP = 82, + + SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards + */ + SDL_SCANCODE_KP_DIVIDE = 84, + SDL_SCANCODE_KP_MULTIPLY = 85, + SDL_SCANCODE_KP_MINUS = 86, + SDL_SCANCODE_KP_PLUS = 87, + SDL_SCANCODE_KP_ENTER = 88, + SDL_SCANCODE_KP_1 = 89, + SDL_SCANCODE_KP_2 = 90, + SDL_SCANCODE_KP_3 = 91, + SDL_SCANCODE_KP_4 = 92, + SDL_SCANCODE_KP_5 = 93, + SDL_SCANCODE_KP_6 = 94, + SDL_SCANCODE_KP_7 = 95, + SDL_SCANCODE_KP_8 = 96, + SDL_SCANCODE_KP_9 = 97, + SDL_SCANCODE_KP_0 = 98, + SDL_SCANCODE_KP_PERIOD = 99, + + SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO + * keyboards have over ANSI ones, + * located between left shift and Y. + * Produces GRAVE ACCENT and TILDE in a + * US or UK Mac layout, REVERSE SOLIDUS + * (backslash) and VERTICAL LINE in a + * US or UK Windows layout, and + * LESS-THAN SIGN and GREATER-THAN SIGN + * in a Swiss German, German, or French + * layout. */ + SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */ + SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag, + * not a physical key - but some Mac keyboards + * do have a power key. */ + SDL_SCANCODE_KP_EQUALS = 103, + SDL_SCANCODE_F13 = 104, + SDL_SCANCODE_F14 = 105, + SDL_SCANCODE_F15 = 106, + SDL_SCANCODE_F16 = 107, + SDL_SCANCODE_F17 = 108, + SDL_SCANCODE_F18 = 109, + SDL_SCANCODE_F19 = 110, + SDL_SCANCODE_F20 = 111, + SDL_SCANCODE_F21 = 112, + SDL_SCANCODE_F22 = 113, + SDL_SCANCODE_F23 = 114, + SDL_SCANCODE_F24 = 115, + SDL_SCANCODE_EXECUTE = 116, + SDL_SCANCODE_HELP = 117, + SDL_SCANCODE_MENU = 118, + SDL_SCANCODE_SELECT = 119, + SDL_SCANCODE_STOP = 120, + SDL_SCANCODE_AGAIN = 121, /**< redo */ + SDL_SCANCODE_UNDO = 122, + SDL_SCANCODE_CUT = 123, + SDL_SCANCODE_COPY = 124, + SDL_SCANCODE_PASTE = 125, + SDL_SCANCODE_FIND = 126, + SDL_SCANCODE_MUTE = 127, + SDL_SCANCODE_VOLUMEUP = 128, + SDL_SCANCODE_VOLUMEDOWN = 129, +/* not sure whether there's a reason to enable these */ +/* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */ +/* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */ +/* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */ + SDL_SCANCODE_KP_COMMA = 133, + SDL_SCANCODE_KP_EQUALSAS400 = 134, + + SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see + footnotes in USB doc */ + SDL_SCANCODE_INTERNATIONAL2 = 136, + SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */ + SDL_SCANCODE_INTERNATIONAL4 = 138, + SDL_SCANCODE_INTERNATIONAL5 = 139, + SDL_SCANCODE_INTERNATIONAL6 = 140, + SDL_SCANCODE_INTERNATIONAL7 = 141, + SDL_SCANCODE_INTERNATIONAL8 = 142, + SDL_SCANCODE_INTERNATIONAL9 = 143, + SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */ + SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */ + SDL_SCANCODE_LANG3 = 146, /**< Katakana */ + SDL_SCANCODE_LANG4 = 147, /**< Hiragana */ + SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */ + SDL_SCANCODE_LANG6 = 149, /**< reserved */ + SDL_SCANCODE_LANG7 = 150, /**< reserved */ + SDL_SCANCODE_LANG8 = 151, /**< reserved */ + SDL_SCANCODE_LANG9 = 152, /**< reserved */ + + SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */ + SDL_SCANCODE_SYSREQ = 154, + SDL_SCANCODE_CANCEL = 155, + SDL_SCANCODE_CLEAR = 156, + SDL_SCANCODE_PRIOR = 157, + SDL_SCANCODE_RETURN2 = 158, + SDL_SCANCODE_SEPARATOR = 159, + SDL_SCANCODE_OUT = 160, + SDL_SCANCODE_OPER = 161, + SDL_SCANCODE_CLEARAGAIN = 162, + SDL_SCANCODE_CRSEL = 163, + SDL_SCANCODE_EXSEL = 164, + + SDL_SCANCODE_KP_00 = 176, + SDL_SCANCODE_KP_000 = 177, + SDL_SCANCODE_THOUSANDSSEPARATOR = 178, + SDL_SCANCODE_DECIMALSEPARATOR = 179, + SDL_SCANCODE_CURRENCYUNIT = 180, + SDL_SCANCODE_CURRENCYSUBUNIT = 181, + SDL_SCANCODE_KP_LEFTPAREN = 182, + SDL_SCANCODE_KP_RIGHTPAREN = 183, + SDL_SCANCODE_KP_LEFTBRACE = 184, + SDL_SCANCODE_KP_RIGHTBRACE = 185, + SDL_SCANCODE_KP_TAB = 186, + SDL_SCANCODE_KP_BACKSPACE = 187, + SDL_SCANCODE_KP_A = 188, + SDL_SCANCODE_KP_B = 189, + SDL_SCANCODE_KP_C = 190, + SDL_SCANCODE_KP_D = 191, + SDL_SCANCODE_KP_E = 192, + SDL_SCANCODE_KP_F = 193, + SDL_SCANCODE_KP_XOR = 194, + SDL_SCANCODE_KP_POWER = 195, + SDL_SCANCODE_KP_PERCENT = 196, + SDL_SCANCODE_KP_LESS = 197, + SDL_SCANCODE_KP_GREATER = 198, + SDL_SCANCODE_KP_AMPERSAND = 199, + SDL_SCANCODE_KP_DBLAMPERSAND = 200, + SDL_SCANCODE_KP_VERTICALBAR = 201, + SDL_SCANCODE_KP_DBLVERTICALBAR = 202, + SDL_SCANCODE_KP_COLON = 203, + SDL_SCANCODE_KP_HASH = 204, + SDL_SCANCODE_KP_SPACE = 205, + SDL_SCANCODE_KP_AT = 206, + SDL_SCANCODE_KP_EXCLAM = 207, + SDL_SCANCODE_KP_MEMSTORE = 208, + SDL_SCANCODE_KP_MEMRECALL = 209, + SDL_SCANCODE_KP_MEMCLEAR = 210, + SDL_SCANCODE_KP_MEMADD = 211, + SDL_SCANCODE_KP_MEMSUBTRACT = 212, + SDL_SCANCODE_KP_MEMMULTIPLY = 213, + SDL_SCANCODE_KP_MEMDIVIDE = 214, + SDL_SCANCODE_KP_PLUSMINUS = 215, + SDL_SCANCODE_KP_CLEAR = 216, + SDL_SCANCODE_KP_CLEARENTRY = 217, + SDL_SCANCODE_KP_BINARY = 218, + SDL_SCANCODE_KP_OCTAL = 219, + SDL_SCANCODE_KP_DECIMAL = 220, + SDL_SCANCODE_KP_HEXADECIMAL = 221, + + SDL_SCANCODE_LCTRL = 224, + SDL_SCANCODE_LSHIFT = 225, + SDL_SCANCODE_LALT = 226, /**< alt, option */ + SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */ + SDL_SCANCODE_RCTRL = 228, + SDL_SCANCODE_RSHIFT = 229, + SDL_SCANCODE_RALT = 230, /**< alt gr, option */ + SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */ + + SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered + * by any of the above, but since there's a + * special KMOD_MODE for it I'm adding it here + */ + + /* @} *//* Usage page 0x07 */ + + /** + * \name Usage page 0x0C + * + * These values are mapped from usage page 0x0C (USB consumer page). + */ + /* @{ */ + + SDL_SCANCODE_AUDIONEXT = 258, + SDL_SCANCODE_AUDIOPREV = 259, + SDL_SCANCODE_AUDIOSTOP = 260, + SDL_SCANCODE_AUDIOPLAY = 261, + SDL_SCANCODE_AUDIOMUTE = 262, + SDL_SCANCODE_MEDIASELECT = 263, + SDL_SCANCODE_WWW = 264, + SDL_SCANCODE_MAIL = 265, + SDL_SCANCODE_CALCULATOR = 266, + SDL_SCANCODE_COMPUTER = 267, + SDL_SCANCODE_AC_SEARCH = 268, + SDL_SCANCODE_AC_HOME = 269, + SDL_SCANCODE_AC_BACK = 270, + SDL_SCANCODE_AC_FORWARD = 271, + SDL_SCANCODE_AC_STOP = 272, + SDL_SCANCODE_AC_REFRESH = 273, + SDL_SCANCODE_AC_BOOKMARKS = 274, + + /* @} *//* Usage page 0x0C */ + + /** + * \name Walther keys + * + * These are values that Christian Walther added (for mac keyboard?). + */ + /* @{ */ + + SDL_SCANCODE_BRIGHTNESSDOWN = 275, + SDL_SCANCODE_BRIGHTNESSUP = 276, + SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display + switch, video mode switch */ + SDL_SCANCODE_KBDILLUMTOGGLE = 278, + SDL_SCANCODE_KBDILLUMDOWN = 279, + SDL_SCANCODE_KBDILLUMUP = 280, + SDL_SCANCODE_EJECT = 281, + SDL_SCANCODE_SLEEP = 282, + + SDL_SCANCODE_APP1 = 283, + SDL_SCANCODE_APP2 = 284, + + /* @} *//* Walther keys */ + + /** + * \name Usage page 0x0C (additional media keys) + * + * These values are mapped from usage page 0x0C (USB consumer page). + */ + /* @{ */ + + SDL_SCANCODE_AUDIOREWIND = 285, + SDL_SCANCODE_AUDIOFASTFORWARD = 286, + + /* @} *//* Usage page 0x0C (additional media keys) */ + + /* Add any other keys here. */ + + SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes + for array bounds */ +} SDL_Scancode; + +#endif /* SDL_scancode_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_sensor.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_sensor.h new file mode 100644 index 00000000000..8758cc303e1 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_sensor.h @@ -0,0 +1,301 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_sensor.h + * + * Include file for SDL sensor event handling + * + */ + +#ifndef SDL_sensor_h_ +#define SDL_sensor_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +extern "C" { +/* *INDENT-ON* */ +#endif + +/** + * \brief SDL_sensor.h + * + * In order to use these functions, SDL_Init() must have been called + * with the ::SDL_INIT_SENSOR flag. This causes SDL to scan the system + * for sensors, and load appropriate drivers. + */ + +struct _SDL_Sensor; +typedef struct _SDL_Sensor SDL_Sensor; + +/** + * This is a unique ID for a sensor for the time it is connected to the system, + * and is never reused for the lifetime of the application. + * + * The ID value starts at 0 and increments from there. The value -1 is an invalid ID. + */ +typedef Sint32 SDL_SensorID; + +/* The different sensors defined by SDL + * + * Additional sensors may be available, using platform dependent semantics. + * + * Hare are the additional Android sensors: + * https://developer.android.com/reference/android/hardware/SensorEvent.html#values + */ +typedef enum +{ + SDL_SENSOR_INVALID = -1, /**< Returned for an invalid sensor */ + SDL_SENSOR_UNKNOWN, /**< Unknown sensor type */ + SDL_SENSOR_ACCEL, /**< Accelerometer */ + SDL_SENSOR_GYRO /**< Gyroscope */ +} SDL_SensorType; + +/** + * Accelerometer sensor + * + * The accelerometer returns the current acceleration in SI meters per + * second squared. This measurement includes the force of gravity, so + * a device at rest will have an value of SDL_STANDARD_GRAVITY away + * from the center of the earth. + * + * values[0]: Acceleration on the x axis + * values[1]: Acceleration on the y axis + * values[2]: Acceleration on the z axis + * + * For phones held in portrait mode and game controllers held in front of you, + * the axes are defined as follows: + * -X ... +X : left ... right + * -Y ... +Y : bottom ... top + * -Z ... +Z : farther ... closer + * + * The axis data is not changed when the phone is rotated. + * + * \sa SDL_GetDisplayOrientation() + */ +#define SDL_STANDARD_GRAVITY 9.80665f + +/** + * Gyroscope sensor + * + * The gyroscope returns the current rate of rotation in radians per second. + * The rotation is positive in the counter-clockwise direction. That is, + * an observer looking from a positive location on one of the axes would + * see positive rotation on that axis when it appeared to be rotating + * counter-clockwise. + * + * values[0]: Angular speed around the x axis (pitch) + * values[1]: Angular speed around the y axis (yaw) + * values[2]: Angular speed around the z axis (roll) + * + * For phones held in portrait mode and game controllers held in front of you, + * the axes are defined as follows: + * -X ... +X : left ... right + * -Y ... +Y : bottom ... top + * -Z ... +Z : farther ... closer + * + * The axis data is not changed when the phone or controller is rotated. + * + * \sa SDL_GetDisplayOrientation() + */ + +/* Function prototypes */ + +/** + * Locking for multi-threaded access to the sensor API + * + * If you are using the sensor API or handling events from multiple threads + * you should use these locking functions to protect access to the sensors. + * + * In particular, you are guaranteed that the sensor list won't change, so the + * API functions that take a sensor index will be valid, and sensor events + * will not be delivered. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC void SDLCALL SDL_LockSensors(void); +extern DECLSPEC void SDLCALL SDL_UnlockSensors(void); + +/** + * Count the number of sensors attached to the system right now. + * + * \returns the number of sensors detected. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_NumSensors(void); + +/** + * Get the implementation dependent name of a sensor. + * + * \param device_index The sensor to obtain name from + * \returns the sensor name, or NULL if `device_index` is out of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC const char *SDLCALL SDL_SensorGetDeviceName(int device_index); + +/** + * Get the type of a sensor. + * + * \param device_index The sensor to get the type from + * \returns the SDL_SensorType, or `SDL_SENSOR_INVALID` if `device_index` is + * out of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetDeviceType(int device_index); + +/** + * Get the platform dependent type of a sensor. + * + * \param device_index The sensor to check + * \returns the sensor platform dependent type, or -1 if `device_index` is out + * of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetDeviceNonPortableType(int device_index); + +/** + * Get the instance ID of a sensor. + * + * \param device_index The sensor to get instance id from + * \returns the sensor instance ID, or -1 if `device_index` is out of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetDeviceInstanceID(int device_index); + +/** + * Open a sensor for use. + * + * \param device_index The sensor to open + * \returns an SDL_Sensor sensor object, or NULL if an error occurred. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorOpen(int device_index); + +/** + * Return the SDL_Sensor associated with an instance id. + * + * \param instance_id The sensor from instance id + * \returns an SDL_Sensor object. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorFromInstanceID(SDL_SensorID instance_id); + +/** + * Get the implementation dependent name of a sensor + * + * \param sensor The SDL_Sensor object + * \returns the sensor name, or NULL if `sensor` is NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC const char *SDLCALL SDL_SensorGetName(SDL_Sensor *sensor); + +/** + * Get the type of a sensor. + * + * \param sensor The SDL_Sensor object to inspect + * \returns the SDL_SensorType type, or `SDL_SENSOR_INVALID` if `sensor` is + * NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetType(SDL_Sensor *sensor); + +/** + * Get the platform dependent type of a sensor. + * + * \param sensor The SDL_Sensor object to inspect + * \returns the sensor platform dependent type, or -1 if `sensor` is NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetNonPortableType(SDL_Sensor *sensor); + +/** + * Get the instance ID of a sensor. + * + * \param sensor The SDL_Sensor object to inspect + * \returns the sensor instance ID, or -1 if `sensor` is NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetInstanceID(SDL_Sensor *sensor); + +/** + * Get the current state of an opened sensor. + * + * The number of values and interpretation of the data is sensor dependent. + * + * \param sensor The SDL_Sensor object to query + * \param data A pointer filled with the current sensor state + * \param num_values The number of values to write to data + * \returns 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetData(SDL_Sensor * sensor, float *data, int num_values); + +/** + * Close a sensor previously opened with SDL_SensorOpen(). + * + * \param sensor The SDL_Sensor object to close + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC void SDLCALL SDL_SensorClose(SDL_Sensor * sensor); + +/** + * Update the current state of the open sensors. + * + * This is called automatically by the event loop if sensor events are + * enabled. + * + * This needs to be called from the thread that initialized the sensor + * subsystem. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC void SDLCALL SDL_SensorUpdate(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +} +/* *INDENT-ON* */ +#endif +#include + +#endif /* SDL_sensor_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_shape.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_shape.h new file mode 100644 index 00000000000..71662aad838 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_shape.h @@ -0,0 +1,155 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_shape_h_ +#define SDL_shape_h_ + +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** \file SDL_shape.h + * + * Header file for the shaped window API. + */ + +#define SDL_NONSHAPEABLE_WINDOW -1 +#define SDL_INVALID_SHAPE_ARGUMENT -2 +#define SDL_WINDOW_LACKS_SHAPE -3 + +/** + * Create a window that can be shaped with the specified position, dimensions, + * and flags. + * + * \param title The title of the window, in UTF-8 encoding. + * \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or + * ::SDL_WINDOWPOS_UNDEFINED. + * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or + * ::SDL_WINDOWPOS_UNDEFINED. + * \param w The width of the window. + * \param h The height of the window. + * \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with + * any of the following: ::SDL_WINDOW_OPENGL, + * ::SDL_WINDOW_INPUT_GRABBED, ::SDL_WINDOW_HIDDEN, + * ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED, + * ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_BORDERLESS is always set, + * and ::SDL_WINDOW_FULLSCREEN is always unset. + * \return the window created, or NULL if window creation failed. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroyWindow + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned int w,unsigned int h,Uint32 flags); + +/** + * Return whether the given window is a shaped window. + * + * \param window The window to query for being shaped. + * \return SDL_TRUE if the window is a window that can be shaped, SDL_FALSE if + * the window is unshaped or NULL. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateShapedWindow + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsShapedWindow(const SDL_Window *window); + +/** \brief An enum denoting the specific type of contents present in an SDL_WindowShapeParams union. */ +typedef enum { + /** \brief The default mode, a binarized alpha cutoff of 1. */ + ShapeModeDefault, + /** \brief A binarized alpha cutoff with a given integer value. */ + ShapeModeBinarizeAlpha, + /** \brief A binarized alpha cutoff with a given integer value, but with the opposite comparison. */ + ShapeModeReverseBinarizeAlpha, + /** \brief A color key is applied. */ + ShapeModeColorKey +} WindowShapeMode; + +#define SDL_SHAPEMODEALPHA(mode) (mode == ShapeModeDefault || mode == ShapeModeBinarizeAlpha || mode == ShapeModeReverseBinarizeAlpha) + +/** \brief A union containing parameters for shaped windows. */ +typedef union { + /** \brief A cutoff alpha value for binarization of the window shape's alpha channel. */ + Uint8 binarizationCutoff; + SDL_Color colorKey; +} SDL_WindowShapeParams; + +/** \brief A struct that tags the SDL_WindowShapeParams union with an enum describing the type of its contents. */ +typedef struct SDL_WindowShapeMode { + /** \brief The mode of these window-shape parameters. */ + WindowShapeMode mode; + /** \brief Window-shape parameters. */ + SDL_WindowShapeParams parameters; +} SDL_WindowShapeMode; + +/** + * Set the shape and parameters of a shaped window. + * + * \param window The shaped window whose parameters should be set. + * \param shape A surface encoding the desired shape for the window. + * \param shape_mode The parameters to set for the shaped window. + * \return 0 on success, SDL_INVALID_SHAPE_ARGUMENT on an invalid shape + * argument, or SDL_NONSHAPEABLE_WINDOW if the SDL_Window given does + * not reference a valid shaped window. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WindowShapeMode + * \sa SDL_GetShapedWindowMode + */ +extern DECLSPEC int SDLCALL SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode); + +/** + * Get the shape parameters of a shaped window. + * + * \param window The shaped window whose parameters should be retrieved. + * \param shape_mode An empty shape-mode structure to fill, or NULL to check + * whether the window has a shape. + * \return 0 if the window has a shape and, provided shape_mode was not NULL, + * shape_mode has been filled with the mode data, + * SDL_NONSHAPEABLE_WINDOW if the SDL_Window given is not a shaped + * window, or SDL_WINDOW_LACKS_SHAPE if the SDL_Window given is a + * shapeable window currently lacking a shape. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WindowShapeMode + * \sa SDL_SetWindowShape + */ +extern DECLSPEC int SDLCALL SDL_GetShapedWindowMode(SDL_Window *window,SDL_WindowShapeMode *shape_mode); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_shape_h_ */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_stdinc.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_stdinc.h new file mode 100644 index 00000000000..23a14adaf47 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_stdinc.h @@ -0,0 +1,738 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_stdinc.h + * + * This is a general header that includes C language support. + */ + +#ifndef SDL_stdinc_h_ +#define SDL_stdinc_h_ + +#include + +#ifdef __APPLE__ +#ifndef _DARWIN_C_SOURCE +#define _DARWIN_C_SOURCE 1 /* for memset_pattern4() */ +#endif +#endif + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_STDIO_H +#include +#endif +#if defined(STDC_HEADERS) +# include +# include +# include +#else +# if defined(HAVE_STDLIB_H) +# include +# elif defined(HAVE_MALLOC_H) +# include +# endif +# if defined(HAVE_STDDEF_H) +# include +# endif +# if defined(HAVE_STDARG_H) +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_WCHAR_H +# include +#endif +#if defined(HAVE_INTTYPES_H) +# include +#elif defined(HAVE_STDINT_H) +# include +#endif +#ifdef HAVE_CTYPE_H +# include +#endif +#ifdef HAVE_MATH_H +# if defined(__WINRT__) +/* Defining _USE_MATH_DEFINES is required to get M_PI to be defined on + WinRT. See http://msdn.microsoft.com/en-us/library/4hwaceh6.aspx + for more information. +*/ +# define _USE_MATH_DEFINES +# endif +# include +#endif +#ifdef HAVE_FLOAT_H +# include +#endif +#if defined(HAVE_ALLOCA) && !defined(alloca) +# if defined(HAVE_ALLOCA_H) +# include +# elif defined(__GNUC__) +# define alloca __builtin_alloca +# elif defined(_MSC_VER) +# include +# define alloca _alloca +# elif defined(__WATCOMC__) +# include +# elif defined(__BORLANDC__) +# include +# elif defined(__DMC__) +# include +# elif defined(__AIX__) +#pragma alloca +# elif defined(__MRC__) +void *alloca(unsigned); +# else +char *alloca(); +# endif +#endif + +/** + * Check if the compiler supports a given builtin. + * Supported by virtually all clang versions and recent gcc. Use this + * instead of checking the clang version if possible. + */ +#ifdef __has_builtin +#define _SDL_HAS_BUILTIN(x) __has_builtin(x) +#else +#define _SDL_HAS_BUILTIN(x) 0 +#endif + +/** + * The number of elements in an array. + */ +#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) +#define SDL_TABLESIZE(table) SDL_arraysize(table) + +/** + * Macro useful for building other macros with strings in them + * + * e.g. #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n") + */ +#define SDL_STRINGIFY_ARG(arg) #arg + +/** + * \name Cast operators + * + * Use proper C++ casts when compiled as C++ to be compatible with the option + * -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above). + */ +/* @{ */ +#ifdef __cplusplus +#define SDL_reinterpret_cast(type, expression) reinterpret_cast(expression) +#define SDL_static_cast(type, expression) static_cast(expression) +#define SDL_const_cast(type, expression) const_cast(expression) +#else +#define SDL_reinterpret_cast(type, expression) ((type)(expression)) +#define SDL_static_cast(type, expression) ((type)(expression)) +#define SDL_const_cast(type, expression) ((type)(expression)) +#endif +/* @} *//* Cast operators */ + +/* Define a four character code as a Uint32 */ +#define SDL_FOURCC(A, B, C, D) \ + ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24)) + +/** + * \name Basic data types + */ +/* @{ */ + +#ifdef __CC_ARM +/* ARM's compiler throws warnings if we use an enum: like "SDL_bool x = a < b;" */ +#define SDL_FALSE 0 +#define SDL_TRUE 1 +typedef int SDL_bool; +#else +typedef enum +{ + SDL_FALSE = 0, + SDL_TRUE = 1 +} SDL_bool; +#endif + +/** + * \brief A signed 8-bit integer type. + */ +#define SDL_MAX_SINT8 ((Sint8)0x7F) /* 127 */ +#define SDL_MIN_SINT8 ((Sint8)(~0x7F)) /* -128 */ +typedef int8_t Sint8; +/** + * \brief An unsigned 8-bit integer type. + */ +#define SDL_MAX_UINT8 ((Uint8)0xFF) /* 255 */ +#define SDL_MIN_UINT8 ((Uint8)0x00) /* 0 */ +typedef uint8_t Uint8; +/** + * \brief A signed 16-bit integer type. + */ +#define SDL_MAX_SINT16 ((Sint16)0x7FFF) /* 32767 */ +#define SDL_MIN_SINT16 ((Sint16)(~0x7FFF)) /* -32768 */ +typedef int16_t Sint16; +/** + * \brief An unsigned 16-bit integer type. + */ +#define SDL_MAX_UINT16 ((Uint16)0xFFFF) /* 65535 */ +#define SDL_MIN_UINT16 ((Uint16)0x0000) /* 0 */ +typedef uint16_t Uint16; +/** + * \brief A signed 32-bit integer type. + */ +#define SDL_MAX_SINT32 ((Sint32)0x7FFFFFFF) /* 2147483647 */ +#define SDL_MIN_SINT32 ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */ +typedef int32_t Sint32; +/** + * \brief An unsigned 32-bit integer type. + */ +#define SDL_MAX_UINT32 ((Uint32)0xFFFFFFFFu) /* 4294967295 */ +#define SDL_MIN_UINT32 ((Uint32)0x00000000) /* 0 */ +typedef uint32_t Uint32; + +/** + * \brief A signed 64-bit integer type. + */ +#define SDL_MAX_SINT64 ((Sint64)0x7FFFFFFFFFFFFFFFll) /* 9223372036854775807 */ +#define SDL_MIN_SINT64 ((Sint64)(~0x7FFFFFFFFFFFFFFFll)) /* -9223372036854775808 */ +typedef int64_t Sint64; +/** + * \brief An unsigned 64-bit integer type. + */ +#define SDL_MAX_UINT64 ((Uint64)0xFFFFFFFFFFFFFFFFull) /* 18446744073709551615 */ +#define SDL_MIN_UINT64 ((Uint64)(0x0000000000000000ull)) /* 0 */ +typedef uint64_t Uint64; + +/* @} *//* Basic data types */ + +/** + * \name Floating-point constants + */ +/* @{ */ + +#ifdef FLT_EPSILON +#define SDL_FLT_EPSILON FLT_EPSILON +#else +#define SDL_FLT_EPSILON 1.1920928955078125e-07F /* 0x0.000002p0 */ +#endif + +/* @} *//* Floating-point constants */ + +/* Make sure we have macros for printing width-based integers. + * should define these but this is not true all platforms. + * (for example win32) */ +#ifndef SDL_PRIs64 +#ifdef PRIs64 +#define SDL_PRIs64 PRIs64 +#elif defined(__WIN32__) +#define SDL_PRIs64 "I64d" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIs64 "ld" +#else +#define SDL_PRIs64 "lld" +#endif +#endif +#ifndef SDL_PRIu64 +#ifdef PRIu64 +#define SDL_PRIu64 PRIu64 +#elif defined(__WIN32__) +#define SDL_PRIu64 "I64u" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIu64 "lu" +#else +#define SDL_PRIu64 "llu" +#endif +#endif +#ifndef SDL_PRIx64 +#ifdef PRIx64 +#define SDL_PRIx64 PRIx64 +#elif defined(__WIN32__) +#define SDL_PRIx64 "I64x" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIx64 "lx" +#else +#define SDL_PRIx64 "llx" +#endif +#endif +#ifndef SDL_PRIX64 +#ifdef PRIX64 +#define SDL_PRIX64 PRIX64 +#elif defined(__WIN32__) +#define SDL_PRIX64 "I64X" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIX64 "lX" +#else +#define SDL_PRIX64 "llX" +#endif +#endif +#ifndef SDL_PRIs32 +#ifdef PRId32 +#define SDL_PRIs32 PRId32 +#else +#define SDL_PRIs32 "d" +#endif +#endif +#ifndef SDL_PRIu32 +#ifdef PRIu32 +#define SDL_PRIu32 PRIu32 +#else +#define SDL_PRIu32 "u" +#endif +#endif +#ifndef SDL_PRIx32 +#ifdef PRIx32 +#define SDL_PRIx32 PRIx32 +#else +#define SDL_PRIx32 "x" +#endif +#endif +#ifndef SDL_PRIX32 +#ifdef PRIX32 +#define SDL_PRIX32 PRIX32 +#else +#define SDL_PRIX32 "X" +#endif +#endif + +/* Annotations to help code analysis tools */ +#ifdef SDL_DISABLE_ANALYZE_MACROS +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#else +#if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */ +#include + +#define SDL_IN_BYTECAP(x) _In_bytecount_(x) +#define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x) +#define SDL_OUT_Z_CAP(x) _Out_z_cap_(x) +#define SDL_OUT_CAP(x) _Out_cap_(x) +#define SDL_OUT_BYTECAP(x) _Out_bytecap_(x) +#define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x) + +#define SDL_PRINTF_FORMAT_STRING _Printf_format_string_ +#define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_ +#else +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#endif +#if defined(__GNUC__) +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 ))) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 ))) +#else +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#endif +#endif /* SDL_DISABLE_ANALYZE_MACROS */ + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) +#define SDL_COMPILE_TIME_ASSERT(name, x) _Static_assert(x, #x) +#elif defined(__cplusplus) && (__cplusplus >= 201103L) +#define SDL_COMPILE_TIME_ASSERT(name, x) static_assert(x, #x) +#else /* universal, but may trigger -Wunused-local-typedefs */ +#define SDL_COMPILE_TIME_ASSERT(name, x) \ + typedef int SDL_compile_time_assert_ ## name[(x) * 2 - 1] +#endif +/** \cond */ +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); +SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); +SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); +SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); +SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); +SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); +SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); +SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ +/** \endcond */ + +/* Check to make sure enums are the size of ints, for structure packing. + For both Watcom C/C++ and Borland C/C++ the compiler option that makes + enums having the size of an int must be enabled. + This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). +*/ + +/** \cond */ +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +#if !defined(__ANDROID__) && !defined(__VITA__) + /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */ +typedef enum +{ + DUMMY_ENUM_VALUE +} SDL_DUMMY_ENUM; + +SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); +#endif +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ +/** \endcond */ + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef HAVE_ALLOCA +#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) +#define SDL_stack_free(data) +#else +#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) +#define SDL_stack_free(data) SDL_free(data) +#endif + +extern DECLSPEC void *SDLCALL SDL_malloc(size_t size); +extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); +extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); +extern DECLSPEC void SDLCALL SDL_free(void *mem); + +typedef void *(SDLCALL *SDL_malloc_func)(size_t size); +typedef void *(SDLCALL *SDL_calloc_func)(size_t nmemb, size_t size); +typedef void *(SDLCALL *SDL_realloc_func)(void *mem, size_t size); +typedef void (SDLCALL *SDL_free_func)(void *mem); + +/** + * Get the current set of SDL memory functions + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC void SDLCALL SDL_GetMemoryFunctions(SDL_malloc_func *malloc_func, + SDL_calloc_func *calloc_func, + SDL_realloc_func *realloc_func, + SDL_free_func *free_func); + +/** + * Replace SDL's memory allocation functions with a custom set + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC int SDLCALL SDL_SetMemoryFunctions(SDL_malloc_func malloc_func, + SDL_calloc_func calloc_func, + SDL_realloc_func realloc_func, + SDL_free_func free_func); + +/** + * Get the number of outstanding (unfreed) allocations + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC int SDLCALL SDL_GetNumAllocations(void); + +extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); +extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); + +extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)); + +extern DECLSPEC int SDLCALL SDL_abs(int x); + +/* NOTE: these double-evaluate their arguments, so you should never have side effects in the parameters */ +#define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) +#define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) +#define SDL_clamp(x, a, b) (((x) < (a)) ? (a) : (((x) > (b)) ? (b) : (x))) + +extern DECLSPEC int SDLCALL SDL_isalpha(int x); +extern DECLSPEC int SDLCALL SDL_isalnum(int x); +extern DECLSPEC int SDLCALL SDL_isblank(int x); +extern DECLSPEC int SDLCALL SDL_iscntrl(int x); +extern DECLSPEC int SDLCALL SDL_isdigit(int x); +extern DECLSPEC int SDLCALL SDL_isxdigit(int x); +extern DECLSPEC int SDLCALL SDL_ispunct(int x); +extern DECLSPEC int SDLCALL SDL_isspace(int x); +extern DECLSPEC int SDLCALL SDL_isupper(int x); +extern DECLSPEC int SDLCALL SDL_islower(int x); +extern DECLSPEC int SDLCALL SDL_isprint(int x); +extern DECLSPEC int SDLCALL SDL_isgraph(int x); +extern DECLSPEC int SDLCALL SDL_toupper(int x); +extern DECLSPEC int SDLCALL SDL_tolower(int x); + +extern DECLSPEC Uint32 SDLCALL SDL_crc32(Uint32 crc, const void *data, size_t len); + +extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len); + +#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) +#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) +#define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x))) + +/* Note that memset() is a byte assignment and this is a 32-bit assignment, so they're not directly equivalent. */ +SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords) +{ +#ifdef __APPLE__ + memset_pattern4(dst, &val, dwords * 4); +#elif defined(__GNUC__) && defined(__i386__) + int u0, u1, u2; + __asm__ __volatile__ ( + "cld \n\t" + "rep ; stosl \n\t" + : "=&D" (u0), "=&a" (u1), "=&c" (u2) + : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, dwords)) + : "memory" + ); +#else + size_t _n = (dwords + 3) / 4; + Uint32 *_p = SDL_static_cast(Uint32 *, dst); + Uint32 _val = (val); + if (dwords == 0) { + return; + } + switch (dwords % 4) { + case 0: do { *_p++ = _val; SDL_FALLTHROUGH; + case 3: *_p++ = _val; SDL_FALLTHROUGH; + case 2: *_p++ = _val; SDL_FALLTHROUGH; + case 1: *_p++ = _val; + } while ( --_n ); + } +#endif +} + +extern DECLSPEC void *SDLCALL SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); + +extern DECLSPEC void *SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); +extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); + +extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); +extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC wchar_t *SDLCALL SDL_wcsdup(const wchar_t *wstr); +extern DECLSPEC wchar_t *SDLCALL SDL_wcsstr(const wchar_t *haystack, const wchar_t *needle); + +extern DECLSPEC int SDLCALL SDL_wcscmp(const wchar_t *str1, const wchar_t *str2); +extern DECLSPEC int SDLCALL SDL_wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen); +extern DECLSPEC int SDLCALL SDL_wcscasecmp(const wchar_t *str1, const wchar_t *str2); +extern DECLSPEC int SDLCALL SDL_wcsncasecmp(const wchar_t *str1, const wchar_t *str2, size_t len); + +extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); +extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes); +extern DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); +extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); +extern DECLSPEC char *SDLCALL SDL_strrev(char *str); +extern DECLSPEC char *SDLCALL SDL_strupr(char *str); +extern DECLSPEC char *SDLCALL SDL_strlwr(char *str); +extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c); +extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c); +extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle); +extern DECLSPEC char *SDLCALL SDL_strtokr(char *s1, const char *s2, char **saveptr); +extern DECLSPEC size_t SDLCALL SDL_utf8strlen(const char *str); + +extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix); + +extern DECLSPEC int SDLCALL SDL_atoi(const char *str); +extern DECLSPEC double SDLCALL SDL_atof(const char *str); +extern DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base); +extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base); +extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base); +extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base); +extern DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp); + +extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); +extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); +extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); +extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); + +extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) SDL_SCANF_VARARG_FUNC(2); +extern DECLSPEC int SDLCALL SDL_vsscanf(const char *text, const char *fmt, va_list ap); +extern DECLSPEC int SDLCALL SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ... ) SDL_PRINTF_VARARG_FUNC(3); +extern DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap); +extern DECLSPEC int SDLCALL SDL_asprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); +extern DECLSPEC int SDLCALL SDL_vasprintf(char **strp, const char *fmt, va_list ap); + +#ifndef HAVE_M_PI +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288 /**< pi */ +#endif +#endif + +/** + * Use this function to compute arc cosine of `x`. + * + * The definition of `y = acos(x)` is `x = cos(y)`. + * + * Domain: `-1 <= x <= 1` + * + * Range: `0 <= y <= Pi` + * + * \param x floating point value, in radians. + * \returns arc cosine of `x`. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC double SDLCALL SDL_acos(double x); +extern DECLSPEC float SDLCALL SDL_acosf(float x); +extern DECLSPEC double SDLCALL SDL_asin(double x); +extern DECLSPEC float SDLCALL SDL_asinf(float x); +extern DECLSPEC double SDLCALL SDL_atan(double x); +extern DECLSPEC float SDLCALL SDL_atanf(float x); +extern DECLSPEC double SDLCALL SDL_atan2(double y, double x); +extern DECLSPEC float SDLCALL SDL_atan2f(float y, float x); +extern DECLSPEC double SDLCALL SDL_ceil(double x); +extern DECLSPEC float SDLCALL SDL_ceilf(float x); +extern DECLSPEC double SDLCALL SDL_copysign(double x, double y); +extern DECLSPEC float SDLCALL SDL_copysignf(float x, float y); +extern DECLSPEC double SDLCALL SDL_cos(double x); +extern DECLSPEC float SDLCALL SDL_cosf(float x); +extern DECLSPEC double SDLCALL SDL_exp(double x); +extern DECLSPEC float SDLCALL SDL_expf(float x); +extern DECLSPEC double SDLCALL SDL_fabs(double x); +extern DECLSPEC float SDLCALL SDL_fabsf(float x); +extern DECLSPEC double SDLCALL SDL_floor(double x); +extern DECLSPEC float SDLCALL SDL_floorf(float x); +extern DECLSPEC double SDLCALL SDL_trunc(double x); +extern DECLSPEC float SDLCALL SDL_truncf(float x); +extern DECLSPEC double SDLCALL SDL_fmod(double x, double y); +extern DECLSPEC float SDLCALL SDL_fmodf(float x, float y); +extern DECLSPEC double SDLCALL SDL_log(double x); +extern DECLSPEC float SDLCALL SDL_logf(float x); +extern DECLSPEC double SDLCALL SDL_log10(double x); +extern DECLSPEC float SDLCALL SDL_log10f(float x); +extern DECLSPEC double SDLCALL SDL_pow(double x, double y); +extern DECLSPEC float SDLCALL SDL_powf(float x, float y); +extern DECLSPEC double SDLCALL SDL_round(double x); +extern DECLSPEC float SDLCALL SDL_roundf(float x); +extern DECLSPEC long SDLCALL SDL_lround(double x); +extern DECLSPEC long SDLCALL SDL_lroundf(float x); +extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); +extern DECLSPEC float SDLCALL SDL_scalbnf(float x, int n); +extern DECLSPEC double SDLCALL SDL_sin(double x); +extern DECLSPEC float SDLCALL SDL_sinf(float x); +extern DECLSPEC double SDLCALL SDL_sqrt(double x); +extern DECLSPEC float SDLCALL SDL_sqrtf(float x); +extern DECLSPEC double SDLCALL SDL_tan(double x); +extern DECLSPEC float SDLCALL SDL_tanf(float x); + +/* The SDL implementation of iconv() returns these error codes */ +#define SDL_ICONV_ERROR (size_t)-1 +#define SDL_ICONV_E2BIG (size_t)-2 +#define SDL_ICONV_EILSEQ (size_t)-3 +#define SDL_ICONV_EINVAL (size_t)-4 + +/* SDL_iconv_* are now always real symbols/types, not macros or inlined. */ +typedef struct _SDL_iconv_t *SDL_iconv_t; +extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, + const char *fromcode); +extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); +extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, + size_t * inbytesleft, char **outbuf, + size_t * outbytesleft); + +/** + * This function converts a string between encodings in one pass, returning a + * string that must be freed with SDL_free() or NULL on error. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, + const char *fromcode, + const char *inbuf, + size_t inbytesleft); +#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_wchar_utf8(S) SDL_iconv_string("UTF-8", "WCHAR_T", (char *)S, (SDL_wcslen(S)+1)*sizeof(wchar_t)) + +/* force builds using Clang's static analysis tools to use literal C runtime + here, since there are possibly tests that are ineffective otherwise. */ +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) + +/* The analyzer knows about strlcpy even when the system doesn't provide it */ +#ifndef HAVE_STRLCPY +size_t strlcpy(char* dst, const char* src, size_t size); +#endif + +/* The analyzer knows about strlcat even when the system doesn't provide it */ +#ifndef HAVE_STRLCAT +size_t strlcat(char* dst, const char* src, size_t size); +#endif + +#define SDL_malloc malloc +#define SDL_calloc calloc +#define SDL_realloc realloc +#define SDL_free free +#define SDL_memset memset +#define SDL_memcpy memcpy +#define SDL_memmove memmove +#define SDL_memcmp memcmp +#define SDL_strlcpy strlcpy +#define SDL_strlcat strlcat +#define SDL_strlen strlen +#define SDL_wcslen wcslen +#define SDL_wcslcpy wcslcpy +#define SDL_wcslcat wcslcat +#define SDL_strdup strdup +#define SDL_wcsdup wcsdup +#define SDL_strchr strchr +#define SDL_strrchr strrchr +#define SDL_strstr strstr +#define SDL_wcsstr wcsstr +#define SDL_strtokr strtok_r +#define SDL_strcmp strcmp +#define SDL_wcscmp wcscmp +#define SDL_strncmp strncmp +#define SDL_wcsncmp wcsncmp +#define SDL_strcasecmp strcasecmp +#define SDL_strncasecmp strncasecmp +#define SDL_sscanf sscanf +#define SDL_vsscanf vsscanf +#define SDL_snprintf snprintf +#define SDL_vsnprintf vsnprintf +#endif + +SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_BYTECAP(dwords*4) const void *src, size_t dwords) +{ + return SDL_memcpy(dst, src, dwords * 4); +} + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_stdinc_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_surface.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_surface.h new file mode 100644 index 00000000000..318b541f2b9 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_surface.h @@ -0,0 +1,995 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_surface.h + * + * Header file for ::SDL_Surface definition and management functions. + */ + +#ifndef SDL_surface_h_ +#define SDL_surface_h_ + +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name Surface flags + * + * These are the currently supported flags for the ::SDL_Surface. + * + * \internal + * Used internally (read-only). + */ +/* @{ */ +#define SDL_SWSURFACE 0 /**< Just here for compatibility */ +#define SDL_PREALLOC 0x00000001 /**< Surface uses preallocated memory */ +#define SDL_RLEACCEL 0x00000002 /**< Surface is RLE encoded */ +#define SDL_DONTFREE 0x00000004 /**< Surface is referenced internally */ +#define SDL_SIMD_ALIGNED 0x00000008 /**< Surface uses aligned memory */ +/* @} *//* Surface flags */ + +/** + * Evaluates to true if the surface needs to be locked before access. + */ +#define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0) + +/** + * \brief A collection of pixels used in software blitting. + * + * \note This structure should be treated as read-only, except for \c pixels, + * which, if not NULL, contains the raw pixel data for the surface. + */ +typedef struct SDL_Surface +{ + Uint32 flags; /**< Read-only */ + SDL_PixelFormat *format; /**< Read-only */ + int w, h; /**< Read-only */ + int pitch; /**< Read-only */ + void *pixels; /**< Read-write */ + + /** Application data associated with the surface */ + void *userdata; /**< Read-write */ + + /** information needed for surfaces requiring locks */ + int locked; /**< Read-only */ + + /** list of BlitMap that hold a reference to this surface */ + void *list_blitmap; /**< Private */ + + /** clipping information */ + SDL_Rect clip_rect; /**< Read-only */ + + /** info for fast blit mapping to other surfaces */ + struct SDL_BlitMap *map; /**< Private */ + + /** Reference count -- used when freeing surface */ + int refcount; /**< Read-mostly */ +} SDL_Surface; + +/** + * \brief The type of function used for surface blitting functions. + */ +typedef int (SDLCALL *SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, + struct SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * \brief The formula used for converting between YUV and RGB + */ +typedef enum +{ + SDL_YUV_CONVERSION_JPEG, /**< Full range JPEG */ + SDL_YUV_CONVERSION_BT601, /**< BT.601 (the default) */ + SDL_YUV_CONVERSION_BT709, /**< BT.709 */ + SDL_YUV_CONVERSION_AUTOMATIC /**< BT.601 for SD content, BT.709 for HD content */ +} SDL_YUV_CONVERSION_MODE; + +/** + * Allocate a new RGB surface. + * + * If `depth` is 4 or 8 bits, an empty palette is allocated for the surface. + * If `depth` is greater than 8 bits, the pixel format is set using the + * [RGBA]mask parameters. + * + * The [RGBA]mask parameters are the bitmasks used to extract that color from + * a pixel. For instance, `Rmask` being 0xFF000000 means the red data is + * stored in the most significant byte. Using zeros for the RGB masks sets a + * default value, based on the depth. For example: + * + * ```c++ + * SDL_CreateRGBSurface(0,w,h,32,0,0,0,0); + * ``` + * + * However, using zero for the Amask results in an Amask of 0. + * + * By default surfaces with an alpha mask are set up for blending as with: + * + * ```c++ + * SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND) + * ``` + * + * You can change this by calling SDL_SetSurfaceBlendMode() and selecting a + * different `blendMode`. + * + * \param flags the flags are unused and should be set to 0 + * \param width the width of the surface + * \param height the height of the surface + * \param depth the depth of the surface in bits + * \param Rmask the red mask for the pixels + * \param Gmask the green mask for the pixels + * \param Bmask the blue mask for the pixels + * \param Amask the alpha mask for the pixels + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface + (Uint32 flags, int width, int height, int depth, + Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); + + +/* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */ + +/** + * Allocate a new RGB surface with a specific pixel format. + * + * This function operates mostly like SDL_CreateRGBSurface(), except instead + * of providing pixel color masks, you provide it with a predefined format + * from SDL_PixelFormatEnum. + * + * \param flags the flags are unused and should be set to 0 + * \param width the width of the surface + * \param height the height of the surface + * \param depth the depth of the surface in bits + * \param format the SDL_PixelFormatEnum for the new surface's pixel format. + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_CreateRGBSurface + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormat + (Uint32 flags, int width, int height, int depth, Uint32 format); + +/** + * Allocate a new RGB surface with existing pixel data. + * + * This function operates mostly like SDL_CreateRGBSurface(), except it does + * not allocate memory for the pixel data, instead the caller provides an + * existing buffer of data for the surface to use. + * + * No copy is made of the pixel data. Pixel data is not managed automatically; + * you must free the surface before you free the pixel data. + * + * \param pixels a pointer to existing pixel data + * \param width the width of the surface + * \param height the height of the surface + * \param depth the depth of the surface in bits + * \param pitch the pitch of the surface in bytes + * \param Rmask the red mask for the pixels + * \param Gmask the green mask for the pixels + * \param Bmask the blue mask for the pixels + * \param Amask the alpha mask for the pixels + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRGBSurface + * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, + int width, + int height, + int depth, + int pitch, + Uint32 Rmask, + Uint32 Gmask, + Uint32 Bmask, + Uint32 Amask); + +/* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */ + +/** + * Allocate a new RGB surface with with a specific pixel format and existing + * pixel data. + * + * This function operates mostly like SDL_CreateRGBSurfaceFrom(), except + * instead of providing pixel color masks, you provide it with a predefined + * format from SDL_PixelFormatEnum. + * + * No copy is made of the pixel data. Pixel data is not managed automatically; + * you must free the surface before you free the pixel data. + * + * \param pixels a pointer to existing pixel data + * \param width the width of the surface + * \param height the height of the surface + * \param depth the depth of the surface in bits + * \param pitch the pitch of the surface in bytes + * \param format the SDL_PixelFormatEnum for the new surface's pixel format. + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormatFrom + (void *pixels, int width, int height, int depth, int pitch, Uint32 format); + +/** + * Free an RGB surface. + * + * It is safe to pass NULL to this function. + * + * \param surface the SDL_Surface to free. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRGBSurface + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_LoadBMP + * \sa SDL_LoadBMP_RW + */ +extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface); + +/** + * Set the palette used by a surface. + * + * A single palette can be shared with many surfaces. + * + * \param surface the SDL_Surface structure to update + * \param palette the SDL_Palette structure to use + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface * surface, + SDL_Palette * palette); + +/** + * Set up a surface for directly accessing the pixels. + * + * Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to + * and read from `surface->pixels`, using the pixel format stored in + * `surface->format`. Once you are done accessing the surface, you should use + * SDL_UnlockSurface() to release it. + * + * Not all surfaces require locking. If `SDL_MUSTLOCK(surface)` evaluates to + * 0, then you can read and write to the surface at any time, and the pixel + * format of the surface will not change. + * + * \param surface the SDL_Surface structure to be locked + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MUSTLOCK + * \sa SDL_UnlockSurface + */ +extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface * surface); + +/** + * Release a surface after directly accessing the pixels. + * + * \param surface the SDL_Surface structure to be unlocked + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockSurface + */ +extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface * surface); + +/** + * Load a BMP image from a seekable SDL data stream. + * + * The new surface should be freed with SDL_FreeSurface(). Not doing so will + * result in a memory leak. + * + * src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. + * Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap + * from a file, convert it to an SDL_Surface and then close the file. + * + * \param src the data stream for the surface + * \param freesrc non-zero to close the stream after being read + * \returns a pointer to a new SDL_Surface structure or NULL if there was an + * error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeSurface + * \sa SDL_RWFromFile + * \sa SDL_LoadBMP + * \sa SDL_SaveBMP_RW + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP_RW(SDL_RWops * src, + int freesrc); + +/** + * Load a surface from a file. + * + * Convenience macro. + */ +#define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) + +/** + * Save a surface to a seekable SDL data stream in BMP format. + * + * Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the + * BMP directly. Other RGB formats with 8-bit or higher get converted to a + * 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit + * surface before they are saved. YUV and paletted 1-bit and 4-bit formats are + * not supported. + * + * \param surface the SDL_Surface structure containing the image to be saved + * \param dst a data stream to save to + * \param freedst non-zero to close the stream after being written + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadBMP_RW + * \sa SDL_SaveBMP + */ +extern DECLSPEC int SDLCALL SDL_SaveBMP_RW + (SDL_Surface * surface, SDL_RWops * dst, int freedst); + +/** + * Save a surface to a file. + * + * Convenience macro. + */ +#define SDL_SaveBMP(surface, file) \ + SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) + +/** + * Set the RLE acceleration hint for a surface. + * + * If RLE is enabled, color key and alpha blending blits are much faster, but + * the surface must be locked before directly accessing the pixels. + * + * \param surface the SDL_Surface structure to optimize + * \param flag 0 to disable, non-zero to enable RLE acceleration + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_LockSurface + * \sa SDL_UnlockSurface + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface * surface, + int flag); + +/** + * Returns whether the surface is RLE enabled + * + * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + * + * \param surface the SDL_Surface structure to query + * \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_SetSurfaceRLE + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSurfaceRLE(SDL_Surface * surface); + +/** + * Set the color key (transparent pixel) in a surface. + * + * The color key defines a pixel value that will be treated as transparent in + * a blit. For example, one can use this to specify that cyan pixels should be + * considered transparent, and therefore not rendered. + * + * It is a pixel of the format used by the surface, as generated by + * SDL_MapRGB(). + * + * RLE acceleration can substantially speed up blitting of images with large + * horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. + * + * \param surface the SDL_Surface structure to update + * \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key + * \param key the transparent pixel + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_GetColorKey + */ +extern DECLSPEC int SDLCALL SDL_SetColorKey(SDL_Surface * surface, + int flag, Uint32 key); + +/** + * Returns whether the surface has a color key + * + * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + * + * \param surface the SDL_Surface structure to query + * \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_SetColorKey + * \sa SDL_GetColorKey + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasColorKey(SDL_Surface * surface); + +/** + * Get the color key (transparent pixel) for a surface. + * + * The color key is a pixel of the format used by the surface, as generated by + * SDL_MapRGB(). + * + * If the surface doesn't have color key enabled this function returns -1. + * + * \param surface the SDL_Surface structure to query + * \param key a pointer filled in with the transparent pixel + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_SetColorKey + */ +extern DECLSPEC int SDLCALL SDL_GetColorKey(SDL_Surface * surface, + Uint32 * key); + +/** + * Set an additional color value multiplied into blit operations. + * + * When this surface is blitted, during the blit operation each source color + * channel is modulated by the appropriate color value according to the + * following formula: + * + * `srcC = srcC * (color / 255)` + * + * \param surface the SDL_Surface structure to update + * \param r the red color value multiplied into blit operations + * \param g the green color value multiplied into blit operations + * \param b the blue color value multiplied into blit operations + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceColorMod + * \sa SDL_SetSurfaceAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceColorMod(SDL_Surface * surface, + Uint8 r, Uint8 g, Uint8 b); + + +/** + * Get the additional color value multiplied into blit operations. + * + * \param surface the SDL_Surface structure to query + * \param r a pointer filled in with the current red color value + * \param g a pointer filled in with the current green color value + * \param b a pointer filled in with the current blue color value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceAlphaMod + * \sa SDL_SetSurfaceColorMod + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceColorMod(SDL_Surface * surface, + Uint8 * r, Uint8 * g, + Uint8 * b); + +/** + * Set an additional alpha value used in blit operations. + * + * When this surface is blitted, during the blit operation the source alpha + * value is modulated by this alpha value according to the following formula: + * + * `srcA = srcA * (alpha / 255)` + * + * \param surface the SDL_Surface structure to update + * \param alpha the alpha value multiplied into blit operations + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceAlphaMod + * \sa SDL_SetSurfaceColorMod + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceAlphaMod(SDL_Surface * surface, + Uint8 alpha); + +/** + * Get the additional alpha value used in blit operations. + * + * \param surface the SDL_Surface structure to query + * \param alpha a pointer filled in with the current alpha value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceColorMod + * \sa SDL_SetSurfaceAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceAlphaMod(SDL_Surface * surface, + Uint8 * alpha); + +/** + * Set the blend mode used for blit operations. + * + * To copy a surface to another surface (or texture) without blending with the + * existing data, the blendmode of the SOURCE surface should be set to + * `SDL_BLENDMODE_NONE`. + * + * \param surface the SDL_Surface structure to update + * \param blendMode the SDL_BlendMode to use for blit blending + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceBlendMode + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface * surface, + SDL_BlendMode blendMode); + +/** + * Get the blend mode used for blit operations. + * + * \param surface the SDL_Surface structure to query + * \param blendMode a pointer filled in with the current SDL_BlendMode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetSurfaceBlendMode + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface * surface, + SDL_BlendMode *blendMode); + +/** + * Set the clipping rectangle for a surface. + * + * When `surface` is the destination of a blit, only the area within the clip + * rectangle is drawn into. + * + * Note that blits are automatically clipped to the edges of the source and + * destination surfaces. + * + * \param surface the SDL_Surface structure to be clipped + * \param rect the SDL_Rect structure representing the clipping rectangle, or + * NULL to disable clipping + * \returns SDL_TRUE if the rectangle intersects the surface, otherwise + * SDL_FALSE and blits will be completely clipped. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_GetClipRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface * surface, + const SDL_Rect * rect); + +/** + * Get the clipping rectangle for a surface. + * + * When `surface` is the destination of a blit, only the area within the clip + * rectangle is drawn into. + * + * \param surface the SDL_Surface structure representing the surface to be + * clipped + * \param rect an SDL_Rect structure filled in with the clipping rectangle for + * the surface + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_SetClipRect + */ +extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface, + SDL_Rect * rect); + +/* + * Creates a new surface identical to the existing surface. + * + * The returned surface should be freed with SDL_FreeSurface(). + * + * \param surface the surface to duplicate. + * \returns a copy of the surface, or NULL on failure; call SDL_GetError() for + * more information. + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_DuplicateSurface(SDL_Surface * surface); + +/** + * Copy an existing surface to a new surface of the specified format. + * + * This function is used to optimize images for faster *repeat* blitting. This + * is accomplished by converting the original and storing the result as a new + * surface. The new, optimized surface can then be used as the source for + * future blits, making them faster. + * + * \param src the existing SDL_Surface structure to convert + * \param fmt the SDL_PixelFormat structure that the new surface is optimized + * for + * \param flags the flags are unused and should be set to 0; this is a + * leftover from SDL 1.2's API + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocFormat + * \sa SDL_ConvertSurfaceFormat + * \sa SDL_CreateRGBSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface + (SDL_Surface * src, const SDL_PixelFormat * fmt, Uint32 flags); + +/** + * Copy an existing surface to a new surface of the specified format enum. + * + * This function operates just like SDL_ConvertSurface(), but accepts an + * SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such, + * it might be easier to call but it doesn't have access to palette + * information for the destination surface, in case that would be important. + * + * \param src the existing SDL_Surface structure to convert + * \param pixel_format the SDL_PixelFormatEnum that the new surface is + * optimized for + * \param flags the flags are unused and should be set to 0; this is a + * leftover from SDL 1.2's API + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocFormat + * \sa SDL_ConvertSurface + * \sa SDL_CreateRGBSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat + (SDL_Surface * src, Uint32 pixel_format, Uint32 flags); + +/** + * Copy a block of pixels of one format to another format. + * + * \param width the width of the block to copy, in pixels + * \param height the height of the block to copy, in pixels + * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + * \param src a pointer to the source pixels + * \param src_pitch the pitch of the source pixels, in bytes + * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + * \param dst a pointer to be filled in with new pixel data + * \param dst_pitch the pitch of the destination pixels, in bytes + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, + Uint32 src_format, + const void * src, int src_pitch, + Uint32 dst_format, + void * dst, int dst_pitch); + +/** + * Premultiply the alpha on a block of pixels. + * + * This is safe to use with src == dst, but not for other overlapping areas. + * + * This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. + * + * \param width the width of the block to convert, in pixels + * \param height the height of the block to convert, in pixels + * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + * \param src a pointer to the source pixels + * \param src_pitch the pitch of the source pixels, in bytes + * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + * \param dst a pointer to be filled in with premultiplied pixel data + * \param dst_pitch the pitch of the destination pixels, in bytes + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_PremultiplyAlpha(int width, int height, + Uint32 src_format, + const void * src, int src_pitch, + Uint32 dst_format, + void * dst, int dst_pitch); + +/** + * Perform a fast fill of a rectangle with a specific color. + * + * `color` should be a pixel of the format used by the surface, and can be + * generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + * alpha component then the destination is simply filled with that alpha + * information, no blending takes place. + * + * If there is a clip rectangle set on the destination (set via + * SDL_SetClipRect()), then this function will fill based on the intersection + * of the clip rectangle and `rect`. + * + * \param dst the SDL_Surface structure that is the drawing target + * \param rect the SDL_Rect structure representing the rectangle to fill, or + * NULL to fill the entire surface + * \param color the color to fill with + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FillRects + */ +extern DECLSPEC int SDLCALL SDL_FillRect + (SDL_Surface * dst, const SDL_Rect * rect, Uint32 color); + +/** + * Perform a fast fill of a set of rectangles with a specific color. + * + * `color` should be a pixel of the format used by the surface, and can be + * generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + * alpha component then the destination is simply filled with that alpha + * information, no blending takes place. + * + * If there is a clip rectangle set on the destination (set via + * SDL_SetClipRect()), then this function will fill based on the intersection + * of the clip rectangle and `rect`. + * + * \param dst the SDL_Surface structure that is the drawing target + * \param rects an array of SDL_Rects representing the rectangles to fill. + * \param count the number of rectangles in the array + * \param color the color to fill with + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FillRect + */ +extern DECLSPEC int SDLCALL SDL_FillRects + (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color); + +/* !!! FIXME: merge this documentation with the wiki */ +/** + * Performs a fast blit from the source surface to the destination surface. + * + * This assumes that the source and destination rectangles are + * the same size. If either \c srcrect or \c dstrect are NULL, the entire + * surface (\c src or \c dst) is copied. The final blit rectangles are saved + * in \c srcrect and \c dstrect after all clipping is performed. + * + * \returns 0 if the blit is successful, otherwise it returns -1. + * + * The blit function should not be called on a locked surface. + * + * The blit semantics for surfaces with and without blending and colorkey + * are defined as follows: + * \verbatim + RGBA->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB, set destination alpha to source per-surface alpha value. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + + RGBA->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy all of RGBA to the destination. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + \endverbatim + * + * You should call SDL_BlitSurface() unless you know exactly how SDL + * blitting works internally and how to use the other blit functions. + */ +#define SDL_BlitSurface SDL_UpperBlit + +/** + * Perform a fast blit from the source surface to the destination surface. + * + * SDL_UpperBlit() has been replaced by SDL_BlitSurface(), which is merely a + * macro for this function with a less confusing name. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + */ +extern DECLSPEC int SDLCALL SDL_UpperBlit + (SDL_Surface * src, const SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * Perform low-level surface blitting only. + * + * This is a semi-private blit function and it performs low-level surface + * blitting, assuming the input rectangles have already been clipped. + * + * Unless you know what you're doing, you should be using SDL_BlitSurface() + * instead. + * + * \param src the SDL_Surface structure to be copied from + * \param srcrect the SDL_Rect structure representing the rectangle to be + * copied, or NULL to copy the entire surface + * \param dst the SDL_Surface structure that is the blit target + * \param dstrect the SDL_Rect structure representing the rectangle that is + * copied into + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + */ +extern DECLSPEC int SDLCALL SDL_LowerBlit + (SDL_Surface * src, SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + + +/** + * Perform a fast, low quality, stretch blit between two surfaces of the same + * format. + * + * Please use SDL_BlitScaled() instead. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface * src, + const SDL_Rect * srcrect, + SDL_Surface * dst, + const SDL_Rect * dstrect); + +/** + * Perform bilinear scaling between two surfaces of the same format, 32BPP. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_SoftStretchLinear(SDL_Surface * src, + const SDL_Rect * srcrect, + SDL_Surface * dst, + const SDL_Rect * dstrect); + + +#define SDL_BlitScaled SDL_UpperBlitScaled + +/** + * Perform a scaled surface copy to a destination surface. + * + * SDL_UpperBlitScaled() has been replaced by SDL_BlitScaled(), which is + * merely a macro for this function with a less confusing name. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitScaled + */ +extern DECLSPEC int SDLCALL SDL_UpperBlitScaled + (SDL_Surface * src, const SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * Perform low-level surface scaled blitting only. + * + * This is a semi-private function and it performs low-level surface blitting, + * assuming the input rectangles have already been clipped. + * + * \param src the SDL_Surface structure to be copied from + * \param srcrect the SDL_Rect structure representing the rectangle to be + * copied + * \param dst the SDL_Surface structure that is the blit target + * \param dstrect the SDL_Rect structure representing the rectangle that is + * copied into + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitScaled + */ +extern DECLSPEC int SDLCALL SDL_LowerBlitScaled + (SDL_Surface * src, SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * Set the YUV conversion mode + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC void SDLCALL SDL_SetYUVConversionMode(SDL_YUV_CONVERSION_MODE mode); + +/** + * Get the YUV conversion mode + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_YUV_CONVERSION_MODE SDLCALL SDL_GetYUVConversionMode(void); + +/** + * Get the YUV conversion mode, returning the correct mode for the resolution + * when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_YUV_CONVERSION_MODE SDLCALL SDL_GetYUVConversionModeForResolution(int width, int height); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_surface_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_system.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_system.h new file mode 100644 index 00000000000..7324329ac1d --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_system.h @@ -0,0 +1,575 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_system.h + * + * Include file for platform specific SDL API functions + */ + +#ifndef SDL_system_h_ +#define SDL_system_h_ + +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* Platform specific functions for Windows */ +#ifdef __WIN32__ + +typedef void (SDLCALL * SDL_WindowsMessageHook)(void *userdata, void *hWnd, unsigned int message, Uint64 wParam, Sint64 lParam); + +/** + * Set a callback for every Windows message, run before TranslateMessage(). + * + * \param callback The SDL_WindowsMessageHook function to call. + * \param userdata a pointer to pass to every iteration of `callback` + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC void SDLCALL SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata); + +/** + * Get the D3D9 adapter index that matches the specified display index. + * + * The returned adapter index can be passed to `IDirect3D9::CreateDevice` and + * controls on which monitor a full screen application will appear. + * + * \param displayIndex the display index for which to get the D3D9 adapter + * index + * \returns the D3D9 adapter index on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.1. + */ +extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex( int displayIndex ); + +typedef struct IDirect3DDevice9 IDirect3DDevice9; + +/** + * Get the D3D9 device associated with a renderer. + * + * Once you are done using the device, you should release it to avoid a + * resource leak. + * + * \param renderer the renderer from which to get the associated D3D device + * \returns the D3D9 device associated with given renderer or NULL if it is + * not a D3D9 renderer; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.1. + */ +extern DECLSPEC IDirect3DDevice9* SDLCALL SDL_RenderGetD3D9Device(SDL_Renderer * renderer); + +typedef struct ID3D11Device ID3D11Device; + +/** + * Get the D3D11 device associated with a renderer. + * + * Once you are done using the device, you should release it to avoid a + * resource leak. + * + * \param renderer the renderer from which to get the associated D3D11 device + * \returns the D3D11 device associated with given renderer or NULL if it is + * not a D3D11 renderer; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC ID3D11Device* SDLCALL SDL_RenderGetD3D11Device(SDL_Renderer * renderer); + +/** + * Get the DXGI Adapter and Output indices for the specified display index. + * + * The DXGI Adapter and Output indices can be passed to `EnumAdapters` and + * `EnumOutputs` respectively to get the objects required to create a DX10 or + * DX11 device and swap chain. + * + * Before SDL 2.0.4 this function did not return a value. Since SDL 2.0.4 it + * returns an SDL_bool. + * + * \param displayIndex the display index for which to get both indices + * \param adapterIndex a pointer to be filled in with the adapter index + * \param outputIndex a pointer to be filled in with the output index + * \returns SDL_TRUE on success or SDL_FALSE on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex ); + +#endif /* __WIN32__ */ + + +/* Platform specific functions for Linux */ +#ifdef __LINUX__ + +/** + * Sets the UNIX nice value for a thread. + * + * This uses setpriority() if possible, and RealtimeKit if available. + * + * \param threadID the Unix thread ID to change priority of. + * \param priority The new, Unix-specific, priority value. + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriority(Sint64 threadID, int priority); + +/** + * Sets the priority (not nice level) and scheduling policy for a thread. + * + * This uses setpriority() if possible, and RealtimeKit if available. + * + * \param threadID The Unix thread ID to change priority of. + * \param sdlPriority The new SDL_ThreadPriority value. + * \param schedPolicy The new scheduling policy (SCHED_FIFO, SCHED_RR, + * SCHED_OTHER, etc...) + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedPolicy); + +#endif /* __LINUX__ */ + +/* Platform specific functions for iOS */ +#ifdef __IPHONEOS__ + +#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam) + +/** + * Use this function to set the animation callback on Apple iOS. + * + * The function prototype for `callback` is: + * + * ```c + * void callback(void* callbackParam); + * ``` + * + * Where its parameter, `callbackParam`, is what was passed as `callbackParam` + * to SDL_iPhoneSetAnimationCallback(). + * + * This function is only available on Apple iOS. + * + * For more information see: + * [README-ios.md](https://hg.libsdl.org/SDL/file/default/docs/README-ios.md) + * + * This functions is also accessible using the macro + * SDL_iOSSetAnimationCallback() since SDL 2.0.4. + * + * \param window the window for which the animation callback should be set + * \param interval the number of frames after which **callback** will be + * called + * \param callback the function to call for every frame. + * \param callbackParam a pointer that is passed to `callback`. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_iPhoneSetEventPump + */ +extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); + +#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) + +/** + * Use this function to enable or disable the SDL event pump on Apple iOS. + * + * This function is only available on Apple iOS. + * + * This functions is also accessible using the macro SDL_iOSSetEventPump() + * since SDL 2.0.4. + * + * \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_iPhoneSetAnimationCallback + */ +extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); + +#endif /* __IPHONEOS__ */ + + +/* Platform specific functions for Android */ +#ifdef __ANDROID__ + +/** + * Get the Android Java Native Interface Environment of the current thread. + * + * This is the JNIEnv one needs to access the Java virtual machine from native + * code, and is needed for many Android APIs to be usable from C. + * + * The prototype of the function in SDL's code actually declare a void* return + * type, even if the implementation returns a pointer to a JNIEnv. The + * rationale being that the SDL headers can avoid including jni.h. + * + * \returns a pointer to Java native interface object (JNIEnv) to which the + * current thread is attached, or 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetActivity + */ +extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(void); + +/** + * Retrieve the Java instance of the Android activity class. + * + * The prototype of the function in SDL's code actually declares a void* + * return type, even if the implementation returns a jobject. The rationale + * being that the SDL headers can avoid including jni.h. + * + * The jobject returned by the function is a local reference and must be + * released by the caller. See the PushLocalFrame() and PopLocalFrame() or + * DeleteLocalRef() functions of the Java native interface: + * + * https://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html + * + * \returns the jobject representing the instance of the Activity class of the + * Android application, or NULL on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetJNIEnv + */ +extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(void); + +/** + * Query Android API level of the current device. + * + * - API level 31: Android 12 + * - API level 30: Android 11 + * - API level 29: Android 10 + * - API level 28: Android 9 + * - API level 27: Android 8.1 + * - API level 26: Android 8.0 + * - API level 25: Android 7.1 + * - API level 24: Android 7.0 + * - API level 23: Android 6.0 + * - API level 22: Android 5.1 + * - API level 21: Android 5.0 + * - API level 20: Android 4.4W + * - API level 19: Android 4.4 + * - API level 18: Android 4.3 + * - API level 17: Android 4.2 + * - API level 16: Android 4.1 + * - API level 15: Android 4.0.3 + * - API level 14: Android 4.0 + * - API level 13: Android 3.2 + * - API level 12: Android 3.1 + * - API level 11: Android 3.0 + * - API level 10: Android 2.3.3 + * + * \returns the Android API level. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC int SDLCALL SDL_GetAndroidSDKVersion(void); + +/** + * Query if the application is running on Android TV. + * + * \returns SDL_TRUE if this is Android TV, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsAndroidTV(void); + +/** + * Query if the application is running on a Chromebook. + * + * \returns SDL_TRUE if this is a Chromebook, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsChromebook(void); + +/** + * Query if the application is running on a Samsung DeX docking station. + * + * \returns SDL_TRUE if this is a DeX docking station, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsDeXMode(void); + +/** + * Trigger the Android system back button behavior. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC void SDLCALL SDL_AndroidBackButton(void); + +/** + See the official Android developer guide for more information: + http://developer.android.com/guide/topics/data/data-storage.html +*/ +#define SDL_ANDROID_EXTERNAL_STORAGE_READ 0x01 +#define SDL_ANDROID_EXTERNAL_STORAGE_WRITE 0x02 + +/** + * Get the path used for internal storage for this application. + * + * This path is unique to your application and cannot be written to by other + * applications. + * + * Your internal storage path is typically: + * `/data/data/your.app.package/files`. + * + * \returns the path used for internal storage or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetExternalStorageState + */ +extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(void); + +/** + * Get the current state of external storage. + * + * The current state of external storage, a bitmask of these values: + * `SDL_ANDROID_EXTERNAL_STORAGE_READ`, `SDL_ANDROID_EXTERNAL_STORAGE_WRITE`. + * + * If external storage is currently unavailable, this will return 0. + * + * \returns the current state of external storage on success or 0 on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetExternalStoragePath + */ +extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(void); + +/** + * Get the path used for external storage for this application. + * + * This path is unique to your application, but is public and can be written + * to by other applications. + * + * Your external storage path is typically: + * `/storage/sdcard0/Android/data/your.app.package/files`. + * + * \returns the path used for external storage for this application on success + * or NULL on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetExternalStorageState + */ +extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(void); + +/** + * Request permissions at runtime. + * + * This blocks the calling thread until the permission is granted or denied. + * + * \param permission The permission to request. + * \returns SDL_TRUE if the permission was granted, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AndroidRequestPermission(const char *permission); + +/** + * Shows an Android toast notification. + * + * Toasts are a sort of lightweight notification that are unique to Android. + * + * https://developer.android.com/guide/topics/ui/notifiers/toasts + * + * Shows toast in UI thread. + * + * For the `gravity` parameter, choose a value from here, or -1 if you don't + * have a preference: + * + * https://developer.android.com/reference/android/view/Gravity + * + * \param message text message to be shown + * \param duration 0=short, 1=long + * \param gravity where the notification should appear on the screen. + * \param xoffset set this parameter only when gravity >=0 + * \param yoffset set this parameter only when gravity >=0 + * \returns 0 if success, -1 if any error occurs. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_AndroidShowToast(const char* message, int duration, int gravity, int xoffset, int yoffset); + +/** + * Send a user command to SDLActivity. + * + * Override "boolean onUnhandledMessage(Message msg)" to handle the message. + * + * \param command user command that must be greater or equal to 0x8000 + * \param param user parameter + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC int SDLCALL SDL_AndroidSendMessage(Uint32 command, int param); + +#endif /* __ANDROID__ */ + +/* Platform specific functions for WinRT */ +#ifdef __WINRT__ + +/** + * \brief WinRT / Windows Phone path types + */ +typedef enum +{ + /** \brief The installed app's root directory. + Files here are likely to be read-only. */ + SDL_WINRT_PATH_INSTALLED_LOCATION, + + /** \brief The app's local data store. Files may be written here */ + SDL_WINRT_PATH_LOCAL_FOLDER, + + /** \brief The app's roaming data store. Unsupported on Windows Phone. + Files written here may be copied to other machines via a network + connection. + */ + SDL_WINRT_PATH_ROAMING_FOLDER, + + /** \brief The app's temporary data store. Unsupported on Windows Phone. + Files written here may be deleted at any time. */ + SDL_WINRT_PATH_TEMP_FOLDER +} SDL_WinRT_Path; + + +/** + * \brief WinRT Device Family + */ +typedef enum +{ + /** \brief Unknown family */ + SDL_WINRT_DEVICEFAMILY_UNKNOWN, + + /** \brief Desktop family*/ + SDL_WINRT_DEVICEFAMILY_DESKTOP, + + /** \brief Mobile family (for example smartphone) */ + SDL_WINRT_DEVICEFAMILY_MOBILE, + + /** \brief XBox family */ + SDL_WINRT_DEVICEFAMILY_XBOX, +} SDL_WinRT_DeviceFamily; + + +/** + * Retrieve a WinRT defined path on the local file system. + * + * Not all paths are available on all versions of Windows. This is especially + * true on Windows Phone. Check the documentation for the given SDL_WinRT_Path + * for more information on which path types are supported where. + * + * Documentation on most app-specific path types on WinRT can be found on + * MSDN, at the URL: + * + * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx + * + * \param pathType the type of path to retrieve, one of SDL_WinRT_Path + * \returns a UCS-2 string (16-bit, wide-char) containing the path, or NULL if + * the path is not available for any reason; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.3. + * + * \sa SDL_WinRTGetFSPathUTF8 + */ +extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType); + +/** + * Retrieve a WinRT defined path on the local file system. + * + * Not all paths are available on all versions of Windows. This is especially + * true on Windows Phone. Check the documentation for the given SDL_WinRT_Path + * for more information on which path types are supported where. + * + * Documentation on most app-specific path types on WinRT can be found on + * MSDN, at the URL: + * + * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx + * + * \param pathType the type of path to retrieve, one of SDL_WinRT_Path + * \returns a UTF-8 string (8-bit, multi-byte) containing the path, or NULL if + * the path is not available for any reason; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.3. + * + * \sa SDL_WinRTGetFSPathUNICODE + */ +extern DECLSPEC const char * SDLCALL SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType); + +/** + * Detects the device family of WinRT plattform at runtime. + * + * \returns a value from the SDL_WinRT_DeviceFamily enum. + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_WinRT_DeviceFamily SDLCALL SDL_WinRTGetDeviceFamily(); + +#endif /* __WINRT__ */ + +/** + * Query if the current device is a tablet. + * + * If SDL can't determine this, it will return SDL_FALSE. + * + * \returns SDL_TRUE if the device is a tablet, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTablet(void); + +/* Functions used by iOS application delegates to notify SDL about state changes */ +extern DECLSPEC void SDLCALL SDL_OnApplicationWillTerminate(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationDidReceiveMemoryWarning(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationWillResignActive(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationDidEnterBackground(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationWillEnterForeground(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationDidBecomeActive(void); +#ifdef __IPHONEOS__ +extern DECLSPEC void SDLCALL SDL_OnApplicationDidChangeStatusBarOrientation(void); +#endif + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_system_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_syswm.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_syswm.h new file mode 100644 index 00000000000..b55544efe88 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_syswm.h @@ -0,0 +1,386 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_syswm.h + * + * Include file for SDL custom system window manager hooks. + */ + +#ifndef SDL_syswm_h_ +#define SDL_syswm_h_ + +#include +#include +#include +#include + +/** + * \brief SDL_syswm.h + * + * Your application has access to a special type of event ::SDL_SYSWMEVENT, + * which contains window-manager specific information and arrives whenever + * an unhandled window event occurs. This event is ignored by default, but + * you can enable it with SDL_EventState(). + */ +struct SDL_SysWMinfo; + +#if !defined(SDL_PROTOTYPES_ONLY) + +#if defined(SDL_VIDEO_DRIVER_WINDOWS) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX +#endif +#include +#endif + +#if defined(SDL_VIDEO_DRIVER_WINRT) +#include +#endif + +/* This is the structure for custom window manager events */ +#if defined(SDL_VIDEO_DRIVER_X11) +#if defined(__APPLE__) && defined(__MACH__) +/* conflicts with Quickdraw.h */ +#define Cursor X11Cursor +#endif + +#include +#include + +#if defined(__APPLE__) && defined(__MACH__) +/* matches the re-define above */ +#undef Cursor +#endif + +#endif /* defined(SDL_VIDEO_DRIVER_X11) */ + +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) +#include +#endif + +#if defined(SDL_VIDEO_DRIVER_COCOA) +#ifdef __OBJC__ +@class NSWindow; +#else +typedef struct _NSWindow NSWindow; +#endif +#endif + +#if defined(SDL_VIDEO_DRIVER_UIKIT) +#ifdef __OBJC__ +#include +#else +typedef struct _UIWindow UIWindow; +typedef struct _UIViewController UIViewController; +#endif +typedef Uint32 GLuint; +#endif + +#if defined(SDL_VIDEO_VULKAN) || defined(SDL_VIDEO_METAL) +#define SDL_METALVIEW_TAG 255 +#endif + +#if defined(SDL_VIDEO_DRIVER_ANDROID) +typedef struct ANativeWindow ANativeWindow; +typedef void *EGLSurface; +#endif + +#if defined(SDL_VIDEO_DRIVER_VIVANTE) +#include +#endif + +#if defined(SDL_VIDEO_DRIVER_OS2) +#define INCL_WIN +#include +#endif +#endif /* SDL_PROTOTYPES_ONLY */ + +#if defined(SDL_VIDEO_DRIVER_KMSDRM) +struct gbm_device; +#endif + + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(SDL_PROTOTYPES_ONLY) +/** + * These are the various supported windowing subsystems + */ +typedef enum +{ + SDL_SYSWM_UNKNOWN, + SDL_SYSWM_WINDOWS, + SDL_SYSWM_X11, + SDL_SYSWM_DIRECTFB, + SDL_SYSWM_COCOA, + SDL_SYSWM_UIKIT, + SDL_SYSWM_WAYLAND, + SDL_SYSWM_MIR, /* no longer available, left for API/ABI compatibility. Remove in 2.1! */ + SDL_SYSWM_WINRT, + SDL_SYSWM_ANDROID, + SDL_SYSWM_VIVANTE, + SDL_SYSWM_OS2, + SDL_SYSWM_HAIKU, + SDL_SYSWM_KMSDRM, + SDL_SYSWM_RISCOS +} SDL_SYSWM_TYPE; + +/** + * The custom event structure. + */ +struct SDL_SysWMmsg +{ + SDL_version version; + SDL_SYSWM_TYPE subsystem; + union + { +#if defined(SDL_VIDEO_DRIVER_WINDOWS) + struct { + HWND hwnd; /**< The window for the message */ + UINT msg; /**< The type of message */ + WPARAM wParam; /**< WORD message parameter */ + LPARAM lParam; /**< LONG message parameter */ + } win; +#endif +#if defined(SDL_VIDEO_DRIVER_X11) + struct { + XEvent event; + } x11; +#endif +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) + struct { + DFBEvent event; + } dfb; +#endif +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { + /* Latest version of Xcode clang complains about empty structs in C v. C++: + error: empty struct has size 0 in C, size 1 in C++ + */ + int dummy; + /* No Cocoa window events yet */ + } cocoa; +#endif +#if defined(SDL_VIDEO_DRIVER_UIKIT) + struct + { + int dummy; + /* No UIKit window events yet */ + } uikit; +#endif +#if defined(SDL_VIDEO_DRIVER_VIVANTE) + struct + { + int dummy; + /* No Vivante window events yet */ + } vivante; +#endif +#if defined(SDL_VIDEO_DRIVER_OS2) + struct + { + BOOL fFrame; /**< TRUE if hwnd is a frame window */ + HWND hwnd; /**< The window receiving the message */ + ULONG msg; /**< The message identifier */ + MPARAM mp1; /**< The first first message parameter */ + MPARAM mp2; /**< The second first message parameter */ + } os2; +#endif + /* Can't have an empty union */ + int dummy; + } msg; +}; + +/** + * The custom window manager information structure. + * + * When this structure is returned, it holds information about which + * low level system it is using, and will be one of SDL_SYSWM_TYPE. + */ +struct SDL_SysWMinfo +{ + SDL_version version; + SDL_SYSWM_TYPE subsystem; + union + { +#if defined(SDL_VIDEO_DRIVER_WINDOWS) + struct + { + HWND window; /**< The window handle */ + HDC hdc; /**< The window device context */ + HINSTANCE hinstance; /**< The instance handle */ + } win; +#endif +#if defined(SDL_VIDEO_DRIVER_WINRT) + struct + { + IInspectable * window; /**< The WinRT CoreWindow */ + } winrt; +#endif +#if defined(SDL_VIDEO_DRIVER_X11) + struct + { + Display *display; /**< The X11 display */ + Window window; /**< The X11 window */ + } x11; +#endif +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) + struct + { + IDirectFB *dfb; /**< The directfb main interface */ + IDirectFBWindow *window; /**< The directfb window handle */ + IDirectFBSurface *surface; /**< The directfb client surface */ + } dfb; +#endif +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { +#if defined(__OBJC__) && defined(__has_feature) + #if __has_feature(objc_arc) + NSWindow __unsafe_unretained *window; /**< The Cocoa window */ + #else + NSWindow *window; /**< The Cocoa window */ + #endif +#else + NSWindow *window; /**< The Cocoa window */ +#endif + } cocoa; +#endif +#if defined(SDL_VIDEO_DRIVER_UIKIT) + struct + { +#if defined(__OBJC__) && defined(__has_feature) + #if __has_feature(objc_arc) + UIWindow __unsafe_unretained *window; /**< The UIKit window */ + #else + UIWindow *window; /**< The UIKit window */ + #endif +#else + UIWindow *window; /**< The UIKit window */ +#endif + GLuint framebuffer; /**< The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */ + GLuint colorbuffer; /**< The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */ + GLuint resolveFramebuffer; /**< The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */ + } uikit; +#endif +#if defined(SDL_VIDEO_DRIVER_WAYLAND) + struct + { + struct wl_display *display; /**< Wayland display */ + struct wl_surface *surface; /**< Wayland surface */ + void *shell_surface; /**< DEPRECATED Wayland shell_surface (window manager handle) */ + struct wl_egl_window *egl_window; /**< Wayland EGL window (native window) */ + struct xdg_surface *xdg_surface; /**< Wayland xdg surface (window manager handle) */ + struct xdg_toplevel *xdg_toplevel; /**< Wayland xdg toplevel role */ + struct xdg_popup *xdg_popup; /**< Wayland xdg popup role */ + struct xdg_positioner *xdg_positioner; /**< Wayland xdg positioner, for popup */ + } wl; +#endif +#if defined(SDL_VIDEO_DRIVER_MIR) /* no longer available, left for API/ABI compatibility. Remove in 2.1! */ + struct + { + void *connection; /**< Mir display server connection */ + void *surface; /**< Mir surface */ + } mir; +#endif + +#if defined(SDL_VIDEO_DRIVER_ANDROID) + struct + { + ANativeWindow *window; + EGLSurface surface; + } android; +#endif + +#if defined(SDL_VIDEO_DRIVER_OS2) + struct + { + HWND hwnd; /**< The window handle */ + HWND hwndFrame; /**< The frame window handle */ + } os2; +#endif + +#if defined(SDL_VIDEO_DRIVER_VIVANTE) + struct + { + EGLNativeDisplayType display; + EGLNativeWindowType window; + } vivante; +#endif + +#if defined(SDL_VIDEO_DRIVER_KMSDRM) + struct + { + int dev_index; /**< Device index (ex: the X in /dev/dri/cardX) */ + int drm_fd; /**< DRM FD (unavailable on Vulkan windows) */ + struct gbm_device *gbm_dev; /**< GBM device (unavailable on Vulkan windows) */ + } kmsdrm; +#endif + + /* Make sure this union is always 64 bytes (8 64-bit pointers). */ + /* Be careful not to overflow this if you add a new target! */ + Uint8 dummy[64]; + } info; +}; + +#endif /* SDL_PROTOTYPES_ONLY */ + +typedef struct SDL_SysWMinfo SDL_SysWMinfo; + + +/** + * Get driver-specific information about a window. + * + * You must include SDL_syswm.h for the declaration of SDL_SysWMinfo. + * + * The caller must initialize the `info` structure's version by using + * `SDL_VERSION(&info.version)`, and then this function will fill in the rest + * of the structure with information about the given window. + * + * \param window the window about which information is being requested + * \param info an SDL_SysWMinfo structure filled in with window information + * \returns SDL_TRUE if the function is implemented and the `version` member + * of the `info` struct is valid, or SDL_FALSE if the information + * could not be retrieved; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window, + SDL_SysWMinfo * info); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_syswm_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_thread.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_thread.h new file mode 100644 index 00000000000..0a535c88fa3 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_thread.h @@ -0,0 +1,464 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_thread_h_ +#define SDL_thread_h_ + +/** + * \file SDL_thread.h + * + * Header for the SDL thread management routines. + */ + +#include +#include + +/* Thread synchronization primitives */ +#include +#include + +#if defined(__WIN32__) +#include /* _beginthreadex() and _endthreadex() */ +#endif +#if defined(__OS2__) /* for _beginthread() and _endthread() */ +#ifndef __EMX__ +#include +#else +#include +#endif +#endif + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* The SDL thread structure, defined in SDL_thread.c */ +struct SDL_Thread; +typedef struct SDL_Thread SDL_Thread; + +/* The SDL thread ID */ +typedef unsigned long SDL_threadID; + +/* Thread local storage ID, 0 is the invalid ID */ +typedef unsigned int SDL_TLSID; + +/** + * The SDL thread priority. + * + * SDL will make system changes as necessary in order to apply the thread priority. + * Code which attempts to control thread state related to priority should be aware + * that calling SDL_SetThreadPriority may alter such state. + * SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this behavior. + * + * \note On many systems you require special privileges to set high or time critical priority. + */ +typedef enum { + SDL_THREAD_PRIORITY_LOW, + SDL_THREAD_PRIORITY_NORMAL, + SDL_THREAD_PRIORITY_HIGH, + SDL_THREAD_PRIORITY_TIME_CRITICAL +} SDL_ThreadPriority; + +/** + * The function passed to SDL_CreateThread(). + * + * \param data what was passed as `data` to SDL_CreateThread() + * \returns a value that can be reported through SDL_WaitThread(). + */ +typedef int (SDLCALL * SDL_ThreadFunction) (void *data); + + +#if defined(__WIN32__) +/** + * \file SDL_thread.h + * + * We compile SDL into a DLL. This means, that it's the DLL which + * creates a new thread for the calling process with the SDL_CreateThread() + * API. There is a problem with this, that only the RTL of the SDL2.DLL will + * be initialized for those threads, and not the RTL of the calling + * application! + * + * To solve this, we make a little hack here. + * + * We'll always use the caller's _beginthread() and _endthread() APIs to + * start a new thread. This way, if it's the SDL2.DLL which uses this API, + * then the RTL of SDL2.DLL will be used to create the new thread, and if it's + * the application, then the RTL of the application will be used. + * + * So, in short: + * Always use the _beginthread() and _endthread() of the calling runtime + * library! + */ +#define SDL_PASSED_BEGINTHREAD_ENDTHREAD + +typedef uintptr_t (__cdecl * pfnSDL_CurrentBeginThread) + (void *, unsigned, unsigned (__stdcall *func)(void *), + void * /*arg*/, unsigned, unsigned * /* threadID */); +typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); + +#ifndef SDL_beginthread +#define SDL_beginthread _beginthreadex +#endif +#ifndef SDL_endthread +#define SDL_endthread _endthreadex +#endif + +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThreadWithStackSize(int (SDLCALL * fn) (void *), + const char *name, const size_t stacksize, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + + +#if defined(SDL_CreateThread) && SDL_DYNAMIC_API +#undef SDL_CreateThread +#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#undef SDL_CreateThreadWithStackSize +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#else +#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)SDL_endthread) +#endif + +#elif defined(__OS2__) +/* + * just like the windows case above: We compile SDL2 + * into a dll with Watcom's runtime statically linked. + */ +#define SDL_PASSED_BEGINTHREAD_ENDTHREAD + +typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void * /*arg*/); +typedef void (*pfnSDL_CurrentEndThread)(void); + +#ifndef SDL_beginthread +#define SDL_beginthread _beginthread +#endif +#ifndef SDL_endthread +#define SDL_endthread _endthread +#endif + +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + +#if defined(SDL_CreateThread) && SDL_DYNAMIC_API +#undef SDL_CreateThread +#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#undef SDL_CreateThreadWithStackSize +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#else +#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#endif + +#else + +/** + * Create a new thread with a default stack size. + * + * This is equivalent to calling: + * + * ```c + * SDL_CreateThreadWithStackSize(fn, name, 0, data); + * ``` + * + * \param fn the SDL_ThreadFunction function to call in the new thread + * \param name the name of the thread + * \param data a pointer that is passed to `fn` + * \returns an opaque pointer to the new thread object on success, NULL if the + * new thread could not be created; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateThreadWithStackSize + * \sa SDL_WaitThread + */ +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data); + +/** + * Create a new thread with a specific stack size. + * + * SDL makes an attempt to report `name` to the system, so that debuggers can + * display it. Not all platforms support this. + * + * Thread naming is a little complicated: Most systems have very small limits + * for the string length (Haiku has 32 bytes, Linux currently has 16, Visual + * C++ 6.0 has _nine_!), and possibly other arbitrary rules. You'll have to + * see what happens with your system's debugger. The name should be UTF-8 (but + * using the naming limits of C identifiers is a better bet). There are no + * requirements for thread naming conventions, so long as the string is + * null-terminated UTF-8, but these guidelines are helpful in choosing a name: + * + * https://stackoverflow.com/questions/149932/naming-conventions-for-threads + * + * If a system imposes requirements, SDL will try to munge the string for it + * (truncate, etc), but the original string contents will be available from + * SDL_GetThreadName(). + * + * The size (in bytes) of the new stack can be specified. Zero means "use the + * system default" which might be wildly different between platforms. x86 + * Linux generally defaults to eight megabytes, an embedded device might be a + * few kilobytes instead. You generally need to specify a stack that is a + * multiple of the system's page size (in many cases, this is 4 kilobytes, but + * check your system documentation). + * + * In SDL 2.1, stack size will be folded into the original SDL_CreateThread + * function, but for backwards compatibility, this is currently a separate + * function. + * + * \param fn the SDL_ThreadFunction function to call in the new thread + * \param name the name of the thread + * \param stacksize the size, in bytes, to allocate for the new thread stack. + * \param data a pointer that is passed to `fn` + * \returns an opaque pointer to the new thread object on success, NULL if the + * new thread could not be created; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_WaitThread + */ +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data); + +#endif + +/** + * Get the thread name as it was specified in SDL_CreateThread(). + * + * This is internal memory, not to be freed by the caller, and remains valid + * until the specified thread is cleaned up by SDL_WaitThread(). + * + * \param thread the thread to query + * \returns a pointer to a UTF-8 string that names the specified thread, or + * NULL if it doesn't have a name. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateThread + */ +extern DECLSPEC const char *SDLCALL SDL_GetThreadName(SDL_Thread *thread); + +/** + * Get the thread identifier for the current thread. + * + * This thread identifier is as reported by the underlying operating system. + * If SDL is running on a platform that does not support threads the return + * value will always be zero. + * + * This function also returns a valid thread ID when called from the main + * thread. + * + * \returns the ID of the current thread. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetThreadID + */ +extern DECLSPEC SDL_threadID SDLCALL SDL_ThreadID(void); + +/** + * Get the thread identifier for the specified thread. + * + * This thread identifier is as reported by the underlying operating system. + * If SDL is running on a platform that does not support threads the return + * value will always be zero. + * + * \param thread the thread to query + * \returns the ID of the specified thread, or the ID of the current thread if + * `thread` is NULL. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ThreadID + */ +extern DECLSPEC SDL_threadID SDLCALL SDL_GetThreadID(SDL_Thread * thread); + +/** + * Set the priority for the current thread. + * + * Note that some platforms will not let you alter the priority (or at least, + * promote the thread to a higher priority) at all, and some require you to be + * an administrator account. Be prepared for this to fail. + * + * \param priority the SDL_ThreadPriority to set + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_SetThreadPriority(SDL_ThreadPriority priority); + +/** + * Wait for a thread to finish. + * + * Threads that haven't been detached will remain (as a "zombie") until this + * function cleans them up. Not doing so is a resource leak. + * + * Once a thread has been cleaned up through this function, the SDL_Thread + * that references it becomes invalid and should not be referenced again. As + * such, only one thread may call SDL_WaitThread() on another. + * + * The return code for the thread function is placed in the area pointed to by + * `status`, if `status` is not NULL. + * + * You may not wait on a thread that has been used in a call to + * SDL_DetachThread(). Use either that function or this one, but not both, or + * behavior is undefined. + * + * It is safe to pass a NULL thread to this function; it is a no-op. + * + * Note that the thread pointer is freed by this function and is not valid + * afterward. + * + * \param thread the SDL_Thread pointer that was returned from the + * SDL_CreateThread() call that started this thread + * \param status pointer to an integer that will receive the value returned + * from the thread function by its 'return', or NULL to not + * receive such value back. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateThread + * \sa SDL_DetachThread + */ +extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread * thread, int *status); + +/** + * Let a thread clean up on exit without intervention. + * + * A thread may be "detached" to signify that it should not remain until + * another thread has called SDL_WaitThread() on it. Detaching a thread is + * useful for long-running threads that nothing needs to synchronize with or + * further manage. When a detached thread is done, it simply goes away. + * + * There is no way to recover the return code of a detached thread. If you + * need this, don't detach the thread and instead use SDL_WaitThread(). + * + * Once a thread is detached, you should usually assume the SDL_Thread isn't + * safe to reference again, as it will become invalid immediately upon the + * detached thread's exit, instead of remaining until someone has called + * SDL_WaitThread() to finally clean it up. As such, don't detach the same + * thread more than once. + * + * If a thread has already exited when passed to SDL_DetachThread(), it will + * stop waiting for a call to SDL_WaitThread() and clean up immediately. It is + * not safe to detach a thread that might be used with SDL_WaitThread(). + * + * You may not call SDL_WaitThread() on a thread that has been detached. Use + * either that function or this one, but not both, or behavior is undefined. + * + * It is safe to pass NULL to this function; it is a no-op. + * + * \param thread the SDL_Thread pointer that was returned from the + * SDL_CreateThread() call that started this thread + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_CreateThread + * \sa SDL_WaitThread + */ +extern DECLSPEC void SDLCALL SDL_DetachThread(SDL_Thread * thread); + +/** + * Create a piece of thread-local storage. + * + * This creates an identifier that is globally visible to all threads but + * refers to data that is thread-specific. + * + * \returns the newly created thread local storage identifier or 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TLSGet + * \sa SDL_TLSSet + */ +extern DECLSPEC SDL_TLSID SDLCALL SDL_TLSCreate(void); + +/** + * Get the current thread's value associated with a thread local storage ID. + * + * \param id the thread local storage ID + * \returns the value associated with the ID for the current thread or NULL if + * no value has been set; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TLSCreate + * \sa SDL_TLSSet + */ +extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id); + +/** + * Set the current thread's value associated with a thread local storage ID. + * + * The function prototype for `destructor` is: + * + * ```c + * void destructor(void *value) + * ``` + * + * where its parameter `value` is what was passed as `value` to SDL_TLSSet(). + * + * \param id the thread local storage ID + * \param value the value to associate with the ID for the current thread + * \param destructor a function called when the thread exits, to free the + * value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TLSCreate + * \sa SDL_TLSGet + */ +extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (SDLCALL *destructor)(void*)); + +/** + * Cleanup all TLS data for this thread. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC void SDLCALL SDL_TLSCleanup(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_thread_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_timer.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_timer.h new file mode 100644 index 00000000000..008e8e356c6 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_timer.h @@ -0,0 +1,222 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_timer_h_ +#define SDL_timer_h_ + +/** + * \file SDL_timer.h + * + * Header for the SDL time management routines. + */ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the number of milliseconds since SDL library initialization. + * + * This value wraps if the program runs for more than ~49 days. + * + * This function is not recommended as of SDL 2.0.18; use SDL_GetTicks64() + * instead, where the value doesn't wrap every ~49 days. There are places in + * SDL where we provide a 32-bit timestamp that can not change without + * breaking binary compatibility, though, so this function isn't officially + * deprecated. + * + * \returns an unsigned 32-bit value representing the number of milliseconds + * since the SDL library initialized. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TICKS_PASSED + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); + +/** + * Get the number of milliseconds since SDL library initialization. + * + * Note that you should not use the SDL_TICKS_PASSED macro with values + * returned by this function, as that macro does clever math to compensate for + * the 32-bit overflow every ~49 days that SDL_GetTicks() suffers from. 64-bit + * values from this function can be safely compared directly. + * + * For example, if you want to wait 100 ms, you could do this: + * + * ```c + * const Uint64 timeout = SDL_GetTicks64() + 100; + * while (SDL_GetTicks64() < timeout) { + * // ... do work until timeout has elapsed + * } + * ``` + * + * \returns an unsigned 64-bit value representing the number of milliseconds + * since the SDL library initialized. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetTicks64(void); + +/** + * Compare 32-bit SDL ticks values, and return true if `A` has passed `B`. + * + * This should be used with results from SDL_GetTicks(), as this macro + * attempts to deal with the 32-bit counter wrapping back to zero every ~49 + * days, but should _not_ be used with SDL_GetTicks64(), which does not have + * that problem. + * + * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could + * do this: + * + * ```c + * const Uint32 timeout = SDL_GetTicks() + 100; + * while (!SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) { + * // ... do work until timeout has elapsed + * } + * ``` + * + * Note that this does not handle tick differences greater + * than 2^31 so take care when using the above kind of code + * with large timeout delays (tens of days). + */ +#define SDL_TICKS_PASSED(A, B) ((Sint32)((B) - (A)) <= 0) + +/** + * Get the current value of the high resolution counter. + * + * This function is typically used for profiling. + * + * The counter values are only meaningful relative to each other. Differences + * between values can be converted to times by using + * SDL_GetPerformanceFrequency(). + * + * \returns the current counter value. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetPerformanceFrequency + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceCounter(void); + +/** + * Get the count per second of the high resolution counter. + * + * \returns a platform-specific count per second. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetPerformanceCounter + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void); + +/** + * Wait a specified number of milliseconds before returning. + * + * This function waits a specified number of milliseconds before returning. It + * waits at least the specified time, but possibly longer due to OS + * scheduling. + * + * \param ms the number of milliseconds to delay + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); + +/** + * Function prototype for the timer callback function. + * + * The callback function is passed the current timer interval and returns + * the next timer interval. If the returned value is the same as the one + * passed in, the periodic alarm continues, otherwise a new alarm is + * scheduled. If the callback returns 0, the periodic alarm is cancelled. + */ +typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param); + +/** + * Definition of the timer ID type. + */ +typedef int SDL_TimerID; + +/** + * Call a callback function at a future time. + * + * If you use this function, you must pass `SDL_INIT_TIMER` to SDL_Init(). + * + * The callback function is passed the current timer interval and the user + * supplied parameter from the SDL_AddTimer() call and should return the next + * timer interval. If the value returned from the callback is 0, the timer is + * canceled. + * + * The callback is run on a separate thread. + * + * Timers take into account the amount of time it took to execute the + * callback. For example, if the callback took 250 ms to execute and returned + * 1000 (ms), the timer would only wait another 750 ms before its next + * iteration. + * + * Timing may be inexact due to OS scheduling. Be sure to note the current + * time with SDL_GetTicks() or SDL_GetPerformanceCounter() in case your + * callback needs to adjust for variances. + * + * \param interval the timer delay, in milliseconds, passed to `callback` + * \param callback the SDL_TimerCallback function to call when the specified + * `interval` elapses + * \param param a pointer that is passed to `callback` + * \returns a timer ID or 0 if an error occurs; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RemoveTimer + */ +extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, + SDL_TimerCallback callback, + void *param); + +/** + * Remove a timer created with SDL_AddTimer(). + * + * \param id the ID of the timer to remove + * \returns SDL_TRUE if the timer is removed or SDL_FALSE if the timer wasn't + * found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddTimer + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID id); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_timer_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_touch.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_touch.h new file mode 100644 index 00000000000..c7202981b91 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_touch.h @@ -0,0 +1,150 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_touch.h + * + * Include file for SDL touch event handling. + */ + +#ifndef SDL_touch_h_ +#define SDL_touch_h_ + +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef Sint64 SDL_TouchID; +typedef Sint64 SDL_FingerID; + +typedef enum +{ + SDL_TOUCH_DEVICE_INVALID = -1, + SDL_TOUCH_DEVICE_DIRECT, /* touch screen with window-relative coordinates */ + SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE, /* trackpad with absolute device coordinates */ + SDL_TOUCH_DEVICE_INDIRECT_RELATIVE /* trackpad with screen cursor-relative coordinates */ +} SDL_TouchDeviceType; + +typedef struct SDL_Finger +{ + SDL_FingerID id; + float x; + float y; + float pressure; +} SDL_Finger; + +/* Used as the device ID for mouse events simulated with touch input */ +#define SDL_TOUCH_MOUSEID ((Uint32)-1) + +/* Used as the SDL_TouchID for touch events simulated with mouse input */ +#define SDL_MOUSE_TOUCHID ((Sint64)-1) + + +/** + * Get the number of registered touch devices. + * + * On some platforms SDL first sees the touch device if it was actually used. + * Therefore SDL_GetNumTouchDevices() may return 0 although devices are + * available. After using all devices at least once the number will be + * correct. + * + * This was fixed for Android in SDL 2.0.1. + * + * \returns the number of registered touch devices. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTouchDevice + */ +extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void); + +/** + * Get the touch ID with the given index. + * + * \param index the touch device index + * \returns the touch ID with the given index on success or 0 if the index is + * invalid; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumTouchDevices + */ +extern DECLSPEC SDL_TouchID SDLCALL SDL_GetTouchDevice(int index); + +/** + * Get the touch device name as reported from the driver or NULL if the index + * is invalid. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC const char* SDLCALL SDL_GetTouchName(int index); + +/** + * Get the type of the given touch device. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC SDL_TouchDeviceType SDLCALL SDL_GetTouchDeviceType(SDL_TouchID touchID); + +/** + * Get the number of active fingers for a given touch device. + * + * \param touchID the ID of a touch device + * \returns the number of active fingers for a given touch device on success + * or 0 on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTouchFinger + */ +extern DECLSPEC int SDLCALL SDL_GetNumTouchFingers(SDL_TouchID touchID); + +/** + * Get the finger object for specified touch device ID and finger index. + * + * The returned resource is owned by SDL and should not be deallocated. + * + * \param touchID the ID of the requested touch device + * \param index the index of the requested finger + * \returns a pointer to the SDL_Finger object or NULL if no object at the + * given ID and index could be found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RecordGesture + */ +extern DECLSPEC SDL_Finger * SDLCALL SDL_GetTouchFinger(SDL_TouchID touchID, int index); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_touch_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_types.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_types.h new file mode 100644 index 00000000000..afd55e8a32a --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_types.h @@ -0,0 +1,29 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_types.h + * + * \deprecated + */ + +/* DEPRECATED */ +#include diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_version.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_version.h new file mode 100644 index 00000000000..e374f0e17a0 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_version.h @@ -0,0 +1,188 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_version.h + * + * This header defines the current SDL version. + */ + +#ifndef SDL_version_h_ +#define SDL_version_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Information about the version of SDL in use. + * + * Represents the library's version as three levels: major revision + * (increments with massive changes, additions, and enhancements), + * minor revision (increments with backwards-compatible changes to the + * major revision), and patchlevel (increments with fixes to the minor + * revision). + * + * \sa SDL_VERSION + * \sa SDL_GetVersion + */ +typedef struct SDL_version +{ + Uint8 major; /**< major version */ + Uint8 minor; /**< minor version */ + Uint8 patch; /**< update version */ +} SDL_version; + +/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL +*/ +#define SDL_MAJOR_VERSION 2 +#define SDL_MINOR_VERSION 0 +#define SDL_PATCHLEVEL 22 + +/** + * Macro to determine SDL version program was compiled against. + * + * This macro fills in a SDL_version structure with the version of the + * library you compiled against. This is determined by what header the + * compiler uses. Note that if you dynamically linked the library, you might + * have a slightly newer or older version at runtime. That version can be + * determined with SDL_GetVersion(), which, unlike SDL_VERSION(), + * is not a macro. + * + * \param x A pointer to a SDL_version struct to initialize. + * + * \sa SDL_version + * \sa SDL_GetVersion + */ +#define SDL_VERSION(x) \ +{ \ + (x)->major = SDL_MAJOR_VERSION; \ + (x)->minor = SDL_MINOR_VERSION; \ + (x)->patch = SDL_PATCHLEVEL; \ +} + +/** + * This macro turns the version numbers into a numeric value: + * \verbatim + (1,2,3) -> (1203) + \endverbatim + * + * This assumes that there will never be more than 100 patchlevels. + */ +#define SDL_VERSIONNUM(X, Y, Z) \ + ((X)*1000 + (Y)*100 + (Z)) + +/** + * This is the version number macro for the current SDL version. + */ +#define SDL_COMPILEDVERSION \ + SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) + +/** + * This macro will evaluate to true if compiled with SDL at least X.Y.Z. + */ +#define SDL_VERSION_ATLEAST(X, Y, Z) \ + (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) + +/** + * Get the version of SDL that is linked against your program. + * + * If you are linking to SDL dynamically, then it is possible that the current + * version will be different than the version you compiled against. This + * function returns the current version, while SDL_VERSION() is a macro that + * tells you what version you compiled with. + * + * This function may be called safely at any time, even before SDL_Init(). + * + * \param ver the SDL_version structure that contains the version information + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRevision + */ +extern DECLSPEC void SDLCALL SDL_GetVersion(SDL_version * ver); + +/** + * Get the code revision of SDL that is linked against your program. + * + * This value is the revision of the code you are linked with and may be + * different from the code you are compiling with, which is found in the + * constant SDL_REVISION. + * + * The revision is arbitrary string (a hash value) uniquely identifying the + * exact revision of the SDL library in use, and is only useful in comparing + * against other revisions. It is NOT an incrementing number. + * + * If SDL wasn't built from a git repository with the appropriate tools, this + * will return an empty string. + * + * Prior to SDL 2.0.16, before development moved to GitHub, this returned a + * hash for a Mercurial repository. + * + * You shouldn't use this function for anything but logging it for debugging + * purposes. The string is not intended to be reliable in any way. + * + * \returns an arbitrary string, uniquely identifying the exact revision of + * the SDL library in use. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetVersion + */ +extern DECLSPEC const char *SDLCALL SDL_GetRevision(void); + +/** + * Obsolete function, do not use. + * + * When SDL was hosted in a Mercurial repository, and was built carefully, + * this would return the revision number that the build was created from. This + * number was not reliable for several reasons, but more importantly, SDL is + * now hosted in a git repository, which does not offer numbers at all, only + * hashes. This function only ever returns zero now. Don't use it. + * + * Before SDL 2.0.16, this might have returned an unreliable, but non-zero + * number. + * + * \deprecated Use SDL_GetRevision() instead; if SDL was carefully built, it + * will return a git hash. + * + * \returns zero, always, in modern SDL releases. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRevision + */ +extern SDL_DEPRECATED DECLSPEC int SDLCALL SDL_GetRevisionNumber(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_version_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_video.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_video.h new file mode 100644 index 00000000000..90fe7121377 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_video.h @@ -0,0 +1,2089 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_video.h + * + * Header file for SDL video functions. + */ + +#ifndef SDL_video_h_ +#define SDL_video_h_ + +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The structure that defines a display mode + * + * \sa SDL_GetNumDisplayModes() + * \sa SDL_GetDisplayMode() + * \sa SDL_GetDesktopDisplayMode() + * \sa SDL_GetCurrentDisplayMode() + * \sa SDL_GetClosestDisplayMode() + * \sa SDL_SetWindowDisplayMode() + * \sa SDL_GetWindowDisplayMode() + */ +typedef struct +{ + Uint32 format; /**< pixel format */ + int w; /**< width, in screen coordinates */ + int h; /**< height, in screen coordinates */ + int refresh_rate; /**< refresh rate (or zero for unspecified) */ + void *driverdata; /**< driver-specific data, initialize to 0 */ +} SDL_DisplayMode; + +/** + * \brief The type used to identify a window + * + * \sa SDL_CreateWindow() + * \sa SDL_CreateWindowFrom() + * \sa SDL_DestroyWindow() + * \sa SDL_FlashWindow() + * \sa SDL_GetWindowData() + * \sa SDL_GetWindowFlags() + * \sa SDL_GetWindowGrab() + * \sa SDL_GetWindowKeyboardGrab() + * \sa SDL_GetWindowMouseGrab() + * \sa SDL_GetWindowPosition() + * \sa SDL_GetWindowSize() + * \sa SDL_GetWindowTitle() + * \sa SDL_HideWindow() + * \sa SDL_MaximizeWindow() + * \sa SDL_MinimizeWindow() + * \sa SDL_RaiseWindow() + * \sa SDL_RestoreWindow() + * \sa SDL_SetWindowData() + * \sa SDL_SetWindowFullscreen() + * \sa SDL_SetWindowGrab() + * \sa SDL_SetWindowKeyboardGrab() + * \sa SDL_SetWindowMouseGrab() + * \sa SDL_SetWindowIcon() + * \sa SDL_SetWindowPosition() + * \sa SDL_SetWindowSize() + * \sa SDL_SetWindowBordered() + * \sa SDL_SetWindowResizable() + * \sa SDL_SetWindowTitle() + * \sa SDL_ShowWindow() + */ +typedef struct SDL_Window SDL_Window; + +/** + * \brief The flags on a window + * + * \sa SDL_GetWindowFlags() + */ +typedef enum +{ + SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */ + SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ + SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */ + SDL_WINDOW_HIDDEN = 0x00000008, /**< window is not visible */ + SDL_WINDOW_BORDERLESS = 0x00000010, /**< no window decoration */ + SDL_WINDOW_RESIZABLE = 0x00000020, /**< window can be resized */ + SDL_WINDOW_MINIMIZED = 0x00000040, /**< window is minimized */ + SDL_WINDOW_MAXIMIZED = 0x00000080, /**< window is maximized */ + SDL_WINDOW_MOUSE_GRABBED = 0x00000100, /**< window has grabbed mouse input */ + SDL_WINDOW_INPUT_FOCUS = 0x00000200, /**< window has input focus */ + SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */ + SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), + SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */ + SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported. + On macOS NSHighResolutionCapable must be set true in the + application's Info.plist for this to have any effect. */ + SDL_WINDOW_MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to MOUSE_GRABBED) */ + SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */ + SDL_WINDOW_SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */ + SDL_WINDOW_UTILITY = 0x00020000, /**< window should be treated as a utility window */ + SDL_WINDOW_TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */ + SDL_WINDOW_POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */ + SDL_WINDOW_KEYBOARD_GRABBED = 0x00100000, /**< window has grabbed keyboard input */ + SDL_WINDOW_VULKAN = 0x10000000, /**< window usable for Vulkan surface */ + SDL_WINDOW_METAL = 0x20000000, /**< window usable for Metal view */ + + SDL_WINDOW_INPUT_GRABBED = SDL_WINDOW_MOUSE_GRABBED /**< equivalent to SDL_WINDOW_MOUSE_GRABBED for compatibility */ +} SDL_WindowFlags; + +/** + * \brief Used to indicate that you don't care what the window position is. + */ +#define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000u +#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X)) +#define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0) +#define SDL_WINDOWPOS_ISUNDEFINED(X) \ + (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK) + +/** + * \brief Used to indicate that the window position should be centered. + */ +#define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000u +#define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X)) +#define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0) +#define SDL_WINDOWPOS_ISCENTERED(X) \ + (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK) + +/** + * \brief Event subtype for window events + */ +typedef enum +{ + SDL_WINDOWEVENT_NONE, /**< Never used */ + SDL_WINDOWEVENT_SHOWN, /**< Window has been shown */ + SDL_WINDOWEVENT_HIDDEN, /**< Window has been hidden */ + SDL_WINDOWEVENT_EXPOSED, /**< Window has been exposed and should be + redrawn */ + SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1, data2 + */ + SDL_WINDOWEVENT_RESIZED, /**< Window has been resized to data1xdata2 */ + SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as + a result of an API call or through the + system or user changing the window size. */ + SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */ + SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */ + SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size + and position */ + SDL_WINDOWEVENT_ENTER, /**< Window has gained mouse focus */ + SDL_WINDOWEVENT_LEAVE, /**< Window has lost mouse focus */ + SDL_WINDOWEVENT_FOCUS_GAINED, /**< Window has gained keyboard focus */ + SDL_WINDOWEVENT_FOCUS_LOST, /**< Window has lost keyboard focus */ + SDL_WINDOWEVENT_CLOSE, /**< The window manager requests that the window be closed */ + SDL_WINDOWEVENT_TAKE_FOCUS, /**< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) */ + SDL_WINDOWEVENT_HIT_TEST, /**< Window had a hit test that wasn't SDL_HITTEST_NORMAL. */ + SDL_WINDOWEVENT_ICCPROF_CHANGED,/**< The ICC profile of the window's display has changed. */ + SDL_WINDOWEVENT_DISPLAY_CHANGED /**< Window has been moved to display data1. */ +} SDL_WindowEventID; + +/** + * \brief Event subtype for display events + */ +typedef enum +{ + SDL_DISPLAYEVENT_NONE, /**< Never used */ + SDL_DISPLAYEVENT_ORIENTATION, /**< Display orientation has changed to data1 */ + SDL_DISPLAYEVENT_CONNECTED, /**< Display has been added to the system */ + SDL_DISPLAYEVENT_DISCONNECTED /**< Display has been removed from the system */ +} SDL_DisplayEventID; + +/** + * \brief Display orientation + */ +typedef enum +{ + SDL_ORIENTATION_UNKNOWN, /**< The display orientation can't be determined */ + SDL_ORIENTATION_LANDSCAPE, /**< The display is in landscape mode, with the right side up, relative to portrait mode */ + SDL_ORIENTATION_LANDSCAPE_FLIPPED, /**< The display is in landscape mode, with the left side up, relative to portrait mode */ + SDL_ORIENTATION_PORTRAIT, /**< The display is in portrait mode */ + SDL_ORIENTATION_PORTRAIT_FLIPPED /**< The display is in portrait mode, upside down */ +} SDL_DisplayOrientation; + +/** + * \brief Window flash operation + */ +typedef enum +{ + SDL_FLASH_CANCEL, /**< Cancel any window flash state */ + SDL_FLASH_BRIEFLY, /**< Flash the window briefly to get attention */ + SDL_FLASH_UNTIL_FOCUSED /**< Flash the window until it gets focus */ +} SDL_FlashOperation; + +/** + * \brief An opaque handle to an OpenGL context. + */ +typedef void *SDL_GLContext; + +/** + * \brief OpenGL configuration attributes + */ +typedef enum +{ + SDL_GL_RED_SIZE, + SDL_GL_GREEN_SIZE, + SDL_GL_BLUE_SIZE, + SDL_GL_ALPHA_SIZE, + SDL_GL_BUFFER_SIZE, + SDL_GL_DOUBLEBUFFER, + SDL_GL_DEPTH_SIZE, + SDL_GL_STENCIL_SIZE, + SDL_GL_ACCUM_RED_SIZE, + SDL_GL_ACCUM_GREEN_SIZE, + SDL_GL_ACCUM_BLUE_SIZE, + SDL_GL_ACCUM_ALPHA_SIZE, + SDL_GL_STEREO, + SDL_GL_MULTISAMPLEBUFFERS, + SDL_GL_MULTISAMPLESAMPLES, + SDL_GL_ACCELERATED_VISUAL, + SDL_GL_RETAINED_BACKING, + SDL_GL_CONTEXT_MAJOR_VERSION, + SDL_GL_CONTEXT_MINOR_VERSION, + SDL_GL_CONTEXT_EGL, + SDL_GL_CONTEXT_FLAGS, + SDL_GL_CONTEXT_PROFILE_MASK, + SDL_GL_SHARE_WITH_CURRENT_CONTEXT, + SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, + SDL_GL_CONTEXT_RELEASE_BEHAVIOR, + SDL_GL_CONTEXT_RESET_NOTIFICATION, + SDL_GL_CONTEXT_NO_ERROR +} SDL_GLattr; + +typedef enum +{ + SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, + SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, + SDL_GL_CONTEXT_PROFILE_ES = 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */ +} SDL_GLprofile; + +typedef enum +{ + SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001, + SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002, + SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = 0x0004, + SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008 +} SDL_GLcontextFlag; + +typedef enum +{ + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = 0x0000, + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001 +} SDL_GLcontextReleaseFlag; + +typedef enum +{ + SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000, + SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = 0x0001 +} SDL_GLContextResetNotification; + +/* Function prototypes */ + +/** + * Get the number of video drivers compiled into SDL. + * + * \returns a number >= 1 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetVideoDriver + */ +extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void); + +/** + * Get the name of a built in video driver. + * + * The video drivers are presented in the order in which they are normally + * checked during initialization. + * + * \param index the index of a video driver + * \returns the name of the video driver with the given **index**. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDrivers + */ +extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index); + +/** + * Initialize the video subsystem, optionally specifying a video driver. + * + * This function initializes the video subsystem, setting up a connection to + * the window manager, etc, and determines the available display modes and + * pixel formats, but does not initialize a window or graphics mode. + * + * If you use this function and you haven't used the SDL_INIT_VIDEO flag with + * either SDL_Init() or SDL_InitSubSystem(), you should call SDL_VideoQuit() + * before calling SDL_Quit(). + * + * It is safe to call this function multiple times. SDL_VideoInit() will call + * SDL_VideoQuit() itself if the video subsystem has already been initialized. + * + * You can use SDL_GetNumVideoDrivers() and SDL_GetVideoDriver() to find a + * specific `driver_name`. + * + * \param driver_name the name of a video driver to initialize, or NULL for + * the default driver + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDrivers + * \sa SDL_GetVideoDriver + * \sa SDL_InitSubSystem + * \sa SDL_VideoQuit + */ +extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name); + +/** + * Shut down the video subsystem, if initialized with SDL_VideoInit(). + * + * This function closes all windows, and restores the original video mode. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_VideoInit + */ +extern DECLSPEC void SDLCALL SDL_VideoQuit(void); + +/** + * Get the name of the currently initialized video driver. + * + * \returns the name of the current video driver or NULL if no driver has been + * initialized. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDrivers + * \sa SDL_GetVideoDriver + */ +extern DECLSPEC const char *SDLCALL SDL_GetCurrentVideoDriver(void); + +/** + * Get the number of available video displays. + * + * \returns a number >= 1 or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayBounds + */ +extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void); + +/** + * Get the name of a display in UTF-8 encoding. + * + * \param displayIndex the index of display from which the name should be + * queried + * \returns the name of a display or NULL for an invalid display index or + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex); + +/** + * Get the desktop area represented by a display. + * + * The primary display (`displayIndex` zero) is always located at 0,0. + * + * \param displayIndex the index of the display to query + * \param rect the SDL_Rect structure filled in with the display bounds + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect); + +/** + * Get the usable desktop area represented by a display. + * + * The primary display (`displayIndex` zero) is always located at 0,0. + * + * This is the same area as SDL_GetDisplayBounds() reports, but with portions + * reserved by the system removed. For example, on Apple's macOS, this + * subtracts the area occupied by the menu bar and dock. + * + * Setting a window to be fullscreen generally bypasses these unusable areas, + * so these are good guidelines for the maximum space available to a + * non-fullscreen window. + * + * The parameter `rect` is ignored if it is NULL. + * + * This function also returns -1 if the parameter `displayIndex` is out of + * range. + * + * \param displayIndex the index of the display to query the usable bounds + * from + * \param rect the SDL_Rect structure filled in with the display bounds + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetDisplayBounds + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect * rect); + +/** + * Get the dots/pixels-per-inch for a display. + * + * Diagonal, horizontal and vertical DPI can all be optionally returned if the + * appropriate parameter is non-NULL. + * + * A failure of this function usually means that either no DPI information is + * available or the `displayIndex` is out of range. + * + * \param displayIndex the index of the display from which DPI information + * should be queried + * \param ddpi a pointer filled in with the diagonal DPI of the display; may + * be NULL + * \param hdpi a pointer filled in with the horizontal DPI of the display; may + * be NULL + * \param vdpi a pointer filled in with the vertical DPI of the display; may + * be NULL + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi); + +/** + * Get the orientation of a display. + * + * \param displayIndex the index of the display to query + * \returns The SDL_DisplayOrientation enum value of the display, or + * `SDL_ORIENTATION_UNKNOWN` if it isn't available. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC SDL_DisplayOrientation SDLCALL SDL_GetDisplayOrientation(int displayIndex); + +/** + * Get the number of available display modes. + * + * The `displayIndex` needs to be in the range from 0 to + * SDL_GetNumVideoDisplays() - 1. + * + * \param displayIndex the index of the display to query + * \returns a number >= 1 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayMode + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(int displayIndex); + +/** + * Get information about a specific display mode. + * + * The display modes are sorted in this priority: + * + * - width -> largest to smallest + * - height -> largest to smallest + * - bits per pixel -> more colors to fewer colors + * - packed pixel layout -> largest to smallest + * - refresh rate -> highest to lowest + * + * \param displayIndex the index of the display to query + * \param modeIndex the index of the display mode to query + * \param mode an SDL_DisplayMode structure filled in with the mode at + * `modeIndex` + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumDisplayModes + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int displayIndex, int modeIndex, + SDL_DisplayMode * mode); + +/** + * Get information about the desktop's display mode. + * + * There's a difference between this function and SDL_GetCurrentDisplayMode() + * when SDL runs fullscreen and has changed the resolution. In that case this + * function will return the previous native display mode, and not the current + * display mode. + * + * \param displayIndex the index of the display to query + * \param mode an SDL_DisplayMode structure filled in with the current display + * mode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetCurrentDisplayMode + * \sa SDL_GetDisplayMode + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode * mode); + +/** + * Get information about the current display mode. + * + * There's a difference between this function and SDL_GetDesktopDisplayMode() + * when SDL runs fullscreen and has changed the resolution. In that case this + * function will return the current display mode, and not the previous native + * display mode. + * + * \param displayIndex the index of the display to query + * \param mode an SDL_DisplayMode structure filled in with the current display + * mode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDesktopDisplayMode + * \sa SDL_GetDisplayMode + * \sa SDL_GetNumVideoDisplays + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode * mode); + + +/** + * Get the closest match to the requested display mode. + * + * The available display modes are scanned and `closest` is filled in with the + * closest mode matching the requested mode and returned. The mode format and + * refresh rate default to the desktop mode if they are set to 0. The modes + * are scanned with size being first priority, format being second priority, + * and finally checking the refresh rate. If all the available modes are too + * small, then NULL is returned. + * + * \param displayIndex the index of the display to query + * \param mode an SDL_DisplayMode structure containing the desired display + * mode + * \param closest an SDL_DisplayMode structure filled in with the closest + * match of the available display modes + * \returns the passed in value `closest` or NULL if no matching video mode + * was available; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayMode + * \sa SDL_GetNumDisplayModes + */ +extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest); + +/** + * Get the index of the display associated with a window. + * + * \param window the window to query + * \returns the index of the display containing the center of the window on + * success or a negative error code on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayBounds + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetWindowDisplayIndex(SDL_Window * window); + +/** + * Set the display mode to use when a window is visible at fullscreen. + * + * This only affects the display mode used when the window is fullscreen. To + * change the window size when the window is not fullscreen, use + * SDL_SetWindowSize(). + * + * \param window the window to affect + * \param mode the SDL_DisplayMode structure representing the mode to use, or + * NULL to use the window's dimensions and the desktop's format + * and refresh rate + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowDisplayMode + * \sa SDL_SetWindowFullscreen + */ +extern DECLSPEC int SDLCALL SDL_SetWindowDisplayMode(SDL_Window * window, + const SDL_DisplayMode * mode); + +/** + * Query the display mode to use when a window is visible at fullscreen. + * + * \param window the window to query + * \param mode an SDL_DisplayMode structure filled in with the fullscreen + * display mode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowDisplayMode + * \sa SDL_SetWindowFullscreen + */ +extern DECLSPEC int SDLCALL SDL_GetWindowDisplayMode(SDL_Window * window, + SDL_DisplayMode * mode); + +/** + * Get the raw ICC profile data for the screen the window is currently on. + * + * Data returned should be freed with SDL_free. + * + * \param window the window to query + * \param size the size of the ICC profile + * \returns the raw ICC profile data on success or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void* SDLCALL SDL_GetWindowICCProfile(SDL_Window * window, size_t* size); + +/** + * Get the pixel format associated with the window. + * + * \param window the window to query + * \returns the pixel format of the window on success or + * SDL_PIXELFORMAT_UNKNOWN on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); + +/** + * Create a window with the specified position, dimensions, and flags. + * + * `flags` may be any of the following OR'd together: + * + * - `SDL_WINDOW_FULLSCREEN`: fullscreen window + * - `SDL_WINDOW_FULLSCREEN_DESKTOP`: fullscreen window at desktop resolution + * - `SDL_WINDOW_OPENGL`: window usable with an OpenGL context + * - `SDL_WINDOW_VULKAN`: window usable with a Vulkan instance + * - `SDL_WINDOW_METAL`: window usable with a Metal instance + * - `SDL_WINDOW_HIDDEN`: window is not visible + * - `SDL_WINDOW_BORDERLESS`: no window decoration + * - `SDL_WINDOW_RESIZABLE`: window can be resized + * - `SDL_WINDOW_MINIMIZED`: window is minimized + * - `SDL_WINDOW_MAXIMIZED`: window is maximized + * - `SDL_WINDOW_INPUT_GRABBED`: window has grabbed input focus + * - `SDL_WINDOW_ALLOW_HIGHDPI`: window should be created in high-DPI mode if + * supported (>= SDL 2.0.1) + * + * `SDL_WINDOW_SHOWN` is ignored by SDL_CreateWindow(). The SDL_Window is + * implicitly shown if SDL_WINDOW_HIDDEN is not set. `SDL_WINDOW_SHOWN` may be + * queried later using SDL_GetWindowFlags(). + * + * On Apple's macOS, you **must** set the NSHighResolutionCapable Info.plist + * property to YES, otherwise you will not receive a High-DPI OpenGL canvas. + * + * If the window is created with the `SDL_WINDOW_ALLOW_HIGHDPI` flag, its size + * in pixels may differ from its size in screen coordinates on platforms with + * high-DPI support (e.g. iOS and macOS). Use SDL_GetWindowSize() to query the + * client area's size in screen coordinates, and SDL_GL_GetDrawableSize() or + * SDL_GetRendererOutputSize() to query the drawable size in pixels. + * + * If the window is set fullscreen, the width and height parameters `w` and + * `h` will not be used. However, invalid size parameters (e.g. too large) may + * still fail. Window size is actually limited to 16384 x 16384 for all + * platforms at window creation. + * + * If the window is created with any of the SDL_WINDOW_OPENGL or + * SDL_WINDOW_VULKAN flags, then the corresponding LoadLibrary function + * (SDL_GL_LoadLibrary or SDL_Vulkan_LoadLibrary) is called and the + * corresponding UnloadLibrary function is called by SDL_DestroyWindow(). + * + * If SDL_WINDOW_VULKAN is specified and there isn't a working Vulkan driver, + * SDL_CreateWindow() will fail because SDL_Vulkan_LoadLibrary() will fail. + * + * If SDL_WINDOW_METAL is specified on an OS that does not support Metal, + * SDL_CreateWindow() will fail. + * + * On non-Apple devices, SDL requires you to either not link to the Vulkan + * loader or link to a dynamic library version. This limitation may be removed + * in a future version of SDL. + * + * \param title the title of the window, in UTF-8 encoding + * \param x the x position of the window, `SDL_WINDOWPOS_CENTERED`, or + * `SDL_WINDOWPOS_UNDEFINED` + * \param y the y position of the window, `SDL_WINDOWPOS_CENTERED`, or + * `SDL_WINDOWPOS_UNDEFINED` + * \param w the width of the window, in screen coordinates + * \param h the height of the window, in screen coordinates + * \param flags 0, or one or more SDL_WindowFlags OR'd together + * \returns the window that was created or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindowFrom + * \sa SDL_DestroyWindow + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, + int x, int y, int w, + int h, Uint32 flags); + +/** + * Create an SDL window from an existing native window. + * + * In some cases (e.g. OpenGL) and on some platforms (e.g. Microsoft Windows) + * the hint `SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT` needs to be configured + * before using SDL_CreateWindowFrom(). + * + * \param data a pointer to driver-dependent window creation data, typically + * your native window cast to a void* + * \returns the window that was created or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindow + * \sa SDL_DestroyWindow + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowFrom(const void *data); + +/** + * Get the numeric ID of a window. + * + * The numeric ID is what SDL_WindowEvent references, and is necessary to map + * these events to specific SDL_Window objects. + * + * \param window the window to query + * \returns the ID of the window on success or 0 on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowFromID + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowID(SDL_Window * window); + +/** + * Get a window from a stored ID. + * + * The numeric ID is what SDL_WindowEvent references, and is necessary to map + * these events to specific SDL_Window objects. + * + * \param id the ID of the window + * \returns the window associated with `id` or NULL if it doesn't exist; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowID + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(Uint32 id); + +/** + * Get the window flags. + * + * \param window the window to query + * \returns a mask of the SDL_WindowFlags associated with `window` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindow + * \sa SDL_HideWindow + * \sa SDL_MaximizeWindow + * \sa SDL_MinimizeWindow + * \sa SDL_SetWindowFullscreen + * \sa SDL_SetWindowGrab + * \sa SDL_ShowWindow + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_Window * window); + +/** + * Set the title of a window. + * + * This string is expected to be in UTF-8 encoding. + * + * \param window the window to change + * \param title the desired window title in UTF-8 format + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowTitle + */ +extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_Window * window, + const char *title); + +/** + * Get the title of a window. + * + * \param window the window to query + * \returns the title of the window in UTF-8 format or "" if there is no + * title. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowTitle + */ +extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_Window * window); + +/** + * Set the icon for a window. + * + * \param window the window to change + * \param icon an SDL_Surface structure containing the icon for the window + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window, + SDL_Surface * icon); + +/** + * Associate an arbitrary named pointer with a window. + * + * `name` is case-sensitive. + * + * \param window the window to associate with the pointer + * \param name the name of the pointer + * \param userdata the associated pointer + * \returns the previous value associated with `name`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowData + */ +extern DECLSPEC void* SDLCALL SDL_SetWindowData(SDL_Window * window, + const char *name, + void *userdata); + +/** + * Retrieve the data pointer associated with a window. + * + * \param window the window to query + * \param name the name of the pointer + * \returns the value associated with `name`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowData + */ +extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window, + const char *name); + +/** + * Set the position of a window. + * + * The window coordinate origin is the upper left of the display. + * + * \param window the window to reposition + * \param x the x coordinate of the window in screen coordinates, or + * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED` + * \param y the y coordinate of the window in screen coordinates, or + * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowPosition + */ +extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window, + int x, int y); + +/** + * Get the position of a window. + * + * If you do not need the value for one of the positions a NULL may be passed + * in the `x` or `y` parameter. + * + * \param window the window to query + * \param x a pointer filled in with the x position of the window, in screen + * coordinates, may be NULL + * \param y a pointer filled in with the y position of the window, in screen + * coordinates, may be NULL + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowPosition + */ +extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window, + int *x, int *y); + +/** + * Set the size of a window's client area. + * + * The window size in screen coordinates may differ from the size in pixels, + * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform + * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize() or + * SDL_GetRendererOutputSize() to get the real client area size in pixels. + * + * Fullscreen windows automatically match the size of the display mode, and + * you should use SDL_SetWindowDisplayMode() to change their size. + * + * \param window the window to change + * \param w the width of the window in pixels, in screen coordinates, must be + * > 0 + * \param h the height of the window in pixels, in screen coordinates, must be + * > 0 + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowSize + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, + int h); + +/** + * Get the size of a window's client area. + * + * NULL can safely be passed as the `w` or `h` parameter if the width or + * height value is not desired. + * + * The window size in screen coordinates may differ from the size in pixels, + * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform + * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize(), + * SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to get the + * real client area size in pixels. + * + * \param window the window to query the width and height from + * \param w a pointer filled in with the width of the window, in screen + * coordinates, may be NULL + * \param h a pointer filled in with the height of the window, in screen + * coordinates, may be NULL + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetDrawableSize + * \sa SDL_Vulkan_GetDrawableSize + * \sa SDL_SetWindowSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w, + int *h); + +/** + * Get the size of a window's borders (decorations) around the client area. + * + * Note: If this function fails (returns -1), the size values will be + * initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as if the + * window in question was borderless. + * + * Note: This function may fail on systems where the window has not yet been + * decorated by the display server (for example, immediately after calling + * SDL_CreateWindow). It is recommended that you wait at least until the + * window has been presented and composited, so that the window system has a + * chance to decorate the window and provide the border dimensions to SDL. + * + * This function also returns -1 if getting the information is not supported. + * + * \param window the window to query the size values of the border + * (decorations) from + * \param top pointer to variable for storing the size of the top border; NULL + * is permitted + * \param left pointer to variable for storing the size of the left border; + * NULL is permitted + * \param bottom pointer to variable for storing the size of the bottom + * border; NULL is permitted + * \param right pointer to variable for storing the size of the right border; + * NULL is permitted + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetWindowSize + */ +extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window, + int *top, int *left, + int *bottom, int *right); + +/** + * Set the minimum size of a window's client area. + * + * \param window the window to change + * \param min_w the minimum width of the window in pixels + * \param min_h the minimum height of the window in pixels + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMinimumSize + * \sa SDL_SetWindowMaximumSize + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMinimumSize(SDL_Window * window, + int min_w, int min_h); + +/** + * Get the minimum size of a window's client area. + * + * \param window the window to query + * \param w a pointer filled in with the minimum width of the window, may be + * NULL + * \param h a pointer filled in with the minimum height of the window, may be + * NULL + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMaximumSize + * \sa SDL_SetWindowMinimumSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowMinimumSize(SDL_Window * window, + int *w, int *h); + +/** + * Set the maximum size of a window's client area. + * + * \param window the window to change + * \param max_w the maximum width of the window in pixels + * \param max_h the maximum height of the window in pixels + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMaximumSize + * \sa SDL_SetWindowMinimumSize + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMaximumSize(SDL_Window * window, + int max_w, int max_h); + +/** + * Get the maximum size of a window's client area. + * + * \param window the window to query + * \param w a pointer filled in with the maximum width of the window, may be + * NULL + * \param h a pointer filled in with the maximum height of the window, may be + * NULL + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMinimumSize + * \sa SDL_SetWindowMaximumSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window, + int *w, int *h); + +/** + * Set the border state of a window. + * + * This will add or remove the window's `SDL_WINDOW_BORDERLESS` flag and add + * or remove the border from the actual window. This is a no-op if the + * window's border already matches the requested state. + * + * You can't change the border state of a fullscreen window. + * + * \param window the window of which to change the border state + * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowFlags + */ +extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window, + SDL_bool bordered); + +/** + * Set the user-resizable state of a window. + * + * This will add or remove the window's `SDL_WINDOW_RESIZABLE` flag and + * allow/disallow user resizing of the window. This is a no-op if the window's + * resizable state already matches the requested state. + * + * You can't change the resizable state of a fullscreen window. + * + * \param window the window of which to change the resizable state + * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetWindowFlags + */ +extern DECLSPEC void SDLCALL SDL_SetWindowResizable(SDL_Window * window, + SDL_bool resizable); + +/** + * Set the window to always be above the others. + * + * This will add or remove the window's `SDL_WINDOW_ALWAYS_ON_TOP` flag. This + * will bring the window to the front and keep the window above the rest. + * + * \param window The window of which to change the always on top state + * \param on_top SDL_TRUE to set the window always on top, SDL_FALSE to + * disable + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetWindowFlags + */ +extern DECLSPEC void SDLCALL SDL_SetWindowAlwaysOnTop(SDL_Window * window, + SDL_bool on_top); + +/** + * Show a window. + * + * \param window the window to show + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HideWindow + * \sa SDL_RaiseWindow + */ +extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_Window * window); + +/** + * Hide a window. + * + * \param window the window to hide + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ShowWindow + */ +extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_Window * window); + +/** + * Raise a window above other windows and set the input focus. + * + * \param window the window to raise + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_Window * window); + +/** + * Make a window as large as possible. + * + * \param window the window to maximize + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MinimizeWindow + * \sa SDL_RestoreWindow + */ +extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window * window); + +/** + * Minimize a window to an iconic representation. + * + * \param window the window to minimize + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MaximizeWindow + * \sa SDL_RestoreWindow + */ +extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_Window * window); + +/** + * Restore the size and position of a minimized or maximized window. + * + * \param window the window to restore + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MaximizeWindow + * \sa SDL_MinimizeWindow + */ +extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window); + +/** + * Set a window's fullscreen state. + * + * `flags` may be `SDL_WINDOW_FULLSCREEN`, for "real" fullscreen with a + * videomode change; `SDL_WINDOW_FULLSCREEN_DESKTOP` for "fake" fullscreen + * that takes the size of the desktop; and 0 for windowed mode. + * + * \param window the window to change + * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0 + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowDisplayMode + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window, + Uint32 flags); + +/** + * Get the SDL surface associated with the window. + * + * A new surface will be created with the optimal format for the window, if + * necessary. This surface will be freed when the window is destroyed. Do not + * free this surface. + * + * This surface will be invalidated if the window is resized. After resizing a + * window this function must be called again to return a valid surface. + * + * You may not combine this with 3D or the rendering API on this window. + * + * This function is affected by `SDL_HINT_FRAMEBUFFER_ACCELERATION`. + * + * \param window the window to query + * \returns the surface associated with the window, or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_UpdateWindowSurface + * \sa SDL_UpdateWindowSurfaceRects + */ +extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window); + +/** + * Copy the window surface to the screen. + * + * This is the function you use to reflect any changes to the surface on the + * screen. + * + * This function is equivalent to the SDL 1.2 API SDL_Flip(). + * + * \param window the window to update + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowSurface + * \sa SDL_UpdateWindowSurfaceRects + */ +extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window); + +/** + * Copy areas of the window surface to the screen. + * + * This is the function you use to reflect changes to portions of the surface + * on the screen. + * + * This function is equivalent to the SDL 1.2 API SDL_UpdateRects(). + * + * \param window the window to update + * \param rects an array of SDL_Rect structures representing areas of the + * surface to copy + * \param numrects the number of rectangles + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowSurface + * \sa SDL_UpdateWindowSurface + */ +extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window, + const SDL_Rect * rects, + int numrects); + +/** + * Set a window's input grab mode. + * + * When input is grabbed, the mouse is confined to the window. This function + * will also grab the keyboard if `SDL_HINT_GRAB_KEYBOARD` is set. To grab the + * keyboard without also grabbing the mouse, use SDL_SetWindowKeyboardGrab(). + * + * If the caller enables a grab while another window is currently grabbed, the + * other window loses its grab in favor of the caller's window. + * + * \param window the window for which the input grab mode should be set + * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetGrabbedWindow + * \sa SDL_GetWindowGrab + */ +extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * Set a window's keyboard grab mode. + * + * Keyboard grab enables capture of system keyboard shortcuts like Alt+Tab or + * the Meta/Super key. Note that not all system keyboard shortcuts can be + * captured by applications (one example is Ctrl+Alt+Del on Windows). + * + * This is primarily intended for specialized applications such as VNC clients + * or VM frontends. Normal games should not use keyboard grab. + * + * When keyboard grab is enabled, SDL will continue to handle Alt+Tab when the + * window is full-screen to ensure the user is not trapped in your + * application. If you have a custom keyboard shortcut to exit fullscreen + * mode, you may suppress this behavior with + * `SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED`. + * + * If the caller enables a grab while another window is currently grabbed, the + * other window loses its grab in favor of the caller's window. + * + * \param window The window for which the keyboard grab mode should be set. + * \param grabbed This is SDL_TRUE to grab keyboard, and SDL_FALSE to release. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetWindowKeyboardGrab + * \sa SDL_SetWindowMouseGrab + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC void SDLCALL SDL_SetWindowKeyboardGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * Set a window's mouse grab mode. + * + * Mouse grab confines the mouse cursor to the window. + * + * \param window The window for which the mouse grab mode should be set. + * \param grabbed This is SDL_TRUE to grab mouse, and SDL_FALSE to release. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetWindowMouseGrab + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMouseGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * Get a window's input grab mode. + * + * \param window the window to query + * \returns SDL_TRUE if input is grabbed, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window); + +/** + * Get a window's keyboard grab mode. + * + * \param window the window to query + * \returns SDL_TRUE if keyboard is grabbed, and SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_GetWindowGrab + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowKeyboardGrab(SDL_Window * window); + +/** + * Get a window's mouse grab mode. + * + * \param window the window to query + * \returns SDL_TRUE if mouse is grabbed, and SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_GetWindowGrab + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowMouseGrab(SDL_Window * window); + +/** + * Get the window that currently has an input grab enabled. + * + * \returns the window if input is grabbed or NULL otherwise. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetWindowGrab + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetGrabbedWindow(void); + +/** + * Confines the cursor to the specified area of a window. + * + * Note that this does NOT grab the cursor, it only defines the area a cursor + * is restricted to when the window has mouse focus. + * + * \param window The window that will be associated with the barrier. + * \param rect A rectangle area in window-relative coordinates. If NULL the + * barrier for the specified window will be destroyed. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GetWindowMouseRect + * \sa SDL_SetWindowMouseGrab + */ +extern DECLSPEC int SDLCALL SDL_SetWindowMouseRect(SDL_Window * window, const SDL_Rect * rect); + +/** + * Get the mouse confinement rectangle of a window. + * + * \param window The window to query + * \returns A pointer to the mouse confinement rectangle of a window, or NULL + * if there isn't one. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_SetWindowMouseRect + */ +extern DECLSPEC const SDL_Rect * SDLCALL SDL_GetWindowMouseRect(SDL_Window * window); + +/** + * Set the brightness (gamma multiplier) for a given window's display. + * + * Despite the name and signature, this method sets the brightness of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) The + * brightness set will not follow the window if it is moved to another + * display. + * + * Many platforms will refuse to set the display brightness in modern times. + * You are better off using a shader to adjust gamma during rendering, or + * something similar. + * + * \param window the window used to select the display whose brightness will + * be changed + * \param brightness the brightness (gamma multiplier) value to set where 0.0 + * is completely dark and 1.0 is normal brightness + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowBrightness + * \sa SDL_SetWindowGammaRamp + */ +extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float brightness); + +/** + * Get the brightness (gamma multiplier) for a given window's display. + * + * Despite the name and signature, this method retrieves the brightness of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) + * + * \param window the window used to select the display whose brightness will + * be queried + * \returns the brightness for the display where 0.0 is completely dark and + * 1.0 is normal brightness. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowBrightness + */ +extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window); + +/** + * Set the opacity for a window. + * + * The parameter `opacity` will be clamped internally between 0.0f + * (transparent) and 1.0f (opaque). + * + * This function also returns -1 if setting the opacity isn't supported. + * + * \param window the window which will be made transparent or opaque + * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetWindowOpacity + */ +extern DECLSPEC int SDLCALL SDL_SetWindowOpacity(SDL_Window * window, float opacity); + +/** + * Get the opacity of a window. + * + * If transparency isn't supported on this platform, opacity will be reported + * as 1.0f without error. + * + * The parameter `opacity` is ignored if it is NULL. + * + * This function also returns -1 if an invalid window was provided. + * + * \param window the window to get the current opacity value from + * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_SetWindowOpacity + */ +extern DECLSPEC int SDLCALL SDL_GetWindowOpacity(SDL_Window * window, float * out_opacity); + +/** + * Set the window as a modal for another window. + * + * \param modal_window the window that should be set modal + * \param parent_window the parent window for the modal window + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + */ +extern DECLSPEC int SDLCALL SDL_SetWindowModalFor(SDL_Window * modal_window, SDL_Window * parent_window); + +/** + * Explicitly set input focus to the window. + * + * You almost certainly want SDL_RaiseWindow() instead of this function. Use + * this with caution, as you might give focus to a window that is completely + * obscured by other windows. + * + * \param window the window that should get the input focus + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_RaiseWindow + */ +extern DECLSPEC int SDLCALL SDL_SetWindowInputFocus(SDL_Window * window); + +/** + * Set the gamma ramp for the display that owns a given window. + * + * Set the gamma translation table for the red, green, and blue channels of + * the video hardware. Each table is an array of 256 16-bit quantities, + * representing a mapping between the input and output for that channel. The + * input is the index into the array, and the output is the 16-bit gamma value + * at that index, scaled to the output color precision. + * + * Despite the name and signature, this method sets the gamma ramp of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) The gamma + * ramp set will not follow the window if it is moved to another display. + * + * \param window the window used to select the display whose gamma ramp will + * be changed + * \param red a 256 element array of 16-bit quantities representing the + * translation table for the red channel, or NULL + * \param green a 256 element array of 16-bit quantities representing the + * translation table for the green channel, or NULL + * \param blue a 256 element array of 16-bit quantities representing the + * translation table for the blue channel, or NULL + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowGammaRamp + */ +extern DECLSPEC int SDLCALL SDL_SetWindowGammaRamp(SDL_Window * window, + const Uint16 * red, + const Uint16 * green, + const Uint16 * blue); + +/** + * Get the gamma ramp for a given window's display. + * + * Despite the name and signature, this method retrieves the gamma ramp of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) + * + * \param window the window used to select the display whose gamma ramp will + * be queried + * \param red a 256 element array of 16-bit quantities filled in with the + * translation table for the red channel, or NULL + * \param green a 256 element array of 16-bit quantities filled in with the + * translation table for the green channel, or NULL + * \param blue a 256 element array of 16-bit quantities filled in with the + * translation table for the blue channel, or NULL + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowGammaRamp + */ +extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window, + Uint16 * red, + Uint16 * green, + Uint16 * blue); + +/** + * Possible return values from the SDL_HitTest callback. + * + * \sa SDL_HitTest + */ +typedef enum +{ + SDL_HITTEST_NORMAL, /**< Region is normal. No special properties. */ + SDL_HITTEST_DRAGGABLE, /**< Region can drag entire window. */ + SDL_HITTEST_RESIZE_TOPLEFT, + SDL_HITTEST_RESIZE_TOP, + SDL_HITTEST_RESIZE_TOPRIGHT, + SDL_HITTEST_RESIZE_RIGHT, + SDL_HITTEST_RESIZE_BOTTOMRIGHT, + SDL_HITTEST_RESIZE_BOTTOM, + SDL_HITTEST_RESIZE_BOTTOMLEFT, + SDL_HITTEST_RESIZE_LEFT +} SDL_HitTestResult; + +/** + * Callback used for hit-testing. + * + * \param win the SDL_Window where hit-testing was set on + * \param area an SDL_Point which should be hit-tested + * \param data what was passed as `callback_data` to SDL_SetWindowHitTest() + * \return an SDL_HitTestResult value. + * + * \sa SDL_SetWindowHitTest + */ +typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win, + const SDL_Point *area, + void *data); + +/** + * Provide a callback that decides if a window region has special properties. + * + * Normally windows are dragged and resized by decorations provided by the + * system window manager (a title bar, borders, etc), but for some apps, it + * makes sense to drag them from somewhere else inside the window itself; for + * example, one might have a borderless window that wants to be draggable from + * any part, or simulate its own title bar, etc. + * + * This function lets the app provide a callback that designates pieces of a + * given window as special. This callback is run during event processing if we + * need to tell the OS to treat a region of the window specially; the use of + * this callback is known as "hit testing." + * + * Mouse input may not be delivered to your application if it is within a + * special area; the OS will often apply that input to moving the window or + * resizing the window and not deliver it to the application. + * + * Specifying NULL for a callback disables hit-testing. Hit-testing is + * disabled by default. + * + * Platforms that don't support this functionality will return -1 + * unconditionally, even if you're attempting to disable hit-testing. + * + * Your callback may fire at any time, and its firing does not indicate any + * specific behavior (for example, on Windows, this certainly might fire when + * the OS is deciding whether to drag your window, but it fires for lots of + * other reasons, too, some unrelated to anything you probably care about _and + * when the mouse isn't actually at the location it is testing_). Since this + * can fire at any time, you should try to keep your callback efficient, + * devoid of allocations, etc. + * + * \param window the window to set hit-testing on + * \param callback the function to call when doing a hit-test + * \param callback_data an app-defined void pointer passed to **callback** + * \returns 0 on success or -1 on error (including unsupported); call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC int SDLCALL SDL_SetWindowHitTest(SDL_Window * window, + SDL_HitTest callback, + void *callback_data); + +/** + * Request a window to demand attention from the user. + * + * \param window the window to be flashed + * \param operation the flash operation + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_FlashWindow(SDL_Window * window, SDL_FlashOperation operation); + +/** + * Destroy a window. + * + * If `window` is NULL, this function will return immediately after setting + * the SDL error message to "Invalid window". See SDL_GetError(). + * + * \param window the window to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindow + * \sa SDL_CreateWindowFrom + */ +extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window * window); + + +/** + * Check whether the screensaver is currently enabled. + * + * The screensaver is disabled by default since SDL 2.0.2. Before SDL 2.0.2 + * the screensaver was enabled by default. + * + * The default can also be changed using `SDL_HINT_VIDEO_ALLOW_SCREENSAVER`. + * + * \returns SDL_TRUE if the screensaver is enabled, SDL_FALSE if it is + * disabled. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DisableScreenSaver + * \sa SDL_EnableScreenSaver + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenSaverEnabled(void); + +/** + * Allow the screen to be blanked by a screen saver. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DisableScreenSaver + * \sa SDL_IsScreenSaverEnabled + */ +extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void); + +/** + * Prevent the screen from being blanked by a screen saver. + * + * If you disable the screensaver, it is automatically re-enabled when SDL + * quits. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_EnableScreenSaver + * \sa SDL_IsScreenSaverEnabled + */ +extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void); + + +/** + * \name OpenGL support functions + */ +/* @{ */ + +/** + * Dynamically load an OpenGL library. + * + * This should be done after initializing the video driver, but before + * creating any OpenGL windows. If no OpenGL library is loaded, the default + * library will be loaded upon creation of the first OpenGL window. + * + * If you do this, you need to retrieve all of the GL functions used in your + * program from the dynamic library using SDL_GL_GetProcAddress(). + * + * \param path the platform dependent OpenGL library name, or NULL to open the + * default OpenGL library + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetProcAddress + * \sa SDL_GL_UnloadLibrary + */ +extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); + +/** + * Get an OpenGL function by name. + * + * If the GL library is loaded at runtime with SDL_GL_LoadLibrary(), then all + * GL functions must be retrieved this way. Usually this is used to retrieve + * function pointers to OpenGL extensions. + * + * There are some quirks to looking up OpenGL functions that require some + * extra care from the application. If you code carefully, you can handle + * these quirks without any platform-specific code, though: + * + * - On Windows, function pointers are specific to the current GL context; + * this means you need to have created a GL context and made it current + * before calling SDL_GL_GetProcAddress(). If you recreate your context or + * create a second context, you should assume that any existing function + * pointers aren't valid to use with it. This is (currently) a + * Windows-specific limitation, and in practice lots of drivers don't suffer + * this limitation, but it is still the way the wgl API is documented to + * work and you should expect crashes if you don't respect it. Store a copy + * of the function pointers that comes and goes with context lifespan. + * - On X11, function pointers returned by this function are valid for any + * context, and can even be looked up before a context is created at all. + * This means that, for at least some common OpenGL implementations, if you + * look up a function that doesn't exist, you'll get a non-NULL result that + * is _NOT_ safe to call. You must always make sure the function is actually + * available for a given GL context before calling it, by checking for the + * existence of the appropriate extension with SDL_GL_ExtensionSupported(), + * or verifying that the version of OpenGL you're using offers the function + * as core functionality. + * - Some OpenGL drivers, on all platforms, *will* return NULL if a function + * isn't supported, but you can't count on this behavior. Check for + * extensions you use, and if you get a NULL anyway, act as if that + * extension wasn't available. This is probably a bug in the driver, but you + * can code defensively for this scenario anyhow. + * - Just because you're on Linux/Unix, don't assume you'll be using X11. + * Next-gen display servers are waiting to replace it, and may or may not + * make the same promises about function pointers. + * - OpenGL function pointers must be declared `APIENTRY` as in the example + * code. This will ensure the proper calling convention is followed on + * platforms where this matters (Win32) thereby avoiding stack corruption. + * + * \param proc the name of an OpenGL function + * \returns a pointer to the named OpenGL function. The returned pointer + * should be cast to the appropriate function signature. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_ExtensionSupported + * \sa SDL_GL_LoadLibrary + * \sa SDL_GL_UnloadLibrary + */ +extern DECLSPEC void *SDLCALL SDL_GL_GetProcAddress(const char *proc); + +/** + * Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_LoadLibrary + */ +extern DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void); + +/** + * Check if an OpenGL extension is supported for the current context. + * + * This function operates on the current GL context; you must have created a + * context and it must be current before calling this function. Do not assume + * that all contexts you create will have the same set of extensions + * available, or that recreating an existing context will offer the same + * extensions again. + * + * While it's probably not a massive overhead, this function is not an O(1) + * operation. Check the extensions you care about after creating the GL + * context and save that information somewhere instead of calling the function + * every time you need to know. + * + * \param extension the name of the extension to check + * \returns SDL_TRUE if the extension is supported, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GL_ExtensionSupported(const char + *extension); + +/** + * Reset all previously set OpenGL context attributes to their default values. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_GL_GetAttribute + * \sa SDL_GL_SetAttribute + */ +extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void); + +/** + * Set an OpenGL window attribute before window creation. + * + * This function sets the OpenGL attribute `attr` to `value`. The requested + * attributes should be set before creating an OpenGL window. You should use + * SDL_GL_GetAttribute() to check the values after creating the OpenGL + * context, since the values obtained can differ from the requested ones. + * + * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to set + * \param value the desired value for the attribute + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetAttribute + * \sa SDL_GL_ResetAttributes + */ +extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); + +/** + * Get the actual value for an attribute from the current context. + * + * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to get + * \param value a pointer filled in with the current value of `attr` + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_ResetAttributes + * \sa SDL_GL_SetAttribute + */ +extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value); + +/** + * Create an OpenGL context for an OpenGL window, and make it current. + * + * Windows users new to OpenGL should note that, for historical reasons, GL + * functions added after OpenGL version 1.1 are not available by default. + * Those functions must be loaded at run-time, either with an OpenGL + * extension-handling library or with SDL_GL_GetProcAddress() and its related + * functions. + * + * SDL_GLContext is an alias for `void *`. It's opaque to the application. + * + * \param window the window to associate with the context + * \returns the OpenGL context associated with `window` or NULL on error; call + * SDL_GetError() for more details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_DeleteContext + * \sa SDL_GL_MakeCurrent + */ +extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window * + window); + +/** + * Set up an OpenGL context for rendering into an OpenGL window. + * + * The context must have been created with a compatible window. + * + * \param window the window to associate with the context + * \param context the OpenGL context to associate with the window + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_CreateContext + */ +extern DECLSPEC int SDLCALL SDL_GL_MakeCurrent(SDL_Window * window, + SDL_GLContext context); + +/** + * Get the currently active OpenGL window. + * + * \returns the currently active OpenGL window on success or NULL on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void); + +/** + * Get the currently active OpenGL context. + * + * \returns the currently active OpenGL context or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_MakeCurrent + */ +extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void); + +/** + * Get the size of a window's underlying drawable in pixels. + * + * This returns info useful for calling glViewport(). + * + * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI + * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a + * platform with high-DPI support (Apple calls this "Retina"), and not + * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. + * + * \param window the window from which the drawable size should be queried + * \param w a pointer to variable for storing the width in pixels, may be NULL + * \param h a pointer to variable for storing the height in pixels, may be + * NULL + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_CreateWindow + * \sa SDL_GetWindowSize + */ +extern DECLSPEC void SDLCALL SDL_GL_GetDrawableSize(SDL_Window * window, int *w, + int *h); + +/** + * Set the swap interval for the current OpenGL context. + * + * Some systems allow specifying -1 for the interval, to enable adaptive + * vsync. Adaptive vsync works the same as vsync, but if you've already missed + * the vertical retrace for a given frame, it swaps buffers immediately, which + * might be less jarring for the user during occasional framerate drops. If an + * application requests adaptive vsync and the system does not support it, + * this function will fail and return -1. In such a case, you should probably + * retry the call with 1 for the interval. + * + * Adaptive vsync is implemented for some glX drivers with + * GLX_EXT_swap_control_tear: + * + * https://www.opengl.org/registry/specs/EXT/glx_swap_control_tear.txt + * + * and for some Windows drivers with WGL_EXT_swap_control_tear: + * + * https://www.opengl.org/registry/specs/EXT/wgl_swap_control_tear.txt + * + * Read more on the Khronos wiki: + * https://www.khronos.org/opengl/wiki/Swap_Interval#Adaptive_Vsync + * + * \param interval 0 for immediate updates, 1 for updates synchronized with + * the vertical retrace, -1 for adaptive vsync + * \returns 0 on success or -1 if setting the swap interval is not supported; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetSwapInterval + */ +extern DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval); + +/** + * Get the swap interval for the current OpenGL context. + * + * If the system can't determine the swap interval, or there isn't a valid + * current context, this function will return 0 as a safe default. + * + * \returns 0 if there is no vertical retrace synchronization, 1 if the buffer + * swap is synchronized with the vertical retrace, and -1 if late + * swaps happen immediately instead of waiting for the next retrace; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_SetSwapInterval + */ +extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void); + +/** + * Update a window with OpenGL rendering. + * + * This is used with double-buffered OpenGL contexts, which are the default. + * + * On macOS, make sure you bind 0 to the draw framebuffer before swapping the + * window, otherwise nothing will happen. If you aren't using + * glBindFramebuffer(), this is the default and you won't have to do anything + * extra. + * + * \param window the window to change + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window); + +/** + * Delete an OpenGL context. + * + * \param context the OpenGL context to be deleted + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_CreateContext + */ +extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context); + +/* @} *//* OpenGL support functions */ + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_video_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_vulkan.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_vulkan.h new file mode 100644 index 00000000000..cca130b58a1 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/SDL_vulkan.h @@ -0,0 +1,215 @@ +/* + Simple DirectMedia Layer + Copyright (C) 2017, Mark Callow + + 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. +*/ + +/** + * \file SDL_vulkan.h + * + * Header file for functions to creating Vulkan surfaces on SDL windows. + */ + +#ifndef SDL_vulkan_h_ +#define SDL_vulkan_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Avoid including vulkan.h, don't define VkInstance if it's already included */ +#ifdef VULKAN_H_ +#define NO_SDL_VULKAN_TYPEDEFS +#endif +#ifndef NO_SDL_VULKAN_TYPEDEFS +#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; + +#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) +#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; +#else +#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; +#endif + +VK_DEFINE_HANDLE(VkInstance) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) + +#endif /* !NO_SDL_VULKAN_TYPEDEFS */ + +typedef VkInstance SDL_vulkanInstance; +typedef VkSurfaceKHR SDL_vulkanSurface; /* for compatibility with Tizen */ + +/** + * \name Vulkan support functions + * + * \note SDL_Vulkan_GetInstanceExtensions & SDL_Vulkan_CreateSurface API + * is compatable with Tizen's implementation of Vulkan in SDL. + */ +/* @{ */ + +/** + * Dynamically load the Vulkan loader library. + * + * This should be called after initializing the video driver, but before + * creating any Vulkan windows. If no Vulkan loader library is loaded, the + * default library will be loaded upon creation of the first Vulkan window. + * + * It is fairly common for Vulkan applications to link with libvulkan instead + * of explicitly loading it at run time. This will work with SDL provided the + * application links to a dynamic library and both it and SDL use the same + * search path. + * + * If you specify a non-NULL `path`, an application should retrieve all of the + * Vulkan functions it uses from the dynamic library using + * SDL_Vulkan_GetVkGetInstanceProcAddr unless you can guarantee `path` points + * to the same vulkan loader library the application linked to. + * + * On Apple devices, if `path` is NULL, SDL will attempt to find the + * `vkGetInstanceProcAddr` address within all the Mach-O images of the current + * process. This is because it is fairly common for Vulkan applications to + * link with libvulkan (and historically MoltenVK was provided as a static + * library). If it is not found, on macOS, SDL will attempt to load + * `vulkan.framework/vulkan`, `libvulkan.1.dylib`, + * `MoltenVK.framework/MoltenVK`, and `libMoltenVK.dylib`, in that order. On + * iOS, SDL will attempt to load `libMoltenVK.dylib`. Applications using a + * dynamic framework or .dylib must ensure it is included in its application + * bundle. + * + * On non-Apple devices, application linking with a static libvulkan is not + * supported. Either do not link to the Vulkan loader or link to a dynamic + * library version. + * + * \param path The platform dependent Vulkan loader library name or NULL + * \returns 0 on success or -1 if the library couldn't be loaded; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_GetVkInstanceProcAddr + * \sa SDL_Vulkan_UnloadLibrary + */ +extern DECLSPEC int SDLCALL SDL_Vulkan_LoadLibrary(const char *path); + +/** + * Get the address of the `vkGetInstanceProcAddr` function. + * + * This should be called after either calling SDL_Vulkan_LoadLibrary() or + * creating an SDL_Window with the `SDL_WINDOW_VULKAN` flag. + * + * \returns the function pointer for `vkGetInstanceProcAddr` or NULL on error. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC void *SDLCALL SDL_Vulkan_GetVkGetInstanceProcAddr(void); + +/** + * Unload the Vulkan library previously loaded by SDL_Vulkan_LoadLibrary() + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_LoadLibrary + */ +extern DECLSPEC void SDLCALL SDL_Vulkan_UnloadLibrary(void); + +/** + * Get the names of the Vulkan instance extensions needed to create a surface + * with SDL_Vulkan_CreateSurface. + * + * If `pNames` is NULL, then the number of required Vulkan instance extensions + * is returned in `pCount`. Otherwise, `pCount` must point to a variable set + * to the number of elements in the `pNames` array, and on return the variable + * is overwritten with the number of names actually written to `pNames`. If + * `pCount` is less than the number of required extensions, at most `pCount` + * structures will be written. If `pCount` is smaller than the number of + * required extensions, SDL_FALSE will be returned instead of SDL_TRUE, to + * indicate that not all the required extensions were returned. + * + * The `window` parameter is currently needed to be valid as of SDL 2.0.8, + * however, this parameter will likely be removed in future releases + * + * \param window A window for which the required Vulkan instance extensions + * should be retrieved (will be deprecated in a future release) + * \param pCount A pointer to an unsigned int corresponding to the number of + * extensions to be returned + * \param pNames NULL or a pointer to an array to be filled with required + * Vulkan instance extensions + * \returns SDL_TRUE on success, SDL_FALSE on error. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_CreateSurface + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_GetInstanceExtensions(SDL_Window *window, + unsigned int *pCount, + const char **pNames); + +/** + * Create a Vulkan rendering surface for a window. + * + * The `window` must have been created with the `SDL_WINDOW_VULKAN` flag and + * `instance` must have been created with extensions returned by + * SDL_Vulkan_GetInstanceExtensions() enabled. + * + * \param window The window to which to attach the Vulkan surface + * \param instance The Vulkan instance handle + * \param surface A pointer to a VkSurfaceKHR handle to output the newly + * created surface + * \returns SDL_TRUE on success, SDL_FALSE on error. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_GetInstanceExtensions + * \sa SDL_Vulkan_GetDrawableSize + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_CreateSurface(SDL_Window *window, + VkInstance instance, + VkSurfaceKHR* surface); + +/** + * Get the size of the window's underlying drawable dimensions in pixels. + * + * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI + * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a + * platform with high-DPI support (Apple calls this "Retina"), and not + * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. + * + * \param window an SDL_Window for which the size is to be queried + * \param w Pointer to the variable to write the width to or NULL + * \param h Pointer to the variable to write the height to or NULL + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_GetWindowSize + * \sa SDL_CreateWindow + * \sa SDL_Vulkan_CreateSurface + */ +extern DECLSPEC void SDLCALL SDL_Vulkan_GetDrawableSize(SDL_Window * window, + int *w, int *h); + +/* @} *//* Vulkan support functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_vulkan_h_ */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/begin_code.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/begin_code.h new file mode 100644 index 00000000000..b1b1a3a9bea --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/begin_code.h @@ -0,0 +1,187 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file begin_code.h + * + * This file sets things up for C dynamic library function definitions, + * static inlined functions, and structures aligned at 4-byte alignment. + * If you don't like ugly C preprocessor code, don't look at this file. :) + */ + +/* This shouldn't be nested -- included it around code only. */ +#ifdef _begin_code_h +#error Nested inclusion of begin_code.h +#endif +#define _begin_code_h + +#ifndef SDL_DEPRECATED +# if (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */ +# define SDL_DEPRECATED __attribute__((deprecated)) +# else +# define SDL_DEPRECATED +# endif +#endif + +#ifndef SDL_UNUSED +# ifdef __GNUC__ +# define SDL_UNUSED __attribute__((unused)) +# else +# define SDL_UNUSED +# endif +#endif + +/* Some compilers use a special export keyword */ +#ifndef DECLSPEC +# if defined(__WIN32__) || defined(__WINRT__) || defined(__CYGWIN__) +# ifdef DLL_EXPORT +# define DECLSPEC __declspec(dllexport) +# else +# define DECLSPEC +# endif +# elif defined(__OS2__) +# ifdef BUILD_SDL +# define DECLSPEC __declspec(dllexport) +# else +# define DECLSPEC +# endif +# else +# if defined(__GNUC__) && __GNUC__ >= 4 +# define DECLSPEC __attribute__ ((visibility("default"))) +# else +# define DECLSPEC +# endif +# endif +#endif + +/* By default SDL uses the C calling convention */ +#ifndef SDLCALL +#if (defined(__WIN32__) || defined(__WINRT__)) && !defined(__GNUC__) +#define SDLCALL __cdecl +#elif defined(__OS2__) || defined(__EMX__) +#define SDLCALL _System +# if defined (__GNUC__) && !defined(_System) +# define _System /* for old EMX/GCC compat. */ +# endif +#else +#define SDLCALL +#endif +#endif /* SDLCALL */ + +/* Removed DECLSPEC on Symbian OS because SDL cannot be a DLL in EPOC */ +#ifdef __SYMBIAN32__ +#undef DECLSPEC +#define DECLSPEC +#endif /* __SYMBIAN32__ */ + +/* Force structure packing at 4 byte alignment. + This is necessary if the header is included in code which has structure + packing set to an alternate value, say for loading structures from disk. + The packing is reset to the previous value in close_code.h + */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) +#ifdef _MSC_VER +#pragma warning(disable: 4103) +#endif +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wpragma-pack" +#endif +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#ifdef _WIN64 +/* Use 8-byte alignment on 64-bit architectures, so pointers are aligned */ +#pragma pack(push,8) +#else +#pragma pack(push,4) +#endif +#endif /* Compiler needs structure packing set */ + +#ifndef SDL_INLINE +#if defined(__GNUC__) +#define SDL_INLINE __inline__ +#elif defined(_MSC_VER) || defined(__BORLANDC__) || \ + defined(__DMC__) || defined(__SC__) || \ + defined(__WATCOMC__) || defined(__LCC__) || \ + defined(__DECC) || defined(__CC_ARM) +#define SDL_INLINE __inline +#ifndef __inline__ +#define __inline__ __inline +#endif +#else +#define SDL_INLINE inline +#ifndef __inline__ +#define __inline__ inline +#endif +#endif +#endif /* SDL_INLINE not defined */ + +#ifndef SDL_FORCE_INLINE +#if defined(_MSC_VER) +#define SDL_FORCE_INLINE __forceinline +#elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) +#define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ +#else +#define SDL_FORCE_INLINE static SDL_INLINE +#endif +#endif /* SDL_FORCE_INLINE not defined */ + +#ifndef SDL_NORETURN +#if defined(__GNUC__) +#define SDL_NORETURN __attribute__((noreturn)) +#elif defined(_MSC_VER) +#define SDL_NORETURN __declspec(noreturn) +#else +#define SDL_NORETURN +#endif +#endif /* SDL_NORETURN not defined */ + +/* Apparently this is needed by several Windows compilers */ +#if !defined(__MACH__) +#ifndef NULL +#ifdef __cplusplus +#define NULL 0 +#else +#define NULL ((void *)0) +#endif +#endif /* NULL */ +#endif /* ! Mac OS X - breaks precompiled headers */ + +#ifndef SDL_FALLTHROUGH +#if (defined(__cplusplus) && __cplusplus >= 201703L) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L) +#define SDL_FALLTHROUGH [[fallthrough]] +#else +#if defined(__has_attribute) +#define _HAS_FALLTHROUGH __has_attribute(__fallthrough__) +#else +#define _HAS_FALLTHROUGH 0 +#endif /* __has_attribute */ +#if _HAS_FALLTHROUGH && \ + ((defined(__GNUC__) && __GNUC__ >= 7) || \ + (defined(__clang_major__) && __clang_major__ >= 10)) +#define SDL_FALLTHROUGH __attribute__((__fallthrough__)) +#else +#define SDL_FALLTHROUGH do {} while (0) /* fallthrough */ +#endif /* _HAS_FALLTHROUGH */ +#undef _HAS_FALLTHROUGH +#endif /* C++17 or C2x */ +#endif /* SDL_FALLTHROUGH not defined */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/close_code.h b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/close_code.h new file mode 100644 index 00000000000..dc73432f622 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Headers/close_code.h @@ -0,0 +1,40 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file close_code.h + * + * This file reverses the effects of begin_code.h and should be included + * after you finish any function and structure declarations in your headers + */ + +#ifndef _begin_code_h +#error close_code.h included without matching begin_code.h +#endif +#undef _begin_code_h + +/* Reset structure packing at previous byte alignment */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#pragma pack(pop) +#endif /* Compiler needs structure packing set */ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Resources/Info.plist b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Resources/Info.plist new file mode 100644 index 00000000000..fbd71c508b5 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,50 @@ + + + + + BuildMachineOSBuild + 21E258 + CFBundleDevelopmentRegion + English + CFBundleExecutable + SDL2 + CFBundleGetInfoString + http://www.libsdl.org + CFBundleIdentifier + org.libsdl.SDL2 + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Simple DirectMedia Layer + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.0.22 + CFBundleSignature + SDLX + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 2.0.22 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 13E500a + DTPlatformName + macosx + DTPlatformVersion + 12.3 + DTSDKBuild + 21E226 + DTSDKName + macosx12.3 + DTXcode + 1331 + DTXcodeBuild + 13E500a + LSMinimumSystemVersion + 10.6 + + diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Resources/License.txt b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Resources/License.txt new file mode 100644 index 00000000000..d2785a68158 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Resources/License.txt @@ -0,0 +1,19 @@ + +Simple DirectMedia Layer +Copyright (C) 1997-2022 Sam Lantinga + +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. diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Resources/ReadMe.txt b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Resources/ReadMe.txt new file mode 100644 index 00000000000..40ac3a14c1c --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Resources/ReadMe.txt @@ -0,0 +1,32 @@ +The Simple DirectMedia Layer (SDL for short) is a cross-platform +library designed to make it easy to write multi-media software, +such as games and emulators. + +The Simple DirectMedia Layer library source code is available from: +http://www.libsdl.org/ + +This library is distributed under the terms of the zlib license: +http://zlib.net/zlib_license.html + + +This packages contains the SDL framework for OS X. +Conforming with Apple guidelines, this framework +contains both the SDL runtime component and development header files. + + +To Install: +Copy the SDL2.framework to /Library/Frameworks + +You may alternatively install it in /Library/Frameworks +if your access privileges are not high enough. + + +Additional References: + + - Screencast tutorials for getting started with OpenSceneGraph/Mac OS X are + available at: + http://www.openscenegraph.org/projects/osg/wiki/Support/Tutorials/MacOSXTips + Though these are OpenSceneGraph centric, the same exact concepts apply to + SDL, thus the videos are recommended for everybody getting started with + developing on Mac OS X. (You can skim over the PlugIns stuff since SDL + doesn't have any PlugIns to worry about.) diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Resources/default.metallib b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Resources/default.metallib new file mode 100644 index 00000000000..0aba653abab Binary files /dev/null and b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/Resources/default.metallib differ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/SDL2 b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/SDL2 new file mode 100644 index 00000000000..eb8ab3e79d1 Binary files /dev/null and b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/SDL2 differ diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/_CodeSignature/CodeResources b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/_CodeSignature/CodeResources new file mode 100644 index 00000000000..310efefc568 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/A/_CodeSignature/CodeResources @@ -0,0 +1,892 @@ + + + + + files + + Resources/Info.plist + + OxWHBbdJFecUEehMjei2Rc0U5Fs= + + Resources/License.txt + + VoVWJNSXNFkj10nxdQKhgCnXJjE= + + Resources/ReadMe.txt + + JbxWZUxpvG/D7Yb/DvLh6Aunla0= + + Resources/default.metallib + + 50m0avYLiIBc6a4gWqXN3tnFlpU= + + + files2 + + Headers/SDL.h + + hash + + ivQTJoPsJpEaBYqB5MhVDoWXG7k= + + hash2 + + RGmVeRj5DRrFUa5MXdmNFkBjgQ36aeQry/lA1BPouVw= + + + Headers/SDL_assert.h + + hash + + jivoIZ5yW7MgO2v6F+1YvGOJWR8= + + hash2 + + yMKv6HVRTXC2W7l452UuXgdW+M+vibiq4LQ2aCdnqwY= + + + Headers/SDL_atomic.h + + hash + + rOcZ6HNCHAmsNs8YUDZhXHsr5ZY= + + hash2 + + 1HDtzTX/jmfZ9ot8/D5HCsWy4IZ1uDldT+9Dzmj9s/0= + + + Headers/SDL_audio.h + + hash + + LshWT/F/ti28u082zh8NR5Heyfs= + + hash2 + + nYKKb/uO2/Bv0v3q3PXCHYVKQbbI6oKpU48lOfnqKng= + + + Headers/SDL_bits.h + + hash + + 6MCXzkSXZ4Ba7/9ksdUPcPxqpLc= + + hash2 + + moRKyE7GpCyBzoyt2Eib7jqJ/ZMO1vTCWSjtHxP3Few= + + + Headers/SDL_blendmode.h + + hash + + R0DC+lE1tBOALESAuGbbBcDXF24= + + hash2 + + RenGdg0rma2j6y9cRvHsTayslInVYfxWvAS3fGUv+Aw= + + + Headers/SDL_clipboard.h + + hash + + b+5HV8QB/rNcY8Xz71ajJZhr9FY= + + hash2 + + XVgTrx+C/8H9Hrh/SRD4u4/rsx5MeBiKb2Orzx6fKVI= + + + Headers/SDL_config.h + + hash + + l5ABB4L5TeaS330tbcy9KDXLPac= + + hash2 + + sE2G4pd3n561p4+21N81iP4tfDYZZJzBZXWPP6p/mBg= + + + Headers/SDL_config_macosx.h + + hash + + 3lY30NQIV7sFo+Ce/0XJBB+YflQ= + + hash2 + + se0xLNfnj5Ig1d+lztpy3TwLAcobQpuZyazQEIq4CWY= + + + Headers/SDL_copying.h + + hash + + topzn4TKpy+ywX5uHtzXPOb/EWk= + + hash2 + + nXmV15qsx3hLFUWnzkeUClLg3jiNhHqPhtRo9asqkPI= + + + Headers/SDL_cpuinfo.h + + hash + + 8lfAvzjR1oAp7NCnQ3BWcg+1r9Q= + + hash2 + + qYzYfXAi/BYNeEbnQYmUlPLUL/PulaOOr8OsHfSjsRg= + + + Headers/SDL_endian.h + + hash + + H1L8fY4HW+f8vQV7wfwg8l8InNE= + + hash2 + + hNZWtHixgbKiE2tKI9keHXwROhYkBEIJNQ2+z7/wMsY= + + + Headers/SDL_error.h + + hash + + 49T3z69eEOBmcFSD+a3fLxkRZOI= + + hash2 + + opYHpNi3KkdFqGsd3UAYaRbjKh6kPnu16gD/ZZQ/jt8= + + + Headers/SDL_events.h + + hash + + FuEAwdraV8RQUvikwiJsBU+BvgU= + + hash2 + + 1cCZTd0bp9wCMWIgIskBJ/lcKp9+oCIIsv29VH1cig4= + + + Headers/SDL_filesystem.h + + hash + + Crb7zcawxwO9xIPsgIN3ReJoxOw= + + hash2 + + gbEIOb+sole9bGyyqz07wj5AtyPnXo24/K5VfkhvLeo= + + + Headers/SDL_gamecontroller.h + + hash + + 0NV7L1j2TuK3E6FdhL0czeer1to= + + hash2 + + MJHprGlkMStQF9QI6MCXQKuhrR1tJTXdijIAEpPL530= + + + Headers/SDL_gesture.h + + hash + + eOm09gklTuHk4CAnY8+N+AOWU1w= + + hash2 + + 3Jzx8qKPiLBEeimWYGEMjqACvDfAm8j8qVyKZPyot6o= + + + Headers/SDL_haptic.h + + hash + + 2P/RhAx7yVVau0ImN4IRu0PKJwM= + + hash2 + + Irx+pJE/K0azzSlTpm9Rst1n2EmNLTpbLY3kmpEinJ0= + + + Headers/SDL_hidapi.h + + hash + + gerk57ttnkfcx6wYtwW4C8Utt60= + + hash2 + + KYySNLgkVh6cIAiPYvDk/Yk2SvQafFytdHZOKvxzZOw= + + + Headers/SDL_hints.h + + hash + + +M2qodT/2soISYAEpdT3MEr/6Vs= + + hash2 + + G81ks4vg4d2wX8M1A4lvtGhjcn4JELUWG530HusZ/uc= + + + Headers/SDL_joystick.h + + hash + + jysMk9XSVCu1RsQaKMy7NK/ydEk= + + hash2 + + +Uayc+1W3Cr4Zk6MCAlZCVapvL3/N0AoGj3mnzYkTbI= + + + Headers/SDL_keyboard.h + + hash + + OMk4UgbZGcy1RSun2YUn80lMUf4= + + hash2 + + 6tXVx8/1/Znz22jiWHAYj5HabbWFy6OX8ja/wjVsdQU= + + + Headers/SDL_keycode.h + + hash + + /gYNJozr+yBDTnj6PPj3IF13uAo= + + hash2 + + AAntYN4oYvALmT9TZZQllgQaaaqpuhHkSarIrtuqey0= + + + Headers/SDL_loadso.h + + hash + + BnfRn8au8VfS8nOYd+Og6CqxQtQ= + + hash2 + + ViHwtMagclIe0iTK9fUbYuesvQ1nv8rC+9675X5dk3Y= + + + Headers/SDL_locale.h + + hash + + B7JrCP37jV9Gs+1YoxkyXgaA3/0= + + hash2 + + NfBH1vQU0RfPYtW0AzShJFmv8MulTUzc/kAQZ9C6ygw= + + + Headers/SDL_log.h + + hash + + XPI2+5BeRRt4r4AZFyBHx6NFfLI= + + hash2 + + 7ZQQ+sD80Xz3gFNPv1VmGtlUrhJ7btQpnXfH0yYftmg= + + + Headers/SDL_main.h + + hash + + mt6Qt7cysL9ELiX/afcdCS8j8fE= + + hash2 + + 3rtYDjufA+B1dK46pyBCWiIWZamOcuMyyrTTh8vQBcE= + + + Headers/SDL_messagebox.h + + hash + + Jyd+Z0oJkOyu7GqxrGoj92kX33E= + + hash2 + + b/2BVaUV14/zSF4P4vqsBKHdmHO39bcQh+Iw5cIjiUs= + + + Headers/SDL_metal.h + + hash + + lgw/jPhvwM+nsqA0HITlLaESI1Y= + + hash2 + + 8e2u8Lp9cp5tnfxLkwSsyerOA213Z/Con+WQe/U+QYI= + + + Headers/SDL_misc.h + + hash + + GDQyA6cRKZi3FJ3qPXMgIG19Xic= + + hash2 + + ouIje4tauHjysbz3ObtyFzAB6lTCyhdwb4ndhQ3Z9n4= + + + Headers/SDL_mouse.h + + hash + + /zT8qbG7n+yGKjzdYvJb35NHMQA= + + hash2 + + 2ery5DHLhfdNZqIkXFi5IxAwNnbfG2TMJlFCGymAHvQ= + + + Headers/SDL_mutex.h + + hash + + aG58/w/wU0G8N8tgCdD8ecbbbe4= + + hash2 + + XUDMtaFm4qzh0iFhMP4Gnl9H7BDRtZnfFZx6UVvw6uQ= + + + Headers/SDL_name.h + + hash + + gOOcQtMKUerG67yCwPV+v0SxzCw= + + hash2 + + 1axhwEeJjGS3A6JMrU9788wocEZRLyZNcaB/B6XRAMs= + + + Headers/SDL_opengl.h + + hash + + 7MOKOotpNv44gQkv/pUbTkn8IoE= + + hash2 + + zkUzBymyrkFMTK7R21v1NrPrq1gm+FRVcWQ+BUYXbjo= + + + Headers/SDL_opengl_glext.h + + hash + + R1nHUIy7DpXf2BZyzO+VT33j3bE= + + hash2 + + RwZcYEr740srGsvbe4jQhHYTTNwp+e05VGDjqyNkYr4= + + + Headers/SDL_opengles.h + + hash + + gNgYlz+/uLgvjec6r0AW7Be2DJI= + + hash2 + + gpV8CPolshDeFDmSwWdoE1szEa7jY6uW06q61w+0g8k= + + + Headers/SDL_opengles2.h + + hash + + JAC+taTpU61KVFADpZvYguHPY/A= + + hash2 + + 4VPaduWoVpL5jy0A9S+tAoRXm0of4K+lqTZ2HRlDNT8= + + + Headers/SDL_opengles2_gl2.h + + hash + + g4y04zPFy1H/qujSNGRd0vB7ClQ= + + hash2 + + 9GAwK0cg8YPrZHWVqMGpyVwKFz3Ay9VHiyz70jzWltA= + + + Headers/SDL_opengles2_gl2ext.h + + hash + + bTlnL+42kbi+n/gH//X2p0pqeuM= + + hash2 + + 5404JOHXH4pGO60gR/uLhz9zW6fKy9jvdMw5i1WTcpo= + + + Headers/SDL_opengles2_gl2platform.h + + hash + + ByFMXJFtjcRglS/e0+DujyjC3dM= + + hash2 + + wlKRTsmTMrnniYqSvQklJfb9VF07J0MDpqzYOcfiDDY= + + + Headers/SDL_opengles2_khrplatform.h + + hash + + NLpJq9uBqjOpWhXISOQHPnTp/XQ= + + hash2 + + djHeDyzmR0e/2JNIbqpBqgi56MXlxlAbgcBFxuvwSyo= + + + Headers/SDL_pixels.h + + hash + + APvnWU71OTgg8nF2ZBdVu+N0OGo= + + hash2 + + 6VtEW9W48E5QT0eLhrzHm6TM2ZuskMlgjcaAwsilSlY= + + + Headers/SDL_platform.h + + hash + + JyhvZJ6mimIDxPRre47+A+osGd0= + + hash2 + + kFkda6rujclSedLQHSLp3sHKJvJ2hAFf2+7Q2dot404= + + + Headers/SDL_power.h + + hash + + CZt1YqOCoPff+ZX5nsgeLs2abiM= + + hash2 + + WuENeZEjbiPGXwmzKPi9End4ZRDqxD7gCGDnrgDjgJc= + + + Headers/SDL_quit.h + + hash + + tPbozXmJ7atsNAXI2sOnYySxxE0= + + hash2 + + 2OKt3rHgSNG9eTiP7SP0r7oy3zP+xN2i4s6r9i2FLOg= + + + Headers/SDL_rect.h + + hash + + kqjXkTEBuW6w8WzZHdU/d2WAUFo= + + hash2 + + 2mPgLRzSwu+/R1wEa7Y+XEMCET2BiR9zlShcJwP5cs8= + + + Headers/SDL_render.h + + hash + + CLUOyCUt6T3xY6E9lFiBLY1i/QE= + + hash2 + + VCJZrEOy3hcl7Bq30mH27Jcu+Gp18hcYV+D66fVIEBg= + + + Headers/SDL_revision.h + + hash + + OmV6TNE1P8Dm+ekO7PlOPkvpJJM= + + hash2 + + N8c2dyfn8XOV6qOfJ3wvKHDejG3snUbYdTt3G3/xhUQ= + + + Headers/SDL_rwops.h + + hash + + IXS0xK9O3gbA348D/K54bX00jMQ= + + hash2 + + MrzLK/Rr9ocRxfcTqnfCsK9d9yk0LWeEUpY0K0W75fk= + + + Headers/SDL_scancode.h + + hash + + hdZZsrw3GG9ip8M6vPnOL15uMdw= + + hash2 + + nW0t4/HcTU6vmHaWe09doRAegyK9csf/JGzmtt2/BrU= + + + Headers/SDL_sensor.h + + hash + + cAqB17JLRyFN5n8MAJrIkY1AqBw= + + hash2 + + uBC/ANStES2g4wtWn7Mk/4MJeHp+wr7wEfurKfzv3dc= + + + Headers/SDL_shape.h + + hash + + UWs6SO78LJYdrBlGs1tY10DrJUI= + + hash2 + + CFJEICmokjpIcOYx1hTgGJ8fqLjaj+k9VuxREOUDJaA= + + + Headers/SDL_stdinc.h + + hash + + szUPEBCjG3ebEMe82C6eQMLI/y8= + + hash2 + + qGT36qQMxAikB+sXlGCds+Aq/0qtbWavnirGCAZgDbY= + + + Headers/SDL_surface.h + + hash + + ftoqu6gZKB/N3yryQou+cUh9je8= + + hash2 + + vLUFvoxnI/PrGU536Zn/Gnmn5xKGyT90odV9xWq6tMI= + + + Headers/SDL_system.h + + hash + + 1s3wXhPZadLYb9TJ91XF00EMR18= + + hash2 + + Vc+19XPMeZqmwF2RlFN971kwfHkfZdnLfIsUkY9F7Ns= + + + Headers/SDL_syswm.h + + hash + + oxVccR9E/ARZqqPl+BjVMKNdDNw= + + hash2 + + LRcM/Fhcqwv6Qf3YhgaLGkkEuFqXFTvl6pWfaQCNw9g= + + + Headers/SDL_thread.h + + hash + + DIPlScdm3rXv8lLpnZO8dv3WdqA= + + hash2 + + QHM6ylW6Lc4ABxZGkpUMKrwV7Ej2UJcjVmZgJh+dxjY= + + + Headers/SDL_timer.h + + hash + + Ltnz4OrvTc2eABw8uX/0L/nuca4= + + hash2 + + W+hRt3f94ZHPIpQ4xN7D/U0OVtTTZBAA9Nphtq8fgeg= + + + Headers/SDL_touch.h + + hash + + rwC4gDU7l5kY0ZZEIhd7RT3axUU= + + hash2 + + DVFA8C77fiVhyFFtqV/lglia5PShpk967pt+huaItwo= + + + Headers/SDL_types.h + + hash + + ARZgD/WKM8LbXYcplBCyws5jmmo= + + hash2 + + vvFj+McRdgHRX9HrooW/E7jX5C74rxEwVv18wMyvSC0= + + + Headers/SDL_version.h + + hash + + AMz/OkviAL5DxrVsU10QNjaUNco= + + hash2 + + I0igXaRZ/ebCnnacXopXPvIyGPd7+h4Yrs0ydEG0V5M= + + + Headers/SDL_video.h + + hash + + ZqBdFUmdUvi+QDEU++tA3zZQNpE= + + hash2 + + c9F2lhGXv5qDM8uuWXFpMn5gIzzcrrfRk5vczLtR3X4= + + + Headers/SDL_vulkan.h + + hash + + k22upiGXgz0TzSKkWtDwaKrV2fw= + + hash2 + + kg2f48mMRh4+Ev5cnsEDDyQqf6YbP7YqWNhykRYzgDo= + + + Headers/begin_code.h + + hash + + A52Lh/nQ4BliCI+RMHIt9xSD6Fs= + + hash2 + + KDdUdsUtYxmo0ZyQLNwOHuWTKFaJnujcoeF6edzp4SE= + + + Headers/close_code.h + + hash + + l886gK0WewF9TLQ2N3wuuk5YOK8= + + hash2 + + 9JEAM14hpDRV6tDnQvfIFtBJQXHOEJSONje5q/PKlTo= + + + Resources/Info.plist + + hash + + OxWHBbdJFecUEehMjei2Rc0U5Fs= + + hash2 + + ScLuGB7K21JNtYbbGu7tXZiTvB3bCi8bFdDLJGAMcOs= + + + Resources/License.txt + + hash + + VoVWJNSXNFkj10nxdQKhgCnXJjE= + + hash2 + + IY4SCBLx/QICUzUIfTw/MBGoah4TzstyMeoTfwWSuDM= + + + Resources/ReadMe.txt + + hash + + JbxWZUxpvG/D7Yb/DvLh6Aunla0= + + hash2 + + pOpMHiFjj3pIWQqZ5KDvYNyp0twU7vCZmLwAQJLVkT4= + + + Resources/default.metallib + + hash + + 50m0avYLiIBc6a4gWqXN3tnFlpU= + + hash2 + + w8jS3DIw3CKDRfJsmiA4MWFVPhdpi2zi+WEO1Zfw8+8= + + + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/Current b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/Current new file mode 100644 index 00000000000..8c7e5a667f1 --- /dev/null +++ b/vs/sdl2net/Xcode/macOS/SDL2.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/vs/sdl2net/Xcode/package b/vs/sdl2net/Xcode/package new file mode 100644 index 00000000000..6e6b5707c25 --- /dev/null +++ b/vs/sdl2net/Xcode/package @@ -0,0 +1,272 @@ +#! /bin/csh -ef + +set prog = `/usr/bin/basename $0` +set usage = "Usage: $prog [-f] root-dir info-file [tiff-file] [-d dest-dir] [-r resource-dir] [-traditional | -gnutar]" +set noglob + +if (-x /usr/bin/mkbom) then + set mkbom=/usr/bin/mkbom + set lsbom=/usr/bin/lsbom +else + set mkbom=/usr/etc/mkbom + set lsbom=/usr/etc/lsbom +endif + +if (-x /usr/bin/awk) then + set awk=/usr/bin/awk +else + set awk=/bin/awk +endif + +set gnutar=/usr/bin/gnutar +set tar=/usr/bin/tar +set pax=/bin/pax + +# gather parameters +if ($#argv == 0) then + echo $usage + exit(1) +endif + +while ( $#argv > 0 ) + switch ( $argv[1] ) + case -d: + if ( $?destDir ) then + echo ${prog}: dest-dir parameter already set to ${destDir}. + echo $usage + exit(1) + else if ( $#argv < 2 ) then + echo ${prog}: -d option requires destination directory. + echo $usage + exit(1) + else + set destDir = $argv[2] + shift; shift + breaksw + endif + case -f: + if ( $?rootDir ) then + echo ${prog}: root-dir parameter already set to ${rootDir}. + echo $usage + exit(1) + else if ( $#argv < 2 ) then + echo ${prog}: -f option requires package root directory. + echo $usage + exit(1) + else + set rootDir = $argv[2] + set fflag + shift; shift + breaksw + endif + case -r: + if ( $?resDir ) then + echo ${prog}: resource-dir parameter already set to ${resDir}. + echo $usage + exit(1) + else if ( $#argv < 2 ) then + echo ${prog}: -r option requires package resource directory. + echo $usage + exit(1) + else + set resDir = $argv[2] + shift; shift + breaksw + endif + case -traditional: + set usetar + unset usegnutar + unset usepax + breaksw + case -gnutar: + set usegnutar + unset usepax + unset usetar + case -B: + # We got long file names, better use bigtar instead + #set archiver = /NextAdmin/Installer.app/Resources/installer_bigtar + echo 2>&1 ${prog}: -B flag is no longer relevant. + shift + breaksw + case -*: + echo ${prog}: Unknown option: $argv[1] + echo $usage + exit(1) + case *.info: + if ( $?info ) then + echo ${prog}: info-file parameter already set to ${info}. + echo $usage + exit(1) + else + set info = "$argv[1]" + shift + breaksw + endif + case *.tiff: + if ( $?tiff ) then + echo ${prog}: tiff-file parameter already set to ${tiff}. + echo $usage + exit(1) + else + set tiff = "$argv[1]" + shift + breaksw + endif + default: + if ( $?rootDir ) then + echo ${prog}: unrecognized parameter: $argv[1] + echo $usage + exit(1) + else + set rootDir = "$argv[1]" + shift + breaksw + endif + endsw +end + +# check for mandatory parameters +if ( ! $?rootDir ) then + echo ${prog}: missing root-dir parameter. + echo $usage + exit(1) +else if ( ! $?info) then + echo ${prog}: missing info-file parameter. + echo $usage + exit(1) +endif + +# destDir gets default value if unset on command line +if ( $?destDir ) then + /bin/mkdir -p $destDir +else + set destDir = . +endif + +# derive the root name for the package from the root name of the info file +set root = `/usr/bin/basename $info .info` + +# create package directory +set pkg = ${destDir}/${root}.pkg +echo Generating Installer package $pkg ... +if ( -e $pkg ) /bin/rm -rf $pkg +/bin/mkdir -p -m 755 $pkg + +# (gnu)tar/pax and compress root directory to package archive +echo -n " creating package archive ... " +if ( $?fflag ) then + set pkgTop = ${rootDir:t} + set parent = ${rootDir:h} + if ( "$parent" == "$pkgTop" ) set parent = "." +else + set parent = $rootDir + set pkgTop = . +endif +if ( $?usetar ) then + set pkgArchive = $pkg/$root.tar.Z + (cd $parent; $tar -w $pkgTop) | /usr/bin/compress -f -c > $pkgArchive +else if ( $?usegnutar ) then + set pkgArchive = $pkg/$root.tar.gz + (cd $parent; $gnutar zcf $pkgArchive $pkgTop) +else + set pkgArchive = $pkg/$root.pax.gz + (cd $parent; $pax -w -z -x cpio $pkgTop) > $pkgArchive +endif +/bin/chmod 444 $pkgArchive +echo done. + +# copy info file to package +set pkgInfo = $pkg/$root.info +echo -n " copying ${info:t} ... " +/bin/cp $info $pkgInfo +/bin/chmod 444 $pkgInfo +echo done. + +# copy tiff file to package +if ( $?tiff ) then + set pkgTiff = $pkg/$root.tiff + echo -n " copying ${tiff:t} ... " + /bin/cp $tiff $pkgTiff + /bin/chmod 444 $pkgTiff + echo done. +endif + +# copy resources to package +if ( $?resDir ) then + echo -n " copying ${resDir:t} ... " + + # don't want to see push/pop output + pushd $resDir > /dev/null + # get lists of resources. We'll want to change + # permissions on just these things later. + set directoriesInResDir = `find . -type d` + set filesInResDir = `find . -type f` + popd > /dev/null + + # copy the resource directory contents into the package directory + foreach resFile (`ls $resDir`) + cp -r $resDir/$resFile $pkg + end + + pushd $pkg > /dev/null + # Change all directories to +r+x, except the package + # directory itself + foreach resFileItem ($directoriesInResDir) + if ( $resFileItem != "." ) then + chmod 555 $resFileItem + endif + end + # change all flat files to read only + foreach resFileItem ($filesInResDir) + chmod 444 $resFileItem + end + popd > /dev/null + + echo done. +endif + +# generate bom file +set pkgBom = $pkg/$root.bom +echo -n " generating bom file ... " +/bin/rm -f $pkgBom +if ( $?fflag ) then + $mkbom $parent $pkgBom >& /dev/null +else + $mkbom $rootDir $pkgBom >& /dev/null +endif +/bin/chmod 444 $pkgArchive +echo done. + +# generate sizes file +set pkgSizes = $pkg/$root.sizes +echo -n " generating sizes file ... " + +# compute number of files in package +set numFiles = `$lsbom -s $pkgBom | /usr/bin/wc -l` + +# compute package size when compressed +@ compressedSize = `/usr/bin/du -k -s $pkg | $awk '{print $1}'` +@ compressedSize += 3 # add 1KB each for sizes, location, status files + +@ infoSize = `/bin/ls -s $pkgInfo | $awk '{print $1}'` +@ bomSize = `/bin/ls -s $pkgBom | $awk '{print $1}'` +if ( $?tiff ) then + @ tiffSize = `/bin/ls -s $pkgTiff | $awk '{print $1}'` +else + @ tiffSize = 0 +endif + +@ installedSize = `/usr/bin/du -k -s $rootDir | $awk '{print $1}'` +@ installedSize += $infoSize + $bomSize + $tiffSize + 3 + +# echo size parameters to sizes file +echo NumFiles $numFiles > $pkgSizes +echo InstalledSize $installedSize >> $pkgSizes +echo CompressedSize $compressedSize >> $pkgSizes +echo done. +echo " ... finished generating $pkg." + +exit(0) + +# end package + diff --git a/vs/sdl2net/Xcode/pkg-support/SDL_net.info b/vs/sdl2net/Xcode/pkg-support/SDL_net.info new file mode 100644 index 00000000000..d665b0ff527 --- /dev/null +++ b/vs/sdl2net/Xcode/pkg-support/SDL_net.info @@ -0,0 +1,15 @@ +Title SDL_net 1.2.5 +Version 1 +Description SDL_net Library for Mac OS X (http://www.libsdl.org/projects/SDL_net) +DefaultLocation /Library/Frameworks +Diskname (null) +DeleteWarning +NeedsAuthorization NO +DisableStop NO +UseUserMask NO +Application NO +Relocatable YES +Required NO +InstallOnly NO +RequiresReboot NO +InstallFat NO diff --git a/vs/sdl2net/Xcode/pkg-support/mkpackage.sh b/vs/sdl2net/Xcode/pkg-support/mkpackage.sh new file mode 100644 index 00000000000..478c0c1c112 --- /dev/null +++ b/vs/sdl2net/Xcode/pkg-support/mkpackage.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +# Generic script to create a package with Project Builder in mind +# There should only be one version of this script for all projects! + +FRAMEWORK="$1" +VARIANT="$2" + +PACKAGE="$FRAMEWORK" +PACKAGE_RESOURCES="pkg-support/resources" + +echo "Building package for $FRAMEWORK.framework" +echo "Will fetch resources from $PACKAGE_RESOURCES" +echo "Will create the package $PACKAGE.pkg" + +# create a copy of the framework +mkdir -p build/pkg-tmp +xcrun CpMac -r "build/$FRAMEWORK.framework" build/pkg-tmp/ + +./package build/pkg-tmp "pkg-support/$PACKAGE.info" -d build -r "$PACKAGE_RESOURCES" + +# remove temporary files +rm -rf build/pkg-tmp + +# compress +(cd build; tar -zcvf "$PACKAGE.pkg.tar.gz" "$PACKAGE.pkg") + diff --git a/vs/sdl2net/Xcode/pkg-support/resources/ReadMe.txt b/vs/sdl2net/Xcode/pkg-support/resources/ReadMe.txt new file mode 100644 index 00000000000..938df9ee52f --- /dev/null +++ b/vs/sdl2net/Xcode/pkg-support/resources/ReadMe.txt @@ -0,0 +1,26 @@ +SDL_net is an example portable network library for use with SDL. + +The source code is available from: http://www.libsdl.org/projects/SDL_net + +This library is distributed under the terms of the zlib license: http://www.zlib.net/zlib_license.html + +This packages contains the SDL2_net.framework for OS X. Conforming with Apple guidelines, this framework contains both the SDL runtime component and development header files. + +Requirements: +You must have the SDL2.framework installed. + +To Install: +Copy the SDL2_net.framework to /Library/Frameworks + +You may alternatively install it in /Library/Frameworks if your access privileges are not high enough. (Be aware that the Xcode templates we provide in the SDL Developer Extras package may require some adjustment for your system if you do this.) + +Use in CMake projects: +SDL2_net.framework can be used in CMake projects using the following pattern: +``` +find_package(SDL2_net REQUIRED) +add_executable(my_game ${MY_SOURCES}) +target_link_libraries(my_game PRIVATE SDL2_net::SDL2_net) +``` +If SDL2_net.framework is installed in a non-standard location, +please refer to the following link for ways to configure CMake: +https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search-procedure diff --git a/vs/sdl2net/Xcode/pkg-support/resources/Welcome.txt b/vs/sdl2net/Xcode/pkg-support/resources/Welcome.txt new file mode 100644 index 00000000000..31367134504 --- /dev/null +++ b/vs/sdl2net/Xcode/pkg-support/resources/Welcome.txt @@ -0,0 +1,3 @@ +This package installs the SDL_net library into /Library/Frameworks. You can also install it in +/Library/Frameworks if your access privileges are not high enough. + diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL.h new file mode 100644 index 00000000000..28778f39258 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL.h @@ -0,0 +1,232 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL.h + * + * Main include header for the SDL library + */ + + +#ifndef SDL_h_ +#define SDL_h_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* As of version 0.5, SDL is loaded dynamically into the application */ + +/** + * \name SDL_INIT_* + * + * These are the flags which may be passed to SDL_Init(). You should + * specify the subsystems which you will be using in your application. + */ +/* @{ */ +#define SDL_INIT_TIMER 0x00000001u +#define SDL_INIT_AUDIO 0x00000010u +#define SDL_INIT_VIDEO 0x00000020u /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */ +#define SDL_INIT_JOYSTICK 0x00000200u /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */ +#define SDL_INIT_HAPTIC 0x00001000u +#define SDL_INIT_GAMECONTROLLER 0x00002000u /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */ +#define SDL_INIT_EVENTS 0x00004000u +#define SDL_INIT_SENSOR 0x00008000u +#define SDL_INIT_NOPARACHUTE 0x00100000u /**< compatibility; this flag is ignored. */ +#define SDL_INIT_EVERYTHING ( \ + SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ + SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_SENSOR \ + ) +/* @} */ + +/** + * Initialize the SDL library. + * + * SDL_Init() simply forwards to calling SDL_InitSubSystem(). Therefore, the + * two may be used interchangeably. Though for readability of your code + * SDL_InitSubSystem() might be preferred. + * + * The file I/O (for example: SDL_RWFromFile) and threading (SDL_CreateThread) + * subsystems are initialized by default. Message boxes + * (SDL_ShowSimpleMessageBox) also attempt to work without initializing the + * video subsystem, in hopes of being useful in showing an error dialog when + * SDL_Init fails. You must specifically initialize other subsystems if you + * use them in your application. + * + * Logging (such as SDL_Log) works without initialization, too. + * + * `flags` may be any of the following OR'd together: + * + * - `SDL_INIT_TIMER`: timer subsystem + * - `SDL_INIT_AUDIO`: audio subsystem + * - `SDL_INIT_VIDEO`: video subsystem; automatically initializes the events + * subsystem + * - `SDL_INIT_JOYSTICK`: joystick subsystem; automatically initializes the + * events subsystem + * - `SDL_INIT_HAPTIC`: haptic (force feedback) subsystem + * - `SDL_INIT_GAMECONTROLLER`: controller subsystem; automatically + * initializes the joystick subsystem + * - `SDL_INIT_EVENTS`: events subsystem + * - `SDL_INIT_EVERYTHING`: all of the above subsystems + * - `SDL_INIT_NOPARACHUTE`: compatibility; this flag is ignored + * + * Subsystem initialization is ref-counted, you must call SDL_QuitSubSystem() + * for each SDL_InitSubSystem() to correctly shutdown a subsystem manually (or + * call SDL_Quit() to force shutdown). If a subsystem is already loaded then + * this call will increase the ref-count and return. + * + * \param flags subsystem initialization flags + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_InitSubSystem + * \sa SDL_Quit + * \sa SDL_SetMainReady + * \sa SDL_WasInit + */ +extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); + +/** + * Compatibility function to initialize the SDL library. + * + * In SDL2, this function and SDL_Init() are interchangeable. + * + * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + * \sa SDL_Quit + * \sa SDL_QuitSubSystem + */ +extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); + +/** + * Shut down specific SDL subsystems. + * + * If you start a subsystem using a call to that subsystem's init function + * (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(), + * SDL_QuitSubSystem() and SDL_WasInit() will not work. You will need to use + * that subsystem's quit function (SDL_VideoQuit()) directly instead. But + * generally, you should not be using those functions directly anyhow; use + * SDL_Init() instead. + * + * You still need to call SDL_Quit() even if you close all open subsystems + * with SDL_QuitSubSystem(). + * + * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_InitSubSystem + * \sa SDL_Quit + */ +extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); + +/** + * Get a mask of the specified subsystems which are currently initialized. + * + * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. + * \returns a mask of all initialized subsystems if `flags` is 0, otherwise it + * returns the initialization status of the specified subsystems. + * + * The return value does not include SDL_INIT_NOPARACHUTE. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + * \sa SDL_InitSubSystem + */ +extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); + +/** + * Clean up all initialized subsystems. + * + * You should call this function even if you have already shutdown each + * initialized subsystem with SDL_QuitSubSystem(). It is safe to call this + * function even in the case of errors in initialization. + * + * If you start a subsystem using a call to that subsystem's init function + * (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(), + * then you must use that subsystem's quit function (SDL_VideoQuit()) to shut + * it down before calling SDL_Quit(). But generally, you should not be using + * those functions directly anyhow; use SDL_Init() instead. + * + * You can use this function with atexit() to ensure that it is run when your + * application is shutdown, but it is not wise to do this from a library or + * other dynamically loaded code. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + * \sa SDL_QuitSubSystem + */ +extern DECLSPEC void SDLCALL SDL_Quit(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_assert.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_assert.h new file mode 100644 index 00000000000..835e3eadc3a --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_assert.h @@ -0,0 +1,324 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_assert_h_ +#define SDL_assert_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SDL_ASSERT_LEVEL +#ifdef SDL_DEFAULT_ASSERT_LEVEL +#define SDL_ASSERT_LEVEL SDL_DEFAULT_ASSERT_LEVEL +#elif defined(_DEBUG) || defined(DEBUG) || \ + (defined(__GNUC__) && !defined(__OPTIMIZE__)) +#define SDL_ASSERT_LEVEL 2 +#else +#define SDL_ASSERT_LEVEL 1 +#endif +#endif /* SDL_ASSERT_LEVEL */ + +/* +These are macros and not first class functions so that the debugger breaks +on the assertion line and not in some random guts of SDL, and so each +assert can have unique static variables associated with it. +*/ + +#if defined(_MSC_VER) +/* Don't include intrin.h here because it contains C++ code */ + extern void __cdecl __debugbreak(void); + #define SDL_TriggerBreakpoint() __debugbreak() +#elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) ) + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) +#elif ( defined(__APPLE__) && (defined(__arm64__) || defined(__aarch64__)) ) /* this might work on other ARM targets, but this is a known quantity... */ + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #22\n\t" ) +#elif defined(__APPLE__) && defined(__arm__) + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "bkpt #22\n\t" ) +#elif defined(__386__) && defined(__WATCOMC__) + #define SDL_TriggerBreakpoint() { _asm { int 0x03 } } +#elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__) + #include + #define SDL_TriggerBreakpoint() raise(SIGTRAP) +#else + /* How do we trigger breakpoints on this platform? */ + #define SDL_TriggerBreakpoint() +#endif + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */ +# define SDL_FUNCTION __func__ +#elif ((__GNUC__ >= 2) || defined(_MSC_VER) || defined (__WATCOMC__)) +# define SDL_FUNCTION __FUNCTION__ +#else +# define SDL_FUNCTION "???" +#endif +#define SDL_FILE __FILE__ +#define SDL_LINE __LINE__ + +/* +sizeof (x) makes the compiler still parse the expression even without +assertions enabled, so the code is always checked at compile time, but +doesn't actually generate code for it, so there are no side effects or +expensive checks at run time, just the constant size of what x WOULD be, +which presumably gets optimized out as unused. +This also solves the problem of... + + int somevalue = blah(); + SDL_assert(somevalue == 1); + +...which would cause compiles to complain that somevalue is unused if we +disable assertions. +*/ + +/* "while (0,0)" fools Microsoft's compiler's /W4 warning level into thinking + this condition isn't constant. And looks like an owl's face! */ +#ifdef _MSC_VER /* stupid /W4 warnings. */ +#define SDL_NULL_WHILE_LOOP_CONDITION (0,0) +#else +#define SDL_NULL_WHILE_LOOP_CONDITION (0) +#endif + +#define SDL_disabled_assert(condition) \ + do { (void) sizeof ((condition)); } while (SDL_NULL_WHILE_LOOP_CONDITION) + +typedef enum +{ + SDL_ASSERTION_RETRY, /**< Retry the assert immediately. */ + SDL_ASSERTION_BREAK, /**< Make the debugger trigger a breakpoint. */ + SDL_ASSERTION_ABORT, /**< Terminate the program. */ + SDL_ASSERTION_IGNORE, /**< Ignore the assert. */ + SDL_ASSERTION_ALWAYS_IGNORE /**< Ignore the assert from now on. */ +} SDL_AssertState; + +typedef struct SDL_AssertData +{ + int always_ignore; + unsigned int trigger_count; + const char *condition; + const char *filename; + int linenum; + const char *function; + const struct SDL_AssertData *next; +} SDL_AssertData; + +#if (SDL_ASSERT_LEVEL > 0) + +/* Never call this directly. Use the SDL_assert* macros. */ +extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *, + const char *, + const char *, int) +#if defined(__clang__) +#if __has_feature(attribute_analyzer_noreturn) +/* this tells Clang's static analysis that we're a custom assert function, + and that the analyzer should assume the condition was always true past this + SDL_assert test. */ + __attribute__((analyzer_noreturn)) +#endif +#endif +; + +/* the do {} while(0) avoids dangling else problems: + if (x) SDL_assert(y); else blah(); + ... without the do/while, the "else" could attach to this macro's "if". + We try to handle just the minimum we need here in a macro...the loop, + the static vars, and break points. The heavy lifting is handled in + SDL_ReportAssertion(), in SDL_assert.c. +*/ +#define SDL_enabled_assert(condition) \ + do { \ + while ( !(condition) ) { \ + static struct SDL_AssertData sdl_assert_data = { \ + 0, 0, #condition, 0, 0, 0, 0 \ + }; \ + const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \ + if (sdl_assert_state == SDL_ASSERTION_RETRY) { \ + continue; /* go again. */ \ + } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \ + SDL_TriggerBreakpoint(); \ + } \ + break; /* not retrying. */ \ + } \ + } while (SDL_NULL_WHILE_LOOP_CONDITION) + +#endif /* enabled assertions support code */ + +/* Enable various levels of assertions. */ +#if SDL_ASSERT_LEVEL == 0 /* assertions disabled */ +# define SDL_assert(condition) SDL_disabled_assert(condition) +# define SDL_assert_release(condition) SDL_disabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 1 /* release settings. */ +# define SDL_assert(condition) SDL_disabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 2 /* normal settings. */ +# define SDL_assert(condition) SDL_enabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 3 /* paranoid settings. */ +# define SDL_assert(condition) SDL_enabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_enabled_assert(condition) +#else +# error Unknown assertion level. +#endif + +/* this assertion is never disabled at any level. */ +#define SDL_assert_always(condition) SDL_enabled_assert(condition) + + +/** + * A callback that fires when an SDL assertion fails. + * + * \param data a pointer to the SDL_AssertData structure corresponding to the + * current assertion + * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler() + * \returns an SDL_AssertState value indicating how to handle the failure. + */ +typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)( + const SDL_AssertData* data, void* userdata); + +/** + * Set an application-defined assertion handler. + * + * This function allows an application to show its own assertion UI and/or + * force the response to an assertion failure. If the application doesn't + * provide this, SDL will try to do the right thing, popping up a + * system-specific GUI dialog, and probably minimizing any fullscreen windows. + * + * This callback may fire from any thread, but it runs wrapped in a mutex, so + * it will only fire from one thread at a time. + * + * This callback is NOT reset to SDL's internal handler upon SDL_Quit()! + * + * \param handler the SDL_AssertionHandler function to call when an assertion + * fails or NULL for the default handler + * \param userdata a pointer that is passed to `handler` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAssertionHandler + */ +extern DECLSPEC void SDLCALL SDL_SetAssertionHandler( + SDL_AssertionHandler handler, + void *userdata); + +/** + * Get the default assertion handler. + * + * This returns the function pointer that is called by default when an + * assertion is triggered. This is an internal function provided by SDL, that + * is used for assertions when SDL_SetAssertionHandler() hasn't been used to + * provide a different function. + * + * \returns the default SDL_AssertionHandler that is called when an assert + * triggers. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_GetAssertionHandler + */ +extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetDefaultAssertionHandler(void); + +/** + * Get the current assertion handler. + * + * This returns the function pointer that is called when an assertion is + * triggered. This is either the value last passed to + * SDL_SetAssertionHandler(), or if no application-specified function is set, + * is equivalent to calling SDL_GetDefaultAssertionHandler(). + * + * The parameter `puserdata` is a pointer to a void*, which will store the + * "userdata" pointer that was passed to SDL_SetAssertionHandler(). This value + * will always be NULL for the default handler. If you don't care about this + * data, it is safe to pass a NULL pointer to this function to ignore it. + * + * \param puserdata pointer which is filled with the "userdata" pointer that + * was passed to SDL_SetAssertionHandler() + * \returns the SDL_AssertionHandler that is called when an assert triggers. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_SetAssertionHandler + */ +extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puserdata); + +/** + * Get a list of all assertion failures. + * + * This function gets all assertions triggered since the last call to + * SDL_ResetAssertionReport(), or the start of the program. + * + * The proper way to examine this data looks something like this: + * + * ```c + * const SDL_AssertData *item = SDL_GetAssertionReport(); + * while (item) { + * printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\\n", + * item->condition, item->function, item->filename, + * item->linenum, item->trigger_count, + * item->always_ignore ? "yes" : "no"); + * item = item->next; + * } + * ``` + * + * \returns a list of all failed assertions or NULL if the list is empty. This + * memory should not be modified or freed by the application. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ResetAssertionReport + */ +extern DECLSPEC const SDL_AssertData * SDLCALL SDL_GetAssertionReport(void); + +/** + * Clear the list of all assertion failures. + * + * This function will clear the list of all assertions triggered up to that + * point. Immediately following this call, SDL_GetAssertionReport will return + * no items. In addition, any previously-triggered assertions will be reset to + * a trigger_count of zero, and their always_ignore state will be false. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAssertionReport + */ +extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void); + + +/* these had wrong naming conventions until 2.0.4. Please update your app! */ +#define SDL_assert_state SDL_AssertState +#define SDL_assert_data SDL_AssertData + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_assert_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_atomic.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_atomic.h new file mode 100644 index 00000000000..02a93fb43c0 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_atomic.h @@ -0,0 +1,395 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_atomic.h + * + * Atomic operations. + * + * IMPORTANT: + * If you are not an expert in concurrent lockless programming, you should + * only be using the atomic lock and reference counting functions in this + * file. In all other cases you should be protecting your data structures + * with full mutexes. + * + * The list of "safe" functions to use are: + * SDL_AtomicLock() + * SDL_AtomicUnlock() + * SDL_AtomicIncRef() + * SDL_AtomicDecRef() + * + * Seriously, here be dragons! + * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * + * You can find out a little more about lockless programming and the + * subtle issues that can arise here: + * http://msdn.microsoft.com/en-us/library/ee418650%28v=vs.85%29.aspx + * + * There's also lots of good information here: + * http://www.1024cores.net/home/lock-free-algorithms + * http://preshing.com/ + * + * These operations may or may not actually be implemented using + * processor specific atomic operations. When possible they are + * implemented as true processor specific atomic operations. When that + * is not possible the are implemented using locks that *do* use the + * available atomic operations. + * + * All of the atomic operations that modify memory are full memory barriers. + */ + +#ifndef SDL_atomic_h_ +#define SDL_atomic_h_ + +#include +#include + +#include + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name SDL AtomicLock + * + * The atomic locks are efficient spinlocks using CPU instructions, + * but are vulnerable to starvation and can spin forever if a thread + * holding a lock has been terminated. For this reason you should + * minimize the code executed inside an atomic lock and never do + * expensive things like API or system calls while holding them. + * + * The atomic locks are not safe to lock recursively. + * + * Porting Note: + * The spin lock functions and type are required and can not be + * emulated because they are used in the atomic emulation code. + */ +/* @{ */ + +typedef int SDL_SpinLock; + +/** + * Try to lock a spin lock by setting it to a non-zero value. + * + * ***Please note that spinlocks are dangerous if you don't know what you're + * doing. Please be careful using any sort of spinlock!*** + * + * \param lock a pointer to a lock variable + * \returns SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already + * held. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicLock + * \sa SDL_AtomicUnlock + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicTryLock(SDL_SpinLock *lock); + +/** + * Lock a spin lock by setting it to a non-zero value. + * + * ***Please note that spinlocks are dangerous if you don't know what you're + * doing. Please be careful using any sort of spinlock!*** + * + * \param lock a pointer to a lock variable + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicTryLock + * \sa SDL_AtomicUnlock + */ +extern DECLSPEC void SDLCALL SDL_AtomicLock(SDL_SpinLock *lock); + +/** + * Unlock a spin lock by setting it to 0. + * + * Always returns immediately. + * + * ***Please note that spinlocks are dangerous if you don't know what you're + * doing. Please be careful using any sort of spinlock!*** + * + * \param lock a pointer to a lock variable + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicLock + * \sa SDL_AtomicTryLock + */ +extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock); + +/* @} *//* SDL AtomicLock */ + + +/** + * The compiler barrier prevents the compiler from reordering + * reads and writes to globally visible variables across the call. + */ +#if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__) +void _ReadWriteBarrier(void); +#pragma intrinsic(_ReadWriteBarrier) +#define SDL_CompilerBarrier() _ReadWriteBarrier() +#elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) +/* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */ +#define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory") +#elif defined(__WATCOMC__) +extern __inline void SDL_CompilerBarrier(void); +#pragma aux SDL_CompilerBarrier = "" parm [] modify exact []; +#else +#define SDL_CompilerBarrier() \ +{ SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); } +#endif + +/** + * Memory barriers are designed to prevent reads and writes from being + * reordered by the compiler and being seen out of order on multi-core CPUs. + * + * A typical pattern would be for thread A to write some data and a flag, and + * for thread B to read the flag and get the data. In this case you would + * insert a release barrier between writing the data and the flag, + * guaranteeing that the data write completes no later than the flag is + * written, and you would insert an acquire barrier between reading the flag + * and reading the data, to ensure that all the reads associated with the flag + * have completed. + * + * In this pattern you should always see a release barrier paired with an + * acquire barrier and you should gate the data reads/writes with a single + * flag variable. + * + * For more information on these semantics, take a look at the blog post: + * http://preshing.com/20120913/acquire-and-release-semantics + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC void SDLCALL SDL_MemoryBarrierReleaseFunction(void); +extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquireFunction(void); + +#if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("lwsync" : : : "memory") +#elif defined(__GNUC__) && defined(__aarch64__) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") +#elif defined(__GNUC__) && defined(__arm__) +#if 0 /* defined(__LINUX__) || defined(__ANDROID__) */ +/* Information from: + https://chromium.googlesource.com/chromium/chromium/+/trunk/base/atomicops_internals_arm_gcc.h#19 + + The Linux kernel provides a helper function which provides the right code for a memory barrier, + hard-coded at address 0xffff0fa0 +*/ +typedef void (*SDL_KernelMemoryBarrierFunc)(); +#define SDL_MemoryBarrierRelease() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)() +#define SDL_MemoryBarrierAcquire() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)() +#elif 0 /* defined(__QNXNTO__) */ +#include + +#define SDL_MemoryBarrierRelease() __cpu_membarrier() +#define SDL_MemoryBarrierAcquire() __cpu_membarrier() +#else +#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) || defined(__ARM_ARCH_8A__) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") +#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_5TE__) +#ifdef __thumb__ +/* The mcr instruction isn't available in thumb mode, use real functions */ +#define SDL_MEMORY_BARRIER_USES_FUNCTION +#define SDL_MemoryBarrierRelease() SDL_MemoryBarrierReleaseFunction() +#define SDL_MemoryBarrierAcquire() SDL_MemoryBarrierAcquireFunction() +#else +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") +#endif /* __thumb__ */ +#else +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("" : : : "memory") +#endif /* __LINUX__ || __ANDROID__ */ +#endif /* __GNUC__ && __arm__ */ +#else +#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) +/* This is correct for all CPUs on Solaris when using Solaris Studio 12.1+. */ +#include +#define SDL_MemoryBarrierRelease() __machine_rel_barrier() +#define SDL_MemoryBarrierAcquire() __machine_acq_barrier() +#else +/* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */ +#define SDL_MemoryBarrierRelease() SDL_CompilerBarrier() +#define SDL_MemoryBarrierAcquire() SDL_CompilerBarrier() +#endif +#endif + +/** + * \brief A type representing an atomic integer value. It is a struct + * so people don't accidentally use numeric operations on it. + */ +typedef struct { int value; } SDL_atomic_t; + +/** + * Set an atomic variable to a new value if it is currently an old value. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable to be modified + * \param oldval the old value + * \param newval the new value + * \returns SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicCASPtr + * \sa SDL_AtomicGet + * \sa SDL_AtomicSet + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval); + +/** + * Set an atomic variable to a value. + * + * This function also acts as a full memory barrier. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable to be modified + * \param v the desired value + * \returns the previous value of the atomic variable. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicGet + */ +extern DECLSPEC int SDLCALL SDL_AtomicSet(SDL_atomic_t *a, int v); + +/** + * Get the value of an atomic variable. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable + * \returns the current value of an atomic variable. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicSet + */ +extern DECLSPEC int SDLCALL SDL_AtomicGet(SDL_atomic_t *a); + +/** + * Add to an atomic variable. + * + * This function also acts as a full memory barrier. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable to be modified + * \param v the desired value to add + * \returns the previous value of the atomic variable. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicDecRef + * \sa SDL_AtomicIncRef + */ +extern DECLSPEC int SDLCALL SDL_AtomicAdd(SDL_atomic_t *a, int v); + +/** + * \brief Increment an atomic variable used as a reference count. + */ +#ifndef SDL_AtomicIncRef +#define SDL_AtomicIncRef(a) SDL_AtomicAdd(a, 1) +#endif + +/** + * \brief Decrement an atomic variable used as a reference count. + * + * \return SDL_TRUE if the variable reached zero after decrementing, + * SDL_FALSE otherwise + */ +#ifndef SDL_AtomicDecRef +#define SDL_AtomicDecRef(a) (SDL_AtomicAdd(a, -1) == 1) +#endif + +/** + * Set a pointer to a new value if it is currently an old value. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to a pointer + * \param oldval the old pointer value + * \param newval the new pointer value + * \returns SDL_TRUE if the pointer was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicCAS + * \sa SDL_AtomicGetPtr + * \sa SDL_AtomicSetPtr + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCASPtr(void **a, void *oldval, void *newval); + +/** + * Set a pointer to a value atomically. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to a pointer + * \param v the desired pointer value + * \returns the previous value of the pointer. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicCASPtr + * \sa SDL_AtomicGetPtr + */ +extern DECLSPEC void* SDLCALL SDL_AtomicSetPtr(void **a, void* v); + +/** + * Get the value of a pointer atomically. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to a pointer + * \returns the current value of a pointer. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicCASPtr + * \sa SDL_AtomicSetPtr + */ +extern DECLSPEC void* SDLCALL SDL_AtomicGetPtr(void **a); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#include + +#endif /* SDL_atomic_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_audio.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_audio.h new file mode 100644 index 00000000000..d8bd141d2a0 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_audio.h @@ -0,0 +1,1462 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/* !!! FIXME: several functions in here need Doxygen comments. */ + +/** + * \file SDL_audio.h + * + * Access to the raw audio mixing buffer for the SDL library. + */ + +#ifndef SDL_audio_h_ +#define SDL_audio_h_ + +#include +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Audio format flags. + * + * These are what the 16 bits in SDL_AudioFormat currently mean... + * (Unspecified bits are always zero). + * + * \verbatim + ++-----------------------sample is signed if set + || + || ++-----------sample is bigendian if set + || || + || || ++---sample is float if set + || || || + || || || +---sample bit size---+ + || || || | | + 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 + \endverbatim + * + * There are macros in SDL 2.0 and later to query these bits. + */ +typedef Uint16 SDL_AudioFormat; + +/** + * \name Audio flags + */ +/* @{ */ + +#define SDL_AUDIO_MASK_BITSIZE (0xFF) +#define SDL_AUDIO_MASK_DATATYPE (1<<8) +#define SDL_AUDIO_MASK_ENDIAN (1<<12) +#define SDL_AUDIO_MASK_SIGNED (1<<15) +#define SDL_AUDIO_BITSIZE(x) (x & SDL_AUDIO_MASK_BITSIZE) +#define SDL_AUDIO_ISFLOAT(x) (x & SDL_AUDIO_MASK_DATATYPE) +#define SDL_AUDIO_ISBIGENDIAN(x) (x & SDL_AUDIO_MASK_ENDIAN) +#define SDL_AUDIO_ISSIGNED(x) (x & SDL_AUDIO_MASK_SIGNED) +#define SDL_AUDIO_ISINT(x) (!SDL_AUDIO_ISFLOAT(x)) +#define SDL_AUDIO_ISLITTLEENDIAN(x) (!SDL_AUDIO_ISBIGENDIAN(x)) +#define SDL_AUDIO_ISUNSIGNED(x) (!SDL_AUDIO_ISSIGNED(x)) + +/** + * \name Audio format flags + * + * Defaults to LSB byte order. + */ +/* @{ */ +#define AUDIO_U8 0x0008 /**< Unsigned 8-bit samples */ +#define AUDIO_S8 0x8008 /**< Signed 8-bit samples */ +#define AUDIO_U16LSB 0x0010 /**< Unsigned 16-bit samples */ +#define AUDIO_S16LSB 0x8010 /**< Signed 16-bit samples */ +#define AUDIO_U16MSB 0x1010 /**< As above, but big-endian byte order */ +#define AUDIO_S16MSB 0x9010 /**< As above, but big-endian byte order */ +#define AUDIO_U16 AUDIO_U16LSB +#define AUDIO_S16 AUDIO_S16LSB +/* @} */ + +/** + * \name int32 support + */ +/* @{ */ +#define AUDIO_S32LSB 0x8020 /**< 32-bit integer samples */ +#define AUDIO_S32MSB 0x9020 /**< As above, but big-endian byte order */ +#define AUDIO_S32 AUDIO_S32LSB +/* @} */ + +/** + * \name float32 support + */ +/* @{ */ +#define AUDIO_F32LSB 0x8120 /**< 32-bit floating point samples */ +#define AUDIO_F32MSB 0x9120 /**< As above, but big-endian byte order */ +#define AUDIO_F32 AUDIO_F32LSB +/* @} */ + +/** + * \name Native audio byte ordering + */ +/* @{ */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define AUDIO_U16SYS AUDIO_U16LSB +#define AUDIO_S16SYS AUDIO_S16LSB +#define AUDIO_S32SYS AUDIO_S32LSB +#define AUDIO_F32SYS AUDIO_F32LSB +#else +#define AUDIO_U16SYS AUDIO_U16MSB +#define AUDIO_S16SYS AUDIO_S16MSB +#define AUDIO_S32SYS AUDIO_S32MSB +#define AUDIO_F32SYS AUDIO_F32MSB +#endif +/* @} */ + +/** + * \name Allow change flags + * + * Which audio format changes are allowed when opening a device. + */ +/* @{ */ +#define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001 +#define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002 +#define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004 +#define SDL_AUDIO_ALLOW_SAMPLES_CHANGE 0x00000008 +#define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE|SDL_AUDIO_ALLOW_SAMPLES_CHANGE) +/* @} */ + +/* @} *//* Audio flags */ + +/** + * This function is called when the audio device needs more data. + * + * \param userdata An application-specific parameter saved in + * the SDL_AudioSpec structure + * \param stream A pointer to the audio data buffer. + * \param len The length of that buffer in bytes. + * + * Once the callback returns, the buffer will no longer be valid. + * Stereo samples are stored in a LRLRLR ordering. + * + * You can choose to avoid callbacks and use SDL_QueueAudio() instead, if + * you like. Just open your audio device with a NULL callback. + */ +typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream, + int len); + +/** + * The calculated values in this structure are calculated by SDL_OpenAudio(). + * + * For multi-channel audio, the default SDL channel mapping is: + * 2: FL FR (stereo) + * 3: FL FR LFE (2.1 surround) + * 4: FL FR BL BR (quad) + * 5: FL FR FC BL BR (quad + center) + * 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR) + * 7: FL FR FC LFE BC SL SR (6.1 surround) + * 8: FL FR FC LFE BL BR SL SR (7.1 surround) + */ +typedef struct SDL_AudioSpec +{ + int freq; /**< DSP frequency -- samples per second */ + SDL_AudioFormat format; /**< Audio data format */ + Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */ + Uint8 silence; /**< Audio buffer silence value (calculated) */ + Uint16 samples; /**< Audio buffer size in sample FRAMES (total samples divided by channel count) */ + Uint16 padding; /**< Necessary for some compile environments */ + Uint32 size; /**< Audio buffer size in bytes (calculated) */ + SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */ + void *userdata; /**< Userdata passed to callback (ignored for NULL callbacks). */ +} SDL_AudioSpec; + + +struct SDL_AudioCVT; +typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, + SDL_AudioFormat format); + +/** + * \brief Upper limit of filters in SDL_AudioCVT + * + * The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is + * currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers, + * one of which is the terminating NULL pointer. + */ +#define SDL_AUDIOCVT_MAX_FILTERS 9 + +/** + * \struct SDL_AudioCVT + * \brief A structure to hold a set of audio conversion filters and buffers. + * + * Note that various parts of the conversion pipeline can take advantage + * of SIMD operations (like SSE2, for example). SDL_AudioCVT doesn't require + * you to pass it aligned data, but can possibly run much faster if you + * set both its (buf) field to a pointer that is aligned to 16 bytes, and its + * (len) field to something that's a multiple of 16, if possible. + */ +#if defined(__GNUC__) && !defined(__CHERI_PURE_CAPABILITY__) +/* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't + pad it out to 88 bytes to guarantee ABI compatibility between compilers. + This is not a concern on CHERI architectures, where pointers must be stored + at aligned locations otherwise they will become invalid, and thus structs + containing pointers cannot be packed without giving a warning or error. + vvv + The next time we rev the ABI, make sure to size the ints and add padding. +*/ +#define SDL_AUDIOCVT_PACKED __attribute__((packed)) +#else +#define SDL_AUDIOCVT_PACKED +#endif +/* */ +typedef struct SDL_AudioCVT +{ + int needed; /**< Set to 1 if conversion possible */ + SDL_AudioFormat src_format; /**< Source audio format */ + SDL_AudioFormat dst_format; /**< Target audio format */ + double rate_incr; /**< Rate conversion increment */ + Uint8 *buf; /**< Buffer to hold entire audio data */ + int len; /**< Length of original audio buffer */ + int len_cvt; /**< Length of converted audio buffer */ + int len_mult; /**< buffer must be len*len_mult big */ + double len_ratio; /**< Given len, final size is len*len_ratio */ + SDL_AudioFilter filters[SDL_AUDIOCVT_MAX_FILTERS + 1]; /**< NULL-terminated list of filter functions */ + int filter_index; /**< Current audio conversion function */ +} SDL_AUDIOCVT_PACKED SDL_AudioCVT; + + +/* Function prototypes */ + +/** + * \name Driver discovery functions + * + * These functions return the list of built in audio drivers, in the + * order that they are normally initialized by default. + */ +/* @{ */ + +/** + * Use this function to get the number of built-in audio drivers. + * + * This function returns a hardcoded number. This never returns a negative + * value; if there are no drivers compiled into this build of SDL, this + * function returns zero. The presence of a driver in this list does not mean + * it will function, it just means SDL is capable of interacting with that + * interface. For example, a build of SDL might have esound support, but if + * there's no esound server available, SDL's esound driver would fail if used. + * + * By default, SDL tries all drivers, in its preferred order, until one is + * found to be usable. + * + * \returns the number of built-in audio drivers. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioDriver + */ +extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void); + +/** + * Use this function to get the name of a built in audio driver. + * + * The list of audio drivers is given in the order that they are normally + * initialized by default; the drivers that seem more reasonable to choose + * first (as far as the SDL developers believe) are earlier in the list. + * + * The names of drivers are all simple, low-ASCII identifiers, like "alsa", + * "coreaudio" or "xaudio2". These never have Unicode characters, and are not + * meant to be proper names. + * + * \param index the index of the audio driver; the value ranges from 0 to + * SDL_GetNumAudioDrivers() - 1 + * \returns the name of the audio driver at the requested index, or NULL if an + * invalid index was specified. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumAudioDrivers + */ +extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index); +/* @} */ + +/** + * \name Initialization and cleanup + * + * \internal These functions are used internally, and should not be used unless + * you have a specific need to specify the audio driver you want to + * use. You should normally use SDL_Init() or SDL_InitSubSystem(). + */ +/* @{ */ + +/** + * Use this function to initialize a particular audio driver. + * + * This function is used internally, and should not be used unless you have a + * specific need to designate the audio driver you want to use. You should + * normally use SDL_Init() or SDL_InitSubSystem(). + * + * \param driver_name the name of the desired audio driver + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AudioQuit + */ +extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); + +/** + * Use this function to shut down audio if you initialized it with + * SDL_AudioInit(). + * + * This function is used internally, and should not be used unless you have a + * specific need to specify the audio driver you want to use. You should + * normally use SDL_Quit() or SDL_QuitSubSystem(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AudioInit + */ +extern DECLSPEC void SDLCALL SDL_AudioQuit(void); +/* @} */ + +/** + * Get the name of the current audio driver. + * + * The returned string points to internal static memory and thus never becomes + * invalid, even if you quit the audio subsystem and initialize a new driver + * (although such a case would return a different static string from another + * call to this function, of course). As such, you should not modify or free + * the returned string. + * + * \returns the name of the current audio driver or NULL if no driver has been + * initialized. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AudioInit + */ +extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); + +/** + * This function is a legacy means of opening the audio device. + * + * This function remains for compatibility with SDL 1.2, but also because it's + * slightly easier to use than the new functions in SDL 2.0. The new, more + * powerful, and preferred way to do this is SDL_OpenAudioDevice(). + * + * This function is roughly equivalent to: + * + * ```c + * SDL_OpenAudioDevice(NULL, 0, desired, obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); + * ``` + * + * With two notable exceptions: + * + * - If `obtained` is NULL, we use `desired` (and allow no changes), which + * means desired will be modified to have the correct values for silence, + * etc, and SDL will convert any differences between your app's specific + * request and the hardware behind the scenes. + * - The return value is always success or failure, and not a device ID, which + * means you can only have one device open at a time with this function. + * + * \param desired an SDL_AudioSpec structure representing the desired output + * format. Please refer to the SDL_OpenAudioDevice + * documentation for details on how to prepare this structure. + * \param obtained an SDL_AudioSpec structure filled in with the actual + * parameters, or NULL. + * \returns 0 if successful, placing the actual hardware parameters in the + * structure pointed to by `obtained`. + * + * If `obtained` is NULL, the audio data passed to the callback + * function will be guaranteed to be in the requested format, and + * will be automatically converted to the actual hardware audio + * format if necessary. If `obtained` is NULL, `desired` will have + * fields modified. + * + * This function returns a negative error code on failure to open the + * audio device or failure to set up the audio thread; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CloseAudio + * \sa SDL_LockAudio + * \sa SDL_PauseAudio + * \sa SDL_UnlockAudio + */ +extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, + SDL_AudioSpec * obtained); + +/** + * SDL Audio Device IDs. + * + * A successful call to SDL_OpenAudio() is always device id 1, and legacy + * SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls + * always returns devices >= 2 on success. The legacy calls are good both + * for backwards compatibility and when you don't care about multiple, + * specific, or capture devices. + */ +typedef Uint32 SDL_AudioDeviceID; + +/** + * Get the number of built-in audio devices. + * + * This function is only valid after successfully initializing the audio + * subsystem. + * + * Note that audio capture support is not implemented as of SDL 2.0.4, so the + * `iscapture` parameter is for future expansion and should always be zero for + * now. + * + * This function will return -1 if an explicit list of devices can't be + * determined. Returning -1 is not an error. For example, if SDL is set up to + * talk to a remote audio server, it can't list every one available on the + * Internet, but it will still allow a specific host to be specified in + * SDL_OpenAudioDevice(). + * + * In many common cases, when this function returns a value <= 0, it can still + * successfully open the default device (NULL for first argument of + * SDL_OpenAudioDevice()). + * + * This function may trigger a complete redetect of available hardware. It + * should not be called for each iteration of a loop, but rather once at the + * start of a loop: + * + * ```c + * // Don't do this: + * for (int i = 0; i < SDL_GetNumAudioDevices(0); i++) + * + * // do this instead: + * const int count = SDL_GetNumAudioDevices(0); + * for (int i = 0; i < count; ++i) { do_something_here(); } + * ``` + * + * \param iscapture zero to request playback devices, non-zero to request + * recording devices + * \returns the number of available devices exposed by the current driver or + * -1 if an explicit list of devices can't be determined. A return + * value of -1 does not necessarily mean an error condition. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioDeviceName + * \sa SDL_OpenAudioDevice + */ +extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture); + +/** + * Get the human-readable name of a specific audio device. + * + * This function is only valid after successfully initializing the audio + * subsystem. The values returned by this function reflect the latest call to + * SDL_GetNumAudioDevices(); re-call that function to redetect available + * hardware. + * + * The string returned by this function is UTF-8 encoded, read-only, and + * managed internally. You are not to free it. If you need to keep the string + * for any length of time, you should make your own copy of it, as it will be + * invalid next time any of several other SDL functions are called. + * + * \param index the index of the audio device; valid values range from 0 to + * SDL_GetNumAudioDevices() - 1 + * \param iscapture non-zero to query the list of recording devices, zero to + * query the list of output devices. + * \returns the name of the audio device at the requested index, or NULL on + * error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumAudioDevices + */ +extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, + int iscapture); + +/** + * Get the preferred audio format of a specific audio device. + * + * This function is only valid after a successfully initializing the audio + * subsystem. The values returned by this function reflect the latest call to + * SDL_GetNumAudioDevices(); re-call that function to redetect available + * hardware. + * + * `spec` will be filled with the sample rate, sample format, and channel + * count. + * + * \param index the index of the audio device; valid values range from 0 to + * SDL_GetNumAudioDevices() - 1 + * \param iscapture non-zero to query the list of recording devices, zero to + * query the list of output devices. + * \param spec The SDL_AudioSpec to be initialized by this function. + * \returns 0 on success, nonzero on error + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetNumAudioDevices + */ +extern DECLSPEC int SDLCALL SDL_GetAudioDeviceSpec(int index, + int iscapture, + SDL_AudioSpec *spec); + + +/** + * Open a specific audio device. + * + * SDL_OpenAudio(), unlike this function, always acts on device ID 1. As such, + * this function will never return a 1 so as not to conflict with the legacy + * function. + * + * Please note that SDL 2.0 before 2.0.5 did not support recording; as such, + * this function would fail if `iscapture` was not zero. Starting with SDL + * 2.0.5, recording is implemented and this value can be non-zero. + * + * Passing in a `device` name of NULL requests the most reasonable default + * (and is equivalent to what SDL_OpenAudio() does to choose a device). The + * `device` name is a UTF-8 string reported by SDL_GetAudioDeviceName(), but + * some drivers allow arbitrary and driver-specific strings, such as a + * hostname/IP address for a remote audio server, or a filename in the + * diskaudio driver. + * + * An opened audio device starts out paused, and should be enabled for playing + * by calling SDL_PauseAudioDevice(devid, 0) when you are ready for your audio + * callback function to be called. Since the audio driver may modify the + * requested size of the audio buffer, you should allocate any local mixing + * buffers after you open the audio device. + * + * The audio callback runs in a separate thread in most cases; you can prevent + * race conditions between your callback and other threads without fully + * pausing playback with SDL_LockAudioDevice(). For more information about the + * callback, see SDL_AudioSpec. + * + * Managing the audio spec via 'desired' and 'obtained': + * + * When filling in the desired audio spec structure: + * + * - `desired->freq` should be the frequency in sample-frames-per-second (Hz). + * - `desired->format` should be the audio format (`AUDIO_S16SYS`, etc). + * - `desired->samples` is the desired size of the audio buffer, in _sample + * frames_ (with stereo output, two samples--left and right--would make a + * single sample frame). This number should be a power of two, and may be + * adjusted by the audio driver to a value more suitable for the hardware. + * Good values seem to range between 512 and 8096 inclusive, depending on + * the application and CPU speed. Smaller values reduce latency, but can + * lead to underflow if the application is doing heavy processing and cannot + * fill the audio buffer in time. Note that the number of sample frames is + * directly related to time by the following formula: `ms = + * (sampleframes*1000)/freq` + * - `desired->size` is the size in _bytes_ of the audio buffer, and is + * calculated by SDL_OpenAudioDevice(). You don't initialize this. + * - `desired->silence` is the value used to set the buffer to silence, and is + * calculated by SDL_OpenAudioDevice(). You don't initialize this. + * - `desired->callback` should be set to a function that will be called when + * the audio device is ready for more data. It is passed a pointer to the + * audio buffer, and the length in bytes of the audio buffer. This function + * usually runs in a separate thread, and so you should protect data + * structures that it accesses by calling SDL_LockAudioDevice() and + * SDL_UnlockAudioDevice() in your code. Alternately, you may pass a NULL + * pointer here, and call SDL_QueueAudio() with some frequency, to queue + * more audio samples to be played (or for capture devices, call + * SDL_DequeueAudio() with some frequency, to obtain audio samples). + * - `desired->userdata` is passed as the first parameter to your callback + * function. If you passed a NULL callback, this value is ignored. + * + * `allowed_changes` can have the following flags OR'd together: + * + * - `SDL_AUDIO_ALLOW_FREQUENCY_CHANGE` + * - `SDL_AUDIO_ALLOW_FORMAT_CHANGE` + * - `SDL_AUDIO_ALLOW_CHANNELS_CHANGE` + * - `SDL_AUDIO_ALLOW_ANY_CHANGE` + * + * These flags specify how SDL should behave when a device cannot offer a + * specific feature. If the application requests a feature that the hardware + * doesn't offer, SDL will always try to get the closest equivalent. + * + * For example, if you ask for float32 audio format, but the sound card only + * supports int16, SDL will set the hardware to int16. If you had set + * SDL_AUDIO_ALLOW_FORMAT_CHANGE, SDL will change the format in the `obtained` + * structure. If that flag was *not* set, SDL will prepare to convert your + * callback's float32 audio to int16 before feeding it to the hardware and + * will keep the originally requested format in the `obtained` structure. + * + * The resulting audio specs, varying depending on hardware and on what + * changes were allowed, will then be written back to `obtained`. + * + * If your application can only handle one specific data format, pass a zero + * for `allowed_changes` and let SDL transparently handle any differences. + * + * \param device a UTF-8 string reported by SDL_GetAudioDeviceName() or a + * driver-specific name as appropriate. NULL requests the most + * reasonable default device. + * \param iscapture non-zero to specify a device should be opened for + * recording, not playback + * \param desired an SDL_AudioSpec structure representing the desired output + * format; see SDL_OpenAudio() for more information + * \param obtained an SDL_AudioSpec structure filled in with the actual output + * format; see SDL_OpenAudio() for more information + * \param allowed_changes 0, or one or more flags OR'd together + * \returns a valid device ID that is > 0 on success or 0 on failure; call + * SDL_GetError() for more information. + * + * For compatibility with SDL 1.2, this will never return 1, since + * SDL reserves that ID for the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CloseAudioDevice + * \sa SDL_GetAudioDeviceName + * \sa SDL_LockAudioDevice + * \sa SDL_OpenAudio + * \sa SDL_PauseAudioDevice + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice( + const char *device, + int iscapture, + const SDL_AudioSpec *desired, + SDL_AudioSpec *obtained, + int allowed_changes); + + + +/** + * \name Audio state + * + * Get the current audio state. + */ +/* @{ */ +typedef enum +{ + SDL_AUDIO_STOPPED = 0, + SDL_AUDIO_PLAYING, + SDL_AUDIO_PAUSED +} SDL_AudioStatus; + +/** + * This function is a legacy means of querying the audio device. + * + * New programs might want to use SDL_GetAudioDeviceStatus() instead. This + * function is equivalent to calling... + * + * ```c + * SDL_GetAudioDeviceStatus(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \returns the SDL_AudioStatus of the audio device opened by SDL_OpenAudio(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioDeviceStatus + */ +extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioStatus(void); + +/** + * Use this function to get the current audio state of an audio device. + * + * \param dev the ID of an audio device previously opened with + * SDL_OpenAudioDevice() + * \returns the SDL_AudioStatus of the specified audio device. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PauseAudioDevice + */ +extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev); +/* @} *//* Audio State */ + +/** + * \name Pause audio functions + * + * These functions pause and unpause the audio callback processing. + * They should be called with a parameter of 0 after opening the audio + * device to start playing sound. This is so you can safely initialize + * data for your callback function after opening the audio device. + * Silence will be written to the audio device during the pause. + */ +/* @{ */ + +/** + * This function is a legacy means of pausing the audio device. + * + * New programs might want to use SDL_PauseAudioDevice() instead. This + * function is equivalent to calling... + * + * ```c + * SDL_PauseAudioDevice(1, pause_on); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \param pause_on non-zero to pause, 0 to unpause + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioStatus + * \sa SDL_PauseAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); + +/** + * Use this function to pause and unpause audio playback on a specified + * device. + * + * This function pauses and unpauses the audio callback processing for a given + * device. Newly-opened audio devices start in the paused state, so you must + * call this function with **pause_on**=0 after opening the specified audio + * device to start playing sound. This allows you to safely initialize data + * for your callback function after opening the audio device. Silence will be + * written to the audio device while paused, and the audio callback is + * guaranteed to not be called. Pausing one device does not prevent other + * unpaused devices from running their callbacks. + * + * Pausing state does not stack; even if you pause a device several times, a + * single unpause will start the device playing again, and vice versa. This is + * different from how SDL_LockAudioDevice() works. + * + * If you just need to protect a few variables from race conditions vs your + * callback, you shouldn't pause the audio device, as it will lead to dropouts + * in the audio playback. Instead, you should use SDL_LockAudioDevice(). + * + * \param dev a device opened by SDL_OpenAudioDevice() + * \param pause_on non-zero to pause, 0 to unpause + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev, + int pause_on); +/* @} *//* Pause audio functions */ + +/** + * Load the audio data of a WAVE file into memory. + * + * Loading a WAVE file requires `src`, `spec`, `audio_buf` and `audio_len` to + * be valid pointers. The entire data portion of the file is then loaded into + * memory and decoded if necessary. + * + * If `freesrc` is non-zero, the data source gets automatically closed and + * freed before the function returns. + * + * Supported formats are RIFF WAVE files with the formats PCM (8, 16, 24, and + * 32 bits), IEEE Float (32 bits), Microsoft ADPCM and IMA ADPCM (4 bits), and + * A-law and mu-law (8 bits). Other formats are currently unsupported and + * cause an error. + * + * If this function succeeds, the pointer returned by it is equal to `spec` + * and the pointer to the audio data allocated by the function is written to + * `audio_buf` and its length in bytes to `audio_len`. The SDL_AudioSpec + * members `freq`, `channels`, and `format` are set to the values of the audio + * data in the buffer. The `samples` member is set to a sane default and all + * others are set to zero. + * + * It's necessary to use SDL_FreeWAV() to free the audio data returned in + * `audio_buf` when it is no longer used. + * + * Because of the underspecification of the .WAV format, there are many + * problematic files in the wild that cause issues with strict decoders. To + * provide compatibility with these files, this decoder is lenient in regards + * to the truncation of the file, the fact chunk, and the size of the RIFF + * chunk. The hints `SDL_HINT_WAVE_RIFF_CHUNK_SIZE`, + * `SDL_HINT_WAVE_TRUNCATION`, and `SDL_HINT_WAVE_FACT_CHUNK` can be used to + * tune the behavior of the loading process. + * + * Any file that is invalid (due to truncation, corruption, or wrong values in + * the headers), too big, or unsupported causes an error. Additionally, any + * critical I/O error from the data source will terminate the loading process + * with an error. The function returns NULL on error and in all cases (with + * the exception of `src` being NULL), an appropriate error message will be + * set. + * + * It is required that the data source supports seeking. + * + * Example: + * + * ```c + * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, &spec, &buf, &len); + * ``` + * + * Note that the SDL_LoadWAV macro does this same thing for you, but in a less + * messy way: + * + * ```c + * SDL_LoadWAV("sample.wav", &spec, &buf, &len); + * ``` + * + * \param src The data source for the WAVE data + * \param freesrc If non-zero, SDL will _always_ free the data source + * \param spec An SDL_AudioSpec that will be filled in with the wave file's + * format details + * \param audio_buf A pointer filled with the audio data, allocated by the + * function. + * \param audio_len A pointer filled with the length of the audio data buffer + * in bytes + * \returns This function, if successfully called, returns `spec`, which will + * be filled with the audio data format of the wave source data. + * `audio_buf` will be filled with a pointer to an allocated buffer + * containing the audio data, and `audio_len` is filled with the + * length of that audio buffer in bytes. + * + * This function returns NULL if the .WAV file cannot be opened, uses + * an unknown data format, or is corrupt; call SDL_GetError() for + * more information. + * + * When the application is done with the data returned in + * `audio_buf`, it should call SDL_FreeWAV() to dispose of it. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeWAV + * \sa SDL_LoadWAV + */ +extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, + int freesrc, + SDL_AudioSpec * spec, + Uint8 ** audio_buf, + Uint32 * audio_len); + +/** + * Loads a WAV from a file. + * Compatibility convenience function. + */ +#define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ + SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) + +/** + * Free data previously allocated with SDL_LoadWAV() or SDL_LoadWAV_RW(). + * + * After a WAVE file has been opened with SDL_LoadWAV() or SDL_LoadWAV_RW() + * its data can eventually be freed with SDL_FreeWAV(). It is safe to call + * this function with a NULL pointer. + * + * \param audio_buf a pointer to the buffer created by SDL_LoadWAV() or + * SDL_LoadWAV_RW() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadWAV + * \sa SDL_LoadWAV_RW + */ +extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf); + +/** + * Initialize an SDL_AudioCVT structure for conversion. + * + * Before an SDL_AudioCVT structure can be used to convert audio data it must + * be initialized with source and destination information. + * + * This function will zero out every field of the SDL_AudioCVT, so it must be + * called before the application fills in the final buffer information. + * + * Once this function has returned successfully, and reported that a + * conversion is necessary, the application fills in the rest of the fields in + * SDL_AudioCVT, now that it knows how large a buffer it needs to allocate, + * and then can call SDL_ConvertAudio() to complete the conversion. + * + * \param cvt an SDL_AudioCVT structure filled in with audio conversion + * information + * \param src_format the source format of the audio data; for more info see + * SDL_AudioFormat + * \param src_channels the number of channels in the source + * \param src_rate the frequency (sample-frames-per-second) of the source + * \param dst_format the destination format of the audio data; for more info + * see SDL_AudioFormat + * \param dst_channels the number of channels in the destination + * \param dst_rate the frequency (sample-frames-per-second) of the destination + * \returns 1 if the audio filter is prepared, 0 if no conversion is needed, + * or a negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ConvertAudio + */ +extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, + SDL_AudioFormat src_format, + Uint8 src_channels, + int src_rate, + SDL_AudioFormat dst_format, + Uint8 dst_channels, + int dst_rate); + +/** + * Convert audio data to a desired audio format. + * + * This function does the actual audio data conversion, after the application + * has called SDL_BuildAudioCVT() to prepare the conversion information and + * then filled in the buffer details. + * + * Once the application has initialized the `cvt` structure using + * SDL_BuildAudioCVT(), allocated an audio buffer and filled it with audio + * data in the source format, this function will convert the buffer, in-place, + * to the desired format. + * + * The data conversion may go through several passes; any given pass may + * possibly temporarily increase the size of the data. For example, SDL might + * expand 16-bit data to 32 bits before resampling to a lower frequency, + * shrinking the data size after having grown it briefly. Since the supplied + * buffer will be both the source and destination, converting as necessary + * in-place, the application must allocate a buffer that will fully contain + * the data during its largest conversion pass. After SDL_BuildAudioCVT() + * returns, the application should set the `cvt->len` field to the size, in + * bytes, of the source data, and allocate a buffer that is `cvt->len * + * cvt->len_mult` bytes long for the `buf` field. + * + * The source data should be copied into this buffer before the call to + * SDL_ConvertAudio(). Upon successful return, this buffer will contain the + * converted audio, and `cvt->len_cvt` will be the size of the converted data, + * in bytes. Any bytes in the buffer past `cvt->len_cvt` are undefined once + * this function returns. + * + * \param cvt an SDL_AudioCVT structure that was previously set up by + * SDL_BuildAudioCVT(). + * \returns 0 if the conversion was completed successfully or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BuildAudioCVT + */ +extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt); + +/* SDL_AudioStream is a new audio conversion interface. + The benefits vs SDL_AudioCVT: + - it can handle resampling data in chunks without generating + artifacts, when it doesn't have the complete buffer available. + - it can handle incoming data in any variable size. + - You push data as you have it, and pull it when you need it + */ +/* this is opaque to the outside world. */ +struct _SDL_AudioStream; +typedef struct _SDL_AudioStream SDL_AudioStream; + +/** + * Create a new audio stream. + * + * \param src_format The format of the source audio + * \param src_channels The number of channels of the source audio + * \param src_rate The sampling rate of the source audio + * \param dst_format The format of the desired audio output + * \param dst_channels The number of channels of the desired audio output + * \param dst_rate The sampling rate of the desired audio output + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC SDL_AudioStream * SDLCALL SDL_NewAudioStream(const SDL_AudioFormat src_format, + const Uint8 src_channels, + const int src_rate, + const SDL_AudioFormat dst_format, + const Uint8 dst_channels, + const int dst_rate); + +/** + * Add data to be converted/resampled to the stream. + * + * \param stream The stream the audio data is being added to + * \param buf A pointer to the audio data to add + * \param len The number of bytes to write to the stream + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamPut(SDL_AudioStream *stream, const void *buf, int len); + +/** + * Get converted/resampled data from the stream + * + * \param stream The stream the audio is being requested from + * \param buf A buffer to fill with audio data + * \param len The maximum number of bytes to fill + * \returns the number of bytes read from the stream, or -1 on error + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, int len); + +/** + * Get the number of converted/resampled bytes available. + * + * The stream may be buffering data behind the scenes until it has enough to + * resample correctly, so this number might be lower than what you expect, or + * even be zero. Add more data or flush the stream if you need the data now. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamAvailable(SDL_AudioStream *stream); + +/** + * Tell the stream that you're done sending data, and anything being buffered + * should be converted/resampled and made available immediately. + * + * It is legal to add more data to a stream after flushing, but there will be + * audio gaps in the output. Generally this is intended to signal the end of + * input, so the complete output becomes available. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamFlush(SDL_AudioStream *stream); + +/** + * Clear any pending data in the stream without converting it + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC void SDLCALL SDL_AudioStreamClear(SDL_AudioStream *stream); + +/** + * Free an audio stream + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + */ +extern DECLSPEC void SDLCALL SDL_FreeAudioStream(SDL_AudioStream *stream); + +#define SDL_MIX_MAXVOLUME 128 + +/** + * This function is a legacy means of mixing audio. + * + * This function is equivalent to calling... + * + * ```c + * SDL_MixAudioFormat(dst, src, format, len, volume); + * ``` + * + * ...where `format` is the obtained format of the audio device from the + * legacy SDL_OpenAudio() function. + * + * \param dst the destination for the mixed audio + * \param src the source audio buffer to be mixed + * \param len the length of the audio buffer in bytes + * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME + * for full audio volume + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MixAudioFormat + */ +extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, + Uint32 len, int volume); + +/** + * Mix audio data in a specified format. + * + * This takes an audio buffer `src` of `len` bytes of `format` data and mixes + * it into `dst`, performing addition, volume adjustment, and overflow + * clipping. The buffer pointed to by `dst` must also be `len` bytes of + * `format` data. + * + * This is provided for convenience -- you can mix your own audio data. + * + * Do not use this function for mixing together more than two streams of + * sample data. The output from repeated application of this function may be + * distorted by clipping, because there is no accumulator with greater range + * than the input (not to mention this being an inefficient way of doing it). + * + * It is a common misconception that this function is required to write audio + * data to an output stream in an audio callback. While you can do that, + * SDL_MixAudioFormat() is really only needed when you're mixing a single + * audio stream with a volume adjustment. + * + * \param dst the destination for the mixed audio + * \param src the source audio buffer to be mixed + * \param format the SDL_AudioFormat structure representing the desired audio + * format + * \param len the length of the audio buffer in bytes + * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME + * for full audio volume + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, + const Uint8 * src, + SDL_AudioFormat format, + Uint32 len, int volume); + +/** + * Queue more audio on non-callback devices. + * + * If you are looking to retrieve queued audio from a non-callback capture + * device, you want SDL_DequeueAudio() instead. SDL_QueueAudio() will return + * -1 to signify an error if you use it with capture devices. + * + * SDL offers two ways to feed audio to the device: you can either supply a + * callback that SDL triggers with some frequency to obtain more audio (pull + * method), or you can supply no callback, and then SDL will expect you to + * supply data at regular intervals (push method) with this function. + * + * There are no limits on the amount of data you can queue, short of + * exhaustion of address space. Queued data will drain to the device as + * necessary without further intervention from you. If the device needs audio + * but there is not enough queued, it will play silence to make up the + * difference. This means you will have skips in your audio playback if you + * aren't routinely queueing sufficient data. + * + * This function copies the supplied data, so you are safe to free it when the + * function returns. This function is thread-safe, but queueing to the same + * device from two threads at once does not promise which buffer will be + * queued first. + * + * You may not queue audio on a device that is using an application-supplied + * callback; doing so returns an error. You have to use the audio callback or + * queue audio with this function, but not both. + * + * You should not call SDL_LockAudio() on the device before queueing; SDL + * handles locking internally for this function. + * + * Note that SDL2 does not support planar audio. You will need to resample + * from planar audio formats into a non-planar one (see SDL_AudioFormat) + * before queuing audio. + * + * \param dev the device ID to which we will queue audio + * \param data the data to queue to the device for later playback + * \param len the number of bytes (not samples!) to which `data` points + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_ClearQueuedAudio + * \sa SDL_GetQueuedAudioSize + */ +extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len); + +/** + * Dequeue more audio on non-callback devices. + * + * If you are looking to queue audio for output on a non-callback playback + * device, you want SDL_QueueAudio() instead. SDL_DequeueAudio() will always + * return 0 if you use it with playback devices. + * + * SDL offers two ways to retrieve audio from a capture device: you can either + * supply a callback that SDL triggers with some frequency as the device + * records more audio data, (push method), or you can supply no callback, and + * then SDL will expect you to retrieve data at regular intervals (pull + * method) with this function. + * + * There are no limits on the amount of data you can queue, short of + * exhaustion of address space. Data from the device will keep queuing as + * necessary without further intervention from you. This means you will + * eventually run out of memory if you aren't routinely dequeueing data. + * + * Capture devices will not queue data when paused; if you are expecting to + * not need captured audio for some length of time, use SDL_PauseAudioDevice() + * to stop the capture device from queueing more data. This can be useful + * during, say, level loading times. When unpaused, capture devices will start + * queueing data from that point, having flushed any capturable data available + * while paused. + * + * This function is thread-safe, but dequeueing from the same device from two + * threads at once does not promise which thread will dequeue data first. + * + * You may not dequeue audio from a device that is using an + * application-supplied callback; doing so returns an error. You have to use + * the audio callback, or dequeue audio with this function, but not both. + * + * You should not call SDL_LockAudio() on the device before dequeueing; SDL + * handles locking internally for this function. + * + * \param dev the device ID from which we will dequeue audio + * \param data a pointer into where audio data should be copied + * \param len the number of bytes (not samples!) to which (data) points + * \returns the number of bytes dequeued, which could be less than requested; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_ClearQueuedAudio + * \sa SDL_GetQueuedAudioSize + */ +extern DECLSPEC Uint32 SDLCALL SDL_DequeueAudio(SDL_AudioDeviceID dev, void *data, Uint32 len); + +/** + * Get the number of bytes of still-queued audio. + * + * For playback devices: this is the number of bytes that have been queued for + * playback with SDL_QueueAudio(), but have not yet been sent to the hardware. + * + * Once we've sent it to the hardware, this function can not decide the exact + * byte boundary of what has been played. It's possible that we just gave the + * hardware several kilobytes right before you called this function, but it + * hasn't played any of it yet, or maybe half of it, etc. + * + * For capture devices, this is the number of bytes that have been captured by + * the device and are waiting for you to dequeue. This number may grow at any + * time, so this only informs of the lower-bound of available data. + * + * You may not queue or dequeue audio on a device that is using an + * application-supplied callback; calling this function on such a device + * always returns 0. You have to use the audio callback or queue audio, but + * not both. + * + * You should not call SDL_LockAudio() on the device before querying; SDL + * handles locking internally for this function. + * + * \param dev the device ID of which we will query queued audio size + * \returns the number of bytes (not samples!) of queued audio. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_ClearQueuedAudio + * \sa SDL_QueueAudio + * \sa SDL_DequeueAudio + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev); + +/** + * Drop any queued audio data waiting to be sent to the hardware. + * + * Immediately after this call, SDL_GetQueuedAudioSize() will return 0. For + * output devices, the hardware will start playing silence if more audio isn't + * queued. For capture devices, the hardware will start filling the empty + * queue with new data if the capture device isn't paused. + * + * This will not prevent playback of queued audio that's already been sent to + * the hardware, as we can not undo that, so expect there to be some fraction + * of a second of audio that might still be heard. This can be useful if you + * want to, say, drop any pending music or any unprocessed microphone input + * during a level change in your game. + * + * You may not queue or dequeue audio on a device that is using an + * application-supplied callback; calling this function on such a device + * always returns 0. You have to use the audio callback or queue audio, but + * not both. + * + * You should not call SDL_LockAudio() on the device before clearing the + * queue; SDL handles locking internally for this function. + * + * This function always succeeds and thus returns void. + * + * \param dev the device ID of which to clear the audio queue + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetQueuedAudioSize + * \sa SDL_QueueAudio + * \sa SDL_DequeueAudio + */ +extern DECLSPEC void SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev); + + +/** + * \name Audio lock functions + * + * The lock manipulated by these functions protects the callback function. + * During a SDL_LockAudio()/SDL_UnlockAudio() pair, you can be guaranteed that + * the callback function is not running. Do not call these from the callback + * function or you will cause deadlock. + */ +/* @{ */ + +/** + * This function is a legacy means of locking the audio device. + * + * New programs might want to use SDL_LockAudioDevice() instead. This function + * is equivalent to calling... + * + * ```c + * SDL_LockAudioDevice(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudioDevice + * \sa SDL_UnlockAudio + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_LockAudio(void); + +/** + * Use this function to lock out the audio callback function for a specified + * device. + * + * The lock manipulated by these functions protects the audio callback + * function specified in SDL_OpenAudioDevice(). During a + * SDL_LockAudioDevice()/SDL_UnlockAudioDevice() pair, you can be guaranteed + * that the callback function for that device is not running, even if the + * device is not paused. While a device is locked, any other unpaused, + * unlocked devices may still run their callbacks. + * + * Calling this function from inside your audio callback is unnecessary. SDL + * obtains this lock before calling your function, and releases it when the + * function returns. + * + * You should not hold the lock longer than absolutely necessary. If you hold + * it too long, you'll experience dropouts in your audio playback. Ideally, + * your application locks the device, sets a few variables and unlocks again. + * Do not do heavy work while holding the lock for a device. + * + * It is safe to lock the audio device multiple times, as long as you unlock + * it an equivalent number of times. The callback will not run until the + * device has been unlocked completely in this way. If your application fails + * to unlock the device appropriately, your callback will never run, you might + * hear repeating bursts of audio, and SDL_CloseAudioDevice() will probably + * deadlock. + * + * Internally, the audio device lock is a mutex; if you lock from two threads + * at once, not only will you block the audio callback, you'll block the other + * thread. + * + * \param dev the ID of the device to be locked + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev); + +/** + * This function is a legacy means of unlocking the audio device. + * + * New programs might want to use SDL_UnlockAudioDevice() instead. This + * function is equivalent to calling... + * + * ```c + * SDL_UnlockAudioDevice(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudio + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); + +/** + * Use this function to unlock the audio callback function for a specified + * device. + * + * This function should be paired with a previous SDL_LockAudioDevice() call. + * + * \param dev the ID of the device to be unlocked + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev); +/* @} *//* Audio lock functions */ + +/** + * This function is a legacy means of closing the audio device. + * + * This function is equivalent to calling... + * + * ```c + * SDL_CloseAudioDevice(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_OpenAudio + */ +extern DECLSPEC void SDLCALL SDL_CloseAudio(void); + +/** + * Use this function to shut down audio processing and close the audio device. + * + * The application should close open audio devices once they are no longer + * needed. Calling this function will wait until the device's audio callback + * is not running, release the audio hardware and then clean up internal + * state. No further audio will play from this device once this function + * returns. + * + * This function may block briefly while pending audio data is played by the + * hardware, so that applications don't drop the last buffer of data they + * supplied. + * + * The device ID is invalid as soon as the device is closed, and is eligible + * for reuse in a new SDL_OpenAudioDevice() call immediately. + * + * \param dev an audio device previously opened with SDL_OpenAudioDevice() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_OpenAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_audio_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_bits.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_bits.h new file mode 100644 index 00000000000..d822aff1ea6 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_bits.h @@ -0,0 +1,126 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_bits.h + * + * Functions for fiddling with bits and bitmasks. + */ + +#ifndef SDL_bits_h_ +#define SDL_bits_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_bits.h + */ + +/** + * Get the index of the most significant bit. Result is undefined when called + * with 0. This operation can also be stated as "count leading zeroes" and + * "log base 2". + * + * \return the index of the most significant bit, or -1 if the value is 0. + */ +#if defined(__WATCOMC__) && defined(__386__) +extern __inline int _SDL_bsr_watcom(Uint32); +#pragma aux _SDL_bsr_watcom = \ + "bsr eax, eax" \ + parm [eax] nomemory \ + value [eax] \ + modify exact [eax] nomemory; +#endif + +SDL_FORCE_INLINE int +SDL_MostSignificantBitIndex32(Uint32 x) +{ +#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) + /* Count Leading Zeroes builtin in GCC. + * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html + */ + if (x == 0) { + return -1; + } + return 31 - __builtin_clz(x); +#elif defined(__WATCOMC__) && defined(__386__) + if (x == 0) { + return -1; + } + return _SDL_bsr_watcom(x); +#elif defined(_MSC_VER) + unsigned long index; + if (_BitScanReverse(&index, x)) { + return index; + } + return -1; +#else + /* Based off of Bit Twiddling Hacks by Sean Eron Anderson + * , released in the public domain. + * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog + */ + const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000}; + const int S[] = {1, 2, 4, 8, 16}; + + int msbIndex = 0; + int i; + + if (x == 0) { + return -1; + } + + for (i = 4; i >= 0; i--) + { + if (x & b[i]) + { + x >>= S[i]; + msbIndex |= S[i]; + } + } + + return msbIndex; +#endif +} + +SDL_FORCE_INLINE SDL_bool +SDL_HasExactlyOneBitSet32(Uint32 x) +{ + if (x && !(x & (x - 1))) { + return SDL_TRUE; + } + return SDL_FALSE; +} + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_bits_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_blendmode.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_blendmode.h new file mode 100644 index 00000000000..327ae95a511 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_blendmode.h @@ -0,0 +1,198 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_blendmode.h + * + * Header file declaring the SDL_BlendMode enumeration + */ + +#ifndef SDL_blendmode_h_ +#define SDL_blendmode_h_ + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The blend mode used in SDL_RenderCopy() and drawing operations. + */ +typedef enum +{ + SDL_BLENDMODE_NONE = 0x00000000, /**< no blending + dstRGBA = srcRGBA */ + SDL_BLENDMODE_BLEND = 0x00000001, /**< alpha blending + dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA)) + dstA = srcA + (dstA * (1-srcA)) */ + SDL_BLENDMODE_ADD = 0x00000002, /**< additive blending + dstRGB = (srcRGB * srcA) + dstRGB + dstA = dstA */ + SDL_BLENDMODE_MOD = 0x00000004, /**< color modulate + dstRGB = srcRGB * dstRGB + dstA = dstA */ + SDL_BLENDMODE_MUL = 0x00000008, /**< color multiply + dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA)) + dstA = (srcA * dstA) + (dstA * (1-srcA)) */ + SDL_BLENDMODE_INVALID = 0x7FFFFFFF + + /* Additional custom blend modes can be returned by SDL_ComposeCustomBlendMode() */ + +} SDL_BlendMode; + +/** + * \brief The blend operation used when combining source and destination pixel components + */ +typedef enum +{ + SDL_BLENDOPERATION_ADD = 0x1, /**< dst + src: supported by all renderers */ + SDL_BLENDOPERATION_SUBTRACT = 0x2, /**< dst - src : supported by D3D9, D3D11, OpenGL, OpenGLES */ + SDL_BLENDOPERATION_REV_SUBTRACT = 0x3, /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */ + SDL_BLENDOPERATION_MINIMUM = 0x4, /**< min(dst, src) : supported by D3D9, D3D11 */ + SDL_BLENDOPERATION_MAXIMUM = 0x5 /**< max(dst, src) : supported by D3D9, D3D11 */ +} SDL_BlendOperation; + +/** + * \brief The normalized factor used to multiply pixel components + */ +typedef enum +{ + SDL_BLENDFACTOR_ZERO = 0x1, /**< 0, 0, 0, 0 */ + SDL_BLENDFACTOR_ONE = 0x2, /**< 1, 1, 1, 1 */ + SDL_BLENDFACTOR_SRC_COLOR = 0x3, /**< srcR, srcG, srcB, srcA */ + SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = 0x4, /**< 1-srcR, 1-srcG, 1-srcB, 1-srcA */ + SDL_BLENDFACTOR_SRC_ALPHA = 0x5, /**< srcA, srcA, srcA, srcA */ + SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = 0x6, /**< 1-srcA, 1-srcA, 1-srcA, 1-srcA */ + SDL_BLENDFACTOR_DST_COLOR = 0x7, /**< dstR, dstG, dstB, dstA */ + SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = 0x8, /**< 1-dstR, 1-dstG, 1-dstB, 1-dstA */ + SDL_BLENDFACTOR_DST_ALPHA = 0x9, /**< dstA, dstA, dstA, dstA */ + SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = 0xA /**< 1-dstA, 1-dstA, 1-dstA, 1-dstA */ +} SDL_BlendFactor; + +/** + * Compose a custom blend mode for renderers. + * + * The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept + * the SDL_BlendMode returned by this function if the renderer supports it. + * + * A blend mode controls how the pixels from a drawing operation (source) get + * combined with the pixels from the render target (destination). First, the + * components of the source and destination pixels get multiplied with their + * blend factors. Then, the blend operation takes the two products and + * calculates the result that will get stored in the render target. + * + * Expressed in pseudocode, it would look like this: + * + * ```c + * dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor); + * dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor); + * ``` + * + * Where the functions `colorOperation(src, dst)` and `alphaOperation(src, + * dst)` can return one of the following: + * + * - `src + dst` + * - `src - dst` + * - `dst - src` + * - `min(src, dst)` + * - `max(src, dst)` + * + * The red, green, and blue components are always multiplied with the first, + * second, and third components of the SDL_BlendFactor, respectively. The + * fourth component is not used. + * + * The alpha component is always multiplied with the fourth component of the + * SDL_BlendFactor. The other components are not used in the alpha + * calculation. + * + * Support for these blend modes varies for each renderer. To check if a + * specific SDL_BlendMode is supported, create a renderer and pass it to + * either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will + * return with an error if the blend mode is not supported. + * + * This list describes the support of custom blend modes for each renderer in + * SDL 2.0.6. All renderers support the four blend modes listed in the + * SDL_BlendMode enumeration. + * + * - **direct3d**: Supports all operations with all factors. However, some + * factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and + * `SDL_BLENDOPERATION_MAXIMUM`. + * - **direct3d11**: Same as Direct3D 9. + * - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + * factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL + * 2.0.6. + * - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + * factors. Color and alpha factors need to be the same. OpenGL ES 1 + * implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT` + * and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha + * operations being different from each other. May support color and alpha + * factors being different from each other. + * - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`, + * `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT` + * operations with all factors. + * - **psp**: No custom blend mode support. + * - **software**: No custom blend mode support. + * + * Some renderers do not provide an alpha component for the default render + * target. The `SDL_BLENDFACTOR_DST_ALPHA` and + * `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this + * case. + * + * \param srcColorFactor the SDL_BlendFactor applied to the red, green, and + * blue components of the source pixels + * \param dstColorFactor the SDL_BlendFactor applied to the red, green, and + * blue components of the destination pixels + * \param colorOperation the SDL_BlendOperation used to combine the red, + * green, and blue components of the source and + * destination pixels + * \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of + * the source pixels + * \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of + * the destination pixels + * \param alphaOperation the SDL_BlendOperation used to combine the alpha + * component of the source and destination pixels + * \returns an SDL_BlendMode that represents the chosen factors and + * operations. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_GetRenderDrawBlendMode + * \sa SDL_SetTextureBlendMode + * \sa SDL_GetTextureBlendMode + */ +extern DECLSPEC SDL_BlendMode SDLCALL SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor, + SDL_BlendFactor dstColorFactor, + SDL_BlendOperation colorOperation, + SDL_BlendFactor srcAlphaFactor, + SDL_BlendFactor dstAlphaFactor, + SDL_BlendOperation alphaOperation); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_blendmode_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_clipboard.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_clipboard.h new file mode 100644 index 00000000000..81a5218f413 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_clipboard.h @@ -0,0 +1,94 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_clipboard.h + * + * Include file for SDL clipboard handling + */ + +#ifndef SDL_clipboard_h_ +#define SDL_clipboard_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Function prototypes */ + +/** + * Put UTF-8 text into the clipboard. + * + * \param text the text to store in the clipboard + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetClipboardText + * \sa SDL_HasClipboardText + */ +extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text); + +/** + * Get UTF-8 text from the clipboard, which must be freed with SDL_free(). + * + * This functions returns empty string if there was not enough memory left for + * a copy of the clipboard's content. + * + * \returns the clipboard text on success or an empty string on failure; call + * SDL_GetError() for more information. Caller must call SDL_free() + * on the returned pointer when done with it (even if there was an + * error). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasClipboardText + * \sa SDL_SetClipboardText + */ +extern DECLSPEC char * SDLCALL SDL_GetClipboardText(void); + +/** + * Query whether the clipboard exists and contains a non-empty text string. + * + * \returns SDL_TRUE if the clipboard has text, or SDL_FALSE if it does not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetClipboardText + * \sa SDL_SetClipboardText + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_clipboard_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_config.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_config.h new file mode 100644 index 00000000000..4bb4115e05a --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_config.h @@ -0,0 +1,55 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_config_h_ +#define SDL_config_h_ + +#include + +/** + * \file SDL_config.h + */ + +/* Add any platform that doesn't build using the configure system. */ +#if defined(__WIN32__) +#include +#elif defined(__WINRT__) +#include +#elif defined(__MACOSX__) +#include +#elif defined(__IPHONEOS__) +#include +#elif defined(__ANDROID__) +#include +#elif defined(__OS2__) +#include +#elif defined(__EMSCRIPTEN__) +#include +#else +/* This is a minimal configuration just to get SDL running on new platforms. */ +#include +#endif /* platform config */ + +#ifdef USING_GENERATED_CONFIG_H +#error Wrong SDL_config.h, check your include path? +#endif + +#endif /* SDL_config_h_ */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_config_iphoneos.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_config_iphoneos.h new file mode 100644 index 00000000000..851ac53a44a --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_config_iphoneos.h @@ -0,0 +1,215 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_config_iphoneos_h_ +#define SDL_config_iphoneos_h_ +#define SDL_config_h_ + +#include + +#ifdef __LP64__ +#define SIZEOF_VOIDP 8 +#else +#define SIZEOF_VOIDP 4 +#endif + +#define HAVE_GCC_ATOMICS 1 + +#define STDC_HEADERS 1 +#define HAVE_ALLOCA_H 1 +#define HAVE_CTYPE_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_MATH_H 1 +#define HAVE_SIGNAL_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_STDIO_H 1 +#define HAVE_STRING_H 1 +#define HAVE_SYS_TYPES_H 1 +/* The libunwind functions are only available on x86 */ +/* #undef HAVE_LIBUNWIND_H */ + +/* C library functions */ +#define HAVE_DLOPEN 1 +#define HAVE_MALLOC 1 +#define HAVE_CALLOC 1 +#define HAVE_REALLOC 1 +#define HAVE_FREE 1 +#define HAVE_ALLOCA 1 +#define HAVE_GETENV 1 +#define HAVE_SETENV 1 +#define HAVE_PUTENV 1 +#define HAVE_SETENV 1 +#define HAVE_UNSETENV 1 +#define HAVE_QSORT 1 +#define HAVE_ABS 1 +#define HAVE_BCOPY 1 +#define HAVE_MEMSET 1 +#define HAVE_MEMCPY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MEMCMP 1 +#define HAVE_STRLEN 1 +#define HAVE_STRLCPY 1 +#define HAVE_STRLCAT 1 +#define HAVE_STRCHR 1 +#define HAVE_STRRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_STRTOK_R 1 +#define HAVE_STRTOL 1 +#define HAVE_STRTOUL 1 +#define HAVE_STRTOLL 1 +#define HAVE_STRTOULL 1 +#define HAVE_STRTOD 1 +#define HAVE_ATOI 1 +#define HAVE_ATOF 1 +#define HAVE_STRCMP 1 +#define HAVE_STRNCMP 1 +#define HAVE_STRCASECMP 1 +#define HAVE_STRNCASECMP 1 +#define HAVE_VSSCANF 1 +#define HAVE_VSNPRINTF 1 +#define HAVE_M_PI 1 +#define HAVE_ACOS 1 +#define HAVE_ACOSF 1 +#define HAVE_ASIN 1 +#define HAVE_ASINF 1 +#define HAVE_ATAN 1 +#define HAVE_ATANF 1 +#define HAVE_ATAN2 1 +#define HAVE_ATAN2F 1 +#define HAVE_CEIL 1 +#define HAVE_CEILF 1 +#define HAVE_COPYSIGN 1 +#define HAVE_COPYSIGNF 1 +#define HAVE_COS 1 +#define HAVE_COSF 1 +#define HAVE_EXP 1 +#define HAVE_EXPF 1 +#define HAVE_FABS 1 +#define HAVE_FABSF 1 +#define HAVE_FLOOR 1 +#define HAVE_FLOORF 1 +#define HAVE_FMOD 1 +#define HAVE_FMODF 1 +#define HAVE_LOG 1 +#define HAVE_LOGF 1 +#define HAVE_LOG10 1 +#define HAVE_LOG10F 1 +#define HAVE_LROUND 1 +#define HAVE_LROUNDF 1 +#define HAVE_POW 1 +#define HAVE_POWF 1 +#define HAVE_ROUND 1 +#define HAVE_ROUNDF 1 +#define HAVE_SCALBN 1 +#define HAVE_SCALBNF 1 +#define HAVE_SIN 1 +#define HAVE_SINF 1 +#define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 +#define HAVE_TRUNC 1 +#define HAVE_TRUNCF 1 +#define HAVE_SIGACTION 1 +#define HAVE_SETJMP 1 +#define HAVE_NANOSLEEP 1 +#define HAVE_SYSCONF 1 +#define HAVE_SYSCTLBYNAME 1 +#define HAVE_O_CLOEXEC 1 + +/* enable iPhone version of Core Audio driver */ +#define SDL_AUDIO_DRIVER_COREAUDIO 1 +/* Enable the dummy audio driver (src/audio/dummy/\*.c) */ +#define SDL_AUDIO_DRIVER_DUMMY 1 + +/* Enable the stub haptic driver (src/haptic/dummy/\*.c) */ +#define SDL_HAPTIC_DUMMY 1 + +/* Enable joystick support */ +/* Only enable HIDAPI support if you want to support Steam Controllers on iOS and tvOS */ +/*#define SDL_JOYSTICK_HIDAPI 1*/ +#define SDL_JOYSTICK_MFI 1 +#define SDL_JOYSTICK_VIRTUAL 1 + +#ifdef __TVOS__ +#define SDL_SENSOR_DUMMY 1 +#else +/* Enable the CoreMotion sensor driver */ +#define SDL_SENSOR_COREMOTION 1 +#endif + +/* Enable Unix style SO loading */ +#define SDL_LOADSO_DLOPEN 1 + +/* Enable various threading systems */ +#define SDL_THREAD_PTHREAD 1 +#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 + +/* Enable various timer systems */ +#define SDL_TIMER_UNIX 1 + +/* Supported video drivers */ +#define SDL_VIDEO_DRIVER_UIKIT 1 +#define SDL_VIDEO_DRIVER_DUMMY 1 + +/* Enable OpenGL ES */ +#if !TARGET_OS_MACCATALYST +#define SDL_VIDEO_OPENGL_ES2 1 +#define SDL_VIDEO_OPENGL_ES 1 +#define SDL_VIDEO_RENDER_OGL_ES 1 +#define SDL_VIDEO_RENDER_OGL_ES2 1 +#endif + +/* Metal supported on 64-bit devices running iOS 8.0 and tvOS 9.0 and newer + Also supported in simulator from iOS 13.0 and tvOS 13.0 + */ +#if (TARGET_OS_SIMULATOR && ((__IPHONE_OS_VERSION_MIN_REQUIRED >= 130000) || (__TV_OS_VERSION_MIN_REQUIRED >= 130000))) || (!TARGET_CPU_ARM && ((__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 90000))) +#define SDL_PLATFORM_SUPPORTS_METAL 1 +#else +#define SDL_PLATFORM_SUPPORTS_METAL 0 +#endif + +#if SDL_PLATFORM_SUPPORTS_METAL +#define SDL_VIDEO_RENDER_METAL 1 +#endif + +#if SDL_PLATFORM_SUPPORTS_METAL +#define SDL_VIDEO_VULKAN 1 +#endif + +#if SDL_PLATFORM_SUPPORTS_METAL +#define SDL_VIDEO_METAL 1 +#endif + +/* Enable system power support */ +#define SDL_POWER_UIKIT 1 + +/* enable iPhone keyboard support */ +#define SDL_IPHONE_KEYBOARD 1 + +/* enable iOS extended launch screen */ +#define SDL_IPHONE_LAUNCHSCREEN 1 + +/* enable filesystem support */ +#define SDL_FILESYSTEM_COCOA 1 + +#endif /* SDL_config_iphoneos_h_ */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_copying.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_copying.h new file mode 100644 index 00000000000..49e3f9da07a --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_copying.h @@ -0,0 +1,20 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_cpuinfo.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_cpuinfo.h new file mode 100644 index 00000000000..ace7e064b29 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_cpuinfo.h @@ -0,0 +1,559 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_cpuinfo.h + * + * CPU feature detection for SDL. + */ + +#ifndef SDL_cpuinfo_h_ +#define SDL_cpuinfo_h_ + +#include + +/* Need to do this here because intrin.h has C++ code in it */ +/* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ +#if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64)) +#ifdef __clang__ +/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, + so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ + +#ifndef __PRFCHWINTRIN_H +#define __PRFCHWINTRIN_H + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_prefetch(void *__P) +{ + __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); +} + +#endif /* __PRFCHWINTRIN_H */ +#endif /* __clang__ */ +#include +#ifndef _WIN64 +#ifndef __MMX__ +#define __MMX__ +#endif +#ifndef __3dNOW__ +#define __3dNOW__ +#endif +#endif +#ifndef __SSE__ +#define __SSE__ +#endif +#ifndef __SSE2__ +#define __SSE2__ +#endif +#ifndef __SSE3__ +#define __SSE3__ +#endif +#elif defined(__MINGW64_VERSION_MAJOR) +#include +#if !defined(SDL_DISABLE_ARM_NEON_H) && defined(__ARM_NEON) +# include +#endif +#else +/* altivec.h redefining bool causes a number of problems, see bugs 3993 and 4392, so you need to explicitly define SDL_ENABLE_ALTIVEC_H to have it included. */ +#if defined(HAVE_ALTIVEC_H) && defined(__ALTIVEC__) && !defined(__APPLE_ALTIVEC__) && defined(SDL_ENABLE_ALTIVEC_H) +#include +#endif +#if !defined(SDL_DISABLE_ARM_NEON_H) +# if defined(__ARM_NEON) +# include +# elif defined(__WINDOWS__) || defined(__WINRT__) +/* Visual Studio doesn't define __ARM_ARCH, but _M_ARM (if set, always 7), and _M_ARM64 (if set, always 1). */ +# if defined(_M_ARM) +# include +# include +# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */ +# endif +# if defined (_M_ARM64) +# include +# include +# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */ +# endif +# endif +#endif +#endif /* compiler version */ + +#if defined(__3dNOW__) && !defined(SDL_DISABLE_MM3DNOW_H) +#include +#endif +#if defined(HAVE_IMMINTRIN_H) && !defined(SDL_DISABLE_IMMINTRIN_H) +#include +#else +#if defined(__MMX__) && !defined(SDL_DISABLE_MMINTRIN_H) +#include +#endif +#if defined(__SSE__) && !defined(SDL_DISABLE_XMMINTRIN_H) +#include +#endif +#if defined(__SSE2__) && !defined(SDL_DISABLE_EMMINTRIN_H) +#include +#endif +#if defined(__SSE3__) && !defined(SDL_DISABLE_PMMINTRIN_H) +#include +#endif +#endif /* HAVE_IMMINTRIN_H */ + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* This is a guess for the cacheline size used for padding. + * Most x86 processors have a 64 byte cache line. + * The 64-bit PowerPC processors have a 128 byte cache line. + * We'll use the larger value to be generally safe. + */ +#define SDL_CACHELINE_SIZE 128 + +/** + * Get the number of CPU cores available. + * + * \returns the total number of logical CPU cores. On CPUs that include + * technologies such as hyperthreading, the number of logical cores + * may be more than the number of physical cores. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_GetCPUCount(void); + +/** + * Determine the L1 cache line size of the CPU. + * + * This is useful for determining multi-threaded structure padding or SIMD + * prefetch sizes. + * + * \returns the L1 cache line size of the CPU, in bytes. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void); + +/** + * Determine whether the CPU has the RDTSC instruction. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has the RDTSC instruction or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); + +/** + * Determine whether the CPU has AltiVec features. + * + * This always returns false on CPUs that aren't using PowerPC instruction + * sets. + * + * \returns SDL_TRUE if the CPU has AltiVec features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); + +/** + * Determine whether the CPU has MMX features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has MMX features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); + +/** + * Determine whether the CPU has 3DNow! features. + * + * This always returns false on CPUs that aren't using AMD instruction sets. + * + * \returns SDL_TRUE if the CPU has 3DNow! features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); + +/** + * Determine whether the CPU has SSE features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); + +/** + * Determine whether the CPU has SSE2 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE2 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); + +/** + * Determine whether the CPU has SSE3 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE3 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void); + +/** + * Determine whether the CPU has SSE4.1 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE4.1 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void); + +/** + * Determine whether the CPU has SSE4.2 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE4.2 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); + +/** + * Determine whether the CPU has AVX features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has AVX features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void); + +/** + * Determine whether the CPU has AVX2 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has AVX2 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void); + +/** + * Determine whether the CPU has AVX-512F (foundation) features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has AVX-512F features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_HasAVX + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX512F(void); + +/** + * Determine whether the CPU has ARM SIMD (ARMv6) features. + * + * This is different from ARM NEON, which is a different instruction set. + * + * This always returns false on CPUs that aren't using ARM instruction sets. + * + * \returns SDL_TRUE if the CPU has ARM SIMD features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_HasNEON + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasARMSIMD(void); + +/** + * Determine whether the CPU has NEON (ARM SIMD) features. + * + * This always returns false on CPUs that aren't using ARM instruction sets. + * + * \returns SDL_TRUE if the CPU has ARM NEON features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasNEON(void); + +/** + * Get the amount of RAM configured in the system. + * + * \returns the amount of RAM configured in the system in MB. + * + * \since This function is available since SDL 2.0.1. + */ +extern DECLSPEC int SDLCALL SDL_GetSystemRAM(void); + +/** + * Report the alignment this system needs for SIMD allocations. + * + * This will return the minimum number of bytes to which a pointer must be + * aligned to be compatible with SIMD instructions on the current machine. For + * example, if the machine supports SSE only, it will return 16, but if it + * supports AVX-512F, it'll return 64 (etc). This only reports values for + * instruction sets SDL knows about, so if your SDL build doesn't have + * SDL_HasAVX512F(), then it might return 16 for the SSE support it sees and + * not 64 for the AVX-512 instructions that exist but SDL doesn't know about. + * Plan accordingly. + * + * \returns the alignment in bytes needed for available, known SIMD + * instructions. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC size_t SDLCALL SDL_SIMDGetAlignment(void); + +/** + * Allocate memory in a SIMD-friendly way. + * + * This will allocate a block of memory that is suitable for use with SIMD + * instructions. Specifically, it will be properly aligned and padded for the + * system's supported vector instructions. + * + * The memory returned will be padded such that it is safe to read or write an + * incomplete vector at the end of the memory block. This can be useful so you + * don't have to drop back to a scalar fallback at the end of your SIMD + * processing loop to deal with the final elements without overflowing the + * allocated buffer. + * + * You must free this memory with SDL_FreeSIMD(), not free() or SDL_free() or + * delete[], etc. + * + * Note that SDL will only deal with SIMD instruction sets it is aware of; for + * example, SDL 2.0.8 knows that SSE wants 16-byte vectors (SDL_HasSSE()), and + * AVX2 wants 32 bytes (SDL_HasAVX2()), but doesn't know that AVX-512 wants + * 64. To be clear: if you can't decide to use an instruction set with an + * SDL_Has*() function, don't use that instruction set with memory allocated + * through here. + * + * SDL_AllocSIMD(0) will return a non-NULL pointer, assuming the system isn't + * out of memory, but you are not allowed to dereference it (because you only + * own zero bytes of that buffer). + * + * \param len The length, in bytes, of the block to allocate. The actual + * allocated block might be larger due to padding, etc. + * \returns a pointer to the newly-allocated block, NULL if out of memory. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_SIMDAlignment + * \sa SDL_SIMDRealloc + * \sa SDL_SIMDFree + */ +extern DECLSPEC void * SDLCALL SDL_SIMDAlloc(const size_t len); + +/** + * Reallocate memory obtained from SDL_SIMDAlloc + * + * It is not valid to use this function on a pointer from anything but + * SDL_SIMDAlloc(). It can't be used on pointers from malloc, realloc, + * SDL_malloc, memalign, new[], etc. + * + * \param mem The pointer obtained from SDL_SIMDAlloc. This function also + * accepts NULL, at which point this function is the same as + * calling SDL_SIMDAlloc with a NULL pointer. + * \param len The length, in bytes, of the block to allocated. The actual + * allocated block might be larger due to padding, etc. Passing 0 + * will return a non-NULL pointer, assuming the system isn't out of + * memory. + * \returns a pointer to the newly-reallocated block, NULL if out of memory. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_SIMDAlignment + * \sa SDL_SIMDAlloc + * \sa SDL_SIMDFree + */ +extern DECLSPEC void * SDLCALL SDL_SIMDRealloc(void *mem, const size_t len); + +/** + * Deallocate memory obtained from SDL_SIMDAlloc + * + * It is not valid to use this function on a pointer from anything but + * SDL_SIMDAlloc() or SDL_SIMDRealloc(). It can't be used on pointers from + * malloc, realloc, SDL_malloc, memalign, new[], etc. + * + * However, SDL_SIMDFree(NULL) is a legal no-op. + * + * The memory pointed to by `ptr` is no longer valid for access upon return, + * and may be returned to the system or reused by a future allocation. The + * pointer passed to this function is no longer safe to dereference once this + * function returns, and should be discarded. + * + * \param ptr The pointer, returned from SDL_SIMDAlloc or SDL_SIMDRealloc, to + * deallocate. NULL is a legal no-op. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_SIMDAlloc + * \sa SDL_SIMDRealloc + */ +extern DECLSPEC void SDLCALL SDL_SIMDFree(void *ptr); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_cpuinfo_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_endian.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_endian.h new file mode 100644 index 00000000000..5ef32704275 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_endian.h @@ -0,0 +1,326 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_endian.h + * + * Functions for reading and writing endian-specific values + */ + +#ifndef SDL_endian_h_ +#define SDL_endian_h_ + +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1400) +/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, + so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ +#ifdef __clang__ +#ifndef __PRFCHWINTRIN_H +#define __PRFCHWINTRIN_H +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_prefetch(void *__P) +{ + __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); +} +#endif /* __PRFCHWINTRIN_H */ +#endif /* __clang__ */ + +#include +#endif + +/** + * \name The two types of endianness + */ +/* @{ */ +#define SDL_LIL_ENDIAN 1234 +#define SDL_BIG_ENDIAN 4321 +/* @} */ + +#ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ +#ifdef __linux__ +#include +#define SDL_BYTEORDER __BYTE_ORDER +#elif defined(__OpenBSD__) +#include +#define SDL_BYTEORDER BYTE_ORDER +#elif defined(__FreeBSD__) || defined(__NetBSD__) +#include +#define SDL_BYTEORDER BYTE_ORDER +/* predefs from newer gcc and clang versions: */ +#elif defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__BYTE_ORDER__) +#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +#define SDL_BYTEORDER SDL_LIL_ENDIAN +#elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#define SDL_BYTEORDER SDL_BIG_ENDIAN +#else +#error Unsupported endianness +#endif /**/ +#else +#if defined(__hppa__) || \ + defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ + (defined(__MIPS__) && defined(__MIPSEB__)) || \ + defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ + defined(__sparc__) +#define SDL_BYTEORDER SDL_BIG_ENDIAN +#else +#define SDL_BYTEORDER SDL_LIL_ENDIAN +#endif +#endif /* __linux__ */ +#endif /* !SDL_BYTEORDER */ + + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_endian.h + */ + +/* various modern compilers may have builtin swap */ +#if defined(__GNUC__) || defined(__clang__) +# define HAS_BUILTIN_BSWAP16 (_SDL_HAS_BUILTIN(__builtin_bswap16)) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) +# define HAS_BUILTIN_BSWAP32 (_SDL_HAS_BUILTIN(__builtin_bswap32)) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) +# define HAS_BUILTIN_BSWAP64 (_SDL_HAS_BUILTIN(__builtin_bswap64)) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + + /* this one is broken */ +# define HAS_BROKEN_BSWAP (__GNUC__ == 2 && __GNUC_MINOR__ <= 95) +#else +# define HAS_BUILTIN_BSWAP16 0 +# define HAS_BUILTIN_BSWAP32 0 +# define HAS_BUILTIN_BSWAP64 0 +# define HAS_BROKEN_BSWAP 0 +#endif + +#if HAS_BUILTIN_BSWAP16 +#define SDL_Swap16(x) __builtin_bswap16(x) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) +#pragma intrinsic(_byteswap_ushort) +#define SDL_Swap16(x) _byteswap_ushort(x) +#elif defined(__i386__) && !HAS_BROKEN_BSWAP +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); + return x; +} +#elif defined(__x86_64__) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); + return x; +} +#elif (defined(__powerpc__) || defined(__ppc__)) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + int result; + + __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); + return (Uint16)result; +} +#elif (defined(__m68k__) && !defined(__mcoldfire__)) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern __inline Uint16 SDL_Swap16(Uint16); +#pragma aux SDL_Swap16 = \ + "xchg al, ah" \ + parm [ax] \ + modify [ax]; +#else +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); +} +#endif + +#if HAS_BUILTIN_BSWAP32 +#define SDL_Swap32(x) __builtin_bswap32(x) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) +#pragma intrinsic(_byteswap_ulong) +#define SDL_Swap32(x) _byteswap_ulong(x) +#elif defined(__i386__) && !HAS_BROKEN_BSWAP +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("bswap %0": "=r"(x):"0"(x)); + return x; +} +#elif defined(__x86_64__) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("bswapl %0": "=r"(x):"0"(x)); + return x; +} +#elif (defined(__powerpc__) || defined(__ppc__)) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + Uint32 result; + + __asm__("rlwimi %0,%2,24,16,23": "=&r"(result): "0" (x>>24), "r"(x)); + __asm__("rlwimi %0,%2,8,8,15" : "=&r"(result): "0" (result), "r"(x)); + __asm__("rlwimi %0,%2,24,0,7" : "=&r"(result): "0" (result), "r"(x)); + return result; +} +#elif (defined(__m68k__) && !defined(__mcoldfire__)) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern __inline Uint32 SDL_Swap32(Uint32); +#pragma aux SDL_Swap32 = \ + "bswap eax" \ + parm [eax] \ + modify [eax]; +#else +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | + ((x >> 8) & 0x0000FF00) | (x >> 24))); +} +#endif + +#if HAS_BUILTIN_BSWAP64 +#define SDL_Swap64(x) __builtin_bswap64(x) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) +#pragma intrinsic(_byteswap_uint64) +#define SDL_Swap64(x) _byteswap_uint64(x) +#elif defined(__i386__) && !HAS_BROKEN_BSWAP +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + union { + struct { + Uint32 a, b; + } s; + Uint64 u; + } v; + v.u = x; + __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1" + : "=r"(v.s.a), "=r"(v.s.b) + : "0" (v.s.a), "1"(v.s.b)); + return v.u; +} +#elif defined(__x86_64__) +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + __asm__("bswapq %0": "=r"(x):"0"(x)); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern __inline Uint64 SDL_Swap64(Uint64); +#pragma aux SDL_Swap64 = \ + "bswap eax" \ + "bswap edx" \ + "xchg eax,edx" \ + parm [eax edx] \ + modify [eax edx]; +#else +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + Uint32 hi, lo; + + /* Separate into high and low 32-bit values and swap them */ + lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); + x >>= 32; + hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); + x = SDL_Swap32(lo); + x <<= 32; + x |= SDL_Swap32(hi); + return (x); +} +#endif + + +SDL_FORCE_INLINE float +SDL_SwapFloat(float x) +{ + union { + float f; + Uint32 ui32; + } swapper; + swapper.f = x; + swapper.ui32 = SDL_Swap32(swapper.ui32); + return swapper.f; +} + +/* remove extra macros */ +#undef HAS_BROKEN_BSWAP +#undef HAS_BUILTIN_BSWAP16 +#undef HAS_BUILTIN_BSWAP32 +#undef HAS_BUILTIN_BSWAP64 + +/** + * \name Swap to native + * Byteswap item from the specified endianness to the native endianness. + */ +/* @{ */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define SDL_SwapLE16(X) (X) +#define SDL_SwapLE32(X) (X) +#define SDL_SwapLE64(X) (X) +#define SDL_SwapFloatLE(X) (X) +#define SDL_SwapBE16(X) SDL_Swap16(X) +#define SDL_SwapBE32(X) SDL_Swap32(X) +#define SDL_SwapBE64(X) SDL_Swap64(X) +#define SDL_SwapFloatBE(X) SDL_SwapFloat(X) +#else +#define SDL_SwapLE16(X) SDL_Swap16(X) +#define SDL_SwapLE32(X) SDL_Swap32(X) +#define SDL_SwapLE64(X) SDL_Swap64(X) +#define SDL_SwapFloatLE(X) SDL_SwapFloat(X) +#define SDL_SwapBE16(X) (X) +#define SDL_SwapBE32(X) (X) +#define SDL_SwapBE64(X) (X) +#define SDL_SwapFloatBE(X) (X) +#endif +/* @} *//* Swap to native */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_endian_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_error.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_error.h new file mode 100644 index 00000000000..743e46de111 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_error.h @@ -0,0 +1,163 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_error.h + * + * Simple error message routines for SDL. + */ + +#ifndef SDL_error_h_ +#define SDL_error_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Public functions */ + + +/** + * Set the SDL error message for the current thread. + * + * Calling this function will replace any previous error message that was set. + * + * This function always returns -1, since SDL frequently uses -1 to signify an + * failing result, leading to this idiom: + * + * ```c + * if (error_code) { + * return SDL_SetError("This operation has failed: %d", error_code); + * } + * ``` + * + * \param fmt a printf()-style message format string + * \param ... additional parameters matching % tokens in the `fmt` string, if + * any + * \returns always -1. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ClearError + * \sa SDL_GetError + */ +extern DECLSPEC int SDLCALL SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); + +/** + * Retrieve a message about the last error that occurred on the current + * thread. + * + * It is possible for multiple errors to occur before calling SDL_GetError(). + * Only the last error is returned. + * + * The message is only applicable when an SDL function has signaled an error. + * You must check the return values of SDL function calls to determine when to + * appropriately call SDL_GetError(). You should *not* use the results of + * SDL_GetError() to decide if an error has occurred! Sometimes SDL will set + * an error string even when reporting success. + * + * SDL will *not* clear the error string for successful API calls. You *must* + * check return values for failure cases before you can assume the error + * string applies. + * + * Error strings are set per-thread, so an error set in a different thread + * will not interfere with the current thread's operation. + * + * The returned string is internally allocated and must not be freed by the + * application. + * + * \returns a message with information about the specific error that occurred, + * or an empty string if there hasn't been an error message set since + * the last call to SDL_ClearError(). The message is only applicable + * when an SDL function has signaled an error. You must check the + * return values of SDL function calls to determine when to + * appropriately call SDL_GetError(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ClearError + * \sa SDL_SetError + */ +extern DECLSPEC const char *SDLCALL SDL_GetError(void); + +/** + * Get the last error message that was set for the current thread. + * + * This allows the caller to copy the error string into a provided buffer, but + * otherwise operates exactly the same as SDL_GetError(). + * + * \param errstr A buffer to fill with the last error message that was set for + * the current thread + * \param maxlen The size of the buffer pointed to by the errstr parameter + * \returns the pointer passed in as the `errstr` parameter. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_GetError + */ +extern DECLSPEC char * SDLCALL SDL_GetErrorMsg(char *errstr, int maxlen); + +/** + * Clear any previous error message for this thread. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetError + * \sa SDL_SetError + */ +extern DECLSPEC void SDLCALL SDL_ClearError(void); + +/** + * \name Internal error functions + * + * \internal + * Private error reporting function - used internally. + */ +/* @{ */ +#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) +#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) +#define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param)) +typedef enum +{ + SDL_ENOMEM, + SDL_EFREAD, + SDL_EFWRITE, + SDL_EFSEEK, + SDL_UNSUPPORTED, + SDL_LASTERROR +} SDL_errorcode; +/* SDL_Error() unconditionally returns -1. */ +extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code); +/* @} *//* Internal error functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_error_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_events.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_events.h new file mode 100644 index 00000000000..9cfeb7bc0ed --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_events.h @@ -0,0 +1,1150 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_events.h + * + * Include file for SDL event handling. + */ + +#ifndef SDL_events_h_ +#define SDL_events_h_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* General keyboard/mouse state definitions */ +#define SDL_RELEASED 0 +#define SDL_PRESSED 1 + +/** + * The types of events that can be delivered. + */ +typedef enum +{ + SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */ + + /* Application events */ + SDL_QUIT = 0x100, /**< User-requested quit */ + + /* These application events have special meaning on iOS, see README-ios.md for details */ + SDL_APP_TERMINATING, /**< The application is being terminated by the OS + Called on iOS in applicationWillTerminate() + Called on Android in onDestroy() + */ + SDL_APP_LOWMEMORY, /**< The application is low on memory, free memory if possible. + Called on iOS in applicationDidReceiveMemoryWarning() + Called on Android in onLowMemory() + */ + SDL_APP_WILLENTERBACKGROUND, /**< The application is about to enter the background + Called on iOS in applicationWillResignActive() + Called on Android in onPause() + */ + SDL_APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time + Called on iOS in applicationDidEnterBackground() + Called on Android in onPause() + */ + SDL_APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground + Called on iOS in applicationWillEnterForeground() + Called on Android in onResume() + */ + SDL_APP_DIDENTERFOREGROUND, /**< The application is now interactive + Called on iOS in applicationDidBecomeActive() + Called on Android in onResume() + */ + + SDL_LOCALECHANGED, /**< The user's locale preferences have changed. */ + + /* Display events */ + SDL_DISPLAYEVENT = 0x150, /**< Display state change */ + + /* Window events */ + SDL_WINDOWEVENT = 0x200, /**< Window state change */ + SDL_SYSWMEVENT, /**< System specific event */ + + /* Keyboard events */ + SDL_KEYDOWN = 0x300, /**< Key pressed */ + SDL_KEYUP, /**< Key released */ + SDL_TEXTEDITING, /**< Keyboard text editing (composition) */ + SDL_TEXTINPUT, /**< Keyboard text input */ + SDL_KEYMAPCHANGED, /**< Keymap changed due to a system event such as an + input language or keyboard layout change. + */ + SDL_TEXTEDITING_EXT, /**< Extended keyboard text editing (composition) */ + + /* Mouse events */ + SDL_MOUSEMOTION = 0x400, /**< Mouse moved */ + SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */ + SDL_MOUSEBUTTONUP, /**< Mouse button released */ + SDL_MOUSEWHEEL, /**< Mouse wheel motion */ + + /* Joystick events */ + SDL_JOYAXISMOTION = 0x600, /**< Joystick axis motion */ + SDL_JOYBALLMOTION, /**< Joystick trackball motion */ + SDL_JOYHATMOTION, /**< Joystick hat position change */ + SDL_JOYBUTTONDOWN, /**< Joystick button pressed */ + SDL_JOYBUTTONUP, /**< Joystick button released */ + SDL_JOYDEVICEADDED, /**< A new joystick has been inserted into the system */ + SDL_JOYDEVICEREMOVED, /**< An opened joystick has been removed */ + + /* Game controller events */ + SDL_CONTROLLERAXISMOTION = 0x650, /**< Game controller axis motion */ + SDL_CONTROLLERBUTTONDOWN, /**< Game controller button pressed */ + SDL_CONTROLLERBUTTONUP, /**< Game controller button released */ + SDL_CONTROLLERDEVICEADDED, /**< A new Game controller has been inserted into the system */ + SDL_CONTROLLERDEVICEREMOVED, /**< An opened Game controller has been removed */ + SDL_CONTROLLERDEVICEREMAPPED, /**< The controller mapping was updated */ + SDL_CONTROLLERTOUCHPADDOWN, /**< Game controller touchpad was touched */ + SDL_CONTROLLERTOUCHPADMOTION, /**< Game controller touchpad finger was moved */ + SDL_CONTROLLERTOUCHPADUP, /**< Game controller touchpad finger was lifted */ + SDL_CONTROLLERSENSORUPDATE, /**< Game controller sensor was updated */ + + /* Touch events */ + SDL_FINGERDOWN = 0x700, + SDL_FINGERUP, + SDL_FINGERMOTION, + + /* Gesture events */ + SDL_DOLLARGESTURE = 0x800, + SDL_DOLLARRECORD, + SDL_MULTIGESTURE, + + /* Clipboard events */ + SDL_CLIPBOARDUPDATE = 0x900, /**< The clipboard changed */ + + /* Drag and drop events */ + SDL_DROPFILE = 0x1000, /**< The system requests a file open */ + SDL_DROPTEXT, /**< text/plain drag-and-drop event */ + SDL_DROPBEGIN, /**< A new set of drops is beginning (NULL filename) */ + SDL_DROPCOMPLETE, /**< Current set of drops is now complete (NULL filename) */ + + /* Audio hotplug events */ + SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */ + SDL_AUDIODEVICEREMOVED, /**< An audio device has been removed. */ + + /* Sensor events */ + SDL_SENSORUPDATE = 0x1200, /**< A sensor was updated */ + + /* Render events */ + SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */ + SDL_RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */ + + /* Internal events */ + SDL_POLLSENTINEL = 0x7F00, /**< Signals the end of an event poll cycle */ + + /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use, + * and should be allocated with SDL_RegisterEvents() + */ + SDL_USEREVENT = 0x8000, + + /** + * This last event is only for bounding internal arrays + */ + SDL_LASTEVENT = 0xFFFF +} SDL_EventType; + +/** + * \brief Fields shared by every event + */ +typedef struct SDL_CommonEvent +{ + Uint32 type; + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ +} SDL_CommonEvent; + +/** + * \brief Display state change event data (event.display.*) + */ +typedef struct SDL_DisplayEvent +{ + Uint32 type; /**< ::SDL_DISPLAYEVENT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 display; /**< The associated display index */ + Uint8 event; /**< ::SDL_DisplayEventID */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint32 data1; /**< event dependent data */ +} SDL_DisplayEvent; + +/** + * \brief Window state change event data (event.window.*) + */ +typedef struct SDL_WindowEvent +{ + Uint32 type; /**< ::SDL_WINDOWEVENT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The associated window */ + Uint8 event; /**< ::SDL_WindowEventID */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint32 data1; /**< event dependent data */ + Sint32 data2; /**< event dependent data */ +} SDL_WindowEvent; + +/** + * \brief Keyboard button event structure (event.key.*) + */ +typedef struct SDL_KeyboardEvent +{ + Uint32 type; /**< ::SDL_KEYDOWN or ::SDL_KEYUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 repeat; /**< Non-zero if this is a key repeat */ + Uint8 padding2; + Uint8 padding3; + SDL_Keysym keysym; /**< The key that was pressed or released */ +} SDL_KeyboardEvent; + +#define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32) +/** + * \brief Keyboard text editing event structure (event.edit.*) + */ +typedef struct SDL_TextEditingEvent +{ + Uint32 type; /**< ::SDL_TEXTEDITING */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */ + Sint32 start; /**< The start cursor of selected editing text */ + Sint32 length; /**< The length of selected editing text */ +} SDL_TextEditingEvent; + +/** + * \brief Extended keyboard text editing event structure (event.editExt.*) when text would be + * truncated if stored in the text buffer SDL_TextEditingEvent + */ +typedef struct SDL_TextEditingExtEvent +{ + Uint32 type; /**< ::SDL_TEXTEDITING_EXT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + char* text; /**< The editing text, which should be freed with SDL_free(), and will not be NULL */ + Sint32 start; /**< The start cursor of selected editing text */ + Sint32 length; /**< The length of selected editing text */ +} SDL_TextEditingExtEvent; + +#define SDL_TEXTINPUTEVENT_TEXT_SIZE (32) +/** + * \brief Keyboard text input event structure (event.text.*) + */ +typedef struct SDL_TextInputEvent +{ + Uint32 type; /**< ::SDL_TEXTINPUT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */ +} SDL_TextInputEvent; + +/** + * \brief Mouse motion event structure (event.motion.*) + */ +typedef struct SDL_MouseMotionEvent +{ + Uint32 type; /**< ::SDL_MOUSEMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Uint32 state; /**< The current button state */ + Sint32 x; /**< X coordinate, relative to window */ + Sint32 y; /**< Y coordinate, relative to window */ + Sint32 xrel; /**< The relative motion in the X direction */ + Sint32 yrel; /**< The relative motion in the Y direction */ +} SDL_MouseMotionEvent; + +/** + * \brief Mouse button event structure (event.button.*) + */ +typedef struct SDL_MouseButtonEvent +{ + Uint32 type; /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Uint8 button; /**< The mouse button index */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 clicks; /**< 1 for single-click, 2 for double-click, etc. */ + Uint8 padding1; + Sint32 x; /**< X coordinate, relative to window */ + Sint32 y; /**< Y coordinate, relative to window */ +} SDL_MouseButtonEvent; + +/** + * \brief Mouse wheel event structure (event.wheel.*) + */ +typedef struct SDL_MouseWheelEvent +{ + Uint32 type; /**< ::SDL_MOUSEWHEEL */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */ + Sint32 y; /**< The amount scrolled vertically, positive away from the user and negative toward the user */ + Uint32 direction; /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */ + float preciseX; /**< The amount scrolled horizontally, positive to the right and negative to the left, with float precision (added in 2.0.18) */ + float preciseY; /**< The amount scrolled vertically, positive away from the user and negative toward the user, with float precision (added in 2.0.18) */ +} SDL_MouseWheelEvent; + +/** + * \brief Joystick axis motion event structure (event.jaxis.*) + */ +typedef struct SDL_JoyAxisEvent +{ + Uint32 type; /**< ::SDL_JOYAXISMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 axis; /**< The joystick axis index */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 value; /**< The axis value (range: -32768 to 32767) */ + Uint16 padding4; +} SDL_JoyAxisEvent; + +/** + * \brief Joystick trackball motion event structure (event.jball.*) + */ +typedef struct SDL_JoyBallEvent +{ + Uint32 type; /**< ::SDL_JOYBALLMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 ball; /**< The joystick trackball index */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 xrel; /**< The relative motion in the X direction */ + Sint16 yrel; /**< The relative motion in the Y direction */ +} SDL_JoyBallEvent; + +/** + * \brief Joystick hat position change event structure (event.jhat.*) + */ +typedef struct SDL_JoyHatEvent +{ + Uint32 type; /**< ::SDL_JOYHATMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 hat; /**< The joystick hat index */ + Uint8 value; /**< The hat position value. + * \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP + * \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT + * \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN + * + * Note that zero means the POV is centered. + */ + Uint8 padding1; + Uint8 padding2; +} SDL_JoyHatEvent; + +/** + * \brief Joystick button event structure (event.jbutton.*) + */ +typedef struct SDL_JoyButtonEvent +{ + Uint32 type; /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 button; /**< The joystick button index */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 padding1; + Uint8 padding2; +} SDL_JoyButtonEvent; + +/** + * \brief Joystick device event structure (event.jdevice.*) + */ +typedef struct SDL_JoyDeviceEvent +{ + Uint32 type; /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED event */ +} SDL_JoyDeviceEvent; + + +/** + * \brief Game controller axis motion event structure (event.caxis.*) + */ +typedef struct SDL_ControllerAxisEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERAXISMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 axis; /**< The controller axis (SDL_GameControllerAxis) */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 value; /**< The axis value (range: -32768 to 32767) */ + Uint16 padding4; +} SDL_ControllerAxisEvent; + + +/** + * \brief Game controller button event structure (event.cbutton.*) + */ +typedef struct SDL_ControllerButtonEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 button; /**< The controller button (SDL_GameControllerButton) */ + Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ + Uint8 padding1; + Uint8 padding2; +} SDL_ControllerButtonEvent; + + +/** + * \brief Controller device event structure (event.cdevice.*) + */ +typedef struct SDL_ControllerDeviceEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, or ::SDL_CONTROLLERDEVICEREMAPPED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ +} SDL_ControllerDeviceEvent; + +/** + * \brief Game controller touchpad event structure (event.ctouchpad.*) + */ +typedef struct SDL_ControllerTouchpadEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERTOUCHPADDOWN or ::SDL_CONTROLLERTOUCHPADMOTION or ::SDL_CONTROLLERTOUCHPADUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Sint32 touchpad; /**< The index of the touchpad */ + Sint32 finger; /**< The index of the finger on the touchpad */ + float x; /**< Normalized in the range 0...1 with 0 being on the left */ + float y; /**< Normalized in the range 0...1 with 0 being at the top */ + float pressure; /**< Normalized in the range 0...1 */ +} SDL_ControllerTouchpadEvent; + +/** + * \brief Game controller sensor event structure (event.csensor.*) + */ +typedef struct SDL_ControllerSensorEvent +{ + Uint32 type; /**< ::SDL_CONTROLLERSENSORUPDATE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Sint32 sensor; /**< The type of the sensor, one of the values of ::SDL_SensorType */ + float data[3]; /**< Up to 3 values from the sensor, as defined in SDL_sensor.h */ +} SDL_ControllerSensorEvent; + +/** + * \brief Audio device event structure (event.adevice.*) + */ +typedef struct SDL_AudioDeviceEvent +{ + Uint32 type; /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 which; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */ + Uint8 iscapture; /**< zero if an output device, non-zero if a capture device. */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; +} SDL_AudioDeviceEvent; + + +/** + * \brief Touch finger event structure (event.tfinger.*) + */ +typedef struct SDL_TouchFingerEvent +{ + Uint32 type; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_TouchID touchId; /**< The touch device id */ + SDL_FingerID fingerId; + float x; /**< Normalized in the range 0...1 */ + float y; /**< Normalized in the range 0...1 */ + float dx; /**< Normalized in the range -1...1 */ + float dy; /**< Normalized in the range -1...1 */ + float pressure; /**< Normalized in the range 0...1 */ + Uint32 windowID; /**< The window underneath the finger, if any */ +} SDL_TouchFingerEvent; + + +/** + * \brief Multiple Finger Gesture Event (event.mgesture.*) + */ +typedef struct SDL_MultiGestureEvent +{ + Uint32 type; /**< ::SDL_MULTIGESTURE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_TouchID touchId; /**< The touch device id */ + float dTheta; + float dDist; + float x; + float y; + Uint16 numFingers; + Uint16 padding; +} SDL_MultiGestureEvent; + + +/** + * \brief Dollar Gesture Event (event.dgesture.*) + */ +typedef struct SDL_DollarGestureEvent +{ + Uint32 type; /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_TouchID touchId; /**< The touch device id */ + SDL_GestureID gestureId; + Uint32 numFingers; + float error; + float x; /**< Normalized center of gesture */ + float y; /**< Normalized center of gesture */ +} SDL_DollarGestureEvent; + + +/** + * \brief An event used to request a file open by the system (event.drop.*) + * This event is enabled by default, you can disable it with SDL_EventState(). + * \note If this event is enabled, you must free the filename in the event. + */ +typedef struct SDL_DropEvent +{ + Uint32 type; /**< ::SDL_DROPBEGIN or ::SDL_DROPFILE or ::SDL_DROPTEXT or ::SDL_DROPCOMPLETE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + char *file; /**< The file name, which should be freed with SDL_free(), is NULL on begin/complete */ + Uint32 windowID; /**< The window that was dropped on, if any */ +} SDL_DropEvent; + + +/** + * \brief Sensor event structure (event.sensor.*) + */ +typedef struct SDL_SensorEvent +{ + Uint32 type; /**< ::SDL_SENSORUPDATE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Sint32 which; /**< The instance ID of the sensor */ + float data[6]; /**< Up to 6 values from the sensor - additional values can be queried using SDL_SensorGetData() */ +} SDL_SensorEvent; + +/** + * \brief The "quit requested" event + */ +typedef struct SDL_QuitEvent +{ + Uint32 type; /**< ::SDL_QUIT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ +} SDL_QuitEvent; + +/** + * \brief OS Specific event + */ +typedef struct SDL_OSEvent +{ + Uint32 type; /**< ::SDL_QUIT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ +} SDL_OSEvent; + +/** + * \brief A user-defined event type (event.user.*) + */ +typedef struct SDL_UserEvent +{ + Uint32 type; /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The associated window if any */ + Sint32 code; /**< User defined event code */ + void *data1; /**< User defined data pointer */ + void *data2; /**< User defined data pointer */ +} SDL_UserEvent; + + +struct SDL_SysWMmsg; +typedef struct SDL_SysWMmsg SDL_SysWMmsg; + +/** + * \brief A video driver dependent system event (event.syswm.*) + * This event is disabled by default, you can enable it with SDL_EventState() + * + * \note If you want to use this event, you should include SDL_syswm.h. + */ +typedef struct SDL_SysWMEvent +{ + Uint32 type; /**< ::SDL_SYSWMEVENT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */ +} SDL_SysWMEvent; + +/** + * \brief General event structure + */ +typedef union SDL_Event +{ + Uint32 type; /**< Event type, shared with all events */ + SDL_CommonEvent common; /**< Common event data */ + SDL_DisplayEvent display; /**< Display event data */ + SDL_WindowEvent window; /**< Window event data */ + SDL_KeyboardEvent key; /**< Keyboard event data */ + SDL_TextEditingEvent edit; /**< Text editing event data */ + SDL_TextEditingExtEvent editExt; /**< Extended text editing event data */ + SDL_TextInputEvent text; /**< Text input event data */ + SDL_MouseMotionEvent motion; /**< Mouse motion event data */ + SDL_MouseButtonEvent button; /**< Mouse button event data */ + SDL_MouseWheelEvent wheel; /**< Mouse wheel event data */ + SDL_JoyAxisEvent jaxis; /**< Joystick axis event data */ + SDL_JoyBallEvent jball; /**< Joystick ball event data */ + SDL_JoyHatEvent jhat; /**< Joystick hat event data */ + SDL_JoyButtonEvent jbutton; /**< Joystick button event data */ + SDL_JoyDeviceEvent jdevice; /**< Joystick device change event data */ + SDL_ControllerAxisEvent caxis; /**< Game Controller axis event data */ + SDL_ControllerButtonEvent cbutton; /**< Game Controller button event data */ + SDL_ControllerDeviceEvent cdevice; /**< Game Controller device event data */ + SDL_ControllerTouchpadEvent ctouchpad; /**< Game Controller touchpad event data */ + SDL_ControllerSensorEvent csensor; /**< Game Controller sensor event data */ + SDL_AudioDeviceEvent adevice; /**< Audio device event data */ + SDL_SensorEvent sensor; /**< Sensor event data */ + SDL_QuitEvent quit; /**< Quit request event data */ + SDL_UserEvent user; /**< Custom event data */ + SDL_SysWMEvent syswm; /**< System dependent window event data */ + SDL_TouchFingerEvent tfinger; /**< Touch finger event data */ + SDL_MultiGestureEvent mgesture; /**< Gesture event data */ + SDL_DollarGestureEvent dgesture; /**< Gesture event data */ + SDL_DropEvent drop; /**< Drag and drop event data */ + + /* This is necessary for ABI compatibility between Visual C++ and GCC. + Visual C++ will respect the push pack pragma and use 52 bytes (size of + SDL_TextEditingEvent, the largest structure for 32-bit and 64-bit + architectures) for this union, and GCC will use the alignment of the + largest datatype within the union, which is 8 bytes on 64-bit + architectures. + + So... we'll add padding to force the size to be 56 bytes for both. + + On architectures where pointers are 16 bytes, this needs rounding up to + the next multiple of 16, 64, and on architectures where pointers are + even larger the size of SDL_UserEvent will dominate as being 3 pointers. + */ + Uint8 padding[sizeof(void *) <= 8 ? 56 : sizeof(void *) == 16 ? 64 : 3 * sizeof(void *)]; +} SDL_Event; + +/* Make sure we haven't broken binary compatibility */ +SDL_COMPILE_TIME_ASSERT(SDL_Event, sizeof(SDL_Event) == sizeof(((SDL_Event *)NULL)->padding)); + + +/* Function prototypes */ + +/** + * Pump the event loop, gathering events from the input devices. + * + * This function updates the event queue and internal input device state. + * + * **WARNING**: This should only be run in the thread that initialized the + * video subsystem, and for extra safety, you should consider only doing those + * things on the main thread in any case. + * + * SDL_PumpEvents() gathers all the pending input information from devices and + * places it in the event queue. Without calls to SDL_PumpEvents() no events + * would ever be placed on the queue. Often the need for calls to + * SDL_PumpEvents() is hidden from the user since SDL_PollEvent() and + * SDL_WaitEvent() implicitly call SDL_PumpEvents(). However, if you are not + * polling or waiting for events (e.g. you are filtering them), then you must + * call SDL_PumpEvents() to force an event queue update. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_WaitEvent + */ +extern DECLSPEC void SDLCALL SDL_PumpEvents(void); + +/* @{ */ +typedef enum +{ + SDL_ADDEVENT, + SDL_PEEKEVENT, + SDL_GETEVENT +} SDL_eventaction; + +/** + * Check the event queue for messages and optionally return them. + * + * `action` may be any of the following: + * + * - `SDL_ADDEVENT`: up to `numevents` events will be added to the back of the + * event queue. + * - `SDL_PEEKEVENT`: `numevents` events at the front of the event queue, + * within the specified minimum and maximum type, will be returned to the + * caller and will _not_ be removed from the queue. + * - `SDL_GETEVENT`: up to `numevents` events at the front of the event queue, + * within the specified minimum and maximum type, will be returned to the + * caller and will be removed from the queue. + * + * You may have to call SDL_PumpEvents() before calling this function. + * Otherwise, the events may not be ready to be filtered when you call + * SDL_PeepEvents(). + * + * This function is thread-safe. + * + * \param events destination buffer for the retrieved events + * \param numevents if action is SDL_ADDEVENT, the number of events to add + * back to the event queue; if action is SDL_PEEKEVENT or + * SDL_GETEVENT, the maximum number of events to retrieve + * \param action action to take; see [[#action|Remarks]] for details + * \param minType minimum value of the event type to be considered; + * SDL_FIRSTEVENT is a safe choice + * \param maxType maximum value of the event type to be considered; + * SDL_LASTEVENT is a safe choice + * \returns the number of events actually stored or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_PumpEvents + * \sa SDL_PushEvent + */ +extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents, + SDL_eventaction action, + Uint32 minType, Uint32 maxType); +/* @} */ + +/** + * Check for the existence of a certain event type in the event queue. + * + * If you need to check for a range of event types, use SDL_HasEvents() + * instead. + * + * \param type the type of event to be queried; see SDL_EventType for details + * \returns SDL_TRUE if events matching `type` are present, or SDL_FALSE if + * events matching `type` are not present. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasEvents + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 type); + + +/** + * Check for the existence of certain event types in the event queue. + * + * If you need to check for a single event type, use SDL_HasEvent() instead. + * + * \param minType the low end of event type to be queried, inclusive; see + * SDL_EventType for details + * \param maxType the high end of event type to be queried, inclusive; see + * SDL_EventType for details + * \returns SDL_TRUE if events with type >= `minType` and <= `maxType` are + * present, or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasEvents + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType); + +/** + * Clear events of a specific type from the event queue. + * + * This will unconditionally remove any events from the queue that match + * `type`. If you need to remove a range of event types, use SDL_FlushEvents() + * instead. + * + * It's also normal to just ignore events you don't care about in your event + * loop without calling this function. + * + * This function only affects currently queued events. If you want to make + * sure that all pending OS events are flushed, you can call SDL_PumpEvents() + * on the main thread immediately before the flush call. + * + * \param type the type of event to be cleared; see SDL_EventType for details + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FlushEvents + */ +extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type); + +/** + * Clear events of a range of types from the event queue. + * + * This will unconditionally remove any events from the queue that are in the + * range of `minType` to `maxType`, inclusive. If you need to remove a single + * event type, use SDL_FlushEvent() instead. + * + * It's also normal to just ignore events you don't care about in your event + * loop without calling this function. + * + * This function only affects currently queued events. If you want to make + * sure that all pending OS events are flushed, you can call SDL_PumpEvents() + * on the main thread immediately before the flush call. + * + * \param minType the low end of event type to be cleared, inclusive; see + * SDL_EventType for details + * \param maxType the high end of event type to be cleared, inclusive; see + * SDL_EventType for details + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FlushEvent + */ +extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType); + +/** + * Poll for currently pending events. + * + * If `event` is not NULL, the next event is removed from the queue and stored + * in the SDL_Event structure pointed to by `event`. The 1 returned refers to + * this event, immediately stored in the SDL Event structure -- not an event + * to follow. + * + * If `event` is NULL, it simply returns 1 if there is an event in the queue, + * but will not remove it from the queue. + * + * As this function may implicitly call SDL_PumpEvents(), you can only call + * this function in the thread that set the video mode. + * + * SDL_PollEvent() is the favored way of receiving system events since it can + * be done from the main loop and does not suspend the main loop while waiting + * on an event to be posted. + * + * The common practice is to fully process the event queue once every frame, + * usually as a first step before updating the game's state: + * + * ```c + * while (game_is_still_running) { + * SDL_Event event; + * while (SDL_PollEvent(&event)) { // poll until all events are handled! + * // decide what to do with this event. + * } + * + * // update game state, draw the current frame + * } + * ``` + * + * \param event the SDL_Event structure to be filled with the next event from + * the queue, or NULL + * \returns 1 if there is a pending event or 0 if there are none available. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetEventFilter + * \sa SDL_PeepEvents + * \sa SDL_PushEvent + * \sa SDL_SetEventFilter + * \sa SDL_WaitEvent + * \sa SDL_WaitEventTimeout + */ +extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event); + +/** + * Wait indefinitely for the next available event. + * + * If `event` is not NULL, the next event is removed from the queue and stored + * in the SDL_Event structure pointed to by `event`. + * + * As this function may implicitly call SDL_PumpEvents(), you can only call + * this function in the thread that initialized the video subsystem. + * + * \param event the SDL_Event structure to be filled in with the next event + * from the queue, or NULL + * \returns 1 on success or 0 if there was an error while waiting for events; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_PumpEvents + * \sa SDL_WaitEventTimeout + */ +extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event); + +/** + * Wait until the specified timeout (in milliseconds) for the next available + * event. + * + * If `event` is not NULL, the next event is removed from the queue and stored + * in the SDL_Event structure pointed to by `event`. + * + * As this function may implicitly call SDL_PumpEvents(), you can only call + * this function in the thread that initialized the video subsystem. + * + * \param event the SDL_Event structure to be filled in with the next event + * from the queue, or NULL + * \param timeout the maximum number of milliseconds to wait for the next + * available event + * \returns 1 on success or 0 if there was an error while waiting for events; + * call SDL_GetError() for more information. This also returns 0 if + * the timeout elapsed without an event arriving. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_PumpEvents + * \sa SDL_WaitEvent + */ +extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event * event, + int timeout); + +/** + * Add an event to the event queue. + * + * The event queue can actually be used as a two way communication channel. + * Not only can events be read from the queue, but the user can also push + * their own events onto it. `event` is a pointer to the event structure you + * wish to push onto the queue. The event is copied into the queue, and the + * caller may dispose of the memory pointed to after SDL_PushEvent() returns. + * + * Note: Pushing device input events onto the queue doesn't modify the state + * of the device within SDL. + * + * This function is thread-safe, and can be called from other threads safely. + * + * Note: Events pushed onto the queue with SDL_PushEvent() get passed through + * the event filter but events added with SDL_PeepEvents() do not. + * + * For pushing application-specific events, please use SDL_RegisterEvents() to + * get an event type that does not conflict with other code that also wants + * its own custom event types. + * + * \param event the SDL_Event to be added to the queue + * \returns 1 on success, 0 if the event was filtered, or a negative error + * code on failure; call SDL_GetError() for more information. A + * common reason for error is the event queue being full. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PeepEvents + * \sa SDL_PollEvent + * \sa SDL_RegisterEvents + */ +extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event); + +/** + * A function pointer used for callbacks that watch the event queue. + * + * \param userdata what was passed as `userdata` to SDL_SetEventFilter() + * or SDL_AddEventWatch, etc + * \param event the event that triggered the callback + * \returns 1 to permit event to be added to the queue, and 0 to disallow + * it. When used with SDL_AddEventWatch, the return value is ignored. + * + * \sa SDL_SetEventFilter + * \sa SDL_AddEventWatch + */ +typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event); + +/** + * Set up a filter to process all events before they change internal state and + * are posted to the internal event queue. + * + * If the filter function returns 1 when called, then the event will be added + * to the internal queue. If it returns 0, then the event will be dropped from + * the queue, but the internal state will still be updated. This allows + * selective filtering of dynamically arriving events. + * + * **WARNING**: Be very careful of what you do in the event filter function, + * as it may run in a different thread! + * + * On platforms that support it, if the quit event is generated by an + * interrupt signal (e.g. pressing Ctrl-C), it will be delivered to the + * application at the next event poll. + * + * There is one caveat when dealing with the ::SDL_QuitEvent event type. The + * event filter is only called when the window manager desires to close the + * application window. If the event filter returns 1, then the window will be + * closed, otherwise the window will remain open if possible. + * + * Note: Disabled events never make it to the event filter function; see + * SDL_EventState(). + * + * Note: If you just want to inspect events without filtering, you should use + * SDL_AddEventWatch() instead. + * + * Note: Events pushed onto the queue with SDL_PushEvent() get passed through + * the event filter, but events pushed onto the queue with SDL_PeepEvents() do + * not. + * + * \param filter An SDL_EventFilter function to call when an event happens + * \param userdata a pointer that is passed to `filter` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddEventWatch + * \sa SDL_EventState + * \sa SDL_GetEventFilter + * \sa SDL_PeepEvents + * \sa SDL_PushEvent + */ +extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter, + void *userdata); + +/** + * Query the current event filter. + * + * This function can be used to "chain" filters, by saving the existing filter + * before replacing it with a function that will call that saved filter. + * + * \param filter the current callback function will be stored here + * \param userdata the pointer that is passed to the current event filter will + * be stored here + * \returns SDL_TRUE on success or SDL_FALSE if there is no event filter set. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetEventFilter + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter, + void **userdata); + +/** + * Add a callback to be triggered when an event is added to the event queue. + * + * `filter` will be called when an event happens, and its return value is + * ignored. + * + * **WARNING**: Be very careful of what you do in the event filter function, + * as it may run in a different thread! + * + * If the quit event is generated by a signal (e.g. SIGINT), it will bypass + * the internal queue and be delivered to the watch callback immediately, and + * arrive at the next event poll. + * + * Note: the callback is called for events posted by the user through + * SDL_PushEvent(), but not for disabled events, nor for events by a filter + * callback set with SDL_SetEventFilter(), nor for events posted by the user + * through SDL_PeepEvents(). + * + * \param filter an SDL_EventFilter function to call when an event happens. + * \param userdata a pointer that is passed to `filter` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DelEventWatch + * \sa SDL_SetEventFilter + */ +extern DECLSPEC void SDLCALL SDL_AddEventWatch(SDL_EventFilter filter, + void *userdata); + +/** + * Remove an event watch callback added with SDL_AddEventWatch(). + * + * This function takes the same input as SDL_AddEventWatch() to identify and + * delete the corresponding callback. + * + * \param filter the function originally passed to SDL_AddEventWatch() + * \param userdata the pointer originally passed to SDL_AddEventWatch() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddEventWatch + */ +extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter, + void *userdata); + +/** + * Run a specific filter function on the current event queue, removing any + * events for which the filter returns 0. + * + * See SDL_SetEventFilter() for more information. Unlike SDL_SetEventFilter(), + * this function does not change the filter permanently, it only uses the + * supplied filter until this function returns. + * + * \param filter the SDL_EventFilter function to call when an event happens + * \param userdata a pointer that is passed to `filter` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetEventFilter + * \sa SDL_SetEventFilter + */ +extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, + void *userdata); + +/* @{ */ +#define SDL_QUERY -1 +#define SDL_IGNORE 0 +#define SDL_DISABLE 0 +#define SDL_ENABLE 1 + +/** + * Set the state of processing events by type. + * + * `state` may be any of the following: + * + * - `SDL_QUERY`: returns the current processing state of the specified event + * - `SDL_IGNORE` (aka `SDL_DISABLE`): the event will automatically be dropped + * from the event queue and will not be filtered + * - `SDL_ENABLE`: the event will be processed normally + * + * \param type the type of event; see SDL_EventType for details + * \param state how to process the event + * \returns `SDL_DISABLE` or `SDL_ENABLE`, representing the processing state + * of the event before this function makes any changes to it. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetEventState + */ +extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint32 type, int state); +/* @} */ +#define SDL_GetEventState(type) SDL_EventState(type, SDL_QUERY) + +/** + * Allocate a set of user-defined events, and return the beginning event + * number for that set of events. + * + * Calling this function with `numevents` <= 0 is an error and will return + * (Uint32)-1. + * + * Note, (Uint32)-1 means the maximum unsigned 32-bit integer value (or + * 0xFFFFFFFF), but is clearer to write. + * + * \param numevents the number of events to be allocated + * \returns the beginning event number, or (Uint32)-1 if there are not enough + * user-defined events left. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PushEvent + */ +extern DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_events_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_filesystem.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_filesystem.h new file mode 100644 index 00000000000..1c92913161e --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_filesystem.h @@ -0,0 +1,145 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_filesystem.h + * + * \brief Include file for filesystem SDL API functions + */ + +#ifndef SDL_filesystem_h_ +#define SDL_filesystem_h_ + +#include + +#include + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the directory where the application was run from. + * + * This is not necessarily a fast call, so you should call this once near + * startup and save the string if you need it. + * + * **Mac OS X and iOS Specific Functionality**: If the application is in a + * ".app" bundle, this function returns the Resource directory (e.g. + * MyApp.app/Contents/Resources/). This behaviour can be overridden by adding + * a property to the Info.plist file. Adding a string key with the name + * SDL_FILESYSTEM_BASE_DIR_TYPE with a supported value will change the + * behaviour. + * + * Supported values for the SDL_FILESYSTEM_BASE_DIR_TYPE property (Given an + * application in /Applications/SDLApp/MyApp.app): + * + * - `resource`: bundle resource directory (the default). For example: + * `/Applications/SDLApp/MyApp.app/Contents/Resources` + * - `bundle`: the Bundle directory. For example: + * `/Applications/SDLApp/MyApp.app/` + * - `parent`: the containing directory of the bundle. For example: + * `/Applications/SDLApp/` + * + * The returned path is guaranteed to end with a path separator ('\' on + * Windows, '/' on most other platforms). + * + * The pointer returned is owned by the caller. Please call SDL_free() on the + * pointer when done with it. + * + * \returns an absolute path in UTF-8 encoding to the application data + * directory. NULL will be returned on error or when the platform + * doesn't implement this functionality, call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_GetPrefPath + */ +extern DECLSPEC char *SDLCALL SDL_GetBasePath(void); + +/** + * Get the user-and-app-specific path where files can be written. + * + * Get the "pref dir". This is meant to be where users can write personal + * files (preferences and save games, etc) that are specific to your + * application. This directory is unique per user, per application. + * + * This function will decide the appropriate location in the native + * filesystem, create the directory if necessary, and return a string of the + * absolute path to the directory in UTF-8 encoding. + * + * On Windows, the string might look like: + * + * `C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\` + * + * On Linux, the string might look like" + * + * `/home/bob/.local/share/My Program Name/` + * + * On Mac OS X, the string might look like: + * + * `/Users/bob/Library/Application Support/My Program Name/` + * + * You should assume the path returned by this function is the only safe place + * to write files (and that SDL_GetBasePath(), while it might be writable, or + * even the parent of the returned path, isn't where you should be writing + * things). + * + * Both the org and app strings may become part of a directory name, so please + * follow these rules: + * + * - Try to use the same org string (_including case-sensitivity_) for all + * your applications that use this function. + * - Always use a unique app string for each one, and make sure it never + * changes for an app once you've decided on it. + * - Unicode characters are legal, as long as it's UTF-8 encoded, but... + * - ...only use letters, numbers, and spaces. Avoid punctuation like "Game + * Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient. + * + * The returned path is guaranteed to end with a path separator ('\' on + * Windows, '/' on most other platforms). + * + * The pointer returned is owned by the caller. Please call SDL_free() on the + * pointer when done with it. + * + * \param org the name of your organization + * \param app the name of your application + * \returns a UTF-8 string of the user directory in platform-dependent + * notation. NULL if there's a problem (creating directory failed, + * etc.). + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_GetBasePath + */ +extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_filesystem_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_gamecontroller.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_gamecontroller.h new file mode 100644 index 00000000000..254397c6c96 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_gamecontroller.h @@ -0,0 +1,1002 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_gamecontroller.h + * + * Include file for SDL game controller event handling + */ + +#ifndef SDL_gamecontroller_h_ +#define SDL_gamecontroller_h_ + +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_gamecontroller.h + * + * In order to use these functions, SDL_Init() must have been called + * with the ::SDL_INIT_GAMECONTROLLER flag. This causes SDL to scan the system + * for game controllers, and load appropriate drivers. + * + * If you would like to receive controller updates while the application + * is in the background, you should set the following hint before calling + * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS + */ + +/** + * The gamecontroller structure used to identify an SDL game controller + */ +struct _SDL_GameController; +typedef struct _SDL_GameController SDL_GameController; + +typedef enum +{ + SDL_CONTROLLER_TYPE_UNKNOWN = 0, + SDL_CONTROLLER_TYPE_XBOX360, + SDL_CONTROLLER_TYPE_XBOXONE, + SDL_CONTROLLER_TYPE_PS3, + SDL_CONTROLLER_TYPE_PS4, + SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO, + SDL_CONTROLLER_TYPE_VIRTUAL, + SDL_CONTROLLER_TYPE_PS5, + SDL_CONTROLLER_TYPE_AMAZON_LUNA, + SDL_CONTROLLER_TYPE_GOOGLE_STADIA +} SDL_GameControllerType; + +typedef enum +{ + SDL_CONTROLLER_BINDTYPE_NONE = 0, + SDL_CONTROLLER_BINDTYPE_BUTTON, + SDL_CONTROLLER_BINDTYPE_AXIS, + SDL_CONTROLLER_BINDTYPE_HAT +} SDL_GameControllerBindType; + +/** + * Get the SDL joystick layer binding for this controller button/axis mapping + */ +typedef struct SDL_GameControllerButtonBind +{ + SDL_GameControllerBindType bindType; + union + { + int button; + int axis; + struct { + int hat; + int hat_mask; + } hat; + } value; + +} SDL_GameControllerButtonBind; + + +/** + * To count the number of game controllers in the system for the following: + * + * ```c + * int nJoysticks = SDL_NumJoysticks(); + * int nGameControllers = 0; + * for (int i = 0; i < nJoysticks; i++) { + * if (SDL_IsGameController(i)) { + * nGameControllers++; + * } + * } + * ``` + * + * Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping() you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is: + * guid,name,mappings + * + * Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones. + * Under Windows there is a reserved GUID of "xinput" that covers any XInput devices. + * The mapping format for joystick is: + * bX - a joystick button, index X + * hX.Y - hat X with value Y + * aX - axis X of the joystick + * Buttons can be used as a controller axis and vice versa. + * + * This string shows an example of a valid mapping for a controller + * + * ```c + * "03000000341a00003608000000000000,PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", + * ``` + */ + +/** + * Load a set of Game Controller mappings from a seekable SDL data stream. + * + * You can call this function several times, if needed, to load different + * database files. + * + * If a new mapping is loaded for an already known controller GUID, the later + * version will overwrite the one currently loaded. + * + * Mappings not belonging to the current platform or with no platform field + * specified will be ignored (i.e. mappings for Linux will be ignored in + * Windows, etc). + * + * This function will load the text database entirely in memory before + * processing it, so take this into consideration if you are in a memory + * constrained environment. + * + * \param rw the data stream for the mappings to be added + * \param freerw non-zero to close the stream after being read + * \returns the number of mappings added or -1 on error; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_GameControllerAddMapping + * \sa SDL_GameControllerAddMappingsFromFile + * \sa SDL_GameControllerMappingForGUID + */ +extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, int freerw); + +/** + * Load a set of mappings from a file, filtered by the current SDL_GetPlatform() + * + * Convenience macro. + */ +#define SDL_GameControllerAddMappingsFromFile(file) SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file, "rb"), 1) + +/** + * Add support for controllers that SDL is unaware of or to cause an existing + * controller to have a different binding. + * + * The mapping string has the format "GUID,name,mapping", where GUID is the + * string value from SDL_JoystickGetGUIDString(), name is the human readable + * string for the device and mappings are controller mappings to joystick + * ones. Under Windows there is a reserved GUID of "xinput" that covers all + * XInput devices. The mapping format for joystick is: {| |bX |a joystick + * button, index X |- |hX.Y |hat X with value Y |- |aX |axis X of the joystick + * |} Buttons can be used as a controller axes and vice versa. + * + * This string shows an example of a valid mapping for a controller: + * + * ```c + * "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7" + * ``` + * + * \param mappingString the mapping string + * \returns 1 if a new mapping is added, 0 if an existing mapping is updated, + * -1 on error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerMapping + * \sa SDL_GameControllerMappingForGUID + */ +extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping(const char* mappingString); + +/** + * Get the number of mappings installed. + * + * \returns the number of mappings. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerNumMappings(void); + +/** + * Get the mapping at a particular index. + * + * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if + * the index is out of range. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForIndex(int mapping_index); + +/** + * Get the game controller mapping string for a given GUID. + * + * The returned string must be freed with SDL_free(). + * + * \param guid a structure containing the GUID for which a mapping is desired + * \returns a mapping string or NULL on error; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetDeviceGUID + * \sa SDL_JoystickGetGUID + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid); + +/** + * Get the current mapping of a Game Controller. + * + * The returned string must be freed with SDL_free(). + * + * Details about mappings are discussed with SDL_GameControllerAddMapping(). + * + * \param gamecontroller the game controller you want to get the current + * mapping for + * \returns a string that has the controller's mapping or NULL if no mapping + * is available; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerAddMapping + * \sa SDL_GameControllerMappingForGUID + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMapping(SDL_GameController *gamecontroller); + +/** + * Check if the given joystick is supported by the game controller interface. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * \param joystick_index the device_index of a device, up to + * SDL_NumJoysticks() + * \returns SDL_TRUE if the given joystick is supported by the game controller + * interface, SDL_FALSE if it isn't or it's an invalid index. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerNameForIndex + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index); + +/** + * Get the implementation dependent name for the game controller. + * + * This function can be called before any controllers are opened. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1 + * \returns the implementation-dependent name for the game controller, or NULL + * if there is no name or the index is invalid. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerName + * \sa SDL_GameControllerOpen + * \sa SDL_IsGameController + */ +extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_index); + +/** + * Get the type of a game controller. + * + * This can be called before any controllers are opened. + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1 + * \returns the controller type. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerTypeForIndex(int joystick_index); + +/** + * Get the mapping of a game controller. + * + * This can be called before any controllers are opened. + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1 + * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if + * no mapping is available. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC char *SDLCALL SDL_GameControllerMappingForDeviceIndex(int joystick_index); + +/** + * Open a game controller for use. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * The index passed as an argument refers to the N'th game controller on the + * system. This index is not the value which will identify this controller in + * future controller events. The joystick's instance id (SDL_JoystickID) will + * be used there instead. + * + * \param joystick_index the device_index of a device, up to + * SDL_NumJoysticks() + * \returns a gamecontroller identifier or NULL if an error occurred; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerClose + * \sa SDL_GameControllerNameForIndex + * \sa SDL_IsGameController + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerOpen(int joystick_index); + +/** + * Get the SDL_GameController associated with an instance id. + * + * \param joyid the instance id to get the SDL_GameController for + * \returns an SDL_GameController on success or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromInstanceID(SDL_JoystickID joyid); + +/** + * Get the SDL_GameController associated with a player index. + * + * Please note that the player index is _not_ the device index, nor is it the + * instance id! + * + * \param player_index the player index, which is not the device index or the + * instance id! + * \returns the SDL_GameController associated with a player index. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_GameControllerGetPlayerIndex + * \sa SDL_GameControllerSetPlayerIndex + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromPlayerIndex(int player_index); + +/** + * Get the implementation-dependent name for an opened game controller. + * + * This is the same name as returned by SDL_GameControllerNameForIndex(), but + * it takes a controller identifier instead of the (unstable) device index. + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen() + * \returns the implementation dependent name for the game controller, or NULL + * if there is no name or the identifier passed is invalid. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerNameForIndex + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *gamecontroller); + +/** + * Get the type of this currently opened controller + * + * This is the same name as returned by SDL_GameControllerTypeForIndex(), but + * it takes a controller identifier instead of the (unstable) device index. + * + * \param gamecontroller the game controller object to query. + * \returns the controller type. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerGetType(SDL_GameController *gamecontroller); + +/** + * Get the player index of an opened game controller. + * + * For XInput controllers this returns the XInput user index. + * + * \param gamecontroller the game controller object to query. + * \returns the player index for controller, or -1 if it's not available. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetPlayerIndex(SDL_GameController *gamecontroller); + +/** + * Set the player index of an opened game controller. + * + * \param gamecontroller the game controller object to adjust. + * \param player_index Player index to assign to this controller. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC void SDLCALL SDL_GameControllerSetPlayerIndex(SDL_GameController *gamecontroller, int player_index); + +/** + * Get the USB vendor ID of an opened controller, if available. + * + * If the vendor ID isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the USB vendor ID, or zero if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetVendor(SDL_GameController *gamecontroller); + +/** + * Get the USB product ID of an opened controller, if available. + * + * If the product ID isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the USB product ID, or zero if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProduct(SDL_GameController *gamecontroller); + +/** + * Get the product version of an opened controller, if available. + * + * If the product version isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the USB product version, or zero if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProductVersion(SDL_GameController *gamecontroller); + +/** + * Get the serial number of an opened controller, if available. + * + * Returns the serial number of the controller, or NULL if it is not + * available. + * + * \param gamecontroller the game controller object to query. + * \return the serial number, or NULL if unavailable. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC const char * SDLCALL SDL_GameControllerGetSerial(SDL_GameController *gamecontroller); + +/** + * Check if a controller has been opened and is currently connected. + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen() + * \returns SDL_TRUE if the controller has been opened and is currently + * connected, or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerClose + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerGetAttached(SDL_GameController *gamecontroller); + +/** + * Get the Joystick ID from a Game Controller. + * + * This function will give you a SDL_Joystick object, which allows you to use + * the SDL_Joystick functions with a SDL_GameController object. This would be + * useful for getting a joystick's position at any given time, even if it + * hasn't moved (moving it would produce an event, which would have the axis' + * value). + * + * The pointer returned is owned by the SDL_GameController. You should not + * call SDL_JoystickClose() on it, for example, since doing so will likely + * cause SDL to crash. + * + * \param gamecontroller the game controller object that you want to get a + * joystick from + * \returns a SDL_Joystick object; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_GameControllerGetJoystick(SDL_GameController *gamecontroller); + +/** + * Query or change current state of Game Controller events. + * + * If controller events are disabled, you must call SDL_GameControllerUpdate() + * yourself and check the state of the controller when you want controller + * information. + * + * Any number can be passed to SDL_GameControllerEventState(), but only -1, 0, + * and 1 will have any effect. Other numbers will just be returned. + * + * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` + * \returns the same value passed to the function, with exception to -1 + * (SDL_QUERY), which will return the current state. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickEventState + */ +extern DECLSPEC int SDLCALL SDL_GameControllerEventState(int state); + +/** + * Manually pump game controller updates if not using the loop. + * + * This function is called automatically by the event loop if events are + * enabled. Under such circumstances, it will not be necessary to call this + * function. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_GameControllerUpdate(void); + + +/** + * The list of axes available from a controller + * + * Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to SDL_JOYSTICK_AXIS_MAX, + * and are centered within ~8000 of zero, though advanced UI will allow users to set + * or autodetect the dead zone, which varies between controllers. + * + * Trigger axis values range from 0 to SDL_JOYSTICK_AXIS_MAX. + */ +typedef enum +{ + SDL_CONTROLLER_AXIS_INVALID = -1, + SDL_CONTROLLER_AXIS_LEFTX, + SDL_CONTROLLER_AXIS_LEFTY, + SDL_CONTROLLER_AXIS_RIGHTX, + SDL_CONTROLLER_AXIS_RIGHTY, + SDL_CONTROLLER_AXIS_TRIGGERLEFT, + SDL_CONTROLLER_AXIS_TRIGGERRIGHT, + SDL_CONTROLLER_AXIS_MAX +} SDL_GameControllerAxis; + +/** + * Convert a string into SDL_GameControllerAxis enum. + * + * This function is called internally to translate SDL_GameController mapping + * strings for the underlying joystick device into the consistent + * SDL_GameController mapping. You do not normally need to call this function + * unless you are parsing SDL_GameController mappings in your own code. + * + * Note specially that "righttrigger" and "lefttrigger" map to + * `SDL_CONTROLLER_AXIS_TRIGGERRIGHT` and `SDL_CONTROLLER_AXIS_TRIGGERLEFT`, + * respectively. + * + * \param str string representing a SDL_GameController axis + * \returns the SDL_GameControllerAxis enum corresponding to the input string, + * or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetStringForAxis + */ +extern DECLSPEC SDL_GameControllerAxis SDLCALL SDL_GameControllerGetAxisFromString(const char *str); + +/** + * Convert from an SDL_GameControllerAxis enum to a string. + * + * The caller should not SDL_free() the returned string. + * + * \param axis an enum value for a given SDL_GameControllerAxis + * \returns a string for the given axis, or NULL if an invalid axis is + * specified. The string returned is of the format used by + * SDL_GameController mapping strings. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetAxisFromString + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis); + +/** + * Get the SDL joystick layer binding for a controller axis mapping. + * + * \param gamecontroller a game controller + * \param axis an axis enum value (one of the SDL_GameControllerAxis values) + * \returns a SDL_GameControllerButtonBind describing the bind. On failure + * (like the given Controller axis doesn't exist on the device), its + * `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetBindForButton + */ +extern DECLSPEC SDL_GameControllerButtonBind SDLCALL +SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, + SDL_GameControllerAxis axis); + +/** + * Query whether a game controller has a given axis. + * + * This merely reports whether the controller's mapping defined this axis, as + * that is all the information SDL has about the physical device. + * + * \param gamecontroller a game controller + * \param axis an axis enum value (an SDL_GameControllerAxis value) + * \returns SDL_TRUE if the controller has this axis, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL +SDL_GameControllerHasAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); + +/** + * Get the current state of an axis control on a game controller. + * + * The axis indices start at index 0. + * + * The state is a value ranging from -32768 to 32767. Triggers, however, range + * from 0 to 32767 (they never return a negative value). + * + * \param gamecontroller a game controller + * \param axis an axis index (one of the SDL_GameControllerAxis values) + * \returns axis state (including 0) on success or 0 (also) on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetButton + */ +extern DECLSPEC Sint16 SDLCALL +SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); + +/** + * The list of buttons available from a controller + */ +typedef enum +{ + SDL_CONTROLLER_BUTTON_INVALID = -1, + SDL_CONTROLLER_BUTTON_A, + SDL_CONTROLLER_BUTTON_B, + SDL_CONTROLLER_BUTTON_X, + SDL_CONTROLLER_BUTTON_Y, + SDL_CONTROLLER_BUTTON_BACK, + SDL_CONTROLLER_BUTTON_GUIDE, + SDL_CONTROLLER_BUTTON_START, + SDL_CONTROLLER_BUTTON_LEFTSTICK, + SDL_CONTROLLER_BUTTON_RIGHTSTICK, + SDL_CONTROLLER_BUTTON_LEFTSHOULDER, + SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, + SDL_CONTROLLER_BUTTON_DPAD_UP, + SDL_CONTROLLER_BUTTON_DPAD_DOWN, + SDL_CONTROLLER_BUTTON_DPAD_LEFT, + SDL_CONTROLLER_BUTTON_DPAD_RIGHT, + SDL_CONTROLLER_BUTTON_MISC1, /* Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button */ + SDL_CONTROLLER_BUTTON_PADDLE1, /* Xbox Elite paddle P1 */ + SDL_CONTROLLER_BUTTON_PADDLE2, /* Xbox Elite paddle P3 */ + SDL_CONTROLLER_BUTTON_PADDLE3, /* Xbox Elite paddle P2 */ + SDL_CONTROLLER_BUTTON_PADDLE4, /* Xbox Elite paddle P4 */ + SDL_CONTROLLER_BUTTON_TOUCHPAD, /* PS4/PS5 touchpad button */ + SDL_CONTROLLER_BUTTON_MAX +} SDL_GameControllerButton; + +/** + * Convert a string into an SDL_GameControllerButton enum. + * + * This function is called internally to translate SDL_GameController mapping + * strings for the underlying joystick device into the consistent + * SDL_GameController mapping. You do not normally need to call this function + * unless you are parsing SDL_GameController mappings in your own code. + * + * \param str string representing a SDL_GameController axis + * \returns the SDL_GameControllerButton enum corresponding to the input + * string, or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_GameControllerButton SDLCALL SDL_GameControllerGetButtonFromString(const char *str); + +/** + * Convert from an SDL_GameControllerButton enum to a string. + * + * The caller should not SDL_free() the returned string. + * + * \param button an enum value for a given SDL_GameControllerButton + * \returns a string for the given button, or NULL if an invalid axis is + * specified. The string returned is of the format used by + * SDL_GameController mapping strings. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetButtonFromString + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForButton(SDL_GameControllerButton button); + +/** + * Get the SDL joystick layer binding for a controller button mapping. + * + * \param gamecontroller a game controller + * \param button an button enum value (an SDL_GameControllerButton value) + * \returns a SDL_GameControllerButtonBind describing the bind. On failure + * (like the given Controller button doesn't exist on the device), + * its `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetBindForAxis + */ +extern DECLSPEC SDL_GameControllerButtonBind SDLCALL +SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Query whether a game controller has a given button. + * + * This merely reports whether the controller's mapping defined this button, + * as that is all the information SDL has about the physical device. + * + * \param gamecontroller a game controller + * \param button a button enum value (an SDL_GameControllerButton value) + * \returns SDL_TRUE if the controller has this button, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Get the current state of a button on a game controller. + * + * \param gamecontroller a game controller + * \param button a button index (one of the SDL_GameControllerButton values) + * \returns 1 for pressed state or 0 for not pressed state or error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetAxis + */ +extern DECLSPEC Uint8 SDLCALL SDL_GameControllerGetButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Get the number of touchpads on a game controller. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetNumTouchpads(SDL_GameController *gamecontroller); + +/** + * Get the number of supported simultaneous fingers on a touchpad on a game + * controller. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetNumTouchpadFingers(SDL_GameController *gamecontroller, int touchpad); + +/** + * Get the current state of a finger on a touchpad on a game controller. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetTouchpadFinger(SDL_GameController *gamecontroller, int touchpad, int finger, Uint8 *state, float *x, float *y, float *pressure); + +/** + * Return whether a game controller has a particular sensor. + * + * \param gamecontroller The controller to query + * \param type The type of sensor to query + * \returns SDL_TRUE if the sensor exists, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasSensor(SDL_GameController *gamecontroller, SDL_SensorType type); + +/** + * Set whether data reporting for a game controller sensor is enabled. + * + * \param gamecontroller The controller to update + * \param type The type of sensor to enable/disable + * \param enabled Whether data reporting should be enabled + * \returns 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerSetSensorEnabled(SDL_GameController *gamecontroller, SDL_SensorType type, SDL_bool enabled); + +/** + * Query whether sensor data reporting is enabled for a game controller. + * + * \param gamecontroller The controller to query + * \param type The type of sensor to query + * \returns SDL_TRUE if the sensor is enabled, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerIsSensorEnabled(SDL_GameController *gamecontroller, SDL_SensorType type); + +/** + * Get the data rate (number of events per second) of a game controller + * sensor. + * + * \param gamecontroller The controller to query + * \param type The type of sensor to query + * \return the data rate, or 0.0f if the data rate is not available. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC float SDLCALL SDL_GameControllerGetSensorDataRate(SDL_GameController *gamecontroller, SDL_SensorType type); + +/** + * Get the current state of a game controller sensor. + * + * The number of values and interpretation of the data is sensor dependent. + * See SDL_sensor.h for the details for each type of sensor. + * + * \param gamecontroller The controller to query + * \param type The type of sensor to query + * \param data A pointer filled with the current sensor state + * \param num_values The number of values to write to data + * \return 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetSensorData(SDL_GameController *gamecontroller, SDL_SensorType type, float *data, int num_values); + +/** + * Start a rumble effect on a game controller. + * + * Each call to this function cancels any previous rumble effect, and calling + * it with 0 intensity stops any rumbling. + * + * \param gamecontroller The controller to vibrate + * \param low_frequency_rumble The intensity of the low frequency (left) + * rumble motor, from 0 to 0xFFFF + * \param high_frequency_rumble The intensity of the high frequency (right) + * rumble motor, from 0 to 0xFFFF + * \param duration_ms The duration of the rumble effect, in milliseconds + * \returns 0, or -1 if rumble isn't supported on this controller + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_GameControllerHasRumble + */ +extern DECLSPEC int SDLCALL SDL_GameControllerRumble(SDL_GameController *gamecontroller, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); + +/** + * Start a rumble effect in the game controller's triggers. + * + * Each call to this function cancels any previous trigger rumble effect, and + * calling it with 0 intensity stops any rumbling. + * + * Note that this is rumbling of the _triggers_ and not the game controller as + * a whole. This is currently only supported on Xbox One controllers. If you + * want the (more common) whole-controller rumble, use + * SDL_GameControllerRumble() instead. + * + * \param gamecontroller The controller to vibrate + * \param left_rumble The intensity of the left trigger rumble motor, from 0 + * to 0xFFFF + * \param right_rumble The intensity of the right trigger rumble motor, from 0 + * to 0xFFFF + * \param duration_ms The duration of the rumble effect, in milliseconds + * \returns 0, or -1 if trigger rumble isn't supported on this controller + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_GameControllerHasRumbleTriggers + */ +extern DECLSPEC int SDLCALL SDL_GameControllerRumbleTriggers(SDL_GameController *gamecontroller, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms); + +/** + * Query whether a game controller has an LED. + * + * \param gamecontroller The controller to query + * \returns SDL_TRUE, or SDL_FALSE if this controller does not have a + * modifiable LED + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasLED(SDL_GameController *gamecontroller); + +/** + * Query whether a game controller has rumble support. + * + * \param gamecontroller The controller to query + * \returns SDL_TRUE, or SDL_FALSE if this controller does not have rumble + * support + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerRumble + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumble(SDL_GameController *gamecontroller); + +/** + * Query whether a game controller has rumble support on triggers. + * + * \param gamecontroller The controller to query + * \returns SDL_TRUE, or SDL_FALSE if this controller does not have trigger + * rumble support + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerRumbleTriggers + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumbleTriggers(SDL_GameController *gamecontroller); + +/** + * Update a game controller's LED color. + * + * \param gamecontroller The controller to update + * \param red The intensity of the red LED + * \param green The intensity of the green LED + * \param blue The intensity of the blue LED + * \returns 0, or -1 if this controller does not have a modifiable LED + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerSetLED(SDL_GameController *gamecontroller, Uint8 red, Uint8 green, Uint8 blue); + +/** + * Send a controller specific effect packet + * + * \param gamecontroller The controller to affect + * \param data The data to send to the controller + * \param size The size of the data to send to the controller + * \returns 0, or -1 if this controller or driver doesn't support effect + * packets + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerSendEffect(SDL_GameController *gamecontroller, const void *data, int size); + +/** + * Close a game controller previously opened with SDL_GameControllerOpen(). + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC void SDLCALL SDL_GameControllerClose(SDL_GameController *gamecontroller); + +/** + * Return the sfSymbolsName for a given button on a game controller on Apple + * platforms. + * + * \param gamecontroller the controller to query + * \param button a button on the game controller + * \returns the sfSymbolsName or NULL if the name can't be found + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerGetAppleSFSymbolsNameForAxis + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button); + +/** + * Return the sfSymbolsName for a given axis on a game controller on Apple + * platforms. + * + * \param gamecontroller the controller to query + * \param axis an axis on the game controller + * \returns the sfSymbolsName or NULL if the name can't be found + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerGetAppleSFSymbolsNameForButton + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_gamecontroller_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_gesture.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_gesture.h new file mode 100644 index 00000000000..6af76adf8b8 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_gesture.h @@ -0,0 +1,117 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_gesture.h + * + * Include file for SDL gesture event handling. + */ + +#ifndef SDL_gesture_h_ +#define SDL_gesture_h_ + +#include +#include +#include + +#include + + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef Sint64 SDL_GestureID; + +/* Function prototypes */ + +/** + * Begin recording a gesture on a specified touch device or all touch devices. + * + * If the parameter `touchId` is -1 (i.e., all devices), this function will + * always return 1, regardless of whether there actually are any devices. + * + * \param touchId the touch device id, or -1 for all touch devices + * \returns 1 on success or 0 if the specified device could not be found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTouchDevice + */ +extern DECLSPEC int SDLCALL SDL_RecordGesture(SDL_TouchID touchId); + + +/** + * Save all currently loaded Dollar Gesture templates. + * + * \param dst a SDL_RWops to save to + * \returns the number of saved templates on success or 0 on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadDollarTemplates + * \sa SDL_SaveDollarTemplate + */ +extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(SDL_RWops *dst); + +/** + * Save a currently loaded Dollar Gesture template. + * + * \param gestureId a gesture id + * \param dst a SDL_RWops to save to + * \returns 1 on success or 0 on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadDollarTemplates + * \sa SDL_SaveAllDollarTemplates + */ +extern DECLSPEC int SDLCALL SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *dst); + + +/** + * Load Dollar Gesture templates from a file. + * + * \param touchId a touch id + * \param src a SDL_RWops to load from + * \returns the number of loaded templates on success or a negative error code + * (or 0) on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SaveAllDollarTemplates + * \sa SDL_SaveDollarTemplate + */ +extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_gesture_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_haptic.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_haptic.h new file mode 100644 index 00000000000..f9dee0b8131 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_haptic.h @@ -0,0 +1,1341 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_haptic.h + * + * \brief The SDL haptic subsystem allows you to control haptic (force feedback) + * devices. + * + * The basic usage is as follows: + * - Initialize the subsystem (::SDL_INIT_HAPTIC). + * - Open a haptic device. + * - SDL_HapticOpen() to open from index. + * - SDL_HapticOpenFromJoystick() to open from an existing joystick. + * - Create an effect (::SDL_HapticEffect). + * - Upload the effect with SDL_HapticNewEffect(). + * - Run the effect with SDL_HapticRunEffect(). + * - (optional) Free the effect with SDL_HapticDestroyEffect(). + * - Close the haptic device with SDL_HapticClose(). + * + * \par Simple rumble example: + * \code + * SDL_Haptic *haptic; + * + * // Open the device + * haptic = SDL_HapticOpen( 0 ); + * if (haptic == NULL) + * return -1; + * + * // Initialize simple rumble + * if (SDL_HapticRumbleInit( haptic ) != 0) + * return -1; + * + * // Play effect at 50% strength for 2 seconds + * if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0) + * return -1; + * SDL_Delay( 2000 ); + * + * // Clean up + * SDL_HapticClose( haptic ); + * \endcode + * + * \par Complete example: + * \code + * int test_haptic( SDL_Joystick * joystick ) { + * SDL_Haptic *haptic; + * SDL_HapticEffect effect; + * int effect_id; + * + * // Open the device + * haptic = SDL_HapticOpenFromJoystick( joystick ); + * if (haptic == NULL) return -1; // Most likely joystick isn't haptic + * + * // See if it can do sine waves + * if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) { + * SDL_HapticClose(haptic); // No sine effect + * return -1; + * } + * + * // Create the effect + * SDL_memset( &effect, 0, sizeof(SDL_HapticEffect) ); // 0 is safe default + * effect.type = SDL_HAPTIC_SINE; + * effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates + * effect.periodic.direction.dir[0] = 18000; // Force comes from south + * effect.periodic.period = 1000; // 1000 ms + * effect.periodic.magnitude = 20000; // 20000/32767 strength + * effect.periodic.length = 5000; // 5 seconds long + * effect.periodic.attack_length = 1000; // Takes 1 second to get max strength + * effect.periodic.fade_length = 1000; // Takes 1 second to fade away + * + * // Upload the effect + * effect_id = SDL_HapticNewEffect( haptic, &effect ); + * + * // Test the effect + * SDL_HapticRunEffect( haptic, effect_id, 1 ); + * SDL_Delay( 5000); // Wait for the effect to finish + * + * // We destroy the effect, although closing the device also does this + * SDL_HapticDestroyEffect( haptic, effect_id ); + * + * // Close the device + * SDL_HapticClose(haptic); + * + * return 0; // Success + * } + * \endcode + */ + +#ifndef SDL_haptic_h_ +#define SDL_haptic_h_ + +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* FIXME: For SDL 2.1, adjust all the magnitude variables to be Uint16 (0xFFFF). + * + * At the moment the magnitude variables are mixed between signed/unsigned, and + * it is also not made clear that ALL of those variables expect a max of 0x7FFF. + * + * Some platforms may have higher precision than that (Linux FF, Windows XInput) + * so we should fix the inconsistency in favor of higher possible precision, + * adjusting for platforms that use different scales. + * -flibit + */ + +/** + * \typedef SDL_Haptic + * + * \brief The haptic structure used to identify an SDL haptic. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticOpenFromJoystick + * \sa SDL_HapticClose + */ +struct _SDL_Haptic; +typedef struct _SDL_Haptic SDL_Haptic; + + +/** + * \name Haptic features + * + * Different haptic features a device can have. + */ +/* @{ */ + +/** + * \name Haptic effects + */ +/* @{ */ + +/** + * \brief Constant effect supported. + * + * Constant haptic effect. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_CONSTANT (1u<<0) + +/** + * \brief Sine wave effect supported. + * + * Periodic haptic effect that simulates sine waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SINE (1u<<1) + +/** + * \brief Left/Right effect supported. + * + * Haptic effect for direct control over high/low frequency motors. + * + * \sa SDL_HapticLeftRight + * \warning this value was SDL_HAPTIC_SQUARE right before 2.0.0 shipped. Sorry, + * we ran out of bits, and this is important for XInput devices. + */ +#define SDL_HAPTIC_LEFTRIGHT (1u<<2) + +/* !!! FIXME: put this back when we have more bits in 2.1 */ +/* #define SDL_HAPTIC_SQUARE (1<<2) */ + +/** + * \brief Triangle wave effect supported. + * + * Periodic haptic effect that simulates triangular waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_TRIANGLE (1u<<3) + +/** + * \brief Sawtoothup wave effect supported. + * + * Periodic haptic effect that simulates saw tooth up waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SAWTOOTHUP (1u<<4) + +/** + * \brief Sawtoothdown wave effect supported. + * + * Periodic haptic effect that simulates saw tooth down waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SAWTOOTHDOWN (1u<<5) + +/** + * \brief Ramp effect supported. + * + * Ramp haptic effect. + * + * \sa SDL_HapticRamp + */ +#define SDL_HAPTIC_RAMP (1u<<6) + +/** + * \brief Spring effect supported - uses axes position. + * + * Condition haptic effect that simulates a spring. Effect is based on the + * axes position. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_SPRING (1u<<7) + +/** + * \brief Damper effect supported - uses axes velocity. + * + * Condition haptic effect that simulates dampening. Effect is based on the + * axes velocity. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_DAMPER (1u<<8) + +/** + * \brief Inertia effect supported - uses axes acceleration. + * + * Condition haptic effect that simulates inertia. Effect is based on the axes + * acceleration. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_INERTIA (1u<<9) + +/** + * \brief Friction effect supported - uses axes movement. + * + * Condition haptic effect that simulates friction. Effect is based on the + * axes movement. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_FRICTION (1u<<10) + +/** + * \brief Custom effect is supported. + * + * User defined custom haptic effect. + */ +#define SDL_HAPTIC_CUSTOM (1u<<11) + +/* @} *//* Haptic effects */ + +/* These last few are features the device has, not effects */ + +/** + * \brief Device can set global gain. + * + * Device supports setting the global gain. + * + * \sa SDL_HapticSetGain + */ +#define SDL_HAPTIC_GAIN (1u<<12) + +/** + * \brief Device can set autocenter. + * + * Device supports setting autocenter. + * + * \sa SDL_HapticSetAutocenter + */ +#define SDL_HAPTIC_AUTOCENTER (1u<<13) + +/** + * \brief Device can be queried for effect status. + * + * Device supports querying effect status. + * + * \sa SDL_HapticGetEffectStatus + */ +#define SDL_HAPTIC_STATUS (1u<<14) + +/** + * \brief Device can be paused. + * + * Devices supports being paused. + * + * \sa SDL_HapticPause + * \sa SDL_HapticUnpause + */ +#define SDL_HAPTIC_PAUSE (1u<<15) + + +/** + * \name Direction encodings + */ +/* @{ */ + +/** + * \brief Uses polar coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_POLAR 0 + +/** + * \brief Uses cartesian coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_CARTESIAN 1 + +/** + * \brief Uses spherical coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_SPHERICAL 2 + +/** + * \brief Use this value to play an effect on the steering wheel axis. This + * provides better compatibility across platforms and devices as SDL will guess + * the correct axis. + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_STEERING_AXIS 3 + +/* @} *//* Direction encodings */ + +/* @} *//* Haptic features */ + +/* + * Misc defines. + */ + +/** + * \brief Used to play a device an infinite number of times. + * + * \sa SDL_HapticRunEffect + */ +#define SDL_HAPTIC_INFINITY 4294967295U + + +/** + * \brief Structure that represents a haptic direction. + * + * This is the direction where the force comes from, + * instead of the direction in which the force is exerted. + * + * Directions can be specified by: + * - ::SDL_HAPTIC_POLAR : Specified by polar coordinates. + * - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. + * - ::SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates. + * + * Cardinal directions of the haptic device are relative to the positioning + * of the device. North is considered to be away from the user. + * + * The following diagram represents the cardinal directions: + * \verbatim + .--. + |__| .-------. + |=.| |.-----.| + |--| || || + | | |'-----'| + |__|~')_____(' + [ COMPUTER ] + + + North (0,-1) + ^ + | + | + (-1,0) West <----[ HAPTIC ]----> East (1,0) + | + | + v + South (0,1) + + + [ USER ] + \|||/ + (o o) + ---ooO-(_)-Ooo--- + \endverbatim + * + * If type is ::SDL_HAPTIC_POLAR, direction is encoded by hundredths of a + * degree starting north and turning clockwise. ::SDL_HAPTIC_POLAR only uses + * the first \c dir parameter. The cardinal directions would be: + * - North: 0 (0 degrees) + * - East: 9000 (90 degrees) + * - South: 18000 (180 degrees) + * - West: 27000 (270 degrees) + * + * If type is ::SDL_HAPTIC_CARTESIAN, direction is encoded by three positions + * (X axis, Y axis and Z axis (with 3 axes)). ::SDL_HAPTIC_CARTESIAN uses + * the first three \c dir parameters. The cardinal directions would be: + * - North: 0,-1, 0 + * - East: 1, 0, 0 + * - South: 0, 1, 0 + * - West: -1, 0, 0 + * + * The Z axis represents the height of the effect if supported, otherwise + * it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you + * can use any multiple you want, only the direction matters. + * + * If type is ::SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. + * The first two \c dir parameters are used. The \c dir parameters are as + * follows (all values are in hundredths of degrees): + * - Degrees from (1, 0) rotated towards (0, 1). + * - Degrees towards (0, 0, 1) (device needs at least 3 axes). + * + * + * Example of force coming from the south with all encodings (force coming + * from the south means the user will have to pull the stick to counteract): + * \code + * SDL_HapticDirection direction; + * + * // Cartesian directions + * direction.type = SDL_HAPTIC_CARTESIAN; // Using cartesian direction encoding. + * direction.dir[0] = 0; // X position + * direction.dir[1] = 1; // Y position + * // Assuming the device has 2 axes, we don't need to specify third parameter. + * + * // Polar directions + * direction.type = SDL_HAPTIC_POLAR; // We'll be using polar direction encoding. + * direction.dir[0] = 18000; // Polar only uses first parameter + * + * // Spherical coordinates + * direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding + * direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters. + * \endcode + * + * \sa SDL_HAPTIC_POLAR + * \sa SDL_HAPTIC_CARTESIAN + * \sa SDL_HAPTIC_SPHERICAL + * \sa SDL_HAPTIC_STEERING_AXIS + * \sa SDL_HapticEffect + * \sa SDL_HapticNumAxes + */ +typedef struct SDL_HapticDirection +{ + Uint8 type; /**< The type of encoding. */ + Sint32 dir[3]; /**< The encoded direction. */ +} SDL_HapticDirection; + + +/** + * \brief A structure containing a template for a Constant effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_CONSTANT effect. + * + * A constant effect applies a constant force in the specified direction + * to the joystick. + * + * \sa SDL_HAPTIC_CONSTANT + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticConstant +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_CONSTANT */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Constant */ + Sint16 level; /**< Strength of the constant effect. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticConstant; + +/** + * \brief A structure containing a template for a Periodic effect. + * + * The struct handles the following effects: + * - ::SDL_HAPTIC_SINE + * - ::SDL_HAPTIC_LEFTRIGHT + * - ::SDL_HAPTIC_TRIANGLE + * - ::SDL_HAPTIC_SAWTOOTHUP + * - ::SDL_HAPTIC_SAWTOOTHDOWN + * + * A periodic effect consists in a wave-shaped effect that repeats itself + * over time. The type determines the shape of the wave and the parameters + * determine the dimensions of the wave. + * + * Phase is given by hundredth of a degree meaning that giving the phase a value + * of 9000 will displace it 25% of its period. Here are sample values: + * - 0: No phase displacement. + * - 9000: Displaced 25% of its period. + * - 18000: Displaced 50% of its period. + * - 27000: Displaced 75% of its period. + * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred. + * + * Examples: + * \verbatim + SDL_HAPTIC_SINE + __ __ __ __ + / \ / \ / \ / + / \__/ \__/ \__/ + + SDL_HAPTIC_SQUARE + __ __ __ __ __ + | | | | | | | | | | + | |__| |__| |__| |__| | + + SDL_HAPTIC_TRIANGLE + /\ /\ /\ /\ /\ + / \ / \ / \ / \ / + / \/ \/ \/ \/ + + SDL_HAPTIC_SAWTOOTHUP + /| /| /| /| /| /| /| + / | / | / | / | / | / | / | + / |/ |/ |/ |/ |/ |/ | + + SDL_HAPTIC_SAWTOOTHDOWN + \ |\ |\ |\ |\ |\ |\ | + \ | \ | \ | \ | \ | \ | \ | + \| \| \| \| \| \| \| + \endverbatim + * + * \sa SDL_HAPTIC_SINE + * \sa SDL_HAPTIC_LEFTRIGHT + * \sa SDL_HAPTIC_TRIANGLE + * \sa SDL_HAPTIC_SAWTOOTHUP + * \sa SDL_HAPTIC_SAWTOOTHDOWN + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticPeriodic +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_SINE, ::SDL_HAPTIC_LEFTRIGHT, + ::SDL_HAPTIC_TRIANGLE, ::SDL_HAPTIC_SAWTOOTHUP or + ::SDL_HAPTIC_SAWTOOTHDOWN */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Periodic */ + Uint16 period; /**< Period of the wave. */ + Sint16 magnitude; /**< Peak value; if negative, equivalent to 180 degrees extra phase shift. */ + Sint16 offset; /**< Mean value of the wave. */ + Uint16 phase; /**< Positive phase shift given by hundredth of a degree. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticPeriodic; + +/** + * \brief A structure containing a template for a Condition effect. + * + * The struct handles the following effects: + * - ::SDL_HAPTIC_SPRING: Effect based on axes position. + * - ::SDL_HAPTIC_DAMPER: Effect based on axes velocity. + * - ::SDL_HAPTIC_INERTIA: Effect based on axes acceleration. + * - ::SDL_HAPTIC_FRICTION: Effect based on axes movement. + * + * Direction is handled by condition internals instead of a direction member. + * The condition effect specific members have three parameters. The first + * refers to the X axis, the second refers to the Y axis and the third + * refers to the Z axis. The right terms refer to the positive side of the + * axis and the left terms refer to the negative side of the axis. Please + * refer to the ::SDL_HapticDirection diagram for which side is positive and + * which is negative. + * + * \sa SDL_HapticDirection + * \sa SDL_HAPTIC_SPRING + * \sa SDL_HAPTIC_DAMPER + * \sa SDL_HAPTIC_INERTIA + * \sa SDL_HAPTIC_FRICTION + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticCondition +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_SPRING, ::SDL_HAPTIC_DAMPER, + ::SDL_HAPTIC_INERTIA or ::SDL_HAPTIC_FRICTION */ + SDL_HapticDirection direction; /**< Direction of the effect - Not used ATM. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Condition */ + Uint16 right_sat[3]; /**< Level when joystick is to the positive side; max 0xFFFF. */ + Uint16 left_sat[3]; /**< Level when joystick is to the negative side; max 0xFFFF. */ + Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */ + Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */ + Uint16 deadband[3]; /**< Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered. */ + Sint16 center[3]; /**< Position of the dead zone. */ +} SDL_HapticCondition; + +/** + * \brief A structure containing a template for a Ramp effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_RAMP effect. + * + * The ramp effect starts at start strength and ends at end strength. + * It augments in linear fashion. If you use attack and fade with a ramp + * the effects get added to the ramp effect making the effect become + * quadratic instead of linear. + * + * \sa SDL_HAPTIC_RAMP + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticRamp +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_RAMP */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Ramp */ + Sint16 start; /**< Beginning strength level. */ + Sint16 end; /**< Ending strength level. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticRamp; + +/** + * \brief A structure containing a template for a Left/Right effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_LEFTRIGHT effect. + * + * The Left/Right effect is used to explicitly control the large and small + * motors, commonly found in modern game controllers. The small (right) motor + * is high frequency, and the large (left) motor is low frequency. + * + * \sa SDL_HAPTIC_LEFTRIGHT + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticLeftRight +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_LEFTRIGHT */ + + /* Replay */ + Uint32 length; /**< Duration of the effect in milliseconds. */ + + /* Rumble */ + Uint16 large_magnitude; /**< Control of the large controller motor. */ + Uint16 small_magnitude; /**< Control of the small controller motor. */ +} SDL_HapticLeftRight; + +/** + * \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect. + * + * This struct is exclusively for the ::SDL_HAPTIC_CUSTOM effect. + * + * A custom force feedback effect is much like a periodic effect, where the + * application can define its exact shape. You will have to allocate the + * data yourself. Data should consist of channels * samples Uint16 samples. + * + * If channels is one, the effect is rotated using the defined direction. + * Otherwise it uses the samples in data for the different axes. + * + * \sa SDL_HAPTIC_CUSTOM + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticCustom +{ + /* Header */ + Uint16 type; /**< ::SDL_HAPTIC_CUSTOM */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Custom */ + Uint8 channels; /**< Axes to use, minimum of one. */ + Uint16 period; /**< Sample periods. */ + Uint16 samples; /**< Amount of samples. */ + Uint16 *data; /**< Should contain channels*samples items. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticCustom; + +/** + * \brief The generic template for any haptic effect. + * + * All values max at 32767 (0x7FFF). Signed values also can be negative. + * Time values unless specified otherwise are in milliseconds. + * + * You can also pass ::SDL_HAPTIC_INFINITY to length instead of a 0-32767 + * value. Neither delay, interval, attack_length nor fade_length support + * ::SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends. + * + * Additionally, the ::SDL_HAPTIC_RAMP effect does not support a duration of + * ::SDL_HAPTIC_INFINITY. + * + * Button triggers may not be supported on all devices, it is advised to not + * use them if possible. Buttons start at index 1 instead of index 0 like + * the joystick. + * + * If both attack_length and fade_level are 0, the envelope is not used, + * otherwise both values are used. + * + * Common parts: + * \code + * // Replay - All effects have this + * Uint32 length; // Duration of effect (ms). + * Uint16 delay; // Delay before starting effect. + * + * // Trigger - All effects have this + * Uint16 button; // Button that triggers effect. + * Uint16 interval; // How soon before effect can be triggered again. + * + * // Envelope - All effects except condition effects have this + * Uint16 attack_length; // Duration of the attack (ms). + * Uint16 attack_level; // Level at the start of the attack. + * Uint16 fade_length; // Duration of the fade out (ms). + * Uint16 fade_level; // Level at the end of the fade. + * \endcode + * + * + * Here we have an example of a constant effect evolution in time: + * \verbatim + Strength + ^ + | + | effect level --> _________________ + | / \ + | / \ + | / \ + | / \ + | attack_level --> | \ + | | | <--- fade_level + | + +--------------------------------------------------> Time + [--] [---] + attack_length fade_length + + [------------------][-----------------------] + delay length + \endverbatim + * + * Note either the attack_level or the fade_level may be above the actual + * effect level. + * + * \sa SDL_HapticConstant + * \sa SDL_HapticPeriodic + * \sa SDL_HapticCondition + * \sa SDL_HapticRamp + * \sa SDL_HapticLeftRight + * \sa SDL_HapticCustom + */ +typedef union SDL_HapticEffect +{ + /* Common for all force feedback effects */ + Uint16 type; /**< Effect type. */ + SDL_HapticConstant constant; /**< Constant effect. */ + SDL_HapticPeriodic periodic; /**< Periodic effect. */ + SDL_HapticCondition condition; /**< Condition effect. */ + SDL_HapticRamp ramp; /**< Ramp effect. */ + SDL_HapticLeftRight leftright; /**< Left/Right effect. */ + SDL_HapticCustom custom; /**< Custom effect. */ +} SDL_HapticEffect; + + +/* Function prototypes */ + +/** + * Count the number of haptic devices attached to the system. + * + * \returns the number of haptic devices detected on the system or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticName + */ +extern DECLSPEC int SDLCALL SDL_NumHaptics(void); + +/** + * Get the implementation dependent name of a haptic device. + * + * This can be called before any joysticks are opened. If no name can be + * found, this function returns NULL. + * + * \param device_index index of the device to query. + * \returns the name of the device or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_NumHaptics + */ +extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index); + +/** + * Open a haptic device for use. + * + * The index passed as an argument refers to the N'th haptic device on this + * system. + * + * When opening a haptic device, its gain will be set to maximum and + * autocenter will be disabled. To modify these values use SDL_HapticSetGain() + * and SDL_HapticSetAutocenter(). + * + * \param device_index index of the device to open + * \returns the device identifier or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticClose + * \sa SDL_HapticIndex + * \sa SDL_HapticOpenFromJoystick + * \sa SDL_HapticOpenFromMouse + * \sa SDL_HapticPause + * \sa SDL_HapticSetAutocenter + * \sa SDL_HapticSetGain + * \sa SDL_HapticStopAll + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpen(int device_index); + +/** + * Check if the haptic device at the designated index has been opened. + * + * \param device_index the index of the device to query + * \returns 1 if it has been opened, 0 if it hasn't or on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticIndex + * \sa SDL_HapticOpen + */ +extern DECLSPEC int SDLCALL SDL_HapticOpened(int device_index); + +/** + * Get the index of a haptic device. + * + * \param haptic the SDL_Haptic device to query + * \returns the index of the specified haptic device or a negative error code + * on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticOpened + */ +extern DECLSPEC int SDLCALL SDL_HapticIndex(SDL_Haptic * haptic); + +/** + * Query whether or not the current mouse has haptic capabilities. + * + * \returns SDL_TRUE if the mouse is haptic or SDL_FALSE if it isn't. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpenFromMouse + */ +extern DECLSPEC int SDLCALL SDL_MouseIsHaptic(void); + +/** + * Try to open a haptic device from the current mouse. + * + * \returns the haptic device identifier or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + * \sa SDL_MouseIsHaptic + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromMouse(void); + +/** + * Query if a joystick has haptic features. + * + * \param joystick the SDL_Joystick to test for haptic capabilities + * \returns SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't, or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpenFromJoystick + */ +extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); + +/** + * Open a haptic device for use from a joystick device. + * + * You must still close the haptic device separately. It will not be closed + * with the joystick. + * + * When opened from a joystick you should first close the haptic device before + * closing the joystick device. If not, on some implementations the haptic + * device will also get unallocated and you'll be unable to use force feedback + * on that device. + * + * \param joystick the SDL_Joystick to create a haptic device from + * \returns a valid haptic device identifier on success or NULL on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticClose + * \sa SDL_HapticOpen + * \sa SDL_JoystickIsHaptic + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromJoystick(SDL_Joystick * + joystick); + +/** + * Close a haptic device previously opened with SDL_HapticOpen(). + * + * \param haptic the SDL_Haptic device to close + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + */ +extern DECLSPEC void SDLCALL SDL_HapticClose(SDL_Haptic * haptic); + +/** + * Get the number of effects a haptic device can store. + * + * On some platforms this isn't fully supported, and therefore is an + * approximation. Always check to see if your created effect was actually + * created and do not rely solely on SDL_HapticNumEffects(). + * + * \param haptic the SDL_Haptic device to query + * \returns the number of effects the haptic device can store or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNumEffectsPlaying + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic); + +/** + * Get the number of effects a haptic device can play at the same time. + * + * This is not supported on all platforms, but will always return a value. + * + * \param haptic the SDL_Haptic device to query maximum playing effects + * \returns the number of effects the haptic device can play at the same time + * or a negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNumEffects + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); + +/** + * Get the haptic device's supported features in bitwise manner. + * + * \param haptic the SDL_Haptic device to query + * \returns a list of supported haptic features in bitwise manner (OR'd), or 0 + * on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticEffectSupported + * \sa SDL_HapticNumEffects + */ +extern DECLSPEC unsigned int SDLCALL SDL_HapticQuery(SDL_Haptic * haptic); + + +/** + * Get the number of haptic axes the device has. + * + * The number of haptic axes might be useful if working with the + * SDL_HapticDirection effect. + * + * \param haptic the SDL_Haptic device to query + * \returns the number of axes on success or a negative error code on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_HapticNumAxes(SDL_Haptic * haptic); + +/** + * Check to see if an effect is supported by a haptic device. + * + * \param haptic the SDL_Haptic device to query + * \param effect the desired effect to query + * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNewEffect + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticEffectSupported(SDL_Haptic * haptic, + SDL_HapticEffect * + effect); + +/** + * Create a new haptic effect on a specified device. + * + * \param haptic an SDL_Haptic device to create the effect on + * \param effect an SDL_HapticEffect structure containing the properties of + * the effect to create + * \returns the ID of the effect on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticRunEffect + * \sa SDL_HapticUpdateEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticNewEffect(SDL_Haptic * haptic, + SDL_HapticEffect * effect); + +/** + * Update the properties of an effect. + * + * Can be used dynamically, although behavior when dynamically changing + * direction may be strange. Specifically the effect may re-upload itself and + * start playing from the start. You also cannot change the type either when + * running SDL_HapticUpdateEffect(). + * + * \param haptic the SDL_Haptic device that has the effect + * \param effect the identifier of the effect to update + * \param data an SDL_HapticEffect structure containing the new effect + * properties to use + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticNewEffect + * \sa SDL_HapticRunEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticUpdateEffect(SDL_Haptic * haptic, + int effect, + SDL_HapticEffect * data); + +/** + * Run the haptic effect on its associated haptic device. + * + * To repeat the effect over and over indefinitely, set `iterations` to + * `SDL_HAPTIC_INFINITY`. (Repeats the envelope - attack and fade.) To make + * one instance of the effect last indefinitely (so the effect does not fade), + * set the effect's `length` in its structure/union to `SDL_HAPTIC_INFINITY` + * instead. + * + * \param haptic the SDL_Haptic device to run the effect on + * \param effect the ID of the haptic effect to run + * \param iterations the number of iterations to run the effect; use + * `SDL_HAPTIC_INFINITY` to repeat forever + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticGetEffectStatus + * \sa SDL_HapticStopEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticRunEffect(SDL_Haptic * haptic, + int effect, + Uint32 iterations); + +/** + * Stop the haptic effect on its associated haptic device. + * + * * + * + * \param haptic the SDL_Haptic device to stop the effect on + * \param effect the ID of the haptic effect to stop + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticRunEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticStopEffect(SDL_Haptic * haptic, + int effect); + +/** + * Destroy a haptic effect on the device. + * + * This will stop the effect if it's running. Effects are automatically + * destroyed when the device is closed. + * + * \param haptic the SDL_Haptic device to destroy the effect on + * \param effect the ID of the haptic effect to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNewEffect + */ +extern DECLSPEC void SDLCALL SDL_HapticDestroyEffect(SDL_Haptic * haptic, + int effect); + +/** + * Get the status of the current effect on the specified haptic device. + * + * Device must support the SDL_HAPTIC_STATUS feature. + * + * \param haptic the SDL_Haptic device to query for the effect status on + * \param effect the ID of the haptic effect to query its status + * \returns 0 if it isn't playing, 1 if it is playing, or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRunEffect + * \sa SDL_HapticStopEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticGetEffectStatus(SDL_Haptic * haptic, + int effect); + +/** + * Set the global gain of the specified haptic device. + * + * Device must support the SDL_HAPTIC_GAIN feature. + * + * The user may specify the maximum gain by setting the environment variable + * `SDL_HAPTIC_GAIN_MAX` which should be between 0 and 100. All calls to + * SDL_HapticSetGain() will scale linearly using `SDL_HAPTIC_GAIN_MAX` as the + * maximum. + * + * \param haptic the SDL_Haptic device to set the gain on + * \param gain value to set the gain to, should be between 0 and 100 (0 - 100) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticSetGain(SDL_Haptic * haptic, int gain); + +/** + * Set the global autocenter of the device. + * + * Autocenter should be between 0 and 100. Setting it to 0 will disable + * autocentering. + * + * Device must support the SDL_HAPTIC_AUTOCENTER feature. + * + * \param haptic the SDL_Haptic device to set autocentering on + * \param autocenter value to set autocenter to (0-100) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticSetAutocenter(SDL_Haptic * haptic, + int autocenter); + +/** + * Pause a haptic device. + * + * Device must support the `SDL_HAPTIC_PAUSE` feature. Call + * SDL_HapticUnpause() to resume playback. + * + * Do not modify the effects nor add new ones while the device is paused. That + * can cause all sorts of weird errors. + * + * \param haptic the SDL_Haptic device to pause + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticUnpause + */ +extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic); + +/** + * Unpause a haptic device. + * + * Call to unpause after SDL_HapticPause(). + * + * \param haptic the SDL_Haptic device to unpause + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticPause + */ +extern DECLSPEC int SDLCALL SDL_HapticUnpause(SDL_Haptic * haptic); + +/** + * Stop all the currently playing effects on a haptic device. + * + * \param haptic the SDL_Haptic device to stop + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_HapticStopAll(SDL_Haptic * haptic); + +/** + * Check whether rumble is supported on a haptic device. + * + * \param haptic haptic device to check for rumble support + * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleStop + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleSupported(SDL_Haptic * haptic); + +/** + * Initialize a haptic device for simple rumble playback. + * + * \param haptic the haptic device to initialize for simple rumble playback + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleStop + * \sa SDL_HapticRumbleSupported + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleInit(SDL_Haptic * haptic); + +/** + * Run a simple rumble effect on a haptic device. + * + * \param haptic the haptic device to play the rumble effect on + * \param strength strength of the rumble to play as a 0-1 float value + * \param length length of the rumble to play in milliseconds + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumbleStop + * \sa SDL_HapticRumbleSupported + */ +extern DECLSPEC int SDLCALL SDL_HapticRumblePlay(SDL_Haptic * haptic, float strength, Uint32 length ); + +/** + * Stop the simple rumble on a haptic device. + * + * \param haptic the haptic device to stop the rumble effect on + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleSupported + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleStop(SDL_Haptic * haptic); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_haptic_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_hidapi.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_hidapi.h new file mode 100644 index 00000000000..dbb0cad3b34 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_hidapi.h @@ -0,0 +1,451 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_hidapi.h + * + * Header file for SDL HIDAPI functions. + * + * This is an adaptation of the original HIDAPI interface by Alan Ott, + * and includes source code licensed under the following BSD license: + * + Copyright (c) 2010, Alan Ott, Signal 11 Software + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Signal 11 Software nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + * + * If you would like a version of SDL without this code, you can build SDL + * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for example + * on iOS or tvOS to avoid a dependency on the CoreBluetooth framework. + */ + +#ifndef SDL_hidapi_h_ +#define SDL_hidapi_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief A handle representing an open HID device + */ +struct SDL_hid_device_; +typedef struct SDL_hid_device_ SDL_hid_device; /**< opaque hidapi structure */ + +/** hidapi info structure */ +/** + * \brief Information about a connected HID device + */ +typedef struct SDL_hid_device_info +{ + /** Platform-specific device path */ + char *path; + /** Device Vendor ID */ + unsigned short vendor_id; + /** Device Product ID */ + unsigned short product_id; + /** Serial Number */ + wchar_t *serial_number; + /** Device Release Number in binary-coded decimal, + also known as Device Version Number */ + unsigned short release_number; + /** Manufacturer String */ + wchar_t *manufacturer_string; + /** Product string */ + wchar_t *product_string; + /** Usage Page for this Device/Interface + (Windows/Mac only). */ + unsigned short usage_page; + /** Usage for this Device/Interface + (Windows/Mac only).*/ + unsigned short usage; + /** The USB interface which this logical device + represents. + + * Valid on both Linux implementations in all cases. + * Valid on the Windows implementation only if the device + contains more than one interface. */ + int interface_number; + + /** Additional information about the USB interface. + Valid on libusb and Android implementations. */ + int interface_class; + int interface_subclass; + int interface_protocol; + + /** Pointer to the next device */ + struct SDL_hid_device_info *next; +} SDL_hid_device_info; + + +/** + * Initialize the HIDAPI library. + * + * This function initializes the HIDAPI library. Calling it is not strictly + * necessary, as it will be called automatically by SDL_hid_enumerate() and + * any of the SDL_hid_open_*() functions if it is needed. This function should + * be called at the beginning of execution however, if there is a chance of + * HIDAPI handles being opened by different threads simultaneously. + * + * Each call to this function should have a matching call to SDL_hid_exit() + * + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_exit + */ +extern DECLSPEC int SDLCALL SDL_hid_init(void); + +/** + * Finalize the HIDAPI library. + * + * This function frees all of the static data associated with HIDAPI. It + * should be called at the end of execution to avoid memory leaks. + * + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_init + */ +extern DECLSPEC int SDLCALL SDL_hid_exit(void); + +/** + * Check to see if devices may have been added or removed. + * + * Enumerating the HID devices is an expensive operation, so you can call this + * to see if there have been any system device changes since the last call to + * this function. A change in the counter returned doesn't necessarily mean + * that anything has changed, but you can call SDL_hid_enumerate() to get an + * updated device list. + * + * Calling this function for the first time may cause a thread or other system + * resource to be allocated to track device change notifications. + * + * \returns a change counter that is incremented with each potential device + * change, or 0 if device change detection isn't available. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_enumerate + */ +extern DECLSPEC Uint32 SDLCALL SDL_hid_device_change_count(void); + +/** + * Enumerate the HID Devices. + * + * This function returns a linked list of all the HID devices attached to the + * system which match vendor_id and product_id. If `vendor_id` is set to 0 + * then any vendor matches. If `product_id` is set to 0 then any product + * matches. If `vendor_id` and `product_id` are both set to 0, then all HID + * devices will be returned. + * + * \param vendor_id The Vendor ID (VID) of the types of device to open. + * \param product_id The Product ID (PID) of the types of device to open. + * \returns a pointer to a linked list of type SDL_hid_device_info, containing + * information about the HID devices attached to the system, or NULL + * in the case of failure. Free this linked list by calling + * SDL_hid_free_enumeration(). + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_device_change_count + */ +extern DECLSPEC SDL_hid_device_info * SDLCALL SDL_hid_enumerate(unsigned short vendor_id, unsigned short product_id); + +/** + * Free an enumeration Linked List + * + * This function frees a linked list created by SDL_hid_enumerate(). + * + * \param devs Pointer to a list of struct_device returned from + * SDL_hid_enumerate(). + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void SDLCALL SDL_hid_free_enumeration(SDL_hid_device_info *devs); + +/** + * Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally + * a serial number. + * + * If `serial_number` is NULL, the first device with the specified VID and PID + * is opened. + * + * \param vendor_id The Vendor ID (VID) of the device to open. + * \param product_id The Product ID (PID) of the device to open. + * \param serial_number The Serial Number of the device to open (Optionally + * NULL). + * \returns a pointer to a SDL_hid_device object on success or NULL on + * failure. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number); + +/** + * Open a HID device by its path name. + * + * The path name be determined by calling SDL_hid_enumerate(), or a + * platform-specific path name can be used (eg: /dev/hidraw0 on Linux). + * + * \param path The path name of the device to open + * \returns a pointer to a SDL_hid_device object on success or NULL on + * failure. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive /* = false */); + +/** + * Write an Output report to a HID device. + * + * The first byte of `data` must contain the Report ID. For devices which only + * support a single report, this must be set to 0x0. The remaining bytes + * contain the report data. Since the Report ID is mandatory, calls to + * SDL_hid_write() will always contain one more byte than the report contains. + * For example, if a hid report is 16 bytes long, 17 bytes must be passed to + * SDL_hid_write(), the Report ID (or 0x0, for devices with a single report), + * followed by the report data (16 bytes). In this example, the length passed + * in would be 17. + * + * SDL_hid_write() will send the data on the first OUT endpoint, if one + * exists. If it does not, it will send the data through the Control Endpoint + * (Endpoint 0). + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data The data to send, including the report number as the first + * byte. + * \param length The length in bytes of the data to send. + * \returns the actual number of bytes written and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_write(SDL_hid_device *dev, const unsigned char *data, size_t length); + +/** + * Read an Input report from a HID device with timeout. + * + * Input reports are returned to the host through the INTERRUPT IN endpoint. + * The first byte will contain the Report number if the device uses numbered + * reports. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data A buffer to put the read data into. + * \param length The number of bytes to read. For devices with multiple + * reports, make sure to read an extra byte for the report + * number. + * \param milliseconds timeout in milliseconds or -1 for blocking wait. + * \returns the actual number of bytes read and -1 on error. If no packet was + * available to be read within the timeout period, this function + * returns 0. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_read_timeout(SDL_hid_device *dev, unsigned char *data, size_t length, int milliseconds); + +/** + * Read an Input report from a HID device. + * + * Input reports are returned to the host through the INTERRUPT IN endpoint. + * The first byte will contain the Report number if the device uses numbered + * reports. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data A buffer to put the read data into. + * \param length The number of bytes to read. For devices with multiple + * reports, make sure to read an extra byte for the report + * number. + * \returns the actual number of bytes read and -1 on error. If no packet was + * available to be read and the handle is in non-blocking mode, this + * function returns 0. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_read(SDL_hid_device *dev, unsigned char *data, size_t length); + +/** + * Set the device handle to be non-blocking. + * + * In non-blocking mode calls to SDL_hid_read() will return immediately with a + * value of 0 if there is no data to be read. In blocking mode, SDL_hid_read() + * will wait (block) until there is data to read before returning. + * + * Nonblocking can be turned on and off at any time. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param nonblock enable or not the nonblocking reads - 1 to enable + * nonblocking - 0 to disable nonblocking. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_set_nonblocking(SDL_hid_device *dev, int nonblock); + +/** + * Send a Feature report to the device. + * + * Feature reports are sent over the Control endpoint as a Set_Report + * transfer. The first byte of `data` must contain the Report ID. For devices + * which only support a single report, this must be set to 0x0. The remaining + * bytes contain the report data. Since the Report ID is mandatory, calls to + * SDL_hid_send_feature_report() will always contain one more byte than the + * report contains. For example, if a hid report is 16 bytes long, 17 bytes + * must be passed to SDL_hid_send_feature_report(): the Report ID (or 0x0, for + * devices which do not use numbered reports), followed by the report data (16 + * bytes). In this example, the length passed in would be 17. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data The data to send, including the report number as the first + * byte. + * \param length The length in bytes of the data to send, including the report + * number. + * \returns the actual number of bytes written and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_send_feature_report(SDL_hid_device *dev, const unsigned char *data, size_t length); + +/** + * Get a feature report from a HID device. + * + * Set the first byte of `data` to the Report ID of the report to be read. + * Make sure to allow space for this extra byte in `data`. Upon return, the + * first byte will still contain the Report ID, and the report data will start + * in data[1]. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data A buffer to put the read data into, including the Report ID. + * Set the first byte of `data` to the Report ID of the report to + * be read, or set it to zero if your device does not use numbered + * reports. + * \param length The number of bytes to read, including an extra byte for the + * report ID. The buffer can be longer than the actual report. + * \returns the number of bytes read plus one for the report ID (which is + * still in the first byte), or -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_feature_report(SDL_hid_device *dev, unsigned char *data, size_t length); + +/** + * Close a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void SDLCALL SDL_hid_close(SDL_hid_device *dev); + +/** + * Get The Manufacturer String from a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_manufacturer_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); + +/** + * Get The Product String from a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_product_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); + +/** + * Get The Serial Number String from a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_serial_number_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); + +/** + * Get a string from a HID device, based on its string index. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string_index The index of the string to get. + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_indexed_string(SDL_hid_device *dev, int string_index, wchar_t *string, size_t maxlen); + +/** + * Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers + * + * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void SDLCALL SDL_hid_ble_scan(SDL_bool active); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_hidapi_h_ */ + +/* vi: set sts=4 ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_hints.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_hints.h new file mode 100644 index 00000000000..3ac5802f754 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_hints.h @@ -0,0 +1,2182 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_hints.h + * + * Official documentation for SDL configuration variables + * + * This file contains functions to set and get configuration hints, + * as well as listing each of them alphabetically. + * + * The convention for naming hints is SDL_HINT_X, where "SDL_X" is + * the environment variable that can be used to override the default. + * + * In general these hints are just that - they may or may not be + * supported or applicable on any given platform, but they provide + * a way for an application or user to give the library a hint as + * to how they would like the library to work. + */ + +#ifndef SDL_hints_h_ +#define SDL_hints_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief A variable controlling whether the Android / iOS built-in + * accelerometer should be listed as a joystick device. + * + * This variable can be set to the following values: + * "0" - The accelerometer is not listed as a joystick + * "1" - The accelerometer is available as a 3 axis joystick (the default). + */ +#define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK" + +/** + * \brief Specify the behavior of Alt+Tab while the keyboard is grabbed. + * + * By default, SDL emulates Alt+Tab functionality while the keyboard is grabbed + * and your window is full-screen. This prevents the user from getting stuck in + * your application if you've enabled keyboard grab. + * + * The variable can be set to the following values: + * "0" - SDL will not handle Alt+Tab. Your application is responsible + for handling Alt+Tab while the keyboard is grabbed. + * "1" - SDL will minimize your window when Alt+Tab is pressed (default) +*/ +#define SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED "SDL_ALLOW_ALT_TAB_WHILE_GRABBED" + +/** + * \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it. + * This is a debugging aid for developers and not expected to be used by end users. The default is "1" + * + * This variable can be set to the following values: + * "0" - don't allow topmost + * "1" - allow topmost + */ +#define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST" + +/** + * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc. + * + * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and assets. + * + * By default this hint is not set and the APK expansion files are not searched. + */ +#define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION" + +/** + * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc. + * + * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and assets. + * + * By default this hint is not set and the APK expansion files are not searched. + */ +#define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION" + +/** + * \brief A variable to control whether the event loop will block itself when the app is paused. + * + * The variable can be set to the following values: + * "0" - Non blocking. + * "1" - Blocking. (default) + * + * The value should be set before SDL is initialized. + */ +#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE" + +/** + * \brief A variable to control whether SDL will pause audio in background + * (Requires SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking") + * + * The variable can be set to the following values: + * "0" - Non paused. + * "1" - Paused. (default) + * + * The value should be set before SDL is initialized. + */ +#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO" + +/** + * \brief A variable to control whether we trap the Android back button to handle it manually. + * This is necessary for the right mouse button to work on some Android devices, or + * to be able to trap the back button for use in your code reliably. If set to true, + * the back button will show up as an SDL_KEYDOWN / SDL_KEYUP pair with a keycode of + * SDL_SCANCODE_AC_BACK. + * + * The variable can be set to the following values: + * "0" - Back button will be handled as usual for system. (default) + * "1" - Back button will be trapped, allowing you to handle the key press + * manually. (This will also let right mouse click work on systems + * where the right mouse button functions as back.) + * + * The value of this hint is used at runtime, so it can be changed at any time. + */ +#define SDL_HINT_ANDROID_TRAP_BACK_BUTTON "SDL_ANDROID_TRAP_BACK_BUTTON" + +/** + * \brief Specify an application name. + * + * This hint lets you specify the application name sent to the OS when + * required. For example, this will often appear in volume control applets for + * audio streams, and in lists of applications which are inhibiting the + * screensaver. You should use a string that describes your program ("My Game + * 2: The Revenge") + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: probably the application's name or "SDL Application" if SDL + * doesn't have any better information. + * + * Note that, for audio streams, this can be overridden with + * SDL_HINT_AUDIO_DEVICE_APP_NAME. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_APP_NAME "SDL_APP_NAME" + +/** + * \brief A variable controlling whether controllers used with the Apple TV + * generate UI events. + * + * When UI events are generated by controller input, the app will be + * backgrounded when the Apple TV remote's menu button is pressed, and when the + * pause or B buttons on gamepads are pressed. + * + * More information about properly making use of controllers for the Apple TV + * can be found here: + * https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/ + * + * This variable can be set to the following values: + * "0" - Controller input does not generate UI events (the default). + * "1" - Controller input generates UI events. + */ +#define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS" + +/** + * \brief A variable controlling whether the Apple TV remote's joystick axes + * will automatically match the rotation of the remote. + * + * This variable can be set to the following values: + * "0" - Remote orientation does not affect joystick axes (the default). + * "1" - Joystick axes are based on the orientation of the remote. + */ +#define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION" + +/** + * \brief A variable controlling the audio category on iOS and Mac OS X + * + * This variable can be set to the following values: + * + * "ambient" - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default) + * "playback" - Use the AVAudioSessionCategoryPlayback category + * + * For more information, see Apple's documentation: + * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html + */ +#define SDL_HINT_AUDIO_CATEGORY "SDL_AUDIO_CATEGORY" + +/** + * \brief Specify an application name for an audio device. + * + * Some audio backends (such as PulseAudio) allow you to describe your audio + * stream. Among other things, this description might show up in a system + * control panel that lets the user adjust the volume on specific audio + * streams instead of using one giant master volume slider. + * + * This hints lets you transmit that information to the OS. The contents of + * this hint are used while opening an audio device. You should use a string + * that describes your program ("My Game 2: The Revenge") + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: this will be the name set with SDL_HINT_APP_NAME, if that hint is + * set. Otherwise, it'll probably the application's name or "SDL Application" + * if SDL doesn't have any better information. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME" + +/** + * \brief Specify an application name for an audio device. + * + * Some audio backends (such as PulseAudio) allow you to describe your audio + * stream. Among other things, this description might show up in a system + * control panel that lets the user adjust the volume on specific audio + * streams instead of using one giant master volume slider. + * + * This hints lets you transmit that information to the OS. The contents of + * this hint are used while opening an audio device. You should use a string + * that describes your what your program is playing ("audio stream" is + * probably sufficient in many cases, but this could be useful for something + * like "team chat" if you have a headset playing VoIP audio separately). + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: "audio stream" or something similar. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_AUDIO_DEVICE_STREAM_NAME "SDL_AUDIO_DEVICE_STREAM_NAME" + +/** + * \brief Specify an application role for an audio device. + * + * Some audio backends (such as Pipewire) allow you to describe the role of + * your audio stream. Among other things, this description might show up in + * a system control panel or software for displaying and manipulating media + * playback/capture graphs. + * + * This hints lets you transmit that information to the OS. The contents of + * this hint are used while opening an audio device. You should use a string + * that describes your what your program is playing (Game, Music, Movie, + * etc...). + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: "Game" or something similar. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_AUDIO_DEVICE_STREAM_ROLE "SDL_AUDIO_DEVICE_STREAM_ROLE" + +/** + * \brief A variable controlling speed/quality tradeoff of audio resampling. + * + * If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ ) + * to handle audio resampling. There are different resampling modes available + * that produce different levels of quality, using more CPU. + * + * If this hint isn't specified to a valid setting, or libsamplerate isn't + * available, SDL will use the default, internal resampling algorithm. + * + * Note that this is currently only applicable to resampling audio that is + * being written to a device for playback or audio being read from a device + * for capture. SDL_AudioCVT always uses the default resampler (although this + * might change for SDL 2.1). + * + * This hint is currently only checked at audio subsystem initialization. + * + * This variable can be set to the following values: + * + * "0" or "default" - Use SDL's internal resampling (Default when not set - low quality, fast) + * "1" or "fast" - Use fast, slightly higher quality resampling, if available + * "2" or "medium" - Use medium quality resampling, if available + * "3" or "best" - Use high quality resampling, if available + */ +#define SDL_HINT_AUDIO_RESAMPLING_MODE "SDL_AUDIO_RESAMPLING_MODE" + +/** + * \brief A variable controlling whether SDL updates joystick state when getting input events + * + * This variable can be set to the following values: + * + * "0" - You'll call SDL_JoystickUpdate() manually + * "1" - SDL will automatically call SDL_JoystickUpdate() (default) + * + * This hint can be toggled on and off at runtime. + */ +#define SDL_HINT_AUTO_UPDATE_JOYSTICKS "SDL_AUTO_UPDATE_JOYSTICKS" + +/** + * \brief A variable controlling whether SDL updates sensor state when getting input events + * + * This variable can be set to the following values: + * + * "0" - You'll call SDL_SensorUpdate() manually + * "1" - SDL will automatically call SDL_SensorUpdate() (default) + * + * This hint can be toggled on and off at runtime. + */ +#define SDL_HINT_AUTO_UPDATE_SENSORS "SDL_AUTO_UPDATE_SENSORS" + +/** + * \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs. + * + * The bitmap header version 4 is required for proper alpha channel support and + * SDL will use it when required. Should this not be desired, this hint can + * force the use of the 40 byte header version which is supported everywhere. + * + * The variable can be set to the following values: + * "0" - Surfaces with a colorkey or an alpha channel are saved to a + * 32-bit BMP file with an alpha mask. SDL will use the bitmap + * header version 4 and set the alpha mask accordingly. + * "1" - Surfaces with a colorkey or an alpha channel are saved to a + * 32-bit BMP file without an alpha mask. The alpha channel data + * will be in the file, but applications are going to ignore it. + * + * The default value is "0". + */ +#define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT" + +/** + * \brief Override for SDL_GetDisplayUsableBounds() + * + * If set, this hint will override the expected results for + * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want + * to do this, but this allows an embedded system to request that some of the + * screen be reserved for other uses when paired with a well-behaved + * application. + * + * The contents of this hint must be 4 comma-separated integers, the first + * is the bounds x, then y, width and height, in that order. + */ +#define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS" + +/** + * \brief Disable giving back control to the browser automatically + * when running with asyncify + * + * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations + * such as refreshing the screen or polling events. + * + * This hint only applies to the emscripten platform + * + * The variable can be set to the following values: + * "0" - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes) + * "1" - Enable emscripten_sleep calls (the default) + */ +#define SDL_HINT_EMSCRIPTEN_ASYNCIFY "SDL_EMSCRIPTEN_ASYNCIFY" + +/** + * \brief override the binding element for keyboard inputs for Emscripten builds + * + * This hint only applies to the emscripten platform + * + * The variable can be one of + * "#window" - The javascript window object (this is the default) + * "#document" - The javascript document object + * "#screen" - the javascript window.screen object + * "#canvas" - the WebGL canvas element + * any other string without a leading # sign applies to the element on the page with that ID. + */ +#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT" + +/** + * \brief A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs + * + * The variable can be set to the following values: + * "0" - Do not scan for Steam Controllers + * "1" - Scan for Steam Controllers (the default) + * + * The default value is "1". This hint must be set before initializing the joystick subsystem. + */ +#define SDL_HINT_ENABLE_STEAM_CONTROLLERS "SDL_ENABLE_STEAM_CONTROLLERS" + +/** + * \brief A variable controlling whether SDL logs all events pushed onto its internal queue. + * + * This variable can be set to the following values: + * + * "0" - Don't log any events (default) + * "1" - Log all events except mouse and finger motion, which are pretty spammy. + * "2" - Log all events. + * + * This is generally meant to be used to debug SDL itself, but can be useful + * for application developers that need better visibility into what is going + * on in the event queue. Logged events are sent through SDL_Log(), which + * means by default they appear on stdout on most platforms or maybe + * OutputDebugString() on Windows, and can be funneled by the app with + * SDL_LogSetOutputFunction(), etc. + * + * This hint can be toggled on and off at runtime, if you only need to log + * events for a small subset of program execution. + */ +#define SDL_HINT_EVENT_LOGGING "SDL_EVENT_LOGGING" + +/** + * \brief A variable controlling whether raising the window should be done more forcefully + * + * This variable can be set to the following values: + * "0" - No forcing (the default) + * "1" - Extra level of forcing + * + * At present, this is only an issue under MS Windows, which makes it nearly impossible to + * programmatically move a window to the foreground, for "security" reasons. See + * http://stackoverflow.com/a/34414846 for a discussion. + */ +#define SDL_HINT_FORCE_RAISEWINDOW "SDL_HINT_FORCE_RAISEWINDOW" + +/** + * \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface. + * + * SDL can try to accelerate the SDL screen surface by using streaming + * textures with a 3D rendering engine. This variable controls whether and + * how this is done. + * + * This variable can be set to the following values: + * "0" - Disable 3D acceleration + * "1" - Enable 3D acceleration, using the default renderer. + * "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.) + * + * By default SDL tries to make a best guess for each platform whether + * to use acceleration or not. + */ +#define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION" + +/** + * \brief A variable that lets you manually hint extra gamecontroller db entries. + * + * The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h + * + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() + */ +#define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG" + +/** + * \brief A variable that lets you provide a file with extra gamecontroller db entries. + * + * The file should contain lines of gamecontroller config data, see SDL_gamecontroller.h + * + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + * You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() + */ +#define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE" + +/** + * \brief A variable that overrides the automatic controller type detection + * + * The variable should be comma separated entries, in the form: VID/PID=type + * + * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd + * + * The type should be one of: + * Xbox360 + * XboxOne + * PS3 + * PS4 + * PS5 + * SwitchPro + * + * This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + */ +#define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE" + +/** + * \brief A variable containing a list of devices to skip when scanning for game controllers. + * + * The format of the string is a comma separated list of USB VID/PID pairs + * in hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named + * file will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES" + +/** + * \brief If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable. + * + * The format of the string is a comma separated list of USB VID/PID pairs + * in hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named + * file will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT" + +/** + * \brief If set, game controller face buttons report their values according to their labels instead of their positional layout. + * + * For example, on Nintendo Switch controllers, normally you'd get: + * + * (Y) + * (X) (B) + * (A) + * + * but if this hint is set, you'll get: + * + * (X) + * (Y) (A) + * (B) + * + * The variable can be set to the following values: + * "0" - Report the face buttons by position, as though they were on an Xbox controller. + * "1" - Report the face buttons by label instead of position + * + * The default value is "1". This hint may be set at any time. + */ +#define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS" + +/** + * \brief A variable controlling whether grabbing input grabs the keyboard + * + * This variable can be set to the following values: + * "0" - Grab will affect only the mouse + * "1" - Grab will affect mouse and keyboard + * + * By default SDL will not grab the keyboard so system shortcuts still work. + */ +#define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD" + +/** + * \brief A variable controlling whether the idle timer is disabled on iOS. + * + * When an iOS app does not receive touches for some time, the screen is + * dimmed automatically. For games where the accelerometer is the only input + * this is problematic. This functionality can be disabled by setting this + * hint. + * + * As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver() + * accomplish the same thing on iOS. They should be preferred over this hint. + * + * This variable can be set to the following values: + * "0" - Enable idle timer + * "1" - Disable idle timer + */ +#define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED" + +/** + * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events. + * + * The variable can be set to the following values: + * "0" - SDL_TEXTEDITING events are sent, and it is the application's + * responsibility to render the text from these events and + * differentiate it somehow from committed text. (default) + * "1" - If supported by the IME then SDL_TEXTEDITING events are not sent, + * and text that is being composed will be rendered in its own UI. + */ +#define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING" + +/** + * \brief A variable to control whether certain IMEs should show native UI components (such as the Candidate List) instead of suppressing them. + * + * The variable can be set to the following values: + * "0" - Native UI components are not display. (default) + * "1" - Native UI components are displayed. + */ +#define SDL_HINT_IME_SHOW_UI "SDL_IME_SHOW_UI" + +/** + * \brief A variable to control if extended IME text support is enabled. + * If enabled then SDL_TextEditingExtEvent will be issued if the text would be truncated otherwise. + * Additionally SDL_TextInputEvent will be dispatched multiple times so that it is not truncated. + * + * The variable can be set to the following values: + * "0" - Legacy behavior. Text can be truncated, no heap allocations. (default) + * "1" - Modern behavior. + */ +#define SDL_HINT_IME_SUPPORT_EXTENDED_TEXT "SDL_IME_SUPPORT_EXTENDED_TEXT" + +/** + * \brief A variable controlling whether the home indicator bar on iPhone X + * should be hidden. + * + * This variable can be set to the following values: + * "0" - The indicator bar is not hidden (default for windowed applications) + * "1" - The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications) + * "2" - The indicator bar is dim and the first swipe makes it visible and the second swipe performs the "home" action (default for fullscreen applications) + */ +#define SDL_HINT_IOS_HIDE_HOME_INDICATOR "SDL_IOS_HIDE_HOME_INDICATOR" + +/** + * \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background. + * + * The variable can be set to the following values: + * "0" - Disable joystick & gamecontroller input events when the + * application is in the background. + * "1" - Enable joystick & gamecontroller input events when the + * application is in the background. + * + * The default value is "0". This hint may be set at any time. + */ +#define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS" + +/** + * \brief A variable controlling whether the HIDAPI joystick drivers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI drivers are not used + * "1" - HIDAPI drivers are used (the default) + * + * This variable is the default for all drivers, but can be overridden by the hints for specific drivers below. + */ +#define SDL_HINT_JOYSTICK_HIDAPI "SDL_JOYSTICK_HIDAPI" + +/** + * \brief A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE" + +/** + * \brief A variable controlling whether "low_frequency_rumble" and "high_frequency_rumble" is used to implement + * the GameCube controller's 3 rumble modes, Stop(0), Rumble(1), and StopHard(2) + * this is useful for applications that need full compatibility for things like ADSR envelopes. + * Stop is implemented by setting "low_frequency_rumble" to "0" and "high_frequency_rumble" ">0" + * Rumble is both at any arbitrary value, + * StopHard is implemented by setting both "low_frequency_rumble" and "high_frequency_rumble" to "0" + * + * This variable can be set to the following values: + * "0" - Normal rumble behavior is behavior is used (default) + * "1" - Proper GameCube controller rumble behavior is used + * + */ +#define SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE "SDL_JOYSTICK_GAMECUBE_RUMBLE_BRAKE" + + /** + * \brief A variable controlling whether Switch Joy-Cons should be treated the same as Switch Pro Controllers when using the HIDAPI driver. + * + * This variable can be set to the following values: + * "0" - basic Joy-Con support with no analog input (the default) + * "1" - Joy-Cons treated as half full Pro Controllers with analog inputs and sensors + * + * This does not combine Joy-Cons into a single controller. That's up to the user. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS "SDL_JOYSTICK_HIDAPI_JOY_CONS" + + /** + * \brief A variable controlling whether the HIDAPI driver for Amazon Luna controllers connected via Bluetooth should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_LUNA "SDL_JOYSTICK_HIDAPI_LUNA" + +/** + * \brief A variable controlling whether the HIDAPI driver for PS4 controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4" + +/** + * \brief A variable controlling whether extended input reports should be used for PS4 controllers when using the HIDAPI driver. + * + * This variable can be set to the following values: + * "0" - extended reports are not enabled (the default) + * "1" - extended reports + * + * Extended input reports allow rumble on Bluetooth PS4 controllers, but + * break DirectInput handling for applications that don't use SDL. + * + * Once extended reports are enabled, they can not be disabled without + * power cycling the controller. + * + * For compatibility with applications written for versions of SDL prior + * to the introduction of PS5 controller support, this value will also + * control the state of extended reports on PS5 controllers when the + * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE" + +/** + * \brief A variable controlling whether the HIDAPI driver for PS5 controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS5 "SDL_JOYSTICK_HIDAPI_PS5" + +/** + * \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a PS5 controller. + * + * This variable can be set to the following values: + * "0" - player LEDs are not enabled + * "1" - player LEDs are enabled (the default) + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED "SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED" + +/** + * \brief A variable controlling whether extended input reports should be used for PS5 controllers when using the HIDAPI driver. + * + * This variable can be set to the following values: + * "0" - extended reports are not enabled (the default) + * "1" - extended reports + * + * Extended input reports allow rumble on Bluetooth PS5 controllers, but + * break DirectInput handling for applications that don't use SDL. + * + * Once extended reports are enabled, they can not be disabled without + * power cycling the controller. + * + * For compatibility with applications written for versions of SDL prior + * to the introduction of PS5 controller support, this value defaults to + * the value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE "SDL_JOYSTICK_HIDAPI_PS5_RUMBLE" + +/** + * \brief A variable controlling whether the HIDAPI driver for Google Stadia controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_STADIA "SDL_JOYSTICK_HIDAPI_STADIA" + +/** + * \brief A variable controlling whether the HIDAPI driver for Steam Controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used for Steam Controllers, which requires Bluetooth access + * and may prompt the user for permission on iOS and Android. + * + * The default is "0" + */ +#define SDL_HINT_JOYSTICK_HIDAPI_STEAM "SDL_JOYSTICK_HIDAPI_STEAM" + +/** + * \brief A variable controlling whether the HIDAPI driver for Nintendo Switch controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH" + +/** + * \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch controller is opened + * + * This variable can be set to the following values: + * "0" - home button LED is turned off + * "1" - home button LED is turned on + * + * By default the Home button LED state is not changed. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED" + +/** + * \brief A variable controlling whether the HIDAPI driver for XBox controllers should be used. + * + * This variable can be set to the following values: + * "0" - HIDAPI driver is not used + * "1" - HIDAPI driver is used + * + * The default is "0" on Windows, otherwise the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_XBOX "SDL_JOYSTICK_HIDAPI_XBOX" + + /** + * \brief A variable controlling whether the RAWINPUT joystick drivers should be used for better handling XInput-capable devices. + * + * This variable can be set to the following values: + * "0" - RAWINPUT drivers are not used + * "1" - RAWINPUT drivers are used (the default) + */ +#define SDL_HINT_JOYSTICK_RAWINPUT "SDL_JOYSTICK_RAWINPUT" + + /** + * \brief A variable controlling whether the RAWINPUT driver should pull correlated data from XInput. + * + * This variable can be set to the following values: + * "0" - RAWINPUT driver will only use data from raw input APIs + * "1" - RAWINPUT driver will also pull data from XInput, providing + * better trigger axes, guide button presses, and rumble support + * for Xbox controllers + * + * The default is "1". This hint applies to any joysticks opened after setting the hint. + */ +#define SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT "SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT" + + /** + * \brief A variable controlling whether the ROG Chakram mice should show up as joysticks + * + * This variable can be set to the following values: + * "0" - ROG Chakram mice do not show up as joysticks (the default) + * "1" - ROG Chakram mice show up as joysticks + */ +#define SDL_HINT_JOYSTICK_ROG_CHAKRAM "SDL_JOYSTICK_ROG_CHAKRAM" + + /** + * \brief A variable controlling whether a separate thread should be used + * for handling joystick detection and raw input messages on Windows + * + * This variable can be set to the following values: + * "0" - A separate thread is not used (the default) + * "1" - A separate thread is used for handling raw input messages + * + */ +#define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD" + +/** + * \brief Determines whether SDL enforces that DRM master is required in order + * to initialize the KMSDRM video backend. + * + * The DRM subsystem has a concept of a "DRM master" which is a DRM client that + * has the ability to set planes, set cursor, etc. When SDL is DRM master, it + * can draw to the screen using the SDL rendering APIs. Without DRM master, SDL + * is still able to process input and query attributes of attached displays, + * but it cannot change display state or draw to the screen directly. + * + * In some cases, it can be useful to have the KMSDRM backend even if it cannot + * be used for rendering. An app may want to use SDL for input processing while + * using another rendering API (such as an MMAL overlay on Raspberry Pi) or + * using its own code to render to DRM overlays that SDL doesn't support. + * + * This hint must be set before initializing the video subsystem. + * + * This variable can be set to the following values: + * "0" - SDL will allow usage of the KMSDRM backend without DRM master + * "1" - SDL Will require DRM master to use the KMSDRM backend (default) + */ +#define SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER "SDL_KMSDRM_REQUIRE_DRM_MASTER" + + /** + * \brief A comma separated list of devices to open as joysticks + * + * This variable is currently only used by the Linux joystick driver. + */ +#define SDL_HINT_JOYSTICK_DEVICE "SDL_JOYSTICK_DEVICE" + + /** + * \brief A variable controlling whether to use the classic /dev/input/js* joystick interface or the newer /dev/input/event* joystick interface on Linux + * + * This variable can be set to the following values: + * "0" - Use /dev/input/event* + * "1" - Use /dev/input/js* + * + * By default the /dev/input/event* interfaces are used + */ +#define SDL_HINT_LINUX_JOYSTICK_CLASSIC "SDL_LINUX_JOYSTICK_CLASSIC" + + /** + * \brief A variable controlling whether joysticks on Linux adhere to their HID-defined deadzones or return unfiltered values. + * + * This variable can be set to the following values: + * "0" - Return unfiltered joystick axis values (the default) + * "1" - Return axis values with deadzones taken into account + */ +#define SDL_HINT_LINUX_JOYSTICK_DEADZONES "SDL_LINUX_JOYSTICK_DEADZONES" + +/** +* \brief When set don't force the SDL app to become a foreground process +* +* This hint only applies to Mac OS X. +* +*/ +#define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP" + +/** + * \brief A variable that determines whether ctrl+click should generate a right-click event on Mac + * + * If present, holding ctrl while left clicking will generate a right click + * event when on Mac. + */ +#define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK" + +/** + * \brief A variable setting the double click radius, in pixels. + */ +#define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS "SDL_MOUSE_DOUBLE_CLICK_RADIUS" + +/** + * \brief A variable setting the double click time, in milliseconds. + */ +#define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME "SDL_MOUSE_DOUBLE_CLICK_TIME" + +/** + * \brief Allow mouse click events when clicking to focus an SDL window + * + * This variable can be set to the following values: + * "0" - Ignore mouse clicks that activate a window + * "1" - Generate events for mouse clicks that activate a window + * + * By default SDL will ignore mouse clicks that activate a window + */ +#define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH" + +/** + * \brief A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode + */ +#define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE "SDL_MOUSE_NORMAL_SPEED_SCALE" + +/** + * \brief A variable controlling whether relative mouse mode constrains the mouse to the center of the window + * + * This variable can be set to the following values: + * "0" - Relative mouse mode constrains the mouse to the window + * "1" - Relative mouse mode constrains the mouse to the center of the window + * + * Constraining to the center of the window works better for FPS games and when the + * application is running over RDP. Constraining to the whole window works better + * for 2D games and increases the chance that the mouse will be in the correct + * position when using high DPI mice. + * + * By default SDL will constrain the mouse to the center of the window + */ +#define SDL_HINT_MOUSE_RELATIVE_MODE_CENTER "SDL_MOUSE_RELATIVE_MODE_CENTER" + +/** + * \brief A variable controlling whether relative mouse mode is implemented using mouse warping + * + * This variable can be set to the following values: + * "0" - Relative mouse mode uses raw input + * "1" - Relative mouse mode uses mouse warping + * + * By default SDL will use raw input for relative mouse mode + */ +#define SDL_HINT_MOUSE_RELATIVE_MODE_WARP "SDL_MOUSE_RELATIVE_MODE_WARP" + +/** + * \brief A variable controlling whether relative mouse motion is affected by renderer scaling + * + * This variable can be set to the following values: + * "0" - Relative motion is unaffected by DPI or renderer's logical size + * "1" - Relative motion is scaled according to DPI scaling and logical size + * + * By default relative mouse deltas are affected by DPI and renderer scaling + */ +#define SDL_HINT_MOUSE_RELATIVE_SCALING "SDL_MOUSE_RELATIVE_SCALING" + +/** + * \brief A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode + */ +#define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE "SDL_MOUSE_RELATIVE_SPEED_SCALE" + +/** + * \brief A variable controlling whether mouse events should generate synthetic touch events + * + * This variable can be set to the following values: + * "0" - Mouse events will not generate touch events (default for desktop platforms) + * "1" - Mouse events will generate touch events (default for mobile platforms, such as Android and iOS) + */ +#define SDL_HINT_MOUSE_TOUCH_EVENTS "SDL_MOUSE_TOUCH_EVENTS" + +/** + * \brief A variable controlling whether the mouse is captured while mouse buttons are pressed + * + * This variable can be set to the following values: + * "0" - The mouse is not captured while mouse buttons are pressed + * "1" - The mouse is captured while mouse buttons are pressed + * + * By default the mouse is captured while mouse buttons are pressed so if the mouse is dragged + * outside the window, the application continues to receive mouse events until the button is + * released. + */ +#define SDL_HINT_MOUSE_AUTO_CAPTURE "SDL_MOUSE_AUTO_CAPTURE" + +/** + * \brief Tell SDL not to catch the SIGINT or SIGTERM signals. + * + * This hint only applies to Unix-like platforms, and should set before + * any calls to SDL_Init() + * + * The variable can be set to the following values: + * "0" - SDL will install a SIGINT and SIGTERM handler, and when it + * catches a signal, convert it into an SDL_QUIT event. + * "1" - SDL will not install a signal handler at all. + */ +#define SDL_HINT_NO_SIGNAL_HANDLERS "SDL_NO_SIGNAL_HANDLERS" + +/** + * \brief A variable controlling what driver to use for OpenGL ES contexts. + * + * On some platforms, currently Windows and X11, OpenGL drivers may support + * creating contexts with an OpenGL ES profile. By default SDL uses these + * profiles, when available, otherwise it attempts to load an OpenGL ES + * library, e.g. that provided by the ANGLE project. This variable controls + * whether SDL follows this default behaviour or will always load an + * OpenGL ES library. + * + * Circumstances where this is useful include + * - Testing an app with a particular OpenGL ES implementation, e.g ANGLE, + * or emulator, e.g. those from ARM, Imagination or Qualcomm. + * - Resolving OpenGL ES function addresses at link time by linking with + * the OpenGL ES library instead of querying them at run time with + * SDL_GL_GetProcAddress(). + * + * Caution: for an application to work with the default behaviour across + * different OpenGL drivers it must query the OpenGL ES function + * addresses at run time using SDL_GL_GetProcAddress(). + * + * This variable is ignored on most platforms because OpenGL ES is native + * or not supported. + * + * This variable can be set to the following values: + * "0" - Use ES profile of OpenGL, if available. (Default when not set.) + * "1" - Load OpenGL ES library using the default library names. + * + */ +#define SDL_HINT_OPENGL_ES_DRIVER "SDL_OPENGL_ES_DRIVER" + +/** + * \brief A variable controlling which orientations are allowed on iOS/Android. + * + * In some circumstances it is necessary to be able to explicitly control + * which UI orientations are allowed. + * + * This variable is a space delimited list of the following values: + * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown" + */ +#define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" + +/** + * \brief A variable controlling the use of a sentinel event when polling the event queue + * + * This variable can be set to the following values: + * "0" - Disable poll sentinels + * "1" - Enable poll sentinels + * + * When polling for events, SDL_PumpEvents is used to gather new events from devices. + * If a device keeps producing new events between calls to SDL_PumpEvents, a poll loop will + * become stuck until the new events stop. + * This is most noticable when moving a high frequency mouse. + * + * By default, poll sentinels are enabled. + */ +#define SDL_HINT_POLL_SENTINEL "SDL_POLL_SENTINEL" + +/** + * \brief Override for SDL_GetPreferredLocales() + * + * If set, this will be favored over anything the OS might report for the + * user's preferred locales. Changing this hint at runtime will not generate + * a SDL_LOCALECHANGED event (but if you can change the hint, you can push + * your own event, if you want). + * + * The format of this hint is a comma-separated list of language and locale, + * combined with an underscore, as is a common format: "en_GB". Locale is + * optional: "en". So you might have a list like this: "en_GB,jp,es_PT" + */ +#define SDL_HINT_PREFERRED_LOCALES "SDL_PREFERRED_LOCALES" + +/** + * \brief A variable describing the content orientation on QtWayland-based platforms. + * + * On QtWayland platforms, windows are rotated client-side to allow for custom + * transitions. In order to correctly position overlays (e.g. volume bar) and + * gestures (e.g. events view, close/minimize gestures), the system needs to + * know in which orientation the application is currently drawing its contents. + * + * This does not cause the window to be rotated or resized, the application + * needs to take care of drawing the content in the right orientation (the + * framebuffer is always in portrait mode). + * + * This variable can be one of the following values: + * "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape" + */ +#define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION" + +/** + * \brief Flags to set on QtWayland windows to integrate with the native window manager. + * + * On QtWayland platforms, this hint controls the flags to set on the windows. + * For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures. + * + * This variable is a space-separated list of the following values (empty = no flags): + * "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager" + */ +#define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS" + +/** + * \brief A variable controlling whether the 2D render API is compatible or efficient. + * + * This variable can be set to the following values: + * + * "0" - Don't use batching to make rendering more efficient. + * "1" - Use batching, but might cause problems if app makes its own direct OpenGL calls. + * + * Up to SDL 2.0.9, the render API would draw immediately when requested. Now + * it batches up draw requests and sends them all to the GPU only when forced + * to (during SDL_RenderPresent, when changing render targets, by updating a + * texture that the batch needs, etc). This is significantly more efficient, + * but it can cause problems for apps that expect to render on top of the + * render API's output. As such, SDL will disable batching if a specific + * render backend is requested (since this might indicate that the app is + * planning to use the underlying graphics API directly). This hint can + * be used to explicitly request batching in this instance. It is a contract + * that you will either never use the underlying graphics API directly, or + * if you do, you will call SDL_RenderFlush() before you do so any current + * batch goes to the GPU before your work begins. Not following this contract + * will result in undefined behavior. + */ +#define SDL_HINT_RENDER_BATCHING "SDL_RENDER_BATCHING" + +/** + * \brief A variable controlling how the 2D render API renders lines + * + * This variable can be set to the following values: + * "0" - Use the default line drawing method (Bresenham's line algorithm as of SDL 2.0.20) + * "1" - Use the driver point API using Bresenham's line algorithm (correct, draws many points) + * "2" - Use the driver line API (occasionally misses line endpoints based on hardware driver quirks, was the default before 2.0.20) + * "3" - Use the driver geometry API (correct, draws thicker diagonal lines) + * + * This variable should be set when the renderer is created. + */ +#define SDL_HINT_RENDER_LINE_METHOD "SDL_RENDER_LINE_METHOD" + +/** + * \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer. + * + * This variable does not have any effect on the Direct3D 9 based renderer. + * + * This variable can be set to the following values: + * "0" - Disable Debug Layer use + * "1" - Enable Debug Layer use + * + * By default, SDL does not use Direct3D Debug Layer. + */ +#define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG" + +/** + * \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations. + * + * This variable can be set to the following values: + * "0" - Thread-safety is not enabled (faster) + * "1" - Thread-safety is enabled + * + * By default the Direct3D device is created with thread-safety disabled. + */ +#define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE" + +/** + * \brief A variable specifying which render driver to use. + * + * If the application doesn't pick a specific renderer to use, this variable + * specifies the name of the preferred renderer. If the preferred renderer + * can't be initialized, the normal default renderer is used. + * + * This variable is case insensitive and can be set to the following values: + * "direct3d" + * "opengl" + * "opengles2" + * "opengles" + * "metal" + * "software" + * + * The default varies by platform, but it's the first one in the list that + * is available on the current platform. + */ +#define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER" + +/** + * \brief A variable controlling the scaling policy for SDL_RenderSetLogicalSize. + * + * This variable can be set to the following values: + * "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen + * "1" or "overscan" - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen + * + * By default letterbox is used + */ +#define SDL_HINT_RENDER_LOGICAL_SIZE_MODE "SDL_RENDER_LOGICAL_SIZE_MODE" + +/** + * \brief A variable controlling whether the OpenGL render driver uses shaders if they are available. + * + * This variable can be set to the following values: + * "0" - Disable shaders + * "1" - Enable shaders + * + * By default shaders are used if OpenGL supports them. + */ +#define SDL_HINT_RENDER_OPENGL_SHADERS "SDL_RENDER_OPENGL_SHADERS" + +/** + * \brief A variable controlling the scaling quality + * + * This variable can be set to the following values: + * "0" or "nearest" - Nearest pixel sampling + * "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D) + * "2" or "best" - Currently this is the same as "linear" + * + * By default nearest pixel sampling is used + */ +#define SDL_HINT_RENDER_SCALE_QUALITY "SDL_RENDER_SCALE_QUALITY" + +/** + * \brief A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing. + * + * This variable can be set to the following values: + * "0" - Disable vsync + * "1" - Enable vsync + * + * By default SDL does not sync screen surface updates with vertical refresh. + */ +#define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC" + + /** + * \brief A variable to control whether the return key on the soft keyboard + * should hide the soft keyboard on Android and iOS. + * + * The variable can be set to the following values: + * "0" - The return key will be handled as a key event. This is the behaviour of SDL <= 2.0.3. (default) + * "1" - The return key will hide the keyboard. + * + * The value of this hint is used at runtime, so it can be changed at any time. + */ +#define SDL_HINT_RETURN_KEY_HIDES_IME "SDL_RETURN_KEY_HIDES_IME" + +/** + * \brief Tell SDL which Dispmanx layer to use on a Raspberry PI + * + * Also known as Z-order. The variable can take a negative or positive value. + * The default is 10000. + */ +#define SDL_HINT_RPI_VIDEO_LAYER "SDL_RPI_VIDEO_LAYER" + +/** + * \brief Specify an "activity name" for screensaver inhibition. + * + * Some platforms, notably Linux desktops, list the applications which are + * inhibiting the screensaver or other power-saving features. + * + * This hint lets you specify the "activity name" sent to the OS when + * SDL_DisableScreenSaver() is used (or the screensaver is automatically + * disabled). The contents of this hint are used when the screensaver is + * disabled. You should use a string that describes what your program is doing + * (and, therefore, why the screensaver is disabled). For example, "Playing a + * game" or "Watching a video". + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: "Playing a game" or something similar. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME "SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME" + +/** + * \brief Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as realtime. + * + * On some platforms, like Linux, a realtime priority thread may be subject to restrictions + * that require special handling by the application. This hint exists to let SDL know that + * the app is prepared to handle said restrictions. + * + * On Linux, SDL will apply the following configuration to any thread that becomes realtime: + * * The SCHED_RESET_ON_FORK bit will be set on the scheduling policy, + * * An RLIMIT_RTTIME budget will be configured to the rtkit specified limit. + * * Exceeding this limit will result in the kernel sending SIGKILL to the app, + * * Refer to the man pages for more information. + * + * This variable can be set to the following values: + * "0" - default platform specific behaviour + * "1" - Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling policy + */ +#define SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL "SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL" + +/** +* \brief A string specifying additional information to use with SDL_SetThreadPriority. +* +* By default SDL_SetThreadPriority will make appropriate system changes in order to +* apply a thread priority. For example on systems using pthreads the scheduler policy +* is changed automatically to a policy that works well with a given priority. +* Code which has specific requirements can override SDL's default behavior with this hint. +* +* pthread hint values are "current", "other", "fifo" and "rr". +* Currently no other platform hint values are defined but may be in the future. +* +* \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro +* configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME +* after calling SDL_SetThreadPriority(). +*/ +#define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY" + +/** +* \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size +* +* Use this hint in case you need to set SDL's threads stack size to other than the default. +* This is specially useful if you build SDL against a non glibc libc library (such as musl) which +* provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses). +* Support for this hint is currently available only in the pthread, Windows, and PSP backend. +* +* Instead of this hint, in 2.0.9 and later, you can use +* SDL_CreateThreadWithStackSize(). This hint only works with the classic +* SDL_CreateThread(). +*/ +#define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE" + +/** + * \brief A variable that controls the timer resolution, in milliseconds. + * + * The higher resolution the timer, the more frequently the CPU services + * timer interrupts, and the more precise delays are, but this takes up + * power and CPU time. This hint is only used on Windows. + * + * See this blog post for more information: + * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/ + * + * If this variable is set to "0", the system timer resolution is not set. + * + * The default value is "1". This hint may be set at any time. + */ +#define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION" + +/** + * \brief A variable controlling whether touch events should generate synthetic mouse events + * + * This variable can be set to the following values: + * "0" - Touch events will not generate mouse events + * "1" - Touch events will generate mouse events + * + * By default SDL will generate mouse events for touch events + */ +#define SDL_HINT_TOUCH_MOUSE_EVENTS "SDL_TOUCH_MOUSE_EVENTS" + +/** + * \brief A variable controlling which touchpad should generate synthetic mouse events + * + * This variable can be set to the following values: + * "0" - Only front touchpad should generate mouse events. Default + * "1" - Only back touchpad should generate mouse events. + * "2" - Both touchpads should generate mouse events. + * + * By default SDL will generate mouse events for all touch devices + */ +#define SDL_HINT_VITA_TOUCH_MOUSE_DEVICE "SDL_HINT_VITA_TOUCH_MOUSE_DEVICE" + +/** + * \brief A variable controlling whether the Android / tvOS remotes + * should be listed as joystick devices, instead of sending keyboard events. + * + * This variable can be set to the following values: + * "0" - Remotes send enter/escape/arrow key events + * "1" - Remotes are available as 2 axis, 2 button joysticks (the default). + */ +#define SDL_HINT_TV_REMOTE_AS_JOYSTICK "SDL_TV_REMOTE_AS_JOYSTICK" + +/** + * \brief A variable controlling whether the screensaver is enabled. + * + * This variable can be set to the following values: + * "0" - Disable screensaver + * "1" - Enable screensaver + * + * By default SDL will disable the screensaver. + */ +#define SDL_HINT_VIDEO_ALLOW_SCREENSAVER "SDL_VIDEO_ALLOW_SCREENSAVER" + +/** + * \brief Tell the video driver that we only want a double buffer. + * + * By default, most lowlevel 2D APIs will use a triple buffer scheme that + * wastes no CPU time on waiting for vsync after issuing a flip, but + * introduces a frame of latency. On the other hand, using a double buffer + * scheme instead is recommended for cases where low latency is an important + * factor because we save a whole frame of latency. + * We do so by waiting for vsync immediately after issuing a flip, usually just + * after eglSwapBuffers call in the backend's *_SwapWindow function. + * + * Since it's driver-specific, it's only supported where possible and + * implemented. Currently supported the following drivers: + * + * - KMSDRM (kmsdrm) + * - Raspberry Pi (raspberrypi) + */ +#define SDL_HINT_VIDEO_DOUBLE_BUFFER "SDL_VIDEO_DOUBLE_BUFFER" + +/** + * \brief A variable controlling whether the EGL window is allowed to be + * composited as transparent, rather than opaque. + * + * Most window systems will always render windows opaque, even if the surface + * format has an alpha channel. This is not always true, however, so by default + * SDL will try to enforce opaque composition. To override this behavior, you + * can set this hint to "1". + */ +#define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY" + +/** + * \brief A variable controlling whether the graphics context is externally managed. + * + * This variable can be set to the following values: + * "0" - SDL will manage graphics contexts that are attached to windows. + * "1" - Disable graphics context management on windows. + * + * By default SDL will manage OpenGL contexts in certain situations. For example, on Android the + * context will be automatically saved and restored when pausing the application. Additionally, some + * platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this + * behavior, which is desireable when the application manages the graphics context, such as + * an externally managed OpenGL context or attaching a Vulkan surface to the window. + */ +#define SDL_HINT_VIDEO_EXTERNAL_CONTEXT "SDL_VIDEO_EXTERNAL_CONTEXT" + +/** + * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS) + */ +#define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED" + +/** + * \brief A variable that dictates policy for fullscreen Spaces on Mac OS X. + * + * This hint only applies to Mac OS X. + * + * The variable can be set to the following values: + * "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and + * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" + * button on their titlebars). + * "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and + * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" + * button on their titlebars). + * + * The default value is "1". Spaces are disabled regardless of this hint if + * the OS isn't at least Mac OS X Lion (10.7). This hint must be set before + * any windows are created. + */ +#define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES "SDL_VIDEO_MAC_FULLSCREEN_SPACES" + +/** + * \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to false. + * \warning Before SDL 2.0.14, this defaulted to true! In 2.0.14, we're + * seeing if "true" causes more problems than it solves in modern times. + * + */ +#define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS" + +/** + * \brief A variable controlling whether the libdecor Wayland backend is allowed to be used. + * + * This variable can be set to the following values: + * "0" - libdecor use is disabled. + * "1" - libdecor use is enabled (default). + * + * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. + */ +#define SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR "SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR" + +/** + * \brief A variable controlling whether the libdecor Wayland backend is preferred over native decrations. + * + * When this hint is set, libdecor will be used to provide window decorations, even if xdg-decoration is + * available. (Note that, by default, libdecor will use xdg-decoration itself if available). + * + * This variable can be set to the following values: + * "0" - libdecor is enabled only if server-side decorations are unavailable. + * "1" - libdecor is always enabled if available. + * + * libdecor is used over xdg-shell when xdg-decoration protocol is unavailable. + */ +#define SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR "SDL_VIDEO_WAYLAND_PREFER_LIBDECOR" + +/** +* \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p"). +* +* If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has +* SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly +* created SDL_Window: +* +* 1. Its pixel format will be set to the same pixel format as this SDL_Window. This is +* needed for example when sharing an OpenGL context across multiple windows. +* +* 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for +* OpenGL rendering. +* +* This variable can be set to the following values: +* The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should +* share a pixel format with. +*/ +#define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT" + +/** + * \brief When calling SDL_CreateWindowFrom(), make the window compatible with OpenGL. + * + * This variable can be set to the following values: + * "0" - Don't add any graphics flags to the SDL_WindowFlags + * "1" - Add SDL_WINDOW_OPENGL to the SDL_WindowFlags + * + * By default SDL will not make the foreign window compatible with OpenGL. + */ +#define SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL "SDL_VIDEO_FOREIGN_WINDOW_OPENGL" + +/** + * \brief When calling SDL_CreateWindowFrom(), make the window compatible with Vulkan. + * + * This variable can be set to the following values: + * "0" - Don't add any graphics flags to the SDL_WindowFlags + * "1" - Add SDL_WINDOW_VULKAN to the SDL_WindowFlags + * + * By default SDL will not make the foreign window compatible with Vulkan. + */ +#define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN "SDL_VIDEO_FOREIGN_WINDOW_VULKAN" + +/** +* \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries +* +* SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It +* can use two different sets of binaries, those compiled by the user from source +* or those provided by the Chrome browser. In the later case, these binaries require +* that SDL loads a DLL providing the shader compiler. +* +* This variable can be set to the following values: +* "d3dcompiler_46.dll" - default, best for Vista or later. +* "d3dcompiler_43.dll" - for XP support. +* "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries. +* +*/ +#define SDL_HINT_VIDEO_WIN_D3DCOMPILER "SDL_VIDEO_WIN_D3DCOMPILER" + +/** + * \brief A variable controlling whether X11 should use GLX or EGL by default + * + * This variable can be set to the following values: + * "0" - Use GLX + * "1" - Use EGL + * + * By default SDL will use GLX when both are present. + */ +#define SDL_HINT_VIDEO_X11_FORCE_EGL "SDL_VIDEO_X11_FORCE_EGL" + +/** + * \brief A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint should be used. + * + * This variable can be set to the following values: + * "0" - Disable _NET_WM_BYPASS_COMPOSITOR + * "1" - Enable _NET_WM_BYPASS_COMPOSITOR + * + * By default SDL will use _NET_WM_BYPASS_COMPOSITOR + * + */ +#define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR" + +/** + * \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported. + * + * This variable can be set to the following values: + * "0" - Disable _NET_WM_PING + * "1" - Enable _NET_WM_PING + * + * By default SDL will use _NET_WM_PING, but for applications that know they + * will not always be able to respond to ping requests in a timely manner they can + * turn it off to avoid the window manager thinking the app is hung. + * The hint is checked in CreateWindow. + */ +#define SDL_HINT_VIDEO_X11_NET_WM_PING "SDL_VIDEO_X11_NET_WM_PING" + +/** + * \brief A variable forcing the visual ID chosen for new X11 windows + * + */ +#define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID" + +/** + * \brief A variable controlling whether the X11 Xinerama extension should be used. + * + * This variable can be set to the following values: + * "0" - Disable Xinerama + * "1" - Enable Xinerama + * + * By default SDL will use Xinerama if it is available. + */ +#define SDL_HINT_VIDEO_X11_XINERAMA "SDL_VIDEO_X11_XINERAMA" + +/** + * \brief A variable controlling whether the X11 XRandR extension should be used. + * + * This variable can be set to the following values: + * "0" - Disable XRandR + * "1" - Enable XRandR + * + * By default SDL will not use XRandR because of window manager issues. + */ +#define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR" + +/** + * \brief A variable controlling whether the X11 VidMode extension should be used. + * + * This variable can be set to the following values: + * "0" - Disable XVidMode + * "1" - Enable XVidMode + * + * By default SDL will use XVidMode if it is available. + */ +#define SDL_HINT_VIDEO_X11_XVIDMODE "SDL_VIDEO_X11_XVIDMODE" + +/** + * \brief Controls how the fact chunk affects the loading of a WAVE file. + * + * The fact chunk stores information about the number of samples of a WAVE + * file. The Standards Update from Microsoft notes that this value can be used + * to 'determine the length of the data in seconds'. This is especially useful + * for compressed formats (for which this is a mandatory chunk) if they produce + * multiple sample frames per block and truncating the block is not allowed. + * The fact chunk can exactly specify how many sample frames there should be + * in this case. + * + * Unfortunately, most application seem to ignore the fact chunk and so SDL + * ignores it by default as well. + * + * This variable can be set to the following values: + * + * "truncate" - Use the number of samples to truncate the wave data if + * the fact chunk is present and valid + * "strict" - Like "truncate", but raise an error if the fact chunk + * is invalid, not present for non-PCM formats, or if the + * data chunk doesn't have that many samples + * "ignorezero" - Like "truncate", but ignore fact chunk if the number of + * samples is zero + * "ignore" - Ignore fact chunk entirely (default) + */ +#define SDL_HINT_WAVE_FACT_CHUNK "SDL_WAVE_FACT_CHUNK" + +/** + * \brief Controls how the size of the RIFF chunk affects the loading of a WAVE file. + * + * The size of the RIFF chunk (which includes all the sub-chunks of the WAVE + * file) is not always reliable. In case the size is wrong, it's possible to + * just ignore it and step through the chunks until a fixed limit is reached. + * + * Note that files that have trailing data unrelated to the WAVE file or + * corrupt files may slow down the loading process without a reliable boundary. + * By default, SDL stops after 10000 chunks to prevent wasting time. Use the + * environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value. + * + * This variable can be set to the following values: + * + * "force" - Always use the RIFF chunk size as a boundary for the chunk search + * "ignorezero" - Like "force", but a zero size searches up to 4 GiB (default) + * "ignore" - Ignore the RIFF chunk size and always search up to 4 GiB + * "maximum" - Search for chunks until the end of file (not recommended) + */ +#define SDL_HINT_WAVE_RIFF_CHUNK_SIZE "SDL_WAVE_RIFF_CHUNK_SIZE" + +/** + * \brief Controls how a truncated WAVE file is handled. + * + * A WAVE file is considered truncated if any of the chunks are incomplete or + * the data chunk size is not a multiple of the block size. By default, SDL + * decodes until the first incomplete block, as most applications seem to do. + * + * This variable can be set to the following values: + * + * "verystrict" - Raise an error if the file is truncated + * "strict" - Like "verystrict", but the size of the RIFF chunk is ignored + * "dropframe" - Decode until the first incomplete sample frame + * "dropblock" - Decode until the first incomplete block (default) + */ +#define SDL_HINT_WAVE_TRUNCATION "SDL_WAVE_TRUNCATION" + +/** + * \brief Tell SDL not to name threads on Windows with the 0x406D1388 Exception. + * The 0x406D1388 Exception is a trick used to inform Visual Studio of a + * thread's name, but it tends to cause problems with other debuggers, + * and the .NET runtime. Note that SDL 2.0.6 and later will still use + * the (safer) SetThreadDescription API, introduced in the Windows 10 + * Creators Update, if available. + * + * The variable can be set to the following values: + * "0" - SDL will raise the 0x406D1388 Exception to name threads. + * This is the default behavior of SDL <= 2.0.4. + * "1" - SDL will not raise this exception, and threads will be unnamed. (default) + * This is necessary with .NET languages or debuggers that aren't Visual Studio. + */ +#define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING" + +/** + * \brief A variable controlling whether the windows message loop is processed by SDL + * + * This variable can be set to the following values: + * "0" - The window message loop is not run + * "1" - The window message loop is processed in SDL_PumpEvents() + * + * By default SDL will process the windows message loop + */ +#define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP" + +/** + * \brief Force SDL to use Critical Sections for mutexes on Windows. + * On Windows 7 and newer, Slim Reader/Writer Locks are available. + * They offer better performance, allocate no kernel ressources and + * use less memory. SDL will fall back to Critical Sections on older + * OS versions or if forced to by this hint. + * + * This variable can be set to the following values: + * "0" - Use SRW Locks when available. If not, fall back to Critical Sections. (default) + * "1" - Force the use of Critical Sections in all cases. + * + */ +#define SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS "SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS" + +/** + * \brief Force SDL to use Kernel Semaphores on Windows. + * Kernel Semaphores are inter-process and require a context + * switch on every interaction. On Windows 8 and newer, the + * WaitOnAddress API is available. Using that and atomics to + * implement semaphores increases performance. + * SDL will fall back to Kernel Objects on older OS versions + * or if forced to by this hint. + * + * This variable can be set to the following values: + * "0" - Use Atomics and WaitOnAddress API when available. If not, fall back to Kernel Objects. (default) + * "1" - Force the use of Kernel Objects in all cases. + * + */ +#define SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL "SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL" + +/** + * \brief A variable to specify custom icon resource id from RC file on Windows platform + */ +#define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON" +#define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL" + +/** + * \brief Tell SDL not to generate window-close events for Alt+F4 on Windows. + * + * The variable can be set to the following values: + * "0" - SDL will generate a window-close event when it sees Alt+F4. + * "1" - SDL will only do normal key handling for Alt+F4. + */ +#define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4" + +/** + * \brief Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9. + * Direct3D 9Ex contains changes to state management that can eliminate device + * loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may require + * some changes to your application to cope with the new behavior, so this + * is disabled by default. + * + * This hint must be set before initializing the video subsystem. + * + * For more information on Direct3D 9Ex, see: + * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex + * - https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements + * + * This variable can be set to the following values: + * "0" - Use the original Direct3D 9 API (default) + * "1" - Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex is unavailable) + * + */ +#define SDL_HINT_WINDOWS_USE_D3D9EX "SDL_WINDOWS_USE_D3D9EX" + +/** + * \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden + * + * This variable can be set to the following values: + * "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc) + * "1" - The window frame is interactive when the cursor is hidden + * + * By default SDL will allow interaction with the window frame when the cursor is hidden + */ +#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN" + +/** +* \brief A variable controlling whether the window is activated when the SDL_ShowWindow function is called +* +* This variable can be set to the following values: +* "0" - The window is activated when the SDL_ShowWindow function is called +* "1" - The window is not activated when the SDL_ShowWindow function is called +* +* By default SDL will activate the window when the SDL_ShowWindow function is called +*/ +#define SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN "SDL_WINDOW_NO_ACTIVATION_WHEN_SHOWN" + +/** \brief Allows back-button-press events on Windows Phone to be marked as handled + * + * Windows Phone devices typically feature a Back button. When pressed, + * the OS will emit back-button-press events, which apps are expected to + * handle in an appropriate manner. If apps do not explicitly mark these + * events as 'Handled', then the OS will invoke its default behavior for + * unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to + * terminate the app (and attempt to switch to the previous app, or to the + * device's home screen). + * + * Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL + * to mark back-button-press events as Handled, if and when one is sent to + * the app. + * + * Internally, Windows Phone sends back button events as parameters to + * special back-button-press callback functions. Apps that need to respond + * to back-button-press events are expected to register one or more + * callback functions for such, shortly after being launched (during the + * app's initialization phase). After the back button is pressed, the OS + * will invoke these callbacks. If the app's callback(s) do not explicitly + * mark the event as handled by the time they return, or if the app never + * registers one of these callback, the OS will consider the event + * un-handled, and it will apply its default back button behavior (terminate + * the app). + * + * SDL registers its own back-button-press callback with the Windows Phone + * OS. This callback will emit a pair of SDL key-press events (SDL_KEYDOWN + * and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which + * it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON. + * If the hint's value is set to "1", the back button event's Handled + * property will get set to 'true'. If the hint's value is set to something + * else, or if it is unset, SDL will leave the event's Handled property + * alone. (By default, the OS sets this property to 'false', to note.) + * + * SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a + * back button is pressed, or can set it in direct-response to a back button + * being pressed. + * + * In order to get notified when a back button is pressed, SDL apps should + * register a callback function with SDL_AddEventWatch(), and have it listen + * for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK. + * (Alternatively, SDL_KEYUP events can be listened-for. Listening for + * either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON + * set by such a callback, will be applied to the OS' current + * back-button-press event. + * + * More details on back button behavior in Windows Phone apps can be found + * at the following page, on Microsoft's developer site: + * http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx + */ +#define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON" + +/** \brief Label text for a WinRT app's privacy policy link + * + * Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT, + * Microsoft mandates that this policy be available via the Windows Settings charm. + * SDL provides code to add a link there, with its label text being set via the + * optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. + * + * Please note that a privacy policy's contents are not set via this hint. A separate + * hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the + * policy. + * + * The contents of this hint should be encoded as a UTF8 string. + * + * The default value is "Privacy Policy". This hint should only be set during app + * initialization, preferably before any calls to SDL_Init(). + * + * For additional information on linking to a privacy policy, see the documentation for + * SDL_HINT_WINRT_PRIVACY_POLICY_URL. + */ +#define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL" + +/** + * \brief A URL to a WinRT app's privacy policy + * + * All network-enabled WinRT apps must make a privacy policy available to its + * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be + * be available in the Windows Settings charm, as accessed from within the app. + * SDL provides code to add a URL-based link there, which can point to the app's + * privacy policy. + * + * To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL + * before calling any SDL_Init() functions. The contents of the hint should + * be a valid URL. For example, "http://www.example.com". + * + * The default value is "", which will prevent SDL from adding a privacy policy + * link to the Settings charm. This hint should only be set during app init. + * + * The label text of an app's "Privacy Policy" link may be customized via another + * hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. + * + * Please note that on Windows Phone, Microsoft does not provide standard UI + * for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL + * will not get used on that platform. Network-enabled phone apps should display + * their privacy policy through some other, in-app means. + */ +#define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL" + +/** + * \brief Mark X11 windows as override-redirect. + * + * If set, this _might_ increase framerate at the expense of the desktop + * not working as expected. Override-redirect windows aren't noticed by the + * window manager at all. + * + * You should probably only use this for fullscreen windows, and you probably + * shouldn't even use it for that. But it's here if you want to try! + */ +#define SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT "SDL_X11_FORCE_OVERRIDE_REDIRECT" + +/** + * \brief A variable that lets you disable the detection and use of Xinput gamepad devices + * + * The variable can be set to the following values: + * "0" - Disable XInput detection (only uses direct input) + * "1" - Enable XInput detection (the default) + */ +#define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" + +/** + * \brief A variable that causes SDL to use the old axis and button mapping for XInput devices. + * + * This hint is for backwards compatibility only and will be removed in SDL 2.1 + * + * The default value is "0". This hint must be set before SDL_Init() + */ +#define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING" + +/** + * \brief A variable that causes SDL to not ignore audio "monitors" + * + * This is currently only used for PulseAudio and ignored elsewhere. + * + * By default, SDL ignores audio devices that aren't associated with physical + * hardware. Changing this hint to "1" will expose anything SDL sees that + * appears to be an audio source or sink. This will add "devices" to the list + * that the user probably doesn't want or need, but it can be useful in + * scenarios where you want to hook up SDL to some sort of virtual device, + * etc. + * + * The default value is "0". This hint must be set before SDL_Init(). + * + * This hint is available since SDL 2.0.16. Before then, virtual devices are + * always ignored. + */ +#define SDL_HINT_AUDIO_INCLUDE_MONITORS "SDL_AUDIO_INCLUDE_MONITORS" + +/** + * \brief A variable that forces X11 windows to create as a custom type. + * + * This is currently only used for X11 and ignored elsewhere. + * + * During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property + * to report to the window manager the type of window it wants to create. + * This might be set to various things if SDL_WINDOW_TOOLTIP or + * SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that + * haven't set a specific type, this hint can be used to specify a custom + * type. For example, a dock window might set this to + * "_NET_WM_WINDOW_TYPE_DOCK". + * + * If not set or set to "", this hint is ignored. This hint must be set + * before the SDL_CreateWindow() call that it is intended to affect. + * + * This hint is available since SDL 2.0.22. + */ +#define SDL_HINT_X11_WINDOW_TYPE "SDL_X11_WINDOW_TYPE" + +/** + * \brief A variable that decides whether to send SDL_QUIT when closing the final window. + * + * By default, SDL sends an SDL_QUIT event when there is only one window + * and it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most + * apps would also take the loss of this window as a signal to terminate the + * program. + * + * However, it's not unreasonable in some cases to have the program continue + * to live on, perhaps to create new windows later. + * + * Changing this hint to "0" will cause SDL to not send an SDL_QUIT event + * when the final window is requesting to close. Note that in this case, + * there are still other legitimate reasons one might get an SDL_QUIT + * event: choosing "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c) + * on Unix, etc. + * + * The default value is "1". This hint can be changed at any time. + * + * This hint is available since SDL 2.0.22. Before then, you always get + * an SDL_QUIT event when closing the final window. + */ +#define SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE "SDL_QUIT_ON_LAST_WINDOW_CLOSE" + + +/** + * \brief A variable that decides what video backend to use. + * + * By default, SDL will try all available video backends in a reasonable + * order until it finds one that can work, but this hint allows the app + * or user to force a specific target, such as "x11" if, say, you are + * on Wayland but want to try talking to the X server instead. + * + * This functionality has existed since SDL 2.0.0 (indeed, before that) + * but before 2.0.22 this was an environment variable only. In 2.0.22, + * it was upgraded to a full SDL hint, so you can set the environment + * variable as usual or programatically set the hint with SDL_SetHint, + * which won't propagate to child processes. + * + * The default value is unset, in which case SDL will try to figure out + * the best video backend on your behalf. This hint needs to be set + * before SDL_Init() is called to be useful. + * + * This hint is available since SDL 2.0.22. Before then, you could set + * the environment variable to get the same effect. + */ +#define SDL_HINT_VIDEODRIVER "SDL_VIDEODRIVER" + +/** + * \brief A variable that decides what audio backend to use. + * + * By default, SDL will try all available audio backends in a reasonable + * order until it finds one that can work, but this hint allows the app + * or user to force a specific target, such as "alsa" if, say, you are + * on PulseAudio but want to try talking to the lower level instead. + * + * This functionality has existed since SDL 2.0.0 (indeed, before that) + * but before 2.0.22 this was an environment variable only. In 2.0.22, + * it was upgraded to a full SDL hint, so you can set the environment + * variable as usual or programatically set the hint with SDL_SetHint, + * which won't propagate to child processes. + * + * The default value is unset, in which case SDL will try to figure out + * the best audio backend on your behalf. This hint needs to be set + * before SDL_Init() is called to be useful. + * + * This hint is available since SDL 2.0.22. Before then, you could set + * the environment variable to get the same effect. + */ +#define SDL_HINT_AUDIODRIVER "SDL_AUDIODRIVER" + + +/** + * \brief An enumeration of hint priorities + */ +typedef enum +{ + SDL_HINT_DEFAULT, + SDL_HINT_NORMAL, + SDL_HINT_OVERRIDE +} SDL_HintPriority; + + +/** + * Set a hint with a specific priority. + * + * The priority controls the behavior when setting a hint that already has a + * value. Hints will replace existing hints of their priority and lower. + * Environment variables are considered to have override priority. + * + * \param name the hint to set + * \param value the value of the hint variable + * \param priority the SDL_HintPriority level for the hint + * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetHint + * \sa SDL_SetHint + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name, + const char *value, + SDL_HintPriority priority); + +/** + * Set a hint with normal priority. + * + * Hints will not be set if there is an existing override hint or environment + * variable that takes precedence. You can use SDL_SetHintWithPriority() to + * set the hint with override priority instead. + * + * \param name the hint to set + * \param value the value of the hint variable + * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetHint + * \sa SDL_SetHintWithPriority + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name, + const char *value); + +/** + * Get the value of a hint. + * + * \param name the hint to query + * \returns the string value of a hint or NULL if the hint isn't set. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetHint + * \sa SDL_SetHintWithPriority + */ +extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name); + +/** + * Get the boolean value of a hint variable. + * + * \param name the name of the hint to get the boolean value from + * \param default_value the value to return if the hint does not exist + * \returns the boolean value of a hint or the provided default value if the + * hint does not exist. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetHint + * \sa SDL_SetHint + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetHintBoolean(const char *name, SDL_bool default_value); + +/** + * Type definition of the hint callback function. + * + * \param userdata what was passed as `userdata` to SDL_AddHintCallback() + * \param name what was passed as `name` to SDL_AddHintCallback() + * \param oldValue the previous hint value + * \param newValue the new value hint is to be set to + */ +typedef void (SDLCALL *SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue); + +/** + * Add a function to watch a particular hint. + * + * \param name the hint to watch + * \param callback An SDL_HintCallback function that will be called when the + * hint value changes + * \param userdata a pointer to pass to the callback function + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DelHintCallback + */ +extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name, + SDL_HintCallback callback, + void *userdata); + +/** + * Remove a function watching a particular hint. + * + * \param name the hint being watched + * \param callback An SDL_HintCallback function that will be called when the + * hint value changes + * \param userdata a pointer being passed to the callback function + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddHintCallback + */ +extern DECLSPEC void SDLCALL SDL_DelHintCallback(const char *name, + SDL_HintCallback callback, + void *userdata); + +/** + * Clear all hints. + * + * This function is automatically called during SDL_Quit(). + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_ClearHints(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_hints_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_joystick.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_joystick.h new file mode 100644 index 00000000000..3e5b4a9a320 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_joystick.h @@ -0,0 +1,946 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_joystick.h + * + * Include file for SDL joystick event handling + * + * The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks(), with the exact joystick + * behind a device_index changing as joysticks are plugged and unplugged. + * + * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted + * then it will get a new instance_id, instance_id's are monotonically increasing identifiers of a joystick plugged in. + * + * The term "player_index" is the number assigned to a player on a specific + * controller. For XInput controllers this returns the XInput user index. + * Many joysticks will not be able to supply this information. + * + * The term JoystickGUID is a stable 128-bit identifier for a joystick device that does not change over time, it identifies class of + * the device (a X360 wired controller for example). This identifier is platform dependent. + */ + +#ifndef SDL_joystick_h_ +#define SDL_joystick_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_joystick.h + * + * In order to use these functions, SDL_Init() must have been called + * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system + * for joysticks, and load appropriate drivers. + * + * If you would like to receive joystick updates while the application + * is in the background, you should set the following hint before calling + * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS + */ + +/** + * The joystick structure used to identify an SDL joystick + */ +struct _SDL_Joystick; +typedef struct _SDL_Joystick SDL_Joystick; + +/* A structure that encodes the stable unique id for a joystick device */ +typedef struct { + Uint8 data[16]; +} SDL_JoystickGUID; + +/** + * This is a unique ID for a joystick for the time it is connected to the system, + * and is never reused for the lifetime of the application. If the joystick is + * disconnected and reconnected, it will get a new ID. + * + * The ID value starts at 0 and increments from there. The value -1 is an invalid ID. + */ +typedef Sint32 SDL_JoystickID; + +typedef enum +{ + SDL_JOYSTICK_TYPE_UNKNOWN, + SDL_JOYSTICK_TYPE_GAMECONTROLLER, + SDL_JOYSTICK_TYPE_WHEEL, + SDL_JOYSTICK_TYPE_ARCADE_STICK, + SDL_JOYSTICK_TYPE_FLIGHT_STICK, + SDL_JOYSTICK_TYPE_DANCE_PAD, + SDL_JOYSTICK_TYPE_GUITAR, + SDL_JOYSTICK_TYPE_DRUM_KIT, + SDL_JOYSTICK_TYPE_ARCADE_PAD, + SDL_JOYSTICK_TYPE_THROTTLE +} SDL_JoystickType; + +typedef enum +{ + SDL_JOYSTICK_POWER_UNKNOWN = -1, + SDL_JOYSTICK_POWER_EMPTY, /* <= 5% */ + SDL_JOYSTICK_POWER_LOW, /* <= 20% */ + SDL_JOYSTICK_POWER_MEDIUM, /* <= 70% */ + SDL_JOYSTICK_POWER_FULL, /* <= 100% */ + SDL_JOYSTICK_POWER_WIRED, + SDL_JOYSTICK_POWER_MAX +} SDL_JoystickPowerLevel; + +/* Set max recognized G-force from accelerometer + See src/joystick/uikit/SDL_sysjoystick.m for notes on why this is needed + */ +#define SDL_IPHONE_MAX_GFORCE 5.0 + + +/* Function prototypes */ + +/** + * Locking for multi-threaded access to the joystick API + * + * If you are using the joystick API or handling events from multiple threads + * you should use these locking functions to protect access to the joysticks. + * + * In particular, you are guaranteed that the joystick list won't change, so + * the API functions that take a joystick index will be valid, and joystick + * and game controller events will not be delivered. + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC void SDLCALL SDL_LockJoysticks(void); + + +/** + * Unlocking for multi-threaded access to the joystick API + * + * If you are using the joystick API or handling events from multiple threads + * you should use these locking functions to protect access to the joysticks. + * + * In particular, you are guaranteed that the joystick list won't change, so + * the API functions that take a joystick index will be valid, and joystick + * and game controller events will not be delivered. + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC void SDLCALL SDL_UnlockJoysticks(void); + +/** + * Count the number of joysticks attached to the system. + * + * \returns the number of attached joysticks on success or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickName + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); + +/** + * Get the implementation dependent name of a joystick. + * + * This can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system) + * \returns the name of the selected joystick. If no name can be found, this + * function returns NULL; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickName + * \sa SDL_JoystickOpen + */ +extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); + +/** + * Get the player index of a joystick, or -1 if it's not available This can be + * called before any joysticks are opened. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetDevicePlayerIndex(int device_index); + +/** + * Get the implementation-dependent GUID for the joystick at a given device + * index. + * + * This function can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the GUID of the selected joystick. If called on an invalid index, + * this function returns a zero GUID + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetGUID + * \sa SDL_JoystickGetGUIDString + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetDeviceGUID(int device_index); + +/** + * Get the USB vendor ID of a joystick, if available. + * + * This can be called before any joysticks are opened. If the vendor ID isn't + * available this function returns 0. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the USB vendor ID of the selected joystick. If called on an + * invalid index, this function returns zero + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceVendor(int device_index); + +/** + * Get the USB product ID of a joystick, if available. + * + * This can be called before any joysticks are opened. If the product ID isn't + * available this function returns 0. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the USB product ID of the selected joystick. If called on an + * invalid index, this function returns zero + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProduct(int device_index); + +/** + * Get the product version of a joystick, if available. + * + * This can be called before any joysticks are opened. If the product version + * isn't available this function returns 0. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the product version of the selected joystick. If called on an + * invalid index, this function returns zero + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProductVersion(int device_index); + +/** + * Get the type of a joystick, if available. + * + * This can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the SDL_JoystickType of the selected joystick. If called on an + * invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN` + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetDeviceType(int device_index); + +/** + * Get the instance ID of a joystick. + * + * This can be called before any joysticks are opened. If the index is out of + * range, this function will return -1. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system + * \returns the instance id of the selected joystick. If called on an invalid + * index, this function returns zero + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickGetDeviceInstanceID(int device_index); + +/** + * Open a joystick for use. + * + * The `device_index` argument refers to the N'th joystick presently + * recognized by SDL on the system. It is **NOT** the same as the instance ID + * used to identify the joystick in future events. See + * SDL_JoystickInstanceID() for more details about instance IDs. + * + * The joystick subsystem must be initialized before a joystick can be opened + * for use. + * + * \param device_index the index of the joystick to query + * \returns a joystick identifier or NULL if an error occurred; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickClose + * \sa SDL_JoystickInstanceID + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); + +/** + * Get the SDL_Joystick associated with an instance id. + * + * \param instance_id the instance id to get the SDL_Joystick for + * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID instance_id); + +/** + * Get the SDL_Joystick associated with a player index. + * + * \param player_index the player index to get the SDL_Joystick for + * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromPlayerIndex(int player_index); + +/** + * Attach a new virtual joystick. + * + * \returns the joystick's device index, or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickAttachVirtual(SDL_JoystickType type, + int naxes, + int nbuttons, + int nhats); + +/** + * Detach a virtual joystick. + * + * \param device_index a value previously returned from + * SDL_JoystickAttachVirtual() + * \returns 0 on success, or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickDetachVirtual(int device_index); + +/** + * Query whether or not the joystick at a given device index is virtual. + * + * \param device_index a joystick device index. + * \returns SDL_TRUE if the joystick is virtual, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickIsVirtual(int device_index); + +/** + * Set values on an opened, virtual-joystick's axis. + * + * Please note that values set here will not be applied until the next call to + * SDL_JoystickUpdate, which can either be called directly, or can be called + * indirectly through various other SDL APIs, including, but not limited to + * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, + * SDL_WaitEvent. + * + * \param joystick the virtual joystick on which to set state. + * \param axis the specific axis on the virtual joystick to set. + * \param value the new value for the specified axis. + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualAxis(SDL_Joystick *joystick, int axis, Sint16 value); + +/** + * Set values on an opened, virtual-joystick's button. + * + * Please note that values set here will not be applied until the next call to + * SDL_JoystickUpdate, which can either be called directly, or can be called + * indirectly through various other SDL APIs, including, but not limited to + * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, + * SDL_WaitEvent. + * + * \param joystick the virtual joystick on which to set state. + * \param button the specific button on the virtual joystick to set. + * \param value the new value for the specified button. + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualButton(SDL_Joystick *joystick, int button, Uint8 value); + +/** + * Set values on an opened, virtual-joystick's hat. + * + * Please note that values set here will not be applied until the next call to + * SDL_JoystickUpdate, which can either be called directly, or can be called + * indirectly through various other SDL APIs, including, but not limited to + * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, + * SDL_WaitEvent. + * + * \param joystick the virtual joystick on which to set state. + * \param hat the specific hat on the virtual joystick to set. + * \param value the new value for the specified hat. + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualHat(SDL_Joystick *joystick, int hat, Uint8 value); + +/** + * Get the implementation dependent name of a joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the name of the selected joystick. If no name can be found, this + * function returns NULL; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNameForIndex + * \sa SDL_JoystickOpen + */ +extern DECLSPEC const char *SDLCALL SDL_JoystickName(SDL_Joystick *joystick); + +/** + * Get the player index of an opened joystick. + * + * For XInput controllers this returns the XInput user index. Many joysticks + * will not be able to supply this information. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the player index, or -1 if it's not available. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetPlayerIndex(SDL_Joystick *joystick); + +/** + * Set the player index of an opened joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \param player_index the player index to set. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC void SDLCALL SDL_JoystickSetPlayerIndex(SDL_Joystick *joystick, int player_index); + +/** + * Get the implementation-dependent GUID for the joystick. + * + * This function requires an open joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the GUID of the given joystick. If called on an invalid index, + * this function returns a zero GUID; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetDeviceGUID + * \sa SDL_JoystickGetGUIDString + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick *joystick); + +/** + * Get the USB vendor ID of an opened joystick, if available. + * + * If the vendor ID isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the USB vendor ID of the selected joystick, or 0 if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetVendor(SDL_Joystick *joystick); + +/** + * Get the USB product ID of an opened joystick, if available. + * + * If the product ID isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the USB product ID of the selected joystick, or 0 if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProduct(SDL_Joystick *joystick); + +/** + * Get the product version of an opened joystick, if available. + * + * If the product version isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the product version of the selected joystick, or 0 if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProductVersion(SDL_Joystick *joystick); + +/** + * Get the serial number of an opened joystick, if available. + * + * Returns the serial number of the joystick, or NULL if it is not available. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the serial number of the selected joystick, or NULL if + * unavailable. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC const char * SDLCALL SDL_JoystickGetSerial(SDL_Joystick *joystick); + +/** + * Get the type of an opened joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen() + * \returns the SDL_JoystickType of the selected joystick. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetType(SDL_Joystick *joystick); + +/** + * Get an ASCII string representation for a given SDL_JoystickGUID. + * + * You should supply at least 33 bytes for pszGUID. + * + * \param guid the SDL_JoystickGUID you wish to convert to string + * \param pszGUID buffer in which to write the ASCII string + * \param cbGUID the size of pszGUID + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetDeviceGUID + * \sa SDL_JoystickGetGUID + * \sa SDL_JoystickGetGUIDFromString + */ +extern DECLSPEC void SDLCALL SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID); + +/** + * Convert a GUID string into a SDL_JoystickGUID structure. + * + * Performs no error checking. If this function is given a string containing + * an invalid GUID, the function will silently succeed, but the GUID generated + * will not be useful. + * + * \param pchGUID string containing an ASCII representation of a GUID + * \returns a SDL_JoystickGUID structure. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetGUIDString + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUIDFromString(const char *pchGUID); + +/** + * Get the status of a specified joystick. + * + * \param joystick the joystick to query + * \returns SDL_TRUE if the joystick has been opened, SDL_FALSE if it has not; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickClose + * \sa SDL_JoystickOpen + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAttached(SDL_Joystick *joystick); + +/** + * Get the instance ID of an opened joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the instance ID of the specified joystick on success or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickOpen + */ +extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickInstanceID(SDL_Joystick *joystick); + +/** + * Get the number of general axis controls on a joystick. + * + * Often, the directional pad on a game controller will either look like 4 + * separate buttons or a POV hat, and not axes, but all of this is up to the + * device and platform. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the number of axis controls/number of axes on success or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetAxis + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick *joystick); + +/** + * Get the number of trackballs on a joystick. + * + * Joystick trackballs have only relative motion events associated with them + * and their state cannot be polled. + * + * Most joysticks do not have trackballs. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the number of trackballs on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetBall + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick *joystick); + +/** + * Get the number of POV hats on a joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the number of POV hats on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetHat + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick *joystick); + +/** + * Get the number of buttons on a joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \returns the number of buttons on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetButton + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick *joystick); + +/** + * Update the current state of the open joysticks. + * + * This is called automatically by the event loop if any joystick events are + * enabled. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickEventState + */ +extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); + +/** + * Enable/disable joystick event polling. + * + * If joystick events are disabled, you must call SDL_JoystickUpdate() + * yourself and manually check the state of the joystick when you want + * joystick information. + * + * It is recommended that you leave joystick event handling enabled. + * + * **WARNING**: Calling this function may delete all events currently in SDL's + * event queue. + * + * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE` + * \returns 1 if enabled, 0 if disabled, or a negative error code on failure; + * call SDL_GetError() for more information. + * + * If `state` is `SDL_QUERY` then the current state is returned, + * otherwise the new processing state is returned. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerEventState + */ +extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); + +#define SDL_JOYSTICK_AXIS_MAX 32767 +#define SDL_JOYSTICK_AXIS_MIN -32768 + +/** + * Get the current state of an axis control on a joystick. + * + * SDL makes no promises about what part of the joystick any given axis refers + * to. Your game should have some sort of configuration UI to let users + * specify what each axis should be bound to. Alternately, SDL's higher-level + * Game Controller API makes a great effort to apply order to this lower-level + * interface, so you know that a specific axis is the "left thumb stick," etc. + * + * The value returned by SDL_JoystickGetAxis() is a signed integer (-32768 to + * 32767) representing the current position of the axis. It may be necessary + * to impose certain tolerances on these values to account for jitter. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \param axis the axis to query; the axis indices start at index 0 + * \returns a 16-bit signed integer representing the current position of the + * axis or 0 on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumAxes + */ +extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick *joystick, + int axis); + +/** + * Get the initial state of an axis control on a joystick. + * + * The state is a value ranging from -32768 to 32767. + * + * The axis indices start at index 0. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \param axis the axis to query; the axis indices start at index 0 + * \param state Upon return, the initial value is supplied here. + * \return SDL_TRUE if this axis has any initial value, or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAxisInitialState(SDL_Joystick *joystick, + int axis, Sint16 *state); + +/** + * \name Hat positions + */ +/* @{ */ +#define SDL_HAT_CENTERED 0x00 +#define SDL_HAT_UP 0x01 +#define SDL_HAT_RIGHT 0x02 +#define SDL_HAT_DOWN 0x04 +#define SDL_HAT_LEFT 0x08 +#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP) +#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) +#define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) +#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) +/* @} */ + +/** + * Get the current state of a POV hat on a joystick. + * + * The returned value will be one of the following positions: + * + * - `SDL_HAT_CENTERED` + * - `SDL_HAT_UP` + * - `SDL_HAT_RIGHT` + * - `SDL_HAT_DOWN` + * - `SDL_HAT_LEFT` + * - `SDL_HAT_RIGHTUP` + * - `SDL_HAT_RIGHTDOWN` + * - `SDL_HAT_LEFTUP` + * - `SDL_HAT_LEFTDOWN` + * + * \param joystick an SDL_Joystick structure containing joystick information + * \param hat the hat index to get the state from; indices start at index 0 + * \returns the current hat position. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumHats + */ +extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick *joystick, + int hat); + +/** + * Get the ball axis change since the last poll. + * + * Trackballs can only return relative motion since the last call to + * SDL_JoystickGetBall(), these motion deltas are placed into `dx` and `dy`. + * + * Most joysticks do not have trackballs. + * + * \param joystick the SDL_Joystick to query + * \param ball the ball index to query; ball indices start at index 0 + * \param dx stores the difference in the x axis position since the last poll + * \param dy stores the difference in the y axis position since the last poll + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumBalls + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick *joystick, + int ball, int *dx, int *dy); + +/** + * Get the current state of a button on a joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information + * \param button the button index to get the state from; indices start at + * index 0 + * \returns 1 if the specified button is pressed, 0 otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumButtons + */ +extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick *joystick, + int button); + +/** + * Start a rumble effect. + * + * Each call to this function cancels any previous rumble effect, and calling + * it with 0 intensity stops any rumbling. + * + * \param joystick The joystick to vibrate + * \param low_frequency_rumble The intensity of the low frequency (left) + * rumble motor, from 0 to 0xFFFF + * \param high_frequency_rumble The intensity of the high frequency (right) + * rumble motor, from 0 to 0xFFFF + * \param duration_ms The duration of the rumble effect, in milliseconds + * \returns 0, or -1 if rumble isn't supported on this joystick + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_JoystickHasRumble + */ +extern DECLSPEC int SDLCALL SDL_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); + +/** + * Start a rumble effect in the joystick's triggers + * + * Each call to this function cancels any previous trigger rumble effect, and + * calling it with 0 intensity stops any rumbling. + * + * Note that this is rumbling of the _triggers_ and not the game controller as + * a whole. This is currently only supported on Xbox One controllers. If you + * want the (more common) whole-controller rumble, use SDL_JoystickRumble() + * instead. + * + * \param joystick The joystick to vibrate + * \param left_rumble The intensity of the left trigger rumble motor, from 0 + * to 0xFFFF + * \param right_rumble The intensity of the right trigger rumble motor, from 0 + * to 0xFFFF + * \param duration_ms The duration of the rumble effect, in milliseconds + * \returns 0, or -1 if trigger rumble isn't supported on this joystick + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_JoystickHasRumbleTriggers + */ +extern DECLSPEC int SDLCALL SDL_JoystickRumbleTriggers(SDL_Joystick *joystick, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms); + +/** + * Query whether a joystick has an LED. + * + * An example of a joystick LED is the light on the back of a PlayStation 4's + * DualShock 4 controller. + * + * \param joystick The joystick to query + * \return SDL_TRUE if the joystick has a modifiable LED, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasLED(SDL_Joystick *joystick); + +/** + * Query whether a joystick has rumble support. + * + * \param joystick The joystick to query + * \return SDL_TRUE if the joystick has rumble, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_JoystickRumble + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumble(SDL_Joystick *joystick); + +/** + * Query whether a joystick has rumble support on triggers. + * + * \param joystick The joystick to query + * \return SDL_TRUE if the joystick has trigger rumble, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_JoystickRumbleTriggers + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumbleTriggers(SDL_Joystick *joystick); + +/** + * Update a joystick's LED color. + * + * An example of a joystick LED is the light on the back of a PlayStation 4's + * DualShock 4 controller. + * + * \param joystick The joystick to update + * \param red The intensity of the red LED + * \param green The intensity of the green LED + * \param blue The intensity of the blue LED + * \returns 0 on success, -1 if this joystick does not have a modifiable LED + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetLED(SDL_Joystick *joystick, Uint8 red, Uint8 green, Uint8 blue); + +/** + * Send a joystick specific effect packet + * + * \param joystick The joystick to affect + * \param data The data to send to the joystick + * \param size The size of the data to send to the joystick + * \returns 0, or -1 if this joystick or driver doesn't support effect packets + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSendEffect(SDL_Joystick *joystick, const void *data, int size); + +/** + * Close a joystick previously opened with SDL_JoystickOpen(). + * + * \param joystick The joystick device to close + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickOpen + */ +extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick *joystick); + +/** + * Get the battery level of a joystick as SDL_JoystickPowerLevel. + * + * \param joystick the SDL_Joystick to query + * \returns the current battery level as SDL_JoystickPowerLevel on success or + * `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC SDL_JoystickPowerLevel SDLCALL SDL_JoystickCurrentPowerLevel(SDL_Joystick *joystick); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_joystick_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_keyboard.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_keyboard.h new file mode 100644 index 00000000000..48608cb6a79 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_keyboard.h @@ -0,0 +1,337 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_keyboard.h + * + * Include file for SDL keyboard event handling + */ + +#ifndef SDL_keyboard_h_ +#define SDL_keyboard_h_ + +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The SDL keysym structure, used in key events. + * + * \note If you are looking for translated character input, see the ::SDL_TEXTINPUT event. + */ +typedef struct SDL_Keysym +{ + SDL_Scancode scancode; /**< SDL physical key code - see ::SDL_Scancode for details */ + SDL_Keycode sym; /**< SDL virtual key code - see ::SDL_Keycode for details */ + Uint16 mod; /**< current key modifiers */ + Uint32 unused; +} SDL_Keysym; + +/* Function prototypes */ + +/** + * Query the window which currently has keyboard focus. + * + * \returns the window with keyboard focus. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void); + +/** + * Get a snapshot of the current state of the keyboard. + * + * The pointer returned is a pointer to an internal SDL array. It will be + * valid for the whole lifetime of the application and should not be freed by + * the caller. + * + * A array element with a value of 1 means that the key is pressed and a value + * of 0 means that it is not. Indexes into this array are obtained by using + * SDL_Scancode values. + * + * Use SDL_PumpEvents() to update the state array. + * + * This function gives you the current state after all events have been + * processed, so if a key or button has been pressed and released before you + * process events, then the pressed state will never show up in the + * SDL_GetKeyboardState() calls. + * + * Note: This function doesn't take into account whether shift has been + * pressed or not. + * + * \param numkeys if non-NULL, receives the length of the returned array + * \returns a pointer to an array of key states. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PumpEvents + */ +extern DECLSPEC const Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys); + +/** + * Get the current key modifier state for the keyboard. + * + * \returns an OR'd combination of the modifier keys for the keyboard. See + * SDL_Keymod for details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyboardState + * \sa SDL_SetModState + */ +extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void); + +/** + * Set the current key modifier state for the keyboard. + * + * The inverse of SDL_GetModState(), SDL_SetModState() allows you to impose + * modifier key states on your application. Simply pass your desired modifier + * states into `modstate`. This value may be a bitwise, OR'd combination of + * SDL_Keymod values. + * + * This does not change the keyboard state, only the key modifier flags that + * SDL reports. + * + * \param modstate the desired SDL_Keymod for the keyboard + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetModState + */ +extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate); + +/** + * Get the key code corresponding to the given scancode according to the + * current keyboard layout. + * + * See SDL_Keycode for details. + * + * \param scancode the desired SDL_Scancode to query + * \returns the SDL_Keycode that corresponds to the given SDL_Scancode. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyName + * \sa SDL_GetScancodeFromKey + */ +extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode); + +/** + * Get the scancode corresponding to the given key code according to the + * current keyboard layout. + * + * See SDL_Scancode for details. + * + * \param key the desired SDL_Keycode to query + * \returns the SDL_Scancode that corresponds to the given SDL_Keycode. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromScancode + * \sa SDL_GetScancodeName + */ +extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key); + +/** + * Get a human-readable name for a scancode. + * + * See SDL_Scancode for details. + * + * **Warning**: The returned name is by design not stable across platforms, + * e.g. the name for `SDL_SCANCODE_LGUI` is "Left GUI" under Linux but "Left + * Windows" under Microsoft Windows, and some scancodes like + * `SDL_SCANCODE_NONUSBACKSLASH` don't have any name at all. There are even + * scancodes that share names, e.g. `SDL_SCANCODE_RETURN` and + * `SDL_SCANCODE_RETURN2` (both called "Return"). This function is therefore + * unsuitable for creating a stable cross-platform two-way mapping between + * strings and scancodes. + * + * \param scancode the desired SDL_Scancode to query + * \returns a pointer to the name for the scancode. If the scancode doesn't + * have a name this function returns an empty string (""). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetScancodeFromKey + * \sa SDL_GetScancodeFromName + */ +extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode); + +/** + * Get a scancode from a human-readable name. + * + * \param name the human-readable scancode name + * \returns the SDL_Scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't + * recognized; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromName + * \sa SDL_GetScancodeFromKey + * \sa SDL_GetScancodeName + */ +extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name); + +/** + * Get a human-readable name for a key. + * + * See SDL_Scancode and SDL_Keycode for details. + * + * \param key the desired SDL_Keycode to query + * \returns a pointer to a UTF-8 string that stays valid at least until the + * next call to this function. If you need it around any longer, you + * must copy it. If the key doesn't have a name, this function + * returns an empty string (""). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromName + * \sa SDL_GetKeyFromScancode + * \sa SDL_GetScancodeFromKey + */ +extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key); + +/** + * Get a key code from a human-readable name. + * + * \param name the human-readable key name + * \returns key code, or `SDLK_UNKNOWN` if the name wasn't recognized; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromScancode + * \sa SDL_GetKeyName + * \sa SDL_GetScancodeFromName + */ +extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name); + +/** + * Start accepting Unicode text input events. + * + * This function will start accepting Unicode text input events in the focused + * SDL window, and start emitting SDL_TextInputEvent (SDL_TEXTINPUT) and + * SDL_TextEditingEvent (SDL_TEXTEDITING) events. Please use this function in + * pair with SDL_StopTextInput(). + * + * On some platforms using this function activates the screen keyboard. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetTextInputRect + * \sa SDL_StopTextInput + */ +extern DECLSPEC void SDLCALL SDL_StartTextInput(void); + +/** + * Check whether or not Unicode text input events are enabled. + * + * \returns SDL_TRUE if text input events are enabled else SDL_FALSE. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputActive(void); + +/** + * Stop receiving any text input events. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + */ +extern DECLSPEC void SDLCALL SDL_StopTextInput(void); + +/** + * Dismiss the composition window/IME without disabling the subsystem. + * + * \since This function is available since SDL 2.0.22. + * + * \sa SDL_StartTextInput + * \sa SDL_StopTextInput + */ +extern DECLSPEC void SDLCALL SDL_ClearComposition(void); + +/** + * Returns if an IME Composite or Candidate window is currently shown. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputShown(void); + +/** + * Set the rectangle used to type Unicode text inputs. + * + * Note: If you want use system native IME window, try to set hint + * **SDL_HINT_IME_SHOW_UI** to **1**, otherwise this function won't give you + * any feedback. + * + * \param rect the SDL_Rect structure representing the rectangle to receive + * text (ignored if NULL) + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + */ +extern DECLSPEC void SDLCALL SDL_SetTextInputRect(SDL_Rect *rect); + +/** + * Check whether the platform has screen keyboard support. + * + * \returns SDL_TRUE if the platform has some screen keyboard support or + * SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + * \sa SDL_IsScreenKeyboardShown + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void); + +/** + * Check whether the screen keyboard is shown for given window. + * + * \param window the window for which screen keyboard should be queried + * \returns SDL_TRUE if screen keyboard is shown or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasScreenKeyboardSupport + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenKeyboardShown(SDL_Window *window); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_keyboard_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_keycode.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_keycode.h new file mode 100644 index 00000000000..9cdf0ebfcb5 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_keycode.h @@ -0,0 +1,353 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_keycode.h + * + * Defines constants which identify keyboard keys and modifiers. + */ + +#ifndef SDL_keycode_h_ +#define SDL_keycode_h_ + +#include +#include + +/** + * \brief The SDL virtual key representation. + * + * Values of this type are used to represent keyboard keys using the current + * layout of the keyboard. These values include Unicode values representing + * the unmodified character that would be generated by pressing the key, or + * an SDLK_* constant for those keys that do not generate characters. + * + * A special exception is the number keys at the top of the keyboard which + * always map to SDLK_0...SDLK_9, regardless of layout. + */ +typedef Sint32 SDL_Keycode; + +#define SDLK_SCANCODE_MASK (1<<30) +#define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK) + +typedef enum +{ + SDLK_UNKNOWN = 0, + + SDLK_RETURN = '\r', + SDLK_ESCAPE = '\x1B', + SDLK_BACKSPACE = '\b', + SDLK_TAB = '\t', + SDLK_SPACE = ' ', + SDLK_EXCLAIM = '!', + SDLK_QUOTEDBL = '"', + SDLK_HASH = '#', + SDLK_PERCENT = '%', + SDLK_DOLLAR = '$', + SDLK_AMPERSAND = '&', + SDLK_QUOTE = '\'', + SDLK_LEFTPAREN = '(', + SDLK_RIGHTPAREN = ')', + SDLK_ASTERISK = '*', + SDLK_PLUS = '+', + SDLK_COMMA = ',', + SDLK_MINUS = '-', + SDLK_PERIOD = '.', + SDLK_SLASH = '/', + SDLK_0 = '0', + SDLK_1 = '1', + SDLK_2 = '2', + SDLK_3 = '3', + SDLK_4 = '4', + SDLK_5 = '5', + SDLK_6 = '6', + SDLK_7 = '7', + SDLK_8 = '8', + SDLK_9 = '9', + SDLK_COLON = ':', + SDLK_SEMICOLON = ';', + SDLK_LESS = '<', + SDLK_EQUALS = '=', + SDLK_GREATER = '>', + SDLK_QUESTION = '?', + SDLK_AT = '@', + + /* + Skip uppercase letters + */ + + SDLK_LEFTBRACKET = '[', + SDLK_BACKSLASH = '\\', + SDLK_RIGHTBRACKET = ']', + SDLK_CARET = '^', + SDLK_UNDERSCORE = '_', + SDLK_BACKQUOTE = '`', + SDLK_a = 'a', + SDLK_b = 'b', + SDLK_c = 'c', + SDLK_d = 'd', + SDLK_e = 'e', + SDLK_f = 'f', + SDLK_g = 'g', + SDLK_h = 'h', + SDLK_i = 'i', + SDLK_j = 'j', + SDLK_k = 'k', + SDLK_l = 'l', + SDLK_m = 'm', + SDLK_n = 'n', + SDLK_o = 'o', + SDLK_p = 'p', + SDLK_q = 'q', + SDLK_r = 'r', + SDLK_s = 's', + SDLK_t = 't', + SDLK_u = 'u', + SDLK_v = 'v', + SDLK_w = 'w', + SDLK_x = 'x', + SDLK_y = 'y', + SDLK_z = 'z', + + SDLK_CAPSLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK), + + SDLK_F1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1), + SDLK_F2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2), + SDLK_F3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F3), + SDLK_F4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F4), + SDLK_F5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F5), + SDLK_F6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F6), + SDLK_F7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F7), + SDLK_F8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F8), + SDLK_F9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F9), + SDLK_F10 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F10), + SDLK_F11 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F11), + SDLK_F12 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F12), + + SDLK_PRINTSCREEN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRINTSCREEN), + SDLK_SCROLLLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SCROLLLOCK), + SDLK_PAUSE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAUSE), + SDLK_INSERT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT), + SDLK_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME), + SDLK_PAGEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP), + SDLK_DELETE = '\x7F', + SDLK_END = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END), + SDLK_PAGEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN), + SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT), + SDLK_LEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LEFT), + SDLK_DOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DOWN), + SDLK_UP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UP), + + SDLK_NUMLOCKCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_NUMLOCKCLEAR), + SDLK_KP_DIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DIVIDE), + SDLK_KP_MULTIPLY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MULTIPLY), + SDLK_KP_MINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MINUS), + SDLK_KP_PLUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUS), + SDLK_KP_ENTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_ENTER), + SDLK_KP_1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_1), + SDLK_KP_2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_2), + SDLK_KP_3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_3), + SDLK_KP_4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_4), + SDLK_KP_5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_5), + SDLK_KP_6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_6), + SDLK_KP_7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_7), + SDLK_KP_8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_8), + SDLK_KP_9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_9), + SDLK_KP_0 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_0), + SDLK_KP_PERIOD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERIOD), + + SDLK_APPLICATION = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APPLICATION), + SDLK_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_POWER), + SDLK_KP_EQUALS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALS), + SDLK_F13 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F13), + SDLK_F14 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F14), + SDLK_F15 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F15), + SDLK_F16 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F16), + SDLK_F17 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F17), + SDLK_F18 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F18), + SDLK_F19 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F19), + SDLK_F20 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F20), + SDLK_F21 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F21), + SDLK_F22 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F22), + SDLK_F23 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F23), + SDLK_F24 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F24), + SDLK_EXECUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXECUTE), + SDLK_HELP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HELP), + SDLK_MENU = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MENU), + SDLK_SELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SELECT), + SDLK_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_STOP), + SDLK_AGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AGAIN), + SDLK_UNDO = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UNDO), + SDLK_CUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CUT), + SDLK_COPY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COPY), + SDLK_PASTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PASTE), + SDLK_FIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FIND), + SDLK_MUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MUTE), + SDLK_VOLUMEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEUP), + SDLK_VOLUMEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEDOWN), + SDLK_KP_COMMA = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COMMA), + SDLK_KP_EQUALSAS400 = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALSAS400), + + SDLK_ALTERASE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ALTERASE), + SDLK_SYSREQ = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SYSREQ), + SDLK_CANCEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CANCEL), + SDLK_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEAR), + SDLK_PRIOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRIOR), + SDLK_RETURN2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RETURN2), + SDLK_SEPARATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SEPARATOR), + SDLK_OUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OUT), + SDLK_OPER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OPER), + SDLK_CLEARAGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEARAGAIN), + SDLK_CRSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CRSEL), + SDLK_EXSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXSEL), + + SDLK_KP_00 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00), + SDLK_KP_000 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000), + SDLK_THOUSANDSSEPARATOR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR), + SDLK_DECIMALSEPARATOR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR), + SDLK_CURRENCYUNIT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT), + SDLK_CURRENCYSUBUNIT = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT), + SDLK_KP_LEFTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN), + SDLK_KP_RIGHTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN), + SDLK_KP_LEFTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE), + SDLK_KP_RIGHTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE), + SDLK_KP_TAB = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB), + SDLK_KP_BACKSPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE), + SDLK_KP_A = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A), + SDLK_KP_B = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B), + SDLK_KP_C = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C), + SDLK_KP_D = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D), + SDLK_KP_E = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E), + SDLK_KP_F = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F), + SDLK_KP_XOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR), + SDLK_KP_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER), + SDLK_KP_PERCENT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT), + SDLK_KP_LESS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS), + SDLK_KP_GREATER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER), + SDLK_KP_AMPERSAND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND), + SDLK_KP_DBLAMPERSAND = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND), + SDLK_KP_VERTICALBAR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR), + SDLK_KP_DBLVERTICALBAR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR), + SDLK_KP_COLON = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON), + SDLK_KP_HASH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH), + SDLK_KP_SPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE), + SDLK_KP_AT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT), + SDLK_KP_EXCLAM = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM), + SDLK_KP_MEMSTORE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE), + SDLK_KP_MEMRECALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL), + SDLK_KP_MEMCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR), + SDLK_KP_MEMADD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD), + SDLK_KP_MEMSUBTRACT = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT), + SDLK_KP_MEMMULTIPLY = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY), + SDLK_KP_MEMDIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE), + SDLK_KP_PLUSMINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS), + SDLK_KP_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR), + SDLK_KP_CLEARENTRY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY), + SDLK_KP_BINARY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY), + SDLK_KP_OCTAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL), + SDLK_KP_DECIMAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL), + SDLK_KP_HEXADECIMAL = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL), + + SDLK_LCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL), + SDLK_LSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT), + SDLK_LALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT), + SDLK_LGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI), + SDLK_RCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL), + SDLK_RSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT), + SDLK_RALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT), + SDLK_RGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI), + + SDLK_MODE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE), + + SDLK_AUDIONEXT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIONEXT), + SDLK_AUDIOPREV = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPREV), + SDLK_AUDIOSTOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOSTOP), + SDLK_AUDIOPLAY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPLAY), + SDLK_AUDIOMUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOMUTE), + SDLK_MEDIASELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIASELECT), + SDLK_WWW = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WWW), + SDLK_MAIL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MAIL), + SDLK_CALCULATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALCULATOR), + SDLK_COMPUTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COMPUTER), + SDLK_AC_SEARCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH), + SDLK_AC_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME), + SDLK_AC_BACK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK), + SDLK_AC_FORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD), + SDLK_AC_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP), + SDLK_AC_REFRESH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH), + SDLK_AC_BOOKMARKS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS), + + SDLK_BRIGHTNESSDOWN = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSDOWN), + SDLK_BRIGHTNESSUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSUP), + SDLK_DISPLAYSWITCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DISPLAYSWITCH), + SDLK_KBDILLUMTOGGLE = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMTOGGLE), + SDLK_KBDILLUMDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN), + SDLK_KBDILLUMUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP), + SDLK_EJECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT), + SDLK_SLEEP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP), + SDLK_APP1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP1), + SDLK_APP2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP2), + + SDLK_AUDIOREWIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOREWIND), + SDLK_AUDIOFASTFORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOFASTFORWARD) +} SDL_KeyCode; + +/** + * \brief Enumeration of valid key mods (possibly OR'd together). + */ +typedef enum +{ + KMOD_NONE = 0x0000, + KMOD_LSHIFT = 0x0001, + KMOD_RSHIFT = 0x0002, + KMOD_LCTRL = 0x0040, + KMOD_RCTRL = 0x0080, + KMOD_LALT = 0x0100, + KMOD_RALT = 0x0200, + KMOD_LGUI = 0x0400, + KMOD_RGUI = 0x0800, + KMOD_NUM = 0x1000, + KMOD_CAPS = 0x2000, + KMOD_MODE = 0x4000, + KMOD_SCROLL = 0x8000, + + KMOD_CTRL = KMOD_LCTRL | KMOD_RCTRL, + KMOD_SHIFT = KMOD_LSHIFT | KMOD_RSHIFT, + KMOD_ALT = KMOD_LALT | KMOD_RALT, + KMOD_GUI = KMOD_LGUI | KMOD_RGUI, + + KMOD_RESERVED = KMOD_SCROLL /* This is for source-level compatibility with SDL 2.0.0. */ +} SDL_Keymod; + +#endif /* SDL_keycode_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_loadso.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_loadso.h new file mode 100644 index 00000000000..f1fc9cfae38 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_loadso.h @@ -0,0 +1,115 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_loadso.h + * + * System dependent library loading routines + * + * Some things to keep in mind: + * \li These functions only work on C function names. Other languages may + * have name mangling and intrinsic language support that varies from + * compiler to compiler. + * \li Make sure you declare your function pointers with the same calling + * convention as the actual library function. Your code will crash + * mysteriously if you do not do this. + * \li Avoid namespace collisions. If you load a symbol from the library, + * it is not defined whether or not it goes into the global symbol + * namespace for the application. If it does and it conflicts with + * symbols in your code or other shared libraries, you will not get + * the results you expect. :) + */ + +#ifndef SDL_loadso_h_ +#define SDL_loadso_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Dynamically load a shared object. + * + * \param sofile a system-dependent name of the object file + * \returns an opaque pointer to the object handle or NULL if there was an + * error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadFunction + * \sa SDL_UnloadObject + */ +extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile); + +/** + * Look up the address of the named function in a shared object. + * + * This function pointer is no longer valid after calling SDL_UnloadObject(). + * + * This function can only look up C function names. Other languages may have + * name mangling and intrinsic language support that varies from compiler to + * compiler. + * + * Make sure you declare your function pointers with the same calling + * convention as the actual library function. Your code will crash + * mysteriously if you do not do this. + * + * If the requested function doesn't exist, NULL is returned. + * + * \param handle a valid shared object handle returned by SDL_LoadObject() + * \param name the name of the function to look up + * \returns a pointer to the function or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadObject + * \sa SDL_UnloadObject + */ +extern DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, + const char *name); + +/** + * Unload a shared object from memory. + * + * \param handle a valid shared object handle returned by SDL_LoadObject() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadFunction + * \sa SDL_LoadObject + */ +extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_loadso_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_locale.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_locale.h new file mode 100644 index 00000000000..7d7a6ab4188 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_locale.h @@ -0,0 +1,103 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_locale.h + * + * Include file for SDL locale services + */ + +#ifndef _SDL_locale_h +#define _SDL_locale_h + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +extern "C" { +/* *INDENT-ON* */ +#endif + + +typedef struct SDL_Locale +{ + const char *language; /**< A language name, like "en" for English. */ + const char *country; /**< A country, like "US" for America. Can be NULL. */ +} SDL_Locale; + +/** + * Report the user's preferred locale. + * + * This returns an array of SDL_Locale structs, the final item zeroed out. + * When the caller is done with this array, it should call SDL_free() on the + * returned value; all the memory involved is allocated in a single block, so + * a single SDL_free() will suffice. + * + * Returned language strings are in the format xx, where 'xx' is an ISO-639 + * language specifier (such as "en" for English, "de" for German, etc). + * Country strings are in the format YY, where "YY" is an ISO-3166 country + * code (such as "US" for the United States, "CA" for Canada, etc). Country + * might be NULL if there's no specific guidance on them (so you might get { + * "en", "US" } for American English, but { "en", NULL } means "English + * language, generically"). Language strings are never NULL, except to + * terminate the array. + * + * Please note that not all of these strings are 2 characters; some are three + * or more. + * + * The returned list of locales are in the order of the user's preference. For + * example, a German citizen that is fluent in US English and knows enough + * Japanese to navigate around Tokyo might have a list like: { "de", "en_US", + * "jp", NULL }. Someone from England might prefer British English (where + * "color" is spelled "colour", etc), but will settle for anything like it: { + * "en_GB", "en", NULL }. + * + * This function returns NULL on error, including when the platform does not + * supply this information at all. + * + * This might be a "slow" call that has to query the operating system. It's + * best to ask for this once and save the results. However, this list can + * change, usually because the user has changed a system preference outside of + * your program; SDL will send an SDL_LOCALECHANGED event in this case, if + * possible, and you can call this function again to get an updated copy of + * preferred locales. + * + * \return array of locales, terminated with a locale with a NULL language + * field. Will return NULL on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_Locale * SDLCALL SDL_GetPreferredLocales(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +} +/* *INDENT-ON* */ +#endif +#include + +#endif /* _SDL_locale_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_log.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_log.h new file mode 100644 index 00000000000..312a596f1b9 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_log.h @@ -0,0 +1,404 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_log.h + * + * Simple log messages with categories and priorities. + * + * By default logs are quiet, but if you're debugging SDL you might want: + * + * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); + * + * Here's where the messages go on different platforms: + * Windows: debug output stream + * Android: log output + * Others: standard error output (stderr) + */ + +#ifndef SDL_log_h_ +#define SDL_log_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * \brief The maximum size of a log message + * + * Messages longer than the maximum size will be truncated + */ +#define SDL_MAX_LOG_MESSAGE 4096 + +/** + * \brief The predefined log categories + * + * By default the application category is enabled at the INFO level, + * the assert category is enabled at the WARN level, test is enabled + * at the VERBOSE level and all other categories are enabled at the + * CRITICAL level. + */ +typedef enum +{ + SDL_LOG_CATEGORY_APPLICATION, + SDL_LOG_CATEGORY_ERROR, + SDL_LOG_CATEGORY_ASSERT, + SDL_LOG_CATEGORY_SYSTEM, + SDL_LOG_CATEGORY_AUDIO, + SDL_LOG_CATEGORY_VIDEO, + SDL_LOG_CATEGORY_RENDER, + SDL_LOG_CATEGORY_INPUT, + SDL_LOG_CATEGORY_TEST, + + /* Reserved for future SDL library use */ + SDL_LOG_CATEGORY_RESERVED1, + SDL_LOG_CATEGORY_RESERVED2, + SDL_LOG_CATEGORY_RESERVED3, + SDL_LOG_CATEGORY_RESERVED4, + SDL_LOG_CATEGORY_RESERVED5, + SDL_LOG_CATEGORY_RESERVED6, + SDL_LOG_CATEGORY_RESERVED7, + SDL_LOG_CATEGORY_RESERVED8, + SDL_LOG_CATEGORY_RESERVED9, + SDL_LOG_CATEGORY_RESERVED10, + + /* Beyond this point is reserved for application use, e.g. + enum { + MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM, + MYAPP_CATEGORY_AWESOME2, + MYAPP_CATEGORY_AWESOME3, + ... + }; + */ + SDL_LOG_CATEGORY_CUSTOM +} SDL_LogCategory; + +/** + * \brief The predefined log priorities + */ +typedef enum +{ + SDL_LOG_PRIORITY_VERBOSE = 1, + SDL_LOG_PRIORITY_DEBUG, + SDL_LOG_PRIORITY_INFO, + SDL_LOG_PRIORITY_WARN, + SDL_LOG_PRIORITY_ERROR, + SDL_LOG_PRIORITY_CRITICAL, + SDL_NUM_LOG_PRIORITIES +} SDL_LogPriority; + + +/** + * Set the priority of all log categories. + * + * \param priority the SDL_LogPriority to assign + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetPriority + */ +extern DECLSPEC void SDLCALL SDL_LogSetAllPriority(SDL_LogPriority priority); + +/** + * Set the priority of a particular log category. + * + * \param category the category to assign a priority to + * \param priority the SDL_LogPriority to assign + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogGetPriority + * \sa SDL_LogSetAllPriority + */ +extern DECLSPEC void SDLCALL SDL_LogSetPriority(int category, + SDL_LogPriority priority); + +/** + * Get the priority of a particular log category. + * + * \param category the category to query + * \returns the SDL_LogPriority for the requested category + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetPriority + */ +extern DECLSPEC SDL_LogPriority SDLCALL SDL_LogGetPriority(int category); + +/** + * Reset all priorities to default. + * + * This is called by SDL_Quit(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetAllPriority + * \sa SDL_LogSetPriority + */ +extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void); + +/** + * Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO. + * + * = * \param fmt a printf() style message format string + * + * \param ... additional parameters matching % tokens in the `fmt` string, if + * any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); + +/** + * Log a message with SDL_LOG_PRIORITY_VERBOSE. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_DEBUG. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_INFO. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_WARN. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + */ +extern DECLSPEC void SDLCALL SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_ERROR. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_CRITICAL. + * + * \param category the category of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with the specified category and priority. + * + * \param category the category of the message + * \param priority the priority of the message + * \param fmt a printf() style message format string + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogMessage(int category, + SDL_LogPriority priority, + SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3); + +/** + * Log a message with the specified category and priority. + * + * \param category the category of the message + * \param priority the priority of the message + * \param fmt a printf() style message format string + * \param ap a variable argument list + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogMessageV(int category, + SDL_LogPriority priority, + const char *fmt, va_list ap); + +/** + * The prototype for the log output callback function. + * + * This function is called by SDL when there is new text to be logged. + * + * \param userdata what was passed as `userdata` to SDL_LogSetOutputFunction() + * \param category the category of the message + * \param priority the priority of the message + * \param message the message being output + */ +typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message); + +/** + * Get the current log output function. + * + * \param callback an SDL_LogOutputFunction filled in with the current log + * callback + * \param userdata a pointer filled in with the pointer that is passed to + * `callback` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetOutputFunction + */ +extern DECLSPEC void SDLCALL SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata); + +/** + * Replace the default log output function with one of your own. + * + * \param callback an SDL_LogOutputFunction to call instead of the default + * \param userdata a pointer that is passed to `callback` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogGetOutputFunction + */ +extern DECLSPEC void SDLCALL SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_log_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_main.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_main.h new file mode 100644 index 00000000000..233bb176e0c --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_main.h @@ -0,0 +1,235 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_main_h_ +#define SDL_main_h_ + +#include + +/** + * \file SDL_main.h + * + * Redefine main() on some platforms so that it is called by SDL. + */ + +#ifndef SDL_MAIN_HANDLED +#if defined(__WIN32__) +/* On Windows SDL provides WinMain(), which parses the command line and passes + the arguments to your main function. + + If you provide your own WinMain(), you may define SDL_MAIN_HANDLED + */ +#define SDL_MAIN_AVAILABLE + +#elif defined(__WINRT__) +/* On WinRT, SDL provides a main function that initializes CoreApplication, + creating an instance of IFrameworkView in the process. + + Please note that #include'ing SDL_main.h is not enough to get a main() + function working. In non-XAML apps, the file, + src/main/winrt/SDL_WinRT_main_NonXAML.cpp, or a copy of it, must be compiled + into the app itself. In XAML apps, the function, SDL_WinRTRunApp must be + called, with a pointer to the Direct3D-hosted XAML control passed in. +*/ +#define SDL_MAIN_NEEDED + +#elif defined(__IPHONEOS__) +/* On iOS SDL provides a main function that creates an application delegate + and starts the iOS application run loop. + + If you link with SDL dynamically on iOS, the main function can't be in a + shared library, so you need to link with libSDLmain.a, which includes a + stub main function that calls into the shared library to start execution. + + See src/video/uikit/SDL_uikitappdelegate.m for more details. + */ +#define SDL_MAIN_NEEDED + +#elif defined(__ANDROID__) +/* On Android SDL provides a Java class in SDLActivity.java that is the + main activity entry point. + + See docs/README-android.md for more details on extending that class. + */ +#define SDL_MAIN_NEEDED + +/* We need to export SDL_main so it can be launched from Java */ +#define SDLMAIN_DECLSPEC DECLSPEC + +#elif defined(__NACL__) +/* On NACL we use ppapi_simple to set up the application helper code, + then wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before + starting the user main function. + All user code is run in a separate thread by ppapi_simple, thus + allowing for blocking io to take place via nacl_io +*/ +#define SDL_MAIN_NEEDED + +#elif defined(__PSP__) +/* On PSP SDL provides a main function that sets the module info, + activates the GPU and starts the thread required to be able to exit + the software. + + If you provide this yourself, you may define SDL_MAIN_HANDLED + */ +#define SDL_MAIN_AVAILABLE + +#endif +#endif /* SDL_MAIN_HANDLED */ + +#ifndef SDLMAIN_DECLSPEC +#define SDLMAIN_DECLSPEC +#endif + +/** + * \file SDL_main.h + * + * The application's main() function must be called with C linkage, + * and should be declared like this: + * \code + * #ifdef __cplusplus + * extern "C" + * #endif + * int main(int argc, char *argv[]) + * { + * } + * \endcode + */ + +#if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) +#define main SDL_main +#endif + +#include +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The prototype for the application's main() function + */ +typedef int (*SDL_main_func)(int argc, char *argv[]); +extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]); + + +/** + * Circumvent failure of SDL_Init() when not using SDL_main() as an entry + * point. + * + * This function is defined in SDL_main.h, along with the preprocessor rule to + * redefine main() as SDL_main(). Thus to ensure that your main() function + * will not be changed it is necessary to define SDL_MAIN_HANDLED before + * including SDL.h. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + */ +extern DECLSPEC void SDLCALL SDL_SetMainReady(void); + +#ifdef __WIN32__ + +/** + * Register a win32 window class for SDL's use. + * + * This can be called to set the application window class at startup. It is + * safe to call this multiple times, as long as every call is eventually + * paired with a call to SDL_UnregisterApp, but a second registration attempt + * while a previous registration is still active will be ignored, other than + * to increment a counter. + * + * Most applications do not need to, and should not, call this directly; SDL + * will call it when initializing the video subsystem. + * + * \param name the window class name, in UTF-8 encoding. If NULL, SDL + * currently uses "SDL_app" but this isn't guaranteed. + * \param style the value to use in WNDCLASSEX::style. If `name` is NULL, SDL + * currently uses `(CS_BYTEALIGNCLIENT | CS_OWNDC)` regardless of + * what is specified here. + * \param hInst the HINSTANCE to use in WNDCLASSEX::hInstance. If zero, SDL + * will use `GetModuleHandle(NULL)` instead. + * \returns 0 on success, -1 on error. SDL_GetError() may have details. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC int SDLCALL SDL_RegisterApp(const char *name, Uint32 style, void *hInst); + +/** + * Deregister the win32 window class from an SDL_RegisterApp call. + * + * This can be called to undo the effects of SDL_RegisterApp. + * + * Most applications do not need to, and should not, call this directly; SDL + * will call it when deinitializing the video subsystem. + * + * It is safe to call this multiple times, as long as every call is eventually + * paired with a prior call to SDL_RegisterApp. The window class will only be + * deregistered when the registration counter in SDL_RegisterApp decrements to + * zero through calls to this function. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); + +#endif /* __WIN32__ */ + + +#ifdef __WINRT__ + +/** + * Initialize and launch an SDL/WinRT application. + * + * \param mainFunction the SDL app's C-style main(), an SDL_main_func + * \param reserved reserved for future use; should be NULL + * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve + * more information on the failure. + * + * \since This function is available since SDL 2.0.3. + */ +extern DECLSPEC int SDLCALL SDL_WinRTRunApp(SDL_main_func mainFunction, void * reserved); + +#endif /* __WINRT__ */ + +#if defined(__IPHONEOS__) + +/** + * Initializes and launches an SDL application. + * + * \param argc The argc parameter from the application's main() function + * \param argv The argv parameter from the application's main() function + * \param mainFunction The SDL app's C-style main(), an SDL_main_func + * \return the return value from mainFunction + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_UIKitRunApp(int argc, char *argv[], SDL_main_func mainFunction); + +#endif /* __IPHONEOS__ */ + + +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_main_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_messagebox.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_messagebox.h new file mode 100644 index 00000000000..149c35cfefe --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_messagebox.h @@ -0,0 +1,193 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_messagebox_h_ +#define SDL_messagebox_h_ + +#include +#include /* For SDL_Window */ + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * SDL_MessageBox flags. If supported will display warning icon, etc. + */ +typedef enum +{ + SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */ + SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */ + SDL_MESSAGEBOX_INFORMATION = 0x00000040, /**< informational dialog */ + SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT = 0x00000080, /**< buttons placed left to right */ + SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT = 0x00000100 /**< buttons placed right to left */ +} SDL_MessageBoxFlags; + +/** + * Flags for SDL_MessageBoxButtonData. + */ +typedef enum +{ + SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001, /**< Marks the default button when return is hit */ + SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002 /**< Marks the default button when escape is hit */ +} SDL_MessageBoxButtonFlags; + +/** + * Individual button data. + */ +typedef struct +{ + Uint32 flags; /**< ::SDL_MessageBoxButtonFlags */ + int buttonid; /**< User defined button id (value returned via SDL_ShowMessageBox) */ + const char * text; /**< The UTF-8 button text */ +} SDL_MessageBoxButtonData; + +/** + * RGB value used in a message box color scheme + */ +typedef struct +{ + Uint8 r, g, b; +} SDL_MessageBoxColor; + +typedef enum +{ + SDL_MESSAGEBOX_COLOR_BACKGROUND, + SDL_MESSAGEBOX_COLOR_TEXT, + SDL_MESSAGEBOX_COLOR_BUTTON_BORDER, + SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND, + SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED, + SDL_MESSAGEBOX_COLOR_MAX +} SDL_MessageBoxColorType; + +/** + * A set of colors to use for message box dialogs + */ +typedef struct +{ + SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX]; +} SDL_MessageBoxColorScheme; + +/** + * MessageBox structure containing title, text, window, etc. + */ +typedef struct +{ + Uint32 flags; /**< ::SDL_MessageBoxFlags */ + SDL_Window *window; /**< Parent window, can be NULL */ + const char *title; /**< UTF-8 title */ + const char *message; /**< UTF-8 message text */ + + int numbuttons; + const SDL_MessageBoxButtonData *buttons; + + const SDL_MessageBoxColorScheme *colorScheme; /**< ::SDL_MessageBoxColorScheme, can be NULL to use system settings */ +} SDL_MessageBoxData; + +/** + * Create a modal message box. + * + * If your needs aren't complex, it might be easier to use + * SDL_ShowSimpleMessageBox. + * + * This function should be called on the thread that created the parent + * window, or on the main thread if the messagebox has no parent. It will + * block execution of that thread until the user clicks a button or closes the + * messagebox. + * + * This function may be called at any time, even before SDL_Init(). This makes + * it useful for reporting errors like a failure to create a renderer or + * OpenGL context. + * + * On X11, SDL rolls its own dialog box with X11 primitives instead of a + * formal toolkit like GTK+ or Qt. + * + * Note that if SDL_Init() would fail because there isn't any available video + * target, this function is likely to fail for the same reasons. If this is a + * concern, check the return value from this function and fall back to writing + * to stderr if you can. + * + * \param messageboxdata the SDL_MessageBoxData structure with title, text and + * other options + * \param buttonid the pointer to which user id of hit button should be copied + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ShowSimpleMessageBox + */ +extern DECLSPEC int SDLCALL SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); + +/** + * Display a simple modal message box. + * + * If your needs aren't complex, this function is preferred over + * SDL_ShowMessageBox. + * + * `flags` may be any of the following: + * + * - `SDL_MESSAGEBOX_ERROR`: error dialog + * - `SDL_MESSAGEBOX_WARNING`: warning dialog + * - `SDL_MESSAGEBOX_INFORMATION`: informational dialog + * + * This function should be called on the thread that created the parent + * window, or on the main thread if the messagebox has no parent. It will + * block execution of that thread until the user clicks a button or closes the + * messagebox. + * + * This function may be called at any time, even before SDL_Init(). This makes + * it useful for reporting errors like a failure to create a renderer or + * OpenGL context. + * + * On X11, SDL rolls its own dialog box with X11 primitives instead of a + * formal toolkit like GTK+ or Qt. + * + * Note that if SDL_Init() would fail because there isn't any available video + * target, this function is likely to fail for the same reasons. If this is a + * concern, check the return value from this function and fall back to writing + * to stderr if you can. + * + * \param flags an SDL_MessageBoxFlags value + * \param title UTF-8 title text + * \param message UTF-8 message text + * \param window the parent window, or NULL for no parent + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ShowMessageBox + */ +extern DECLSPEC int SDLCALL SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_messagebox_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_metal.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_metal.h new file mode 100644 index 00000000000..bd3091bdfeb --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_metal.h @@ -0,0 +1,113 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_metal.h + * + * Header file for functions to creating Metal layers and views on SDL windows. + */ + +#ifndef SDL_metal_h_ +#define SDL_metal_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS). + * + * \note This can be cast directly to an NSView or UIView. + */ +typedef void *SDL_MetalView; + +/** + * \name Metal support functions + */ +/* @{ */ + +/** + * Create a CAMetalLayer-backed NSView/UIView and attach it to the specified + * window. + * + * On macOS, this does *not* associate a MTLDevice with the CAMetalLayer on + * its own. It is up to user code to do that. + * + * The returned handle can be casted directly to a NSView or UIView. To access + * the backing CAMetalLayer, call SDL_Metal_GetLayer(). + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_Metal_DestroyView + * \sa SDL_Metal_GetLayer + */ +extern DECLSPEC SDL_MetalView SDLCALL SDL_Metal_CreateView(SDL_Window * window); + +/** + * Destroy an existing SDL_MetalView object. + * + * This should be called before SDL_DestroyWindow, if SDL_Metal_CreateView was + * called after SDL_CreateWindow. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_Metal_CreateView + */ +extern DECLSPEC void SDLCALL SDL_Metal_DestroyView(SDL_MetalView view); + +/** + * Get a pointer to the backing CAMetalLayer for the given view. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_MetalCreateView + */ +extern DECLSPEC void *SDLCALL SDL_Metal_GetLayer(SDL_MetalView view); + +/** + * Get the size of a window's underlying drawable in pixels (for use with + * setting viewport, scissor & etc). + * + * \param window SDL_Window from which the drawable size should be queried + * \param w Pointer to variable for storing the width in pixels, may be NULL + * \param h Pointer to variable for storing the height in pixels, may be NULL + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_GetWindowSize + * \sa SDL_CreateWindow + */ +extern DECLSPEC void SDLCALL SDL_Metal_GetDrawableSize(SDL_Window* window, int *w, + int *h); + +/* @} *//* Metal support functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_metal_h_ */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_misc.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_misc.h new file mode 100644 index 00000000000..8983ec05ad9 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_misc.h @@ -0,0 +1,79 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_misc.h + * + * \brief Include file for SDL API functions that don't fit elsewhere. + */ + +#ifndef SDL_misc_h_ +#define SDL_misc_h_ + +#include + +#include + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Open a URL/URI in the browser or other appropriate external application. + * + * Open a URL in a separate, system-provided application. How this works will + * vary wildly depending on the platform. This will likely launch what makes + * sense to handle a specific URL's protocol (a web browser for `http://`, + * etc), but it might also be able to launch file managers for directories and + * other things. + * + * What happens when you open a URL varies wildly as well: your game window + * may lose focus (and may or may not lose focus if your game was fullscreen + * or grabbing input at the time). On mobile devices, your app will likely + * move to the background or your process might be paused. Any given platform + * may or may not handle a given URL. + * + * If this is unimplemented (or simply unavailable) for a platform, this will + * fail with an error. A successful result does not mean the URL loaded, just + * that we launched _something_ to handle it (or at least believe we did). + * + * All this to say: this function can be useful, but you should definitely + * test it on every platform you target. + * + * \param url A valid URL/URI to open. Use `file:///full/path/to/file` for + * local files, if supported. + * \returns 0 on success, or -1 on error; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_OpenURL(const char *url); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_misc_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_mouse.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_mouse.h new file mode 100644 index 00000000000..0e359fec8a0 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_mouse.h @@ -0,0 +1,454 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_mouse.h + * + * Include file for SDL mouse event handling. + */ + +#ifndef SDL_mouse_h_ +#define SDL_mouse_h_ + +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct SDL_Cursor SDL_Cursor; /**< Implementation dependent */ + +/** + * \brief Cursor types for SDL_CreateSystemCursor(). + */ +typedef enum +{ + SDL_SYSTEM_CURSOR_ARROW, /**< Arrow */ + SDL_SYSTEM_CURSOR_IBEAM, /**< I-beam */ + SDL_SYSTEM_CURSOR_WAIT, /**< Wait */ + SDL_SYSTEM_CURSOR_CROSSHAIR, /**< Crosshair */ + SDL_SYSTEM_CURSOR_WAITARROW, /**< Small wait cursor (or Wait if not available) */ + SDL_SYSTEM_CURSOR_SIZENWSE, /**< Double arrow pointing northwest and southeast */ + SDL_SYSTEM_CURSOR_SIZENESW, /**< Double arrow pointing northeast and southwest */ + SDL_SYSTEM_CURSOR_SIZEWE, /**< Double arrow pointing west and east */ + SDL_SYSTEM_CURSOR_SIZENS, /**< Double arrow pointing north and south */ + SDL_SYSTEM_CURSOR_SIZEALL, /**< Four pointed arrow pointing north, south, east, and west */ + SDL_SYSTEM_CURSOR_NO, /**< Slashed circle or crossbones */ + SDL_SYSTEM_CURSOR_HAND, /**< Hand */ + SDL_NUM_SYSTEM_CURSORS +} SDL_SystemCursor; + +/** + * \brief Scroll direction types for the Scroll event + */ +typedef enum +{ + SDL_MOUSEWHEEL_NORMAL, /**< The scroll direction is normal */ + SDL_MOUSEWHEEL_FLIPPED /**< The scroll direction is flipped / natural */ +} SDL_MouseWheelDirection; + +/* Function prototypes */ + +/** + * Get the window which currently has mouse focus. + * + * \returns the window with mouse focus. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void); + +/** + * Retrieve the current state of the mouse. + * + * The current button state is returned as a button bitmask, which can be + * tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the + * left, 2 for middle, 3 for the right button), and `x` and `y` are set to the + * mouse cursor position relative to the focus window. You can pass NULL for + * either `x` or `y`. + * + * \param x the x coordinate of the mouse cursor position relative to the + * focus window + * \param y the y coordinate of the mouse cursor position relative to the + * focus window + * \returns a 32-bit button bitmask of the current button state. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetGlobalMouseState + * \sa SDL_GetRelativeMouseState + * \sa SDL_PumpEvents + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetMouseState(int *x, int *y); + +/** + * Get the current state of the mouse in relation to the desktop. + * + * This works similarly to SDL_GetMouseState(), but the coordinates will be + * reported relative to the top-left of the desktop. This can be useful if you + * need to track the mouse outside of a specific window and SDL_CaptureMouse() + * doesn't fit your needs. For example, it could be useful if you need to + * track the mouse while dragging a window, where coordinates relative to a + * window might not be in sync at all times. + * + * Note: SDL_GetMouseState() returns the mouse position as SDL understands it + * from the last pump of the event queue. This function, however, queries the + * OS for the current mouse position, and as such, might be a slightly less + * efficient function. Unless you know what you're doing and have a good + * reason to use this function, you probably want SDL_GetMouseState() instead. + * + * \param x filled in with the current X coord relative to the desktop; can be + * NULL + * \param y filled in with the current Y coord relative to the desktop; can be + * NULL + * \returns the current button state as a bitmask which can be tested using + * the SDL_BUTTON(X) macros. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_CaptureMouse + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetGlobalMouseState(int *x, int *y); + +/** + * Retrieve the relative state of the mouse. + * + * The current button state is returned as a button bitmask, which can be + * tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the + * left, 2 for middle, 3 for the right button), and `x` and `y` are set to the + * mouse deltas since the last call to SDL_GetRelativeMouseState() or since + * event initialization. You can pass NULL for either `x` or `y`. + * + * \param x a pointer filled with the last recorded x coordinate of the mouse + * \param y a pointer filled with the last recorded y coordinate of the mouse + * \returns a 32-bit button bitmask of the relative button state. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetMouseState + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); + +/** + * Move the mouse cursor to the given position within the window. + * + * This function generates a mouse motion event. + * + * Note that this function will appear to succeed, but not actually move the + * mouse when used over Microsoft Remote Desktop. + * + * \param window the window to move the mouse into, or NULL for the current + * mouse focus + * \param x the x coordinate within the window + * \param y the y coordinate within the window + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WarpMouseGlobal + */ +extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, + int x, int y); + +/** + * Move the mouse to the given position in global screen space. + * + * This function generates a mouse motion event. + * + * A failure of this function usually means that it is unsupported by a + * platform. + * + * Note that this function will appear to succeed, but not actually move the + * mouse when used over Microsoft Remote Desktop. + * + * \param x the x coordinate + * \param y the y coordinate + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_WarpMouseInWindow + */ +extern DECLSPEC int SDLCALL SDL_WarpMouseGlobal(int x, int y); + +/** + * Set relative mouse mode. + * + * While the mouse is in relative mode, the cursor is hidden, and the driver + * will try to report continuous motion in the current window. Only relative + * motion events will be delivered, the mouse position will not change. + * + * Note that this function will not be able to provide continuous relative + * motion when used over Microsoft Remote Desktop, instead motion is limited + * to the bounds of the screen. + * + * This function will flush any pending mouse motion. + * + * \param enabled SDL_TRUE to enable relative mode, SDL_FALSE to disable. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * If relative mode is not supported, this returns -1. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRelativeMouseMode + */ +extern DECLSPEC int SDLCALL SDL_SetRelativeMouseMode(SDL_bool enabled); + +/** + * Capture the mouse and to track input outside an SDL window. + * + * Capturing enables your app to obtain mouse events globally, instead of just + * within your window. Not all video targets support this function. When + * capturing is enabled, the current window will get all mouse events, but + * unlike relative mode, no change is made to the cursor and it is not + * restrained to your window. + * + * This function may also deny mouse input to other windows--both those in + * your application and others on the system--so you should use this function + * sparingly, and in small bursts. For example, you might want to track the + * mouse while the user is dragging something, until the user releases a mouse + * button. It is not recommended that you capture the mouse for long periods + * of time, such as the entire time your app is running. For that, you should + * probably use SDL_SetRelativeMouseMode() or SDL_SetWindowGrab(), depending + * on your goals. + * + * While captured, mouse events still report coordinates relative to the + * current (foreground) window, but those coordinates may be outside the + * bounds of the window (including negative values). Capturing is only allowed + * for the foreground window. If the window loses focus while capturing, the + * capture will be disabled automatically. + * + * While capturing is enabled, the current window will have the + * `SDL_WINDOW_MOUSE_CAPTURE` flag set. + * + * \param enabled SDL_TRUE to enable capturing, SDL_FALSE to disable. + * \returns 0 on success or -1 if not supported; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetGlobalMouseState + */ +extern DECLSPEC int SDLCALL SDL_CaptureMouse(SDL_bool enabled); + +/** + * Query whether relative mouse mode is enabled. + * + * \returns SDL_TRUE if relative mode is enabled or SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRelativeMouseMode + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetRelativeMouseMode(void); + +/** + * Create a cursor using the specified bitmap data and mask (in MSB format). + * + * `mask` has to be in MSB (Most Significant Bit) format. + * + * The cursor width (`w`) must be a multiple of 8 bits. + * + * The cursor is created in black and white according to the following: + * + * - data=0, mask=1: white + * - data=1, mask=1: black + * - data=0, mask=0: transparent + * - data=1, mask=0: inverted color if possible, black if not. + * + * Cursors created with this function must be freed with SDL_FreeCursor(). + * + * If you want to have a color cursor, or create your cursor from an + * SDL_Surface, you should use SDL_CreateColorCursor(). Alternately, you can + * hide the cursor and draw your own as part of your game's rendering, but it + * will be bound to the framerate. + * + * Also, since SDL 2.0.0, SDL_CreateSystemCursor() is available, which + * provides twelve readily available system cursors to pick from. + * + * \param data the color value for each pixel of the cursor + * \param mask the mask value for each pixel of the cursor + * \param w the width of the cursor + * \param h the height of the cursor + * \param hot_x the X-axis location of the upper left corner of the cursor + * relative to the actual mouse position + * \param hot_y the Y-axis location of the upper left corner of the cursor + * relative to the actual mouse position + * \returns a new cursor with the specified parameters on success or NULL on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeCursor + * \sa SDL_SetCursor + * \sa SDL_ShowCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateCursor(const Uint8 * data, + const Uint8 * mask, + int w, int h, int hot_x, + int hot_y); + +/** + * Create a color cursor. + * + * \param surface an SDL_Surface structure representing the cursor image + * \param hot_x the x position of the cursor hot spot + * \param hot_y the y position of the cursor hot spot + * \returns the new cursor on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateCursor + * \sa SDL_FreeCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateColorCursor(SDL_Surface *surface, + int hot_x, + int hot_y); + +/** + * Create a system cursor. + * + * \param id an SDL_SystemCursor enum value + * \returns a cursor on success or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateSystemCursor(SDL_SystemCursor id); + +/** + * Set the active cursor. + * + * This function sets the currently active cursor to the specified one. If the + * cursor is currently visible, the change will be immediately represented on + * the display. SDL_SetCursor(NULL) can be used to force cursor redraw, if + * this is desired for any reason. + * + * \param cursor a cursor to make active + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateCursor + * \sa SDL_GetCursor + * \sa SDL_ShowCursor + */ +extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor * cursor); + +/** + * Get the active cursor. + * + * This function returns a pointer to the current cursor which is owned by the + * library. It is not necessary to free the cursor with SDL_FreeCursor(). + * + * \returns the active cursor or NULL if there is no mouse. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetCursor(void); + +/** + * Get the default cursor. + * + * \returns the default cursor on success or NULL on failure. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSystemCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetDefaultCursor(void); + +/** + * Free a previously-created cursor. + * + * Use this function to free cursor resources created with SDL_CreateCursor(), + * SDL_CreateColorCursor() or SDL_CreateSystemCursor(). + * + * \param cursor the cursor to free + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateColorCursor + * \sa SDL_CreateCursor + * \sa SDL_CreateSystemCursor + */ +extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor * cursor); + +/** + * Toggle whether or not the cursor is shown. + * + * The cursor starts off displayed but can be turned off. Passing `SDL_ENABLE` + * displays the cursor and passing `SDL_DISABLE` hides it. + * + * The current state of the mouse cursor can be queried by passing + * `SDL_QUERY`; either `SDL_DISABLE` or `SDL_ENABLE` will be returned. + * + * \param toggle `SDL_ENABLE` to show the cursor, `SDL_DISABLE` to hide it, + * `SDL_QUERY` to query the current state without changing it. + * \returns `SDL_ENABLE` if the cursor is shown, or `SDL_DISABLE` if the + * cursor is hidden, or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateCursor + * \sa SDL_SetCursor + */ +extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); + +/** + * Used as a mask when testing buttons in buttonstate. + * + * - Button 1: Left mouse button + * - Button 2: Middle mouse button + * - Button 3: Right mouse button + */ +#define SDL_BUTTON(X) (1 << ((X)-1)) +#define SDL_BUTTON_LEFT 1 +#define SDL_BUTTON_MIDDLE 2 +#define SDL_BUTTON_RIGHT 3 +#define SDL_BUTTON_X1 4 +#define SDL_BUTTON_X2 5 +#define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) +#define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) +#define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) +#define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) +#define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_mouse_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_mutex.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_mutex.h new file mode 100644 index 00000000000..10038f1b70c --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_mutex.h @@ -0,0 +1,471 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_mutex_h_ +#define SDL_mutex_h_ + +/** + * \file SDL_mutex.h + * + * Functions to provide thread synchronization primitives. + */ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Synchronization functions which can time out return this value + * if they time out. + */ +#define SDL_MUTEX_TIMEDOUT 1 + +/** + * This is the timeout value which corresponds to never time out. + */ +#define SDL_MUTEX_MAXWAIT (~(Uint32)0) + + +/** + * \name Mutex functions + */ +/* @{ */ + +/* The SDL mutex structure, defined in SDL_sysmutex.c */ +struct SDL_mutex; +typedef struct SDL_mutex SDL_mutex; + +/** + * Create a new mutex. + * + * All newly-created mutexes begin in the _unlocked_ state. + * + * Calls to SDL_LockMutex() will not return while the mutex is locked by + * another thread. See SDL_TryLockMutex() to attempt to lock without blocking. + * + * SDL mutexes are reentrant. + * + * \returns the initialized and unlocked mutex or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroyMutex + * \sa SDL_LockMutex + * \sa SDL_TryLockMutex + * \sa SDL_UnlockMutex + */ +extern DECLSPEC SDL_mutex *SDLCALL SDL_CreateMutex(void); + +/** + * Lock the mutex. + * + * This will block until the mutex is available, which is to say it is in the + * unlocked state and the OS has chosen the caller as the next thread to lock + * it. Of all threads waiting to lock the mutex, only one may do so at a time. + * + * It is legal for the owning thread to lock an already-locked mutex. It must + * unlock it the same number of times before it is actually made available for + * other threads in the system (this is known as a "recursive mutex"). + * + * \param mutex the mutex to lock + * \return 0, or -1 on error. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_LockMutex(SDL_mutex * mutex); +#define SDL_mutexP(m) SDL_LockMutex(m) + +/** + * Try to lock a mutex without blocking. + * + * This works just like SDL_LockMutex(), but if the mutex is not available, + * this function returns `SDL_MUTEX_TIMEOUT` immediately. + * + * This technique is useful if you need exclusive access to a resource but + * don't want to wait for it, and will return to it to try again later. + * + * \param mutex the mutex to try to lock + * \returns 0, `SDL_MUTEX_TIMEDOUT`, or -1 on error; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateMutex + * \sa SDL_DestroyMutex + * \sa SDL_LockMutex + * \sa SDL_UnlockMutex + */ +extern DECLSPEC int SDLCALL SDL_TryLockMutex(SDL_mutex * mutex); + +/** + * Unlock the mutex. + * + * It is legal for the owning thread to lock an already-locked mutex. It must + * unlock it the same number of times before it is actually made available for + * other threads in the system (this is known as a "recursive mutex"). + * + * It is an error to unlock a mutex that has not been locked by the current + * thread, and doing so results in undefined behavior. + * + * It is also an error to unlock a mutex that isn't locked at all. + * + * \param mutex the mutex to unlock. + * \returns 0, or -1 on error. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_UnlockMutex(SDL_mutex * mutex); +#define SDL_mutexV(m) SDL_UnlockMutex(m) + +/** + * Destroy a mutex created with SDL_CreateMutex(). + * + * This function must be called on any mutex that is no longer needed. Failure + * to destroy a mutex will result in a system memory or resource leak. While + * it is safe to destroy a mutex that is _unlocked_, it is not safe to attempt + * to destroy a locked mutex, and may result in undefined behavior depending + * on the platform. + * + * \param mutex the mutex to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateMutex + * \sa SDL_LockMutex + * \sa SDL_TryLockMutex + * \sa SDL_UnlockMutex + */ +extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex * mutex); + +/* @} *//* Mutex functions */ + + +/** + * \name Semaphore functions + */ +/* @{ */ + +/* The SDL semaphore structure, defined in SDL_syssem.c */ +struct SDL_semaphore; +typedef struct SDL_semaphore SDL_sem; + +/** + * Create a semaphore. + * + * This function creates a new semaphore and initializes it with the value + * `initial_value`. Each wait operation on the semaphore will atomically + * decrement the semaphore value and potentially block if the semaphore value + * is 0. Each post operation will atomically increment the semaphore value and + * wake waiting threads and allow them to retry the wait operation. + * + * \param initial_value the starting value of the semaphore + * \returns a new semaphore or NULL on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC SDL_sem *SDLCALL SDL_CreateSemaphore(Uint32 initial_value); + +/** + * Destroy a semaphore. + * + * It is not safe to destroy a semaphore if there are threads currently + * waiting on it. + * + * \param sem the semaphore to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem * sem); + +/** + * Wait until a semaphore has a positive value and then decrements it. + * + * This function suspends the calling thread until either the semaphore + * pointed to by `sem` has a positive value or the call is interrupted by a + * signal or error. If the call is successful it will atomically decrement the + * semaphore value. + * + * This function is the equivalent of calling SDL_SemWaitTimeout() with a time + * length of `SDL_MUTEX_MAXWAIT`. + * + * \param sem the semaphore wait on + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem * sem); + +/** + * See if a semaphore has a positive value and decrement it if it does. + * + * This function checks to see if the semaphore pointed to by `sem` has a + * positive value and atomically decrements the semaphore value if it does. If + * the semaphore doesn't have a positive value, the function immediately + * returns SDL_MUTEX_TIMEDOUT. + * + * \param sem the semaphore to wait on + * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait would + * block, or a negative error code on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem * sem); + +/** + * Wait until a semaphore has a positive value and then decrements it. + * + * This function suspends the calling thread until either the semaphore + * pointed to by `sem` has a positive value, the call is interrupted by a + * signal or error, or the specified time has elapsed. If the call is + * successful it will atomically decrement the semaphore value. + * + * \param sem the semaphore to wait on + * \param ms the length of the timeout, in milliseconds + * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait does not + * succeed in the allotted time, or a negative error code on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + */ +extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem * sem, Uint32 ms); + +/** + * Atomically increment a semaphore's value and wake waiting threads. + * + * \param sem the semaphore to increment + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem * sem); + +/** + * Get the current value of a semaphore. + * + * \param sem the semaphore to query + * \returns the current value of the semaphore. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + */ +extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem * sem); + +/* @} *//* Semaphore functions */ + + +/** + * \name Condition variable functions + */ +/* @{ */ + +/* The SDL condition variable structure, defined in SDL_syscond.c */ +struct SDL_cond; +typedef struct SDL_cond SDL_cond; + +/** + * Create a condition variable. + * + * \returns a new condition variable or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_DestroyCond + */ +extern DECLSPEC SDL_cond *SDLCALL SDL_CreateCond(void); + +/** + * Destroy a condition variable. + * + * \param cond the condition variable to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + */ +extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond * cond); + +/** + * Restart one of the threads that are waiting on the condition variable. + * + * \param cond the condition variable to signal + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond * cond); + +/** + * Restart all threads that are waiting on the condition variable. + * + * \param cond the condition variable to signal + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond * cond); + +/** + * Wait until a condition variable is signaled. + * + * This function unlocks the specified `mutex` and waits for another thread to + * call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable + * `cond`. Once the condition variable is signaled, the mutex is re-locked and + * the function returns. + * + * The mutex must be locked before calling this function. + * + * This function is the equivalent of calling SDL_CondWaitTimeout() with a + * time length of `SDL_MUTEX_MAXWAIT`. + * + * \param cond the condition variable to wait on + * \param mutex the mutex used to coordinate thread access + * \returns 0 when it is signaled or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex); + +/** + * Wait until a condition variable is signaled or a certain time has passed. + * + * This function unlocks the specified `mutex` and waits for another thread to + * call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable + * `cond`, or for the specified time to elapse. Once the condition variable is + * signaled or the time elapsed, the mutex is re-locked and the function + * returns. + * + * The mutex must be locked before calling this function. + * + * \param cond the condition variable to wait on + * \param mutex the mutex used to coordinate thread access + * \param ms the maximum time to wait, in milliseconds, or `SDL_MUTEX_MAXWAIT` + * to wait indefinitely + * \returns 0 if the condition variable is signaled, `SDL_MUTEX_TIMEDOUT` if + * the condition is not signaled in the allotted time, or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond * cond, + SDL_mutex * mutex, Uint32 ms); + +/* @} *//* Condition variable functions */ + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_mutex_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_name.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_name.h new file mode 100644 index 00000000000..6ff35b46efe --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_name.h @@ -0,0 +1,33 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDLname_h_ +#define SDLname_h_ + +#if defined(__STDC__) || defined(__cplusplus) +#define NeedFunctionPrototypes 1 +#endif + +#define SDL_NAME(X) SDL_##X + +#endif /* SDLname_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengl.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengl.h new file mode 100644 index 00000000000..e9bcde82761 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengl.h @@ -0,0 +1,2183 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_opengl.h + * + * This is a simple file to encapsulate the OpenGL API headers. + */ + +/** + * \def NO_SDL_GLEXT + * + * Define this if you have your own version of glext.h and want to disable the + * version included in SDL_opengl.h. + */ + +#ifndef SDL_opengl_h_ +#define SDL_opengl_h_ + +#include + +#ifndef __IPHONEOS__ /* No OpenGL on iOS. */ + +/* + * Mesa 3-D graphics library + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * Copyright (C) 2009 VMware, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef __gl_h_ +#define __gl_h_ + +#if defined(USE_MGL_NAMESPACE) +#include +#endif + + +/********************************************************************** + * Begin system-specific stuff. + */ + +#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) +#define __WIN32__ +#endif + +#if defined(__WIN32__) && !defined(__CYGWIN__) +# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ +# define GLAPI __declspec(dllexport) +# elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ +# define GLAPI __declspec(dllimport) +# else /* for use with static link lib build of Win32 edition only */ +# define GLAPI extern +# endif /* _STATIC_MESA support */ +# if defined(__MINGW32__) && defined(GL_NO_STDCALL) || defined(UNDER_CE) /* The generated DLLs by MingW with STDCALL are not compatible with the ones done by Microsoft's compilers */ +# define GLAPIENTRY +# else +# define GLAPIENTRY __stdcall +# endif +#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ +# define GLAPI extern +# define GLAPIENTRY __stdcall +#elif defined(__OS2__) || defined(__EMX__) /* native os/2 opengl */ +# define GLAPI extern +# define GLAPIENTRY _System +# define APIENTRY _System +# if defined(__GNUC__) && !defined(_System) +# define _System +# endif +#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) +# define GLAPI __attribute__((visibility("default"))) +# define GLAPIENTRY +#endif /* WIN32 && !CYGWIN */ + +/* + * WINDOWS: Include windows.h here to define APIENTRY. + * It is also useful when applications include this file by + * including only glut.h, since glut.h depends on windows.h. + * Applications needing to include windows.h with parms other + * than "WIN32_LEAN_AND_MEAN" may include windows.h before + * glut.h or gl.h. + */ +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX +#endif +#include +#endif + +#ifndef GLAPI +#define GLAPI extern +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY +#endif + +#ifndef APIENTRY +#define APIENTRY GLAPIENTRY +#endif + +/* "P" suffix to be used for a pointer to a function */ +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif + +#ifndef GLAPIENTRYP +#define GLAPIENTRYP GLAPIENTRY * +#endif + +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export on +#endif + +/* + * End system-specific stuff. + **********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + + + +#define GL_VERSION_1_1 1 +#define GL_VERSION_1_2 1 +#define GL_VERSION_1_3 1 +#define GL_ARB_imaging 1 + + +/* + * Datatypes + */ +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef signed char GLbyte; /* 1-byte signed */ +typedef short GLshort; /* 2-byte signed */ +typedef int GLint; /* 4-byte signed */ +typedef unsigned char GLubyte; /* 1-byte unsigned */ +typedef unsigned short GLushort; /* 2-byte unsigned */ +typedef unsigned int GLuint; /* 4-byte unsigned */ +typedef int GLsizei; /* 4-byte signed */ +typedef float GLfloat; /* single precision float */ +typedef float GLclampf; /* single precision float in [0,1] */ +typedef double GLdouble; /* double precision float */ +typedef double GLclampd; /* double precision float in [0,1] */ + + + +/* + * Constants + */ + +/* Boolean values */ +#define GL_FALSE 0 +#define GL_TRUE 1 + +/* Data types */ +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_2_BYTES 0x1407 +#define GL_3_BYTES 0x1408 +#define GL_4_BYTES 0x1409 +#define GL_DOUBLE 0x140A + +/* Primitives */ +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_QUADS 0x0007 +#define GL_QUAD_STRIP 0x0008 +#define GL_POLYGON 0x0009 + +/* Vertex Arrays */ +#define GL_VERTEX_ARRAY 0x8074 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_COLOR_ARRAY 0x8076 +#define GL_INDEX_ARRAY 0x8077 +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_EDGE_FLAG_ARRAY 0x8079 +#define GL_VERTEX_ARRAY_SIZE 0x807A +#define GL_VERTEX_ARRAY_TYPE 0x807B +#define GL_VERTEX_ARRAY_STRIDE 0x807C +#define GL_NORMAL_ARRAY_TYPE 0x807E +#define GL_NORMAL_ARRAY_STRIDE 0x807F +#define GL_COLOR_ARRAY_SIZE 0x8081 +#define GL_COLOR_ARRAY_TYPE 0x8082 +#define GL_COLOR_ARRAY_STRIDE 0x8083 +#define GL_INDEX_ARRAY_TYPE 0x8085 +#define GL_INDEX_ARRAY_STRIDE 0x8086 +#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A +#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C +#define GL_VERTEX_ARRAY_POINTER 0x808E +#define GL_NORMAL_ARRAY_POINTER 0x808F +#define GL_COLOR_ARRAY_POINTER 0x8090 +#define GL_INDEX_ARRAY_POINTER 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 +#define GL_V2F 0x2A20 +#define GL_V3F 0x2A21 +#define GL_C4UB_V2F 0x2A22 +#define GL_C4UB_V3F 0x2A23 +#define GL_C3F_V3F 0x2A24 +#define GL_N3F_V3F 0x2A25 +#define GL_C4F_N3F_V3F 0x2A26 +#define GL_T2F_V3F 0x2A27 +#define GL_T4F_V4F 0x2A28 +#define GL_T2F_C4UB_V3F 0x2A29 +#define GL_T2F_C3F_V3F 0x2A2A +#define GL_T2F_N3F_V3F 0x2A2B +#define GL_T2F_C4F_N3F_V3F 0x2A2C +#define GL_T4F_C4F_N3F_V4F 0x2A2D + +/* Matrix Mode */ +#define GL_MATRIX_MODE 0x0BA0 +#define GL_MODELVIEW 0x1700 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 + +/* Points */ +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_POINT_SIZE_RANGE 0x0B12 + +/* Lines */ +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_WIDTH_RANGE 0x0B22 + +/* Polygons */ +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_EDGE_FLAG 0x0B43 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_FILL 0x8037 + +/* Display Lists */ +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_INDEX 0x0B33 +#define GL_LIST_MODE 0x0B30 + +/* Depth buffer */ +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_BITS 0x0D56 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_COMPONENT 0x1902 + +/* Lighting */ +#define GL_LIGHTING 0x0B50 +#define GL_LIGHT0 0x4000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_QUADRATIC_ATTENUATION 0x1209 +#define GL_AMBIENT 0x1200 +#define GL_DIFFUSE 0x1201 +#define GL_SPECULAR 0x1202 +#define GL_SHININESS 0x1601 +#define GL_EMISSION 0x1600 +#define GL_POSITION 0x1203 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_COLOR_INDEXES 0x1603 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_SHADE_MODEL 0x0B54 +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_NORMALIZE 0x0BA1 + +/* User clipping planes */ +#define GL_CLIP_PLANE0 0x3000 +#define GL_CLIP_PLANE1 0x3001 +#define GL_CLIP_PLANE2 0x3002 +#define GL_CLIP_PLANE3 0x3003 +#define GL_CLIP_PLANE4 0x3004 +#define GL_CLIP_PLANE5 0x3005 + +/* Accumulation buffer */ +#define GL_ACCUM_RED_BITS 0x0D58 +#define GL_ACCUM_GREEN_BITS 0x0D59 +#define GL_ACCUM_BLUE_BITS 0x0D5A +#define GL_ACCUM_ALPHA_BITS 0x0D5B +#define GL_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_ACCUM 0x0100 +#define GL_ADD 0x0104 +#define GL_LOAD 0x0101 +#define GL_MULT 0x0103 +#define GL_RETURN 0x0102 + +/* Alpha testing */ +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_ALPHA_TEST_FUNC 0x0BC1 + +/* Blending */ +#define GL_BLEND 0x0BE2 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND_DST 0x0BE0 +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 + +/* Render Mode */ +#define GL_FEEDBACK 0x1C01 +#define GL_RENDER 0x1C00 +#define GL_SELECT 0x1C02 + +/* Feedback */ +#define GL_2D 0x0600 +#define GL_3D 0x0601 +#define GL_3D_COLOR 0x0602 +#define GL_3D_COLOR_TEXTURE 0x0603 +#define GL_4D_COLOR_TEXTURE 0x0604 +#define GL_POINT_TOKEN 0x0701 +#define GL_LINE_TOKEN 0x0702 +#define GL_LINE_RESET_TOKEN 0x0707 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 + +/* Selection */ +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 + +/* Fog */ +#define GL_FOG 0x0B60 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_COLOR 0x0B66 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_START 0x0B63 +#define GL_FOG_END 0x0B64 +#define GL_LINEAR 0x2601 +#define GL_EXP 0x0800 +#define GL_EXP2 0x0801 + +/* Logic Ops */ +#define GL_LOGIC_OP 0x0BF1 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_CLEAR 0x1500 +#define GL_SET 0x150F +#define GL_COPY 0x1503 +#define GL_COPY_INVERTED 0x150C +#define GL_NOOP 0x1505 +#define GL_INVERT 0x150A +#define GL_AND 0x1501 +#define GL_NAND 0x150E +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_XOR 0x1506 +#define GL_EQUIV 0x1509 +#define GL_AND_REVERSE 0x1502 +#define GL_AND_INVERTED 0x1504 +#define GL_OR_REVERSE 0x150B +#define GL_OR_INVERTED 0x150D + +/* Stencil */ +#define GL_STENCIL_BITS 0x0D57 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STENCIL_INDEX 0x1901 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 + +/* Buffers, Pixel Drawing/Reading */ +#define GL_NONE 0 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +/*GL_FRONT 0x0404 */ +/*GL_BACK 0x0405 */ +/*GL_FRONT_AND_BACK 0x0408 */ +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_COLOR_INDEX 0x1900 +#define GL_RED 0x1903 +#define GL_GREEN 0x1904 +#define GL_BLUE 0x1905 +#define GL_ALPHA 0x1906 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_ALPHA_BITS 0x0D55 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_INDEX_BITS 0x0D51 +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_AUX_BUFFERS 0x0C00 +#define GL_READ_BUFFER 0x0C02 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_BITMAP 0x1A00 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 +#define GL_DITHER 0x0BD0 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 + +/* Implementation limits */ +#define GL_MAX_LIST_NESTING 0x0B31 +#define GL_MAX_EVAL_ORDER 0x0D30 +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_CLIP_PLANES 0x0D32 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B + +/* Gets */ +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_MODE 0x0C30 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_RENDER_MODE 0x0C40 +#define GL_RGBA_MODE 0x0C31 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_VIEWPORT 0x0BA2 + +/* Evaluators */ +#define GL_AUTO_NORMAL 0x0D80 +#define GL_MAP1_COLOR_4 0x0D90 +#define GL_MAP1_INDEX 0x0D91 +#define GL_MAP1_NORMAL 0x0D92 +#define GL_MAP1_TEXTURE_COORD_1 0x0D93 +#define GL_MAP1_TEXTURE_COORD_2 0x0D94 +#define GL_MAP1_TEXTURE_COORD_3 0x0D95 +#define GL_MAP1_TEXTURE_COORD_4 0x0D96 +#define GL_MAP1_VERTEX_3 0x0D97 +#define GL_MAP1_VERTEX_4 0x0D98 +#define GL_MAP2_COLOR_4 0x0DB0 +#define GL_MAP2_INDEX 0x0DB1 +#define GL_MAP2_NORMAL 0x0DB2 +#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 +#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 +#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 +#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 +#define GL_MAP2_VERTEX_3 0x0DB7 +#define GL_MAP2_VERTEX_4 0x0DB8 +#define GL_MAP1_GRID_DOMAIN 0x0DD0 +#define GL_MAP1_GRID_SEGMENTS 0x0DD1 +#define GL_MAP2_GRID_DOMAIN 0x0DD2 +#define GL_MAP2_GRID_SEGMENTS 0x0DD3 +#define GL_COEFF 0x0A00 +#define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 + +/* Hints */ +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_FOG_HINT 0x0C54 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +/* Scissor box */ +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 + +/* Pixel Mode / Transfer */ +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_STENCIL 0x0D11 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_RED_SCALE 0x0D14 +#define GL_RED_BIAS 0x0D15 +#define GL_GREEN_SCALE 0x0D18 +#define GL_GREEN_BIAS 0x0D19 +#define GL_BLUE_SCALE 0x0D1A +#define GL_BLUE_BIAS 0x0D1B +#define GL_ALPHA_SCALE 0x0D1C +#define GL_ALPHA_BIAS 0x0D1D +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_BIAS 0x0D1F +#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 +#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 +#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 +#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 +#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 +#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 +#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 +#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 +#define GL_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#define GL_PIXEL_MAP_I_TO_R 0x0C72 +#define GL_PIXEL_MAP_I_TO_G 0x0C73 +#define GL_PIXEL_MAP_I_TO_B 0x0C74 +#define GL_PIXEL_MAP_I_TO_A 0x0C75 +#define GL_PIXEL_MAP_R_TO_R 0x0C76 +#define GL_PIXEL_MAP_G_TO_G 0x0C77 +#define GL_PIXEL_MAP_B_TO_B 0x0C78 +#define GL_PIXEL_MAP_A_TO_A 0x0C79 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 + +/* Texture mapping */ +#define GL_TEXTURE_ENV 0x2300 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_ENV_COLOR 0x2201 +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GEN_R 0x0C62 +#define GL_TEXTURE_GEN_Q 0x0C63 +#define GL_TEXTURE_GEN_MODE 0x2500 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_TEXTURE_COMPONENTS 0x1003 +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_OBJECT_PLANE 0x2501 +#define GL_EYE_LINEAR 0x2400 +#define GL_EYE_PLANE 0x2502 +#define GL_SPHERE_MAP 0x2402 +#define GL_DECAL 0x2101 +#define GL_MODULATE 0x2100 +#define GL_NEAREST 0x2600 +#define GL_REPEAT 0x2901 +#define GL_CLAMP 0x2900 +#define GL_S 0x2000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#define GL_Q 0x2003 + +/* Utility */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* Errors */ +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_OUT_OF_MEMORY 0x0505 + +/* glPush/PopAttrib bits */ +#define GL_CURRENT_BIT 0x00000001 +#define GL_POINT_BIT 0x00000002 +#define GL_LINE_BIT 0x00000004 +#define GL_POLYGON_BIT 0x00000008 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_FOG_BIT 0x00000080 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_ENABLE_BIT 0x00002000 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_HINT_BIT 0x00008000 +#define GL_EVAL_BIT 0x00010000 +#define GL_LIST_BIT 0x00020000 +#define GL_TEXTURE_BIT 0x00040000 +#define GL_SCISSOR_BIT 0x00080000 +#define GL_ALL_ATTRIB_BITS 0x000FFFFF + + +/* OpenGL 1.1 */ +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_ALPHA4 0x803B +#define GL_ALPHA8 0x803C +#define GL_ALPHA12 0x803D +#define GL_ALPHA16 0x803E +#define GL_LUMINANCE4 0x803F +#define GL_LUMINANCE8 0x8040 +#define GL_LUMINANCE12 0x8041 +#define GL_LUMINANCE16 0x8042 +#define GL_LUMINANCE4_ALPHA4 0x8043 +#define GL_LUMINANCE6_ALPHA2 0x8044 +#define GL_LUMINANCE8_ALPHA8 0x8045 +#define GL_LUMINANCE12_ALPHA4 0x8046 +#define GL_LUMINANCE12_ALPHA12 0x8047 +#define GL_LUMINANCE16_ALPHA16 0x8048 +#define GL_INTENSITY 0x8049 +#define GL_INTENSITY4 0x804A +#define GL_INTENSITY8 0x804B +#define GL_INTENSITY12 0x804C +#define GL_INTENSITY16 0x804D +#define GL_R3_G3_B2 0x2A10 +#define GL_RGB4 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB10 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGBA2 0x8055 +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGBA8 0x8058 +#define GL_RGB10_A2 0x8059 +#define GL_RGBA12 0x805A +#define GL_RGBA16 0x805B +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF +#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF + + + +/* + * Miscellaneous + */ + +GLAPI void GLAPIENTRY glClearIndex( GLfloat c ); + +GLAPI void GLAPIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); + +GLAPI void GLAPIENTRY glClear( GLbitfield mask ); + +GLAPI void GLAPIENTRY glIndexMask( GLuint mask ); + +GLAPI void GLAPIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); + +GLAPI void GLAPIENTRY glAlphaFunc( GLenum func, GLclampf ref ); + +GLAPI void GLAPIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); + +GLAPI void GLAPIENTRY glLogicOp( GLenum opcode ); + +GLAPI void GLAPIENTRY glCullFace( GLenum mode ); + +GLAPI void GLAPIENTRY glFrontFace( GLenum mode ); + +GLAPI void GLAPIENTRY glPointSize( GLfloat size ); + +GLAPI void GLAPIENTRY glLineWidth( GLfloat width ); + +GLAPI void GLAPIENTRY glLineStipple( GLint factor, GLushort pattern ); + +GLAPI void GLAPIENTRY glPolygonMode( GLenum face, GLenum mode ); + +GLAPI void GLAPIENTRY glPolygonOffset( GLfloat factor, GLfloat units ); + +GLAPI void GLAPIENTRY glPolygonStipple( const GLubyte *mask ); + +GLAPI void GLAPIENTRY glGetPolygonStipple( GLubyte *mask ); + +GLAPI void GLAPIENTRY glEdgeFlag( GLboolean flag ); + +GLAPI void GLAPIENTRY glEdgeFlagv( const GLboolean *flag ); + +GLAPI void GLAPIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); + +GLAPI void GLAPIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); + +GLAPI void GLAPIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); + +GLAPI void GLAPIENTRY glDrawBuffer( GLenum mode ); + +GLAPI void GLAPIENTRY glReadBuffer( GLenum mode ); + +GLAPI void GLAPIENTRY glEnable( GLenum cap ); + +GLAPI void GLAPIENTRY glDisable( GLenum cap ); + +GLAPI GLboolean GLAPIENTRY glIsEnabled( GLenum cap ); + + +GLAPI void GLAPIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ + +GLAPI void GLAPIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ + + +GLAPI void GLAPIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); + +GLAPI void GLAPIENTRY glGetDoublev( GLenum pname, GLdouble *params ); + +GLAPI void GLAPIENTRY glGetFloatv( GLenum pname, GLfloat *params ); + +GLAPI void GLAPIENTRY glGetIntegerv( GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glPushAttrib( GLbitfield mask ); + +GLAPI void GLAPIENTRY glPopAttrib( void ); + + +GLAPI void GLAPIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ + +GLAPI void GLAPIENTRY glPopClientAttrib( void ); /* 1.1 */ + + +GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode ); + +GLAPI GLenum GLAPIENTRY glGetError( void ); + +GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name ); + +GLAPI void GLAPIENTRY glFinish( void ); + +GLAPI void GLAPIENTRY glFlush( void ); + +GLAPI void GLAPIENTRY glHint( GLenum target, GLenum mode ); + + +/* + * Depth Buffer + */ + +GLAPI void GLAPIENTRY glClearDepth( GLclampd depth ); + +GLAPI void GLAPIENTRY glDepthFunc( GLenum func ); + +GLAPI void GLAPIENTRY glDepthMask( GLboolean flag ); + +GLAPI void GLAPIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); + + +/* + * Accumulation Buffer + */ + +GLAPI void GLAPIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); + +GLAPI void GLAPIENTRY glAccum( GLenum op, GLfloat value ); + + +/* + * Transformation + */ + +GLAPI void GLAPIENTRY glMatrixMode( GLenum mode ); + +GLAPI void GLAPIENTRY glOrtho( GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, + GLdouble near_val, GLdouble far_val ); + +GLAPI void GLAPIENTRY glFrustum( GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, + GLdouble near_val, GLdouble far_val ); + +GLAPI void GLAPIENTRY glViewport( GLint x, GLint y, + GLsizei width, GLsizei height ); + +GLAPI void GLAPIENTRY glPushMatrix( void ); + +GLAPI void GLAPIENTRY glPopMatrix( void ); + +GLAPI void GLAPIENTRY glLoadIdentity( void ); + +GLAPI void GLAPIENTRY glLoadMatrixd( const GLdouble *m ); +GLAPI void GLAPIENTRY glLoadMatrixf( const GLfloat *m ); + +GLAPI void GLAPIENTRY glMultMatrixd( const GLdouble *m ); +GLAPI void GLAPIENTRY glMultMatrixf( const GLfloat *m ); + +GLAPI void GLAPIENTRY glRotated( GLdouble angle, + GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glRotatef( GLfloat angle, + GLfloat x, GLfloat y, GLfloat z ); + +GLAPI void GLAPIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z ); + +GLAPI void GLAPIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); + + +/* + * Display Lists + */ + +GLAPI GLboolean GLAPIENTRY glIsList( GLuint list ); + +GLAPI void GLAPIENTRY glDeleteLists( GLuint list, GLsizei range ); + +GLAPI GLuint GLAPIENTRY glGenLists( GLsizei range ); + +GLAPI void GLAPIENTRY glNewList( GLuint list, GLenum mode ); + +GLAPI void GLAPIENTRY glEndList( void ); + +GLAPI void GLAPIENTRY glCallList( GLuint list ); + +GLAPI void GLAPIENTRY glCallLists( GLsizei n, GLenum type, + const GLvoid *lists ); + +GLAPI void GLAPIENTRY glListBase( GLuint base ); + + +/* + * Drawing Functions + */ + +GLAPI void GLAPIENTRY glBegin( GLenum mode ); + +GLAPI void GLAPIENTRY glEnd( void ); + + +GLAPI void GLAPIENTRY glVertex2d( GLdouble x, GLdouble y ); +GLAPI void GLAPIENTRY glVertex2f( GLfloat x, GLfloat y ); +GLAPI void GLAPIENTRY glVertex2i( GLint x, GLint y ); +GLAPI void GLAPIENTRY glVertex2s( GLshort x, GLshort y ); + +GLAPI void GLAPIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); +GLAPI void GLAPIENTRY glVertex3i( GLint x, GLint y, GLint z ); +GLAPI void GLAPIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); + +GLAPI void GLAPIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +GLAPI void GLAPIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +GLAPI void GLAPIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); +GLAPI void GLAPIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); + +GLAPI void GLAPIENTRY glVertex2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex2iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glVertex3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex3iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glVertex4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex4iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); +GLAPI void GLAPIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); +GLAPI void GLAPIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); +GLAPI void GLAPIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); +GLAPI void GLAPIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); + +GLAPI void GLAPIENTRY glNormal3bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glNormal3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glNormal3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glNormal3iv( const GLint *v ); +GLAPI void GLAPIENTRY glNormal3sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glIndexd( GLdouble c ); +GLAPI void GLAPIENTRY glIndexf( GLfloat c ); +GLAPI void GLAPIENTRY glIndexi( GLint c ); +GLAPI void GLAPIENTRY glIndexs( GLshort c ); +GLAPI void GLAPIENTRY glIndexub( GLubyte c ); /* 1.1 */ + +GLAPI void GLAPIENTRY glIndexdv( const GLdouble *c ); +GLAPI void GLAPIENTRY glIndexfv( const GLfloat *c ); +GLAPI void GLAPIENTRY glIndexiv( const GLint *c ); +GLAPI void GLAPIENTRY glIndexsv( const GLshort *c ); +GLAPI void GLAPIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ + +GLAPI void GLAPIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); +GLAPI void GLAPIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); +GLAPI void GLAPIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); +GLAPI void GLAPIENTRY glColor3i( GLint red, GLint green, GLint blue ); +GLAPI void GLAPIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); +GLAPI void GLAPIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); +GLAPI void GLAPIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); +GLAPI void GLAPIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); + +GLAPI void GLAPIENTRY glColor4b( GLbyte red, GLbyte green, + GLbyte blue, GLbyte alpha ); +GLAPI void GLAPIENTRY glColor4d( GLdouble red, GLdouble green, + GLdouble blue, GLdouble alpha ); +GLAPI void GLAPIENTRY glColor4f( GLfloat red, GLfloat green, + GLfloat blue, GLfloat alpha ); +GLAPI void GLAPIENTRY glColor4i( GLint red, GLint green, + GLint blue, GLint alpha ); +GLAPI void GLAPIENTRY glColor4s( GLshort red, GLshort green, + GLshort blue, GLshort alpha ); +GLAPI void GLAPIENTRY glColor4ub( GLubyte red, GLubyte green, + GLubyte blue, GLubyte alpha ); +GLAPI void GLAPIENTRY glColor4ui( GLuint red, GLuint green, + GLuint blue, GLuint alpha ); +GLAPI void GLAPIENTRY glColor4us( GLushort red, GLushort green, + GLushort blue, GLushort alpha ); + + +GLAPI void GLAPIENTRY glColor3bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glColor3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glColor3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glColor3iv( const GLint *v ); +GLAPI void GLAPIENTRY glColor3sv( const GLshort *v ); +GLAPI void GLAPIENTRY glColor3ubv( const GLubyte *v ); +GLAPI void GLAPIENTRY glColor3uiv( const GLuint *v ); +GLAPI void GLAPIENTRY glColor3usv( const GLushort *v ); + +GLAPI void GLAPIENTRY glColor4bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glColor4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glColor4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glColor4iv( const GLint *v ); +GLAPI void GLAPIENTRY glColor4sv( const GLshort *v ); +GLAPI void GLAPIENTRY glColor4ubv( const GLubyte *v ); +GLAPI void GLAPIENTRY glColor4uiv( const GLuint *v ); +GLAPI void GLAPIENTRY glColor4usv( const GLushort *v ); + + +GLAPI void GLAPIENTRY glTexCoord1d( GLdouble s ); +GLAPI void GLAPIENTRY glTexCoord1f( GLfloat s ); +GLAPI void GLAPIENTRY glTexCoord1i( GLint s ); +GLAPI void GLAPIENTRY glTexCoord1s( GLshort s ); + +GLAPI void GLAPIENTRY glTexCoord2d( GLdouble s, GLdouble t ); +GLAPI void GLAPIENTRY glTexCoord2f( GLfloat s, GLfloat t ); +GLAPI void GLAPIENTRY glTexCoord2i( GLint s, GLint t ); +GLAPI void GLAPIENTRY glTexCoord2s( GLshort s, GLshort t ); + +GLAPI void GLAPIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); +GLAPI void GLAPIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); +GLAPI void GLAPIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); +GLAPI void GLAPIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); + +GLAPI void GLAPIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); +GLAPI void GLAPIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); +GLAPI void GLAPIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); +GLAPI void GLAPIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); + +GLAPI void GLAPIENTRY glTexCoord1dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord1fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord1iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord1sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord2iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord3iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord4iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glRasterPos2d( GLdouble x, GLdouble y ); +GLAPI void GLAPIENTRY glRasterPos2f( GLfloat x, GLfloat y ); +GLAPI void GLAPIENTRY glRasterPos2i( GLint x, GLint y ); +GLAPI void GLAPIENTRY glRasterPos2s( GLshort x, GLshort y ); + +GLAPI void GLAPIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); +GLAPI void GLAPIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); +GLAPI void GLAPIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); + +GLAPI void GLAPIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +GLAPI void GLAPIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +GLAPI void GLAPIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); +GLAPI void GLAPIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); + +GLAPI void GLAPIENTRY glRasterPos2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos2iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glRasterPos3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos3iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glRasterPos4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos4iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); +GLAPI void GLAPIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); +GLAPI void GLAPIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); +GLAPI void GLAPIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); + + +GLAPI void GLAPIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); +GLAPI void GLAPIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); +GLAPI void GLAPIENTRY glRectiv( const GLint *v1, const GLint *v2 ); +GLAPI void GLAPIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); + + +/* + * Vertex Arrays (1.1) + */ + +GLAPI void GLAPIENTRY glVertexPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glNormalPointer( GLenum type, GLsizei stride, + const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glColorPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glIndexPointer( GLenum type, GLsizei stride, + const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params ); + +GLAPI void GLAPIENTRY glArrayElement( GLint i ); + +GLAPI void GLAPIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); + +GLAPI void GLAPIENTRY glDrawElements( GLenum mode, GLsizei count, + GLenum type, const GLvoid *indices ); + +GLAPI void GLAPIENTRY glInterleavedArrays( GLenum format, GLsizei stride, + const GLvoid *pointer ); + +/* + * Lighting + */ + +GLAPI void GLAPIENTRY glShadeModel( GLenum mode ); + +GLAPI void GLAPIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glLighti( GLenum light, GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glLightfv( GLenum light, GLenum pname, + const GLfloat *params ); +GLAPI void GLAPIENTRY glLightiv( GLenum light, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glGetLightfv( GLenum light, GLenum pname, + GLfloat *params ); +GLAPI void GLAPIENTRY glGetLightiv( GLenum light, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glLightModelf( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glLightModeli( GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glLightModeliv( GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); + +GLAPI void GLAPIENTRY glColorMaterial( GLenum face, GLenum mode ); + + +/* + * Raster functions + */ + +GLAPI void GLAPIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); + +GLAPI void GLAPIENTRY glPixelStoref( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glPixelStorei( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glPixelTransferf( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glPixelTransferi( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glPixelMapfv( GLenum map, GLsizei mapsize, + const GLfloat *values ); +GLAPI void GLAPIENTRY glPixelMapuiv( GLenum map, GLsizei mapsize, + const GLuint *values ); +GLAPI void GLAPIENTRY glPixelMapusv( GLenum map, GLsizei mapsize, + const GLushort *values ); + +GLAPI void GLAPIENTRY glGetPixelMapfv( GLenum map, GLfloat *values ); +GLAPI void GLAPIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); +GLAPI void GLAPIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); + +GLAPI void GLAPIENTRY glBitmap( GLsizei width, GLsizei height, + GLfloat xorig, GLfloat yorig, + GLfloat xmove, GLfloat ymove, + const GLubyte *bitmap ); + +GLAPI void GLAPIENTRY glReadPixels( GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + GLvoid *pixels ); + +GLAPI void GLAPIENTRY glDrawPixels( GLsizei width, GLsizei height, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glCopyPixels( GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum type ); + +/* + * Stenciling + */ + +GLAPI void GLAPIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask ); + +GLAPI void GLAPIENTRY glStencilMask( GLuint mask ); + +GLAPI void GLAPIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass ); + +GLAPI void GLAPIENTRY glClearStencil( GLint s ); + + + +/* + * Texture mapping + */ + +GLAPI void GLAPIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); +GLAPI void GLAPIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); +GLAPI void GLAPIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params ); +GLAPI void GLAPIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexParameterfv( GLenum target, GLenum pname, + const GLfloat *params ); +GLAPI void GLAPIENTRY glTexParameteriv( GLenum target, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexParameterfv( GLenum target, + GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexParameteriv( GLenum target, + GLenum pname, GLint *params ); + +GLAPI void GLAPIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, + GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, + GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexImage1D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLint border, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glTexImage2D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLint border, GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glGetTexImage( GLenum target, GLint level, + GLenum format, GLenum type, + GLvoid *pixels ); + + +/* 1.1 functions */ + +GLAPI void GLAPIENTRY glGenTextures( GLsizei n, GLuint *textures ); + +GLAPI void GLAPIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); + +GLAPI void GLAPIENTRY glBindTexture( GLenum target, GLuint texture ); + +GLAPI void GLAPIENTRY glPrioritizeTextures( GLsizei n, + const GLuint *textures, + const GLclampf *priorities ); + +GLAPI GLboolean GLAPIENTRY glAreTexturesResident( GLsizei n, + const GLuint *textures, + GLboolean *residences ); + +GLAPI GLboolean GLAPIENTRY glIsTexture( GLuint texture ); + + +GLAPI void GLAPIENTRY glTexSubImage1D( GLenum target, GLint level, + GLint xoffset, + GLsizei width, GLenum format, + GLenum type, const GLvoid *pixels ); + + +GLAPI void GLAPIENTRY glTexSubImage2D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + const GLvoid *pixels ); + + +GLAPI void GLAPIENTRY glCopyTexImage1D( GLenum target, GLint level, + GLenum internalformat, + GLint x, GLint y, + GLsizei width, GLint border ); + + +GLAPI void GLAPIENTRY glCopyTexImage2D( GLenum target, GLint level, + GLenum internalformat, + GLint x, GLint y, + GLsizei width, GLsizei height, + GLint border ); + + +GLAPI void GLAPIENTRY glCopyTexSubImage1D( GLenum target, GLint level, + GLint xoffset, GLint x, GLint y, + GLsizei width ); + + +GLAPI void GLAPIENTRY glCopyTexSubImage2D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint x, GLint y, + GLsizei width, GLsizei height ); + + +/* + * Evaluators + */ + +GLAPI void GLAPIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, + GLint stride, + GLint order, const GLdouble *points ); +GLAPI void GLAPIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, + GLint stride, + GLint order, const GLfloat *points ); + +GLAPI void GLAPIENTRY glMap2d( GLenum target, + GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, + GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, + const GLdouble *points ); +GLAPI void GLAPIENTRY glMap2f( GLenum target, + GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, + GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, + const GLfloat *points ); + +GLAPI void GLAPIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v ); +GLAPI void GLAPIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v ); +GLAPI void GLAPIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v ); + +GLAPI void GLAPIENTRY glEvalCoord1d( GLdouble u ); +GLAPI void GLAPIENTRY glEvalCoord1f( GLfloat u ); + +GLAPI void GLAPIENTRY glEvalCoord1dv( const GLdouble *u ); +GLAPI void GLAPIENTRY glEvalCoord1fv( const GLfloat *u ); + +GLAPI void GLAPIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); +GLAPI void GLAPIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); + +GLAPI void GLAPIENTRY glEvalCoord2dv( const GLdouble *u ); +GLAPI void GLAPIENTRY glEvalCoord2fv( const GLfloat *u ); + +GLAPI void GLAPIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 ); +GLAPI void GLAPIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 ); + +GLAPI void GLAPIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, + GLint vn, GLdouble v1, GLdouble v2 ); +GLAPI void GLAPIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, + GLint vn, GLfloat v1, GLfloat v2 ); + +GLAPI void GLAPIENTRY glEvalPoint1( GLint i ); + +GLAPI void GLAPIENTRY glEvalPoint2( GLint i, GLint j ); + +GLAPI void GLAPIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); + +GLAPI void GLAPIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); + + +/* + * Fog + */ + +GLAPI void GLAPIENTRY glFogf( GLenum pname, GLfloat param ); + +GLAPI void GLAPIENTRY glFogi( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glFogfv( GLenum pname, const GLfloat *params ); + +GLAPI void GLAPIENTRY glFogiv( GLenum pname, const GLint *params ); + + +/* + * Selection and Feedback + */ + +GLAPI void GLAPIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); + +GLAPI void GLAPIENTRY glPassThrough( GLfloat token ); + +GLAPI void GLAPIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); + +GLAPI void GLAPIENTRY glInitNames( void ); + +GLAPI void GLAPIENTRY glLoadName( GLuint name ); + +GLAPI void GLAPIENTRY glPushName( GLuint name ); + +GLAPI void GLAPIENTRY glPopName( void ); + + + +/* + * OpenGL 1.2 + */ + +#define GL_RESCALE_NORMAL 0x803A +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_TEXTURE_BINDING_3D 0x806A + +GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start, + GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); + +GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLsizei depth, GLint border, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, + GLenum format, + GLenum type, const GLvoid *pixels); + +GLAPI void GLAPIENTRY glCopyTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLint x, + GLint y, GLsizei width, + GLsizei height ); + +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + + +/* + * GL_ARB_imaging + */ + +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_BLEND_EQUATION 0x8009 +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_BLEND_COLOR 0x8005 + + +GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat, + GLsizei width, GLenum format, + GLenum type, const GLvoid *table ); + +GLAPI void GLAPIENTRY glColorSubTable( GLenum target, + GLsizei start, GLsizei count, + GLenum format, GLenum type, + const GLvoid *data ); + +GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname, + const GLint *params); + +GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname, + const GLfloat *params); + +GLAPI void GLAPIENTRY glCopyColorSubTable( GLenum target, GLsizei start, + GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glCopyColorTable( GLenum target, GLenum internalformat, + GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glGetColorTable( GLenum target, GLenum format, + GLenum type, GLvoid *table ); + +GLAPI void GLAPIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glBlendEquation( GLenum mode ); + +GLAPI void GLAPIENTRY glBlendColor( GLclampf red, GLclampf green, + GLclampf blue, GLclampf alpha ); + +GLAPI void GLAPIENTRY glHistogram( GLenum target, GLsizei width, + GLenum internalformat, GLboolean sink ); + +GLAPI void GLAPIENTRY glResetHistogram( GLenum target ); + +GLAPI void GLAPIENTRY glGetHistogram( GLenum target, GLboolean reset, + GLenum format, GLenum type, + GLvoid *values ); + +GLAPI void GLAPIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glMinmax( GLenum target, GLenum internalformat, + GLboolean sink ); + +GLAPI void GLAPIENTRY glResetMinmax( GLenum target ); + +GLAPI void GLAPIENTRY glGetMinmax( GLenum target, GLboolean reset, + GLenum format, GLenum types, + GLvoid *values ); + +GLAPI void GLAPIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glConvolutionFilter1D( GLenum target, + GLenum internalformat, GLsizei width, GLenum format, GLenum type, + const GLvoid *image ); + +GLAPI void GLAPIENTRY glConvolutionFilter2D( GLenum target, + GLenum internalformat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *image ); + +GLAPI void GLAPIENTRY glConvolutionParameterf( GLenum target, GLenum pname, + GLfloat params ); + +GLAPI void GLAPIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, + const GLfloat *params ); + +GLAPI void GLAPIENTRY glConvolutionParameteri( GLenum target, GLenum pname, + GLint params ); + +GLAPI void GLAPIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glCopyConvolutionFilter1D( GLenum target, + GLenum internalformat, GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glCopyConvolutionFilter2D( GLenum target, + GLenum internalformat, GLint x, GLint y, GLsizei width, + GLsizei height); + +GLAPI void GLAPIENTRY glGetConvolutionFilter( GLenum target, GLenum format, + GLenum type, GLvoid *image ); + +GLAPI void GLAPIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glSeparableFilter2D( GLenum target, + GLenum internalformat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *row, const GLvoid *column ); + +GLAPI void GLAPIENTRY glGetSeparableFilter( GLenum target, GLenum format, + GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); + + + + +/* + * OpenGL 1.3 + */ + +/* multitexture */ +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +/* texture_cube_map */ +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +/* texture_compression */ +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +/* multisample */ +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_MULTISAMPLE_BIT 0x20000000 +/* transpose_matrix */ +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +/* texture_env_combine */ +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +/* texture_env_dot3 */ +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +/* texture_border_clamp */ +#define GL_CLAMP_TO_BORDER 0x812D + +GLAPI void GLAPIENTRY glActiveTexture( GLenum texture ); + +GLAPI void GLAPIENTRY glClientActiveTexture( GLenum texture ); + +GLAPI void GLAPIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); + +GLAPI void GLAPIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1i( GLenum target, GLint s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); + + +GLAPI void GLAPIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); + +GLAPI void GLAPIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); + +GLAPI void GLAPIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); + +GLAPI void GLAPIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); + +GLAPI void GLAPIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); + + +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); + + + +/* + * GL_ARB_multitexture (ARB extension 1 and OpenGL 1.2.1) + */ +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 + +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 + +GLAPI void GLAPIENTRY glActiveTextureARB(GLenum texture); +GLAPI void GLAPIENTRY glClientActiveTextureARB(GLenum texture); +GLAPI void GLAPIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s); +GLAPI void GLAPIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s); +GLAPI void GLAPIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord1iARB(GLenum target, GLint s); +GLAPI void GLAPIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s); +GLAPI void GLAPIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t); +GLAPI void GLAPIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t); +GLAPI void GLAPIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t); +GLAPI void GLAPIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t); +GLAPI void GLAPIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void GLAPIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void GLAPIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r); +GLAPI void GLAPIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void GLAPIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void GLAPIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void GLAPIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void GLAPIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void GLAPIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v); + +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); + +#endif /* GL_ARB_multitexture */ + + + +/* + * Define this token if you want "old-style" header file behaviour (extensions + * defined in gl.h). Otherwise, extensions will be included from glext.h. + */ +#if !defined(NO_SDL_GLEXT) && !defined(GL_GLEXT_LEGACY) +#include +#endif /* GL_GLEXT_LEGACY */ + + + +/* + * ???. GL_MESA_packed_depth_stencil + * XXX obsolete + */ +#ifndef GL_MESA_packed_depth_stencil +#define GL_MESA_packed_depth_stencil 1 + +#define GL_DEPTH_STENCIL_MESA 0x8750 +#define GL_UNSIGNED_INT_24_8_MESA 0x8751 +#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752 +#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753 +#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754 + +#endif /* GL_MESA_packed_depth_stencil */ + + +#ifndef GL_ATI_blend_equation_separate +#define GL_ATI_blend_equation_separate 1 + +#define GL_ALPHA_BLEND_EQUATION_ATI 0x883D + +GLAPI void GLAPIENTRY glBlendEquationSeparateATI( GLenum modeRGB, GLenum modeA ); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLenum modeA); + +#endif /* GL_ATI_blend_equation_separate */ + + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +typedef void* GLeglImageOES; +#endif + +#ifndef GL_OES_EGL_image +#define GL_OES_EGL_image 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); +GLAPI void APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); +#endif +typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); +#endif + + +/** + ** NOTE!!!!! If you add new functions to this file, or update + ** glext.h be sure to regenerate the gl_mangle.h file. See comments + ** in that file for details. + **/ + + + +/********************************************************************** + * Begin system-specific stuff + */ +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export off +#endif + +/* + * End system-specific stuff + **********************************************************************/ + + +#ifdef __cplusplus +} +#endif + +#endif /* __gl_h_ */ + +#endif /* !__IPHONEOS__ */ + +#endif /* SDL_opengl_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengl_glext.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengl_glext.h new file mode 100644 index 00000000000..6a402b15a22 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengl_glext.h @@ -0,0 +1,11180 @@ +#ifndef __glext_h_ +#define __glext_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright (c) 2013-2014 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ +/* +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** http://www.opengl.org/registry/ +** +** Khronos $Revision: 26745 $ on $Date: 2014-05-21 03:12:26 -0700 (Wed, 21 May 2014) $ +*/ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX +#endif +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif +#ifndef GLAPI +#define GLAPI extern +#endif + +#define GL_GLEXT_VERSION 20140521 + +/* Generated C header for: + * API: gl + * Profile: compatibility + * Versions considered: .* + * Versions emitted: 1\.[2-9]|[234]\.[0-9] + * Default extensions included: gl + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_RESCALE_NORMAL 0x803A +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_VERSION_1_2 */ + +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTexture (GLenum texture); +GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); +GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); +GLAPI void APIENTRY glClientActiveTexture (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); +#endif +#endif /* GL_VERSION_1_3 */ + +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_COLOR_SUM 0x8458 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFogCoordf (GLfloat coord); +GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); +GLAPI void APIENTRY glFogCoordd (GLdouble coord); +GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2iv (const GLint *v); +GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); +GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3iv (const GLint *v); +GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); +GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void APIENTRY glBlendEquation (GLenum mode); +#endif +#endif /* GL_VERSION_1_4 */ + +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 +#include +#ifdef __MACOSX__ +typedef long GLsizeiptr; +typedef long GLintptr; +#else +typedef ptrdiff_t GLsizeiptr; +typedef ptrdiff_t GLintptr; +#endif +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_CURRENT_QUERY 0x8865 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_READ_ONLY 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SRC1_ALPHA 0x8589 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_FOG_COORD_SRC 0x8450 +#define GL_FOG_COORD 0x8451 +#define GL_CURRENT_FOG_COORD 0x8453 +#define GL_FOG_COORD_ARRAY_TYPE 0x8454 +#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORD_ARRAY_POINTER 0x8456 +#define GL_FOG_COORD_ARRAY 0x8457 +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D +#define GL_SRC0_RGB 0x8580 +#define GL_SRC1_RGB 0x8581 +#define GL_SRC2_RGB 0x8582 +#define GL_SRC0_ALPHA 0x8588 +#define GL_SRC2_ALPHA 0x858A +typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQuery (GLuint id); +GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQuery (GLenum target); +GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); +GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); +GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); +GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_VERSION_1_5 */ + +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +typedef char GLchar; +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_TEXTURE_COORDS 0x8871 +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); +typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); +GLAPI void APIENTRY glCompileShader (GLuint shader); +GLAPI GLuint APIENTRY glCreateProgram (void); +GLAPI GLuint APIENTRY glCreateShader (GLenum type); +GLAPI void APIENTRY glDeleteProgram (GLuint program); +GLAPI void APIENTRY glDeleteShader (GLuint shader); +GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgram (GLuint program); +GLAPI GLboolean APIENTRY glIsShader (GLuint shader); +GLAPI void APIENTRY glLinkProgram (GLuint program); +GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +GLAPI void APIENTRY glUseProgram (GLuint program); +GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glValidateProgram (GLuint program); +GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#endif +#endif /* GL_VERSION_2_0 */ + +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#endif +#endif /* GL_VERSION_2_1 */ + +#ifndef GL_VERSION_3_0 +#define GL_VERSION_3_0 1 +typedef unsigned short GLhalf; +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_CONTEXT_FLAGS 0x821E +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RG 0x8226 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_RGBA32F 0x8814 +#define GL_RGB32F 0x8815 +#define GL_RGBA16F 0x881A +#define GL_RGB16F 0x881B +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_FIXED_ONLY 0x891D +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_RGB9_E5 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_RGBA32UI 0x8D70 +#define GL_RGB32UI 0x8D71 +#define GL_RGBA16UI 0x8D76 +#define GL_RGB16UI 0x8D77 +#define GL_RGBA8UI 0x8D7C +#define GL_RGB8UI 0x8D7D +#define GL_RGBA32I 0x8D82 +#define GL_RGB32I 0x8D83 +#define GL_RGBA16I 0x8D88 +#define GL_RGB16I 0x8D89 +#define GL_RGBA8I 0x8D8E +#define GL_RGB8I 0x8D8F +#define GL_RED_INTEGER 0x8D94 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGRA_INTEGER 0x8D9B +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_INDEX 0x8222 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_HALF_FLOAT 0x140B +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_RG 0x8227 +#define GL_RG_INTEGER 0x8228 +#define GL_R8 0x8229 +#define GL_R16 0x822A +#define GL_RG8 0x822B +#define GL_RG16 0x822C +#define GL_R16F 0x822D +#define GL_R32F 0x822E +#define GL_RG16F 0x822F +#define GL_RG32F 0x8230 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_ALPHA_INTEGER 0x8D97 +typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); +GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); +GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedback (void); +GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); +GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRender (void); +GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); +GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); +GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmap (GLenum target); +GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glBindVertexArray (GLuint array); +GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); +#endif +#endif /* GL_VERSION_3_0 */ + +#ifndef GL_VERSION_3_1 +#define GL_VERSION_3_1 1 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM 0x8F98 +#define GL_RG16_SNORM 0x8F99 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGBA16_SNORM 0x8F9B +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_INVALID_INDEX 0xFFFFFFFFu +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); +typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); +GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); +GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#endif +#endif /* GL_VERSION_3_1 */ + +#ifndef GL_VERSION_3_2 +#define GL_VERSION_3_2 1 +typedef struct __GLsync *GLsync; +#ifndef GLEXT_64_TYPES_DEFINED +/* This code block is duplicated in glxext.h, so must be protected */ +#define GLEXT_64_TYPES_DEFINED +/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ +/* (as used in the GL_EXT_timer_query extension). */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#include +#elif defined(__sun__) || defined(__digital__) +#include +#if defined(__STDC__) +#if defined(__arch64__) || defined(_LP64) +typedef long int int64_t; +typedef unsigned long int uint64_t; +#else +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#endif /* __arch64__ */ +#endif /* __STDC__ */ +#elif defined( __VMS ) || defined(__sgi) +#include +#elif defined(__SCO__) || defined(__USLC__) +#include +#elif defined(__UNIXOS2__) || defined(__SOL64__) +typedef long int int32_t; +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#elif defined(_WIN32) && defined(__GNUC__) +#include +#elif defined(_WIN32) +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#else +/* Fallback if nothing above works */ +#include +#endif +#endif +typedef uint64_t GLuint64; +typedef int64_t GLint64; +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_DEPTH_CLAMP 0x864F +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_OBJECT_TYPE 0x9112 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_UNSIGNALED 0x9118 +#define GL_SIGNALED 0x9119 +#define GL_ALREADY_SIGNALED 0x911A +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_CONDITION_SATISFIED 0x911C +#define GL_WAIT_FAILED 0x911D +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_INTEGER_SAMPLES 0x9110 +typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); +typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); +typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); +typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); +typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +GLAPI void APIENTRY glProvokingVertex (GLenum mode); +GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); +GLAPI GLboolean APIENTRY glIsSync (GLsync sync); +GLAPI void APIENTRY glDeleteSync (GLsync sync); +GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); +GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); +GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); +#endif +#endif /* GL_VERSION_3_2 */ + +#ifndef GL_VERSION_3_3 +#define GL_VERSION_3_3 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_SRC1_COLOR 0x88F9 +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_SAMPLER_BINDING 0x8919 +#define GL_RGB10_A2UI 0x906F +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIMESTAMP 0x8E28 +#define GL_INT_2_10_10_10_REV 0x8D9F +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); +typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); +typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); +typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); +GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); +GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); +GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); +GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); +GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); +GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); +GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); +GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); +GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); +GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); +GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); +#endif +#endif /* GL_VERSION_3_3 */ + +#ifndef GL_VERSION_4_0 +#define GL_VERSION_4_0 1 +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_PATCHES 0x000E +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_ISOLINES 0x8E7A +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); +typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); +typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); +typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); +typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); +typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShading (GLfloat value); +GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); +GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); +GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); +GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); +GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); +GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); +GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); +GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); +GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedback (void); +GLAPI void APIENTRY glResumeTransformFeedback (void); +GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); +GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); +GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); +GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); +GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_VERSION_4_0 */ + +#ifndef GL_VERSION_4_1 +#define GL_VERSION_4_1 1 +#define GL_FIXED 0x140C +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_RGB565 0x8D62 +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_MAX_VIEWPORTS 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_UNDEFINED_VERTEX 0x8260 +typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); +typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); +typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); +typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); +typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); +typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReleaseShaderCompiler (void); +GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); +GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); +GLAPI void APIENTRY glClearDepthf (GLfloat d); +GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); +GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); +GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); +GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); +GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); +GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); +GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); +GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); +GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); +GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); +#endif +#endif /* GL_VERSION_4_1 */ + +#ifndef GL_VERSION_4_2 +#define GL_VERSION_4_2 1 +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C +#define GL_MAX_IMAGE_SAMPLES 0x906D +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F +#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); +typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); +GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); +GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#endif +#endif /* GL_VERSION_4_2 */ + +#ifndef GL_VERSION_4_3 +#define GL_VERSION_4_3 1 +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_BUFFER 0x82E0 +#define GL_SHADER 0x82E1 +#define GL_PROGRAM 0x82E2 +#define GL_QUERY 0x82E3 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_SAMPLER 0x82E6 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_INTERNALFORMAT_SUPPORTED 0x826F +#define GL_INTERNALFORMAT_PREFERRED 0x8270 +#define GL_INTERNALFORMAT_RED_SIZE 0x8271 +#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 +#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 +#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 +#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 +#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 +#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 +#define GL_INTERNALFORMAT_RED_TYPE 0x8278 +#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 +#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A +#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B +#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C +#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D +#define GL_MAX_WIDTH 0x827E +#define GL_MAX_HEIGHT 0x827F +#define GL_MAX_DEPTH 0x8280 +#define GL_MAX_LAYERS 0x8281 +#define GL_MAX_COMBINED_DIMENSIONS 0x8282 +#define GL_COLOR_COMPONENTS 0x8283 +#define GL_DEPTH_COMPONENTS 0x8284 +#define GL_STENCIL_COMPONENTS 0x8285 +#define GL_COLOR_RENDERABLE 0x8286 +#define GL_DEPTH_RENDERABLE 0x8287 +#define GL_STENCIL_RENDERABLE 0x8288 +#define GL_FRAMEBUFFER_RENDERABLE 0x8289 +#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A +#define GL_FRAMEBUFFER_BLEND 0x828B +#define GL_READ_PIXELS 0x828C +#define GL_READ_PIXELS_FORMAT 0x828D +#define GL_READ_PIXELS_TYPE 0x828E +#define GL_TEXTURE_IMAGE_FORMAT 0x828F +#define GL_TEXTURE_IMAGE_TYPE 0x8290 +#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 +#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 +#define GL_MIPMAP 0x8293 +#define GL_MANUAL_GENERATE_MIPMAP 0x8294 +#define GL_AUTO_GENERATE_MIPMAP 0x8295 +#define GL_COLOR_ENCODING 0x8296 +#define GL_SRGB_READ 0x8297 +#define GL_SRGB_WRITE 0x8298 +#define GL_FILTER 0x829A +#define GL_VERTEX_TEXTURE 0x829B +#define GL_TESS_CONTROL_TEXTURE 0x829C +#define GL_TESS_EVALUATION_TEXTURE 0x829D +#define GL_GEOMETRY_TEXTURE 0x829E +#define GL_FRAGMENT_TEXTURE 0x829F +#define GL_COMPUTE_TEXTURE 0x82A0 +#define GL_TEXTURE_SHADOW 0x82A1 +#define GL_TEXTURE_GATHER 0x82A2 +#define GL_TEXTURE_GATHER_SHADOW 0x82A3 +#define GL_SHADER_IMAGE_LOAD 0x82A4 +#define GL_SHADER_IMAGE_STORE 0x82A5 +#define GL_SHADER_IMAGE_ATOMIC 0x82A6 +#define GL_IMAGE_TEXEL_SIZE 0x82A7 +#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 +#define GL_IMAGE_PIXEL_FORMAT 0x82A9 +#define GL_IMAGE_PIXEL_TYPE 0x82AA +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF +#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 +#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 +#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 +#define GL_CLEAR_BUFFER 0x82B4 +#define GL_TEXTURE_VIEW 0x82B5 +#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 +#define GL_FULL_SUPPORT 0x82B7 +#define GL_CAVEAT_SUPPORT 0x82B8 +#define GL_IMAGE_CLASS_4_X_32 0x82B9 +#define GL_IMAGE_CLASS_2_X_32 0x82BA +#define GL_IMAGE_CLASS_1_X_32 0x82BB +#define GL_IMAGE_CLASS_4_X_16 0x82BC +#define GL_IMAGE_CLASS_2_X_16 0x82BD +#define GL_IMAGE_CLASS_1_X_16 0x82BE +#define GL_IMAGE_CLASS_4_X_8 0x82BF +#define GL_IMAGE_CLASS_2_X_8 0x82C0 +#define GL_IMAGE_CLASS_1_X_8 0x82C1 +#define GL_IMAGE_CLASS_11_11_10 0x82C2 +#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 +#define GL_VIEW_CLASS_128_BITS 0x82C4 +#define GL_VIEW_CLASS_96_BITS 0x82C5 +#define GL_VIEW_CLASS_64_BITS 0x82C6 +#define GL_VIEW_CLASS_48_BITS 0x82C7 +#define GL_VIEW_CLASS_32_BITS 0x82C8 +#define GL_VIEW_CLASS_24_BITS 0x82C9 +#define GL_VIEW_CLASS_16_BITS 0x82CA +#define GL_VIEW_CLASS_8_BITS 0x82CB +#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC +#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD +#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE +#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF +#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 +#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 +#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 +#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_VERTEX_SUBROUTINE 0x92E8 +#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 +#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA +#define GL_GEOMETRY_SUBROUTINE 0x92EB +#define GL_FRAGMENT_SUBROUTINE 0x92EC +#define GL_COMPUTE_SUBROUTINE 0x92ED +#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE +#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF +#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 +#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 +#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 +#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 +#define GL_NAME_LENGTH 0x92F9 +#define GL_TYPE 0x92FA +#define GL_ARRAY_SIZE 0x92FB +#define GL_OFFSET 0x92FC +#define GL_BLOCK_INDEX 0x92FD +#define GL_ARRAY_STRIDE 0x92FE +#define GL_MATRIX_STRIDE 0x92FF +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_LOCATION 0x930E +#define GL_LOCATION_INDEX 0x930F +#define GL_IS_PER_PATCH 0x92E7 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB +#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC +#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD +#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_DISPLAY_LIST 0x82E7 +typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); +typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); +typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); +GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); +GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); +GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); +GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); +GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); +GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GLAPI void APIENTRY glPopDebugGroup (void); +GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_VERSION_4_3 */ + +#ifndef GL_VERSION_4_4 +#define GL_VERSION_4_4 1 +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_TEXTURE_BUFFER_BINDING 0x8C2A +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_COHERENT_BIT 0x0080 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_STORAGE_FLAGS 0x8220 +#define GL_CLEAR_TEXTURE 0x9365 +#define GL_LOCATION_COMPONENT 0x934A +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 +typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); +GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#endif +#endif /* GL_VERSION_4_4 */ + +#ifndef GL_ARB_ES2_compatibility +#define GL_ARB_ES2_compatibility 1 +#endif /* GL_ARB_ES2_compatibility */ + +#ifndef GL_ARB_ES3_compatibility +#define GL_ARB_ES3_compatibility 1 +#endif /* GL_ARB_ES3_compatibility */ + +#ifndef GL_ARB_arrays_of_arrays +#define GL_ARB_arrays_of_arrays 1 +#endif /* GL_ARB_arrays_of_arrays */ + +#ifndef GL_ARB_base_instance +#define GL_ARB_base_instance 1 +#endif /* GL_ARB_base_instance */ + +#ifndef GL_ARB_bindless_texture +#define GL_ARB_bindless_texture 1 +typedef uint64_t GLuint64EXT; +#define GL_UNSIGNED_INT64_ARB 0x140F +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_ARB_bindless_texture */ + +#ifndef GL_ARB_blend_func_extended +#define GL_ARB_blend_func_extended 1 +#endif /* GL_ARB_blend_func_extended */ + +#ifndef GL_ARB_buffer_storage +#define GL_ARB_buffer_storage 1 +#endif /* GL_ARB_buffer_storage */ + +#ifndef GL_ARB_cl_event +#define GL_ARB_cl_event 1 +struct _cl_context; +struct _cl_event; +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#endif +#endif /* GL_ARB_cl_event */ + +#ifndef GL_ARB_clear_buffer_object +#define GL_ARB_clear_buffer_object 1 +#endif /* GL_ARB_clear_buffer_object */ + +#ifndef GL_ARB_clear_texture +#define GL_ARB_clear_texture 1 +#endif /* GL_ARB_clear_texture */ + +#ifndef GL_ARB_color_buffer_float +#define GL_ARB_color_buffer_float 1 +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY_ARB 0x891D +typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); +#endif +#endif /* GL_ARB_color_buffer_float */ + +#ifndef GL_ARB_compatibility +#define GL_ARB_compatibility 1 +#endif /* GL_ARB_compatibility */ + +#ifndef GL_ARB_compressed_texture_pixel_storage +#define GL_ARB_compressed_texture_pixel_storage 1 +#endif /* GL_ARB_compressed_texture_pixel_storage */ + +#ifndef GL_ARB_compute_shader +#define GL_ARB_compute_shader 1 +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#endif /* GL_ARB_compute_shader */ + +#ifndef GL_ARB_compute_variable_group_size +#define GL_ARB_compute_variable_group_size 1 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 +#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB +#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 +#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +#endif +#endif /* GL_ARB_compute_variable_group_size */ + +#ifndef GL_ARB_conservative_depth +#define GL_ARB_conservative_depth 1 +#endif /* GL_ARB_conservative_depth */ + +#ifndef GL_ARB_copy_buffer +#define GL_ARB_copy_buffer 1 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#endif /* GL_ARB_copy_buffer */ + +#ifndef GL_ARB_copy_image +#define GL_ARB_copy_image 1 +#endif /* GL_ARB_copy_image */ + +#ifndef GL_ARB_debug_output +#define GL_ARB_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#endif +#endif /* GL_ARB_debug_output */ + +#ifndef GL_ARB_depth_buffer_float +#define GL_ARB_depth_buffer_float 1 +#endif /* GL_ARB_depth_buffer_float */ + +#ifndef GL_ARB_depth_clamp +#define GL_ARB_depth_clamp 1 +#endif /* GL_ARB_depth_clamp */ + +#ifndef GL_ARB_depth_texture +#define GL_ARB_depth_texture 1 +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#endif /* GL_ARB_depth_texture */ + +#ifndef GL_ARB_draw_buffers +#define GL_ARB_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER15_ARB 0x8834 +typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ARB_draw_buffers */ + +#ifndef GL_ARB_draw_buffers_blend +#define GL_ARB_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#endif +#endif /* GL_ARB_draw_buffers_blend */ + +#ifndef GL_ARB_draw_elements_base_vertex +#define GL_ARB_draw_elements_base_vertex 1 +#endif /* GL_ARB_draw_elements_base_vertex */ + +#ifndef GL_ARB_draw_indirect +#define GL_ARB_draw_indirect 1 +#endif /* GL_ARB_draw_indirect */ + +#ifndef GL_ARB_draw_instanced +#define GL_ARB_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_ARB_draw_instanced */ + +#ifndef GL_ARB_enhanced_layouts +#define GL_ARB_enhanced_layouts 1 +#endif /* GL_ARB_enhanced_layouts */ + +#ifndef GL_ARB_explicit_attrib_location +#define GL_ARB_explicit_attrib_location 1 +#endif /* GL_ARB_explicit_attrib_location */ + +#ifndef GL_ARB_explicit_uniform_location +#define GL_ARB_explicit_uniform_location 1 +#endif /* GL_ARB_explicit_uniform_location */ + +#ifndef GL_ARB_fragment_coord_conventions +#define GL_ARB_fragment_coord_conventions 1 +#endif /* GL_ARB_fragment_coord_conventions */ + +#ifndef GL_ARB_fragment_layer_viewport +#define GL_ARB_fragment_layer_viewport 1 +#endif /* GL_ARB_fragment_layer_viewport */ + +#ifndef GL_ARB_fragment_program +#define GL_ARB_fragment_program 1 +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); +GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string); +GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); +#endif +#endif /* GL_ARB_fragment_program */ + +#ifndef GL_ARB_fragment_program_shadow +#define GL_ARB_fragment_program_shadow 1 +#endif /* GL_ARB_fragment_program_shadow */ + +#ifndef GL_ARB_fragment_shader +#define GL_ARB_fragment_shader 1 +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#endif /* GL_ARB_fragment_shader */ + +#ifndef GL_ARB_framebuffer_no_attachments +#define GL_ARB_framebuffer_no_attachments 1 +#endif /* GL_ARB_framebuffer_no_attachments */ + +#ifndef GL_ARB_framebuffer_object +#define GL_ARB_framebuffer_object 1 +#endif /* GL_ARB_framebuffer_object */ + +#ifndef GL_ARB_framebuffer_sRGB +#define GL_ARB_framebuffer_sRGB 1 +#endif /* GL_ARB_framebuffer_sRGB */ + +#ifndef GL_KHR_context_flush_control +#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC +#endif /* GL_KHR_context_flush_control */ + +#ifndef GL_ARB_geometry_shader4 +#define GL_ARB_geometry_shader4 1 +#define GL_LINES_ADJACENCY_ARB 0x000A +#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B +#define GL_TRIANGLES_ADJACENCY_ARB 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 +#define GL_GEOMETRY_SHADER_ARB 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_ARB_geometry_shader4 */ + +#ifndef GL_ARB_get_program_binary +#define GL_ARB_get_program_binary 1 +#endif /* GL_ARB_get_program_binary */ + +#ifndef GL_ARB_gpu_shader5 +#define GL_ARB_gpu_shader5 1 +#endif /* GL_ARB_gpu_shader5 */ + +#ifndef GL_ARB_gpu_shader_fp64 +#define GL_ARB_gpu_shader_fp64 1 +#endif /* GL_ARB_gpu_shader_fp64 */ + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 +typedef unsigned short GLhalfARB; +#define GL_HALF_FLOAT_ARB 0x140B +#endif /* GL_ARB_half_float_pixel */ + +#ifndef GL_ARB_half_float_vertex +#define GL_ARB_half_float_vertex 1 +#endif /* GL_ARB_half_float_vertex */ + +#ifndef GL_ARB_imaging +#define GL_ARB_imaging 1 +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_EQUATION 0x8009 +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogram (GLenum target); +GLAPI void APIENTRY glResetMinmax (GLenum target); +#endif +#endif /* GL_ARB_imaging */ + +#ifndef GL_ARB_indirect_parameters +#define GL_ARB_indirect_parameters 1 +#define GL_PARAMETER_BUFFER_ARB 0x80EE +#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#endif +#endif /* GL_ARB_indirect_parameters */ + +#ifndef GL_ARB_instanced_arrays +#define GL_ARB_instanced_arrays 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); +#endif +#endif /* GL_ARB_instanced_arrays */ + +#ifndef GL_ARB_internalformat_query +#define GL_ARB_internalformat_query 1 +#endif /* GL_ARB_internalformat_query */ + +#ifndef GL_ARB_internalformat_query2 +#define GL_ARB_internalformat_query2 1 +#define GL_SRGB_DECODE_ARB 0x8299 +#endif /* GL_ARB_internalformat_query2 */ + +#ifndef GL_ARB_invalidate_subdata +#define GL_ARB_invalidate_subdata 1 +#endif /* GL_ARB_invalidate_subdata */ + +#ifndef GL_ARB_map_buffer_alignment +#define GL_ARB_map_buffer_alignment 1 +#endif /* GL_ARB_map_buffer_alignment */ + +#ifndef GL_ARB_map_buffer_range +#define GL_ARB_map_buffer_range 1 +#endif /* GL_ARB_map_buffer_range */ + +#ifndef GL_ARB_matrix_palette +#define GL_ARB_matrix_palette 1 +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); +typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); +GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); +GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); +GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); +GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_ARB_matrix_palette */ + +#ifndef GL_ARB_multi_bind +#define GL_ARB_multi_bind 1 +#endif /* GL_ARB_multi_bind */ + +#ifndef GL_ARB_multi_draw_indirect +#define GL_ARB_multi_draw_indirect 1 +#endif /* GL_ARB_multi_draw_indirect */ + +#ifndef GL_ARB_multisample +#define GL_ARB_multisample 1 +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); +#endif +#endif /* GL_ARB_multisample */ + +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); +#endif +#endif /* GL_ARB_multitexture */ + +#ifndef GL_ARB_occlusion_query +#define GL_ARB_occlusion_query 1 +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_SAMPLES_PASSED_ARB 0x8914 +typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); +GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQueryARB (GLenum target); +GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_ARB_occlusion_query */ + +#ifndef GL_ARB_occlusion_query2 +#define GL_ARB_occlusion_query2 1 +#endif /* GL_ARB_occlusion_query2 */ + +#ifndef GL_ARB_pixel_buffer_object +#define GL_ARB_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#endif /* GL_ARB_pixel_buffer_object */ + +#ifndef GL_ARB_point_parameters +#define GL_ARB_point_parameters 1 +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_ARB_point_parameters */ + +#ifndef GL_ARB_point_sprite +#define GL_ARB_point_sprite 1 +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 +#endif /* GL_ARB_point_sprite */ + +#ifndef GL_ARB_program_interface_query +#define GL_ARB_program_interface_query 1 +#endif /* GL_ARB_program_interface_query */ + +#ifndef GL_ARB_provoking_vertex +#define GL_ARB_provoking_vertex 1 +#endif /* GL_ARB_provoking_vertex */ + +#ifndef GL_ARB_query_buffer_object +#define GL_ARB_query_buffer_object 1 +#endif /* GL_ARB_query_buffer_object */ + +#ifndef GL_ARB_robust_buffer_access_behavior +#define GL_ARB_robust_buffer_access_behavior 1 +#endif /* GL_ARB_robust_buffer_access_behavior */ + +#ifndef GL_ARB_robustness +#define GL_ARB_robustness 1 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 +typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); +typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); +typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); +typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); +GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); +GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); +GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); +GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); +GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); +GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#endif +#endif /* GL_ARB_robustness */ + +#ifndef GL_ARB_robustness_isolation +#define GL_ARB_robustness_isolation 1 +#endif /* GL_ARB_robustness_isolation */ + +#ifndef GL_ARB_sample_shading +#define GL_ARB_sample_shading 1 +#define GL_SAMPLE_SHADING_ARB 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); +#endif +#endif /* GL_ARB_sample_shading */ + +#ifndef GL_ARB_sampler_objects +#define GL_ARB_sampler_objects 1 +#endif /* GL_ARB_sampler_objects */ + +#ifndef GL_ARB_seamless_cube_map +#define GL_ARB_seamless_cube_map 1 +#endif /* GL_ARB_seamless_cube_map */ + +#ifndef GL_ARB_seamless_cubemap_per_texture +#define GL_ARB_seamless_cubemap_per_texture 1 +#endif /* GL_ARB_seamless_cubemap_per_texture */ + +#ifndef GL_ARB_separate_shader_objects +#define GL_ARB_separate_shader_objects 1 +#endif /* GL_ARB_separate_shader_objects */ + +#ifndef GL_ARB_shader_atomic_counters +#define GL_ARB_shader_atomic_counters 1 +#endif /* GL_ARB_shader_atomic_counters */ + +#ifndef GL_ARB_shader_bit_encoding +#define GL_ARB_shader_bit_encoding 1 +#endif /* GL_ARB_shader_bit_encoding */ + +#ifndef GL_ARB_shader_draw_parameters +#define GL_ARB_shader_draw_parameters 1 +#endif /* GL_ARB_shader_draw_parameters */ + +#ifndef GL_ARB_shader_group_vote +#define GL_ARB_shader_group_vote 1 +#endif /* GL_ARB_shader_group_vote */ + +#ifndef GL_ARB_shader_image_load_store +#define GL_ARB_shader_image_load_store 1 +#endif /* GL_ARB_shader_image_load_store */ + +#ifndef GL_ARB_shader_image_size +#define GL_ARB_shader_image_size 1 +#endif /* GL_ARB_shader_image_size */ + +#ifndef GL_ARB_shader_objects +#define GL_ARB_shader_objects 1 +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef char GLcharARB; +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); +typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); +GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); +GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); +GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); +GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); +GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); +GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); +GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); +GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); +GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#endif +#endif /* GL_ARB_shader_objects */ + +#ifndef GL_ARB_shader_precision +#define GL_ARB_shader_precision 1 +#endif /* GL_ARB_shader_precision */ + +#ifndef GL_ARB_shader_stencil_export +#define GL_ARB_shader_stencil_export 1 +#endif /* GL_ARB_shader_stencil_export */ + +#ifndef GL_ARB_shader_storage_buffer_object +#define GL_ARB_shader_storage_buffer_object 1 +#endif /* GL_ARB_shader_storage_buffer_object */ + +#ifndef GL_ARB_shader_subroutine +#define GL_ARB_shader_subroutine 1 +#endif /* GL_ARB_shader_subroutine */ + +#ifndef GL_ARB_shader_texture_lod +#define GL_ARB_shader_texture_lod 1 +#endif /* GL_ARB_shader_texture_lod */ + +#ifndef GL_ARB_shading_language_100 +#define GL_ARB_shading_language_100 1 +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#endif /* GL_ARB_shading_language_100 */ + +#ifndef GL_ARB_shading_language_420pack +#define GL_ARB_shading_language_420pack 1 +#endif /* GL_ARB_shading_language_420pack */ + +#ifndef GL_ARB_shading_language_include +#define GL_ARB_shading_language_include 1 +#define GL_SHADER_INCLUDE_ARB 0x8DAE +#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 +#define GL_NAMED_STRING_TYPE_ARB 0x8DEA +typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#endif +#endif /* GL_ARB_shading_language_include */ + +#ifndef GL_ARB_shading_language_packing +#define GL_ARB_shading_language_packing 1 +#endif /* GL_ARB_shading_language_packing */ + +#ifndef GL_ARB_shadow +#define GL_ARB_shadow 1 +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#endif /* GL_ARB_shadow */ + +#ifndef GL_ARB_shadow_ambient +#define GL_ARB_shadow_ambient 1 +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#endif /* GL_ARB_shadow_ambient */ + +#ifndef GL_ARB_sparse_texture +#define GL_ARB_sparse_texture 1 +#define GL_TEXTURE_SPARSE_ARB 0x91A6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 +#define GL_MIN_SPARSE_LEVEL_ARB 0x919B +#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 +#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 +typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +#endif +#endif /* GL_ARB_sparse_texture */ + +#ifndef GL_ARB_stencil_texturing +#define GL_ARB_stencil_texturing 1 +#endif /* GL_ARB_stencil_texturing */ + +#ifndef GL_ARB_sync +#define GL_ARB_sync 1 +#endif /* GL_ARB_sync */ + +#ifndef GL_ARB_tessellation_shader +#define GL_ARB_tessellation_shader 1 +#endif /* GL_ARB_tessellation_shader */ + +#ifndef GL_ARB_texture_border_clamp +#define GL_ARB_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#endif /* GL_ARB_texture_border_clamp */ + +#ifndef GL_ARB_texture_buffer_object +#define GL_ARB_texture_buffer_object 1 +#define GL_TEXTURE_BUFFER_ARB 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E +typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_ARB_texture_buffer_object */ + +#ifndef GL_ARB_texture_buffer_object_rgb32 +#define GL_ARB_texture_buffer_object_rgb32 1 +#endif /* GL_ARB_texture_buffer_object_rgb32 */ + +#ifndef GL_ARB_texture_buffer_range +#define GL_ARB_texture_buffer_range 1 +#endif /* GL_ARB_texture_buffer_range */ + +#ifndef GL_ARB_texture_compression +#define GL_ARB_texture_compression 1 +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img); +#endif +#endif /* GL_ARB_texture_compression */ + +#ifndef GL_ARB_texture_compression_bptc +#define GL_ARB_texture_compression_bptc 1 +#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F +#endif /* GL_ARB_texture_compression_bptc */ + +#ifndef GL_ARB_texture_compression_rgtc +#define GL_ARB_texture_compression_rgtc 1 +#endif /* GL_ARB_texture_compression_rgtc */ + +#ifndef GL_ARB_texture_cube_map +#define GL_ARB_texture_cube_map 1 +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C +#endif /* GL_ARB_texture_cube_map */ + +#ifndef GL_ARB_texture_cube_map_array +#define GL_ARB_texture_cube_map_array 1 +#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#endif /* GL_ARB_texture_cube_map_array */ + +#ifndef GL_ARB_texture_env_add +#define GL_ARB_texture_env_add 1 +#endif /* GL_ARB_texture_env_add */ + +#ifndef GL_ARB_texture_env_combine +#define GL_ARB_texture_env_combine 1 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_CONSTANT_ARB 0x8576 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PREVIOUS_ARB 0x8578 +#endif /* GL_ARB_texture_env_combine */ + +#ifndef GL_ARB_texture_env_crossbar +#define GL_ARB_texture_env_crossbar 1 +#endif /* GL_ARB_texture_env_crossbar */ + +#ifndef GL_ARB_texture_env_dot3 +#define GL_ARB_texture_env_dot3 1 +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGBA_ARB 0x86AF +#endif /* GL_ARB_texture_env_dot3 */ + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#endif /* GL_ARB_texture_float */ + +#ifndef GL_ARB_texture_gather +#define GL_ARB_texture_gather 1 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F +#endif /* GL_ARB_texture_gather */ + +#ifndef GL_ARB_texture_mirror_clamp_to_edge +#define GL_ARB_texture_mirror_clamp_to_edge 1 +#endif /* GL_ARB_texture_mirror_clamp_to_edge */ + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#endif /* GL_ARB_texture_mirrored_repeat */ + +#ifndef GL_ARB_texture_multisample +#define GL_ARB_texture_multisample 1 +#endif /* GL_ARB_texture_multisample */ + +#ifndef GL_ARB_texture_non_power_of_two +#define GL_ARB_texture_non_power_of_two 1 +#endif /* GL_ARB_texture_non_power_of_two */ + +#ifndef GL_ARB_texture_query_levels +#define GL_ARB_texture_query_levels 1 +#endif /* GL_ARB_texture_query_levels */ + +#ifndef GL_ARB_texture_query_lod +#define GL_ARB_texture_query_lod 1 +#endif /* GL_ARB_texture_query_lod */ + +#ifndef GL_ARB_texture_rectangle +#define GL_ARB_texture_rectangle 1 +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#endif /* GL_ARB_texture_rectangle */ + +#ifndef GL_ARB_texture_rg +#define GL_ARB_texture_rg 1 +#endif /* GL_ARB_texture_rg */ + +#ifndef GL_ARB_texture_rgb10_a2ui +#define GL_ARB_texture_rgb10_a2ui 1 +#endif /* GL_ARB_texture_rgb10_a2ui */ + +#ifndef GL_ARB_texture_stencil8 +#define GL_ARB_texture_stencil8 1 +#endif /* GL_ARB_texture_stencil8 */ + +#ifndef GL_ARB_texture_storage +#define GL_ARB_texture_storage 1 +#endif /* GL_ARB_texture_storage */ + +#ifndef GL_ARB_texture_storage_multisample +#define GL_ARB_texture_storage_multisample 1 +#endif /* GL_ARB_texture_storage_multisample */ + +#ifndef GL_ARB_texture_swizzle +#define GL_ARB_texture_swizzle 1 +#endif /* GL_ARB_texture_swizzle */ + +#ifndef GL_ARB_texture_view +#define GL_ARB_texture_view 1 +#endif /* GL_ARB_texture_view */ + +#ifndef GL_ARB_timer_query +#define GL_ARB_timer_query 1 +#endif /* GL_ARB_timer_query */ + +#ifndef GL_ARB_transform_feedback2 +#define GL_ARB_transform_feedback2 1 +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#endif /* GL_ARB_transform_feedback2 */ + +#ifndef GL_ARB_transform_feedback3 +#define GL_ARB_transform_feedback3 1 +#endif /* GL_ARB_transform_feedback3 */ + +#ifndef GL_ARB_transform_feedback_instanced +#define GL_ARB_transform_feedback_instanced 1 +#endif /* GL_ARB_transform_feedback_instanced */ + +#ifndef GL_ARB_transpose_matrix +#define GL_ARB_transpose_matrix 1 +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); +#endif +#endif /* GL_ARB_transpose_matrix */ + +#ifndef GL_ARB_uniform_buffer_object +#define GL_ARB_uniform_buffer_object 1 +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#endif /* GL_ARB_uniform_buffer_object */ + +#ifndef GL_ARB_vertex_array_bgra +#define GL_ARB_vertex_array_bgra 1 +#endif /* GL_ARB_vertex_array_bgra */ + +#ifndef GL_ARB_vertex_array_object +#define GL_ARB_vertex_array_object 1 +#endif /* GL_ARB_vertex_array_object */ + +#ifndef GL_ARB_vertex_attrib_64bit +#define GL_ARB_vertex_attrib_64bit 1 +#endif /* GL_ARB_vertex_attrib_64bit */ + +#ifndef GL_ARB_vertex_attrib_binding +#define GL_ARB_vertex_attrib_binding 1 +#endif /* GL_ARB_vertex_attrib_binding */ + +#ifndef GL_ARB_vertex_blend +#define GL_ARB_vertex_blend 1 +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F +typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); +typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); +typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); +typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); +typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); +typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); +typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); +GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); +GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); +GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); +GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); +GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); +GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); +GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); +GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexBlendARB (GLint count); +#endif +#endif /* GL_ARB_vertex_blend */ + +#ifndef GL_ARB_vertex_buffer_object +#define GL_ARB_vertex_buffer_object 1 +#ifdef __MACOSX__ /* The OS X headers haven't caught up with Khronos yet */ +typedef long GLsizeiptrARB; +typedef long GLintptrARB; +#else +typedef ptrdiff_t GLsizeiptrARB; +typedef ptrdiff_t GLintptrARB; +#endif +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY_ARB 0x88EA +typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); +GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); +GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_ARB_vertex_buffer_object */ + +#ifndef GL_ARB_vertex_program +#define GL_ARB_vertex_program 1 +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer); +#endif +#endif /* GL_ARB_vertex_program */ + +#ifndef GL_ARB_vertex_shader +#define GL_ARB_vertex_shader 1 +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); +#endif +#endif /* GL_ARB_vertex_shader */ + +#ifndef GL_ARB_vertex_type_10f_11f_11f_rev +#define GL_ARB_vertex_type_10f_11f_11f_rev 1 +#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ + +#ifndef GL_ARB_vertex_type_2_10_10_10_rev +#define GL_ARB_vertex_type_2_10_10_10_rev 1 +#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ + +#ifndef GL_ARB_viewport_array +#define GL_ARB_viewport_array 1 +#endif /* GL_ARB_viewport_array */ + +#ifndef GL_ARB_window_pos +#define GL_ARB_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); +#endif +#endif /* GL_ARB_window_pos */ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +#endif /* GL_KHR_debug */ + +#ifndef GL_KHR_texture_compression_astc_hdr +#define GL_KHR_texture_compression_astc_hdr 1 +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#endif /* GL_KHR_texture_compression_astc_hdr */ + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif /* GL_KHR_texture_compression_astc_ldr */ + +#ifndef GL_OES_byte_coordinates +#define GL_OES_byte_coordinates 1 +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); +typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x); +typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y); +typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z); +typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); +GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); +GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); +GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); +GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex2bOES (GLbyte x); +GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y); +GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z); +GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); +#endif +#endif /* GL_OES_byte_coordinates */ + +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#endif /* GL_OES_compressed_paletted_texture */ + +#ifndef GL_OES_fixed_point +#define GL_OES_fixed_point 1 +typedef GLint GLfixed; +#define GL_FIXED_OES 0x140C +typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); +typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); +typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); +typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); +typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); +typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); +typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); +typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEOESPROC) (GLfixed value, GLboolean invert); +typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); +typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); +typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); +typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); +typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); +typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); +typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); +typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); +typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); +typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); +typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); +typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); +typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); +typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); +typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); +GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); +GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); +GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); +GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); +GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glLineWidthxOES (GLfixed width); +GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); +GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glPointSizexOES (GLfixed size); +GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); +GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glSampleCoverageOES (GLfixed value, GLboolean invert); +GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); +GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); +GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); +GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); +GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); +GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); +GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); +GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); +GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); +GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glIndexxOES (GLfixed component); +GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); +GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); +GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); +GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); +GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glPassThroughxOES (GLfixed token); +GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); +GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); +GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); +GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); +GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); +GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); +GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glVertex2xOES (GLfixed x); +GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); +#endif +#endif /* GL_OES_fixed_point */ + +#ifndef GL_OES_query_matrix +#define GL_OES_query_matrix 1 +typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); +#endif +#endif /* GL_OES_query_matrix */ + +#ifndef GL_OES_read_format +#define GL_OES_read_format 1 +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#endif /* GL_OES_read_format */ + +#ifndef GL_OES_single_precision +#define GL_OES_single_precision 1 +typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); +typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); +typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); +typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); +typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); +GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); +GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); +GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); +GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#endif +#endif /* GL_OES_single_precision */ + +#ifndef GL_3DFX_multisample +#define GL_3DFX_multisample 1 +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 +#endif /* GL_3DFX_multisample */ + +#ifndef GL_3DFX_tbuffer +#define GL_3DFX_tbuffer 1 +typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); +#endif +#endif /* GL_3DFX_tbuffer */ + +#ifndef GL_3DFX_texture_compression_FXT1 +#define GL_3DFX_texture_compression_FXT1 1 +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 +#endif /* GL_3DFX_texture_compression_FXT1 */ + +#ifndef GL_AMD_blend_minmax_factor +#define GL_AMD_blend_minmax_factor 1 +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FACTOR_MAX_AMD 0x901D +#endif /* GL_AMD_blend_minmax_factor */ + +#ifndef GL_AMD_conservative_depth +#define GL_AMD_conservative_depth 1 +#endif /* GL_AMD_conservative_depth */ + +#ifndef GL_AMD_debug_output +#define GL_AMD_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#endif +#endif /* GL_AMD_debug_output */ + +#ifndef GL_AMD_depth_clamp_separate +#define GL_AMD_depth_clamp_separate 1 +#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E +#define GL_DEPTH_CLAMP_FAR_AMD 0x901F +#endif /* GL_AMD_depth_clamp_separate */ + +#ifndef GL_AMD_draw_buffers_blend +#define GL_AMD_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_AMD_draw_buffers_blend */ + +#ifndef GL_AMD_gcn_shader +#define GL_AMD_gcn_shader 1 +#endif /* GL_AMD_gcn_shader */ + +#ifndef GL_AMD_gpu_shader_int64 +#define GL_AMD_gpu_shader_int64 1 +typedef int64_t GLint64EXT; +#define GL_INT64_NV 0x140E +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); +GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); +GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); +GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); +GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); +GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); +GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_AMD_gpu_shader_int64 */ + +#ifndef GL_AMD_interleaved_elements +#define GL_AMD_interleaved_elements 1 +#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 +#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 +typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param); +#endif +#endif /* GL_AMD_interleaved_elements */ + +#ifndef GL_AMD_multi_draw_indirect +#define GL_AMD_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#endif +#endif /* GL_AMD_multi_draw_indirect */ + +#ifndef GL_AMD_name_gen_delete +#define GL_AMD_name_gen_delete 1 +#define GL_DATA_BUFFER_AMD 0x9151 +#define GL_PERFORMANCE_MONITOR_AMD 0x9152 +#define GL_QUERY_OBJECT_AMD 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 +#define GL_SAMPLER_OBJECT_AMD 0x9155 +typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); +typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); +typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); +GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); +GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); +#endif +#endif /* GL_AMD_name_gen_delete */ + +#ifndef GL_AMD_occlusion_query_event +#define GL_AMD_occlusion_query_event 1 +#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F +#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 +#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 +#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 +#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 +#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF +typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param); +#endif +#endif /* GL_AMD_occlusion_query_event */ + +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); +typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); +GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +#endif /* GL_AMD_performance_monitor */ + +#ifndef GL_AMD_pinned_memory +#define GL_AMD_pinned_memory 1 +#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 +#endif /* GL_AMD_pinned_memory */ + +#ifndef GL_AMD_query_buffer_object +#define GL_AMD_query_buffer_object 1 +#define GL_QUERY_BUFFER_AMD 0x9192 +#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 +#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 +#endif /* GL_AMD_query_buffer_object */ + +#ifndef GL_AMD_sample_positions +#define GL_AMD_sample_positions 1 +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); +#endif +#endif /* GL_AMD_sample_positions */ + +#ifndef GL_AMD_seamless_cubemap_per_texture +#define GL_AMD_seamless_cubemap_per_texture 1 +#endif /* GL_AMD_seamless_cubemap_per_texture */ + +#ifndef GL_AMD_shader_atomic_counter_ops +#define GL_AMD_shader_atomic_counter_ops 1 +#endif /* GL_AMD_shader_atomic_counter_ops */ + +#ifndef GL_AMD_shader_stencil_export +#define GL_AMD_shader_stencil_export 1 +#endif /* GL_AMD_shader_stencil_export */ + +#ifndef GL_AMD_shader_trinary_minmax +#define GL_AMD_shader_trinary_minmax 1 +#endif /* GL_AMD_shader_trinary_minmax */ + +#ifndef GL_AMD_sparse_texture +#define GL_AMD_sparse_texture 1 +#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A +#define GL_MIN_SPARSE_LEVEL_AMD 0x919B +#define GL_MIN_LOD_WARNING_AMD 0x919C +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#endif +#endif /* GL_AMD_sparse_texture */ + +#ifndef GL_AMD_stencil_operation_extended +#define GL_AMD_stencil_operation_extended 1 +#define GL_SET_AMD 0x874A +#define GL_REPLACE_VALUE_AMD 0x874B +#define GL_STENCIL_OP_VALUE_AMD 0x874C +#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D +typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); +#endif +#endif /* GL_AMD_stencil_operation_extended */ + +#ifndef GL_AMD_texture_texture4 +#define GL_AMD_texture_texture4 1 +#endif /* GL_AMD_texture_texture4 */ + +#ifndef GL_AMD_transform_feedback3_lines_triangles +#define GL_AMD_transform_feedback3_lines_triangles 1 +#endif /* GL_AMD_transform_feedback3_lines_triangles */ + +#ifndef GL_AMD_transform_feedback4 +#define GL_AMD_transform_feedback4 1 +#define GL_STREAM_RASTERIZATION_AMD 0x91A0 +#endif /* GL_AMD_transform_feedback4 */ + +#ifndef GL_AMD_vertex_shader_layer +#define GL_AMD_vertex_shader_layer 1 +#endif /* GL_AMD_vertex_shader_layer */ + +#ifndef GL_AMD_vertex_shader_tessellator +#define GL_AMD_vertex_shader_tessellator 1 +#define GL_SAMPLER_BUFFER_AMD 0x9001 +#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 +#define GL_TESSELLATION_MODE_AMD 0x9004 +#define GL_TESSELLATION_FACTOR_AMD 0x9005 +#define GL_DISCRETE_AMD 0x9006 +#define GL_CONTINUOUS_AMD 0x9007 +typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); +GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); +#endif +#endif /* GL_AMD_vertex_shader_tessellator */ + +#ifndef GL_AMD_vertex_shader_viewport_index +#define GL_AMD_vertex_shader_viewport_index 1 +#endif /* GL_AMD_vertex_shader_viewport_index */ + +#ifndef GL_APPLE_aux_depth_stencil +#define GL_APPLE_aux_depth_stencil 1 +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#endif /* GL_APPLE_aux_depth_stencil */ + +#ifndef GL_APPLE_client_storage +#define GL_APPLE_client_storage 1 +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#endif /* GL_APPLE_client_storage */ + +#ifndef GL_APPLE_element_array +#define GL_APPLE_element_array 1 +#define GL_ELEMENT_ARRAY_APPLE 0x8A0C +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E +typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#endif +#endif /* GL_APPLE_element_array */ + +#ifndef GL_APPLE_fence +#define GL_APPLE_fence 1 +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B +typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); +typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); +typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); +GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); +GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); +GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); +#endif +#endif /* GL_APPLE_fence */ + +#ifndef GL_APPLE_float_pixels +#define GL_APPLE_float_pixels 1 +#define GL_HALF_APPLE 0x140B +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_COLOR_FLOAT_APPLE 0x8A0F +#endif /* GL_APPLE_float_pixels */ + +#ifndef GL_APPLE_flush_buffer_range +#define GL_APPLE_flush_buffer_range 1 +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 +typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); +#endif +#endif /* GL_APPLE_flush_buffer_range */ + +#ifndef GL_APPLE_object_purgeable +#define GL_APPLE_object_purgeable 1 +#define GL_BUFFER_OBJECT_APPLE 0x85B3 +#define GL_RELEASED_APPLE 0x8A19 +#define GL_VOLATILE_APPLE 0x8A1A +#define GL_RETAINED_APPLE 0x8A1B +#define GL_UNDEFINED_APPLE 0x8A1C +#define GL_PURGEABLE_APPLE 0x8A1D +typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#endif +#endif /* GL_APPLE_object_purgeable */ + +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_RGB_RAW_422_APPLE 0x8A51 +#endif /* GL_APPLE_rgb_422 */ + +#ifndef GL_APPLE_row_bytes +#define GL_APPLE_row_bytes 1 +#define GL_PACK_ROW_BYTES_APPLE 0x8A15 +#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 +#endif /* GL_APPLE_row_bytes */ + +#ifndef GL_APPLE_specular_vector +#define GL_APPLE_specular_vector 1 +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#endif /* GL_APPLE_specular_vector */ + +#ifndef GL_APPLE_texture_range +#define GL_APPLE_texture_range 1 +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF +typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_APPLE_texture_range */ + +#ifndef GL_APPLE_transform_hint +#define GL_APPLE_transform_hint 1 +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#endif /* GL_APPLE_transform_hint */ + +#ifndef GL_APPLE_vertex_array_object +#define GL_APPLE_vertex_array_object 1 +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); +GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); +#endif +#endif /* GL_APPLE_vertex_array_object */ + +#ifndef GL_APPLE_vertex_array_range +#define GL_APPLE_vertex_array_range 1 +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_STORAGE_CLIENT_APPLE 0x85B4 +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); +#endif +#endif /* GL_APPLE_vertex_array_range */ + +#ifndef GL_APPLE_vertex_program_evaluators +#define GL_APPLE_vertex_program_evaluators 1 +#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 +#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 +#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 +#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 +#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 +#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 +#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 +#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 +#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 +#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#endif +#endif /* GL_APPLE_vertex_program_evaluators */ + +#ifndef GL_APPLE_ycbcr_422 +#define GL_APPLE_ycbcr_422 1 +#define GL_YCBCR_422_APPLE 0x85B9 +#endif /* GL_APPLE_ycbcr_422 */ + +#ifndef GL_ATI_draw_buffers +#define GL_ATI_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER15_ATI 0x8834 +typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ATI_draw_buffers */ + +#ifndef GL_ATI_element_array +#define GL_ATI_element_array 1 +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); +#endif +#endif /* GL_ATI_element_array */ + +#ifndef GL_ATI_envmap_bumpmap +#define GL_ATI_envmap_bumpmap 1 +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_DUDV_ATI 0x8779 +#define GL_DU8DV8_ATI 0x877A +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_TARGET_ATI 0x877C +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); +GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); +GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); +#endif +#endif /* GL_ATI_envmap_bumpmap */ + +#ifndef GL_ATI_fragment_shader +#define GL_ATI_fragment_shader 1 +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_RED_BIT_ATI 0x00000001 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); +typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); +typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); +GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glBeginFragmentShaderATI (void); +GLAPI void APIENTRY glEndFragmentShaderATI (void); +GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); +GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); +GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); +#endif +#endif /* GL_ATI_fragment_shader */ + +#ifndef GL_ATI_map_object_buffer +#define GL_ATI_map_object_buffer 1 +typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); +#endif +#endif /* GL_ATI_map_object_buffer */ + +#ifndef GL_ATI_meminfo +#define GL_ATI_meminfo 1 +#define GL_VBO_FREE_MEMORY_ATI 0x87FB +#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC +#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD +#endif /* GL_ATI_meminfo */ + +#ifndef GL_ATI_pixel_format_float +#define GL_ATI_pixel_format_float 1 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#endif /* GL_ATI_pixel_format_float */ + +#ifndef GL_ATI_pn_triangles +#define GL_ATI_pn_triangles 1 +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); +GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_pn_triangles */ + +#ifndef GL_ATI_separate_stencil +#define GL_ATI_separate_stencil 1 +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#endif +#endif /* GL_ATI_separate_stencil */ + +#ifndef GL_ATI_text_fragment_shader +#define GL_ATI_text_fragment_shader 1 +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#endif /* GL_ATI_text_fragment_shader */ + +#ifndef GL_ATI_texture_env_combine3 +#define GL_ATI_texture_env_combine3 1 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#endif /* GL_ATI_texture_env_combine3 */ + +#ifndef GL_ATI_texture_float +#define GL_ATI_texture_float 1 +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#endif /* GL_ATI_texture_float */ + +#ifndef GL_ATI_texture_mirror_once +#define GL_ATI_texture_mirror_once 1 +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#endif /* GL_ATI_texture_mirror_once */ + +#ifndef GL_ATI_vertex_array_object +#define GL_ATI_vertex_array_object 1 +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage); +typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage); +GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); +GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_array_object */ + +#ifndef GL_ATI_vertex_attrib_array_object +#define GL_ATI_vertex_attrib_array_object 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_attrib_array_object */ + +#ifndef GL_ATI_vertex_streams +#define GL_ATI_vertex_streams 1 +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SOURCE_ATI 0x8774 +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); +GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); +GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); +GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); +GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); +GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); +GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); +GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); +GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); +GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_vertex_streams */ + +#ifndef GL_EXT_422_pixels +#define GL_EXT_422_pixels 1 +#define GL_422_EXT 0x80CC +#define GL_422_REV_EXT 0x80CD +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_REV_AVERAGE_EXT 0x80CF +#endif /* GL_EXT_422_pixels */ + +#ifndef GL_EXT_abgr +#define GL_EXT_abgr 1 +#define GL_ABGR_EXT 0x8000 +#endif /* GL_EXT_abgr */ + +#ifndef GL_EXT_bgra +#define GL_EXT_bgra 1 +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA_EXT 0x80E1 +#endif /* GL_EXT_bgra */ + +#ifndef GL_EXT_bindable_uniform +#define GL_EXT_bindable_uniform 1 +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF +typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); +typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); +typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); +GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); +GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); +#endif +#endif /* GL_EXT_bindable_uniform */ + +#ifndef GL_EXT_blend_color +#define GL_EXT_blend_color 1 +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_BLEND_COLOR_EXT 0x8005 +typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#endif +#endif /* GL_EXT_blend_color */ + +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 1 +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_EXT_blend_equation_separate */ + +#ifndef GL_EXT_blend_func_separate +#define GL_EXT_blend_func_separate 1 +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_EXT_blend_func_separate */ + +#ifndef GL_EXT_blend_logic_op +#define GL_EXT_blend_logic_op 1 +#endif /* GL_EXT_blend_logic_op */ + +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_BLEND_EQUATION_EXT 0x8009 +typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); +#endif +#endif /* GL_EXT_blend_minmax */ + +#ifndef GL_EXT_blend_subtract +#define GL_EXT_blend_subtract 1 +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#endif /* GL_EXT_blend_subtract */ + +#ifndef GL_EXT_clip_volume_hint +#define GL_EXT_clip_volume_hint 1 +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#endif /* GL_EXT_clip_volume_hint */ + +#ifndef GL_EXT_cmyka +#define GL_EXT_cmyka 1 +#define GL_CMYK_EXT 0x800C +#define GL_CMYKA_EXT 0x800D +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_UNPACK_CMYK_HINT_EXT 0x800F +#endif /* GL_EXT_cmyka */ + +#ifndef GL_EXT_color_subtable +#define GL_EXT_color_subtable 1 +typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#endif +#endif /* GL_EXT_color_subtable */ + +#ifndef GL_EXT_compiled_vertex_array +#define GL_EXT_compiled_vertex_array 1 +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 +typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); +GLAPI void APIENTRY glUnlockArraysEXT (void); +#endif +#endif /* GL_EXT_compiled_vertex_array */ + +#ifndef GL_EXT_convolution +#define GL_EXT_convolution 1 +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_REDUCE_EXT 0x8016 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#endif +#endif /* GL_EXT_convolution */ + +#ifndef GL_EXT_coordinate_frame +#define GL_EXT_coordinate_frame 1 +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP2_BINORMAL_EXT 0x8447 +typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); +typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); +typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); +typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); +typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); +typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); +typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); +typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); +typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); +typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); +typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); +GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); +GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); +GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); +GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); +GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); +GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); +GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); +GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); +GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); +GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); +GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); +GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); +GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); +GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_coordinate_frame */ + +#ifndef GL_EXT_copy_texture +#define GL_EXT_copy_texture 1 +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_copy_texture */ + +#ifndef GL_EXT_cull_vertex +#define GL_EXT_cull_vertex 1 +#define GL_CULL_VERTEX_EXT 0x81AA +#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB +#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC +typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); +GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_cull_vertex */ + +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_EXT_debug_label */ + +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPopGroupMarkerEXT (void); +#endif +#endif /* GL_EXT_debug_marker */ + +#ifndef GL_EXT_depth_bounds_test +#define GL_EXT_depth_bounds_test 1 +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); +#endif +#endif /* GL_EXT_depth_bounds_test */ + +#ifndef GL_EXT_direct_state_access +#define GL_EXT_direct_state_access 1 +#define GL_PROGRAM_MATRIX_EXT 0x8E2D +#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E +#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F +typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); +typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); +typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); +typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); +GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); +GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); +GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); +GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); +GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); +GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); +GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); +GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); +GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); +GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); +GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); +GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); +GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); +GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); +GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); +GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); +GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); +GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); +#endif +#endif /* GL_EXT_direct_state_access */ + +#ifndef GL_EXT_draw_buffers2 +#define GL_EXT_draw_buffers2 1 +typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#endif +#endif /* GL_EXT_draw_buffers2 */ + +#ifndef GL_EXT_draw_instanced +#define GL_EXT_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_EXT_draw_instanced */ + +#ifndef GL_EXT_draw_range_elements +#define GL_EXT_draw_range_elements 1 +#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 +#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#endif +#endif /* GL_EXT_draw_range_elements */ + +#ifndef GL_EXT_fog_coord +#define GL_EXT_fog_coord 1 +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 +typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); +GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); +GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); +GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_fog_coord */ + +#ifndef GL_EXT_framebuffer_blit +#define GL_EXT_framebuffer_blit 1 +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +#endif /* GL_EXT_framebuffer_blit */ + +#ifndef GL_EXT_framebuffer_multisample +#define GL_EXT_framebuffer_multisample 1 +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_framebuffer_multisample */ + +#ifndef GL_EXT_framebuffer_multisample_blit_scaled +#define GL_EXT_framebuffer_multisample_blit_scaled 1 +#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA +#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB +#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ + +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 1 +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); +#endif +#endif /* GL_EXT_framebuffer_object */ + +#ifndef GL_EXT_framebuffer_sRGB +#define GL_EXT_framebuffer_sRGB 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#endif /* GL_EXT_framebuffer_sRGB */ + +#ifndef GL_EXT_geometry_shader4 +#define GL_EXT_geometry_shader4 1 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +#endif +#endif /* GL_EXT_geometry_shader4 */ + +#ifndef GL_EXT_gpu_program_parameters +#define GL_EXT_gpu_program_parameters 1 +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#endif +#endif /* GL_EXT_gpu_program_parameters */ + +#ifndef GL_EXT_gpu_shader4 +#define GL_EXT_gpu_shader4 1 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 +typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); +#endif +#endif /* GL_EXT_gpu_shader4 */ + +#ifndef GL_EXT_histogram +#define GL_EXT_histogram 1 +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK_EXT 0x8030 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogramEXT (GLenum target); +GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); +#endif +#endif /* GL_EXT_histogram */ + +#ifndef GL_EXT_index_array_formats +#define GL_EXT_index_array_formats 1 +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#endif /* GL_EXT_index_array_formats */ + +#ifndef GL_EXT_index_func +#define GL_EXT_index_func 1 +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); +#endif +#endif /* GL_EXT_index_func */ + +#ifndef GL_EXT_index_material +#define GL_EXT_index_material 1 +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_index_material */ + +#ifndef GL_EXT_index_texture +#define GL_EXT_index_texture 1 +#endif /* GL_EXT_index_texture */ + +#ifndef GL_EXT_light_texture +#define GL_EXT_light_texture 1 +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_ATTENUATION_EXT 0x834D +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); +GLAPI void APIENTRY glTextureLightEXT (GLenum pname); +GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_light_texture */ + +#ifndef GL_EXT_misc_attribute +#define GL_EXT_misc_attribute 1 +#endif /* GL_EXT_misc_attribute */ + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#endif +#endif /* GL_EXT_multi_draw_arrays */ + +#ifndef GL_EXT_multisample +#define GL_EXT_multisample 1 +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_1PASS_EXT 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 +typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); +#endif +#endif /* GL_EXT_multisample */ + +#ifndef GL_EXT_packed_depth_stencil +#define GL_EXT_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#endif /* GL_EXT_packed_depth_stencil */ + +#ifndef GL_EXT_packed_float +#define GL_EXT_packed_float 1 +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C +#endif /* GL_EXT_packed_float */ + +#ifndef GL_EXT_packed_pixels +#define GL_EXT_packed_pixels 1 +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 +#endif /* GL_EXT_packed_pixels */ + +#ifndef GL_EXT_paletted_texture +#define GL_EXT_paletted_texture 1 +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data); +GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_paletted_texture */ + +#ifndef GL_EXT_pixel_buffer_object +#define GL_EXT_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#endif /* GL_EXT_pixel_buffer_object */ + +#ifndef GL_EXT_pixel_transform +#define GL_EXT_pixel_transform 1 +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_CUBIC_EXT 0x8334 +#define GL_AVERAGE_EXT 0x8335 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_pixel_transform */ + +#ifndef GL_EXT_pixel_transform_color_table +#define GL_EXT_pixel_transform_color_table 1 +#endif /* GL_EXT_pixel_transform_color_table */ + +#ifndef GL_EXT_point_parameters +#define GL_EXT_point_parameters 1 +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_EXT_point_parameters */ + +#ifndef GL_EXT_polygon_offset +#define GL_EXT_polygon_offset 1 +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 +typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); +#endif +#endif /* GL_EXT_polygon_offset */ + +#ifndef GL_EXT_provoking_vertex +#define GL_EXT_provoking_vertex 1 +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_PROVOKING_VERTEX_EXT 0x8E4F +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); +#endif +#endif /* GL_EXT_provoking_vertex */ + +#ifndef GL_EXT_rescale_normal +#define GL_EXT_rescale_normal 1 +#define GL_RESCALE_NORMAL_EXT 0x803A +#endif /* GL_EXT_rescale_normal */ + +#ifndef GL_EXT_secondary_color +#define GL_EXT_secondary_color 1 +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_secondary_color */ + +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); +typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); +GLAPI void APIENTRY glActiveProgramEXT (GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); +#endif +#endif /* GL_EXT_separate_shader_objects */ + +#ifndef GL_EXT_separate_specular_color +#define GL_EXT_separate_specular_color 1 +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA +#endif /* GL_EXT_separate_specular_color */ + +#ifndef GL_EXT_shader_image_load_formatted +#define GL_EXT_shader_image_load_formatted 1 +#endif /* GL_EXT_shader_image_load_formatted */ + +#ifndef GL_EXT_shader_image_load_store +#define GL_EXT_shader_image_load_store 1 +#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A +#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B +#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C +#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D +#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E +#define GL_IMAGE_1D_EXT 0x904C +#define GL_IMAGE_2D_EXT 0x904D +#define GL_IMAGE_3D_EXT 0x904E +#define GL_IMAGE_2D_RECT_EXT 0x904F +#define GL_IMAGE_CUBE_EXT 0x9050 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_IMAGE_1D_ARRAY_EXT 0x9052 +#define GL_IMAGE_2D_ARRAY_EXT 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 +#define GL_INT_IMAGE_1D_EXT 0x9057 +#define GL_INT_IMAGE_2D_EXT 0x9058 +#define GL_INT_IMAGE_3D_EXT 0x9059 +#define GL_INT_IMAGE_2D_RECT_EXT 0x905A +#define GL_INT_IMAGE_CUBE_EXT 0x905B +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D +#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C +#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D +#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 +#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 +#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); +#endif +#endif /* GL_EXT_shader_image_load_store */ + +#ifndef GL_EXT_shader_integer_mix +#define GL_EXT_shader_integer_mix 1 +#endif /* GL_EXT_shader_integer_mix */ + +#ifndef GL_EXT_shadow_funcs +#define GL_EXT_shadow_funcs 1 +#endif /* GL_EXT_shadow_funcs */ + +#ifndef GL_EXT_shared_texture_palette +#define GL_EXT_shared_texture_palette 1 +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#endif /* GL_EXT_shared_texture_palette */ + +#ifndef GL_EXT_stencil_clear_tag +#define GL_EXT_stencil_clear_tag 1 +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 +typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); +#endif +#endif /* GL_EXT_stencil_clear_tag */ + +#ifndef GL_EXT_stencil_two_side +#define GL_EXT_stencil_two_side 1 +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); +#endif +#endif /* GL_EXT_stencil_two_side */ + +#ifndef GL_EXT_stencil_wrap +#define GL_EXT_stencil_wrap 1 +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_DECR_WRAP_EXT 0x8508 +#endif /* GL_EXT_stencil_wrap */ + +#ifndef GL_EXT_subtexture +#define GL_EXT_subtexture 1 +typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_subtexture */ + +#ifndef GL_EXT_texture +#define GL_EXT_texture 1 +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16_EXT 0x803E +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16_EXT 0x804D +#define GL_RGB2_EXT 0x804E +#define GL_RGB4_EXT 0x804F +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8_EXT 0x8051 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGBA8_EXT 0x8058 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16_EXT 0x805B +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_REPLACE_EXT 0x8062 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#endif /* GL_EXT_texture */ + +#ifndef GL_EXT_texture3D +#define GL_EXT_texture3D 1 +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 +typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_texture3D */ + +#ifndef GL_EXT_texture_array +#define GL_EXT_texture_array 1 +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +#endif /* GL_EXT_texture_array */ + +#ifndef GL_EXT_texture_buffer_object +#define GL_EXT_texture_buffer_object 1 +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E +typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_EXT_texture_buffer_object */ + +#ifndef GL_EXT_texture_compression_latc +#define GL_EXT_texture_compression_latc 1 +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 +#endif /* GL_EXT_texture_compression_latc */ + +#ifndef GL_EXT_texture_compression_rgtc +#define GL_EXT_texture_compression_rgtc 1 +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE +#endif /* GL_EXT_texture_compression_rgtc */ + +#ifndef GL_EXT_texture_compression_s3tc +#define GL_EXT_texture_compression_s3tc 1 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#endif /* GL_EXT_texture_compression_s3tc */ + +#ifndef GL_EXT_texture_cube_map +#define GL_EXT_texture_cube_map 1 +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C +#endif /* GL_EXT_texture_cube_map */ + +#ifndef GL_EXT_texture_env_add +#define GL_EXT_texture_env_add 1 +#endif /* GL_EXT_texture_env_add */ + +#ifndef GL_EXT_texture_env_combine +#define GL_EXT_texture_env_combine 1 +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_CONSTANT_EXT 0x8576 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND2_ALPHA_EXT 0x859A +#endif /* GL_EXT_texture_env_combine */ + +#ifndef GL_EXT_texture_env_dot3 +#define GL_EXT_texture_env_dot3 1 +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 +#endif /* GL_EXT_texture_env_dot3 */ + +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif /* GL_EXT_texture_filter_anisotropic */ + +#ifndef GL_EXT_texture_integer +#define GL_EXT_texture_integer 1 +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGB8UI_EXT 0x8D7D +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGB32I_EXT 0x8D83 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGB16I_EXT 0x8D89 +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGB8I_EXT 0x8D8F +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); +typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); +GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#endif +#endif /* GL_EXT_texture_integer */ + +#ifndef GL_EXT_texture_lod_bias +#define GL_EXT_texture_lod_bias 1 +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 +#endif /* GL_EXT_texture_lod_bias */ + +#ifndef GL_EXT_texture_mirror_clamp +#define GL_EXT_texture_mirror_clamp 1 +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#endif /* GL_EXT_texture_mirror_clamp */ + +#ifndef GL_EXT_texture_object +#define GL_EXT_texture_object 1 +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_3D_BINDING_EXT 0x806A +typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); +typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); +GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); +GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); +GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); +GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); +GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#endif +#endif /* GL_EXT_texture_object */ + +#ifndef GL_EXT_texture_perturb_normal +#define GL_EXT_texture_perturb_normal 1 +#define GL_PERTURB_EXT 0x85AE +#define GL_TEXTURE_NORMAL_EXT 0x85AF +typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); +#endif +#endif /* GL_EXT_texture_perturb_normal */ + +#ifndef GL_EXT_texture_sRGB +#define GL_EXT_texture_sRGB 1 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#endif /* GL_EXT_texture_sRGB */ + +#ifndef GL_EXT_texture_sRGB_decode +#define GL_EXT_texture_sRGB_decode 1 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#endif /* GL_EXT_texture_sRGB_decode */ + +#ifndef GL_EXT_texture_shared_exponent +#define GL_EXT_texture_shared_exponent 1 +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F +#endif /* GL_EXT_texture_shared_exponent */ + +#ifndef GL_EXT_texture_snorm +#define GL_EXT_texture_snorm 1 +#define GL_ALPHA_SNORM 0x9010 +#define GL_LUMINANCE_SNORM 0x9011 +#define GL_LUMINANCE_ALPHA_SNORM 0x9012 +#define GL_INTENSITY_SNORM 0x9013 +#define GL_ALPHA8_SNORM 0x9014 +#define GL_LUMINANCE8_SNORM 0x9015 +#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 +#define GL_INTENSITY8_SNORM 0x9017 +#define GL_ALPHA16_SNORM 0x9018 +#define GL_LUMINANCE16_SNORM 0x9019 +#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A +#define GL_INTENSITY16_SNORM 0x901B +#define GL_RED_SNORM 0x8F90 +#define GL_RG_SNORM 0x8F91 +#define GL_RGB_SNORM 0x8F92 +#define GL_RGBA_SNORM 0x8F93 +#endif /* GL_EXT_texture_snorm */ + +#ifndef GL_EXT_texture_swizzle +#define GL_EXT_texture_swizzle 1 +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 +#endif /* GL_EXT_texture_swizzle */ + +#ifndef GL_EXT_timer_query +#define GL_EXT_timer_query 1 +#define GL_TIME_ELAPSED_EXT 0x88BF +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +#endif +#endif /* GL_EXT_timer_query */ + +#ifndef GL_EXT_transform_feedback +#define GL_EXT_transform_feedback 1 +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 +#define GL_RASTERIZER_DISCARD_EXT 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackEXT (void); +GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#endif +#endif /* GL_EXT_transform_feedback */ + +#ifndef GL_EXT_vertex_array +#define GL_EXT_vertex_array 1 +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); +typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); +typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params); +typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glArrayElementEXT (GLint i); +GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); +GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params); +GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#endif +#endif /* GL_EXT_vertex_array */ + +#ifndef GL_EXT_vertex_array_bgra +#define GL_EXT_vertex_array_bgra 1 +#endif /* GL_EXT_vertex_array_bgra */ + +#ifndef GL_EXT_vertex_attrib_64bit +#define GL_EXT_vertex_attrib_64bit 1 +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#define GL_DOUBLE_MAT2_EXT 0x8F46 +#define GL_DOUBLE_MAT3_EXT 0x8F47 +#define GL_DOUBLE_MAT4_EXT 0x8F48 +#define GL_DOUBLE_MAT2x3_EXT 0x8F49 +#define GL_DOUBLE_MAT2x4_EXT 0x8F4A +#define GL_DOUBLE_MAT3x2_EXT 0x8F4B +#define GL_DOUBLE_MAT3x4_EXT 0x8F4C +#define GL_DOUBLE_MAT4x2_EXT 0x8F4D +#define GL_DOUBLE_MAT4x3_EXT 0x8F4E +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); +#endif +#endif /* GL_EXT_vertex_attrib_64bit */ + +#ifndef GL_EXT_vertex_shader +#define GL_EXT_vertex_shader 1 +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); +typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); +typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); +typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); +typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); +typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); +typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); +typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); +typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); +typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); +typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); +typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); +typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); +typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data); +typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVertexShaderEXT (void); +GLAPI void APIENTRY glEndVertexShaderEXT (void); +GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); +GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); +GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); +GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); +GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); +GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); +GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); +GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); +GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); +GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); +GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); +GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); +GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr); +GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); +GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); +GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); +GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); +GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); +GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); +GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); +GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); +GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data); +GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +#endif +#endif /* GL_EXT_vertex_shader */ + +#ifndef GL_EXT_vertex_weighting +#define GL_EXT_vertex_weighting 1 +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_MODELVIEW0_EXT 0x1700 +#define GL_MODELVIEW1_EXT 0x850A +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); +GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); +GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_vertex_weighting */ + +#ifndef GL_EXT_x11_sync_object +#define GL_EXT_x11_sync_object 1 +#define GL_SYNC_X11_FENCE_EXT 0x90E1 +typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#endif +#endif /* GL_EXT_x11_sync_object */ + +#ifndef GL_GREMEDY_frame_terminator +#define GL_GREMEDY_frame_terminator 1 +typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); +#endif +#endif /* GL_GREMEDY_frame_terminator */ + +#ifndef GL_GREMEDY_string_marker +#define GL_GREMEDY_string_marker 1 +typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string); +#endif +#endif /* GL_GREMEDY_string_marker */ + +#ifndef GL_HP_convolution_border_modes +#define GL_HP_convolution_border_modes 1 +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#endif /* GL_HP_convolution_border_modes */ + +#ifndef GL_HP_image_transform +#define GL_HP_image_transform 1 +#define GL_IMAGE_SCALE_X_HP 0x8155 +#define GL_IMAGE_SCALE_Y_HP 0x8156 +#define GL_IMAGE_TRANSLATE_X_HP 0x8157 +#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 +#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 +#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A +#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B +#define GL_IMAGE_MAG_FILTER_HP 0x815C +#define GL_IMAGE_MIN_FILTER_HP 0x815D +#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E +#define GL_CUBIC_HP 0x815F +#define GL_AVERAGE_HP 0x8160 +#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 +#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 +#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_HP_image_transform */ + +#ifndef GL_HP_occlusion_test +#define GL_HP_occlusion_test 1 +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#endif /* GL_HP_occlusion_test */ + +#ifndef GL_HP_texture_lighting +#define GL_HP_texture_lighting 1 +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#endif /* GL_HP_texture_lighting */ + +#ifndef GL_IBM_cull_vertex +#define GL_IBM_cull_vertex 1 +#define GL_CULL_VERTEX_IBM 103050 +#endif /* GL_IBM_cull_vertex */ + +#ifndef GL_IBM_multimode_draw_arrays +#define GL_IBM_multimode_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#endif +#endif /* GL_IBM_multimode_draw_arrays */ + +#ifndef GL_IBM_rasterpos_clip +#define GL_IBM_rasterpos_clip 1 +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#endif /* GL_IBM_rasterpos_clip */ + +#ifndef GL_IBM_static_data +#define GL_IBM_static_data 1 +#define GL_ALL_STATIC_DATA_IBM 103060 +#define GL_STATIC_VERTEX_ARRAY_IBM 103061 +typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); +#endif +#endif /* GL_IBM_static_data */ + +#ifndef GL_IBM_texture_mirrored_repeat +#define GL_IBM_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#endif /* GL_IBM_texture_mirrored_repeat */ + +#ifndef GL_IBM_vertex_array_lists +#define GL_IBM_vertex_array_lists 1 +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 +typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride); +GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#endif +#endif /* GL_IBM_vertex_array_lists */ + +#ifndef GL_INGR_blend_func_separate +#define GL_INGR_blend_func_separate 1 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_INGR_blend_func_separate */ + +#ifndef GL_INGR_color_clamp +#define GL_INGR_color_clamp 1 +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 +#endif /* GL_INGR_color_clamp */ + +#ifndef GL_INGR_interlace_read +#define GL_INGR_interlace_read 1 +#define GL_INTERLACE_READ_INGR 0x8568 +#endif /* GL_INGR_interlace_read */ + +#ifndef GL_INTEL_fragment_shader_ordering +#define GL_INTEL_fragment_shader_ordering 1 +#endif /* GL_INTEL_fragment_shader_ordering */ + +#ifndef GL_INTEL_map_texture +#define GL_INTEL_map_texture 1 +#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF +#define GL_LAYOUT_DEFAULT_INTEL 0 +#define GL_LAYOUT_LINEAR_INTEL 1 +#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 +typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); +typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); +GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); +GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#endif +#endif /* GL_INTEL_map_texture */ + +#ifndef GL_INTEL_parallel_arrays +#define GL_INTEL_parallel_arrays 1 +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 +typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer); +GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer); +#endif +#endif /* GL_INTEL_parallel_arrays */ + +#ifndef GL_INTEL_performance_query +#define GL_INTEL_performance_query 1 +#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 +#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 +#define GL_PERFQUERY_WAIT_INTEL 0x83FB +#define GL_PERFQUERY_FLUSH_INTEL 0x83FA +#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 +#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 +#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 +#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 +#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 +#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 +#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 +#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 +#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 +#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA +#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB +#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC +#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD +#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE +#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF +#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 +typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); +typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); +typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); +typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); +typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); +typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); +GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); +GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); +GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); +GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); +GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#endif +#endif /* GL_INTEL_performance_query */ + +#ifndef GL_MESAX_texture_stack +#define GL_MESAX_texture_stack 1 +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +#endif /* GL_MESAX_texture_stack */ + +#ifndef GL_MESA_pack_invert +#define GL_MESA_pack_invert 1 +#define GL_PACK_INVERT_MESA 0x8758 +#endif /* GL_MESA_pack_invert */ + +#ifndef GL_MESA_resize_buffers +#define GL_MESA_resize_buffers 1 +typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glResizeBuffersMESA (void); +#endif +#endif /* GL_MESA_resize_buffers */ + +#ifndef GL_MESA_window_pos +#define GL_MESA_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); +#endif +#endif /* GL_MESA_window_pos */ + +#ifndef GL_MESA_ycbcr_texture +#define GL_MESA_ycbcr_texture 1 +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_YCBCR_MESA 0x8757 +#endif /* GL_MESA_ycbcr_texture */ + +#ifndef GL_NVX_conditional_render +#define GL_NVX_conditional_render 1 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); +GLAPI void APIENTRY glEndConditionalRenderNVX (void); +#endif +#endif /* GL_NVX_conditional_render */ + +#ifndef GL_NVX_gpu_memory_info +#define GL_NVX_gpu_memory_info 1 +#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 +#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 +#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 +#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A +#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B +#endif /* GL_NVX_gpu_memory_info */ + +#ifndef GL_NV_bindless_multi_draw_indirect +#define GL_NV_bindless_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#endif +#endif /* GL_NV_bindless_multi_draw_indirect */ + +#ifndef GL_NV_bindless_texture +#define GL_NV_bindless_texture 1 +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); +#endif +#endif /* GL_NV_bindless_texture */ + +#ifndef GL_NV_blend_equation_advanced +#define GL_NV_blend_equation_advanced 1 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLUE_NV 0x1905 +#define GL_COLORBURN_NV 0x929A +#define GL_COLORDODGE_NV 0x9299 +#define GL_CONJOINT_NV 0x9284 +#define GL_CONTRAST_NV 0x92A1 +#define GL_DARKEN_NV 0x9297 +#define GL_DIFFERENCE_NV 0x929E +#define GL_DISJOINT_NV 0x9283 +#define GL_DST_ATOP_NV 0x928F +#define GL_DST_IN_NV 0x928B +#define GL_DST_NV 0x9287 +#define GL_DST_OUT_NV 0x928D +#define GL_DST_OVER_NV 0x9289 +#define GL_EXCLUSION_NV 0x92A0 +#define GL_GREEN_NV 0x1904 +#define GL_HARDLIGHT_NV 0x929B +#define GL_HARDMIX_NV 0x92A9 +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_INVERT_OVG_NV 0x92B4 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_LIGHTEN_NV 0x9298 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_MINUS_NV 0x929F +#define GL_MULTIPLY_NV 0x9294 +#define GL_OVERLAY_NV 0x9296 +#define GL_PINLIGHT_NV 0x92A8 +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_PLUS_NV 0x9291 +#define GL_RED_NV 0x1903 +#define GL_SCREEN_NV 0x9295 +#define GL_SOFTLIGHT_NV 0x929C +#define GL_SRC_ATOP_NV 0x928E +#define GL_SRC_IN_NV 0x928A +#define GL_SRC_NV 0x9286 +#define GL_SRC_OUT_NV 0x928C +#define GL_SRC_OVER_NV 0x9288 +#define GL_UNCORRELATED_NV 0x9282 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_XOR_NV 0x1506 +typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); +GLAPI void APIENTRY glBlendBarrierNV (void); +#endif +#endif /* GL_NV_blend_equation_advanced */ + +#ifndef GL_NV_blend_equation_advanced_coherent +#define GL_NV_blend_equation_advanced_coherent 1 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#endif /* GL_NV_blend_equation_advanced_coherent */ + +#ifndef GL_NV_blend_square +#define GL_NV_blend_square 1 +#endif /* GL_NV_blend_square */ + +#ifndef GL_NV_compute_program5 +#define GL_NV_compute_program5 1 +#define GL_COMPUTE_PROGRAM_NV 0x90FB +#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC +#endif /* GL_NV_compute_program5 */ + +#ifndef GL_NV_conditional_render +#define GL_NV_conditional_render 1 +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRenderNV (void); +#endif +#endif /* GL_NV_conditional_render */ + +#ifndef GL_NV_copy_depth_to_color +#define GL_NV_copy_depth_to_color 1 +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#endif /* GL_NV_copy_depth_to_color */ + +#ifndef GL_NV_copy_image +#define GL_NV_copy_image 1 +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#endif +#endif /* GL_NV_copy_image */ + +#ifndef GL_NV_deep_texture3D +#define GL_NV_deep_texture3D 1 +#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 +#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 +#endif /* GL_NV_deep_texture3D */ + +#ifndef GL_NV_depth_buffer_float +#define GL_NV_depth_buffer_float 1 +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF +typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); +typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); +GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); +#endif +#endif /* GL_NV_depth_buffer_float */ + +#ifndef GL_NV_depth_clamp +#define GL_NV_depth_clamp 1 +#define GL_DEPTH_CLAMP_NV 0x864F +#endif /* GL_NV_depth_clamp */ + +#ifndef GL_NV_draw_texture +#define GL_NV_draw_texture 1 +typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#endif +#endif /* GL_NV_draw_texture */ + +#ifndef GL_NV_evaluators +#define GL_NV_evaluators 1 +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); +#endif +#endif /* GL_NV_evaluators */ + +#ifndef GL_NV_explicit_multisample +#define GL_NV_explicit_multisample 1 +#define GL_SAMPLE_POSITION_NV 0x8E50 +#define GL_SAMPLE_MASK_NV 0x8E51 +#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 +#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 +#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 +#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 +#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 +#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 +#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); +GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); +#endif +#endif /* GL_NV_explicit_multisample */ + +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); +GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GLAPI void APIENTRY glFinishFenceNV (GLuint fence); +GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +#endif /* GL_NV_fence */ + +#ifndef GL_NV_float_buffer +#define GL_NV_float_buffer 1 +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#endif /* GL_NV_float_buffer */ + +#ifndef GL_NV_fog_distance +#define GL_NV_fog_distance 1 +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_EYE_RADIAL_NV 0x855B +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C +#endif /* GL_NV_fog_distance */ + +#ifndef GL_NV_fragment_program +#define GL_NV_fragment_program 1 +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#endif +#endif /* GL_NV_fragment_program */ + +#ifndef GL_NV_fragment_program2 +#define GL_NV_fragment_program2 1 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#endif /* GL_NV_fragment_program2 */ + +#ifndef GL_NV_fragment_program4 +#define GL_NV_fragment_program4 1 +#endif /* GL_NV_fragment_program4 */ + +#ifndef GL_NV_fragment_program_option +#define GL_NV_fragment_program_option 1 +#endif /* GL_NV_fragment_program_option */ + +#ifndef GL_NV_framebuffer_multisample_coverage +#define GL_NV_framebuffer_multisample_coverage 1 +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_NV_framebuffer_multisample_coverage */ + +#ifndef GL_NV_geometry_program4 +#define GL_NV_geometry_program4 1 +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 +typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); +GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_NV_geometry_program4 */ + +#ifndef GL_NV_geometry_shader4 +#define GL_NV_geometry_shader4 1 +#endif /* GL_NV_geometry_shader4 */ + +#ifndef GL_NV_gpu_program4 +#define GL_NV_gpu_program4 1 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); +#endif +#endif /* GL_NV_gpu_program4 */ + +#ifndef GL_NV_gpu_program5 +#define GL_NV_gpu_program5 1 +#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C +#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F +#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); +#endif +#endif /* GL_NV_gpu_program5 */ + +#ifndef GL_NV_gpu_program5_mem_extended +#define GL_NV_gpu_program5_mem_extended 1 +#endif /* GL_NV_gpu_program5_mem_extended */ + +#ifndef GL_NV_gpu_shader5 +#define GL_NV_gpu_shader5 1 +#endif /* GL_NV_gpu_shader5 */ + +#ifndef GL_NV_half_float +#define GL_NV_half_float 1 +typedef unsigned short GLhalfNV; +#define GL_HALF_FLOAT_NV 0x140B +typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); +typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); +typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); +GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); +GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); +GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); +GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); +GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); +GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); +GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +#endif +#endif /* GL_NV_half_float */ + +#ifndef GL_NV_light_max_exponent +#define GL_NV_light_max_exponent 1 +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 +#endif /* GL_NV_light_max_exponent */ + +#ifndef GL_NV_multisample_coverage +#define GL_NV_multisample_coverage 1 +#define GL_COLOR_SAMPLES_NV 0x8E20 +#endif /* GL_NV_multisample_coverage */ + +#ifndef GL_NV_multisample_filter_hint +#define GL_NV_multisample_filter_hint 1 +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#endif /* GL_NV_multisample_filter_hint */ + +#ifndef GL_NV_occlusion_query +#define GL_NV_occlusion_query 1 +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glEndOcclusionQueryNV (void); +GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_occlusion_query */ + +#ifndef GL_NV_packed_depth_stencil +#define GL_NV_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#endif /* GL_NV_packed_depth_stencil */ + +#ifndef GL_NV_parameter_buffer_object +#define GL_NV_parameter_buffer_object 1 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#endif +#endif /* GL_NV_parameter_buffer_object */ + +#ifndef GL_NV_parameter_buffer_object2 +#define GL_NV_parameter_buffer_object2 1 +#endif /* GL_NV_parameter_buffer_object2 */ + +#ifndef GL_NV_path_rendering +#define GL_NV_path_rendering 1 +#define GL_PATH_FORMAT_SVG_NV 0x9070 +#define GL_PATH_FORMAT_PS_NV 0x9071 +#define GL_STANDARD_FONT_NAME_NV 0x9072 +#define GL_SYSTEM_FONT_NAME_NV 0x9073 +#define GL_FILE_NAME_NV 0x9074 +#define GL_PATH_STROKE_WIDTH_NV 0x9075 +#define GL_PATH_END_CAPS_NV 0x9076 +#define GL_PATH_INITIAL_END_CAP_NV 0x9077 +#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 +#define GL_PATH_JOIN_STYLE_NV 0x9079 +#define GL_PATH_MITER_LIMIT_NV 0x907A +#define GL_PATH_DASH_CAPS_NV 0x907B +#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C +#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D +#define GL_PATH_DASH_OFFSET_NV 0x907E +#define GL_PATH_CLIENT_LENGTH_NV 0x907F +#define GL_PATH_FILL_MODE_NV 0x9080 +#define GL_PATH_FILL_MASK_NV 0x9081 +#define GL_PATH_FILL_COVER_MODE_NV 0x9082 +#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 +#define GL_PATH_STROKE_MASK_NV 0x9084 +#define GL_COUNT_UP_NV 0x9088 +#define GL_COUNT_DOWN_NV 0x9089 +#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A +#define GL_CONVEX_HULL_NV 0x908B +#define GL_BOUNDING_BOX_NV 0x908D +#define GL_TRANSLATE_X_NV 0x908E +#define GL_TRANSLATE_Y_NV 0x908F +#define GL_TRANSLATE_2D_NV 0x9090 +#define GL_TRANSLATE_3D_NV 0x9091 +#define GL_AFFINE_2D_NV 0x9092 +#define GL_AFFINE_3D_NV 0x9094 +#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 +#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 +#define GL_UTF8_NV 0x909A +#define GL_UTF16_NV 0x909B +#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C +#define GL_PATH_COMMAND_COUNT_NV 0x909D +#define GL_PATH_COORD_COUNT_NV 0x909E +#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F +#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 +#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 +#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 +#define GL_SQUARE_NV 0x90A3 +#define GL_ROUND_NV 0x90A4 +#define GL_TRIANGULAR_NV 0x90A5 +#define GL_BEVEL_NV 0x90A6 +#define GL_MITER_REVERT_NV 0x90A7 +#define GL_MITER_TRUNCATE_NV 0x90A8 +#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 +#define GL_USE_MISSING_GLYPH_NV 0x90AA +#define GL_PATH_ERROR_POSITION_NV 0x90AB +#define GL_PATH_FOG_GEN_MODE_NV 0x90AC +#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD +#define GL_ADJACENT_PAIRS_NV 0x90AE +#define GL_FIRST_TO_REST_NV 0x90AF +#define GL_PATH_GEN_MODE_NV 0x90B0 +#define GL_PATH_GEN_COEFF_NV 0x90B1 +#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 +#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 +#define GL_PATH_STENCIL_FUNC_NV 0x90B7 +#define GL_PATH_STENCIL_REF_NV 0x90B8 +#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 +#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD +#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE +#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF +#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_MOVE_TO_NV 0x02 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_LINE_TO_NV 0x04 +#define GL_RELATIVE_LINE_TO_NV 0x05 +#define GL_HORIZONTAL_LINE_TO_NV 0x06 +#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 +#define GL_VERTICAL_LINE_TO_NV 0x08 +#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 +#define GL_QUADRATIC_CURVE_TO_NV 0x0A +#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B +#define GL_CUBIC_CURVE_TO_NV 0x0C +#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D +#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E +#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F +#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 +#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 +#define GL_SMALL_CCW_ARC_TO_NV 0x12 +#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 +#define GL_SMALL_CW_ARC_TO_NV 0x14 +#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 +#define GL_LARGE_CCW_ARC_TO_NV 0x16 +#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 +#define GL_LARGE_CW_ARC_TO_NV 0x18 +#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 +#define GL_RESTART_PATH_NV 0xF0 +#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 +#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 +#define GL_RECT_NV 0xF6 +#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 +#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA +#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC +#define GL_ARC_TO_NV 0xFE +#define GL_RELATIVE_ARC_TO_NV 0xFF +#define GL_BOLD_BIT_NV 0x01 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 +#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 +#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 +#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 +#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 +#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 +#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 +#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 +#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 +#define GL_FONT_ASCENDER_BIT_NV 0x00200000 +#define GL_FONT_DESCENDER_BIT_NV 0x00400000 +#define GL_FONT_HEIGHT_BIT_NV 0x00800000 +#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 +#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 +#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 +#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 +#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_SECONDARY_COLOR_NV 0x852D +typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); +typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); +typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); +typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); +typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); +typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); +typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); +typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); +typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); +typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); +typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); +typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); +typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); +typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); +GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); +GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); +GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); +GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); +GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); +GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); +GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); +GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); +GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); +GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); +GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); +GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); +GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); +GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); +GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); +GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); +GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); +GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); +GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); +GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); +GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +#endif +#endif /* GL_NV_path_rendering */ + +#ifndef GL_NV_pixel_data_range +#define GL_NV_pixel_data_range 1 +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); +#endif +#endif /* GL_NV_pixel_data_range */ + +#ifndef GL_NV_point_sprite +#define GL_NV_point_sprite 1 +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); +#endif +#endif /* GL_NV_point_sprite */ + +#ifndef GL_NV_present_video +#define GL_NV_present_video 1 +#define GL_FRAME_NV 0x8E26 +#define GL_FIELDS_NV 0x8E27 +#define GL_CURRENT_TIME_NV 0x8E28 +#define GL_NUM_FILL_STREAMS_NV 0x8E29 +#define GL_PRESENT_TIME_NV 0x8E2A +#define GL_PRESENT_DURATION_NV 0x8E2B +typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); +GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_NV_present_video */ + +#ifndef GL_NV_primitive_restart +#define GL_NV_primitive_restart 1 +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPrimitiveRestartNV (void); +GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); +#endif +#endif /* GL_NV_primitive_restart */ + +#ifndef GL_NV_register_combiners +#define GL_NV_register_combiners 1 +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_SPARE0_NV 0x852E +#define GL_SPARE1_NV 0x852F +#define GL_DISCARD_NV 0x8530 +#define GL_E_TIMES_F_NV 0x8531 +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); +GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); +GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); +#endif +#endif /* GL_NV_register_combiners */ + +#ifndef GL_NV_register_combiners2 +#define GL_NV_register_combiners2 1 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); +#endif +#endif /* GL_NV_register_combiners2 */ + +#ifndef GL_NV_shader_atomic_counters +#define GL_NV_shader_atomic_counters 1 +#endif /* GL_NV_shader_atomic_counters */ + +#ifndef GL_NV_shader_atomic_float +#define GL_NV_shader_atomic_float 1 +#endif /* GL_NV_shader_atomic_float */ + +#ifndef GL_NV_shader_buffer_load +#define GL_NV_shader_buffer_load 1 +#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D +#define GL_GPU_ADDRESS_NV 0x8F34 +#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 +typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); +typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); +typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); +typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); +typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); +GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); +GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); +GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); +GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); +GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); +GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); +GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); +GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); +GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_NV_shader_buffer_load */ + +#ifndef GL_NV_shader_buffer_store +#define GL_NV_shader_buffer_store 1 +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +#endif /* GL_NV_shader_buffer_store */ + +#ifndef GL_NV_shader_storage_buffer_object +#define GL_NV_shader_storage_buffer_object 1 +#endif /* GL_NV_shader_storage_buffer_object */ + +#ifndef GL_NV_shader_thread_group +#define GL_NV_shader_thread_group 1 +#define GL_WARP_SIZE_NV 0x9339 +#define GL_WARPS_PER_SM_NV 0x933A +#define GL_SM_COUNT_NV 0x933B +#endif /* GL_NV_shader_thread_group */ + +#ifndef GL_NV_shader_thread_shuffle +#define GL_NV_shader_thread_shuffle 1 +#endif /* GL_NV_shader_thread_shuffle */ + +#ifndef GL_NV_tessellation_program5 +#define GL_NV_tessellation_program5 1 +#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 +#define GL_TESS_CONTROL_PROGRAM_NV 0x891E +#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F +#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 +#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 +#endif /* GL_NV_tessellation_program5 */ + +#ifndef GL_NV_texgen_emboss +#define GL_NV_texgen_emboss 1 +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_MAP_NV 0x855F +#endif /* GL_NV_texgen_emboss */ + +#ifndef GL_NV_texgen_reflection +#define GL_NV_texgen_reflection 1 +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_REFLECTION_MAP_NV 0x8512 +#endif /* GL_NV_texgen_reflection */ + +#ifndef GL_NV_texture_barrier +#define GL_NV_texture_barrier 1 +typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureBarrierNV (void); +#endif +#endif /* GL_NV_texture_barrier */ + +#ifndef GL_NV_texture_compression_vtc +#define GL_NV_texture_compression_vtc 1 +#endif /* GL_NV_texture_compression_vtc */ + +#ifndef GL_NV_texture_env_combine4 +#define GL_NV_texture_env_combine4 1 +#define GL_COMBINE4_NV 0x8503 +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPERAND3_ALPHA_NV 0x859B +#endif /* GL_NV_texture_env_combine4 */ + +#ifndef GL_NV_texture_expand_normal +#define GL_NV_texture_expand_normal 1 +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#endif /* GL_NV_texture_expand_normal */ + +#ifndef GL_NV_texture_multisample +#define GL_NV_texture_multisample 1 +#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 +#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#endif +#endif /* GL_NV_texture_multisample */ + +#ifndef GL_NV_texture_rectangle +#define GL_NV_texture_rectangle 1 +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#endif /* GL_NV_texture_rectangle */ + +#ifndef GL_NV_texture_shader +#define GL_NV_texture_shader 1 +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_CULL_MODES_NV 0x86E0 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_HI_SCALE_NV 0x870E +#define GL_LO_SCALE_NV 0x870F +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_SCALE_NV 0x8711 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_HI_BIAS_NV 0x8714 +#define GL_LO_BIAS_NV 0x8715 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DT_BIAS_NV 0x8717 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#endif /* GL_NV_texture_shader */ + +#ifndef GL_NV_texture_shader2 +#define GL_NV_texture_shader2 1 +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#endif /* GL_NV_texture_shader2 */ + +#ifndef GL_NV_texture_shader3 +#define GL_NV_texture_shader3 1 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_HILO8_NV 0x885E +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#endif /* GL_NV_texture_shader3 */ + +#ifndef GL_NV_transform_feedback +#define GL_NV_transform_feedback 1 +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F +#define GL_LAYER_NV 0x8DAA +#define GL_NEXT_BUFFER_NV -2 +#define GL_SKIP_COMPONENTS4_NV -3 +#define GL_SKIP_COMPONENTS3_NV -4 +#define GL_SKIP_COMPONENTS2_NV -5 +#define GL_SKIP_COMPONENTS1_NV -6 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackNV (void); +GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode); +GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); +GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); +GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#endif +#endif /* GL_NV_transform_feedback */ + +#ifndef GL_NV_transform_feedback2 +#define GL_NV_transform_feedback2 1 +#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedbackNV (void); +GLAPI void APIENTRY glResumeTransformFeedbackNV (void); +GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); +#endif +#endif /* GL_NV_transform_feedback2 */ + +#ifndef GL_NV_vdpau_interop +#define GL_NV_vdpau_interop 1 +typedef GLintptr GLvdpauSurfaceNV; +#define GL_SURFACE_STATE_NV 0x86EB +#define GL_SURFACE_REGISTERED_NV 0x86FD +#define GL_SURFACE_MAPPED_NV 0x8700 +#define GL_WRITE_DISCARD_NV 0x88BE +typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress); +typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); +typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress); +GLAPI void APIENTRY glVDPAUFiniNV (void); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); +GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#endif +#endif /* GL_NV_vdpau_interop */ + +#ifndef GL_NV_vertex_array_range +#define GL_NV_vertex_array_range 1 +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); +GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer); +#endif +#endif /* GL_NV_vertex_array_range */ + +#ifndef GL_NV_vertex_array_range2 +#define GL_NV_vertex_array_range2 1 +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#endif /* GL_NV_vertex_array_range2 */ + +#ifndef GL_NV_vertex_attrib_integer_64bit +#define GL_NV_vertex_attrib_integer_64bit 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); +GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +#endif +#endif /* GL_NV_vertex_attrib_integer_64bit */ + +#ifndef GL_NV_vertex_buffer_unified_memory +#define GL_NV_vertex_buffer_unified_memory 1 +#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E +#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F +#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 +#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 +#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 +#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 +#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 +#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 +#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 +#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 +#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 +#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 +#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A +#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B +#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C +#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D +#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E +#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F +#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 +#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 +#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 +#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 +#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 +#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 +#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 +typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); +GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); +#endif +#endif /* GL_NV_vertex_buffer_unified_memory */ + +#ifndef GL_NV_vertex_program +#define GL_NV_vertex_program 1 +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_IDENTITY_NV 0x862A +#define GL_INVERSE_NV 0x862B +#define GL_TRANSPOSE_NV 0x862C +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_NV 0x8637 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); +typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); +typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); +GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); +GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); +GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); +GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); +GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); +GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); +GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); +#endif +#endif /* GL_NV_vertex_program */ + +#ifndef GL_NV_vertex_program1_1 +#define GL_NV_vertex_program1_1 1 +#endif /* GL_NV_vertex_program1_1 */ + +#ifndef GL_NV_vertex_program2 +#define GL_NV_vertex_program2 1 +#endif /* GL_NV_vertex_program2 */ + +#ifndef GL_NV_vertex_program2_option +#define GL_NV_vertex_program2_option 1 +#endif /* GL_NV_vertex_program2_option */ + +#ifndef GL_NV_vertex_program3 +#define GL_NV_vertex_program3 1 +#endif /* GL_NV_vertex_program3 */ + +#ifndef GL_NV_vertex_program4 +#define GL_NV_vertex_program4 1 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_vertex_program4 */ + +#ifndef GL_NV_video_capture +#define GL_NV_video_capture 1 +#define GL_VIDEO_BUFFER_NV 0x9020 +#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 +#define GL_FIELD_UPPER_NV 0x9022 +#define GL_FIELD_LOWER_NV 0x9023 +#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 +#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 +#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 +#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 +#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 +#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 +#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A +#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B +#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C +#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D +#define GL_PARTIAL_SUCCESS_NV 0x902E +#define GL_SUCCESS_NV 0x902F +#define GL_FAILURE_NV 0x9030 +#define GL_YCBYCR8_422_NV 0x9031 +#define GL_YCBAYCR8A_4224_NV 0x9032 +#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 +#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 +#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 +#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 +#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 +#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 +#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 +#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A +#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B +#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C +typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#endif +#endif /* GL_NV_video_capture */ + +#ifndef GL_OML_interlace +#define GL_OML_interlace 1 +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 +#endif /* GL_OML_interlace */ + +#ifndef GL_OML_resample +#define GL_OML_resample 1 +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#endif /* GL_OML_resample */ + +#ifndef GL_OML_subsample +#define GL_OML_subsample 1 +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#endif /* GL_OML_subsample */ + +#ifndef GL_PGI_misc_hints +#define GL_PGI_misc_hints 1 +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 +#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD +#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 +#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C +#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E +#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F +#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 +#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 +#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 +#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 +#define GL_CLIP_NEAR_HINT_PGI 0x1A220 +#define GL_CLIP_FAR_HINT_PGI 0x1A221 +#define GL_WIDE_LINE_HINT_PGI 0x1A222 +#define GL_BACK_NORMALS_HINT_PGI 0x1A223 +typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); +#endif +#endif /* GL_PGI_misc_hints */ + +#ifndef GL_PGI_vertex_hints +#define GL_PGI_vertex_hints 1 +#define GL_VERTEX_DATA_HINT_PGI 0x1A22A +#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B +#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C +#define GL_MAX_VERTEX_HINT_PGI 0x1A22D +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#endif /* GL_PGI_vertex_hints */ + +#ifndef GL_REND_screen_coordinates +#define GL_REND_screen_coordinates 1 +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#endif /* GL_REND_screen_coordinates */ + +#ifndef GL_S3_s3tc +#define GL_S3_s3tc 1 +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA4_DXT5_S3TC 0x83A5 +#endif /* GL_S3_s3tc */ + +#ifndef GL_SGIS_detail_texture +#define GL_SGIS_detail_texture 1 +#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 +#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 +#define GL_LINEAR_DETAIL_SGIS 0x8097 +#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 +#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 +#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A +#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B +#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C +typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_detail_texture */ + +#ifndef GL_SGIS_fog_function +#define GL_SGIS_fog_function 1 +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); +#endif +#endif /* GL_SGIS_fog_function */ + +#ifndef GL_SGIS_generate_mipmap +#define GL_SGIS_generate_mipmap 1 +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#endif /* GL_SGIS_generate_mipmap */ + +#ifndef GL_SGIS_multisample +#define GL_SGIS_multisample 1 +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); +#endif +#endif /* GL_SGIS_multisample */ + +#ifndef GL_SGIS_pixel_texture +#define GL_SGIS_pixel_texture 1 +#define GL_PIXEL_TEXTURE_SGIS 0x8353 +#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 +#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 +#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); +#endif +#endif /* GL_SGIS_pixel_texture */ + +#ifndef GL_SGIS_point_line_texgen +#define GL_SGIS_point_line_texgen 1 +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_OBJECT_LINE_SGIS 0x81F7 +#endif /* GL_SGIS_point_line_texgen */ + +#ifndef GL_SGIS_point_parameters +#define GL_SGIS_point_parameters 1 +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_SGIS_point_parameters */ + +#ifndef GL_SGIS_sharpen_texture +#define GL_SGIS_sharpen_texture 1 +#define GL_LINEAR_SHARPEN_SGIS 0x80AD +#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE +#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF +#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 +typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_sharpen_texture */ + +#ifndef GL_SGIS_texture4D +#define GL_SGIS_texture4D 1 +#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 +#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 +#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 +#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 +#define GL_TEXTURE_4D_SGIS 0x8134 +#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 +#define GL_TEXTURE_4DSIZE_SGIS 0x8136 +#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 +#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 +#define GL_TEXTURE_4D_BINDING_SGIS 0x814F +typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_SGIS_texture4D */ + +#ifndef GL_SGIS_texture_border_clamp +#define GL_SGIS_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#endif /* GL_SGIS_texture_border_clamp */ + +#ifndef GL_SGIS_texture_color_mask +#define GL_SGIS_texture_color_mask 1 +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#endif +#endif /* GL_SGIS_texture_color_mask */ + +#ifndef GL_SGIS_texture_edge_clamp +#define GL_SGIS_texture_edge_clamp 1 +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#endif /* GL_SGIS_texture_edge_clamp */ + +#ifndef GL_SGIS_texture_filter4 +#define GL_SGIS_texture_filter4 1 +#define GL_FILTER4_SGIS 0x8146 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); +typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); +GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#endif +#endif /* GL_SGIS_texture_filter4 */ + +#ifndef GL_SGIS_texture_lod +#define GL_SGIS_texture_lod 1 +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D +#endif /* GL_SGIS_texture_lod */ + +#ifndef GL_SGIS_texture_select +#define GL_SGIS_texture_select 1 +#define GL_DUAL_ALPHA4_SGIS 0x8110 +#define GL_DUAL_ALPHA8_SGIS 0x8111 +#define GL_DUAL_ALPHA12_SGIS 0x8112 +#define GL_DUAL_ALPHA16_SGIS 0x8113 +#define GL_DUAL_LUMINANCE4_SGIS 0x8114 +#define GL_DUAL_LUMINANCE8_SGIS 0x8115 +#define GL_DUAL_LUMINANCE12_SGIS 0x8116 +#define GL_DUAL_LUMINANCE16_SGIS 0x8117 +#define GL_DUAL_INTENSITY4_SGIS 0x8118 +#define GL_DUAL_INTENSITY8_SGIS 0x8119 +#define GL_DUAL_INTENSITY12_SGIS 0x811A +#define GL_DUAL_INTENSITY16_SGIS 0x811B +#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C +#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D +#define GL_QUAD_ALPHA4_SGIS 0x811E +#define GL_QUAD_ALPHA8_SGIS 0x811F +#define GL_QUAD_LUMINANCE4_SGIS 0x8120 +#define GL_QUAD_LUMINANCE8_SGIS 0x8121 +#define GL_QUAD_INTENSITY4_SGIS 0x8122 +#define GL_QUAD_INTENSITY8_SGIS 0x8123 +#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 +#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 +#endif /* GL_SGIS_texture_select */ + +#ifndef GL_SGIX_async +#define GL_SGIX_async 1 +#define GL_ASYNC_MARKER_SGIX 0x8329 +typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); +typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); +typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); +typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); +GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); +GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); +GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); +GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); +GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); +#endif +#endif /* GL_SGIX_async */ + +#ifndef GL_SGIX_async_histogram +#define GL_SGIX_async_histogram 1 +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#endif /* GL_SGIX_async_histogram */ + +#ifndef GL_SGIX_async_pixel +#define GL_SGIX_async_pixel 1 +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 +#endif /* GL_SGIX_async_pixel */ + +#ifndef GL_SGIX_blend_alpha_minmax +#define GL_SGIX_blend_alpha_minmax 1 +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_MAX_SGIX 0x8321 +#endif /* GL_SGIX_blend_alpha_minmax */ + +#ifndef GL_SGIX_calligraphic_fragment +#define GL_SGIX_calligraphic_fragment 1 +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#endif /* GL_SGIX_calligraphic_fragment */ + +#ifndef GL_SGIX_clipmap +#define GL_SGIX_clipmap 1 +#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 +#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 +#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 +#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 +#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 +#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 +#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 +#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 +#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 +#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#endif /* GL_SGIX_clipmap */ + +#ifndef GL_SGIX_convolution_accuracy +#define GL_SGIX_convolution_accuracy 1 +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#endif /* GL_SGIX_convolution_accuracy */ + +#ifndef GL_SGIX_depth_pass_instrument +#define GL_SGIX_depth_pass_instrument 1 +#endif /* GL_SGIX_depth_pass_instrument */ + +#ifndef GL_SGIX_depth_texture +#define GL_SGIX_depth_texture 1 +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 +#endif /* GL_SGIX_depth_texture */ + +#ifndef GL_SGIX_flush_raster +#define GL_SGIX_flush_raster 1 +typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushRasterSGIX (void); +#endif +#endif /* GL_SGIX_flush_raster */ + +#ifndef GL_SGIX_fog_offset +#define GL_SGIX_fog_offset 1 +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#endif /* GL_SGIX_fog_offset */ + +#ifndef GL_SGIX_fragment_lighting +#define GL_SGIX_fragment_lighting 1 +#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 +#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 +#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 +#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 +#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 +#define GL_LIGHT_ENV_MODE_SGIX 0x8407 +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B +#define GL_FRAGMENT_LIGHT0_SGIX 0x840C +#define GL_FRAGMENT_LIGHT1_SGIX 0x840D +#define GL_FRAGMENT_LIGHT2_SGIX 0x840E +#define GL_FRAGMENT_LIGHT3_SGIX 0x840F +#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 +#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 +#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 +#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 +typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); +GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); +GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); +#endif +#endif /* GL_SGIX_fragment_lighting */ + +#ifndef GL_SGIX_framezoom +#define GL_SGIX_framezoom 1 +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); +#endif +#endif /* GL_SGIX_framezoom */ + +#ifndef GL_SGIX_igloo_interface +#define GL_SGIX_igloo_interface 1 +typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params); +#endif +#endif /* GL_SGIX_igloo_interface */ + +#ifndef GL_SGIX_instruments +#define GL_SGIX_instruments 1 +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); +typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); +typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); +typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); +GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); +GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); +GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); +GLAPI void APIENTRY glStartInstrumentsSGIX (void); +GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); +#endif +#endif /* GL_SGIX_instruments */ + +#ifndef GL_SGIX_interlace +#define GL_SGIX_interlace 1 +#define GL_INTERLACE_SGIX 0x8094 +#endif /* GL_SGIX_interlace */ + +#ifndef GL_SGIX_ir_instrument1 +#define GL_SGIX_ir_instrument1 1 +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#endif /* GL_SGIX_ir_instrument1 */ + +#ifndef GL_SGIX_list_priority +#define GL_SGIX_list_priority 1 +#define GL_LIST_PRIORITY_SGIX 0x8182 +typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); +GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); +GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); +GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_list_priority */ + +#ifndef GL_SGIX_pixel_texture +#define GL_SGIX_pixel_texture 1 +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); +#endif +#endif /* GL_SGIX_pixel_texture */ + +#ifndef GL_SGIX_pixel_tiles +#define GL_SGIX_pixel_tiles 1 +#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E +#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F +#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 +#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 +#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 +#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 +#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 +#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 +#endif /* GL_SGIX_pixel_tiles */ + +#ifndef GL_SGIX_polynomial_ffd +#define GL_SGIX_polynomial_ffd 1 +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 +#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 +#define GL_DEFORMATIONS_MASK_SGIX 0x8196 +#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); +GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); +#endif +#endif /* GL_SGIX_polynomial_ffd */ + +#ifndef GL_SGIX_reference_plane +#define GL_SGIX_reference_plane 1 +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); +#endif +#endif /* GL_SGIX_reference_plane */ + +#ifndef GL_SGIX_resample +#define GL_SGIX_resample 1 +#define GL_PACK_RESAMPLE_SGIX 0x842C +#define GL_UNPACK_RESAMPLE_SGIX 0x842D +#define GL_RESAMPLE_REPLICATE_SGIX 0x842E +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#endif /* GL_SGIX_resample */ + +#ifndef GL_SGIX_scalebias_hint +#define GL_SGIX_scalebias_hint 1 +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#endif /* GL_SGIX_scalebias_hint */ + +#ifndef GL_SGIX_shadow +#define GL_SGIX_shadow 1 +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D +#endif /* GL_SGIX_shadow */ + +#ifndef GL_SGIX_shadow_ambient +#define GL_SGIX_shadow_ambient 1 +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#endif /* GL_SGIX_shadow_ambient */ + +#ifndef GL_SGIX_sprite +#define GL_SGIX_sprite 1 +#define GL_SPRITE_SGIX 0x8148 +#define GL_SPRITE_MODE_SGIX 0x8149 +#define GL_SPRITE_AXIS_SGIX 0x814A +#define GL_SPRITE_TRANSLATION_SGIX 0x814B +#define GL_SPRITE_AXIAL_SGIX 0x814C +#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D +#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_sprite */ + +#ifndef GL_SGIX_subsample +#define GL_SGIX_subsample 1 +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 +#endif /* GL_SGIX_subsample */ + +#ifndef GL_SGIX_tag_sample_buffer +#define GL_SGIX_tag_sample_buffer 1 +typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTagSampleBufferSGIX (void); +#endif +#endif /* GL_SGIX_tag_sample_buffer */ + +#ifndef GL_SGIX_texture_add_env +#define GL_SGIX_texture_add_env 1 +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#endif /* GL_SGIX_texture_add_env */ + +#ifndef GL_SGIX_texture_coordinate_clamp +#define GL_SGIX_texture_coordinate_clamp 1 +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#endif /* GL_SGIX_texture_coordinate_clamp */ + +#ifndef GL_SGIX_texture_lod_bias +#define GL_SGIX_texture_lod_bias 1 +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#endif /* GL_SGIX_texture_lod_bias */ + +#ifndef GL_SGIX_texture_multi_buffer +#define GL_SGIX_texture_multi_buffer 1 +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#endif /* GL_SGIX_texture_multi_buffer */ + +#ifndef GL_SGIX_texture_scale_bias +#define GL_SGIX_texture_scale_bias 1 +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C +#endif /* GL_SGIX_texture_scale_bias */ + +#ifndef GL_SGIX_vertex_preclip +#define GL_SGIX_vertex_preclip 1 +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#endif /* GL_SGIX_vertex_preclip */ + +#ifndef GL_SGIX_ycrcb +#define GL_SGIX_ycrcb 1 +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#endif /* GL_SGIX_ycrcb */ + +#ifndef GL_SGIX_ycrcb_subsample +#define GL_SGIX_ycrcb_subsample 1 +#endif /* GL_SGIX_ycrcb_subsample */ + +#ifndef GL_SGIX_ycrcba +#define GL_SGIX_ycrcba 1 +#define GL_YCRCB_SGIX 0x8318 +#define GL_YCRCBA_SGIX 0x8319 +#endif /* GL_SGIX_ycrcba */ + +#ifndef GL_SGI_color_matrix +#define GL_SGI_color_matrix 1 +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB +#endif /* GL_SGI_color_matrix */ + +#ifndef GL_SGI_color_table +#define GL_SGI_color_table 1 +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF +typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); +#endif +#endif /* GL_SGI_color_table */ + +#ifndef GL_SGI_texture_color_table +#define GL_SGI_texture_color_table 1 +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD +#endif /* GL_SGI_texture_color_table */ + +#ifndef GL_SUNX_constant_data +#define GL_SUNX_constant_data 1 +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 +typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFinishTextureSUNX (void); +#endif +#endif /* GL_SUNX_constant_data */ + +#ifndef GL_SUN_convolution_border_modes +#define GL_SUN_convolution_border_modes 1 +#define GL_WRAP_BORDER_SUN 0x81D4 +#endif /* GL_SUN_convolution_border_modes */ + +#ifndef GL_SUN_global_alpha +#define GL_SUN_global_alpha 1 +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); +GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); +GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); +GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); +GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); +GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); +#endif +#endif /* GL_SUN_global_alpha */ + +#ifndef GL_SUN_mesh_array +#define GL_SUN_mesh_array 1 +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 +typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); +#endif +#endif /* GL_SUN_mesh_array */ + +#ifndef GL_SUN_slice_accum +#define GL_SUN_slice_accum 1 +#define GL_SLICE_ACCUM_SUN 0x85CC +#endif /* GL_SUN_slice_accum */ + +#ifndef GL_SUN_triangle_list +#define GL_SUN_triangle_list 1 +#define GL_RESTART_SUN 0x0001 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); +GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); +GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); +GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); +GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); +GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); +GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer); +#endif +#endif /* GL_SUN_triangle_list */ + +#ifndef GL_SUN_vertex +#define GL_SUN_vertex 1 +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#endif +#endif /* GL_SUN_vertex */ + +#ifndef GL_WIN_phong_shading +#define GL_WIN_phong_shading 1 +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB +#endif /* GL_WIN_phong_shading */ + +#ifndef GL_WIN_specular_fog +#define GL_WIN_specular_fog 1 +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#endif /* GL_WIN_specular_fog */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles.h new file mode 100644 index 00000000000..b5d7ebe9a36 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles.h @@ -0,0 +1,39 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_opengles.h + * + * This is a simple file to encapsulate the OpenGL ES 1.X API headers. + */ +#include + +#ifdef __IPHONEOS__ +#include +#include +#else +#include +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2.h new file mode 100644 index 00000000000..e2388d1bfc2 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2.h @@ -0,0 +1,52 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_opengles2.h + * + * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. + */ +#include + +#if !defined(_MSC_VER) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS) + +#ifdef __IPHONEOS__ +#include +#include +#else +#include +#include +#include +#endif + +#else /* _MSC_VER */ + +/* OpenGL ES2 headers for Visual Studio */ +#include +#include +#include +#include + +#endif /* _MSC_VER */ + +#ifndef APIENTRY +#define APIENTRY GL_APIENTRY +#endif diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2_gl2.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2_gl2.h new file mode 100644 index 00000000000..c62fb0a547f --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2_gl2.h @@ -0,0 +1,621 @@ +#ifndef __gl2_h_ +#define __gl2_h_ + +/* $Revision: 20555 $ on $Date:: 2013-02-12 14:32:47 -0800 #$ */ + +/*#include */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +/*------------------------------------------------------------------------- + * Data type definitions + *-----------------------------------------------------------------------*/ + +typedef void GLvoid; +typedef char GLchar; +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef khronos_int8_t GLbyte; +typedef short GLshort; +typedef int GLint; +typedef int GLsizei; +typedef khronos_uint8_t GLubyte; +typedef unsigned short GLushort; +typedef unsigned int GLuint; +typedef khronos_float_t GLfloat; +typedef khronos_float_t GLclampf; +typedef khronos_int32_t GLfixed; + +/* GL types for handling large vertex buffer objects */ +typedef khronos_intptr_t GLintptr; +typedef khronos_ssize_t GLsizeiptr; + +/* OpenGL ES core versions */ +#define GL_ES_VERSION_2_0 1 + +/* ClearBufferMask */ +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_COLOR_BUFFER_BIT 0x00004000 + +/* Boolean */ +#define GL_FALSE 0 +#define GL_TRUE 1 + +/* BeginMode */ +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 + +/* AlphaFunction (not supported in ES20) */ +/* GL_NEVER */ +/* GL_LESS */ +/* GL_EQUAL */ +/* GL_LEQUAL */ +/* GL_GREATER */ +/* GL_NOTEQUAL */ +/* GL_GEQUAL */ +/* GL_ALWAYS */ + +/* BlendingFactorDest */ +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 + +/* BlendingFactorSrc */ +/* GL_ZERO */ +/* GL_ONE */ +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +/* GL_SRC_ALPHA */ +/* GL_ONE_MINUS_SRC_ALPHA */ +/* GL_DST_ALPHA */ +/* GL_ONE_MINUS_DST_ALPHA */ + +/* BlendEquationSeparate */ +#define GL_FUNC_ADD 0x8006 +#define GL_BLEND_EQUATION 0x8009 +#define GL_BLEND_EQUATION_RGB 0x8009 /* same as BLEND_EQUATION */ +#define GL_BLEND_EQUATION_ALPHA 0x883D + +/* BlendSubtract */ +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B + +/* Separate Blend Functions */ +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_BLEND_COLOR 0x8005 + +/* Buffer Objects */ +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 + +#define GL_STREAM_DRAW 0x88E0 +#define GL_STATIC_DRAW 0x88E4 +#define GL_DYNAMIC_DRAW 0x88E8 + +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 + +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 + +/* CullFaceMode */ +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_FRONT_AND_BACK 0x0408 + +/* DepthFunction */ +/* GL_NEVER */ +/* GL_LESS */ +/* GL_EQUAL */ +/* GL_LEQUAL */ +/* GL_GREATER */ +/* GL_NOTEQUAL */ +/* GL_GEQUAL */ +/* GL_ALWAYS */ + +/* EnableCap */ +#define GL_TEXTURE_2D 0x0DE1 +#define GL_CULL_FACE 0x0B44 +#define GL_BLEND 0x0BE2 +#define GL_DITHER 0x0BD0 +#define GL_STENCIL_TEST 0x0B90 +#define GL_DEPTH_TEST 0x0B71 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_COVERAGE 0x80A0 + +/* ErrorCode */ +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_OUT_OF_MEMORY 0x0505 + +/* FrontFaceDirection */ +#define GL_CW 0x0900 +#define GL_CCW 0x0901 + +/* GetPName */ +#define GL_LINE_WIDTH 0x0B21 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_VIEWPORT 0x0BA2 +#define GL_SCISSOR_BOX 0x0C10 +/* GL_SCISSOR_TEST */ +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_ALPHA_BITS 0x0D55 +#define GL_DEPTH_BITS 0x0D56 +#define GL_STENCIL_BITS 0x0D57 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +/* GL_POLYGON_OFFSET_FILL */ +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB + +/* GetTextureParameter */ +/* GL_TEXTURE_MAG_FILTER */ +/* GL_TEXTURE_MIN_FILTER */ +/* GL_TEXTURE_WRAP_S */ +/* GL_TEXTURE_WRAP_T */ + +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 + +/* HintMode */ +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +/* HintTarget */ +#define GL_GENERATE_MIPMAP_HINT 0x8192 + +/* DataType */ +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_FIXED 0x140C + +/* PixelFormat */ +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A + +/* PixelType */ +/* GL_UNSIGNED_BYTE */ +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 + +/* Shaders */ +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_SHADER_TYPE 0x8B4F +#define GL_DELETE_STATUS 0x8B80 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D + +/* StencilFunction */ +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 + +/* StencilOp */ +/* GL_ZERO */ +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#define GL_INVERT 0x150A +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 + +/* StringName */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* TextureMagFilter */ +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 + +/* TextureMinFilter */ +/* GL_NEAREST */ +/* GL_LINEAR */ +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 + +/* TextureParameterName */ +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 + +/* TextureTarget */ +/* GL_TEXTURE_2D */ +#define GL_TEXTURE 0x1702 + +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C + +/* TextureUnit */ +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 + +/* TextureWrapMode */ +#define GL_REPEAT 0x2901 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_MIRRORED_REPEAT 0x8370 + +/* Uniform Types */ +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_CUBE 0x8B60 + +/* Vertex Arrays */ +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F + +/* Read Format */ +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B + +/* Shader Source */ +#define GL_COMPILE_STATUS 0x8B81 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_SHADER_COMPILER 0x8DFA + +/* Shader Binary */ +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 + +/* Shader Precision-Specified Types */ +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 + +/* Framebuffer Object. */ +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 + +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGB565 0x8D62 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_STENCIL_INDEX8 0x8D48 + +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 + +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 + +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 + +#define GL_NONE 0 + +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD + +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 + +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 + +/*------------------------------------------------------------------------- + * GL core functions. + *-----------------------------------------------------------------------*/ + +GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); +GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); +GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name); +GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); +GL_APICALL void GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GL_APICALL void GL_APIENTRY glBlendEquation ( GLenum mode ); +GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); +GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); +GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); +GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); +GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); +GL_APICALL void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GL_APICALL void GL_APIENTRY glClearDepthf (GLclampf depth); +GL_APICALL void GL_APIENTRY glClearStencil (GLint s); +GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); +GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); +GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); +GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); +GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers); +GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers); +GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); +GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers); +GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); +GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures); +GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); +GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); +GL_APICALL void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); +GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); +GL_APICALL void GL_APIENTRY glDisable (GLenum cap); +GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); +GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); +GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); +GL_APICALL void GL_APIENTRY glEnable (GLenum cap); +GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); +GL_APICALL void GL_APIENTRY glFinish (void); +GL_APICALL void GL_APIENTRY glFlush (void); +GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); +GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); +GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); +GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers); +GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers); +GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); +GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); +GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name); +GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params); +GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL GLenum GL_APIENTRY glGetError (void); +GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); +GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); +GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); +GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); +GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); +GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params); +GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name); +GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer); +GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); +GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); +GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); +GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); +GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); +GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); +GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); +GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); +GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); +GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); +GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); +GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); +GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); +GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length); +GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); +GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); +GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); +GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass); +GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); +GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params); +GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params); +GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat x); +GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint x); +GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y); +GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z); +GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); +GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); +GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); +GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); +GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr); +GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); + +#ifdef __cplusplus +} +#endif + +#endif /* __gl2_h_ */ + diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2_gl2ext.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2_gl2ext.h new file mode 100644 index 00000000000..e8ca8b13f1a --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2_gl2ext.h @@ -0,0 +1,2050 @@ +#ifndef __gl2ext_h_ +#define __gl2ext_h_ + +/* $Revision: 22801 $ on $Date:: 2013-08-21 03:20:48 -0700 #$ */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +#ifndef GL_APIENTRYP +# define GL_APIENTRYP GL_APIENTRY* +#endif + +/* New types shared by several extensions */ + +#ifndef __gl3_h_ +/* These are defined with respect to in the + * Apple extension spec, but they are also used by non-APPLE + * extensions, and in the Khronos header we use the Khronos + * portable types in khrplatform.h, which must be defined. + */ +typedef khronos_int64_t GLint64; +typedef khronos_uint64_t GLuint64; +typedef struct __GLsync *GLsync; +#endif + + +/*------------------------------------------------------------------------* + * OES extension tokens + *------------------------------------------------------------------------*/ + +/* GL_OES_compressed_ETC1_RGB8_texture */ +#ifndef GL_OES_compressed_ETC1_RGB8_texture +#define GL_ETC1_RGB8_OES 0x8D64 +#endif + +/* GL_OES_compressed_paletted_texture */ +#ifndef GL_OES_compressed_paletted_texture +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#endif + +/* GL_OES_depth24 */ +#ifndef GL_OES_depth24 +#define GL_DEPTH_COMPONENT24_OES 0x81A6 +#endif + +/* GL_OES_depth32 */ +#ifndef GL_OES_depth32 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#endif + +/* GL_OES_depth_texture */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +typedef void* GLeglImageOES; +#endif + +/* GL_OES_EGL_image_external */ +#ifndef GL_OES_EGL_image_external +/* GLeglImageOES defined in GL_OES_EGL_image already. */ +#define GL_TEXTURE_EXTERNAL_OES 0x8D65 +#define GL_SAMPLER_EXTERNAL_OES 0x8D66 +#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 +#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 +#endif + +/* GL_OES_element_index_uint */ +#ifndef GL_OES_element_index_uint +#define GL_UNSIGNED_INT 0x1405 +#endif + +/* GL_OES_get_program_binary */ +#ifndef GL_OES_get_program_binary +#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE +#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF +#endif + +/* GL_OES_mapbuffer */ +#ifndef GL_OES_mapbuffer +#define GL_WRITE_ONLY_OES 0x88B9 +#define GL_BUFFER_ACCESS_OES 0x88BB +#define GL_BUFFER_MAPPED_OES 0x88BC +#define GL_BUFFER_MAP_POINTER_OES 0x88BD +#endif + +/* GL_OES_packed_depth_stencil */ +#ifndef GL_OES_packed_depth_stencil +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#endif + +/* GL_OES_required_internalformat */ +#ifndef GL_OES_required_internalformat +#define GL_ALPHA8_OES 0x803C +#define GL_DEPTH_COMPONENT16_OES 0x81A5 +/* reuse GL_DEPTH_COMPONENT24_OES */ +/* reuse GL_DEPTH24_STENCIL8_OES */ +/* reuse GL_DEPTH_COMPONENT32_OES */ +#define GL_LUMINANCE4_ALPHA4_OES 0x8043 +#define GL_LUMINANCE8_ALPHA8_OES 0x8045 +#define GL_LUMINANCE8_OES 0x8040 +#define GL_RGBA4_OES 0x8056 +#define GL_RGB5_A1_OES 0x8057 +#define GL_RGB565_OES 0x8D62 +/* reuse GL_RGB8_OES */ +/* reuse GL_RGBA8_OES */ +/* reuse GL_RGB10_EXT */ +/* reuse GL_RGB10_A2_EXT */ +#endif + +/* GL_OES_rgb8_rgba8 */ +#ifndef GL_OES_rgb8_rgba8 +#define GL_RGB8_OES 0x8051 +#define GL_RGBA8_OES 0x8058 +#endif + +/* GL_OES_standard_derivatives */ +#ifndef GL_OES_standard_derivatives +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B +#endif + +/* GL_OES_stencil1 */ +#ifndef GL_OES_stencil1 +#define GL_STENCIL_INDEX1_OES 0x8D46 +#endif + +/* GL_OES_stencil4 */ +#ifndef GL_OES_stencil4 +#define GL_STENCIL_INDEX4_OES 0x8D47 +#endif + +#ifndef GL_OES_surfaceless_context +#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 +#endif + +/* GL_OES_texture_3D */ +#ifndef GL_OES_texture_3D +#define GL_TEXTURE_WRAP_R_OES 0x8072 +#define GL_TEXTURE_3D_OES 0x806F +#define GL_TEXTURE_BINDING_3D_OES 0x806A +#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 +#define GL_SAMPLER_3D_OES 0x8B5F +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 +#endif + +/* GL_OES_texture_float */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_float_linear */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_half_float */ +#ifndef GL_OES_texture_half_float +#define GL_HALF_FLOAT_OES 0x8D61 +#endif + +/* GL_OES_texture_half_float_linear */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_npot */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_vertex_array_object */ +#ifndef GL_OES_vertex_array_object +#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 +#endif + +/* GL_OES_vertex_half_float */ +/* GL_HALF_FLOAT_OES defined in GL_OES_texture_half_float already. */ + +/* GL_OES_vertex_type_10_10_10_2 */ +#ifndef GL_OES_vertex_type_10_10_10_2 +#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 +#define GL_INT_10_10_10_2_OES 0x8DF7 +#endif + +/*------------------------------------------------------------------------* + * KHR extension tokens + *------------------------------------------------------------------------*/ + +#ifndef GL_KHR_debug +typedef void (GL_APIENTRYP GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 +#define GL_DEBUG_SOURCE_API_KHR 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A +#define GL_DEBUG_SOURCE_OTHER_KHR 0x824B +#define GL_DEBUG_TYPE_ERROR_KHR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 +#define GL_DEBUG_TYPE_OTHER_KHR 0x8251 +#define GL_DEBUG_TYPE_MARKER_KHR 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D +#define GL_BUFFER_KHR 0x82E0 +#define GL_SHADER_KHR 0x82E1 +#define GL_PROGRAM_KHR 0x82E2 +#define GL_QUERY_KHR 0x82E3 +/* PROGRAM_PIPELINE only in GL */ +#define GL_SAMPLER_KHR 0x82E6 +/* DISPLAY_LIST only in GL */ +#define GL_MAX_LABEL_LENGTH_KHR 0x82E8 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 +#define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 +#define GL_DEBUG_OUTPUT_KHR 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 +#define GL_STACK_OVERFLOW_KHR 0x0503 +#define GL_STACK_UNDERFLOW_KHR 0x0504 +#endif + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#endif + +/*------------------------------------------------------------------------* + * AMD extension tokens + *------------------------------------------------------------------------*/ + +/* GL_AMD_compressed_3DC_texture */ +#ifndef GL_AMD_compressed_3DC_texture +#define GL_3DC_X_AMD 0x87F9 +#define GL_3DC_XY_AMD 0x87FA +#endif + +/* GL_AMD_compressed_ATC_texture */ +#ifndef GL_AMD_compressed_ATC_texture +#define GL_ATC_RGB_AMD 0x8C92 +#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 +#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE +#endif + +/* GL_AMD_performance_monitor */ +#ifndef GL_AMD_performance_monitor +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +#endif + +/* GL_AMD_program_binary_Z400 */ +#ifndef GL_AMD_program_binary_Z400 +#define GL_Z400_BINARY_AMD 0x8740 +#endif + +/*------------------------------------------------------------------------* + * ANGLE extension tokens + *------------------------------------------------------------------------*/ + +/* GL_ANGLE_depth_texture */ +#ifndef GL_ANGLE_depth_texture +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_UNSIGNED_INT 0x1405 +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#endif + +/* GL_ANGLE_framebuffer_blit */ +#ifndef GL_ANGLE_framebuffer_blit +#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA +#endif + +/* GL_ANGLE_framebuffer_multisample */ +#ifndef GL_ANGLE_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 +#define GL_MAX_SAMPLES_ANGLE 0x8D57 +#endif + +/* GL_ANGLE_instanced_arrays */ +#ifndef GL_ANGLE_instanced_arrays +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE +#endif + +/* GL_ANGLE_pack_reverse_row_order */ +#ifndef GL_ANGLE_pack_reverse_row_order +#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 +#endif + +/* GL_ANGLE_program_binary */ +#ifndef GL_ANGLE_program_binary +#define GL_PROGRAM_BINARY_ANGLE 0x93A6 +#endif + +/* GL_ANGLE_texture_compression_dxt3 */ +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#endif + +/* GL_ANGLE_texture_compression_dxt5 */ +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 +#endif + +/* GL_ANGLE_texture_usage */ +#ifndef GL_ANGLE_texture_usage +#define GL_TEXTURE_USAGE_ANGLE 0x93A2 +#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 +#endif + +/* GL_ANGLE_translated_shader_source */ +#ifndef GL_ANGLE_translated_shader_source +#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 +#endif + +/*------------------------------------------------------------------------* + * APPLE extension tokens + *------------------------------------------------------------------------*/ + +/* GL_APPLE_copy_texture_levels */ +/* No new tokens introduced by this extension. */ + +/* GL_APPLE_framebuffer_multisample */ +#ifndef GL_APPLE_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 +#define GL_MAX_SAMPLES_APPLE 0x8D57 +#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA +#endif + +/* GL_APPLE_rgb_422 */ +#ifndef GL_APPLE_rgb_422 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#endif + +/* GL_APPLE_sync */ +#ifndef GL_APPLE_sync + +#define GL_SYNC_OBJECT_APPLE 0x8A53 +#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 +#define GL_OBJECT_TYPE_APPLE 0x9112 +#define GL_SYNC_CONDITION_APPLE 0x9113 +#define GL_SYNC_STATUS_APPLE 0x9114 +#define GL_SYNC_FLAGS_APPLE 0x9115 +#define GL_SYNC_FENCE_APPLE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 +#define GL_UNSIGNALED_APPLE 0x9118 +#define GL_SIGNALED_APPLE 0x9119 +#define GL_ALREADY_SIGNALED_APPLE 0x911A +#define GL_TIMEOUT_EXPIRED_APPLE 0x911B +#define GL_CONDITION_SATISFIED_APPLE 0x911C +#define GL_WAIT_FAILED_APPLE 0x911D +#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 +#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull +#endif + +/* GL_APPLE_texture_format_BGRA8888 */ +#ifndef GL_APPLE_texture_format_BGRA8888 +#define GL_BGRA_EXT 0x80E1 +#endif + +/* GL_APPLE_texture_max_level */ +#ifndef GL_APPLE_texture_max_level +#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D +#endif + +/*------------------------------------------------------------------------* + * ARM extension tokens + *------------------------------------------------------------------------*/ + +/* GL_ARM_mali_program_binary */ +#ifndef GL_ARM_mali_program_binary +#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 +#endif + +/* GL_ARM_mali_shader_binary */ +#ifndef GL_ARM_mali_shader_binary +#define GL_MALI_SHADER_BINARY_ARM 0x8F60 +#endif + +/* GL_ARM_rgba8 */ +/* No new tokens introduced by this extension. */ + +/*------------------------------------------------------------------------* + * EXT extension tokens + *------------------------------------------------------------------------*/ + +/* GL_EXT_blend_minmax */ +#ifndef GL_EXT_blend_minmax +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#endif + +/* GL_EXT_color_buffer_half_float */ +#ifndef GL_EXT_color_buffer_half_float +#define GL_RGBA16F_EXT 0x881A +#define GL_RGB16F_EXT 0x881B +#define GL_RG16F_EXT 0x822F +#define GL_R16F_EXT 0x822D +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 +#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 +#endif + +/* GL_EXT_debug_label */ +#ifndef GL_EXT_debug_label +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +#endif + +/* GL_EXT_debug_marker */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_discard_framebuffer */ +#ifndef GL_EXT_discard_framebuffer +#define GL_COLOR_EXT 0x1800 +#define GL_DEPTH_EXT 0x1801 +#define GL_STENCIL_EXT 0x1802 +#endif + +#ifndef GL_EXT_disjoint_timer_query +#define GL_QUERY_COUNTER_BITS_EXT 0x8864 +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#define GL_TIME_ELAPSED_EXT 0x88BF +#define GL_TIMESTAMP_EXT 0x8E28 +#define GL_GPU_DISJOINT_EXT 0x8FBB +#endif + +#ifndef GL_EXT_draw_buffers +#define GL_EXT_draw_buffers 1 +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 +#define GL_DRAW_BUFFER0_EXT 0x8825 +#define GL_DRAW_BUFFER1_EXT 0x8826 +#define GL_DRAW_BUFFER2_EXT 0x8827 +#define GL_DRAW_BUFFER3_EXT 0x8828 +#define GL_DRAW_BUFFER4_EXT 0x8829 +#define GL_DRAW_BUFFER5_EXT 0x882A +#define GL_DRAW_BUFFER6_EXT 0x882B +#define GL_DRAW_BUFFER7_EXT 0x882C +#define GL_DRAW_BUFFER8_EXT 0x882D +#define GL_DRAW_BUFFER9_EXT 0x882E +#define GL_DRAW_BUFFER10_EXT 0x882F +#define GL_DRAW_BUFFER11_EXT 0x8830 +#define GL_DRAW_BUFFER12_EXT 0x8831 +#define GL_DRAW_BUFFER13_EXT 0x8832 +#define GL_DRAW_BUFFER14_EXT 0x8833 +#define GL_DRAW_BUFFER15_EXT 0x8834 +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#endif + +/* GL_EXT_map_buffer_range */ +#ifndef GL_EXT_map_buffer_range +#define GL_MAP_READ_BIT_EXT 0x0001 +#define GL_MAP_WRITE_BIT_EXT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 +#endif + +/* GL_EXT_multisampled_render_to_texture */ +#ifndef GL_EXT_multisampled_render_to_texture +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C +/* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */ +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +#endif + +/* GL_EXT_multiview_draw_buffers */ +#ifndef GL_EXT_multiview_draw_buffers +#define GL_COLOR_ATTACHMENT_EXT 0x90F0 +#define GL_MULTIVIEW_EXT 0x90F1 +#define GL_DRAW_BUFFER_EXT 0x0C01 +#define GL_READ_BUFFER_EXT 0x0C02 +#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 +#endif + +/* GL_EXT_multi_draw_arrays */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_occlusion_query_boolean */ +#ifndef GL_EXT_occlusion_query_boolean +#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#endif + +/* GL_EXT_read_format_bgra */ +#ifndef GL_EXT_read_format_bgra +#define GL_BGRA_EXT 0x80E1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 +#endif + +/* GL_EXT_robustness */ +#ifndef GL_EXT_robustness +/* reuse GL_NO_ERROR */ +#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 +#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 +#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 +#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 +#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 +#endif + +/* GL_EXT_separate_shader_objects */ +#ifndef GL_EXT_separate_shader_objects +#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 +#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE_EXT 0x8258 +#define GL_ACTIVE_PROGRAM_EXT 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A +#endif + +/* GL_EXT_shader_framebuffer_fetch */ +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#endif + +/* GL_EXT_shader_texture_lod */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_shadow_samplers */ +#ifndef GL_EXT_shadow_samplers +#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C +#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D +#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E +#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 +#endif + +/* GL_EXT_sRGB */ +#ifndef GL_EXT_sRGB +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 +#endif + +/* GL_EXT_sRGB_write_control */ +#ifndef GL_EXT_sRGB_write_control +#define GL_EXT_sRGB_write_control 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#endif + +/* GL_EXT_texture_compression_dxt1 */ +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#endif + +/* GL_EXT_texture_filter_anisotropic */ +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif + +/* GL_EXT_texture_format_BGRA8888 */ +#ifndef GL_EXT_texture_format_BGRA8888 +#define GL_BGRA_EXT 0x80E1 +#endif + +/* GL_EXT_texture_rg */ +#ifndef GL_EXT_texture_rg +#define GL_RED_EXT 0x1903 +#define GL_RG_EXT 0x8227 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#endif + +/* GL_EXT_texture_sRGB_decode */ +#ifndef GL_EXT_texture_sRGB_decode +#define GL_EXT_texture_sRGB_decode 1 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#endif + +/* GL_EXT_texture_storage */ +#ifndef GL_EXT_texture_storage +#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F +#define GL_ALPHA8_EXT 0x803C +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_RGBA32F_EXT 0x8814 +#define GL_RGB32F_EXT 0x8815 +#define GL_ALPHA32F_EXT 0x8816 +#define GL_LUMINANCE32F_EXT 0x8818 +#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 +/* reuse GL_RGBA16F_EXT */ +/* reuse GL_RGB16F_EXT */ +#define GL_ALPHA16F_EXT 0x881C +#define GL_LUMINANCE16F_EXT 0x881E +#define GL_LUMINANCE_ALPHA16F_EXT 0x881F +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGB10_EXT 0x8052 +#define GL_BGRA8_EXT 0x93A1 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#define GL_R32F_EXT 0x822E +#define GL_RG32F_EXT 0x8230 +#define GL_R16F_EXT 0x822D +#define GL_RG16F_EXT 0x822F +#endif + +/* GL_EXT_texture_type_2_10_10_10_REV */ +#ifndef GL_EXT_texture_type_2_10_10_10_REV +#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 +#endif + +/* GL_EXT_unpack_subimage */ +#ifndef GL_EXT_unpack_subimage +#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 +#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 +#endif + +/*------------------------------------------------------------------------* + * DMP extension tokens + *------------------------------------------------------------------------*/ + +/* GL_DMP_shader_binary */ +#ifndef GL_DMP_shader_binary +#define GL_SHADER_BINARY_DMP 0x9250 +#endif + +/*------------------------------------------------------------------------* + * FJ extension tokens + *------------------------------------------------------------------------*/ + +/* GL_FJ_shader_binary_GCCSO */ +#ifndef GL_FJ_shader_binary_GCCSO +#define GL_GCCSO_SHADER_BINARY_FJ 0x9260 +#endif + +/*------------------------------------------------------------------------* + * IMG extension tokens + *------------------------------------------------------------------------*/ + +/* GL_IMG_program_binary */ +#ifndef GL_IMG_program_binary +#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 +#endif + +/* GL_IMG_read_format */ +#ifndef GL_IMG_read_format +#define GL_BGRA_IMG 0x80E1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 +#endif + +/* GL_IMG_shader_binary */ +#ifndef GL_IMG_shader_binary +#define GL_SGX_BINARY_IMG 0x8C0A +#endif + +/* GL_IMG_texture_compression_pvrtc */ +#ifndef GL_IMG_texture_compression_pvrtc +#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 +#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 +#endif + +/* GL_IMG_texture_compression_pvrtc2 */ +#ifndef GL_IMG_texture_compression_pvrtc2 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 +#endif + +/* GL_IMG_multisampled_render_to_texture */ +#ifndef GL_IMG_multisampled_render_to_texture +#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 +#define GL_MAX_SAMPLES_IMG 0x9135 +#define GL_TEXTURE_SAMPLES_IMG 0x9136 +#endif + +/*------------------------------------------------------------------------* + * NV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_NV_coverage_sample */ +#ifndef GL_NV_coverage_sample +#define GL_COVERAGE_COMPONENT_NV 0x8ED0 +#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 +#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 +#define GL_COVERAGE_BUFFERS_NV 0x8ED3 +#define GL_COVERAGE_SAMPLES_NV 0x8ED4 +#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 +#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 +#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 +#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 +#endif + +/* GL_NV_depth_nonlinear */ +#ifndef GL_NV_depth_nonlinear +#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C +#endif + +/* GL_NV_draw_buffers */ +#ifndef GL_NV_draw_buffers +#define GL_MAX_DRAW_BUFFERS_NV 0x8824 +#define GL_DRAW_BUFFER0_NV 0x8825 +#define GL_DRAW_BUFFER1_NV 0x8826 +#define GL_DRAW_BUFFER2_NV 0x8827 +#define GL_DRAW_BUFFER3_NV 0x8828 +#define GL_DRAW_BUFFER4_NV 0x8829 +#define GL_DRAW_BUFFER5_NV 0x882A +#define GL_DRAW_BUFFER6_NV 0x882B +#define GL_DRAW_BUFFER7_NV 0x882C +#define GL_DRAW_BUFFER8_NV 0x882D +#define GL_DRAW_BUFFER9_NV 0x882E +#define GL_DRAW_BUFFER10_NV 0x882F +#define GL_DRAW_BUFFER11_NV 0x8830 +#define GL_DRAW_BUFFER12_NV 0x8831 +#define GL_DRAW_BUFFER13_NV 0x8832 +#define GL_DRAW_BUFFER14_NV 0x8833 +#define GL_DRAW_BUFFER15_NV 0x8834 +#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 +#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 +#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 +#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 +#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 +#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 +#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 +#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 +#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 +#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 +#define GL_COLOR_ATTACHMENT10_NV 0x8CEA +#define GL_COLOR_ATTACHMENT11_NV 0x8CEB +#define GL_COLOR_ATTACHMENT12_NV 0x8CEC +#define GL_COLOR_ATTACHMENT13_NV 0x8CED +#define GL_COLOR_ATTACHMENT14_NV 0x8CEE +#define GL_COLOR_ATTACHMENT15_NV 0x8CEF +#endif + +/* GL_NV_draw_instanced */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_fbo_color_attachments */ +#ifndef GL_NV_fbo_color_attachments +#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF +/* GL_COLOR_ATTACHMENT{0-15}_NV defined in GL_NV_draw_buffers already. */ +#endif + +/* GL_NV_fence */ +#ifndef GL_NV_fence +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +#endif + +/* GL_NV_framebuffer_blit */ +#ifndef GL_NV_framebuffer_blit +#define GL_READ_FRAMEBUFFER_NV 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA +#endif + +/* GL_NV_framebuffer_multisample */ +#ifndef GL_NV_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 +#define GL_MAX_SAMPLES_NV 0x8D57 +#endif + +/* GL_NV_generate_mipmap_sRGB */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_instanced_arrays */ +#ifndef GL_NV_instanced_arrays +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE +#endif + +/* GL_NV_read_buffer */ +#ifndef GL_NV_read_buffer +#define GL_READ_BUFFER_NV 0x0C02 +#endif + +/* GL_NV_read_buffer_front */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_depth */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_depth_stencil */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_stencil */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_shadow_samplers_array */ +#ifndef GL_NV_shadow_samplers_array +#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 +#endif + +/* GL_NV_shadow_samplers_cube */ +#ifndef GL_NV_shadow_samplers_cube +#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 +#endif + +/* GL_NV_sRGB_formats */ +#ifndef GL_NV_sRGB_formats +#define GL_SLUMINANCE_NV 0x8C46 +#define GL_SLUMINANCE_ALPHA_NV 0x8C44 +#define GL_SRGB8_NV 0x8C41 +#define GL_SLUMINANCE8_NV 0x8C47 +#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 +#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F +#define GL_ETC1_SRGB8_NV 0x88EE +#endif + +/* GL_NV_texture_border_clamp */ +#ifndef GL_NV_texture_border_clamp +#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 +#define GL_CLAMP_TO_BORDER_NV 0x812D +#endif + +/* GL_NV_texture_compression_s3tc_update */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_texture_npot_2D_mipmap */ +/* No new tokens introduced by this extension. */ + +/*------------------------------------------------------------------------* + * QCOM extension tokens + *------------------------------------------------------------------------*/ + +/* GL_QCOM_alpha_test */ +#ifndef GL_QCOM_alpha_test +#define GL_ALPHA_TEST_QCOM 0x0BC0 +#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 +#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 +#endif + +/* GL_QCOM_binning_control */ +#ifndef GL_QCOM_binning_control +#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 +#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 +#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 +#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 +#endif + +/* GL_QCOM_driver_control */ +/* No new tokens introduced by this extension. */ + +/* GL_QCOM_extended_get */ +#ifndef GL_QCOM_extended_get +#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 +#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 +#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 +#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 +#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 +#define GL_TEXTURE_TYPE_QCOM 0x8BD7 +#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 +#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 +#define GL_TEXTURE_TARGET_QCOM 0x8BDA +#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB +#define GL_STATE_RESTORE 0x8BDC +#endif + +/* GL_QCOM_extended_get2 */ +/* No new tokens introduced by this extension. */ + +/* GL_QCOM_perfmon_global_mode */ +#ifndef GL_QCOM_perfmon_global_mode +#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 +#endif + +/* GL_QCOM_writeonly_rendering */ +#ifndef GL_QCOM_writeonly_rendering +#define GL_WRITEONLY_RENDERING_QCOM 0x8823 +#endif + +/* GL_QCOM_tiled_rendering */ +#ifndef GL_QCOM_tiled_rendering +#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 +#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 +#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 +#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 +#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 +#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 +#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 +#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 +#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 +#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 +#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 +#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 +#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 +#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 +#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 +#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 +#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 +#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 +#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 +#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 +#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 +#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 +#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 +#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 +#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 +#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 +#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 +#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 +#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 +#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 +#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 +#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 +#endif + +/*------------------------------------------------------------------------* + * VIV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_VIV_shader_binary */ +#ifndef GL_VIV_shader_binary +#define GL_SHADER_BINARY_VIV 0x8FC4 +#endif + +/*------------------------------------------------------------------------* + * End of extension tokens, start of corresponding extension functions + *------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------* + * OES extension functions + *------------------------------------------------------------------------*/ + +/* GL_OES_compressed_ETC1_RGB8_texture */ +#ifndef GL_OES_compressed_ETC1_RGB8_texture +#define GL_OES_compressed_ETC1_RGB8_texture 1 +#endif + +/* GL_OES_compressed_paletted_texture */ +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 +#endif + +/* GL_OES_depth24 */ +#ifndef GL_OES_depth24 +#define GL_OES_depth24 1 +#endif + +/* GL_OES_depth32 */ +#ifndef GL_OES_depth32 +#define GL_OES_depth32 1 +#endif + +/* GL_OES_depth_texture */ +#ifndef GL_OES_depth_texture +#define GL_OES_depth_texture 1 +#endif + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +#define GL_OES_EGL_image 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); +GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); +#endif +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); +#endif + +/* GL_OES_EGL_image_external */ +#ifndef GL_OES_EGL_image_external +#define GL_OES_EGL_image_external 1 +/* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */ +#endif + +/* GL_OES_element_index_uint */ +#ifndef GL_OES_element_index_uint +#define GL_OES_element_index_uint 1 +#endif + +/* GL_OES_fbo_render_mipmap */ +#ifndef GL_OES_fbo_render_mipmap +#define GL_OES_fbo_render_mipmap 1 +#endif + +/* GL_OES_fragment_precision_high */ +#ifndef GL_OES_fragment_precision_high +#define GL_OES_fragment_precision_high 1 +#endif + +/* GL_OES_get_program_binary */ +#ifndef GL_OES_get_program_binary +#define GL_OES_get_program_binary 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); +GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); +#endif +typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); +typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); +#endif + +/* GL_OES_mapbuffer */ +#ifndef GL_OES_mapbuffer +#define GL_OES_mapbuffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); +GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); +GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid **params); +#endif +typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); +typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid **params); +#endif + +/* GL_OES_packed_depth_stencil */ +#ifndef GL_OES_packed_depth_stencil +#define GL_OES_packed_depth_stencil 1 +#endif + +/* GL_OES_required_internalformat */ +#ifndef GL_OES_required_internalformat +#define GL_OES_required_internalformat 1 +#endif + +/* GL_OES_rgb8_rgba8 */ +#ifndef GL_OES_rgb8_rgba8 +#define GL_OES_rgb8_rgba8 1 +#endif + +/* GL_OES_standard_derivatives */ +#ifndef GL_OES_standard_derivatives +#define GL_OES_standard_derivatives 1 +#endif + +/* GL_OES_stencil1 */ +#ifndef GL_OES_stencil1 +#define GL_OES_stencil1 1 +#endif + +/* GL_OES_stencil4 */ +#ifndef GL_OES_stencil4 +#define GL_OES_stencil4 1 +#endif + +#ifndef GL_OES_surfaceless_context +#define GL_OES_surfaceless_context 1 +#endif + +/* GL_OES_texture_3D */ +#ifndef GL_OES_texture_3D +#define GL_OES_texture_3D 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +#endif +typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); +typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +#endif + +/* GL_OES_texture_float */ +#ifndef GL_OES_texture_float +#define GL_OES_texture_float 1 +#endif + +/* GL_OES_texture_float_linear */ +#ifndef GL_OES_texture_float_linear +#define GL_OES_texture_float_linear 1 +#endif + +/* GL_OES_texture_half_float */ +#ifndef GL_OES_texture_half_float +#define GL_OES_texture_half_float 1 +#endif + +/* GL_OES_texture_half_float_linear */ +#ifndef GL_OES_texture_half_float_linear +#define GL_OES_texture_half_float_linear 1 +#endif + +/* GL_OES_texture_npot */ +#ifndef GL_OES_texture_npot +#define GL_OES_texture_npot 1 +#endif + +/* GL_OES_vertex_array_object */ +#ifndef GL_OES_vertex_array_object +#define GL_OES_vertex_array_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); +GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); +GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); +GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); +#endif +typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); +typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); +typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); +#endif + +/* GL_OES_vertex_half_float */ +#ifndef GL_OES_vertex_half_float +#define GL_OES_vertex_half_float 1 +#endif + +/* GL_OES_vertex_type_10_10_10_2 */ +#ifndef GL_OES_vertex_type_10_10_10_2 +#define GL_OES_vertex_type_10_10_10_2 1 +#endif + +/*------------------------------------------------------------------------* + * KHR extension functions + *------------------------------------------------------------------------*/ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDebugMessageControlKHR (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GL_APICALL void GL_APIENTRY glDebugMessageInsertKHR (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHR (GLDEBUGPROCKHR callback, const void *userParam); +GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHR (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GL_APICALL void GL_APIENTRY glPushDebugGroupKHR (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GL_APICALL void GL_APIENTRY glPopDebugGroupKHR (void); +GL_APICALL void GL_APIENTRY glObjectLabelKHR (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectLabelKHR (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GL_APICALL void GL_APIENTRY glObjectPtrLabelKHR (const void *ptr, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHR (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, GLvoid **params); +#endif +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC) (GLDEBUGPROCKHR callback, const void *userParam); +typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC) (void); +typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRPROC) (GLenum pname, GLvoid **params); +#endif + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif + + +/*------------------------------------------------------------------------* + * AMD extension functions + *------------------------------------------------------------------------*/ + +/* GL_AMD_compressed_3DC_texture */ +#ifndef GL_AMD_compressed_3DC_texture +#define GL_AMD_compressed_3DC_texture 1 +#endif + +/* GL_AMD_compressed_ATC_texture */ +#ifndef GL_AMD_compressed_ATC_texture +#define GL_AMD_compressed_ATC_texture 1 +#endif + +/* AMD_performance_monitor */ +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); +GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); +GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); +typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); +typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif + +/* GL_AMD_program_binary_Z400 */ +#ifndef GL_AMD_program_binary_Z400 +#define GL_AMD_program_binary_Z400 1 +#endif + +/*------------------------------------------------------------------------* + * ANGLE extension functions + *------------------------------------------------------------------------*/ + +/* GL_ANGLE_depth_texture */ +#ifndef GL_ANGLE_depth_texture +#define GL_ANGLE_depth_texture 1 +#endif + +/* GL_ANGLE_framebuffer_blit */ +#ifndef GL_ANGLE_framebuffer_blit +#define GL_ANGLE_framebuffer_blit 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif + +/* GL_ANGLE_framebuffer_multisample */ +#ifndef GL_ANGLE_framebuffer_multisample +#define GL_ANGLE_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif + +#ifndef GL_ANGLE_instanced_arrays +#define GL_ANGLE_instanced_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); +#endif + +/* GL_ANGLE_pack_reverse_row_order */ +#ifndef GL_ANGLE_pack_reverse_row_order +#define GL_ANGLE_pack_reverse_row_order 1 +#endif + +/* GL_ANGLE_program_binary */ +#ifndef GL_ANGLE_program_binary +#define GL_ANGLE_program_binary 1 +#endif + +/* GL_ANGLE_texture_compression_dxt3 */ +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_ANGLE_texture_compression_dxt3 1 +#endif + +/* GL_ANGLE_texture_compression_dxt5 */ +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_ANGLE_texture_compression_dxt5 1 +#endif + +/* GL_ANGLE_texture_usage */ +#ifndef GL_ANGLE_texture_usage +#define GL_ANGLE_texture_usage 1 +#endif + +#ifndef GL_ANGLE_translated_shader_source +#define GL_ANGLE_translated_shader_source 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); +#endif +typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); +#endif + +/*------------------------------------------------------------------------* + * APPLE extension functions + *------------------------------------------------------------------------*/ + +/* GL_APPLE_copy_texture_levels */ +#ifndef GL_APPLE_copy_texture_levels +#define GL_APPLE_copy_texture_levels 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +#endif +typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +#endif + +/* GL_APPLE_framebuffer_multisample */ +#ifndef GL_APPLE_framebuffer_multisample +#define GL_APPLE_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); +#endif + +/* GL_APPLE_rgb_422 */ +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#endif + +/* GL_APPLE_sync */ +#ifndef GL_APPLE_sync +#define GL_APPLE_sync 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); +GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); +GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); +GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); +GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); +GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); +GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +#endif +typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); +typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); +typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); +typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +#endif + +/* GL_APPLE_texture_format_BGRA8888 */ +#ifndef GL_APPLE_texture_format_BGRA8888 +#define GL_APPLE_texture_format_BGRA8888 1 +#endif + +/* GL_APPLE_texture_max_level */ +#ifndef GL_APPLE_texture_max_level +#define GL_APPLE_texture_max_level 1 +#endif + +/*------------------------------------------------------------------------* + * ARM extension functions + *------------------------------------------------------------------------*/ + +/* GL_ARM_mali_program_binary */ +#ifndef GL_ARM_mali_program_binary +#define GL_ARM_mali_program_binary 1 +#endif + +/* GL_ARM_mali_shader_binary */ +#ifndef GL_ARM_mali_shader_binary +#define GL_ARM_mali_shader_binary 1 +#endif + +/* GL_ARM_rgba8 */ +#ifndef GL_ARM_rgba8 +#define GL_ARM_rgba8 1 +#endif + +/*------------------------------------------------------------------------* + * EXT extension functions + *------------------------------------------------------------------------*/ + +/* GL_EXT_blend_minmax */ +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#endif + +/* GL_EXT_color_buffer_half_float */ +#ifndef GL_EXT_color_buffer_half_float +#define GL_EXT_color_buffer_half_float 1 +#endif + +/* GL_EXT_debug_label */ +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif + +/* GL_EXT_debug_marker */ +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); +#endif +typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#endif + +/* GL_EXT_discard_framebuffer */ +#ifndef GL_EXT_discard_framebuffer +#define GL_EXT_discard_framebuffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); +#endif +typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +#endif + +#ifndef GL_EXT_disjoint_timer_query +#define GL_EXT_disjoint_timer_query 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); +GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); +GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); +GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); +GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); +GL_APICALL void GL_APIENTRY glQueryCounterEXT (GLuint id, GLenum target); +GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectivEXT (GLuint id, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +#endif +typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); +typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); +typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); +typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTPROC) (GLuint id, GLenum target); +typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +#endif /* GL_EXT_disjoint_timer_query */ + +#ifndef GL_EXT_draw_buffers +#define GL_EXT_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs); +#endif /* GL_EXT_draw_buffers */ + +/* GL_EXT_map_buffer_range */ +#ifndef GL_EXT_map_buffer_range +#define GL_EXT_map_buffer_range 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void* GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); +#endif +typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +#endif + +/* GL_EXT_multisampled_render_to_texture */ +#ifndef GL_EXT_multisampled_render_to_texture +#define GL_EXT_multisampled_render_to_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif + +/* GL_EXT_multiview_draw_buffers */ +#ifndef GL_EXT_multiview_draw_buffers +#define GL_EXT_multiview_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); +GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); +GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); +#endif +typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); +typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); +#endif + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); +#endif + +/* GL_EXT_occlusion_query_boolean */ +#ifndef GL_EXT_occlusion_query_boolean +#define GL_EXT_occlusion_query_boolean 1 +/* All entry points also exist in GL_EXT_disjoint_timer_query */ +#endif + +/* GL_EXT_read_format_bgra */ +#ifndef GL_EXT_read_format_bgra +#define GL_EXT_read_format_bgra 1 +#endif + +/* GL_EXT_robustness */ +#ifndef GL_EXT_robustness +#define GL_EXT_robustness 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); +GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); +GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); +#endif +typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); +typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +#endif + +/* GL_EXT_separate_shader_objects */ +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); +GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); +GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); +GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); +GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); +GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint x); +GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint x, GLint y); +GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z); +GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); +GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat x); +GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +#endif +typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); +typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); +typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); +typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint x); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint x, GLint y); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat x); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +#endif + +/* GL_EXT_shader_framebuffer_fetch */ +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_EXT_shader_framebuffer_fetch 1 +#endif + +/* GL_EXT_shader_texture_lod */ +#ifndef GL_EXT_shader_texture_lod +#define GL_EXT_shader_texture_lod 1 +#endif + +/* GL_EXT_shadow_samplers */ +#ifndef GL_EXT_shadow_samplers +#define GL_EXT_shadow_samplers 1 +#endif + +/* GL_EXT_sRGB */ +#ifndef GL_EXT_sRGB +#define GL_EXT_sRGB 1 +#endif + +/* GL_EXT_texture_compression_dxt1 */ +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_EXT_texture_compression_dxt1 1 +#endif + +/* GL_EXT_texture_filter_anisotropic */ +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#endif + +/* GL_EXT_texture_format_BGRA8888 */ +#ifndef GL_EXT_texture_format_BGRA8888 +#define GL_EXT_texture_format_BGRA8888 1 +#endif + +/* GL_EXT_texture_rg */ +#ifndef GL_EXT_texture_rg +#define GL_EXT_texture_rg 1 +#endif + +/* GL_EXT_texture_storage */ +#ifndef GL_EXT_texture_storage +#define GL_EXT_texture_storage 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif + +/* GL_EXT_texture_type_2_10_10_10_REV */ +#ifndef GL_EXT_texture_type_2_10_10_10_REV +#define GL_EXT_texture_type_2_10_10_10_REV 1 +#endif + +/* GL_EXT_unpack_subimage */ +#ifndef GL_EXT_unpack_subimage +#define GL_EXT_unpack_subimage 1 +#endif + +/*------------------------------------------------------------------------* + * DMP extension functions + *------------------------------------------------------------------------*/ + +/* GL_DMP_shader_binary */ +#ifndef GL_DMP_shader_binary +#define GL_DMP_shader_binary 1 +#endif + +/*------------------------------------------------------------------------* + * FJ extension functions + *------------------------------------------------------------------------*/ + +/* GL_FJ_shader_binary_GCCSO */ +#ifndef GL_FJ_shader_binary_GCCSO +#define GL_FJ_shader_binary_GCCSO 1 +#endif + +/*------------------------------------------------------------------------* + * IMG extension functions + *------------------------------------------------------------------------*/ + +/* GL_IMG_program_binary */ +#ifndef GL_IMG_program_binary +#define GL_IMG_program_binary 1 +#endif + +/* GL_IMG_read_format */ +#ifndef GL_IMG_read_format +#define GL_IMG_read_format 1 +#endif + +/* GL_IMG_shader_binary */ +#ifndef GL_IMG_shader_binary +#define GL_IMG_shader_binary 1 +#endif + +/* GL_IMG_texture_compression_pvrtc */ +#ifndef GL_IMG_texture_compression_pvrtc +#define GL_IMG_texture_compression_pvrtc 1 +#endif + +/* GL_IMG_texture_compression_pvrtc2 */ +#ifndef GL_IMG_texture_compression_pvrtc2 +#define GL_IMG_texture_compression_pvrtc2 1 +#endif + +/* GL_IMG_multisampled_render_to_texture */ +#ifndef GL_IMG_multisampled_render_to_texture +#define GL_IMG_multisampled_render_to_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif + +/*------------------------------------------------------------------------* + * NV extension functions + *------------------------------------------------------------------------*/ + +/* GL_NV_coverage_sample */ +#ifndef GL_NV_coverage_sample +#define GL_NV_coverage_sample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); +GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); +#endif +typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); +typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); +#endif + +/* GL_NV_depth_nonlinear */ +#ifndef GL_NV_depth_nonlinear +#define GL_NV_depth_nonlinear 1 +#endif + +/* GL_NV_draw_buffers */ +#ifndef GL_NV_draw_buffers +#define GL_NV_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); +#endif + +/* GL_NV_draw_instanced */ +#ifndef GL_NV_draw_instanced +#define GL_NV_draw_instanced 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +#endif + +/* GL_NV_fbo_color_attachments */ +#ifndef GL_NV_fbo_color_attachments +#define GL_NV_fbo_color_attachments 1 +#endif + +/* GL_NV_fence */ +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint fence); +GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint fence); +GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint fence); +GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#endif + +/* GL_NV_framebuffer_blit */ +#ifndef GL_NV_framebuffer_blit +#define GL_NV_framebuffer_blit 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif + +/* GL_NV_framebuffer_multisample */ +#ifndef GL_NV_framebuffer_multisample +#define GL_NV_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif + +/* GL_NV_generate_mipmap_sRGB */ +#ifndef GL_NV_generate_mipmap_sRGB +#define GL_NV_generate_mipmap_sRGB 1 +#endif + +/* GL_NV_instanced_arrays */ +#ifndef GL_NV_instanced_arrays +#define GL_NV_instanced_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor); +#endif +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor); +#endif + +/* GL_NV_read_buffer */ +#ifndef GL_NV_read_buffer +#define GL_NV_read_buffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); +#endif +typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); +#endif + +/* GL_NV_read_buffer_front */ +#ifndef GL_NV_read_buffer_front +#define GL_NV_read_buffer_front 1 +#endif + +/* GL_NV_read_depth */ +#ifndef GL_NV_read_depth +#define GL_NV_read_depth 1 +#endif + +/* GL_NV_read_depth_stencil */ +#ifndef GL_NV_read_depth_stencil +#define GL_NV_read_depth_stencil 1 +#endif + +/* GL_NV_read_stencil */ +#ifndef GL_NV_read_stencil +#define GL_NV_read_stencil 1 +#endif + +/* GL_NV_shadow_samplers_array */ +#ifndef GL_NV_shadow_samplers_array +#define GL_NV_shadow_samplers_array 1 +#endif + +/* GL_NV_shadow_samplers_cube */ +#ifndef GL_NV_shadow_samplers_cube +#define GL_NV_shadow_samplers_cube 1 +#endif + +/* GL_NV_sRGB_formats */ +#ifndef GL_NV_sRGB_formats +#define GL_NV_sRGB_formats 1 +#endif + +/* GL_NV_texture_border_clamp */ +#ifndef GL_NV_texture_border_clamp +#define GL_NV_texture_border_clamp 1 +#endif + +/* GL_NV_texture_compression_s3tc_update */ +#ifndef GL_NV_texture_compression_s3tc_update +#define GL_NV_texture_compression_s3tc_update 1 +#endif + +/* GL_NV_texture_npot_2D_mipmap */ +#ifndef GL_NV_texture_npot_2D_mipmap +#define GL_NV_texture_npot_2D_mipmap 1 +#endif + +/*------------------------------------------------------------------------* + * QCOM extension functions + *------------------------------------------------------------------------*/ + +/* GL_QCOM_alpha_test */ +#ifndef GL_QCOM_alpha_test +#define GL_QCOM_alpha_test 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); +#endif +typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); +#endif + +/* GL_QCOM_binning_control */ +#ifndef GL_QCOM_binning_control +#define GL_QCOM_binning_control 1 +#endif + +/* GL_QCOM_driver_control */ +#ifndef GL_QCOM_driver_control +#define GL_QCOM_driver_control 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); +GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); +GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); +GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); +#endif +typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); +typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); +typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +#endif + +/* GL_QCOM_extended_get */ +#ifndef GL_QCOM_extended_get +#define GL_QCOM_extended_get 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); +GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); +GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); +GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); +GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); +GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params); +#endif +typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); +typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); +typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params); +#endif + +/* GL_QCOM_extended_get2 */ +#ifndef GL_QCOM_extended_get2 +#define GL_QCOM_extended_get2 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); +GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); +GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); +GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); +#endif +typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); +typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); +typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); +typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); +#endif + +/* GL_QCOM_perfmon_global_mode */ +#ifndef GL_QCOM_perfmon_global_mode +#define GL_QCOM_perfmon_global_mode 1 +#endif + +/* GL_QCOM_writeonly_rendering */ +#ifndef GL_QCOM_writeonly_rendering +#define GL_QCOM_writeonly_rendering 1 +#endif + +/* GL_QCOM_tiled_rendering */ +#ifndef GL_QCOM_tiled_rendering +#define GL_QCOM_tiled_rendering 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); +#endif +typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); +#endif + +/*------------------------------------------------------------------------* + * VIV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_VIV_shader_binary */ +#ifndef GL_VIV_shader_binary +#define GL_VIV_shader_binary 1 +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __gl2ext_h_ */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2_gl2platform.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2_gl2platform.h new file mode 100644 index 00000000000..c325686f014 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2_gl2platform.h @@ -0,0 +1,30 @@ +#ifndef __gl2platform_h_ +#define __gl2platform_h_ + +/* $Revision: 10602 $ on $Date:: 2010-03-04 22:35:34 -0800 #$ */ + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h + * + * Adopters may modify khrplatform.h and this file to suit their platform. + * You are encouraged to submit all modifications to the Khronos group so that + * they can be included in future versions of this file. Please submit changes + * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) + * by filing a bug against product "OpenGL-ES" component "Registry". + */ + +/*#include */ + +#ifndef GL_APICALL +#define GL_APICALL KHRONOS_APICALL +#endif + +#ifndef GL_APIENTRY +#define GL_APIENTRY KHRONOS_APIENTRY +#endif + +#endif /* __gl2platform_h_ */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2_khrplatform.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2_khrplatform.h new file mode 100644 index 00000000000..c9e6f17d343 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_opengles2_khrplatform.h @@ -0,0 +1,282 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2009 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $ + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by sending them to the public Khronos Bugzilla + * (http://khronos.org/bugzilla) by filing a bug against product + * "Khronos (general)" component "Registry". + * + * A predefined template which fills in some of the bug fields can be + * reached using http://tinyurl.com/khrplatform-h-bugreport, but you + * must create a Bugzilla login first. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(_WIN32) && !defined(__SCITECH_SNAP__) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef _WIN64 +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_pixels.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_pixels.h new file mode 100644 index 00000000000..823124ef597 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_pixels.h @@ -0,0 +1,644 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_pixels.h + * + * Header for the enumerated pixel format definitions. + */ + +#ifndef SDL_pixels_h_ +#define SDL_pixels_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name Transparency definitions + * + * These define alpha as the opacity of a surface. + */ +/* @{ */ +#define SDL_ALPHA_OPAQUE 255 +#define SDL_ALPHA_TRANSPARENT 0 +/* @} */ + +/** Pixel type. */ +typedef enum +{ + SDL_PIXELTYPE_UNKNOWN, + SDL_PIXELTYPE_INDEX1, + SDL_PIXELTYPE_INDEX4, + SDL_PIXELTYPE_INDEX8, + SDL_PIXELTYPE_PACKED8, + SDL_PIXELTYPE_PACKED16, + SDL_PIXELTYPE_PACKED32, + SDL_PIXELTYPE_ARRAYU8, + SDL_PIXELTYPE_ARRAYU16, + SDL_PIXELTYPE_ARRAYU32, + SDL_PIXELTYPE_ARRAYF16, + SDL_PIXELTYPE_ARRAYF32 +} SDL_PixelType; + +/** Bitmap pixel order, high bit -> low bit. */ +typedef enum +{ + SDL_BITMAPORDER_NONE, + SDL_BITMAPORDER_4321, + SDL_BITMAPORDER_1234 +} SDL_BitmapOrder; + +/** Packed component order, high bit -> low bit. */ +typedef enum +{ + SDL_PACKEDORDER_NONE, + SDL_PACKEDORDER_XRGB, + SDL_PACKEDORDER_RGBX, + SDL_PACKEDORDER_ARGB, + SDL_PACKEDORDER_RGBA, + SDL_PACKEDORDER_XBGR, + SDL_PACKEDORDER_BGRX, + SDL_PACKEDORDER_ABGR, + SDL_PACKEDORDER_BGRA +} SDL_PackedOrder; + +/** Array component order, low byte -> high byte. */ +/* !!! FIXME: in 2.1, make these not overlap differently with + !!! FIXME: SDL_PACKEDORDER_*, so we can simplify SDL_ISPIXELFORMAT_ALPHA */ +typedef enum +{ + SDL_ARRAYORDER_NONE, + SDL_ARRAYORDER_RGB, + SDL_ARRAYORDER_RGBA, + SDL_ARRAYORDER_ARGB, + SDL_ARRAYORDER_BGR, + SDL_ARRAYORDER_BGRA, + SDL_ARRAYORDER_ABGR +} SDL_ArrayOrder; + +/** Packed component layout. */ +typedef enum +{ + SDL_PACKEDLAYOUT_NONE, + SDL_PACKEDLAYOUT_332, + SDL_PACKEDLAYOUT_4444, + SDL_PACKEDLAYOUT_1555, + SDL_PACKEDLAYOUT_5551, + SDL_PACKEDLAYOUT_565, + SDL_PACKEDLAYOUT_8888, + SDL_PACKEDLAYOUT_2101010, + SDL_PACKEDLAYOUT_1010102 +} SDL_PackedLayout; + +#define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D) + +#define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \ + ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ + ((bits) << 8) | ((bytes) << 0)) + +#define SDL_PIXELFLAG(X) (((X) >> 28) & 0x0F) +#define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F) +#define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F) +#define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F) +#define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF) +#define SDL_BYTESPERPIXEL(X) \ + (SDL_ISPIXELFORMAT_FOURCC(X) ? \ + ((((X) == SDL_PIXELFORMAT_YUY2) || \ + ((X) == SDL_PIXELFORMAT_UYVY) || \ + ((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF)) + +#define SDL_ISPIXELFORMAT_INDEXED(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))) + +#define SDL_ISPIXELFORMAT_PACKED(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32))) + +#define SDL_ISPIXELFORMAT_ARRAY(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))) + +#define SDL_ISPIXELFORMAT_ALPHA(format) \ + ((SDL_ISPIXELFORMAT_PACKED(format) && \ + ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) || \ + (SDL_ISPIXELFORMAT_ARRAY(format) && \ + ((SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA)))) + +/* The flag is set to 1 because 0x1? is not in the printable ASCII range */ +#define SDL_ISPIXELFORMAT_FOURCC(format) \ + ((format) && (SDL_PIXELFLAG(format) != 1)) + +/* Note: If you modify this list, update SDL_GetPixelFormatName() */ +typedef enum +{ + SDL_PIXELFORMAT_UNKNOWN, + SDL_PIXELFORMAT_INDEX1LSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, + 1, 0), + SDL_PIXELFORMAT_INDEX1MSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, + 1, 0), + SDL_PIXELFORMAT_INDEX4LSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, + 4, 0), + SDL_PIXELFORMAT_INDEX4MSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, + 4, 0), + SDL_PIXELFORMAT_INDEX8 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1), + SDL_PIXELFORMAT_RGB332 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_332, 8, 1), + SDL_PIXELFORMAT_XRGB4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_4444, 12, 2), + SDL_PIXELFORMAT_RGB444 = SDL_PIXELFORMAT_XRGB4444, + SDL_PIXELFORMAT_XBGR4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_4444, 12, 2), + SDL_PIXELFORMAT_BGR444 = SDL_PIXELFORMAT_XBGR4444, + SDL_PIXELFORMAT_XRGB1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_1555, 15, 2), + SDL_PIXELFORMAT_RGB555 = SDL_PIXELFORMAT_XRGB1555, + SDL_PIXELFORMAT_XBGR1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_1555, 15, 2), + SDL_PIXELFORMAT_BGR555 = SDL_PIXELFORMAT_XBGR1555, + SDL_PIXELFORMAT_ARGB4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_RGBA4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_ABGR4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_BGRA4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_ARGB1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_1555, 16, 2), + SDL_PIXELFORMAT_RGBA5551 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_5551, 16, 2), + SDL_PIXELFORMAT_ABGR1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_1555, 16, 2), + SDL_PIXELFORMAT_BGRA5551 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_5551, 16, 2), + SDL_PIXELFORMAT_RGB565 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_565, 16, 2), + SDL_PIXELFORMAT_BGR565 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_565, 16, 2), + SDL_PIXELFORMAT_RGB24 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, + 24, 3), + SDL_PIXELFORMAT_BGR24 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0, + 24, 3), + SDL_PIXELFORMAT_XRGB8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_RGB888 = SDL_PIXELFORMAT_XRGB8888, + SDL_PIXELFORMAT_RGBX8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_XBGR8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_BGR888 = SDL_PIXELFORMAT_XBGR8888, + SDL_PIXELFORMAT_BGRX8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_ARGB8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_RGBA8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_ABGR8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_BGRA8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_ARGB2101010 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_2101010, 32, 4), + + /* Aliases for RGBA byte arrays of color data, for the current platform */ +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_RGBA8888, + SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_ABGR8888, +#else + SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_ABGR8888, + SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_RGBA8888, +#endif + + SDL_PIXELFORMAT_YV12 = /**< Planar mode: Y + V + U (3 planes) */ + SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), + SDL_PIXELFORMAT_IYUV = /**< Planar mode: Y + U + V (3 planes) */ + SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'), + SDL_PIXELFORMAT_YUY2 = /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */ + SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'), + SDL_PIXELFORMAT_UYVY = /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */ + SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), + SDL_PIXELFORMAT_YVYU = /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */ + SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'), + SDL_PIXELFORMAT_NV12 = /**< Planar mode: Y + U/V interleaved (2 planes) */ + SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'), + SDL_PIXELFORMAT_NV21 = /**< Planar mode: Y + V/U interleaved (2 planes) */ + SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1'), + SDL_PIXELFORMAT_EXTERNAL_OES = /**< Android video texture format */ + SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' ') +} SDL_PixelFormatEnum; + +/** + * The bits of this structure can be directly reinterpreted as an integer-packed + * color which uses the SDL_PIXELFORMAT_RGBA32 format (SDL_PIXELFORMAT_ABGR8888 + * on little-endian systems and SDL_PIXELFORMAT_RGBA8888 on big-endian systems). + */ +typedef struct SDL_Color +{ + Uint8 r; + Uint8 g; + Uint8 b; + Uint8 a; +} SDL_Color; +#define SDL_Colour SDL_Color + +typedef struct SDL_Palette +{ + int ncolors; + SDL_Color *colors; + Uint32 version; + int refcount; +} SDL_Palette; + +/** + * \note Everything in the pixel format structure is read-only. + */ +typedef struct SDL_PixelFormat +{ + Uint32 format; + SDL_Palette *palette; + Uint8 BitsPerPixel; + Uint8 BytesPerPixel; + Uint8 padding[2]; + Uint32 Rmask; + Uint32 Gmask; + Uint32 Bmask; + Uint32 Amask; + Uint8 Rloss; + Uint8 Gloss; + Uint8 Bloss; + Uint8 Aloss; + Uint8 Rshift; + Uint8 Gshift; + Uint8 Bshift; + Uint8 Ashift; + int refcount; + struct SDL_PixelFormat *next; +} SDL_PixelFormat; + +/** + * Get the human readable name of a pixel format. + * + * \param format the pixel format to query + * \returns the human readable name of the specified pixel format or + * `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format); + +/** + * Convert one of the enumerated pixel formats to a bpp value and RGBA masks. + * + * \param format one of the SDL_PixelFormatEnum values + * \param bpp a bits per pixel value; usually 15, 16, or 32 + * \param Rmask a pointer filled in with the red mask for the format + * \param Gmask a pointer filled in with the green mask for the format + * \param Bmask a pointer filled in with the blue mask for the format + * \param Amask a pointer filled in with the alpha mask for the format + * \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't + * possible; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MasksToPixelFormatEnum + */ +extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format, + int *bpp, + Uint32 * Rmask, + Uint32 * Gmask, + Uint32 * Bmask, + Uint32 * Amask); + +/** + * Convert a bpp value and RGBA masks to an enumerated pixel format. + * + * This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't + * possible. + * + * \param bpp a bits per pixel value; usually 15, 16, or 32 + * \param Rmask the red mask for the format + * \param Gmask the green mask for the format + * \param Bmask the blue mask for the format + * \param Amask the alpha mask for the format + * \returns one of the SDL_PixelFormatEnum values + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PixelFormatEnumToMasks + */ +extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp, + Uint32 Rmask, + Uint32 Gmask, + Uint32 Bmask, + Uint32 Amask); + +/** + * Create an SDL_PixelFormat structure corresponding to a pixel format. + * + * Returned structure may come from a shared global cache (i.e. not newly + * allocated), and hence should not be modified, especially the palette. Weird + * errors such as `Blit combination not supported` may occur. + * + * \param pixel_format one of the SDL_PixelFormatEnum values + * \returns the new SDL_PixelFormat structure or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeFormat + */ +extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format); + +/** + * Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). + * + * \param format the SDL_PixelFormat structure to free + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocFormat + */ +extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format); + +/** + * Create a palette structure with the specified number of color entries. + * + * The palette entries are initialized to white. + * + * \param ncolors represents the number of color entries in the color palette + * \returns a new SDL_Palette structure on success or NULL on failure (e.g. if + * there wasn't enough memory); call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreePalette + */ +extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors); + +/** + * Set the palette for a pixel format structure. + * + * \param format the SDL_PixelFormat structure that will use the palette + * \param palette the SDL_Palette structure that will be used + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocPalette + * \sa SDL_FreePalette + */ +extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format, + SDL_Palette *palette); + +/** + * Set a range of colors in a palette. + * + * \param palette the SDL_Palette structure to modify + * \param colors an array of SDL_Color structures to copy into the palette + * \param firstcolor the index of the first palette entry to modify + * \param ncolors the number of entries to modify + * \returns 0 on success or a negative error code if not all of the colors + * could be set; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocPalette + * \sa SDL_CreateRGBSurface + */ +extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette, + const SDL_Color * colors, + int firstcolor, int ncolors); + +/** + * Free a palette created with SDL_AllocPalette(). + * + * \param palette the SDL_Palette structure to be freed + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocPalette + */ +extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette); + +/** + * Map an RGB triple to an opaque pixel value for a given pixel format. + * + * This function maps the RGB color value to the specified pixel format and + * returns the pixel value best approximating the given RGB color value for + * the given pixel format. + * + * If the format has a palette (8-bit) the index of the closest matching color + * in the palette will be returned. + * + * If the specified pixel format has an alpha component it will be returned as + * all 1 bits (fully opaque). + * + * If the pixel format bpp (color depth) is less than 32-bpp then the unused + * upper bits of the return value can safely be ignored (e.g., with a 16-bpp + * format the return value can be assigned to a Uint16, and similarly a Uint8 + * for an 8-bpp format). + * + * \param format an SDL_PixelFormat structure describing the pixel format + * \param r the red component of the pixel in the range 0-255 + * \param g the green component of the pixel in the range 0-255 + * \param b the blue component of the pixel in the range 0-255 + * \returns a pixel value + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGB + * \sa SDL_GetRGBA + * \sa SDL_MapRGBA + */ +extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format, + Uint8 r, Uint8 g, Uint8 b); + +/** + * Map an RGBA quadruple to a pixel value for a given pixel format. + * + * This function maps the RGBA color value to the specified pixel format and + * returns the pixel value best approximating the given RGBA color value for + * the given pixel format. + * + * If the specified pixel format has no alpha component the alpha value will + * be ignored (as it will be in formats with a palette). + * + * If the format has a palette (8-bit) the index of the closest matching color + * in the palette will be returned. + * + * If the pixel format bpp (color depth) is less than 32-bpp then the unused + * upper bits of the return value can safely be ignored (e.g., with a 16-bpp + * format the return value can be assigned to a Uint16, and similarly a Uint8 + * for an 8-bpp format). + * + * \param format an SDL_PixelFormat structure describing the format of the + * pixel + * \param r the red component of the pixel in the range 0-255 + * \param g the green component of the pixel in the range 0-255 + * \param b the blue component of the pixel in the range 0-255 + * \param a the alpha component of the pixel in the range 0-255 + * \returns a pixel value + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGB + * \sa SDL_GetRGBA + * \sa SDL_MapRGB + */ +extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format, + Uint8 r, Uint8 g, Uint8 b, + Uint8 a); + +/** + * Get RGB values from a pixel in the specified format. + * + * This function uses the entire 8-bit [0..255] range when converting color + * components from pixel formats with less than 8-bits per RGB component + * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + * + * \param pixel a pixel value + * \param format an SDL_PixelFormat structure describing the format of the + * pixel + * \param r a pointer filled in with the red component + * \param g a pointer filled in with the green component + * \param b a pointer filled in with the blue component + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGBA + * \sa SDL_MapRGB + * \sa SDL_MapRGBA + */ +extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, + const SDL_PixelFormat * format, + Uint8 * r, Uint8 * g, Uint8 * b); + +/** + * Get RGBA values from a pixel in the specified format. + * + * This function uses the entire 8-bit [0..255] range when converting color + * components from pixel formats with less than 8-bits per RGB component + * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + * + * If the surface has no alpha component, the alpha will be returned as 0xff + * (100% opaque). + * + * \param pixel a pixel value + * \param format an SDL_PixelFormat structure describing the format of the + * pixel + * \param r a pointer filled in with the red component + * \param g a pointer filled in with the green component + * \param b a pointer filled in with the blue component + * \param a a pointer filled in with the alpha component + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGB + * \sa SDL_MapRGB + * \sa SDL_MapRGBA + */ +extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, + const SDL_PixelFormat * format, + Uint8 * r, Uint8 * g, Uint8 * b, + Uint8 * a); + +/** + * Calculate a 256 entry gamma ramp for a gamma value. + * + * \param gamma a gamma value where 0.0 is black and 1.0 is identity + * \param ramp an array of 256 values filled in with the gamma ramp + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowGammaRamp + */ +extern DECLSPEC void SDLCALL SDL_CalculateGammaRamp(float gamma, Uint16 * ramp); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_pixels_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_platform.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_platform.h new file mode 100644 index 00000000000..ff49f2408ab --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_platform.h @@ -0,0 +1,235 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_platform.h + * + * Try to get a standard set of platform defines. + */ + +#ifndef SDL_platform_h_ +#define SDL_platform_h_ + +#if defined(_AIX) +#undef __AIX__ +#define __AIX__ 1 +#endif +#if defined(__HAIKU__) +#undef __HAIKU__ +#define __HAIKU__ 1 +#endif +#if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) +#undef __BSDI__ +#define __BSDI__ 1 +#endif +#if defined(_arch_dreamcast) +#undef __DREAMCAST__ +#define __DREAMCAST__ 1 +#endif +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) +#undef __FREEBSD__ +#define __FREEBSD__ 1 +#endif +#if defined(hpux) || defined(__hpux) || defined(__hpux__) +#undef __HPUX__ +#define __HPUX__ 1 +#endif +#if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) +#undef __IRIX__ +#define __IRIX__ 1 +#endif +#if (defined(linux) || defined(__linux) || defined(__linux__)) +#undef __LINUX__ +#define __LINUX__ 1 +#endif +#if defined(ANDROID) || defined(__ANDROID__) +#undef __ANDROID__ +#undef __LINUX__ /* do we need to do this? */ +#define __ANDROID__ 1 +#endif + +#if defined(__APPLE__) +/* lets us know what version of Mac OS X we're compiling on */ +#include +#include + +/* Fix building with older SDKs that don't define these + See this for more information: + https://stackoverflow.com/questions/12132933/preprocessor-macro-for-os-x-targets +*/ +#ifndef TARGET_OS_MACCATALYST +#define TARGET_OS_MACCATALYST 0 +#endif +#ifndef TARGET_OS_IOS +#define TARGET_OS_IOS 0 +#endif +#ifndef TARGET_OS_IPHONE +#define TARGET_OS_IPHONE 0 +#endif +#ifndef TARGET_OS_TV +#define TARGET_OS_TV 0 +#endif +#ifndef TARGET_OS_SIMULATOR +#define TARGET_OS_SIMULATOR 0 +#endif + +#if TARGET_OS_TV +#undef __TVOS__ +#define __TVOS__ 1 +#endif +#if TARGET_OS_IPHONE +/* if compiling for iOS */ +#undef __IPHONEOS__ +#define __IPHONEOS__ 1 +#undef __MACOSX__ +#else +/* if not compiling for iOS */ +#undef __MACOSX__ +#define __MACOSX__ 1 +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +# error SDL for Mac OS X only supports deploying on 10.6 and above. +#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1060 */ +#endif /* TARGET_OS_IPHONE */ +#endif /* defined(__APPLE__) */ + +#if defined(__NetBSD__) +#undef __NETBSD__ +#define __NETBSD__ 1 +#endif +#if defined(__OpenBSD__) +#undef __OPENBSD__ +#define __OPENBSD__ 1 +#endif +#if defined(__OS2__) || defined(__EMX__) +#undef __OS2__ +#define __OS2__ 1 +#endif +#if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) +#undef __OSF__ +#define __OSF__ 1 +#endif +#if defined(__QNXNTO__) +#undef __QNXNTO__ +#define __QNXNTO__ 1 +#endif +#if defined(riscos) || defined(__riscos) || defined(__riscos__) +#undef __RISCOS__ +#define __RISCOS__ 1 +#endif +#if defined(__sun) && defined(__SVR4) +#undef __SOLARIS__ +#define __SOLARIS__ 1 +#endif + +#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) +/* Try to find out if we're compiling for WinRT or non-WinRT */ +#if defined(_MSC_VER) && defined(__has_include) +#if __has_include() +#define HAVE_WINAPIFAMILY_H 1 +#else +#define HAVE_WINAPIFAMILY_H 0 +#endif + +/* If _USING_V110_SDK71_ is defined it means we are using the Windows XP toolset. */ +#elif defined(_MSC_VER) && (_MSC_VER >= 1700 && !_USING_V110_SDK71_) /* _MSC_VER == 1700 for Visual Studio 2012 */ +#define HAVE_WINAPIFAMILY_H 1 +#else +#define HAVE_WINAPIFAMILY_H 0 +#endif + +#if HAVE_WINAPIFAMILY_H +#include +#define WINAPI_FAMILY_WINRT (!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)) +#else +#define WINAPI_FAMILY_WINRT 0 +#endif /* HAVE_WINAPIFAMILY_H */ + +#if WINAPI_FAMILY_WINRT +#undef __WINRT__ +#define __WINRT__ 1 +#else +#undef __WINDOWS__ +#define __WINDOWS__ 1 +#endif +#endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */ + +#if defined(__WINDOWS__) +#undef __WIN32__ +#define __WIN32__ 1 +#endif +#if defined(__PSP__) +#undef __PSP__ +#define __PSP__ 1 +#endif + +/* The NACL compiler defines __native_client__ and __pnacl__ + * Ref: http://www.chromium.org/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi + */ +#if defined(__native_client__) +#undef __LINUX__ +#undef __NACL__ +#define __NACL__ 1 +#endif +#if defined(__pnacl__) +#undef __LINUX__ +#undef __PNACL__ +#define __PNACL__ 1 +/* PNACL with newlib supports static linking only */ +#define __SDL_NOGETPROCADDR__ +#endif + +#if defined(__vita__) +#define __VITA__ 1 +#endif + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the name of the platform. + * + * Here are the names returned for some (but not all) supported platforms: + * + * - "Windows" + * - "Mac OS X" + * - "Linux" + * - "iOS" + * - "Android" + * + * \returns the name of the platform. If the correct platform name is not + * available, returns a string beginning with the text "Unknown". + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC const char * SDLCALL SDL_GetPlatform (void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_platform_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_power.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_power.h new file mode 100644 index 00000000000..4e70e1edecf --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_power.h @@ -0,0 +1,88 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_power_h_ +#define SDL_power_h_ + +/** + * \file SDL_power.h + * + * Header for the SDL power management routines. + */ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The basic state for the system's power supply. + */ +typedef enum +{ + SDL_POWERSTATE_UNKNOWN, /**< cannot determine power status */ + SDL_POWERSTATE_ON_BATTERY, /**< Not plugged in, running on the battery */ + SDL_POWERSTATE_NO_BATTERY, /**< Plugged in, no battery available */ + SDL_POWERSTATE_CHARGING, /**< Plugged in, charging battery */ + SDL_POWERSTATE_CHARGED /**< Plugged in, battery charged */ +} SDL_PowerState; + + +/** + * Get the current power supply details. + * + * You should never take a battery status as absolute truth. Batteries + * (especially failing batteries) are delicate hardware, and the values + * reported here are best estimates based on what that hardware reports. It's + * not uncommon for older batteries to lose stored power much faster than it + * reports, or completely drain when reporting it has 20 percent left, etc. + * + * Battery status can change at any time; if you are concerned with power + * state, you should call this function frequently, and perhaps ignore changes + * until they seem to be stable for a few seconds. + * + * It's possible a platform can only report battery percentage or time left + * but not both. + * + * \param secs seconds of battery life left, you can pass a NULL here if you + * don't care, will return -1 if we can't determine a value, or + * we're not running on a battery + * \param pct percentage of battery life left, between 0 and 100, you can pass + * a NULL here if you don't care, will return -1 if we can't + * determine a value, or we're not running on a battery + * \returns an SDL_PowerState enum representing the current battery state. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_PowerState SDLCALL SDL_GetPowerInfo(int *secs, int *pct); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_power_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_quit.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_quit.h new file mode 100644 index 00000000000..efcc56d72fb --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_quit.h @@ -0,0 +1,58 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_quit.h + * + * Include file for SDL quit event handling. + */ + +#ifndef SDL_quit_h_ +#define SDL_quit_h_ + +#include +#include + +/** + * \file SDL_quit.h + * + * An ::SDL_QUIT event is generated when the user tries to close the application + * window. If it is ignored or filtered out, the window will remain open. + * If it is not ignored or filtered, it is queued normally and the window + * is allowed to close. When the window is closed, screen updates will + * complete, but have no effect. + * + * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) + * and SIGTERM (system termination request), if handlers do not already + * exist, that generate ::SDL_QUIT events as well. There is no way + * to determine the cause of an ::SDL_QUIT event, but setting a signal + * handler in your application will override the default generation of + * quit events for that signal. + * + * \sa SDL_Quit() + */ + +/* There are no functions directly affecting the quit event */ + +#define SDL_QuitRequested() \ + (SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT) > 0)) + +#endif /* SDL_quit_h_ */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_rect.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_rect.h new file mode 100644 index 00000000000..e2dc81bfdba --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_rect.h @@ -0,0 +1,376 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_rect.h + * + * Header file for SDL_rect definition and management functions. + */ + +#ifndef SDL_rect_h_ +#define SDL_rect_h_ + +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The structure that defines a point (integer) + * + * \sa SDL_EnclosePoints + * \sa SDL_PointInRect + */ +typedef struct SDL_Point +{ + int x; + int y; +} SDL_Point; + +/** + * The structure that defines a point (floating point) + * + * \sa SDL_EncloseFPoints + * \sa SDL_PointInFRect + */ +typedef struct SDL_FPoint +{ + float x; + float y; +} SDL_FPoint; + + +/** + * A rectangle, with the origin at the upper left (integer). + * + * \sa SDL_RectEmpty + * \sa SDL_RectEquals + * \sa SDL_HasIntersection + * \sa SDL_IntersectRect + * \sa SDL_IntersectRectAndLine + * \sa SDL_UnionRect + * \sa SDL_EnclosePoints + */ +typedef struct SDL_Rect +{ + int x, y; + int w, h; +} SDL_Rect; + + +/** + * A rectangle, with the origin at the upper left (floating point). + * + * \sa SDL_FRectEmpty + * \sa SDL_FRectEquals + * \sa SDL_FRectEqualsEpsilon + * \sa SDL_HasIntersectionF + * \sa SDL_IntersectFRect + * \sa SDL_IntersectFRectAndLine + * \sa SDL_UnionFRect + * \sa SDL_EncloseFPoints + * \sa SDL_PointInFRect + */ +typedef struct SDL_FRect +{ + float x; + float y; + float w; + float h; +} SDL_FRect; + + +/** + * Returns true if point resides inside a rectangle. + */ +SDL_FORCE_INLINE SDL_bool SDL_PointInRect(const SDL_Point *p, const SDL_Rect *r) +{ + return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && + (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the rectangle has no area. + */ +SDL_FORCE_INLINE SDL_bool SDL_RectEmpty(const SDL_Rect *r) +{ + return ((!r) || (r->w <= 0) || (r->h <= 0)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the two rectangles are equal. + */ +SDL_FORCE_INLINE SDL_bool SDL_RectEquals(const SDL_Rect *a, const SDL_Rect *b) +{ + return (a && b && (a->x == b->x) && (a->y == b->y) && + (a->w == b->w) && (a->h == b->h)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Determine whether two rectangles intersect. + * + * If either pointer is NULL the function will return SDL_FALSE. + * + * \param A an SDL_Rect structure representing the first rectangle + * \param B an SDL_Rect structure representing the second rectangle + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_IntersectRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersection(const SDL_Rect * A, + const SDL_Rect * B); + +/** + * Calculate the intersection of two rectangles. + * + * If `result` is NULL then this function will return SDL_FALSE. + * + * \param A an SDL_Rect structure representing the first rectangle + * \param B an SDL_Rect structure representing the second rectangle + * \param result an SDL_Rect structure filled in with the intersection of + * rectangles `A` and `B` + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasIntersection + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRect(const SDL_Rect * A, + const SDL_Rect * B, + SDL_Rect * result); + +/** + * Calculate the union of two rectangles. + * + * \param A an SDL_Rect structure representing the first rectangle + * \param B an SDL_Rect structure representing the second rectangle + * \param result an SDL_Rect structure filled in with the union of rectangles + * `A` and `B` + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_UnionRect(const SDL_Rect * A, + const SDL_Rect * B, + SDL_Rect * result); + +/** + * Calculate a minimal rectangle enclosing a set of points. + * + * If `clip` is not NULL then only points inside of the clipping rectangle are + * considered. + * + * \param points an array of SDL_Point structures representing points to be + * enclosed + * \param count the number of structures in the `points` array + * \param clip an SDL_Rect used for clipping or NULL to enclose all points + * \param result an SDL_Rect structure filled in with the minimal enclosing + * rectangle + * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + * points were outside of the clipping rectangle. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_EnclosePoints(const SDL_Point * points, + int count, + const SDL_Rect * clip, + SDL_Rect * result); + +/** + * Calculate the intersection of a rectangle and line segment. + * + * This function is used to clip a line segment to a rectangle. A line segment + * contained entirely within the rectangle or that does not intersect will + * remain unchanged. A line segment that crosses the rectangle at either or + * both ends will be clipped to the boundary of the rectangle and the new + * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + * + * \param rect an SDL_Rect structure representing the rectangle to intersect + * \param X1 a pointer to the starting X-coordinate of the line + * \param Y1 a pointer to the starting Y-coordinate of the line + * \param X2 a pointer to the ending X-coordinate of the line + * \param Y2 a pointer to the ending Y-coordinate of the line + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRectAndLine(const SDL_Rect * + rect, int *X1, + int *Y1, int *X2, + int *Y2); + + +/* SDL_FRect versions... */ + +/** + * Returns true if point resides inside a rectangle. + */ +SDL_FORCE_INLINE SDL_bool SDL_PointInFRect(const SDL_FPoint *p, const SDL_FRect *r) +{ + return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && + (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the rectangle has no area. + */ +SDL_FORCE_INLINE SDL_bool SDL_FRectEmpty(const SDL_FRect *r) +{ + return ((!r) || (r->w <= 0.0f) || (r->h <= 0.0f)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the two rectangles are equal, within some given epsilon. + * + * \since This function is available since SDL 2.0.22. + */ +SDL_FORCE_INLINE SDL_bool SDL_FRectEqualsEpsilon(const SDL_FRect *a, const SDL_FRect *b, const float epsilon) +{ + return (a && b && ((a == b) || + ((SDL_fabs(a->x - b->x) <= epsilon) && + (SDL_fabs(a->y - b->y) <= epsilon) && + (SDL_fabs(a->w - b->w) <= epsilon) && + (SDL_fabs(a->h - b->h) <= epsilon)))) + ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the two rectangles are equal, using a default epsilon. + * + * \since This function is available since SDL 2.0.22. + */ +SDL_FORCE_INLINE SDL_bool SDL_FRectEquals(const SDL_FRect *a, const SDL_FRect *b) +{ + return SDL_FRectEqualsEpsilon(a, b, SDL_FLT_EPSILON); +} + +/** + * Determine whether two rectangles intersect with float precision. + * + * If either pointer is NULL the function will return SDL_FALSE. + * + * \param A an SDL_FRect structure representing the first rectangle + * \param B an SDL_FRect structure representing the second rectangle + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.22. + * + * \sa SDL_IntersectRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersectionF(const SDL_FRect * A, + const SDL_FRect * B); + +/** + * Calculate the intersection of two rectangles with float precision. + * + * If `result` is NULL then this function will return SDL_FALSE. + * + * \param A an SDL_FRect structure representing the first rectangle + * \param B an SDL_FRect structure representing the second rectangle + * \param result an SDL_FRect structure filled in with the intersection of + * rectangles `A` and `B` + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.22. + * + * \sa SDL_HasIntersectionF + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRect(const SDL_FRect * A, + const SDL_FRect * B, + SDL_FRect * result); + +/** + * Calculate the union of two rectangles with float precision. + * + * \param A an SDL_FRect structure representing the first rectangle + * \param B an SDL_FRect structure representing the second rectangle + * \param result an SDL_FRect structure filled in with the union of rectangles + * `A` and `B` + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC void SDLCALL SDL_UnionFRect(const SDL_FRect * A, + const SDL_FRect * B, + SDL_FRect * result); + +/** + * Calculate a minimal rectangle enclosing a set of points with float + * precision. + * + * If `clip` is not NULL then only points inside of the clipping rectangle are + * considered. + * + * \param points an array of SDL_FPoint structures representing points to be + * enclosed + * \param count the number of structures in the `points` array + * \param clip an SDL_FRect used for clipping or NULL to enclose all points + * \param result an SDL_FRect structure filled in with the minimal enclosing + * rectangle + * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + * points were outside of the clipping rectangle. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_EncloseFPoints(const SDL_FPoint * points, + int count, + const SDL_FRect * clip, + SDL_FRect * result); + +/** + * Calculate the intersection of a rectangle and line segment with float + * precision. + * + * This function is used to clip a line segment to a rectangle. A line segment + * contained entirely within the rectangle or that does not intersect will + * remain unchanged. A line segment that crosses the rectangle at either or + * both ends will be clipped to the boundary of the rectangle and the new + * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + * + * \param rect an SDL_FRect structure representing the rectangle to intersect + * \param X1 a pointer to the starting X-coordinate of the line + * \param Y1 a pointer to the starting Y-coordinate of the line + * \param X2 a pointer to the ending X-coordinate of the line + * \param Y2 a pointer to the ending Y-coordinate of the line + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRectAndLine(const SDL_FRect * + rect, float *X1, + float *Y1, float *X2, + float *Y2); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_rect_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_render.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_render.h new file mode 100644 index 00000000000..330bddc0dc7 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_render.h @@ -0,0 +1,1908 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_render.h + * + * Header file for SDL 2D rendering functions. + * + * This API supports the following features: + * * single pixel points + * * single pixel lines + * * filled rectangles + * * texture images + * + * The primitives may be drawn in opaque, blended, or additive modes. + * + * The texture images may be drawn in opaque, blended, or additive modes. + * They can have an additional color tint or alpha modulation applied to + * them, and may also be stretched with linear interpolation. + * + * This API is designed to accelerate simple 2D operations. You may + * want more functionality such as polygons and particle effects and + * in that case you should use SDL's OpenGL/Direct3D support or one + * of the many good 3D engines. + * + * These functions must be called from the main thread. + * See this bug for details: http://bugzilla.libsdl.org/show_bug.cgi?id=1995 + */ + +#ifndef SDL_render_h_ +#define SDL_render_h_ + +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Flags used when creating a rendering context + */ +typedef enum +{ + SDL_RENDERER_SOFTWARE = 0x00000001, /**< The renderer is a software fallback */ + SDL_RENDERER_ACCELERATED = 0x00000002, /**< The renderer uses hardware + acceleration */ + SDL_RENDERER_PRESENTVSYNC = 0x00000004, /**< Present is synchronized + with the refresh rate */ + SDL_RENDERER_TARGETTEXTURE = 0x00000008 /**< The renderer supports + rendering to texture */ +} SDL_RendererFlags; + +/** + * Information on the capabilities of a render driver or context. + */ +typedef struct SDL_RendererInfo +{ + const char *name; /**< The name of the renderer */ + Uint32 flags; /**< Supported ::SDL_RendererFlags */ + Uint32 num_texture_formats; /**< The number of available texture formats */ + Uint32 texture_formats[16]; /**< The available texture formats */ + int max_texture_width; /**< The maximum texture width */ + int max_texture_height; /**< The maximum texture height */ +} SDL_RendererInfo; + +/** + * Vertex structure + */ +typedef struct SDL_Vertex +{ + SDL_FPoint position; /**< Vertex position, in SDL_Renderer coordinates */ + SDL_Color color; /**< Vertex color */ + SDL_FPoint tex_coord; /**< Normalized texture coordinates, if needed */ +} SDL_Vertex; + +/** + * The scaling mode for a texture. + */ +typedef enum +{ + SDL_ScaleModeNearest, /**< nearest pixel sampling */ + SDL_ScaleModeLinear, /**< linear filtering */ + SDL_ScaleModeBest /**< anisotropic filtering */ +} SDL_ScaleMode; + +/** + * The access pattern allowed for a texture. + */ +typedef enum +{ + SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */ + SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */ + SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */ +} SDL_TextureAccess; + +/** + * The texture channel modulation used in SDL_RenderCopy(). + */ +typedef enum +{ + SDL_TEXTUREMODULATE_NONE = 0x00000000, /**< No modulation */ + SDL_TEXTUREMODULATE_COLOR = 0x00000001, /**< srcC = srcC * color */ + SDL_TEXTUREMODULATE_ALPHA = 0x00000002 /**< srcA = srcA * alpha */ +} SDL_TextureModulate; + +/** + * Flip constants for SDL_RenderCopyEx + */ +typedef enum +{ + SDL_FLIP_NONE = 0x00000000, /**< Do not flip */ + SDL_FLIP_HORIZONTAL = 0x00000001, /**< flip horizontally */ + SDL_FLIP_VERTICAL = 0x00000002 /**< flip vertically */ +} SDL_RendererFlip; + +/** + * A structure representing rendering state + */ +struct SDL_Renderer; +typedef struct SDL_Renderer SDL_Renderer; + +/** + * An efficient driver-specific representation of pixel data + */ +struct SDL_Texture; +typedef struct SDL_Texture SDL_Texture; + +/* Function prototypes */ + +/** + * Get the number of 2D rendering drivers available for the current display. + * + * A render driver is a set of code that handles rendering and texture + * management on a particular display. Normally there is only one, but some + * drivers may have several available with different capabilities. + * + * There may be none if SDL was compiled without render support. + * + * \returns a number >= 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_GetRenderDriverInfo + */ +extern DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void); + +/** + * Get info about a specific 2D rendering driver for the current display. + * + * \param index the index of the driver to query information about + * \param info an SDL_RendererInfo structure to be filled with information on + * the rendering driver + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_GetNumRenderDrivers + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDriverInfo(int index, + SDL_RendererInfo * info); + +/** + * Create a window and default renderer. + * + * \param width the width of the window + * \param height the height of the window + * \param window_flags the flags used to create the window (see + * SDL_CreateWindow()) + * \param window a pointer filled with the window, or NULL on error + * \param renderer a pointer filled with the renderer, or NULL on error + * \returns 0 on success, or -1 on error; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_CreateWindow + */ +extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer( + int width, int height, Uint32 window_flags, + SDL_Window **window, SDL_Renderer **renderer); + + +/** + * Create a 2D rendering context for a window. + * + * \param window the window where rendering is displayed + * \param index the index of the rendering driver to initialize, or -1 to + * initialize the first one supporting the requested flags + * \param flags 0, or one or more SDL_RendererFlags OR'd together + * \returns a valid rendering context or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSoftwareRenderer + * \sa SDL_DestroyRenderer + * \sa SDL_GetNumRenderDrivers + * \sa SDL_GetRendererInfo + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window, + int index, Uint32 flags); + +/** + * Create a 2D software rendering context for a surface. + * + * Two other API which can be used to create SDL_Renderer: + * SDL_CreateRenderer() and SDL_CreateWindowAndRenderer(). These can _also_ + * create a software renderer, but they are intended to be used with an + * SDL_Window as the final destination and not an SDL_Surface. + * + * \param surface the SDL_Surface structure representing the surface where + * rendering is done + * \returns a valid rendering context or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_CreateWindowRenderer + * \sa SDL_DestroyRenderer + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface); + +/** + * Get the renderer associated with a window. + * + * \param window the window to query + * \returns the rendering context on success or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window * window); + +/** + * Get the window associated with a renderer. + * + * \param renderer the renderer to query + * \returns the window on success or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_RenderGetWindow(SDL_Renderer *renderer); + +/** + * Get information about a rendering context. + * + * \param renderer the rendering context + * \param info an SDL_RendererInfo structure filled with information about the + * current renderer + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + */ +extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer * renderer, + SDL_RendererInfo * info); + +/** + * Get the output size in pixels of a rendering context. + * + * Due to high-dpi displays, you might end up with a rendering context that + * has more pixels than the window that contains it, so use this instead of + * SDL_GetWindowSize() to decide how much drawing area you have. + * + * \param renderer the rendering context + * \param w an int filled with the width + * \param h an int filled with the height + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderer + */ +extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, + int *w, int *h); + +/** + * Create a texture for a rendering context. + * + * You can set the texture scaling method by setting + * `SDL_HINT_RENDER_SCALE_QUALITY` before creating the texture. + * + * \param renderer the rendering context + * \param format one of the enumerated values in SDL_PixelFormatEnum + * \param access one of the enumerated values in SDL_TextureAccess + * \param w the width of the texture in pixels + * \param h the height of the texture in pixels + * \returns a pointer to the created texture or NULL if no rendering context + * was active, the format was unsupported, or the width or height + * were out of range; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTextureFromSurface + * \sa SDL_DestroyTexture + * \sa SDL_QueryTexture + * \sa SDL_UpdateTexture + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, + Uint32 format, + int access, int w, + int h); + +/** + * Create a texture from an existing surface. + * + * The surface is not modified or freed by this function. + * + * The SDL_TextureAccess hint for the created texture is + * `SDL_TEXTUREACCESS_STATIC`. + * + * The pixel format of the created texture may be different from the pixel + * format of the surface. Use SDL_QueryTexture() to query the pixel format of + * the texture. + * + * \param renderer the rendering context + * \param surface the SDL_Surface structure containing pixel data used to fill + * the texture + * \returns the created texture or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + * \sa SDL_DestroyTexture + * \sa SDL_QueryTexture + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface); + +/** + * Query the attributes of a texture. + * + * \param texture the texture to query + * \param format a pointer filled in with the raw format of the texture; the + * actual format may differ, but pixel transfers will use this + * format (one of the SDL_PixelFormatEnum values). This argument + * can be NULL if you don't need this information. + * \param access a pointer filled in with the actual access to the texture + * (one of the SDL_TextureAccess values). This argument can be + * NULL if you don't need this information. + * \param w a pointer filled in with the width of the texture in pixels. This + * argument can be NULL if you don't need this information. + * \param h a pointer filled in with the height of the texture in pixels. This + * argument can be NULL if you don't need this information. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + */ +extern DECLSPEC int SDLCALL SDL_QueryTexture(SDL_Texture * texture, + Uint32 * format, int *access, + int *w, int *h); + +/** + * Set an additional color value multiplied into render copy operations. + * + * When this texture is rendered, during the copy operation each source color + * channel is modulated by the appropriate color value according to the + * following formula: + * + * `srcC = srcC * (color / 255)` + * + * Color modulation is not always supported by the renderer; it will return -1 + * if color modulation is not supported. + * + * \param texture the texture to update + * \param r the red color value multiplied into copy operations + * \param g the green color value multiplied into copy operations + * \param b the blue color value multiplied into copy operations + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureColorMod + * \sa SDL_SetTextureAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_SetTextureColorMod(SDL_Texture * texture, + Uint8 r, Uint8 g, Uint8 b); + + +/** + * Get the additional color value multiplied into render copy operations. + * + * \param texture the texture to query + * \param r a pointer filled in with the current red color value + * \param g a pointer filled in with the current green color value + * \param b a pointer filled in with the current blue color value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureAlphaMod + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_GetTextureColorMod(SDL_Texture * texture, + Uint8 * r, Uint8 * g, + Uint8 * b); + +/** + * Set an additional alpha value multiplied into render copy operations. + * + * When this texture is rendered, during the copy operation the source alpha + * value is modulated by this alpha value according to the following formula: + * + * `srcA = srcA * (alpha / 255)` + * + * Alpha modulation is not always supported by the renderer; it will return -1 + * if alpha modulation is not supported. + * + * \param texture the texture to update + * \param alpha the source alpha value multiplied into copy operations + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureAlphaMod + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_SetTextureAlphaMod(SDL_Texture * texture, + Uint8 alpha); + +/** + * Get the additional alpha value multiplied into render copy operations. + * + * \param texture the texture to query + * \param alpha a pointer filled in with the current alpha value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureColorMod + * \sa SDL_SetTextureAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_GetTextureAlphaMod(SDL_Texture * texture, + Uint8 * alpha); + +/** + * Set the blend mode for a texture, used by SDL_RenderCopy(). + * + * If the blend mode is not supported, the closest supported mode is chosen + * and this function returns -1. + * + * \param texture the texture to update + * \param blendMode the SDL_BlendMode to use for texture blending + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureBlendMode + * \sa SDL_RenderCopy + */ +extern DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_Texture * texture, + SDL_BlendMode blendMode); + +/** + * Get the blend mode used for texture copy operations. + * + * \param texture the texture to query + * \param blendMode a pointer filled in with the current SDL_BlendMode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetTextureBlendMode + */ +extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture * texture, + SDL_BlendMode *blendMode); + +/** + * Set the scale mode used for texture scale operations. + * + * If the scale mode is not supported, the closest supported mode is chosen. + * + * \param texture The texture to update. + * \param scaleMode the SDL_ScaleMode to use for texture scaling. + * \returns 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_GetTextureScaleMode + */ +extern DECLSPEC int SDLCALL SDL_SetTextureScaleMode(SDL_Texture * texture, + SDL_ScaleMode scaleMode); + +/** + * Get the scale mode used for texture scale operations. + * + * \param texture the texture to query. + * \param scaleMode a pointer filled in with the current scale mode. + * \return 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_SetTextureScaleMode + */ +extern DECLSPEC int SDLCALL SDL_GetTextureScaleMode(SDL_Texture * texture, + SDL_ScaleMode *scaleMode); + +/** + * Associate a user-specified pointer with a texture. + * + * \param texture the texture to update. + * \param userdata the pointer to associate with the texture. + * \returns 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GetTextureUserData + */ +extern DECLSPEC int SDLCALL SDL_SetTextureUserData(SDL_Texture * texture, + void *userdata); + +/** + * Get the user-specified pointer associated with a texture + * + * \param texture the texture to query. + * \return the pointer associated with the texture, or NULL if the texture is + * not valid. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_SetTextureUserData + */ +extern DECLSPEC void * SDLCALL SDL_GetTextureUserData(SDL_Texture * texture); + +/** + * Update the given texture rectangle with new pixel data. + * + * The pixel data must be in the pixel format of the texture. Use + * SDL_QueryTexture() to query the pixel format of the texture. + * + * This is a fairly slow function, intended for use with static textures that + * do not change often. + * + * If the texture is intended to be updated often, it is preferred to create + * the texture as streaming and use the locking functions referenced below. + * While this function will work with streaming textures, for optimization + * reasons you may not get the pixels back if you lock the texture afterward. + * + * \param texture the texture to update + * \param rect an SDL_Rect structure representing the area to update, or NULL + * to update the entire texture + * \param pixels the raw pixel data in the format of the texture + * \param pitch the number of bytes in a row of pixel data, including padding + * between lines + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + * \sa SDL_LockTexture + * \sa SDL_UnlockTexture + */ +extern DECLSPEC int SDLCALL SDL_UpdateTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const void *pixels, int pitch); + +/** + * Update a rectangle within a planar YV12 or IYUV texture with new pixel + * data. + * + * You can use SDL_UpdateTexture() as long as your pixel data is a contiguous + * block of Y and U/V planes in the proper order, but this function is + * available if your pixel data is not contiguous. + * + * \param texture the texture to update + * \param rect a pointer to the rectangle of pixels to update, or NULL to + * update the entire texture + * \param Yplane the raw pixel data for the Y plane + * \param Ypitch the number of bytes between rows of pixel data for the Y + * plane + * \param Uplane the raw pixel data for the U plane + * \param Upitch the number of bytes between rows of pixel data for the U + * plane + * \param Vplane the raw pixel data for the V plane + * \param Vpitch the number of bytes between rows of pixel data for the V + * plane + * \returns 0 on success or -1 if the texture is not valid; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_UpdateTexture + */ +extern DECLSPEC int SDLCALL SDL_UpdateYUVTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const Uint8 *Yplane, int Ypitch, + const Uint8 *Uplane, int Upitch, + const Uint8 *Vplane, int Vpitch); + +/** + * Update a rectangle within a planar NV12 or NV21 texture with new pixels. + * + * You can use SDL_UpdateTexture() as long as your pixel data is a contiguous + * block of NV12/21 planes in the proper order, but this function is available + * if your pixel data is not contiguous. + * + * \param texture the texture to update + * \param rect a pointer to the rectangle of pixels to update, or NULL to + * update the entire texture. + * \param Yplane the raw pixel data for the Y plane. + * \param Ypitch the number of bytes between rows of pixel data for the Y + * plane. + * \param UVplane the raw pixel data for the UV plane. + * \param UVpitch the number of bytes between rows of pixel data for the UV + * plane. + * \return 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_UpdateNVTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const Uint8 *Yplane, int Ypitch, + const Uint8 *UVplane, int UVpitch); + +/** + * Lock a portion of the texture for **write-only** pixel access. + * + * As an optimization, the pixels made available for editing don't necessarily + * contain the old texture data. This is a write-only operation, and if you + * need to keep a copy of the texture data you should do that at the + * application level. + * + * You must use SDL_UnlockTexture() to unlock the pixels and apply any + * changes. + * + * \param texture the texture to lock for access, which was created with + * `SDL_TEXTUREACCESS_STREAMING` + * \param rect an SDL_Rect structure representing the area to lock for access; + * NULL to lock the entire texture + * \param pixels this is filled in with a pointer to the locked pixels, + * appropriately offset by the locked area + * \param pitch this is filled in with the pitch of the locked pixels; the + * pitch is the length of one row in bytes + * \returns 0 on success or a negative error code if the texture is not valid + * or was not created with `SDL_TEXTUREACCESS_STREAMING`; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_UnlockTexture + */ +extern DECLSPEC int SDLCALL SDL_LockTexture(SDL_Texture * texture, + const SDL_Rect * rect, + void **pixels, int *pitch); + +/** + * Lock a portion of the texture for **write-only** pixel access, and expose + * it as a SDL surface. + * + * Besides providing an SDL_Surface instead of raw pixel data, this function + * operates like SDL_LockTexture. + * + * As an optimization, the pixels made available for editing don't necessarily + * contain the old texture data. This is a write-only operation, and if you + * need to keep a copy of the texture data you should do that at the + * application level. + * + * You must use SDL_UnlockTexture() to unlock the pixels and apply any + * changes. + * + * The returned surface is freed internally after calling SDL_UnlockTexture() + * or SDL_DestroyTexture(). The caller should not free it. + * + * \param texture the texture to lock for access, which was created with + * `SDL_TEXTUREACCESS_STREAMING` + * \param rect a pointer to the rectangle to lock for access. If the rect is + * NULL, the entire texture will be locked + * \param surface this is filled in with an SDL surface representing the + * locked area + * \returns 0 on success, or -1 if the texture is not valid or was not created + * with `SDL_TEXTUREACCESS_STREAMING` + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_LockTexture + * \sa SDL_UnlockTexture + */ +extern DECLSPEC int SDLCALL SDL_LockTextureToSurface(SDL_Texture *texture, + const SDL_Rect *rect, + SDL_Surface **surface); + +/** + * Unlock a texture, uploading the changes to video memory, if needed. + * + * **Warning**: Please note that SDL_LockTexture() is intended to be + * write-only; it will not guarantee the previous contents of the texture will + * be provided. You must fully initialize any area of a texture that you lock + * before unlocking it, as the pixels might otherwise be uninitialized memory. + * + * Which is to say: locking and immediately unlocking a texture can result in + * corrupted textures, depending on the renderer in use. + * + * \param texture a texture locked by SDL_LockTexture() + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockTexture + */ +extern DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture * texture); + +/** + * Determine whether a renderer supports the use of render targets. + * + * \param renderer the renderer that will be checked + * \returns SDL_TRUE if supported or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderTarget + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderTargetSupported(SDL_Renderer *renderer); + +/** + * Set a texture as the current rendering target. + * + * Before using this function, you should check the + * `SDL_RENDERER_TARGETTEXTURE` bit in the flags of SDL_RendererInfo to see if + * render targets are supported. + * + * The default render target is the window for which the renderer was created. + * To stop rendering to a texture and render to the window again, call this + * function with a NULL `texture`. + * + * \param renderer the rendering context + * \param texture the targeted texture, which must be created with the + * `SDL_TEXTUREACCESS_TARGET` flag, or NULL to render to the + * window instead of a texture. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderTarget + */ +extern DECLSPEC int SDLCALL SDL_SetRenderTarget(SDL_Renderer *renderer, + SDL_Texture *texture); + +/** + * Get the current render target. + * + * The default render target is the window for which the renderer was created, + * and is reported a NULL here. + * + * \param renderer the rendering context + * \returns the current render target or NULL for the default render target. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderTarget + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *renderer); + +/** + * Set a device independent resolution for rendering. + * + * This function uses the viewport and scaling functionality to allow a fixed + * logical resolution for rendering, regardless of the actual output + * resolution. If the actual output resolution doesn't have the same aspect + * ratio the output rendering will be centered within the output display. + * + * If the output display is a window, mouse and touch events in the window + * will be filtered and scaled so they seem to arrive within the logical + * resolution. The SDL_HINT_MOUSE_RELATIVE_SCALING hint controls whether + * relative motion events are also scaled. + * + * If this function results in scaling or subpixel drawing by the rendering + * backend, it will be handled using the appropriate quality hints. + * + * \param renderer the renderer for which resolution should be set + * \param w the width of the logical resolution + * \param h the height of the logical resolution + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetLogicalSize + */ +extern DECLSPEC int SDLCALL SDL_RenderSetLogicalSize(SDL_Renderer * renderer, int w, int h); + +/** + * Get device independent resolution for rendering. + * + * This may return 0 for `w` and `h` if the SDL_Renderer has never had its + * logical size set by SDL_RenderSetLogicalSize() and never had a render + * target set. + * + * \param renderer a rendering context + * \param w an int to be filled with the width + * \param h an int to be filled with the height + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC void SDLCALL SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h); + +/** + * Set whether to force integer scales for resolution-independent rendering. + * + * This function restricts the logical viewport to integer values - that is, + * when a resolution is between two multiples of a logical size, the viewport + * size is rounded down to the lower multiple. + * + * \param renderer the renderer for which integer scaling should be set + * \param enable enable or disable the integer scaling for rendering + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_RenderGetIntegerScale + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC int SDLCALL SDL_RenderSetIntegerScale(SDL_Renderer * renderer, + SDL_bool enable); + +/** + * Get whether integer scales are forced for resolution-independent rendering. + * + * \param renderer the renderer from which integer scaling should be queried + * \returns SDL_TRUE if integer scales are forced or SDL_FALSE if not and on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_RenderSetIntegerScale + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderGetIntegerScale(SDL_Renderer * renderer); + +/** + * Set the drawing area for rendering on the current target. + * + * When the window is resized, the viewport is reset to fill the entire new + * window size. + * + * \param renderer the rendering context + * \param rect the SDL_Rect structure representing the drawing area, or NULL + * to set the viewport to the entire target + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetViewport + */ +extern DECLSPEC int SDLCALL SDL_RenderSetViewport(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Get the drawing area for the current target. + * + * \param renderer the rendering context + * \param rect an SDL_Rect structure filled in with the current drawing area + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderSetViewport + */ +extern DECLSPEC void SDLCALL SDL_RenderGetViewport(SDL_Renderer * renderer, + SDL_Rect * rect); + +/** + * Set the clip rectangle for rendering on the specified target. + * + * \param renderer the rendering context for which clip rectangle should be + * set + * \param rect an SDL_Rect structure representing the clip area, relative to + * the viewport, or NULL to disable clipping + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetClipRect + * \sa SDL_RenderIsClipEnabled + */ +extern DECLSPEC int SDLCALL SDL_RenderSetClipRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Get the clip rectangle for the current target. + * + * \param renderer the rendering context from which clip rectangle should be + * queried + * \param rect an SDL_Rect structure filled in with the current clipping area + * or an empty rectangle if clipping is disabled + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderIsClipEnabled + * \sa SDL_RenderSetClipRect + */ +extern DECLSPEC void SDLCALL SDL_RenderGetClipRect(SDL_Renderer * renderer, + SDL_Rect * rect); + +/** + * Get whether clipping is enabled on the given renderer. + * + * \param renderer the renderer from which clip state should be queried + * \returns SDL_TRUE if clipping is enabled or SDL_FALSE if not; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_RenderGetClipRect + * \sa SDL_RenderSetClipRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderIsClipEnabled(SDL_Renderer * renderer); + + +/** + * Set the drawing scale for rendering on the current target. + * + * The drawing coordinates are scaled by the x/y scaling factors before they + * are used by the renderer. This allows resolution independent drawing with a + * single coordinate system. + * + * If this results in scaling or subpixel drawing by the rendering backend, it + * will be handled using the appropriate quality hints. For best results use + * integer scaling factors. + * + * \param renderer a rendering context + * \param scaleX the horizontal scaling factor + * \param scaleY the vertical scaling factor + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetScale + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC int SDLCALL SDL_RenderSetScale(SDL_Renderer * renderer, + float scaleX, float scaleY); + +/** + * Get the drawing scale for the current target. + * + * \param renderer the renderer from which drawing scale should be queried + * \param scaleX a pointer filled in with the horizontal scaling factor + * \param scaleY a pointer filled in with the vertical scaling factor + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderSetScale + */ +extern DECLSPEC void SDLCALL SDL_RenderGetScale(SDL_Renderer * renderer, + float *scaleX, float *scaleY); + +/** + * Get logical coordinates of point in renderer when given real coordinates of + * point in window. + * + * Logical coordinates will differ from real coordinates when render is scaled + * and logical renderer size set + * + * \param renderer the renderer from which the logical coordinates should be + * calcualted + * \param windowX the real X coordinate in the window + * \param windowY the real Y coordinate in the window + * \param logicalX the pointer filled with the logical x coordinate + * \param logicalY the pointer filled with the logical y coordinate + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGetScale + * \sa SDL_RenderSetScale + * \sa SDL_RenderGetLogicalSize + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC void SDLCALL SDL_RenderWindowToLogical(SDL_Renderer * renderer, + int windowX, int windowY, + float *logicalX, float *logicalY); + + /** + * Get real coordinates of point in window when given logical coordinates of point in renderer. + * Logical coordinates will differ from real coordinates when render is scaled and logical renderer size set + * + * \param renderer the renderer from which the window coordinates should be calculated + * \param logicalX the logical x coordinate + * \param logicalY the logical y coordinate + * \param windowX the pointer filled with the real X coordinate in the window + * \param windowY the pointer filled with the real Y coordinate in the window + + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGetScale + * \sa SDL_RenderSetScale + * \sa SDL_RenderGetLogicalSize + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC void SDLCALL SDL_RenderLogicalToWindow(SDL_Renderer * renderer, + float logicalX, float logicalY, + int *windowX, int *windowY); + +/** + * Set the color used for drawing operations (Rect, Line and Clear). + * + * Set the color for drawing or filling rectangles, lines, and points, and for + * SDL_RenderClear(). + * + * \param renderer the rendering context + * \param r the red value used to draw on the rendering target + * \param g the green value used to draw on the rendering target + * \param b the blue value used to draw on the rendering target + * \param a the alpha value used to draw on the rendering target; usually + * `SDL_ALPHA_OPAQUE` (255). Use SDL_SetRenderDrawBlendMode to + * specify how the alpha channel is used + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderDrawColor + * \sa SDL_RenderClear + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + */ +extern DECLSPEC int SDLCALL SDL_SetRenderDrawColor(SDL_Renderer * renderer, + Uint8 r, Uint8 g, Uint8 b, + Uint8 a); + +/** + * Get the color used for drawing operations (Rect, Line and Clear). + * + * \param renderer the rendering context + * \param r a pointer filled in with the red value used to draw on the + * rendering target + * \param g a pointer filled in with the green value used to draw on the + * rendering target + * \param b a pointer filled in with the blue value used to draw on the + * rendering target + * \param a a pointer filled in with the alpha value used to draw on the + * rendering target; usually `SDL_ALPHA_OPAQUE` (255) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDrawColor(SDL_Renderer * renderer, + Uint8 * r, Uint8 * g, Uint8 * b, + Uint8 * a); + +/** + * Set the blend mode used for drawing operations (Fill and Line). + * + * If the blend mode is not supported, the closest supported mode is chosen. + * + * \param renderer the rendering context + * \param blendMode the SDL_BlendMode to use for blending + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderDrawBlendMode + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + */ +extern DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer * renderer, + SDL_BlendMode blendMode); + +/** + * Get the blend mode used for drawing operations. + * + * \param renderer the rendering context + * \param blendMode a pointer filled in with the current SDL_BlendMode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderDrawBlendMode + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer * renderer, + SDL_BlendMode *blendMode); + +/** + * Clear the current rendering target with the drawing color. + * + * This function clears the entire rendering target, ignoring the viewport and + * the clip rectangle. + * + * \param renderer the rendering context + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderClear(SDL_Renderer * renderer); + +/** + * Draw a point on the current rendering target. + * + * SDL_RenderDrawPoint() draws a single point. If you want to draw multiple, + * use SDL_RenderDrawPoints() instead. + * + * \param renderer the rendering context + * \param x the x coordinate of the point + * \param y the y coordinate of the point + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPoint(SDL_Renderer * renderer, + int x, int y); + +/** + * Draw multiple points on the current rendering target. + * + * \param renderer the rendering context + * \param points an array of SDL_Point structures that represent the points to + * draw + * \param count the number of points to draw + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPoints(SDL_Renderer * renderer, + const SDL_Point * points, + int count); + +/** + * Draw a line on the current rendering target. + * + * SDL_RenderDrawLine() draws the line to include both end points. If you want + * to draw multiple, connecting lines use SDL_RenderDrawLines() instead. + * + * \param renderer the rendering context + * \param x1 the x coordinate of the start point + * \param y1 the y coordinate of the start point + * \param x2 the x coordinate of the end point + * \param y2 the y coordinate of the end point + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLine(SDL_Renderer * renderer, + int x1, int y1, int x2, int y2); + +/** + * Draw a series of connected lines on the current rendering target. + * + * \param renderer the rendering context + * \param points an array of SDL_Point structures representing points along + * the lines + * \param count the number of points, drawing count-1 lines + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLines(SDL_Renderer * renderer, + const SDL_Point * points, + int count); + +/** + * Draw a rectangle on the current rendering target. + * + * \param renderer the rendering context + * \param rect an SDL_Rect structure representing the rectangle to draw, or + * NULL to outline the entire rendering target + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Draw some number of rectangles on the current rendering target. + * + * \param renderer the rendering context + * \param rects an array of SDL_Rect structures representing the rectangles to + * be drawn + * \param count the number of rectangles + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRects(SDL_Renderer * renderer, + const SDL_Rect * rects, + int count); + +/** + * Fill a rectangle on the current rendering target with the drawing color. + * + * The current drawing color is set by SDL_SetRenderDrawColor(), and the + * color's alpha value is ignored unless blending is enabled with the + * appropriate call to SDL_SetRenderDrawBlendMode(). + * + * \param renderer the rendering context + * \param rect the SDL_Rect structure representing the rectangle to fill, or + * NULL for the entire rendering target + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Fill some number of rectangles on the current rendering target with the + * drawing color. + * + * \param renderer the rendering context + * \param rects an array of SDL_Rect structures representing the rectangles to + * be filled + * \param count the number of rectangles + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderPresent + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRects(SDL_Renderer * renderer, + const SDL_Rect * rects, + int count); + +/** + * Copy a portion of the texture to the current rendering target. + * + * The texture is blended with the destination based on its blend mode set + * with SDL_SetTextureBlendMode(). + * + * The texture color is affected based on its color modulation set by + * SDL_SetTextureColorMod(). + * + * The texture alpha is affected based on its alpha modulation set by + * SDL_SetTextureAlphaMod(). + * + * \param renderer the rendering context + * \param texture the source texture + * \param srcrect the source SDL_Rect structure or NULL for the entire texture + * \param dstrect the destination SDL_Rect structure or NULL for the entire + * rendering target; the texture will be stretched to fill the + * given rectangle + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderCopyEx + * \sa SDL_SetTextureAlphaMod + * \sa SDL_SetTextureBlendMode + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_Rect * dstrect); + +/** + * Copy a portion of the texture to the current rendering, with optional + * rotation and flipping. + * + * Copy a portion of the texture to the current rendering target, optionally + * rotating it by angle around the given center and also flipping it + * top-bottom and/or left-right. + * + * The texture is blended with the destination based on its blend mode set + * with SDL_SetTextureBlendMode(). + * + * The texture color is affected based on its color modulation set by + * SDL_SetTextureColorMod(). + * + * The texture alpha is affected based on its alpha modulation set by + * SDL_SetTextureAlphaMod(). + * + * \param renderer the rendering context + * \param texture the source texture + * \param srcrect the source SDL_Rect structure or NULL for the entire texture + * \param dstrect the destination SDL_Rect structure or NULL for the entire + * rendering target + * \param angle an angle in degrees that indicates the rotation that will be + * applied to dstrect, rotating it in a clockwise direction + * \param center a pointer to a point indicating the point around which + * dstrect will be rotated (if NULL, rotation will be done + * around `dstrect.w / 2`, `dstrect.h / 2`) + * \param flip a SDL_RendererFlip value stating which flipping actions should + * be performed on the texture + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderCopy + * \sa SDL_SetTextureAlphaMod + * \sa SDL_SetTextureBlendMode + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyEx(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_Rect * dstrect, + const double angle, + const SDL_Point *center, + const SDL_RendererFlip flip); + + +/** + * Draw a point on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw a point. + * \param x The x coordinate of the point. + * \param y The y coordinate of the point. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPointF(SDL_Renderer * renderer, + float x, float y); + +/** + * Draw multiple points on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw multiple points. + * \param points The points to draw + * \param count The number of points to draw + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPointsF(SDL_Renderer * renderer, + const SDL_FPoint * points, + int count); + +/** + * Draw a line on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw a line. + * \param x1 The x coordinate of the start point. + * \param y1 The y coordinate of the start point. + * \param x2 The x coordinate of the end point. + * \param y2 The y coordinate of the end point. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLineF(SDL_Renderer * renderer, + float x1, float y1, float x2, float y2); + +/** + * Draw a series of connected lines on the current rendering target at + * subpixel precision. + * + * \param renderer The renderer which should draw multiple lines. + * \param points The points along the lines + * \param count The number of points, drawing count-1 lines + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLinesF(SDL_Renderer * renderer, + const SDL_FPoint * points, + int count); + +/** + * Draw a rectangle on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw a rectangle. + * \param rect A pointer to the destination rectangle, or NULL to outline the + * entire rendering target. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRectF(SDL_Renderer * renderer, + const SDL_FRect * rect); + +/** + * Draw some number of rectangles on the current rendering target at subpixel + * precision. + * + * \param renderer The renderer which should draw multiple rectangles. + * \param rects A pointer to an array of destination rectangles. + * \param count The number of rectangles. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRectsF(SDL_Renderer * renderer, + const SDL_FRect * rects, + int count); + +/** + * Fill a rectangle on the current rendering target with the drawing color at + * subpixel precision. + * + * \param renderer The renderer which should fill a rectangle. + * \param rect A pointer to the destination rectangle, or NULL for the entire + * rendering target. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRectF(SDL_Renderer * renderer, + const SDL_FRect * rect); + +/** + * Fill some number of rectangles on the current rendering target with the + * drawing color at subpixel precision. + * + * \param renderer The renderer which should fill multiple rectangles. + * \param rects A pointer to an array of destination rectangles. + * \param count The number of rectangles. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRectsF(SDL_Renderer * renderer, + const SDL_FRect * rects, + int count); + +/** + * Copy a portion of the texture to the current rendering target at subpixel + * precision. + * + * \param renderer The renderer which should copy parts of a texture. + * \param texture The source texture. + * \param srcrect A pointer to the source rectangle, or NULL for the entire + * texture. + * \param dstrect A pointer to the destination rectangle, or NULL for the + * entire rendering target. + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyF(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_FRect * dstrect); + +/** + * Copy a portion of the source texture to the current rendering target, with + * rotation and flipping, at subpixel precision. + * + * \param renderer The renderer which should copy parts of a texture. + * \param texture The source texture. + * \param srcrect A pointer to the source rectangle, or NULL for the entire + * texture. + * \param dstrect A pointer to the destination rectangle, or NULL for the + * entire rendering target. + * \param angle An angle in degrees that indicates the rotation that will be + * applied to dstrect, rotating it in a clockwise direction + * \param center A pointer to a point indicating the point around which + * dstrect will be rotated (if NULL, rotation will be done + * around dstrect.w/2, dstrect.h/2). + * \param flip An SDL_RendererFlip value stating which flipping actions should + * be performed on the texture + * \return 0 on success, or -1 on error + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyExF(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_FRect * dstrect, + const double angle, + const SDL_FPoint *center, + const SDL_RendererFlip flip); + +/** + * Render a list of triangles, optionally using a texture and indices into the + * vertex array Color and alpha modulation is done per vertex + * (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored). + * + * \param renderer The rendering context. + * \param texture (optional) The SDL texture to use. + * \param vertices Vertices. + * \param num_vertices Number of vertices. + * \param indices (optional) An array of integer indices into the 'vertices' + * array, if NULL all vertices will be rendered in sequential + * order. + * \param num_indices Number of indices. + * \return 0 on success, or -1 if the operation is not supported + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGeometryRaw + * \sa SDL_Vertex + */ +extern DECLSPEC int SDLCALL SDL_RenderGeometry(SDL_Renderer *renderer, + SDL_Texture *texture, + const SDL_Vertex *vertices, int num_vertices, + const int *indices, int num_indices); + +/** + * Render a list of triangles, optionally using a texture and indices into the + * vertex arrays Color and alpha modulation is done per vertex + * (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored). + * + * \param renderer The rendering context. + * \param texture (optional) The SDL texture to use. + * \param xy Vertex positions + * \param xy_stride Byte size to move from one element to the next element + * \param color Vertex colors (as SDL_Color) + * \param color_stride Byte size to move from one element to the next element + * \param uv Vertex normalized texture coordinates + * \param uv_stride Byte size to move from one element to the next element + * \param num_vertices Number of vertices. + * \param indices (optional) An array of indices into the 'vertices' arrays, + * if NULL all vertices will be rendered in sequential order. + * \param num_indices Number of indices. + * \param size_indices Index size: 1 (byte), 2 (short), 4 (int) + * \return 0 on success, or -1 if the operation is not supported + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGeometry + * \sa SDL_Vertex + */ +extern DECLSPEC int SDLCALL SDL_RenderGeometryRaw(SDL_Renderer *renderer, + SDL_Texture *texture, + const float *xy, int xy_stride, + const SDL_Color *color, int color_stride, + const float *uv, int uv_stride, + int num_vertices, + const void *indices, int num_indices, int size_indices); + +/** + * Read pixels from the current rendering target to an array of pixels. + * + * **WARNING**: This is a very slow operation, and should not be used + * frequently. If you're using this on the main rendering target, it should be + * called after rendering and before SDL_RenderPresent(). + * + * `pitch` specifies the number of bytes between rows in the destination + * `pixels` data. This allows you to write to a subrectangle or have padded + * rows in the destination. Generally, `pitch` should equal the number of + * pixels per row in the `pixels` data times the number of bytes per pixel, + * but it might contain additional padding (for example, 24bit RGB Windows + * Bitmap data pads all rows to multiples of 4 bytes). + * + * \param renderer the rendering context + * \param rect an SDL_Rect structure representing the area to read, or NULL + * for the entire render target + * \param format an SDL_PixelFormatEnum value of the desired format of the + * pixel data, or 0 to use the format of the rendering target + * \param pixels a pointer to the pixel data to copy into + * \param pitch the pitch of the `pixels` parameter + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_RenderReadPixels(SDL_Renderer * renderer, + const SDL_Rect * rect, + Uint32 format, + void *pixels, int pitch); + +/** + * Update the screen with any rendering performed since the previous call. + * + * SDL's rendering functions operate on a backbuffer; that is, calling a + * rendering function such as SDL_RenderDrawLine() does not directly put a + * line on the screen, but rather updates the backbuffer. As such, you compose + * your entire scene and *present* the composed backbuffer to the screen as a + * complete picture. + * + * Therefore, when using SDL's rendering API, one does all drawing intended + * for the frame, and then calls this function once per frame to present the + * final drawing to the user. + * + * The backbuffer should be considered invalidated after each present; do not + * assume that previous contents will exist between frames. You are strongly + * encouraged to call SDL_RenderClear() to initialize the backbuffer before + * starting each new frame's drawing, even if you plan to overwrite every + * pixel. + * + * \param renderer the rendering context + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderClear + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer); + +/** + * Destroy the specified texture. + * + * Passing NULL or an otherwise invalid texture will set the SDL error message + * to "Invalid texture". + * + * \param texture the texture to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + * \sa SDL_CreateTextureFromSurface + */ +extern DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_Texture * texture); + +/** + * Destroy the rendering context for a window and free associated textures. + * + * \param renderer the rendering context + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + */ +extern DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_Renderer * renderer); + +/** + * Force the rendering context to flush any pending commands to the underlying + * rendering API. + * + * You do not need to (and in fact, shouldn't) call this function unless you + * are planning to call into OpenGL/Direct3D/Metal/whatever directly in + * addition to using an SDL_Renderer. + * + * This is for a very-specific case: if you are using SDL's render API, you + * asked for a specific renderer backend (OpenGL, Direct3D, etc), you set + * SDL_HINT_RENDER_BATCHING to "1", and you plan to make OpenGL/D3D/whatever + * calls in addition to SDL render API calls. If all of this applies, you + * should call SDL_RenderFlush() between calls to SDL's render API and the + * low-level API you're using in cooperation. + * + * In all other cases, you can ignore this function. This is only here to get + * maximum performance out of a specific situation. In all other cases, SDL + * will do the right thing, perhaps at a performance loss. + * + * This function is first available in SDL 2.0.10, and is not needed in 2.0.9 + * and earlier, as earlier versions did not queue rendering commands at all, + * instead flushing them to the OS immediately. + * + * \param renderer the rendering context + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderFlush(SDL_Renderer * renderer); + + +/** + * Bind an OpenGL/ES/ES2 texture to the current context. + * + * This is for use with OpenGL instructions when rendering OpenGL primitives + * directly. + * + * If not NULL, `texw` and `texh` will be filled with the width and height + * values suitable for the provided texture. In most cases, both will be 1.0, + * however, on systems that support the GL_ARB_texture_rectangle extension, + * these values will actually be the pixel width and height used to create the + * texture, so this factor needs to be taken into account when providing + * texture coordinates to OpenGL. + * + * You need a renderer to create an SDL_Texture, therefore you can only use + * this function with an implicit OpenGL context from SDL_CreateRenderer(), + * not with your own OpenGL context. If you need control over your OpenGL + * context, you need to write your own texture-loading methods. + * + * Also note that SDL may upload RGB textures as BGR (or vice-versa), and + * re-order the color channels in the shaders phase, so the uploaded texture + * may have swapped color channels. + * + * \param texture the texture to bind to the current OpenGL/ES/ES2 context + * \param texw a pointer to a float value which will be filled with the + * texture width or NULL if you don't need that value + * \param texh a pointer to a float value which will be filled with the + * texture height or NULL if you don't need that value + * \returns 0 on success, or -1 if the operation is not supported; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_MakeCurrent + * \sa SDL_GL_UnbindTexture + */ +extern DECLSPEC int SDLCALL SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh); + +/** + * Unbind an OpenGL/ES/ES2 texture from the current context. + * + * See SDL_GL_BindTexture() for examples on how to use these functions + * + * \param texture the texture to unbind from the current OpenGL/ES/ES2 context + * \returns 0 on success, or -1 if the operation is not supported + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_BindTexture + * \sa SDL_GL_MakeCurrent + */ +extern DECLSPEC int SDLCALL SDL_GL_UnbindTexture(SDL_Texture *texture); + +/** + * Get the CAMetalLayer associated with the given Metal renderer. + * + * This function returns `void *`, so SDL doesn't have to include Metal's + * headers, but it can be safely cast to a `CAMetalLayer *`. + * + * \param renderer The renderer to query + * \returns a `CAMetalLayer *` on success, or NULL if the renderer isn't a + * Metal renderer + * + * \since This function is available since SDL 2.0.8. + * + * \sa SDL_RenderGetMetalCommandEncoder + */ +extern DECLSPEC void *SDLCALL SDL_RenderGetMetalLayer(SDL_Renderer * renderer); + +/** + * Get the Metal command encoder for the current frame + * + * This function returns `void *`, so SDL doesn't have to include Metal's + * headers, but it can be safely cast to an `id`. + * + * Note that as of SDL 2.0.18, this will return NULL if Metal refuses to give + * SDL a drawable to render to, which might happen if the window is + * hidden/minimized/offscreen. This doesn't apply to command encoders for + * render targets, just the window's backbacker. Check your return values! + * + * \param renderer The renderer to query + * \returns an `id` on success, or NULL if the + * renderer isn't a Metal renderer or there was an error. + * + * \since This function is available since SDL 2.0.8. + * + * \sa SDL_RenderGetMetalLayer + */ +extern DECLSPEC void *SDLCALL SDL_RenderGetMetalCommandEncoder(SDL_Renderer * renderer); + +/** + * Toggle VSync of the given renderer. + * + * \param renderer The renderer to toggle + * \param vsync 1 for on, 0 for off. All other values are reserved + * \returns a 0 int on success, or non-zero on failure + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_RenderSetVSync(SDL_Renderer* renderer, int vsync); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_render_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_revision.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_revision.h new file mode 100644 index 00000000000..9910dff49b8 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_revision.h @@ -0,0 +1,2 @@ +#define SDL_REVISION "https://github.com/libsdl-org/SDL.git@53dea9830964eee8b5c2a7ee0a65d6e268dc78a1" +#define SDL_REVISION_NUMBER 0 diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_rwops.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_rwops.h new file mode 100644 index 00000000000..99e373c8b51 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_rwops.h @@ -0,0 +1,855 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_rwops.h + * + * This file provides a general interface for SDL to read and write + * data streams. It can easily be extended to files, memory, etc. + */ + +#ifndef SDL_rwops_h_ +#define SDL_rwops_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* RWops Types */ +#define SDL_RWOPS_UNKNOWN 0U /**< Unknown stream type */ +#define SDL_RWOPS_WINFILE 1U /**< Win32 file */ +#define SDL_RWOPS_STDFILE 2U /**< Stdio file */ +#define SDL_RWOPS_JNIFILE 3U /**< Android asset */ +#define SDL_RWOPS_MEMORY 4U /**< Memory stream */ +#define SDL_RWOPS_MEMORY_RO 5U /**< Read-Only memory stream */ +#if defined(__VITA__) +#define SDL_RWOPS_VITAFILE 6U /**< Vita file */ +#endif + +/** + * This is the read/write operation structure -- very basic. + */ +typedef struct SDL_RWops +{ + /** + * Return the size of the file in this rwops, or -1 if unknown + */ + Sint64 (SDLCALL * size) (struct SDL_RWops * context); + + /** + * Seek to \c offset relative to \c whence, one of stdio's whence values: + * RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END + * + * \return the final offset in the data stream, or -1 on error. + */ + Sint64 (SDLCALL * seek) (struct SDL_RWops * context, Sint64 offset, + int whence); + + /** + * Read up to \c maxnum objects each of size \c size from the data + * stream to the area pointed at by \c ptr. + * + * \return the number of objects read, or 0 at error or end of file. + */ + size_t (SDLCALL * read) (struct SDL_RWops * context, void *ptr, + size_t size, size_t maxnum); + + /** + * Write exactly \c num objects each of size \c size from the area + * pointed at by \c ptr to data stream. + * + * \return the number of objects written, or 0 at error or end of file. + */ + size_t (SDLCALL * write) (struct SDL_RWops * context, const void *ptr, + size_t size, size_t num); + + /** + * Close and free an allocated SDL_RWops structure. + * + * \return 0 if successful or -1 on write error when flushing data. + */ + int (SDLCALL * close) (struct SDL_RWops * context); + + Uint32 type; + union + { +#if defined(__ANDROID__) + struct + { + void *asset; + } androidio; +#elif defined(__WIN32__) + struct + { + SDL_bool append; + void *h; + struct + { + void *data; + size_t size; + size_t left; + } buffer; + } windowsio; +#elif defined(__VITA__) + struct + { + int h; + struct + { + void *data; + size_t size; + size_t left; + } buffer; + } vitaio; +#endif + +#ifdef HAVE_STDIO_H + struct + { + SDL_bool autoclose; + FILE *fp; + } stdio; +#endif + struct + { + Uint8 *base; + Uint8 *here; + Uint8 *stop; + } mem; + struct + { + void *data1; + void *data2; + } unknown; + } hidden; + +} SDL_RWops; + + +/** + * \name RWFrom functions + * + * Functions to create SDL_RWops structures from various data streams. + */ +/* @{ */ + +/** + * Use this function to create a new SDL_RWops structure for reading from + * and/or writing to a named file. + * + * The `mode` string is treated roughly the same as in a call to the C + * library's fopen(), even if SDL doesn't happen to use fopen() behind the + * scenes. + * + * Available `mode` strings: + * + * - "r": Open a file for reading. The file must exist. + * - "w": Create an empty file for writing. If a file with the same name + * already exists its content is erased and the file is treated as a new + * empty file. + * - "a": Append to a file. Writing operations append data at the end of the + * file. The file is created if it does not exist. + * - "r+": Open a file for update both reading and writing. The file must + * exist. + * - "w+": Create an empty file for both reading and writing. If a file with + * the same name already exists its content is erased and the file is + * treated as a new empty file. + * - "a+": Open a file for reading and appending. All writing operations are + * performed at the end of the file, protecting the previous content to be + * overwritten. You can reposition (fseek, rewind) the internal pointer to + * anywhere in the file for reading, but writing operations will move it + * back to the end of file. The file is created if it does not exist. + * + * **NOTE**: In order to open a file as a binary file, a "b" character has to + * be included in the `mode` string. This additional "b" character can either + * be appended at the end of the string (thus making the following compound + * modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the + * letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). + * Additional characters may follow the sequence, although they should have no + * effect. For example, "t" is sometimes appended to make explicit the file is + * a text file. + * + * This function supports Unicode filenames, but they must be encoded in UTF-8 + * format, regardless of the underlying operating system. + * + * As a fallback, SDL_RWFromFile() will transparently open a matching filename + * in an Android app's `assets`. + * + * Closing the SDL_RWops will close the file handle SDL is holding internally. + * + * \param file a UTF-8 string representing the filename to open + * \param mode an ASCII string representing the mode to be used for opening + * the file. + * \returns a pointer to the SDL_RWops structure that is created, or NULL on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file, + const char *mode); + +#ifdef HAVE_STDIO_H + +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp, SDL_bool autoclose); + +#else + +/** + * Use this function to create an SDL_RWops structure from a standard I/O file + * pointer (stdio.h's `FILE*`). + * + * This function is not available on Windows, since files opened in an + * application on that platform cannot be used by a dynamically linked + * library. + * + * On some platforms, the first parameter is a `void*`, on others, it's a + * `FILE*`, depending on what system headers are available to SDL. It is + * always intended to be the `FILE*` type from the C runtime's stdio.h. + * + * \param fp the `FILE*` that feeds the SDL_RWops stream + * \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, + * SDL_FALSE to leave the `FILE*` open when the RWops is + * closed + * \returns a pointer to the SDL_RWops structure that is created, or NULL on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(void * fp, + SDL_bool autoclose); +#endif + +/** + * Use this function to prepare a read-write memory buffer for use with + * SDL_RWops. + * + * This function sets up an SDL_RWops struct based on a memory area of a + * certain size, for both read and write access. + * + * This memory buffer is not copied by the RWops; the pointer you provide must + * remain valid until you close the stream. Closing the stream will not free + * the original buffer. + * + * If you need to make sure the RWops never writes to the memory buffer, you + * should use SDL_RWFromConstMem() with a read-only buffer of memory instead. + * + * \param mem a pointer to a buffer to feed an SDL_RWops stream + * \param size the buffer size, in bytes + * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size); + +/** + * Use this function to prepare a read-only memory buffer for use with RWops. + * + * This function sets up an SDL_RWops struct based on a memory area of a + * certain size. It assumes the memory area is not writable. + * + * Attempting to write to this RWops stream will report an error without + * writing to the memory buffer. + * + * This memory buffer is not copied by the RWops; the pointer you provide must + * remain valid until you close the stream. Closing the stream will not free + * the original buffer. + * + * If you need to write to a memory buffer, you should use SDL_RWFromMem() + * with a writable buffer of memory instead. + * + * \param mem a pointer to a read-only buffer to feed an SDL_RWops stream + * \param size the buffer size, in bytes + * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem, + int size); + +/* @} *//* RWFrom functions */ + + +/** + * Use this function to allocate an empty, unpopulated SDL_RWops structure. + * + * Applications do not need to use this function unless they are providing + * their own SDL_RWops implementation. If you just need a SDL_RWops to + * read/write a common data source, you should use the built-in + * implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc. + * + * You must free the returned pointer with SDL_FreeRW(). Depending on your + * operating system and compiler, there may be a difference between the + * malloc() and free() your program uses and the versions SDL calls + * internally. Trying to mix the two can cause crashing such as segmentation + * faults. Since all SDL_RWops must free themselves when their **close** + * method is called, all SDL_RWops must be allocated through this function, so + * they can all be freed correctly with SDL_FreeRW(). + * + * \returns a pointer to the allocated memory on success, or NULL on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeRW + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); + +/** + * Use this function to free an SDL_RWops structure allocated by + * SDL_AllocRW(). + * + * Applications do not need to use this function unless they are providing + * their own SDL_RWops implementation. If you just need a SDL_RWops to + * read/write a common data source, you should use the built-in + * implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc, and + * call the **close** method on those SDL_RWops pointers when you are done + * with them. + * + * Only use SDL_FreeRW() on pointers returned by SDL_AllocRW(). The pointer is + * invalid as soon as this function returns. Any extra memory allocated during + * creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must + * be responsible for managing that memory in their **close** method. + * + * \param area the SDL_RWops structure to be freed + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocRW + */ +extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); + +#define RW_SEEK_SET 0 /**< Seek from the beginning of data */ +#define RW_SEEK_CUR 1 /**< Seek relative to current read point */ +#define RW_SEEK_END 2 /**< Seek relative to the end of data */ + +/** + * Use this function to get the size of the data stream in an SDL_RWops. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context the SDL_RWops to get the size of the data stream from + * \returns the size of the data stream in the SDL_RWops on success, -1 if + * unknown or a negative error code on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC Sint64 SDLCALL SDL_RWsize(SDL_RWops *context); + +/** + * Seek within an SDL_RWops data stream. + * + * This function seeks to byte `offset`, relative to `whence`. + * + * `whence` may be any of the following values: + * + * - `RW_SEEK_SET`: seek from the beginning of data + * - `RW_SEEK_CUR`: seek relative to current read point + * - `RW_SEEK_END`: seek relative to the end of data + * + * If this stream can not seek, it will return -1. + * + * SDL_RWseek() is actually a wrapper function that calls the SDL_RWops's + * `seek` method appropriately, to simplify application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a pointer to an SDL_RWops structure + * \param offset an offset in bytes, relative to **whence** location; can be + * negative + * \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END` + * \returns the final offset in the data stream after the seek or -1 on error. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC Sint64 SDLCALL SDL_RWseek(SDL_RWops *context, + Sint64 offset, int whence); + +/** + * Determine the current read/write offset in an SDL_RWops data stream. + * + * SDL_RWtell is actually a wrapper function that calls the SDL_RWops's `seek` + * method, with an offset of 0 bytes from `RW_SEEK_CUR`, to simplify + * application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a SDL_RWops data stream object from which to get the current + * offset + * \returns the current offset in the stream, or -1 if the information can not + * be determined. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWwrite + */ +extern DECLSPEC Sint64 SDLCALL SDL_RWtell(SDL_RWops *context); + +/** + * Read from a data source. + * + * This function reads up to `maxnum` objects each of size `size` from the + * data source to the area pointed at by `ptr`. This function may read less + * objects than requested. It will return zero when there has been an error or + * the data stream is completely read. + * + * SDL_RWread() is actually a function wrapper that calls the SDL_RWops's + * `read` method appropriately, to simplify application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a pointer to an SDL_RWops structure + * \param ptr a pointer to a buffer to read data into + * \param size the size of each object to read, in bytes + * \param maxnum the maximum number of objects to be read + * \returns the number of objects read, or 0 at error or end of file; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWseek + * \sa SDL_RWwrite + */ +extern DECLSPEC size_t SDLCALL SDL_RWread(SDL_RWops *context, + void *ptr, size_t size, + size_t maxnum); + +/** + * Write to an SDL_RWops data stream. + * + * This function writes exactly `num` objects each of size `size` from the + * area pointed at by `ptr` to the stream. If this fails for any reason, it'll + * return less than `num` to demonstrate how far the write progressed. On + * success, it returns `num`. + * + * SDL_RWwrite is actually a function wrapper that calls the SDL_RWops's + * `write` method appropriately, to simplify application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a pointer to an SDL_RWops structure + * \param ptr a pointer to a buffer containing data to write + * \param size the size of an object to write, in bytes + * \param num the number of objects to write + * \returns the number of objects written, which will be less than **num** on + * error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + */ +extern DECLSPEC size_t SDLCALL SDL_RWwrite(SDL_RWops *context, + const void *ptr, size_t size, + size_t num); + +/** + * Close and free an allocated SDL_RWops structure. + * + * SDL_RWclose() closes and cleans up the SDL_RWops stream. It releases any + * resources used by the stream and frees the SDL_RWops itself with + * SDL_FreeRW(). This returns 0 on success, or -1 if the stream failed to + * flush to its output (e.g. to disk). + * + * Note that if this fails to flush the stream to disk, this function reports + * an error, but the SDL_RWops is still invalid once this function returns. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context SDL_RWops structure to close + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWwrite + */ +extern DECLSPEC int SDLCALL SDL_RWclose(SDL_RWops *context); + +/** + * Load all the data from an SDL data stream. + * + * The data is allocated with a zero byte at the end (null terminated) for + * convenience. This extra byte is not included in the value reported via + * `datasize`. + * + * The data should be freed with SDL_free(). + * + * \param src the SDL_RWops to read all available data from + * \param datasize if not NULL, will store the number of bytes read + * \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning + * \returns the data, or NULL if there was an error. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC void *SDLCALL SDL_LoadFile_RW(SDL_RWops *src, + size_t *datasize, + int freesrc); + +/** + * Load all the data from a file path. + * + * The data is allocated with a zero byte at the end (null terminated) for + * convenience. This extra byte is not included in the value reported via + * `datasize`. + * + * The data should be freed with SDL_free(). + * + * Prior to SDL 2.0.10, this function was a macro wrapping around + * SDL_LoadFile_RW. + * + * \param file the path to read all available data from + * \param datasize if not NULL, will store the number of bytes read + * \returns the data, or NULL if there was an error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC void *SDLCALL SDL_LoadFile(const char *file, size_t *datasize); + +/** + * \name Read endian functions + * + * Read an item of the specified endianness and return in native format. + */ +/* @{ */ + +/** + * Use this function to read a byte from an SDL_RWops. + * + * \param src the SDL_RWops to read from + * \returns the read byte on success or 0 on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteU8 + */ +extern DECLSPEC Uint8 SDLCALL SDL_ReadU8(SDL_RWops * src); + +/** + * Use this function to read 16 bits of little-endian data from an SDL_RWops + * and return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 16 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadBE16 + */ +extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src); + +/** + * Use this function to read 16 bits of big-endian data from an SDL_RWops and + * return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 16 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadLE16 + */ +extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src); + +/** + * Use this function to read 32 bits of little-endian data from an SDL_RWops + * and return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 32 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadBE32 + */ +extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src); + +/** + * Use this function to read 32 bits of big-endian data from an SDL_RWops and + * return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 32 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadLE32 + */ +extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src); + +/** + * Use this function to read 64 bits of little-endian data from an SDL_RWops + * and return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 64 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadBE64 + */ +extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src); + +/** + * Use this function to read 64 bits of big-endian data from an SDL_RWops and + * return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data + * \returns 64 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadLE64 + */ +extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src); +/* @} *//* Read endian functions */ + +/** + * \name Write endian functions + * + * Write an item of native format to the specified endianness. + */ +/* @{ */ + +/** + * Use this function to write a byte to an SDL_RWops. + * + * \param dst the SDL_RWops to write to + * \param value the byte value to write + * \returns 1 on success or 0 on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadU8 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteU8(SDL_RWops * dst, Uint8 value); + +/** + * Use this function to write 16 bits in native format to a SDL_RWops as + * little-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in little-endian + * format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteBE16 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value); + +/** + * Use this function to write 16 bits in native format to a SDL_RWops as + * big-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in big-endian format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteLE16 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value); + +/** + * Use this function to write 32 bits in native format to a SDL_RWops as + * little-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in little-endian + * format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteBE32 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value); + +/** + * Use this function to write 32 bits in native format to a SDL_RWops as + * big-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in big-endian format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteLE32 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value); + +/** + * Use this function to write 64 bits in native format to a SDL_RWops as + * little-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in little-endian + * format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteBE64 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); + +/** + * Use this function to write 64 bits in native format to a SDL_RWops as + * big-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in big-endian format. + * + * \param dst the stream to which data will be written + * \param value the data to be written, in native format + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteLE64 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value); +/* @} *//* Write endian functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_rwops_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_scancode.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_scancode.h new file mode 100644 index 00000000000..9dd3af7ba68 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_scancode.h @@ -0,0 +1,413 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_scancode.h + * + * Defines keyboard scancodes. + */ + +#ifndef SDL_scancode_h_ +#define SDL_scancode_h_ + +#include + +/** + * \brief The SDL keyboard scancode representation. + * + * Values of this type are used to represent keyboard keys, among other places + * in the \link SDL_Keysym::scancode key.keysym.scancode \endlink field of the + * SDL_Event structure. + * + * The values in this enumeration are based on the USB usage page standard: + * https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf + */ +typedef enum +{ + SDL_SCANCODE_UNKNOWN = 0, + + /** + * \name Usage page 0x07 + * + * These values are from usage page 0x07 (USB keyboard page). + */ + /* @{ */ + + SDL_SCANCODE_A = 4, + SDL_SCANCODE_B = 5, + SDL_SCANCODE_C = 6, + SDL_SCANCODE_D = 7, + SDL_SCANCODE_E = 8, + SDL_SCANCODE_F = 9, + SDL_SCANCODE_G = 10, + SDL_SCANCODE_H = 11, + SDL_SCANCODE_I = 12, + SDL_SCANCODE_J = 13, + SDL_SCANCODE_K = 14, + SDL_SCANCODE_L = 15, + SDL_SCANCODE_M = 16, + SDL_SCANCODE_N = 17, + SDL_SCANCODE_O = 18, + SDL_SCANCODE_P = 19, + SDL_SCANCODE_Q = 20, + SDL_SCANCODE_R = 21, + SDL_SCANCODE_S = 22, + SDL_SCANCODE_T = 23, + SDL_SCANCODE_U = 24, + SDL_SCANCODE_V = 25, + SDL_SCANCODE_W = 26, + SDL_SCANCODE_X = 27, + SDL_SCANCODE_Y = 28, + SDL_SCANCODE_Z = 29, + + SDL_SCANCODE_1 = 30, + SDL_SCANCODE_2 = 31, + SDL_SCANCODE_3 = 32, + SDL_SCANCODE_4 = 33, + SDL_SCANCODE_5 = 34, + SDL_SCANCODE_6 = 35, + SDL_SCANCODE_7 = 36, + SDL_SCANCODE_8 = 37, + SDL_SCANCODE_9 = 38, + SDL_SCANCODE_0 = 39, + + SDL_SCANCODE_RETURN = 40, + SDL_SCANCODE_ESCAPE = 41, + SDL_SCANCODE_BACKSPACE = 42, + SDL_SCANCODE_TAB = 43, + SDL_SCANCODE_SPACE = 44, + + SDL_SCANCODE_MINUS = 45, + SDL_SCANCODE_EQUALS = 46, + SDL_SCANCODE_LEFTBRACKET = 47, + SDL_SCANCODE_RIGHTBRACKET = 48, + SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return + * key on ISO keyboards and at the right end + * of the QWERTY row on ANSI keyboards. + * Produces REVERSE SOLIDUS (backslash) and + * VERTICAL LINE in a US layout, REVERSE + * SOLIDUS and VERTICAL LINE in a UK Mac + * layout, NUMBER SIGN and TILDE in a UK + * Windows layout, DOLLAR SIGN and POUND SIGN + * in a Swiss German layout, NUMBER SIGN and + * APOSTROPHE in a German layout, GRAVE + * ACCENT and POUND SIGN in a French Mac + * layout, and ASTERISK and MICRO SIGN in a + * French Windows layout. + */ + SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code + * instead of 49 for the same key, but all + * OSes I've seen treat the two codes + * identically. So, as an implementor, unless + * your keyboard generates both of those + * codes and your OS treats them differently, + * you should generate SDL_SCANCODE_BACKSLASH + * instead of this code. As a user, you + * should not rely on this code because SDL + * will never generate it with most (all?) + * keyboards. + */ + SDL_SCANCODE_SEMICOLON = 51, + SDL_SCANCODE_APOSTROPHE = 52, + SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI + * and ISO keyboards). Produces GRAVE ACCENT and + * TILDE in a US Windows layout and in US and UK + * Mac layouts on ANSI keyboards, GRAVE ACCENT + * and NOT SIGN in a UK Windows layout, SECTION + * SIGN and PLUS-MINUS SIGN in US and UK Mac + * layouts on ISO keyboards, SECTION SIGN and + * DEGREE SIGN in a Swiss German layout (Mac: + * only on ISO keyboards), CIRCUMFLEX ACCENT and + * DEGREE SIGN in a German layout (Mac: only on + * ISO keyboards), SUPERSCRIPT TWO and TILDE in a + * French Windows layout, COMMERCIAL AT and + * NUMBER SIGN in a French Mac layout on ISO + * keyboards, and LESS-THAN SIGN and GREATER-THAN + * SIGN in a Swiss German, German, or French Mac + * layout on ANSI keyboards. + */ + SDL_SCANCODE_COMMA = 54, + SDL_SCANCODE_PERIOD = 55, + SDL_SCANCODE_SLASH = 56, + + SDL_SCANCODE_CAPSLOCK = 57, + + SDL_SCANCODE_F1 = 58, + SDL_SCANCODE_F2 = 59, + SDL_SCANCODE_F3 = 60, + SDL_SCANCODE_F4 = 61, + SDL_SCANCODE_F5 = 62, + SDL_SCANCODE_F6 = 63, + SDL_SCANCODE_F7 = 64, + SDL_SCANCODE_F8 = 65, + SDL_SCANCODE_F9 = 66, + SDL_SCANCODE_F10 = 67, + SDL_SCANCODE_F11 = 68, + SDL_SCANCODE_F12 = 69, + + SDL_SCANCODE_PRINTSCREEN = 70, + SDL_SCANCODE_SCROLLLOCK = 71, + SDL_SCANCODE_PAUSE = 72, + SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but + does send code 73, not 117) */ + SDL_SCANCODE_HOME = 74, + SDL_SCANCODE_PAGEUP = 75, + SDL_SCANCODE_DELETE = 76, + SDL_SCANCODE_END = 77, + SDL_SCANCODE_PAGEDOWN = 78, + SDL_SCANCODE_RIGHT = 79, + SDL_SCANCODE_LEFT = 80, + SDL_SCANCODE_DOWN = 81, + SDL_SCANCODE_UP = 82, + + SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards + */ + SDL_SCANCODE_KP_DIVIDE = 84, + SDL_SCANCODE_KP_MULTIPLY = 85, + SDL_SCANCODE_KP_MINUS = 86, + SDL_SCANCODE_KP_PLUS = 87, + SDL_SCANCODE_KP_ENTER = 88, + SDL_SCANCODE_KP_1 = 89, + SDL_SCANCODE_KP_2 = 90, + SDL_SCANCODE_KP_3 = 91, + SDL_SCANCODE_KP_4 = 92, + SDL_SCANCODE_KP_5 = 93, + SDL_SCANCODE_KP_6 = 94, + SDL_SCANCODE_KP_7 = 95, + SDL_SCANCODE_KP_8 = 96, + SDL_SCANCODE_KP_9 = 97, + SDL_SCANCODE_KP_0 = 98, + SDL_SCANCODE_KP_PERIOD = 99, + + SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO + * keyboards have over ANSI ones, + * located between left shift and Y. + * Produces GRAVE ACCENT and TILDE in a + * US or UK Mac layout, REVERSE SOLIDUS + * (backslash) and VERTICAL LINE in a + * US or UK Windows layout, and + * LESS-THAN SIGN and GREATER-THAN SIGN + * in a Swiss German, German, or French + * layout. */ + SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */ + SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag, + * not a physical key - but some Mac keyboards + * do have a power key. */ + SDL_SCANCODE_KP_EQUALS = 103, + SDL_SCANCODE_F13 = 104, + SDL_SCANCODE_F14 = 105, + SDL_SCANCODE_F15 = 106, + SDL_SCANCODE_F16 = 107, + SDL_SCANCODE_F17 = 108, + SDL_SCANCODE_F18 = 109, + SDL_SCANCODE_F19 = 110, + SDL_SCANCODE_F20 = 111, + SDL_SCANCODE_F21 = 112, + SDL_SCANCODE_F22 = 113, + SDL_SCANCODE_F23 = 114, + SDL_SCANCODE_F24 = 115, + SDL_SCANCODE_EXECUTE = 116, + SDL_SCANCODE_HELP = 117, + SDL_SCANCODE_MENU = 118, + SDL_SCANCODE_SELECT = 119, + SDL_SCANCODE_STOP = 120, + SDL_SCANCODE_AGAIN = 121, /**< redo */ + SDL_SCANCODE_UNDO = 122, + SDL_SCANCODE_CUT = 123, + SDL_SCANCODE_COPY = 124, + SDL_SCANCODE_PASTE = 125, + SDL_SCANCODE_FIND = 126, + SDL_SCANCODE_MUTE = 127, + SDL_SCANCODE_VOLUMEUP = 128, + SDL_SCANCODE_VOLUMEDOWN = 129, +/* not sure whether there's a reason to enable these */ +/* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */ +/* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */ +/* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */ + SDL_SCANCODE_KP_COMMA = 133, + SDL_SCANCODE_KP_EQUALSAS400 = 134, + + SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see + footnotes in USB doc */ + SDL_SCANCODE_INTERNATIONAL2 = 136, + SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */ + SDL_SCANCODE_INTERNATIONAL4 = 138, + SDL_SCANCODE_INTERNATIONAL5 = 139, + SDL_SCANCODE_INTERNATIONAL6 = 140, + SDL_SCANCODE_INTERNATIONAL7 = 141, + SDL_SCANCODE_INTERNATIONAL8 = 142, + SDL_SCANCODE_INTERNATIONAL9 = 143, + SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */ + SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */ + SDL_SCANCODE_LANG3 = 146, /**< Katakana */ + SDL_SCANCODE_LANG4 = 147, /**< Hiragana */ + SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */ + SDL_SCANCODE_LANG6 = 149, /**< reserved */ + SDL_SCANCODE_LANG7 = 150, /**< reserved */ + SDL_SCANCODE_LANG8 = 151, /**< reserved */ + SDL_SCANCODE_LANG9 = 152, /**< reserved */ + + SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */ + SDL_SCANCODE_SYSREQ = 154, + SDL_SCANCODE_CANCEL = 155, + SDL_SCANCODE_CLEAR = 156, + SDL_SCANCODE_PRIOR = 157, + SDL_SCANCODE_RETURN2 = 158, + SDL_SCANCODE_SEPARATOR = 159, + SDL_SCANCODE_OUT = 160, + SDL_SCANCODE_OPER = 161, + SDL_SCANCODE_CLEARAGAIN = 162, + SDL_SCANCODE_CRSEL = 163, + SDL_SCANCODE_EXSEL = 164, + + SDL_SCANCODE_KP_00 = 176, + SDL_SCANCODE_KP_000 = 177, + SDL_SCANCODE_THOUSANDSSEPARATOR = 178, + SDL_SCANCODE_DECIMALSEPARATOR = 179, + SDL_SCANCODE_CURRENCYUNIT = 180, + SDL_SCANCODE_CURRENCYSUBUNIT = 181, + SDL_SCANCODE_KP_LEFTPAREN = 182, + SDL_SCANCODE_KP_RIGHTPAREN = 183, + SDL_SCANCODE_KP_LEFTBRACE = 184, + SDL_SCANCODE_KP_RIGHTBRACE = 185, + SDL_SCANCODE_KP_TAB = 186, + SDL_SCANCODE_KP_BACKSPACE = 187, + SDL_SCANCODE_KP_A = 188, + SDL_SCANCODE_KP_B = 189, + SDL_SCANCODE_KP_C = 190, + SDL_SCANCODE_KP_D = 191, + SDL_SCANCODE_KP_E = 192, + SDL_SCANCODE_KP_F = 193, + SDL_SCANCODE_KP_XOR = 194, + SDL_SCANCODE_KP_POWER = 195, + SDL_SCANCODE_KP_PERCENT = 196, + SDL_SCANCODE_KP_LESS = 197, + SDL_SCANCODE_KP_GREATER = 198, + SDL_SCANCODE_KP_AMPERSAND = 199, + SDL_SCANCODE_KP_DBLAMPERSAND = 200, + SDL_SCANCODE_KP_VERTICALBAR = 201, + SDL_SCANCODE_KP_DBLVERTICALBAR = 202, + SDL_SCANCODE_KP_COLON = 203, + SDL_SCANCODE_KP_HASH = 204, + SDL_SCANCODE_KP_SPACE = 205, + SDL_SCANCODE_KP_AT = 206, + SDL_SCANCODE_KP_EXCLAM = 207, + SDL_SCANCODE_KP_MEMSTORE = 208, + SDL_SCANCODE_KP_MEMRECALL = 209, + SDL_SCANCODE_KP_MEMCLEAR = 210, + SDL_SCANCODE_KP_MEMADD = 211, + SDL_SCANCODE_KP_MEMSUBTRACT = 212, + SDL_SCANCODE_KP_MEMMULTIPLY = 213, + SDL_SCANCODE_KP_MEMDIVIDE = 214, + SDL_SCANCODE_KP_PLUSMINUS = 215, + SDL_SCANCODE_KP_CLEAR = 216, + SDL_SCANCODE_KP_CLEARENTRY = 217, + SDL_SCANCODE_KP_BINARY = 218, + SDL_SCANCODE_KP_OCTAL = 219, + SDL_SCANCODE_KP_DECIMAL = 220, + SDL_SCANCODE_KP_HEXADECIMAL = 221, + + SDL_SCANCODE_LCTRL = 224, + SDL_SCANCODE_LSHIFT = 225, + SDL_SCANCODE_LALT = 226, /**< alt, option */ + SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */ + SDL_SCANCODE_RCTRL = 228, + SDL_SCANCODE_RSHIFT = 229, + SDL_SCANCODE_RALT = 230, /**< alt gr, option */ + SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */ + + SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered + * by any of the above, but since there's a + * special KMOD_MODE for it I'm adding it here + */ + + /* @} *//* Usage page 0x07 */ + + /** + * \name Usage page 0x0C + * + * These values are mapped from usage page 0x0C (USB consumer page). + */ + /* @{ */ + + SDL_SCANCODE_AUDIONEXT = 258, + SDL_SCANCODE_AUDIOPREV = 259, + SDL_SCANCODE_AUDIOSTOP = 260, + SDL_SCANCODE_AUDIOPLAY = 261, + SDL_SCANCODE_AUDIOMUTE = 262, + SDL_SCANCODE_MEDIASELECT = 263, + SDL_SCANCODE_WWW = 264, + SDL_SCANCODE_MAIL = 265, + SDL_SCANCODE_CALCULATOR = 266, + SDL_SCANCODE_COMPUTER = 267, + SDL_SCANCODE_AC_SEARCH = 268, + SDL_SCANCODE_AC_HOME = 269, + SDL_SCANCODE_AC_BACK = 270, + SDL_SCANCODE_AC_FORWARD = 271, + SDL_SCANCODE_AC_STOP = 272, + SDL_SCANCODE_AC_REFRESH = 273, + SDL_SCANCODE_AC_BOOKMARKS = 274, + + /* @} *//* Usage page 0x0C */ + + /** + * \name Walther keys + * + * These are values that Christian Walther added (for mac keyboard?). + */ + /* @{ */ + + SDL_SCANCODE_BRIGHTNESSDOWN = 275, + SDL_SCANCODE_BRIGHTNESSUP = 276, + SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display + switch, video mode switch */ + SDL_SCANCODE_KBDILLUMTOGGLE = 278, + SDL_SCANCODE_KBDILLUMDOWN = 279, + SDL_SCANCODE_KBDILLUMUP = 280, + SDL_SCANCODE_EJECT = 281, + SDL_SCANCODE_SLEEP = 282, + + SDL_SCANCODE_APP1 = 283, + SDL_SCANCODE_APP2 = 284, + + /* @} *//* Walther keys */ + + /** + * \name Usage page 0x0C (additional media keys) + * + * These values are mapped from usage page 0x0C (USB consumer page). + */ + /* @{ */ + + SDL_SCANCODE_AUDIOREWIND = 285, + SDL_SCANCODE_AUDIOFASTFORWARD = 286, + + /* @} *//* Usage page 0x0C (additional media keys) */ + + /* Add any other keys here. */ + + SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes + for array bounds */ +} SDL_Scancode; + +#endif /* SDL_scancode_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_sensor.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_sensor.h new file mode 100644 index 00000000000..8758cc303e1 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_sensor.h @@ -0,0 +1,301 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_sensor.h + * + * Include file for SDL sensor event handling + * + */ + +#ifndef SDL_sensor_h_ +#define SDL_sensor_h_ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +extern "C" { +/* *INDENT-ON* */ +#endif + +/** + * \brief SDL_sensor.h + * + * In order to use these functions, SDL_Init() must have been called + * with the ::SDL_INIT_SENSOR flag. This causes SDL to scan the system + * for sensors, and load appropriate drivers. + */ + +struct _SDL_Sensor; +typedef struct _SDL_Sensor SDL_Sensor; + +/** + * This is a unique ID for a sensor for the time it is connected to the system, + * and is never reused for the lifetime of the application. + * + * The ID value starts at 0 and increments from there. The value -1 is an invalid ID. + */ +typedef Sint32 SDL_SensorID; + +/* The different sensors defined by SDL + * + * Additional sensors may be available, using platform dependent semantics. + * + * Hare are the additional Android sensors: + * https://developer.android.com/reference/android/hardware/SensorEvent.html#values + */ +typedef enum +{ + SDL_SENSOR_INVALID = -1, /**< Returned for an invalid sensor */ + SDL_SENSOR_UNKNOWN, /**< Unknown sensor type */ + SDL_SENSOR_ACCEL, /**< Accelerometer */ + SDL_SENSOR_GYRO /**< Gyroscope */ +} SDL_SensorType; + +/** + * Accelerometer sensor + * + * The accelerometer returns the current acceleration in SI meters per + * second squared. This measurement includes the force of gravity, so + * a device at rest will have an value of SDL_STANDARD_GRAVITY away + * from the center of the earth. + * + * values[0]: Acceleration on the x axis + * values[1]: Acceleration on the y axis + * values[2]: Acceleration on the z axis + * + * For phones held in portrait mode and game controllers held in front of you, + * the axes are defined as follows: + * -X ... +X : left ... right + * -Y ... +Y : bottom ... top + * -Z ... +Z : farther ... closer + * + * The axis data is not changed when the phone is rotated. + * + * \sa SDL_GetDisplayOrientation() + */ +#define SDL_STANDARD_GRAVITY 9.80665f + +/** + * Gyroscope sensor + * + * The gyroscope returns the current rate of rotation in radians per second. + * The rotation is positive in the counter-clockwise direction. That is, + * an observer looking from a positive location on one of the axes would + * see positive rotation on that axis when it appeared to be rotating + * counter-clockwise. + * + * values[0]: Angular speed around the x axis (pitch) + * values[1]: Angular speed around the y axis (yaw) + * values[2]: Angular speed around the z axis (roll) + * + * For phones held in portrait mode and game controllers held in front of you, + * the axes are defined as follows: + * -X ... +X : left ... right + * -Y ... +Y : bottom ... top + * -Z ... +Z : farther ... closer + * + * The axis data is not changed when the phone or controller is rotated. + * + * \sa SDL_GetDisplayOrientation() + */ + +/* Function prototypes */ + +/** + * Locking for multi-threaded access to the sensor API + * + * If you are using the sensor API or handling events from multiple threads + * you should use these locking functions to protect access to the sensors. + * + * In particular, you are guaranteed that the sensor list won't change, so the + * API functions that take a sensor index will be valid, and sensor events + * will not be delivered. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC void SDLCALL SDL_LockSensors(void); +extern DECLSPEC void SDLCALL SDL_UnlockSensors(void); + +/** + * Count the number of sensors attached to the system right now. + * + * \returns the number of sensors detected. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_NumSensors(void); + +/** + * Get the implementation dependent name of a sensor. + * + * \param device_index The sensor to obtain name from + * \returns the sensor name, or NULL if `device_index` is out of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC const char *SDLCALL SDL_SensorGetDeviceName(int device_index); + +/** + * Get the type of a sensor. + * + * \param device_index The sensor to get the type from + * \returns the SDL_SensorType, or `SDL_SENSOR_INVALID` if `device_index` is + * out of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetDeviceType(int device_index); + +/** + * Get the platform dependent type of a sensor. + * + * \param device_index The sensor to check + * \returns the sensor platform dependent type, or -1 if `device_index` is out + * of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetDeviceNonPortableType(int device_index); + +/** + * Get the instance ID of a sensor. + * + * \param device_index The sensor to get instance id from + * \returns the sensor instance ID, or -1 if `device_index` is out of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetDeviceInstanceID(int device_index); + +/** + * Open a sensor for use. + * + * \param device_index The sensor to open + * \returns an SDL_Sensor sensor object, or NULL if an error occurred. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorOpen(int device_index); + +/** + * Return the SDL_Sensor associated with an instance id. + * + * \param instance_id The sensor from instance id + * \returns an SDL_Sensor object. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorFromInstanceID(SDL_SensorID instance_id); + +/** + * Get the implementation dependent name of a sensor + * + * \param sensor The SDL_Sensor object + * \returns the sensor name, or NULL if `sensor` is NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC const char *SDLCALL SDL_SensorGetName(SDL_Sensor *sensor); + +/** + * Get the type of a sensor. + * + * \param sensor The SDL_Sensor object to inspect + * \returns the SDL_SensorType type, or `SDL_SENSOR_INVALID` if `sensor` is + * NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetType(SDL_Sensor *sensor); + +/** + * Get the platform dependent type of a sensor. + * + * \param sensor The SDL_Sensor object to inspect + * \returns the sensor platform dependent type, or -1 if `sensor` is NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetNonPortableType(SDL_Sensor *sensor); + +/** + * Get the instance ID of a sensor. + * + * \param sensor The SDL_Sensor object to inspect + * \returns the sensor instance ID, or -1 if `sensor` is NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetInstanceID(SDL_Sensor *sensor); + +/** + * Get the current state of an opened sensor. + * + * The number of values and interpretation of the data is sensor dependent. + * + * \param sensor The SDL_Sensor object to query + * \param data A pointer filled with the current sensor state + * \param num_values The number of values to write to data + * \returns 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetData(SDL_Sensor * sensor, float *data, int num_values); + +/** + * Close a sensor previously opened with SDL_SensorOpen(). + * + * \param sensor The SDL_Sensor object to close + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC void SDLCALL SDL_SensorClose(SDL_Sensor * sensor); + +/** + * Update the current state of the open sensors. + * + * This is called automatically by the event loop if sensor events are + * enabled. + * + * This needs to be called from the thread that initialized the sensor + * subsystem. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC void SDLCALL SDL_SensorUpdate(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +} +/* *INDENT-ON* */ +#endif +#include + +#endif /* SDL_sensor_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_shape.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_shape.h new file mode 100644 index 00000000000..71662aad838 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_shape.h @@ -0,0 +1,155 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_shape_h_ +#define SDL_shape_h_ + +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** \file SDL_shape.h + * + * Header file for the shaped window API. + */ + +#define SDL_NONSHAPEABLE_WINDOW -1 +#define SDL_INVALID_SHAPE_ARGUMENT -2 +#define SDL_WINDOW_LACKS_SHAPE -3 + +/** + * Create a window that can be shaped with the specified position, dimensions, + * and flags. + * + * \param title The title of the window, in UTF-8 encoding. + * \param x The x position of the window, ::SDL_WINDOWPOS_CENTERED, or + * ::SDL_WINDOWPOS_UNDEFINED. + * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or + * ::SDL_WINDOWPOS_UNDEFINED. + * \param w The width of the window. + * \param h The height of the window. + * \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with + * any of the following: ::SDL_WINDOW_OPENGL, + * ::SDL_WINDOW_INPUT_GRABBED, ::SDL_WINDOW_HIDDEN, + * ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED, + * ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_BORDERLESS is always set, + * and ::SDL_WINDOW_FULLSCREEN is always unset. + * \return the window created, or NULL if window creation failed. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroyWindow + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned int w,unsigned int h,Uint32 flags); + +/** + * Return whether the given window is a shaped window. + * + * \param window The window to query for being shaped. + * \return SDL_TRUE if the window is a window that can be shaped, SDL_FALSE if + * the window is unshaped or NULL. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateShapedWindow + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsShapedWindow(const SDL_Window *window); + +/** \brief An enum denoting the specific type of contents present in an SDL_WindowShapeParams union. */ +typedef enum { + /** \brief The default mode, a binarized alpha cutoff of 1. */ + ShapeModeDefault, + /** \brief A binarized alpha cutoff with a given integer value. */ + ShapeModeBinarizeAlpha, + /** \brief A binarized alpha cutoff with a given integer value, but with the opposite comparison. */ + ShapeModeReverseBinarizeAlpha, + /** \brief A color key is applied. */ + ShapeModeColorKey +} WindowShapeMode; + +#define SDL_SHAPEMODEALPHA(mode) (mode == ShapeModeDefault || mode == ShapeModeBinarizeAlpha || mode == ShapeModeReverseBinarizeAlpha) + +/** \brief A union containing parameters for shaped windows. */ +typedef union { + /** \brief A cutoff alpha value for binarization of the window shape's alpha channel. */ + Uint8 binarizationCutoff; + SDL_Color colorKey; +} SDL_WindowShapeParams; + +/** \brief A struct that tags the SDL_WindowShapeParams union with an enum describing the type of its contents. */ +typedef struct SDL_WindowShapeMode { + /** \brief The mode of these window-shape parameters. */ + WindowShapeMode mode; + /** \brief Window-shape parameters. */ + SDL_WindowShapeParams parameters; +} SDL_WindowShapeMode; + +/** + * Set the shape and parameters of a shaped window. + * + * \param window The shaped window whose parameters should be set. + * \param shape A surface encoding the desired shape for the window. + * \param shape_mode The parameters to set for the shaped window. + * \return 0 on success, SDL_INVALID_SHAPE_ARGUMENT on an invalid shape + * argument, or SDL_NONSHAPEABLE_WINDOW if the SDL_Window given does + * not reference a valid shaped window. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WindowShapeMode + * \sa SDL_GetShapedWindowMode + */ +extern DECLSPEC int SDLCALL SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode); + +/** + * Get the shape parameters of a shaped window. + * + * \param window The shaped window whose parameters should be retrieved. + * \param shape_mode An empty shape-mode structure to fill, or NULL to check + * whether the window has a shape. + * \return 0 if the window has a shape and, provided shape_mode was not NULL, + * shape_mode has been filled with the mode data, + * SDL_NONSHAPEABLE_WINDOW if the SDL_Window given is not a shaped + * window, or SDL_WINDOW_LACKS_SHAPE if the SDL_Window given is a + * shapeable window currently lacking a shape. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WindowShapeMode + * \sa SDL_SetWindowShape + */ +extern DECLSPEC int SDLCALL SDL_GetShapedWindowMode(SDL_Window *window,SDL_WindowShapeMode *shape_mode); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_shape_h_ */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_stdinc.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_stdinc.h new file mode 100644 index 00000000000..23a14adaf47 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_stdinc.h @@ -0,0 +1,738 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_stdinc.h + * + * This is a general header that includes C language support. + */ + +#ifndef SDL_stdinc_h_ +#define SDL_stdinc_h_ + +#include + +#ifdef __APPLE__ +#ifndef _DARWIN_C_SOURCE +#define _DARWIN_C_SOURCE 1 /* for memset_pattern4() */ +#endif +#endif + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_STDIO_H +#include +#endif +#if defined(STDC_HEADERS) +# include +# include +# include +#else +# if defined(HAVE_STDLIB_H) +# include +# elif defined(HAVE_MALLOC_H) +# include +# endif +# if defined(HAVE_STDDEF_H) +# include +# endif +# if defined(HAVE_STDARG_H) +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_WCHAR_H +# include +#endif +#if defined(HAVE_INTTYPES_H) +# include +#elif defined(HAVE_STDINT_H) +# include +#endif +#ifdef HAVE_CTYPE_H +# include +#endif +#ifdef HAVE_MATH_H +# if defined(__WINRT__) +/* Defining _USE_MATH_DEFINES is required to get M_PI to be defined on + WinRT. See http://msdn.microsoft.com/en-us/library/4hwaceh6.aspx + for more information. +*/ +# define _USE_MATH_DEFINES +# endif +# include +#endif +#ifdef HAVE_FLOAT_H +# include +#endif +#if defined(HAVE_ALLOCA) && !defined(alloca) +# if defined(HAVE_ALLOCA_H) +# include +# elif defined(__GNUC__) +# define alloca __builtin_alloca +# elif defined(_MSC_VER) +# include +# define alloca _alloca +# elif defined(__WATCOMC__) +# include +# elif defined(__BORLANDC__) +# include +# elif defined(__DMC__) +# include +# elif defined(__AIX__) +#pragma alloca +# elif defined(__MRC__) +void *alloca(unsigned); +# else +char *alloca(); +# endif +#endif + +/** + * Check if the compiler supports a given builtin. + * Supported by virtually all clang versions and recent gcc. Use this + * instead of checking the clang version if possible. + */ +#ifdef __has_builtin +#define _SDL_HAS_BUILTIN(x) __has_builtin(x) +#else +#define _SDL_HAS_BUILTIN(x) 0 +#endif + +/** + * The number of elements in an array. + */ +#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) +#define SDL_TABLESIZE(table) SDL_arraysize(table) + +/** + * Macro useful for building other macros with strings in them + * + * e.g. #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n") + */ +#define SDL_STRINGIFY_ARG(arg) #arg + +/** + * \name Cast operators + * + * Use proper C++ casts when compiled as C++ to be compatible with the option + * -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above). + */ +/* @{ */ +#ifdef __cplusplus +#define SDL_reinterpret_cast(type, expression) reinterpret_cast(expression) +#define SDL_static_cast(type, expression) static_cast(expression) +#define SDL_const_cast(type, expression) const_cast(expression) +#else +#define SDL_reinterpret_cast(type, expression) ((type)(expression)) +#define SDL_static_cast(type, expression) ((type)(expression)) +#define SDL_const_cast(type, expression) ((type)(expression)) +#endif +/* @} *//* Cast operators */ + +/* Define a four character code as a Uint32 */ +#define SDL_FOURCC(A, B, C, D) \ + ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24)) + +/** + * \name Basic data types + */ +/* @{ */ + +#ifdef __CC_ARM +/* ARM's compiler throws warnings if we use an enum: like "SDL_bool x = a < b;" */ +#define SDL_FALSE 0 +#define SDL_TRUE 1 +typedef int SDL_bool; +#else +typedef enum +{ + SDL_FALSE = 0, + SDL_TRUE = 1 +} SDL_bool; +#endif + +/** + * \brief A signed 8-bit integer type. + */ +#define SDL_MAX_SINT8 ((Sint8)0x7F) /* 127 */ +#define SDL_MIN_SINT8 ((Sint8)(~0x7F)) /* -128 */ +typedef int8_t Sint8; +/** + * \brief An unsigned 8-bit integer type. + */ +#define SDL_MAX_UINT8 ((Uint8)0xFF) /* 255 */ +#define SDL_MIN_UINT8 ((Uint8)0x00) /* 0 */ +typedef uint8_t Uint8; +/** + * \brief A signed 16-bit integer type. + */ +#define SDL_MAX_SINT16 ((Sint16)0x7FFF) /* 32767 */ +#define SDL_MIN_SINT16 ((Sint16)(~0x7FFF)) /* -32768 */ +typedef int16_t Sint16; +/** + * \brief An unsigned 16-bit integer type. + */ +#define SDL_MAX_UINT16 ((Uint16)0xFFFF) /* 65535 */ +#define SDL_MIN_UINT16 ((Uint16)0x0000) /* 0 */ +typedef uint16_t Uint16; +/** + * \brief A signed 32-bit integer type. + */ +#define SDL_MAX_SINT32 ((Sint32)0x7FFFFFFF) /* 2147483647 */ +#define SDL_MIN_SINT32 ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */ +typedef int32_t Sint32; +/** + * \brief An unsigned 32-bit integer type. + */ +#define SDL_MAX_UINT32 ((Uint32)0xFFFFFFFFu) /* 4294967295 */ +#define SDL_MIN_UINT32 ((Uint32)0x00000000) /* 0 */ +typedef uint32_t Uint32; + +/** + * \brief A signed 64-bit integer type. + */ +#define SDL_MAX_SINT64 ((Sint64)0x7FFFFFFFFFFFFFFFll) /* 9223372036854775807 */ +#define SDL_MIN_SINT64 ((Sint64)(~0x7FFFFFFFFFFFFFFFll)) /* -9223372036854775808 */ +typedef int64_t Sint64; +/** + * \brief An unsigned 64-bit integer type. + */ +#define SDL_MAX_UINT64 ((Uint64)0xFFFFFFFFFFFFFFFFull) /* 18446744073709551615 */ +#define SDL_MIN_UINT64 ((Uint64)(0x0000000000000000ull)) /* 0 */ +typedef uint64_t Uint64; + +/* @} *//* Basic data types */ + +/** + * \name Floating-point constants + */ +/* @{ */ + +#ifdef FLT_EPSILON +#define SDL_FLT_EPSILON FLT_EPSILON +#else +#define SDL_FLT_EPSILON 1.1920928955078125e-07F /* 0x0.000002p0 */ +#endif + +/* @} *//* Floating-point constants */ + +/* Make sure we have macros for printing width-based integers. + * should define these but this is not true all platforms. + * (for example win32) */ +#ifndef SDL_PRIs64 +#ifdef PRIs64 +#define SDL_PRIs64 PRIs64 +#elif defined(__WIN32__) +#define SDL_PRIs64 "I64d" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIs64 "ld" +#else +#define SDL_PRIs64 "lld" +#endif +#endif +#ifndef SDL_PRIu64 +#ifdef PRIu64 +#define SDL_PRIu64 PRIu64 +#elif defined(__WIN32__) +#define SDL_PRIu64 "I64u" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIu64 "lu" +#else +#define SDL_PRIu64 "llu" +#endif +#endif +#ifndef SDL_PRIx64 +#ifdef PRIx64 +#define SDL_PRIx64 PRIx64 +#elif defined(__WIN32__) +#define SDL_PRIx64 "I64x" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIx64 "lx" +#else +#define SDL_PRIx64 "llx" +#endif +#endif +#ifndef SDL_PRIX64 +#ifdef PRIX64 +#define SDL_PRIX64 PRIX64 +#elif defined(__WIN32__) +#define SDL_PRIX64 "I64X" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIX64 "lX" +#else +#define SDL_PRIX64 "llX" +#endif +#endif +#ifndef SDL_PRIs32 +#ifdef PRId32 +#define SDL_PRIs32 PRId32 +#else +#define SDL_PRIs32 "d" +#endif +#endif +#ifndef SDL_PRIu32 +#ifdef PRIu32 +#define SDL_PRIu32 PRIu32 +#else +#define SDL_PRIu32 "u" +#endif +#endif +#ifndef SDL_PRIx32 +#ifdef PRIx32 +#define SDL_PRIx32 PRIx32 +#else +#define SDL_PRIx32 "x" +#endif +#endif +#ifndef SDL_PRIX32 +#ifdef PRIX32 +#define SDL_PRIX32 PRIX32 +#else +#define SDL_PRIX32 "X" +#endif +#endif + +/* Annotations to help code analysis tools */ +#ifdef SDL_DISABLE_ANALYZE_MACROS +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#else +#if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */ +#include + +#define SDL_IN_BYTECAP(x) _In_bytecount_(x) +#define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x) +#define SDL_OUT_Z_CAP(x) _Out_z_cap_(x) +#define SDL_OUT_CAP(x) _Out_cap_(x) +#define SDL_OUT_BYTECAP(x) _Out_bytecap_(x) +#define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x) + +#define SDL_PRINTF_FORMAT_STRING _Printf_format_string_ +#define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_ +#else +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#endif +#if defined(__GNUC__) +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 ))) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 ))) +#else +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#endif +#endif /* SDL_DISABLE_ANALYZE_MACROS */ + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) +#define SDL_COMPILE_TIME_ASSERT(name, x) _Static_assert(x, #x) +#elif defined(__cplusplus) && (__cplusplus >= 201103L) +#define SDL_COMPILE_TIME_ASSERT(name, x) static_assert(x, #x) +#else /* universal, but may trigger -Wunused-local-typedefs */ +#define SDL_COMPILE_TIME_ASSERT(name, x) \ + typedef int SDL_compile_time_assert_ ## name[(x) * 2 - 1] +#endif +/** \cond */ +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); +SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); +SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); +SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); +SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); +SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); +SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); +SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ +/** \endcond */ + +/* Check to make sure enums are the size of ints, for structure packing. + For both Watcom C/C++ and Borland C/C++ the compiler option that makes + enums having the size of an int must be enabled. + This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). +*/ + +/** \cond */ +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +#if !defined(__ANDROID__) && !defined(__VITA__) + /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */ +typedef enum +{ + DUMMY_ENUM_VALUE +} SDL_DUMMY_ENUM; + +SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); +#endif +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ +/** \endcond */ + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef HAVE_ALLOCA +#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) +#define SDL_stack_free(data) +#else +#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) +#define SDL_stack_free(data) SDL_free(data) +#endif + +extern DECLSPEC void *SDLCALL SDL_malloc(size_t size); +extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); +extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); +extern DECLSPEC void SDLCALL SDL_free(void *mem); + +typedef void *(SDLCALL *SDL_malloc_func)(size_t size); +typedef void *(SDLCALL *SDL_calloc_func)(size_t nmemb, size_t size); +typedef void *(SDLCALL *SDL_realloc_func)(void *mem, size_t size); +typedef void (SDLCALL *SDL_free_func)(void *mem); + +/** + * Get the current set of SDL memory functions + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC void SDLCALL SDL_GetMemoryFunctions(SDL_malloc_func *malloc_func, + SDL_calloc_func *calloc_func, + SDL_realloc_func *realloc_func, + SDL_free_func *free_func); + +/** + * Replace SDL's memory allocation functions with a custom set + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC int SDLCALL SDL_SetMemoryFunctions(SDL_malloc_func malloc_func, + SDL_calloc_func calloc_func, + SDL_realloc_func realloc_func, + SDL_free_func free_func); + +/** + * Get the number of outstanding (unfreed) allocations + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC int SDLCALL SDL_GetNumAllocations(void); + +extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); +extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); + +extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)); + +extern DECLSPEC int SDLCALL SDL_abs(int x); + +/* NOTE: these double-evaluate their arguments, so you should never have side effects in the parameters */ +#define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) +#define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) +#define SDL_clamp(x, a, b) (((x) < (a)) ? (a) : (((x) > (b)) ? (b) : (x))) + +extern DECLSPEC int SDLCALL SDL_isalpha(int x); +extern DECLSPEC int SDLCALL SDL_isalnum(int x); +extern DECLSPEC int SDLCALL SDL_isblank(int x); +extern DECLSPEC int SDLCALL SDL_iscntrl(int x); +extern DECLSPEC int SDLCALL SDL_isdigit(int x); +extern DECLSPEC int SDLCALL SDL_isxdigit(int x); +extern DECLSPEC int SDLCALL SDL_ispunct(int x); +extern DECLSPEC int SDLCALL SDL_isspace(int x); +extern DECLSPEC int SDLCALL SDL_isupper(int x); +extern DECLSPEC int SDLCALL SDL_islower(int x); +extern DECLSPEC int SDLCALL SDL_isprint(int x); +extern DECLSPEC int SDLCALL SDL_isgraph(int x); +extern DECLSPEC int SDLCALL SDL_toupper(int x); +extern DECLSPEC int SDLCALL SDL_tolower(int x); + +extern DECLSPEC Uint32 SDLCALL SDL_crc32(Uint32 crc, const void *data, size_t len); + +extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len); + +#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) +#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) +#define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x))) + +/* Note that memset() is a byte assignment and this is a 32-bit assignment, so they're not directly equivalent. */ +SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords) +{ +#ifdef __APPLE__ + memset_pattern4(dst, &val, dwords * 4); +#elif defined(__GNUC__) && defined(__i386__) + int u0, u1, u2; + __asm__ __volatile__ ( + "cld \n\t" + "rep ; stosl \n\t" + : "=&D" (u0), "=&a" (u1), "=&c" (u2) + : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, dwords)) + : "memory" + ); +#else + size_t _n = (dwords + 3) / 4; + Uint32 *_p = SDL_static_cast(Uint32 *, dst); + Uint32 _val = (val); + if (dwords == 0) { + return; + } + switch (dwords % 4) { + case 0: do { *_p++ = _val; SDL_FALLTHROUGH; + case 3: *_p++ = _val; SDL_FALLTHROUGH; + case 2: *_p++ = _val; SDL_FALLTHROUGH; + case 1: *_p++ = _val; + } while ( --_n ); + } +#endif +} + +extern DECLSPEC void *SDLCALL SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); + +extern DECLSPEC void *SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); +extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); + +extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); +extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC wchar_t *SDLCALL SDL_wcsdup(const wchar_t *wstr); +extern DECLSPEC wchar_t *SDLCALL SDL_wcsstr(const wchar_t *haystack, const wchar_t *needle); + +extern DECLSPEC int SDLCALL SDL_wcscmp(const wchar_t *str1, const wchar_t *str2); +extern DECLSPEC int SDLCALL SDL_wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen); +extern DECLSPEC int SDLCALL SDL_wcscasecmp(const wchar_t *str1, const wchar_t *str2); +extern DECLSPEC int SDLCALL SDL_wcsncasecmp(const wchar_t *str1, const wchar_t *str2, size_t len); + +extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); +extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes); +extern DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); +extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); +extern DECLSPEC char *SDLCALL SDL_strrev(char *str); +extern DECLSPEC char *SDLCALL SDL_strupr(char *str); +extern DECLSPEC char *SDLCALL SDL_strlwr(char *str); +extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c); +extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c); +extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle); +extern DECLSPEC char *SDLCALL SDL_strtokr(char *s1, const char *s2, char **saveptr); +extern DECLSPEC size_t SDLCALL SDL_utf8strlen(const char *str); + +extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix); + +extern DECLSPEC int SDLCALL SDL_atoi(const char *str); +extern DECLSPEC double SDLCALL SDL_atof(const char *str); +extern DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base); +extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base); +extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base); +extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base); +extern DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp); + +extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); +extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); +extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); +extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); + +extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) SDL_SCANF_VARARG_FUNC(2); +extern DECLSPEC int SDLCALL SDL_vsscanf(const char *text, const char *fmt, va_list ap); +extern DECLSPEC int SDLCALL SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ... ) SDL_PRINTF_VARARG_FUNC(3); +extern DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap); +extern DECLSPEC int SDLCALL SDL_asprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); +extern DECLSPEC int SDLCALL SDL_vasprintf(char **strp, const char *fmt, va_list ap); + +#ifndef HAVE_M_PI +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288 /**< pi */ +#endif +#endif + +/** + * Use this function to compute arc cosine of `x`. + * + * The definition of `y = acos(x)` is `x = cos(y)`. + * + * Domain: `-1 <= x <= 1` + * + * Range: `0 <= y <= Pi` + * + * \param x floating point value, in radians. + * \returns arc cosine of `x`. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC double SDLCALL SDL_acos(double x); +extern DECLSPEC float SDLCALL SDL_acosf(float x); +extern DECLSPEC double SDLCALL SDL_asin(double x); +extern DECLSPEC float SDLCALL SDL_asinf(float x); +extern DECLSPEC double SDLCALL SDL_atan(double x); +extern DECLSPEC float SDLCALL SDL_atanf(float x); +extern DECLSPEC double SDLCALL SDL_atan2(double y, double x); +extern DECLSPEC float SDLCALL SDL_atan2f(float y, float x); +extern DECLSPEC double SDLCALL SDL_ceil(double x); +extern DECLSPEC float SDLCALL SDL_ceilf(float x); +extern DECLSPEC double SDLCALL SDL_copysign(double x, double y); +extern DECLSPEC float SDLCALL SDL_copysignf(float x, float y); +extern DECLSPEC double SDLCALL SDL_cos(double x); +extern DECLSPEC float SDLCALL SDL_cosf(float x); +extern DECLSPEC double SDLCALL SDL_exp(double x); +extern DECLSPEC float SDLCALL SDL_expf(float x); +extern DECLSPEC double SDLCALL SDL_fabs(double x); +extern DECLSPEC float SDLCALL SDL_fabsf(float x); +extern DECLSPEC double SDLCALL SDL_floor(double x); +extern DECLSPEC float SDLCALL SDL_floorf(float x); +extern DECLSPEC double SDLCALL SDL_trunc(double x); +extern DECLSPEC float SDLCALL SDL_truncf(float x); +extern DECLSPEC double SDLCALL SDL_fmod(double x, double y); +extern DECLSPEC float SDLCALL SDL_fmodf(float x, float y); +extern DECLSPEC double SDLCALL SDL_log(double x); +extern DECLSPEC float SDLCALL SDL_logf(float x); +extern DECLSPEC double SDLCALL SDL_log10(double x); +extern DECLSPEC float SDLCALL SDL_log10f(float x); +extern DECLSPEC double SDLCALL SDL_pow(double x, double y); +extern DECLSPEC float SDLCALL SDL_powf(float x, float y); +extern DECLSPEC double SDLCALL SDL_round(double x); +extern DECLSPEC float SDLCALL SDL_roundf(float x); +extern DECLSPEC long SDLCALL SDL_lround(double x); +extern DECLSPEC long SDLCALL SDL_lroundf(float x); +extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); +extern DECLSPEC float SDLCALL SDL_scalbnf(float x, int n); +extern DECLSPEC double SDLCALL SDL_sin(double x); +extern DECLSPEC float SDLCALL SDL_sinf(float x); +extern DECLSPEC double SDLCALL SDL_sqrt(double x); +extern DECLSPEC float SDLCALL SDL_sqrtf(float x); +extern DECLSPEC double SDLCALL SDL_tan(double x); +extern DECLSPEC float SDLCALL SDL_tanf(float x); + +/* The SDL implementation of iconv() returns these error codes */ +#define SDL_ICONV_ERROR (size_t)-1 +#define SDL_ICONV_E2BIG (size_t)-2 +#define SDL_ICONV_EILSEQ (size_t)-3 +#define SDL_ICONV_EINVAL (size_t)-4 + +/* SDL_iconv_* are now always real symbols/types, not macros or inlined. */ +typedef struct _SDL_iconv_t *SDL_iconv_t; +extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, + const char *fromcode); +extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); +extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, + size_t * inbytesleft, char **outbuf, + size_t * outbytesleft); + +/** + * This function converts a string between encodings in one pass, returning a + * string that must be freed with SDL_free() or NULL on error. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, + const char *fromcode, + const char *inbuf, + size_t inbytesleft); +#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_wchar_utf8(S) SDL_iconv_string("UTF-8", "WCHAR_T", (char *)S, (SDL_wcslen(S)+1)*sizeof(wchar_t)) + +/* force builds using Clang's static analysis tools to use literal C runtime + here, since there are possibly tests that are ineffective otherwise. */ +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) + +/* The analyzer knows about strlcpy even when the system doesn't provide it */ +#ifndef HAVE_STRLCPY +size_t strlcpy(char* dst, const char* src, size_t size); +#endif + +/* The analyzer knows about strlcat even when the system doesn't provide it */ +#ifndef HAVE_STRLCAT +size_t strlcat(char* dst, const char* src, size_t size); +#endif + +#define SDL_malloc malloc +#define SDL_calloc calloc +#define SDL_realloc realloc +#define SDL_free free +#define SDL_memset memset +#define SDL_memcpy memcpy +#define SDL_memmove memmove +#define SDL_memcmp memcmp +#define SDL_strlcpy strlcpy +#define SDL_strlcat strlcat +#define SDL_strlen strlen +#define SDL_wcslen wcslen +#define SDL_wcslcpy wcslcpy +#define SDL_wcslcat wcslcat +#define SDL_strdup strdup +#define SDL_wcsdup wcsdup +#define SDL_strchr strchr +#define SDL_strrchr strrchr +#define SDL_strstr strstr +#define SDL_wcsstr wcsstr +#define SDL_strtokr strtok_r +#define SDL_strcmp strcmp +#define SDL_wcscmp wcscmp +#define SDL_strncmp strncmp +#define SDL_wcsncmp wcsncmp +#define SDL_strcasecmp strcasecmp +#define SDL_strncasecmp strncasecmp +#define SDL_sscanf sscanf +#define SDL_vsscanf vsscanf +#define SDL_snprintf snprintf +#define SDL_vsnprintf vsnprintf +#endif + +SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_BYTECAP(dwords*4) const void *src, size_t dwords) +{ + return SDL_memcpy(dst, src, dwords * 4); +} + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_stdinc_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_surface.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_surface.h new file mode 100644 index 00000000000..318b541f2b9 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_surface.h @@ -0,0 +1,995 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_surface.h + * + * Header file for ::SDL_Surface definition and management functions. + */ + +#ifndef SDL_surface_h_ +#define SDL_surface_h_ + +#include +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name Surface flags + * + * These are the currently supported flags for the ::SDL_Surface. + * + * \internal + * Used internally (read-only). + */ +/* @{ */ +#define SDL_SWSURFACE 0 /**< Just here for compatibility */ +#define SDL_PREALLOC 0x00000001 /**< Surface uses preallocated memory */ +#define SDL_RLEACCEL 0x00000002 /**< Surface is RLE encoded */ +#define SDL_DONTFREE 0x00000004 /**< Surface is referenced internally */ +#define SDL_SIMD_ALIGNED 0x00000008 /**< Surface uses aligned memory */ +/* @} *//* Surface flags */ + +/** + * Evaluates to true if the surface needs to be locked before access. + */ +#define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0) + +/** + * \brief A collection of pixels used in software blitting. + * + * \note This structure should be treated as read-only, except for \c pixels, + * which, if not NULL, contains the raw pixel data for the surface. + */ +typedef struct SDL_Surface +{ + Uint32 flags; /**< Read-only */ + SDL_PixelFormat *format; /**< Read-only */ + int w, h; /**< Read-only */ + int pitch; /**< Read-only */ + void *pixels; /**< Read-write */ + + /** Application data associated with the surface */ + void *userdata; /**< Read-write */ + + /** information needed for surfaces requiring locks */ + int locked; /**< Read-only */ + + /** list of BlitMap that hold a reference to this surface */ + void *list_blitmap; /**< Private */ + + /** clipping information */ + SDL_Rect clip_rect; /**< Read-only */ + + /** info for fast blit mapping to other surfaces */ + struct SDL_BlitMap *map; /**< Private */ + + /** Reference count -- used when freeing surface */ + int refcount; /**< Read-mostly */ +} SDL_Surface; + +/** + * \brief The type of function used for surface blitting functions. + */ +typedef int (SDLCALL *SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, + struct SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * \brief The formula used for converting between YUV and RGB + */ +typedef enum +{ + SDL_YUV_CONVERSION_JPEG, /**< Full range JPEG */ + SDL_YUV_CONVERSION_BT601, /**< BT.601 (the default) */ + SDL_YUV_CONVERSION_BT709, /**< BT.709 */ + SDL_YUV_CONVERSION_AUTOMATIC /**< BT.601 for SD content, BT.709 for HD content */ +} SDL_YUV_CONVERSION_MODE; + +/** + * Allocate a new RGB surface. + * + * If `depth` is 4 or 8 bits, an empty palette is allocated for the surface. + * If `depth` is greater than 8 bits, the pixel format is set using the + * [RGBA]mask parameters. + * + * The [RGBA]mask parameters are the bitmasks used to extract that color from + * a pixel. For instance, `Rmask` being 0xFF000000 means the red data is + * stored in the most significant byte. Using zeros for the RGB masks sets a + * default value, based on the depth. For example: + * + * ```c++ + * SDL_CreateRGBSurface(0,w,h,32,0,0,0,0); + * ``` + * + * However, using zero for the Amask results in an Amask of 0. + * + * By default surfaces with an alpha mask are set up for blending as with: + * + * ```c++ + * SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND) + * ``` + * + * You can change this by calling SDL_SetSurfaceBlendMode() and selecting a + * different `blendMode`. + * + * \param flags the flags are unused and should be set to 0 + * \param width the width of the surface + * \param height the height of the surface + * \param depth the depth of the surface in bits + * \param Rmask the red mask for the pixels + * \param Gmask the green mask for the pixels + * \param Bmask the blue mask for the pixels + * \param Amask the alpha mask for the pixels + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface + (Uint32 flags, int width, int height, int depth, + Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); + + +/* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */ + +/** + * Allocate a new RGB surface with a specific pixel format. + * + * This function operates mostly like SDL_CreateRGBSurface(), except instead + * of providing pixel color masks, you provide it with a predefined format + * from SDL_PixelFormatEnum. + * + * \param flags the flags are unused and should be set to 0 + * \param width the width of the surface + * \param height the height of the surface + * \param depth the depth of the surface in bits + * \param format the SDL_PixelFormatEnum for the new surface's pixel format. + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_CreateRGBSurface + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormat + (Uint32 flags, int width, int height, int depth, Uint32 format); + +/** + * Allocate a new RGB surface with existing pixel data. + * + * This function operates mostly like SDL_CreateRGBSurface(), except it does + * not allocate memory for the pixel data, instead the caller provides an + * existing buffer of data for the surface to use. + * + * No copy is made of the pixel data. Pixel data is not managed automatically; + * you must free the surface before you free the pixel data. + * + * \param pixels a pointer to existing pixel data + * \param width the width of the surface + * \param height the height of the surface + * \param depth the depth of the surface in bits + * \param pitch the pitch of the surface in bytes + * \param Rmask the red mask for the pixels + * \param Gmask the green mask for the pixels + * \param Bmask the blue mask for the pixels + * \param Amask the alpha mask for the pixels + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRGBSurface + * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, + int width, + int height, + int depth, + int pitch, + Uint32 Rmask, + Uint32 Gmask, + Uint32 Bmask, + Uint32 Amask); + +/* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */ + +/** + * Allocate a new RGB surface with with a specific pixel format and existing + * pixel data. + * + * This function operates mostly like SDL_CreateRGBSurfaceFrom(), except + * instead of providing pixel color masks, you provide it with a predefined + * format from SDL_PixelFormatEnum. + * + * No copy is made of the pixel data. Pixel data is not managed automatically; + * you must free the surface before you free the pixel data. + * + * \param pixels a pointer to existing pixel data + * \param width the width of the surface + * \param height the height of the surface + * \param depth the depth of the surface in bits + * \param pitch the pitch of the surface in bytes + * \param format the SDL_PixelFormatEnum for the new surface's pixel format. + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormatFrom + (void *pixels, int width, int height, int depth, int pitch, Uint32 format); + +/** + * Free an RGB surface. + * + * It is safe to pass NULL to this function. + * + * \param surface the SDL_Surface to free. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRGBSurface + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_LoadBMP + * \sa SDL_LoadBMP_RW + */ +extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface); + +/** + * Set the palette used by a surface. + * + * A single palette can be shared with many surfaces. + * + * \param surface the SDL_Surface structure to update + * \param palette the SDL_Palette structure to use + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface * surface, + SDL_Palette * palette); + +/** + * Set up a surface for directly accessing the pixels. + * + * Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to + * and read from `surface->pixels`, using the pixel format stored in + * `surface->format`. Once you are done accessing the surface, you should use + * SDL_UnlockSurface() to release it. + * + * Not all surfaces require locking. If `SDL_MUSTLOCK(surface)` evaluates to + * 0, then you can read and write to the surface at any time, and the pixel + * format of the surface will not change. + * + * \param surface the SDL_Surface structure to be locked + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MUSTLOCK + * \sa SDL_UnlockSurface + */ +extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface * surface); + +/** + * Release a surface after directly accessing the pixels. + * + * \param surface the SDL_Surface structure to be unlocked + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockSurface + */ +extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface * surface); + +/** + * Load a BMP image from a seekable SDL data stream. + * + * The new surface should be freed with SDL_FreeSurface(). Not doing so will + * result in a memory leak. + * + * src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. + * Alternitavely, you might also use the macro SDL_LoadBMP to load a bitmap + * from a file, convert it to an SDL_Surface and then close the file. + * + * \param src the data stream for the surface + * \param freesrc non-zero to close the stream after being read + * \returns a pointer to a new SDL_Surface structure or NULL if there was an + * error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeSurface + * \sa SDL_RWFromFile + * \sa SDL_LoadBMP + * \sa SDL_SaveBMP_RW + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP_RW(SDL_RWops * src, + int freesrc); + +/** + * Load a surface from a file. + * + * Convenience macro. + */ +#define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) + +/** + * Save a surface to a seekable SDL data stream in BMP format. + * + * Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the + * BMP directly. Other RGB formats with 8-bit or higher get converted to a + * 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit + * surface before they are saved. YUV and paletted 1-bit and 4-bit formats are + * not supported. + * + * \param surface the SDL_Surface structure containing the image to be saved + * \param dst a data stream to save to + * \param freedst non-zero to close the stream after being written + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadBMP_RW + * \sa SDL_SaveBMP + */ +extern DECLSPEC int SDLCALL SDL_SaveBMP_RW + (SDL_Surface * surface, SDL_RWops * dst, int freedst); + +/** + * Save a surface to a file. + * + * Convenience macro. + */ +#define SDL_SaveBMP(surface, file) \ + SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) + +/** + * Set the RLE acceleration hint for a surface. + * + * If RLE is enabled, color key and alpha blending blits are much faster, but + * the surface must be locked before directly accessing the pixels. + * + * \param surface the SDL_Surface structure to optimize + * \param flag 0 to disable, non-zero to enable RLE acceleration + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_LockSurface + * \sa SDL_UnlockSurface + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface * surface, + int flag); + +/** + * Returns whether the surface is RLE enabled + * + * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + * + * \param surface the SDL_Surface structure to query + * \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_SetSurfaceRLE + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSurfaceRLE(SDL_Surface * surface); + +/** + * Set the color key (transparent pixel) in a surface. + * + * The color key defines a pixel value that will be treated as transparent in + * a blit. For example, one can use this to specify that cyan pixels should be + * considered transparent, and therefore not rendered. + * + * It is a pixel of the format used by the surface, as generated by + * SDL_MapRGB(). + * + * RLE acceleration can substantially speed up blitting of images with large + * horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. + * + * \param surface the SDL_Surface structure to update + * \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key + * \param key the transparent pixel + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_GetColorKey + */ +extern DECLSPEC int SDLCALL SDL_SetColorKey(SDL_Surface * surface, + int flag, Uint32 key); + +/** + * Returns whether the surface has a color key + * + * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + * + * \param surface the SDL_Surface structure to query + * \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_SetColorKey + * \sa SDL_GetColorKey + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasColorKey(SDL_Surface * surface); + +/** + * Get the color key (transparent pixel) for a surface. + * + * The color key is a pixel of the format used by the surface, as generated by + * SDL_MapRGB(). + * + * If the surface doesn't have color key enabled this function returns -1. + * + * \param surface the SDL_Surface structure to query + * \param key a pointer filled in with the transparent pixel + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_SetColorKey + */ +extern DECLSPEC int SDLCALL SDL_GetColorKey(SDL_Surface * surface, + Uint32 * key); + +/** + * Set an additional color value multiplied into blit operations. + * + * When this surface is blitted, during the blit operation each source color + * channel is modulated by the appropriate color value according to the + * following formula: + * + * `srcC = srcC * (color / 255)` + * + * \param surface the SDL_Surface structure to update + * \param r the red color value multiplied into blit operations + * \param g the green color value multiplied into blit operations + * \param b the blue color value multiplied into blit operations + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceColorMod + * \sa SDL_SetSurfaceAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceColorMod(SDL_Surface * surface, + Uint8 r, Uint8 g, Uint8 b); + + +/** + * Get the additional color value multiplied into blit operations. + * + * \param surface the SDL_Surface structure to query + * \param r a pointer filled in with the current red color value + * \param g a pointer filled in with the current green color value + * \param b a pointer filled in with the current blue color value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceAlphaMod + * \sa SDL_SetSurfaceColorMod + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceColorMod(SDL_Surface * surface, + Uint8 * r, Uint8 * g, + Uint8 * b); + +/** + * Set an additional alpha value used in blit operations. + * + * When this surface is blitted, during the blit operation the source alpha + * value is modulated by this alpha value according to the following formula: + * + * `srcA = srcA * (alpha / 255)` + * + * \param surface the SDL_Surface structure to update + * \param alpha the alpha value multiplied into blit operations + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceAlphaMod + * \sa SDL_SetSurfaceColorMod + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceAlphaMod(SDL_Surface * surface, + Uint8 alpha); + +/** + * Get the additional alpha value used in blit operations. + * + * \param surface the SDL_Surface structure to query + * \param alpha a pointer filled in with the current alpha value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceColorMod + * \sa SDL_SetSurfaceAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceAlphaMod(SDL_Surface * surface, + Uint8 * alpha); + +/** + * Set the blend mode used for blit operations. + * + * To copy a surface to another surface (or texture) without blending with the + * existing data, the blendmode of the SOURCE surface should be set to + * `SDL_BLENDMODE_NONE`. + * + * \param surface the SDL_Surface structure to update + * \param blendMode the SDL_BlendMode to use for blit blending + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceBlendMode + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface * surface, + SDL_BlendMode blendMode); + +/** + * Get the blend mode used for blit operations. + * + * \param surface the SDL_Surface structure to query + * \param blendMode a pointer filled in with the current SDL_BlendMode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetSurfaceBlendMode + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface * surface, + SDL_BlendMode *blendMode); + +/** + * Set the clipping rectangle for a surface. + * + * When `surface` is the destination of a blit, only the area within the clip + * rectangle is drawn into. + * + * Note that blits are automatically clipped to the edges of the source and + * destination surfaces. + * + * \param surface the SDL_Surface structure to be clipped + * \param rect the SDL_Rect structure representing the clipping rectangle, or + * NULL to disable clipping + * \returns SDL_TRUE if the rectangle intersects the surface, otherwise + * SDL_FALSE and blits will be completely clipped. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_GetClipRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface * surface, + const SDL_Rect * rect); + +/** + * Get the clipping rectangle for a surface. + * + * When `surface` is the destination of a blit, only the area within the clip + * rectangle is drawn into. + * + * \param surface the SDL_Surface structure representing the surface to be + * clipped + * \param rect an SDL_Rect structure filled in with the clipping rectangle for + * the surface + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_SetClipRect + */ +extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface, + SDL_Rect * rect); + +/* + * Creates a new surface identical to the existing surface. + * + * The returned surface should be freed with SDL_FreeSurface(). + * + * \param surface the surface to duplicate. + * \returns a copy of the surface, or NULL on failure; call SDL_GetError() for + * more information. + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_DuplicateSurface(SDL_Surface * surface); + +/** + * Copy an existing surface to a new surface of the specified format. + * + * This function is used to optimize images for faster *repeat* blitting. This + * is accomplished by converting the original and storing the result as a new + * surface. The new, optimized surface can then be used as the source for + * future blits, making them faster. + * + * \param src the existing SDL_Surface structure to convert + * \param fmt the SDL_PixelFormat structure that the new surface is optimized + * for + * \param flags the flags are unused and should be set to 0; this is a + * leftover from SDL 1.2's API + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocFormat + * \sa SDL_ConvertSurfaceFormat + * \sa SDL_CreateRGBSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface + (SDL_Surface * src, const SDL_PixelFormat * fmt, Uint32 flags); + +/** + * Copy an existing surface to a new surface of the specified format enum. + * + * This function operates just like SDL_ConvertSurface(), but accepts an + * SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such, + * it might be easier to call but it doesn't have access to palette + * information for the destination surface, in case that would be important. + * + * \param src the existing SDL_Surface structure to convert + * \param pixel_format the SDL_PixelFormatEnum that the new surface is + * optimized for + * \param flags the flags are unused and should be set to 0; this is a + * leftover from SDL 1.2's API + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocFormat + * \sa SDL_ConvertSurface + * \sa SDL_CreateRGBSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat + (SDL_Surface * src, Uint32 pixel_format, Uint32 flags); + +/** + * Copy a block of pixels of one format to another format. + * + * \param width the width of the block to copy, in pixels + * \param height the height of the block to copy, in pixels + * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + * \param src a pointer to the source pixels + * \param src_pitch the pitch of the source pixels, in bytes + * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + * \param dst a pointer to be filled in with new pixel data + * \param dst_pitch the pitch of the destination pixels, in bytes + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, + Uint32 src_format, + const void * src, int src_pitch, + Uint32 dst_format, + void * dst, int dst_pitch); + +/** + * Premultiply the alpha on a block of pixels. + * + * This is safe to use with src == dst, but not for other overlapping areas. + * + * This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. + * + * \param width the width of the block to convert, in pixels + * \param height the height of the block to convert, in pixels + * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format + * \param src a pointer to the source pixels + * \param src_pitch the pitch of the source pixels, in bytes + * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format + * \param dst a pointer to be filled in with premultiplied pixel data + * \param dst_pitch the pitch of the destination pixels, in bytes + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_PremultiplyAlpha(int width, int height, + Uint32 src_format, + const void * src, int src_pitch, + Uint32 dst_format, + void * dst, int dst_pitch); + +/** + * Perform a fast fill of a rectangle with a specific color. + * + * `color` should be a pixel of the format used by the surface, and can be + * generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + * alpha component then the destination is simply filled with that alpha + * information, no blending takes place. + * + * If there is a clip rectangle set on the destination (set via + * SDL_SetClipRect()), then this function will fill based on the intersection + * of the clip rectangle and `rect`. + * + * \param dst the SDL_Surface structure that is the drawing target + * \param rect the SDL_Rect structure representing the rectangle to fill, or + * NULL to fill the entire surface + * \param color the color to fill with + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FillRects + */ +extern DECLSPEC int SDLCALL SDL_FillRect + (SDL_Surface * dst, const SDL_Rect * rect, Uint32 color); + +/** + * Perform a fast fill of a set of rectangles with a specific color. + * + * `color` should be a pixel of the format used by the surface, and can be + * generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + * alpha component then the destination is simply filled with that alpha + * information, no blending takes place. + * + * If there is a clip rectangle set on the destination (set via + * SDL_SetClipRect()), then this function will fill based on the intersection + * of the clip rectangle and `rect`. + * + * \param dst the SDL_Surface structure that is the drawing target + * \param rects an array of SDL_Rects representing the rectangles to fill. + * \param count the number of rectangles in the array + * \param color the color to fill with + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FillRect + */ +extern DECLSPEC int SDLCALL SDL_FillRects + (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color); + +/* !!! FIXME: merge this documentation with the wiki */ +/** + * Performs a fast blit from the source surface to the destination surface. + * + * This assumes that the source and destination rectangles are + * the same size. If either \c srcrect or \c dstrect are NULL, the entire + * surface (\c src or \c dst) is copied. The final blit rectangles are saved + * in \c srcrect and \c dstrect after all clipping is performed. + * + * \returns 0 if the blit is successful, otherwise it returns -1. + * + * The blit function should not be called on a locked surface. + * + * The blit semantics for surfaces with and without blending and colorkey + * are defined as follows: + * \verbatim + RGBA->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB, set destination alpha to source per-surface alpha value. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + + RGBA->RGBA: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source alpha-channel and per-surface alpha) + SDL_SRCCOLORKEY ignored. + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy all of RGBA to the destination. + if SDL_SRCCOLORKEY set, only copy the pixels matching the + RGB values of the source color key, ignoring alpha in the + comparison. + + RGB->RGB: + Source surface blend mode set to SDL_BLENDMODE_BLEND: + alpha-blend (using the source per-surface alpha) + Source surface blend mode set to SDL_BLENDMODE_NONE: + copy RGB. + both: + if SDL_SRCCOLORKEY set, only copy the pixels matching the + source color key. + \endverbatim + * + * You should call SDL_BlitSurface() unless you know exactly how SDL + * blitting works internally and how to use the other blit functions. + */ +#define SDL_BlitSurface SDL_UpperBlit + +/** + * Perform a fast blit from the source surface to the destination surface. + * + * SDL_UpperBlit() has been replaced by SDL_BlitSurface(), which is merely a + * macro for this function with a less confusing name. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + */ +extern DECLSPEC int SDLCALL SDL_UpperBlit + (SDL_Surface * src, const SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * Perform low-level surface blitting only. + * + * This is a semi-private blit function and it performs low-level surface + * blitting, assuming the input rectangles have already been clipped. + * + * Unless you know what you're doing, you should be using SDL_BlitSurface() + * instead. + * + * \param src the SDL_Surface structure to be copied from + * \param srcrect the SDL_Rect structure representing the rectangle to be + * copied, or NULL to copy the entire surface + * \param dst the SDL_Surface structure that is the blit target + * \param dstrect the SDL_Rect structure representing the rectangle that is + * copied into + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + */ +extern DECLSPEC int SDLCALL SDL_LowerBlit + (SDL_Surface * src, SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + + +/** + * Perform a fast, low quality, stretch blit between two surfaces of the same + * format. + * + * Please use SDL_BlitScaled() instead. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface * src, + const SDL_Rect * srcrect, + SDL_Surface * dst, + const SDL_Rect * dstrect); + +/** + * Perform bilinear scaling between two surfaces of the same format, 32BPP. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_SoftStretchLinear(SDL_Surface * src, + const SDL_Rect * srcrect, + SDL_Surface * dst, + const SDL_Rect * dstrect); + + +#define SDL_BlitScaled SDL_UpperBlitScaled + +/** + * Perform a scaled surface copy to a destination surface. + * + * SDL_UpperBlitScaled() has been replaced by SDL_BlitScaled(), which is + * merely a macro for this function with a less confusing name. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitScaled + */ +extern DECLSPEC int SDLCALL SDL_UpperBlitScaled + (SDL_Surface * src, const SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * Perform low-level surface scaled blitting only. + * + * This is a semi-private function and it performs low-level surface blitting, + * assuming the input rectangles have already been clipped. + * + * \param src the SDL_Surface structure to be copied from + * \param srcrect the SDL_Rect structure representing the rectangle to be + * copied + * \param dst the SDL_Surface structure that is the blit target + * \param dstrect the SDL_Rect structure representing the rectangle that is + * copied into + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitScaled + */ +extern DECLSPEC int SDLCALL SDL_LowerBlitScaled + (SDL_Surface * src, SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * Set the YUV conversion mode + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC void SDLCALL SDL_SetYUVConversionMode(SDL_YUV_CONVERSION_MODE mode); + +/** + * Get the YUV conversion mode + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_YUV_CONVERSION_MODE SDLCALL SDL_GetYUVConversionMode(void); + +/** + * Get the YUV conversion mode, returning the correct mode for the resolution + * when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_YUV_CONVERSION_MODE SDLCALL SDL_GetYUVConversionModeForResolution(int width, int height); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_surface_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_system.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_system.h new file mode 100644 index 00000000000..7324329ac1d --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_system.h @@ -0,0 +1,575 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_system.h + * + * Include file for platform specific SDL API functions + */ + +#ifndef SDL_system_h_ +#define SDL_system_h_ + +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* Platform specific functions for Windows */ +#ifdef __WIN32__ + +typedef void (SDLCALL * SDL_WindowsMessageHook)(void *userdata, void *hWnd, unsigned int message, Uint64 wParam, Sint64 lParam); + +/** + * Set a callback for every Windows message, run before TranslateMessage(). + * + * \param callback The SDL_WindowsMessageHook function to call. + * \param userdata a pointer to pass to every iteration of `callback` + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC void SDLCALL SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata); + +/** + * Get the D3D9 adapter index that matches the specified display index. + * + * The returned adapter index can be passed to `IDirect3D9::CreateDevice` and + * controls on which monitor a full screen application will appear. + * + * \param displayIndex the display index for which to get the D3D9 adapter + * index + * \returns the D3D9 adapter index on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.1. + */ +extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex( int displayIndex ); + +typedef struct IDirect3DDevice9 IDirect3DDevice9; + +/** + * Get the D3D9 device associated with a renderer. + * + * Once you are done using the device, you should release it to avoid a + * resource leak. + * + * \param renderer the renderer from which to get the associated D3D device + * \returns the D3D9 device associated with given renderer or NULL if it is + * not a D3D9 renderer; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.1. + */ +extern DECLSPEC IDirect3DDevice9* SDLCALL SDL_RenderGetD3D9Device(SDL_Renderer * renderer); + +typedef struct ID3D11Device ID3D11Device; + +/** + * Get the D3D11 device associated with a renderer. + * + * Once you are done using the device, you should release it to avoid a + * resource leak. + * + * \param renderer the renderer from which to get the associated D3D11 device + * \returns the D3D11 device associated with given renderer or NULL if it is + * not a D3D11 renderer; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC ID3D11Device* SDLCALL SDL_RenderGetD3D11Device(SDL_Renderer * renderer); + +/** + * Get the DXGI Adapter and Output indices for the specified display index. + * + * The DXGI Adapter and Output indices can be passed to `EnumAdapters` and + * `EnumOutputs` respectively to get the objects required to create a DX10 or + * DX11 device and swap chain. + * + * Before SDL 2.0.4 this function did not return a value. Since SDL 2.0.4 it + * returns an SDL_bool. + * + * \param displayIndex the display index for which to get both indices + * \param adapterIndex a pointer to be filled in with the adapter index + * \param outputIndex a pointer to be filled in with the output index + * \returns SDL_TRUE on success or SDL_FALSE on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex ); + +#endif /* __WIN32__ */ + + +/* Platform specific functions for Linux */ +#ifdef __LINUX__ + +/** + * Sets the UNIX nice value for a thread. + * + * This uses setpriority() if possible, and RealtimeKit if available. + * + * \param threadID the Unix thread ID to change priority of. + * \param priority The new, Unix-specific, priority value. + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriority(Sint64 threadID, int priority); + +/** + * Sets the priority (not nice level) and scheduling policy for a thread. + * + * This uses setpriority() if possible, and RealtimeKit if available. + * + * \param threadID The Unix thread ID to change priority of. + * \param sdlPriority The new SDL_ThreadPriority value. + * \param schedPolicy The new scheduling policy (SCHED_FIFO, SCHED_RR, + * SCHED_OTHER, etc...) + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedPolicy); + +#endif /* __LINUX__ */ + +/* Platform specific functions for iOS */ +#ifdef __IPHONEOS__ + +#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam) + +/** + * Use this function to set the animation callback on Apple iOS. + * + * The function prototype for `callback` is: + * + * ```c + * void callback(void* callbackParam); + * ``` + * + * Where its parameter, `callbackParam`, is what was passed as `callbackParam` + * to SDL_iPhoneSetAnimationCallback(). + * + * This function is only available on Apple iOS. + * + * For more information see: + * [README-ios.md](https://hg.libsdl.org/SDL/file/default/docs/README-ios.md) + * + * This functions is also accessible using the macro + * SDL_iOSSetAnimationCallback() since SDL 2.0.4. + * + * \param window the window for which the animation callback should be set + * \param interval the number of frames after which **callback** will be + * called + * \param callback the function to call for every frame. + * \param callbackParam a pointer that is passed to `callback`. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_iPhoneSetEventPump + */ +extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); + +#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) + +/** + * Use this function to enable or disable the SDL event pump on Apple iOS. + * + * This function is only available on Apple iOS. + * + * This functions is also accessible using the macro SDL_iOSSetEventPump() + * since SDL 2.0.4. + * + * \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_iPhoneSetAnimationCallback + */ +extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); + +#endif /* __IPHONEOS__ */ + + +/* Platform specific functions for Android */ +#ifdef __ANDROID__ + +/** + * Get the Android Java Native Interface Environment of the current thread. + * + * This is the JNIEnv one needs to access the Java virtual machine from native + * code, and is needed for many Android APIs to be usable from C. + * + * The prototype of the function in SDL's code actually declare a void* return + * type, even if the implementation returns a pointer to a JNIEnv. The + * rationale being that the SDL headers can avoid including jni.h. + * + * \returns a pointer to Java native interface object (JNIEnv) to which the + * current thread is attached, or 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetActivity + */ +extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(void); + +/** + * Retrieve the Java instance of the Android activity class. + * + * The prototype of the function in SDL's code actually declares a void* + * return type, even if the implementation returns a jobject. The rationale + * being that the SDL headers can avoid including jni.h. + * + * The jobject returned by the function is a local reference and must be + * released by the caller. See the PushLocalFrame() and PopLocalFrame() or + * DeleteLocalRef() functions of the Java native interface: + * + * https://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html + * + * \returns the jobject representing the instance of the Activity class of the + * Android application, or NULL on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetJNIEnv + */ +extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(void); + +/** + * Query Android API level of the current device. + * + * - API level 31: Android 12 + * - API level 30: Android 11 + * - API level 29: Android 10 + * - API level 28: Android 9 + * - API level 27: Android 8.1 + * - API level 26: Android 8.0 + * - API level 25: Android 7.1 + * - API level 24: Android 7.0 + * - API level 23: Android 6.0 + * - API level 22: Android 5.1 + * - API level 21: Android 5.0 + * - API level 20: Android 4.4W + * - API level 19: Android 4.4 + * - API level 18: Android 4.3 + * - API level 17: Android 4.2 + * - API level 16: Android 4.1 + * - API level 15: Android 4.0.3 + * - API level 14: Android 4.0 + * - API level 13: Android 3.2 + * - API level 12: Android 3.1 + * - API level 11: Android 3.0 + * - API level 10: Android 2.3.3 + * + * \returns the Android API level. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC int SDLCALL SDL_GetAndroidSDKVersion(void); + +/** + * Query if the application is running on Android TV. + * + * \returns SDL_TRUE if this is Android TV, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsAndroidTV(void); + +/** + * Query if the application is running on a Chromebook. + * + * \returns SDL_TRUE if this is a Chromebook, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsChromebook(void); + +/** + * Query if the application is running on a Samsung DeX docking station. + * + * \returns SDL_TRUE if this is a DeX docking station, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsDeXMode(void); + +/** + * Trigger the Android system back button behavior. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC void SDLCALL SDL_AndroidBackButton(void); + +/** + See the official Android developer guide for more information: + http://developer.android.com/guide/topics/data/data-storage.html +*/ +#define SDL_ANDROID_EXTERNAL_STORAGE_READ 0x01 +#define SDL_ANDROID_EXTERNAL_STORAGE_WRITE 0x02 + +/** + * Get the path used for internal storage for this application. + * + * This path is unique to your application and cannot be written to by other + * applications. + * + * Your internal storage path is typically: + * `/data/data/your.app.package/files`. + * + * \returns the path used for internal storage or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetExternalStorageState + */ +extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(void); + +/** + * Get the current state of external storage. + * + * The current state of external storage, a bitmask of these values: + * `SDL_ANDROID_EXTERNAL_STORAGE_READ`, `SDL_ANDROID_EXTERNAL_STORAGE_WRITE`. + * + * If external storage is currently unavailable, this will return 0. + * + * \returns the current state of external storage on success or 0 on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetExternalStoragePath + */ +extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(void); + +/** + * Get the path used for external storage for this application. + * + * This path is unique to your application, but is public and can be written + * to by other applications. + * + * Your external storage path is typically: + * `/storage/sdcard0/Android/data/your.app.package/files`. + * + * \returns the path used for external storage for this application on success + * or NULL on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetExternalStorageState + */ +extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(void); + +/** + * Request permissions at runtime. + * + * This blocks the calling thread until the permission is granted or denied. + * + * \param permission The permission to request. + * \returns SDL_TRUE if the permission was granted, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AndroidRequestPermission(const char *permission); + +/** + * Shows an Android toast notification. + * + * Toasts are a sort of lightweight notification that are unique to Android. + * + * https://developer.android.com/guide/topics/ui/notifiers/toasts + * + * Shows toast in UI thread. + * + * For the `gravity` parameter, choose a value from here, or -1 if you don't + * have a preference: + * + * https://developer.android.com/reference/android/view/Gravity + * + * \param message text message to be shown + * \param duration 0=short, 1=long + * \param gravity where the notification should appear on the screen. + * \param xoffset set this parameter only when gravity >=0 + * \param yoffset set this parameter only when gravity >=0 + * \returns 0 if success, -1 if any error occurs. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_AndroidShowToast(const char* message, int duration, int gravity, int xoffset, int yoffset); + +/** + * Send a user command to SDLActivity. + * + * Override "boolean onUnhandledMessage(Message msg)" to handle the message. + * + * \param command user command that must be greater or equal to 0x8000 + * \param param user parameter + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC int SDLCALL SDL_AndroidSendMessage(Uint32 command, int param); + +#endif /* __ANDROID__ */ + +/* Platform specific functions for WinRT */ +#ifdef __WINRT__ + +/** + * \brief WinRT / Windows Phone path types + */ +typedef enum +{ + /** \brief The installed app's root directory. + Files here are likely to be read-only. */ + SDL_WINRT_PATH_INSTALLED_LOCATION, + + /** \brief The app's local data store. Files may be written here */ + SDL_WINRT_PATH_LOCAL_FOLDER, + + /** \brief The app's roaming data store. Unsupported on Windows Phone. + Files written here may be copied to other machines via a network + connection. + */ + SDL_WINRT_PATH_ROAMING_FOLDER, + + /** \brief The app's temporary data store. Unsupported on Windows Phone. + Files written here may be deleted at any time. */ + SDL_WINRT_PATH_TEMP_FOLDER +} SDL_WinRT_Path; + + +/** + * \brief WinRT Device Family + */ +typedef enum +{ + /** \brief Unknown family */ + SDL_WINRT_DEVICEFAMILY_UNKNOWN, + + /** \brief Desktop family*/ + SDL_WINRT_DEVICEFAMILY_DESKTOP, + + /** \brief Mobile family (for example smartphone) */ + SDL_WINRT_DEVICEFAMILY_MOBILE, + + /** \brief XBox family */ + SDL_WINRT_DEVICEFAMILY_XBOX, +} SDL_WinRT_DeviceFamily; + + +/** + * Retrieve a WinRT defined path on the local file system. + * + * Not all paths are available on all versions of Windows. This is especially + * true on Windows Phone. Check the documentation for the given SDL_WinRT_Path + * for more information on which path types are supported where. + * + * Documentation on most app-specific path types on WinRT can be found on + * MSDN, at the URL: + * + * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx + * + * \param pathType the type of path to retrieve, one of SDL_WinRT_Path + * \returns a UCS-2 string (16-bit, wide-char) containing the path, or NULL if + * the path is not available for any reason; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.3. + * + * \sa SDL_WinRTGetFSPathUTF8 + */ +extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType); + +/** + * Retrieve a WinRT defined path on the local file system. + * + * Not all paths are available on all versions of Windows. This is especially + * true on Windows Phone. Check the documentation for the given SDL_WinRT_Path + * for more information on which path types are supported where. + * + * Documentation on most app-specific path types on WinRT can be found on + * MSDN, at the URL: + * + * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx + * + * \param pathType the type of path to retrieve, one of SDL_WinRT_Path + * \returns a UTF-8 string (8-bit, multi-byte) containing the path, or NULL if + * the path is not available for any reason; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.3. + * + * \sa SDL_WinRTGetFSPathUNICODE + */ +extern DECLSPEC const char * SDLCALL SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType); + +/** + * Detects the device family of WinRT plattform at runtime. + * + * \returns a value from the SDL_WinRT_DeviceFamily enum. + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_WinRT_DeviceFamily SDLCALL SDL_WinRTGetDeviceFamily(); + +#endif /* __WINRT__ */ + +/** + * Query if the current device is a tablet. + * + * If SDL can't determine this, it will return SDL_FALSE. + * + * \returns SDL_TRUE if the device is a tablet, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTablet(void); + +/* Functions used by iOS application delegates to notify SDL about state changes */ +extern DECLSPEC void SDLCALL SDL_OnApplicationWillTerminate(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationDidReceiveMemoryWarning(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationWillResignActive(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationDidEnterBackground(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationWillEnterForeground(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationDidBecomeActive(void); +#ifdef __IPHONEOS__ +extern DECLSPEC void SDLCALL SDL_OnApplicationDidChangeStatusBarOrientation(void); +#endif + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_system_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_syswm.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_syswm.h new file mode 100644 index 00000000000..b55544efe88 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_syswm.h @@ -0,0 +1,386 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_syswm.h + * + * Include file for SDL custom system window manager hooks. + */ + +#ifndef SDL_syswm_h_ +#define SDL_syswm_h_ + +#include +#include +#include +#include + +/** + * \brief SDL_syswm.h + * + * Your application has access to a special type of event ::SDL_SYSWMEVENT, + * which contains window-manager specific information and arrives whenever + * an unhandled window event occurs. This event is ignored by default, but + * you can enable it with SDL_EventState(). + */ +struct SDL_SysWMinfo; + +#if !defined(SDL_PROTOTYPES_ONLY) + +#if defined(SDL_VIDEO_DRIVER_WINDOWS) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX +#endif +#include +#endif + +#if defined(SDL_VIDEO_DRIVER_WINRT) +#include +#endif + +/* This is the structure for custom window manager events */ +#if defined(SDL_VIDEO_DRIVER_X11) +#if defined(__APPLE__) && defined(__MACH__) +/* conflicts with Quickdraw.h */ +#define Cursor X11Cursor +#endif + +#include +#include + +#if defined(__APPLE__) && defined(__MACH__) +/* matches the re-define above */ +#undef Cursor +#endif + +#endif /* defined(SDL_VIDEO_DRIVER_X11) */ + +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) +#include +#endif + +#if defined(SDL_VIDEO_DRIVER_COCOA) +#ifdef __OBJC__ +@class NSWindow; +#else +typedef struct _NSWindow NSWindow; +#endif +#endif + +#if defined(SDL_VIDEO_DRIVER_UIKIT) +#ifdef __OBJC__ +#include +#else +typedef struct _UIWindow UIWindow; +typedef struct _UIViewController UIViewController; +#endif +typedef Uint32 GLuint; +#endif + +#if defined(SDL_VIDEO_VULKAN) || defined(SDL_VIDEO_METAL) +#define SDL_METALVIEW_TAG 255 +#endif + +#if defined(SDL_VIDEO_DRIVER_ANDROID) +typedef struct ANativeWindow ANativeWindow; +typedef void *EGLSurface; +#endif + +#if defined(SDL_VIDEO_DRIVER_VIVANTE) +#include +#endif + +#if defined(SDL_VIDEO_DRIVER_OS2) +#define INCL_WIN +#include +#endif +#endif /* SDL_PROTOTYPES_ONLY */ + +#if defined(SDL_VIDEO_DRIVER_KMSDRM) +struct gbm_device; +#endif + + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(SDL_PROTOTYPES_ONLY) +/** + * These are the various supported windowing subsystems + */ +typedef enum +{ + SDL_SYSWM_UNKNOWN, + SDL_SYSWM_WINDOWS, + SDL_SYSWM_X11, + SDL_SYSWM_DIRECTFB, + SDL_SYSWM_COCOA, + SDL_SYSWM_UIKIT, + SDL_SYSWM_WAYLAND, + SDL_SYSWM_MIR, /* no longer available, left for API/ABI compatibility. Remove in 2.1! */ + SDL_SYSWM_WINRT, + SDL_SYSWM_ANDROID, + SDL_SYSWM_VIVANTE, + SDL_SYSWM_OS2, + SDL_SYSWM_HAIKU, + SDL_SYSWM_KMSDRM, + SDL_SYSWM_RISCOS +} SDL_SYSWM_TYPE; + +/** + * The custom event structure. + */ +struct SDL_SysWMmsg +{ + SDL_version version; + SDL_SYSWM_TYPE subsystem; + union + { +#if defined(SDL_VIDEO_DRIVER_WINDOWS) + struct { + HWND hwnd; /**< The window for the message */ + UINT msg; /**< The type of message */ + WPARAM wParam; /**< WORD message parameter */ + LPARAM lParam; /**< LONG message parameter */ + } win; +#endif +#if defined(SDL_VIDEO_DRIVER_X11) + struct { + XEvent event; + } x11; +#endif +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) + struct { + DFBEvent event; + } dfb; +#endif +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { + /* Latest version of Xcode clang complains about empty structs in C v. C++: + error: empty struct has size 0 in C, size 1 in C++ + */ + int dummy; + /* No Cocoa window events yet */ + } cocoa; +#endif +#if defined(SDL_VIDEO_DRIVER_UIKIT) + struct + { + int dummy; + /* No UIKit window events yet */ + } uikit; +#endif +#if defined(SDL_VIDEO_DRIVER_VIVANTE) + struct + { + int dummy; + /* No Vivante window events yet */ + } vivante; +#endif +#if defined(SDL_VIDEO_DRIVER_OS2) + struct + { + BOOL fFrame; /**< TRUE if hwnd is a frame window */ + HWND hwnd; /**< The window receiving the message */ + ULONG msg; /**< The message identifier */ + MPARAM mp1; /**< The first first message parameter */ + MPARAM mp2; /**< The second first message parameter */ + } os2; +#endif + /* Can't have an empty union */ + int dummy; + } msg; +}; + +/** + * The custom window manager information structure. + * + * When this structure is returned, it holds information about which + * low level system it is using, and will be one of SDL_SYSWM_TYPE. + */ +struct SDL_SysWMinfo +{ + SDL_version version; + SDL_SYSWM_TYPE subsystem; + union + { +#if defined(SDL_VIDEO_DRIVER_WINDOWS) + struct + { + HWND window; /**< The window handle */ + HDC hdc; /**< The window device context */ + HINSTANCE hinstance; /**< The instance handle */ + } win; +#endif +#if defined(SDL_VIDEO_DRIVER_WINRT) + struct + { + IInspectable * window; /**< The WinRT CoreWindow */ + } winrt; +#endif +#if defined(SDL_VIDEO_DRIVER_X11) + struct + { + Display *display; /**< The X11 display */ + Window window; /**< The X11 window */ + } x11; +#endif +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) + struct + { + IDirectFB *dfb; /**< The directfb main interface */ + IDirectFBWindow *window; /**< The directfb window handle */ + IDirectFBSurface *surface; /**< The directfb client surface */ + } dfb; +#endif +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { +#if defined(__OBJC__) && defined(__has_feature) + #if __has_feature(objc_arc) + NSWindow __unsafe_unretained *window; /**< The Cocoa window */ + #else + NSWindow *window; /**< The Cocoa window */ + #endif +#else + NSWindow *window; /**< The Cocoa window */ +#endif + } cocoa; +#endif +#if defined(SDL_VIDEO_DRIVER_UIKIT) + struct + { +#if defined(__OBJC__) && defined(__has_feature) + #if __has_feature(objc_arc) + UIWindow __unsafe_unretained *window; /**< The UIKit window */ + #else + UIWindow *window; /**< The UIKit window */ + #endif +#else + UIWindow *window; /**< The UIKit window */ +#endif + GLuint framebuffer; /**< The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */ + GLuint colorbuffer; /**< The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */ + GLuint resolveFramebuffer; /**< The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */ + } uikit; +#endif +#if defined(SDL_VIDEO_DRIVER_WAYLAND) + struct + { + struct wl_display *display; /**< Wayland display */ + struct wl_surface *surface; /**< Wayland surface */ + void *shell_surface; /**< DEPRECATED Wayland shell_surface (window manager handle) */ + struct wl_egl_window *egl_window; /**< Wayland EGL window (native window) */ + struct xdg_surface *xdg_surface; /**< Wayland xdg surface (window manager handle) */ + struct xdg_toplevel *xdg_toplevel; /**< Wayland xdg toplevel role */ + struct xdg_popup *xdg_popup; /**< Wayland xdg popup role */ + struct xdg_positioner *xdg_positioner; /**< Wayland xdg positioner, for popup */ + } wl; +#endif +#if defined(SDL_VIDEO_DRIVER_MIR) /* no longer available, left for API/ABI compatibility. Remove in 2.1! */ + struct + { + void *connection; /**< Mir display server connection */ + void *surface; /**< Mir surface */ + } mir; +#endif + +#if defined(SDL_VIDEO_DRIVER_ANDROID) + struct + { + ANativeWindow *window; + EGLSurface surface; + } android; +#endif + +#if defined(SDL_VIDEO_DRIVER_OS2) + struct + { + HWND hwnd; /**< The window handle */ + HWND hwndFrame; /**< The frame window handle */ + } os2; +#endif + +#if defined(SDL_VIDEO_DRIVER_VIVANTE) + struct + { + EGLNativeDisplayType display; + EGLNativeWindowType window; + } vivante; +#endif + +#if defined(SDL_VIDEO_DRIVER_KMSDRM) + struct + { + int dev_index; /**< Device index (ex: the X in /dev/dri/cardX) */ + int drm_fd; /**< DRM FD (unavailable on Vulkan windows) */ + struct gbm_device *gbm_dev; /**< GBM device (unavailable on Vulkan windows) */ + } kmsdrm; +#endif + + /* Make sure this union is always 64 bytes (8 64-bit pointers). */ + /* Be careful not to overflow this if you add a new target! */ + Uint8 dummy[64]; + } info; +}; + +#endif /* SDL_PROTOTYPES_ONLY */ + +typedef struct SDL_SysWMinfo SDL_SysWMinfo; + + +/** + * Get driver-specific information about a window. + * + * You must include SDL_syswm.h for the declaration of SDL_SysWMinfo. + * + * The caller must initialize the `info` structure's version by using + * `SDL_VERSION(&info.version)`, and then this function will fill in the rest + * of the structure with information about the given window. + * + * \param window the window about which information is being requested + * \param info an SDL_SysWMinfo structure filled in with window information + * \returns SDL_TRUE if the function is implemented and the `version` member + * of the `info` struct is valid, or SDL_FALSE if the information + * could not be retrieved; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window, + SDL_SysWMinfo * info); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_syswm_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_thread.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_thread.h new file mode 100644 index 00000000000..0a535c88fa3 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_thread.h @@ -0,0 +1,464 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_thread_h_ +#define SDL_thread_h_ + +/** + * \file SDL_thread.h + * + * Header for the SDL thread management routines. + */ + +#include +#include + +/* Thread synchronization primitives */ +#include +#include + +#if defined(__WIN32__) +#include /* _beginthreadex() and _endthreadex() */ +#endif +#if defined(__OS2__) /* for _beginthread() and _endthread() */ +#ifndef __EMX__ +#include +#else +#include +#endif +#endif + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* The SDL thread structure, defined in SDL_thread.c */ +struct SDL_Thread; +typedef struct SDL_Thread SDL_Thread; + +/* The SDL thread ID */ +typedef unsigned long SDL_threadID; + +/* Thread local storage ID, 0 is the invalid ID */ +typedef unsigned int SDL_TLSID; + +/** + * The SDL thread priority. + * + * SDL will make system changes as necessary in order to apply the thread priority. + * Code which attempts to control thread state related to priority should be aware + * that calling SDL_SetThreadPriority may alter such state. + * SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this behavior. + * + * \note On many systems you require special privileges to set high or time critical priority. + */ +typedef enum { + SDL_THREAD_PRIORITY_LOW, + SDL_THREAD_PRIORITY_NORMAL, + SDL_THREAD_PRIORITY_HIGH, + SDL_THREAD_PRIORITY_TIME_CRITICAL +} SDL_ThreadPriority; + +/** + * The function passed to SDL_CreateThread(). + * + * \param data what was passed as `data` to SDL_CreateThread() + * \returns a value that can be reported through SDL_WaitThread(). + */ +typedef int (SDLCALL * SDL_ThreadFunction) (void *data); + + +#if defined(__WIN32__) +/** + * \file SDL_thread.h + * + * We compile SDL into a DLL. This means, that it's the DLL which + * creates a new thread for the calling process with the SDL_CreateThread() + * API. There is a problem with this, that only the RTL of the SDL2.DLL will + * be initialized for those threads, and not the RTL of the calling + * application! + * + * To solve this, we make a little hack here. + * + * We'll always use the caller's _beginthread() and _endthread() APIs to + * start a new thread. This way, if it's the SDL2.DLL which uses this API, + * then the RTL of SDL2.DLL will be used to create the new thread, and if it's + * the application, then the RTL of the application will be used. + * + * So, in short: + * Always use the _beginthread() and _endthread() of the calling runtime + * library! + */ +#define SDL_PASSED_BEGINTHREAD_ENDTHREAD + +typedef uintptr_t (__cdecl * pfnSDL_CurrentBeginThread) + (void *, unsigned, unsigned (__stdcall *func)(void *), + void * /*arg*/, unsigned, unsigned * /* threadID */); +typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); + +#ifndef SDL_beginthread +#define SDL_beginthread _beginthreadex +#endif +#ifndef SDL_endthread +#define SDL_endthread _endthreadex +#endif + +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThreadWithStackSize(int (SDLCALL * fn) (void *), + const char *name, const size_t stacksize, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + + +#if defined(SDL_CreateThread) && SDL_DYNAMIC_API +#undef SDL_CreateThread +#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#undef SDL_CreateThreadWithStackSize +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#else +#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)SDL_endthread) +#endif + +#elif defined(__OS2__) +/* + * just like the windows case above: We compile SDL2 + * into a dll with Watcom's runtime statically linked. + */ +#define SDL_PASSED_BEGINTHREAD_ENDTHREAD + +typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void * /*arg*/); +typedef void (*pfnSDL_CurrentEndThread)(void); + +#ifndef SDL_beginthread +#define SDL_beginthread _beginthread +#endif +#ifndef SDL_endthread +#define SDL_endthread _endthread +#endif + +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + +#if defined(SDL_CreateThread) && SDL_DYNAMIC_API +#undef SDL_CreateThread +#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#undef SDL_CreateThreadWithStackSize +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#else +#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#endif + +#else + +/** + * Create a new thread with a default stack size. + * + * This is equivalent to calling: + * + * ```c + * SDL_CreateThreadWithStackSize(fn, name, 0, data); + * ``` + * + * \param fn the SDL_ThreadFunction function to call in the new thread + * \param name the name of the thread + * \param data a pointer that is passed to `fn` + * \returns an opaque pointer to the new thread object on success, NULL if the + * new thread could not be created; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateThreadWithStackSize + * \sa SDL_WaitThread + */ +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data); + +/** + * Create a new thread with a specific stack size. + * + * SDL makes an attempt to report `name` to the system, so that debuggers can + * display it. Not all platforms support this. + * + * Thread naming is a little complicated: Most systems have very small limits + * for the string length (Haiku has 32 bytes, Linux currently has 16, Visual + * C++ 6.0 has _nine_!), and possibly other arbitrary rules. You'll have to + * see what happens with your system's debugger. The name should be UTF-8 (but + * using the naming limits of C identifiers is a better bet). There are no + * requirements for thread naming conventions, so long as the string is + * null-terminated UTF-8, but these guidelines are helpful in choosing a name: + * + * https://stackoverflow.com/questions/149932/naming-conventions-for-threads + * + * If a system imposes requirements, SDL will try to munge the string for it + * (truncate, etc), but the original string contents will be available from + * SDL_GetThreadName(). + * + * The size (in bytes) of the new stack can be specified. Zero means "use the + * system default" which might be wildly different between platforms. x86 + * Linux generally defaults to eight megabytes, an embedded device might be a + * few kilobytes instead. You generally need to specify a stack that is a + * multiple of the system's page size (in many cases, this is 4 kilobytes, but + * check your system documentation). + * + * In SDL 2.1, stack size will be folded into the original SDL_CreateThread + * function, but for backwards compatibility, this is currently a separate + * function. + * + * \param fn the SDL_ThreadFunction function to call in the new thread + * \param name the name of the thread + * \param stacksize the size, in bytes, to allocate for the new thread stack. + * \param data a pointer that is passed to `fn` + * \returns an opaque pointer to the new thread object on success, NULL if the + * new thread could not be created; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_WaitThread + */ +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data); + +#endif + +/** + * Get the thread name as it was specified in SDL_CreateThread(). + * + * This is internal memory, not to be freed by the caller, and remains valid + * until the specified thread is cleaned up by SDL_WaitThread(). + * + * \param thread the thread to query + * \returns a pointer to a UTF-8 string that names the specified thread, or + * NULL if it doesn't have a name. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateThread + */ +extern DECLSPEC const char *SDLCALL SDL_GetThreadName(SDL_Thread *thread); + +/** + * Get the thread identifier for the current thread. + * + * This thread identifier is as reported by the underlying operating system. + * If SDL is running on a platform that does not support threads the return + * value will always be zero. + * + * This function also returns a valid thread ID when called from the main + * thread. + * + * \returns the ID of the current thread. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetThreadID + */ +extern DECLSPEC SDL_threadID SDLCALL SDL_ThreadID(void); + +/** + * Get the thread identifier for the specified thread. + * + * This thread identifier is as reported by the underlying operating system. + * If SDL is running on a platform that does not support threads the return + * value will always be zero. + * + * \param thread the thread to query + * \returns the ID of the specified thread, or the ID of the current thread if + * `thread` is NULL. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ThreadID + */ +extern DECLSPEC SDL_threadID SDLCALL SDL_GetThreadID(SDL_Thread * thread); + +/** + * Set the priority for the current thread. + * + * Note that some platforms will not let you alter the priority (or at least, + * promote the thread to a higher priority) at all, and some require you to be + * an administrator account. Be prepared for this to fail. + * + * \param priority the SDL_ThreadPriority to set + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_SetThreadPriority(SDL_ThreadPriority priority); + +/** + * Wait for a thread to finish. + * + * Threads that haven't been detached will remain (as a "zombie") until this + * function cleans them up. Not doing so is a resource leak. + * + * Once a thread has been cleaned up through this function, the SDL_Thread + * that references it becomes invalid and should not be referenced again. As + * such, only one thread may call SDL_WaitThread() on another. + * + * The return code for the thread function is placed in the area pointed to by + * `status`, if `status` is not NULL. + * + * You may not wait on a thread that has been used in a call to + * SDL_DetachThread(). Use either that function or this one, but not both, or + * behavior is undefined. + * + * It is safe to pass a NULL thread to this function; it is a no-op. + * + * Note that the thread pointer is freed by this function and is not valid + * afterward. + * + * \param thread the SDL_Thread pointer that was returned from the + * SDL_CreateThread() call that started this thread + * \param status pointer to an integer that will receive the value returned + * from the thread function by its 'return', or NULL to not + * receive such value back. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateThread + * \sa SDL_DetachThread + */ +extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread * thread, int *status); + +/** + * Let a thread clean up on exit without intervention. + * + * A thread may be "detached" to signify that it should not remain until + * another thread has called SDL_WaitThread() on it. Detaching a thread is + * useful for long-running threads that nothing needs to synchronize with or + * further manage. When a detached thread is done, it simply goes away. + * + * There is no way to recover the return code of a detached thread. If you + * need this, don't detach the thread and instead use SDL_WaitThread(). + * + * Once a thread is detached, you should usually assume the SDL_Thread isn't + * safe to reference again, as it will become invalid immediately upon the + * detached thread's exit, instead of remaining until someone has called + * SDL_WaitThread() to finally clean it up. As such, don't detach the same + * thread more than once. + * + * If a thread has already exited when passed to SDL_DetachThread(), it will + * stop waiting for a call to SDL_WaitThread() and clean up immediately. It is + * not safe to detach a thread that might be used with SDL_WaitThread(). + * + * You may not call SDL_WaitThread() on a thread that has been detached. Use + * either that function or this one, but not both, or behavior is undefined. + * + * It is safe to pass NULL to this function; it is a no-op. + * + * \param thread the SDL_Thread pointer that was returned from the + * SDL_CreateThread() call that started this thread + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_CreateThread + * \sa SDL_WaitThread + */ +extern DECLSPEC void SDLCALL SDL_DetachThread(SDL_Thread * thread); + +/** + * Create a piece of thread-local storage. + * + * This creates an identifier that is globally visible to all threads but + * refers to data that is thread-specific. + * + * \returns the newly created thread local storage identifier or 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TLSGet + * \sa SDL_TLSSet + */ +extern DECLSPEC SDL_TLSID SDLCALL SDL_TLSCreate(void); + +/** + * Get the current thread's value associated with a thread local storage ID. + * + * \param id the thread local storage ID + * \returns the value associated with the ID for the current thread or NULL if + * no value has been set; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TLSCreate + * \sa SDL_TLSSet + */ +extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id); + +/** + * Set the current thread's value associated with a thread local storage ID. + * + * The function prototype for `destructor` is: + * + * ```c + * void destructor(void *value) + * ``` + * + * where its parameter `value` is what was passed as `value` to SDL_TLSSet(). + * + * \param id the thread local storage ID + * \param value the value to associate with the ID for the current thread + * \param destructor a function called when the thread exits, to free the + * value + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TLSCreate + * \sa SDL_TLSGet + */ +extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (SDLCALL *destructor)(void*)); + +/** + * Cleanup all TLS data for this thread. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC void SDLCALL SDL_TLSCleanup(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_thread_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_timer.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_timer.h new file mode 100644 index 00000000000..008e8e356c6 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_timer.h @@ -0,0 +1,222 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +#ifndef SDL_timer_h_ +#define SDL_timer_h_ + +/** + * \file SDL_timer.h + * + * Header for the SDL time management routines. + */ + +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the number of milliseconds since SDL library initialization. + * + * This value wraps if the program runs for more than ~49 days. + * + * This function is not recommended as of SDL 2.0.18; use SDL_GetTicks64() + * instead, where the value doesn't wrap every ~49 days. There are places in + * SDL where we provide a 32-bit timestamp that can not change without + * breaking binary compatibility, though, so this function isn't officially + * deprecated. + * + * \returns an unsigned 32-bit value representing the number of milliseconds + * since the SDL library initialized. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TICKS_PASSED + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); + +/** + * Get the number of milliseconds since SDL library initialization. + * + * Note that you should not use the SDL_TICKS_PASSED macro with values + * returned by this function, as that macro does clever math to compensate for + * the 32-bit overflow every ~49 days that SDL_GetTicks() suffers from. 64-bit + * values from this function can be safely compared directly. + * + * For example, if you want to wait 100 ms, you could do this: + * + * ```c + * const Uint64 timeout = SDL_GetTicks64() + 100; + * while (SDL_GetTicks64() < timeout) { + * // ... do work until timeout has elapsed + * } + * ``` + * + * \returns an unsigned 64-bit value representing the number of milliseconds + * since the SDL library initialized. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetTicks64(void); + +/** + * Compare 32-bit SDL ticks values, and return true if `A` has passed `B`. + * + * This should be used with results from SDL_GetTicks(), as this macro + * attempts to deal with the 32-bit counter wrapping back to zero every ~49 + * days, but should _not_ be used with SDL_GetTicks64(), which does not have + * that problem. + * + * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could + * do this: + * + * ```c + * const Uint32 timeout = SDL_GetTicks() + 100; + * while (!SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) { + * // ... do work until timeout has elapsed + * } + * ``` + * + * Note that this does not handle tick differences greater + * than 2^31 so take care when using the above kind of code + * with large timeout delays (tens of days). + */ +#define SDL_TICKS_PASSED(A, B) ((Sint32)((B) - (A)) <= 0) + +/** + * Get the current value of the high resolution counter. + * + * This function is typically used for profiling. + * + * The counter values are only meaningful relative to each other. Differences + * between values can be converted to times by using + * SDL_GetPerformanceFrequency(). + * + * \returns the current counter value. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetPerformanceFrequency + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceCounter(void); + +/** + * Get the count per second of the high resolution counter. + * + * \returns a platform-specific count per second. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetPerformanceCounter + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void); + +/** + * Wait a specified number of milliseconds before returning. + * + * This function waits a specified number of milliseconds before returning. It + * waits at least the specified time, but possibly longer due to OS + * scheduling. + * + * \param ms the number of milliseconds to delay + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); + +/** + * Function prototype for the timer callback function. + * + * The callback function is passed the current timer interval and returns + * the next timer interval. If the returned value is the same as the one + * passed in, the periodic alarm continues, otherwise a new alarm is + * scheduled. If the callback returns 0, the periodic alarm is cancelled. + */ +typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param); + +/** + * Definition of the timer ID type. + */ +typedef int SDL_TimerID; + +/** + * Call a callback function at a future time. + * + * If you use this function, you must pass `SDL_INIT_TIMER` to SDL_Init(). + * + * The callback function is passed the current timer interval and the user + * supplied parameter from the SDL_AddTimer() call and should return the next + * timer interval. If the value returned from the callback is 0, the timer is + * canceled. + * + * The callback is run on a separate thread. + * + * Timers take into account the amount of time it took to execute the + * callback. For example, if the callback took 250 ms to execute and returned + * 1000 (ms), the timer would only wait another 750 ms before its next + * iteration. + * + * Timing may be inexact due to OS scheduling. Be sure to note the current + * time with SDL_GetTicks() or SDL_GetPerformanceCounter() in case your + * callback needs to adjust for variances. + * + * \param interval the timer delay, in milliseconds, passed to `callback` + * \param callback the SDL_TimerCallback function to call when the specified + * `interval` elapses + * \param param a pointer that is passed to `callback` + * \returns a timer ID or 0 if an error occurs; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RemoveTimer + */ +extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, + SDL_TimerCallback callback, + void *param); + +/** + * Remove a timer created with SDL_AddTimer(). + * + * \param id the ID of the timer to remove + * \returns SDL_TRUE if the timer is removed or SDL_FALSE if the timer wasn't + * found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddTimer + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID id); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_timer_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_touch.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_touch.h new file mode 100644 index 00000000000..c7202981b91 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_touch.h @@ -0,0 +1,150 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_touch.h + * + * Include file for SDL touch event handling. + */ + +#ifndef SDL_touch_h_ +#define SDL_touch_h_ + +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef Sint64 SDL_TouchID; +typedef Sint64 SDL_FingerID; + +typedef enum +{ + SDL_TOUCH_DEVICE_INVALID = -1, + SDL_TOUCH_DEVICE_DIRECT, /* touch screen with window-relative coordinates */ + SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE, /* trackpad with absolute device coordinates */ + SDL_TOUCH_DEVICE_INDIRECT_RELATIVE /* trackpad with screen cursor-relative coordinates */ +} SDL_TouchDeviceType; + +typedef struct SDL_Finger +{ + SDL_FingerID id; + float x; + float y; + float pressure; +} SDL_Finger; + +/* Used as the device ID for mouse events simulated with touch input */ +#define SDL_TOUCH_MOUSEID ((Uint32)-1) + +/* Used as the SDL_TouchID for touch events simulated with mouse input */ +#define SDL_MOUSE_TOUCHID ((Sint64)-1) + + +/** + * Get the number of registered touch devices. + * + * On some platforms SDL first sees the touch device if it was actually used. + * Therefore SDL_GetNumTouchDevices() may return 0 although devices are + * available. After using all devices at least once the number will be + * correct. + * + * This was fixed for Android in SDL 2.0.1. + * + * \returns the number of registered touch devices. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTouchDevice + */ +extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void); + +/** + * Get the touch ID with the given index. + * + * \param index the touch device index + * \returns the touch ID with the given index on success or 0 if the index is + * invalid; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumTouchDevices + */ +extern DECLSPEC SDL_TouchID SDLCALL SDL_GetTouchDevice(int index); + +/** + * Get the touch device name as reported from the driver or NULL if the index + * is invalid. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC const char* SDLCALL SDL_GetTouchName(int index); + +/** + * Get the type of the given touch device. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC SDL_TouchDeviceType SDLCALL SDL_GetTouchDeviceType(SDL_TouchID touchID); + +/** + * Get the number of active fingers for a given touch device. + * + * \param touchID the ID of a touch device + * \returns the number of active fingers for a given touch device on success + * or 0 on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTouchFinger + */ +extern DECLSPEC int SDLCALL SDL_GetNumTouchFingers(SDL_TouchID touchID); + +/** + * Get the finger object for specified touch device ID and finger index. + * + * The returned resource is owned by SDL and should not be deallocated. + * + * \param touchID the ID of the requested touch device + * \param index the index of the requested finger + * \returns a pointer to the SDL_Finger object or NULL if no object at the + * given ID and index could be found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RecordGesture + */ +extern DECLSPEC SDL_Finger * SDLCALL SDL_GetTouchFinger(SDL_TouchID touchID, int index); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_touch_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_types.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_types.h new file mode 100644 index 00000000000..afd55e8a32a --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_types.h @@ -0,0 +1,29 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_types.h + * + * \deprecated + */ + +/* DEPRECATED */ +#include diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_version.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_version.h new file mode 100644 index 00000000000..e374f0e17a0 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_version.h @@ -0,0 +1,188 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_version.h + * + * This header defines the current SDL version. + */ + +#ifndef SDL_version_h_ +#define SDL_version_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Information about the version of SDL in use. + * + * Represents the library's version as three levels: major revision + * (increments with massive changes, additions, and enhancements), + * minor revision (increments with backwards-compatible changes to the + * major revision), and patchlevel (increments with fixes to the minor + * revision). + * + * \sa SDL_VERSION + * \sa SDL_GetVersion + */ +typedef struct SDL_version +{ + Uint8 major; /**< major version */ + Uint8 minor; /**< minor version */ + Uint8 patch; /**< update version */ +} SDL_version; + +/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL +*/ +#define SDL_MAJOR_VERSION 2 +#define SDL_MINOR_VERSION 0 +#define SDL_PATCHLEVEL 22 + +/** + * Macro to determine SDL version program was compiled against. + * + * This macro fills in a SDL_version structure with the version of the + * library you compiled against. This is determined by what header the + * compiler uses. Note that if you dynamically linked the library, you might + * have a slightly newer or older version at runtime. That version can be + * determined with SDL_GetVersion(), which, unlike SDL_VERSION(), + * is not a macro. + * + * \param x A pointer to a SDL_version struct to initialize. + * + * \sa SDL_version + * \sa SDL_GetVersion + */ +#define SDL_VERSION(x) \ +{ \ + (x)->major = SDL_MAJOR_VERSION; \ + (x)->minor = SDL_MINOR_VERSION; \ + (x)->patch = SDL_PATCHLEVEL; \ +} + +/** + * This macro turns the version numbers into a numeric value: + * \verbatim + (1,2,3) -> (1203) + \endverbatim + * + * This assumes that there will never be more than 100 patchlevels. + */ +#define SDL_VERSIONNUM(X, Y, Z) \ + ((X)*1000 + (Y)*100 + (Z)) + +/** + * This is the version number macro for the current SDL version. + */ +#define SDL_COMPILEDVERSION \ + SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) + +/** + * This macro will evaluate to true if compiled with SDL at least X.Y.Z. + */ +#define SDL_VERSION_ATLEAST(X, Y, Z) \ + (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) + +/** + * Get the version of SDL that is linked against your program. + * + * If you are linking to SDL dynamically, then it is possible that the current + * version will be different than the version you compiled against. This + * function returns the current version, while SDL_VERSION() is a macro that + * tells you what version you compiled with. + * + * This function may be called safely at any time, even before SDL_Init(). + * + * \param ver the SDL_version structure that contains the version information + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRevision + */ +extern DECLSPEC void SDLCALL SDL_GetVersion(SDL_version * ver); + +/** + * Get the code revision of SDL that is linked against your program. + * + * This value is the revision of the code you are linked with and may be + * different from the code you are compiling with, which is found in the + * constant SDL_REVISION. + * + * The revision is arbitrary string (a hash value) uniquely identifying the + * exact revision of the SDL library in use, and is only useful in comparing + * against other revisions. It is NOT an incrementing number. + * + * If SDL wasn't built from a git repository with the appropriate tools, this + * will return an empty string. + * + * Prior to SDL 2.0.16, before development moved to GitHub, this returned a + * hash for a Mercurial repository. + * + * You shouldn't use this function for anything but logging it for debugging + * purposes. The string is not intended to be reliable in any way. + * + * \returns an arbitrary string, uniquely identifying the exact revision of + * the SDL library in use. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetVersion + */ +extern DECLSPEC const char *SDLCALL SDL_GetRevision(void); + +/** + * Obsolete function, do not use. + * + * When SDL was hosted in a Mercurial repository, and was built carefully, + * this would return the revision number that the build was created from. This + * number was not reliable for several reasons, but more importantly, SDL is + * now hosted in a git repository, which does not offer numbers at all, only + * hashes. This function only ever returns zero now. Don't use it. + * + * Before SDL 2.0.16, this might have returned an unreliable, but non-zero + * number. + * + * \deprecated Use SDL_GetRevision() instead; if SDL was carefully built, it + * will return a git hash. + * + * \returns zero, always, in modern SDL releases. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRevision + */ +extern SDL_DEPRECATED DECLSPEC int SDLCALL SDL_GetRevisionNumber(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_version_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_video.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_video.h new file mode 100644 index 00000000000..90fe7121377 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_video.h @@ -0,0 +1,2089 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file SDL_video.h + * + * Header file for SDL video functions. + */ + +#ifndef SDL_video_h_ +#define SDL_video_h_ + +#include +#include +#include +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief The structure that defines a display mode + * + * \sa SDL_GetNumDisplayModes() + * \sa SDL_GetDisplayMode() + * \sa SDL_GetDesktopDisplayMode() + * \sa SDL_GetCurrentDisplayMode() + * \sa SDL_GetClosestDisplayMode() + * \sa SDL_SetWindowDisplayMode() + * \sa SDL_GetWindowDisplayMode() + */ +typedef struct +{ + Uint32 format; /**< pixel format */ + int w; /**< width, in screen coordinates */ + int h; /**< height, in screen coordinates */ + int refresh_rate; /**< refresh rate (or zero for unspecified) */ + void *driverdata; /**< driver-specific data, initialize to 0 */ +} SDL_DisplayMode; + +/** + * \brief The type used to identify a window + * + * \sa SDL_CreateWindow() + * \sa SDL_CreateWindowFrom() + * \sa SDL_DestroyWindow() + * \sa SDL_FlashWindow() + * \sa SDL_GetWindowData() + * \sa SDL_GetWindowFlags() + * \sa SDL_GetWindowGrab() + * \sa SDL_GetWindowKeyboardGrab() + * \sa SDL_GetWindowMouseGrab() + * \sa SDL_GetWindowPosition() + * \sa SDL_GetWindowSize() + * \sa SDL_GetWindowTitle() + * \sa SDL_HideWindow() + * \sa SDL_MaximizeWindow() + * \sa SDL_MinimizeWindow() + * \sa SDL_RaiseWindow() + * \sa SDL_RestoreWindow() + * \sa SDL_SetWindowData() + * \sa SDL_SetWindowFullscreen() + * \sa SDL_SetWindowGrab() + * \sa SDL_SetWindowKeyboardGrab() + * \sa SDL_SetWindowMouseGrab() + * \sa SDL_SetWindowIcon() + * \sa SDL_SetWindowPosition() + * \sa SDL_SetWindowSize() + * \sa SDL_SetWindowBordered() + * \sa SDL_SetWindowResizable() + * \sa SDL_SetWindowTitle() + * \sa SDL_ShowWindow() + */ +typedef struct SDL_Window SDL_Window; + +/** + * \brief The flags on a window + * + * \sa SDL_GetWindowFlags() + */ +typedef enum +{ + SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */ + SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ + SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */ + SDL_WINDOW_HIDDEN = 0x00000008, /**< window is not visible */ + SDL_WINDOW_BORDERLESS = 0x00000010, /**< no window decoration */ + SDL_WINDOW_RESIZABLE = 0x00000020, /**< window can be resized */ + SDL_WINDOW_MINIMIZED = 0x00000040, /**< window is minimized */ + SDL_WINDOW_MAXIMIZED = 0x00000080, /**< window is maximized */ + SDL_WINDOW_MOUSE_GRABBED = 0x00000100, /**< window has grabbed mouse input */ + SDL_WINDOW_INPUT_FOCUS = 0x00000200, /**< window has input focus */ + SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */ + SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), + SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */ + SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported. + On macOS NSHighResolutionCapable must be set true in the + application's Info.plist for this to have any effect. */ + SDL_WINDOW_MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to MOUSE_GRABBED) */ + SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */ + SDL_WINDOW_SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */ + SDL_WINDOW_UTILITY = 0x00020000, /**< window should be treated as a utility window */ + SDL_WINDOW_TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */ + SDL_WINDOW_POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */ + SDL_WINDOW_KEYBOARD_GRABBED = 0x00100000, /**< window has grabbed keyboard input */ + SDL_WINDOW_VULKAN = 0x10000000, /**< window usable for Vulkan surface */ + SDL_WINDOW_METAL = 0x20000000, /**< window usable for Metal view */ + + SDL_WINDOW_INPUT_GRABBED = SDL_WINDOW_MOUSE_GRABBED /**< equivalent to SDL_WINDOW_MOUSE_GRABBED for compatibility */ +} SDL_WindowFlags; + +/** + * \brief Used to indicate that you don't care what the window position is. + */ +#define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000u +#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X)) +#define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0) +#define SDL_WINDOWPOS_ISUNDEFINED(X) \ + (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK) + +/** + * \brief Used to indicate that the window position should be centered. + */ +#define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000u +#define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X)) +#define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0) +#define SDL_WINDOWPOS_ISCENTERED(X) \ + (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK) + +/** + * \brief Event subtype for window events + */ +typedef enum +{ + SDL_WINDOWEVENT_NONE, /**< Never used */ + SDL_WINDOWEVENT_SHOWN, /**< Window has been shown */ + SDL_WINDOWEVENT_HIDDEN, /**< Window has been hidden */ + SDL_WINDOWEVENT_EXPOSED, /**< Window has been exposed and should be + redrawn */ + SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1, data2 + */ + SDL_WINDOWEVENT_RESIZED, /**< Window has been resized to data1xdata2 */ + SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as + a result of an API call or through the + system or user changing the window size. */ + SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */ + SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */ + SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size + and position */ + SDL_WINDOWEVENT_ENTER, /**< Window has gained mouse focus */ + SDL_WINDOWEVENT_LEAVE, /**< Window has lost mouse focus */ + SDL_WINDOWEVENT_FOCUS_GAINED, /**< Window has gained keyboard focus */ + SDL_WINDOWEVENT_FOCUS_LOST, /**< Window has lost keyboard focus */ + SDL_WINDOWEVENT_CLOSE, /**< The window manager requests that the window be closed */ + SDL_WINDOWEVENT_TAKE_FOCUS, /**< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) */ + SDL_WINDOWEVENT_HIT_TEST, /**< Window had a hit test that wasn't SDL_HITTEST_NORMAL. */ + SDL_WINDOWEVENT_ICCPROF_CHANGED,/**< The ICC profile of the window's display has changed. */ + SDL_WINDOWEVENT_DISPLAY_CHANGED /**< Window has been moved to display data1. */ +} SDL_WindowEventID; + +/** + * \brief Event subtype for display events + */ +typedef enum +{ + SDL_DISPLAYEVENT_NONE, /**< Never used */ + SDL_DISPLAYEVENT_ORIENTATION, /**< Display orientation has changed to data1 */ + SDL_DISPLAYEVENT_CONNECTED, /**< Display has been added to the system */ + SDL_DISPLAYEVENT_DISCONNECTED /**< Display has been removed from the system */ +} SDL_DisplayEventID; + +/** + * \brief Display orientation + */ +typedef enum +{ + SDL_ORIENTATION_UNKNOWN, /**< The display orientation can't be determined */ + SDL_ORIENTATION_LANDSCAPE, /**< The display is in landscape mode, with the right side up, relative to portrait mode */ + SDL_ORIENTATION_LANDSCAPE_FLIPPED, /**< The display is in landscape mode, with the left side up, relative to portrait mode */ + SDL_ORIENTATION_PORTRAIT, /**< The display is in portrait mode */ + SDL_ORIENTATION_PORTRAIT_FLIPPED /**< The display is in portrait mode, upside down */ +} SDL_DisplayOrientation; + +/** + * \brief Window flash operation + */ +typedef enum +{ + SDL_FLASH_CANCEL, /**< Cancel any window flash state */ + SDL_FLASH_BRIEFLY, /**< Flash the window briefly to get attention */ + SDL_FLASH_UNTIL_FOCUSED /**< Flash the window until it gets focus */ +} SDL_FlashOperation; + +/** + * \brief An opaque handle to an OpenGL context. + */ +typedef void *SDL_GLContext; + +/** + * \brief OpenGL configuration attributes + */ +typedef enum +{ + SDL_GL_RED_SIZE, + SDL_GL_GREEN_SIZE, + SDL_GL_BLUE_SIZE, + SDL_GL_ALPHA_SIZE, + SDL_GL_BUFFER_SIZE, + SDL_GL_DOUBLEBUFFER, + SDL_GL_DEPTH_SIZE, + SDL_GL_STENCIL_SIZE, + SDL_GL_ACCUM_RED_SIZE, + SDL_GL_ACCUM_GREEN_SIZE, + SDL_GL_ACCUM_BLUE_SIZE, + SDL_GL_ACCUM_ALPHA_SIZE, + SDL_GL_STEREO, + SDL_GL_MULTISAMPLEBUFFERS, + SDL_GL_MULTISAMPLESAMPLES, + SDL_GL_ACCELERATED_VISUAL, + SDL_GL_RETAINED_BACKING, + SDL_GL_CONTEXT_MAJOR_VERSION, + SDL_GL_CONTEXT_MINOR_VERSION, + SDL_GL_CONTEXT_EGL, + SDL_GL_CONTEXT_FLAGS, + SDL_GL_CONTEXT_PROFILE_MASK, + SDL_GL_SHARE_WITH_CURRENT_CONTEXT, + SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, + SDL_GL_CONTEXT_RELEASE_BEHAVIOR, + SDL_GL_CONTEXT_RESET_NOTIFICATION, + SDL_GL_CONTEXT_NO_ERROR +} SDL_GLattr; + +typedef enum +{ + SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, + SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, + SDL_GL_CONTEXT_PROFILE_ES = 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */ +} SDL_GLprofile; + +typedef enum +{ + SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001, + SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002, + SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = 0x0004, + SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008 +} SDL_GLcontextFlag; + +typedef enum +{ + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = 0x0000, + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001 +} SDL_GLcontextReleaseFlag; + +typedef enum +{ + SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000, + SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = 0x0001 +} SDL_GLContextResetNotification; + +/* Function prototypes */ + +/** + * Get the number of video drivers compiled into SDL. + * + * \returns a number >= 1 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetVideoDriver + */ +extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void); + +/** + * Get the name of a built in video driver. + * + * The video drivers are presented in the order in which they are normally + * checked during initialization. + * + * \param index the index of a video driver + * \returns the name of the video driver with the given **index**. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDrivers + */ +extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index); + +/** + * Initialize the video subsystem, optionally specifying a video driver. + * + * This function initializes the video subsystem, setting up a connection to + * the window manager, etc, and determines the available display modes and + * pixel formats, but does not initialize a window or graphics mode. + * + * If you use this function and you haven't used the SDL_INIT_VIDEO flag with + * either SDL_Init() or SDL_InitSubSystem(), you should call SDL_VideoQuit() + * before calling SDL_Quit(). + * + * It is safe to call this function multiple times. SDL_VideoInit() will call + * SDL_VideoQuit() itself if the video subsystem has already been initialized. + * + * You can use SDL_GetNumVideoDrivers() and SDL_GetVideoDriver() to find a + * specific `driver_name`. + * + * \param driver_name the name of a video driver to initialize, or NULL for + * the default driver + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDrivers + * \sa SDL_GetVideoDriver + * \sa SDL_InitSubSystem + * \sa SDL_VideoQuit + */ +extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name); + +/** + * Shut down the video subsystem, if initialized with SDL_VideoInit(). + * + * This function closes all windows, and restores the original video mode. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_VideoInit + */ +extern DECLSPEC void SDLCALL SDL_VideoQuit(void); + +/** + * Get the name of the currently initialized video driver. + * + * \returns the name of the current video driver or NULL if no driver has been + * initialized. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDrivers + * \sa SDL_GetVideoDriver + */ +extern DECLSPEC const char *SDLCALL SDL_GetCurrentVideoDriver(void); + +/** + * Get the number of available video displays. + * + * \returns a number >= 1 or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayBounds + */ +extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void); + +/** + * Get the name of a display in UTF-8 encoding. + * + * \param displayIndex the index of display from which the name should be + * queried + * \returns the name of a display or NULL for an invalid display index or + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex); + +/** + * Get the desktop area represented by a display. + * + * The primary display (`displayIndex` zero) is always located at 0,0. + * + * \param displayIndex the index of the display to query + * \param rect the SDL_Rect structure filled in with the display bounds + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect); + +/** + * Get the usable desktop area represented by a display. + * + * The primary display (`displayIndex` zero) is always located at 0,0. + * + * This is the same area as SDL_GetDisplayBounds() reports, but with portions + * reserved by the system removed. For example, on Apple's macOS, this + * subtracts the area occupied by the menu bar and dock. + * + * Setting a window to be fullscreen generally bypasses these unusable areas, + * so these are good guidelines for the maximum space available to a + * non-fullscreen window. + * + * The parameter `rect` is ignored if it is NULL. + * + * This function also returns -1 if the parameter `displayIndex` is out of + * range. + * + * \param displayIndex the index of the display to query the usable bounds + * from + * \param rect the SDL_Rect structure filled in with the display bounds + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetDisplayBounds + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect * rect); + +/** + * Get the dots/pixels-per-inch for a display. + * + * Diagonal, horizontal and vertical DPI can all be optionally returned if the + * appropriate parameter is non-NULL. + * + * A failure of this function usually means that either no DPI information is + * available or the `displayIndex` is out of range. + * + * \param displayIndex the index of the display from which DPI information + * should be queried + * \param ddpi a pointer filled in with the diagonal DPI of the display; may + * be NULL + * \param hdpi a pointer filled in with the horizontal DPI of the display; may + * be NULL + * \param vdpi a pointer filled in with the vertical DPI of the display; may + * be NULL + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi); + +/** + * Get the orientation of a display. + * + * \param displayIndex the index of the display to query + * \returns The SDL_DisplayOrientation enum value of the display, or + * `SDL_ORIENTATION_UNKNOWN` if it isn't available. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC SDL_DisplayOrientation SDLCALL SDL_GetDisplayOrientation(int displayIndex); + +/** + * Get the number of available display modes. + * + * The `displayIndex` needs to be in the range from 0 to + * SDL_GetNumVideoDisplays() - 1. + * + * \param displayIndex the index of the display to query + * \returns a number >= 1 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayMode + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(int displayIndex); + +/** + * Get information about a specific display mode. + * + * The display modes are sorted in this priority: + * + * - width -> largest to smallest + * - height -> largest to smallest + * - bits per pixel -> more colors to fewer colors + * - packed pixel layout -> largest to smallest + * - refresh rate -> highest to lowest + * + * \param displayIndex the index of the display to query + * \param modeIndex the index of the display mode to query + * \param mode an SDL_DisplayMode structure filled in with the mode at + * `modeIndex` + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumDisplayModes + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int displayIndex, int modeIndex, + SDL_DisplayMode * mode); + +/** + * Get information about the desktop's display mode. + * + * There's a difference between this function and SDL_GetCurrentDisplayMode() + * when SDL runs fullscreen and has changed the resolution. In that case this + * function will return the previous native display mode, and not the current + * display mode. + * + * \param displayIndex the index of the display to query + * \param mode an SDL_DisplayMode structure filled in with the current display + * mode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetCurrentDisplayMode + * \sa SDL_GetDisplayMode + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode * mode); + +/** + * Get information about the current display mode. + * + * There's a difference between this function and SDL_GetDesktopDisplayMode() + * when SDL runs fullscreen and has changed the resolution. In that case this + * function will return the current display mode, and not the previous native + * display mode. + * + * \param displayIndex the index of the display to query + * \param mode an SDL_DisplayMode structure filled in with the current display + * mode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDesktopDisplayMode + * \sa SDL_GetDisplayMode + * \sa SDL_GetNumVideoDisplays + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode * mode); + + +/** + * Get the closest match to the requested display mode. + * + * The available display modes are scanned and `closest` is filled in with the + * closest mode matching the requested mode and returned. The mode format and + * refresh rate default to the desktop mode if they are set to 0. The modes + * are scanned with size being first priority, format being second priority, + * and finally checking the refresh rate. If all the available modes are too + * small, then NULL is returned. + * + * \param displayIndex the index of the display to query + * \param mode an SDL_DisplayMode structure containing the desired display + * mode + * \param closest an SDL_DisplayMode structure filled in with the closest + * match of the available display modes + * \returns the passed in value `closest` or NULL if no matching video mode + * was available; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayMode + * \sa SDL_GetNumDisplayModes + */ +extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest); + +/** + * Get the index of the display associated with a window. + * + * \param window the window to query + * \returns the index of the display containing the center of the window on + * success or a negative error code on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayBounds + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetWindowDisplayIndex(SDL_Window * window); + +/** + * Set the display mode to use when a window is visible at fullscreen. + * + * This only affects the display mode used when the window is fullscreen. To + * change the window size when the window is not fullscreen, use + * SDL_SetWindowSize(). + * + * \param window the window to affect + * \param mode the SDL_DisplayMode structure representing the mode to use, or + * NULL to use the window's dimensions and the desktop's format + * and refresh rate + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowDisplayMode + * \sa SDL_SetWindowFullscreen + */ +extern DECLSPEC int SDLCALL SDL_SetWindowDisplayMode(SDL_Window * window, + const SDL_DisplayMode * mode); + +/** + * Query the display mode to use when a window is visible at fullscreen. + * + * \param window the window to query + * \param mode an SDL_DisplayMode structure filled in with the fullscreen + * display mode + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowDisplayMode + * \sa SDL_SetWindowFullscreen + */ +extern DECLSPEC int SDLCALL SDL_GetWindowDisplayMode(SDL_Window * window, + SDL_DisplayMode * mode); + +/** + * Get the raw ICC profile data for the screen the window is currently on. + * + * Data returned should be freed with SDL_free. + * + * \param window the window to query + * \param size the size of the ICC profile + * \returns the raw ICC profile data on success or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void* SDLCALL SDL_GetWindowICCProfile(SDL_Window * window, size_t* size); + +/** + * Get the pixel format associated with the window. + * + * \param window the window to query + * \returns the pixel format of the window on success or + * SDL_PIXELFORMAT_UNKNOWN on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); + +/** + * Create a window with the specified position, dimensions, and flags. + * + * `flags` may be any of the following OR'd together: + * + * - `SDL_WINDOW_FULLSCREEN`: fullscreen window + * - `SDL_WINDOW_FULLSCREEN_DESKTOP`: fullscreen window at desktop resolution + * - `SDL_WINDOW_OPENGL`: window usable with an OpenGL context + * - `SDL_WINDOW_VULKAN`: window usable with a Vulkan instance + * - `SDL_WINDOW_METAL`: window usable with a Metal instance + * - `SDL_WINDOW_HIDDEN`: window is not visible + * - `SDL_WINDOW_BORDERLESS`: no window decoration + * - `SDL_WINDOW_RESIZABLE`: window can be resized + * - `SDL_WINDOW_MINIMIZED`: window is minimized + * - `SDL_WINDOW_MAXIMIZED`: window is maximized + * - `SDL_WINDOW_INPUT_GRABBED`: window has grabbed input focus + * - `SDL_WINDOW_ALLOW_HIGHDPI`: window should be created in high-DPI mode if + * supported (>= SDL 2.0.1) + * + * `SDL_WINDOW_SHOWN` is ignored by SDL_CreateWindow(). The SDL_Window is + * implicitly shown if SDL_WINDOW_HIDDEN is not set. `SDL_WINDOW_SHOWN` may be + * queried later using SDL_GetWindowFlags(). + * + * On Apple's macOS, you **must** set the NSHighResolutionCapable Info.plist + * property to YES, otherwise you will not receive a High-DPI OpenGL canvas. + * + * If the window is created with the `SDL_WINDOW_ALLOW_HIGHDPI` flag, its size + * in pixels may differ from its size in screen coordinates on platforms with + * high-DPI support (e.g. iOS and macOS). Use SDL_GetWindowSize() to query the + * client area's size in screen coordinates, and SDL_GL_GetDrawableSize() or + * SDL_GetRendererOutputSize() to query the drawable size in pixels. + * + * If the window is set fullscreen, the width and height parameters `w` and + * `h` will not be used. However, invalid size parameters (e.g. too large) may + * still fail. Window size is actually limited to 16384 x 16384 for all + * platforms at window creation. + * + * If the window is created with any of the SDL_WINDOW_OPENGL or + * SDL_WINDOW_VULKAN flags, then the corresponding LoadLibrary function + * (SDL_GL_LoadLibrary or SDL_Vulkan_LoadLibrary) is called and the + * corresponding UnloadLibrary function is called by SDL_DestroyWindow(). + * + * If SDL_WINDOW_VULKAN is specified and there isn't a working Vulkan driver, + * SDL_CreateWindow() will fail because SDL_Vulkan_LoadLibrary() will fail. + * + * If SDL_WINDOW_METAL is specified on an OS that does not support Metal, + * SDL_CreateWindow() will fail. + * + * On non-Apple devices, SDL requires you to either not link to the Vulkan + * loader or link to a dynamic library version. This limitation may be removed + * in a future version of SDL. + * + * \param title the title of the window, in UTF-8 encoding + * \param x the x position of the window, `SDL_WINDOWPOS_CENTERED`, or + * `SDL_WINDOWPOS_UNDEFINED` + * \param y the y position of the window, `SDL_WINDOWPOS_CENTERED`, or + * `SDL_WINDOWPOS_UNDEFINED` + * \param w the width of the window, in screen coordinates + * \param h the height of the window, in screen coordinates + * \param flags 0, or one or more SDL_WindowFlags OR'd together + * \returns the window that was created or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindowFrom + * \sa SDL_DestroyWindow + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, + int x, int y, int w, + int h, Uint32 flags); + +/** + * Create an SDL window from an existing native window. + * + * In some cases (e.g. OpenGL) and on some platforms (e.g. Microsoft Windows) + * the hint `SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT` needs to be configured + * before using SDL_CreateWindowFrom(). + * + * \param data a pointer to driver-dependent window creation data, typically + * your native window cast to a void* + * \returns the window that was created or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindow + * \sa SDL_DestroyWindow + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowFrom(const void *data); + +/** + * Get the numeric ID of a window. + * + * The numeric ID is what SDL_WindowEvent references, and is necessary to map + * these events to specific SDL_Window objects. + * + * \param window the window to query + * \returns the ID of the window on success or 0 on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowFromID + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowID(SDL_Window * window); + +/** + * Get a window from a stored ID. + * + * The numeric ID is what SDL_WindowEvent references, and is necessary to map + * these events to specific SDL_Window objects. + * + * \param id the ID of the window + * \returns the window associated with `id` or NULL if it doesn't exist; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowID + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(Uint32 id); + +/** + * Get the window flags. + * + * \param window the window to query + * \returns a mask of the SDL_WindowFlags associated with `window` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindow + * \sa SDL_HideWindow + * \sa SDL_MaximizeWindow + * \sa SDL_MinimizeWindow + * \sa SDL_SetWindowFullscreen + * \sa SDL_SetWindowGrab + * \sa SDL_ShowWindow + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_Window * window); + +/** + * Set the title of a window. + * + * This string is expected to be in UTF-8 encoding. + * + * \param window the window to change + * \param title the desired window title in UTF-8 format + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowTitle + */ +extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_Window * window, + const char *title); + +/** + * Get the title of a window. + * + * \param window the window to query + * \returns the title of the window in UTF-8 format or "" if there is no + * title. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowTitle + */ +extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_Window * window); + +/** + * Set the icon for a window. + * + * \param window the window to change + * \param icon an SDL_Surface structure containing the icon for the window + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window, + SDL_Surface * icon); + +/** + * Associate an arbitrary named pointer with a window. + * + * `name` is case-sensitive. + * + * \param window the window to associate with the pointer + * \param name the name of the pointer + * \param userdata the associated pointer + * \returns the previous value associated with `name`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowData + */ +extern DECLSPEC void* SDLCALL SDL_SetWindowData(SDL_Window * window, + const char *name, + void *userdata); + +/** + * Retrieve the data pointer associated with a window. + * + * \param window the window to query + * \param name the name of the pointer + * \returns the value associated with `name`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowData + */ +extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window, + const char *name); + +/** + * Set the position of a window. + * + * The window coordinate origin is the upper left of the display. + * + * \param window the window to reposition + * \param x the x coordinate of the window in screen coordinates, or + * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED` + * \param y the y coordinate of the window in screen coordinates, or + * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED` + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowPosition + */ +extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window, + int x, int y); + +/** + * Get the position of a window. + * + * If you do not need the value for one of the positions a NULL may be passed + * in the `x` or `y` parameter. + * + * \param window the window to query + * \param x a pointer filled in with the x position of the window, in screen + * coordinates, may be NULL + * \param y a pointer filled in with the y position of the window, in screen + * coordinates, may be NULL + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowPosition + */ +extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window, + int *x, int *y); + +/** + * Set the size of a window's client area. + * + * The window size in screen coordinates may differ from the size in pixels, + * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform + * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize() or + * SDL_GetRendererOutputSize() to get the real client area size in pixels. + * + * Fullscreen windows automatically match the size of the display mode, and + * you should use SDL_SetWindowDisplayMode() to change their size. + * + * \param window the window to change + * \param w the width of the window in pixels, in screen coordinates, must be + * > 0 + * \param h the height of the window in pixels, in screen coordinates, must be + * > 0 + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowSize + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, + int h); + +/** + * Get the size of a window's client area. + * + * NULL can safely be passed as the `w` or `h` parameter if the width or + * height value is not desired. + * + * The window size in screen coordinates may differ from the size in pixels, + * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform + * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize(), + * SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to get the + * real client area size in pixels. + * + * \param window the window to query the width and height from + * \param w a pointer filled in with the width of the window, in screen + * coordinates, may be NULL + * \param h a pointer filled in with the height of the window, in screen + * coordinates, may be NULL + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetDrawableSize + * \sa SDL_Vulkan_GetDrawableSize + * \sa SDL_SetWindowSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w, + int *h); + +/** + * Get the size of a window's borders (decorations) around the client area. + * + * Note: If this function fails (returns -1), the size values will be + * initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as if the + * window in question was borderless. + * + * Note: This function may fail on systems where the window has not yet been + * decorated by the display server (for example, immediately after calling + * SDL_CreateWindow). It is recommended that you wait at least until the + * window has been presented and composited, so that the window system has a + * chance to decorate the window and provide the border dimensions to SDL. + * + * This function also returns -1 if getting the information is not supported. + * + * \param window the window to query the size values of the border + * (decorations) from + * \param top pointer to variable for storing the size of the top border; NULL + * is permitted + * \param left pointer to variable for storing the size of the left border; + * NULL is permitted + * \param bottom pointer to variable for storing the size of the bottom + * border; NULL is permitted + * \param right pointer to variable for storing the size of the right border; + * NULL is permitted + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetWindowSize + */ +extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window, + int *top, int *left, + int *bottom, int *right); + +/** + * Set the minimum size of a window's client area. + * + * \param window the window to change + * \param min_w the minimum width of the window in pixels + * \param min_h the minimum height of the window in pixels + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMinimumSize + * \sa SDL_SetWindowMaximumSize + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMinimumSize(SDL_Window * window, + int min_w, int min_h); + +/** + * Get the minimum size of a window's client area. + * + * \param window the window to query + * \param w a pointer filled in with the minimum width of the window, may be + * NULL + * \param h a pointer filled in with the minimum height of the window, may be + * NULL + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMaximumSize + * \sa SDL_SetWindowMinimumSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowMinimumSize(SDL_Window * window, + int *w, int *h); + +/** + * Set the maximum size of a window's client area. + * + * \param window the window to change + * \param max_w the maximum width of the window in pixels + * \param max_h the maximum height of the window in pixels + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMaximumSize + * \sa SDL_SetWindowMinimumSize + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMaximumSize(SDL_Window * window, + int max_w, int max_h); + +/** + * Get the maximum size of a window's client area. + * + * \param window the window to query + * \param w a pointer filled in with the maximum width of the window, may be + * NULL + * \param h a pointer filled in with the maximum height of the window, may be + * NULL + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMinimumSize + * \sa SDL_SetWindowMaximumSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window, + int *w, int *h); + +/** + * Set the border state of a window. + * + * This will add or remove the window's `SDL_WINDOW_BORDERLESS` flag and add + * or remove the border from the actual window. This is a no-op if the + * window's border already matches the requested state. + * + * You can't change the border state of a fullscreen window. + * + * \param window the window of which to change the border state + * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowFlags + */ +extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window, + SDL_bool bordered); + +/** + * Set the user-resizable state of a window. + * + * This will add or remove the window's `SDL_WINDOW_RESIZABLE` flag and + * allow/disallow user resizing of the window. This is a no-op if the window's + * resizable state already matches the requested state. + * + * You can't change the resizable state of a fullscreen window. + * + * \param window the window of which to change the resizable state + * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetWindowFlags + */ +extern DECLSPEC void SDLCALL SDL_SetWindowResizable(SDL_Window * window, + SDL_bool resizable); + +/** + * Set the window to always be above the others. + * + * This will add or remove the window's `SDL_WINDOW_ALWAYS_ON_TOP` flag. This + * will bring the window to the front and keep the window above the rest. + * + * \param window The window of which to change the always on top state + * \param on_top SDL_TRUE to set the window always on top, SDL_FALSE to + * disable + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetWindowFlags + */ +extern DECLSPEC void SDLCALL SDL_SetWindowAlwaysOnTop(SDL_Window * window, + SDL_bool on_top); + +/** + * Show a window. + * + * \param window the window to show + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HideWindow + * \sa SDL_RaiseWindow + */ +extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_Window * window); + +/** + * Hide a window. + * + * \param window the window to hide + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ShowWindow + */ +extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_Window * window); + +/** + * Raise a window above other windows and set the input focus. + * + * \param window the window to raise + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_Window * window); + +/** + * Make a window as large as possible. + * + * \param window the window to maximize + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MinimizeWindow + * \sa SDL_RestoreWindow + */ +extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window * window); + +/** + * Minimize a window to an iconic representation. + * + * \param window the window to minimize + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MaximizeWindow + * \sa SDL_RestoreWindow + */ +extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_Window * window); + +/** + * Restore the size and position of a minimized or maximized window. + * + * \param window the window to restore + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MaximizeWindow + * \sa SDL_MinimizeWindow + */ +extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window); + +/** + * Set a window's fullscreen state. + * + * `flags` may be `SDL_WINDOW_FULLSCREEN`, for "real" fullscreen with a + * videomode change; `SDL_WINDOW_FULLSCREEN_DESKTOP` for "fake" fullscreen + * that takes the size of the desktop; and 0 for windowed mode. + * + * \param window the window to change + * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0 + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowDisplayMode + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window, + Uint32 flags); + +/** + * Get the SDL surface associated with the window. + * + * A new surface will be created with the optimal format for the window, if + * necessary. This surface will be freed when the window is destroyed. Do not + * free this surface. + * + * This surface will be invalidated if the window is resized. After resizing a + * window this function must be called again to return a valid surface. + * + * You may not combine this with 3D or the rendering API on this window. + * + * This function is affected by `SDL_HINT_FRAMEBUFFER_ACCELERATION`. + * + * \param window the window to query + * \returns the surface associated with the window, or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_UpdateWindowSurface + * \sa SDL_UpdateWindowSurfaceRects + */ +extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window); + +/** + * Copy the window surface to the screen. + * + * This is the function you use to reflect any changes to the surface on the + * screen. + * + * This function is equivalent to the SDL 1.2 API SDL_Flip(). + * + * \param window the window to update + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowSurface + * \sa SDL_UpdateWindowSurfaceRects + */ +extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window); + +/** + * Copy areas of the window surface to the screen. + * + * This is the function you use to reflect changes to portions of the surface + * on the screen. + * + * This function is equivalent to the SDL 1.2 API SDL_UpdateRects(). + * + * \param window the window to update + * \param rects an array of SDL_Rect structures representing areas of the + * surface to copy + * \param numrects the number of rectangles + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowSurface + * \sa SDL_UpdateWindowSurface + */ +extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window, + const SDL_Rect * rects, + int numrects); + +/** + * Set a window's input grab mode. + * + * When input is grabbed, the mouse is confined to the window. This function + * will also grab the keyboard if `SDL_HINT_GRAB_KEYBOARD` is set. To grab the + * keyboard without also grabbing the mouse, use SDL_SetWindowKeyboardGrab(). + * + * If the caller enables a grab while another window is currently grabbed, the + * other window loses its grab in favor of the caller's window. + * + * \param window the window for which the input grab mode should be set + * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetGrabbedWindow + * \sa SDL_GetWindowGrab + */ +extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * Set a window's keyboard grab mode. + * + * Keyboard grab enables capture of system keyboard shortcuts like Alt+Tab or + * the Meta/Super key. Note that not all system keyboard shortcuts can be + * captured by applications (one example is Ctrl+Alt+Del on Windows). + * + * This is primarily intended for specialized applications such as VNC clients + * or VM frontends. Normal games should not use keyboard grab. + * + * When keyboard grab is enabled, SDL will continue to handle Alt+Tab when the + * window is full-screen to ensure the user is not trapped in your + * application. If you have a custom keyboard shortcut to exit fullscreen + * mode, you may suppress this behavior with + * `SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED`. + * + * If the caller enables a grab while another window is currently grabbed, the + * other window loses its grab in favor of the caller's window. + * + * \param window The window for which the keyboard grab mode should be set. + * \param grabbed This is SDL_TRUE to grab keyboard, and SDL_FALSE to release. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetWindowKeyboardGrab + * \sa SDL_SetWindowMouseGrab + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC void SDLCALL SDL_SetWindowKeyboardGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * Set a window's mouse grab mode. + * + * Mouse grab confines the mouse cursor to the window. + * + * \param window The window for which the mouse grab mode should be set. + * \param grabbed This is SDL_TRUE to grab mouse, and SDL_FALSE to release. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetWindowMouseGrab + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMouseGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * Get a window's input grab mode. + * + * \param window the window to query + * \returns SDL_TRUE if input is grabbed, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window); + +/** + * Get a window's keyboard grab mode. + * + * \param window the window to query + * \returns SDL_TRUE if keyboard is grabbed, and SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_GetWindowGrab + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowKeyboardGrab(SDL_Window * window); + +/** + * Get a window's mouse grab mode. + * + * \param window the window to query + * \returns SDL_TRUE if mouse is grabbed, and SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_GetWindowGrab + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowMouseGrab(SDL_Window * window); + +/** + * Get the window that currently has an input grab enabled. + * + * \returns the window if input is grabbed or NULL otherwise. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetWindowGrab + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetGrabbedWindow(void); + +/** + * Confines the cursor to the specified area of a window. + * + * Note that this does NOT grab the cursor, it only defines the area a cursor + * is restricted to when the window has mouse focus. + * + * \param window The window that will be associated with the barrier. + * \param rect A rectangle area in window-relative coordinates. If NULL the + * barrier for the specified window will be destroyed. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GetWindowMouseRect + * \sa SDL_SetWindowMouseGrab + */ +extern DECLSPEC int SDLCALL SDL_SetWindowMouseRect(SDL_Window * window, const SDL_Rect * rect); + +/** + * Get the mouse confinement rectangle of a window. + * + * \param window The window to query + * \returns A pointer to the mouse confinement rectangle of a window, or NULL + * if there isn't one. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_SetWindowMouseRect + */ +extern DECLSPEC const SDL_Rect * SDLCALL SDL_GetWindowMouseRect(SDL_Window * window); + +/** + * Set the brightness (gamma multiplier) for a given window's display. + * + * Despite the name and signature, this method sets the brightness of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) The + * brightness set will not follow the window if it is moved to another + * display. + * + * Many platforms will refuse to set the display brightness in modern times. + * You are better off using a shader to adjust gamma during rendering, or + * something similar. + * + * \param window the window used to select the display whose brightness will + * be changed + * \param brightness the brightness (gamma multiplier) value to set where 0.0 + * is completely dark and 1.0 is normal brightness + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowBrightness + * \sa SDL_SetWindowGammaRamp + */ +extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float brightness); + +/** + * Get the brightness (gamma multiplier) for a given window's display. + * + * Despite the name and signature, this method retrieves the brightness of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) + * + * \param window the window used to select the display whose brightness will + * be queried + * \returns the brightness for the display where 0.0 is completely dark and + * 1.0 is normal brightness. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowBrightness + */ +extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window); + +/** + * Set the opacity for a window. + * + * The parameter `opacity` will be clamped internally between 0.0f + * (transparent) and 1.0f (opaque). + * + * This function also returns -1 if setting the opacity isn't supported. + * + * \param window the window which will be made transparent or opaque + * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetWindowOpacity + */ +extern DECLSPEC int SDLCALL SDL_SetWindowOpacity(SDL_Window * window, float opacity); + +/** + * Get the opacity of a window. + * + * If transparency isn't supported on this platform, opacity will be reported + * as 1.0f without error. + * + * The parameter `opacity` is ignored if it is NULL. + * + * This function also returns -1 if an invalid window was provided. + * + * \param window the window to get the current opacity value from + * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque) + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_SetWindowOpacity + */ +extern DECLSPEC int SDLCALL SDL_GetWindowOpacity(SDL_Window * window, float * out_opacity); + +/** + * Set the window as a modal for another window. + * + * \param modal_window the window that should be set modal + * \param parent_window the parent window for the modal window + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + */ +extern DECLSPEC int SDLCALL SDL_SetWindowModalFor(SDL_Window * modal_window, SDL_Window * parent_window); + +/** + * Explicitly set input focus to the window. + * + * You almost certainly want SDL_RaiseWindow() instead of this function. Use + * this with caution, as you might give focus to a window that is completely + * obscured by other windows. + * + * \param window the window that should get the input focus + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_RaiseWindow + */ +extern DECLSPEC int SDLCALL SDL_SetWindowInputFocus(SDL_Window * window); + +/** + * Set the gamma ramp for the display that owns a given window. + * + * Set the gamma translation table for the red, green, and blue channels of + * the video hardware. Each table is an array of 256 16-bit quantities, + * representing a mapping between the input and output for that channel. The + * input is the index into the array, and the output is the 16-bit gamma value + * at that index, scaled to the output color precision. + * + * Despite the name and signature, this method sets the gamma ramp of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) The gamma + * ramp set will not follow the window if it is moved to another display. + * + * \param window the window used to select the display whose gamma ramp will + * be changed + * \param red a 256 element array of 16-bit quantities representing the + * translation table for the red channel, or NULL + * \param green a 256 element array of 16-bit quantities representing the + * translation table for the green channel, or NULL + * \param blue a 256 element array of 16-bit quantities representing the + * translation table for the blue channel, or NULL + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowGammaRamp + */ +extern DECLSPEC int SDLCALL SDL_SetWindowGammaRamp(SDL_Window * window, + const Uint16 * red, + const Uint16 * green, + const Uint16 * blue); + +/** + * Get the gamma ramp for a given window's display. + * + * Despite the name and signature, this method retrieves the gamma ramp of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) + * + * \param window the window used to select the display whose gamma ramp will + * be queried + * \param red a 256 element array of 16-bit quantities filled in with the + * translation table for the red channel, or NULL + * \param green a 256 element array of 16-bit quantities filled in with the + * translation table for the green channel, or NULL + * \param blue a 256 element array of 16-bit quantities filled in with the + * translation table for the blue channel, or NULL + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowGammaRamp + */ +extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window, + Uint16 * red, + Uint16 * green, + Uint16 * blue); + +/** + * Possible return values from the SDL_HitTest callback. + * + * \sa SDL_HitTest + */ +typedef enum +{ + SDL_HITTEST_NORMAL, /**< Region is normal. No special properties. */ + SDL_HITTEST_DRAGGABLE, /**< Region can drag entire window. */ + SDL_HITTEST_RESIZE_TOPLEFT, + SDL_HITTEST_RESIZE_TOP, + SDL_HITTEST_RESIZE_TOPRIGHT, + SDL_HITTEST_RESIZE_RIGHT, + SDL_HITTEST_RESIZE_BOTTOMRIGHT, + SDL_HITTEST_RESIZE_BOTTOM, + SDL_HITTEST_RESIZE_BOTTOMLEFT, + SDL_HITTEST_RESIZE_LEFT +} SDL_HitTestResult; + +/** + * Callback used for hit-testing. + * + * \param win the SDL_Window where hit-testing was set on + * \param area an SDL_Point which should be hit-tested + * \param data what was passed as `callback_data` to SDL_SetWindowHitTest() + * \return an SDL_HitTestResult value. + * + * \sa SDL_SetWindowHitTest + */ +typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win, + const SDL_Point *area, + void *data); + +/** + * Provide a callback that decides if a window region has special properties. + * + * Normally windows are dragged and resized by decorations provided by the + * system window manager (a title bar, borders, etc), but for some apps, it + * makes sense to drag them from somewhere else inside the window itself; for + * example, one might have a borderless window that wants to be draggable from + * any part, or simulate its own title bar, etc. + * + * This function lets the app provide a callback that designates pieces of a + * given window as special. This callback is run during event processing if we + * need to tell the OS to treat a region of the window specially; the use of + * this callback is known as "hit testing." + * + * Mouse input may not be delivered to your application if it is within a + * special area; the OS will often apply that input to moving the window or + * resizing the window and not deliver it to the application. + * + * Specifying NULL for a callback disables hit-testing. Hit-testing is + * disabled by default. + * + * Platforms that don't support this functionality will return -1 + * unconditionally, even if you're attempting to disable hit-testing. + * + * Your callback may fire at any time, and its firing does not indicate any + * specific behavior (for example, on Windows, this certainly might fire when + * the OS is deciding whether to drag your window, but it fires for lots of + * other reasons, too, some unrelated to anything you probably care about _and + * when the mouse isn't actually at the location it is testing_). Since this + * can fire at any time, you should try to keep your callback efficient, + * devoid of allocations, etc. + * + * \param window the window to set hit-testing on + * \param callback the function to call when doing a hit-test + * \param callback_data an app-defined void pointer passed to **callback** + * \returns 0 on success or -1 on error (including unsupported); call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC int SDLCALL SDL_SetWindowHitTest(SDL_Window * window, + SDL_HitTest callback, + void *callback_data); + +/** + * Request a window to demand attention from the user. + * + * \param window the window to be flashed + * \param operation the flash operation + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_FlashWindow(SDL_Window * window, SDL_FlashOperation operation); + +/** + * Destroy a window. + * + * If `window` is NULL, this function will return immediately after setting + * the SDL error message to "Invalid window". See SDL_GetError(). + * + * \param window the window to destroy + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindow + * \sa SDL_CreateWindowFrom + */ +extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window * window); + + +/** + * Check whether the screensaver is currently enabled. + * + * The screensaver is disabled by default since SDL 2.0.2. Before SDL 2.0.2 + * the screensaver was enabled by default. + * + * The default can also be changed using `SDL_HINT_VIDEO_ALLOW_SCREENSAVER`. + * + * \returns SDL_TRUE if the screensaver is enabled, SDL_FALSE if it is + * disabled. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DisableScreenSaver + * \sa SDL_EnableScreenSaver + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenSaverEnabled(void); + +/** + * Allow the screen to be blanked by a screen saver. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DisableScreenSaver + * \sa SDL_IsScreenSaverEnabled + */ +extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void); + +/** + * Prevent the screen from being blanked by a screen saver. + * + * If you disable the screensaver, it is automatically re-enabled when SDL + * quits. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_EnableScreenSaver + * \sa SDL_IsScreenSaverEnabled + */ +extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void); + + +/** + * \name OpenGL support functions + */ +/* @{ */ + +/** + * Dynamically load an OpenGL library. + * + * This should be done after initializing the video driver, but before + * creating any OpenGL windows. If no OpenGL library is loaded, the default + * library will be loaded upon creation of the first OpenGL window. + * + * If you do this, you need to retrieve all of the GL functions used in your + * program from the dynamic library using SDL_GL_GetProcAddress(). + * + * \param path the platform dependent OpenGL library name, or NULL to open the + * default OpenGL library + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetProcAddress + * \sa SDL_GL_UnloadLibrary + */ +extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); + +/** + * Get an OpenGL function by name. + * + * If the GL library is loaded at runtime with SDL_GL_LoadLibrary(), then all + * GL functions must be retrieved this way. Usually this is used to retrieve + * function pointers to OpenGL extensions. + * + * There are some quirks to looking up OpenGL functions that require some + * extra care from the application. If you code carefully, you can handle + * these quirks without any platform-specific code, though: + * + * - On Windows, function pointers are specific to the current GL context; + * this means you need to have created a GL context and made it current + * before calling SDL_GL_GetProcAddress(). If you recreate your context or + * create a second context, you should assume that any existing function + * pointers aren't valid to use with it. This is (currently) a + * Windows-specific limitation, and in practice lots of drivers don't suffer + * this limitation, but it is still the way the wgl API is documented to + * work and you should expect crashes if you don't respect it. Store a copy + * of the function pointers that comes and goes with context lifespan. + * - On X11, function pointers returned by this function are valid for any + * context, and can even be looked up before a context is created at all. + * This means that, for at least some common OpenGL implementations, if you + * look up a function that doesn't exist, you'll get a non-NULL result that + * is _NOT_ safe to call. You must always make sure the function is actually + * available for a given GL context before calling it, by checking for the + * existence of the appropriate extension with SDL_GL_ExtensionSupported(), + * or verifying that the version of OpenGL you're using offers the function + * as core functionality. + * - Some OpenGL drivers, on all platforms, *will* return NULL if a function + * isn't supported, but you can't count on this behavior. Check for + * extensions you use, and if you get a NULL anyway, act as if that + * extension wasn't available. This is probably a bug in the driver, but you + * can code defensively for this scenario anyhow. + * - Just because you're on Linux/Unix, don't assume you'll be using X11. + * Next-gen display servers are waiting to replace it, and may or may not + * make the same promises about function pointers. + * - OpenGL function pointers must be declared `APIENTRY` as in the example + * code. This will ensure the proper calling convention is followed on + * platforms where this matters (Win32) thereby avoiding stack corruption. + * + * \param proc the name of an OpenGL function + * \returns a pointer to the named OpenGL function. The returned pointer + * should be cast to the appropriate function signature. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_ExtensionSupported + * \sa SDL_GL_LoadLibrary + * \sa SDL_GL_UnloadLibrary + */ +extern DECLSPEC void *SDLCALL SDL_GL_GetProcAddress(const char *proc); + +/** + * Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_LoadLibrary + */ +extern DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void); + +/** + * Check if an OpenGL extension is supported for the current context. + * + * This function operates on the current GL context; you must have created a + * context and it must be current before calling this function. Do not assume + * that all contexts you create will have the same set of extensions + * available, or that recreating an existing context will offer the same + * extensions again. + * + * While it's probably not a massive overhead, this function is not an O(1) + * operation. Check the extensions you care about after creating the GL + * context and save that information somewhere instead of calling the function + * every time you need to know. + * + * \param extension the name of the extension to check + * \returns SDL_TRUE if the extension is supported, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GL_ExtensionSupported(const char + *extension); + +/** + * Reset all previously set OpenGL context attributes to their default values. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_GL_GetAttribute + * \sa SDL_GL_SetAttribute + */ +extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void); + +/** + * Set an OpenGL window attribute before window creation. + * + * This function sets the OpenGL attribute `attr` to `value`. The requested + * attributes should be set before creating an OpenGL window. You should use + * SDL_GL_GetAttribute() to check the values after creating the OpenGL + * context, since the values obtained can differ from the requested ones. + * + * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to set + * \param value the desired value for the attribute + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetAttribute + * \sa SDL_GL_ResetAttributes + */ +extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); + +/** + * Get the actual value for an attribute from the current context. + * + * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to get + * \param value a pointer filled in with the current value of `attr` + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_ResetAttributes + * \sa SDL_GL_SetAttribute + */ +extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value); + +/** + * Create an OpenGL context for an OpenGL window, and make it current. + * + * Windows users new to OpenGL should note that, for historical reasons, GL + * functions added after OpenGL version 1.1 are not available by default. + * Those functions must be loaded at run-time, either with an OpenGL + * extension-handling library or with SDL_GL_GetProcAddress() and its related + * functions. + * + * SDL_GLContext is an alias for `void *`. It's opaque to the application. + * + * \param window the window to associate with the context + * \returns the OpenGL context associated with `window` or NULL on error; call + * SDL_GetError() for more details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_DeleteContext + * \sa SDL_GL_MakeCurrent + */ +extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window * + window); + +/** + * Set up an OpenGL context for rendering into an OpenGL window. + * + * The context must have been created with a compatible window. + * + * \param window the window to associate with the context + * \param context the OpenGL context to associate with the window + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_CreateContext + */ +extern DECLSPEC int SDLCALL SDL_GL_MakeCurrent(SDL_Window * window, + SDL_GLContext context); + +/** + * Get the currently active OpenGL window. + * + * \returns the currently active OpenGL window on success or NULL on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void); + +/** + * Get the currently active OpenGL context. + * + * \returns the currently active OpenGL context or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_MakeCurrent + */ +extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void); + +/** + * Get the size of a window's underlying drawable in pixels. + * + * This returns info useful for calling glViewport(). + * + * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI + * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a + * platform with high-DPI support (Apple calls this "Retina"), and not + * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. + * + * \param window the window from which the drawable size should be queried + * \param w a pointer to variable for storing the width in pixels, may be NULL + * \param h a pointer to variable for storing the height in pixels, may be + * NULL + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_CreateWindow + * \sa SDL_GetWindowSize + */ +extern DECLSPEC void SDLCALL SDL_GL_GetDrawableSize(SDL_Window * window, int *w, + int *h); + +/** + * Set the swap interval for the current OpenGL context. + * + * Some systems allow specifying -1 for the interval, to enable adaptive + * vsync. Adaptive vsync works the same as vsync, but if you've already missed + * the vertical retrace for a given frame, it swaps buffers immediately, which + * might be less jarring for the user during occasional framerate drops. If an + * application requests adaptive vsync and the system does not support it, + * this function will fail and return -1. In such a case, you should probably + * retry the call with 1 for the interval. + * + * Adaptive vsync is implemented for some glX drivers with + * GLX_EXT_swap_control_tear: + * + * https://www.opengl.org/registry/specs/EXT/glx_swap_control_tear.txt + * + * and for some Windows drivers with WGL_EXT_swap_control_tear: + * + * https://www.opengl.org/registry/specs/EXT/wgl_swap_control_tear.txt + * + * Read more on the Khronos wiki: + * https://www.khronos.org/opengl/wiki/Swap_Interval#Adaptive_Vsync + * + * \param interval 0 for immediate updates, 1 for updates synchronized with + * the vertical retrace, -1 for adaptive vsync + * \returns 0 on success or -1 if setting the swap interval is not supported; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetSwapInterval + */ +extern DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval); + +/** + * Get the swap interval for the current OpenGL context. + * + * If the system can't determine the swap interval, or there isn't a valid + * current context, this function will return 0 as a safe default. + * + * \returns 0 if there is no vertical retrace synchronization, 1 if the buffer + * swap is synchronized with the vertical retrace, and -1 if late + * swaps happen immediately instead of waiting for the next retrace; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_SetSwapInterval + */ +extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void); + +/** + * Update a window with OpenGL rendering. + * + * This is used with double-buffered OpenGL contexts, which are the default. + * + * On macOS, make sure you bind 0 to the draw framebuffer before swapping the + * window, otherwise nothing will happen. If you aren't using + * glBindFramebuffer(), this is the default and you won't have to do anything + * extra. + * + * \param window the window to change + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window); + +/** + * Delete an OpenGL context. + * + * \param context the OpenGL context to be deleted + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_CreateContext + */ +extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context); + +/* @} *//* OpenGL support functions */ + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_video_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_vulkan.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_vulkan.h new file mode 100644 index 00000000000..cca130b58a1 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/SDL_vulkan.h @@ -0,0 +1,215 @@ +/* + Simple DirectMedia Layer + Copyright (C) 2017, Mark Callow + + 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. +*/ + +/** + * \file SDL_vulkan.h + * + * Header file for functions to creating Vulkan surfaces on SDL windows. + */ + +#ifndef SDL_vulkan_h_ +#define SDL_vulkan_h_ + +#include + +#include +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Avoid including vulkan.h, don't define VkInstance if it's already included */ +#ifdef VULKAN_H_ +#define NO_SDL_VULKAN_TYPEDEFS +#endif +#ifndef NO_SDL_VULKAN_TYPEDEFS +#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; + +#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) +#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; +#else +#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; +#endif + +VK_DEFINE_HANDLE(VkInstance) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) + +#endif /* !NO_SDL_VULKAN_TYPEDEFS */ + +typedef VkInstance SDL_vulkanInstance; +typedef VkSurfaceKHR SDL_vulkanSurface; /* for compatibility with Tizen */ + +/** + * \name Vulkan support functions + * + * \note SDL_Vulkan_GetInstanceExtensions & SDL_Vulkan_CreateSurface API + * is compatable with Tizen's implementation of Vulkan in SDL. + */ +/* @{ */ + +/** + * Dynamically load the Vulkan loader library. + * + * This should be called after initializing the video driver, but before + * creating any Vulkan windows. If no Vulkan loader library is loaded, the + * default library will be loaded upon creation of the first Vulkan window. + * + * It is fairly common for Vulkan applications to link with libvulkan instead + * of explicitly loading it at run time. This will work with SDL provided the + * application links to a dynamic library and both it and SDL use the same + * search path. + * + * If you specify a non-NULL `path`, an application should retrieve all of the + * Vulkan functions it uses from the dynamic library using + * SDL_Vulkan_GetVkGetInstanceProcAddr unless you can guarantee `path` points + * to the same vulkan loader library the application linked to. + * + * On Apple devices, if `path` is NULL, SDL will attempt to find the + * `vkGetInstanceProcAddr` address within all the Mach-O images of the current + * process. This is because it is fairly common for Vulkan applications to + * link with libvulkan (and historically MoltenVK was provided as a static + * library). If it is not found, on macOS, SDL will attempt to load + * `vulkan.framework/vulkan`, `libvulkan.1.dylib`, + * `MoltenVK.framework/MoltenVK`, and `libMoltenVK.dylib`, in that order. On + * iOS, SDL will attempt to load `libMoltenVK.dylib`. Applications using a + * dynamic framework or .dylib must ensure it is included in its application + * bundle. + * + * On non-Apple devices, application linking with a static libvulkan is not + * supported. Either do not link to the Vulkan loader or link to a dynamic + * library version. + * + * \param path The platform dependent Vulkan loader library name or NULL + * \returns 0 on success or -1 if the library couldn't be loaded; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_GetVkInstanceProcAddr + * \sa SDL_Vulkan_UnloadLibrary + */ +extern DECLSPEC int SDLCALL SDL_Vulkan_LoadLibrary(const char *path); + +/** + * Get the address of the `vkGetInstanceProcAddr` function. + * + * This should be called after either calling SDL_Vulkan_LoadLibrary() or + * creating an SDL_Window with the `SDL_WINDOW_VULKAN` flag. + * + * \returns the function pointer for `vkGetInstanceProcAddr` or NULL on error. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC void *SDLCALL SDL_Vulkan_GetVkGetInstanceProcAddr(void); + +/** + * Unload the Vulkan library previously loaded by SDL_Vulkan_LoadLibrary() + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_LoadLibrary + */ +extern DECLSPEC void SDLCALL SDL_Vulkan_UnloadLibrary(void); + +/** + * Get the names of the Vulkan instance extensions needed to create a surface + * with SDL_Vulkan_CreateSurface. + * + * If `pNames` is NULL, then the number of required Vulkan instance extensions + * is returned in `pCount`. Otherwise, `pCount` must point to a variable set + * to the number of elements in the `pNames` array, and on return the variable + * is overwritten with the number of names actually written to `pNames`. If + * `pCount` is less than the number of required extensions, at most `pCount` + * structures will be written. If `pCount` is smaller than the number of + * required extensions, SDL_FALSE will be returned instead of SDL_TRUE, to + * indicate that not all the required extensions were returned. + * + * The `window` parameter is currently needed to be valid as of SDL 2.0.8, + * however, this parameter will likely be removed in future releases + * + * \param window A window for which the required Vulkan instance extensions + * should be retrieved (will be deprecated in a future release) + * \param pCount A pointer to an unsigned int corresponding to the number of + * extensions to be returned + * \param pNames NULL or a pointer to an array to be filled with required + * Vulkan instance extensions + * \returns SDL_TRUE on success, SDL_FALSE on error. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_CreateSurface + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_GetInstanceExtensions(SDL_Window *window, + unsigned int *pCount, + const char **pNames); + +/** + * Create a Vulkan rendering surface for a window. + * + * The `window` must have been created with the `SDL_WINDOW_VULKAN` flag and + * `instance` must have been created with extensions returned by + * SDL_Vulkan_GetInstanceExtensions() enabled. + * + * \param window The window to which to attach the Vulkan surface + * \param instance The Vulkan instance handle + * \param surface A pointer to a VkSurfaceKHR handle to output the newly + * created surface + * \returns SDL_TRUE on success, SDL_FALSE on error. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_GetInstanceExtensions + * \sa SDL_Vulkan_GetDrawableSize + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_CreateSurface(SDL_Window *window, + VkInstance instance, + VkSurfaceKHR* surface); + +/** + * Get the size of the window's underlying drawable dimensions in pixels. + * + * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI + * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a + * platform with high-DPI support (Apple calls this "Retina"), and not + * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. + * + * \param window an SDL_Window for which the size is to be queried + * \param w Pointer to the variable to write the width to or NULL + * \param h Pointer to the variable to write the height to or NULL + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_GetWindowSize + * \sa SDL_CreateWindow + * \sa SDL_Vulkan_CreateSurface + */ +extern DECLSPEC void SDLCALL SDL_Vulkan_GetDrawableSize(SDL_Window * window, + int *w, int *h); + +/* @} *//* Vulkan support functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include + +#endif /* SDL_vulkan_h_ */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/begin_code.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/begin_code.h new file mode 100644 index 00000000000..b1b1a3a9bea --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/begin_code.h @@ -0,0 +1,187 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file begin_code.h + * + * This file sets things up for C dynamic library function definitions, + * static inlined functions, and structures aligned at 4-byte alignment. + * If you don't like ugly C preprocessor code, don't look at this file. :) + */ + +/* This shouldn't be nested -- included it around code only. */ +#ifdef _begin_code_h +#error Nested inclusion of begin_code.h +#endif +#define _begin_code_h + +#ifndef SDL_DEPRECATED +# if (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */ +# define SDL_DEPRECATED __attribute__((deprecated)) +# else +# define SDL_DEPRECATED +# endif +#endif + +#ifndef SDL_UNUSED +# ifdef __GNUC__ +# define SDL_UNUSED __attribute__((unused)) +# else +# define SDL_UNUSED +# endif +#endif + +/* Some compilers use a special export keyword */ +#ifndef DECLSPEC +# if defined(__WIN32__) || defined(__WINRT__) || defined(__CYGWIN__) +# ifdef DLL_EXPORT +# define DECLSPEC __declspec(dllexport) +# else +# define DECLSPEC +# endif +# elif defined(__OS2__) +# ifdef BUILD_SDL +# define DECLSPEC __declspec(dllexport) +# else +# define DECLSPEC +# endif +# else +# if defined(__GNUC__) && __GNUC__ >= 4 +# define DECLSPEC __attribute__ ((visibility("default"))) +# else +# define DECLSPEC +# endif +# endif +#endif + +/* By default SDL uses the C calling convention */ +#ifndef SDLCALL +#if (defined(__WIN32__) || defined(__WINRT__)) && !defined(__GNUC__) +#define SDLCALL __cdecl +#elif defined(__OS2__) || defined(__EMX__) +#define SDLCALL _System +# if defined (__GNUC__) && !defined(_System) +# define _System /* for old EMX/GCC compat. */ +# endif +#else +#define SDLCALL +#endif +#endif /* SDLCALL */ + +/* Removed DECLSPEC on Symbian OS because SDL cannot be a DLL in EPOC */ +#ifdef __SYMBIAN32__ +#undef DECLSPEC +#define DECLSPEC +#endif /* __SYMBIAN32__ */ + +/* Force structure packing at 4 byte alignment. + This is necessary if the header is included in code which has structure + packing set to an alternate value, say for loading structures from disk. + The packing is reset to the previous value in close_code.h + */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) +#ifdef _MSC_VER +#pragma warning(disable: 4103) +#endif +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wpragma-pack" +#endif +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#ifdef _WIN64 +/* Use 8-byte alignment on 64-bit architectures, so pointers are aligned */ +#pragma pack(push,8) +#else +#pragma pack(push,4) +#endif +#endif /* Compiler needs structure packing set */ + +#ifndef SDL_INLINE +#if defined(__GNUC__) +#define SDL_INLINE __inline__ +#elif defined(_MSC_VER) || defined(__BORLANDC__) || \ + defined(__DMC__) || defined(__SC__) || \ + defined(__WATCOMC__) || defined(__LCC__) || \ + defined(__DECC) || defined(__CC_ARM) +#define SDL_INLINE __inline +#ifndef __inline__ +#define __inline__ __inline +#endif +#else +#define SDL_INLINE inline +#ifndef __inline__ +#define __inline__ inline +#endif +#endif +#endif /* SDL_INLINE not defined */ + +#ifndef SDL_FORCE_INLINE +#if defined(_MSC_VER) +#define SDL_FORCE_INLINE __forceinline +#elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) +#define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ +#else +#define SDL_FORCE_INLINE static SDL_INLINE +#endif +#endif /* SDL_FORCE_INLINE not defined */ + +#ifndef SDL_NORETURN +#if defined(__GNUC__) +#define SDL_NORETURN __attribute__((noreturn)) +#elif defined(_MSC_VER) +#define SDL_NORETURN __declspec(noreturn) +#else +#define SDL_NORETURN +#endif +#endif /* SDL_NORETURN not defined */ + +/* Apparently this is needed by several Windows compilers */ +#if !defined(__MACH__) +#ifndef NULL +#ifdef __cplusplus +#define NULL 0 +#else +#define NULL ((void *)0) +#endif +#endif /* NULL */ +#endif /* ! Mac OS X - breaks precompiled headers */ + +#ifndef SDL_FALLTHROUGH +#if (defined(__cplusplus) && __cplusplus >= 201703L) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L) +#define SDL_FALLTHROUGH [[fallthrough]] +#else +#if defined(__has_attribute) +#define _HAS_FALLTHROUGH __has_attribute(__fallthrough__) +#else +#define _HAS_FALLTHROUGH 0 +#endif /* __has_attribute */ +#if _HAS_FALLTHROUGH && \ + ((defined(__GNUC__) && __GNUC__ >= 7) || \ + (defined(__clang_major__) && __clang_major__ >= 10)) +#define SDL_FALLTHROUGH __attribute__((__fallthrough__)) +#else +#define SDL_FALLTHROUGH do {} while (0) /* fallthrough */ +#endif /* _HAS_FALLTHROUGH */ +#undef _HAS_FALLTHROUGH +#endif /* C++17 or C2x */ +#endif /* SDL_FALLTHROUGH not defined */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/close_code.h b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/close_code.h new file mode 100644 index 00000000000..dc73432f622 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Headers/close_code.h @@ -0,0 +1,40 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/** + * \file close_code.h + * + * This file reverses the effects of begin_code.h and should be included + * after you finish any function and structure declarations in your headers + */ + +#ifndef _begin_code_h +#error close_code.h included without matching begin_code.h +#endif +#undef _begin_code_h + +/* Reset structure packing at previous byte alignment */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#pragma pack(pop) +#endif /* Compiler needs structure packing set */ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/Info.plist b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Info.plist new file mode 100644 index 00000000000..184c95f45ea Binary files /dev/null and b/vs/sdl2net/Xcode/tvOS/SDL2.framework/Info.plist differ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/License.txt b/vs/sdl2net/Xcode/tvOS/SDL2.framework/License.txt new file mode 100644 index 00000000000..d2785a68158 --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/License.txt @@ -0,0 +1,19 @@ + +Simple DirectMedia Layer +Copyright (C) 1997-2022 Sam Lantinga + +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. diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/ReadMe.txt b/vs/sdl2net/Xcode/tvOS/SDL2.framework/ReadMe.txt new file mode 100644 index 00000000000..40ac3a14c1c --- /dev/null +++ b/vs/sdl2net/Xcode/tvOS/SDL2.framework/ReadMe.txt @@ -0,0 +1,32 @@ +The Simple DirectMedia Layer (SDL for short) is a cross-platform +library designed to make it easy to write multi-media software, +such as games and emulators. + +The Simple DirectMedia Layer library source code is available from: +http://www.libsdl.org/ + +This library is distributed under the terms of the zlib license: +http://zlib.net/zlib_license.html + + +This packages contains the SDL framework for OS X. +Conforming with Apple guidelines, this framework +contains both the SDL runtime component and development header files. + + +To Install: +Copy the SDL2.framework to /Library/Frameworks + +You may alternatively install it in /Library/Frameworks +if your access privileges are not high enough. + + +Additional References: + + - Screencast tutorials for getting started with OpenSceneGraph/Mac OS X are + available at: + http://www.openscenegraph.org/projects/osg/wiki/Support/Tutorials/MacOSXTips + Though these are OpenSceneGraph centric, the same exact concepts apply to + SDL, thus the videos are recommended for everybody getting started with + developing on Mac OS X. (You can skim over the PlugIns stuff since SDL + doesn't have any PlugIns to worry about.) diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/SDL2 b/vs/sdl2net/Xcode/tvOS/SDL2.framework/SDL2 new file mode 100644 index 00000000000..de94ed6239d Binary files /dev/null and b/vs/sdl2net/Xcode/tvOS/SDL2.framework/SDL2 differ diff --git a/vs/sdl2net/Xcode/tvOS/SDL2.framework/default.metallib b/vs/sdl2net/Xcode/tvOS/SDL2.framework/default.metallib new file mode 100644 index 00000000000..a5420a0be4a Binary files /dev/null and b/vs/sdl2net/Xcode/tvOS/SDL2.framework/default.metallib differ diff --git a/vs/sdl2net/acinclude/ax_compute_relative_paths.m4 b/vs/sdl2net/acinclude/ax_compute_relative_paths.m4 new file mode 100644 index 00000000000..102470798f2 --- /dev/null +++ b/vs/sdl2net/acinclude/ax_compute_relative_paths.m4 @@ -0,0 +1,173 @@ +# ============================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_compute_relative_paths.html +# ============================================================================== +# +# SYNOPSIS +# +# AX_COMPUTE_RELATIVE_PATHS(PATH_LIST) +# +# DESCRIPTION +# +# PATH_LIST is a space-separated list of colon-separated triplets of the +# form 'FROM:TO:RESULT'. This function iterates over these triplets and +# set $RESULT to the relative path from $FROM to $TO. Note that $FROM and +# $TO needs to be absolute filenames for this macro to success. +# +# For instance, +# +# first=/usr/local/bin +# second=/usr/local/share +# AX_COMPUTE_RELATIVE_PATHS([first:second:fs second:first:sf]) +# # $fs is set to ../share +# # $sf is set to ../bin +# +# $FROM and $TO are both eval'ed recursively and normalized, this means +# that you can call this macro with autoconf's dirnames like `prefix' or +# `datadir'. For example: +# +# AX_COMPUTE_RELATIVE_PATHS([bindir:datadir:bin_to_data]) +# +# AX_COMPUTE_RELATIVE_PATHS should also works with DOS filenames. +# +# You may want to use this macro in order to make your package +# relocatable. Instead of hardcoding $datadir into your programs just +# encode $bin_to_data and try to determine $bindir at run-time. +# +# This macro requires AX_NORMALIZE_PATH and AX_RECURSIVE_EVAL. +# +# LICENSE +# +# Copyright (c) 2008 Alexandre Duret-Lutz +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 12 + +AU_ALIAS([ADL_COMPUTE_RELATIVE_PATHS], [AX_COMPUTE_RELATIVE_PATHS]) +AC_DEFUN([AX_COMPUTE_RELATIVE_PATHS], +[for _lcl_i in $1; do + _lcl_from=\[$]`echo "[$]_lcl_i" | sed 's,:.*$,,'` + _lcl_to=\[$]`echo "[$]_lcl_i" | sed 's,^[[^:]]*:,,' | sed 's,:[[^:]]*$,,'` + _lcl_result_var=`echo "[$]_lcl_i" | sed 's,^.*:,,'` + AX_RECURSIVE_EVAL([[$]_lcl_from], [_lcl_from]) + AX_RECURSIVE_EVAL([[$]_lcl_to], [_lcl_to]) + _lcl_notation="$_lcl_from$_lcl_to" + AX_NORMALIZE_PATH([_lcl_from],['/']) + AX_NORMALIZE_PATH([_lcl_to],['/']) + AX_COMPUTE_RELATIVE_PATH([_lcl_from], [_lcl_to], [_lcl_result_tmp]) + AX_NORMALIZE_PATH([_lcl_result_tmp],["[$]_lcl_notation"]) + eval $_lcl_result_var='[$]_lcl_result_tmp' +done]) + +## Note: +## ***** +## The following helper macros are too fragile to be used out +## of AX_COMPUTE_RELATIVE_PATHS (mainly because they assume that +## paths are normalized), that's why I'm keeping them in the same file. +## Still, some of them maybe worth to reuse. + +dnl AX_COMPUTE_RELATIVE_PATH(FROM, TO, RESULT) +dnl =========================================== +dnl Compute the relative path to go from $FROM to $TO and set the value +dnl of $RESULT to that value. This function work on raw filenames +dnl (for instead it will considerate /usr//local and /usr/local as +dnl two distinct paths), you should really use AX_COMPUTE_RELATIVE_PATHS +dnl instead to have the paths sanitized automatically. +dnl +dnl For instance: +dnl first_dir=/somewhere/on/my/disk/bin +dnl second_dir=/somewhere/on/another/disk/share +dnl AX_COMPUTE_RELATIVE_PATH(first_dir, second_dir, first_to_second) +dnl will set $first_to_second to '../../../another/disk/share'. +AC_DEFUN([AX_COMPUTE_RELATIVE_PATH], +[AX_COMPUTE_COMMON_PATH([$1], [$2], [_lcl_common_prefix]) +AX_COMPUTE_BACK_PATH([$1], [_lcl_common_prefix], [_lcl_first_rel]) +AX_COMPUTE_SUFFIX_PATH([$2], [_lcl_common_prefix], [_lcl_second_suffix]) +$3="[$]_lcl_first_rel[$]_lcl_second_suffix"]) + +dnl AX_COMPUTE_COMMON_PATH(LEFT, RIGHT, RESULT) +dnl ============================================ +dnl Compute the common path to $LEFT and $RIGHT and set the result to $RESULT. +dnl +dnl For instance: +dnl first_path=/somewhere/on/my/disk/bin +dnl second_path=/somewhere/on/another/disk/share +dnl AX_COMPUTE_COMMON_PATH(first_path, second_path, common_path) +dnl will set $common_path to '/somewhere/on'. +AC_DEFUN([AX_COMPUTE_COMMON_PATH], +[$3='' +_lcl_second_prefix_match='' +while test "[$]_lcl_second_prefix_match" != 0; do + _lcl_first_prefix=`expr "x[$]$1" : "x\([$]$3/*[[^/]]*\)"` + _lcl_second_prefix_match=`expr "x[$]$2" : "x[$]_lcl_first_prefix"` + if test "[$]_lcl_second_prefix_match" != 0; then + if test "[$]_lcl_first_prefix" != "[$]$3"; then + $3="[$]_lcl_first_prefix" + else + _lcl_second_prefix_match=0 + fi + fi +done]) + +dnl AX_COMPUTE_SUFFIX_PATH(PATH, SUBPATH, RESULT) +dnl ============================================== +dnl Subtract $SUBPATH from $PATH, and set the resulting suffix +dnl (or the empty string if $SUBPATH is not a subpath of $PATH) +dnl to $RESULT. +dnl +dnl For instance: +dnl first_path=/somewhere/on/my/disk/bin +dnl second_path=/somewhere/on +dnl AX_COMPUTE_SUFFIX_PATH(first_path, second_path, common_path) +dnl will set $common_path to '/my/disk/bin'. +AC_DEFUN([AX_COMPUTE_SUFFIX_PATH], +[$3=`expr "x[$]$1" : "x[$]$2/*\(.*\)"`]) + +dnl AX_COMPUTE_BACK_PATH(PATH, SUBPATH, RESULT) +dnl ============================================ +dnl Compute the relative path to go from $PATH to $SUBPATH, knowing that +dnl $SUBPATH is a subpath of $PATH (any other words, only repeated '../' +dnl should be needed to move from $PATH to $SUBPATH) and set the value +dnl of $RESULT to that value. If $SUBPATH is not a subpath of PATH, +dnl set $RESULT to the empty string. +dnl +dnl For instance: +dnl first_path=/somewhere/on/my/disk/bin +dnl second_path=/somewhere/on +dnl AX_COMPUTE_BACK_PATH(first_path, second_path, back_path) +dnl will set $back_path to '../../../'. +AC_DEFUN([AX_COMPUTE_BACK_PATH], +[AX_COMPUTE_SUFFIX_PATH([$1], [$2], [_lcl_first_suffix]) +$3='' +_lcl_tmp='xxx' +while test "[$]_lcl_tmp" != ''; do + _lcl_tmp=`expr "x[$]_lcl_first_suffix" : "x[[^/]]*/*\(.*\)"` + if test "[$]_lcl_first_suffix" != ''; then + _lcl_first_suffix="[$]_lcl_tmp" + $3="../[$]$3" + fi +done]) diff --git a/vs/sdl2net/acinclude/ax_normalize_path.m4 b/vs/sdl2net/acinclude/ax_normalize_path.m4 new file mode 100644 index 00000000000..b789a9369e4 --- /dev/null +++ b/vs/sdl2net/acinclude/ax_normalize_path.m4 @@ -0,0 +1,115 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_normalize_path.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_NORMALIZE_PATH(VARNAME, [REFERENCE_STRING]) +# +# DESCRIPTION +# +# Perform some cleanups on the value of $VARNAME (interpreted as a path): +# +# - empty paths are changed to '.' +# - trailing slashes are removed +# - repeated slashes are squeezed except a leading doubled slash '//' +# (which might indicate a networked disk on some OS). +# +# REFERENCE_STRING is used to turn '/' into '\' and vice-versa: if +# REFERENCE_STRING contains some backslashes, all slashes and backslashes +# are turned into backslashes, otherwise they are all turned into slashes. +# +# This makes processing of DOS filenames quite easier, because you can +# turn a filename to the Unix notation, make your processing, and turn it +# back to original notation. +# +# filename='A:\FOO\\BAR\' +# old_filename="$filename" +# # Switch to the unix notation +# AX_NORMALIZE_PATH([filename], ["/"]) +# # now we have $filename = 'A:/FOO/BAR' and we can process it as if +# # it was a Unix path. For instance let's say that you want +# # to append '/subpath': +# filename="$filename/subpath" +# # finally switch back to the original notation +# AX_NORMALIZE_PATH([filename], ["$old_filename"]) +# # now $filename equals to 'A:\FOO\BAR\subpath' +# +# One good reason to make all path processing with the unix convention is +# that backslashes have a special meaning in many cases. For instance +# +# expr 'A:\FOO' : 'A:\Foo' +# +# will return 0 because the second argument is a regex in which +# backslashes have to be backslashed. In other words, to have the two +# strings to match you should write this instead: +# +# expr 'A:\Foo' : 'A:\\Foo' +# +# Such behavior makes DOS filenames extremely unpleasant to work with. So +# temporary turn your paths to the Unix notation, and revert them to the +# original notation after the processing. See the macro +# AX_COMPUTE_RELATIVE_PATHS for a concrete example of this. +# +# REFERENCE_STRING defaults to $VARIABLE, this means that slashes will be +# converted to backslashes if $VARIABLE already contains some backslashes +# (see $thirddir below). +# +# firstdir='/usr/local//share' +# seconddir='C:\Program Files\\' +# thirddir='C:\home/usr/' +# AX_NORMALIZE_PATH([firstdir]) +# AX_NORMALIZE_PATH([seconddir]) +# AX_NORMALIZE_PATH([thirddir]) +# # $firstdir = '/usr/local/share' +# # $seconddir = 'C:\Program Files' +# # $thirddir = 'C:\home\usr' +# +# LICENSE +# +# Copyright (c) 2008 Alexandre Duret-Lutz +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 8 + +AU_ALIAS([ADL_NORMALIZE_PATH], [AX_NORMALIZE_PATH]) +AC_DEFUN([AX_NORMALIZE_PATH], +[case ":[$]$1:" in +# change empty paths to '.' + ::) $1='.' ;; +# strip trailing slashes + :*[[\\/]]:) $1=`echo "[$]$1" | sed 's,[[\\/]]*[$],,'` ;; + :*:) ;; +esac +# squeeze repeated slashes +case ifelse($2,,"[$]$1",$2) in +# if the path contains any backslashes, turn slashes into backslashes + *\\*) $1=`echo "[$]$1" | sed 's,\(.\)[[\\/]][[\\/]]*,\1\\\\,g'` ;; +# if the path contains slashes, also turn backslashes into slashes + *) $1=`echo "[$]$1" | sed 's,\(.\)[[\\/]][[\\/]]*,\1/,g'` ;; +esac]) diff --git a/vs/sdl2net/acinclude/ax_recursive_eval.m4 b/vs/sdl2net/acinclude/ax_recursive_eval.m4 new file mode 100644 index 00000000000..0625aca2255 --- /dev/null +++ b/vs/sdl2net/acinclude/ax_recursive_eval.m4 @@ -0,0 +1,56 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_recursive_eval.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_RECURSIVE_EVAL(VALUE, RESULT) +# +# DESCRIPTION +# +# Interpolate the VALUE in loop until it doesn't change, and set the +# result to $RESULT. WARNING: It's easy to get an infinite loop with some +# unsane input. +# +# LICENSE +# +# Copyright (c) 2008 Alexandre Duret-Lutz +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 1 + +AC_DEFUN([AX_RECURSIVE_EVAL], +[_lcl_receval="$1" +$2=`(test "x$prefix" = xNONE && prefix="$ac_default_prefix" + test "x$exec_prefix" = xNONE && exec_prefix="${prefix}" + _lcl_receval_old='' + while test "[$]_lcl_receval_old" != "[$]_lcl_receval"; do + _lcl_receval_old="[$]_lcl_receval" + eval _lcl_receval="\"[$]_lcl_receval\"" + done + echo "[$]_lcl_receval")`]) diff --git a/vs/sdl2net/acinclude/libtool.m4 b/vs/sdl2net/acinclude/libtool.m4 new file mode 100644 index 00000000000..94a5a731a70 --- /dev/null +++ b/vs/sdl2net/acinclude/libtool.m4 @@ -0,0 +1,7488 @@ +############################################################################## +# Based on libtool-2.2.6a. +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 56 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl +_LT_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\[$]0 --fallback-echo"')dnl " + lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` + ;; +esac + +_LT_OUTPUT_LIBTOOL_INIT +]) + + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +cat >"$CONFIG_LT" <<_LTEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate a libtool stub with the current configuration. + +lt_cl_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AS_SHELL_SANITIZE +_AS_PREPARE + +exec AS_MESSAGE_FD>&1 +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +if test "$no_create" != yes; then + lt_cl_success=: + test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" + exec AS_MESSAGE_LOG_FD>/dev/null + $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false + exec AS_MESSAGE_LOG_FD>>config.log + $lt_cl_success || AS_EXIT(1) +fi +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_XSI_SHELLFNS + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) + case ${MACOSX_DEPLOYMENT_TARGET},$host in + 10.[[012]],*|,*powerpc*-darwin[[5-8]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + *) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX +# ----------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +AC_LINK_IFELSE([AC_LANG_PROGRAM],[ +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_SHELL_INIT + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[_LT_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +[$]* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(lt_ECHO) +]) +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], + [An echo program that does not interpret backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[AC_CHECK_TOOL(AR, ar, false) +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1]) + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + beos*) + # On BeOS, this test takes a really really long time. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + #soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + #soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + soname_spec='`echo ${libname} | $SED -e 's/^lib//'`${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + # OS/2 limits length of a DLL basename up to 8 characters. + # So there is need to use a short name instead of a original + # name longer than 8 characters. And replace '.' with '_'. +# SDL customization: removed versioning support. +# version_type=windows +# need_version=no +# soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; +# v=$($ECHO ${release}${versuffix} | tr -d .-); +# n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); +# $ECHO ${n}${v}`${shared_ext}' + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; $ECHO $libname | cut -b -8 | tr . _`${shared_ext}' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + lt_cv_deplibs_check_method=pass_all + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method == "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac +AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=".dll" + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED">> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED">> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], [ + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + ]) + LDFLAGS="$save_LDFLAGS" + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=".dll" + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED">> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED">> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [fix_srcfile_path], [1], + [Fix the shell variable $srcfile for the compiler]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_PROG_CXX +# ------------ +# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ +# compiler, we have our own version here. +m4_defun([_LT_PROG_CXX], +[ +pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) +AC_PROG_CXX +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_CXX + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_CXX], []) + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[AC_REQUIRE([_LT_PROG_CXX])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=".dll" + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED">> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED">> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_PROG_F77 +# ------------ +# Since AC_PROG_F77 is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_F77], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) +AC_PROG_F77 +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_F77 + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_F77], []) + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_REQUIRE([_LT_PROG_F77])dnl +AC_LANG_PUSH(Fortran 77) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${F77-"f77"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_PROG_FC +# ----------- +# Since AC_PROG_FC is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_FC], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) +AC_PROG_FC +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_FC + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_FC], []) + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_REQUIRE([_LT_PROG_FC])dnl +AC_LANG_PUSH(Fortran) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${FC-"f95"} + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC="$lt_save_CC" +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC="$lt_save_CC" +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_XSI_SHELLFNS +# --------------------- +# Bourne and XSI compatible variants of some useful shell functions. +m4_defun([_LT_PROG_XSI_SHELLFNS], +[case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $[*] )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +dnl func_dirname_and_basename +dnl A portable version of this function is already defined in general.m4sh +dnl so there is no need for it here. + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[[^=]]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$[@]"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]+=\$[2]" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]=\$$[1]\$[2]" +} + +_LT_EOF + ;; + esac +]) + diff --git a/vs/sdl2net/acinclude/ltoptions.m4 b/vs/sdl2net/acinclude/ltoptions.m4 new file mode 100644 index 00000000000..12beee6ecc8 --- /dev/null +++ b/vs/sdl2net/acinclude/ltoptions.m4 @@ -0,0 +1,370 @@ +############################################################################## +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [0], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) + diff --git a/vs/sdl2net/acinclude/ltsugar.m4 b/vs/sdl2net/acinclude/ltsugar.m4 new file mode 100644 index 00000000000..d7e950fa29c --- /dev/null +++ b/vs/sdl2net/acinclude/ltsugar.m4 @@ -0,0 +1,124 @@ +############################################################################## +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/vs/sdl2net/acinclude/ltversion.m4 b/vs/sdl2net/acinclude/ltversion.m4 new file mode 100644 index 00000000000..83a83f20ada --- /dev/null +++ b/vs/sdl2net/acinclude/ltversion.m4 @@ -0,0 +1,25 @@ +############################################################################## +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# Generated from ltversion.in. + +# serial 3012 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.2.6]) +m4_define([LT_PACKAGE_REVISION], [1.3012]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.2.6' +macro_revision='1.3012' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) + diff --git a/vs/sdl2net/acinclude/lt~obsolete.m4 b/vs/sdl2net/acinclude/lt~obsolete.m4 new file mode 100644 index 00000000000..3b2acd4d00a --- /dev/null +++ b/vs/sdl2net/acinclude/lt~obsolete.m4 @@ -0,0 +1,93 @@ +############################################################################## +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 4 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) diff --git a/vs/sdl2net/acinclude/pkg.m4 b/vs/sdl2net/acinclude/pkg.m4 new file mode 100644 index 00000000000..13a88901786 --- /dev/null +++ b/vs/sdl2net/acinclude/pkg.m4 @@ -0,0 +1,275 @@ +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 12 (pkg-config-0.29.2) + +dnl Copyright © 2004 Scott James Remnant . +dnl Copyright © 2012-2015 Dan Nicholson +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29.2]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])dnl PKG_PROG_PKG_CONFIG + +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])dnl _PKG_CONFIG + +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])dnl _PKG_SHORT_ERRORS_SUPPORTED + + +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $2]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])dnl PKG_CHECK_MODULES + + +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_INSTALLDIR + + +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_NOARCH_INSTALLDIR + + +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])dnl PKG_CHECK_VAR diff --git a/vs/sdl2net/acinclude/sdl2.m4 b/vs/sdl2net/acinclude/sdl2.m4 new file mode 100644 index 00000000000..af101a84f1b --- /dev/null +++ b/vs/sdl2net/acinclude/sdl2.m4 @@ -0,0 +1,180 @@ +# Configure paths for SDL +# Sam Lantinga 9/21/99 +# stolen from Manish Singh +# stolen back from Frank Belew +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +# serial 2 + +dnl AM_PATH_SDL2([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS +dnl +AC_DEFUN([AM_PATH_SDL2], +[dnl +dnl Get the cflags and libraries from the sdl2-config script +dnl +AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], + sdl_prefix="$withval", sdl_prefix="") +AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], + sdl_exec_prefix="$withval", sdl_exec_prefix="") +AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], + , enable_sdltest=yes) + + min_sdl_version=ifelse([$1], ,2.0.0,$1) + + if test "x$sdl_prefix$sdl_exec_prefix" = x ; then + PKG_CHECK_MODULES([SDL], [sdl2 >= $min_sdl_version], + [sdl_pc=yes], + [sdl_pc=no]) + else + sdl_pc=no + if test x$sdl_exec_prefix != x ; then + sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" + if test x${SDL2_CONFIG+set} != xset ; then + SDL2_CONFIG=$sdl_exec_prefix/bin/sdl2-config + fi + fi + if test x$sdl_prefix != x ; then + sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" + if test x${SDL2_CONFIG+set} != xset ; then + SDL2_CONFIG=$sdl_prefix/bin/sdl2-config + fi + fi + fi + + if test "x$sdl_pc" = xyes ; then + no_sdl="" + SDL2_CONFIG="pkg-config sdl2" + else + as_save_PATH="$PATH" + if test "x$prefix" != xNONE && test "$cross_compiling" != yes; then + PATH="$prefix/bin:$prefix/usr/bin:$PATH" + fi + AC_PATH_PROG(SDL2_CONFIG, sdl2-config, no, [$PATH]) + PATH="$as_save_PATH" + AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) + no_sdl="" + + if test "$SDL2_CONFIG" = "no" ; then + no_sdl=yes + else + SDL_CFLAGS=`$SDL2_CONFIG $sdl_config_args --cflags` + SDL_LIBS=`$SDL2_CONFIG $sdl_config_args --libs` + + sdl_major_version=`$SDL2_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + sdl_minor_version=`$SDL2_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + sdl_micro_version=`$SDL2_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_sdltest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_CXXFLAGS="$CXXFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" +dnl +dnl Now check if the installed SDL is sufficiently new. (Also sanity +dnl checks the results of sdl2-config to some extent +dnl + rm -f conf.sdltest + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include +#include +#include "SDL.h" + +int main (int argc, char *argv[]) +{ + int major, minor, micro; + FILE *fp = fopen("conf.sdltest", "w"); + + if (fp) fclose(fp); + + if (sscanf("$min_sdl_version", "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_sdl_version"); + exit(1); + } + + if (($sdl_major_version > major) || + (($sdl_major_version == major) && ($sdl_minor_version > minor)) || + (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'sdl2-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); + printf("*** of SDL required is %d.%d.%d. If sdl2-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If sdl2-config was wrong, set the environment variable SDL2_CONFIG\n"); + printf("*** to point to the correct copy of sdl2-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +]])], [], [no_sdl=yes], [echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_sdl" = x ; then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi + fi + if test "x$no_sdl" = x ; then + ifelse([$2], , :, [$2]) + else + if test "$SDL2_CONFIG" = "no" ; then + echo "*** The sdl2-config script installed by SDL could not be found" + echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the SDL2_CONFIG environment variable to the" + echo "*** full path to sdl2-config." + else + if test -f conf.sdltest ; then + : + else + echo "*** Could not run SDL test program, checking why..." + CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +#include "SDL.h" + +int main(int argc, char *argv[]) +{ return 0; } +#undef main +#define main K_and_R_C_main +]], [[ return 0; ]])], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding SDL or finding the wrong" + echo "*** version of SDL. If it is not finding SDL, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means SDL was incorrectly installed" + echo "*** or that you have moved SDL since it was installed. In the latter case, you" + echo "*** may want to edit the sdl2-config script: $SDL2_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + SDL_CFLAGS="" + SDL_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(SDL_CFLAGS) + AC_SUBST(SDL_LIBS) + rm -f conf.sdltest +]) diff --git a/vs/sdl2net/autogen.sh b/vs/sdl2net/autogen.sh new file mode 100755 index 00000000000..ae348f6afd4 --- /dev/null +++ b/vs/sdl2net/autogen.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +set -e + +"${ACLOCAL:-aclocal}" -I acinclude +"${AUTOMAKE:-automake}" --foreign --include-deps --add-missing --copy +"${AUTOCONF:-autoconf}" + +echo "Now you are ready to run ./configure" \ No newline at end of file diff --git a/vs/sdl2net/build-dosbox.sh b/vs/sdl2net/build-dosbox.sh new file mode 100755 index 00000000000..2bb20934846 --- /dev/null +++ b/vs/sdl2net/build-dosbox.sh @@ -0,0 +1,36 @@ +#!/bin/sh +rm -Rfv linux-host || exit 1 +mkdir -p linux-host || exit 1 + +rm -Rfv linux-build || exit 1 +mkdir -p linux-build || exit 1 + +./autogen.sh + +chmod +x configure || exit 1 + +srcdir="`pwd`" +instdir="`pwd`/linux-host" + +cd linux-build || exit 1 + +opts= + +sys=`uname -s` + +sdldirspec="--with-sdl-prefix=$srcdir/../sdl2/linux-host" + +autoreconf -fi +../configure "--srcdir=$srcdir" "--prefix=$instdir" --disable-examples "$sdldirspec" $opts || exit 1 + +mkdir -p linux-host || exit 1 +mkdir -p linux-build || exit 1 +mkdir -p linux-build/build || exit 1 +mkdir -p linux-build/include || exit 1 + +# Um, what? +#chmod +x "$srcdir/install-sh" || exit 1 + +# Proceed +make -j3 || exit 1 +make install || exit 1 # will install into ./linux-host diff --git a/vs/sdl2net/chat.c b/vs/sdl2net/chat.c new file mode 100644 index 00000000000..7c4c4649c1a --- /dev/null +++ b/vs/sdl2net/chat.c @@ -0,0 +1,564 @@ +/* + CHAT: A chat client using the SDL example network and GUI libraries + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/* Note that this isn't necessarily the way to run a chat system. + This is designed to exercise the network code more than be really + functional. +*/ + +#include "SDL_net.h" +#include "SDL_test.h" +#include "chat.h" + +#include +#include +#include + + +/* Global variables */ +static TCPsocket tcpsock = NULL; +static UDPsocket udpsock = NULL; +static SDLNet_SocketSet socketset = NULL; +static UDPpacket **packets = NULL; +static struct { + int active; + Uint8 name[256+1]; +} people[CHAT_MAXPEOPLE]; + +static char keybuf[80-sizeof(CHAT_PROMPT)+1]; +static int keypos = 0; + +#define FONT_LINE_HEIGHT (FONT_CHARACTER_SIZE + 2) + +typedef struct +{ + SDL_Rect rect; + int current; + int numlines; + char **lines; + +} TextWindow; + +static TextWindow *termwin; +static TextWindow *sendwin; + +static TextWindow *TextWindowCreate(int x, int y, int w, int h) +{ + TextWindow *textwin = (TextWindow *)SDL_malloc(sizeof(*textwin)); + + if ( !textwin ) { + return NULL; + } + + textwin->rect.x = x; + textwin->rect.y = y; + textwin->rect.w = w; + textwin->rect.h = h; + textwin->current = 0; + textwin->numlines = (h / FONT_LINE_HEIGHT); + textwin->lines = (char **)SDL_calloc(textwin->numlines, sizeof(*textwin->lines)); + if ( !textwin->lines ) { + SDL_free(textwin); + return NULL; + } + return textwin; +} + +static void TextWindowDisplay(TextWindow *textwin, SDL_Renderer *renderer) +{ + int i, y; + + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + for ( y = textwin->rect.y, i = 0; i < textwin->numlines; ++i, y += FONT_LINE_HEIGHT ) { + if ( textwin->lines[i] ) { + SDLTest_DrawString(renderer, textwin->rect.x, y, textwin->lines[i]); + } + } +} + +static void TextWindowAddTextWithLength(TextWindow *textwin, const char *text, size_t len) +{ + size_t existing; + SDL_bool newline = SDL_FALSE; + char *line; + + if ( len > 0 && text[len - 1] == '\n' ) { + --len; + newline = SDL_TRUE; + } + + if ( textwin->lines[textwin->current] ) { + existing = SDL_strlen(textwin->lines[textwin->current]); + } else { + existing = 0; + } + + if ( *text == '\b' ) { + if ( existing ) { + textwin->lines[textwin->current][existing - 1] = '\0'; + } + return; + } + + line = (char *)SDL_realloc(textwin->lines[textwin->current], existing + len + 1); + if ( line ) { + SDL_memcpy(&line[existing], text, len); + line[existing + len] = '\0'; + textwin->lines[textwin->current] = line; + if ( newline ) { + if (textwin->current == textwin->numlines - 1) { + SDL_free(textwin->lines[0]); + SDL_memcpy(&textwin->lines[0], &textwin->lines[1], (textwin->numlines-1) * sizeof(textwin->lines[1])); + textwin->lines[textwin->current] = NULL; + } else { + ++textwin->current; + } + } + } +} + +static void TextWindowAddText(TextWindow *textwin, const char *fmt, ...) +{ + char text[1024]; + va_list ap; + + va_start(ap, fmt); + SDL_vsnprintf(text, sizeof(text), fmt, ap); + va_end(ap); + + TextWindowAddTextWithLength(textwin, text, SDL_strlen(text)); +} + +static void TextWindowClear(TextWindow *textwin) +{ + int i; + + for ( i = 0; i < textwin->numlines; ++i ) + { + if ( textwin->lines[i] ) { + SDL_free(textwin->lines[i]); + textwin->lines[i] = NULL; + } + } + textwin->current = 0; +} + +static void TextWindowDestroy(TextWindow *textwin) +{ + if ( textwin ) { + TextWindowClear(textwin); + SDL_free(textwin->lines); + SDL_free(textwin); + } +} + +void SendHello(const char *name) +{ + IPaddress *myip; + char hello[1+1+256]; + int i, n; + + /* No people are active at first */ + for ( i=0; iport, 2); + if ( strlen(name) > 255 ) { + n = 255; + } else { + n = strlen(name); + } + hello[CHAT_HELLO_NLEN] = n; + strncpy(&hello[CHAT_HELLO_NAME], name, n); + hello[CHAT_HELLO_NAME+n++] = 0; + + /* Send it to the server */ + SDLNet_TCP_Send(tcpsock, hello, CHAT_HELLO_NAME+n); + } +} + +void SendBuf(char *buf, int len) +{ + int i; + + /* Redraw the prompt and add a newline to the buffer */ + TextWindowClear(sendwin); + TextWindowAddText(sendwin, CHAT_PROMPT); + buf[len++] = '\n'; + + /* Send the text to each of our active channels */ + for ( i=0; i < CHAT_MAXPEOPLE; ++i ) { + if ( people[i].active ) { + if ( len > packets[0]->maxlen ) { + len = packets[0]->maxlen; + } + memcpy(packets[0]->data, buf, len); + packets[0]->len = len; + SDLNet_UDP_Send(udpsock, i, packets[0]); + } + } +} + +int HandleServerData(Uint8 *data) +{ + int used = 0; + + switch (data[0]) { + case CHAT_ADD: { + Uint8 which; + IPaddress newip; + + /* Figure out which channel we got */ + which = data[CHAT_ADD_SLOT]; + if ((which >= CHAT_MAXPEOPLE) || people[which].active) { + /* Invalid channel?? */ + break; + } + /* Get the client IP address */ + newip.host=SDLNet_Read32(&data[CHAT_ADD_HOST]); + newip.port=SDLNet_Read16(&data[CHAT_ADD_PORT]); + + /* Copy name into channel */ + memcpy(people[which].name, &data[CHAT_ADD_NAME], 256); + people[which].name[256] = 0; + people[which].active = 1; + + /* Let the user know what happened */ + TextWindowAddText(termwin, + "* New client on %d from %d.%d.%d.%d:%d (%s)\n", which, + (newip.host>>24)&0xFF, (newip.host>>16)&0xFF, + (newip.host>>8)&0xFF, newip.host&0xFF, + newip.port, people[which].name); + + /* Put the address back in network form */ + newip.host = SDL_SwapBE32(newip.host); + newip.port = SDL_SwapBE16(newip.port); + + /* Bind the address to the UDP socket */ + SDLNet_UDP_Bind(udpsock, which, &newip); + } + used = CHAT_ADD_NAME+data[CHAT_ADD_NLEN]; + break; + case CHAT_DEL: { + Uint8 which; + + /* Figure out which channel we lost */ + which = data[CHAT_DEL_SLOT]; + if ( (which >= CHAT_MAXPEOPLE) || + ! people[which].active ) { + /* Invalid channel?? */ + break; + } + people[which].active = 0; + + /* Let the user know what happened */ + TextWindowAddText(termwin, + "* Lost client on %d (%s)\n", which, people[which].name); + + /* Unbind the address on the UDP socket */ + SDLNet_UDP_Unbind(udpsock, which); + } + used = CHAT_DEL_LEN; + break; + case CHAT_BYE: { + TextWindowAddText(termwin, "* Chat server full\n"); + } + used = CHAT_BYE_LEN; + break; + default: { + /* Unknown packet type?? */; + } + used = 0; + break; + } + return(used); +} + +void HandleServer(void) +{ + Uint8 data[512]; + int pos, len; + int used; + + /* Has the connection been lost with the server? */ + len = SDLNet_TCP_Recv(tcpsock, (char *)data, 512); + if ( len <= 0 ) { + SDLNet_TCP_DelSocket(socketset, tcpsock); + SDLNet_TCP_Close(tcpsock); + tcpsock = NULL; + TextWindowAddText(termwin, "Connection with server lost!\n"); + } else { + pos = 0; + while ( len > 0 ) { + used = HandleServerData(&data[pos]); + pos += used; + len -= used; + if ( used == 0 ) { + /* We might lose data here.. oh well, + we got a corrupt packet from server + */ + len = 0; + } + } + } +} +void HandleClient(void) +{ + int n; + + n = SDLNet_UDP_RecvV(udpsock, packets); + while ( n-- > 0 ) { + if ( packets[n]->channel >= 0 ) { + TextWindowAddText(termwin, "[%s] ", + people[packets[n]->channel].name); + TextWindowAddTextWithLength(termwin, (char *)packets[n]->data, packets[n]->len); + } + } +} + +void HandleNet(void) +{ + SDLNet_CheckSockets(socketset, 0); + if ( SDLNet_SocketReady(tcpsock) ) { + HandleServer(); + } + if ( SDLNet_SocketReady(udpsock) ) { + HandleClient(); + } +} + +void InitGUI(int width, int height) +{ + int lines = (height / FONT_LINE_HEIGHT) - 2; + + /* Chat terminal window */ + termwin = TextWindowCreate(2, 2, width-4, lines*FONT_LINE_HEIGHT); + + /* Send-line window */ + sendwin = TextWindowCreate(2, 2+lines*FONT_LINE_HEIGHT+2, width-4, 1*FONT_LINE_HEIGHT); + TextWindowAddText(sendwin, CHAT_PROMPT); +} + +void DisplayGUI(SDL_Renderer *renderer) +{ + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderClear(renderer); + TextWindowDisplay(termwin, renderer); + TextWindowDisplay(sendwin, renderer); + SDL_RenderPresent(renderer); +} + +void cleanup(int exitcode) +{ + /* Clean up the GUI */ + if ( termwin ) { + TextWindowDestroy( termwin ); + termwin = NULL; + } + if ( sendwin ) { + TextWindowDestroy( sendwin ); + sendwin = NULL; + } + /* Close the network connections */ + if ( tcpsock != NULL ) { + SDLNet_TCP_Close(tcpsock); + tcpsock = NULL; + } + if ( udpsock != NULL ) { + SDLNet_UDP_Close(udpsock); + udpsock = NULL; + } + if ( socketset != NULL ) { + SDLNet_FreeSocketSet(socketset); + socketset = NULL; + } + if ( packets != NULL ) { + SDLNet_FreePacketV(packets); + packets = NULL; + } + SDLNet_Quit(); + SDL_Quit(); + exit(exitcode); +} + +int main(int argc, char *argv[]) +{ + SDL_Window *window; + SDL_Renderer *renderer; + int i, done; + char *server; + IPaddress serverIP; + SDL_Event event; + + /* Check command line arguments */ + if ( argv[1] == NULL ) { + SDL_Log("Usage: %s \n", argv[0]); + exit(1); + } + + /* Initialize SDL */ + if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "Couldn't initialize SDL: %s\n", + SDL_GetError()); + exit(1); + } + + + /* Set a 640x480 video mode */ + if ( SDL_CreateWindowAndRenderer(640, 480, 0, &window, &renderer) < 0 ) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "Couldn't create window: %s\n", + SDL_GetError()); + SDL_Quit(); + exit(1); + } + + /* Initialize the network */ + if ( SDLNet_Init() < 0 ) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "Couldn't initialize net: %s\n", + SDLNet_GetError()); + SDL_Quit(); + exit(1); + } + + /* Go! */ + InitGUI(640, 480); + + /* Allocate a vector of packets for client messages */ + packets = SDLNet_AllocPacketV(4, CHAT_PACKETSIZE); + if ( packets == NULL ) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "Couldn't allocate packets: Out of memory\n"); + cleanup(2); + } + + /* Connect to remote host and create UDP endpoint */ + server = argv[1]; + TextWindowAddText(termwin, "Connecting to %s ... ", server); + DisplayGUI(renderer); + SDLNet_ResolveHost(&serverIP, server, CHAT_PORT); + if ( serverIP.host == INADDR_NONE ) { + TextWindowAddText(termwin, "Couldn't resolve hostname\n"); + } else { + /* If we fail, it's okay, the GUI shows the problem */ + tcpsock = SDLNet_TCP_Open(&serverIP); + if ( tcpsock == NULL ) { + TextWindowAddText(termwin, "Connect failed\n"); + } else { + TextWindowAddText(termwin, "Connected\n"); + } + } + /* Try ports in the range {CHAT_PORT - CHAT_PORT+10} */ + for ( i=0; (udpsock == NULL) && i<10; ++i ) { + udpsock = SDLNet_UDP_Open(CHAT_PORT+i); + } + if ( udpsock == NULL ) { + SDLNet_TCP_Close(tcpsock); + tcpsock = NULL; + TextWindowAddText(termwin, "Couldn't create UDP endpoint\n"); + } + + /* Allocate the socket set for polling the network */ + socketset = SDLNet_AllocSocketSet(2); + if ( socketset == NULL ) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "Couldn't create socket set: %s\n", + SDLNet_GetError()); + cleanup(2); + } + SDLNet_TCP_AddSocket(socketset, tcpsock); + SDLNet_UDP_AddSocket(socketset, udpsock); + + /* Run the GUI, handling network data */ + SendHello(argv[2]); + done = 0; + while ( !done ) { + HandleNet(); + + while ( SDL_PollEvent(&event) == 1 ) { + switch ( event.type ) { + case SDL_QUIT: + done = 1; + break; + case SDL_KEYDOWN: + switch ( event.key.keysym.sym ) { + case SDLK_ESCAPE: + done = 1; + break; + case SDLK_RETURN: + /* Send our line of text */ + SendBuf(keybuf, keypos); + keypos = 0; + break; + case SDLK_BACKSPACE: + /* If there's data, back up over it */ + if ( keypos > 0 ) { + TextWindowAddText(sendwin, "\b", 1); + --keypos; + } + break; + default: + break; + } + break; + case SDL_TEXTINPUT: + { + size_t textlen = SDL_strlen(event.text.text); + + if ( textlen < sizeof(keybuf) ) { + /* If the buffer is full, send it */ + if ( (keypos + textlen) >= sizeof(keybuf) ) { + SendBuf(keybuf, keypos); + keypos = 0; + } + /* Add the text to our send buffer */ + TextWindowAddTextWithLength(sendwin, event.text.text, textlen); + SDL_memcpy(&keybuf[keypos], event.text.text, textlen); + keypos += textlen; + } + } + break; + default: + break; + } + } + + DisplayGUI(renderer); + } + cleanup(0); + + /* Keep the compiler happy */ + return(0); +} diff --git a/vs/sdl2net/chat.h b/vs/sdl2net/chat.h new file mode 100644 index 00000000000..17f050e104d --- /dev/null +++ b/vs/sdl2net/chat.h @@ -0,0 +1,53 @@ +/* + CHAT: A chat client/server using the SDL example network library + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/* $Id$ */ + +/* Convert four letters into a number */ +#define MAKE_NUM(A, B, C, D) (((A+B)<<8)|(C+D)) + +/* Defines for the chat client */ +#define CHAT_SCROLLBACK 512 /* Save 512 lines in scrollback */ +#define CHAT_PROMPT "> " +#define CHAT_PACKETSIZE 256 /* Maximum length of a message */ + +/* Defines shared between the server and client */ +#define CHAT_PORT MAKE_NUM('C','H','A','T') + +/* The protocol between the chat client and server */ +#define CHAT_HELLO 0 /* 0+Port+len+name */ +#define CHAT_HELLO_PORT 1 +#define CHAT_HELLO_NLEN CHAT_HELLO_PORT+2 +#define CHAT_HELLO_NAME CHAT_HELLO_NLEN+1 +#define CHAT_ADD 1 /* 1+N+IP+Port+len+name */ +#define CHAT_ADD_SLOT 1 +#define CHAT_ADD_HOST CHAT_ADD_SLOT+1 +#define CHAT_ADD_PORT CHAT_ADD_HOST+4 +#define CHAT_ADD_NLEN CHAT_ADD_PORT+2 +#define CHAT_ADD_NAME CHAT_ADD_NLEN+1 +#define CHAT_DEL 2 /* 2+N */ +#define CHAT_DEL_SLOT 1 +#define CHAT_DEL_LEN CHAT_DEL_SLOT+1 +#define CHAT_BYE 255 /* 255 */ +#define CHAT_BYE_LEN 1 + +/* The maximum number of people who can talk at once */ +#define CHAT_MAXPEOPLE 10 diff --git a/vs/sdl2net/chatd.c b/vs/sdl2net/chatd.c new file mode 100644 index 00000000000..c236ecb37e0 --- /dev/null +++ b/vs/sdl2net/chatd.c @@ -0,0 +1,264 @@ +/* + CHATD: A chat server using the SDL example network library + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ + +/* Note that this isn't necessarily the way to run a chat system. + This is designed to excercise the network code more than be really + functional. +*/ + +#include +#include +#include + +#include "SDL.h" +#include "SDL_net.h" +#include "chat.h" + +/* This is really easy. All we do is monitor connections */ + +static TCPsocket servsock = NULL; +static SDLNet_SocketSet socketset = NULL; +static struct { + int active; + TCPsocket sock; + IPaddress peer; + Uint8 name[256+1]; +} people[CHAT_MAXPEOPLE]; + + +void HandleServer(void) +{ + TCPsocket newsock; + int which; + unsigned char data; + + newsock = SDLNet_TCP_Accept(servsock); + if ( newsock == NULL ) { + return; + } + + /* Look for unconnected person slot */ + for ( which=0; which=2.0.20 + # Until 2.0.18, SDL2test.lib used `printf` in SDL_test_common.c. instead of `SDL_log`. (fixed in 2.0.20) + set_target_properties(SDL2::SDL2test PROPERTIES + INTERFACE_LINK_LIBRARIES "legacy_stdio_definitions.lib" + ) + endif() + endif() +endif() diff --git a/vs/sdl2net/cmake/PrivateSdlFunctions.cmake b/vs/sdl2net/cmake/PrivateSdlFunctions.cmake new file mode 100644 index 00000000000..398770b91d0 --- /dev/null +++ b/vs/sdl2net/cmake/PrivateSdlFunctions.cmake @@ -0,0 +1,243 @@ +# This file is shared amongst SDL_image/SDL_mixer/SDL_net/SDL_ttf + +macro(sdl_calculate_derived_version_variables) + if (NOT DEFINED MAJOR_VERSION OR NOT DEFINED MINOR_VERSION OR NOT DEFINED MICRO_VERSION) + message(FATAL_ERROR "MAJOR_VERSION, MINOR_VERSION and MICRO_VERSION need to be defined") + endif() + + set(FULL_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}") + + # Calculate a libtool-like version number + math(EXPR BINARY_AGE "${MINOR_VERSION} * 100 + ${MICRO_VERSION}") + math(EXPR IS_DEVELOPMENT "${MINOR_VERSION} % 2") + if (IS_DEVELOPMENT) + # Development branch, 2.5.1 -> libSDL2_XXXXX-2.0.so.0.501.0 + set(INTERFACE_AGE 0) + else() + # Stable branch, 2.6.1 -> libSDL2_XXXXX-2.0.so.0.600.1 + set(INTERFACE_AGE ${MICRO_VERSION}) + endif() + + # Increment this if there is an incompatible change - but if that happens, + # we should rename the library from SDL2 to SDL3, at which point this would + # reset to 0 anyway. + set(LT_MAJOR "0") + + math(EXPR LT_AGE "${BINARY_AGE} - ${INTERFACE_AGE}") + math(EXPR LT_CURRENT "${LT_MAJOR} + ${LT_AGE}") + set(LT_REVISION "${INTERFACE_AGE}") + # For historical reasons, the library name redundantly includes the major + # version twice: libSDL2_XXXXX-2.0.so.0. + # TODO: in SDL 3, set the OUTPUT_NAME to plain SDL3_XXXXX, which will simplify + # it to libSDL2_XXXXX.so.0 + set(LT_RELEASE "2.0") + set(LT_VERSION "${LT_MAJOR}.${LT_AGE}.${LT_REVISION}") + + # The following should match the versions in the Xcode project file. + # Each version is 1 higher than you might expect, for compatibility + # with libtool: macOS ABI versioning is 1-based, unlike other platforms + # which are normally 0-based. + math(EXPR DYLIB_CURRENT_VERSION_MAJOR "${LT_MAJOR} + ${LT_AGE} + 1") + math(EXPR DYLIB_CURRENT_VERSION_MINOR "${LT_REVISION}") + math(EXPR DYLIB_COMPAT_VERSION_MAJOR "${LT_MAJOR} + 1") + set(DYLIB_CURRENT_VERSION "${DYLIB_CURRENT_VERSION_MAJOR}.${DYLIB_CURRENT_VERSION_MINOR}.0") +endmacro() + +macro(sdl_find_sdl2 TARGET VERSION) + if(NOT TARGET ${TARGET}) + # FIXME: can't add REQUIRED since not all SDL2 installs ship SDL2ConfigVersion.cmake (or sdl2-config-version.cmake) + find_package(SDL2 ${VERSION} QUIET) + endif() + if(NOT TARGET ${TARGET}) + # FIXME: can't add REQUIRED since not all SDL2 installs ship SDL2Config.cmake (or sdl2-config.cmake) + find_package(SDL2 QUIET) + if(SDL2_FOUND) + message(WARNING "Could not verify SDL2 version. Assuming SDL2 has version of at least ${VERSION}.") + endif() + endif() + + # Use Private FindSDL2.cmake module to find SDL2 for installations where no SDL2Config.cmake is available, + # or for those installations where no target is generated. + if (NOT TARGET ${TARGET}) + message(STATUS "Using private SDL2 find module") + find_package(PrivateSDL2 ${VERSION} REQUIRED) + add_library(${TARGET} INTERFACE IMPORTED) + set_target_properties(${TARGET} PROPERTIES + INTERFACE_LINK_LIBRARIES "PrivateSDL2::PrivateSDL2" + ) + endif() +endmacro() + +function(read_absolute_symlink DEST PATH) + file(READ_SYMLINK "${PATH}" p) + if (NOT IS_ABSOLUTE p) + get_filename_component(pdir "${PATH}" DIRECTORY) + set(p "${pdir}/${p}") + endif() + set("${DEST}" "${p}" PARENT_SCOPE) +endfunction() + +function(win32_implib_identify_dll DEST IMPLIB) + cmake_parse_arguments(ARGS "NOTFATAL" "" "" ${ARGN}) + if (CMAKE_DLLTOOL) + execute_process( + COMMAND "${CMAKE_DLLTOOL}" --identify "${IMPLIB}" + RESULT_VARIABLE retcode + OUTPUT_VARIABLE stdout + ERROR_VARIABLE stderr) + if (NOT retcode EQUAL 0) + if (NOT ARGS_NOTFATAL) + message(FATAL_ERROR "${CMAKE_DLLTOOL} failed.") + else() + set("${DEST}" "${DEST}-NOTFOUND" PARENT_SCOPE) + return() + endif() + endif() + string(STRIP "${stdout}" result) + set(${DEST} "${result}" PARENT_SCOPE) + elseif (MSVC) + get_filename_component(CMAKE_C_COMPILER_DIRECTORY "${CMAKE_C_COMPILER}" DIRECTORY CACHE) + find_program(CMAKE_DUMPBIN NAMES dumpbin PATHS "${CMAKE_C_COMPILER_DIRECTORY}") + if (CMAKE_DUMPBIN) + execute_process( + COMMAND "${CMAKE_DUMPBIN}" "-headers" "${IMPLIB}" + RESULT_VARIABLE retcode + OUTPUT_VARIABLE stdout + ERROR_VARIABLE stderr) + if (NOT retcode EQUAL 0) + if (NOT ARGS_NOTFATAL) + message(FATAL_ERROR "dumpbin failed.") + else() + set(${DEST} "${DEST}-NOTFOUND" PARENT_SCOPE) + return() + endif() + endif() + string(REGEX MATCH "DLL name[ ]+:[ ]+([^\n]+)\n" match "${stdout}") + if (NOT match) + if (NOT ARGS_NOTFATAL) + message(FATAL_ERROR "dumpbin did not find any associated dll for ${IMPLIB}.") + else() + set(${DEST} "${DEST}-NOTFOUND" PARENT_SCOPE) + return() + endif() + endif() + set(result "${CMAKE_MATCH_1}") + set(${DEST} "${result}" PARENT_SCOPE) + else() + message(FATAL_ERROR "Cannot find dumpbin, please set CMAKE_DUMPBIN cmake variable") + endif() + else() + if (NOT ARGS_NOTFATAL) + message(FATAL_ERROR "Don't know how to identify dll from import library. Set CMAKE_DLLTOOL (for mingw) or CMAKE_DUMPBIN (for MSVC)") + else() + set(${DEST} "${DEST}-NOTFOUND") + endif() + endif() +endfunction() + +function(target_get_dynamic_library DEST TARGET) + set(result) + get_target_property(alias "${TARGET}" ALIASED_TARGET) + while (alias) + set(TARGET "${alias}") + get_target_property(alias "${TARGET}" ALIASED_TARGET) + endwhile() + if (WIN32) + # Use the target dll of the import library + set(props_to_check IMPORTED_IMPLIB) + if (CMAKE_BUILD_TYPE) + list(APPEND props_to_check IMPORTED_IMPLIB_${CMAKE_BUILD_TYPE}) + endif() + list(APPEND props_to_check IMPORTED_LOCATION) + if (CMAKE_BUILD_TYPE) + list(APPEND props_to_check IMPORTED_LOCATION_${CMAKE_BUILD_TYPE}) + endif() + foreach (config_type ${CMAKE_CONFIGURATION_TYPES} RELEASE DEBUG RELWITHDEBINFO MINSIZEREL) + list(APPEND props_to_check IMPORTED_IMPLIB_${config_type}) + list(APPEND props_to_check IMPORTED_LOCATION_${config_type}) + endforeach() + + foreach(prop_to_check ${props_to_check}) + if (NOT result) + get_target_property(propvalue "${TARGET}" ${prop_to_check}) + if (propvalue AND EXISTS "${propvalue}") + win32_implib_identify_dll(result "${propvalue}" NOTFATAL) + endif() + endif() + endforeach() + else() + # 1. find the target library a file might be symbolic linking to + # 2. find all other files in the same folder that symolic link to it + # 3. sort all these files, and select the 2nd item + set(props_to_check IMPORTED_LOCATION) + if (CMAKE_BUILD_TYPE) + list(APPEND props_to_check IMPORTED_LOCATION_${CMAKE_BUILD_TYPE}) + endif() + foreach (config_type ${CMAKE_CONFIGURATION_TYPES} RELEASE DEBUG RELWITHDEBINFO MINSIZEREL) + list(APPEND props_to_check IMPORTED_LOCATION_${config_type}) + endforeach() + foreach(prop_to_check ${props_to_check}) + if (NOT result) + get_target_property(propvalue "${TARGET}" ${prop_to_check}) + if (EXISTS "${propvalue}") + while (IS_SYMLINK "${propvalue}") + read_absolute_symlink(propvalue "${propvalue}") + endwhile() + get_filename_component(libdir "${propvalue}" DIRECTORY) + file(GLOB subfiles "${libdir}/*") + set(similar_files "${propvalue}") + foreach(subfile ${subfiles}) + if (IS_SYMLINK "${subfile}") + read_absolute_symlink(subfile_target "${subfile}") + if (subfile_target STREQUAL propvalue) + list(APPEND similar_files "${subfile}") + endif() + endif() + endforeach() + list(SORT similar_files) + list(LENGTH similar_files eq_length) + if (eq_length GREATER 1) + list(GET similar_files 1 item) + else() + list(GET similar_files 0 item) + endif() + get_filename_component(result "${item}" NAME) + endif() + endif() + endforeach() + endif() + if (NOT result) + set (result "$") + endif() + set(${DEST} ${result} PARENT_SCOPE) +endfunction() + +macro(sdl_check_project_in_subfolder relative_subfolder name vendored_option) + if(NOT EXISTS "${PROJECT_SOURCE_DIR}/${relative_subfolder}/CMakeLists.txt") + message(FATAL_ERROR "No cmake project for ${name} found in ${relative_subfolder}.\n" + "Run the download script in the external folder, or re-configure with -D${vendored_option}=OFF to use system packages.") + endif() +endmacro() + +macro(sdl_check_linker_flag flag var) + # FIXME: Use CheckLinkerFlag module once cmake minimum version >= 3.18 + include(CMakePushCheckState) + include(CheckCSourceCompiles) + cmake_push_check_state(RESET) + set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,--no-undefined") + check_c_source_compiles("int main() { return 0; }" ${var}) + cmake_pop_check_state() +endmacro() + +function(sdl_target_link_options_no_undefined TARGET) + if(NOT MSVC) + if(CMAKE_C_COMPILER_ID MATCHES "AppleClang") + target_link_options(${TARGET} PRIVATE "-Wl,-undefined,error") + else() + sdl_check_linker_flag("-Wl,--no-undefined" HAVE_WL_NO_UNDEFINED) + if(HAVE_WL_NO_UNDEFINED) + target_link_options(${TARGET} PRIVATE "-Wl,--no-undefined") + endif() + endif() + endif() +endfunction() diff --git a/vs/sdl2net/cmake/test/CMakeLists.txt b/vs/sdl2net/cmake/test/CMakeLists.txt new file mode 100644 index 00000000000..903af2a85c3 --- /dev/null +++ b/vs/sdl2net/cmake/test/CMakeLists.txt @@ -0,0 +1,47 @@ +# This cmake build script is meant for verifying the various CMake configuration script. + +cmake_minimum_required(VERSION 3.12) +project(sdl_test LANGUAGES C) + +cmake_policy(SET CMP0074 NEW) + +# Override CMAKE_FIND_ROOT_PATH_MODE to allow search for SDL2 outside of sysroot +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER) + +include(FeatureSummary) + +option(TEST_SHARED "Test linking to shared SDL2_net library" ON) +add_feature_info("TEST_SHARED" TEST_SHARED "Test linking with shared library") + +option(TEST_STATIC "Test linking to static SDL2_net libary" ON) +add_feature_info("TEST_STATIC" TEST_STATIC "Test linking with static library") + +if(TEST_SHARED) + # FIXME: in the distant future, must become REQUIRED + find_package(SDL2 CONFIG COMPONENTS SDL2) + # FIXME: and the following should be removed + if(NOT TARGET SDL2::SDL2) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/..") + include(PrivateSdlFunctions) + sdl_find_sdl2(SDL2::SDL2 2.0) + endif() + find_package(SDL2_net REQUIRED CONFIG) + add_executable(main_shared main.c) + target_link_libraries(main_shared PRIVATE SDL2::SDL2 SDL2_net::SDL2_net) +endif() + +if(TEST_STATIC) + # FIXME: in the distant future, must become REQUIRED + find_package(SDL2 CONFIG COMPONENTS SDL2-static) + # FIXME: and the following should be removed + if(NOT TARGET SDL2::SDL2-static) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/..") + include(PrivateSdlFunctions) + sdl_find_sdl2(SDL2::SDL2-static 2.0) + endif() + find_package(SDL2_net REQUIRED CONFIG) + add_executable(main_static main.c) + target_link_libraries(main_static PRIVATE SDL2::SDL2-static SDL2_net::SDL2_net-static) +endif() + +feature_summary(WHAT ALL) diff --git a/vs/sdl2net/cmake/test/main.c b/vs/sdl2net/cmake/test/main.c new file mode 100644 index 00000000000..579744b946a --- /dev/null +++ b/vs/sdl2net/cmake/test/main.c @@ -0,0 +1,18 @@ +#define SDL_MAIN_HANDLED +#include "SDL.h" +#include "SDL_net.h" +#include + +int main(int argc, char *argv[]) { + SDL_SetMainReady(); + if (SDL_Init(0) < 0) { + fprintf(stderr, "could not initialize sdl2: %s\n", SDL_GetError()); + return 1; + } + if (SDLNet_Init() == -1) { + fprintf(stderr, "SDLNet_Init: %s\n", SDLNet_GetError()); + } + SDLNet_Quit(); + SDL_Quit(); + return 0; +} diff --git a/vs/sdl2net/configure.ac b/vs/sdl2net/configure.ac new file mode 100644 index 00000000000..a314a141bf8 --- /dev/null +++ b/vs/sdl2net/configure.ac @@ -0,0 +1,57 @@ +dnl SDL2_net static-only configure.ac + +AC_PREREQ([2.69]) +AC_INIT([SDL2_net], [2.2.0], [https://github.com/libsdl-org/SDL_net/issues]) +AC_CONFIG_MACRO_DIR([acinclude]) +AC_CONFIG_SRCDIR([SDLnet.c]) + +AC_CANONICAL_HOST + +AM_INIT_AUTOMAKE([foreign subdir-objects tar-ustar]) + +# Check for C compiler +AC_PROG_CC +AC_PROG_RANLIB + +# Check for SDL2 +SDL_VERSION=2.0.4 +AC_SUBST(SDL_VERSION) +AM_PATH_SDL2($SDL_VERSION, , AC_MSG_ERROR([*** SDL2 version $SDL_VERSION not found!])) +CFLAGS="$CFLAGS $SDL_CFLAGS" +LIBS="$LIBS $SDL_LIBS" + +# Determine networking library +case "$host" in + *-*-cygwin* | *-*-mingw*) + INETLIB="-lws2_32 -liphlpapi" + ;; + sparc*-*-solaris*) + INETLIB="-lsocket -lnsl" + ;; + *-*-qnx*) + INETLIB="-lsocket" + ;; + *-*-haiku*) + INETLIB="-lnetwork" + ;; + *) + INETLIB="" + ;; +esac +AC_SUBST(INETLIB) + +# Enable/disable examples +AC_ARG_ENABLE([examples], + AS_HELP_STRING([--disable-examples], [Do not build example programs]), + enable_examples=yes, enable_examples=no) +AM_CONDITIONAL(ENABLE_EXAMPLES, [test x$enable_examples = xyes]) + +# Output files +AC_CONFIG_FILES([ +Makefile +sdl2_net-config.cmake +sdl2_net-config-version.cmake +SDL2_net.spec +SDL2_net.pc +]) +AC_OUTPUT \ No newline at end of file diff --git a/vs/sdl2net/ltmain.sh b/vs/sdl2net/ltmain.sh new file mode 100755 index 00000000000..6cfe150b51e --- /dev/null +++ b/vs/sdl2net/ltmain.sh @@ -0,0 +1,8437 @@ +# Generated from ltmain.m4sh. + +# ltmain.sh (GNU libtool) 2.2.6 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print informational messages (default) +# --version print version information +# -h, --help print short or long help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.2.6 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=2.2.6 +TIMESTAMP="" +package_revision=1.3012 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# NLS nuisances: We save the old values to restore during execute mode. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done + +$lt_unset CDPATH + + + + + +: ${CP="cp -f"} +: ${ECHO="echo"} +: ${EGREP="/usr/bin/grep -E"} +: ${FGREP="/usr/bin/grep -F"} +: ${GREP="/usr/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/opt/local/bin/gsed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +# Generated shell functions inserted here. + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +# In the unlikely event $progname began with a '-', it would play havoc with +# func_echo (imagine progname=-n), so we prepend ./ in that case: +func_dirname_and_basename "$progpath" +progname=$func_basename_result +case $progname in + -*) progname=./$progname ;; +esac + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname${mode+: }$mode: $*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` + done + my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "X$my_tmpdir" | $Xsed +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "X$1" | $Xsed \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + + + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED -n '/^# Usage:/,/# -h/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + $ECHO + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help +# Echo long help message to standard output and exit. +func_help () +{ + $SED -n '/^# Usage:/,/# Report bugs to/ { + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + }' < "$progpath" + exit $? +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1" + exit_cmd=exit +} + +exit_cmd=: + + + + + +# Check that we have a working $ECHO. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell, and then maybe $ECHO will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Parse non-mode specific arguments: + while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --config) func_config ;; + + --debug) preserve_args="$preserve_args $opt" + func_echo "enabling shell trace mode" + opt_debug='set -x' + $opt_debug + ;; + + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break + execute_dlfiles="$execute_dlfiles $1" + shift + ;; + + --dry-run | -n) opt_dry_run=: ;; + --features) func_features ;; + --finish) mode="finish" ;; + + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break + case $1 in + # Valid mode arguments: + clean) ;; + compile) ;; + execute) ;; + finish) ;; + install) ;; + link) ;; + relink) ;; + uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; + esac + + mode="$1" + shift + ;; + + --preserve-dup-deps) + opt_duplicate_deps=: ;; + + --quiet|--silent) preserve_args="$preserve_args $opt" + opt_silent=: + ;; + + --verbose| -v) preserve_args="$preserve_args $opt" + opt_silent=false + ;; + + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break + preserve_args="$preserve_args $opt $1" + func_enable_tag "$1" # tagname is set here + shift + ;; + + # Separate optargs to long options: + -dlopen=*|--mode=*|--tag=*) + func_opt_split "$opt" + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + shift + ;; + + -\?|-h) func_usage ;; + --help) opt_help=: ;; + --version) func_version ;; + + -*) func_fatal_help "unrecognized option \`$opt'" ;; + + *) nonopt="$opt" + break + ;; + esac + done + + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + ;; + esac + + # Having warned about all mis-specified options, bail out if + # anything was wrong. + $exit_cmd $EXIT_FAILURE +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +## ----------- ## +## Main. ## +## ----------- ## + +$opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$mode' for more information." +} + + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_ltwrapper_scriptname_result="" + if func_ltwrapper_executable_p "$1"; then + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + fi +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case "$@ " in + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist="$removelist $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command="$command -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { +test "$mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -os2dllname NAME specify short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$mode'" + ;; + esac + + $ECHO + $ECHO "Try \`$progname --help' for more information about other modes." + + exit $? +} + + # Now that we've collected a possible --mode arg, show help if necessary + $opt_help && func_mode_help + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_quote_for_eval "$file" + args="$args $func_quote_for_eval_result" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + $ECHO "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + $ECHO "X----------------------------------------------------------------------" | $Xsed + $ECHO "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + $ECHO + $ECHO "If you ever happen to want to link against installed libraries" + $ECHO "in a given directory, LIBDIR, you must either use libtool, and" + $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" + $ECHO "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" + $ECHO " during execution" + fi + if test -n "$runpath_var"; then + $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" + $ECHO " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $ECHO + + $ECHO "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" + $ECHO "pages." + ;; + *) + $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + $ECHO "X----------------------------------------------------------------------" | $Xsed + exit $EXIT_SUCCESS +} + +test "$mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $ECHO "X$nonopt" | $GREP shtool >/dev/null; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog="$install_prog$func_quote_for_eval_result" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog="$install_prog $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_verbose "extracting global C symbols from \`$progfile'" + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + $ECHO >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +" + case $host in + *cygwin* | *mingw* | *cegcc* ) + $ECHO >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs. */" + lt_dlsym_const= ;; + *osf5*) + echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" + lt_dlsym_const= ;; + *) + lt_dlsym_const=const ;; + esac + + $ECHO >> "$output_objdir/$my_dlsyms" "\ +extern $lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +$lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + $ECHO >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags="$symtab_cflags $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + + +# func_emit_wrapper_part1 [arg=no] +# +# Emit the first part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part1 () +{ + func_emit_wrapper_part1_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part1_arg1=$1 + fi + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + ECHO=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$ECHO works! + : + else + # Restart under the correct shell, and then maybe \$ECHO will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $ECHO "\ + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done +" +} +# end: func_emit_wrapper_part1 + +# func_emit_wrapper_part2 [arg=no] +# +# Emit the second part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part2 () +{ + func_emit_wrapper_part2_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part2_arg1=$1 + fi + + $ECHO "\ + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} +# end: func_emit_wrapper_part2 + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=no + if test -n "$1" ; then + func_emit_wrapper_arg1=$1 + fi + + # split this up so that func_emit_cwrapperexe_src + # can call each part independently. + func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" + func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" +} + + +# func_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin. Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ + func_to_host_path_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + case $build in + *mingw* ) # actually, msys + # awkward: cmd appends spaces to result + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_path_tmp1=`( cmd //c echo "$1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_path_tmp1=`cygpath -w "$1"` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # Unfortunately, winepath does not exit with a non-zero + # error code, so we are forced to check the contents of + # stdout. On the other hand, if the command is not + # found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both + # error code of zero AND non-empty stdout, which explains + # the odd construction: + func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + else + # Allow warning below. + func_to_host_path_result="" + fi + ;; + esac + if test -z "$func_to_host_path_result" ; then + #func_error "Could not determine host path corresponding to" + #func_error " '$1'" + #func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_path_result="$1" + fi + ;; + esac + fi +} +# end: func_to_host_path + +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# +# Path separators are also converted from $build format to +# $host format. If ARG begins or ends with a path separator +# character, it is preserved (but converted to $host format) +# on output. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ + func_to_host_pathlist_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_to_host_pathlist_tmp2="$1" + # Once set for this call, this variable should not be + # reassigned. It is used in tha fallback case. + func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e 's|^:*||' -e 's|:*$||'` + case $build in + *mingw* ) # Actually, msys. + # Awkward: cmd appends spaces to result. + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # unfortunately, winepath doesn't convert pathlists + func_to_host_pathlist_result="" + func_to_host_pathlist_oldIFS=$IFS + IFS=: + for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do + IFS=$func_to_host_pathlist_oldIFS + if test -n "$func_to_host_pathlist_f" ; then + func_to_host_path "$func_to_host_pathlist_f" + if test -n "$func_to_host_path_result" ; then + if test -z "$func_to_host_pathlist_result" ; then + func_to_host_pathlist_result="$func_to_host_path_result" + else + func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" + fi + fi + fi + IFS=: + done + IFS=$func_to_host_pathlist_oldIFS + ;; + esac + if test -z "$func_to_host_pathlist_result" ; then + func_error "Could not determine the host path(s) corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This may break if $1 contains DOS-style drive + # specifications. The fix is not to complicate the expression + # below, but for the user to provide a working wine installation + # with winepath so that path translation in the cross-to-mingw + # case works properly. + lt_replace_pathsep_nix_to_dos="s|:|;|g" + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_replace_pathsep_nix_to_dos"` + fi + # Now, add the leading and trailing path separators back + case "$1" in + :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" + ;; + esac + case "$1" in + *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" + ;; + esac + ;; + esac + fi +} +# end: func_to_host_pathlist + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +# define setmode _setmode +#else +# include +# include +# ifdef __CYGWIN__ +# include +# define HAVE_SETENV +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +#ifdef _MSC_VER +# define S_IXUSR _S_IEXEC +# define stat _stat +# ifndef _INTPTR_T_DEFINED +# define intptr_t int +# endif +#endif + +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifdef __CYGWIN__ +# define FOPEN_WB "wb" +#endif + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#undef LTWRAPPER_DEBUGPRINTF +#if defined DEBUGWRAPPER +# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args +static void +ltwrapper_debugprintf (const char *fmt, ...) +{ + va_list args; + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); +} +#else +# define LTWRAPPER_DEBUGPRINTF(args) +#endif + +const char *program_name = NULL; + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_fatal (const char *message, ...); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_opt_process_env_set (const char *arg); +void lt_opt_process_env_prepend (const char *arg); +void lt_opt_process_env_append (const char *arg); +int lt_split_name_value (const char *arg, char** name, char** value); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); + +static const char *script_text_part1 = +EOF + + func_emit_wrapper_part1 yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ "/' -e 's/$/\\n"/' + echo ";" + cat <"))); + for (i = 0; i < newargc; i++) + { + LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); + } + +EOF + + case $host_os in + mingw*) + cat <<"EOF" + /* execv doesn't actually work on mingw as expected on unix */ + rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); + if (rval == -1) + { + /* failed to start process */ + LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); + return 127; + } + return rval; +EOF + ;; + *) + cat <<"EOF" + execv (lt_argv_zero, newargz); + return rval; /* =127, but avoids unused variable warning */ +EOF + ;; + esac + + cat <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void *p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), + string) : NULL; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char) name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable (const char *path) +{ + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", + wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", + tmp_pathspec)); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + char *errstr = strerror (errno); + lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal ("Could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} + +void +lt_setenv (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", + (name ? name : ""), + (value ? value : ""))); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +int +lt_split_name_value (const char *arg, char** name, char** value) +{ + const char *p; + int len; + if (!arg || !*arg) + return 1; + + p = strchr (arg, (int)'='); + + if (!p) + return 1; + + *value = xstrdup (++p); + + len = strlen (arg) - strlen (*value); + *name = XMALLOC (char, len); + strncpy (*name, arg, len-1); + (*name)[len - 1] = '\0'; + + return 0; +} + +void +lt_opt_process_env_set (const char *arg) +{ + char *name = NULL; + char *value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); + } + + lt_setenv (name, value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_prepend (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_append (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 1); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + + +EOF +} +# end: func_emit_cwrapperexe_src + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname="$arg" + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs="$weak_libs $arg" + prev= + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname '-L' '' "$arg" + dir=$func_stripname_result + if test -z "$dir"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" + linker_flags="$linker_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -F/path gives path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + # OS/2 uses -Zxxx to specify OS/2-specific options + -Z*) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) prev=xcompiler;; + esac + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_duplicate_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + case $lib in + *.la) func_source "$lib" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs="$deplibs $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $ECHO + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because the file extensions .$libext of this argument makes me believe" + $ECHO "*** that it is just a static archive that I should not use here." + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath="$temp_rpath$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs="$notinst_deplibs $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + $ECHO + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) # | *os2* # SDL customization: removed OS/2 versioning support. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $ECHO + $ECHO "*** And there doesn't seem to be a static archive available" + $ECHO "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $ECHO + $ECHO "*** Warning: This system can not link to static lib archive $lib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $ECHO "*** But as you try to build a module library, libtool will still create " + $ECHO "*** a static module, that should work as long as the dlopening application" + $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_dirname "$deplib" "" "." + dir="$func_dirname_result" + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs="$libobjs $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` + # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` + # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ + -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` + done + fi + if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | + $GREP . >/dev/null; then + $ECHO + if test "X$deplibs_check_method" = "Xnone"; then + $ECHO "*** Warning: inter-library dependencies are not supported in this platform." + else + $ECHO "*** Warning: inter-library dependencies are not known to be supported." + fi + $ECHO "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $ECHO + $ECHO "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + $ECHO "*** a static module, that should work as long as the dlopening" + $ECHO "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $ECHO "*** The inter-library dependencies that have been dropped here will be" + $ECHO "*** automatically added whenever a program is linked with this library" + $ECHO "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $ECHO + $ECHO "*** Since this library must not contain undefined symbols," + $ECHO "*** because either the platform does not support them or" + $ECHO "*** it was explicitly requested with -no-undefined," + $ECHO "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles="$delfiles $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + func_len " $cmd" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + output_la=`$ECHO "X$output" | $Xsed -e "$basename"` + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + $ECHO 'INPUT (' > $output + for obj in $save_libobjs + do + $ECHO "$obj" >> $output + done + $ECHO ')' >> $output + delfiles="$delfiles $output" + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + $ECHO "$obj" >> $output + done + delfiles="$delfiles $output" + output=$firstobj\"$file_list_spec$output\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles="$delfiles $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $ECHO for shipping. + if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs="$oldobjs $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $ECHO "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles="$newdlfiles $libdir/$name" + ;; + *) newdlfiles="$newdlfiles $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles="$newdlprefiles $libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$mode" = link || test "$mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM="$RM $arg"; rmforce=yes ;; + -*) RM="$RM $arg" ;; + *) files="$files $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$mode" = uninstall || test "$mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/vs/sdl2net/release_checklist.md b/vs/sdl2net/release_checklist.md new file mode 100644 index 00000000000..3b4dadedee2 --- /dev/null +++ b/vs/sdl2net/release_checklist.md @@ -0,0 +1,99 @@ +# Release checklist + +## New feature release + +* Update `CHANGES.txt` + +* Bump version number to 2.EVEN.0 in all these locations: + + * `SDL_net.h`: + `SDL_NET_MAJOR_VERSION`, `SDL_NET_MINOR_VERSION`, `SDL_NET_PATCHLEVEL` + * `configure.ac`: + `MAJOR_VERSION`, `MINOR_VERSION`, `MICRO_VERSION` + * `CMakeLists.txt`: + `MAJOR_VERSION`, `MINOR_VERSION`, `MICRO_VERSION` + * `Makefile.os2`: + `MAJOR_VERSION`, `MINOR_VERSION`, `MICRO_VERSION` + * `version.rc`: + `FILEVERSION`, `PRODUCTVERSION`, `FileVersion`, `ProductVersion` + * `VisualC/Version.rc`: + `FILEVERSION`, `PRODUCTVERSION`, `FileVersion`, `ProductVersion` + * `Xcode/Info-Framework.plist`: + `CFBundleShortVersionString`, `CFBundleVersion` + +* Bump ABI version information + + * `Xcode/SDL_net.xcodeproj/project.pbxproj`: + `DYLIB_CURRENT_VERSION`, `DYLIB_COMPATIBILITY_VERSION` + * set first number in `DYLIB_CURRENT_VERSION` to + (100 * *minor*) + 1 + * set second number in `DYLIB_CURRENT_VERSION` to 0 + * if backwards compatibility has been broken, + increase `DYLIB_COMPATIBILITY_VERSION` (?) + +* Run `./test-versioning.sh` to verify that everything is consistent + +* Regenerate `configure` + +* Do the release + +## New bugfix release + +* Check that no new API/ABI was added + + * If it was, do a new feature release (see above) instead + +* Bump version number from 2.Y.Z to 2.Y.(Z+1) (Y is even) + + * Same places as listed above + +* Bump ABI version information + + * `Xcode/SDL_net.xcodeproj/project.pbxproj`: + `DYLIB_CURRENT_VERSION`, `DYLIB_COMPATIBILITY_VERSION` + * set second number in `DYLIB_CURRENT_VERSION` to *patchlevel* + +* Run test/versioning.sh to verify that everything is consistent + +* Regenerate `configure` + +* Do the release + +## After a feature release + +* Create a branch like `release-2.6.x` + +* Bump version number to 2.ODD.0 for next development branch + + * Same places as listed above + +* Bump ABI version information + + * Same places as listed above + * Assume that the next feature release will contain new API/ABI + +* Run test/versioning.sh to verify that everything is consistent + +* Add a new milestone for issues + +## New development prerelease + +* Bump version number from 2.Y.Z to 2.Y.(Z+1) (Y is odd) + + * Same places as listed above + +* Bump ABI version information + + * `Xcode/SDL_net.xcodeproj/project.pbxproj`: + `DYLIB_CURRENT_VERSION`, `DYLIB_COMPATIBILITY_VERSION` + * set first number in `DYLIB_CURRENT_VERSION` to + (100 * *minor*) + *patchlevel* + 1 + * set second number in `DYLIB_CURRENT_VERSION` to 0 + * if backwards compatibility has been broken, + increase `DYLIB_COMPATIBILITY_VERSION` (?) + +* Run test/versioning.sh to verify that everything is consistent + +* Regenerate `configure` + +* Do the release diff --git a/vs/sdl2net/sdl2_net-config-version.cmake.in b/vs/sdl2net/sdl2_net-config-version.cmake.in new file mode 100644 index 00000000000..8243f03f822 --- /dev/null +++ b/vs/sdl2net/sdl2_net-config-version.cmake.in @@ -0,0 +1,12 @@ +# sdl2_net cmake project-config-version input for ./configure scripts + +set(PACKAGE_VERSION "@MAJOR_VERSION@.@MINOR_VERSION@.@MICRO_VERSION@") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() diff --git a/vs/sdl2net/sdl2_net-config.cmake.in b/vs/sdl2net/sdl2_net-config.cmake.in new file mode 100644 index 00000000000..14ce0ecba71 --- /dev/null +++ b/vs/sdl2net/sdl2_net-config.cmake.in @@ -0,0 +1,72 @@ +# sdl2_net cmake project-config input for ./configure scripts + +include(FeatureSummary) +set_package_properties(SDL2_net PROPERTIES + URL "https://www.libsdl.org/projects/SDL_net/" + DESCRIPTION "SDL_net is an example portable network library for use with SDL." +) + +set(SDL2_net_FOUND TRUE) + +get_filename_component(prefix "${CMAKE_CURRENT_LIST_DIR}/@cmake_prefix_relpath@" ABSOLUTE) +set(exec_prefix "@exec_prefix@") +set(bindir "@bindir@") +set(includedir "@includedir@") +set(libdir "@libdir@") +set(_sdl2net_extra_static_libraries "@INETLIB@;@PC_LIBS@") +string(STRIP "${_sdl2net_extra_static_libraries}" _sdl2net_extra_static_libraries) + +set(_sdl2net_bindir "${bindir}") +set(_sdl2net_libdir "${libdir}") +set(_sdl2net_incdir "${includedir}/SDL2") + +# Convert _sdl2net_extra_static_libraries to list and keep only libraries +string(REGEX MATCHALL "(-[lm]([-a-zA-Z0-9._]+))|(-Wl,[^ ]*framework[^ ]*)" _sdl2net_extra_static_libraries "${_sdl2net_extra_static_libraries}") +string(REGEX REPLACE "^-l" "" _sdl2net_extra_static_libraries "${_sdl2net_extra_static_libraries}") +string(REGEX REPLACE ";-l" ";" _sdl2net_extra_static_libraries "${_sdl2net_extra_static_libraries}") + +unset(prefix) +unset(exec_prefix) +unset(bindir) +unset(includedir) +unset(libdir) + +include(CMakeFindDependencyMacro) + +if(NOT TARGET SDL2_net::SDL2_net) + add_library(SDL2_net::SDL2_net SHARED IMPORTED) + set_target_properties(SDL2_net::SDL2_net + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_sdl2net_incdir}" + COMPATIBLE_INTERFACE_BOOL "SDL2_SHARED" + INTERFACE_SDL2_SHARED "ON" + ) + if(WIN32) + set_target_properties(SDL2_net::SDL2_net + PROPERTIES + IMPORTED_LOCATION "${_sdl2net_bindir}/SDL2_net.dll" + IMPORTED_IMPLIB "${_sdl2net_libdir}/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2_net.dll${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) + else() + set_target_properties(SDL2_net::SDL2_net + PROPERTIES + IMPORTED_LOCATION "${_sdl2net_libdir}/${CMAKE_SHARED_LIBRARY_PREFIX}SDL2_net${CMAKE_SHARED_LIBRARY_SUFFIX}" + ) + endif() +endif() + +if(NOT TARGET SDL2_net::SDL2_net-static) + add_library(SDL2_net::SDL2_net-static STATIC IMPORTED) + + set_target_properties(SDL2_net::SDL2_net-static + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_sdl2net_incdir}" + IMPORTED_LOCATION "${_sdl2net_libdir}/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2_net${CMAKE_STATIC_LIBRARY_SUFFIX}" + INTERFACE_LINK_LIBRARIES "${_sdl2net_extra_static_libraries}" + ) +endif() + +unset(_sdl2net_extra_static_libraries) +unset(_sdl2net_bindir) +unset(_sdl2net_libdir) +unset(_sdl2net_incdir) diff --git a/vs/sdl2net/showinterfaces.c b/vs/sdl2net/showinterfaces.c new file mode 100644 index 00000000000..4b20eeca1bc --- /dev/null +++ b/vs/sdl2net/showinterfaces.c @@ -0,0 +1,41 @@ +/* + showinterfaces: a simple test program to show the network interfaces + Copyright (C) 1997-2022 Sam Lantinga + + 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. +*/ +#include "SDL_net.h" + +#define MAX_ADDRESSES 10 + +int main(int argc, char *argv[]) +{ + IPaddress addresses[MAX_ADDRESSES]; + int i, count; + + count = SDLNet_GetLocalAddresses(addresses, MAX_ADDRESSES); + SDL_Log("Found %d local addresses", count); + for ( i = 0; i < count; ++i ) { + SDL_Log("%d: %d.%d.%d.%d - %s", i+1, + (addresses[i].host >> 0) & 0xFF, + (addresses[i].host >> 8) & 0xFF, + (addresses[i].host >> 16) & 0xFF, + (addresses[i].host >> 24) & 0xFF, + SDLNet_ResolveIP(&addresses[i])); + } + return 0; +} diff --git a/vs/sdl2net/test-versioning.sh b/vs/sdl2net/test-versioning.sh new file mode 100755 index 00000000000..26d3b43cb97 --- /dev/null +++ b/vs/sdl2net/test-versioning.sh @@ -0,0 +1,172 @@ +#!/bin/sh +# Copyright 2022 Collabora Ltd. +# SPDX-License-Identifier: Zlib + +set -eu + +# Needed so sed doesn't report illegal byte sequences on macOS +export LC_CTYPE=C + +ref_major=$(sed -ne 's/^#define SDL_NET_MAJOR_VERSION *//p' SDL_net.h) +ref_minor=$(sed -ne 's/^#define SDL_NET_MINOR_VERSION *//p' SDL_net.h) +ref_micro=$(sed -ne 's/^#define SDL_NET_PATCHLEVEL *//p' SDL_net.h) +ref_version="${ref_major}.${ref_minor}.${ref_micro}" +ref_sdl_req=$(sed -ne 's/^SDL_VERSION=//p' configure.ac) + +tests=0 +failed=0 + +ok () { + tests=$(( tests + 1 )) + echo "ok - $*" +} + +not_ok () { + tests=$(( tests + 1 )) + echo "not ok - $*" + failed=1 +} + +major=$(sed -Ene 's/^m4_define\(\[MAJOR_VERSION_MACRO\], \[([0-9]*)\]\)$/\1/p' configure.ac) +minor=$(sed -Ene 's/^m4_define\(\[MINOR_VERSION_MACRO\], \[([0-9]*)\]\)$/\1/p' configure.ac) +micro=$(sed -Ene 's/^m4_define\(\[MICRO_VERSION_MACRO\], \[([0-9]*)\]\)$/\1/p' configure.ac) +version="${major}.${minor}.${micro}" + +if [ "$ref_version" = "$version" ]; then + ok "configure.ac $version" +else + not_ok "configure.ac $version disagrees with SDL_net.h $ref_version" +fi + +major=$(sed -ne 's/^MAJOR_VERSION *= *//p' Makefile.os2) +minor=$(sed -ne 's/^MINOR_VERSION *= *//p' Makefile.os2) +micro=$(sed -ne 's/^MICRO_VERSION *= *//p' Makefile.os2) +version="${major}.${minor}.${micro}" + +if [ "$ref_version" = "$version" ]; then + ok "Makefile.os2 $version" +else + not_ok "Makefile.os2 $version disagrees with SDL_net.h $ref_version" +fi + +for rcfile in version.rc VisualC/Version.rc; do + tuple=$(sed -ne 's/^ *FILEVERSION *//p' "$rcfile" | tr -d '\r') + ref_tuple="${ref_major},${ref_minor},${ref_micro},0" + + if [ "$ref_tuple" = "$tuple" ]; then + ok "$rcfile FILEVERSION $tuple" + else + not_ok "$rcfile FILEVERSION $tuple disagrees with SDL_net.h $ref_tuple" + fi + + tuple=$(sed -ne 's/^ *PRODUCTVERSION *//p' "$rcfile" | tr -d '\r') + + if [ "$ref_tuple" = "$tuple" ]; then + ok "$rcfile PRODUCTVERSION $tuple" + else + not_ok "$rcfile PRODUCTVERSION $tuple disagrees with SDL_net.h $ref_tuple" + fi + + tuple=$(sed -Ene 's/^ *VALUE "FileVersion", "([0-9, ]+)\\0"\r?$/\1/p' "$rcfile" | tr -d '\r') + ref_tuple="${ref_major}, ${ref_minor}, ${ref_micro}, 0" + + if [ "$ref_tuple" = "$tuple" ]; then + ok "$rcfile FileVersion $tuple" + else + not_ok "$rcfile FileVersion $tuple disagrees with SDL_net.h $ref_tuple" + fi + + tuple=$(sed -Ene 's/^ *VALUE "ProductVersion", "([0-9, ]+)\\0"\r?$/\1/p' "$rcfile" | tr -d '\r') + + if [ "$ref_tuple" = "$tuple" ]; then + ok "$rcfile ProductVersion $tuple" + else + not_ok "$rcfile ProductVersion $tuple disagrees with SDL_net.h $ref_tuple" + fi +done + +version=$(sed -Ene '/CFBundleShortVersionString/,+1 s/.*(.*)<\/string>.*/\1/p' Xcode/Info-Framework.plist) + +if [ "$ref_version" = "$version" ]; then + ok "Info-Framework.plist CFBundleShortVersionString $version" +else + not_ok "Info-Framework.plist CFBundleShortVersionString $version disagrees with SDL_net.h $ref_version" +fi + +version=$(sed -Ene '/CFBundleVersion/,+1 s/.*(.*)<\/string>.*/\1/p' Xcode/Info-Framework.plist) + +if [ "$ref_version" = "$version" ]; then + ok "Info-Framework.plist CFBundleVersion $version" +else + not_ok "Info-Framework.plist CFBundleVersion $version disagrees with SDL_net.h $ref_version" +fi + +# For simplicity this assumes we'll never break ABI before SDL 3. +dylib_compat=$(sed -Ene 's/.*DYLIB_COMPATIBILITY_VERSION = (.*);$/\1/p' Xcode/SDL_net.xcodeproj/project.pbxproj) +ref='1.0.0 +1.0.0' + +if [ "$ref" = "$dylib_compat" ]; then + ok "project.pbxproj DYLIB_COMPATIBILITY_VERSION is consistent" +else + not_ok "project.pbxproj DYLIB_COMPATIBILITY_VERSION is inconsistent" +fi + +dylib_cur=$(sed -Ene 's/.*DYLIB_CURRENT_VERSION = (.*);$/\1/p' Xcode/SDL_net.xcodeproj/project.pbxproj) + +case "$ref_minor" in + (*[02468]) + major="$(( ref_minor * 100 + 1 ))" + minor="$ref_micro" + ;; + (*) + major="$(( ref_minor * 100 + ref_micro + 1 ))" + minor="0" + ;; +esac + +ref="${major}.${minor}.0 +${major}.${minor}.0" + +if [ "$ref" = "$dylib_cur" ]; then + ok "project.pbxproj DYLIB_CURRENT_VERSION is consistent" +else + not_ok "project.pbxproj DYLIB_CURRENT_VERSION is inconsistent, expected $ref" +fi + +major=$(sed -ne 's/^set(MAJOR_VERSION \([0-9]*\))$/\1/p' CMakeLists.txt) +minor=$(sed -ne 's/^set(MINOR_VERSION \([0-9]*\))$/\1/p' CMakeLists.txt) +micro=$(sed -ne 's/^set(MICRO_VERSION \([0-9]*\))$/\1/p' CMakeLists.txt) +sdl_req=$(sed -ne 's/^set(SDL_REQUIRED_VERSION \([0-9.]*\))$/\1/p' CMakeLists.txt) +dylib_cmake=$(sed -ne 's/^set(DYLIB_COMPATIBILITY_VERSION "\([0-9]*\)")$/\1/p' CMakeLists.txt) +ref='1' +version="${major}.${minor}.${micro}" + +if [ "$ref_version" = "$version" ]; then + ok "CMakeLists.txt $version" +else + not_ok "CMakeLists.txt $version disagrees with SDL_image.h $ref_version" +fi + +if [ "$ref_sdl_req" = "$sdl_req" ]; then + ok "CMakeLists.txt SDL_REQUIRED_VERSION is consistent" +else + not_ok "CMakeLists.txt SDL_REQUIRED_VERSION=$sdl_req disagrees with configure.ac SDL_VERSION=$ref_sdl_req" +fi + +if [ "$ref" = "$dylib_cmake" ]; then + ok "CMakeLists.txt DYLIB_COMPATIBILITY_VERSION is consistent" +else + not_ok "CMakeLists.txt DYLIB_COMPATIBILITY_VERSION is inconsistent" +fi + +sdl_req=$(sed -ne 's/\$sdl2_version = "\([0-9.]*\)"$/\1/p' .github/fetch_sdl_vc.ps1) + +if [ "$ref_sdl_req" = "$sdl_req" ]; then + ok ".github/fetch_sdl_vc.ps1 $sdl_req" +else + not_ok ".github/fetch_sdl_vc.ps1 sdl2_version=$sdl_req disagrees with configure.ac SDL_VERSION=$ref_sdl_req" +fi + +echo "1..$tests" +exit "$failed" diff --git a/vs/sdl2net/touch-autofoo.sh b/vs/sdl2net/touch-autofoo.sh new file mode 100755 index 00000000000..edd5db3e1b5 --- /dev/null +++ b/vs/sdl2net/touch-autofoo.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +# Run this script from the root of $srcdir to touch the +# autotools generated files, so that the build procedure +# doesn't attempt to regenerate them. + +touch aclocal.m4 configure Makefile.in diff --git a/vs/sdl2net/version.rc b/vs/sdl2net/version.rc new file mode 100644 index 00000000000..29b743afec5 --- /dev/null +++ b/vs/sdl2net/version.rc @@ -0,0 +1,38 @@ + +#include "winresrc.h" + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 2,2,0,0 + PRODUCTVERSION 2,2,0,0 + FILEFLAGSMASK 0x3fL + FILEFLAGS 0x0L + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "\0" + VALUE "FileDescription", "SDL_net\0" + VALUE "FileVersion", "2, 2, 0, 0\0" + VALUE "InternalName", "SDL_net\0" + VALUE "LegalCopyright", "Copyright 2022 Sam Lantinga\0" + VALUE "OriginalFilename", "SDL_net.dll\0" + VALUE "ProductName", "Simple DirectMedia Layer\0" + VALUE "ProductVersion", "2, 2, 0, 0\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/vs/sdlnet/build-dosbox.sh b/vs/sdlnet/build-dosbox.sh index b5dcc2185fb..48afccc1ad8 100755 --- a/vs/sdlnet/build-dosbox.sh +++ b/vs/sdlnet/build-dosbox.sh @@ -1,11 +1,11 @@ -#!/usr/bin/env bash +#!/bin/sh rm -Rfv linux-host || exit 1 mkdir -p linux-host || exit 1 rm -Rfv linux-build || exit 1 mkdir -p linux-build || exit 1 -if [ "$1" == "hx-dos" ]; then +if [ "$1" = "hx-dos" ]; then cp SDLnet.c SDLnet.c.default || exit 1 chmod +w SDLnet.c || exit 1 sed -b -e 's/^\(#elif defined(__WIN32__)\)/\1 \&\& 0/' SDLnet.c.default >SDLnet.c || exit 1 @@ -47,11 +47,11 @@ make -j3 || exit 1 make install || exit 1 # will install into ./linux-host cd "$srcdir" || exit 1 -if [ "$1" == "hx-dos" ]; then +if [ "$1" = "hx-dos" ]; then cp SDLnet.c.default SDLnet.c || exit 1 fi # Delete libSDLmain.a and libSDL.a from archive file # otherwise linking will fail on macOS ar dv linux-host/lib/libSDL_net.a libSDLmain.a || true -ar dv linux-host/lib/libSDL_net.a libSDL.a || true \ No newline at end of file +ar dv linux-host/lib/libSDL_net.a libSDL.a || true diff --git a/vs/zlib/build-dosbox.sh b/vs/zlib/build-dosbox.sh index 45649dd09a6..5a73a172d0b 100755 --- a/vs/zlib/build-dosbox.sh +++ b/vs/zlib/build-dosbox.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh rm -Rfv linux-host || exit 1 mkdir -p linux-host || exit 1 diff --git a/vs/zlib/contrib/minizip/ioapi.c b/vs/zlib/contrib/minizip/ioapi.c index 782d32469ae..322a1e11743 100644 --- a/vs/zlib/contrib/minizip/ioapi.c +++ b/vs/zlib/contrib/minizip/ioapi.c @@ -19,6 +19,11 @@ #define FOPEN_FUNC(filename, mode) fopen(filename, mode) #define FTELLO_FUNC(stream) ftello(stream) #define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin) +#elif defined(__linux__) && !defined(__GLIBC__) +// Also the case with musl on Linux +#define FOPEN_FUNC(filename, mode) fopen(filename, mode) +#define FTELLO_FUNC(stream) ftello(stream) +#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin) #else #define FOPEN_FUNC(filename, mode) fopen64(filename, mode) #define FTELLO_FUNC(stream) ftello64(stream)